ZGlmZiAtLWdpdCBhL2NhbWVyYS9DYW1lcmFNZXRhZGF0YS5jcHAgYi9jYW1lcmEvQ2FtZXJhTWV0YWRhdGEuY3BwCmluZGV4IGUxNDNlMDUuLjkyZmU4NGIgMTAwNjQ0Ci0tLSBhL2NhbWVyYS9DYW1lcmFNZXRhZGF0YS5jcHAKKysrIGIvY2FtZXJhL0NhbWVyYU1ldGFkYXRhLmNwcApAQCAtMjIsNyArMjIsNiBAQAogCiAjaW5jbHVkZSA8YmluZGVyL1BhcmNlbC5oPgogI2luY2x1ZGUgPGNhbWVyYS9DYW1lcmFNZXRhZGF0YS5oPgotI2luY2x1ZGUgPGNhbWVyYS9WZW5kb3JUYWdEZXNjcmlwdG9yLmg+CiAKIG5hbWVzcGFjZSBhbmRyb2lkIHsKIApAQCAtNDA5LDYgKzQwOCw3OSBAQAogICAgIHJldHVybiByZXM7CiB9CiAKK3N0YXR1c190IENhbWVyYU1ldGFkYXRhOjpyZW1vdmVQZXJtaXNzaW9uRW50cmllcyhtZXRhZGF0YV92ZW5kb3JfaWRfdCB2ZW5kb3JJZCwKKyAgICAgICAgc3RkOjp2ZWN0b3I8aW50MzJfdD4gKnRhZ3NSZW1vdmVkKSB7CisgICAgdWludDMyX3QgdGFnQ291bnQgPSAwOworICAgIHN0ZDo6dmVjdG9yPHVpbnQzMl90PiB0YWdzVG9SZW1vdmU7CisKKyAgICBpZiAodGFnc1JlbW92ZWQgPT0gbnVsbHB0cikgeworICAgICAgICByZXR1cm4gQkFEX1ZBTFVFOworICAgIH0KKworICAgIHNwPFZlbmRvclRhZ0Rlc2NyaXB0b3I+IHZUYWdzID0gVmVuZG9yVGFnRGVzY3JpcHRvcjo6Z2V0R2xvYmFsVmVuZG9yVGFnRGVzY3JpcHRvcigpOworICAgIGlmICgobnVsbHB0ciA9PSB2VGFncy5nZXQoKSkgfHwgKDAgPj0gdlRhZ3MtPmdldFRhZ0NvdW50KCkpKSB7CisgICAgICAgIHNwPFZlbmRvclRhZ0Rlc2NyaXB0b3JDYWNoZT4gY2FjaGUgPQorICAgICAgICAgICAgVmVuZG9yVGFnRGVzY3JpcHRvckNhY2hlOjpnZXRHbG9iYWxWZW5kb3JUYWdDYWNoZSgpOworICAgICAgICBpZiAoY2FjaGUuZ2V0KCkpIHsKKyAgICAgICAgICAgIGNhY2hlLT5nZXRWZW5kb3JUYWdEZXNjcmlwdG9yKHZlbmRvcklkLCAmdlRhZ3MpOworICAgICAgICB9CisgICAgfQorCisgICAgaWYgKChudWxscHRyICE9IHZUYWdzLmdldCgpKSAmJiAodlRhZ3MtPmdldFRhZ0NvdW50KCkgPiAwKSkgeworICAgICAgICB0YWdDb3VudCA9IHZUYWdzLT5nZXRUYWdDb3VudCgpOworICAgICAgICB1aW50MzJfdCAqdmVuZG9yVGFncyA9IG5ldyB1aW50MzJfdFt0YWdDb3VudF07CisgICAgICAgIGlmIChudWxscHRyID09IHZlbmRvclRhZ3MpIHsKKyAgICAgICAgICAgIHJldHVybiBOT19NRU1PUlk7CisgICAgICAgIH0KKyAgICAgICAgdlRhZ3MtPmdldFRhZ0FycmF5KHZlbmRvclRhZ3MpOworCisgICAgICAgIHRhZ3NUb1JlbW92ZS5yZXNlcnZlKHRhZ0NvdW50KTsKKyAgICAgICAgdGFnc1RvUmVtb3ZlLmluc2VydCh0YWdzVG9SZW1vdmUuYmVnaW4oKSwgdmVuZG9yVGFncywgdmVuZG9yVGFncyArIHRhZ0NvdW50KTsKKworICAgICAgICBkZWxldGUgW10gdmVuZG9yVGFnczsKKyAgICAgICAgdGFnQ291bnQgPSAwOworICAgIH0KKworICAgIGF1dG8gdGFnc05lZWRpbmdQZXJtaXNzaW9uID0gZ2V0X2NhbWVyYV9tZXRhZGF0YV9wZXJtaXNzaW9uX25lZWRlZCgmdGFnQ291bnQpOworICAgIGlmICh0YWdDb3VudCA+IDApIHsKKyAgICAgICAgdGFnc1RvUmVtb3ZlLnJlc2VydmUodGFnc1RvUmVtb3ZlLmNhcGFjaXR5KCkgKyB0YWdDb3VudCk7CisgICAgICAgIHRhZ3NUb1JlbW92ZS5pbnNlcnQodGFnc1RvUmVtb3ZlLmVuZCgpLCB0YWdzTmVlZGluZ1Blcm1pc3Npb24sCisgICAgICAgICAgICAgICAgdGFnc05lZWRpbmdQZXJtaXNzaW9uICsgdGFnQ291bnQpOworICAgIH0KKworICAgIHRhZ3NSZW1vdmVkLT5yZXNlcnZlKHRhZ3NUb1JlbW92ZS5zaXplKCkpOworICAgIGZvciAoY29uc3QgYXV0byAmaXQgOiB0YWdzVG9SZW1vdmUpIHsKKyAgICAgICAgaWYgKGV4aXN0cyhpdCkpIHsKKyAgICAgICAgICAgIGF1dG8gcmMgPSBlcmFzZShpdCk7CisgICAgICAgICAgICBpZiAoTk9fRVJST1IgIT0gcmMpIHsKKyAgICAgICAgICAgICAgICBBTE9HRSgiJXM6IEZhaWxlZCB0byBlcmFzZSB0YWc6ICV4IiwgX19mdW5jX18sIGl0KTsKKyAgICAgICAgICAgICAgICByZXR1cm4gcmM7CisgICAgICAgICAgICB9CisgICAgICAgICAgICB0YWdzUmVtb3ZlZC0+cHVzaF9iYWNrKGl0KTsKKyAgICAgICAgfQorICAgIH0KKworICAgIC8vIFVwZGF0ZSB0aGUgYXZhaWxhYmxlIGNoYXJhY3RlcnN0aWNzIGFjY29yZGluZ2x5CisgICAgaWYgKGV4aXN0cyhBTkRST0lEX1JFUVVFU1RfQVZBSUxBQkxFX0NIQVJBQ1RFUklTVElDU19LRVlTKSkgeworICAgICAgICBzdGQ6OnZlY3Rvcjx1aW50MzJfdD4gY3VycmVudEtleXM7CisKKyAgICAgICAgc3RkOjpzb3J0KHRhZ3NSZW1vdmVkLT5iZWdpbigpLCB0YWdzUmVtb3ZlZC0+ZW5kKCkpOworICAgICAgICBhdXRvIGtleXMgPSBmaW5kKEFORFJPSURfUkVRVUVTVF9BVkFJTEFCTEVfQ0hBUkFDVEVSSVNUSUNTX0tFWVMpOworICAgICAgICBjdXJyZW50S2V5cy5yZXNlcnZlKGtleXMuY291bnQpOworICAgICAgICBjdXJyZW50S2V5cy5pbnNlcnQoY3VycmVudEtleXMuZW5kKCksIGtleXMuZGF0YS5pMzIsIGtleXMuZGF0YS5pMzIgKyBrZXlzLmNvdW50KTsKKyAgICAgICAgc3RkOjpzb3J0KGN1cnJlbnRLZXlzLmJlZ2luKCksIGN1cnJlbnRLZXlzLmVuZCgpKTsKKworICAgICAgICBzdGQ6OnZlY3RvcjxpbnQzMl90PiBuZXdLZXlzKGtleXMuY291bnQpOworICAgICAgICBhdXRvIGVuZCA9IHN0ZDo6c2V0X2RpZmZlcmVuY2UoY3VycmVudEtleXMuYmVnaW4oKSwgY3VycmVudEtleXMuZW5kKCksIHRhZ3NSZW1vdmVkLT5iZWdpbigpLAorICAgICAgICAgICAgICAgIHRhZ3NSZW1vdmVkLT5lbmQoKSwgbmV3S2V5cy5iZWdpbigpKTsKKyAgICAgICAgbmV3S2V5cy5yZXNpemUoZW5kIC0gbmV3S2V5cy5iZWdpbigpKTsKKworICAgICAgICB1cGRhdGUoQU5EUk9JRF9SRVFVRVNUX0FWQUlMQUJMRV9DSEFSQUNURVJJU1RJQ1NfS0VZUywgbmV3S2V5cy5kYXRhKCksIG5ld0tleXMuc2l6ZSgpKTsKKyAgICB9CisKKyAgICByZXR1cm4gTk9fRVJST1I7Cit9CisKIHZvaWQgQ2FtZXJhTWV0YWRhdGE6OmR1bXAoaW50IGZkLCBpbnQgdmVyYm9zaXR5LCBpbnQgaW5kZW50YXRpb24pIGNvbnN0IHsKICAgICBkdW1wX2luZGVudGVkX2NhbWVyYV9tZXRhZGF0YShtQnVmZmVyLCBmZCwgdmVyYm9zaXR5LCBpbmRlbnRhdGlvbik7CiB9CmRpZmYgLS1naXQgYS9jYW1lcmEvVmVuZG9yVGFnRGVzY3JpcHRvci5jcHAgYi9jYW1lcmEvVmVuZG9yVGFnRGVzY3JpcHRvci5jcHAKaW5kZXggYTg2Y2M4Ny4uZDcxM2QyZCAxMDA2NDQKLS0tIGEvY2FtZXJhL1ZlbmRvclRhZ0Rlc2NyaXB0b3IuY3BwCisrKyBiL2NhbWVyYS9WZW5kb3JUYWdEZXNjcmlwdG9yLmNwcApAQCAtMzE1LDYgKzMxNSwxMCBAQAogICAgIHJldHVybiBPSzsKIH0KIAorc3NpemVfdCBWZW5kb3JUYWdEZXNjcmlwdG9yOjpnZXRTZWN0aW9uSW5kZXgodWludDMyX3QgdGFnKSBjb25zdCB7CisgICAgcmV0dXJuIG1UYWdUb1NlY3Rpb25NYXAudmFsdWVGb3IodGFnKTsKK30KKwogdm9pZCBWZW5kb3JUYWdEZXNjcmlwdG9yOjpkdW1wKGludCBmZCwgaW50IHZlcmJvc2l0eSwgaW50IGluZGVudGF0aW9uKSBjb25zdCB7CiAKICAgICBzaXplX3Qgc2l6ZSA9IG1UYWdUb05hbWVNYXAuc2l6ZSgpOwpAQCAtNDA3LDYgKzQxMSwxMSBAQAogICAgIHJldHVybiByZXM7CiB9CiAKK2NvbnN0IHN0ZDo6dW5vcmRlcmVkX21hcDxtZXRhZGF0YV92ZW5kb3JfaWRfdCwgc3A8YW5kcm9pZDo6VmVuZG9yVGFnRGVzY3JpcHRvcj4+ICYKKyAgICAgICAgICAgIFZlbmRvclRhZ0Rlc2NyaXB0b3JDYWNoZTo6Z2V0VmVuZG9ySWRzQW5kVGFnRGVzY3JpcHRvcnMoKSB7CisgICAgcmV0dXJuIG1WZW5kb3JNYXA7Cit9CisKIGludCBWZW5kb3JUYWdEZXNjcmlwdG9yQ2FjaGU6OmdldFRhZ0NvdW50KG1ldGFkYXRhX3ZlbmRvcl9pZF90IGlkKSBjb25zdCB7CiAgICAgaW50IHJldCA9IDA7CiAgICAgYXV0byBkZXNjID0gbVZlbmRvck1hcC5maW5kKGlkKTsKZGlmZiAtLWdpdCBhL2NhbWVyYS9haWRsL2FuZHJvaWQvaGFyZHdhcmUvSUNhbWVyYVNlcnZpY2UuYWlkbCBiL2NhbWVyYS9haWRsL2FuZHJvaWQvaGFyZHdhcmUvSUNhbWVyYVNlcnZpY2UuYWlkbAppbmRleCA5YzBmMjhiLi5jMDM4MzE0IDEwMDY0NAotLS0gYS9jYW1lcmEvYWlkbC9hbmRyb2lkL2hhcmR3YXJlL0lDYW1lcmFTZXJ2aWNlLmFpZGwKKysrIGIvY2FtZXJhL2FpZGwvYW5kcm9pZC9oYXJkd2FyZS9JQ2FtZXJhU2VydmljZS5haWRsCkBAIC0xNDksOCArMTQ5LDEwIEBACiAgICAgY29uc3QgaW50IEFQSV9WRVJTSU9OXzEgPSAxOwogICAgIGNvbnN0IGludCBBUElfVkVSU0lPTl8yID0gMjsKIAotICAgIC8vIERldGVybWluZXMgaWYgYSBwYXJ0aWN1bGFyIEFQSSB2ZXJzaW9uIGlzIHN1cHBvcnRlZCBkaXJlY3RseQorICAgIC8vIERldGVybWluZXMgaWYgYSBwYXJ0aWN1bGFyIEFQSSB2ZXJzaW9uIGlzIHN1cHBvcnRlZCBkaXJlY3RseSBmb3IgYSBjYW1lcmFJZC4KICAgICBib29sZWFuIHN1cHBvcnRzQ2FtZXJhQXBpKFN0cmluZyBjYW1lcmFJZCwgaW50IGFwaVZlcnNpb24pOworICAgIC8vIERldGVybWluZXMgaWYgYSBjYW1lcmFJZCBpcyBhIGhpZGRlbiBwaHlzaWNhbCBjYW1lcmEgb2YgYSBsb2dpY2FsIG11bHRpLWNhbWVyYS4KKyAgICBib29sZWFuIGlzSGlkZGVuUGh5c2ljYWxDYW1lcmEoU3RyaW5nIGNhbWVyYUlkKTsKIAogICAgIHZvaWQgc2V0VG9yY2hNb2RlKFN0cmluZyBjYW1lcmFJZCwgYm9vbGVhbiBlbmFibGVkLCBJQmluZGVyIGNsaWVudEJpbmRlcik7CiAKZGlmZiAtLWdpdCBhL2NhbWVyYS9jYW1lcmEyL091dHB1dENvbmZpZ3VyYXRpb24uY3BwIGIvY2FtZXJhL2NhbWVyYTIvT3V0cHV0Q29uZmlndXJhdGlvbi5jcHAKaW5kZXggZmViMDRjMi4uMzIxZWIwOCAxMDA2NDQKLS0tIGEvY2FtZXJhL2NhbWVyYTIvT3V0cHV0Q29uZmlndXJhdGlvbi5jcHAKKysrIGIvY2FtZXJhL2NhbWVyYTIvT3V0cHV0Q29uZmlndXJhdGlvbi5jcHAKQEAgLTE3NSw2ICsxNzUsMTIgQEAKICAgICBtSXNTaGFyZWQgPSBpc1NoYXJlZDsKIH0KIAorT3V0cHV0Q29uZmlndXJhdGlvbjo6T3V0cHV0Q29uZmlndXJhdGlvbigKKyAgICAgICAgY29uc3Qgc3RkOjp2ZWN0b3I8c3A8SUdyYXBoaWNCdWZmZXJQcm9kdWNlcj4+JiBnYnBzLAorICAgIGludCByb3RhdGlvbiwgaW50IHN1cmZhY2VTZXRJRCwgIGludCBzdXJmYWNlVHlwZSwgaW50IHdpZHRoLCBpbnQgaGVpZ2h0LCBib29sIGlzU2hhcmVkKQorICA6IG1HYnBzKGdicHMpLCBtUm90YXRpb24ocm90YXRpb24pLCBtU3VyZmFjZVNldElEKHN1cmZhY2VTZXRJRCksIG1TdXJmYWNlVHlwZShzdXJmYWNlVHlwZSksCisgICAgbVdpZHRoKHdpZHRoKSwgbUhlaWdodChoZWlnaHQpLCBtSXNEZWZlcnJlZChmYWxzZSksIG1Jc1NoYXJlZChpc1NoYXJlZCkgeyB9CisKIHN0YXR1c190IE91dHB1dENvbmZpZ3VyYXRpb246OndyaXRlVG9QYXJjZWwoYW5kcm9pZDo6UGFyY2VsKiBwYXJjZWwpIGNvbnN0IHsKIAogICAgIGlmIChwYXJjZWwgPT0gbnVsbHB0cikgcmV0dXJuIEJBRF9WQUxVRTsKZGlmZiAtLWdpdCBhL2NhbWVyYS9jYW1lcmFzZXJ2ZXIvQW5kcm9pZC5icCBiL2NhbWVyYS9jYW1lcmFzZXJ2ZXIvQW5kcm9pZC5icApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lZjY5MzBjCi0tLSAvZGV2L251bGwKKysrIGIvY2FtZXJhL2NhbWVyYXNlcnZlci9BbmRyb2lkLmJwCkBAIC0wLDAgKzEsNDYgQEAKKy8vIENvcHlyaWdodCAyMDE4IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKy8vCisvLyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKy8vIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKy8vIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorLy8KKy8vICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisvLworLy8gVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorLy8gZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKy8vIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorLy8gU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorLy8gbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisKK2NjX2JpbmFyeSB7CisgICAgbmFtZTogImNhbWVyYXNlcnZlciIsCisKKyAgICBzcmNzOiBbIm1haW5fY2FtZXJhc2VydmVyLmNwcCJdLAorCisgICAgc2hhcmVkX2xpYnM6IFsKKyAgICAgICAgImxpYmNhbWVyYXNlcnZpY2UiLAorICAgICAgICAibGlibG9nIiwKKyAgICAgICAgImxpYnV0aWxzIiwKKyAgICAgICAgImxpYnVpIiwKKyAgICAgICAgImxpYmd1aSIsCisgICAgICAgICJsaWJiaW5kZXIiLAorICAgICAgICAibGliaGlkbHRyYW5zcG9ydCIsCisgICAgICAgICJhbmRyb2lkLmhhcmR3YXJlLmNhbWVyYS5jb21tb25AMS4wIiwKKyAgICAgICAgImFuZHJvaWQuaGFyZHdhcmUuY2FtZXJhLnByb3ZpZGVyQDIuNCIsCisgICAgICAgICJhbmRyb2lkLmhhcmR3YXJlLmNhbWVyYS5kZXZpY2VAMS4wIiwKKyAgICAgICAgImFuZHJvaWQuaGFyZHdhcmUuY2FtZXJhLmRldmljZUAzLjIiLAorICAgIF0sCisgICAgY29tcGlsZV9tdWx0aWxpYjogIjMyIiwKKyAgICBjZmxhZ3M6IFsKKyAgICAgICAgIi1XYWxsIiwKKyAgICAgICAgIi1XZXh0cmEiLAorICAgICAgICAiLVdlcnJvciIsCisgICAgICAgICItV25vLXVudXNlZC1wYXJhbWV0ZXIiLAorICAgIF0sCisKKyAgICBpbml0X3JjOiBbImNhbWVyYXNlcnZlci5yYyJdLAorCisgICAgdmludGZfZnJhZ21lbnRzOiBbCisgICAgICAgICJtYW5pZmVzdF9hbmRyb2lkLmZyYW1ld29ya3MuY2FtZXJhc2VydmljZS5zZXJ2aWNlQDIuMC54bWwiLAorICAgIF0sCit9CmRpZmYgLS1naXQgYS9jYW1lcmEvY2FtZXJhc2VydmVyL0FuZHJvaWQubWsgYi9jYW1lcmEvY2FtZXJhc2VydmVyL0FuZHJvaWQubWsKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGI4Yzk0ZTYuLjAwMDAwMDAKLS0tIGEvY2FtZXJhL2NhbWVyYXNlcnZlci9BbmRyb2lkLm1rCisrKyAvZGV2L251bGwKQEAgLTEsNDIgKzAsMCBAQAotIyBDb3B5cmlnaHQgMjAxNSBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0Ci0jCi0jIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwotIyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCi0jIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotIwotIyAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotIwotIyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCi0jIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCi0jIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgotIyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCi0jIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgotCi1MT0NBTF9QQVRIOj0gJChjYWxsIG15LWRpcikKLQotaW5jbHVkZSAkKENMRUFSX1ZBUlMpCi0KLUxPQ0FMX1NSQ19GSUxFUzo9IFwKLQltYWluX2NhbWVyYXNlcnZlci5jcHAKLQotTE9DQUxfU0hBUkVEX0xJQlJBUklFUyA6PSBcCi0JbGliY2FtZXJhc2VydmljZSBcCi0JbGlibG9nIFwKLQlsaWJ1dGlscyBcCi0JbGlidWkgXAotCWxpYmd1aSBcCi0JbGliYmluZGVyIFwKLQlsaWJoaWRsdHJhbnNwb3J0IFwKLQlhbmRyb2lkLmhhcmR3YXJlLmNhbWVyYS5jb21tb25AMS4wIFwKLQlhbmRyb2lkLmhhcmR3YXJlLmNhbWVyYS5wcm92aWRlckAyLjQgXAotCWFuZHJvaWQuaGFyZHdhcmUuY2FtZXJhLmRldmljZUAxLjAgXAotCWFuZHJvaWQuaGFyZHdhcmUuY2FtZXJhLmRldmljZUAzLjIKLQotTE9DQUxfTU9EVUxFOj0gY2FtZXJhc2VydmVyCi1MT0NBTF8zMl9CSVRfT05MWSA6PSB0cnVlCi0KLUxPQ0FMX0NGTEFHUyArPSAtV2FsbCAtV2V4dHJhIC1XZXJyb3IgLVduby11bnVzZWQtcGFyYW1ldGVyCi0KLUxPQ0FMX0lOSVRfUkMgOj0gY2FtZXJhc2VydmVyLnJjCi0KLWluY2x1ZGUgJChCVUlMRF9FWEVDVVRBQkxFKQpkaWZmIC0tZ2l0IGEvY2FtZXJhL2NhbWVyYXNlcnZlci9tYWluX2NhbWVyYXNlcnZlci5jcHAgYi9jYW1lcmEvY2FtZXJhc2VydmVyL21haW5fY2FtZXJhc2VydmVyLmNwcAppbmRleCAzOTcyNDM2Li41M2IzZDg0IDEwMDY0NAotLS0gYS9jYW1lcmEvY2FtZXJhc2VydmVyL21haW5fY2FtZXJhc2VydmVyLmNwcAorKysgYi9jYW1lcmEvY2FtZXJhc2VydmVyL21haW5fY2FtZXJhc2VydmVyLmNwcApAQCAtMjYsOCArMjYsOSBAQAogewogICAgIHNpZ25hbChTSUdQSVBFLCBTSUdfSUdOKTsKIAotICAgIC8vIFNldCAzIHRocmVhZHMgZm9yIEhJREwgY2FsbHMKLSAgICBoYXJkd2FyZTo6Y29uZmlndXJlUnBjVGhyZWFkcG9vbCgzLCAvKndpbGxqb2luKi8gZmFsc2UpOworICAgIC8vIFNldCA1IHRocmVhZHMgZm9yIEhJREwgY2FsbHMuIE5vdyBjYW1lcmFzZXJ2ZXIgd2lsbCBzZXJ2ZSBISURMIGNhbGxzIGluCisgICAgLy8gYWRkaXRpb24gdG8gY29uc3VtaW5nIHRoZW0gZnJvbSB0aGUgQ2FtZXJhIEhBTCBhcyB3ZWxsLgorICAgIGhhcmR3YXJlOjpjb25maWd1cmVScGNUaHJlYWRwb29sKDUsIC8qd2lsbGpvaW4qLyBmYWxzZSk7CiAKICAgICBzcDxQcm9jZXNzU3RhdGU+IHByb2MoUHJvY2Vzc1N0YXRlOjpzZWxmKCkpOwogICAgIHNwPElTZXJ2aWNlTWFuYWdlcj4gc20gPSBkZWZhdWx0U2VydmljZU1hbmFnZXIoKTsKZGlmZiAtLWdpdCBhL2NhbWVyYS9jYW1lcmFzZXJ2ZXIvbWFuaWZlc3RfYW5kcm9pZC5mcmFtZXdvcmtzLmNhbWVyYXNlcnZpY2Uuc2VydmljZUAyLjAueG1sIGIvY2FtZXJhL2NhbWVyYXNlcnZlci9tYW5pZmVzdF9hbmRyb2lkLmZyYW1ld29ya3MuY2FtZXJhc2VydmljZS5zZXJ2aWNlQDIuMC54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjAxYzcxNwotLS0gL2Rldi9udWxsCisrKyBiL2NhbWVyYS9jYW1lcmFzZXJ2ZXIvbWFuaWZlc3RfYW5kcm9pZC5mcmFtZXdvcmtzLmNhbWVyYXNlcnZpY2Uuc2VydmljZUAyLjAueG1sCkBAIC0wLDAgKzEsMTEgQEAKKzxtYW5pZmVzdCB2ZXJzaW9uPSIxLjAiIHR5cGU9ImZyYW1ld29yayI+CisgICAgPGhhbD4KKyAgICAgICAgPG5hbWU+YW5kcm9pZC5mcmFtZXdvcmtzLmNhbWVyYXNlcnZpY2Uuc2VydmljZTwvbmFtZT4KKyAgICAgICAgPHRyYW5zcG9ydD5od2JpbmRlcjwvdHJhbnNwb3J0PgorICAgICAgICA8dmVyc2lvbj4yLjA8L3ZlcnNpb24+CisgICAgICAgIDxpbnRlcmZhY2U+CisgICAgICAgICAgICA8bmFtZT5JQ2FtZXJhU2VydmljZTwvbmFtZT4KKyAgICAgICAgICAgIDxpbnN0YW5jZT5kZWZhdWx0PC9pbnN0YW5jZT4KKyAgICAgICAgPC9pbnRlcmZhY2U+CisgICAgPC9oYWw+Cis8L21hbmlmZXN0PgpkaWZmIC0tZ2l0IGEvY2FtZXJhL2luY2x1ZGUvY2FtZXJhL0NhbWVyYU1ldGFkYXRhLmggYi9jYW1lcmEvaW5jbHVkZS9jYW1lcmEvQ2FtZXJhTWV0YWRhdGEuaAppbmRleCBkMjg0NDc3Li44NDRiYjgwIDEwMDY0NAotLS0gYS9jYW1lcmEvaW5jbHVkZS9jYW1lcmEvQ2FtZXJhTWV0YWRhdGEuaAorKysgYi9jYW1lcmEvaW5jbHVkZS9jYW1lcmEvQ2FtZXJhTWV0YWRhdGEuaApAQCAtMjIsNiArMjIsNyBAQAogI2luY2x1ZGUgPHV0aWxzL1N0cmluZzguaD4KICNpbmNsdWRlIDx1dGlscy9WZWN0b3IuaD4KICNpbmNsdWRlIDxiaW5kZXIvUGFyY2VsYWJsZS5oPgorI2luY2x1ZGUgPGNhbWVyYS9WZW5kb3JUYWdEZXNjcmlwdG9yLmg+CiAKIG5hbWVzcGFjZSBhbmRyb2lkIHsKIApAQCAtMTcwLDYgKzE3MSwxMiBAQAogICAgIHN0YXR1c190IGVyYXNlKHVpbnQzMl90IHRhZyk7CiAKICAgICAvKioKKyAgICAgKiBSZW1vdmUgbWV0YWRhdGEgZW50cmllcyB0aGF0IG5lZWQgYWRkaXRpb25hbCBwZXJtaXNzaW9ucy4KKyAgICAgKi8KKyAgICBzdGF0dXNfdCByZW1vdmVQZXJtaXNzaW9uRW50cmllcyhtZXRhZGF0YV92ZW5kb3JfaWRfdCB2ZW5kb3JJZCwKKyAgICAgICAgICAgIHN0ZDo6dmVjdG9yPGludDMyX3Q+ICp0YWdzUmVtb3ZlZCAvKm91dCovKTsKKworICAgIC8qKgogICAgICAqIFN3YXAgdGhlIHVuZGVybHlpbmcgY2FtZXJhIG1ldGFkYXRhIGJldHdlZW4gdGhpcyBhbmQgdGhlIG90aGVyCiAgICAgICogbWV0YWRhdGEgb2JqZWN0LgogICAgICAqLwpkaWZmIC0tZ2l0IGEvY2FtZXJhL2luY2x1ZGUvY2FtZXJhL1ZlbmRvclRhZ0Rlc2NyaXB0b3IuaCBiL2NhbWVyYS9pbmNsdWRlL2NhbWVyYS9WZW5kb3JUYWdEZXNjcmlwdG9yLmgKaW5kZXggOTA0ZmJhMi4uNmY1NTg5MCAxMDA2NDQKLS0tIGEvY2FtZXJhL2luY2x1ZGUvY2FtZXJhL1ZlbmRvclRhZ0Rlc2NyaXB0b3IuaAorKysgYi9jYW1lcmEvaW5jbHVkZS9jYW1lcmEvVmVuZG9yVGFnRGVzY3JpcHRvci5oCkBAIC05OSw2ICs5OSwxMSBAQAogICAgICAgICB2b2lkIGR1bXAoaW50IGZkLCBpbnQgdmVyYm9zaXR5LCBpbnQgaW5kZW50YXRpb24pIGNvbnN0OwogCiAgICAgICAgIC8qKgorICAgICAgICAgKiBHZXQgU2VjdGlvbiBmb3IgY29ycmVzcG9uZGluZyB0YWcuCisgICAgICAgICAqLworICAgICAgICBzc2l6ZV90IGdldFNlY3Rpb25JbmRleCh1aW50MzJfdCB0YWcpIGNvbnN0OworCisgICAgICAgIC8qKgogICAgICAgICAgKiBSZWFkIHZhbHVlcyBWZW5kb3JUYWdEZXNjcmlwdG9yIG9iamVjdCBmcm9tIHRoZSBnaXZlbiBwYXJjZWwuCiAgICAgICAgICAqCiAgICAgICAgICAqIFJldHVybnMgT0sgb24gc3VjY2Vzcywgb3IgYSBuZWdhdGl2ZSBlcnJvciBjb2RlLgpAQCAtMjA2LDYgKzIxMSw5IEBACiAgICAgICovCiAgICAgdm9pZCBkdW1wKGludCBmZCwgaW50IHZlcmJvc2l0eSwgaW50IGluZGVudGF0aW9uKSBjb25zdDsKIAorICAgIGNvbnN0IHN0ZDo6dW5vcmRlcmVkX21hcDxtZXRhZGF0YV92ZW5kb3JfaWRfdCwgc3A8YW5kcm9pZDo6VmVuZG9yVGFnRGVzY3JpcHRvcj4+ICYKKyAgICAgICAgICAgIGdldFZlbmRvcklkc0FuZFRhZ0Rlc2NyaXB0b3JzKCk7CisKICAgcHJvdGVjdGVkOgogICAgIHN0ZDo6dW5vcmRlcmVkX21hcDxtZXRhZGF0YV92ZW5kb3JfaWRfdCwgc3A8YW5kcm9pZDo6VmVuZG9yVGFnRGVzY3JpcHRvcj4+IG1WZW5kb3JNYXA7CiAgICAgc3RydWN0IHZlbmRvcl90YWdfY2FjaGVfb3BzIG1WZW5kb3JDYWNoZU9wczsKZGlmZiAtLWdpdCBhL2NhbWVyYS9pbmNsdWRlL2NhbWVyYS9jYW1lcmEyL091dHB1dENvbmZpZ3VyYXRpb24uaCBiL2NhbWVyYS9pbmNsdWRlL2NhbWVyYS9jYW1lcmEyL091dHB1dENvbmZpZ3VyYXRpb24uaAppbmRleCBhODBmNDRiLi41YjExN2ZiIDEwMDY0NAotLS0gYS9jYW1lcmEvaW5jbHVkZS9jYW1lcmEvY2FtZXJhMi9PdXRwdXRDb25maWd1cmF0aW9uLmgKKysrIGIvY2FtZXJhL2luY2x1ZGUvY2FtZXJhL2NhbWVyYTIvT3V0cHV0Q29uZmlndXJhdGlvbi5oCkBAIC02Nyw2ICs2NywxMSBAQAogICAgIE91dHB1dENvbmZpZ3VyYXRpb24oc3A8SUdyYXBoaWNCdWZmZXJQcm9kdWNlcj4mIGdicCwgaW50IHJvdGF0aW9uLAogICAgICAgICAgICAgaW50IHN1cmZhY2VTZXRJRCA9IElOVkFMSURfU0VUX0lELCBib29sIGlzU2hhcmVkID0gZmFsc2UpOwogCisgICAgT3V0cHV0Q29uZmlndXJhdGlvbihjb25zdCBzdGQ6OnZlY3RvcjxzcDxJR3JhcGhpY0J1ZmZlclByb2R1Y2VyPj4mIGdicHMsCisgICAgICAgICAgICAgICAgICAgICAgICBpbnQgcm90YXRpb24sIGludCBzdXJmYWNlU2V0SUQgPSBJTlZBTElEX1NFVF9JRCwKKyAgICAgICAgICAgICAgICAgICAgICAgIGludCBzdXJmYWNlVHlwZSA9IE91dHB1dENvbmZpZ3VyYXRpb246OlNVUkZBQ0VfVFlQRV9VTktOT1dOLCBpbnQgd2lkdGggPSAwLAorICAgICAgICAgICAgICAgICAgICAgICAgaW50IGhlaWdodCA9IDAsIGJvb2wgaXNTaGFyZWQgPSBmYWxzZSk7CisKICAgICBib29sIG9wZXJhdG9yID09IChjb25zdCBPdXRwdXRDb25maWd1cmF0aW9uJiBvdGhlcikgY29uc3QgewogICAgICAgICByZXR1cm4gKCBtUm90YXRpb24gPT0gb3RoZXIubVJvdGF0aW9uICYmCiAgICAgICAgICAgICAgICAgbVN1cmZhY2VTZXRJRCA9PSBvdGhlci5tU3VyZmFjZVNldElEICYmCmRpZmYgLS1naXQgYS9jYW1lcmEvbmRrL0FuZHJvaWQuYnAgYi9jYW1lcmEvbmRrL0FuZHJvaWQuYnAKaW5kZXggOTdjZjZiZi4uNjBjOWY4NSAxMDA2NDQKLS0tIGEvY2FtZXJhL25kay9BbmRyb2lkLmJwCisrKyBiL2NhbWVyYS9uZGsvQW5kcm9pZC5icApAQCAtMzAsMyArMzAsMTIxIEBACiAgICAgc3JjczogWyJpbmNsdWRlL2NhbWVyYS8qKi8qLmgiXSwKICAgICBsaWNlbnNlOiAiTk9USUNFIiwKIH0KKworY2NfbGlicmFyeV9zaGFyZWQgeworICAgIG5hbWU6ICJsaWJjYW1lcmEybmRrIiwKKyAgICBzcmNzOiBbCisgICAgICAgICJOZGtDYW1lcmFNYW5hZ2VyLmNwcCIsCisgICAgICAgICJOZGtDYW1lcmFNZXRhZGF0YS5jcHAiLAorICAgICAgICAiTmRrQ2FtZXJhRGV2aWNlLmNwcCIsCisgICAgICAgICJOZGtDYXB0dXJlUmVxdWVzdC5jcHAiLAorICAgICAgICAiTmRrQ2FtZXJhQ2FwdHVyZVNlc3Npb24uY3BwIiwKKyAgICAgICAgImltcGwvQUNhbWVyYU1hbmFnZXIuY3BwIiwKKyAgICAgICAgImltcGwvQUNhbWVyYU1ldGFkYXRhLmNwcCIsCisgICAgICAgICJpbXBsL0FDYW1lcmFEZXZpY2UuY3BwIiwKKyAgICAgICAgImltcGwvQUNhbWVyYUNhcHR1cmVTZXNzaW9uLmNwcCIsCisgICAgXSwKKyAgICBzaGFyZWRfbGliczogWworICAgICAgICAibGliYmluZGVyIiwKKyAgICAgICAgImxpYmxvZyIsCisgICAgICAgICJsaWJndWkiLAorICAgICAgICAibGlidXRpbHMiLAorICAgICAgICAibGliYW5kcm9pZF9ydW50aW1lIiwKKyAgICAgICAgImxpYmNhbWVyYV9jbGllbnQiLAorICAgICAgICAibGlic3RhZ2VmcmlnaHRfZm91bmRhdGlvbiIsCisgICAgICAgICJsaWJjdXRpbHMiLAorICAgICAgICAibGliY2FtZXJhX21ldGFkYXRhIiwKKyAgICAgICAgImxpYm1lZGlhbmRrIiwKKyAgICAgICAgImxpYm5hdGl2ZXdpbmRvdyIsCisgICAgXSwKKyAgICBjZmxhZ3M6IFsKKyAgICAgICAgIi1mdmlzaWJpbGl0eT1oaWRkZW4iLAorICAgICAgICAiLURFWFBPUlQ9X19hdHRyaWJ1dGVfXyAoKHZpc2liaWxpdHkgKFwiZGVmYXVsdFwiKSkpIiwKKyAgICAgICAgIi1XYWxsIiwKKyAgICAgICAgIi1XZXh0cmEiLAorICAgICAgICAiLVdlcnJvciIsCisgICAgXSwKKyAgICBleHBvcnRfaW5jbHVkZV9kaXJzOiBbImluY2x1ZGUiXSwKKyAgICBleHBvcnRfc2hhcmVkX2xpYl9oZWFkZXJzOiBbCisgICAgICAgICJsaWJuYXRpdmV3aW5kb3ciLAorICAgIF0sCisgICAgdmVyc2lvbl9zY3JpcHQ6ICJsaWJjYW1lcmEybmRrLm1hcC50eHQiLAorfQorCitjY19saWJyYXJ5X3NoYXJlZCB7CisgICAgbmFtZTogImxpYmNhbWVyYTJuZGtfdmVuZG9yIiwKKyAgICB2ZW5kb3JfYXZhaWxhYmxlOiB0cnVlLAorICAgIHNyY3M6IFsKKyAgICAgICAgIm5ka192ZW5kb3IvaW1wbC9BQ2FtZXJhRGV2aWNlLmNwcCIsCisgICAgICAgICJuZGtfdmVuZG9yL2ltcGwvQUNhbWVyYU1hbmFnZXIuY3BwIiwKKyAgICAgICAgIm5ka192ZW5kb3IvaW1wbC91dGlscy5jcHAiLAorICAgICAgICAiaW1wbC9BQ2FtZXJhTWV0YWRhdGEuY3BwIiwKKyAgICAgICAgImltcGwvQUNhbWVyYUNhcHR1cmVTZXNzaW9uLmNwcCIsCisgICAgICAgICJOZGtDYW1lcmFNZXRhZGF0YS5jcHAiLAorICAgICAgICAiTmRrQ2FtZXJhQ2FwdHVyZVNlc3Npb24uY3BwIiwKKyAgICAgICAgIk5ka0NhbWVyYU1hbmFnZXIuY3BwIiwKKyAgICAgICAgIk5ka0NhbWVyYURldmljZS5jcHAiLAorICAgICAgICAiTmRrQ2FwdHVyZVJlcXVlc3QuY3BwIiwKKyAgICBdLAorCisgICAgZXhwb3J0X2luY2x1ZGVfZGlyczogWyJpbmNsdWRlIl0sCisgICAgZXhwb3J0X3NoYXJlZF9saWJfaGVhZGVyczogWworICAgICAgICAibGliY3V0aWxzIiwKKyAgICBdLAorICAgIGxvY2FsX2luY2x1ZGVfZGlyczogWworICAgICAgICAiLiIsCisgICAgICAgICJpbmNsdWRlIiwKKyAgICAgICAgImltcGwiLAorICAgIF0sCisgICAgY2ZsYWdzOiBbCisgICAgICAgICItZnZpc2liaWxpdHk9aGlkZGVuIiwKKyAgICAgICAgIi1ERVhQT1JUPV9fYXR0cmlidXRlX18oKHZpc2liaWxpdHkoXCJkZWZhdWx0XCIpKSkiLAorICAgICAgICAiLURfX0FORFJPSURfVk5ES19fIiwKKyAgICBdLAorCisgICAgc2hhcmVkX2xpYnM6IFsKKyAgICAgICAgImxpYmh3YmluZGVyIiwKKyAgICAgICAgImxpYmZtcSIsCisgICAgICAgICJsaWJoaWRsYmFzZSIsCisgICAgICAgICJsaWJoYXJkd2FyZSIsCisgICAgICAgICJsaWJuYXRpdmV3aW5kb3ciLAorICAgICAgICAibGlibG9nIiwKKyAgICAgICAgImxpYnV0aWxzIiwKKyAgICAgICAgImxpYnN0YWdlZnJpZ2h0X2ZvdW5kYXRpb24iLAorICAgICAgICAibGliY3V0aWxzIiwKKyAgICAgICAgImxpYmNhbWVyYV9tZXRhZGF0YSIsCisgICAgICAgICJsaWJtZWRpYW5kayIsCisgICAgICAgICJhbmRyb2lkLmZyYW1ld29ya3MuY2FtZXJhc2VydmljZS5kZXZpY2VAMi4wIiwKKyAgICAgICAgImFuZHJvaWQuZnJhbWV3b3Jrcy5jYW1lcmFzZXJ2aWNlLmNvbW1vbkAyLjAiLAorICAgICAgICAiYW5kcm9pZC5mcmFtZXdvcmtzLmNhbWVyYXNlcnZpY2Uuc2VydmljZUAyLjAiLAorICAgIF0sCisKKyAgICBzdGF0aWNfbGliczogWworICAgICAgICAiYW5kcm9pZC5oYXJkd2FyZS5jYW1lcmEuY29tbW9uQDEuMC1oZWxwZXIiLAorICAgICAgICAibGliYXJlY3QiLAorICAgIF0sCisgICAgcHJvZHVjdF92YXJpYWJsZXM6IHsKKyAgICAgICAgcGRrOiB7CisgICAgICAgICAgICBlbmFibGVkOiBmYWxzZSwKKyAgICAgICAgfSwKKyAgICB9LAorfQorCitjY190ZXN0IHsKKyAgICBuYW1lOiAiQUltYWdlUmVhZGVyVmVuZG9yVGVzdCIsCisgICAgdmVuZG9yOiB0cnVlLAorICAgIHNyY3M6IFsibmRrX3ZlbmRvci90ZXN0cy9BSW1hZ2VSZWFkZXJWZW5kb3JUZXN0LmNwcCJdLAorICAgIHNoYXJlZF9saWJzOiBbCisgICAgICAgICJsaWJod2JpbmRlciIsCisgICAgICAgICJsaWJjYW1lcmEybmRrX3ZlbmRvciIsCisgICAgICAgICJsaWJtZWRpYW5kayIsCisgICAgICAgICJsaWJuYXRpdmV3aW5kb3ciLAorICAgICAgICAibGlidXRpbHMiLAorICAgICAgICAibGlidWkiLAorICAgICAgICAibGliY3V0aWxzIiwKKyAgICAgICAgImxpYmxvZyIsCisgICAgXSwKKyAgICBjZmxhZ3M6IFsKKyAgICAgICAgIi1EX19BTkRST0lEX1ZOREtfXyIsCisgICAgXSwKK30KZGlmZiAtLWdpdCBhL2NhbWVyYS9uZGsvQW5kcm9pZC5tayBiL2NhbWVyYS9uZGsvQW5kcm9pZC5tawpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTNhZGRmMS4uMDAwMDAwMAotLS0gYS9jYW1lcmEvbmRrL0FuZHJvaWQubWsKKysrIC9kZXYvbnVsbApAQCAtMSw1OCArMCwwIEBACi0jCi0jIENvcHlyaWdodCAoQykgMjAxNSBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0Ci0jCi0jIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwotIyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCi0jIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotIwotIyAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotIwotIyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCi0jIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCi0jIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgotIyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCi0jIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgotIwotCi1MT0NBTF9QQVRIOj0gJChjYWxsIG15LWRpcikKLQotaWZuZXEgKCQoVEFSR0VUX0JVSUxEX1BESyksIHRydWUpCi0KLWluY2x1ZGUgJChDTEVBUl9WQVJTKQotCi1MT0NBTF9TUkNfRklMRVM6PSAgICAgICAgICAgICAgICAgIFwKLSAgICBOZGtDYW1lcmFNYW5hZ2VyLmNwcCAgICAgICAgICAgXAotICAgIE5ka0NhbWVyYU1ldGFkYXRhLmNwcCAgICAgICAgICBcCi0gICAgTmRrQ2FtZXJhRGV2aWNlLmNwcCAgICAgICAgICAgIFwKLSAgICBOZGtDYXB0dXJlUmVxdWVzdC5jcHAgICAgICAgICAgXAotICAgIE5ka0NhbWVyYUNhcHR1cmVTZXNzaW9uLmNwcCAgICBcCi0gICAgaW1wbC9BQ2FtZXJhTWFuYWdlci5jcHAgICAgICAgIFwKLSAgICBpbXBsL0FDYW1lcmFNZXRhZGF0YS5jcHAgICAgICAgXAotICAgIGltcGwvQUNhbWVyYURldmljZS5jcHAgICAgICAgICBcCi0gICAgaW1wbC9BQ2FtZXJhQ2FwdHVyZVNlc3Npb24uY3BwCi0KLUxPQ0FMX01PRFVMRTo9IGxpYmNhbWVyYTJuZGsKLQotTE9DQUxfQ19JTkNMVURFUyA6PSAkKExPQ0FMX1BBVEgpL2luY2x1ZGUKLUxPQ0FMX0VYUE9SVF9DX0lOQ0xVREVfRElSUyA6PSAkKExPQ0FMX1BBVEgpL2luY2x1ZGUKLQotTE9DQUxfQ0ZMQUdTICs9IC1mdmlzaWJpbGl0eT1oaWRkZW4gLUQgRVhQT1JUPSdfX2F0dHJpYnV0ZV9fICgodmlzaWJpbGl0eSAoImRlZmF1bHQiKSkpJwotTE9DQUxfQ0ZMQUdTICs9IC1XYWxsIC1XZXh0cmEgLVdlcnJvcgotCi1MT0NBTF9MREZMQUdTICs9IC1XbCwtLXZlcnNpb24tc2NyaXB0PSQoTE9DQUxfUEFUSCkvbGliY2FtZXJhMm5kay5tYXAudHh0Ci0KLUxPQ0FMX1NIQVJFRF9MSUJSQVJJRVMgOj0gXAotICAgIGxpYmJpbmRlciBcCi0gICAgbGlibG9nIFwKLSAgICBsaWJndWkgXAotICAgIGxpYnV0aWxzIFwKLSAgICBsaWJhbmRyb2lkX3J1bnRpbWUgXAotICAgIGxpYmNhbWVyYV9jbGllbnQgXAotICAgIGxpYnN0YWdlZnJpZ2h0X2ZvdW5kYXRpb24gXAotICAgIGxpYmN1dGlscyBcCi0gICAgbGliY2FtZXJhX21ldGFkYXRhIFwKLSAgICBsaWJtZWRpYW5kawotCi1pbmNsdWRlICQoQlVJTERfU0hBUkVEX0xJQlJBUlkpCi0KLWVuZGlmCmRpZmYgLS1naXQgYS9jYW1lcmEvbmRrL05ka0NhbWVyYURldmljZS5jcHAgYi9jYW1lcmEvbmRrL05ka0NhbWVyYURldmljZS5jcHAKaW5kZXggODEyYTMxMi4uZWYwNWUwYiAxMDA2NDQKLS0tIGEvY2FtZXJhL25kay9OZGtDYW1lcmFEZXZpY2UuY3BwCisrKyBiL2NhbWVyYS9uZGsvTmRrQ2FtZXJhRGV2aWNlLmNwcApAQCAtMjQsNyArMjQsMTUgQEAKICNpbmNsdWRlIDxjYW1lcmEvTmRrQ2FtZXJhRGV2aWNlLmg+CiAjaW5jbHVkZSAiaW1wbC9BQ2FtZXJhQ2FwdHVyZVNlc3Npb24uaCIKIAotdXNpbmcgbmFtZXNwYWNlIGFuZHJvaWQ7Cit1c2luZyBuYW1lc3BhY2UgYW5kcm9pZDo6YWNhbTsKKworYm9vbCBhcmVXaW5kb3dUeXBlc0VxdWFsKEFDYW1lcmFXaW5kb3dUeXBlICphLCBBQ2FtZXJhV2luZG93VHlwZSAqYikgeworI2lmZGVmIF9fQU5EUk9JRF9WTkRLX18KKyAgICByZXR1cm4gdXRpbHM6OmlzV2luZG93TmF0aXZlSGFuZGxlRXF1YWwoYSwgYik7CisjZWxzZQorICAgIHJldHVybiBhID09IGI7CisjZW5kaWYKK30KIAogRVhQT1JUCiBjYW1lcmFfc3RhdHVzX3QgQUNhbWVyYURldmljZV9jbG9zZShBQ2FtZXJhRGV2aWNlKiBkZXZpY2UpIHsKQEAgLTk2LDcgKzEwNCw3IEBACiAKIEVYUE9SVAogY2FtZXJhX3N0YXR1c190IEFDYXB0dXJlU2Vzc2lvbk91dHB1dF9jcmVhdGUoCi0gICAgICAgIEFOYXRpdmVXaW5kb3cqIHdpbmRvdywgLypvdXQqL0FDYXB0dXJlU2Vzc2lvbk91dHB1dCoqIG91dCkgeworICAgICAgICBBQ2FtZXJhV2luZG93VHlwZSogd2luZG93LCAvKm91dCovQUNhcHR1cmVTZXNzaW9uT3V0cHV0Kiogb3V0KSB7CiAgICAgQVRSQUNFX0NBTEwoKTsKICAgICBpZiAod2luZG93ID09IG51bGxwdHIgfHwgb3V0ID09IG51bGxwdHIpIHsKICAgICAgICAgQUxPR0UoIiVzOiBFcnJvcjogYmFkIGFyZ3VtZW50LiB3aW5kb3cgJXAsIG91dCAlcCIsCkBAIC0xMDksNyArMTE3LDcgQEAKIAogRVhQT1JUCiBjYW1lcmFfc3RhdHVzX3QgQUNhcHR1cmVTZXNzaW9uU2hhcmVkT3V0cHV0X2NyZWF0ZSgKLSAgICAgICAgQU5hdGl2ZVdpbmRvdyogd2luZG93LCAvKm91dCovQUNhcHR1cmVTZXNzaW9uT3V0cHV0Kiogb3V0KSB7CisgICAgICAgIEFDYW1lcmFXaW5kb3dUeXBlKiB3aW5kb3csIC8qb3V0Ki9BQ2FwdHVyZVNlc3Npb25PdXRwdXQqKiBvdXQpIHsKICAgICBBVFJBQ0VfQ0FMTCgpOwogICAgIGlmICh3aW5kb3cgPT0gbnVsbHB0ciB8fCBvdXQgPT0gbnVsbHB0cikgewogICAgICAgICBBTE9HRSgiJXM6IEVycm9yOiBiYWQgYXJndW1lbnQuIHdpbmRvdyAlcCwgb3V0ICVwIiwKQEAgLTEyMiw3ICsxMzAsNyBAQAogCiBFWFBPUlQKIGNhbWVyYV9zdGF0dXNfdCBBQ2FwdHVyZVNlc3Npb25TaGFyZWRPdXRwdXRfYWRkKEFDYXB0dXJlU2Vzc2lvbk91dHB1dCAqb3V0LAotICAgICAgICBBTmF0aXZlV2luZG93KiB3aW5kb3cpIHsKKyAgICAgICAgQUNhbWVyYVdpbmRvd1R5cGUqIHdpbmRvdykgewogICAgIEFUUkFDRV9DQUxMKCk7CiAgICAgaWYgKCh3aW5kb3cgPT0gbnVsbHB0cikgfHwgKG91dCA9PSBudWxscHRyKSkgewogICAgICAgICBBTE9HRSgiJXM6IEVycm9yOiBiYWQgYXJndW1lbnQuIHdpbmRvdyAlcCwgb3V0ICVwIiwKQEAgLTEzNCw3ICsxNDIsNyBAQAogICAgICAgICAgICAgICAgIF9fRlVOQ1RJT05fXyk7CiAgICAgICAgIHJldHVybiBBQ0FNRVJBX0VSUk9SX0lOVkFMSURfT1BFUkFUSU9OOwogICAgIH0KLSAgICBpZiAob3V0LT5tV2luZG93ID09IHdpbmRvdykgeworICAgIGlmIChhcmVXaW5kb3dUeXBlc0VxdWFsKG91dC0+bVdpbmRvdywgd2luZG93KSkgewogICAgICAgICBBTE9HRSgiJXM6IEVycm9yIHRyeWluZyB0byBhZGQgdGhlIHNhbWUgd2luZG93IGFzc29jaWF0ZWQgd2l0aCB0aGUgb3V0cHV0IGNvbmZpZ3VyYXRpb24iLAogICAgICAgICAgICAgICAgIF9fRlVOQ1RJT05fXyk7CiAgICAgICAgIHJldHVybiBBQ0FNRVJBX0VSUk9SX0lOVkFMSURfUEFSQU1FVEVSOwpAQCAtMTQ3LDcgKzE1NSw3IEBACiAKIEVYUE9SVAogY2FtZXJhX3N0YXR1c190IEFDYXB0dXJlU2Vzc2lvblNoYXJlZE91dHB1dF9yZW1vdmUoQUNhcHR1cmVTZXNzaW9uT3V0cHV0ICpvdXQsCi0gICAgICAgIEFOYXRpdmVXaW5kb3cqIHdpbmRvdykgeworICAgICAgICBBQ2FtZXJhV2luZG93VHlwZSogd2luZG93KSB7CiAgICAgQVRSQUNFX0NBTEwoKTsKICAgICBpZiAoKHdpbmRvdyA9PSBudWxscHRyKSB8fCAob3V0ID09IG51bGxwdHIpKSB7CiAgICAgICAgIEFMT0dFKCIlczogRXJyb3I6IGJhZCBhcmd1bWVudC4gd2luZG93ICVwLCBvdXQgJXAiLApAQCAtMTU5LDcgKzE2Nyw3IEBACiAgICAgICAgICAgICAgICAgX19GVU5DVElPTl9fKTsKICAgICAgICAgcmV0dXJuIEFDQU1FUkFfRVJST1JfSU5WQUxJRF9PUEVSQVRJT047CiAgICAgfQotICAgIGlmIChvdXQtPm1XaW5kb3cgPT0gd2luZG93KSB7CisgICAgaWYgKGFyZVdpbmRvd1R5cGVzRXF1YWwob3V0LT5tV2luZG93LCB3aW5kb3cpKSB7CiAgICAgICAgIEFMT0dFKCIlczogRXJyb3IgdHJ5aW5nIHRvIHJlbW92ZSB0aGUgc2FtZSB3aW5kb3cgYXNzb2NpYXRlZCB3aXRoIHRoZSBvdXRwdXQgY29uZmlndXJhdGlvbiIsCiAgICAgICAgICAgICAgICAgX19GVU5DVElPTl9fKTsKICAgICAgICAgcmV0dXJuIEFDQU1FUkFfRVJST1JfSU5WQUxJRF9QQVJBTUVURVI7CmRpZmYgLS1naXQgYS9jYW1lcmEvbmRrL05ka0NhbWVyYU1hbmFnZXIuY3BwIGIvY2FtZXJhL25kay9OZGtDYW1lcmFNYW5hZ2VyLmNwcAppbmRleCA2MGI0NzYzLi44NzQyZDljIDEwMDY0NAotLS0gYS9jYW1lcmEvbmRrL05ka0NhbWVyYU1hbmFnZXIuY3BwCisrKyBiL2NhbWVyYS9uZGsvTmRrQ2FtZXJhTWFuYWdlci5jcHAKQEAgLTIyLDkgKzIyLDE1IEBACiAjaW5jbHVkZSA8dXRpbHMvVHJhY2UuaD4KIAogI2luY2x1ZGUgPGNhbWVyYS9OZGtDYW1lcmFNYW5hZ2VyLmg+Ci0jaW5jbHVkZSAiaW1wbC9BQ2FtZXJhTWFuYWdlci5oIgogCi11c2luZyBuYW1lc3BhY2UgYW5kcm9pZDsKKyNpZmRlZiBfX0FORFJPSURfVk5ES19fCisjaW5jbHVkZSAibmRrX3ZlbmRvci9pbXBsL0FDYW1lcmFNYW5hZ2VyLmgiCisjZWxzZQorI2luY2x1ZGUgImltcGwvQUNhbWVyYU1hbmFnZXIuaCIKKyNlbmRpZgorI2luY2x1ZGUgImltcGwvQUNhbWVyYU1ldGFkYXRhLmgiCisKK3VzaW5nIG5hbWVzcGFjZSBhbmRyb2lkOjphY2FtOwogCiBFWFBPUlQKIEFDYW1lcmFNYW5hZ2VyKiBBQ2FtZXJhTWFuYWdlcl9jcmVhdGUoKSB7CkBAIC0xMDcsNyArMTEzLDE0IEBACiAgICAgICAgICAgICAgICAgX19GVU5DVElPTl9fLCBtZ3IsIGNhbWVyYUlkLCBjaGFycyk7CiAgICAgICAgIHJldHVybiBBQ0FNRVJBX0VSUk9SX0lOVkFMSURfUEFSQU1FVEVSOwogICAgIH0KLSAgICByZXR1cm4gbWdyLT5nZXRDYW1lcmFDaGFyYWN0ZXJpc3RpY3MoY2FtZXJhSWQsIGNoYXJzKTsKKyAgICBzcDxBQ2FtZXJhTWV0YWRhdGE+IHNwQ2hhcnM7CisgICAgY2FtZXJhX3N0YXR1c190IHN0YXR1cyA9IG1nci0+Z2V0Q2FtZXJhQ2hhcmFjdGVyaXN0aWNzKGNhbWVyYUlkLCAmc3BDaGFycyk7CisgICAgaWYgKHN0YXR1cyAhPSBBQ0FNRVJBX09LKSB7CisgICAgICAgIHJldHVybiBzdGF0dXM7CisgICAgfQorICAgIHNwQ2hhcnMtPmluY1N0cm9uZygodm9pZCopIEFDYW1lcmFNYW5hZ2VyX2dldENhbWVyYUNoYXJhY3RlcmlzdGljcyk7CisgICAgKmNoYXJzID0gc3BDaGFycy5nZXQoKTsKKyAgICByZXR1cm4gQUNBTUVSQV9PSzsKIH0KIAogRVhQT1JUCmRpZmYgLS1naXQgYS9jYW1lcmEvbmRrL05ka0NhbWVyYU1ldGFkYXRhLmNwcCBiL2NhbWVyYS9uZGsvTmRrQ2FtZXJhTWV0YWRhdGEuY3BwCmluZGV4IDY1ZGU4MWYuLjM0ZWMyZGEgMTAwNjQ0Ci0tLSBhL2NhbWVyYS9uZGsvTmRrQ2FtZXJhTWV0YWRhdGEuY3BwCisrKyBiL2NhbWVyYS9uZGsvTmRrQ2FtZXJhTWV0YWRhdGEuY3BwCkBAIC01NywxMyArNTcsMTUgQEAKICAgICAgICAgQUxPR0UoIiVzOiBzcmMgaXMgbnVsbCEiLCBfX0ZVTkNUSU9OX18pOwogICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICB9Ci0gICAgcmV0dXJuIG5ldyBBQ2FtZXJhTWV0YWRhdGEoKnNyYyk7CisgICAgQUNhbWVyYU1ldGFkYXRhKiBjb3B5ID0gbmV3IEFDYW1lcmFNZXRhZGF0YSgqc3JjKTsKKyAgICBjb3B5LT5pbmNTdHJvbmcoKHZvaWQqKSBBQ2FtZXJhTWV0YWRhdGFfY29weSk7CisgICAgcmV0dXJuIGNvcHk7CiB9CiAKIEVYUE9SVAogdm9pZCBBQ2FtZXJhTWV0YWRhdGFfZnJlZShBQ2FtZXJhTWV0YWRhdGEqIG1ldGFkYXRhKSB7CiAgICAgQVRSQUNFX0NBTEwoKTsKICAgICBpZiAobWV0YWRhdGEgIT0gbnVsbHB0cikgewotICAgICAgICBkZWxldGUgbWV0YWRhdGE7CisgICAgICAgIG1ldGFkYXRhLT5kZWNTdHJvbmcoKHZvaWQqKSBBQ2FtZXJhTWV0YWRhdGFfZnJlZSk7CiAgICAgfQogfQpkaWZmIC0tZ2l0IGEvY2FtZXJhL25kay9OZGtDYXB0dXJlUmVxdWVzdC5jcHAgYi9jYW1lcmEvbmRrL05ka0NhcHR1cmVSZXF1ZXN0LmNwcAppbmRleCBhYzE4NTZiLi5jNjRkZTNlIDEwMDY0NAotLS0gYS9jYW1lcmEvbmRrL05ka0NhcHR1cmVSZXF1ZXN0LmNwcAorKysgYi9jYW1lcmEvbmRrL05ka0NhcHR1cmVSZXF1ZXN0LmNwcApAQCAtMjcsNyArMjcsNyBAQAogCiBFWFBPUlQKIGNhbWVyYV9zdGF0dXNfdCBBQ2FtZXJhT3V0cHV0VGFyZ2V0X2NyZWF0ZSgKLSAgICAgICAgQU5hdGl2ZVdpbmRvdyogd2luZG93LCBBQ2FtZXJhT3V0cHV0VGFyZ2V0Kiogb3V0KSB7CisgICAgICAgIEFDYW1lcmFXaW5kb3dUeXBlKiB3aW5kb3csIEFDYW1lcmFPdXRwdXRUYXJnZXQqKiBvdXQpIHsKICAgICBBVFJBQ0VfQ0FMTCgpOwogICAgIGlmICh3aW5kb3cgPT0gbnVsbHB0cikgewogICAgICAgICBBTE9HRSgiJXM6IEVycm9yOiBpbnB1dCB3aW5kb3cgaXMgbnVsbCIsIF9fRlVOQ1RJT05fXyk7CkBAIC0xMzcsNyArMTM3LDcgQEAKICAgICBpZiAocmVxdWVzdCA9PSBudWxscHRyKSB7CiAgICAgICAgIHJldHVybjsKICAgICB9Ci0gICAgZGVsZXRlIHJlcXVlc3QtPnNldHRpbmdzOworICAgIHJlcXVlc3QtPnNldHRpbmdzLmNsZWFyKCk7CiAgICAgZGVsZXRlIHJlcXVlc3QtPnRhcmdldHM7CiAgICAgZGVsZXRlIHJlcXVlc3Q7CiAgICAgcmV0dXJuOwpkaWZmIC0tZ2l0IGEvY2FtZXJhL25kay9pbXBsL0FDYW1lcmFDYXB0dXJlU2Vzc2lvbi5jcHAgYi9jYW1lcmEvbmRrL2ltcGwvQUNhbWVyYUNhcHR1cmVTZXNzaW9uLmNwcAppbmRleCBmNjBlNWZkLi5mYjcyYmRiIDEwMDY0NAotLS0gYS9jYW1lcmEvbmRrL2ltcGwvQUNhbWVyYUNhcHR1cmVTZXNzaW9uLmNwcAorKysgYi9jYW1lcmEvbmRrL2ltcGwvQUNhbWVyYUNhcHR1cmVTZXNzaW9uLmNwcApAQCAtMjMsNyArMjMsNyBAQAogCiBBQ2FtZXJhQ2FwdHVyZVNlc3Npb246On5BQ2FtZXJhQ2FwdHVyZVNlc3Npb24oKSB7CiAgICAgQUxPR1YoIn5BQ2FtZXJhQ2FwdHVyZVNlc3Npb246ICVwIG5vdGlmeSBkZXZpY2UgZW5kIG9mIGxpZmUiLCB0aGlzKTsKLSAgICBzcDxDYW1lcmFEZXZpY2U+IGRldiA9IGdldERldmljZVNwKCk7CisgICAgc3A8YWNhbTo6Q2FtZXJhRGV2aWNlPiBkZXYgPSBnZXREZXZpY2VTcCgpOwogICAgIGlmIChkZXYgIT0gbnVsbHB0ciAmJiAhZGV2LT5pc0Nsb3NlZCgpKSB7CiAgICAgICAgIGRldi0+bG9ja0RldmljZUZvclNlc3Npb25PcHMoKTsKICAgICAgICAgewpAQCAtNDgsNyArNDgsNyBAQAogICAgICAgICBtQ2xvc2VkQnlBcHAgPSB0cnVlOwogICAgIH0KIAotICAgIHNwPENhbWVyYURldmljZT4gZGV2ID0gZ2V0RGV2aWNlU3AoKTsKKyAgICBzcDxhY2FtOjpDYW1lcmFEZXZpY2U+IGRldiA9IGdldERldmljZVNwKCk7CiAgICAgaWYgKGRldiAhPSBudWxscHRyKSB7CiAgICAgICAgIGRldi0+bG9ja0RldmljZUZvclNlc3Npb25PcHMoKTsKICAgICB9CkBAIC03Myw3ICs3Myw3IEBACiAKIGNhbWVyYV9zdGF0dXNfdAogQUNhbWVyYUNhcHR1cmVTZXNzaW9uOjpzdG9wUmVwZWF0aW5nKCkgewotICAgIHNwPENhbWVyYURldmljZT4gZGV2ID0gZ2V0RGV2aWNlU3AoKTsKKyAgICBzcDxhY2FtOjpDYW1lcmFEZXZpY2U+IGRldiA9IGdldERldmljZVNwKCk7CiAgICAgaWYgKGRldiA9PSBudWxscHRyKSB7CiAgICAgICAgIEFMT0dFKCJFcnJvcjogRGV2aWNlIGFzc29jaWF0ZWQgd2l0aCBzZXNzaW9uICVwIGhhcyBiZWVuIGNsb3NlZCEiLCB0aGlzKTsKICAgICAgICAgcmV0dXJuIEFDQU1FUkFfRVJST1JfU0VTU0lPTl9DTE9TRUQ7CkBAIC05MSw3ICs5MSw3IEBACiAKIGNhbWVyYV9zdGF0dXNfdAogQUNhbWVyYUNhcHR1cmVTZXNzaW9uOjphYm9ydENhcHR1cmVzKCkgewotICAgIHNwPENhbWVyYURldmljZT4gZGV2ID0gZ2V0RGV2aWNlU3AoKTsKKyAgICBzcDxhY2FtOjpDYW1lcmFEZXZpY2U+IGRldiA9IGdldERldmljZVNwKCk7CiAgICAgaWYgKGRldiA9PSBudWxscHRyKSB7CiAgICAgICAgIEFMT0dFKCJFcnJvcjogRGV2aWNlIGFzc29jaWF0ZWQgd2l0aCBzZXNzaW9uICVwIGhhcyBiZWVuIGNsb3NlZCEiLCB0aGlzKTsKICAgICAgICAgcmV0dXJuIEFDQU1FUkFfRVJST1JfU0VTU0lPTl9DTE9TRUQ7CkBAIC0xMTIsNyArMTEyLDcgQEAKICAgICAgICAgLypvcHRpb25hbCovQUNhbWVyYUNhcHR1cmVTZXNzaW9uX2NhcHR1cmVDYWxsYmFja3MqIGNicywKICAgICAgICAgaW50IG51bVJlcXVlc3RzLCBBQ2FwdHVyZVJlcXVlc3QqKiByZXF1ZXN0cywKICAgICAgICAgLypvcHRpb25hbCovaW50KiBjYXB0dXJlU2VxdWVuY2VJZCkgewotICAgIHNwPENhbWVyYURldmljZT4gZGV2ID0gZ2V0RGV2aWNlU3AoKTsKKyAgICBzcDxhY2FtOjpDYW1lcmFEZXZpY2U+IGRldiA9IGdldERldmljZVNwKCk7CiAgICAgaWYgKGRldiA9PSBudWxscHRyKSB7CiAgICAgICAgIEFMT0dFKCJFcnJvcjogRGV2aWNlIGFzc29jaWF0ZWQgd2l0aCBzZXNzaW9uICVwIGhhcyBiZWVuIGNsb3NlZCEiLCB0aGlzKTsKICAgICAgICAgcmV0dXJuIEFDQU1FUkFfRVJST1JfU0VTU0lPTl9DTE9TRUQ7CkBAIC0xMzMsNyArMTMzLDcgQEAKICAgICAgICAgLypvcHRpb25hbCovQUNhbWVyYUNhcHR1cmVTZXNzaW9uX2NhcHR1cmVDYWxsYmFja3MqIGNicywKICAgICAgICAgaW50IG51bVJlcXVlc3RzLCBBQ2FwdHVyZVJlcXVlc3QqKiByZXF1ZXN0cywKICAgICAgICAgLypvcHRpb25hbCovaW50KiBjYXB0dXJlU2VxdWVuY2VJZCkgewotICAgIHNwPENhbWVyYURldmljZT4gZGV2ID0gZ2V0RGV2aWNlU3AoKTsKKyAgICBzcDxhY2FtOjpDYW1lcmFEZXZpY2U+IGRldiA9IGdldERldmljZVNwKCk7CiAgICAgaWYgKGRldiA9PSBudWxscHRyKSB7CiAgICAgICAgIEFMT0dFKCJFcnJvcjogRGV2aWNlIGFzc29jaWF0ZWQgd2l0aCBzZXNzaW9uICVwIGhhcyBiZWVuIGNsb3NlZCEiLCB0aGlzKTsKICAgICAgICAgcmV0dXJuIEFDQU1FUkFfRVJST1JfU0VTU0lPTl9DTE9TRUQ7CkBAIC0xNDksNyArMTQ5LDcgQEAKIH0KIAogY2FtZXJhX3N0YXR1c190IEFDYW1lcmFDYXB0dXJlU2Vzc2lvbjo6dXBkYXRlT3V0cHV0Q29uZmlndXJhdGlvbihBQ2FwdHVyZVNlc3Npb25PdXRwdXQgKm91dHB1dCkgewotICAgIHNwPENhbWVyYURldmljZT4gZGV2ID0gZ2V0RGV2aWNlU3AoKTsKKyAgICBzcDxhY2FtOjpDYW1lcmFEZXZpY2U+IGRldiA9IGdldERldmljZVNwKCk7CiAgICAgaWYgKGRldiA9PSBudWxscHRyKSB7CiAgICAgICAgIEFMT0dFKCJFcnJvcjogRGV2aWNlIGFzc29jaWF0ZWQgd2l0aCBzZXNzaW9uICVwIGhhcyBiZWVuIGNsb3NlZCEiLCB0aGlzKTsKICAgICAgICAgcmV0dXJuIEFDQU1FUkFfRVJST1JfU0VTU0lPTl9DTE9TRUQ7CkBAIC0xNjgsNyArMTY4LDcgQEAKIEFDYW1lcmFEZXZpY2UqCiBBQ2FtZXJhQ2FwdHVyZVNlc3Npb246OmdldERldmljZSgpIHsKICAgICBNdXRleDo6QXV0b2xvY2sgX2wobVNlc3Npb25Mb2NrKTsKLSAgICBzcDxDYW1lcmFEZXZpY2U+IGRldiA9IGdldERldmljZVNwKCk7CisgICAgc3A8YWNhbTo6Q2FtZXJhRGV2aWNlPiBkZXYgPSBnZXREZXZpY2VTcCgpOwogICAgIGlmIChkZXYgPT0gbnVsbHB0cikgewogICAgICAgICBBTE9HRSgiRXJyb3I6IERldmljZSBhc3NvY2lhdGVkIHdpdGggc2Vzc2lvbiAlcCBoYXMgYmVlbiBjbG9zZWQhIiwgdGhpcyk7CiAgICAgICAgIHJldHVybiBudWxscHRyOwpAQCAtMTgyLDkgKzE4Miw5IEBACiAgICAgbUlzQ2xvc2VkID0gdHJ1ZTsKIH0KIAotc3A8Q2FtZXJhRGV2aWNlPgorc3A8YWNhbTo6Q2FtZXJhRGV2aWNlPgogQUNhbWVyYUNhcHR1cmVTZXNzaW9uOjpnZXREZXZpY2VTcCgpIHsKLSAgICBzcDxDYW1lcmFEZXZpY2U+IGRldmljZSA9IG1EZXZpY2UucHJvbW90ZSgpOworICAgIHNwPGFjYW06OkNhbWVyYURldmljZT4gZGV2aWNlID0gbURldmljZS5wcm9tb3RlKCk7CiAgICAgaWYgKGRldmljZSA9PSBudWxscHRyIHx8IGRldmljZS0+aXNDbG9zZWQoKSkgewogICAgICAgICBBTE9HVygiRGV2aWNlIGlzIGNsb3NlZCBidXQgc2Vzc2lvbiAlZCBpcyBub3Qgbm90aWZpZWQiLCBtSWQpOwogICAgICAgICByZXR1cm4gbnVsbHB0cjsKZGlmZiAtLWdpdCBhL2NhbWVyYS9uZGsvaW1wbC9BQ2FtZXJhQ2FwdHVyZVNlc3Npb24uaCBiL2NhbWVyYS9uZGsvaW1wbC9BQ2FtZXJhQ2FwdHVyZVNlc3Npb24uaAppbmRleCBhMjA2OGU3Li4xMzNjMmM4IDEwMDY0NAotLS0gYS9jYW1lcmEvbmRrL2ltcGwvQUNhbWVyYUNhcHR1cmVTZXNzaW9uLmgKKysrIGIvY2FtZXJhL25kay9pbXBsL0FDYW1lcmFDYXB0dXJlU2Vzc2lvbi5oCkBAIC0xOSwxMiArMTksMTcgQEAKICNpbmNsdWRlIDxzZXQ+CiAjaW5jbHVkZSA8aGFyZHdhcmUvY2FtZXJhMy5oPgogI2luY2x1ZGUgPGNhbWVyYS9OZGtDYW1lcmFEZXZpY2UuaD4KKworI2lmZGVmIF9fQU5EUk9JRF9WTkRLX18KKyNpbmNsdWRlICJuZGtfdmVuZG9yL2ltcGwvQUNhbWVyYURldmljZS5oIgorI2luY2x1ZGUgIm5ka192ZW5kb3IvaW1wbC9BQ2FtZXJhQ2FwdHVyZVNlc3Npb25WZW5kb3IuaCIKKyNlbHNlCiAjaW5jbHVkZSAiQUNhbWVyYURldmljZS5oIgogCiB1c2luZyBuYW1lc3BhY2UgYW5kcm9pZDsKIAogc3RydWN0IEFDYXB0dXJlU2Vzc2lvbk91dHB1dCB7Ci0gICAgZXhwbGljaXQgQUNhcHR1cmVTZXNzaW9uT3V0cHV0KEFOYXRpdmVXaW5kb3cqIHdpbmRvdywgYm9vbCBpc1NoYXJlZCA9IGZhbHNlKSA6CisgICAgZXhwbGljaXQgQUNhcHR1cmVTZXNzaW9uT3V0cHV0KEFDYW1lcmFXaW5kb3dUeXBlKiB3aW5kb3csIGJvb2wgaXNTaGFyZWQgPSBmYWxzZSkgOgogICAgICAgICAgICAgbVdpbmRvdyh3aW5kb3cpLCBtSXNTaGFyZWQoaXNTaGFyZWQpIHt9OwogCiAgICAgYm9vbCBvcGVyYXRvciA9PSAoY29uc3QgQUNhcHR1cmVTZXNzaW9uT3V0cHV0JiBvdGhlcikgY29uc3QgewpAQCAtNDAsMTEgKzQ1LDEyIEBACiAgICAgICAgIHJldHVybiBtV2luZG93ID4gb3RoZXIubVdpbmRvdzsKICAgICB9CiAKLSAgICBBTmF0aXZlV2luZG93KiBtV2luZG93OwotICAgIHN0ZDo6c2V0PEFOYXRpdmVXaW5kb3cgKj4gbVNoYXJlZFdpbmRvd3M7CisgICAgQUNhbWVyYVdpbmRvd1R5cGUqIG1XaW5kb3c7CisgICAgc3RkOjpzZXQ8QUNhbWVyYVdpbmRvd1R5cGUgKj4gbVNoYXJlZFdpbmRvd3M7CiAgICAgYm9vbCAgICAgICAgICAgbUlzU2hhcmVkOwogICAgIGludCAgICAgICAgICAgIG1Sb3RhdGlvbiA9IENBTUVSQTNfU1RSRUFNX1JPVEFUSU9OXzA7CiB9OworI2VuZGlmCiAKIHN0cnVjdCBBQ2FwdHVyZVNlc3Npb25PdXRwdXRDb250YWluZXIgewogICAgIHN0ZDo6c2V0PEFDYXB0dXJlU2Vzc2lvbk91dHB1dD4gbU91dHB1dHM7CkBAIC02MCw3ICs2Niw3IEBACiAgICAgICAgICAgICBpbnQgaWQsCiAgICAgICAgICAgICBjb25zdCBBQ2FwdHVyZVNlc3Npb25PdXRwdXRDb250YWluZXIqIG91dHB1dHMsCiAgICAgICAgICAgICBjb25zdCBBQ2FtZXJhQ2FwdHVyZVNlc3Npb25fc3RhdGVDYWxsYmFja3MqIGNiLAotICAgICAgICAgICAgQ2FtZXJhRGV2aWNlKiBkZXZpY2UpIDoKKyAgICAgICAgICAgIGFuZHJvaWQ6OmFjYW06OkNhbWVyYURldmljZSogZGV2aWNlKSA6CiAgICAgICAgICAgICBtSWQoaWQpLCBtT3V0cHV0KCpvdXRwdXRzKSwgbVVzZXJTZXNzaW9uQ2FsbGJhY2soKmNiKSwKICAgICAgICAgICAgIG1EZXZpY2UoZGV2aWNlKSB7fQogCkBAIC05NywxOCArMTAzLDE4IEBACiAgICAgQUNhbWVyYURldmljZSogZ2V0RGV2aWNlKCk7CiAKICAgcHJpdmF0ZToKLSAgICBmcmllbmQgY2xhc3MgQ2FtZXJhRGV2aWNlOworICAgIGZyaWVuZCBjbGFzcyBhbmRyb2lkOjphY2FtOjpDYW1lcmFEZXZpY2U7CiAKICAgICAvLyBDbG9zZSBzZXNzaW9uIGJlY2F1c2UgYXBwIGNsb3NlIGNhbWVyYSBkZXZpY2UsIGNhbWVyYSBkZXZpY2UgZ290IEVSUk9SX0RJU0NPTk5FQ1RFRCwKICAgICAvLyBvciBhIG5ldyBzZXNzaW9uIGlzIHJlcGxhY2luZyB0aGlzIHNlc3Npb24uCiAgICAgdm9pZCBjbG9zZUJ5RGV2aWNlKCk7CiAKLSAgICBzcDxDYW1lcmFEZXZpY2U+IGdldERldmljZVNwKCk7CisgICAgc3A8YW5kcm9pZDo6YWNhbTo6Q2FtZXJhRGV2aWNlPiBnZXREZXZpY2VTcCgpOwogCiAgICAgY29uc3QgaW50IG1JZDsKICAgICBjb25zdCBBQ2FwdHVyZVNlc3Npb25PdXRwdXRDb250YWluZXIgbU91dHB1dDsKICAgICBjb25zdCBBQ2FtZXJhQ2FwdHVyZVNlc3Npb25fc3RhdGVDYWxsYmFja3MgbVVzZXJTZXNzaW9uQ2FsbGJhY2s7Ci0gICAgY29uc3Qgd3A8Q2FtZXJhRGV2aWNlPiBtRGV2aWNlOworICAgIGNvbnN0IHdwPGFuZHJvaWQ6OmFjYW06OkNhbWVyYURldmljZT4gbURldmljZTsKICAgICBib29sICBtSXNDbG9zZWQgPSBmYWxzZTsKICAgICBib29sICBtQ2xvc2VkQnlBcHAgPSBmYWxzZTsKICAgICBNdXRleCBtU2Vzc2lvbkxvY2s7CmRpZmYgLS1naXQgYS9jYW1lcmEvbmRrL2ltcGwvQUNhbWVyYURldmljZS5jcHAgYi9jYW1lcmEvbmRrL2ltcGwvQUNhbWVyYURldmljZS5jcHAKaW5kZXggNzkzYmJjNC4uMDBkYTU0ZSAxMDA2NDQKLS0tIGEvY2FtZXJhL25kay9pbXBsL0FDYW1lcmFEZXZpY2UuY3BwCisrKyBiL2NhbWVyYS9uZGsvaW1wbC9BQ2FtZXJhRGV2aWNlLmNwcApAQCAtMjcsOSArMjcsOSBAQAogI2luY2x1ZGUgIkFDYXB0dXJlUmVxdWVzdC5oIgogI2luY2x1ZGUgIkFDYW1lcmFDYXB0dXJlU2Vzc2lvbi5oIgogCi11c2luZyBuYW1lc3BhY2UgYW5kcm9pZDsKLQogbmFtZXNwYWNlIGFuZHJvaWQgeworbmFtZXNwYWNlIGFjYW0geworCiAvLyBTdGF0aWMgbWVtYmVyIGRlZmluaXRpb25zCiBjb25zdCBjaGFyKiBDYW1lcmFEZXZpY2U6OmtDb250ZXh0S2V5ICAgICAgICA9ICJDb250ZXh0IjsKIGNvbnN0IGNoYXIqIENhbWVyYURldmljZTo6a0RldmljZUtleSAgICAgICAgID0gIkRldmljZSI7CkBAIC01MCwxMSArNTAsMTEgQEAKIENhbWVyYURldmljZTo6Q2FtZXJhRGV2aWNlKAogICAgICAgICBjb25zdCBjaGFyKiBpZCwKICAgICAgICAgQUNhbWVyYURldmljZV9TdGF0ZUNhbGxiYWNrcyogY2IsCi0gICAgICAgIHN0ZDo6dW5pcXVlX3B0cjxBQ2FtZXJhTWV0YWRhdGE+IGNoYXJzLAorICAgICAgICBzcDxBQ2FtZXJhTWV0YWRhdGE+IGNoYXJzLAogICAgICAgICBBQ2FtZXJhRGV2aWNlKiB3cmFwcGVyKSA6CiAgICAgICAgIG1DYW1lcmFJZChpZCksCiAgICAgICAgIG1BcHBDYWxsYmFja3MoKmNiKSwKLSAgICAgICAgbUNoYXJzKHN0ZDo6bW92ZShjaGFycykpLAorICAgICAgICBtQ2hhcnMoY2hhcnMpLAogICAgICAgICBtU2VydmljZUNhbGxiYWNrKG5ldyBTZXJ2aWNlQ2FsbGJhY2sodGhpcykpLAogICAgICAgICBtV3JhcHBlcih3cmFwcGVyKSwKICAgICAgICAgbUluRXJyb3IoZmFsc2UpLApAQCAtNDM2LDcgKzQzNiw3IEBACiAgICAgaWYgKHJlcSA9PSBudWxscHRyKSB7CiAgICAgICAgIHJldHVybjsKICAgICB9Ci0gICAgZGVsZXRlIHJlcS0+c2V0dGluZ3M7CisgICAgcmVxLT5zZXR0aW5ncy5jbGVhcigpOwogICAgIGRlbGV0ZSByZXEtPnRhcmdldHM7CiAgICAgZGVsZXRlIHJlcTsKIH0KQEAgLTE1MTMsNSArMTUxMyw1IEBACiAgICAgcmV0dXJuIHJldDsKIH0KIAotCit9IC8vIG5hbWVzcGFjZSBhY2FtCiB9IC8vIG5hbWVzcGFjZSBhbmRyb2lkCmRpZmYgLS1naXQgYS9jYW1lcmEvbmRrL2ltcGwvQUNhbWVyYURldmljZS5oIGIvY2FtZXJhL25kay9pbXBsL0FDYW1lcmFEZXZpY2UuaAppbmRleCAxMzY5MTQ4Li44ZjU2ZDNmIDEwMDY0NAotLS0gYS9jYW1lcmEvbmRrL2ltcGwvQUNhbWVyYURldmljZS5oCisrKyBiL2NhbWVyYS9uZGsvaW1wbC9BQ2FtZXJhRGV2aWNlLmgKQEAgLTQxLDYgKzQxLDcgQEAKICNpbmNsdWRlICJBQ2FtZXJhTWV0YWRhdGEuaCIKIAogbmFtZXNwYWNlIGFuZHJvaWQgeworbmFtZXNwYWNlIGFjYW0gewogCiAvLyBXcmFwIEFDYW1lcmFDYXB0dXJlRmFpbHVyZSBzbyBpdCBjYW4gYmUgcmVmLWNvdW50ZWQKIHN0cnVjdCBDYW1lcmFDYXB0dXJlRmFpbHVyZSA6IHB1YmxpYyBSZWZCYXNlLCBwdWJsaWMgQUNhbWVyYUNhcHR1cmVGYWlsdXJlIHt9OwpAQCAtNDgsNyArNDksNyBAQAogY2xhc3MgQ2FtZXJhRGV2aWNlIGZpbmFsIDogcHVibGljIFJlZkJhc2UgewogICBwdWJsaWM6CiAgICAgQ2FtZXJhRGV2aWNlKGNvbnN0IGNoYXIqIGlkLCBBQ2FtZXJhRGV2aWNlX1N0YXRlQ2FsbGJhY2tzKiBjYiwKLSAgICAgICAgICAgICAgICAgIHN0ZDo6dW5pcXVlX3B0cjxBQ2FtZXJhTWV0YWRhdGE+IGNoYXJzLAorICAgICAgICAgICAgICAgICAgc3A8QUNhbWVyYU1ldGFkYXRhPiBjaGFycywKICAgICAgICAgICAgICAgICAgIEFDYW1lcmFEZXZpY2UqIHdyYXBwZXIpOwogICAgIH5DYW1lcmFEZXZpY2UoKTsKIApAQCAtMTU2LDcgKzE1Nyw3IEBACiAgICAgbXV0YWJsZSBNdXRleCBtRGV2aWNlTG9jazsKICAgICBjb25zdCBTdHJpbmc4IG1DYW1lcmFJZDsgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIENhbWVyYSBJRAogICAgIGNvbnN0IEFDYW1lcmFEZXZpY2VfU3RhdGVDYWxsYmFja3MgbUFwcENhbGxiYWNrczsgLy8gQ2FsbGJhY2sgdG8gYXBwCi0gICAgY29uc3Qgc3RkOjp1bmlxdWVfcHRyPEFDYW1lcmFNZXRhZGF0YT4gbUNoYXJzOyAgICAvLyBDYW1lcmEgY2hhcmFjdGVyaXN0aWNzCisgICAgY29uc3Qgc3A8QUNhbWVyYU1ldGFkYXRhPiBtQ2hhcnM7ICAgICAgICAgICAgICAgICAvLyBDYW1lcmEgY2hhcmFjdGVyaXN0aWNzCiAgICAgY29uc3Qgc3A8U2VydmljZUNhbGxiYWNrPiBtU2VydmljZUNhbGxiYWNrOwogICAgIEFDYW1lcmFEZXZpY2UqIG1XcmFwcGVyOwogCkBAIC0yODYsNiArMjg3LDcgQEAKIAogfTsKIAorfSAvLyBuYW1lc3BhY2UgYWNhbTsKIH0gLy8gbmFtZXNwYWNlIGFuZHJvaWQ7CiAKIC8qKgpAQCAtMjk0LDggKzI5Niw4IEBACiAgKi8KIHN0cnVjdCBBQ2FtZXJhRGV2aWNlIHsKICAgICBBQ2FtZXJhRGV2aWNlKGNvbnN0IGNoYXIqIGlkLCBBQ2FtZXJhRGV2aWNlX1N0YXRlQ2FsbGJhY2tzKiBjYiwKLSAgICAgICAgICAgICAgICAgIHN0ZDo6dW5pcXVlX3B0cjxBQ2FtZXJhTWV0YWRhdGE+IGNoYXJzKSA6Ci0gICAgICAgICAgICBtRGV2aWNlKG5ldyBDYW1lcmFEZXZpY2UoaWQsIGNiLCBzdGQ6Om1vdmUoY2hhcnMpLCB0aGlzKSkge30KKyAgICAgICAgICAgICAgICAgIHNwPEFDYW1lcmFNZXRhZGF0YT4gY2hhcnMpIDoKKyAgICAgICAgICAgIG1EZXZpY2UobmV3IGFuZHJvaWQ6OmFjYW06OkNhbWVyYURldmljZShpZCwgY2IsIGNoYXJzLCB0aGlzKSkge30KIAogICAgIH5BQ2FtZXJhRGV2aWNlKCkge307CiAKQEAgLTMzMSw3ICszMzMsNyBAQAogICAgIH0KIAogICBwcml2YXRlOgotICAgIGFuZHJvaWQ6OnNwPGFuZHJvaWQ6OkNhbWVyYURldmljZT4gbURldmljZTsKKyAgICBhbmRyb2lkOjpzcDxhbmRyb2lkOjphY2FtOjpDYW1lcmFEZXZpY2U+IG1EZXZpY2U7CiB9OwogCiAjZW5kaWYgLy8gX0FDQU1FUkFfREVWSUNFX0gKZGlmZiAtLWdpdCBhL2NhbWVyYS9uZGsvaW1wbC9BQ2FtZXJhTWFuYWdlci5jcHAgYi9jYW1lcmEvbmRrL2ltcGwvQUNhbWVyYU1hbmFnZXIuY3BwCmluZGV4IGM1OWQwZTcuLjdkNmVjYWMgMTAwNjQ0Ci0tLSBhL2NhbWVyYS9uZGsvaW1wbC9BQ2FtZXJhTWFuYWdlci5jcHAKKysrIGIvY2FtZXJhL25kay9pbXBsL0FDYW1lcmFNYW5hZ2VyLmNwcApAQCAtMjYsOSArMjYsMTAgQEAKICNpbmNsdWRlIDxzdGRsaWIuaD4KICNpbmNsdWRlIDxjYW1lcmEvVmVuZG9yVGFnRGVzY3JpcHRvci5oPgogCi11c2luZyBuYW1lc3BhY2UgYW5kcm9pZDsKK3VzaW5nIG5hbWVzcGFjZSBhbmRyb2lkOjphY2FtOwogCiBuYW1lc3BhY2UgYW5kcm9pZCB7CituYW1lc3BhY2UgYWNhbSB7CiAvLyBTdGF0aWMgbWVtYmVyIGRlZmluaXRpb25zCiBjb25zdCBjaGFyKiBDYW1lcmFNYW5hZ2VyR2xvYmFsOjprQ2FtZXJhSWRLZXkgICA9ICJDYW1lcmFJZCI7CiBjb25zdCBjaGFyKiBDYW1lcmFNYW5hZ2VyR2xvYmFsOjprQ2FsbGJhY2tGcEtleSA9ICJDYWxsYmFja0ZwIjsKQEAgLTM0NSw2ICszNDYsNyBAQAogICAgIH0KIH0KIAorfSAvLyBuYW1lc3BhY2UgYWNhbQogfSAvLyBuYW1lc3BhY2UgYW5kcm9pZAogCiAvKioKQEAgLTQwMiw3ICs0MDQsNyBAQAogfQogCiBjYW1lcmFfc3RhdHVzX3QgQUNhbWVyYU1hbmFnZXI6OmdldENhbWVyYUNoYXJhY3RlcmlzdGljcygKLSAgICAgICAgY29uc3QgY2hhciAqY2FtZXJhSWRTdHIsIEFDYW1lcmFNZXRhZGF0YSAqKmNoYXJhY3RlcmlzdGljcykgeworICAgICAgICBjb25zdCBjaGFyKiBjYW1lcmFJZFN0ciwgc3A8QUNhbWVyYU1ldGFkYXRhPiogY2hhcmFjdGVyaXN0aWNzKSB7CiAgICAgTXV0ZXg6OkF1dG9sb2NrIF9sKG1Mb2NrKTsKIAogICAgIHNwPGhhcmR3YXJlOjpJQ2FtZXJhU2VydmljZT4gY3MgPSBDYW1lcmFNYW5hZ2VyR2xvYmFsOjpnZXRJbnN0YW5jZSgpLmdldENhbWVyYVNlcnZpY2UoKTsKQEAgLTQzNywxOCArNDM5LDE2IEBACiAgICAgICAgIGNvbnN0IGNoYXIqIGNhbWVyYUlkLAogICAgICAgICBBQ2FtZXJhRGV2aWNlX1N0YXRlQ2FsbGJhY2tzKiBjYWxsYmFjaywKICAgICAgICAgLypvdXQqL0FDYW1lcmFEZXZpY2UqKiBvdXREZXZpY2UpIHsKLSAgICBBQ2FtZXJhTWV0YWRhdGEqIHJhd0NoYXJzOwotICAgIGNhbWVyYV9zdGF0dXNfdCByZXQgPSBnZXRDYW1lcmFDaGFyYWN0ZXJpc3RpY3MoY2FtZXJhSWQsICZyYXdDaGFycyk7CisgICAgc3A8QUNhbWVyYU1ldGFkYXRhPiBjaGFyczsKKyAgICBjYW1lcmFfc3RhdHVzX3QgcmV0ID0gZ2V0Q2FtZXJhQ2hhcmFjdGVyaXN0aWNzKGNhbWVyYUlkLCAmY2hhcnMpOwogICAgIE11dGV4OjpBdXRvbG9jayBfbChtTG9jayk7CiAgICAgaWYgKHJldCAhPSBBQ0FNRVJBX09LKSB7CiAgICAgICAgIEFMT0dFKCIlczogY2Fubm90IGdldCBjYW1lcmEgY2hhcmFjdGVyaXN0aWNzIGZvciBjYW1lcmEgJXMuIGVyciAlZCIsCiAgICAgICAgICAgICAgICAgX19GVU5DVElPTl9fLCBjYW1lcmFJZCwgcmV0KTsKICAgICAgICAgcmV0dXJuIEFDQU1FUkFfRVJST1JfSU5WQUxJRF9QQVJBTUVURVI7CiAgICAgfQotICAgIHN0ZDo6dW5pcXVlX3B0cjxBQ2FtZXJhTWV0YWRhdGE+IGNoYXJzKHJhd0NoYXJzKTsKLSAgICByYXdDaGFycyA9IG51bGxwdHI7CiAKLSAgICBBQ2FtZXJhRGV2aWNlKiBkZXZpY2UgPSBuZXcgQUNhbWVyYURldmljZShjYW1lcmFJZCwgY2FsbGJhY2ssIHN0ZDo6bW92ZShjaGFycykpOworICAgIEFDYW1lcmFEZXZpY2UqIGRldmljZSA9IG5ldyBBQ2FtZXJhRGV2aWNlKGNhbWVyYUlkLCBjYWxsYmFjaywgY2hhcnMpOwogCiAgICAgc3A8aGFyZHdhcmU6OklDYW1lcmFTZXJ2aWNlPiBjcyA9IENhbWVyYU1hbmFnZXJHbG9iYWw6OmdldEluc3RhbmNlKCkuZ2V0Q2FtZXJhU2VydmljZSgpOwogICAgIGlmIChjcyA9PSBudWxscHRyKSB7CmRpZmYgLS1naXQgYS9jYW1lcmEvbmRrL2ltcGwvQUNhbWVyYU1hbmFnZXIuaCBiL2NhbWVyYS9uZGsvaW1wbC9BQ2FtZXJhTWFuYWdlci5oCmluZGV4IGNjNDJmNzcuLjU1YmZhN2UgMTAwNjQ0Ci0tLSBhL2NhbWVyYS9uZGsvaW1wbC9BQ2FtZXJhTWFuYWdlci5oCisrKyBiL2NhbWVyYS9uZGsvaW1wbC9BQ2FtZXJhTWFuYWdlci5oCkBAIC0zNSw2ICszNSw3IEBACiAjaW5jbHVkZSA8bWFwPgogCiBuYW1lc3BhY2UgYW5kcm9pZCB7CituYW1lc3BhY2UgYWNhbSB7CiAKIC8qKgogICogUGVyLXByb2Nlc3Mgc2luZ2xldG9uIGluc3RhbmNlIG9mIENhbWVyYU1hbmdlci4gU2hhcmVkIGJ5IGFsbCBBQ2FtZXJhTWFuYWdlcgpAQCAtMTcyLDYgKzE3Myw3IEBACiAgICAgfkNhbWVyYU1hbmFnZXJHbG9iYWwoKTsKIH07CiAKK30gLy8gbmFtZXNwYWNlIGFjYW07CiB9IC8vIG5hbWVzcGFjZSBhbmRyb2lkOwogCiAvKioKQEAgLTE4MCwxMyArMTgyLDEzIEBACiAgKi8KIHN0cnVjdCBBQ2FtZXJhTWFuYWdlciB7CiAgICAgQUNhbWVyYU1hbmFnZXIoKSA6Ci0gICAgICAgICAgICBtR2xvYmFsTWFuYWdlcigmKGFuZHJvaWQ6OkNhbWVyYU1hbmFnZXJHbG9iYWw6OmdldEluc3RhbmNlKCkpKSB7fQorICAgICAgICAgICAgbUdsb2JhbE1hbmFnZXIoJihhbmRyb2lkOjphY2FtOjpDYW1lcmFNYW5hZ2VyR2xvYmFsOjpnZXRJbnN0YW5jZSgpKSkge30KICAgICB+QUNhbWVyYU1hbmFnZXIoKTsKICAgICBjYW1lcmFfc3RhdHVzX3QgZ2V0Q2FtZXJhSWRMaXN0KEFDYW1lcmFJZExpc3QqKiBjYW1lcmFJZExpc3QpOwogICAgIHN0YXRpYyB2b2lkICAgICBkZWxldGVDYW1lcmFJZExpc3QoQUNhbWVyYUlkTGlzdCogY2FtZXJhSWRMaXN0KTsKIAogICAgIGNhbWVyYV9zdGF0dXNfdCBnZXRDYW1lcmFDaGFyYWN0ZXJpc3RpY3MoCi0gICAgICAgICAgICBjb25zdCBjaGFyICpjYW1lcmFJZCwgQUNhbWVyYU1ldGFkYXRhICoqY2hhcmFjdGVyaXN0aWNzKTsKKyAgICAgICAgICAgIGNvbnN0IGNoYXIqIGNhbWVyYUlkLCBhbmRyb2lkOjpzcDxBQ2FtZXJhTWV0YWRhdGE+KiBjaGFyYWN0ZXJpc3RpY3MpOwogICAgIGNhbWVyYV9zdGF0dXNfdCBvcGVuQ2FtZXJhKGNvbnN0IGNoYXIqIGNhbWVyYUlkLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFDYW1lcmFEZXZpY2VfU3RhdGVDYWxsYmFja3MqIGNhbGxiYWNrLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qb3V0Ki9BQ2FtZXJhRGV2aWNlKiogZGV2aWNlKTsKQEAgLTE5Niw3ICsxOTgsNyBAQAogICAgICAgICBrQ2FtZXJhSWRMaXN0Tm90SW5pdCA9IC0xCiAgICAgfTsKICAgICBhbmRyb2lkOjpNdXRleCAgICAgICAgIG1Mb2NrOwotICAgIGFuZHJvaWQ6OnNwPGFuZHJvaWQ6OkNhbWVyYU1hbmFnZXJHbG9iYWw+IG1HbG9iYWxNYW5hZ2VyOworICAgIGFuZHJvaWQ6OnNwPGFuZHJvaWQ6OmFjYW06OkNhbWVyYU1hbmFnZXJHbG9iYWw+IG1HbG9iYWxNYW5hZ2VyOwogfTsKIAogI2VuZGlmIC8vX0FDQU1FUkFfTUFOQUdFUl9ICmRpZmYgLS1naXQgYS9jYW1lcmEvbmRrL2ltcGwvQUNhbWVyYU1ldGFkYXRhLmNwcCBiL2NhbWVyYS9uZGsvaW1wbC9BQ2FtZXJhTWV0YWRhdGEuY3BwCmluZGV4IGZjMDBhMmQuLjk0YjU3MTMgMTAwNjQ0Ci0tLSBhL2NhbWVyYS9uZGsvaW1wbC9BQ2FtZXJhTWV0YWRhdGEuY3BwCisrKyBiL2NhbWVyYS9uZGsvaW1wbC9BQ2FtZXJhTWV0YWRhdGEuY3BwCkBAIC0zMiw2ICszMiwxMCBAQAogICAgIGlmIChtVHlwZSA9PSBBQ01fQ0hBUkFDVEVSSVNUSUNTKSB7CiAgICAgICAgIGZpbHRlclVuc3VwcG9ydGVkRmVhdHVyZXMoKTsKICAgICAgICAgZmlsdGVyU3RyZWFtQ29uZmlndXJhdGlvbnMoKTsKKyAgICAgICAgZmlsdGVyRHVyYXRpb25zKEFORFJPSURfU0NBTEVSX0FWQUlMQUJMRV9NSU5fRlJBTUVfRFVSQVRJT05TKTsKKyAgICAgICAgZmlsdGVyRHVyYXRpb25zKEFORFJPSURfU0NBTEVSX0FWQUlMQUJMRV9TVEFMTF9EVVJBVElPTlMpOworICAgICAgICBmaWx0ZXJEdXJhdGlvbnMoQU5EUk9JRF9ERVBUSF9BVkFJTEFCTEVfREVQVEhfTUlOX0ZSQU1FX0RVUkFUSU9OUyk7CisgICAgICAgIGZpbHRlckR1cmF0aW9ucyhBTkRST0lEX0RFUFRIX0FWQUlMQUJMRV9ERVBUSF9TVEFMTF9EVVJBVElPTlMpOwogICAgIH0KICAgICAvLyBUT0RPOiBmaWx0ZXIgcmVxdWVzdC9yZXN1bHQga2V5cwogfQpAQCAtODIsNiArODYsNzIgQEAKIAogCiB2b2lkCitBQ2FtZXJhTWV0YWRhdGE6OmZpbHRlckR1cmF0aW9ucyh1aW50MzJfdCB0YWcpIHsKKyAgICBjb25zdCBpbnQgU1RSRUFNX0NPTkZJR1VSQVRJT05fU0laRSA9IDQ7CisgICAgY29uc3QgaW50IFNUUkVBTV9GT1JNQVRfT0ZGU0VUID0gMDsKKyAgICBjb25zdCBpbnQgU1RSRUFNX1dJRFRIX09GRlNFVCA9IDE7CisgICAgY29uc3QgaW50IFNUUkVBTV9IRUlHSFRfT0ZGU0VUID0gMjsKKyAgICBjb25zdCBpbnQgU1RSRUFNX0RVUkFUSU9OX09GRlNFVCA9IDM7CisgICAgY2FtZXJhX21ldGFkYXRhX2VudHJ5IGVudHJ5ID0gbURhdGEuZmluZCh0YWcpOworICAgIGlmIChlbnRyeS5jb3VudCA9PSAwIHx8IGVudHJ5LmNvdW50ICUgNCB8fCBlbnRyeS50eXBlICE9IFRZUEVfSU5UNjQpIHsKKyAgICAgICAgQUxPR0UoIiVzOiBtYWxmb3JtZWQgZHVyYXRpb24ga2V5ICVkISBjb3VudCAlenUsIHR5cGUgJWQiLAorICAgICAgICAgICAgICAgIF9fRlVOQ1RJT05fXywgdGFnLCBlbnRyeS5jb3VudCwgZW50cnkudHlwZSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgVmVjdG9yPGludDY0X3Q+IGZpbHRlcmVkRHVyYXRpb25zOworICAgIGZpbHRlcmVkRHVyYXRpb25zLnNldENhcGFjaXR5KGVudHJ5LmNvdW50ICogMik7CisKKyAgICBmb3IgKHNpemVfdCBpPTA7IGkgPCBlbnRyeS5jb3VudDsgaSArPSBTVFJFQU1fQ09ORklHVVJBVElPTl9TSVpFKSB7CisgICAgICAgIGludDY0X3QgZm9ybWF0ID0gZW50cnkuZGF0YS5pNjRbaSArIFNUUkVBTV9GT1JNQVRfT0ZGU0VUXTsKKyAgICAgICAgaW50NjRfdCB3aWR0aCA9IGVudHJ5LmRhdGEuaTY0W2kgKyBTVFJFQU1fV0lEVEhfT0ZGU0VUXTsKKyAgICAgICAgaW50NjRfdCBoZWlnaHQgPSBlbnRyeS5kYXRhLmk2NFtpICsgU1RSRUFNX0hFSUdIVF9PRkZTRVRdOworICAgICAgICBpbnQ2NF90IGR1cmF0aW9uID0gZW50cnkuZGF0YS5pMzJbaSArIFNUUkVBTV9EVVJBVElPTl9PRkZTRVRdOworCisgICAgICAgIC8vIExlYXZlIHRoZSB1bmZpbHRlcmVkIGZvcm1hdCBpbiBzbyBhcHBzIGRlcGVuZGluZyBvbiBwcmV2aW91cyB3cm9uZworICAgICAgICAvLyBmaWx0ZXIgYmVoYXZpb3IgY29udGludWUgdG8gd29yaworICAgICAgICBmaWx0ZXJlZER1cmF0aW9ucy5wdXNoX2JhY2soZm9ybWF0KTsKKyAgICAgICAgZmlsdGVyZWREdXJhdGlvbnMucHVzaF9iYWNrKHdpZHRoKTsKKyAgICAgICAgZmlsdGVyZWREdXJhdGlvbnMucHVzaF9iYWNrKGhlaWdodCk7CisgICAgICAgIGZpbHRlcmVkRHVyYXRpb25zLnB1c2hfYmFjayhkdXJhdGlvbik7CisKKyAgICAgICAgLy8gVHJhbnNsYXRlIEhBTCBmb3JtYXRzIHRvIE5ESyBmb3JtYXQKKyAgICAgICAgc3dpdGNoICh0YWcpIHsKKyAgICAgICAgICAgIGNhc2UgQU5EUk9JRF9TQ0FMRVJfQVZBSUxBQkxFX01JTl9GUkFNRV9EVVJBVElPTlM6CisgICAgICAgICAgICBjYXNlIEFORFJPSURfU0NBTEVSX0FWQUlMQUJMRV9TVEFMTF9EVVJBVElPTlM6CisgICAgICAgICAgICAgICAgaWYgKGZvcm1hdCA9PSBIQUxfUElYRUxfRk9STUFUX0JMT0IpIHsKKyAgICAgICAgICAgICAgICAgICAgZm9ybWF0ID0gQUlNQUdFX0ZPUk1BVF9KUEVHOworICAgICAgICAgICAgICAgICAgICBmaWx0ZXJlZER1cmF0aW9ucy5wdXNoX2JhY2soZm9ybWF0KTsKKyAgICAgICAgICAgICAgICAgICAgZmlsdGVyZWREdXJhdGlvbnMucHVzaF9iYWNrKHdpZHRoKTsKKyAgICAgICAgICAgICAgICAgICAgZmlsdGVyZWREdXJhdGlvbnMucHVzaF9iYWNrKGhlaWdodCk7CisgICAgICAgICAgICAgICAgICAgIGZpbHRlcmVkRHVyYXRpb25zLnB1c2hfYmFjayhkdXJhdGlvbik7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBBTkRST0lEX0RFUFRIX0FWQUlMQUJMRV9ERVBUSF9NSU5fRlJBTUVfRFVSQVRJT05TOgorICAgICAgICAgICAgY2FzZSBBTkRST0lEX0RFUFRIX0FWQUlMQUJMRV9ERVBUSF9TVEFMTF9EVVJBVElPTlM6CisgICAgICAgICAgICAgICAgaWYgKGZvcm1hdCA9PSBIQUxfUElYRUxfRk9STUFUX0JMT0IpIHsKKyAgICAgICAgICAgICAgICAgICAgZm9ybWF0ID0gQUlNQUdFX0ZPUk1BVF9ERVBUSF9QT0lOVF9DTE9VRDsKKyAgICAgICAgICAgICAgICAgICAgZmlsdGVyZWREdXJhdGlvbnMucHVzaF9iYWNrKGZvcm1hdCk7CisgICAgICAgICAgICAgICAgICAgIGZpbHRlcmVkRHVyYXRpb25zLnB1c2hfYmFjayh3aWR0aCk7CisgICAgICAgICAgICAgICAgICAgIGZpbHRlcmVkRHVyYXRpb25zLnB1c2hfYmFjayhoZWlnaHQpOworICAgICAgICAgICAgICAgICAgICBmaWx0ZXJlZER1cmF0aW9ucy5wdXNoX2JhY2soZHVyYXRpb24pOworICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoZm9ybWF0ID09IEhBTF9QSVhFTF9GT1JNQVRfWTE2KSB7CisgICAgICAgICAgICAgICAgICAgIGZvcm1hdCA9IEFJTUFHRV9GT1JNQVRfREVQVEgxNjsKKyAgICAgICAgICAgICAgICAgICAgZmlsdGVyZWREdXJhdGlvbnMucHVzaF9iYWNrKGZvcm1hdCk7CisgICAgICAgICAgICAgICAgICAgIGZpbHRlcmVkRHVyYXRpb25zLnB1c2hfYmFjayh3aWR0aCk7CisgICAgICAgICAgICAgICAgICAgIGZpbHRlcmVkRHVyYXRpb25zLnB1c2hfYmFjayhoZWlnaHQpOworICAgICAgICAgICAgICAgICAgICBmaWx0ZXJlZER1cmF0aW9ucy5wdXNoX2JhY2soZHVyYXRpb24pOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgLy8gU2hvdWxkIG5vdCByZWFjaCBoZXJlCisgICAgICAgICAgICAgICAgQUxPR0UoIiVzOiBVbmtvd24gdGFnIDB4JXgiLCBfX0ZVTkNUSU9OX18sIHRhZyk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBtRGF0YS51cGRhdGUodGFnLCBmaWx0ZXJlZER1cmF0aW9ucyk7Cit9CisKK3ZvaWQKIEFDYW1lcmFNZXRhZGF0YTo6ZmlsdGVyU3RyZWFtQ29uZmlndXJhdGlvbnMoKSB7CiAgICAgY29uc3QgaW50IFNUUkVBTV9DT05GSUdVUkFUSU9OX1NJWkUgPSA0OwogICAgIGNvbnN0IGludCBTVFJFQU1fRk9STUFUX09GRlNFVCA9IDA7CkBAIC0zNjAsNiArNDMwLDcgQEAKICAgICBBTkRST0lEX1NUQVRJU1RJQ1NfSU5GT19NQVhfSElTVE9HUkFNX0NPVU5ULAogICAgIEFORFJPSURfU1RBVElTVElDU19JTkZPX01BWF9TSEFSUE5FU1NfTUFQX1ZBTFVFLAogICAgIEFORFJPSURfU1RBVElTVElDU19JTkZPX1NIQVJQTkVTU19NQVBfU0laRSwKKyAgICBBTkRST0lEX0lORk9fU1VQUE9SVEVEX0JVRkZFUl9NQU5BR0VNRU5UX1ZFUlNJT04sCiAgICAgQU5EUk9JRF9ERVBUSF9NQVhfREVQVEhfU0FNUExFUywKIH0pOwogCmRpZmYgLS1naXQgYS9jYW1lcmEvbmRrL2ltcGwvQUNhbWVyYU1ldGFkYXRhLmggYi9jYW1lcmEvbmRrL2ltcGwvQUNhbWVyYU1ldGFkYXRhLmgKaW5kZXggMGZkN2VmYS4uZjIxZGJhZiAxMDA2NDQKLS0tIGEvY2FtZXJhL25kay9pbXBsL0FDYW1lcmFNZXRhZGF0YS5oCisrKyBiL2NhbWVyYS9uZGsvaW1wbC9BQ2FtZXJhTWV0YWRhdGEuaApAQCAtMjIsNyArMjIsMTMgQEAKICNpbmNsdWRlIDx1dGlscy9NdXRleC5oPgogI2luY2x1ZGUgPHV0aWxzL1JlZkJhc2UuaD4KICNpbmNsdWRlIDx1dGlscy9WZWN0b3IuaD4KKworI2lmZGVmIF9fQU5EUk9JRF9WTkRLX18KKyNpbmNsdWRlIDxDYW1lcmFNZXRhZGF0YS5oPgordXNpbmcgQ2FtZXJhTWV0YWRhdGEgPSBhbmRyb2lkOjpoYXJkd2FyZTo6Y2FtZXJhOjpjb21tb246OlYxXzA6OmhlbHBlcjo6Q2FtZXJhTWV0YWRhdGE7CisjZWxzZQogI2luY2x1ZGUgPGNhbWVyYS9DYW1lcmFNZXRhZGF0YS5oPgorI2VuZGlmCiAKICNpbmNsdWRlIDxjYW1lcmEvTmRrQ2FtZXJhTWV0YWRhdGEuaD4KIApAQCAtNTgsMTMgKzY0LDE2IEBACiAgICAgY2FtZXJhX3N0YXR1c190IGdldFRhZ3MoLypvdXQqL2ludDMyX3QqIG51bVRhZ3MsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLypvdXQqL2NvbnN0IHVpbnQzMl90KiogdGFncykgY29uc3Q7CiAKKyAgICBjb25zdCBDYW1lcmFNZXRhZGF0YSYgZ2V0SW50ZXJuYWxEYXRhKCkgY29uc3Q7CisKKyAgcHJpdmF0ZToKKwogICAgIGJvb2wgaXNOZGtTdXBwb3J0ZWRDYXBhYmlsaXR5KGNvbnN0IGludDMyX3QgY2FwYWJpbGl0eSk7CiAgICAgc3RhdGljIGlubGluZSBib29sIGlzVmVuZG9yVGFnKGNvbnN0IHVpbnQzMl90IHRhZyk7CiAgICAgc3RhdGljIGJvb2wgaXNDYXB0dXJlUmVxdWVzdFRhZyhjb25zdCB1aW50MzJfdCB0YWcpOwogICAgIHZvaWQgZmlsdGVyVW5zdXBwb3J0ZWRGZWF0dXJlcygpOyAvLyBIaWRlIGZlYXR1cmVzIG5vdCB5ZXQgc3VwcG9ydGVkIGJ5IE5ESwogICAgIHZvaWQgZmlsdGVyU3RyZWFtQ29uZmlndXJhdGlvbnMoKTsgLy8gSGlkZSBpbnB1dCBzdHJlYW1zLCB0cmFuc2xhdGUgaGFsIGZvcm1hdCB0byBOREsgZm9ybWF0cwotCi0gICAgY29uc3QgQ2FtZXJhTWV0YWRhdGEmIGdldEludGVybmFsRGF0YSgpIGNvbnN0OworICAgIHZvaWQgZmlsdGVyRHVyYXRpb25zKHVpbnQzMl90IHRhZyk7IC8vIHRyYW5zbGF0ZSBoYWwgZm9ybWF0IHRvIE5ESyBmb3JtYXRzCiAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBJTlRFUk5BTF9ULCB0eXBlbmFtZSBOREtfVD4KICAgICBjYW1lcmFfc3RhdHVzX3QgdXBkYXRlSW1wbCh1aW50MzJfdCB0YWcsIHVpbnQzMl90IGNvdW50LCBjb25zdCBOREtfVCogZGF0YSkgewpAQCAtOTYsNyArMTA1LDYgQEAKICAgICAgICAgfQogICAgIH0KIAotICBwcml2YXRlOgogICAgIC8vIGd1YXJkIGFjY2VzcyBvZiBwdWJsaWMgQVBJczogZ2V0L3VwZGF0ZS9nZXRUYWdzCiAgICAgbXV0YWJsZSBNdXRleCAgICBtTG9jazsKICAgICBDYW1lcmFNZXRhZGF0YSAgIG1EYXRhOwpkaWZmIC0tZ2l0IGEvY2FtZXJhL25kay9pbXBsL0FDYXB0dXJlUmVxdWVzdC5oIGIvY2FtZXJhL25kay9pbXBsL0FDYXB0dXJlUmVxdWVzdC5oCmluZGV4IDA2YjJjYzMuLjVjODJhYjcgMTAwNjQ0Ci0tLSBhL2NhbWVyYS9uZGsvaW1wbC9BQ2FwdHVyZVJlcXVlc3QuaAorKysgYi9jYW1lcmEvbmRrL2ltcGwvQUNhcHR1cmVSZXF1ZXN0LmgKQEAgLTIxLDggKzIxLDExIEBACiAKIHVzaW5nIG5hbWVzcGFjZSBhbmRyb2lkOwogCisjaWZkZWYgX19BTkRST0lEX1ZOREtfXworI2luY2x1ZGUgIm5ka192ZW5kb3IvaW1wbC9BQ2FwdHVyZVJlcXVlc3RWZW5kb3IuaCIKKyNlbHNlCiBzdHJ1Y3QgQUNhbWVyYU91dHB1dFRhcmdldCB7Ci0gICAgZXhwbGljaXQgQUNhbWVyYU91dHB1dFRhcmdldChBTmF0aXZlV2luZG93KiB3aW5kb3cpIDogbVdpbmRvdyh3aW5kb3cpIHt9OworICAgIGV4cGxpY2l0IEFDYW1lcmFPdXRwdXRUYXJnZXQoQUNhbWVyYVdpbmRvd1R5cGUqIHdpbmRvdykgOiBtV2luZG93KHdpbmRvdykge307CiAKICAgICBib29sIG9wZXJhdG9yID09IChjb25zdCBBQ2FtZXJhT3V0cHV0VGFyZ2V0JiBvdGhlcikgY29uc3QgewogICAgICAgICByZXR1cm4gbVdpbmRvdyA9PSBvdGhlci5tV2luZG93OwpAQCAtMzcsOCArNDAsOSBAQAogICAgICAgICByZXR1cm4gbVdpbmRvdyA+IG90aGVyLm1XaW5kb3c7CiAgICAgfQogCi0gICAgQU5hdGl2ZVdpbmRvdyogbVdpbmRvdzsKKyAgICBBQ2FtZXJhV2luZG93VHlwZSogbVdpbmRvdzsKIH07CisjZW5kaWYKIAogc3RydWN0IEFDYW1lcmFPdXRwdXRUYXJnZXRzIHsKICAgICBzdGQ6OnNldDxBQ2FtZXJhT3V0cHV0VGFyZ2V0PiBtT3V0cHV0czsKQEAgLTU1LDcgKzU5LDcgQEAKICAgICAgICAgcmV0dXJuIEFDQU1FUkFfT0s7CiAgICAgfQogCi0gICAgQUNhbWVyYU1ldGFkYXRhKiAgICAgIHNldHRpbmdzOworICAgIHNwPEFDYW1lcmFNZXRhZGF0YT4gICBzZXR0aW5nczsKICAgICBBQ2FtZXJhT3V0cHV0VGFyZ2V0cyogdGFyZ2V0czsKICAgICB2b2lkKiAgICAgICAgICAgICAgICAgY29udGV4dDsKIH07CmRpZmYgLS1naXQgYS9jYW1lcmEvbmRrL2luY2x1ZGUvY2FtZXJhL05ka0NhbWVyYUNhcHR1cmVTZXNzaW9uLmggYi9jYW1lcmEvbmRrL2luY2x1ZGUvY2FtZXJhL05ka0NhbWVyYUNhcHR1cmVTZXNzaW9uLmgKaW5kZXggNWUwZGI2MC4uMTI0NDU4MiAxMDA2NDQKLS0tIGEvY2FtZXJhL25kay9pbmNsdWRlL2NhbWVyYS9OZGtDYW1lcmFDYXB0dXJlU2Vzc2lvbi5oCisrKyBiL2NhbWVyYS9uZGsvaW5jbHVkZS9jYW1lcmEvTmRrQ2FtZXJhQ2FwdHVyZVNlc3Npb24uaApAQCAtMzUsMTAgKzM1LDEwIEBACiAjaW5jbHVkZSA8c3lzL2NkZWZzLmg+CiAjaW5jbHVkZSA8c3RkYm9vbC5oPgogCi0jaW5jbHVkZSA8YW5kcm9pZC9uYXRpdmVfd2luZG93Lmg+CiAjaW5jbHVkZSAiTmRrQ2FtZXJhRXJyb3IuaCIKICNpbmNsdWRlICJOZGtDYW1lcmFNZXRhZGF0YS5oIgogI2luY2x1ZGUgIk5ka0NhcHR1cmVSZXF1ZXN0LmgiCisjaW5jbHVkZSAiTmRrQ2FtZXJhV2luZG93VHlwZS5oIgogCiAjaWZuZGVmIF9OREtfQ0FNRVJBX0NBUFRVUkVfU0VTU0lPTl9ICiAjZGVmaW5lIF9OREtfQ0FNRVJBX0NBUFRVUkVfU0VTU0lPTl9ICkBAIC0yNDYsNyArMjQ2LDcgQEAKICAqLwogdHlwZWRlZiB2b2lkICgqQUNhbWVyYUNhcHR1cmVTZXNzaW9uX2NhcHR1cmVDYWxsYmFja19idWZmZXJMb3N0KSgKICAgICAgICAgdm9pZCogY29udGV4dCwgQUNhbWVyYUNhcHR1cmVTZXNzaW9uKiBzZXNzaW9uLAotICAgICAgICBBQ2FwdHVyZVJlcXVlc3QqIHJlcXVlc3QsIEFOYXRpdmVXaW5kb3cqIHdpbmRvdywgaW50NjRfdCBmcmFtZU51bWJlcik7CisgICAgICAgIEFDYXB0dXJlUmVxdWVzdCogcmVxdWVzdCwgQUNhbWVyYVdpbmRvd1R5cGUqIHdpbmRvdywgaW50NjRfdCBmcmFtZU51bWJlcik7CiAKIHR5cGVkZWYgc3RydWN0IEFDYW1lcmFDYXB0dXJlU2Vzc2lvbl9jYXB0dXJlQ2FsbGJhY2tzIHsKICAgICAvLy8gb3B0aW9uYWwgYXBwbGljYXRpb24gY29udGV4dC4KZGlmZiAtLWdpdCBhL2NhbWVyYS9uZGsvaW5jbHVkZS9jYW1lcmEvTmRrQ2FtZXJhRGV2aWNlLmggYi9jYW1lcmEvbmRrL2luY2x1ZGUvY2FtZXJhL05ka0NhbWVyYURldmljZS5oCmluZGV4IDdjMTNiMzQuLjRmZTQzZDUgMTAwNjQ0Ci0tLSBhL2NhbWVyYS9uZGsvaW5jbHVkZS9jYW1lcmEvTmRrQ2FtZXJhRGV2aWNlLmgKKysrIGIvY2FtZXJhL25kay9pbmNsdWRlL2NhbWVyYS9OZGtDYW1lcmFEZXZpY2UuaApAQCAtMzQsMTAgKzM0LDEwIEBACiAgKi8KICNpbmNsdWRlIDxzeXMvY2RlZnMuaD4KIAotI2luY2x1ZGUgPGFuZHJvaWQvbmF0aXZlX3dpbmRvdy5oPgogI2luY2x1ZGUgIk5ka0NhbWVyYUVycm9yLmgiCiAjaW5jbHVkZSAiTmRrQ2FwdHVyZVJlcXVlc3QuaCIKICNpbmNsdWRlICJOZGtDYW1lcmFDYXB0dXJlU2Vzc2lvbi5oIgorI2luY2x1ZGUgIk5ka0NhbWVyYVdpbmRvd1R5cGUuaCIKIAogI2lmbmRlZiBfTkRLX0NBTUVSQV9ERVZJQ0VfSAogI2RlZmluZSBfTkRLX0NBTUVSQV9ERVZJQ0VfSApAQCAtMzQ1LDcgKzM0NSw3IEBACiAgKiBAc2VlIEFDYXB0dXJlU2Vzc2lvbk91dHB1dENvbnRhaW5lcl9hZGQKICAqLwogY2FtZXJhX3N0YXR1c190IEFDYXB0dXJlU2Vzc2lvbk91dHB1dF9jcmVhdGUoCi0gICAgICAgIEFOYXRpdmVXaW5kb3cqIGFudywgLypvdXQqL0FDYXB0dXJlU2Vzc2lvbk91dHB1dCoqIG91dHB1dCkgX19JTlRST0RVQ0VEX0lOKDI0KTsKKyAgICAgICAgQUNhbWVyYVdpbmRvd1R5cGUqIGFudywgLypvdXQqL0FDYXB0dXJlU2Vzc2lvbk91dHB1dCoqIG91dHB1dCkgX19JTlRST0RVQ0VEX0lOKDI0KTsKIAogLyoqCiAgKiBGcmVlIGEgQUNhcHR1cmVTZXNzaW9uT3V0cHV0IG9iamVjdC4KQEAgLTY5NCw3ICs2OTQsNyBAQAogICogQHNlZSBBQ2FwdHVyZVNlc3Npb25PdXRwdXRDb250YWluZXJfYWRkCiAgKi8KIGNhbWVyYV9zdGF0dXNfdCBBQ2FwdHVyZVNlc3Npb25TaGFyZWRPdXRwdXRfY3JlYXRlKAotICAgICAgICBBTmF0aXZlV2luZG93KiBhbncsIC8qb3V0Ki9BQ2FwdHVyZVNlc3Npb25PdXRwdXQqKiBvdXRwdXQpIF9fSU5UUk9EVUNFRF9JTigyOCk7CisgICAgICAgIEFDYW1lcmFXaW5kb3dUeXBlKiBhbncsIC8qb3V0Ki9BQ2FwdHVyZVNlc3Npb25PdXRwdXQqKiBvdXRwdXQpIF9fSU5UUk9EVUNFRF9JTigyOCk7CiAKIC8qKgogICogQWRkIGEgbmF0aXZlIHdpbmRvdyB0byBzaGFyZWQgQUNhcHR1cmVTZXNzaW9uT3V0cHV0LgpAQCAtNzEyLDcgKzcxMiw3IEBACiAgKiAgICAgICAgICAgICBBQ2FwdHVyZVNlc3Npb25PdXRwdXQuPC9saT48L3VsPgogICovCiBjYW1lcmFfc3RhdHVzX3QgQUNhcHR1cmVTZXNzaW9uU2hhcmVkT3V0cHV0X2FkZChBQ2FwdHVyZVNlc3Npb25PdXRwdXQgKm91dHB1dCwKLSAgICAgICAgQU5hdGl2ZVdpbmRvdyAqYW53KSBfX0lOVFJPRFVDRURfSU4oMjgpOworICAgICAgICBBQ2FtZXJhV2luZG93VHlwZSAqYW53KSBfX0lOVFJPRFVDRURfSU4oMjgpOwogCiAvKioKICAqIFJlbW92ZSBhIG5hdGl2ZSB3aW5kb3cgZnJvbSBzaGFyZWQgQUNhcHR1cmVTZXNzaW9uT3V0cHV0LgpAQCAtNzI4LDcgKzcyOCw3IEBACiAgKiAgICAgICAgICAgICBBQ2FwdHVyZVNlc3Npb25PdXRwdXQuPC9saT48L3VsPgogICovCiBjYW1lcmFfc3RhdHVzX3QgQUNhcHR1cmVTZXNzaW9uU2hhcmVkT3V0cHV0X3JlbW92ZShBQ2FwdHVyZVNlc3Npb25PdXRwdXQgKm91dHB1dCwKLSAgICAgICAgQU5hdGl2ZVdpbmRvdyogYW53KSBfX0lOVFJPRFVDRURfSU4oMjgpOworICAgICAgICBBQ2FtZXJhV2luZG93VHlwZSogYW53KSBfX0lOVFJPRFVDRURfSU4oMjgpOwogCiAvKioKICAqIENyZWF0ZSBhIG5ldyBjYW1lcmEgY2FwdHVyZSBzZXNzaW9uIHNpbWlsYXIgdG8ge0BsaW5rIEFDYW1lcmFEZXZpY2VfY3JlYXRlQ2FwdHVyZVNlc3Npb259LiBUaGlzCmRpZmYgLS1naXQgYS9jYW1lcmEvbmRrL2luY2x1ZGUvY2FtZXJhL05ka0NhbWVyYU1ldGFkYXRhVGFncy5oIGIvY2FtZXJhL25kay9pbmNsdWRlL2NhbWVyYS9OZGtDYW1lcmFNZXRhZGF0YVRhZ3MuaAppbmRleCBhOWFmNzdlLi5jYjQ3NGY0IDEwMDY0NAotLS0gYS9jYW1lcmEvbmRrL2luY2x1ZGUvY2FtZXJhL05ka0NhbWVyYU1ldGFkYXRhVGFncy5oCisrKyBiL2NhbWVyYS9uZGsvaW5jbHVkZS9jYW1lcmEvTmRrQ2FtZXJhTWV0YWRhdGFUYWdzLmgKQEAgLTI3ODMsNyArMjc4Myw3IEBACiAgICAgICogICB7QGxpbmsgQUlNQUdFX0ZPUk1BVF9SQVcxMiBSQVcxMn0uPC9saT4KICAgICAgKiA8bGk+UHJvY2Vzc2VkIChidXQgbm90LXN0YWxsaW5nKTogYW55IG5vbi1SQVcgZm9ybWF0IHdpdGhvdXQgYSBzdGFsbCBkdXJhdGlvbi4gIFR5cGljYWxseQogICAgICAqICAge0BsaW5rIEFJTUFHRV9GT1JNQVRfWVVWXzQyMF84ODggWVVWXzQyMF84ODh9LAotICAgICAqICAgPGEgaHJlZj0iaHR0cHM6Ly9kZXZlbG9wZXIuYW5kcm9pZC5jb20vcmVmZXJlbmNlL2FuZHJvaWQvZ3JhcGhpY3MvSW1hZ2VGb3JtYXQuaHRtbCNOVjIxIj5OVjIxPC9hPiwgb3IgPGEgaHJlZj0iaHR0cHM6Ly9kZXZlbG9wZXIuYW5kcm9pZC5jb20vcmVmZXJlbmNlL2FuZHJvaWQvZ3JhcGhpY3MvSW1hZ2VGb3JtYXQuaHRtbCNZVjEyIj5ZVjEyPC9hPi48L2xpPgorICAgICAqICAgPGEgaHJlZj0iaHR0cHM6Ly9kZXZlbG9wZXIuYW5kcm9pZC5jb20vcmVmZXJlbmNlL2FuZHJvaWQvZ3JhcGhpY3MvSW1hZ2VGb3JtYXQuaHRtbCNOVjIxIj5OVjIxPC9hPiwgPGEgaHJlZj0iaHR0cHM6Ly9kZXZlbG9wZXIuYW5kcm9pZC5jb20vcmVmZXJlbmNlL2FuZHJvaWQvZ3JhcGhpY3MvSW1hZ2VGb3JtYXQuaHRtbCNZVjEyIj5ZVjEyPC9hPiwgb3Ige0BsaW5rIEFJTUFHRV9GT1JNQVRfWTggWTh9IC48L2xpPgogICAgICAqIDwvdWw+CiAgICAgICoKICAgICAgKiBAc2VlIEFDQU1FUkFfU0NBTEVSX0FWQUlMQUJMRV9TVFJFQU1fQ09ORklHVVJBVElPTlMKQEAgLTMyNTEsNiArMzI1MSw3IEBACiAgICAgICogPGxpPntAbGluayBBSU1BR0VfRk9STUFUX1lVVl80MjBfODg4IH08L2xpPgogICAgICAqIDxsaT57QGxpbmsgQUlNQUdFX0ZPUk1BVF9SQVcxMCB9PC9saT4KICAgICAgKiA8bGk+e0BsaW5rIEFJTUFHRV9GT1JNQVRfUkFXMTIgfTwvbGk+CisgICAgICogPGxpPntAbGluayBBSU1BR0VfRk9STUFUX1k4IH08L2xpPgogICAgICAqIDwvdWw+CiAgICAgICogPHA+QWxsIG90aGVyIGZvcm1hdHMgbWF5IG9yIG1heSBub3QgaGF2ZSBhbiBhbGxvd2VkIHN0YWxsIGR1cmF0aW9uIG9uCiAgICAgICogYSBwZXItY2FwYWJpbGl0eSBiYXNpczsgcmVmZXIgdG8gQUNBTUVSQV9SRVFVRVNUX0FWQUlMQUJMRV9DQVBBQklMSVRJRVMKQEAgLTMyODgsNiArMzI4OSw4MSBAQAogICAgICAqLwogICAgIEFDQU1FUkFfU0NBTEVSX0NST1BQSU5HX1RZUEUgPSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGJ5dGUgKGFjYW1lcmFfbWV0YWRhdGFfZW51bV9hbmRyb2lkX3NjYWxlcl9jcm9wcGluZ190eXBlX3QpCiAgICAgICAgICAgICBBQ0FNRVJBX1NDQUxFUl9TVEFSVCArIDEzLAorICAgIC8qKgorICAgICAqIDxwPlJlY29tbWVuZGVkIHN0cmVhbSBjb25maWd1cmF0aW9ucyBmb3IgY29tbW9uIGNsaWVudCB1c2UgY2FzZXMuPC9wPgorICAgICAqCisgICAgICogPHA+VHlwZTogaW50MzJbbio1XSAoYWNhbWVyYV9tZXRhZGF0YV9lbnVtX2FuZHJvaWRfc2NhbGVyX2F2YWlsYWJsZV9yZWNvbW1lbmRlZF9zdHJlYW1fY29uZmlndXJhdGlvbnNfdCk8L3A+CisgICAgICoKKyAgICAgKiA8cD5UaGlzIHRhZyBtYXkgYXBwZWFyIGluOgorICAgICAqIDx1bD4KKyAgICAgKiAgIDxsaT5BQ2FtZXJhTWV0YWRhdGEgZnJvbSBBQ2FtZXJhTWFuYWdlcl9nZXRDYW1lcmFDaGFyYWN0ZXJpc3RpY3M8L2xpPgorICAgICAqIDwvdWw+PC9wPgorICAgICAqCisgICAgICogPHA+T3B0aW9uYWwgc3Vic2V0IG9mIHRoZSBBQ0FNRVJBX1NDQUxFUl9BVkFJTEFCTEVfU1RSRUFNX0NPTkZJR1VSQVRJT05TIHRoYXQgY29udGFpbnMKKyAgICAgKiBzaW1pbGFyIHR1cGxlcyBsaXN0ZWQgYXMKKyAgICAgKiAoaS5lLiB3aWR0aCwgaGVpZ2h0LCBmb3JtYXQsIG91dHB1dC9pbnB1dCBzdHJlYW0sIHVzZWNhc2UgYml0IGZpZWxkKS4KKyAgICAgKiBDYW1lcmEgZGV2aWNlcyB3aWxsIGJlIGFibGUgdG8gc3VnZ2VzdCBwYXJ0aWN1bGFyIHN0cmVhbSBjb25maWd1cmF0aW9ucyB3aGljaCBhcmUKKyAgICAgKiBwb3dlciBhbmQgcGVyZm9ybWFuY2UgZWZmaWNpZW50IGZvciBzcGVjaWZpYyB1c2UgY2FzZXMuIEZvciBtb3JlIGluZm9ybWF0aW9uIGFib3V0CisgICAgICogcmV0cmlldmluZyB0aGUgc3VnZ2VzdGlvbnMgc2VlCisgICAgICogPGEgaHJlZj0iaHR0cHM6Ly9kZXZlbG9wZXIuYW5kcm9pZC5jb20vcmVmZXJlbmNlL2FuZHJvaWQvaGFyZHdhcmUvY2FtZXJhMi9DYW1lcmFDaGFyYWN0ZXJpc3RpY3MuaHRtbCNnZXRSZWNvbW1lbmRlZFN0cmVhbUNvbmZpZ3VyYXRpb25NYXAiPkNhbWVyYUNoYXJhY3RlcmlzdGljcyNnZXRSZWNvbW1lbmRlZFN0cmVhbUNvbmZpZ3VyYXRpb25NYXA8L2E+LjwvcD4KKyAgICAgKiA8cD5UaGUgZGF0YSByZXByZXNlbnRhdGlvbiBpcyBpbnRbNV0sIHdoaWNoIG1hcHMgdG8KKyAgICAgKiAod2lkdGgsIGhlaWdodCwgZm9ybWF0LCBvdXRwdXQvaW5wdXQgc3RyZWFtLCB1c2VjYXNlIGJpdCBmaWVsZCkuIFRoZSBhcnJheSBjYW4gYmUKKyAgICAgKiBwYXJzZWQgdXNpbmcgdGhlIGZvbGxvd2luZyBwc2V1ZG8gY29kZTo8L3A+CisgICAgICogPHA+c3RydWN0IFN0cmVhbUNvbmZpZ3VyYXRpb24geworICAgICAqIGludDMyX3QgZm9ybWF0OworICAgICAqIGludDMyX3Qgd2lkdGg7CisgICAgICogaW50MzJfdCBoZWlnaHQ7CisgICAgICogaW50MzJfdCBpc0lucHV0OyB9OzwvcD4KKyAgICAgKiA8cD52b2lkIGdldFByZWZlcnJlZFN0cmVhbUNvbmZpZ3VyYXRpb25zKAorICAgICAqICAgICBpbnQzMl90ICphcnJheSwgc2l6ZV90IGNvdW50LCBpbnQzMl90IHVzZWNhc2VJZCwKKyAgICAgKiAgICAgVmVjdG9yICZsdDsgU3RyZWFtQ29uZmlndXJhdGlvbiAmZ3Q7ICogc2NzKSB7CisgICAgICogICAgIGNvbnN0IHNpemVfdCBTVFJFQU1fQ09ORklHVVJBVElPTl9TSVpFID0gNTsKKyAgICAgKiAgICAgY29uc3Qgc2l6ZV90IFNUUkVBTV9XSURUSF9PRkZTRVQgPSAwOworICAgICAqICAgICBjb25zdCBzaXplX3QgU1RSRUFNX0hFSUdIVF9PRkZTRVQgPSAxOworICAgICAqICAgICBjb25zdCBzaXplX3QgU1RSRUFNX0ZPUk1BVF9PRkZTRVQgPSAyOworICAgICAqICAgICBjb25zdCBzaXplX3QgU1RSRUFNX0lTX0lOUFVUX09GRlNFVCA9IDM7CisgICAgICogICAgIGNvbnN0IHNpemVfdCBTVFJFQU1fVVNFQ0FTRV9CSVRNQVBfT0ZGU0VUID0gNDs8L3A+CisgICAgICogPHByZT48Y29kZT5mb3IgKHNpemVfdCBpID0gMDsgaSAmbHQ7IGNvdW50OyBpKz0gU1RSRUFNX0NPTkZJR1VSQVRJT05fU0laRSkgeworICAgICAqICAgICBpbnQzMl90IHdpZHRoID0gYXJyYXlbaSArIFNUUkVBTV9XSURUSF9PRkZTRVRdOworICAgICAqICAgICBpbnQzMl90IGhlaWdodCA9IGFycmF5W2kgKyBTVFJFQU1fSEVJR0hUX09GRlNFVF07CisgICAgICogICAgIGludDMyX3QgZm9ybWF0ID0gYXJyYXlbaSArIFNUUkVBTV9GT1JNQVRfT0ZGU0VUXTsKKyAgICAgKiAgICAgaW50MzJfdCBpc0lucHV0ID0gYXJyYXlbaSArIFNUUkVBTV9JU19JTlBVVF9PRkZTRVRdOworICAgICAqICAgICBpbnQzMl90IHN1cHBvcnRlZFVzZWNhc2VzID0gYXJyYXlbaSArIFNUUkVBTV9VU0VDQVNFX0JJVE1BUF9PRkZTRVRdOworICAgICAqICAgICBpZiAoc3VwcG9ydGVkVXNlY2FzZXMgJmFtcDsgKDEgJmx0OyZsdDsgdXNlY2FzZUlkKSkgeworICAgICAqICAgICAgICAgU3RyZWFtQ29uZmlndXJhdGlvbiBzYyA9IHtmb3JtYXQsIHdpZHRoLCBoZWlnaHQsIGlzSW5wdXR9OworICAgICAqICAgICAgICAgc2NzLSZndDthZGQoc2MpOworICAgICAqICAgICB9CisgICAgICogfQorICAgICAqIDwvY29kZT48L3ByZT4KKyAgICAgKiA8cD59PC9wPgorICAgICAqCisgICAgICogQHNlZSBBQ0FNRVJBX1NDQUxFUl9BVkFJTEFCTEVfU1RSRUFNX0NPTkZJR1VSQVRJT05TCisgICAgICovCisgICAgQUNBTUVSQV9TQ0FMRVJfQVZBSUxBQkxFX1JFQ09NTUVOREVEX1NUUkVBTV9DT05GSUdVUkFUSU9OUyA9IAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGludDMyW24qNV0gKGFjYW1lcmFfbWV0YWRhdGFfZW51bV9hbmRyb2lkX3NjYWxlcl9hdmFpbGFibGVfcmVjb21tZW5kZWRfc3RyZWFtX2NvbmZpZ3VyYXRpb25zX3QpCisgICAgICAgICAgICBBQ0FNRVJBX1NDQUxFUl9TVEFSVCArIDE0LAorICAgIC8qKgorICAgICAqIDxwPlJlY29tbWVuZGVkIG1hcHBpbmdzIG9mIGltYWdlIGZvcm1hdHMgdGhhdCBhcmUgc3VwcG9ydGVkIGJ5IHRoaXMKKyAgICAgKiBjYW1lcmEgZGV2aWNlIGZvciBpbnB1dCBzdHJlYW1zLCB0byB0aGVpciBjb3JyZXNwb25kaW5nIG91dHB1dCBmb3JtYXRzLjwvcD4KKyAgICAgKgorICAgICAqIDxwPlR5cGU6IGludDMyPC9wPgorICAgICAqCisgICAgICogPHA+VGhpcyB0YWcgbWF5IGFwcGVhciBpbjoKKyAgICAgKiA8dWw+CisgICAgICogICA8bGk+QUNhbWVyYU1ldGFkYXRhIGZyb20gQUNhbWVyYU1hbmFnZXJfZ2V0Q2FtZXJhQ2hhcmFjdGVyaXN0aWNzPC9saT4KKyAgICAgKiA8L3VsPjwvcD4KKyAgICAgKgorICAgICAqIDxwPlRoaXMgaXMgYSByZWNvbW1lbmRlZCBzdWJzZXQgb2YgdGhlIGNvbXBsZXRlIGxpc3Qgb2YgbWFwcGluZ3MgZm91bmQgaW4KKyAgICAgKiBhbmRyb2lkLnNjYWxlci5hdmFpbGFibGVJbnB1dE91dHB1dEZvcm1hdHNNYXAuIFRoZSBzYW1lIHJlcXVpcmVtZW50cyBhcHBseSBoZXJlIGFzIHdlbGwuCisgICAgICogVGhlIGxpc3QgaG93ZXZlciBkb2Vzbid0IG5lZWQgdG8gY29udGFpbiBhbGwgYXZhaWxhYmxlIGFuZCBzdXBwb3J0ZWQgbWFwcGluZ3MuIEluc3RlYWQgb2YKKyAgICAgKiB0aGlzIGRldmVsb3BlcnMgbXVzdCBsaXN0IG9ubHkgcmVjb21tZW5kZWQgYW5kIGVmZmljaWVudCBlbnRyaWVzLgorICAgICAqIElmIHNldCwgdGhlIGluZm9ybWF0aW9uIHdpbGwgYmUgYXZhaWxhYmxlIGluIHRoZSBaRVJPX1NIVVRURVJfTEFHIHJlY29tbWVuZGVkIHN0cmVhbQorICAgICAqIGNvbmZpZ3VyYXRpb24gc2VlCisgICAgICogPGEgaHJlZj0iaHR0cHM6Ly9kZXZlbG9wZXIuYW5kcm9pZC5jb20vcmVmZXJlbmNlL2FuZHJvaWQvaGFyZHdhcmUvY2FtZXJhMi9DYW1lcmFDaGFyYWN0ZXJpc3RpY3MuaHRtbCNnZXRSZWNvbW1lbmRlZFN0cmVhbUNvbmZpZ3VyYXRpb25NYXAiPkNhbWVyYUNoYXJhY3RlcmlzdGljcyNnZXRSZWNvbW1lbmRlZFN0cmVhbUNvbmZpZ3VyYXRpb25NYXA8L2E+LjwvcD4KKyAgICAgKi8KKyAgICBBQ0FNRVJBX1NDQUxFUl9BVkFJTEFCTEVfUkVDT01NRU5ERURfSU5QVVRfT1VUUFVUX0ZPUk1BVFNfTUFQID0gCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gaW50MzIKKyAgICAgICAgICAgIEFDQU1FUkFfU0NBTEVSX1NUQVJUICsgMTUsCiAgICAgQUNBTUVSQV9TQ0FMRVJfRU5ELAogCiAgICAgLyoqCkBAIC0zNDQ4LDYgKzM1MjQsOCBAQAogICAgICAqIDxwPlNvbWUgZGV2aWNlcyBtYXkgY2hvb3NlIHRvIHByb3ZpZGUgYSBzZWNvbmQgc2V0IG9mIGNhbGlicmF0aW9uCiAgICAgICogaW5mb3JtYXRpb24gZm9yIGltcHJvdmVkIHF1YWxpdHksIGluY2x1ZGluZwogICAgICAqIEFDQU1FUkFfU0VOU09SX1JFRkVSRU5DRV9JTExVTUlOQU5UMiBhbmQgaXRzIGNvcnJlc3BvbmRpbmcgbWF0cmljZXMuPC9wPgorICAgICAqIDxwPlN0YXJ0aW5nIGZyb20gQW5kcm9pZCBRLCB0aGlzIGtleSB3aWxsIG5vdCBiZSBwcmVzZW50IGZvciBhIE1PTk9DSFJPTUUgY2FtZXJhLCBldmVuIGlmCisgICAgICogdGhlIGNhbWVyYSBkZXZpY2UgaGFzIFJBVyBjYXBhYmlsaXR5LjwvcD4KICAgICAgKgogICAgICAqIEBzZWUgQUNBTUVSQV9TRU5TT1JfQ0FMSUJSQVRJT05fVFJBTlNGT1JNMQogICAgICAqIEBzZWUgQUNBTUVSQV9TRU5TT1JfQ09MT1JfVFJBTlNGT1JNMQpAQCAtMzQ3Nyw2ICszNTU1LDggQEAKICAgICAgKiA8cD5JZiB0aGlzIGtleSBpcyBwcmVzZW50LCB0aGVuIEFDQU1FUkFfU0VOU09SX0NPTE9SX1RSQU5TRk9STTIsCiAgICAgICogQUNBTUVSQV9TRU5TT1JfQ0FMSUJSQVRJT05fVFJBTlNGT1JNMiwgYW5kCiAgICAgICogQUNBTUVSQV9TRU5TT1JfRk9SV0FSRF9NQVRSSVgyIHdpbGwgYWxzbyBiZSBwcmVzZW50LjwvcD4KKyAgICAgKiA8cD5TdGFydGluZyBmcm9tIEFuZHJvaWQgUSwgdGhpcyBrZXkgd2lsbCBub3QgYmUgcHJlc2VudCBmb3IgYSBNT05PQ0hST01FIGNhbWVyYSwgZXZlbiBpZgorICAgICAqIHRoZSBjYW1lcmEgZGV2aWNlIGhhcyBSQVcgY2FwYWJpbGl0eS48L3A+CiAgICAgICoKICAgICAgKiBAc2VlIEFDQU1FUkFfU0VOU09SX0NBTElCUkFUSU9OX1RSQU5TRk9STTIKICAgICAgKiBAc2VlIEFDQU1FUkFfU0VOU09SX0NPTE9SX1RSQU5TRk9STTIKQEAgLTM1MDQsNiArMzU4NCw4IEBACiAgICAgICogY29sb3JzcGFjZSkgaW50byB0aGlzIGNhbWVyYSBkZXZpY2UncyBuYXRpdmUgc2Vuc29yIGNvbG9yCiAgICAgICogc3BhY2UgdW5kZXIgdGhlIGZpcnN0IHJlZmVyZW5jZSBpbGx1bWluYW50CiAgICAgICogKEFDQU1FUkFfU0VOU09SX1JFRkVSRU5DRV9JTExVTUlOQU5UMSkuPC9wPgorICAgICAqIDxwPlN0YXJ0aW5nIGZyb20gQW5kcm9pZCBRLCB0aGlzIGtleSB3aWxsIG5vdCBiZSBwcmVzZW50IGZvciBhIE1PTk9DSFJPTUUgY2FtZXJhLCBldmVuIGlmCisgICAgICogdGhlIGNhbWVyYSBkZXZpY2UgaGFzIFJBVyBjYXBhYmlsaXR5LjwvcD4KICAgICAgKgogICAgICAqIEBzZWUgQUNBTUVSQV9TRU5TT1JfUkVGRVJFTkNFX0lMTFVNSU5BTlQxCiAgICAgICovCkBAIC0zNTMxLDYgKzM2MTMsOCBAQAogICAgICAqIChBQ0FNRVJBX1NFTlNPUl9SRUZFUkVOQ0VfSUxMVU1JTkFOVDIpLjwvcD4KICAgICAgKiA8cD5UaGlzIG1hdHJpeCB3aWxsIG9ubHkgYmUgcHJlc2VudCBpZiB0aGUgc2Vjb25kIHJlZmVyZW5jZQogICAgICAqIGlsbHVtaW5hbnQgaXMgcHJlc2VudC48L3A+CisgICAgICogPHA+U3RhcnRpbmcgZnJvbSBBbmRyb2lkIFEsIHRoaXMga2V5IHdpbGwgbm90IGJlIHByZXNlbnQgZm9yIGEgTU9OT0NIUk9NRSBjYW1lcmEsIGV2ZW4gaWYKKyAgICAgKiB0aGUgY2FtZXJhIGRldmljZSBoYXMgUkFXIGNhcGFiaWxpdHkuPC9wPgogICAgICAqCiAgICAgICogQHNlZSBBQ0FNRVJBX1NFTlNPUl9SRUZFUkVOQ0VfSUxMVU1JTkFOVDIKICAgICAgKi8KQEAgLTM1NTksNiArMzY0Myw4IEBACiAgICAgICogYW5kIHRoZSBDSUUgWFlaIGNvbG9yc3BhY2Ugd2hlbiBjYWxjdWxhdGluZyB0aGlzIHRyYW5zZm9ybSB3aWxsCiAgICAgICogbWF0Y2ggdGhlIHN0YW5kYXJkIHdoaXRlIHBvaW50IGZvciB0aGUgZmlyc3QgcmVmZXJlbmNlIGlsbHVtaW5hbnQKICAgICAgKiAoaS5lLiBubyBjaHJvbWF0aWMgYWRhcHRhdGlvbiB3aWxsIGJlIGFwcGxpZWQgYnkgdGhpcyB0cmFuc2Zvcm0pLjwvcD4KKyAgICAgKiA8cD5TdGFydGluZyBmcm9tIEFuZHJvaWQgUSwgdGhpcyBrZXkgd2lsbCBub3QgYmUgcHJlc2VudCBmb3IgYSBNT05PQ0hST01FIGNhbWVyYSwgZXZlbiBpZgorICAgICAqIHRoZSBjYW1lcmEgZGV2aWNlIGhhcyBSQVcgY2FwYWJpbGl0eS48L3A+CiAgICAgICoKICAgICAgKiBAc2VlIEFDQU1FUkFfU0VOU09SX1JFRkVSRU5DRV9JTExVTUlOQU5UMQogICAgICAqLwpAQCAtMzU4OSw2ICszNjc1LDggQEAKICAgICAgKiAoaS5lLiBubyBjaHJvbWF0aWMgYWRhcHRhdGlvbiB3aWxsIGJlIGFwcGxpZWQgYnkgdGhpcyB0cmFuc2Zvcm0pLjwvcD4KICAgICAgKiA8cD5UaGlzIG1hdHJpeCB3aWxsIG9ubHkgYmUgcHJlc2VudCBpZiB0aGUgc2Vjb25kIHJlZmVyZW5jZQogICAgICAqIGlsbHVtaW5hbnQgaXMgcHJlc2VudC48L3A+CisgICAgICogPHA+U3RhcnRpbmcgZnJvbSBBbmRyb2lkIFEsIHRoaXMga2V5IHdpbGwgbm90IGJlIHByZXNlbnQgZm9yIGEgTU9OT0NIUk9NRSBjYW1lcmEsIGV2ZW4gaWYKKyAgICAgKiB0aGUgY2FtZXJhIGRldmljZSBoYXMgUkFXIGNhcGFiaWxpdHkuPC9wPgogICAgICAqCiAgICAgICogQHNlZSBBQ0FNRVJBX1NFTlNPUl9SRUZFUkVOQ0VfSUxMVU1JTkFOVDIKICAgICAgKi8KQEAgLTM2MTUsNiArMzcwMyw4IEBACiAgICAgICogdGhpcyBtYXRyaXggaXMgY2hvc2VuIHNvIHRoYXQgdGhlIHN0YW5kYXJkIHdoaXRlIHBvaW50IGZvciB0aGlzIHJlZmVyZW5jZQogICAgICAqIGlsbHVtaW5hbnQgaW4gdGhlIHJlZmVyZW5jZSBzZW5zb3IgY29sb3JzcGFjZSBpcyBtYXBwZWQgdG8gRDUwIGluIHRoZQogICAgICAqIENJRSBYWVogY29sb3JzcGFjZS48L3A+CisgICAgICogPHA+U3RhcnRpbmcgZnJvbSBBbmRyb2lkIFEsIHRoaXMga2V5IHdpbGwgbm90IGJlIHByZXNlbnQgZm9yIGEgTU9OT0NIUk9NRSBjYW1lcmEsIGV2ZW4gaWYKKyAgICAgKiB0aGUgY2FtZXJhIGRldmljZSBoYXMgUkFXIGNhcGFiaWxpdHkuPC9wPgogICAgICAqCiAgICAgICogQHNlZSBBQ0FNRVJBX1NFTlNPUl9SRUZFUkVOQ0VfSUxMVU1JTkFOVDEKICAgICAgKi8KQEAgLTM2NDMsNiArMzczMyw4IEBACiAgICAgICogQ0lFIFhZWiBjb2xvcnNwYWNlLjwvcD4KICAgICAgKiA8cD5UaGlzIG1hdHJpeCB3aWxsIG9ubHkgYmUgcHJlc2VudCBpZiB0aGUgc2Vjb25kIHJlZmVyZW5jZQogICAgICAqIGlsbHVtaW5hbnQgaXMgcHJlc2VudC48L3A+CisgICAgICogPHA+U3RhcnRpbmcgZnJvbSBBbmRyb2lkIFEsIHRoaXMga2V5IHdpbGwgbm90IGJlIHByZXNlbnQgZm9yIGEgTU9OT0NIUk9NRSBjYW1lcmEsIGV2ZW4gaWYKKyAgICAgKiB0aGUgY2FtZXJhIGRldmljZSBoYXMgUkFXIGNhcGFiaWxpdHkuPC9wPgogICAgICAqCiAgICAgICogQHNlZSBBQ0FNRVJBX1NFTlNPUl9SRUZFUkVOQ0VfSUxMVU1JTkFOVDIKICAgICAgKi8KQEAgLTM2NzUsNiArMzc2Nyw3IEBACiAgICAgICogbGV2ZWwgdmFsdWVzLiBGb3IgcmF3IGNhcHR1cmUgaW4gcGFydGljdWxhciwgaXQgaXMgcmVjb21tZW5kZWQgdG8gdXNlCiAgICAgICogcGl4ZWxzIGZyb20gQUNBTUVSQV9TRU5TT1JfT1BUSUNBTF9CTEFDS19SRUdJT05TIHRvIGNhbGN1bGF0ZSBibGFjawogICAgICAqIGxldmVsIHZhbHVlcyBmb3IgZWFjaCBmcmFtZS48L3A+CisgICAgICogPHA+Rm9yIGEgTU9OT0NIUk9NRSBjYW1lcmEgZGV2aWNlLCBhbGwgb2YgdGhlIDJ4MiBjaGFubmVscyBtdXN0IGhhdmUgdGhlIHNhbWUgdmFsdWVzLjwvcD4KICAgICAgKgogICAgICAqIEBzZWUgQUNBTUVSQV9TRU5TT1JfRFlOQU1JQ19CTEFDS19MRVZFTAogICAgICAqIEBzZWUgQUNBTUVSQV9TRU5TT1JfSU5GT19DT0xPUl9GSUxURVJfQVJSQU5HRU1FTlQKQEAgLTM3NjksNiArMzg2Miw4IEBACiAgICAgICogdXNlZCB0byBpbnRlcnBvbGF0ZSBiZXR3ZWVuIHRoZSBwcm92aWRlZCBjb2xvciB0cmFuc2Zvcm1zIHdoZW4KICAgICAgKiBwcm9jZXNzaW5nIHJhdyBzZW5zb3IgZGF0YS48L3A+CiAgICAgICogPHA+VGhlIG9yZGVyIG9mIHRoZSB2YWx1ZXMgaXMgUiwgRywgQjsgd2hlcmUgUiBpcyBpbiB0aGUgbG93ZXN0IGluZGV4LjwvcD4KKyAgICAgKiA8cD5TdGFydGluZyBmcm9tIEFuZHJvaWQgUSwgdGhpcyBrZXkgd2lsbCBub3QgYmUgcHJlc2VudCBmb3IgYSBNT05PQ0hST01FIGNhbWVyYSwgZXZlbiBpZgorICAgICAqIHRoZSBjYW1lcmEgZGV2aWNlIGhhcyBSQVcgY2FwYWJpbGl0eS48L3A+CiAgICAgICovCiAgICAgQUNBTUVSQV9TRU5TT1JfTkVVVFJBTF9DT0xPUl9QT0lOVCA9ICAgICAgICAgICAgICAgICAgICAgICAgLy8gcmF0aW9uYWxbM10KICAgICAgICAgICAgIEFDQU1FUkFfU0VOU09SX1NUQVJUICsgMTgsCkBAIC0zNzk5LDYgKzM4OTQsOCBAQAogICAgICAqIHRoYXQgY2hhbm5lbC48L3A+CiAgICAgICogPHA+QSBtb3JlIGRldGFpbGVkIGRlc2NyaXB0aW9uIG9mIHRoZSBub2lzZSBtb2RlbCBjYW4gYmUgZm91bmQgaW4gdGhlCiAgICAgICogQWRvYmUgRE5HIHNwZWNpZmljYXRpb24gZm9yIHRoZSBOb2lzZVByb2ZpbGUgdGFnLjwvcD4KKyAgICAgKiA8cD5Gb3IgYSBNT05PQ0hST01FIGNhbWVyYSwgdGhlcmUgaXMgb25seSBvbmUgY29sb3IgY2hhbm5lbC4gU28gdGhlIG5vaXNlIG1vZGVsIGNvZWZmaWNpZW50cworICAgICAqIHdpbGwgb25seSBjb250YWluIG9uZSBTIGFuZCBvbmUgTy48L3A+CiAgICAgICoKICAgICAgKiBAc2VlIEFDQU1FUkFfU0VOU09SX0lORk9fQ09MT1JfRklMVEVSX0FSUkFOR0VNRU5UCiAgICAgICovCkBAIC0zODQ0LDYgKzM5NDEsOCBAQAogICAgICAqIDxsaT5SICZndDsgMS4yMCB3aWxsIHJlcXVpcmUgc3Ryb25nIHNvZnR3YXJlIGNvcnJlY3Rpb24gdG8gcHJvZHVjZQogICAgICAqIGEgdXN1YWJsZSBpbWFnZSAoJmd0OzIwJSBkaXZlcmdlbmNlKS48L2xpPgogICAgICAqIDwvdWw+CisgICAgICogPHA+U3RhcnRpbmcgZnJvbSBBbmRyb2lkIFEsIHRoaXMga2V5IHdpbGwgbm90IGJlIHByZXNlbnQgZm9yIGEgTU9OT0NIUk9NRSBjYW1lcmEsIGV2ZW4gaWYKKyAgICAgKiB0aGUgY2FtZXJhIGRldmljZSBoYXMgUkFXIGNhcGFiaWxpdHkuPC9wPgogICAgICAqLwogICAgIEFDQU1FUkFfU0VOU09SX0dSRUVOX1NQTElUID0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGZsb2F0CiAgICAgICAgICAgICBBQ0FNRVJBX1NFTlNPUl9TVEFSVCArIDIyLApAQCAtMzk5Niw2ICs0MDk1LDcgQEAKICAgICAgKiBsYXlvdXQga2V5IChzZWUgQUNBTUVSQV9TRU5TT1JfSU5GT19DT0xPUl9GSUxURVJfQVJSQU5HRU1FTlQpLCBpLmUuIHRoZQogICAgICAqIG50aCB2YWx1ZSBnaXZlbiBjb3JyZXNwb25kcyB0byB0aGUgYmxhY2sgbGV2ZWwgb2Zmc2V0IGZvciB0aGUgbnRoCiAgICAgICogY29sb3IgY2hhbm5lbCBsaXN0ZWQgaW4gdGhlIENGQS48L3A+CisgICAgICogPHA+Rm9yIGEgTU9OT0NIUk9NRSBjYW1lcmEsIGFsbCBvZiB0aGUgMngyIGNoYW5uZWxzIG11c3QgaGF2ZSB0aGUgc2FtZSB2YWx1ZXMuPC9wPgogICAgICAqIDxwPlRoaXMga2V5IHdpbGwgYmUgYXZhaWxhYmxlIGlmIEFDQU1FUkFfU0VOU09SX09QVElDQUxfQkxBQ0tfUkVHSU9OUyBpcyBhdmFpbGFibGUgb3IgdGhlCiAgICAgICogY2FtZXJhIGRldmljZSBhZHZlcnRpc2VzIHRoaXMga2V5IHZpYSB7QGxpbmsgQUNBTUVSQV9SRVFVRVNUX0FWQUlMQUJMRV9SRVNVTFRfS0VZUyB9LjwvcD4KICAgICAgKgpAQCAtNDA5OCw3ICs0MTk4LDggQEAKICAgICAvKioKICAgICAgKiA8cD5UaGUgYXJyYW5nZW1lbnQgb2YgY29sb3IgZmlsdGVycyBvbiBzZW5zb3I7CiAgICAgICogcmVwcmVzZW50cyB0aGUgY29sb3JzIGluIHRoZSB0b3AtbGVmdCAyeDIgc2VjdGlvbiBvZgotICAgICAqIHRoZSBzZW5zb3IsIGluIHJlYWRpbmcgb3JkZXIuPC9wPgorICAgICAqIHRoZSBzZW5zb3IsIGluIHJlYWRpbmcgb3JkZXIsIGZvciBhIEJheWVyIGNhbWVyYSwgb3IgdGhlCisgICAgICogbGlnaHQgc3BlY3RydW0gaXQgY2FwdHVyZXMgZm9yIE1PTk9DSFJPTUUgY2FtZXJhLjwvcD4KICAgICAgKgogICAgICAqIDxwPlR5cGU6IGJ5dGUgKGFjYW1lcmFfbWV0YWRhdGFfZW51bV9hbmRyb2lkX3NlbnNvcl9pbmZvX2NvbG9yX2ZpbHRlcl9hcnJhbmdlbWVudF90KTwvcD4KICAgICAgKgpAQCAtNDU2NywxMyArNDY2OCwxMyBAQAogICAgICAqICh4LHkpIM+1ICgwIC4uLiBOLTEsIDAgLi4uIE0tMSkgaXMgdGhlIHZhbHVlIG9mIHRoZSBzaGFkaW5nIG1hcCBhdAogICAgICAqIHBpeGVsICggKChXLTEpLyhOLTEpKSAqIHgsICgoSC0xKS8oTS0xKSkgKiB5KSBmb3IgdGhlIGZvdXIgY29sb3IgY2hhbm5lbHMuCiAgICAgICogVGhlIG1hcCBpcyBhc3N1bWVkIHRvIGJlIGJpbGluZWFybHkgaW50ZXJwb2xhdGVkIGJldHdlZW4gdGhlIHNhbXBsZSBwb2ludHMuPC9wPgotICAgICAqIDxwPlRoZSBjaGFubmVsIG9yZGVyIGlzIFtSLCBHZXZlbiwgR29kZCwgQl0sIHdoZXJlIEdldmVuIGlzIHRoZSBncmVlbgotICAgICAqIGNoYW5uZWwgZm9yIHRoZSBldmVuIHJvd3Mgb2YgYSBCYXllciBwYXR0ZXJuLCBhbmQgR29kZCBpcyB0aGUgb2RkIHJvd3MuCisgICAgICogPHA+Rm9yIGEgQmF5ZXIgY2FtZXJhLCB0aGUgY2hhbm5lbCBvcmRlciBpcyBbUiwgR2V2ZW4sIEdvZGQsIEJdLCB3aGVyZSBHZXZlbiBpcworICAgICAqIHRoZSBncmVlbiBjaGFubmVsIGZvciB0aGUgZXZlbiByb3dzIG9mIGEgQmF5ZXIgcGF0dGVybiwgYW5kIEdvZGQgaXMgdGhlIG9kZCByb3dzLgogICAgICAqIFRoZSBzaGFkaW5nIG1hcCBpcyBzdG9yZWQgaW4gYSBmdWxseSBpbnRlcmxlYXZlZCBmb3JtYXQsIGFuZCBpdHMgc2l6ZQogICAgICAqIGlzIHByb3ZpZGVkIGluIHRoZSBjYW1lcmEgc3RhdGljIG1ldGFkYXRhIGJ5IEFDQU1FUkFfTEVOU19JTkZPX1NIQURJTkdfTUFQX1NJWkUuPC9wPgogICAgICAqIDxwPlRoZSBzaGFkaW5nIG1hcCB3aWxsIGdlbmVyYWxseSBoYXZlIG9uIHRoZSBvcmRlciBvZiAzMC00MCByb3dzIGFuZCBjb2x1bW5zLAogICAgICAqIGFuZCB3aWxsIGJlIHNtYWxsZXIgdGhhbiA2NHg2NC48L3A+Ci0gICAgICogPHA+QXMgYW4gZXhhbXBsZSwgZ2l2ZW4gYSB2ZXJ5IHNtYWxsIG1hcCBkZWZpbmVkIGFzOjwvcD4KKyAgICAgKiA8cD5BcyBhbiBleGFtcGxlLCBnaXZlbiBhIHZlcnkgc21hbGwgbWFwIGZvciBhIEJheWVyIGNhbWVyYSBkZWZpbmVkIGFzOjwvcD4KICAgICAgKiA8cHJlPjxjb2RlPkFDQU1FUkFfTEVOU19JTkZPX1NIQURJTkdfTUFQX1NJWkUgPSBbIDQsIDMgXQogICAgICAqIEFDQU1FUkFfU1RBVElTVElDU19MRU5TX1NIQURJTkdfTUFQID0KICAgICAgKiBbIDEuMywgMS4yLCAxLjE1LCAxLjIsICAxLjIsIDEuMiwgMS4xNSwgMS4yLApAQCAtNDU5Myw2ICs0Njk0LDE3IEBACiAgICAgICogaW1hZ2Ugb2YgYSBncmF5IHdhbGwgKHVzaW5nIGJpY3ViaWMgaW50ZXJwb2xhdGlvbiBmb3IgdmlzdWFsIHF1YWxpdHkpCiAgICAgICogYXMgY2FwdHVyZWQgYnkgdGhlIHNlbnNvciBnaXZlczo8L3A+CiAgICAgICogPHA+PGltZyBhbHQ9IkltYWdlIG9mIGEgdW5pZm9ybSB3aGl0ZSB3YWxsIChpbnZlcnNlIHNoYWRpbmcgbWFwKSIgc3JjPSIuLi9pbWFnZXMvY2FtZXJhMi9tZXRhZGF0YS9hbmRyb2lkLnN0YXRpc3RpY3MubGVuc1NoYWRpbmdNYXAvaW52X3NoYWRpbmcucG5nIiAvPjwvcD4KKyAgICAgKiA8cD5Gb3IgYSBNT05PQ0hST01FIGNhbWVyYSwgYWxsIG9mIHRoZSAyeDIgY2hhbm5lbHMgbXVzdCBoYXZlIHRoZSBzYW1lIHZhbHVlcy4gQW4gZXhhbXBsZQorICAgICAqIHNoYWRpbmcgbWFwIGZvciBzdWNoIGEgY2FtZXJhIGlzIGRlZmluZWQgYXM6PC9wPgorICAgICAqIDxwcmU+PGNvZGU+QUNBTUVSQV9MRU5TX0lORk9fU0hBRElOR19NQVBfU0laRSA9IFsgNCwgMyBdCisgICAgICogQUNBTUVSQV9TVEFUSVNUSUNTX0xFTlNfU0hBRElOR19NQVAgPQorICAgICAqIFsgMS4zLCAxLjMsIDEuMywgMS4zLCAgMS4yLCAxLjIsIDEuMiwgMS4yLAorICAgICAqICAgICAxLjEsIDEuMSwgMS4xLCAxLjEsICAxLjMsIDEuMywgMS4zLCAxLjMsCisgICAgICogICAxLjIsIDEuMiwgMS4yLCAxLjIsICAxLjEsIDEuMSwgMS4xLCAxLjEsCisgICAgICogICAgIDEuMCwgMS4wLCAxLjAsIDEuMCwgIDEuMiwgMS4yLCAxLjIsIDEuMiwKKyAgICAgKiAgIDEuMywgMS4zLCAxLjMsIDEuMywgICAxLjIsIDEuMiwgMS4yLCAxLjIsCisgICAgICogICAgIDEuMiwgMS4yLCAxLjIsIDEuMiwgIDEuMywgMS4zLCAxLjMsIDEuMyBdCisgICAgICogPC9jb2RlPjwvcHJlPgogICAgICAqIDxwPk5vdGUgdGhhdCB0aGUgUkFXIGltYWdlIGRhdGEgbWlnaHQgYmUgc3ViamVjdCB0byBsZW5zIHNoYWRpbmcKICAgICAgKiBjb3JyZWN0aW9uIG5vdCByZXBvcnRlZCBvbiB0aGlzIG1hcC4gUXVlcnkKICAgICAgKiBBQ0FNRVJBX1NFTlNPUl9JTkZPX0xFTlNfU0hBRElOR19BUFBMSUVEIHRvIHNlZSBpZiBSQVcgaW1hZ2UgZGF0YSBoYXMgc3ViamVjdApAQCAtNDkzNiw4ICs1MDQ4LDggQEAKICAgICAgKiBvZiBwb2ludHMgY2FuIGJlIGxlc3MgdGhhbiBtYXggKHRoYXQgaXMsIHRoZSByZXF1ZXN0IGRvZXNuJ3QgaGF2ZSB0bwogICAgICAqIGFsd2F5cyBwcm92aWRlIGEgY3VydmUgd2l0aCBudW1iZXIgb2YgcG9pbnRzIGVxdWl2YWxlbnQgdG8KICAgICAgKiBBQ0FNRVJBX1RPTkVNQVBfTUFYX0NVUlZFX1BPSU5UUykuPC9wPgotICAgICAqIDxwPkZvciBkZXZpY2VzIHdpdGggTU9OT0NIUk9NRSBjYXBhYmlsaXR5LCBvbmx5IHJlZCBjaGFubmVsIGlzIHVzZWQuIEdyZWVuIGFuZCBibHVlIGNoYW5uZWxzCi0gICAgICogYXJlIGlnbm9yZWQuPC9wPgorICAgICAqIDxwPkZvciBkZXZpY2VzIHdpdGggTU9OT0NIUk9NRSBjYXBhYmlsaXR5LCBhbGwgdGhyZWUgY2hhbm5lbHMgbXVzdCBoYXZlIHRoZSBzYW1lIHNldCBvZgorICAgICAqIGNvbnRyb2wgcG9pbnRzLjwvcD4KICAgICAgKiA8cD5BIGZldyBleGFtcGxlcywgYW5kIHRoZWlyIGNvcnJlc3BvbmRpbmcgZ3JhcGhpY2FsIG1hcHBpbmdzOyB0aGVzZQogICAgICAqIG9ubHkgc3BlY2lmeSB0aGUgcmVkIGNoYW5uZWwgYW5kIHRoZSBwcmVjaXNpb24gaXMgbGltaXRlZCB0byA0CiAgICAgICogZGlnaXRzLCBmb3IgY29uY2lzZW5lc3MuPC9wPgpAQCAtNTQxMSw2ICs1NTIzLDMyIEBACiAgICAgICovCiAgICAgQUNBTUVSQV9ERVBUSF9ERVBUSF9JU19FWENMVVNJVkUgPSAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gYnl0ZSAoYWNhbWVyYV9tZXRhZGF0YV9lbnVtX2FuZHJvaWRfZGVwdGhfZGVwdGhfaXNfZXhjbHVzaXZlX3QpCiAgICAgICAgICAgICBBQ0FNRVJBX0RFUFRIX1NUQVJUICsgNCwKKyAgICAvKioKKyAgICAgKiA8cD5SZWNvbW1lbmRlZCBkZXB0aCBzdHJlYW0gY29uZmlndXJhdGlvbnMgZm9yIGNvbW1vbiBjbGllbnQgdXNlIGNhc2VzLjwvcD4KKyAgICAgKgorICAgICAqIDxwPlR5cGU6IGludDMyW24qNV08L3A+CisgICAgICoKKyAgICAgKiA8cD5UaGlzIHRhZyBtYXkgYXBwZWFyIGluOgorICAgICAqIDx1bD4KKyAgICAgKiAgIDxsaT5BQ2FtZXJhTWV0YWRhdGEgZnJvbSBBQ2FtZXJhTWFuYWdlcl9nZXRDYW1lcmFDaGFyYWN0ZXJpc3RpY3M8L2xpPgorICAgICAqIDwvdWw+PC9wPgorICAgICAqCisgICAgICogPHA+T3B0aW9uYWwgc3Vic2V0IG9mIHRoZSBBQ0FNRVJBX0RFUFRIX0FWQUlMQUJMRV9ERVBUSF9TVFJFQU1fQ09ORklHVVJBVElPTlMgdGhhdAorICAgICAqIGNvbnRhaW5zIHNpbWlsYXIgdHVwbGVzIGxpc3RlZCBhcworICAgICAqIChpLmUuIHdpZHRoLCBoZWlnaHQsIGZvcm1hdCwgb3V0cHV0L2lucHV0IHN0cmVhbSwgdXNlY2FzZSBiaXQgZmllbGQpLgorICAgICAqIENhbWVyYSBkZXZpY2VzIHdpbGwgYmUgYWJsZSB0byBzdWdnZXN0IHBhcnRpY3VsYXIgZGVwdGggc3RyZWFtIGNvbmZpZ3VyYXRpb25zIHdoaWNoIGFyZQorICAgICAqIHBvd2VyIGFuZCBwZXJmb3JtYW5jZSBlZmZpY2llbnQgZm9yIHNwZWNpZmljIHVzZSBjYXNlcy4gRm9yIG1vcmUgaW5mb3JtYXRpb24gYWJvdXQKKyAgICAgKiByZXRyaWV2aW5nIHRoZSBzdWdnZXN0aW9ucyBzZWUKKyAgICAgKiA8YSBocmVmPSJodHRwczovL2RldmVsb3Blci5hbmRyb2lkLmNvbS9yZWZlcmVuY2UvYW5kcm9pZC9oYXJkd2FyZS9jYW1lcmEyL0NhbWVyYUNoYXJhY3RlcmlzdGljcy5odG1sI2dldFJlY29tbWVuZGVkU3RyZWFtQ29uZmlndXJhdGlvbk1hcCI+Q2FtZXJhQ2hhcmFjdGVyaXN0aWNzI2dldFJlY29tbWVuZGVkU3RyZWFtQ29uZmlndXJhdGlvbk1hcDwvYT4uPC9wPgorICAgICAqIDxwPkZvciBkYXRhIHJlcHJlc2VudGF0aW9uIHBsZWFzZSByZWZlciB0bworICAgICAqIEFDQU1FUkFfU0NBTEVSX0FWQUlMQUJMRV9SRUNPTU1FTkRFRF9TVFJFQU1fQ09ORklHVVJBVElPTlM8L3A+CisgICAgICoKKyAgICAgKiBAc2VlIEFDQU1FUkFfREVQVEhfQVZBSUxBQkxFX0RFUFRIX1NUUkVBTV9DT05GSUdVUkFUSU9OUworICAgICAqIEBzZWUgQUNBTUVSQV9TQ0FMRVJfQVZBSUxBQkxFX1JFQ09NTUVOREVEX1NUUkVBTV9DT05GSUdVUkFUSU9OUworICAgICAqLworICAgIEFDQU1FUkFfREVQVEhfQVZBSUxBQkxFX1JFQ09NTUVOREVEX0RFUFRIX1NUUkVBTV9DT05GSUdVUkFUSU9OUyA9IAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGludDMyW24qNV0KKyAgICAgICAgICAgIEFDQU1FUkFfREVQVEhfU1RBUlQgKyA1LAogICAgIEFDQU1FUkFfREVQVEhfRU5ELAogCiAgICAgLyoqCkBAIC01NDU3LDggKzU1OTUsOCBAQAogICAgICAqIHdpbGwgbm90IHNsb3cgZG93biBjYXB0dXJlIHJhdGUgd2hlbiBhcHBseWluZyBjb3JyZWN0aW9uLiBGQVNUIG1heSBiZSB0aGUgc2FtZSBhcyBPRkYgaWYKICAgICAgKiBhbnkgY29ycmVjdGlvbiBhdCBhbGwgd291bGQgc2xvdyBkb3duIGNhcHR1cmUgcmF0ZS4gIEV2ZXJ5IG91dHB1dCBzdHJlYW0gd2lsbCBoYXZlIGEKICAgICAgKiBzaW1pbGFyIGFtb3VudCBvZiBlbmhhbmNlbWVudCBhcHBsaWVkLjwvcD4KLSAgICAgKiA8cD5UaGUgY29ycmVjdGlvbiBvbmx5IGFwcGxpZXMgdG8gcHJvY2Vzc2VkIG91dHB1dHMgc3VjaCBhcyBZVVYsIEpQRUcsIG9yIERFUFRIMTY7IGl0IGlzIG5vdAotICAgICAqIGFwcGxpZWQgdG8gYW55IFJBVyBvdXRwdXQuPC9wPgorICAgICAqIDxwPlRoZSBjb3JyZWN0aW9uIG9ubHkgYXBwbGllcyB0byBwcm9jZXNzZWQgb3V0cHV0cyBzdWNoIGFzIFlVViwgWTgsIEpQRUcsIG9yIERFUFRIMTY7IGl0IGlzCisgICAgICogbm90IGFwcGxpZWQgdG8gYW55IFJBVyBvdXRwdXQuPC9wPgogICAgICAqIDxwPlRoaXMgY29udHJvbCB3aWxsIGJlIG9uIGJ5IGRlZmF1bHQgb24gZGV2aWNlcyB0aGF0IHN1cHBvcnQgdGhpcyBjb250cm9sLiBBcHBsaWNhdGlvbnMKICAgICAgKiBkaXNhYmxpbmcgZGlzdG9ydGlvbiBjb3JyZWN0aW9uIG5lZWQgdG8gcGF5IGV4dHJhIGF0dGVudGlvbiB3aXRoIHRoZSBjb29yZGluYXRlIHN5c3RlbSBvZgogICAgICAqIG1ldGVyaW5nIHJlZ2lvbnMsIGNyb3AgcmVnaW9uLCBhbmQgZmFjZSByZWN0YW5nbGVzLiBXaGVuIGRpc3RvcnRpb24gY29ycmVjdGlvbiBpcyBPRkYsCkBAIC03MTQzLDcgKzcyODEsNyBAQAogICAgICAqIGNhbWVyYSBkZXZpY2UgY2FuIGNhcHR1cmUgdGhpcyBzaXplIGZvciBhdCBsZWFzdCAxMCBmcmFtZXMgcGVyIHNlY29uZC4gIEFsc28gdGhlCiAgICAgICogQUNBTUVSQV9DT05UUk9MX0FFX0FWQUlMQUJMRV9UQVJHRVRfRlBTX1JBTkdFUyBlbnRyeSBsaXN0cyBhdCBsZWFzdCBvbmUgRlBTIHJhbmdlIHdoZXJlCiAgICAgICogdGhlIG1pbmltdW0gRlBTIGlzICZndDs9IDEgLyBtaW5pbXVtRnJhbWVEdXJhdGlvbiBmb3IgdGhlIGxhcmdlc3QgWVVWXzQyMF84ODggc2l6ZS48L3A+Ci0gICAgICogPHA+SWYgdGhlIGRldmljZSBzdXBwb3J0cyB0aGUge0BsaW5rIEFJTUFHRV9GT1JNQVRfUkFXMTAgfSwge0BsaW5rIEFJTUFHRV9GT1JNQVRfUkFXMTIgfSwgdGhlbiB0aG9zZSBjYW4gYWxzbyBiZQorICAgICAqIDxwPklmIHRoZSBkZXZpY2Ugc3VwcG9ydHMgdGhlIHtAbGluayBBSU1BR0VfRk9STUFUX1JBVzEwIH0sIHtAbGluayBBSU1BR0VfRk9STUFUX1JBVzEyIH0sIHtAbGluayBBSU1BR0VfRk9STUFUX1k4IH0sIHRoZW4gdGhvc2UgY2FuIGFsc28gYmUKICAgICAgKiBjYXB0dXJlZCBhdCB0aGUgc2FtZSByYXRlIGFzIHRoZSBtYXhpbXVtLXNpemUgWVVWXzQyMF84ODggcmVzb2x1dGlvbiBpcy48L3A+CiAgICAgICogPHA+SW4gYWRkaXRpb24sIHRoZSBBQ0FNRVJBX1NZTkNfTUFYX0xBVEVOQ1kgZmllbGQgaXMgZ3VhcmFudGVkIHRvIGhhdmUgYSB2YWx1ZSBiZXR3ZWVuIDAKICAgICAgKiBhbmQgNCwgaW5jbHVzaXZlLiBBQ0FNRVJBX0NPTlRST0xfQUVfTE9DS19BVkFJTEFCTEUgYW5kIEFDQU1FUkFfQ09OVFJPTF9BV0JfTE9DS19BVkFJTEFCTEUKQEAgLTcxNzcsOCArNzMxNSw4IEBACiAgICAgICogPGxpPlRoZSBBQ0FNRVJBX0RFUFRIX0RFUFRIX0lTX0VYQ0xVU0lWRSBlbnRyeSBpcyBsaXN0ZWQgYnkgdGhpcyBkZXZpY2UuPC9saT4KICAgICAgKiA8bGk+QXMgb2YgQW5kcm9pZCBQLCB0aGUgQUNBTUVSQV9MRU5TX1BPU0VfUkVGRVJFTkNFIGVudHJ5IGlzIGxpc3RlZCBieSB0aGlzIGRldmljZS48L2xpPgogICAgICAqIDxsaT5BIExJTUlURUQgY2FtZXJhIHdpdGggb25seSB0aGUgREVQVEhfT1VUUFVUIGNhcGFiaWxpdHkgZG9lcyBub3QgaGF2ZSB0byBzdXBwb3J0Ci0gICAgICogICBub3JtYWwgWVVWXzQyMF84ODgsIEpQRUcsIGFuZCBQUklWLWZvcm1hdCBvdXRwdXRzLiBJdCBvbmx5IGhhcyB0byBzdXBwb3J0IHRoZSBERVBUSDE2Ci0gICAgICogICBmb3JtYXQuPC9saT4KKyAgICAgKiAgIG5vcm1hbCBZVVZfNDIwXzg4OCwgWTgsIEpQRUcsIGFuZCBQUklWLWZvcm1hdCBvdXRwdXRzLiBJdCBvbmx5IGhhcyB0byBzdXBwb3J0IHRoZQorICAgICAqICAgREVQVEgxNiBmb3JtYXQuPC9saT4KICAgICAgKiA8L3VsPgogICAgICAqIDxwPkdlbmVyYWxseSwgZGVwdGggb3V0cHV0IG9wZXJhdGVzIGF0IGEgc2xvd2VyIGZyYW1lIHJhdGUgdGhhbiBzdGFuZGFyZCBjb2xvciBjYXB0dXJlLAogICAgICAqIHNvIHRoZSBERVBUSDE2IGFuZCBERVBUSF9QT0lOVF9DTE9VRCBmb3JtYXRzIHdpbGwgY29tbW9ubHkgaGF2ZSBhIHN0YWxsIGR1cmF0aW9uIHRoYXQKQEAgLTcyMDksOCArNzM0NywxNCBAQAogICAgIEFDQU1FUkFfUkVRVUVTVF9BVkFJTEFCTEVfQ0FQQUJJTElUSUVTX01PVElPTl9UUkFDS0lORyAgICAgICAgICAgPSAxMCwKIAogICAgIC8qKgotICAgICAqIDxwPlRoZSBjYW1lcmEgZGV2aWNlIGlzIGEgbG9naWNhbCBjYW1lcmEgYmFja2VkIGJ5IHR3byBvciBtb3JlIHBoeXNpY2FsIGNhbWVyYXMgdGhhdCBhcmUKLSAgICAgKiBhbHNvIGV4cG9zZWQgdG8gdGhlIGFwcGxpY2F0aW9uLjwvcD4KKyAgICAgKiA8cD5UaGUgY2FtZXJhIGRldmljZSBpcyBhIGxvZ2ljYWwgY2FtZXJhIGJhY2tlZCBieSB0d28gb3IgbW9yZSBwaHlzaWNhbCBjYW1lcmFzLiBJbgorICAgICAqIEFQSSBsZXZlbCAyOCwgdGhlIHBoeXNpY2FsIGNhbWVyYXMgbXVzdCBhbHNvIGJlIGV4cG9zZWQgdG8gdGhlIGFwcGxpY2F0aW9uIHZpYQorICAgICAqIDxhIGhyZWY9Imh0dHBzOi8vZGV2ZWxvcGVyLmFuZHJvaWQuY29tL3JlZmVyZW5jZS9hbmRyb2lkL2hhcmR3YXJlL2NhbWVyYTIvQ2FtZXJhTWFuYWdlci5odG1sI2dldENhbWVyYUlkTGlzdCI+Q2FtZXJhTWFuYWdlciNnZXRDYW1lcmFJZExpc3Q8L2E+LiBTdGFydGluZyBmcm9tIEFQSQorICAgICAqIGxldmVsIDI5LCBzb21lIG9yIGFsbCBwaHlzaWNhbCBjYW1lcmFzIG1heSBub3QgYmUgaW5kZXBlbmRlbnRseSBleHBvc2VkIHRvIHRoZQorICAgICAqIGFwcGxpY2F0aW9uLCBpbiB3aGljaCBjYXNlIHRoZSBwaHlzaWNhbCBjYW1lcmEgSURzIHdpbGwgbm90IGJlIGF2YWlsYWJsZSBpbgorICAgICAqIDxhIGhyZWY9Imh0dHBzOi8vZGV2ZWxvcGVyLmFuZHJvaWQuY29tL3JlZmVyZW5jZS9hbmRyb2lkL2hhcmR3YXJlL2NhbWVyYTIvQ2FtZXJhTWFuYWdlci5odG1sI2dldENhbWVyYUlkTGlzdCI+Q2FtZXJhTWFuYWdlciNnZXRDYW1lcmFJZExpc3Q8L2E+LiBCdXQgdGhlIGFwcGxpY2F0aW9uCisgICAgICogY2FuIHN0aWxsIHF1ZXJ5IHRoZSBwaHlzaWNhbCBjYW1lcmFzJyBjaGFyYWN0ZXJpc3RpY3MgYnkgY2FsbGluZworICAgICAqIDxhIGhyZWY9Imh0dHBzOi8vZGV2ZWxvcGVyLmFuZHJvaWQuY29tL3JlZmVyZW5jZS9hbmRyb2lkL2hhcmR3YXJlL2NhbWVyYTIvQ2FtZXJhTWFuYWdlci5odG1sI2dldENhbWVyYUNoYXJhY3RlcmlzdGljcyI+Q2FtZXJhTWFuYWdlciNnZXRDYW1lcmFDaGFyYWN0ZXJpc3RpY3M8L2E+LjwvcD4KICAgICAgKiA8cD5DYW1lcmEgYXBwbGljYXRpb24gc2hvdWxkbid0IGFzc3VtZSB0aGF0IHRoZXJlIGFyZSBhdCBtb3N0IDEgcmVhciBjYW1lcmEgYW5kIDEgZnJvbnQKICAgICAgKiBjYW1lcmEgaW4gdGhlIHN5c3RlbS4gRm9yIGFuIGFwcGxpY2F0aW9uIHRoYXQgc3dpdGNoZXMgYmV0d2VlbiBmcm9udCBhbmQgYmFjayBjYW1lcmFzLAogICAgICAqIHRoZSByZWNvbW1lbmRhdGlvbiBpcyB0byBzd2l0Y2ggYmV0d2VlbiB0aGUgZmlyc3QgcmVhciBjYW1lcmEgYW5kIHRoZSBmaXJzdCBmcm9udApAQCAtNzI2NSw3ICs3NDA5LDE1IEBACiAKICAgICAvKioKICAgICAgKiA8cD5UaGUgY2FtZXJhIGRldmljZSBpcyBhIG1vbm9jaHJvbWUgY2FtZXJhIHRoYXQgZG9lc24ndCBjb250YWluIGEgY29sb3IgZmlsdGVyIGFycmF5LAotICAgICAqIGFuZCB0aGUgcGl4ZWwgdmFsdWVzIG9uIFUgYW5kIFYgcGxhbmVzIGFyZSBhbGwgMTI4LjwvcD4KKyAgICAgKiBhbmQgZm9yIFlVVl80MjBfODg4IHN0cmVhbSwgdGhlIHBpeGVsIHZhbHVlcyBvbiBVIGFuZCBWIHBsYW5lcyBhcmUgYWxsIDEyOC48L3A+CisgICAgICogPHA+QSBNT05PQ0hST01FIGNhbWVyYSBtdXN0IHN1cHBvcnQgdGhlIGd1YXJhbnRlZWQgc3RyZWFtIGNvbWJpbmF0aW9ucyByZXF1aXJlZCBmb3IKKyAgICAgKiBpdHMgZGV2aWNlIGxldmVsIGFuZCBjYXBhYmlsaXRpZXMuIEFkZGl0aW9uYWxseSwgaWYgdGhlIG1vbm9jaHJvbWUgY2FtZXJhIGRldmljZQorICAgICAqIHN1cHBvcnRzIFk4IGZvcm1hdCwgYWxsIG1hbmRhdG9yeSBzdHJlYW0gY29tYmluYXRpb24gcmVxdWlyZW1lbnRzIHJlbGF0ZWQgdG8ge0BsaW5rIEFJTUFHRV9GT1JNQVRfWVVWXzQyMF84ODggWVVWXzQyMF84ODh9IGFwcGx5CisgICAgICogdG8ge0BsaW5rIEFJTUFHRV9GT1JNQVRfWTggWTh9IGFzIHdlbGwuIFRoZXJlIGFyZSBubworICAgICAqIG1hbmRhdG9yeSBzdHJlYW0gY29tYmluYXRpb24gcmVxdWlyZW1lbnRzIHdpdGggcmVnYXJkIHRvCisgICAgICoge0BsaW5rIEFJTUFHRV9GT1JNQVRfWTggWTh9IGZvciBCYXllciBjYW1lcmEgZGV2aWNlcy48L3A+CisgICAgICogPHA+U3RhcnRpbmcgZnJvbSBBbmRyb2lkIFEsIHRoZSBTRU5TT1JfSU5GT19DT0xPUl9GSUxURVJfQVJSQU5HRU1FTlQgb2YgYSBNT05PQ0hST01FCisgICAgICogY2FtZXJhIHdpbGwgYmUgZWl0aGVyIE1PTk8gb3IgTklSLjwvcD4KICAgICAgKi8KICAgICBBQ0FNRVJBX1JFUVVFU1RfQVZBSUxBQkxFX0NBUEFCSUxJVElFU19NT05PQ0hST01FICAgICAgICAgICAgICAgID0gMTIsCiAKQEAgLTcyOTQsNiArNzQ0Niw2NyBAQAogCiB9IGFjYW1lcmFfbWV0YWRhdGFfZW51bV9hbmRyb2lkX3NjYWxlcl9jcm9wcGluZ190eXBlX3Q7CiAKKy8vIEFDQU1FUkFfU0NBTEVSX0FWQUlMQUJMRV9SRUNPTU1FTkRFRF9TVFJFQU1fQ09ORklHVVJBVElPTlMKK3R5cGVkZWYgZW51bSBhY2FtZXJhX21ldGFkYXRhX2VudW1fYWNhbWVyYV9zY2FsZXJfYXZhaWxhYmxlX3JlY29tbWVuZGVkX3N0cmVhbV9jb25maWd1cmF0aW9ucyB7CisgICAgLyoqCisgICAgICogPHA+UHJldmlldyBtdXN0IG9ubHkgaW5jbHVkZSBub24tc3RhbGxpbmcgcHJvY2Vzc2VkIHN0cmVhbSBjb25maWd1cmF0aW9ucyB3aXRoCisgICAgICogb3V0cHV0IGZvcm1hdHMgbGlrZSBZVVZfNDIwXzg4OCwgSU1QTEVNRU5UQVRJT05fREVGSU5FRCwgZXRjLjwvcD4KKyAgICAgKi8KKyAgICBBQ0FNRVJBX1NDQUxFUl9BVkFJTEFCTEVfUkVDT01NRU5ERURfU1RSRUFNX0NPTkZJR1VSQVRJT05TX1BSRVZJRVcKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9IDB4MCwKKworICAgIC8qKgorICAgICAqIDxwPlZpZGVvIHJlY29yZCBtdXN0IGluY2x1ZGUgc3RyZWFtIGNvbmZpZ3VyYXRpb25zIHRoYXQgbWF0Y2ggdGhlIGFkdmVydGlzZWQKKyAgICAgKiBzdXBwb3J0ZWQgbWVkaWEgcHJvZmlsZXMgPGEgaHJlZj0iaHR0cHM6Ly9kZXZlbG9wZXIuYW5kcm9pZC5jb20vcmVmZXJlbmNlL2FuZHJvaWQvbWVkaWEvQ2FtY29yZGVyUHJvZmlsZS5odG1sIj5DYW1jb3JkZXJQcm9maWxlPC9hPiB3aXRoCisgICAgICogSU1QTEVNRU5UQVRJT05fREVGSU5FRCBmb3JtYXQuPC9wPgorICAgICAqLworICAgIEFDQU1FUkFfU0NBTEVSX0FWQUlMQUJMRV9SRUNPTU1FTkRFRF9TVFJFQU1fQ09ORklHVVJBVElPTlNfUkVDT1JECisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPSAweDEsCisKKyAgICAvKioKKyAgICAgKiA8cD5WaWRlbyBzbmFwc2hvdCBtdXN0IGluY2x1ZGUgc3RyZWFtIGNvbmZpZ3VyYXRpb25zIGF0IGxlYXN0IGFzIGJpZyBhcworICAgICAqIHRoZSBtYXhpbXVtIFJFQ09SRCByZXNvbHV0aW9ucyBhbmQgb25seSB3aXRoIGZvcm1hdCBCTE9CICsgREFUQVNQQUNFX0pGSUYKKyAgICAgKiBmb3JtYXQvZGF0YXNwYWNlIGNvbWJpbmF0aW9uIChKUEVHKS4gQWRkaXRpb25hbGx5IHRoZSBjb25maWd1cmF0aW9ucyBzaG91bGRuJ3QgY2F1c2UKKyAgICAgKiBwcmV2aWV3IGdsaXRjaGVzIGFuZCBhbHNvIGJlIGFibGUgdG8gcnVuIGF0IDMwIGZwcy48L3A+CisgICAgICovCisgICAgQUNBTUVSQV9TQ0FMRVJfQVZBSUxBQkxFX1JFQ09NTUVOREVEX1NUUkVBTV9DT05GSUdVUkFUSU9OU19WSURFT19TTkFQU0hPVAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gMHgyLAorCisgICAgLyoqCisgICAgICogPHA+UmVjb21tZW5kZWQgc25hcHNob3Qgc3RyZWFtIGNvbmZpZ3VyYXRpb25zIG11c3QgaW5jbHVkZSBhdCBsZWFzdCBvbmUgd2l0aAorICAgICAqIHNpemUgY2xvc2UgdG8gQUNBTUVSQV9TRU5TT1JfSU5GT19BQ1RJVkVfQVJSQVlfU0laRSB3aXRoIEJMT0IgKyBEQVRBU1BBQ0VfSkZJRgorICAgICAqIGZvcm1hdC9kYXRhc3BhY2UgY29tYmluYXRpb24gKEpQRUcpLiBUYWtpbmcgaW50byBhY2NvdW50IHJlc3RyaWN0aW9ucyBvbiBhc3BlY3QKKyAgICAgKiByYXRpbywgYWxpZ25tZW50IGV0Yy4gdGhlIGFyZWEgb2YgdGhlIG1heGltdW0gc3VnZ2VzdGVkIHNpemUgc2hvdWxkbuKAmXQgYmUgbGVzcyB0aGFuCisgICAgICogOTclIG9mIHRoZSBzZW5zb3IgYXJyYXkgc2l6ZSBhcmVhLjwvcD4KKyAgICAgKgorICAgICAqIEBzZWUgQUNBTUVSQV9TRU5TT1JfSU5GT19BQ1RJVkVfQVJSQVlfU0laRQorICAgICAqLworICAgIEFDQU1FUkFfU0NBTEVSX0FWQUlMQUJMRV9SRUNPTU1FTkRFRF9TVFJFQU1fQ09ORklHVVJBVElPTlNfU05BUFNIT1QKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9IDB4MywKKworICAgIC8qKgorICAgICAqIDxwPklmIHN1cHBvcnRlZCwgcmVjb21tZW5kZWQgaW5wdXQgc3RyZWFtIGNvbmZpZ3VyYXRpb25zIG11c3Qgb25seSBiZSBhZHZlcnRpc2VkIHdpdGgKKyAgICAgKiBaU0wgYWxvbmcgd2l0aCBvdGhlciBwcm9jZXNzZWQgYW5kL29yIHN0YWxsaW5nIG91dHB1dCBmb3JtYXRzLjwvcD4KKyAgICAgKi8KKyAgICBBQ0FNRVJBX1NDQUxFUl9BVkFJTEFCTEVfUkVDT01NRU5ERURfU1RSRUFNX0NPTkZJR1VSQVRJT05TX1pTTCAgID0gMHg0LAorCisgICAgLyoqCisgICAgICogPHA+SWYgc3VwcG9ydGVkLCByZWNvbW1lbmRlZCByYXcgc3RyZWFtIGNvbmZpZ3VyYXRpb25zIG11c3Qgb25seSBpbmNsdWRlIFJBVyBiYXNlZAorICAgICAqIG91dHB1dCBmb3JtYXRzLjwvcD4KKyAgICAgKi8KKyAgICBBQ0FNRVJBX1NDQUxFUl9BVkFJTEFCTEVfUkVDT01NRU5ERURfU1RSRUFNX0NPTkZJR1VSQVRJT05TX1JBVyAgID0gMHg1LAorCisgICAgQUNBTUVSQV9TQ0FMRVJfQVZBSUxBQkxFX1JFQ09NTUVOREVEX1NUUkVBTV9DT05GSUdVUkFUSU9OU19QVUJMSUNfRU5ECisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPSAweDYsCisKKyAgICAvKioKKyAgICAgKiA8cD5WZW5kb3IgZGVmaW5lZCB1c2UgY2FzZXMuIFRoZXNlIGRlcGVuZCBvbiB0aGUgdmVuZG9yIGltcGxlbWVudGF0aW9uLjwvcD4KKyAgICAgKi8KKyAgICBBQ0FNRVJBX1NDQUxFUl9BVkFJTEFCTEVfUkVDT01NRU5ERURfU1RSRUFNX0NPTkZJR1VSQVRJT05TX1ZFTkRPUl9TVEFSVAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gMHgxOCwKKworfSBhY2FtZXJhX21ldGFkYXRhX2VudW1fYW5kcm9pZF9zY2FsZXJfYXZhaWxhYmxlX3JlY29tbWVuZGVkX3N0cmVhbV9jb25maWd1cmF0aW9uc190OworCiAKIC8vIEFDQU1FUkFfU0VOU09SX1JFRkVSRU5DRV9JTExVTUlOQU5UMQogdHlwZWRlZiBlbnVtIGFjYW1lcmFfbWV0YWRhdGFfZW51bV9hY2FtZXJhX3NlbnNvcl9yZWZlcmVuY2VfaWxsdW1pbmFudDEgewpAQCAtNzQ3MCw2ICs3NjgzLDIxIEBACiAgICAgICovCiAgICAgQUNBTUVSQV9TRU5TT1JfSU5GT19DT0xPUl9GSUxURVJfQVJSQU5HRU1FTlRfUkdCICAgICAgICAgICAgICAgICA9IDQsCiAKKyAgICAvKioKKyAgICAgKiA8cD5TZW5zb3IgZG9lc24ndCBoYXZlIGFueSBCYXllciBjb2xvciBmaWx0ZXIuCisgICAgICogU3VjaCBzZW5zb3IgY2FwdHVyZXMgdmlzaWJsZSBsaWdodCBpbiBtb25vY2hyb21lLiBUaGUgZXhhY3Qgd2VpZ2h0aW5nIGFuZAorICAgICAqIHdhdmVsZW5ndGhzIGNhcHR1cmVkIGlzIG5vdCBzcGVjaWZpZWQsIGJ1dCBnZW5lcmFsbHkgb25seSBpbmNsdWRlcyB0aGUgdmlzaWJsZQorICAgICAqIGZyZXF1ZW5jaWVzLiBUaGlzIHZhbHVlIGltcGxpZXMgYSBNT05PQ0hST01FIGNhbWVyYS48L3A+CisgICAgICovCisgICAgQUNBTUVSQV9TRU5TT1JfSU5GT19DT0xPUl9GSUxURVJfQVJSQU5HRU1FTlRfTU9OTyAgICAgICAgICAgICAgICA9IDUsCisKKyAgICAvKioKKyAgICAgKiA8cD5TZW5zb3IgaGFzIGEgbmVhciBpbmZyYXJlZCBmaWx0ZXIgY2FwdHVyaW5nIGxpZ2h0IHdpdGggd2F2ZWxlbmd0aCBiZXR3ZWVuCisgICAgICogcm91Z2hseSA3NTBubSBhbmQgMTQwMG5tLCBhbmQgdGhlIHNhbWUgZmlsdGVyIGNvdmVycyB0aGUgd2hvbGUgc2Vuc29yIGFycmF5LiBUaGlzCisgICAgICogdmFsdWUgaW1wbGllcyBhIE1PTk9DSFJPTUUgY2FtZXJhLjwvcD4KKyAgICAgKi8KKyAgICBBQ0FNRVJBX1NFTlNPUl9JTkZPX0NPTE9SX0ZJTFRFUl9BUlJBTkdFTUVOVF9OSVIgICAgICAgICAgICAgICAgID0gNiwKKwogfSBhY2FtZXJhX21ldGFkYXRhX2VudW1fYW5kcm9pZF9zZW5zb3JfaW5mb19jb2xvcl9maWx0ZXJfYXJyYW5nZW1lbnRfdDsKIAogLy8gQUNBTUVSQV9TRU5TT1JfSU5GT19USU1FU1RBTVBfU09VUkNFCmRpZmYgLS1naXQgYS9jYW1lcmEvbmRrL2luY2x1ZGUvY2FtZXJhL05ka0NhbWVyYVdpbmRvd1R5cGUuaCBiL2NhbWVyYS9uZGsvaW5jbHVkZS9jYW1lcmEvTmRrQ2FtZXJhV2luZG93VHlwZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk5ZjY3ZTkKLS0tIC9kZXYvbnVsbAorKysgYi9jYW1lcmEvbmRrL2luY2x1ZGUvY2FtZXJhL05ka0NhbWVyYVdpbmRvd1R5cGUuaApAQCAtMCwwICsxLDUzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE4IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KKworI2lmbmRlZiBfTkRLX0NBTUVSQV9XSU5ET1dfVFlQRV9ICisjZGVmaW5lIF9OREtfQ0FNRVJBX1dJTkRPV19UWVBFX0gKKworLyoqCisgKiBAYWRkdG9ncm91cCBDYW1lcmEKKyAqIEB7CisgKi8KKworLyoqCisgKiBAZmlsZSBOZGtDYW1lcmFXaW5kb3dUeXBlLmgKKyAqLworCisvKgorICogVGhpcyBmaWxlIGRlZmluZXMgYW4gTkRLIEFQSS4KKyAqIERvIG5vdCByZW1vdmUgbWV0aG9kcy4KKyAqIERvIG5vdCBjaGFuZ2UgbWV0aG9kIHNpZ25hdHVyZXMuCisgKiBEbyBub3QgY2hhbmdlIHRoZSB2YWx1ZSBvZiBjb25zdGFudHMuCisgKiBEbyBub3QgY2hhbmdlIHRoZSBzaXplIG9mIGFueSBvZiB0aGUgY2xhc3NlcyBkZWZpbmVkIGluIGhlcmUuCisgKiBEbyBub3QgcmVmZXJlbmNlIHR5cGVzIHRoYXQgYXJlIG5vdCBwYXJ0IG9mIHRoZSBOREsuCisgKiBEbyBub3QgI2luY2x1ZGUgZmlsZXMgdGhhdCBhcmVuJ3QgcGFydCBvZiB0aGUgTkRLLgorICovCisKKy8qKgorICogVGhpcyBmaWxlIGRlZmluZXMgdGhlIHdpbmRvdyB0eXBlIHVzZWQgYnkgTkRLIGFuZCB0aGUgVk5ESyB2YXJpYW50cyBvZiB0aGUKKyAqIGNhbWVyYTIgTkRLLiBUaGlzIGVuYWJsZXMgdXMgdG8gc2hhcmUgdGhlIGFwaSBkZWZpbml0aW9uIGhlYWRlcnMgYW5kIGF2b2lkCisgKiBjb2RlIGR1cGxpY2F0aW9uIChzaW5jZSB0aGUgVk5ESyB2YXJpYW50IGRvZXNuJ3QgdXNlIEFOYXRpdmVXaW5kb3cgdW5saWtlIHRoZQorICogTkRLIHZhcmlhbnQpLgorICovCisjaWZkZWYgX19BTkRST0lEX1ZOREtfXworI2luY2x1ZGUgPGN1dGlscy9uYXRpdmVfaGFuZGxlLmg+Cit0eXBlZGVmIG5hdGl2ZV9oYW5kbGVfdCBBQ2FtZXJhV2luZG93VHlwZTsKKyNlbHNlCisjaW5jbHVkZSA8YW5kcm9pZC9uYXRpdmVfd2luZG93Lmg+Cit0eXBlZGVmIEFOYXRpdmVXaW5kb3cgQUNhbWVyYVdpbmRvd1R5cGU7CisjZW5kaWYKKworI2VuZGlmIC8vX05ES19DQU1FUkFfV0lORE9XX1RZUEVfSApkaWZmIC0tZ2l0IGEvY2FtZXJhL25kay9pbmNsdWRlL2NhbWVyYS9OZGtDYXB0dXJlUmVxdWVzdC5oIGIvY2FtZXJhL25kay9pbmNsdWRlL2NhbWVyYS9OZGtDYXB0dXJlUmVxdWVzdC5oCmluZGV4IDUzNDBlNzYuLjEzNjk4OWEgMTAwNjQ0Ci0tLSBhL2NhbWVyYS9uZGsvaW5jbHVkZS9jYW1lcmEvTmRrQ2FwdHVyZVJlcXVlc3QuaAorKysgYi9jYW1lcmEvbmRrL2luY2x1ZGUvY2FtZXJhL05ka0NhcHR1cmVSZXF1ZXN0LmgKQEAgLTM1LDkgKzM1LDkgQEAKIAogI2luY2x1ZGUgPHN5cy9jZGVmcy5oPgogCi0jaW5jbHVkZSA8YW5kcm9pZC9uYXRpdmVfd2luZG93Lmg+CiAjaW5jbHVkZSAiTmRrQ2FtZXJhRXJyb3IuaCIKICNpbmNsdWRlICJOZGtDYW1lcmFNZXRhZGF0YS5oIgorI2luY2x1ZGUgIk5ka0NhbWVyYVdpbmRvd1R5cGUuaCIKIAogI2lmbmRlZiBfTkRLX0NBUFRVUkVfUkVRVUVTVF9ICiAjZGVmaW5lIF9OREtfQ0FQVFVSRV9SRVFVRVNUX0gKQEAgLTEwMSw3ICsxMDEsNyBAQAogICoKICAqIEBzZWUgQUNhcHR1cmVSZXF1ZXN0X2FkZFRhcmdldAogICovCi1jYW1lcmFfc3RhdHVzX3QgQUNhbWVyYU91dHB1dFRhcmdldF9jcmVhdGUoQU5hdGl2ZVdpbmRvdyogd2luZG93LAorY2FtZXJhX3N0YXR1c190IEFDYW1lcmFPdXRwdXRUYXJnZXRfY3JlYXRlKEFDYW1lcmFXaW5kb3dUeXBlKiB3aW5kb3csCiAgICAgICAgIEFDYW1lcmFPdXRwdXRUYXJnZXQqKiBvdXRwdXQpIF9fSU5UUk9EVUNFRF9JTigyNCk7CiAKIC8qKgpkaWZmIC0tZ2l0IGEvY2FtZXJhL25kay9uZGtfdmVuZG9yL2ltcGwvQUNhbWVyYUNhcHR1cmVTZXNzaW9uVmVuZG9yLmggYi9jYW1lcmEvbmRrL25ka192ZW5kb3IvaW1wbC9BQ2FtZXJhQ2FwdHVyZVNlc3Npb25WZW5kb3IuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ZDllOTBjCi0tLSAvZGV2L251bGwKKysrIGIvY2FtZXJhL25kay9uZGtfdmVuZG9yL2ltcGwvQUNhbWVyYUNhcHR1cmVTZXNzaW9uVmVuZG9yLmgKQEAgLTAsMCArMSw0NSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxOCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCisKKyNpbmNsdWRlICJ1dGlscy5oIgorCitzdHJ1Y3QgQUNhcHR1cmVTZXNzaW9uT3V0cHV0IHsKKyAgICBleHBsaWNpdCBBQ2FwdHVyZVNlc3Npb25PdXRwdXQobmF0aXZlX2hhbmRsZV90KiB3aW5kb3csIGJvb2wgaXNTaGFyZWQgPSBmYWxzZSkgOgorICAgICAgICAgICAgbVdpbmRvdyh3aW5kb3cpLCBtSXNTaGFyZWQoaXNTaGFyZWQpIHt9OworCisgICAgYm9vbCBvcGVyYXRvciA9PSAoY29uc3QgQUNhcHR1cmVTZXNzaW9uT3V0cHV0JiBvdGhlcikgY29uc3QgeworICAgICAgICByZXR1cm4gKG1XaW5kb3cgPT0gb3RoZXIubVdpbmRvdyk7CisgICAgfQorCisgICAgYm9vbCBvcGVyYXRvciAhPSAoY29uc3QgQUNhcHR1cmVTZXNzaW9uT3V0cHV0JiBvdGhlcikgY29uc3QgeworICAgICAgICByZXR1cm4gbVdpbmRvdyAhPSBvdGhlci5tV2luZG93OworICAgIH0KKworICAgIGJvb2wgb3BlcmF0b3IgPCAoY29uc3QgQUNhcHR1cmVTZXNzaW9uT3V0cHV0JiBvdGhlcikgY29uc3QgeworICAgICAgICByZXR1cm4gbVdpbmRvdyA8IG90aGVyLm1XaW5kb3c7CisgICAgfQorCisgICAgYm9vbCBvcGVyYXRvciA+IChjb25zdCBBQ2FwdHVyZVNlc3Npb25PdXRwdXQmIG90aGVyKSBjb25zdCB7CisgICAgICAgIHJldHVybiBtV2luZG93ID4gb3RoZXIubVdpbmRvdzsKKyAgICB9CisKKyAgICBhbmRyb2lkOjphY2FtOjp1dGlsczo6bmF0aXZlX2hhbmRsZV9wdHJfd3JhcHBlciBtV2luZG93OworICAgIHN0ZDo6c2V0PGFuZHJvaWQ6OmFjYW06OnV0aWxzOjpuYXRpdmVfaGFuZGxlX3B0cl93cmFwcGVyPiBtU2hhcmVkV2luZG93czsKKyAgICBib29sICAgICAgICAgICBtSXNTaGFyZWQ7CisgICAgaW50ICAgICAgICAgICAgbVJvdGF0aW9uID0gQ0FNRVJBM19TVFJFQU1fUk9UQVRJT05fMDsKK307CisKKwpkaWZmIC0tZ2l0IGEvY2FtZXJhL25kay9uZGtfdmVuZG9yL2ltcGwvQUNhbWVyYURldmljZS5jcHAgYi9jYW1lcmEvbmRrL25ka192ZW5kb3IvaW1wbC9BQ2FtZXJhRGV2aWNlLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iODZmODU0Ci0tLSAvZGV2L251bGwKKysrIGIvY2FtZXJhL25kay9uZGtfdmVuZG9yL2ltcGwvQUNhbWVyYURldmljZS5jcHAKQEAgLTAsMCArMSwxNTk0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE4IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KKworLy8jZGVmaW5lIExPR19OREVCVUcgMAorI2RlZmluZSBMT0dfVEFHICJBQ2FtZXJhRGV2aWNlVmVuZG9yIgorCisjaW5jbHVkZSA8dmVjdG9yPgorI2luY2x1ZGUgPGludHR5cGVzLmg+CisjaW5jbHVkZSA8YW5kcm9pZC9mcmFtZXdvcmtzL2NhbWVyYXNlcnZpY2Uvc2VydmljZS8yLjAvSUNhbWVyYVNlcnZpY2UuaD4KKyNpbmNsdWRlIDxhbmRyb2lkL2ZyYW1ld29ya3MvY2FtZXJhc2VydmljZS9kZXZpY2UvMi4wL3R5cGVzLmg+CisjaW5jbHVkZSA8Q2FtZXJhTWV0YWRhdGEuaD4KKworI2luY2x1ZGUgIm5ka192ZW5kb3IvaW1wbC9BQ2FtZXJhRGV2aWNlLmgiCisjaW5jbHVkZSAiQUNhbWVyYUNhcHR1cmVTZXNzaW9uLmgiCisjaW5jbHVkZSAiQUNhbWVyYU1ldGFkYXRhLmgiCisjaW5jbHVkZSAiQUNhcHR1cmVSZXF1ZXN0LmgiCisjaW5jbHVkZSAidXRpbHMuaCIKKwordXNpbmcgbmFtZXNwYWNlIGFuZHJvaWQ7CisKK25hbWVzcGFjZSBhbmRyb2lkIHsKK25hbWVzcGFjZSBhY2FtIHsKKwordXNpbmcgSENhbWVyYU1ldGFkYXRhID0gZnJhbWV3b3Jrczo6Y2FtZXJhc2VydmljZTo6ZGV2aWNlOjpWMl8wOjpDYW1lcmFNZXRhZGF0YTsKK3VzaW5nIE91dHB1dENvbmZpZ3VyYXRpb24gPSBmcmFtZXdvcmtzOjpjYW1lcmFzZXJ2aWNlOjpkZXZpY2U6OlYyXzA6Ok91dHB1dENvbmZpZ3VyYXRpb247Cit1c2luZyBoYXJkd2FyZTo6Vm9pZDsKKworLy8gU3RhdGljIG1lbWJlciBkZWZpbml0aW9ucworY29uc3QgY2hhciogQ2FtZXJhRGV2aWNlOjprQ29udGV4dEtleSAgICAgICAgPSAiQ29udGV4dCI7Citjb25zdCBjaGFyKiBDYW1lcmFEZXZpY2U6OmtEZXZpY2VLZXkgICAgICAgICA9ICJEZXZpY2UiOworY29uc3QgY2hhciogQ2FtZXJhRGV2aWNlOjprRXJyb3JDb2RlS2V5ICAgICAgPSAiRXJyb3JDb2RlIjsKK2NvbnN0IGNoYXIqIENhbWVyYURldmljZTo6a0NhbGxiYWNrRnBLZXkgICAgID0gIkNhbGxiYWNrIjsKK2NvbnN0IGNoYXIqIENhbWVyYURldmljZTo6a1Nlc3Npb25TcEtleSAgICAgID0gIlNlc3Npb25TcCI7Citjb25zdCBjaGFyKiBDYW1lcmFEZXZpY2U6OmtDYXB0dXJlUmVxdWVzdEtleSA9ICJDYXB0dXJlUmVxdWVzdCI7Citjb25zdCBjaGFyKiBDYW1lcmFEZXZpY2U6OmtUaW1lU3RhbXBLZXkgICAgICA9ICJUaW1lU3RhbXAiOworY29uc3QgY2hhciogQ2FtZXJhRGV2aWNlOjprQ2FwdHVyZVJlc3VsdEtleSAgPSAiQ2FwdHVyZVJlc3VsdCI7Citjb25zdCBjaGFyKiBDYW1lcmFEZXZpY2U6OmtDYXB0dXJlRmFpbHVyZUtleSA9ICJDYXB0dXJlRmFpbHVyZSI7Citjb25zdCBjaGFyKiBDYW1lcmFEZXZpY2U6OmtTZXF1ZW5jZUlkS2V5ICAgICA9ICJTZXF1ZW5jZUlkIjsKK2NvbnN0IGNoYXIqIENhbWVyYURldmljZTo6a0ZyYW1lTnVtYmVyS2V5ICAgID0gIkZyYW1lTnVtYmVyIjsKK2NvbnN0IGNoYXIqIENhbWVyYURldmljZTo6a0Fud0tleSAgICAgICAgICAgID0gIkFudyI7CisKKy8qKgorICogQ2FtZXJhRGV2aWNlIEltcGxlbWVudGF0aW9uCisgKi8KK0NhbWVyYURldmljZTo6Q2FtZXJhRGV2aWNlKAorICAgICAgICBjb25zdCBjaGFyKiBpZCwKKyAgICAgICAgQUNhbWVyYURldmljZV9TdGF0ZUNhbGxiYWNrcyogY2IsCisgICAgICAgIHNwPEFDYW1lcmFNZXRhZGF0YT4gY2hhcnMsCisgICAgICAgIEFDYW1lcmFEZXZpY2UqIHdyYXBwZXIpIDoKKyAgICAgICAgbUNhbWVyYUlkKGlkKSwKKyAgICAgICAgbUFwcENhbGxiYWNrcygqY2IpLAorICAgICAgICBtQ2hhcnMoc3RkOjptb3ZlKGNoYXJzKSksCisgICAgICAgIG1TZXJ2aWNlQ2FsbGJhY2sobmV3IFNlcnZpY2VDYWxsYmFjayh0aGlzKSksCisgICAgICAgIG1XcmFwcGVyKHdyYXBwZXIpLAorICAgICAgICBtSW5FcnJvcihmYWxzZSksCisgICAgICAgIG1FcnJvcihBQ0FNRVJBX09LKSwKKyAgICAgICAgbUlkbGUodHJ1ZSksCisgICAgICAgIG1DdXJyZW50U2Vzc2lvbihudWxscHRyKSB7CisgICAgbUNsb3NpbmcgPSBmYWxzZTsKKyAgICAvLyBTZXR1cCBsb29wZXIgdGhyZWFkIHRvIHBlcmZyb20gZGV2aWNlIGNhbGxiYWNrcyB0byBhcHAKKyAgICBtQ2JMb29wZXIgPSBuZXcgQUxvb3BlcjsKKyAgICBtQ2JMb29wZXItPnNldE5hbWUoIkMyTi1kZXYtbG9vcGVyIik7CisgICAgc3RhdHVzX3QgZXJyID0gbUNiTG9vcGVyLT5zdGFydCgKKyAgICAgICAgICAgIC8qcnVuT25DYWxsaW5nVGhyZWFkKi9mYWxzZSwKKyAgICAgICAgICAgIC8qY2FuQ2FsbEphdmEqLyAgICAgICB0cnVlLAorICAgICAgICAgICAgUFJJT1JJVFlfREVGQVVMVCk7CisgICAgaWYgKGVyciAhPSBPSykgeworICAgICAgICBBTE9HRSgiJXM6IFVuYWJsZSB0byBzdGFydCBjYW1lcmEgZGV2aWNlIGNhbGxiYWNrIGxvb3BlcjogJXMgKCVkKSIsCisgICAgICAgICAgICAgICAgX19GVU5DVElPTl9fLCBzdHJlcnJvcigtZXJyKSwgZXJyKTsKKyAgICAgICAgc2V0Q2FtZXJhRGV2aWNlRXJyb3JMb2NrZWQoQUNBTUVSQV9FUlJPUl9DQU1FUkFfREVWSUNFKTsKKyAgICB9CisgICAgbUhhbmRsZXIgPSBuZXcgQ2FsbGJhY2tIYW5kbGVyKCk7CisgICAgbUNiTG9vcGVyLT5yZWdpc3RlckhhbmRsZXIobUhhbmRsZXIpOworCisgICAgY29uc3QgQ2FtZXJhTWV0YWRhdGEmIG1ldGFkYXRhID0gbUNoYXJzLT5nZXRJbnRlcm5hbERhdGEoKTsKKyAgICBjYW1lcmFfbWV0YWRhdGFfcm9fZW50cnkgZW50cnkgPSBtZXRhZGF0YS5maW5kKEFORFJPSURfUkVRVUVTVF9QQVJUSUFMX1JFU1VMVF9DT1VOVCk7CisgICAgaWYgKGVudHJ5LmNvdW50ICE9IDEpIHsKKyAgICAgICAgQUxPR1coIiVzOiBiYWQgY291bnQgJXp1IGZvciBwYXJ0aWFsIHJlc3VsdCBjb3VudCIsIF9fRlVOQ1RJT05fXywgZW50cnkuY291bnQpOworICAgICAgICBtUGFydGlhbFJlc3VsdENvdW50ID0gMTsKKyAgICB9IGVsc2UgeworICAgICAgICBtUGFydGlhbFJlc3VsdENvdW50ID0gZW50cnkuZGF0YS5pMzJbMF07CisgICAgfQorCisgICAgZW50cnkgPSBtZXRhZGF0YS5maW5kKEFORFJPSURfTEVOU19JTkZPX1NIQURJTkdfTUFQX1NJWkUpOworICAgIGlmIChlbnRyeS5jb3VudCAhPSAyKSB7CisgICAgICAgIEFMT0dXKCIlczogYmFkIGNvdW50ICV6dSBmb3Igc2hhZGluZyBtYXAgc2l6ZSIsIF9fRlVOQ1RJT05fXywgZW50cnkuY291bnQpOworICAgICAgICBtU2hhZGluZ01hcFNpemVbMF0gPSAwOworICAgICAgICBtU2hhZGluZ01hcFNpemVbMV0gPSAwOworICAgIH0gZWxzZSB7CisgICAgICAgIG1TaGFkaW5nTWFwU2l6ZVswXSA9IGVudHJ5LmRhdGEuaTMyWzBdOworICAgICAgICBtU2hhZGluZ01hcFNpemVbMV0gPSBlbnRyeS5kYXRhLmkzMlsxXTsKKyAgICB9Cit9CisKKy8vIERldmljZSBjbG9zZSBpbXBsZW1lbnRhaXRvbgorQ2FtZXJhRGV2aWNlOjp+Q2FtZXJhRGV2aWNlKCkgeworICAgIHNwPEFDYW1lcmFDYXB0dXJlU2Vzc2lvbj4gc2Vzc2lvbiA9IG1DdXJyZW50U2Vzc2lvbi5wcm9tb3RlKCk7CisgICAgeworICAgICAgICBNdXRleDo6QXV0b2xvY2sgX2wobURldmljZUxvY2spOworICAgICAgICBpZiAoIWlzQ2xvc2VkKCkpIHsKKyAgICAgICAgICAgIGRpc2Nvbm5lY3RMb2NrZWQoc2Vzc2lvbik7CisgICAgICAgIH0KKyAgICAgICAgbUN1cnJlbnRTZXNzaW9uID0gbnVsbHB0cjsKKyAgICAgICAgaWYgKG1DYkxvb3BlciAhPSBudWxscHRyKSB7CisgICAgICAgICAgICBtQ2JMb29wZXItPnVucmVnaXN0ZXJIYW5kbGVyKG1IYW5kbGVyLT5pZCgpKTsKKyAgICAgICAgICAgIG1DYkxvb3Blci0+c3RvcCgpOworICAgICAgICB9CisgICAgfQorICAgIG1DYkxvb3Blci5jbGVhcigpOworICAgIG1IYW5kbGVyLmNsZWFyKCk7Cit9CisKK3ZvaWQKK0NhbWVyYURldmljZTo6cG9zdFNlc3Npb25Nc2dBbmRDbGVhbnVwKHNwPEFNZXNzYWdlPiYgbXNnKSB7CisgICAgbXNnLT5wb3N0KCk7CisgICAgbXNnLmNsZWFyKCk7CisgICAgc3A8QU1lc3NhZ2U+IGNsZWFudXBNc2cgPSBuZXcgQU1lc3NhZ2Uoa1doYXRDbGVhblVwU2Vzc2lvbnMsIG1IYW5kbGVyKTsKKyAgICBjbGVhbnVwTXNnLT5wb3N0KCk7Cit9CisKKy8vIFRPRE86IGNhY2hlZCBjcmVhdGVkIHJlcXVlc3Q/CitjYW1lcmFfc3RhdHVzX3QKK0NhbWVyYURldmljZTo6Y3JlYXRlQ2FwdHVyZVJlcXVlc3QoCisgICAgICAgIEFDYW1lcmFEZXZpY2VfcmVxdWVzdF90ZW1wbGF0ZSB0ZW1wbGF0ZUlkLAorICAgICAgICBBQ2FwdHVyZVJlcXVlc3QqKiByZXF1ZXN0KSBjb25zdCB7CisgICAgTXV0ZXg6OkF1dG9sb2NrIF9sKG1EZXZpY2VMb2NrKTsKKyAgICBjYW1lcmFfc3RhdHVzX3QgcmV0ID0gY2hlY2tDYW1lcmFDbG9zZWRPckVycm9yTG9ja2VkKCk7CisgICAgaWYgKHJldCAhPSBBQ0FNRVJBX09LKSB7CisgICAgICAgIHJldHVybiByZXQ7CisgICAgfQorICAgIGlmIChtUmVtb3RlID09IG51bGxwdHIpIHsKKyAgICAgICAgcmV0dXJuIEFDQU1FUkFfRVJST1JfQ0FNRVJBX0RJU0NPTk5FQ1RFRDsKKyAgICB9CisgICAgQ2FtZXJhTWV0YWRhdGEgcmF3UmVxdWVzdDsKKyAgICBTdGF0dXMgc3RhdHVzID0gU3RhdHVzOjpOT19FUlJPUjsKKyAgICBhdXRvIHJlbW90ZVJldCA9IG1SZW1vdGUtPmNyZWF0ZURlZmF1bHRSZXF1ZXN0KAorICAgICAgICB1dGlsczo6Y29udmVydFRvSGlkbCh0ZW1wbGF0ZUlkKSwKKyAgICAgICAgWyZzdGF0dXMsICZyYXdSZXF1ZXN0XShhdXRvIHMsIGNvbnN0IGhpZGxfdmVjPHVpbnQ4X3Q+ICZtZXRhZGF0YSkgeworICAgICAgICAgICAgc3RhdHVzID0gczsKKyAgICAgICAgICAgIGlmIChzdGF0dXMgPT0gU3RhdHVzOjpOT19FUlJPUiAmJiB1dGlsczo6Y29udmVydEZyb21IaWRsQ2xvbmVkKG1ldGFkYXRhLCAmcmF3UmVxdWVzdCkpIHsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgQUxPR0UoIiVzOiBDb3VsZG4ndCBjcmVhdGUgZGVmYXVsdCByZXF1ZXN0IiwgX19GVU5DVElPTl9fKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSk7CisgICAgaWYgKCFyZW1vdGVSZXQuaXNPaygpKSB7CisgICAgICAgIEFMT0dFKCIlczogVHJhbnNhY3Rpb24gZXJyb3Igd2hpbGUgdHJ5aW5nIHRvIGNyZWF0ZSBkZWZhdWx0IHJlcXVlc3QgJXMiLCBfX0ZVTkNUSU9OX18sCisgICAgICAgICAgICAgIHJlbW90ZVJldC5kZXNjcmlwdGlvbigpLmNfc3RyKCkpOworICAgICAgICByZXR1cm4gQUNBTUVSQV9FUlJPUl9VTktOT1dOOworICAgIH0KKyAgICBpZiAoc3RhdHVzICE9IFN0YXR1czo6Tk9fRVJST1IpIHsKKyAgICAgICAgcmV0dXJuIHV0aWxzOjpjb252ZXJ0RnJvbUhpZGwoc3RhdHVzKTsKKyAgICB9CisgICAgQUNhcHR1cmVSZXF1ZXN0KiBvdXRSZXEgPSBuZXcgQUNhcHR1cmVSZXF1ZXN0KCk7CisgICAgb3V0UmVxLT5zZXR0aW5ncyA9IG5ldyBBQ2FtZXJhTWV0YWRhdGEocmF3UmVxdWVzdC5yZWxlYXNlKCksIEFDYW1lcmFNZXRhZGF0YTo6QUNNX1JFUVVFU1QpOworICAgIG91dFJlcS0+dGFyZ2V0cyAgPSBuZXcgQUNhbWVyYU91dHB1dFRhcmdldHMoKTsKKyAgICAqcmVxdWVzdCA9IG91dFJlcTsKKyAgICByZXR1cm4gQUNBTUVSQV9PSzsKK30KKworY2FtZXJhX3N0YXR1c190CitDYW1lcmFEZXZpY2U6OmNyZWF0ZUNhcHR1cmVTZXNzaW9uKAorICAgICAgICBjb25zdCBBQ2FwdHVyZVNlc3Npb25PdXRwdXRDb250YWluZXIqICAgICAgIG91dHB1dHMsCisgICAgICAgIGNvbnN0IEFDYXB0dXJlUmVxdWVzdCogc2Vzc2lvblBhcmFtZXRlcnMsCisgICAgICAgIGNvbnN0IEFDYW1lcmFDYXB0dXJlU2Vzc2lvbl9zdGF0ZUNhbGxiYWNrcyogY2FsbGJhY2tzLAorICAgICAgICAvKm91dCovQUNhbWVyYUNhcHR1cmVTZXNzaW9uKiogc2Vzc2lvbikgeworICAgIHNwPEFDYW1lcmFDYXB0dXJlU2Vzc2lvbj4gY3VycmVudFNlc3Npb24gPSBtQ3VycmVudFNlc3Npb24ucHJvbW90ZSgpOworICAgIE11dGV4OjpBdXRvbG9jayBfbChtRGV2aWNlTG9jayk7CisgICAgY2FtZXJhX3N0YXR1c190IHJldCA9IGNoZWNrQ2FtZXJhQ2xvc2VkT3JFcnJvckxvY2tlZCgpOworICAgIGlmIChyZXQgIT0gQUNBTUVSQV9PSykgeworICAgICAgICByZXR1cm4gcmV0OworICAgIH0KKworICAgIGlmIChjdXJyZW50U2Vzc2lvbiAhPSBudWxscHRyKSB7CisgICAgICAgIGN1cnJlbnRTZXNzaW9uLT5jbG9zZUJ5RGV2aWNlKCk7CisgICAgICAgIHN0b3BSZXBlYXRpbmdMb2NrZWQoKTsKKyAgICB9CisKKyAgICAvLyBDcmVhdGUgbmV3IHNlc3Npb24KKyAgICByZXQgPSBjb25maWd1cmVTdHJlYW1zTG9ja2VkKG91dHB1dHMsIHNlc3Npb25QYXJhbWV0ZXJzKTsKKyAgICBpZiAocmV0ICE9IEFDQU1FUkFfT0spIHsKKyAgICAgICAgQUxPR0UoIkZhaWwgdG8gY3JlYXRlIG5ldyBzZXNzaW9uLiBjYW5ub3QgY29uZmlndXJlIHN0cmVhbXMiKTsKKyAgICAgICAgcmV0dXJuIHJldDsKKyAgICB9CisKKyAgICBBQ2FtZXJhQ2FwdHVyZVNlc3Npb24qIG5ld1Nlc3Npb24gPSBuZXcgQUNhbWVyYUNhcHR1cmVTZXNzaW9uKAorICAgICAgICAgICAgbU5leHRTZXNzaW9uSWQrKywgb3V0cHV0cywgY2FsbGJhY2tzLCB0aGlzKTsKKworICAgIC8vIHNldCBuZXcgc2Vzc2lvbiBhcyBjdXJyZW50IHNlc3Npb24KKyAgICBuZXdTZXNzaW9uLT5pbmNTdHJvbmcoKHZvaWQgKikgQUNhbWVyYURldmljZV9jcmVhdGVDYXB0dXJlU2Vzc2lvbik7CisgICAgbUN1cnJlbnRTZXNzaW9uID0gbmV3U2Vzc2lvbjsKKyAgICBtRmx1c2hpbmcgPSBmYWxzZTsKKyAgICAqc2Vzc2lvbiA9IG5ld1Nlc3Npb247CisgICAgcmV0dXJuIEFDQU1FUkFfT0s7Cit9CisKK2NhbWVyYV9zdGF0dXNfdAorQ2FtZXJhRGV2aWNlOjpjYXB0dXJlTG9ja2VkKAorICAgICAgICBzcDxBQ2FtZXJhQ2FwdHVyZVNlc3Npb24+IHNlc3Npb24sCisgICAgICAgIC8qb3B0aW9uYWwqL0FDYW1lcmFDYXB0dXJlU2Vzc2lvbl9jYXB0dXJlQ2FsbGJhY2tzKiBjYnMsCisgICAgICAgIGludCBudW1SZXF1ZXN0cywgQUNhcHR1cmVSZXF1ZXN0KiogcmVxdWVzdHMsCisgICAgICAgIC8qb3B0aW9uYWwqL2ludCogY2FwdHVyZVNlcXVlbmNlSWQpIHsKKyAgICByZXR1cm4gc3VibWl0UmVxdWVzdHNMb2NrZWQoCisgICAgICAgICAgICBzZXNzaW9uLCBjYnMsIG51bVJlcXVlc3RzLCByZXF1ZXN0cywgY2FwdHVyZVNlcXVlbmNlSWQsIC8qaXNSZXBlYXRpbmcqL2ZhbHNlKTsKK30KKworY2FtZXJhX3N0YXR1c190CitDYW1lcmFEZXZpY2U6OnNldFJlcGVhdGluZ1JlcXVlc3RzTG9ja2VkKAorICAgICAgICBzcDxBQ2FtZXJhQ2FwdHVyZVNlc3Npb24+IHNlc3Npb24sCisgICAgICAgIC8qb3B0aW9uYWwqL0FDYW1lcmFDYXB0dXJlU2Vzc2lvbl9jYXB0dXJlQ2FsbGJhY2tzKiBjYnMsCisgICAgICAgIGludCBudW1SZXF1ZXN0cywgQUNhcHR1cmVSZXF1ZXN0KiogcmVxdWVzdHMsCisgICAgICAgIC8qb3B0aW9uYWwqL2ludCogY2FwdHVyZVNlcXVlbmNlSWQpIHsKKyAgICByZXR1cm4gc3VibWl0UmVxdWVzdHNMb2NrZWQoCisgICAgICAgICAgICBzZXNzaW9uLCBjYnMsIG51bVJlcXVlc3RzLCByZXF1ZXN0cywgY2FwdHVyZVNlcXVlbmNlSWQsIC8qaXNSZXBlYXRpbmcqL3RydWUpOworfQorCit2b2lkIGFkZFJlcXVlc3RTZXR0aW5nc01ldGFkYXRhKEFDYXB0dXJlUmVxdWVzdCAqYUNhcHR1cmVSZXF1ZXN0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcDxDYXB0dXJlUmVxdWVzdD4gJnJlcSkgeworICAgIENhbWVyYU1ldGFkYXRhIG1ldGFkYXRhQ29weSA9IGFDYXB0dXJlUmVxdWVzdC0+c2V0dGluZ3MtPmdldEludGVybmFsRGF0YSgpOworICAgIGNvbnN0IGNhbWVyYV9tZXRhZGF0YV90ICpjYW1lcmFfbWV0YWRhdGEgPSBtZXRhZGF0YUNvcHkuZ2V0QW5kTG9jaygpOworICAgIEhDYW1lcmFNZXRhZGF0YSBoQ2FtZXJhTWV0YWRhdGE7CisgICAgdXRpbHM6OmNvbnZlcnRUb0hpZGwoY2FtZXJhX21ldGFkYXRhLCAmaENhbWVyYU1ldGFkYXRhKTsKKyAgICBtZXRhZGF0YUNvcHkudW5sb2NrKGNhbWVyYV9tZXRhZGF0YSk7CisgICAgcmVxLT5tUGh5c2ljYWxDYW1lcmFTZXR0aW5ncy5yZXNpemUoMSk7CisgICAgcmVxLT5tUGh5c2ljYWxDYW1lcmFTZXR0aW5nc1swXS5zZXR0aW5ncy5tZXRhZGF0YShzdGQ6Om1vdmUoaENhbWVyYU1ldGFkYXRhKSk7Cit9CisKK2NhbWVyYV9zdGF0dXNfdAorQ2FtZXJhRGV2aWNlOjpzdWJtaXRSZXF1ZXN0c0xvY2tlZCgKKyAgICAgICAgc3A8QUNhbWVyYUNhcHR1cmVTZXNzaW9uPiBzZXNzaW9uLAorICAgICAgICAvKm9wdGlvbmFsKi9BQ2FtZXJhQ2FwdHVyZVNlc3Npb25fY2FwdHVyZUNhbGxiYWNrcyogY2JzLAorICAgICAgICBpbnQgbnVtUmVxdWVzdHMsIEFDYXB0dXJlUmVxdWVzdCoqIHJlcXVlc3RzLAorICAgICAgICAvKm9wdGlvbmFsKi9pbnQqIGNhcHR1cmVTZXF1ZW5jZUlkLAorICAgICAgICBib29sIGlzUmVwZWF0aW5nKSB7CisgICAgY2FtZXJhX3N0YXR1c190IHJldCA9IGNoZWNrQ2FtZXJhQ2xvc2VkT3JFcnJvckxvY2tlZCgpOworICAgIGlmIChyZXQgIT0gQUNBTUVSQV9PSykgeworICAgICAgICBBTE9HRSgiQ2FtZXJhICVzIHN1Ym1pdCBjYXB0dXJlIHJlcXVlc3QgZmFpbGVkISByZXQgJWQiLCBnZXRJZCgpLCByZXQpOworICAgICAgICByZXR1cm4gcmV0OworICAgIH0KKworICAgIC8vIEZvcm0gdHdvIHZlY3RvcnMgb2YgY2FwdHVyZSByZXF1ZXN0LCBvbmUgZm9yIGludGVybmFsIHRyYWNraW5nCisgICAgc3RkOjp2ZWN0b3I8ZnJhbWV3b3Jrczo6Y2FtZXJhc2VydmljZTo6ZGV2aWNlOjpWMl8wOjpDYXB0dXJlUmVxdWVzdD4gcmVxdWVzdExpc3Q7CisgICAgVmVjdG9yPHNwPENhcHR1cmVSZXF1ZXN0Pj4gcmVxdWVzdHNWOworICAgIHJlcXVlc3RzVi5zZXRDYXBhY2l0eShudW1SZXF1ZXN0cyk7CisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBudW1SZXF1ZXN0czsgaSsrKSB7CisgICAgICAgIHNwPENhcHR1cmVSZXF1ZXN0PiByZXE7CisgICAgICAgIHJldCA9IGFsbG9jYXRlQ2FwdHVyZVJlcXVlc3QocmVxdWVzdHNbaV0sIHJlcSk7CisgICAgICAgIC8vIFdlIG5lZWQgdG8gY2FsbCB0aGlzIG1ldGhvZCBzaW5jZSBhZnRlciBzdWJtaXRSZXF1ZXN0TGlzdCBpcyBjYWxsZWQsCisgICAgICAgIC8vIHRoZSByZXF1ZXN0IG1ldGFkYXRhIHF1ZXVlIG1pZ2h0IGhhdmUgcmVtb3ZlZCB0aGUgY2FwdHVyZSByZXF1ZXN0CisgICAgICAgIC8vIG1ldGFkYXRhLiBUaGVyZWZvcmUgd2Ugc2ltcGx5IGFkZCB0aGUgbWV0YWRhdGEgdG8gaXRzIHdyYXBwZXIgY2xhc3MsCisgICAgICAgIC8vIHNvIHRoYXQgaXQgY2FuIGJlIHJldHJpdmVkIGxhdGVyLgorICAgICAgICBhZGRSZXF1ZXN0U2V0dGluZ3NNZXRhZGF0YShyZXF1ZXN0c1tpXSwgcmVxKTsKKyAgICAgICAgaWYgKHJldCAhPSBBQ0FNRVJBX09LKSB7CisgICAgICAgICAgICBBTE9HRSgiQ29udmVydCBjYXB0dXJlIHJlcXVlc3QgdG8gaW50ZXJuYWwgZm9ybWF0IGZhaWx1cmUhIHJldCAlZCIsIHJldCk7CisgICAgICAgICAgICByZXR1cm4gcmV0OworICAgICAgICB9CisgICAgICAgIGlmIChyZXEtPm1DYXB0dXJlUmVxdWVzdC5zdHJlYW1BbmRXaW5kb3dJZHMuc2l6ZSgpID09IDApIHsKKyAgICAgICAgICAgIEFMT0dFKCJDYXB0dXJlIHJlcXVlc3Qgd2l0aG91dCBvdXRwdXQgdGFyZ2V0IGNhbm5vdCBiZSBzdWJtaXR0ZWQhIik7CisgICAgICAgICAgICByZXR1cm4gQUNBTUVSQV9FUlJPUl9JTlZBTElEX1BBUkFNRVRFUjsKKyAgICAgICAgfQorICAgICAgICByZXF1ZXN0TGlzdC5wdXNoX2JhY2sodXRpbHM6OmNvbnZlcnRUb0hpZGwocmVxLmdldCgpKSk7CisgICAgICAgIHJlcXVlc3RzVi5wdXNoX2JhY2socmVxKTsKKyAgICB9CisgICAgaWYgKGlzUmVwZWF0aW5nKSB7CisgICAgICAgIHJldCA9IHN0b3BSZXBlYXRpbmdMb2NrZWQoKTsKKyAgICAgICAgaWYgKHJldCAhPSBBQ0FNRVJBX09LKSB7CisgICAgICAgICAgICBBTE9HRSgiQ2FtZXJhICVzIHN0b3AgcmVwZWF0aW5nIGZhaWxlZCEgcmV0ICVkIiwgZ2V0SWQoKSwgcmV0KTsKKyAgICAgICAgICAgIHJldHVybiByZXQ7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBTdWJtaXRJbmZvIGluZm87CisgICAgU3RhdHVzIHN0YXR1czsKKyAgICBhdXRvIHJlbW90ZVJldCA9IG1SZW1vdGUtPnN1Ym1pdFJlcXVlc3RMaXN0KHJlcXVlc3RMaXN0LCBpc1JlcGVhdGluZywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFsmc3RhdHVzLCAmaW5mb10oYXV0byBzLCBhdXRvICZzdWJtaXRJbmZvKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdHVzID0gczsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbmZvID0gc3VibWl0SW5mbzsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pOworICAgIGlmICghcmVtb3RlUmV0LmlzT2soKSkgeworICAgICAgICBBTE9HRSgiJXM6IFRyYW5zYWN0aW9uIGVycm9yIGZvciBzdWJtaXRSZXF1ZXN0TGlzdCBjYWxsOiAlcyIsIF9fRlVOQ1RJT05fXywKKyAgICAgICAgICAgICAgcmVtb3RlUmV0LmRlc2NyaXB0aW9uKCkuY19zdHIoKSk7CisgICAgfQorICAgIGlmIChzdGF0dXMgIT0gU3RhdHVzOjpOT19FUlJPUikgeworICAgICAgICByZXR1cm4gdXRpbHM6OmNvbnZlcnRGcm9tSGlkbChzdGF0dXMpOworICAgIH0KKyAgICBpbnQzMl90IHNlcXVlbmNlSWQgPSBpbmZvLnJlcXVlc3RJZDsKKyAgICBpbnQ2NF90IGxhc3RGcmFtZU51bWJlciA9IGluZm8ubGFzdEZyYW1lTnVtYmVyOworICAgIGlmIChzZXF1ZW5jZUlkIDwgMCkgeworICAgICAgICBBTE9HRSgiQ2FtZXJhICVzIHN1Ym1pdCByZXF1ZXN0IHJlbW90ZSBmYWlsdXJlOiByZXQgJWQiLCBnZXRJZCgpLCBzZXF1ZW5jZUlkKTsKKyAgICAgICAgcmV0dXJuIEFDQU1FUkFfRVJST1JfVU5LTk9XTjsKKyAgICB9CisKKyAgICBDYWxsYmFja0hvbGRlciBjYkhvbGRlcihzZXNzaW9uLCByZXF1ZXN0c1YsIGlzUmVwZWF0aW5nLCBjYnMpOworICAgIG1TZXF1ZW5jZUNhbGxiYWNrTWFwLmluc2VydChzdGQ6Om1ha2VfcGFpcihzZXF1ZW5jZUlkLCBjYkhvbGRlcikpOworCisgICAgaWYgKGlzUmVwZWF0aW5nKSB7CisgICAgICAgIC8vIHN0b3BSZXBlYXRpbmcgYWJvdmUgc2hvdWxkIGhhdmUgY2xlYW51cCByZXBlYXRpbmcgc2VxdWVuY2UgaWQKKyAgICAgICAgaWYgKG1SZXBlYXRpbmdTZXF1ZW5jZUlkICE9IFJFUVVFU1RfSURfTk9ORSkgeworICAgICAgICAgICAgc2V0Q2FtZXJhRGV2aWNlRXJyb3JMb2NrZWQoQUNBTUVSQV9FUlJPUl9DQU1FUkFfREVWSUNFKTsKKyAgICAgICAgICAgIHJldHVybiBBQ0FNRVJBX0VSUk9SX0NBTUVSQV9ERVZJQ0U7CisgICAgICAgIH0KKyAgICAgICAgbVJlcGVhdGluZ1NlcXVlbmNlSWQgPSBzZXF1ZW5jZUlkOworICAgIH0gZWxzZSB7CisgICAgICAgIG1TZXF1ZW5jZUxhc3RGcmFtZU51bWJlck1hcC5pbnNlcnQoc3RkOjptYWtlX3BhaXIoc2VxdWVuY2VJZCwgbGFzdEZyYW1lTnVtYmVyKSk7CisgICAgfQorCisgICAgaWYgKG1JZGxlKSB7CisgICAgICAgIHNwPEFNZXNzYWdlPiBtc2cgPSBuZXcgQU1lc3NhZ2Uoa1doYXRTZXNzaW9uU3RhdGVDYiwgbUhhbmRsZXIpOworICAgICAgICBtc2ctPnNldFBvaW50ZXIoa0NvbnRleHRLZXksIHNlc3Npb24tPm1Vc2VyU2Vzc2lvbkNhbGxiYWNrLmNvbnRleHQpOworICAgICAgICBtc2ctPnNldE9iamVjdChrU2Vzc2lvblNwS2V5LCBzZXNzaW9uKTsKKyAgICAgICAgbXNnLT5zZXRQb2ludGVyKGtDYWxsYmFja0ZwS2V5LCAodm9pZCopIHNlc3Npb24tPm1Vc2VyU2Vzc2lvbkNhbGxiYWNrLm9uQWN0aXZlKTsKKyAgICAgICAgcG9zdFNlc3Npb25Nc2dBbmRDbGVhbnVwKG1zZyk7CisgICAgfQorICAgIG1JZGxlID0gZmFsc2U7CisgICAgbUJ1c3lTZXNzaW9uID0gc2Vzc2lvbjsKKworICAgIGlmIChjYXB0dXJlU2VxdWVuY2VJZCkgeworICAgICAgICAqY2FwdHVyZVNlcXVlbmNlSWQgPSBzZXF1ZW5jZUlkOworICAgIH0KKyAgICByZXR1cm4gQUNBTUVSQV9PSzsKK30KKworY2FtZXJhX3N0YXR1c190IENhbWVyYURldmljZTo6dXBkYXRlT3V0cHV0Q29uZmlndXJhdGlvbkxvY2tlZChBQ2FwdHVyZVNlc3Npb25PdXRwdXQgKm91dHB1dCkgeworICAgIGNhbWVyYV9zdGF0dXNfdCByZXQgPSBjaGVja0NhbWVyYUNsb3NlZE9yRXJyb3JMb2NrZWQoKTsKKyAgICBpZiAocmV0ICE9IEFDQU1FUkFfT0spIHsKKyAgICAgICAgcmV0dXJuIHJldDsKKyAgICB9CisKKyAgICBpZiAob3V0cHV0ID09IG51bGxwdHIpIHsKKyAgICAgICAgcmV0dXJuIEFDQU1FUkFfRVJST1JfSU5WQUxJRF9QQVJBTUVURVI7CisgICAgfQorCisgICAgaWYgKCFvdXRwdXQtPm1Jc1NoYXJlZCkgeworICAgICAgICBBTE9HRSgiRXJyb3Igb3V0cHV0IGNvbmZpZ3VyYXRpb24gaXMgbm90IHNoYXJlZCIpOworICAgICAgICByZXR1cm4gQUNBTUVSQV9FUlJPUl9JTlZBTElEX09QRVJBVElPTjsKKyAgICB9CisKKyAgICBpbnQzMl90IHN0cmVhbUlkID0gLTE7CisgICAgZm9yIChhdXRvJiBrdlBhaXIgOiBtQ29uZmlndXJlZE91dHB1dHMpIHsKKyAgICAgICAgaWYgKHV0aWxzOjppc1dpbmRvd05hdGl2ZUhhbmRsZUVxdWFsKGt2UGFpci5zZWNvbmQuZmlyc3QsIG91dHB1dC0+bVdpbmRvdykpIHsKKyAgICAgICAgICAgIHN0cmVhbUlkID0ga3ZQYWlyLmZpcnN0OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICB9CisgICAgaWYgKHN0cmVhbUlkIDwgMCkgeworICAgICAgICBBTE9HRSgiRXJyb3I6IEludmFsaWQgb3V0cHV0IGNvbmZpZ3VyYXRpb24iKTsKKyAgICAgICAgcmV0dXJuIEFDQU1FUkFfRVJST1JfSU5WQUxJRF9QQVJBTUVURVI7CisgICAgfQorCisgICAgT3V0cHV0Q29uZmlndXJhdGlvbldyYXBwZXIgb3V0Q29uZmlnVzsKKyAgICBPdXRwdXRDb25maWd1cmF0aW9uICZvdXRDb25maWcgPSBvdXRDb25maWdXLm1PdXRwdXRDb25maWd1cmF0aW9uOworICAgIG91dENvbmZpZy5yb3RhdGlvbiA9IHV0aWxzOjpjb252ZXJ0VG9IaWRsKG91dHB1dC0+bVJvdGF0aW9uKTsKKyAgICBvdXRDb25maWcud2luZG93R3JvdXBJZCA9IC0xOyAvLyBuZGsgZG9lc24ndCBzdXBwb3J0IGludGVyIE91dHB1dENvbmZpZ3VyYXRpb24gYnVmZmVyIHNoYXJpbmcuCisgICAgb3V0Q29uZmlnLndpbmRvd0hhbmRsZXMucmVzaXplKG91dHB1dC0+bVNoYXJlZFdpbmRvd3Muc2l6ZSgpICsgMSk7CisgICAgb3V0Q29uZmlnLndpbmRvd0hhbmRsZXNbMF0gPSBvdXRwdXQtPm1XaW5kb3c7CisgICAgaW50IGkgPSAxOworICAgIGZvciAoYXV0byYgYW53IDogb3V0cHV0LT5tU2hhcmVkV2luZG93cykgeworICAgICAgICBvdXRDb25maWcud2luZG93SGFuZGxlc1tpKytdID0gYW53OworICAgIH0KKworICAgIGF1dG8gcmVtb3RlUmV0ID0gbVJlbW90ZS0+dXBkYXRlT3V0cHV0Q29uZmlndXJhdGlvbihzdHJlYW1JZCwgb3V0Q29uZmlnKTsKKyAgICBpZiAoIXJlbW90ZVJldC5pc09rKCkpIHsKKyAgICAgICAgQUxPR0UoIiVzOiBUcmFuc2FjdGlvbiBlcnJvciBpbiB1cGRhdGluZyBPdXRwdXRDb25maWd1cmF0aW9uOiAlcyIsIF9fRlVOQ1RJT05fXywKKyAgICAgICAgICAgICAgcmVtb3RlUmV0LmRlc2NyaXB0aW9uKCkuY19zdHIoKSk7CisgICAgICAgIHJldHVybiBBQ0FNRVJBX0VSUk9SX1VOS05PV047CisgICAgfQorCisgICAgc3dpdGNoIChyZW1vdGVSZXQpIHsKKyAgICAgICAgICAgIGNhc2UgU3RhdHVzOjpOT19FUlJPUjoKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgU3RhdHVzOjpJTlZBTElEX09QRVJBVElPTjoKKyAgICAgICAgICAgICAgICBBTE9HRSgiQ2FtZXJhIGRldmljZSAlcyBpbnZhbGlkIG9wZXJhdGlvbiIsIGdldElkKCkpOworICAgICAgICAgICAgICAgIHJldHVybiBBQ0FNRVJBX0VSUk9SX0lOVkFMSURfT1BFUkFUSU9OOworICAgICAgICAgICAgY2FzZSBTdGF0dXM6OkFMUkVBRFlfRVhJU1RTOgorICAgICAgICAgICAgICAgIEFMT0dFKCJDYW1lcmEgZGV2aWNlICVzIG91dHB1dCBzdXJmYWNlIGFscmVhZHkgZXhpc3RzIiwgZ2V0SWQoKSk7CisgICAgICAgICAgICAgICAgcmV0dXJuIEFDQU1FUkFfRVJST1JfSU5WQUxJRF9QQVJBTUVURVI7CisgICAgICAgICAgICBjYXNlIFN0YXR1czo6SUxMRUdBTF9BUkdVTUVOVDoKKyAgICAgICAgICAgICAgICBBTE9HRSgiQ2FtZXJhIGRldmljZSAlcyBpbnZhbGlkIGlucHV0IGFyZ3VtZW50IiwgZ2V0SWQoKSk7CisgICAgICAgICAgICAgICAgcmV0dXJuIEFDQU1FUkFfRVJST1JfSU5WQUxJRF9QQVJBTUVURVI7CisgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgIEFMT0dFKCJDYW1lcmEgZGV2aWNlICVzIGZhaWxlZCB0byBhZGQgc2hhcmVkIG91dHB1dCIsIGdldElkKCkpOworICAgICAgICAgICAgICAgIHJldHVybiBBQ0FNRVJBX0VSUk9SX1VOS05PV047CisgICAgfQorCisgICAgbUNvbmZpZ3VyZWRPdXRwdXRzW3N0cmVhbUlkXSA9IHN0ZDo6bWFrZV9wYWlyKG91dHB1dC0+bVdpbmRvdywgb3V0Q29uZmlnVyk7CisKKyAgICByZXR1cm4gQUNBTUVSQV9PSzsKK30KKworY2FtZXJhX3N0YXR1c190CitDYW1lcmFEZXZpY2U6OmFsbG9jYXRlQ2FwdHVyZVJlcXVlc3QoCisgICAgICAgIGNvbnN0IEFDYXB0dXJlUmVxdWVzdCogcmVxdWVzdCwgLypvdXQqL3NwPENhcHR1cmVSZXF1ZXN0PiAmb3V0UmVxKSB7CisgICAgc3A8Q2FwdHVyZVJlcXVlc3Q+IHJlcShuZXcgQ2FwdHVyZVJlcXVlc3QoKSk7CisgICAgcmVxLT5tQ2FwdHVyZVJlcXVlc3QucGh5c2ljYWxDYW1lcmFTZXR0aW5ncy5yZXNpemUoMSk7CisgICAgcmVxLT5tQ2FwdHVyZVJlcXVlc3QucGh5c2ljYWxDYW1lcmFTZXR0aW5nc1swXS5pZCA9IG1DYW1lcmFJZDsKKyAgICAvLyBUT0RPOiBEbyB3ZSByZWFsbHkgbmVlZCB0byBjb3B5IHRoZSBtZXRhZGF0YSBoZXJlID8KKyAgICBDYW1lcmFNZXRhZGF0YSBtZXRhZGF0YUNvcHkgPSByZXF1ZXN0LT5zZXR0aW5ncy0+Z2V0SW50ZXJuYWxEYXRhKCk7CisgICAgY29uc3QgY2FtZXJhX21ldGFkYXRhX3QgKmNhbWVyYU1ldGFkYXRhID0gbWV0YWRhdGFDb3B5LmdldEFuZExvY2soKTsKKyAgICBIQ2FtZXJhTWV0YWRhdGEgaENhbWVyYU1ldGFkYXRhOworICAgIHV0aWxzOjpjb252ZXJ0VG9IaWRsKGNhbWVyYU1ldGFkYXRhLCAmaENhbWVyYU1ldGFkYXRhKTsKKyAgICBtZXRhZGF0YUNvcHkudW5sb2NrKGNhbWVyYU1ldGFkYXRhKTsKKyAgICBpZiAocmVxdWVzdC0+c2V0dGluZ3MgIT0gbnVsbHB0cikgeworICAgICAgICBpZiAoaENhbWVyYU1ldGFkYXRhLmRhdGEoKSAhPSBudWxscHRyICYmCisgICAgICAgICAgICBtQ2FwdHVyZVJlcXVlc3RNZXRhZGF0YVF1ZXVlICE9IG51bGxwdHIgJiYKKyAgICAgICAgICAgIG1DYXB0dXJlUmVxdWVzdE1ldGFkYXRhUXVldWUtPndyaXRlKAorICAgICAgICAgICAgICAgIHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdWludDhfdCAqPihoQ2FtZXJhTWV0YWRhdGEuZGF0YSgpKSwKKyAgICAgICAgICAgICAgICBoQ2FtZXJhTWV0YWRhdGEuc2l6ZSgpKSkgeworICAgICAgICAgICAgLy8gVGhlIG1ldGFkYXRhIGZpZWxkIG9mIHRoZSB1bmlvbiB3b3VsZCd2ZSBiZWVuIGRlc3RydWN0dWVkLCBzbyBubyBuZWVkCisgICAgICAgICAgICAvLyB0byByZS1zaXplIGl0LgorICAgICAgICAgICAgcmVxLT5tQ2FwdHVyZVJlcXVlc3QucGh5c2ljYWxDYW1lcmFTZXR0aW5nc1swXS5zZXR0aW5ncy5mbXFNZXRhZGF0YVNpemUoCisgICAgICAgICAgICAgICAgaENhbWVyYU1ldGFkYXRhLnNpemUoKSk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBBTE9HRSgiRm1xIHdyaXRlIGNhcHR1cmUgcmVzdWx0IGZhaWxlZCwgZmFsbGluZyBiYWNrIHRvIGh3YmluZGVyIik7CisgICAgICAgICAgICByZXEtPm1DYXB0dXJlUmVxdWVzdC5waHlzaWNhbENhbWVyYVNldHRpbmdzWzBdLnNldHRpbmdzLm1ldGFkYXRhKAorICAgICAgICAgICAgICAgIHN0ZDo6bW92ZShoQ2FtZXJhTWV0YWRhdGEpKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHN0ZDo6dmVjdG9yPGludDMyX3Q+IHJlcXVlc3RTdHJlYW1JZHhMaXN0OworICAgIHN0ZDo6dmVjdG9yPGludDMyX3Q+IHJlcXVlc3RTdXJmYWNlSWR4TGlzdDsKKyAgICBmb3IgKGF1dG8gb3V0cHV0VGFyZ2V0IDogcmVxdWVzdC0+dGFyZ2V0cy0+bU91dHB1dHMpIHsKKyAgICAgICAgbmF0aXZlX2hhbmRsZV90KiBhbncgPSBvdXRwdXRUYXJnZXQubVdpbmRvdzsKKyAgICAgICAgYm9vbCBmb3VuZCA9IGZhbHNlOworICAgICAgICByZXEtPm1TdXJmYWNlTGlzdC5wdXNoX2JhY2soYW53KTsKKyAgICAgICAgLy8gbG9va3VwIHN0cmVhbS9zdXJmYWNlIElECisgICAgICAgIGZvciAoY29uc3QgYXV0byYga3ZQYWlyIDogbUNvbmZpZ3VyZWRPdXRwdXRzKSB7CisgICAgICAgICAgICBpbnQgc3RyZWFtSWQgPSBrdlBhaXIuZmlyc3Q7CisgICAgICAgICAgICBjb25zdCBPdXRwdXRDb25maWd1cmF0aW9uV3JhcHBlciYgb3V0Q29uZmlnID0ga3ZQYWlyLnNlY29uZC5zZWNvbmQ7CisgICAgICAgICAgICBjb25zdCBhdXRvJiB3aW5kb3dIYW5kbGVzID0gb3V0Q29uZmlnLm1PdXRwdXRDb25maWd1cmF0aW9uLndpbmRvd0hhbmRsZXM7CisgICAgICAgICAgICBmb3IgKGludCBzdXJmYWNlSWQgPSAwOyBzdXJmYWNlSWQgPCAoaW50KSB3aW5kb3dIYW5kbGVzLnNpemUoKTsgc3VyZmFjZUlkKyspIHsKKyAgICAgICAgICAgICAgICAvLyBJZiB0d28gbmF0aXZlIGhhbmRsZXMgYXJlIGVxdWl2YWxlbnQsIHNvIGFyZSB0aGVpciBzdXJmYWNlcy4KKyAgICAgICAgICAgICAgICBpZiAodXRpbHM6OmlzV2luZG93TmF0aXZlSGFuZGxlRXF1YWwod2luZG93SGFuZGxlc1tzdXJmYWNlSWRdLmdldE5hdGl2ZUhhbmRsZSgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYW53KSkgeworICAgICAgICAgICAgICAgICAgICBmb3VuZCA9IHRydWU7CisgICAgICAgICAgICAgICAgICAgIHJlcXVlc3RTdHJlYW1JZHhMaXN0LnB1c2hfYmFjayhzdHJlYW1JZCk7CisgICAgICAgICAgICAgICAgICAgIHJlcXVlc3RTdXJmYWNlSWR4TGlzdC5wdXNoX2JhY2soc3VyZmFjZUlkKTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKGZvdW5kKSB7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgaWYgKCFmb3VuZCkgeworICAgICAgICAgICAgQUxPR0UoIlVuY29uZmlndXJlZCBvdXRwdXQgdGFyZ2V0ICVwIGluIGNhcHR1cmUgcmVxdWVzdCEiLCBhbncpOworICAgICAgICAgICAgcmV0dXJuIEFDQU1FUkFfRVJST1JfSU5WQUxJRF9QQVJBTUVURVI7CisgICAgICAgIH0KKyAgICB9CisgICAgcmVxLT5tQ2FwdHVyZVJlcXVlc3Quc3RyZWFtQW5kV2luZG93SWRzLnJlc2l6ZShyZXF1ZXN0U3RyZWFtSWR4TGlzdC5zaXplKCkpOworICAgIGZvciAoaW50IGkgPSAwOyBpIDwgcmVxdWVzdFN0cmVhbUlkeExpc3Quc2l6ZSgpOyBpKyspIHsKKyAgICAgICAgcmVxLT5tQ2FwdHVyZVJlcXVlc3Quc3RyZWFtQW5kV2luZG93SWRzW2ldLnN0cmVhbUlkID0gcmVxdWVzdFN0cmVhbUlkeExpc3RbaV07CisgICAgICAgIHJlcS0+bUNhcHR1cmVSZXF1ZXN0LnN0cmVhbUFuZFdpbmRvd0lkc1tpXS53aW5kb3dJZCA9IHJlcXVlc3RTdXJmYWNlSWR4TGlzdFtpXTsKKyAgICB9CisgICAgb3V0UmVxID0gcmVxOworICAgIHJldHVybiBBQ0FNRVJBX09LOworfQorCitBQ2FwdHVyZVJlcXVlc3QqCitDYW1lcmFEZXZpY2U6OmFsbG9jYXRlQUNhcHR1cmVSZXF1ZXN0KHNwPENhcHR1cmVSZXF1ZXN0PiYgcmVxKSB7CisgICAgQUNhcHR1cmVSZXF1ZXN0KiBwUmVxdWVzdCA9IG5ldyBBQ2FwdHVyZVJlcXVlc3QoKTsKKyAgICBDYW1lcmFNZXRhZGF0YSBjbG9uZTsKKyAgICB1dGlsczo6Y29udmVydEZyb21IaWRsQ2xvbmVkKHJlcS0+bVBoeXNpY2FsQ2FtZXJhU2V0dGluZ3NbMF0uc2V0dGluZ3MubWV0YWRhdGEoKSwgJmNsb25lKTsKKyAgICBwUmVxdWVzdC0+c2V0dGluZ3MgPSBuZXcgQUNhbWVyYU1ldGFkYXRhKGNsb25lLnJlbGVhc2UoKSwgQUNhbWVyYU1ldGFkYXRhOjpBQ01fUkVRVUVTVCk7CisgICAgcFJlcXVlc3QtPnRhcmdldHMgID0gbmV3IEFDYW1lcmFPdXRwdXRUYXJnZXRzKCk7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCByZXEtPm1TdXJmYWNlTGlzdC5zaXplKCk7IGkrKykgeworICAgICAgICBuYXRpdmVfaGFuZGxlX3QqIGFudyA9IHJlcS0+bVN1cmZhY2VMaXN0W2ldOworICAgICAgICBBQ2FtZXJhT3V0cHV0VGFyZ2V0IG91dHB1dFRhcmdldChhbncpOworICAgICAgICBwUmVxdWVzdC0+dGFyZ2V0cy0+bU91dHB1dHMuaW5zZXJ0KG91dHB1dFRhcmdldCk7CisgICAgfQorICAgIHJldHVybiBwUmVxdWVzdDsKK30KKwordm9pZAorQ2FtZXJhRGV2aWNlOjpmcmVlQUNhcHR1cmVSZXF1ZXN0KEFDYXB0dXJlUmVxdWVzdCogcmVxKSB7CisgICAgaWYgKHJlcSA9PSBudWxscHRyKSB7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgcmVxLT5zZXR0aW5ncy5jbGVhcigpOworICAgIGRlbGV0ZSByZXEtPnRhcmdldHM7CisgICAgZGVsZXRlIHJlcTsKK30KKwordm9pZAorQ2FtZXJhRGV2aWNlOjpub3RpZnlTZXNzaW9uRW5kT2ZMaWZlTG9ja2VkKEFDYW1lcmFDYXB0dXJlU2Vzc2lvbiogc2Vzc2lvbikgeworICAgIGlmIChpc0Nsb3NlZCgpKSB7CisgICAgICAgIC8vIERldmljZSBpcyBjbG9zaW5nIGFscmVhZHkuIGRvIG5vdGhpbmcKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmIChtQ3VycmVudFNlc3Npb24gIT0gc2Vzc2lvbikgeworICAgICAgICAvLyBTZXNzaW9uIGhhcyBiZWVuIHJlcGxhY2VkIGJ5IG90aGVyIHNlZXNpb24gb3IgZGV2aWNlIGlzIGNsb3NlZAorICAgICAgICByZXR1cm47CisgICAgfQorICAgIG1DdXJyZW50U2Vzc2lvbiA9IG51bGxwdHI7CisKKyAgICAvLyBTaG91bGQgbm90IGhhcHBlbgorICAgIGlmICghc2Vzc2lvbi0+bUlzQ2xvc2VkKSB7CisgICAgICAgIEFMT0dFKCJFcnJvcjogdW5jbG9zZWQgc2Vzc2lvbiAlcCByZWFjaGVzIGVuZCBvZiBsaWZlISIsIHNlc3Npb24pOworICAgICAgICBzZXRDYW1lcmFEZXZpY2VFcnJvckxvY2tlZChBQ0FNRVJBX0VSUk9SX0NBTUVSQV9ERVZJQ0UpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgLy8gTm8gbmV3IHNlc3Npb24sIHVuY29uZmlndXJlIG5vdworICAgIGNhbWVyYV9zdGF0dXNfdCByZXQgPSBjb25maWd1cmVTdHJlYW1zTG9ja2VkKG51bGxwdHIsIG51bGxwdHIpOworICAgIGlmIChyZXQgIT0gQUNBTUVSQV9PSykgeworICAgICAgICBBTE9HRSgiVW5jb25maWd1cmUgc3RyZWFtIGZhaWxlZC4gRGV2aWNlIG1pZ2h0IHN0aWxsIGJlIGNvbmZpZ3VyZWQhIHJldCAlZCIsIHJldCk7CisgICAgfQorfQorCit2b2lkCitDYW1lcmFEZXZpY2U6OmRpc2Nvbm5lY3RMb2NrZWQoc3A8QUNhbWVyYUNhcHR1cmVTZXNzaW9uPiYgc2Vzc2lvbikgeworICAgIGlmIChtQ2xvc2luZy5leGNoYW5nZSh0cnVlKSkgeworICAgICAgICAvLyBBbHJlYWR5IGNsb3NpbmcsIGp1c3QgcmV0dXJuCisgICAgICAgIEFMT0dXKCJDYW1lcmEgZGV2aWNlICVzIGlzIGFscmVhZHkgY2xvc2luZy4iLCBnZXRJZCgpKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmIChtUmVtb3RlICE9IG51bGxwdHIpIHsKKyAgICAgICAgYXV0byByZXQgPSBtUmVtb3RlLT5kaXNjb25uZWN0KCk7CisgICAgICAgIGlmICghcmV0LmlzT2soKSkgeworICAgICAgICAgICAgQUxPR0UoIiVzOiBUcmFuc2FjdGlvbiBlcnJvciB3aGlsZSBkaXNjb25uZWN0aW5nIGRldmljZSAlcyIsIF9fRlVOQ1RJT05fXywKKyAgICAgICAgICAgICAgICAgIHJldC5kZXNjcmlwdGlvbigpLmNfc3RyKCkpOworICAgICAgICB9CisgICAgfQorICAgIG1SZW1vdGUgPSBudWxscHRyOworCisgICAgaWYgKHNlc3Npb24gIT0gbnVsbHB0cikgeworICAgICAgICBzZXNzaW9uLT5jbG9zZUJ5RGV2aWNlKCk7CisgICAgfQorfQorCitjYW1lcmFfc3RhdHVzX3QKK0NhbWVyYURldmljZTo6c3RvcFJlcGVhdGluZ0xvY2tlZCgpIHsKKyAgICBjYW1lcmFfc3RhdHVzX3QgcmV0ID0gY2hlY2tDYW1lcmFDbG9zZWRPckVycm9yTG9ja2VkKCk7CisgICAgaWYgKHJldCAhPSBBQ0FNRVJBX09LKSB7CisgICAgICAgIEFMT0dFKCJDYW1lcmEgJXMgc3RvcCByZXBlYXRpbmcgZmFpbGVkISByZXQgJWQiLCBnZXRJZCgpLCByZXQpOworICAgICAgICByZXR1cm4gcmV0OworICAgIH0KKyAgICBpZiAobVJlcGVhdGluZ1NlcXVlbmNlSWQgIT0gUkVRVUVTVF9JRF9OT05FKSB7CisgICAgICAgIGludCByZXBlYXRpbmdTZXF1ZW5jZUlkID0gbVJlcGVhdGluZ1NlcXVlbmNlSWQ7CisgICAgICAgIG1SZXBlYXRpbmdTZXF1ZW5jZUlkID0gUkVRVUVTVF9JRF9OT05FOworCisgICAgICAgIGludDY0X3QgbGFzdEZyYW1lTnVtYmVyOworICAgICAgICBTdGF0dXMgc3RhdHVzID0gU3RhdHVzOjpOT19FUlJPUjsKKyAgICAgICAgYXV0byByZW1vdGVSZXQgPSBtUmVtb3RlLT5jYW5jZWxSZXBlYXRpbmdSZXF1ZXN0KAorICAgICAgICAgICAgICAgIFsmc3RhdHVzLCAmbGFzdEZyYW1lTnVtYmVyXShTdGF0dXMgcywgYXV0byBmcmFtZU51bWJlcikgeworICAgICAgICAgICAgICAgICAgICBzdGF0dXMgPSBzOworICAgICAgICAgICAgICAgICAgICBsYXN0RnJhbWVOdW1iZXIgPSBmcmFtZU51bWJlcjsKKyAgICAgICAgICAgICAgICB9KTsKKyAgICAgICAgaWYgKCFyZW1vdGVSZXQuaXNPaygpIHx8IHN0YXR1cyAhPSBTdGF0dXM6Ok5PX0VSUk9SKSB7CisgICAgICAgICAgICBBTE9HRSgiJXM6IFVuYWJsZSB0byBjYW5jZWwgYWN0aXZlIHJlcGVhdGluZyByZXF1ZXN0IiwgX19GVU5DVElPTl9fKTsKKyAgICAgICAgICAgIHJldHVybiB1dGlsczo6Y29udmVydEZyb21IaWRsKHN0YXR1cyk7CisgICAgICAgIH0KKyAgICAgICAgY2hlY2tSZXBlYXRpbmdTZXF1ZW5jZUNvbXBsZXRlTG9ja2VkKHJlcGVhdGluZ1NlcXVlbmNlSWQsIGxhc3RGcmFtZU51bWJlcik7CisgICAgfQorICAgIHJldHVybiBBQ0FNRVJBX09LOworfQorCitjYW1lcmFfc3RhdHVzX3QKK0NhbWVyYURldmljZTo6Zmx1c2hMb2NrZWQoQUNhbWVyYUNhcHR1cmVTZXNzaW9uKiBzZXNzaW9uKSB7CisgICAgY2FtZXJhX3N0YXR1c190IHJldCA9IGNoZWNrQ2FtZXJhQ2xvc2VkT3JFcnJvckxvY2tlZCgpOworICAgIGlmIChyZXQgIT0gQUNBTUVSQV9PSykgeworICAgICAgICBBTE9HRSgiQ2FtZXJhICVzIGFib3J0IGNhcHR1cmVzIGZhaWxlZCEgcmV0ICVkIiwgZ2V0SWQoKSwgcmV0KTsKKyAgICAgICAgcmV0dXJuIHJldDsKKyAgICB9CisKKyAgICAvLyBUaGlzIHNob3VsZCBuZXZlciBoYXBwZW4gYmVjYXVzZSBjcmVhdGluZyBhIG5ldyBzZXNzaW9uIHdpbGwgY2xvc2UKKyAgICAvLyBwcmV2aW91cyBvbmUgYW5kIHRodXMgcmVqZWN0IGFueSBBUEkgY2FsbCBmcm9tIHByZXZpb3VzIHNlc3Npb24uCisgICAgLy8gQnV0IHN0aWxsIGdvb2QgdG8gY2hlY2sgaGVyZSBpbiBjYXNlIHNvbWV0aGluZyB1bmV4cGVjdGVkIGhhcHBlbi4KKyAgICBpZiAobUN1cnJlbnRTZXNzaW9uICE9IHNlc3Npb24pIHsKKyAgICAgICAgQUxPR0UoIkNhbWVyYSAlcyBzZXNzaW9uICVwIGlzIG5vdCBjdXJyZW50IGFjdGl2ZSBzZXNzaW9uISIsIGdldElkKCksIHNlc3Npb24pOworICAgICAgICByZXR1cm4gQUNBTUVSQV9FUlJPUl9JTlZBTElEX09QRVJBVElPTjsKKyAgICB9CisKKyAgICBpZiAobUZsdXNoaW5nKSB7CisgICAgICAgIEFMT0dXKCJDYW1lcmEgJXMgaXMgYWxyZWFkeSBhYm9ydGluZyBjYXB0dXJlcyIsIGdldElkKCkpOworICAgICAgICByZXR1cm4gQUNBTUVSQV9PSzsKKyAgICB9CisKKyAgICBtRmx1c2hpbmcgPSB0cnVlOworCisgICAgLy8gU2VuZCBvbkFjdGl2ZSBjYWxsYmFjayB0byBndWFyYW50ZWUgdGhlcmUgaXMgYWx3YXlzIGFjdGl2ZS0+cmVhZHkgdHJhbnNpdGlvbgorICAgIHNwPEFNZXNzYWdlPiBtc2cgPSBuZXcgQU1lc3NhZ2Uoa1doYXRTZXNzaW9uU3RhdGVDYiwgbUhhbmRsZXIpOworICAgIG1zZy0+c2V0UG9pbnRlcihrQ29udGV4dEtleSwgc2Vzc2lvbi0+bVVzZXJTZXNzaW9uQ2FsbGJhY2suY29udGV4dCk7CisgICAgbXNnLT5zZXRPYmplY3Qoa1Nlc3Npb25TcEtleSwgc2Vzc2lvbik7CisgICAgbXNnLT5zZXRQb2ludGVyKGtDYWxsYmFja0ZwS2V5LCAodm9pZCopIHNlc3Npb24tPm1Vc2VyU2Vzc2lvbkNhbGxiYWNrLm9uQWN0aXZlKTsKKyAgICBwb3N0U2Vzc2lvbk1zZ0FuZENsZWFudXAobXNnKTsKKworICAgIC8vIElmIGRldmljZSBpcyBhbHJlYWR5IGlkbGluZywgc2VuZCBjYWxsYmFjayBhbmQgZXhpdCBlYXJseQorICAgIGlmIChtSWRsZSkgeworICAgICAgICBzcDxBTWVzc2FnZT4gbXNnID0gbmV3IEFNZXNzYWdlKGtXaGF0U2Vzc2lvblN0YXRlQ2IsIG1IYW5kbGVyKTsKKyAgICAgICAgbXNnLT5zZXRQb2ludGVyKGtDb250ZXh0S2V5LCBzZXNzaW9uLT5tVXNlclNlc3Npb25DYWxsYmFjay5jb250ZXh0KTsKKyAgICAgICAgbXNnLT5zZXRPYmplY3Qoa1Nlc3Npb25TcEtleSwgc2Vzc2lvbik7CisgICAgICAgIG1zZy0+c2V0UG9pbnRlcihrQ2FsbGJhY2tGcEtleSwgKHZvaWQqKSBzZXNzaW9uLT5tVXNlclNlc3Npb25DYWxsYmFjay5vblJlYWR5KTsKKyAgICAgICAgcG9zdFNlc3Npb25Nc2dBbmRDbGVhbnVwKG1zZyk7CisgICAgICAgIG1GbHVzaGluZyA9IGZhbHNlOworICAgICAgICByZXR1cm4gQUNBTUVSQV9PSzsKKyAgICB9CisKKyAgICBpbnQ2NF90IGxhc3RGcmFtZU51bWJlcjsKKyAgICBTdGF0dXMgc3RhdHVzOworICAgIGF1dG8gcmVtb3RlUmV0ID0gbVJlbW90ZS0+Zmx1c2goWyZzdGF0dXMsICZsYXN0RnJhbWVOdW1iZXJdKGF1dG8gcywgYXV0byBmcmFtZU51bWJlcikgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXR1cyA9IHM7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGFzdEZyYW1lTnVtYmVyID0gZnJhbWVOdW1iZXI7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTsKKyAgICBpZiAoIXJlbW90ZVJldC5pc09rKCkgfHwgc3RhdHVzICE9IFN0YXR1czo6Tk9fRVJST1IpIHsKKyAgICAgICAgQUxPR0UoIiVzOiBBYm9ydCBjYXB0dXJlcyBmYWlsZWQiLCBfX0ZVTkNUSU9OX18pOworICAgICAgICByZXR1cm4gdXRpbHM6OmNvbnZlcnRGcm9tSGlkbChzdGF0dXMpOworICAgIH0KKyAgICBpZiAobVJlcGVhdGluZ1NlcXVlbmNlSWQgIT0gUkVRVUVTVF9JRF9OT05FKSB7CisgICAgICAgIGNoZWNrUmVwZWF0aW5nU2VxdWVuY2VDb21wbGV0ZUxvY2tlZChtUmVwZWF0aW5nU2VxdWVuY2VJZCwgbGFzdEZyYW1lTnVtYmVyKTsKKyAgICB9CisgICAgcmV0dXJuIEFDQU1FUkFfT0s7Cit9CisKK2NhbWVyYV9zdGF0dXNfdAorQ2FtZXJhRGV2aWNlOjp3YWl0VW50aWxJZGxlTG9ja2VkKCkgeworICAgIGNhbWVyYV9zdGF0dXNfdCByZXQgPSBjaGVja0NhbWVyYUNsb3NlZE9yRXJyb3JMb2NrZWQoKTsKKyAgICBpZiAocmV0ICE9IEFDQU1FUkFfT0spIHsKKyAgICAgICAgQUxPR0UoIldhaXQgdW50aWwgY2FtZXJhICVzIGlkbGUgZmFpbGVkISByZXQgJWQiLCBnZXRJZCgpLCByZXQpOworICAgICAgICByZXR1cm4gcmV0OworICAgIH0KKworICAgIGlmIChtUmVwZWF0aW5nU2VxdWVuY2VJZCAhPSBSRVFVRVNUX0lEX05PTkUpIHsKKyAgICAgICAgQUxPR0UoIkNhbWVyYSBkZXZpY2UgJXMgd29uJ3QgZ28gdG8gaWRsZSB3aGVuIHRoZXJlIGlzIHJlcGVhdGluZyByZXF1ZXN0ISIsIGdldElkKCkpOworICAgICAgICByZXR1cm4gQUNBTUVSQV9FUlJPUl9JTlZBTElEX09QRVJBVElPTjsKKyAgICB9CisKKyAgICBhdXRvIHJlbW90ZVJldCA9IG1SZW1vdGUtPndhaXRVbnRpbElkbGUoKTsKKyAgICBpZiAoIXJlbW90ZVJldC5pc09rKCkpIHsKKyAgICAgICAgQUxPR0UoIiVzOiBUcmFuc2FjdGlvbiB3YWl0VW50aWxJZGxlIGZhaWxlZCIsIF9fRlVOQ1RJT05fXyk7CisgICAgICAgIHJldHVybiB1dGlsczo6Y29udmVydEZyb21IaWRsKHJlbW90ZVJldCk7CisgICAgfQorICAgIHJldHVybiBBQ0FNRVJBX09LOworfQorCitjYW1lcmFfc3RhdHVzX3QKK0NhbWVyYURldmljZTo6Y29uZmlndXJlU3RyZWFtc0xvY2tlZChjb25zdCBBQ2FwdHVyZVNlc3Npb25PdXRwdXRDb250YWluZXIqIG91dHB1dHMsCisgICAgICAgIGNvbnN0IEFDYXB0dXJlUmVxdWVzdCogc2Vzc2lvblBhcmFtZXRlcnMpIHsKKyAgICBBQ2FwdHVyZVNlc3Npb25PdXRwdXRDb250YWluZXIgZW1wdHlPdXRwdXQ7CisgICAgaWYgKG91dHB1dHMgPT0gbnVsbHB0cikgeworICAgICAgICBvdXRwdXRzID0gJmVtcHR5T3V0cHV0OworICAgIH0KKworICAgIGNhbWVyYV9zdGF0dXNfdCByZXQgPSBjaGVja0NhbWVyYUNsb3NlZE9yRXJyb3JMb2NrZWQoKTsKKyAgICBpZiAocmV0ICE9IEFDQU1FUkFfT0spIHsKKyAgICAgICAgcmV0dXJuIHJldDsKKyAgICB9CisKKyAgICBzdGQ6OnNldDxzdGQ6OnBhaXI8bmF0aXZlX2hhbmRsZV9wdHJfd3JhcHBlciwgT3V0cHV0Q29uZmlndXJhdGlvbldyYXBwZXI+PiBvdXRwdXRTZXQ7CisgICAgZm9yIChhdXRvIG91dENvbmZpZyA6IG91dHB1dHMtPm1PdXRwdXRzKSB7CisgICAgICAgIG5hdGl2ZV9oYW5kbGVfdCogYW53ID0gb3V0Q29uZmlnLm1XaW5kb3c7CisgICAgICAgIE91dHB1dENvbmZpZ3VyYXRpb25XcmFwcGVyIG91dENvbmZpZ0luc2VydFc7CisgICAgICAgIE91dHB1dENvbmZpZ3VyYXRpb24gJm91dENvbmZpZ0luc2VydCA9IG91dENvbmZpZ0luc2VydFcubU91dHB1dENvbmZpZ3VyYXRpb247CisgICAgICAgIG91dENvbmZpZ0luc2VydC5yb3RhdGlvbiA9IHV0aWxzOjpjb252ZXJ0VG9IaWRsKG91dENvbmZpZy5tUm90YXRpb24pOworICAgICAgICBvdXRDb25maWdJbnNlcnQud2luZG93R3JvdXBJZCA9IC0xOworICAgICAgICBvdXRDb25maWdJbnNlcnQud2luZG93SGFuZGxlcy5yZXNpemUob3V0Q29uZmlnLm1TaGFyZWRXaW5kb3dzLnNpemUoKSArIDEpOworICAgICAgICBvdXRDb25maWdJbnNlcnQud2luZG93SGFuZGxlc1swXSA9IGFudzsKKyAgICAgICAgbmF0aXZlX2hhbmRsZV9wdHJfd3JhcHBlciB3cmFwKGFudyk7CisgICAgICAgIG91dHB1dFNldC5pbnNlcnQoc3RkOjptYWtlX3BhaXIoYW53LCBvdXRDb25maWdJbnNlcnRXKSk7CisgICAgfQorICAgIHN0ZDo6c2V0PHN0ZDo6cGFpcjxuYXRpdmVfaGFuZGxlX3B0cl93cmFwcGVyLCBPdXRwdXRDb25maWd1cmF0aW9uV3JhcHBlcj4+IGFkZFNldCA9IG91dHB1dFNldDsKKyAgICBzdGQ6OnZlY3RvcjxpbnQzMl90PiBkZWxldGVMaXN0OworCisgICAgLy8gRGV0ZXJtaW5lIHdoaWNoIHN0cmVhbXMgbmVlZCB0byBiZSBjcmVhdGVkLCB3aGljaCB0byBiZSBkZWxldGVkCisgICAgZm9yIChhdXRvJiBrdlBhaXIgOiBtQ29uZmlndXJlZE91dHB1dHMpIHsKKyAgICAgICAgaW50MzJfdCBzdHJlYW1JZCA9IGt2UGFpci5maXJzdDsKKyAgICAgICAgYXV0byYgb3V0cHV0UGFpciA9IGt2UGFpci5zZWNvbmQ7CisgICAgICAgIGlmIChvdXRwdXRTZXQuY291bnQob3V0cHV0UGFpcikpIHsKKyAgICAgICAgICAgIGRlbGV0ZUxpc3QucHVzaF9iYWNrKHN0cmVhbUlkKTsgLy8gTmVlZCB0byBkZWxldGUgYSBubyBsb25nZXIgbmVlZGVkIHN0cmVhbQorICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgYWRkU2V0LmVyYXNlKG91dHB1dFBhaXIpOyAgICAgICAgLy8gTm8gbmVlZCB0byBhZGQgYWxyZWFkeSBleGlzdGluZyBzdHJlYW0KKyAgICAgICAgfQorICAgIH0KKworICAgIHJldCA9IHN0b3BSZXBlYXRpbmdMb2NrZWQoKTsKKyAgICBpZiAocmV0ICE9IEFDQU1FUkFfT0spIHsKKyAgICAgICAgQUxPR0UoIkNhbWVyYSBkZXZpY2UgJXMgc3RvcCByZXBlYXRpbmcgZmFpbGVkLCByZXQgJWQiLCBnZXRJZCgpLCByZXQpOworICAgICAgICByZXR1cm4gcmV0OworICAgIH0KKworICAgIHJldCA9IHdhaXRVbnRpbElkbGVMb2NrZWQoKTsKKyAgICBpZiAocmV0ICE9IEFDQU1FUkFfT0spIHsKKyAgICAgICAgQUxPR0UoIkNhbWVyYSBkZXZpY2UgJXMgd2FpdCB1bnRpbCBpZGxlIGZhaWxlZCwgcmV0ICVkIiwgZ2V0SWQoKSwgcmV0KTsKKyAgICAgICAgcmV0dXJuIHJldDsKKyAgICB9CisKKyAgICAvLyBTZW5kIG9uUmVhZHkgdG8gcHJldmlvdXMgc2Vzc2lvbgorICAgIC8vIEN1cnJlbnRTZXNzaW9uIHdpbGwgYmUgdXBkYXRlZCBhZnRlciBjb25maWd1cmVTdHJlYW1Mb2NrZWQsIHNvIGhlcmUKKyAgICAvLyBtQ3VycmVudFNlc3Npb24gaXMgdGhlIHNlc3Npb24gdG8gYmUgcmVwbGFjZWQgYnkgYSBuZXcgc2Vzc2lvbgorICAgIGlmICghbUlkbGUgJiYgbUN1cnJlbnRTZXNzaW9uICE9IG51bGxwdHIpIHsKKyAgICAgICAgaWYgKG1CdXN5U2Vzc2lvbiAhPSBtQ3VycmVudFNlc3Npb24pIHsKKyAgICAgICAgICAgIEFMT0dFKCJDdXJyZW50IHNlc3Npb24gIT0gYnVzeSBzZXNzaW9uIik7CisgICAgICAgICAgICBzZXRDYW1lcmFEZXZpY2VFcnJvckxvY2tlZChBQ0FNRVJBX0VSUk9SX0NBTUVSQV9ERVZJQ0UpOworICAgICAgICAgICAgcmV0dXJuIEFDQU1FUkFfRVJST1JfQ0FNRVJBX0RFVklDRTsKKyAgICAgICAgfQorICAgICAgICBzcDxBTWVzc2FnZT4gbXNnID0gbmV3IEFNZXNzYWdlKGtXaGF0U2Vzc2lvblN0YXRlQ2IsIG1IYW5kbGVyKTsKKyAgICAgICAgbXNnLT5zZXRQb2ludGVyKGtDb250ZXh0S2V5LCBtQnVzeVNlc3Npb24tPm1Vc2VyU2Vzc2lvbkNhbGxiYWNrLmNvbnRleHQpOworICAgICAgICBtc2ctPnNldE9iamVjdChrU2Vzc2lvblNwS2V5LCBtQnVzeVNlc3Npb24pOworICAgICAgICBtc2ctPnNldFBvaW50ZXIoa0NhbGxiYWNrRnBLZXksICh2b2lkKikgbUJ1c3lTZXNzaW9uLT5tVXNlclNlc3Npb25DYWxsYmFjay5vblJlYWR5KTsKKyAgICAgICAgbUJ1c3lTZXNzaW9uLmNsZWFyKCk7CisgICAgICAgIHBvc3RTZXNzaW9uTXNnQW5kQ2xlYW51cChtc2cpOworICAgIH0KKyAgICBtSWRsZSA9IHRydWU7CisKKyAgICBhdXRvIHJlbW90ZVJldCA9IG1SZW1vdGUtPmJlZ2luQ29uZmlndXJlKCk7CisgICAgaWYgKCFyZW1vdGVSZXQuaXNPaygpfHwgcmVtb3RlUmV0ICE9IFN0YXR1czo6Tk9fRVJST1IpIHsKKyAgICAgICAgQUxPR0UoIkNhbWVyYSBkZXZpY2UgJXMgYmVnaW4gY29uZmlndXJlIGZhaWxlZCIsIGdldElkKCkpOworICAgICAgICByZXR1cm4gdXRpbHM6OmNvbnZlcnRGcm9tSGlkbChyZW1vdGVSZXQpOworICAgIH0KKworICAgIC8vIGRlbGV0ZSB0by1iZS1kZWxldGVkIHN0cmVhbXMKKyAgICBmb3IgKGF1dG8gc3RyZWFtSWQgOiBkZWxldGVMaXN0KSB7CisgICAgICAgIHJlbW90ZVJldCA9IG1SZW1vdGUtPmRlbGV0ZVN0cmVhbShzdHJlYW1JZCk7CisgICAgICAgIGlmICghcmVtb3RlUmV0LmlzT2soKSB8fCByZW1vdGVSZXQgIT0gU3RhdHVzOjpOT19FUlJPUikgeworICAgICAgICAgICAgQUxPR0UoIkNhbWVyYSBkZXZpY2UgJXMgZmFpbGVkIHRvIHJlbW92ZSBzdHJlYW0gJWQiLCBnZXRJZCgpLCBzdHJlYW1JZCk7CisgICAgICAgICAgICByZXR1cm4gdXRpbHM6OmNvbnZlcnRGcm9tSGlkbChyZW1vdGVSZXQpOworICAgICAgICB9CisgICAgICAgIG1Db25maWd1cmVkT3V0cHV0cy5lcmFzZShzdHJlYW1JZCk7CisgICAgfQorCisgICAgLy8gYWRkIG5ldyBzdHJlYW1zCisgICAgZm9yIChhdXRvIG91dHB1dFBhaXIgOiBhZGRTZXQpIHsKKyAgICAgICAgaW50IHN0cmVhbUlkOworICAgICAgICBTdGF0dXMgc3RhdHVzOworICAgICAgICBhdXRvIHJldCA9IG1SZW1vdGUtPmNyZWF0ZVN0cmVhbShvdXRwdXRQYWlyLnNlY29uZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWyZzdGF0dXMsICZzdHJlYW1JZF0oU3RhdHVzIHMsIGF1dG8gc3RyZWFtX2lkKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0dXMgPSBzOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RyZWFtSWQgPSBzdHJlYW1faWQ7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pOworICAgICAgICBpZiAoIXJlbW90ZVJldC5pc09rKCkgfHwgc3RhdHVzICE9IFN0YXR1czo6Tk9fRVJST1IpIHsKKyAgICAgICAgICAgIEFMT0dFKCJDYW1lcmEgZGV2aWNlICVzIGZhaWxlZCB0byBjcmVhdGUgc3RyZWFtIiwgZ2V0SWQoKSk7CisgICAgICAgICAgICByZXR1cm4gdXRpbHM6OmNvbnZlcnRGcm9tSGlkbChzdGF0dXMpOworICAgICAgICB9CisgICAgICAgIG1Db25maWd1cmVkT3V0cHV0cy5pbnNlcnQoc3RkOjptYWtlX3BhaXIoc3RyZWFtSWQsIG91dHB1dFBhaXIpKTsKKyAgICB9CisKKyAgICBDYW1lcmFNZXRhZGF0YSBwYXJhbXM7CisgICAgSENhbWVyYU1ldGFkYXRhIGhpZGxQYXJhbXM7CisgICAgaWYgKChzZXNzaW9uUGFyYW1ldGVycyAhPSBudWxscHRyKSAmJiAoc2Vzc2lvblBhcmFtZXRlcnMtPnNldHRpbmdzICE9IG51bGxwdHIpKSB7CisgICAgICAgIHBhcmFtcy5hcHBlbmQoc2Vzc2lvblBhcmFtZXRlcnMtPnNldHRpbmdzLT5nZXRJbnRlcm5hbERhdGEoKSk7CisgICAgICAgIGNvbnN0IGNhbWVyYV9tZXRhZGF0YV90ICpwYXJhbXNfbWV0YWRhdGEgPSBwYXJhbXMuZ2V0QW5kTG9jaygpOworICAgICAgICB1dGlsczo6Y29udmVydFRvSGlkbChwYXJhbXNfbWV0YWRhdGEsICZoaWRsUGFyYW1zKTsKKyAgICAgICAgcGFyYW1zLnVubG9jayhwYXJhbXNfbWV0YWRhdGEpOworICAgICAgICByZW1vdGVSZXQgPSBtUmVtb3RlLT5lbmRDb25maWd1cmUoU3RyZWFtQ29uZmlndXJhdGlvbk1vZGU6Ok5PUk1BTF9NT0RFLCBoaWRsUGFyYW1zKTsKKyAgICB9CisgICAgaWYgKCFyZW1vdGVSZXQuaXNPaygpKSB7CisgICAgICAgIEFMT0dFKCJUcmFuc2FjdGlvbiBlcnJvcjogZW5kQ29uZmlndXJlIGZhaWxlZCAlcyIsIHJlbW90ZVJldC5kZXNjcmlwdGlvbigpLmNfc3RyKCkpOworICAgIH0KKworICAgIHJldHVybiB1dGlsczo6Y29udmVydEZyb21IaWRsKHJlbW90ZVJldCk7Cit9CisKK3ZvaWQKK0NhbWVyYURldmljZTo6c2V0UmVtb3RlRGV2aWNlKHNwPElDYW1lcmFEZXZpY2VVc2VyPiByZW1vdGUpIHsKKyAgICBNdXRleDo6QXV0b2xvY2sgX2wobURldmljZUxvY2spOworICAgIG1SZW1vdGUgPSByZW1vdGU7Cit9CisKK2Jvb2wKK0NhbWVyYURldmljZTo6c2V0RGV2aWNlTWV0YWRhdGFRdWV1ZXMoKSB7CisgICAgICAgIGlmIChtUmVtb3RlID09IG51bGxwdHIpIHsKKyAgICAgICAgICBBTE9HRSgibVJlbW90ZSBtdXN0IG5vdCBiZSBudWxsIHdoaWxlIHRyeWluZyB0byBmZXRjaCBtZXRhZGF0YSBxdWV1ZXMiKTsKKyAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICAgICAgc3RkOjpzaGFyZWRfcHRyPFJlcXVlc3RNZXRhZGF0YVF1ZXVlPiAmcmVxUXVldWUgPSBtQ2FwdHVyZVJlcXVlc3RNZXRhZGF0YVF1ZXVlOworICAgICAgICBhdXRvIHJldCA9CisgICAgICAgICAgICBtUmVtb3RlLT5nZXRDYXB0dXJlUmVxdWVzdE1ldGFkYXRhUXVldWUoCisgICAgICAgICAgICAgICAgWyZyZXFRdWV1ZV0oY29uc3QgYXV0byAmbXFEZXNjcmlwdG9yKSB7CisgICAgICAgICAgICAgICAgICAgIHJlcVF1ZXVlID0gc3RkOjptYWtlX3NoYXJlZDxSZXF1ZXN0TWV0YWRhdGFRdWV1ZT4obXFEZXNjcmlwdG9yKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKCFyZXFRdWV1ZS0+aXNWYWxpZCgpIHx8IHJlcVF1ZXVlLT5hdmFpbGFibGVUb1dyaXRlKCkgPD0wKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBBTE9HRSgiRW1wdHkgZm1xIGZyb20gY2FtZXJhc2VydmVyIik7CisgICAgICAgICAgICAgICAgICAgICAgICByZXFRdWV1ZSA9IG51bGxwdHI7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9KTsKKyAgICAgICAgaWYgKCFyZXQuaXNPaygpKSB7CisgICAgICAgICAgICBBTE9HRSgiVHJhbnNhY3Rpb24gZXJyb3IgdHJ5aW5nIHRvIGdldCBjYXB0dXJlIHJlcXVlc3QgbWV0YWRhdGEgcXVldWUiKTsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgICAgICBzdGQ6OnNoYXJlZF9wdHI8UmVzdWx0TWV0YWRhdGFRdWV1ZT4gJnJlc1F1ZXVlID0gbUNhcHR1cmVSZXN1bHRNZXRhZGF0YVF1ZXVlOworICAgICAgICByZXQgPQorICAgICAgICAgICAgICAgIG1SZW1vdGUtPmdldENhcHR1cmVSZXN1bHRNZXRhZGF0YVF1ZXVlKAorICAgICAgICAgICAgICAgICAgICAgICAgWyZyZXNRdWV1ZV0oY29uc3QgYXV0byAmbXFEZXNjcmlwdG9yKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzUXVldWUgPSBzdGQ6Om1ha2Vfc2hhcmVkPFJlc3VsdE1ldGFkYXRhUXVldWU+KG1xRGVzY3JpcHRvcik7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFyZXNRdWV1ZS0+aXNWYWxpZCgpIHx8IHJlc1F1ZXVlLT5hdmFpbGFibGVUb1dyaXRlKCkgPD0wKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFMT0dFKCJFbXB0eSBmbXEgZnJvbSBjYW1lcmFzZXJ2ZXIiKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICB9KTsKKyAgICAgICAgaWYgKCFyZXQuaXNPaygpKSB7CisgICAgICAgICAgICBBTE9HRSgiVHJhbnNhY3Rpb24gZXJyb3IgdHJ5aW5nIHRvIGdldCBjYXB0dXJlIHJlc3VsdCBtZXRhZGF0YSBxdWV1ZSIpOworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgICAgIHJldHVybiB0cnVlOworfQorCitjYW1lcmFfc3RhdHVzX3QKK0NhbWVyYURldmljZTo6Y2hlY2tDYW1lcmFDbG9zZWRPckVycm9yTG9ja2VkKCkgY29uc3QgeworICAgIGlmIChtUmVtb3RlID09IG51bGxwdHIpIHsKKyAgICAgICAgQUxPR0UoIiVzOiBjYW1lcmEgZGV2aWNlIGFscmVhZHkgY2xvc2VkIiwgX19GVU5DVElPTl9fKTsKKyAgICAgICAgcmV0dXJuIEFDQU1FUkFfRVJST1JfQ0FNRVJBX0RJU0NPTk5FQ1RFRDsKKyAgICB9CisgICAgaWYgKG1JbkVycm9yKSB7Ly8gdHJpZ2dlcmVkIGJ5IG9uRGV2aWNlRXJyb3IKKyAgICAgICAgQUxPR0UoIiVzOiBjYW1lcmEgZGV2aWNlIGhhcyBlbmNvdW50ZXJlZCBhIHNlcmlvdXMgZXJyb3IiLCBfX0ZVTkNUSU9OX18pOworICAgICAgICByZXR1cm4gbUVycm9yOworICAgIH0KKyAgICByZXR1cm4gQUNBTUVSQV9PSzsKK30KKwordm9pZAorQ2FtZXJhRGV2aWNlOjpzZXRDYW1lcmFEZXZpY2VFcnJvckxvY2tlZChjYW1lcmFfc3RhdHVzX3QgZXJyb3IpIHsKKyAgICBtSW5FcnJvciA9IHRydWU7CisgICAgbUVycm9yID0gZXJyb3I7CisgICAgcmV0dXJuOworfQorCit2b2lkCitDYW1lcmFEZXZpY2U6OkZyYW1lTnVtYmVyVHJhY2tlcjo6dXBkYXRlVHJhY2tlcihpbnQ2NF90IGZyYW1lTnVtYmVyLCBib29sIGlzRXJyb3IpIHsKKyAgICBBTE9HVigidXBkYXRlVHJhY2tlciBmcmFtZSAlIiBQUklkNjQgIiBpc0Vycm9yICVkIiwgZnJhbWVOdW1iZXIsIGlzRXJyb3IpOworICAgIGlmIChpc0Vycm9yKSB7CisgICAgICAgIG1GdXR1cmVFcnJvclNldC5pbnNlcnQoZnJhbWVOdW1iZXIpOworICAgIH0gZWxzZSBpZiAoZnJhbWVOdW1iZXIgPD0gbUNvbXBsZXRlZEZyYW1lTnVtYmVyKSB7CisgICAgICAgIEFMT0dFKCJGcmFtZSBudW1iZXIgJSIgUFJJZDY0ICIgZGVjcmVhc2VkISBjdXJyZW50IGZuICUiIFBSSWQ2NCwKKyAgICAgICAgICAgICAgICBmcmFtZU51bWJlciwgbUNvbXBsZXRlZEZyYW1lTnVtYmVyKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0gZWxzZSB7CisgICAgICAgIGlmIChmcmFtZU51bWJlciAhPSBtQ29tcGxldGVkRnJhbWVOdW1iZXIgKyAxKSB7CisgICAgICAgICAgICBBTE9HRSgiRnJhbWUgbnVtYmVyIG91dCBvZiBvcmRlci4gRXhwZWN0ICUiIFBSSWQ2NCAiIGJ1dCBnZXQgJSIgUFJJZDY0LAorICAgICAgICAgICAgICAgICAgICBtQ29tcGxldGVkRnJhbWVOdW1iZXIgKyAxLCBmcmFtZU51bWJlcik7CisgICAgICAgICAgICAvLyBEbyBub3QgYXNzZXJ0IGFzIGluIGphdmEgaW1wbGVtZW50YXRpb24KKyAgICAgICAgfQorICAgICAgICBtQ29tcGxldGVkRnJhbWVOdW1iZXIgPSBmcmFtZU51bWJlcjsKKyAgICB9CisgICAgdXBkYXRlKCk7Cit9CisKK3ZvaWQKK0NhbWVyYURldmljZTo6RnJhbWVOdW1iZXJUcmFja2VyOjp1cGRhdGUoKSB7CisgICAgZm9yIChhdXRvIGl0ID0gbUZ1dHVyZUVycm9yU2V0LmJlZ2luKCk7IGl0ICE9IG1GdXR1cmVFcnJvclNldC5lbmQoKTspIHsKKyAgICAgICAgaW50NjRfdCBlcnJvckZyYW1lTnVtYmVyID0gKml0OworICAgICAgICBpZiAoZXJyb3JGcmFtZU51bWJlciA9PSBtQ29tcGxldGVkRnJhbWVOdW1iZXIgKyAxKSB7CisgICAgICAgICAgICBtQ29tcGxldGVkRnJhbWVOdW1iZXIrKzsKKyAgICAgICAgICAgIGl0ID0gbUZ1dHVyZUVycm9yU2V0LmVyYXNlKGl0KTsKKyAgICAgICAgfSBlbHNlIGlmIChlcnJvckZyYW1lTnVtYmVyIDw9IG1Db21wbGV0ZWRGcmFtZU51bWJlcikgeworICAgICAgICAgICAgLy8gVGhpcyBzaG91bGQgbm90IGhhcHBlbiwgYnV0IGRlYWwgd2l0aCBpdCBhbnl3YXkKKyAgICAgICAgICAgIEFMT0dFKCJDb21wbGV0ZCBmcmFtZSBudW1iZXIgcGFzc2VkIHRocm91Z2ggY3VycmVudCBmcmFtZSBudW1iZXIhIik7CisgICAgICAgICAgICAvLyBlcmFzZSB0aGUgb2xkIGVycm9yIHNpbmNlIGl0J3Mgbm8gbG9uZ2VyIHVzZWZ1bAorICAgICAgICAgICAgaXQgPSBtRnV0dXJlRXJyb3JTZXQuZXJhc2UoaXQpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgLy8gTm9ybWFsIHJlcXVlc3RzIGhhc24ndCBjYXRjaGVkIHVwIGVycm9yIGZyYW1lcywganVzdCBicmVhaworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICB9CisgICAgQUxPR1YoIlVwZGF0ZSBjb21wbGV0ZSBmcmFtZSAlIiBQUklkNjQsIG1Db21wbGV0ZWRGcmFtZU51bWJlcik7Cit9CisKK3ZvaWQKK0NhbWVyYURldmljZTo6b25DYXB0dXJlRXJyb3JMb2NrZWQoCisgICAgICAgIEVycm9yQ29kZSBlcnJvckNvZGUsCisgICAgICAgIGNvbnN0IENhcHR1cmVSZXN1bHRFeHRyYXMmIHJlc3VsdEV4dHJhcykgeworICAgIGludCBzZXF1ZW5jZUlkID0gcmVzdWx0RXh0cmFzLnJlcXVlc3RJZDsKKyAgICBpbnQ2NF90IGZyYW1lTnVtYmVyID0gcmVzdWx0RXh0cmFzLmZyYW1lTnVtYmVyOworICAgIGludDMyX3QgYnVyc3RJZCA9IHJlc3VsdEV4dHJhcy5idXJzdElkOworICAgIGF1dG8gaXQgPSBtU2VxdWVuY2VDYWxsYmFja01hcC5maW5kKHNlcXVlbmNlSWQpOworICAgIGlmIChpdCA9PSBtU2VxdWVuY2VDYWxsYmFja01hcC5lbmQoKSkgeworICAgICAgICBBTE9HRSgiJXM6IEVycm9yOiBjYXB0dXJlIHNlcXVlbmNlIGluZGV4ICVkIG5vdCBmb3VuZCEiLAorICAgICAgICAgICAgICAgIF9fRlVOQ1RJT05fXywgc2VxdWVuY2VJZCk7CisgICAgICAgIHNldENhbWVyYURldmljZUVycm9yTG9ja2VkKEFDQU1FUkFfRVJST1JfQ0FNRVJBX1NFUlZJQ0UpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgQ2FsbGJhY2tIb2xkZXIgY2JoID0gKCppdCkuc2Vjb25kOworICAgIHNwPEFDYW1lcmFDYXB0dXJlU2Vzc2lvbj4gc2Vzc2lvbiA9IGNiaC5tU2Vzc2lvbjsKKyAgICBpZiAoKHNpemVfdCkgYnVyc3RJZCA+PSBjYmgubVJlcXVlc3RzLnNpemUoKSkgeworICAgICAgICBBTE9HRSgiJXM6IEVycm9yOiByZXF1ZXN0IGluZGV4ICVkIG91dCBvZiBib3VuZCAoc2l6ZSAlenUpIiwKKyAgICAgICAgICAgICAgICBfX0ZVTkNUSU9OX18sIGJ1cnN0SWQsIGNiaC5tUmVxdWVzdHMuc2l6ZSgpKTsKKyAgICAgICAgc2V0Q2FtZXJhRGV2aWNlRXJyb3JMb2NrZWQoQUNBTUVSQV9FUlJPUl9DQU1FUkFfU0VSVklDRSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgc3A8Q2FwdHVyZVJlcXVlc3Q+IHJlcXVlc3QgPSBjYmgubVJlcXVlc3RzW2J1cnN0SWRdOworCisgICAgLy8gSGFuZGxlIGJ1ZmZlciBlcnJvcgorICAgIGlmIChlcnJvckNvZGUgPT0gRXJyb3JDb2RlOjpDQU1FUkFfQlVGRkVSKSB7CisgICAgICAgIGludDMyX3Qgc3RyZWFtSWQgPSByZXN1bHRFeHRyYXMuZXJyb3JTdHJlYW1JZDsKKyAgICAgICAgQUNhbWVyYUNhcHR1cmVTZXNzaW9uX2NhcHR1cmVDYWxsYmFja19idWZmZXJMb3N0IG9uQnVmZmVyTG9zdCA9CisgICAgICAgICAgICAgICAgY2JoLm1DYWxsYmFja3Mub25DYXB0dXJlQnVmZmVyTG9zdDsKKyAgICAgICAgYXV0byBvdXRwdXRQYWlySXQgPSBtQ29uZmlndXJlZE91dHB1dHMuZmluZChzdHJlYW1JZCk7CisgICAgICAgIGlmIChvdXRwdXRQYWlySXQgPT0gbUNvbmZpZ3VyZWRPdXRwdXRzLmVuZCgpKSB7CisgICAgICAgICAgICBBTE9HRSgiJXM6IEVycm9yOiBzdHJlYW0gaWQgJWQgZG9lcyBub3QgZXhpc3QiLCBfX0ZVTkNUSU9OX18sIHN0cmVhbUlkKTsKKyAgICAgICAgICAgIHNldENhbWVyYURldmljZUVycm9yTG9ja2VkKEFDQU1FUkFfRVJST1JfQ0FNRVJBX1NFUlZJQ0UpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgY29uc3QgYXV0byYgd2luZG93SGFuZGxlcyA9IG91dHB1dFBhaXJJdC0+c2Vjb25kLnNlY29uZC5tT3V0cHV0Q29uZmlndXJhdGlvbi53aW5kb3dIYW5kbGVzOworICAgICAgICBmb3IgKGNvbnN0IGF1dG8mIG91dEhhbmRsZSA6IHdpbmRvd0hhbmRsZXMpIHsKKyAgICAgICAgICAgIGZvciAoYXV0byBzdHJlYW1BbmRXaW5kb3dJZCA6IHJlcXVlc3QtPm1DYXB0dXJlUmVxdWVzdC5zdHJlYW1BbmRXaW5kb3dJZHMpIHsKKyAgICAgICAgICAgICAgICBpbnQzMl90IHdpbmRvd0lkID0gc3RyZWFtQW5kV2luZG93SWQud2luZG93SWQ7CisgICAgICAgICAgICAgICAgaWYgKHV0aWxzOjppc1dpbmRvd05hdGl2ZUhhbmRsZUVxdWFsKHdpbmRvd0hhbmRsZXNbd2luZG93SWRdLG91dEhhbmRsZSkpIHsKKyAgICAgICAgICAgICAgICAgICAgbmF0aXZlX2hhbmRsZV90KiBhbncgPQorICAgICAgICAgICAgICAgICAgICAgICAgY29uc3RfY2FzdDxuYXRpdmVfaGFuZGxlX3QgKj4od2luZG93SGFuZGxlc1t3aW5kb3dJZF0uZ2V0TmF0aXZlSGFuZGxlKCkpOworICAgICAgICAgICAgICAgICAgICBBTE9HVigiQ2FtZXJhICVzIExvc3Qgb3V0cHV0IGJ1ZmZlciBmb3IgQU5XICVwIGZyYW1lICUiIFBSSWQ2NCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZXRJZCgpLCBhbncsIGZyYW1lTnVtYmVyKTsKKworICAgICAgICAgICAgICAgICAgICBzcDxBTWVzc2FnZT4gbXNnID0gbmV3IEFNZXNzYWdlKGtXaGF0Q2FwdHVyZUJ1ZmZlckxvc3QsIG1IYW5kbGVyKTsKKyAgICAgICAgICAgICAgICAgICAgbXNnLT5zZXRQb2ludGVyKGtDb250ZXh0S2V5LCBjYmgubUNhbGxiYWNrcy5jb250ZXh0KTsKKyAgICAgICAgICAgICAgICAgICAgbXNnLT5zZXRPYmplY3Qoa1Nlc3Npb25TcEtleSwgc2Vzc2lvbik7CisgICAgICAgICAgICAgICAgICAgIG1zZy0+c2V0UG9pbnRlcihrQ2FsbGJhY2tGcEtleSwgKHZvaWQqKSBvbkJ1ZmZlckxvc3QpOworICAgICAgICAgICAgICAgICAgICBtc2ctPnNldE9iamVjdChrQ2FwdHVyZVJlcXVlc3RLZXksIHJlcXVlc3QpOworICAgICAgICAgICAgICAgICAgICBtc2ctPnNldFBvaW50ZXIoa0Fud0tleSwgKHZvaWQqKSBhbncpOworICAgICAgICAgICAgICAgICAgICBtc2ctPnNldEludDY0KGtGcmFtZU51bWJlcktleSwgZnJhbWVOdW1iZXIpOworICAgICAgICAgICAgICAgICAgICBwb3N0U2Vzc2lvbk1zZ0FuZENsZWFudXAobXNnKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9IGVsc2UgeyAvLyBIYW5kbGUgb3RoZXIgY2FwdHVyZSBmYWlsdXJlcworICAgICAgICAvLyBGaXJlIGNhcHR1cmUgZmFpbHVyZSBjYWxsYmFjayBpZiB0aGVyZSBpcyBvbmUgcmVnaXN0ZXJlZAorICAgICAgICBBQ2FtZXJhQ2FwdHVyZVNlc3Npb25fY2FwdHVyZUNhbGxiYWNrX2ZhaWxlZCBvbkVycm9yID0gY2JoLm1DYWxsYmFja3Mub25DYXB0dXJlRmFpbGVkOworICAgICAgICBzcDxDYW1lcmFDYXB0dXJlRmFpbHVyZT4gZmFpbHVyZShuZXcgQ2FtZXJhQ2FwdHVyZUZhaWx1cmUoKSk7CisgICAgICAgIGZhaWx1cmUtPmZyYW1lTnVtYmVyID0gZnJhbWVOdW1iZXI7CisgICAgICAgIC8vIFRPRE86IHJlZmluZSB0aGlzIHdoZW4gaW1wbGVtZW50aW5nIGZsdXNoCisgICAgICAgIGZhaWx1cmUtPnJlYXNvbiAgICAgID0gQ0FQVFVSRV9GQUlMVVJFX1JFQVNPTl9FUlJPUjsKKyAgICAgICAgZmFpbHVyZS0+c2VxdWVuY2VJZCAgPSBzZXF1ZW5jZUlkOworICAgICAgICBmYWlsdXJlLT53YXNJbWFnZUNhcHR1cmVkID0gKGVycm9yQ29kZSA9PSBFcnJvckNvZGU6OkNBTUVSQV9SRVNVTFQpOworCisgICAgICAgIHNwPEFNZXNzYWdlPiBtc2cgPSBuZXcgQU1lc3NhZ2Uoa1doYXRDYXB0dXJlRmFpbCwgbUhhbmRsZXIpOworICAgICAgICBtc2ctPnNldFBvaW50ZXIoa0NvbnRleHRLZXksIGNiaC5tQ2FsbGJhY2tzLmNvbnRleHQpOworICAgICAgICBtc2ctPnNldE9iamVjdChrU2Vzc2lvblNwS2V5LCBzZXNzaW9uKTsKKyAgICAgICAgbXNnLT5zZXRQb2ludGVyKGtDYWxsYmFja0ZwS2V5LCAodm9pZCopIG9uRXJyb3IpOworICAgICAgICBtc2ctPnNldE9iamVjdChrQ2FwdHVyZVJlcXVlc3RLZXksIHJlcXVlc3QpOworICAgICAgICBtc2ctPnNldE9iamVjdChrQ2FwdHVyZUZhaWx1cmVLZXksIGZhaWx1cmUpOworICAgICAgICBwb3N0U2Vzc2lvbk1zZ0FuZENsZWFudXAobXNnKTsKKworICAgICAgICAvLyBVcGRhdGUgdHJhY2tlcgorICAgICAgICBtRnJhbWVOdW1iZXJUcmFja2VyLnVwZGF0ZVRyYWNrZXIoZnJhbWVOdW1iZXIsIC8qaXNFcnJvciovdHJ1ZSk7CisgICAgICAgIGNoZWNrQW5kRmlyZVNlcXVlbmNlQ29tcGxldGVMb2NrZWQoKTsKKyAgICB9CisgICAgcmV0dXJuOworfQorCit2b2lkIENhbWVyYURldmljZTo6Q2FsbGJhY2tIYW5kbGVyOjpvbk1lc3NhZ2VSZWNlaXZlZCgKKyAgICAgICAgY29uc3Qgc3A8QU1lc3NhZ2U+ICZtc2cpIHsKKyAgICBzd2l0Y2ggKG1zZy0+d2hhdCgpKSB7CisgICAgICAgIGNhc2Uga1doYXRPbkRpc2Nvbm5lY3RlZDoKKyAgICAgICAgY2FzZSBrV2hhdE9uRXJyb3I6CisgICAgICAgIGNhc2Uga1doYXRTZXNzaW9uU3RhdGVDYjoKKyAgICAgICAgY2FzZSBrV2hhdENhcHR1cmVTdGFydDoKKyAgICAgICAgY2FzZSBrV2hhdENhcHR1cmVSZXN1bHQ6CisgICAgICAgIGNhc2Uga1doYXRDYXB0dXJlRmFpbDoKKyAgICAgICAgY2FzZSBrV2hhdENhcHR1cmVTZXFFbmQ6CisgICAgICAgIGNhc2Uga1doYXRDYXB0dXJlU2VxQWJvcnQ6CisgICAgICAgIGNhc2Uga1doYXRDYXB0dXJlQnVmZmVyTG9zdDoKKyAgICAgICAgICAgIEFMT0dWKCIlczogUmVjZWl2ZWQgbXNnICVkIiwgX19GVU5DVElPTl9fLCBtc2ctPndoYXQoKSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBrV2hhdENsZWFuVXBTZXNzaW9uczoKKyAgICAgICAgICAgIG1DYWNoZWRTZXNzaW9ucy5jbGVhcigpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgQUxPR0UoIiVzOkVycm9yOiB1bmtub3duIGRldmljZSBjYWxsYmFjayAlZCIsIF9fRlVOQ1RJT05fXywgbXNnLT53aGF0KCkpOworICAgICAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICAvLyBDaGVjayB0aGUgY29tbW9uIHBhcnQgb2YgYWxsIG1lc3NhZ2UKKyAgICB2b2lkKiBjb250ZXh0OworICAgIGJvb2wgZm91bmQgPSBtc2ctPmZpbmRQb2ludGVyKGtDb250ZXh0S2V5LCAmY29udGV4dCk7CisgICAgaWYgKCFmb3VuZCkgeworICAgICAgICBBTE9HRSgiJXM6IENhbm5vdCBmaW5kIGNhbGxiYWNrIGNvbnRleHQhIiwgX19GVU5DVElPTl9fKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBzd2l0Y2ggKG1zZy0+d2hhdCgpKSB7CisgICAgICAgIGNhc2Uga1doYXRPbkRpc2Nvbm5lY3RlZDoKKyAgICAgICAgeworICAgICAgICAgICAgQUNhbWVyYURldmljZSogZGV2OworICAgICAgICAgICAgZm91bmQgPSBtc2ctPmZpbmRQb2ludGVyKGtEZXZpY2VLZXksICh2b2lkKiopICZkZXYpOworICAgICAgICAgICAgaWYgKCFmb3VuZCB8fCBkZXYgPT0gbnVsbHB0cikgeworICAgICAgICAgICAgICAgIEFMT0dFKCIlczogQ2Fubm90IGZpbmQgZGV2aWNlIHBvaW50ZXIhIiwgX19GVU5DVElPTl9fKTsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisgICAgICAgICAgICBBQ2FtZXJhRGV2aWNlX1N0YXRlQ2FsbGJhY2sgb25EaXNjb25uZWN0ZWQ7CisgICAgICAgICAgICBmb3VuZCA9IG1zZy0+ZmluZFBvaW50ZXIoa0NhbGxiYWNrRnBLZXksICh2b2lkKiopICZvbkRpc2Nvbm5lY3RlZCk7CisgICAgICAgICAgICBpZiAoIWZvdW5kKSB7CisgICAgICAgICAgICAgICAgQUxPR0UoIiVzOiBDYW5ub3QgZmluZCBvbkRpc2Nvbm5lY3RlZCEiLCBfX0ZVTkNUSU9OX18pOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChvbkRpc2Nvbm5lY3RlZCA9PSBudWxscHRyKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQorICAgICAgICAgICAgKCpvbkRpc2Nvbm5lY3RlZCkoY29udGV4dCwgZGV2KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGNhc2Uga1doYXRPbkVycm9yOgorICAgICAgICB7CisgICAgICAgICAgICBBQ2FtZXJhRGV2aWNlKiBkZXY7CisgICAgICAgICAgICBmb3VuZCA9IG1zZy0+ZmluZFBvaW50ZXIoa0RldmljZUtleSwgKHZvaWQqKikgJmRldik7CisgICAgICAgICAgICBpZiAoIWZvdW5kIHx8IGRldiA9PSBudWxscHRyKSB7CisgICAgICAgICAgICAgICAgQUxPR0UoIiVzOiBDYW5ub3QgZmluZCBkZXZpY2UgcG9pbnRlciEiLCBfX0ZVTkNUSU9OX18pOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIEFDYW1lcmFEZXZpY2VfRXJyb3JTdGF0ZUNhbGxiYWNrIG9uRXJyb3I7CisgICAgICAgICAgICBmb3VuZCA9IG1zZy0+ZmluZFBvaW50ZXIoa0NhbGxiYWNrRnBLZXksICh2b2lkKiopICZvbkVycm9yKTsKKyAgICAgICAgICAgIGlmICghZm91bmQpIHsKKyAgICAgICAgICAgICAgICBBTE9HRSgiJXM6IENhbm5vdCBmaW5kIG9uRXJyb3IhIiwgX19GVU5DVElPTl9fKTsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpbnQgZXJyb3JDb2RlOworICAgICAgICAgICAgZm91bmQgPSBtc2ctPmZpbmRJbnQzMihrRXJyb3JDb2RlS2V5LCAmZXJyb3JDb2RlKTsKKyAgICAgICAgICAgIGlmICghZm91bmQpIHsKKyAgICAgICAgICAgICAgICBBTE9HRSgiJXM6IENhbm5vdCBmaW5kIGVycm9yIGNvZGUhIiwgX19GVU5DVElPTl9fKTsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAob25FcnJvciA9PSBudWxscHRyKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQorICAgICAgICAgICAgKCpvbkVycm9yKShjb250ZXh0LCBkZXYsIGVycm9yQ29kZSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBjYXNlIGtXaGF0U2Vzc2lvblN0YXRlQ2I6CisgICAgICAgIGNhc2Uga1doYXRDYXB0dXJlU3RhcnQ6CisgICAgICAgIGNhc2Uga1doYXRDYXB0dXJlUmVzdWx0OgorICAgICAgICBjYXNlIGtXaGF0Q2FwdHVyZUZhaWw6CisgICAgICAgIGNhc2Uga1doYXRDYXB0dXJlU2VxRW5kOgorICAgICAgICBjYXNlIGtXaGF0Q2FwdHVyZVNlcUFib3J0OgorICAgICAgICBjYXNlIGtXaGF0Q2FwdHVyZUJ1ZmZlckxvc3Q6CisgICAgICAgIHsKKyAgICAgICAgICAgIHNwPFJlZkJhc2U+IG9iajsKKyAgICAgICAgICAgIGZvdW5kID0gbXNnLT5maW5kT2JqZWN0KGtTZXNzaW9uU3BLZXksICZvYmopOworICAgICAgICAgICAgaWYgKCFmb3VuZCB8fCBvYmogPT0gbnVsbHB0cikgeworICAgICAgICAgICAgICAgIEFMT0dFKCIlczogQ2Fubm90IGZpbmQgc2Vzc2lvbiBwb2ludGVyISIsIF9fRlVOQ1RJT05fXyk7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQorICAgICAgICAgICAgc3A8QUNhbWVyYUNhcHR1cmVTZXNzaW9uPiBzZXNzaW9uKHN0YXRpY19jYXN0PEFDYW1lcmFDYXB0dXJlU2Vzc2lvbio+KG9iai5nZXQoKSkpOworICAgICAgICAgICAgbUNhY2hlZFNlc3Npb25zLnB1c2goc2Vzc2lvbik7CisgICAgICAgICAgICBzcDxDYXB0dXJlUmVxdWVzdD4gcmVxdWVzdFNwID0gbnVsbHB0cjsKKyAgICAgICAgICAgIHN3aXRjaCAobXNnLT53aGF0KCkpIHsKKyAgICAgICAgICAgICAgICBjYXNlIGtXaGF0Q2FwdHVyZVN0YXJ0OgorICAgICAgICAgICAgICAgIGNhc2Uga1doYXRDYXB0dXJlUmVzdWx0OgorICAgICAgICAgICAgICAgIGNhc2Uga1doYXRDYXB0dXJlRmFpbDoKKyAgICAgICAgICAgICAgICBjYXNlIGtXaGF0Q2FwdHVyZUJ1ZmZlckxvc3Q6CisgICAgICAgICAgICAgICAgICAgIGZvdW5kID0gbXNnLT5maW5kT2JqZWN0KGtDYXB0dXJlUmVxdWVzdEtleSwgJm9iaik7CisgICAgICAgICAgICAgICAgICAgIGlmICghZm91bmQpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIEFMT0dFKCIlczogQ2Fubm90IGZpbmQgY2FwdHVyZSByZXF1ZXN0ISIsIF9fRlVOQ1RJT05fXyk7CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgcmVxdWVzdFNwID0gc3RhdGljX2Nhc3Q8Q2FwdHVyZVJlcXVlc3QqPihvYmouZ2V0KCkpOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgc3dpdGNoIChtc2ctPndoYXQoKSkgeworICAgICAgICAgICAgICAgIGNhc2Uga1doYXRTZXNzaW9uU3RhdGVDYjoKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIEFDYW1lcmFDYXB0dXJlU2Vzc2lvbl9zdGF0ZUNhbGxiYWNrIG9uU3RhdGU7CisgICAgICAgICAgICAgICAgICAgIGZvdW5kID0gbXNnLT5maW5kUG9pbnRlcihrQ2FsbGJhY2tGcEtleSwgKHZvaWQqKikgJm9uU3RhdGUpOworICAgICAgICAgICAgICAgICAgICBpZiAoIWZvdW5kKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBBTE9HRSgiJXM6IENhbm5vdCBmaW5kIHN0YXRlIGNhbGxiYWNrISIsIF9fRlVOQ1RJT05fXyk7CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgaWYgKG9uU3RhdGUgPT0gbnVsbHB0cikgeworICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICgqb25TdGF0ZSkoY29udGV4dCwgc2Vzc2lvbi5nZXQoKSk7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBjYXNlIGtXaGF0Q2FwdHVyZVN0YXJ0OgorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgQUNhbWVyYUNhcHR1cmVTZXNzaW9uX2NhcHR1cmVDYWxsYmFja19zdGFydCBvblN0YXJ0OworICAgICAgICAgICAgICAgICAgICBmb3VuZCA9IG1zZy0+ZmluZFBvaW50ZXIoa0NhbGxiYWNrRnBLZXksICh2b2lkKiopICZvblN0YXJ0KTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKCFmb3VuZCkgeworICAgICAgICAgICAgICAgICAgICAgICAgQUxPR0UoIiVzOiBDYW5ub3QgZmluZCBjYXB0dXJlIHN0YXJ0IGNhbGxiYWNrISIsIF9fRlVOQ1RJT05fXyk7CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgaWYgKG9uU3RhcnQgPT0gbnVsbHB0cikgeworICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGludDY0X3QgdGltZXN0YW1wOworICAgICAgICAgICAgICAgICAgICBmb3VuZCA9IG1zZy0+ZmluZEludDY0KGtUaW1lU3RhbXBLZXksICZ0aW1lc3RhbXApOworICAgICAgICAgICAgICAgICAgICBpZiAoIWZvdW5kKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBBTE9HRSgiJXM6IENhbm5vdCBmaW5kIHRpbWVzdGFtcCEiLCBfX0ZVTkNUSU9OX18pOworICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIEFDYXB0dXJlUmVxdWVzdCogcmVxdWVzdCA9IGFsbG9jYXRlQUNhcHR1cmVSZXF1ZXN0KHJlcXVlc3RTcCk7CisgICAgICAgICAgICAgICAgICAgICgqb25TdGFydCkoY29udGV4dCwgc2Vzc2lvbi5nZXQoKSwgcmVxdWVzdCwgdGltZXN0YW1wKTsKKyAgICAgICAgICAgICAgICAgICAgZnJlZUFDYXB0dXJlUmVxdWVzdChyZXF1ZXN0KTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGNhc2Uga1doYXRDYXB0dXJlUmVzdWx0OgorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgQUNhbWVyYUNhcHR1cmVTZXNzaW9uX2NhcHR1cmVDYWxsYmFja19yZXN1bHQgb25SZXN1bHQ7CisgICAgICAgICAgICAgICAgICAgIGZvdW5kID0gbXNnLT5maW5kUG9pbnRlcihrQ2FsbGJhY2tGcEtleSwgKHZvaWQqKikgJm9uUmVzdWx0KTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKCFmb3VuZCkgeworICAgICAgICAgICAgICAgICAgICAgICAgQUxPR0UoIiVzOiBDYW5ub3QgZmluZCBjYXB0dXJlIHJlc3VsdCBjYWxsYmFjayEiLCBfX0ZVTkNUSU9OX18pOworICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGlmIChvblJlc3VsdCA9PSBudWxscHRyKSB7CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgICAgICBmb3VuZCA9IG1zZy0+ZmluZE9iamVjdChrQ2FwdHVyZVJlc3VsdEtleSwgJm9iaik7CisgICAgICAgICAgICAgICAgICAgIGlmICghZm91bmQpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIEFMT0dFKCIlczogQ2Fubm90IGZpbmQgY2FwdHVyZSByZXN1bHQhIiwgX19GVU5DVElPTl9fKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBzcDxBQ2FtZXJhTWV0YWRhdGE+IHJlc3VsdChzdGF0aWNfY2FzdDxBQ2FtZXJhTWV0YWRhdGEqPihvYmouZ2V0KCkpKTsKKyAgICAgICAgICAgICAgICAgICAgQUNhcHR1cmVSZXF1ZXN0KiByZXF1ZXN0ID0gYWxsb2NhdGVBQ2FwdHVyZVJlcXVlc3QocmVxdWVzdFNwKTsKKyAgICAgICAgICAgICAgICAgICAgKCpvblJlc3VsdCkoY29udGV4dCwgc2Vzc2lvbi5nZXQoKSwgcmVxdWVzdCwgcmVzdWx0LmdldCgpKTsKKyAgICAgICAgICAgICAgICAgICAgZnJlZUFDYXB0dXJlUmVxdWVzdChyZXF1ZXN0KTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGNhc2Uga1doYXRDYXB0dXJlRmFpbDoKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIEFDYW1lcmFDYXB0dXJlU2Vzc2lvbl9jYXB0dXJlQ2FsbGJhY2tfZmFpbGVkIG9uRmFpbDsKKyAgICAgICAgICAgICAgICAgICAgZm91bmQgPSBtc2ctPmZpbmRQb2ludGVyKGtDYWxsYmFja0ZwS2V5LCAodm9pZCoqKSAmb25GYWlsKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKCFmb3VuZCkgeworICAgICAgICAgICAgICAgICAgICAgICAgQUxPR0UoIiVzOiBDYW5ub3QgZmluZCBjYXB0dXJlIGZhaWwgY2FsbGJhY2shIiwgX19GVU5DVElPTl9fKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBpZiAob25GYWlsID09IG51bGxwdHIpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgICAgIGZvdW5kID0gbXNnLT5maW5kT2JqZWN0KGtDYXB0dXJlRmFpbHVyZUtleSwgJm9iaik7CisgICAgICAgICAgICAgICAgICAgIGlmICghZm91bmQpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIEFMT0dFKCIlczogQ2Fubm90IGZpbmQgY2FwdHVyZSBmYWlsdXJlISIsIF9fRlVOQ1RJT05fXyk7CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgc3A8Q2FtZXJhQ2FwdHVyZUZhaWx1cmU+IGZhaWx1cmVTcCgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0aWNfY2FzdDxDYW1lcmFDYXB0dXJlRmFpbHVyZSo+KG9iai5nZXQoKSkpOworICAgICAgICAgICAgICAgICAgICBBQ2FtZXJhQ2FwdHVyZUZhaWx1cmUqIGZhaWx1cmUgPQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRpY19jYXN0PEFDYW1lcmFDYXB0dXJlRmFpbHVyZSo+KGZhaWx1cmVTcC5nZXQoKSk7CisgICAgICAgICAgICAgICAgICAgIEFDYXB0dXJlUmVxdWVzdCogcmVxdWVzdCA9IGFsbG9jYXRlQUNhcHR1cmVSZXF1ZXN0KHJlcXVlc3RTcCk7CisgICAgICAgICAgICAgICAgICAgICgqb25GYWlsKShjb250ZXh0LCBzZXNzaW9uLmdldCgpLCByZXF1ZXN0LCBmYWlsdXJlKTsKKyAgICAgICAgICAgICAgICAgICAgZnJlZUFDYXB0dXJlUmVxdWVzdChyZXF1ZXN0KTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGNhc2Uga1doYXRDYXB0dXJlU2VxRW5kOgorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgQUNhbWVyYUNhcHR1cmVTZXNzaW9uX2NhcHR1cmVDYWxsYmFja19zZXF1ZW5jZUVuZCBvblNlcUVuZDsKKyAgICAgICAgICAgICAgICAgICAgZm91bmQgPSBtc2ctPmZpbmRQb2ludGVyKGtDYWxsYmFja0ZwS2V5LCAodm9pZCoqKSAmb25TZXFFbmQpOworICAgICAgICAgICAgICAgICAgICBpZiAoIWZvdW5kKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBBTE9HRSgiJXM6IENhbm5vdCBmaW5kIHNlcXVlbmNlIGVuZCBjYWxsYmFjayEiLCBfX0ZVTkNUSU9OX18pOworICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGlmIChvblNlcUVuZCA9PSBudWxscHRyKSB7CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgaW50IHNlcUlkOworICAgICAgICAgICAgICAgICAgICBmb3VuZCA9IG1zZy0+ZmluZEludDMyKGtTZXF1ZW5jZUlkS2V5LCAmc2VxSWQpOworICAgICAgICAgICAgICAgICAgICBpZiAoIWZvdW5kKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBBTE9HRSgiJXM6IENhbm5vdCBmaW5kIGZyYW1lIG51bWJlciEiLCBfX0ZVTkNUSU9OX18pOworICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGludDY0X3QgZnJhbWVOdW1iZXI7CisgICAgICAgICAgICAgICAgICAgIGZvdW5kID0gbXNnLT5maW5kSW50NjQoa0ZyYW1lTnVtYmVyS2V5LCAmZnJhbWVOdW1iZXIpOworICAgICAgICAgICAgICAgICAgICBpZiAoIWZvdW5kKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBBTE9HRSgiJXM6IENhbm5vdCBmaW5kIGZyYW1lIG51bWJlciEiLCBfX0ZVTkNUSU9OX18pOworICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICgqb25TZXFFbmQpKGNvbnRleHQsIHNlc3Npb24uZ2V0KCksIHNlcUlkLCBmcmFtZU51bWJlcik7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBjYXNlIGtXaGF0Q2FwdHVyZVNlcUFib3J0OgorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgQUNhbWVyYUNhcHR1cmVTZXNzaW9uX2NhcHR1cmVDYWxsYmFja19zZXF1ZW5jZUFib3J0IG9uU2VxQWJvcnQ7CisgICAgICAgICAgICAgICAgICAgIGZvdW5kID0gbXNnLT5maW5kUG9pbnRlcihrQ2FsbGJhY2tGcEtleSwgKHZvaWQqKikgJm9uU2VxQWJvcnQpOworICAgICAgICAgICAgICAgICAgICBpZiAoIWZvdW5kKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBBTE9HRSgiJXM6IENhbm5vdCBmaW5kIHNlcXVlbmNlIGVuZCBjYWxsYmFjayEiLCBfX0ZVTkNUSU9OX18pOworICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGlmIChvblNlcUFib3J0ID09IG51bGxwdHIpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBpbnQgc2VxSWQ7CisgICAgICAgICAgICAgICAgICAgIGZvdW5kID0gbXNnLT5maW5kSW50MzIoa1NlcXVlbmNlSWRLZXksICZzZXFJZCk7CisgICAgICAgICAgICAgICAgICAgIGlmICghZm91bmQpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIEFMT0dFKCIlczogQ2Fubm90IGZpbmQgZnJhbWUgbnVtYmVyISIsIF9fRlVOQ1RJT05fXyk7CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgKCpvblNlcUFib3J0KShjb250ZXh0LCBzZXNzaW9uLmdldCgpLCBzZXFJZCk7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBjYXNlIGtXaGF0Q2FwdHVyZUJ1ZmZlckxvc3Q6CisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBBQ2FtZXJhQ2FwdHVyZVNlc3Npb25fY2FwdHVyZUNhbGxiYWNrX2J1ZmZlckxvc3Qgb25CdWZmZXJMb3N0OworICAgICAgICAgICAgICAgICAgICBmb3VuZCA9IG1zZy0+ZmluZFBvaW50ZXIoa0NhbGxiYWNrRnBLZXksICh2b2lkKiopICZvbkJ1ZmZlckxvc3QpOworICAgICAgICAgICAgICAgICAgICBpZiAoIWZvdW5kKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBBTE9HRSgiJXM6IENhbm5vdCBmaW5kIGJ1ZmZlciBsb3N0IGNhbGxiYWNrISIsIF9fRlVOQ1RJT05fXyk7CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgaWYgKG9uQnVmZmVyTG9zdCA9PSBudWxscHRyKSB7CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgICAgICBuYXRpdmVfaGFuZGxlX3QqIGFudzsKKyAgICAgICAgICAgICAgICAgICAgZm91bmQgPSBtc2ctPmZpbmRQb2ludGVyKGtBbndLZXksICh2b2lkKiopICZhbncpOworICAgICAgICAgICAgICAgICAgICBpZiAoIWZvdW5kKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBBTE9HRSgiJXM6IENhbm5vdCBmaW5kIG5hdGl2ZV9oYW5kbGVfdCEiLCBfX0ZVTkNUSU9OX18pOworICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAgICAgaW50NjRfdCBmcmFtZU51bWJlcjsKKyAgICAgICAgICAgICAgICAgICAgZm91bmQgPSBtc2ctPmZpbmRJbnQ2NChrRnJhbWVOdW1iZXJLZXksICZmcmFtZU51bWJlcik7CisgICAgICAgICAgICAgICAgICAgIGlmICghZm91bmQpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIEFMT0dFKCIlczogQ2Fubm90IGZpbmQgZnJhbWUgbnVtYmVyISIsIF9fRlVOQ1RJT05fXyk7CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgICAgICBBQ2FwdHVyZVJlcXVlc3QqIHJlcXVlc3QgPSBhbGxvY2F0ZUFDYXB0dXJlUmVxdWVzdChyZXF1ZXN0U3ApOworICAgICAgICAgICAgICAgICAgICAoKm9uQnVmZmVyTG9zdCkoY29udGV4dCwgc2Vzc2lvbi5nZXQoKSwgcmVxdWVzdCwgYW53LCBmcmFtZU51bWJlcik7CisgICAgICAgICAgICAgICAgICAgIGZyZWVBQ2FwdHVyZVJlcXVlc3QocmVxdWVzdCk7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgfQorfQorCitDYW1lcmFEZXZpY2U6OkNhbGxiYWNrSG9sZGVyOjpDYWxsYmFja0hvbGRlcigKKyAgICBzcDxBQ2FtZXJhQ2FwdHVyZVNlc3Npb24+ICAgICAgICAgIHNlc3Npb24sCisgICAgY29uc3QgVmVjdG9yPHNwPENhcHR1cmVSZXF1ZXN0PiA+JiByZXF1ZXN0cywKKyAgICBib29sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlzUmVwZWF0aW5nLAorICAgIEFDYW1lcmFDYXB0dXJlU2Vzc2lvbl9jYXB0dXJlQ2FsbGJhY2tzKiBjYnMpIDoKKyAgICBtU2Vzc2lvbihzZXNzaW9uKSwgbVJlcXVlc3RzKHJlcXVlc3RzKSwKKyAgICBtSXNSZXBlYXRpbmcoaXNSZXBlYXRpbmcpLCBtQ2FsbGJhY2tzKGZpbGxDYihjYnMpKSB7fQorCit2b2lkCitDYW1lcmFEZXZpY2U6OmNoZWNrUmVwZWF0aW5nU2VxdWVuY2VDb21wbGV0ZUxvY2tlZCgKKyAgICBjb25zdCBpbnQgc2VxdWVuY2VJZCwgY29uc3QgaW50NjRfdCBsYXN0RnJhbWVOdW1iZXIpIHsKKyAgICBBTE9HVigiUmVwZWF0aW5nIHNlcUlkICVkIGxhc3RGcmFtZU51bWVyICUiIFBSSWQ2NCwgc2VxdWVuY2VJZCwgbGFzdEZyYW1lTnVtYmVyKTsKKyAgICBpZiAobGFzdEZyYW1lTnVtYmVyID09IE5PX0ZSQU1FU19DQVBUVVJFRCkgeworICAgICAgICBpZiAobVNlcXVlbmNlQ2FsbGJhY2tNYXAuY291bnQoc2VxdWVuY2VJZCkgPT0gMCkgeworICAgICAgICAgICAgQUxPR1coIk5vIGNhbGxiYWNrIGZvdW5kIGZvciBzZXF1ZW5jZUlkICVkIiwgc2VxdWVuY2VJZCk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgLy8gcmVtb3ZlIGNhbGxiYWNrIGhvbGRlciBmcm9tIGNhbGxiYWNrIG1hcAorICAgICAgICBhdXRvIGNiSXQgPSBtU2VxdWVuY2VDYWxsYmFja01hcC5maW5kKHNlcXVlbmNlSWQpOworICAgICAgICBDYWxsYmFja0hvbGRlciBjYmggPSBjYkl0LT5zZWNvbmQ7CisgICAgICAgIG1TZXF1ZW5jZUNhbGxiYWNrTWFwLmVyYXNlKGNiSXQpOworICAgICAgICAvLyBzZW5kIHNlcSBhYm9ydGVkIGNhbGxiYWNrCisgICAgICAgIHNwPEFNZXNzYWdlPiBtc2cgPSBuZXcgQU1lc3NhZ2Uoa1doYXRDYXB0dXJlU2VxQWJvcnQsIG1IYW5kbGVyKTsKKyAgICAgICAgbXNnLT5zZXRQb2ludGVyKGtDb250ZXh0S2V5LCBjYmgubUNhbGxiYWNrcy5jb250ZXh0KTsKKyAgICAgICAgbXNnLT5zZXRPYmplY3Qoa1Nlc3Npb25TcEtleSwgY2JoLm1TZXNzaW9uKTsKKyAgICAgICAgbXNnLT5zZXRQb2ludGVyKGtDYWxsYmFja0ZwS2V5LCAodm9pZCopIGNiaC5tQ2FsbGJhY2tzLm9uQ2FwdHVyZVNlcXVlbmNlQWJvcnRlZCk7CisgICAgICAgIG1zZy0+c2V0SW50MzIoa1NlcXVlbmNlSWRLZXksIHNlcXVlbmNlSWQpOworICAgICAgICBwb3N0U2Vzc2lvbk1zZ0FuZENsZWFudXAobXNnKTsKKyAgICB9IGVsc2UgeworICAgICAgICAvLyBVc2UgbVNlcXVlbmNlTGFzdEZyYW1lTnVtYmVyTWFwIHRvIHRyYWNrCisgICAgICAgIG1TZXF1ZW5jZUxhc3RGcmFtZU51bWJlck1hcC5pbnNlcnQoc3RkOjptYWtlX3BhaXIoc2VxdWVuY2VJZCwgbGFzdEZyYW1lTnVtYmVyKSk7CisKKyAgICAgICAgLy8gTGFzdCBmcmFtZSBtaWdodCBoYXZlIGFycml2ZWQuIENoZWNrIG5vdworICAgICAgICBjaGVja0FuZEZpcmVTZXF1ZW5jZUNvbXBsZXRlTG9ja2VkKCk7CisgICAgfQorfQorCit2b2lkCitDYW1lcmFEZXZpY2U6OmNoZWNrQW5kRmlyZVNlcXVlbmNlQ29tcGxldGVMb2NrZWQoKSB7CisgICAgaW50NjRfdCBjb21wbGV0ZWRGcmFtZU51bWJlciA9IG1GcmFtZU51bWJlclRyYWNrZXIuZ2V0Q29tcGxldGVkRnJhbWVOdW1iZXIoKTsKKyAgICBhdXRvIGl0ID0gbVNlcXVlbmNlTGFzdEZyYW1lTnVtYmVyTWFwLmJlZ2luKCk7CisgICAgd2hpbGUgKGl0ICE9IG1TZXF1ZW5jZUxhc3RGcmFtZU51bWJlck1hcC5lbmQoKSkgeworICAgICAgICBpbnQgc2VxdWVuY2VJZCA9IGl0LT5maXJzdDsKKyAgICAgICAgaW50NjRfdCBsYXN0RnJhbWVOdW1iZXIgPSBpdC0+c2Vjb25kOworICAgICAgICBib29sIHNlcUNvbXBsZXRlZCA9IGZhbHNlOworICAgICAgICBib29sIGhhc0NhbGxiYWNrICA9IHRydWU7CisKKyAgICAgICAgaWYgKG1SZW1vdGUgPT0gbnVsbHB0cikgeworICAgICAgICAgICAgQUxPR1coIkNhbWVyYSAlcyBjbG9zZWQgd2hpbGUgY2hlY2tpbmcgc2VxdWVuY2UgY29tcGxldGUiLCBnZXRJZCgpKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIC8vIENoZWNrIGlmIHRoZXJlIGlzIGNhbGxiYWNrIGZvciB0aGlzIHNlcXVlbmNlCisgICAgICAgIC8vIFRoaXMgc2hvdWxkIG5vdCBoYXBwZW4gYmVjYXVzZSB3ZSBhbHdheXMgcmVnaXN0ZXIgY2FsbGJhY2sgKHdpdGggbnVsbHB0ciBpbnNpZGUpCisgICAgICAgIGlmIChtU2VxdWVuY2VDYWxsYmFja01hcC5jb3VudChzZXF1ZW5jZUlkKSA9PSAwKSB7CisgICAgICAgICAgICBBTE9HVygiTm8gY2FsbGJhY2sgZm91bmQgZm9yIHNlcXVlbmNlSWQgJWQiLCBzZXF1ZW5jZUlkKTsKKyAgICAgICAgICAgIGhhc0NhbGxiYWNrID0gZmFsc2U7CisgICAgICAgIH0KKworICAgICAgICBpZiAobGFzdEZyYW1lTnVtYmVyIDw9IGNvbXBsZXRlZEZyYW1lTnVtYmVyKSB7CisgICAgICAgICAgICBBTE9HVigic2VxICVkIHJlYWNoZWQgbGFzdCBmcmFtZSAlIiBQUklkNjQgIiwgY29tcGxldGVkICUiIFBSSWQ2NCwKKyAgICAgICAgICAgICAgICAgIHNlcXVlbmNlSWQsIGxhc3RGcmFtZU51bWJlciwgY29tcGxldGVkRnJhbWVOdW1iZXIpOworICAgICAgICAgICAgc2VxQ29tcGxldGVkID0gdHJ1ZTsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChzZXFDb21wbGV0ZWQgJiYgaGFzQ2FsbGJhY2spIHsKKyAgICAgICAgICAgIC8vIHJlbW92ZSBjYWxsYmFjayBob2xkZXIgZnJvbSBjYWxsYmFjayBtYXAKKyAgICAgICAgICAgIGF1dG8gY2JJdCA9IG1TZXF1ZW5jZUNhbGxiYWNrTWFwLmZpbmQoc2VxdWVuY2VJZCk7CisgICAgICAgICAgICBDYWxsYmFja0hvbGRlciBjYmggPSBjYkl0LT5zZWNvbmQ7CisgICAgICAgICAgICBtU2VxdWVuY2VDYWxsYmFja01hcC5lcmFzZShjYkl0KTsKKyAgICAgICAgICAgIC8vIHNlbmQgc2VxIGNvbXBsZXRlIGNhbGxiYWNrCisgICAgICAgICAgICBzcDxBTWVzc2FnZT4gbXNnID0gbmV3IEFNZXNzYWdlKGtXaGF0Q2FwdHVyZVNlcUVuZCwgbUhhbmRsZXIpOworICAgICAgICAgICAgbXNnLT5zZXRQb2ludGVyKGtDb250ZXh0S2V5LCBjYmgubUNhbGxiYWNrcy5jb250ZXh0KTsKKyAgICAgICAgICAgIG1zZy0+c2V0T2JqZWN0KGtTZXNzaW9uU3BLZXksIGNiaC5tU2Vzc2lvbik7CisgICAgICAgICAgICBtc2ctPnNldFBvaW50ZXIoa0NhbGxiYWNrRnBLZXksICh2b2lkKikgY2JoLm1DYWxsYmFja3Mub25DYXB0dXJlU2VxdWVuY2VDb21wbGV0ZWQpOworICAgICAgICAgICAgbXNnLT5zZXRJbnQzMihrU2VxdWVuY2VJZEtleSwgc2VxdWVuY2VJZCk7CisgICAgICAgICAgICBtc2ctPnNldEludDY0KGtGcmFtZU51bWJlcktleSwgbGFzdEZyYW1lTnVtYmVyKTsKKworICAgICAgICAgICAgLy8gQ2xlYXIgdGhlIHNlc3Npb24gc3AgYmVmb3JlIHdlIHNlbmQgb3V0IHRoZSBtZXNzYWdlCisgICAgICAgICAgICAvLyBUaGlzIHdpbGwgZ3VhcmFudGVlIHRoZSByYXJlIGNhc2Ugd2hlcmUgdGhlIG1lc3NhZ2UgaXMgcHJvY2Vzc2VkCisgICAgICAgICAgICAvLyBiZWZvcmUgY2JoIGdvZXMgb3V0IG9mIHNjb3BlIGFuZCBjYXVzaW5nIHdlIGNhbGwgdGhlIHNlc3Npb24KKyAgICAgICAgICAgIC8vIGRlc3RydWN0b3Igd2hpbGUgaG9sZGluZyBkZXZpY2UgbG9jaworICAgICAgICAgICAgY2JoLm1TZXNzaW9uLmNsZWFyKCk7CisgICAgICAgICAgICBwb3N0U2Vzc2lvbk1zZ0FuZENsZWFudXAobXNnKTsKKyAgICAgICAgfQorCisgICAgICAgIC8vIE5vIG5lZWQgdG8gdHJhY2sgc2VxdWVuY2UgY29tcGxldGUgaWYgdGhlcmUgaXMgbm8gY2FsbGJhY2sgcmVnaXN0ZXJlZAorICAgICAgICBpZiAoc2VxQ29tcGxldGVkIHx8ICFoYXNDYWxsYmFjaykgeworICAgICAgICAgICAgaXQgPSBtU2VxdWVuY2VMYXN0RnJhbWVOdW1iZXJNYXAuZXJhc2UoaXQpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgKytpdDsKKyAgICAgICAgfQorICAgIH0KK30KKworLyoqCisgICogQ2FtZXJhIHNlcnZpY2UgY2FsbGJhY2sgaW1wbGVtZW50YXRpb24KKyAgKi8KK2FuZHJvaWQ6OmhhcmR3YXJlOjpSZXR1cm48dm9pZD4KK0NhbWVyYURldmljZTo6U2VydmljZUNhbGxiYWNrOjpvbkRldmljZUVycm9yKAorICAgICAgICBFcnJvckNvZGUgZXJyb3JDb2RlLAorICAgICAgICBjb25zdCBDYXB0dXJlUmVzdWx0RXh0cmFzJiByZXN1bHRFeHRyYXMpIHsKKyAgICBBTE9HRCgiRGV2aWNlIGVycm9yIHJlY2VpdmVkLCBjb2RlICVkLCBmcmFtZSBudW1iZXIgJSIgUFJJZDY0ICIsIHJlcXVlc3QgSUQgJWQsIHN1YnNlcSBJRCAlZCIsCisgICAgICAgICAgICBlcnJvckNvZGUsIHJlc3VsdEV4dHJhcy5mcmFtZU51bWJlciwgcmVzdWx0RXh0cmFzLnJlcXVlc3RJZCwgcmVzdWx0RXh0cmFzLmJ1cnN0SWQpOworICAgIGF1dG8gcmV0ID0gVm9pZCgpOworICAgIHNwPENhbWVyYURldmljZT4gZGV2ID0gbURldmljZS5wcm9tb3RlKCk7CisgICAgaWYgKGRldiA9PSBudWxscHRyKSB7CisgICAgICAgIHJldHVybiByZXQ7IC8vIGRldmljZSBoYXMgYmVlbiBjbG9zZWQKKyAgICB9CisKKyAgICBzcDxBQ2FtZXJhQ2FwdHVyZVNlc3Npb24+IHNlc3Npb24gPSBkZXYtPm1DdXJyZW50U2Vzc2lvbi5wcm9tb3RlKCk7CisgICAgTXV0ZXg6OkF1dG9sb2NrIF9sKGRldi0+bURldmljZUxvY2spOworICAgIGlmIChkZXYtPm1SZW1vdGUgPT0gbnVsbHB0cikgeworICAgICAgICByZXR1cm4gcmV0OyAvLyBkZXZpY2UgaGFzIGJlZW4gY2xvc2VkCisgICAgfQorICAgIHN3aXRjaCAoZXJyb3JDb2RlKSB7CisgICAgICAgIGNhc2UgRXJyb3JDb2RlOjpDQU1FUkFfRElTQ09OTkVDVEVEOgorICAgICAgICB7CisgICAgICAgICAgICAvLyBDYW1lcmEgaXMgZGlzY29ubmVjdGVkLCBjbG9zZSB0aGUgc2Vzc2lvbiBhbmQgZXhwZWN0IG5vIG1vcmUgY2FsbGJhY2tzCisgICAgICAgICAgICBpZiAoc2Vzc2lvbiAhPSBudWxscHRyKSB7CisgICAgICAgICAgICAgICAgc2Vzc2lvbi0+Y2xvc2VCeURldmljZSgpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZGV2LT5tQ3VycmVudFNlc3Npb24gPSBudWxscHRyOworICAgICAgICAgICAgc3A8QU1lc3NhZ2U+IG1zZyA9IG5ldyBBTWVzc2FnZShrV2hhdE9uRGlzY29ubmVjdGVkLCBkZXYtPm1IYW5kbGVyKTsKKyAgICAgICAgICAgIG1zZy0+c2V0UG9pbnRlcihrQ29udGV4dEtleSwgZGV2LT5tQXBwQ2FsbGJhY2tzLmNvbnRleHQpOworICAgICAgICAgICAgbXNnLT5zZXRQb2ludGVyKGtEZXZpY2VLZXksICh2b2lkKikgZGV2LT5nZXRXcmFwcGVyKCkpOworICAgICAgICAgICAgbXNnLT5zZXRQb2ludGVyKGtDYWxsYmFja0ZwS2V5LCAodm9pZCopIGRldi0+bUFwcENhbGxiYWNrcy5vbkRpc2Nvbm5lY3RlZCk7CisgICAgICAgICAgICBtc2ctPnBvc3QoKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBBTE9HRSgiVW5rbm93biBlcnJvciBmcm9tIGNhbWVyYSBkZXZpY2U6ICVkIiwgZXJyb3JDb2RlKTsKKyAgICAgICAgICAgIFtbZmFsbHRocm91Z2hdXTsKKyAgICAgICAgY2FzZSBFcnJvckNvZGU6OkNBTUVSQV9ERVZJQ0U6CisgICAgICAgIGNhc2UgRXJyb3JDb2RlOjpDQU1FUkFfU0VSVklDRToKKyAgICAgICAgeworICAgICAgICAgICAgaW50MzJfdCBlcnJvclZhbCA9IDo6RVJST1JfQ0FNRVJBX0RFVklDRTsKKyAgICAgICAgICAgIC8vIFdlIGtlZXAgdGhpcyBzd2l0Y2ggc2luY2UgdGhpcyBibG9jayBtaWdodCBiZSBlbmNvdW50ZXJlZCB3aXRoCisgICAgICAgICAgICAvLyBtb3JlIHRoYW4ganVzdCAyIHN0YXRlcy4gVGhlIGRlZmF1bHQgZmFsbHRocm91Z2ggY291bGQgaGF2ZSB1cworICAgICAgICAgICAgLy8gaGFuZGxpbmcgbW9yZSB1bm1hdGNoZWQgZXJyb3IgY2FzZXMuCisgICAgICAgICAgICBzd2l0Y2ggKGVycm9yQ29kZSkgeworICAgICAgICAgICAgICAgIGNhc2UgRXJyb3JDb2RlOjpDQU1FUkFfREVWSUNFOgorICAgICAgICAgICAgICAgICAgICBkZXYtPnNldENhbWVyYURldmljZUVycm9yTG9ja2VkKEFDQU1FUkFfRVJST1JfQ0FNRVJBX0RFVklDRSk7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIGNhc2UgRXJyb3JDb2RlOjpDQU1FUkFfU0VSVklDRToKKyAgICAgICAgICAgICAgICAgICAgZGV2LT5zZXRDYW1lcmFEZXZpY2VFcnJvckxvY2tlZChBQ0FNRVJBX0VSUk9SX0NBTUVSQV9TRVJWSUNFKTsKKyAgICAgICAgICAgICAgICAgICAgZXJyb3JWYWwgPSA6OkVSUk9SX0NBTUVSQV9TRVJWSUNFOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgICAgICBkZXYtPnNldENhbWVyYURldmljZUVycm9yTG9ja2VkKEFDQU1FUkFfRVJST1JfVU5LTk9XTik7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICAgICAgc3A8QU1lc3NhZ2U+IG1zZyA9IG5ldyBBTWVzc2FnZShrV2hhdE9uRXJyb3IsIGRldi0+bUhhbmRsZXIpOworICAgICAgICAgICAgbXNnLT5zZXRQb2ludGVyKGtDb250ZXh0S2V5LCBkZXYtPm1BcHBDYWxsYmFja3MuY29udGV4dCk7CisgICAgICAgICAgICBtc2ctPnNldFBvaW50ZXIoa0RldmljZUtleSwgKHZvaWQqKSBkZXYtPmdldFdyYXBwZXIoKSk7CisgICAgICAgICAgICBtc2ctPnNldFBvaW50ZXIoa0NhbGxiYWNrRnBLZXksICh2b2lkKikgZGV2LT5tQXBwQ2FsbGJhY2tzLm9uRXJyb3IpOworICAgICAgICAgICAgbXNnLT5zZXRJbnQzMihrRXJyb3JDb2RlS2V5LCBlcnJvclZhbCk7CisgICAgICAgICAgICBtc2ctPnBvc3QoKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGNhc2UgRXJyb3JDb2RlOjpDQU1FUkFfUkVRVUVTVDoKKyAgICAgICAgY2FzZSBFcnJvckNvZGU6OkNBTUVSQV9SRVNVTFQ6CisgICAgICAgIGNhc2UgRXJyb3JDb2RlOjpDQU1FUkFfQlVGRkVSOgorICAgICAgICAgICAgZGV2LT5vbkNhcHR1cmVFcnJvckxvY2tlZChlcnJvckNvZGUsIHJlc3VsdEV4dHJhcyk7CisgICAgICAgICAgICBicmVhazsKKyAgICB9CisgICAgcmV0dXJuIHJldDsKK30KKworYW5kcm9pZDo6aGFyZHdhcmU6OlJldHVybjx2b2lkPgorQ2FtZXJhRGV2aWNlOjpTZXJ2aWNlQ2FsbGJhY2s6Om9uRGV2aWNlSWRsZSgpIHsKKyAgICBBTE9HVigiQ2FtZXJhIGlzIG5vdyBpZGxlIik7CisgICAgYXV0byByZXQgPSBWb2lkKCk7CisgICAgc3A8Q2FtZXJhRGV2aWNlPiBkZXYgPSBtRGV2aWNlLnByb21vdGUoKTsKKyAgICBpZiAoZGV2ID09IG51bGxwdHIpIHsKKyAgICAgICAgcmV0dXJuIHJldDsgLy8gZGV2aWNlIGhhcyBiZWVuIGNsb3NlZAorICAgIH0KKworICAgIE11dGV4OjpBdXRvbG9jayBfbChkZXYtPm1EZXZpY2VMb2NrKTsKKyAgICBpZiAoZGV2LT5pc0Nsb3NlZCgpIHx8IGRldi0+bVJlbW90ZSA9PSBudWxscHRyKSB7CisgICAgICAgIHJldHVybiByZXQ7CisgICAgfQorCisgICAgaWYgKGRldi0+bUlkbGUpIHsKKyAgICAgICAgLy8gQWxyZWFkeSBpbiBpZGxlIHN0YXRlLiBQb3NzaWJseSBvdGhlciB0aHJlYWQgZGlkIHdhaXRVbnRpbElkbGUKKyAgICAgICAgcmV0dXJuIHJldDsKKyAgICB9CisKKyAgICBpZiAoZGV2LT5tQ3VycmVudFNlc3Npb24gIT0gbnVsbHB0cikgeworICAgICAgICBBTE9HRSgib25EZXZpY2VJZGxlIHNlbmRpbmcgc3RhdGUgY2IiKTsKKyAgICAgICAgaWYgKGRldi0+bUJ1c3lTZXNzaW9uICE9IGRldi0+bUN1cnJlbnRTZXNzaW9uKSB7CisgICAgICAgICAgICBBTE9HRSgiQ3VycmVudCBzZXNzaW9uICE9IGJ1c3kgc2Vzc2lvbiIpOworICAgICAgICAgICAgZGV2LT5zZXRDYW1lcmFEZXZpY2VFcnJvckxvY2tlZChBQ0FNRVJBX0VSUk9SX0NBTUVSQV9ERVZJQ0UpOworICAgICAgICAgICAgcmV0dXJuIHJldDsKKyAgICAgICAgfQorCisgICAgICAgIHNwPEFNZXNzYWdlPiBtc2cgPSBuZXcgQU1lc3NhZ2Uoa1doYXRTZXNzaW9uU3RhdGVDYiwgZGV2LT5tSGFuZGxlcik7CisgICAgICAgIG1zZy0+c2V0UG9pbnRlcihrQ29udGV4dEtleSwgZGV2LT5tQnVzeVNlc3Npb24tPm1Vc2VyU2Vzc2lvbkNhbGxiYWNrLmNvbnRleHQpOworICAgICAgICBtc2ctPnNldE9iamVjdChrU2Vzc2lvblNwS2V5LCBkZXYtPm1CdXN5U2Vzc2lvbik7CisgICAgICAgIG1zZy0+c2V0UG9pbnRlcihrQ2FsbGJhY2tGcEtleSwgKHZvaWQqKSBkZXYtPm1CdXN5U2Vzc2lvbi0+bVVzZXJTZXNzaW9uQ2FsbGJhY2sub25SZWFkeSk7CisgICAgICAgIC8vIE1ha2Ugc3VyZSB3ZSBjbGVhciB0aGUgc3AgZmlyc3Qgc28gdGhlIHNlc3Npb24gZGVzdHJ1Y3RvciBjYW4KKyAgICAgICAgLy8gb25seSBoYXBwZW4gb24gaGFuZGxlciB0aHJlYWQgKHdoZXJlIHdlIGRvbid0IGhvbGQgZGV2aWNlL3Nlc3Npb24gbG9jaykKKyAgICAgICAgZGV2LT5tQnVzeVNlc3Npb24uY2xlYXIoKTsKKyAgICAgICAgZGV2LT5wb3N0U2Vzc2lvbk1zZ0FuZENsZWFudXAobXNnKTsKKyAgICB9CisgICAgZGV2LT5tSWRsZSA9IHRydWU7CisgICAgZGV2LT5tRmx1c2hpbmcgPSBmYWxzZTsKKyAgICByZXR1cm4gcmV0OworfQorCithbmRyb2lkOjpoYXJkd2FyZTo6UmV0dXJuPHZvaWQ+CitDYW1lcmFEZXZpY2U6OlNlcnZpY2VDYWxsYmFjazo6b25DYXB0dXJlU3RhcnRlZCgKKyAgICAgICAgY29uc3QgQ2FwdHVyZVJlc3VsdEV4dHJhcyYgcmVzdWx0RXh0cmFzLAorICAgICAgICB1aW50NjRfdCB0aW1lc3RhbXApIHsKKyAgICBhdXRvIHJldCA9IFZvaWQoKTsKKworICAgIHNwPENhbWVyYURldmljZT4gZGV2ID0gbURldmljZS5wcm9tb3RlKCk7CisgICAgaWYgKGRldiA9PSBudWxscHRyKSB7CisgICAgICAgIHJldHVybiByZXQ7IC8vIGRldmljZSBoYXMgYmVlbiBjbG9zZWQKKyAgICB9CisgICAgTXV0ZXg6OkF1dG9sb2NrIF9sKGRldi0+bURldmljZUxvY2spOworICAgIGlmIChkZXYtPmlzQ2xvc2VkKCkgfHwgZGV2LT5tUmVtb3RlID09IG51bGxwdHIpIHsKKyAgICAgICAgcmV0dXJuIHJldDsKKyAgICB9CisKKyAgICBpbnQzMl90IHNlcXVlbmNlSWQgPSByZXN1bHRFeHRyYXMucmVxdWVzdElkOworICAgIGludDMyX3QgYnVyc3RJZCA9IHJlc3VsdEV4dHJhcy5idXJzdElkOworCisgICAgYXV0byBpdCA9IGRldi0+bVNlcXVlbmNlQ2FsbGJhY2tNYXAuZmluZChzZXF1ZW5jZUlkKTsKKyAgICBpZiAoaXQgIT0gZGV2LT5tU2VxdWVuY2VDYWxsYmFja01hcC5lbmQoKSkgeworICAgICAgICBDYWxsYmFja0hvbGRlciBjYmggPSAoKml0KS5zZWNvbmQ7CisgICAgICAgIEFDYW1lcmFDYXB0dXJlU2Vzc2lvbl9jYXB0dXJlQ2FsbGJhY2tfc3RhcnQgb25TdGFydCA9IGNiaC5tQ2FsbGJhY2tzLm9uQ2FwdHVyZVN0YXJ0ZWQ7CisgICAgICAgIHNwPEFDYW1lcmFDYXB0dXJlU2Vzc2lvbj4gc2Vzc2lvbiA9IGNiaC5tU2Vzc2lvbjsKKyAgICAgICAgaWYgKChzaXplX3QpIGJ1cnN0SWQgPj0gY2JoLm1SZXF1ZXN0cy5zaXplKCkpIHsKKyAgICAgICAgICAgIEFMT0dFKCIlczogRXJyb3I6IHJlcXVlc3QgaW5kZXggJWQgb3V0IG9mIGJvdW5kIChzaXplICV6dSkiLAorICAgICAgICAgICAgICAgICAgICBfX0ZVTkNUSU9OX18sIGJ1cnN0SWQsIGNiaC5tUmVxdWVzdHMuc2l6ZSgpKTsKKyAgICAgICAgICAgIGRldi0+c2V0Q2FtZXJhRGV2aWNlRXJyb3JMb2NrZWQoQUNBTUVSQV9FUlJPUl9DQU1FUkFfU0VSVklDRSk7CisgICAgICAgIH0KKyAgICAgICAgc3A8Q2FwdHVyZVJlcXVlc3Q+IHJlcXVlc3QgPSBjYmgubVJlcXVlc3RzW2J1cnN0SWRdOworICAgICAgICBzcDxBTWVzc2FnZT4gbXNnID0gbmV3IEFNZXNzYWdlKGtXaGF0Q2FwdHVyZVN0YXJ0LCBkZXYtPm1IYW5kbGVyKTsKKyAgICAgICAgbXNnLT5zZXRQb2ludGVyKGtDb250ZXh0S2V5LCBjYmgubUNhbGxiYWNrcy5jb250ZXh0KTsKKyAgICAgICAgbXNnLT5zZXRPYmplY3Qoa1Nlc3Npb25TcEtleSwgc2Vzc2lvbik7CisgICAgICAgIG1zZy0+c2V0UG9pbnRlcihrQ2FsbGJhY2tGcEtleSwgKHZvaWQqKSBvblN0YXJ0KTsKKyAgICAgICAgbXNnLT5zZXRPYmplY3Qoa0NhcHR1cmVSZXF1ZXN0S2V5LCByZXF1ZXN0KTsKKyAgICAgICAgbXNnLT5zZXRJbnQ2NChrVGltZVN0YW1wS2V5LCB0aW1lc3RhbXApOworICAgICAgICBkZXYtPnBvc3RTZXNzaW9uTXNnQW5kQ2xlYW51cChtc2cpOworICAgIH0KKyAgICByZXR1cm4gcmV0OworfQorCithbmRyb2lkOjpoYXJkd2FyZTo6UmV0dXJuPHZvaWQ+CitDYW1lcmFEZXZpY2U6OlNlcnZpY2VDYWxsYmFjazo6b25SZXN1bHRSZWNlaXZlZCgKKyAgICAgICAgY29uc3QgRm1xU2l6ZU9yTWV0YWRhdGEmIHJlc3VsdE1ldGFkYXRhLAorICAgICAgICBjb25zdCBDYXB0dXJlUmVzdWx0RXh0cmFzJiByZXN1bHRFeHRyYXMsCisgICAgICAgIGNvbnN0IGhpZGxfdmVjPFBoeXNpY2FsQ2FwdHVyZVJlc3VsdEluZm8+JiBwaHlzaWNhbFJlc3VsdEluZm9zKSB7CisgICAgKHZvaWQpIHBoeXNpY2FsUmVzdWx0SW5mb3M7CisgICAgYXV0byByZXQgPSBWb2lkKCk7CisKKyAgICBzcDxDYW1lcmFEZXZpY2U+IGRldiA9IG1EZXZpY2UucHJvbW90ZSgpOworICAgIGlmIChkZXYgPT0gbnVsbHB0cikgeworICAgICAgICByZXR1cm4gcmV0OyAvLyBkZXZpY2UgaGFzIGJlZW4gY2xvc2VkCisgICAgfQorICAgIGludDMyX3Qgc2VxdWVuY2VJZCA9IHJlc3VsdEV4dHJhcy5yZXF1ZXN0SWQ7CisgICAgaW50NjRfdCBmcmFtZU51bWJlciA9IHJlc3VsdEV4dHJhcy5mcmFtZU51bWJlcjsKKyAgICBpbnQzMl90IGJ1cnN0SWQgPSByZXN1bHRFeHRyYXMuYnVyc3RJZDsKKyAgICBib29sICAgIGlzUGFydGlhbFJlc3VsdCA9IChyZXN1bHRFeHRyYXMucGFydGlhbFJlc3VsdENvdW50IDwgZGV2LT5tUGFydGlhbFJlc3VsdENvdW50KTsKKworICAgIGlmICghaXNQYXJ0aWFsUmVzdWx0KSB7CisgICAgICAgIEFMT0dWKCJTZXFJZCAlZCBmcmFtZSAlIiBQUklkNjQgIiByZXN1bHQgYXJyaXZlLiIsIHNlcXVlbmNlSWQsIGZyYW1lTnVtYmVyKTsKKyAgICB9CisKKyAgICBNdXRleDo6QXV0b2xvY2sgX2woZGV2LT5tRGV2aWNlTG9jayk7CisgICAgaWYgKGRldi0+bVJlbW90ZSA9PSBudWxscHRyKSB7CisgICAgICAgIHJldHVybiByZXQ7IC8vIGRldmljZSBoYXMgYmVlbiBkaXNjb25uZWN0ZWQKKyAgICB9CisKKyAgICBpZiAoZGV2LT5pc0Nsb3NlZCgpKSB7CisgICAgICAgIGlmICghaXNQYXJ0aWFsUmVzdWx0KSB7CisgICAgICAgICAgICBkZXYtPm1GcmFtZU51bWJlclRyYWNrZXIudXBkYXRlVHJhY2tlcihmcmFtZU51bWJlciwgLyppc0Vycm9yKi9mYWxzZSk7CisgICAgICAgIH0KKyAgICAgICAgLy8gZWFybHkgcmV0dXJuIHRvIGF2b2lkIGNhbGxiYWNrIHNlbnQgdG8gY2xvc2VkIGRldmljZXMKKyAgICAgICAgcmV0dXJuIHJldDsKKyAgICB9CisKKyAgICBDYW1lcmFNZXRhZGF0YSBtZXRhZGF0YUNvcHk7CisgICAgSENhbWVyYU1ldGFkYXRhIGhDYW1lcmFNZXRhZGF0YTsKKyAgICBib29sIGNvbnZlcnRlZCA9IGZhbHNlOworICAgIGlmIChyZXN1bHRNZXRhZGF0YS5nZXREaXNjcmltaW5hdG9yKCkgPT0KKyAgICAgICAgRm1xU2l6ZU9yTWV0YWRhdGE6OmhpZGxfZGlzY3JpbWluYXRvcjo6Zm1xTWV0YWRhdGFTaXplKSB7CisgICAgICAgIGhDYW1lcmFNZXRhZGF0YS5yZXNpemUocmVzdWx0TWV0YWRhdGEuZm1xTWV0YWRhdGFTaXplKCkpOworICAgICAgICBib29sIHJlYWQgPSBkZXYtPm1DYXB0dXJlUmVzdWx0TWV0YWRhdGFRdWV1ZS0+cmVhZChoQ2FtZXJhTWV0YWRhdGEuZGF0YSgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHRNZXRhZGF0YS5mbXFNZXRhZGF0YVNpemUoKSk7CisgICAgICAgICAgICBpZiAoIXJlYWQpIHsKKyAgICAgICAgICAgICAgICBBTE9HRSgiJXMgY2FwdHVyZSByZXF1ZXN0IHNldHRpbmdzIGNvdWxkJ3QgYmUgcmVhZCBmcm9tIGZtcSIsCisgICAgICAgICAgICAgICAgICAgICAgX19GVU5DVElPTl9fKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gcmV0OworICAgICAgICAgICAgfQorICAgICAgICAgICAgLy8gVE9ETzogRG8gd2UgYWN0dWFsbHkgbmVlZCB0byBjbG9uZSBoZXJlID8KKyAgICAgICAgICAgIGNvbnZlcnRlZCA9IHV0aWxzOjpjb252ZXJ0RnJvbUhpZGxDbG9uZWQoaENhbWVyYU1ldGFkYXRhLCAmbWV0YWRhdGFDb3B5KTsKKworICAgIH0gZWxzZSB7CisgICAgICAgICAgY29udmVydGVkID0gdXRpbHM6OmNvbnZlcnRGcm9tSGlkbENsb25lZChyZXN1bHRNZXRhZGF0YS5tZXRhZGF0YSgpLCAmbWV0YWRhdGFDb3B5KTsKKyAgICB9CisKKyAgICBpZiAoIWNvbnZlcnRlZCkgeworICAgICAgICBBTE9HRSgiJXMgcmVzdWx0IG1ldGFkYXRhIGNvdWxkbid0IGJlIGNvbnZlcnRlZCIsIF9fRlVOQ1RJT05fXyk7CisgICAgICAgIHJldHVybiByZXQ7CisgICAgfQorCisgICAgbWV0YWRhdGFDb3B5LnVwZGF0ZShBTkRST0lEX0xFTlNfSU5GT19TSEFESU5HX01BUF9TSVpFLCBkZXYtPm1TaGFkaW5nTWFwU2l6ZSwgLypkYXRhX2NvdW50Ki8yKTsKKyAgICBtZXRhZGF0YUNvcHkudXBkYXRlKEFORFJPSURfU1lOQ19GUkFNRV9OVU1CRVIsICZmcmFtZU51bWJlciwgLypkYXRhX2NvdW50Ki8xKTsKKworICAgIGF1dG8gaXQgPSBkZXYtPm1TZXF1ZW5jZUNhbGxiYWNrTWFwLmZpbmQoc2VxdWVuY2VJZCk7CisgICAgaWYgKGl0ICE9IGRldi0+bVNlcXVlbmNlQ2FsbGJhY2tNYXAuZW5kKCkpIHsKKyAgICAgICAgQ2FsbGJhY2tIb2xkZXIgY2JoID0gKCppdCkuc2Vjb25kOworICAgICAgICBBQ2FtZXJhQ2FwdHVyZVNlc3Npb25fY2FwdHVyZUNhbGxiYWNrX3Jlc3VsdCBvblJlc3VsdCA9IGlzUGFydGlhbFJlc3VsdCA/CisgICAgICAgICAgICAgICAgY2JoLm1DYWxsYmFja3Mub25DYXB0dXJlUHJvZ3Jlc3NlZCA6CisgICAgICAgICAgICAgICAgY2JoLm1DYWxsYmFja3Mub25DYXB0dXJlQ29tcGxldGVkOworICAgICAgICBzcDxBQ2FtZXJhQ2FwdHVyZVNlc3Npb24+IHNlc3Npb24gPSBjYmgubVNlc3Npb247CisgICAgICAgIGlmICgoc2l6ZV90KSBidXJzdElkID49IGNiaC5tUmVxdWVzdHMuc2l6ZSgpKSB7CisgICAgICAgICAgICBBTE9HRSgiJXM6IEVycm9yOiByZXF1ZXN0IGluZGV4ICVkIG91dCBvZiBib3VuZCAoc2l6ZSAlenUpIiwKKyAgICAgICAgICAgICAgICAgICAgX19GVU5DVElPTl9fLCBidXJzdElkLCBjYmgubVJlcXVlc3RzLnNpemUoKSk7CisgICAgICAgICAgICBkZXYtPnNldENhbWVyYURldmljZUVycm9yTG9ja2VkKEFDQU1FUkFfRVJST1JfQ0FNRVJBX1NFUlZJQ0UpOworICAgICAgICB9CisgICAgICAgIHNwPENhcHR1cmVSZXF1ZXN0PiByZXF1ZXN0ID0gY2JoLm1SZXF1ZXN0c1tidXJzdElkXTsKKyAgICAgICAgc3A8QUNhbWVyYU1ldGFkYXRhPiByZXN1bHQobmV3IEFDYW1lcmFNZXRhZGF0YSgKKyAgICAgICAgICAgICAgICBtZXRhZGF0YUNvcHkucmVsZWFzZSgpLCBBQ2FtZXJhTWV0YWRhdGE6OkFDTV9SRVNVTFQpKTsKKworICAgICAgICBzcDxBTWVzc2FnZT4gbXNnID0gbmV3IEFNZXNzYWdlKGtXaGF0Q2FwdHVyZVJlc3VsdCwgZGV2LT5tSGFuZGxlcik7CisgICAgICAgIG1zZy0+c2V0UG9pbnRlcihrQ29udGV4dEtleSwgY2JoLm1DYWxsYmFja3MuY29udGV4dCk7CisgICAgICAgIG1zZy0+c2V0T2JqZWN0KGtTZXNzaW9uU3BLZXksIHNlc3Npb24pOworICAgICAgICBtc2ctPnNldFBvaW50ZXIoa0NhbGxiYWNrRnBLZXksICh2b2lkKikgb25SZXN1bHQpOworICAgICAgICBtc2ctPnNldE9iamVjdChrQ2FwdHVyZVJlcXVlc3RLZXksIHJlcXVlc3QpOworICAgICAgICBtc2ctPnNldE9iamVjdChrQ2FwdHVyZVJlc3VsdEtleSwgcmVzdWx0KTsKKyAgICAgICAgZGV2LT5wb3N0U2Vzc2lvbk1zZ0FuZENsZWFudXAobXNnKTsKKyAgICB9CisKKyAgICBpZiAoIWlzUGFydGlhbFJlc3VsdCkgeworICAgICAgICBkZXYtPm1GcmFtZU51bWJlclRyYWNrZXIudXBkYXRlVHJhY2tlcihmcmFtZU51bWJlciwgLyppc0Vycm9yKi9mYWxzZSk7CisgICAgICAgIGRldi0+Y2hlY2tBbmRGaXJlU2VxdWVuY2VDb21wbGV0ZUxvY2tlZCgpOworICAgIH0KKworICAgIHJldHVybiByZXQ7Cit9CisKK2FuZHJvaWQ6OmhhcmR3YXJlOjpSZXR1cm48dm9pZD4KK0NhbWVyYURldmljZTo6U2VydmljZUNhbGxiYWNrOjpvblJlcGVhdGluZ1JlcXVlc3RFcnJvcigKKyAgICAgICAgdWludDY0X3QgbGFzdEZyYW1lTnVtYmVyLCBpbnQzMl90IHN0b3BwZWRTZXF1ZW5jZUlkKSB7CisgICAgYXV0byByZXQgPSBWb2lkKCk7CisKKyAgICBzcDxDYW1lcmFEZXZpY2U+IGRldiA9IG1EZXZpY2UucHJvbW90ZSgpOworICAgIGlmIChkZXYgPT0gbnVsbHB0cikgeworICAgICAgICByZXR1cm4gcmV0OyAvLyBkZXZpY2UgaGFzIGJlZW4gY2xvc2VkCisgICAgfQorCisgICAgTXV0ZXg6OkF1dG9sb2NrIF9sKGRldi0+bURldmljZUxvY2spOworCisgICAgaW50IHJlcGVhdGluZ1NlcXVlbmNlSWQgPSBkZXYtPm1SZXBlYXRpbmdTZXF1ZW5jZUlkOworICAgIGlmIChzdG9wcGVkU2VxdWVuY2VJZCA9PSByZXBlYXRpbmdTZXF1ZW5jZUlkKSB7CisgICAgICAgIGRldi0+bVJlcGVhdGluZ1NlcXVlbmNlSWQgPSBSRVFVRVNUX0lEX05PTkU7CisgICAgfQorCisgICAgZGV2LT5jaGVja1JlcGVhdGluZ1NlcXVlbmNlQ29tcGxldGVMb2NrZWQocmVwZWF0aW5nU2VxdWVuY2VJZCwgbGFzdEZyYW1lTnVtYmVyKTsKKworICAgIHJldHVybiByZXQ7Cit9CisKK30gLy8gbmFtZXNwYWNlIGFjYW0KK30gLy8gbmFtZXNwYWNlIGFuZHJvaWQKZGlmZiAtLWdpdCBhL2NhbWVyYS9uZGsvbmRrX3ZlbmRvci9pbXBsL0FDYW1lcmFEZXZpY2UuaCBiL2NhbWVyYS9uZGsvbmRrX3ZlbmRvci9pbXBsL0FDYW1lcmFEZXZpY2UuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMWEyMTlmCi0tLSAvZGV2L251bGwKKysrIGIvY2FtZXJhL25kay9uZGtfdmVuZG9yL2ltcGwvQUNhbWVyYURldmljZS5oCkBAIC0wLDAgKzEsMzU2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE4IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KKyNpZm5kZWYgX0FDQU1FUkFfREVWSUNFX0gKKyNkZWZpbmUgX0FDQU1FUkFfREVWSUNFX0gKKworI2luY2x1ZGUgPG1lbW9yeT4KKyNpbmNsdWRlIDxtYXA+CisjaW5jbHVkZSA8c2V0PgorI2luY2x1ZGUgPGF0b21pYz4KKyNpbmNsdWRlIDx1dGlsaXR5PgorI2luY2x1ZGUgPHV0aWxzL1N0cm9uZ1BvaW50ZXIuaD4KKyNpbmNsdWRlIDx1dGlscy9NdXRleC5oPgorI2luY2x1ZGUgPHV0aWxzL0xpc3QuaD4KKyNpbmNsdWRlIDx1dGlscy9WZWN0b3IuaD4KKyNpbmNsdWRlIDxhbmRyb2lkL2ZyYW1ld29ya3MvY2FtZXJhc2VydmljZS9kZXZpY2UvMi4wL0lDYW1lcmFEZXZpY2VVc2VyLmg+CisjaW5jbHVkZSA8YW5kcm9pZC9mcmFtZXdvcmtzL2NhbWVyYXNlcnZpY2UvZGV2aWNlLzIuMC9JQ2FtZXJhRGV2aWNlQ2FsbGJhY2suaD4KKyNpbmNsdWRlIDxhbmRyb2lkL2ZyYW1ld29ya3MvY2FtZXJhc2VydmljZS9kZXZpY2UvMi4wL3R5cGVzLmg+CisjaW5jbHVkZSA8Zm1xL01lc3NhZ2VRdWV1ZS5oPgorI2luY2x1ZGUgPG1lZGlhL3N0YWdlZnJpZ2h0L2ZvdW5kYXRpb24vQUxvb3Blci5oPgorI2luY2x1ZGUgPG1lZGlhL3N0YWdlZnJpZ2h0L2ZvdW5kYXRpb24vQUhhbmRsZXIuaD4KKyNpbmNsdWRlIDxtZWRpYS9zdGFnZWZyaWdodC9mb3VuZGF0aW9uL0FNZXNzYWdlLmg+CisKKyNpbmNsdWRlIDxjYW1lcmEvTmRrQ2FtZXJhTWFuYWdlci5oPgorI2luY2x1ZGUgPGNhbWVyYS9OZGtDYW1lcmFDYXB0dXJlU2Vzc2lvbi5oPgorI2luY2x1ZGUgIkFDYW1lcmFNZXRhZGF0YS5oIgorI2luY2x1ZGUgInV0aWxzLmgiCisKK25hbWVzcGFjZSBhbmRyb2lkIHsKK25hbWVzcGFjZSBhY2FtIHsKKwordXNpbmcgSUNhbWVyYURldmljZUNhbGxiYWNrID0gZnJhbWV3b3Jrczo6Y2FtZXJhc2VydmljZTo6ZGV2aWNlOjpWMl8wOjpJQ2FtZXJhRGV2aWNlQ2FsbGJhY2s7Cit1c2luZyBJQ2FtZXJhRGV2aWNlVXNlciA9IGZyYW1ld29ya3M6OmNhbWVyYXNlcnZpY2U6OmRldmljZTo6VjJfMDo6SUNhbWVyYURldmljZVVzZXI7Cit1c2luZyBDYXB0dXJlUmVzdWx0RXh0cmFzID0gZnJhbWV3b3Jrczo6Y2FtZXJhc2VydmljZTo6ZGV2aWNlOjpWMl8wOjpDYXB0dXJlUmVzdWx0RXh0cmFzOwordXNpbmcgUGh5c2ljYWxDYXB0dXJlUmVzdWx0SW5mbyA9IGZyYW1ld29ya3M6OmNhbWVyYXNlcnZpY2U6OmRldmljZTo6VjJfMDo6UGh5c2ljYWxDYXB0dXJlUmVzdWx0SW5mbzsKK3VzaW5nIFBoeXNpY2FsQ2FtZXJhU2V0dGluZ3MgPSBmcmFtZXdvcmtzOjpjYW1lcmFzZXJ2aWNlOjpkZXZpY2U6OlYyXzA6OlBoeXNpY2FsQ2FtZXJhU2V0dGluZ3M7Cit1c2luZyBTdWJtaXRJbmZvID0gZnJhbWV3b3Jrczo6Y2FtZXJhc2VydmljZTo6ZGV2aWNlOjpWMl8wOjpTdWJtaXRJbmZvOwordXNpbmcgQ2FwdHVyZVJlc3VsdEV4dHJhcyA9IGZyYW1ld29ya3M6OmNhbWVyYXNlcnZpY2U6OmRldmljZTo6VjJfMDo6Q2FwdHVyZVJlc3VsdEV4dHJhczsKK3VzaW5nIEVycm9yQ29kZSA9IGZyYW1ld29ya3M6OmNhbWVyYXNlcnZpY2U6OmRldmljZTo6VjJfMDo6RXJyb3JDb2RlOwordXNpbmcgRm1xU2l6ZU9yTWV0YWRhdGEgPSBmcmFtZXdvcmtzOjpjYW1lcmFzZXJ2aWNlOjpkZXZpY2U6OlYyXzA6OkZtcVNpemVPck1ldGFkYXRhOwordXNpbmcgU3RyZWFtQ29uZmlndXJhdGlvbk1vZGUgPSBmcmFtZXdvcmtzOjpjYW1lcmFzZXJ2aWNlOjpkZXZpY2U6OlYyXzA6OlN0cmVhbUNvbmZpZ3VyYXRpb25Nb2RlOwordXNpbmcgU3RhdHVzID0gZnJhbWV3b3Jrczo6Y2FtZXJhc2VydmljZTo6Y29tbW9uOjpWMl8wOjpTdGF0dXM7Cit1c2luZyBSZXN1bHRNZXRhZGF0YVF1ZXVlID0gaGFyZHdhcmU6Ok1lc3NhZ2VRdWV1ZTx1aW50OF90LCBoYXJkd2FyZTo6a1N5bmNocm9uaXplZFJlYWRXcml0ZT47Cit1c2luZyBSZXF1ZXN0TWV0YWRhdGFRdWV1ZSA9IGhhcmR3YXJlOjpNZXNzYWdlUXVldWU8dWludDhfdCwgaGFyZHdhcmU6OmtTeW5jaHJvbml6ZWRSZWFkV3JpdGU+OwordXNpbmcgQ2FtZXJhU3RhdHVzQW5kSWQgPSBmcmFtZXdvcmtzOjpjYW1lcmFzZXJ2aWNlOjpzZXJ2aWNlOjpWMl8wOjpDYW1lcmFTdGF0dXNBbmRJZDsKKwordXNpbmcgaGFyZHdhcmU6OmhpZGxfdmVjOwordXNpbmcgaGFyZHdhcmU6OmhpZGxfc3RyaW5nOwordXNpbmcgdXRpbHM6Om5hdGl2ZV9oYW5kbGVfcHRyX3dyYXBwZXI7Cit1c2luZyB1dGlsczo6Q2FwdHVyZVJlcXVlc3Q7Cit1c2luZyB1dGlsczo6T3V0cHV0Q29uZmlndXJhdGlvbldyYXBwZXI7CisKKy8vIFdyYXAgQUNhbWVyYUNhcHR1cmVGYWlsdXJlIHNvIGl0IGNhbiBiZSByZWYtY291bnRlZAorc3RydWN0IENhbWVyYUNhcHR1cmVGYWlsdXJlIDogcHVibGljIFJlZkJhc2UsIHB1YmxpYyBBQ2FtZXJhQ2FwdHVyZUZhaWx1cmUgeyB9OworCitjbGFzcyBDYW1lcmFEZXZpY2UgZmluYWwgOiBwdWJsaWMgUmVmQmFzZSB7CisgIHB1YmxpYzoKKyAgICBDYW1lcmFEZXZpY2UoY29uc3QgY2hhciogaWQsIEFDYW1lcmFEZXZpY2VfU3RhdGVDYWxsYmFja3MqIGNiLAorICAgICAgICAgICAgICAgICAgc3A8QUNhbWVyYU1ldGFkYXRhPiBjaGFycywKKyAgICAgICAgICAgICAgICAgIEFDYW1lcmFEZXZpY2UqIHdyYXBwZXIpOworICAgIH5DYW1lcmFEZXZpY2UoKTsKKworICAgIGlubGluZSBjb25zdCBjaGFyKiBnZXRJZCgpIGNvbnN0IHsgcmV0dXJuIG1DYW1lcmFJZC5jX3N0cigpOyB9CisKKyAgICBjYW1lcmFfc3RhdHVzX3QgY3JlYXRlQ2FwdHVyZVJlcXVlc3QoCisgICAgICAgICAgICBBQ2FtZXJhRGV2aWNlX3JlcXVlc3RfdGVtcGxhdGUgdGVtcGxhdGVJZCwKKyAgICAgICAgICAgIEFDYXB0dXJlUmVxdWVzdCoqIHJlcXVlc3QpIGNvbnN0OworCisgICAgY2FtZXJhX3N0YXR1c190IGNyZWF0ZUNhcHR1cmVTZXNzaW9uKAorICAgICAgICAgICAgY29uc3QgQUNhcHR1cmVTZXNzaW9uT3V0cHV0Q29udGFpbmVyKiAgICAgICBvdXRwdXRzLAorICAgICAgICAgICAgY29uc3QgQUNhcHR1cmVSZXF1ZXN0KiBzZXNzaW9uUGFyYW1ldGVycywKKyAgICAgICAgICAgIGNvbnN0IEFDYW1lcmFDYXB0dXJlU2Vzc2lvbl9zdGF0ZUNhbGxiYWNrcyogY2FsbGJhY2tzLAorICAgICAgICAgICAgLypvdXQqL0FDYW1lcmFDYXB0dXJlU2Vzc2lvbioqIHNlc3Npb24pOworCisgICAgLy8gQ2FsbGJhY2tzIGZyb20gY2FtZXJhIHNlcnZpY2UKKyAgICBjbGFzcyBTZXJ2aWNlQ2FsbGJhY2sgOiBwdWJsaWMgSUNhbWVyYURldmljZUNhbGxiYWNrIHsKKyAgICAgIHB1YmxpYzoKKyAgICAgICAgZXhwbGljaXQgU2VydmljZUNhbGxiYWNrKENhbWVyYURldmljZSogZGV2aWNlKSA6IG1EZXZpY2UoZGV2aWNlKSB7fQorICAgICAgICBhbmRyb2lkOjpoYXJkd2FyZTo6UmV0dXJuPHZvaWQ+IG9uRGV2aWNlRXJyb3IoRXJyb3JDb2RlIGVycm9yQ29kZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IENhcHR1cmVSZXN1bHRFeHRyYXMmIHJlc3VsdEV4dHJhcykgb3ZlcnJpZGU7CisgICAgICAgIGFuZHJvaWQ6OmhhcmR3YXJlOjpSZXR1cm48dm9pZD4gb25EZXZpY2VJZGxlKCkgb3ZlcnJpZGU7CisgICAgICAgIGFuZHJvaWQ6OmhhcmR3YXJlOjpSZXR1cm48dm9pZD4gb25DYXB0dXJlU3RhcnRlZChjb25zdCBDYXB0dXJlUmVzdWx0RXh0cmFzJiByZXN1bHRFeHRyYXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50NjRfdCB0aW1lc3RhbXApIG92ZXJyaWRlOworICAgICAgICBhbmRyb2lkOjpoYXJkd2FyZTo6UmV0dXJuPHZvaWQ+IG9uUmVzdWx0UmVjZWl2ZWQoY29uc3QgRm1xU2l6ZU9yTWV0YWRhdGEmIHJlc3VsdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IENhcHR1cmVSZXN1bHRFeHRyYXMmIHJlc3VsdEV4dHJhcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGhpZGxfdmVjPFBoeXNpY2FsQ2FwdHVyZVJlc3VsdEluZm8+JiBwaHlzaWNhbFJlc3VsdEluZm9zKSBvdmVycmlkZTsKKyAgICAgICAgYW5kcm9pZDo6aGFyZHdhcmU6OlJldHVybjx2b2lkPiBvblJlcGVhdGluZ1JlcXVlc3RFcnJvcih1aW50NjRfdCBsYXN0RnJhbWVOdW1iZXIsCisgICAgICAgICAgICAgICAgaW50MzJfdCBzdG9wcGVkU2VxdWVuY2VJZCkgb3ZlcnJpZGU7CisgICAgICBwcml2YXRlOgorICAgICAgICBjb25zdCB3cDxDYW1lcmFEZXZpY2U+IG1EZXZpY2U7CisgICAgfTsKKyAgICBpbmxpbmUgc3A8SUNhbWVyYURldmljZUNhbGxiYWNrPiBnZXRTZXJ2aWNlQ2FsbGJhY2soKSB7CisgICAgICAgIHJldHVybiBtU2VydmljZUNhbGxiYWNrOworICAgIH07CisKKyAgICAvLyBDYW1lcmEgZGV2aWNlIGlzIG9ubHkgZnVuY3Rpb25hbCBhZnRlciByZW1vdGUgYmVpbmcgc2V0CisgICAgdm9pZCBzZXRSZW1vdGVEZXZpY2Uoc3A8SUNhbWVyYURldmljZVVzZXI+IHJlbW90ZSk7CisKKyAgICBib29sIHNldERldmljZU1ldGFkYXRhUXVldWVzKCk7CisgICAgaW5saW5lIEFDYW1lcmFEZXZpY2UqIGdldFdyYXBwZXIoKSBjb25zdCB7IHJldHVybiBtV3JhcHBlcjsgfTsKKworICBwcml2YXRlOgorICAgIGZyaWVuZCBBQ2FtZXJhQ2FwdHVyZVNlc3Npb247CisKKyAgICBjYW1lcmFfc3RhdHVzX3QgY2hlY2tDYW1lcmFDbG9zZWRPckVycm9yTG9ja2VkKCkgY29uc3Q7CisKKyAgICAvLyBkZXZpY2UgZ29lcyBpbnRvIGZhdGFsIGVycm9yIHN0YXRlIGFmdGVyIHRoaXMKKyAgICB2b2lkIHNldENhbWVyYURldmljZUVycm9yTG9ja2VkKGNhbWVyYV9zdGF0dXNfdCBlcnJvcik7CisKKyAgICB2b2lkIGRpc2Nvbm5lY3RMb2NrZWQoc3A8QUNhbWVyYUNhcHR1cmVTZXNzaW9uPiYgc2Vzc2lvbik7IC8vIGRpc2Nvbm5lY3QgZnJvbSBjYW1lcmEgc2VydmljZQorCisgICAgY2FtZXJhX3N0YXR1c190IHN0b3BSZXBlYXRpbmdMb2NrZWQoKTsKKworICAgIGNhbWVyYV9zdGF0dXNfdCBmbHVzaExvY2tlZChBQ2FtZXJhQ2FwdHVyZVNlc3Npb24qKTsKKworICAgIGNhbWVyYV9zdGF0dXNfdCB3YWl0VW50aWxJZGxlTG9ja2VkKCk7CisKKworICAgIGNhbWVyYV9zdGF0dXNfdCBjYXB0dXJlTG9ja2VkKHNwPEFDYW1lcmFDYXB0dXJlU2Vzc2lvbj4gc2Vzc2lvbiwKKyAgICAgICAgICAgIC8qb3B0aW9uYWwqL0FDYW1lcmFDYXB0dXJlU2Vzc2lvbl9jYXB0dXJlQ2FsbGJhY2tzKiBjYnMsCisgICAgICAgICAgICBpbnQgbnVtUmVxdWVzdHMsIEFDYXB0dXJlUmVxdWVzdCoqIHJlcXVlc3RzLAorICAgICAgICAgICAgLypvcHRpb25hbCovaW50KiBjYXB0dXJlU2VxdWVuY2VJZCk7CisKKyAgICBjYW1lcmFfc3RhdHVzX3Qgc2V0UmVwZWF0aW5nUmVxdWVzdHNMb2NrZWQoc3A8QUNhbWVyYUNhcHR1cmVTZXNzaW9uPiBzZXNzaW9uLAorICAgICAgICAgICAgLypvcHRpb25hbCovQUNhbWVyYUNhcHR1cmVTZXNzaW9uX2NhcHR1cmVDYWxsYmFja3MqIGNicywKKyAgICAgICAgICAgIGludCBudW1SZXF1ZXN0cywgQUNhcHR1cmVSZXF1ZXN0KiogcmVxdWVzdHMsCisgICAgICAgICAgICAvKm9wdGlvbmFsKi9pbnQqIGNhcHR1cmVTZXF1ZW5jZUlkKTsKKworICAgIGNhbWVyYV9zdGF0dXNfdCBzdWJtaXRSZXF1ZXN0c0xvY2tlZCgKKyAgICAgICAgICAgIHNwPEFDYW1lcmFDYXB0dXJlU2Vzc2lvbj4gc2Vzc2lvbiwKKyAgICAgICAgICAgIC8qb3B0aW9uYWwqL0FDYW1lcmFDYXB0dXJlU2Vzc2lvbl9jYXB0dXJlQ2FsbGJhY2tzKiBjYnMsCisgICAgICAgICAgICBpbnQgbnVtUmVxdWVzdHMsIEFDYXB0dXJlUmVxdWVzdCoqIHJlcXVlc3RzLAorICAgICAgICAgICAgLypvdXQqL2ludCogY2FwdHVyZVNlcXVlbmNlSWQsCisgICAgICAgICAgICBib29sIGlzUmVwZWF0aW5nKTsKKworICAgIGNhbWVyYV9zdGF0dXNfdCB1cGRhdGVPdXRwdXRDb25maWd1cmF0aW9uTG9ja2VkKEFDYXB0dXJlU2Vzc2lvbk91dHB1dCAqb3V0cHV0KTsKKworICAgIGNhbWVyYV9zdGF0dXNfdCBhbGxvY2F0ZUNhcHR1cmVSZXF1ZXN0KAorICAgICAgICAgICAgY29uc3QgQUNhcHR1cmVSZXF1ZXN0KiByZXF1ZXN0LCBzcDxDYXB0dXJlUmVxdWVzdD4mIG91dFJlcSk7CisKKyAgICBzdGF0aWMgQUNhcHR1cmVSZXF1ZXN0KiBhbGxvY2F0ZUFDYXB0dXJlUmVxdWVzdChzcDxDYXB0dXJlUmVxdWVzdD4mIHJlcSk7CisgICAgc3RhdGljIHZvaWQgZnJlZUFDYXB0dXJlUmVxdWVzdChBQ2FwdHVyZVJlcXVlc3QqKTsKKworICAgIC8vIG9ubHkgRm9yIHNlc3Npb24gdG8gaG9sZCBkZXZpY2UgbG9jaworICAgIC8vIEFsd2F5cyBncmFiIGRldmljZSBsb2NrIGJlZm9yZSBncmFiYmluZyBzZXNzaW9uIGxvY2sKKyAgICB2b2lkIGxvY2tEZXZpY2VGb3JTZXNzaW9uT3BzKCkgY29uc3QgeyBtRGV2aWNlTG9jay5sb2NrKCk7IH07CisgICAgdm9pZCB1bmxvY2tEZXZpY2UoKSBjb25zdCB7IG1EZXZpY2VMb2NrLnVubG9jaygpOyB9OworCisgICAgLy8gRm9yIGNhcHR1cmUgc2Vzc2lvbiB0byBub3RpZnkgaXRzIGVuZCBvZiBsaWZlCisgICAgdm9pZCBub3RpZnlTZXNzaW9uRW5kT2ZMaWZlTG9ja2VkKEFDYW1lcmFDYXB0dXJlU2Vzc2lvbiogc2Vzc2lvbik7CisKKyAgICBjYW1lcmFfc3RhdHVzX3QgY29uZmlndXJlU3RyZWFtc0xvY2tlZChjb25zdCBBQ2FwdHVyZVNlc3Npb25PdXRwdXRDb250YWluZXIqIG91dHB1dHMsCisgICAgICAgICAgIGNvbnN0IEFDYXB0dXJlUmVxdWVzdCogc2Vzc2lvblBhcmFtZXRlcnMpOworCisgICAgLy8gSW5wdXQgbWVzc2FnZSB3aWxsIGJlIHBvc3RlZCBhbmQgY2xlYXJlZCBhZnRlciB0aGlzIHJldHVybnMKKyAgICB2b2lkIHBvc3RTZXNzaW9uTXNnQW5kQ2xlYW51cChzcDxBTWVzc2FnZT4mIG1zZyk7CisKKyAgICBtdXRhYmxlIE11dGV4IG1EZXZpY2VMb2NrOworICAgIGNvbnN0IGhpZGxfc3RyaW5nIG1DYW1lcmFJZDsgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIENhbWVyYSBJRAorICAgIGNvbnN0IEFDYW1lcmFEZXZpY2VfU3RhdGVDYWxsYmFja3MgbUFwcENhbGxiYWNrczsgLy8gQ2FsbGJhY2sgdG8gYXBwCisgICAgY29uc3Qgc3A8QUNhbWVyYU1ldGFkYXRhPiBtQ2hhcnM7ICAgIC8vIENhbWVyYSBjaGFyYWN0ZXJpc3RpY3MKKyAgICBjb25zdCBzcDxTZXJ2aWNlQ2FsbGJhY2s+IG1TZXJ2aWNlQ2FsbGJhY2s7CisgICAgQUNhbWVyYURldmljZSogbVdyYXBwZXI7CisKKyAgICAvLyBzdHJlYW0gaWQgLT4gcGFpciBvZiAoQUNhbWVyYVdpbmRvd1R5cGUqIGZyb20gYXBwbGljYXRpb24sIE91dHB1dENvbmZpZ3VyYXRpb24gdXNlZCBmb3IKKyAgICAvLyBjYW1lcmEgc2VydmljZSkKKyAgICBzdGQ6Om1hcDxpbnQsIHN0ZDo6cGFpcjxuYXRpdmVfaGFuZGxlX3B0cl93cmFwcGVyLCBPdXRwdXRDb25maWd1cmF0aW9uV3JhcHBlcj4+IG1Db25maWd1cmVkT3V0cHV0czsKKworICAgIC8vIFRPRE86IG1heWJlIGEgYm9vbCB3aWxsIHN1ZmZpY2UgZm9yIHN5bmNocm9ub3VzIGltcGxlbWVudGF0aW9uPworICAgIHN0ZDo6YXRvbWljX2Jvb2wgbUNsb3Npbmc7CisgICAgaW5saW5lIGJvb2wgaXNDbG9zZWQoKSB7IHJldHVybiBtQ2xvc2luZzsgfQorCisgICAgYm9vbCBtSW5FcnJvciA9IGZhbHNlOworICAgIGNhbWVyYV9zdGF0dXNfdCBtRXJyb3IgPSBBQ0FNRVJBX09LOworICAgIHZvaWQgb25DYXB0dXJlRXJyb3JMb2NrZWQoCisgICAgICAgICAgICBFcnJvckNvZGUgZXJyb3JDb2RlLAorICAgICAgICAgICAgY29uc3QgQ2FwdHVyZVJlc3VsdEV4dHJhcyYgcmVzdWx0RXh0cmFzKTsKKworICAgIGJvb2wgbUlkbGUgPSB0cnVlOworICAgIC8vIFRoaXMgd2lsbCBhdm9pZCBhIGJ1c3kgc2Vzc2lvbiBiZWluZyBkZWxldGVkIGJlZm9yZSBpdCdzIGJhY2sgdG8gaWRsZSBzdGF0ZQorICAgIHNwPEFDYW1lcmFDYXB0dXJlU2Vzc2lvbj4gbUJ1c3lTZXNzaW9uOworCisgICAgc3A8SUNhbWVyYURldmljZVVzZXI+IG1SZW1vdGU7CisKKyAgICAvLyBMb29wZXIgdGhyZWFkIHRvIGhhbmRsZSBjYWxsYmFjayB0byBhcHAKKyAgICBzcDxBTG9vcGVyPiBtQ2JMb29wZXI7CisgICAgLy8gZGVmaW5pdGlvbiBvZiBoYW5kbGVyIGFuZCBtZXNzYWdlCisgICAgZW51bSB7CisgICAgICAgIC8vIERldmljZSBzdGF0ZSBjYWxsYmFja3MKKyAgICAgICAga1doYXRPbkRpc2Nvbm5lY3RlZCwgICAvLyBvbkRpc2Nvbm5lY3RlZAorICAgICAgICBrV2hhdE9uRXJyb3IsICAgICAgICAgIC8vIG9uRXJyb3IKKyAgICAgICAgLy8gU2Vzc2lvbiBzdGF0ZSBjYWxsYmFja3MKKyAgICAgICAga1doYXRTZXNzaW9uU3RhdGVDYiwgICAvLyBvblJlYWR5LCBvbkFjdGl2ZQorICAgICAgICAvLyBDYXB0dXJlIGNhbGxiYWNrcworICAgICAgICBrV2hhdENhcHR1cmVTdGFydCwgICAgIC8vIG9uQ2FwdHVyZVN0YXJ0ZWQKKyAgICAgICAga1doYXRDYXB0dXJlUmVzdWx0LCAgICAvLyBvbkNhcHR1cmVQcm9ncmVzc2VkLCBvbkNhcHR1cmVDb21wbGV0ZWQKKyAgICAgICAga1doYXRDYXB0dXJlRmFpbCwgICAgICAvLyBvbkNhcHR1cmVGYWlsZWQKKyAgICAgICAga1doYXRDYXB0dXJlU2VxRW5kLCAgICAvLyBvbkNhcHR1cmVTZXF1ZW5jZUNvbXBsZXRlZAorICAgICAgICBrV2hhdENhcHR1cmVTZXFBYm9ydCwgIC8vIG9uQ2FwdHVyZVNlcXVlbmNlQWJvcnRlZAorICAgICAgICBrV2hhdENhcHR1cmVCdWZmZXJMb3N0LC8vIG9uQ2FwdHVyZUJ1ZmZlckxvc3QKKyAgICAgICAgLy8gSW50ZXJuYWwgY2xlYW51cAorICAgICAgICBrV2hhdENsZWFuVXBTZXNzaW9ucyAgIC8vIENsZWFudXAgY2FjaGVkIHNwPEFDYW1lcmFDYXB0dXJlU2Vzc2lvbj4KKyAgICB9OworICAgIHN0YXRpYyBjb25zdCBjaGFyKiBrQ29udGV4dEtleTsKKyAgICBzdGF0aWMgY29uc3QgY2hhcioga0RldmljZUtleTsKKyAgICBzdGF0aWMgY29uc3QgY2hhcioga0Vycm9yQ29kZUtleTsKKyAgICBzdGF0aWMgY29uc3QgY2hhcioga0NhbGxiYWNrRnBLZXk7CisgICAgc3RhdGljIGNvbnN0IGNoYXIqIGtTZXNzaW9uU3BLZXk7CisgICAgc3RhdGljIGNvbnN0IGNoYXIqIGtDYXB0dXJlUmVxdWVzdEtleTsKKyAgICBzdGF0aWMgY29uc3QgY2hhcioga1RpbWVTdGFtcEtleTsKKyAgICBzdGF0aWMgY29uc3QgY2hhcioga0NhcHR1cmVSZXN1bHRLZXk7CisgICAgc3RhdGljIGNvbnN0IGNoYXIqIGtDYXB0dXJlRmFpbHVyZUtleTsKKyAgICBzdGF0aWMgY29uc3QgY2hhcioga1NlcXVlbmNlSWRLZXk7CisgICAgc3RhdGljIGNvbnN0IGNoYXIqIGtGcmFtZU51bWJlcktleTsKKyAgICBzdGF0aWMgY29uc3QgY2hhcioga0Fud0tleTsKKworICAgIGNsYXNzIENhbGxiYWNrSGFuZGxlciA6IHB1YmxpYyBBSGFuZGxlciB7CisgICAgICBwdWJsaWM6CisgICAgICAgIHZvaWQgb25NZXNzYWdlUmVjZWl2ZWQoY29uc3Qgc3A8QU1lc3NhZ2U+ICZtc2cpIG92ZXJyaWRlOworCisgICAgICBwcml2YXRlOgorICAgICAgICAvLyBUaGlzIGhhbmRsZXIgd2lsbCBjYWNoZSBhbGwgY2FwdHVyZSBzZXNzaW9uIHNwIHVudGlsIGtXaGF0Q2xlYW5VcFNlc3Npb25zCisgICAgICAgIC8vIGlzIHByb2Nlc3NlZC4gVGhpcyBpcyB1c2VkIHRvIGd1YXJhbnRlZSB0aGUgbGFzdCBzZXNzaW9uIHJlZmVyZW5jZSBpcyBhbHdheXMKKyAgICAgICAgLy8gYmVpbmcgcmVtb3ZlZCBpbiBjYWxsYmFjayB0aHJlYWQgd2l0aG91dCBob2xkaW5nIGNhbWVyYSBkZXZpY2UgbG9jaworICAgICAgICBWZWN0b3I8c3A8QUNhbWVyYUNhcHR1cmVTZXNzaW9uPj4gbUNhY2hlZFNlc3Npb25zOworICAgIH07CisgICAgc3A8Q2FsbGJhY2tIYW5kbGVyPiBtSGFuZGxlcjsKKworICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAgICAqIENhcHR1cmUgc2Vzc2lvbiByZWxhdGVkIG1lbWJlcnMgKgorICAgICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgICAvLyBUaGUgY3VycmVudCBhY3RpdmUgc2Vzc2lvbgorICAgIHdwPEFDYW1lcmFDYXB0dXJlU2Vzc2lvbj4gbUN1cnJlbnRTZXNzaW9uOworICAgIGJvb2wgbUZsdXNoaW5nID0gZmFsc2U7CisKKyAgICBpbnQgbU5leHRTZXNzaW9uSWQgPSAwOworICAgIC8vIFRPRE86IG1pZ2h0IG5lZWQgYW5vdGhlciBsb29wZXIvaGFuZGxlciB0byBoYW5kbGUgY2FsbGJhY2tzIGZyb20gc2VydmljZQorCisgICAgc3RhdGljIGNvbnN0IGludCBSRVFVRVNUX0lEX05PTkUgPSAtMTsKKyAgICBpbnQgbVJlcGVhdGluZ1NlcXVlbmNlSWQgPSBSRVFVRVNUX0lEX05PTkU7CisKKyAgICAvLyBzZXF1ZW5jZSBpZCAtPiBsYXN0IGZyYW1lIG51bWJlciBtYXAKKyAgICBzdGQ6Om1hcDxpbnQzMl90LCBpbnQ2NF90PiBtU2VxdWVuY2VMYXN0RnJhbWVOdW1iZXJNYXA7CisKKyAgICBzdHJ1Y3QgQ2FsbGJhY2tIb2xkZXIgeworICAgICAgICBDYWxsYmFja0hvbGRlcihzcDxBQ2FtZXJhQ2FwdHVyZVNlc3Npb24+ICAgICAgICAgIHNlc3Npb24sCisgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFZlY3RvcjxzcDxDYXB0dXJlUmVxdWVzdD4+JiAgcmVxdWVzdHMsCisgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXNSZXBlYXRpbmcsCisgICAgICAgICAgICAgICAgICAgICAgIEFDYW1lcmFDYXB0dXJlU2Vzc2lvbl9jYXB0dXJlQ2FsbGJhY2tzKiBjYnMpOworCisgICAgICAgIHN0YXRpYyBBQ2FtZXJhQ2FwdHVyZVNlc3Npb25fY2FwdHVyZUNhbGxiYWNrcyBmaWxsQ2IoCisgICAgICAgICAgICAgICAgQUNhbWVyYUNhcHR1cmVTZXNzaW9uX2NhcHR1cmVDYWxsYmFja3MqIGNicykgeworICAgICAgICAgICAgaWYgKGNicyAhPSBudWxscHRyKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuICpjYnM7CisgICAgICAgICAgICB9CisgICAgICAgICAgICByZXR1cm4geyBudWxscHRyLCBudWxscHRyLCBudWxscHRyLCBudWxscHRyLCBudWxscHRyLCBudWxscHRyLCBudWxscHRyLCBudWxscHRyIH07CisgICAgICAgIH0KKworICAgICAgICBzcDxBQ2FtZXJhQ2FwdHVyZVNlc3Npb24+ICAgbVNlc3Npb247CisgICAgICAgIFZlY3RvcjxzcDxDYXB0dXJlUmVxdWVzdD4+IG1SZXF1ZXN0czsKKyAgICAgICAgY29uc3QgYm9vbCAgICAgICAgICAgICAgICAgIG1Jc1JlcGVhdGluZzsKKyAgICAgICAgQUNhbWVyYUNhcHR1cmVTZXNzaW9uX2NhcHR1cmVDYWxsYmFja3MgbUNhbGxiYWNrczsKKyAgICB9OworICAgIC8vIHNlcXVlbmNlIGlkIC0+IGNhbGxiYWNrcyBtYXAKKyAgICBzdGQ6Om1hcDxpbnQsIENhbGxiYWNrSG9sZGVyPiBtU2VxdWVuY2VDYWxsYmFja01hcDsKKworICAgIHN0YXRpYyBjb25zdCBpbnQ2NF90IE5PX0ZSQU1FU19DQVBUVVJFRCA9IC0xOworICAgIGNsYXNzIEZyYW1lTnVtYmVyVHJhY2tlciB7CisgICAgICBwdWJsaWM6CisgICAgICAgIC8vIFRPRE86IENhbGxlZCBpbiBvblJlc3VsdFJlY2VpdmVkIGFuZCBvbkNhcHR1cmVFcnJvckxvY2tlZAorICAgICAgICB2b2lkIHVwZGF0ZVRyYWNrZXIoaW50NjRfdCBmcmFtZU51bWJlciwgYm9vbCBpc0Vycm9yKTsKKyAgICAgICAgaW5saW5lIGludDY0X3QgZ2V0Q29tcGxldGVkRnJhbWVOdW1iZXIoKSB7IHJldHVybiBtQ29tcGxldGVkRnJhbWVOdW1iZXI7IH0KKyAgICAgIHByaXZhdGU6CisgICAgICAgIHZvaWQgdXBkYXRlKCk7CisgICAgICAgIHZvaWQgdXBkYXRlQ29tcGxldGVkRnJhbWVOdW1iZXIoaW50NjRfdCBmcmFtZU51bWJlcik7CisKKyAgICAgICAgaW50NjRfdCBtQ29tcGxldGVkRnJhbWVOdW1iZXIgPSBOT19GUkFNRVNfQ0FQVFVSRUQ7CisgICAgICAgIExpc3Q8aW50NjRfdD4gbVNraXBwZWRGcmFtZU51bWJlcnM7CisgICAgICAgIHN0ZDo6c2V0PGludDY0X3Q+IG1GdXR1cmVFcnJvclNldDsKKyAgICB9OworICAgIEZyYW1lTnVtYmVyVHJhY2tlciBtRnJhbWVOdW1iZXJUcmFja2VyOworCisgICAgdm9pZCBjaGVja1JlcGVhdGluZ1NlcXVlbmNlQ29tcGxldGVMb2NrZWQoY29uc3QgaW50IHNlcXVlbmNlSWQsIGNvbnN0IGludDY0X3QgbGFzdEZyYW1lTnVtYmVyKTsKKyAgICB2b2lkIGNoZWNrQW5kRmlyZVNlcXVlbmNlQ29tcGxldGVMb2NrZWQoKTsKKworICAgIC8vIE1pc2MgdmFyaWFibGVzCisgICAgaW50MzJfdCBtU2hhZGluZ01hcFNpemVbMl07ICAgLy8gY29uc3QgYWZ0ZXIgY29uc3RydWN0b3IKKyAgICBpbnQzMl90IG1QYXJ0aWFsUmVzdWx0Q291bnQ7ICAvLyBjb25zdCBhZnRlciBjb25zdHJ1Y3RvcgorICAgIHN0ZDo6c2hhcmVkX3B0cjxSZXN1bHRNZXRhZGF0YVF1ZXVlPiBtQ2FwdHVyZVJlcXVlc3RNZXRhZGF0YVF1ZXVlID0gbnVsbHB0cjsKKyAgICBzdGQ6OnNoYXJlZF9wdHI8UmVzdWx0TWV0YWRhdGFRdWV1ZT4gbUNhcHR1cmVSZXN1bHRNZXRhZGF0YVF1ZXVlID0gbnVsbHB0cjsKK307CisKK30gLy8gbmFtZXNwYWNlIGFjYW07Cit9IC8vIG5hbWVzcGFjZSBhbmRyb2lkOworCisvKioKKyAqIEFDYW1lcmFEZXZpY2Ugb3BhcXVlIHN0cnVjdCBkZWZpbml0aW9uCisgKiBMZWF2ZSBvdXRzaWRlIG9mIGFuZHJvaWQgbmFtZXNwYWNlIGJlY2F1c2UgaXQncyBOREsgc3RydWN0CisgKi8KK3N0cnVjdCBBQ2FtZXJhRGV2aWNlIHsKKyAgICBBQ2FtZXJhRGV2aWNlKGNvbnN0IGNoYXIqIGlkLCBBQ2FtZXJhRGV2aWNlX1N0YXRlQ2FsbGJhY2tzKiBjYiwKKyAgICAgICAgICAgICAgICAgIHNwPEFDYW1lcmFNZXRhZGF0YT4gY2hhcnMpIDoKKyAgICAgICAgICAgIG1EZXZpY2UobmV3IGFuZHJvaWQ6OmFjYW06OkNhbWVyYURldmljZShpZCwgY2IsIHN0ZDo6bW92ZShjaGFycyksIHRoaXMpKSB7fQorCisgICAgfkFDYW1lcmFEZXZpY2UoKSB7fTsKKworICAgIC8qKioqKioqKioqKioqKioqKioqCisgICAgICogTkRLIHB1YmxpYyBBUElzICoKKyAgICAgKioqKioqKioqKioqKioqKioqKi8KKyAgICBpbmxpbmUgY29uc3QgY2hhciogZ2V0SWQoKSBjb25zdCB7IHJldHVybiBtRGV2aWNlLT5nZXRJZCgpOyB9CisKKyAgICBjYW1lcmFfc3RhdHVzX3QgY3JlYXRlQ2FwdHVyZVJlcXVlc3QoCisgICAgICAgICAgICBBQ2FtZXJhRGV2aWNlX3JlcXVlc3RfdGVtcGxhdGUgdGVtcGxhdGVJZCwKKyAgICAgICAgICAgIEFDYXB0dXJlUmVxdWVzdCoqIHJlcXVlc3QpIGNvbnN0IHsKKyAgICAgICAgcmV0dXJuIG1EZXZpY2UtPmNyZWF0ZUNhcHR1cmVSZXF1ZXN0KHRlbXBsYXRlSWQsIHJlcXVlc3QpOworICAgIH0KKworICAgIGNhbWVyYV9zdGF0dXNfdCBjcmVhdGVDYXB0dXJlU2Vzc2lvbigKKyAgICAgICAgICAgIGNvbnN0IEFDYXB0dXJlU2Vzc2lvbk91dHB1dENvbnRhaW5lciogICAgICAgb3V0cHV0cywKKyAgICAgICAgICAgIGNvbnN0IEFDYXB0dXJlUmVxdWVzdCogc2Vzc2lvblBhcmFtZXRlcnMsCisgICAgICAgICAgICBjb25zdCBBQ2FtZXJhQ2FwdHVyZVNlc3Npb25fc3RhdGVDYWxsYmFja3MqIGNhbGxiYWNrcywKKyAgICAgICAgICAgIC8qb3V0Ki9BQ2FtZXJhQ2FwdHVyZVNlc3Npb24qKiBzZXNzaW9uKSB7CisgICAgICAgIHJldHVybiBtRGV2aWNlLT5jcmVhdGVDYXB0dXJlU2Vzc2lvbihvdXRwdXRzLCBzZXNzaW9uUGFyYW1ldGVycywgY2FsbGJhY2tzLCBzZXNzaW9uKTsKKyAgICB9CisKKyAgICAvKioqKioqKioqKioqKioqKioqKioqKioKKyAgICAgKiBEZXZpY2UgaW50ZXJhbCBBUElzICoKKyAgICAgKioqKioqKioqKioqKioqKioqKioqKiovCisgICAgaW5saW5lIGFuZHJvaWQ6OnNwPGFuZHJvaWQ6OmFjYW06OklDYW1lcmFEZXZpY2VDYWxsYmFjaz4gZ2V0U2VydmljZUNhbGxiYWNrKCkgeworICAgICAgICByZXR1cm4gbURldmljZS0+Z2V0U2VydmljZUNhbGxiYWNrKCk7CisgICAgfTsKKworICAgIC8vIENhbWVyYSBkZXZpY2UgaXMgb25seSBmdW5jdGlvbmFsIGFmdGVyIHJlbW90ZSBiZWluZyBzZXQKKyAgICBpbmxpbmUgdm9pZCBzZXRSZW1vdGVEZXZpY2UoYW5kcm9pZDo6c3A8YW5kcm9pZDo6YWNhbTo6SUNhbWVyYURldmljZVVzZXI+IHJlbW90ZSkgeworICAgICAgICBtRGV2aWNlLT5zZXRSZW1vdGVEZXZpY2UocmVtb3RlKTsKKyAgICB9CisgICAgaW5saW5lIGJvb2wgc2V0RGV2aWNlTWV0YWRhdGFRdWV1ZXMoKSB7CisgICAgICAgIHJldHVybiBtRGV2aWNlLT5zZXREZXZpY2VNZXRhZGF0YVF1ZXVlcygpOworICAgIH0KKyAgcHJpdmF0ZToKKyAgICBhbmRyb2lkOjpzcDxhbmRyb2lkOjphY2FtOjpDYW1lcmFEZXZpY2U+IG1EZXZpY2U7Cit9OworCisjZW5kaWYgLy8gX0FDQU1FUkFfREVWSUNFX0gKZGlmZiAtLWdpdCBhL2NhbWVyYS9uZGsvbmRrX3ZlbmRvci9pbXBsL0FDYW1lcmFNYW5hZ2VyLmNwcCBiL2NhbWVyYS9uZGsvbmRrX3ZlbmRvci9pbXBsL0FDYW1lcmFNYW5hZ2VyLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mMzk1YjQ0Ci0tLSAvZGV2L251bGwKKysrIGIvY2FtZXJhL25kay9uZGtfdmVuZG9yL2ltcGwvQUNhbWVyYU1hbmFnZXIuY3BwCkBAIC0wLDAgKzEsNDU4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE4IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KKworLy8jZGVmaW5lIExPR19OREVCVUcgMAorI2RlZmluZSBMT0dfVEFHICJBQ2FtZXJhTWFuYWdlclZlbmRvciIKKworI2luY2x1ZGUgPG1lbW9yeT4KKyNpbmNsdWRlICJuZGtfdmVuZG9yL2ltcGwvQUNhbWVyYU1hbmFnZXIuaCIKKyNpbmNsdWRlICJBQ2FtZXJhTWV0YWRhdGEuaCIKKyNpbmNsdWRlICJuZGtfdmVuZG9yL2ltcGwvQUNhbWVyYURldmljZS5oIgorI2luY2x1ZGUgInV0aWxzLmgiCisKKyNpbmNsdWRlIDx1dGlscy9WZWN0b3IuaD4KKyNpbmNsdWRlIDxjdXRpbHMvcHJvcGVydGllcy5oPgorI2luY2x1ZGUgPHN0ZGxpYi5oPgorCisjaW5jbHVkZSA8VmVuZG9yVGFnRGVzY3JpcHRvci5oPgorCit1c2luZyBuYW1lc3BhY2UgYW5kcm9pZDo6YWNhbTsKKworbmFtZXNwYWNlIGFuZHJvaWQgeworbmFtZXNwYWNlIGFjYW0geworCit1c2luZyBDYW1lcmFTdGF0dXNBbmRJZCA9IGZyYW1ld29ya3M6OmNhbWVyYXNlcnZpY2U6OnNlcnZpY2U6OlYyXzA6OkNhbWVyYVN0YXR1c0FuZElkOworCisvLyBTdGF0aWMgbWVtYmVyIGRlZmluaXRpb25zCitjb25zdCBjaGFyKiBDYW1lcmFNYW5hZ2VyR2xvYmFsOjprQ2FtZXJhSWRLZXkgICA9ICJDYW1lcmFJZCI7Citjb25zdCBjaGFyKiBDYW1lcmFNYW5hZ2VyR2xvYmFsOjprQ2FsbGJhY2tGcEtleSA9ICJDYWxsYmFja0ZwIjsKK2NvbnN0IGNoYXIqIENhbWVyYU1hbmFnZXJHbG9iYWw6OmtDb250ZXh0S2V5ICAgID0gIkNhbGxiYWNrQ29udGV4dCI7CitNdXRleCAgICAgICAgICAgICAgICBDYW1lcmFNYW5hZ2VyR2xvYmFsOjpzTG9jazsKK0NhbWVyYU1hbmFnZXJHbG9iYWwqIENhbWVyYU1hbmFnZXJHbG9iYWw6OnNJbnN0YW5jZSA9IG51bGxwdHI7CisKK0NhbWVyYU1hbmFnZXJHbG9iYWwmCitDYW1lcmFNYW5hZ2VyR2xvYmFsOjpnZXRJbnN0YW5jZSgpIHsKKyAgICBNdXRleDo6QXV0b2xvY2sgX2woc0xvY2spOworICAgIENhbWVyYU1hbmFnZXJHbG9iYWwqIGluc3RhbmNlID0gc0luc3RhbmNlOworICAgIGlmIChpbnN0YW5jZSA9PSBudWxscHRyKSB7CisgICAgICAgIGluc3RhbmNlID0gbmV3IENhbWVyYU1hbmFnZXJHbG9iYWwoKTsKKyAgICAgICAgc0luc3RhbmNlID0gaW5zdGFuY2U7CisgICAgfQorICAgIHJldHVybiAqaW5zdGFuY2U7Cit9CisKK0NhbWVyYU1hbmFnZXJHbG9iYWw6On5DYW1lcmFNYW5hZ2VyR2xvYmFsKCkgeworICAgIC8vIGNsZWFyIHNJbnN0YW5jZSBzbyBuZXh0IGdldEluc3RhbmNlIGNhbGwga25vd3MgdG8gY3JlYXRlIGEgbmV3IG9uZQorICAgIE11dGV4OjpBdXRvbG9jayBfc2woc0xvY2spOworICAgIHNJbnN0YW5jZSA9IG51bGxwdHI7CisgICAgTXV0ZXg6OkF1dG9sb2NrIF9sKG1Mb2NrKTsKKyAgICBpZiAobUNhbWVyYVNlcnZpY2UgIT0gbnVsbHB0cikgeworICAgICAgICBtQ2FtZXJhU2VydmljZS0+dW5saW5rVG9EZWF0aChtRGVhdGhOb3RpZmllcik7CisgICAgICAgIG1DYW1lcmFTZXJ2aWNlLT5yZW1vdmVMaXN0ZW5lcihtQ2FtZXJhU2VydmljZUxpc3RlbmVyKTsKKyAgICB9CisgICAgbURlYXRoTm90aWZpZXIuY2xlYXIoKTsKKyAgICBpZiAobUNiTG9vcGVyICE9IG51bGxwdHIpIHsKKyAgICAgICAgbUNiTG9vcGVyLT51bnJlZ2lzdGVySGFuZGxlcihtSGFuZGxlci0+aWQoKSk7CisgICAgICAgIG1DYkxvb3Blci0+c3RvcCgpOworICAgIH0KKyAgICBtQ2JMb29wZXIuY2xlYXIoKTsKKyAgICBtSGFuZGxlci5jbGVhcigpOworICAgIG1DYW1lcmFTZXJ2aWNlTGlzdGVuZXIuY2xlYXIoKTsKKyAgICBtQ2FtZXJhU2VydmljZS5jbGVhcigpOworfQorCitzdGF0aWMgYm9vbCBpc0NhbWVyYVNlcnZpY2VEaXNhYmxlZCgpIHsKKyAgICBjaGFyIHZhbHVlW1BST1BFUlRZX1ZBTFVFX01BWF07CisgICAgcHJvcGVydHlfZ2V0KCJjb25maWcuZGlzYWJsZV9jYW1lcmFzZXJ2aWNlIiwgdmFsdWUsICIwIik7CisgICAgcmV0dXJuIChzdHJuY21wKHZhbHVlLCAiMCIsIDIpICE9IDAgJiYgc3RybmNhc2VjbXAodmFsdWUsICJmYWxzZSIsIDYpICE9IDApOworfQorCisvLyBUT0RPOiBBZGQgYmFjayB3aGVuIHZlbmRvciB0YWdzIGFyZSBzdXBwb3J0ZWQgZm9yIGxpYmNhbWVyYTJuZGtfdmVuZG9yIHdoZW4KKy8vICAgICAgIHRoZSBISURMIGludGVyZmFjZSBzdXBwb3J0cyBxdWVyeWluZyBieSB2ZW5kb3IgaWQuCisKK3NwPElDYW1lcmFTZXJ2aWNlPiBDYW1lcmFNYW5hZ2VyR2xvYmFsOjpnZXRDYW1lcmFTZXJ2aWNlKCkgeworICAgIE11dGV4OjpBdXRvbG9jayBfbChtTG9jayk7CisgICAgaWYgKG1DYW1lcmFTZXJ2aWNlLmdldCgpID09IG51bGxwdHIpIHsKKyAgICAgICAgaWYgKGlzQ2FtZXJhU2VydmljZURpc2FibGVkKCkpIHsKKyAgICAgICAgICAgIHJldHVybiBtQ2FtZXJhU2VydmljZTsKKyAgICAgICAgfQorCisgICAgICAgIHNwPElDYW1lcmFTZXJ2aWNlPiBjYW1lcmFTZXJ2aWNlQmluZGVyOworICAgICAgICBkbyB7CisgICAgICAgICAgICBjYW1lcmFTZXJ2aWNlQmluZGVyID0gSUNhbWVyYVNlcnZpY2U6OmdldFNlcnZpY2UoKTsKKyAgICAgICAgICAgIGlmIChjYW1lcmFTZXJ2aWNlQmluZGVyICE9IG51bGxwdHIpIHsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIEFMT0dXKCJDYW1lcmFTZXJ2aWNlIG5vdCBwdWJsaXNoZWQsIHdhaXRpbmcuLi4iKTsKKyAgICAgICAgICAgIHVzbGVlcChrQ2FtZXJhU2VydmljZVBvbGxEZWxheSk7CisgICAgICAgIH0gd2hpbGUodHJ1ZSk7CisgICAgICAgIGlmIChtRGVhdGhOb3RpZmllciA9PSBudWxscHRyKSB7CisgICAgICAgICAgICBtRGVhdGhOb3RpZmllciA9IG5ldyBEZWF0aE5vdGlmaWVyKHRoaXMpOworICAgICAgICB9CisgICAgICAgIGNhbWVyYVNlcnZpY2VCaW5kZXItPmxpbmtUb0RlYXRoKG1EZWF0aE5vdGlmaWVyLCAwKTsKKyAgICAgICAgbUNhbWVyYVNlcnZpY2UgPSBjYW1lcmFTZXJ2aWNlQmluZGVyOworCisgICAgICAgIC8vIFNldHVwIGxvb3BlciB0aHJlYWQgdG8gcGVyZnJvbSBhdmFpbGlhYmlsaXR5IGNhbGxiYWNrcworICAgICAgICBpZiAobUNiTG9vcGVyID09IG51bGxwdHIpIHsKKyAgICAgICAgICAgIG1DYkxvb3BlciA9IG5ldyBBTG9vcGVyOworICAgICAgICAgICAgbUNiTG9vcGVyLT5zZXROYW1lKCJDMk4tbWdyLWxvb3BlciIpOworICAgICAgICAgICAgc3RhdHVzX3QgZXJyID0gbUNiTG9vcGVyLT5zdGFydCgKKyAgICAgICAgICAgICAgICAgICAgLypydW5PbkNhbGxpbmdUaHJlYWQqL2ZhbHNlLAorICAgICAgICAgICAgICAgICAgICAvKmNhbkNhbGxKYXZhKi8gICAgICAgdHJ1ZSwKKyAgICAgICAgICAgICAgICAgICAgUFJJT1JJVFlfREVGQVVMVCk7CisgICAgICAgICAgICBpZiAoZXJyICE9IE9LKSB7CisgICAgICAgICAgICAgICAgQUxPR0UoIiVzOiBVbmFibGUgdG8gc3RhcnQgY2FtZXJhIHNlcnZpY2UgbGlzdGVuZXIgbG9vcGVyOiAlcyAoJWQpIiwKKyAgICAgICAgICAgICAgICAgICAgICAgIF9fRlVOQ1RJT05fXywgc3RyZXJyb3IoLWVyciksIGVycik7CisgICAgICAgICAgICAgICAgbUNiTG9vcGVyLmNsZWFyKCk7CisgICAgICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAobUhhbmRsZXIgPT0gbnVsbHB0cikgeworICAgICAgICAgICAgICAgIG1IYW5kbGVyID0gbmV3IENhbGxiYWNrSGFuZGxlcigpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgbUNiTG9vcGVyLT5yZWdpc3RlckhhbmRsZXIobUhhbmRsZXIpOworICAgICAgICB9CisKKyAgICAgICAgLy8gcmVnaXN0ZXIgSUNhbWVyYVNlcnZpY2VMaXN0ZW5lcgorICAgICAgICBpZiAobUNhbWVyYVNlcnZpY2VMaXN0ZW5lciA9PSBudWxscHRyKSB7CisgICAgICAgICAgICBtQ2FtZXJhU2VydmljZUxpc3RlbmVyID0gbmV3IENhbWVyYVNlcnZpY2VMaXN0ZW5lcih0aGlzKTsKKyAgICAgICAgfQorICAgICAgICBoaWRsX3ZlYzxDYW1lcmFTdGF0dXNBbmRJZD4gY2FtZXJhU3RhdHVzZXN7fTsKKyAgICAgICAgU3RhdHVzIHN0YXR1cyA9IFN0YXR1czo6Tk9fRVJST1I7CisgICAgICAgIGF1dG8gcmVtb3RlUmV0ID0gbUNhbWVyYVNlcnZpY2UtPmFkZExpc3RlbmVyKG1DYW1lcmFTZXJ2aWNlTGlzdGVuZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFsmc3RhdHVzLCAmY2FtZXJhU3RhdHVzZXNdKFN0YXR1cyBzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdXRvICZyZXRTdGF0dXNlcykgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdHVzID0gczsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhbWVyYVN0YXR1c2VzID0gcmV0U3RhdHVzZXM7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pOworICAgICAgICBpZiAoIXJlbW90ZVJldC5pc09rKCkgfHwgc3RhdHVzICE9IFN0YXR1czo6Tk9fRVJST1IpIHsKKyAgICAgICAgICAgIEFMT0dFKCJGYWlsZWQgdG8gYWRkIGxpc3RlbmVyIHRvIGNhbWVyYSBzZXJ2aWNlICVzIiwgcmVtb3RlUmV0LmRlc2NyaXB0aW9uKCkuY19zdHIoKSk7CisgICAgICAgIH0KKyAgICAgICAgZm9yIChhdXRvJiBjIDogY2FtZXJhU3RhdHVzZXMpIHsKKyAgICAgICAgICAgIG9uU3RhdHVzQ2hhbmdlZExvY2tlZChjKTsKKyAgICAgICAgfQorICAgIH0KKyAgICByZXR1cm4gbUNhbWVyYVNlcnZpY2U7Cit9CisKK3ZvaWQgQ2FtZXJhTWFuYWdlckdsb2JhbDo6RGVhdGhOb3RpZmllcjo6c2VydmljZURpZWQodWludDY0X3QgY29va2llLCBjb25zdCB3cDxJQmFzZT4gJndobykgeworICAgICh2b2lkKSBjb29raWU7CisgICAgKHZvaWQpIHdobzsKKyAgICBBTE9HRSgiQ2FtZXJhIHNlcnZpY2UgYmluZGVyRGllZCEiKTsKKyAgICBzcDxDYW1lcmFNYW5hZ2VyR2xvYmFsPiBjbSA9IG1DYW1lcmFNYW5hZ2VyLnByb21vdGUoKTsKKyAgICBpZiAoY20gIT0gbnVsbHB0cikgeworICAgICAgICBBdXRvTXV0ZXggbG9jayhjbS0+bUxvY2spOworICAgICAgICBmb3IgKGF1dG8mIHBhaXIgOiBjbS0+bURldmljZVN0YXR1c01hcCkgeworICAgICAgICAgICAgQ2FtZXJhU3RhdHVzQW5kSWQgY2FtZXJhU3RhdHVzQW5kSWQ7CisgICAgICAgICAgICBjYW1lcmFTdGF0dXNBbmRJZC5jYW1lcmFJZCA9IHBhaXIuZmlyc3Q7CisgICAgICAgICAgICBjYW1lcmFTdGF0dXNBbmRJZC5kZXZpY2VTdGF0dXMgPSBwYWlyLnNlY29uZDsKKyAgICAgICAgICAgIGNtLT5vblN0YXR1c0NoYW5nZWRMb2NrZWQoY2FtZXJhU3RhdHVzQW5kSWQpOworICAgICAgICB9CisgICAgICAgIGNtLT5tQ2FtZXJhU2VydmljZS5jbGVhcigpOworICAgICAgICAvLyBUT0RPOiBjb25zaWRlciBhZGRpbmcgcmUtY29ubmVjdCBjYWxsIGhlcmU/CisgICAgfQorfQorCit2b2lkIENhbWVyYU1hbmFnZXJHbG9iYWw6OnJlZ2lzdGVyQXZhaWxhYmlsaXR5Q2FsbGJhY2soCisgICAgICAgIGNvbnN0IEFDYW1lcmFNYW5hZ2VyX0F2YWlsYWJpbGl0eUNhbGxiYWNrcyAqY2FsbGJhY2spIHsKKyAgICBNdXRleDo6QXV0b2xvY2sgX2wobUxvY2spOworICAgIENhbGxiYWNrIGNiKGNhbGxiYWNrKTsKKyAgICBhdXRvIHBhaXIgPSBtQ2FsbGJhY2tzLmluc2VydChjYik7CisgICAgLy8gU2VuZCBpbml0aWFsIGNhbGxiYWNrcyBpZiBjYWxsYmFjayBpcyBuZXdseSByZWdpc3RlcmVkCisgICAgaWYgKHBhaXIuc2Vjb25kKSB7CisgICAgICAgIGZvciAoYXV0byYgcGFpciA6IG1EZXZpY2VTdGF0dXNNYXApIHsKKyAgICAgICAgICAgIGNvbnN0IGhpZGxfc3RyaW5nJiBjYW1lcmFJZCA9IHBhaXIuZmlyc3Q7CisgICAgICAgICAgICBDYW1lcmFEZXZpY2VTdGF0dXMgc3RhdHVzID0gcGFpci5zZWNvbmQ7CisKKyAgICAgICAgICAgIHNwPEFNZXNzYWdlPiBtc2cgPSBuZXcgQU1lc3NhZ2Uoa1doYXRTZW5kU2luZ2xlQ2FsbGJhY2ssIG1IYW5kbGVyKTsKKyAgICAgICAgICAgIEFDYW1lcmFNYW5hZ2VyX0F2YWlsYWJpbGl0eUNhbGxiYWNrIGNiID0gaXNTdGF0dXNBdmFpbGFibGUoc3RhdHVzKSA/CisgICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrLT5vbkNhbWVyYUF2YWlsYWJsZSA6IGNhbGxiYWNrLT5vbkNhbWVyYVVuYXZhaWxhYmxlOworICAgICAgICAgICAgbXNnLT5zZXRQb2ludGVyKGtDYWxsYmFja0ZwS2V5LCAodm9pZCAqKSBjYik7CisgICAgICAgICAgICBtc2ctPnNldFBvaW50ZXIoa0NvbnRleHRLZXksIGNhbGxiYWNrLT5jb250ZXh0KTsKKyAgICAgICAgICAgIG1zZy0+c2V0U3RyaW5nKGtDYW1lcmFJZEtleSwgQVN0cmluZyhjYW1lcmFJZC5jX3N0cigpKSk7CisgICAgICAgICAgICBtc2ctPnBvc3QoKTsKKyAgICAgICAgfQorICAgIH0KK30KKwordm9pZCBDYW1lcmFNYW5hZ2VyR2xvYmFsOjp1bnJlZ2lzdGVyQXZhaWxhYmlsaXR5Q2FsbGJhY2soCisgICAgICAgIGNvbnN0IEFDYW1lcmFNYW5hZ2VyX0F2YWlsYWJpbGl0eUNhbGxiYWNrcyAqY2FsbGJhY2spIHsKKyAgICBNdXRleDo6QXV0b2xvY2sgX2wobUxvY2spOworICAgIENhbGxiYWNrIGNiKGNhbGxiYWNrKTsKKyAgICBtQ2FsbGJhY2tzLmVyYXNlKGNiKTsKK30KKwordm9pZCBDYW1lcmFNYW5hZ2VyR2xvYmFsOjpnZXRDYW1lcmFJZExpc3Qoc3RkOjp2ZWN0b3I8aGlkbF9zdHJpbmc+KiBjYW1lcmFJZHMpIHsKKyAgICAvLyBFbnN1cmUgdGhhdCB3ZSBoYXZlIGluaXRpYWxpemVkL3JlZnJlc2hlZCB0aGUgbGlzdCBvZiBhdmFpbGFibGUgZGV2aWNlcworICAgIGF1dG8gY3MgPSBnZXRDYW1lcmFTZXJ2aWNlKCk7CisgICAgTXV0ZXg6OkF1dG9sb2NrIF9sKG1Mb2NrKTsKKworICAgIGZvcihhdXRvJiBkZXZpY2VTdGF0dXMgOiBtRGV2aWNlU3RhdHVzTWFwKSB7CisgICAgICAgIGlmIChkZXZpY2VTdGF0dXMuc2Vjb25kID09IENhbWVyYURldmljZVN0YXR1czo6U1RBVFVTX05PVF9QUkVTRU5UIHx8CisgICAgICAgICAgICAgICAgZGV2aWNlU3RhdHVzLnNlY29uZCA9PSBDYW1lcmFEZXZpY2VTdGF0dXM6OlNUQVRVU19FTlVNRVJBVElORykgeworICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIH0KKyAgICAgICAgY2FtZXJhSWRzLT5wdXNoX2JhY2soZGV2aWNlU3RhdHVzLmZpcnN0KTsKKyAgICB9Cit9CisKK2Jvb2wgQ2FtZXJhTWFuYWdlckdsb2JhbDo6dmFsaWRTdGF0dXMoQ2FtZXJhRGV2aWNlU3RhdHVzIHN0YXR1cykgeworICAgIHN3aXRjaCAoc3RhdHVzKSB7CisgICAgICAgIGNhc2UgQ2FtZXJhRGV2aWNlU3RhdHVzOjpTVEFUVVNfTk9UX1BSRVNFTlQ6CisgICAgICAgIGNhc2UgQ2FtZXJhRGV2aWNlU3RhdHVzOjpTVEFUVVNfUFJFU0VOVDoKKyAgICAgICAgY2FzZSBDYW1lcmFEZXZpY2VTdGF0dXM6OlNUQVRVU19FTlVNRVJBVElORzoKKyAgICAgICAgY2FzZSBDYW1lcmFEZXZpY2VTdGF0dXM6OlNUQVRVU19OT1RfQVZBSUxBQkxFOgorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorfQorCitib29sIENhbWVyYU1hbmFnZXJHbG9iYWw6OmlzU3RhdHVzQXZhaWxhYmxlKENhbWVyYURldmljZVN0YXR1cyBzdGF0dXMpIHsKKyAgICBzd2l0Y2ggKHN0YXR1cykgeworICAgICAgICBjYXNlIENhbWVyYURldmljZVN0YXR1czo6U1RBVFVTX1BSRVNFTlQ6CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9Cit9CisKK3ZvaWQgQ2FtZXJhTWFuYWdlckdsb2JhbDo6Q2FsbGJhY2tIYW5kbGVyOjpvbk1lc3NhZ2VSZWNlaXZlZCgKKyAgICAgICAgY29uc3Qgc3A8QU1lc3NhZ2U+ICZtc2cpIHsKKyAgICBzd2l0Y2ggKG1zZy0+d2hhdCgpKSB7CisgICAgICAgIGNhc2Uga1doYXRTZW5kU2luZ2xlQ2FsbGJhY2s6CisgICAgICAgIHsKKyAgICAgICAgICAgIEFDYW1lcmFNYW5hZ2VyX0F2YWlsYWJpbGl0eUNhbGxiYWNrIGNiOworICAgICAgICAgICAgdm9pZCogY29udGV4dDsKKyAgICAgICAgICAgIEFTdHJpbmcgY2FtZXJhSWQ7CisgICAgICAgICAgICBib29sIGZvdW5kID0gbXNnLT5maW5kUG9pbnRlcihrQ2FsbGJhY2tGcEtleSwgKHZvaWQqKikgJmNiKTsKKyAgICAgICAgICAgIGlmICghZm91bmQpIHsKKyAgICAgICAgICAgICAgICBBTE9HRSgiJXM6IENhbm5vdCBmaW5kIGNhbWVyYSBjYWxsYmFjayBmcCEiLCBfX0ZVTkNUSU9OX18pOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGZvdW5kID0gbXNnLT5maW5kUG9pbnRlcihrQ29udGV4dEtleSwgJmNvbnRleHQpOworICAgICAgICAgICAgaWYgKCFmb3VuZCkgeworICAgICAgICAgICAgICAgIEFMT0dFKCIlczogQ2Fubm90IGZpbmQgY2FsbGJhY2sgY29udGV4dCEiLCBfX0ZVTkNUSU9OX18pOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGZvdW5kID0gbXNnLT5maW5kU3RyaW5nKGtDYW1lcmFJZEtleSwgJmNhbWVyYUlkKTsKKyAgICAgICAgICAgIGlmICghZm91bmQpIHsKKyAgICAgICAgICAgICAgICBBTE9HRSgiJXM6IENhbm5vdCBmaW5kIGNhbWVyYSBJRCEiLCBfX0ZVTkNUSU9OX18pOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgICgqY2IpKGNvbnRleHQsIGNhbWVyYUlkLmNfc3RyKCkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIEFMT0dFKCIlczogdW5rbm93biBtZXNzYWdlIHR5cGUgJWQiLCBfX0ZVTkNUSU9OX18sIG1zZy0+d2hhdCgpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgIH0KK30KKworaGFyZHdhcmU6OlJldHVybjx2b2lkPiBDYW1lcmFNYW5hZ2VyR2xvYmFsOjpDYW1lcmFTZXJ2aWNlTGlzdGVuZXI6Om9uU3RhdHVzQ2hhbmdlZCgKKyAgICAgICAgY29uc3QgQ2FtZXJhU3RhdHVzQW5kSWQgJnN0YXR1c0FuZElkKSB7CisgICAgc3A8Q2FtZXJhTWFuYWdlckdsb2JhbD4gY20gPSBtQ2FtZXJhTWFuYWdlci5wcm9tb3RlKCk7CisgICAgaWYgKGNtICE9IG51bGxwdHIpIHsKKyAgICAgICAgY20tPm9uU3RhdHVzQ2hhbmdlZChzdGF0dXNBbmRJZCk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgQUxPR0UoIkNhbm5vdCBkZWxpdmVyIHN0YXR1cyBjaGFuZ2UuIEdsb2JhbCBjYW1lcmEgbWFuYWdlciBkaWVkIik7CisgICAgfQorICAgIHJldHVybiBWb2lkKCk7Cit9CisKK3ZvaWQgQ2FtZXJhTWFuYWdlckdsb2JhbDo6b25TdGF0dXNDaGFuZ2VkKAorICAgICAgICBjb25zdCBDYW1lcmFTdGF0dXNBbmRJZCAmc3RhdHVzQW5kSWQpIHsKKyAgICBNdXRleDo6QXV0b2xvY2sgX2wobUxvY2spOworICAgIG9uU3RhdHVzQ2hhbmdlZExvY2tlZChzdGF0dXNBbmRJZCk7Cit9CisKK3ZvaWQgQ2FtZXJhTWFuYWdlckdsb2JhbDo6b25TdGF0dXNDaGFuZ2VkTG9ja2VkKAorICAgICAgICBjb25zdCBDYW1lcmFTdGF0dXNBbmRJZCAmc3RhdHVzQW5kSWQpIHsKKyAgICBoaWRsX3N0cmluZyBjYW1lcmFJZCA9IHN0YXR1c0FuZElkLmNhbWVyYUlkOworICAgIENhbWVyYURldmljZVN0YXR1cyBzdGF0dXMgPSBzdGF0dXNBbmRJZC5kZXZpY2VTdGF0dXM7CisgICAgaWYgKCF2YWxpZFN0YXR1cyhzdGF0dXMpKSB7CisgICAgICAgIEFMT0dFKCIlczogSW52YWxpZCBzdGF0dXMgJWQiLCBfX0ZVTkNUSU9OX18sIHN0YXR1cyk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBib29sIGZpcnN0U3RhdHVzID0gKG1EZXZpY2VTdGF0dXNNYXAuY291bnQoY2FtZXJhSWQpID09IDApOworICAgIENhbWVyYURldmljZVN0YXR1cyBvbGRTdGF0dXMgPSBmaXJzdFN0YXR1cyA/CisgICAgICAgICAgICBzdGF0dXMgOiAvLyBmaXJzdCBzdGF0dXMKKyAgICAgICAgICAgIG1EZXZpY2VTdGF0dXNNYXBbY2FtZXJhSWRdOworCisgICAgaWYgKCFmaXJzdFN0YXR1cyAmJgorICAgICAgICAgICAgaXNTdGF0dXNBdmFpbGFibGUoc3RhdHVzKSA9PSBpc1N0YXR1c0F2YWlsYWJsZShvbGRTdGF0dXMpKSB7CisgICAgICAgIC8vIE5vIHN0YXR1cyB1cGRhdGUuIE5vIG5lZWQgdG8gc2VuZCBjYWxsYmFjaworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgLy8gSXRlcmF0ZSB0aHJvdWdoIGFsbCByZWdpc3RlcmVkIGNhbGxiYWNrcworICAgIG1EZXZpY2VTdGF0dXNNYXBbY2FtZXJhSWRdID0gc3RhdHVzOworICAgIGZvciAoYXV0byBjYiA6IG1DYWxsYmFja3MpIHsKKyAgICAgICAgc3A8QU1lc3NhZ2U+IG1zZyA9IG5ldyBBTWVzc2FnZShrV2hhdFNlbmRTaW5nbGVDYWxsYmFjaywgbUhhbmRsZXIpOworICAgICAgICBBQ2FtZXJhTWFuYWdlcl9BdmFpbGFiaWxpdHlDYWxsYmFjayBjYkZwID0gaXNTdGF0dXNBdmFpbGFibGUoc3RhdHVzKSA/CisgICAgICAgICAgICAgICAgY2IubUF2YWlsYWJsZSA6IGNiLm1VbmF2YWlsYWJsZTsKKyAgICAgICAgbXNnLT5zZXRQb2ludGVyKGtDYWxsYmFja0ZwS2V5LCAodm9pZCAqKSBjYkZwKTsKKyAgICAgICAgbXNnLT5zZXRQb2ludGVyKGtDb250ZXh0S2V5LCBjYi5tQ29udGV4dCk7CisgICAgICAgIG1zZy0+c2V0U3RyaW5nKGtDYW1lcmFJZEtleSwgQVN0cmluZyhjYW1lcmFJZC5jX3N0cigpKSk7CisgICAgICAgIG1zZy0+cG9zdCgpOworICAgIH0KKyAgICBpZiAoc3RhdHVzID09IENhbWVyYURldmljZVN0YXR1czo6U1RBVFVTX05PVF9QUkVTRU5UKSB7CisgICAgICAgIG1EZXZpY2VTdGF0dXNNYXAuZXJhc2UoY2FtZXJhSWQpOworICAgIH0KK30KKworfSAvLyBuYW1lc3BhY2UgYWNhbQorfSAvLyBuYW1lc3BhY2UgYW5kcm9pZAorCisvKioKKyAqIEFDYW1lcmFNYW5nZXIgSW1wbGVtZW50YXRpb24KKyAqLworY2FtZXJhX3N0YXR1c190CitBQ2FtZXJhTWFuYWdlcjo6Z2V0Q2FtZXJhSWRMaXN0KEFDYW1lcmFJZExpc3QqKiBjYW1lcmFJZExpc3QpIHsKKyAgICBNdXRleDo6QXV0b2xvY2sgX2wobUxvY2spOworCisgICAgc3RkOjp2ZWN0b3I8aGlkbF9zdHJpbmc+IGlkTGlzdDsKKyAgICBDYW1lcmFNYW5hZ2VyR2xvYmFsOjpnZXRJbnN0YW5jZSgpLmdldENhbWVyYUlkTGlzdCgmaWRMaXN0KTsKKworICAgIGludCBudW1DYW1lcmFzID0gaWRMaXN0LnNpemUoKTsKKyAgICBBQ2FtZXJhSWRMaXN0ICpvdXQgPSBuZXcgQUNhbWVyYUlkTGlzdDsKKyAgICBpZiAoIW91dCkgeworICAgICAgICBBTE9HRSgiQWxsb2NhdGUgbWVtb3J5IGZvciBBQ2FtZXJhSWRMaXN0IGZhaWxlZCEiKTsKKyAgICAgICAgcmV0dXJuIEFDQU1FUkFfRVJST1JfTk9UX0VOT1VHSF9NRU1PUlk7CisgICAgfQorICAgIG91dC0+bnVtQ2FtZXJhcyA9IG51bUNhbWVyYXM7CisgICAgb3V0LT5jYW1lcmFJZHMgPSBuZXcgY29uc3QgY2hhcipbbnVtQ2FtZXJhc107CisgICAgaWYgKCFvdXQtPmNhbWVyYUlkcykgeworICAgICAgICBBTE9HRSgiQWxsb2NhdGUgbWVtb3J5IGZvciBBQ2FtZXJhSWRMaXN0IGZhaWxlZCEiKTsKKyAgICAgICAgZGVsZXRlQ2FtZXJhSWRMaXN0KG91dCk7CisgICAgICAgIHJldHVybiBBQ0FNRVJBX0VSUk9SX05PVF9FTk9VR0hfTUVNT1JZOworICAgIH0KKyAgICBmb3IgKGludCBpID0gMDsgaSA8IG51bUNhbWVyYXM7IGkrKykgeworICAgICAgICBjb25zdCBjaGFyKiBzcmMgPSBpZExpc3RbaV0uY19zdHIoKTsKKyAgICAgICAgc2l6ZV90IGRzdFNpemUgPSBzdHJsZW4oc3JjKSArIDE7CisgICAgICAgIGNoYXIqIGRzdCA9IG5ldyBjaGFyW2RzdFNpemVdOworICAgICAgICBpZiAoIWRzdCkgeworICAgICAgICAgICAgQUxPR0UoIkFsbG9jYXRlIG1lbW9yeSBmb3IgQUNhbWVyYUlkTGlzdCBmYWlsZWQhIik7CisgICAgICAgICAgICBkZWxldGVDYW1lcmFJZExpc3Qob3V0KTsKKyAgICAgICAgICAgIHJldHVybiBBQ0FNRVJBX0VSUk9SX05PVF9FTk9VR0hfTUVNT1JZOworICAgICAgICB9CisgICAgICAgIHN0cmxjcHkoZHN0LCBzcmMsIGRzdFNpemUpOworICAgICAgICBvdXQtPmNhbWVyYUlkc1tpXSA9IGRzdDsKKyAgICB9CisgICAgKmNhbWVyYUlkTGlzdCA9IG91dDsKKyAgICByZXR1cm4gQUNBTUVSQV9PSzsKK30KKwordm9pZAorQUNhbWVyYU1hbmFnZXI6OmRlbGV0ZUNhbWVyYUlkTGlzdChBQ2FtZXJhSWRMaXN0KiBjYW1lcmFJZExpc3QpIHsKKyAgICBpZiAoY2FtZXJhSWRMaXN0ICE9IG51bGxwdHIpIHsKKyAgICAgICAgaWYgKGNhbWVyYUlkTGlzdC0+Y2FtZXJhSWRzICE9IG51bGxwdHIpIHsKKyAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgY2FtZXJhSWRMaXN0LT5udW1DYW1lcmFzOyBpICsrKSB7CisgICAgICAgICAgICAgICAgaWYgKGNhbWVyYUlkTGlzdC0+Y2FtZXJhSWRzW2ldICE9IG51bGxwdHIpIHsKKyAgICAgICAgICAgICAgICAgICAgZGVsZXRlW10gY2FtZXJhSWRMaXN0LT5jYW1lcmFJZHNbaV07CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgZGVsZXRlW10gY2FtZXJhSWRMaXN0LT5jYW1lcmFJZHM7CisgICAgICAgIH0KKyAgICAgICAgZGVsZXRlIGNhbWVyYUlkTGlzdDsKKyAgICB9Cit9CisKK2NhbWVyYV9zdGF0dXNfdCBBQ2FtZXJhTWFuYWdlcjo6Z2V0Q2FtZXJhQ2hhcmFjdGVyaXN0aWNzKAorICAgICAgICBjb25zdCBjaGFyICpjYW1lcmFJZFN0ciwgc3A8QUNhbWVyYU1ldGFkYXRhPiAqY2hhcmFjdGVyaXN0aWNzKSB7CisgICAgTXV0ZXg6OkF1dG9sb2NrIF9sKG1Mb2NrKTsKKworICAgIHNwPElDYW1lcmFTZXJ2aWNlPiBjcyA9IENhbWVyYU1hbmFnZXJHbG9iYWw6OmdldEluc3RhbmNlKCkuZ2V0Q2FtZXJhU2VydmljZSgpOworICAgIGlmIChjcyA9PSBudWxscHRyKSB7CisgICAgICAgIEFMT0dFKCIlczogQ2Fubm90IHJlYWNoIGNhbWVyYSBzZXJ2aWNlISIsIF9fRlVOQ1RJT05fXyk7CisgICAgICAgIHJldHVybiBBQ0FNRVJBX0VSUk9SX0NBTUVSQV9ESVNDT05ORUNURUQ7CisgICAgfQorICAgIENhbWVyYU1ldGFkYXRhIHJhd01ldGFkYXRhOworICAgIFN0YXR1cyBzdGF0dXMgPSBTdGF0dXM6Ok5PX0VSUk9SOworICAgIGF1dG8gc2VydmljZVJldCA9CisgICAgICAgIGNzLT5nZXRDYW1lcmFDaGFyYWN0ZXJpc3RpY3MoY2FtZXJhSWRTdHIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWyZzdGF0dXMsICZyYXdNZXRhZGF0YV0gKGF1dG8gcyAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGhpZGxfdmVjPHVpbnQ4X3Q+ICZtZXRhZGF0YSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdHVzID0gczsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzdGF0dXMgPT0gU3RhdHVzOjpOT19FUlJPUikgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHV0aWxzOjpjb252ZXJ0RnJvbUhpZGxDbG9uZWQobWV0YWRhdGEsICZyYXdNZXRhZGF0YSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7CisgICAgaWYgKCFzZXJ2aWNlUmV0LmlzT2soKSB8fCBzdGF0dXMgIT0gU3RhdHVzOjpOT19FUlJPUikgeworICAgICAgICBBTE9HRSgiR2V0IGNhbWVyYSBjaGFyYWN0ZXJpc3RpY3MgZnJvbSBjYW1lcmEgc2VydmljZSBmYWlsZWQiKTsKKyAgICAgICAgcmV0dXJuIEFDQU1FUkFfRVJST1JfVU5LTk9XTjsgLy8gc2hvdWxkIG5vdCByZWFjaCBoZXJlCisgICAgfQorCisgICAgKmNoYXJhY3RlcmlzdGljcyA9IG5ldyBBQ2FtZXJhTWV0YWRhdGEoCisgICAgICAgICAgICByYXdNZXRhZGF0YS5yZWxlYXNlKCksIEFDYW1lcmFNZXRhZGF0YTo6QUNNX0NIQVJBQ1RFUklTVElDUyk7CisgICAgcmV0dXJuIEFDQU1FUkFfT0s7Cit9CisKK2NhbWVyYV9zdGF0dXNfdAorQUNhbWVyYU1hbmFnZXI6Om9wZW5DYW1lcmEoCisgICAgICAgIGNvbnN0IGNoYXIqIGNhbWVyYUlkLAorICAgICAgICBBQ2FtZXJhRGV2aWNlX1N0YXRlQ2FsbGJhY2tzKiBjYWxsYmFjaywKKyAgICAgICAgLypvdXQqL0FDYW1lcmFEZXZpY2UqKiBvdXREZXZpY2UpIHsKKyAgICBzcDxBQ2FtZXJhTWV0YWRhdGE+IHJhd0NoYXJzOworICAgIGNhbWVyYV9zdGF0dXNfdCByZXQgPSBnZXRDYW1lcmFDaGFyYWN0ZXJpc3RpY3MoY2FtZXJhSWQsICZyYXdDaGFycyk7CisgICAgTXV0ZXg6OkF1dG9sb2NrIF9sKG1Mb2NrKTsKKyAgICBpZiAocmV0ICE9IEFDQU1FUkFfT0spIHsKKyAgICAgICAgQUxPR0UoIiVzOiBjYW5ub3QgZ2V0IGNhbWVyYSBjaGFyYWN0ZXJpc3RpY3MgZm9yIGNhbWVyYSAlcy4gZXJyICVkIiwKKyAgICAgICAgICAgICAgICBfX0ZVTkNUSU9OX18sIGNhbWVyYUlkLCByZXQpOworICAgICAgICByZXR1cm4gQUNBTUVSQV9FUlJPUl9JTlZBTElEX1BBUkFNRVRFUjsKKyAgICB9CisKKyAgICBBQ2FtZXJhRGV2aWNlKiBkZXZpY2UgPSBuZXcgQUNhbWVyYURldmljZShjYW1lcmFJZCwgY2FsbGJhY2ssIHN0ZDo6bW92ZShyYXdDaGFycykpOworCisgICAgc3A8SUNhbWVyYVNlcnZpY2U+IGNzID0gQ2FtZXJhTWFuYWdlckdsb2JhbDo6Z2V0SW5zdGFuY2UoKS5nZXRDYW1lcmFTZXJ2aWNlKCk7CisgICAgaWYgKGNzID09IG51bGxwdHIpIHsKKyAgICAgICAgQUxPR0UoIiVzOiBDYW5ub3QgcmVhY2ggY2FtZXJhIHNlcnZpY2UhIiwgX19GVU5DVElPTl9fKTsKKyAgICAgICAgZGVsZXRlIGRldmljZTsKKyAgICAgICAgcmV0dXJuIEFDQU1FUkFfRVJST1JfQ0FNRVJBX0RJU0NPTk5FQ1RFRDsKKyAgICB9CisKKyAgICBzcDxJQ2FtZXJhRGV2aWNlQ2FsbGJhY2s+IGNhbGxiYWNrcyA9IGRldmljZS0+Z2V0U2VydmljZUNhbGxiYWNrKCk7CisgICAgc3A8SUNhbWVyYURldmljZVVzZXI+IGRldmljZVJlbW90ZTsKKworICAgIC8vIE5vIHdheSB0byBnZXQgcGFja2FnZSBuYW1lIGZyb20gbmF0aXZlLgorICAgIC8vIFNlbmQgYSB6ZXJvIGxlbmd0aCBwYWNrYWdlIG5hbWUgYW5kIGxldCBjYW1lcmEgc2VydmljZSBmaWd1cmUgaXQgb3V0IGZyb20gVUlECisgICAgU3RhdHVzIHN0YXR1cyA9IFN0YXR1czo6Tk9fRVJST1I7CisgICAgYXV0byBzZXJ2aWNlUmV0ID0gY3MtPmNvbm5lY3REZXZpY2UoCisgICAgICAgICAgICBjYWxsYmFja3MsIGNhbWVyYUlkLCBbJnN0YXR1cywgJmRldmljZVJlbW90ZV0oYXV0byBzLCBhdXRvICZkZXZpY2UpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0dXMgPSBzOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRldmljZVJlbW90ZSA9IGRldmljZTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pOworCisgICAgaWYgKCFzZXJ2aWNlUmV0LmlzT2soKSB8fCBzdGF0dXMgIT0gU3RhdHVzOjpOT19FUlJPUikgeworICAgICAgICBBTE9HRSgiJXM6IGNvbm5lY3QgY2FtZXJhIGRldmljZSBmYWlsZWQiLCBfX0ZVTkNUSU9OX18pOworICAgICAgICAvLyBUT0RPOiBDb252ZXJ0IHNlcnZpY2VSZXQgdG8gY2FtZXJhX3N0YXR1c190CisgICAgICAgIGRlbGV0ZSBkZXZpY2U7CisgICAgICAgIHJldHVybiBBQ0FNRVJBX0VSUk9SX1VOS05PV047CisgICAgfQorICAgIGlmIChkZXZpY2VSZW1vdGUgPT0gbnVsbHB0cikgeworICAgICAgICBBTE9HRSgiJXM6IGNvbm5lY3QgY2FtZXJhIGRldmljZSBmYWlsZWQhIHJlbW90ZSBkZXZpY2UgaXMgbnVsbCIsIF9fRlVOQ1RJT05fXyk7CisgICAgICAgIGRlbGV0ZSBkZXZpY2U7CisgICAgICAgIHJldHVybiBBQ0FNRVJBX0VSUk9SX0NBTUVSQV9ESVNDT05ORUNURUQ7CisgICAgfQorICAgIGRldmljZS0+c2V0UmVtb3RlRGV2aWNlKGRldmljZVJlbW90ZSk7CisgICAgZGV2aWNlLT5zZXREZXZpY2VNZXRhZGF0YVF1ZXVlcygpOworICAgICpvdXREZXZpY2UgPSBkZXZpY2U7CisgICAgcmV0dXJuIEFDQU1FUkFfT0s7Cit9CisKK0FDYW1lcmFNYW5hZ2VyOjp+QUNhbWVyYU1hbmFnZXIoKSB7CisKK30KZGlmZiAtLWdpdCBhL2NhbWVyYS9uZGsvbmRrX3ZlbmRvci9pbXBsL0FDYW1lcmFNYW5hZ2VyLmggYi9jYW1lcmEvbmRrL25ka192ZW5kb3IvaW1wbC9BQ2FtZXJhTWFuYWdlci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM4ZDY0MGYKLS0tIC9kZXYvbnVsbAorKysgYi9jYW1lcmEvbmRrL25ka192ZW5kb3IvaW1wbC9BQ2FtZXJhTWFuYWdlci5oCkBAIC0wLDAgKzEsMjA5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE4IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KKworI2lmbmRlZiBfQUNBTUVSQV9NQU5BR0VSX0gKKyNkZWZpbmUgX0FDQU1FUkFfTUFOQUdFUl9ICisKKyNpbmNsdWRlIDxjYW1lcmEvTmRrQ2FtZXJhTWFuYWdlci5oPgorCisjaW5jbHVkZSA8YW5kcm9pZC1iYXNlL3BhcnNlaW50Lmg+CisjaW5jbHVkZSA8YW5kcm9pZC9mcmFtZXdvcmtzL2NhbWVyYXNlcnZpY2Uvc2VydmljZS8yLjAvSUNhbWVyYVNlcnZpY2UuaD4KKworI2luY2x1ZGUgPENhbWVyYU1ldGFkYXRhLmg+CisjaW5jbHVkZSA8dXRpbHMvU3Ryb25nUG9pbnRlci5oPgorI2luY2x1ZGUgPHV0aWxzL011dGV4Lmg+CisKKyNpbmNsdWRlIDxtZWRpYS9zdGFnZWZyaWdodC9mb3VuZGF0aW9uL0FMb29wZXIuaD4KKyNpbmNsdWRlIDxtZWRpYS9zdGFnZWZyaWdodC9mb3VuZGF0aW9uL0FIYW5kbGVyLmg+CisjaW5jbHVkZSA8bWVkaWEvc3RhZ2VmcmlnaHQvZm91bmRhdGlvbi9BTWVzc2FnZS5oPgorCisjaW5jbHVkZSA8c2V0PgorI2luY2x1ZGUgPG1hcD4KKworbmFtZXNwYWNlIGFuZHJvaWQgeworbmFtZXNwYWNlIGFjYW0geworCit1c2luZyBJQ2FtZXJhU2VydmljZSA9IGZyYW1ld29ya3M6OmNhbWVyYXNlcnZpY2U6OnNlcnZpY2U6OlYyXzA6OklDYW1lcmFTZXJ2aWNlOwordXNpbmcgQ2FtZXJhRGV2aWNlU3RhdHVzID0gZnJhbWV3b3Jrczo6Y2FtZXJhc2VydmljZTo6c2VydmljZTo6VjJfMDo6Q2FtZXJhRGV2aWNlU3RhdHVzOwordXNpbmcgSUNhbWVyYVNlcnZpY2VMaXN0ZW5lciA9IGZyYW1ld29ya3M6OmNhbWVyYXNlcnZpY2U6OnNlcnZpY2U6OlYyXzA6OklDYW1lcmFTZXJ2aWNlTGlzdGVuZXI7Cit1c2luZyBDYW1lcmFTdGF0dXNBbmRJZCA9IGZyYW1ld29ya3M6OmNhbWVyYXNlcnZpY2U6OnNlcnZpY2U6OlYyXzA6OkNhbWVyYVN0YXR1c0FuZElkOwordXNpbmcgU3RhdHVzID0gZnJhbWV3b3Jrczo6Y2FtZXJhc2VydmljZTo6Y29tbW9uOjpWMl8wOjpTdGF0dXM7Cit1c2luZyBWZW5kb3JUYWdTZWN0aW9uID0gZnJhbWV3b3Jrczo6Y2FtZXJhc2VydmljZTo6Y29tbW9uOjpWMl8wOjpWZW5kb3JUYWdTZWN0aW9uOwordXNpbmcgVmVuZG9yVGFnID0gZnJhbWV3b3Jrczo6Y2FtZXJhc2VydmljZTo6Y29tbW9uOjpWMl8wOjpWZW5kb3JUYWc7Cit1c2luZyBJQmFzZSA9IGFuZHJvaWQ6OmhpZGw6OmJhc2U6OlYxXzA6OklCYXNlOwordXNpbmcgYW5kcm9pZDo6aGFyZHdhcmU6OmhpZGxfc3RyaW5nOwordXNpbmcgaGFyZHdhcmU6OlZvaWQ7CisKKy8qKgorICogUGVyLXByb2Nlc3Mgc2luZ2xldG9uIGluc3RhbmNlIG9mIENhbWVyYU1hbmdlci4gU2hhcmVkIGJ5IGFsbCBBQ2FtZXJhTWFuYWdlcgorICogaW5zdGFuY2VzLiBDcmVhdGVkIHdoZW4gZmlyc3QgQUNhbWVyYU1hbmFnZXIgaXMgY3JlYXRlZCBhbmQgZGVzdHJveWVkIHdoZW4KKyAqIGFsbCBBQ2FtZXJhTWFuYWdlciBpbnN0YW5jZXMgYXJlIGRlbGV0ZWQuCisgKgorICogVE9ETzogbWF5YmUgQ2FtZXJhTWFuYWdlckdsb2JhbCBpcyBiZXR0ZXIgc3VpdGVkIGluIGxpYmNhbWVyYWNsaWVudD8KKyAqLworY2xhc3MgQ2FtZXJhTWFuYWdlckdsb2JhbCBmaW5hbCA6IHB1YmxpYyBSZWZCYXNlIHsKKyAgcHVibGljOgorICAgIHN0YXRpYyBDYW1lcmFNYW5hZ2VyR2xvYmFsJiBnZXRJbnN0YW5jZSgpOworICAgIHNwPElDYW1lcmFTZXJ2aWNlPiBnZXRDYW1lcmFTZXJ2aWNlKCk7CisKKyAgICB2b2lkIHJlZ2lzdGVyQXZhaWxhYmlsaXR5Q2FsbGJhY2soCisgICAgICAgICAgICBjb25zdCBBQ2FtZXJhTWFuYWdlcl9BdmFpbGFiaWxpdHlDYWxsYmFja3MgKmNhbGxiYWNrKTsKKyAgICB2b2lkIHVucmVnaXN0ZXJBdmFpbGFiaWxpdHlDYWxsYmFjaygKKyAgICAgICAgICAgIGNvbnN0IEFDYW1lcmFNYW5hZ2VyX0F2YWlsYWJpbGl0eUNhbGxiYWNrcyAqY2FsbGJhY2spOworCisgICAgLyoqCisgICAgICogUmV0dXJuIGNhbWVyYSBJRHMgdGhhdCBzdXBwb3J0IGNhbWVyYTIKKyAgICAgKi8KKyAgICB2b2lkIGdldENhbWVyYUlkTGlzdChzdGQ6OnZlY3RvcjxoaWRsX3N0cmluZz4gKmNhbWVyYUlkcyk7CisKKyAgcHJpdmF0ZToKKyAgICBzcDxJQ2FtZXJhU2VydmljZT4gbUNhbWVyYVNlcnZpY2U7CisgICAgY29uc3QgaW50ICAgICAgICAgIGtDYW1lcmFTZXJ2aWNlUG9sbERlbGF5ID0gNTAwMDAwOyAvLyAwLjVzCisgICAgTXV0ZXggICAgICAgICAgICAgIG1Mb2NrOworICAgIGNsYXNzIERlYXRoTm90aWZpZXIgOiBwdWJsaWMgYW5kcm9pZDo6aGFyZHdhcmU6OmhpZGxfZGVhdGhfcmVjaXBpZW50IHsKKyAgICAgIHB1YmxpYzoKKyAgICAgICAgZXhwbGljaXQgRGVhdGhOb3RpZmllcihDYW1lcmFNYW5hZ2VyR2xvYmFsKiBjbSkgOiBtQ2FtZXJhTWFuYWdlcihjbSkge30KKyAgICAgIHByb3RlY3RlZDoKKyAgICAgICAgLy8gSUJpbmRlcjo6RGVhdGhSZWNpcGllbnQgaW1wbGVtZW50YXRpb24KKyAgICAgICAgdmlydHVhbCB2b2lkIHNlcnZpY2VEaWVkKHVpbnQ2NF90IGNvb2tpZSwgY29uc3Qgd3A8SUJhc2U+ICZ3aG8pOworICAgICAgcHJpdmF0ZToKKyAgICAgICAgY29uc3Qgd3A8Q2FtZXJhTWFuYWdlckdsb2JhbD4gbUNhbWVyYU1hbmFnZXI7CisgICAgfTsKKyAgICBzcDxEZWF0aE5vdGlmaWVyPiBtRGVhdGhOb3RpZmllcjsKKworICAgIGNsYXNzIENhbWVyYVNlcnZpY2VMaXN0ZW5lciBmaW5hbCA6IHB1YmxpYyBJQ2FtZXJhU2VydmljZUxpc3RlbmVyIHsKKyAgICAgIHB1YmxpYzoKKyAgICAgICAgZXhwbGljaXQgQ2FtZXJhU2VydmljZUxpc3RlbmVyKENhbWVyYU1hbmFnZXJHbG9iYWwqIGNtKSA6IG1DYW1lcmFNYW5hZ2VyKGNtKSB7fQorICAgICAgICBhbmRyb2lkOjpoYXJkd2FyZTo6UmV0dXJuPHZvaWQ+IG9uU3RhdHVzQ2hhbmdlZCgKKyAgICAgICAgICAgIGNvbnN0IENhbWVyYVN0YXR1c0FuZElkICZzdGF0dXNBbmRJZCkgb3ZlcnJpZGU7CisKKyAgICAgIHByaXZhdGU6CisgICAgICAgIGNvbnN0IHdwPENhbWVyYU1hbmFnZXJHbG9iYWw+IG1DYW1lcmFNYW5hZ2VyOworICAgIH07CisgICAgc3A8Q2FtZXJhU2VydmljZUxpc3RlbmVyPiBtQ2FtZXJhU2VydmljZUxpc3RlbmVyOworCisgICAgLy8gV3JhcHBlciBvZiBBQ2FtZXJhTWFuYWdlcl9BdmFpbGFiaWxpdHlDYWxsYmFja3Mgc28gd2UgY2FuIHN0b3JlIGl0IGluIHN0ZDo6c2V0CisgICAgc3RydWN0IENhbGxiYWNrIHsKKyAgICAgICAgZXhwbGljaXQgQ2FsbGJhY2soY29uc3QgQUNhbWVyYU1hbmFnZXJfQXZhaWxhYmlsaXR5Q2FsbGJhY2tzICpjYWxsYmFjaykgOgorICAgICAgICAgICAgbUF2YWlsYWJsZShjYWxsYmFjay0+b25DYW1lcmFBdmFpbGFibGUpLAorICAgICAgICAgICAgbVVuYXZhaWxhYmxlKGNhbGxiYWNrLT5vbkNhbWVyYVVuYXZhaWxhYmxlKSwKKyAgICAgICAgICAgIG1Db250ZXh0KGNhbGxiYWNrLT5jb250ZXh0KSB7fQorCisgICAgICAgIGJvb2wgb3BlcmF0b3IgPT0gKGNvbnN0IENhbGxiYWNrJiBvdGhlcikgY29uc3QgeworICAgICAgICAgICAgcmV0dXJuIChtQXZhaWxhYmxlID09IG90aGVyLm1BdmFpbGFibGUgJiYKKyAgICAgICAgICAgICAgICAgICAgbVVuYXZhaWxhYmxlID09IG90aGVyLm1VbmF2YWlsYWJsZSAmJgorICAgICAgICAgICAgICAgICAgICBtQ29udGV4dCA9PSBvdGhlci5tQ29udGV4dCk7CisgICAgICAgIH0KKyAgICAgICAgYm9vbCBvcGVyYXRvciAhPSAoY29uc3QgQ2FsbGJhY2smIG90aGVyKSBjb25zdCB7CisgICAgICAgICAgICByZXR1cm4gISgqdGhpcyA9PSBvdGhlcik7CisgICAgICAgIH0KKyAgICAgICAgYm9vbCBvcGVyYXRvciA8IChjb25zdCBDYWxsYmFjayYgb3RoZXIpIGNvbnN0IHsKKyAgICAgICAgICAgIGlmICgqdGhpcyA9PSBvdGhlcikgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgaWYgKG1Db250ZXh0ICE9IG90aGVyLm1Db250ZXh0KSByZXR1cm4gbUNvbnRleHQgPCBvdGhlci5tQ29udGV4dDsKKyAgICAgICAgICAgIGlmIChtQXZhaWxhYmxlICE9IG90aGVyLm1BdmFpbGFibGUpIHJldHVybiBtQXZhaWxhYmxlIDwgb3RoZXIubUF2YWlsYWJsZTsKKyAgICAgICAgICAgIHJldHVybiBtVW5hdmFpbGFibGUgPCBvdGhlci5tVW5hdmFpbGFibGU7CisgICAgICAgIH0KKyAgICAgICAgYm9vbCBvcGVyYXRvciA+IChjb25zdCBDYWxsYmFjayYgb3RoZXIpIGNvbnN0IHsKKyAgICAgICAgICAgIHJldHVybiAoKnRoaXMgIT0gb3RoZXIgJiYgISgqdGhpcyA8IG90aGVyKSk7CisgICAgICAgIH0KKyAgICAgICAgQUNhbWVyYU1hbmFnZXJfQXZhaWxhYmlsaXR5Q2FsbGJhY2sgbUF2YWlsYWJsZTsKKyAgICAgICAgQUNhbWVyYU1hbmFnZXJfQXZhaWxhYmlsaXR5Q2FsbGJhY2sgbVVuYXZhaWxhYmxlOworICAgICAgICB2b2lkKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtQ29udGV4dDsKKyAgICB9OworICAgIHN0ZDo6c2V0PENhbGxiYWNrPiBtQ2FsbGJhY2tzOworCisgICAgLy8gZGVmaW5pdGlvbiBvZiBoYW5kbGVyIGFuZCBtZXNzYWdlCisgICAgZW51bSB7CisgICAgICAgIGtXaGF0U2VuZFNpbmdsZUNhbGxiYWNrCisgICAgfTsKKyAgICBzdGF0aWMgY29uc3QgY2hhcioga0NhbWVyYUlkS2V5OworICAgIHN0YXRpYyBjb25zdCBjaGFyKiBrQ2FsbGJhY2tGcEtleTsKKyAgICBzdGF0aWMgY29uc3QgY2hhcioga0NvbnRleHRLZXk7CisgICAgY2xhc3MgQ2FsbGJhY2tIYW5kbGVyIDogcHVibGljIEFIYW5kbGVyIHsKKyAgICAgIHB1YmxpYzoKKyAgICAgICAgQ2FsbGJhY2tIYW5kbGVyKCkge30KKyAgICAgICAgdm9pZCBvbk1lc3NhZ2VSZWNlaXZlZChjb25zdCBzcDxBTWVzc2FnZT4gJm1zZykgb3ZlcnJpZGU7CisgICAgfTsKKyAgICBzcDxDYWxsYmFja0hhbmRsZXI+IG1IYW5kbGVyOworICAgIHNwPEFMb29wZXI+ICAgICAgICAgbUNiTG9vcGVyOyAvLyBMb29wZXIgdGhyZWFkIHdoZXJlIGNhbGxiYWNrcyBhY3R1YWxseSBoYXBwZW4gb24KKworICAgIHZvaWQgb25TdGF0dXNDaGFuZ2VkKGNvbnN0IENhbWVyYVN0YXR1c0FuZElkICZzdGF0dXNBbmRJZCk7CisgICAgdm9pZCBvblN0YXR1c0NoYW5nZWRMb2NrZWQoY29uc3QgQ2FtZXJhU3RhdHVzQW5kSWQgJnN0YXR1c0FuZElkKTsKKyAgICAvLyBVdGlscyBmb3Igc3RhdHVzCisgICAgc3RhdGljIGJvb2wgdmFsaWRTdGF0dXMoQ2FtZXJhRGV2aWNlU3RhdHVzIHN0YXR1cyk7CisgICAgc3RhdGljIGJvb2wgaXNTdGF0dXNBdmFpbGFibGUoQ2FtZXJhRGV2aWNlU3RhdHVzIHN0YXR1cyk7CisKKyAgICAvLyBUaGUgc29ydCBsb2dpYyBtdXN0IG1hdGNoIHRoZSBsb2dpYyBpbgorICAgIC8vIGxpYmNhbWVyYXNlcnZpY2UvY29tbW9uL0NhbWVyYVByb3ZpZGVyTWFuYWdlci5jcHA6OmdldEFQSTFDb21wYXRpYmxlQ2FtZXJhRGV2aWNlSWRzCisgICAgc3RydWN0IENhbWVyYUlkQ29tcGFyYXRvciB7CisgICAgICAgIGJvb2wgb3BlcmF0b3IoKShjb25zdCBoaWRsX3N0cmluZyYgYSwgY29uc3QgaGlkbF9zdHJpbmcmIGIpIGNvbnN0IHsKKyAgICAgICAgICAgIHVpbnQzMl90IGFVaW50ID0gMCwgYlVpbnQgPSAwOworICAgICAgICAgICAgYm9vbCBhSXNVaW50ID0gYmFzZTo6UGFyc2VVaW50KGEuY19zdHIoKSwgJmFVaW50KTsKKyAgICAgICAgICAgIGJvb2wgYklzVWludCA9IGJhc2U6OlBhcnNlVWludChiLmNfc3RyKCksICZiVWludCk7CisKKyAgICAgICAgICAgIC8vIFVpbnQgZGV2aWNlIElEcyBmaXJzdAorICAgICAgICAgICAgaWYgKGFJc1VpbnQgJiYgYklzVWludCkgeworICAgICAgICAgICAgICAgIHJldHVybiBhVWludCA8IGJVaW50OworICAgICAgICAgICAgfSBlbHNlIGlmIChhSXNVaW50KSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgICAgICB9IGVsc2UgaWYgKGJJc1VpbnQpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICB9CisgICAgICAgICAgICAvLyBTaW1wbGUgc3RyaW5nIGNvbXBhcmUgaWYgYm90aCBpZCBhcmUgbm90IHVpbnQKKyAgICAgICAgICAgIHJldHVybiBhIDwgYjsKKyAgICAgICAgfQorICAgIH07CisKKyAgICAvLyBNYXAgY2FtZXJhX2lkIC0+IHN0YXR1cworICAgIHN0ZDo6bWFwPGhpZGxfc3RyaW5nLCBDYW1lcmFEZXZpY2VTdGF0dXMsIENhbWVyYUlkQ29tcGFyYXRvcj4gbURldmljZVN0YXR1c01hcDsKKworICAgIC8vIEZvciB0aGUgc2luZ2xldG9uIGluc3RhbmNlCisgICAgc3RhdGljIE11dGV4IHNMb2NrOworICAgIHN0YXRpYyBDYW1lcmFNYW5hZ2VyR2xvYmFsKiBzSW5zdGFuY2U7CisgICAgQ2FtZXJhTWFuYWdlckdsb2JhbCgpIHt9OworICAgIH5DYW1lcmFNYW5hZ2VyR2xvYmFsKCk7Cit9OworCit9IC8vIG5hbWVzcGFjZSBhY2FtOworfSAvLyBuYW1lc3BhY2UgYW5kcm9pZDsKKworLyoqCisgKiBBQ2FtZXJhTWFuYWdlciBvcGFxdWUgc3RydWN0IGRlZmluaXRpb24KKyAqIExlYXZlIG91dHNpZGUgb2YgYW5kcm9pZCBuYW1lc3BhY2UgYmVjYXVzZSBpdCdzIE5ESyBzdHJ1Y3QKKyAqLworc3RydWN0IEFDYW1lcmFNYW5hZ2VyIHsKKyAgICBBQ2FtZXJhTWFuYWdlcigpIDoKKyAgICAgICAgICAgIG1HbG9iYWxNYW5hZ2VyKCYoYW5kcm9pZDo6YWNhbTo6Q2FtZXJhTWFuYWdlckdsb2JhbDo6Z2V0SW5zdGFuY2UoKSkpIHt9CisgICAgfkFDYW1lcmFNYW5hZ2VyKCk7CisgICAgY2FtZXJhX3N0YXR1c190IGdldENhbWVyYUlkTGlzdChBQ2FtZXJhSWRMaXN0KiogY2FtZXJhSWRMaXN0KTsKKyAgICBzdGF0aWMgdm9pZCAgICAgZGVsZXRlQ2FtZXJhSWRMaXN0KEFDYW1lcmFJZExpc3QqIGNhbWVyYUlkTGlzdCk7CisKKyAgICBjYW1lcmFfc3RhdHVzX3QgZ2V0Q2FtZXJhQ2hhcmFjdGVyaXN0aWNzKAorICAgICAgICAgICAgY29uc3QgY2hhciogY2FtZXJhSWQsIGFuZHJvaWQ6OnNwPEFDYW1lcmFNZXRhZGF0YT4qIGNoYXJhY3RlcmlzdGljcyk7CisKKyAgICBjYW1lcmFfc3RhdHVzX3Qgb3BlbkNhbWVyYShjb25zdCBjaGFyKiBjYW1lcmFJZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBQ2FtZXJhRGV2aWNlX1N0YXRlQ2FsbGJhY2tzKiBjYWxsYmFjaywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKm91dCovQUNhbWVyYURldmljZSoqIGRldmljZSk7CisKKyAgcHJpdmF0ZToKKyAgICBlbnVtIHsKKyAgICAgICAga0NhbWVyYUlkTGlzdE5vdEluaXQgPSAtMQorICAgIH07CisgICAgYW5kcm9pZDo6TXV0ZXggICAgICAgICBtTG9jazsKKyAgICBhbmRyb2lkOjpzcDxhbmRyb2lkOjphY2FtOjpDYW1lcmFNYW5hZ2VyR2xvYmFsPiBtR2xvYmFsTWFuYWdlcjsKK307CisKKyNlbmRpZiAvL19BQ0FNRVJBX01BTkFHRVJfSApkaWZmIC0tZ2l0IGEvY2FtZXJhL25kay9uZGtfdmVuZG9yL2ltcGwvQUNhcHR1cmVSZXF1ZXN0VmVuZG9yLmggYi9jYW1lcmEvbmRrL25ka192ZW5kb3IvaW1wbC9BQ2FwdHVyZVJlcXVlc3RWZW5kb3IuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lZDY3NjE1Ci0tLSAvZGV2L251bGwKKysrIGIvY2FtZXJhL25kay9uZGtfdmVuZG9yL2ltcGwvQUNhcHR1cmVSZXF1ZXN0VmVuZG9yLmgKQEAgLTAsMCArMSwzNiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxOCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCisKKyNpbmNsdWRlICJ1dGlscy5oIgorCitzdHJ1Y3QgQUNhbWVyYU91dHB1dFRhcmdldCB7CisgICAgZXhwbGljaXQgQUNhbWVyYU91dHB1dFRhcmdldChuYXRpdmVfaGFuZGxlX3QqIHdpbmRvdykgOiBtV2luZG93KHdpbmRvdykge307CisKKyAgICBib29sIG9wZXJhdG9yID09IChjb25zdCBBQ2FtZXJhT3V0cHV0VGFyZ2V0JiBvdGhlcikgY29uc3QgeworICAgICAgICByZXR1cm4gbVdpbmRvdyA9PSBvdGhlci5tV2luZG93OworICAgIH0KKyAgICBib29sIG9wZXJhdG9yICE9IChjb25zdCBBQ2FtZXJhT3V0cHV0VGFyZ2V0JiBvdGhlcikgY29uc3QgeworICAgICAgICByZXR1cm4gbVdpbmRvdyAhPSBvdGhlci5tV2luZG93OworICAgIH0KKyAgICBib29sIG9wZXJhdG9yIDwgKGNvbnN0IEFDYW1lcmFPdXRwdXRUYXJnZXQmIG90aGVyKSBjb25zdCB7CisgICAgICAgIHJldHVybiBtV2luZG93IDwgb3RoZXIubVdpbmRvdzsKKyAgICB9CisgICAgYm9vbCBvcGVyYXRvciA+IChjb25zdCBBQ2FtZXJhT3V0cHV0VGFyZ2V0JiBvdGhlcikgY29uc3QgeworICAgICAgICByZXR1cm4gbVdpbmRvdyA+IG90aGVyLm1XaW5kb3c7CisgICAgfQorCisgICAgYW5kcm9pZDo6YWNhbTo6dXRpbHM6Om5hdGl2ZV9oYW5kbGVfcHRyX3dyYXBwZXIgbVdpbmRvdzsKK307CmRpZmYgLS1naXQgYS9jYW1lcmEvbmRrL25ka192ZW5kb3IvaW1wbC91dGlscy5jcHAgYi9jYW1lcmEvbmRrL25ka192ZW5kb3IvaW1wbC91dGlscy5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzE5MzAwNgotLS0gL2Rldi9udWxsCisrKyBiL2NhbWVyYS9uZGsvbmRrX3ZlbmRvci9pbXBsL3V0aWxzLmNwcApAQCAtMCwwICsxLDE5NyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxOCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCisKKyNkZWZpbmUgTE9HX1RBRyAiQUNhbWVyYVZlbmRvclV0aWxzIgorCisjaW5jbHVkZSA8dXRpbHMvTG9nLmg+CisKKyNpbmNsdWRlICJ1dGlscy5oIgorCituYW1lc3BhY2UgYW5kcm9pZCB7CituYW1lc3BhY2UgYWNhbSB7CituYW1lc3BhY2UgdXRpbHMgeworCisvLyBDb252ZXJ0IENhcHR1cmVSZXF1ZXN0IHdyYXBwYWJsZSBieSBzcDw+IHRvIGhpZGwgQ2FwdHVyZVJlcXVlc3QuCitmcmFtZXdvcmtzOjpjYW1lcmFzZXJ2aWNlOjpkZXZpY2U6OlYyXzA6OkNhcHR1cmVSZXF1ZXN0Citjb252ZXJ0VG9IaWRsKGNvbnN0IENhcHR1cmVSZXF1ZXN0ICpjYXB0dXJlUmVxdWVzdCkgeworICAgIGZyYW1ld29ya3M6OmNhbWVyYXNlcnZpY2U6OmRldmljZTo6VjJfMDo6Q2FwdHVyZVJlcXVlc3QgaENhcHR1cmVSZXF1ZXN0OworICAgIGhDYXB0dXJlUmVxdWVzdC5waHlzaWNhbENhbWVyYVNldHRpbmdzID0gY2FwdHVyZVJlcXVlc3QtPm1DYXB0dXJlUmVxdWVzdC5waHlzaWNhbENhbWVyYVNldHRpbmdzOworICAgIGhDYXB0dXJlUmVxdWVzdC5zdHJlYW1BbmRXaW5kb3dJZHMgPSBjYXB0dXJlUmVxdWVzdC0+bUNhcHR1cmVSZXF1ZXN0LnN0cmVhbUFuZFdpbmRvd0lkczsKKyAgICByZXR1cm4gaENhcHR1cmVSZXF1ZXN0OworfQorCitIUm90YXRpb24gY29udmVydFRvSGlkbChpbnQgcm90YXRpb24pIHsKKyAgICBIUm90YXRpb24gaFJvdGF0aW9uID0gSFJvdGF0aW9uOjpSMDsKKyAgICBzd2l0Y2gocm90YXRpb24pIHsKKyAgICAgICAgY2FzZSBDQU1FUkEzX1NUUkVBTV9ST1RBVElPTl85MDoKKyAgICAgICAgICAgIGhSb3RhdGlvbiA9IEhSb3RhdGlvbjo6UjkwOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgQ0FNRVJBM19TVFJFQU1fUk9UQVRJT05fMTgwOgorICAgICAgICAgICAgaFJvdGF0aW9uID0gSFJvdGF0aW9uOjpSMTgwOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgQ0FNRVJBM19TVFJFQU1fUk9UQVRJT05fMjcwOgorICAgICAgICAgICAgaFJvdGF0aW9uID0gSFJvdGF0aW9uOjpSMjcwOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBicmVhazsKKyAgICB9CisgICAgcmV0dXJuIGhSb3RhdGlvbjsKK30KKworYm9vbCBjb252ZXJ0RnJvbUhpZGxDbG9uZWQoY29uc3QgSENhbWVyYU1ldGFkYXRhICZtZXRhZGF0YSwgQ2FtZXJhTWV0YWRhdGEgKnJhd01ldGFkYXRhKSB7CisgICAgY29uc3QgY2FtZXJhX21ldGFkYXRhICpidWZmZXIgPSAoY2FtZXJhX21ldGFkYXRhX3QqKShtZXRhZGF0YS5kYXRhKCkpOworICAgIHNpemVfdCBleHBlY3RlZFNpemUgPSBtZXRhZGF0YS5zaXplKCk7CisgICAgaW50IHJldCA9IHZhbGlkYXRlX2NhbWVyYV9tZXRhZGF0YV9zdHJ1Y3R1cmUoYnVmZmVyLCAmZXhwZWN0ZWRTaXplKTsKKyAgICBpZiAocmV0ID09IE9LIHx8IHJldCA9PSBDQU1FUkFfTUVUQURBVEFfVkFMSURBVElPTl9TSElGVEVEKSB7CisgICAgICAgICpyYXdNZXRhZGF0YSA9IGJ1ZmZlcjsKKyAgICB9IGVsc2UgeworICAgICAgICBBTE9HRSgiJXM6IE1hbGZvcm1lZCBjYW1lcmEgbWV0YWRhdGEgcmVjZWl2ZWQgZnJvbSBjYWxsZXIiLCBfX0ZVTkNUSU9OX18pOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorICAgIHJldHVybiB0cnVlOworfQorCisvLyBOb3RlOiBleGlzdGluZyBkYXRhIGluIGRzdCB3aWxsIGJlIGdvbmUuIENhbGxlciBzdGlsbCBvd25zIHRoZSBtZW1vcnkgb2Ygc3JjCit2b2lkIGNvbnZlcnRUb0hpZGwoY29uc3QgY2FtZXJhX21ldGFkYXRhX3QgKnNyYywgSENhbWVyYU1ldGFkYXRhKiBkc3QpIHsKKyAgICBpZiAoc3JjID09IG51bGxwdHIpIHsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBzaXplX3Qgc2l6ZSA9IGdldF9jYW1lcmFfbWV0YWRhdGFfc2l6ZShzcmMpOworICAgIEFMT0dFKCJDb252ZXJ0aW5nIG1ldGFkYXRhIHNpemU6ICVkIiwgKGludClzaXplKTsKKyAgICBkc3QtPnNldFRvRXh0ZXJuYWwoKHVpbnQ4X3QgKikgc3JjLCBzaXplKTsKKyAgICByZXR1cm47Cit9CisKK1RlbXBsYXRlSWQgY29udmVydFRvSGlkbChBQ2FtZXJhRGV2aWNlX3JlcXVlc3RfdGVtcGxhdGUgdGVtcGxhdGVJZCkgeworICAgIHN3aXRjaCh0ZW1wbGF0ZUlkKSB7CisgICAgICAgIGNhc2UgVEVNUExBVEVfU1RJTExfQ0FQVFVSRToKKyAgICAgICAgICAgIHJldHVybiBUZW1wbGF0ZUlkOjpTVElMTF9DQVBUVVJFOworICAgICAgICBjYXNlIFRFTVBMQVRFX1JFQ09SRDoKKyAgICAgICAgICAgIHJldHVybiBUZW1wbGF0ZUlkOjpSRUNPUkQ7CisgICAgICAgIGNhc2UgVEVNUExBVEVfVklERU9fU05BUFNIT1Q6CisgICAgICAgICAgICByZXR1cm4gVGVtcGxhdGVJZDo6VklERU9fU05BUFNIT1Q7CisgICAgICAgIGNhc2UgVEVNUExBVEVfWkVST19TSFVUVEVSX0xBRzoKKyAgICAgICAgICAgIHJldHVybiBUZW1wbGF0ZUlkOjpaRVJPX1NIVVRURVJfTEFHOworICAgICAgICBjYXNlIFRFTVBMQVRFX01BTlVBTDoKKyAgICAgICAgICAgIHJldHVybiBUZW1wbGF0ZUlkOjpNQU5VQUw7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICByZXR1cm4gVGVtcGxhdGVJZDo6UFJFVklFVzsKKyAgICB9Cit9CisKK2NhbWVyYV9zdGF0dXNfdCBjb252ZXJ0RnJvbUhpZGwoU3RhdHVzIHN0YXR1cykgeworICAgIGNhbWVyYV9zdGF0dXNfdCByZXQgPSBBQ0FNRVJBX09LOworICAgIHN3aXRjaChzdGF0dXMpIHsKKyAgICAgICAgY2FzZSBTdGF0dXM6Ok5PX0VSUk9SOgorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgU3RhdHVzOjpESVNDT05ORUNURUQ6CisgICAgICAgICAgICByZXQgPSBBQ0FNRVJBX0VSUk9SX0NBTUVSQV9ESVNDT05ORUNURUQ7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBTdGF0dXM6OkNBTUVSQV9JTl9VU0U6CisgICAgICAgICAgICByZXQgPSBBQ0FNRVJBX0VSUk9SX0NBTUVSQV9JTl9VU0U7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBTdGF0dXM6Ok1BWF9DQU1FUkFTX0lOX1VTRToKKyAgICAgICAgICAgIHJldCA9IEFDQU1FUkFfRVJST1JfTUFYX0NBTUVSQV9JTl9VU0U7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBTdGF0dXM6OklMTEVHQUxfQVJHVU1FTlQ6CisgICAgICAgICAgICByZXQgPSBBQ0FNRVJBX0VSUk9SX0lOVkFMSURfUEFSQU1FVEVSOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgU3RhdHVzOjpERVBSRUNBVEVEX0hBTDoKKyAgICAgICAgICAgIC8vIFNob3VsZCBub3QgcmVhY2ggaGVyZSBzaW5jZSB3ZSBmaWx0ZXJlZCBsZWdhY3kgSEFMcyBlYXJsaWVyCisgICAgICAgICAgICByZXQgPSBBQ0FNRVJBX0VSUk9SX0lOVkFMSURfUEFSQU1FVEVSOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgU3RhdHVzOjpESVNBQkxFRDoKKyAgICAgICAgICAgIHJldCA9IEFDQU1FUkFfRVJST1JfQ0FNRVJBX0RJU0FCTEVEOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgU3RhdHVzOjpQRVJNSVNTSU9OX0RFTklFRDoKKyAgICAgICAgICAgIHJldCA9IEFDQU1FUkFfRVJST1JfUEVSTUlTU0lPTl9ERU5JRUQ7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBTdGF0dXM6OklOVkFMSURfT1BFUkFUSU9OOgorICAgICAgICAgICAgcmV0ID0gQUNBTUVSQV9FUlJPUl9JTlZBTElEX09QRVJBVElPTjsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgcmV0ID0gQUNBTUVSQV9FUlJPUl9VTktOT1dOOworICAgICAgICAgICAgYnJlYWs7CisgICAgfQorICAgIHJldHVybiByZXQ7Cit9CisKK2Jvb2wgaXNXaW5kb3dOYXRpdmVIYW5kbGVFcXVhbChjb25zdCBuYXRpdmVfaGFuZGxlX3QgKm5oMSwgY29uc3QgbmF0aXZlX2hhbmRsZV90ICpuaDIpIHsKKyAgICBpZiAobmgxLT5udW1GZHMgIT0wIHx8IG5oMi0+bnVtRmRzICE9MCkgeworICAgICAgICBBTE9HRSgiSW52YWxpZCB3aW5kb3cgbmF0aXZlIGhhbmRsZXMgYmVpbmcgY29tcGFyZWQiKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAgICBpZiAobmgxLT52ZXJzaW9uICE9IG5oMi0+dmVyc2lvbiB8fCBuaDEtPm51bUZkcyAhPSBuaDItPm51bUZkcyB8fAorICAgICAgICBuaDEtPm51bUludHMgIT0gbmgyLT5udW1JbnRzKSB7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBuaDEtPm51bUludHM7IGkrKykgeworICAgICAgICBpZihuaDEtPmRhdGFbaV0gIT0gbmgyLT5kYXRhW2ldKSB7CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICB9CisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgaXNXaW5kb3dOYXRpdmVIYW5kbGVMZXNzVGhhbihjb25zdCBuYXRpdmVfaGFuZGxlX3QgKm5oMSwgY29uc3QgbmF0aXZlX2hhbmRsZV90ICpuaDIpIHsKKyAgICBpZiAoaXNXaW5kb3dOYXRpdmVIYW5kbGVFcXVhbChuaDEsIG5oMikpIHsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAgICBpZiAobmgxLT5udW1JbnRzICE9IG5oMi0+bnVtSW50cykgeworICAgICAgICByZXR1cm4gbmgxLT5udW1JbnRzIDwgbmgyLT5udW1JbnRzOworICAgIH0KKworICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbmgxLT5udW1JbnRzOyBpKyspIHsKKyAgICAgICAgaWYgKG5oMS0+ZGF0YVtpXSAhPSBuaDItPmRhdGFbaV0pIHsKKyAgICAgICAgICAgIHJldHVybiBuaDEtPmRhdGFbaV0gPCBuaDItPmRhdGFbaV07CisgICAgICAgIH0KKyAgICB9CisgICAgcmV0dXJuIGZhbHNlOworfQorCitib29sIGlzV2luZG93TmF0aXZlSGFuZGxlR3JlYXRlclRoYW4oY29uc3QgbmF0aXZlX2hhbmRsZV90ICpuaDEsIGNvbnN0IG5hdGl2ZV9oYW5kbGVfdCAqbmgyKSB7CisgICAgcmV0dXJuICFpc1dpbmRvd05hdGl2ZUhhbmRsZUxlc3NUaGFuKG5oMSwgbmgyKSAmJiAhaXNXaW5kb3dOYXRpdmVIYW5kbGVFcXVhbChuaDEsIG5oMik7Cit9CisKK2Jvb2wgYXJlV2luZG93TmF0aXZlSGFuZGxlc0VxdWFsKGhpZGxfdmVjPGhpZGxfaGFuZGxlPiBoYW5kbGVzMSwgaGlkbF92ZWM8aGlkbF9oYW5kbGU+IGhhbmRsZXMyKSB7CisgICAgaWYgKGhhbmRsZXMxLnNpemUoKSAhPSBoYW5kbGVzMi5zaXplKCkpIHsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAgICBmb3IgKGludCBpID0gMDsgaSA8IGhhbmRsZXMxLnNpemUoKTsgaSsrKSB7CisgICAgICAgIGlmICghaXNXaW5kb3dOYXRpdmVIYW5kbGVFcXVhbChoYW5kbGVzMVtpXSwgaGFuZGxlczJbaV0pKSB7CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICB9CisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgYXJlV2luZG93TmF0aXZlSGFuZGxlc0xlc3NUaGFuKGhpZGxfdmVjPGhpZGxfaGFuZGxlPiBoYW5kbGVzMSwgaGlkbF92ZWM8aGlkbF9oYW5kbGU+aGFuZGxlczIpIHsKKyAgICBpZiAoaGFuZGxlczEuc2l6ZSgpICE9IGhhbmRsZXMyLnNpemUoKSkgeworICAgICAgICByZXR1cm4gaGFuZGxlczEuc2l6ZSgpIDwgaGFuZGxlczIuc2l6ZSgpOworICAgIH0KKyAgICBmb3IgKGludCBpID0gMDsgaSA8IGhhbmRsZXMxLnNpemUoKTsgaSsrKSB7CisgICAgICAgIGNvbnN0IG5hdGl2ZV9oYW5kbGVfdCAqaGFuZGxlMSA9IGhhbmRsZXMxW2ldLmdldE5hdGl2ZUhhbmRsZSgpOworICAgICAgICBjb25zdCBuYXRpdmVfaGFuZGxlX3QgKmhhbmRsZTIgPSBoYW5kbGVzMltpXS5nZXROYXRpdmVIYW5kbGUoKTsKKyAgICAgICAgaWYgKCFpc1dpbmRvd05hdGl2ZUhhbmRsZUVxdWFsKGhhbmRsZTEsIGhhbmRsZTIpKSB7CisgICAgICAgICAgICByZXR1cm4gaXNXaW5kb3dOYXRpdmVIYW5kbGVMZXNzVGhhbihoYW5kbGUxLCBoYW5kbGUyKTsKKyAgICAgICAgfQorICAgIH0KKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK30gLy8gbmFtZXNwYWNlIHV0aWxzCit9IC8vIG5hbWVzcGFjZSBhY2FtCit9IC8vIG5hbWVzcGFjZSBhbmRyb2lkCmRpZmYgLS1naXQgYS9jYW1lcmEvbmRrL25ka192ZW5kb3IvaW1wbC91dGlscy5oIGIvY2FtZXJhL25kay9uZGtfdmVuZG9yL2ltcGwvdXRpbHMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yZjEwMDZkCi0tLSAvZGV2L251bGwKKysrIGIvY2FtZXJhL25kay9uZGtfdmVuZG9yL2ltcGwvdXRpbHMuaApAQCAtMCwwICsxLDE3NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxOCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCisKKyNpbmNsdWRlIDxhbmRyb2lkL2ZyYW1ld29ya3MvY2FtZXJhc2VydmljZS9zZXJ2aWNlLzIuMC9JQ2FtZXJhU2VydmljZS5oPgorI2luY2x1ZGUgPGFuZHJvaWQvZnJhbWV3b3Jrcy9jYW1lcmFzZXJ2aWNlL2RldmljZS8yLjAvSUNhbWVyYURldmljZVVzZXIuaD4KKyNpbmNsdWRlIDxhbmRyb2lkL2ZyYW1ld29ya3MvY2FtZXJhc2VydmljZS9kZXZpY2UvMi4wL3R5cGVzLmg+CisjaW5jbHVkZSA8Y2FtZXJhL05ka0NhbWVyYURldmljZS5oPgorI2luY2x1ZGUgPENhbWVyYU1ldGFkYXRhLmg+CisjaW5jbHVkZSA8aGFyZHdhcmUvY2FtZXJhMy5oPgorCisjaWZuZGVmIENBTUVSQV9OREtfVkVORE9SX0gKKyNkZWZpbmUgQ0FNRVJBX05ES19WRU5ET1JfSAorCit1c2luZyBhbmRyb2lkOjpoYXJkd2FyZTo6aGlkbF92ZWM7Cit1c2luZyBhbmRyb2lkOjpoYXJkd2FyZTo6aGlkbF9oYW5kbGU7CisKK25hbWVzcGFjZSBhbmRyb2lkIHsKK25hbWVzcGFjZSBhY2FtIHsKK25hbWVzcGFjZSB1dGlscyB7CisKK3VzaW5nIENhbWVyYU1ldGFkYXRhID0gaGFyZHdhcmU6OmNhbWVyYTo6Y29tbW9uOjpWMV8wOjpoZWxwZXI6OkNhbWVyYU1ldGFkYXRhOwordXNpbmcgSENhbWVyYU1ldGFkYXRhICA9IGZyYW1ld29ya3M6OmNhbWVyYXNlcnZpY2U6OnNlcnZpY2U6OlYyXzA6OkNhbWVyYU1ldGFkYXRhOwordXNpbmcgU3RhdHVzID0gZnJhbWV3b3Jrczo6Y2FtZXJhc2VydmljZTo6Y29tbW9uOjpWMl8wOjpTdGF0dXM7Cit1c2luZyBUZW1wbGF0ZUlkID0gZnJhbWV3b3Jrczo6Y2FtZXJhc2VydmljZTo6ZGV2aWNlOjpWMl8wOjpUZW1wbGF0ZUlkOwordXNpbmcgUGh5c2ljYWxDYW1lcmFTZXR0aW5ncyA9IGZyYW1ld29ya3M6OmNhbWVyYXNlcnZpY2U6OmRldmljZTo6VjJfMDo6UGh5c2ljYWxDYW1lcmFTZXR0aW5nczsKK3VzaW5nIEhSb3RhdGlvbiA9IGZyYW1ld29ya3M6OmNhbWVyYXNlcnZpY2U6OmRldmljZTo6VjJfMDo6T3V0cHV0Q29uZmlndXJhdGlvbjo6Um90YXRpb247Cit1c2luZyBPdXRwdXRDb25maWd1cmF0aW9uID0gZnJhbWV3b3Jrczo6Y2FtZXJhc2VydmljZTo6ZGV2aWNlOjpWMl8wOjpPdXRwdXRDb25maWd1cmF0aW9uOworCisvLyBVdGlsaXR5IGNsYXNzIHNvIHRoYXQgQ2FwdHVyZVJlcXVlc3QgY2FuIGJlIHN0b3JlZCBieSBzcDw+CitzdHJ1Y3QgQ2FwdHVyZVJlcXVlc3QgOiBwdWJsaWMgUmVmQmFzZSB7CisgIGZyYW1ld29ya3M6OmNhbWVyYXNlcnZpY2U6OmRldmljZTo6VjJfMDo6Q2FwdHVyZVJlcXVlc3QgbUNhcHR1cmVSZXF1ZXN0OworICBzdGQ6OnZlY3RvcjxuYXRpdmVfaGFuZGxlX3QgKj4gbVN1cmZhY2VMaXN0OworICAvL1BoeXNpY2FsIGNhbWVyYSBzZXR0aW5ncyBtZXRhZGF0YSBpcyBzdG9yZWQgaGVyZSwgc2luY2UgdGhlIGNhcHR1cmUgcmVxdWVzdAorICAvL21pZ2h0IG5vdCBjb250YWluIGl0LiBUaGF0J3Mgc2luY2UsIGZtcSBtaWdodCBoYXZlIGNvbnN1bWVkIGl0LgorICBoaWRsX3ZlYzxQaHlzaWNhbENhbWVyYVNldHRpbmdzPiBtUGh5c2ljYWxDYW1lcmFTZXR0aW5nczsKK307CisKK2Jvb2wgYXJlV2luZG93TmF0aXZlSGFuZGxlc0VxdWFsKGhpZGxfdmVjPGhpZGxfaGFuZGxlPiBoYW5kbGVzMSwgaGlkbF92ZWM8aGlkbF9oYW5kbGU+aGFuZGxlczIpOworCitib29sIGFyZVdpbmRvd05hdGl2ZUhhbmRsZXNMZXNzVGhhbihoaWRsX3ZlYzxoaWRsX2hhbmRsZT4gaGFuZGxlczEsIGhpZGxfdmVjPGhpZGxfaGFuZGxlPmhhbmRsZXMyKTsKKworYm9vbCBpc1dpbmRvd05hdGl2ZUhhbmRsZUVxdWFsKGNvbnN0IG5hdGl2ZV9oYW5kbGVfdCAqbmgxLCBjb25zdCBuYXRpdmVfaGFuZGxlX3QgKm5oMik7CisKK2Jvb2wgaXNXaW5kb3dOYXRpdmVIYW5kbGVMZXNzVGhhbihjb25zdCBuYXRpdmVfaGFuZGxlX3QgKm5oMSwgY29uc3QgbmF0aXZlX2hhbmRsZV90ICpuaDIpOworCisvLyBDb252ZW5pZW5jZSB3cmFwcGVyIG92ZXIgaXNXaW5kb3dOYXRpdmVIYW5kbGVMZXNzVGhhbiBhbmQgaXNXaW5kb3dOYXRpdmVIYW5kbGVFcXVhbAorYm9vbCBpc1dpbmRvd05hdGl2ZUhhbmRsZUdyZWF0ZXJUaGFuKGNvbnN0IG5hdGl2ZV9oYW5kbGVfdCAqbmgxLCBjb25zdCBuYXRpdmVfaGFuZGxlX3QgKm5oMik7CisKKy8vIFV0aWxpdHkgY2xhc3Mgc28gdGhlIG5hdGl2ZV9oYW5kbGVfdCBjYW4gYmUgY29tcGFyZWQgd2l0aCAgaXRzIGNvbnRlbnRzIGluc3RlYWQKKy8vIG9mIGp1c3QgcmF3IHBvaW50ZXIgY29tcGFyaXNvbnMuCitzdHJ1Y3QgbmF0aXZlX2hhbmRsZV9wdHJfd3JhcHBlciB7CisgICAgbmF0aXZlX2hhbmRsZV90ICptV2luZG93ID0gbnVsbHB0cjsKKworICAgIG5hdGl2ZV9oYW5kbGVfcHRyX3dyYXBwZXIobmF0aXZlX2hhbmRsZV90ICpuaCkgOiBtV2luZG93KG5oKSB7IH0KKworICAgIG5hdGl2ZV9oYW5kbGVfcHRyX3dyYXBwZXIoKSA9IGRlZmF1bHQ7CisKKyAgICBvcGVyYXRvciBuYXRpdmVfaGFuZGxlX3QgKigpIGNvbnN0IHsgcmV0dXJuIG1XaW5kb3c7IH0KKworICAgIGJvb2wgb3BlcmF0b3IgPT0oY29uc3QgbmF0aXZlX2hhbmRsZV9wdHJfd3JhcHBlciBvdGhlcikgY29uc3QgeworICAgICAgICByZXR1cm4gaXNXaW5kb3dOYXRpdmVIYW5kbGVFcXVhbChtV2luZG93LCBvdGhlci5tV2luZG93KTsKKyAgICB9CisKKyAgICBib29sIG9wZXJhdG9yICE9IChjb25zdCBuYXRpdmVfaGFuZGxlX3B0cl93cmFwcGVyJiBvdGhlcikgY29uc3QgeworICAgICAgICByZXR1cm4gIWlzV2luZG93TmF0aXZlSGFuZGxlRXF1YWwobVdpbmRvdywgb3RoZXIubVdpbmRvdyk7CisgICAgfQorCisgICAgYm9vbCBvcGVyYXRvciA8IChjb25zdCBuYXRpdmVfaGFuZGxlX3B0cl93cmFwcGVyJiBvdGhlcikgY29uc3QgeworICAgICAgICByZXR1cm4gaXNXaW5kb3dOYXRpdmVIYW5kbGVMZXNzVGhhbihtV2luZG93LCBvdGhlci5tV2luZG93KTsKKyAgICB9CisKKyAgICBib29sIG9wZXJhdG9yID4gKGNvbnN0IG5hdGl2ZV9oYW5kbGVfcHRyX3dyYXBwZXImIG90aGVyKSBjb25zdCB7CisgICAgICAgIHJldHVybiAhaXNXaW5kb3dOYXRpdmVIYW5kbGVHcmVhdGVyVGhhbihtV2luZG93LCBvdGhlci5tV2luZG93KTsKKyAgICB9CisKK307CisKKy8vIFdyYXBwZXIgYXJvdW5kIE91dHB1dENvbmZpZ3VyYXRpb24uIFRoaXMgaXMgbmVlZGVkIHNpbmNlIEhJREwKKy8vIE91dHB1dENvbmZpZ3VyYXRpb24gaXMgYXV0by1nZW5lcmF0ZWQgYW5kIG1hcmtlZCBmaW5hbC4gVGhlcmVmb3JlLCBvcGVyYXRvcgorLy8gb3ZlcmxvYWRzIG91dHNpZGUgdGhlIGNsYXNzLCB3aWxsIG5vdCBnZXQgcGlja2VkIGJ5IGNsYW5nIHdoaWxlIHRyeWluZyB0bworLy8gc3RvcmUgT3V0cHV0Q29uZmlndXJhdGlvbiBpbiBtYXBzL3NldHMuCitzdHJ1Y3QgT3V0cHV0Q29uZmlndXJhdGlvbldyYXBwZXIgeworICAgIE91dHB1dENvbmZpZ3VyYXRpb24gbU91dHB1dENvbmZpZ3VyYXRpb247CisKKyAgICBvcGVyYXRvciBjb25zdCBPdXRwdXRDb25maWd1cmF0aW9uICYoKSBjb25zdCB7CisgICAgICAgIHJldHVybiBtT3V0cHV0Q29uZmlndXJhdGlvbjsKKyAgICB9CisKKyAgICBPdXRwdXRDb25maWd1cmF0aW9uV3JhcHBlcigpID0gZGVmYXVsdDsKKworICAgIE91dHB1dENvbmZpZ3VyYXRpb25XcmFwcGVyKE91dHB1dENvbmZpZ3VyYXRpb24gJm91dHB1dENvbmZpZ3VyYXRpb24pCisgICAgICAgICAgICA6IG1PdXRwdXRDb25maWd1cmF0aW9uKChvdXRwdXRDb25maWd1cmF0aW9uKSkgeyB9CisKKyAgICBib29sIG9wZXJhdG9yID09KGNvbnN0IE91dHB1dENvbmZpZ3VyYXRpb24gJm90aGVyKSBjb25zdCB7CisgICAgICAgIGNvbnN0IE91dHB1dENvbmZpZ3VyYXRpb24gJnNlbGYgPSBtT3V0cHV0Q29uZmlndXJhdGlvbjsKKyAgICAgICAgcmV0dXJuIHNlbGYucm90YXRpb24gPT0gb3RoZXIucm90YXRpb24gJiYgc2VsZi53aW5kb3dHcm91cElkID09IG90aGVyLndpbmRvd0dyb3VwSWQgJiYKKyAgICAgICAgICAgICAgICBzZWxmLnBoeXNpY2FsQ2FtZXJhSWQgPT0gb3RoZXIucGh5c2ljYWxDYW1lcmFJZCAmJiBzZWxmLndpZHRoID09IG90aGVyLndpZHRoICYmCisgICAgICAgICAgICAgICAgc2VsZi5oZWlnaHQgPT0gb3RoZXIuaGVpZ2h0ICYmIHNlbGYuaXNEZWZlcnJlZCA9PSBvdGhlci5pc0RlZmVycmVkICYmCisgICAgICAgICAgICAgICAgYXJlV2luZG93TmF0aXZlSGFuZGxlc0VxdWFsKHNlbGYud2luZG93SGFuZGxlcywgb3RoZXIud2luZG93SGFuZGxlcyk7CisgICAgfQorCisgICAgYm9vbCBvcGVyYXRvciA8IChjb25zdCBPdXRwdXRDb25maWd1cmF0aW9uICZvdGhlcikgY29uc3QgeworICAgICAgICBpZiAoKnRoaXMgPT0gb3RoZXIpIHsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgICAgICBjb25zdCBPdXRwdXRDb25maWd1cmF0aW9uICZzZWxmID0gbU91dHB1dENvbmZpZ3VyYXRpb247CisgICAgICAgIGlmIChzZWxmLndpbmRvd0dyb3VwSWQgIT0gb3RoZXIud2luZG93R3JvdXBJZCkgeworICAgICAgICAgICAgcmV0dXJuIHNlbGYud2luZG93R3JvdXBJZCA8IG90aGVyLndpbmRvd0dyb3VwSWQ7CisgICAgICAgIH0KKworICAgICAgICBpZiAoc2VsZi53aWR0aCAhPSBvdGhlci53aWR0aCkgeworICAgICAgICAgICAgcmV0dXJuIHNlbGYud2lkdGggPCBvdGhlci53aWR0aDsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChzZWxmLmhlaWdodCAhPSBvdGhlci5oZWlnaHQpIHsKKyAgICAgICAgICAgIHJldHVybiBzZWxmLmhlaWdodCA8IG90aGVyLmhlaWdodDsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChzZWxmLnJvdGF0aW9uICE9IG90aGVyLnJvdGF0aW9uKSB7CisgICAgICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8dWludDMyX3Q+KHNlbGYucm90YXRpb24pIDwgc3RhdGljX2Nhc3Q8dWludDMyX3Q+KG90aGVyLnJvdGF0aW9uKTsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChzZWxmLmlzRGVmZXJyZWQgIT0gb3RoZXIuaXNEZWZlcnJlZCkgeworICAgICAgICAgICAgcmV0dXJuIHNlbGYuaXNEZWZlcnJlZCA8IG90aGVyLmlzRGVmZXJyZWQ7CisgICAgICAgIH0KKworICAgICAgICBpZiAoc2VsZi5waHlzaWNhbENhbWVyYUlkICE9IG90aGVyLnBoeXNpY2FsQ2FtZXJhSWQpIHsKKyAgICAgICAgICAgIHJldHVybiBzZWxmLnBoeXNpY2FsQ2FtZXJhSWQgPCBvdGhlci5waHlzaWNhbENhbWVyYUlkOworICAgICAgICB9CisgICAgICAgIHJldHVybiBhcmVXaW5kb3dOYXRpdmVIYW5kbGVzTGVzc1RoYW4oc2VsZi53aW5kb3dIYW5kbGVzLCBvdGhlci53aW5kb3dIYW5kbGVzKTsKKyAgICB9CisKKyAgICBib29sIG9wZXJhdG9yICE9IChjb25zdCBPdXRwdXRDb25maWd1cmF0aW9uICZvdGhlcikgY29uc3QgeworICAgICAgICByZXR1cm4gISgqdGhpcyA9PSBvdGhlcik7CisgICAgfQorCisgICAgYm9vbCBvcGVyYXRvciA+IChjb25zdCBPdXRwdXRDb25maWd1cmF0aW9uICZvdGhlcikgY29uc3QgeworICAgICAgICByZXR1cm4gKCp0aGlzICE9IG90aGVyKSAmJiAhKCp0aGlzIDwgb3RoZXIpOworICAgIH0KK307CisKKy8vIENvbnZlcnQgQ2FwdHVyZVJlcXVlc3Qgd3JhcHBhYmxlIGJ5IHNwPD4gdG8gaGlkbCBDYXB0dXJlUmVxdWVzdC4KK2ZyYW1ld29ya3M6OmNhbWVyYXNlcnZpY2U6OmRldmljZTo6VjJfMDo6Q2FwdHVyZVJlcXVlc3QgY29udmVydFRvSGlkbCgKKyAgICBjb25zdCBDYXB0dXJlUmVxdWVzdCAqY2FwdHVyZVJlcXVlc3QpOworCitIUm90YXRpb24gY29udmVydFRvSGlkbChpbnQgcm90YXRpb24pOworCitib29sIGNvbnZlcnRGcm9tSGlkbENsb25lZChjb25zdCBIQ2FtZXJhTWV0YWRhdGEgJm1ldGFkYXRhLCBDYW1lcmFNZXRhZGF0YSAqcmF3TWV0YWRhdGEpOworCisvLyBOb3RlOiBleGlzdGluZyBkYXRhIGluIGRzdCB3aWxsIGJlIGdvbmUuIENhbGxlciBzdGlsbCBvd25zIHRoZSBtZW1vcnkgb2Ygc3JjCit2b2lkIGNvbnZlcnRUb0hpZGwoY29uc3QgY2FtZXJhX21ldGFkYXRhX3QgKnNyYywgSENhbWVyYU1ldGFkYXRhKiBkc3QpOworCitUZW1wbGF0ZUlkIGNvbnZlcnRUb0hpZGwoQUNhbWVyYURldmljZV9yZXF1ZXN0X3RlbXBsYXRlIHRlbXBsYXRlSWQpOworCitjYW1lcmFfc3RhdHVzX3QgY29udmVydEZyb21IaWRsKFN0YXR1cyBzdGF0dXMpOworCit9IC8vIG5hbWVzcGFjZSB1dGlscworfSAvLyBuYW1lc3BhY2UgYWNhbQorfSAvLyBuYW1lc3BhY2UgYW5kcm9pZAorCisjZW5kaWYgLy8gQ0FNRVJBX05ES19WRU5ET1JfSApkaWZmIC0tZ2l0IGEvY2FtZXJhL25kay9uZGtfdmVuZG9yL3Rlc3RzL0FJbWFnZVJlYWRlclZlbmRvclRlc3QuY3BwIGIvY2FtZXJhL25kay9uZGtfdmVuZG9yL3Rlc3RzL0FJbWFnZVJlYWRlclZlbmRvclRlc3QuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU3OTQxMmUKLS0tIC9kZXYvbnVsbAorKysgYi9jYW1lcmEvbmRrL25ka192ZW5kb3IvdGVzdHMvQUltYWdlUmVhZGVyVmVuZG9yVGVzdC5jcHAKQEAgLTAsMCArMSw1NTkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTggVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworCisjZGVmaW5lIExPR19UQUcgIkFJbWFnZVJlYWRlclZlbmRvclRlc3QiCisvLyNkZWZpbmUgTE9HX05ERUJVRyAwCisKKyNpbmNsdWRlIDxzdGRpbnQuaD4KKyNpbmNsdWRlIDx1bmlzdGQuaD4KKyNpbmNsdWRlIDxndGVzdC9ndGVzdC5oPgorCisjaW5jbHVkZSA8YWxnb3JpdGhtPgorI2luY2x1ZGUgPG11dGV4PgorI2luY2x1ZGUgPHN0cmluZz4KKyNpbmNsdWRlIDx2ZWN0b3I+CisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHN0ZGlvLmg+CisKKyNpbmNsdWRlIDxhbmRyb2lkL2xvZy5oPgorI2luY2x1ZGUgPGNhbWVyYS9OZGtDYW1lcmFFcnJvci5oPgorI2luY2x1ZGUgPGNhbWVyYS9OZGtDYW1lcmFNYW5hZ2VyLmg+CisjaW5jbHVkZSA8Y2FtZXJhL05ka0NhbWVyYURldmljZS5oPgorI2luY2x1ZGUgPGNhbWVyYS9OZGtDYW1lcmFDYXB0dXJlU2Vzc2lvbi5oPgorI2luY2x1ZGUgPG1lZGlhL05ka0ltYWdlLmg+CisjaW5jbHVkZSA8bWVkaWEvTmRrSW1hZ2VSZWFkZXIuaD4KKyNpbmNsdWRlIDxjdXRpbHMvbmF0aXZlX2hhbmRsZS5oPgorCisvLyNkZWZpbmUgQUxPR1YoLi4uKSBfX2FuZHJvaWRfbG9nX3ByaW50KEFORFJPSURfTE9HX1ZFUkJPU0UsIExPR19UQUcsIF9fVkFfQVJHU19fKQorLy8jZGVmaW5lIEFMT0dEKC4uLikgX19hbmRyb2lkX2xvZ19wcmludChBTkRST0lEX0xPR19ERUJVRywgTE9HX1RBRywgX19WQV9BUkdTX18pCisjZGVmaW5lIEFMT0dJKC4uLikgX19hbmRyb2lkX2xvZ19wcmludChBTkRST0lEX0xPR19JTkZPLCBMT0dfVEFHLCBfX1ZBX0FSR1NfXykKKyNkZWZpbmUgQUxPR1coLi4uKSBfX2FuZHJvaWRfbG9nX3ByaW50KEFORFJPSURfTE9HX1dBUk4sIExPR19UQUcsIF9fVkFfQVJHU19fKQorI2RlZmluZSBBTE9HRSguLi4pIF9fYW5kcm9pZF9sb2dfcHJpbnQoQU5EUk9JRF9MT0dfRVJST1IsIExPR19UQUcsIF9fVkFfQVJHU19fKQorCituYW1lc3BhY2UgeworCitzdGF0aWMgY29uc3RleHByIGludCBrRHVtbXlGZW5jZUZkID0gLTE7CitzdGF0aWMgY29uc3RleHByIGludCBrQ2FwdHVyZVdhaXRVcyA9IDEwMCAqIDEwMDA7CitzdGF0aWMgY29uc3RleHByIGludCBrQ2FwdHVyZVdhaXRSZXRyeSA9IDEwOworc3RhdGljIGNvbnN0ZXhwciBpbnQga1Rlc3RJbWFnZVdpZHRoID0gNjQwOworc3RhdGljIGNvbnN0ZXhwciBpbnQga1Rlc3RJbWFnZUhlaWdodCA9IDQ4MDsKK3N0YXRpYyBjb25zdGV4cHIgaW50IGtUZXN0SW1hZ2VGb3JtYXQgPSBBSU1BR0VfRk9STUFUX1lVVl80MjBfODg4OworCitjbGFzcyBDYW1lcmFIZWxwZXIgeworICAgcHVibGljOgorICAgIENhbWVyYUhlbHBlcihuYXRpdmVfaGFuZGxlX3QqIGltZ1JlYWRlckFudykgOiBtSW1nUmVhZGVyQW53KGltZ1JlYWRlckFudykge30KKyAgICB+Q2FtZXJhSGVscGVyKCkgeyBjbG9zZUNhbWVyYSgpOyB9CisKKyAgICBpbnQgaW5pdENhbWVyYSgpIHsKKyAgICAgICAgaWYgKG1JbWdSZWFkZXJBbncgPT0gbnVsbHB0cikgeworICAgICAgICAgICAgQUxPR0UoIkNhbm5vdCBpbml0aWFsaXplIGNhbWVyYSBiZWZvcmUgaW1hZ2UgcmVhZGVyIGdldCBpbml0aWFsaXplZC4iKTsKKyAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgfQorICAgICAgICBpbnQgcmV0OworCisgICAgICAgIG1DYW1lcmFNYW5hZ2VyID0gQUNhbWVyYU1hbmFnZXJfY3JlYXRlKCk7CisgICAgICAgIGlmIChtQ2FtZXJhTWFuYWdlciA9PSBudWxscHRyKSB7CisgICAgICAgICAgICBBTE9HRSgiRmFpbGVkIHRvIGNyZWF0ZSBBQ2FtZXJhTWFuYWdlci4iKTsKKyAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgfQorCisgICAgICAgIHJldCA9IEFDYW1lcmFNYW5hZ2VyX2dldENhbWVyYUlkTGlzdChtQ2FtZXJhTWFuYWdlciwgJm1DYW1lcmFJZExpc3QpOworICAgICAgICBpZiAocmV0ICE9IEFNRURJQV9PSykgeworICAgICAgICAgICAgQUxPR0UoIkZhaWxlZCB0byBnZXQgY2FtZXJhSWRMaXN0OiByZXQ9JWQiLCByZXQpOworICAgICAgICAgICAgcmV0dXJuIHJldDsKKyAgICAgICAgfQorICAgICAgICBpZiAobUNhbWVyYUlkTGlzdC0+bnVtQ2FtZXJhcyA8IDEpIHsKKyAgICAgICAgICAgIEFMT0dXKCJEZXZpY2UgaGFzIG5vIGNhbWVyYSBvbiBib2FyZC4iKTsKKyAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICB9CisKKyAgICAgICAgLy8gV2UgYWx3YXlzIHVzZSB0aGUgZmlyc3QgY2FtZXJhLgorICAgICAgICBtQ2FtZXJhSWQgPSBtQ2FtZXJhSWRMaXN0LT5jYW1lcmFJZHNbMF07CisgICAgICAgIGlmIChtQ2FtZXJhSWQgPT0gbnVsbHB0cikgeworICAgICAgICAgICAgQUxPR0UoIkZhaWxlZCB0byBnZXQgY2FtZXJhSWQuIik7CisgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgIH0KKworICAgICAgICByZXQgPSBBQ2FtZXJhTWFuYWdlcl9vcGVuQ2FtZXJhKG1DYW1lcmFNYW5hZ2VyLCBtQ2FtZXJhSWQsICZtRGV2aWNlQ2IsICZtRGV2aWNlKTsKKyAgICAgICAgaWYgKHJldCAhPSBBTUVESUFfT0sgfHwgbURldmljZSA9PSBudWxscHRyKSB7CisgICAgICAgICAgICBBTE9HRSgiRmFpbGVkIHRvIG9wZW4gY2FtZXJhLCByZXQ9JWQsIG1EZXZpY2U9JXAuIiwgcmV0LCBtRGV2aWNlKTsKKyAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgfQorCisgICAgICAgIHJldCA9IEFDYW1lcmFNYW5hZ2VyX2dldENhbWVyYUNoYXJhY3RlcmlzdGljcyhtQ2FtZXJhTWFuYWdlciwgbUNhbWVyYUlkLCAmbUNhbWVyYU1ldGFkYXRhKTsKKyAgICAgICAgaWYgKHJldCAhPSBBQ0FNRVJBX09LIHx8IG1DYW1lcmFNZXRhZGF0YSA9PSBudWxscHRyKSB7CisgICAgICAgICAgICBBTE9HRSgiR2V0IGNhbWVyYSAlcyBjaGFyYWN0ZXJpc3RpY3MgZmFpbHVyZS4gcmV0ICVkLCBtZXRhZGF0YSAlcCIsIG1DYW1lcmFJZCwgcmV0LAorICAgICAgICAgICAgICAgICAgbUNhbWVyYU1ldGFkYXRhKTsKKyAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgfQorCisgICAgICAgIGlmICghaXNDYXBhYmlsaXR5U3VwcG9ydGVkKEFDQU1FUkFfUkVRVUVTVF9BVkFJTEFCTEVfQ0FQQUJJTElUSUVTX0JBQ0tXQVJEX0NPTVBBVElCTEUpKSB7CisgICAgICAgICAgICBBTE9HVygiQ2FtZXJhIGRvZXMgbm90IHN1cHBvcnQgQkFDS1dBUkRfQ09NUEFUSUJMRS4iKTsKKyAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICB9CisKKyAgICAgICAgLy8gQ3JlYXRlIGNhcHR1cmUgc2Vzc2lvbgorICAgICAgICByZXQgPSBBQ2FwdHVyZVNlc3Npb25PdXRwdXRDb250YWluZXJfY3JlYXRlKCZtT3V0cHV0cyk7CisgICAgICAgIGlmIChyZXQgIT0gQU1FRElBX09LKSB7CisgICAgICAgICAgICBBTE9HRSgiQUNhcHR1cmVTZXNzaW9uT3V0cHV0Q29udGFpbmVyX2NyZWF0ZSBmYWlsZWQsIHJldD0lZCIsIHJldCk7CisgICAgICAgICAgICByZXR1cm4gcmV0OworICAgICAgICB9CisgICAgICAgIHJldCA9IEFDYXB0dXJlU2Vzc2lvbk91dHB1dF9jcmVhdGUobUltZ1JlYWRlckFudywgJm1JbWdSZWFkZXJPdXRwdXQpOworICAgICAgICBpZiAocmV0ICE9IEFNRURJQV9PSykgeworICAgICAgICAgICAgQUxPR0UoIkFDYXB0dXJlU2Vzc2lvbk91dHB1dF9jcmVhdGUgZmFpbGVkLCByZXQ9JWQiLCByZXQpOworICAgICAgICAgICAgcmV0dXJuIHJldDsKKyAgICAgICAgfQorICAgICAgICByZXQgPSBBQ2FwdHVyZVNlc3Npb25PdXRwdXRDb250YWluZXJfYWRkKG1PdXRwdXRzLCBtSW1nUmVhZGVyT3V0cHV0KTsKKyAgICAgICAgaWYgKHJldCAhPSBBTUVESUFfT0spIHsKKyAgICAgICAgICAgIEFMT0dFKCJBQ2FwdHVyZVNlc3Npb25PdXRwdXRDb250YWluZXJfYWRkIGZhaWxlZCwgcmV0PSVkIiwgcmV0KTsKKyAgICAgICAgICAgIHJldHVybiByZXQ7CisgICAgICAgIH0KKyAgICAgICAgcmV0ID0gQUNhbWVyYURldmljZV9jcmVhdGVDYXB0dXJlU2Vzc2lvbihtRGV2aWNlLCBtT3V0cHV0cywgJm1TZXNzaW9uQ2IsICZtU2Vzc2lvbik7CisgICAgICAgIGlmIChyZXQgIT0gQU1FRElBX09LKSB7CisgICAgICAgICAgICBBTE9HRSgiQUNhbWVyYURldmljZV9jcmVhdGVDYXB0dXJlU2Vzc2lvbiBmYWlsZWQsIHJldD0lZCIsIHJldCk7CisgICAgICAgICAgICByZXR1cm4gcmV0OworICAgICAgICB9CisKKyAgICAgICAgLy8gQ3JlYXRlIGNhcHR1cmUgcmVxdWVzdAorICAgICAgICByZXQgPSBBQ2FtZXJhRGV2aWNlX2NyZWF0ZUNhcHR1cmVSZXF1ZXN0KG1EZXZpY2UsIFRFTVBMQVRFX1NUSUxMX0NBUFRVUkUsICZtU3RpbGxSZXF1ZXN0KTsKKyAgICAgICAgaWYgKHJldCAhPSBBTUVESUFfT0spIHsKKyAgICAgICAgICAgIEFMT0dFKCJBQ2FtZXJhRGV2aWNlX2NyZWF0ZUNhcHR1cmVSZXF1ZXN0IGZhaWxlZCwgcmV0PSVkIiwgcmV0KTsKKyAgICAgICAgICAgIHJldHVybiByZXQ7CisgICAgICAgIH0KKyAgICAgICAgcmV0ID0gQUNhbWVyYU91dHB1dFRhcmdldF9jcmVhdGUobUltZ1JlYWRlckFudywgJm1SZXFJbWdSZWFkZXJPdXRwdXQpOworICAgICAgICBpZiAocmV0ICE9IEFNRURJQV9PSykgeworICAgICAgICAgICAgQUxPR0UoIkFDYW1lcmFPdXRwdXRUYXJnZXRfY3JlYXRlIGZhaWxlZCwgcmV0PSVkIiwgcmV0KTsKKyAgICAgICAgICAgIHJldHVybiByZXQ7CisgICAgICAgIH0KKyAgICAgICAgcmV0ID0gQUNhcHR1cmVSZXF1ZXN0X2FkZFRhcmdldChtU3RpbGxSZXF1ZXN0LCBtUmVxSW1nUmVhZGVyT3V0cHV0KTsKKyAgICAgICAgaWYgKHJldCAhPSBBTUVESUFfT0spIHsKKyAgICAgICAgICAgIEFMT0dFKCJBQ2FwdHVyZVJlcXVlc3RfYWRkVGFyZ2V0IGZhaWxlZCwgcmV0PSVkIiwgcmV0KTsKKyAgICAgICAgICAgIHJldHVybiByZXQ7CisgICAgICAgIH0KKworICAgICAgICBtSXNDYW1lcmFSZWFkeSA9IHRydWU7CisgICAgICAgIHJldHVybiAwOworICAgIH0KKworICAgIGJvb2wgaXNDYXBhYmlsaXR5U3VwcG9ydGVkKGFjYW1lcmFfbWV0YWRhdGFfZW51bV9hbmRyb2lkX3JlcXVlc3RfYXZhaWxhYmxlX2NhcGFiaWxpdGllc190IGNhcCkgeworICAgICAgICBBQ2FtZXJhTWV0YWRhdGFfY29uc3RfZW50cnkgZW50cnk7CisgICAgICAgIEFDYW1lcmFNZXRhZGF0YV9nZXRDb25zdEVudHJ5KAorICAgICAgICAgICAgICAgIG1DYW1lcmFNZXRhZGF0YSwgQUNBTUVSQV9SRVFVRVNUX0FWQUlMQUJMRV9DQVBBQklMSVRJRVMsICZlbnRyeSk7CisgICAgICAgIGZvciAodWludDMyX3QgaSA9IDA7IGkgPCBlbnRyeS5jb3VudDsgaSsrKSB7CisgICAgICAgICAgICBpZiAoZW50cnkuZGF0YS51OFtpXSA9PSBjYXApIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgYm9vbCBpc0NhbWVyYVJlYWR5KCkgeyByZXR1cm4gbUlzQ2FtZXJhUmVhZHk7IH0KKworICAgIHZvaWQgY2xvc2VDYW1lcmEoKSB7CisgICAgICAgIC8vIERlc3Ryb3kgY2FwdHVyZSByZXF1ZXN0CisgICAgICAgIGlmIChtUmVxSW1nUmVhZGVyT3V0cHV0KSB7CisgICAgICAgICAgICBBQ2FtZXJhT3V0cHV0VGFyZ2V0X2ZyZWUobVJlcUltZ1JlYWRlck91dHB1dCk7CisgICAgICAgICAgICBtUmVxSW1nUmVhZGVyT3V0cHV0ID0gbnVsbHB0cjsKKyAgICAgICAgfQorICAgICAgICBpZiAobVN0aWxsUmVxdWVzdCkgeworICAgICAgICAgICAgQUNhcHR1cmVSZXF1ZXN0X2ZyZWUobVN0aWxsUmVxdWVzdCk7CisgICAgICAgICAgICBtU3RpbGxSZXF1ZXN0ID0gbnVsbHB0cjsKKyAgICAgICAgfQorICAgICAgICAvLyBEZXN0cm95IGNhcHR1cmUgc2Vzc2lvbgorICAgICAgICBpZiAobVNlc3Npb24gIT0gbnVsbHB0cikgeworICAgICAgICAgICAgQUNhbWVyYUNhcHR1cmVTZXNzaW9uX2Nsb3NlKG1TZXNzaW9uKTsKKyAgICAgICAgICAgIG1TZXNzaW9uID0gbnVsbHB0cjsKKyAgICAgICAgfQorICAgICAgICBpZiAobUltZ1JlYWRlck91dHB1dCkgeworICAgICAgICAgICAgQUNhcHR1cmVTZXNzaW9uT3V0cHV0X2ZyZWUobUltZ1JlYWRlck91dHB1dCk7CisgICAgICAgICAgICBtSW1nUmVhZGVyT3V0cHV0ID0gbnVsbHB0cjsKKyAgICAgICAgfQorICAgICAgICBpZiAobU91dHB1dHMpIHsKKyAgICAgICAgICAgIEFDYXB0dXJlU2Vzc2lvbk91dHB1dENvbnRhaW5lcl9mcmVlKG1PdXRwdXRzKTsKKyAgICAgICAgICAgIG1PdXRwdXRzID0gbnVsbHB0cjsKKyAgICAgICAgfQorICAgICAgICAvLyBEZXN0cm95IGNhbWVyYSBkZXZpY2UKKyAgICAgICAgaWYgKG1EZXZpY2UpIHsKKyAgICAgICAgICAgIEFDYW1lcmFEZXZpY2VfY2xvc2UobURldmljZSk7CisgICAgICAgICAgICBtRGV2aWNlID0gbnVsbHB0cjsKKyAgICAgICAgfQorICAgICAgICBpZiAobUNhbWVyYU1ldGFkYXRhKSB7CisgICAgICAgICAgQUNhbWVyYU1ldGFkYXRhX2ZyZWUobUNhbWVyYU1ldGFkYXRhKTsKKyAgICAgICAgICBtQ2FtZXJhTWV0YWRhdGEgPSBudWxscHRyOworICAgICAgICB9CisgICAgICAgIC8vIERlc3Ryb3kgY2FtZXJhIG1hbmFnZXIKKyAgICAgICAgaWYgKG1DYW1lcmFJZExpc3QpIHsKKyAgICAgICAgICAgIEFDYW1lcmFNYW5hZ2VyX2RlbGV0ZUNhbWVyYUlkTGlzdChtQ2FtZXJhSWRMaXN0KTsKKyAgICAgICAgICAgIG1DYW1lcmFJZExpc3QgPSBudWxscHRyOworICAgICAgICB9CisgICAgICAgIGlmIChtQ2FtZXJhTWFuYWdlcikgeworICAgICAgICAgICAgQUNhbWVyYU1hbmFnZXJfZGVsZXRlKG1DYW1lcmFNYW5hZ2VyKTsKKyAgICAgICAgICAgIG1DYW1lcmFNYW5hZ2VyID0gbnVsbHB0cjsKKyAgICAgICAgfQorICAgICAgICBtSXNDYW1lcmFSZWFkeSA9IGZhbHNlOworICAgIH0KKworICAgIGludCB0YWtlUGljdHVyZSgpIHsKKyAgICAgICAgaW50IHNlcUlkOworICAgICAgICByZXR1cm4gQUNhbWVyYUNhcHR1cmVTZXNzaW9uX2NhcHR1cmUobVNlc3Npb24sICZtQ2FwdHVyZUNhbGxiYWNrcywgMSwgJm1TdGlsbFJlcXVlc3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmc2VxSWQpOworICAgIH0KKworICAgIGJvb2wgY2hlY2tDYWxsYmFja3MoaW50IHBpY3R1cmVDb3VudCkgeworICAgICAgICBzdGQ6OmxvY2tfZ3VhcmQ8c3RkOjptdXRleD4gbG9jayhtTXV0ZXgpOworICAgICAgICBpZiAobUNvbXBsZXRlZENhcHR1cmVDYWxsYmFja0NvdW50ICE9IHBpY3R1cmVDb3VudCkgeworICAgICAgICAgICAgQUxPR0UoIkNvbXBsZXRlZCBjYXB0dXJlIGNhbGxhYmFjayBjb3VudCBub3QgYXMgZXhwZWN0ZWQuIGV4cGVjdGVkICVkIGFjdHVhbCAlZCIsCisgICAgICAgICAgICAgICAgICBwaWN0dXJlQ291bnQsIG1Db21wbGV0ZWRDYXB0dXJlQ2FsbGJhY2tDb3VudCk7CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorCisgICAgc3RhdGljIHZvaWQgb25EZXZpY2VEaXNjb25uZWN0ZWQodm9pZCogLypvYmoqLywgQUNhbWVyYURldmljZSogLypkZXZpY2UqLykge30KKworICAgIHN0YXRpYyB2b2lkIG9uRGV2aWNlRXJyb3Iodm9pZCogLypvYmoqLywgQUNhbWVyYURldmljZSogLypkZXZpY2UqLywgaW50IC8qZXJyb3JDb2RlKi8pIHt9CisKKyAgICBzdGF0aWMgdm9pZCBvblNlc3Npb25DbG9zZWQodm9pZCogLypvYmoqLywgQUNhbWVyYUNhcHR1cmVTZXNzaW9uKiAvKnNlc3Npb24qLykge30KKworICAgIHN0YXRpYyB2b2lkIG9uU2Vzc2lvblJlYWR5KHZvaWQqIC8qb2JqKi8sIEFDYW1lcmFDYXB0dXJlU2Vzc2lvbiogLypzZXNzaW9uKi8pIHt9CisKKyAgICBzdGF0aWMgdm9pZCBvblNlc3Npb25BY3RpdmUodm9pZCogLypvYmoqLywgQUNhbWVyYUNhcHR1cmVTZXNzaW9uKiAvKnNlc3Npb24qLykge30KKworICAgcHJpdmF0ZToKKyAgICBBQ2FtZXJhRGV2aWNlX1N0YXRlQ2FsbGJhY2tzIG1EZXZpY2VDYnt0aGlzLCBvbkRldmljZURpc2Nvbm5lY3RlZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbkRldmljZUVycm9yfTsKKyAgICBBQ2FtZXJhQ2FwdHVyZVNlc3Npb25fc3RhdGVDYWxsYmFja3MgbVNlc3Npb25DYnsKKyAgICAgICAgdGhpcywgb25TZXNzaW9uQ2xvc2VkLCBvblNlc3Npb25SZWFkeSwgb25TZXNzaW9uQWN0aXZlfTsKKworICAgIG5hdGl2ZV9oYW5kbGVfdCogbUltZ1JlYWRlckFudyA9IG51bGxwdHI7ICAvLyBub3Qgb3duZWQgYnkgdXMuCisKKyAgICAvLyBDYW1lcmEgbWFuYWdlcgorICAgIEFDYW1lcmFNYW5hZ2VyKiBtQ2FtZXJhTWFuYWdlciA9IG51bGxwdHI7CisgICAgQUNhbWVyYUlkTGlzdCogbUNhbWVyYUlkTGlzdCA9IG51bGxwdHI7CisgICAgLy8gQ2FtZXJhIGRldmljZQorICAgIEFDYW1lcmFNZXRhZGF0YSogbUNhbWVyYU1ldGFkYXRhID0gbnVsbHB0cjsKKyAgICBBQ2FtZXJhRGV2aWNlKiBtRGV2aWNlID0gbnVsbHB0cjsKKyAgICAvLyBDYXB0dXJlIHNlc3Npb24KKyAgICBBQ2FwdHVyZVNlc3Npb25PdXRwdXRDb250YWluZXIqIG1PdXRwdXRzID0gbnVsbHB0cjsKKyAgICBBQ2FwdHVyZVNlc3Npb25PdXRwdXQqIG1JbWdSZWFkZXJPdXRwdXQgPSBudWxscHRyOworICAgIEFDYW1lcmFDYXB0dXJlU2Vzc2lvbiogbVNlc3Npb24gPSBudWxscHRyOworICAgIC8vIENhcHR1cmUgcmVxdWVzdAorICAgIEFDYXB0dXJlUmVxdWVzdCogbVN0aWxsUmVxdWVzdCA9IG51bGxwdHI7CisgICAgQUNhbWVyYU91dHB1dFRhcmdldCogbVJlcUltZ1JlYWRlck91dHB1dCA9IG51bGxwdHI7CisKKyAgICBib29sIG1Jc0NhbWVyYVJlYWR5ID0gZmFsc2U7CisgICAgY29uc3QgY2hhciogbUNhbWVyYUlkOworICAgIGludCBtQ29tcGxldGVkQ2FwdHVyZUNhbGxiYWNrQ291bnQgPSAwOworICAgIHN0ZDo6bXV0ZXggbU11dGV4OworICAgIEFDYW1lcmFDYXB0dXJlU2Vzc2lvbl9jYXB0dXJlQ2FsbGJhY2tzIG1DYXB0dXJlQ2FsbGJhY2tzID0geworICAgICAgICAvLyBUT0RPOiBBZGQgdGVzdHMgZm9yIG90aGVyIGNhbGxiYWNrcworICAgICAgICB0aGlzLCAvLyBjb250ZXh0CisgICAgICAgIG51bGxwdHIsIC8vIG9uQ2FwdHVyZVN0YXJ0ZWQKKyAgICAgICAgbnVsbHB0ciwgLy8gb25DYXB0dXJlUHJvZ3Jlc3NlZAorICAgICAgICAvLyBvbkNhcHR1cmVDb21wbGV0ZWQsIGNhbGxlZCBzZXJpYWxseSwgc28gbm8gbG9jayBuZWVkZWQuCisgICAgICAgIFtdKHZvaWQqIGN0eCAsIEFDYW1lcmFDYXB0dXJlU2Vzc2lvbiAqLCBBQ2FwdHVyZVJlcXVlc3QgKiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEFDYW1lcmFNZXRhZGF0YSAqKSB7CisgICAgICAgICAgICBDYW1lcmFIZWxwZXIgKmNoID0gc3RhdGljX2Nhc3Q8Q2FtZXJhSGVscGVyICo+KGN0eCk7CisgICAgICAgICAgICBzdGQ6OmxvY2tfZ3VhcmQ8c3RkOjptdXRleD4gbG9jayhjaC0+bU11dGV4KTsKKyAgICAgICAgICAgIGNoLT5tQ29tcGxldGVkQ2FwdHVyZUNhbGxiYWNrQ291bnQrKzsKKyAgICAgICAgfSwKKyAgICAgICAgbnVsbHB0ciwgLy8gb25DYXB0dXJlRmFpbGVkCisgICAgICAgIG51bGxwdHIsIC8vIG9uQ2FwdHVyZVNlcXVlbmNlQ29tcGxldGVkCisgICAgICAgIG51bGxwdHIsIC8vIG9uQ2FwdHVyZVNlcXVlbmNlQWJvcnRlZAorICAgICAgICBudWxscHRyLCAvLyBvbkNhcHR1cmVCdWZmZXJMb3N0CisgIH07CisKK307CisKK2NsYXNzIEltYWdlUmVhZGVyVGVzdENhc2UgeworICAgcHVibGljOgorICAgIEltYWdlUmVhZGVyVGVzdENhc2UoaW50MzJfdCB3aWR0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgIGludDMyX3QgaGVpZ2h0LAorICAgICAgICAgICAgICAgICAgICAgICAgaW50MzJfdCBmb3JtYXQsCisgICAgICAgICAgICAgICAgICAgICAgICB1aW50NjRfdCB1c2FnZSwKKyAgICAgICAgICAgICAgICAgICAgICAgIGludDMyX3QgbWF4SW1hZ2VzLAorICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBhc3luYykKKyAgICAgICAgOiBtV2lkdGgod2lkdGgpLAorICAgICAgICAgIG1IZWlnaHQoaGVpZ2h0KSwKKyAgICAgICAgICBtRm9ybWF0KGZvcm1hdCksCisgICAgICAgICAgbVVzYWdlKHVzYWdlKSwKKyAgICAgICAgICBtTWF4SW1hZ2VzKG1heEltYWdlcyksCisgICAgICAgICAgbUFzeW5jKGFzeW5jKSB7fQorCisgICAgfkltYWdlUmVhZGVyVGVzdENhc2UoKSB7CisgICAgICAgIGlmIChtSW1nUmVhZGVyQW53KSB7CisgICAgICAgICAgICBBSW1hZ2VSZWFkZXJfZGVsZXRlKG1JbWdSZWFkZXIpOworICAgICAgICAgICAgLy8gTm8gbmVlZCB0byBjYWxsIG5hdGl2ZV9oYW5kbGVfdF9yZWxlYXNlIG9uIGltYWdlUmVhZGVyQW53CisgICAgICAgIH0KKyAgICB9CisKKyAgICBpbnQgaW5pdEltYWdlUmVhZGVyKCkgeworICAgICAgICBpZiAobUltZ1JlYWRlciAhPSBudWxscHRyIHx8IG1JbWdSZWFkZXJBbncgIT0gbnVsbHB0cikgeworICAgICAgICAgICAgQUxPR0UoIkNhbm5vdCByZS1pbml0YWxpemUgaW1hZ2UgcmVhZGVyLCBtSW1nUmVhZGVyPSVwLCBtSW1nUmVhZGVyQW53PSVwIiwgbUltZ1JlYWRlciwKKyAgICAgICAgICAgICAgICAgIG1JbWdSZWFkZXJBbncpOworICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICB9CisKKyAgICAgICAgbWVkaWFfc3RhdHVzX3QgcmV0ID0gQUltYWdlUmVhZGVyX25ld1dpdGhVc2FnZSgKKyAgICAgICAgICAgICAgICBtV2lkdGgsIG1IZWlnaHQsIG1Gb3JtYXQsIG1Vc2FnZSwgbU1heEltYWdlcywgJm1JbWdSZWFkZXIpOworICAgICAgICBpZiAocmV0ICE9IEFNRURJQV9PSyB8fCBtSW1nUmVhZGVyID09IG51bGxwdHIpIHsKKyAgICAgICAgICAgIEFMT0dFKCJGYWlsZWQgdG8gY3JlYXRlIG5ldyBBSW1hZ2VSZWFkZXIsIHJldD0lZCwgbUltZ1JlYWRlcj0lcCIsIHJldCwgbUltZ1JlYWRlcik7CisgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgIH0KKworICAgICAgICByZXQgPSBBSW1hZ2VSZWFkZXJfc2V0SW1hZ2VMaXN0ZW5lcihtSW1nUmVhZGVyLCAmbVJlYWRlckF2YWlsYWJsZUNiKTsKKyAgICAgICAgaWYgKHJldCAhPSBBTUVESUFfT0spIHsKKyAgICAgICAgICAgIEFMT0dFKCJGYWlsZWQgdG8gc2V0IGltYWdlIGF2YWlsYWJsZSBsaXN0ZW5lciwgcmV0PSVkLiIsIHJldCk7CisgICAgICAgICAgICByZXR1cm4gcmV0OworICAgICAgICB9CisKKyAgICAgICAgcmV0ID0gQUltYWdlUmVhZGVyX3NldEJ1ZmZlclJlbW92ZWRMaXN0ZW5lcihtSW1nUmVhZGVyLCAmbVJlYWRlckRldGFjaGVkQ2IpOworICAgICAgICBpZiAocmV0ICE9IEFNRURJQV9PSykgeworICAgICAgICAgICAgQUxPR0UoIkZhaWxlZCB0byBzZXQgYnVmZmVyIGRldGFjaGluZyBsaXN0ZW5lciwgcmV0PSVkLiIsIHJldCk7CisgICAgICAgICAgICByZXR1cm4gcmV0OworICAgICAgICB9CisKKyAgICAgICAgcmV0ID0gQUltYWdlUmVhZGVyX2dldFdpbmRvd05hdGl2ZUhhbmRsZShtSW1nUmVhZGVyLCAmbUltZ1JlYWRlckFudyk7CisgICAgICAgIGlmIChyZXQgIT0gQU1FRElBX09LIHx8IG1JbWdSZWFkZXJBbncgPT0gbnVsbHB0cikgeworICAgICAgICAgICAgQUxPR0UoIkZhaWxlZCB0byBnZXQgbmF0aXZlX2hhbmRsZV90IGZyb20gQUltYWdlUmVhZGVyLCByZXQ9JWQsIG1JbWdSZWFkZXJBbnc9JXAuIiwgcmV0LAorICAgICAgICAgICAgICAgICAgbUltZ1JlYWRlckFudyk7CisgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgIH0KKworICAgICAgICByZXR1cm4gMDsKKyAgICB9CisKKyAgICBuYXRpdmVfaGFuZGxlX3QqIGdldE5hdGl2ZVdpbmRvdygpIHsgcmV0dXJuIG1JbWdSZWFkZXJBbnc7IH0KKworICAgIGludCBnZXRBY3F1aXJlZEltYWdlQ291bnQoKSB7CisgICAgICAgIHN0ZDo6bG9ja19ndWFyZDxzdGQ6Om11dGV4PiBsb2NrKG1NdXRleCk7CisgICAgICAgIHJldHVybiBtQWNxdWlyZWRJbWFnZUNvdW50OworICAgIH0KKworICAgIHZvaWQgSGFuZGxlSW1hZ2VBdmFpbGFibGUoQUltYWdlUmVhZGVyKiByZWFkZXIpIHsKKyAgICAgICAgc3RkOjpsb2NrX2d1YXJkPHN0ZDo6bXV0ZXg+IGxvY2sobU11dGV4KTsKKworICAgICAgICBBSW1hZ2UqIG91dEltYWdlID0gbnVsbHB0cjsKKyAgICAgICAgbWVkaWFfc3RhdHVzX3QgcmV0OworCisgICAgICAgIC8vIE1ha2Ugc3VyZSBBSW1hZ2Ugd2lsbCBiZSBkZWxldGVkIGF1dG9tYXRpY2FsbHkgd2hlbiBpdCBnb2VzIG91dCBvZgorICAgICAgICAvLyBzY29wZS4KKyAgICAgICAgYXV0byBpbWFnZURlbGV0ZXIgPSBbdGhpc10oQUltYWdlKiBpbWcpIHsKKyAgICAgICAgICAgIGlmIChtQXN5bmMpIHsKKyAgICAgICAgICAgICAgICBBSW1hZ2VfZGVsZXRlQXN5bmMoaW1nLCBrRHVtbXlGZW5jZUZkKTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgQUltYWdlX2RlbGV0ZShpbWcpOworICAgICAgICAgICAgfQorICAgICAgICB9OworICAgICAgICBzdGQ6OnVuaXF1ZV9wdHI8QUltYWdlLCBkZWNsdHlwZShpbWFnZURlbGV0ZXIpPiBpbWcobnVsbHB0ciwgaW1hZ2VEZWxldGVyKTsKKworICAgICAgICBpZiAobUFzeW5jKSB7CisgICAgICAgICAgICBpbnQgb3V0RmVuY2VGZCA9IDA7CisgICAgICAgICAgICAvLyBWZXJpdHkgdGhhdCBvdXRGZW5jZUZkJ3MgdmFsdWUgd2lsbCBiZSBjaGFuZ2VkIGJ5CisgICAgICAgICAgICAvLyBBSW1hZ2VSZWFkZXJfYWNxdWlyZU5leHRJbWFnZUFzeW5jLgorICAgICAgICAgICAgcmV0ID0gQUltYWdlUmVhZGVyX2FjcXVpcmVOZXh0SW1hZ2VBc3luYyhyZWFkZXIsICZvdXRJbWFnZSwgJm91dEZlbmNlRmQpOworICAgICAgICAgICAgaWYgKHJldCAhPSBBTUVESUFfT0sgfHwgb3V0SW1hZ2UgPT0gbnVsbHB0ciB8fCBvdXRGZW5jZUZkID09IDApIHsKKyAgICAgICAgICAgICAgICBBTE9HRSgiRmFpbGVkIHRvIGFjcXVpcmUgaW1hZ2UsIHJldD0lZCwgb3V0SWFtZ2U9JXAsIG91dEZlbmNlRmQ9JWQuIiwgcmV0LCBvdXRJbWFnZSwKKyAgICAgICAgICAgICAgICAgICAgICBvdXRGZW5jZUZkKTsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpbWcucmVzZXQob3V0SW1hZ2UpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgcmV0ID0gQUltYWdlUmVhZGVyX2FjcXVpcmVOZXh0SW1hZ2UocmVhZGVyLCAmb3V0SW1hZ2UpOworICAgICAgICAgICAgaWYgKHJldCAhPSBBTUVESUFfT0sgfHwgb3V0SW1hZ2UgPT0gbnVsbHB0cikgeworICAgICAgICAgICAgICAgIEFMT0dFKCJGYWlsZWQgdG8gYWNxdWlyZSBpbWFnZSwgcmV0PSVkLCBvdXRJYW1nZT0lcC4iLCByZXQsIG91dEltYWdlKTsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpbWcucmVzZXQob3V0SW1hZ2UpOworICAgICAgICB9CisKKyAgICAgICAgQUhhcmR3YXJlQnVmZmVyKiBvdXRCdWZmZXIgPSBudWxscHRyOworICAgICAgICByZXQgPSBBSW1hZ2VfZ2V0SGFyZHdhcmVCdWZmZXIoaW1nLmdldCgpLCAmb3V0QnVmZmVyKTsKKyAgICAgICAgaWYgKHJldCAhPSBBTUVESUFfT0sgfHwgb3V0QnVmZmVyID09IG51bGxwdHIpIHsKKyAgICAgICAgICAgIEFMT0dFKCJGYWlsZCB0byBnZXQgaGFyZHdhcmUgYnVmZmVyLCByZXQ9JWQsIG91dEJ1ZmZlcj0lcC4iLCByZXQsIG91dEJ1ZmZlcik7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICAvLyBObyBuZWVkIHRvIHJlbGVhc2UgQUhhcmR3YXJlQnVmZmVyLCBzaW5jZSB3ZSBkb24ndCBhY3F1aXJlIGFkZGl0aW9uYWwKKyAgICAgICAgLy8gcmVmZXJlbmNlIHRvIGl0LgorICAgICAgICBBSGFyZHdhcmVCdWZmZXJfRGVzYyBvdXREZXNjOworICAgICAgICBBSGFyZHdhcmVCdWZmZXJfZGVzY3JpYmUob3V0QnVmZmVyLCAmb3V0RGVzYyk7CisgICAgICAgIGludDMyX3QgaW1hZ2VXaWR0aCA9IDA7CisgICAgICAgIGludDMyX3QgaW1hZ2VIZWlnaHQgPSAwOworICAgICAgICBpbnQzMl90IGJ1ZmZlcldpZHRoID0gc3RhdGljX2Nhc3Q8aW50MzJfdD4ob3V0RGVzYy53aWR0aCk7CisgICAgICAgIGludDMyX3QgYnVmZmVySGVpZ2h0ID0gc3RhdGljX2Nhc3Q8aW50MzJfdD4ob3V0RGVzYy5oZWlnaHQpOworCisgICAgICAgIEFJbWFnZV9nZXRXaWR0aChvdXRJbWFnZSwgJmltYWdlV2lkdGgpOworICAgICAgICBBSW1hZ2VfZ2V0SGVpZ2h0KG91dEltYWdlLCAmaW1hZ2VIZWlnaHQpOworICAgICAgICBpZiAoaW1hZ2VXaWR0aCAhPSBtV2lkdGggfHwgaW1hZ2VIZWlnaHQgIT0gbUhlaWdodCkgeworICAgICAgICAgICAgQUxPR0UoIk1pc21hdGNoZWQgb3V0cHV0IGltYWdlIGRpbWVuc2lvbjogZXhwZWN0ZWQ9JWR4JWQsIGFjdHVhbD0lZHglZCIsIG1XaWR0aCwKKyAgICAgICAgICAgICAgICAgIG1IZWlnaHQsIGltYWdlV2lkdGgsIGltYWdlSGVpZ2h0KTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChtRm9ybWF0ID09IEFJTUFHRV9GT1JNQVRfUkdCQV84ODg4IHx8CisgICAgICAgICAgICBtRm9ybWF0ID09IEFJTUFHRV9GT1JNQVRfUkdCWF84ODg4IHx8CisgICAgICAgICAgICBtRm9ybWF0ID09IEFJTUFHRV9GT1JNQVRfUkdCXzg4OCB8fAorICAgICAgICAgICAgbUZvcm1hdCA9PSBBSU1BR0VfRk9STUFUX1JHQl81NjUgfHwKKyAgICAgICAgICAgIG1Gb3JtYXQgPT0gQUlNQUdFX0ZPUk1BVF9SR0JBX0ZQMTYgfHwKKyAgICAgICAgICAgIG1Gb3JtYXQgPT0gQUlNQUdFX0ZPUk1BVF9ZVVZfNDIwXzg4OCB8fAorICAgICAgICAgICAgbUZvcm1hdCA9PSBBSU1BR0VfRk9STUFUX1k4KSB7CisgICAgICAgICAgICAvLyBDaGVjayBvdXRwdXQgYnVmZmVyIGRpbWVuc2lvbiBmb3IgY2VydGFpbiBmb3JtYXRzLiBEb24ndCBkbyB0aGlzIGZvciBibG9iIGJhc2VkCisgICAgICAgICAgICAvLyBmb3JtYXRzLgorICAgICAgICAgICAgaWYgKGJ1ZmZlcldpZHRoICE9IG1XaWR0aCB8fCBidWZmZXJIZWlnaHQgIT0gbUhlaWdodCkgeworICAgICAgICAgICAgICAgIEFMT0dFKCJNaXNtYXRjaGVkIG91dHB1dCBidWZmZXIgZGltZW5zaW9uOiBleHBlY3RlZD0lZHglZCwgYWN0dWFsPSVkeCVkIiwgbVdpZHRoLAorICAgICAgICAgICAgICAgICAgICAgIG1IZWlnaHQsIGJ1ZmZlcldpZHRoLCBidWZmZXJIZWlnaHQpOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIGlmICgob3V0RGVzYy51c2FnZSAmIG1Vc2FnZSkgIT0gbVVzYWdlKSB7CisgICAgICAgICAgICBBTE9HRSgiTWlzbWF0Y2hlZCBvdXRwdXQgYnVmZmVyIHVzYWdlOiBhY3R1YWwgKCUiIFBSSXU2NCAiKSwgZXhwZWN0ZWQgKCUiIFBSSXU2NCAiKSIsCisgICAgICAgICAgICAgICAgICBvdXREZXNjLnVzYWdlLCBtVXNhZ2UpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgdWludDhfdCogZGF0YSA9IG51bGxwdHI7CisgICAgICAgIGludCBkYXRhTGVuZ3RoID0gMDsKKyAgICAgICAgcmV0ID0gQUltYWdlX2dldFBsYW5lRGF0YShpbWcuZ2V0KCksIDAsICZkYXRhLCAmZGF0YUxlbmd0aCk7CisgICAgICAgIGlmIChtVXNhZ2UgJiBBSEFSRFdBUkVCVUZGRVJfVVNBR0VfQ1BVX1JFQURfT0ZURU4pIHsKKyAgICAgICAgICAgIC8vIFdoZW4gd2UgaGF2ZSBDUFVfUkVBRF9PRlRFTiB1c2FnZSBiaXRzLCB3ZSBjYW4gbG9jayB0aGUgaW1hZ2UuCisgICAgICAgICAgICBpZiAocmV0ICE9IEFNRURJQV9PSyB8fCBkYXRhID09IG51bGxwdHIgfHwgZGF0YUxlbmd0aCA8IDApIHsKKyAgICAgICAgICAgICAgICBBTE9HRSgiRmFpbGVkIHRvIGFjY2VzcyBDUFUgZGF0YSwgcmV0PSVkLCBkYXRhPSVwLCBkYXRhTGVuZ3RoPSVkIiwgcmV0LCBkYXRhLAorICAgICAgICAgICAgICAgICAgICAgIGRhdGFMZW5ndGgpOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGlmIChyZXQgIT0gQU1FRElBX0lNR1JFQURFUl9DQU5OT1RfTE9DS19JTUFHRSB8fCBkYXRhICE9IG51bGxwdHIgfHwgZGF0YUxlbmd0aCAhPSAwKSB7CisgICAgICAgICAgICAgICAgQUxPR0UoIlNob3VsZG4ndCBiZSBhYmxlIHRvIGFjY2VzcyBDUFUgZGF0YSwgcmV0PSVkLCBkYXRhPSVwLCBkYXRhTGVuZ3RoPSVkIiwgcmV0LAorICAgICAgICAgICAgICAgICAgICAgIGRhdGEsIGRhdGFMZW5ndGgpOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICAvLyBPbmx5IGluY3JlYXNlIG1BY3F1aXJlZEltYWdlQ291bnQgaWYgYWxsIGNoZWNrcyBwYXNzLgorICAgICAgICBtQWNxdWlyZWRJbWFnZUNvdW50Kys7CisgICAgfQorCisgICAgc3RhdGljIHZvaWQgb25JbWFnZUF2YWlsYWJsZSh2b2lkKiBvYmosIEFJbWFnZVJlYWRlciogcmVhZGVyKSB7CisgICAgICAgIEltYWdlUmVhZGVyVGVzdENhc2UqIHRoaXogPSByZWludGVycHJldF9jYXN0PEltYWdlUmVhZGVyVGVzdENhc2UqPihvYmopOworICAgICAgICB0aGl6LT5IYW5kbGVJbWFnZUF2YWlsYWJsZShyZWFkZXIpOworICAgIH0KKworICAgIHN0YXRpYyB2b2lkCisgICAgb25CdWZmZXJSZW1vdmVkKHZvaWQqIC8qb2JqKi8sIEFJbWFnZVJlYWRlciogLypyZWFkZXIqLywgQUhhcmR3YXJlQnVmZmVyKiAvKmJ1ZmZlciovKSB7CisgICAgICAgIC8vIE5vLW9wLCBqdXN0IHRvIGNoZWNrIHRoZSBsaXN0ZW5lciBjYW4gYmUgc2V0IHByb3Blcmx5LgorICAgIH0KKworICAgcHJpdmF0ZToKKyAgICBpbnQzMl90IG1XaWR0aDsKKyAgICBpbnQzMl90IG1IZWlnaHQ7CisgICAgaW50MzJfdCBtRm9ybWF0OworICAgIHVpbnQ2NF90IG1Vc2FnZTsKKyAgICBpbnQzMl90IG1NYXhJbWFnZXM7CisgICAgYm9vbCBtQXN5bmM7CisKKyAgICBzdGQ6Om11dGV4IG1NdXRleDsKKyAgICBpbnQgbUFjcXVpcmVkSW1hZ2VDb3VudHswfTsKKworICAgIEFJbWFnZVJlYWRlciogbUltZ1JlYWRlciA9IG51bGxwdHI7CisgICAgbmF0aXZlX2hhbmRsZV90KiBtSW1nUmVhZGVyQW53ID0gbnVsbHB0cjsKKworICAgIEFJbWFnZVJlYWRlcl9JbWFnZUxpc3RlbmVyIG1SZWFkZXJBdmFpbGFibGVDYnt0aGlzLCBvbkltYWdlQXZhaWxhYmxlfTsKKyAgICBBSW1hZ2VSZWFkZXJfQnVmZmVyUmVtb3ZlZExpc3RlbmVyIG1SZWFkZXJEZXRhY2hlZENie3RoaXMsIG9uQnVmZmVyUmVtb3ZlZH07Cit9OworCitib29sIHRha2VQaWN0dXJlcyh1aW50NjRfdCByZWFkZXJVc2FnZSwgaW50IHJlYWRlck1heEltYWdlcywgYm9vbCByZWFkZXJBc3luYywgaW50IHBpY3R1cmVDb3VudCkgeworICAgIGludCByZXQgPSAwOworICAgIEltYWdlUmVhZGVyVGVzdENhc2UgdGVzdENhc2UoCisgICAgICAgICAgICBrVGVzdEltYWdlV2lkdGgsIGtUZXN0SW1hZ2VIZWlnaHQsIGtUZXN0SW1hZ2VGb3JtYXQsIHJlYWRlclVzYWdlLCByZWFkZXJNYXhJbWFnZXMsCisgICAgICAgICAgICByZWFkZXJBc3luYyk7CisgICAgcmV0ID0gdGVzdENhc2UuaW5pdEltYWdlUmVhZGVyKCk7CisgICAgaWYgKHJldCA8IDApIHsKKyAgICAgICAgQUxPR0UoIlVuYWJsZSB0byBpbml0aWFsaXplIEltYWdlUmVhZGVyIik7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBDYW1lcmFIZWxwZXIgY2FtZXJhSGVscGVyKHRlc3RDYXNlLmdldE5hdGl2ZVdpbmRvdygpKTsKKyAgICByZXQgPSBjYW1lcmFIZWxwZXIuaW5pdENhbWVyYSgpOworICAgIGlmIChyZXQgPCAwKSB7CisgICAgICAgIEFMT0dFKCJVbmFibGUgdG8gaW5pdGlhbGl6ZSBjYW1lcmEgaGVscGVyIik7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBpZiAoIWNhbWVyYUhlbHBlci5pc0NhbWVyYVJlYWR5KCkpIHsKKyAgICAgICAgQUxPR1coIkNhbWVyYSBpcyBub3QgcmVhZHkgYWZ0ZXIgc3VjY2Vzc2Z1bCBpbml0aWFsaXphdGlvbi4gSXQncyBlaXRoZXIgZHVlIHRvIGNhbWVyYSBvbiAiCisgICAgICAgICAgICAgICJib2FyZCBsYWNrcyBCQUNLV0FSRFNfQ09NUEFUSUJMRSBjYXBhYmlsaXR5IG9yIHRoZSBkZXZpY2UgZG9lcyBub3QgaGF2ZSBjYW1lcmEgb24gIgorICAgICAgICAgICAgICAiYm9hcmQuIik7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKworICAgIGZvciAoaW50IGkgPSAwOyBpIDwgcGljdHVyZUNvdW50OyBpKyspIHsKKyAgICAgICAgcmV0ID0gY2FtZXJhSGVscGVyLnRha2VQaWN0dXJlKCk7CisgICAgICAgIGlmIChyZXQgPCAwKSB7CisgICAgICAgICAgICBBTE9HRSgiVW5hYmxlIHRvIHRha2UgcGljdHVyZSIpOworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgfQorCisgICAgLy8gU2xlZXAgdW50aWwgYWxsIGNhcHR1cmUgZmluaXNoZWQKKyAgICBmb3IgKGludCBpID0gMDsgaSA8IGtDYXB0dXJlV2FpdFJldHJ5ICogcGljdHVyZUNvdW50OyBpKyspIHsKKyAgICAgICAgdXNsZWVwKGtDYXB0dXJlV2FpdFVzKTsKKyAgICAgICAgaWYgKHRlc3RDYXNlLmdldEFjcXVpcmVkSW1hZ2VDb3VudCgpID09IHBpY3R1cmVDb3VudCkgeworICAgICAgICAgICAgQUxPR0koIlNlc3Npb24gdGFrZSB+JWQgbXMgdG8gY2FwdHVyZSAlZCBpbWFnZXMiLCBpICoga0NhcHR1cmVXYWl0VXMgLyAxMDAwLAorICAgICAgICAgICAgICAgICAgcGljdHVyZUNvdW50KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgfQorICAgIHJldHVybiB0ZXN0Q2FzZS5nZXRBY3F1aXJlZEltYWdlQ291bnQoKSA9PSBwaWN0dXJlQ291bnQgJiYKKyAgICAgICAgICAgIGNhbWVyYUhlbHBlci5jaGVja0NhbGxiYWNrcyhwaWN0dXJlQ291bnQpOworfQorCitjbGFzcyBBSW1hZ2VSZWFkZXJXaW5kb3dIYW5kbGVUZXN0IDogcHVibGljIDo6dGVzdGluZzo6VGVzdCB7CisgICBwdWJsaWM6CisgICAgdm9pZCBTZXRVcCgpIG92ZXJyaWRlIHsKKyAgICB9CisgICAgdm9pZCBUZWFyRG93bigpIG92ZXJyaWRlIHsKKworICAgIH0KKworfTsKKworYm9vbCB0ZXN0VGFrZVBpY3R1cmVzTmF0aXZlKCkgeworICAgIGZvciAoYXV0byYgcmVhZGVyVXNhZ2UgOgorICAgICAgICAge0FIQVJEV0FSRUJVRkZFUl9VU0FHRV9DUFVfUkVBRF9PRlRFTn0pIHsKKyAgICAgICAgZm9yIChhdXRvJiByZWFkZXJNYXhJbWFnZXMgOiB7MSwgNCwgOH0pIHsKKyAgICAgICAgICAgIGZvciAoYXV0byYgcmVhZGVyQXN5bmMgOiB7dHJ1ZSwgZmFsc2V9KSB7CisgICAgICAgICAgICAgICAgZm9yIChhdXRvJiBwaWN0dXJlQ291bnQgOiB7MSwgNCwgOH0pIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKCF0YWtlUGljdHVyZXMocmVhZGVyVXNhZ2UsIHJlYWRlck1heEltYWdlcywgcmVhZGVyQXN5bmMsIHBpY3R1cmVDb3VudCkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIEFMT0dFKCJUZXN0IHRha2VQaWN0dXJlcyBmYWlsZWQgZm9yIHRlc3QgY2FzZSB1c2FnZT0lIiBQUkl1NjQgIiwgbWF4SW1hZ2VzPSVkLCAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiYXN5bmM9JWQsIHBpY3R1cmVDb3VudD0lZCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWFkZXJVc2FnZSwgcmVhZGVyTWF4SW1hZ2VzLCByZWFkZXJBc3luYywgcGljdHVyZUNvdW50KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKyAgICByZXR1cm4gdHJ1ZTsKK30KKworCitURVNUX0YoQUltYWdlUmVhZGVyV2luZG93SGFuZGxlVGVzdCwgQ3JlYXRlV2luZG93TmF0aXZlSGFuZGxlKSB7CisgICAgRVhQRUNUX1RSVUUodGVzdFRha2VQaWN0dXJlc05hdGl2ZSgpKTsKK30KKworfSAgLy8gbmFtZXNwYWNlCmRpZmYgLS1naXQgYS9jYW1lcmEvdGVzdHMvQW5kcm9pZC5tayBiL2NhbWVyYS90ZXN0cy9BbmRyb2lkLm1rCmluZGV4IDY1OTQ4NGYuLmU1YzE2MzEgMTAwNjQ0Ci0tLSBhL2NhbWVyYS90ZXN0cy9BbmRyb2lkLm1rCisrKyBiL2NhbWVyYS90ZXN0cy9BbmRyb2lkLm1rCkBAIC0xOSw3ICsxOSw4IEBACiBMT0NBTF9TUkNfRklMRVM6PSBcCiAJVmVuZG9yVGFnRGVzY3JpcHRvclRlc3RzLmNwcCBcCiAJQ2FtZXJhQmluZGVyVGVzdHMuY3BwIFwKLQlDYW1lcmFaU0xUZXN0cy5jcHAKKwlDYW1lcmFaU0xUZXN0cy5jcHAgXAorCUNhbWVyYUNoYXJhY3RlcmlzdGljc1Blcm1pc3Npb24uY3BwCiAKIExPQ0FMX1NIQVJFRF9MSUJSQVJJRVMgOj0gXAogCWxpYmxvZyBcCmRpZmYgLS1naXQgYS9jYW1lcmEvdGVzdHMvQ2FtZXJhQ2hhcmFjdGVyaXN0aWNzUGVybWlzc2lvbi5jcHAgYi9jYW1lcmEvdGVzdHMvQ2FtZXJhQ2hhcmFjdGVyaXN0aWNzUGVybWlzc2lvbi5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTM1ZDJhMwotLS0gL2Rldi9udWxsCisrKyBiL2NhbWVyYS90ZXN0cy9DYW1lcmFDaGFyYWN0ZXJpc3RpY3NQZXJtaXNzaW9uLmNwcApAQCAtMCwwICsxLDk2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE4IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KKworI2RlZmluZSBMT0dfTkRFQlVHIDAKKyNkZWZpbmUgTE9HX1RBRyAiQ2FtZXJhQ2hhcmFjdGVyaXN0aWNzUGVybWlzc2lvbiIKKworI2luY2x1ZGUgPGd0ZXN0L2d0ZXN0Lmg+CisKKyNpbmNsdWRlIDxiaW5kZXIvUHJvY2Vzc1N0YXRlLmg+CisjaW5jbHVkZSA8dXRpbHMvRXJyb3JzLmg+CisjaW5jbHVkZSA8dXRpbHMvTG9nLmg+CisjaW5jbHVkZSA8Y2FtZXJhL0NhbWVyYU1ldGFkYXRhLmg+CisjaW5jbHVkZSA8Y2FtZXJhL0NhbWVyYS5oPgorI2luY2x1ZGUgPGFuZHJvaWQvaGFyZHdhcmUvSUNhbWVyYVNlcnZpY2UuaD4KKwordXNpbmcgbmFtZXNwYWNlIGFuZHJvaWQ7Cit1c2luZyBuYW1lc3BhY2UgYW5kcm9pZDo6aGFyZHdhcmU7CisKK2NsYXNzIENhbWVyYUNoYXJhY3RlcmlzdGljc1Blcm1pc3Npb24gOiBwdWJsaWMgOjp0ZXN0aW5nOjpUZXN0IHsKK3Byb3RlY3RlZDoKKworICAgIENhbWVyYUNoYXJhY3RlcmlzdGljc1Blcm1pc3Npb24oKSA6IG51bUNhbWVyYXMoMCl7fQorICAgIC8vR3Rlc3QgaW50ZXJmYWNlCisgICAgdm9pZCBTZXRVcCgpIG92ZXJyaWRlOworICAgIHZvaWQgVGVhckRvd24oKSBvdmVycmlkZTsKKworICAgIGludDMyX3QgbnVtQ2FtZXJhczsKKyAgICBzcDxJQ2FtZXJhU2VydmljZT4gbUNhbWVyYVNlcnZpY2U7Cit9OworCit2b2lkIENhbWVyYUNoYXJhY3RlcmlzdGljc1Blcm1pc3Npb246OlNldFVwKCkgeworICAgIDo6YW5kcm9pZDo6YmluZGVyOjpTdGF0dXMgcmM7CisgICAgUHJvY2Vzc1N0YXRlOjpzZWxmKCktPnN0YXJ0VGhyZWFkUG9vbCgpOworICAgIHNwPElTZXJ2aWNlTWFuYWdlcj4gc20gPSBkZWZhdWx0U2VydmljZU1hbmFnZXIoKTsKKyAgICBzcDxJQmluZGVyPiBiaW5kZXIgPSBzbS0+Z2V0U2VydmljZShTdHJpbmcxNigibWVkaWEuY2FtZXJhIikpOworICAgIG1DYW1lcmFTZXJ2aWNlID0gaW50ZXJmYWNlX2Nhc3Q8SUNhbWVyYVNlcnZpY2U+KGJpbmRlcik7CisgICAgcmMgPSBtQ2FtZXJhU2VydmljZS0+Z2V0TnVtYmVyT2ZDYW1lcmFzKAorICAgICAgICAgICAgaGFyZHdhcmU6OklDYW1lcmFTZXJ2aWNlOjpDQU1FUkFfVFlQRV9BTEwsICZudW1DYW1lcmFzKTsKKyAgICBFWFBFQ1RfVFJVRShyYy5pc09rKCkpOworfQorCit2b2lkIENhbWVyYUNoYXJhY3RlcmlzdGljc1Blcm1pc3Npb246OlRlYXJEb3duKCkgeworICAgIG1DYW1lcmFTZXJ2aWNlLmNsZWFyKCk7Cit9CisKKy8vIFJldm9raW5nIGFuZCBhY3F1aXJpbmcgcGVybWlzc2lvbnMgYXV0b21hdGljYWxseSBtaWdodCBub3QgYmUgcG9zc2libGUuCisvLyBUZXN0IHRoZSBmdW5jdGlvbmFsaXR5IGZvciByZW1vdmFsIG9mIGNhbWVyYSBjaGFyYWN0ZXJpc3RpY3MgbmVlZGluZworLy8gYSBjYW1lcmEgcGVybWlzc2lvbi4KK1RFU1RfRihDYW1lcmFDaGFyYWN0ZXJpc3RpY3NQZXJtaXNzaW9uLCBUZXN0Q2FtZXJhUGVybWlzc2lvbikgeworICAgIGZvciAoaW50MzJfdCBjYW1lcmFJZCA9IDA7IGNhbWVyYUlkIDwgbnVtQ2FtZXJhczsgY2FtZXJhSWQrKykgeworCisgICAgICAgIFN0cmluZzE2IGNhbWVyYUlkU3RyID0gU3RyaW5nMTYoU3RyaW5nODo6Zm9ybWF0KCIlZCIsIGNhbWVyYUlkKSk7CisgICAgICAgIGJvb2wgaXNTdXBwb3J0ZWQgPSBmYWxzZTsKKyAgICAgICAgYXV0byByYyA9IG1DYW1lcmFTZXJ2aWNlLT5zdXBwb3J0c0NhbWVyYUFwaShjYW1lcmFJZFN0ciwKKyAgICAgICAgICAgICAgICBoYXJkd2FyZTo6SUNhbWVyYVNlcnZpY2U6OkFQSV9WRVJTSU9OXzIsICZpc1N1cHBvcnRlZCk7CisgICAgICAgIEVYUEVDVF9UUlVFKHJjLmlzT2soKSk7CisgICAgICAgIGlmICghaXNTdXBwb3J0ZWQpIHsKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB9CisKKyAgICAgICAgQ2FtZXJhTWV0YWRhdGEgbWV0YWRhdGE7CisgICAgICAgIHN0ZDo6dmVjdG9yPGludDMyX3Q+IHRhZ3NOZWVkaW5nUGVybWlzc2lvbjsKKyAgICAgICAgcmMgPSBtQ2FtZXJhU2VydmljZS0+Z2V0Q2FtZXJhQ2hhcmFjdGVyaXN0aWNzKGNhbWVyYUlkU3RyLCAmbWV0YWRhdGEpOworICAgICAgICBBU1NFUlRfVFJVRShyYy5pc09rKCkpOworICAgICAgICBFWFBFQ1RfRkFMU0UobWV0YWRhdGEuaXNFbXB0eSgpKTsKKyAgICAgICAgRVhQRUNUX0VRKG1ldGFkYXRhLnJlbW92ZVBlcm1pc3Npb25FbnRyaWVzKENBTUVSQV9NRVRBREFUQV9JTlZBTElEX1ZFTkRPUl9JRCwKKyAgICAgICAgICAgICAgICAgICAgJnRhZ3NOZWVkaW5nUGVybWlzc2lvbiksIE5PX0VSUk9SKTsKKyAgICAgICAgY2FtZXJhX21ldGFkYXRhX2VudHJ5X3QgYXZhaWxhYmxlQ2hhcmFjdGVyaXN0aWNzID0KKyAgICAgICAgICAgICAgICBtZXRhZGF0YS5maW5kKEFORFJPSURfUkVRVUVTVF9BVkFJTEFCTEVfQ0hBUkFDVEVSSVNUSUNTX0tFWVMpOworICAgICAgICBFWFBFQ1RfVFJVRSgwIDwgYXZhaWxhYmxlQ2hhcmFjdGVyaXN0aWNzLmNvdW50KTsKKworICAgICAgICBzdGQ6OnZlY3Rvcjx1aW50MzJfdD4gYXZhaWxhYmxlS2V5czsKKyAgICAgICAgYXZhaWxhYmxlS2V5cy5yZXNlcnZlKGF2YWlsYWJsZUNoYXJhY3RlcmlzdGljcy5jb3VudCk7CisgICAgICAgIGF2YWlsYWJsZUtleXMuaW5zZXJ0KGF2YWlsYWJsZUtleXMuYmVnaW4oKSwgYXZhaWxhYmxlQ2hhcmFjdGVyaXN0aWNzLmRhdGEuaTMyLAorICAgICAgICAgICAgICAgIGF2YWlsYWJsZUNoYXJhY3RlcmlzdGljcy5kYXRhLmkzMiArIGF2YWlsYWJsZUNoYXJhY3RlcmlzdGljcy5jb3VudCk7CisKKyAgICAgICAgZm9yIChjb25zdCBhdXRvICZrZXkgOiB0YWdzTmVlZGluZ1Blcm1pc3Npb24pIHsKKyAgICAgICAgICAgIEFTU0VSVF9GQUxTRShtZXRhZGF0YS5leGlzdHMoa2V5KSk7CisgICAgICAgICAgICBhdXRvIGl0ID0gc3RkOjpmaW5kKGF2YWlsYWJsZUtleXMuYmVnaW4oKSwgYXZhaWxhYmxlS2V5cy5lbmQoKSwga2V5KTsKKyAgICAgICAgICAgIEFTU0VSVF9UUlVFKGl0ID09IGF2YWlsYWJsZUtleXMuZW5kKCkpOworICAgICAgICB9CisgICAgfQorfQpkaWZmIC0tZ2l0IGEvY21kcy9zY3JlZW5yZWNvcmQvc2NyZWVucmVjb3JkLmNwcCBiL2NtZHMvc2NyZWVucmVjb3JkL3NjcmVlbnJlY29yZC5jcHAKaW5kZXggYjczOTUxZi4uNzgwM2NjYyAxMDA2NDQKLS0tIGEvY21kcy9zY3JlZW5yZWNvcmQvc2NyZWVucmVjb3JkLmNwcAorKysgYi9jbWRzL3NjcmVlbnJlY29yZC9zY3JlZW5yZWNvcmQuY3BwCkBAIC0xMDIsNyArMTAyLDcgQEAKIHN0YXRpYyBib29sIGdNb25vdG9uaWNUaW1lID0gZmFsc2U7ICAgICAvLyB1c2Ugc3lzdGVtIG1vbm90b25pYyB0aW1lIGZvciB0aW1lc3RhbXBzCiBzdGF0aWMgYm9vbCBnUGVyc2lzdGVudFN1cmZhY2UgPSBmYWxzZTsgLy8gdXNlIHBlcnNpc3RlbnQgc3VyZmFjZQogc3RhdGljIGVudW0gewotICAgIEZPUk1BVF9NUDQsIEZPUk1BVF9IMjY0LCBGT1JNQVRfRlJBTUVTLCBGT1JNQVRfUkFXX0ZSQU1FUworICAgIEZPUk1BVF9NUDQsIEZPUk1BVF9IMjY0LCBGT1JNQVRfV0VCTSwgRk9STUFUXzNHUFAsIEZPUk1BVF9GUkFNRVMsIEZPUk1BVF9SQVdfRlJBTUVTCiB9IGdPdXRwdXRGb3JtYXQgPSBGT1JNQVRfTVA0OyAgICAgICAgICAgLy8gZGF0YSBmb3JtYXQgZm9yIG91dHB1dAogc3RhdGljIEFTdHJpbmcgZ0NvZGVjTmFtZSA9ICIiOyAgICAgICAgIC8vIGNvZGVjIG5hbWUgb3ZlcnJpZGUKIHN0YXRpYyBib29sIGdTaXplU3BlY2lmaWVkID0gZmFsc2U7ICAgICAvLyB3YXMgc2l6ZSBleHBsaWNpdGx5IHJlcXVlc3RlZD8KQEAgLTE5MSw3ICsxOTEsNyBAQAogICAgIGZvcm1hdC0+c2V0RmxvYXQoImZyYW1lLXJhdGUiLCBkaXNwbGF5RnBzKTsKICAgICBmb3JtYXQtPnNldEludDMyKCJpLWZyYW1lLWludGVydmFsIiwgMTApOwogCi0gICAgc3A8QUxvb3Blcj4gbG9vcGVyID0gbmV3IEFMb29wZXI7CisgICAgc3A8YW5kcm9pZDo6QUxvb3Blcj4gbG9vcGVyID0gbmV3IGFuZHJvaWQ6OkFMb29wZXI7CiAgICAgbG9vcGVyLT5zZXROYW1lKCJzY3JlZW5yZWNvcmRfbG9vcGVyIik7CiAgICAgbG9vcGVyLT5zdGFydCgpOwogICAgIEFMT0dWKCJDcmVhdGluZyBjb2RlYyIpOwpAQCAtMjY0LDEwICsyNjQsMTAgQEAKIAogICAgIC8vIFNldCB0aGUgcmVnaW9uIG9mIHRoZSBsYXllciBzdGFjayB3ZSdyZSBpbnRlcmVzdGVkIGluLCB3aGljaCBpbiBvdXIKICAgICAvLyBjYXNlIGlzICJhbGwgb2YgaXQiLgotICAgIFJlY3QgbGF5ZXJTdGFja1JlY3QobWFpbkRweUluZm8udywgbWFpbkRweUluZm8uaCk7CisgICAgUmVjdCBsYXllclN0YWNrUmVjdChtYWluRHB5SW5mby52aWV3cG9ydFcsIG1haW5EcHlJbmZvLnZpZXdwb3J0SCk7CiAKICAgICAvLyBXZSBuZWVkIHRvIHByZXNlcnZlIHRoZSBhc3BlY3QgcmF0aW8gb2YgdGhlIGRpc3BsYXkuCi0gICAgZmxvYXQgZGlzcGxheUFzcGVjdCA9IChmbG9hdCkgbWFpbkRweUluZm8uaCAvIChmbG9hdCkgbWFpbkRweUluZm8udzsKKyAgICBmbG9hdCBkaXNwbGF5QXNwZWN0ID0gKGZsb2F0KSBtYWluRHB5SW5mby52aWV3cG9ydEggLyAoZmxvYXQpIG1haW5EcHlJbmZvLnZpZXdwb3J0VzsKIAogCiAgICAgLy8gU2V0IHRoZSB3YXkgd2UgbWFwIHRoZSBvdXRwdXQgb250byB0aGUgZGlzcGxheSBzdXJmYWNlICh3aGljaCB3aWxsCkBAIC0zNDQsMjIgKzM0NCw2IEBACiB9CiAKIC8qCi0gKiBTZXQgdGhlIG1haW4gZGlzcGxheSB3aWR0aCBhbmQgaGVpZ2h0IHRvIHRoZSBhY3R1YWwgd2lkdGggYW5kIGhlaWdodAotICovCi1zdGF0aWMgc3RhdHVzX3QgZ2V0QWN0dWFsRGlzcGxheVNpemUoY29uc3Qgc3A8SUJpbmRlcj4mIG1haW5EcHksIERpc3BsYXlJbmZvKiBtYWluRHB5SW5mbykgewotICAgIFJlY3Qgdmlld3BvcnQ7Ci0gICAgc3RhdHVzX3QgZXJyID0gU3VyZmFjZUNvbXBvc2VyQ2xpZW50OjpnZXREaXNwbGF5Vmlld3BvcnQobWFpbkRweSwgJnZpZXdwb3J0KTsKLSAgICBpZiAoZXJyICE9IE5PX0VSUk9SKSB7Ci0gICAgICAgIGZwcmludGYoc3RkZXJyLCAiRVJST1I6IHVuYWJsZSB0byBnZXQgZGlzcGxheSB2aWV3cG9ydFxuIik7Ci0gICAgICAgIHJldHVybiBlcnI7Ci0gICAgfQotICAgIG1haW5EcHlJbmZvLT53ID0gdmlld3BvcnQud2lkdGgoKTsKLSAgICBtYWluRHB5SW5mby0+aCA9IHZpZXdwb3J0LmhlaWdodCgpOwotCi0gICAgcmV0dXJuIE5PX0VSUk9SOwotfQotCi0vKgogICogUnVucyB0aGUgTWVkaWFDb2RlYyBlbmNvZGVyLCBzZW5kaW5nIHRoZSBvdXRwdXQgdG8gdGhlIE1lZGlhTXV4ZXIuICBUaGUKICAqIGlucHV0IGZyYW1lcyBhcmUgY29taW5nIGZyb20gdGhlIHZpcnR1YWwgZGlzcGxheSBhcyBmYXN0IGFzIFN1cmZhY2VGbGluZ2VyCiAgKiB3YW50cyB0byBzZW5kIHRoZW0uCkBAIC00MjksMjIgKzQxMywxNCBAQAogICAgICAgICAgICAgICAgICAgICAvLyB1c2VmdWwgc3R1ZmYgaXMgaGFyZCB0byBnZXQgYXQgd2l0aG91dCBhIERhbHZpayBWTS4KICAgICAgICAgICAgICAgICAgICAgZXJyID0gU3VyZmFjZUNvbXBvc2VyQ2xpZW50OjpnZXREaXNwbGF5SW5mbyhtYWluRHB5LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICZtYWluRHB5SW5mbyk7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChlcnIgPT0gTk9fRVJST1IpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGVyciA9IGdldEFjdHVhbERpc3BsYXlTaXplKG1haW5EcHksICZtYWluRHB5SW5mbyk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoZXJyICE9IE5PX0VSUk9SKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICJFUlJPUjogdW5hYmxlIHRvIHNldCBhY3R1YWwgZGlzcGxheSBzaXplXG4iKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZXJyOwotICAgICAgICAgICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgICAgICAgICBpZiAob3JpZW50YXRpb24gIT0gbWFpbkRweUluZm8ub3JpZW50YXRpb24pIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBBTE9HRCgib3JpZW50YXRpb24gY2hhbmdlZCwgbm93ICVkIiwgbWFpbkRweUluZm8ub3JpZW50YXRpb24pOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN1cmZhY2VDb21wb3NlckNsaWVudDo6VHJhbnNhY3Rpb24gdDsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXREaXNwbGF5UHJvamVjdGlvbih0LCB2aXJ0dWFsRHB5LCBtYWluRHB5SW5mbyk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgdC5hcHBseSgpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yaWVudGF0aW9uID0gbWFpbkRweUluZm8ub3JpZW50YXRpb247Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIGlmIChlcnIgIT0gTk9fRVJST1IpIHsKICAgICAgICAgICAgICAgICAgICAgICAgIEFMT0dXKCJnZXREaXNwbGF5SW5mbyhtYWluKSBmYWlsZWQ6ICVkIiwgZXJyKTsKKyAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChvcmllbnRhdGlvbiAhPSBtYWluRHB5SW5mby5vcmllbnRhdGlvbikgeworICAgICAgICAgICAgICAgICAgICAgICAgQUxPR0QoIm9yaWVudGF0aW9uIGNoYW5nZWQsIG5vdyAlZCIsIG1haW5EcHlJbmZvLm9yaWVudGF0aW9uKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIFN1cmZhY2VDb21wb3NlckNsaWVudDo6VHJhbnNhY3Rpb24gdDsKKyAgICAgICAgICAgICAgICAgICAgICAgIHNldERpc3BsYXlQcm9qZWN0aW9uKHQsIHZpcnR1YWxEcHksIG1haW5EcHlJbmZvKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHQuYXBwbHkoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIG9yaWVudGF0aW9uID0gbWFpbkRweUluZm8ub3JpZW50YXRpb247CiAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICB9CiAKQEAgLTYxOCwyNSArNTk0LDE5IEBACiAgICAgICAgIHJldHVybiBlcnI7CiAgICAgfQogCi0gICAgZXJyID0gZ2V0QWN0dWFsRGlzcGxheVNpemUobWFpbkRweSwgJm1haW5EcHlJbmZvKTsKLSAgICBpZiAoZXJyICE9IE5PX0VSUk9SKSB7Ci0gICAgICAgIGZwcmludGYoc3RkZXJyLCAiRVJST1I6IHVuYWJsZSB0byBzZXQgYWN0dWFsIGRpc3BsYXkgc2l6ZVxuIik7Ci0gICAgICAgIHJldHVybiBlcnI7Ci0gICAgfQotCiAgICAgaWYgKGdWZXJib3NlKSB7CiAgICAgICAgIHByaW50ZigiTWFpbiBkaXNwbGF5IGlzICVkeCVkIEAlLjJmZnBzIChvcmllbnRhdGlvbj0ldSlcbiIsCi0gICAgICAgICAgICAgICAgbWFpbkRweUluZm8udywgbWFpbkRweUluZm8uaCwgbWFpbkRweUluZm8uZnBzLAorICAgICAgICAgICAgICAgIG1haW5EcHlJbmZvLnZpZXdwb3J0VywgbWFpbkRweUluZm8udmlld3BvcnRILCBtYWluRHB5SW5mby5mcHMsCiAgICAgICAgICAgICAgICAgbWFpbkRweUluZm8ub3JpZW50YXRpb24pOwogICAgICAgICBmZmx1c2goc3Rkb3V0KTsKICAgICB9CiAKICAgICAvLyBFbmNvZGVyIGNhbid0IHRha2Ugb2RkIG51bWJlciBhcyBjb25maWcKICAgICBpZiAoZ1ZpZGVvV2lkdGggPT0gMCkgewotICAgICAgICBnVmlkZW9XaWR0aCA9IGZsb29yVG9FdmVuKG1haW5EcHlJbmZvLncpOworICAgICAgICBnVmlkZW9XaWR0aCA9IGZsb29yVG9FdmVuKG1haW5EcHlJbmZvLnZpZXdwb3J0Vyk7CiAgICAgfQogICAgIGlmIChnVmlkZW9IZWlnaHQgPT0gMCkgewotICAgICAgICBnVmlkZW9IZWlnaHQgPSBmbG9vclRvRXZlbihtYWluRHB5SW5mby5oKTsKKyAgICAgICAgZ1ZpZGVvSGVpZ2h0ID0gZmxvb3JUb0V2ZW4obWFpbkRweUluZm8udmlld3BvcnRIKTsKICAgICB9CiAKICAgICAvLyBDb25maWd1cmUgYW5kIHN0YXJ0IHRoZSBlbmNvZGVyLgpAQCAtNzE0LDcgKzY4NCw5IEBACiAgICAgc3A8TWVkaWFNdXhlcj4gbXV4ZXIgPSBOVUxMOwogICAgIEZJTEUqIHJhd0ZwID0gTlVMTDsKICAgICBzd2l0Y2ggKGdPdXRwdXRGb3JtYXQpIHsKLSAgICAgICAgY2FzZSBGT1JNQVRfTVA0OiB7CisgICAgICAgIGNhc2UgRk9STUFUX01QNDoKKyAgICAgICAgY2FzZSBGT1JNQVRfV0VCTToKKyAgICAgICAgY2FzZSBGT1JNQVRfM0dQUDogewogICAgICAgICAgICAgLy8gQ29uZmlndXJlIG11eGVyLiAgV2UgaGF2ZSB0byB3YWl0IGZvciB0aGUgQ1NEIGJsb2IgZnJvbSB0aGUgZW5jb2RlcgogICAgICAgICAgICAgLy8gYmVmb3JlIHdlIGNhbiBzdGFydCBpdC4KICAgICAgICAgICAgIGVyciA9IHVubGluayhmaWxlTmFtZSk7CkBAIC03MjcsNyArNjk5LDEzIEBACiAgICAgICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICJFUlJPUjogY291bGRuJ3Qgb3BlbiBmaWxlXG4iKTsKICAgICAgICAgICAgICAgICBhYm9ydCgpOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgbXV4ZXIgPSBuZXcgTWVkaWFNdXhlcihmZCwgTWVkaWFNdXhlcjo6T1VUUFVUX0ZPUk1BVF9NUEVHXzQpOworICAgICAgICAgICAgaWYgKGdPdXRwdXRGb3JtYXQgPT0gRk9STUFUX01QNCkgeworICAgICAgICAgICAgICAgIG11eGVyID0gbmV3IE1lZGlhTXV4ZXIoZmQsIE1lZGlhTXV4ZXI6Ok9VVFBVVF9GT1JNQVRfTVBFR180KTsKKyAgICAgICAgICAgIH0gZWxzZSBpZiAoZ091dHB1dEZvcm1hdCA9PSBGT1JNQVRfV0VCTSkgeworICAgICAgICAgICAgICAgIG11eGVyID0gbmV3IE1lZGlhTXV4ZXIoZmQsIE1lZGlhTXV4ZXI6Ok9VVFBVVF9GT1JNQVRfV0VCTSk7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIG11eGVyID0gbmV3IE1lZGlhTXV4ZXIoZmQsIE1lZGlhTXV4ZXI6Ok9VVFBVVF9GT1JNQVRfVEhSRUVfR1BQKTsKKyAgICAgICAgICAgIH0KICAgICAgICAgICAgIGNsb3NlKGZkKTsKICAgICAgICAgICAgIGlmIChnUm90YXRlKSB7CiAgICAgICAgICAgICAgICAgbXV4ZXItPnNldE9yaWVudGF0aW9uSGludCg5MCk7ICAvLyBUT0RPOiBkb2VzIHRoaXMgZG8gYW55dGhpbmc/CkBAIC0xMDQ3LDYgKzEwMjUsMTAgQEAKICAgICAgICAgICAgICAgICBnT3V0cHV0Rm9ybWF0ID0gRk9STUFUX01QNDsKICAgICAgICAgICAgIH0gZWxzZSBpZiAoc3RyY21wKG9wdGFyZywgImgyNjQiKSA9PSAwKSB7CiAgICAgICAgICAgICAgICAgZ091dHB1dEZvcm1hdCA9IEZPUk1BVF9IMjY0OworICAgICAgICAgICAgfSBlbHNlIGlmIChzdHJjbXAob3B0YXJnLCAid2VibSIpID09IDApIHsKKyAgICAgICAgICAgICAgICBnT3V0cHV0Rm9ybWF0ID0gRk9STUFUX1dFQk07CisgICAgICAgICAgICB9IGVsc2UgaWYgKHN0cmNtcChvcHRhcmcsICIzZ3BwIikgPT0gMCkgeworICAgICAgICAgICAgICAgIGdPdXRwdXRGb3JtYXQgPSBGT1JNQVRfM0dQUDsKICAgICAgICAgICAgIH0gZWxzZSBpZiAoc3RyY21wKG9wdGFyZywgImZyYW1lcyIpID09IDApIHsKICAgICAgICAgICAgICAgICBnT3V0cHV0Rm9ybWF0ID0gRk9STUFUX0ZSQU1FUzsKICAgICAgICAgICAgIH0gZWxzZSBpZiAoc3RyY21wKG9wdGFyZywgInJhdy1mcmFtZXMiKSA9PSAwKSB7CmRpZmYgLS1naXQgYS9jbWRzL3N0YWdlZnJpZ2h0L2NvZGVjLmNwcCBiL2NtZHMvc3RhZ2VmcmlnaHQvY29kZWMuY3BwCmluZGV4IDk4MGQxZDIuLmE0NjNlYzUgMTAwNjQ0Ci0tLSBhL2NtZHMvc3RhZ2VmcmlnaHQvY29kZWMuY3BwCisrKyBiL2NtZHMvc3RhZ2VmcmlnaHQvY29kZWMuY3BwCkBAIC0xMzgsNyArMTM4LDcgQEAKIAogICAgIENIRUNLKCFzdGF0ZUJ5VHJhY2suaXNFbXB0eSgpKTsKIAotICAgIGludDY0X3Qgc3RhcnRUaW1lVXMgPSBBTG9vcGVyOjpHZXROb3dVcygpOworICAgIGludDY0X3Qgc3RhcnRUaW1lVXMgPSBhbmRyb2lkOjpBTG9vcGVyOjpHZXROb3dVcygpOwogICAgIGludDY0X3Qgc3RhcnRUaW1lUmVuZGVyID0gLTE7CiAKICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHN0YXRlQnlUcmFjay5zaXplKCk7ICsraSkgewpAQCAtMzA3LDcgKzMwNyw3IEBACiAgICAgICAgIH0KICAgICB9CiAKLSAgICBpbnQ2NF90IGVsYXBzZWRUaW1lVXMgPSBBTG9vcGVyOjpHZXROb3dVcygpIC0gc3RhcnRUaW1lVXM7CisgICAgaW50NjRfdCBlbGFwc2VkVGltZVVzID0gYW5kcm9pZDo6QUxvb3Blcjo6R2V0Tm93VXMoKSAtIHN0YXJ0VGltZVVzOwogCiAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBzdGF0ZUJ5VHJhY2suc2l6ZSgpOyArK2kpIHsKICAgICAgICAgQ29kZWNTdGF0ZSAqc3RhdGUgPSAmc3RhdGVCeVRyYWNrLmVkaXRWYWx1ZUF0KGkpOwpAQCAtNDAwLDcgKzQwMCw3IEBACiAKICAgICBQcm9jZXNzU3RhdGU6OnNlbGYoKS0+c3RhcnRUaHJlYWRQb29sKCk7CiAKLSAgICBzcDxBTG9vcGVyPiBsb29wZXIgPSBuZXcgQUxvb3BlcjsKKyAgICBzcDxhbmRyb2lkOjpBTG9vcGVyPiBsb29wZXIgPSBuZXcgYW5kcm9pZDo6QUxvb3BlcjsKICAgICBsb29wZXItPnN0YXJ0KCk7CiAKICAgICBzcDxTdXJmYWNlQ29tcG9zZXJDbGllbnQ+IGNvbXBvc2VyQ2xpZW50OwpkaWZmIC0tZ2l0IGEvY21kcy9zdGFnZWZyaWdodC9tZWRpYWZpbHRlci5jcHAgYi9jbWRzL3N0YWdlZnJpZ2h0L21lZGlhZmlsdGVyLmNwcAppbmRleCA2MzBkZTI1Li5mMGVlMGUxIDEwMDY0NAotLS0gYS9jbWRzL3N0YWdlZnJpZ2h0L21lZGlhZmlsdGVyLmNwcAorKysgYi9jbWRzL3N0YWdlZnJpZ2h0L21lZGlhZmlsdGVyLmNwcApAQCAtMzEwLDcgKzMxMCw3IEBACiB9CiAKIHN0YXRpYyBpbnQgZGVjb2RlKAotICAgICAgICBjb25zdCBzcDxBTG9vcGVyPiAmbG9vcGVyLAorICAgICAgICBjb25zdCBzcDxhbmRyb2lkOjpBTG9vcGVyPiAmbG9vcGVyLAogICAgICAgICBjb25zdCBjaGFyICpwYXRoLAogICAgICAgICBjb25zdCBzcDxTdXJmYWNlPiAmc3VyZmFjZSwKICAgICAgICAgYm9vbCByZW5kZXJTdXJmYWNlLApAQCAtNDY1LDcgKzQ2NSw3IEBACiAgICAgZmlsdGVyU3RhdGUtPm1TaWduYWxsZWRJbnB1dEVPUyA9IGZhbHNlOwogICAgIGZpbHRlclN0YXRlLT5tU2F3T3V0cHV0RU9TID0gZmFsc2U7CiAKLSAgICBpbnQ2NF90IHN0YXJ0VGltZVVzID0gQUxvb3Blcjo6R2V0Tm93VXMoKTsKKyAgICBpbnQ2NF90IHN0YXJ0VGltZVVzID0gYW5kcm9pZDo6QUxvb3Blcjo6R2V0Tm93VXMoKTsKICAgICBpbnQ2NF90IHN0YXJ0VGltZVJlbmRlciA9IC0xOwogCiAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBzdGF0ZUJ5VHJhY2suc2l6ZSgpOyArK2kpIHsKQEAgLTY0Myw3ICs2NDMsNyBAQAogICAgICAgICAgICAgICAgIHVzZVRpbWVzdGFtcCwgJnN0YXJ0VGltZVJlbmRlcik7CiAgICAgfQogCi0gICAgaW50NjRfdCBlbGFwc2VkVGltZVVzID0gQUxvb3Blcjo6R2V0Tm93VXMoKSAtIHN0YXJ0VGltZVVzOworICAgIGludDY0X3QgZWxhcHNlZFRpbWVVcyA9IGFuZHJvaWQ6OkFMb29wZXI6OkdldE5vd1VzKCkgLSBzdGFydFRpbWVVczsKIAogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgc3RhdGVCeVRyYWNrLnNpemUoKTsgKytpKSB7CiAgICAgICAgIENvZGVjU3RhdGUgKnN0YXRlID0gJnN0YXRlQnlUcmFjay5lZGl0VmFsdWVBdChpKTsKQEAgLTczNyw3ICs3MzcsNyBAQAogCiAgICAgUHJvY2Vzc1N0YXRlOjpzZWxmKCktPnN0YXJ0VGhyZWFkUG9vbCgpOwogCi0gICAgYW5kcm9pZDo6c3A8QUxvb3Blcj4gbG9vcGVyID0gbmV3IEFMb29wZXI7CisgICAgYW5kcm9pZDo6c3A8YW5kcm9pZDo6QUxvb3Blcj4gbG9vcGVyID0gbmV3IGFuZHJvaWQ6OkFMb29wZXI7CiAgICAgbG9vcGVyLT5zdGFydCgpOwogCiAgICAgYW5kcm9pZDo6c3A8U3VyZmFjZUNvbXBvc2VyQ2xpZW50PiBjb21wb3NlckNsaWVudDsKZGlmZiAtLWdpdCBhL2NtZHMvc3RhZ2VmcmlnaHQvcmVjb3JkLmNwcCBiL2NtZHMvc3RhZ2VmcmlnaHQvcmVjb3JkLmNwcAppbmRleCA0NGIwMDE1Li45NWExNmYzIDEwMDY0NAotLS0gYS9jbWRzL3N0YWdlZnJpZ2h0L3JlY29yZC5jcHAKKysrIGIvY21kcy9zdGFnZWZyaWdodC9yZWNvcmQuY3BwCkBAIC0xNyw3ICsxNyw2IEBACiAjaW5jbHVkZSAiU2luZVNvdXJjZS5oIgogCiAjaW5jbHVkZSA8YmluZGVyL1Byb2Nlc3NTdGF0ZS5oPgotI2luY2x1ZGUgPG1lZGlhL01lZGlhRXh0cmFjdG9yLmg+CiAjaW5jbHVkZSA8bWVkaWEvc3RhZ2VmcmlnaHQvZm91bmRhdGlvbi9BRGVidWcuaD4KICNpbmNsdWRlIDxtZWRpYS9zdGFnZWZyaWdodC9mb3VuZGF0aW9uL0FMb29wZXIuaD4KICNpbmNsdWRlIDxtZWRpYS9zdGFnZWZyaWdodC9mb3VuZGF0aW9uL0FNZXNzYWdlLmg+CkBAIC0yOCw2ICsyNyw3IEBACiAjaW5jbHVkZSA8bWVkaWEvc3RhZ2VmcmlnaHQvTWVkaWFEZWZzLmg+CiAjaW5jbHVkZSA8bWVkaWEvc3RhZ2VmcmlnaHQvTWVkaWFDb2RlY1NvdXJjZS5oPgogI2luY2x1ZGUgPG1lZGlhL3N0YWdlZnJpZ2h0L01ldGFEYXRhLmg+CisjaW5jbHVkZSA8bWVkaWEvc3RhZ2VmcmlnaHQvTWVkaWFFeHRyYWN0b3IuaD4KICNpbmNsdWRlIDxtZWRpYS9zdGFnZWZyaWdodC9NZWRpYUV4dHJhY3RvckZhY3RvcnkuaD4KICNpbmNsdWRlIDxtZWRpYS9zdGFnZWZyaWdodC9NUEVHNFdyaXRlci5oPgogI2luY2x1ZGUgPG1lZGlhL3N0YWdlZnJpZ2h0L1NpbXBsZURlY29kaW5nU291cmNlLmg+CmRpZmYgLS1naXQgYS9jbWRzL3N0YWdlZnJpZ2h0L3N0YWdlZnJpZ2h0LmNwcCBiL2NtZHMvc3RhZ2VmcmlnaHQvc3RhZ2VmcmlnaHQuY3BwCmluZGV4IDAzMTE2NzcuLjg2ZTkwNDAgMTAwNjQ0Ci0tLSBhL2NtZHMvc3RhZ2VmcmlnaHQvc3RhZ2VmcmlnaHQuY3BwCisrKyBiL2NtZHMvc3RhZ2VmcmlnaHQvc3RhZ2VmcmlnaHQuY3BwCkBAIC0zMiw3ICszMiw2IEBACiAjaW5jbHVkZSA8YmluZGVyL0lTZXJ2aWNlTWFuYWdlci5oPgogI2luY2x1ZGUgPGJpbmRlci9Qcm9jZXNzU3RhdGUuaD4KICNpbmNsdWRlIDxtZWRpYS9EYXRhU291cmNlLmg+Ci0jaW5jbHVkZSA8bWVkaWEvTWVkaWFFeHRyYWN0b3IuaD4KICNpbmNsdWRlIDxtZWRpYS9NZWRpYVNvdXJjZS5oPgogI2luY2x1ZGUgPG1lZGlhL0lDcnlwdG8uaD4KICNpbmNsdWRlIDxtZWRpYS9JTWVkaWFIVFRQU2VydmljZS5oPgpAQCAtNTAsNiArNDksNyBAQAogI2luY2x1ZGUgPG1lZGlhL3N0YWdlZnJpZ2h0L01lZGlhQ29kZWNMaXN0Lmg+CiAjaW5jbHVkZSA8bWVkaWEvc3RhZ2VmcmlnaHQvTWVkaWFEZWZzLmg+CiAjaW5jbHVkZSA8bWVkaWEvc3RhZ2VmcmlnaHQvTWVkaWFFcnJvcnMuaD4KKyNpbmNsdWRlIDxtZWRpYS9zdGFnZWZyaWdodC9NZWRpYUV4dHJhY3Rvci5oPgogI2luY2x1ZGUgPG1lZGlhL3N0YWdlZnJpZ2h0L01lZGlhRXh0cmFjdG9yRmFjdG9yeS5oPgogI2luY2x1ZGUgPG1lZGlhL3N0YWdlZnJpZ2h0L01ldGFEYXRhLmg+CiAjaW5jbHVkZSA8bWVkaWEvc3RhZ2VmcmlnaHQvU2ltcGxlRGVjb2RpbmdTb3VyY2UuaD4KQEAgLTc4LDYgKzc4LDcgQEAKIHN0YXRpYyBib29sIGdQbGF5YmFja0F1ZGlvOwogc3RhdGljIGJvb2wgZ1dyaXRlTVA0Owogc3RhdGljIGJvb2wgZ0Rpc3BsYXlIaXN0b2dyYW07CitzdGF0aWMgYm9vbCBnVmVyYm9zZSA9IGZhbHNlOwogc3RhdGljIGJvb2wgc2hvd1Byb2dyZXNzID0gdHJ1ZTsKIHN0YXRpYyBTdHJpbmc4IGdXcml0ZU1QNEZpbGVuYW1lOwogc3RhdGljIFN0cmluZzggZ0NvbXBvbmVudE5hbWVPdmVycmlkZTsKQEAgLTE1OSw2ICsxNjAsMTEgQEAKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAKKyAgICAgICAgaWYgKGdWZXJib3NlKSB7CisgICAgICAgICAgICBNZXRhRGF0YUJhc2UgJm1ldGEgPSBtYnVmLT5tZXRhX2RhdGEoKTsKKyAgICAgICAgICAgIGZwcmludGYoc3Rkb3V0LCAic2FtcGxlIGZvcm1hdDogJXNcbiIsIG1ldGEudG9TdHJpbmcoKS5jX3N0cigpKTsKKyAgICAgICAgfQorCiAgICAgICAgIENIRUNLX0VRKAogICAgICAgICAgICAgICAgIGZ3cml0ZSgoY29uc3QgdWludDhfdCAqKW1idWYtPmRhdGEoKSArIG1idWYtPnJhbmdlX29mZnNldCgpLAogICAgICAgICAgICAgICAgICAgICAgICAxLApAQCAtMzQ4LDcgKzM1NCwxMCBAQAogICAgICAgICAgICAgICAgICAgICBkZWNvZGVUaW1lc1VzLnB1c2goZGVsYXlEZWNvZGVVcyk7CiAgICAgICAgICAgICAgICAgfQogCi0gICAgICAgICAgICAgICAgaWYgKHNob3dQcm9ncmVzcyAmJiAobisrICUgMTYpID09IDApIHsKKyAgICAgICAgICAgICAgICBpZiAoZ1ZlcmJvc2UpIHsKKyAgICAgICAgICAgICAgICAgICAgTWV0YURhdGFCYXNlICZtZXRhID0gYnVmZmVyLT5tZXRhX2RhdGEoKTsKKyAgICAgICAgICAgICAgICAgICAgZnByaW50ZihzdGRvdXQsICIlbGQgc2FtcGxlIGZvcm1hdDogJXNcbiIsIG51bUZyYW1lcywgbWV0YS50b1N0cmluZygpLmNfc3RyKCkpOworICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoc2hvd1Byb2dyZXNzICYmIChuKysgJSAxNikgPT0gMCkgewogICAgICAgICAgICAgICAgICAgICBwcmludGYoIi4iKTsKICAgICAgICAgICAgICAgICAgICAgZmZsdXNoKHN0ZG91dCk7CiAgICAgICAgICAgICAgICAgfQpAQCAtNTc5LDEyICs1ODgsMTIgQEAKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0KIAorICAgICAgICAgICAgQ0hFQ0soYnVmZmVyICE9IE5VTEwpOworCiAgICAgICAgICAgICBpZiAoYnVmZmVyLT5yYW5nZV9sZW5ndGgoKSA+IDApIHsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgQ0hFQ0soYnVmZmVyICE9IE5VTEwpOwotCiAgICAgICAgICAgICBidWZmZXItPnJlbGVhc2UoKTsKICAgICAgICAgICAgIGJ1ZmZlciA9IE5VTEw7CiAgICAgICAgIH0KQEAgLTYzMCw2ICs2MzksNyBAQAogICAgIGZwcmludGYoc3RkZXJyLCAiICAgICAgIC1UIGFsbG9jYXRlIGJ1ZmZlcnMgZnJvbSBhIHN1cmZhY2UgdGV4dHVyZVxuIik7CiAgICAgZnByaW50ZihzdGRlcnIsICIgICAgICAgLWQodW1wKSBvdXRwdXRfZmlsZW5hbWUgKHJhdyBzdHJlYW0gZGF0YSB0byBhIGZpbGUpXG4iKTsKICAgICBmcHJpbnRmKHN0ZGVyciwgIiAgICAgICAtRCh1bXApIG91dHB1dF9maWxlbmFtZSAoZGVjb2RlZCBQQ00gZGF0YSB0byBhIGZpbGUpXG4iKTsKKyAgICBmcHJpbnRmKHN0ZGVyciwgIiAgICAgICAtdiBiZSBtb3JlIHZlcmJvc2VcbiIpOwogfQogCiBzdGF0aWMgdm9pZCBkdW1wQ29kZWNQcm9maWxlcyhib29sIHF1ZXJ5RGVjb2RlcnMpIHsKQEAgLTY0MCw3ICs2NTAsOCBAQAogICAgICAgICBNRURJQV9NSU1FVFlQRV9BVURJT19NUEVHLCBNRURJQV9NSU1FVFlQRV9BVURJT19HNzExX01MQVcsCiAgICAgICAgIE1FRElBX01JTUVUWVBFX0FVRElPX0c3MTFfQUxBVywgTUVESUFfTUlNRVRZUEVfQVVESU9fVk9SQklTLAogICAgICAgICBNRURJQV9NSU1FVFlQRV9WSURFT19WUDgsIE1FRElBX01JTUVUWVBFX1ZJREVPX1ZQOSwKLSAgICAgICAgTUVESUFfTUlNRVRZUEVfVklERU9fRE9MQllfVklTSU9OLCBNRURJQV9NSU1FVFlQRV9WSURFT19IRVZDCisgICAgICAgIE1FRElBX01JTUVUWVBFX1ZJREVPX0RPTEJZX1ZJU0lPTiwgTUVESUFfTUlNRVRZUEVfVklERU9fSEVWQywKKyAgICAgICAgTUVESUFfTUlNRVRZUEVfQVVESU9fRUFDMywgTUVESUFfTUlNRVRZUEVfQVVESU9fQUM0CiAgICAgfTsKIAogICAgIGNvbnN0IGNoYXIgKmNvZGVjVHlwZSA9IHF1ZXJ5RGVjb2RlcnM/ICJkZWNvZGVyIiA6ICJlbmNvZGVyIjsKQEAgLTcwNSwxMCArNzE2LDEwIEBACiAgICAgZ1dyaXRlTVA0ID0gZmFsc2U7CiAgICAgZ0Rpc3BsYXlIaXN0b2dyYW0gPSBmYWxzZTsKIAotICAgIHNwPEFMb29wZXI+IGxvb3BlcjsKKyAgICBzcDxhbmRyb2lkOjpBTG9vcGVyPiBsb29wZXI7CiAKICAgICBpbnQgcmVzOwotICAgIHdoaWxlICgocmVzID0gZ2V0b3B0KGFyZ2MsIGFyZ3YsICJoYXFuOmxtOmI6cHRzcm93OmtOOnhTVGQ6RDoiKSkgPj0gMCkgeworICAgIHdoaWxlICgocmVzID0gZ2V0b3B0KGFyZ2MsIGFyZ3YsICJ2aGFxbjpsbTpiOnB0c3JvdzprTjp4U1RkOkQ6IikpID49IDApIHsKICAgICAgICAgc3dpdGNoIChyZXMpIHsKICAgICAgICAgICAgIGNhc2UgJ2EnOgogICAgICAgICAgICAgewpAQCAtODMyLDYgKzg0MywxMiBAQAogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQogCisgICAgICAgICAgICBjYXNlICd2JzoKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBnVmVyYm9zZSA9IHRydWU7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisKICAgICAgICAgICAgIGNhc2UgJz8nOgogICAgICAgICAgICAgY2FzZSAnaCc6CiAgICAgICAgICAgICBkZWZhdWx0OgpkaWZmIC0tZ2l0IGEvY21kcy9zdGFnZWZyaWdodC9zdHJlYW0uY3BwIGIvY21kcy9zdGFnZWZyaWdodC9zdHJlYW0uY3BwCmluZGV4IGIwMTk5ZDguLmIyZjM5ZGMgMTAwNjQ0Ci0tLSBhL2NtZHMvc3RhZ2VmcmlnaHQvc3RyZWFtLmNwcAorKysgYi9jbWRzL3N0YWdlZnJpZ2h0L3N0cmVhbS5jcHAKQEAgLTI0LDcgKzI0LDYgQEAKICNpbmNsdWRlIDxtZWRpYS9EYXRhU291cmNlLmg+CiAjaW5jbHVkZSA8bWVkaWEvSU1lZGlhSFRUUFNlcnZpY2UuaD4KICNpbmNsdWRlIDxtZWRpYS9JU3RyZWFtU291cmNlLmg+Ci0jaW5jbHVkZSA8bWVkaWEvTWVkaWFFeHRyYWN0b3IuaD4KICNpbmNsdWRlIDxtZWRpYS9tZWRpYXBsYXllci5oPgogI2luY2x1ZGUgPG1lZGlhL01lZGlhU291cmNlLmg+CiAjaW5jbHVkZSA8bWVkaWEvc3RhZ2VmcmlnaHQvZm91bmRhdGlvbi9BRGVidWcuaD4KQEAgLTMyLDYgKzMxLDcgQEAKICNpbmNsdWRlIDxtZWRpYS9zdGFnZWZyaWdodC9EYXRhU291cmNlRmFjdG9yeS5oPgogI2luY2x1ZGUgPG1lZGlhL3N0YWdlZnJpZ2h0L0ludGVyZmFjZVV0aWxzLmg+CiAjaW5jbHVkZSA8bWVkaWEvc3RhZ2VmcmlnaHQvTVBFRzJUU1dyaXRlci5oPgorI2luY2x1ZGUgPG1lZGlhL3N0YWdlZnJpZ2h0L01lZGlhRXh0cmFjdG9yLmg+CiAjaW5jbHVkZSA8bWVkaWEvc3RhZ2VmcmlnaHQvTWVkaWFFeHRyYWN0b3JGYWN0b3J5Lmg+CiAjaW5jbHVkZSA8bWVkaWEvc3RhZ2VmcmlnaHQvTWV0YURhdGEuaD4KIApkaWZmIC0tZ2l0IGEvZHJtL2NvbW1vbi9Ecm1FbmdpbmVCYXNlLmNwcCBiL2RybS9jb21tb24vRHJtRW5naW5lQmFzZS5jcHAKaW5kZXggZjczNDkwNS4uYWVjNTk1OSAxMDA2NDQKLS0tIGEvZHJtL2NvbW1vbi9Ecm1FbmdpbmVCYXNlLmNwcAorKysgYi9kcm0vY29tbW9uL0RybUVuZ2luZUJhc2UuY3BwCkBAIC03OSwxMiArNzksMTIgQEAKIH0KIAogc3RhdHVzX3QgRHJtRW5naW5lQmFzZTo6Y29uc3VtZVJpZ2h0cygKLSAgICBpbnQgdW5pcXVlSWQsIERlY3J5cHRIYW5kbGUqIGRlY3J5cHRIYW5kbGUsIGludCBhY3Rpb24sIGJvb2wgcmVzZXJ2ZSkgeworICAgIGludCB1bmlxdWVJZCwgc3A8RGVjcnlwdEhhbmRsZT4mIGRlY3J5cHRIYW5kbGUsIGludCBhY3Rpb24sIGJvb2wgcmVzZXJ2ZSkgewogICAgIHJldHVybiBvbkNvbnN1bWVSaWdodHModW5pcXVlSWQsIGRlY3J5cHRIYW5kbGUsIGFjdGlvbiwgcmVzZXJ2ZSk7CiB9CiAKIHN0YXR1c190IERybUVuZ2luZUJhc2U6OnNldFBsYXliYWNrU3RhdHVzKAotICAgIGludCB1bmlxdWVJZCwgRGVjcnlwdEhhbmRsZSogZGVjcnlwdEhhbmRsZSwgaW50IHBsYXliYWNrU3RhdHVzLCBpbnQ2NF90IHBvc2l0aW9uKSB7CisgICAgaW50IHVuaXF1ZUlkLCBzcDxEZWNyeXB0SGFuZGxlPiYgZGVjcnlwdEhhbmRsZSwgaW50IHBsYXliYWNrU3RhdHVzLCBpbnQ2NF90IHBvc2l0aW9uKSB7CiAgICAgcmV0dXJuIG9uU2V0UGxheWJhY2tTdGF0dXModW5pcXVlSWQsIGRlY3J5cHRIYW5kbGUsIHBsYXliYWNrU3RhdHVzLCBwb3NpdGlvbik7CiB9CiAKQEAgLTEyMCw3ICsxMjAsNyBAQAogfQogCiBzdGF0dXNfdCBEcm1FbmdpbmVCYXNlOjpvcGVuRGVjcnlwdFNlc3Npb24oCi0gICAgaW50IHVuaXF1ZUlkLCBEZWNyeXB0SGFuZGxlKiBkZWNyeXB0SGFuZGxlLAorICAgIGludCB1bmlxdWVJZCwgc3A8RGVjcnlwdEhhbmRsZT4mIGRlY3J5cHRIYW5kbGUsCiAgICAgaW50IGZkLCBvZmY2NF90IG9mZnNldCwgb2ZmNjRfdCBsZW5ndGgsIGNvbnN0IGNoYXIqIG1pbWUpIHsKIAogICAgIGlmICghbWltZSB8fCBtaW1lWzBdID09ICdcMCcpIHsKQEAgLTEzMSw3ICsxMzEsNyBAQAogfQogCiBzdGF0dXNfdCBEcm1FbmdpbmVCYXNlOjpvcGVuRGVjcnlwdFNlc3Npb24oCi0gICAgaW50IHVuaXF1ZUlkLCBEZWNyeXB0SGFuZGxlKiBkZWNyeXB0SGFuZGxlLAorICAgIGludCB1bmlxdWVJZCwgc3A8RGVjcnlwdEhhbmRsZT4mIGRlY3J5cHRIYW5kbGUsCiAgICAgY29uc3QgY2hhciogdXJpLCBjb25zdCBjaGFyKiBtaW1lKSB7CiAgICAgaWYgKCFtaW1lIHx8IG1pbWVbMF0gPT0gJ1wwJykgewogICAgICAgICByZXR1cm4gb25PcGVuRGVjcnlwdFNlc3Npb24odW5pcXVlSWQsIGRlY3J5cHRIYW5kbGUsIHVyaSk7CkBAIC0xMzksMzMgKzEzOSwzMyBAQAogICAgIHJldHVybiBvbk9wZW5EZWNyeXB0U2Vzc2lvbih1bmlxdWVJZCwgZGVjcnlwdEhhbmRsZSwgdXJpLCBtaW1lKTsKIH0KIAotc3RhdHVzX3QgRHJtRW5naW5lQmFzZTo6b3BlbkRlY3J5cHRTZXNzaW9uKGludCB1bmlxdWVJZCwgRGVjcnlwdEhhbmRsZSogZGVjcnlwdEhhbmRsZSwKK3N0YXR1c190IERybUVuZ2luZUJhc2U6Om9wZW5EZWNyeXB0U2Vzc2lvbihpbnQgdW5pcXVlSWQsIHNwPERlY3J5cHRIYW5kbGU+JiBkZWNyeXB0SGFuZGxlLAogICAgICAgICBjb25zdCBEcm1CdWZmZXImIGJ1ZiwgY29uc3QgU3RyaW5nOCYgbWltZVR5cGUpIHsKICAgICByZXR1cm4gb25PcGVuRGVjcnlwdFNlc3Npb24odW5pcXVlSWQsIGRlY3J5cHRIYW5kbGUsIGJ1ZiwgbWltZVR5cGUpOwogfQogCi1zdGF0dXNfdCBEcm1FbmdpbmVCYXNlOjpjbG9zZURlY3J5cHRTZXNzaW9uKGludCB1bmlxdWVJZCwgRGVjcnlwdEhhbmRsZSogZGVjcnlwdEhhbmRsZSkgeworc3RhdHVzX3QgRHJtRW5naW5lQmFzZTo6Y2xvc2VEZWNyeXB0U2Vzc2lvbihpbnQgdW5pcXVlSWQsIHNwPERlY3J5cHRIYW5kbGU+JiBkZWNyeXB0SGFuZGxlKSB7CiAgICAgcmV0dXJuIG9uQ2xvc2VEZWNyeXB0U2Vzc2lvbih1bmlxdWVJZCwgZGVjcnlwdEhhbmRsZSk7CiB9CiAKIHN0YXR1c190IERybUVuZ2luZUJhc2U6OmluaXRpYWxpemVEZWNyeXB0VW5pdCgKLSAgICBpbnQgdW5pcXVlSWQsIERlY3J5cHRIYW5kbGUqIGRlY3J5cHRIYW5kbGUsIGludCBkZWNyeXB0VW5pdElkLCBjb25zdCBEcm1CdWZmZXIqIGhlYWRlckluZm8pIHsKKyAgICBpbnQgdW5pcXVlSWQsIHNwPERlY3J5cHRIYW5kbGU+JiBkZWNyeXB0SGFuZGxlLCBpbnQgZGVjcnlwdFVuaXRJZCwgY29uc3QgRHJtQnVmZmVyKiBoZWFkZXJJbmZvKSB7CiAgICAgcmV0dXJuIG9uSW5pdGlhbGl6ZURlY3J5cHRVbml0KHVuaXF1ZUlkLCBkZWNyeXB0SGFuZGxlLCBkZWNyeXB0VW5pdElkLCBoZWFkZXJJbmZvKTsKIH0KIAogc3RhdHVzX3QgRHJtRW5naW5lQmFzZTo6ZGVjcnlwdCgKLSAgICBpbnQgdW5pcXVlSWQsIERlY3J5cHRIYW5kbGUqIGRlY3J5cHRIYW5kbGUsIGludCBkZWNyeXB0VW5pdElkLAorICAgIGludCB1bmlxdWVJZCwgc3A8RGVjcnlwdEhhbmRsZT4mIGRlY3J5cHRIYW5kbGUsIGludCBkZWNyeXB0VW5pdElkLAogICAgIGNvbnN0IERybUJ1ZmZlciogZW5jQnVmZmVyLCBEcm1CdWZmZXIqKiBkZWNCdWZmZXIsIERybUJ1ZmZlciogSVYpIHsKICAgICByZXR1cm4gb25EZWNyeXB0KHVuaXF1ZUlkLCBkZWNyeXB0SGFuZGxlLCBkZWNyeXB0VW5pdElkLCBlbmNCdWZmZXIsIGRlY0J1ZmZlciwgSVYpOwogfQogCiBzdGF0dXNfdCBEcm1FbmdpbmVCYXNlOjpmaW5hbGl6ZURlY3J5cHRVbml0KAotICAgIGludCB1bmlxdWVJZCwgRGVjcnlwdEhhbmRsZSogZGVjcnlwdEhhbmRsZSwgaW50IGRlY3J5cHRVbml0SWQpIHsKKyAgICBpbnQgdW5pcXVlSWQsIHNwPERlY3J5cHRIYW5kbGU+JiBkZWNyeXB0SGFuZGxlLCBpbnQgZGVjcnlwdFVuaXRJZCkgewogICAgIHJldHVybiBvbkZpbmFsaXplRGVjcnlwdFVuaXQodW5pcXVlSWQsIGRlY3J5cHRIYW5kbGUsIGRlY3J5cHRVbml0SWQpOwogfQogCiBzc2l6ZV90IERybUVuZ2luZUJhc2U6OnByZWFkKAotICAgIGludCB1bmlxdWVJZCwgRGVjcnlwdEhhbmRsZSogZGVjcnlwdEhhbmRsZSwgdm9pZCogYnVmZmVyLCBzc2l6ZV90IG51bUJ5dGVzLCBvZmY2NF90IG9mZnNldCkgeworICAgIGludCB1bmlxdWVJZCwgc3A8RGVjcnlwdEhhbmRsZT4mIGRlY3J5cHRIYW5kbGUsIHZvaWQqIGJ1ZmZlciwgc3NpemVfdCBudW1CeXRlcywgb2ZmNjRfdCBvZmZzZXQpIHsKICAgICByZXR1cm4gb25QcmVhZCh1bmlxdWVJZCwgZGVjcnlwdEhhbmRsZSwgYnVmZmVyLCBudW1CeXRlcywgb2Zmc2V0KTsKIH0KIApkaWZmIC0tZ2l0IGEvZHJtL2NvbW1vbi9JRHJtTWFuYWdlclNlcnZpY2UuY3BwIGIvZHJtL2NvbW1vbi9JRHJtTWFuYWdlclNlcnZpY2UuY3BwCmluZGV4IDQ0Zjk4ZGQuLmE2ZDMzYjAgMTAwNjQ0Ci0tLSBhL2RybS9jb21tb24vSURybU1hbmFnZXJTZXJ2aWNlLmNwcAorKysgYi9kcm0vY29tbW9uL0lEcm1NYW5hZ2VyU2VydmljZS5jcHAKQEAgLTM5LDcgKzM5LDcgQEAKIHVzaW5nIG5hbWVzcGFjZSBhbmRyb2lkOwogCiBzdGF0aWMgdm9pZCB3cml0ZURlY3J5cHRIYW5kbGVUb1BhcmNlbERhdGEoCi0gICAgICAgIGNvbnN0IERlY3J5cHRIYW5kbGUqIGhhbmRsZSwgUGFyY2VsKiBkYXRhKSB7CisgICAgICAgIGNvbnN0IHNwPERlY3J5cHRIYW5kbGU+JiBoYW5kbGUsIFBhcmNlbCogZGF0YSkgewogICAgIGRhdGEtPndyaXRlSW50MzIoaGFuZGxlLT5kZWNyeXB0SWQpOwogICAgIGRhdGEtPndyaXRlU3RyaW5nOChoYW5kbGUtPm1pbWVUeXBlKTsKICAgICBkYXRhLT53cml0ZUludDMyKGhhbmRsZS0+ZGVjcnlwdEFwaVR5cGUpOwpAQCAtNjcsNyArNjcsNyBAQAogfQogCiBzdGF0aWMgdm9pZCByZWFkRGVjcnlwdEhhbmRsZUZyb21QYXJjZWxEYXRhKAotICAgICAgICBEZWNyeXB0SGFuZGxlKiBoYW5kbGUsIGNvbnN0IFBhcmNlbCYgZGF0YSkgeworICAgICAgICBzcDxEZWNyeXB0SGFuZGxlPiYgaGFuZGxlLCBjb25zdCBQYXJjZWwmIGRhdGEpIHsKICAgICBpZiAoMCA9PSBkYXRhLmRhdGFBdmFpbCgpKSB7CiAgICAgICAgIHJldHVybjsKICAgICB9CkBAIC05OSw3ICs5OSw3IEBACiAgICAgfQogfQogCi1zdGF0aWMgdm9pZCBjbGVhckRlY3J5cHRIYW5kbGUoRGVjcnlwdEhhbmRsZSogaGFuZGxlKSB7CitzdGF0aWMgdm9pZCBjbGVhckRlY3J5cHRIYW5kbGUoc3A8RGVjcnlwdEhhbmRsZT4gJmhhbmRsZSkgewogICAgIGlmIChoYW5kbGUgPT0gTlVMTCkgewogICAgICAgICByZXR1cm47CiAgICAgfQpAQCAtNDE0LDcgKzQxNCw3IEBACiB9CiAKIHN0YXR1c190IEJwRHJtTWFuYWdlclNlcnZpY2U6OmNvbnN1bWVSaWdodHMoCi0gICAgICAgICAgICBpbnQgdW5pcXVlSWQsIERlY3J5cHRIYW5kbGUqIGRlY3J5cHRIYW5kbGUsIGludCBhY3Rpb24sIGJvb2wgcmVzZXJ2ZSkgeworICAgICAgICAgICAgaW50IHVuaXF1ZUlkLCBzcDxEZWNyeXB0SGFuZGxlPiYgZGVjcnlwdEhhbmRsZSwgaW50IGFjdGlvbiwgYm9vbCByZXNlcnZlKSB7CiAgICAgQUxPR1YoImNvbnN1bWVSaWdodHMiKTsKICAgICBQYXJjZWwgZGF0YSwgcmVwbHk7CiAKQEAgLTQzMSw3ICs0MzEsNyBAQAogfQogCiBzdGF0dXNfdCBCcERybU1hbmFnZXJTZXJ2aWNlOjpzZXRQbGF5YmFja1N0YXR1cygKLSAgICAgICAgICAgIGludCB1bmlxdWVJZCwgRGVjcnlwdEhhbmRsZSogZGVjcnlwdEhhbmRsZSwgaW50IHBsYXliYWNrU3RhdHVzLCBpbnQ2NF90IHBvc2l0aW9uKSB7CisgICAgICAgICAgICBpbnQgdW5pcXVlSWQsIHNwPERlY3J5cHRIYW5kbGU+JiBkZWNyeXB0SGFuZGxlLCBpbnQgcGxheWJhY2tTdGF0dXMsIGludDY0X3QgcG9zaXRpb24pIHsKICAgICBBTE9HVigic2V0UGxheWJhY2tTdGF0dXMiKTsKICAgICBQYXJjZWwgZGF0YSwgcmVwbHk7CiAKQEAgLTYwMyw3ICs2MDMsNyBAQAogICAgIHJldHVybiByZXBseS5yZWFkSW50MzIoKTsKIH0KIAotRGVjcnlwdEhhbmRsZSogQnBEcm1NYW5hZ2VyU2VydmljZTo6b3BlbkRlY3J5cHRTZXNzaW9uKAorc3A8RGVjcnlwdEhhbmRsZT4gQnBEcm1NYW5hZ2VyU2VydmljZTo6b3BlbkRlY3J5cHRTZXNzaW9uKAogICAgICAgICAgICAgaW50IHVuaXF1ZUlkLCBpbnQgZmQsIG9mZjY0X3Qgb2Zmc2V0LCBvZmY2NF90IGxlbmd0aCwgY29uc3QgY2hhciogbWltZSkgewogICAgIEFMT0dWKCJFbnRlcmluZyBCcERybU1hbmFnZXJTZXJ2aWNlOjpvcGVuRGVjcnlwdFNlc3Npb24iKTsKICAgICBQYXJjZWwgZGF0YSwgcmVwbHk7CkBAIC02MjEsNyArNjIxLDcgQEAKIAogICAgIHJlbW90ZSgpLT50cmFuc2FjdChPUEVOX0RFQ1JZUFRfU0VTU0lPTiwgZGF0YSwgJnJlcGx5KTsKIAotICAgIERlY3J5cHRIYW5kbGUqIGhhbmRsZSA9IE5VTEw7CisgICAgc3A8RGVjcnlwdEhhbmRsZT4gaGFuZGxlOwogICAgIGlmICgwICE9IHJlcGx5LmRhdGFBdmFpbCgpKSB7CiAgICAgICAgIGhhbmRsZSA9IG5ldyBEZWNyeXB0SGFuZGxlKCk7CiAgICAgICAgIHJlYWREZWNyeXB0SGFuZGxlRnJvbVBhcmNlbERhdGEoaGFuZGxlLCByZXBseSk7CkBAIC02MjksNyArNjI5LDcgQEAKICAgICByZXR1cm4gaGFuZGxlOwogfQogCi1EZWNyeXB0SGFuZGxlKiBCcERybU1hbmFnZXJTZXJ2aWNlOjpvcGVuRGVjcnlwdFNlc3Npb24oCitzcDxEZWNyeXB0SGFuZGxlPiBCcERybU1hbmFnZXJTZXJ2aWNlOjpvcGVuRGVjcnlwdFNlc3Npb24oCiAgICAgICAgIGludCB1bmlxdWVJZCwgY29uc3QgY2hhciogdXJpLCBjb25zdCBjaGFyKiBtaW1lKSB7CiAKICAgICBBTE9HVigiRW50ZXJpbmcgQnBEcm1NYW5hZ2VyU2VydmljZTo6b3BlbkRlY3J5cHRTZXNzaW9uOiBtaW1lPSVzIiwgbWltZT8gbWltZTogIk5VTEwiKTsKQEAgLTY0Niw3ICs2NDYsNyBAQAogCiAgICAgcmVtb3RlKCktPnRyYW5zYWN0KE9QRU5fREVDUllQVF9TRVNTSU9OX0ZST01fVVJJLCBkYXRhLCAmcmVwbHkpOwogCi0gICAgRGVjcnlwdEhhbmRsZSogaGFuZGxlID0gTlVMTDsKKyAgICBzcDxEZWNyeXB0SGFuZGxlPiBoYW5kbGU7CiAgICAgaWYgKDAgIT0gcmVwbHkuZGF0YUF2YWlsKCkpIHsKICAgICAgICAgaGFuZGxlID0gbmV3IERlY3J5cHRIYW5kbGUoKTsKICAgICAgICAgcmVhZERlY3J5cHRIYW5kbGVGcm9tUGFyY2VsRGF0YShoYW5kbGUsIHJlcGx5KTsKQEAgLTY1Niw3ICs2NTYsNyBAQAogICAgIHJldHVybiBoYW5kbGU7CiB9CiAKLURlY3J5cHRIYW5kbGUqIEJwRHJtTWFuYWdlclNlcnZpY2U6Om9wZW5EZWNyeXB0U2Vzc2lvbigKK3NwPERlY3J5cHRIYW5kbGU+IEJwRHJtTWFuYWdlclNlcnZpY2U6Om9wZW5EZWNyeXB0U2Vzc2lvbigKICAgICAgICAgICAgIGludCB1bmlxdWVJZCwgY29uc3QgRHJtQnVmZmVyJiBidWYsIGNvbnN0IFN0cmluZzgmIG1pbWVUeXBlKSB7CiAgICAgQUxPR1YoIkVudGVyaW5nIEJwRHJtTWFuYWdlclNlcnZpY2U6Om9wZW5EZWNyeXB0U2Vzc2lvbiIpOwogICAgIFBhcmNlbCBkYXRhLCByZXBseTsKQEAgLTY3Myw3ICs2NzMsNyBAQAogCiAgICAgcmVtb3RlKCktPnRyYW5zYWN0KE9QRU5fREVDUllQVF9TRVNTSU9OX0ZPUl9TVFJFQU1JTkcsIGRhdGEsICZyZXBseSk7CiAKLSAgICBEZWNyeXB0SGFuZGxlKiBoYW5kbGUgPSBOVUxMOworICAgIHNwPERlY3J5cHRIYW5kbGU+IGhhbmRsZTsKICAgICBpZiAoMCAhPSByZXBseS5kYXRhQXZhaWwoKSkgewogICAgICAgICBoYW5kbGUgPSBuZXcgRGVjcnlwdEhhbmRsZSgpOwogICAgICAgICByZWFkRGVjcnlwdEhhbmRsZUZyb21QYXJjZWxEYXRhKGhhbmRsZSwgcmVwbHkpOwpAQCAtNjgzLDcgKzY4Myw3IEBACiAgICAgcmV0dXJuIGhhbmRsZTsKIH0KIAotc3RhdHVzX3QgQnBEcm1NYW5hZ2VyU2VydmljZTo6Y2xvc2VEZWNyeXB0U2Vzc2lvbihpbnQgdW5pcXVlSWQsIERlY3J5cHRIYW5kbGUqIGRlY3J5cHRIYW5kbGUpIHsKK3N0YXR1c190IEJwRHJtTWFuYWdlclNlcnZpY2U6OmNsb3NlRGVjcnlwdFNlc3Npb24oaW50IHVuaXF1ZUlkLCBzcDxEZWNyeXB0SGFuZGxlPiYgZGVjcnlwdEhhbmRsZSkgewogICAgIEFMT0dWKCJjbG9zZURlY3J5cHRTZXNzaW9uIik7CiAgICAgUGFyY2VsIGRhdGEsIHJlcGx5OwogCkBAIC02OTgsNyArNjk4LDcgQEAKIH0KIAogc3RhdHVzX3QgQnBEcm1NYW5hZ2VyU2VydmljZTo6aW5pdGlhbGl6ZURlY3J5cHRVbml0KAotICAgICAgICAgICAgaW50IHVuaXF1ZUlkLCBEZWNyeXB0SGFuZGxlKiBkZWNyeXB0SGFuZGxlLAorICAgICAgICAgICAgaW50IHVuaXF1ZUlkLCBzcDxEZWNyeXB0SGFuZGxlPiYgZGVjcnlwdEhhbmRsZSwKICAgICAgICAgICAgIGludCBkZWNyeXB0VW5pdElkLCBjb25zdCBEcm1CdWZmZXIqIGhlYWRlckluZm8pIHsKICAgICBBTE9HVigiaW5pdGlhbGl6ZURlY3J5cHRVbml0Iik7CiAgICAgUGFyY2VsIGRhdGEsIHJlcGx5OwpAQCAtNzE4LDcgKzcxOCw3IEBACiB9CiAKIHN0YXR1c190IEJwRHJtTWFuYWdlclNlcnZpY2U6OmRlY3J5cHQoCi0gICAgICAgICAgICBpbnQgdW5pcXVlSWQsIERlY3J5cHRIYW5kbGUqIGRlY3J5cHRIYW5kbGUsIGludCBkZWNyeXB0VW5pdElkLAorICAgICAgICAgICAgaW50IHVuaXF1ZUlkLCBzcDxEZWNyeXB0SGFuZGxlPiYgZGVjcnlwdEhhbmRsZSwgaW50IGRlY3J5cHRVbml0SWQsCiAgICAgICAgICAgICBjb25zdCBEcm1CdWZmZXIqIGVuY0J1ZmZlciwgRHJtQnVmZmVyKiogZGVjQnVmZmVyLCBEcm1CdWZmZXIqIElWKSB7CiAgICAgQUxPR1YoImRlY3J5cHQiKTsKICAgICBQYXJjZWwgZGF0YSwgcmVwbHk7CkBAIC03NTQsNyArNzU0LDcgQEAKIH0KIAogc3RhdHVzX3QgQnBEcm1NYW5hZ2VyU2VydmljZTo6ZmluYWxpemVEZWNyeXB0VW5pdCgKLSAgICAgICAgICAgIGludCB1bmlxdWVJZCwgRGVjcnlwdEhhbmRsZSogZGVjcnlwdEhhbmRsZSwgaW50IGRlY3J5cHRVbml0SWQpIHsKKyAgICAgICAgICAgIGludCB1bmlxdWVJZCwgc3A8RGVjcnlwdEhhbmRsZT4mIGRlY3J5cHRIYW5kbGUsIGludCBkZWNyeXB0VW5pdElkKSB7CiAgICAgQUxPR1YoImZpbmFsaXplRGVjcnlwdFVuaXQiKTsKICAgICBQYXJjZWwgZGF0YSwgcmVwbHk7CiAKQEAgLTc3MCw3ICs3NzAsNyBAQAogfQogCiBzc2l6ZV90IEJwRHJtTWFuYWdlclNlcnZpY2U6OnByZWFkKAotICAgICAgICAgICAgaW50IHVuaXF1ZUlkLCBEZWNyeXB0SGFuZGxlKiBkZWNyeXB0SGFuZGxlLCB2b2lkKiBidWZmZXIsCisgICAgICAgICAgICBpbnQgdW5pcXVlSWQsIHNwPERlY3J5cHRIYW5kbGU+JiBkZWNyeXB0SGFuZGxlLCB2b2lkKiBidWZmZXIsCiAgICAgICAgICAgICBzc2l6ZV90IG51bUJ5dGVzLCBvZmY2NF90IG9mZnNldCkgewogICAgIEFMT0dWKCJyZWFkIik7CiAgICAgUGFyY2VsIGRhdGEsIHJlcGx5OwpAQCAtMTEyOCwxNiArMTEyOCwxNiBAQAogCiAgICAgICAgIGNvbnN0IGludCB1bmlxdWVJZCA9IGRhdGEucmVhZEludDMyKCk7CiAKLSAgICAgICAgRGVjcnlwdEhhbmRsZSBoYW5kbGU7Ci0gICAgICAgIHJlYWREZWNyeXB0SGFuZGxlRnJvbVBhcmNlbERhdGEoJmhhbmRsZSwgZGF0YSk7CisgICAgICAgIHNwPERlY3J5cHRIYW5kbGU+IGhhbmRsZSA9IG5ldyBEZWNyeXB0SGFuZGxlKCk7CisgICAgICAgIHJlYWREZWNyeXB0SGFuZGxlRnJvbVBhcmNlbERhdGEoaGFuZGxlLCBkYXRhKTsKIAogICAgICAgICBjb25zdCBpbnQgYWN0aW9uID0gZGF0YS5yZWFkSW50MzIoKTsKICAgICAgICAgY29uc3QgYm9vbCByZXNlcnZlID0gc3RhdGljX2Nhc3Q8Ym9vbD4oZGF0YS5yZWFkSW50MzIoKSk7CiAgICAgICAgIGNvbnN0IHN0YXR1c190IHN0YXR1cwotICAgICAgICAgICAgPSBjb25zdW1lUmlnaHRzKHVuaXF1ZUlkLCAmaGFuZGxlLCBhY3Rpb24sIHJlc2VydmUpOworICAgICAgICAgICAgPSBjb25zdW1lUmlnaHRzKHVuaXF1ZUlkLCBoYW5kbGUsIGFjdGlvbiwgcmVzZXJ2ZSk7CiAgICAgICAgIHJlcGx5LT53cml0ZUludDMyKHN0YXR1cyk7CiAKLSAgICAgICAgY2xlYXJEZWNyeXB0SGFuZGxlKCZoYW5kbGUpOworICAgICAgICBjbGVhckRlY3J5cHRIYW5kbGUoaGFuZGxlKTsKICAgICAgICAgcmV0dXJuIERSTV9OT19FUlJPUjsKICAgICB9CiAKQEAgLTExNDgsMTYgKzExNDgsMTYgQEAKIAogICAgICAgICBjb25zdCBpbnQgdW5pcXVlSWQgPSBkYXRhLnJlYWRJbnQzMigpOwogCi0gICAgICAgIERlY3J5cHRIYW5kbGUgaGFuZGxlOwotICAgICAgICByZWFkRGVjcnlwdEhhbmRsZUZyb21QYXJjZWxEYXRhKCZoYW5kbGUsIGRhdGEpOworICAgICAgICBzcDxEZWNyeXB0SGFuZGxlPiBoYW5kbGUgPSBuZXcgRGVjcnlwdEhhbmRsZSgpOworICAgICAgICByZWFkRGVjcnlwdEhhbmRsZUZyb21QYXJjZWxEYXRhKGhhbmRsZSwgZGF0YSk7CiAKICAgICAgICAgY29uc3QgaW50IHBsYXliYWNrU3RhdHVzID0gZGF0YS5yZWFkSW50MzIoKTsKICAgICAgICAgY29uc3QgaW50NjRfdCBwb3NpdGlvbiA9IGRhdGEucmVhZEludDY0KCk7CiAgICAgICAgIGNvbnN0IHN0YXR1c190IHN0YXR1cwotICAgICAgICAgICAgPSBzZXRQbGF5YmFja1N0YXR1cyh1bmlxdWVJZCwgJmhhbmRsZSwgcGxheWJhY2tTdGF0dXMsIHBvc2l0aW9uKTsKKyAgICAgICAgICAgID0gc2V0UGxheWJhY2tTdGF0dXModW5pcXVlSWQsIGhhbmRsZSwgcGxheWJhY2tTdGF0dXMsIHBvc2l0aW9uKTsKICAgICAgICAgcmVwbHktPndyaXRlSW50MzIoc3RhdHVzKTsKIAotICAgICAgICBjbGVhckRlY3J5cHRIYW5kbGUoJmhhbmRsZSk7CisgICAgICAgIGNsZWFyRGVjcnlwdEhhbmRsZShoYW5kbGUpOwogICAgICAgICByZXR1cm4gRFJNX05PX0VSUk9SOwogICAgIH0KIApAQCAtMTMyOSwxMyArMTMyOSwxMyBAQAogICAgICAgICBjb25zdCBvZmY2NF90IGxlbmd0aCA9IGRhdGEucmVhZEludDY0KCk7CiAgICAgICAgIGNvbnN0IFN0cmluZzggbWltZSA9IGRhdGEucmVhZFN0cmluZzgoKTsKIAotICAgICAgICBEZWNyeXB0SGFuZGxlKiBoYW5kbGUKKyAgICAgICAgc3A8RGVjcnlwdEhhbmRsZT4gaGFuZGxlCiAgICAgICAgICAgICA9IG9wZW5EZWNyeXB0U2Vzc2lvbih1bmlxdWVJZCwgZmQsIG9mZnNldCwgbGVuZ3RoLCBtaW1lLnN0cmluZygpKTsKIAotICAgICAgICBpZiAoTlVMTCAhPSBoYW5kbGUpIHsKLSAgICAgICAgICAgIHdyaXRlRGVjcnlwdEhhbmRsZVRvUGFyY2VsRGF0YShoYW5kbGUsIHJlcGx5KTsKKyAgICAgICAgaWYgKE5VTEwgIT0gaGFuZGxlLmdldCgpKSB7CisgICAgICAgICAgICB3cml0ZURlY3J5cHRIYW5kbGVUb1BhcmNlbERhdGEoaGFuZGxlLmdldCgpLCByZXBseSk7CiAgICAgICAgICAgICBjbGVhckRlY3J5cHRIYW5kbGUoaGFuZGxlKTsKLSAgICAgICAgICAgIGRlbGV0ZSBoYW5kbGU7IGhhbmRsZSA9IE5VTEw7CisgICAgICAgICAgICBoYW5kbGUuY2xlYXIoKTsKICAgICAgICAgfQogICAgICAgICByZXR1cm4gRFJNX05PX0VSUk9SOwogICAgIH0KQEAgLTEzNDksMTMgKzEzNDksMTMgQEAKICAgICAgICAgY29uc3QgU3RyaW5nOCB1cmkgPSBkYXRhLnJlYWRTdHJpbmc4KCk7CiAgICAgICAgIGNvbnN0IFN0cmluZzggbWltZSA9IGRhdGEucmVhZFN0cmluZzgoKTsKIAotICAgICAgICBEZWNyeXB0SGFuZGxlKiBoYW5kbGUgPSBvcGVuRGVjcnlwdFNlc3Npb24odW5pcXVlSWQsIHVyaS5zdHJpbmcoKSwgbWltZS5zdHJpbmcoKSk7CisgICAgICAgIHNwPERlY3J5cHRIYW5kbGU+IGhhbmRsZSA9IG9wZW5EZWNyeXB0U2Vzc2lvbih1bmlxdWVJZCwgdXJpLnN0cmluZygpLCBtaW1lLnN0cmluZygpKTsKIAotICAgICAgICBpZiAoTlVMTCAhPSBoYW5kbGUpIHsKLSAgICAgICAgICAgIHdyaXRlRGVjcnlwdEhhbmRsZVRvUGFyY2VsRGF0YShoYW5kbGUsIHJlcGx5KTsKKyAgICAgICAgaWYgKE5VTEwgIT0gaGFuZGxlLmdldCgpKSB7CisgICAgICAgICAgICB3cml0ZURlY3J5cHRIYW5kbGVUb1BhcmNlbERhdGEoaGFuZGxlLmdldCgpLCByZXBseSk7CiAKICAgICAgICAgICAgIGNsZWFyRGVjcnlwdEhhbmRsZShoYW5kbGUpOwotICAgICAgICAgICAgZGVsZXRlIGhhbmRsZTsgaGFuZGxlID0gTlVMTDsKKyAgICAgICAgICAgIGhhbmRsZS5jbGVhcigpOwogICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgQUxPR1YoIk5VTEwgZGVjcnlwdEhhbmRsZSBpcyByZXR1cm5lZCIpOwogICAgICAgICB9CkBAIC0xMzczLDEzICsxMzczLDEyIEBACiAgICAgICAgICAgICAgICAgYnVmZmVyU2l6ZSk7CiAgICAgICAgIGNvbnN0IFN0cmluZzggbWltZVR5cGUoZGF0YS5yZWFkU3RyaW5nOCgpKTsKIAotICAgICAgICBEZWNyeXB0SGFuZGxlKiBoYW5kbGUgPSBvcGVuRGVjcnlwdFNlc3Npb24odW5pcXVlSWQsIGJ1ZiwgbWltZVR5cGUpOworICAgICAgICBzcDxEZWNyeXB0SGFuZGxlPiBoYW5kbGUgPSBvcGVuRGVjcnlwdFNlc3Npb24odW5pcXVlSWQsIGJ1ZiwgbWltZVR5cGUpOwogCiAgICAgICAgIGlmIChoYW5kbGUgIT0gTlVMTCkgewogICAgICAgICAgICAgd3JpdGVEZWNyeXB0SGFuZGxlVG9QYXJjZWxEYXRhKGhhbmRsZSwgcmVwbHkpOwogICAgICAgICAgICAgY2xlYXJEZWNyeXB0SGFuZGxlKGhhbmRsZSk7Ci0gICAgICAgICAgICBkZWxldGUgaGFuZGxlOwotICAgICAgICAgICAgaGFuZGxlID0gTlVMTDsKKyAgICAgICAgICAgIGhhbmRsZS5jbGVhcigpOwogICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgQUxPR1YoIk5VTEwgZGVjcnlwdEhhbmRsZSBpcyByZXR1cm5lZCIpOwogICAgICAgICB9CkBAIC0xMzkzLDcgKzEzOTIsNyBAQAogCiAgICAgICAgIGNvbnN0IGludCB1bmlxdWVJZCA9IGRhdGEucmVhZEludDMyKCk7CiAKLSAgICAgICAgRGVjcnlwdEhhbmRsZSogaGFuZGxlID0gbmV3IERlY3J5cHRIYW5kbGUoKTsKKyAgICAgICAgc3A8RGVjcnlwdEhhbmRsZT4gaGFuZGxlID0gbmV3IERlY3J5cHRIYW5kbGUoKTsKICAgICAgICAgcmVhZERlY3J5cHRIYW5kbGVGcm9tUGFyY2VsRGF0YShoYW5kbGUsIGRhdGEpOwogCiAgICAgICAgIGNvbnN0IHN0YXR1c190IHN0YXR1cyA9IGNsb3NlRGVjcnlwdFNlc3Npb24odW5pcXVlSWQsIGhhbmRsZSk7CkBAIC0xNDA4LDggKzE0MDcsOCBAQAogCiAgICAgICAgIGNvbnN0IGludCB1bmlxdWVJZCA9IGRhdGEucmVhZEludDMyKCk7CiAKLSAgICAgICAgRGVjcnlwdEhhbmRsZSBoYW5kbGU7Ci0gICAgICAgIHJlYWREZWNyeXB0SGFuZGxlRnJvbVBhcmNlbERhdGEoJmhhbmRsZSwgZGF0YSk7CisgICAgICAgIHNwPERlY3J5cHRIYW5kbGU+IGhhbmRsZSA9IG5ldyBEZWNyeXB0SGFuZGxlKCk7CisgICAgICAgIHJlYWREZWNyeXB0SGFuZGxlRnJvbVBhcmNlbERhdGEoaGFuZGxlLCBkYXRhKTsKIAogICAgICAgICBjb25zdCBpbnQgZGVjcnlwdFVuaXRJZCA9IGRhdGEucmVhZEludDMyKCk7CiAKQEAgLTE0MTcsMTcgKzE0MTYsMTcgQEAKICAgICAgICAgY29uc3QgdWludDMyX3QgYnVmZmVyU2l6ZSA9IGRhdGEucmVhZEludDMyKCk7CiAgICAgICAgIGlmIChidWZmZXJTaXplID4gZGF0YS5kYXRhQXZhaWwoKSkgewogICAgICAgICAgICAgcmVwbHktPndyaXRlSW50MzIoQkFEX1ZBTFVFKTsKLSAgICAgICAgICAgIGNsZWFyRGVjcnlwdEhhbmRsZSgmaGFuZGxlKTsKKyAgICAgICAgICAgIGNsZWFyRGVjcnlwdEhhbmRsZShoYW5kbGUpOwogICAgICAgICAgICAgcmV0dXJuIERSTV9OT19FUlJPUjsKICAgICAgICAgfQogICAgICAgICBEcm1CdWZmZXIqIGhlYWRlckluZm8gPSBOVUxMOwogICAgICAgICBoZWFkZXJJbmZvID0gbmV3IERybUJ1ZmZlcigoY2hhciAqKWRhdGEucmVhZElucGxhY2UoYnVmZmVyU2l6ZSksIGJ1ZmZlclNpemUpOwogCiAgICAgICAgIGNvbnN0IHN0YXR1c190IHN0YXR1cwotICAgICAgICAgICAgPSBpbml0aWFsaXplRGVjcnlwdFVuaXQodW5pcXVlSWQsICZoYW5kbGUsIGRlY3J5cHRVbml0SWQsIGhlYWRlckluZm8pOworICAgICAgICAgICAgPSBpbml0aWFsaXplRGVjcnlwdFVuaXQodW5pcXVlSWQsIGhhbmRsZSwgZGVjcnlwdFVuaXRJZCwgaGVhZGVySW5mbyk7CiAgICAgICAgIHJlcGx5LT53cml0ZUludDMyKHN0YXR1cyk7CiAKLSAgICAgICAgY2xlYXJEZWNyeXB0SGFuZGxlKCZoYW5kbGUpOworICAgICAgICBjbGVhckRlY3J5cHRIYW5kbGUoaGFuZGxlKTsKICAgICAgICAgZGVsZXRlIGhlYWRlckluZm87IGhlYWRlckluZm8gPSBOVUxMOwogICAgICAgICByZXR1cm4gRFJNX05PX0VSUk9SOwogICAgIH0KQEAgLTE0MzksOCArMTQzOCw4IEBACiAKICAgICAgICAgY29uc3QgaW50IHVuaXF1ZUlkID0gZGF0YS5yZWFkSW50MzIoKTsKIAotICAgICAgICBEZWNyeXB0SGFuZGxlIGhhbmRsZTsKLSAgICAgICAgcmVhZERlY3J5cHRIYW5kbGVGcm9tUGFyY2VsRGF0YSgmaGFuZGxlLCBkYXRhKTsKKyAgICAgICAgc3A8RGVjcnlwdEhhbmRsZT4gaGFuZGxlID0gbmV3IERlY3J5cHRIYW5kbGU7CisgICAgICAgIHJlYWREZWNyeXB0SGFuZGxlRnJvbVBhcmNlbERhdGEoaGFuZGxlLCBkYXRhKTsKIAogICAgICAgICBjb25zdCBpbnQgZGVjcnlwdFVuaXRJZCA9IGRhdGEucmVhZEludDMyKCk7CiAgICAgICAgIGNvbnN0IHVpbnQzMl90IGRlY0J1ZmZlclNpemUgPSBkYXRhLnJlYWRJbnQzMigpOwpAQCAtMTQ1MCw3ICsxNDQ5LDcgQEAKICAgICAgICAgICAgIGRlY0J1ZmZlclNpemUgPiBNQVhfQklOREVSX1RSQU5TQUNUSU9OX1NJWkUpIHsKICAgICAgICAgICAgIHJlcGx5LT53cml0ZUludDMyKEJBRF9WQUxVRSk7CiAgICAgICAgICAgICByZXBseS0+d3JpdGVJbnQzMigwKTsKLSAgICAgICAgICAgIGNsZWFyRGVjcnlwdEhhbmRsZSgmaGFuZGxlKTsKKyAgICAgICAgICAgIGNsZWFyRGVjcnlwdEhhbmRsZShoYW5kbGUpOwogICAgICAgICAgICAgcmV0dXJuIERSTV9OT19FUlJPUjsKICAgICAgICAgfQogCkBAIC0xNDcwLDcgKzE0NjksNyBAQAogICAgICAgICB9CiAKICAgICAgICAgY29uc3Qgc3RhdHVzX3Qgc3RhdHVzCi0gICAgICAgICAgICA9IGRlY3J5cHQodW5pcXVlSWQsICZoYW5kbGUsIGRlY3J5cHRVbml0SWQsIGVuY0J1ZmZlciwgJmRlY0J1ZmZlciwgSVYpOworICAgICAgICAgICAgPSBkZWNyeXB0KHVuaXF1ZUlkLCBoYW5kbGUsIGRlY3J5cHRVbml0SWQsIGVuY0J1ZmZlciwgJmRlY0J1ZmZlciwgSVYpOwogCiAgICAgICAgIHJlcGx5LT53cml0ZUludDMyKHN0YXR1cyk7CiAKQEAgLTE0ODAsNyArMTQ3OSw3IEBACiAgICAgICAgICAgICByZXBseS0+d3JpdGUoZGVjQnVmZmVyLT5kYXRhLCBzaXplKTsKICAgICAgICAgfQogCi0gICAgICAgIGNsZWFyRGVjcnlwdEhhbmRsZSgmaGFuZGxlKTsKKyAgICAgICAgY2xlYXJEZWNyeXB0SGFuZGxlKGhhbmRsZSk7CiAgICAgICAgIGRlbGV0ZSBlbmNCdWZmZXI7IGVuY0J1ZmZlciA9IE5VTEw7CiAgICAgICAgIGRlbGV0ZSBkZWNCdWZmZXI7IGRlY0J1ZmZlciA9IE5VTEw7CiAgICAgICAgIGRlbGV0ZSBbXSBidWZmZXI7IGJ1ZmZlciA9IE5VTEw7CkBAIC0xNDk1LDEzICsxNDk0LDEzIEBACiAKICAgICAgICAgY29uc3QgaW50IHVuaXF1ZUlkID0gZGF0YS5yZWFkSW50MzIoKTsKIAotICAgICAgICBEZWNyeXB0SGFuZGxlIGhhbmRsZTsKLSAgICAgICAgcmVhZERlY3J5cHRIYW5kbGVGcm9tUGFyY2VsRGF0YSgmaGFuZGxlLCBkYXRhKTsKKyAgICAgICAgc3A8RGVjcnlwdEhhbmRsZT4gaGFuZGxlID0gbmV3IERlY3J5cHRIYW5kbGUoKTsKKyAgICAgICAgcmVhZERlY3J5cHRIYW5kbGVGcm9tUGFyY2VsRGF0YShoYW5kbGUsIGRhdGEpOwogCi0gICAgICAgIGNvbnN0IHN0YXR1c190IHN0YXR1cyA9IGZpbmFsaXplRGVjcnlwdFVuaXQodW5pcXVlSWQsICZoYW5kbGUsIGRhdGEucmVhZEludDMyKCkpOworICAgICAgICBjb25zdCBzdGF0dXNfdCBzdGF0dXMgPSBmaW5hbGl6ZURlY3J5cHRVbml0KHVuaXF1ZUlkLCBoYW5kbGUsIGRhdGEucmVhZEludDMyKCkpOwogICAgICAgICByZXBseS0+d3JpdGVJbnQzMihzdGF0dXMpOwogCi0gICAgICAgIGNsZWFyRGVjcnlwdEhhbmRsZSgmaGFuZGxlKTsKKyAgICAgICAgY2xlYXJEZWNyeXB0SGFuZGxlKGhhbmRsZSk7CiAgICAgICAgIHJldHVybiBEUk1fTk9fRVJST1I7CiAgICAgfQogCkBAIC0xNTEyLDggKzE1MTEsOCBAQAogCiAgICAgICAgIGNvbnN0IGludCB1bmlxdWVJZCA9IGRhdGEucmVhZEludDMyKCk7CiAKLSAgICAgICAgRGVjcnlwdEhhbmRsZSBoYW5kbGU7Ci0gICAgICAgIHJlYWREZWNyeXB0SGFuZGxlRnJvbVBhcmNlbERhdGEoJmhhbmRsZSwgZGF0YSk7CisgICAgICAgIHNwPERlY3J5cHRIYW5kbGU+IGhhbmRsZSA9IG5ldyBEZWNyeXB0SGFuZGxlKCk7CisgICAgICAgIHJlYWREZWNyeXB0SGFuZGxlRnJvbVBhcmNlbERhdGEoaGFuZGxlLCBkYXRhKTsKIAogICAgICAgICBjb25zdCB1aW50MzJfdCBudW1CeXRlcyA9IGRhdGEucmVhZEludDMyKCk7CiAgICAgICAgIGlmIChudW1CeXRlcyA+IE1BWF9CSU5ERVJfVFJBTlNBQ1RJT05fU0laRSkgewpAQCAtMTUyNCwxMyArMTUyMywxMyBAQAogCiAgICAgICAgIGNvbnN0IG9mZjY0X3Qgb2Zmc2V0ID0gZGF0YS5yZWFkSW50NjQoKTsKIAotICAgICAgICBzc2l6ZV90IHJlc3VsdCA9IHByZWFkKHVuaXF1ZUlkLCAmaGFuZGxlLCBidWZmZXIsIG51bUJ5dGVzLCBvZmZzZXQpOworICAgICAgICBzc2l6ZV90IHJlc3VsdCA9IHByZWFkKHVuaXF1ZUlkLCBoYW5kbGUsIGJ1ZmZlciwgbnVtQnl0ZXMsIG9mZnNldCk7CiAgICAgICAgIHJlcGx5LT53cml0ZUludDMyKHJlc3VsdCk7CiAgICAgICAgIGlmICgwIDwgcmVzdWx0KSB7CiAgICAgICAgICAgICByZXBseS0+d3JpdGUoYnVmZmVyLCByZXN1bHQpOwogICAgICAgICB9CiAKLSAgICAgICAgY2xlYXJEZWNyeXB0SGFuZGxlKCZoYW5kbGUpOworICAgICAgICBjbGVhckRlY3J5cHRIYW5kbGUoaGFuZGxlKTsKICAgICAgICAgZGVsZXRlIFtdIGJ1ZmZlciwgYnVmZmVyID0gTlVMTDsKICAgICAgICAgcmV0dXJuIERSTV9OT19FUlJPUjsKICAgICB9CmRpZmYgLS1naXQgYS9kcm0vY29tbW9uL2luY2x1ZGUvRHJtRW5naW5lQmFzZS5oIGIvZHJtL2NvbW1vbi9pbmNsdWRlL0RybUVuZ2luZUJhc2UuaAppbmRleCA0MTcxMDdmLi43M2YxMWE0IDEwMDY0NAotLS0gYS9kcm0vY29tbW9uL2luY2x1ZGUvRHJtRW5naW5lQmFzZS5oCisrKyBiL2RybS9jb21tb24vaW5jbHVkZS9Ecm1FbmdpbmVCYXNlLmgKQEAgLTU5LDEwICs1OSwxMSBAQAogCiAgICAgaW50IGNoZWNrUmlnaHRzU3RhdHVzKGludCB1bmlxdWVJZCwgY29uc3QgU3RyaW5nOCYgcGF0aCwgaW50IGFjdGlvbik7CiAKLSAgICBzdGF0dXNfdCBjb25zdW1lUmlnaHRzKGludCB1bmlxdWVJZCwgRGVjcnlwdEhhbmRsZSogZGVjcnlwdEhhbmRsZSwgaW50IGFjdGlvbiwgYm9vbCByZXNlcnZlKTsKKyAgICBzdGF0dXNfdCBjb25zdW1lUmlnaHRzKGludCB1bmlxdWVJZCwgc3A8RGVjcnlwdEhhbmRsZT4mIGRlY3J5cHRIYW5kbGUsIGludCBhY3Rpb24sCisgICAgICAgICAgICBib29sIHJlc2VydmUpOwogCiAgICAgc3RhdHVzX3Qgc2V0UGxheWJhY2tTdGF0dXMoCi0gICAgICAgICAgICBpbnQgdW5pcXVlSWQsIERlY3J5cHRIYW5kbGUqIGRlY3J5cHRIYW5kbGUsIGludCBwbGF5YmFja1N0YXR1cywgaW50NjRfdCBwb3NpdGlvbik7CisgICAgICAgICAgICBpbnQgdW5pcXVlSWQsIHNwPERlY3J5cHRIYW5kbGU+JiBkZWNyeXB0SGFuZGxlLCBpbnQgcGxheWJhY2tTdGF0dXMsIGludDY0X3QgcG9zaXRpb24pOwogCiAgICAgYm9vbCB2YWxpZGF0ZUFjdGlvbigKICAgICAgICAgICAgIGludCB1bmlxdWVJZCwgY29uc3QgU3RyaW5nOCYgcGF0aCwgaW50IGFjdGlvbiwgY29uc3QgQWN0aW9uRGVzY3JpcHRpb24mIGRlc2NyaXB0aW9uKTsKQEAgLTgwLDI3ICs4MSwyOCBAQAogICAgIERybVN1cHBvcnRJbmZvKiBnZXRTdXBwb3J0SW5mbyhpbnQgdW5pcXVlSWQpOwogCiAgICAgc3RhdHVzX3Qgb3BlbkRlY3J5cHRTZXNzaW9uKAotICAgICAgICAgICAgaW50IHVuaXF1ZUlkLCBEZWNyeXB0SGFuZGxlKiBkZWNyeXB0SGFuZGxlLAorICAgICAgICAgICAgaW50IHVuaXF1ZUlkLCBzcDxEZWNyeXB0SGFuZGxlPiYgZGVjcnlwdEhhbmRsZSwKICAgICAgICAgICAgIGludCBmZCwgb2ZmNjRfdCBvZmZzZXQsIG9mZjY0X3QgbGVuZ3RoLCBjb25zdCBjaGFyKiBtaW1lKTsKIAogICAgIHN0YXR1c190IG9wZW5EZWNyeXB0U2Vzc2lvbigKLSAgICAgICAgICAgIGludCB1bmlxdWVJZCwgRGVjcnlwdEhhbmRsZSogZGVjcnlwdEhhbmRsZSwKKyAgICAgICAgICAgIGludCB1bmlxdWVJZCwgc3A8RGVjcnlwdEhhbmRsZT4mIGRlY3J5cHRIYW5kbGUsCiAgICAgICAgICAgICBjb25zdCBjaGFyKiB1cmksIGNvbnN0IGNoYXIqIG1pbWUpOwogCi0gICAgc3RhdHVzX3Qgb3BlbkRlY3J5cHRTZXNzaW9uKGludCB1bmlxdWVJZCwgRGVjcnlwdEhhbmRsZSogZGVjcnlwdEhhbmRsZSwKKyAgICBzdGF0dXNfdCBvcGVuRGVjcnlwdFNlc3Npb24oaW50IHVuaXF1ZUlkLCBzcDxEZWNyeXB0SGFuZGxlPiYgZGVjcnlwdEhhbmRsZSwKICAgICAgICAgICAgIGNvbnN0IERybUJ1ZmZlciYgYnVmLCBjb25zdCBTdHJpbmc4JiBtaW1lVHlwZSk7CiAKLSAgICBzdGF0dXNfdCBjbG9zZURlY3J5cHRTZXNzaW9uKGludCB1bmlxdWVJZCwgRGVjcnlwdEhhbmRsZSogZGVjcnlwdEhhbmRsZSk7CisgICAgc3RhdHVzX3QgY2xvc2VEZWNyeXB0U2Vzc2lvbihpbnQgdW5pcXVlSWQsIHNwPERlY3J5cHRIYW5kbGU+JiBkZWNyeXB0SGFuZGxlKTsKIAotICAgIHN0YXR1c190IGluaXRpYWxpemVEZWNyeXB0VW5pdChpbnQgdW5pcXVlSWQsIERlY3J5cHRIYW5kbGUqIGRlY3J5cHRIYW5kbGUsCisgICAgc3RhdHVzX3QgaW5pdGlhbGl6ZURlY3J5cHRVbml0KGludCB1bmlxdWVJZCwgc3A8RGVjcnlwdEhhbmRsZT4mIGRlY3J5cHRIYW5kbGUsCiAgICAgICAgICAgICBpbnQgZGVjcnlwdFVuaXRJZCwgY29uc3QgRHJtQnVmZmVyKiBoZWFkZXJJbmZvKTsKIAotICAgIHN0YXR1c190IGRlY3J5cHQoaW50IHVuaXF1ZUlkLCBEZWNyeXB0SGFuZGxlKiBkZWNyeXB0SGFuZGxlLCBpbnQgZGVjcnlwdFVuaXRJZCwKKyAgICBzdGF0dXNfdCBkZWNyeXB0KGludCB1bmlxdWVJZCwgc3A8RGVjcnlwdEhhbmRsZT4mIGRlY3J5cHRIYW5kbGUsIGludCBkZWNyeXB0VW5pdElkLAogICAgICAgICAgICAgY29uc3QgRHJtQnVmZmVyKiBlbmNCdWZmZXIsIERybUJ1ZmZlcioqIGRlY0J1ZmZlciwgRHJtQnVmZmVyKiBJVik7CiAKLSAgICBzdGF0dXNfdCBmaW5hbGl6ZURlY3J5cHRVbml0KGludCB1bmlxdWVJZCwgRGVjcnlwdEhhbmRsZSogZGVjcnlwdEhhbmRsZSwgaW50IGRlY3J5cHRVbml0SWQpOworICAgIHN0YXR1c190IGZpbmFsaXplRGVjcnlwdFVuaXQoaW50IHVuaXF1ZUlkLCBzcDxEZWNyeXB0SGFuZGxlPiYgZGVjcnlwdEhhbmRsZSwKKyAgICAgICAgICAgIGludCBkZWNyeXB0VW5pdElkKTsKIAotICAgIHNzaXplX3QgcHJlYWQoaW50IHVuaXF1ZUlkLCBEZWNyeXB0SGFuZGxlKiBkZWNyeXB0SGFuZGxlLAorICAgIHNzaXplX3QgcHJlYWQoaW50IHVuaXF1ZUlkLCBzcDxEZWNyeXB0SGFuZGxlPiYgZGVjcnlwdEhhbmRsZSwKICAgICAgICAgICAgIHZvaWQqIGJ1ZmZlciwgc3NpemVfdCBudW1CeXRlcywgb2ZmNjRfdCBvZmZzZXQpOwogCiBwcm90ZWN0ZWQ6CkBAIC0yNjUsNyArMjY3LDcgQEAKICAgICAgKiBAcmV0dXJuIHN0YXR1c190CiAgICAgICogICAgIFJldHVybnMgRFJNX05PX0VSUk9SIGZvciBzdWNjZXNzLCBEUk1fRVJST1JfVU5LTk9XTiBmb3IgZmFpbHVyZQogICAgICAqLwotICAgIHZpcnR1YWwgc3RhdHVzX3Qgb25Db25zdW1lUmlnaHRzKGludCB1bmlxdWVJZCwgRGVjcnlwdEhhbmRsZSogZGVjcnlwdEhhbmRsZSwKKyAgICB2aXJ0dWFsIHN0YXR1c190IG9uQ29uc3VtZVJpZ2h0cyhpbnQgdW5pcXVlSWQsIHNwPERlY3J5cHRIYW5kbGU+JiBkZWNyeXB0SGFuZGxlLAogICAgICAgICAgICAgaW50IGFjdGlvbiwgYm9vbCByZXNlcnZlKSA9IDA7CiAKICAgICAvKioKQEAgLTI4MCw3ICsyODIsOCBAQAogICAgICAqICAgICBSZXR1cm5zIERSTV9OT19FUlJPUiBmb3Igc3VjY2VzcywgRFJNX0VSUk9SX1VOS05PV04gZm9yIGZhaWx1cmUKICAgICAgKi8KICAgICB2aXJ0dWFsIHN0YXR1c190IG9uU2V0UGxheWJhY2tTdGF0dXMoCi0gICAgICAgICAgICBpbnQgdW5pcXVlSWQsIERlY3J5cHRIYW5kbGUqIGRlY3J5cHRIYW5kbGUsIGludCBwbGF5YmFja1N0YXR1cywgaW50NjRfdCBwb3NpdGlvbikgPSAwOworICAgICAgICAgICAgaW50IHVuaXF1ZUlkLCBzcDxEZWNyeXB0SGFuZGxlPiYgZGVjcnlwdEhhbmRsZSwgaW50IHBsYXliYWNrU3RhdHVzLAorICAgICAgICAgICAgaW50NjRfdCBwb3NpdGlvbikgPSAwOwogCiAgICAgLyoqCiAgICAgICogVmFsaWRhdGVzIHdoZXRoZXIgYW4gYWN0aW9uIG9uIHRoZSBEUk0gY29udGVudCBpcyBhbGxvd2VkIG9yIG5vdC4KQEAgLTM4MSw3ICszODQsNyBAQAogICAgICAqICAgICBEUk1fRVJST1JfQ0FOTk9UX0hBTkRMRSBmb3IgZmFpbHVyZSBhbmQgRFJNX05PX0VSUk9SIGZvciBzdWNjZXNzCiAgICAgICovCiAgICAgdmlydHVhbCBzdGF0dXNfdCBvbk9wZW5EZWNyeXB0U2Vzc2lvbigKLSAgICAgICAgICAgIGludCB1bmlxdWVJZCwgRGVjcnlwdEhhbmRsZSogZGVjcnlwdEhhbmRsZSwKKyAgICAgICAgICAgIGludCB1bmlxdWVJZCwgc3A8RGVjcnlwdEhhbmRsZT4mIGRlY3J5cHRIYW5kbGUsCiAgICAgICAgICAgICBpbnQgZmQsIG9mZjY0X3Qgb2Zmc2V0LCBvZmY2NF90IGxlbmd0aCkgPSAwOwogCiAgICAgLyoqCkBAIC0zOTgsNyArNDAxLDcgQEAKICAgICAgKiAgICAgRFJNX0VSUk9SX0NBTk5PVF9IQU5ETEUgZm9yIGZhaWx1cmUgYW5kIERSTV9OT19FUlJPUiBmb3Igc3VjY2VzcwogICAgICAqLwogICAgIHZpcnR1YWwgc3RhdHVzX3Qgb25PcGVuRGVjcnlwdFNlc3Npb24oCi0gICAgICAgICAgICBpbnQgLyogdW5pcXVlSWQgKi8sIERlY3J5cHRIYW5kbGUqIC8qIGRlY3J5cHRIYW5kbGUgKi8sCisgICAgICAgICAgICBpbnQgLyogdW5pcXVlSWQgKi8sIHNwPERlY3J5cHRIYW5kbGU+JiAvKiBkZWNyeXB0SGFuZGxlICovLAogICAgICAgICAgICAgaW50IC8qIGZkICovLCBvZmY2NF90IC8qIG9mZnNldCAqLywgb2ZmNjRfdCAvKiBsZW5ndGggKi8sCiAgICAgICAgICAgICBjb25zdCBjaGFyKiAvKiBtaW1lICovKSB7CiAKQEAgLTQxNSw3ICs0MTgsNyBAQAogICAgICAqICAgICBEUk1fRVJST1JfQ0FOTk9UX0hBTkRMRSBmb3IgZmFpbHVyZSBhbmQgRFJNX05PX0VSUk9SIGZvciBzdWNjZXNzCiAgICAgICovCiAgICAgdmlydHVhbCBzdGF0dXNfdCBvbk9wZW5EZWNyeXB0U2Vzc2lvbigKLSAgICAgICAgICAgIGludCB1bmlxdWVJZCwgRGVjcnlwdEhhbmRsZSogZGVjcnlwdEhhbmRsZSwKKyAgICAgICAgICAgIGludCB1bmlxdWVJZCwgc3A8RGVjcnlwdEhhbmRsZT4mIGRlY3J5cHRIYW5kbGUsCiAgICAgICAgICAgICBjb25zdCBjaGFyKiB1cmkpID0gMDsKIAogICAgIC8qKgpAQCAtNDMwLDcgKzQzMyw3IEBACiAgICAgICogICAgIERSTV9FUlJPUl9DQU5OT1RfSEFORExFIGZvciBmYWlsdXJlIGFuZCBEUk1fTk9fRVJST1IgZm9yIHN1Y2Nlc3MKICAgICAgKi8KICAgICB2aXJ0dWFsIHN0YXR1c190IG9uT3BlbkRlY3J5cHRTZXNzaW9uKAotICAgICAgICAgICAgaW50IC8qIHVuaXF1ZUlkICovLCBEZWNyeXB0SGFuZGxlKiAvKiBkZWNyeXB0SGFuZGxlICovLAorICAgICAgICAgICAgaW50IC8qIHVuaXF1ZUlkICovLCBzcDxEZWNyeXB0SGFuZGxlPiYgLyogZGVjcnlwdEhhbmRsZSAqLywKICAgICAgICAgICAgIGNvbnN0IGNoYXIqIC8qIHVyaSAqLywgY29uc3QgY2hhciogLyogbWltZSAqLykgewogCiAgICAgICAgIHJldHVybiBEUk1fRVJST1JfQ0FOTk9UX0hBTkRMRTsKQEAgLTQ0Nyw3ICs0NTAsNyBAQAogICAgICAqICAgICBEUk1fRVJST1JfQ0FOTk9UX0hBTkRMRSBmb3IgZmFpbHVyZSBhbmQgRFJNX05PX0VSUk9SIGZvciBzdWNjZXNzCiAgICAgICovCiAgICAgdmlydHVhbCBzdGF0dXNfdCBvbk9wZW5EZWNyeXB0U2Vzc2lvbihpbnQgLyogdW5pcXVlSWQgKi8sCi0gICAgICAgICAgICBEZWNyeXB0SGFuZGxlKiAvKiBkZWNyeXB0SGFuZGxlICovLAorICAgICAgICAgICAgc3A8RGVjcnlwdEhhbmRsZT4mIC8qIGRlY3J5cHRIYW5kbGUgKi8sCiAgICAgICAgICAgICBjb25zdCBEcm1CdWZmZXImIC8qIGJ1ZiAqLywKICAgICAgICAgICAgIGNvbnN0IFN0cmluZzgmIC8qIG1pbWVUeXBlICovKSB7CiAgICAgICAgIHJldHVybiBEUk1fRVJST1JfQ0FOTk9UX0hBTkRMRTsKQEAgLTQ2MSw3ICs0NjQsNyBAQAogICAgICAqIEByZXR1cm4gc3RhdHVzX3QKICAgICAgKiAgICAgUmV0dXJucyBEUk1fTk9fRVJST1IgZm9yIHN1Y2Nlc3MsIERSTV9FUlJPUl9VTktOT1dOIGZvciBmYWlsdXJlCiAgICAgICovCi0gICAgdmlydHVhbCBzdGF0dXNfdCBvbkNsb3NlRGVjcnlwdFNlc3Npb24oaW50IHVuaXF1ZUlkLCBEZWNyeXB0SGFuZGxlKiBkZWNyeXB0SGFuZGxlKSA9IDA7CisgICAgdmlydHVhbCBzdGF0dXNfdCBvbkNsb3NlRGVjcnlwdFNlc3Npb24oaW50IHVuaXF1ZUlkLCBzcDxEZWNyeXB0SGFuZGxlPiYgZGVjcnlwdEhhbmRsZSkgPSAwOwogCiAgICAgLyoqCiAgICAgICogSW5pdGlhbGl6ZSBkZWNyeXB0aW9uIGZvciB0aGUgZ2l2ZW4gdW5pdCBvZiB0aGUgcHJvdGVjdGVkIGNvbnRlbnQKQEAgLTQ3Myw3ICs0NzYsNyBAQAogICAgICAqIEByZXR1cm4gc3RhdHVzX3QKICAgICAgKiAgICAgUmV0dXJucyBEUk1fTk9fRVJST1IgZm9yIHN1Y2Nlc3MsIERSTV9FUlJPUl9VTktOT1dOIGZvciBmYWlsdXJlCiAgICAgICovCi0gICAgdmlydHVhbCBzdGF0dXNfdCBvbkluaXRpYWxpemVEZWNyeXB0VW5pdChpbnQgdW5pcXVlSWQsIERlY3J5cHRIYW5kbGUqIGRlY3J5cHRIYW5kbGUsCisgICAgdmlydHVhbCBzdGF0dXNfdCBvbkluaXRpYWxpemVEZWNyeXB0VW5pdChpbnQgdW5pcXVlSWQsIHNwPERlY3J5cHRIYW5kbGU+JiBkZWNyeXB0SGFuZGxlLAogICAgICAgICAgICAgaW50IGRlY3J5cHRVbml0SWQsIGNvbnN0IERybUJ1ZmZlciogaGVhZGVySW5mbykgPSAwOwogCiAgICAgLyoqCkBAIC00OTMsNyArNDk2LDcgQEAKICAgICAgKiAgICAgRFJNX0VSUk9SX1NFU1NJT05fTk9UX09QRU5FRCwgRFJNX0VSUk9SX0RFQ1JZUFRfVU5JVF9OT1RfSU5JVElBTElaRUQsCiAgICAgICogICAgIERSTV9FUlJPUl9ERUNSWVBUIGZvciBmYWlsdXJlLgogICAgICAqLwotICAgIHZpcnR1YWwgc3RhdHVzX3Qgb25EZWNyeXB0KGludCB1bmlxdWVJZCwgRGVjcnlwdEhhbmRsZSogZGVjcnlwdEhhbmRsZSwgaW50IGRlY3J5cHRVbml0SWQsCisgICAgdmlydHVhbCBzdGF0dXNfdCBvbkRlY3J5cHQoaW50IHVuaXF1ZUlkLCBzcDxEZWNyeXB0SGFuZGxlPiYgZGVjcnlwdEhhbmRsZSwgaW50IGRlY3J5cHRVbml0SWQsCiAgICAgICAgICAgICBjb25zdCBEcm1CdWZmZXIqIGVuY0J1ZmZlciwgRHJtQnVmZmVyKiogZGVjQnVmZmVyLCBEcm1CdWZmZXIqIElWKSA9IDA7CiAKICAgICAvKioKQEAgLTUwNiw3ICs1MDksNyBAQAogICAgICAqICAgICBSZXR1cm5zIERSTV9OT19FUlJPUiBmb3Igc3VjY2VzcywgRFJNX0VSUk9SX1VOS05PV04gZm9yIGZhaWx1cmUKICAgICAgKi8KICAgICB2aXJ0dWFsIHN0YXR1c190IG9uRmluYWxpemVEZWNyeXB0VW5pdCgKLSAgICAgICAgICAgIGludCB1bmlxdWVJZCwgRGVjcnlwdEhhbmRsZSogZGVjcnlwdEhhbmRsZSwgaW50IGRlY3J5cHRVbml0SWQpID0gMDsKKyAgICAgICAgICAgIGludCB1bmlxdWVJZCwgc3A8RGVjcnlwdEhhbmRsZT4mIGRlY3J5cHRIYW5kbGUsIGludCBkZWNyeXB0VW5pdElkKSA9IDA7CiAKICAgICAvKioKICAgICAgKiBSZWFkcyB0aGUgc3BlY2lmaWVkIG51bWJlciBvZiBieXRlcyBmcm9tIGFuIG9wZW4gRFJNIGZpbGUuCkBAIC01MTksNyArNTIyLDcgQEAKICAgICAgKgogICAgICAqIEByZXR1cm4gTnVtYmVyIG9mIGJ5dGVzIHJlYWQuIFJldHVybnMgLTEgZm9yIEZhaWx1cmUuCiAgICAgICovCi0gICAgdmlydHVhbCBzc2l6ZV90IG9uUHJlYWQoaW50IHVuaXF1ZUlkLCBEZWNyeXB0SGFuZGxlKiBkZWNyeXB0SGFuZGxlLAorICAgIHZpcnR1YWwgc3NpemVfdCBvblByZWFkKGludCB1bmlxdWVJZCwgc3A8RGVjcnlwdEhhbmRsZT4mIGRlY3J5cHRIYW5kbGUsCiAgICAgICAgICAgICB2b2lkKiBidWZmZXIsIHNzaXplX3QgbnVtQnl0ZXMsIG9mZjY0X3Qgb2Zmc2V0KSA9IDA7CiB9OwogCmRpZmYgLS1naXQgYS9kcm0vY29tbW9uL2luY2x1ZGUvSURybUVuZ2luZS5oIGIvZHJtL2NvbW1vbi9pbmNsdWRlL0lEcm1FbmdpbmUuaAppbmRleCBhY2M4ZWQ5Li4xODM3YTExIDEwMDY0NAotLS0gYS9kcm0vY29tbW9uL2luY2x1ZGUvSURybUVuZ2luZS5oCisrKyBiL2RybS9jb21tb24vaW5jbHVkZS9JRHJtRW5naW5lLmgKQEAgLTIxMCw3ICsyMTAsNyBAQAogICAgICAqICAgICBSZXR1cm5zIERSTV9OT19FUlJPUiBmb3Igc3VjY2VzcywgRFJNX0VSUk9SX1VOS05PV04gZm9yIGZhaWx1cmUKICAgICAgKi8KICAgICB2aXJ0dWFsIHN0YXR1c190IGNvbnN1bWVSaWdodHMoCi0gICAgICAgICAgICBpbnQgdW5pcXVlSWQsIERlY3J5cHRIYW5kbGUqIGRlY3J5cHRIYW5kbGUsIGludCBhY3Rpb24sIGJvb2wgcmVzZXJ2ZSkgPSAwOworICAgICAgICAgICAgaW50IHVuaXF1ZUlkLCBzcDxEZWNyeXB0SGFuZGxlPiYgZGVjcnlwdEhhbmRsZSwgaW50IGFjdGlvbiwgYm9vbCByZXNlcnZlKSA9IDA7CiAKICAgICAvKioKICAgICAgKiBJbmZvcm1zIHRoZSBEUk0gRW5naW5lIGFib3V0IHRoZSBwbGF5YmFjayBhY3Rpb25zIHBlcmZvcm1lZCBvbiB0aGUgRFJNIGZpbGVzLgpAQCAtMjIzLDcgKzIyMyw3IEBACiAgICAgICogQHJldHVybiBzdGF0dXNfdAogICAgICAqICAgICBSZXR1cm5zIERSTV9OT19FUlJPUiBmb3Igc3VjY2VzcywgRFJNX0VSUk9SX1VOS05PV04gZm9yIGZhaWx1cmUKICAgICAgKi8KLSAgICB2aXJ0dWFsIHN0YXR1c190IHNldFBsYXliYWNrU3RhdHVzKGludCB1bmlxdWVJZCwgRGVjcnlwdEhhbmRsZSogZGVjcnlwdEhhbmRsZSwKKyAgICB2aXJ0dWFsIHN0YXR1c190IHNldFBsYXliYWNrU3RhdHVzKGludCB1bmlxdWVJZCwgc3A8RGVjcnlwdEhhbmRsZT4mIGRlY3J5cHRIYW5kbGUsCiAgICAgICAgICAgICBpbnQgcGxheWJhY2tTdGF0dXMsIGludDY0X3QgcG9zaXRpb24pID0gMDsKIAogICAgIC8qKgpAQCAtMzI3LDcgKzMyNyw3IEBACiAgICAgICogICAgIERSTV9FUlJPUl9DQU5OT1RfSEFORExFIGZvciBmYWlsdXJlIGFuZCBEUk1fTk9fRVJST1IgZm9yIHN1Y2Nlc3MKICAgICAgKi8KICAgICB2aXJ0dWFsIHN0YXR1c190IG9wZW5EZWNyeXB0U2Vzc2lvbigKLSAgICAgICAgaW50IHVuaXF1ZUlkLCBEZWNyeXB0SGFuZGxlKiBkZWNyeXB0SGFuZGxlLAorICAgICAgICBpbnQgdW5pcXVlSWQsIHNwPERlY3J5cHRIYW5kbGU+JiBkZWNyeXB0SGFuZGxlLAogICAgICAgICBpbnQgZmQsIG9mZjY0X3Qgb2Zmc2V0LCBvZmY2NF90IGxlbmd0aCwgY29uc3QgY2hhciogbWltZSkgPSAwOwogCiAgICAgLyoqCkBAIC0zNDIsNyArMzQyLDcgQEAKICAgICAgKiAgICAgRFJNX0VSUk9SX0NBTk5PVF9IQU5ETEUgZm9yIGZhaWx1cmUgYW5kIERSTV9OT19FUlJPUiBmb3Igc3VjY2VzcwogICAgICAqLwogICAgIHZpcnR1YWwgc3RhdHVzX3Qgb3BlbkRlY3J5cHRTZXNzaW9uKAotICAgICAgICBpbnQgdW5pcXVlSWQsIERlY3J5cHRIYW5kbGUqIGRlY3J5cHRIYW5kbGUsCisgICAgICAgIGludCB1bmlxdWVJZCwgc3A8RGVjcnlwdEhhbmRsZT4mIGRlY3J5cHRIYW5kbGUsCiAgICAgICAgIGNvbnN0IGNoYXIqIHVyaSwgY29uc3QgY2hhciogbWltZSkgPSAwOwogCiAgICAgLyoqCkBAIC0zNTUsNyArMzU1LDcgQEAKICAgICAgKiBAcmV0dXJuCiAgICAgICogICAgIERSTV9FUlJPUl9DQU5OT1RfSEFORExFIGZvciBmYWlsdXJlIGFuZCBEUk1fTk9fRVJST1IgZm9yIHN1Y2Nlc3MKICAgICAgKi8KLSAgICB2aXJ0dWFsIHN0YXR1c190IG9wZW5EZWNyeXB0U2Vzc2lvbihpbnQgdW5pcXVlSWQsIERlY3J5cHRIYW5kbGUqIGRlY3J5cHRIYW5kbGUsCisgICAgdmlydHVhbCBzdGF0dXNfdCBvcGVuRGVjcnlwdFNlc3Npb24oaW50IHVuaXF1ZUlkLCBzcDxEZWNyeXB0SGFuZGxlPiYgZGVjcnlwdEhhbmRsZSwKICAgICAgICAgICAgIGNvbnN0IERybUJ1ZmZlciYgYnVmLCBjb25zdCBTdHJpbmc4JiBtaW1lVHlwZSkgPSAwOwogCiAgICAgLyoqCkBAIC0zNjYsNyArMzY2LDcgQEAKICAgICAgKiBAcmV0dXJuIHN0YXR1c190CiAgICAgICogICAgIFJldHVybnMgRFJNX05PX0VSUk9SIGZvciBzdWNjZXNzLCBEUk1fRVJST1JfVU5LTk9XTiBmb3IgZmFpbHVyZQogICAgICAqLwotICAgIHZpcnR1YWwgc3RhdHVzX3QgY2xvc2VEZWNyeXB0U2Vzc2lvbihpbnQgdW5pcXVlSWQsIERlY3J5cHRIYW5kbGUqIGRlY3J5cHRIYW5kbGUpID0gMDsKKyAgICB2aXJ0dWFsIHN0YXR1c190IGNsb3NlRGVjcnlwdFNlc3Npb24oaW50IHVuaXF1ZUlkLCBzcDxEZWNyeXB0SGFuZGxlPiYgZGVjcnlwdEhhbmRsZSkgPSAwOwogCiAgICAgLyoqCiAgICAgICogSW5pdGlhbGl6ZSBkZWNyeXB0aW9uIGZvciB0aGUgZ2l2ZW4gdW5pdCBvZiB0aGUgcHJvdGVjdGVkIGNvbnRlbnQKQEAgLTM3OCw3ICszNzgsNyBAQAogICAgICAqIEByZXR1cm4gc3RhdHVzX3QKICAgICAgKiAgICAgUmV0dXJucyBEUk1fTk9fRVJST1IgZm9yIHN1Y2Nlc3MsIERSTV9FUlJPUl9VTktOT1dOIGZvciBmYWlsdXJlCiAgICAgICovCi0gICAgdmlydHVhbCBzdGF0dXNfdCBpbml0aWFsaXplRGVjcnlwdFVuaXQoaW50IHVuaXF1ZUlkLCBEZWNyeXB0SGFuZGxlKiBkZWNyeXB0SGFuZGxlLAorICAgIHZpcnR1YWwgc3RhdHVzX3QgaW5pdGlhbGl6ZURlY3J5cHRVbml0KGludCB1bmlxdWVJZCwgc3A8RGVjcnlwdEhhbmRsZT4mIGRlY3J5cHRIYW5kbGUsCiAgICAgICAgICAgICBpbnQgZGVjcnlwdFVuaXRJZCwgY29uc3QgRHJtQnVmZmVyKiBoZWFkZXJJbmZvKSA9IDA7CiAKICAgICAvKioKQEAgLTM5OCw3ICszOTgsNyBAQAogICAgICAqICAgICBEUk1fRVJST1JfU0VTU0lPTl9OT1RfT1BFTkVELCBEUk1fRVJST1JfREVDUllQVF9VTklUX05PVF9JTklUSUFMSVpFRCwKICAgICAgKiAgICAgRFJNX0VSUk9SX0RFQ1JZUFQgZm9yIGZhaWx1cmUuCiAgICAgICovCi0gICAgdmlydHVhbCBzdGF0dXNfdCBkZWNyeXB0KGludCB1bmlxdWVJZCwgRGVjcnlwdEhhbmRsZSogZGVjcnlwdEhhbmRsZSwgaW50IGRlY3J5cHRVbml0SWQsCisgICAgdmlydHVhbCBzdGF0dXNfdCBkZWNyeXB0KGludCB1bmlxdWVJZCwgc3A8RGVjcnlwdEhhbmRsZT4mIGRlY3J5cHRIYW5kbGUsIGludCBkZWNyeXB0VW5pdElkLAogICAgICAgICAgICAgY29uc3QgRHJtQnVmZmVyKiBlbmNCdWZmZXIsIERybUJ1ZmZlcioqIGRlY0J1ZmZlciwgRHJtQnVmZmVyKiBJVikgPSAwOwogCiAgICAgLyoqCkBAIC00MTEsNyArNDExLDcgQEAKICAgICAgKiAgICAgUmV0dXJucyBEUk1fTk9fRVJST1IgZm9yIHN1Y2Nlc3MsIERSTV9FUlJPUl9VTktOT1dOIGZvciBmYWlsdXJlCiAgICAgICovCiAgICAgdmlydHVhbCBzdGF0dXNfdCBmaW5hbGl6ZURlY3J5cHRVbml0KAotICAgICAgICAgICAgaW50IHVuaXF1ZUlkLCBEZWNyeXB0SGFuZGxlKiBkZWNyeXB0SGFuZGxlLCBpbnQgZGVjcnlwdFVuaXRJZCkgPSAwOworICAgICAgICAgICAgaW50IHVuaXF1ZUlkLCBzcDxEZWNyeXB0SGFuZGxlPiYgZGVjcnlwdEhhbmRsZSwgaW50IGRlY3J5cHRVbml0SWQpID0gMDsKIAogICAgIC8qKgogICAgICAqIFJlYWRzIHRoZSBzcGVjaWZpZWQgbnVtYmVyIG9mIGJ5dGVzIGZyb20gYW4gb3BlbiBEUk0gZmlsZS4KQEAgLTQyNCw3ICs0MjQsNyBAQAogICAgICAqCiAgICAgICogQHJldHVybiBOdW1iZXIgb2YgYnl0ZXMgcmVhZC4gUmV0dXJucyAtMSBmb3IgRmFpbHVyZS4KICAgICAgKi8KLSAgICB2aXJ0dWFsIHNzaXplX3QgcHJlYWQoaW50IHVuaXF1ZUlkLCBEZWNyeXB0SGFuZGxlKiBkZWNyeXB0SGFuZGxlLAorICAgIHZpcnR1YWwgc3NpemVfdCBwcmVhZChpbnQgdW5pcXVlSWQsIHNwPERlY3J5cHRIYW5kbGU+JiBkZWNyeXB0SGFuZGxlLAogICAgICAgICAgICAgdm9pZCogYnVmZmVyLCBzc2l6ZV90IG51bUJ5dGVzLCBvZmY2NF90IG9mZnNldCkgPSAwOwogfTsKIApkaWZmIC0tZ2l0IGEvZHJtL2NvbW1vbi9pbmNsdWRlL0lEcm1NYW5hZ2VyU2VydmljZS5oIGIvZHJtL2NvbW1vbi9pbmNsdWRlL0lEcm1NYW5hZ2VyU2VydmljZS5oCmluZGV4IDAzNzZiNDkuLjgzNmFlMGEgMTAwNjQ0Ci0tLSBhL2RybS9jb21tb24vaW5jbHVkZS9JRHJtTWFuYWdlclNlcnZpY2UuaAorKysgYi9kcm0vY29tbW9uL2luY2x1ZGUvSURybU1hbmFnZXJTZXJ2aWNlLmgKQEAgLTExNSwxMCArMTE1LDExIEBACiAgICAgdmlydHVhbCBpbnQgY2hlY2tSaWdodHNTdGF0dXMoaW50IHVuaXF1ZUlkLCBjb25zdCBTdHJpbmc4JiBwYXRoLCBpbnQgYWN0aW9uKSA9IDA7CiAKICAgICB2aXJ0dWFsIHN0YXR1c190IGNvbnN1bWVSaWdodHMoCi0gICAgICAgICAgICBpbnQgdW5pcXVlSWQsIERlY3J5cHRIYW5kbGUqIGRlY3J5cHRIYW5kbGUsIGludCBhY3Rpb24sIGJvb2wgcmVzZXJ2ZSkgPSAwOworICAgICAgICAgICAgaW50IHVuaXF1ZUlkLCBzcDxEZWNyeXB0SGFuZGxlPiYgZGVjcnlwdEhhbmRsZSwgaW50IGFjdGlvbiwgYm9vbCByZXNlcnZlKSA9IDA7CiAKICAgICB2aXJ0dWFsIHN0YXR1c190IHNldFBsYXliYWNrU3RhdHVzKAotICAgICAgICAgICAgaW50IHVuaXF1ZUlkLCBEZWNyeXB0SGFuZGxlKiBkZWNyeXB0SGFuZGxlLCBpbnQgcGxheWJhY2tTdGF0dXMsIGludDY0X3QgcG9zaXRpb24pID0gMDsKKyAgICAgICAgICAgIGludCB1bmlxdWVJZCwgc3A8RGVjcnlwdEhhbmRsZT4mIGRlY3J5cHRIYW5kbGUsIGludCBwbGF5YmFja1N0YXR1cywKKyAgICAgICAgICAgIGludDY0X3QgcG9zaXRpb24pID0gMDsKIAogICAgIHZpcnR1YWwgYm9vbCB2YWxpZGF0ZUFjdGlvbigKICAgICAgICAgICAgIGludCB1bmlxdWVJZCwgY29uc3QgU3RyaW5nOCYgcGF0aCwKQEAgLTEzOCwyOCArMTM5LDI4IEBACiAgICAgdmlydHVhbCBzdGF0dXNfdCBnZXRBbGxTdXBwb3J0SW5mbygKICAgICAgICAgICAgIGludCB1bmlxdWVJZCwgaW50KiBsZW5ndGgsIERybVN1cHBvcnRJbmZvKiogZHJtU3VwcG9ydEluZm9BcnJheSkgPSAwOwogCi0gICAgdmlydHVhbCBEZWNyeXB0SGFuZGxlKiBvcGVuRGVjcnlwdFNlc3Npb24oCisgICAgdmlydHVhbCBzcDxEZWNyeXB0SGFuZGxlPiBvcGVuRGVjcnlwdFNlc3Npb24oCiAgICAgICAgICAgICAgICAgaW50IHVuaXF1ZUlkLCBpbnQgZmQsIG9mZjY0X3Qgb2Zmc2V0LAogICAgICAgICAgICAgICAgIG9mZjY0X3QgbGVuZ3RoLCBjb25zdCBjaGFyKiBtaW1lKSA9IDA7CiAKLSAgICB2aXJ0dWFsIERlY3J5cHRIYW5kbGUqIG9wZW5EZWNyeXB0U2Vzc2lvbigKKyAgICB2aXJ0dWFsIHNwPERlY3J5cHRIYW5kbGU+IG9wZW5EZWNyeXB0U2Vzc2lvbigKICAgICAgICAgICAgICAgICBpbnQgdW5pcXVlSWQsIGNvbnN0IGNoYXIqIHVyaSwgY29uc3QgY2hhciogbWltZSkgPSAwOwogCi0gICAgdmlydHVhbCBEZWNyeXB0SGFuZGxlKiBvcGVuRGVjcnlwdFNlc3Npb24oCisgICAgdmlydHVhbCBzcDxEZWNyeXB0SGFuZGxlPiBvcGVuRGVjcnlwdFNlc3Npb24oCiAgICAgICAgICAgICBpbnQgdW5pcXVlSWQsIGNvbnN0IERybUJ1ZmZlciYgYnVmLCBjb25zdCBTdHJpbmc4JiBtaW1lVHlwZSkgPSAwOwogCi0gICAgdmlydHVhbCBzdGF0dXNfdCBjbG9zZURlY3J5cHRTZXNzaW9uKGludCB1bmlxdWVJZCwgRGVjcnlwdEhhbmRsZSogZGVjcnlwdEhhbmRsZSkgPSAwOworICAgIHZpcnR1YWwgc3RhdHVzX3QgY2xvc2VEZWNyeXB0U2Vzc2lvbihpbnQgdW5pcXVlSWQsIHNwPERlY3J5cHRIYW5kbGU+JiBkZWNyeXB0SGFuZGxlKSA9IDA7CiAKLSAgICB2aXJ0dWFsIHN0YXR1c190IGluaXRpYWxpemVEZWNyeXB0VW5pdChpbnQgdW5pcXVlSWQsIERlY3J5cHRIYW5kbGUqIGRlY3J5cHRIYW5kbGUsCisgICAgdmlydHVhbCBzdGF0dXNfdCBpbml0aWFsaXplRGVjcnlwdFVuaXQoaW50IHVuaXF1ZUlkLCBzcDxEZWNyeXB0SGFuZGxlPiYgZGVjcnlwdEhhbmRsZSwKICAgICAgICAgICAgIGludCBkZWNyeXB0VW5pdElkLCBjb25zdCBEcm1CdWZmZXIqIGhlYWRlckluZm8pID0gMDsKIAotICAgIHZpcnR1YWwgc3RhdHVzX3QgZGVjcnlwdChpbnQgdW5pcXVlSWQsIERlY3J5cHRIYW5kbGUqIGRlY3J5cHRIYW5kbGUsIGludCBkZWNyeXB0VW5pdElkLAorICAgIHZpcnR1YWwgc3RhdHVzX3QgZGVjcnlwdChpbnQgdW5pcXVlSWQsIHNwPERlY3J5cHRIYW5kbGU+JiBkZWNyeXB0SGFuZGxlLCBpbnQgZGVjcnlwdFVuaXRJZCwKICAgICAgICAgICAgIGNvbnN0IERybUJ1ZmZlciogZW5jQnVmZmVyLCBEcm1CdWZmZXIqKiBkZWNCdWZmZXIsIERybUJ1ZmZlciogSVYpID0gMDsKIAogICAgIHZpcnR1YWwgc3RhdHVzX3QgZmluYWxpemVEZWNyeXB0VW5pdCgKLSAgICAgICAgICAgIGludCB1bmlxdWVJZCwgRGVjcnlwdEhhbmRsZSogZGVjcnlwdEhhbmRsZSwgaW50IGRlY3J5cHRVbml0SWQpID0gMDsKKyAgICAgICAgICAgIGludCB1bmlxdWVJZCwgc3A8RGVjcnlwdEhhbmRsZT4mIGRlY3J5cHRIYW5kbGUsIGludCBkZWNyeXB0VW5pdElkKSA9IDA7CiAKLSAgICB2aXJ0dWFsIHNzaXplX3QgcHJlYWQoaW50IHVuaXF1ZUlkLCBEZWNyeXB0SGFuZGxlKiBkZWNyeXB0SGFuZGxlLAorICAgIHZpcnR1YWwgc3NpemVfdCBwcmVhZChpbnQgdW5pcXVlSWQsIHNwPERlY3J5cHRIYW5kbGU+JiBkZWNyeXB0SGFuZGxlLAogICAgICAgICAgICAgdm9pZCogYnVmZmVyLCBzc2l6ZV90IG51bUJ5dGVzLG9mZjY0X3Qgb2Zmc2V0KSA9IDA7CiB9OwogCkBAIC0yMDMsMTAgKzIwNCwxMCBAQAogICAgIHZpcnR1YWwgaW50IGNoZWNrUmlnaHRzU3RhdHVzKGludCB1bmlxdWVJZCwgY29uc3QgU3RyaW5nOCYgcGF0aCwgaW50IGFjdGlvbik7CiAKICAgICB2aXJ0dWFsIHN0YXR1c190IGNvbnN1bWVSaWdodHMoCi0gICAgICAgICAgICBpbnQgdW5pcXVlSWQsIERlY3J5cHRIYW5kbGUqIGRlY3J5cHRIYW5kbGUsIGludCBhY3Rpb24sIGJvb2wgcmVzZXJ2ZSk7CisgICAgICAgICAgICBpbnQgdW5pcXVlSWQsIHNwPERlY3J5cHRIYW5kbGU+JiBkZWNyeXB0SGFuZGxlLCBpbnQgYWN0aW9uLCBib29sIHJlc2VydmUpOwogCiAgICAgdmlydHVhbCBzdGF0dXNfdCBzZXRQbGF5YmFja1N0YXR1cygKLSAgICAgICAgICAgIGludCB1bmlxdWVJZCwgRGVjcnlwdEhhbmRsZSogZGVjcnlwdEhhbmRsZSwgaW50IHBsYXliYWNrU3RhdHVzLCBpbnQ2NF90IHBvc2l0aW9uKTsKKyAgICAgICAgICAgIGludCB1bmlxdWVJZCwgc3A8RGVjcnlwdEhhbmRsZT4mIGRlY3J5cHRIYW5kbGUsIGludCBwbGF5YmFja1N0YXR1cywgaW50NjRfdCBwb3NpdGlvbik7CiAKICAgICB2aXJ0dWFsIGJvb2wgdmFsaWRhdGVBY3Rpb24oCiAgICAgICAgICAgICBpbnQgdW5pcXVlSWQsIGNvbnN0IFN0cmluZzgmIHBhdGgsIGludCBhY3Rpb24sIGNvbnN0IEFjdGlvbkRlc2NyaXB0aW9uJiBkZXNjcmlwdGlvbik7CkBAIC0yMjUsMjggKzIyNiwyOCBAQAogICAgIHZpcnR1YWwgc3RhdHVzX3QgZ2V0QWxsU3VwcG9ydEluZm8oCiAgICAgICAgICAgICBpbnQgdW5pcXVlSWQsIGludCogbGVuZ3RoLCBEcm1TdXBwb3J0SW5mbyoqIGRybVN1cHBvcnRJbmZvQXJyYXkpOwogCi0gICAgdmlydHVhbCBEZWNyeXB0SGFuZGxlKiBvcGVuRGVjcnlwdFNlc3Npb24oCisgICAgdmlydHVhbCBzcDxEZWNyeXB0SGFuZGxlPiBvcGVuRGVjcnlwdFNlc3Npb24oCiAgICAgICAgICAgICAgICAgaW50IHVuaXF1ZUlkLCBpbnQgZmQsIG9mZjY0X3Qgb2Zmc2V0LCBvZmY2NF90IGxlbmd0aCwKICAgICAgICAgICAgICAgICBjb25zdCBjaGFyKiBtaW1lKTsKIAotICAgIHZpcnR1YWwgRGVjcnlwdEhhbmRsZSogb3BlbkRlY3J5cHRTZXNzaW9uKAorICAgIHZpcnR1YWwgc3A8RGVjcnlwdEhhbmRsZT4gb3BlbkRlY3J5cHRTZXNzaW9uKAogICAgICAgICAgICAgICAgIGludCB1bmlxdWVJZCwgY29uc3QgY2hhciogdXJpLCBjb25zdCBjaGFyKiBtaW1lKTsKIAotICAgIHZpcnR1YWwgRGVjcnlwdEhhbmRsZSogb3BlbkRlY3J5cHRTZXNzaW9uKAorICAgIHZpcnR1YWwgc3A8RGVjcnlwdEhhbmRsZT4gb3BlbkRlY3J5cHRTZXNzaW9uKAogICAgICAgICAgICAgaW50IHVuaXF1ZUlkLCBjb25zdCBEcm1CdWZmZXImIGJ1ZiwgY29uc3QgU3RyaW5nOCYgbWltZVR5cGUpOwogCi0gICAgdmlydHVhbCBzdGF0dXNfdCBjbG9zZURlY3J5cHRTZXNzaW9uKGludCB1bmlxdWVJZCwgRGVjcnlwdEhhbmRsZSogZGVjcnlwdEhhbmRsZSk7CisgICAgdmlydHVhbCBzdGF0dXNfdCBjbG9zZURlY3J5cHRTZXNzaW9uKGludCB1bmlxdWVJZCwgc3A8RGVjcnlwdEhhbmRsZT4mIGRlY3J5cHRIYW5kbGUpOwogCi0gICAgdmlydHVhbCBzdGF0dXNfdCBpbml0aWFsaXplRGVjcnlwdFVuaXQoaW50IHVuaXF1ZUlkLCBEZWNyeXB0SGFuZGxlKiBkZWNyeXB0SGFuZGxlLAorICAgIHZpcnR1YWwgc3RhdHVzX3QgaW5pdGlhbGl6ZURlY3J5cHRVbml0KGludCB1bmlxdWVJZCwgc3A8RGVjcnlwdEhhbmRsZT4mIGRlY3J5cHRIYW5kbGUsCiAgICAgICAgICAgICBpbnQgZGVjcnlwdFVuaXRJZCwgY29uc3QgRHJtQnVmZmVyKiBoZWFkZXJJbmZvKTsKIAotICAgIHZpcnR1YWwgc3RhdHVzX3QgZGVjcnlwdChpbnQgdW5pcXVlSWQsIERlY3J5cHRIYW5kbGUqIGRlY3J5cHRIYW5kbGUsIGludCBkZWNyeXB0VW5pdElkLAorICAgIHZpcnR1YWwgc3RhdHVzX3QgZGVjcnlwdChpbnQgdW5pcXVlSWQsIHNwPERlY3J5cHRIYW5kbGU+JiBkZWNyeXB0SGFuZGxlLCBpbnQgZGVjcnlwdFVuaXRJZCwKICAgICAgICAgICAgIGNvbnN0IERybUJ1ZmZlciogZW5jQnVmZmVyLCBEcm1CdWZmZXIqKiBkZWNCdWZmZXIsIERybUJ1ZmZlciogSVYpOwogCiAgICAgdmlydHVhbCBzdGF0dXNfdCBmaW5hbGl6ZURlY3J5cHRVbml0KAotICAgICAgICAgICAgaW50IHVuaXF1ZUlkLCBEZWNyeXB0SGFuZGxlKiBkZWNyeXB0SGFuZGxlLCBpbnQgZGVjcnlwdFVuaXRJZCk7CisgICAgICAgICAgICBpbnQgdW5pcXVlSWQsIHNwPERlY3J5cHRIYW5kbGU+JiBkZWNyeXB0SGFuZGxlLCBpbnQgZGVjcnlwdFVuaXRJZCk7CiAKLSAgICB2aXJ0dWFsIHNzaXplX3QgcHJlYWQoaW50IHVuaXF1ZUlkLCBEZWNyeXB0SGFuZGxlKiBkZWNyeXB0SGFuZGxlLAorICAgIHZpcnR1YWwgc3NpemVfdCBwcmVhZChpbnQgdW5pcXVlSWQsIHNwPERlY3J5cHRIYW5kbGU+JiBkZWNyeXB0SGFuZGxlLAogICAgICAgICAgICAgdm9pZCogYnVmZmVyLCBzc2l6ZV90IG51bUJ5dGVzLCBvZmY2NF90IG9mZnNldCk7CiB9OwogCmRpZmYgLS1naXQgYS9kcm0vZHJtc2VydmVyL0RybU1hbmFnZXIuY3BwIGIvZHJtL2RybXNlcnZlci9Ecm1NYW5hZ2VyLmNwcAppbmRleCBiZjA0YTg5Li5hZmJjYjM5IDEwMDY0NAotLS0gYS9kcm0vZHJtc2VydmVyL0RybU1hbmFnZXIuY3BwCisrKyBiL2RybS9kcm1zZXJ2ZXIvRHJtTWFuYWdlci5jcHAKQEAgLTI2Nyw3ICsyNjcsNyBAQAogfQogCiBzdGF0dXNfdCBEcm1NYW5hZ2VyOjpjb25zdW1lUmlnaHRzKAotICAgIGludCB1bmlxdWVJZCwgRGVjcnlwdEhhbmRsZSogZGVjcnlwdEhhbmRsZSwgaW50IGFjdGlvbiwgYm9vbCByZXNlcnZlKSB7CisgICAgaW50IHVuaXF1ZUlkLCBzcDxEZWNyeXB0SGFuZGxlPiYgZGVjcnlwdEhhbmRsZSwgaW50IGFjdGlvbiwgYm9vbCByZXNlcnZlKSB7CiAgICAgc3RhdHVzX3QgcmVzdWx0ID0gRFJNX0VSUk9SX1VOS05PV047CiAgICAgTXV0ZXg6OkF1dG9sb2NrIF9sKG1EZWNyeXB0TG9jayk7CiAgICAgaWYgKG1EZWNyeXB0U2Vzc2lvbk1hcC5pbmRleE9mS2V5KGRlY3J5cHRIYW5kbGUtPmRlY3J5cHRJZCkgIT0gTkFNRV9OT1RfRk9VTkQpIHsKQEAgLTI3OCw3ICsyNzgsNyBAQAogfQogCiBzdGF0dXNfdCBEcm1NYW5hZ2VyOjpzZXRQbGF5YmFja1N0YXR1cygKLSAgICBpbnQgdW5pcXVlSWQsIERlY3J5cHRIYW5kbGUqIGRlY3J5cHRIYW5kbGUsIGludCBwbGF5YmFja1N0YXR1cywgaW50NjRfdCBwb3NpdGlvbikgeworICAgIGludCB1bmlxdWVJZCwgc3A8RGVjcnlwdEhhbmRsZT4mIGRlY3J5cHRIYW5kbGUsIGludCBwbGF5YmFja1N0YXR1cywgaW50NjRfdCBwb3NpdGlvbikgewogICAgIHN0YXR1c190IHJlc3VsdCA9IERSTV9FUlJPUl9VTktOT1dOOwogICAgIE11dGV4OjpBdXRvbG9jayBfbChtRGVjcnlwdExvY2spOwogICAgIGlmIChtRGVjcnlwdFNlc3Npb25NYXAuaW5kZXhPZktleShkZWNyeXB0SGFuZGxlLT5kZWNyeXB0SWQpICE9IE5BTUVfTk9UX0ZPVU5EKSB7CkBAIC0zOTYsMTUgKzM5NiwxNSBAQAogICAgIHJldHVybiBEUk1fTk9fRVJST1I7CiB9CiAKLURlY3J5cHRIYW5kbGUqIERybU1hbmFnZXI6Om9wZW5EZWNyeXB0U2Vzc2lvbigKK3NwPERlY3J5cHRIYW5kbGU+IERybU1hbmFnZXI6Om9wZW5EZWNyeXB0U2Vzc2lvbigKICAgICAgICAgaW50IHVuaXF1ZUlkLCBpbnQgZmQsIG9mZjY0X3Qgb2Zmc2V0LCBvZmY2NF90IGxlbmd0aCwgY29uc3QgY2hhciogbWltZSkgewogCiAgICAgTXV0ZXg6OkF1dG9sb2NrIF9sKG1EZWNyeXB0TG9jayk7CiAgICAgc3RhdHVzX3QgcmVzdWx0ID0gRFJNX0VSUk9SX0NBTk5PVF9IQU5ETEU7CiAgICAgVmVjdG9yPFN0cmluZzg+IHBsdWdJbklkTGlzdCA9IG1QbHVnSW5NYW5hZ2VyLmdldFBsdWdJbklkTGlzdCgpOwogCi0gICAgRGVjcnlwdEhhbmRsZSogaGFuZGxlID0gbmV3IERlY3J5cHRIYW5kbGUoKTsKLSAgICBpZiAoTlVMTCAhPSBoYW5kbGUpIHsKKyAgICBzcDxEZWNyeXB0SGFuZGxlPiBoYW5kbGUgPSBuZXcgRGVjcnlwdEhhbmRsZSgpOworICAgIGlmIChOVUxMICE9IGhhbmRsZS5nZXQoKSkgewogICAgICAgICBoYW5kbGUtPmRlY3J5cHRJZCA9IG1EZWNyeXB0U2Vzc2lvbklkICsgMTsKIAogICAgICAgICBmb3IgKHNpemVfdCBpbmRleCA9IDA7IGluZGV4IDwgcGx1Z0luSWRMaXN0LnNpemUoKTsgaW5kZXgrKykgewpAQCAtNDIwLDE5ICs0MjAsMTkgQEAKICAgICAgICAgfQogICAgIH0KICAgICBpZiAoRFJNX05PX0VSUk9SICE9IHJlc3VsdCkgewotICAgICAgICBkZWxldGUgaGFuZGxlOyBoYW5kbGUgPSBOVUxMOworICAgICAgICBoYW5kbGUuY2xlYXIoKTsKICAgICB9CiAgICAgcmV0dXJuIGhhbmRsZTsKIH0KIAotRGVjcnlwdEhhbmRsZSogRHJtTWFuYWdlcjo6b3BlbkRlY3J5cHRTZXNzaW9uKAorc3A8RGVjcnlwdEhhbmRsZT4gRHJtTWFuYWdlcjo6b3BlbkRlY3J5cHRTZXNzaW9uKAogICAgICAgICBpbnQgdW5pcXVlSWQsIGNvbnN0IGNoYXIqIHVyaSwgY29uc3QgY2hhciogbWltZSkgewogICAgIE11dGV4OjpBdXRvbG9jayBfbChtRGVjcnlwdExvY2spOwogICAgIHN0YXR1c190IHJlc3VsdCA9IERSTV9FUlJPUl9DQU5OT1RfSEFORExFOwogICAgIFZlY3RvcjxTdHJpbmc4PiBwbHVnSW5JZExpc3QgPSBtUGx1Z0luTWFuYWdlci5nZXRQbHVnSW5JZExpc3QoKTsKIAotICAgIERlY3J5cHRIYW5kbGUqIGhhbmRsZSA9IG5ldyBEZWNyeXB0SGFuZGxlKCk7Ci0gICAgaWYgKE5VTEwgIT0gaGFuZGxlKSB7CisgICAgc3A8RGVjcnlwdEhhbmRsZT4gaGFuZGxlID0gbmV3IERlY3J5cHRIYW5kbGUoKTsKKyAgICBpZiAoTlVMTCAhPSBoYW5kbGUuZ2V0KCkpIHsKICAgICAgICAgaGFuZGxlLT5kZWNyeXB0SWQgPSBtRGVjcnlwdFNlc3Npb25JZCArIDE7CiAKICAgICAgICAgZm9yIChzaXplX3QgaW5kZXggPSAwOyBpbmRleCA8IHBsdWdJbklkTGlzdC5zaXplKCk7IGluZGV4KyspIHsKQEAgLTQ0OCwyMCArNDQ4LDIwIEBACiAgICAgICAgIH0KICAgICB9CiAgICAgaWYgKERSTV9OT19FUlJPUiAhPSByZXN1bHQpIHsKLSAgICAgICAgZGVsZXRlIGhhbmRsZTsgaGFuZGxlID0gTlVMTDsKKyAgICAgICAgaGFuZGxlLmNsZWFyKCk7CiAgICAgICAgIEFMT0dWKCJEcm1NYW5hZ2VyOjpvcGVuRGVjcnlwdFNlc3Npb246IG5vIGNhcGFibGUgcGx1Zy1pbiBmb3VuZCIpOwogICAgIH0KICAgICByZXR1cm4gaGFuZGxlOwogfQogCi1EZWNyeXB0SGFuZGxlKiBEcm1NYW5hZ2VyOjpvcGVuRGVjcnlwdFNlc3Npb24oCitzcDxEZWNyeXB0SGFuZGxlPiBEcm1NYW5hZ2VyOjpvcGVuRGVjcnlwdFNlc3Npb24oCiAgICAgICAgIGludCB1bmlxdWVJZCwgY29uc3QgRHJtQnVmZmVyJiBidWYsIGNvbnN0IFN0cmluZzgmIG1pbWVUeXBlKSB7CiAgICAgTXV0ZXg6OkF1dG9sb2NrIF9sKG1EZWNyeXB0TG9jayk7CiAgICAgc3RhdHVzX3QgcmVzdWx0ID0gRFJNX0VSUk9SX0NBTk5PVF9IQU5ETEU7CiAgICAgVmVjdG9yPFN0cmluZzg+IHBsdWdJbklkTGlzdCA9IG1QbHVnSW5NYW5hZ2VyLmdldFBsdWdJbklkTGlzdCgpOwogCi0gICAgRGVjcnlwdEhhbmRsZSogaGFuZGxlID0gbmV3IERlY3J5cHRIYW5kbGUoKTsKLSAgICBpZiAoTlVMTCAhPSBoYW5kbGUpIHsKKyAgICBzcDxEZWNyeXB0SGFuZGxlPiBoYW5kbGUgPSBuZXcgRGVjcnlwdEhhbmRsZSgpOworICAgIGlmIChOVUxMICE9IGhhbmRsZS5nZXQoKSkgewogICAgICAgICBoYW5kbGUtPmRlY3J5cHRJZCA9IG1EZWNyeXB0U2Vzc2lvbklkICsgMTsKIAogICAgICAgICBmb3IgKHNpemVfdCBpbmRleCA9IDA7IGluZGV4IDwgcGx1Z0luSWRMaXN0LnNpemUoKTsgaW5kZXgrKykgewpAQCAtNDc3LDIwICs0NzcsMTkgQEAKICAgICAgICAgfQogICAgIH0KICAgICBpZiAoRFJNX05PX0VSUk9SICE9IHJlc3VsdCkgewotICAgICAgICBkZWxldGUgaGFuZGxlOwotICAgICAgICBoYW5kbGUgPSBOVUxMOworICAgICAgICBoYW5kbGUuY2xlYXIoKTsKICAgICAgICAgQUxPR1YoIkRybU1hbmFnZXI6Om9wZW5EZWNyeXB0U2Vzc2lvbjogbm8gY2FwYWJsZSBwbHVnLWluIGZvdW5kIik7CiAgICAgfQogICAgIHJldHVybiBoYW5kbGU7CiB9CiAKLXN0YXR1c190IERybU1hbmFnZXI6OmNsb3NlRGVjcnlwdFNlc3Npb24oaW50IHVuaXF1ZUlkLCBEZWNyeXB0SGFuZGxlKiBkZWNyeXB0SGFuZGxlKSB7CitzdGF0dXNfdCBEcm1NYW5hZ2VyOjpjbG9zZURlY3J5cHRTZXNzaW9uKGludCB1bmlxdWVJZCwgc3A8RGVjcnlwdEhhbmRsZT4mIGRlY3J5cHRIYW5kbGUpIHsKICAgICBNdXRleDo6QXV0b2xvY2sgX2wobURlY3J5cHRMb2NrKTsKICAgICBzdGF0dXNfdCByZXN1bHQgPSBEUk1fRVJST1JfVU5LTk9XTjsKICAgICBpZiAobURlY3J5cHRTZXNzaW9uTWFwLmluZGV4T2ZLZXkoZGVjcnlwdEhhbmRsZS0+ZGVjcnlwdElkKSAhPSBOQU1FX05PVF9GT1VORCkgewogICAgICAgICBJRHJtRW5naW5lKiBkcm1FbmdpbmUgPSBtRGVjcnlwdFNlc3Npb25NYXAudmFsdWVGb3IoZGVjcnlwdEhhbmRsZS0+ZGVjcnlwdElkKTsKICAgICAgICAgcmVzdWx0ID0gZHJtRW5naW5lLT5jbG9zZURlY3J5cHRTZXNzaW9uKHVuaXF1ZUlkLCBkZWNyeXB0SGFuZGxlKTsKLSAgICAgICAgaWYgKERSTV9OT19FUlJPUiA9PSByZXN1bHQpIHsKKyAgICAgICAgaWYgKERSTV9OT19FUlJPUiA9PSByZXN1bHQgJiYgTlVMTCAhPSBkZWNyeXB0SGFuZGxlLmdldCgpKSB7CiAgICAgICAgICAgICBtRGVjcnlwdFNlc3Npb25NYXAucmVtb3ZlSXRlbShkZWNyeXB0SGFuZGxlLT5kZWNyeXB0SWQpOwogICAgICAgICB9CiAgICAgfQpAQCAtNDk4LDcgKzQ5Nyw4IEBACiB9CiAKIHN0YXR1c190IERybU1hbmFnZXI6OmluaXRpYWxpemVEZWNyeXB0VW5pdCgKLSAgICBpbnQgdW5pcXVlSWQsIERlY3J5cHRIYW5kbGUqIGRlY3J5cHRIYW5kbGUsIGludCBkZWNyeXB0VW5pdElkLCBjb25zdCBEcm1CdWZmZXIqIGhlYWRlckluZm8pIHsKKyAgICAgICAgaW50IHVuaXF1ZUlkLCBzcDxEZWNyeXB0SGFuZGxlPiYgZGVjcnlwdEhhbmRsZSwgaW50IGRlY3J5cHRVbml0SWQsCisgICAgICAgIGNvbnN0IERybUJ1ZmZlciogaGVhZGVySW5mbykgewogICAgIHN0YXR1c190IHJlc3VsdCA9IERSTV9FUlJPUl9VTktOT1dOOwogICAgIE11dGV4OjpBdXRvbG9jayBfbChtRGVjcnlwdExvY2spOwogICAgIGlmIChtRGVjcnlwdFNlc3Npb25NYXAuaW5kZXhPZktleShkZWNyeXB0SGFuZGxlLT5kZWNyeXB0SWQpICE9IE5BTUVfTk9UX0ZPVU5EKSB7CkBAIC01MDgsNyArNTA4LDcgQEAKICAgICByZXR1cm4gcmVzdWx0OwogfQogCi1zdGF0dXNfdCBEcm1NYW5hZ2VyOjpkZWNyeXB0KGludCB1bmlxdWVJZCwgRGVjcnlwdEhhbmRsZSogZGVjcnlwdEhhbmRsZSwgaW50IGRlY3J5cHRVbml0SWQsCitzdGF0dXNfdCBEcm1NYW5hZ2VyOjpkZWNyeXB0KGludCB1bmlxdWVJZCwgc3A8RGVjcnlwdEhhbmRsZT4mIGRlY3J5cHRIYW5kbGUsIGludCBkZWNyeXB0VW5pdElkLAogICAgICAgICAgICAgY29uc3QgRHJtQnVmZmVyKiBlbmNCdWZmZXIsIERybUJ1ZmZlcioqIGRlY0J1ZmZlciwgRHJtQnVmZmVyKiBJVikgewogICAgIHN0YXR1c190IHJlc3VsdCA9IERSTV9FUlJPUl9VTktOT1dOOwogCkBAIC01MjIsNyArNTIyLDcgQEAKIH0KIAogc3RhdHVzX3QgRHJtTWFuYWdlcjo6ZmluYWxpemVEZWNyeXB0VW5pdCgKLSAgICAgICAgICAgIGludCB1bmlxdWVJZCwgRGVjcnlwdEhhbmRsZSogZGVjcnlwdEhhbmRsZSwgaW50IGRlY3J5cHRVbml0SWQpIHsKKyAgICAgICAgICAgIGludCB1bmlxdWVJZCwgc3A8RGVjcnlwdEhhbmRsZT4mIGRlY3J5cHRIYW5kbGUsIGludCBkZWNyeXB0VW5pdElkKSB7CiAgICAgc3RhdHVzX3QgcmVzdWx0ID0gRFJNX0VSUk9SX1VOS05PV047CiAgICAgTXV0ZXg6OkF1dG9sb2NrIF9sKG1EZWNyeXB0TG9jayk7CiAgICAgaWYgKG1EZWNyeXB0U2Vzc2lvbk1hcC5pbmRleE9mS2V5KGRlY3J5cHRIYW5kbGUtPmRlY3J5cHRJZCkgIT0gTkFNRV9OT1RfRk9VTkQpIHsKQEAgLTUzMiw3ICs1MzIsNyBAQAogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKLXNzaXplX3QgRHJtTWFuYWdlcjo6cHJlYWQoaW50IHVuaXF1ZUlkLCBEZWNyeXB0SGFuZGxlKiBkZWNyeXB0SGFuZGxlLAorc3NpemVfdCBEcm1NYW5hZ2VyOjpwcmVhZChpbnQgdW5pcXVlSWQsIHNwPERlY3J5cHRIYW5kbGU+JiBkZWNyeXB0SGFuZGxlLAogICAgICAgICAgICAgdm9pZCogYnVmZmVyLCBzc2l6ZV90IG51bUJ5dGVzLCBvZmY2NF90IG9mZnNldCkgewogICAgIHNzaXplX3QgcmVzdWx0ID0gREVDUllQVF9GSUxFX0VSUk9SOwogCmRpZmYgLS1naXQgYS9kcm0vZHJtc2VydmVyL0RybU1hbmFnZXIuaCBiL2RybS9kcm1zZXJ2ZXIvRHJtTWFuYWdlci5oCmluZGV4IGU3Y2RkMzYuLjI2MjIyYmMgMTAwNjQ0Ci0tLSBhL2RybS9kcm1zZXJ2ZXIvRHJtTWFuYWdlci5oCisrKyBiL2RybS9kcm1zZXJ2ZXIvRHJtTWFuYWdlci5oCkBAIC04OSwxMCArODksMTEgQEAKIAogICAgIGludCBjaGVja1JpZ2h0c1N0YXR1cyhpbnQgdW5pcXVlSWQsIGNvbnN0IFN0cmluZzgmIHBhdGgsIGludCBhY3Rpb24pOwogCi0gICAgc3RhdHVzX3QgY29uc3VtZVJpZ2h0cyhpbnQgdW5pcXVlSWQsIERlY3J5cHRIYW5kbGUqIGRlY3J5cHRIYW5kbGUsIGludCBhY3Rpb24sIGJvb2wgcmVzZXJ2ZSk7CisgICAgc3RhdHVzX3QgY29uc3VtZVJpZ2h0cyhpbnQgdW5pcXVlSWQsIHNwPERlY3J5cHRIYW5kbGU+JiBkZWNyeXB0SGFuZGxlLCBpbnQgYWN0aW9uLAorICAgICAgICAgICAgYm9vbCByZXNlcnZlKTsKIAogICAgIHN0YXR1c190IHNldFBsYXliYWNrU3RhdHVzKAotICAgICAgICAgICAgaW50IHVuaXF1ZUlkLCBEZWNyeXB0SGFuZGxlKiBkZWNyeXB0SGFuZGxlLCBpbnQgcGxheWJhY2tTdGF0dXMsIGludDY0X3QgcG9zaXRpb24pOworICAgICAgICAgICAgaW50IHVuaXF1ZUlkLCBzcDxEZWNyeXB0SGFuZGxlPiYgZGVjcnlwdEhhbmRsZSwgaW50IHBsYXliYWNrU3RhdHVzLCBpbnQ2NF90IHBvc2l0aW9uKTsKIAogICAgIGJvb2wgdmFsaWRhdGVBY3Rpb24oCiAgICAgICAgICAgICBpbnQgdW5pcXVlSWQsIGNvbnN0IFN0cmluZzgmIHBhdGgsIGludCBhY3Rpb24sIGNvbnN0IEFjdGlvbkRlc2NyaXB0aW9uJiBkZXNjcmlwdGlvbik7CkBAIC0xMDksMjUgKzExMCwyNiBAQAogCiAgICAgc3RhdHVzX3QgZ2V0QWxsU3VwcG9ydEluZm8oaW50IHVuaXF1ZUlkLCBpbnQqIGxlbmd0aCwgRHJtU3VwcG9ydEluZm8qKiBkcm1TdXBwb3J0SW5mb0FycmF5KTsKIAotICAgIERlY3J5cHRIYW5kbGUqIG9wZW5EZWNyeXB0U2Vzc2lvbigKKyAgICBzcDxEZWNyeXB0SGFuZGxlPiBvcGVuRGVjcnlwdFNlc3Npb24oCiAgICAgICAgICAgICBpbnQgdW5pcXVlSWQsIGludCBmZCwgb2ZmNjRfdCBvZmZzZXQsIG9mZjY0X3QgbGVuZ3RoLCBjb25zdCBjaGFyKiBtaW1lKTsKIAotICAgIERlY3J5cHRIYW5kbGUqIG9wZW5EZWNyeXB0U2Vzc2lvbihpbnQgdW5pcXVlSWQsIGNvbnN0IGNoYXIqIHVyaSwgY29uc3QgY2hhciogbWltZSk7CisgICAgc3A8RGVjcnlwdEhhbmRsZT4gb3BlbkRlY3J5cHRTZXNzaW9uKGludCB1bmlxdWVJZCwgY29uc3QgY2hhciogdXJpLCBjb25zdCBjaGFyKiBtaW1lKTsKIAotICAgIERlY3J5cHRIYW5kbGUqIG9wZW5EZWNyeXB0U2Vzc2lvbihpbnQgdW5pcXVlSWQsIGNvbnN0IERybUJ1ZmZlciYgYnVmLAorICAgIHNwPERlY3J5cHRIYW5kbGU+IG9wZW5EZWNyeXB0U2Vzc2lvbihpbnQgdW5pcXVlSWQsIGNvbnN0IERybUJ1ZmZlciYgYnVmLAogICAgICAgICAgICAgY29uc3QgU3RyaW5nOCYgbWltZVR5cGUpOwogCi0gICAgc3RhdHVzX3QgY2xvc2VEZWNyeXB0U2Vzc2lvbihpbnQgdW5pcXVlSWQsIERlY3J5cHRIYW5kbGUqIGRlY3J5cHRIYW5kbGUpOworICAgIHN0YXR1c190IGNsb3NlRGVjcnlwdFNlc3Npb24oaW50IHVuaXF1ZUlkLCBzcDxEZWNyeXB0SGFuZGxlPiYgZGVjcnlwdEhhbmRsZSk7CiAKLSAgICBzdGF0dXNfdCBpbml0aWFsaXplRGVjcnlwdFVuaXQoaW50IHVuaXF1ZUlkLCBEZWNyeXB0SGFuZGxlKiBkZWNyeXB0SGFuZGxlLAorICAgIHN0YXR1c190IGluaXRpYWxpemVEZWNyeXB0VW5pdChpbnQgdW5pcXVlSWQsIHNwPERlY3J5cHRIYW5kbGU+JiBkZWNyeXB0SGFuZGxlLAogICAgICAgICAgICAgaW50IGRlY3J5cHRVbml0SWQsIGNvbnN0IERybUJ1ZmZlciogaGVhZGVySW5mbyk7CiAKLSAgICBzdGF0dXNfdCBkZWNyeXB0KGludCB1bmlxdWVJZCwgRGVjcnlwdEhhbmRsZSogZGVjcnlwdEhhbmRsZSwgaW50IGRlY3J5cHRVbml0SWQsCisgICAgc3RhdHVzX3QgZGVjcnlwdChpbnQgdW5pcXVlSWQsIHNwPERlY3J5cHRIYW5kbGU+JiBkZWNyeXB0SGFuZGxlLCBpbnQgZGVjcnlwdFVuaXRJZCwKICAgICAgICAgICAgIGNvbnN0IERybUJ1ZmZlciogZW5jQnVmZmVyLCBEcm1CdWZmZXIqKiBkZWNCdWZmZXIsIERybUJ1ZmZlciogSVYpOwogCi0gICAgc3RhdHVzX3QgZmluYWxpemVEZWNyeXB0VW5pdChpbnQgdW5pcXVlSWQsIERlY3J5cHRIYW5kbGUqIGRlY3J5cHRIYW5kbGUsIGludCBkZWNyeXB0VW5pdElkKTsKKyAgICBzdGF0dXNfdCBmaW5hbGl6ZURlY3J5cHRVbml0KGludCB1bmlxdWVJZCwgc3A8RGVjcnlwdEhhbmRsZT4mIGRlY3J5cHRIYW5kbGUsCisgICAgICAgICAgICBpbnQgZGVjcnlwdFVuaXRJZCk7CiAKLSAgICBzc2l6ZV90IHByZWFkKGludCB1bmlxdWVJZCwgRGVjcnlwdEhhbmRsZSogZGVjcnlwdEhhbmRsZSwKKyAgICBzc2l6ZV90IHByZWFkKGludCB1bmlxdWVJZCwgc3A8RGVjcnlwdEhhbmRsZT4mIGRlY3J5cHRIYW5kbGUsCiAgICAgICAgICAgICB2b2lkKiBidWZmZXIsIHNzaXplX3QgbnVtQnl0ZXMsIG9mZjY0X3Qgb2Zmc2V0KTsKIAogICAgIHZvaWQgb25JbmZvKGNvbnN0IERybUluZm9FdmVudCYgZXZlbnQpOwpkaWZmIC0tZ2l0IGEvZHJtL2RybXNlcnZlci9Ecm1NYW5hZ2VyU2VydmljZS5jcHAgYi9kcm0vZHJtc2VydmVyL0RybU1hbmFnZXJTZXJ2aWNlLmNwcAppbmRleCBkYWQ1OTliLi4yNTMyMjc1IDEwMDY0NAotLS0gYS9kcm0vZHJtc2VydmVyL0RybU1hbmFnZXJTZXJ2aWNlLmNwcAorKysgYi9kcm0vZHJtc2VydmVyL0RybU1hbmFnZXJTZXJ2aWNlLmNwcApAQCAtMjA2LDcgKzIwNiw3IEBACiB9CiAKIHN0YXR1c190IERybU1hbmFnZXJTZXJ2aWNlOjpjb25zdW1lUmlnaHRzKAotICAgICAgICAgICAgaW50IHVuaXF1ZUlkLCBEZWNyeXB0SGFuZGxlKiBkZWNyeXB0SGFuZGxlLCBpbnQgYWN0aW9uLCBib29sIHJlc2VydmUpIHsKKyAgICAgICAgICAgIGludCB1bmlxdWVJZCwgc3A8RGVjcnlwdEhhbmRsZT4mIGRlY3J5cHRIYW5kbGUsIGludCBhY3Rpb24sIGJvb2wgcmVzZXJ2ZSkgewogICAgIEFMT0dWKCJFbnRlcmluZyBjb25zdW1lUmlnaHRzIik7CiAgICAgaWYgKCFpc1Byb3RlY3RlZENhbGxBbGxvd2VkKENPTlNVTUVfUklHSFRTKSkgewogICAgICAgICByZXR1cm4gRFJNX0VSUk9SX05PX1BFUk1JU1NJT047CkBAIC0yMTUsNyArMjE1LDcgQEAKIH0KIAogc3RhdHVzX3QgRHJtTWFuYWdlclNlcnZpY2U6OnNldFBsYXliYWNrU3RhdHVzKAotICAgICAgICAgICAgaW50IHVuaXF1ZUlkLCBEZWNyeXB0SGFuZGxlKiBkZWNyeXB0SGFuZGxlLCBpbnQgcGxheWJhY2tTdGF0dXMsIGludDY0X3QgcG9zaXRpb24pIHsKKyAgICAgICAgICAgIGludCB1bmlxdWVJZCwgc3A8RGVjcnlwdEhhbmRsZT4mIGRlY3J5cHRIYW5kbGUsIGludCBwbGF5YmFja1N0YXR1cywgaW50NjRfdCBwb3NpdGlvbikgewogICAgIEFMT0dWKCJFbnRlcmluZyBzZXRQbGF5YmFja1N0YXR1cyIpOwogICAgIGlmICghaXNQcm90ZWN0ZWRDYWxsQWxsb3dlZChTRVRfUExBWUJBQ0tfU1RBVFVTKSkgewogICAgICAgICByZXR1cm4gRFJNX0VSUk9SX05PX1BFUk1JU1NJT047CkBAIC0yNjIsNyArMjYyLDcgQEAKICAgICByZXR1cm4gbURybU1hbmFnZXItPmdldEFsbFN1cHBvcnRJbmZvKHVuaXF1ZUlkLCBsZW5ndGgsIGRybVN1cHBvcnRJbmZvQXJyYXkpOwogfQogCi1EZWNyeXB0SGFuZGxlKiBEcm1NYW5hZ2VyU2VydmljZTo6b3BlbkRlY3J5cHRTZXNzaW9uKAorc3A8RGVjcnlwdEhhbmRsZT4gRHJtTWFuYWdlclNlcnZpY2U6Om9wZW5EZWNyeXB0U2Vzc2lvbigKICAgICAgICAgICAgIGludCB1bmlxdWVJZCwgaW50IGZkLCBvZmY2NF90IG9mZnNldCwgb2ZmNjRfdCBsZW5ndGgsIGNvbnN0IGNoYXIqIG1pbWUpIHsKICAgICBBTE9HVigiRW50ZXJpbmcgRHJtTWFuYWdlclNlcnZpY2U6Om9wZW5EZWNyeXB0U2Vzc2lvbiIpOwogICAgIGlmIChpc1Byb3RlY3RlZENhbGxBbGxvd2VkKE9QRU5fREVDUllQVF9TRVNTSU9OKSkgewpAQCAtMjcyLDcgKzI3Miw3IEBACiAgICAgcmV0dXJuIE5VTEw7CiB9CiAKLURlY3J5cHRIYW5kbGUqIERybU1hbmFnZXJTZXJ2aWNlOjpvcGVuRGVjcnlwdFNlc3Npb24oCitzcDxEZWNyeXB0SGFuZGxlPiBEcm1NYW5hZ2VyU2VydmljZTo6b3BlbkRlY3J5cHRTZXNzaW9uKAogICAgICAgICAgICAgaW50IHVuaXF1ZUlkLCBjb25zdCBjaGFyKiB1cmksIGNvbnN0IGNoYXIqIG1pbWUpIHsKICAgICBBTE9HVigiRW50ZXJpbmcgRHJtTWFuYWdlclNlcnZpY2U6Om9wZW5EZWNyeXB0U2Vzc2lvbiB3aXRoIHVyaSIpOwogICAgIGlmIChpc1Byb3RlY3RlZENhbGxBbGxvd2VkKE9QRU5fREVDUllQVF9TRVNTSU9OKSkgewpAQCAtMjgyLDcgKzI4Miw3IEBACiAgICAgcmV0dXJuIE5VTEw7CiB9CiAKLURlY3J5cHRIYW5kbGUqIERybU1hbmFnZXJTZXJ2aWNlOjpvcGVuRGVjcnlwdFNlc3Npb24oCitzcDxEZWNyeXB0SGFuZGxlPiBEcm1NYW5hZ2VyU2VydmljZTo6b3BlbkRlY3J5cHRTZXNzaW9uKAogICAgICAgICAgICAgaW50IHVuaXF1ZUlkLCBjb25zdCBEcm1CdWZmZXImIGJ1ZiwgY29uc3QgU3RyaW5nOCYgbWltZVR5cGUpIHsKICAgICBBTE9HVigiRW50ZXJpbmcgRHJtTWFuYWdlclNlcnZpY2U6Om9wZW5EZWNyeXB0U2Vzc2lvbiBmb3Igc3RyZWFtaW5nIik7CiAgICAgaWYgKGlzUHJvdGVjdGVkQ2FsbEFsbG93ZWQoT1BFTl9ERUNSWVBUX1NFU1NJT04pKSB7CkBAIC0yOTIsNyArMjkyLDcgQEAKICAgICByZXR1cm4gTlVMTDsKIH0KIAotc3RhdHVzX3QgRHJtTWFuYWdlclNlcnZpY2U6OmNsb3NlRGVjcnlwdFNlc3Npb24oaW50IHVuaXF1ZUlkLCBEZWNyeXB0SGFuZGxlKiBkZWNyeXB0SGFuZGxlKSB7CitzdGF0dXNfdCBEcm1NYW5hZ2VyU2VydmljZTo6Y2xvc2VEZWNyeXB0U2Vzc2lvbihpbnQgdW5pcXVlSWQsIHNwPERlY3J5cHRIYW5kbGU+JiBkZWNyeXB0SGFuZGxlKSB7CiAgICAgQUxPR1YoIkVudGVyaW5nIGNsb3NlRGVjcnlwdFNlc3Npb24iKTsKICAgICBpZiAoIWlzUHJvdGVjdGVkQ2FsbEFsbG93ZWQoQ0xPU0VfREVDUllQVF9TRVNTSU9OKSkgewogICAgICAgICByZXR1cm4gRFJNX0VSUk9SX05PX1BFUk1JU1NJT047CkBAIC0zMDAsNyArMzAwLDcgQEAKICAgICByZXR1cm4gbURybU1hbmFnZXItPmNsb3NlRGVjcnlwdFNlc3Npb24odW5pcXVlSWQsIGRlY3J5cHRIYW5kbGUpOwogfQogCi1zdGF0dXNfdCBEcm1NYW5hZ2VyU2VydmljZTo6aW5pdGlhbGl6ZURlY3J5cHRVbml0KGludCB1bmlxdWVJZCwgRGVjcnlwdEhhbmRsZSogZGVjcnlwdEhhbmRsZSwKK3N0YXR1c190IERybU1hbmFnZXJTZXJ2aWNlOjppbml0aWFsaXplRGVjcnlwdFVuaXQoaW50IHVuaXF1ZUlkLCBzcDxEZWNyeXB0SGFuZGxlPiYgZGVjcnlwdEhhbmRsZSwKICAgICAgICAgICAgIGludCBkZWNyeXB0VW5pdElkLCBjb25zdCBEcm1CdWZmZXIqIGhlYWRlckluZm8pIHsKICAgICBBTE9HVigiRW50ZXJpbmcgaW5pdGlhbGl6ZURlY3J5cHRVbml0Iik7CiAgICAgaWYgKCFpc1Byb3RlY3RlZENhbGxBbGxvd2VkKElOSVRJQUxJWkVfREVDUllQVF9VTklUKSkgewpAQCAtMzEwLDcgKzMxMCw3IEBACiB9CiAKIHN0YXR1c190IERybU1hbmFnZXJTZXJ2aWNlOjpkZWNyeXB0KAotICAgICAgICAgICAgaW50IHVuaXF1ZUlkLCBEZWNyeXB0SGFuZGxlKiBkZWNyeXB0SGFuZGxlLCBpbnQgZGVjcnlwdFVuaXRJZCwKKyAgICAgICAgICAgIGludCB1bmlxdWVJZCwgc3A8RGVjcnlwdEhhbmRsZT4mIGRlY3J5cHRIYW5kbGUsIGludCBkZWNyeXB0VW5pdElkLAogICAgICAgICAgICAgY29uc3QgRHJtQnVmZmVyKiBlbmNCdWZmZXIsIERybUJ1ZmZlcioqIGRlY0J1ZmZlciwgRHJtQnVmZmVyKiBJVikgewogICAgIEFMT0dWKCJFbnRlcmluZyBkZWNyeXB0Iik7CiAgICAgaWYgKCFpc1Byb3RlY3RlZENhbGxBbGxvd2VkKERFQ1JZUFQpKSB7CkBAIC0zMjAsNyArMzIwLDcgQEAKIH0KIAogc3RhdHVzX3QgRHJtTWFuYWdlclNlcnZpY2U6OmZpbmFsaXplRGVjcnlwdFVuaXQoCi0gICAgICAgICAgICBpbnQgdW5pcXVlSWQsIERlY3J5cHRIYW5kbGUqIGRlY3J5cHRIYW5kbGUsIGludCBkZWNyeXB0VW5pdElkKSB7CisgICAgICAgICAgICBpbnQgdW5pcXVlSWQsIHNwPERlY3J5cHRIYW5kbGU+JiBkZWNyeXB0SGFuZGxlLCBpbnQgZGVjcnlwdFVuaXRJZCkgewogICAgIEFMT0dWKCJFbnRlcmluZyBmaW5hbGl6ZURlY3J5cHRVbml0Iik7CiAgICAgaWYgKCFpc1Byb3RlY3RlZENhbGxBbGxvd2VkKEZJTkFMSVpFX0RFQ1JZUFRfVU5JVCkpIHsKICAgICAgICAgcmV0dXJuIERSTV9FUlJPUl9OT19QRVJNSVNTSU9OOwpAQCAtMzI4LDcgKzMyOCw3IEBACiAgICAgcmV0dXJuIG1Ecm1NYW5hZ2VyLT5maW5hbGl6ZURlY3J5cHRVbml0KHVuaXF1ZUlkLCBkZWNyeXB0SGFuZGxlLCBkZWNyeXB0VW5pdElkKTsKIH0KIAotc3NpemVfdCBEcm1NYW5hZ2VyU2VydmljZTo6cHJlYWQoaW50IHVuaXF1ZUlkLCBEZWNyeXB0SGFuZGxlKiBkZWNyeXB0SGFuZGxlLAorc3NpemVfdCBEcm1NYW5hZ2VyU2VydmljZTo6cHJlYWQoaW50IHVuaXF1ZUlkLCBzcDxEZWNyeXB0SGFuZGxlPiYgZGVjcnlwdEhhbmRsZSwKICAgICAgICAgICAgIHZvaWQqIGJ1ZmZlciwgc3NpemVfdCBudW1CeXRlcywgb2ZmNjRfdCBvZmZzZXQpIHsKICAgICBBTE9HVigiRW50ZXJpbmcgcHJlYWQiKTsKICAgICBpZiAoIWlzUHJvdGVjdGVkQ2FsbEFsbG93ZWQoUFJFQUQpKSB7CmRpZmYgLS1naXQgYS9kcm0vZHJtc2VydmVyL0RybU1hbmFnZXJTZXJ2aWNlLmggYi9kcm0vZHJtc2VydmVyL0RybU1hbmFnZXJTZXJ2aWNlLmgKaW5kZXggNDVjZWUyZS4uN2FhZWFiNSAxMDA2NDQKLS0tIGEvZHJtL2RybXNlcnZlci9Ecm1NYW5hZ2VyU2VydmljZS5oCisrKyBiL2RybS9kcm1zZXJ2ZXIvRHJtTWFuYWdlclNlcnZpY2UuaApAQCAtOTUsMTAgKzk1LDExIEBACiAKICAgICBpbnQgY2hlY2tSaWdodHNTdGF0dXMoaW50IHVuaXF1ZUlkLCBjb25zdCBTdHJpbmc4JiBwYXRoLGludCBhY3Rpb24pOwogCi0gICAgc3RhdHVzX3QgY29uc3VtZVJpZ2h0cyhpbnQgdW5pcXVlSWQsIERlY3J5cHRIYW5kbGUqIGRlY3J5cHRIYW5kbGUsIGludCBhY3Rpb24sIGJvb2wgcmVzZXJ2ZSk7CisgICAgc3RhdHVzX3QgY29uc3VtZVJpZ2h0cyhpbnQgdW5pcXVlSWQsIHNwPERlY3J5cHRIYW5kbGU+JiBkZWNyeXB0SGFuZGxlLCBpbnQgYWN0aW9uLAorICAgICAgICAgICAgYm9vbCByZXNlcnZlKTsKIAogICAgIHN0YXR1c190IHNldFBsYXliYWNrU3RhdHVzKAotICAgICAgICAgICAgaW50IHVuaXF1ZUlkLCBEZWNyeXB0SGFuZGxlKiBkZWNyeXB0SGFuZGxlLCBpbnQgcGxheWJhY2tTdGF0dXMsIGludDY0X3QgcG9zaXRpb24pOworICAgICAgICAgICAgaW50IHVuaXF1ZUlkLCBzcDxEZWNyeXB0SGFuZGxlPiYgZGVjcnlwdEhhbmRsZSwgaW50IHBsYXliYWNrU3RhdHVzLCBpbnQ2NF90IHBvc2l0aW9uKTsKIAogICAgIGJvb2wgdmFsaWRhdGVBY3Rpb24oaW50IHVuaXF1ZUlkLCBjb25zdCBTdHJpbmc4JiBwYXRoLAogICAgICAgICAgICAgaW50IGFjdGlvbiwgY29uc3QgQWN0aW9uRGVzY3JpcHRpb24mIGRlc2NyaXB0aW9uKTsKQEAgLTExNSwyNiArMTE2LDI3IEBACiAKICAgICBzdGF0dXNfdCBnZXRBbGxTdXBwb3J0SW5mbyhpbnQgdW5pcXVlSWQsIGludCogbGVuZ3RoLCBEcm1TdXBwb3J0SW5mbyoqIGRybVN1cHBvcnRJbmZvQXJyYXkpOwogCi0gICAgRGVjcnlwdEhhbmRsZSogb3BlbkRlY3J5cHRTZXNzaW9uKAorICAgIHNwPERlY3J5cHRIYW5kbGU+IG9wZW5EZWNyeXB0U2Vzc2lvbigKICAgICAgICAgaW50IHVuaXF1ZUlkLCBpbnQgZmQsIG9mZjY0X3Qgb2Zmc2V0LCBvZmY2NF90IGxlbmd0aCwgY29uc3QgY2hhciAqbWltZSk7CiAKLSAgICBEZWNyeXB0SGFuZGxlKiBvcGVuRGVjcnlwdFNlc3Npb24oCisgICAgc3A8RGVjcnlwdEhhbmRsZT4gb3BlbkRlY3J5cHRTZXNzaW9uKAogICAgICAgICBpbnQgdW5pcXVlSWQsIGNvbnN0IGNoYXIqIHVyaSwgY29uc3QgY2hhciogbWltZSk7CiAKLSAgICBEZWNyeXB0SGFuZGxlKiBvcGVuRGVjcnlwdFNlc3Npb24oaW50IHVuaXF1ZUlkLCBjb25zdCBEcm1CdWZmZXImIGJ1ZiwKKyAgICBzcDxEZWNyeXB0SGFuZGxlPiBvcGVuRGVjcnlwdFNlc3Npb24oaW50IHVuaXF1ZUlkLCBjb25zdCBEcm1CdWZmZXImIGJ1ZiwKICAgICAgICAgICAgIGNvbnN0IFN0cmluZzgmIG1pbWVUeXBlKTsKIAotICAgIHN0YXR1c190IGNsb3NlRGVjcnlwdFNlc3Npb24oaW50IHVuaXF1ZUlkLCBEZWNyeXB0SGFuZGxlKiBkZWNyeXB0SGFuZGxlKTsKKyAgICBzdGF0dXNfdCBjbG9zZURlY3J5cHRTZXNzaW9uKGludCB1bmlxdWVJZCwgc3A8RGVjcnlwdEhhbmRsZT4mIGRlY3J5cHRIYW5kbGUpOwogCi0gICAgc3RhdHVzX3QgaW5pdGlhbGl6ZURlY3J5cHRVbml0KGludCB1bmlxdWVJZCwgRGVjcnlwdEhhbmRsZSogZGVjcnlwdEhhbmRsZSwKKyAgICBzdGF0dXNfdCBpbml0aWFsaXplRGVjcnlwdFVuaXQoaW50IHVuaXF1ZUlkLCBzcDxEZWNyeXB0SGFuZGxlPiYgZGVjcnlwdEhhbmRsZSwKICAgICAgICAgICAgIGludCBkZWNyeXB0VW5pdElkLCBjb25zdCBEcm1CdWZmZXIqIGhlYWRlckluZm8pOwogCi0gICAgc3RhdHVzX3QgZGVjcnlwdChpbnQgdW5pcXVlSWQsIERlY3J5cHRIYW5kbGUqIGRlY3J5cHRIYW5kbGUsIGludCBkZWNyeXB0VW5pdElkLAorICAgIHN0YXR1c190IGRlY3J5cHQoaW50IHVuaXF1ZUlkLCBzcDxEZWNyeXB0SGFuZGxlPiYgZGVjcnlwdEhhbmRsZSwgaW50IGRlY3J5cHRVbml0SWQsCiAgICAgICAgICAgICBjb25zdCBEcm1CdWZmZXIqIGVuY0J1ZmZlciwgRHJtQnVmZmVyKiogZGVjQnVmZmVyLCBEcm1CdWZmZXIqIElWKTsKIAotICAgIHN0YXR1c190IGZpbmFsaXplRGVjcnlwdFVuaXQoaW50IHVuaXF1ZUlkLCBEZWNyeXB0SGFuZGxlKiBkZWNyeXB0SGFuZGxlLCBpbnQgZGVjcnlwdFVuaXRJZCk7CisgICAgc3RhdHVzX3QgZmluYWxpemVEZWNyeXB0VW5pdChpbnQgdW5pcXVlSWQsIHNwPERlY3J5cHRIYW5kbGU+JiBkZWNyeXB0SGFuZGxlLAorICAgICAgICAgICAgaW50IGRlY3J5cHRVbml0SWQpOwogCi0gICAgc3NpemVfdCBwcmVhZChpbnQgdW5pcXVlSWQsIERlY3J5cHRIYW5kbGUqIGRlY3J5cHRIYW5kbGUsCisgICAgc3NpemVfdCBwcmVhZChpbnQgdW5pcXVlSWQsIHNwPERlY3J5cHRIYW5kbGU+JiBkZWNyeXB0SGFuZGxlLAogICAgICAgICAgICAgdm9pZCogYnVmZmVyLCBzc2l6ZV90IG51bUJ5dGVzLCBvZmY2NF90IG9mZnNldCk7CiAKICAgICB2aXJ0dWFsIHN0YXR1c190IGR1bXAoaW50IGZkLCBjb25zdCBWZWN0b3I8U3RyaW5nMTY+JiBhcmdzKTsKZGlmZiAtLWdpdCBhL2RybS9saWJkcm1mcmFtZXdvcmsvRHJtTWFuYWdlckNsaWVudEltcGwuY3BwIGIvZHJtL2xpYmRybWZyYW1ld29yay9Ecm1NYW5hZ2VyQ2xpZW50SW1wbC5jcHAKaW5kZXggYzA0N2ViMS4uYjBhNDQxYiAxMDA2NDQKLS0tIGEvZHJtL2xpYmRybWZyYW1ld29yay9Ecm1NYW5hZ2VyQ2xpZW50SW1wbC5jcHAKKysrIGIvZHJtL2xpYmRybWZyYW1ld29yay9Ecm1NYW5hZ2VyQ2xpZW50SW1wbC5jcHAKQEAgLTE4Myw3ICsxODMsNyBAQAogICAgIHN0YXR1c190IHN0YXR1cyA9IERSTV9FUlJPUl9VTktOT1dOOwogICAgIGlmIChOVUxMICE9IGRlY3J5cHRIYW5kbGUuZ2V0KCkpIHsKICAgICAgICAgc3RhdHVzID0gZ2V0RHJtTWFuYWdlclNlcnZpY2UoKS0+Y29uc3VtZVJpZ2h0cygKLSAgICAgICAgICAgICAgICB1bmlxdWVJZCwgZGVjcnlwdEhhbmRsZS5nZXQoKSwgYWN0aW9uLCByZXNlcnZlKTsKKyAgICAgICAgICAgICAgICB1bmlxdWVJZCwgZGVjcnlwdEhhbmRsZSwgYWN0aW9uLCByZXNlcnZlKTsKICAgICB9CiAgICAgcmV0dXJuIHN0YXR1czsKIH0KQEAgLTE5NCw3ICsxOTQsNyBAQAogICAgIHN0YXR1c190IHN0YXR1cyA9IERSTV9FUlJPUl9VTktOT1dOOwogICAgIGlmIChOVUxMICE9IGRlY3J5cHRIYW5kbGUuZ2V0KCkpIHsKICAgICAgICAgc3RhdHVzID0gZ2V0RHJtTWFuYWdlclNlcnZpY2UoKS0+c2V0UGxheWJhY2tTdGF0dXMoCi0gICAgICAgICAgICAgICAgdW5pcXVlSWQsIGRlY3J5cHRIYW5kbGUuZ2V0KCksIHBsYXliYWNrU3RhdHVzLCBwb3NpdGlvbik7CisgICAgICAgICAgICAgICAgdW5pcXVlSWQsIGRlY3J5cHRIYW5kbGUsIHBsYXliYWNrU3RhdHVzLCBwb3NpdGlvbik7CiAgICAgfQogICAgIHJldHVybiBzdGF0dXM7CiB9CkBAIC0yNjcsNyArMjY3LDcgQEAKIHNwPERlY3J5cHRIYW5kbGU+IERybU1hbmFnZXJDbGllbnRJbXBsOjpvcGVuRGVjcnlwdFNlc3Npb24oCiAgICAgICAgIGludCB1bmlxdWVJZCwgY29uc3QgY2hhciogdXJpLCBjb25zdCBjaGFyKiBtaW1lKSB7CiAKLSAgICBEZWNyeXB0SGFuZGxlKiBoYW5kbGUgPSBOVUxMOworICAgIHNwPERlY3J5cHRIYW5kbGU+IGhhbmRsZTsKICAgICBpZiAoTlVMTCAhPSB1cmkpIHsKICAgICAgICAgaGFuZGxlID0gZ2V0RHJtTWFuYWdlclNlcnZpY2UoKS0+b3BlbkRlY3J5cHRTZXNzaW9uKHVuaXF1ZUlkLCB1cmksIG1pbWUpOwogICAgIH0KQEAgLTI4NCw3ICsyODQsNyBAQAogICAgIHN0YXR1c190IHN0YXR1cyA9IERSTV9FUlJPUl9VTktOT1dOOwogICAgIGlmIChOVUxMICE9IGRlY3J5cHRIYW5kbGUuZ2V0KCkpIHsKICAgICAgICAgc3RhdHVzID0gZ2V0RHJtTWFuYWdlclNlcnZpY2UoKS0+Y2xvc2VEZWNyeXB0U2Vzc2lvbigKLSAgICAgICAgICAgICAgICB1bmlxdWVJZCwgZGVjcnlwdEhhbmRsZS5nZXQoKSk7CisgICAgICAgICAgICAgICAgdW5pcXVlSWQsIGRlY3J5cHRIYW5kbGUpOwogICAgIH0KICAgICByZXR1cm4gc3RhdHVzOwogfQpAQCAtMjk1LDcgKzI5NSw3IEBACiAgICAgc3RhdHVzX3Qgc3RhdHVzID0gRFJNX0VSUk9SX1VOS05PV047CiAgICAgaWYgKChOVUxMICE9IGRlY3J5cHRIYW5kbGUuZ2V0KCkpICYmIChOVUxMICE9IGhlYWRlckluZm8pKSB7CiAgICAgICAgIHN0YXR1cyA9IGdldERybU1hbmFnZXJTZXJ2aWNlKCktPmluaXRpYWxpemVEZWNyeXB0VW5pdCgKLSAgICAgICAgICAgICAgICB1bmlxdWVJZCwgZGVjcnlwdEhhbmRsZS5nZXQoKSwgZGVjcnlwdFVuaXRJZCwgaGVhZGVySW5mbyk7CisgICAgICAgICAgICAgICAgdW5pcXVlSWQsIGRlY3J5cHRIYW5kbGUsIGRlY3J5cHRVbml0SWQsIGhlYWRlckluZm8pOwogICAgIH0KICAgICByZXR1cm4gc3RhdHVzOwogfQpAQCAtMzA4LDcgKzMwOCw3IEBACiAgICAgaWYgKChOVUxMICE9IGRlY3J5cHRIYW5kbGUuZ2V0KCkpICYmIChOVUxMICE9IGVuY0J1ZmZlcikKICAgICAgICAgJiYgKE5VTEwgIT0gZGVjQnVmZmVyKSAmJiAoTlVMTCAhPSAqZGVjQnVmZmVyKSkgewogICAgICAgICBzdGF0dXMgPSBnZXREcm1NYW5hZ2VyU2VydmljZSgpLT5kZWNyeXB0KAotICAgICAgICAgICAgICAgIHVuaXF1ZUlkLCBkZWNyeXB0SGFuZGxlLmdldCgpLCBkZWNyeXB0VW5pdElkLAorICAgICAgICAgICAgICAgIHVuaXF1ZUlkLCBkZWNyeXB0SGFuZGxlLCBkZWNyeXB0VW5pdElkLAogICAgICAgICAgICAgICAgIGVuY0J1ZmZlciwgZGVjQnVmZmVyLCBJVik7CiAgICAgfQogICAgIHJldHVybiBzdGF0dXM7CkBAIC0zMTksNyArMzE5LDcgQEAKICAgICBzdGF0dXNfdCBzdGF0dXMgPSBEUk1fRVJST1JfVU5LTk9XTjsKICAgICBpZiAoTlVMTCAhPSBkZWNyeXB0SGFuZGxlLmdldCgpKSB7CiAgICAgICAgIHN0YXR1cyA9IGdldERybU1hbmFnZXJTZXJ2aWNlKCktPmZpbmFsaXplRGVjcnlwdFVuaXQoCi0gICAgICAgICAgICAgICAgICAgIHVuaXF1ZUlkLCBkZWNyeXB0SGFuZGxlLmdldCgpLCBkZWNyeXB0VW5pdElkKTsKKyAgICAgICAgICAgICAgICAgICAgdW5pcXVlSWQsIGRlY3J5cHRIYW5kbGUsIGRlY3J5cHRVbml0SWQpOwogICAgIH0KICAgICByZXR1cm4gc3RhdHVzOwogfQpAQCAtMzI5LDcgKzMyOSw3IEBACiAgICAgc3NpemVfdCByZXRDb2RlID0gSU5WQUxJRF9WQUxVRTsKICAgICBpZiAoKE5VTEwgIT0gZGVjcnlwdEhhbmRsZS5nZXQoKSkgJiYgKE5VTEwgIT0gYnVmZmVyKSAmJiAoMCA8IG51bUJ5dGVzKSkgewogICAgICAgICByZXRDb2RlID0gZ2V0RHJtTWFuYWdlclNlcnZpY2UoKS0+cHJlYWQoCi0gICAgICAgICAgICAgICAgdW5pcXVlSWQsIGRlY3J5cHRIYW5kbGUuZ2V0KCksIGJ1ZmZlciwgbnVtQnl0ZXMsIG9mZnNldCk7CisgICAgICAgICAgICAgICAgdW5pcXVlSWQsIGRlY3J5cHRIYW5kbGUsIGJ1ZmZlciwgbnVtQnl0ZXMsIG9mZnNldCk7CiAgICAgfQogICAgIHJldHVybiByZXRDb2RlOwogfQpkaWZmIC0tZ2l0IGEvZHJtL2xpYmRybWZyYW1ld29yay9wbHVnaW5zL2ZvcndhcmQtbG9jay9Gd2RMb2NrRW5naW5lL2luY2x1ZGUvRndkTG9ja0VuZ2luZS5oIGIvZHJtL2xpYmRybWZyYW1ld29yay9wbHVnaW5zL2ZvcndhcmQtbG9jay9Gd2RMb2NrRW5naW5lL2luY2x1ZGUvRndkTG9ja0VuZ2luZS5oCmluZGV4IGE1NzFiM2EuLmI2MmRkYjkgMTAwNjQ0Ci0tLSBhL2RybS9saWJkcm1mcmFtZXdvcmsvcGx1Z2lucy9mb3J3YXJkLWxvY2svRndkTG9ja0VuZ2luZS9pbmNsdWRlL0Z3ZExvY2tFbmdpbmUuaAorKysgYi9kcm0vbGliZHJtZnJhbWV3b3JrL3BsdWdpbnMvZm9yd2FyZC1sb2NrL0Z3ZExvY2tFbmdpbmUvaW5jbHVkZS9Gd2RMb2NrRW5naW5lLmgKQEAgLTE5OCw3ICsxOTgsNyBAQAogICogICAgIFJldHVybnMgRFJNX05PX0VSUk9SIGZvciBzdWNjZXNzLCBEUk1fRVJST1JfVU5LTk9XTiBmb3IgZmFpbHVyZQogICovCiBzdGF0dXNfdCBvbkNvbnN1bWVSaWdodHMoaW50IHVuaXF1ZUlkLAotICAgICAgICAgICAgICAgICAgICAgICAgIERlY3J5cHRIYW5kbGUqIGRlY3J5cHRIYW5kbGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgc3A8RGVjcnlwdEhhbmRsZT4mIGRlY3J5cHRIYW5kbGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGFjdGlvbiwKICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIHJlc2VydmUpOwogCkBAIC0yMTUsMTIgKzIxNSwxMiBAQAogICovCiAjaWZkZWYgVVNFXzY0QklUX0RSTV9BUEkKIHN0YXR1c190IG9uU2V0UGxheWJhY2tTdGF0dXMoaW50IHVuaXF1ZUlkLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEZWNyeXB0SGFuZGxlKiBkZWNyeXB0SGFuZGxlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcDxEZWNyeXB0SGFuZGxlPiYgZGVjcnlwdEhhbmRsZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHBsYXliYWNrU3RhdHVzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQ2NF90IHBvc2l0aW9uKTsKICNlbHNlCiBzdGF0dXNfdCBvblNldFBsYXliYWNrU3RhdHVzKGludCB1bmlxdWVJZCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRGVjcnlwdEhhbmRsZSogZGVjcnlwdEhhbmRsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3A8RGVjcnlwdEhhbmRsZT4mIGRlY3J5cHRIYW5kbGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBwbGF5YmFja1N0YXR1cywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHBvc2l0aW9uKTsKICNlbmRpZgpAQCAtMzMwLDExICszMzAsMTEgQEAKICAqLwogI2lmZGVmIFVTRV82NEJJVF9EUk1fQVBJCiBzdGF0dXNfdCBvbk9wZW5EZWNyeXB0U2Vzc2lvbihpbnQgdW5pcXVlSWQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEZWNyeXB0SGFuZGxlKiBkZWNyeXB0SGFuZGxlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3A8RGVjcnlwdEhhbmRsZT4mIGRlY3J5cHRIYW5kbGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgZmQsIG9mZjY0X3Qgb2Zmc2V0LCBvZmY2NF90IGxlbmd0aCk7CiAjZWxzZQogc3RhdHVzX3Qgb25PcGVuRGVjcnlwdFNlc3Npb24oaW50IHVuaXF1ZUlkLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRGVjcnlwdEhhbmRsZSogZGVjcnlwdEhhbmRsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNwPERlY3J5cHRIYW5kbGU+JiBkZWNyeXB0SGFuZGxlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGZkLCBpbnQgb2Zmc2V0LCBpbnQgbGVuZ3RoKTsKICNlbmRpZgogCkBAIC0zNDgsNyArMzQ4LDcgQEAKICAqICAgICBEUk1fRVJST1JfQ0FOTk9UX0hBTkRMRSBmb3IgZmFpbHVyZSBhbmQgRFJNX05PX0VSUk9SIGZvciBzdWNjZXNzCiAgKi8KIHN0YXR1c190IG9uT3BlbkRlY3J5cHRTZXNzaW9uKGludCB1bmlxdWVJZCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERlY3J5cHRIYW5kbGUqIGRlY3J5cHRIYW5kbGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcDxEZWNyeXB0SGFuZGxlPiYgZGVjcnlwdEhhbmRsZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIqIHVyaSk7CiAKIC8qKgpAQCAtMzYwLDcgKzM2MCw3IEBACiAgKiAgICAgUmV0dXJucyBEUk1fTk9fRVJST1IgZm9yIHN1Y2Nlc3MsIERSTV9FUlJPUl9VTktOT1dOIGZvciBmYWlsdXJlCiAgKi8KIHN0YXR1c190IG9uQ2xvc2VEZWNyeXB0U2Vzc2lvbihpbnQgdW5pcXVlSWQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRGVjcnlwdEhhbmRsZSogZGVjcnlwdEhhbmRsZSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3A8RGVjcnlwdEhhbmRsZT4mIGRlY3J5cHRIYW5kbGUpOwogCiAvKioKICAqIEluaXRpYWxpemUgZGVjcnlwdGlvbiBmb3IgdGhlIGdpdmVuIHVuaXQgb2YgdGhlIHByb3RlY3RlZCBjb250ZW50LgpAQCAtMzczLDcgKzM3Myw3IEBACiAgKiAgICAgRFJNX0VSUk9SX0NBTk5PVF9IQU5ETEUgZm9yIGZhaWx1cmUgYW5kIERSTV9OT19FUlJPUiBmb3Igc3VjY2VzcwogICovCiBzdGF0dXNfdCBvbkluaXRpYWxpemVEZWNyeXB0VW5pdChpbnQgdW5pcXVlSWQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEZWNyeXB0SGFuZGxlKiBkZWNyeXB0SGFuZGxlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3A8RGVjcnlwdEhhbmRsZT4mIGRlY3J5cHRIYW5kbGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgZGVjcnlwdFVuaXRJZCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IERybUJ1ZmZlciogaGVhZGVySW5mbyk7CiAKQEAgLTM5NCw3ICszOTQsNyBAQAogICogICAgIERSTV9FUlJPUl9ERUNSWVBUIGZvciBmYWlsdXJlLgogICovCiBzdGF0dXNfdCBvbkRlY3J5cHQoaW50IHVuaXF1ZUlkLAotICAgICAgICAgICAgICAgICAgIERlY3J5cHRIYW5kbGUqIGRlY3J5cHRIYW5kbGUsCisgICAgICAgICAgICAgICAgICAgc3A8RGVjcnlwdEhhbmRsZT4mIGRlY3J5cHRIYW5kbGUsCiAgICAgICAgICAgICAgICAgICAgaW50IGRlY3J5cHRVbml0SWQsCiAgICAgICAgICAgICAgICAgICAgY29uc3QgRHJtQnVmZmVyKiBlbmNCdWZmZXIsCiAgICAgICAgICAgICAgICAgICAgRHJtQnVmZmVyKiogZGVjQnVmZmVyKTsKQEAgLTQxNiw3ICs0MTYsNyBAQAogICogICAgIERSTV9FUlJPUl9TRVNTSU9OX05PVF9PUEVORUQsIERSTV9FUlJPUl9ERUNSWVBUX1VOSVRfTk9UX0lOSVRJQUxJWkVELAogICogICAgIERSTV9FUlJPUl9ERUNSWVBUIGZvciBmYWlsdXJlLgogICovCi1zdGF0dXNfdCBvbkRlY3J5cHQoaW50IHVuaXF1ZUlkLCBEZWNyeXB0SGFuZGxlKiBkZWNyeXB0SGFuZGxlLAorc3RhdHVzX3Qgb25EZWNyeXB0KGludCB1bmlxdWVJZCwgc3A8RGVjcnlwdEhhbmRsZT4mIGRlY3J5cHRIYW5kbGUsCiAgICAgICAgICAgICAgICAgICAgaW50IGRlY3J5cHRVbml0SWQsIGNvbnN0IERybUJ1ZmZlciogZW5jQnVmZmVyLAogICAgICAgICAgICAgICAgICAgIERybUJ1ZmZlcioqIGRlY0J1ZmZlciwgRHJtQnVmZmVyKiBJVik7CiAKQEAgLTQzMCw3ICs0MzAsNyBAQAogICogICAgIERSTV9FUlJPUl9DQU5OT1RfSEFORExFIGZvciBmYWlsdXJlIGFuZCBEUk1fTk9fRVJST1IgZm9yIHN1Y2Nlc3MKICAqLwogc3RhdHVzX3Qgb25GaW5hbGl6ZURlY3J5cHRVbml0KGludCB1bmlxdWVJZCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEZWNyeXB0SGFuZGxlKiBkZWNyeXB0SGFuZGxlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNwPERlY3J5cHRIYW5kbGU+JiBkZWNyeXB0SGFuZGxlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBkZWNyeXB0VW5pdElkKTsKIAogLyoqCkBAIC00NDUsNyArNDQ1LDcgQEAKICAqIEByZXR2YWwgLTEgRmFpbHVyZS4KICAqLwogc3NpemVfdCBvblJlYWQoaW50IHVuaXF1ZUlkLAotICAgICAgICAgICAgICAgRGVjcnlwdEhhbmRsZSogZGVjcnlwdEhhbmRsZSwKKyAgICAgICAgICAgICAgIHNwPERlY3J5cHRIYW5kbGU+JiBkZWNyeXB0SGFuZGxlLAogICAgICAgICAgICAgICAgdm9pZCogcEJ1ZmZlciwKICAgICAgICAgICAgICAgIGludCBudW1CeXRlcyk7CiAKQEAgLTQ2MywxMiArNDYzLDEyIEBACiAgKi8KICNpZmRlZiBVU0VfNjRCSVRfRFJNX0FQSQogb2ZmNjRfdCBvbkxzZWVrKGludCB1bmlxdWVJZCwKLSAgICAgICAgICAgICAgICBEZWNyeXB0SGFuZGxlKiBkZWNyeXB0SGFuZGxlLAorICAgICAgICAgICAgICAgIHNwPERlY3J5cHRIYW5kbGU+JiBkZWNyeXB0SGFuZGxlLAogICAgICAgICAgICAgICAgIG9mZjY0X3Qgb2Zmc2V0LAogICAgICAgICAgICAgICAgIGludCB3aGVuY2UpOwogI2Vsc2UKIG9mZl90IG9uTHNlZWsoaW50IHVuaXF1ZUlkLAotICAgICAgICAgICAgICBEZWNyeXB0SGFuZGxlKiBkZWNyeXB0SGFuZGxlLAorICAgICAgICAgICAgICBzcDxEZWNyeXB0SGFuZGxlPiYgZGVjcnlwdEhhbmRsZSwKICAgICAgICAgICAgICAgb2ZmX3Qgb2Zmc2V0LAogICAgICAgICAgICAgICBpbnQgd2hlbmNlKTsKICNlbmRpZgpAQCAtNDg2LDEzICs0ODYsMTMgQEAKICAqLwogI2lmZGVmIFVTRV82NEJJVF9EUk1fQVBJCiBzc2l6ZV90IG9uUHJlYWQoaW50IHVuaXF1ZUlkLAotICAgICAgICAgICAgICAgIERlY3J5cHRIYW5kbGUqIGRlY3J5cHRIYW5kbGUsCisgICAgICAgICAgICAgICAgc3A8RGVjcnlwdEhhbmRsZT4mIGRlY3J5cHRIYW5kbGUsCiAgICAgICAgICAgICAgICAgdm9pZCogYnVmZmVyLAogICAgICAgICAgICAgICAgIHNzaXplX3QgbnVtQnl0ZXMsCiAgICAgICAgICAgICAgICAgb2ZmNjRfdCBvZmZzZXQpOwogI2Vsc2UKIHNzaXplX3Qgb25QcmVhZChpbnQgdW5pcXVlSWQsCi0gICAgICAgICAgICAgICAgRGVjcnlwdEhhbmRsZSogZGVjcnlwdEhhbmRsZSwKKyAgICAgICAgICAgICAgICBzcDxEZWNyeXB0SGFuZGxlPiYgZGVjcnlwdEhhbmRsZSwKICAgICAgICAgICAgICAgICB2b2lkKiBidWZmZXIsCiAgICAgICAgICAgICAgICAgc3NpemVfdCBudW1CeXRlcywKICAgICAgICAgICAgICAgICBvZmZfdCBvZmZzZXQpOwpkaWZmIC0tZ2l0IGEvZHJtL2xpYmRybWZyYW1ld29yay9wbHVnaW5zL2ZvcndhcmQtbG9jay9Gd2RMb2NrRW5naW5lL3NyYy9Gd2RMb2NrRW5naW5lLmNwcCBiL2RybS9saWJkcm1mcmFtZXdvcmsvcGx1Z2lucy9mb3J3YXJkLWxvY2svRndkTG9ja0VuZ2luZS9zcmMvRndkTG9ja0VuZ2luZS5jcHAKaW5kZXggNzNlZWE4OS4uNzY5ZGUwYyAxMDA2NDQKLS0tIGEvZHJtL2xpYmRybWZyYW1ld29yay9wbHVnaW5zL2ZvcndhcmQtbG9jay9Gd2RMb2NrRW5naW5lL3NyYy9Gd2RMb2NrRW5naW5lLmNwcAorKysgYi9kcm0vbGliZHJtZnJhbWV3b3JrL3BsdWdpbnMvZm9yd2FyZC1sb2NrL0Z3ZExvY2tFbmdpbmUvc3JjL0Z3ZExvY2tFbmdpbmUuY3BwCkBAIC0yOTQsNyArMjk0LDcgQEAKIH0KIAogc3RhdHVzX3QgRndkTG9ja0VuZ2luZTo6b25Db25zdW1lUmlnaHRzKGludCAvKiB1bmlxdWVJZCAqLywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEZWNyeXB0SGFuZGxlKiAvKiBkZWNyeXB0SGFuZGxlICovLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNwPERlY3J5cHRIYW5kbGU+JiAvKiBkZWNyeXB0SGFuZGxlICovLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCAvKiBhY3Rpb24gKi8sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCAvKiByZXNlcnZlICovKSB7CiAgICAgLy8gTm8gcmlnaHRzIGNvbnN1bXB0aW9uCkBAIC0zNzIsMTEgKzM3MiwxMyBAQAogfQogCiAjaWZkZWYgVVNFXzY0QklUX0RSTV9BUEkKLXN0YXR1c190IEZ3ZExvY2tFbmdpbmU6Om9uU2V0UGxheWJhY2tTdGF0dXMoaW50IC8qIHVuaXF1ZUlkICovLCBEZWNyeXB0SGFuZGxlKiAvKiBkZWNyeXB0SGFuZGxlICovLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgLyogcGxheWJhY2tTdGF0dXMgKi8sIGludDY0X3QgLyogcG9zaXRpb24gKi8pIHsKK3N0YXR1c190IEZ3ZExvY2tFbmdpbmU6Om9uU2V0UGxheWJhY2tTdGF0dXMoaW50IC8qIHVuaXF1ZUlkICovLAorICAgICAgICBzcDxEZWNyeXB0SGFuZGxlPiYgLyogZGVjcnlwdEhhbmRsZSAqLywgaW50IC8qIHBsYXliYWNrU3RhdHVzICovLAorICAgICAgICBpbnQ2NF90IC8qIHBvc2l0aW9uICovKSB7CiAjZWxzZQotc3RhdHVzX3QgRndkTG9ja0VuZ2luZTo6b25TZXRQbGF5YmFja1N0YXR1cyhpbnQgLyogdW5pcXVlSWQgKi8sIERlY3J5cHRIYW5kbGUqIC8qIGRlY3J5cHRIYW5kbGUgKi8sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCAvKiBwbGF5YmFja1N0YXR1cyAqLywgaW50IC8qIHBvc2l0aW9uICovKSB7CitzdGF0dXNfdCBGd2RMb2NrRW5naW5lOjpvblNldFBsYXliYWNrU3RhdHVzKGludCAvKiB1bmlxdWVJZCAqLywKKyAgICAgICAgc3A8RGVjcnlwdEhhbmRsZT4mIC8qIGRlY3J5cHRIYW5kbGUgKi8sCisgICAgICAgIGludCAvKiBwbGF5YmFja1N0YXR1cyAqLywgaW50IC8qIHBvc2l0aW9uICovKSB7CiAjZW5kaWYKICAgICAvLyBOb3QgdXNlZAogICAgIExPR19WRVJCT1NFKCJGd2RMb2NrRW5naW5lOjpvblNldFBsYXliYWNrU3RhdHVzIik7CkBAIC00NzAsMTMgKzQ3MiwxMyBAQAogCiAjaWZkZWYgVVNFXzY0QklUX0RSTV9BUEkKIHN0YXR1c190IEZ3ZExvY2tFbmdpbmU6Om9uT3BlbkRlY3J5cHRTZXNzaW9uKGludCAvKiB1bmlxdWVJZCAqLywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERlY3J5cHRIYW5kbGUqIGRlY3J5cHRIYW5kbGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcDxEZWNyeXB0SGFuZGxlPiYgZGVjcnlwdEhhbmRsZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBmZCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9mZjY0X3Qgb2Zmc2V0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2ZmNjRfdCAvKiBsZW5ndGggKi8pIHsKICNlbHNlCiBzdGF0dXNfdCBGd2RMb2NrRW5naW5lOjpvbk9wZW5EZWNyeXB0U2Vzc2lvbihpbnQgLyogdW5pcXVlSWQgKi8sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEZWNyeXB0SGFuZGxlKiBkZWNyeXB0SGFuZGxlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3A8RGVjcnlwdEhhbmRsZT4mIGRlY3J5cHRIYW5kbGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgZmQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgb2Zmc2V0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IC8qIGxlbmd0aCAqLykgewpAQCAtNDg3LDcgKzQ4OSw3IEBACiAgICAgTE9HX1ZFUkJPU0UoIkZ3ZExvY2tFbmdpbmU6Om9uT3BlbkRlY3J5cHRTZXNzaW9uIik7CiAKICAgICBpZiAoKC0xIDwgZmQpICYmCi0gICAgICAgIChOVUxMICE9IGRlY3J5cHRIYW5kbGUpICYmCisgICAgICAgIChOVUxMICE9IGRlY3J5cHRIYW5kbGUuZ2V0KCkpICYmCiAgICAgICAgICghZGVjb2RlU2Vzc2lvbk1hcC5pc0NyZWF0ZWQoZGVjcnlwdEhhbmRsZS0+ZGVjcnlwdElkKSkpIHsKICAgICAgICAgZmlsZURlc2MgPSBkdXAoZmQpOwogICAgIH0gZWxzZSB7CkBAIC01MzMsMTIgKzUzNSwxMiBAQAogfQogCiBzdGF0dXNfdCBGd2RMb2NrRW5naW5lOjpvbk9wZW5EZWNyeXB0U2Vzc2lvbihpbnQgdW5pcXVlSWQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEZWNyeXB0SGFuZGxlKiBkZWNyeXB0SGFuZGxlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3A8RGVjcnlwdEhhbmRsZT4mIGRlY3J5cHRIYW5kbGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyKiB1cmkpIHsKICAgICBzdGF0dXNfdCByZXN1bHQgPSBEUk1fRVJST1JfQ0FOTk9UX0hBTkRMRTsKICAgICBjb25zdCBjaGFyIGZpbGVUYWcgW10gPSAiZmlsZTovLyI7CiAKLSAgICBpZiAoTlVMTCAhPSBkZWNyeXB0SGFuZGxlICYmIE5VTEwgIT0gdXJpICYmIHN0cmxlbih1cmkpID4gc2l6ZW9mKGZpbGVUYWcpKSB7CisgICAgaWYgKE5VTEwgIT0gZGVjcnlwdEhhbmRsZS5nZXQoKSAmJiBOVUxMICE9IHVyaSAmJiBzdHJsZW4odXJpKSA+IHNpemVvZihmaWxlVGFnKSkgewogICAgICAgICBTdHJpbmc4IHVyaVRhZyA9IFN0cmluZzgodXJpKTsKICAgICAgICAgdXJpVGFnLnRvTG93ZXIoKTsKIApAQCAtNTYyLDExICs1NjQsMTEgQEAKIH0KIAogc3RhdHVzX3QgRndkTG9ja0VuZ2luZTo6b25DbG9zZURlY3J5cHRTZXNzaW9uKGludCAvKiB1bmlxdWVJZCAqLywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEZWNyeXB0SGFuZGxlKiBkZWNyeXB0SGFuZGxlKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3A8RGVjcnlwdEhhbmRsZT4mIGRlY3J5cHRIYW5kbGUpIHsKICAgICBzdGF0dXNfdCByZXN1bHQgPSBEUk1fRVJST1JfVU5LTk9XTjsKICAgICBMT0dfVkVSQk9TRSgiRndkTG9ja0VuZ2luZTo6b25DbG9zZURlY3J5cHRTZXNzaW9uIik7CiAKLSAgICBpZiAoTlVMTCAhPSBkZWNyeXB0SGFuZGxlICYmIGRlY29kZVNlc3Npb25NYXAuaXNDcmVhdGVkKGRlY3J5cHRIYW5kbGUtPmRlY3J5cHRJZCkpIHsKKyAgICBpZiAoTlVMTCAhPSBkZWNyeXB0SGFuZGxlLmdldCgpICYmIGRlY29kZVNlc3Npb25NYXAuaXNDcmVhdGVkKGRlY3J5cHRIYW5kbGUtPmRlY3J5cHRJZCkpIHsKICAgICAgICAgRGVjb2RlU2Vzc2lvbiogc2Vzc2lvbiA9IGRlY29kZVNlc3Npb25NYXAuZ2V0VmFsdWUoZGVjcnlwdEhhbmRsZS0+ZGVjcnlwdElkKTsKICAgICAgICAgaWYgKE5VTEwgIT0gc2Vzc2lvbiAmJiBzZXNzaW9uLT5maWxlRGVzYyA+IC0xKSB7CiAgICAgICAgICAgICBGd2RMb2NrRmlsZV9kZXRhY2goc2Vzc2lvbi0+ZmlsZURlc2MpOwpAQCAtNTc2LDcgKzU3OCw3IEBACiAgICAgICAgIH0KICAgICB9CiAKLSAgICBpZiAoTlVMTCAhPSBkZWNyeXB0SGFuZGxlKSB7CisgICAgaWYgKE5VTEwgIT0gZGVjcnlwdEhhbmRsZS5nZXQoKSkgewogICAgICAgICBpZiAoTlVMTCAhPSBkZWNyeXB0SGFuZGxlLT5kZWNyeXB0SW5mbykgewogICAgICAgICAgICAgZGVsZXRlIGRlY3J5cHRIYW5kbGUtPmRlY3J5cHRJbmZvOwogICAgICAgICAgICAgZGVjcnlwdEhhbmRsZS0+ZGVjcnlwdEluZm8gPSBOVUxMOwpAQCAtNTg0LDkgKzU4Niw3IEBACiAKICAgICAgICAgZGVjcnlwdEhhbmRsZS0+Y29weUNvbnRyb2xWZWN0b3IuY2xlYXIoKTsKICAgICAgICAgZGVjcnlwdEhhbmRsZS0+ZXh0ZW5kZWREYXRhLmNsZWFyKCk7Ci0KLSAgICAgICAgZGVsZXRlIGRlY3J5cHRIYW5kbGU7Ci0gICAgICAgIGRlY3J5cHRIYW5kbGUgPSBOVUxMOworICAgICAgICBkZWNyeXB0SGFuZGxlLmNsZWFyKCk7CiAgICAgfQogCiAgICAgTE9HX1ZFUkJPU0UoIkZ3ZExvY2tFbmdpbmU6Om9uQ2xvc2VEZWNyeXB0U2Vzc2lvbiBFeGl0Iik7CkBAIC01OTQsNyArNTk0LDcgQEAKIH0KIAogc3RhdHVzX3QgRndkTG9ja0VuZ2luZTo6b25Jbml0aWFsaXplRGVjcnlwdFVuaXQoaW50IC8qIHVuaXF1ZUlkICovLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRGVjcnlwdEhhbmRsZSogLyogZGVjcnlwdEhhbmRsZSAqLywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNwPERlY3J5cHRIYW5kbGU+JiAvKiBkZWNyeXB0SGFuZGxlICovLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IC8qIGRlY3J5cHRVbml0SWQgKi8sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBEcm1CdWZmZXIqIC8qIGhlYWRlckluZm8gKi8pIHsKICAgICBBTE9HRSgiRndkTG9ja0VuZ2luZTo6b25Jbml0aWFsaXplRGVjcnlwdFVuaXQgaXMgbm90IHN1cHBvcnRlZCBmb3IgdGhpcyBEUk0gc2NoZW1lIik7CkBAIC02MDMsNyArNjAzLDcgQEAKIAogc3RhdHVzX3QgRndkTG9ja0VuZ2luZTo6b25EZWNyeXB0KAogICAgICAgICAgICAgaW50IC8qIHVuaXF1ZUlkICovLAotICAgICAgICAgICAgRGVjcnlwdEhhbmRsZSogLyogZGVjcnlwdEhhbmRsZSAqLywKKyAgICAgICAgICAgIHNwPERlY3J5cHRIYW5kbGU+JiAvKiBkZWNyeXB0SGFuZGxlICovLAogICAgICAgICAgICAgaW50IC8qIGRlY3J5cHRVbml0SWQgKi8sCiAgICAgICAgICAgICBjb25zdCBEcm1CdWZmZXIqIC8qIGVuY0J1ZmZlciAqLywKICAgICAgICAgICAgIERybUJ1ZmZlcioqIC8qIGRlY0J1ZmZlciAqLywKQEAgLTYxMyw3ICs2MTMsNyBAQAogfQogCiBzdGF0dXNfdCBGd2RMb2NrRW5naW5lOjpvbkRlY3J5cHQoaW50IC8qIHVuaXF1ZUlkICovLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERlY3J5cHRIYW5kbGUqIC8qIGRlY3J5cHRIYW5kbGUgKi8sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3A8RGVjcnlwdEhhbmRsZT4mIC8qIGRlY3J5cHRIYW5kbGUgKi8sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IC8qIGRlY3J5cHRVbml0SWQgKi8sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgRHJtQnVmZmVyKiAvKiBlbmNCdWZmZXIgKi8sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRHJtQnVmZmVyKiogLyogZGVjQnVmZmVyICovKSB7CkBAIC02MjIsMTkgKzYyMiwxOSBAQAogfQogCiBzdGF0dXNfdCBGd2RMb2NrRW5naW5lOjpvbkZpbmFsaXplRGVjcnlwdFVuaXQoaW50IC8qIHVuaXF1ZUlkICovLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERlY3J5cHRIYW5kbGUqIC8qIGRlY3J5cHRIYW5kbGUgKi8sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3A8RGVjcnlwdEhhbmRsZT4mIC8qIGRlY3J5cHRIYW5kbGUgKi8sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IC8qIGRlY3J5cHRVbml0SWQgKi8pIHsKICAgICBBTE9HRSgiRndkTG9ja0VuZ2luZTo6b25GaW5hbGl6ZURlY3J5cHRVbml0IGlzIG5vdCBzdXBwb3J0ZWQgZm9yIHRoaXMgRFJNIHNjaGVtZSIpOwogICAgIHJldHVybiBEUk1fRVJST1JfVU5LTk9XTjsKIH0KIAogc3NpemVfdCBGd2RMb2NrRW5naW5lOjpvblJlYWQoaW50IC8qIHVuaXF1ZUlkICovLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRGVjcnlwdEhhbmRsZSogZGVjcnlwdEhhbmRsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNwPERlY3J5cHRIYW5kbGU+JiBkZWNyeXB0SGFuZGxlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCogYnVmZmVyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IG51bUJ5dGVzKSB7CiAgICAgc3NpemVfdCBzaXplID0gLTE7CiAKLSAgICBpZiAoTlVMTCAhPSBkZWNyeXB0SGFuZGxlICYmCisgICAgaWYgKE5VTEwgIT0gZGVjcnlwdEhhbmRsZS5nZXQoKSAmJgogICAgICAgICBkZWNvZGVTZXNzaW9uTWFwLmlzQ3JlYXRlZChkZWNyeXB0SGFuZGxlLT5kZWNyeXB0SWQpICYmCiAgICAgICAgIE5VTEwgIT0gYnVmZmVyICYmCiAgICAgICAgIG51bUJ5dGVzID4gLTEpIHsKQEAgLTY1NCwxNSArNjU0LDE1IEBACiB9CiAKICNpZmRlZiBVU0VfNjRCSVRfRFJNX0FQSQotb2ZmNjRfdCBGd2RMb2NrRW5naW5lOjpvbkxzZWVrKGludCAvKiB1bmlxdWVJZCAqLywgRGVjcnlwdEhhbmRsZSogZGVjcnlwdEhhbmRsZSwKK29mZjY0X3QgRndkTG9ja0VuZ2luZTo6b25Mc2VlayhpbnQgLyogdW5pcXVlSWQgKi8sIHNwPERlY3J5cHRIYW5kbGU+JiBkZWNyeXB0SGFuZGxlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9mZjY0X3Qgb2Zmc2V0LCBpbnQgd2hlbmNlKSB7CiAjZWxzZQotb2ZmX3QgRndkTG9ja0VuZ2luZTo6b25Mc2VlayhpbnQgLyogdW5pcXVlSWQgKi8sIERlY3J5cHRIYW5kbGUqIGRlY3J5cHRIYW5kbGUsCitvZmZfdCBGd2RMb2NrRW5naW5lOjpvbkxzZWVrKGludCAvKiB1bmlxdWVJZCAqLywgc3A8RGVjcnlwdEhhbmRsZT4mIGRlY3J5cHRIYW5kbGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9mZl90IG9mZnNldCwgaW50IHdoZW5jZSkgewogI2VuZGlmCiAgICAgb2ZmX3Qgb2ZmdmFsID0gLTE7CiAKLSAgICBpZiAoTlVMTCAhPSBkZWNyeXB0SGFuZGxlICYmIGRlY29kZVNlc3Npb25NYXAuaXNDcmVhdGVkKGRlY3J5cHRIYW5kbGUtPmRlY3J5cHRJZCkpIHsKKyAgICBpZiAoTlVMTCAhPSBkZWNyeXB0SGFuZGxlLmdldCgpICYmIGRlY29kZVNlc3Npb25NYXAuaXNDcmVhdGVkKGRlY3J5cHRIYW5kbGUtPmRlY3J5cHRJZCkpIHsKICAgICAgICAgRGVjb2RlU2Vzc2lvbiogc2Vzc2lvbiA9IGRlY29kZVNlc3Npb25NYXAuZ2V0VmFsdWUoZGVjcnlwdEhhbmRsZS0+ZGVjcnlwdElkKTsKICAgICAgICAgaWYgKE5VTEwgIT0gc2Vzc2lvbiAmJiBzZXNzaW9uLT5maWxlRGVzYyA+IC0xKSB7CiAgICAgICAgICAgICBvZmZ2YWwgPSBGd2RMb2NrRmlsZV9sc2VlayhzZXNzaW9uLT5maWxlRGVzYywgb2Zmc2V0LCB3aGVuY2UpOwpAQCAtNjc1LDEzICs2NzUsMTMgQEAKIAogI2lmZGVmIFVTRV82NEJJVF9EUk1fQVBJCiBzc2l6ZV90IEZ3ZExvY2tFbmdpbmU6Om9uUHJlYWQoaW50IHVuaXF1ZUlkLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERlY3J5cHRIYW5kbGUqIGRlY3J5cHRIYW5kbGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3A8RGVjcnlwdEhhbmRsZT4mIGRlY3J5cHRIYW5kbGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCogYnVmZmVyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNzaXplX3QgbnVtQnl0ZXMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2ZmNjRfdCBvZmZzZXQpIHsKICNlbHNlCiBzc2l6ZV90IEZ3ZExvY2tFbmdpbmU6Om9uUHJlYWQoaW50IHVuaXF1ZUlkLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERlY3J5cHRIYW5kbGUqIGRlY3J5cHRIYW5kbGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3A8RGVjcnlwdEhhbmRsZT4mIGRlY3J5cHRIYW5kbGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCogYnVmZmVyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNzaXplX3QgbnVtQnl0ZXMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2ZmX3Qgb2Zmc2V0KSB7CkBAIC02OTAsNyArNjkwLDcgQEAKIAogICAgIERlY29kZVNlc3Npb24qIGRlY29kZXJTZXNzaW9uID0gTlVMTDsKIAotICAgIGlmICgoTlVMTCAhPSBkZWNyeXB0SGFuZGxlKSAmJgorICAgIGlmICgoTlVMTCAhPSBkZWNyeXB0SGFuZGxlLmdldCgpKSAmJgogICAgICAgICAoTlVMTCAhPSAoZGVjb2RlclNlc3Npb24gPSBkZWNvZGVTZXNzaW9uTWFwLmdldFZhbHVlKGRlY3J5cHRIYW5kbGUtPmRlY3J5cHRJZCkpKSAmJgogICAgICAgICAoTlVMTCAhPSBidWZmZXIpICYmCiAgICAgICAgIChudW1CeXRlcyA+IC0xKSAmJgpkaWZmIC0tZ2l0IGEvZHJtL2xpYmRybWZyYW1ld29yay9wbHVnaW5zL3Bhc3N0aHJ1L2luY2x1ZGUvRHJtUGFzc3RocnVQbHVnSW4uaCBiL2RybS9saWJkcm1mcmFtZXdvcmsvcGx1Z2lucy9wYXNzdGhydS9pbmNsdWRlL0RybVBhc3N0aHJ1UGx1Z0luLmgKaW5kZXggN2I2NmRjNy4uNGFiNTI3MiAxMDA2NDQKLS0tIGEvZHJtL2xpYmRybWZyYW1ld29yay9wbHVnaW5zL3Bhc3N0aHJ1L2luY2x1ZGUvRHJtUGFzc3RocnVQbHVnSW4uaAorKysgYi9kcm0vbGliZHJtZnJhbWV3b3JrL3BsdWdpbnMvcGFzc3RocnUvaW5jbHVkZS9Ecm1QYXNzdGhydVBsdWdJbi5oCkBAIC01MywxMCArNTMsMTEgQEAKIAogICAgIGludCBvbkNoZWNrUmlnaHRzU3RhdHVzKGludCB1bmlxdWVJZCwgY29uc3QgU3RyaW5nOCYgcGF0aCwgaW50IGFjdGlvbik7CiAKLSAgICBzdGF0dXNfdCBvbkNvbnN1bWVSaWdodHMoaW50IHVuaXF1ZUlkLCBEZWNyeXB0SGFuZGxlKiBkZWNyeXB0SGFuZGxlLCBpbnQgYWN0aW9uLCBib29sIHJlc2VydmUpOworICAgIHN0YXR1c190IG9uQ29uc3VtZVJpZ2h0cyhpbnQgdW5pcXVlSWQsIHNwPERlY3J5cHRIYW5kbGU+JiBkZWNyeXB0SGFuZGxlLAorICAgICAgICAgICAgaW50IGFjdGlvbiwgYm9vbCByZXNlcnZlKTsKIAogICAgIHN0YXR1c190IG9uU2V0UGxheWJhY2tTdGF0dXMoCi0gICAgICAgICAgICBpbnQgdW5pcXVlSWQsIERlY3J5cHRIYW5kbGUqIGRlY3J5cHRIYW5kbGUsIGludCBwbGF5YmFja1N0YXR1cywgaW50NjRfdCBwb3NpdGlvbik7CisgICAgICAgICAgICBpbnQgdW5pcXVlSWQsIHNwPERlY3J5cHRIYW5kbGU+JiBkZWNyeXB0SGFuZGxlLCBpbnQgcGxheWJhY2tTdGF0dXMsIGludDY0X3QgcG9zaXRpb24pOwogCiAgICAgYm9vbCBvblZhbGlkYXRlQWN0aW9uKAogICAgICAgICAgICAgaW50IHVuaXF1ZUlkLCBjb25zdCBTdHJpbmc4JiBwYXRoLCBpbnQgYWN0aW9uLCBjb25zdCBBY3Rpb25EZXNjcmlwdGlvbiYgZGVzY3JpcHRpb24pOwpAQCAtNzQsMjYgKzc1LDI1IEBACiAgICAgRHJtU3VwcG9ydEluZm8qIG9uR2V0U3VwcG9ydEluZm8oaW50IHVuaXF1ZUlkKTsKIAogICAgIHN0YXR1c190IG9uT3BlbkRlY3J5cHRTZXNzaW9uKAotICAgICAgICAgICAgaW50IHVuaXF1ZUlkLCBEZWNyeXB0SGFuZGxlKiBkZWNyeXB0SGFuZGxlLCBpbnQgZmQsIG9mZjY0X3Qgb2Zmc2V0LCBvZmY2NF90IGxlbmd0aCk7CisgICAgICAgICAgICBpbnQgdW5pcXVlSWQsIHNwPERlY3J5cHRIYW5kbGU+JiBkZWNyeXB0SGFuZGxlLCBpbnQgZmQsIG9mZjY0X3Qgb2Zmc2V0LAorICAgICAgICAgICAgb2ZmNjRfdCBsZW5ndGgpOwogCiAgICAgc3RhdHVzX3Qgb25PcGVuRGVjcnlwdFNlc3Npb24oCi0gICAgICAgICAgICBpbnQgdW5pcXVlSWQsIERlY3J5cHRIYW5kbGUqIGRlY3J5cHRIYW5kbGUsIGNvbnN0IGNoYXIqIHVyaSk7CisgICAgICAgICAgICBpbnQgdW5pcXVlSWQsIHNwPERlY3J5cHRIYW5kbGU+JiBkZWNyeXB0SGFuZGxlLCBjb25zdCBjaGFyKiB1cmkpOwogCi0gICAgc3RhdHVzX3Qgb25DbG9zZURlY3J5cHRTZXNzaW9uKGludCB1bmlxdWVJZCwgRGVjcnlwdEhhbmRsZSogZGVjcnlwdEhhbmRsZSk7CisgICAgc3RhdHVzX3Qgb25DbG9zZURlY3J5cHRTZXNzaW9uKGludCB1bmlxdWVJZCwgc3A8RGVjcnlwdEhhbmRsZT4mIGRlY3J5cHRIYW5kbGUpOwogCi0gICAgc3RhdHVzX3Qgb25Jbml0aWFsaXplRGVjcnlwdFVuaXQoaW50IHVuaXF1ZUlkLCBEZWNyeXB0SGFuZGxlKiBkZWNyeXB0SGFuZGxlLAorICAgIHN0YXR1c190IG9uSW5pdGlhbGl6ZURlY3J5cHRVbml0KGludCB1bmlxdWVJZCwgc3A8RGVjcnlwdEhhbmRsZT4mIGRlY3J5cHRIYW5kbGUsCiAgICAgICAgICAgICBpbnQgZGVjcnlwdFVuaXRJZCwgY29uc3QgRHJtQnVmZmVyKiBoZWFkZXJJbmZvKTsKIAotICAgIHN0YXR1c190IG9uRGVjcnlwdChpbnQgdW5pcXVlSWQsIERlY3J5cHRIYW5kbGUqIGRlY3J5cHRIYW5kbGUsIGludCBkZWNyeXB0VW5pdElkLAorICAgIHN0YXR1c190IG9uRGVjcnlwdChpbnQgdW5pcXVlSWQsIHNwPERlY3J5cHRIYW5kbGU+JiBkZWNyeXB0SGFuZGxlLCBpbnQgZGVjcnlwdFVuaXRJZCwKICAgICAgICAgICAgIGNvbnN0IERybUJ1ZmZlciogZW5jQnVmZmVyLCBEcm1CdWZmZXIqKiBkZWNCdWZmZXIsIERybUJ1ZmZlciogSVYpOwogCi0gICAgc3RhdHVzX3Qgb25GaW5hbGl6ZURlY3J5cHRVbml0KGludCB1bmlxdWVJZCwgRGVjcnlwdEhhbmRsZSogZGVjcnlwdEhhbmRsZSwgaW50IGRlY3J5cHRVbml0SWQpOworICAgIHN0YXR1c190IG9uRmluYWxpemVEZWNyeXB0VW5pdChpbnQgdW5pcXVlSWQsIHNwPERlY3J5cHRIYW5kbGU+JiBkZWNyeXB0SGFuZGxlLAorICAgICAgICAgICAgaW50IGRlY3J5cHRVbml0SWQpOwogCi0gICAgc3NpemVfdCBvblByZWFkKGludCB1bmlxdWVJZCwgRGVjcnlwdEhhbmRsZSogZGVjcnlwdEhhbmRsZSwKKyAgICBzc2l6ZV90IG9uUHJlYWQoaW50IHVuaXF1ZUlkLCBzcDxEZWNyeXB0SGFuZGxlPiYgZGVjcnlwdEhhbmRsZSwKICAgICAgICAgICAgIHZvaWQqIGJ1ZmZlciwgc3NpemVfdCBudW1CeXRlcywgb2ZmNjRfdCBvZmZzZXQpOwotCi1wcml2YXRlOgotICAgIERlY3J5cHRIYW5kbGUqIG9wZW5EZWNyeXB0U2Vzc2lvbkltcGwoKTsKIH07CiAKIH07CmRpZmYgLS1naXQgYS9kcm0vbGliZHJtZnJhbWV3b3JrL3BsdWdpbnMvcGFzc3RocnUvc3JjL0RybVBhc3N0aHJ1UGx1Z0luLmNwcCBiL2RybS9saWJkcm1mcmFtZXdvcmsvcGx1Z2lucy9wYXNzdGhydS9zcmMvRHJtUGFzc3RocnVQbHVnSW4uY3BwCmluZGV4IGQ3ZjJkMjguLjBmYTM0NzggMTAwNjQ0Ci0tLSBhL2RybS9saWJkcm1mcmFtZXdvcmsvcGx1Z2lucy9wYXNzdGhydS9zcmMvRHJtUGFzc3RocnVQbHVnSW4uY3BwCisrKyBiL2RybS9saWJkcm1mcmFtZXdvcmsvcGx1Z2lucy9wYXNzdGhydS9zcmMvRHJtUGFzc3RocnVQbHVnSW4uY3BwCkBAIC0xODMsMTMgKzE4MywxMyBAQAogfQogCiBzdGF0dXNfdCBEcm1QYXNzdGhydVBsdWdJbjo6b25Db25zdW1lUmlnaHRzKGludCB1bmlxdWVJZCwKLSAgICAgICAgICAgIERlY3J5cHRIYW5kbGUqIC8qZGVjcnlwdEhhbmRsZSovLCBpbnQgLyphY3Rpb24qLywgYm9vbCAvKnJlc2VydmUqLykgeworICAgICAgICAgICAgc3A8RGVjcnlwdEhhbmRsZT4mIC8qZGVjcnlwdEhhbmRsZSovLCBpbnQgLyphY3Rpb24qLywgYm9vbCAvKnJlc2VydmUqLykgewogICAgIEFMT0dWKCJEcm1QYXNzdGhydVBsdWdJbjo6b25Db25zdW1lUmlnaHRzKCkgOiAlZCIsIHVuaXF1ZUlkKTsKICAgICByZXR1cm4gRFJNX05PX0VSUk9SOwogfQogCiBzdGF0dXNfdCBEcm1QYXNzdGhydVBsdWdJbjo6b25TZXRQbGF5YmFja1N0YXR1cyhpbnQgdW5pcXVlSWQsCi0gICAgICAgICAgICBEZWNyeXB0SGFuZGxlKiAvKmRlY3J5cHRIYW5kbGUqLywgaW50IC8qcGxheWJhY2tTdGF0dXMqLywgaW50NjRfdCAvKnBvc2l0aW9uKi8pIHsKKyAgICAgICAgICAgIHNwPERlY3J5cHRIYW5kbGU+JiAvKmRlY3J5cHRIYW5kbGUqLywgaW50IC8qcGxheWJhY2tTdGF0dXMqLywgaW50NjRfdCAvKnBvc2l0aW9uKi8pIHsKICAgICBBTE9HVigiRHJtUGFzc3RocnVQbHVnSW46Om9uU2V0UGxheWJhY2tTdGF0dXMoKSA6ICVkIiwgdW5pcXVlSWQpOwogICAgIHJldHVybiBEUk1fTk9fRVJST1I7CiB9CkBAIC0yMzYsNyArMjM2LDggQEAKIH0KIAogc3RhdHVzX3QgRHJtUGFzc3RocnVQbHVnSW46Om9uT3BlbkRlY3J5cHRTZXNzaW9uKAotICAgICAgICAgICAgaW50IHVuaXF1ZUlkLCBEZWNyeXB0SGFuZGxlKiBkZWNyeXB0SGFuZGxlLCBpbnQgLypmZCovLCBvZmY2NF90IC8qb2Zmc2V0Ki8sIG9mZjY0X3QgLypsZW5ndGgqLykgeworICAgICAgICAgICAgaW50IHVuaXF1ZUlkLCBzcDxEZWNyeXB0SGFuZGxlPiYgZGVjcnlwdEhhbmRsZSwgaW50IC8qZmQqLywgb2ZmNjRfdCAvKm9mZnNldCovLAorICAgICAgICAgICAgb2ZmNjRfdCAvKmxlbmd0aCovKSB7CiAgICAgQUxPR1YoIkRybVBhc3N0aHJ1UGx1Z0luOjpvbk9wZW5EZWNyeXB0U2Vzc2lvbigpIDogJWQiLCB1bmlxdWVJZCk7CiAKICNpZmRlZiBFTkFCTEVfUEFTU1RIUlVfREVDUllQVElPTgpAQCAtMjQ2LDM2ICsyNDcsMzggQEAKICAgICBkZWNyeXB0SGFuZGxlLT5kZWNyeXB0SW5mbyA9IE5VTEw7CiAgICAgcmV0dXJuIERSTV9OT19FUlJPUjsKICNlbHNlCi0gICAgKHZvaWQpKGRlY3J5cHRIYW5kbGUpOyAvLyB1bnVzZWQKKyAgICAodm9pZCkoZGVjcnlwdEhhbmRsZS5nZXQoKSk7IC8vIHVudXNlZAogI2VuZGlmCiAKICAgICByZXR1cm4gRFJNX0VSUk9SX0NBTk5PVF9IQU5ETEU7CiB9CiAKIHN0YXR1c190IERybVBhc3N0aHJ1UGx1Z0luOjpvbk9wZW5EZWNyeXB0U2Vzc2lvbigKLSAgICAgICAgICAgIGludCAvKnVuaXF1ZUlkKi8sIERlY3J5cHRIYW5kbGUqIC8qZGVjcnlwdEhhbmRsZSovLCBjb25zdCBjaGFyKiAvKnVyaSovKSB7CisgICAgICAgICAgICBpbnQgLyp1bmlxdWVJZCovLCBzcDxEZWNyeXB0SGFuZGxlPiYgLypkZWNyeXB0SGFuZGxlKi8sIGNvbnN0IGNoYXIqIC8qdXJpKi8pIHsKICAgICByZXR1cm4gRFJNX0VSUk9SX0NBTk5PVF9IQU5ETEU7CiB9CiAKLXN0YXR1c190IERybVBhc3N0aHJ1UGx1Z0luOjpvbkNsb3NlRGVjcnlwdFNlc3Npb24oaW50IHVuaXF1ZUlkLCBEZWNyeXB0SGFuZGxlKiBkZWNyeXB0SGFuZGxlKSB7CitzdGF0dXNfdCBEcm1QYXNzdGhydVBsdWdJbjo6b25DbG9zZURlY3J5cHRTZXNzaW9uKGludCB1bmlxdWVJZCwgc3A8RGVjcnlwdEhhbmRsZT4mIGRlY3J5cHRIYW5kbGUpIHsKICAgICBBTE9HVigiRHJtUGFzc3RocnVQbHVnSW46Om9uQ2xvc2VEZWNyeXB0U2Vzc2lvbigpIDogJWQiLCB1bmlxdWVJZCk7Ci0gICAgaWYgKE5VTEwgIT0gZGVjcnlwdEhhbmRsZSkgeworICAgIGlmIChOVUxMICE9IGRlY3J5cHRIYW5kbGUuZ2V0KCkpIHsKICAgICAgICAgaWYgKE5VTEwgIT0gZGVjcnlwdEhhbmRsZS0+ZGVjcnlwdEluZm8pIHsKICAgICAgICAgICAgIGRlbGV0ZSBkZWNyeXB0SGFuZGxlLT5kZWNyeXB0SW5mbzsgZGVjcnlwdEhhbmRsZS0+ZGVjcnlwdEluZm8gPSBOVUxMOwogICAgICAgICB9Ci0gICAgICAgIGRlbGV0ZSBkZWNyeXB0SGFuZGxlOyBkZWNyeXB0SGFuZGxlID0gTlVMTDsKKyAgICAgICAgZGVjcnlwdEhhbmRsZS5jbGVhcigpOwogICAgIH0KICAgICByZXR1cm4gRFJNX05PX0VSUk9SOwogfQogCi1zdGF0dXNfdCBEcm1QYXNzdGhydVBsdWdJbjo6b25Jbml0aWFsaXplRGVjcnlwdFVuaXQoaW50IHVuaXF1ZUlkLCBEZWNyeXB0SGFuZGxlKiAvKmRlY3J5cHRIYW5kbGUqLywKLSAgICAgICAgICAgIGludCAvKmRlY3J5cHRVbml0SWQqLywgY29uc3QgRHJtQnVmZmVyKiAvKmhlYWRlckluZm8qLykgeworc3RhdHVzX3QgRHJtUGFzc3RocnVQbHVnSW46Om9uSW5pdGlhbGl6ZURlY3J5cHRVbml0KGludCB1bmlxdWVJZCwKKyAgICAgICAgc3A8RGVjcnlwdEhhbmRsZT4mIC8qZGVjcnlwdEhhbmRsZSovLAorICAgICAgICBpbnQgLypkZWNyeXB0VW5pdElkKi8sIGNvbnN0IERybUJ1ZmZlciogLypoZWFkZXJJbmZvKi8pIHsKICAgICBBTE9HVigiRHJtUGFzc3RocnVQbHVnSW46Om9uSW5pdGlhbGl6ZURlY3J5cHRVbml0KCkgOiAlZCIsIHVuaXF1ZUlkKTsKICAgICByZXR1cm4gRFJNX05PX0VSUk9SOwogfQogCi1zdGF0dXNfdCBEcm1QYXNzdGhydVBsdWdJbjo6b25EZWNyeXB0KGludCB1bmlxdWVJZCwgRGVjcnlwdEhhbmRsZSogLypkZWNyeXB0SGFuZGxlKi8sCi0gICAgICAgICAgICBpbnQgLypkZWNyeXB0VW5pdElkKi8sIGNvbnN0IERybUJ1ZmZlciogZW5jQnVmZmVyLCBEcm1CdWZmZXIqKiBkZWNCdWZmZXIsIERybUJ1ZmZlciogLypJViovKSB7CitzdGF0dXNfdCBEcm1QYXNzdGhydVBsdWdJbjo6b25EZWNyeXB0KGludCB1bmlxdWVJZCwgc3A8RGVjcnlwdEhhbmRsZT4mIC8qZGVjcnlwdEhhbmRsZSovLAorICAgICAgICBpbnQgLypkZWNyeXB0VW5pdElkKi8sIGNvbnN0IERybUJ1ZmZlciogZW5jQnVmZmVyLCBEcm1CdWZmZXIqKiBkZWNCdWZmZXIsCisgICAgICAgIERybUJ1ZmZlciogLypJViovKSB7CiAgICAgQUxPR1YoIkRybVBhc3N0aHJ1UGx1Z0luOjpvbkRlY3J5cHQoKSA6ICVkIiwgdW5pcXVlSWQpOwogICAgIC8qKgogICAgICAqIEFzIGEgd29ya2Fyb3VuZCBpbXBsZW1lbnRhdGlvbiBwYXNzdGhydSB3b3VsZCBjb3B5IHRoZSBnaXZlbgpAQCAtMjk2LDEyICsyOTksMTIgQEAKIH0KIAogc3RhdHVzX3QgRHJtUGFzc3RocnVQbHVnSW46Om9uRmluYWxpemVEZWNyeXB0VW5pdCgKLSAgICAgICAgICAgIGludCB1bmlxdWVJZCwgRGVjcnlwdEhhbmRsZSogLypkZWNyeXB0SGFuZGxlKi8sIGludCAvKmRlY3J5cHRVbml0SWQqLykgeworICAgICAgICAgICAgaW50IHVuaXF1ZUlkLCBzcDxEZWNyeXB0SGFuZGxlPiYgLypkZWNyeXB0SGFuZGxlKi8sIGludCAvKmRlY3J5cHRVbml0SWQqLykgewogICAgIEFMT0dWKCJEcm1QYXNzdGhydVBsdWdJbjo6b25GaW5hbGl6ZURlY3J5cHRVbml0KCkgOiAlZCIsIHVuaXF1ZUlkKTsKICAgICByZXR1cm4gRFJNX05PX0VSUk9SOwogfQogCi1zc2l6ZV90IERybVBhc3N0aHJ1UGx1Z0luOjpvblByZWFkKGludCB1bmlxdWVJZCwgRGVjcnlwdEhhbmRsZSogLypkZWNyeXB0SGFuZGxlKi8sCitzc2l6ZV90IERybVBhc3N0aHJ1UGx1Z0luOjpvblByZWFkKGludCB1bmlxdWVJZCwgc3A8RGVjcnlwdEhhbmRsZT4mIC8qZGVjcnlwdEhhbmRsZSovLAogICAgICAgICAgICAgdm9pZCogLypidWZmZXIqLywgc3NpemVfdCAvKm51bUJ5dGVzKi8sIG9mZjY0X3QgLypvZmZzZXQqLykgewogICAgIEFMT0dWKCJEcm1QYXNzdGhydVBsdWdJbjo6b25QcmVhZCgpIDogJWQiLCB1bmlxdWVJZCk7CiAgICAgcmV0dXJuIDA7CmRpZmYgLS1naXQgYS9kcm0vbGlibWVkaWFkcm0vQW5kcm9pZC5icCBiL2RybS9saWJtZWRpYWRybS9BbmRyb2lkLmJwCmluZGV4IDQ5OTFlNTAuLjk0ZjllMDIgMTAwNjQ0Ci0tLSBhL2RybS9saWJtZWRpYWRybS9BbmRyb2lkLmJwCisrKyBiL2RybS9saWJtZWRpYWRybS9BbmRyb2lkLmJwCkBAIC0zMiw2ICszMiw3IEBACiAgICAgICAgICJsaWJ1dGlscyIsCiAgICAgICAgICJhbmRyb2lkLmhhcmR3YXJlLmRybUAxLjAiLAogICAgICAgICAiYW5kcm9pZC5oYXJkd2FyZS5kcm1AMS4xIiwKKyAgICAgICAgImFuZHJvaWQuaGFyZHdhcmUuZHJtQDEuMiIsCiAgICAgICAgICJsaWJoaWRsYWxsb2NhdG9ydXRpbHMiLAogICAgICAgICAibGliaGlkbGJhc2UiLAogICAgICAgICAibGliaGlkbHRyYW5zcG9ydCIsCmRpZmYgLS1naXQgYS9kcm0vbGlibWVkaWFkcm0vRHJtSGFsLmNwcCBiL2RybS9saWJtZWRpYWRybS9Ecm1IYWwuY3BwCmluZGV4IGNmMDg2MTAuLjE0ZmY0OTMgMTAwNjQ0Ci0tLSBhL2RybS9saWJtZWRpYWRybS9Ecm1IYWwuY3BwCisrKyBiL2RybS9saWJtZWRpYWRybS9Ecm1IYWwuY3BwCkBAIC0yMyw3ICsyMyw3IEBACiAjaW5jbHVkZSA8YmluZGVyL0lQQ1RocmVhZFN0YXRlLmg+CiAjaW5jbHVkZSA8YmluZGVyL0lTZXJ2aWNlTWFuYWdlci5oPgogCi0jaW5jbHVkZSA8YW5kcm9pZC9oYXJkd2FyZS9kcm0vMS4wL3R5cGVzLmg+CisjaW5jbHVkZSA8YW5kcm9pZC9oYXJkd2FyZS9kcm0vMS4yL3R5cGVzLmg+CiAjaW5jbHVkZSA8YW5kcm9pZC9oaWRsL21hbmFnZXIvMS4wL0lTZXJ2aWNlTWFuYWdlci5oPgogI2luY2x1ZGUgPGhpZGwvU2VydmljZU1hbmFnZW1lbnQuaD4KIApAQCAtNDMsMTIgKzQzLDEzIEBACiB1c2luZyBkcm06OlYxXzA6OktleVN0YXR1c1R5cGU7CiB1c2luZyBkcm06OlYxXzA6OktleVR5cGU7CiB1c2luZyBkcm06OlYxXzA6OktleVZhbHVlOwotdXNpbmcgZHJtOjpWMV8xOjpIZGNwTGV2ZWw7OwogdXNpbmcgZHJtOjpWMV8wOjpTZWN1cmVTdG9wOwotdXNpbmcgZHJtOjpWMV8xOjpTZWN1cmVTdG9wUmVsZWFzZTsKIHVzaW5nIGRybTo6VjFfMDo6U2VjdXJlU3RvcElkOwotdXNpbmcgZHJtOjpWMV8xOjpTZWN1cml0eUxldmVsOwogdXNpbmcgZHJtOjpWMV8wOjpTdGF0dXM7Cit1c2luZyBkcm06OlYxXzE6OkhkY3BMZXZlbDsKK3VzaW5nIGRybTo6VjFfMTo6U2VjdXJlU3RvcFJlbGVhc2U7Cit1c2luZyBkcm06OlYxXzE6OlNlY3VyaXR5TGV2ZWw7Cit1c2luZyBkcm06OlYxXzI6OktleVNldElkOwogdXNpbmcgOjphbmRyb2lkOjpoYXJkd2FyZTo6ZHJtOjpWMV8xOjpEcm1NZXRyaWNHcm91cDsKIHVzaW5nIDo6YW5kcm9pZDo6aGFyZHdhcmU6OmhpZGxfYXJyYXk7CiB1c2luZyA6OmFuZHJvaWQ6OmhhcmR3YXJlOjpoaWRsX3N0cmluZzsKQEAgLTEzOSw2ICsxNDAsMTggQEAKICAgICB9CiB9CiAKK3N0YXRpYyBEcm1QbHVnaW46Ok9mZmxpbmVMaWNlbnNlU3RhdGUgdG9PZmZsaW5lTGljZW5zZVN0YXRlKAorICAgICAgICBPZmZsaW5lTGljZW5zZVN0YXRlIGxpY2Vuc2VTdGF0ZSkgeworICAgIHN3aXRjaChsaWNlbnNlU3RhdGUpIHsKKyAgICBjYXNlIE9mZmxpbmVMaWNlbnNlU3RhdGU6OlVTQUJMRToKKyAgICAgICAgcmV0dXJuIERybVBsdWdpbjo6a09mZmxpbmVMaWNlbnNlU3RhdGVVc2FibGU7CisgICAgY2FzZSBPZmZsaW5lTGljZW5zZVN0YXRlOjpJTkFDVElWRToKKyAgICAgICAgcmV0dXJuIERybVBsdWdpbjo6a09mZmxpbmVMaWNlbnNlU3RhdGVJbmFjdGl2ZTsKKyAgICBkZWZhdWx0OgorICAgICAgICByZXR1cm4gRHJtUGx1Z2luOjprT2ZmbGluZUxpY2Vuc2VTdGF0ZVVua25vd247CisgICAgfQorfQorCiBzdGF0aWMgRHJtUGx1Z2luOjpIZGNwTGV2ZWwgdG9IZGNwTGV2ZWwoSGRjcExldmVsIGxldmVsKSB7CiAgICAgc3dpdGNoKGxldmVsKSB7CiAgICAgY2FzZSBIZGNwTGV2ZWw6OkhEQ1BfTk9ORToKQEAgLTE5OSw2ICsyMTIsMTUgQEAKICAgICByZXR1cm4gc2VjdXJlU3RvcElkczsKIH0KIAorc3RhdGljIExpc3Q8VmVjdG9yPHVpbnQ4X3Q+PiB0b0tleVNldElkcyhjb25zdCBoaWRsX3ZlYzxLZXlTZXRJZD4mCisgICAgICAgIGhLZXlTZXRJZHMpIHsKKyAgICBMaXN0PFZlY3Rvcjx1aW50OF90Pj4ga2V5U2V0SWRzOworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgaEtleVNldElkcy5zaXplKCk7IGkrKykgeworICAgICAgICBrZXlTZXRJZHMucHVzaF9iYWNrKHRvVmVjdG9yKGhLZXlTZXRJZHNbaV0pKTsKKyAgICB9CisgICAgcmV0dXJuIGtleVNldElkczsKK30KKwogc3RhdGljIHN0YXR1c190IHRvU3RhdHVzVChTdGF0dXMgc3RhdHVzKSB7CiAgICAgc3dpdGNoIChzdGF0dXMpIHsKICAgICBjYXNlIFN0YXR1czo6T0s6CkBAIC0zMDUsNiArMzI3LDcgQEAKICAgICB9CiAgICAgbVBsdWdpbi5jbGVhcigpOwogICAgIG1QbHVnaW5WMV8xLmNsZWFyKCk7CisgICAgbVBsdWdpblYxXzIuY2xlYXIoKTsKIH0KIAogVmVjdG9yPHNwPElEcm1GYWN0b3J5Pj4gRHJtSGFsOjptYWtlRHJtRmFjdG9yaWVzKCkgewpAQCAtMzE4LDcgKzM0MSw2IEBACiAgICAgICAgICAgICAgICAgICAgIGZvciAoY29uc3QgYXV0byAmaW5zdGFuY2UgOiByZWdpc3RlcmVkKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICBhdXRvIGZhY3RvcnkgPSBkcm06OlYxXzA6OklEcm1GYWN0b3J5OjpnZXRTZXJ2aWNlKGluc3RhbmNlKTsKICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChmYWN0b3J5ICE9IE5VTEwpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBBTE9HRCgiZm91bmQgZHJtQDEuMCBJRHJtRmFjdG9yeSAlcyIsIGluc3RhbmNlLmNfc3RyKCkpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZhY3Rvcmllcy5wdXNoX2JhY2soZmFjdG9yeSk7CiAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgIH0KQEAgLTMyOSw3ICszNTEsMTYgQEAKICAgICAgICAgICAgICAgICAgICAgZm9yIChjb25zdCBhdXRvICZpbnN0YW5jZSA6IHJlZ2lzdGVyZWQpIHsKICAgICAgICAgICAgICAgICAgICAgICAgIGF1dG8gZmFjdG9yeSA9IGRybTo6VjFfMTo6SURybUZhY3Rvcnk6OmdldFNlcnZpY2UoaW5zdGFuY2UpOwogICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGZhY3RvcnkgIT0gTlVMTCkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFMT0dEKCJmb3VuZCBkcm1AMS4xIElEcm1GYWN0b3J5ICVzIiwgaW5zdGFuY2UuY19zdHIoKSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmFjdG9yaWVzLnB1c2hfYmFjayhmYWN0b3J5KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICk7CisgICAgICAgIG1hbmFnZXItPmxpc3RCeUludGVyZmFjZShkcm06OlYxXzI6OklEcm1GYWN0b3J5OjpkZXNjcmlwdG9yLAorICAgICAgICAgICAgICAgIFsmZmFjdG9yaWVzXShjb25zdCBoaWRsX3ZlYzxoaWRsX3N0cmluZz4gJnJlZ2lzdGVyZWQpIHsKKyAgICAgICAgICAgICAgICAgICAgZm9yIChjb25zdCBhdXRvICZpbnN0YW5jZSA6IHJlZ2lzdGVyZWQpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGF1dG8gZmFjdG9yeSA9IGRybTo6VjFfMjo6SURybUZhY3Rvcnk6OmdldFNlcnZpY2UoaW5zdGFuY2UpOworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGZhY3RvcnkgIT0gTlVMTCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZhY3Rvcmllcy5wdXNoX2JhY2soZmFjdG9yeSk7CiAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgIH0KQEAgLTUyNyw2ICs1NTgsNyBAQAogICAgICAgICAgICAgbVBsdWdpbiA9IG1ha2VEcm1QbHVnaW4obUZhY3Rvcmllc1tpXSwgdXVpZCwgYXBwUGFja2FnZU5hbWUpOwogICAgICAgICAgICAgaWYgKG1QbHVnaW4gIT0gTlVMTCkgewogICAgICAgICAgICAgICAgIG1QbHVnaW5WMV8xID0gZHJtOjpWMV8xOjpJRHJtUGx1Z2luOjpjYXN0RnJvbShtUGx1Z2luKTsKKyAgICAgICAgICAgICAgICBtUGx1Z2luVjFfMiA9IGRybTo6VjFfMjo6SURybVBsdWdpbjo6Y2FzdEZyb20obVBsdWdpbik7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICB9CkBAIC0xMDY1LDYgKzEwOTcsNzMgQEAKICAgICByZXR1cm4gaFJlc3VsdC5pc09rKCkgPyBlcnIgOiBERUFEX09CSkVDVDsKIH0KIAorc3RhdHVzX3QgRHJtSGFsOjpnZXRPZmZsaW5lTGljZW5zZUtleVNldElkcyhMaXN0PFZlY3Rvcjx1aW50OF90Pj4gJmtleVNldElkcykgY29uc3QgeworICAgIE11dGV4OjpBdXRvbG9jayBhdXRvTG9jayhtTG9jayk7CisKKyAgICBpZiAobUluaXRDaGVjayAhPSBPSykgeworICAgICAgICByZXR1cm4gbUluaXRDaGVjazsKKyAgICB9CisKKyAgICBpZiAobVBsdWdpblYxXzIgPT0gTlVMTCkgeworICAgICAgICByZXR1cm4gRVJST1JfRFJNX0NBTk5PVF9IQU5ETEU7CisgICAgfQorCisgICAgc3RhdHVzX3QgZXJyID0gVU5LTk9XTl9FUlJPUjsKKworICAgIFJldHVybjx2b2lkPiBoUmVzdWx0ID0gbVBsdWdpblYxXzItPmdldE9mZmxpbmVMaWNlbnNlS2V5U2V0SWRzKAorICAgICAgICAgICAgWyZdKFN0YXR1cyBzdGF0dXMsIGNvbnN0IGhpZGxfdmVjPEtleVNldElkPiYgaEtleVNldElkcykgeworICAgICAgICAgICAgICAgIGlmIChzdGF0dXMgPT0gU3RhdHVzOjpPSykgeworICAgICAgICAgICAgICAgICAgICBrZXlTZXRJZHMgPSB0b0tleVNldElkcyhoS2V5U2V0SWRzKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZXJyID0gdG9TdGF0dXNUKHN0YXR1cyk7CisgICAgICAgICAgICB9CisgICAgKTsKKworICAgIHJldHVybiBoUmVzdWx0LmlzT2soKSA/IGVyciA6IERFQURfT0JKRUNUOworfQorCitzdGF0dXNfdCBEcm1IYWw6OnJlbW92ZU9mZmxpbmVMaWNlbnNlKFZlY3Rvcjx1aW50OF90PiBjb25zdCAma2V5U2V0SWQpIHsKKyAgICBNdXRleDo6QXV0b2xvY2sgYXV0b0xvY2sobUxvY2spOworCisgICAgaWYgKG1Jbml0Q2hlY2sgIT0gT0spIHsKKyAgICAgICAgcmV0dXJuIG1Jbml0Q2hlY2s7CisgICAgfQorCisgICAgaWYgKG1QbHVnaW5WMV8yID09IE5VTEwpIHsKKyAgICAgICAgcmV0dXJuIEVSUk9SX0RSTV9DQU5OT1RfSEFORExFOworICAgIH0KKworICAgIFJldHVybjxTdGF0dXM+IHN0YXR1cyA9IG1QbHVnaW5WMV8yLT5yZW1vdmVPZmZsaW5lTGljZW5zZSh0b0hpZGxWZWMoa2V5U2V0SWQpKTsKKyAgICByZXR1cm4gc3RhdHVzLmlzT2soKSA/IHRvU3RhdHVzVChzdGF0dXMpIDogREVBRF9PQkpFQ1Q7Cit9CisKK3N0YXR1c190IERybUhhbDo6Z2V0T2ZmbGluZUxpY2Vuc2VTdGF0ZShWZWN0b3I8dWludDhfdD4gY29uc3QgJmtleVNldElkLAorICAgICAgICBEcm1QbHVnaW46Ok9mZmxpbmVMaWNlbnNlU3RhdGUgKmxpY2Vuc2VTdGF0ZSkgY29uc3QgeworICAgIE11dGV4OjpBdXRvbG9jayBhdXRvTG9jayhtTG9jayk7CisKKyAgICBpZiAobUluaXRDaGVjayAhPSBPSykgeworICAgICAgICByZXR1cm4gbUluaXRDaGVjazsKKyAgICB9CisKKyAgICBpZiAobVBsdWdpblYxXzIgPT0gTlVMTCkgeworICAgICAgICByZXR1cm4gRVJST1JfRFJNX0NBTk5PVF9IQU5ETEU7CisgICAgfQorICAgICpsaWNlbnNlU3RhdGUgPSBEcm1QbHVnaW46OmtPZmZsaW5lTGljZW5zZVN0YXRlVW5rbm93bjsKKworICAgIHN0YXR1c190IGVyciA9IFVOS05PV05fRVJST1I7CisKKyAgICBSZXR1cm48dm9pZD4gaFJlc3VsdCA9IG1QbHVnaW5WMV8yLT5nZXRPZmZsaW5lTGljZW5zZVN0YXRlKHRvSGlkbFZlYyhrZXlTZXRJZCksCisgICAgICAgICAgICBbJl0oU3RhdHVzIHN0YXR1cywgT2ZmbGluZUxpY2Vuc2VTdGF0ZSBoTGljZW5zZVN0YXRlKSB7CisgICAgICAgICAgICAgICAgaWYgKHN0YXR1cyA9PSBTdGF0dXM6Ok9LKSB7CisgICAgICAgICAgICAgICAgICAgICpsaWNlbnNlU3RhdGUgPSB0b09mZmxpbmVMaWNlbnNlU3RhdGUoaExpY2Vuc2VTdGF0ZSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGVyciA9IHRvU3RhdHVzVChzdGF0dXMpOworICAgICAgICAgICAgfQorICAgICk7CisKKyAgICByZXR1cm4gaFJlc3VsdC5pc09rKCkgPyBlcnIgOiBERUFEX09CSkVDVDsKK30KKwogc3RhdHVzX3QgRHJtSGFsOjpnZXRQcm9wZXJ0eVN0cmluZyhTdHJpbmc4IGNvbnN0ICZuYW1lLCBTdHJpbmc4ICZ2YWx1ZSApIGNvbnN0IHsKICAgICBNdXRleDo6QXV0b2xvY2sgYXV0b0xvY2sobUxvY2spOwogICAgIHJldHVybiBnZXRQcm9wZXJ0eVN0cmluZ0ludGVybmFsKG5hbWUsIHZhbHVlKTsKZGlmZiAtLWdpdCBhL2RybS9saWJtZWRpYWRybS9JRHJtLmNwcCBiL2RybS9saWJtZWRpYWRybS9JRHJtLmNwcAppbmRleCA1MDk5NjFmLi44YzI2MzE3IDEwMDY0NAotLS0gYS9kcm0vbGlibWVkaWFkcm0vSURybS5jcHAKKysrIGIvZHJtL2xpYm1lZGlhZHJtL0lEcm0uY3BwCkBAIC02MSw3ICs2MSwxMCBAQAogICAgIEdFVF9OVU1CRVJfT0ZfU0VTU0lPTlMsCiAgICAgR0VUX1NFQ1VSSVRZX0xFVkVMLAogICAgIFJFTU9WRV9TRUNVUkVfU1RPUCwKLSAgICBHRVRfU0VDVVJFX1NUT1BfSURTCisgICAgR0VUX1NFQ1VSRV9TVE9QX0lEUywKKyAgICBHRVRfT0ZGTElORV9MSUNFTlNFX0tFWVNFVF9JRFMsCisgICAgUkVNT1ZFX09GRkxJTkVfTElDRU5TRSwKKyAgICBHRVRfT0ZGTElORV9MSUNFTlNFX1NUQVRFCiB9OwogCiBzdHJ1Y3QgQnBEcm0gOiBwdWJsaWMgQnBJbnRlcmZhY2U8SURybT4gewpAQCAtMzc2LDYgKzM3OSw1MiBAQAogICAgICAgICByZXR1cm4gcmVwbHkucmVhZEludDMyKCk7CiAgICAgfQogCisgICAgdmlydHVhbCBzdGF0dXNfdCBnZXRPZmZsaW5lTGljZW5zZUtleVNldElkcyhMaXN0PFZlY3Rvcjx1aW50OF90PiA+ICZrZXlTZXRJZHMpIGNvbnN0IHsKKyAgICAgICAgUGFyY2VsIGRhdGEsIHJlcGx5OworICAgICAgICBkYXRhLndyaXRlSW50ZXJmYWNlVG9rZW4oSURybTo6Z2V0SW50ZXJmYWNlRGVzY3JpcHRvcigpKTsKKworICAgICAgICBzdGF0dXNfdCBzdGF0dXMgPSByZW1vdGUoKS0+dHJhbnNhY3QoR0VUX09GRkxJTkVfTElDRU5TRV9LRVlTRVRfSURTLCBkYXRhLCAmcmVwbHkpOworICAgICAgICBpZiAoc3RhdHVzICE9IE9LKSB7CisgICAgICAgICAgICByZXR1cm4gc3RhdHVzOworICAgICAgICB9CisKKyAgICAgICAga2V5U2V0SWRzLmNsZWFyKCk7CisgICAgICAgIHVpbnQzMl90IGNvdW50ID0gcmVwbHkucmVhZEludDMyKCk7CisgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgY291bnQ7IGkrKykgeworICAgICAgICAgICAgVmVjdG9yPHVpbnQ4X3Q+IGtleVNldElkOworICAgICAgICAgICAgcmVhZFZlY3RvcihyZXBseSwga2V5U2V0SWQpOworICAgICAgICAgICAga2V5U2V0SWRzLnB1c2hfYmFjayhrZXlTZXRJZCk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHJlcGx5LnJlYWRJbnQzMigpOworICAgIH0KKworICAgIHZpcnR1YWwgc3RhdHVzX3QgcmVtb3ZlT2ZmbGluZUxpY2Vuc2UoVmVjdG9yPHVpbnQ4X3Q+IGNvbnN0ICZrZXlTZXRJZCkgeworICAgICAgICBQYXJjZWwgZGF0YSwgcmVwbHk7CisgICAgICAgIGRhdGEud3JpdGVJbnRlcmZhY2VUb2tlbihJRHJtOjpnZXRJbnRlcmZhY2VEZXNjcmlwdG9yKCkpOworCisgICAgICAgIHdyaXRlVmVjdG9yKGRhdGEsIGtleVNldElkKTsKKyAgICAgICAgc3RhdHVzX3Qgc3RhdHVzID0gcmVtb3RlKCktPnRyYW5zYWN0KFJFTU9WRV9PRkZMSU5FX0xJQ0VOU0UsIGRhdGEsICZyZXBseSk7CisgICAgICAgIGlmIChzdGF0dXMgIT0gT0spIHsKKyAgICAgICAgICAgIHJldHVybiBzdGF0dXM7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHJlcGx5LnJlYWRJbnQzMigpOworICAgIH0KKworICAgIHZpcnR1YWwgc3RhdHVzX3QgZ2V0T2ZmbGluZUxpY2Vuc2VTdGF0ZShWZWN0b3I8dWludDhfdD4gY29uc3QgJmtleVNldElkLAorICAgICAgICAgICAgRHJtUGx1Z2luOjpPZmZsaW5lTGljZW5zZVN0YXRlICpsaWNlbnNlU3RhdGUpIGNvbnN0IHsKKyAgICAgICAgUGFyY2VsIGRhdGEsIHJlcGx5OworICAgICAgICBkYXRhLndyaXRlSW50ZXJmYWNlVG9rZW4oSURybTo6Z2V0SW50ZXJmYWNlRGVzY3JpcHRvcigpKTsKKworICAgICAgICB3cml0ZVZlY3RvcihkYXRhLCBrZXlTZXRJZCk7CisgICAgICAgIHN0YXR1c190IHN0YXR1cyA9IHJlbW90ZSgpLT50cmFuc2FjdChHRVRfT0ZGTElORV9MSUNFTlNFX1NUQVRFLCBkYXRhLCAmcmVwbHkpOworICAgICAgICBpZiAoc3RhdHVzICE9IE9LKSB7CisgICAgICAgICAgICAqbGljZW5zZVN0YXRlID0gRHJtUGx1Z2luOjpPZmZsaW5lTGljZW5zZVN0YXRlOjprT2ZmbGluZUxpY2Vuc2VTdGF0ZVVua25vd247CisgICAgICAgICAgICByZXR1cm4gc3RhdHVzOworICAgICAgICB9CisgICAgICAgICpsaWNlbnNlU3RhdGUgPSBzdGF0aWNfY2FzdDxEcm1QbHVnaW46Ok9mZmxpbmVMaWNlbnNlU3RhdGU+KHJlcGx5LnJlYWRJbnQzMigpKTsKKyAgICAgICAgcmV0dXJuIHJlcGx5LnJlYWRJbnQzMigpOworICAgIH0KKwogICAgIHZpcnR1YWwgc3RhdHVzX3QgZ2V0UHJvcGVydHlTdHJpbmcoU3RyaW5nOCBjb25zdCAmbmFtZSwgU3RyaW5nOCAmdmFsdWUpIGNvbnN0IHsKICAgICAgICAgUGFyY2VsIGRhdGEsIHJlcGx5OwogICAgICAgICBkYXRhLndyaXRlSW50ZXJmYWNlVG9rZW4oSURybTo6Z2V0SW50ZXJmYWNlRGVzY3JpcHRvcigpKTsKQEAgLTk4MCw2ICsxMDI5LDQ1IEBACiAgICAgICAgICAgICByZXR1cm4gT0s7CiAgICAgICAgIH0KIAorICAgICAgICBjYXNlIEdFVF9PRkZMSU5FX0xJQ0VOU0VfS0VZU0VUX0lEUzoKKyAgICAgICAgeworICAgICAgICAgICAgQ0hFQ0tfSU5URVJGQUNFKElEcm0sIGRhdGEsIHJlcGx5KTsKKyAgICAgICAgICAgIExpc3Q8VmVjdG9yPHVpbnQ4X3Q+ID4ga2V5U2V0SWRzOworICAgICAgICAgICAgc3RhdHVzX3QgcmVzdWx0ID0gZ2V0T2ZmbGluZUxpY2Vuc2VLZXlTZXRJZHMoa2V5U2V0SWRzKTsKKyAgICAgICAgICAgIHNpemVfdCBjb3VudCA9IGtleVNldElkcy5zaXplKCk7CisgICAgICAgICAgICByZXBseS0+d3JpdGVJbnQzMihjb3VudCk7CisgICAgICAgICAgICBMaXN0PFZlY3Rvcjx1aW50OF90PiA+OjppdGVyYXRvciBpdGVyID0ga2V5U2V0SWRzLmJlZ2luKCk7CisgICAgICAgICAgICB3aGlsZShpdGVyICE9IGtleVNldElkcy5lbmQoKSkgeworICAgICAgICAgICAgICAgIHNpemVfdCBzaXplID0gaXRlci0+c2l6ZSgpOworICAgICAgICAgICAgICAgIHJlcGx5LT53cml0ZUludDMyKHNpemUpOworICAgICAgICAgICAgICAgIHJlcGx5LT53cml0ZShpdGVyLT5hcnJheSgpLCBpdGVyLT5zaXplKCkpOworICAgICAgICAgICAgICAgIGl0ZXIrKzsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJlcGx5LT53cml0ZUludDMyKHJlc3VsdCk7CisgICAgICAgICAgICByZXR1cm4gT0s7CisgICAgICAgIH0KKworICAgICAgICBjYXNlIFJFTU9WRV9PRkZMSU5FX0xJQ0VOU0U6CisgICAgICAgIHsKKyAgICAgICAgICAgIENIRUNLX0lOVEVSRkFDRShJRHJtLCBkYXRhLCByZXBseSk7CisgICAgICAgICAgICBWZWN0b3I8dWludDhfdD4ga2V5U2V0SWQ7CisgICAgICAgICAgICByZWFkVmVjdG9yKGRhdGEsIGtleVNldElkKTsKKyAgICAgICAgICAgIHJlcGx5LT53cml0ZUludDMyKHJlbW92ZU9mZmxpbmVMaWNlbnNlKGtleVNldElkKSk7CisgICAgICAgICAgICByZXR1cm4gT0s7CisgICAgICAgIH0KKworICAgICAgICBjYXNlIEdFVF9PRkZMSU5FX0xJQ0VOU0VfU1RBVEU6CisgICAgICAgIHsKKyAgICAgICAgICAgIENIRUNLX0lOVEVSRkFDRShJRHJtLCBkYXRhLCByZXBseSk7CisgICAgICAgICAgICBWZWN0b3I8dWludDhfdD4ga2V5U2V0SWQ7CisgICAgICAgICAgICByZWFkVmVjdG9yKGRhdGEsIGtleVNldElkKTsKKyAgICAgICAgICAgIERybVBsdWdpbjo6T2ZmbGluZUxpY2Vuc2VTdGF0ZSBzdGF0ZTsKKyAgICAgICAgICAgIHN0YXR1c190IHJlc3VsdCA9IGdldE9mZmxpbmVMaWNlbnNlU3RhdGUoa2V5U2V0SWQsICZzdGF0ZSk7CisgICAgICAgICAgICByZXBseS0+d3JpdGVJbnQzMihzdGF0aWNfY2FzdDxEcm1QbHVnaW46Ok9mZmxpbmVMaWNlbnNlU3RhdGU+KHN0YXRlKSk7CisgICAgICAgICAgICByZXBseS0+d3JpdGVJbnQzMihyZXN1bHQpOworICAgICAgICAgICAgcmV0dXJuIE9LOworICAgICAgICB9CisKICAgICAgICAgY2FzZSBHRVRfUFJPUEVSVFlfU1RSSU5HOgogICAgICAgICB7CiAgICAgICAgICAgICBDSEVDS19JTlRFUkZBQ0UoSURybSwgZGF0YSwgcmVwbHkpOwpkaWZmIC0tZ2l0IGEvZHJtL2xpYm1lZGlhZHJtL3Rlc3RzL0FuZHJvaWQuYnAgYi9kcm0vbGlibWVkaWFkcm0vdGVzdHMvQW5kcm9pZC5icAppbmRleCA2NmM5MDZmLi5kY2Q1OWI3IDEwMDY0NAotLS0gYS9kcm0vbGlibWVkaWFkcm0vdGVzdHMvQW5kcm9pZC5icAorKysgYi9kcm0vbGlibWVkaWFkcm0vdGVzdHMvQW5kcm9pZC5icApAQCAtMTcsNiArMTcsNyBAQAogICAgIHNoYXJlZF9saWJzOiBbCiAgICAgICAiYW5kcm9pZC5oYXJkd2FyZS5kcm1AMS4wIiwKICAgICAgICJhbmRyb2lkLmhhcmR3YXJlLmRybUAxLjEiLAorICAgICAgImFuZHJvaWQuaGFyZHdhcmUuZHJtQDEuMiIsCiAgICAgICAibGliYmluZGVyIiwKICAgICAgICJsaWJoaWRsYmFzZSIsCiAgICAgICAibGlibG9nIiwKZGlmZiAtLWdpdCBhL2RybS9tZWRpYWRybS9wbHVnaW5zL2NsZWFya2V5L2NvbW1vbi9VdGlscy5jcHAgYi9kcm0vbWVkaWFkcm0vcGx1Z2lucy9jbGVhcmtleS9jb21tb24vVXRpbHMuY3BwCmluZGV4IDkzYzY0M2IuLmQ0OGIwYTggMTAwNjQ0Ci0tLSBhL2RybS9tZWRpYWRybS9wbHVnaW5zL2NsZWFya2V5L2NvbW1vbi9VdGlscy5jcHAKKysrIGIvZHJtL21lZGlhZHJtL3BsdWdpbnMvY2xlYXJrZXkvY29tbW9uL1V0aWxzLmNwcApAQCAtMjcsNCArMjcsMTggQEAKICAgICByZXR1cm4gbWVtY21wKCh2b2lkICopbGhzLmFycmF5KCksICh2b2lkICopcmhzLmFycmF5KCksIHJocy5zaXplKCkpIDwgMDsKIH0KIAorc3RkOjpzdHJpbmcgQnl0ZUFycmF5VG9IZXhTdHJpbmcoY29uc3QgdWludDhfdCogaW5fYnVmZmVyLCBzaXplX3QgbGVuZ3RoKSB7CisgICAgc3RhdGljIGNvbnN0IGNoYXIga0hleENoYXJzW10gPSAiMDEyMzQ1Njc4OUFCQ0RFRiI7CisKKyAgICAvLyBFYWNoIGlucHV0IGJ5dGUgY3JlYXRlcyB0d28gb3V0cHV0IGhleCBjaGFyYWN0ZXJzLgorICAgIHN0ZDo6c3RyaW5nIG91dF9idWZmZXIobGVuZ3RoICogMiwgJ1wwJyk7CisKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGxlbmd0aDsgKytpKSB7CisgICAgICAgIGNoYXIgYnl0ZSA9IGluX2J1ZmZlcltpXTsKKyAgICAgICAgb3V0X2J1ZmZlclsoaSAqIDIpXSA9IGtIZXhDaGFyc1soYnl0ZSA+PiA0KSAmIDB4Zl07CisgICAgICAgIG91dF9idWZmZXJbKGkgKiAyKSArIDFdID0ga0hleENoYXJzW2J5dGUgJiAweGZdOworICAgIH0KKyAgICByZXR1cm4gb3V0X2J1ZmZlcjsKK30KKwogfSAvLyBuYW1lc3BhY2UgYW5kcm9pZApkaWZmIC0tZ2l0IGEvZHJtL21lZGlhZHJtL3BsdWdpbnMvY2xlYXJrZXkvY29tbW9uL2luY2x1ZGUvVXRpbHMuaCBiL2RybS9tZWRpYWRybS9wbHVnaW5zL2NsZWFya2V5L2NvbW1vbi9pbmNsdWRlL1V0aWxzLmgKaW5kZXggMjU0MzEyNC4uYWE1NzFjMCAxMDA2NDQKLS0tIGEvZHJtL21lZGlhZHJtL3BsdWdpbnMvY2xlYXJrZXkvY29tbW9uL2luY2x1ZGUvVXRpbHMuaAorKysgYi9kcm0vbWVkaWFkcm0vcGx1Z2lucy9jbGVhcmtleS9jb21tb24vaW5jbHVkZS9VdGlscy5oCkBAIC0xNywxNCArMTcsMTYgQEAKICNpZm5kZWYgQ0xFQVJLRVlfVVRJTFNfSF8KICNkZWZpbmUgQ0xFQVJLRVlfVVRJTFNfSF8KIAorI2luY2x1ZGUgPHN0cmluZz4KICNpbmNsdWRlIDx1dGlscy9WZWN0b3IuaD4KIAorbmFtZXNwYWNlIGFuZHJvaWQgewogLy8gQWRkIGEgY29tcGFyaXNvbiBvcGVyYXRvciBmb3IgdGhpcyBWZWN0b3Igc3BlY2lhbGl6YXRpb24gc28gdGhhdCBpdCBjYW4gYmUKIC8vIHVzZWQgYXMgYSBrZXkgaW4gYSBLZXllZFZlY3Rvci4KLW5hbWVzcGFjZSBhbmRyb2lkIHsKLQogYm9vbCBvcGVyYXRvcjwoY29uc3QgVmVjdG9yPHVpbnQ4X3Q+ICZsaHMsIGNvbnN0IFZlY3Rvcjx1aW50OF90PiAmcmhzKTsKIAorc3RkOjpzdHJpbmcgQnl0ZUFycmF5VG9IZXhTdHJpbmcoY29uc3QgdWludDhfdCogaW5fYnVmZmVyLCBzaXplX3QgbGVuZ3RoKTsKKwogfSAvLyBuYW1lc3BhY2UgYW5kcm9pZAogCiAjZGVmaW5lIFVOVVNFRCh4KSAodm9pZCkoeCk7CmRpZmYgLS1naXQgYS9kcm0vbWVkaWFkcm0vcGx1Z2lucy9jbGVhcmtleS9oaWRsL0Flc0N0ckRlY3J5cHRvci5jcHAgYi9kcm0vbWVkaWFkcm0vcGx1Z2lucy9jbGVhcmtleS9oaWRsL0Flc0N0ckRlY3J5cHRvci5jcHAKaW5kZXggMmZjZTA3OTAuLjBhYzg3OWMgMTAwNjQ0Ci0tLSBhL2RybS9tZWRpYWRybS9wbHVnaW5zL2NsZWFya2V5L2hpZGwvQWVzQ3RyRGVjcnlwdG9yLmNwcAorKysgYi9kcm0vbWVkaWFkcm0vcGx1Z2lucy9jbGVhcmtleS9oaWRsL0Flc0N0ckRlY3J5cHRvci5jcHAKQEAgLTI2LDcgKzI2LDcgQEAKIG5hbWVzcGFjZSBhbmRyb2lkIHsKIG5hbWVzcGFjZSBoYXJkd2FyZSB7CiBuYW1lc3BhY2UgZHJtIHsKLW5hbWVzcGFjZSBWMV8xIHsKK25hbWVzcGFjZSBWMV8yIHsKIG5hbWVzcGFjZSBjbGVhcmtleSB7CiAKIHVzaW5nIDo6YW5kcm9pZDo6aGFyZHdhcmU6OmRybTo6VjFfMDo6U3ViU2FtcGxlOwpAQCAtNzksNyArNzksNyBAQAogfQogCiB9IC8vIG5hbWVzcGFjZSBjbGVhcmtleQotfSAvLyBuYW1lc3BhY2UgVjFfMQorfSAvLyBuYW1lc3BhY2UgVjFfMgogfSAvLyBuYW1lc3BhY2UgZHJtCiB9IC8vIG5hbWVzcGFjZSBoYXJkd2FyZQogfSAvLyBuYW1lc3BhY2UgYW5kcm9pZApkaWZmIC0tZ2l0IGEvZHJtL21lZGlhZHJtL3BsdWdpbnMvY2xlYXJrZXkvaGlkbC9BbmRyb2lkLmJwIGIvZHJtL21lZGlhZHJtL3BsdWdpbnMvY2xlYXJrZXkvaGlkbC9BbmRyb2lkLmJwCmluZGV4IDM0MWQ0ZjYuLmI0NGE2YzcgMTAwNjQ0Ci0tLSBhL2RybS9tZWRpYWRybS9wbHVnaW5zL2NsZWFya2V5L2hpZGwvQW5kcm9pZC5icAorKysgYi9kcm0vbWVkaWFkcm0vcGx1Z2lucy9jbGVhcmtleS9oaWRsL0FuZHJvaWQuYnAKQEAgLTE1LDcgKzE1LDcgQEAKIC8vCiAKIGNjX2JpbmFyeSB7Ci0gICAgbmFtZTogImFuZHJvaWQuaGFyZHdhcmUuZHJtQDEuMS1zZXJ2aWNlLmNsZWFya2V5IiwKKyAgICBuYW1lOiAiYW5kcm9pZC5oYXJkd2FyZS5kcm1AMS4yLXNlcnZpY2UuY2xlYXJrZXkiLAogICAgIHZlbmRvcjogdHJ1ZSwKIAogICAgIHNyY3M6IFsKQEAgLTI1LDEwICsyNSwxMiBAQAogICAgICAgICAiQ3JlYXRlUGx1Z2luRmFjdG9yaWVzLmNwcCIsCiAgICAgICAgICJDcnlwdG9GYWN0b3J5LmNwcCIsCiAgICAgICAgICJDcnlwdG9QbHVnaW4uY3BwIiwKKyAgICAgICAgIkRldmljZUZpbGVzLmNwcCIsCiAgICAgICAgICJEcm1GYWN0b3J5LmNwcCIsCiAgICAgICAgICJEcm1QbHVnaW4uY3BwIiwKICAgICAgICAgIkluaXREYXRhUGFyc2VyLmNwcCIsCiAgICAgICAgICJKc29uV2ViS2V5LmNwcCIsCisgICAgICAgICJNZW1vcnlGaWxlU3lzdGVtLmNwcCIsCiAgICAgICAgICJTZXNzaW9uLmNwcCIsCiAgICAgICAgICJTZXNzaW9uTGlicmFyeS5jcHAiLAogICAgICAgICAic2VydmljZS5jcHAiLApAQCAtMzcsMTEgKzM5LDEyIEBACiAgICAgcmVsYXRpdmVfaW5zdGFsbF9wYXRoOiAiaHciLAogCiAgICAgY2ZsYWdzOiBbIi1XYWxsIiwgIi1XZXJyb3IiXSwKLSAgICBpbml0X3JjOiBbImFuZHJvaWQuaGFyZHdhcmUuZHJtQDEuMS1zZXJ2aWNlLmNsZWFya2V5LnJjIl0sCisgICAgaW5pdF9yYzogWyJhbmRyb2lkLmhhcmR3YXJlLmRybUAxLjItc2VydmljZS5jbGVhcmtleS5yYyJdLAogCiAgICAgc2hhcmVkX2xpYnM6IFsKICAgICAgICAgImFuZHJvaWQuaGFyZHdhcmUuZHJtQDEuMCIsCiAgICAgICAgICJhbmRyb2lkLmhhcmR3YXJlLmRybUAxLjEiLAorICAgICAgICAiYW5kcm9pZC5oYXJkd2FyZS5kcm1AMS4yIiwKICAgICAgICAgImxpYmJhc2UiLAogICAgICAgICAibGliYmluZGVyIiwKICAgICAgICAgImxpYmNyeXB0byIsCkBAIC00OSwxMSArNTIsMTMgQEAKICAgICAgICAgImxpYmhpZGxtZW1vcnkiLAogICAgICAgICAibGliaGlkbHRyYW5zcG9ydCIsCiAgICAgICAgICJsaWJsb2ciLAorICAgICAgICAibGlicHJvdG9idWYtY3BwLWxpdGUiLAogICAgICAgICAibGlidXRpbHMiLAogICAgIF0sCiAKICAgICBzdGF0aWNfbGliczogWwogICAgICAgICAibGliY2xlYXJrZXljb21tb24iLAorICAgICAgICAibGliY2xlYXJrZXlkZXZpY2VmaWxlcy1wcm90b3MiLAogICAgICAgICAibGlianNtbiIsCiAgICAgXSwKIApAQCAtNjUsNCArNzAsMTMgQEAKICAgICAgICAgaW50ZWdlcl9vdmVyZmxvdzogdHJ1ZSwKICAgICB9LAogfQorY2NfbGlicmFyeV9zdGF0aWMgeworICAgIG5hbWU6ICJsaWJjbGVhcmtleWRldmljZWZpbGVzLXByb3RvcyIsCisgICAgdmVuZG9yOiB0cnVlLAogCisgICAgcHJvdG86IHsKKyAgICAgICAgZXhwb3J0X3Byb3RvX2hlYWRlcnM6IHRydWUsCisgICAgICAgIHR5cGU6ICJsaXRlIiwKKyAgICB9LAorICAgIHNyY3M6IFsicHJvdG9zL0RldmljZUZpbGVzLnByb3RvIl0sCit9CmRpZmYgLS1naXQgYS9kcm0vbWVkaWFkcm0vcGx1Z2lucy9jbGVhcmtleS9oaWRsL0Jhc2U2NC5jcHAgYi9kcm0vbWVkaWFkcm0vcGx1Z2lucy9jbGVhcmtleS9oaWRsL0Jhc2U2NC5jcHAKaW5kZXggYzJlZDc1MS4uNjU3YTQyZiAxMDA2NDQKLS0tIGEvZHJtL21lZGlhZHJtL3BsdWdpbnMvY2xlYXJrZXkvaGlkbC9CYXNlNjQuY3BwCisrKyBiL2RybS9tZWRpYWRybS9wbHVnaW5zL2NsZWFya2V5L2hpZGwvQmFzZTY0LmNwcApAQCAtMjEsNyArMjEsNyBAQAogbmFtZXNwYWNlIGFuZHJvaWQgewogbmFtZXNwYWNlIGhhcmR3YXJlIHsKIG5hbWVzcGFjZSBkcm0gewotbmFtZXNwYWNlIFYxXzEgeworbmFtZXNwYWNlIFYxXzIgewogbmFtZXNwYWNlIGNsZWFya2V5IHsKIAogc3A8QnVmZmVyPiBkZWNvZGVCYXNlNjQoY29uc3Qgc3RkOjpzdHJpbmcgJnMpIHsKQEAgLTE2OSw3ICsxNjksNyBAQAogfQogCiB9IC8vIG5hbWVzcGFjZSBjbGVhcmtleQotfSAvLyBuYW1lc3BhY2UgVjFfMQorfSAvLyBuYW1lc3BhY2UgVjFfMgogfSAvLyBuYW1lc3BhY2UgZHJtCiB9IC8vIG5hbWVzcGFjZSBoYXJkd2FyZQogfSAvLyBuYW1lc3BhY2UgYW5kcm9pZApkaWZmIC0tZ2l0IGEvZHJtL21lZGlhZHJtL3BsdWdpbnMvY2xlYXJrZXkvaGlkbC9CdWZmZXIuY3BwIGIvZHJtL21lZGlhZHJtL3BsdWdpbnMvY2xlYXJrZXkvaGlkbC9CdWZmZXIuY3BwCmluZGV4IGU1OGY1OGEuLjc1ZjgzOTUgMTAwNjQ0Ci0tLSBhL2RybS9tZWRpYWRybS9wbHVnaW5zL2NsZWFya2V5L2hpZGwvQnVmZmVyLmNwcAorKysgYi9kcm0vbWVkaWFkcm0vcGx1Z2lucy9jbGVhcmtleS9oaWRsL0J1ZmZlci5jcHAKQEAgLTIxLDcgKzIxLDcgQEAKIG5hbWVzcGFjZSBhbmRyb2lkIHsKIG5hbWVzcGFjZSBoYXJkd2FyZSB7CiBuYW1lc3BhY2UgZHJtIHsKLW5hbWVzcGFjZSBWMV8xIHsKK25hbWVzcGFjZSBWMV8yIHsKIG5hbWVzcGFjZSBjbGVhcmtleSB7CiAKIEJ1ZmZlcjo6QnVmZmVyKHNpemVfdCBjYXBhY2l0eSkKQEAgLTQ3LDcgKzQ3LDcgQEAKIH0KIAogfSAvLyBuYW1lc3BhY2UgY2xlYXJrZXkKLX0gLy8gbmFtZXNwYWNlIFYxXzEKK30gLy8gbmFtZXNwYWNlIFYxXzIKIH0gLy8gbmFtZXNwYWNlIGRybQogfSAvLyBuYW1lc3BhY2UgaGFyZHdhcmUKIH0gLy8gbmFtZXNwYWNlIGFuZHJvaWQKZGlmZiAtLWdpdCBhL2RybS9tZWRpYWRybS9wbHVnaW5zL2NsZWFya2V5L2hpZGwvQ3JlYXRlUGx1Z2luRmFjdG9yaWVzLmNwcCBiL2RybS9tZWRpYWRybS9wbHVnaW5zL2NsZWFya2V5L2hpZGwvQ3JlYXRlUGx1Z2luRmFjdG9yaWVzLmNwcAppbmRleCAxYmE1YzZhLi4xNDEwZDc3IDEwMDY0NAotLS0gYS9kcm0vbWVkaWFkcm0vcGx1Z2lucy9jbGVhcmtleS9oaWRsL0NyZWF0ZVBsdWdpbkZhY3Rvcmllcy5jcHAKKysrIGIvZHJtL21lZGlhZHJtL3BsdWdpbnMvY2xlYXJrZXkvaGlkbC9DcmVhdGVQbHVnaW5GYWN0b3JpZXMuY3BwCkBAIC0yMiw3ICsyMiw3IEBACiBuYW1lc3BhY2UgYW5kcm9pZCB7CiBuYW1lc3BhY2UgaGFyZHdhcmUgewogbmFtZXNwYWNlIGRybSB7Ci1uYW1lc3BhY2UgVjFfMSB7CituYW1lc3BhY2UgVjFfMiB7CiBuYW1lc3BhY2UgY2xlYXJrZXkgewogCiBleHRlcm4gIkMiIHsKQEAgLTM4LDcgKzM4LDcgQEAKIH0gLy8gZXh0ZXJuICJDIgogCiB9ICAvLyBuYW1lc3BhY2UgY2xlYXJrZXkKLX0gIC8vIG5hbWVzcGFjZSBWMV8xCit9ICAvLyBuYW1lc3BhY2UgVjFfMgogfSAgLy8gbmFtZXNwYWNlIGRybQogfSAgLy8gbmFtZXNwYWNlIGhhcmR3YXJlCiB9ICAvLyBuYW1lc3BhY2UgYW5kcm9pZApkaWZmIC0tZ2l0IGEvZHJtL21lZGlhZHJtL3BsdWdpbnMvY2xlYXJrZXkvaGlkbC9DcnlwdG9GYWN0b3J5LmNwcCBiL2RybS9tZWRpYWRybS9wbHVnaW5zL2NsZWFya2V5L2hpZGwvQ3J5cHRvRmFjdG9yeS5jcHAKaW5kZXggMDg0OGNlZi4uMmE0OGRiNiAxMDA2NDQKLS0tIGEvZHJtL21lZGlhZHJtL3BsdWdpbnMvY2xlYXJrZXkvaGlkbC9DcnlwdG9GYWN0b3J5LmNwcAorKysgYi9kcm0vbWVkaWFkcm0vcGx1Z2lucy9jbGVhcmtleS9oaWRsL0NyeXB0b0ZhY3RvcnkuY3BwCkBAIC0yNyw3ICsyNyw3IEBACiBuYW1lc3BhY2UgYW5kcm9pZCB7CiBuYW1lc3BhY2UgaGFyZHdhcmUgewogbmFtZXNwYWNlIGRybSB7Ci1uYW1lc3BhY2UgVjFfMSB7CituYW1lc3BhY2UgVjFfMiB7CiBuYW1lc3BhY2UgY2xlYXJrZXkgewogCiBSZXR1cm48Ym9vbD4gQ3J5cHRvRmFjdG9yeTo6aXNDcnlwdG9TY2hlbWVTdXBwb3J0ZWQoCkBAIC02MCw3ICs2MCw3IEBACiB9CiAKIH0gLy8gbmFtZXNwYWNlIGNsZWFya2V5Ci19IC8vIG5hbWVzcGFjZSBWMV8xCit9IC8vIG5hbWVzcGFjZSBWMV8yCiB9IC8vIG5hbWVzcGFjZSBkcm0KIH0gLy8gbmFtZXNwYWNlIGhhcmR3YXJlCiB9IC8vIG5hbWVzcGFjZSBhbmRyb2lkCmRpZmYgLS1naXQgYS9kcm0vbWVkaWFkcm0vcGx1Z2lucy9jbGVhcmtleS9oaWRsL0NyeXB0b1BsdWdpbi5jcHAgYi9kcm0vbWVkaWFkcm0vcGx1Z2lucy9jbGVhcmtleS9oaWRsL0NyeXB0b1BsdWdpbi5jcHAKaW5kZXggZjMzZjk0ZS4uYTQ4OGY4NiAxMDA2NDQKLS0tIGEvZHJtL21lZGlhZHJtL3BsdWdpbnMvY2xlYXJrZXkvaGlkbC9DcnlwdG9QbHVnaW4uY3BwCisrKyBiL2RybS9tZWRpYWRybS9wbHVnaW5zL2NsZWFya2V5L2hpZGwvQ3J5cHRvUGx1Z2luLmNwcApAQCAtMjcsNyArMjcsNyBAQAogbmFtZXNwYWNlIGFuZHJvaWQgewogbmFtZXNwYWNlIGhhcmR3YXJlIHsKIG5hbWVzcGFjZSBkcm0gewotbmFtZXNwYWNlIFYxXzEgeworbmFtZXNwYWNlIFYxXzIgewogbmFtZXNwYWNlIGNsZWFya2V5IHsKIAogdXNpbmcgOjphbmRyb2lkOjpoYXJkd2FyZTo6ZHJtOjpWMV8wOjpCdWZmZXJUeXBlOwpAQCAtMTc5LDcgKzE3OSw3IEBACiB9CiAKIH0gLy8gbmFtZXNwYWNlIGNsZWFya2V5Ci19IC8vIG5hbWVzcGFjZSBWMV8xCit9IC8vIG5hbWVzcGFjZSBWMV8yCiB9IC8vIG5hbWVzcGFjZSBkcm0KIH0gLy8gbmFtZXNwYWNlIGhhcmR3YXJlCiB9IC8vIG5hbWVzcGFjZSBhbmRyb2lkCmRpZmYgLS1naXQgYS9kcm0vbWVkaWFkcm0vcGx1Z2lucy9jbGVhcmtleS9oaWRsL0RldmljZUZpbGVzLmNwcCBiL2RybS9tZWRpYWRybS9wbHVnaW5zL2NsZWFya2V5L2hpZGwvRGV2aWNlRmlsZXMuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI0MTViNmYKLS0tIC9kZXYvbnVsbAorKysgYi9kcm0vbWVkaWFkcm0vcGx1Z2lucy9jbGVhcmtleS9oaWRsL0RldmljZUZpbGVzLmNwcApAQCAtMCwwICsxLDI1MiBAQAorLy8gQ29weXJpZ2h0IDIwMTggR29vZ2xlIExMQy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4gVGhpcyBmaWxlIGFuZCBwcm9wcmlldGFyeQorLy8gc291cmNlIGNvZGUgbWF5IG9ubHkgYmUgdXNlZCBhbmQgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIFdpZGV2aW5lIE1hc3RlcgorLy8gTGljZW5zZSBBZ3JlZW1lbnQuCisKKyNpbmNsdWRlIDx1dGlscy9Mb2cuaD4KKworI2luY2x1ZGUgPHN0cmluZz4KKyNpbmNsdWRlIDxzeXMvc3RhdC5oPgorCisjaW5jbHVkZSAiRGV2aWNlRmlsZXMuaCIKKyNpbmNsdWRlICJVdGlscy5oIgorCisjaW5jbHVkZSA8b3BlbnNzbC9zaGEuaD4KKworLy8gUHJvdG9idWYgZ2VuZXJhdGVkIGNsYXNzZXMuCit1c2luZyBhbmRyb2lkOjpoYXJkd2FyZTo6ZHJtOjpWMV8yOjpjbGVhcmtleTo6T2ZmbGluZUZpbGU7Cit1c2luZyBhbmRyb2lkOjpoYXJkd2FyZTo6ZHJtOjpWMV8yOjpjbGVhcmtleTo6SGFzaGVkRmlsZTsKK3VzaW5nIGFuZHJvaWQ6OmhhcmR3YXJlOjpkcm06OlYxXzI6OmNsZWFya2V5OjpMaWNlbnNlOwordXNpbmcgYW5kcm9pZDo6aGFyZHdhcmU6OmRybTo6VjFfMjo6Y2xlYXJrZXk6OkxpY2Vuc2VfTGljZW5zZVN0YXRlX0FDVElWRTsKK3VzaW5nIGFuZHJvaWQ6OmhhcmR3YXJlOjpkcm06OlYxXzI6OmNsZWFya2V5OjpMaWNlbnNlX0xpY2Vuc2VTdGF0ZV9SRUxFQVNJTkc7CisKK25hbWVzcGFjZSB7Citjb25zdCBjaGFyIGtMaWNlbnNlRmlsZU5hbWVFeHRbXSA9ICIubGljIjsKKworYm9vbCBIYXNoKGNvbnN0IHN0ZDo6c3RyaW5nJiBkYXRhLCBzdGQ6OnN0cmluZyogaGFzaCkgeworICAgIGlmICghaGFzaCkgcmV0dXJuIGZhbHNlOworCisgICAgaGFzaC0+cmVzaXplKFNIQTI1Nl9ESUdFU1RfTEVOR1RIKTsKKworICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIqIGlucHV0ID0gcmVpbnRlcnByZXRfY2FzdDxjb25zdCB1bnNpZ25lZCBjaGFyKj4oZGF0YS5kYXRhKCkpOworICAgIHVuc2lnbmVkIGNoYXIqIG91dHB1dCA9IHJlaW50ZXJwcmV0X2Nhc3Q8dW5zaWduZWQgY2hhcio+KCYoKmhhc2gpWzBdKTsKKyAgICBTSEEyNTYoaW5wdXQsIGRhdGEuc2l6ZSgpLCBvdXRwdXQpOworICAgIHJldHVybiB0cnVlOworfQorCit9ICAvLyBuYW1lc3BhY2UKKworbmFtZXNwYWNlIGFuZHJvaWQgeworbmFtZXNwYWNlIGhhcmR3YXJlIHsKK25hbWVzcGFjZSBkcm0geworbmFtZXNwYWNlIFYxXzIgeworbmFtZXNwYWNlIGNsZWFya2V5IHsKKworYm9vbCBEZXZpY2VGaWxlczo6U3RvcmVMaWNlbnNlKAorICAgICAgICBjb25zdCBzdGQ6OnN0cmluZyYga2V5U2V0SWQsIExpY2Vuc2VTdGF0ZSBzdGF0ZSwKKyAgICAgICAgY29uc3Qgc3RkOjpzdHJpbmcmIGxpY2Vuc2VSZXNwb25zZSkgeworCisgICAgT2ZmbGluZUZpbGUgZmlsZTsKKyAgICBmaWxlLnNldF90eXBlKE9mZmxpbmVGaWxlOjpMSUNFTlNFKTsKKyAgICBmaWxlLnNldF92ZXJzaW9uKE9mZmxpbmVGaWxlOjpWRVJTSU9OXzEpOworCisgICAgTGljZW5zZSogbGljZW5zZSA9IGZpbGUubXV0YWJsZV9saWNlbnNlKCk7CisgICAgc3dpdGNoIChzdGF0ZSkgeworICAgICAgICBjYXNlIGtMaWNlbnNlU3RhdGVBY3RpdmU6CisgICAgICAgICAgICBsaWNlbnNlLT5zZXRfc3RhdGUoTGljZW5zZV9MaWNlbnNlU3RhdGVfQUNUSVZFKTsKKyAgICAgICAgICAgIGxpY2Vuc2UtPnNldF9saWNlbnNlKGxpY2Vuc2VSZXNwb25zZSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBrTGljZW5zZVN0YXRlUmVsZWFzaW5nOgorICAgICAgICAgICAgbGljZW5zZS0+c2V0X3N0YXRlKExpY2Vuc2VfTGljZW5zZVN0YXRlX1JFTEVBU0lORyk7CisgICAgICAgICAgICBsaWNlbnNlLT5zZXRfbGljZW5zZShsaWNlbnNlUmVzcG9uc2UpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBBTE9HVygiU3RvcmVMaWNlbnNlOiBVbmtub3duIGxpY2Vuc2Ugc3RhdGU6ICV1Iiwgc3RhdGUpOworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIHN0ZDo6c3RyaW5nIHNlcmlhbGl6ZWRGaWxlOworICAgIGZpbGUuU2VyaWFsaXplVG9TdHJpbmcoJnNlcmlhbGl6ZWRGaWxlKTsKKworICAgIHJldHVybiBTdG9yZUZpbGVXaXRoSGFzaChrZXlTZXRJZCArIGtMaWNlbnNlRmlsZU5hbWVFeHQsIHNlcmlhbGl6ZWRGaWxlKTsKK30KKworYm9vbCBEZXZpY2VGaWxlczo6U3RvcmVGaWxlV2l0aEhhc2goY29uc3Qgc3RkOjpzdHJpbmcmIGZpbGVOYW1lLAorICAgICAgICBjb25zdCBzdGQ6OnN0cmluZyYgc2VyaWFsaXplZEZpbGUpIHsKKyAgICBzdGQ6OnN0cmluZyBoYXNoOworICAgIGlmICghSGFzaChzZXJpYWxpemVkRmlsZSwgJmhhc2gpKSB7CisgICAgICAgIEFMT0dFKCJTdG9yZUZpbGVXaXRoSGFzaDogRmFpbGVkIHRvIGNvbXB1dGUgaGFzaCIpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgSGFzaGVkRmlsZSBoYXNoRmlsZTsKKyAgICBoYXNoRmlsZS5zZXRfZmlsZShzZXJpYWxpemVkRmlsZSk7CisgICAgaGFzaEZpbGUuc2V0X2hhc2goaGFzaCk7CisKKyAgICBzdGQ6OnN0cmluZyBzZXJpYWxpemVkSGFzaEZpbGU7CisgICAgaGFzaEZpbGUuU2VyaWFsaXplVG9TdHJpbmcoJnNlcmlhbGl6ZWRIYXNoRmlsZSk7CisKKyAgICByZXR1cm4gU3RvcmVGaWxlUmF3KGZpbGVOYW1lLCBzZXJpYWxpemVkSGFzaEZpbGUpOworfQorCitib29sIERldmljZUZpbGVzOjpTdG9yZUZpbGVSYXcoY29uc3Qgc3RkOjpzdHJpbmcmIGZpbGVOYW1lLCBjb25zdCBzdGQ6OnN0cmluZyYgc2VyaWFsaXplZEhhc2hGaWxlKSB7CisgICAgTWVtb3J5RmlsZVN5c3RlbTo6TWVtb3J5RmlsZSBtZW1GaWxlOworICAgIG1lbUZpbGUuc2V0RmlsZU5hbWUoZmlsZU5hbWUpOworICAgIG1lbUZpbGUuc2V0Q29udGVudChzZXJpYWxpemVkSGFzaEZpbGUpOworICAgIG1lbUZpbGUuc2V0RmlsZVNpemUoc2VyaWFsaXplZEhhc2hGaWxlLnNpemUoKSk7CisgICAgc2l6ZV90IGxlbiA9IG1GaWxlSGFuZGxlLldyaXRlKGZpbGVOYW1lLCBtZW1GaWxlKTsKKworICAgIGlmIChsZW4gIT0gc3RhdGljX2Nhc3Q8c2l6ZV90PihzZXJpYWxpemVkSGFzaEZpbGUuc2l6ZSgpKSkgeworICAgICAgICBBTE9HRSgiU3RvcmVGaWxlUmF3OiBGYWlsZWQgdG8gd3JpdGUgJXMiLCBmaWxlTmFtZS5jX3N0cigpKTsKKyAgICAgICAgQUxPR0QoIlN0b3JlRmlsZVJhdzogZXhwZWN0ZWQ9JXpkLCBhY3R1YWw9JXp1Iiwgc2VyaWFsaXplZEhhc2hGaWxlLnNpemUoKSwgbGVuKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIEFMT0dEKCJTdG9yZUZpbGVSYXc6IHdyb3RlICV6dSBieXRlcyB0byAlcyIsIHNlcmlhbGl6ZWRIYXNoRmlsZS5zaXplKCksIGZpbGVOYW1lLmNfc3RyKCkpOworICAgIHJldHVybiB0cnVlOworfQorCitib29sIERldmljZUZpbGVzOjpSZXRyaWV2ZUxpY2Vuc2UoCisgICAgY29uc3Qgc3RkOjpzdHJpbmcmIGtleVNldElkLCBMaWNlbnNlU3RhdGUqIHN0YXRlLCBzdGQ6OnN0cmluZyogb2ZmbGluZUxpY2Vuc2UpIHsKKworICAgIE9mZmxpbmVGaWxlIGZpbGU7CisgICAgaWYgKCFSZXRyaWV2ZUhhc2hlZEZpbGUoa2V5U2V0SWQgKyBrTGljZW5zZUZpbGVOYW1lRXh0LCAmZmlsZSkpIHsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIGlmIChmaWxlLnR5cGUoKSAhPSBPZmZsaW5lRmlsZTo6TElDRU5TRSkgeworICAgICAgICBBTE9HRSgiUmV0cmlldmVMaWNlbnNlOiBJbnZhbGlkIGZpbGUgdHlwZSIpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgaWYgKGZpbGUudmVyc2lvbigpICE9IE9mZmxpbmVGaWxlOjpWRVJTSU9OXzEpIHsKKyAgICAgICAgQUxPR0UoIlJldHJpZXZlTGljZW5zZTogSW52YWxpZCBmaWxlIHZlcnNpb24iKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIGlmICghZmlsZS5oYXNfbGljZW5zZSgpKSB7CisgICAgICAgIEFMT0dFKCJSZXRyaWV2ZUxpY2Vuc2U6IExpY2Vuc2Ugbm90IHByZXNlbnQiKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIExpY2Vuc2UgbGljZW5zZSA9IGZpbGUubGljZW5zZSgpOworICAgIHN3aXRjaCAobGljZW5zZS5zdGF0ZSgpKSB7CisgICAgICAgIGNhc2UgTGljZW5zZV9MaWNlbnNlU3RhdGVfQUNUSVZFOgorICAgICAgICAgICAgKnN0YXRlID0ga0xpY2Vuc2VTdGF0ZUFjdGl2ZTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIExpY2Vuc2VfTGljZW5zZVN0YXRlX1JFTEVBU0lORzoKKyAgICAgICAgICAgICpzdGF0ZSA9IGtMaWNlbnNlU3RhdGVSZWxlYXNpbmc7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIEFMT0dXKCJSZXRyaWV2ZUxpY2Vuc2U6IFVucmVjb2duaXplZCBsaWNlbnNlIHN0YXRlOiAldSIsCisgICAgICAgICAgICAgICAgICAgIGtMaWNlbnNlU3RhdGVVbmtub3duKTsKKyAgICAgICAgICAgICpzdGF0ZSA9IGtMaWNlbnNlU3RhdGVVbmtub3duOworICAgICAgICAgICAgYnJlYWs7CisgICAgfQorICAgICpvZmZsaW5lTGljZW5zZSA9IGxpY2Vuc2UubGljZW5zZSgpOworICAgIHJldHVybiB0cnVlOworfQorCitib29sIERldmljZUZpbGVzOjpEZWxldGVMaWNlbnNlKGNvbnN0IHN0ZDo6c3RyaW5nJiBrZXlTZXRJZCkgeworICAgIHJldHVybiBtRmlsZUhhbmRsZS5SZW1vdmVGaWxlKGtleVNldElkICsga0xpY2Vuc2VGaWxlTmFtZUV4dCk7Cit9CisKK2Jvb2wgRGV2aWNlRmlsZXM6OkRlbGV0ZUFsbExpY2Vuc2VzKCkgeworICAgIHJldHVybiBtRmlsZUhhbmRsZS5SZW1vdmVBbGxGaWxlcygpOworfQorCitib29sIERldmljZUZpbGVzOjpMaWNlbnNlRXhpc3RzKGNvbnN0IHN0ZDo6c3RyaW5nJiBrZXlTZXRJZCkgeworICAgIHJldHVybiBtRmlsZUhhbmRsZS5GaWxlRXhpc3RzKGtleVNldElkICsga0xpY2Vuc2VGaWxlTmFtZUV4dCk7Cit9CisKK3N0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiBEZXZpY2VGaWxlczo6TGlzdExpY2Vuc2VzKCkgY29uc3QgeworICAgIHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiBsaWNlbnNlcyA9IG1GaWxlSGFuZGxlLkxpc3RGaWxlcygpOworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbGljZW5zZXMuc2l6ZSgpOyBpKyspIHsKKyAgICAgICAgc3RkOjpzdHJpbmcmIGxpY2Vuc2UgPSBsaWNlbnNlc1tpXTsKKyAgICAgICAgbGljZW5zZSA9IGxpY2Vuc2Uuc3Vic3RyKDAsIGxpY2Vuc2Uuc2l6ZSgpIC0gc3RybGVuKGtMaWNlbnNlRmlsZU5hbWVFeHQpKTsKKyAgICB9CisgICAgcmV0dXJuIGxpY2Vuc2VzOworfQorCitib29sIERldmljZUZpbGVzOjpSZXRyaWV2ZUhhc2hlZEZpbGUoY29uc3Qgc3RkOjpzdHJpbmcmIGZpbGVOYW1lLCBPZmZsaW5lRmlsZSogZGVTZXJpYWxpemVkRmlsZSkgeworICAgIGlmICghZGVTZXJpYWxpemVkRmlsZSkgeworICAgICAgICBBTE9HRSgiUmV0cmlldmVIYXNoZWRGaWxlOiBpbnZhbGlkIGZpbGUgcGFyYW1ldGVyIik7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBpZiAoIUZpbGVFeGlzdHMoZmlsZU5hbWUpKSB7CisgICAgICAgIEFMT0dFKCJSZXRyaWV2ZUhhc2hlZEZpbGU6ICVzIGRvZXMgbm90IGV4aXN0IiwgZmlsZU5hbWUuY19zdHIoKSk7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBzc2l6ZV90IGJ5dGVzID0gR2V0RmlsZVNpemUoZmlsZU5hbWUpOworICAgIGlmIChieXRlcyA8PSAwKSB7CisgICAgICAgIEFMT0dFKCJSZXRyaWV2ZUhhc2hlZEZpbGU6IGludmFsaWQgZmlsZSBzaXplOiAlcyIsIGZpbGVOYW1lLmNfc3RyKCkpOworICAgICAgICAvLyBSZW1vdmUgdGhlIGNvcnJ1cHRlZCBmaWxlIHNvIHRoZSBjYWxsZXIgd2lsbCBub3QgZ2V0IHRoZSBzYW1lIGVycm9yCisgICAgICAgIC8vIHdoZW4gdHJ5aW5nIHRvIGFjY2VzcyB0aGUgZmlsZSByZXBlYXRlZGx5LCBjYXVzaW5nIHRoZSBzeXN0ZW0gdG8gc3RhbGwuCisgICAgICAgIFJlbW92ZUZpbGUoZmlsZU5hbWUpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgc3RkOjpzdHJpbmcgc2VyaWFsaXplZEhhc2hGaWxlOworICAgIHNlcmlhbGl6ZWRIYXNoRmlsZS5yZXNpemUoYnl0ZXMpOworICAgIGJ5dGVzID0gbUZpbGVIYW5kbGUuUmVhZChmaWxlTmFtZSwgJnNlcmlhbGl6ZWRIYXNoRmlsZSk7CisKKyAgICBpZiAoYnl0ZXMgIT0gc3RhdGljX2Nhc3Q8c3NpemVfdD4oc2VyaWFsaXplZEhhc2hGaWxlLnNpemUoKSkpIHsKKyAgICAgICAgQUxPR0UoIlJldHJpZXZlSGFzaGVkRmlsZTogRmFpbGVkIHRvIHJlYWQgZnJvbSAlcyIsIGZpbGVOYW1lLmNfc3RyKCkpOworICAgICAgICBBTE9HVigiUmV0cmlldmVIYXNoZWRGaWxlOiBleHBlY3RlZDogJXpkLCBhY3R1YWw6ICV6ZCIsIHNlcmlhbGl6ZWRIYXNoRmlsZS5zaXplKCksIGJ5dGVzKTsKKyAgICAgICAgLy8gUmVtb3ZlIHRoZSBjb3JydXB0ZWQgZmlsZSBzbyB0aGUgY2FsbGVyIHdpbGwgbm90IGdldCB0aGUgc2FtZSBlcnJvcgorICAgICAgICAvLyB3aGVuIHRyeWluZyB0byBhY2Nlc3MgdGhlIGZpbGUgcmVwZWF0ZWRseSwgY2F1c2luZyB0aGUgc3lzdGVtIHRvIHN0YWxsLgorICAgICAgICBSZW1vdmVGaWxlKGZpbGVOYW1lKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIEFMT0dWKCJSZXRyaWV2ZUhhc2hlZEZpbGU6IHJlYWQgJXpkIGZyb20gJXMiLCBieXRlcywgZmlsZU5hbWUuY19zdHIoKSk7CisKKyAgICBIYXNoZWRGaWxlIGhhc2hGaWxlOworICAgIGlmICghaGFzaEZpbGUuUGFyc2VGcm9tU3RyaW5nKHNlcmlhbGl6ZWRIYXNoRmlsZSkpIHsKKyAgICAgICAgQUxPR0UoIlJldHJpZXZlSGFzaGVkRmlsZTogVW5hYmxlIHRvIHBhcnNlIGhhc2ggZmlsZSIpOworICAgICAgICAvLyBSZW1vdmUgY29ycnVwdCBmaWxlLgorICAgICAgICBSZW1vdmVGaWxlKGZpbGVOYW1lKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIHN0ZDo6c3RyaW5nIGhhc2g7CisgICAgaWYgKCFIYXNoKGhhc2hGaWxlLmZpbGUoKSwgJmhhc2gpKSB7CisgICAgICAgIEFMT0dFKCJSZXRyaWV2ZUhhc2hlZEZpbGU6IEhhc2ggY29tcHV0YXRpb24gZmFpbGVkIik7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBpZiAoaGFzaCAhPSBoYXNoRmlsZS5oYXNoKCkpIHsKKyAgICAgICAgQUxPR0UoIlJldHJpZXZlSGFzaGVkRmlsZTogSGFzaCBtaXNtYXRjaCIpOworICAgICAgICAvLyBSZW1vdmUgY29ycnVwdCBmaWxlLgorICAgICAgICBSZW1vdmVGaWxlKGZpbGVOYW1lKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIGlmICghZGVTZXJpYWxpemVkRmlsZS0+UGFyc2VGcm9tU3RyaW5nKGhhc2hGaWxlLmZpbGUoKSkpIHsKKyAgICAgICAgQUxPR0UoIlJldHJpZXZlSGFzaGVkRmlsZTogVW5hYmxlIHRvIHBhcnNlIGZpbGUiKTsKKyAgICAgICAgLy8gUmVtb3ZlIGNvcnJ1cHQgZmlsZS4KKyAgICAgICAgUmVtb3ZlRmlsZShmaWxlTmFtZSk7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBEZXZpY2VGaWxlczo6RmlsZUV4aXN0cyhjb25zdCBzdGQ6OnN0cmluZyYgZmlsZU5hbWUpIGNvbnN0IHsKKyAgICByZXR1cm4gbUZpbGVIYW5kbGUuRmlsZUV4aXN0cyhmaWxlTmFtZSk7Cit9CisKK2Jvb2wgRGV2aWNlRmlsZXM6OlJlbW92ZUZpbGUoY29uc3Qgc3RkOjpzdHJpbmcmIGZpbGVOYW1lKSB7CisgICAgcmV0dXJuIG1GaWxlSGFuZGxlLlJlbW92ZUZpbGUoZmlsZU5hbWUpOworfQorCitzc2l6ZV90IERldmljZUZpbGVzOjpHZXRGaWxlU2l6ZShjb25zdCBzdGQ6OnN0cmluZyYgZmlsZU5hbWUpIGNvbnN0IHsKKyAgICByZXR1cm4gbUZpbGVIYW5kbGUuR2V0RmlsZVNpemUoZmlsZU5hbWUpOworfQorCit9IC8vIG5hbWVzcGFjZSBjbGVhcmtleQorfSAvLyBuYW1lc3BhY2UgVjFfMgorfSAvLyBuYW1lc3BhY2UgZHJtCit9IC8vIG5hbWVzcGFjZSBoYXJkd2FyZQorfSAvLyBuYW1lc3BhY2UgYW5kcm9pZApkaWZmIC0tZ2l0IGEvZHJtL21lZGlhZHJtL3BsdWdpbnMvY2xlYXJrZXkvaGlkbC9Ecm1GYWN0b3J5LmNwcCBiL2RybS9tZWRpYWRybS9wbHVnaW5zL2NsZWFya2V5L2hpZGwvRHJtRmFjdG9yeS5jcHAKaW5kZXggNzc1NTdmOS4uOWQwNDBhOCAxMDA2NDQKLS0tIGEvZHJtL21lZGlhZHJtL3BsdWdpbnMvY2xlYXJrZXkvaGlkbC9Ecm1GYWN0b3J5LmNwcAorKysgYi9kcm0vbWVkaWFkcm0vcGx1Z2lucy9jbGVhcmtleS9oaWRsL0RybUZhY3RvcnkuY3BwCkBAIC0zMCw3ICszMCw3IEBACiBuYW1lc3BhY2UgYW5kcm9pZCB7CiBuYW1lc3BhY2UgaGFyZHdhcmUgewogbmFtZXNwYWNlIGRybSB7Ci1uYW1lc3BhY2UgVjFfMSB7CituYW1lc3BhY2UgVjFfMiB7CiBuYW1lc3BhY2UgY2xlYXJrZXkgewogCiB1c2luZyA6OmFuZHJvaWQ6OmhhcmR3YXJlOjpkcm06OlYxXzA6OlN0YXR1czsKQEAgLTcxLDcgKzcxLDcgQEAKIH0KIAogfSAvLyBuYW1lc3BhY2UgY2xlYXJrZXkKLX0gLy8gbmFtZXNwYWNlIFYxXzEKK30gLy8gbmFtZXNwYWNlIFYxXzIKIH0gLy8gbmFtZXNwYWNlIGRybQogfSAvLyBuYW1lc3BhY2UgaGFyZHdhcmUKIH0gLy8gbmFtZXNwYWNlIGFuZHJvaWQKZGlmZiAtLWdpdCBhL2RybS9tZWRpYWRybS9wbHVnaW5zL2NsZWFya2V5L2hpZGwvRHJtUGx1Z2luLmNwcCBiL2RybS9tZWRpYWRybS9wbHVnaW5zL2NsZWFya2V5L2hpZGwvRHJtUGx1Z2luLmNwcAppbmRleCBkNTFlMjlkLi43MTg0YjUzIDEwMDY0NAotLS0gYS9kcm0vbWVkaWFkcm0vcGx1Z2lucy9jbGVhcmtleS9oaWRsL0RybVBsdWdpbi5jcHAKKysrIGIvZHJtL21lZGlhZHJtL3BsdWdpbnMvY2xlYXJrZXkvaGlkbC9Ecm1QbHVnaW4uY3BwCkBAIC0yNSwxMSArMjUsMTUgQEAKICNpbmNsdWRlICJDbGVhcktleURybVByb3BlcnRpZXMuaCIKICNpbmNsdWRlICJTZXNzaW9uLmgiCiAjaW5jbHVkZSAiVHlwZUNvbnZlcnQuaCIKKyNpbmNsdWRlICJVdGlscy5oIgogCiBuYW1lc3BhY2UgeworY29uc3Qgc3RkOjpzdHJpbmcga0tleVNldElkUHJlZml4KCJja2lkIik7Citjb25zdCBpbnQga0tleVNldElkTGVuZ3RoID0gMTY7CiBjb25zdCBpbnQga1NlY3VyZVN0b3BJZFN0YXJ0ID0gMTAwOworY29uc3Qgc3RkOjpzdHJpbmcga09mZmxpbmVMaWNlbnNlKCJcInR5cGVcIjpcInBlcnNpc3RlbnQtbGljZW5zZVwiIik7CiBjb25zdCBzdGQ6OnN0cmluZyBrU3RyZWFtaW5nKCJTdHJlYW1pbmciKTsKLWNvbnN0IHN0ZDo6c3RyaW5nIGtPZmZsaW5lKCJPZmZsaW5lIik7Citjb25zdCBzdGQ6OnN0cmluZyBrVGVtcG9yYXJ5TGljZW5zZSgiXCJ0eXBlXCI6XCJ0ZW1wb3JhcnlcIiIpOwogY29uc3Qgc3RkOjpzdHJpbmcga1RydWUoIlRydWUiKTsKIAogY29uc3Qgc3RkOjpzdHJpbmcga1F1ZXJ5S2V5TGljZW5zZVR5cGUoIkxpY2Vuc2VUeXBlIik7CkBAIC01NCw5ICs1OCwxMiBAQAogbmFtZXNwYWNlIGFuZHJvaWQgewogbmFtZXNwYWNlIGhhcmR3YXJlIHsKIG5hbWVzcGFjZSBkcm0gewotbmFtZXNwYWNlIFYxXzEgeworbmFtZXNwYWNlIFYxXzIgewogbmFtZXNwYWNlIGNsZWFya2V5IHsKIAordXNpbmcgOjphbmRyb2lkOjpoYXJkd2FyZTo6ZHJtOjpWMV8yOjpLZXlTZXRJZDsKK3VzaW5nIDo6YW5kcm9pZDo6aGFyZHdhcmU6OmRybTo6VjFfMjo6T2ZmbGluZUxpY2Vuc2VTdGF0ZTsKKwogRHJtUGx1Z2luOjpEcm1QbHVnaW4oU2Vzc2lvbkxpYnJhcnkqIHNlc3Npb25MaWJyYXJ5KQogICAgICAgICA6IG1TZXNzaW9uTGlicmFyeShzZXNzaW9uTGlicmFyeSksCiAgICAgICAgICAgbU9wZW5TZXNzaW9uT2tDb3VudCgwKSwKQEAgLTY2LDYgKzczLDggQEAKICAgICBtUGxheVBvbGljeS5jbGVhcigpOwogICAgIGluaXRQcm9wZXJ0aWVzKCk7CiAgICAgbVNlY3VyZVN0b3BzLmNsZWFyKCk7CisgICAgbVJlbGVhc2VLZXlzTWFwLmNsZWFyKCk7CisgICAgc3RkOjpzcmFuZChzdGQ6OnRpbWUobnVsbHB0cikpOwogfQogCiB2b2lkIERybVBsdWdpbjo6aW5pdFByb3BlcnRpZXMoKSB7CkBAIC0xNDcsMjUgKzE1Niw2MSBAQAogICAgICAgICBzdGQ6OnN0cmluZyAqZGVmYXVsdFVybCkgewogICAgICAgICBVTlVTRUQob3B0aW9uYWxQYXJhbWV0ZXJzKTsKIAorICAgIC8vIEdldEtleVJlcXVlc3RPZmZsaW5lS2V5VHlwZU5vdFN1cHBvcnRlZCgpIGluIHZ0cyAxLjAgYW5kIDEuMSBleHBlY3RzCisgICAgLy8gS2V5VHlwZTo6T0ZGTElORSB0byByZXR1cm4gRVJST1JfRFJNX0NBTk5PVF9IQU5ETEUgaW4gY2xlYXJrZXkgcGx1Z2luLgorICAgIC8vIFRob3NlIHRlc3RzIHBhc3MgaW4gYW4gZW1wdHkgaW5pdERhdGEsIHdlIHVzZSB0aGUgZW1wdHkgaW5pdERhdGEgdG8KKyAgICAvLyBzaWduYWwgc3VjaCBzcGVjaWZpYyB1c2UgY2FzZS4KKyAgICBpZiAoa2V5VHlwZSA9PSBLZXlUeXBlOjpPRkZMSU5FICYmIDAgPT0gaW5pdERhdGEuc2l6ZSgpKSB7CisgICAgICAgIHJldHVybiBTdGF0dXM6OkVSUk9SX0RSTV9DQU5OT1RfSEFORExFOworICAgIH0KKwogICAgICpkZWZhdWx0VXJsID0gIiI7CiAgICAgKmtleVJlcXVlc3RUeXBlID0gS2V5UmVxdWVzdFR5cGU6OlVOS05PV047CiAgICAgKnJlcXVlc3QgPSBzdGQ6OnZlY3Rvcjx1aW50OF90PigpOwogCi0gICAgaWYgKHNjb3BlLnNpemUoKSA9PSAwKSB7CisgICAgaWYgKHNjb3BlLnNpemUoKSA9PSAwIHx8CisgICAgICAgICAgICAoa2V5VHlwZSAhPSBLZXlUeXBlOjpTVFJFQU1JTkcgJiYKKyAgICAgICAgICAgIGtleVR5cGUgIT0gS2V5VHlwZTo6T0ZGTElORSAmJgorICAgICAgICAgICAga2V5VHlwZSAhPSBLZXlUeXBlOjpSRUxFQVNFKSkgewogICAgICAgICByZXR1cm4gU3RhdHVzOjpCQURfVkFMVUU7CiAgICAgfQogCi0gICAgaWYgKGtleVR5cGUgIT0gS2V5VHlwZTo6U1RSRUFNSU5HKSB7Ci0gICAgICAgIHJldHVybiBTdGF0dXM6OkVSUk9SX0RSTV9DQU5OT1RfSEFORExFOworICAgIGNvbnN0IHN0ZDo6dmVjdG9yPHVpbnQ4X3Q+IHNjb3BlSWQgPSB0b1ZlY3RvcihzY29wZSk7CisgICAgc3A8U2Vzc2lvbj4gc2Vzc2lvbjsKKyAgICBpZiAoa2V5VHlwZSA9PSBLZXlUeXBlOjpTVFJFQU1JTkcgfHwga2V5VHlwZSA9PSBLZXlUeXBlOjpPRkZMSU5FKSB7CisgICAgICAgIHN0ZDo6dmVjdG9yPHVpbnQ4X3Q+IHNlc3Npb25JZChzY29wZUlkLmJlZ2luKCksIHNjb3BlSWQuZW5kKCkpOworICAgICAgICBzZXNzaW9uID0gbVNlc3Npb25MaWJyYXJ5LT5maW5kU2Vzc2lvbihzZXNzaW9uSWQpOworICAgICAgICBpZiAoIXNlc3Npb24uZ2V0KCkpIHsKKyAgICAgICAgICAgIHJldHVybiBTdGF0dXM6OkVSUk9SX0RSTV9TRVNTSU9OX05PVF9PUEVORUQ7CisgICAgICAgIH0KKyAgICAgICAgKmtleVJlcXVlc3RUeXBlID0gS2V5UmVxdWVzdFR5cGU6OklOSVRJQUw7CiAgICAgfQogCi0gICAgc3A8U2Vzc2lvbj4gc2Vzc2lvbiA9IG1TZXNzaW9uTGlicmFyeS0+ZmluZFNlc3Npb24odG9WZWN0b3Ioc2NvcGUpKTsKLSAgICBpZiAoIXNlc3Npb24uZ2V0KCkpIHsKLSAgICAgICAgcmV0dXJuIFN0YXR1czo6RVJST1JfRFJNX1NFU1NJT05fTk9UX09QRU5FRDsKLSAgICB9CisgICAgU3RhdHVzIHN0YXR1cyA9IHNlc3Npb24tPmdldEtleVJlcXVlc3QoaW5pdERhdGEsIG1pbWVUeXBlLCBrZXlUeXBlLCByZXF1ZXN0KTsKIAotICAgIFN0YXR1cyBzdGF0dXMgPSBzZXNzaW9uLT5nZXRLZXlSZXF1ZXN0KGluaXREYXRhLCBtaW1lVHlwZSwgcmVxdWVzdCk7Ci0gICAgKmtleVJlcXVlc3RUeXBlID0gS2V5UmVxdWVzdFR5cGU6OklOSVRJQUw7CisgICAgaWYgKGtleVR5cGUgPT0gS2V5VHlwZTo6UkVMRUFTRSkgeworICAgICAgICBzdGQ6OnZlY3Rvcjx1aW50OF90PiBrZXlTZXRJZChzY29wZUlkLmJlZ2luKCksIHNjb3BlSWQuZW5kKCkpOworICAgICAgICBzdGQ6OnN0cmluZyByZXF1ZXN0U3RyaW5nKHJlcXVlc3QtPmJlZ2luKCksIHJlcXVlc3QtPmVuZCgpKTsKKyAgICAgICAgaWYgKHJlcXVlc3RTdHJpbmcuZmluZChrT2ZmbGluZUxpY2Vuc2UpICE9IHN0ZDo6c3RyaW5nOjpucG9zKSB7CisgICAgICAgICAgICBzdGQ6OnN0cmluZyBlbXB0eVJlc3BvbnNlOworICAgICAgICAgICAgc3RkOjpzdHJpbmcga2V5U2V0SWRTdHJpbmcoa2V5U2V0SWQuYmVnaW4oKSwga2V5U2V0SWQuZW5kKCkpOworICAgICAgICAgICAgaWYgKCFtRmlsZUhhbmRsZS5TdG9yZUxpY2Vuc2Uoa2V5U2V0SWRTdHJpbmcsCisgICAgICAgICAgICAgICAgICAgIERldmljZUZpbGVzOjprTGljZW5zZVN0YXRlUmVsZWFzaW5nLAorICAgICAgICAgICAgICAgICAgICBlbXB0eVJlc3BvbnNlKSkgeworICAgICAgICAgICAgICAgIEFMT0dFKCJQcm9ibGVtIHJlbGVhc2luZyBvZmZsaW5lIGxpY2Vuc2UiKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gU3RhdHVzOjpFUlJPUl9EUk1fVU5LTk9XTjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChtUmVsZWFzZUtleXNNYXAuZmluZChrZXlTZXRJZFN0cmluZykgPT0gbVJlbGVhc2VLZXlzTWFwLmVuZCgpKSB7CisgICAgICAgICAgICAgICAgc3A8U2Vzc2lvbj4gc2Vzc2lvbiA9IG1TZXNzaW9uTGlicmFyeS0+Y3JlYXRlU2Vzc2lvbigpOworICAgICAgICAgICAgICAgIG1SZWxlYXNlS2V5c01hcFtrZXlTZXRJZFN0cmluZ10gPSBzZXNzaW9uLT5zZXNzaW9uSWQoKTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgQUxPR0koImtleSBpcyBpbiB1c2UsIGlnbm9yZSByZWxlYXNlIHJlcXVlc3QiKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIEFMT0dFKCJPZmZsaW5lIGxpY2Vuc2Ugbm90IGZvdW5kLCBub3RoaW5nIHRvIHJlbGVhc2UiKTsKKyAgICAgICAgfQorICAgICAgICAqa2V5UmVxdWVzdFR5cGUgPSBLZXlSZXF1ZXN0VHlwZTo6UkVMRUFTRTsKKyAgICB9CiAgICAgcmV0dXJuIHN0YXR1czsKIH0KIApAQCAtMjI3LDYgKzI3MiwzMCBAQAogICAgIG1QbGF5UG9saWN5LnB1c2hfYmFjayhwb2xpY3kpOwogfQogCitib29sIERybVBsdWdpbjo6bWFrZUtleVNldElkKHN0ZDo6c3RyaW5nKiBrZXlTZXRJZCkgeworICAgIGlmICgha2V5U2V0SWQpIHsKKyAgICAgICAgQUxPR0UoImtleVNldElkIGRlc3RpbmF0aW9uIG5vdCBwcm92aWRlZCIpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorICAgIHN0ZDo6dmVjdG9yPHVpbnQ4X3Q+IGtzaWQoa0tleVNldElkUHJlZml4LmJlZ2luKCksIGtLZXlTZXRJZFByZWZpeC5lbmQoKSk7CisgICAga3NpZC5yZXNpemUoa0tleVNldElkTGVuZ3RoKTsKKyAgICBzdGQ6OnZlY3Rvcjx1aW50OF90PiByYW5kb21EYXRhKChrS2V5U2V0SWRMZW5ndGggLSBrS2V5U2V0SWRQcmVmaXguc2l6ZSgpKSAvIDIsIDApOworCisgICAgd2hpbGUgKGtleVNldElkLT5lbXB0eSgpKSB7CisgICAgICAgIGZvciAoYXV0byBpdHIgPSByYW5kb21EYXRhLmJlZ2luKCk7IGl0ciAhPSByYW5kb21EYXRhLmVuZCgpOyArK2l0cikgeworICAgICAgICAgICAgKml0ciA9IHN0ZDo6cmFuZCgpICUgMHhmZjsKKyAgICAgICAgfQorICAgICAgICAqa2V5U2V0SWQgPSBrS2V5U2V0SWRQcmVmaXggKyBCeXRlQXJyYXlUb0hleFN0cmluZygKKyAgICAgICAgICAgICAgICByZWludGVycHJldF9jYXN0PGNvbnN0IHVpbnQ4X3QqPihyYW5kb21EYXRhLmRhdGEoKSksIHJhbmRvbURhdGEuc2l6ZSgpKTsKKyAgICAgICAgaWYgKG1GaWxlSGFuZGxlLkxpY2Vuc2VFeGlzdHMoKmtleVNldElkKSkgeworICAgICAgICAgICAgLy8gY29sbGlzaW9uLCByZWdlbmVyYXRlCisgICAgICAgICAgICBBTE9HVigiUmV0cnkgZ2VuZXJhdGluZyBLZXlTZXRJZCIpOworICAgICAgICAgICAga2V5U2V0SWQtPmNsZWFyKCk7CisgICAgICAgIH0KKyAgICB9CisgICAgcmV0dXJuIHRydWU7Cit9CisKIFJldHVybjx2b2lkPiBEcm1QbHVnaW46OnByb3ZpZGVLZXlSZXNwb25zZSgKICAgICAgICAgY29uc3QgaGlkbF92ZWM8dWludDhfdD4mIHNjb3BlLAogICAgICAgICBjb25zdCBoaWRsX3ZlYzx1aW50OF90PiYgcmVzcG9uc2UsCkBAIC0yMzcsMjggKzMwNiwxMTkgQEAKICAgICAgICAgcmV0dXJuIFZvaWQoKTsKICAgICB9CiAKLSAgICBzcDxTZXNzaW9uPiBzZXNzaW9uID0gbVNlc3Npb25MaWJyYXJ5LT5maW5kU2Vzc2lvbih0b1ZlY3RvcihzY29wZSkpOworICAgIHN0ZDo6c3RyaW5nIHJlc3BvbnNlU3RyaW5nKAorICAgICAgICAgICAgcmVpbnRlcnByZXRfY2FzdDxjb25zdCBjaGFyKj4ocmVzcG9uc2UuZGF0YSgpKSwgcmVzcG9uc2Uuc2l6ZSgpKTsKKyAgICBjb25zdCBzdGQ6OnZlY3Rvcjx1aW50OF90PiBzY29wZUlkID0gdG9WZWN0b3Ioc2NvcGUpOworICAgIHN0ZDo6dmVjdG9yPHVpbnQ4X3Q+IHNlc3Npb25JZDsKKyAgICBzdGQ6OnN0cmluZyBrZXlTZXRJZDsKKworICAgIFN0YXR1cyBzdGF0dXMgPSBTdGF0dXM6Ok9LOworICAgIGJvb2wgaXNPZmZsaW5lTGljZW5zZSA9IHJlc3BvbnNlU3RyaW5nLmZpbmQoa09mZmxpbmVMaWNlbnNlKSAhPSBzdGQ6OnN0cmluZzo6bnBvczsKKyAgICBib29sIGlzUmVsZWFzZSA9IChtZW1jbXAoc2NvcGVJZC5kYXRhKCksIGtLZXlTZXRJZFByZWZpeC5kYXRhKCksIGtLZXlTZXRJZFByZWZpeC5zaXplKCkpID09IDApOworICAgIGlmIChpc1JlbGVhc2UpIHsKKyAgICAgICAga2V5U2V0SWQuYXNzaWduKHNjb3BlSWQuYmVnaW4oKSwgc2NvcGVJZC5lbmQoKSk7CisKKyAgICAgICAgYXV0byBpdGVyID0gbVJlbGVhc2VLZXlzTWFwLmZpbmQoc3RkOjpzdHJpbmcoa2V5U2V0SWQuYmVnaW4oKSwga2V5U2V0SWQuZW5kKCkpKTsKKyAgICAgICAgaWYgKGl0ZXIgIT0gbVJlbGVhc2VLZXlzTWFwLmVuZCgpKSB7CisgICAgICAgICAgICBzZXNzaW9uSWQuYXNzaWduKGl0ZXItPnNlY29uZC5iZWdpbigpLCBpdGVyLT5zZWNvbmQuZW5kKCkpOworICAgICAgICB9CisgICAgfSBlbHNlIHsKKyAgICAgICAgc2Vzc2lvbklkLmFzc2lnbihzY29wZUlkLmJlZ2luKCksIHNjb3BlSWQuZW5kKCkpOworICAgICAgICAvLyBub24gb2ZmbGluZSBsaWNlbnNlIHJldHVybnMgZW1wdHkga2V5U2V0SWQKKyAgICAgICAga2V5U2V0SWQuY2xlYXIoKTsKKyAgICB9CisKKyAgICBzcDxTZXNzaW9uPiBzZXNzaW9uID0gbVNlc3Npb25MaWJyYXJ5LT5maW5kU2Vzc2lvbihzZXNzaW9uSWQpOwogICAgIGlmICghc2Vzc2lvbi5nZXQoKSkgewogICAgICAgICBfaGlkbF9jYihTdGF0dXM6OkVSUk9SX0RSTV9TRVNTSU9OX05PVF9PUEVORUQsIGhpZGxfdmVjPHVpbnQ4X3Q+KCkpOwogICAgICAgICByZXR1cm4gVm9pZCgpOwogICAgIH0KLQogICAgIHNldFBsYXlQb2xpY3koKTsKLSAgICBzdGQ6OnZlY3Rvcjx1aW50OF90PiBrZXlTZXRJZDsKLSAgICBTdGF0dXMgc3RhdHVzID0gc2Vzc2lvbi0+cHJvdmlkZUtleVJlc3BvbnNlKHJlc3BvbnNlKTsKKworICAgIHN0YXR1cyA9IHNlc3Npb24tPnByb3ZpZGVLZXlSZXNwb25zZShyZXNwb25zZSk7CiAgICAgaWYgKHN0YXR1cyA9PSBTdGF0dXM6Ok9LKSB7Ci0gICAgICAgIC8vIFRoaXMgaXMgZm9yIHRlc3RpbmcgQU1lZGlhRHJtX3NldE9uRXZlbnRMaXN0ZW5lciBvbmx5LgotICAgICAgICBzZW5kRXZlbnQoRXZlbnRUeXBlOjpWRU5ET1JfREVGSU5FRCwgMCwgc2NvcGUpOwotICAgICAgICBrZXlTZXRJZC5jbGVhcigpOworICAgICAgICBpZiAoaXNPZmZsaW5lTGljZW5zZSkgeworICAgICAgICAgICAgaWYgKGlzUmVsZWFzZSkgeworICAgICAgICAgICAgICAgIG1GaWxlSGFuZGxlLkRlbGV0ZUxpY2Vuc2Uoa2V5U2V0SWQpOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBpZiAoIW1ha2VLZXlTZXRJZCgma2V5U2V0SWQpKSB7CisgICAgICAgICAgICAgICAgICAgIF9oaWRsX2NiKFN0YXR1czo6RVJST1JfRFJNX1VOS05PV04sIGhpZGxfdmVjPHVpbnQ4X3Q+KCkpOworICAgICAgICAgICAgICAgICAgICByZXR1cm4gVm9pZCgpOworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIGJvb2wgb2sgPSBtRmlsZUhhbmRsZS5TdG9yZUxpY2Vuc2UoCisgICAgICAgICAgICAgICAgICAgICAgICBrZXlTZXRJZCwKKyAgICAgICAgICAgICAgICAgICAgICAgIERldmljZUZpbGVzOjprTGljZW5zZVN0YXRlQWN0aXZlLAorICAgICAgICAgICAgICAgICAgICAgICAgc3RkOjpzdHJpbmcocmVzcG9uc2UuYmVnaW4oKSwgcmVzcG9uc2UuZW5kKCkpKTsKKyAgICAgICAgICAgICAgICBpZiAoIW9rKSB7CisgICAgICAgICAgICAgICAgICAgIEFMT0dFKCJGYWlsZWQgdG8gc3RvcmUgb2ZmbGluZSBsaWNlbnNlIik7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgLy8gVGVzdCBjYWxsaW5nIEFNZWRpYURybSBsaXN0ZW5lcnMuCisgICAgICAgIHNlbmRFdmVudChFdmVudFR5cGU6OlZFTkRPUl9ERUZJTkVELCBzZXNzaW9uSWQsIHNlc3Npb25JZCk7CisKKyAgICAgICAgc2VuZEV4cGlyYXRpb25VcGRhdGUoc2Vzc2lvbklkLCAxMDApOworCisgICAgICAgIHN0ZDo6dmVjdG9yPEtleVN0YXR1cz4ga2V5c1N0YXR1czsKKyAgICAgICAgS2V5U3RhdHVzIGtleVN0YXR1czsKKworICAgICAgICBzdGQ6OnZlY3Rvcjx1aW50OF90PiBrZXlJZDEgPSB7IDB4QSwgMHhCLCAweEMgfTsKKyAgICAgICAga2V5U3RhdHVzLmtleUlkID0ga2V5SWQxOworICAgICAgICBrZXlTdGF0dXMudHlwZSA9IFYxXzA6OktleVN0YXR1c1R5cGU6OlVTQUJMRTsKKyAgICAgICAga2V5c1N0YXR1cy5wdXNoX2JhY2soa2V5U3RhdHVzKTsKKworICAgICAgICBzdGQ6OnZlY3Rvcjx1aW50OF90PiBrZXlJZDIgPSB7IDB4RCwgMHhFLCAweEYgfTsKKyAgICAgICAga2V5U3RhdHVzLmtleUlkID0ga2V5SWQyOworICAgICAgICBrZXlTdGF0dXMudHlwZSA9IFYxXzA6OktleVN0YXR1c1R5cGU6OkVYUElSRUQ7CisgICAgICAgIGtleXNTdGF0dXMucHVzaF9iYWNrKGtleVN0YXR1cyk7CisKKyAgICAgICAgc2VuZEtleXNDaGFuZ2Uoc2Vzc2lvbklkLCBrZXlzU3RhdHVzLCB0cnVlKTsKKworICAgICAgICBpbnN0YWxsU2VjdXJlU3RvcChzZXNzaW9uSWQpOworICAgIH0gZWxzZSB7CisgICAgICAgIEFMT0dFKCJwcm92aWRlS2V5UmVzcG9uc2UgcmV0dXJucyBlcnJvcj0lZCIsIHN0YXR1cyk7CiAgICAgfQogCi0gICAgaW5zdGFsbFNlY3VyZVN0b3Aoc2NvcGUpOwotCi0gICAgLy8gUmV0dXJucyBzdGF0dXMgYW5kIGVtcHR5IGtleVNldElkCi0gICAgX2hpZGxfY2Ioc3RhdHVzLCB0b0hpZGxWZWMoa2V5U2V0SWQpKTsKKyAgICBzdGQ6OnZlY3Rvcjx1aW50OF90PiBrZXlTZXRJZFZlYyhrZXlTZXRJZC5iZWdpbigpLCBrZXlTZXRJZC5lbmQoKSk7CisgICAgX2hpZGxfY2Ioc3RhdHVzLCB0b0hpZGxWZWMoa2V5U2V0SWRWZWMpKTsKICAgICByZXR1cm4gVm9pZCgpOwogfQogCitSZXR1cm48U3RhdHVzPiBEcm1QbHVnaW46OnJlc3RvcmVLZXlzKAorICAgICAgICBjb25zdCBoaWRsX3ZlYzx1aW50OF90PiYgc2Vzc2lvbklkLCBjb25zdCBoaWRsX3ZlYzx1aW50OF90PiYga2V5U2V0SWQpIHsKKyAgICAgICAgaWYgKHNlc3Npb25JZC5zaXplKCkgPT0gMCB8fCBrZXlTZXRJZC5zaXplKCkgPT0gMCkgeworICAgICAgICAgICAgcmV0dXJuIFN0YXR1czo6QkFEX1ZBTFVFOworICAgICAgICB9CisKKyAgICAgICAgRGV2aWNlRmlsZXM6OkxpY2Vuc2VTdGF0ZSBsaWNlbnNlU3RhdGU7CisgICAgICAgIHN0ZDo6c3RyaW5nIG9mZmxpbmVMaWNlbnNlOworICAgICAgICBTdGF0dXMgc3RhdHVzID0gU3RhdHVzOjpPSzsKKyAgICAgICAgaWYgKCFtRmlsZUhhbmRsZS5SZXRyaWV2ZUxpY2Vuc2Uoc3RkOjpzdHJpbmcoa2V5U2V0SWQuYmVnaW4oKSwga2V5U2V0SWQuZW5kKCkpLAorICAgICAgICAgICAgICAgICZsaWNlbnNlU3RhdGUsICZvZmZsaW5lTGljZW5zZSkpIHsKKyAgICAgICAgICAgIEFMT0dFKCJGYWlsZWQgdG8gcmVzdG9yZSBvZmZsaW5lIGxpY2Vuc2UiKTsKKyAgICAgICAgICAgIHJldHVybiBTdGF0dXM6OkVSUk9SX0RSTV9OT19MSUNFTlNFOworICAgICAgICB9CisKKyAgICAgICAgaWYgKERldmljZUZpbGVzOjprTGljZW5zZVN0YXRlVW5rbm93biA9PSBsaWNlbnNlU3RhdGUgfHwKKyAgICAgICAgICAgICAgICBEZXZpY2VGaWxlczo6a0xpY2Vuc2VTdGF0ZVJlbGVhc2luZyA9PSBsaWNlbnNlU3RhdGUpIHsKKyAgICAgICAgICAgIEFMT0dFKCJJbnZhbGlkIGxpY2Vuc2Ugc3RhdGU9JWQiLCBsaWNlbnNlU3RhdGUpOworICAgICAgICAgICAgcmV0dXJuIFN0YXR1czo6RVJST1JfRFJNX05PX0xJQ0VOU0U7CisgICAgICAgIH0KKworICAgICAgICBzcDxTZXNzaW9uPiBzZXNzaW9uID0gbVNlc3Npb25MaWJyYXJ5LT5maW5kU2Vzc2lvbih0b1ZlY3RvcihzZXNzaW9uSWQpKTsKKyAgICAgICAgaWYgKCFzZXNzaW9uLmdldCgpKSB7CisgICAgICAgICAgICByZXR1cm4gU3RhdHVzOjpFUlJPUl9EUk1fU0VTU0lPTl9OT1RfT1BFTkVEOworICAgICAgICB9CisgICAgICAgIHN0YXR1cyA9IHNlc3Npb24tPnByb3ZpZGVLZXlSZXNwb25zZShzdGQ6OnZlY3Rvcjx1aW50OF90PihvZmZsaW5lTGljZW5zZS5iZWdpbigpLAorICAgICAgICAgICAgICAgIG9mZmxpbmVMaWNlbnNlLmVuZCgpKSk7CisgICAgICAgIGlmIChzdGF0dXMgIT0gU3RhdHVzOjpPSykgeworICAgICAgICAgICAgQUxPR0UoIkZhaWxlZCB0byByZXN0b3JlIGtleXMiKTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gc3RhdHVzOworfQorCiBSZXR1cm48dm9pZD4gRHJtUGx1Z2luOjpnZXRQcm9wZXJ0eVN0cmluZygKICAgICAgICAgY29uc3QgaGlkbF9zdHJpbmcmIHByb3BlcnR5TmFtZSwgZ2V0UHJvcGVydHlTdHJpbmdfY2IgX2hpZGxfY2IpIHsKICAgICBzdGQ6OnN0cmluZyBuYW1lKHByb3BlcnR5TmFtZS5jX3N0cigpKTsKQEAgLTMyOCw2ICs0ODgsOSBAQAogICAgaWYgKG5hbWUgPT0ga0RldmljZUlkS2V5KSB7CiAgICAgICBBTE9HRCgiQ2Fubm90IHNldCBpbW11dGFibGUgcHJvcGVydHk6ICVzIiwgbmFtZS5jX3N0cigpKTsKICAgICAgIHJldHVybiBTdGF0dXM6OkJBRF9WQUxVRTsKKyAgIH0gZWxzZSBpZiAobmFtZSA9PSBrQ2xpZW50SWRLZXkpIHsKKyAgICAgICBtQnl0ZUFycmF5UHJvcGVydGllc1trQ2xpZW50SWRLZXldID0gdG9WZWN0b3IodmFsdWUpOworICAgICAgIHJldHVybiBTdGF0dXM6Ok9LOwogICAgfQogCiAgICAvLyBTZXR0aW5nIG9mIHVuZGVmaW5lZCBwcm9wZXJ0aWVzIGlzIG5vdCBzdXBwb3J0ZWQKQEAgLTQ2NSw2ICs2MjgsNTEgQEAKICAgICByZXR1cm4gVm9pZCgpOwogfQogCitSZXR1cm48dm9pZD4gRHJtUGx1Z2luOjpnZXRPZmZsaW5lTGljZW5zZUtleVNldElkcyhnZXRPZmZsaW5lTGljZW5zZUtleVNldElkc19jYiBfaGlkbF9jYikgeworICAgIHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiBsaWNlbnNlTmFtZXMgPSBtRmlsZUhhbmRsZS5MaXN0TGljZW5zZXMoKTsKKyAgICBzdGQ6OnZlY3RvcjxLZXlTZXRJZD4ga2V5U2V0SWRzOworICAgIGZvciAoY29uc3QgYXV0byYgbmFtZSA6IGxpY2Vuc2VOYW1lcykgeworICAgICAgICBzdGQ6OnZlY3Rvcjx1aW50OF90PiBrZXlTZXRJZChuYW1lLmJlZ2luKCksIG5hbWUuZW5kKCkpOworICAgICAgICBrZXlTZXRJZHMucHVzaF9iYWNrKGtleVNldElkKTsKKyAgICB9CisgICAgX2hpZGxfY2IoU3RhdHVzOjpPSywga2V5U2V0SWRzKTsKKyAgICByZXR1cm4gVm9pZCgpOworfQorCisKK1JldHVybjxTdGF0dXM+IERybVBsdWdpbjo6cmVtb3ZlT2ZmbGluZUxpY2Vuc2UoY29uc3QgS2V5U2V0SWQmIGtleVNldElkKSB7CisgICAgc3RkOjpzdHJpbmcgbGljZW5zZU5hbWUoa2V5U2V0SWQuYmVnaW4oKSwga2V5U2V0SWQuZW5kKCkpOworICAgIGlmIChtRmlsZUhhbmRsZS5EZWxldGVMaWNlbnNlKGxpY2Vuc2VOYW1lKSkgeworICAgICAgICByZXR1cm4gU3RhdHVzOjpPSzsKKyAgICB9CisgICAgcmV0dXJuIFN0YXR1czo6QkFEX1ZBTFVFOworfQorCitSZXR1cm48dm9pZD4gRHJtUGx1Z2luOjpnZXRPZmZsaW5lTGljZW5zZVN0YXRlKGNvbnN0IEtleVNldElkJiBrZXlTZXRJZCwKKyAgICAgICAgZ2V0T2ZmbGluZUxpY2Vuc2VTdGF0ZV9jYiBfaGlkbF9jYikgeworICAgIHN0ZDo6c3RyaW5nIGxpY2Vuc2VOYW1lKGtleVNldElkLmJlZ2luKCksIGtleVNldElkLmVuZCgpKTsKKyAgICBEZXZpY2VGaWxlczo6TGljZW5zZVN0YXRlIHN0YXRlOworICAgIHN0ZDo6c3RyaW5nIGxpY2Vuc2U7CisgICAgT2ZmbGluZUxpY2Vuc2VTdGF0ZSBoTGljZW5zZVN0YXRlOworICAgIGlmIChtRmlsZUhhbmRsZS5SZXRyaWV2ZUxpY2Vuc2UobGljZW5zZU5hbWUsICZzdGF0ZSwgJmxpY2Vuc2UpKSB7CisgICAgICAgIHN3aXRjaCAoc3RhdGUpIHsKKyAgICAgICAgY2FzZSBEZXZpY2VGaWxlczo6a0xpY2Vuc2VTdGF0ZUFjdGl2ZToKKyAgICAgICAgICAgIGhMaWNlbnNlU3RhdGUgPSBPZmZsaW5lTGljZW5zZVN0YXRlOjpVU0FCTEU7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBEZXZpY2VGaWxlczo6a0xpY2Vuc2VTdGF0ZVJlbGVhc2luZzoKKyAgICAgICAgICAgIGhMaWNlbnNlU3RhdGUgPSBPZmZsaW5lTGljZW5zZVN0YXRlOjpJTkFDVElWRTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIERldmljZUZpbGVzOjprTGljZW5zZVN0YXRlVW5rbm93bjoKKyAgICAgICAgICAgIGhMaWNlbnNlU3RhdGUgPSBPZmZsaW5lTGljZW5zZVN0YXRlOjpVTktOT1dOOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgX2hpZGxfY2IoU3RhdHVzOjpPSywgaExpY2Vuc2VTdGF0ZSk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgX2hpZGxfY2IoU3RhdHVzOjpCQURfVkFMVUUsIE9mZmxpbmVMaWNlbnNlU3RhdGU6OlVOS05PV04pOworICAgIH0KKyAgICByZXR1cm4gVm9pZCgpOworfQorCiBSZXR1cm48dm9pZD4gRHJtUGx1Z2luOjpnZXRTZWN1cmVTdG9wcyhnZXRTZWN1cmVTdG9wc19jYiBfaGlkbF9jYikgewogICAgIHN0ZDo6dmVjdG9yPFNlY3VyZVN0b3A+IHN0b3BzOwogICAgIGZvciAoYXV0byBpdHIgPSBtU2VjdXJlU3RvcHMuYmVnaW4oKTsgaXRyICE9IG1TZWN1cmVTdG9wcy5lbmQoKTsgKytpdHIpIHsKQEAgLTU2Nyw3ICs3NzUsNyBAQAogfQogCiB9ICAvLyBuYW1lc3BhY2UgY2xlYXJrZXkKLX0gIC8vIG5hbWVzcGFjZSBWMV8xCit9ICAvLyBuYW1lc3BhY2UgVjFfMgogfSAgLy8gbmFtZXNwYWNlIGRybQogfSAgLy8gbmFtZXNwYWNlIGhhcmR3YXJlCiB9ICAvLyBuYW1lc3BhY2UgYW5kcm9pZApkaWZmIC0tZ2l0IGEvZHJtL21lZGlhZHJtL3BsdWdpbnMvY2xlYXJrZXkvaGlkbC9Jbml0RGF0YVBhcnNlci5jcHAgYi9kcm0vbWVkaWFkcm0vcGx1Z2lucy9jbGVhcmtleS9oaWRsL0luaXREYXRhUGFyc2VyLmNwcAppbmRleCBlMmJiNjUxLi44ZWJiNDJiIDEwMDY0NAotLS0gYS9kcm0vbWVkaWFkcm0vcGx1Z2lucy9jbGVhcmtleS9oaWRsL0luaXREYXRhUGFyc2VyLmNwcAorKysgYi9kcm0vbWVkaWFkcm0vcGx1Z2lucy9jbGVhcmtleS9oaWRsL0luaXREYXRhUGFyc2VyLmNwcApAQCAtMzEsNyArMzEsNyBAQAogbmFtZXNwYWNlIGFuZHJvaWQgewogbmFtZXNwYWNlIGhhcmR3YXJlIHsKIG5hbWVzcGFjZSBkcm0gewotbmFtZXNwYWNlIFYxXzEgeworbmFtZXNwYWNlIFYxXzIgewogbmFtZXNwYWNlIGNsZWFya2V5IHsKIAogbmFtZXNwYWNlIHsKQEAgLTQ1LDIxICs0NSwyMiBAQAogfQogCiBTdGF0dXMgSW5pdERhdGFQYXJzZXI6OnBhcnNlKGNvbnN0IHN0ZDo6dmVjdG9yPHVpbnQ4X3Q+JiBpbml0RGF0YSwKLSAgICAgICAgY29uc3Qgc3RkOjpzdHJpbmcmIHR5cGUsCisgICAgICAgIGNvbnN0IHN0ZDo6c3RyaW5nJiBtaW1lVHlwZSwKKyAgICAgICAgVjFfMDo6S2V5VHlwZSBrZXlUeXBlLAogICAgICAgICBzdGQ6OnZlY3Rvcjx1aW50OF90PiogbGljZW5zZVJlcXVlc3QpIHsKICAgICAvLyBCdWlsZCBhIGxpc3Qgb2YgdGhlIGtleSBJRHMKICAgICBzdGQ6OnZlY3Rvcjxjb25zdCB1aW50OF90Kj4ga2V5SWRzOwogCi0gICAgaWYgKHR5cGUgPT0ga0lzb0JtZmZWaWRlb01pbWVUeXBlIHx8Ci0gICAgICAgIHR5cGUgPT0ga0lzb0JtZmZBdWRpb01pbWVUeXBlIHx8Ci0gICAgICAgIHR5cGUgPT0ga0NlbmNJbml0RGF0YUZvcm1hdCkgeworICAgIGlmIChtaW1lVHlwZSA9PSBrSXNvQm1mZlZpZGVvTWltZVR5cGUgfHwKKyAgICAgICAgbWltZVR5cGUgPT0ga0lzb0JtZmZBdWRpb01pbWVUeXBlIHx8CisgICAgICAgIG1pbWVUeXBlID09IGtDZW5jSW5pdERhdGFGb3JtYXQpIHsKICAgICAgICAgU3RhdHVzIHJlcyA9IHBhcnNlUHNzaChpbml0RGF0YSwgJmtleUlkcyk7CiAgICAgICAgIGlmIChyZXMgIT0gU3RhdHVzOjpPSykgewogICAgICAgICAgICAgcmV0dXJuIHJlczsKICAgICAgICAgfQotICAgIH0gZWxzZSBpZiAodHlwZSA9PSBrV2VibVZpZGVvTWltZVR5cGUgfHwKLSAgICAgICAgdHlwZSA9PSBrV2VibUF1ZGlvTWltZVR5cGUgfHwKLSAgICAgICAgdHlwZSA9PSBrV2VibUluaXREYXRhRm9ybWF0KSB7CisgICAgfSBlbHNlIGlmIChtaW1lVHlwZSA9PSBrV2VibVZpZGVvTWltZVR5cGUgfHwKKyAgICAgICAgbWltZVR5cGUgPT0ga1dlYm1BdWRpb01pbWVUeXBlIHx8CisgICAgICAgIG1pbWVUeXBlID09IGtXZWJtSW5pdERhdGFGb3JtYXQpIHsKICAgICAgICAgLy8gV2ViTSAiaW5pdCBkYXRhIiBpcyBqdXN0IGEgc2luZ2xlIGtleSBJRAogICAgICAgICBpZiAoaW5pdERhdGEuc2l6ZSgpICE9IGtLZXlJZFNpemUpIHsKICAgICAgICAgICAgIHJldHVybiBTdGF0dXM6OkVSUk9SX0RSTV9DQU5OT1RfSEFORExFOwpAQCAtNjksOCArNzAsMTIgQEAKICAgICAgICAgcmV0dXJuIFN0YXR1czo6RVJST1JfRFJNX0NBTk5PVF9IQU5ETEU7CiAgICAgfQogCisgICAgaWYgKGtleVR5cGUgPT0gVjFfMDo6S2V5VHlwZTo6UkVMRUFTRSkgeworICAgICAgICAvLyByZXN0b3JlIGtleQorICAgIH0KKwogICAgIC8vIEJ1aWxkIHRoZSByZXF1ZXN0Ci0gICAgc3RkOjpzdHJpbmcgcmVxdWVzdEpzb24gPSBnZW5lcmF0ZVJlcXVlc3Qoa2V5SWRzKTsKKyAgICBzdGQ6OnN0cmluZyByZXF1ZXN0SnNvbiA9IGdlbmVyYXRlUmVxdWVzdChrZXlUeXBlLCBrZXlJZHMpOwogICAgIHN0ZDo6dmVjdG9yPHVpbnQ4X3Q+IHJlcXVlc3RKc29uVmVjID0gU3RyVG9WZWN0b3IocmVxdWVzdEpzb24pOwogCiAgICAgbGljZW5zZVJlcXVlc3QtPmNsZWFyKCk7CkBAIC0xMzEsOSArMTM2LDExIEBACiAgICAgcmV0dXJuIFN0YXR1czo6T0s7CiB9CiAKLXN0ZDo6c3RyaW5nIEluaXREYXRhUGFyc2VyOjpnZW5lcmF0ZVJlcXVlc3QoY29uc3Qgc3RkOjp2ZWN0b3I8Y29uc3QgdWludDhfdCo+JiBrZXlJZHMpIHsKK3N0ZDo6c3RyaW5nIEluaXREYXRhUGFyc2VyOjpnZW5lcmF0ZVJlcXVlc3QoVjFfMDo6S2V5VHlwZSBrZXlUeXBlLAorICAgICAgICBjb25zdCBzdGQ6OnZlY3Rvcjxjb25zdCB1aW50OF90Kj4mIGtleUlkcykgewogICAgIGNvbnN0IHN0ZDo6c3RyaW5nIGtSZXF1ZXN0UHJlZml4KCJ7XCJraWRzXCI6WyIpOwotICAgIGNvbnN0IHN0ZDo6c3RyaW5nIGtSZXF1ZXN0U3VmZml4KCJdLFwidHlwZVwiOlwidGVtcG9yYXJ5XCJ9Iik7CisgICAgY29uc3Qgc3RkOjpzdHJpbmcga1RlbXBvcmFyeVNlc3Npb24oIl0sXCJ0eXBlXCI6XCJ0ZW1wb3JhcnlcIn0iKTsKKyAgICBjb25zdCBzdGQ6OnN0cmluZyBrUGVyc2lzdGVudFNlc3Npb24oIl0sXCJ0eXBlXCI6XCJwZXJzaXN0ZW50LWxpY2Vuc2VcIn0iKTsKIAogICAgIHN0ZDo6c3RyaW5nIHJlcXVlc3Qoa1JlcXVlc3RQcmVmaXgpOwogICAgIHN0ZDo6c3RyaW5nIGVuY29kZWRJZDsKQEAgLTE0Nyw3ICsxNTQsMTIgQEAKICAgICAgICAgcmVxdWVzdC5hcHBlbmQoZW5jb2RlZElkKTsKICAgICAgICAgcmVxdWVzdC5wdXNoX2JhY2soJ1wiJyk7CiAgICAgfQotICAgIHJlcXVlc3QuYXBwZW5kKGtSZXF1ZXN0U3VmZml4KTsKKyAgICBpZiAoa2V5VHlwZSA9PSBWMV8wOjpLZXlUeXBlOjpTVFJFQU1JTkcpIHsKKyAgICAgICAgcmVxdWVzdC5hcHBlbmQoa1RlbXBvcmFyeVNlc3Npb24pOworICAgIH0gZWxzZSBpZiAoa2V5VHlwZSA9PSBWMV8wOjpLZXlUeXBlOjpPRkZMSU5FIHx8CisgICAgICAgICAgICAgICAgICAga2V5VHlwZSA9PSBWMV8wOjpLZXlUeXBlOjpSRUxFQVNFKSB7CisgICAgICAgICAgICByZXF1ZXN0LmFwcGVuZChrUGVyc2lzdGVudFNlc3Npb24pOworICAgIH0KIAogICAgIC8vIEFuZHJvaWQncyBCYXNlNjQgZW5jb2RlciBwcm9kdWNlcyBwYWRkaW5nLiBFTUUgZm9yYmlkcyBwYWRkaW5nLgogICAgIGNvbnN0IGNoYXIga0Jhc2U2NFBhZGRpbmcgPSAnPSc7CkBAIC0xNTcsNyArMTY5LDcgQEAKIH0KIAogfSAvLyBuYW1lc3BhY2UgY2xlYXJrZXkKLX0gLy8gbmFtZXNwYWNlIFYxXzEKK30gLy8gbmFtZXNwYWNlIFYxXzIKIH0gLy8gbmFtZXNwYWNlIGRybQogfSAvLyBuYW1lc3BhY2UgaGFyZHdhcmUKIH0gLy8gbmFtZXNwYWNlIGFuZHJvaWQKZGlmZiAtLWdpdCBhL2RybS9tZWRpYWRybS9wbHVnaW5zL2NsZWFya2V5L2hpZGwvSnNvbldlYktleS5jcHAgYi9kcm0vbWVkaWFkcm0vcGx1Z2lucy9jbGVhcmtleS9oaWRsL0pzb25XZWJLZXkuY3BwCmluZGV4IGNjY2I0MWUuLmQ5Mzc3N2QgMTAwNjQ0Ci0tLSBhL2RybS9tZWRpYWRybS9wbHVnaW5zL2NsZWFya2V5L2hpZGwvSnNvbldlYktleS5jcHAKKysrIGIvZHJtL21lZGlhZHJtL3BsdWdpbnMvY2xlYXJrZXkvaGlkbC9Kc29uV2ViS2V5LmNwcApAQCAtMjIsMTggKzIyLDIxIEBACiAjaW5jbHVkZSAiQmFzZTY0LmgiCiAKIG5hbWVzcGFjZSB7Citjb25zdCBzdGQ6OnN0cmluZyBrQmFzZTY0UGFkZGluZygiPSIpOwogY29uc3Qgc3RkOjpzdHJpbmcga0tleXNUYWcoImtleXMiKTsKIGNvbnN0IHN0ZDo6c3RyaW5nIGtLZXlUeXBlVGFnKCJrdHkiKTsKLWNvbnN0IHN0ZDo6c3RyaW5nIGtTeW1tZXRyaWNLZXlWYWx1ZSgib2N0Iik7CiBjb25zdCBzdGQ6OnN0cmluZyBrS2V5VGFnKCJrIik7CiBjb25zdCBzdGQ6OnN0cmluZyBrS2V5SWRUYWcoImtpZCIpOwotY29uc3Qgc3RkOjpzdHJpbmcga0Jhc2U2NFBhZGRpbmcoIj0iKTsKK2NvbnN0IHN0ZDo6c3RyaW5nIGtNZWRpYVNlc3Npb25UeXBlKCJ0eXBlIik7Citjb25zdCBzdGQ6OnN0cmluZyBrUGVyc2lzdGVudExpY2Vuc2VTZXNzaW9uKCJwZXJzaXN0ZW50LWxpY2Vuc2UiKTsKK2NvbnN0IHN0ZDo6c3RyaW5nIGtTeW1tZXRyaWNLZXlWYWx1ZSgib2N0Iik7Citjb25zdCBzdGQ6OnN0cmluZyBrVGVtcG9yYXJ5TGljZW5zZVNlc3Npb24oInRlbXBvcmFyeSIpOwogfQogCiBuYW1lc3BhY2UgYW5kcm9pZCB7CiBuYW1lc3BhY2UgaGFyZHdhcmUgewogbmFtZXNwYWNlIGRybSB7Ci1uYW1lc3BhY2UgVjFfMSB7CituYW1lc3BhY2UgVjFfMiB7CiBuYW1lc3BhY2UgY2xlYXJrZXkgewogCiBKc29uV2ViS2V5OjpKc29uV2ViS2V5KCkgewpAQCAtMjY4LDcgKzI3MSw3IEBACiB9CiAKIH0gLy8gbmFtZXNwYWNlIGNsZWFya2V5Ci19IC8vIG5hbWVzcGFjZSBWMV8xCit9IC8vIG5hbWVzcGFjZSBWMV8yCiB9IC8vIG5hbWVzcGFjZSBkcm0KIH0gLy8gbmFtZXNwYWNlIGhhcmR3YXJlCiB9IC8vIG5hbWVzcGFjZSBhbmRyb2lkCmRpZmYgLS1naXQgYS9kcm0vbWVkaWFkcm0vcGx1Z2lucy9jbGVhcmtleS9oaWRsL01lbW9yeUZpbGVTeXN0ZW0uY3BwIGIvZHJtL21lZGlhZHJtL3BsdWdpbnMvY2xlYXJrZXkvaGlkbC9NZW1vcnlGaWxlU3lzdGVtLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yZGNkMDBmCi0tLSAvZGV2L251bGwKKysrIGIvZHJtL21lZGlhZHJtL3BsdWdpbnMvY2xlYXJrZXkvaGlkbC9NZW1vcnlGaWxlU3lzdGVtLmNwcApAQCAtMCwwICsxLDkyIEBACisvLyBDb3B5cmlnaHQgMjAxOCBHb29nbGUgTExDLiBBbGwgUmlnaHRzIFJlc2VydmVkLiBUaGlzIGZpbGUgYW5kIHByb3ByaWV0YXJ5CisvLyBzb3VyY2UgY29kZSBtYXkgb25seSBiZSB1c2VkIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgV2lkZXZpbmUgTWFzdGVyCisvLyBMaWNlbnNlIEFncmVlbWVudC4KKworI2luY2x1ZGUgPHV0aWxzL0xvZy5oPgorI2luY2x1ZGUgPHN0cmluZz4KKworI2luY2x1ZGUgIk1lbW9yeUZpbGVTeXN0ZW0uaCIKKyNpbmNsdWRlICJVdGlscy5oIgorCituYW1lc3BhY2UgYW5kcm9pZCB7CituYW1lc3BhY2UgaGFyZHdhcmUgeworbmFtZXNwYWNlIGRybSB7CituYW1lc3BhY2UgVjFfMiB7CituYW1lc3BhY2UgY2xlYXJrZXkgeworCitzdGQ6OnN0cmluZyBNZW1vcnlGaWxlU3lzdGVtOjpHZXRGaWxlTmFtZShjb25zdCBzdGQ6OnN0cmluZyYgcGF0aCkgeworICAgIHNpemVfdCBpbmRleCA9IHBhdGguZmluZF9sYXN0X29mKCIvIik7CisgICAgaWYgKGluZGV4ICE9IHN0ZDo6c3RyaW5nOjpucG9zKSB7CisgICAgICAgIHJldHVybiBwYXRoLnN1YnN0cihpbmRleCsxKTsKKyAgICB9IGVsc2UgeworICAgICAgICByZXR1cm4gcGF0aDsKKyAgICB9Cit9CisKK2Jvb2wgTWVtb3J5RmlsZVN5c3RlbTo6RmlsZUV4aXN0cyhjb25zdCBzdGQ6OnN0cmluZyYgZmlsZU5hbWUpIGNvbnN0IHsKKyAgICBhdXRvIHJlc3VsdCA9IG1NZW1vcnlGaWxlU3lzdGVtLmZpbmQoZmlsZU5hbWUpOworICAgIHJldHVybiByZXN1bHQgIT0gbU1lbW9yeUZpbGVTeXN0ZW0uZW5kKCk7Cit9CisKK3NzaXplX3QgTWVtb3J5RmlsZVN5c3RlbTo6R2V0RmlsZVNpemUoY29uc3Qgc3RkOjpzdHJpbmcmIGZpbGVOYW1lKSBjb25zdCB7CisgICAgYXV0byByZXN1bHQgPSBtTWVtb3J5RmlsZVN5c3RlbS5maW5kKGZpbGVOYW1lKTsKKyAgICBpZiAocmVzdWx0ICE9IG1NZW1vcnlGaWxlU3lzdGVtLmVuZCgpKSB7CisgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxzc2l6ZV90PihyZXN1bHQtPnNlY29uZC5nZXRGaWxlU2l6ZSgpKTsKKyAgICB9IGVsc2UgeworICAgICAgICBBTE9HRSgiRmFpbGVkIHRvIGdldCBzaXplIGZvciAlcyIsIGZpbGVOYW1lLmNfc3RyKCkpOworICAgICAgICByZXR1cm4gLTE7CisgICAgfQorfQorCitzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4gTWVtb3J5RmlsZVN5c3RlbTo6TGlzdEZpbGVzKCkgY29uc3QgeworICAgIHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiBsaXN0OworICAgIGZvciAoY29uc3QgYXV0byYgZmlsZW5hbWUgOiBtTWVtb3J5RmlsZVN5c3RlbSkgeworICAgICAgICBsaXN0LnB1c2hfYmFjayhmaWxlbmFtZS5maXJzdCk7CisgICAgfQorICAgIHJldHVybiBsaXN0OworfQorCitzaXplX3QgTWVtb3J5RmlsZVN5c3RlbTo6UmVhZChjb25zdCBzdGQ6OnN0cmluZyYgcGF0aCwgc3RkOjpzdHJpbmcqIGJ1ZmZlcikgeworICAgIHN0ZDo6c3RyaW5nIGtleSA9IEdldEZpbGVOYW1lKHBhdGgpOworICAgIGF1dG8gcmVzdWx0ID0gbU1lbW9yeUZpbGVTeXN0ZW0uZmluZChrZXkpOworICAgIGlmIChyZXN1bHQgIT0gbU1lbW9yeUZpbGVTeXN0ZW0uZW5kKCkpIHsKKyAgICAgICAgc3RkOjpzdHJpbmcgc2VyaWFsaXplZEhhc2hGaWxlID0gcmVzdWx0LT5zZWNvbmQuZ2V0Q29udGVudCgpOworICAgICAgICBidWZmZXItPmFzc2lnbihzZXJpYWxpemVkSGFzaEZpbGUpOworICAgICAgICByZXR1cm4gYnVmZmVyLT5zaXplKCk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgQUxPR0UoIkZhaWxlZCB0byByZWFkIGZyb20gJXMiLCBwYXRoLmNfc3RyKCkpOworICAgICAgICByZXR1cm4gLTE7CisgICAgfQorfQorCitzaXplX3QgTWVtb3J5RmlsZVN5c3RlbTo6V3JpdGUoY29uc3Qgc3RkOjpzdHJpbmcmIHBhdGgsIGNvbnN0IE1lbW9yeUZpbGUmIG1lbW9yeUZpbGUpIHsKKyAgICBzdGQ6OnN0cmluZyBrZXkgPSBHZXRGaWxlTmFtZShwYXRoKTsKKyAgICBhdXRvIHJlc3VsdCA9IG1NZW1vcnlGaWxlU3lzdGVtLmZpbmQoa2V5KTsKKyAgICBpZiAocmVzdWx0ICE9IG1NZW1vcnlGaWxlU3lzdGVtLmVuZCgpKSB7CisgICAgICAgIG1NZW1vcnlGaWxlU3lzdGVtLmVyYXNlKGtleSk7CisgICAgfQorICAgIG1NZW1vcnlGaWxlU3lzdGVtLmluc2VydChzdGQ6OnBhaXI8c3RkOjpzdHJpbmcsIE1lbW9yeUZpbGU+KGtleSwgbWVtb3J5RmlsZSkpOworICAgIHJldHVybiBtZW1vcnlGaWxlLmdldEZpbGVTaXplKCk7Cit9CisKK2Jvb2wgTWVtb3J5RmlsZVN5c3RlbTo6UmVtb3ZlRmlsZShjb25zdCBzdGQ6OnN0cmluZyYgZmlsZU5hbWUpIHsKKyAgICBhdXRvIHJlc3VsdCA9IG1NZW1vcnlGaWxlU3lzdGVtLmZpbmQoZmlsZU5hbWUpOworICAgIGlmIChyZXN1bHQgIT0gbU1lbW9yeUZpbGVTeXN0ZW0uZW5kKCkpIHsKKyAgICAgICAgbU1lbW9yeUZpbGVTeXN0ZW0uZXJhc2UocmVzdWx0KTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfSBlbHNlIHsKKyAgICAgICAgQUxPR0UoIkNhbm5vdCBmaW5kIGxpY2Vuc2UgdG8gcmVtb3ZlOiAlcyIsIGZpbGVOYW1lLmNfc3RyKCkpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorfQorCitib29sIE1lbW9yeUZpbGVTeXN0ZW06OlJlbW92ZUFsbEZpbGVzKCkgeworICAgIG1NZW1vcnlGaWxlU3lzdGVtLmNsZWFyKCk7CisgICAgcmV0dXJuIG1NZW1vcnlGaWxlU3lzdGVtLmVtcHR5KCk7Cit9CisKK30gLy8gbmFtZXNwYWNlIGNsZWFya2V5Cit9IC8vIG5hbWVzcGFjZSBWMV8yCit9IC8vIG5hbWVzcGFjZSBkcm0KK30gLy8gbmFtZXNwYWNlIGhhcmR3YXJlCit9IC8vIG5hbWVzcGFjZSBhbmRyb2lkCmRpZmYgLS1naXQgYS9kcm0vbWVkaWFkcm0vcGx1Z2lucy9jbGVhcmtleS9oaWRsL1Nlc3Npb24uY3BwIGIvZHJtL21lZGlhZHJtL3BsdWdpbnMvY2xlYXJrZXkvaGlkbC9TZXNzaW9uLmNwcAppbmRleCAwN2M5MjY5Li5mNGM0OWI5IDEwMDY0NAotLS0gYS9kcm0vbWVkaWFkcm0vcGx1Z2lucy9jbGVhcmtleS9oaWRsL1Nlc3Npb24uY3BwCisrKyBiL2RybS9tZWRpYWRybS9wbHVnaW5zL2NsZWFya2V5L2hpZGwvU2Vzc2lvbi5jcHAKQEAgLTI4LDcgKzI4LDcgQEAKIG5hbWVzcGFjZSBhbmRyb2lkIHsKIG5hbWVzcGFjZSBoYXJkd2FyZSB7CiBuYW1lc3BhY2UgZHJtIHsKLW5hbWVzcGFjZSBWMV8xIHsKK25hbWVzcGFjZSBWMV8yIHsKIG5hbWVzcGFjZSBjbGVhcmtleSB7CiAKIHVzaW5nIDo6YW5kcm9pZDo6aGFyZHdhcmU6OmRybTo6VjFfMDo6S2V5VmFsdWU7CkBAIC00Miw5ICs0MiwxMCBAQAogU3RhdHVzIFNlc3Npb246OmdldEtleVJlcXVlc3QoCiAgICAgICAgIGNvbnN0IHN0ZDo6dmVjdG9yPHVpbnQ4X3Q+JiBpbml0RGF0YSwKICAgICAgICAgY29uc3Qgc3RkOjpzdHJpbmcmIG1pbWVUeXBlLAorICAgICAgICBWMV8wOjpLZXlUeXBlIGtleVR5cGUsCiAgICAgICAgIHN0ZDo6dmVjdG9yPHVpbnQ4X3Q+KiBrZXlSZXF1ZXN0KSBjb25zdCB7CiAgICAgSW5pdERhdGFQYXJzZXIgcGFyc2VyOwotICAgIHJldHVybiBwYXJzZXIucGFyc2UoaW5pdERhdGEsIG1pbWVUeXBlLCBrZXlSZXF1ZXN0KTsKKyAgICByZXR1cm4gcGFyc2VyLnBhcnNlKGluaXREYXRhLCBtaW1lVHlwZSwga2V5VHlwZSwga2V5UmVxdWVzdCk7CiB9CiAKIFN0YXR1cyBTZXNzaW9uOjpwcm92aWRlS2V5UmVzcG9uc2UoY29uc3Qgc3RkOjp2ZWN0b3I8dWludDhfdD4mIHJlc3BvbnNlKSB7CkBAIC04OSw3ICs5MCw3IEBACiB9CiAKIH0gLy8gbmFtZXNwYWNlIGNsZWFya2V5Ci19IC8vIG5hbWVzcGFjZSBWMV8xCit9IC8vIG5hbWVzcGFjZSBWMV8yCiB9IC8vIG5hbWVzcGFjZSBkcm0KIH0gLy8gbmFtZXNwYWNlIGhhcmR3YXJlCiB9IC8vIG5hbWVzcGFjZSBhbmRyb2lkCmRpZmYgLS1naXQgYS9kcm0vbWVkaWFkcm0vcGx1Z2lucy9jbGVhcmtleS9oaWRsL1Nlc3Npb25MaWJyYXJ5LmNwcCBiL2RybS9tZWRpYWRybS9wbHVnaW5zL2NsZWFya2V5L2hpZGwvU2Vzc2lvbkxpYnJhcnkuY3BwCmluZGV4IGI0MzE5ZTYuLjk5ZmIzMGYgMTAwNjQ0Ci0tLSBhL2RybS9tZWRpYWRybS9wbHVnaW5zL2NsZWFya2V5L2hpZGwvU2Vzc2lvbkxpYnJhcnkuY3BwCisrKyBiL2RybS9tZWRpYWRybS9wbHVnaW5zL2NsZWFya2V5L2hpZGwvU2Vzc2lvbkxpYnJhcnkuY3BwCkBAIC0yNCw3ICsyNCw3IEBACiBuYW1lc3BhY2UgYW5kcm9pZCB7CiBuYW1lc3BhY2UgaGFyZHdhcmUgewogbmFtZXNwYWNlIGRybSB7Ci1uYW1lc3BhY2UgVjFfMSB7CituYW1lc3BhY2UgVjFfMiB7CiBuYW1lc3BhY2UgY2xlYXJrZXkgewogCiB1c2luZyA6OmFuZHJvaWQ6OmhhcmR3YXJlOjpoaWRsX3N0cmluZzsKQEAgLTU5LDcgKzU5LDggQEAKIAogICAgIG1TZXNzaW9ucy5pbnNlcnQoc3RkOjpwYWlyPHN0ZDo6dmVjdG9yPHVpbnQ4X3Q+LAogICAgICAgICAgICAgc3A8U2Vzc2lvbj4gPihzZXNzaW9uSWQsIG5ldyBTZXNzaW9uKHNlc3Npb25JZCkpKTsKLSAgICBzdGQ6Om1hcDxzdGQ6OnZlY3Rvcjx1aW50OF90Piwgc3A8U2Vzc2lvbj4gPjo6aXRlcmF0b3IgaXRyID0gbVNlc3Npb25zLmZpbmQoc2Vzc2lvbklkKTsKKyAgICBzdGQ6Om1hcDxzdGQ6OnZlY3Rvcjx1aW50OF90Piwgc3A8U2Vzc2lvbj4gPjo6aXRlcmF0b3IgaXRyID0KKyAgICAgICAgICAgIG1TZXNzaW9ucy5maW5kKHNlc3Npb25JZCk7CiAgICAgaWYgKGl0ciAhPSBtU2Vzc2lvbnMuZW5kKCkpIHsKICAgICAgICAgcmV0dXJuIGl0ci0+c2Vjb25kOwogICAgIH0gZWxzZSB7CkBAIC03MCw3ICs3MSw4IEBACiBzcDxTZXNzaW9uPiBTZXNzaW9uTGlicmFyeTo6ZmluZFNlc3Npb24oCiAgICAgICAgIGNvbnN0IHN0ZDo6dmVjdG9yPHVpbnQ4X3Q+JiBzZXNzaW9uSWQpIHsKICAgICBNdXRleDo6QXV0b2xvY2sgbG9jayhtU2Vzc2lvbnNMb2NrKTsKLSAgICBzdGQ6Om1hcDxzdGQ6OnZlY3Rvcjx1aW50OF90Piwgc3A8U2Vzc2lvbj4gPjo6aXRlcmF0b3IgaXRyID0gbVNlc3Npb25zLmZpbmQoc2Vzc2lvbklkKTsKKyAgICBzdGQ6Om1hcDxzdGQ6OnZlY3Rvcjx1aW50OF90Piwgc3A8U2Vzc2lvbj4gPjo6aXRlcmF0b3IgaXRyID0KKyAgICAgICAgICAgIG1TZXNzaW9ucy5maW5kKHNlc3Npb25JZCk7CiAgICAgaWYgKGl0ciAhPSBtU2Vzc2lvbnMuZW5kKCkpIHsKICAgICAgICAgcmV0dXJuIGl0ci0+c2Vjb25kOwogICAgIH0gZWxzZSB7CkBAIC04NCw3ICs4Niw3IEBACiB9CiAKIH0gLy8gbmFtZXNwYWNlIGNsZWFya2V5Ci19IC8vIG5hbWVzcGFjZSBWMV8xCit9IC8vIG5hbWVzcGFjZSBWMV8yCiB9IC8vIG5hbWVzcGFjZSBkcm0KIH0gLy8gbmFtZXNwYWNlIGhhcmR3YXJlCiB9IC8vIG5hbWVzcGFjZSBhbmRyb2lkCmRpZmYgLS1naXQgYS9kcm0vbWVkaWFkcm0vcGx1Z2lucy9jbGVhcmtleS9oaWRsL2FuZHJvaWQuaGFyZHdhcmUuZHJtQDEuMS1zZXJ2aWNlLmNsZWFya2V5LnJjIGIvZHJtL21lZGlhZHJtL3BsdWdpbnMvY2xlYXJrZXkvaGlkbC9hbmRyb2lkLmhhcmR3YXJlLmRybUAxLjEtc2VydmljZS5jbGVhcmtleS5yYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZmZlODU2YS4uMDAwMDAwMAotLS0gYS9kcm0vbWVkaWFkcm0vcGx1Z2lucy9jbGVhcmtleS9oaWRsL2FuZHJvaWQuaGFyZHdhcmUuZHJtQDEuMS1zZXJ2aWNlLmNsZWFya2V5LnJjCisrKyAvZGV2L251bGwKQEAgLTEsNiArMCwwIEBACi1zZXJ2aWNlIHZlbmRvci5kcm0tY2xlYXJrZXktaGFsLTEtMSAvdmVuZG9yL2Jpbi9ody9hbmRyb2lkLmhhcmR3YXJlLmRybUAxLjEtc2VydmljZS5jbGVhcmtleQotICAgIGNsYXNzIGhhbAotICAgIHVzZXIgbWVkaWEKLSAgICBncm91cCBtZWRpYSBtZWRpYWRybQotICAgIGlvcHJpbyBydCA0Ci0gICAgd3JpdGVwaWQgL2Rldi9jcHVzZXQvZm9yZWdyb3VuZC90YXNrcwpkaWZmIC0tZ2l0IGEvZHJtL21lZGlhZHJtL3BsdWdpbnMvY2xlYXJrZXkvaGlkbC9hbmRyb2lkLmhhcmR3YXJlLmRybUAxLjItc2VydmljZS5jbGVhcmtleS5yYyBiL2RybS9tZWRpYWRybS9wbHVnaW5zL2NsZWFya2V5L2hpZGwvYW5kcm9pZC5oYXJkd2FyZS5kcm1AMS4yLXNlcnZpY2UuY2xlYXJrZXkucmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWMxODRmNwotLS0gL2Rldi9udWxsCisrKyBiL2RybS9tZWRpYWRybS9wbHVnaW5zL2NsZWFya2V5L2hpZGwvYW5kcm9pZC5oYXJkd2FyZS5kcm1AMS4yLXNlcnZpY2UuY2xlYXJrZXkucmMKQEAgLTAsMCArMSw2IEBACitzZXJ2aWNlIHZlbmRvci5kcm0tY2xlYXJrZXktaGFsLTEtMiAvdmVuZG9yL2Jpbi9ody9hbmRyb2lkLmhhcmR3YXJlLmRybUAxLjItc2VydmljZS5jbGVhcmtleQorICAgIGNsYXNzIGhhbAorICAgIHVzZXIgbWVkaWEKKyAgICBncm91cCBtZWRpYSBtZWRpYWRybQorICAgIGlvcHJpbyBydCA0CisgICAgd3JpdGVwaWQgL2Rldi9jcHVzZXQvZm9yZWdyb3VuZC90YXNrcwpkaWZmIC0tZ2l0IGEvZHJtL21lZGlhZHJtL3BsdWdpbnMvY2xlYXJrZXkvaGlkbC9pbmNsdWRlL0Flc0N0ckRlY3J5cHRvci5oIGIvZHJtL21lZGlhZHJtL3BsdWdpbnMvY2xlYXJrZXkvaGlkbC9pbmNsdWRlL0Flc0N0ckRlY3J5cHRvci5oCmluZGV4IDBjN2VmMjAuLjcyMWY0YzAgMTAwNjQ0Ci0tLSBhL2RybS9tZWRpYWRybS9wbHVnaW5zL2NsZWFya2V5L2hpZGwvaW5jbHVkZS9BZXNDdHJEZWNyeXB0b3IuaAorKysgYi9kcm0vbWVkaWFkcm0vcGx1Z2lucy9jbGVhcmtleS9oaWRsL2luY2x1ZGUvQWVzQ3RyRGVjcnlwdG9yLmgKQEAgLTIyLDcgKzIyLDcgQEAKIG5hbWVzcGFjZSBhbmRyb2lkIHsKIG5hbWVzcGFjZSBoYXJkd2FyZSB7CiBuYW1lc3BhY2UgZHJtIHsKLW5hbWVzcGFjZSBWMV8xIHsKK25hbWVzcGFjZSBWMV8yIHsKIG5hbWVzcGFjZSBjbGVhcmtleSB7CiAKIHVzaW5nIDo6YW5kcm9pZDo6aGFyZHdhcmU6OmRybTo6VjFfMDo6U3RhdHVzOwpAQCAtNDIsNyArNDIsNyBAQAogfTsKIAogfSAvLyBuYW1lc3BhY2UgY2xlYXJrZXkKLX0gLy8gbmFtZXNwYWNlIFYxXzEKK30gLy8gbmFtZXNwYWNlIFYxXzIKIH0gLy8gbmFtZXNwYWNlIGRybQogfSAvLyBuYW1lc3BhY2UgaGFyZHdhcmUKIH0gLy8gbmFtZXNwYWNlIGFuZHJvaWQKZGlmZiAtLWdpdCBhL2RybS9tZWRpYWRybS9wbHVnaW5zL2NsZWFya2V5L2hpZGwvaW5jbHVkZS9CYXNlNjQuaCBiL2RybS9tZWRpYWRybS9wbHVnaW5zL2NsZWFya2V5L2hpZGwvaW5jbHVkZS9CYXNlNjQuaAppbmRleCA0YTM4NWJkLi5lYzMwY2MxIDEwMDY0NAotLS0gYS9kcm0vbWVkaWFkcm0vcGx1Z2lucy9jbGVhcmtleS9oaWRsL2luY2x1ZGUvQmFzZTY0LmgKKysrIGIvZHJtL21lZGlhZHJtL3BsdWdpbnMvY2xlYXJrZXkvaGlkbC9pbmNsdWRlL0Jhc2U2NC5oCkBAIC0yNSw3ICsyNSw3IEBACiBuYW1lc3BhY2UgYW5kcm9pZCB7CiBuYW1lc3BhY2UgaGFyZHdhcmUgewogbmFtZXNwYWNlIGRybSB7Ci1uYW1lc3BhY2UgVjFfMSB7CituYW1lc3BhY2UgVjFfMiB7CiBuYW1lc3BhY2UgY2xlYXJrZXkgewogCiB1c2luZyA6OmFuZHJvaWQ6OnNwOwpAQCAtMzgsNyArMzgsNyBAQAogdm9pZCBlbmNvZGVCYXNlNjRVcmwoY29uc3Qgdm9pZCAqZGF0YSwgc2l6ZV90IHNpemUsIHN0ZDo6c3RyaW5nICpvdXQpOwogCiB9IC8vIG5hbWVzcGFjZSBjbGVhcmtleQotfSAvLyBuYW1lc3BhY2UgVjFfMQorfSAvLyBuYW1lc3BhY2UgVjFfMgogfSAvLyBuYW1lc3BhY2UgZHJtCiB9IC8vIG5hbWVzcGFjZSBoYXJkd2FyZQogfSAvLyBuYW1lc3BhY2UgYW5kcm9pZApkaWZmIC0tZ2l0IGEvZHJtL21lZGlhZHJtL3BsdWdpbnMvY2xlYXJrZXkvaGlkbC9pbmNsdWRlL0J1ZmZlci5oIGIvZHJtL21lZGlhZHJtL3BsdWdpbnMvY2xlYXJrZXkvaGlkbC9pbmNsdWRlL0J1ZmZlci5oCmluZGV4IDViYmIyOGEuLmM0OTdlMzcgMTAwNjQ0Ci0tLSBhL2RybS9tZWRpYWRybS9wbHVnaW5zL2NsZWFya2V5L2hpZGwvaW5jbHVkZS9CdWZmZXIuaAorKysgYi9kcm0vbWVkaWFkcm0vcGx1Z2lucy9jbGVhcmtleS9oaWRsL2luY2x1ZGUvQnVmZmVyLmgKQEAgLTI1LDcgKzI1LDcgQEAKIG5hbWVzcGFjZSBhbmRyb2lkIHsKIG5hbWVzcGFjZSBoYXJkd2FyZSB7CiBuYW1lc3BhY2UgZHJtIHsKLW5hbWVzcGFjZSBWMV8xIHsKK25hbWVzcGFjZSBWMV8yIHsKIG5hbWVzcGFjZSBjbGVhcmtleSB7CiAKIHVzaW5nIDo6YW5kcm9pZDo6c3A7CkBAIC01NCw3ICs1NCw3IEBACiB9OwogCiB9IC8vIG5hbWVzcGFjZSBjbGVhcmtleQotfSAvLyBuYW1lc3BhY2UgVjFfMQorfSAvLyBuYW1lc3BhY2UgVjFfMgogfSAvLyBuYW1lc3BhY2UgZHJtCiB9IC8vIG5hbWVzcGFjZSBoYXJkd2FyZQogfSAvLyBuYW1lc3BhY2UgYW5kcm9pZApkaWZmIC0tZ2l0IGEvZHJtL21lZGlhZHJtL3BsdWdpbnMvY2xlYXJrZXkvaGlkbC9pbmNsdWRlL0NsZWFyS2V5RHJtUHJvcGVydGllcy5oIGIvZHJtL21lZGlhZHJtL3BsdWdpbnMvY2xlYXJrZXkvaGlkbC9pbmNsdWRlL0NsZWFyS2V5RHJtUHJvcGVydGllcy5oCmluZGV4IGQ2NWIyNWMuLmY4MzkwM2MgMTAwNjQ0Ci0tLSBhL2RybS9tZWRpYWRybS9wbHVnaW5zL2NsZWFya2V5L2hpZGwvaW5jbHVkZS9DbGVhcktleURybVByb3BlcnRpZXMuaAorKysgYi9kcm0vbWVkaWFkcm0vcGx1Z2lucy9jbGVhcmtleS9oaWRsL2luY2x1ZGUvQ2xlYXJLZXlEcm1Qcm9wZXJ0aWVzLmgKQEAgLTIyLDEzICsyMiwxMyBAQAogbmFtZXNwYWNlIGFuZHJvaWQgewogbmFtZXNwYWNlIGhhcmR3YXJlIHsKIG5hbWVzcGFjZSBkcm0gewotbmFtZXNwYWNlIFYxXzEgeworbmFtZXNwYWNlIFYxXzIgewogbmFtZXNwYWNlIGNsZWFya2V5IHsKIAogc3RhdGljIGNvbnN0IHN0ZDo6c3RyaW5nIGtWZW5kb3JLZXkoInZlbmRvciIpOwogc3RhdGljIGNvbnN0IHN0ZDo6c3RyaW5nIGtWZW5kb3JWYWx1ZSgiR29vZ2xlIik7CiBzdGF0aWMgY29uc3Qgc3RkOjpzdHJpbmcga1ZlcnNpb25LZXkoInZlcnNpb24iKTsKLXN0YXRpYyBjb25zdCBzdGQ6OnN0cmluZyBrVmVyc2lvblZhbHVlKCIxLjEiKTsKK3N0YXRpYyBjb25zdCBzdGQ6OnN0cmluZyBrVmVyc2lvblZhbHVlKCIxLjIiKTsKIHN0YXRpYyBjb25zdCBzdGQ6OnN0cmluZyBrUGx1Z2luRGVzY3JpcHRpb25LZXkoImRlc2NyaXB0aW9uIik7CiBzdGF0aWMgY29uc3Qgc3RkOjpzdHJpbmcga1BsdWdpbkRlc2NyaXB0aW9uVmFsdWUoIkNsZWFyS2V5IENETSIpOwogc3RhdGljIGNvbnN0IHN0ZDo6c3RyaW5nIGtBbGdvcml0aG1zS2V5KCJhbGdvcml0aG1zIik7CkBAIC00MCwxMiArNDAsMTYgQEAKIHN0YXRpYyBjb25zdCB1aW50OF90IGtUZXN0RGV2aWNlSWREYXRhW10gPQogICAgICAgICB7MHgwLCAweDEsIDB4MiwgMHgzLCAweDQsIDB4NSwgMHg2LCAweDcsCiAgICAgICAgICAweDgsIDB4OSwgMHhhLCAweGIsIDB4YywgMHhkLCAweGUsIDB4Zn07CisKKy8vIHNldHRhYmxlIGJ5dGUgYXJyYXkgcHJvcGVydHkKK3N0YXRpYyBjb25zdCBzdGQ6OnN0cmluZyBrQ2xpZW50SWRLZXkoImNsaWVudElkIik7CisKIC8vIFRPRE8gc3R1YiBvdXQgbWV0cmljcyBmb3IgbncKIHN0YXRpYyBjb25zdCBzdGQ6OnN0cmluZyBrTWV0cmljc0tleSgibWV0cmljcyIpOwogc3RhdGljIGNvbnN0IHVpbnQ4X3Qga01ldHJpY3NEYXRhW10gPSB7IDAgfTsKIAogfSAvLyBuYW1lc3BhY2UgY2xlYXJrZXkKLX0gLy8gbmFtZXNwYWNlIFYxXzEKK30gLy8gbmFtZXNwYWNlIFYxXzIKIH0gLy8gbmFtZXNwYWNlIGRybQogfSAvLyBuYW1lc3BhY2UgaGFyZHdhcmUKIH0gLy8gbmFtZXNwYWNlIGFuZHJvaWQKZGlmZiAtLWdpdCBhL2RybS9tZWRpYWRybS9wbHVnaW5zL2NsZWFya2V5L2hpZGwvaW5jbHVkZS9DbGVhcktleVR5cGVzLmggYi9kcm0vbWVkaWFkcm0vcGx1Z2lucy9jbGVhcmtleS9oaWRsL2luY2x1ZGUvQ2xlYXJLZXlUeXBlcy5oCmluZGV4IDQ2Y2I1ZTQuLjdlOWI2YmQgMTAwNjQ0Ci0tLSBhL2RybS9tZWRpYWRybS9wbHVnaW5zL2NsZWFya2V5L2hpZGwvaW5jbHVkZS9DbGVhcktleVR5cGVzLmgKKysrIGIvZHJtL21lZGlhZHJtL3BsdWdpbnMvY2xlYXJrZXkvaGlkbC9pbmNsdWRlL0NsZWFyS2V5VHlwZXMuaApAQCAtMjQsNyArMjQsNyBAQAogbmFtZXNwYWNlIGFuZHJvaWQgewogbmFtZXNwYWNlIGhhcmR3YXJlIHsKIG5hbWVzcGFjZSBkcm0gewotbmFtZXNwYWNlIFYxXzEgeworbmFtZXNwYWNlIFYxXzIgewogbmFtZXNwYWNlIGNsZWFya2V5IHsKIAogdXNpbmcgOjphbmRyb2lkOjpoYXJkd2FyZTo6ZHJtOjpWMV8wOjpLZXlWYWx1ZTsKQEAgLTQ3LDcgKzQ3LDcgQEAKICAgdm9pZCBvcGVyYXRvcj0oY29uc3QgVHlwZU5hbWUmKSA9IGRlbGV0ZTsKIAogfSAvLyBuYW1lc3BhY2UgY2xlYXJrZXkKLX0gLy8gbmFtZXNwYWNlIFYxXzEKK30gLy8gbmFtZXNwYWNlIFYxXzIKIH0gLy8gbmFtZXNwYWNlIGRybQogfSAvLyBuYW1lc3BhY2UgaGFyZHdhcmUKIH0gLy8gbmFtZXNwYWNlIGFuZHJvaWQKZGlmZiAtLWdpdCBhL2RybS9tZWRpYWRybS9wbHVnaW5zL2NsZWFya2V5L2hpZGwvaW5jbHVkZS9DcmVhdGVQbHVnaW5GYWN0b3JpZXMuaCBiL2RybS9tZWRpYWRybS9wbHVnaW5zL2NsZWFya2V5L2hpZGwvaW5jbHVkZS9DcmVhdGVQbHVnaW5GYWN0b3JpZXMuaAppbmRleCA5OTUyMDI3Li42MzY4ZjNkIDEwMDY0NAotLS0gYS9kcm0vbWVkaWFkcm0vcGx1Z2lucy9jbGVhcmtleS9oaWRsL2luY2x1ZGUvQ3JlYXRlUGx1Z2luRmFjdG9yaWVzLmgKKysrIGIvZHJtL21lZGlhZHJtL3BsdWdpbnMvY2xlYXJrZXkvaGlkbC9pbmNsdWRlL0NyZWF0ZVBsdWdpbkZhY3Rvcmllcy5oCkBAIC0xNywxNyArMTcsMTcgQEAKICNpZm5kZWYgQ0xFQVJLRVlfQ1JFQVRFX1BMVUdJTl9GQUNUT1JJRVNfSF8KICNkZWZpbmUgQ0xFQVJLRVlfQ1JFQVRFX1BMVUdJTl9GQUNUT1JJRVNfSF8KIAotI2luY2x1ZGUgPGFuZHJvaWQvaGFyZHdhcmUvZHJtLzEuMS9JQ3J5cHRvRmFjdG9yeS5oPgotI2luY2x1ZGUgPGFuZHJvaWQvaGFyZHdhcmUvZHJtLzEuMS9JRHJtRmFjdG9yeS5oPgorI2luY2x1ZGUgPGFuZHJvaWQvaGFyZHdhcmUvZHJtLzEuMi9JQ3J5cHRvRmFjdG9yeS5oPgorI2luY2x1ZGUgPGFuZHJvaWQvaGFyZHdhcmUvZHJtLzEuMi9JRHJtRmFjdG9yeS5oPgogCiBuYW1lc3BhY2UgYW5kcm9pZCB7CiBuYW1lc3BhY2UgaGFyZHdhcmUgewogbmFtZXNwYWNlIGRybSB7Ci1uYW1lc3BhY2UgVjFfMSB7CituYW1lc3BhY2UgVjFfMiB7CiBuYW1lc3BhY2UgY2xlYXJrZXkgewogCi11c2luZyA6OmFuZHJvaWQ6OmhhcmR3YXJlOjpkcm06OlYxXzE6OklDcnlwdG9GYWN0b3J5OwotdXNpbmcgOjphbmRyb2lkOjpoYXJkd2FyZTo6ZHJtOjpWMV8xOjpJRHJtRmFjdG9yeTsKK3VzaW5nIDo6YW5kcm9pZDo6aGFyZHdhcmU6OmRybTo6VjFfMjo6SUNyeXB0b0ZhY3Rvcnk7Cit1c2luZyA6OmFuZHJvaWQ6OmhhcmR3YXJlOjpkcm06OlYxXzI6OklEcm1GYWN0b3J5OwogCiBleHRlcm4gIkMiIHsKICAgICBJRHJtRmFjdG9yeSogY3JlYXRlRHJtRmFjdG9yeSgpOwpAQCAtMzUsNyArMzUsNyBAQAogfQogCiB9ICAvLyBuYW1lc3BhY2UgY2xlYXJrZXkKLX0gIC8vIG5hbWVzcGFjZSBWMV8xCit9ICAvLyBuYW1lc3BhY2UgVjFfMgogfSAgLy8gbmFtZXNwYWNlIGRybQogfSAgLy8gbmFtZXNwYWNlIGhhcmR3YXJlCiB9ICAvLyBuYW1lc3BhY2UgYW5kcm9pZApkaWZmIC0tZ2l0IGEvZHJtL21lZGlhZHJtL3BsdWdpbnMvY2xlYXJrZXkvaGlkbC9pbmNsdWRlL0NyeXB0b0ZhY3RvcnkuaCBiL2RybS9tZWRpYWRybS9wbHVnaW5zL2NsZWFya2V5L2hpZGwvaW5jbHVkZS9DcnlwdG9GYWN0b3J5LmgKaW5kZXggMTc1YWI3Ni4uMjAzYmIyZCAxMDA2NDQKLS0tIGEvZHJtL21lZGlhZHJtL3BsdWdpbnMvY2xlYXJrZXkvaGlkbC9pbmNsdWRlL0NyeXB0b0ZhY3RvcnkuaAorKysgYi9kcm0vbWVkaWFkcm0vcGx1Z2lucy9jbGVhcmtleS9oaWRsL2luY2x1ZGUvQ3J5cHRvRmFjdG9yeS5oCkBAIC0xOCwxNyArMTgsMTcgQEAKICNkZWZpbmUgQ0xFQVJLRVlfQ1JZUFRPX0ZBQ1RPUllfSF8KIAogI2luY2x1ZGUgPGFuZHJvaWQvaGFyZHdhcmUvZHJtLzEuMC9JQ3J5cHRvUGx1Z2luLmg+Ci0jaW5jbHVkZSA8YW5kcm9pZC9oYXJkd2FyZS9kcm0vMS4xL0lDcnlwdG9GYWN0b3J5Lmg+CisjaW5jbHVkZSA8YW5kcm9pZC9oYXJkd2FyZS9kcm0vMS4yL0lDcnlwdG9GYWN0b3J5Lmg+CiAKICNpbmNsdWRlICJDbGVhcktleVR5cGVzLmgiCiAKIG5hbWVzcGFjZSBhbmRyb2lkIHsKIG5hbWVzcGFjZSBoYXJkd2FyZSB7CiBuYW1lc3BhY2UgZHJtIHsKLW5hbWVzcGFjZSBWMV8xIHsKK25hbWVzcGFjZSBWMV8yIHsKIG5hbWVzcGFjZSBjbGVhcmtleSB7CiAKLXVzaW5nIDo6YW5kcm9pZDo6aGFyZHdhcmU6OmRybTo6VjFfMTo6SUNyeXB0b0ZhY3Rvcnk7Cit1c2luZyA6OmFuZHJvaWQ6OmhhcmR3YXJlOjpkcm06OlYxXzI6OklDcnlwdG9GYWN0b3J5OwogdXNpbmcgOjphbmRyb2lkOjpoYXJkd2FyZTo6ZHJtOjpWMV8wOjpJQ3J5cHRvUGx1Z2luOwogdXNpbmcgOjphbmRyb2lkOjpoYXJkd2FyZTo6aGlkbF9hcnJheTsKIHVzaW5nIDo6YW5kcm9pZDo6aGFyZHdhcmU6OmhpZGxfc3RyaW5nOwpAQCAtNTIsNyArNTIsNyBAQAogfTsKIAogfSAvLyBuYW1lc3BhY2UgY2xlYXJrZXkKLX0gLy8gbmFtZXNwYWNlIFYxXzEKK30gLy8gbmFtZXNwYWNlIFYxXzIKIH0gLy8gbmFtZXNwYWNlIGRybQogfSAvLyBuYW1lc3BhY2UgaGFyZHdhcmUKIH0gLy8gbmFtZXNwYWNlIGFuZHJvaWQKZGlmZiAtLWdpdCBhL2RybS9tZWRpYWRybS9wbHVnaW5zL2NsZWFya2V5L2hpZGwvaW5jbHVkZS9DcnlwdG9QbHVnaW4uaCBiL2RybS9tZWRpYWRybS9wbHVnaW5zL2NsZWFya2V5L2hpZGwvaW5jbHVkZS9DcnlwdG9QbHVnaW4uaAppbmRleCA2YTczODA2Li40ODBkYzdlIDEwMDY0NAotLS0gYS9kcm0vbWVkaWFkcm0vcGx1Z2lucy9jbGVhcmtleS9oaWRsL2luY2x1ZGUvQ3J5cHRvUGx1Z2luLmgKKysrIGIvZHJtL21lZGlhZHJtL3BsdWdpbnMvY2xlYXJrZXkvaGlkbC9pbmNsdWRlL0NyeXB0b1BsdWdpbi5oCkBAIC0zMiw3ICszMiw3IEBACiBuYW1lc3BhY2UgYW5kcm9pZCB7CiBuYW1lc3BhY2UgaGFyZHdhcmUgewogbmFtZXNwYWNlIGRybSB7Ci1uYW1lc3BhY2UgVjFfMSB7CituYW1lc3BhY2UgVjFfMiB7CiBuYW1lc3BhY2UgY2xlYXJrZXkgewogCiB1c2luZyA6OmFuZHJvaWQ6OmhhcmR3YXJlOjpkcm06OlYxXzA6OkRlc3RpbmF0aW9uQnVmZmVyOwpAQCAtOTYsNyArOTYsNyBAQAogfTsKIAogfSAvLyBuYW1lc3BhY2UgY2xlYXJrZXkKLX0gLy8gbmFtZXNwYWNlIFYxXzEKK30gLy8gbmFtZXNwYWNlIFYxXzIKIH0gLy8gbmFtZXNwYWNlIGRybQogfSAvLyBuYW1lc3BhY2UgaGFyZHdhcmUKIH0gLy8gbmFtZXNwYWNlIGFuZHJvaWQKZGlmZiAtLWdpdCBhL2RybS9tZWRpYWRybS9wbHVnaW5zL2NsZWFya2V5L2hpZGwvaW5jbHVkZS9EZXZpY2VGaWxlcy5oIGIvZHJtL21lZGlhZHJtL3BsdWdpbnMvY2xlYXJrZXkvaGlkbC9pbmNsdWRlL0RldmljZUZpbGVzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTU0YWU1OQotLS0gL2Rldi9udWxsCisrKyBiL2RybS9tZWRpYWRybS9wbHVnaW5zL2NsZWFya2V5L2hpZGwvaW5jbHVkZS9EZXZpY2VGaWxlcy5oCkBAIC0wLDAgKzEsNzEgQEAKKy8vIENvcHlyaWdodCAyMDE4IEdvb2dsZSBMTEMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuIFRoaXMgZmlsZSBhbmQgcHJvcHJpZXRhcnkKKy8vIHNvdXJjZSBjb2RlIG1heSBvbmx5IGJlIHVzZWQgYW5kIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBXaWRldmluZSBNYXN0ZXIKKy8vIExpY2Vuc2UgQWdyZWVtZW50LgorLy8KKyNpZm5kZWYgQ0xFQVJLRVlfREVWSUNFX0ZJTEVTX0hfCisjZGVmaW5lIENMRUFSS0VZX0RFVklDRV9GSUxFU19IXworCisjaW5jbHVkZSA8ZXJybm8uaD4KKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHVuaXN0ZC5oPgorCisjaW5jbHVkZSA8c2V0PgorI2luY2x1ZGUgPHN0cmluZz4KKyNpbmNsdWRlIDx2ZWN0b3I+CisKKyNpbmNsdWRlICJwcm90b3MvRGV2aWNlRmlsZXMucGIuaCIKKyNpbmNsdWRlICJDbGVhcktleVR5cGVzLmgiCisjaW5jbHVkZSAiTWVtb3J5RmlsZVN5c3RlbS5oIgorCituYW1lc3BhY2UgYW5kcm9pZCB7CituYW1lc3BhY2UgaGFyZHdhcmUgeworbmFtZXNwYWNlIGRybSB7CituYW1lc3BhY2UgVjFfMiB7CituYW1lc3BhY2UgY2xlYXJrZXkgeworCitjbGFzcyBEZXZpY2VGaWxlcyB7CisgcHVibGljOgorICAgIHR5cGVkZWYgZW51bSB7CisgICAgICAgIGtMaWNlbnNlU3RhdGVVbmtub3duLAorICAgICAgICBrTGljZW5zZVN0YXRlQWN0aXZlLAorICAgICAgICBrTGljZW5zZVN0YXRlUmVsZWFzaW5nLAorICAgIH0gTGljZW5zZVN0YXRlOworCisgICAgRGV2aWNlRmlsZXMoKSB7fTsKKyAgICB2aXJ0dWFsIH5EZXZpY2VGaWxlcygpIHt9OworCisgICAgdmlydHVhbCBib29sIFN0b3JlTGljZW5zZShjb25zdCBzdGQ6OnN0cmluZyYga2V5U2V0SWQsIExpY2Vuc2VTdGF0ZSBzdGF0ZSwKKyAgICAgICAgICAgIGNvbnN0IHN0ZDo6c3RyaW5nJiBrZXlSZXNwb25zZSk7CisKKyAgICB2aXJ0dWFsIGJvb2wgUmV0cmlldmVMaWNlbnNlKAorICAgICAgICAgICAgY29uc3Qgc3RkOjpzdHJpbmcmIGtleV9zZXRfaWQsIExpY2Vuc2VTdGF0ZSogc3RhdGUsIHN0ZDo6c3RyaW5nKiBvZmZsaW5lTGljZW5zZSk7CisKKyAgICB2aXJ0dWFsIGJvb2wgTGljZW5zZUV4aXN0cyhjb25zdCBzdGQ6OnN0cmluZyYga2V5U2V0SWQpOworCisgICAgdmlydHVhbCBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4gTGlzdExpY2Vuc2VzKCkgY29uc3Q7CisKKyAgICB2aXJ0dWFsIGJvb2wgRGVsZXRlTGljZW5zZShjb25zdCBzdGQ6OnN0cmluZyYga2V5U2V0SWQpOworCisgICAgdmlydHVhbCBib29sIERlbGV0ZUFsbExpY2Vuc2VzKCk7CisKKyBwcml2YXRlOgorICAgIGJvb2wgRmlsZUV4aXN0cyhjb25zdCBzdGQ6OnN0cmluZyYgcGF0aCkgY29uc3Q7CisgICAgc3NpemVfdCBHZXRGaWxlU2l6ZShjb25zdCBzdGQ6OnN0cmluZyYgZmlsZU5hbWUpIGNvbnN0OworICAgIGJvb2wgUmVtb3ZlRmlsZShjb25zdCBzdGQ6OnN0cmluZyYgZmlsZU5hbWUpOworCisgICAgYm9vbCBSZXRyaWV2ZUhhc2hlZEZpbGUoY29uc3Qgc3RkOjpzdHJpbmcmIGZpbGVOYW1lLCBPZmZsaW5lRmlsZSogZGVTZXJpYWxpemVkRmlsZSk7CisgICAgYm9vbCBTdG9yZUZpbGVSYXcoY29uc3Qgc3RkOjpzdHJpbmcmIGZpbGVOYW1lLCBjb25zdCBzdGQ6OnN0cmluZyYgc2VyaWFsaXplZEZpbGUpOworICAgIGJvb2wgU3RvcmVGaWxlV2l0aEhhc2goY29uc3Qgc3RkOjpzdHJpbmcmIGZpbGVOYW1lLCBjb25zdCBzdGQ6OnN0cmluZyYgc2VyaWFsaXplZEZpbGUpOworCisgICAgTWVtb3J5RmlsZVN5c3RlbSBtRmlsZUhhbmRsZTsKKworICAgIENMRUFSS0VZX0RJU0FMTE9XX0NPUFlfQU5EX0FTU0lHTihEZXZpY2VGaWxlcyk7Cit9OworCit9IC8vIG5hbWVzcGFjZSBjbGVhcmtleQorfSAvLyBuYW1lc3BhY2UgVjFfMgorfSAvLyBuYW1lc3BhY2UgZHJtCit9IC8vIG5hbWVzcGFjZSBoYXJkd2FyZQorfSAvLyBuYW1lc3BhY2UgYW5kcm9pZAorCisjZW5kaWYgIC8vIENMRUFSS0VZX0RFVklDRV9GSUxFU19IXwpkaWZmIC0tZ2l0IGEvZHJtL21lZGlhZHJtL3BsdWdpbnMvY2xlYXJrZXkvaGlkbC9pbmNsdWRlL0RybUZhY3RvcnkuaCBiL2RybS9tZWRpYWRybS9wbHVnaW5zL2NsZWFya2V5L2hpZGwvaW5jbHVkZS9Ecm1GYWN0b3J5LmgKaW5kZXggNmY1ODE5NS4uZmY3MTVlYSAxMDA2NDQKLS0tIGEvZHJtL21lZGlhZHJtL3BsdWdpbnMvY2xlYXJrZXkvaGlkbC9pbmNsdWRlL0RybUZhY3RvcnkuaAorKysgYi9kcm0vbWVkaWFkcm0vcGx1Z2lucy9jbGVhcmtleS9oaWRsL2luY2x1ZGUvRHJtRmFjdG9yeS5oCkBAIC0xNywxNSArMTcsMTUgQEAKICNpZm5kZWYgQ0xFQVJLRVlfRFJNX0ZBQ1RPUllfSF8KICNkZWZpbmUgQ0xFQVJLRVlfRFJNX0ZBQ1RPUllfSF8KIAotI2luY2x1ZGUgPGFuZHJvaWQvaGFyZHdhcmUvZHJtLzEuMS9JRHJtUGx1Z2luLmg+Ci0jaW5jbHVkZSA8YW5kcm9pZC9oYXJkd2FyZS9kcm0vMS4xL0lEcm1GYWN0b3J5Lmg+CisjaW5jbHVkZSA8YW5kcm9pZC9oYXJkd2FyZS9kcm0vMS4yL0lEcm1QbHVnaW4uaD4KKyNpbmNsdWRlIDxhbmRyb2lkL2hhcmR3YXJlL2RybS8xLjIvSURybUZhY3RvcnkuaD4KIAogI2luY2x1ZGUgIkNsZWFyS2V5VHlwZXMuaCIKIAogbmFtZXNwYWNlIGFuZHJvaWQgewogbmFtZXNwYWNlIGhhcmR3YXJlIHsKIG5hbWVzcGFjZSBkcm0gewotbmFtZXNwYWNlIFYxXzEgeworbmFtZXNwYWNlIFYxXzIgewogbmFtZXNwYWNlIGNsZWFya2V5IHsKIAogdXNpbmcgOjphbmRyb2lkOjpoYXJkd2FyZTo6aGlkbF9hcnJheTsKQEAgLTUyLDcgKzUyLDcgQEAKIH07CiAKIH0gLy8gbmFtZXNwYWNlIGNsZWFya2V5Ci19IC8vIG5hbWVzcGFjZSBWMV8xCit9IC8vIG5hbWVzcGFjZSBWMV8yCiB9IC8vIG5hbWVzcGFjZSBkcm0KIH0gLy8gbmFtZXNwYWNlIGhhcmR3YXJlCiB9IC8vIG5hbWVzcGFjZSBhbmRyb2lkCmRpZmYgLS1naXQgYS9kcm0vbWVkaWFkcm0vcGx1Z2lucy9jbGVhcmtleS9oaWRsL2luY2x1ZGUvRHJtUGx1Z2luLmggYi9kcm0vbWVkaWFkcm0vcGx1Z2lucy9jbGVhcmtleS9oaWRsL2luY2x1ZGUvRHJtUGx1Z2luLmgKaW5kZXggZmIwNjk1YS4uMjU2YzVkNiAxMDA2NDQKLS0tIGEvZHJtL21lZGlhZHJtL3BsdWdpbnMvY2xlYXJrZXkvaGlkbC9pbmNsdWRlL0RybVBsdWdpbi5oCisrKyBiL2RybS9tZWRpYWRybS9wbHVnaW5zL2NsZWFya2V5L2hpZGwvaW5jbHVkZS9Ecm1QbHVnaW4uaApAQCAtMTcsMTggKzE3LDIxIEBACiAjaWZuZGVmIENMRUFSS0VZX0RSTV9QTFVHSU5fSF8KICNkZWZpbmUgQ0xFQVJLRVlfRFJNX1BMVUdJTl9IXwogCi0jaW5jbHVkZSA8YW5kcm9pZC9oYXJkd2FyZS9kcm0vMS4xL0lEcm1QbHVnaW4uaD4KKyNpbmNsdWRlIDxhbmRyb2lkL2hhcmR3YXJlL2RybS8xLjIvSURybVBsdWdpbi5oPgogCi0jaW5jbHVkZSA8c3RkaW8uaD4KICNpbmNsdWRlIDxtYXA+CisjaW5jbHVkZSA8c3RkaW8uaD4KIAorI2luY2x1ZGUgPHV0aWxzL0xpc3QuaD4KKworI2luY2x1ZGUgIkRldmljZUZpbGVzLmgiCiAjaW5jbHVkZSAiU2Vzc2lvbkxpYnJhcnkuaCIKICNpbmNsdWRlICJVdGlscy5oIgogCiBuYW1lc3BhY2UgYW5kcm9pZCB7CiBuYW1lc3BhY2UgaGFyZHdhcmUgewogbmFtZXNwYWNlIGRybSB7Ci1uYW1lc3BhY2UgVjFfMSB7CituYW1lc3BhY2UgVjFfMiB7CiBuYW1lc3BhY2UgY2xlYXJrZXkgewogCiB1c2luZyA6OmFuZHJvaWQ6OmhhcmR3YXJlOjpkcm06OlYxXzA6OkV2ZW50VHlwZTsKQEAgLTQxLDggKzQ0LDEyIEBACiB1c2luZyA6OmFuZHJvaWQ6OmhhcmR3YXJlOjpkcm06OlYxXzA6OlNlc3Npb25JZDsKIHVzaW5nIDo6YW5kcm9pZDo6aGFyZHdhcmU6OmRybTo6VjFfMDo6U3RhdHVzOwogdXNpbmcgOjphbmRyb2lkOjpoYXJkd2FyZTo6ZHJtOjpWMV8xOjpEcm1NZXRyaWNHcm91cDsKLXVzaW5nIDo6YW5kcm9pZDo6aGFyZHdhcmU6OmRybTo6VjFfMTo6SURybVBsdWdpbjsKK3VzaW5nIDo6YW5kcm9pZDo6aGFyZHdhcmU6OmRybTo6VjFfMTo6SGRjcExldmVsOwogdXNpbmcgOjphbmRyb2lkOjpoYXJkd2FyZTo6ZHJtOjpWMV8xOjpLZXlSZXF1ZXN0VHlwZTsKK3VzaW5nIDo6YW5kcm9pZDo6aGFyZHdhcmU6OmRybTo6VjFfMTo6U2VjdXJlU3RvcFJlbGVhc2U7Cit1c2luZyA6OmFuZHJvaWQ6OmhhcmR3YXJlOjpkcm06OlYxXzE6OlNlY3VyaXR5TGV2ZWw7Cit1c2luZyA6OmFuZHJvaWQ6OmhhcmR3YXJlOjpkcm06OlYxXzI6OklEcm1QbHVnaW47Cit1c2luZyA6OmFuZHJvaWQ6OmhhcmR3YXJlOjpkcm06OlYxXzI6Ok9mZmxpbmVMaWNlbnNlU3RhdGU7CiAKIHVzaW5nIDo6YW5kcm9pZDo6aGFyZHdhcmU6OmhpZGxfc3RyaW5nOwogdXNpbmcgOjphbmRyb2lkOjpoYXJkd2FyZTo6aGlkbF92ZWM7CkBAIC01Myw3ICs2MCw3IEBACiBzdHJ1Y3QgRHJtUGx1Z2luIDogcHVibGljIElEcm1QbHVnaW4gewogICAgIGV4cGxpY2l0IERybVBsdWdpbihTZXNzaW9uTGlicmFyeSogc2Vzc2lvbkxpYnJhcnkpOwogCi0gICAgdmlydHVhbCB+RHJtUGx1Z2luKCkge30KKyAgICB2aXJ0dWFsIH5Ecm1QbHVnaW4oKSB7IG1GaWxlSGFuZGxlLkRlbGV0ZUFsbExpY2Vuc2VzKCk7IH0KIAogICAgIFJldHVybjx2b2lkPiBvcGVuU2Vzc2lvbihvcGVuU2Vzc2lvbl9jYiBfaGlkbF9jYikgb3ZlcnJpZGU7CiAgICAgUmV0dXJuPHZvaWQ+IG9wZW5TZXNzaW9uXzFfMShTZWN1cml0eUxldmVsIHNlY3VyaXR5TGV2ZWwsCkBAIC05MSwxMyArOTgsNyBAQAogCiAgICAgUmV0dXJuPFN0YXR1cz4gcmVzdG9yZUtleXMoCiAgICAgICAgIGNvbnN0IGhpZGxfdmVjPHVpbnQ4X3Q+JiBzZXNzaW9uSWQsCi0gICAgICAgIGNvbnN0IGhpZGxfdmVjPHVpbnQ4X3Q+JiBrZXlTZXRJZCkgewotCi0gICAgICAgIGlmIChzZXNzaW9uSWQuc2l6ZSgpID09IDAgfHwga2V5U2V0SWQuc2l6ZSgpID09IDApIHsKLSAgICAgICAgICAgIHJldHVybiBTdGF0dXM6OkJBRF9WQUxVRTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gU3RhdHVzOjpFUlJPUl9EUk1fQ0FOTk9UX0hBTkRMRTsKLSAgICB9CisgICAgICAgIGNvbnN0IGhpZGxfdmVjPHVpbnQ4X3Q+JiBrZXlTZXRJZCkgb3ZlcnJpZGU7CiAKICAgICBSZXR1cm48dm9pZD4gcXVlcnlLZXlTdGF0dXMoCiAgICAgICAgIGNvbnN0IGhpZGxfdmVjPHVpbnQ4X3Q+JiBzZXNzaW9uSWQsCkBAIC0xNDEsNiArMTQyLDEzIEBACiAKICAgICBSZXR1cm48dm9pZD4gZ2V0TWV0cmljcyhnZXRNZXRyaWNzX2NiIF9oaWRsX2NiKSBvdmVycmlkZTsKIAorICAgIFJldHVybjx2b2lkPiBnZXRPZmZsaW5lTGljZW5zZUtleVNldElkcyhnZXRPZmZsaW5lTGljZW5zZUtleVNldElkc19jYiBfaGlkbF9jYikgb3ZlcnJpZGU7CisKKyAgICBSZXR1cm48U3RhdHVzPiByZW1vdmVPZmZsaW5lTGljZW5zZShjb25zdCBLZXlTZXRJZCAma2V5U2V0SWQpIG92ZXJyaWRlOworCisgICAgUmV0dXJuPHZvaWQ+IGdldE9mZmxpbmVMaWNlbnNlU3RhdGUoY29uc3QgS2V5U2V0SWQgJmtleVNldElkLAorICAgICAgICAgICAgZ2V0T2ZmbGluZUxpY2Vuc2VTdGF0ZV9jYiBfaGlkbF9jYikgb3ZlcnJpZGU7CisKICAgICBSZXR1cm48dm9pZD4gZ2V0UHJvcGVydHlTdHJpbmcoCiAgICAgICAgIGNvbnN0IGhpZGxfc3RyaW5nJiBuYW1lLAogICAgICAgICBnZXRQcm9wZXJ0eVN0cmluZ19jYiBfaGlkbF9jYikgb3ZlcnJpZGU7CkBAIC0zMDAsNiArMzA4LDcgQEAKIHByaXZhdGU6CiAgICAgdm9pZCBpbml0UHJvcGVydGllcygpOwogICAgIHZvaWQgaW5zdGFsbFNlY3VyZVN0b3AoY29uc3QgaGlkbF92ZWM8dWludDhfdD4mIHNlc3Npb25JZCk7CisgICAgYm9vbCBtYWtlS2V5U2V0SWQoc3RkOjpzdHJpbmcqIGtleVNldElkKTsKICAgICB2b2lkIHNldFBsYXlQb2xpY3koKTsKIAogICAgIFJldHVybjxTdGF0dXM+IHNldFNlY3VyaXR5TGV2ZWwoY29uc3QgaGlkbF92ZWM8dWludDhfdD4mIHNlc3Npb25JZCwKQEAgLTMyMyw2ICszMzIsNyBAQAogICAgIHN0ZDo6dmVjdG9yPEtleVZhbHVlPiBtUGxheVBvbGljeTsKICAgICBzdGQ6Om1hcDxzdGQ6OnN0cmluZywgc3RkOjpzdHJpbmc+IG1TdHJpbmdQcm9wZXJ0aWVzOwogICAgIHN0ZDo6bWFwPHN0ZDo6c3RyaW5nLCBzdGQ6OnZlY3Rvcjx1aW50OF90PiA+IG1CeXRlQXJyYXlQcm9wZXJ0aWVzOworICAgIHN0ZDo6bWFwPHN0ZDo6c3RyaW5nLCBzdGQ6OnZlY3Rvcjx1aW50OF90PiA+IG1SZWxlYXNlS2V5c01hcDsKICAgICBzdGQ6Om1hcDxzdGQ6OnZlY3Rvcjx1aW50OF90PiwgU2VjdXJpdHlMZXZlbD4gbVNlY3VyaXR5TGV2ZWw7CiAgICAgc3A8SURybVBsdWdpbkxpc3RlbmVyPiBtTGlzdGVuZXI7CiAgICAgU2Vzc2lvbkxpYnJhcnkgKm1TZXNzaW9uTGlicmFyeTsKQEAgLTMzMSwxMSArMzQxLDEzIEBACiAgICAgaW50NjRfdCBtQ2xvc2VTZXNzaW9uTm90T3BlbmVkQ291bnQ7CiAgICAgdWludDMyX3QgbU5leHRTZWN1cmVTdG9wSWQ7CiAKKyAgICBEZXZpY2VGaWxlcyBtRmlsZUhhbmRsZTsKKwogICAgIENMRUFSS0VZX0RJU0FMTE9XX0NPUFlfQU5EX0FTU0lHTl9BTkRfTkVXKERybVBsdWdpbik7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBjbGVhcmtleQotfSAvLyBuYW1lc3BhY2UgVjFfMQorfSAvLyBuYW1lc3BhY2UgVjFfMgogfSAvLyBuYW1lc3BhY2UgZHJtCiB9IC8vIG5hbWVzcGFjZSBoYXJkd2FyZQogfSAvLyBuYW1lc3BhY2UgYW5kcm9pZApkaWZmIC0tZ2l0IGEvZHJtL21lZGlhZHJtL3BsdWdpbnMvY2xlYXJrZXkvaGlkbC9pbmNsdWRlL0luaXREYXRhUGFyc2VyLmggYi9kcm0vbWVkaWFkcm0vcGx1Z2lucy9jbGVhcmtleS9oaWRsL2luY2x1ZGUvSW5pdERhdGFQYXJzZXIuaAppbmRleCAzMTg5YzRhLi44ODlmNTExIDEwMDY0NAotLS0gYS9kcm0vbWVkaWFkcm0vcGx1Z2lucy9jbGVhcmtleS9oaWRsL2luY2x1ZGUvSW5pdERhdGFQYXJzZXIuaAorKysgYi9kcm0vbWVkaWFkcm0vcGx1Z2lucy9jbGVhcmtleS9oaWRsL2luY2x1ZGUvSW5pdERhdGFQYXJzZXIuaApAQCAtMjQsNyArMjQsNyBAQAogbmFtZXNwYWNlIGFuZHJvaWQgewogbmFtZXNwYWNlIGhhcmR3YXJlIHsKIG5hbWVzcGFjZSBkcm0gewotbmFtZXNwYWNlIFYxXzEgeworbmFtZXNwYWNlIFYxXzIgewogbmFtZXNwYWNlIGNsZWFya2V5IHsKIAogdXNpbmcgOjphbmRyb2lkOjpoYXJkd2FyZTo6ZHJtOjpWMV8wOjpTdGF0dXM7CkBAIC0zNCw3ICszNCw4IEBACiAgICAgSW5pdERhdGFQYXJzZXIoKSB7fQogCiAgICAgU3RhdHVzIHBhcnNlKGNvbnN0IHN0ZDo6dmVjdG9yPHVpbnQ4X3Q+JiBpbml0RGF0YSwKLSAgICAgICAgICAgIGNvbnN0IHN0ZDo6c3RyaW5nJiB0eXBlLAorICAgICAgICAgICAgY29uc3Qgc3RkOjpzdHJpbmcmIG1pbWVUeXBlLAorICAgICAgICAgICAgVjFfMDo6S2V5VHlwZSBrZXlUeXBlLAogICAgICAgICAgICAgc3RkOjp2ZWN0b3I8dWludDhfdD4qIGxpY2Vuc2VSZXF1ZXN0KTsKIAogcHJpdmF0ZToKQEAgLTQzLDEyICs0NCwxMiBAQAogICAgIFN0YXR1cyBwYXJzZVBzc2goY29uc3Qgc3RkOjp2ZWN0b3I8dWludDhfdD4mIGluaXREYXRhLAogICAgICAgICAgICAgc3RkOjp2ZWN0b3I8Y29uc3QgdWludDhfdCo+KiBrZXlJZHMpOwogCi0gICAgc3RkOjpzdHJpbmcgZ2VuZXJhdGVSZXF1ZXN0KAorICAgIHN0ZDo6c3RyaW5nIGdlbmVyYXRlUmVxdWVzdChWMV8wOjpLZXlUeXBlIGtleVR5cGUsCiAgICAgICAgICAgICBjb25zdCBzdGQ6OnZlY3Rvcjxjb25zdCB1aW50OF90Kj4mIGtleUlkcyk7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBjbGVhcmtleQotfSAvLyBuYW1lc3BhY2UgVjFfMQorfSAvLyBuYW1lc3BhY2UgVjFfMgogfSAvLyBuYW1lc3BhY2UgZHJtCiB9IC8vIG5hbWVzcGFjZSBoYXJkd2FyZQogfSAvLyBuYW1lc3BhY2UgYW5kcm9pZApkaWZmIC0tZ2l0IGEvZHJtL21lZGlhZHJtL3BsdWdpbnMvY2xlYXJrZXkvaGlkbC9pbmNsdWRlL0pzb25XZWJLZXkuaCBiL2RybS9tZWRpYWRybS9wbHVnaW5zL2NsZWFya2V5L2hpZGwvaW5jbHVkZS9Kc29uV2ViS2V5LmgKaW5kZXggNGFiMDM0Yy4uZTU3NDcwYyAxMDA2NDQKLS0tIGEvZHJtL21lZGlhZHJtL3BsdWdpbnMvY2xlYXJrZXkvaGlkbC9pbmNsdWRlL0pzb25XZWJLZXkuaAorKysgYi9kcm0vbWVkaWFkcm0vcGx1Z2lucy9jbGVhcmtleS9oaWRsL2luY2x1ZGUvSnNvbldlYktleS5oCkBAIC0yMyw3ICsyMyw3IEBACiBuYW1lc3BhY2UgYW5kcm9pZCB7CiBuYW1lc3BhY2UgaGFyZHdhcmUgewogbmFtZXNwYWNlIGRybSB7Ci1uYW1lc3BhY2UgVjFfMSB7CituYW1lc3BhY2UgVjFfMiB7CiBuYW1lc3BhY2UgY2xlYXJrZXkgewogCiBjbGFzcyBKc29uV2ViS2V5IHsKQEAgLTU0LDcgKzU0LDcgQEAKIH07CiAKIH0gLy8gbmFtZXNwYWNlIGNsZWFya2V5Ci19IC8vIG5hbWVzcGFjZSBWMV8xCit9IC8vIG5hbWVzcGFjZSBWMV8yCiB9IC8vIG5hbWVzcGFjZSBkcm0KIH0gLy8gbmFtZXNwYWNlIGhhcmR3YXJlCiB9IC8vIG5hbWVzcGFjZSBhbmRyb2lkCmRpZmYgLS1naXQgYS9kcm0vbWVkaWFkcm0vcGx1Z2lucy9jbGVhcmtleS9oaWRsL2luY2x1ZGUvTWVtb3J5RmlsZVN5c3RlbS5oIGIvZHJtL21lZGlhZHJtL3BsdWdpbnMvY2xlYXJrZXkvaGlkbC9pbmNsdWRlL01lbW9yeUZpbGVTeXN0ZW0uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iY2Q5ZmQ2Ci0tLSAvZGV2L251bGwKKysrIGIvZHJtL21lZGlhZHJtL3BsdWdpbnMvY2xlYXJrZXkvaGlkbC9pbmNsdWRlL01lbW9yeUZpbGVTeXN0ZW0uaApAQCAtMCwwICsxLDY4IEBACisvLyBDb3B5cmlnaHQgMjAxOCBHb29nbGUgTExDLiBBbGwgUmlnaHRzIFJlc2VydmVkLiBUaGlzIGZpbGUgYW5kIHByb3ByaWV0YXJ5CisvLyBzb3VyY2UgY29kZSBtYXkgb25seSBiZSB1c2VkIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgV2lkZXZpbmUgTWFzdGVyCisvLyBMaWNlbnNlIEFncmVlbWVudC4KKy8vCisjaWZuZGVmIENMRUFSS0VZX01FTU9SWV9GSUxFX1NZU1RFTV9IXworI2RlZmluZSBDTEVBUktFWV9NRU1PUllfRklMRV9TWVNURU1fSF8KKworI2luY2x1ZGUgPG1hcD4KKyNpbmNsdWRlIDxzdHJpbmc+CisKKyNpbmNsdWRlICJDbGVhcktleVR5cGVzLmgiCisKK25hbWVzcGFjZSBhbmRyb2lkIHsKK25hbWVzcGFjZSBoYXJkd2FyZSB7CituYW1lc3BhY2UgZHJtIHsKK25hbWVzcGFjZSBWMV8yIHsKK25hbWVzcGFjZSBjbGVhcmtleSB7CisKKy8vIFVzaW5nIGFuZHJvaWQgZmlsZSBzeXN0ZW0gcmVxdWlyZXMgY2xlYXJrZXkgcGx1Z2luIHRvIHVwZGF0ZQorLy8gaXRzIHNlcG9saWN5LiBIb3dldmVyLCB3ZSBhcmUgdW5hYmxlIHRvIHVwZGF0ZSBzZXBvbGljeSBmb3IKKy8vIG9sZGVyIHZlbmRvciBwYXJ0aXRpb25zLiBUbyBwcm92aWRlIGJhY2t3YXJkIGNvbXBhdGliaWxpdHksCisvLyBjbGVhcmtleSBwbHVnaW4gaW1wbGVtZW50cyBhIHZlcnkgc2ltcGxlIGZpbGUgc3lzdGVtIGluIG1lbW9yeS4KKy8vIFRoaXMgbWVtb3J5IGZpbGUgc3lzdGVtIGRvZXMgbm90IHN1cHBvcnQgZGlyZWN0b3J5IHN0cnVjdHVyZS4KK2NsYXNzIE1lbW9yeUZpbGVTeXN0ZW0geworIHB1YmxpYzoKKyAgICBzdHJ1Y3QgTWVtb3J5RmlsZSB7CisgICAgICAgIHN0ZDo6c3RyaW5nIGZpbGVOYW1lOyAgLy8gZXhjbHVkZXMgcGF0aAorICAgICAgICBzdGQ6OnN0cmluZyBjb250ZW50OworICAgICAgICBzaXplX3QgZmlsZVNpemU7CisKKyAgICAgICAgc3RkOjpzdHJpbmcgZ2V0Q29udGVudCgpIGNvbnN0IHsgcmV0dXJuIGNvbnRlbnQ7IH0KKyAgICAgICAgc2l6ZV90IGdldEZpbGVTaXplKCkgY29uc3QgeyByZXR1cm4gZmlsZVNpemU7IH0KKyAgICAgICAgdm9pZCBzZXRDb250ZW50KGNvbnN0IHN0ZDo6c3RyaW5nJiBmaWxlKSB7IGNvbnRlbnQgPSBmaWxlOyB9CisgICAgICAgIHZvaWQgc2V0RmlsZU5hbWUoY29uc3Qgc3RkOjpzdHJpbmcmIG5hbWUpIHsgZmlsZU5hbWUgPSBuYW1lOyB9CisgICAgICAgIHZvaWQgc2V0RmlsZVNpemUoc2l6ZV90IHNpemUpIHsKKyAgICAgICAgICAgIGNvbnRlbnQucmVzaXplKHNpemUpOyBmaWxlU2l6ZSA9IHNpemU7CisgICAgICAgIH0KKyAgICB9OworCisgICAgTWVtb3J5RmlsZVN5c3RlbSgpIHt9OworICAgIHZpcnR1YWwgfk1lbW9yeUZpbGVTeXN0ZW0oKSB7fTsKKworICAgIGJvb2wgRmlsZUV4aXN0cyhjb25zdCBzdGQ6OnN0cmluZyYgZmlsZU5hbWUpIGNvbnN0OworICAgIHNzaXplX3QgR2V0RmlsZVNpemUoY29uc3Qgc3RkOjpzdHJpbmcmIGZpbGVOYW1lKSBjb25zdDsKKyAgICBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4gTGlzdEZpbGVzKCkgY29uc3Q7CisgICAgc2l6ZV90IFJlYWQoY29uc3Qgc3RkOjpzdHJpbmcmIHBhdGhOYW1lLCBzdGQ6OnN0cmluZyogYnVmZmVyKTsKKyAgICBib29sIFJlbW92ZUFsbEZpbGVzKCk7CisgICAgYm9vbCBSZW1vdmVGaWxlKGNvbnN0IHN0ZDo6c3RyaW5nJiBmaWxlTmFtZSk7CisgICAgc2l6ZV90IFdyaXRlKGNvbnN0IHN0ZDo6c3RyaW5nJiBwYXRoTmFtZSwgY29uc3QgTWVtb3J5RmlsZSYgbWVtb3J5RmlsZSk7CisKKyBwcml2YXRlOgorICAgIC8vIExpY2Vuc2UgZmlsZSBuYW1lIGlzIG1hZGUgdXAgb2YgYSB1bmlxdWUga2V5U2V0SWQsIHRoZXJlZm9yZSwKKyAgICAvLyB0aGUgZmlsZW5hbWUgY2FuIGJlIHVzZWQgYXMgdGhlIGtleSB0byBsb2NhdGUgbGljZW5zZXMgaW4gdGhlCisgICAgLy8gbWVtb3J5IGZpbGUgc3lzdGVtLgorICAgIHN0ZDo6bWFwPHN0ZDo6c3RyaW5nLCBNZW1vcnlGaWxlPiBtTWVtb3J5RmlsZVN5c3RlbTsKKworICAgIHN0ZDo6c3RyaW5nIEdldEZpbGVOYW1lKGNvbnN0IHN0ZDo6c3RyaW5nJiBwYXRoKTsKKworICAgIENMRUFSS0VZX0RJU0FMTE9XX0NPUFlfQU5EX0FTU0lHTihNZW1vcnlGaWxlU3lzdGVtKTsKK307CisKK30gLy8gbmFtZXNwYWNlIGNsZWFya2V5Cit9IC8vIG5hbWVzcGFjZSBWMV8yCit9IC8vIG5hbWVzcGFjZSBkcm0KK30gLy8gbmFtZXNwYWNlIGhhcmR3YXJlCit9IC8vIG5hbWVzcGFjZSBhbmRyb2lkCisKKyNlbmRpZiAgLy8gQ0xFQVJLRVlfTUVNT1JZX0ZJTEVfU1lTVEVNX0hfCmRpZmYgLS1naXQgYS9kcm0vbWVkaWFkcm0vcGx1Z2lucy9jbGVhcmtleS9oaWRsL2luY2x1ZGUvU2Vzc2lvbi5oIGIvZHJtL21lZGlhZHJtL3BsdWdpbnMvY2xlYXJrZXkvaGlkbC9pbmNsdWRlL1Nlc3Npb24uaAppbmRleCBjZGRmY2E1Li5mMzU1NjBkIDEwMDY0NAotLS0gYS9kcm0vbWVkaWFkcm0vcGx1Z2lucy9jbGVhcmtleS9oaWRsL2luY2x1ZGUvU2Vzc2lvbi5oCisrKyBiL2RybS9tZWRpYWRybS9wbHVnaW5zL2NsZWFya2V5L2hpZGwvaW5jbHVkZS9TZXNzaW9uLmgKQEAgLTI3LDcgKzI3LDcgQEAKIG5hbWVzcGFjZSBhbmRyb2lkIHsKIG5hbWVzcGFjZSBoYXJkd2FyZSB7CiBuYW1lc3BhY2UgZHJtIHsKLW5hbWVzcGFjZSBWMV8xIHsKK25hbWVzcGFjZSBWMV8yIHsKIG5hbWVzcGFjZSBjbGVhcmtleSB7CiAKIHVzaW5nIDo6YW5kcm9pZDo6aGFyZHdhcmU6OmRybTo6VjFfMDo6U3RhdHVzOwpAQCAtNDIsOCArNDIsOSBAQAogICAgIGNvbnN0IHN0ZDo6dmVjdG9yPHVpbnQ4X3Q+JiBzZXNzaW9uSWQoKSBjb25zdCB7IHJldHVybiBtU2Vzc2lvbklkOyB9CiAKICAgICBTdGF0dXMgZ2V0S2V5UmVxdWVzdCgKLSAgICAgICAgICAgIGNvbnN0IHN0ZDo6dmVjdG9yPHVpbnQ4X3Q+JiBtaW1lVHlwZSwKLSAgICAgICAgICAgIGNvbnN0IHN0ZDo6c3RyaW5nJiBpbml0RGF0YVR5cGUsCisgICAgICAgICAgICBjb25zdCBzdGQ6OnZlY3Rvcjx1aW50OF90PiYgaW5pdERhdGFUeXBlLAorICAgICAgICAgICAgY29uc3Qgc3RkOjpzdHJpbmcmIG1pbWVUeXBlLAorICAgICAgICAgICAgVjFfMDo6S2V5VHlwZSBrZXlUeXBlLAogICAgICAgICAgICAgc3RkOjp2ZWN0b3I8dWludDhfdD4qIGtleVJlcXVlc3QpIGNvbnN0OwogCiAgICAgU3RhdHVzIHByb3ZpZGVLZXlSZXNwb25zZSgKQEAgLTYzLDcgKzY0LDcgQEAKIH07CiAKIH0gLy8gbmFtZXNwYWNlIGNsZWFya2V5Ci19IC8vIG5hbWVzcGFjZSBWMV8xCit9IC8vIG5hbWVzcGFjZSBWMV8yCiB9IC8vIG5hbWVzcGFjZSBkcm0KIH0gLy8gbmFtZXNwYWNlIGhhcmR3YXJlCiB9IC8vIG5hbWVzcGFjZSBhbmRyb2lkCmRpZmYgLS1naXQgYS9kcm0vbWVkaWFkcm0vcGx1Z2lucy9jbGVhcmtleS9oaWRsL2luY2x1ZGUvU2Vzc2lvbkxpYnJhcnkuaCBiL2RybS9tZWRpYWRybS9wbHVnaW5zL2NsZWFya2V5L2hpZGwvaW5jbHVkZS9TZXNzaW9uTGlicmFyeS5oCmluZGV4IDMyNmEwYzEuLjFlNTY3YjggMTAwNjQ0Ci0tLSBhL2RybS9tZWRpYWRybS9wbHVnaW5zL2NsZWFya2V5L2hpZGwvaW5jbHVkZS9TZXNzaW9uTGlicmFyeS5oCisrKyBiL2RybS9tZWRpYWRybS9wbHVnaW5zL2NsZWFya2V5L2hpZGwvaW5jbHVkZS9TZXNzaW9uTGlicmFyeS5oCkBAIC0yNiw3ICsyNiw3IEBACiBuYW1lc3BhY2UgYW5kcm9pZCB7CiBuYW1lc3BhY2UgaGFyZHdhcmUgewogbmFtZXNwYWNlIGRybSB7Ci1uYW1lc3BhY2UgVjFfMSB7CituYW1lc3BhY2UgVjFfMiB7CiBuYW1lc3BhY2UgY2xlYXJrZXkgewogCiB1c2luZyA6OmFuZHJvaWQ6OnNwOwpAQCAtNTgsNyArNTgsNyBAQAogfTsKIAogfSAvLyBuYW1lc3BhY2UgY2xlYXJrZXkKLX0gLy8gbmFtZXNwYWNlIFYxXzEKK30gLy8gbmFtZXNwYWNlIFYxXzIKIH0gLy8gbmFtZXNwYWNlIGRybQogfSAvLyBuYW1lc3BhY2UgaGFyZHdhcmUKIH0gLy8gbmFtZXNwYWNlIGFuZHJvaWQKZGlmZiAtLWdpdCBhL2RybS9tZWRpYWRybS9wbHVnaW5zL2NsZWFya2V5L2hpZGwvaW5jbHVkZS9UeXBlQ29udmVydC5oIGIvZHJtL21lZGlhZHJtL3BsdWdpbnMvY2xlYXJrZXkvaGlkbC9pbmNsdWRlL1R5cGVDb252ZXJ0LmgKaW5kZXggY2MwNjMyOS4uZjZkMzBjOSAxMDA2NDQKLS0tIGEvZHJtL21lZGlhZHJtL3BsdWdpbnMvY2xlYXJrZXkvaGlkbC9pbmNsdWRlL1R5cGVDb252ZXJ0LmgKKysrIGIvZHJtL21lZGlhZHJtL3BsdWdpbnMvY2xlYXJrZXkvaGlkbC9pbmNsdWRlL1R5cGVDb252ZXJ0LmgKQEAgLTI0LDcgKzI0LDcgQEAKIG5hbWVzcGFjZSBhbmRyb2lkIHsKIG5hbWVzcGFjZSBoYXJkd2FyZSB7CiBuYW1lc3BhY2UgZHJtIHsKLW5hbWVzcGFjZSBWMV8xIHsKK25hbWVzcGFjZSBWMV8yIHsKIG5hbWVzcGFjZSBjbGVhcmtleSB7CiAKIHVzaW5nIDo6YW5kcm9pZDo6aGFyZHdhcmU6OmhpZGxfYXJyYXk7CkBAIC02OSw3ICs2OSw3IEBACiB9CiAKIH0gIC8vIG5hbWVzcGFjZSBjbGVhcmtleQotfSAgLy8gbmFtZXNwYWNlIFYxXzEKK30gIC8vIG5hbWVzcGFjZSBWMV8yCiB9ICAvLyBuYW1lc3BhY2UgZHJtCiB9ICAvLyBuYW1lc3BhY2UgaGFyZHdhcmUKIH0gIC8vIG5hbWVzcGFjZSBhbmRyb2lkCmRpZmYgLS1naXQgYS9kcm0vbWVkaWFkcm0vcGx1Z2lucy9jbGVhcmtleS9oaWRsL3Byb3Rvcy9EZXZpY2VGaWxlcy5wcm90byBiL2RybS9tZWRpYWRybS9wbHVnaW5zL2NsZWFya2V5L2hpZGwvcHJvdG9zL0RldmljZUZpbGVzLnByb3RvCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNlMTFmMGIKLS0tIC9kZXYvbnVsbAorKysgYi9kcm0vbWVkaWFkcm0vcGx1Z2lucy9jbGVhcmtleS9oaWRsL3Byb3Rvcy9EZXZpY2VGaWxlcy5wcm90bwpAQCAtMCwwICsxLDQ3IEBACisvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLyBkZXZpY2VfZmlsZXMucHJvdG8KKy8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vIENvcHlyaWdodCAyMDE4IEdvb2dsZSBMTEMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuIFRoaXMgZmlsZSBhbmQgcHJvcHJpZXRhcnkKKy8vIHNvdXJjZSBjb2RlIG1heSBvbmx5IGJlIHVzZWQgYW5kIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBXaWRldmluZSBNYXN0ZXIKKy8vIExpY2Vuc2UgQWdyZWVtZW50LgorLy8KKy8vIERlc2NyaXB0aW9uOgorLy8gICBGb3JtYXQgb2YgdmFyaW91cyBmaWxlcyBzdG9yZWQgYXQgdGhlIGRldmljZS4KKy8vCitzeW50YXggPSAicHJvdG8yIjsKKworcGFja2FnZSBhbmRyb2lkLmhhcmR3YXJlLmRybS5WMV8yLmNsZWFya2V5OworCisvLyBuZWVkIHRoaXMgaWYgd2UgYXJlIHVzaW5nIGxpYnByb3RvYnVmLWNwcC0yLjMuMC1saXRlCitvcHRpb24gb3B0aW1pemVfZm9yID0gTElURV9SVU5USU1FOworCittZXNzYWdlIExpY2Vuc2UgeworICBlbnVtIExpY2Vuc2VTdGF0ZSB7CisgICAgQUNUSVZFID0gMTsKKyAgICBSRUxFQVNJTkcgPSAyOworICB9CisKKyAgb3B0aW9uYWwgTGljZW5zZVN0YXRlIHN0YXRlID0gMTsKKyAgb3B0aW9uYWwgYnl0ZXMgbGljZW5zZSA9IDI7Cit9CisKK21lc3NhZ2UgT2ZmbGluZUZpbGUgeworICBlbnVtIEZpbGVUeXBlIHsKKyAgICBMSUNFTlNFID0gMTsKKyAgfQorCisgIGVudW0gRmlsZVZlcnNpb24geworICAgIFZFUlNJT05fMSA9IDE7CisgIH0KKworICBvcHRpb25hbCBGaWxlVHlwZSB0eXBlID0gMTsKKyAgb3B0aW9uYWwgRmlsZVZlcnNpb24gdmVyc2lvbiA9IDIgW2RlZmF1bHQgPSBWRVJTSU9OXzFdOworICBvcHRpb25hbCBMaWNlbnNlIGxpY2Vuc2UgPSAzOworCit9CisKK21lc3NhZ2UgSGFzaGVkRmlsZSB7CisgIG9wdGlvbmFsIGJ5dGVzIGZpbGUgPSAxOworICAvLyBBIHJhdyAobm90IGhleC1lbmNvZGVkKSBTSEEyNTYsIHRha2VuIG92ZXIgdGhlIGJ5dGVzIG9mICdmaWxlJy4KKyAgb3B0aW9uYWwgYnl0ZXMgaGFzaCA9IDI7Cit9CmRpZmYgLS1naXQgYS9kcm0vbWVkaWFkcm0vcGx1Z2lucy9jbGVhcmtleS9oaWRsL3NlcnZpY2UuY3BwIGIvZHJtL21lZGlhZHJtL3BsdWdpbnMvY2xlYXJrZXkvaGlkbC9zZXJ2aWNlLmNwcAppbmRleCA2YTk3YjcyLi40Y2EzMWYzIDEwMDY0NAotLS0gYS9kcm0vbWVkaWFkcm0vcGx1Z2lucy9jbGVhcmtleS9oaWRsL3NlcnZpY2UuY3BwCisrKyBiL2RybS9tZWRpYWRybS9wbHVnaW5zL2NsZWFya2V5L2hpZGwvc2VydmljZS5jcHAKQEAgLTEzLDcgKzEzLDcgQEAKICAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKICAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgogICovCi0jZGVmaW5lIExPR19UQUcgImFuZHJvaWQuaGFyZHdhcmUuZHJtQDEuMS1zZXJ2aWNlLmNsZWFya2V5IgorI2RlZmluZSBMT0dfVEFHICJhbmRyb2lkLmhhcmR3YXJlLmRybUAxLjItc2VydmljZS5jbGVhcmtleSIKIAogI2luY2x1ZGUgPENyeXB0b0ZhY3RvcnkuaD4KICNpbmNsdWRlIDxEcm1GYWN0b3J5Lmg+CkBAIC0yNiwxNCArMjYsMTQgQEAKIHVzaW5nIDo6YW5kcm9pZDo6aGFyZHdhcmU6OmpvaW5ScGNUaHJlYWRwb29sOwogdXNpbmcgOjphbmRyb2lkOjpzcDsKIAotdXNpbmcgYW5kcm9pZDo6aGFyZHdhcmU6OmRybTo6VjFfMTo6SUNyeXB0b0ZhY3Rvcnk7Ci11c2luZyBhbmRyb2lkOjpoYXJkd2FyZTo6ZHJtOjpWMV8xOjpJRHJtRmFjdG9yeTsKLXVzaW5nIGFuZHJvaWQ6OmhhcmR3YXJlOjpkcm06OlYxXzE6OmNsZWFya2V5OjpDcnlwdG9GYWN0b3J5OwotdXNpbmcgYW5kcm9pZDo6aGFyZHdhcmU6OmRybTo6VjFfMTo6Y2xlYXJrZXk6OkRybUZhY3Rvcnk7Cit1c2luZyBhbmRyb2lkOjpoYXJkd2FyZTo6ZHJtOjpWMV8yOjpJQ3J5cHRvRmFjdG9yeTsKK3VzaW5nIGFuZHJvaWQ6OmhhcmR3YXJlOjpkcm06OlYxXzI6OklEcm1GYWN0b3J5OwordXNpbmcgYW5kcm9pZDo6aGFyZHdhcmU6OmRybTo6VjFfMjo6Y2xlYXJrZXk6OkNyeXB0b0ZhY3Rvcnk7Cit1c2luZyBhbmRyb2lkOjpoYXJkd2FyZTo6ZHJtOjpWMV8yOjpjbGVhcmtleTo6RHJtRmFjdG9yeTsKIAogCiBpbnQgbWFpbihpbnQgLyogYXJnYyAqLywgY2hhcioqIC8qIGFyZ3YgKi8pIHsKLSAgICBBTE9HRCgiYW5kcm9pZC5oYXJkd2FyZS5kcm1AMS4xLXNlcnZpY2UuY2xlYXJrZXkgc3RhcnRpbmcuLi4iKTsKKyAgICBBTE9HRCgiYW5kcm9pZC5oYXJkd2FyZS5kcm1AMS4yLXNlcnZpY2UuY2xlYXJrZXkgc3RhcnRpbmcuLi4iKTsKIAogICAgIC8vIFRoZSBEUk0gSEFMIG1heSBjb21tdW5pY2F0ZSB0byBvdGhlciB2ZW5kb3IgY29tcG9uZW50cyB2aWEKICAgICAvLyAvZGV2L3ZuZGJpbmRlcgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9tZWRpYS9BdWRpb1ByZXNlbnRhdGlvbkluZm8uaCBiL2luY2x1ZGUvbWVkaWEvQXVkaW9QcmVzZW50YXRpb25JbmZvLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGU5MWE5OTIuLjAwMDAwMDAKLS0tIGEvaW5jbHVkZS9tZWRpYS9BdWRpb1ByZXNlbnRhdGlvbkluZm8uaAorKysgL2Rldi9udWxsCkBAIC0xLDc5ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTggVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAotICoKLSAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwotICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgotICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0gKgotICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLSAqCi0gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCi0gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAotICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCi0gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCi0gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KLSAqLwotCi0jaWZuZGVmIEFVRElPX1BSRVNFTlRBVElPTl9JTkZPX0hfCi0jZGVmaW5lIEFVRElPX1BSRVNFTlRBVElPTl9JTkZPX0hfCi0KLSNpbmNsdWRlIDxzc3RyZWFtPgotI2luY2x1ZGUgPHN0ZGludC5oPgotCi0jaW5jbHVkZSA8dXRpbHMvS2V5ZWRWZWN0b3IuaD4KLSNpbmNsdWRlIDx1dGlscy9SZWZCYXNlLmg+Ci0jaW5jbHVkZSA8dXRpbHMvU3RyaW5nOC5oPgotI2luY2x1ZGUgPHV0aWxzL1ZlY3Rvci5oPgotCi1uYW1lc3BhY2UgYW5kcm9pZCB7Ci0KLWVudW0gbWFzdGVyaW5nX2luZGljYXRpb24gewotICAgIE1BU1RFUklOR19OT1RfSU5ESUNBVEVELAotICAgIE1BU1RFUkVEX0ZPUl9TVEVSRU8sCi0gICAgTUFTVEVSRURfRk9SX1NVUlJPVU5ELAotICAgIE1BU1RFUkVEX0ZPUl8zRCwKLSAgICBNQVNURVJFRF9GT1JfSEVBRFBIT05FLAotfTsKLQotc3RydWN0IEF1ZGlvUHJlc2VudGF0aW9uIDogcHVibGljIFJlZkJhc2UgewotICAgIGludDMyX3QgbVByZXNlbnRhdGlvbklkOwotICAgIGludDMyX3QgbVByb2dyYW1JZDsKLSAgICBLZXllZFZlY3RvcjxTdHJpbmc4LCBTdHJpbmc4PiBtTGFiZWxzOwotICAgIFN0cmluZzggbUxhbmd1YWdlOwotICAgIGludDMyX3QgbU1hc3RlcmluZ0luZGljYXRpb247Ci0gICAgYm9vbCBtQXVkaW9EZXNjcmlwdGlvbkF2YWlsYWJsZTsKLSAgICBib29sIG1TcG9rZW5TdWJ0aXRsZXNBdmFpbGFibGU7Ci0gICAgYm9vbCBtRGlhbG9ndWVFbmhhbmNlbWVudEF2YWlsYWJsZTsKLQotICAgIEF1ZGlvUHJlc2VudGF0aW9uKCkgewotICAgICAgICBtUHJlc2VudGF0aW9uSWQgPSAtMTsKLSAgICAgICAgbVByb2dyYW1JZCA9IC0xOwotICAgICAgICBtTGFuZ3VhZ2UgPSAiIjsKLSAgICAgICAgbU1hc3RlcmluZ0luZGljYXRpb24gPSBNQVNURVJJTkdfTk9UX0lORElDQVRFRDsKLSAgICAgICAgbUF1ZGlvRGVzY3JpcHRpb25BdmFpbGFibGUgPSBmYWxzZTsKLSAgICAgICAgbVNwb2tlblN1YnRpdGxlc0F2YWlsYWJsZSA9IGZhbHNlOwotICAgICAgICBtRGlhbG9ndWVFbmhhbmNlbWVudEF2YWlsYWJsZSA9IGZhbHNlOwotICAgIH0KLX07Ci0KLXR5cGVkZWYgVmVjdG9yPHNwPEF1ZGlvUHJlc2VudGF0aW9uPj4gQXVkaW9QcmVzZW50YXRpb25zOwotCi1jbGFzcyBBdWRpb1ByZXNlbnRhdGlvbkluZm8gOiBwdWJsaWMgUmVmQmFzZSB7Ci0gcHVibGljOgotICAgIEF1ZGlvUHJlc2VudGF0aW9uSW5mbygpOwotCi0gICAgfkF1ZGlvUHJlc2VudGF0aW9uSW5mbygpOwotCi0gICAgdm9pZCBhZGRQcmVzZW50YXRpb24oc3A8QXVkaW9QcmVzZW50YXRpb24+IHByZXNlbnRhdGlvbik7Ci0KLSAgICBzaXplX3QgY291bnRQcmVzZW50YXRpb25zKCkgY29uc3Q7Ci0KLSAgICBjb25zdCBzcDxBdWRpb1ByZXNlbnRhdGlvbj4gZ2V0UHJlc2VudGF0aW9uKHNpemVfdCBpbmRleCkgY29uc3Q7Ci0KLSBwcml2YXRlOgotICAgIEF1ZGlvUHJlc2VudGF0aW9ucyBtUHJlc2VudGF0aW9uczsKLX07Ci0KLX0gIC8vIG5hbWVzcGFjZSBhbmRyb2lkCi0KLSNlbmRpZiAgLy8gQVVESU9fUFJFU0VOVEFUSU9OX0lORk9fSF8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbWVkaWEvRXZlbnRMb2cuaCBiL2luY2x1ZGUvbWVkaWEvRXZlbnRMb2cuaApuZXcgZmlsZSBtb2RlIDEyMDAwMAppbmRleCAwMDAwMDAwLi45YjJjNGJmCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9tZWRpYS9FdmVudExvZy5oCkBAIC0wLDAgKzEgQEAKKy4uLy4uL21lZGlhL3V0aWxzL2luY2x1ZGUvbWVkaWF1dGlscy9FdmVudExvZy5oClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9tZWRpYS9NZWRpYUV4dHJhY3Rvci5oIGIvaW5jbHVkZS9tZWRpYS9NZWRpYUV4dHJhY3Rvci5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEyMDAwMAppbmRleCA0YjM1ZmUxLi4wMDAwMDAwCi0tLSBhL2luY2x1ZGUvbWVkaWEvTWVkaWFFeHRyYWN0b3IuaAorKysgL2Rldi9udWxsCkBAIC0xICswLDAgQEAKLS4uLy4uL21lZGlhL2xpYm1lZGlhZXh0cmFjdG9yL2luY2x1ZGUvbWVkaWEvTWVkaWFFeHRyYWN0b3IuaApcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbWVkaWEvTWVkaWFFeHRyYWN0b3JQbHVnaW5BcGkuaCBiL2luY2x1ZGUvbWVkaWEvTWVkaWFFeHRyYWN0b3JQbHVnaW5BcGkuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zODk2MmU1Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9tZWRpYS9NZWRpYUV4dHJhY3RvclBsdWdpbkFwaS5oCkBAIC0wLDAgKzEsMTY2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE4IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KKworI2lmbmRlZiBNRURJQV9FWFRSQUNUT1JfUExVR0lOX0FQSV9IXworI2RlZmluZSBNRURJQV9FWFRSQUNUT1JfUExVR0lOX0FQSV9IXworCisjaW5jbHVkZSA8dXRpbHMvRXJyb3JzLmg+IC8vIGZvciBzdGF0dXNfdAorI2luY2x1ZGUgPG1lZGlhL05ka01lZGlhRXJyb3IuaD4KK3N0cnVjdCBBTWVkaWFGb3JtYXQ7CisKK25hbWVzcGFjZSBhbmRyb2lkIHsKKworc3RydWN0IE1lZGlhVHJhY2s7CitjbGFzcyBNZXRhRGF0YUJhc2U7CitjbGFzcyBNZWRpYUJ1ZmZlckJhc2U7CisKK2V4dGVybiAiQyIgeworCitzdHJ1Y3QgQ0RhdGFTb3VyY2UgeworICAgIHNzaXplX3QgKCpyZWFkQXQpKHZvaWQgKmhhbmRsZSwgb2ZmNjRfdCBvZmZzZXQsIHZvaWQgKmRhdGEsIHNpemVfdCBzaXplKTsKKyAgICBzdGF0dXNfdCAoKmdldFNpemUpKHZvaWQgKmhhbmRsZSwgb2ZmNjRfdCAqc2l6ZSk7CisgICAgdWludDMyX3QgKCpmbGFncykodm9pZCAqaGFuZGxlICk7CisgICAgYm9vbCAoKmdldFVyaSkodm9pZCAqaGFuZGxlLCBjaGFyICp1cmlTdHJpbmcsIHNpemVfdCBidWZmZXJTaXplKTsKKyAgICB2b2lkICpoYW5kbGU7Cit9OworCitlbnVtIENNZWRpYVRyYWNrUmVhZE9wdGlvbnMgOiB1aW50MzJfdCB7CisgICAgU0VFS19QUkVWSU9VU19TWU5DID0gMCwKKyAgICBTRUVLX05FWFRfU1lOQyA9IDEsCisgICAgU0VFS19DTE9TRVNUX1NZTkMgPSAyLAorICAgIFNFRUtfQ0xPU0VTVCA9IDMsCisgICAgU0VFS19GUkFNRV9JTkRFWCA9IDQsCisgICAgU0VFSyA9IDgsCisgICAgTk9OQkxPQ0tJTkcgPSAxNgorfTsKKworc3RydWN0IENNZWRpYVRyYWNrIHsKKyAgICB2b2lkICpkYXRhOworICAgIHZvaWQgKCpmcmVlKSh2b2lkICpkYXRhKTsKKworICAgIHN0YXR1c190ICgqc3RhcnQpKHZvaWQgKmRhdGEpOworICAgIHN0YXR1c190ICgqc3RvcCkodm9pZCAqZGF0YSk7CisgICAgc3RhdHVzX3QgKCpnZXRGb3JtYXQpKHZvaWQgKmRhdGEsIE1ldGFEYXRhQmFzZSAmZm9ybWF0KTsKKyAgICBzdGF0dXNfdCAoKnJlYWQpKHZvaWQgKmRhdGEsIE1lZGlhQnVmZmVyQmFzZSAqKmJ1ZmZlciwgdWludDMyX3Qgb3B0aW9ucywgaW50NjRfdCBzZWVrUG9zVXMpOworICAgIGJvb2wgICAgICgqc3VwcG9ydHNOb25CbG9ja2luZ1JlYWQpKHZvaWQgKmRhdGEpOworfTsKKworc3RydWN0IENNZWRpYVRyYWNrVjIgeworICAgIHZvaWQgKmRhdGE7CisgICAgdm9pZCAoKmZyZWUpKHZvaWQgKmRhdGEpOworCisgICAgbWVkaWFfc3RhdHVzX3QgKCpzdGFydCkodm9pZCAqZGF0YSk7CisgICAgbWVkaWFfc3RhdHVzX3QgKCpzdG9wKSh2b2lkICpkYXRhKTsKKyAgICBtZWRpYV9zdGF0dXNfdCAoKmdldEZvcm1hdCkodm9pZCAqZGF0YSwgQU1lZGlhRm9ybWF0ICpmb3JtYXQpOworICAgIG1lZGlhX3N0YXR1c190ICgqcmVhZCkodm9pZCAqZGF0YSwgTWVkaWFCdWZmZXJCYXNlICoqYnVmZmVyLCB1aW50MzJfdCBvcHRpb25zLCBpbnQ2NF90IHNlZWtQb3NVcyk7CisgICAgYm9vbCAgICAgKCpzdXBwb3J0c05vbkJsb2NraW5nUmVhZCkodm9pZCAqZGF0YSk7Cit9OworCisKK3N0cnVjdCBDTWVkaWFFeHRyYWN0b3JWMSB7CisgICAgdm9pZCAqZGF0YTsKKworICAgIHZvaWQgKCpmcmVlKSh2b2lkICpkYXRhKTsKKyAgICBzaXplX3QgKCpjb3VudFRyYWNrcykodm9pZCAqZGF0YSk7CisgICAgQ01lZGlhVHJhY2sqICgqZ2V0VHJhY2spKHZvaWQgKmRhdGEsIHNpemVfdCBpbmRleCk7CisgICAgc3RhdHVzX3QgKCpnZXRUcmFja01ldGFEYXRhKSgKKyAgICAgICAgICAgIHZvaWQgKmRhdGEsCisgICAgICAgICAgICBNZXRhRGF0YUJhc2UmIG1ldGEsCisgICAgICAgICAgICBzaXplX3QgaW5kZXgsIHVpbnQzMl90IGZsYWdzKTsKKworICAgIHN0YXR1c190ICgqZ2V0TWV0YURhdGEpKHZvaWQgKmRhdGEsIE1ldGFEYXRhQmFzZSYgbWV0YSk7CisgICAgdWludDMyX3QgKCpmbGFncykodm9pZCAqZGF0YSk7CisgICAgc3RhdHVzX3QgKCpzZXRNZWRpYUNhcykodm9pZCAqZGF0YSwgY29uc3QgdWludDhfdCogY2FzVG9rZW4sIHNpemVfdCBzaXplKTsKKyAgICBjb25zdCBjaGFyICogKCpuYW1lKSh2b2lkICpkYXRhKTsKK307CisKK3N0cnVjdCBDTWVkaWFFeHRyYWN0b3JWMiB7CisgICAgdm9pZCAqZGF0YTsKKworICAgIHZvaWQgKCpmcmVlKSh2b2lkICpkYXRhKTsKKyAgICBzaXplX3QgKCpjb3VudFRyYWNrcykodm9pZCAqZGF0YSk7CisgICAgQ01lZGlhVHJhY2tWMiogKCpnZXRUcmFjaykodm9pZCAqZGF0YSwgc2l6ZV90IGluZGV4KTsKKyAgICBtZWRpYV9zdGF0dXNfdCAoKmdldFRyYWNrTWV0YURhdGEpKAorICAgICAgICAgICAgdm9pZCAqZGF0YSwKKyAgICAgICAgICAgIEFNZWRpYUZvcm1hdCAqbWV0YSwKKyAgICAgICAgICAgIHNpemVfdCBpbmRleCwgdWludDMyX3QgZmxhZ3MpOworCisgICAgbWVkaWFfc3RhdHVzX3QgKCpnZXRNZXRhRGF0YSkodm9pZCAqZGF0YSwgQU1lZGlhRm9ybWF0ICptZXRhKTsKKyAgICB1aW50MzJfdCAoKmZsYWdzKSh2b2lkICpkYXRhKTsKKyAgICBtZWRpYV9zdGF0dXNfdCAoKnNldE1lZGlhQ2FzKSh2b2lkICpkYXRhLCBjb25zdCB1aW50OF90KiBjYXNUb2tlbiwgc2l6ZV90IHNpemUpOworICAgIGNvbnN0IGNoYXIgKiAoKm5hbWUpKHZvaWQgKmRhdGEpOworfTsKKwordHlwZWRlZiBDTWVkaWFFeHRyYWN0b3JWMSogKCpDcmVhdG9yRnVuY1YxKShDRGF0YVNvdXJjZSAqc291cmNlLCB2b2lkICptZXRhKTsKK3R5cGVkZWYgdm9pZCAoKkZyZWVNZXRhRnVuYykodm9pZCAqbWV0YSk7CisKKy8vIFRoZSBzbmlmZmVyIGNhbiBvcHRpb25hbGx5IGZpbGwgaW4gYW4gb3BhcXVlIG9iamVjdCwgIm1ldGEiLCB0aGF0IGhlbHBzCisvLyB0aGUgY29ycmVzcG9uZGluZyBleHRyYWN0b3IgaW5pdGlhbGl6ZSBpdHMgc3RhdGUgd2l0aG91dCBkdXBsaWNhdGluZworLy8gZWZmb3J0IGFscmVhZHkgZXhlcnRlZCBieSB0aGUgc25pZmZlci4gSWYgImZyZWVNZXRhIiBpcyBnaXZlbiwgaXQgd2lsbCBiZQorLy8gY2FsbGVkIGFnYWluc3QgdGhlIG9wYXF1ZSBvYmplY3Qgd2hlbiBpdCBpcyBubyBsb25nZXIgdXNlZC4KK3R5cGVkZWYgQ3JlYXRvckZ1bmNWMSAoKlNuaWZmZXJGdW5jVjEpKAorICAgICAgICBDRGF0YVNvdXJjZSAqc291cmNlLCBmbG9hdCAqY29uZmlkZW5jZSwKKyAgICAgICAgdm9pZCAqKm1ldGEsIEZyZWVNZXRhRnVuYyAqZnJlZU1ldGEpOworCit0eXBlZGVmIENNZWRpYUV4dHJhY3RvclYyKiAoKkNyZWF0b3JGdW5jVjIpKENEYXRhU291cmNlICpzb3VyY2UsIHZvaWQgKm1ldGEpOworCit0eXBlZGVmIENyZWF0b3JGdW5jVjIgKCpTbmlmZmVyRnVuY1YyKSgKKyAgICAgICAgQ0RhdGFTb3VyY2UgKnNvdXJjZSwgZmxvYXQgKmNvbmZpZGVuY2UsCisgICAgICAgIHZvaWQgKiptZXRhLCBGcmVlTWV0YUZ1bmMgKmZyZWVNZXRhKTsKKwordHlwZWRlZiBDTWVkaWFFeHRyYWN0b3JWMSBDTWVkaWFFeHRyYWN0b3I7Cit0eXBlZGVmIENyZWF0b3JGdW5jVjEgQ3JlYXRvckZ1bmM7CisKKwordHlwZWRlZiBzdHJ1Y3QgeworICAgIGNvbnN0IHVpbnQ4X3QgYlsxNl07Cit9IG1lZGlhX3V1aWRfdDsKKworc3RydWN0IEV4dHJhY3RvckRlZiB7CisgICAgLy8gdmVyc2lvbiBudW1iZXIgb2YgdGhpcyBzdHJ1Y3R1cmUKKyAgICBjb25zdCB1aW50MzJfdCBkZWZfdmVyc2lvbjsKKworICAgIC8vIEEgdW5pcXVlIGlkZW50aWZpZXIgZm9yIHRoaXMgZXh0cmFjdG9yLgorICAgIC8vIFNlZSBiZWxvdyBmb3IgYSBjb252ZW5pZW5jZSBtYWNybyB0byBjcmVhdGUgdGhpcyBmcm9tIGEgc3RyaW5nLgorICAgIG1lZGlhX3V1aWRfdCBleHRyYWN0b3JfdXVpZDsKKworICAgIC8vIFZlcnNpb24gbnVtYmVyIG9mIHRoaXMgZXh0cmFjdG9yLiBXaGVuIHR3byBleHRyYWN0b3JzIHdpdGggdGhlIHNhbWUKKyAgICAvLyB1dWlkIGFyZSBlbmNvdW50ZXJlZCwgdGhlIG9uZSB3aXRoIHRoZSBsYXJnZXN0IHZlcnNpb24gbnVtYmVyIHdpbGwKKyAgICAvLyBiZSB1c2VkLgorICAgIGNvbnN0IHVpbnQzMl90IGV4dHJhY3Rvcl92ZXJzaW9uOworCisgICAgLy8gYSBodW1hbiByZWFkYWJsZSBuYW1lCisgICAgY29uc3QgY2hhciAqZXh0cmFjdG9yX25hbWU7CisKKyAgICB1bmlvbiB7CisgICAgICAgIFNuaWZmZXJGdW5jVjEgdjE7CisgICAgICAgIFNuaWZmZXJGdW5jVjIgdjI7CisgICAgfSBzbmlmZjsKK307CisKK2NvbnN0IHVpbnQzMl90IEVYVFJBQ1RPUkRFRl9WRVJTSU9OX0xFR0FDWSA9IDE7Citjb25zdCB1aW50MzJfdCBFWFRSQUNUT1JERUZfVkVSU0lPTl9DVVJSRU5UID0gMjsKKworY29uc3QgdWludDMyX3QgRVhUUkFDVE9SREVGX1ZFUlNJT04gPSBFWFRSQUNUT1JERUZfVkVSU0lPTl9MRUdBQ1k7CisKKy8vIGVhY2ggcGx1Z2luIGxpYnJhcnkgZXhwb3J0cyBvbmUgZnVuY3Rpb24gb2YgdGhpcyB0eXBlCit0eXBlZGVmIEV4dHJhY3RvckRlZiAoKkdldEV4dHJhY3RvckRlZikoKTsKKworfSAvLyBleHRlcm4gIkMiCisKK30gIC8vIG5hbWVzcGFjZSBhbmRyb2lkCisKKyNlbmRpZiAgLy8gTUVESUFfRVhUUkFDVE9SX1BMVUdJTl9BUElfSF8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbWVkaWEvTWVkaWFFeHRyYWN0b3JQbHVnaW5IZWxwZXIuaCBiL2luY2x1ZGUvbWVkaWEvTWVkaWFFeHRyYWN0b3JQbHVnaW5IZWxwZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44NThjNTc1Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9tZWRpYS9NZWRpYUV4dHJhY3RvclBsdWdpbkhlbHBlci5oCkBAIC0wLDAgKzEsNTQwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE4IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KKworI2lmbmRlZiBNRURJQV9FWFRSQUNUT1JfUExVR0lOX0hFTFBFUl9IXworCisjZGVmaW5lIE1FRElBX0VYVFJBQ1RPUl9QTFVHSU5fSEVMUEVSX0hfCisKKyNpbmNsdWRlIDxhcnBhL2luZXQuaD4KKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHZlY3Rvcj4KKworI2luY2x1ZGUgPHV0aWxzL0Vycm9ycy5oPgorI2luY2x1ZGUgPHV0aWxzL0xvZy5oPgorI2luY2x1ZGUgPHV0aWxzL1JlZkJhc2UuaD4KKyNpbmNsdWRlIDxtZWRpYS9NZWRpYUV4dHJhY3RvclBsdWdpbkFwaS5oPgorCituYW1lc3BhY2UgYW5kcm9pZCB7CisKK2NsYXNzIERhdGFTb3VyY2VCYXNlOworY2xhc3MgTWV0YURhdGFCYXNlOworc3RydWN0IE1lZGlhVHJhY2s7CisKKworY2xhc3MgTWVkaWFUcmFja0hlbHBlciB7CitwdWJsaWM6CisgICAgdmlydHVhbCB+TWVkaWFUcmFja0hlbHBlcigpIHt9OworICAgIHZpcnR1YWwgc3RhdHVzX3Qgc3RhcnQoKSA9IDA7CisgICAgdmlydHVhbCBzdGF0dXNfdCBzdG9wKCkgPSAwOworICAgIHZpcnR1YWwgc3RhdHVzX3QgZ2V0Rm9ybWF0KE1ldGFEYXRhQmFzZSYgZm9ybWF0KSA9IDA7CisKKyAgICBjbGFzcyBSZWFkT3B0aW9ucyB7CisgICAgcHVibGljOgorICAgICAgICBlbnVtIFNlZWtNb2RlIDogaW50MzJfdCB7CisgICAgICAgICAgICBTRUVLX1BSRVZJT1VTX1NZTkMsCisgICAgICAgICAgICBTRUVLX05FWFRfU1lOQywKKyAgICAgICAgICAgIFNFRUtfQ0xPU0VTVF9TWU5DLAorICAgICAgICAgICAgU0VFS19DTE9TRVNULAorICAgICAgICAgICAgU0VFS19GUkFNRV9JTkRFWCwKKyAgICAgICAgfTsKKworICAgICAgICBSZWFkT3B0aW9ucyh1aW50MzJfdCBvcHRpb25zLCBpbnQ2NF90IHNlZWtQb3NVcykgeworICAgICAgICAgICAgbU9wdGlvbnMgPSBvcHRpb25zOworICAgICAgICAgICAgbVNlZWtQb3NVcyA9IHNlZWtQb3NVczsKKyAgICAgICAgfQorICAgICAgICBib29sIGdldFNlZWtUbyhpbnQ2NF90ICp0aW1lX3VzLCBTZWVrTW9kZSAqbW9kZSkgY29uc3QgeworICAgICAgICAgICAgaWYgKChtT3B0aW9ucyAmIENNZWRpYVRyYWNrUmVhZE9wdGlvbnM6OlNFRUspID09IDApIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICB9CisgICAgICAgICAgICAqdGltZV91cyA9IG1TZWVrUG9zVXM7CisgICAgICAgICAgICAqbW9kZSA9IChTZWVrTW9kZSkgKG1PcHRpb25zICYgNyk7CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQorICAgICAgICBib29sIGdldE5vbkJsb2NraW5nKCkgY29uc3QgeworICAgICAgICAgICAgcmV0dXJuIG1PcHRpb25zICYgQ01lZGlhVHJhY2tSZWFkT3B0aW9uczo6Tk9OQkxPQ0tJTkc7CisgICAgICAgIH0KKyAgICBwcml2YXRlOgorICAgICAgICB1aW50MzJfdCBtT3B0aW9uczsKKyAgICAgICAgaW50NjRfdCBtU2Vla1Bvc1VzOworICAgIH07CisKKyAgICB2aXJ0dWFsIHN0YXR1c190IHJlYWQoCisgICAgICAgICAgICBNZWRpYUJ1ZmZlckJhc2UgKipidWZmZXIsIGNvbnN0IFJlYWRPcHRpb25zICpvcHRpb25zID0gTlVMTCkgPSAwOworICAgIHZpcnR1YWwgYm9vbCBzdXBwb3J0c05vbkJsb2NraW5nUmVhZCgpIHsgcmV0dXJuIGZhbHNlOyB9Cit9OworCitpbmxpbmUgQ01lZGlhVHJhY2sgKndyYXAoTWVkaWFUcmFja0hlbHBlciAqdHJhY2spIHsKKyAgICBDTWVkaWFUcmFjayAqd3JhcHBlciA9IChDTWVkaWFUcmFjayopIG1hbGxvYyhzaXplb2YoQ01lZGlhVHJhY2spKTsKKyAgICB3cmFwcGVyLT5kYXRhID0gdHJhY2s7CisgICAgd3JhcHBlci0+ZnJlZSA9IFtdKHZvaWQgKmRhdGEpIC0+IHZvaWQgeworICAgICAgICBkZWxldGUgKE1lZGlhVHJhY2tIZWxwZXIqKShkYXRhKTsKKyAgICB9OworICAgIHdyYXBwZXItPnN0YXJ0ID0gW10odm9pZCAqZGF0YSkgLT4gc3RhdHVzX3QgeworICAgICAgICByZXR1cm4gKChNZWRpYVRyYWNrSGVscGVyKilkYXRhKS0+c3RhcnQoKTsKKyAgICB9OworICAgIHdyYXBwZXItPnN0b3AgPSBbXSh2b2lkICpkYXRhKSAtPiBzdGF0dXNfdCB7CisgICAgICAgIHJldHVybiAoKE1lZGlhVHJhY2tIZWxwZXIqKWRhdGEpLT5zdG9wKCk7CisgICAgfTsKKyAgICB3cmFwcGVyLT5nZXRGb3JtYXQgPSBbXSh2b2lkICpkYXRhLCBNZXRhRGF0YUJhc2UgJm1ldGEpIC0+IHN0YXR1c190IHsKKyAgICAgICAgcmV0dXJuICgoTWVkaWFUcmFja0hlbHBlciopZGF0YSktPmdldEZvcm1hdChtZXRhKTsKKyAgICB9OworICAgIHdyYXBwZXItPnJlYWQgPSBbXSh2b2lkICpkYXRhLCBNZWRpYUJ1ZmZlckJhc2UgKipidWZmZXIsICB1aW50MzJfdCBvcHRpb25zLCBpbnQ2NF90IHNlZWtQb3NVcykKKyAgICAgICAgICAgIC0+IHN0YXR1c190IHsKKyAgICAgICAgTWVkaWFUcmFja0hlbHBlcjo6UmVhZE9wdGlvbnMgb3B0cyhvcHRpb25zLCBzZWVrUG9zVXMpOworICAgICAgICByZXR1cm4gKChNZWRpYVRyYWNrSGVscGVyKilkYXRhKS0+cmVhZChidWZmZXIsICZvcHRzKTsKKyAgICB9OworICAgIHdyYXBwZXItPnN1cHBvcnRzTm9uQmxvY2tpbmdSZWFkID0gW10odm9pZCAqZGF0YSkgLT4gYm9vbCB7CisgICAgICAgICAgICAgICAgcmV0dXJuICgoTWVkaWFUcmFja0hlbHBlciopZGF0YSktPnN1cHBvcnRzTm9uQmxvY2tpbmdSZWFkKCk7CisgICAgfTsKKyAgICByZXR1cm4gd3JhcHBlcjsKK30KKworCitjbGFzcyBNZWRpYVRyYWNrSGVscGVyVjIgeworcHVibGljOgorICAgIHZpcnR1YWwgfk1lZGlhVHJhY2tIZWxwZXJWMigpIHt9OworICAgIHZpcnR1YWwgbWVkaWFfc3RhdHVzX3Qgc3RhcnQoKSA9IDA7CisgICAgdmlydHVhbCBtZWRpYV9zdGF0dXNfdCBzdG9wKCkgPSAwOworICAgIHZpcnR1YWwgbWVkaWFfc3RhdHVzX3QgZ2V0Rm9ybWF0KEFNZWRpYUZvcm1hdCAqZm9ybWF0KSA9IDA7CisKKyAgICBjbGFzcyBSZWFkT3B0aW9ucyB7CisgICAgcHVibGljOgorICAgICAgICBlbnVtIFNlZWtNb2RlIDogaW50MzJfdCB7CisgICAgICAgICAgICBTRUVLX1BSRVZJT1VTX1NZTkMsCisgICAgICAgICAgICBTRUVLX05FWFRfU1lOQywKKyAgICAgICAgICAgIFNFRUtfQ0xPU0VTVF9TWU5DLAorICAgICAgICAgICAgU0VFS19DTE9TRVNULAorICAgICAgICAgICAgU0VFS19GUkFNRV9JTkRFWCwKKyAgICAgICAgfTsKKworICAgICAgICBSZWFkT3B0aW9ucyh1aW50MzJfdCBvcHRpb25zLCBpbnQ2NF90IHNlZWtQb3NVcykgeworICAgICAgICAgICAgbU9wdGlvbnMgPSBvcHRpb25zOworICAgICAgICAgICAgbVNlZWtQb3NVcyA9IHNlZWtQb3NVczsKKyAgICAgICAgfQorICAgICAgICBib29sIGdldFNlZWtUbyhpbnQ2NF90ICp0aW1lX3VzLCBTZWVrTW9kZSAqbW9kZSkgY29uc3QgeworICAgICAgICAgICAgaWYgKChtT3B0aW9ucyAmIENNZWRpYVRyYWNrUmVhZE9wdGlvbnM6OlNFRUspID09IDApIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICB9CisgICAgICAgICAgICAqdGltZV91cyA9IG1TZWVrUG9zVXM7CisgICAgICAgICAgICAqbW9kZSA9IChTZWVrTW9kZSkgKG1PcHRpb25zICYgNyk7CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQorICAgICAgICBib29sIGdldE5vbkJsb2NraW5nKCkgY29uc3QgeworICAgICAgICAgICAgcmV0dXJuIG1PcHRpb25zICYgQ01lZGlhVHJhY2tSZWFkT3B0aW9uczo6Tk9OQkxPQ0tJTkc7CisgICAgICAgIH0KKyAgICBwcml2YXRlOgorICAgICAgICB1aW50MzJfdCBtT3B0aW9uczsKKyAgICAgICAgaW50NjRfdCBtU2Vla1Bvc1VzOworICAgIH07CisKKyAgICB2aXJ0dWFsIG1lZGlhX3N0YXR1c190IHJlYWQoCisgICAgICAgICAgICBNZWRpYUJ1ZmZlckJhc2UgKipidWZmZXIsIGNvbnN0IFJlYWRPcHRpb25zICpvcHRpb25zID0gTlVMTCkgPSAwOworICAgIHZpcnR1YWwgYm9vbCBzdXBwb3J0c05vbkJsb2NraW5nUmVhZCgpIHsgcmV0dXJuIGZhbHNlOyB9Cit9OworCitpbmxpbmUgQ01lZGlhVHJhY2tWMiAqd3JhcFYyKE1lZGlhVHJhY2tIZWxwZXJWMiAqdHJhY2spIHsKKyAgICBDTWVkaWFUcmFja1YyICp3cmFwcGVyID0gKENNZWRpYVRyYWNrVjIqKSBtYWxsb2Moc2l6ZW9mKENNZWRpYVRyYWNrVjIpKTsKKyAgICB3cmFwcGVyLT5kYXRhID0gdHJhY2s7CisgICAgd3JhcHBlci0+ZnJlZSA9IFtdKHZvaWQgKmRhdGEpIC0+IHZvaWQgeworICAgICAgICBkZWxldGUgKE1lZGlhVHJhY2tIZWxwZXJWMiopKGRhdGEpOworICAgIH07CisgICAgd3JhcHBlci0+c3RhcnQgPSBbXSh2b2lkICpkYXRhKSAtPiBtZWRpYV9zdGF0dXNfdCB7CisgICAgICAgIHJldHVybiAoKE1lZGlhVHJhY2tIZWxwZXJWMiopZGF0YSktPnN0YXJ0KCk7CisgICAgfTsKKyAgICB3cmFwcGVyLT5zdG9wID0gW10odm9pZCAqZGF0YSkgLT4gbWVkaWFfc3RhdHVzX3QgeworICAgICAgICByZXR1cm4gKChNZWRpYVRyYWNrSGVscGVyVjIqKWRhdGEpLT5zdG9wKCk7CisgICAgfTsKKyAgICB3cmFwcGVyLT5nZXRGb3JtYXQgPSBbXSh2b2lkICpkYXRhLCBBTWVkaWFGb3JtYXQgKm1ldGEpIC0+IG1lZGlhX3N0YXR1c190IHsKKyAgICAgICAgcmV0dXJuICgoTWVkaWFUcmFja0hlbHBlclYyKilkYXRhKS0+Z2V0Rm9ybWF0KG1ldGEpOworICAgIH07CisgICAgd3JhcHBlci0+cmVhZCA9IFtdKHZvaWQgKmRhdGEsIE1lZGlhQnVmZmVyQmFzZSAqKmJ1ZmZlciwgIHVpbnQzMl90IG9wdGlvbnMsIGludDY0X3Qgc2Vla1Bvc1VzKQorICAgICAgICAgICAgLT4gbWVkaWFfc3RhdHVzX3QgeworICAgICAgICBNZWRpYVRyYWNrSGVscGVyVjI6OlJlYWRPcHRpb25zIG9wdHMob3B0aW9ucywgc2Vla1Bvc1VzKTsKKyAgICAgICAgcmV0dXJuICgoTWVkaWFUcmFja0hlbHBlclYyKilkYXRhKS0+cmVhZChidWZmZXIsICZvcHRzKTsKKyAgICB9OworICAgIHdyYXBwZXItPnN1cHBvcnRzTm9uQmxvY2tpbmdSZWFkID0gW10odm9pZCAqZGF0YSkgLT4gYm9vbCB7CisgICAgICAgICAgICAgICAgcmV0dXJuICgoTWVkaWFUcmFja0hlbHBlclYyKilkYXRhKS0+c3VwcG9ydHNOb25CbG9ja2luZ1JlYWQoKTsKKyAgICB9OworICAgIHJldHVybiB3cmFwcGVyOworfQorCisKKworLy8gZXh0cmFjdG9yIHBsdWdpbnMgY2FuIGRlcml2ZSBmcm9tIHRoaXMgY2xhc3Mgd2hpY2ggbG9va3MgcmVtYXJrYWJseQorLy8gbGlrZSBNZWRpYUV4dHJhY3RvciBhbmQgY2FuIGJlIGVhc2lseSB3cmFwcGVkIGluIHRoZSByZXF1aXJlZCBDIEFQSQorY2xhc3MgTWVkaWFFeHRyYWN0b3JQbHVnaW5IZWxwZXIKK3sKK3B1YmxpYzoKKyAgICB2aXJ0dWFsIH5NZWRpYUV4dHJhY3RvclBsdWdpbkhlbHBlcigpIHt9CisgICAgdmlydHVhbCBzaXplX3QgY291bnRUcmFja3MoKSA9IDA7CisgICAgdmlydHVhbCBNZWRpYVRyYWNrSGVscGVyICpnZXRUcmFjayhzaXplX3QgaW5kZXgpID0gMDsKKworICAgIGVudW0gR2V0VHJhY2tNZXRhRGF0YUZsYWdzIHsKKyAgICAgICAga0luY2x1ZGVFeHRlbnNpdmVNZXRhRGF0YSA9IDEKKyAgICB9OworICAgIHZpcnR1YWwgc3RhdHVzX3QgZ2V0VHJhY2tNZXRhRGF0YSgKKyAgICAgICAgICAgIE1ldGFEYXRhQmFzZSYgbWV0YSwKKyAgICAgICAgICAgIHNpemVfdCBpbmRleCwgdWludDMyX3QgZmxhZ3MgPSAwKSA9IDA7CisKKyAgICAvLyBSZXR1cm4gY29udGFpbmVyIHNwZWNpZmljIG1ldGEtZGF0YS4gVGhlIGRlZmF1bHQgaW1wbGVtZW50YXRpb24KKyAgICAvLyByZXR1cm5zIGFuIGVtcHR5IG1ldGFkYXRhIG9iamVjdC4KKyAgICB2aXJ0dWFsIHN0YXR1c190IGdldE1ldGFEYXRhKE1ldGFEYXRhQmFzZSYgbWV0YSkgPSAwOworCisgICAgZW51bSBGbGFncyB7CisgICAgICAgIENBTl9TRUVLX0JBQ0tXQVJEICA9IDEsICAvLyB0aGUgInNlZWsgMTBzZWNzIGJhY2sgYnV0dG9uIgorICAgICAgICBDQU5fU0VFS19GT1JXQVJEICAgPSAyLCAgLy8gdGhlICJzZWVrIDEwc2VjcyBmb3J3YXJkIGJ1dHRvbiIKKyAgICAgICAgQ0FOX1BBVVNFICAgICAgICAgID0gNCwKKyAgICAgICAgQ0FOX1NFRUsgICAgICAgICAgID0gOCwgIC8vIHRoZSAic2VlayBiYXIiCisgICAgfTsKKworICAgIC8vIElmIHN1YmNsYXNzZXMgZG8gX25vdF8gb3ZlcnJpZGUgdGhpcywgdGhlIGRlZmF1bHQgaXMKKyAgICAvLyBDQU5fU0VFS19CQUNLV0FSRCB8IENBTl9TRUVLX0ZPUldBUkQgfCBDQU5fU0VFSyB8IENBTl9QQVVTRQorICAgIHZpcnR1YWwgdWludDMyX3QgZmxhZ3MoKSBjb25zdCB7CisgICAgICAgIHJldHVybiBDQU5fU0VFS19CQUNLV0FSRCB8IENBTl9TRUVLX0ZPUldBUkQgfCBDQU5fU0VFSyB8IENBTl9QQVVTRTsKKyAgICB9OworCisgICAgdmlydHVhbCBzdGF0dXNfdCBzZXRNZWRpYUNhcyhjb25zdCB1aW50OF90KiAvKmNhc1Rva2VuKi8sIHNpemVfdCAvKnNpemUqLykgeworICAgICAgICByZXR1cm4gSU5WQUxJRF9PUEVSQVRJT047CisgICAgfQorCisgICAgdmlydHVhbCBjb25zdCBjaGFyICogbmFtZSgpIHsgcmV0dXJuICI8dW5zcGVjaWZpZWQ+IjsgfQorCitwcm90ZWN0ZWQ6CisgICAgTWVkaWFFeHRyYWN0b3JQbHVnaW5IZWxwZXIoKSB7fQorCitwcml2YXRlOgorICAgIE1lZGlhRXh0cmFjdG9yUGx1Z2luSGVscGVyKGNvbnN0IE1lZGlhRXh0cmFjdG9yUGx1Z2luSGVscGVyICYpOworICAgIE1lZGlhRXh0cmFjdG9yUGx1Z2luSGVscGVyICZvcGVyYXRvcj0oY29uc3QgTWVkaWFFeHRyYWN0b3JQbHVnaW5IZWxwZXIgJik7Cit9OworCitpbmxpbmUgQ01lZGlhRXh0cmFjdG9yICp3cmFwKE1lZGlhRXh0cmFjdG9yUGx1Z2luSGVscGVyICpleHRyYWN0b3IpIHsKKyAgICBDTWVkaWFFeHRyYWN0b3IgKndyYXBwZXIgPSAoQ01lZGlhRXh0cmFjdG9yKikgbWFsbG9jKHNpemVvZihDTWVkaWFFeHRyYWN0b3IpKTsKKyAgICB3cmFwcGVyLT5kYXRhID0gZXh0cmFjdG9yOworICAgIHdyYXBwZXItPmZyZWUgPSBbXSh2b2lkICpkYXRhKSAtPiB2b2lkIHsKKyAgICAgICAgZGVsZXRlIChNZWRpYUV4dHJhY3RvclBsdWdpbkhlbHBlciopKGRhdGEpOworICAgIH07CisgICAgd3JhcHBlci0+Y291bnRUcmFja3MgPSBbXSh2b2lkICpkYXRhKSAtPiBzaXplX3QgeworICAgICAgICByZXR1cm4gKChNZWRpYUV4dHJhY3RvclBsdWdpbkhlbHBlciopZGF0YSktPmNvdW50VHJhY2tzKCk7CisgICAgfTsKKyAgICB3cmFwcGVyLT5nZXRUcmFjayA9IFtdKHZvaWQgKmRhdGEsIHNpemVfdCBpbmRleCkgLT4gQ01lZGlhVHJhY2sqIHsKKyAgICAgICAgcmV0dXJuIHdyYXAoKChNZWRpYUV4dHJhY3RvclBsdWdpbkhlbHBlciopZGF0YSktPmdldFRyYWNrKGluZGV4KSk7CisgICAgfTsKKyAgICB3cmFwcGVyLT5nZXRUcmFja01ldGFEYXRhID0gW10oCisgICAgICAgICAgICB2b2lkICpkYXRhLAorICAgICAgICAgICAgTWV0YURhdGFCYXNlJiBtZXRhLAorICAgICAgICAgICAgc2l6ZV90IGluZGV4LCB1aW50MzJfdCBmbGFncykgLT4gc3RhdHVzX3QgeworICAgICAgICByZXR1cm4gKChNZWRpYUV4dHJhY3RvclBsdWdpbkhlbHBlciopZGF0YSktPmdldFRyYWNrTWV0YURhdGEobWV0YSwgaW5kZXgsIGZsYWdzKTsKKyAgICB9OworICAgIHdyYXBwZXItPmdldE1ldGFEYXRhID0gW10oCisgICAgICAgICAgICB2b2lkICpkYXRhLAorICAgICAgICAgICAgTWV0YURhdGFCYXNlJiBtZXRhKSAtPiBzdGF0dXNfdCB7CisgICAgICAgIHJldHVybiAoKE1lZGlhRXh0cmFjdG9yUGx1Z2luSGVscGVyKilkYXRhKS0+Z2V0TWV0YURhdGEobWV0YSk7CisgICAgfTsKKyAgICB3cmFwcGVyLT5mbGFncyA9IFtdKAorICAgICAgICAgICAgdm9pZCAqZGF0YSkgLT4gdWludDMyX3QgeworICAgICAgICByZXR1cm4gKChNZWRpYUV4dHJhY3RvclBsdWdpbkhlbHBlciopZGF0YSktPmZsYWdzKCk7CisgICAgfTsKKyAgICB3cmFwcGVyLT5zZXRNZWRpYUNhcyA9IFtdKAorICAgICAgICAgICAgdm9pZCAqZGF0YSwgY29uc3QgdWludDhfdCAqY2FzVG9rZW4sIHNpemVfdCBzaXplKSAtPiBzdGF0dXNfdCB7CisgICAgICAgIHJldHVybiAoKE1lZGlhRXh0cmFjdG9yUGx1Z2luSGVscGVyKilkYXRhKS0+c2V0TWVkaWFDYXMoY2FzVG9rZW4sIHNpemUpOworICAgIH07CisgICAgd3JhcHBlci0+bmFtZSA9IFtdKAorICAgICAgICAgICAgdm9pZCAqZGF0YSkgLT4gY29uc3QgY2hhciAqIHsKKyAgICAgICAgcmV0dXJuICgoTWVkaWFFeHRyYWN0b3JQbHVnaW5IZWxwZXIqKWRhdGEpLT5uYW1lKCk7CisgICAgfTsKKyAgICByZXR1cm4gd3JhcHBlcjsKK30KKworY2xhc3MgTWVkaWFFeHRyYWN0b3JQbHVnaW5IZWxwZXJWMgoreworcHVibGljOgorICAgIHZpcnR1YWwgfk1lZGlhRXh0cmFjdG9yUGx1Z2luSGVscGVyVjIoKSB7fQorICAgIHZpcnR1YWwgc2l6ZV90IGNvdW50VHJhY2tzKCkgPSAwOworICAgIHZpcnR1YWwgTWVkaWFUcmFja0hlbHBlclYyICpnZXRUcmFjayhzaXplX3QgaW5kZXgpID0gMDsKKworICAgIGVudW0gR2V0VHJhY2tNZXRhRGF0YUZsYWdzIHsKKyAgICAgICAga0luY2x1ZGVFeHRlbnNpdmVNZXRhRGF0YSA9IDEKKyAgICB9OworICAgIHZpcnR1YWwgbWVkaWFfc3RhdHVzX3QgZ2V0VHJhY2tNZXRhRGF0YSgKKyAgICAgICAgICAgIEFNZWRpYUZvcm1hdCAqbWV0YSwKKyAgICAgICAgICAgIHNpemVfdCBpbmRleCwgdWludDMyX3QgZmxhZ3MgPSAwKSA9IDA7CisKKyAgICAvLyBSZXR1cm4gY29udGFpbmVyIHNwZWNpZmljIG1ldGEtZGF0YS4gVGhlIGRlZmF1bHQgaW1wbGVtZW50YXRpb24KKyAgICAvLyByZXR1cm5zIGFuIGVtcHR5IG1ldGFkYXRhIG9iamVjdC4KKyAgICB2aXJ0dWFsIG1lZGlhX3N0YXR1c190IGdldE1ldGFEYXRhKEFNZWRpYUZvcm1hdCAqbWV0YSkgPSAwOworCisgICAgZW51bSBGbGFncyB7CisgICAgICAgIENBTl9TRUVLX0JBQ0tXQVJEICA9IDEsICAvLyB0aGUgInNlZWsgMTBzZWNzIGJhY2sgYnV0dG9uIgorICAgICAgICBDQU5fU0VFS19GT1JXQVJEICAgPSAyLCAgLy8gdGhlICJzZWVrIDEwc2VjcyBmb3J3YXJkIGJ1dHRvbiIKKyAgICAgICAgQ0FOX1BBVVNFICAgICAgICAgID0gNCwKKyAgICAgICAgQ0FOX1NFRUsgICAgICAgICAgID0gOCwgIC8vIHRoZSAic2VlayBiYXIiCisgICAgfTsKKworICAgIC8vIElmIHN1YmNsYXNzZXMgZG8gX25vdF8gb3ZlcnJpZGUgdGhpcywgdGhlIGRlZmF1bHQgaXMKKyAgICAvLyBDQU5fU0VFS19CQUNLV0FSRCB8IENBTl9TRUVLX0ZPUldBUkQgfCBDQU5fU0VFSyB8IENBTl9QQVVTRQorICAgIHZpcnR1YWwgdWludDMyX3QgZmxhZ3MoKSBjb25zdCB7CisgICAgICAgIHJldHVybiBDQU5fU0VFS19CQUNLV0FSRCB8IENBTl9TRUVLX0ZPUldBUkQgfCBDQU5fU0VFSyB8IENBTl9QQVVTRTsKKyAgICB9OworCisgICAgdmlydHVhbCBtZWRpYV9zdGF0dXNfdCBzZXRNZWRpYUNhcyhjb25zdCB1aW50OF90KiAvKmNhc1Rva2VuKi8sIHNpemVfdCAvKnNpemUqLykgeworICAgICAgICByZXR1cm4gQU1FRElBX0VSUk9SX0lOVkFMSURfT1BFUkFUSU9OOworICAgIH0KKworICAgIHZpcnR1YWwgY29uc3QgY2hhciAqIG5hbWUoKSB7IHJldHVybiAiPHVuc3BlY2lmaWVkPiI7IH0KKworcHJvdGVjdGVkOgorICAgIE1lZGlhRXh0cmFjdG9yUGx1Z2luSGVscGVyVjIoKSB7fQorCitwcml2YXRlOgorICAgIE1lZGlhRXh0cmFjdG9yUGx1Z2luSGVscGVyVjIoY29uc3QgTWVkaWFFeHRyYWN0b3JQbHVnaW5IZWxwZXJWMiAmKTsKKyAgICBNZWRpYUV4dHJhY3RvclBsdWdpbkhlbHBlclYyICZvcGVyYXRvcj0oY29uc3QgTWVkaWFFeHRyYWN0b3JQbHVnaW5IZWxwZXJWMiAmKTsKK307CisKK2lubGluZSBDTWVkaWFFeHRyYWN0b3JWMiAqd3JhcFYyKE1lZGlhRXh0cmFjdG9yUGx1Z2luSGVscGVyVjIgKmV4dHJhY3RvcikgeworICAgIENNZWRpYUV4dHJhY3RvclYyICp3cmFwcGVyID0gKENNZWRpYUV4dHJhY3RvclYyKikgbWFsbG9jKHNpemVvZihDTWVkaWFFeHRyYWN0b3JWMikpOworICAgIHdyYXBwZXItPmRhdGEgPSBleHRyYWN0b3I7CisgICAgd3JhcHBlci0+ZnJlZSA9IFtdKHZvaWQgKmRhdGEpIC0+IHZvaWQgeworICAgICAgICBkZWxldGUgKE1lZGlhRXh0cmFjdG9yUGx1Z2luSGVscGVyVjIqKShkYXRhKTsKKyAgICB9OworICAgIHdyYXBwZXItPmNvdW50VHJhY2tzID0gW10odm9pZCAqZGF0YSkgLT4gc2l6ZV90IHsKKyAgICAgICAgcmV0dXJuICgoTWVkaWFFeHRyYWN0b3JQbHVnaW5IZWxwZXJWMiopZGF0YSktPmNvdW50VHJhY2tzKCk7CisgICAgfTsKKyAgICB3cmFwcGVyLT5nZXRUcmFjayA9IFtdKHZvaWQgKmRhdGEsIHNpemVfdCBpbmRleCkgLT4gQ01lZGlhVHJhY2tWMiogeworICAgICAgICByZXR1cm4gd3JhcFYyKCgoTWVkaWFFeHRyYWN0b3JQbHVnaW5IZWxwZXJWMiopZGF0YSktPmdldFRyYWNrKGluZGV4KSk7CisgICAgfTsKKyAgICB3cmFwcGVyLT5nZXRUcmFja01ldGFEYXRhID0gW10oCisgICAgICAgICAgICB2b2lkICpkYXRhLAorICAgICAgICAgICAgQU1lZGlhRm9ybWF0ICptZXRhLAorICAgICAgICAgICAgc2l6ZV90IGluZGV4LCB1aW50MzJfdCBmbGFncykgLT4gbWVkaWFfc3RhdHVzX3QgeworICAgICAgICByZXR1cm4gKChNZWRpYUV4dHJhY3RvclBsdWdpbkhlbHBlclYyKilkYXRhKS0+Z2V0VHJhY2tNZXRhRGF0YShtZXRhLCBpbmRleCwgZmxhZ3MpOworICAgIH07CisgICAgd3JhcHBlci0+Z2V0TWV0YURhdGEgPSBbXSgKKyAgICAgICAgICAgIHZvaWQgKmRhdGEsCisgICAgICAgICAgICBBTWVkaWFGb3JtYXQgKm1ldGEpIC0+IG1lZGlhX3N0YXR1c190IHsKKyAgICAgICAgcmV0dXJuICgoTWVkaWFFeHRyYWN0b3JQbHVnaW5IZWxwZXJWMiopZGF0YSktPmdldE1ldGFEYXRhKG1ldGEpOworICAgIH07CisgICAgd3JhcHBlci0+ZmxhZ3MgPSBbXSgKKyAgICAgICAgICAgIHZvaWQgKmRhdGEpIC0+IHVpbnQzMl90IHsKKyAgICAgICAgcmV0dXJuICgoTWVkaWFFeHRyYWN0b3JQbHVnaW5IZWxwZXJWMiopZGF0YSktPmZsYWdzKCk7CisgICAgfTsKKyAgICB3cmFwcGVyLT5zZXRNZWRpYUNhcyA9IFtdKAorICAgICAgICAgICAgdm9pZCAqZGF0YSwgY29uc3QgdWludDhfdCAqY2FzVG9rZW4sIHNpemVfdCBzaXplKSAtPiBtZWRpYV9zdGF0dXNfdCB7CisgICAgICAgIHJldHVybiAoKE1lZGlhRXh0cmFjdG9yUGx1Z2luSGVscGVyVjIqKWRhdGEpLT5zZXRNZWRpYUNhcyhjYXNUb2tlbiwgc2l6ZSk7CisgICAgfTsKKyAgICB3cmFwcGVyLT5uYW1lID0gW10oCisgICAgICAgICAgICB2b2lkICpkYXRhKSAtPiBjb25zdCBjaGFyICogeworICAgICAgICByZXR1cm4gKChNZWRpYUV4dHJhY3RvclBsdWdpbkhlbHBlclYyKilkYXRhKS0+bmFtZSgpOworICAgIH07CisgICAgcmV0dXJuIHdyYXBwZXI7Cit9CisKKy8qIGFkZHMgc29tZSBjb252aWVuY2UgbWV0aG9kcyAqLworY2xhc3MgRGF0YVNvdXJjZUhlbHBlciB7CitwdWJsaWM6CisgICAgZXhwbGljaXQgRGF0YVNvdXJjZUhlbHBlcihDRGF0YVNvdXJjZSAqY3NvdXJjZSkgeworICAgICAgICBtU291cmNlID0gY3NvdXJjZTsKKyAgICB9CisKKyAgICBleHBsaWNpdCBEYXRhU291cmNlSGVscGVyKERhdGFTb3VyY2VIZWxwZXIgKnNvdXJjZSkgeworICAgICAgICBtU291cmNlID0gc291cmNlLT5tU291cmNlOworICAgIH0KKworICAgIHZpcnR1YWwgfkRhdGFTb3VyY2VIZWxwZXIoKSB7fQorCisgICAgdmlydHVhbCBzc2l6ZV90IHJlYWRBdChvZmY2NF90IG9mZnNldCwgdm9pZCAqZGF0YSwgc2l6ZV90IHNpemUpIHsKKyAgICAgICAgcmV0dXJuIG1Tb3VyY2UtPnJlYWRBdChtU291cmNlLT5oYW5kbGUsIG9mZnNldCwgZGF0YSwgc2l6ZSk7CisgICAgfQorCisgICAgdmlydHVhbCBzdGF0dXNfdCBnZXRTaXplKG9mZjY0X3QgKnNpemUpIHsKKyAgICAgICAgcmV0dXJuIG1Tb3VyY2UtPmdldFNpemUobVNvdXJjZS0+aGFuZGxlLCBzaXplKTsKKyAgICB9CisKKyAgICBib29sIGdldFVyaShjaGFyICp1cmlTdHJpbmcsIHNpemVfdCBidWZmZXJTaXplKSB7CisgICAgICAgIHJldHVybiBtU291cmNlLT5nZXRVcmkobVNvdXJjZS0+aGFuZGxlLCB1cmlTdHJpbmcsIGJ1ZmZlclNpemUpOworICAgIH0KKworICAgIHZpcnR1YWwgdWludDMyX3QgZmxhZ3MoKSB7CisgICAgICAgIHJldHVybiBtU291cmNlLT5mbGFncyhtU291cmNlLT5oYW5kbGUpOworICAgIH0KKworICAgIC8vIENvbnZlbmllbmNlIG1ldGhvZHM6CisgICAgYm9vbCBnZXRVSW50MTYob2ZmNjRfdCBvZmZzZXQsIHVpbnQxNl90ICp4KSB7CisgICAgICAgICp4ID0gMDsKKworICAgICAgICB1aW50OF90IGJ5dGVbMl07CisgICAgICAgIGlmIChyZWFkQXQob2Zmc2V0LCBieXRlLCAyKSAhPSAyKSB7CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKworICAgICAgICAqeCA9IChieXRlWzBdIDw8IDgpIHwgYnl0ZVsxXTsKKworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAgICAvLyAzIGJ5dGUgaW50LCByZXR1cm5lZCBhcyBhIDMyLWJpdCBpbnQKKyAgICBib29sIGdldFVJbnQyNChvZmY2NF90IG9mZnNldCwgdWludDMyX3QgKngpIHsKKyAgICAgICAgKnggPSAwOworCisgICAgICAgIHVpbnQ4X3QgYnl0ZVszXTsKKyAgICAgICAgaWYgKHJlYWRBdChvZmZzZXQsIGJ5dGUsIDMpICE9IDMpIHsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorCisgICAgICAgICp4ID0gKGJ5dGVbMF0gPDwgMTYpIHwgKGJ5dGVbMV0gPDwgOCkgfCBieXRlWzJdOworCisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKworICAgIGJvb2wgZ2V0VUludDMyKG9mZjY0X3Qgb2Zmc2V0LCB1aW50MzJfdCAqeCkgeworICAgICAgICAqeCA9IDA7CisKKyAgICAgICAgdWludDMyX3QgdG1wOworICAgICAgICBpZiAocmVhZEF0KG9mZnNldCwgJnRtcCwgNCkgIT0gNCkgeworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisKKyAgICAgICAgKnggPSBudG9obCh0bXApOworCisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKworICAgIGJvb2wgZ2V0VUludDY0KG9mZjY0X3Qgb2Zmc2V0LCB1aW50NjRfdCAqeCkgeworICAgICAgICAqeCA9IDA7CisKKyAgICAgICAgdWludDY0X3QgdG1wOworICAgICAgICBpZiAocmVhZEF0KG9mZnNldCwgJnRtcCwgOCkgIT0gOCkgeworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisKKyAgICAgICAgKnggPSAoKHVpbnQ2NF90KW50b2hsKHRtcCAmIDB4ZmZmZmZmZmYpIDw8IDMyKSB8IG50b2hsKHRtcCA+PiAzMik7CisKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorCisgICAgLy8gcmVhZCBlaXRoZXIgaW50PE4+IG9yIGludDwyTj4gaW50byBhIHVpbnQ8Mk4+X3QsIHNpemUgaXMgdGhlIGludCBzaXplIGluIGJ5dGVzLgorICAgIGJvb2wgZ2V0VUludDE2VmFyKG9mZjY0X3Qgb2Zmc2V0LCB1aW50MTZfdCAqeCwgc2l6ZV90IHNpemUpIHsKKyAgICAgICAgaWYgKHNpemUgPT0gMikgeworICAgICAgICAgICAgcmV0dXJuIGdldFVJbnQxNihvZmZzZXQsIHgpOworICAgICAgICB9CisgICAgICAgIGlmIChzaXplID09IDEpIHsKKyAgICAgICAgICAgIHVpbnQ4X3QgdG1wOworICAgICAgICAgICAgaWYgKHJlYWRBdChvZmZzZXQsICZ0bXAsIDEpID09IDEpIHsKKyAgICAgICAgICAgICAgICAqeCA9IHRtcDsKKyAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgYm9vbCBnZXRVSW50MzJWYXIob2ZmNjRfdCBvZmZzZXQsIHVpbnQzMl90ICp4LCBzaXplX3Qgc2l6ZSkgeworICAgICAgICBpZiAoc2l6ZSA9PSA0KSB7CisgICAgICAgICAgICByZXR1cm4gZ2V0VUludDMyKG9mZnNldCwgeCk7CisgICAgICAgIH0KKyAgICAgICAgaWYgKHNpemUgPT0gMikgeworICAgICAgICAgICAgdWludDE2X3QgdG1wOworICAgICAgICAgICAgaWYgKGdldFVJbnQxNihvZmZzZXQsICZ0bXApKSB7CisgICAgICAgICAgICAgICAgKnggPSB0bXA7CisgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIGJvb2wgZ2V0VUludDY0VmFyKG9mZjY0X3Qgb2Zmc2V0LCB1aW50NjRfdCAqeCwgc2l6ZV90IHNpemUpIHsKKyAgICAgICAgaWYgKHNpemUgPT0gOCkgeworICAgICAgICAgICAgcmV0dXJuIGdldFVJbnQ2NChvZmZzZXQsIHgpOworICAgICAgICB9CisgICAgICAgIGlmIChzaXplID09IDQpIHsKKyAgICAgICAgICAgIHVpbnQzMl90IHRtcDsKKyAgICAgICAgICAgIGlmIChnZXRVSW50MzIob2Zmc2V0LCAmdG1wKSkgeworICAgICAgICAgICAgICAgICp4ID0gdG1wOworICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKK3Byb3RlY3RlZDoKKyAgICBDRGF0YVNvdXJjZSAqbVNvdXJjZTsKK307CisKKworCisvLyBoZWxwZXJzIHRvIGNyZWF0ZSBhIG1lZGlhX3V1aWRfdCBmcm9tIGEgc3RyaW5nIGxpdGVyYWwKKworLy8gcHVycG9zZWx5IG5vdCBkZWZpbmVkIGFueXdoZXJlIHNvIHRoYXQgdGhpcyB3aWxsIGZhaWwgdG8gbGluayBpZgorLy8gZXhwcmVzc2lvbnMgYmVsb3cgYXJlIG5vdCBldmFsdWF0ZWQgYXQgY29tcGlsZSB0aW1lCitpbnQgaW52YWxpZF91dWlkX3N0cmluZyhjb25zdCBjaGFyICopOworCit0ZW1wbGF0ZSA8dHlwZW5hbWUgVCwgc2l6ZV90IE4+Citjb25zdGV4cHIgdWludDhfdCBfZGlnaXRBdF8oY29uc3QgVCAoJnMpW05dLCBjb25zdCBzaXplX3QgbikgeworICAgIHJldHVybiBzW25dID49ICcwJyAmJiBzW25dIDw9ICc5JyA/IHNbbl0gLSAnMCcKKyAgICAgICAgICAgIDogc1tuXSA+PSAnYScgJiYgc1tuXSA8PSAnZicgPyBzW25dIC0gJ2EnICsgMTAKKyAgICAgICAgICAgICAgICAgICAgOiBzW25dID49ICdBJyAmJiBzW25dIDw9ICdGJyA/IHNbbl0gLSAnQScgKyAxMAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogaW52YWxpZF91dWlkX3N0cmluZygidXVpZDogYmFkIGRpZ2l0cyIpOworfQorCit0ZW1wbGF0ZSA8dHlwZW5hbWUgVCwgc2l6ZV90IE4+Citjb25zdGV4cHIgdWludDhfdCBfaGV4Qnl0ZUF0Xyhjb25zdCBUICgmcylbTl0sIHNpemVfdCBuKSB7CisgICAgcmV0dXJuIChfZGlnaXRBdF8ocywgbikgPDwgNCkgKyBfZGlnaXRBdF8ocywgbiArIDEpOworfQorCitjb25zdGV4cHIgYm9vbCBfYXNzZXJ0SXNEYXNoXyhjaGFyIGMpIHsKKyAgICByZXR1cm4gYyA9PSAnLScgPyB0cnVlIDogaW52YWxpZF91dWlkX3N0cmluZygiV3JvbmcgZm9ybWF0Iik7Cit9CisKK3RlbXBsYXRlIDxzaXplX3QgTj4KK2NvbnN0ZXhwciBtZWRpYV91dWlkX3QgY29uc3RVVUlEKGNvbnN0IGNoYXIgKCZzKSBbTl0pIHsKKyAgICBzdGF0aWNfYXNzZXJ0KE4gPT0gMzcsICJ1dWlkOiB3cm9uZyBsZW5ndGgiKTsKKyAgICByZXR1cm4KKyAgICAgICAgICAgIF9hc3NlcnRJc0Rhc2hfKHNbOF0pLAorICAgICAgICAgICAgX2Fzc2VydElzRGFzaF8oc1sxM10pLAorICAgICAgICAgICAgX2Fzc2VydElzRGFzaF8oc1sxOF0pLAorICAgICAgICAgICAgX2Fzc2VydElzRGFzaF8oc1syM10pLAorICAgICAgICAgICAgbWVkaWFfdXVpZF90IHt7CisgICAgICAgICAgICAgICAgX2hleEJ5dGVBdF8ocywgMCksCisgICAgICAgICAgICAgICAgX2hleEJ5dGVBdF8ocywgMiksCisgICAgICAgICAgICAgICAgX2hleEJ5dGVBdF8ocywgNCksCisgICAgICAgICAgICAgICAgX2hleEJ5dGVBdF8ocywgNiksCisgICAgICAgICAgICAgICAgX2hleEJ5dGVBdF8ocywgOSksCisgICAgICAgICAgICAgICAgX2hleEJ5dGVBdF8ocywgMTEpLAorICAgICAgICAgICAgICAgIF9oZXhCeXRlQXRfKHMsIDE0KSwKKyAgICAgICAgICAgICAgICBfaGV4Qnl0ZUF0XyhzLCAxNiksCisgICAgICAgICAgICAgICAgX2hleEJ5dGVBdF8ocywgMTkpLAorICAgICAgICAgICAgICAgIF9oZXhCeXRlQXRfKHMsIDIxKSwKKyAgICAgICAgICAgICAgICBfaGV4Qnl0ZUF0XyhzLCAyNCksCisgICAgICAgICAgICAgICAgX2hleEJ5dGVBdF8ocywgMjYpLAorICAgICAgICAgICAgICAgIF9oZXhCeXRlQXRfKHMsIDI4KSwKKyAgICAgICAgICAgICAgICBfaGV4Qnl0ZUF0XyhzLCAzMCksCisgICAgICAgICAgICAgICAgX2hleEJ5dGVBdF8ocywgMzIpLAorICAgICAgICAgICAgICAgIF9oZXhCeXRlQXRfKHMsIDM0KSwKKyAgICAgICAgICAgIH19OworfQorLy8gQ29udmVuaWVuY2UgbWFjcm8gdG8gY3JlYXRlIGEgbWVkaWFfdXVpZF90IGZyb20gYSBzdHJpbmcgbGl0ZXJhbCwgd2hpY2ggc2hvdWxkCisvLyBiZSBmb3JtYXR0ZWQgYXMgIjEyMzQ1Njc4LTEyMzQtMTIzNC0xMjM0LTEyMzQ1Njc4OWFiYyIsIGFzIGdlbmVyYXRlZCBieQorLy8gZS5nLiBodHRwczovL3d3dy51dWlkZ2VuZXJhdG9yLm5ldC8gb3IgdGhlICd1dWlkZ2VuJyBsaW51eCBjb21tYW5kLgorLy8gSGV4IGRpZ2l0cyBtYXkgYmUgdXBwZXIgb3IgbG93ZXIgY2FzZS4KKy8vCisvLyBUaGUgbWFjcm8gY2FsbCBpcyBvdGhlcndpc2UgZXF1aXZhbGVudCB0byBzcGVjaWZ5aW5nIHRoZSBzdHJ1Y3R1cmUgZGlyZWN0bHkKKy8vIChlLmcuIFVVSUQoIjdkNjEzODU4LTU4MzctNGEzOC04NGM1LTMzMmQxY2RkZWUyNyIpIGlzIHRoZSBzYW1lIGFzCisvLyAgICAgICB7ezB4N2QsIDB4NjEsIDB4MzgsIDB4NTgsIDB4NTgsIDB4MzcsIDB4NGEsIDB4MzgsCisvLyAgICAgICAgIDB4ODQsIDB4YzUsIDB4MzMsIDB4MmQsIDB4MWMsIDB4ZGQsIDB4ZWUsIDB4Mjd9fSkKKworI2RlZmluZSBVVUlEKHN0cikgW117IGNvbnN0ZXhwciBtZWRpYV91dWlkX3QgdXVpZCA9IGNvbnN0VVVJRChzdHIpOyByZXR1cm4gdXVpZDsgfSgpCisKK30gIC8vIG5hbWVzcGFjZSBhbmRyb2lkCisKKyNlbmRpZiAgLy8gTUVESUFfRVhUUkFDVE9SX1BMVUdJTl9IRUxQRVJfSF8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbWVkaWEvTWVkaWFUcmFjay5oIGIvaW5jbHVkZS9tZWRpYS9NZWRpYVRyYWNrLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTIwMDAwCmluZGV4IDVhNjMyODdhLi4wMDAwMDAwCi0tLSBhL2luY2x1ZGUvbWVkaWEvTWVkaWFUcmFjay5oCisrKyAvZGV2L251bGwKQEAgLTEgKzAsMCBAQAotLi4vLi4vbWVkaWEvbGlibWVkaWFleHRyYWN0b3IvaW5jbHVkZS9tZWRpYS9NZWRpYVRyYWNrLmgKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9pbmNsdWRlL21lZGlhL01lZGlhVHJhY2suaCBiL2luY2x1ZGUvbWVkaWEvTWVkaWFUcmFjay5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVlMzU5MWUKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL21lZGlhL01lZGlhVHJhY2suaApAQCAtMCwwICsxLDE4MCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxOCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCisKKyNpZm5kZWYgTUVESUFfU09VUkNFX0JBU0VfSF8KKworI2RlZmluZSBNRURJQV9TT1VSQ0VfQkFTRV9IXworCisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisKKyNpbmNsdWRlIDxiaW5kZXIvSU1lbW9yeS5oPgorI2luY2x1ZGUgPGJpbmRlci9NZW1vcnlEZWFsZXIuaD4KKyNpbmNsdWRlIDxtZWRpYS9NZWRpYUV4dHJhY3RvclBsdWdpbkFwaS5oPgorI2luY2x1ZGUgPG1lZGlhL3N0YWdlZnJpZ2h0L01lZGlhRXJyb3JzLmg+CisjaW5jbHVkZSA8bWVkaWEvc3RhZ2VmcmlnaHQvTWV0YURhdGEuaD4KKyNpbmNsdWRlIDxtZWRpYS9NZWRpYUV4dHJhY3RvclBsdWdpbkFwaS5oPgorI2luY2x1ZGUgPHV0aWxzL0xvZy5oPgorI2luY2x1ZGUgPHV0aWxzL1JlZkJhc2UuaD4KKyNpbmNsdWRlIDx1dGlscy9WZWN0b3IuaD4KKworbmFtZXNwYWNlIGFuZHJvaWQgeworCitjbGFzcyBNZWRpYUJ1ZmZlckJhc2U7CitzdHJ1Y3QgQ01lZGlhVHJhY2s7CisKK2NsYXNzIFNvdXJjZUJhc2VBbGxvY1RyYWNrZXIgeworcHVibGljOgorICAgIFNvdXJjZUJhc2VBbGxvY1RyYWNrZXIoKSB7CisgICAgICAgIEFMT0dEKCJzb3VyY2ViYXNlIGFsbG9jYXRlZDogJXAiLCB0aGlzKTsKKyAgICB9CisgICAgdmlydHVhbCB+U291cmNlQmFzZUFsbG9jVHJhY2tlcigpIHsKKyAgICAgICAgQUxPR0QoInNvdXJjZWJhc2UgZnJlZWQ6ICVwIiwgdGhpcyk7CisgICAgfQorfTsKKworc3RydWN0IE1lZGlhVHJhY2sKKy8vICAgIDogcHVibGljIFNvdXJjZUJhc2VBbGxvY1RyYWNrZXIKK3sKKyAgICBNZWRpYVRyYWNrKCk7CisKKyAgICAvLyBUbyBiZSBjYWxsZWQgYmVmb3JlIGFueSBvdGhlciBtZXRob2RzIG9uIHRoaXMgb2JqZWN0LCBleGNlcHQKKyAgICAvLyBnZXRGb3JtYXQoKS4KKyAgICB2aXJ0dWFsIHN0YXR1c190IHN0YXJ0KCkgPSAwOworCisgICAgLy8gQW55IGJsb2NraW5nIHJlYWQgY2FsbCByZXR1cm5zIGltbWVkaWF0ZWx5IHdpdGggYSByZXN1bHQgb2YgTk9fSU5JVC4KKyAgICAvLyBJdCBpcyBhbiBlcnJvciB0byBjYWxsIGFueSBtZXRob2RzIG90aGVyIHRoYW4gc3RhcnQgYWZ0ZXIgdGhpcyBjYWxsCisgICAgLy8gcmV0dXJucy4gQW55IGJ1ZmZlcnMgdGhlIG9iamVjdCBtYXkgYmUgaG9sZGluZyBvbnRvIGF0IHRoZSB0aW1lIG9mCisgICAgLy8gdGhlIHN0b3AoKSBjYWxsIGFyZSByZWxlYXNlZC4KKyAgICAvLyBBbHNvLCBpdCBpcyBpbXBlcmF0aXZlIHRoYXQgYW55IGJ1ZmZlcnMgb3V0cHV0IGJ5IHRoaXMgb2JqZWN0IGFuZAorICAgIC8vIGhlbGQgb250byBieSBjYWxsZXJzIGJlIHJlbGVhc2VkIGJlZm9yZSBhIGNhbGwgdG8gc3RvcCgpICEhIQorICAgIHZpcnR1YWwgc3RhdHVzX3Qgc3RvcCgpID0gMDsKKworICAgIC8vIFJldHVybnMgdGhlIGZvcm1hdCBvZiB0aGUgZGF0YSBvdXRwdXQgYnkgdGhpcyBtZWRpYSB0cmFjay4KKyAgICB2aXJ0dWFsIHN0YXR1c190IGdldEZvcm1hdChNZXRhRGF0YUJhc2UmIGZvcm1hdCkgPSAwOworCisgICAgLy8gT3B0aW9ucyB0aGF0IG1vZGlmeSByZWFkKCkgYmVoYXZpb3VyLiBUaGUgZGVmYXVsdCBpcyB0bworICAgIC8vIGEpIG5vdCByZXF1ZXN0IGEgc2VlaworICAgIC8vIGIpIG5vdCBiZSBsYXRlLCBpLmUuIGxhdGVuZXNzX3VzID0gMAorICAgIHN0cnVjdCBSZWFkT3B0aW9ucyB7CisgICAgICAgIGVudW0gU2Vla01vZGUgOiBpbnQzMl90IHsKKyAgICAgICAgICAgIFNFRUtfUFJFVklPVVNfU1lOQyA9IENNZWRpYVRyYWNrUmVhZE9wdGlvbnM6OlNFRUtfUFJFVklPVVNfU1lOQywKKyAgICAgICAgICAgIFNFRUtfTkVYVF9TWU5DID0gQ01lZGlhVHJhY2tSZWFkT3B0aW9uczo6U0VFS19ORVhUX1NZTkMsCisgICAgICAgICAgICBTRUVLX0NMT1NFU1RfU1lOQyA9IENNZWRpYVRyYWNrUmVhZE9wdGlvbnM6OlNFRUtfQ0xPU0VTVF9TWU5DLAorICAgICAgICAgICAgU0VFS19DTE9TRVNUID0gQ01lZGlhVHJhY2tSZWFkT3B0aW9uczo6U0VFS19DTE9TRVNULAorICAgICAgICAgICAgU0VFS19GUkFNRV9JTkRFWCA9IENNZWRpYVRyYWNrUmVhZE9wdGlvbnM6OlNFRUtfRlJBTUVfSU5ERVgsCisgICAgICAgIH07CisKKyAgICAgICAgUmVhZE9wdGlvbnMoKSB7CisgICAgICAgICAgICByZXNldCgpOworICAgICAgICB9CisKKyAgICAgICAgLy8gUmVzZXQgZXZlcnl0aGluZyBiYWNrIHRvIGRlZmF1bHRzLgorICAgICAgICB2b2lkIHJlc2V0KCkgeworICAgICAgICAgICAgbU9wdGlvbnMgPSAwOworICAgICAgICAgICAgbVNlZWtUaW1lVXMgPSAwOworICAgICAgICAgICAgbU5vbkJsb2NraW5nID0gZmFsc2U7CisgICAgICAgIH0KKworICAgICAgICB2b2lkIHNldFNlZWtUbyhpbnQ2NF90IHRpbWVfdXMsIFNlZWtNb2RlIG1vZGUgPSBTRUVLX0NMT1NFU1RfU1lOQyk7CisgICAgICAgIHZvaWQgY2xlYXJTZWVrVG8oKSB7CisgICAgICAgICAgICBtT3B0aW9ucyAmPSB+a1NlZWtUb19PcHRpb247CisgICAgICAgICAgICBtU2Vla1RpbWVVcyA9IDA7CisgICAgICAgICAgICBtU2Vla01vZGUgPSBTRUVLX0NMT1NFU1RfU1lOQzsKKyAgICAgICAgfQorICAgICAgICBib29sIGdldFNlZWtUbyhpbnQ2NF90ICp0aW1lX3VzLCBTZWVrTW9kZSAqbW9kZSkgY29uc3Q7CisKKyAgICAgICAgdm9pZCBzZXROb25CbG9ja2luZygpOworICAgICAgICB2b2lkIGNsZWFyTm9uQmxvY2tpbmcoKTsKKyAgICAgICAgYm9vbCBnZXROb25CbG9ja2luZygpIGNvbnN0OworCisgICAgICAgIC8vIFVzZWQgdG8gY2xlYXIgYWxsIG5vbi1wZXJzaXN0ZW50IG9wdGlvbnMgZm9yIG11bHRpcGxlIGJ1ZmZlciByZWFkcy4KKyAgICAgICAgdm9pZCBjbGVhck5vblBlcnNpc3RlbnQoKSB7CisgICAgICAgICAgICBjbGVhclNlZWtUbygpOworICAgICAgICB9CisKKyAgICBwcml2YXRlOgorICAgICAgICBlbnVtIE9wdGlvbnMgeworICAgICAgICAgICAga1NlZWtUb19PcHRpb24gICAgICA9IDEsCisgICAgICAgIH07CisKKyAgICAgICAgdWludDMyX3QgbU9wdGlvbnM7CisgICAgICAgIGludDY0X3QgbVNlZWtUaW1lVXM7CisgICAgICAgIFNlZWtNb2RlIG1TZWVrTW9kZTsKKyAgICAgICAgYm9vbCBtTm9uQmxvY2tpbmc7CisgICAgfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsgLy8gc2VudCB0aHJvdWdoIEJpbmRlcgorCisgICAgLy8gUmV0dXJucyBhIG5ldyBidWZmZXIgb2YgZGF0YS4gQ2FsbCBibG9ja3MgdW50aWwgYQorICAgIC8vIGJ1ZmZlciBpcyBhdmFpbGFibGUsIGFuIGVycm9yIGlzIGVuY291bnRlcmVkIG9mIHRoZSBlbmQgb2YgdGhlIHN0cmVhbQorICAgIC8vIGlzIHJlYWNoZWQuCisgICAgLy8gRW5kIG9mIHN0cmVhbSBpcyBzaWduYWxsZWQgYnkgYSByZXN1bHQgb2YgRVJST1JfRU5EX09GX1NUUkVBTS4KKyAgICAvLyBBIHJlc3VsdCBvZiBJTkZPX0ZPUk1BVF9DSEFOR0VEIGluZGljYXRlcyB0aGF0IHRoZSBmb3JtYXQgb2YgdGhpcworICAgIC8vIE1lZGlhU291cmNlIGhhcyBjaGFuZ2VkIG1pZC1zdHJlYW0sIHRoZSBjbGllbnQgY2FuIGNvbnRpbnVlIHJlYWRpbmcKKyAgICAvLyBidXQgc2hvdWxkIGJlIHByZXBhcmVkIGZvciBidWZmZXJzIG9mIHRoZSBuZXcgY29uZmlndXJhdGlvbi4KKyAgICB2aXJ0dWFsIHN0YXR1c190IHJlYWQoCisgICAgICAgICAgICBNZWRpYUJ1ZmZlckJhc2UgKipidWZmZXIsIGNvbnN0IFJlYWRPcHRpb25zICpvcHRpb25zID0gTlVMTCkgPSAwOworCisgICAgLy8gUmV0dXJucyB0cnVlIGlmIHxyZWFkfCBzdXBwb3J0cyBub25ibG9ja2luZyBvcHRpb24sIG90aGVyd2lzZSBmYWxzZS4KKyAgICAvLyB8cmVhZE11bHRpcGxlfCBpZiBzdXBwb3J0ZWQsIGFsd2F5cyBhbGxvd3MgdGhlIG5vbmJsb2NraW5nIG9wdGlvbi4KKyAgICB2aXJ0dWFsIGJvb2wgc3VwcG9ydE5vbmJsb2NraW5nUmVhZCgpIHsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIHZpcnR1YWwgfk1lZGlhVHJhY2soKTsKKworcHJpdmF0ZToKKyAgICBNZWRpYVRyYWNrKGNvbnN0IE1lZGlhVHJhY2sgJik7CisgICAgTWVkaWFUcmFjayAmb3BlcmF0b3I9KGNvbnN0IE1lZGlhVHJhY2sgJik7Cit9OworCitjbGFzcyBNZWRpYVRyYWNrQ1Vud3JhcHBlciA6IHB1YmxpYyBNZWRpYVRyYWNrIHsKK3B1YmxpYzoKKyAgICBleHBsaWNpdCBNZWRpYVRyYWNrQ1Vud3JhcHBlcihDTWVkaWFUcmFjayAqd3JhcHBlcik7CisKKyAgICB2aXJ0dWFsIHN0YXR1c190IHN0YXJ0KCk7CisgICAgdmlydHVhbCBzdGF0dXNfdCBzdG9wKCk7CisgICAgdmlydHVhbCBzdGF0dXNfdCBnZXRGb3JtYXQoTWV0YURhdGFCYXNlJiBmb3JtYXQpOworICAgIHZpcnR1YWwgc3RhdHVzX3QgcmVhZChNZWRpYUJ1ZmZlckJhc2UgKipidWZmZXIsIGNvbnN0IFJlYWRPcHRpb25zICpvcHRpb25zID0gTlVMTCk7CisKKyAgICB2aXJ0dWFsIGJvb2wgc3VwcG9ydE5vbmJsb2NraW5nUmVhZCgpOworCitwcm90ZWN0ZWQ6CisgICAgdmlydHVhbCB+TWVkaWFUcmFja0NVbndyYXBwZXIoKTsKKworcHJpdmF0ZToKKyAgICBDTWVkaWFUcmFjayAqd3JhcHBlcjsKK307CisKK2NsYXNzIE1lZGlhVHJhY2tDVW53cmFwcGVyVjIgOiBwdWJsaWMgTWVkaWFUcmFjayB7CitwdWJsaWM6CisgICAgZXhwbGljaXQgTWVkaWFUcmFja0NVbndyYXBwZXJWMihDTWVkaWFUcmFja1YyICp3cmFwcGVyKTsKKworICAgIHZpcnR1YWwgc3RhdHVzX3Qgc3RhcnQoKTsKKyAgICB2aXJ0dWFsIHN0YXR1c190IHN0b3AoKTsKKyAgICB2aXJ0dWFsIHN0YXR1c190IGdldEZvcm1hdChNZXRhRGF0YUJhc2UmIGZvcm1hdCk7CisgICAgdmlydHVhbCBzdGF0dXNfdCByZWFkKE1lZGlhQnVmZmVyQmFzZSAqKmJ1ZmZlciwgY29uc3QgUmVhZE9wdGlvbnMgKm9wdGlvbnMgPSBOVUxMKTsKKworICAgIHZpcnR1YWwgYm9vbCBzdXBwb3J0Tm9uYmxvY2tpbmdSZWFkKCk7CisKK3Byb3RlY3RlZDoKKyAgICB2aXJ0dWFsIH5NZWRpYVRyYWNrQ1Vud3JhcHBlclYyKCk7CisKK3ByaXZhdGU6CisgICAgQ01lZGlhVHJhY2tWMiAqd3JhcHBlcjsKK307CisKK30gIC8vIG5hbWVzcGFjZSBhbmRyb2lkCisKKyNlbmRpZiAgLy8gTUVESUFfU09VUkNFX0JBU0VfSF8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbWVkaWEvTmRrTWVkaWFFcnJvclByaXYuaCBiL2luY2x1ZGUvbWVkaWEvTmRrTWVkaWFFcnJvclByaXYuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNWUyZjAyCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9tZWRpYS9OZGtNZWRpYUVycm9yUHJpdi5oCkBAIC0wLDAgKzEsMjkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTggVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworCisjaWZuZGVmIF9OREtfTUVESUFfRVJST1JfUFJJVl9ICisjZGVmaW5lIF9OREtfTUVESUFfRVJST1JfUFJJVl9ICisKKyNpbmNsdWRlIDxtZWRpYS9OZGtNZWRpYUVycm9yLmg+CisjaW5jbHVkZSA8dXRpbHMvRXJyb3JzLmg+CisKK3VzaW5nIG5hbWVzcGFjZSBhbmRyb2lkOworCittZWRpYV9zdGF0dXNfdCB0cmFuc2xhdGVfZXJyb3Ioc3RhdHVzX3QpOworCitzdGF0dXNfdCByZXZlcnNlX3RyYW5zbGF0ZV9lcnJvcihtZWRpYV9zdGF0dXNfdCk7CisKKyNlbmRpZiAvLyBfTkRLX01FRElBX0VSUk9SX1BSSVZfSApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9tZWRpYS9OZGtNZWRpYUZvcm1hdFByaXYuaCBiL2luY2x1ZGUvbWVkaWEvTmRrTWVkaWFGb3JtYXRQcml2LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmM0NTJjMwotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvbWVkaWEvTmRrTWVkaWFGb3JtYXRQcml2LmgKQEAgLTAsMCArMSw1NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCisKKy8qCisgKiBUaGlzIGZpbGUgZGVmaW5lcyBhbiBOREsgQVBJLgorICogRG8gbm90IHJlbW92ZSBtZXRob2RzLgorICogRG8gbm90IGNoYW5nZSBtZXRob2Qgc2lnbmF0dXJlcy4KKyAqIERvIG5vdCBjaGFuZ2UgdGhlIHZhbHVlIG9mIGNvbnN0YW50cy4KKyAqIERvIG5vdCBjaGFuZ2UgdGhlIHNpemUgb2YgYW55IG9mIHRoZSBjbGFzc2VzIGRlZmluZWQgaW4gaGVyZS4KKyAqIERvIG5vdCByZWZlcmVuY2UgdHlwZXMgdGhhdCBhcmUgbm90IHBhcnQgb2YgdGhlIE5ESy4KKyAqIERvIG5vdCAjaW5jbHVkZSBmaWxlcyB0aGF0IGFyZW4ndCBwYXJ0IG9mIHRoZSBOREsuCisgKi8KKworI2lmbmRlZiBfTkRLX01FRElBX0ZPUk1BVF9QUklWX0gKKyNkZWZpbmUgX05ES19NRURJQV9GT1JNQVRfUFJJVl9ICisKKyNpbmNsdWRlIDx1dGlscy9TdHJpbmc4Lmg+CisjaW5jbHVkZSA8dXRpbHMvU3Ryb25nUG9pbnRlci5oPgorI2luY2x1ZGUgPG1lZGlhL3N0YWdlZnJpZ2h0L2ZvdW5kYXRpb24vQU1lc3NhZ2UuaD4KKworI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gIkMiIHsKKyNlbmRpZgorCit1c2luZyBuYW1lc3BhY2UgYW5kcm9pZDsKKworc3RydWN0IEFNZWRpYUZvcm1hdCB7CisgICAgc3A8QU1lc3NhZ2U+IG1Gb3JtYXQ7CisgICAgU3RyaW5nOCBtRGVidWc7CisgICAgS2V5ZWRWZWN0b3I8U3RyaW5nOCwgU3RyaW5nOD4gbVN0cmluZ0NhY2hlOworfTsKKworQU1lZGlhRm9ybWF0KiBBTWVkaWFGb3JtYXRfZnJvbU1zZyhjb25zdCB2b2lkKik7Cit2b2lkIEFNZWRpYUZvcm1hdF9nZXRGb3JtYXQoY29uc3QgQU1lZGlhRm9ybWF0KiBtRGF0YSwgdm9pZCogZGVzdCk7CisKKyNpZmRlZiBfX2NwbHVzcGx1cworfSAvLyBleHRlcm4gIkMiCisjZW5kaWYKKworI2VuZGlmIC8vIF9OREtfTUVESUFfRk9STUFUX1BSSVZfSAorCmRpZmYgLS1naXQgYS9pbmNsdWRlL21lZGlhL1RpbWVDaGVjay5oIGIvaW5jbHVkZS9tZWRpYS9UaW1lQ2hlY2suaAppbmRleCBlM2VmMTM0Li44NWUxN2Y5IDEyMDAwMAotLS0gYS9pbmNsdWRlL21lZGlhL1RpbWVDaGVjay5oCisrKyBiL2luY2x1ZGUvbWVkaWEvVGltZUNoZWNrLmgKQEAgLTEgKzEgQEAKLS4uLy4uL21lZGlhL2xpYm1lZGlhL2luY2x1ZGUvbWVkaWEvVGltZUNoZWNrLmgKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCisuLi8uLi9tZWRpYS91dGlscy9pbmNsdWRlL21lZGlhdXRpbHMvVGltZUNoZWNrLmgKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9pbmNsdWRlL21lZGlhL1ZvcmJpc0NvbW1lbnQuaCBiL2luY2x1ZGUvbWVkaWEvVm9yYmlzQ29tbWVudC5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEyMDAwMAppbmRleCBhZGFhNDg5Li4wMDAwMDAwCi0tLSBhL2luY2x1ZGUvbWVkaWEvVm9yYmlzQ29tbWVudC5oCisrKyAvZGV2L251bGwKQEAgLTEgKzAsMCBAQAotLi4vLi4vbWVkaWEvbGlibWVkaWFleHRyYWN0b3IvaW5jbHVkZS9tZWRpYS9Wb3JiaXNDb21tZW50LmgKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9pbmNsdWRlL3ByaXZhdGUvbWVkaWEvQXVkaW9UcmFja1NoYXJlZC5oIGIvaW5jbHVkZS9wcml2YXRlL21lZGlhL0F1ZGlvVHJhY2tTaGFyZWQuaAppbmRleCBjYTExOWQ1Li41ZjE5Zjc0IDEwMDY0NAotLS0gYS9pbmNsdWRlL3ByaXZhdGUvbWVkaWEvQXVkaW9UcmFja1NoYXJlZC5oCisrKyBiL2luY2x1ZGUvcHJpdmF0ZS9tZWRpYS9BdWRpb1RyYWNrU2hhcmVkLmgKQEAgLTUzOCw2ICs1MzgsMTAgQEAKICAgICAgICAgbVRpbWVzdGFtcE11dGF0b3IucHVzaCh0aW1lc3RhbXApOwogICAgIH0KIAorICAgIHZpcnR1YWwgRXh0ZW5kZWRUaW1lc3RhbXAgZ2V0VGltZXN0YW1wKCkgY29uc3QgeworICAgICAgICByZXR1cm4gbVRpbWVzdGFtcE11dGF0b3IubGFzdCgpOworICAgIH0KKwogICAgIC8vIEZsdXNoZXMgdGhlIHNoYXJlZCByaW5nIGJ1ZmZlciBpZiB0aGUgY2xpZW50IGhhZCByZXF1ZXN0ZWQgaXQgdXNpbmcgbVN0cmVhbWluZy5tRmx1c2guCiAgICAgLy8gSWYgZmx1c2ggb2NjdXJzIHRoZW46CiAgICAgLy8gICBjYmxrLT51Lm1TdHJlYW1pbmcubUZyb250LCBTZXJ2ZXJQcm94eTo6bUZsdXNoIGFuZCBTZXJ2ZXJQcm94eTo6bUZsdXNoZWQgd2lsbCBiZSBtb2RpZmllZApAQCAtNTUxLDYgKzU1NSw5IEBACiAgICAgLy8gVG90YWwgY291bnQgb2YgdGhlIG51bWJlciBvZiBmbHVzaGVkIGZyYW1lcyBzaW5jZSBjcmVhdGlvbiAobmV2ZXIgcmVzZXQpLgogICAgIHZpcnR1YWwgaW50NjRfdCAgICAgZnJhbWVzRmx1c2hlZCgpIGNvbnN0IHsgcmV0dXJuIG1GbHVzaGVkOyB9CiAKKyAgICAvLyBTYWZlIGZyYW1lcyByZWFkeSBxdWVyeSB3aXRoIG5vIHNpZGUgZWZmZWN0cy4KKyAgICB2aXJ0dWFsIHNpemVfdCAgICAgIGZyYW1lc1JlYWR5U2FmZSgpIGNvbnN0ID0gMDsKKwogICAgIC8vIEdldCBkeW5hbWljIGJ1ZmZlciBzaXplIGZyb20gdGhlIHNoYXJlZCBjb250cm9sIGJsb2NrLgogICAgIHVpbnQzMl90ICAgICAgICAgICAgZ2V0QnVmZmVyU2l6ZUluRnJhbWVzKCkgY29uc3QgewogICAgICAgICByZXR1cm4gYW5kcm9pZF9hdG9taWNfYWNxdWlyZV9sb2FkKChpbnQzMl90ICopJm1DYmxrLT5tQnVmZmVyU2l6ZUluRnJhbWVzKTsKQEAgLTU4OCw4ICs1OTUsNyBAQAogICAgIC8vIHdoaWNoIG1heSBpbmNsdWRlIG5vbi1jb250aWd1b3VzIGZyYW1lcwogICAgIHZpcnR1YWwgc2l6ZV90ICAgICAgZnJhbWVzUmVhZHkoKTsKIAotICAgIC8vIFNhZmUgZnJhbWVzIHJlYWR5IHF1ZXJ5IHVzZWQgYnkgZHVtcCgpIC0gdGhpcyBoYXMgbm8gc2lkZSBlZmZlY3RzLgotICAgIHZpcnR1YWwgc2l6ZV90ICAgICAgZnJhbWVzUmVhZHlTYWZlKCkgY29uc3Q7CisgICAgc2l6ZV90ICAgICAgICAgICAgICBmcmFtZXNSZWFkeVNhZmUoKSBjb25zdCBvdmVycmlkZTsgLy8gZnJhbWVzIGF2YWlsYWJsZSB0byByZWFkIGJ5IHNlcnZlci4KIAogICAgIC8vIEN1cnJlbnRseSBBdWRpb0ZsaW5nZXIgd2lsbCBjYWxsIGZyYW1lc1JlYWR5KCkgZm9yIGEgZmFzdCB0cmFjayBmcm9tIHR3byB0aHJlYWRzOgogICAgIC8vIEZhc3RNaXhlciB0aHJlYWQsIGFuZCBub3JtYWwgbWl4ZXIgdGhyZWFkLiAgVGhpcyBpcyBkYW5nZXJvdXMsIGFzIHRoZSBwcm94eSBpcyBpbnRlbmRlZApAQCAtNjkzLDYgKzY5OSw4IEBACiAgICAgICAgIHJldHVybiBtQ2Jsay0+dS5tU3RyZWFtaW5nLm1SZWFyOyAvLyBGb3IgY29tcGxldGVuZXNzIG9ubHk7IG1SZWFyIHdyaXR0ZW4gYnkgc2VydmVyLgogICAgIH0KIAorICAgIHNpemVfdCBmcmFtZXNSZWFkeVNhZmUoKSBjb25zdCBvdmVycmlkZTsgLy8gZnJhbWVzIGF2YWlsYWJsZSB0byByZWFkIGJ5IGNsaWVudC4KKwogcHJvdGVjdGVkOgogICAgIHZpcnR1YWwgfkF1ZGlvUmVjb3JkU2VydmVyUHJveHkoKSB7IH0KIH07CmRpZmYgLS1naXQgYS9pbmNsdWRlL3NvdW5kdHJpZ2dlci9JU291bmRUcmlnZ2VyLmggYi9pbmNsdWRlL3NvdW5kdHJpZ2dlci9JU291bmRUcmlnZ2VyLmgKaW5kZXggNWZkOGViMi4uYzM1N2NhYSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9zb3VuZHRyaWdnZXIvSVNvdW5kVHJpZ2dlci5oCisrKyBiL2luY2x1ZGUvc291bmR0cmlnZ2VyL0lTb3VuZFRyaWdnZXIuaApAQCAtNDAsNiArNDAsNyBAQAogICAgIHZpcnR1YWwgc3RhdHVzX3Qgc3RhcnRSZWNvZ25pdGlvbihzb3VuZF9tb2RlbF9oYW5kbGVfdCBoYW5kbGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHNwPElNZW1vcnk+JiBkYXRhTWVtb3J5KSA9IDA7CiAgICAgdmlydHVhbCBzdGF0dXNfdCBzdG9wUmVjb2duaXRpb24oc291bmRfbW9kZWxfaGFuZGxlX3QgaGFuZGxlKSA9IDA7CisgICAgdmlydHVhbCBzdGF0dXNfdCBnZXRNb2RlbFN0YXRlKHNvdW5kX21vZGVsX2hhbmRsZV90IGhhbmRsZSkgPSAwOwogCiB9OwogCmRpZmYgLS1naXQgYS9pbmNsdWRlL3NvdW5kdHJpZ2dlci9Tb3VuZFRyaWdnZXIuaCBiL2luY2x1ZGUvc291bmR0cmlnZ2VyL1NvdW5kVHJpZ2dlci5oCmluZGV4IDdhMjllMzEuLjJlMmZmN2EgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvc291bmR0cmlnZ2VyL1NvdW5kVHJpZ2dlci5oCisrKyBiL2luY2x1ZGUvc291bmR0cmlnZ2VyL1NvdW5kVHJpZ2dlci5oCkBAIC01Miw2ICs1Miw3IEBACiAKICAgICAgICAgICAgIHN0YXR1c190IHN0YXJ0UmVjb2duaXRpb24oc291bmRfbW9kZWxfaGFuZGxlX3QgaGFuZGxlLCBjb25zdCBzcDxJTWVtb3J5PiYgZGF0YU1lbW9yeSk7CiAgICAgICAgICAgICBzdGF0dXNfdCBzdG9wUmVjb2duaXRpb24oc291bmRfbW9kZWxfaGFuZGxlX3QgaGFuZGxlKTsKKyAgICAgICAgICAgIHN0YXR1c190IGdldE1vZGVsU3RhdGUoc291bmRfbW9kZWxfaGFuZGxlX3QgaGFuZGxlKTsKIAogICAgICAgICAgICAgLy8gQnBTb3VuZFRyaWdnZXJDbGllbnQKICAgICAgICAgICAgIHZpcnR1YWwgdm9pZCBvblJlY29nbml0aW9uRXZlbnQoY29uc3Qgc3A8SU1lbW9yeT4mIGV2ZW50TWVtb3J5KTsKZGlmZiAtLWdpdCBhL21lZGlhL09XTkVSUyBiL21lZGlhL09XTkVSUwppbmRleCAxZjY4N2EyLi4xZTJkMTIzIDEwMDY0NAotLS0gYS9tZWRpYS9PV05FUlMKKysrIGIvbWVkaWEvT1dORVJTCkBAIC0yLDggKzIsMTAgQEAKIGR3a2FuZ0Bnb29nbGUuY29tCiBlbGF1cmVudEBnb29nbGUuY29tCiBlc3NpY2tAZ29vZ2xlLmNvbQorZ2thc3RlbkBnb29nbGUuY29tCiBoa3VhbmdAZ29vZ2xlLmNvbQogaHVuZ2FAZ29vZ2xlLmNvbQoramlhYmluQGdvb2dsZS5jb20KIGptdHJpdmlAZ29vZ2xlLmNvbQoga3JvY2FyZEBnb29nbGUuY29tCiBsYWpvc0Bnb29nbGUuY29tCmRpZmYgLS1naXQgYS9tZWRpYS9hdWRpb3NlcnZlci9BbmRyb2lkLm1rIGIvbWVkaWEvYXVkaW9zZXJ2ZXIvQW5kcm9pZC5tawppbmRleCA3MGMyODFhLi5mMDVjODRiIDEwMDY0NAotLS0gYS9tZWRpYS9hdWRpb3NlcnZlci9BbmRyb2lkLm1rCisrKyBiL21lZGlhL2F1ZGlvc2VydmVyL0FuZHJvaWQubWsKQEAgLTQsNyArNCw2IEBACiAKIExPQ0FMX1NSQ19GSUxFUyA6PSBcCiAJbWFpbl9hdWRpb3NlcnZlci5jcHAgXAotCS4uL2xpYmF1ZGlvY2xpZW50L2FpZGwvYW5kcm9pZC9tZWRpYS9JQXVkaW9SZWNvcmQuYWlkbAogCiBMT0NBTF9TSEFSRURfTElCUkFSSUVTIDo9IFwKIAlsaWJhYXVkaW9zZXJ2aWNlIFwKQEAgLTE4LDYgKzE3LDcgQEAKIAlsaWJtZWRpYSBcCiAJbGlibWVkaWFsb2dzZXJ2aWNlIFwKIAlsaWJuYmFpbyBcCisJbGlibmJsb2cgXAogCWxpYnNvdW5kdHJpZ2dlcnNlcnZpY2UgXAogCWxpYnV0aWxzCiAKQEAgLTQwLDkgKzQwLDYgQEAKIAkkKGNhbGwgaW5jbHVkZS1wYXRoLWZvciwgYXVkaW8tdXRpbHMpIFwKIAlleHRlcm5hbC9zb25pYyBcCiAKLUxPQ0FMX0FJRExfSU5DTFVERVMgOj0gXAotICAgICAgICBmcmFtZXdvcmtzL2F2L21lZGlhL2xpYmF1ZGlvY2xpZW50L2FpZGwKLQogIyBJZiBBVURJT1NFUlZFUl9NVUxUSUxJQiBpbiBkZXZpY2UubWsgaXMgbm9uLWVtcHR5IHRoZW4gaXQgaXMgdXNlZCB0byBjb250cm9sCiAjIHRoZSBMT0NBTF9NVUxUSUxJQiBmb3IgYWxsIGF1ZGlvc2VydmVyIGV4Y2x1c2l2ZSBsaWJyYXJpZXMuCiAjIFRoaXMgaXMgcmVsZXZhbnQgZm9yIDY0IGJpdCBhcmNoaXRlY3R1cmVzIHdoZXJlIGVpdGhlciBvciBib3RoCkBAIC01NCwxMyArNTEsOSBAQAogIyAgIGJvdGggICAgdG8gYnVpbGQgYm90aCAzMiBiaXQgYW5kIDY0IGJpdCBsaWJyYXJpZXMsCiAjICAgICAgICAgICBhbmQgdXNlIHByaW1hcnkgdGFyZ2V0IGFyY2hpdGVjdHVyZSAoMzIgb3IgNjQpIGZvciBhdWRpb3NlcnZlci4KICMgICBmaXJzdCAgIHRvIGJ1aWxkIGxpYnJhcmllcyBhbmQgYXVkaW9zZXJ2ZXIgZm9yIHRoZSBwcmltYXJ5IHRhcmdldCBhcmNoaXRlY3R1cmUgb25seS4KLSMgICA8ZW1wdHk+IHRvIGJ1aWxkIGJvdGggMzIgYW5kIDY0IGJpdCBsaWJyYXJpZXMgYW5kIDMyIGJpdCBhdWRpb3NlcnZlci4KKyMgICA8ZW1wdHk+IHRvIGJ1aWxkIGJvdGggMzIgYW5kIDY0IGJpdCBsaWJyYXJpZXMgYW5kIHByaW1hcnkgdGFyZ2V0IGF1ZGlvc2VydmVyLgogCi1pZmVxICgkKHN0cmlwICQoQVVESU9TRVJWRVJfTVVMVElMSUIpKSwpCi1MT0NBTF9NVUxUSUxJQiA6PSAzMgotZWxzZQogTE9DQUxfTVVMVElMSUIgOj0gJChBVURJT1NFUlZFUl9NVUxUSUxJQikKLWVuZGlmCiAKIExPQ0FMX01PRFVMRSA6PSBhdWRpb3NlcnZlcgogCmRpZmYgLS1naXQgYS9tZWRpYS9hdWRpb3NlcnZlci9hdWRpb3NlcnZlci5yYyBiL21lZGlhL2F1ZGlvc2VydmVyL2F1ZGlvc2VydmVyLnJjCmluZGV4IDFmMmU4MmYuLmYxZTgxNWIgMTAwNjQ0Ci0tLSBhL21lZGlhL2F1ZGlvc2VydmVyL2F1ZGlvc2VydmVyLnJjCisrKyBiL21lZGlhL2F1ZGlvc2VydmVyL2F1ZGlvc2VydmVyLnJjCkBAIC03LDYgKzcsNyBAQAogICAgIGlvcHJpbyBydCA0CiAgICAgd3JpdGVwaWQgL2Rldi9jcHVzZXQvZm9yZWdyb3VuZC90YXNrcyAvZGV2L3N0dW5lL2ZvcmVncm91bmQvdGFza3MKICAgICBvbnJlc3RhcnQgcmVzdGFydCB2ZW5kb3IuYXVkaW8taGFsLTItMAorICAgIG9ucmVzdGFydCByZXN0YXJ0IHZlbmRvci5hdWRpby1oYWwtNC0wLW1zZAogICAgICMgS2VlcCB0aGUgb3JpZ2luYWwgc2VydmljZSBuYW1lIGZvciBiYWNrd2FyZCBjb21wYXRpYmlsaXR5IHdoZW4gdXBncmFkaW5nCiAgICAgIyBPLU1SMSBkZXZpY2VzIHdpdGggZnJhbWV3b3JrLW9ubHkuCiAgICAgb25yZXN0YXJ0IHJlc3RhcnQgYXVkaW8taGFsLTItMApkaWZmIC0tZ2l0IGEvbWVkaWEvYnVmZmVycG9vbC8xLjAvQWNjZXNzb3IuY3BwIGIvbWVkaWEvYnVmZmVycG9vbC8xLjAvQWNjZXNzb3IuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIxZGZjMDgKLS0tIC9kZXYvbnVsbAorKysgYi9tZWRpYS9idWZmZXJwb29sLzEuMC9BY2Nlc3Nvci5jcHAKQEAgLTAsMCArMSwyMDEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTggVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworI2RlZmluZSBMT0dfVEFHICJCdWZmZXJQb29sQ29ubmVjdGlvbiIKKworI2luY2x1ZGUgIkFjY2Vzc29yLmgiCisjaW5jbHVkZSAiQWNjZXNzb3JJbXBsLmgiCisjaW5jbHVkZSAiQ29ubmVjdGlvbi5oIgorCituYW1lc3BhY2UgYW5kcm9pZCB7CituYW1lc3BhY2UgaGFyZHdhcmUgeworbmFtZXNwYWNlIG1lZGlhIHsKK25hbWVzcGFjZSBidWZmZXJwb29sIHsKK25hbWVzcGFjZSBWMV8wIHsKK25hbWVzcGFjZSBpbXBsZW1lbnRhdGlvbiB7CisKK3ZvaWQgQ29ubmVjdGlvbkRlYXRoUmVjaXBpZW50OjphZGQoCisgICAgICAgIGludDY0X3QgY29ubmVjdGlvbklkLAorICAgICAgICBjb25zdCBzcDxBY2Nlc3Nvcj4gJmFjY2Vzc29yKSB7CisgICAgc3RkOjpsb2NrX2d1YXJkPHN0ZDo6bXV0ZXg+IGxvY2sobUxvY2spOworICAgIGlmIChtQWNjZXNzb3JzLmZpbmQoY29ubmVjdGlvbklkKSA9PSBtQWNjZXNzb3JzLmVuZCgpKSB7CisgICAgICAgIG1BY2Nlc3NvcnMuaW5zZXJ0KHN0ZDo6bWFrZV9wYWlyKGNvbm5lY3Rpb25JZCwgYWNjZXNzb3IpKTsKKyAgICB9Cit9CisKK3ZvaWQgQ29ubmVjdGlvbkRlYXRoUmVjaXBpZW50OjpyZW1vdmUoaW50NjRfdCBjb25uZWN0aW9uSWQpIHsKKyAgICBzdGQ6OmxvY2tfZ3VhcmQ8c3RkOjptdXRleD4gbG9jayhtTG9jayk7CisgICAgbUFjY2Vzc29ycy5lcmFzZShjb25uZWN0aW9uSWQpOworICAgIGF1dG8gaXQgPSBtQ29ubmVjdGlvblRvQ29va2llLmZpbmQoY29ubmVjdGlvbklkKTsKKyAgICBpZiAoaXQgIT0gbUNvbm5lY3Rpb25Ub0Nvb2tpZS5lbmQoKSkgeworICAgICAgICB1aW50NjRfdCBjb29raWUgPSBpdC0+c2Vjb25kOworICAgICAgICBtQ29ubmVjdGlvblRvQ29va2llLmVyYXNlKGl0KTsKKyAgICAgICAgYXV0byBjaXQgPSBtQ29va2llVG9Db25uZWN0aW9ucy5maW5kKGNvb2tpZSk7CisgICAgICAgIGlmIChjaXQgIT0gbUNvb2tpZVRvQ29ubmVjdGlvbnMuZW5kKCkpIHsKKyAgICAgICAgICAgIGNpdC0+c2Vjb25kLmVyYXNlKGNvbm5lY3Rpb25JZCk7CisgICAgICAgICAgICBpZiAoY2l0LT5zZWNvbmQuc2l6ZSgpID09IDApIHsKKyAgICAgICAgICAgICAgICBtQ29va2llVG9Db25uZWN0aW9ucy5lcmFzZShjaXQpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorfQorCit2b2lkIENvbm5lY3Rpb25EZWF0aFJlY2lwaWVudDo6YWRkQ29va2llVG9Db25uZWN0aW9uKAorICAgICAgICB1aW50NjRfdCBjb29raWUsCisgICAgICAgIGludDY0X3QgY29ubmVjdGlvbklkKSB7CisgICAgc3RkOjpsb2NrX2d1YXJkPHN0ZDo6bXV0ZXg+IGxvY2sobUxvY2spOworICAgIGlmIChtQWNjZXNzb3JzLmZpbmQoY29ubmVjdGlvbklkKSA9PSBtQWNjZXNzb3JzLmVuZCgpKSB7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgbUNvbm5lY3Rpb25Ub0Nvb2tpZS5pbnNlcnQoc3RkOjptYWtlX3BhaXIoY29ubmVjdGlvbklkLCBjb29raWUpKTsKKyAgICBhdXRvIGl0ID0gbUNvb2tpZVRvQ29ubmVjdGlvbnMuZmluZChjb29raWUpOworICAgIGlmIChpdCAhPSBtQ29va2llVG9Db25uZWN0aW9ucy5lbmQoKSkgeworICAgICAgICBpdC0+c2Vjb25kLmluc2VydChjb25uZWN0aW9uSWQpOworICAgIH0gZWxzZSB7CisgICAgICAgIG1Db29raWVUb0Nvbm5lY3Rpb25zLmluc2VydChzdGQ6Om1ha2VfcGFpcigKKyAgICAgICAgICAgICAgICBjb29raWUsIHN0ZDo6c2V0PGludDY0X3Q+e2Nvbm5lY3Rpb25JZH0pKTsKKyAgICB9Cit9CisKK3ZvaWQgQ29ubmVjdGlvbkRlYXRoUmVjaXBpZW50OjpzZXJ2aWNlRGllZCgKKyAgICAgICAgdWludDY0X3QgY29va2llLAorICAgICAgICBjb25zdCB3cDw6OmFuZHJvaWQ6OmhpZGw6OmJhc2U6OlYxXzA6OklCYXNlPiYgLyogd2hvICovCisgICAgICAgICkgeworICAgIHN0ZDo6bWFwPGludDY0X3QsIGNvbnN0IHdwPEFjY2Vzc29yPj4gY29ubmVjdGlvbnNUb0Nsb3NlOworICAgIHsKKyAgICAgICAgc3RkOjpsb2NrX2d1YXJkPHN0ZDo6bXV0ZXg+IGxvY2sobUxvY2spOworCisgICAgICAgIGF1dG8gaXQgPSBtQ29va2llVG9Db25uZWN0aW9ucy5maW5kKGNvb2tpZSk7CisgICAgICAgIGlmIChpdCAhPSBtQ29va2llVG9Db25uZWN0aW9ucy5lbmQoKSkgeworICAgICAgICAgICAgZm9yIChhdXRvIGNvbkl0ID0gaXQtPnNlY29uZC5iZWdpbigpOyBjb25JdCAhPSBpdC0+c2Vjb25kLmVuZCgpOyArK2Nvbkl0KSB7CisgICAgICAgICAgICAgICAgYXV0byBhY2Nlc3Nvckl0ID0gbUFjY2Vzc29ycy5maW5kKCpjb25JdCk7CisgICAgICAgICAgICAgICAgaWYgKGFjY2Vzc29ySXQgIT0gbUFjY2Vzc29ycy5lbmQoKSkgeworICAgICAgICAgICAgICAgICAgICBjb25uZWN0aW9uc1RvQ2xvc2UuaW5zZXJ0KHN0ZDo6bWFrZV9wYWlyKCpjb25JdCwgYWNjZXNzb3JJdC0+c2Vjb25kKSk7CisgICAgICAgICAgICAgICAgICAgIG1BY2Nlc3NvcnMuZXJhc2UoYWNjZXNzb3JJdCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIG1Db25uZWN0aW9uVG9Db29raWUuZXJhc2UoKmNvbkl0KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIG1Db29raWVUb0Nvbm5lY3Rpb25zLmVyYXNlKGl0KTsKKyAgICAgICAgfQorICAgIH0KKworICAgIGlmIChjb25uZWN0aW9uc1RvQ2xvc2Uuc2l6ZSgpID4gMCkgeworICAgICAgICBzcDxBY2Nlc3Nvcj4gYWNjZXNzb3I7CisgICAgICAgIGZvciAoYXV0byBpdCA9IGNvbm5lY3Rpb25zVG9DbG9zZS5iZWdpbigpOyBpdCAhPSBjb25uZWN0aW9uc1RvQ2xvc2UuZW5kKCk7ICsraXQpIHsKKyAgICAgICAgICAgIGFjY2Vzc29yID0gaXQtPnNlY29uZC5wcm9tb3RlKCk7CisKKyAgICAgICAgICAgIGlmIChhY2Nlc3NvcikgeworICAgICAgICAgICAgICAgIGFjY2Vzc29yLT5jbG9zZShpdC0+Zmlyc3QpOworICAgICAgICAgICAgICAgIEFMT0dEKCJjb25uZWN0aW9uICVsbGQgY2xvc2VkIG9uIGRlYXRoIiwgKGxvbmcgbG9uZylpdC0+Zmlyc3QpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorfQorCituYW1lc3BhY2Ugeworc3RhdGljIHNwPENvbm5lY3Rpb25EZWF0aFJlY2lwaWVudD4gc0Nvbm5lY3Rpb25EZWF0aFJlY2lwaWVudCA9CisgICAgICAgIG5ldyBDb25uZWN0aW9uRGVhdGhSZWNpcGllbnQoKTsKK30KKworc3A8Q29ubmVjdGlvbkRlYXRoUmVjaXBpZW50PiBBY2Nlc3Nvcjo6Z2V0Q29ubmVjdGlvbkRlYXRoUmVjaXBpZW50KCkgeworICAgIHJldHVybiBzQ29ubmVjdGlvbkRlYXRoUmVjaXBpZW50OworfQorCisvLyBNZXRob2RzIGZyb20gOjphbmRyb2lkOjpoYXJkd2FyZTo6bWVkaWE6OmJ1ZmZlcnBvb2w6OlYxXzA6OklBY2Nlc3NvciBmb2xsb3cuCitSZXR1cm48dm9pZD4gQWNjZXNzb3I6OmNvbm5lY3QoY29ubmVjdF9jYiBfaGlkbF9jYikgeworICAgIHNwPENvbm5lY3Rpb24+IGNvbm5lY3Rpb247CisgICAgQ29ubmVjdGlvbklkIGNvbm5lY3Rpb25JZDsKKyAgICBjb25zdCBRdWV1ZURlc2NyaXB0b3IqIGZtcURlc2M7CisKKyAgICBSZXN1bHRTdGF0dXMgc3RhdHVzID0gY29ubmVjdCgmY29ubmVjdGlvbiwgJmNvbm5lY3Rpb25JZCwgJmZtcURlc2MsIGZhbHNlKTsKKyAgICBpZiAoc3RhdHVzID09IFJlc3VsdFN0YXR1czo6T0spIHsKKyAgICAgICAgX2hpZGxfY2Ioc3RhdHVzLCBjb25uZWN0aW9uLCBjb25uZWN0aW9uSWQsICpmbXFEZXNjKTsKKyAgICB9IGVsc2UgeworICAgICAgICBfaGlkbF9jYihzdGF0dXMsIG51bGxwdHIsIC0xTEwsCisgICAgICAgICAgICAgICAgIGFuZHJvaWQ6OmhhcmR3YXJlOjpNUURlc2NyaXB0b3JTeW5jPEJ1ZmZlclN0YXR1c01lc3NhZ2U+KAorICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZDo6dmVjdG9yPGFuZHJvaWQ6OmhhcmR3YXJlOjpHcmFudG9yRGVzY3JpcHRvcj4oKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBudWxscHRyIC8qIG5oYW5kbGUgKi8sIDAgLyogc2l6ZSAqLykpOworICAgIH0KKyAgICByZXR1cm4gVm9pZCgpOworfQorCitBY2Nlc3Nvcjo6QWNjZXNzb3IoY29uc3Qgc3RkOjpzaGFyZWRfcHRyPEJ1ZmZlclBvb2xBbGxvY2F0b3I+ICZhbGxvY2F0b3IpCisgICAgOiBtSW1wbChuZXcgSW1wbChhbGxvY2F0b3IpKSB7fQorCitBY2Nlc3Nvcjo6fkFjY2Vzc29yKCkgeworfQorCitib29sIEFjY2Vzc29yOjppc1ZhbGlkKCkgeworICAgIHJldHVybiAoYm9vbCltSW1wbDsKK30KKworUmVzdWx0U3RhdHVzIEFjY2Vzc29yOjphbGxvY2F0ZSgKKyAgICAgICAgQ29ubmVjdGlvbklkIGNvbm5lY3Rpb25JZCwKKyAgICAgICAgY29uc3Qgc3RkOjp2ZWN0b3I8dWludDhfdD4gJnBhcmFtcywKKyAgICAgICAgQnVmZmVySWQgKmJ1ZmZlcklkLCBjb25zdCBuYXRpdmVfaGFuZGxlX3QqKiBoYW5kbGUpIHsKKyAgICBpZiAobUltcGwpIHsKKyAgICAgICAgcmV0dXJuIG1JbXBsLT5hbGxvY2F0ZShjb25uZWN0aW9uSWQsIHBhcmFtcywgYnVmZmVySWQsIGhhbmRsZSk7CisgICAgfQorICAgIHJldHVybiBSZXN1bHRTdGF0dXM6OkNSSVRJQ0FMX0VSUk9SOworfQorCitSZXN1bHRTdGF0dXMgQWNjZXNzb3I6OmZldGNoKAorICAgICAgICBDb25uZWN0aW9uSWQgY29ubmVjdGlvbklkLCBUcmFuc2FjdGlvbklkIHRyYW5zYWN0aW9uSWQsCisgICAgICAgIEJ1ZmZlcklkIGJ1ZmZlcklkLCBjb25zdCBuYXRpdmVfaGFuZGxlX3QqKiBoYW5kbGUpIHsKKyAgICBpZiAobUltcGwpIHsKKyAgICAgICAgcmV0dXJuIG1JbXBsLT5mZXRjaChjb25uZWN0aW9uSWQsIHRyYW5zYWN0aW9uSWQsIGJ1ZmZlcklkLCBoYW5kbGUpOworICAgIH0KKyAgICByZXR1cm4gUmVzdWx0U3RhdHVzOjpDUklUSUNBTF9FUlJPUjsKK30KKworUmVzdWx0U3RhdHVzIEFjY2Vzc29yOjpjb25uZWN0KAorICAgICAgICBzcDxDb25uZWN0aW9uPiAqY29ubmVjdGlvbiwgQ29ubmVjdGlvbklkICpwQ29ubmVjdGlvbklkLAorICAgICAgICBjb25zdCBRdWV1ZURlc2NyaXB0b3IqKiBmbXFEZXNjUHRyLCBib29sIGxvY2FsKSB7CisgICAgaWYgKG1JbXBsKSB7CisgICAgICAgIFJlc3VsdFN0YXR1cyBzdGF0dXMgPSBtSW1wbC0+Y29ubmVjdCh0aGlzLCBjb25uZWN0aW9uLCBwQ29ubmVjdGlvbklkLCBmbXFEZXNjUHRyKTsKKyAgICAgICAgaWYgKCFsb2NhbCAmJiBzdGF0dXMgPT0gUmVzdWx0U3RhdHVzOjpPSykgeworICAgICAgICAgICAgc3A8QWNjZXNzb3I+IGFjY2Vzc29yKHRoaXMpOworICAgICAgICAgICAgc0Nvbm5lY3Rpb25EZWF0aFJlY2lwaWVudC0+YWRkKCpwQ29ubmVjdGlvbklkLCBhY2Nlc3Nvcik7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHN0YXR1czsKKyAgICB9CisgICAgcmV0dXJuIFJlc3VsdFN0YXR1czo6Q1JJVElDQUxfRVJST1I7Cit9CisKK1Jlc3VsdFN0YXR1cyBBY2Nlc3Nvcjo6Y2xvc2UoQ29ubmVjdGlvbklkIGNvbm5lY3Rpb25JZCkgeworICAgIGlmIChtSW1wbCkgeworICAgICAgICBSZXN1bHRTdGF0dXMgc3RhdHVzID0gbUltcGwtPmNsb3NlKGNvbm5lY3Rpb25JZCk7CisgICAgICAgIHNDb25uZWN0aW9uRGVhdGhSZWNpcGllbnQtPnJlbW92ZShjb25uZWN0aW9uSWQpOworICAgICAgICByZXR1cm4gc3RhdHVzOworICAgIH0KKyAgICByZXR1cm4gUmVzdWx0U3RhdHVzOjpDUklUSUNBTF9FUlJPUjsKK30KKwordm9pZCBBY2Nlc3Nvcjo6Y2xlYW5VcChib29sIGNsZWFyQ2FjaGUpIHsKKyAgICBpZiAobUltcGwpIHsKKyAgICAgICAgbUltcGwtPmNsZWFuVXAoY2xlYXJDYWNoZSk7CisgICAgfQorfQorCisvL0lBY2Nlc3NvciogSElETF9GRVRDSF9JQWNjZXNzb3IoY29uc3QgY2hhciogLyogbmFtZSAqLykgeworLy8gICAgcmV0dXJuIG5ldyBBY2Nlc3NvcigpOworLy99CisKK30gIC8vIG5hbWVzcGFjZSBpbXBsZW1lbnRhdGlvbgorfSAgLy8gbmFtZXNwYWNlIFYxXzAKK30gIC8vIG5hbWVzcGFjZSBidWZmZXJwb29sCit9ICAvLyBuYW1lc3BhY2UgbWVkaWEKK30gIC8vIG5hbWVzcGFjZSBoYXJkd2FyZQorfSAgLy8gbmFtZXNwYWNlIGFuZHJvaWQKZGlmZiAtLWdpdCBhL21lZGlhL2J1ZmZlcnBvb2wvMS4wL0FjY2Vzc29yLmggYi9tZWRpYS9idWZmZXJwb29sLzEuMC9BY2Nlc3Nvci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJmODZmN2IKLS0tIC9kZXYvbnVsbAorKysgYi9tZWRpYS9idWZmZXJwb29sLzEuMC9BY2Nlc3Nvci5oCkBAIC0wLDAgKzEsMTg4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE4IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KKworI2lmbmRlZiBBTkRST0lEX0hBUkRXQVJFX01FRElBX0JVRkZFUlBPT0xfVjFfMF9BQ0NFU1NPUl9ICisjZGVmaW5lIEFORFJPSURfSEFSRFdBUkVfTUVESUFfQlVGRkVSUE9PTF9WMV8wX0FDQ0VTU09SX0gKKworI2luY2x1ZGUgPGFuZHJvaWQvaGFyZHdhcmUvbWVkaWEvYnVmZmVycG9vbC8xLjAvSUFjY2Vzc29yLmg+CisjaW5jbHVkZSA8YnVmZmVycG9vbC9CdWZmZXJQb29sVHlwZXMuaD4KKyNpbmNsdWRlIDxoaWRsL01RRGVzY3JpcHRvci5oPgorI2luY2x1ZGUgPGhpZGwvU3RhdHVzLmg+CisjaW5jbHVkZSAiQnVmZmVyU3RhdHVzLmgiCisKKyNpbmNsdWRlIDxzZXQ+CisKK25hbWVzcGFjZSBhbmRyb2lkIHsKK25hbWVzcGFjZSBoYXJkd2FyZSB7CituYW1lc3BhY2UgbWVkaWEgeworbmFtZXNwYWNlIGJ1ZmZlcnBvb2wgeworbmFtZXNwYWNlIFYxXzAgeworbmFtZXNwYWNlIGltcGxlbWVudGF0aW9uIHsKKwordXNpbmcgOjphbmRyb2lkOjpoYXJkd2FyZTo6aGlkbF9hcnJheTsKK3VzaW5nIDo6YW5kcm9pZDo6aGFyZHdhcmU6OmhpZGxfbWVtb3J5OwordXNpbmcgOjphbmRyb2lkOjpoYXJkd2FyZTo6aGlkbF9zdHJpbmc7Cit1c2luZyA6OmFuZHJvaWQ6OmhhcmR3YXJlOjpoaWRsX3ZlYzsKK3VzaW5nIDo6YW5kcm9pZDo6aGFyZHdhcmU6OlJldHVybjsKK3VzaW5nIDo6YW5kcm9pZDo6aGFyZHdhcmU6OlZvaWQ7Cit1c2luZyA6OmFuZHJvaWQ6OnNwOworCitzdHJ1Y3QgQWNjZXNzb3I7CitzdHJ1Y3QgQ29ubmVjdGlvbjsKKworLyoqCisgKiBSZWNlaXZlcyBkZWF0aCBub3RpZmljYXRpb25zIGZyb20gcmVtb3RlIGNvbm5lY3Rpb25zLgorICogT24gZGVhdGggbm90aWZpY2F0aW9ucywgdGhlIGNvbm5lY3Rpb25zIGFyZSBjbG9zZWQgYW5kIHVzZWQgcmVzb3VyY2VzCisgKiBhcmUgcmVsZWFzZWQuCisgKi8KK3N0cnVjdCBDb25uZWN0aW9uRGVhdGhSZWNpcGllbnQgOiBwdWJsaWMgaGFyZHdhcmU6OmhpZGxfZGVhdGhfcmVjaXBpZW50IHsKKyAgICAvKioKKyAgICAgKiBSZWdpc3RlcnMgYSBuZXdseSBjb25uZWN0ZWQgY29ubmVjdGlvbiBmcm9tIHJlbW90ZSBwcm9jZXNzZXMuCisgICAgICovCisgICAgdm9pZCBhZGQoaW50NjRfdCBjb25uZWN0aW9uSWQsIGNvbnN0IHNwPEFjY2Vzc29yPiAmYWNjZXNzb3IpOworCisgICAgLyoqCisgICAgICogUmVtb3ZlcyBhIGNvbm5lY3Rpb24uCisgICAgICovCisgICAgdm9pZCByZW1vdmUoaW50NjRfdCBjb25uZWN0aW9uSWQpOworCisgICAgdm9pZCBhZGRDb29raWVUb0Nvbm5lY3Rpb24odWludDY0X3QgY29va2llLCBpbnQ2NF90IGNvbm5lY3Rpb25JZCk7CisKKyAgICB2aXJ0dWFsIHZvaWQgc2VydmljZURpZWQoCisgICAgICAgICAgICB1aW50NjRfdCAvKiBjb29raWUgKi8sCisgICAgICAgICAgICBjb25zdCB3cDw6OmFuZHJvaWQ6OmhpZGw6OmJhc2U6OlYxXzA6OklCYXNlPiYgLyogd2hvICovCisgICAgICAgICAgICApIG92ZXJyaWRlOworCitwcml2YXRlOgorICAgIHN0ZDo6bXV0ZXggbUxvY2s7CisgICAgc3RkOjptYXA8dWludDY0X3QsIHN0ZDo6c2V0PGludDY0X3Q+PiAgbUNvb2tpZVRvQ29ubmVjdGlvbnM7CisgICAgc3RkOjptYXA8aW50NjRfdCwgdWludDY0X3Q+IG1Db25uZWN0aW9uVG9Db29raWU7CisgICAgc3RkOjptYXA8aW50NjRfdCwgY29uc3Qgd3A8QWNjZXNzb3I+PiBtQWNjZXNzb3JzOworfTsKKworLyoqCisgKiBBIGJ1ZmZlciBwb29sIGFjY2Vzc29yIHdoaWNoIGVuYWJsZXMgYSBidWZmZXIgcG9vbCB0byBjb21tdW5pY2F0ZSB3aXRoIGJ1ZmZlcgorICogcG9vbCBjbGllbnRzLiAxOjEgY29ycmVzcG9uZGVuc2UgaG9sZHMgYmV0d2VlbiBhIGJ1ZmZlciBwb29sIGFuZCBhbiBhY2Nlc3Nvci4KKyAqLworc3RydWN0IEFjY2Vzc29yIDogcHVibGljIElBY2Nlc3NvciB7CisgICAgLy8gTWV0aG9kcyBmcm9tIDo6YW5kcm9pZDo6aGFyZHdhcmU6Om1lZGlhOjpidWZmZXJwb29sOjpWMV8wOjpJQWNjZXNzb3IgZm9sbG93LgorICAgIFJldHVybjx2b2lkPiBjb25uZWN0KGNvbm5lY3RfY2IgX2hpZGxfY2IpIG92ZXJyaWRlOworCisgICAgLyoqCisgICAgICogQ3JlYXRlcyBhIGJ1ZmZlciBwb29sIGFjY2Vzc29yIHdoaWNoIHVzZXMgdGhlIHNwZWNpZmllZCBhbGxvY2F0b3IuCisgICAgICoKKyAgICAgKiBAcGFyYW0gYWxsb2NhdG9yIGJ1ZmZlciBhbGxvY2F0b3IuCisgICAgICovCisgICAgZXhwbGljaXQgQWNjZXNzb3IoY29uc3Qgc3RkOjpzaGFyZWRfcHRyPEJ1ZmZlclBvb2xBbGxvY2F0b3I+ICZhbGxvY2F0b3IpOworCisgICAgLyoqIERlc3RydWN0cyBhIGJ1ZmZlciBwb29sIGFjY2Vzc29yLiAqLworICAgIH5BY2Nlc3NvcigpOworCisgICAgLyoqIFJldHVybnMgd2hldGhlciB0aGUgYWNjZXNzb3IgaXMgdmFsaWQuICovCisgICAgYm9vbCBpc1ZhbGlkKCk7CisKKyAgICAvKiogQWxsb2NhdGVzIGEgYnVmZmVyIGZyb20gYSBidWZmZXIgcG9vbC4KKyAgICAgKgorICAgICAqIEBwYXJhbSBjb25uZWN0aW9uSWQgIHRoZSBjb25uZWN0aW9uIGlkIG9mIHRoZSBjbGllbnQuCisgICAgICogQHBhcmFtIHBhcmFtcyAgICAgICAgdGhlIGFsbG9jYXRpb24gcGFyYW1ldGVycy4KKyAgICAgKiBAcGFyYW0gYnVmZmVySWQgICAgICB0aGUgaWQgb2YgdGhlIGFsbG9jYXRlZCBidWZmZXIuCisgICAgICogQHBhcmFtIGhhbmRsZSAgICAgICAgdGhlIG5hdGl2ZSBoYW5kbGUgb2YgdGhlIGFsbG9jYXRlZCBidWZmZXIuCisgICAgICoKKyAgICAgKiBAcmV0dXJuIE9LIHdoZW4gYSBidWZmZXIgaXMgc3VjY2Vzc2Z1bGx5IGFsbG9jYXRlZC4KKyAgICAgKiAgICAgICAgIE5PX01FTU9SWSB3aGVuIHRoZXJlIGlzIG5vIG1lbW9yeS4KKyAgICAgKiAgICAgICAgIENSSVRJQ0FMX0VSUk9SIG90aGVyd2lzZS4KKyAgICAgKi8KKyAgICBSZXN1bHRTdGF0dXMgYWxsb2NhdGUoCisgICAgICAgICAgICBDb25uZWN0aW9uSWQgY29ubmVjdGlvbklkLAorICAgICAgICAgICAgY29uc3Qgc3RkOjp2ZWN0b3I8dWludDhfdD4mIHBhcmFtcywKKyAgICAgICAgICAgIEJ1ZmZlcklkICpidWZmZXJJZCwKKyAgICAgICAgICAgIGNvbnN0IG5hdGl2ZV9oYW5kbGVfdCoqIGhhbmRsZSk7CisKKyAgICAvKioKKyAgICAgKiBGZXRjaGVzIGEgYnVmZmVyIGZvciB0aGUgc3BlY2lmaWVkIHRyYW5zYWN0aW9uLgorICAgICAqCisgICAgICogQHBhcmFtIGNvbm5lY3Rpb25JZCAgdGhlIGlkIG9mIHJlY2VpdmluZyBjb25uZWN0aW9uKGNsaWVudCkuCisgICAgICogQHBhcmFtIHRyYW5zYWN0aW9uSWQgdGhlIGlkIG9mIHRoZSB0cmFuc2ZlciB0cmFuc2FjdGlvbi4KKyAgICAgKiBAcGFyYW0gYnVmZmVySWQgICAgICB0aGUgaWQgb2YgdGhlIGJ1ZmZlciB0byBiZSBmZXRjaGVkLgorICAgICAqIEBwYXJhbSBoYW5kbGUgICAgICAgIHRoZSBuYXRpdmUgaGFuZGxlIG9mIHRoZSBmZXRjaGVkIGJ1ZmZlci4KKyAgICAgKgorICAgICAqIEByZXR1cm4gT0sgd2hlbiBhIGJ1ZmZlciBpcyBzdWNjZXNzZnVsbHkgZmV0Y2hlZC4KKyAgICAgKiAgICAgICAgIE5PX01FTU9SWSB3aGVuIHRoZXJlIGlzIG5vIG1lbW9yeS4KKyAgICAgKiAgICAgICAgIENSSVRJQ0FMX0VSUk9SIG90aGVyd2lzZS4KKyAgICAgKi8KKyAgICBSZXN1bHRTdGF0dXMgZmV0Y2goCisgICAgICAgICAgICBDb25uZWN0aW9uSWQgY29ubmVjdGlvbklkLAorICAgICAgICAgICAgVHJhbnNhY3Rpb25JZCB0cmFuc2FjdGlvbklkLAorICAgICAgICAgICAgQnVmZmVySWQgYnVmZmVySWQsCisgICAgICAgICAgICBjb25zdCBuYXRpdmVfaGFuZGxlX3QqKiBoYW5kbGUpOworCisgICAgLyoqCisgICAgICogTWFrZXMgYSBjb25uZWN0aW9uIHRvIHRoZSBidWZmZXIgcG9vbC4gVGhlIGJ1ZmZlciBwb29sIGNsaWVudCB1c2VzIHRoZQorICAgICAqIGNyZWF0ZWQgY29ubmVjdGlvbiBpbiBvcmRlciB0byBjb21tdW5pY2F0ZSB3aXRoIHRoZSBidWZmZXIgcG9vbC4gQW4KKyAgICAgKiBGTVEgZm9yIGJ1ZmZlciBzdGF0dXMgbWVzc2FnZSBpcyBhbHNvIGNyZWF0ZWQgZm9yIHRoZSBjbGllbnQuCisgICAgICoKKyAgICAgKiBAcGFyYW0gY29ubmVjdGlvbiAgICBjcmVhdGVkIGNvbm5lY3Rpb24KKyAgICAgKiBAcGFyYW0gcENvbm5lY3Rpb25JZCB0aGUgaWQgb2YgdGhlIGNyZWF0ZWQgY29ubmVjdGlvbgorICAgICAqIEBwYXJhbSBmbXFEZXNjUHRyICAgIEZNUSBkZXNjcmlwdG9yIGZvciBzaGFyZWQgYnVmZmVyIHN0YXR1cyBtZXNzYWdlCisgICAgICogICAgICAgICAgICAgICAgICAgICAgcXVldWUgYmV0d2VlbiBhIGJ1ZmZlciBwb29sIGFuZCB0aGUgY2xpZW50LgorICAgICAqIEBwYXJhbSBsb2NhbCAgICAgICAgIHRydWUgd2hlbiBhIGNvbm5lY3Rpb24gcmVxdWVzdCBjb21lcyBmcm9tIGxvY2FsIHByb2Nlc3MsCisgICAgICogICAgICAgICAgICAgICAgICAgICAgZmFsc2Ugb3RoZXJ3aXNlLgorICAgICAqCisgICAgICogQHJldHVybiBPSyB3aGVuIGEgY29ubmVjdGlvbiBpcyBzdWNjZXNzZnVsbHkgbWFkZS4KKyAgICAgKiAgICAgICAgIE5PX01FTU9SWSB3aGVuIHRoZXJlIGlzIG5vIG1lbW9yeS4KKyAgICAgKiAgICAgICAgIENSSVRJQ0FMX0VSUk9SIG90aGVyd2lzZS4KKyAgICAgKi8KKyAgICBSZXN1bHRTdGF0dXMgY29ubmVjdCgKKyAgICAgICAgICAgIHNwPENvbm5lY3Rpb24+ICpjb25uZWN0aW9uLCBDb25uZWN0aW9uSWQgKnBDb25uZWN0aW9uSWQsCisgICAgICAgICAgICBjb25zdCBRdWV1ZURlc2NyaXB0b3IqKiBmbXFEZXNjUHRyLCBib29sIGxvY2FsKTsKKworICAgIC8qKgorICAgICAqIENsb3NlcyB0aGUgc3BlY2lmaWVkIGNvbm5lY3Rpb24gdG8gdGhlIGNsaWVudC4KKyAgICAgKgorICAgICAqIEBwYXJhbSBjb25uZWN0aW9uSWQgIHRoZSBpZCBvZiB0aGUgY29ubmVjdGlvbi4KKyAgICAgKgorICAgICAqIEByZXR1cm4gT0sgd2hlbiB0aGUgY29ubmVjdGlvbiBpcyBjbG9zZWQuCisgICAgICogICAgICAgICBDUklUSUNBTF9FUlJPUiBvdGhlcndpc2UuCisgICAgICovCisgICAgUmVzdWx0U3RhdHVzIGNsb3NlKENvbm5lY3Rpb25JZCBjb25uZWN0aW9uSWQpOworCisgICAgLyoqCisgICAgICogUHJvY2Vzc2VzIHBlbmRpbmcgYnVmZmVyIHN0YXR1cyBtZXNzYWdlcyBhbmQgcGVyZm9tcyBwZXJpb2RpYyBjYWNoZQorICAgICAqIGNsZWFuaW5nLgorICAgICAqCisgICAgICogQHBhcmFtIGNsZWFyQ2FjaGUgICAgaWYgY2xlYXJDYWNoZSBpcyB0cnVlLCBpdCBmcmVlcyBhbGwgYnVmZmVycyB3YWl0aW5nCisgICAgICogICAgICAgICAgICAgICAgICAgICAgdG8gYmUgcmVjeWNsZWQuCisgICAgICovCisgICAgdm9pZCBjbGVhblVwKGJvb2wgY2xlYXJDYWNoZSk7CisKKyAgICAvKioKKyAgICAgKiBHZXRzIGEgaGlkbF9kZWF0aF9yZWNpcGllbnQgZm9yIHJlbW90ZSBjb25uZWN0aW9uIGRlYXRoLgorICAgICAqLworICAgIHN0YXRpYyBzcDxDb25uZWN0aW9uRGVhdGhSZWNpcGllbnQ+IGdldENvbm5lY3Rpb25EZWF0aFJlY2lwaWVudCgpOworCitwcml2YXRlOgorICAgIGNsYXNzIEltcGw7CisgICAgc3RkOjp1bmlxdWVfcHRyPEltcGw+IG1JbXBsOworfTsKKworfSAgLy8gbmFtZXNwYWNlIGltcGxlbWVudGF0aW9uCit9ICAvLyBuYW1lc3BhY2UgVjFfMAorfSAgLy8gbmFtZXNwYWNlIGJ1ZmZlcnBvb2wKK30gIC8vIG5hbWVzcGFjZSBtZWRpYQorfSAgLy8gbmFtZXNwYWNlIGhhcmR3YXJlCit9ICAvLyBuYW1lc3BhY2UgYW5kcm9pZAorCisjZW5kaWYgIC8vIEFORFJPSURfSEFSRFdBUkVfTUVESUFfQlVGRkVSUE9PTF9WMV8wX0FDQ0VTU09SX0gKZGlmZiAtLWdpdCBhL21lZGlhL2J1ZmZlcnBvb2wvMS4wL0FjY2Vzc29ySW1wbC5jcHAgYi9tZWRpYS9idWZmZXJwb29sLzEuMC9BY2Nlc3NvckltcGwuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZhMTdmMTUKLS0tIC9kZXYvbnVsbAorKysgYi9tZWRpYS9idWZmZXJwb29sLzEuMC9BY2Nlc3NvckltcGwuY3BwCkBAIC0wLDAgKzEsNTQzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE4IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KKworI2RlZmluZSBMT0dfVEFHICJCdWZmZXJQb29sQWNjZXNzb3IiCisvLyNkZWZpbmUgTE9HX05ERUJVRyAwCisKKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyNpbmNsdWRlIDx0aW1lLmg+CisjaW5jbHVkZSA8dW5pc3RkLmg+CisjaW5jbHVkZSA8dXRpbHMvTG9nLmg+CisjaW5jbHVkZSAiQWNjZXNzb3JJbXBsLmgiCisjaW5jbHVkZSAiQ29ubmVjdGlvbi5oIgorCituYW1lc3BhY2UgYW5kcm9pZCB7CituYW1lc3BhY2UgaGFyZHdhcmUgeworbmFtZXNwYWNlIG1lZGlhIHsKK25hbWVzcGFjZSBidWZmZXJwb29sIHsKK25hbWVzcGFjZSBWMV8wIHsKK25hbWVzcGFjZSBpbXBsZW1lbnRhdGlvbiB7CisKK25hbWVzcGFjZSB7CisgICAgc3RhdGljIGNvbnN0ZXhwciBpbnQ2NF90IGtDbGVhblVwRHVyYXRpb25VcyA9IDUwMDAwMDsgLy8gVE9ETyB0dW5lIDAuNSBzZWMKKyAgICBzdGF0aWMgY29uc3RleHByIGludDY0X3Qga0xvZ0R1cmF0aW9uVXMgPSA1MDAwMDAwOyAvLyA1IHNlY3MKKworICAgIHN0YXRpYyBjb25zdGV4cHIgc2l6ZV90IGtNaW5BbGxvY0J5dGVzRm9yRXZpY3Rpb24gPSAxMDI0KjEwMjQqMTU7CisgICAgc3RhdGljIGNvbnN0ZXhwciBzaXplX3Qga01pbkJ1ZmZlckNvdW50Rm9yRXZpY3Rpb24gPSA0MDsKK30KKworLy8gQnVmZmVyIHN0cnVjdHVyZSBpbiBidWZmZXJwb29sIHByb2Nlc3MKK3N0cnVjdCBJbnRlcm5hbEJ1ZmZlciB7CisgICAgQnVmZmVySWQgbUlkOworICAgIHNpemVfdCBtT3duZXJDb3VudDsKKyAgICBzaXplX3QgbVRyYW5zYWN0aW9uQ291bnQ7CisgICAgY29uc3Qgc3RkOjpzaGFyZWRfcHRyPEJ1ZmZlclBvb2xBbGxvY2F0aW9uPiBtQWxsb2NhdGlvbjsKKyAgICBjb25zdCBzaXplX3QgbUFsbG9jU2l6ZTsKKyAgICBjb25zdCBzdGQ6OnZlY3Rvcjx1aW50OF90PiBtQ29uZmlnOworCisgICAgSW50ZXJuYWxCdWZmZXIoCisgICAgICAgICAgICBCdWZmZXJJZCBpZCwKKyAgICAgICAgICAgIGNvbnN0IHN0ZDo6c2hhcmVkX3B0cjxCdWZmZXJQb29sQWxsb2NhdGlvbj4gJmFsbG9jLAorICAgICAgICAgICAgY29uc3Qgc2l6ZV90IGFsbG9jU2l6ZSwKKyAgICAgICAgICAgIGNvbnN0IHN0ZDo6dmVjdG9yPHVpbnQ4X3Q+ICZhbGxvY0NvbmZpZykKKyAgICAgICAgICAgIDogbUlkKGlkKSwgbU93bmVyQ291bnQoMCksIG1UcmFuc2FjdGlvbkNvdW50KDApLAorICAgICAgICAgICAgbUFsbG9jYXRpb24oYWxsb2MpLCBtQWxsb2NTaXplKGFsbG9jU2l6ZSksIG1Db25maWcoYWxsb2NDb25maWcpIHt9CisKKyAgICBjb25zdCBuYXRpdmVfaGFuZGxlX3QgKmhhbmRsZSgpIHsKKyAgICAgICAgcmV0dXJuIG1BbGxvY2F0aW9uLT5oYW5kbGUoKTsKKyAgICB9Cit9OworCitzdHJ1Y3QgVHJhbnNhY3Rpb25TdGF0dXMgeworICAgIFRyYW5zYWN0aW9uSWQgbUlkOworICAgIEJ1ZmZlcklkIG1CdWZmZXJJZDsKKyAgICBDb25uZWN0aW9uSWQgbVNlbmRlcjsKKyAgICBDb25uZWN0aW9uSWQgbVJlY2VpdmVyOworICAgIEJ1ZmZlclN0YXR1cyBtU3RhdHVzOworICAgIGludDY0X3QgbVRpbWVzdGFtcFVzOworICAgIGJvb2wgbVNlbmRlclZhbGlkYXRlZDsKKworICAgIFRyYW5zYWN0aW9uU3RhdHVzKGNvbnN0IEJ1ZmZlclN0YXR1c01lc3NhZ2UgJm1lc3NhZ2UsIGludDY0X3QgdGltZXN0YW1wVXMpIHsKKyAgICAgICAgbUlkID0gbWVzc2FnZS50cmFuc2FjdGlvbklkOworICAgICAgICBtQnVmZmVySWQgPSBtZXNzYWdlLmJ1ZmZlcklkOworICAgICAgICBtU3RhdHVzID0gbWVzc2FnZS5uZXdTdGF0dXM7CisgICAgICAgIG1UaW1lc3RhbXBVcyA9IHRpbWVzdGFtcFVzOworICAgICAgICBpZiAobVN0YXR1cyA9PSBCdWZmZXJTdGF0dXM6OlRSQU5TRkVSX1RPKSB7CisgICAgICAgICAgICBtU2VuZGVyID0gbWVzc2FnZS5jb25uZWN0aW9uSWQ7CisgICAgICAgICAgICBtUmVjZWl2ZXIgPSBtZXNzYWdlLnRhcmdldENvbm5lY3Rpb25JZDsKKyAgICAgICAgICAgIG1TZW5kZXJWYWxpZGF0ZWQgPSB0cnVlOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgbVNlbmRlciA9IC0xTEw7CisgICAgICAgICAgICBtUmVjZWl2ZXIgPSBtZXNzYWdlLmNvbm5lY3Rpb25JZDsKKyAgICAgICAgICAgIG1TZW5kZXJWYWxpZGF0ZWQgPSBmYWxzZTsKKyAgICAgICAgfQorICAgIH0KK307CisKKy8vIEhlbHBlciB0ZW1wbGF0ZSBtZXRob2RzIGZvciBoYW5kbGluZyBtYXAgb2Ygc2V0LgordGVtcGxhdGU8Y2xhc3MgVCwgY2xhc3MgVT4KK2Jvb2wgaW5zZXJ0KHN0ZDo6bWFwPFQsIHN0ZDo6c2V0PFU+PiAqbWFwT2ZTZXQsIFQga2V5LCBVIHZhbHVlKSB7CisgICAgYXV0byBpdGVyID0gbWFwT2ZTZXQtPmZpbmQoa2V5KTsKKyAgICBpZiAoaXRlciA9PSBtYXBPZlNldC0+ZW5kKCkpIHsKKyAgICAgICAgc3RkOjpzZXQ8VT4gdmFsdWVTZXR7dmFsdWV9OworICAgICAgICBtYXBPZlNldC0+aW5zZXJ0KHN0ZDo6bWFrZV9wYWlyKGtleSwgdmFsdWVTZXQpKTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfSBlbHNlIGlmIChpdGVyLT5zZWNvbmQuZmluZCh2YWx1ZSkgID09IGl0ZXItPnNlY29uZC5lbmQoKSkgeworICAgICAgICBpdGVyLT5zZWNvbmQuaW5zZXJ0KHZhbHVlKTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorICAgIHJldHVybiBmYWxzZTsKK30KKwordGVtcGxhdGU8Y2xhc3MgVCwgY2xhc3MgVT4KK2Jvb2wgZXJhc2Uoc3RkOjptYXA8VCwgc3RkOjpzZXQ8VT4+ICptYXBPZlNldCwgVCBrZXksIFUgdmFsdWUpIHsKKyAgICBib29sIHJldCA9IGZhbHNlOworICAgIGF1dG8gaXRlciA9IG1hcE9mU2V0LT5maW5kKGtleSk7CisgICAgaWYgKGl0ZXIgIT0gbWFwT2ZTZXQtPmVuZCgpKSB7CisgICAgICAgIGlmIChpdGVyLT5zZWNvbmQuZXJhc2UodmFsdWUpID4gMCkgeworICAgICAgICAgICAgcmV0ID0gdHJ1ZTsKKyAgICAgICAgfQorICAgICAgICBpZiAoaXRlci0+c2Vjb25kLnNpemUoKSA9PSAwKSB7CisgICAgICAgICAgICBtYXBPZlNldC0+ZXJhc2UoaXRlcik7CisgICAgICAgIH0KKyAgICB9CisgICAgcmV0dXJuIHJldDsKK30KKwordGVtcGxhdGU8Y2xhc3MgVCwgY2xhc3MgVT4KK2Jvb2wgY29udGFpbnMoc3RkOjptYXA8VCwgc3RkOjpzZXQ8VT4+ICptYXBPZlNldCwgVCBrZXksIFUgdmFsdWUpIHsKKyAgICBhdXRvIGl0ZXIgPSBtYXBPZlNldC0+ZmluZChrZXkpOworICAgIGlmIChpdGVyICE9IG1hcE9mU2V0LT5lbmQoKSkgeworICAgICAgICBhdXRvIHNldEl0ZXIgPSBpdGVyLT5zZWNvbmQuZmluZCh2YWx1ZSk7CisgICAgICAgIHJldHVybiBzZXRJdGVyICE9IGl0ZXItPnNlY29uZC5lbmQoKTsKKyAgICB9CisgICAgcmV0dXJuIGZhbHNlOworfQorCitpbnQzMl90IEFjY2Vzc29yOjpJbXBsOjpzUGlkID0gZ2V0cGlkKCk7Cit1aW50MzJfdCBBY2Nlc3Nvcjo6SW1wbDo6c1NlcUlkID0gdGltZShudWxscHRyKTsKKworQWNjZXNzb3I6OkltcGw6OkltcGwoCisgICAgICAgIGNvbnN0IHN0ZDo6c2hhcmVkX3B0cjxCdWZmZXJQb29sQWxsb2NhdG9yPiAmYWxsb2NhdG9yKQorICAgICAgICA6IG1BbGxvY2F0b3IoYWxsb2NhdG9yKSB7fQorCitBY2Nlc3Nvcjo6SW1wbDo6fkltcGwoKSB7Cit9CisKK1Jlc3VsdFN0YXR1cyBBY2Nlc3Nvcjo6SW1wbDo6Y29ubmVjdCgKKyAgICAgICAgY29uc3Qgc3A8QWNjZXNzb3I+ICZhY2Nlc3Nvciwgc3A8Q29ubmVjdGlvbj4gKmNvbm5lY3Rpb24sCisgICAgICAgIENvbm5lY3Rpb25JZCAqcENvbm5lY3Rpb25JZCwgY29uc3QgUXVldWVEZXNjcmlwdG9yKiogZm1xRGVzY1B0cikgeworICAgIHNwPENvbm5lY3Rpb24+IG5ld0Nvbm5lY3Rpb24gPSBuZXcgQ29ubmVjdGlvbigpOworICAgIFJlc3VsdFN0YXR1cyBzdGF0dXMgPSBSZXN1bHRTdGF0dXM6OkNSSVRJQ0FMX0VSUk9SOworICAgIHsKKyAgICAgICAgc3RkOjpsb2NrX2d1YXJkPHN0ZDo6bXV0ZXg+IGxvY2sobUJ1ZmZlclBvb2wubU11dGV4KTsKKyAgICAgICAgaWYgKG5ld0Nvbm5lY3Rpb24pIHsKKyAgICAgICAgICAgIENvbm5lY3Rpb25JZCBpZCA9IChpbnQ2NF90KXNQaWQgPDwgMzIgfCBzU2VxSWQ7CisgICAgICAgICAgICBzdGF0dXMgPSBtQnVmZmVyUG9vbC5tT2JzZXJ2ZXIub3BlbihpZCwgZm1xRGVzY1B0cik7CisgICAgICAgICAgICBpZiAoc3RhdHVzID09IFJlc3VsdFN0YXR1czo6T0spIHsKKyAgICAgICAgICAgICAgICBuZXdDb25uZWN0aW9uLT5pbml0aWFsaXplKGFjY2Vzc29yLCBpZCk7CisgICAgICAgICAgICAgICAgKmNvbm5lY3Rpb24gPSBuZXdDb25uZWN0aW9uOworICAgICAgICAgICAgICAgICpwQ29ubmVjdGlvbklkID0gaWQ7CisgICAgICAgICAgICAgICAgKytzU2VxSWQ7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgbUJ1ZmZlclBvb2wucHJvY2Vzc1N0YXR1c01lc3NhZ2VzKCk7CisgICAgICAgIG1CdWZmZXJQb29sLmNsZWFuVXAoKTsKKyAgICB9CisgICAgcmV0dXJuIHN0YXR1czsKK30KKworUmVzdWx0U3RhdHVzIEFjY2Vzc29yOjpJbXBsOjpjbG9zZShDb25uZWN0aW9uSWQgY29ubmVjdGlvbklkKSB7CisgICAgc3RkOjpsb2NrX2d1YXJkPHN0ZDo6bXV0ZXg+IGxvY2sobUJ1ZmZlclBvb2wubU11dGV4KTsKKyAgICBtQnVmZmVyUG9vbC5wcm9jZXNzU3RhdHVzTWVzc2FnZXMoKTsKKyAgICBtQnVmZmVyUG9vbC5oYW5kbGVDbG9zZShjb25uZWN0aW9uSWQpOworICAgIG1CdWZmZXJQb29sLm1PYnNlcnZlci5jbG9zZShjb25uZWN0aW9uSWQpOworICAgIC8vIFNpbmNlIGNsb3NlIyB3aWxsIGJlIGNhbGxlZCBhZnRlciBhbGwgd29ya3MgYXJlIGZpbmlzaGVkLCBpdCBpcyBPSyB0bworICAgIC8vIGV2aWN0IHVudXNlZCBidWZmZXJzLgorICAgIG1CdWZmZXJQb29sLmNsZWFuVXAodHJ1ZSk7CisgICAgcmV0dXJuIFJlc3VsdFN0YXR1czo6T0s7Cit9CisKK1Jlc3VsdFN0YXR1cyBBY2Nlc3Nvcjo6SW1wbDo6YWxsb2NhdGUoCisgICAgICAgIENvbm5lY3Rpb25JZCBjb25uZWN0aW9uSWQsIGNvbnN0IHN0ZDo6dmVjdG9yPHVpbnQ4X3Q+JiBwYXJhbXMsCisgICAgICAgIEJ1ZmZlcklkICpidWZmZXJJZCwgY29uc3QgbmF0aXZlX2hhbmRsZV90KiogaGFuZGxlKSB7CisgICAgc3RkOjp1bmlxdWVfbG9jazxzdGQ6Om11dGV4PiBsb2NrKG1CdWZmZXJQb29sLm1NdXRleCk7CisgICAgbUJ1ZmZlclBvb2wucHJvY2Vzc1N0YXR1c01lc3NhZ2VzKCk7CisgICAgUmVzdWx0U3RhdHVzIHN0YXR1cyA9IFJlc3VsdFN0YXR1czo6T0s7CisgICAgaWYgKCFtQnVmZmVyUG9vbC5nZXRGcmVlQnVmZmVyKG1BbGxvY2F0b3IsIHBhcmFtcywgYnVmZmVySWQsIGhhbmRsZSkpIHsKKyAgICAgICAgbG9jay51bmxvY2soKTsKKyAgICAgICAgc3RkOjpzaGFyZWRfcHRyPEJ1ZmZlclBvb2xBbGxvY2F0aW9uPiBhbGxvYzsKKyAgICAgICAgc2l6ZV90IGFsbG9jU2l6ZTsKKyAgICAgICAgc3RhdHVzID0gbUFsbG9jYXRvci0+YWxsb2NhdGUocGFyYW1zLCAmYWxsb2MsICZhbGxvY1NpemUpOworICAgICAgICBsb2NrLmxvY2soKTsKKyAgICAgICAgaWYgKHN0YXR1cyA9PSBSZXN1bHRTdGF0dXM6Ok9LKSB7CisgICAgICAgICAgICBzdGF0dXMgPSBtQnVmZmVyUG9vbC5hZGROZXdCdWZmZXIoYWxsb2MsIGFsbG9jU2l6ZSwgcGFyYW1zLCBidWZmZXJJZCwgaGFuZGxlKTsKKyAgICAgICAgfQorICAgICAgICBBTE9HVigiY3JlYXRlIGEgYnVmZmVyICVkIDogJXUgJXAiLAorICAgICAgICAgICAgICBzdGF0dXMgPT0gUmVzdWx0U3RhdHVzOjpPSywgKmJ1ZmZlcklkLCAqaGFuZGxlKTsKKyAgICB9CisgICAgaWYgKHN0YXR1cyA9PSBSZXN1bHRTdGF0dXM6Ok9LKSB7CisgICAgICAgIC8vIFRPRE86IGhhbmRsZSBvd25CdWZmZXIgZmFpbHVyZQorICAgICAgICBtQnVmZmVyUG9vbC5oYW5kbGVPd25CdWZmZXIoY29ubmVjdGlvbklkLCAqYnVmZmVySWQpOworICAgIH0KKyAgICBtQnVmZmVyUG9vbC5jbGVhblVwKCk7CisgICAgcmV0dXJuIHN0YXR1czsKK30KKworUmVzdWx0U3RhdHVzIEFjY2Vzc29yOjpJbXBsOjpmZXRjaCgKKyAgICAgICAgQ29ubmVjdGlvbklkIGNvbm5lY3Rpb25JZCwgVHJhbnNhY3Rpb25JZCB0cmFuc2FjdGlvbklkLAorICAgICAgICBCdWZmZXJJZCBidWZmZXJJZCwgY29uc3QgbmF0aXZlX2hhbmRsZV90KiogaGFuZGxlKSB7CisgICAgc3RkOjpsb2NrX2d1YXJkPHN0ZDo6bXV0ZXg+IGxvY2sobUJ1ZmZlclBvb2wubU11dGV4KTsKKyAgICBtQnVmZmVyUG9vbC5wcm9jZXNzU3RhdHVzTWVzc2FnZXMoKTsKKyAgICBhdXRvIGZvdW5kID0gbUJ1ZmZlclBvb2wubVRyYW5zYWN0aW9ucy5maW5kKHRyYW5zYWN0aW9uSWQpOworICAgIGlmIChmb3VuZCAhPSBtQnVmZmVyUG9vbC5tVHJhbnNhY3Rpb25zLmVuZCgpICYmCisgICAgICAgICAgICBjb250YWlucygmbUJ1ZmZlclBvb2wubVBlbmRpbmdUcmFuc2FjdGlvbnMsCisgICAgICAgICAgICAgICAgICAgICBjb25uZWN0aW9uSWQsIHRyYW5zYWN0aW9uSWQpKSB7CisgICAgICAgIGlmIChmb3VuZC0+c2Vjb25kLT5tU2VuZGVyVmFsaWRhdGVkICYmCisgICAgICAgICAgICAgICAgZm91bmQtPnNlY29uZC0+bVN0YXR1cyA9PSBCdWZmZXJTdGF0dXM6OlRSQU5TRkVSX0ZST00gJiYKKyAgICAgICAgICAgICAgICBmb3VuZC0+c2Vjb25kLT5tQnVmZmVySWQgPT0gYnVmZmVySWQpIHsKKyAgICAgICAgICAgIGZvdW5kLT5zZWNvbmQtPm1TdGF0dXMgPSBCdWZmZXJTdGF0dXM6OlRSQU5TRkVSX0ZFVENIOworICAgICAgICAgICAgYXV0byBidWZmZXJJdCA9IG1CdWZmZXJQb29sLm1CdWZmZXJzLmZpbmQoYnVmZmVySWQpOworICAgICAgICAgICAgaWYgKGJ1ZmZlckl0ICE9IG1CdWZmZXJQb29sLm1CdWZmZXJzLmVuZCgpKSB7CisgICAgICAgICAgICAgICAgbUJ1ZmZlclBvb2wubVN0YXRzLm9uQnVmZmVyRmV0Y2hlZCgpOworICAgICAgICAgICAgICAgICpoYW5kbGUgPSBidWZmZXJJdC0+c2Vjb25kLT5oYW5kbGUoKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gUmVzdWx0U3RhdHVzOjpPSzsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKyAgICBtQnVmZmVyUG9vbC5jbGVhblVwKCk7CisgICAgcmV0dXJuIFJlc3VsdFN0YXR1czo6Q1JJVElDQUxfRVJST1I7Cit9CisKK3ZvaWQgQWNjZXNzb3I6OkltcGw6OmNsZWFuVXAoYm9vbCBjbGVhckNhY2hlKSB7CisgICAgLy8gdHJhbnNhY3Rpb24gdGltZW91dCwgYnVmZmVyIGNhY2hlaW5nIFRUTCBoYW5kbGluZworICAgIHN0ZDo6bG9ja19ndWFyZDxzdGQ6Om11dGV4PiBsb2NrKG1CdWZmZXJQb29sLm1NdXRleCk7CisgICAgbUJ1ZmZlclBvb2wucHJvY2Vzc1N0YXR1c01lc3NhZ2VzKCk7CisgICAgbUJ1ZmZlclBvb2wuY2xlYW5VcChjbGVhckNhY2hlKTsKK30KKworQWNjZXNzb3I6OkltcGw6OkltcGw6OkJ1ZmZlclBvb2w6OkJ1ZmZlclBvb2woKQorICAgIDogbVRpbWVzdGFtcFVzKGdldFRpbWVzdGFtcE5vdygpKSwKKyAgICAgIG1MYXN0Q2xlYW5VcFVzKG1UaW1lc3RhbXBVcyksCisgICAgICBtTGFzdExvZ1VzKG1UaW1lc3RhbXBVcyksCisgICAgICBtU2VxKDApIHt9CisKKworLy8gU3RhdGlzdGljcyBoZWxwZXIKK3RlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFM+CitpbnQgcGVyY2VudGFnZShUIGJhc2UsIFMgdG90YWwpIHsKKyAgICByZXR1cm4gaW50KHRvdGFsID8gMC41ICsgMTAwLiAqIHN0YXRpY19jYXN0PFM+KGJhc2UpIC8gdG90YWwgOiAwKTsKK30KKworQWNjZXNzb3I6OkltcGw6OkltcGw6OkJ1ZmZlclBvb2w6On5CdWZmZXJQb29sKCkgeworICAgIHN0ZDo6bG9ja19ndWFyZDxzdGQ6Om11dGV4PiBsb2NrKG1NdXRleCk7CisgICAgQUxPR0QoIkRlc3RydWN0aW9uIC0gYnVmZmVycG9vbCAlcCAiCisgICAgICAgICAgImNhY2hlZDogJXp1LyV6dU0sICV6dS8lZCUlIGluIHVzZTsgIgorICAgICAgICAgICJhbGxvY3M6ICV6dSwgJWQlJSByZWN5Y2xlZDsgIgorICAgICAgICAgICJ0cmFuc2ZlcnM6ICV6dSwgJWQlJSB1bmZldGNlZCIsCisgICAgICAgICAgdGhpcywgbVN0YXRzLm1CdWZmZXJzQ2FjaGVkLCBtU3RhdHMubVNpemVDYWNoZWQgPj4gMjAsCisgICAgICAgICAgbVN0YXRzLm1CdWZmZXJzSW5Vc2UsIHBlcmNlbnRhZ2UobVN0YXRzLm1CdWZmZXJzSW5Vc2UsIG1TdGF0cy5tQnVmZmVyc0NhY2hlZCksCisgICAgICAgICAgbVN0YXRzLm1Ub3RhbEFsbG9jYXRpb25zLCBwZXJjZW50YWdlKG1TdGF0cy5tVG90YWxSZWN5Y2xlcywgbVN0YXRzLm1Ub3RhbEFsbG9jYXRpb25zKSwKKyAgICAgICAgICBtU3RhdHMubVRvdGFsVHJhbnNmZXJzLAorICAgICAgICAgIHBlcmNlbnRhZ2UobVN0YXRzLm1Ub3RhbFRyYW5zZmVycyAtIG1TdGF0cy5tVG90YWxGZXRjaGVzLCBtU3RhdHMubVRvdGFsVHJhbnNmZXJzKSk7Cit9CisKK2Jvb2wgQWNjZXNzb3I6OkltcGw6OkJ1ZmZlclBvb2w6OmhhbmRsZU93bkJ1ZmZlcigKKyAgICAgICAgQ29ubmVjdGlvbklkIGNvbm5lY3Rpb25JZCwgQnVmZmVySWQgYnVmZmVySWQpIHsKKworICAgIGJvb2wgYWRkZWQgPSBpbnNlcnQoJm1Vc2luZ0J1ZmZlcnMsIGNvbm5lY3Rpb25JZCwgYnVmZmVySWQpOworICAgIGlmIChhZGRlZCkgeworICAgICAgICBhdXRvIGl0ZXIgPSBtQnVmZmVycy5maW5kKGJ1ZmZlcklkKTsKKyAgICAgICAgaXRlci0+c2Vjb25kLT5tT3duZXJDb3VudCsrOworICAgIH0KKyAgICBpbnNlcnQoJm1Vc2luZ0Nvbm5lY3Rpb25zLCBidWZmZXJJZCwgY29ubmVjdGlvbklkKTsKKyAgICByZXR1cm4gYWRkZWQ7Cit9CisKK2Jvb2wgQWNjZXNzb3I6OkltcGw6OkJ1ZmZlclBvb2w6OmhhbmRsZVJlbGVhc2VCdWZmZXIoCisgICAgICAgIENvbm5lY3Rpb25JZCBjb25uZWN0aW9uSWQsIEJ1ZmZlcklkIGJ1ZmZlcklkKSB7CisgICAgYm9vbCBkZWxldGVkID0gZXJhc2UoJm1Vc2luZ0J1ZmZlcnMsIGNvbm5lY3Rpb25JZCwgYnVmZmVySWQpOworICAgIGlmIChkZWxldGVkKSB7CisgICAgICAgIGF1dG8gaXRlciA9IG1CdWZmZXJzLmZpbmQoYnVmZmVySWQpOworICAgICAgICBpdGVyLT5zZWNvbmQtPm1Pd25lckNvdW50LS07CisgICAgICAgIGlmIChpdGVyLT5zZWNvbmQtPm1Pd25lckNvdW50ID09IDAgJiYKKyAgICAgICAgICAgICAgICBpdGVyLT5zZWNvbmQtPm1UcmFuc2FjdGlvbkNvdW50ID09IDApIHsKKyAgICAgICAgICAgIG1TdGF0cy5vbkJ1ZmZlclVudXNlZChpdGVyLT5zZWNvbmQtPm1BbGxvY1NpemUpOworICAgICAgICAgICAgbUZyZWVCdWZmZXJzLmluc2VydChidWZmZXJJZCk7CisgICAgICAgIH0KKyAgICB9CisgICAgZXJhc2UoJm1Vc2luZ0Nvbm5lY3Rpb25zLCBidWZmZXJJZCwgY29ubmVjdGlvbklkKTsKKyAgICBBTE9HVigicmVsZWFzZSBidWZmZXIgJXUgOiAlZCIsIGJ1ZmZlcklkLCBkZWxldGVkKTsKKyAgICByZXR1cm4gZGVsZXRlZDsKK30KKworYm9vbCBBY2Nlc3Nvcjo6SW1wbDo6QnVmZmVyUG9vbDo6aGFuZGxlVHJhbnNmZXJUbyhjb25zdCBCdWZmZXJTdGF0dXNNZXNzYWdlICZtZXNzYWdlKSB7CisgICAgYXV0byBjb21wbGV0ZWQgPSBtQ29tcGxldGVkVHJhbnNhY3Rpb25zLmZpbmQoCisgICAgICAgICAgICBtZXNzYWdlLnRyYW5zYWN0aW9uSWQpOworICAgIGlmIChjb21wbGV0ZWQgIT0gbUNvbXBsZXRlZFRyYW5zYWN0aW9ucy5lbmQoKSkgeworICAgICAgICAvLyBhbHJlYWR5IGNvbXBsZXRlZAorICAgICAgICBtQ29tcGxldGVkVHJhbnNhY3Rpb25zLmVyYXNlKGNvbXBsZXRlZCk7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyAgICAvLyB0aGUgYnVmZmVyIHNob3VsZCBleGlzdCBhbmQgYmUgb3duZWQuCisgICAgYXV0byBidWZmZXJJdGVyID0gbUJ1ZmZlcnMuZmluZChtZXNzYWdlLmJ1ZmZlcklkKTsKKyAgICBpZiAoYnVmZmVySXRlciA9PSBtQnVmZmVycy5lbmQoKSB8fAorICAgICAgICAgICAgIWNvbnRhaW5zKCZtVXNpbmdCdWZmZXJzLCBtZXNzYWdlLmNvbm5lY3Rpb25JZCwgbWVzc2FnZS5idWZmZXJJZCkpIHsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAgICBhdXRvIGZvdW5kID0gbVRyYW5zYWN0aW9ucy5maW5kKG1lc3NhZ2UudHJhbnNhY3Rpb25JZCk7CisgICAgaWYgKGZvdW5kICE9IG1UcmFuc2FjdGlvbnMuZW5kKCkpIHsKKyAgICAgICAgLy8gdHJhbnNmZXJfZnJvbSB3YXMgcmVjZWl2ZWQgZWFybGllci4KKyAgICAgICAgZm91bmQtPnNlY29uZC0+bVNlbmRlciA9IG1lc3NhZ2UuY29ubmVjdGlvbklkOworICAgICAgICBmb3VuZC0+c2Vjb25kLT5tU2VuZGVyVmFsaWRhdGVkID0gdHJ1ZTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorICAgIC8vIFRPRE86IHZlcmlmeSB0aGVyZSBpcyB0YXJnZXQgY29ubmVjdGlvbiBJZAorICAgIG1TdGF0cy5vbkJ1ZmZlclNlbnQoKTsKKyAgICBtVHJhbnNhY3Rpb25zLmluc2VydChzdGQ6Om1ha2VfcGFpcigKKyAgICAgICAgICAgIG1lc3NhZ2UudHJhbnNhY3Rpb25JZCwKKyAgICAgICAgICAgIHN0ZDo6bWFrZV91bmlxdWU8VHJhbnNhY3Rpb25TdGF0dXM+KG1lc3NhZ2UsIG1UaW1lc3RhbXBVcykpKTsKKyAgICBpbnNlcnQoJm1QZW5kaW5nVHJhbnNhY3Rpb25zLCBtZXNzYWdlLnRhcmdldENvbm5lY3Rpb25JZCwKKyAgICAgICAgICAgbWVzc2FnZS50cmFuc2FjdGlvbklkKTsKKyAgICBidWZmZXJJdGVyLT5zZWNvbmQtPm1UcmFuc2FjdGlvbkNvdW50Kys7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgQWNjZXNzb3I6OkltcGw6OkJ1ZmZlclBvb2w6OmhhbmRsZVRyYW5zZmVyRnJvbShjb25zdCBCdWZmZXJTdGF0dXNNZXNzYWdlICZtZXNzYWdlKSB7CisgICAgYXV0byBmb3VuZCA9IG1UcmFuc2FjdGlvbnMuZmluZChtZXNzYWdlLnRyYW5zYWN0aW9uSWQpOworICAgIGlmIChmb3VuZCA9PSBtVHJhbnNhY3Rpb25zLmVuZCgpKSB7CisgICAgICAgIC8vIFRPRE86IGlzIGl0IGZlYXNpYmxlIHRvIGNoZWNrIG93bmVyc2hpcCBoZXJlPworICAgICAgICBtU3RhdHMub25CdWZmZXJTZW50KCk7CisgICAgICAgIG1UcmFuc2FjdGlvbnMuaW5zZXJ0KHN0ZDo6bWFrZV9wYWlyKAorICAgICAgICAgICAgICAgIG1lc3NhZ2UudHJhbnNhY3Rpb25JZCwKKyAgICAgICAgICAgICAgICBzdGQ6Om1ha2VfdW5pcXVlPFRyYW5zYWN0aW9uU3RhdHVzPihtZXNzYWdlLCBtVGltZXN0YW1wVXMpKSk7CisgICAgICAgIGluc2VydCgmbVBlbmRpbmdUcmFuc2FjdGlvbnMsIG1lc3NhZ2UuY29ubmVjdGlvbklkLAorICAgICAgICAgICAgICAgbWVzc2FnZS50cmFuc2FjdGlvbklkKTsKKyAgICAgICAgYXV0byBidWZmZXJJdGVyID0gbUJ1ZmZlcnMuZmluZChtZXNzYWdlLmJ1ZmZlcklkKTsKKyAgICAgICAgYnVmZmVySXRlci0+c2Vjb25kLT5tVHJhbnNhY3Rpb25Db3VudCsrOworICAgIH0gZWxzZSB7CisgICAgICAgIGlmIChtZXNzYWdlLmNvbm5lY3Rpb25JZCA9PSBmb3VuZC0+c2Vjb25kLT5tUmVjZWl2ZXIpIHsKKyAgICAgICAgICAgIGZvdW5kLT5zZWNvbmQtPm1TdGF0dXMgPSBCdWZmZXJTdGF0dXM6OlRSQU5TRkVSX0ZST007CisgICAgICAgIH0KKyAgICB9CisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgQWNjZXNzb3I6OkltcGw6OkJ1ZmZlclBvb2w6OmhhbmRsZVRyYW5zZmVyUmVzdWx0KGNvbnN0IEJ1ZmZlclN0YXR1c01lc3NhZ2UgJm1lc3NhZ2UpIHsKKyAgICBhdXRvIGZvdW5kID0gbVRyYW5zYWN0aW9ucy5maW5kKG1lc3NhZ2UudHJhbnNhY3Rpb25JZCk7CisgICAgaWYgKGZvdW5kICE9IG1UcmFuc2FjdGlvbnMuZW5kKCkpIHsKKyAgICAgICAgYm9vbCBkZWxldGVkID0gZXJhc2UoJm1QZW5kaW5nVHJhbnNhY3Rpb25zLCBtZXNzYWdlLmNvbm5lY3Rpb25JZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZS50cmFuc2FjdGlvbklkKTsKKyAgICAgICAgaWYgKGRlbGV0ZWQpIHsKKyAgICAgICAgICAgIGlmICghZm91bmQtPnNlY29uZC0+bVNlbmRlclZhbGlkYXRlZCkgeworICAgICAgICAgICAgICAgIG1Db21wbGV0ZWRUcmFuc2FjdGlvbnMuaW5zZXJ0KG1lc3NhZ2UudHJhbnNhY3Rpb25JZCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBhdXRvIGJ1ZmZlckl0ZXIgPSBtQnVmZmVycy5maW5kKG1lc3NhZ2UuYnVmZmVySWQpOworICAgICAgICAgICAgaWYgKG1lc3NhZ2UubmV3U3RhdHVzID09IEJ1ZmZlclN0YXR1czo6VFJBTlNGRVJfT0spIHsKKyAgICAgICAgICAgICAgICBoYW5kbGVPd25CdWZmZXIobWVzc2FnZS5jb25uZWN0aW9uSWQsIG1lc3NhZ2UuYnVmZmVySWQpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgYnVmZmVySXRlci0+c2Vjb25kLT5tVHJhbnNhY3Rpb25Db3VudC0tOworICAgICAgICAgICAgaWYgKGJ1ZmZlckl0ZXItPnNlY29uZC0+bU93bmVyQ291bnQgPT0gMAorICAgICAgICAgICAgICAgICYmIGJ1ZmZlckl0ZXItPnNlY29uZC0+bVRyYW5zYWN0aW9uQ291bnQgPT0gMCkgeworICAgICAgICAgICAgICAgIG1TdGF0cy5vbkJ1ZmZlclVudXNlZChidWZmZXJJdGVyLT5zZWNvbmQtPm1BbGxvY1NpemUpOworICAgICAgICAgICAgICAgIG1GcmVlQnVmZmVycy5pbnNlcnQobWVzc2FnZS5idWZmZXJJZCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBtVHJhbnNhY3Rpb25zLmVyYXNlKGZvdW5kKTsKKyAgICAgICAgfQorICAgICAgICBBTE9HVigidHJhbnNmZXIgZmluaXNoZWQgJWxsdSAldSAtICVkIiwgKHVuc2lnbmVkIGxvbmcgbG9uZyltZXNzYWdlLnRyYW5zYWN0aW9uSWQsCisgICAgICAgICAgICAgIG1lc3NhZ2UuYnVmZmVySWQsIGRlbGV0ZWQpOworICAgICAgICByZXR1cm4gZGVsZXRlZDsKKyAgICB9CisgICAgQUxPR1YoInRyYW5zZmVyIG5vdCBmb3VuZCAlbGx1ICV1IiwgKHVuc2lnbmVkIGxvbmcgbG9uZyltZXNzYWdlLnRyYW5zYWN0aW9uSWQsCisgICAgICAgICAgbWVzc2FnZS5idWZmZXJJZCk7CisgICAgcmV0dXJuIGZhbHNlOworfQorCit2b2lkIEFjY2Vzc29yOjpJbXBsOjpCdWZmZXJQb29sOjpwcm9jZXNzU3RhdHVzTWVzc2FnZXMoKSB7CisgICAgc3RkOjp2ZWN0b3I8QnVmZmVyU3RhdHVzTWVzc2FnZT4gbWVzc2FnZXM7CisgICAgbU9ic2VydmVyLmdldEJ1ZmZlclN0YXR1c0NoYW5nZXMobWVzc2FnZXMpOworICAgIG1UaW1lc3RhbXBVcyA9IGdldFRpbWVzdGFtcE5vdygpOworICAgIGZvciAoQnVmZmVyU3RhdHVzTWVzc2FnZSYgbWVzc2FnZTogbWVzc2FnZXMpIHsKKyAgICAgICAgYm9vbCByZXQgPSBmYWxzZTsKKyAgICAgICAgc3dpdGNoIChtZXNzYWdlLm5ld1N0YXR1cykgeworICAgICAgICAgICAgY2FzZSBCdWZmZXJTdGF0dXM6Ok5PVF9VU0VEOgorICAgICAgICAgICAgICAgIHJldCA9IGhhbmRsZVJlbGVhc2VCdWZmZXIoCisgICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlLmNvbm5lY3Rpb25JZCwgbWVzc2FnZS5idWZmZXJJZCk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIEJ1ZmZlclN0YXR1czo6VVNFRDoKKyAgICAgICAgICAgICAgICAvLyBub3QgaGFwcGVuaW5nCisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIEJ1ZmZlclN0YXR1czo6VFJBTlNGRVJfVE86CisgICAgICAgICAgICAgICAgcmV0ID0gaGFuZGxlVHJhbnNmZXJUbyhtZXNzYWdlKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgQnVmZmVyU3RhdHVzOjpUUkFOU0ZFUl9GUk9NOgorICAgICAgICAgICAgICAgIHJldCA9IGhhbmRsZVRyYW5zZmVyRnJvbShtZXNzYWdlKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgQnVmZmVyU3RhdHVzOjpUUkFOU0ZFUl9USU1FT1VUOgorICAgICAgICAgICAgICAgIC8vIFRPRE8KKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgQnVmZmVyU3RhdHVzOjpUUkFOU0ZFUl9MT1NUOgorICAgICAgICAgICAgICAgIC8vIFRPRE8KKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgQnVmZmVyU3RhdHVzOjpUUkFOU0ZFUl9GRVRDSDoKKyAgICAgICAgICAgICAgICAvLyBub3QgaGFwcGVuaW5nCisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIEJ1ZmZlclN0YXR1czo6VFJBTlNGRVJfT0s6CisgICAgICAgICAgICBjYXNlIEJ1ZmZlclN0YXR1czo6VFJBTlNGRVJfRVJST1I6CisgICAgICAgICAgICAgICAgcmV0ID0gaGFuZGxlVHJhbnNmZXJSZXN1bHQobWVzc2FnZSk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgaWYgKHJldCA9PSBmYWxzZSkgeworICAgICAgICAgICAgQUxPR1coImJ1ZmZlciBzdGF0dXMgbWVzc2FnZSBwcm9jZXNzaW5nIGZhaWx1cmUgLSBtZXNzYWdlIDogJWQgY29ubmVjdGlvbiA6ICVsbGQiLAorICAgICAgICAgICAgICAgICAgbWVzc2FnZS5uZXdTdGF0dXMsIChsb25nIGxvbmcpbWVzc2FnZS5jb25uZWN0aW9uSWQpOworICAgICAgICB9CisgICAgfQorICAgIG1lc3NhZ2VzLmNsZWFyKCk7Cit9CisKK2Jvb2wgQWNjZXNzb3I6OkltcGw6OkJ1ZmZlclBvb2w6OmhhbmRsZUNsb3NlKENvbm5lY3Rpb25JZCBjb25uZWN0aW9uSWQpIHsKKyAgICAvLyBDbGVhbmluZyBidWZmZXJzCisgICAgYXV0byBidWZmZXJzID0gbVVzaW5nQnVmZmVycy5maW5kKGNvbm5lY3Rpb25JZCk7CisgICAgaWYgKGJ1ZmZlcnMgIT0gbVVzaW5nQnVmZmVycy5lbmQoKSkgeworICAgICAgICBmb3IgKGNvbnN0IEJ1ZmZlcklkJiBidWZmZXJJZCA6IGJ1ZmZlcnMtPnNlY29uZCkgeworICAgICAgICAgICAgYm9vbCBkZWxldGVkID0gZXJhc2UoJm1Vc2luZ0Nvbm5lY3Rpb25zLCBidWZmZXJJZCwgY29ubmVjdGlvbklkKTsKKyAgICAgICAgICAgIGlmIChkZWxldGVkKSB7CisgICAgICAgICAgICAgICAgYXV0byBidWZmZXJJdGVyID0gbUJ1ZmZlcnMuZmluZChidWZmZXJJZCk7CisgICAgICAgICAgICAgICAgYnVmZmVySXRlci0+c2Vjb25kLT5tT3duZXJDb3VudC0tOworICAgICAgICAgICAgICAgIGlmIChidWZmZXJJdGVyLT5zZWNvbmQtPm1Pd25lckNvdW50ID09IDAgJiYKKyAgICAgICAgICAgICAgICAgICAgICAgIGJ1ZmZlckl0ZXItPnNlY29uZC0+bVRyYW5zYWN0aW9uQ291bnQgPT0gMCkgeworICAgICAgICAgICAgICAgICAgICAvLyBUT0RPOiBoYW5kbGUgZnJlZWJ1ZmZlciBpbnNlcnQgZmFpbAorICAgICAgICAgICAgICAgICAgICBtU3RhdHMub25CdWZmZXJVbnVzZWQoYnVmZmVySXRlci0+c2Vjb25kLT5tQWxsb2NTaXplKTsKKyAgICAgICAgICAgICAgICAgICAgbUZyZWVCdWZmZXJzLmluc2VydChidWZmZXJJZCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIG1Vc2luZ0J1ZmZlcnMuZXJhc2UoYnVmZmVycyk7CisgICAgfQorCisgICAgLy8gQ2xlYW5pbmcgdHJhbnNhY3Rpb25zCisgICAgYXV0byBwZW5kaW5nID0gbVBlbmRpbmdUcmFuc2FjdGlvbnMuZmluZChjb25uZWN0aW9uSWQpOworICAgIGlmIChwZW5kaW5nICE9IG1QZW5kaW5nVHJhbnNhY3Rpb25zLmVuZCgpKSB7CisgICAgICAgIGZvciAoY29uc3QgVHJhbnNhY3Rpb25JZCYgdHJhbnNhY3Rpb25JZCA6IHBlbmRpbmctPnNlY29uZCkgeworICAgICAgICAgICAgYXV0byBpdGVyID0gbVRyYW5zYWN0aW9ucy5maW5kKHRyYW5zYWN0aW9uSWQpOworICAgICAgICAgICAgaWYgKGl0ZXIgIT0gbVRyYW5zYWN0aW9ucy5lbmQoKSkgeworICAgICAgICAgICAgICAgIGlmICghaXRlci0+c2Vjb25kLT5tU2VuZGVyVmFsaWRhdGVkKSB7CisgICAgICAgICAgICAgICAgICAgIG1Db21wbGV0ZWRUcmFuc2FjdGlvbnMuaW5zZXJ0KHRyYW5zYWN0aW9uSWQpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBCdWZmZXJJZCBidWZmZXJJZCA9IGl0ZXItPnNlY29uZC0+bUJ1ZmZlcklkOworICAgICAgICAgICAgICAgIGF1dG8gYnVmZmVySXRlciA9IG1CdWZmZXJzLmZpbmQoYnVmZmVySWQpOworICAgICAgICAgICAgICAgIGJ1ZmZlckl0ZXItPnNlY29uZC0+bVRyYW5zYWN0aW9uQ291bnQtLTsKKyAgICAgICAgICAgICAgICBpZiAoYnVmZmVySXRlci0+c2Vjb25kLT5tT3duZXJDb3VudCA9PSAwICYmCisgICAgICAgICAgICAgICAgICAgIGJ1ZmZlckl0ZXItPnNlY29uZC0+bVRyYW5zYWN0aW9uQ291bnQgPT0gMCkgeworICAgICAgICAgICAgICAgICAgICAvLyBUT0RPOiBoYW5kbGUgZnJlZWJ1ZmZlciBpbnNlcnQgZmFpbAorICAgICAgICAgICAgICAgICAgICBtU3RhdHMub25CdWZmZXJVbnVzZWQoYnVmZmVySXRlci0+c2Vjb25kLT5tQWxsb2NTaXplKTsKKyAgICAgICAgICAgICAgICAgICAgbUZyZWVCdWZmZXJzLmluc2VydChidWZmZXJJZCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIG1UcmFuc2FjdGlvbnMuZXJhc2UoaXRlcik7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgQWNjZXNzb3I6OkltcGw6OkJ1ZmZlclBvb2w6OmdldEZyZWVCdWZmZXIoCisgICAgICAgIGNvbnN0IHN0ZDo6c2hhcmVkX3B0cjxCdWZmZXJQb29sQWxsb2NhdG9yPiAmYWxsb2NhdG9yLAorICAgICAgICBjb25zdCBzdGQ6OnZlY3Rvcjx1aW50OF90PiAmcGFyYW1zLCBCdWZmZXJJZCAqcElkLAorICAgICAgICBjb25zdCBuYXRpdmVfaGFuZGxlX3QqKiBoYW5kbGUpIHsKKyAgICBhdXRvIGJ1ZmZlckl0ID0gbUZyZWVCdWZmZXJzLmJlZ2luKCk7CisgICAgZm9yICg7YnVmZmVySXQgIT0gbUZyZWVCdWZmZXJzLmVuZCgpOyArK2J1ZmZlckl0KSB7CisgICAgICAgIEJ1ZmZlcklkIGJ1ZmZlcklkID0gKmJ1ZmZlckl0OworICAgICAgICBpZiAoYWxsb2NhdG9yLT5jb21wYXRpYmxlKHBhcmFtcywgbUJ1ZmZlcnNbYnVmZmVySWRdLT5tQ29uZmlnKSkgeworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICB9CisgICAgaWYgKGJ1ZmZlckl0ICE9IG1GcmVlQnVmZmVycy5lbmQoKSkgeworICAgICAgICBCdWZmZXJJZCBpZCA9ICpidWZmZXJJdDsKKyAgICAgICAgbUZyZWVCdWZmZXJzLmVyYXNlKGJ1ZmZlckl0KTsKKyAgICAgICAgbVN0YXRzLm9uQnVmZmVyUmVjeWNsZWQobUJ1ZmZlcnNbaWRdLT5tQWxsb2NTaXplKTsKKyAgICAgICAgKmhhbmRsZSA9IG1CdWZmZXJzW2lkXS0+aGFuZGxlKCk7CisgICAgICAgICpwSWQgPSBpZDsKKyAgICAgICAgQUxPR1YoInJlY3ljbGUgYSBidWZmZXIgJXUgJXAiLCBpZCwgKmhhbmRsZSk7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK1Jlc3VsdFN0YXR1cyBBY2Nlc3Nvcjo6SW1wbDo6QnVmZmVyUG9vbDo6YWRkTmV3QnVmZmVyKAorICAgICAgICBjb25zdCBzdGQ6OnNoYXJlZF9wdHI8QnVmZmVyUG9vbEFsbG9jYXRpb24+ICZhbGxvYywKKyAgICAgICAgY29uc3Qgc2l6ZV90IGFsbG9jU2l6ZSwKKyAgICAgICAgY29uc3Qgc3RkOjp2ZWN0b3I8dWludDhfdD4gJnBhcmFtcywKKyAgICAgICAgQnVmZmVySWQgKnBJZCwKKyAgICAgICAgY29uc3QgbmF0aXZlX2hhbmRsZV90KiogaGFuZGxlKSB7CisKKyAgICBCdWZmZXJJZCBidWZmZXJJZCA9IG1TZXErKzsKKyAgICBpZiAobVNlcSA9PSBDb25uZWN0aW9uOjpTWU5DX0JVRkZFUklEKSB7CisgICAgICAgIG1TZXEgPSAwOworICAgIH0KKyAgICBzdGQ6OnVuaXF1ZV9wdHI8SW50ZXJuYWxCdWZmZXI+IGJ1ZmZlciA9CisgICAgICAgICAgICBzdGQ6Om1ha2VfdW5pcXVlPEludGVybmFsQnVmZmVyPigKKyAgICAgICAgICAgICAgICAgICAgYnVmZmVySWQsIGFsbG9jLCBhbGxvY1NpemUsIHBhcmFtcyk7CisgICAgaWYgKGJ1ZmZlcikgeworICAgICAgICBhdXRvIHJlcyA9IG1CdWZmZXJzLmluc2VydChzdGQ6Om1ha2VfcGFpcigKKyAgICAgICAgICAgICAgICBidWZmZXJJZCwgc3RkOjptb3ZlKGJ1ZmZlcikpKTsKKyAgICAgICAgaWYgKHJlcy5zZWNvbmQpIHsKKyAgICAgICAgICAgIG1TdGF0cy5vbkJ1ZmZlckFsbG9jYXRlZChhbGxvY1NpemUpOworICAgICAgICAgICAgKmhhbmRsZSA9IGFsbG9jLT5oYW5kbGUoKTsKKyAgICAgICAgICAgICpwSWQgPSBidWZmZXJJZDsKKyAgICAgICAgICAgIHJldHVybiBSZXN1bHRTdGF0dXM6Ok9LOworICAgICAgICB9CisgICAgfQorICAgIHJldHVybiBSZXN1bHRTdGF0dXM6Ok5PX01FTU9SWTsKK30KKwordm9pZCBBY2Nlc3Nvcjo6SW1wbDo6QnVmZmVyUG9vbDo6Y2xlYW5VcChib29sIGNsZWFyQ2FjaGUpIHsKKyAgICBpZiAoY2xlYXJDYWNoZSB8fCBtVGltZXN0YW1wVXMgPiBtTGFzdENsZWFuVXBVcyArIGtDbGVhblVwRHVyYXRpb25VcykgeworICAgICAgICBtTGFzdENsZWFuVXBVcyA9IG1UaW1lc3RhbXBVczsKKyAgICAgICAgaWYgKG1UaW1lc3RhbXBVcyA+IG1MYXN0TG9nVXMgKyBrTG9nRHVyYXRpb25VcykgeworICAgICAgICAgICAgbUxhc3RMb2dVcyA9IG1UaW1lc3RhbXBVczsKKyAgICAgICAgICAgIEFMT0dEKCJidWZmZXJwb29sICVwIDogJXp1KCV6dSBzaXplKSB0b3RhbCBidWZmZXJzIC0gIgorICAgICAgICAgICAgICAgICAgIiV6dSglenUgc2l6ZSkgdXNlZCBidWZmZXJzIC0gJXp1LyV6dSAocmVjeWNsZS9hbGxvYykgLSAiCisgICAgICAgICAgICAgICAgICAiJXp1LyV6dSAoZmV0Y2gvdHJhbnNmZXIpIiwKKyAgICAgICAgICAgICAgICAgIHRoaXMsIG1TdGF0cy5tQnVmZmVyc0NhY2hlZCwgbVN0YXRzLm1TaXplQ2FjaGVkLAorICAgICAgICAgICAgICAgICAgbVN0YXRzLm1CdWZmZXJzSW5Vc2UsIG1TdGF0cy5tU2l6ZUluVXNlLAorICAgICAgICAgICAgICAgICAgbVN0YXRzLm1Ub3RhbFJlY3ljbGVzLCBtU3RhdHMubVRvdGFsQWxsb2NhdGlvbnMsCisgICAgICAgICAgICAgICAgICBtU3RhdHMubVRvdGFsRmV0Y2hlcywgbVN0YXRzLm1Ub3RhbFRyYW5zZmVycyk7CisgICAgICAgIH0KKyAgICAgICAgZm9yIChhdXRvIGZyZWVJdCA9IG1GcmVlQnVmZmVycy5iZWdpbigpOyBmcmVlSXQgIT0gbUZyZWVCdWZmZXJzLmVuZCgpOykgeworICAgICAgICAgICAgaWYgKCFjbGVhckNhY2hlICYmIG1TdGF0cy5tU2l6ZUNhY2hlZCA8IGtNaW5BbGxvY0J5dGVzRm9yRXZpY3Rpb24KKyAgICAgICAgICAgICAgICAgICAgJiYgbUJ1ZmZlcnMuc2l6ZSgpIDwga01pbkJ1ZmZlckNvdW50Rm9yRXZpY3Rpb24pIHsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGF1dG8gaXQgPSBtQnVmZmVycy5maW5kKCpmcmVlSXQpOworICAgICAgICAgICAgaWYgKGl0ICE9IG1CdWZmZXJzLmVuZCgpICYmCisgICAgICAgICAgICAgICAgICAgIGl0LT5zZWNvbmQtPm1Pd25lckNvdW50ID09IDAgJiYgaXQtPnNlY29uZC0+bVRyYW5zYWN0aW9uQ291bnQgPT0gMCkgeworICAgICAgICAgICAgICAgIG1TdGF0cy5vbkJ1ZmZlckV2aWN0ZWQoaXQtPnNlY29uZC0+bUFsbG9jU2l6ZSk7CisgICAgICAgICAgICAgICAgbUJ1ZmZlcnMuZXJhc2UoaXQpOworICAgICAgICAgICAgICAgIGZyZWVJdCA9IG1GcmVlQnVmZmVycy5lcmFzZShmcmVlSXQpOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICArK2ZyZWVJdDsKKyAgICAgICAgICAgICAgICBBTE9HVygiYnVmZmVycG9vbCBpbmNvbnNpc3RlbnQhIik7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9Cit9CisKK30gIC8vIG5hbWVzcGFjZSBpbXBsZW1lbnRhdGlvbgorfSAgLy8gbmFtZXNwYWNlIFYxXzAKK30gIC8vIG5hbWVzcGFjZSBidWZmZXJwb29sCit9ICAvLyBuYW1lc3BhY2UgbWVkaWEKK30gIC8vIG5hbWVzcGFjZSBoYXJkd2FyZQorfSAgLy8gbmFtZXNwYWNlIGFuZHJvaWQKZGlmZiAtLWdpdCBhL21lZGlhL2J1ZmZlcnBvb2wvMS4wL0FjY2Vzc29ySW1wbC5oIGIvbWVkaWEvYnVmZmVycG9vbC8xLjAvQWNjZXNzb3JJbXBsLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzA0ZGJmMwotLS0gL2Rldi9udWxsCisrKyBiL21lZGlhL2J1ZmZlcnBvb2wvMS4wL0FjY2Vzc29ySW1wbC5oCkBAIC0wLDAgKzEsMzAwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE4IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KKworI2lmbmRlZiBBTkRST0lEX0hBUkRXQVJFX01FRElBX0JVRkZFUlBPT0xfVjFfMF9BQ0NFU1NPUklNUExfSAorI2RlZmluZSBBTkRST0lEX0hBUkRXQVJFX01FRElBX0JVRkZFUlBPT0xfVjFfMF9BQ0NFU1NPUklNUExfSAorCisjaW5jbHVkZSA8bWFwPgorI2luY2x1ZGUgPHNldD4KKyNpbmNsdWRlICJBY2Nlc3Nvci5oIgorCituYW1lc3BhY2UgYW5kcm9pZCB7CituYW1lc3BhY2UgaGFyZHdhcmUgeworbmFtZXNwYWNlIG1lZGlhIHsKK25hbWVzcGFjZSBidWZmZXJwb29sIHsKK25hbWVzcGFjZSBWMV8wIHsKK25hbWVzcGFjZSBpbXBsZW1lbnRhdGlvbiB7CisKK3N0cnVjdCBJbnRlcm5hbEJ1ZmZlcjsKK3N0cnVjdCBUcmFuc2FjdGlvblN0YXR1czsKKworLyoqCisgKiBBbiBpbXBsZW1lbnRhdGlvbiBvZiBhIGJ1ZmZlciBwb29sIGFjY2Vzc29yKG9yIGEgYnVmZmVyIHBvb2wgaW1wbGVtZW50YXRpb24uKSAqLworY2xhc3MgQWNjZXNzb3I6OkltcGwgeworcHVibGljOgorICAgIEltcGwoY29uc3Qgc3RkOjpzaGFyZWRfcHRyPEJ1ZmZlclBvb2xBbGxvY2F0b3I+ICZhbGxvY2F0b3IpOworCisgICAgfkltcGwoKTsKKworICAgIFJlc3VsdFN0YXR1cyBjb25uZWN0KAorICAgICAgICAgICAgY29uc3Qgc3A8QWNjZXNzb3I+ICZhY2Nlc3Nvciwgc3A8Q29ubmVjdGlvbj4gKmNvbm5lY3Rpb24sCisgICAgICAgICAgICBDb25uZWN0aW9uSWQgKnBDb25uZWN0aW9uSWQsIGNvbnN0IFF1ZXVlRGVzY3JpcHRvcioqIGZtcURlc2NQdHIpOworCisgICAgUmVzdWx0U3RhdHVzIGNsb3NlKENvbm5lY3Rpb25JZCBjb25uZWN0aW9uSWQpOworCisgICAgUmVzdWx0U3RhdHVzIGFsbG9jYXRlKENvbm5lY3Rpb25JZCBjb25uZWN0aW9uSWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0ZDo6dmVjdG9yPHVpbnQ4X3Q+JiBwYXJhbXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgIEJ1ZmZlcklkICpidWZmZXJJZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgbmF0aXZlX2hhbmRsZV90KiogaGFuZGxlKTsKKworICAgIFJlc3VsdFN0YXR1cyBmZXRjaChDb25uZWN0aW9uSWQgY29ubmVjdGlvbklkLAorICAgICAgICAgICAgICAgICAgICAgICBUcmFuc2FjdGlvbklkIHRyYW5zYWN0aW9uSWQsCisgICAgICAgICAgICAgICAgICAgICAgIEJ1ZmZlcklkIGJ1ZmZlcklkLAorICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBuYXRpdmVfaGFuZGxlX3QqKiBoYW5kbGUpOworCisgICAgdm9pZCBjbGVhblVwKGJvb2wgY2xlYXJDYWNoZSk7CisKK3ByaXZhdGU6CisgICAgLy8gQ29ubmVjdGlvbklkID0gcGlkIDogKHRpbWVzdGFtcF9jcmVhdGVkICsgc2VxSWQpCisgICAgLy8gaW4gb3JkZXIgdG8gZ3VhcmFudGVlIHVuaXF1ZW5lc3MgZm9yIGVhY2ggY29ubmVjdGlvbgorICAgIHN0YXRpYyB1aW50MzJfdCBzU2VxSWQ7CisgICAgc3RhdGljIGludDMyX3Qgc1BpZDsKKworICAgIGNvbnN0IHN0ZDo6c2hhcmVkX3B0cjxCdWZmZXJQb29sQWxsb2NhdG9yPiBtQWxsb2NhdG9yOworCisgICAgLyoqCisgICAgICogQnVmZmVyIHBvb2wgaW1wbGVtZW50YXRpb24uCisgICAgICoKKyAgICAgKiBIYW5kbGVzIGJ1ZmZlciBzdGF0dXMgbWVzc2FnZXMuIEhhbmRsZXMgYnVmZmVyIGFsbG9jYXRpb24vcmVjeWNsaW5nLgorICAgICAqIEhhbmRsZXMgYnVmZmVyIHRyYW5zZmVyIGJldHdlZW4gYnVmZmVyIHBvb2wgY2xpZW50cy4KKyAgICAgKi8KKyAgICBzdHJ1Y3QgQnVmZmVyUG9vbCB7CisgICAgcHJpdmF0ZToKKyAgICAgICAgc3RkOjptdXRleCBtTXV0ZXg7CisgICAgICAgIGludDY0X3QgbVRpbWVzdGFtcFVzOworICAgICAgICBpbnQ2NF90IG1MYXN0Q2xlYW5VcFVzOworICAgICAgICBpbnQ2NF90IG1MYXN0TG9nVXM7CisgICAgICAgIEJ1ZmZlcklkIG1TZXE7CisgICAgICAgIEJ1ZmZlclN0YXR1c09ic2VydmVyIG1PYnNlcnZlcjsKKworICAgICAgICBzdGQ6Om1hcDxDb25uZWN0aW9uSWQsIHN0ZDo6c2V0PEJ1ZmZlcklkPj4gbVVzaW5nQnVmZmVyczsKKyAgICAgICAgc3RkOjptYXA8QnVmZmVySWQsIHN0ZDo6c2V0PENvbm5lY3Rpb25JZD4+IG1Vc2luZ0Nvbm5lY3Rpb25zOworCisgICAgICAgIHN0ZDo6bWFwPENvbm5lY3Rpb25JZCwgc3RkOjpzZXQ8VHJhbnNhY3Rpb25JZD4+IG1QZW5kaW5nVHJhbnNhY3Rpb25zOworICAgICAgICAvLyBUcmFuc2FjdGlvbnMgY29tcGxldGVkIGJlZm9yZSBUUkFOU0ZFUl9UTyBtZXNzYWdlIGFycml2YWwuCisgICAgICAgIC8vIEZldGNoIGRvZXMgbm90IG9jY3VyIGZvciB0aGUgdHJhbnNhY3Rpb25zLgorICAgICAgICAvLyBPbmx5IHRyYW5zYWN0aW9uIGlkIGlzIGtlcHQgZm9yIHRoZSB0cmFuc2FjdGlvbnMgaW4gc2hvcnQgZHVyYXRpb24uCisgICAgICAgIHN0ZDo6c2V0PFRyYW5zYWN0aW9uSWQ+IG1Db21wbGV0ZWRUcmFuc2FjdGlvbnM7CisgICAgICAgIC8vIEN1cnJlbnRseSBhY3RpdmUocGVuZGluZykgdHJhbnNhdGlvbnMnIHN0YXR1cyAmIGluZm9ybWF0aW9uLgorICAgICAgICBzdGQ6Om1hcDxUcmFuc2FjdGlvbklkLCBzdGQ6OnVuaXF1ZV9wdHI8VHJhbnNhY3Rpb25TdGF0dXM+PgorICAgICAgICAgICAgICAgIG1UcmFuc2FjdGlvbnM7CisKKyAgICAgICAgc3RkOjptYXA8QnVmZmVySWQsIHN0ZDo6dW5pcXVlX3B0cjxJbnRlcm5hbEJ1ZmZlcj4+IG1CdWZmZXJzOworICAgICAgICBzdGQ6OnNldDxCdWZmZXJJZD4gbUZyZWVCdWZmZXJzOworCisgICAgICAgIC8vLyBCdWZmZXIgcG9vbCBzdGF0aXN0aWNzIHdoaWNoIHRyYWNrcyBhbGxvY2F0aW9uIGFuZCB0cmFuc2ZlciBzdGF0aXN0aWNzLgorICAgICAgICBzdHJ1Y3QgU3RhdHMgeworICAgICAgICAgICAgLy8vIFRvdGFsIHNpemUgb2YgYWxsb2NhdGlvbnMgd2hpY2ggYXJlIHVzZWQgb3IgYXZhaWxhYmxlIHRvIHVzZS4KKyAgICAgICAgICAgIC8vLyAoYnl0ZXMgb3IgcGl4ZWxzKQorICAgICAgICAgICAgc2l6ZV90IG1TaXplQ2FjaGVkOworICAgICAgICAgICAgLy8vICMgb2YgY2FjaGVkIGJ1ZmZlcnMgd2hpY2ggYXJlIHVzZWQgb3IgYXZhaWxhYmxlIHRvIHVzZS4KKyAgICAgICAgICAgIHNpemVfdCBtQnVmZmVyc0NhY2hlZDsKKyAgICAgICAgICAgIC8vLyBUb3RhbCBzaXplIG9mIGFsbG9jYXRpb25zIHdoaWNoIGFyZSBjdXJyZW50bHkgdXNlZC4gKGJ5dGVzIG9yIHBpeGVscykKKyAgICAgICAgICAgIHNpemVfdCBtU2l6ZUluVXNlOworICAgICAgICAgICAgLy8vICMgb2YgY3VycmVudGx5IHVzZWQgYnVmZmVycworICAgICAgICAgICAgc2l6ZV90IG1CdWZmZXJzSW5Vc2U7CisKKyAgICAgICAgICAgIC8vLyAjIG9mIGFsbG9jYXRpb25zIGNhbGxlZCBvbiBidWZmZXJwb29sLiAoIyBvZiBmZXRjaGVkIGZyb20gQmxvY2tQb29sKQorICAgICAgICAgICAgc2l6ZV90IG1Ub3RhbEFsbG9jYXRpb25zOworICAgICAgICAgICAgLy8vICMgb2YgYWxsb2NhdGlvbnMgdGhhdCB3ZXJlIHNlcnZlZCBmcm9tIHRoZSBjYWNoZS4KKyAgICAgICAgICAgIC8vLyAoIyBvZiBhbGxvY2F0b3IgYWxsb2MgcHJldmVudGVkKQorICAgICAgICAgICAgc2l6ZV90IG1Ub3RhbFJlY3ljbGVzOworICAgICAgICAgICAgLy8vICMgb2YgYnVmZmVyIHRyYW5zZmVycyBpbml0aWF0ZWQuCisgICAgICAgICAgICBzaXplX3QgbVRvdGFsVHJhbnNmZXJzOworICAgICAgICAgICAgLy8vICMgb2YgdHJhbnNmZXJzIHRoYXQgaGFkIHRvIGJlIGZldGNoZWQuCisgICAgICAgICAgICBzaXplX3QgbVRvdGFsRmV0Y2hlczsKKworICAgICAgICAgICAgU3RhdHMoKQorICAgICAgICAgICAgICAgIDogbVNpemVDYWNoZWQoMCksIG1CdWZmZXJzQ2FjaGVkKDApLCBtU2l6ZUluVXNlKDApLCBtQnVmZmVyc0luVXNlKDApLAorICAgICAgICAgICAgICAgICAgbVRvdGFsQWxsb2NhdGlvbnMoMCksIG1Ub3RhbFJlY3ljbGVzKDApLCBtVG90YWxUcmFuc2ZlcnMoMCksIG1Ub3RhbEZldGNoZXMoMCkge30KKworICAgICAgICAgICAgLy8vIEEgbmV3IGJ1ZmZlciBpcyBhbGxvY2F0ZWQgb24gYW4gYWxsb2NhdGlvbiByZXF1ZXN0LgorICAgICAgICAgICAgdm9pZCBvbkJ1ZmZlckFsbG9jYXRlZChzaXplX3QgYWxsb2NTaXplKSB7CisgICAgICAgICAgICAgICAgbVNpemVDYWNoZWQgKz0gYWxsb2NTaXplOworICAgICAgICAgICAgICAgIG1CdWZmZXJzQ2FjaGVkKys7CisKKyAgICAgICAgICAgICAgICBtU2l6ZUluVXNlICs9IGFsbG9jU2l6ZTsKKyAgICAgICAgICAgICAgICBtQnVmZmVyc0luVXNlKys7CisKKyAgICAgICAgICAgICAgICBtVG90YWxBbGxvY2F0aW9ucysrOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICAvLy8gQSBidWZmZXIgaXMgZXZpY3RlZCBhbmQgZGVzdHJveWVkLgorICAgICAgICAgICAgdm9pZCBvbkJ1ZmZlckV2aWN0ZWQoc2l6ZV90IGFsbG9jU2l6ZSkgeworICAgICAgICAgICAgICAgIG1TaXplQ2FjaGVkIC09IGFsbG9jU2l6ZTsKKyAgICAgICAgICAgICAgICBtQnVmZmVyc0NhY2hlZC0tOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICAvLy8gQSBidWZmZXIgaXMgcmVjeWNsZWQgb24gYW4gYWxsb2NhdGlvbiByZXF1ZXN0LgorICAgICAgICAgICAgdm9pZCBvbkJ1ZmZlclJlY3ljbGVkKHNpemVfdCBhbGxvY1NpemUpIHsKKyAgICAgICAgICAgICAgICBtU2l6ZUluVXNlICs9IGFsbG9jU2l6ZTsKKyAgICAgICAgICAgICAgICBtQnVmZmVyc0luVXNlKys7CisKKyAgICAgICAgICAgICAgICBtVG90YWxBbGxvY2F0aW9ucysrOworICAgICAgICAgICAgICAgIG1Ub3RhbFJlY3ljbGVzKys7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIC8vLyBBIGJ1ZmZlciBpcyBhdmFpbGFibGUgdG8gYmUgcmVjeWNsZWQuCisgICAgICAgICAgICB2b2lkIG9uQnVmZmVyVW51c2VkKHNpemVfdCBhbGxvY1NpemUpIHsKKyAgICAgICAgICAgICAgICBtU2l6ZUluVXNlIC09IGFsbG9jU2l6ZTsKKyAgICAgICAgICAgICAgICBtQnVmZmVyc0luVXNlLS07CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIC8vLyBBIGJ1ZmZlciB0cmFuc2ZlciBpcyBpbml0aWF0ZWQuCisgICAgICAgICAgICB2b2lkIG9uQnVmZmVyU2VudCgpIHsKKyAgICAgICAgICAgICAgICBtVG90YWxUcmFuc2ZlcnMrKzsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgLy8vIEEgYnVmZmVyIGZldGNoIGlzIGludm9rZWQgYnkgYSBidWZmZXIgdHJhbnNmZXIuCisgICAgICAgICAgICB2b2lkIG9uQnVmZmVyRmV0Y2hlZCgpIHsKKyAgICAgICAgICAgICAgICBtVG90YWxGZXRjaGVzKys7CisgICAgICAgICAgICB9CisgICAgICAgIH0gbVN0YXRzOworCisgICAgcHVibGljOgorICAgICAgICAvKiogQ3JlYXRlcyBhIGJ1ZmZlciBwb29sLiAqLworICAgICAgICBCdWZmZXJQb29sKCk7CisKKyAgICAgICAgLyoqIERlc3Ryb3lzIGEgYnVmZmVyIHBvb2wuICovCisgICAgICAgIH5CdWZmZXJQb29sKCk7CisKKyAgICAgICAgLyoqCisgICAgICAgICAqIFByb2Nlc3NlcyBhbGwgcGVuZGluZyBidWZmZXIgc3RhdHVzIG1lc3NhZ2VzLCBhbmQgcmV0dXJucyB0aGUgcmVzdWx0LgorICAgICAgICAgKiBFYWNoIHN0YXR1cyBtZXNzYWdlIGlzIGhhbmRsZWQgYnkgbWV0aG9kcyB3aXRoICdoYW5kbGUnIHByZWZpeC4KKyAgICAgICAgICovCisgICAgICAgIHZvaWQgcHJvY2Vzc1N0YXR1c01lc3NhZ2VzKCk7CisKKyAgICAgICAgLyoqCisgICAgICAgICAqIEhhbmRsZXMgYSBidWZmZXIgYmVpbmcgb3duZWQgYnkgYSBjb25uZWN0aW9uLgorICAgICAgICAgKgorICAgICAgICAgKiBAcGFyYW0gY29ubmVjdGlvbklkICB0aGUgaWQgb2YgdGhlIGJ1ZmZlciBvd25pbmcgY29ubmVjdGlvbi4KKyAgICAgICAgICogQHBhcmFtIGJ1ZmZlcklkICAgICAgdGhlIGlkIG9mIHRoZSBidWZmZXIuCisgICAgICAgICAqCisgICAgICAgICAqIEByZXR1cm4ge0Bjb2RlIHRydWV9IHdoZW4gdGhlIGJ1ZmZlciBpcyBvd25lZCwKKyAgICAgICAgICogICAgICAgICB7QGNvZGUgZmFsc2V9IG90aGVyd2lzZS4KKyAgICAgICAgICovCisgICAgICAgIGJvb2wgaGFuZGxlT3duQnVmZmVyKENvbm5lY3Rpb25JZCBjb25uZWN0aW9uSWQsIEJ1ZmZlcklkIGJ1ZmZlcklkKTsKKworICAgICAgICAvKioKKyAgICAgICAgICogSGFuZGxlcyBhIGJ1ZmZlciBiZWluZyByZWxlYXNlZCBieSBhIGNvbm5lY3Rpb24uCisgICAgICAgICAqCisgICAgICAgICAqIEBwYXJhbSBjb25uZWN0aW9uSWQgIHRoZSBpZCBvZiB0aGUgYnVmZmVyIG93bmluZyBjb25uZWN0aW9uLgorICAgICAgICAgKiBAcGFyYW0gYnVmZmVySWQgICAgICB0aGUgaWQgb2YgdGhlIGJ1ZmZlci4KKyAgICAgICAgICoKKyAgICAgICAgICogQHJldHVybiB7QGNvZGUgdHJ1ZX0gd2hlbiB0aGUgYnVmZmVyIG93bmVyc2hpcCBpcyByZWxlYXNlZCwKKyAgICAgICAgICogICAgICAgICB7QGNvZGUgZmFsc2V9IG90aGVyd2lzZS4KKyAgICAgICAgICovCisgICAgICAgIGJvb2wgaGFuZGxlUmVsZWFzZUJ1ZmZlcihDb25uZWN0aW9uSWQgY29ubmVjdGlvbklkLCBCdWZmZXJJZCBidWZmZXJJZCk7CisKKyAgICAgICAgLyoqCisgICAgICAgICAqIEhhbmRsZXMgYSB0cmFuc2ZlciB0cmFuc2FjdGlvbiBzdGFydCBtZXNzYWdlIGZyb20gdGhlIHNlbmRlci4KKyAgICAgICAgICoKKyAgICAgICAgICogQHBhcmFtIG1lc3NhZ2UgICBhIGJ1ZmZlciBzdGF0dXMgbWVzc2FnZSBmb3IgdGhlIHRyYW5zYWN0aW9uLgorICAgICAgICAgKgorICAgICAgICAgKiBAcmVzdWx0IHtAY29kZSB0cnVlfSB3aGVuIHRyYW5zZmVyX3RvIG1lc3NhZ2UgaXMgYWNrbm93bGVkZ2VkLAorICAgICAgICAgKiAgICAgICAgIHtAY29kZSBmYWxzZX0gb3RoZXJ3aXNlLgorICAgICAgICAgKi8KKyAgICAgICAgYm9vbCBoYW5kbGVUcmFuc2ZlclRvKGNvbnN0IEJ1ZmZlclN0YXR1c01lc3NhZ2UgJm1lc3NhZ2UpOworCisgICAgICAgIC8qKgorICAgICAgICAgKiBIYW5kbGVzIGEgdHJhbnNmZXIgdHJhbnNhY3Rpb24gYmVpbmcgYWNrZWQgYnkgdGhlIHJlY2VpdmVyLgorICAgICAgICAgKgorICAgICAgICAgKiBAcGFyYW0gbWVzc2FnZSAgIGEgYnVmZmVyIHN0YXR1cyBtZXNzYWdlIGZvciB0aGUgdHJhbnNhY3Rpb24uCisgICAgICAgICAqCisgICAgICAgICAqIEByZXN1bHQge0Bjb2RlIHRydWV9IHdoZW4gdHJhbnNmZXJfZnJvbSBtZXNzYWdlIGlzIGFja25vd2xlZGdlZCwKKyAgICAgICAgICogICAgICAgICB7QGNvZGUgZmFsc2V9IG90aGVyd2lzZS4KKyAgICAgICAgICovCisgICAgICAgIGJvb2wgaGFuZGxlVHJhbnNmZXJGcm9tKGNvbnN0IEJ1ZmZlclN0YXR1c01lc3NhZ2UgJm1lc3NhZ2UpOworCisgICAgICAgIC8qKgorICAgICAgICAgKiBIYW5kbGVzIGEgdHJhbnNmZXIgdHJhbnNhY3Rpb24gcmVzdWx0IG1lc3NhZ2UgZnJvbSB0aGUgcmVjZWl2ZXIuCisgICAgICAgICAqCisgICAgICAgICAqIEBwYXJhbSBtZXNzYWdlICAgYSBidWZmZXIgc3RhdHVzIG1lc3NhZ2UgZm9yIHRoZSB0cmFuc2FjdGlvbi4KKyAgICAgICAgICoKKyAgICAgICAgICogQHJlc3VsdCB7QGNvZGUgdHJ1ZX0gd2hlbiB0aGUgZXhpc2l0bmcgdHJhbnNhY3Rpb24gaXMgZmluaXNoZWQsCisgICAgICAgICAqICAgICAgICAge0Bjb2RlIGZhbHNlfSBvdGhlcndpc2UuCisgICAgICAgICAqLworICAgICAgICBib29sIGhhbmRsZVRyYW5zZmVyUmVzdWx0KGNvbnN0IEJ1ZmZlclN0YXR1c01lc3NhZ2UgJm1lc3NhZ2UpOworCisgICAgICAgIC8qKgorICAgICAgICAgKiBIYW5kbGVzIGEgY29ubmVjdGlvbiBiZWluZyBjbG9zZWQsIGFuZCByZXR1cm5zIHRoZSByZXN1bHQuIEFsbCB0aGUKKyAgICAgICAgICogYnVmZmVycyBhbmQgdHJhbnNhY3Rpb25zIG93bmVkIGJ5IHRoZSBjb25uZWN0aW9uIHdpbGwgYmUgY2xlYW5lZCB1cC4KKyAgICAgICAgICogVGhlIHJlbGF0ZWQgRk1RIHdpbGwgYmUgY2xlYW5lZCB1cCB0b28uCisgICAgICAgICAqCisgICAgICAgICAqIEBwYXJhbSBjb25uZWN0aW9uSWQgIHRoZSBpZCBvZiB0aGUgY29ubmVjdGlvbi4KKyAgICAgICAgICoKKyAgICAgICAgICogQHJlc3VsdCB7QGNvZGUgdHJ1ZX0gd2hlbiB0aGUgY29ubmVjdGlvbiBleGlzdGVkLAorICAgICAgICAgKiAgICAgICAgIHtAY29kZSBmYWxzZX0gb3RoZXJ3aXNlLgorICAgICAgICAgKi8KKyAgICAgICAgYm9vbCBoYW5kbGVDbG9zZShDb25uZWN0aW9uSWQgY29ubmVjdGlvbklkKTsKKworICAgICAgICAvKioKKyAgICAgICAgICogUmVjeWNsZXMgYSBleGlzdGluZyBmcmVlIGJ1ZmZlciBpZiBpdCBpcyBwb3NzaWJsZS4KKyAgICAgICAgICoKKyAgICAgICAgICogQHBhcmFtIGFsbG9jYXRvciB0aGUgYnVmZmVyIGFsbG9jYXRvcgorICAgICAgICAgKiBAcGFyYW0gcGFyYW1zICAgIHRoZSBhbGxvY2F0aW9uIHBhcmFtZXRlcnMuCisgICAgICAgICAqIEBwYXJhbSBwSWQgICAgICAgdGhlIGlkIG9mIHRoZSByZWN5Y2xlZCBidWZmZXIuCisgICAgICAgICAqIEBwYXJhbSBoYW5kbGUgICAgdGhlIG5hdGl2ZSBoYW5kbGUgb2YgdGhlIHJlY3ljbGVkIGJ1ZmZlci4KKyAgICAgICAgICoKKyAgICAgICAgICogQHJldHVybiB7QGNvZGUgdHJ1ZX0gd2hlbiBhIGJ1ZmZlciBpcyByZWN5Y2xlZCwge0Bjb2RlIGZhbHNlfQorICAgICAgICAgKiAgICAgICAgIG90aGVyd2lzZS4KKyAgICAgICAgICovCisgICAgICAgIGJvb2wgZ2V0RnJlZUJ1ZmZlcigKKyAgICAgICAgICAgICAgICBjb25zdCBzdGQ6OnNoYXJlZF9wdHI8QnVmZmVyUG9vbEFsbG9jYXRvcj4gJmFsbG9jYXRvciwKKyAgICAgICAgICAgICAgICBjb25zdCBzdGQ6OnZlY3Rvcjx1aW50OF90PiAmcGFyYW1zLAorICAgICAgICAgICAgICAgIEJ1ZmZlcklkICpwSWQsIGNvbnN0IG5hdGl2ZV9oYW5kbGVfdCAqKmhhbmRsZSk7CisKKyAgICAgICAgLyoqCisgICAgICAgICAqIEFkZHMgYSBuZXdseSBhbGxvY2F0ZWQgYnVmZmVyIHRvIGJ1ZmZlcnBvb2wuCisgICAgICAgICAqCisgICAgICAgICAqIEBwYXJhbSBhbGxvYyAgICAgdGhlIG5ld2x5IGFsbG9jYXRlZCBidWZmZXIuCisgICAgICAgICAqIEBwYXJhbSBhbGxvY1NpemUgdGhlIHNpemUgb2YgdGhlIG5ld2x5IGFsbG9jYXRlZCBidWZmZXIuCisgICAgICAgICAqIEBwYXJhbSBwYXJhbXMgICAgdGhlIGFsbG9jYXRpb24gcGFyYW1ldGVycy4KKyAgICAgICAgICogQHBhcmFtIHBJZCAgICAgICB0aGUgYnVmZmVyIGlkIGZvciB0aGUgbmV3bHkgYWxsb2NhdGVkIGJ1ZmZlci4KKyAgICAgICAgICogQHBhcmFtIGhhbmRsZSAgICB0aGUgbmF0aXZlIGhhbmRsZSBmb3IgdGhlIG5ld2x5IGFsbG9jYXRlZCBidWZmZXIuCisgICAgICAgICAqCisgICAgICAgICAqIEByZXR1cm4gT0sgd2hlbiBhbiBhbGxvY2F0aW9uIGlzIHN1Y2Nlc3NmdWxseSBhbGxvY2F0ZWQuCisgICAgICAgICAqICAgICAgICAgTk9fTUVNT1JZIHdoZW4gdGhlcmUgaXMgbm8gbWVtb3J5LgorICAgICAgICAgKiAgICAgICAgIENSSVRJQ0FMX0VSUk9SIG90aGVyd2lzZS4KKyAgICAgICAgICovCisgICAgICAgIFJlc3VsdFN0YXR1cyBhZGROZXdCdWZmZXIoCisgICAgICAgICAgICAgICAgY29uc3Qgc3RkOjpzaGFyZWRfcHRyPEJ1ZmZlclBvb2xBbGxvY2F0aW9uPiAmYWxsb2MsCisgICAgICAgICAgICAgICAgY29uc3Qgc2l6ZV90IGFsbG9jU2l6ZSwKKyAgICAgICAgICAgICAgICBjb25zdCBzdGQ6OnZlY3Rvcjx1aW50OF90PiAmcGFyYW1zLAorICAgICAgICAgICAgICAgIEJ1ZmZlcklkICpwSWQsCisgICAgICAgICAgICAgICAgY29uc3QgbmF0aXZlX2hhbmRsZV90ICoqaGFuZGxlKTsKKworICAgICAgICAvKioKKyAgICAgICAgICogUHJvY2Vzc2VzIHBlbmRpbmcgYnVmZmVyIHN0YXR1cyBtZXNzYWdlcyBhbmQgcGVyZm9ybXMgcGVyaW9kaWMgY2FjaGUKKyAgICAgICAgICogY2xlYW5pbmcuCisgICAgICAgICAqCisgICAgICAgICAqIEBwYXJhbSBjbGVhckNhY2hlICAgIGlmIGNsZWFyQ2FjaGUgaXMgdHJ1ZSwgaXQgZnJlZXMgYWxsIGJ1ZmZlcnMKKyAgICAgICAgICogICAgICAgICAgICAgICAgICAgICAgd2FpdGluZyB0byBiZSByZWN5Y2xlZC4KKyAgICAgICAgICovCisgICAgICAgIHZvaWQgY2xlYW5VcChib29sIGNsZWFyQ2FjaGUgPSBmYWxzZSk7CisKKyAgICAgICAgZnJpZW5kIGNsYXNzIEFjY2Vzc29yOjpJbXBsOworICAgIH0gbUJ1ZmZlclBvb2w7Cit9OworCit9ICAvLyBuYW1lc3BhY2UgaW1wbGVtZW50YXRpb24KK30gIC8vIG5hbWVzcGFjZSBWMV8wCit9ICAvLyBuYW1lc3BhY2UgdWZmZXJwb29sCit9ICAvLyBuYW1lc3BhY2UgbWVkaWEKK30gIC8vIG5hbWVzcGFjZSBoYXJkd2FyZQorfSAgLy8gbmFtZXNwYWNlIGFuZHJvaWQKKworI2VuZGlmICAvLyBBTkRST0lEX0hBUkRXQVJFX01FRElBX0JVRkZFUlBPT0xfVjFfMF9BQ0NFU1NPUklNUExfSApkaWZmIC0tZ2l0IGEvbWVkaWEvYnVmZmVycG9vbC8xLjAvQW5kcm9pZC5icCBiL21lZGlhL2J1ZmZlcnBvb2wvMS4wL0FuZHJvaWQuYnAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzdlYTcwZgotLS0gL2Rldi9udWxsCisrKyBiL21lZGlhL2J1ZmZlcnBvb2wvMS4wL0FuZHJvaWQuYnAKQEAgLTAsMCArMSwyOSBAQAorY2NfbGlicmFyeSB7CisgICAgbmFtZTogImxpYnN0YWdlZnJpZ2h0X2J1ZmZlcnBvb2xAMS4wIiwKKyAgICB2ZW5kb3JfYXZhaWxhYmxlOiB0cnVlLAorICAgIHNyY3M6IFsKKyAgICAgICAgIkFjY2Vzc29yLmNwcCIsCisgICAgICAgICJBY2Nlc3NvckltcGwuY3BwIiwKKyAgICAgICAgIkJ1ZmZlclBvb2xDbGllbnQuY3BwIiwKKyAgICAgICAgIkJ1ZmZlclN0YXR1cy5jcHAiLAorICAgICAgICAiQ2xpZW50TWFuYWdlci5jcHAiLAorICAgICAgICAiQ29ubmVjdGlvbi5jcHAiLAorICAgIF0sCisgICAgZXhwb3J0X2luY2x1ZGVfZGlyczogWworICAgICAgICAiaW5jbHVkZSIsCisgICAgXSwKKyAgICBzaGFyZWRfbGliczogWworICAgICAgICAibGliY3V0aWxzIiwKKyAgICAgICAgImxpYmZtcSIsCisgICAgICAgICJsaWJoaWRsYmFzZSIsCisgICAgICAgICJsaWJod2JpbmRlciIsCisgICAgICAgICJsaWJoaWRsdHJhbnNwb3J0IiwKKyAgICAgICAgImxpYmxvZyIsCisgICAgICAgICJsaWJ1dGlscyIsCisgICAgICAgICJhbmRyb2lkLmhhcmR3YXJlLm1lZGlhLmJ1ZmZlcnBvb2xAMS4wIiwKKyAgICBdLAorICAgIGV4cG9ydF9zaGFyZWRfbGliX2hlYWRlcnM6IFsKKyAgICAgICAgImxpYmZtcSIsCisgICAgICAgICJhbmRyb2lkLmhhcmR3YXJlLm1lZGlhLmJ1ZmZlcnBvb2xAMS4wIiwKKyAgICBdLAorfQpkaWZmIC0tZ2l0IGEvbWVkaWEvYnVmZmVycG9vbC8xLjAvQnVmZmVyUG9vbENsaWVudC5jcHAgYi9tZWRpYS9idWZmZXJwb29sLzEuMC9CdWZmZXJQb29sQ2xpZW50LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MTUyMGNhCi0tLSAvZGV2L251bGwKKysrIGIvbWVkaWEvYnVmZmVycG9vbC8xLjAvQnVmZmVyUG9vbENsaWVudC5jcHAKQEAgLTAsMCArMSw3MDggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTggVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworCisjZGVmaW5lIExPR19UQUcgIkJ1ZmZlclBvb2xDbGllbnQiCisvLyNkZWZpbmUgTE9HX05ERUJVRyAwCisKKyNpbmNsdWRlIDx0aHJlYWQ+CisjaW5jbHVkZSA8dXRpbHMvTG9nLmg+CisjaW5jbHVkZSAiQnVmZmVyUG9vbENsaWVudC5oIgorI2luY2x1ZGUgIkNvbm5lY3Rpb24uaCIKKworbmFtZXNwYWNlIGFuZHJvaWQgeworbmFtZXNwYWNlIGhhcmR3YXJlIHsKK25hbWVzcGFjZSBtZWRpYSB7CituYW1lc3BhY2UgYnVmZmVycG9vbCB7CituYW1lc3BhY2UgVjFfMCB7CituYW1lc3BhY2UgaW1wbGVtZW50YXRpb24geworCitzdGF0aWMgY29uc3RleHByIGludDY0X3Qga1JlY2VpdmVUaW1lb3V0VXMgPSAxMDAwMDAwOyAvLyAxMDBtcworc3RhdGljIGNvbnN0ZXhwciBpbnQga1Bvc3RNYXhSZXRyeSA9IDM7CitzdGF0aWMgY29uc3RleHByIGludCBrQ2FjaGVUdGxVcyA9IDEwMDAwMDA7IC8vIFRPRE86IHR1bmUKKworY2xhc3MgQnVmZmVyUG9vbENsaWVudDo6SW1wbAorICAgICAgICA6IHB1YmxpYyBzdGQ6OmVuYWJsZV9zaGFyZWRfZnJvbV90aGlzPEJ1ZmZlclBvb2xDbGllbnQ6OkltcGw+IHsKK3B1YmxpYzoKKyAgICBleHBsaWNpdCBJbXBsKGNvbnN0IHNwPEFjY2Vzc29yPiAmYWNjZXNzb3IpOworCisgICAgZXhwbGljaXQgSW1wbChjb25zdCBzcDxJQWNjZXNzb3I+ICZhY2Nlc3Nvcik7CisKKyAgICBib29sIGlzVmFsaWQoKSB7CisgICAgICAgIHJldHVybiBtVmFsaWQ7CisgICAgfQorCisgICAgYm9vbCBpc0xvY2FsKCkgeworICAgICAgICByZXR1cm4gbVZhbGlkICYmIG1Mb2NhbDsKKyAgICB9CisKKyAgICBDb25uZWN0aW9uSWQgZ2V0Q29ubmVjdGlvbklkKCkgeworICAgICAgICByZXR1cm4gbUNvbm5lY3Rpb25JZDsKKyAgICB9CisKKyAgICBzcDxJQWNjZXNzb3I+ICZnZXRBY2Nlc3NvcigpIHsKKyAgICAgICAgcmV0dXJuIG1BY2Nlc3NvcjsKKyAgICB9CisKKyAgICBib29sIGlzQWN0aXZlKGludDY0X3QgKmxhc3RUcmFuc2FjdGlvblVzLCBib29sIGNsZWFyQ2FjaGUpOworCisgICAgUmVzdWx0U3RhdHVzIGFsbG9jYXRlKGNvbnN0IHN0ZDo6dmVjdG9yPHVpbnQ4X3Q+ICZwYXJhbXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgIG5hdGl2ZV9oYW5kbGVfdCAqKmhhbmRsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgc3RkOjpzaGFyZWRfcHRyPEJ1ZmZlclBvb2xEYXRhPiAqYnVmZmVyKTsKKworICAgIFJlc3VsdFN0YXR1cyByZWNlaXZlKAorICAgICAgICAgICAgVHJhbnNhY3Rpb25JZCB0cmFuc2FjdGlvbklkLCBCdWZmZXJJZCBidWZmZXJJZCwKKyAgICAgICAgICAgIGludDY0X3QgdGltZXN0YW1wVXMsCisgICAgICAgICAgICBuYXRpdmVfaGFuZGxlX3QgKipoYW5kbGUsIHN0ZDo6c2hhcmVkX3B0cjxCdWZmZXJQb29sRGF0YT4gKmJ1ZmZlcik7CisKKyAgICB2b2lkIHBvc3RCdWZmZXJSZWxlYXNlKEJ1ZmZlcklkIGJ1ZmZlcklkKTsKKworICAgIGJvb2wgcG9zdFNlbmQoCisgICAgICAgICAgICBCdWZmZXJJZCBidWZmZXJJZCwgQ29ubmVjdGlvbklkIHJlY2VpdmVyLAorICAgICAgICAgICAgVHJhbnNhY3Rpb25JZCAqdHJhbnNhY3Rpb25JZCwgaW50NjRfdCAqdGltZXN0YW1wVXMpOworcHJpdmF0ZToKKworICAgIGJvb2wgcG9zdFJlY2VpdmUoCisgICAgICAgICAgICBCdWZmZXJJZCBidWZmZXJJZCwgVHJhbnNhY3Rpb25JZCB0cmFuc2FjdGlvbklkLAorICAgICAgICAgICAgaW50NjRfdCB0aW1lc3RhbXBVcyk7CisKKyAgICBib29sIHBvc3RSZWNlaXZlUmVzdWx0KAorICAgICAgICAgICAgQnVmZmVySWQgYnVmZmVySWQsIFRyYW5zYWN0aW9uSWQgdHJhbnNhY3Rpb25JZCwgYm9vbCByZXN1bHQsIGJvb2wgKm5lZWRzU3luYyk7CisKKyAgICB2b2lkIHRyeVN5bmNGcm9tUmVtb3RlKCk7CisKKyAgICBib29sIHN5bmNSZWxlYXNlZCgpOworCisgICAgdm9pZCBldmljdENhY2hlcyhib29sIGNsZWFyQ2FjaGUgPSBmYWxzZSk7CisKKyAgICBSZXN1bHRTdGF0dXMgYWxsb2NhdGVCdWZmZXJIYW5kbGUoCisgICAgICAgICAgICBjb25zdCBzdGQ6OnZlY3Rvcjx1aW50OF90PiYgcGFyYW1zLCBCdWZmZXJJZCAqYnVmZmVySWQsCisgICAgICAgICAgICBuYXRpdmVfaGFuZGxlX3QgKipoYW5kbGUpOworCisgICAgUmVzdWx0U3RhdHVzIGZldGNoQnVmZmVySGFuZGxlKAorICAgICAgICAgICAgVHJhbnNhY3Rpb25JZCB0cmFuc2FjdGlvbklkLCBCdWZmZXJJZCBidWZmZXJJZCwKKyAgICAgICAgICAgIG5hdGl2ZV9oYW5kbGVfdCAqKmhhbmRsZSk7CisKKyAgICBzdHJ1Y3QgQmxvY2tQb29sRGF0YUR0b3I7CisgICAgc3RydWN0IENsaWVudEJ1ZmZlcjsKKworICAgIGJvb2wgbUxvY2FsOworICAgIGJvb2wgbVZhbGlkOworICAgIHNwPElBY2Nlc3Nvcj4gbUFjY2Vzc29yOworICAgIHNwPENvbm5lY3Rpb24+IG1Mb2NhbENvbm5lY3Rpb247CisgICAgc3A8SUNvbm5lY3Rpb24+IG1SZW1vdGVDb25uZWN0aW9uOworICAgIHVpbnQzMl90IG1TZXFJZDsKKyAgICBDb25uZWN0aW9uSWQgbUNvbm5lY3Rpb25JZDsKKyAgICBpbnQ2NF90IG1MYXN0RXZpY3RDYWNoZVVzOworCisgICAgLy8gQ2FjaGVkQnVmZmVycworICAgIHN0cnVjdCBCdWZmZXJDYWNoZSB7CisgICAgICAgIHN0ZDo6bXV0ZXggbUxvY2s7CisgICAgICAgIGJvb2wgbUNyZWF0aW5nOworICAgICAgICBzdGQ6OmNvbmRpdGlvbl92YXJpYWJsZSBtQ3JlYXRlQ3Y7CisgICAgICAgIHN0ZDo6bWFwPEJ1ZmZlcklkLCBzdGQ6OnVuaXF1ZV9wdHI8Q2xpZW50QnVmZmVyPj4gbUJ1ZmZlcnM7CisgICAgICAgIGludCBtQWN0aXZlOworICAgICAgICBpbnQ2NF90IG1MYXN0Q2hhbmdlVXM7CisKKyAgICAgICAgQnVmZmVyQ2FjaGUoKSA6IG1DcmVhdGluZyhmYWxzZSksIG1BY3RpdmUoMCksIG1MYXN0Q2hhbmdlVXMoZ2V0VGltZXN0YW1wTm93KCkpIHt9CisKKyAgICAgICAgdm9pZCBpbmNBY3RpdmVfbCgpIHsKKyAgICAgICAgICAgICsrbUFjdGl2ZTsKKyAgICAgICAgICAgIG1MYXN0Q2hhbmdlVXMgPSBnZXRUaW1lc3RhbXBOb3coKTsKKyAgICAgICAgfQorCisgICAgICAgIHZvaWQgZGVjQWN0aXZlX2woKSB7CisgICAgICAgICAgICAtLW1BY3RpdmU7CisgICAgICAgICAgICBtTGFzdENoYW5nZVVzID0gZ2V0VGltZXN0YW1wTm93KCk7CisgICAgICAgIH0KKyAgICB9IG1DYWNoZTsKKworICAgIC8vIEZNUSAtIHJlbGVhc2Ugbm90aWZpZXIKKyAgICBzdHJ1Y3QgeworICAgICAgICBzdGQ6Om11dGV4IG1Mb2NrOworICAgICAgICAvLyBUT0RPOiB1c2Ugb25seSBvbmUgbGlzdD8odXNpbmcgb25lIGxpc3QgbWF5IGRlYWx5IHNlbmRpbmcgbWVzc2FnZXM/KQorICAgICAgICBzdGQ6Omxpc3Q8QnVmZmVySWQ+IG1SZWxlYXNpbmdJZHM7CisgICAgICAgIHN0ZDo6bGlzdDxCdWZmZXJJZD4gbVJlbGVhc2VkSWRzOworICAgICAgICBzdGQ6OnVuaXF1ZV9wdHI8QnVmZmVyU3RhdHVzQ2hhbm5lbD4gbVN0YXR1c0NoYW5uZWw7CisgICAgfSBtUmVsZWFzaW5nOworCisgICAgLy8gVGhpcyBsb2NrIGlzIGhlbGQgZHVyaW5nIHN5bmNocm9uaXphdGlvbiBmcm9tIHJlbW90ZSBzaWRlLgorICAgIC8vIEluIG9yZGVyIHRvIG1pbmltaXplIHJlbW90ZSBjYWxscyBhbmQgbG9ja2luZyBkdXJ0YWlvbiwgdGhpcyBsb2NrIGlzIGhlbGQKKyAgICAvLyBieSBiZXN0IGVmZm9ydCBhcHByb2FjaCB1c2luZyB0cnlfbG9jaygpLgorICAgIHN0ZDo6bXV0ZXggbVJlbW90ZVN5bmNMb2NrOworfTsKKworc3RydWN0IEJ1ZmZlclBvb2xDbGllbnQ6OkltcGw6OkJsb2NrUG9vbERhdGFEdG9yIHsKKyAgICBCbG9ja1Bvb2xEYXRhRHRvcihjb25zdCBzdGQ6OnNoYXJlZF9wdHI8QnVmZmVyUG9vbENsaWVudDo6SW1wbD4gJmltcGwpCisgICAgICAgICAgICA6IG1JbXBsKGltcGwpIHt9CisKKyAgICB2b2lkIG9wZXJhdG9yKCkoQnVmZmVyUG9vbERhdGEgKmJ1ZmZlcikgeworICAgICAgICBCdWZmZXJJZCBpZCA9IGJ1ZmZlci0+bUlkOworICAgICAgICBkZWxldGUgYnVmZmVyOworCisgICAgICAgIGF1dG8gaW1wbCA9IG1JbXBsLmxvY2soKTsKKyAgICAgICAgaWYgKGltcGwgJiYgaW1wbC0+aXNWYWxpZCgpKSB7CisgICAgICAgICAgICBpbXBsLT5wb3N0QnVmZmVyUmVsZWFzZShpZCk7CisgICAgICAgIH0KKyAgICB9CisgICAgY29uc3Qgc3RkOjp3ZWFrX3B0cjxCdWZmZXJQb29sQ2xpZW50OjpJbXBsPiBtSW1wbDsKK307CisKK3N0cnVjdCBCdWZmZXJQb29sQ2xpZW50OjpJbXBsOjpDbGllbnRCdWZmZXIgeworcHJpdmF0ZToKKyAgICBib29sIG1JbnZhbGlkYXRlZDsgLy8gVE9ETzogaW1wbGVtZW50CisgICAgaW50NjRfdCBtRXhwaXJlVXM7CisgICAgYm9vbCBtSGFzQ2FjaGU7CisgICAgQ29ubmVjdGlvbklkIG1Db25uZWN0aW9uSWQ7CisgICAgQnVmZmVySWQgbUlkOworICAgIG5hdGl2ZV9oYW5kbGVfdCAqbUhhbmRsZTsKKyAgICBzdGQ6OndlYWtfcHRyPEJ1ZmZlclBvb2xEYXRhPiBtQ2FjaGU7CisKKyAgICB2b2lkIHVwZGF0ZUV4cGlyZSgpIHsKKyAgICAgICAgbUV4cGlyZVVzID0gZ2V0VGltZXN0YW1wTm93KCkgKyBrQ2FjaGVUdGxVczsKKyAgICB9CisKK3B1YmxpYzoKKyAgICBDbGllbnRCdWZmZXIoCisgICAgICAgICAgICBDb25uZWN0aW9uSWQgY29ubmVjdGlvbklkLCBCdWZmZXJJZCBpZCwgbmF0aXZlX2hhbmRsZV90ICpoYW5kbGUpCisgICAgICAgICAgICA6IG1JbnZhbGlkYXRlZChmYWxzZSksIG1IYXNDYWNoZShmYWxzZSksCisgICAgICAgICAgICAgIG1Db25uZWN0aW9uSWQoY29ubmVjdGlvbklkKSwgbUlkKGlkKSwgbUhhbmRsZShoYW5kbGUpIHsKKyAgICAgICAgKHZvaWQpbUludmFsaWRhdGVkOworICAgICAgICBtRXhwaXJlVXMgPSBnZXRUaW1lc3RhbXBOb3coKSArIGtDYWNoZVR0bFVzOworICAgIH0KKworICAgIH5DbGllbnRCdWZmZXIoKSB7CisgICAgICAgIGlmIChtSGFuZGxlKSB7CisgICAgICAgICAgICBuYXRpdmVfaGFuZGxlX2Nsb3NlKG1IYW5kbGUpOworICAgICAgICAgICAgbmF0aXZlX2hhbmRsZV9kZWxldGUobUhhbmRsZSk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBib29sIGV4cGlyZSgpIGNvbnN0IHsKKyAgICAgICAgaW50NjRfdCBub3cgPSBnZXRUaW1lc3RhbXBOb3coKTsKKyAgICAgICAgcmV0dXJuIG5vdyA+PSBtRXhwaXJlVXM7CisgICAgfQorCisgICAgYm9vbCBoYXNDYWNoZSgpIGNvbnN0IHsKKyAgICAgICAgcmV0dXJuIG1IYXNDYWNoZTsKKyAgICB9CisKKyAgICBzdGQ6OnNoYXJlZF9wdHI8QnVmZmVyUG9vbERhdGE+IGZldGNoQ2FjaGUobmF0aXZlX2hhbmRsZV90ICoqcEhhbmRsZSkgeworICAgICAgICBpZiAobUhhc0NhY2hlKSB7CisgICAgICAgICAgICBzdGQ6OnNoYXJlZF9wdHI8QnVmZmVyUG9vbERhdGE+IGNhY2hlID0gbUNhY2hlLmxvY2soKTsKKyAgICAgICAgICAgIGlmIChjYWNoZSkgeworICAgICAgICAgICAgICAgICpwSGFuZGxlID0gbUhhbmRsZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJldHVybiBjYWNoZTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICB9CisKKyAgICBzdGQ6OnNoYXJlZF9wdHI8QnVmZmVyUG9vbERhdGE+IGNyZWF0ZUNhY2hlKAorICAgICAgICAgICAgY29uc3Qgc3RkOjpzaGFyZWRfcHRyPEJ1ZmZlclBvb2xDbGllbnQ6OkltcGw+ICZpbXBsLAorICAgICAgICAgICAgbmF0aXZlX2hhbmRsZV90ICoqcEhhbmRsZSkgeworICAgICAgICBpZiAoIW1IYXNDYWNoZSkgeworICAgICAgICAgICAgLy8gQWxsb2NhdGVzIGEgcmF3IHB0ciBpbiBvcmRlciB0byBhdm9pZCBzZW5kaW5nICNwb3N0QnVmZmVyUmVsZWFzZQorICAgICAgICAgICAgLy8gZnJvbSBkZWxldGVyLCBpbiBjYXNlIG9mIG5hdGl2ZV9oYW5kbGVfY2xvbmUgZmFpbHVyZS4KKyAgICAgICAgICAgIEJ1ZmZlclBvb2xEYXRhICpwdHIgPSBuZXcgQnVmZmVyUG9vbERhdGEobUNvbm5lY3Rpb25JZCwgbUlkKTsKKyAgICAgICAgICAgIGlmIChwdHIpIHsKKyAgICAgICAgICAgICAgICBzdGQ6OnNoYXJlZF9wdHI8QnVmZmVyUG9vbERhdGE+IGNhY2hlKHB0ciwgQmxvY2tQb29sRGF0YUR0b3IoaW1wbCkpOworICAgICAgICAgICAgICAgIGlmIChjYWNoZSkgeworICAgICAgICAgICAgICAgICAgICBtQ2FjaGUgPSBjYWNoZTsKKyAgICAgICAgICAgICAgICAgICAgbUhhc0NhY2hlID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAgKnBIYW5kbGUgPSBtSGFuZGxlOworICAgICAgICAgICAgICAgICAgICByZXR1cm4gY2FjaGU7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKHB0cikgeworICAgICAgICAgICAgICAgIGRlbGV0ZSBwdHI7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgfQorCisgICAgYm9vbCBvbkNhY2hlUmVsZWFzZSgpIHsKKyAgICAgICAgaWYgKG1IYXNDYWNoZSkgeworICAgICAgICAgICAgLy8gVE9ETzogdmVyaWZ5IG1DYWNoZSBpcyBub3QgdmFsaWQ7CisgICAgICAgICAgICB1cGRhdGVFeHBpcmUoKTsKKyAgICAgICAgICAgIG1IYXNDYWNoZSA9IGZhbHNlOworICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KK307CisKK0J1ZmZlclBvb2xDbGllbnQ6OkltcGw6OkltcGwoY29uc3Qgc3A8QWNjZXNzb3I+ICZhY2Nlc3NvcikKKyAgICA6IG1Mb2NhbCh0cnVlKSwgbVZhbGlkKGZhbHNlKSwgbUFjY2Vzc29yKGFjY2Vzc29yKSwgbVNlcUlkKDApLAorICAgICAgbUxhc3RFdmljdENhY2hlVXMoZ2V0VGltZXN0YW1wTm93KCkpIHsKKyAgICBjb25zdCBRdWV1ZURlc2NyaXB0b3IgKmZtcURlc2M7CisgICAgUmVzdWx0U3RhdHVzIHN0YXR1cyA9IGFjY2Vzc29yLT5jb25uZWN0KAorICAgICAgICAgICAgJm1Mb2NhbENvbm5lY3Rpb24sICZtQ29ubmVjdGlvbklkLCAmZm1xRGVzYywgdHJ1ZSk7CisgICAgaWYgKHN0YXR1cyA9PSBSZXN1bHRTdGF0dXM6Ok9LKSB7CisgICAgICAgIG1SZWxlYXNpbmcubVN0YXR1c0NoYW5uZWwgPQorICAgICAgICAgICAgICAgIHN0ZDo6bWFrZV91bmlxdWU8QnVmZmVyU3RhdHVzQ2hhbm5lbD4oKmZtcURlc2MpOworICAgICAgICBtVmFsaWQgPSBtUmVsZWFzaW5nLm1TdGF0dXNDaGFubmVsICYmCisgICAgICAgICAgICAgICAgbVJlbGVhc2luZy5tU3RhdHVzQ2hhbm5lbC0+aXNWYWxpZCgpOworICAgIH0KK30KKworQnVmZmVyUG9vbENsaWVudDo6SW1wbDo6SW1wbChjb25zdCBzcDxJQWNjZXNzb3I+ICZhY2Nlc3NvcikKKyAgICA6IG1Mb2NhbChmYWxzZSksIG1WYWxpZChmYWxzZSksIG1BY2Nlc3NvcihhY2Nlc3NvciksIG1TZXFJZCgwKSwKKyAgICAgIG1MYXN0RXZpY3RDYWNoZVVzKGdldFRpbWVzdGFtcE5vdygpKSB7CisgICAgYm9vbCB2YWxpZCA9IGZhbHNlOworICAgIHNwPElDb25uZWN0aW9uPiYgb3V0Q29ubmVjdGlvbiA9IG1SZW1vdGVDb25uZWN0aW9uOworICAgIENvbm5lY3Rpb25JZCYgaWQgPSBtQ29ubmVjdGlvbklkOworICAgIHN0ZDo6dW5pcXVlX3B0cjxCdWZmZXJTdGF0dXNDaGFubmVsPiYgb3V0Q2hhbm5lbCA9CisgICAgICAgICAgICBtUmVsZWFzaW5nLm1TdGF0dXNDaGFubmVsOworICAgIFJldHVybjx2b2lkPiB0cmFuc1Jlc3VsdCA9IGFjY2Vzc29yLT5jb25uZWN0KAorICAgICAgICAgICAgWyZ2YWxpZCwgJm91dENvbm5lY3Rpb24sICZpZCwgJm91dENoYW5uZWxdCisgICAgICAgICAgICAoUmVzdWx0U3RhdHVzIHN0YXR1cywgc3A8SUNvbm5lY3Rpb24+IGNvbm5lY3Rpb24sCisgICAgICAgICAgICAgQ29ubmVjdGlvbklkIGNvbm5lY3Rpb25JZCwgY29uc3QgUXVldWVEZXNjcmlwdG9yJiBkZXNjKSB7CisgICAgICAgICAgICAgICAgaWYgKHN0YXR1cyA9PSBSZXN1bHRTdGF0dXM6Ok9LKSB7CisgICAgICAgICAgICAgICAgICAgIG91dENvbm5lY3Rpb24gPSBjb25uZWN0aW9uOworICAgICAgICAgICAgICAgICAgICBpZCA9IGNvbm5lY3Rpb25JZDsKKyAgICAgICAgICAgICAgICAgICAgb3V0Q2hhbm5lbCA9IHN0ZDo6bWFrZV91bmlxdWU8QnVmZmVyU3RhdHVzQ2hhbm5lbD4oZGVzYyk7CisgICAgICAgICAgICAgICAgICAgIGlmIChvdXRDaGFubmVsICYmIG91dENoYW5uZWwtPmlzVmFsaWQoKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgdmFsaWQgPSB0cnVlOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfSk7CisgICAgbVZhbGlkID0gdHJhbnNSZXN1bHQuaXNPaygpICYmIHZhbGlkOworfQorCitib29sIEJ1ZmZlclBvb2xDbGllbnQ6OkltcGw6OmlzQWN0aXZlKGludDY0X3QgKmxhc3RUcmFuc2FjdGlvblVzLCBib29sIGNsZWFyQ2FjaGUpIHsKKyAgICBib29sIGFjdGl2ZSA9IGZhbHNlOworICAgIHsKKyAgICAgICAgc3RkOjpsb2NrX2d1YXJkPHN0ZDo6bXV0ZXg+IGxvY2sobUNhY2hlLm1Mb2NrKTsKKyAgICAgICAgc3luY1JlbGVhc2VkKCk7CisgICAgICAgIGV2aWN0Q2FjaGVzKGNsZWFyQ2FjaGUpOworICAgICAgICAqbGFzdFRyYW5zYWN0aW9uVXMgPSBtQ2FjaGUubUxhc3RDaGFuZ2VVczsKKyAgICAgICAgYWN0aXZlID0gbUNhY2hlLm1BY3RpdmUgPiAwOworICAgIH0KKyAgICBpZiAobVZhbGlkICYmIG1Mb2NhbCAmJiBtTG9jYWxDb25uZWN0aW9uKSB7CisgICAgICAgIG1Mb2NhbENvbm5lY3Rpb24tPmNsZWFuVXAoY2xlYXJDYWNoZSk7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyAgICByZXR1cm4gYWN0aXZlOworfQorCitSZXN1bHRTdGF0dXMgQnVmZmVyUG9vbENsaWVudDo6SW1wbDo6YWxsb2NhdGUoCisgICAgICAgIGNvbnN0IHN0ZDo6dmVjdG9yPHVpbnQ4X3Q+ICZwYXJhbXMsCisgICAgICAgIG5hdGl2ZV9oYW5kbGVfdCAqKnBIYW5kbGUsCisgICAgICAgIHN0ZDo6c2hhcmVkX3B0cjxCdWZmZXJQb29sRGF0YT4gKmJ1ZmZlcikgeworICAgIGlmICghbUxvY2FsIHx8ICFtTG9jYWxDb25uZWN0aW9uIHx8ICFtVmFsaWQpIHsKKyAgICAgICAgcmV0dXJuIFJlc3VsdFN0YXR1czo6Q1JJVElDQUxfRVJST1I7CisgICAgfQorICAgIEJ1ZmZlcklkIGJ1ZmZlcklkOworICAgIG5hdGl2ZV9oYW5kbGVfdCAqaGFuZGxlID0gbnVsbHB0cjsKKyAgICBidWZmZXItPnJlc2V0KCk7CisgICAgUmVzdWx0U3RhdHVzIHN0YXR1cyA9IGFsbG9jYXRlQnVmZmVySGFuZGxlKHBhcmFtcywgJmJ1ZmZlcklkLCAmaGFuZGxlKTsKKyAgICBpZiAoc3RhdHVzID09IFJlc3VsdFN0YXR1czo6T0spIHsKKyAgICAgICAgaWYgKGhhbmRsZSkgeworICAgICAgICAgICAgc3RkOjp1bmlxdWVfbG9jazxzdGQ6Om11dGV4PiBsb2NrKG1DYWNoZS5tTG9jayk7CisgICAgICAgICAgICBzeW5jUmVsZWFzZWQoKTsKKyAgICAgICAgICAgIGV2aWN0Q2FjaGVzKCk7CisgICAgICAgICAgICBhdXRvIGNhY2hlSXQgPSBtQ2FjaGUubUJ1ZmZlcnMuZmluZChidWZmZXJJZCk7CisgICAgICAgICAgICBpZiAoY2FjaGVJdCAhPSBtQ2FjaGUubUJ1ZmZlcnMuZW5kKCkpIHsKKyAgICAgICAgICAgICAgICAvLyBUT0RPOiB2ZXJpZnkgaXQgaXMgcmVjeWNsZWQuIChub3QgaGF2aW5nIGFjdGl2ZSByZWYpCisgICAgICAgICAgICAgICAgbUNhY2hlLm1CdWZmZXJzLmVyYXNlKGNhY2hlSXQpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgYXV0byBjbGllbnRCdWZmZXIgPSBzdGQ6Om1ha2VfdW5pcXVlPENsaWVudEJ1ZmZlcj4oCisgICAgICAgICAgICAgICAgICAgIG1Db25uZWN0aW9uSWQsIGJ1ZmZlcklkLCBoYW5kbGUpOworICAgICAgICAgICAgaWYgKGNsaWVudEJ1ZmZlcikgeworICAgICAgICAgICAgICAgIGF1dG8gcmVzdWx0ID0gbUNhY2hlLm1CdWZmZXJzLmluc2VydChzdGQ6Om1ha2VfcGFpcigKKyAgICAgICAgICAgICAgICAgICAgICAgIGJ1ZmZlcklkLCBzdGQ6Om1vdmUoY2xpZW50QnVmZmVyKSkpOworICAgICAgICAgICAgICAgIGlmIChyZXN1bHQuc2Vjb25kKSB7CisgICAgICAgICAgICAgICAgICAgICpidWZmZXIgPSByZXN1bHQuZmlyc3QtPnNlY29uZC0+Y3JlYXRlQ2FjaGUoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2hhcmVkX2Zyb21fdGhpcygpLCBwSGFuZGxlKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKCpidWZmZXIpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIG1DYWNoZS5pbmNBY3RpdmVfbCgpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGlmICghKmJ1ZmZlcikgeworICAgICAgICAgICAgQUxPR1YoImNsaWVudCBjYWNoZSBjcmVhdGlvbiBmYWlsdXJlICVkOiAlbGxkIiwKKyAgICAgICAgICAgICAgICAgIGhhbmRsZSAhPSBudWxscHRyLCAobG9uZyBsb25nKW1Db25uZWN0aW9uSWQpOworICAgICAgICAgICAgc3RhdHVzID0gUmVzdWx0U3RhdHVzOjpOT19NRU1PUlk7CisgICAgICAgICAgICBwb3N0QnVmZmVyUmVsZWFzZShidWZmZXJJZCk7CisgICAgICAgIH0KKyAgICB9CisgICAgcmV0dXJuIHN0YXR1czsKK30KKworUmVzdWx0U3RhdHVzIEJ1ZmZlclBvb2xDbGllbnQ6OkltcGw6OnJlY2VpdmUoCisgICAgICAgIFRyYW5zYWN0aW9uSWQgdHJhbnNhY3Rpb25JZCwgQnVmZmVySWQgYnVmZmVySWQsIGludDY0X3QgdGltZXN0YW1wVXMsCisgICAgICAgIG5hdGl2ZV9oYW5kbGVfdCAqKnBIYW5kbGUsCisgICAgICAgIHN0ZDo6c2hhcmVkX3B0cjxCdWZmZXJQb29sRGF0YT4gKmJ1ZmZlcikgeworICAgIGlmICghbVZhbGlkKSB7CisgICAgICAgIHJldHVybiBSZXN1bHRTdGF0dXM6OkNSSVRJQ0FMX0VSUk9SOworICAgIH0KKyAgICBpZiAodGltZXN0YW1wVXMgIT0gMCkgeworICAgICAgICB0aW1lc3RhbXBVcyArPSBrUmVjZWl2ZVRpbWVvdXRVczsKKyAgICB9CisgICAgaWYgKCFwb3N0UmVjZWl2ZShidWZmZXJJZCwgdHJhbnNhY3Rpb25JZCwgdGltZXN0YW1wVXMpKSB7CisgICAgICAgIHJldHVybiBSZXN1bHRTdGF0dXM6OkNSSVRJQ0FMX0VSUk9SOworICAgIH0KKyAgICBSZXN1bHRTdGF0dXMgc3RhdHVzID0gUmVzdWx0U3RhdHVzOjpDUklUSUNBTF9FUlJPUjsKKyAgICBidWZmZXItPnJlc2V0KCk7CisgICAgd2hpbGUoMSkgeworICAgICAgICBzdGQ6OnVuaXF1ZV9sb2NrPHN0ZDo6bXV0ZXg+IGxvY2sobUNhY2hlLm1Mb2NrKTsKKyAgICAgICAgc3luY1JlbGVhc2VkKCk7CisgICAgICAgIGV2aWN0Q2FjaGVzKCk7CisgICAgICAgIGF1dG8gY2FjaGVJdCA9IG1DYWNoZS5tQnVmZmVycy5maW5kKGJ1ZmZlcklkKTsKKyAgICAgICAgaWYgKGNhY2hlSXQgIT0gbUNhY2hlLm1CdWZmZXJzLmVuZCgpKSB7CisgICAgICAgICAgICBpZiAoY2FjaGVJdC0+c2Vjb25kLT5oYXNDYWNoZSgpKSB7CisgICAgICAgICAgICAgICAgKmJ1ZmZlciA9IGNhY2hlSXQtPnNlY29uZC0+ZmV0Y2hDYWNoZShwSGFuZGxlKTsKKyAgICAgICAgICAgICAgICBpZiAoISpidWZmZXIpIHsKKyAgICAgICAgICAgICAgICAgICAgLy8gY2hlY2sgdHJhbnNmZXIgdGltZV9vdXQKKyAgICAgICAgICAgICAgICAgICAgbG9jay51bmxvY2soKTsKKyAgICAgICAgICAgICAgICAgICAgc3RkOjp0aGlzX3RocmVhZDo6eWllbGQoKTsKKyAgICAgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIEFMT0dWKCJjbGllbnQgcmVjZWl2ZSBmcm9tIHJlZmVyZW5jZSAlbGxkIiwgKGxvbmcgbG9uZyltQ29ubmVjdGlvbklkKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgKmJ1ZmZlciA9IGNhY2hlSXQtPnNlY29uZC0+Y3JlYXRlQ2FjaGUoc2hhcmVkX2Zyb21fdGhpcygpLCBwSGFuZGxlKTsKKyAgICAgICAgICAgICAgICBpZiAoKmJ1ZmZlcikgeworICAgICAgICAgICAgICAgICAgICBtQ2FjaGUuaW5jQWN0aXZlX2woKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgQUxPR1YoImNsaWVudCByZWNlaXZlIGZyb20gY2FjaGUgJWxsZCIsIChsb25nIGxvbmcpbUNvbm5lY3Rpb25JZCk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBpZiAoIW1DYWNoZS5tQ3JlYXRpbmcpIHsKKyAgICAgICAgICAgICAgICBtQ2FjaGUubUNyZWF0aW5nID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICBsb2NrLnVubG9jaygpOworICAgICAgICAgICAgICAgIG5hdGl2ZV9oYW5kbGVfdCogaGFuZGxlID0gbnVsbHB0cjsKKyAgICAgICAgICAgICAgICBzdGF0dXMgPSBmZXRjaEJ1ZmZlckhhbmRsZSh0cmFuc2FjdGlvbklkLCBidWZmZXJJZCwgJmhhbmRsZSk7CisgICAgICAgICAgICAgICAgbG9jay5sb2NrKCk7CisgICAgICAgICAgICAgICAgaWYgKHN0YXR1cyA9PSBSZXN1bHRTdGF0dXM6Ok9LKSB7CisgICAgICAgICAgICAgICAgICAgIGlmIChoYW5kbGUpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGF1dG8gY2xpZW50QnVmZmVyID0gc3RkOjptYWtlX3VuaXF1ZTxDbGllbnRCdWZmZXI+KAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtQ29ubmVjdGlvbklkLCBidWZmZXJJZCwgaGFuZGxlKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjbGllbnRCdWZmZXIpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdXRvIHJlc3VsdCA9IG1DYWNoZS5tQnVmZmVycy5pbnNlcnQoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGQ6Om1ha2VfcGFpcihidWZmZXJJZCwgc3RkOjptb3ZlKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGllbnRCdWZmZXIpKSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJlc3VsdC5zZWNvbmQpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKmJ1ZmZlciA9IHJlc3VsdC5maXJzdC0+c2Vjb25kLT5jcmVhdGVDYWNoZSgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaGFyZWRfZnJvbV90aGlzKCksIHBIYW5kbGUpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoKmJ1ZmZlcikgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbUNhY2hlLmluY0FjdGl2ZV9sKCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgaWYgKCEqYnVmZmVyKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBzdGF0dXMgPSBSZXN1bHRTdGF0dXM6Ok5PX01FTU9SWTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBtQ2FjaGUubUNyZWF0aW5nID0gZmFsc2U7CisgICAgICAgICAgICAgICAgbG9jay51bmxvY2soKTsKKyAgICAgICAgICAgICAgICBtQ2FjaGUubUNyZWF0ZUN2Lm5vdGlmeV9hbGwoKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIG1DYWNoZS5tQ3JlYXRlQ3Yud2FpdChsb2NrKTsKKyAgICAgICAgfQorICAgIH0KKyAgICBib29sIG5lZWRzU3luYyA9IGZhbHNlOworICAgIGJvb2wgcG9zdGVkID0gcG9zdFJlY2VpdmVSZXN1bHQoYnVmZmVySWQsIHRyYW5zYWN0aW9uSWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpidWZmZXIgPyB0cnVlIDogZmFsc2UsICZuZWVkc1N5bmMpOworICAgIEFMT0dWKCJjbGllbnQgcmVjZWl2ZSAlbGxkIC0gJXUgOiAlcyAoJWQpIiwgKGxvbmcgbG9uZyltQ29ubmVjdGlvbklkLCBidWZmZXJJZCwKKyAgICAgICAgICAqYnVmZmVyID8gIm9rIiA6ICJmYWlsIiwgcG9zdGVkKTsKKyAgICBpZiAobVZhbGlkICYmIG1Mb2NhbCAmJiBtTG9jYWxDb25uZWN0aW9uKSB7CisgICAgICAgIG1Mb2NhbENvbm5lY3Rpb24tPmNsZWFuVXAoZmFsc2UpOworICAgIH0KKyAgICBpZiAobmVlZHNTeW5jICYmIG1SZW1vdGVDb25uZWN0aW9uKSB7CisgICAgICAgIHRyeVN5bmNGcm9tUmVtb3RlKCk7CisgICAgfQorICAgIGlmICgqYnVmZmVyKSB7CisgICAgICAgIGlmICghcG9zdGVkKSB7CisgICAgICAgICAgICBidWZmZXItPnJlc2V0KCk7CisgICAgICAgICAgICByZXR1cm4gUmVzdWx0U3RhdHVzOjpDUklUSUNBTF9FUlJPUjsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gUmVzdWx0U3RhdHVzOjpPSzsKKyAgICB9CisgICAgcmV0dXJuIHN0YXR1czsKK30KKworCit2b2lkIEJ1ZmZlclBvb2xDbGllbnQ6OkltcGw6OnBvc3RCdWZmZXJSZWxlYXNlKEJ1ZmZlcklkIGJ1ZmZlcklkKSB7CisgICAgc3RkOjpsb2NrX2d1YXJkPHN0ZDo6bXV0ZXg+IGxvY2sobVJlbGVhc2luZy5tTG9jayk7CisgICAgbVJlbGVhc2luZy5tUmVsZWFzaW5nSWRzLnB1c2hfYmFjayhidWZmZXJJZCk7CisgICAgbVJlbGVhc2luZy5tU3RhdHVzQ2hhbm5lbC0+cG9zdEJ1ZmZlclJlbGVhc2UoCisgICAgICAgICAgICBtQ29ubmVjdGlvbklkLCBtUmVsZWFzaW5nLm1SZWxlYXNpbmdJZHMsIG1SZWxlYXNpbmcubVJlbGVhc2VkSWRzKTsKK30KKworLy8gVE9ETzogcmV2aXNlIGFkLWhvYyBwb3N0aW5nIGRhdGEgc3RydWN0dXJlCitib29sIEJ1ZmZlclBvb2xDbGllbnQ6OkltcGw6OnBvc3RTZW5kKAorICAgICAgICBCdWZmZXJJZCBidWZmZXJJZCwgQ29ubmVjdGlvbklkIHJlY2VpdmVyLAorICAgICAgICBUcmFuc2FjdGlvbklkICp0cmFuc2FjdGlvbklkLCBpbnQ2NF90ICp0aW1lc3RhbXBVcykgeworICAgIGJvb2wgcmV0ID0gZmFsc2U7CisgICAgYm9vbCBuZWVkc1N5bmMgPSBmYWxzZTsKKyAgICB7CisgICAgICAgIHN0ZDo6bG9ja19ndWFyZDxzdGQ6Om11dGV4PiBsb2NrKG1SZWxlYXNpbmcubUxvY2spOworICAgICAgICAqdGltZXN0YW1wVXMgPSBnZXRUaW1lc3RhbXBOb3coKTsKKyAgICAgICAgKnRyYW5zYWN0aW9uSWQgPSAobUNvbm5lY3Rpb25JZCA8PCAzMikgfCBtU2VxSWQrKzsKKyAgICAgICAgLy8gVE9ETzogcmV0cnksIGFkZCB0aW1lb3V0LCB0YXJnZXQ/CisgICAgICAgIHJldCA9ICBtUmVsZWFzaW5nLm1TdGF0dXNDaGFubmVsLT5wb3N0QnVmZmVyU3RhdHVzTWVzc2FnZSgKKyAgICAgICAgICAgICAgICAqdHJhbnNhY3Rpb25JZCwgYnVmZmVySWQsIEJ1ZmZlclN0YXR1czo6VFJBTlNGRVJfVE8sIG1Db25uZWN0aW9uSWQsCisgICAgICAgICAgICAgICAgcmVjZWl2ZXIsIG1SZWxlYXNpbmcubVJlbGVhc2luZ0lkcywgbVJlbGVhc2luZy5tUmVsZWFzZWRJZHMpOworICAgICAgICBuZWVkc1N5bmMgPSAhbUxvY2FsICYmIG1SZWxlYXNpbmcubVN0YXR1c0NoYW5uZWwtPm5lZWRzU3luYygpOworICAgIH0KKyAgICBpZiAobVZhbGlkICYmIG1Mb2NhbCAmJiBtTG9jYWxDb25uZWN0aW9uKSB7CisgICAgICAgIG1Mb2NhbENvbm5lY3Rpb24tPmNsZWFuVXAoZmFsc2UpOworICAgIH0KKyAgICBpZiAobmVlZHNTeW5jICYmIG1SZW1vdGVDb25uZWN0aW9uKSB7CisgICAgICAgIHRyeVN5bmNGcm9tUmVtb3RlKCk7CisgICAgfQorICAgIHJldHVybiByZXQ7Cit9CisKK2Jvb2wgQnVmZmVyUG9vbENsaWVudDo6SW1wbDo6cG9zdFJlY2VpdmUoCisgICAgICAgIEJ1ZmZlcklkIGJ1ZmZlcklkLCBUcmFuc2FjdGlvbklkIHRyYW5zYWN0aW9uSWQsIGludDY0X3QgdGltZXN0YW1wVXMpIHsKKyAgICBmb3IgKGludCBpID0gMDsgaSA8IGtQb3N0TWF4UmV0cnk7ICsraSkgeworICAgICAgICBzdGQ6OnVuaXF1ZV9sb2NrPHN0ZDo6bXV0ZXg+IGxvY2sobVJlbGVhc2luZy5tTG9jayk7CisgICAgICAgIGludDY0X3Qgbm93ID0gZ2V0VGltZXN0YW1wTm93KCk7CisgICAgICAgIGlmICh0aW1lc3RhbXBVcyA9PSAwIHx8IG5vdyA8IHRpbWVzdGFtcFVzKSB7CisgICAgICAgICAgICBib29sIHJlc3VsdCA9IG1SZWxlYXNpbmcubVN0YXR1c0NoYW5uZWwtPnBvc3RCdWZmZXJTdGF0dXNNZXNzYWdlKAorICAgICAgICAgICAgICAgICAgICB0cmFuc2FjdGlvbklkLCBidWZmZXJJZCwgQnVmZmVyU3RhdHVzOjpUUkFOU0ZFUl9GUk9NLAorICAgICAgICAgICAgICAgICAgICBtQ29ubmVjdGlvbklkLCAtMSwgbVJlbGVhc2luZy5tUmVsZWFzaW5nSWRzLAorICAgICAgICAgICAgICAgICAgICBtUmVsZWFzaW5nLm1SZWxlYXNlZElkcyk7CisgICAgICAgICAgICBpZiAocmVzdWx0KSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBsb2NrLnVubG9jaygpOworICAgICAgICAgICAgc3RkOjp0aGlzX3RocmVhZDo6eWllbGQoKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIG1SZWxlYXNpbmcubVN0YXR1c0NoYW5uZWwtPnBvc3RCdWZmZXJTdGF0dXNNZXNzYWdlKAorICAgICAgICAgICAgICAgICAgICB0cmFuc2FjdGlvbklkLCBidWZmZXJJZCwgQnVmZmVyU3RhdHVzOjpUUkFOU0ZFUl9USU1FT1VULAorICAgICAgICAgICAgICAgICAgICBtQ29ubmVjdGlvbklkLCAtMSwgbVJlbGVhc2luZy5tUmVsZWFzaW5nSWRzLAorICAgICAgICAgICAgICAgICAgICBtUmVsZWFzaW5nLm1SZWxlYXNlZElkcyk7CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICB9CisgICAgcmV0dXJuIGZhbHNlOworfQorCitib29sIEJ1ZmZlclBvb2xDbGllbnQ6OkltcGw6OnBvc3RSZWNlaXZlUmVzdWx0KAorICAgICAgICBCdWZmZXJJZCBidWZmZXJJZCwgVHJhbnNhY3Rpb25JZCB0cmFuc2FjdGlvbklkLCBib29sIHJlc3VsdCwgYm9vbCAqbmVlZHNTeW5jKSB7CisgICAgc3RkOjpsb2NrX2d1YXJkPHN0ZDo6bXV0ZXg+IGxvY2sobVJlbGVhc2luZy5tTG9jayk7CisgICAgLy8gVE9ETzogcmV0cnksIGFkZCB0aW1lb3V0CisgICAgYm9vbCByZXQgPSBtUmVsZWFzaW5nLm1TdGF0dXNDaGFubmVsLT5wb3N0QnVmZmVyU3RhdHVzTWVzc2FnZSgKKyAgICAgICAgICAgIHRyYW5zYWN0aW9uSWQsIGJ1ZmZlcklkLAorICAgICAgICAgICAgcmVzdWx0ID8gQnVmZmVyU3RhdHVzOjpUUkFOU0ZFUl9PSyA6IEJ1ZmZlclN0YXR1czo6VFJBTlNGRVJfRVJST1IsCisgICAgICAgICAgICBtQ29ubmVjdGlvbklkLCAtMSwgbVJlbGVhc2luZy5tUmVsZWFzaW5nSWRzLAorICAgICAgICAgICAgbVJlbGVhc2luZy5tUmVsZWFzZWRJZHMpOworICAgICpuZWVkc1N5bmMgPSAhbUxvY2FsICYmIG1SZWxlYXNpbmcubVN0YXR1c0NoYW5uZWwtPm5lZWRzU3luYygpOworICAgIHJldHVybiByZXQ7Cit9CisKK3ZvaWQgQnVmZmVyUG9vbENsaWVudDo6SW1wbDo6dHJ5U3luY0Zyb21SZW1vdGUoKSB7CisgICAgaWYgKG1SZW1vdGVTeW5jTG9jay50cnlfbG9jaygpKSB7CisgICAgICAgIGJvb2wgbmVlZHNTeW5jID0gZmFsc2U7CisgICAgICAgIHsKKyAgICAgICAgICAgIHN0ZDo6bG9ja19ndWFyZDxzdGQ6Om11dGV4PiBsb2NrKG1SZWxlYXNpbmcubUxvY2spOworICAgICAgICAgICAgbmVlZHNTeW5jID0gbVJlbGVhc2luZy5tU3RhdHVzQ2hhbm5lbC0+bmVlZHNTeW5jKCk7CisgICAgICAgIH0KKyAgICAgICAgaWYgKG5lZWRzU3luYykgeworICAgICAgICAgICAgVHJhbnNhY3Rpb25JZCB0cmFuc2FjdGlvbklkID0gKG1Db25uZWN0aW9uSWQgPDwgMzIpOworICAgICAgICAgICAgQnVmZmVySWQgYnVmZmVySWQgPSBDb25uZWN0aW9uOjpTWU5DX0JVRkZFUklEOworICAgICAgICAgICAgUmV0dXJuPHZvaWQ+IHRyYW5zUmVzdWx0ID0gbVJlbW90ZUNvbm5lY3Rpb24tPmZldGNoKAorICAgICAgICAgICAgICAgICAgICB0cmFuc2FjdGlvbklkLCBidWZmZXJJZCwKKyAgICAgICAgICAgICAgICAgICAgW10KKyAgICAgICAgICAgICAgICAgICAgKFJlc3VsdFN0YXR1cyBvdXRTdGF0dXMsIEJ1ZmZlciBvdXRCdWZmZXIpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICh2b2lkKSBvdXRTdGF0dXM7CisgICAgICAgICAgICAgICAgICAgICAgICAodm9pZCkgb3V0QnVmZmVyOworICAgICAgICAgICAgICAgICAgICB9KTsKKyAgICAgICAgfQorICAgICAgICBtUmVtb3RlU3luY0xvY2sudW5sb2NrKCk7CisgICAgfQorfQorCisvLyBzaG91bGQgaGF2ZSBtQ2FjaGUubUxvY2sKK2Jvb2wgQnVmZmVyUG9vbENsaWVudDo6SW1wbDo6c3luY1JlbGVhc2VkKCkgeworICAgIHN0ZDo6bG9ja19ndWFyZDxzdGQ6Om11dGV4PiBsb2NrKG1SZWxlYXNpbmcubUxvY2spOworICAgIGlmIChtUmVsZWFzaW5nLm1SZWxlYXNpbmdJZHMuc2l6ZSgpID4gMCkgeworICAgICAgICBtUmVsZWFzaW5nLm1TdGF0dXNDaGFubmVsLT5wb3N0QnVmZmVyUmVsZWFzZSgKKyAgICAgICAgICAgICAgICBtQ29ubmVjdGlvbklkLCBtUmVsZWFzaW5nLm1SZWxlYXNpbmdJZHMsCisgICAgICAgICAgICAgICAgbVJlbGVhc2luZy5tUmVsZWFzZWRJZHMpOworICAgIH0KKyAgICBpZiAobVJlbGVhc2luZy5tUmVsZWFzZWRJZHMuc2l6ZSgpID4gMCkgeworICAgICAgICBmb3IgKEJ1ZmZlcklkJiBpZDogbVJlbGVhc2luZy5tUmVsZWFzZWRJZHMpIHsKKyAgICAgICAgICAgIEFMT0dWKCJjbGllbnQgcmVsZWFzZSBidWZmZXIgJWxsZCAtICV1IiwgKGxvbmcgbG9uZyltQ29ubmVjdGlvbklkLCBpZCk7CisgICAgICAgICAgICBhdXRvIGZvdW5kID0gbUNhY2hlLm1CdWZmZXJzLmZpbmQoaWQpOworICAgICAgICAgICAgaWYgKGZvdW5kICE9IG1DYWNoZS5tQnVmZmVycy5lbmQoKSkgeworICAgICAgICAgICAgICAgIGlmIChmb3VuZC0+c2Vjb25kLT5vbkNhY2hlUmVsZWFzZSgpKSB7CisgICAgICAgICAgICAgICAgICAgIG1DYWNoZS5kZWNBY3RpdmVfbCgpOworICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIC8vIHNob3VsZCBub3QgaGFwcGVuIQorICAgICAgICAgICAgICAgICAgICBBTE9HVygiY2xpZW50ICVsbGQgY2FjaGUgcmVsZWFzZSBzdGF0dXMgaW5jb25zaXRlbnQhIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgKGxvbmcgbG9uZyltQ29ubmVjdGlvbklkKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIC8vIHNob3VsZCBub3QgaGFwcGVuIQorICAgICAgICAgICAgICAgIEFMT0dXKCJjbGllbnQgJWxsZCBjYWNoZSBzdGF0dXMgaW5jb25zaXRlbnQhIiwgKGxvbmcgbG9uZyltQ29ubmVjdGlvbklkKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBtUmVsZWFzaW5nLm1SZWxlYXNlZElkcy5jbGVhcigpOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgcmV0dXJuIGZhbHNlOworfQorCisvLyBzaG91bGQgaGF2ZSBtQ2FjaGUubUxvY2sKK3ZvaWQgQnVmZmVyUG9vbENsaWVudDo6SW1wbDo6ZXZpY3RDYWNoZXMoYm9vbCBjbGVhckNhY2hlKSB7CisgICAgaW50NjRfdCBub3cgPSBnZXRUaW1lc3RhbXBOb3coKTsKKyAgICBpZiAobm93ID49IG1MYXN0RXZpY3RDYWNoZVVzICsga0NhY2hlVHRsVXMgfHwgY2xlYXJDYWNoZSkgeworICAgICAgICBzaXplX3QgZXZpY3RlZCA9IDA7CisgICAgICAgIGZvciAoYXV0byBpdCA9IG1DYWNoZS5tQnVmZmVycy5iZWdpbigpOyBpdCAhPSBtQ2FjaGUubUJ1ZmZlcnMuZW5kKCk7KSB7CisgICAgICAgICAgICBpZiAoIWl0LT5zZWNvbmQtPmhhc0NhY2hlKCkgJiYgKGl0LT5zZWNvbmQtPmV4cGlyZSgpIHx8IGNsZWFyQ2FjaGUpKSB7CisgICAgICAgICAgICAgICAgaXQgPSBtQ2FjaGUubUJ1ZmZlcnMuZXJhc2UoaXQpOworICAgICAgICAgICAgICAgICsrZXZpY3RlZDsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgKytpdDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBBTE9HVigiY2FjaGUgY291bnQgJWxsZCA6IHRvdGFsICV6dSwgYWN0aXZlICVkLCBldmljdGVkICV6dSIsCisgICAgICAgICAgICAgIChsb25nIGxvbmcpbUNvbm5lY3Rpb25JZCwgbUNhY2hlLm1CdWZmZXJzLnNpemUoKSwgbUNhY2hlLm1BY3RpdmUsIGV2aWN0ZWQpOworICAgICAgICBtTGFzdEV2aWN0Q2FjaGVVcyA9IG5vdzsKKyAgICB9Cit9CisKK1Jlc3VsdFN0YXR1cyBCdWZmZXJQb29sQ2xpZW50OjpJbXBsOjphbGxvY2F0ZUJ1ZmZlckhhbmRsZSgKKyAgICAgICAgY29uc3Qgc3RkOjp2ZWN0b3I8dWludDhfdD4mIHBhcmFtcywgQnVmZmVySWQgKmJ1ZmZlcklkLAorICAgICAgICBuYXRpdmVfaGFuZGxlX3QqKiBoYW5kbGUpIHsKKyAgICBpZiAobUxvY2FsQ29ubmVjdGlvbikgeworICAgICAgICBjb25zdCBuYXRpdmVfaGFuZGxlX3QqIGFsbG9jSGFuZGxlID0gbnVsbHB0cjsKKyAgICAgICAgUmVzdWx0U3RhdHVzIHN0YXR1cyA9IG1Mb2NhbENvbm5lY3Rpb24tPmFsbG9jYXRlKAorICAgICAgICAgICAgICAgIHBhcmFtcywgYnVmZmVySWQsICZhbGxvY0hhbmRsZSk7CisgICAgICAgIGlmIChzdGF0dXMgPT0gUmVzdWx0U3RhdHVzOjpPSykgeworICAgICAgICAgICAgKmhhbmRsZSA9IG5hdGl2ZV9oYW5kbGVfY2xvbmUoYWxsb2NIYW5kbGUpOworICAgICAgICB9CisgICAgICAgIEFMT0dWKCJjbGllbnQgYWxsb2NhdGUgcmVzdWx0ICVsbGQgJWQgOiAldSBjbG9uZSAlcCIsCisgICAgICAgICAgICAgIChsb25nIGxvbmcpbUNvbm5lY3Rpb25JZCwgc3RhdHVzID09IFJlc3VsdFN0YXR1czo6T0ssCisgICAgICAgICAgICAgICpoYW5kbGUgPyAqYnVmZmVySWQgOiAwICwgKmhhbmRsZSk7CisgICAgICAgIHJldHVybiBzdGF0dXM7CisgICAgfQorICAgIHJldHVybiBSZXN1bHRTdGF0dXM6OkNSSVRJQ0FMX0VSUk9SOworfQorCitSZXN1bHRTdGF0dXMgQnVmZmVyUG9vbENsaWVudDo6SW1wbDo6ZmV0Y2hCdWZmZXJIYW5kbGUoCisgICAgICAgIFRyYW5zYWN0aW9uSWQgdHJhbnNhY3Rpb25JZCwgQnVmZmVySWQgYnVmZmVySWQsCisgICAgICAgIG5hdGl2ZV9oYW5kbGVfdCAqKmhhbmRsZSkgeworICAgIHNwPElDb25uZWN0aW9uPiBjb25uZWN0aW9uOworICAgIGlmIChtTG9jYWwpIHsKKyAgICAgICAgY29ubmVjdGlvbiA9IG1Mb2NhbENvbm5lY3Rpb247CisgICAgfSBlbHNlIHsKKyAgICAgICAgY29ubmVjdGlvbiA9IG1SZW1vdGVDb25uZWN0aW9uOworICAgIH0KKyAgICBSZXN1bHRTdGF0dXMgc3RhdHVzOworICAgIFJldHVybjx2b2lkPiB0cmFuc1Jlc3VsdCA9IGNvbm5lY3Rpb24tPmZldGNoKAorICAgICAgICAgICAgdHJhbnNhY3Rpb25JZCwgYnVmZmVySWQsCisgICAgICAgICAgICBbJnN0YXR1cywgJmhhbmRsZV0KKyAgICAgICAgICAgIChSZXN1bHRTdGF0dXMgb3V0U3RhdHVzLCBCdWZmZXIgb3V0QnVmZmVyKSB7CisgICAgICAgICAgICAgICAgc3RhdHVzID0gb3V0U3RhdHVzOworICAgICAgICAgICAgICAgIGlmIChzdGF0dXMgPT0gUmVzdWx0U3RhdHVzOjpPSykgeworICAgICAgICAgICAgICAgICAgICAqaGFuZGxlID0gbmF0aXZlX2hhbmRsZV9jbG9uZSgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdXRCdWZmZXIuYnVmZmVyLmdldE5hdGl2ZUhhbmRsZSgpKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9KTsKKyAgICByZXR1cm4gdHJhbnNSZXN1bHQuaXNPaygpID8gc3RhdHVzIDogUmVzdWx0U3RhdHVzOjpDUklUSUNBTF9FUlJPUjsKK30KKworCitCdWZmZXJQb29sQ2xpZW50OjpCdWZmZXJQb29sQ2xpZW50KGNvbnN0IHNwPEFjY2Vzc29yPiAmYWNjZXNzb3IpIHsKKyAgICBtSW1wbCA9IHN0ZDo6bWFrZV9zaGFyZWQ8SW1wbD4oYWNjZXNzb3IpOworfQorCitCdWZmZXJQb29sQ2xpZW50OjpCdWZmZXJQb29sQ2xpZW50KGNvbnN0IHNwPElBY2Nlc3Nvcj4gJmFjY2Vzc29yKSB7CisgICAgbUltcGwgPSBzdGQ6Om1ha2Vfc2hhcmVkPEltcGw+KGFjY2Vzc29yKTsKK30KKworQnVmZmVyUG9vbENsaWVudDo6fkJ1ZmZlclBvb2xDbGllbnQoKSB7CisgICAgLy8gVE9ETzogaG93IHRvIGhhbmRsZSBvcnBoYW5lZCBidWZmZXJzPworfQorCitib29sIEJ1ZmZlclBvb2xDbGllbnQ6OmlzVmFsaWQoKSB7CisgICAgcmV0dXJuIG1JbXBsICYmIG1JbXBsLT5pc1ZhbGlkKCk7Cit9CisKK2Jvb2wgQnVmZmVyUG9vbENsaWVudDo6aXNMb2NhbCgpIHsKKyAgICByZXR1cm4gbUltcGwgJiYgbUltcGwtPmlzTG9jYWwoKTsKK30KKworYm9vbCBCdWZmZXJQb29sQ2xpZW50Ojppc0FjdGl2ZShpbnQ2NF90ICpsYXN0VHJhbnNhY3Rpb25VcywgYm9vbCBjbGVhckNhY2hlKSB7CisgICAgaWYgKCFpc1ZhbGlkKCkpIHsKKyAgICAgICAgKmxhc3RUcmFuc2FjdGlvblVzID0gMDsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAgICByZXR1cm4gbUltcGwtPmlzQWN0aXZlKGxhc3RUcmFuc2FjdGlvblVzLCBjbGVhckNhY2hlKTsKK30KKworQ29ubmVjdGlvbklkIEJ1ZmZlclBvb2xDbGllbnQ6OmdldENvbm5lY3Rpb25JZCgpIHsKKyAgICBpZiAoaXNWYWxpZCgpKSB7CisgICAgICAgIHJldHVybiBtSW1wbC0+Z2V0Q29ubmVjdGlvbklkKCk7CisgICAgfQorICAgIHJldHVybiAtMTsKK30KKworUmVzdWx0U3RhdHVzIEJ1ZmZlclBvb2xDbGllbnQ6OmdldEFjY2Vzc29yKHNwPElBY2Nlc3Nvcj4gKmFjY2Vzc29yKSB7CisgICAgaWYgKGlzVmFsaWQoKSkgeworICAgICAgICAqYWNjZXNzb3IgPSBtSW1wbC0+Z2V0QWNjZXNzb3IoKTsKKyAgICAgICAgcmV0dXJuIFJlc3VsdFN0YXR1czo6T0s7CisgICAgfQorICAgIHJldHVybiBSZXN1bHRTdGF0dXM6OkNSSVRJQ0FMX0VSUk9SOworfQorCitSZXN1bHRTdGF0dXMgQnVmZmVyUG9vbENsaWVudDo6YWxsb2NhdGUoCisgICAgICAgIGNvbnN0IHN0ZDo6dmVjdG9yPHVpbnQ4X3Q+ICZwYXJhbXMsCisgICAgICAgIG5hdGl2ZV9oYW5kbGVfdCAqKmhhbmRsZSwKKyAgICAgICAgc3RkOjpzaGFyZWRfcHRyPEJ1ZmZlclBvb2xEYXRhPiAqYnVmZmVyKSB7CisgICAgaWYgKGlzVmFsaWQoKSkgeworICAgICAgICByZXR1cm4gbUltcGwtPmFsbG9jYXRlKHBhcmFtcywgaGFuZGxlLCBidWZmZXIpOworICAgIH0KKyAgICByZXR1cm4gUmVzdWx0U3RhdHVzOjpDUklUSUNBTF9FUlJPUjsKK30KKworUmVzdWx0U3RhdHVzIEJ1ZmZlclBvb2xDbGllbnQ6OnJlY2VpdmUoCisgICAgICAgIFRyYW5zYWN0aW9uSWQgdHJhbnNhY3Rpb25JZCwgQnVmZmVySWQgYnVmZmVySWQsIGludDY0X3QgdGltZXN0YW1wVXMsCisgICAgICAgIG5hdGl2ZV9oYW5kbGVfdCAqKmhhbmRsZSwgc3RkOjpzaGFyZWRfcHRyPEJ1ZmZlclBvb2xEYXRhPiAqYnVmZmVyKSB7CisgICAgaWYgKGlzVmFsaWQoKSkgeworICAgICAgICByZXR1cm4gbUltcGwtPnJlY2VpdmUodHJhbnNhY3Rpb25JZCwgYnVmZmVySWQsIHRpbWVzdGFtcFVzLCBoYW5kbGUsIGJ1ZmZlcik7CisgICAgfQorICAgIHJldHVybiBSZXN1bHRTdGF0dXM6OkNSSVRJQ0FMX0VSUk9SOworfQorCitSZXN1bHRTdGF0dXMgQnVmZmVyUG9vbENsaWVudDo6cG9zdFNlbmQoCisgICAgICAgIENvbm5lY3Rpb25JZCByZWNlaXZlcklkLAorICAgICAgICBjb25zdCBzdGQ6OnNoYXJlZF9wdHI8QnVmZmVyUG9vbERhdGE+ICZidWZmZXIsCisgICAgICAgIFRyYW5zYWN0aW9uSWQgKnRyYW5zYWN0aW9uSWQsCisgICAgICAgIGludDY0X3QgKnRpbWVzdGFtcFVzKSB7CisgICAgaWYgKGlzVmFsaWQoKSkgeworICAgICAgICBib29sIHJlc3VsdCA9IG1JbXBsLT5wb3N0U2VuZCgKKyAgICAgICAgICAgICAgICBidWZmZXItPm1JZCwgcmVjZWl2ZXJJZCwgdHJhbnNhY3Rpb25JZCwgdGltZXN0YW1wVXMpOworICAgICAgICByZXR1cm4gcmVzdWx0ID8gUmVzdWx0U3RhdHVzOjpPSyA6IFJlc3VsdFN0YXR1czo6Q1JJVElDQUxfRVJST1I7CisgICAgfQorICAgIHJldHVybiBSZXN1bHRTdGF0dXM6OkNSSVRJQ0FMX0VSUk9SOworfQorCit9ICAvLyBuYW1lc3BhY2UgaW1wbGVtZW50YXRpb24KK30gIC8vIG5hbWVzcGFjZSBWMV8wCit9ICAvLyBuYW1lc3BhY2UgYnVmZmVycG9vbAorfSAgLy8gbmFtZXNwYWNlIG1lZGlhCit9ICAvLyBuYW1lc3BhY2UgaGFyZHdhcmUKK30gIC8vIG5hbWVzcGFjZSBhbmRyb2lkCmRpZmYgLS1naXQgYS9tZWRpYS9idWZmZXJwb29sLzEuMC9CdWZmZXJQb29sQ2xpZW50LmggYi9tZWRpYS9idWZmZXJwb29sLzEuMC9CdWZmZXJQb29sQ2xpZW50LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTc3ZWZlZAotLS0gL2Rldi9udWxsCisrKyBiL21lZGlhL2J1ZmZlcnBvb2wvMS4wL0J1ZmZlclBvb2xDbGllbnQuaApAQCAtMCwwICsxLDEwMiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxOCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCisKKyNpZm5kZWYgQU5EUk9JRF9IQVJEV0FSRV9NRURJQV9CVUZGRVJQT09MX1YxXzBfQlVGRkVSUE9PTENMSUVOVF9ICisjZGVmaW5lIEFORFJPSURfSEFSRFdBUkVfTUVESUFfQlVGRkVSUE9PTF9WMV8wX0JVRkZFUlBPT0xDTElFTlRfSAorCisjaW5jbHVkZSA8bWVtb3J5PgorI2luY2x1ZGUgPGFuZHJvaWQvaGFyZHdhcmUvbWVkaWEvYnVmZmVycG9vbC8xLjAvSUFjY2Vzc29yLmg+CisjaW5jbHVkZSA8YW5kcm9pZC9oYXJkd2FyZS9tZWRpYS9idWZmZXJwb29sLzEuMC9JQ29ubmVjdGlvbi5oPgorI2luY2x1ZGUgPGJ1ZmZlcnBvb2wvQnVmZmVyUG9vbFR5cGVzLmg+CisjaW5jbHVkZSA8Y3V0aWxzL25hdGl2ZV9oYW5kbGUuaD4KKyNpbmNsdWRlICJBY2Nlc3Nvci5oIgorCituYW1lc3BhY2UgYW5kcm9pZCB7CituYW1lc3BhY2UgaGFyZHdhcmUgeworbmFtZXNwYWNlIG1lZGlhIHsKK25hbWVzcGFjZSBidWZmZXJwb29sIHsKK25hbWVzcGFjZSBWMV8wIHsKK25hbWVzcGFjZSBpbXBsZW1lbnRhdGlvbiB7CisKK3VzaW5nIDo6YW5kcm9pZDo6aGFyZHdhcmU6Om1lZGlhOjpidWZmZXJwb29sOjpWMV8wOjpJQWNjZXNzb3I7Cit1c2luZyA6OmFuZHJvaWQ6OmhhcmR3YXJlOjptZWRpYTo6YnVmZmVycG9vbDo6VjFfMDo6SUNvbm5lY3Rpb247Cit1c2luZyA6OmFuZHJvaWQ6OmhhcmR3YXJlOjptZWRpYTo6YnVmZmVycG9vbDo6VjFfMDo6UmVzdWx0U3RhdHVzOwordXNpbmcgOjphbmRyb2lkOjpzcDsKKworLyoqCisgKiBBIGJ1ZmZlciBwb29sIGNsaWVudCBmb3IgYSBidWZmZXIgcG9vbC4gRm9yIGEgc3BlY2lmaWMgYnVmZmVyIHBvb2wsIGF0IG1vc3QKKyAqIG9uZSBidWZmZXIgcG9vbCBjbGllbnQgZXhpc3RzIHBlciBwcm9jZXNzLiBUaGlzIGNsYXNzIHdpbGwgbm90IGJlIGV4cG9zZWQKKyAqIG91dHNpZGUuIEEgYnVmZmVyIHBvb2wgY2xpZW50IHdpbGwgYmUgdXNlZCB2aWEgQ2xpZW50TWFuYWdlci4KKyAqLworY2xhc3MgQnVmZmVyUG9vbENsaWVudCB7CitwdWJsaWM6CisgICAgLyoqCisgICAgICogQ3JlYXRlcyBhIGJ1ZmZlciBwb29sIGNsaWVudCBmcm9tIGEgbG9jYWwgYnVmZmVyIHBvb2wKKyAgICAgKiAodmlhIENsaWVudE1hbmFnZXIjY3JlYXRlKS4KKyAgICAgKi8KKyAgICBleHBsaWNpdCBCdWZmZXJQb29sQ2xpZW50KGNvbnN0IHNwPEFjY2Vzc29yPiAmYWNjZXNzb3IpOworCisgICAgLyoqCisgICAgICogQ3JlYXRlcyBhIGJ1ZmZlciBwb29sIGNsaWVudCBmcm9tIGEgcmVtb3RlIGJ1ZmZlciBwb29sCisgICAgICogKHZpYSBDbGllbnRNYW5hZ2VyI3JlZ2lzdGVyU2VuZGVyKS4KKyAgICAgKiBOb3RlOiBBIGJ1ZmZlciBwb29sIGNsaWVudCBjcmVhdGVkIHdpdGggcmVtb3RlIGJ1ZmZlciBwb29sIGNhbm5vdAorICAgICAqIGFsbG9jYXRlIGEgYnVmZmVyLgorICAgICAqLworICAgIGV4cGxpY2l0IEJ1ZmZlclBvb2xDbGllbnQoY29uc3Qgc3A8SUFjY2Vzc29yPiAmYWNjZXNzb3IpOworCisgICAgLyoqIERlc3RydWN0cyBhIGJ1ZmZlciBwb29sIGNsaWVudC4gKi8KKyAgICB+QnVmZmVyUG9vbENsaWVudCgpOworCitwcml2YXRlOgorICAgIGJvb2wgaXNWYWxpZCgpOworCisgICAgYm9vbCBpc0xvY2FsKCk7CisKKyAgICBib29sIGlzQWN0aXZlKGludDY0X3QgKmxhc3RUcmFuc2FjdGlvblVzLCBib29sIGNsZWFyQ2FjaGUpOworCisgICAgQ29ubmVjdGlvbklkIGdldENvbm5lY3Rpb25JZCgpOworCisgICAgUmVzdWx0U3RhdHVzIGdldEFjY2Vzc29yKHNwPElBY2Nlc3Nvcj4gKmFjY2Vzc29yKTsKKworICAgIFJlc3VsdFN0YXR1cyBhbGxvY2F0ZShjb25zdCBzdGQ6OnZlY3Rvcjx1aW50OF90PiAmcGFyYW1zLAorICAgICAgICAgICAgICAgICAgICAgICAgICBuYXRpdmVfaGFuZGxlX3QgKipoYW5kbGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZDo6c2hhcmVkX3B0cjxCdWZmZXJQb29sRGF0YT4gKmJ1ZmZlcik7CisKKyAgICBSZXN1bHRTdGF0dXMgcmVjZWl2ZShUcmFuc2FjdGlvbklkIHRyYW5zYWN0aW9uSWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgQnVmZmVySWQgYnVmZmVySWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgaW50NjRfdCB0aW1lc3RhbXBVcywKKyAgICAgICAgICAgICAgICAgICAgICAgICBuYXRpdmVfaGFuZGxlX3QgKipoYW5kbGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgc3RkOjpzaGFyZWRfcHRyPEJ1ZmZlclBvb2xEYXRhPiAqYnVmZmVyKTsKKworICAgIFJlc3VsdFN0YXR1cyBwb3N0U2VuZChDb25uZWN0aW9uSWQgcmVjZWl2ZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0ZDo6c2hhcmVkX3B0cjxCdWZmZXJQb29sRGF0YT4gJmJ1ZmZlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgVHJhbnNhY3Rpb25JZCAqdHJhbnNhY3Rpb25JZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgaW50NjRfdCAqdGltZXN0YW1wVXMpOworCisgICAgY2xhc3MgSW1wbDsKKyAgICBzdGQ6OnNoYXJlZF9wdHI8SW1wbD4gbUltcGw7CisKKyAgICBmcmllbmQgc3RydWN0IENsaWVudE1hbmFnZXI7Cit9OworCit9ICAvLyBuYW1lc3BhY2UgaW1wbGVtZW50YXRpb24KK30gIC8vIG5hbWVzcGFjZSBWMV8wCit9ICAvLyBuYW1lc3BhY2UgYnVmZmVycG9vbAorfSAgLy8gbmFtZXNwYWNlIG1lZGlhCit9ICAvLyBuYW1lc3BhY2UgaGFyZHdhcmUKK30gIC8vIG5hbWVzcGFjZSBhbmRyb2lkCisKKyNlbmRpZiAgLy8gQU5EUk9JRF9IQVJEV0FSRV9NRURJQV9CVUZGRVJQT09MX1YxXzBfQlVGRkVSUE9PTENMSUVOVF9ICmRpZmYgLS1naXQgYS9tZWRpYS9idWZmZXJwb29sLzEuMC9CdWZmZXJTdGF0dXMuY3BwIGIvbWVkaWEvYnVmZmVycG9vbC8xLjAvQnVmZmVyU3RhdHVzLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNjlhYmNlCi0tLSAvZGV2L251bGwKKysrIGIvbWVkaWEvYnVmZmVycG9vbC8xLjAvQnVmZmVyU3RhdHVzLmNwcApAQCAtMCwwICsxLDE5MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxOCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCisKKyNkZWZpbmUgTE9HX1RBRyAiQnVmZmVyUG9vbFN0YXR1cyIKKy8vI2RlZmluZSBMT0dfTkRFQlVHIDAKKworI2luY2x1ZGUgPHRpbWUuaD4KKyNpbmNsdWRlICJCdWZmZXJTdGF0dXMuaCIKKworbmFtZXNwYWNlIGFuZHJvaWQgeworbmFtZXNwYWNlIGhhcmR3YXJlIHsKK25hbWVzcGFjZSBtZWRpYSB7CituYW1lc3BhY2UgYnVmZmVycG9vbCB7CituYW1lc3BhY2UgVjFfMCB7CituYW1lc3BhY2UgaW1wbGVtZW50YXRpb24geworCitpbnQ2NF90IGdldFRpbWVzdGFtcE5vdygpIHsKKyAgICBpbnQ2NF90IHN0YW1wOworICAgIHN0cnVjdCB0aW1lc3BlYyB0czsKKyAgICAvLyBUT0RPOiBDTE9DS19NT05PVE9OSUNfQ09BUlNFPworICAgIGNsb2NrX2dldHRpbWUoQ0xPQ0tfTU9OT1RPTklDLCAmdHMpOworICAgIHN0YW1wID0gdHMudHZfbnNlYyAvIDEwMDA7CisgICAgc3RhbXAgKz0gKHRzLnR2X3NlYyAqIDEwMDAwMDBMTCk7CisgICAgcmV0dXJuIHN0YW1wOworfQorCitzdGF0aWMgY29uc3RleHByIGludCBrTnVtRWxlbWVudHNJblF1ZXVlID0gMTAyNCoxNjsKK3N0YXRpYyBjb25zdGV4cHIgaW50IGtNaW5FbGVtZW50c1RvU3luY0luUXVldWUgPSAxMjg7CisKK1Jlc3VsdFN0YXR1cyBCdWZmZXJTdGF0dXNPYnNlcnZlcjo6b3BlbigKKyAgICAgICAgQ29ubmVjdGlvbklkIGlkLCBjb25zdCBRdWV1ZURlc2NyaXB0b3IqKiBmbXFEZXNjUHRyKSB7CisgICAgaWYgKG1CdWZmZXJTdGF0dXNRdWV1ZXMuZmluZChpZCkgIT0gbUJ1ZmZlclN0YXR1c1F1ZXVlcy5lbmQoKSkgeworICAgICAgICAvLyBUT0RPOiBpZCBjb2xsaXNpb24gbG9nPworICAgICAgICByZXR1cm4gUmVzdWx0U3RhdHVzOjpDUklUSUNBTF9FUlJPUjsKKyAgICB9CisgICAgc3RkOjp1bmlxdWVfcHRyPEJ1ZmZlclN0YXR1c1F1ZXVlPiBxdWV1ZSA9CisgICAgICAgICAgICBzdGQ6Om1ha2VfdW5pcXVlPEJ1ZmZlclN0YXR1c1F1ZXVlPihrTnVtRWxlbWVudHNJblF1ZXVlKTsKKyAgICBpZiAoIXF1ZXVlIHx8IHF1ZXVlLT5pc1ZhbGlkKCkgPT0gZmFsc2UpIHsKKyAgICAgICAgKmZtcURlc2NQdHIgPSBudWxscHRyOworICAgICAgICByZXR1cm4gUmVzdWx0U3RhdHVzOjpOT19NRU1PUlk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgKmZtcURlc2NQdHIgPSBxdWV1ZS0+Z2V0RGVzYygpOworICAgIH0KKyAgICBhdXRvIHJlc3VsdCA9IG1CdWZmZXJTdGF0dXNRdWV1ZXMuaW5zZXJ0KAorICAgICAgICAgICAgc3RkOjptYWtlX3BhaXIoaWQsIHN0ZDo6bW92ZShxdWV1ZSkpKTsKKyAgICBpZiAoIXJlc3VsdC5zZWNvbmQpIHsKKyAgICAgICAgKmZtcURlc2NQdHIgPSBudWxscHRyOworICAgICAgICByZXR1cm4gUmVzdWx0U3RhdHVzOjpOT19NRU1PUlk7CisgICAgfQorICAgIHJldHVybiBSZXN1bHRTdGF0dXM6Ok9LOworfQorCitSZXN1bHRTdGF0dXMgQnVmZmVyU3RhdHVzT2JzZXJ2ZXI6OmNsb3NlKENvbm5lY3Rpb25JZCBpZCkgeworICAgIGlmIChtQnVmZmVyU3RhdHVzUXVldWVzLmZpbmQoaWQpID09IG1CdWZmZXJTdGF0dXNRdWV1ZXMuZW5kKCkpIHsKKyAgICAgICAgcmV0dXJuIFJlc3VsdFN0YXR1czo6Q1JJVElDQUxfRVJST1I7CisgICAgfQorICAgIG1CdWZmZXJTdGF0dXNRdWV1ZXMuZXJhc2UoaWQpOworICAgIHJldHVybiBSZXN1bHRTdGF0dXM6Ok9LOworfQorCit2b2lkIEJ1ZmZlclN0YXR1c09ic2VydmVyOjpnZXRCdWZmZXJTdGF0dXNDaGFuZ2VzKHN0ZDo6dmVjdG9yPEJ1ZmZlclN0YXR1c01lc3NhZ2U+ICZtZXNzYWdlcykgeworICAgIGZvciAoYXV0byBpdCA9IG1CdWZmZXJTdGF0dXNRdWV1ZXMuYmVnaW4oKTsgaXQgIT0gbUJ1ZmZlclN0YXR1c1F1ZXVlcy5lbmQoKTsgKytpdCkgeworICAgICAgICBCdWZmZXJTdGF0dXNNZXNzYWdlIG1lc3NhZ2U7CisgICAgICAgIHNpemVfdCBhdmFpbCA9IGl0LT5zZWNvbmQtPmF2YWlsYWJsZVRvUmVhZCgpOworICAgICAgICB3aGlsZSAoYXZhaWwgPiAwKSB7CisgICAgICAgICAgICBpZiAoIWl0LT5zZWNvbmQtPnJlYWQoJm1lc3NhZ2UsIDEpKSB7CisgICAgICAgICAgICAgICAgLy8gU2luY2UgYXZhbGlhYmxlICMgb2YgcmVhZHMgYXJlIGFscmVhZHkgY29uZmlybWVkLAorICAgICAgICAgICAgICAgIC8vIHRoaXMgc2hvdWxkIG5vdCBoYXBwZW4uCisgICAgICAgICAgICAgICAgLy8gVE9ETzogZXJyb3IgaGFuZGxpbmcgKHNwdXJpb3VzIGNsaWVudD8pCisgICAgICAgICAgICAgICAgQUxPR1coIkZNUSBtZXNzYWdlIGNhbm5vdCBiZSByZWFkIGZyb20gJWxsZCIsIChsb25nIGxvbmcpaXQtPmZpcnN0KTsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisgICAgICAgICAgICBtZXNzYWdlLmNvbm5lY3Rpb25JZCA9IGl0LT5maXJzdDsKKyAgICAgICAgICAgIG1lc3NhZ2VzLnB1c2hfYmFjayhtZXNzYWdlKTsKKyAgICAgICAgICAgIC0tYXZhaWw7CisgICAgICAgIH0KKyAgICB9Cit9CisKK0J1ZmZlclN0YXR1c0NoYW5uZWw6OkJ1ZmZlclN0YXR1c0NoYW5uZWwoCisgICAgICAgIGNvbnN0IFF1ZXVlRGVzY3JpcHRvciAmZm1xRGVzYykgeworICAgIHN0ZDo6dW5pcXVlX3B0cjxCdWZmZXJTdGF0dXNRdWV1ZT4gcXVldWUgPQorICAgICAgICAgICAgc3RkOjptYWtlX3VuaXF1ZTxCdWZmZXJTdGF0dXNRdWV1ZT4oZm1xRGVzYyk7CisgICAgaWYgKCFxdWV1ZSB8fCBxdWV1ZS0+aXNWYWxpZCgpID09IGZhbHNlKSB7CisgICAgICAgIG1WYWxpZCA9IGZhbHNlOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIG1WYWxpZCAgPSB0cnVlOworICAgIG1CdWZmZXJTdGF0dXNRdWV1ZSA9IHN0ZDo6bW92ZShxdWV1ZSk7Cit9CisKK2Jvb2wgQnVmZmVyU3RhdHVzQ2hhbm5lbDo6aXNWYWxpZCgpIHsKKyAgICByZXR1cm4gbVZhbGlkOworfQorCitib29sIEJ1ZmZlclN0YXR1c0NoYW5uZWw6Om5lZWRzU3luYygpIHsKKyAgICBpZiAobVZhbGlkKSB7CisgICAgICAgIHNpemVfdCBhdmFpbCA9IG1CdWZmZXJTdGF0dXNRdWV1ZS0+YXZhaWxhYmxlVG9Xcml0ZSgpOworICAgICAgICByZXR1cm4gYXZhaWwgKyBrTWluRWxlbWVudHNUb1N5bmNJblF1ZXVlIDwga051bUVsZW1lbnRzSW5RdWV1ZTsKKyAgICB9CisgICAgcmV0dXJuIGZhbHNlOworfQorCit2b2lkIEJ1ZmZlclN0YXR1c0NoYW5uZWw6OnBvc3RCdWZmZXJSZWxlYXNlKAorICAgICAgICBDb25uZWN0aW9uSWQgY29ubmVjdGlvbklkLAorICAgICAgICBzdGQ6Omxpc3Q8QnVmZmVySWQ+ICZwZW5kaW5nLCBzdGQ6Omxpc3Q8QnVmZmVySWQ+ICZwb3N0ZWQpIHsKKyAgICBpZiAobVZhbGlkICYmIHBlbmRpbmcuc2l6ZSgpID4gMCkgeworICAgICAgICBzaXplX3QgYXZhaWwgPSBtQnVmZmVyU3RhdHVzUXVldWUtPmF2YWlsYWJsZVRvV3JpdGUoKTsKKyAgICAgICAgYXZhaWwgPSBzdGQ6Om1pbihhdmFpbCwgcGVuZGluZy5zaXplKCkpOworICAgICAgICBCdWZmZXJTdGF0dXNNZXNzYWdlIG1lc3NhZ2U7CisgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwIDsgaSA8IGF2YWlsOyArK2kpIHsKKyAgICAgICAgICAgIEJ1ZmZlcklkIGlkID0gcGVuZGluZy5mcm9udCgpOworICAgICAgICAgICAgbWVzc2FnZS5uZXdTdGF0dXMgPSBCdWZmZXJTdGF0dXM6Ok5PVF9VU0VEOworICAgICAgICAgICAgbWVzc2FnZS5idWZmZXJJZCA9IGlkOworICAgICAgICAgICAgbWVzc2FnZS5jb25uZWN0aW9uSWQgPSBjb25uZWN0aW9uSWQ7CisgICAgICAgICAgICBpZiAoIW1CdWZmZXJTdGF0dXNRdWV1ZS0+d3JpdGUoJm1lc3NhZ2UsIDEpKSB7CisgICAgICAgICAgICAgICAgLy8gU2luY2UgYXZhbGlhYmxlICMgb2Ygd3JpdGVzIGFyZSBhbHJlYWR5IGNvbmZpcm1lZCwKKyAgICAgICAgICAgICAgICAvLyB0aGlzIHNob3VsZCBub3QgaGFwcGVuLgorICAgICAgICAgICAgICAgIC8vIFRPRE86IGVycm9yIGhhbmRpbmc/CisgICAgICAgICAgICAgICAgQUxPR1coIkZNUSBtZXNzYWdlIGNhbm5vdCBiZSBzZW50IGZyb20gJWxsZCIsIChsb25nIGxvbmcpY29ubmVjdGlvbklkKTsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisgICAgICAgICAgICBwZW5kaW5nLnBvcF9mcm9udCgpOworICAgICAgICAgICAgcG9zdGVkLnB1c2hfYmFjayhpZCk7CisgICAgICAgIH0KKyAgICB9Cit9CisKK2Jvb2wgQnVmZmVyU3RhdHVzQ2hhbm5lbDo6cG9zdEJ1ZmZlclN0YXR1c01lc3NhZ2UoCisgICAgICAgIFRyYW5zYWN0aW9uSWQgdHJhbnNhY3Rpb25JZCwgQnVmZmVySWQgYnVmZmVySWQsCisgICAgICAgIEJ1ZmZlclN0YXR1cyBzdGF0dXMsIENvbm5lY3Rpb25JZCBjb25uZWN0aW9uSWQsIENvbm5lY3Rpb25JZCB0YXJnZXRJZCwKKyAgICAgICAgc3RkOjpsaXN0PEJ1ZmZlcklkPiAmcGVuZGluZywgc3RkOjpsaXN0PEJ1ZmZlcklkPiAmcG9zdGVkKSB7CisgICAgaWYgKG1WYWxpZCkgeworICAgICAgICBzaXplX3QgYXZhaWwgPSBtQnVmZmVyU3RhdHVzUXVldWUtPmF2YWlsYWJsZVRvV3JpdGUoKTsKKyAgICAgICAgc2l6ZV90IG51bVBlbmRpbmcgPSBwZW5kaW5nLnNpemUoKTsKKyAgICAgICAgaWYgKGF2YWlsID49IG51bVBlbmRpbmcgKyAxKSB7CisgICAgICAgICAgICBCdWZmZXJTdGF0dXNNZXNzYWdlIHJlbGVhc2UsIG1lc3NhZ2U7CisgICAgICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG51bVBlbmRpbmc7ICsraSkgeworICAgICAgICAgICAgICAgIEJ1ZmZlcklkIGlkID0gcGVuZGluZy5mcm9udCgpOworICAgICAgICAgICAgICAgIHJlbGVhc2UubmV3U3RhdHVzID0gQnVmZmVyU3RhdHVzOjpOT1RfVVNFRDsKKyAgICAgICAgICAgICAgICByZWxlYXNlLmJ1ZmZlcklkID0gaWQ7CisgICAgICAgICAgICAgICAgcmVsZWFzZS5jb25uZWN0aW9uSWQgPSBjb25uZWN0aW9uSWQ7CisgICAgICAgICAgICAgICAgaWYgKCFtQnVmZmVyU3RhdHVzUXVldWUtPndyaXRlKCZyZWxlYXNlLCAxKSkgeworICAgICAgICAgICAgICAgICAgICAvLyBTaW5jZSBhdmFsaWFibGUgIyBvZiB3cml0ZXMgYXJlIGFscmVhZHkgY29uZmlybWVkLAorICAgICAgICAgICAgICAgICAgICAvLyB0aGlzIHNob3VsZCBub3QgaGFwcGVuLgorICAgICAgICAgICAgICAgICAgICAvLyBUT0RPOiBlcnJvciBoYW5kbGluZz8KKyAgICAgICAgICAgICAgICAgICAgQUxPR1coIkZNUSBtZXNzYWdlIGNhbm5vdCBiZSBzZW50IGZyb20gJWxsZCIsIChsb25nIGxvbmcpY29ubmVjdGlvbklkKTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBwZW5kaW5nLnBvcF9mcm9udCgpOworICAgICAgICAgICAgICAgIHBvc3RlZC5wdXNoX2JhY2soaWQpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgbWVzc2FnZS50cmFuc2FjdGlvbklkID0gdHJhbnNhY3Rpb25JZDsKKyAgICAgICAgICAgIG1lc3NhZ2UuYnVmZmVySWQgPSBidWZmZXJJZDsKKyAgICAgICAgICAgIG1lc3NhZ2UubmV3U3RhdHVzID0gc3RhdHVzOworICAgICAgICAgICAgbWVzc2FnZS5jb25uZWN0aW9uSWQgPSBjb25uZWN0aW9uSWQ7CisgICAgICAgICAgICBtZXNzYWdlLnRhcmdldENvbm5lY3Rpb25JZCA9IHRhcmdldElkOworICAgICAgICAgICAgLy8gVE9ETyA6IHRpbWVzYXRhbXAKKyAgICAgICAgICAgIG1lc3NhZ2UudGltZXN0YW1wVXMgPSAwOworICAgICAgICAgICAgaWYgKCFtQnVmZmVyU3RhdHVzUXVldWUtPndyaXRlKCZtZXNzYWdlLCAxKSkgeworICAgICAgICAgICAgICAgIC8vIFNpbmNlIGF2YWxpYWJsZSAjIG9mIHdyaXRlcyBhcmUgYWxyZWFkeSBjb25maXJtZWQsCisgICAgICAgICAgICAgICAgLy8gdGhpcyBzaG91bGQgbm90IGhhcHBlbi4KKyAgICAgICAgICAgICAgICBBTE9HVygiRk1RIG1lc3NhZ2UgY2Fubm90IGJlIHNlbnQgZnJvbSAlbGxkIiwgKGxvbmcgbG9uZyljb25uZWN0aW9uSWQpOworICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9CisgICAgfQorICAgIHJldHVybiBmYWxzZTsKK30KKworfSAgLy8gbmFtZXNwYWNlIGltcGxlbWVudGF0aW9uCit9ICAvLyBuYW1lc3BhY2UgVjFfMAorfSAgLy8gbmFtZXNwYWNlIGJ1ZmZlcnBvb2wKK30gIC8vIG5hbWVzcGFjZSBtZWRpYQorfSAgLy8gbmFtZXNwYWNlIGhhcmR3YXJlCit9ICAvLyBuYW1lc3BhY2UgYW5kcm9pZAorCmRpZmYgLS1naXQgYS9tZWRpYS9idWZmZXJwb29sLzEuMC9CdWZmZXJTdGF0dXMuaCBiL21lZGlhL2J1ZmZlcnBvb2wvMS4wL0J1ZmZlclN0YXR1cy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmExOGE5MjEKLS0tIC9kZXYvbnVsbAorKysgYi9tZWRpYS9idWZmZXJwb29sLzEuMC9CdWZmZXJTdGF0dXMuaApAQCAtMCwwICsxLDE0MyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxOCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCisKKyNpZm5kZWYgQU5EUk9JRF9IQVJEV0FSRV9NRURJQV9CVUZGRVJQT09MX1YxXzBfQlVGRkVSU1RBVFVTX0gKKyNkZWZpbmUgQU5EUk9JRF9IQVJEV0FSRV9NRURJQV9CVUZGRVJQT09MX1YxXzBfQlVGRkVSU1RBVFVTX0gKKworI2luY2x1ZGUgPGFuZHJvaWQvaGFyZHdhcmUvbWVkaWEvYnVmZmVycG9vbC8xLjAvdHlwZXMuaD4KKyNpbmNsdWRlIDxidWZmZXJwb29sL0J1ZmZlclBvb2xUeXBlcy5oPgorI2luY2x1ZGUgPGZtcS9NZXNzYWdlUXVldWUuaD4KKyNpbmNsdWRlIDxoaWRsL01RRGVzY3JpcHRvci5oPgorI2luY2x1ZGUgPGhpZGwvU3RhdHVzLmg+CisjaW5jbHVkZSA8bWVtb3J5PgorI2luY2x1ZGUgPG11dGV4PgorI2luY2x1ZGUgPHZlY3Rvcj4KKyNpbmNsdWRlIDxsaXN0PgorCituYW1lc3BhY2UgYW5kcm9pZCB7CituYW1lc3BhY2UgaGFyZHdhcmUgeworbmFtZXNwYWNlIG1lZGlhIHsKK25hbWVzcGFjZSBidWZmZXJwb29sIHsKK25hbWVzcGFjZSBWMV8wIHsKK25hbWVzcGFjZSBpbXBsZW1lbnRhdGlvbiB7CisKKy8qKiBSZXR1cm5zIG1vbm90b25pYyB0aW1lc3RhbXAgaW4gVXMgc2luY2UgZml4ZWQgcG9pbnQgaW4gdGltZS4gKi8KK2ludDY0X3QgZ2V0VGltZXN0YW1wTm93KCk7CisKKy8qKgorICogQSBjb2xsZWN0aW9uIG9mIEZNUSBmb3IgYSBidWZmZXIgcG9vbC4gYnVmZmVyIG93bmVyc2hpcC9zdGF0dXMgY2hhbmdlCisgKiBtZXNzYWdlcyBhcmUgc2VudCB2aWEgdGhlIEZNUXMgZnJvbSB0aGUgY2xpZW50cy4KKyAqLworY2xhc3MgQnVmZmVyU3RhdHVzT2JzZXJ2ZXIgeworcHJpdmF0ZToKKyAgICBzdGQ6Om1hcDxDb25uZWN0aW9uSWQsIHN0ZDo6dW5pcXVlX3B0cjxCdWZmZXJTdGF0dXNRdWV1ZT4+CisgICAgICAgICAgICBtQnVmZmVyU3RhdHVzUXVldWVzOworCitwdWJsaWM6CisgICAgLyoqIENyZWF0ZXMgYW4gRk1RIGZvciB0aGUgc3BlY2lmaWVkIGNvbm5lY3Rpb24oY2xpZW50KS4KKyAgICAgKgorICAgICAqIEBwYXJhbSBjb25uZWN0aW9uSWQgIGNvbm5lY3Rpb24gSWQgb2YgdGhlIHNwZWNpZmllZCBjbGllbnQuCisgICAgICogQHBhcmFtIGZtcURlc2NQdHIgICAgZG91YmxlIHB0ciBvZiBjcmVhdGVkIEZNUSdzIGRlc2NyaXB0b3IuCisgICAgICoKKyAgICAgKiBAcmV0dXJuIE9LIGlmIEZNUSBpcyBjcmVhdGVkIHN1Y2Nlc3NmdWxseS4KKyAgICAgKiAgICAgICAgIE5PX01FTU9SWSB3aGVuIHRoZXJlIGlzIG5vIG1lbW9yeS4KKyAgICAgKiAgICAgICAgIENSSVRJQ0FMX0VSUk9SIG90aGVyd2lzZS4KKyAgICAgKi8KKyAgICBSZXN1bHRTdGF0dXMgb3BlbihDb25uZWN0aW9uSWQgaWQsIGNvbnN0IFF1ZXVlRGVzY3JpcHRvcioqIGZtcURlc2NQdHIpOworCisgICAgLyoqIENsb3NlcyBhbiBGTVEgZm9yIHRoZSBzcGVjaWZpZWQgY29ubmVjdGlvbihjbGllbnQpLgorICAgICAqCisgICAgICogQHBhcmFtIGNvbm5lY3Rpb25JZCAgY29ubmVjdGlvbiBJZCBvZiB0aGUgc3BlY2lmaWVkIGNsaWVudC4KKyAgICAgKgorICAgICAqIEByZXR1cm4gT0sgaWYgdGhlIHNwZWNpZmllZCBjb25uZWN0aW9uIGlzIGNsb3NlZCBzdWNjZXNzZnVsbHkuCisgICAgICogICAgICAgICBDUklUSUNBTF9FUlJPUiBvdGhlcndpc2UuCisgICAgICovCisgICAgUmVzdWx0U3RhdHVzIGNsb3NlKENvbm5lY3Rpb25JZCBpZCk7CisKKyAgICAvKiogUmV0cmlldmVzIGFsbCBwZW5kaW5nIEZNUSBidWZmZXIgc3RhdHVzIG1lc3NhZ2VzIGZyb20gY2xpZW50cy4KKyAgICAgKgorICAgICAqIEBwYXJhbSBtZXNzYWdlcyAgcmV0cmlldmVkIHBlbmRpbmcgbWVzc2FnZXMuCisgICAgICovCisgICAgdm9pZCBnZXRCdWZmZXJTdGF0dXNDaGFuZ2VzKHN0ZDo6dmVjdG9yPEJ1ZmZlclN0YXR1c01lc3NhZ2U+ICZtZXNzYWdlcyk7Cit9OworCisvKioKKyAqIEFuIEZNUSBmb3IgYSBidWZmZXIgcG9vbCBjbGllbnQuIEJ1ZmZlciBvd25lcnNoaXAvc3RhdHVzIGNoYW5nZSBtZXNzYWdlcworICogYXJlIHNlbnQgdmlhIHRoZSBmbXEgdG8gdGhlIGJ1ZmZlciBwb29sLgorICovCitjbGFzcyBCdWZmZXJTdGF0dXNDaGFubmVsIHsKK3ByaXZhdGU6CisgICAgYm9vbCBtVmFsaWQ7CisgICAgc3RkOjp1bmlxdWVfcHRyPEJ1ZmZlclN0YXR1c1F1ZXVlPiBtQnVmZmVyU3RhdHVzUXVldWU7CisKK3B1YmxpYzoKKyAgICAvKioKKyAgICAgKiBDb25uZWN0cyB0byBhbiBGTVEgZnJvbSBhIGRlc2NyaXB0b3Igb2YgdGhlIGNyZWF0ZWQgRk1RLgorICAgICAqCisgICAgICogQHBhcmFtIGZtcURlc2MgICBEZXNjcmlwdG9yIG9mIHRoZSBjcmVhdGVkIEZNUS4KKyAgICAgKi8KKyAgICBCdWZmZXJTdGF0dXNDaGFubmVsKGNvbnN0IFF1ZXVlRGVzY3JpcHRvciAmZm1xRGVzYyk7CisKKyAgICAvKiogUmV0dXJucyB3aGV0aGVyIHRoZSBGTVEgaXMgY29ubmVjdGVkIHN1Y2Nlc3NmdWxseS4gKi8KKyAgICBib29sIGlzVmFsaWQoKTsKKworICAgIC8qKiBSZXR1cm5zIHdoZXRoZXIgdGhlIEZNUSBuZWVkcyB0byBiZSBzeW5jZWQgZnJvbSB0aGUgYnVmZmVyIHBvb2wgKi8KKyAgICBib29sIG5lZWRzU3luYygpOworCisgICAgLyoqCisgICAgICogUG9zdHMgYSBidWZmZXIgcmVsZWFzZSBtZXNzYWdlIHRvIHRoZSBidWZmZXIgcG9vbC4KKyAgICAgKgorICAgICAqIEBwYXJhbSBjb25uZWN0aW9uSWQgIGNvbm5lY3Rpb24gSWQgb2YgdGhlIGNsaWVudC4KKyAgICAgKiBAcGFyYW0gcGVuZGluZyAgICAgICBjdXJyZW50bHkgcGVuZGluZyBidWZmZXIgcmVsZWFzZSBtZXNzYWdlcy4KKyAgICAgKiBAcGFyYW0gcG9zdGVkICAgICAgICBwb3N0ZWQgYnVmZmVyIHJlbGVhc2UgbWVzc2FnZXMuCisgICAgICovCisgICAgdm9pZCBwb3N0QnVmZmVyUmVsZWFzZSgKKyAgICAgICAgICAgIENvbm5lY3Rpb25JZCBjb25uZWN0aW9uSWQsCisgICAgICAgICAgICBzdGQ6Omxpc3Q8QnVmZmVySWQ+ICZwZW5kaW5nLCBzdGQ6Omxpc3Q8QnVmZmVySWQ+ICZwb3N0ZWQpOworCisgICAgLyoqCisgICAgICogUG9zdHMgYSBidWZmZXIgc3RhdHVzIG1lc3NhZ2UgcmVnYXJkaW5nIHRoZSBzcGVjaWZpZWQgYnVmZmVyCisgICAgICogdHJhbnNmZXIgdHJhbnNhY3Rpb24uCisgICAgICoKKyAgICAgKiBAcGFyYW0gdHJhbnNhY3Rpb25JZCBJZCBvZiB0aGUgc3BlY2lmaWVkIHRyYW5zYWN0aW9uLgorICAgICAqIEBwYXJhbSBidWZmZXJJZCAgICAgIGJ1ZmZlciBJZCBvZiB0aGUgc3BlY2lmaWVkIHRyYW5zYWN0aW9uLgorICAgICAqIEBwYXJhbSBzdGF0dXMgICAgICAgIG5ldyBzdGF0dXMgb2YgdGhlIGJ1ZmZlci4KKyAgICAgKiBAcGFyYW0gY29ubmVjdGlvbklkICBjb25uZWN0aW9uIElkIG9mIHRoZSBjbGllbnQuCisgICAgICogQHBhcmFtIHRhcmdldElkICAgICAgY29ubmVjdGlvbiBJZCBvZiB0aGUgcmVjZWl2ZXIob25seSB3aGVuIHRoZSBzZW5kZXIKKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICBwb3N0cyBhIHN0YXR1cyBtZXNzYWdlKS4KKyAgICAgKiBAcGFyYW0gcGVuZGluZyAgICAgICBjdXJyZW50bHkgcGVuZGluZyBidWZmZXIgcmVsZWFzZSBtZXNzYWdlcy4KKyAgICAgKiBAcGFyYW0gcG9zdGVkICAgICAgICBwb3N0ZWQgYnVmZmVyIHJlbGVhc2UgbWVzc2FnZXMuCisgICAgICoKKyAgICAgKiBAcmV0dXJuIHtAY29kZSB0cnVlfSB3aGVuIHRoZSBzcGVjaWZpZWQgbWVzc2FnZSBpcyBwb3N0ZWQsCisgICAgICogICAgICAgICB7QGNvZGUgZmFsc2V9IG90aGVyd2lzZS4KKyAgICAgKi8KKyAgICBib29sIHBvc3RCdWZmZXJTdGF0dXNNZXNzYWdlKAorICAgICAgICAgICAgVHJhbnNhY3Rpb25JZCB0cmFuc2FjdGlvbklkLAorICAgICAgICAgICAgQnVmZmVySWQgYnVmZmVySWQsCisgICAgICAgICAgICBCdWZmZXJTdGF0dXMgc3RhdHVzLAorICAgICAgICAgICAgQ29ubmVjdGlvbklkIGNvbm5lY3Rpb25JZCwKKyAgICAgICAgICAgIENvbm5lY3Rpb25JZCB0YXJnZXRJZCwKKyAgICAgICAgICAgIHN0ZDo6bGlzdDxCdWZmZXJJZD4gJnBlbmRpbmcsIHN0ZDo6bGlzdDxCdWZmZXJJZD4gJnBvc3RlZCk7Cit9OworCit9ICAvLyBuYW1lc3BhY2UgaW1wbGVtZW50YXRpb24KK30gIC8vIG5hbWVzcGFjZSBWMV8wCit9ICAvLyBuYW1lc3BhY2UgYnVmZmVycG9vbAorfSAgLy8gbmFtZXNwYWNlIG1lZGlhCit9ICAvLyBuYW1lc3BhY2UgaGFyZHdhcmUKK30gIC8vIG5hbWVzcGFjZSBhbmRyb2lkCisKKyNlbmRpZiAgLy8gQU5EUk9JRF9IQVJEV0FSRV9NRURJQV9CVUZGRVJQT09MX1YxXzBfQlVGRkVSU1RBVFVTX0gKZGlmZiAtLWdpdCBhL21lZGlhL2J1ZmZlcnBvb2wvMS4wL0NsaWVudE1hbmFnZXIuY3BwIGIvbWVkaWEvYnVmZmVycG9vbC8xLjAvQ2xpZW50TWFuYWdlci5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWNlYTBhNAotLS0gL2Rldi9udWxsCisrKyBiL21lZGlhL2J1ZmZlcnBvb2wvMS4wL0NsaWVudE1hbmFnZXIuY3BwCkBAIC0wLDAgKzEsNTA0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE4IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KKyNkZWZpbmUgTE9HX1RBRyAiQnVmZmVyUG9vbE1hbmFnZXIiCisvLyNkZWZpbmUgTE9HX05ERUJVRyAwCisKKyNpbmNsdWRlIDxidWZmZXJwb29sL0NsaWVudE1hbmFnZXIuaD4KKyNpbmNsdWRlIDxoaWRsL0hpZGxUcmFuc3BvcnRTdXBwb3J0Lmg+CisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisjaW5jbHVkZSA8dGltZS5oPgorI2luY2x1ZGUgPHVuaXN0ZC5oPgorI2luY2x1ZGUgPHV0aWxzL0xvZy5oPgorI2luY2x1ZGUgIkJ1ZmZlclBvb2xDbGllbnQuaCIKKworbmFtZXNwYWNlIGFuZHJvaWQgeworbmFtZXNwYWNlIGhhcmR3YXJlIHsKK25hbWVzcGFjZSBtZWRpYSB7CituYW1lc3BhY2UgYnVmZmVycG9vbCB7CituYW1lc3BhY2UgVjFfMCB7CituYW1lc3BhY2UgaW1wbGVtZW50YXRpb24geworCitzdGF0aWMgY29uc3RleHByIGludDY0X3Qga1JlZ2lzdGVyVGltZW91dFVzID0gNTAwMDAwOyAvLyAwLjUgc2VjCitzdGF0aWMgY29uc3RleHByIGludDY0X3Qga0NsZWFuVXBEdXJhdGlvblVzID0gMTAwMDAwMDsgLy8gVE9ETzogMSBzZWMgdHVuZQorc3RhdGljIGNvbnN0ZXhwciBpbnQ2NF90IGtDbGllbnRUaW1lb3V0VXMgPSA1MDAwMDAwOyAvLyBUT0RPOiA1IHNlY3MgdHVuZQorCisvKioKKyAqIFRoZSBob2xkZXIgb2YgdGhlIGNvb2tpZSBvZiByZW1vdGUgSUNsaWVudE1hbmFnZXIuCisgKiBUaGUgY29va2llIGlzIHByb2Nlc3MgbG9jYWxseSB1bmlxdWUgZm9yIGVhY2ggSUNsaWVudE1hbmFnZXIuCisgKiAoVGhlIGNvb2tpZSBpcyB1c2VkIHRvIG5vdGlmeSBkZWF0aCBvZiBjbGllbnRzIHRvIGJ1ZmZlcnBvb2wgcHJvY2Vzcy4pCisgKi8KK2NsYXNzIENsaWVudE1hbmFnZXJDb29raWVIb2xkZXIgeworcHVibGljOgorICAgIC8qKgorICAgICAqIENyZWF0ZXMgYSBjb29raWUgaG9sZGVyIGZvciByZW1vdGUgSUNsaWVudE1hbmFnZXIocykuCisgICAgICovCisgICAgQ2xpZW50TWFuYWdlckNvb2tpZUhvbGRlcigpOworCisgICAgLyoqCisgICAgICogR2V0cyBhIGNvb2tpZSBmb3IgYSByZW1vdGUgSUNsaWVudE1hbmFnZXIuCisgICAgICoKKyAgICAgKiBAcGFyYW0gbWFuYWdlciAgIHRoZSBzcGVjaWZpZWQgcmVtb3RlIElDbGllbnRNYW5hZ2VyLgorICAgICAqIEBwYXJhbSBhZGRlZCAgICAgdHJ1ZSB3aGVuIHRoZSBzcGVjaWZpZWQgcmVtb3RlIElDbGllbnRNYW5hZ2VyIGlzIGFkZGVkCisgICAgICogICAgICAgICAgICAgICAgICBuZXdseSwgZmFsc2Ugb3RoZXJ3aXNlLgorICAgICAqCisgICAgICogQHJldHVybiB0aGUgcHJvY2VzcyBsb2NhbGx5IHVuaXF1ZSBjb29raWUgZm9yIHRoZSBzcGVjaWZpZWQgSUNsaWVudE1hbmFnZXIuCisgICAgICovCisgICAgdWludDY0X3QgZ2V0Q29va2llKGNvbnN0IHNwPElDbGllbnRNYW5hZ2VyPiAmbWFuYWdlciwgYm9vbCAqYWRkZWQpOworCitwcml2YXRlOgorICAgIHVpbnQ2NF90IG1TZXFJZDsKKyAgICBzdGQ6Om11dGV4IG1Mb2NrOworICAgIHN0ZDo6bGlzdDxzdGQ6OnBhaXI8Y29uc3Qgd3A8SUNsaWVudE1hbmFnZXI+LCB1aW50NjRfdD4+IG1NYW5hZ2VyczsKK307CisKK0NsaWVudE1hbmFnZXJDb29raWVIb2xkZXI6OkNsaWVudE1hbmFnZXJDb29raWVIb2xkZXIoKSA6IG1TZXFJZCgwKXt9CisKK3VpbnQ2NF90IENsaWVudE1hbmFnZXJDb29raWVIb2xkZXI6OmdldENvb2tpZSgKKyAgICAgICAgY29uc3Qgc3A8SUNsaWVudE1hbmFnZXI+ICZtYW5hZ2VyLAorICAgICAgICBib29sICphZGRlZCkgeworICAgIHN0ZDo6bG9ja19ndWFyZDxzdGQ6Om11dGV4PiBsb2NrKG1Mb2NrKTsKKyAgICBmb3IgKGF1dG8gaXQgPSBtTWFuYWdlcnMuYmVnaW4oKTsgaXQgIT0gbU1hbmFnZXJzLmVuZCgpOykgeworICAgICAgICBjb25zdCBzcDxJQ2xpZW50TWFuYWdlcj4ga2V5ID0gaXQtPmZpcnN0LnByb21vdGUoKTsKKyAgICAgICAgaWYgKGtleSkgeworICAgICAgICAgICAgaWYgKGludGVyZmFjZXNFcXVhbChrZXksIG1hbmFnZXIpKSB7CisgICAgICAgICAgICAgICAgKmFkZGVkID0gZmFsc2U7CisgICAgICAgICAgICAgICAgcmV0dXJuIGl0LT5zZWNvbmQ7CisgICAgICAgICAgICB9CisgICAgICAgICAgICArK2l0OworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgaXQgPSBtTWFuYWdlcnMuZXJhc2UoaXQpOworICAgICAgICB9CisgICAgfQorICAgIHVpbnQ2NF90IGlkID0gbVNlcUlkKys7CisgICAgKmFkZGVkID0gdHJ1ZTsKKyAgICBtTWFuYWdlcnMucHVzaF9iYWNrKHN0ZDo6bWFrZV9wYWlyKG1hbmFnZXIsIGlkKSk7CisgICAgcmV0dXJuIGlkOworfQorCitjbGFzcyBDbGllbnRNYW5hZ2VyOjpJbXBsIHsKK3B1YmxpYzoKKyAgICBJbXBsKCk7CisKKyAgICAvLyBCblJlZ2lzdGVyU2VuZGVyCisgICAgUmVzdWx0U3RhdHVzIHJlZ2lzdGVyU2VuZGVyKGNvbnN0IHNwPElBY2Nlc3Nvcj4gJmFjY2Vzc29yLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDb25uZWN0aW9uSWQgKnBDb25uZWN0aW9uSWQpOworCisgICAgLy8gQnBSZWdpc3RlclNlbmRlcgorICAgIFJlc3VsdFN0YXR1cyByZWdpc3RlclNlbmRlcihjb25zdCBzcDxJQ2xpZW50TWFuYWdlcj4gJnJlY2VpdmVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDb25uZWN0aW9uSWQgc2VuZGVySWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENvbm5lY3Rpb25JZCAqcmVjZWl2ZXJJZCk7CisKKyAgICBSZXN1bHRTdGF0dXMgY3JlYXRlKGNvbnN0IHN0ZDo6c2hhcmVkX3B0cjxCdWZmZXJQb29sQWxsb2NhdG9yPiAmYWxsb2NhdG9yLAorICAgICAgICAgICAgICAgICAgICAgICAgQ29ubmVjdGlvbklkICpwQ29ubmVjdGlvbklkKTsKKworICAgIFJlc3VsdFN0YXR1cyBjbG9zZShDb25uZWN0aW9uSWQgY29ubmVjdGlvbklkKTsKKworICAgIFJlc3VsdFN0YXR1cyBhbGxvY2F0ZShDb25uZWN0aW9uSWQgY29ubmVjdGlvbklkLAorICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdGQ6OnZlY3Rvcjx1aW50OF90PiAmcGFyYW1zLAorICAgICAgICAgICAgICAgICAgICAgICAgICBuYXRpdmVfaGFuZGxlX3QgKipoYW5kbGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZDo6c2hhcmVkX3B0cjxCdWZmZXJQb29sRGF0YT4gKmJ1ZmZlcik7CisKKyAgICBSZXN1bHRTdGF0dXMgcmVjZWl2ZShDb25uZWN0aW9uSWQgY29ubmVjdGlvbklkLAorICAgICAgICAgICAgICAgICAgICAgICAgIFRyYW5zYWN0aW9uSWQgdHJhbnNhY3Rpb25JZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICBCdWZmZXJJZCBidWZmZXJJZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICBpbnQ2NF90IHRpbWVzdGFtcFVzLAorICAgICAgICAgICAgICAgICAgICAgICAgIG5hdGl2ZV9oYW5kbGVfdCAqKmhhbmRsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBzdGQ6OnNoYXJlZF9wdHI8QnVmZmVyUG9vbERhdGE+ICpidWZmZXIpOworCisgICAgUmVzdWx0U3RhdHVzIHBvc3RTZW5kKENvbm5lY3Rpb25JZCByZWNlaXZlcklkLAorICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdGQ6OnNoYXJlZF9wdHI8QnVmZmVyUG9vbERhdGE+ICZidWZmZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgIFRyYW5zYWN0aW9uSWQgKnRyYW5zYWN0aW9uSWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgIGludDY0X3QgKnRpbWVzdGFtcFVzKTsKKworICAgIFJlc3VsdFN0YXR1cyBnZXRBY2Nlc3NvcihDb25uZWN0aW9uSWQgY29ubmVjdGlvbklkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcDxJQWNjZXNzb3I+ICphY2Nlc3Nvcik7CisKKyAgICB2b2lkIGNsZWFuVXAoYm9vbCBjbGVhckNhY2hlID0gZmFsc2UpOworCitwcml2YXRlOgorICAgIC8vIEluIG9yZGVyIHRvIHByZXZlbnQgZGVhZGxvY2sgYmV0d2VlbiBtdWx0aXBsZSBsb2NrcywKKyAgICAvLyBhbHdheXMgbG9jayBDbGllbnRDYWNoZS5sb2NrIGJlZm9yZSBsb2NraW5nIEFjdGl2ZUNsaWVudHMubG9jay4KKyAgICBzdHJ1Y3QgQ2xpZW50Q2FjaGUgeworICAgICAgICAvLyBUaGlzIGxvY2sgaXMgaGVsZCBmb3IgYnJpZWYgZHVyYXRpb24uCisgICAgICAgIC8vIEJsb2NraW5nIG9wZXJhdGlvbiBpcyBub3QgcGVyZm9ybWVkIHdoaWxlIGhvbGRpbmcgdGhlIGxvY2suCisgICAgICAgIHN0ZDo6bXV0ZXggbU11dGV4OworICAgICAgICBzdGQ6Omxpc3Q8c3RkOjpwYWlyPGNvbnN0IHdwPElBY2Nlc3Nvcj4sIGNvbnN0IHN0ZDo6d2Vha19wdHI8QnVmZmVyUG9vbENsaWVudD4+PgorICAgICAgICAgICAgICAgIG1DbGllbnRzOworICAgICAgICBzdGQ6OmNvbmRpdGlvbl92YXJpYWJsZSBtQ29ubmVjdEN2OworICAgICAgICBib29sIG1Db25uZWN0aW5nOworICAgICAgICBpbnQ2NF90IG1MYXN0Q2xlYW5VcFVzOworCisgICAgICAgIENsaWVudENhY2hlKCkgOiBtQ29ubmVjdGluZyhmYWxzZSksIG1MYXN0Q2xlYW5VcFVzKGdldFRpbWVzdGFtcE5vdygpKSB7fQorICAgIH0gbUNhY2hlOworCisgICAgLy8gQWN0aXZlIGNsaWVudHMgd2hpY2ggY2FuIGJlIHJldHJpZXZlZCB2aWEgQ29ubmVjdGlvbklkCisgICAgc3RydWN0IEFjdGl2ZUNsaWVudHMgeworICAgICAgICAvLyBUaGlzIGxvY2sgaXMgaGVsZCBmb3IgYnJpZWYgZHVyYXRpb24uCisgICAgICAgIC8vIEJsb2NraW5nIG9wZXJhdGlvbiBpcyBub3QgcGVyZm9ybWVkIGhvbGRpbmcgdGhlIGxvY2suCisgICAgICAgIHN0ZDo6bXV0ZXggbU11dGV4OworICAgICAgICBzdGQ6Om1hcDxDb25uZWN0aW9uSWQsIGNvbnN0IHN0ZDo6c2hhcmVkX3B0cjxCdWZmZXJQb29sQ2xpZW50Pj4KKyAgICAgICAgICAgICAgICBtQ2xpZW50czsKKyAgICB9IG1BY3RpdmU7CisKKyAgICBDbGllbnRNYW5hZ2VyQ29va2llSG9sZGVyIG1SZW1vdGVDbGllbnRDb29raWVzOworfTsKKworQ2xpZW50TWFuYWdlcjo6SW1wbDo6SW1wbCgpIHt9CisKK1Jlc3VsdFN0YXR1cyBDbGllbnRNYW5hZ2VyOjpJbXBsOjpyZWdpc3RlclNlbmRlcigKKyAgICAgICAgY29uc3Qgc3A8SUFjY2Vzc29yPiAmYWNjZXNzb3IsIENvbm5lY3Rpb25JZCAqcENvbm5lY3Rpb25JZCkgeworICAgIGNsZWFuVXAoKTsKKyAgICBpbnQ2NF90IHRpbWVvdXRVcyA9IGdldFRpbWVzdGFtcE5vdygpICsga1JlZ2lzdGVyVGltZW91dFVzOworICAgIGRvIHsKKyAgICAgICAgc3RkOjp1bmlxdWVfbG9jazxzdGQ6Om11dGV4PiBsb2NrKG1DYWNoZS5tTXV0ZXgpOworICAgICAgICBmb3IgKGF1dG8gaXQgPSBtQ2FjaGUubUNsaWVudHMuYmVnaW4oKTsgaXQgIT0gbUNhY2hlLm1DbGllbnRzLmVuZCgpOyArK2l0KSB7CisgICAgICAgICAgICBzcDxJQWNjZXNzb3I+IHNBY2Nlc3NvciA9IGl0LT5maXJzdC5wcm9tb3RlKCk7CisgICAgICAgICAgICBpZiAoc0FjY2Vzc29yICYmIGludGVyZmFjZXNFcXVhbChzQWNjZXNzb3IsIGFjY2Vzc29yKSkgeworICAgICAgICAgICAgICAgIGNvbnN0IHN0ZDo6c2hhcmVkX3B0cjxCdWZmZXJQb29sQ2xpZW50PiBjbGllbnQgPSBpdC0+c2Vjb25kLmxvY2soKTsKKyAgICAgICAgICAgICAgICBpZiAoY2xpZW50KSB7CisgICAgICAgICAgICAgICAgICAgIHN0ZDo6bG9ja19ndWFyZDxzdGQ6Om11dGV4PiBsb2NrKG1BY3RpdmUubU11dGV4KTsKKyAgICAgICAgICAgICAgICAgICAgKnBDb25uZWN0aW9uSWQgPSBjbGllbnQtPmdldENvbm5lY3Rpb25JZCgpOworICAgICAgICAgICAgICAgICAgICBpZiAobUFjdGl2ZS5tQ2xpZW50cy5maW5kKCpwQ29ubmVjdGlvbklkKSAhPSBtQWN0aXZlLm1DbGllbnRzLmVuZCgpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBBTE9HVigicmVnaXN0ZXIgZXhpc3RpbmcgY29ubmVjdGlvbiAlbGxkIiwgKGxvbmcgbG9uZykqcENvbm5lY3Rpb25JZCk7CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gUmVzdWx0U3RhdHVzOjpBTFJFQURZX0VYSVNUUzsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBtQ2FjaGUubUNsaWVudHMuZXJhc2UoaXQpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGlmICghbUNhY2hlLm1Db25uZWN0aW5nKSB7CisgICAgICAgICAgICBtQ2FjaGUubUNvbm5lY3RpbmcgPSB0cnVlOworICAgICAgICAgICAgbG9jay51bmxvY2soKTsKKyAgICAgICAgICAgIFJlc3VsdFN0YXR1cyByZXN1bHQgPSBSZXN1bHRTdGF0dXM6Ok9LOworICAgICAgICAgICAgY29uc3Qgc3RkOjpzaGFyZWRfcHRyPEJ1ZmZlclBvb2xDbGllbnQ+IGNsaWVudCA9CisgICAgICAgICAgICAgICAgICAgIHN0ZDo6bWFrZV9zaGFyZWQ8QnVmZmVyUG9vbENsaWVudD4oYWNjZXNzb3IpOworICAgICAgICAgICAgbG9jay5sb2NrKCk7CisgICAgICAgICAgICBpZiAoIWNsaWVudCkgeworICAgICAgICAgICAgICAgIHJlc3VsdCA9IFJlc3VsdFN0YXR1czo6Tk9fTUVNT1JZOworICAgICAgICAgICAgfSBlbHNlIGlmICghY2xpZW50LT5pc1ZhbGlkKCkpIHsKKyAgICAgICAgICAgICAgICByZXN1bHQgPSBSZXN1bHRTdGF0dXM6OkNSSVRJQ0FMX0VSUk9SOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKHJlc3VsdCA9PSBSZXN1bHRTdGF0dXM6Ok9LKSB7CisgICAgICAgICAgICAgICAgLy8gVE9ETzogaGFuZGxlIGluc2VydCBmYWlsLiAobWFsbG9jIGZhaWwpCisgICAgICAgICAgICAgICAgY29uc3Qgc3RkOjp3ZWFrX3B0cjxCdWZmZXJQb29sQ2xpZW50PiB3Y2xpZW50ID0gY2xpZW50OworICAgICAgICAgICAgICAgIG1DYWNoZS5tQ2xpZW50cy5wdXNoX2JhY2soc3RkOjptYWtlX3BhaXIoYWNjZXNzb3IsIHdjbGllbnQpKTsKKyAgICAgICAgICAgICAgICBDb25uZWN0aW9uSWQgY29uSWQgPSBjbGllbnQtPmdldENvbm5lY3Rpb25JZCgpOworICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgc3RkOjpsb2NrX2d1YXJkPHN0ZDo6bXV0ZXg+IGxvY2sobUFjdGl2ZS5tTXV0ZXgpOworICAgICAgICAgICAgICAgICAgICBtQWN0aXZlLm1DbGllbnRzLmluc2VydChzdGQ6Om1ha2VfcGFpcihjb25JZCwgY2xpZW50KSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICpwQ29ubmVjdGlvbklkID0gY29uSWQ7CisgICAgICAgICAgICAgICAgQUxPR1YoInJlZ2lzdGVyIG5ldyBjb25uZWN0aW9uICVsbGQiLCAobG9uZyBsb25nKSpwQ29ubmVjdGlvbklkKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIG1DYWNoZS5tQ29ubmVjdGluZyA9IGZhbHNlOworICAgICAgICAgICAgbG9jay51bmxvY2soKTsKKyAgICAgICAgICAgIG1DYWNoZS5tQ29ubmVjdEN2Lm5vdGlmeV9hbGwoKTsKKyAgICAgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgICAgIH0KKyAgICAgICAgbUNhY2hlLm1Db25uZWN0Q3Yud2FpdF9mb3IoCisgICAgICAgICAgICAgICAgbG9jaywgc3RkOjpjaHJvbm86Om1pY3Jvc2Vjb25kcyhrUmVnaXN0ZXJUaW1lb3V0VXMpKTsKKyAgICB9IHdoaWxlIChnZXRUaW1lc3RhbXBOb3coKSA8IHRpbWVvdXRVcyk7CisgICAgLy8gVE9ETzogcmV0dXJuIHRpbWVvdXQgZXJyb3IKKyAgICByZXR1cm4gUmVzdWx0U3RhdHVzOjpDUklUSUNBTF9FUlJPUjsKK30KKworUmVzdWx0U3RhdHVzIENsaWVudE1hbmFnZXI6OkltcGw6OnJlZ2lzdGVyU2VuZGVyKAorICAgICAgICBjb25zdCBzcDxJQ2xpZW50TWFuYWdlcj4gJnJlY2VpdmVyLAorICAgICAgICBDb25uZWN0aW9uSWQgc2VuZGVySWQsCisgICAgICAgIENvbm5lY3Rpb25JZCAqcmVjZWl2ZXJJZCkgeworICAgIHNwPElBY2Nlc3Nvcj4gYWNjZXNzb3I7CisgICAgYm9vbCBsb2NhbCA9IGZhbHNlOworICAgIHsKKyAgICAgICAgc3RkOjpsb2NrX2d1YXJkPHN0ZDo6bXV0ZXg+IGxvY2sobUFjdGl2ZS5tTXV0ZXgpOworICAgICAgICBhdXRvIGl0ID0gbUFjdGl2ZS5tQ2xpZW50cy5maW5kKHNlbmRlcklkKTsKKyAgICAgICAgaWYgKGl0ID09IG1BY3RpdmUubUNsaWVudHMuZW5kKCkpIHsKKyAgICAgICAgICAgIHJldHVybiBSZXN1bHRTdGF0dXM6Ok5PVF9GT1VORDsKKyAgICAgICAgfQorICAgICAgICBpdC0+c2Vjb25kLT5nZXRBY2Nlc3NvcigmYWNjZXNzb3IpOworICAgICAgICBsb2NhbCA9IGl0LT5zZWNvbmQtPmlzTG9jYWwoKTsKKyAgICB9CisgICAgUmVzdWx0U3RhdHVzIHJzID0gUmVzdWx0U3RhdHVzOjpDUklUSUNBTF9FUlJPUjsKKyAgICBpZiAoYWNjZXNzb3IpIHsKKyAgICAgICBSZXR1cm48dm9pZD4gdHJhbnNSZXN1bHQgPSByZWNlaXZlci0+cmVnaXN0ZXJTZW5kZXIoCisgICAgICAgICAgICAgICAgYWNjZXNzb3IsCisgICAgICAgICAgICAgICAgWyZycywgcmVjZWl2ZXJJZF0oCisgICAgICAgICAgICAgICAgICAgICAgICBSZXN1bHRTdGF0dXMgc3RhdHVzLAorICAgICAgICAgICAgICAgICAgICAgICAgaW50NjRfdCBjb25uZWN0aW9uSWQpIHsKKyAgICAgICAgICAgICAgICAgICAgcnMgPSBzdGF0dXM7CisgICAgICAgICAgICAgICAgICAgICpyZWNlaXZlcklkID0gY29ubmVjdGlvbklkOworICAgICAgICAgICAgICAgIH0pOworICAgICAgICBpZiAoIXRyYW5zUmVzdWx0LmlzT2soKSkgeworICAgICAgICAgICAgcmV0dXJuIFJlc3VsdFN0YXR1czo6Q1JJVElDQUxfRVJST1I7CisgICAgICAgIH0gZWxzZSBpZiAobG9jYWwgJiYgcnMgPT0gUmVzdWx0U3RhdHVzOjpPSykgeworICAgICAgICAgICAgc3A8Q29ubmVjdGlvbkRlYXRoUmVjaXBpZW50PiByZWNpcGllbnQgPSBBY2Nlc3Nvcjo6Z2V0Q29ubmVjdGlvbkRlYXRoUmVjaXBpZW50KCk7CisgICAgICAgICAgICBpZiAocmVjaXBpZW50KSAgeworICAgICAgICAgICAgICAgIEFMT0dWKCJjbGllbnQgZGVhdGggcmVjaXBpZW50IHJlZ2lzdGVyZWQgJWxsZCIsIChsb25nIGxvbmcpKnJlY2VpdmVySWQpOworICAgICAgICAgICAgICAgIGJvb2wgYWRkZWQ7CisgICAgICAgICAgICAgICAgdWludDY0X3QgY29va2llID0gbVJlbW90ZUNsaWVudENvb2tpZXMuZ2V0Q29va2llKHJlY2VpdmVyLCAmYWRkZWQpOworICAgICAgICAgICAgICAgIHJlY2lwaWVudC0+YWRkQ29va2llVG9Db25uZWN0aW9uKGNvb2tpZSwgKnJlY2VpdmVySWQpOworICAgICAgICAgICAgICAgIGlmIChhZGRlZCkgeworICAgICAgICAgICAgICAgICAgICBSZXR1cm48Ym9vbD4gdHJhbnNSZXN1bHQgPSByZWNlaXZlci0+bGlua1RvRGVhdGgocmVjaXBpZW50LCBjb29raWUpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKyAgICByZXR1cm4gcnM7Cit9CisKK1Jlc3VsdFN0YXR1cyBDbGllbnRNYW5hZ2VyOjpJbXBsOjpjcmVhdGUoCisgICAgICAgIGNvbnN0IHN0ZDo6c2hhcmVkX3B0cjxCdWZmZXJQb29sQWxsb2NhdG9yPiAmYWxsb2NhdG9yLAorICAgICAgICBDb25uZWN0aW9uSWQgKnBDb25uZWN0aW9uSWQpIHsKKyAgICBjb25zdCBzcDxBY2Nlc3Nvcj4gYWNjZXNzb3IgPSBuZXcgQWNjZXNzb3IoYWxsb2NhdG9yKTsKKyAgICBpZiAoIWFjY2Vzc29yIHx8ICFhY2Nlc3Nvci0+aXNWYWxpZCgpKSB7CisgICAgICAgIHJldHVybiBSZXN1bHRTdGF0dXM6OkNSSVRJQ0FMX0VSUk9SOworICAgIH0KKyAgICBzdGQ6OnNoYXJlZF9wdHI8QnVmZmVyUG9vbENsaWVudD4gY2xpZW50ID0KKyAgICAgICAgICAgIHN0ZDo6bWFrZV9zaGFyZWQ8QnVmZmVyUG9vbENsaWVudD4oYWNjZXNzb3IpOworICAgIGlmICghY2xpZW50IHx8ICFjbGllbnQtPmlzVmFsaWQoKSkgeworICAgICAgICByZXR1cm4gUmVzdWx0U3RhdHVzOjpDUklUSUNBTF9FUlJPUjsKKyAgICB9CisgICAgLy8gU2luY2UgYSBuZXcgYnVmZmVycG9vbCBpcyBjcmVhdGVkLCBldmljdCBtZW1vcmllcyB3aGljaCBhcmUgdXNlZCBieQorICAgIC8vIGV4aXN0aW5nIGJ1ZmZlcnBvb2xzIGFuZCBjbGllbnRzLgorICAgIGNsZWFuVXAodHJ1ZSk7CisgICAgeworICAgICAgICAvLyBUT0RPOiBoYW5kbGUgaW5zZXJ0IGZhaWwuIChtYWxsb2MgZmFpbCkKKyAgICAgICAgc3RkOjpsb2NrX2d1YXJkPHN0ZDo6bXV0ZXg+IGxvY2sobUNhY2hlLm1NdXRleCk7CisgICAgICAgIGNvbnN0IHN0ZDo6d2Vha19wdHI8QnVmZmVyUG9vbENsaWVudD4gd2NsaWVudCA9IGNsaWVudDsKKyAgICAgICAgbUNhY2hlLm1DbGllbnRzLnB1c2hfYmFjayhzdGQ6Om1ha2VfcGFpcihhY2Nlc3Nvciwgd2NsaWVudCkpOworICAgICAgICBDb25uZWN0aW9uSWQgY29uSWQgPSBjbGllbnQtPmdldENvbm5lY3Rpb25JZCgpOworICAgICAgICB7CisgICAgICAgICAgICBzdGQ6OmxvY2tfZ3VhcmQ8c3RkOjptdXRleD4gbG9jayhtQWN0aXZlLm1NdXRleCk7CisgICAgICAgICAgICBtQWN0aXZlLm1DbGllbnRzLmluc2VydChzdGQ6Om1ha2VfcGFpcihjb25JZCwgY2xpZW50KSk7CisgICAgICAgIH0KKyAgICAgICAgKnBDb25uZWN0aW9uSWQgPSBjb25JZDsKKyAgICAgICAgQUxPR1YoImNyZWF0ZSBuZXcgY29ubmVjdGlvbiAlbGxkIiwgKGxvbmcgbG9uZykqcENvbm5lY3Rpb25JZCk7CisgICAgfQorICAgIHJldHVybiBSZXN1bHRTdGF0dXM6Ok9LOworfQorCitSZXN1bHRTdGF0dXMgQ2xpZW50TWFuYWdlcjo6SW1wbDo6Y2xvc2UoQ29ubmVjdGlvbklkIGNvbm5lY3Rpb25JZCkgeworICAgIHN0ZDo6bG9ja19ndWFyZDxzdGQ6Om11dGV4PiBsb2NrMShtQ2FjaGUubU11dGV4KTsKKyAgICBzdGQ6OmxvY2tfZ3VhcmQ8c3RkOjptdXRleD4gbG9jazIobUFjdGl2ZS5tTXV0ZXgpOworICAgIGF1dG8gaXQgPSBtQWN0aXZlLm1DbGllbnRzLmZpbmQoY29ubmVjdGlvbklkKTsKKyAgICBpZiAoaXQgIT0gbUFjdGl2ZS5tQ2xpZW50cy5lbmQoKSkgeworICAgICAgICBzcDxJQWNjZXNzb3I+IGFjY2Vzc29yOworICAgICAgICBpdC0+c2Vjb25kLT5nZXRBY2Nlc3NvcigmYWNjZXNzb3IpOworICAgICAgICBtQWN0aXZlLm1DbGllbnRzLmVyYXNlKGNvbm5lY3Rpb25JZCk7CisgICAgICAgIGZvciAoYXV0byBjaXQgPSBtQ2FjaGUubUNsaWVudHMuYmVnaW4oKTsgY2l0ICE9IG1DYWNoZS5tQ2xpZW50cy5lbmQoKTspIHsKKyAgICAgICAgICAgIC8vIGNsZWFuIHVwIGRlYWQgY2xpZW50IGNhY2hlcworICAgICAgICAgICAgc3A8SUFjY2Vzc29yPiBjQWNjZXNzb3IgPSBjaXQtPmZpcnN0LnByb21vdGUoKTsKKyAgICAgICAgICAgIGlmICghY0FjY2Vzc29yIHx8IChhY2Nlc3NvciAmJiBpbnRlcmZhY2VzRXF1YWwoY0FjY2Vzc29yLCBhY2Nlc3NvcikpKSB7CisgICAgICAgICAgICAgICAgY2l0ID0gbUNhY2hlLm1DbGllbnRzLmVyYXNlKGNpdCk7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIGNpdCsrOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIHJldHVybiBSZXN1bHRTdGF0dXM6Ok9LOworICAgIH0KKyAgICByZXR1cm4gUmVzdWx0U3RhdHVzOjpOT1RfRk9VTkQ7Cit9CisKK1Jlc3VsdFN0YXR1cyBDbGllbnRNYW5hZ2VyOjpJbXBsOjphbGxvY2F0ZSgKKyAgICAgICAgQ29ubmVjdGlvbklkIGNvbm5lY3Rpb25JZCwgY29uc3Qgc3RkOjp2ZWN0b3I8dWludDhfdD4gJnBhcmFtcywKKyAgICAgICAgbmF0aXZlX2hhbmRsZV90ICoqaGFuZGxlLCBzdGQ6OnNoYXJlZF9wdHI8QnVmZmVyUG9vbERhdGE+ICpidWZmZXIpIHsKKyAgICBzdGQ6OnNoYXJlZF9wdHI8QnVmZmVyUG9vbENsaWVudD4gY2xpZW50OworICAgIHsKKyAgICAgICAgc3RkOjpsb2NrX2d1YXJkPHN0ZDo6bXV0ZXg+IGxvY2sobUFjdGl2ZS5tTXV0ZXgpOworICAgICAgICBhdXRvIGl0ID0gbUFjdGl2ZS5tQ2xpZW50cy5maW5kKGNvbm5lY3Rpb25JZCk7CisgICAgICAgIGlmIChpdCA9PSBtQWN0aXZlLm1DbGllbnRzLmVuZCgpKSB7CisgICAgICAgICAgICByZXR1cm4gUmVzdWx0U3RhdHVzOjpOT1RfRk9VTkQ7CisgICAgICAgIH0KKyAgICAgICAgY2xpZW50ID0gaXQtPnNlY29uZDsKKyAgICB9CisgICAgcmV0dXJuIGNsaWVudC0+YWxsb2NhdGUocGFyYW1zLCBoYW5kbGUsIGJ1ZmZlcik7Cit9CisKK1Jlc3VsdFN0YXR1cyBDbGllbnRNYW5hZ2VyOjpJbXBsOjpyZWNlaXZlKAorICAgICAgICBDb25uZWN0aW9uSWQgY29ubmVjdGlvbklkLCBUcmFuc2FjdGlvbklkIHRyYW5zYWN0aW9uSWQsCisgICAgICAgIEJ1ZmZlcklkIGJ1ZmZlcklkLCBpbnQ2NF90IHRpbWVzdGFtcFVzLAorICAgICAgICBuYXRpdmVfaGFuZGxlX3QgKipoYW5kbGUsIHN0ZDo6c2hhcmVkX3B0cjxCdWZmZXJQb29sRGF0YT4gKmJ1ZmZlcikgeworICAgIHN0ZDo6c2hhcmVkX3B0cjxCdWZmZXJQb29sQ2xpZW50PiBjbGllbnQ7CisgICAgeworICAgICAgICBzdGQ6OmxvY2tfZ3VhcmQ8c3RkOjptdXRleD4gbG9jayhtQWN0aXZlLm1NdXRleCk7CisgICAgICAgIGF1dG8gaXQgPSBtQWN0aXZlLm1DbGllbnRzLmZpbmQoY29ubmVjdGlvbklkKTsKKyAgICAgICAgaWYgKGl0ID09IG1BY3RpdmUubUNsaWVudHMuZW5kKCkpIHsKKyAgICAgICAgICAgIHJldHVybiBSZXN1bHRTdGF0dXM6Ok5PVF9GT1VORDsKKyAgICAgICAgfQorICAgICAgICBjbGllbnQgPSBpdC0+c2Vjb25kOworICAgIH0KKyAgICByZXR1cm4gY2xpZW50LT5yZWNlaXZlKHRyYW5zYWN0aW9uSWQsIGJ1ZmZlcklkLCB0aW1lc3RhbXBVcywgaGFuZGxlLCBidWZmZXIpOworfQorCitSZXN1bHRTdGF0dXMgQ2xpZW50TWFuYWdlcjo6SW1wbDo6cG9zdFNlbmQoCisgICAgICAgIENvbm5lY3Rpb25JZCByZWNlaXZlcklkLCBjb25zdCBzdGQ6OnNoYXJlZF9wdHI8QnVmZmVyUG9vbERhdGE+ICZidWZmZXIsCisgICAgICAgIFRyYW5zYWN0aW9uSWQgKnRyYW5zYWN0aW9uSWQsIGludDY0X3QgKnRpbWVzdGFtcFVzKSB7CisgICAgQ29ubmVjdGlvbklkIGNvbm5lY3Rpb25JZCA9IGJ1ZmZlci0+bUNvbm5lY3Rpb25JZDsKKyAgICBzdGQ6OnNoYXJlZF9wdHI8QnVmZmVyUG9vbENsaWVudD4gY2xpZW50OworICAgIHsKKyAgICAgICAgc3RkOjpsb2NrX2d1YXJkPHN0ZDo6bXV0ZXg+IGxvY2sobUFjdGl2ZS5tTXV0ZXgpOworICAgICAgICBhdXRvIGl0ID0gbUFjdGl2ZS5tQ2xpZW50cy5maW5kKGNvbm5lY3Rpb25JZCk7CisgICAgICAgIGlmIChpdCA9PSBtQWN0aXZlLm1DbGllbnRzLmVuZCgpKSB7CisgICAgICAgICAgICByZXR1cm4gUmVzdWx0U3RhdHVzOjpOT1RfRk9VTkQ7CisgICAgICAgIH0KKyAgICAgICAgY2xpZW50ID0gaXQtPnNlY29uZDsKKyAgICB9CisgICAgcmV0dXJuIGNsaWVudC0+cG9zdFNlbmQocmVjZWl2ZXJJZCwgYnVmZmVyLCB0cmFuc2FjdGlvbklkLCB0aW1lc3RhbXBVcyk7Cit9CisKK1Jlc3VsdFN0YXR1cyBDbGllbnRNYW5hZ2VyOjpJbXBsOjpnZXRBY2Nlc3NvcigKKyAgICAgICAgQ29ubmVjdGlvbklkIGNvbm5lY3Rpb25JZCwgc3A8SUFjY2Vzc29yPiAqYWNjZXNzb3IpIHsKKyAgICBzdGQ6OnNoYXJlZF9wdHI8QnVmZmVyUG9vbENsaWVudD4gY2xpZW50OworICAgIHsKKyAgICAgICAgc3RkOjpsb2NrX2d1YXJkPHN0ZDo6bXV0ZXg+IGxvY2sobUFjdGl2ZS5tTXV0ZXgpOworICAgICAgICBhdXRvIGl0ID0gbUFjdGl2ZS5tQ2xpZW50cy5maW5kKGNvbm5lY3Rpb25JZCk7CisgICAgICAgIGlmIChpdCA9PSBtQWN0aXZlLm1DbGllbnRzLmVuZCgpKSB7CisgICAgICAgICAgICByZXR1cm4gUmVzdWx0U3RhdHVzOjpOT1RfRk9VTkQ7CisgICAgICAgIH0KKyAgICAgICAgY2xpZW50ID0gaXQtPnNlY29uZDsKKyAgICB9CisgICAgcmV0dXJuIGNsaWVudC0+Z2V0QWNjZXNzb3IoYWNjZXNzb3IpOworfQorCit2b2lkIENsaWVudE1hbmFnZXI6OkltcGw6OmNsZWFuVXAoYm9vbCBjbGVhckNhY2hlKSB7CisgICAgaW50NjRfdCBub3cgPSBnZXRUaW1lc3RhbXBOb3coKTsKKyAgICBpbnQ2NF90IGxhc3RUcmFuc2FjdGlvblVzOworICAgIHN0ZDo6bG9ja19ndWFyZDxzdGQ6Om11dGV4PiBsb2NrMShtQ2FjaGUubU11dGV4KTsKKyAgICBpZiAoY2xlYXJDYWNoZSB8fCBtQ2FjaGUubUxhc3RDbGVhblVwVXMgKyBrQ2xlYW5VcER1cmF0aW9uVXMgPCBub3cpIHsKKyAgICAgICAgc3RkOjpsb2NrX2d1YXJkPHN0ZDo6bXV0ZXg+IGxvY2syKG1BY3RpdmUubU11dGV4KTsKKyAgICAgICAgaW50IGNsZWFuZWQgPSAwOworICAgICAgICBmb3IgKGF1dG8gaXQgPSBtQWN0aXZlLm1DbGllbnRzLmJlZ2luKCk7IGl0ICE9IG1BY3RpdmUubUNsaWVudHMuZW5kKCk7KSB7CisgICAgICAgICAgICBpZiAoIWl0LT5zZWNvbmQtPmlzQWN0aXZlKCZsYXN0VHJhbnNhY3Rpb25VcywgY2xlYXJDYWNoZSkpIHsKKyAgICAgICAgICAgICAgICBpZiAobGFzdFRyYW5zYWN0aW9uVXMgKyBrQ2xpZW50VGltZW91dFVzIDwgbm93KSB7CisgICAgICAgICAgICAgICAgICAgIHNwPElBY2Nlc3Nvcj4gYWNjZXNzb3I7CisgICAgICAgICAgICAgICAgICAgIGl0LT5zZWNvbmQtPmdldEFjY2Vzc29yKCZhY2Nlc3Nvcik7CisgICAgICAgICAgICAgICAgICAgIGl0ID0gbUFjdGl2ZS5tQ2xpZW50cy5lcmFzZShpdCk7CisgICAgICAgICAgICAgICAgICAgICsrY2xlYW5lZDsKKyAgICAgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgKytpdDsKKyAgICAgICAgfQorICAgICAgICBmb3IgKGF1dG8gY2l0ID0gbUNhY2hlLm1DbGllbnRzLmJlZ2luKCk7IGNpdCAhPSBtQ2FjaGUubUNsaWVudHMuZW5kKCk7KSB7CisgICAgICAgICAgICAvLyBjbGVhbiB1cCBkZWFkIGNsaWVudCBjYWNoZXMKKyAgICAgICAgICAgIHNwPElBY2Nlc3Nvcj4gY0FjY2Vzc29yID0gY2l0LT5maXJzdC5wcm9tb3RlKCk7CisgICAgICAgICAgICBpZiAoIWNBY2Nlc3NvcikgeworICAgICAgICAgICAgICAgIGNpdCA9IG1DYWNoZS5tQ2xpZW50cy5lcmFzZShjaXQpOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICArK2NpdDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBBTE9HVigiIyBvZiBjbGVhbmVkIGNvbm5lY3Rpb25zOiAlZCIsIGNsZWFuZWQpOworICAgICAgICBtQ2FjaGUubUxhc3RDbGVhblVwVXMgPSBub3c7CisgICAgfQorfQorCisvLyBNZXRob2RzIGZyb20gOjphbmRyb2lkOjpoYXJkd2FyZTo6bWVkaWE6OmJ1ZmZlcnBvb2w6OlYxXzA6OklDbGllbnRNYW5hZ2VyIGZvbGxvdy4KK1JldHVybjx2b2lkPiBDbGllbnRNYW5hZ2VyOjpyZWdpc3RlclNlbmRlcihjb25zdCBzcDw6OmFuZHJvaWQ6OmhhcmR3YXJlOjptZWRpYTo6YnVmZmVycG9vbDo6VjFfMDo6SUFjY2Vzc29yPiYgYnVmZmVyUG9vbCwgcmVnaXN0ZXJTZW5kZXJfY2IgX2hpZGxfY2IpIHsKKyAgICBpZiAobUltcGwpIHsKKyAgICAgICAgQ29ubmVjdGlvbklkIGNvbm5lY3Rpb25JZCA9IC0xOworICAgICAgICBSZXN1bHRTdGF0dXMgc3RhdHVzID0gbUltcGwtPnJlZ2lzdGVyU2VuZGVyKGJ1ZmZlclBvb2wsICZjb25uZWN0aW9uSWQpOworICAgICAgICBfaGlkbF9jYihzdGF0dXMsIGNvbm5lY3Rpb25JZCk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgX2hpZGxfY2IoUmVzdWx0U3RhdHVzOjpDUklUSUNBTF9FUlJPUiwgLTEpOworICAgIH0KKyAgICByZXR1cm4gVm9pZCgpOworfQorCisvLyBNZXRob2RzIGZvciBsb2NhbCB1c2UuCitzcDxDbGllbnRNYW5hZ2VyPiBDbGllbnRNYW5hZ2VyOjpzSW5zdGFuY2U7CitzdGQ6Om11dGV4IENsaWVudE1hbmFnZXI6OnNJbnN0YW5jZUxvY2s7CisKK3NwPENsaWVudE1hbmFnZXI+IENsaWVudE1hbmFnZXI6OmdldEluc3RhbmNlKCkgeworICAgIHN0ZDo6bG9ja19ndWFyZDxzdGQ6Om11dGV4PiBsb2NrKHNJbnN0YW5jZUxvY2spOworICAgIGlmICghc0luc3RhbmNlKSB7CisgICAgICAgIHNJbnN0YW5jZSA9IG5ldyBDbGllbnRNYW5hZ2VyKCk7CisgICAgfQorICAgIHJldHVybiBzSW5zdGFuY2U7Cit9CisKK0NsaWVudE1hbmFnZXI6OkNsaWVudE1hbmFnZXIoKSA6IG1JbXBsKG5ldyBJbXBsKCkpIHt9CisKK0NsaWVudE1hbmFnZXI6On5DbGllbnRNYW5hZ2VyKCkgeworfQorCitSZXN1bHRTdGF0dXMgQ2xpZW50TWFuYWdlcjo6Y3JlYXRlKAorICAgICAgICBjb25zdCBzdGQ6OnNoYXJlZF9wdHI8QnVmZmVyUG9vbEFsbG9jYXRvcj4gJmFsbG9jYXRvciwKKyAgICAgICAgQ29ubmVjdGlvbklkICpwQ29ubmVjdGlvbklkKSB7CisgICAgaWYgKG1JbXBsKSB7CisgICAgICAgIHJldHVybiBtSW1wbC0+Y3JlYXRlKGFsbG9jYXRvciwgcENvbm5lY3Rpb25JZCk7CisgICAgfQorICAgIHJldHVybiBSZXN1bHRTdGF0dXM6OkNSSVRJQ0FMX0VSUk9SOworfQorCitSZXN1bHRTdGF0dXMgQ2xpZW50TWFuYWdlcjo6cmVnaXN0ZXJTZW5kZXIoCisgICAgICAgIGNvbnN0IHNwPElDbGllbnRNYW5hZ2VyPiAmcmVjZWl2ZXIsCisgICAgICAgIENvbm5lY3Rpb25JZCBzZW5kZXJJZCwKKyAgICAgICAgQ29ubmVjdGlvbklkICpyZWNlaXZlcklkKSB7CisgICAgaWYgKG1JbXBsKSB7CisgICAgICAgIHJldHVybiBtSW1wbC0+cmVnaXN0ZXJTZW5kZXIocmVjZWl2ZXIsIHNlbmRlcklkLCByZWNlaXZlcklkKTsKKyAgICB9CisgICAgcmV0dXJuIFJlc3VsdFN0YXR1czo6Q1JJVElDQUxfRVJST1I7Cit9CisKK1Jlc3VsdFN0YXR1cyBDbGllbnRNYW5hZ2VyOjpjbG9zZShDb25uZWN0aW9uSWQgY29ubmVjdGlvbklkKSB7CisgICAgaWYgKG1JbXBsKSB7CisgICAgICAgIHJldHVybiBtSW1wbC0+Y2xvc2UoY29ubmVjdGlvbklkKTsKKyAgICB9CisgICAgcmV0dXJuIFJlc3VsdFN0YXR1czo6Q1JJVElDQUxfRVJST1I7Cit9CisKK1Jlc3VsdFN0YXR1cyBDbGllbnRNYW5hZ2VyOjphbGxvY2F0ZSgKKyAgICAgICAgQ29ubmVjdGlvbklkIGNvbm5lY3Rpb25JZCwgY29uc3Qgc3RkOjp2ZWN0b3I8dWludDhfdD4gJnBhcmFtcywKKyAgICAgICAgbmF0aXZlX2hhbmRsZV90ICoqaGFuZGxlLCBzdGQ6OnNoYXJlZF9wdHI8QnVmZmVyUG9vbERhdGE+ICpidWZmZXIpIHsKKyAgICBpZiAobUltcGwpIHsKKyAgICAgICAgcmV0dXJuIG1JbXBsLT5hbGxvY2F0ZShjb25uZWN0aW9uSWQsIHBhcmFtcywgaGFuZGxlLCBidWZmZXIpOworICAgIH0KKyAgICByZXR1cm4gUmVzdWx0U3RhdHVzOjpDUklUSUNBTF9FUlJPUjsKK30KKworUmVzdWx0U3RhdHVzIENsaWVudE1hbmFnZXI6OnJlY2VpdmUoCisgICAgICAgIENvbm5lY3Rpb25JZCBjb25uZWN0aW9uSWQsIFRyYW5zYWN0aW9uSWQgdHJhbnNhY3Rpb25JZCwKKyAgICAgICAgQnVmZmVySWQgYnVmZmVySWQsIGludDY0X3QgdGltZXN0YW1wVXMsCisgICAgICAgIG5hdGl2ZV9oYW5kbGVfdCAqKmhhbmRsZSwgc3RkOjpzaGFyZWRfcHRyPEJ1ZmZlclBvb2xEYXRhPiAqYnVmZmVyKSB7CisgICAgaWYgKG1JbXBsKSB7CisgICAgICAgIHJldHVybiBtSW1wbC0+cmVjZWl2ZShjb25uZWN0aW9uSWQsIHRyYW5zYWN0aW9uSWQsIGJ1ZmZlcklkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGltZXN0YW1wVXMsIGhhbmRsZSwgYnVmZmVyKTsKKyAgICB9CisgICAgcmV0dXJuIFJlc3VsdFN0YXR1czo6Q1JJVElDQUxfRVJST1I7Cit9CisKK1Jlc3VsdFN0YXR1cyBDbGllbnRNYW5hZ2VyOjpwb3N0U2VuZCgKKyAgICAgICAgQ29ubmVjdGlvbklkIHJlY2VpdmVySWQsIGNvbnN0IHN0ZDo6c2hhcmVkX3B0cjxCdWZmZXJQb29sRGF0YT4gJmJ1ZmZlciwKKyAgICAgICAgVHJhbnNhY3Rpb25JZCAqdHJhbnNhY3Rpb25JZCwgaW50NjRfdCogdGltZXN0YW1wVXMpIHsKKyAgICBpZiAobUltcGwgJiYgYnVmZmVyKSB7CisgICAgICAgIHJldHVybiBtSW1wbC0+cG9zdFNlbmQocmVjZWl2ZXJJZCwgYnVmZmVyLCB0cmFuc2FjdGlvbklkLCB0aW1lc3RhbXBVcyk7CisgICAgfQorICAgIHJldHVybiBSZXN1bHRTdGF0dXM6OkNSSVRJQ0FMX0VSUk9SOworfQorCit2b2lkIENsaWVudE1hbmFnZXI6OmNsZWFuVXAoKSB7CisgICAgaWYgKG1JbXBsKSB7CisgICAgICAgIG1JbXBsLT5jbGVhblVwKHRydWUpOworICAgIH0KK30KKworfSAgLy8gbmFtZXNwYWNlIGltcGxlbWVudGF0aW9uCit9ICAvLyBuYW1lc3BhY2UgVjFfMAorfSAgLy8gbmFtZXNwYWNlIGJ1ZmZlcnBvb2wKK30gIC8vIG5hbWVzcGFjZSBtZWRpYQorfSAgLy8gbmFtZXNwYWNlIGhhcmR3YXJlCit9ICAvLyBuYW1lc3BhY2UgYW5kcm9pZApkaWZmIC0tZ2l0IGEvbWVkaWEvYnVmZmVycG9vbC8xLjAvQ29ubmVjdGlvbi5jcHAgYi9tZWRpYS9idWZmZXJwb29sLzEuMC9Db25uZWN0aW9uLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNThmNTk1Ci0tLSAvZGV2L251bGwKKysrIGIvbWVkaWEvYnVmZmVycG9vbC8xLjAvQ29ubmVjdGlvbi5jcHAKQEAgLTAsMCArMSw4OSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxOCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCisKKyNpbmNsdWRlICJDb25uZWN0aW9uLmgiCisKK25hbWVzcGFjZSBhbmRyb2lkIHsKK25hbWVzcGFjZSBoYXJkd2FyZSB7CituYW1lc3BhY2UgbWVkaWEgeworbmFtZXNwYWNlIGJ1ZmZlcnBvb2wgeworbmFtZXNwYWNlIFYxXzAgeworbmFtZXNwYWNlIGltcGxlbWVudGF0aW9uIHsKKworLy8gTWV0aG9kcyBmcm9tIDo6YW5kcm9pZDo6aGFyZHdhcmU6Om1lZGlhOjpidWZmZXJwb29sOjpWMV8wOjpJQ29ubmVjdGlvbiBmb2xsb3cuCitSZXR1cm48dm9pZD4gQ29ubmVjdGlvbjo6ZmV0Y2godWludDY0X3QgdHJhbnNhY3Rpb25JZCwgdWludDMyX3QgYnVmZmVySWQsIGZldGNoX2NiIF9oaWRsX2NiKSB7CisgICAgUmVzdWx0U3RhdHVzIHN0YXR1cyA9IFJlc3VsdFN0YXR1czo6Q1JJVElDQUxfRVJST1I7CisgICAgaWYgKG1Jbml0aWFsaXplZCAmJiBtQWNjZXNzb3IpIHsKKyAgICAgICAgaWYgKGJ1ZmZlcklkICE9IFNZTkNfQlVGRkVSSUQpIHsKKyAgICAgICAgICAgIGNvbnN0IG5hdGl2ZV9oYW5kbGVfdCAqaGFuZGxlID0gbnVsbHB0cjsKKyAgICAgICAgICAgIHN0YXR1cyA9IG1BY2Nlc3Nvci0+ZmV0Y2goCisgICAgICAgICAgICAgICAgICAgIG1Db25uZWN0aW9uSWQsIHRyYW5zYWN0aW9uSWQsIGJ1ZmZlcklkLCAmaGFuZGxlKTsKKyAgICAgICAgICAgIGlmIChzdGF0dXMgPT0gUmVzdWx0U3RhdHVzOjpPSykgeworICAgICAgICAgICAgICAgIF9oaWRsX2NiKHN0YXR1cywgQnVmZmVye2J1ZmZlcklkLCBoYW5kbGV9KTsKKyAgICAgICAgICAgICAgICByZXR1cm4gVm9pZCgpOworICAgICAgICAgICAgfQorICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgbUFjY2Vzc29yLT5jbGVhblVwKGZhbHNlKTsKKyAgICAgICAgfQorICAgIH0KKyAgICBfaGlkbF9jYihzdGF0dXMsIEJ1ZmZlcnswLCBudWxscHRyfSk7CisgICAgcmV0dXJuIFZvaWQoKTsKK30KKworQ29ubmVjdGlvbjo6Q29ubmVjdGlvbigpIDogbUluaXRpYWxpemVkKGZhbHNlKSwgbUNvbm5lY3Rpb25JZCgtMUxMKSB7fQorCitDb25uZWN0aW9uOjp+Q29ubmVjdGlvbigpIHsKKyAgICBpZiAobUluaXRpYWxpemVkICYmIG1BY2Nlc3NvcikgeworICAgICAgICBtQWNjZXNzb3ItPmNsb3NlKG1Db25uZWN0aW9uSWQpOworICAgIH0KK30KKwordm9pZCBDb25uZWN0aW9uOjppbml0aWFsaXplKAorICAgICAgICBjb25zdCBzcDxBY2Nlc3Nvcj4mIGFjY2Vzc29yLCBDb25uZWN0aW9uSWQgY29ubmVjdGlvbklkKSB7CisgICAgaWYgKCFtSW5pdGlhbGl6ZWQpIHsKKyAgICAgICAgbUFjY2Vzc29yID0gYWNjZXNzb3I7CisgICAgICAgIG1Db25uZWN0aW9uSWQgPSBjb25uZWN0aW9uSWQ7CisgICAgICAgIG1Jbml0aWFsaXplZCA9IHRydWU7CisgICAgfQorfQorCitSZXN1bHRTdGF0dXMgQ29ubmVjdGlvbjo6YWxsb2NhdGUoCisgICAgICAgIGNvbnN0IHN0ZDo6dmVjdG9yPHVpbnQ4X3Q+ICZwYXJhbXMsIEJ1ZmZlcklkICpidWZmZXJJZCwKKyAgICAgICAgY29uc3QgbmF0aXZlX2hhbmRsZV90ICoqaGFuZGxlKSB7CisgICAgaWYgKG1Jbml0aWFsaXplZCAmJiBtQWNjZXNzb3IpIHsKKyAgICAgICAgcmV0dXJuIG1BY2Nlc3Nvci0+YWxsb2NhdGUobUNvbm5lY3Rpb25JZCwgcGFyYW1zLCBidWZmZXJJZCwgaGFuZGxlKTsKKyAgICB9CisgICAgcmV0dXJuIFJlc3VsdFN0YXR1czo6Q1JJVElDQUxfRVJST1I7Cit9CisKK3ZvaWQgQ29ubmVjdGlvbjo6Y2xlYW5VcChib29sIGNsZWFyQ2FjaGUpIHsKKyAgICBpZiAobUluaXRpYWxpemVkICYmIG1BY2Nlc3NvcikgeworICAgICAgICBtQWNjZXNzb3ItPmNsZWFuVXAoY2xlYXJDYWNoZSk7CisgICAgfQorfQorCisvLyBNZXRob2RzIGZyb20gOjphbmRyb2lkOjpoaWRsOjpiYXNlOjpWMV8wOjpJQmFzZSBmb2xsb3cuCisKKy8vSUNvbm5lY3Rpb24qIEhJRExfRkVUQ0hfSUNvbm5lY3Rpb24oY29uc3QgY2hhciogLyogbmFtZSAqLykgeworLy8gICAgcmV0dXJuIG5ldyBDb25uZWN0aW9uKCk7CisvL30KKworfSAgLy8gbmFtZXNwYWNlIGltcGxlbWVudGF0aW9uCit9ICAvLyBuYW1lc3BhY2UgVjFfMAorfSAgLy8gbmFtZXNwYWNlIGJ1ZmZlcnBvb2wKK30gIC8vIG5hbWVzcGFjZSBtZWRpYQorfSAgLy8gbmFtZXNwYWNlIGhhcmR3YXJlCit9ICAvLyBuYW1lc3BhY2UgYW5kcm9pZApkaWZmIC0tZ2l0IGEvbWVkaWEvYnVmZmVycG9vbC8xLjAvQ29ubmVjdGlvbi5oIGIvbWVkaWEvYnVmZmVycG9vbC8xLjAvQ29ubmVjdGlvbi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUxOWNiNjcKLS0tIC9kZXYvbnVsbAorKysgYi9tZWRpYS9idWZmZXJwb29sLzEuMC9Db25uZWN0aW9uLmgKQEAgLTAsMCArMSwxMDMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTggVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworCisjaWZuZGVmIEFORFJPSURfSEFSRFdBUkVfTUVESUFfQlVGRkVSUE9PTF9WMV8wX0NPTk5FQ1RJT05fSAorI2RlZmluZSBBTkRST0lEX0hBUkRXQVJFX01FRElBX0JVRkZFUlBPT0xfVjFfMF9DT05ORUNUSU9OX0gKKworI2luY2x1ZGUgPGFuZHJvaWQvaGFyZHdhcmUvbWVkaWEvYnVmZmVycG9vbC8xLjAvSUNvbm5lY3Rpb24uaD4KKyNpbmNsdWRlIDxidWZmZXJwb29sL0J1ZmZlclBvb2xUeXBlcy5oPgorI2luY2x1ZGUgPGhpZGwvTVFEZXNjcmlwdG9yLmg+CisjaW5jbHVkZSA8aGlkbC9TdGF0dXMuaD4KKyNpbmNsdWRlICJBY2Nlc3Nvci5oIgorCituYW1lc3BhY2UgYW5kcm9pZCB7CituYW1lc3BhY2UgaGFyZHdhcmUgeworbmFtZXNwYWNlIG1lZGlhIHsKK25hbWVzcGFjZSBidWZmZXJwb29sIHsKK25hbWVzcGFjZSBWMV8wIHsKK25hbWVzcGFjZSBpbXBsZW1lbnRhdGlvbiB7CisKK3VzaW5nIDo6YW5kcm9pZDo6aGFyZHdhcmU6OmhpZGxfYXJyYXk7Cit1c2luZyA6OmFuZHJvaWQ6OmhhcmR3YXJlOjpoaWRsX21lbW9yeTsKK3VzaW5nIDo6YW5kcm9pZDo6aGFyZHdhcmU6OmhpZGxfc3RyaW5nOwordXNpbmcgOjphbmRyb2lkOjpoYXJkd2FyZTo6aGlkbF92ZWM7Cit1c2luZyA6OmFuZHJvaWQ6OmhhcmR3YXJlOjptZWRpYTo6YnVmZmVycG9vbDo6VjFfMDo6aW1wbGVtZW50YXRpb246OkFjY2Vzc29yOwordXNpbmcgOjphbmRyb2lkOjpoYXJkd2FyZTo6UmV0dXJuOwordXNpbmcgOjphbmRyb2lkOjpoYXJkd2FyZTo6Vm9pZDsKK3VzaW5nIDo6YW5kcm9pZDo6c3A7CisKK3N0cnVjdCBDb25uZWN0aW9uIDogcHVibGljIElDb25uZWN0aW9uIHsKKyAgICAvLyBNZXRob2RzIGZyb20gOjphbmRyb2lkOjpoYXJkd2FyZTo6bWVkaWE6OmJ1ZmZlcnBvb2w6OlYxXzA6OklDb25uZWN0aW9uIGZvbGxvdy4KKyAgICBSZXR1cm48dm9pZD4gZmV0Y2godWludDY0X3QgdHJhbnNhY3Rpb25JZCwgdWludDMyX3QgYnVmZmVySWQsIGZldGNoX2NiIF9oaWRsX2NiKSBvdmVycmlkZTsKKworICAgIC8qKgorICAgICAqIEFsbG9jYXRlcyBhIGJ1ZmZlciB1c2luZyB0aGUgc3BlY2lmaWVkIHBhcmFtZXRlcnMuIFJlY3ljbGVzIGEgYnVmZmVyIGlmCisgICAgICogaXQgaXMgcG9zc2libGUuIFRoZSByZXR1cm5lZCBidWZmZXIgY2FuIGJlIHRyYW5zZmVycmVkIHRvIG90aGVyIHJlbW90ZQorICAgICAqIGNsaWVudHMoQ29ubmVjdGlvbikuCisgICAgICoKKyAgICAgKiBAcGFyYW0gcGFyYW1zICAgIGFsbG9jYXRpb24gcGFyYW1ldGVycy4KKyAgICAgKiBAcGFyYW0gYnVmZmVySWQgIElkIG9mIHRoZSBhbGxvY2F0ZWQgYnVmZmVyLgorICAgICAqIEBwYXJhbSBoYW5kbGUgICAgbmF0aXZlIGhhbmRsZSBvZiB0aGUgYWxsb2NhdGVkIGJ1ZmZlci4KKyAgICAgKgorICAgICAqIEByZXR1cm4gT0sgaWYgYSBidWZmZXIgaXMgc3VjY2Vzc2Z1bGx5IGFsbG9jYXRlZC4KKyAgICAgKiAgICAgICAgIE5PX01FTU9SWSB3aGVuIHRoZXJlIGlzIG5vIG1lbW9yeS4KKyAgICAgKiAgICAgICAgIENSSVRJQ0FMX0VSUk9SIG90aGVyd2lzZS4KKyAgICAgKi8KKyAgICBSZXN1bHRTdGF0dXMgYWxsb2NhdGUoY29uc3Qgc3RkOjp2ZWN0b3I8dWludDhfdD4gJnBhcmFtcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgQnVmZmVySWQgKmJ1ZmZlcklkLCBjb25zdCBuYXRpdmVfaGFuZGxlX3QgKipoYW5kbGUpOworCisgICAgLyoqCisgICAgICogUHJvY2Vzc2VzIHBlbmRpbmcgYnVmZmVyIHN0YXR1cyBtZXNzYWdlcyBhbmQgcGVyZm9ybXMgcGVyaW9kaWMgY2FjaGUgY2xlYW5pbmcKKyAgICAgKiBmcm9tIGJ1ZmZlcnBvb2wuCisgICAgICoKKyAgICAgKiBAcGFyYW0gY2xlYXJDYWNoZSAgICBpZiBjbGVhckNhY2hlIGlzIHRydWUsIGJ1ZmZlcnBvb2wgZnJlZXMgYWxsIGJ1ZmZlcnMKKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICB3YWl0aW5nIHRvIGJlIHJlY3ljbGVkLgorICAgICAqLworICAgIHZvaWQgY2xlYW5VcChib29sIGNsZWFyQ2FjaGUpOworCisgICAgLyoqIERlc3RydWN0cyBhIGNvbm5lY3Rpb24uICovCisgICAgfkNvbm5lY3Rpb24oKTsKKworICAgIC8qKiBDcmVhdGVzIGEgY29ubmVjdGlvbi4gKi8KKyAgICBDb25uZWN0aW9uKCk7CisKKyAgICAvKioKKyAgICAgKiBJbml0aWFsaXplcyB3aXRoIHRoZSBzcGVjaWZpZWQgYnVmZmVyIHBvb2wgYW5kIHRoZSBjb25uZWN0aW9uIGlkLgorICAgICAqIFRoZSBjb25uZWN0aW9uIGlkIHNob3VsZCBiZSB1bmlxdWUgaW4gdGhlIHdob2xlIHN5c3RlbS4KKyAgICAgKgorICAgICAqIEBwYXJhbSBhY2Nlc3NvciAgICAgIHRoZSBzcGVjaWZpZWQgYnVmZmVyIHBvb2wuCisgICAgICogQHBhcmFtIGNvbm5lY3Rpb25JZCAgSWQuCisgICAgICovCisgICAgdm9pZCBpbml0aWFsaXplKGNvbnN0IHNwPEFjY2Vzc29yPiAmYWNjZXNzb3IsIENvbm5lY3Rpb25JZCBjb25uZWN0aW9uSWQpOworCisgICAgZW51bSA6IHVpbnQzMl90IHsKKyAgICAgICAgU1lOQ19CVUZGRVJJRCA9IFVJTlQzMl9NQVgsCisgICAgfTsKKworcHJpdmF0ZToKKyAgICBib29sIG1Jbml0aWFsaXplZDsKKyAgICBzcDxBY2Nlc3Nvcj4gbUFjY2Vzc29yOworICAgIENvbm5lY3Rpb25JZCBtQ29ubmVjdGlvbklkOworfTsKKworfSAgLy8gbmFtZXNwYWNlIGltcGxlbWVudGF0aW9uCit9ICAvLyBuYW1lc3BhY2UgVjFfMAorfSAgLy8gbmFtZXNwYWNlIGJ1ZmZlcnBvb2wKK30gIC8vIG5hbWVzcGFjZSBtZWRpYQorfSAgLy8gbmFtZXNwYWNlIGhhcmR3YXJlCit9ICAvLyBuYW1lc3BhY2UgYW5kcm9pZAorCisjZW5kaWYgIC8vIEFORFJPSURfSEFSRFdBUkVfTUVESUFfQlVGRkVSUE9PTF9WMV8wX0NPTk5FQ1RJT05fSApkaWZmIC0tZ2l0IGEvbWVkaWEvYnVmZmVycG9vbC8xLjAvaW5jbHVkZS9idWZmZXJwb29sL0J1ZmZlclBvb2xUeXBlcy5oIGIvbWVkaWEvYnVmZmVycG9vbC8xLjAvaW5jbHVkZS9idWZmZXJwb29sL0J1ZmZlclBvb2xUeXBlcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjcxMGYwMTUKLS0tIC9kZXYvbnVsbAorKysgYi9tZWRpYS9idWZmZXJwb29sLzEuMC9pbmNsdWRlL2J1ZmZlcnBvb2wvQnVmZmVyUG9vbFR5cGVzLmgKQEAgLTAsMCArMSwxMTggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTggVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworCisjaWZuZGVmIEFORFJPSURfSEFSRFdBUkVfTUVESUFfQlVGRkVSUE9PTF9WMV8wX0JVRkZFUlBPT0xUWVBFU19ICisjZGVmaW5lIEFORFJPSURfSEFSRFdBUkVfTUVESUFfQlVGRkVSUE9PTF9WMV8wX0JVRkZFUlBPT0xUWVBFU19ICisKKyNpbmNsdWRlIDxhbmRyb2lkL2hhcmR3YXJlL21lZGlhL2J1ZmZlcnBvb2wvMS4wL3R5cGVzLmg+CisjaW5jbHVkZSA8Y3V0aWxzL25hdGl2ZV9oYW5kbGUuaD4KKyNpbmNsdWRlIDxmbXEvTWVzc2FnZVF1ZXVlLmg+CisjaW5jbHVkZSA8aGlkbC9NUURlc2NyaXB0b3IuaD4KKyNpbmNsdWRlIDxoaWRsL1N0YXR1cy5oPgorCituYW1lc3BhY2UgYW5kcm9pZCB7CituYW1lc3BhY2UgaGFyZHdhcmUgeworbmFtZXNwYWNlIG1lZGlhIHsKK25hbWVzcGFjZSBidWZmZXJwb29sIHsKKworc3RydWN0IEJ1ZmZlclBvb2xEYXRhIHsKKyAgICAvLyBGb3IgbG9jYWwgdXNlLCB0byBzcGVjaWZ5IGEgYnVmZmVycG9vbCAoY2xpZW50IGNvbm5lY3Rpb24pIGZvciBidWZmZXJzLgorICAgIC8vIFJldHVybiB2YWx1ZSBmcm9tIGNvbm5lY3QjSUFjY2Vzc29yKGFuZHJvaWQuaGFyZHdhcmUubWVkaWEuYnVmZmVycG9vbEAxLjApLgorICAgIGludDY0X3QgbUNvbm5lY3Rpb25JZDsKKyAgICAvLyBCdWZmZXJJZAorICAgIHVpbnQzMl90IG1JZDsKKworICAgIEJ1ZmZlclBvb2xEYXRhKCkgOiBtQ29ubmVjdGlvbklkKDApLCBtSWQoMCkge30KKworICAgIEJ1ZmZlclBvb2xEYXRhKAorICAgICAgICAgICAgaW50NjRfdCBjb25uZWN0aW9uSWQsIHVpbnQzMl90IGlkKQorICAgICAgICAgICAgOiBtQ29ubmVjdGlvbklkKGNvbm5lY3Rpb25JZCksIG1JZChpZCkge30KKworICAgIH5CdWZmZXJQb29sRGF0YSgpIHt9Cit9OworCituYW1lc3BhY2UgVjFfMCB7CituYW1lc3BhY2UgaW1wbGVtZW50YXRpb24geworCit1c2luZyA6OmFuZHJvaWQ6OmhhcmR3YXJlOjprU3luY2hyb25pemVkUmVhZFdyaXRlOworCit0eXBlZGVmIHVpbnQzMl90IEJ1ZmZlcklkOwordHlwZWRlZiB1aW50NjRfdCBUcmFuc2FjdGlvbklkOwordHlwZWRlZiBpbnQ2NF90IENvbm5lY3Rpb25JZDsKKworZW51bSA6IENvbm5lY3Rpb25JZCB7CisgICAgSU5WQUxJRF9DT05ORUNUSU9OSUQgPSAwLAorfTsKKwordHlwZWRlZiBhbmRyb2lkOjpoYXJkd2FyZTo6TWVzc2FnZVF1ZXVlPEJ1ZmZlclN0YXR1c01lc3NhZ2UsIGtTeW5jaHJvbml6ZWRSZWFkV3JpdGU+IEJ1ZmZlclN0YXR1c1F1ZXVlOwordHlwZWRlZiBCdWZmZXJTdGF0dXNRdWV1ZTo6RGVzY3JpcHRvciBRdWV1ZURlc2NyaXB0b3I7CisKKy8qKgorICogQWxsb2NhdGlvbiB3cmFwcGVyIGNsYXNzIGZvciBidWZmZXIgcG9vbC4KKyAqLworc3RydWN0IEJ1ZmZlclBvb2xBbGxvY2F0aW9uIHsKKyAgICBjb25zdCBuYXRpdmVfaGFuZGxlX3QgKm1IYW5kbGU7CisKKyAgICBjb25zdCBuYXRpdmVfaGFuZGxlX3QgKmhhbmRsZSgpIHsKKyAgICAgICAgcmV0dXJuIG1IYW5kbGU7CisgICAgfQorCisgICAgQnVmZmVyUG9vbEFsbG9jYXRpb24oY29uc3QgbmF0aXZlX2hhbmRsZV90ICpoYW5kbGUpIDogbUhhbmRsZShoYW5kbGUpIHt9CisKKyAgICB+QnVmZmVyUG9vbEFsbG9jYXRpb24oKSB7fTsKK307CisKKy8qKgorICogQWxsb2NhdG9yIHdyYXBwZXIgY2xhc3MgZm9yIGJ1ZmZlciBwb29sLgorICovCitjbGFzcyBCdWZmZXJQb29sQWxsb2NhdG9yIHsKK3B1YmxpYzoKKworICAgIC8qKgorICAgICAqIEFsbG9jYXRlIGFuIGFsbG9jYXRpb24oYnVmZmVyKSBmb3IgYnVmZmVyIHBvb2wuCisgICAgICoKKyAgICAgKiBAcGFyYW0gcGFyYW1zICAgIGFsbG9jYXRpb24gcGFyYW1ldGVycworICAgICAqIEBwYXJhbSBhbGxvYyAgICAgY3JlYXRlZCBhbGxvY2F0aW9uCisgICAgICogQHBhcmFtIGFsbG9jU2l6ZSBzaXplIG9mIGNyZWF0ZWQgYWxsb2NhdGlvbgorICAgICAqCisgICAgICogQHJldHVybiBPSyB3aGVuIGFuIGFsbG9jYXRpb24gaXMgY3JlYXRlZCBzdWNjZXNzZnVsbHkuCisgICAgICovCisgICAgdmlydHVhbCBSZXN1bHRTdGF0dXMgYWxsb2NhdGUoCisgICAgICAgICAgICBjb25zdCBzdGQ6OnZlY3Rvcjx1aW50OF90PiAmcGFyYW1zLAorICAgICAgICAgICAgc3RkOjpzaGFyZWRfcHRyPEJ1ZmZlclBvb2xBbGxvY2F0aW9uPiAqYWxsb2MsCisgICAgICAgICAgICBzaXplX3QgKmFsbG9jU2l6ZSkgPSAwOworCisgICAgLyoqCisgICAgICogUmV0dXJucyB3aGV0aGVyIGFsbG9jYXRpb24gcGFyYW1ldGVycyBvZiBhbiBvbGQgYWxsb2NhdGlvbiBhcmUKKyAgICAgKiBjb21wYXRpYmxlIHdpdGggbmV3IGFsbG9jYXRpb24gcGFyYW1ldGVycy4KKyAgICAgKi8KKyAgICB2aXJ0dWFsIGJvb2wgY29tcGF0aWJsZShjb25zdCBzdGQ6OnZlY3Rvcjx1aW50OF90PiAmbmV3UGFyYW1zLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0ZDo6dmVjdG9yPHVpbnQ4X3Q+ICZvbGRQYXJhbXMpID0gMDsKKworcHJvdGVjdGVkOgorICAgIEJ1ZmZlclBvb2xBbGxvY2F0b3IoKSA9IGRlZmF1bHQ7CisKKyAgICB2aXJ0dWFsIH5CdWZmZXJQb29sQWxsb2NhdG9yKCkgPSBkZWZhdWx0OworfTsKKworfSAgLy8gbmFtZXNwYWNlIGltcGxlbWVudGF0aW9uCit9ICAvLyBuYW1lc3BhY2UgVjFfMAorfSAgLy8gbmFtZXNwYWNlIGJ1ZmZlcnBvb2wKK30gIC8vIG5hbWVzcGFjZSBtZWRpYQorfSAgLy8gbmFtZXNwYWNlIGhhcmR3YXJlCit9ICAvLyBuYW1lc3BhY2UgYW5kcm9pZAorCisjZW5kaWYgIC8vIEFORFJPSURfSEFSRFdBUkVfTUVESUFfQlVGRkVSUE9PTF9WMV8wX0JVRkZFUlBPT0xUWVBFU19ICmRpZmYgLS1naXQgYS9tZWRpYS9idWZmZXJwb29sLzEuMC9pbmNsdWRlL2J1ZmZlcnBvb2wvQ2xpZW50TWFuYWdlci5oIGIvbWVkaWEvYnVmZmVycG9vbC8xLjAvaW5jbHVkZS9idWZmZXJwb29sL0NsaWVudE1hbmFnZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iZTU3NzlmCi0tLSAvZGV2L251bGwKKysrIGIvbWVkaWEvYnVmZmVycG9vbC8xLjAvaW5jbHVkZS9idWZmZXJwb29sL0NsaWVudE1hbmFnZXIuaApAQCAtMCwwICsxLDE3OSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxOCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCisKKyNpZm5kZWYgQU5EUk9JRF9IQVJEV0FSRV9NRURJQV9CVUZGRVJQT09MX1YxXzBfQ0xJRU5UTUFOQUdFUl9ICisjZGVmaW5lIEFORFJPSURfSEFSRFdBUkVfTUVESUFfQlVGRkVSUE9PTF9WMV8wX0NMSUVOVE1BTkFHRVJfSAorCisjaW5jbHVkZSA8YW5kcm9pZC9oYXJkd2FyZS9tZWRpYS9idWZmZXJwb29sLzEuMC9JQ2xpZW50TWFuYWdlci5oPgorI2luY2x1ZGUgPGhpZGwvTVFEZXNjcmlwdG9yLmg+CisjaW5jbHVkZSA8aGlkbC9TdGF0dXMuaD4KKyNpbmNsdWRlIDxtZW1vcnk+CisjaW5jbHVkZSAiQnVmZmVyUG9vbFR5cGVzLmgiCisKK25hbWVzcGFjZSBhbmRyb2lkIHsKK25hbWVzcGFjZSBoYXJkd2FyZSB7CituYW1lc3BhY2UgbWVkaWEgeworbmFtZXNwYWNlIGJ1ZmZlcnBvb2wgeworbmFtZXNwYWNlIFYxXzAgeworbmFtZXNwYWNlIGltcGxlbWVudGF0aW9uIHsKKwordXNpbmcgOjphbmRyb2lkOjpoYXJkd2FyZTo6aGlkbF9hcnJheTsKK3VzaW5nIDo6YW5kcm9pZDo6aGFyZHdhcmU6OmhpZGxfbWVtb3J5OwordXNpbmcgOjphbmRyb2lkOjpoYXJkd2FyZTo6aGlkbF9zdHJpbmc7Cit1c2luZyA6OmFuZHJvaWQ6OmhhcmR3YXJlOjpoaWRsX3ZlYzsKK3VzaW5nIDo6YW5kcm9pZDo6aGFyZHdhcmU6Om1lZGlhOjpidWZmZXJwb29sOjpWMV8wOjpJQWNjZXNzb3I7Cit1c2luZyA6OmFuZHJvaWQ6OmhhcmR3YXJlOjptZWRpYTo6YnVmZmVycG9vbDo6VjFfMDo6UmVzdWx0U3RhdHVzOwordXNpbmcgOjphbmRyb2lkOjpoYXJkd2FyZTo6UmV0dXJuOwordXNpbmcgOjphbmRyb2lkOjpoYXJkd2FyZTo6Vm9pZDsKK3VzaW5nIDo6YW5kcm9pZDo6c3A7CisKK3N0cnVjdCBDbGllbnRNYW5hZ2VyIDogcHVibGljIElDbGllbnRNYW5hZ2VyIHsKKyAgICAvLyBNZXRob2RzIGZyb20gOjphbmRyb2lkOjpoYXJkd2FyZTo6bWVkaWE6OmJ1ZmZlcnBvb2w6OlYxXzA6OklDbGllbnRNYW5hZ2VyIGZvbGxvdy4KKyAgICBSZXR1cm48dm9pZD4gcmVnaXN0ZXJTZW5kZXIoY29uc3Qgc3A8OjphbmRyb2lkOjpoYXJkd2FyZTo6bWVkaWE6OmJ1ZmZlcnBvb2w6OlYxXzA6OklBY2Nlc3Nvcj4mIGJ1ZmZlclBvb2wsIHJlZ2lzdGVyU2VuZGVyX2NiIF9oaWRsX2NiKSBvdmVycmlkZTsKKworICAgIC8qKiBHZXRzIGFuIGluc3RhbmNlLiAqLworICAgIHN0YXRpYyBzcDxDbGllbnRNYW5hZ2VyPiBnZXRJbnN0YW5jZSgpOworCisgICAgLyoqCisgICAgICogQ3JlYXRlcyBhIGxvY2FsIGNvbm5lY3Rpb24gd2l0aCBhIG5ld2x5IGNyZWF0ZWQgYnVmZmVyIHBvb2wuCisgICAgICoKKyAgICAgKiBAcGFyYW0gYWxsb2NhdG9yICAgICBmb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9uLgorICAgICAqIEBwYXJhbSBwQ29ubmVjdGlvbklkIElkIG9mIHRoZSBjcmVhdGVkIGNvbm5lY3Rpb24uIFRoaXMgaXMKKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICBzeXN0ZW0td2lkZSB1bmlxdWUuCisgICAgICoKKyAgICAgKiBAcmV0dXJuIE9LIHdoZW4gYSBidWZmZXIgcG9vbCBhbmQgYSBsb2NhbCBjb25uZWN0aW9uIGlzIHN1Y2Nlc3NmdWxseQorICAgICAqICAgICAgICAgY3JlYXRlZC4KKyAgICAgKiAgICAgICAgIE5PX01FTU9SWSB3aGVuIHRoZXJlIGlzIG5vIG1lbW9yeS4KKyAgICAgKiAgICAgICAgIENSSVRJQ0FMX0VSUk9SIG90aGVyd2lzZS4KKyAgICAgKi8KKyAgICBSZXN1bHRTdGF0dXMgY3JlYXRlKGNvbnN0IHN0ZDo6c2hhcmVkX3B0cjxCdWZmZXJQb29sQWxsb2NhdG9yPiAmYWxsb2NhdG9yLAorICAgICAgICAgICAgICAgICAgICAgICAgQ29ubmVjdGlvbklkICpwQ29ubmVjdGlvbklkKTsKKworICAgIC8qKgorICAgICAqIFJlZ2lzdGVyIGEgY3JlYXRlZCBjb25uZWN0aW9uIGFzIHNlbmRlciBmb3IgcmVtb3RlIHByb2Nlc3MuCisgICAgICoKKyAgICAgKiBAcGFyYW0gcmVjZWl2ZXIgICAgICBUaGUgcmVtb3RlIHJlY2VpdmluZyBwcm9jZXNzLgorICAgICAqIEBwYXJhbSBzZW5kZXJJZCAgICAgIEEgbG9jYWwgY29ubmVjdGlvbiB3aGljaCB3aWxsIHNlbmQgYnVmZmVycyB0by4KKyAgICAgKiBAcGFyYW0gcmVjZWl2ZXJJZCAgICBJZCBvZiB0aGUgY3JlYXRlZCByZWNlaXZpbmcgY29ubmVjdGlvbiBvbiB0aGUgcmVjZWl2ZXIKKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICBwcm9jZXNzLgorICAgICAqCisgICAgICogQHJldHVybiBPSyB3aGVuIHRoZSByZWNlaXZpbmcgY29ubmVjdGlvbiBpcyBzdWNjZXNzZnVsbHkgY3JlYXRlZCBvbiB0aGUKKyAgICAgKiAgICAgICAgIHJlY2VpdmVyIHByb2Nlc3MuCisgICAgICogICAgICAgICBOT1RfRk9VTkQgd2hlbiB0aGUgc2VuZGVyIGNvbm5lY3Rpb24gd2FzIG5vdCBmb3VuZC4KKyAgICAgKiAgICAgICAgIEFMUkVBRFlfRVhJU1RTIHRoZSByZWNlaXZpbmcgY29ubmVjdGlvbiBpcyBhbHJlYWR5IG1hZGUuCisgICAgICogICAgICAgICBDUklUSUNBTF9FUlJPUiBvdGhlcndpc2UuCisgICAgICovCisgICAgUmVzdWx0U3RhdHVzIHJlZ2lzdGVyU2VuZGVyKGNvbnN0IHNwPElDbGllbnRNYW5hZ2VyPiAmcmVjZWl2ZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENvbm5lY3Rpb25JZCBzZW5kZXJJZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ29ubmVjdGlvbklkICpyZWNlaXZlcklkKTsKKworICAgIC8qKgorICAgICAqIENsb3NlcyB0aGUgc3BlY2lmaWVkIGNvbm5lY3Rpb24uCisgICAgICoKKyAgICAgKiBAcGFyYW0gY29ubmVjdGlvbklkICBUaGUgaWQgb2YgdGhlIGNvbm5lY3Rpb24uCisgICAgICoKKyAgICAgKiBAcmV0dXJuIE9LIHdoZW4gdGhlIGNvbm5lY3Rpb24gaXMgY2xvc2VkLgorICAgICAqICAgICAgICAgTk9UX0ZPVU5EIHdoZW4gdGhlIHNwZWNpZmllZCBjb25uZWN0aW9uIHdhcyBub3QgZm91bmQuCisgICAgICogICAgICAgICBDUklUSUNBTF9FUlJPUiBvdGhlcndpc2UuCisgICAgICovCisgICAgUmVzdWx0U3RhdHVzIGNsb3NlKENvbm5lY3Rpb25JZCBjb25uZWN0aW9uSWQpOworCisgICAgLyoqCisgICAgICogQWxsb2NhdGVzIGEgYnVmZmVyIGZyb20gdGhlIHNwZWNpZmllZCBjb25uZWN0aW9uLgorICAgICAqCisgICAgICogQHBhcmFtIGNvbm5lY3Rpb25JZCAgVGhlIGlkIG9mIHRoZSBjb25uZWN0aW9uLgorICAgICAqIEBwYXJhbSBwYXJhbXMgICAgICAgIFRoZSBhbGxvY2F0aW9uIHBhcmFtZXRlcnMuCisgICAgICogQHBhcmFtIGhhbmRsZSAgICAgICAgVGhlIG5hdGl2ZSBoYW5kbGUgdG8gdGhlIGFsbG9jYXRlZCBidWZmZXIuIGhhbmRsZQorICAgICAqICAgICAgICAgICAgICAgICAgICAgIHNob3VsZCBiZSBjbG9uZWQgYmVmb3JlIHVzZS4KKyAgICAgKiBAcGFyYW0gYnVmZmVyICAgICAgICBUaGUgYWxsb2NhdGVkIGJ1ZmZlci4KKyAgICAgKgorICAgICAqIEByZXR1cm4gT0sgd2hlbiBhIGJ1ZmZlciB3YXMgYWxsb2NhdGVkIHN1Y2Nlc3NmdWxseS4KKyAgICAgKiAgICAgICAgIE5PVF9GT1VORCB3aGVuIHRoZSBzcGVjaWZpZWQgY29ubmVjdGlvbiB3YXMgbm90IGZvdW5kLgorICAgICAqICAgICAgICAgTk9fTUVNT1JZIHdoZW4gdGhlcmUgaXMgbm8gbWVtb3J5LgorICAgICAqICAgICAgICAgQ1JJVElDQUxfRVJST1Igb3RoZXJ3aXNlLgorICAgICAqLworICAgIFJlc3VsdFN0YXR1cyBhbGxvY2F0ZShDb25uZWN0aW9uSWQgY29ubmVjdGlvbklkLAorICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdGQ6OnZlY3Rvcjx1aW50OF90PiAmcGFyYW1zLAorICAgICAgICAgICAgICAgICAgICAgICAgICBuYXRpdmVfaGFuZGxlX3QgKipoYW5kbGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZDo6c2hhcmVkX3B0cjxCdWZmZXJQb29sRGF0YT4gKmJ1ZmZlcik7CisKKyAgICAvKioKKyAgICAgKiBSZWNlaXZlcyBhIGJ1ZmZlciBmb3IgdGhlIHRyYW5zYWN0aW9uLgorICAgICAqCisgICAgICogQHBhcmFtIGNvbm5lY3Rpb25JZCAgVGhlIGlkIG9mIHRoZSByZWNlaXZpbmcgY29ubmVjdGlvbi4KKyAgICAgKiBAcGFyYW0gdHJhbnNhY3Rpb25JZCBUaGUgaWQgZm9yIHRoZSB0cmFuc2FjdGlvbi4KKyAgICAgKiBAcGFyYW0gYnVmZmVySWQgICAgICBUaGUgaWQgZm9yIHRoZSBidWZmZXIuCisgICAgICogQHBhcmFtIHRpbWVzdGFtcFVzICAgVGhlIHRpbWVzdGFtcCBvZiB0aGUgYnVmZmVyIGlzIGJlaW5nIHNlbnQuCisgICAgICogQHBhcmFtIGhhbmRsZSAgICAgICAgVGhlIG5hdGl2ZSBoYW5kbGUgdG8gdGhlIGFsbG9jYXRlZCBidWZmZXIuIGhhbmRsZQorICAgICAqICAgICAgICAgICAgICAgICAgICAgIHNob3VsZCBiZSBjbG9uZWQgYmVmb3JlIHVzZS4KKyAgICAgKiBAcGFyYW0gYnVmZmVyICAgICAgICBUaGUgcmVjZWl2ZWQgYnVmZmVyLgorICAgICAqCisgICAgICogQHJldHVybiBPSyB3aGVuIGEgYnVmZmVyIHdhcyByZWNlaXZlZCBzdWNjZXNzZnVsbHkuCisgICAgICogICAgICAgICBOT1RfRk9VTkQgd2hlbiB0aGUgc3BlY2lmaWVkIGNvbm5lY3Rpb24gd2FzIG5vdCBmb3VuZC4KKyAgICAgKiAgICAgICAgIE5PX01FTU9SWSB3aGVuIHRoZXJlIGlzIG5vIG1lbW9yeS4KKyAgICAgKiAgICAgICAgIENSSVRJQ0FMX0VSUk9SIG90aGVyd2lzZS4KKyAgICAgKi8KKyAgICBSZXN1bHRTdGF0dXMgcmVjZWl2ZShDb25uZWN0aW9uSWQgY29ubmVjdGlvbklkLAorICAgICAgICAgICAgICAgICAgICAgICAgIFRyYW5zYWN0aW9uSWQgdHJhbnNhY3Rpb25JZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICBCdWZmZXJJZCBidWZmZXJJZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICBpbnQ2NF90IHRpbWVzdGFtcFVzLAorICAgICAgICAgICAgICAgICAgICAgICAgICBuYXRpdmVfaGFuZGxlX3QgKipoYW5kbGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgc3RkOjpzaGFyZWRfcHRyPEJ1ZmZlclBvb2xEYXRhPiAqYnVmZmVyKTsKKworICAgIC8qKgorICAgICAqIFBvc3RzIGEgYnVmZmVyIHRyYW5zZmVyIHRyYW5zYWN0aW9uIHRvIHRoZSBidWZmZXIgcG9vbC4gU2VuZHMgYSBidWZmZXIKKyAgICAgKiB0byBvdGhlciByZW1vdGUgY2xpZW50cyhjb25uZWN0aW9uKSBhZnRlciB0aGlzIGNhbGwgaGFzIGJlZW4gc3VjY2VlZGVkLgorICAgICAqCisgICAgICogQHBhcmFtIHJlY2VpdmVySWQgICAgVGhlIGlkIG9mIHRoZSByZWNlaXZpbmcgY29ubmVjdGlvbi4KKyAgICAgKiBAcGFyYW0gYnVmZmVyICAgICAgICB0byB0cmFuc2ZlcgorICAgICAqIEBwYXJhbSB0cmFuc2FjdGlvbklkIElkIG9mIHRoZSB0cmFuc2ZlciB0cmFuc2FjdGlvbi4KKyAgICAgKiBAcGFyYW0gdGltZXN0YW1wVXMgICBUaGUgdGltZXN0YW1wIG9mIHRoZSBidWZmZXIgdHJhbnNhY3Rpb24gaXMgYmVpbmcKKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICBwb3N0ZWQuCisgICAgICoKKyAgICAgKiBAcmV0dXJuIE9LIHdoZW4gYSBidWZmZXIgdHJhbnNhY3Rpb24gd2FzIHBvc3RlZCBzdWNjZXNzZnVsbHkuCisgICAgICogICAgICAgICBOT1RfRk9VTkQgd2hlbiB0aGUgc2VuZGluZyBjb25uZWN0aW9uIHdhcyBub3QgZm91bmQuCisgICAgICogICAgICAgICBDUklUSUNBTF9FUlJPUiBvdGhlcndpc2UuCisgICAgICovCisgICAgUmVzdWx0U3RhdHVzIHBvc3RTZW5kKENvbm5lY3Rpb25JZCByZWNlaXZlcklkLAorICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdGQ6OnNoYXJlZF9wdHI8QnVmZmVyUG9vbERhdGE+ICZidWZmZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgIFRyYW5zYWN0aW9uSWQgKnRyYW5zYWN0aW9uSWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgIGludDY0X3QgKnRpbWVzdGFtcFVzKTsKKworICAgIC8qKgorICAgICAqICBUaW1lIG91dCBpbmFjdGl2ZSBsaW5nZXJpbmcgY29ubmVjdGlvbnMgYW5kIGNsb3NlLgorICAgICAqLworICAgIHZvaWQgY2xlYW5VcCgpOworCisgICAgLyoqIERlc3RydWN0cyB0aGUgbWFuYWdlciBvZiBidWZmZXIgcG9vbCBjbGllbnRzLiAgKi8KKyAgICB+Q2xpZW50TWFuYWdlcigpOworcHJpdmF0ZToKKyAgICBzdGF0aWMgc3A8Q2xpZW50TWFuYWdlcj4gc0luc3RhbmNlOworICAgIHN0YXRpYyBzdGQ6Om11dGV4IHNJbnN0YW5jZUxvY2s7CisKKyAgICBjbGFzcyBJbXBsOworICAgIGNvbnN0IHN0ZDo6dW5pcXVlX3B0cjxJbXBsPiBtSW1wbDsKKworICAgIENsaWVudE1hbmFnZXIoKTsKK307CisKK30gIC8vIG5hbWVzcGFjZSBpbXBsZW1lbnRhdGlvbgorfSAgLy8gbmFtZXNwYWNlIFYxXzAKK30gIC8vIG5hbWVzcGFjZSBidWZmZXJwb29sCit9ICAvLyBuYW1lc3BhY2UgbWVkaWEKK30gIC8vIG5hbWVzcGFjZSBoYXJkd2FyZQorfSAgLy8gbmFtZXNwYWNlIGFuZHJvaWQKKworI2VuZGlmICAvLyBBTkRST0lEX0hBUkRXQVJFX01FRElBX0JVRkZFUlBPT0xfVjFfMF9DTElFTlRNQU5BR0VSX0gKZGlmZiAtLWdpdCBhL21lZGlhL2J1ZmZlcnBvb2wvMS4wL3Z0cy9BbmRyb2lkLmJwIGIvbWVkaWEvYnVmZmVycG9vbC8xLjAvdnRzL0FuZHJvaWQuYnAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWU1YTc1NwotLS0gL2Rldi9udWxsCisrKyBiL21lZGlhL2J1ZmZlcnBvb2wvMS4wL3Z0cy9BbmRyb2lkLmJwCkBAIC0wLDAgKzEsNTEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTggVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworCitjY190ZXN0IHsKKyAgICBuYW1lOiAiVnRzVm5ka0hpZGxCdWZmZXJwb29sVjFfMFRhcmdldFNpbmdsZVRlc3QiLAorICAgIGRlZmF1bHRzOiBbIlZ0c0hhbFRhcmdldFRlc3REZWZhdWx0cyJdLAorICAgIHNyY3M6IFsKKyAgICAgICAgImFsbG9jYXRvci5jcHAiLAorICAgICAgICAic2luZ2xlLmNwcCIsCisgICAgXSwKKyAgICBzdGF0aWNfbGliczogWworICAgICAgICAiYW5kcm9pZC5oYXJkd2FyZS5tZWRpYS5idWZmZXJwb29sQDEuMCIsCisgICAgICAgICJsaWJpb24iLAorICAgICAgICAibGlic3RhZ2VmcmlnaHRfYnVmZmVycG9vbEAxLjAiLAorICAgIF0sCisgICAgc2hhcmVkX2xpYnM6IFsKKyAgICAgICAgImxpYmZtcSIsCisgICAgXSwKKyAgICBjb21waWxlX211bHRpbGliOiAiYm90aCIsCit9CisKK2NjX3Rlc3QgeworICAgIG5hbWU6ICJWdHNWbmRrSGlkbEJ1ZmZlcnBvb2xWMV8wVGFyZ2V0TXVsdGlUZXN0IiwKKyAgICBkZWZhdWx0czogWyJWdHNIYWxUYXJnZXRUZXN0RGVmYXVsdHMiXSwKKyAgICBzcmNzOiBbCisgICAgICAgICJhbGxvY2F0b3IuY3BwIiwKKyAgICAgICAgIm11bHRpLmNwcCIsCisgICAgXSwKKyAgICBzdGF0aWNfbGliczogWworICAgICAgICAiYW5kcm9pZC5oYXJkd2FyZS5tZWRpYS5idWZmZXJwb29sQDEuMCIsCisgICAgICAgICJsaWJpb24iLAorICAgICAgICAibGlic3RhZ2VmcmlnaHRfYnVmZmVycG9vbEAxLjAiLAorICAgIF0sCisgICAgc2hhcmVkX2xpYnM6IFsKKyAgICAgICAgImxpYmZtcSIsCisgICAgXSwKKyAgICBjb21waWxlX211bHRpbGliOiAiYm90aCIsCit9CmRpZmYgLS1naXQgYS9tZWRpYS9idWZmZXJwb29sLzEuMC92dHMvT1dORVJTIGIvbWVkaWEvYnVmZmVycG9vbC8xLjAvdnRzL09XTkVSUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42NzMzZTBjCi0tLSAvZGV2L251bGwKKysrIGIvbWVkaWEvYnVmZmVycG9vbC8xLjAvdnRzL09XTkVSUwpAQCAtMCwwICsxLDkgQEAKKyMgTWVkaWEgdGVhbQorbGFqb3NAZ29vZ2xlLmNvbQorcGF3aW5AZ29vZ2xlLmNvbQordGFrbGVlQGdvb2dsZS5jb20KK3dvbnNpa0Bnb29nbGUuY29tCisKKyMgVlRTIHRlYW0KK3lpbUBnb29nbGUuY29tCit6aHVveWFvQGdvb2dsZS5jb20KZGlmZiAtLWdpdCBhL21lZGlhL2J1ZmZlcnBvb2wvMS4wL3Z0cy9hbGxvY2F0b3IuY3BwIGIvbWVkaWEvYnVmZmVycG9vbC8xLjAvdnRzL2FsbG9jYXRvci5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODQzZjdlYQotLS0gL2Rldi9udWxsCisrKyBiL21lZGlhL2J1ZmZlcnBvb2wvMS4wL3Z0cy9hbGxvY2F0b3IuY3BwCkBAIC0wLDAgKzEsMjA5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE4IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KKworI2luY2x1ZGUgPGN1dGlscy9hc2htZW0uaD4KKyNpbmNsdWRlIDxzeXMvbW1hbi5oPgorI2luY2x1ZGUgImFsbG9jYXRvci5oIgorCit1bmlvbiBQYXJhbXMgeworICBzdHJ1Y3QgeworICAgIHVpbnQzMl90IGNhcGFjaXR5OworICB9IGRhdGE7CisgIHVpbnQ4X3QgYXJyYXlbMF07CisgIFBhcmFtcygpIDogZGF0YXswfSB7fQorICBQYXJhbXModWludDMyX3Qgc2l6ZSkKKyAgICAgIDogZGF0YXtzaXplfSB7fQorfTsKKworCituYW1lc3BhY2UgeworCitzdHJ1Y3QgSGFuZGxlQXNobWVtIDogcHVibGljIG5hdGl2ZV9oYW5kbGVfdCB7CisgIEhhbmRsZUFzaG1lbShpbnQgYXNobWVtRmQsIHNpemVfdCBzaXplKQorICAgIDogbmF0aXZlX2hhbmRsZV90KGNIZWFkZXIpLAorICAgIG1GZHN7IGFzaG1lbUZkIH0sCisgICAgbUludHN7IGludCAoc2l6ZSAmIDB4RkZGRkZGRkYpLCBpbnQoKHVpbnQ2NF90KHNpemUpID4+IDMyKSAmIDB4RkZGRkZGRkYpLCBrTWFnaWMgfSB7fQorCisgIGludCBhc2htZW1GZCgpIGNvbnN0IHsgcmV0dXJuIG1GZHMubUFzaG1lbTsgfQorICBzaXplX3Qgc2l6ZSgpIGNvbnN0IHsKKyAgICByZXR1cm4gc2l6ZV90KHVuc2lnbmVkKG1JbnRzLm1TaXplTG8pKQorICAgICAgICB8IHNpemVfdCh1aW50NjRfdCh1bnNpZ25lZChtSW50cy5tU2l6ZUhpKSkgPDwgMzIpOworICB9CisKKyAgc3RhdGljIGJvb2wgaXNWYWxpZChjb25zdCBuYXRpdmVfaGFuZGxlX3QgKiBjb25zdCBvKTsKKworcHJvdGVjdGVkOgorICBzdHJ1Y3QgeworICAgIGludCBtQXNobWVtOworICB9IG1GZHM7CisgIHN0cnVjdCB7CisgICAgaW50IG1TaXplTG87CisgICAgaW50IG1TaXplSGk7CisgICAgaW50IG1NYWdpYzsKKyAgfSBtSW50czsKKworcHJpdmF0ZToKKyAgZW51bSB7CisgICAga01hZ2ljID0gJ2FobVx4MDAnLAorICAgIG51bUZkcyA9IHNpemVvZihtRmRzKSAvIHNpemVvZihpbnQpLAorICAgIG51bUludHMgPSBzaXplb2YobUludHMpIC8gc2l6ZW9mKGludCksCisgICAgdmVyc2lvbiA9IHNpemVvZihuYXRpdmVfaGFuZGxlX3QpCisgIH07CisgIGNvbnN0IHN0YXRpYyBuYXRpdmVfaGFuZGxlX3QgY0hlYWRlcjsKK307CisKK2NvbnN0IG5hdGl2ZV9oYW5kbGVfdCBIYW5kbGVBc2htZW06OmNIZWFkZXIgPSB7CisgIEhhbmRsZUFzaG1lbTo6dmVyc2lvbiwKKyAgSGFuZGxlQXNobWVtOjpudW1GZHMsCisgIEhhbmRsZUFzaG1lbTo6bnVtSW50cywKKyAge30KK307CisKK2Jvb2wgSGFuZGxlQXNobWVtOjppc1ZhbGlkKGNvbnN0IG5hdGl2ZV9oYW5kbGVfdCAqIGNvbnN0IG8pIHsKKyAgaWYgKCFvIHx8IG1lbWNtcChvLCAmY0hlYWRlciwgc2l6ZW9mKGNIZWFkZXIpKSkgeworICAgIHJldHVybiBmYWxzZTsKKyAgfQorICBjb25zdCBIYW5kbGVBc2htZW0gKm90aGVyID0gc3RhdGljX2Nhc3Q8Y29uc3QgSGFuZGxlQXNobWVtKj4obyk7CisgIHJldHVybiBvdGhlci0+bUludHMubU1hZ2ljID09IGtNYWdpYzsKK30KKworY2xhc3MgQWxsb2NhdGlvbkFzaG1lbSB7Citwcml2YXRlOgorICBBbGxvY2F0aW9uQXNobWVtKGludCBhc2htZW1GZCwgc2l6ZV90IGNhcGFjaXR5LCBib29sIHJlcykKKyAgICA6IG1IYW5kbGUoYXNobWVtRmQsIGNhcGFjaXR5KSwKKyAgICAgIG1Jbml0KHJlcykge30KKworcHVibGljOgorICBzdGF0aWMgQWxsb2NhdGlvbkFzaG1lbSAqQWxsb2Moc2l6ZV90IHNpemUpIHsKKyAgICBjb25zdGV4cHIgc3RhdGljIGNvbnN0IGNoYXIgKmtBbGxvY2F0aW9uVGFnID0gImJ1ZmZlcnBvb2xfdGVzdCI7CisgICAgaW50IGFzaG1lbUZkID0gYXNobWVtX2NyZWF0ZV9yZWdpb24oa0FsbG9jYXRpb25UYWcsIHNpemUpOworICAgIHJldHVybiBuZXcgQWxsb2NhdGlvbkFzaG1lbShhc2htZW1GZCwgc2l6ZSwgYXNobWVtRmQgPj0gMCk7CisgIH0KKworICB+QWxsb2NhdGlvbkFzaG1lbSgpIHsKKyAgICBpZiAobUluaXQpIHsKKyAgICAgIG5hdGl2ZV9oYW5kbGVfY2xvc2UoJm1IYW5kbGUpOworICAgIH0KKyAgfQorCisgIGNvbnN0IEhhbmRsZUFzaG1lbSAqaGFuZGxlKCkgeworICAgIHJldHVybiAmbUhhbmRsZTsKKyAgfQorCitwcml2YXRlOgorICBIYW5kbGVBc2htZW0gbUhhbmRsZTsKKyAgYm9vbCBtSW5pdDsKKyAgLy8gVE9ETzogbWFwcGluZyBhbmQgbWFwIGZkCit9OworCitzdHJ1Y3QgQWxsb2NhdGlvbkR0b3IgeworICBBbGxvY2F0aW9uRHRvcihjb25zdCBzdGQ6OnNoYXJlZF9wdHI8QWxsb2NhdGlvbkFzaG1lbT4gJmFsbG9jKQorICAgICAgOiBtQWxsb2MoYWxsb2MpIHt9CisKKyAgdm9pZCBvcGVyYXRvcigpKEJ1ZmZlclBvb2xBbGxvY2F0aW9uICpwb29sQWxsb2MpIHsgZGVsZXRlIHBvb2xBbGxvYzsgfQorCisgIGNvbnN0IHN0ZDo6c2hhcmVkX3B0cjxBbGxvY2F0aW9uQXNobWVtPiBtQWxsb2M7Cit9OworCit9CisKKworUmVzdWx0U3RhdHVzIFRlc3RCdWZmZXJQb29sQWxsb2NhdG9yOjphbGxvY2F0ZSgKKyAgICBjb25zdCBzdGQ6OnZlY3Rvcjx1aW50OF90PiAmcGFyYW1zLAorICAgIHN0ZDo6c2hhcmVkX3B0cjxCdWZmZXJQb29sQWxsb2NhdGlvbj4gKmFsbG9jLAorICAgIHNpemVfdCAqYWxsb2NTaXplKSB7CisgIFBhcmFtcyBhc2htZW1QYXJhbXM7CisgIG1lbWNweSgmYXNobWVtUGFyYW1zLCBwYXJhbXMuZGF0YSgpLCBzdGQ6Om1pbihzaXplb2YoUGFyYW1zKSwgcGFyYW1zLnNpemUoKSkpOworCisgIHN0ZDo6c2hhcmVkX3B0cjxBbGxvY2F0aW9uQXNobWVtPiBhc2htZW1BbGxvYyA9CisgICAgICBzdGQ6OnNoYXJlZF9wdHI8QWxsb2NhdGlvbkFzaG1lbT4oCisgICAgICAgICAgQWxsb2NhdGlvbkFzaG1lbTo6QWxsb2MoYXNobWVtUGFyYW1zLmRhdGEuY2FwYWNpdHkpKTsKKyAgaWYgKGFzaG1lbUFsbG9jKSB7CisgICAgQnVmZmVyUG9vbEFsbG9jYXRpb24gKnB0ciA9IG5ldyBCdWZmZXJQb29sQWxsb2NhdGlvbihhc2htZW1BbGxvYy0+aGFuZGxlKCkpOworICAgIGlmIChwdHIpIHsKKyAgICAgICphbGxvYyA9IHN0ZDo6c2hhcmVkX3B0cjxCdWZmZXJQb29sQWxsb2NhdGlvbj4ocHRyLCBBbGxvY2F0aW9uRHRvcihhc2htZW1BbGxvYykpOworICAgICAgaWYgKCphbGxvYykgeworICAgICAgICAgICphbGxvY1NpemUgPSBhc2htZW1QYXJhbXMuZGF0YS5jYXBhY2l0eTsKKyAgICAgICAgICByZXR1cm4gUmVzdWx0U3RhdHVzOjpPSzsKKyAgICAgIH0KKyAgICAgIGRlbGV0ZSBwdHI7CisgICAgICByZXR1cm4gUmVzdWx0U3RhdHVzOjpOT19NRU1PUlk7CisgICAgfQorICB9CisgIHJldHVybiBSZXN1bHRTdGF0dXM6OkNSSVRJQ0FMX0VSUk9SOworfQorCitib29sIFRlc3RCdWZmZXJQb29sQWxsb2NhdG9yOjpjb21wYXRpYmxlKGNvbnN0IHN0ZDo6dmVjdG9yPHVpbnQ4X3Q+ICZuZXdQYXJhbXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RkOjp2ZWN0b3I8dWludDhfdD4gJm9sZFBhcmFtcykgeworICBzaXplX3QgbmV3U2l6ZSA9IG5ld1BhcmFtcy5zaXplKCk7CisgIHNpemVfdCBvbGRTaXplID0gb2xkUGFyYW1zLnNpemUoKTsKKyAgaWYgKG5ld1NpemUgPT0gb2xkU2l6ZSkgeworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbmV3U2l6ZTsgKytpKSB7CisgICAgICBpZiAobmV3UGFyYW1zW2ldICE9IG9sZFBhcmFtc1tpXSkgeworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICB9CisgICAgfQorICAgIHJldHVybiB0cnVlOworICB9CisgIHJldHVybiBmYWxzZTsKK30KKworYm9vbCBUZXN0QnVmZmVyUG9vbEFsbG9jYXRvcjo6RmlsbChjb25zdCBuYXRpdmVfaGFuZGxlX3QgKmhhbmRsZSwgY29uc3QgdW5zaWduZWQgY2hhciB2YWwpIHsKKyAgaWYgKCFIYW5kbGVBc2htZW06OmlzVmFsaWQoaGFuZGxlKSkgeworICAgIHJldHVybiBmYWxzZTsKKyAgfQorICBjb25zdCBIYW5kbGVBc2htZW0gKm8gPSBzdGF0aWNfY2FzdDxjb25zdCBIYW5kbGVBc2htZW0qPihoYW5kbGUpOworICB1bnNpZ25lZCBjaGFyICpwdHIgPSAodW5zaWduZWQgY2hhciAqKW1tYXAoCisgICAgICBOVUxMLCBvLT5zaXplKCksIFBST1RfUkVBRHxQUk9UX1dSSVRFLCBNQVBfU0hBUkVELCBvLT5hc2htZW1GZCgpLCAwKTsKKworICBpZiAocHRyICE9IE1BUF9GQUlMRUQpIHsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG8tPnNpemUoKTsgKytpKSB7CisgICAgICBwdHJbaV0gPSB2YWw7CisgICAgfQorICAgIG11bm1hcChwdHIsIG8tPnNpemUoKSk7CisgICAgcmV0dXJuIHRydWU7CisgIH0KKyAgcmV0dXJuIGZhbHNlOworfQorCitib29sIFRlc3RCdWZmZXJQb29sQWxsb2NhdG9yOjpWZXJpZnkoY29uc3QgbmF0aXZlX2hhbmRsZV90ICpoYW5kbGUsIGNvbnN0IHVuc2lnbmVkIGNoYXIgdmFsKSB7CisgIGlmICghSGFuZGxlQXNobWVtOjppc1ZhbGlkKGhhbmRsZSkpIHsKKyAgICByZXR1cm4gZmFsc2U7CisgIH0KKyAgY29uc3QgSGFuZGxlQXNobWVtICpvID0gc3RhdGljX2Nhc3Q8Y29uc3QgSGFuZGxlQXNobWVtKj4oaGFuZGxlKTsKKyAgdW5zaWduZWQgY2hhciAqcHRyID0gKHVuc2lnbmVkIGNoYXIgKiltbWFwKAorICAgICAgTlVMTCwgby0+c2l6ZSgpLCBQUk9UX1JFQUQsIE1BUF9TSEFSRUQsIG8tPmFzaG1lbUZkKCksIDApOworCisgIGlmIChwdHIgIT0gTUFQX0ZBSUxFRCkgeworICAgIGJvb2wgcmVzID0gdHJ1ZTsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG8tPnNpemUoKTsgKytpKSB7CisgICAgICBpZiAocHRyW2ldICE9IHZhbCkgeworICAgICAgICByZXMgPSBmYWxzZTsKKyAgICAgICAgYnJlYWs7CisgICAgICB9CisgICAgfQorICAgIG11bm1hcChwdHIsIG8tPnNpemUoKSk7CisgICAgcmV0dXJuIHJlczsKKyAgfQorICByZXR1cm4gZmFsc2U7Cit9CisKK3ZvaWQgZ2V0VGVzdEFsbG9jYXRvclBhcmFtcyhzdGQ6OnZlY3Rvcjx1aW50OF90PiAqcGFyYW1zKSB7CisgIGNvbnN0ZXhwciBzdGF0aWMgaW50IGtBbGxvY2F0aW9uU2l6ZSA9IDEwMjQgKiAxMDsKKyAgUGFyYW1zIGFzaG1lbVBhcmFtcyhrQWxsb2NhdGlvblNpemUpOworCisgIHBhcmFtcy0+YXNzaWduKGFzaG1lbVBhcmFtcy5hcnJheSwgYXNobWVtUGFyYW1zLmFycmF5ICsgc2l6ZW9mKGFzaG1lbVBhcmFtcykpOworfQpkaWZmIC0tZ2l0IGEvbWVkaWEvYnVmZmVycG9vbC8xLjAvdnRzL2FsbG9jYXRvci5oIGIvbWVkaWEvYnVmZmVycG9vbC8xLjAvdnRzL2FsbG9jYXRvci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg4NmU1ZjIKLS0tIC9kZXYvbnVsbAorKysgYi9tZWRpYS9idWZmZXJwb29sLzEuMC92dHMvYWxsb2NhdG9yLmgKQEAgLTAsMCArMSw1MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxOCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCisKKyNpZm5kZWYgVk5ES19ISURMX0JVRkZFUlBPT0xfVjFfMF9BTExPQ0FUT1JfSAorI2RlZmluZSBWTkRLX0hJRExfQlVGRkVSUE9PTF9WMV8wX0FMTE9DQVRPUl9ICisKKyNpbmNsdWRlIDxidWZmZXJwb29sL0J1ZmZlclBvb2xUeXBlcy5oPgorCit1c2luZyBhbmRyb2lkOjpoYXJkd2FyZTo6bWVkaWE6OmJ1ZmZlcnBvb2w6OlYxXzA6OlJlc3VsdFN0YXR1czsKK3VzaW5nIGFuZHJvaWQ6OmhhcmR3YXJlOjptZWRpYTo6YnVmZmVycG9vbDo6VjFfMDo6aW1wbGVtZW50YXRpb246OgorICAgIEJ1ZmZlclBvb2xBbGxvY2F0aW9uOwordXNpbmcgYW5kcm9pZDo6aGFyZHdhcmU6Om1lZGlhOjpidWZmZXJwb29sOjpWMV8wOjppbXBsZW1lbnRhdGlvbjo6CisgICAgQnVmZmVyUG9vbEFsbG9jYXRvcjsKKworLy8gYnVmZmVyIGFsbG9jYXRvciBmb3IgdGhlIHRlc3RzCitjbGFzcyBUZXN0QnVmZmVyUG9vbEFsbG9jYXRvciA6IHB1YmxpYyBCdWZmZXJQb29sQWxsb2NhdG9yIHsKKyBwdWJsaWM6CisgIFRlc3RCdWZmZXJQb29sQWxsb2NhdG9yKCkge30KKworICB+VGVzdEJ1ZmZlclBvb2xBbGxvY2F0b3IoKSBvdmVycmlkZSB7fQorCisgIFJlc3VsdFN0YXR1cyBhbGxvY2F0ZShjb25zdCBzdGQ6OnZlY3Rvcjx1aW50OF90PiAmcGFyYW1zLAorICAgICAgICAgICAgICAgICAgICAgICAgc3RkOjpzaGFyZWRfcHRyPEJ1ZmZlclBvb2xBbGxvY2F0aW9uPiAqYWxsb2MsCisgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgKmFsbG9jU2l6ZSkgb3ZlcnJpZGU7CisKKyAgYm9vbCBjb21wYXRpYmxlKGNvbnN0IHN0ZDo6dmVjdG9yPHVpbnQ4X3Q+ICZuZXdQYXJhbXMsCisgICAgICAgICAgICAgICAgICBjb25zdCBzdGQ6OnZlY3Rvcjx1aW50OF90PiAmb2xkUGFyYW1zKSBvdmVycmlkZTsKKworICBzdGF0aWMgYm9vbCBGaWxsKGNvbnN0IG5hdGl2ZV9oYW5kbGVfdCAqaGFuZGxlLCBjb25zdCB1bnNpZ25lZCBjaGFyIHZhbCk7CisKKyAgc3RhdGljIGJvb2wgVmVyaWZ5KGNvbnN0IG5hdGl2ZV9oYW5kbGVfdCAqaGFuZGxlLCBjb25zdCB1bnNpZ25lZCBjaGFyIHZhbCk7CisKK307CisKKy8vIHJldHJpZXZlIGJ1ZmZlciBhbGxvY2F0b3IgcGFyYW10ZXJzCit2b2lkIGdldFRlc3RBbGxvY2F0b3JQYXJhbXMoc3RkOjp2ZWN0b3I8dWludDhfdD4gKnBhcmFtcyk7CisKKyNlbmRpZiAgLy8gVk5ES19ISURMX0JVRkZFUlBPT0xfVjFfMF9BTExPQ0FUT1JfSApkaWZmIC0tZ2l0IGEvbWVkaWEvYnVmZmVycG9vbC8xLjAvdnRzL211bHRpLmNwcCBiL21lZGlhL2J1ZmZlcnBvb2wvMS4wL3Z0cy9tdWx0aS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTc5NjgxOQotLS0gL2Rldi9udWxsCisrKyBiL21lZGlhL2J1ZmZlcnBvb2wvMS4wL3Z0cy9tdWx0aS5jcHAKQEAgLTAsMCArMSwyMjMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTggVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworCisjZGVmaW5lIExPR19UQUcgImJ1ZmZmZXJwb29sX3VuaXRfdGVzdCIKKworI2luY2x1ZGUgPGd0ZXN0L2d0ZXN0Lmg+CisKKyNpbmNsdWRlIDxhbmRyb2lkLWJhc2UvbG9nZ2luZy5oPgorI2luY2x1ZGUgPGJpbmRlci9Qcm9jZXNzU3RhdGUuaD4KKyNpbmNsdWRlIDxidWZmZXJwb29sL0NsaWVudE1hbmFnZXIuaD4KKyNpbmNsdWRlIDxoaWRsL0hpZGxTdXBwb3J0Lmg+CisjaW5jbHVkZSA8aGlkbC9IaWRsVHJhbnNwb3J0U3VwcG9ydC5oPgorI2luY2x1ZGUgPGhpZGwvTGVnYWN5U3VwcG9ydC5oPgorI2luY2x1ZGUgPGhpZGwvU3RhdHVzLmg+CisjaW5jbHVkZSA8c2lnbmFsLmg+CisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisjaW5jbHVkZSA8c3lzL3dhaXQuaD4KKyNpbmNsdWRlIDx1bmlzdGQuaD4KKyNpbmNsdWRlIDxpb3N0cmVhbT4KKyNpbmNsdWRlIDxtZW1vcnk+CisjaW5jbHVkZSA8dmVjdG9yPgorI2luY2x1ZGUgImFsbG9jYXRvci5oIgorCit1c2luZyBhbmRyb2lkOjpoYXJkd2FyZTo6Y29uZmlndXJlUnBjVGhyZWFkcG9vbDsKK3VzaW5nIGFuZHJvaWQ6OmhhcmR3YXJlOjpoaWRsX2hhbmRsZTsKK3VzaW5nIGFuZHJvaWQ6OmhhcmR3YXJlOjptZWRpYTo6YnVmZmVycG9vbDo6VjFfMDo6SUNsaWVudE1hbmFnZXI7Cit1c2luZyBhbmRyb2lkOjpoYXJkd2FyZTo6bWVkaWE6OmJ1ZmZlcnBvb2w6OlYxXzA6OlJlc3VsdFN0YXR1czsKK3VzaW5nIGFuZHJvaWQ6OmhhcmR3YXJlOjptZWRpYTo6YnVmZmVycG9vbDo6VjFfMDo6aW1wbGVtZW50YXRpb246OkJ1ZmZlcklkOwordXNpbmcgYW5kcm9pZDo6aGFyZHdhcmU6Om1lZGlhOjpidWZmZXJwb29sOjpWMV8wOjppbXBsZW1lbnRhdGlvbjo6Q2xpZW50TWFuYWdlcjsKK3VzaW5nIGFuZHJvaWQ6OmhhcmR3YXJlOjptZWRpYTo6YnVmZmVycG9vbDo6VjFfMDo6aW1wbGVtZW50YXRpb246OkNvbm5lY3Rpb25JZDsKK3VzaW5nIGFuZHJvaWQ6OmhhcmR3YXJlOjptZWRpYTo6YnVmZmVycG9vbDo6VjFfMDo6aW1wbGVtZW50YXRpb246OlRyYW5zYWN0aW9uSWQ7Cit1c2luZyBhbmRyb2lkOjpoYXJkd2FyZTo6bWVkaWE6OmJ1ZmZlcnBvb2w6OkJ1ZmZlclBvb2xEYXRhOworCituYW1lc3BhY2UgeworCisvLyBjb21tdW5pY2F0aW9uIG1lc3NhZ2UgdHlwZXMgYmV0d2VlbiBwcm9jZXNzZXMuCitlbnVtIFBpcGVDb21tYW5kIDogaW50MzJfdCB7CisgICAgSU5JVF9PSyA9IDAsCisgICAgSU5JVF9FUlJPUiwKKyAgICBTRU5ELAorICAgIFJFQ0VJVkVfT0ssCisgICAgUkVDRUlWRV9FUlJPUiwKK307CisKKy8vIGNvbW11bmljYXRpb24gbWVzc2FnZSBiZXR3ZWVuIHByb2Nlc3Nlcy4KK3VuaW9uIFBpcGVNZXNzYWdlIHsKKyAgICBzdHJ1Y3QgIHsKKyAgICAgICAgaW50MzJfdCBjb21tYW5kOworICAgICAgICBCdWZmZXJJZCBidWZmZXJJZDsKKyAgICAgICAgQ29ubmVjdGlvbklkIGNvbm5lY3Rpb25JZDsKKyAgICAgICAgVHJhbnNhY3Rpb25JZCB0cmFuc2FjdGlvbklkOworICAgICAgICBpbnQ2NF90ICB0aW1lc3RhbXBVczsKKyAgICB9IGRhdGE7CisgICAgY2hhciBhcnJheVswXTsKK307CisKKy8vIG1lZGlhLmJ1ZmZlcnBvb2wgdGVzdCBzZXR1cAorY2xhc3MgQnVmZmVycG9vbE11bHRpVGVzdCA6IHB1YmxpYyA6OnRlc3Rpbmc6OlRlc3QgeworIHB1YmxpYzoKKyAgdmlydHVhbCB2b2lkIFNldFVwKCkgb3ZlcnJpZGUgeworICAgIFJlc3VsdFN0YXR1cyBzdGF0dXM7CisgICAgbVJlY2VpdmVyUGlkID0gLTE7CisgICAgbUNvbm5lY3Rpb25WYWxpZCA9IGZhbHNlOworCisgICAgQVNTRVJUX1RSVUUocGlwZShtQ29tbWFuZFBpcGVGZHMpID09IDApOworICAgIEFTU0VSVF9UUlVFKHBpcGUobVJlc3VsdFBpcGVGZHMpID09IDApOworCisgICAgbVJlY2VpdmVyUGlkID0gZm9yaygpOworICAgIEFTU0VSVF9UUlVFKG1SZWNlaXZlclBpZCA+PSAwKTsKKworICAgIGlmIChtUmVjZWl2ZXJQaWQgPT0gMCkgeworICAgICAgZG9SZWNlaXZlcigpOworICAgICAgLy8gSW4gb3JkZXIgdG8gaWdub3JlIGd0ZXN0IGJlaGF2aW91ciwgd2FpdCBmb3IgYmVpbmcga2lsbGVkIGZyb20KKyAgICAgIC8vIHRlYXJEb3duCisgICAgICBwYXVzZSgpOworICAgIH0KKworICAgIG1NYW5hZ2VyID0gQ2xpZW50TWFuYWdlcjo6Z2V0SW5zdGFuY2UoKTsKKyAgICBBU1NFUlRfTkUobU1hbmFnZXIsIG51bGxwdHIpOworCisgICAgbUFsbG9jYXRvciA9IHN0ZDo6bWFrZV9zaGFyZWQ8VGVzdEJ1ZmZlclBvb2xBbGxvY2F0b3I+KCk7CisgICAgQVNTRVJUX1RSVUUoKGJvb2wpbUFsbG9jYXRvcik7CisKKyAgICBzdGF0dXMgPSBtTWFuYWdlci0+Y3JlYXRlKG1BbGxvY2F0b3IsICZtQ29ubmVjdGlvbklkKTsKKyAgICBBU1NFUlRfVFJVRShzdGF0dXMgPT0gUmVzdWx0U3RhdHVzOjpPSyk7CisgICAgbUNvbm5lY3Rpb25WYWxpZCA9IHRydWU7CisgIH0KKworICB2aXJ0dWFsIHZvaWQgVGVhckRvd24oKSBvdmVycmlkZSB7CisgICAgaWYgKG1SZWNlaXZlclBpZCA+IDApIHsKKyAgICAgIGtpbGwobVJlY2VpdmVyUGlkLCBTSUdLSUxMKTsKKyAgICAgIGludCB3c3RhdHVzOworICAgICAgd2FpdCgmd3N0YXR1cyk7CisgICAgfQorCisgICAgaWYgKG1Db25uZWN0aW9uVmFsaWQpIHsKKyAgICAgIG1NYW5hZ2VyLT5jbG9zZShtQ29ubmVjdGlvbklkKTsKKyAgICB9CisgIH0KKworIHByb3RlY3RlZDoKKyAgc3RhdGljIHZvaWQgZGVzY3JpcHRpb24oY29uc3Qgc3RkOjpzdHJpbmcmIGRlc2NyaXB0aW9uKSB7CisgICAgUmVjb3JkUHJvcGVydHkoImRlc2NyaXB0aW9uIiwgZGVzY3JpcHRpb24pOworICB9CisKKyAgYW5kcm9pZDo6c3A8Q2xpZW50TWFuYWdlcj4gbU1hbmFnZXI7CisgIHN0ZDo6c2hhcmVkX3B0cjxCdWZmZXJQb29sQWxsb2NhdG9yPiBtQWxsb2NhdG9yOworICBib29sIG1Db25uZWN0aW9uVmFsaWQ7CisgIENvbm5lY3Rpb25JZCBtQ29ubmVjdGlvbklkOworICBwaWRfdCBtUmVjZWl2ZXJQaWQ7CisgIGludCBtQ29tbWFuZFBpcGVGZHNbMl07CisgIGludCBtUmVzdWx0UGlwZUZkc1syXTsKKworICBib29sIHNlbmRNZXNzYWdlKGludCAqcGlwZXMsIGNvbnN0IFBpcGVNZXNzYWdlICZtZXNzYWdlKSB7CisgICAgaW50IHJldCA9IHdyaXRlKHBpcGVzWzFdLCBtZXNzYWdlLmFycmF5LCBzaXplb2YoUGlwZU1lc3NhZ2UpKTsKKyAgICByZXR1cm4gcmV0ID09IHNpemVvZihQaXBlTWVzc2FnZSk7CisgIH0KKworICBib29sIHJlY2VpdmVNZXNzYWdlKGludCAqcGlwZXMsIFBpcGVNZXNzYWdlICptZXNzYWdlKSB7CisgICAgaW50IHJldCA9IHJlYWQocGlwZXNbMF0sIG1lc3NhZ2UtPmFycmF5LCBzaXplb2YoUGlwZU1lc3NhZ2UpKTsKKyAgICByZXR1cm4gcmV0ID09IHNpemVvZihQaXBlTWVzc2FnZSk7CisgIH0KKworICB2b2lkIGRvUmVjZWl2ZXIoKSB7CisgICAgY29uZmlndXJlUnBjVGhyZWFkcG9vbCgxLCBmYWxzZSk7CisgICAgUGlwZU1lc3NhZ2UgbWVzc2FnZTsKKyAgICBtTWFuYWdlciA9IENsaWVudE1hbmFnZXI6OmdldEluc3RhbmNlKCk7CisgICAgaWYgKCFtTWFuYWdlcikgeworICAgICAgbWVzc2FnZS5kYXRhLmNvbW1hbmQgPSBQaXBlQ29tbWFuZDo6SU5JVF9FUlJPUjsKKyAgICAgIHNlbmRNZXNzYWdlKG1SZXN1bHRQaXBlRmRzLCBtZXNzYWdlKTsKKyAgICAgIHJldHVybjsKKyAgICB9CisgICAgYW5kcm9pZDo6c3RhdHVzX3Qgc3RhdHVzID0gbU1hbmFnZXItPnJlZ2lzdGVyQXNTZXJ2aWNlKCk7CisgICAgaWYgKHN0YXR1cyAhPSBhbmRyb2lkOjpPSykgeworICAgICAgbWVzc2FnZS5kYXRhLmNvbW1hbmQgPSBQaXBlQ29tbWFuZDo6SU5JVF9FUlJPUjsKKyAgICAgIHNlbmRNZXNzYWdlKG1SZXN1bHRQaXBlRmRzLCBtZXNzYWdlKTsKKyAgICAgIHJldHVybjsKKyAgICB9CisgICAgbWVzc2FnZS5kYXRhLmNvbW1hbmQgPSBQaXBlQ29tbWFuZDo6SU5JVF9PSzsKKyAgICBzZW5kTWVzc2FnZShtUmVzdWx0UGlwZUZkcywgbWVzc2FnZSk7CisKKyAgICByZWNlaXZlTWVzc2FnZShtQ29tbWFuZFBpcGVGZHMsICZtZXNzYWdlKTsKKyAgICB7CisgICAgICBuYXRpdmVfaGFuZGxlX3QgKnJoYW5kbGUgPSBudWxscHRyOworICAgICAgc3RkOjpzaGFyZWRfcHRyPEJ1ZmZlclBvb2xEYXRhPiByYnVmZmVyOworICAgICAgUmVzdWx0U3RhdHVzIHN0YXR1cyA9IG1NYW5hZ2VyLT5yZWNlaXZlKAorICAgICAgICAgIG1lc3NhZ2UuZGF0YS5jb25uZWN0aW9uSWQsIG1lc3NhZ2UuZGF0YS50cmFuc2FjdGlvbklkLAorICAgICAgICAgIG1lc3NhZ2UuZGF0YS5idWZmZXJJZCwgbWVzc2FnZS5kYXRhLnRpbWVzdGFtcFVzLCAmcmhhbmRsZSwgJnJidWZmZXIpOworICAgICAgbU1hbmFnZXItPmNsb3NlKG1lc3NhZ2UuZGF0YS5jb25uZWN0aW9uSWQpOworICAgICAgaWYgKHN0YXR1cyAhPSBSZXN1bHRTdGF0dXM6Ok9LKSB7CisgICAgICAgIGlmICghVGVzdEJ1ZmZlclBvb2xBbGxvY2F0b3I6OlZlcmlmeShyaGFuZGxlLCAweDc3KSkgeworICAgICAgICAgIG1lc3NhZ2UuZGF0YS5jb21tYW5kID0gUGlwZUNvbW1hbmQ6OlJFQ0VJVkVfRVJST1I7CisgICAgICAgICAgc2VuZE1lc3NhZ2UobVJlc3VsdFBpcGVGZHMsIG1lc3NhZ2UpOworICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgfQorICAgIH0KKyAgICBtZXNzYWdlLmRhdGEuY29tbWFuZCA9IFBpcGVDb21tYW5kOjpSRUNFSVZFX09LOworICAgIHNlbmRNZXNzYWdlKG1SZXN1bHRQaXBlRmRzLCBtZXNzYWdlKTsKKyAgfQorfTsKKworLy8gQnVmZmVyIHRyYW5zZmVyIHRlc3QgYmV0d2VlbiBwcm9jZXNzZXMuCitURVNUX0YoQnVmZmVycG9vbE11bHRpVGVzdCwgVHJhbnNmZXJCdWZmZXIpIHsKKyAgUmVzdWx0U3RhdHVzIHN0YXR1czsKKyAgUGlwZU1lc3NhZ2UgbWVzc2FnZTsKKworICBBU1NFUlRfVFJVRShyZWNlaXZlTWVzc2FnZShtUmVzdWx0UGlwZUZkcywgJm1lc3NhZ2UpKTsKKworICBhbmRyb2lkOjpzcDxJQ2xpZW50TWFuYWdlcj4gcmVjZWl2ZXIgPSBJQ2xpZW50TWFuYWdlcjo6Z2V0U2VydmljZSgpOworICBDb25uZWN0aW9uSWQgcmVjZWl2ZXJJZDsKKyAgQVNTRVJUX1RSVUUoKGJvb2wpcmVjZWl2ZXIpOworCisgIHN0YXR1cyA9IG1NYW5hZ2VyLT5yZWdpc3RlclNlbmRlcihyZWNlaXZlciwgbUNvbm5lY3Rpb25JZCwgJnJlY2VpdmVySWQpOworICBBU1NFUlRfVFJVRShzdGF0dXMgPT0gUmVzdWx0U3RhdHVzOjpPSyk7CisgIHsKKyAgICBuYXRpdmVfaGFuZGxlX3QgKnNoYW5kbGUgPSBudWxscHRyOworICAgIHN0ZDo6c2hhcmVkX3B0cjxCdWZmZXJQb29sRGF0YT4gc2J1ZmZlcjsKKyAgICBUcmFuc2FjdGlvbklkIHRyYW5zYWN0aW9uSWQ7CisgICAgaW50NjRfdCBwb3N0VXM7CisgICAgc3RkOjp2ZWN0b3I8dWludDhfdD4gdmVjUGFyYW1zOworCisgICAgZ2V0VGVzdEFsbG9jYXRvclBhcmFtcygmdmVjUGFyYW1zKTsKKyAgICBzdGF0dXMgPSBtTWFuYWdlci0+YWxsb2NhdGUobUNvbm5lY3Rpb25JZCwgdmVjUGFyYW1zLCAmc2hhbmRsZSwgJnNidWZmZXIpOworICAgIEFTU0VSVF9UUlVFKHN0YXR1cyA9PSBSZXN1bHRTdGF0dXM6Ok9LKTsKKworICAgIEFTU0VSVF9UUlVFKFRlc3RCdWZmZXJQb29sQWxsb2NhdG9yOjpGaWxsKHNoYW5kbGUsIDB4NzcpKTsKKworICAgIHN0YXR1cyA9IG1NYW5hZ2VyLT5wb3N0U2VuZChyZWNlaXZlcklkLCBzYnVmZmVyLCAmdHJhbnNhY3Rpb25JZCwgJnBvc3RVcyk7CisgICAgQVNTRVJUX1RSVUUoc3RhdHVzID09IFJlc3VsdFN0YXR1czo6T0spOworCisgICAgbWVzc2FnZS5kYXRhLmNvbW1hbmQgPSBQaXBlQ29tbWFuZDo6U0VORDsKKyAgICBtZXNzYWdlLmRhdGEuYnVmZmVySWQgPSBzYnVmZmVyLT5tSWQ7CisgICAgbWVzc2FnZS5kYXRhLmNvbm5lY3Rpb25JZCA9IHJlY2VpdmVySWQ7CisgICAgbWVzc2FnZS5kYXRhLnRyYW5zYWN0aW9uSWQgPSB0cmFuc2FjdGlvbklkOworICAgIG1lc3NhZ2UuZGF0YS50aW1lc3RhbXBVcyA9IHBvc3RVczsKKyAgICBzZW5kTWVzc2FnZShtQ29tbWFuZFBpcGVGZHMsIG1lc3NhZ2UpOworICB9CisgIEVYUEVDVF9UUlVFKHJlY2VpdmVNZXNzYWdlKG1SZXN1bHRQaXBlRmRzLCAmbWVzc2FnZSkpOworfQorCit9ICAvLyBhbm9ueW1vdXMgbmFtZXNwYWNlCisKK2ludCBtYWluKGludCBhcmdjLCBjaGFyKiogYXJndikgeworICBzZXRlbnYoIlRSRUJMRV9URVNUSU5HX09WRVJSSURFIiwgInRydWUiLCB0cnVlKTsKKyAgOjp0ZXN0aW5nOjpJbml0R29vZ2xlVGVzdCgmYXJnYywgYXJndik7CisgIGludCBzdGF0dXMgPSBSVU5fQUxMX1RFU1RTKCk7CisgIExPRyhJTkZPKSA8PCAiVGVzdCByZXN1bHQgPSAiIDw8IHN0YXR1czsKKyAgcmV0dXJuIHN0YXR1czsKK30KZGlmZiAtLWdpdCBhL21lZGlhL2J1ZmZlcnBvb2wvMS4wL3Z0cy9zaW5nbGUuY3BwIGIvbWVkaWEvYnVmZmVycG9vbC8xLjAvdnRzL3NpbmdsZS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjczZWI2MgotLS0gL2Rldi9udWxsCisrKyBiL21lZGlhL2J1ZmZlcnBvb2wvMS4wL3Z0cy9zaW5nbGUuY3BwCkBAIC0wLDAgKzEsMTY2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE4IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KKworI2RlZmluZSBMT0dfVEFHICJidWZmZmVycG9vbF91bml0X3Rlc3QiCisKKyNpbmNsdWRlIDxndGVzdC9ndGVzdC5oPgorCisjaW5jbHVkZSA8YW5kcm9pZC1iYXNlL2xvZ2dpbmcuaD4KKyNpbmNsdWRlIDxiaW5kZXIvUHJvY2Vzc1N0YXRlLmg+CisjaW5jbHVkZSA8YnVmZmVycG9vbC9DbGllbnRNYW5hZ2VyLmg+CisjaW5jbHVkZSA8aGlkbC9IaWRsU3VwcG9ydC5oPgorI2luY2x1ZGUgPGhpZGwvSGlkbFRyYW5zcG9ydFN1cHBvcnQuaD4KKyNpbmNsdWRlIDxoaWRsL0xlZ2FjeVN1cHBvcnQuaD4KKyNpbmNsdWRlIDxoaWRsL1N0YXR1cy5oPgorI2luY2x1ZGUgPHVuaXN0ZC5oPgorI2luY2x1ZGUgPGlvc3RyZWFtPgorI2luY2x1ZGUgPG1lbW9yeT4KKyNpbmNsdWRlIDx2ZWN0b3I+CisjaW5jbHVkZSAiYWxsb2NhdG9yLmgiCisKK3VzaW5nIGFuZHJvaWQ6OmhhcmR3YXJlOjpoaWRsX2hhbmRsZTsKK3VzaW5nIGFuZHJvaWQ6OmhhcmR3YXJlOjptZWRpYTo6YnVmZmVycG9vbDo6VjFfMDo6UmVzdWx0U3RhdHVzOwordXNpbmcgYW5kcm9pZDo6aGFyZHdhcmU6Om1lZGlhOjpidWZmZXJwb29sOjpWMV8wOjppbXBsZW1lbnRhdGlvbjo6QnVmZmVySWQ7Cit1c2luZyBhbmRyb2lkOjpoYXJkd2FyZTo6bWVkaWE6OmJ1ZmZlcnBvb2w6OlYxXzA6OmltcGxlbWVudGF0aW9uOjpDbGllbnRNYW5hZ2VyOwordXNpbmcgYW5kcm9pZDo6aGFyZHdhcmU6Om1lZGlhOjpidWZmZXJwb29sOjpWMV8wOjppbXBsZW1lbnRhdGlvbjo6Q29ubmVjdGlvbklkOwordXNpbmcgYW5kcm9pZDo6aGFyZHdhcmU6Om1lZGlhOjpidWZmZXJwb29sOjpWMV8wOjppbXBsZW1lbnRhdGlvbjo6VHJhbnNhY3Rpb25JZDsKK3VzaW5nIGFuZHJvaWQ6OmhhcmR3YXJlOjptZWRpYTo6YnVmZmVycG9vbDo6QnVmZmVyUG9vbERhdGE7CisKK25hbWVzcGFjZSB7CisKKy8vIE51bWJlciBvZiBpdGVyYXRpb24gZm9yIGJ1ZmZlciBhbGxvY2F0aW9uIHRlc3QuCitjb25zdGV4cHIgc3RhdGljIGludCBrTnVtQWxsb2NhdGlvblRlc3QgPSAzOworCisvLyBOdW1iZXIgb2YgaXRlcmF0aW9uIGZvciBidWZmZXIgcmVjeWNsaW5nIHRlc3QuCitjb25zdGV4cHIgc3RhdGljIGludCBrTnVtUmVjeWNsZVRlc3QgPSAzOworCisvLyBtZWRpYS5idWZmZXJwb29sIHRlc3Qgc2V0dXAKK2NsYXNzIEJ1ZmZlcnBvb2xTaW5nbGVUZXN0IDogcHVibGljIDo6dGVzdGluZzo6VGVzdCB7CisgcHVibGljOgorICB2aXJ0dWFsIHZvaWQgU2V0VXAoKSBvdmVycmlkZSB7CisgICAgUmVzdWx0U3RhdHVzIHN0YXR1czsKKyAgICBtQ29ubmVjdGlvblZhbGlkID0gZmFsc2U7CisKKyAgICBtTWFuYWdlciA9IENsaWVudE1hbmFnZXI6OmdldEluc3RhbmNlKCk7CisgICAgQVNTRVJUX05FKG1NYW5hZ2VyLCBudWxscHRyKTsKKworICAgIG1BbGxvY2F0b3IgPSBzdGQ6Om1ha2Vfc2hhcmVkPFRlc3RCdWZmZXJQb29sQWxsb2NhdG9yPigpOworICAgIEFTU0VSVF9UUlVFKChib29sKW1BbGxvY2F0b3IpOworCisgICAgc3RhdHVzID0gbU1hbmFnZXItPmNyZWF0ZShtQWxsb2NhdG9yLCAmbUNvbm5lY3Rpb25JZCk7CisgICAgQVNTRVJUX1RSVUUoc3RhdHVzID09IFJlc3VsdFN0YXR1czo6T0spOworCisgICAgbUNvbm5lY3Rpb25WYWxpZCA9IHRydWU7CisKKyAgICBzdGF0dXMgPSBtTWFuYWdlci0+cmVnaXN0ZXJTZW5kZXIobU1hbmFnZXIsIG1Db25uZWN0aW9uSWQsICZtUmVjZWl2ZXJJZCk7CisgICAgQVNTRVJUX1RSVUUoc3RhdHVzID09IFJlc3VsdFN0YXR1czo6QUxSRUFEWV9FWElTVFMgJiYKKyAgICAgICAgICAgICAgICBtUmVjZWl2ZXJJZCA9PSBtQ29ubmVjdGlvbklkKTsKKyAgfQorCisgIHZpcnR1YWwgdm9pZCBUZWFyRG93bigpIG92ZXJyaWRlIHsKKyAgICBpZiAobUNvbm5lY3Rpb25WYWxpZCkgeworICAgICAgbU1hbmFnZXItPmNsb3NlKG1Db25uZWN0aW9uSWQpOworICAgIH0KKyAgfQorCisgcHJvdGVjdGVkOgorICBzdGF0aWMgdm9pZCBkZXNjcmlwdGlvbihjb25zdCBzdGQ6OnN0cmluZyYgZGVzY3JpcHRpb24pIHsKKyAgICBSZWNvcmRQcm9wZXJ0eSgiZGVzY3JpcHRpb24iLCBkZXNjcmlwdGlvbik7CisgIH0KKworICBhbmRyb2lkOjpzcDxDbGllbnRNYW5hZ2VyPiBtTWFuYWdlcjsKKyAgc3RkOjpzaGFyZWRfcHRyPEJ1ZmZlclBvb2xBbGxvY2F0b3I+IG1BbGxvY2F0b3I7CisgIGJvb2wgbUNvbm5lY3Rpb25WYWxpZDsKKyAgQ29ubmVjdGlvbklkIG1Db25uZWN0aW9uSWQ7CisgIENvbm5lY3Rpb25JZCBtUmVjZWl2ZXJJZDsKKworfTsKKworLy8gQnVmZmVyIGFsbG9jYXRpb24gdGVzdC4KKy8vIENoZWNrIHdoZXRoZXIgZWFjaCBidWZmZXIgYWxsb2NhdGlvbiBpcyBkb25lIHN1Y2Nlc3NmdWxseSB3aXRoCisvLyB1bmlxdWUgYnVmZmVyIGlkLgorVEVTVF9GKEJ1ZmZlcnBvb2xTaW5nbGVUZXN0LCBBbGxvY2F0ZUJ1ZmZlcikgeworICBSZXN1bHRTdGF0dXMgc3RhdHVzOworICBzdGQ6OnZlY3Rvcjx1aW50OF90PiB2ZWNQYXJhbXM7CisgIGdldFRlc3RBbGxvY2F0b3JQYXJhbXMoJnZlY1BhcmFtcyk7CisKKyAgc3RkOjpzaGFyZWRfcHRyPEJ1ZmZlclBvb2xEYXRhPiBidWZmZXJba051bUFsbG9jYXRpb25UZXN0XTsKKyAgbmF0aXZlX2hhbmRsZV90ICphbGxvY0hhbmRsZSA9IG51bGxwdHI7CisgIGZvciAoaW50IGkgPSAwOyBpIDwga051bUFsbG9jYXRpb25UZXN0OyArK2kpIHsKKyAgICBzdGF0dXMgPSBtTWFuYWdlci0+YWxsb2NhdGUobUNvbm5lY3Rpb25JZCwgdmVjUGFyYW1zLCAmYWxsb2NIYW5kbGUsICZidWZmZXJbaV0pOworICAgIEFTU0VSVF9UUlVFKHN0YXR1cyA9PSBSZXN1bHRTdGF0dXM6Ok9LKTsKKyAgfQorICBmb3IgKGludCBpID0gMDsgaSA8IGtOdW1BbGxvY2F0aW9uVGVzdDsgKytpKSB7CisgICAgZm9yIChpbnQgaiA9IGkgKyAxOyBqIDwga051bUFsbG9jYXRpb25UZXN0OyArK2opIHsKKyAgICAgIEFTU0VSVF9UUlVFKGJ1ZmZlcltpXS0+bUlkICE9IGJ1ZmZlcltqXS0+bUlkKTsKKyAgICB9CisgIH0KKyAgRVhQRUNUX1RSVUUoa051bUFsbG9jYXRpb25UZXN0ID4gMSk7Cit9CisKKy8vIEJ1ZmZlciByZWN5Y2xlIHRlc3QuCisvLyBDaGVjayB3aGV0aGVyIGRlLWFsbG9jYXRlZCBidWZmZXJzIGFyZSByZWN5Y2xlZC4KK1RFU1RfRihCdWZmZXJwb29sU2luZ2xlVGVzdCwgUmVjeWNsZUJ1ZmZlcikgeworICBSZXN1bHRTdGF0dXMgc3RhdHVzOworICBzdGQ6OnZlY3Rvcjx1aW50OF90PiB2ZWNQYXJhbXM7CisgIGdldFRlc3RBbGxvY2F0b3JQYXJhbXMoJnZlY1BhcmFtcyk7CisKKyAgQnVmZmVySWQgYmlkW2tOdW1SZWN5Y2xlVGVzdF07CisgIGZvciAoaW50IGkgPSAwOyBpIDwga051bVJlY3ljbGVUZXN0OyArK2kpIHsKKyAgICBzdGQ6OnNoYXJlZF9wdHI8QnVmZmVyUG9vbERhdGE+IGJ1ZmZlcjsKKyAgICBuYXRpdmVfaGFuZGxlX3QgKmFsbG9jSGFuZGxlID0gbnVsbHB0cjsKKyAgICBzdGF0dXMgPSBtTWFuYWdlci0+YWxsb2NhdGUobUNvbm5lY3Rpb25JZCwgdmVjUGFyYW1zLCAmYWxsb2NIYW5kbGUsICZidWZmZXIpOworICAgIEFTU0VSVF9UUlVFKHN0YXR1cyA9PSBSZXN1bHRTdGF0dXM6Ok9LKTsKKyAgICBiaWRbaV0gPSBidWZmZXItPm1JZDsKKyAgfQorICBmb3IgKGludCBpID0gMTsgaSA8IGtOdW1SZWN5Y2xlVGVzdDsgKytpKSB7CisgICAgQVNTRVJUX1RSVUUoYmlkW2kgLSAxXSA9PSBiaWRbaV0pOworICB9CisgIEVYUEVDVF9UUlVFKGtOdW1SZWN5Y2xlVGVzdCA+IDEpOworfQorCisvLyBCdWZmZXIgdHJhbnNmZXIgdGVzdC4KKy8vIENoZWNrIHdoZXRoZXIgYnVmZmVyIGlzIHRyYW5zZmVycmVkIHRvIGFub3RoZXIgY2xpZW50IHN1Y2Nlc3NmdWxseS4KK1RFU1RfRihCdWZmZXJwb29sU2luZ2xlVGVzdCwgVHJhbnNmZXJCdWZmZXIpIHsKKyAgUmVzdWx0U3RhdHVzIHN0YXR1czsKKyAgc3RkOjp2ZWN0b3I8dWludDhfdD4gdmVjUGFyYW1zOworICBnZXRUZXN0QWxsb2NhdG9yUGFyYW1zKCZ2ZWNQYXJhbXMpOworICBzdGQ6OnNoYXJlZF9wdHI8QnVmZmVyUG9vbERhdGE+IHNidWZmZXIsIHJidWZmZXI7CisgIG5hdGl2ZV9oYW5kbGVfdCAqYWxsb2NIYW5kbGUgPSBudWxscHRyOworICBuYXRpdmVfaGFuZGxlX3QgKnJlY3ZIYW5kbGUgPSBudWxscHRyOworCisgIFRyYW5zYWN0aW9uSWQgdHJhbnNhY3Rpb25JZDsKKyAgaW50NjRfdCBwb3N0VXM7CisKKyAgc3RhdHVzID0gbU1hbmFnZXItPmFsbG9jYXRlKG1Db25uZWN0aW9uSWQsIHZlY1BhcmFtcywgJmFsbG9jSGFuZGxlLCAmc2J1ZmZlcik7CisgIEFTU0VSVF9UUlVFKHN0YXR1cyA9PSBSZXN1bHRTdGF0dXM6Ok9LKTsKKyAgQVNTRVJUX1RSVUUoVGVzdEJ1ZmZlclBvb2xBbGxvY2F0b3I6OkZpbGwoYWxsb2NIYW5kbGUsIDB4NzcpKTsKKyAgc3RhdHVzID0gbU1hbmFnZXItPnBvc3RTZW5kKG1SZWNlaXZlcklkLCBzYnVmZmVyLCAmdHJhbnNhY3Rpb25JZCwgJnBvc3RVcyk7CisgIEFTU0VSVF9UUlVFKHN0YXR1cyA9PSBSZXN1bHRTdGF0dXM6Ok9LKTsKKyAgc3RhdHVzID0gbU1hbmFnZXItPnJlY2VpdmUobVJlY2VpdmVySWQsIHRyYW5zYWN0aW9uSWQsIHNidWZmZXItPm1JZCwgcG9zdFVzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmcmVjdkhhbmRsZSwgJnJidWZmZXIpOworICBFWFBFQ1RfVFJVRShzdGF0dXMgPT0gUmVzdWx0U3RhdHVzOjpPSyk7CisgIEFTU0VSVF9UUlVFKFRlc3RCdWZmZXJQb29sQWxsb2NhdG9yOjpWZXJpZnkocmVjdkhhbmRsZSwgMHg3NykpOworfQorCit9ICAvLyBhbm9ueW1vdXMgbmFtZXNwYWNlCisKK2ludCBtYWluKGludCBhcmdjLCBjaGFyKiogYXJndikgeworICA6OnRlc3Rpbmc6OkluaXRHb29nbGVUZXN0KCZhcmdjLCBhcmd2KTsKKyAgaW50IHN0YXR1cyA9IFJVTl9BTExfVEVTVFMoKTsKKyAgTE9HKElORk8pIDw8ICJUZXN0IHJlc3VsdCA9ICIgPDwgc3RhdHVzOworICByZXR1cm4gc3RhdHVzOworfQpkaWZmIC0tZ2l0IGEvbWVkaWEvYnVmZmVycG9vbC8yLjAvQWNjZXNzb3IuY3BwIGIvbWVkaWEvYnVmZmVycG9vbC8yLjAvQWNjZXNzb3IuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU3YjQ2MDkKLS0tIC9kZXYvbnVsbAorKysgYi9tZWRpYS9idWZmZXJwb29sLzIuMC9BY2Nlc3Nvci5jcHAKQEAgLTAsMCArMSwyMjYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTggVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworI2RlZmluZSBMT0dfVEFHICJCdWZmZXJQb29sQ29ubmVjdGlvbiIKKworI2luY2x1ZGUgIkFjY2Vzc29yLmgiCisjaW5jbHVkZSAiQWNjZXNzb3JJbXBsLmgiCisjaW5jbHVkZSAiQ29ubmVjdGlvbi5oIgorCituYW1lc3BhY2UgYW5kcm9pZCB7CituYW1lc3BhY2UgaGFyZHdhcmUgeworbmFtZXNwYWNlIG1lZGlhIHsKK25hbWVzcGFjZSBidWZmZXJwb29sIHsKK25hbWVzcGFjZSBWMl8wIHsKK25hbWVzcGFjZSBpbXBsZW1lbnRhdGlvbiB7CisKK3ZvaWQgQ29ubmVjdGlvbkRlYXRoUmVjaXBpZW50OjphZGQoCisgICAgICAgIGludDY0X3QgY29ubmVjdGlvbklkLAorICAgICAgICBjb25zdCBzcDxBY2Nlc3Nvcj4gJmFjY2Vzc29yKSB7CisgICAgc3RkOjpsb2NrX2d1YXJkPHN0ZDo6bXV0ZXg+IGxvY2sobUxvY2spOworICAgIGlmIChtQWNjZXNzb3JzLmZpbmQoY29ubmVjdGlvbklkKSA9PSBtQWNjZXNzb3JzLmVuZCgpKSB7CisgICAgICAgIG1BY2Nlc3NvcnMuaW5zZXJ0KHN0ZDo6bWFrZV9wYWlyKGNvbm5lY3Rpb25JZCwgYWNjZXNzb3IpKTsKKyAgICB9Cit9CisKK3ZvaWQgQ29ubmVjdGlvbkRlYXRoUmVjaXBpZW50OjpyZW1vdmUoaW50NjRfdCBjb25uZWN0aW9uSWQpIHsKKyAgICBzdGQ6OmxvY2tfZ3VhcmQ8c3RkOjptdXRleD4gbG9jayhtTG9jayk7CisgICAgbUFjY2Vzc29ycy5lcmFzZShjb25uZWN0aW9uSWQpOworICAgIGF1dG8gaXQgPSBtQ29ubmVjdGlvblRvQ29va2llLmZpbmQoY29ubmVjdGlvbklkKTsKKyAgICBpZiAoaXQgIT0gbUNvbm5lY3Rpb25Ub0Nvb2tpZS5lbmQoKSkgeworICAgICAgICB1aW50NjRfdCBjb29raWUgPSBpdC0+c2Vjb25kOworICAgICAgICBtQ29ubmVjdGlvblRvQ29va2llLmVyYXNlKGl0KTsKKyAgICAgICAgYXV0byBjaXQgPSBtQ29va2llVG9Db25uZWN0aW9ucy5maW5kKGNvb2tpZSk7CisgICAgICAgIGlmIChjaXQgIT0gbUNvb2tpZVRvQ29ubmVjdGlvbnMuZW5kKCkpIHsKKyAgICAgICAgICAgIGNpdC0+c2Vjb25kLmVyYXNlKGNvbm5lY3Rpb25JZCk7CisgICAgICAgICAgICBpZiAoY2l0LT5zZWNvbmQuc2l6ZSgpID09IDApIHsKKyAgICAgICAgICAgICAgICBtQ29va2llVG9Db25uZWN0aW9ucy5lcmFzZShjaXQpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorfQorCit2b2lkIENvbm5lY3Rpb25EZWF0aFJlY2lwaWVudDo6YWRkQ29va2llVG9Db25uZWN0aW9uKAorICAgICAgICB1aW50NjRfdCBjb29raWUsCisgICAgICAgIGludDY0X3QgY29ubmVjdGlvbklkKSB7CisgICAgc3RkOjpsb2NrX2d1YXJkPHN0ZDo6bXV0ZXg+IGxvY2sobUxvY2spOworICAgIGlmIChtQWNjZXNzb3JzLmZpbmQoY29ubmVjdGlvbklkKSA9PSBtQWNjZXNzb3JzLmVuZCgpKSB7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgbUNvbm5lY3Rpb25Ub0Nvb2tpZS5pbnNlcnQoc3RkOjptYWtlX3BhaXIoY29ubmVjdGlvbklkLCBjb29raWUpKTsKKyAgICBhdXRvIGl0ID0gbUNvb2tpZVRvQ29ubmVjdGlvbnMuZmluZChjb29raWUpOworICAgIGlmIChpdCAhPSBtQ29va2llVG9Db25uZWN0aW9ucy5lbmQoKSkgeworICAgICAgICBpdC0+c2Vjb25kLmluc2VydChjb25uZWN0aW9uSWQpOworICAgIH0gZWxzZSB7CisgICAgICAgIG1Db29raWVUb0Nvbm5lY3Rpb25zLmluc2VydChzdGQ6Om1ha2VfcGFpcigKKyAgICAgICAgICAgICAgICBjb29raWUsIHN0ZDo6c2V0PGludDY0X3Q+e2Nvbm5lY3Rpb25JZH0pKTsKKyAgICB9Cit9CisKK3ZvaWQgQ29ubmVjdGlvbkRlYXRoUmVjaXBpZW50OjpzZXJ2aWNlRGllZCgKKyAgICAgICAgdWludDY0X3QgY29va2llLAorICAgICAgICBjb25zdCB3cDw6OmFuZHJvaWQ6OmhpZGw6OmJhc2U6OlYxXzA6OklCYXNlPiYgLyogd2hvICovCisgICAgICAgICkgeworICAgIHN0ZDo6bWFwPGludDY0X3QsIGNvbnN0IHdwPEFjY2Vzc29yPj4gY29ubmVjdGlvbnNUb0Nsb3NlOworICAgIHsKKyAgICAgICAgc3RkOjpsb2NrX2d1YXJkPHN0ZDo6bXV0ZXg+IGxvY2sobUxvY2spOworCisgICAgICAgIGF1dG8gaXQgPSBtQ29va2llVG9Db25uZWN0aW9ucy5maW5kKGNvb2tpZSk7CisgICAgICAgIGlmIChpdCAhPSBtQ29va2llVG9Db25uZWN0aW9ucy5lbmQoKSkgeworICAgICAgICAgICAgZm9yIChhdXRvIGNvbkl0ID0gaXQtPnNlY29uZC5iZWdpbigpOyBjb25JdCAhPSBpdC0+c2Vjb25kLmVuZCgpOyArK2Nvbkl0KSB7CisgICAgICAgICAgICAgICAgYXV0byBhY2Nlc3Nvckl0ID0gbUFjY2Vzc29ycy5maW5kKCpjb25JdCk7CisgICAgICAgICAgICAgICAgaWYgKGFjY2Vzc29ySXQgIT0gbUFjY2Vzc29ycy5lbmQoKSkgeworICAgICAgICAgICAgICAgICAgICBjb25uZWN0aW9uc1RvQ2xvc2UuaW5zZXJ0KHN0ZDo6bWFrZV9wYWlyKCpjb25JdCwgYWNjZXNzb3JJdC0+c2Vjb25kKSk7CisgICAgICAgICAgICAgICAgICAgIG1BY2Nlc3NvcnMuZXJhc2UoYWNjZXNzb3JJdCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIG1Db25uZWN0aW9uVG9Db29raWUuZXJhc2UoKmNvbkl0KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIG1Db29raWVUb0Nvbm5lY3Rpb25zLmVyYXNlKGl0KTsKKyAgICAgICAgfQorICAgIH0KKworICAgIGlmIChjb25uZWN0aW9uc1RvQ2xvc2Uuc2l6ZSgpID4gMCkgeworICAgICAgICBzcDxBY2Nlc3Nvcj4gYWNjZXNzb3I7CisgICAgICAgIGZvciAoYXV0byBpdCA9IGNvbm5lY3Rpb25zVG9DbG9zZS5iZWdpbigpOyBpdCAhPSBjb25uZWN0aW9uc1RvQ2xvc2UuZW5kKCk7ICsraXQpIHsKKyAgICAgICAgICAgIGFjY2Vzc29yID0gaXQtPnNlY29uZC5wcm9tb3RlKCk7CisKKyAgICAgICAgICAgIGlmIChhY2Nlc3NvcikgeworICAgICAgICAgICAgICAgIGFjY2Vzc29yLT5jbG9zZShpdC0+Zmlyc3QpOworICAgICAgICAgICAgICAgIEFMT0dEKCJjb25uZWN0aW9uICVsbGQgY2xvc2VkIG9uIGRlYXRoIiwgKGxvbmcgbG9uZylpdC0+Zmlyc3QpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorfQorCituYW1lc3BhY2Ugeworc3RhdGljIHNwPENvbm5lY3Rpb25EZWF0aFJlY2lwaWVudD4gc0Nvbm5lY3Rpb25EZWF0aFJlY2lwaWVudCA9CisgICAgICAgIG5ldyBDb25uZWN0aW9uRGVhdGhSZWNpcGllbnQoKTsKK30KKworc3A8Q29ubmVjdGlvbkRlYXRoUmVjaXBpZW50PiBBY2Nlc3Nvcjo6Z2V0Q29ubmVjdGlvbkRlYXRoUmVjaXBpZW50KCkgeworICAgIHJldHVybiBzQ29ubmVjdGlvbkRlYXRoUmVjaXBpZW50OworfQorCit2b2lkIEFjY2Vzc29yOjpjcmVhdGVJbnZhbGlkYXRvcigpIHsKKyAgICBBY2Nlc3Nvcjo6SW1wbDo6Y3JlYXRlSW52YWxpZGF0b3IoKTsKK30KKworLy8gTWV0aG9kcyBmcm9tIDo6YW5kcm9pZDo6aGFyZHdhcmU6Om1lZGlhOjpidWZmZXJwb29sOjpWMl8wOjpJQWNjZXNzb3IgZm9sbG93LgorUmV0dXJuPHZvaWQ+IEFjY2Vzc29yOjpjb25uZWN0KAorICAgICAgICBjb25zdCBzcDw6OmFuZHJvaWQ6OmhhcmR3YXJlOjptZWRpYTo6YnVmZmVycG9vbDo6VjJfMDo6SU9ic2VydmVyPiYgb2JzZXJ2ZXIsCisgICAgICAgIGNvbm5lY3RfY2IgX2hpZGxfY2IpIHsKKyAgICBzcDxDb25uZWN0aW9uPiBjb25uZWN0aW9uOworICAgIENvbm5lY3Rpb25JZCBjb25uZWN0aW9uSWQ7CisgICAgdWludDMyX3QgbXNnSWQ7CisgICAgY29uc3QgU3RhdHVzRGVzY3JpcHRvciogZm1xRGVzYzsKKyAgICBjb25zdCBJbnZhbGlkYXRpb25EZXNjcmlwdG9yKiBpbnZEZXNjOworCisgICAgUmVzdWx0U3RhdHVzIHN0YXR1cyA9IGNvbm5lY3QoCisgICAgICAgICAgICBvYnNlcnZlciwgZmFsc2UsICZjb25uZWN0aW9uLCAmY29ubmVjdGlvbklkLCAmbXNnSWQsICZmbXFEZXNjLCAmaW52RGVzYyk7CisgICAgaWYgKHN0YXR1cyA9PSBSZXN1bHRTdGF0dXM6Ok9LKSB7CisgICAgICAgIF9oaWRsX2NiKHN0YXR1cywgY29ubmVjdGlvbiwgY29ubmVjdGlvbklkLCBtc2dJZCwgKmZtcURlc2MsICppbnZEZXNjKTsKKyAgICB9IGVsc2UgeworICAgICAgICBfaGlkbF9jYihzdGF0dXMsIG51bGxwdHIsIC0xTEwsIDAsCisgICAgICAgICAgICAgICAgIGFuZHJvaWQ6OmhhcmR3YXJlOjpNUURlc2NyaXB0b3JTeW5jPEJ1ZmZlclN0YXR1c01lc3NhZ2U+KAorICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZDo6dmVjdG9yPGFuZHJvaWQ6OmhhcmR3YXJlOjpHcmFudG9yRGVzY3JpcHRvcj4oKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBudWxscHRyIC8qIG5oYW5kbGUgKi8sIDAgLyogc2l6ZSAqLyksCisgICAgICAgICAgICAgICAgIGFuZHJvaWQ6OmhhcmR3YXJlOjpNUURlc2NyaXB0b3JVbnN5bmM8QnVmZmVySW52YWxpZGF0aW9uTWVzc2FnZT4oCisgICAgICAgICAgICAgICAgICAgICAgICAgc3RkOjp2ZWN0b3I8YW5kcm9pZDo6aGFyZHdhcmU6OkdyYW50b3JEZXNjcmlwdG9yPigpLAorICAgICAgICAgICAgICAgICAgICAgICAgIG51bGxwdHIgLyogbmhhbmRsZSAqLywgMCAvKiBzaXplICovKSk7CisgICAgfQorICAgIHJldHVybiBWb2lkKCk7Cit9CisKK0FjY2Vzc29yOjpBY2Nlc3Nvcihjb25zdCBzdGQ6OnNoYXJlZF9wdHI8QnVmZmVyUG9vbEFsbG9jYXRvcj4gJmFsbG9jYXRvcikKKyAgICA6IG1JbXBsKG5ldyBJbXBsKGFsbG9jYXRvcikpIHt9CisKK0FjY2Vzc29yOjp+QWNjZXNzb3IoKSB7Cit9CisKK2Jvb2wgQWNjZXNzb3I6OmlzVmFsaWQoKSB7CisgICAgcmV0dXJuIChib29sKW1JbXBsICYmIG1JbXBsLT5pc1ZhbGlkKCk7Cit9CisKK1Jlc3VsdFN0YXR1cyBBY2Nlc3Nvcjo6Zmx1c2goKSB7CisgICAgaWYgKG1JbXBsKSB7CisgICAgICAgIG1JbXBsLT5mbHVzaCgpOworICAgICAgICByZXR1cm4gUmVzdWx0U3RhdHVzOjpPSzsKKyAgICB9CisgICAgcmV0dXJuIFJlc3VsdFN0YXR1czo6Q1JJVElDQUxfRVJST1I7Cit9CisKK1Jlc3VsdFN0YXR1cyBBY2Nlc3Nvcjo6YWxsb2NhdGUoCisgICAgICAgIENvbm5lY3Rpb25JZCBjb25uZWN0aW9uSWQsCisgICAgICAgIGNvbnN0IHN0ZDo6dmVjdG9yPHVpbnQ4X3Q+ICZwYXJhbXMsCisgICAgICAgIEJ1ZmZlcklkICpidWZmZXJJZCwgY29uc3QgbmF0aXZlX2hhbmRsZV90KiogaGFuZGxlKSB7CisgICAgaWYgKG1JbXBsKSB7CisgICAgICAgIHJldHVybiBtSW1wbC0+YWxsb2NhdGUoY29ubmVjdGlvbklkLCBwYXJhbXMsIGJ1ZmZlcklkLCBoYW5kbGUpOworICAgIH0KKyAgICByZXR1cm4gUmVzdWx0U3RhdHVzOjpDUklUSUNBTF9FUlJPUjsKK30KKworUmVzdWx0U3RhdHVzIEFjY2Vzc29yOjpmZXRjaCgKKyAgICAgICAgQ29ubmVjdGlvbklkIGNvbm5lY3Rpb25JZCwgVHJhbnNhY3Rpb25JZCB0cmFuc2FjdGlvbklkLAorICAgICAgICBCdWZmZXJJZCBidWZmZXJJZCwgY29uc3QgbmF0aXZlX2hhbmRsZV90KiogaGFuZGxlKSB7CisgICAgaWYgKG1JbXBsKSB7CisgICAgICAgIHJldHVybiBtSW1wbC0+ZmV0Y2goY29ubmVjdGlvbklkLCB0cmFuc2FjdGlvbklkLCBidWZmZXJJZCwgaGFuZGxlKTsKKyAgICB9CisgICAgcmV0dXJuIFJlc3VsdFN0YXR1czo6Q1JJVElDQUxfRVJST1I7Cit9CisKK1Jlc3VsdFN0YXR1cyBBY2Nlc3Nvcjo6Y29ubmVjdCgKKyAgICAgICAgY29uc3Qgc3A8SU9ic2VydmVyPiAmb2JzZXJ2ZXIsIGJvb2wgbG9jYWwsCisgICAgICAgIHNwPENvbm5lY3Rpb24+ICpjb25uZWN0aW9uLCBDb25uZWN0aW9uSWQgKnBDb25uZWN0aW9uSWQsCisgICAgICAgIHVpbnQzMl90ICpwTXNnSWQsCisgICAgICAgIGNvbnN0IFN0YXR1c0Rlc2NyaXB0b3IqKiBzdGF0dXNEZXNjUHRyLAorICAgICAgICBjb25zdCBJbnZhbGlkYXRpb25EZXNjcmlwdG9yKiogaW52RGVzY1B0cikgeworICAgIGlmIChtSW1wbCkgeworICAgICAgICBSZXN1bHRTdGF0dXMgc3RhdHVzID0gbUltcGwtPmNvbm5lY3QoCisgICAgICAgICAgICAgICAgdGhpcywgb2JzZXJ2ZXIsIGNvbm5lY3Rpb24sIHBDb25uZWN0aW9uSWQsIHBNc2dJZCwKKyAgICAgICAgICAgICAgICBzdGF0dXNEZXNjUHRyLCBpbnZEZXNjUHRyKTsKKyAgICAgICAgaWYgKCFsb2NhbCAmJiBzdGF0dXMgPT0gUmVzdWx0U3RhdHVzOjpPSykgeworICAgICAgICAgICAgc3A8QWNjZXNzb3I+IGFjY2Vzc29yKHRoaXMpOworICAgICAgICAgICAgc0Nvbm5lY3Rpb25EZWF0aFJlY2lwaWVudC0+YWRkKCpwQ29ubmVjdGlvbklkLCBhY2Nlc3Nvcik7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHN0YXR1czsKKyAgICB9CisgICAgcmV0dXJuIFJlc3VsdFN0YXR1czo6Q1JJVElDQUxfRVJST1I7Cit9CisKK1Jlc3VsdFN0YXR1cyBBY2Nlc3Nvcjo6Y2xvc2UoQ29ubmVjdGlvbklkIGNvbm5lY3Rpb25JZCkgeworICAgIGlmIChtSW1wbCkgeworICAgICAgICBSZXN1bHRTdGF0dXMgc3RhdHVzID0gbUltcGwtPmNsb3NlKGNvbm5lY3Rpb25JZCk7CisgICAgICAgIHNDb25uZWN0aW9uRGVhdGhSZWNpcGllbnQtPnJlbW92ZShjb25uZWN0aW9uSWQpOworICAgICAgICByZXR1cm4gc3RhdHVzOworICAgIH0KKyAgICByZXR1cm4gUmVzdWx0U3RhdHVzOjpDUklUSUNBTF9FUlJPUjsKK30KKwordm9pZCBBY2Nlc3Nvcjo6Y2xlYW5VcChib29sIGNsZWFyQ2FjaGUpIHsKKyAgICBpZiAobUltcGwpIHsKKyAgICAgICAgbUltcGwtPmNsZWFuVXAoY2xlYXJDYWNoZSk7CisgICAgfQorfQorCisvL0lBY2Nlc3NvciogSElETF9GRVRDSF9JQWNjZXNzb3IoY29uc3QgY2hhciogLyogbmFtZSAqLykgeworLy8gICAgcmV0dXJuIG5ldyBBY2Nlc3NvcigpOworLy99CisKK30gIC8vIG5hbWVzcGFjZSBpbXBsZW1lbnRhdGlvbgorfSAgLy8gbmFtZXNwYWNlIFYyXzAKK30gIC8vIG5hbWVzcGFjZSBidWZmZXJwb29sCit9ICAvLyBuYW1lc3BhY2UgbWVkaWEKK30gIC8vIG5hbWVzcGFjZSBoYXJkd2FyZQorfSAgLy8gbmFtZXNwYWNlIGFuZHJvaWQKZGlmZiAtLWdpdCBhL21lZGlhL2J1ZmZlcnBvb2wvMi4wL0FjY2Vzc29yLmggYi9tZWRpYS9idWZmZXJwb29sLzIuMC9BY2Nlc3Nvci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhkMDI1MTkKLS0tIC9kZXYvbnVsbAorKysgYi9tZWRpYS9idWZmZXJwb29sLzIuMC9BY2Nlc3Nvci5oCkBAIC0wLDAgKzEsMjAyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE4IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KKworI2lmbmRlZiBBTkRST0lEX0hBUkRXQVJFX01FRElBX0JVRkZFUlBPT0xfVjJfMF9BQ0NFU1NPUl9ICisjZGVmaW5lIEFORFJPSURfSEFSRFdBUkVfTUVESUFfQlVGRkVSUE9PTF9WMl8wX0FDQ0VTU09SX0gKKworI2luY2x1ZGUgPGFuZHJvaWQvaGFyZHdhcmUvbWVkaWEvYnVmZmVycG9vbC8yLjAvSUFjY2Vzc29yLmg+CisjaW5jbHVkZSA8YW5kcm9pZC9oYXJkd2FyZS9tZWRpYS9idWZmZXJwb29sLzIuMC9JT2JzZXJ2ZXIuaD4KKyNpbmNsdWRlIDxidWZmZXJwb29sL0J1ZmZlclBvb2xUeXBlcy5oPgorI2luY2x1ZGUgPGhpZGwvTVFEZXNjcmlwdG9yLmg+CisjaW5jbHVkZSA8aGlkbC9TdGF0dXMuaD4KKyNpbmNsdWRlICJCdWZmZXJTdGF0dXMuaCIKKworI2luY2x1ZGUgPHNldD4KKworbmFtZXNwYWNlIGFuZHJvaWQgeworbmFtZXNwYWNlIGhhcmR3YXJlIHsKK25hbWVzcGFjZSBtZWRpYSB7CituYW1lc3BhY2UgYnVmZmVycG9vbCB7CituYW1lc3BhY2UgVjJfMCB7CituYW1lc3BhY2UgaW1wbGVtZW50YXRpb24geworCit1c2luZyA6OmFuZHJvaWQ6OmhhcmR3YXJlOjpoaWRsX2FycmF5OwordXNpbmcgOjphbmRyb2lkOjpoYXJkd2FyZTo6aGlkbF9tZW1vcnk7Cit1c2luZyA6OmFuZHJvaWQ6OmhhcmR3YXJlOjpoaWRsX3N0cmluZzsKK3VzaW5nIDo6YW5kcm9pZDo6aGFyZHdhcmU6OmhpZGxfdmVjOwordXNpbmcgOjphbmRyb2lkOjpoYXJkd2FyZTo6UmV0dXJuOwordXNpbmcgOjphbmRyb2lkOjpoYXJkd2FyZTo6Vm9pZDsKK3VzaW5nIDo6YW5kcm9pZDo6c3A7CisKK3N0cnVjdCBBY2Nlc3NvcjsKK3N0cnVjdCBDb25uZWN0aW9uOworCisvKioKKyAqIFJlY2VpdmVzIGRlYXRoIG5vdGlmaWNhdGlvbnMgZnJvbSByZW1vdGUgY29ubmVjdGlvbnMuCisgKiBPbiBkZWF0aCBub3RpZmljYXRpb25zLCB0aGUgY29ubmVjdGlvbnMgYXJlIGNsb3NlZCBhbmQgdXNlZCByZXNvdXJjZXMKKyAqIGFyZSByZWxlYXNlZC4KKyAqLworc3RydWN0IENvbm5lY3Rpb25EZWF0aFJlY2lwaWVudCA6IHB1YmxpYyBoYXJkd2FyZTo6aGlkbF9kZWF0aF9yZWNpcGllbnQgeworICAgIC8qKgorICAgICAqIFJlZ2lzdGVycyBhIG5ld2x5IGNvbm5lY3RlZCBjb25uZWN0aW9uIGZyb20gcmVtb3RlIHByb2Nlc3Nlcy4KKyAgICAgKi8KKyAgICB2b2lkIGFkZChpbnQ2NF90IGNvbm5lY3Rpb25JZCwgY29uc3Qgc3A8QWNjZXNzb3I+ICZhY2Nlc3Nvcik7CisKKyAgICAvKioKKyAgICAgKiBSZW1vdmVzIGEgY29ubmVjdGlvbi4KKyAgICAgKi8KKyAgICB2b2lkIHJlbW92ZShpbnQ2NF90IGNvbm5lY3Rpb25JZCk7CisKKyAgICB2b2lkIGFkZENvb2tpZVRvQ29ubmVjdGlvbih1aW50NjRfdCBjb29raWUsIGludDY0X3QgY29ubmVjdGlvbklkKTsKKworICAgIHZpcnR1YWwgdm9pZCBzZXJ2aWNlRGllZCgKKyAgICAgICAgICAgIHVpbnQ2NF90IC8qIGNvb2tpZSAqLywKKyAgICAgICAgICAgIGNvbnN0IHdwPDo6YW5kcm9pZDo6aGlkbDo6YmFzZTo6VjFfMDo6SUJhc2U+JiAvKiB3aG8gKi8KKyAgICAgICAgICAgICkgb3ZlcnJpZGU7CisKK3ByaXZhdGU6CisgICAgc3RkOjptdXRleCBtTG9jazsKKyAgICBzdGQ6Om1hcDx1aW50NjRfdCwgc3RkOjpzZXQ8aW50NjRfdD4+ICBtQ29va2llVG9Db25uZWN0aW9uczsKKyAgICBzdGQ6Om1hcDxpbnQ2NF90LCB1aW50NjRfdD4gbUNvbm5lY3Rpb25Ub0Nvb2tpZTsKKyAgICBzdGQ6Om1hcDxpbnQ2NF90LCBjb25zdCB3cDxBY2Nlc3Nvcj4+IG1BY2Nlc3NvcnM7Cit9OworCisvKioKKyAqIEEgYnVmZmVyIHBvb2wgYWNjZXNzb3Igd2hpY2ggZW5hYmxlcyBhIGJ1ZmZlciBwb29sIHRvIGNvbW11bmljYXRlIHdpdGggYnVmZmVyCisgKiBwb29sIGNsaWVudHMuIDE6MSBjb3JyZXNwb25kZW5zZSBob2xkcyBiZXR3ZWVuIGEgYnVmZmVyIHBvb2wgYW5kIGFuIGFjY2Vzc29yLgorICovCitzdHJ1Y3QgQWNjZXNzb3IgOiBwdWJsaWMgSUFjY2Vzc29yIHsKKyAgICAvLyBNZXRob2RzIGZyb20gOjphbmRyb2lkOjpoYXJkd2FyZTo6bWVkaWE6OmJ1ZmZlcnBvb2w6OlYyXzA6OklBY2Nlc3NvciBmb2xsb3cuCisgICAgUmV0dXJuPHZvaWQ+IGNvbm5lY3QoY29uc3Qgc3A8OjphbmRyb2lkOjpoYXJkd2FyZTo6bWVkaWE6OmJ1ZmZlcnBvb2w6OlYyXzA6OklPYnNlcnZlcj4mIG9ic2VydmVyLCBjb25uZWN0X2NiIF9oaWRsX2NiKSBvdmVycmlkZTsKKworICAgIC8qKgorICAgICAqIENyZWF0ZXMgYSBidWZmZXIgcG9vbCBhY2Nlc3NvciB3aGljaCB1c2VzIHRoZSBzcGVjaWZpZWQgYWxsb2NhdG9yLgorICAgICAqCisgICAgICogQHBhcmFtIGFsbG9jYXRvciBidWZmZXIgYWxsb2NhdG9yLgorICAgICAqLworICAgIGV4cGxpY2l0IEFjY2Vzc29yKGNvbnN0IHN0ZDo6c2hhcmVkX3B0cjxCdWZmZXJQb29sQWxsb2NhdG9yPiAmYWxsb2NhdG9yKTsKKworICAgIC8qKiBEZXN0cnVjdHMgYSBidWZmZXIgcG9vbCBhY2Nlc3Nvci4gKi8KKyAgICB+QWNjZXNzb3IoKTsKKworICAgIC8qKiBSZXR1cm5zIHdoZXRoZXIgdGhlIGFjY2Vzc29yIGlzIHZhbGlkLiAqLworICAgIGJvb2wgaXNWYWxpZCgpOworCisgICAgLyoqIEludmFsaWRhdGVzIGFsbCBidWZmZXJzIHdoaWNoIGFyZSBvd25lZCBieSBidWZmZXJwb29sICovCisgICAgUmVzdWx0U3RhdHVzIGZsdXNoKCk7CisKKyAgICAvKiogQWxsb2NhdGVzIGEgYnVmZmVyIGZyb20gYSBidWZmZXIgcG9vbC4KKyAgICAgKgorICAgICAqIEBwYXJhbSBjb25uZWN0aW9uSWQgIHRoZSBjb25uZWN0aW9uIGlkIG9mIHRoZSBjbGllbnQuCisgICAgICogQHBhcmFtIHBhcmFtcyAgICAgICAgdGhlIGFsbG9jYXRpb24gcGFyYW1ldGVycy4KKyAgICAgKiBAcGFyYW0gYnVmZmVySWQgICAgICB0aGUgaWQgb2YgdGhlIGFsbG9jYXRlZCBidWZmZXIuCisgICAgICogQHBhcmFtIGhhbmRsZSAgICAgICAgdGhlIG5hdGl2ZSBoYW5kbGUgb2YgdGhlIGFsbG9jYXRlZCBidWZmZXIuCisgICAgICoKKyAgICAgKiBAcmV0dXJuIE9LIHdoZW4gYSBidWZmZXIgaXMgc3VjY2Vzc2Z1bGx5IGFsbG9jYXRlZC4KKyAgICAgKiAgICAgICAgIE5PX01FTU9SWSB3aGVuIHRoZXJlIGlzIG5vIG1lbW9yeS4KKyAgICAgKiAgICAgICAgIENSSVRJQ0FMX0VSUk9SIG90aGVyd2lzZS4KKyAgICAgKi8KKyAgICBSZXN1bHRTdGF0dXMgYWxsb2NhdGUoCisgICAgICAgICAgICBDb25uZWN0aW9uSWQgY29ubmVjdGlvbklkLAorICAgICAgICAgICAgY29uc3Qgc3RkOjp2ZWN0b3I8dWludDhfdD4mIHBhcmFtcywKKyAgICAgICAgICAgIEJ1ZmZlcklkICpidWZmZXJJZCwKKyAgICAgICAgICAgIGNvbnN0IG5hdGl2ZV9oYW5kbGVfdCoqIGhhbmRsZSk7CisKKyAgICAvKioKKyAgICAgKiBGZXRjaGVzIGEgYnVmZmVyIGZvciB0aGUgc3BlY2lmaWVkIHRyYW5zYWN0aW9uLgorICAgICAqCisgICAgICogQHBhcmFtIGNvbm5lY3Rpb25JZCAgdGhlIGlkIG9mIHJlY2VpdmluZyBjb25uZWN0aW9uKGNsaWVudCkuCisgICAgICogQHBhcmFtIHRyYW5zYWN0aW9uSWQgdGhlIGlkIG9mIHRoZSB0cmFuc2ZlciB0cmFuc2FjdGlvbi4KKyAgICAgKiBAcGFyYW0gYnVmZmVySWQgICAgICB0aGUgaWQgb2YgdGhlIGJ1ZmZlciB0byBiZSBmZXRjaGVkLgorICAgICAqIEBwYXJhbSBoYW5kbGUgICAgICAgIHRoZSBuYXRpdmUgaGFuZGxlIG9mIHRoZSBmZXRjaGVkIGJ1ZmZlci4KKyAgICAgKgorICAgICAqIEByZXR1cm4gT0sgd2hlbiBhIGJ1ZmZlciBpcyBzdWNjZXNzZnVsbHkgZmV0Y2hlZC4KKyAgICAgKiAgICAgICAgIE5PX01FTU9SWSB3aGVuIHRoZXJlIGlzIG5vIG1lbW9yeS4KKyAgICAgKiAgICAgICAgIENSSVRJQ0FMX0VSUk9SIG90aGVyd2lzZS4KKyAgICAgKi8KKyAgICBSZXN1bHRTdGF0dXMgZmV0Y2goCisgICAgICAgICAgICBDb25uZWN0aW9uSWQgY29ubmVjdGlvbklkLAorICAgICAgICAgICAgVHJhbnNhY3Rpb25JZCB0cmFuc2FjdGlvbklkLAorICAgICAgICAgICAgQnVmZmVySWQgYnVmZmVySWQsCisgICAgICAgICAgICBjb25zdCBuYXRpdmVfaGFuZGxlX3QqKiBoYW5kbGUpOworCisgICAgLyoqCisgICAgICogTWFrZXMgYSBjb25uZWN0aW9uIHRvIHRoZSBidWZmZXIgcG9vbC4gVGhlIGJ1ZmZlciBwb29sIGNsaWVudCB1c2VzIHRoZQorICAgICAqIGNyZWF0ZWQgY29ubmVjdGlvbiBpbiBvcmRlciB0byBjb21tdW5pY2F0ZSB3aXRoIHRoZSBidWZmZXIgcG9vbC4gQW4KKyAgICAgKiBGTVEgZm9yIGJ1ZmZlciBzdGF0dXMgbWVzc2FnZSBpcyBhbHNvIGNyZWF0ZWQgZm9yIHRoZSBjbGllbnQuCisgICAgICoKKyAgICAgKiBAcGFyYW0gb2JzZXJ2ZXIgICAgICBjbGllbnQgb2JzZXJ2ZXIgZm9yIGJ1ZmZlciBpbnZhbGlkYXRpb24KKyAgICAgKiBAcGFyYW0gbG9jYWwgICAgICAgICB0cnVlIHdoZW4gYSBjb25uZWN0aW9uIHJlcXVlc3QgY29tZXMgZnJvbSBsb2NhbCBwcm9jZXNzLAorICAgICAqICAgICAgICAgICAgICAgICAgICAgIGZhbHNlIG90aGVyd2lzZS4KKyAgICAgKiBAcGFyYW0gY29ubmVjdGlvbiAgICBjcmVhdGVkIGNvbm5lY3Rpb24KKyAgICAgKiBAcGFyYW0gcENvbm5lY3Rpb25JZCB0aGUgaWQgb2YgdGhlIGNyZWF0ZWQgY29ubmVjdGlvbgorICAgICAqIEBwYXJhbSBwTXNnSWQgICAgICAgIHRoZSBpZCBvZiB0aGUgcmVjZW50IGJ1ZmZlciBwb29sIG1lc3NhZ2UKKyAgICAgKiBAcGFyYW0gc3RhdHVzRGVzY1B0ciBGTVEgZGVzY3JpcHRvciBmb3Igc2hhcmVkIGJ1ZmZlciBzdGF0dXMgbWVzc2FnZQorICAgICAqICAgICAgICAgICAgICAgICAgICAgIHF1ZXVlIGJldHdlZW4gYSBidWZmZXIgcG9vbCBhbmQgdGhlIGNsaWVudC4KKyAgICAgKiBAcGFyYW0gaW52RGVzY1B0ciAgICBGTVEgZGVzY3JpcHRvciBmb3IgYnVmZmVyIGludmFsaWRhdGlvbiBtZXNzYWdlCisgICAgICogICAgICAgICAgICAgICAgICAgICAgcXVldWUgZnJvbSBhIGJ1ZmZlciBwb29sIHRvIHRoZSBjbGllbnQuCisgICAgICoKKyAgICAgKiBAcmV0dXJuIE9LIHdoZW4gYSBjb25uZWN0aW9uIGlzIHN1Y2Nlc3NmdWxseSBtYWRlLgorICAgICAqICAgICAgICAgTk9fTUVNT1JZIHdoZW4gdGhlcmUgaXMgbm8gbWVtb3J5LgorICAgICAqICAgICAgICAgQ1JJVElDQUxfRVJST1Igb3RoZXJ3aXNlLgorICAgICAqLworICAgIFJlc3VsdFN0YXR1cyBjb25uZWN0KAorICAgICAgICAgICAgY29uc3Qgc3A8SU9ic2VydmVyPiYgb2JzZXJ2ZXIsCisgICAgICAgICAgICBib29sIGxvY2FsLAorICAgICAgICAgICAgc3A8Q29ubmVjdGlvbj4gKmNvbm5lY3Rpb24sIENvbm5lY3Rpb25JZCAqcENvbm5lY3Rpb25JZCwKKyAgICAgICAgICAgIHVpbnQzMl90ICpwTXNnSWQsCisgICAgICAgICAgICBjb25zdCBTdGF0dXNEZXNjcmlwdG9yKiogc3RhdHVzRGVzY1B0ciwKKyAgICAgICAgICAgIGNvbnN0IEludmFsaWRhdGlvbkRlc2NyaXB0b3IqKiBpbnZEZXNjUHRyKTsKKworICAgIC8qKgorICAgICAqIENsb3NlcyB0aGUgc3BlY2lmaWVkIGNvbm5lY3Rpb24gdG8gdGhlIGNsaWVudC4KKyAgICAgKgorICAgICAqIEBwYXJhbSBjb25uZWN0aW9uSWQgIHRoZSBpZCBvZiB0aGUgY29ubmVjdGlvbi4KKyAgICAgKgorICAgICAqIEByZXR1cm4gT0sgd2hlbiB0aGUgY29ubmVjdGlvbiBpcyBjbG9zZWQuCisgICAgICogICAgICAgICBDUklUSUNBTF9FUlJPUiBvdGhlcndpc2UuCisgICAgICovCisgICAgUmVzdWx0U3RhdHVzIGNsb3NlKENvbm5lY3Rpb25JZCBjb25uZWN0aW9uSWQpOworCisgICAgLyoqCisgICAgICogUHJvY2Vzc2VzIHBlbmRpbmcgYnVmZmVyIHN0YXR1cyBtZXNzYWdlcyBhbmQgcGVyZm9tcyBwZXJpb2RpYyBjYWNoZQorICAgICAqIGNsZWFuaW5nLgorICAgICAqCisgICAgICogQHBhcmFtIGNsZWFyQ2FjaGUgICAgaWYgY2xlYXJDYWNoZSBpcyB0cnVlLCBpdCBmcmVlcyBhbGwgYnVmZmVycyB3YWl0aW5nCisgICAgICogICAgICAgICAgICAgICAgICAgICAgdG8gYmUgcmVjeWNsZWQuCisgICAgICovCisgICAgdm9pZCBjbGVhblVwKGJvb2wgY2xlYXJDYWNoZSk7CisKKyAgICAvKioKKyAgICAgKiBHZXRzIGEgaGlkbF9kZWF0aF9yZWNpcGllbnQgZm9yIHJlbW90ZSBjb25uZWN0aW9uIGRlYXRoLgorICAgICAqLworICAgIHN0YXRpYyBzcDxDb25uZWN0aW9uRGVhdGhSZWNpcGllbnQ+IGdldENvbm5lY3Rpb25EZWF0aFJlY2lwaWVudCgpOworCisgICAgc3RhdGljIHZvaWQgY3JlYXRlSW52YWxpZGF0b3IoKTsKKworcHJpdmF0ZToKKyAgICBjbGFzcyBJbXBsOworICAgIHN0ZDo6c2hhcmVkX3B0cjxJbXBsPiBtSW1wbDsKK307CisKK30gIC8vIG5hbWVzcGFjZSBpbXBsZW1lbnRhdGlvbgorfSAgLy8gbmFtZXNwYWNlIFYyXzAKK30gIC8vIG5hbWVzcGFjZSBidWZmZXJwb29sCit9ICAvLyBuYW1lc3BhY2UgbWVkaWEKK30gIC8vIG5hbWVzcGFjZSBoYXJkd2FyZQorfSAgLy8gbmFtZXNwYWNlIGFuZHJvaWQKKworI2VuZGlmICAvLyBBTkRST0lEX0hBUkRXQVJFX01FRElBX0JVRkZFUlBPT0xfVjJfMF9BQ0NFU1NPUl9ICmRpZmYgLS1naXQgYS9tZWRpYS9idWZmZXJwb29sLzIuMC9BY2Nlc3NvckltcGwuY3BwIGIvbWVkaWEvYnVmZmVycG9vbC8yLjAvQWNjZXNzb3JJbXBsLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMTY1MzE0Ci0tLSAvZGV2L251bGwKKysrIGIvbWVkaWEvYnVmZmVycG9vbC8yLjAvQWNjZXNzb3JJbXBsLmNwcApAQCAtMCwwICsxLDg0MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxOCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCisKKyNkZWZpbmUgTE9HX1RBRyAiQnVmZmVyUG9vbEFjY2Vzc29yIgorLy8jZGVmaW5lIExPR19OREVCVUcgMAorCisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisjaW5jbHVkZSA8dGltZS5oPgorI2luY2x1ZGUgPHVuaXN0ZC5oPgorI2luY2x1ZGUgPHV0aWxzL0xvZy5oPgorI2luY2x1ZGUgPHRocmVhZD4KKyNpbmNsdWRlICJBY2Nlc3NvckltcGwuaCIKKyNpbmNsdWRlICJDb25uZWN0aW9uLmgiCisKK25hbWVzcGFjZSBhbmRyb2lkIHsKK25hbWVzcGFjZSBoYXJkd2FyZSB7CituYW1lc3BhY2UgbWVkaWEgeworbmFtZXNwYWNlIGJ1ZmZlcnBvb2wgeworbmFtZXNwYWNlIFYyXzAgeworbmFtZXNwYWNlIGltcGxlbWVudGF0aW9uIHsKKworbmFtZXNwYWNlIHsKKyAgICBzdGF0aWMgY29uc3RleHByIGludDY0X3Qga0NsZWFuVXBEdXJhdGlvblVzID0gNTAwMDAwOyAvLyBUT0RPIHR1bmUgMC41IHNlYworICAgIHN0YXRpYyBjb25zdGV4cHIgaW50NjRfdCBrTG9nRHVyYXRpb25VcyA9IDUwMDAwMDA7IC8vIDUgc2VjcworCisgICAgc3RhdGljIGNvbnN0ZXhwciBzaXplX3Qga01pbkFsbG9jQnl0ZXNGb3JFdmljdGlvbiA9IDEwMjQqMTAyNCoxNTsKKyAgICBzdGF0aWMgY29uc3RleHByIHNpemVfdCBrTWluQnVmZmVyQ291bnRGb3JFdmljdGlvbiA9IDQwOworfQorCisvLyBCdWZmZXIgc3RydWN0dXJlIGluIGJ1ZmZlcnBvb2wgcHJvY2Vzcworc3RydWN0IEludGVybmFsQnVmZmVyIHsKKyAgICBCdWZmZXJJZCBtSWQ7CisgICAgc2l6ZV90IG1Pd25lckNvdW50OworICAgIHNpemVfdCBtVHJhbnNhY3Rpb25Db3VudDsKKyAgICBjb25zdCBzdGQ6OnNoYXJlZF9wdHI8QnVmZmVyUG9vbEFsbG9jYXRpb24+IG1BbGxvY2F0aW9uOworICAgIGNvbnN0IHNpemVfdCBtQWxsb2NTaXplOworICAgIGNvbnN0IHN0ZDo6dmVjdG9yPHVpbnQ4X3Q+IG1Db25maWc7CisgICAgYm9vbCBtSW52YWxpZGF0ZWQ7CisKKyAgICBJbnRlcm5hbEJ1ZmZlcigKKyAgICAgICAgICAgIEJ1ZmZlcklkIGlkLAorICAgICAgICAgICAgY29uc3Qgc3RkOjpzaGFyZWRfcHRyPEJ1ZmZlclBvb2xBbGxvY2F0aW9uPiAmYWxsb2MsCisgICAgICAgICAgICBjb25zdCBzaXplX3QgYWxsb2NTaXplLAorICAgICAgICAgICAgY29uc3Qgc3RkOjp2ZWN0b3I8dWludDhfdD4gJmFsbG9jQ29uZmlnKQorICAgICAgICAgICAgOiBtSWQoaWQpLCBtT3duZXJDb3VudCgwKSwgbVRyYW5zYWN0aW9uQ291bnQoMCksCisgICAgICAgICAgICBtQWxsb2NhdGlvbihhbGxvYyksIG1BbGxvY1NpemUoYWxsb2NTaXplKSwgbUNvbmZpZyhhbGxvY0NvbmZpZyksCisgICAgICAgICAgICBtSW52YWxpZGF0ZWQoZmFsc2UpIHt9CisKKyAgICBjb25zdCBuYXRpdmVfaGFuZGxlX3QgKmhhbmRsZSgpIHsKKyAgICAgICAgcmV0dXJuIG1BbGxvY2F0aW9uLT5oYW5kbGUoKTsKKyAgICB9CisKKyAgICB2b2lkIGludmFsaWRhdGUoKSB7CisgICAgICAgIG1JbnZhbGlkYXRlZCA9IHRydWU7CisgICAgfQorfTsKKworc3RydWN0IFRyYW5zYWN0aW9uU3RhdHVzIHsKKyAgICBUcmFuc2FjdGlvbklkIG1JZDsKKyAgICBCdWZmZXJJZCBtQnVmZmVySWQ7CisgICAgQ29ubmVjdGlvbklkIG1TZW5kZXI7CisgICAgQ29ubmVjdGlvbklkIG1SZWNlaXZlcjsKKyAgICBCdWZmZXJTdGF0dXMgbVN0YXR1czsKKyAgICBpbnQ2NF90IG1UaW1lc3RhbXBVczsKKyAgICBib29sIG1TZW5kZXJWYWxpZGF0ZWQ7CisKKyAgICBUcmFuc2FjdGlvblN0YXR1cyhjb25zdCBCdWZmZXJTdGF0dXNNZXNzYWdlICZtZXNzYWdlLCBpbnQ2NF90IHRpbWVzdGFtcFVzKSB7CisgICAgICAgIG1JZCA9IG1lc3NhZ2UudHJhbnNhY3Rpb25JZDsKKyAgICAgICAgbUJ1ZmZlcklkID0gbWVzc2FnZS5idWZmZXJJZDsKKyAgICAgICAgbVN0YXR1cyA9IG1lc3NhZ2UubmV3U3RhdHVzOworICAgICAgICBtVGltZXN0YW1wVXMgPSB0aW1lc3RhbXBVczsKKyAgICAgICAgaWYgKG1TdGF0dXMgPT0gQnVmZmVyU3RhdHVzOjpUUkFOU0ZFUl9UTykgeworICAgICAgICAgICAgbVNlbmRlciA9IG1lc3NhZ2UuY29ubmVjdGlvbklkOworICAgICAgICAgICAgbVJlY2VpdmVyID0gbWVzc2FnZS50YXJnZXRDb25uZWN0aW9uSWQ7CisgICAgICAgICAgICBtU2VuZGVyVmFsaWRhdGVkID0gdHJ1ZTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIG1TZW5kZXIgPSAtMUxMOworICAgICAgICAgICAgbVJlY2VpdmVyID0gbWVzc2FnZS5jb25uZWN0aW9uSWQ7CisgICAgICAgICAgICBtU2VuZGVyVmFsaWRhdGVkID0gZmFsc2U7CisgICAgICAgIH0KKyAgICB9Cit9OworCisvLyBIZWxwZXIgdGVtcGxhdGUgbWV0aG9kcyBmb3IgaGFuZGxpbmcgbWFwIG9mIHNldC4KK3RlbXBsYXRlPGNsYXNzIFQsIGNsYXNzIFU+Citib29sIGluc2VydChzdGQ6Om1hcDxULCBzdGQ6OnNldDxVPj4gKm1hcE9mU2V0LCBUIGtleSwgVSB2YWx1ZSkgeworICAgIGF1dG8gaXRlciA9IG1hcE9mU2V0LT5maW5kKGtleSk7CisgICAgaWYgKGl0ZXIgPT0gbWFwT2ZTZXQtPmVuZCgpKSB7CisgICAgICAgIHN0ZDo6c2V0PFU+IHZhbHVlU2V0e3ZhbHVlfTsKKyAgICAgICAgbWFwT2ZTZXQtPmluc2VydChzdGQ6Om1ha2VfcGFpcihrZXksIHZhbHVlU2V0KSk7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0gZWxzZSBpZiAoaXRlci0+c2Vjb25kLmZpbmQodmFsdWUpICA9PSBpdGVyLT5zZWNvbmQuZW5kKCkpIHsKKyAgICAgICAgaXRlci0+c2Vjb25kLmluc2VydCh2YWx1ZSk7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK3RlbXBsYXRlPGNsYXNzIFQsIGNsYXNzIFU+Citib29sIGVyYXNlKHN0ZDo6bWFwPFQsIHN0ZDo6c2V0PFU+PiAqbWFwT2ZTZXQsIFQga2V5LCBVIHZhbHVlKSB7CisgICAgYm9vbCByZXQgPSBmYWxzZTsKKyAgICBhdXRvIGl0ZXIgPSBtYXBPZlNldC0+ZmluZChrZXkpOworICAgIGlmIChpdGVyICE9IG1hcE9mU2V0LT5lbmQoKSkgeworICAgICAgICBpZiAoaXRlci0+c2Vjb25kLmVyYXNlKHZhbHVlKSA+IDApIHsKKyAgICAgICAgICAgIHJldCA9IHRydWU7CisgICAgICAgIH0KKyAgICAgICAgaWYgKGl0ZXItPnNlY29uZC5zaXplKCkgPT0gMCkgeworICAgICAgICAgICAgbWFwT2ZTZXQtPmVyYXNlKGl0ZXIpOworICAgICAgICB9CisgICAgfQorICAgIHJldHVybiByZXQ7Cit9CisKK3RlbXBsYXRlPGNsYXNzIFQsIGNsYXNzIFU+Citib29sIGNvbnRhaW5zKHN0ZDo6bWFwPFQsIHN0ZDo6c2V0PFU+PiAqbWFwT2ZTZXQsIFQga2V5LCBVIHZhbHVlKSB7CisgICAgYXV0byBpdGVyID0gbWFwT2ZTZXQtPmZpbmQoa2V5KTsKKyAgICBpZiAoaXRlciAhPSBtYXBPZlNldC0+ZW5kKCkpIHsKKyAgICAgICAgYXV0byBzZXRJdGVyID0gaXRlci0+c2Vjb25kLmZpbmQodmFsdWUpOworICAgICAgICByZXR1cm4gc2V0SXRlciAhPSBpdGVyLT5zZWNvbmQuZW5kKCk7CisgICAgfQorICAgIHJldHVybiBmYWxzZTsKK30KKworaW50MzJfdCBBY2Nlc3Nvcjo6SW1wbDo6c1BpZCA9IGdldHBpZCgpOwordWludDMyX3QgQWNjZXNzb3I6OkltcGw6OnNTZXFJZCA9IHRpbWUobnVsbHB0cik7CisKK0FjY2Vzc29yOjpJbXBsOjpJbXBsKAorICAgICAgICBjb25zdCBzdGQ6OnNoYXJlZF9wdHI8QnVmZmVyUG9vbEFsbG9jYXRvcj4gJmFsbG9jYXRvcikKKyAgICAgICAgOiBtQWxsb2NhdG9yKGFsbG9jYXRvcikge30KKworQWNjZXNzb3I6OkltcGw6On5JbXBsKCkgeworfQorCitSZXN1bHRTdGF0dXMgQWNjZXNzb3I6OkltcGw6OmNvbm5lY3QoCisgICAgICAgIGNvbnN0IHNwPEFjY2Vzc29yPiAmYWNjZXNzb3IsIGNvbnN0IHNwPElPYnNlcnZlcj4gJm9ic2VydmVyLAorICAgICAgICBzcDxDb25uZWN0aW9uPiAqY29ubmVjdGlvbiwKKyAgICAgICAgQ29ubmVjdGlvbklkICpwQ29ubmVjdGlvbklkLAorICAgICAgICB1aW50MzJfdCAqcE1zZ0lkLAorICAgICAgICBjb25zdCBTdGF0dXNEZXNjcmlwdG9yKiogc3RhdHVzRGVzY1B0ciwKKyAgICAgICAgY29uc3QgSW52YWxpZGF0aW9uRGVzY3JpcHRvcioqIGludkRlc2NQdHIpIHsKKyAgICBzcDxDb25uZWN0aW9uPiBuZXdDb25uZWN0aW9uID0gbmV3IENvbm5lY3Rpb24oKTsKKyAgICBSZXN1bHRTdGF0dXMgc3RhdHVzID0gUmVzdWx0U3RhdHVzOjpDUklUSUNBTF9FUlJPUjsKKyAgICB7CisgICAgICAgIHN0ZDo6bG9ja19ndWFyZDxzdGQ6Om11dGV4PiBsb2NrKG1CdWZmZXJQb29sLm1NdXRleCk7CisgICAgICAgIGlmIChuZXdDb25uZWN0aW9uKSB7CisgICAgICAgICAgICBDb25uZWN0aW9uSWQgaWQgPSAoaW50NjRfdClzUGlkIDw8IDMyIHwgc1NlcUlkOworICAgICAgICAgICAgc3RhdHVzID0gbUJ1ZmZlclBvb2wubU9ic2VydmVyLm9wZW4oaWQsIHN0YXR1c0Rlc2NQdHIpOworICAgICAgICAgICAgaWYgKHN0YXR1cyA9PSBSZXN1bHRTdGF0dXM6Ok9LKSB7CisgICAgICAgICAgICAgICAgbmV3Q29ubmVjdGlvbi0+aW5pdGlhbGl6ZShhY2Nlc3NvciwgaWQpOworICAgICAgICAgICAgICAgICpjb25uZWN0aW9uID0gbmV3Q29ubmVjdGlvbjsKKyAgICAgICAgICAgICAgICAqcENvbm5lY3Rpb25JZCA9IGlkOworICAgICAgICAgICAgICAgICpwTXNnSWQgPSBtQnVmZmVyUG9vbC5tSW52YWxpZGF0aW9uLm1JbnZhbGlkYXRpb25JZDsKKyAgICAgICAgICAgICAgICBtQnVmZmVyUG9vbC5tSW52YWxpZGF0aW9uQ2hhbm5lbC5nZXREZXNjKGludkRlc2NQdHIpOworICAgICAgICAgICAgICAgIG1CdWZmZXJQb29sLm1JbnZhbGlkYXRpb24ub25Db25uZWN0KGlkLCBvYnNlcnZlcik7CisgICAgICAgICAgICAgICAgKytzU2VxSWQ7CisgICAgICAgICAgICB9CisKKyAgICAgICAgfQorICAgICAgICBtQnVmZmVyUG9vbC5wcm9jZXNzU3RhdHVzTWVzc2FnZXMoKTsKKyAgICAgICAgbUJ1ZmZlclBvb2wuY2xlYW5VcCgpOworICAgIH0KKyAgICByZXR1cm4gc3RhdHVzOworfQorCitSZXN1bHRTdGF0dXMgQWNjZXNzb3I6OkltcGw6OmNsb3NlKENvbm5lY3Rpb25JZCBjb25uZWN0aW9uSWQpIHsKKyAgICBzdGQ6OmxvY2tfZ3VhcmQ8c3RkOjptdXRleD4gbG9jayhtQnVmZmVyUG9vbC5tTXV0ZXgpOworICAgIEFMT0dWKCJjb25uZWN0aW9uIGNsb3NlICVsbGQ6ICV1IiwgKGxvbmcgbG9uZyljb25uZWN0aW9uSWQsIG1CdWZmZXJQb29sLm1JbnZhbGlkYXRpb24ubUlkKTsKKyAgICBtQnVmZmVyUG9vbC5wcm9jZXNzU3RhdHVzTWVzc2FnZXMoKTsKKyAgICBtQnVmZmVyUG9vbC5oYW5kbGVDbG9zZShjb25uZWN0aW9uSWQpOworICAgIG1CdWZmZXJQb29sLm1PYnNlcnZlci5jbG9zZShjb25uZWN0aW9uSWQpOworICAgIG1CdWZmZXJQb29sLm1JbnZhbGlkYXRpb24ub25DbG9zZShjb25uZWN0aW9uSWQpOworICAgIC8vIFNpbmNlIGNsb3NlIyB3aWxsIGJlIGNhbGxlZCBhZnRlciBhbGwgd29ya3MgYXJlIGZpbmlzaGVkLCBpdCBpcyBPSyB0bworICAgIC8vIGV2aWN0IHVudXNlZCBidWZmZXJzLgorICAgIG1CdWZmZXJQb29sLmNsZWFuVXAodHJ1ZSk7CisgICAgcmV0dXJuIFJlc3VsdFN0YXR1czo6T0s7Cit9CisKK1Jlc3VsdFN0YXR1cyBBY2Nlc3Nvcjo6SW1wbDo6YWxsb2NhdGUoCisgICAgICAgIENvbm5lY3Rpb25JZCBjb25uZWN0aW9uSWQsIGNvbnN0IHN0ZDo6dmVjdG9yPHVpbnQ4X3Q+JiBwYXJhbXMsCisgICAgICAgIEJ1ZmZlcklkICpidWZmZXJJZCwgY29uc3QgbmF0aXZlX2hhbmRsZV90KiogaGFuZGxlKSB7CisgICAgc3RkOjp1bmlxdWVfbG9jazxzdGQ6Om11dGV4PiBsb2NrKG1CdWZmZXJQb29sLm1NdXRleCk7CisgICAgbUJ1ZmZlclBvb2wucHJvY2Vzc1N0YXR1c01lc3NhZ2VzKCk7CisgICAgUmVzdWx0U3RhdHVzIHN0YXR1cyA9IFJlc3VsdFN0YXR1czo6T0s7CisgICAgaWYgKCFtQnVmZmVyUG9vbC5nZXRGcmVlQnVmZmVyKG1BbGxvY2F0b3IsIHBhcmFtcywgYnVmZmVySWQsIGhhbmRsZSkpIHsKKyAgICAgICAgbG9jay51bmxvY2soKTsKKyAgICAgICAgc3RkOjpzaGFyZWRfcHRyPEJ1ZmZlclBvb2xBbGxvY2F0aW9uPiBhbGxvYzsKKyAgICAgICAgc2l6ZV90IGFsbG9jU2l6ZTsKKyAgICAgICAgc3RhdHVzID0gbUFsbG9jYXRvci0+YWxsb2NhdGUocGFyYW1zLCAmYWxsb2MsICZhbGxvY1NpemUpOworICAgICAgICBsb2NrLmxvY2soKTsKKyAgICAgICAgaWYgKHN0YXR1cyA9PSBSZXN1bHRTdGF0dXM6Ok9LKSB7CisgICAgICAgICAgICBzdGF0dXMgPSBtQnVmZmVyUG9vbC5hZGROZXdCdWZmZXIoYWxsb2MsIGFsbG9jU2l6ZSwgcGFyYW1zLCBidWZmZXJJZCwgaGFuZGxlKTsKKyAgICAgICAgfQorICAgICAgICBBTE9HVigiY3JlYXRlIGEgYnVmZmVyICVkIDogJXUgJXAiLAorICAgICAgICAgICAgICBzdGF0dXMgPT0gUmVzdWx0U3RhdHVzOjpPSywgKmJ1ZmZlcklkLCAqaGFuZGxlKTsKKyAgICB9CisgICAgaWYgKHN0YXR1cyA9PSBSZXN1bHRTdGF0dXM6Ok9LKSB7CisgICAgICAgIC8vIFRPRE86IGhhbmRsZSBvd25CdWZmZXIgZmFpbHVyZQorICAgICAgICBtQnVmZmVyUG9vbC5oYW5kbGVPd25CdWZmZXIoY29ubmVjdGlvbklkLCAqYnVmZmVySWQpOworICAgIH0KKyAgICBtQnVmZmVyUG9vbC5jbGVhblVwKCk7CisgICAgcmV0dXJuIHN0YXR1czsKK30KKworUmVzdWx0U3RhdHVzIEFjY2Vzc29yOjpJbXBsOjpmZXRjaCgKKyAgICAgICAgQ29ubmVjdGlvbklkIGNvbm5lY3Rpb25JZCwgVHJhbnNhY3Rpb25JZCB0cmFuc2FjdGlvbklkLAorICAgICAgICBCdWZmZXJJZCBidWZmZXJJZCwgY29uc3QgbmF0aXZlX2hhbmRsZV90KiogaGFuZGxlKSB7CisgICAgc3RkOjpsb2NrX2d1YXJkPHN0ZDo6bXV0ZXg+IGxvY2sobUJ1ZmZlclBvb2wubU11dGV4KTsKKyAgICBtQnVmZmVyUG9vbC5wcm9jZXNzU3RhdHVzTWVzc2FnZXMoKTsKKyAgICBhdXRvIGZvdW5kID0gbUJ1ZmZlclBvb2wubVRyYW5zYWN0aW9ucy5maW5kKHRyYW5zYWN0aW9uSWQpOworICAgIGlmIChmb3VuZCAhPSBtQnVmZmVyUG9vbC5tVHJhbnNhY3Rpb25zLmVuZCgpICYmCisgICAgICAgICAgICBjb250YWlucygmbUJ1ZmZlclBvb2wubVBlbmRpbmdUcmFuc2FjdGlvbnMsCisgICAgICAgICAgICAgICAgICAgICBjb25uZWN0aW9uSWQsIHRyYW5zYWN0aW9uSWQpKSB7CisgICAgICAgIGlmIChmb3VuZC0+c2Vjb25kLT5tU2VuZGVyVmFsaWRhdGVkICYmCisgICAgICAgICAgICAgICAgZm91bmQtPnNlY29uZC0+bVN0YXR1cyA9PSBCdWZmZXJTdGF0dXM6OlRSQU5TRkVSX0ZST00gJiYKKyAgICAgICAgICAgICAgICBmb3VuZC0+c2Vjb25kLT5tQnVmZmVySWQgPT0gYnVmZmVySWQpIHsKKyAgICAgICAgICAgIGZvdW5kLT5zZWNvbmQtPm1TdGF0dXMgPSBCdWZmZXJTdGF0dXM6OlRSQU5TRkVSX0ZFVENIOworICAgICAgICAgICAgYXV0byBidWZmZXJJdCA9IG1CdWZmZXJQb29sLm1CdWZmZXJzLmZpbmQoYnVmZmVySWQpOworICAgICAgICAgICAgaWYgKGJ1ZmZlckl0ICE9IG1CdWZmZXJQb29sLm1CdWZmZXJzLmVuZCgpKSB7CisgICAgICAgICAgICAgICAgbUJ1ZmZlclBvb2wubVN0YXRzLm9uQnVmZmVyRmV0Y2hlZCgpOworICAgICAgICAgICAgICAgICpoYW5kbGUgPSBidWZmZXJJdC0+c2Vjb25kLT5oYW5kbGUoKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gUmVzdWx0U3RhdHVzOjpPSzsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKyAgICBtQnVmZmVyUG9vbC5jbGVhblVwKCk7CisgICAgcmV0dXJuIFJlc3VsdFN0YXR1czo6Q1JJVElDQUxfRVJST1I7Cit9CisKK3ZvaWQgQWNjZXNzb3I6OkltcGw6OmNsZWFuVXAoYm9vbCBjbGVhckNhY2hlKSB7CisgICAgLy8gdHJhbnNhY3Rpb24gdGltZW91dCwgYnVmZmVyIGNhY2hlaW5nIFRUTCBoYW5kbGluZworICAgIHN0ZDo6bG9ja19ndWFyZDxzdGQ6Om11dGV4PiBsb2NrKG1CdWZmZXJQb29sLm1NdXRleCk7CisgICAgbUJ1ZmZlclBvb2wucHJvY2Vzc1N0YXR1c01lc3NhZ2VzKCk7CisgICAgbUJ1ZmZlclBvb2wuY2xlYW5VcChjbGVhckNhY2hlKTsKK30KKwordm9pZCBBY2Nlc3Nvcjo6SW1wbDo6Zmx1c2goKSB7CisgICAgc3RkOjpsb2NrX2d1YXJkPHN0ZDo6bXV0ZXg+IGxvY2sobUJ1ZmZlclBvb2wubU11dGV4KTsKKyAgICBtQnVmZmVyUG9vbC5wcm9jZXNzU3RhdHVzTWVzc2FnZXMoKTsKKyAgICBtQnVmZmVyUG9vbC5mbHVzaChzaGFyZWRfZnJvbV90aGlzKCkpOworfQorCit2b2lkIEFjY2Vzc29yOjpJbXBsOjpoYW5kbGVJbnZhbGlkYXRlQWNrKCkgeworICAgIHN0ZDo6bG9ja19ndWFyZDxzdGQ6Om11dGV4PiBsb2NrKG1CdWZmZXJQb29sLm1NdXRleCk7CisgICAgbUJ1ZmZlclBvb2wucHJvY2Vzc1N0YXR1c01lc3NhZ2VzKCk7CisgICAgbUJ1ZmZlclBvb2wubUludmFsaWRhdGlvbi5vbkhhbmRsZUFjaygpOworfQorCitib29sIEFjY2Vzc29yOjpJbXBsOjppc1ZhbGlkKCkgeworICAgIHJldHVybiBtQnVmZmVyUG9vbC5pc1ZhbGlkKCk7Cit9CisKK0FjY2Vzc29yOjpJbXBsOjpJbXBsOjpCdWZmZXJQb29sOjpCdWZmZXJQb29sKCkKKyAgICA6IG1UaW1lc3RhbXBVcyhnZXRUaW1lc3RhbXBOb3coKSksCisgICAgICBtTGFzdENsZWFuVXBVcyhtVGltZXN0YW1wVXMpLAorICAgICAgbUxhc3RMb2dVcyhtVGltZXN0YW1wVXMpLAorICAgICAgbVNlcSgwKSwKKyAgICAgIG1TdGFydFNlcSgwKSB7CisgICAgbVZhbGlkID0gbUludmFsaWRhdGlvbkNoYW5uZWwuaXNWYWxpZCgpOworfQorCisKKy8vIFN0YXRpc3RpY3MgaGVscGVyCit0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBTPgoraW50IHBlcmNlbnRhZ2UoVCBiYXNlLCBTIHRvdGFsKSB7CisgICAgcmV0dXJuIGludCh0b3RhbCA/IDAuNSArIDEwMC4gKiBzdGF0aWNfY2FzdDxTPihiYXNlKSAvIHRvdGFsIDogMCk7Cit9CisKK3N0ZDo6YXRvbWljPHN0ZDo6dWludDMyX3Q+IEFjY2Vzc29yOjpJbXBsOjpCdWZmZXJQb29sOjpJbnZhbGlkYXRpb246OnNJbnZTZXFJZCgwKTsKKworQWNjZXNzb3I6OkltcGw6OkltcGw6OkJ1ZmZlclBvb2w6On5CdWZmZXJQb29sKCkgeworICAgIHN0ZDo6bG9ja19ndWFyZDxzdGQ6Om11dGV4PiBsb2NrKG1NdXRleCk7CisgICAgQUxPR0QoIkRlc3RydWN0aW9uIC0gYnVmZmVycG9vbCAlcCAiCisgICAgICAgICAgImNhY2hlZDogJXp1LyV6dU0sICV6dS8lZCUlIGluIHVzZTsgIgorICAgICAgICAgICJhbGxvY3M6ICV6dSwgJWQlJSByZWN5Y2xlZDsgIgorICAgICAgICAgICJ0cmFuc2ZlcnM6ICV6dSwgJWQlJSB1bmZldGNlZCIsCisgICAgICAgICAgdGhpcywgbVN0YXRzLm1CdWZmZXJzQ2FjaGVkLCBtU3RhdHMubVNpemVDYWNoZWQgPj4gMjAsCisgICAgICAgICAgbVN0YXRzLm1CdWZmZXJzSW5Vc2UsIHBlcmNlbnRhZ2UobVN0YXRzLm1CdWZmZXJzSW5Vc2UsIG1TdGF0cy5tQnVmZmVyc0NhY2hlZCksCisgICAgICAgICAgbVN0YXRzLm1Ub3RhbEFsbG9jYXRpb25zLCBwZXJjZW50YWdlKG1TdGF0cy5tVG90YWxSZWN5Y2xlcywgbVN0YXRzLm1Ub3RhbEFsbG9jYXRpb25zKSwKKyAgICAgICAgICBtU3RhdHMubVRvdGFsVHJhbnNmZXJzLAorICAgICAgICAgIHBlcmNlbnRhZ2UobVN0YXRzLm1Ub3RhbFRyYW5zZmVycyAtIG1TdGF0cy5tVG90YWxGZXRjaGVzLCBtU3RhdHMubVRvdGFsVHJhbnNmZXJzKSk7Cit9CisKK3ZvaWQgQWNjZXNzb3I6OkltcGw6OkJ1ZmZlclBvb2w6OkludmFsaWRhdGlvbjo6b25Db25uZWN0KAorICAgICAgICBDb25uZWN0aW9uSWQgY29uSWQsIGNvbnN0IHNwPElPYnNlcnZlcj4mIG9ic2VydmVyKSB7CisgICAgbUFja3NbY29uSWRdID0gbUludmFsaWRhdGlvbklkOyAvLyBzdGFydHMgZnJvbSBjdXJyZW50IGludmFsaWRhdGlvbklkCisgICAgbU9ic2VydmVycy5pbnNlcnQoc3RkOjptYWtlX3BhaXIoY29uSWQsIG9ic2VydmVyKSk7Cit9CisKK3ZvaWQgQWNjZXNzb3I6OkltcGw6OkJ1ZmZlclBvb2w6OkludmFsaWRhdGlvbjo6b25DbG9zZShDb25uZWN0aW9uSWQgY29uSWQpIHsKKyAgICBtQWNrcy5lcmFzZShjb25JZCk7CisgICAgbU9ic2VydmVycy5lcmFzZShjb25JZCk7Cit9CisKK3ZvaWQgQWNjZXNzb3I6OkltcGw6OkJ1ZmZlclBvb2w6OkludmFsaWRhdGlvbjo6b25BY2soCisgICAgICAgIENvbm5lY3Rpb25JZCBjb25JZCwKKyAgICAgICAgdWludDMyX3QgbXNnSWQpIHsKKyAgICBhdXRvIGl0ID0gbUFja3MuZmluZChjb25JZCk7CisgICAgaWYgKGl0ID09IG1BY2tzLmVuZCgpKSB7CisgICAgICAgIEFMT0dXKCJBQ0sgZnJvbSBpbmNvbnNpc3RlbnQgY29ubmVjdGlvbiEgJWxsZCIsIChsb25nIGxvbmcpY29uSWQpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIGlmIChpc01lc3NhZ2VMYXRlcihtc2dJZCwgaXQtPnNlY29uZCkpIHsKKyAgICAgICAgbUFja3NbY29uSWRdID0gbXNnSWQ7CisgICAgfQorfQorCit2b2lkIEFjY2Vzc29yOjpJbXBsOjpCdWZmZXJQb29sOjpJbnZhbGlkYXRpb246Om9uQnVmZmVySW52YWxpZGF0ZWQoCisgICAgICAgIEJ1ZmZlcklkIGJ1ZmZlcklkLAorICAgICAgICBCdWZmZXJJbnZhbGlkYXRpb25DaGFubmVsICZjaGFubmVsKSB7CisgICAgZm9yIChhdXRvIGl0ID0gbVBlbmRpbmdzLmJlZ2luKCk7IGl0ICE9IG1QZW5kaW5ncy5lbmQoKTspIHsKKyAgICAgICAgaWYgKGl0LT5pc0ludmFsaWRhdGVkKGJ1ZmZlcklkKSkgeworICAgICAgICAgICAgdWludDMyX3QgbXNnSWQgPSAwOworICAgICAgICAgICAgaWYgKGl0LT5tTmVlZHNBY2spIHsKKyAgICAgICAgICAgICAgICBtc2dJZCA9ICsrbUludmFsaWRhdGlvbklkOworICAgICAgICAgICAgICAgIGlmIChtc2dJZCA9PSAwKSB7CisgICAgICAgICAgICAgICAgICAgIC8vIHdyYXAgaGFwcGVucworICAgICAgICAgICAgICAgICAgICBtc2dJZCA9ICsrbUludmFsaWRhdGlvbklkOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGNoYW5uZWwucG9zdEludmFsaWRhdGlvbihtc2dJZCwgaXQtPm1Gcm9tLCBpdC0+bVRvKTsKKyAgICAgICAgICAgIGl0ID0gbVBlbmRpbmdzLmVyYXNlKGl0KTsKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB9CisgICAgICAgICsraXQ7CisgICAgfQorfQorCit2b2lkIEFjY2Vzc29yOjpJbXBsOjpCdWZmZXJQb29sOjpJbnZhbGlkYXRpb246Om9uSW52YWxpZGF0aW9uUmVxdWVzdCgKKyAgICAgICAgYm9vbCBuZWVkc0FjaywKKyAgICAgICAgdWludDMyX3QgZnJvbSwKKyAgICAgICAgdWludDMyX3QgdG8sCisgICAgICAgIHNpemVfdCBsZWZ0LAorICAgICAgICBCdWZmZXJJbnZhbGlkYXRpb25DaGFubmVsICZjaGFubmVsLAorICAgICAgICBjb25zdCBzdGQ6OnNoYXJlZF9wdHI8QWNjZXNzb3I6OkltcGw+ICZpbXBsKSB7CisgICAgICAgIHVpbnQzMl90IG1zZ0lkID0gMDsKKyAgICBpZiAobmVlZHNBY2spIHsKKyAgICAgICAgbXNnSWQgPSArK21JbnZhbGlkYXRpb25JZDsKKyAgICAgICAgaWYgKG1zZ0lkID09IDApIHsKKyAgICAgICAgICAgIC8vIHdyYXAgaGFwcGVucworICAgICAgICAgICAgbXNnSWQgPSArK21JbnZhbGlkYXRpb25JZDsKKyAgICAgICAgfQorICAgIH0KKyAgICBBTE9HVigiYnVmZmVycG9vbCBpbnZhbGlkYXRpb24gcmVxdWVzdGVkIGFuZCBxdWV1ZWQiKTsKKyAgICBpZiAobGVmdCA9PSAwKSB7CisgICAgICAgIGNoYW5uZWwucG9zdEludmFsaWRhdGlvbihtc2dJZCwgZnJvbSwgdG8pOworICAgIH0gZWxzZSB7CisgICAgICAgIC8vIFRPRE86IHNlbmRpbmcgaGludCBtZXNzYWdlPworICAgICAgICBBTE9HVigiYnVmZmVycG9vbCBpbnZhbGlkYXRpb24gcmVxdWVzdGVkIGFuZCBwZW5kaW5nIik7CisgICAgICAgIFBlbmRpbmcgcGVuZGluZyhuZWVkc0FjaywgZnJvbSwgdG8sIGxlZnQsIGltcGwpOworICAgICAgICBtUGVuZGluZ3MucHVzaF9iYWNrKHBlbmRpbmcpOworICAgIH0KKyAgICBzSW52YWxpZGF0b3ItPmFkZEFjY2Vzc29yKG1JZCwgaW1wbCk7Cit9CisKK3ZvaWQgQWNjZXNzb3I6OkltcGw6OkJ1ZmZlclBvb2w6OkludmFsaWRhdGlvbjo6b25IYW5kbGVBY2soKSB7CisgICAgaWYgKG1JbnZhbGlkYXRpb25JZCAhPSAwKSB7CisgICAgICAgIHN0ZDo6c2V0PGludD4gZGVhZHM7CisgICAgICAgIGZvciAoYXV0byBpdCA9IG1BY2tzLmJlZ2luKCk7IGl0ICE9IG1BY2tzLmVuZCgpOyArK2l0KSB7CisgICAgICAgICAgICBpZiAoaXQtPnNlY29uZCAhPSBtSW52YWxpZGF0aW9uSWQpIHsKKyAgICAgICAgICAgICAgICBjb25zdCBzcDxJT2JzZXJ2ZXI+IG9ic2VydmVyID0gbU9ic2VydmVyc1tpdC0+Zmlyc3RdOworICAgICAgICAgICAgICAgIGlmIChvYnNlcnZlcikgeworICAgICAgICAgICAgICAgICAgICBBTE9HVigiY29ubmVjdGlvbiAlbGxkIGNhbGwgb2JzZXJ2ZXIgKCV1OiAldSkiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAobG9uZyBsb25nKWl0LT5maXJzdCwgaXQtPnNlY29uZCwgbUludmFsaWRhdGlvbklkKTsKKyAgICAgICAgICAgICAgICAgICAgUmV0dXJuPHZvaWQ+IHRyYW5zUmVzdWx0ID0gb2JzZXJ2ZXItPm9uTWVzc2FnZShpdC0+Zmlyc3QsIG1JbnZhbGlkYXRpb25JZCk7CisgICAgICAgICAgICAgICAgICAgICh2b2lkKSB0cmFuc1Jlc3VsdDsKKyAgICAgICAgICAgICAgICAgICAgLy8gTi5COiBpZ25vcmUgcG9zc2liaWxpdHkgb2Ygb25NZXNzYWdlIG9uZXdheSBjYWxsIGJlaW5nCisgICAgICAgICAgICAgICAgICAgIC8vIGxvc3QuCisgICAgICAgICAgICAgICAgICAgIGl0LT5zZWNvbmQgPSBtSW52YWxpZGF0aW9uSWQ7CisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgQUxPR1YoImJ1ZmZlcnBvb2wgb2JzZXJ2ZXIgZGllZCAlbGxkIiwgKGxvbmcgbG9uZylpdC0+Zmlyc3QpOworICAgICAgICAgICAgICAgICAgICBkZWFkcy5pbnNlcnQoaXQtPmZpcnN0KTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgaWYgKGRlYWRzLnNpemUoKSA+IDApIHsKKyAgICAgICAgICAgIGZvciAoYXV0byBpdCA9IGRlYWRzLmJlZ2luKCk7IGl0ICE9IGRlYWRzLmVuZCgpOyArK2l0KSB7CisgICAgICAgICAgICAgICAgb25DbG9zZSgqaXQpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorICAgIGlmIChtUGVuZGluZ3Muc2l6ZSgpID09IDApIHsKKyAgICAgICAgLy8gQWxsIGludmFsaWRhdGlvbiBJZHMgYXJlIHN5bmNlZCBhbmQgbm8gbW9yZSBwZW5kaW5nIGludmFsaWRhdGlvbnMuCisgICAgICAgIHNJbnZhbGlkYXRvci0+ZGVsQWNjZXNzb3IobUlkKTsKKyAgICB9Cit9CisKK2Jvb2wgQWNjZXNzb3I6OkltcGw6OkJ1ZmZlclBvb2w6OmhhbmRsZU93bkJ1ZmZlcigKKyAgICAgICAgQ29ubmVjdGlvbklkIGNvbm5lY3Rpb25JZCwgQnVmZmVySWQgYnVmZmVySWQpIHsKKworICAgIGJvb2wgYWRkZWQgPSBpbnNlcnQoJm1Vc2luZ0J1ZmZlcnMsIGNvbm5lY3Rpb25JZCwgYnVmZmVySWQpOworICAgIGlmIChhZGRlZCkgeworICAgICAgICBhdXRvIGl0ZXIgPSBtQnVmZmVycy5maW5kKGJ1ZmZlcklkKTsKKyAgICAgICAgaXRlci0+c2Vjb25kLT5tT3duZXJDb3VudCsrOworICAgIH0KKyAgICBpbnNlcnQoJm1Vc2luZ0Nvbm5lY3Rpb25zLCBidWZmZXJJZCwgY29ubmVjdGlvbklkKTsKKyAgICByZXR1cm4gYWRkZWQ7Cit9CisKK2Jvb2wgQWNjZXNzb3I6OkltcGw6OkJ1ZmZlclBvb2w6OmhhbmRsZVJlbGVhc2VCdWZmZXIoCisgICAgICAgIENvbm5lY3Rpb25JZCBjb25uZWN0aW9uSWQsIEJ1ZmZlcklkIGJ1ZmZlcklkKSB7CisgICAgYm9vbCBkZWxldGVkID0gZXJhc2UoJm1Vc2luZ0J1ZmZlcnMsIGNvbm5lY3Rpb25JZCwgYnVmZmVySWQpOworICAgIGlmIChkZWxldGVkKSB7CisgICAgICAgIGF1dG8gaXRlciA9IG1CdWZmZXJzLmZpbmQoYnVmZmVySWQpOworICAgICAgICBpdGVyLT5zZWNvbmQtPm1Pd25lckNvdW50LS07CisgICAgICAgIGlmIChpdGVyLT5zZWNvbmQtPm1Pd25lckNvdW50ID09IDAgJiYKKyAgICAgICAgICAgICAgICBpdGVyLT5zZWNvbmQtPm1UcmFuc2FjdGlvbkNvdW50ID09IDApIHsKKyAgICAgICAgICAgIGlmICghaXRlci0+c2Vjb25kLT5tSW52YWxpZGF0ZWQpIHsKKyAgICAgICAgICAgICAgICBtU3RhdHMub25CdWZmZXJVbnVzZWQoaXRlci0+c2Vjb25kLT5tQWxsb2NTaXplKTsKKyAgICAgICAgICAgICAgICBtRnJlZUJ1ZmZlcnMuaW5zZXJ0KGJ1ZmZlcklkKTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgbVN0YXRzLm9uQnVmZmVyVW51c2VkKGl0ZXItPnNlY29uZC0+bUFsbG9jU2l6ZSk7CisgICAgICAgICAgICAgICAgbVN0YXRzLm9uQnVmZmVyRXZpY3RlZChpdGVyLT5zZWNvbmQtPm1BbGxvY1NpemUpOworICAgICAgICAgICAgICAgIG1CdWZmZXJzLmVyYXNlKGl0ZXIpOworICAgICAgICAgICAgICAgIG1JbnZhbGlkYXRpb24ub25CdWZmZXJJbnZhbGlkYXRlZChidWZmZXJJZCwgbUludmFsaWRhdGlvbkNoYW5uZWwpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorICAgIGVyYXNlKCZtVXNpbmdDb25uZWN0aW9ucywgYnVmZmVySWQsIGNvbm5lY3Rpb25JZCk7CisgICAgQUxPR1YoInJlbGVhc2UgYnVmZmVyICV1IDogJWQiLCBidWZmZXJJZCwgZGVsZXRlZCk7CisgICAgcmV0dXJuIGRlbGV0ZWQ7Cit9CisKK2Jvb2wgQWNjZXNzb3I6OkltcGw6OkJ1ZmZlclBvb2w6OmhhbmRsZVRyYW5zZmVyVG8oY29uc3QgQnVmZmVyU3RhdHVzTWVzc2FnZSAmbWVzc2FnZSkgeworICAgIGF1dG8gY29tcGxldGVkID0gbUNvbXBsZXRlZFRyYW5zYWN0aW9ucy5maW5kKAorICAgICAgICAgICAgbWVzc2FnZS50cmFuc2FjdGlvbklkKTsKKyAgICBpZiAoY29tcGxldGVkICE9IG1Db21wbGV0ZWRUcmFuc2FjdGlvbnMuZW5kKCkpIHsKKyAgICAgICAgLy8gYWxyZWFkeSBjb21wbGV0ZWQKKyAgICAgICAgbUNvbXBsZXRlZFRyYW5zYWN0aW9ucy5lcmFzZShjb21wbGV0ZWQpOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgLy8gdGhlIGJ1ZmZlciBzaG91bGQgZXhpc3QgYW5kIGJlIG93bmVkLgorICAgIGF1dG8gYnVmZmVySXRlciA9IG1CdWZmZXJzLmZpbmQobWVzc2FnZS5idWZmZXJJZCk7CisgICAgaWYgKGJ1ZmZlckl0ZXIgPT0gbUJ1ZmZlcnMuZW5kKCkgfHwKKyAgICAgICAgICAgICFjb250YWlucygmbVVzaW5nQnVmZmVycywgbWVzc2FnZS5jb25uZWN0aW9uSWQsIG1lc3NhZ2UuYnVmZmVySWQpKSB7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgICAgYXV0byBmb3VuZCA9IG1UcmFuc2FjdGlvbnMuZmluZChtZXNzYWdlLnRyYW5zYWN0aW9uSWQpOworICAgIGlmIChmb3VuZCAhPSBtVHJhbnNhY3Rpb25zLmVuZCgpKSB7CisgICAgICAgIC8vIHRyYW5zZmVyX2Zyb20gd2FzIHJlY2VpdmVkIGVhcmxpZXIuCisgICAgICAgIGZvdW5kLT5zZWNvbmQtPm1TZW5kZXIgPSBtZXNzYWdlLmNvbm5lY3Rpb25JZDsKKyAgICAgICAgZm91bmQtPnNlY29uZC0+bVNlbmRlclZhbGlkYXRlZCA9IHRydWU7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyAgICAvLyBUT0RPOiB2ZXJpZnkgdGhlcmUgaXMgdGFyZ2V0IGNvbm5lY3Rpb24gSWQKKyAgICBtU3RhdHMub25CdWZmZXJTZW50KCk7CisgICAgbVRyYW5zYWN0aW9ucy5pbnNlcnQoc3RkOjptYWtlX3BhaXIoCisgICAgICAgICAgICBtZXNzYWdlLnRyYW5zYWN0aW9uSWQsCisgICAgICAgICAgICBzdGQ6Om1ha2VfdW5pcXVlPFRyYW5zYWN0aW9uU3RhdHVzPihtZXNzYWdlLCBtVGltZXN0YW1wVXMpKSk7CisgICAgaW5zZXJ0KCZtUGVuZGluZ1RyYW5zYWN0aW9ucywgbWVzc2FnZS50YXJnZXRDb25uZWN0aW9uSWQsCisgICAgICAgICAgIG1lc3NhZ2UudHJhbnNhY3Rpb25JZCk7CisgICAgYnVmZmVySXRlci0+c2Vjb25kLT5tVHJhbnNhY3Rpb25Db3VudCsrOworICAgIHJldHVybiB0cnVlOworfQorCitib29sIEFjY2Vzc29yOjpJbXBsOjpCdWZmZXJQb29sOjpoYW5kbGVUcmFuc2ZlckZyb20oY29uc3QgQnVmZmVyU3RhdHVzTWVzc2FnZSAmbWVzc2FnZSkgeworICAgIGF1dG8gZm91bmQgPSBtVHJhbnNhY3Rpb25zLmZpbmQobWVzc2FnZS50cmFuc2FjdGlvbklkKTsKKyAgICBpZiAoZm91bmQgPT0gbVRyYW5zYWN0aW9ucy5lbmQoKSkgeworICAgICAgICAvLyBUT0RPOiBpcyBpdCBmZWFzaWJsZSB0byBjaGVjayBvd25lcnNoaXAgaGVyZT8KKyAgICAgICAgbVN0YXRzLm9uQnVmZmVyU2VudCgpOworICAgICAgICBtVHJhbnNhY3Rpb25zLmluc2VydChzdGQ6Om1ha2VfcGFpcigKKyAgICAgICAgICAgICAgICBtZXNzYWdlLnRyYW5zYWN0aW9uSWQsCisgICAgICAgICAgICAgICAgc3RkOjptYWtlX3VuaXF1ZTxUcmFuc2FjdGlvblN0YXR1cz4obWVzc2FnZSwgbVRpbWVzdGFtcFVzKSkpOworICAgICAgICBpbnNlcnQoJm1QZW5kaW5nVHJhbnNhY3Rpb25zLCBtZXNzYWdlLmNvbm5lY3Rpb25JZCwKKyAgICAgICAgICAgICAgIG1lc3NhZ2UudHJhbnNhY3Rpb25JZCk7CisgICAgICAgIGF1dG8gYnVmZmVySXRlciA9IG1CdWZmZXJzLmZpbmQobWVzc2FnZS5idWZmZXJJZCk7CisgICAgICAgIGJ1ZmZlckl0ZXItPnNlY29uZC0+bVRyYW5zYWN0aW9uQ291bnQrKzsKKyAgICB9IGVsc2UgeworICAgICAgICBpZiAobWVzc2FnZS5jb25uZWN0aW9uSWQgPT0gZm91bmQtPnNlY29uZC0+bVJlY2VpdmVyKSB7CisgICAgICAgICAgICBmb3VuZC0+c2Vjb25kLT5tU3RhdHVzID0gQnVmZmVyU3RhdHVzOjpUUkFOU0ZFUl9GUk9NOworICAgICAgICB9CisgICAgfQorICAgIHJldHVybiB0cnVlOworfQorCitib29sIEFjY2Vzc29yOjpJbXBsOjpCdWZmZXJQb29sOjpoYW5kbGVUcmFuc2ZlclJlc3VsdChjb25zdCBCdWZmZXJTdGF0dXNNZXNzYWdlICZtZXNzYWdlKSB7CisgICAgYXV0byBmb3VuZCA9IG1UcmFuc2FjdGlvbnMuZmluZChtZXNzYWdlLnRyYW5zYWN0aW9uSWQpOworICAgIGlmIChmb3VuZCAhPSBtVHJhbnNhY3Rpb25zLmVuZCgpKSB7CisgICAgICAgIGJvb2wgZGVsZXRlZCA9IGVyYXNlKCZtUGVuZGluZ1RyYW5zYWN0aW9ucywgbWVzc2FnZS5jb25uZWN0aW9uSWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2UudHJhbnNhY3Rpb25JZCk7CisgICAgICAgIGlmIChkZWxldGVkKSB7CisgICAgICAgICAgICBpZiAoIWZvdW5kLT5zZWNvbmQtPm1TZW5kZXJWYWxpZGF0ZWQpIHsKKyAgICAgICAgICAgICAgICBtQ29tcGxldGVkVHJhbnNhY3Rpb25zLmluc2VydChtZXNzYWdlLnRyYW5zYWN0aW9uSWQpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgYXV0byBidWZmZXJJdGVyID0gbUJ1ZmZlcnMuZmluZChtZXNzYWdlLmJ1ZmZlcklkKTsKKyAgICAgICAgICAgIGlmIChtZXNzYWdlLm5ld1N0YXR1cyA9PSBCdWZmZXJTdGF0dXM6OlRSQU5TRkVSX09LKSB7CisgICAgICAgICAgICAgICAgaGFuZGxlT3duQnVmZmVyKG1lc3NhZ2UuY29ubmVjdGlvbklkLCBtZXNzYWdlLmJ1ZmZlcklkKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGJ1ZmZlckl0ZXItPnNlY29uZC0+bVRyYW5zYWN0aW9uQ291bnQtLTsKKyAgICAgICAgICAgIGlmIChidWZmZXJJdGVyLT5zZWNvbmQtPm1Pd25lckNvdW50ID09IDAKKyAgICAgICAgICAgICAgICAmJiBidWZmZXJJdGVyLT5zZWNvbmQtPm1UcmFuc2FjdGlvbkNvdW50ID09IDApIHsKKyAgICAgICAgICAgICAgICBpZiAoIWJ1ZmZlckl0ZXItPnNlY29uZC0+bUludmFsaWRhdGVkKSB7CisgICAgICAgICAgICAgICAgICAgIG1TdGF0cy5vbkJ1ZmZlclVudXNlZChidWZmZXJJdGVyLT5zZWNvbmQtPm1BbGxvY1NpemUpOworICAgICAgICAgICAgICAgICAgICBtRnJlZUJ1ZmZlcnMuaW5zZXJ0KG1lc3NhZ2UuYnVmZmVySWQpOworICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIG1TdGF0cy5vbkJ1ZmZlclVudXNlZChidWZmZXJJdGVyLT5zZWNvbmQtPm1BbGxvY1NpemUpOworICAgICAgICAgICAgICAgICAgICBtU3RhdHMub25CdWZmZXJFdmljdGVkKGJ1ZmZlckl0ZXItPnNlY29uZC0+bUFsbG9jU2l6ZSk7CisgICAgICAgICAgICAgICAgICAgIG1CdWZmZXJzLmVyYXNlKGJ1ZmZlckl0ZXIpOworICAgICAgICAgICAgICAgICAgICBtSW52YWxpZGF0aW9uLm9uQnVmZmVySW52YWxpZGF0ZWQobWVzc2FnZS5idWZmZXJJZCwgbUludmFsaWRhdGlvbkNoYW5uZWwpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIG1UcmFuc2FjdGlvbnMuZXJhc2UoZm91bmQpOworICAgICAgICB9CisgICAgICAgIEFMT0dWKCJ0cmFuc2ZlciBmaW5pc2hlZCAlbGx1ICV1IC0gJWQiLCAodW5zaWduZWQgbG9uZyBsb25nKW1lc3NhZ2UudHJhbnNhY3Rpb25JZCwKKyAgICAgICAgICAgICAgbWVzc2FnZS5idWZmZXJJZCwgZGVsZXRlZCk7CisgICAgICAgIHJldHVybiBkZWxldGVkOworICAgIH0KKyAgICBBTE9HVigidHJhbnNmZXIgbm90IGZvdW5kICVsbHUgJXUiLCAodW5zaWduZWQgbG9uZyBsb25nKW1lc3NhZ2UudHJhbnNhY3Rpb25JZCwKKyAgICAgICAgICBtZXNzYWdlLmJ1ZmZlcklkKTsKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK3ZvaWQgQWNjZXNzb3I6OkltcGw6OkJ1ZmZlclBvb2w6OnByb2Nlc3NTdGF0dXNNZXNzYWdlcygpIHsKKyAgICBzdGQ6OnZlY3RvcjxCdWZmZXJTdGF0dXNNZXNzYWdlPiBtZXNzYWdlczsKKyAgICBtT2JzZXJ2ZXIuZ2V0QnVmZmVyU3RhdHVzQ2hhbmdlcyhtZXNzYWdlcyk7CisgICAgbVRpbWVzdGFtcFVzID0gZ2V0VGltZXN0YW1wTm93KCk7CisgICAgZm9yIChCdWZmZXJTdGF0dXNNZXNzYWdlJiBtZXNzYWdlOiBtZXNzYWdlcykgeworICAgICAgICBib29sIHJldCA9IGZhbHNlOworICAgICAgICBzd2l0Y2ggKG1lc3NhZ2UubmV3U3RhdHVzKSB7CisgICAgICAgICAgICBjYXNlIEJ1ZmZlclN0YXR1czo6Tk9UX1VTRUQ6CisgICAgICAgICAgICAgICAgcmV0ID0gaGFuZGxlUmVsZWFzZUJ1ZmZlcigKKyAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2UuY29ubmVjdGlvbklkLCBtZXNzYWdlLmJ1ZmZlcklkKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgQnVmZmVyU3RhdHVzOjpVU0VEOgorICAgICAgICAgICAgICAgIC8vIG5vdCBoYXBwZW5pbmcKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgQnVmZmVyU3RhdHVzOjpUUkFOU0ZFUl9UTzoKKyAgICAgICAgICAgICAgICByZXQgPSBoYW5kbGVUcmFuc2ZlclRvKG1lc3NhZ2UpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBCdWZmZXJTdGF0dXM6OlRSQU5TRkVSX0ZST006CisgICAgICAgICAgICAgICAgcmV0ID0gaGFuZGxlVHJhbnNmZXJGcm9tKG1lc3NhZ2UpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBCdWZmZXJTdGF0dXM6OlRSQU5TRkVSX1RJTUVPVVQ6CisgICAgICAgICAgICAgICAgLy8gVE9ETworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBCdWZmZXJTdGF0dXM6OlRSQU5TRkVSX0xPU1Q6CisgICAgICAgICAgICAgICAgLy8gVE9ETworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBCdWZmZXJTdGF0dXM6OlRSQU5TRkVSX0ZFVENIOgorICAgICAgICAgICAgICAgIC8vIG5vdCBoYXBwZW5pbmcKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgQnVmZmVyU3RhdHVzOjpUUkFOU0ZFUl9PSzoKKyAgICAgICAgICAgIGNhc2UgQnVmZmVyU3RhdHVzOjpUUkFOU0ZFUl9FUlJPUjoKKyAgICAgICAgICAgICAgICByZXQgPSBoYW5kbGVUcmFuc2ZlclJlc3VsdChtZXNzYWdlKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgQnVmZmVyU3RhdHVzOjpJTlZBTElEQVRJT05fQUNLOgorICAgICAgICAgICAgICAgIG1JbnZhbGlkYXRpb24ub25BY2sobWVzc2FnZS5jb25uZWN0aW9uSWQsIG1lc3NhZ2UuYnVmZmVySWQpOworICAgICAgICAgICAgICAgIHJldCA9IHRydWU7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgaWYgKHJldCA9PSBmYWxzZSkgeworICAgICAgICAgICAgQUxPR1coImJ1ZmZlciBzdGF0dXMgbWVzc2FnZSBwcm9jZXNzaW5nIGZhaWx1cmUgLSBtZXNzYWdlIDogJWQgY29ubmVjdGlvbiA6ICVsbGQiLAorICAgICAgICAgICAgICAgICAgbWVzc2FnZS5uZXdTdGF0dXMsIChsb25nIGxvbmcpbWVzc2FnZS5jb25uZWN0aW9uSWQpOworICAgICAgICB9CisgICAgfQorICAgIG1lc3NhZ2VzLmNsZWFyKCk7Cit9CisKK2Jvb2wgQWNjZXNzb3I6OkltcGw6OkJ1ZmZlclBvb2w6OmhhbmRsZUNsb3NlKENvbm5lY3Rpb25JZCBjb25uZWN0aW9uSWQpIHsKKyAgICAvLyBDbGVhbmluZyBidWZmZXJzCisgICAgYXV0byBidWZmZXJzID0gbVVzaW5nQnVmZmVycy5maW5kKGNvbm5lY3Rpb25JZCk7CisgICAgaWYgKGJ1ZmZlcnMgIT0gbVVzaW5nQnVmZmVycy5lbmQoKSkgeworICAgICAgICBmb3IgKGNvbnN0IEJ1ZmZlcklkJiBidWZmZXJJZCA6IGJ1ZmZlcnMtPnNlY29uZCkgeworICAgICAgICAgICAgYm9vbCBkZWxldGVkID0gZXJhc2UoJm1Vc2luZ0Nvbm5lY3Rpb25zLCBidWZmZXJJZCwgY29ubmVjdGlvbklkKTsKKyAgICAgICAgICAgIGlmIChkZWxldGVkKSB7CisgICAgICAgICAgICAgICAgYXV0byBidWZmZXJJdGVyID0gbUJ1ZmZlcnMuZmluZChidWZmZXJJZCk7CisgICAgICAgICAgICAgICAgYnVmZmVySXRlci0+c2Vjb25kLT5tT3duZXJDb3VudC0tOworICAgICAgICAgICAgICAgIGlmIChidWZmZXJJdGVyLT5zZWNvbmQtPm1Pd25lckNvdW50ID09IDAgJiYKKyAgICAgICAgICAgICAgICAgICAgICAgIGJ1ZmZlckl0ZXItPnNlY29uZC0+bVRyYW5zYWN0aW9uQ291bnQgPT0gMCkgeworICAgICAgICAgICAgICAgICAgICAvLyBUT0RPOiBoYW5kbGUgZnJlZWJ1ZmZlciBpbnNlcnQgZmFpbAorICAgICAgICAgICAgICAgICAgICBpZiAoIWJ1ZmZlckl0ZXItPnNlY29uZC0+bUludmFsaWRhdGVkKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBtU3RhdHMub25CdWZmZXJVbnVzZWQoYnVmZmVySXRlci0+c2Vjb25kLT5tQWxsb2NTaXplKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIG1GcmVlQnVmZmVycy5pbnNlcnQoYnVmZmVySWQpOworICAgICAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICAgICAgbVN0YXRzLm9uQnVmZmVyVW51c2VkKGJ1ZmZlckl0ZXItPnNlY29uZC0+bUFsbG9jU2l6ZSk7CisgICAgICAgICAgICAgICAgICAgICAgICBtU3RhdHMub25CdWZmZXJFdmljdGVkKGJ1ZmZlckl0ZXItPnNlY29uZC0+bUFsbG9jU2l6ZSk7CisgICAgICAgICAgICAgICAgICAgICAgICBtQnVmZmVycy5lcmFzZShidWZmZXJJdGVyKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIG1JbnZhbGlkYXRpb24ub25CdWZmZXJJbnZhbGlkYXRlZChidWZmZXJJZCwgbUludmFsaWRhdGlvbkNoYW5uZWwpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIG1Vc2luZ0J1ZmZlcnMuZXJhc2UoYnVmZmVycyk7CisgICAgfQorCisgICAgLy8gQ2xlYW5pbmcgdHJhbnNhY3Rpb25zCisgICAgYXV0byBwZW5kaW5nID0gbVBlbmRpbmdUcmFuc2FjdGlvbnMuZmluZChjb25uZWN0aW9uSWQpOworICAgIGlmIChwZW5kaW5nICE9IG1QZW5kaW5nVHJhbnNhY3Rpb25zLmVuZCgpKSB7CisgICAgICAgIGZvciAoY29uc3QgVHJhbnNhY3Rpb25JZCYgdHJhbnNhY3Rpb25JZCA6IHBlbmRpbmctPnNlY29uZCkgeworICAgICAgICAgICAgYXV0byBpdGVyID0gbVRyYW5zYWN0aW9ucy5maW5kKHRyYW5zYWN0aW9uSWQpOworICAgICAgICAgICAgaWYgKGl0ZXIgIT0gbVRyYW5zYWN0aW9ucy5lbmQoKSkgeworICAgICAgICAgICAgICAgIGlmICghaXRlci0+c2Vjb25kLT5tU2VuZGVyVmFsaWRhdGVkKSB7CisgICAgICAgICAgICAgICAgICAgIG1Db21wbGV0ZWRUcmFuc2FjdGlvbnMuaW5zZXJ0KHRyYW5zYWN0aW9uSWQpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBCdWZmZXJJZCBidWZmZXJJZCA9IGl0ZXItPnNlY29uZC0+bUJ1ZmZlcklkOworICAgICAgICAgICAgICAgIGF1dG8gYnVmZmVySXRlciA9IG1CdWZmZXJzLmZpbmQoYnVmZmVySWQpOworICAgICAgICAgICAgICAgIGJ1ZmZlckl0ZXItPnNlY29uZC0+bVRyYW5zYWN0aW9uQ291bnQtLTsKKyAgICAgICAgICAgICAgICBpZiAoYnVmZmVySXRlci0+c2Vjb25kLT5tT3duZXJDb3VudCA9PSAwICYmCisgICAgICAgICAgICAgICAgICAgIGJ1ZmZlckl0ZXItPnNlY29uZC0+bVRyYW5zYWN0aW9uQ291bnQgPT0gMCkgeworICAgICAgICAgICAgICAgICAgICAvLyBUT0RPOiBoYW5kbGUgZnJlZWJ1ZmZlciBpbnNlcnQgZmFpbAorICAgICAgICAgICAgICAgICAgICBpZiAoIWJ1ZmZlckl0ZXItPnNlY29uZC0+bUludmFsaWRhdGVkKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBtU3RhdHMub25CdWZmZXJVbnVzZWQoYnVmZmVySXRlci0+c2Vjb25kLT5tQWxsb2NTaXplKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIG1GcmVlQnVmZmVycy5pbnNlcnQoYnVmZmVySWQpOworICAgICAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICAgICAgbVN0YXRzLm9uQnVmZmVyVW51c2VkKGJ1ZmZlckl0ZXItPnNlY29uZC0+bUFsbG9jU2l6ZSk7CisgICAgICAgICAgICAgICAgICAgICAgICBtU3RhdHMub25CdWZmZXJFdmljdGVkKGJ1ZmZlckl0ZXItPnNlY29uZC0+bUFsbG9jU2l6ZSk7CisgICAgICAgICAgICAgICAgICAgICAgICBtQnVmZmVycy5lcmFzZShidWZmZXJJdGVyKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIG1JbnZhbGlkYXRpb24ub25CdWZmZXJJbnZhbGlkYXRlZChidWZmZXJJZCwgbUludmFsaWRhdGlvbkNoYW5uZWwpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIG1UcmFuc2FjdGlvbnMuZXJhc2UoaXRlcik7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgQWNjZXNzb3I6OkltcGw6OkJ1ZmZlclBvb2w6OmdldEZyZWVCdWZmZXIoCisgICAgICAgIGNvbnN0IHN0ZDo6c2hhcmVkX3B0cjxCdWZmZXJQb29sQWxsb2NhdG9yPiAmYWxsb2NhdG9yLAorICAgICAgICBjb25zdCBzdGQ6OnZlY3Rvcjx1aW50OF90PiAmcGFyYW1zLCBCdWZmZXJJZCAqcElkLAorICAgICAgICBjb25zdCBuYXRpdmVfaGFuZGxlX3QqKiBoYW5kbGUpIHsKKyAgICBhdXRvIGJ1ZmZlckl0ID0gbUZyZWVCdWZmZXJzLmJlZ2luKCk7CisgICAgZm9yICg7YnVmZmVySXQgIT0gbUZyZWVCdWZmZXJzLmVuZCgpOyArK2J1ZmZlckl0KSB7CisgICAgICAgIEJ1ZmZlcklkIGJ1ZmZlcklkID0gKmJ1ZmZlckl0OworICAgICAgICBpZiAoYWxsb2NhdG9yLT5jb21wYXRpYmxlKHBhcmFtcywgbUJ1ZmZlcnNbYnVmZmVySWRdLT5tQ29uZmlnKSkgeworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICB9CisgICAgaWYgKGJ1ZmZlckl0ICE9IG1GcmVlQnVmZmVycy5lbmQoKSkgeworICAgICAgICBCdWZmZXJJZCBpZCA9ICpidWZmZXJJdDsKKyAgICAgICAgbUZyZWVCdWZmZXJzLmVyYXNlKGJ1ZmZlckl0KTsKKyAgICAgICAgbVN0YXRzLm9uQnVmZmVyUmVjeWNsZWQobUJ1ZmZlcnNbaWRdLT5tQWxsb2NTaXplKTsKKyAgICAgICAgKmhhbmRsZSA9IG1CdWZmZXJzW2lkXS0+aGFuZGxlKCk7CisgICAgICAgICpwSWQgPSBpZDsKKyAgICAgICAgQUxPR1YoInJlY3ljbGUgYSBidWZmZXIgJXUgJXAiLCBpZCwgKmhhbmRsZSk7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK1Jlc3VsdFN0YXR1cyBBY2Nlc3Nvcjo6SW1wbDo6QnVmZmVyUG9vbDo6YWRkTmV3QnVmZmVyKAorICAgICAgICBjb25zdCBzdGQ6OnNoYXJlZF9wdHI8QnVmZmVyUG9vbEFsbG9jYXRpb24+ICZhbGxvYywKKyAgICAgICAgY29uc3Qgc2l6ZV90IGFsbG9jU2l6ZSwKKyAgICAgICAgY29uc3Qgc3RkOjp2ZWN0b3I8dWludDhfdD4gJnBhcmFtcywKKyAgICAgICAgQnVmZmVySWQgKnBJZCwKKyAgICAgICAgY29uc3QgbmF0aXZlX2hhbmRsZV90KiogaGFuZGxlKSB7CisKKyAgICBCdWZmZXJJZCBidWZmZXJJZCA9IG1TZXErKzsKKyAgICBpZiAobVNlcSA9PSBDb25uZWN0aW9uOjpTWU5DX0JVRkZFUklEKSB7CisgICAgICAgIG1TZXEgPSAwOworICAgIH0KKyAgICBzdGQ6OnVuaXF1ZV9wdHI8SW50ZXJuYWxCdWZmZXI+IGJ1ZmZlciA9CisgICAgICAgICAgICBzdGQ6Om1ha2VfdW5pcXVlPEludGVybmFsQnVmZmVyPigKKyAgICAgICAgICAgICAgICAgICAgYnVmZmVySWQsIGFsbG9jLCBhbGxvY1NpemUsIHBhcmFtcyk7CisgICAgaWYgKGJ1ZmZlcikgeworICAgICAgICBhdXRvIHJlcyA9IG1CdWZmZXJzLmluc2VydChzdGQ6Om1ha2VfcGFpcigKKyAgICAgICAgICAgICAgICBidWZmZXJJZCwgc3RkOjptb3ZlKGJ1ZmZlcikpKTsKKyAgICAgICAgaWYgKHJlcy5zZWNvbmQpIHsKKyAgICAgICAgICAgIG1TdGF0cy5vbkJ1ZmZlckFsbG9jYXRlZChhbGxvY1NpemUpOworICAgICAgICAgICAgKmhhbmRsZSA9IGFsbG9jLT5oYW5kbGUoKTsKKyAgICAgICAgICAgICpwSWQgPSBidWZmZXJJZDsKKyAgICAgICAgICAgIHJldHVybiBSZXN1bHRTdGF0dXM6Ok9LOworICAgICAgICB9CisgICAgfQorICAgIHJldHVybiBSZXN1bHRTdGF0dXM6Ok5PX01FTU9SWTsKK30KKwordm9pZCBBY2Nlc3Nvcjo6SW1wbDo6QnVmZmVyUG9vbDo6Y2xlYW5VcChib29sIGNsZWFyQ2FjaGUpIHsKKyAgICBpZiAoY2xlYXJDYWNoZSB8fCBtVGltZXN0YW1wVXMgPiBtTGFzdENsZWFuVXBVcyArIGtDbGVhblVwRHVyYXRpb25VcykgeworICAgICAgICBtTGFzdENsZWFuVXBVcyA9IG1UaW1lc3RhbXBVczsKKyAgICAgICAgaWYgKG1UaW1lc3RhbXBVcyA+IG1MYXN0TG9nVXMgKyBrTG9nRHVyYXRpb25VcykgeworICAgICAgICAgICAgbUxhc3RMb2dVcyA9IG1UaW1lc3RhbXBVczsKKyAgICAgICAgICAgIEFMT0dEKCJidWZmZXJwb29sICVwIDogJXp1KCV6dSBzaXplKSB0b3RhbCBidWZmZXJzIC0gIgorICAgICAgICAgICAgICAgICAgIiV6dSglenUgc2l6ZSkgdXNlZCBidWZmZXJzIC0gJXp1LyV6dSAocmVjeWNsZS9hbGxvYykgLSAiCisgICAgICAgICAgICAgICAgICAiJXp1LyV6dSAoZmV0Y2gvdHJhbnNmZXIpIiwKKyAgICAgICAgICAgICAgICAgIHRoaXMsIG1TdGF0cy5tQnVmZmVyc0NhY2hlZCwgbVN0YXRzLm1TaXplQ2FjaGVkLAorICAgICAgICAgICAgICAgICAgbVN0YXRzLm1CdWZmZXJzSW5Vc2UsIG1TdGF0cy5tU2l6ZUluVXNlLAorICAgICAgICAgICAgICAgICAgbVN0YXRzLm1Ub3RhbFJlY3ljbGVzLCBtU3RhdHMubVRvdGFsQWxsb2NhdGlvbnMsCisgICAgICAgICAgICAgICAgICBtU3RhdHMubVRvdGFsRmV0Y2hlcywgbVN0YXRzLm1Ub3RhbFRyYW5zZmVycyk7CisgICAgICAgIH0KKyAgICAgICAgZm9yIChhdXRvIGZyZWVJdCA9IG1GcmVlQnVmZmVycy5iZWdpbigpOyBmcmVlSXQgIT0gbUZyZWVCdWZmZXJzLmVuZCgpOykgeworICAgICAgICAgICAgaWYgKCFjbGVhckNhY2hlICYmIG1TdGF0cy5tU2l6ZUNhY2hlZCA8IGtNaW5BbGxvY0J5dGVzRm9yRXZpY3Rpb24KKyAgICAgICAgICAgICAgICAgICAgJiYgbUJ1ZmZlcnMuc2l6ZSgpIDwga01pbkJ1ZmZlckNvdW50Rm9yRXZpY3Rpb24pIHsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGF1dG8gaXQgPSBtQnVmZmVycy5maW5kKCpmcmVlSXQpOworICAgICAgICAgICAgaWYgKGl0ICE9IG1CdWZmZXJzLmVuZCgpICYmCisgICAgICAgICAgICAgICAgICAgIGl0LT5zZWNvbmQtPm1Pd25lckNvdW50ID09IDAgJiYgaXQtPnNlY29uZC0+bVRyYW5zYWN0aW9uQ291bnQgPT0gMCkgeworICAgICAgICAgICAgICAgIG1TdGF0cy5vbkJ1ZmZlckV2aWN0ZWQoaXQtPnNlY29uZC0+bUFsbG9jU2l6ZSk7CisgICAgICAgICAgICAgICAgbUJ1ZmZlcnMuZXJhc2UoaXQpOworICAgICAgICAgICAgICAgIGZyZWVJdCA9IG1GcmVlQnVmZmVycy5lcmFzZShmcmVlSXQpOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICArK2ZyZWVJdDsKKyAgICAgICAgICAgICAgICBBTE9HVygiYnVmZmVycG9vbCBpbmNvbnNpc3RlbnQhIik7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9Cit9CisKK3ZvaWQgQWNjZXNzb3I6OkltcGw6OkJ1ZmZlclBvb2w6OmludmFsaWRhdGUoCisgICAgICAgIGJvb2wgbmVlZHNBY2ssIEJ1ZmZlcklkIGZyb20sIEJ1ZmZlcklkIHRvLAorICAgICAgICBjb25zdCBzdGQ6OnNoYXJlZF9wdHI8QWNjZXNzb3I6OkltcGw+ICZpbXBsKSB7CisgICAgZm9yIChhdXRvIGZyZWVJdCA9IG1GcmVlQnVmZmVycy5iZWdpbigpOyBmcmVlSXQgIT0gbUZyZWVCdWZmZXJzLmVuZCgpOykgeworICAgICAgICBpZiAoaXNCdWZmZXJJblJhbmdlKGZyb20sIHRvLCAqZnJlZUl0KSkgeworICAgICAgICAgICAgYXV0byBpdCA9IG1CdWZmZXJzLmZpbmQoKmZyZWVJdCk7CisgICAgICAgICAgICBpZiAoaXQgIT0gbUJ1ZmZlcnMuZW5kKCkgJiYKKyAgICAgICAgICAgICAgICBpdC0+c2Vjb25kLT5tT3duZXJDb3VudCA9PSAwICYmIGl0LT5zZWNvbmQtPm1UcmFuc2FjdGlvbkNvdW50ID09IDApIHsKKyAgICAgICAgICAgICAgICBtU3RhdHMub25CdWZmZXJFdmljdGVkKGl0LT5zZWNvbmQtPm1BbGxvY1NpemUpOworICAgICAgICAgICAgICAgIG1CdWZmZXJzLmVyYXNlKGl0KTsKKyAgICAgICAgICAgICAgICBmcmVlSXQgPSBtRnJlZUJ1ZmZlcnMuZXJhc2UoZnJlZUl0KTsKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgQUxPR1coImJ1ZmZlcnBvb2wgaW5jb25zaXN0ZW50ISIpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgICsrZnJlZUl0OworICAgIH0KKworICAgIHNpemVfdCBsZWZ0ID0gMDsKKyAgICBmb3IgKGF1dG8gaXQgPSBtQnVmZmVycy5iZWdpbigpOyBpdCAhPSBtQnVmZmVycy5lbmQoKTsgKytpdCkgeworICAgICAgICBpZiAoaXNCdWZmZXJJblJhbmdlKGZyb20sIHRvLCBpdC0+Zmlyc3QpKSB7CisgICAgICAgICAgICBpdC0+c2Vjb25kLT5pbnZhbGlkYXRlKCk7CisgICAgICAgICAgICArK2xlZnQ7CisgICAgICAgIH0KKyAgICB9CisgICAgbUludmFsaWRhdGlvbi5vbkludmFsaWRhdGlvblJlcXVlc3QobmVlZHNBY2ssIGZyb20sIHRvLCBsZWZ0LCBtSW52YWxpZGF0aW9uQ2hhbm5lbCwgaW1wbCk7Cit9CisKK3ZvaWQgQWNjZXNzb3I6OkltcGw6OkJ1ZmZlclBvb2w6OmZsdXNoKGNvbnN0IHN0ZDo6c2hhcmVkX3B0cjxBY2Nlc3Nvcjo6SW1wbD4gJmltcGwpIHsKKyAgICBCdWZmZXJJZCBmcm9tID0gbVN0YXJ0U2VxOworICAgIEJ1ZmZlcklkIHRvID0gbVNlcTsKKyAgICBtU3RhcnRTZXEgPSBtU2VxOworICAgIC8vIFRPRE86IG5lZWRzQWNrIHBhcmFtcyAKKyAgICBBTE9HVigiYnVmZmVyIGludmFsaWRhdGlvbiByZXF1ZXN0IGJwOiV1ICV1ICV1IiwgbUludmFsaWRhdGlvbi5tSWQsIGZyb20sIHRvKTsKKyAgICBpZiAoZnJvbSAhPSB0bykgeworICAgICAgICBpbnZhbGlkYXRlKHRydWUsIGZyb20sIHRvLCBpbXBsKTsKKyAgICB9Cit9CisKK3ZvaWQgQWNjZXNzb3I6OkltcGw6OmludmFsaWRhdG9yVGhyZWFkKAorICAgICAgICAgICAgc3RkOjptYXA8dWludDMyX3QsIGNvbnN0IHN0ZDo6d2Vha19wdHI8QWNjZXNzb3I6OkltcGw+PiAmYWNjZXNzb3JzLAorICAgICAgICAgICAgc3RkOjptdXRleCAmbXV0ZXgsCisgICAgICAgICAgICBzdGQ6OmNvbmRpdGlvbl92YXJpYWJsZSAmY3YsCisgICAgICAgICAgICBib29sICZyZWFkeSkgeworICAgIHdoaWxlKHRydWUpIHsKKyAgICAgICAgc3RkOjptYXA8dWludDMyX3QsIGNvbnN0IHN0ZDo6d2Vha19wdHI8QWNjZXNzb3I6OkltcGw+PiBjb3BpZWQ7CisgICAgICAgIHsKKyAgICAgICAgICAgIHN0ZDo6dW5pcXVlX2xvY2s8c3RkOjptdXRleD4gbG9jayhtdXRleCk7CisgICAgICAgICAgICBpZiAoIXJlYWR5KSB7CisgICAgICAgICAgICAgICAgY3Yud2FpdChsb2NrKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGNvcGllZC5pbnNlcnQoYWNjZXNzb3JzLmJlZ2luKCksIGFjY2Vzc29ycy5lbmQoKSk7CisgICAgICAgIH0KKyAgICAgICAgc3RkOjpsaXN0PENvbm5lY3Rpb25JZD4gZXJhc2VkOworICAgICAgICBmb3IgKGF1dG8gaXQgPSBjb3BpZWQuYmVnaW4oKTsgaXQgIT0gY29waWVkLmVuZCgpOyArK2l0KSB7CisgICAgICAgICAgICBjb25zdCBzdGQ6OnNoYXJlZF9wdHI8QWNjZXNzb3I6OkltcGw+IGltcGwgPSBpdC0+c2Vjb25kLmxvY2soKTsKKyAgICAgICAgICAgIGlmICghaW1wbCkgeworICAgICAgICAgICAgICAgIGVyYXNlZC5wdXNoX2JhY2soaXQtPmZpcnN0KTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgaW1wbC0+aGFuZGxlSW52YWxpZGF0ZUFjaygpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIHsKKyAgICAgICAgICAgIHN0ZDo6dW5pcXVlX2xvY2s8c3RkOjptdXRleD4gbG9jayhtdXRleCk7CisgICAgICAgICAgICBmb3IgKGF1dG8gaXQgPSBlcmFzZWQuYmVnaW4oKTsgaXQgIT0gZXJhc2VkLmVuZCgpOyArK2l0KSB7CisgICAgICAgICAgICAgICAgYWNjZXNzb3JzLmVyYXNlKCppdCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoYWNjZXNzb3JzLnNpemUoKSA9PSAwKSB7CisgICAgICAgICAgICAgICAgcmVhZHkgPSBmYWxzZTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgLy8gcHJldmVudCBkcmFpbmluZyBjcHUuCisgICAgICAgICAgICAgICAgbG9jay51bmxvY2soKTsKKyAgICAgICAgICAgICAgICBzdGQ6OnRoaXNfdGhyZWFkOjp5aWVsZCgpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorfQorCitBY2Nlc3Nvcjo6SW1wbDo6QWNjZXNzb3JJbnZhbGlkYXRvcjo6QWNjZXNzb3JJbnZhbGlkYXRvcigpIDogbVJlYWR5KGZhbHNlKSB7CisgICAgc3RkOjp0aHJlYWQgaW52YWxpZGF0b3IoCisgICAgICAgICAgICBpbnZhbGlkYXRvclRocmVhZCwKKyAgICAgICAgICAgIHN0ZDo6cmVmKG1BY2Nlc3NvcnMpLAorICAgICAgICAgICAgc3RkOjpyZWYobU11dGV4KSwKKyAgICAgICAgICAgIHN0ZDo6cmVmKG1DdiksCisgICAgICAgICAgICBzdGQ6OnJlZihtUmVhZHkpKTsKKyAgICBpbnZhbGlkYXRvci5kZXRhY2goKTsKK30KKwordm9pZCBBY2Nlc3Nvcjo6SW1wbDo6QWNjZXNzb3JJbnZhbGlkYXRvcjo6YWRkQWNjZXNzb3IoCisgICAgICAgIHVpbnQzMl90IGFjY2Vzc29ySWQsIGNvbnN0IHN0ZDo6d2Vha19wdHI8QWNjZXNzb3I6OkltcGw+ICZpbXBsKSB7CisgICAgYm9vbCBub3RpZnkgPSBmYWxzZTsKKyAgICBzdGQ6OnVuaXF1ZV9sb2NrPHN0ZDo6bXV0ZXg+IGxvY2sobU11dGV4KTsKKyAgICBpZiAobUFjY2Vzc29ycy5maW5kKGFjY2Vzc29ySWQpID09IG1BY2Nlc3NvcnMuZW5kKCkpIHsKKyAgICAgICAgaWYgKCFtUmVhZHkpIHsKKyAgICAgICAgICAgIG1SZWFkeSA9IHRydWU7CisgICAgICAgICAgICBub3RpZnkgPSB0cnVlOworICAgICAgICB9CisgICAgICAgIG1BY2Nlc3NvcnMuaW5zZXJ0KHN0ZDo6bWFrZV9wYWlyKGFjY2Vzc29ySWQsIGltcGwpKTsKKyAgICAgICAgQUxPR1YoImJ1ZmZlciBpbnZhbGlkYXRpb24gYWRkZWQgYnA6JXUgJWQiLCBhY2Nlc3NvcklkLCBub3RpZnkpOworICAgIH0KKyAgICBsb2NrLnVubG9jaygpOworICAgIGlmIChub3RpZnkpIHsKKyAgICAgICAgbUN2Lm5vdGlmeV9vbmUoKTsKKyAgICB9Cit9CisKK3ZvaWQgQWNjZXNzb3I6OkltcGw6OkFjY2Vzc29ySW52YWxpZGF0b3I6OmRlbEFjY2Vzc29yKHVpbnQzMl90IGFjY2Vzc29ySWQpIHsKKyAgICBzdGQ6OmxvY2tfZ3VhcmQ8c3RkOjptdXRleD4gbG9jayhtTXV0ZXgpOworICAgIG1BY2Nlc3NvcnMuZXJhc2UoYWNjZXNzb3JJZCk7CisgICAgQUxPR1YoImJ1ZmZlciBpbnZhbGlkYXRpb24gZGVsZXRlZCBicDoldSIsIGFjY2Vzc29ySWQpOworICAgIGlmIChtQWNjZXNzb3JzLnNpemUoKSA9PSAwKSB7CisgICAgICAgIG1SZWFkeSA9IGZhbHNlOworICAgIH0KK30KKworc3RkOjp1bmlxdWVfcHRyPEFjY2Vzc29yOjpJbXBsOjpBY2Nlc3NvckludmFsaWRhdG9yPiBBY2Nlc3Nvcjo6SW1wbDo6c0ludmFsaWRhdG9yOworCit2b2lkIEFjY2Vzc29yOjpJbXBsOjpjcmVhdGVJbnZhbGlkYXRvcigpIHsKKyAgICBpZiAoIXNJbnZhbGlkYXRvcikgeworICAgICAgICBzSW52YWxpZGF0b3IgPSBzdGQ6Om1ha2VfdW5pcXVlPEFjY2Vzc29yOjpJbXBsOjpBY2Nlc3NvckludmFsaWRhdG9yPigpOworICAgIH0KK30KKworfSAgLy8gbmFtZXNwYWNlIGltcGxlbWVudGF0aW9uCit9ICAvLyBuYW1lc3BhY2UgVjJfMAorfSAgLy8gbmFtZXNwYWNlIGJ1ZmZlcnBvb2wKK30gIC8vIG5hbWVzcGFjZSBtZWRpYQorfSAgLy8gbmFtZXNwYWNlIGhhcmR3YXJlCit9ICAvLyBuYW1lc3BhY2UgYW5kcm9pZApkaWZmIC0tZ2l0IGEvbWVkaWEvYnVmZmVycG9vbC8yLjAvQWNjZXNzb3JJbXBsLmggYi9tZWRpYS9idWZmZXJwb29sLzIuMC9BY2Nlc3NvckltcGwuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iM2ZhYTk2Ci0tLSAvZGV2L251bGwKKysrIGIvbWVkaWEvYnVmZmVycG9vbC8yLjAvQWNjZXNzb3JJbXBsLmgKQEAgLTAsMCArMSwzOTkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTggVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworCisjaWZuZGVmIEFORFJPSURfSEFSRFdBUkVfTUVESUFfQlVGRkVSUE9PTF9WMl8wX0FDQ0VTU09SSU1QTF9ICisjZGVmaW5lIEFORFJPSURfSEFSRFdBUkVfTUVESUFfQlVGRkVSUE9PTF9WMl8wX0FDQ0VTU09SSU1QTF9ICisKKyNpbmNsdWRlIDxtYXA+CisjaW5jbHVkZSA8c2V0PgorI2luY2x1ZGUgPGNvbmRpdGlvbl92YXJpYWJsZT4KKyNpbmNsdWRlICJBY2Nlc3Nvci5oIgorCituYW1lc3BhY2UgYW5kcm9pZCB7CituYW1lc3BhY2UgaGFyZHdhcmUgeworbmFtZXNwYWNlIG1lZGlhIHsKK25hbWVzcGFjZSBidWZmZXJwb29sIHsKK25hbWVzcGFjZSBWMl8wIHsKK25hbWVzcGFjZSBpbXBsZW1lbnRhdGlvbiB7CisKK3N0cnVjdCBJbnRlcm5hbEJ1ZmZlcjsKK3N0cnVjdCBUcmFuc2FjdGlvblN0YXR1czsKKworLyoqCisgKiBBbiBpbXBsZW1lbnRhdGlvbiBvZiBhIGJ1ZmZlciBwb29sIGFjY2Vzc29yKG9yIGEgYnVmZmVyIHBvb2wgaW1wbGVtZW50YXRpb24uKSAqLworY2xhc3MgQWNjZXNzb3I6OkltcGwKKyAgICA6IHB1YmxpYyBzdGQ6OmVuYWJsZV9zaGFyZWRfZnJvbV90aGlzPEFjY2Vzc29yOjpJbXBsPiB7CitwdWJsaWM6CisgICAgSW1wbChjb25zdCBzdGQ6OnNoYXJlZF9wdHI8QnVmZmVyUG9vbEFsbG9jYXRvcj4gJmFsbG9jYXRvcik7CisKKyAgICB+SW1wbCgpOworCisgICAgUmVzdWx0U3RhdHVzIGNvbm5lY3QoCisgICAgICAgICAgICBjb25zdCBzcDxBY2Nlc3Nvcj4gJmFjY2Vzc29yLCBjb25zdCBzcDxJT2JzZXJ2ZXI+ICZvYnNlcnZlciwKKyAgICAgICAgICAgIHNwPENvbm5lY3Rpb24+ICpjb25uZWN0aW9uLAorICAgICAgICAgICAgQ29ubmVjdGlvbklkICpwQ29ubmVjdGlvbklkLAorICAgICAgICAgICAgdWludDMyX3QgKnBNc2dJZCwKKyAgICAgICAgICAgIGNvbnN0IFN0YXR1c0Rlc2NyaXB0b3IqKiBzdGF0dXNEZXNjUHRyLAorICAgICAgICAgICAgY29uc3QgSW52YWxpZGF0aW9uRGVzY3JpcHRvcioqIGludkRlc2NQdHIpOworCisgICAgUmVzdWx0U3RhdHVzIGNsb3NlKENvbm5lY3Rpb25JZCBjb25uZWN0aW9uSWQpOworCisgICAgUmVzdWx0U3RhdHVzIGFsbG9jYXRlKENvbm5lY3Rpb25JZCBjb25uZWN0aW9uSWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0ZDo6dmVjdG9yPHVpbnQ4X3Q+JiBwYXJhbXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgIEJ1ZmZlcklkICpidWZmZXJJZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgbmF0aXZlX2hhbmRsZV90KiogaGFuZGxlKTsKKworICAgIFJlc3VsdFN0YXR1cyBmZXRjaChDb25uZWN0aW9uSWQgY29ubmVjdGlvbklkLAorICAgICAgICAgICAgICAgICAgICAgICBUcmFuc2FjdGlvbklkIHRyYW5zYWN0aW9uSWQsCisgICAgICAgICAgICAgICAgICAgICAgIEJ1ZmZlcklkIGJ1ZmZlcklkLAorICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBuYXRpdmVfaGFuZGxlX3QqKiBoYW5kbGUpOworCisgICAgdm9pZCBmbHVzaCgpOworCisgICAgdm9pZCBjbGVhblVwKGJvb2wgY2xlYXJDYWNoZSk7CisKKyAgICBib29sIGlzVmFsaWQoKTsKKworICAgIHZvaWQgaGFuZGxlSW52YWxpZGF0ZUFjaygpOworCisgICAgc3RhdGljIHZvaWQgY3JlYXRlSW52YWxpZGF0b3IoKTsKKworcHJpdmF0ZToKKyAgICAvLyBDb25uZWN0aW9uSWQgPSBwaWQgOiAodGltZXN0YW1wX2NyZWF0ZWQgKyBzZXFJZCkKKyAgICAvLyBpbiBvcmRlciB0byBndWFyYW50ZWUgdW5pcXVlbmVzcyBmb3IgZWFjaCBjb25uZWN0aW9uCisgICAgc3RhdGljIHVpbnQzMl90IHNTZXFJZDsKKyAgICBzdGF0aWMgaW50MzJfdCBzUGlkOworCisgICAgY29uc3Qgc3RkOjpzaGFyZWRfcHRyPEJ1ZmZlclBvb2xBbGxvY2F0b3I+IG1BbGxvY2F0b3I7CisKKyAgICAvKioKKyAgICAgKiBCdWZmZXIgcG9vbCBpbXBsZW1lbnRhdGlvbi4KKyAgICAgKgorICAgICAqIEhhbmRsZXMgYnVmZmVyIHN0YXR1cyBtZXNzYWdlcy4gSGFuZGxlcyBidWZmZXIgYWxsb2NhdGlvbi9yZWN5Y2xpbmcuCisgICAgICogSGFuZGxlcyBidWZmZXIgdHJhbnNmZXIgYmV0d2VlbiBidWZmZXIgcG9vbCBjbGllbnRzLgorICAgICAqLworICAgIHN0cnVjdCBCdWZmZXJQb29sIHsKKyAgICBwcml2YXRlOgorICAgICAgICBzdGQ6Om11dGV4IG1NdXRleDsKKyAgICAgICAgaW50NjRfdCBtVGltZXN0YW1wVXM7CisgICAgICAgIGludDY0X3QgbUxhc3RDbGVhblVwVXM7CisgICAgICAgIGludDY0X3QgbUxhc3RMb2dVczsKKyAgICAgICAgQnVmZmVySWQgbVNlcTsKKyAgICAgICAgQnVmZmVySWQgbVN0YXJ0U2VxOworICAgICAgICBib29sIG1WYWxpZDsKKyAgICAgICAgQnVmZmVyU3RhdHVzT2JzZXJ2ZXIgbU9ic2VydmVyOworICAgICAgICBCdWZmZXJJbnZhbGlkYXRpb25DaGFubmVsIG1JbnZhbGlkYXRpb25DaGFubmVsOworCisgICAgICAgIHN0ZDo6bWFwPENvbm5lY3Rpb25JZCwgc3RkOjpzZXQ8QnVmZmVySWQ+PiBtVXNpbmdCdWZmZXJzOworICAgICAgICBzdGQ6Om1hcDxCdWZmZXJJZCwgc3RkOjpzZXQ8Q29ubmVjdGlvbklkPj4gbVVzaW5nQ29ubmVjdGlvbnM7CisKKyAgICAgICAgc3RkOjptYXA8Q29ubmVjdGlvbklkLCBzdGQ6OnNldDxUcmFuc2FjdGlvbklkPj4gbVBlbmRpbmdUcmFuc2FjdGlvbnM7CisgICAgICAgIC8vIFRyYW5zYWN0aW9ucyBjb21wbGV0ZWQgYmVmb3JlIFRSQU5TRkVSX1RPIG1lc3NhZ2UgYXJyaXZhbC4KKyAgICAgICAgLy8gRmV0Y2ggZG9lcyBub3Qgb2NjdXIgZm9yIHRoZSB0cmFuc2FjdGlvbnMuCisgICAgICAgIC8vIE9ubHkgdHJhbnNhY3Rpb24gaWQgaXMga2VwdCBmb3IgdGhlIHRyYW5zYWN0aW9ucyBpbiBzaG9ydCBkdXJhdGlvbi4KKyAgICAgICAgc3RkOjpzZXQ8VHJhbnNhY3Rpb25JZD4gbUNvbXBsZXRlZFRyYW5zYWN0aW9uczsKKyAgICAgICAgLy8gQ3VycmVudGx5IGFjdGl2ZShwZW5kaW5nKSB0cmFuc2F0aW9ucycgc3RhdHVzICYgaW5mb3JtYXRpb24uCisgICAgICAgIHN0ZDo6bWFwPFRyYW5zYWN0aW9uSWQsIHN0ZDo6dW5pcXVlX3B0cjxUcmFuc2FjdGlvblN0YXR1cz4+CisgICAgICAgICAgICAgICAgbVRyYW5zYWN0aW9uczsKKworICAgICAgICBzdGQ6Om1hcDxCdWZmZXJJZCwgc3RkOjp1bmlxdWVfcHRyPEludGVybmFsQnVmZmVyPj4gbUJ1ZmZlcnM7CisgICAgICAgIHN0ZDo6c2V0PEJ1ZmZlcklkPiBtRnJlZUJ1ZmZlcnM7CisKKyAgICAgICAgc3RydWN0IEludmFsaWRhdGlvbiB7CisgICAgICAgICAgICBzdGF0aWMgc3RkOjphdG9taWM8c3RkOjp1aW50MzJfdD4gc0ludlNlcUlkOworCisgICAgICAgICAgICBzdHJ1Y3QgUGVuZGluZyB7CisgICAgICAgICAgICAgICAgYm9vbCBtTmVlZHNBY2s7CisgICAgICAgICAgICAgICAgdWludDMyX3QgbUZyb207CisgICAgICAgICAgICAgICAgdWludDMyX3QgbVRvOworICAgICAgICAgICAgICAgIHNpemVfdCBtTGVmdDsKKyAgICAgICAgICAgICAgICBjb25zdCBzdGQ6OndlYWtfcHRyPEFjY2Vzc29yOjpJbXBsPiBtSW1wbDsKKyAgICAgICAgICAgICAgICBQZW5kaW5nKGJvb2wgbmVlZHNBY2ssIHVpbnQzMl90IGZyb20sIHVpbnQzMl90IHRvLCBzaXplX3QgbGVmdCwKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0ZDo6c2hhcmVkX3B0cjxBY2Nlc3Nvcjo6SW1wbD4gJmltcGwpCisgICAgICAgICAgICAgICAgICAgICAgICA6IG1OZWVkc0FjayhuZWVkc0FjayksCisgICAgICAgICAgICAgICAgICAgICAgICAgIG1Gcm9tKGZyb20pLAorICAgICAgICAgICAgICAgICAgICAgICAgICBtVG8odG8pLAorICAgICAgICAgICAgICAgICAgICAgICAgICBtTGVmdChsZWZ0KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgbUltcGwoaW1wbCkKKyAgICAgICAgICAgICAgICB7fQorCisgICAgICAgICAgICAgICAgYm9vbCBpc0ludmFsaWRhdGVkKHVpbnQzMl90IGJ1ZmZlcklkKSB7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBpc0J1ZmZlckluUmFuZ2UobUZyb20sIG1UbywgYnVmZmVySWQpICYmIC0tbUxlZnQgPT0gMDsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9OworCisgICAgICAgICAgICBzdGQ6Omxpc3Q8UGVuZGluZz4gbVBlbmRpbmdzOworICAgICAgICAgICAgc3RkOjptYXA8Q29ubmVjdGlvbklkLCB1aW50MzJfdD4gbUFja3M7CisgICAgICAgICAgICBzdGQ6Om1hcDxDb25uZWN0aW9uSWQsIGNvbnN0IHNwPElPYnNlcnZlcj4+IG1PYnNlcnZlcnM7CisgICAgICAgICAgICB1aW50MzJfdCBtSW52YWxpZGF0aW9uSWQ7CisgICAgICAgICAgICB1aW50MzJfdCBtSWQ7CisKKyAgICAgICAgICAgIEludmFsaWRhdGlvbigpIDogbUludmFsaWRhdGlvbklkKDApLCBtSWQoc0ludlNlcUlkLmZldGNoX2FkZCgxKSkge30KKworICAgICAgICAgICAgdm9pZCBvbkNvbm5lY3QoQ29ubmVjdGlvbklkIGNvbklkLCBjb25zdCBzcDxJT2JzZXJ2ZXI+ICZvYnNlcnZlcik7CisKKyAgICAgICAgICAgIHZvaWQgb25DbG9zZShDb25uZWN0aW9uSWQgY29uSWQpOworCisgICAgICAgICAgICB2b2lkIG9uQWNrKENvbm5lY3Rpb25JZCBjb25JZCwgdWludDMyX3QgbXNnSWQpOworCisgICAgICAgICAgICB2b2lkIG9uQnVmZmVySW52YWxpZGF0ZWQoCisgICAgICAgICAgICAgICAgICAgIEJ1ZmZlcklkIGJ1ZmZlcklkLAorICAgICAgICAgICAgICAgICAgICBCdWZmZXJJbnZhbGlkYXRpb25DaGFubmVsICZjaGFubmVsKTsKKworICAgICAgICAgICAgdm9pZCBvbkludmFsaWRhdGlvblJlcXVlc3QoCisgICAgICAgICAgICAgICAgICAgIGJvb2wgbmVlZHNBY2ssIHVpbnQzMl90IGZyb20sIHVpbnQzMl90IHRvLCBzaXplX3QgbGVmdCwKKyAgICAgICAgICAgICAgICAgICAgQnVmZmVySW52YWxpZGF0aW9uQ2hhbm5lbCAmY2hhbm5lbCwKKyAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RkOjpzaGFyZWRfcHRyPEFjY2Vzc29yOjpJbXBsPiAmaW1wbCk7CisKKyAgICAgICAgICAgIHZvaWQgb25IYW5kbGVBY2soKTsKKyAgICAgICAgfSBtSW52YWxpZGF0aW9uOworICAgICAgICAvLy8gQnVmZmVyIHBvb2wgc3RhdGlzdGljcyB3aGljaCB0cmFja3MgYWxsb2NhdGlvbiBhbmQgdHJhbnNmZXIgc3RhdGlzdGljcy4KKyAgICAgICAgc3RydWN0IFN0YXRzIHsKKyAgICAgICAgICAgIC8vLyBUb3RhbCBzaXplIG9mIGFsbG9jYXRpb25zIHdoaWNoIGFyZSB1c2VkIG9yIGF2YWlsYWJsZSB0byB1c2UuCisgICAgICAgICAgICAvLy8gKGJ5dGVzIG9yIHBpeGVscykKKyAgICAgICAgICAgIHNpemVfdCBtU2l6ZUNhY2hlZDsKKyAgICAgICAgICAgIC8vLyAjIG9mIGNhY2hlZCBidWZmZXJzIHdoaWNoIGFyZSB1c2VkIG9yIGF2YWlsYWJsZSB0byB1c2UuCisgICAgICAgICAgICBzaXplX3QgbUJ1ZmZlcnNDYWNoZWQ7CisgICAgICAgICAgICAvLy8gVG90YWwgc2l6ZSBvZiBhbGxvY2F0aW9ucyB3aGljaCBhcmUgY3VycmVudGx5IHVzZWQuIChieXRlcyBvciBwaXhlbHMpCisgICAgICAgICAgICBzaXplX3QgbVNpemVJblVzZTsKKyAgICAgICAgICAgIC8vLyAjIG9mIGN1cnJlbnRseSB1c2VkIGJ1ZmZlcnMKKyAgICAgICAgICAgIHNpemVfdCBtQnVmZmVyc0luVXNlOworCisgICAgICAgICAgICAvLy8gIyBvZiBhbGxvY2F0aW9ucyBjYWxsZWQgb24gYnVmZmVycG9vbC4gKCMgb2YgZmV0Y2hlZCBmcm9tIEJsb2NrUG9vbCkKKyAgICAgICAgICAgIHNpemVfdCBtVG90YWxBbGxvY2F0aW9uczsKKyAgICAgICAgICAgIC8vLyAjIG9mIGFsbG9jYXRpb25zIHRoYXQgd2VyZSBzZXJ2ZWQgZnJvbSB0aGUgY2FjaGUuCisgICAgICAgICAgICAvLy8gKCMgb2YgYWxsb2NhdG9yIGFsbG9jIHByZXZlbnRlZCkKKyAgICAgICAgICAgIHNpemVfdCBtVG90YWxSZWN5Y2xlczsKKyAgICAgICAgICAgIC8vLyAjIG9mIGJ1ZmZlciB0cmFuc2ZlcnMgaW5pdGlhdGVkLgorICAgICAgICAgICAgc2l6ZV90IG1Ub3RhbFRyYW5zZmVyczsKKyAgICAgICAgICAgIC8vLyAjIG9mIHRyYW5zZmVycyB0aGF0IGhhZCB0byBiZSBmZXRjaGVkLgorICAgICAgICAgICAgc2l6ZV90IG1Ub3RhbEZldGNoZXM7CisKKyAgICAgICAgICAgIFN0YXRzKCkKKyAgICAgICAgICAgICAgICA6IG1TaXplQ2FjaGVkKDApLCBtQnVmZmVyc0NhY2hlZCgwKSwgbVNpemVJblVzZSgwKSwgbUJ1ZmZlcnNJblVzZSgwKSwKKyAgICAgICAgICAgICAgICAgIG1Ub3RhbEFsbG9jYXRpb25zKDApLCBtVG90YWxSZWN5Y2xlcygwKSwgbVRvdGFsVHJhbnNmZXJzKDApLCBtVG90YWxGZXRjaGVzKDApIHt9CisKKyAgICAgICAgICAgIC8vLyBBIG5ldyBidWZmZXIgaXMgYWxsb2NhdGVkIG9uIGFuIGFsbG9jYXRpb24gcmVxdWVzdC4KKyAgICAgICAgICAgIHZvaWQgb25CdWZmZXJBbGxvY2F0ZWQoc2l6ZV90IGFsbG9jU2l6ZSkgeworICAgICAgICAgICAgICAgIG1TaXplQ2FjaGVkICs9IGFsbG9jU2l6ZTsKKyAgICAgICAgICAgICAgICBtQnVmZmVyc0NhY2hlZCsrOworCisgICAgICAgICAgICAgICAgbVNpemVJblVzZSArPSBhbGxvY1NpemU7CisgICAgICAgICAgICAgICAgbUJ1ZmZlcnNJblVzZSsrOworCisgICAgICAgICAgICAgICAgbVRvdGFsQWxsb2NhdGlvbnMrKzsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgLy8vIEEgYnVmZmVyIGlzIGV2aWN0ZWQgYW5kIGRlc3Ryb3llZC4KKyAgICAgICAgICAgIHZvaWQgb25CdWZmZXJFdmljdGVkKHNpemVfdCBhbGxvY1NpemUpIHsKKyAgICAgICAgICAgICAgICBtU2l6ZUNhY2hlZCAtPSBhbGxvY1NpemU7CisgICAgICAgICAgICAgICAgbUJ1ZmZlcnNDYWNoZWQtLTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgLy8vIEEgYnVmZmVyIGlzIHJlY3ljbGVkIG9uIGFuIGFsbG9jYXRpb24gcmVxdWVzdC4KKyAgICAgICAgICAgIHZvaWQgb25CdWZmZXJSZWN5Y2xlZChzaXplX3QgYWxsb2NTaXplKSB7CisgICAgICAgICAgICAgICAgbVNpemVJblVzZSArPSBhbGxvY1NpemU7CisgICAgICAgICAgICAgICAgbUJ1ZmZlcnNJblVzZSsrOworCisgICAgICAgICAgICAgICAgbVRvdGFsQWxsb2NhdGlvbnMrKzsKKyAgICAgICAgICAgICAgICBtVG90YWxSZWN5Y2xlcysrOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICAvLy8gQSBidWZmZXIgaXMgYXZhaWxhYmxlIHRvIGJlIHJlY3ljbGVkLgorICAgICAgICAgICAgdm9pZCBvbkJ1ZmZlclVudXNlZChzaXplX3QgYWxsb2NTaXplKSB7CisgICAgICAgICAgICAgICAgbVNpemVJblVzZSAtPSBhbGxvY1NpemU7CisgICAgICAgICAgICAgICAgbUJ1ZmZlcnNJblVzZS0tOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICAvLy8gQSBidWZmZXIgdHJhbnNmZXIgaXMgaW5pdGlhdGVkLgorICAgICAgICAgICAgdm9pZCBvbkJ1ZmZlclNlbnQoKSB7CisgICAgICAgICAgICAgICAgbVRvdGFsVHJhbnNmZXJzKys7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIC8vLyBBIGJ1ZmZlciBmZXRjaCBpcyBpbnZva2VkIGJ5IGEgYnVmZmVyIHRyYW5zZmVyLgorICAgICAgICAgICAgdm9pZCBvbkJ1ZmZlckZldGNoZWQoKSB7CisgICAgICAgICAgICAgICAgbVRvdGFsRmV0Y2hlcysrOworICAgICAgICAgICAgfQorICAgICAgICB9IG1TdGF0czsKKworICAgICAgICBib29sIGlzVmFsaWQoKSB7CisgICAgICAgICAgICByZXR1cm4gbVZhbGlkOworICAgICAgICB9CisKKyAgICAgICAgdm9pZCBpbnZhbGlkYXRlKGJvb2wgbmVlZHNBY2ssIEJ1ZmZlcklkIGZyb20sIEJ1ZmZlcklkIHRvLAorICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RkOjpzaGFyZWRfcHRyPEFjY2Vzc29yOjpJbXBsPiAmaW1wbCk7CisKKyAgICAgICAgc3RhdGljIHZvaWQgY3JlYXRlSW52YWxpZGF0b3IoKTsKKworICAgIHB1YmxpYzoKKyAgICAgICAgLyoqIENyZWF0ZXMgYSBidWZmZXIgcG9vbC4gKi8KKyAgICAgICAgQnVmZmVyUG9vbCgpOworCisgICAgICAgIC8qKiBEZXN0cm95cyBhIGJ1ZmZlciBwb29sLiAqLworICAgICAgICB+QnVmZmVyUG9vbCgpOworCisgICAgICAgIC8qKgorICAgICAgICAgKiBQcm9jZXNzZXMgYWxsIHBlbmRpbmcgYnVmZmVyIHN0YXR1cyBtZXNzYWdlcywgYW5kIHJldHVybnMgdGhlIHJlc3VsdC4KKyAgICAgICAgICogRWFjaCBzdGF0dXMgbWVzc2FnZSBpcyBoYW5kbGVkIGJ5IG1ldGhvZHMgd2l0aCAnaGFuZGxlJyBwcmVmaXguCisgICAgICAgICAqLworICAgICAgICB2b2lkIHByb2Nlc3NTdGF0dXNNZXNzYWdlcygpOworCisgICAgICAgIC8qKgorICAgICAgICAgKiBIYW5kbGVzIGEgYnVmZmVyIGJlaW5nIG93bmVkIGJ5IGEgY29ubmVjdGlvbi4KKyAgICAgICAgICoKKyAgICAgICAgICogQHBhcmFtIGNvbm5lY3Rpb25JZCAgdGhlIGlkIG9mIHRoZSBidWZmZXIgb3duaW5nIGNvbm5lY3Rpb24uCisgICAgICAgICAqIEBwYXJhbSBidWZmZXJJZCAgICAgIHRoZSBpZCBvZiB0aGUgYnVmZmVyLgorICAgICAgICAgKgorICAgICAgICAgKiBAcmV0dXJuIHtAY29kZSB0cnVlfSB3aGVuIHRoZSBidWZmZXIgaXMgb3duZWQsCisgICAgICAgICAqICAgICAgICAge0Bjb2RlIGZhbHNlfSBvdGhlcndpc2UuCisgICAgICAgICAqLworICAgICAgICBib29sIGhhbmRsZU93bkJ1ZmZlcihDb25uZWN0aW9uSWQgY29ubmVjdGlvbklkLCBCdWZmZXJJZCBidWZmZXJJZCk7CisKKyAgICAgICAgLyoqCisgICAgICAgICAqIEhhbmRsZXMgYSBidWZmZXIgYmVpbmcgcmVsZWFzZWQgYnkgYSBjb25uZWN0aW9uLgorICAgICAgICAgKgorICAgICAgICAgKiBAcGFyYW0gY29ubmVjdGlvbklkICB0aGUgaWQgb2YgdGhlIGJ1ZmZlciBvd25pbmcgY29ubmVjdGlvbi4KKyAgICAgICAgICogQHBhcmFtIGJ1ZmZlcklkICAgICAgdGhlIGlkIG9mIHRoZSBidWZmZXIuCisgICAgICAgICAqCisgICAgICAgICAqIEByZXR1cm4ge0Bjb2RlIHRydWV9IHdoZW4gdGhlIGJ1ZmZlciBvd25lcnNoaXAgaXMgcmVsZWFzZWQsCisgICAgICAgICAqICAgICAgICAge0Bjb2RlIGZhbHNlfSBvdGhlcndpc2UuCisgICAgICAgICAqLworICAgICAgICBib29sIGhhbmRsZVJlbGVhc2VCdWZmZXIoQ29ubmVjdGlvbklkIGNvbm5lY3Rpb25JZCwgQnVmZmVySWQgYnVmZmVySWQpOworCisgICAgICAgIC8qKgorICAgICAgICAgKiBIYW5kbGVzIGEgdHJhbnNmZXIgdHJhbnNhY3Rpb24gc3RhcnQgbWVzc2FnZSBmcm9tIHRoZSBzZW5kZXIuCisgICAgICAgICAqCisgICAgICAgICAqIEBwYXJhbSBtZXNzYWdlICAgYSBidWZmZXIgc3RhdHVzIG1lc3NhZ2UgZm9yIHRoZSB0cmFuc2FjdGlvbi4KKyAgICAgICAgICoKKyAgICAgICAgICogQHJlc3VsdCB7QGNvZGUgdHJ1ZX0gd2hlbiB0cmFuc2Zlcl90byBtZXNzYWdlIGlzIGFja25vd2xlZGdlZCwKKyAgICAgICAgICogICAgICAgICB7QGNvZGUgZmFsc2V9IG90aGVyd2lzZS4KKyAgICAgICAgICovCisgICAgICAgIGJvb2wgaGFuZGxlVHJhbnNmZXJUbyhjb25zdCBCdWZmZXJTdGF0dXNNZXNzYWdlICZtZXNzYWdlKTsKKworICAgICAgICAvKioKKyAgICAgICAgICogSGFuZGxlcyBhIHRyYW5zZmVyIHRyYW5zYWN0aW9uIGJlaW5nIGFja2VkIGJ5IHRoZSByZWNlaXZlci4KKyAgICAgICAgICoKKyAgICAgICAgICogQHBhcmFtIG1lc3NhZ2UgICBhIGJ1ZmZlciBzdGF0dXMgbWVzc2FnZSBmb3IgdGhlIHRyYW5zYWN0aW9uLgorICAgICAgICAgKgorICAgICAgICAgKiBAcmVzdWx0IHtAY29kZSB0cnVlfSB3aGVuIHRyYW5zZmVyX2Zyb20gbWVzc2FnZSBpcyBhY2tub3dsZWRnZWQsCisgICAgICAgICAqICAgICAgICAge0Bjb2RlIGZhbHNlfSBvdGhlcndpc2UuCisgICAgICAgICAqLworICAgICAgICBib29sIGhhbmRsZVRyYW5zZmVyRnJvbShjb25zdCBCdWZmZXJTdGF0dXNNZXNzYWdlICZtZXNzYWdlKTsKKworICAgICAgICAvKioKKyAgICAgICAgICogSGFuZGxlcyBhIHRyYW5zZmVyIHRyYW5zYWN0aW9uIHJlc3VsdCBtZXNzYWdlIGZyb20gdGhlIHJlY2VpdmVyLgorICAgICAgICAgKgorICAgICAgICAgKiBAcGFyYW0gbWVzc2FnZSAgIGEgYnVmZmVyIHN0YXR1cyBtZXNzYWdlIGZvciB0aGUgdHJhbnNhY3Rpb24uCisgICAgICAgICAqCisgICAgICAgICAqIEByZXN1bHQge0Bjb2RlIHRydWV9IHdoZW4gdGhlIGV4aXNpdG5nIHRyYW5zYWN0aW9uIGlzIGZpbmlzaGVkLAorICAgICAgICAgKiAgICAgICAgIHtAY29kZSBmYWxzZX0gb3RoZXJ3aXNlLgorICAgICAgICAgKi8KKyAgICAgICAgYm9vbCBoYW5kbGVUcmFuc2ZlclJlc3VsdChjb25zdCBCdWZmZXJTdGF0dXNNZXNzYWdlICZtZXNzYWdlKTsKKworICAgICAgICAvKioKKyAgICAgICAgICogSGFuZGxlcyBhIGNvbm5lY3Rpb24gYmVpbmcgY2xvc2VkLCBhbmQgcmV0dXJucyB0aGUgcmVzdWx0LiBBbGwgdGhlCisgICAgICAgICAqIGJ1ZmZlcnMgYW5kIHRyYW5zYWN0aW9ucyBvd25lZCBieSB0aGUgY29ubmVjdGlvbiB3aWxsIGJlIGNsZWFuZWQgdXAuCisgICAgICAgICAqIFRoZSByZWxhdGVkIEZNUSB3aWxsIGJlIGNsZWFuZWQgdXAgdG9vLgorICAgICAgICAgKgorICAgICAgICAgKiBAcGFyYW0gY29ubmVjdGlvbklkICB0aGUgaWQgb2YgdGhlIGNvbm5lY3Rpb24uCisgICAgICAgICAqCisgICAgICAgICAqIEByZXN1bHQge0Bjb2RlIHRydWV9IHdoZW4gdGhlIGNvbm5lY3Rpb24gZXhpc3RlZCwKKyAgICAgICAgICogICAgICAgICB7QGNvZGUgZmFsc2V9IG90aGVyd2lzZS4KKyAgICAgICAgICovCisgICAgICAgIGJvb2wgaGFuZGxlQ2xvc2UoQ29ubmVjdGlvbklkIGNvbm5lY3Rpb25JZCk7CisKKyAgICAgICAgLyoqCisgICAgICAgICAqIFJlY3ljbGVzIGEgZXhpc3RpbmcgZnJlZSBidWZmZXIgaWYgaXQgaXMgcG9zc2libGUuCisgICAgICAgICAqCisgICAgICAgICAqIEBwYXJhbSBhbGxvY2F0b3IgdGhlIGJ1ZmZlciBhbGxvY2F0b3IKKyAgICAgICAgICogQHBhcmFtIHBhcmFtcyAgICB0aGUgYWxsb2NhdGlvbiBwYXJhbWV0ZXJzLgorICAgICAgICAgKiBAcGFyYW0gcElkICAgICAgIHRoZSBpZCBvZiB0aGUgcmVjeWNsZWQgYnVmZmVyLgorICAgICAgICAgKiBAcGFyYW0gaGFuZGxlICAgIHRoZSBuYXRpdmUgaGFuZGxlIG9mIHRoZSByZWN5Y2xlZCBidWZmZXIuCisgICAgICAgICAqCisgICAgICAgICAqIEByZXR1cm4ge0Bjb2RlIHRydWV9IHdoZW4gYSBidWZmZXIgaXMgcmVjeWNsZWQsIHtAY29kZSBmYWxzZX0KKyAgICAgICAgICogICAgICAgICBvdGhlcndpc2UuCisgICAgICAgICAqLworICAgICAgICBib29sIGdldEZyZWVCdWZmZXIoCisgICAgICAgICAgICAgICAgY29uc3Qgc3RkOjpzaGFyZWRfcHRyPEJ1ZmZlclBvb2xBbGxvY2F0b3I+ICZhbGxvY2F0b3IsCisgICAgICAgICAgICAgICAgY29uc3Qgc3RkOjp2ZWN0b3I8dWludDhfdD4gJnBhcmFtcywKKyAgICAgICAgICAgICAgICBCdWZmZXJJZCAqcElkLCBjb25zdCBuYXRpdmVfaGFuZGxlX3QgKipoYW5kbGUpOworCisgICAgICAgIC8qKgorICAgICAgICAgKiBBZGRzIGEgbmV3bHkgYWxsb2NhdGVkIGJ1ZmZlciB0byBidWZmZXJwb29sLgorICAgICAgICAgKgorICAgICAgICAgKiBAcGFyYW0gYWxsb2MgICAgIHRoZSBuZXdseSBhbGxvY2F0ZWQgYnVmZmVyLgorICAgICAgICAgKiBAcGFyYW0gYWxsb2NTaXplIHRoZSBzaXplIG9mIHRoZSBuZXdseSBhbGxvY2F0ZWQgYnVmZmVyLgorICAgICAgICAgKiBAcGFyYW0gcGFyYW1zICAgIHRoZSBhbGxvY2F0aW9uIHBhcmFtZXRlcnMuCisgICAgICAgICAqIEBwYXJhbSBwSWQgICAgICAgdGhlIGJ1ZmZlciBpZCBmb3IgdGhlIG5ld2x5IGFsbG9jYXRlZCBidWZmZXIuCisgICAgICAgICAqIEBwYXJhbSBoYW5kbGUgICAgdGhlIG5hdGl2ZSBoYW5kbGUgZm9yIHRoZSBuZXdseSBhbGxvY2F0ZWQgYnVmZmVyLgorICAgICAgICAgKgorICAgICAgICAgKiBAcmV0dXJuIE9LIHdoZW4gYW4gYWxsb2NhdGlvbiBpcyBzdWNjZXNzZnVsbHkgYWxsb2NhdGVkLgorICAgICAgICAgKiAgICAgICAgIE5PX01FTU9SWSB3aGVuIHRoZXJlIGlzIG5vIG1lbW9yeS4KKyAgICAgICAgICogICAgICAgICBDUklUSUNBTF9FUlJPUiBvdGhlcndpc2UuCisgICAgICAgICAqLworICAgICAgICBSZXN1bHRTdGF0dXMgYWRkTmV3QnVmZmVyKAorICAgICAgICAgICAgICAgIGNvbnN0IHN0ZDo6c2hhcmVkX3B0cjxCdWZmZXJQb29sQWxsb2NhdGlvbj4gJmFsbG9jLAorICAgICAgICAgICAgICAgIGNvbnN0IHNpemVfdCBhbGxvY1NpemUsCisgICAgICAgICAgICAgICAgY29uc3Qgc3RkOjp2ZWN0b3I8dWludDhfdD4gJnBhcmFtcywKKyAgICAgICAgICAgICAgICBCdWZmZXJJZCAqcElkLAorICAgICAgICAgICAgICAgIGNvbnN0IG5hdGl2ZV9oYW5kbGVfdCAqKmhhbmRsZSk7CisKKyAgICAgICAgLyoqCisgICAgICAgICAqIFByb2Nlc3NlcyBwZW5kaW5nIGJ1ZmZlciBzdGF0dXMgbWVzc2FnZXMgYW5kIHBlcmZvcm1zIHBlcmlvZGljIGNhY2hlCisgICAgICAgICAqIGNsZWFuaW5nLgorICAgICAgICAgKgorICAgICAgICAgKiBAcGFyYW0gY2xlYXJDYWNoZSAgICBpZiBjbGVhckNhY2hlIGlzIHRydWUsIGl0IGZyZWVzIGFsbCBidWZmZXJzCisgICAgICAgICAqICAgICAgICAgICAgICAgICAgICAgIHdhaXRpbmcgdG8gYmUgcmVjeWNsZWQuCisgICAgICAgICAqLworICAgICAgICB2b2lkIGNsZWFuVXAoYm9vbCBjbGVhckNhY2hlID0gZmFsc2UpOworCisgICAgICAgIC8qKgorICAgICAgICAgKiBQcm9jZXNzZXMgcGVuZGluZyBidWZmZXIgc3RhdHVzIG1lc3NhZ2VzIGFuZCBpbnZhbGlkYXRlIGFsbCBjdXJyZW50CisgICAgICAgICAqIGZyZWUgYnVmZmVycy4gQWN0aXZlIGJ1ZmZlcnMgYXJlIGludmFsaWRhdGVkIGFmdGVyIGJlaW5nIGluYWN0aXZlLgorICAgICAgICAgKi8KKyAgICAgICAgdm9pZCBmbHVzaChjb25zdCBzdGQ6OnNoYXJlZF9wdHI8QWNjZXNzb3I6OkltcGw+ICZpbXBsKTsKKworICAgICAgICBmcmllbmQgY2xhc3MgQWNjZXNzb3I6OkltcGw7CisgICAgfSBtQnVmZmVyUG9vbDsKKworICAgIHN0cnVjdCAgQWNjZXNzb3JJbnZhbGlkYXRvciB7CisgICAgICAgIHN0ZDo6bWFwPHVpbnQzMl90LCBjb25zdCBzdGQ6OndlYWtfcHRyPEFjY2Vzc29yOjpJbXBsPj4gbUFjY2Vzc29yczsKKyAgICAgICAgc3RkOjptdXRleCBtTXV0ZXg7CisgICAgICAgIHN0ZDo6Y29uZGl0aW9uX3ZhcmlhYmxlIG1DdjsKKyAgICAgICAgYm9vbCBtUmVhZHk7CisKKyAgICAgICAgQWNjZXNzb3JJbnZhbGlkYXRvcigpOworICAgICAgICB2b2lkIGFkZEFjY2Vzc29yKHVpbnQzMl90IGFjY2Vzc29ySWQsIGNvbnN0IHN0ZDo6d2Vha19wdHI8QWNjZXNzb3I6OkltcGw+ICZpbXBsKTsKKyAgICAgICAgdm9pZCBkZWxBY2Nlc3Nvcih1aW50MzJfdCBhY2Nlc3NvcklkKTsKKyAgICB9OworCisgICAgc3RhdGljIHN0ZDo6dW5pcXVlX3B0cjxBY2Nlc3NvckludmFsaWRhdG9yPiBzSW52YWxpZGF0b3I7CisKKyAgICBzdGF0aWMgdm9pZCBpbnZhbGlkYXRvclRocmVhZCgKKyAgICAgICAgc3RkOjptYXA8dWludDMyX3QsIGNvbnN0IHN0ZDo6d2Vha19wdHI8QWNjZXNzb3I6OkltcGw+PiAmYWNjZXNzb3JzLAorICAgICAgICBzdGQ6Om11dGV4ICZtdXRleCwKKyAgICAgICAgc3RkOjpjb25kaXRpb25fdmFyaWFibGUgJmN2LAorICAgICAgICBib29sICZyZWFkeSk7Cit9OworCit9ICAvLyBuYW1lc3BhY2UgaW1wbGVtZW50YXRpb24KK30gIC8vIG5hbWVzcGFjZSBWMl8wCit9ICAvLyBuYW1lc3BhY2UgdWZmZXJwb29sCit9ICAvLyBuYW1lc3BhY2UgbWVkaWEKK30gIC8vIG5hbWVzcGFjZSBoYXJkd2FyZQorfSAgLy8gbmFtZXNwYWNlIGFuZHJvaWQKKworI2VuZGlmICAvLyBBTkRST0lEX0hBUkRXQVJFX01FRElBX0JVRkZFUlBPT0xfVjJfMF9BQ0NFU1NPUklNUExfSApkaWZmIC0tZ2l0IGEvbWVkaWEvYnVmZmVycG9vbC8yLjAvQW5kcm9pZC5icCBiL21lZGlhL2J1ZmZlcnBvb2wvMi4wL0FuZHJvaWQuYnAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2Q0ZTA2ZQotLS0gL2Rldi9udWxsCisrKyBiL21lZGlhL2J1ZmZlcnBvb2wvMi4wL0FuZHJvaWQuYnAKQEAgLTAsMCArMSwzMCBAQAorY2NfbGlicmFyeSB7CisgICAgbmFtZTogImxpYnN0YWdlZnJpZ2h0X2J1ZmZlcnBvb2xAMi4wIiwKKyAgICB2ZW5kb3JfYXZhaWxhYmxlOiB0cnVlLAorICAgIHNyY3M6IFsKKyAgICAgICAgIkFjY2Vzc29yLmNwcCIsCisgICAgICAgICJBY2Nlc3NvckltcGwuY3BwIiwKKyAgICAgICAgIkJ1ZmZlclBvb2xDbGllbnQuY3BwIiwKKyAgICAgICAgIkJ1ZmZlclN0YXR1cy5jcHAiLAorICAgICAgICAiQ2xpZW50TWFuYWdlci5jcHAiLAorICAgICAgICAiQ29ubmVjdGlvbi5jcHAiLAorICAgICAgICAiT2JzZXJ2ZXIuY3BwIiwKKyAgICBdLAorICAgIGV4cG9ydF9pbmNsdWRlX2RpcnM6IFsKKyAgICAgICAgImluY2x1ZGUiLAorICAgIF0sCisgICAgc2hhcmVkX2xpYnM6IFsKKyAgICAgICAgImxpYmN1dGlscyIsCisgICAgICAgICJsaWJmbXEiLAorICAgICAgICAibGliaGlkbGJhc2UiLAorICAgICAgICAibGliaHdiaW5kZXIiLAorICAgICAgICAibGliaGlkbHRyYW5zcG9ydCIsCisgICAgICAgICJsaWJsb2ciLAorICAgICAgICAibGlidXRpbHMiLAorICAgICAgICAiYW5kcm9pZC5oYXJkd2FyZS5tZWRpYS5idWZmZXJwb29sQDIuMCIsCisgICAgXSwKKyAgICBleHBvcnRfc2hhcmVkX2xpYl9oZWFkZXJzOiBbCisgICAgICAgICJsaWJmbXEiLAorICAgICAgICAiYW5kcm9pZC5oYXJkd2FyZS5tZWRpYS5idWZmZXJwb29sQDIuMCIsCisgICAgXSwKK30KZGlmZiAtLWdpdCBhL21lZGlhL2J1ZmZlcnBvb2wvMi4wL0J1ZmZlclBvb2xDbGllbnQuY3BwIGIvbWVkaWEvYnVmZmVycG9vbC8yLjAvQnVmZmVyUG9vbENsaWVudC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTU2NGExMwotLS0gL2Rldi9udWxsCisrKyBiL21lZGlhL2J1ZmZlcnBvb2wvMi4wL0J1ZmZlclBvb2xDbGllbnQuY3BwCkBAIC0wLDAgKzEsODY0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE4IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KKworI2RlZmluZSBMT0dfVEFHICJCdWZmZXJQb29sQ2xpZW50IgorLy8jZGVmaW5lIExPR19OREVCVUcgMAorCisjaW5jbHVkZSA8dGhyZWFkPgorI2luY2x1ZGUgPHV0aWxzL0xvZy5oPgorI2luY2x1ZGUgIkJ1ZmZlclBvb2xDbGllbnQuaCIKKyNpbmNsdWRlICJDb25uZWN0aW9uLmgiCisKK25hbWVzcGFjZSBhbmRyb2lkIHsKK25hbWVzcGFjZSBoYXJkd2FyZSB7CituYW1lc3BhY2UgbWVkaWEgeworbmFtZXNwYWNlIGJ1ZmZlcnBvb2wgeworbmFtZXNwYWNlIFYyXzAgeworbmFtZXNwYWNlIGltcGxlbWVudGF0aW9uIHsKKworc3RhdGljIGNvbnN0ZXhwciBpbnQ2NF90IGtSZWNlaXZlVGltZW91dFVzID0gMTAwMDAwMDsgLy8gMTAwbXMKK3N0YXRpYyBjb25zdGV4cHIgaW50IGtQb3N0TWF4UmV0cnkgPSAzOworc3RhdGljIGNvbnN0ZXhwciBpbnQga0NhY2hlVHRsVXMgPSAxMDAwMDAwOyAvLyBUT0RPOiB0dW5lCisKK2NsYXNzIEJ1ZmZlclBvb2xDbGllbnQ6OkltcGwKKyAgICAgICAgOiBwdWJsaWMgc3RkOjplbmFibGVfc2hhcmVkX2Zyb21fdGhpczxCdWZmZXJQb29sQ2xpZW50OjpJbXBsPiB7CitwdWJsaWM6CisgICAgZXhwbGljaXQgSW1wbChjb25zdCBzcDxBY2Nlc3Nvcj4gJmFjY2Vzc29yLCBjb25zdCBzcDxJT2JzZXJ2ZXI+ICZvYnNlcnZlcik7CisKKyAgICBleHBsaWNpdCBJbXBsKGNvbnN0IHNwPElBY2Nlc3Nvcj4gJmFjY2Vzc29yLCBjb25zdCBzcDxJT2JzZXJ2ZXI+ICZvYnNlcnZlcik7CisKKyAgICBib29sIGlzVmFsaWQoKSB7CisgICAgICAgIHJldHVybiBtVmFsaWQ7CisgICAgfQorCisgICAgYm9vbCBpc0xvY2FsKCkgeworICAgICAgICByZXR1cm4gbVZhbGlkICYmIG1Mb2NhbDsKKyAgICB9CisKKyAgICBDb25uZWN0aW9uSWQgZ2V0Q29ubmVjdGlvbklkKCkgeworICAgICAgICByZXR1cm4gbUNvbm5lY3Rpb25JZDsKKyAgICB9CisKKyAgICBzcDxJQWNjZXNzb3I+ICZnZXRBY2Nlc3NvcigpIHsKKyAgICAgICAgcmV0dXJuIG1BY2Nlc3NvcjsKKyAgICB9CisKKyAgICBib29sIGlzQWN0aXZlKGludDY0X3QgKmxhc3RUcmFuc2FjdGlvblVzLCBib29sIGNsZWFyQ2FjaGUpOworCisgICAgdm9pZCByZWNlaXZlSW52YWxpZGF0aW9uKHVpbnQzMl90IG1zZ0lEKTsKKworICAgIFJlc3VsdFN0YXR1cyBmbHVzaCgpOworCisgICAgUmVzdWx0U3RhdHVzIGFsbG9jYXRlKGNvbnN0IHN0ZDo6dmVjdG9yPHVpbnQ4X3Q+ICZwYXJhbXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgIG5hdGl2ZV9oYW5kbGVfdCAqKmhhbmRsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgc3RkOjpzaGFyZWRfcHRyPEJ1ZmZlclBvb2xEYXRhPiAqYnVmZmVyKTsKKworICAgIFJlc3VsdFN0YXR1cyByZWNlaXZlKAorICAgICAgICAgICAgVHJhbnNhY3Rpb25JZCB0cmFuc2FjdGlvbklkLCBCdWZmZXJJZCBidWZmZXJJZCwKKyAgICAgICAgICAgIGludDY0X3QgdGltZXN0YW1wVXMsCisgICAgICAgICAgICBuYXRpdmVfaGFuZGxlX3QgKipoYW5kbGUsIHN0ZDo6c2hhcmVkX3B0cjxCdWZmZXJQb29sRGF0YT4gKmJ1ZmZlcik7CisKKyAgICB2b2lkIHBvc3RCdWZmZXJSZWxlYXNlKEJ1ZmZlcklkIGJ1ZmZlcklkKTsKKworICAgIGJvb2wgcG9zdFNlbmQoCisgICAgICAgICAgICBCdWZmZXJJZCBidWZmZXJJZCwgQ29ubmVjdGlvbklkIHJlY2VpdmVyLAorICAgICAgICAgICAgVHJhbnNhY3Rpb25JZCAqdHJhbnNhY3Rpb25JZCwgaW50NjRfdCAqdGltZXN0YW1wVXMpOworcHJpdmF0ZToKKworICAgIGJvb2wgcG9zdFJlY2VpdmUoCisgICAgICAgICAgICBCdWZmZXJJZCBidWZmZXJJZCwgVHJhbnNhY3Rpb25JZCB0cmFuc2FjdGlvbklkLAorICAgICAgICAgICAgaW50NjRfdCB0aW1lc3RhbXBVcyk7CisKKyAgICBib29sIHBvc3RSZWNlaXZlUmVzdWx0KAorICAgICAgICAgICAgQnVmZmVySWQgYnVmZmVySWQsIFRyYW5zYWN0aW9uSWQgdHJhbnNhY3Rpb25JZCwgYm9vbCByZXN1bHQsIGJvb2wgKm5lZWRzU3luYyk7CisKKyAgICB2b2lkIHRyeVN5bmNGcm9tUmVtb3RlKCk7CisKKyAgICBib29sIHN5bmNSZWxlYXNlZCh1aW50MzJfdCBtc2dJZCA9IDApOworCisgICAgdm9pZCBldmljdENhY2hlcyhib29sIGNsZWFyQ2FjaGUgPSBmYWxzZSk7CisKKyAgICB2b2lkIGludmFsaWRhdGVCdWZmZXIoQnVmZmVySWQgaWQpOworCisgICAgdm9pZCBpbnZhbGlkYXRlUmFuZ2UoQnVmZmVySWQgZnJvbSwgQnVmZmVySWQgdG8pOworCisgICAgUmVzdWx0U3RhdHVzIGFsbG9jYXRlQnVmZmVySGFuZGxlKAorICAgICAgICAgICAgY29uc3Qgc3RkOjp2ZWN0b3I8dWludDhfdD4mIHBhcmFtcywgQnVmZmVySWQgKmJ1ZmZlcklkLAorICAgICAgICAgICAgbmF0aXZlX2hhbmRsZV90ICoqaGFuZGxlKTsKKworICAgIFJlc3VsdFN0YXR1cyBmZXRjaEJ1ZmZlckhhbmRsZSgKKyAgICAgICAgICAgIFRyYW5zYWN0aW9uSWQgdHJhbnNhY3Rpb25JZCwgQnVmZmVySWQgYnVmZmVySWQsCisgICAgICAgICAgICBuYXRpdmVfaGFuZGxlX3QgKipoYW5kbGUpOworCisgICAgc3RydWN0IEJsb2NrUG9vbERhdGFEdG9yOworICAgIHN0cnVjdCBDbGllbnRCdWZmZXI7CisKKyAgICBib29sIG1Mb2NhbDsKKyAgICBib29sIG1WYWxpZDsKKyAgICBzcDxJQWNjZXNzb3I+IG1BY2Nlc3NvcjsKKyAgICBzcDxDb25uZWN0aW9uPiBtTG9jYWxDb25uZWN0aW9uOworICAgIHNwPElDb25uZWN0aW9uPiBtUmVtb3RlQ29ubmVjdGlvbjsKKyAgICB1aW50MzJfdCBtU2VxSWQ7CisgICAgQ29ubmVjdGlvbklkIG1Db25uZWN0aW9uSWQ7CisgICAgaW50NjRfdCBtTGFzdEV2aWN0Q2FjaGVVczsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8QnVmZmVySW52YWxpZGF0aW9uTGlzdGVuZXI+IG1JbnZhbGlkYXRpb25MaXN0ZW5lcjsKKworICAgIC8vIENhY2hlZEJ1ZmZlcnMKKyAgICBzdHJ1Y3QgQnVmZmVyQ2FjaGUgeworICAgICAgICBzdGQ6Om11dGV4IG1Mb2NrOworICAgICAgICBib29sIG1DcmVhdGluZzsKKyAgICAgICAgc3RkOjpjb25kaXRpb25fdmFyaWFibGUgbUNyZWF0ZUN2OworICAgICAgICBzdGQ6Om1hcDxCdWZmZXJJZCwgc3RkOjp1bmlxdWVfcHRyPENsaWVudEJ1ZmZlcj4+IG1CdWZmZXJzOworICAgICAgICBpbnQgbUFjdGl2ZTsKKyAgICAgICAgaW50NjRfdCBtTGFzdENoYW5nZVVzOworCisgICAgICAgIEJ1ZmZlckNhY2hlKCkgOiBtQ3JlYXRpbmcoZmFsc2UpLCBtQWN0aXZlKDApLCBtTGFzdENoYW5nZVVzKGdldFRpbWVzdGFtcE5vdygpKSB7fQorCisgICAgICAgIHZvaWQgaW5jQWN0aXZlX2woKSB7CisgICAgICAgICAgICArK21BY3RpdmU7CisgICAgICAgICAgICBtTGFzdENoYW5nZVVzID0gZ2V0VGltZXN0YW1wTm93KCk7CisgICAgICAgIH0KKworICAgICAgICB2b2lkIGRlY0FjdGl2ZV9sKCkgeworICAgICAgICAgICAgLS1tQWN0aXZlOworICAgICAgICAgICAgbUxhc3RDaGFuZ2VVcyA9IGdldFRpbWVzdGFtcE5vdygpOworICAgICAgICB9CisgICAgfSBtQ2FjaGU7CisKKyAgICAvLyBGTVEgLSByZWxlYXNlIG5vdGlmaWVyCisgICAgc3RydWN0IFJlbGVhc2VDYWNoZSB7CisgICAgICAgIHN0ZDo6bXV0ZXggbUxvY2s7CisgICAgICAgIC8vIFRPRE86IHVzZSBvbmx5IG9uZSBsaXN0Pyh1c2luZyBvbmUgbGlzdCBtYXkgZGVhbHkgc2VuZGluZyBtZXNzYWdlcz8pCisgICAgICAgIHN0ZDo6bGlzdDxCdWZmZXJJZD4gbVJlbGVhc2luZ0lkczsKKyAgICAgICAgc3RkOjpsaXN0PEJ1ZmZlcklkPiBtUmVsZWFzZWRJZHM7CisgICAgICAgIHVpbnQzMl90IG1JbnZhbGlkYXRlSWQ7IC8vIFRPRE86IGludmFsaWRhdGlvbiBBQ0sgdG8gYnVmZmVycG9vbAorICAgICAgICBib29sIG1JbnZhbGlkYXRlQWNrOworICAgICAgICBzdGQ6OnVuaXF1ZV9wdHI8QnVmZmVyU3RhdHVzQ2hhbm5lbD4gbVN0YXR1c0NoYW5uZWw7CisKKyAgICAgICAgUmVsZWFzZUNhY2hlKCkgOiBtSW52YWxpZGF0ZUlkKDApLCBtSW52YWxpZGF0ZUFjayh0cnVlKSB7fQorICAgIH0gbVJlbGVhc2luZzsKKworICAgIC8vIFRoaXMgbG9jayBpcyBoZWxkIGR1cmluZyBzeW5jaHJvbml6YXRpb24gZnJvbSByZW1vdGUgc2lkZS4KKyAgICAvLyBJbiBvcmRlciB0byBtaW5pbWl6ZSByZW1vdGUgY2FsbHMgYW5kIGxvY2tpbmcgZHVydGFpb24sIHRoaXMgbG9jayBpcyBoZWxkCisgICAgLy8gYnkgYmVzdCBlZmZvcnQgYXBwcm9hY2ggdXNpbmcgdHJ5X2xvY2soKS4KKyAgICBzdGQ6Om11dGV4IG1SZW1vdGVTeW5jTG9jazsKK307CisKK3N0cnVjdCBCdWZmZXJQb29sQ2xpZW50OjpJbXBsOjpCbG9ja1Bvb2xEYXRhRHRvciB7CisgICAgQmxvY2tQb29sRGF0YUR0b3IoY29uc3Qgc3RkOjpzaGFyZWRfcHRyPEJ1ZmZlclBvb2xDbGllbnQ6OkltcGw+ICZpbXBsKQorICAgICAgICAgICAgOiBtSW1wbChpbXBsKSB7fQorCisgICAgdm9pZCBvcGVyYXRvcigpKEJ1ZmZlclBvb2xEYXRhICpidWZmZXIpIHsKKyAgICAgICAgQnVmZmVySWQgaWQgPSBidWZmZXItPm1JZDsKKyAgICAgICAgZGVsZXRlIGJ1ZmZlcjsKKworICAgICAgICBhdXRvIGltcGwgPSBtSW1wbC5sb2NrKCk7CisgICAgICAgIGlmIChpbXBsICYmIGltcGwtPmlzVmFsaWQoKSkgeworICAgICAgICAgICAgaW1wbC0+cG9zdEJ1ZmZlclJlbGVhc2UoaWQpOworICAgICAgICB9CisgICAgfQorICAgIGNvbnN0IHN0ZDo6d2Vha19wdHI8QnVmZmVyUG9vbENsaWVudDo6SW1wbD4gbUltcGw7Cit9OworCitzdHJ1Y3QgQnVmZmVyUG9vbENsaWVudDo6SW1wbDo6Q2xpZW50QnVmZmVyIHsKK3ByaXZhdGU6CisgICAgaW50NjRfdCBtRXhwaXJlVXM7CisgICAgYm9vbCBtSGFzQ2FjaGU7CisgICAgQ29ubmVjdGlvbklkIG1Db25uZWN0aW9uSWQ7CisgICAgQnVmZmVySWQgbUlkOworICAgIG5hdGl2ZV9oYW5kbGVfdCAqbUhhbmRsZTsKKyAgICBzdGQ6OndlYWtfcHRyPEJ1ZmZlclBvb2xEYXRhPiBtQ2FjaGU7CisKKyAgICB2b2lkIHVwZGF0ZUV4cGlyZSgpIHsKKyAgICAgICAgbUV4cGlyZVVzID0gZ2V0VGltZXN0YW1wTm93KCkgKyBrQ2FjaGVUdGxVczsKKyAgICB9CisKK3B1YmxpYzoKKyAgICBDbGllbnRCdWZmZXIoCisgICAgICAgICAgICBDb25uZWN0aW9uSWQgY29ubmVjdGlvbklkLCBCdWZmZXJJZCBpZCwgbmF0aXZlX2hhbmRsZV90ICpoYW5kbGUpCisgICAgICAgICAgICA6IG1IYXNDYWNoZShmYWxzZSksIG1Db25uZWN0aW9uSWQoY29ubmVjdGlvbklkKSwKKyAgICAgICAgICAgICAgbUlkKGlkKSwgbUhhbmRsZShoYW5kbGUpIHsKKyAgICAgICAgbUV4cGlyZVVzID0gZ2V0VGltZXN0YW1wTm93KCkgKyBrQ2FjaGVUdGxVczsKKyAgICB9CisKKyAgICB+Q2xpZW50QnVmZmVyKCkgeworICAgICAgICBpZiAobUhhbmRsZSkgeworICAgICAgICAgICAgbmF0aXZlX2hhbmRsZV9jbG9zZShtSGFuZGxlKTsKKyAgICAgICAgICAgIG5hdGl2ZV9oYW5kbGVfZGVsZXRlKG1IYW5kbGUpOworICAgICAgICB9CisgICAgfQorCisgICAgQnVmZmVySWQgaWQoKSBjb25zdCB7CisgICAgICAgIHJldHVybiBtSWQ7CisgICAgfQorCisgICAgYm9vbCBleHBpcmUoKSBjb25zdCB7CisgICAgICAgIGludDY0X3Qgbm93ID0gZ2V0VGltZXN0YW1wTm93KCk7CisgICAgICAgIHJldHVybiBub3cgPj0gbUV4cGlyZVVzOworICAgIH0KKworICAgIGJvb2wgaGFzQ2FjaGUoKSBjb25zdCB7CisgICAgICAgIHJldHVybiBtSGFzQ2FjaGU7CisgICAgfQorCisgICAgc3RkOjpzaGFyZWRfcHRyPEJ1ZmZlclBvb2xEYXRhPiBmZXRjaENhY2hlKG5hdGl2ZV9oYW5kbGVfdCAqKnBIYW5kbGUpIHsKKyAgICAgICAgaWYgKG1IYXNDYWNoZSkgeworICAgICAgICAgICAgc3RkOjpzaGFyZWRfcHRyPEJ1ZmZlclBvb2xEYXRhPiBjYWNoZSA9IG1DYWNoZS5sb2NrKCk7CisgICAgICAgICAgICBpZiAoY2FjaGUpIHsKKyAgICAgICAgICAgICAgICAqcEhhbmRsZSA9IG1IYW5kbGU7CisgICAgICAgICAgICB9CisgICAgICAgICAgICByZXR1cm4gY2FjaGU7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgfQorCisgICAgc3RkOjpzaGFyZWRfcHRyPEJ1ZmZlclBvb2xEYXRhPiBjcmVhdGVDYWNoZSgKKyAgICAgICAgICAgIGNvbnN0IHN0ZDo6c2hhcmVkX3B0cjxCdWZmZXJQb29sQ2xpZW50OjpJbXBsPiAmaW1wbCwKKyAgICAgICAgICAgIG5hdGl2ZV9oYW5kbGVfdCAqKnBIYW5kbGUpIHsKKyAgICAgICAgaWYgKCFtSGFzQ2FjaGUpIHsKKyAgICAgICAgICAgIC8vIEFsbG9jYXRlcyBhIHJhdyBwdHIgaW4gb3JkZXIgdG8gYXZvaWQgc2VuZGluZyAjcG9zdEJ1ZmZlclJlbGVhc2UKKyAgICAgICAgICAgIC8vIGZyb20gZGVsZXRlciwgaW4gY2FzZSBvZiBuYXRpdmVfaGFuZGxlX2Nsb25lIGZhaWx1cmUuCisgICAgICAgICAgICBCdWZmZXJQb29sRGF0YSAqcHRyID0gbmV3IEJ1ZmZlclBvb2xEYXRhKG1Db25uZWN0aW9uSWQsIG1JZCk7CisgICAgICAgICAgICBpZiAocHRyKSB7CisgICAgICAgICAgICAgICAgc3RkOjpzaGFyZWRfcHRyPEJ1ZmZlclBvb2xEYXRhPiBjYWNoZShwdHIsIEJsb2NrUG9vbERhdGFEdG9yKGltcGwpKTsKKyAgICAgICAgICAgICAgICBpZiAoY2FjaGUpIHsKKyAgICAgICAgICAgICAgICAgICAgbUNhY2hlID0gY2FjaGU7CisgICAgICAgICAgICAgICAgICAgIG1IYXNDYWNoZSA9IHRydWU7CisgICAgICAgICAgICAgICAgICAgICpwSGFuZGxlID0gbUhhbmRsZTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNhY2hlOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChwdHIpIHsKKyAgICAgICAgICAgICAgICBkZWxldGUgcHRyOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIHJldHVybiBudWxscHRyOworICAgIH0KKworICAgIGJvb2wgb25DYWNoZVJlbGVhc2UoKSB7CisgICAgICAgIGlmIChtSGFzQ2FjaGUpIHsKKyAgICAgICAgICAgIC8vIFRPRE86IHZlcmlmeSBtQ2FjaGUgaXMgbm90IHZhbGlkOworICAgICAgICAgICAgdXBkYXRlRXhwaXJlKCk7CisgICAgICAgICAgICBtSGFzQ2FjaGUgPSBmYWxzZTsKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9Cit9OworCitCdWZmZXJQb29sQ2xpZW50OjpJbXBsOjpJbXBsKGNvbnN0IHNwPEFjY2Vzc29yPiAmYWNjZXNzb3IsIGNvbnN0IHNwPElPYnNlcnZlcj4gJm9ic2VydmVyKQorICAgIDogbUxvY2FsKHRydWUpLCBtVmFsaWQoZmFsc2UpLCBtQWNjZXNzb3IoYWNjZXNzb3IpLCBtU2VxSWQoMCksCisgICAgICBtTGFzdEV2aWN0Q2FjaGVVcyhnZXRUaW1lc3RhbXBOb3coKSkgeworICAgIGNvbnN0IFN0YXR1c0Rlc2NyaXB0b3IgKnN0YXR1c0Rlc2M7CisgICAgY29uc3QgSW52YWxpZGF0aW9uRGVzY3JpcHRvciAqaW52RGVzYzsKKyAgICBSZXN1bHRTdGF0dXMgc3RhdHVzID0gYWNjZXNzb3ItPmNvbm5lY3QoCisgICAgICAgICAgICBvYnNlcnZlciwgdHJ1ZSwKKyAgICAgICAgICAgICZtTG9jYWxDb25uZWN0aW9uLCAmbUNvbm5lY3Rpb25JZCwgJm1SZWxlYXNpbmcubUludmFsaWRhdGVJZCwKKyAgICAgICAgICAgICZzdGF0dXNEZXNjLCAmaW52RGVzYyk7CisgICAgaWYgKHN0YXR1cyA9PSBSZXN1bHRTdGF0dXM6Ok9LKSB7CisgICAgICAgIG1SZWxlYXNpbmcubVN0YXR1c0NoYW5uZWwgPQorICAgICAgICAgICAgICAgIHN0ZDo6bWFrZV91bmlxdWU8QnVmZmVyU3RhdHVzQ2hhbm5lbD4oKnN0YXR1c0Rlc2MpOworICAgICAgICBtSW52YWxpZGF0aW9uTGlzdGVuZXIgPQorICAgICAgICAgICAgICAgIHN0ZDo6bWFrZV91bmlxdWU8QnVmZmVySW52YWxpZGF0aW9uTGlzdGVuZXI+KCppbnZEZXNjKTsKKyAgICAgICAgbVZhbGlkID0gbVJlbGVhc2luZy5tU3RhdHVzQ2hhbm5lbCAmJgorICAgICAgICAgICAgICAgIG1SZWxlYXNpbmcubVN0YXR1c0NoYW5uZWwtPmlzVmFsaWQoKSAmJgorICAgICAgICAgICAgICAgIG1JbnZhbGlkYXRpb25MaXN0ZW5lciAmJgorICAgICAgICAgICAgICAgIG1JbnZhbGlkYXRpb25MaXN0ZW5lci0+aXNWYWxpZCgpOworICAgIH0KK30KKworQnVmZmVyUG9vbENsaWVudDo6SW1wbDo6SW1wbChjb25zdCBzcDxJQWNjZXNzb3I+ICZhY2Nlc3NvciwgY29uc3Qgc3A8SU9ic2VydmVyPiAmb2JzZXJ2ZXIpCisgICAgOiBtTG9jYWwoZmFsc2UpLCBtVmFsaWQoZmFsc2UpLCBtQWNjZXNzb3IoYWNjZXNzb3IpLCBtU2VxSWQoMCksCisgICAgICBtTGFzdEV2aWN0Q2FjaGVVcyhnZXRUaW1lc3RhbXBOb3coKSkgeworICAgIGJvb2wgdmFsaWQgPSBmYWxzZTsKKyAgICBzcDxJQ29ubmVjdGlvbj4mIG91dENvbm5lY3Rpb24gPSBtUmVtb3RlQ29ubmVjdGlvbjsKKyAgICBDb25uZWN0aW9uSWQmIGlkID0gbUNvbm5lY3Rpb25JZDsKKyAgICB1aW50MzJfdCYgb3V0TXNnSWQgPSBtUmVsZWFzaW5nLm1JbnZhbGlkYXRlSWQ7CisgICAgc3RkOjp1bmlxdWVfcHRyPEJ1ZmZlclN0YXR1c0NoYW5uZWw+JiBvdXRDaGFubmVsID0KKyAgICAgICAgICAgIG1SZWxlYXNpbmcubVN0YXR1c0NoYW5uZWw7CisgICAgc3RkOjp1bmlxdWVfcHRyPEJ1ZmZlckludmFsaWRhdGlvbkxpc3RlbmVyPiYgb3V0T2JzZXJ2ZXIgPQorICAgICAgICAgICAgbUludmFsaWRhdGlvbkxpc3RlbmVyOworICAgIFJldHVybjx2b2lkPiB0cmFuc1Jlc3VsdCA9IGFjY2Vzc29yLT5jb25uZWN0KAorICAgICAgICAgICAgb2JzZXJ2ZXIsCisgICAgICAgICAgICBbJnZhbGlkLCAmb3V0Q29ubmVjdGlvbiwgJmlkLCAmb3V0TXNnSWQsICZvdXRDaGFubmVsLCAmb3V0T2JzZXJ2ZXJdCisgICAgICAgICAgICAoUmVzdWx0U3RhdHVzIHN0YXR1cywgc3A8SUNvbm5lY3Rpb24+IGNvbm5lY3Rpb24sCisgICAgICAgICAgICAgQ29ubmVjdGlvbklkIGNvbm5lY3Rpb25JZCwgdWludDMyX3QgbXNnSWQsCisgICAgICAgICAgICAgY29uc3QgU3RhdHVzRGVzY3JpcHRvciYgc3RhdHVzRGVzYywKKyAgICAgICAgICAgICBjb25zdCBJbnZhbGlkYXRpb25EZXNjcmlwdG9yJiBpbnZEZXNjKSB7CisgICAgICAgICAgICAgICAgaWYgKHN0YXR1cyA9PSBSZXN1bHRTdGF0dXM6Ok9LKSB7CisgICAgICAgICAgICAgICAgICAgIG91dENvbm5lY3Rpb24gPSBjb25uZWN0aW9uOworICAgICAgICAgICAgICAgICAgICBpZCA9IGNvbm5lY3Rpb25JZDsKKyAgICAgICAgICAgICAgICAgICAgb3V0TXNnSWQgPSBtc2dJZDsKKyAgICAgICAgICAgICAgICAgICAgb3V0Q2hhbm5lbCA9IHN0ZDo6bWFrZV91bmlxdWU8QnVmZmVyU3RhdHVzQ2hhbm5lbD4oc3RhdHVzRGVzYyk7CisgICAgICAgICAgICAgICAgICAgIG91dE9ic2VydmVyID0gc3RkOjptYWtlX3VuaXF1ZTxCdWZmZXJJbnZhbGlkYXRpb25MaXN0ZW5lcj4oaW52RGVzYyk7CisgICAgICAgICAgICAgICAgICAgIGlmIChvdXRDaGFubmVsICYmIG91dENoYW5uZWwtPmlzVmFsaWQoKSAmJgorICAgICAgICAgICAgICAgICAgICAgICAgb3V0T2JzZXJ2ZXIgJiYgb3V0T2JzZXJ2ZXItPmlzVmFsaWQoKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgdmFsaWQgPSB0cnVlOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfSk7CisgICAgbVZhbGlkID0gdHJhbnNSZXN1bHQuaXNPaygpICYmIHZhbGlkOworfQorCitib29sIEJ1ZmZlclBvb2xDbGllbnQ6OkltcGw6OmlzQWN0aXZlKGludDY0X3QgKmxhc3RUcmFuc2FjdGlvblVzLCBib29sIGNsZWFyQ2FjaGUpIHsKKyAgICBib29sIGFjdGl2ZSA9IGZhbHNlOworICAgIHsKKyAgICAgICAgc3RkOjpsb2NrX2d1YXJkPHN0ZDo6bXV0ZXg+IGxvY2sobUNhY2hlLm1Mb2NrKTsKKyAgICAgICAgc3luY1JlbGVhc2VkKCk7CisgICAgICAgIGV2aWN0Q2FjaGVzKGNsZWFyQ2FjaGUpOworICAgICAgICAqbGFzdFRyYW5zYWN0aW9uVXMgPSBtQ2FjaGUubUxhc3RDaGFuZ2VVczsKKyAgICAgICAgYWN0aXZlID0gbUNhY2hlLm1BY3RpdmUgPiAwOworICAgIH0KKyAgICBpZiAobVZhbGlkICYmIG1Mb2NhbCAmJiBtTG9jYWxDb25uZWN0aW9uKSB7CisgICAgICAgIG1Mb2NhbENvbm5lY3Rpb24tPmNsZWFuVXAoY2xlYXJDYWNoZSk7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyAgICByZXR1cm4gYWN0aXZlOworfQorCit2b2lkIEJ1ZmZlclBvb2xDbGllbnQ6OkltcGw6OnJlY2VpdmVJbnZhbGlkYXRpb24odWludDMyX3QgbWVzc2FnZUlkKSB7CisgICAgc3RkOjpsb2NrX2d1YXJkPHN0ZDo6bXV0ZXg+IGxvY2sobUNhY2hlLm1Mb2NrKTsKKyAgICBzeW5jUmVsZWFzZWQobWVzc2FnZUlkKTsKKyAgICAvLyBUT0RPOiBldmljdCBjYWNoZSByZXF1aXJlZD8KK30KKworUmVzdWx0U3RhdHVzIEJ1ZmZlclBvb2xDbGllbnQ6OkltcGw6OmZsdXNoKCkgeworICAgIGlmICghbUxvY2FsIHx8ICFtTG9jYWxDb25uZWN0aW9uIHx8ICFtVmFsaWQpIHsKKyAgICAgICAgcmV0dXJuIFJlc3VsdFN0YXR1czo6Q1JJVElDQUxfRVJST1I7CisgICAgfQorICAgIHsKKyAgICAgICAgc3RkOjp1bmlxdWVfbG9jazxzdGQ6Om11dGV4PiBsb2NrKG1DYWNoZS5tTG9jayk7CisgICAgICAgIHN5bmNSZWxlYXNlZCgpOworICAgICAgICBldmljdENhY2hlcygpOworICAgICAgICByZXR1cm4gbUxvY2FsQ29ubmVjdGlvbi0+Zmx1c2goKTsKKyAgICB9Cit9CisKK1Jlc3VsdFN0YXR1cyBCdWZmZXJQb29sQ2xpZW50OjpJbXBsOjphbGxvY2F0ZSgKKyAgICAgICAgY29uc3Qgc3RkOjp2ZWN0b3I8dWludDhfdD4gJnBhcmFtcywKKyAgICAgICAgbmF0aXZlX2hhbmRsZV90ICoqcEhhbmRsZSwKKyAgICAgICAgc3RkOjpzaGFyZWRfcHRyPEJ1ZmZlclBvb2xEYXRhPiAqYnVmZmVyKSB7CisgICAgaWYgKCFtTG9jYWwgfHwgIW1Mb2NhbENvbm5lY3Rpb24gfHwgIW1WYWxpZCkgeworICAgICAgICByZXR1cm4gUmVzdWx0U3RhdHVzOjpDUklUSUNBTF9FUlJPUjsKKyAgICB9CisgICAgQnVmZmVySWQgYnVmZmVySWQ7CisgICAgbmF0aXZlX2hhbmRsZV90ICpoYW5kbGUgPSBudWxscHRyOworICAgIGJ1ZmZlci0+cmVzZXQoKTsKKyAgICBSZXN1bHRTdGF0dXMgc3RhdHVzID0gYWxsb2NhdGVCdWZmZXJIYW5kbGUocGFyYW1zLCAmYnVmZmVySWQsICZoYW5kbGUpOworICAgIGlmIChzdGF0dXMgPT0gUmVzdWx0U3RhdHVzOjpPSykgeworICAgICAgICBpZiAoaGFuZGxlKSB7CisgICAgICAgICAgICBzdGQ6OnVuaXF1ZV9sb2NrPHN0ZDo6bXV0ZXg+IGxvY2sobUNhY2hlLm1Mb2NrKTsKKyAgICAgICAgICAgIHN5bmNSZWxlYXNlZCgpOworICAgICAgICAgICAgZXZpY3RDYWNoZXMoKTsKKyAgICAgICAgICAgIGF1dG8gY2FjaGVJdCA9IG1DYWNoZS5tQnVmZmVycy5maW5kKGJ1ZmZlcklkKTsKKyAgICAgICAgICAgIGlmIChjYWNoZUl0ICE9IG1DYWNoZS5tQnVmZmVycy5lbmQoKSkgeworICAgICAgICAgICAgICAgIC8vIFRPRE86IHZlcmlmeSBpdCBpcyByZWN5Y2xlZC4gKG5vdCBoYXZpbmcgYWN0aXZlIHJlZikKKyAgICAgICAgICAgICAgICBtQ2FjaGUubUJ1ZmZlcnMuZXJhc2UoY2FjaGVJdCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBhdXRvIGNsaWVudEJ1ZmZlciA9IHN0ZDo6bWFrZV91bmlxdWU8Q2xpZW50QnVmZmVyPigKKyAgICAgICAgICAgICAgICAgICAgbUNvbm5lY3Rpb25JZCwgYnVmZmVySWQsIGhhbmRsZSk7CisgICAgICAgICAgICBpZiAoY2xpZW50QnVmZmVyKSB7CisgICAgICAgICAgICAgICAgYXV0byByZXN1bHQgPSBtQ2FjaGUubUJ1ZmZlcnMuaW5zZXJ0KHN0ZDo6bWFrZV9wYWlyKAorICAgICAgICAgICAgICAgICAgICAgICAgYnVmZmVySWQsIHN0ZDo6bW92ZShjbGllbnRCdWZmZXIpKSk7CisgICAgICAgICAgICAgICAgaWYgKHJlc3VsdC5zZWNvbmQpIHsKKyAgICAgICAgICAgICAgICAgICAgKmJ1ZmZlciA9IHJlc3VsdC5maXJzdC0+c2Vjb25kLT5jcmVhdGVDYWNoZSgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaGFyZWRfZnJvbV90aGlzKCksIHBIYW5kbGUpOworICAgICAgICAgICAgICAgICAgICBpZiAoKmJ1ZmZlcikgeworICAgICAgICAgICAgICAgICAgICAgICAgbUNhY2hlLmluY0FjdGl2ZV9sKCk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgaWYgKCEqYnVmZmVyKSB7CisgICAgICAgICAgICBBTE9HVigiY2xpZW50IGNhY2hlIGNyZWF0aW9uIGZhaWx1cmUgJWQ6ICVsbGQiLAorICAgICAgICAgICAgICAgICAgaGFuZGxlICE9IG51bGxwdHIsIChsb25nIGxvbmcpbUNvbm5lY3Rpb25JZCk7CisgICAgICAgICAgICBzdGF0dXMgPSBSZXN1bHRTdGF0dXM6Ok5PX01FTU9SWTsKKyAgICAgICAgICAgIHBvc3RCdWZmZXJSZWxlYXNlKGJ1ZmZlcklkKTsKKyAgICAgICAgfQorICAgIH0KKyAgICByZXR1cm4gc3RhdHVzOworfQorCitSZXN1bHRTdGF0dXMgQnVmZmVyUG9vbENsaWVudDo6SW1wbDo6cmVjZWl2ZSgKKyAgICAgICAgVHJhbnNhY3Rpb25JZCB0cmFuc2FjdGlvbklkLCBCdWZmZXJJZCBidWZmZXJJZCwgaW50NjRfdCB0aW1lc3RhbXBVcywKKyAgICAgICAgbmF0aXZlX2hhbmRsZV90ICoqcEhhbmRsZSwKKyAgICAgICAgc3RkOjpzaGFyZWRfcHRyPEJ1ZmZlclBvb2xEYXRhPiAqYnVmZmVyKSB7CisgICAgaWYgKCFtVmFsaWQpIHsKKyAgICAgICAgcmV0dXJuIFJlc3VsdFN0YXR1czo6Q1JJVElDQUxfRVJST1I7CisgICAgfQorICAgIGlmICh0aW1lc3RhbXBVcyAhPSAwKSB7CisgICAgICAgIHRpbWVzdGFtcFVzICs9IGtSZWNlaXZlVGltZW91dFVzOworICAgIH0KKyAgICBpZiAoIXBvc3RSZWNlaXZlKGJ1ZmZlcklkLCB0cmFuc2FjdGlvbklkLCB0aW1lc3RhbXBVcykpIHsKKyAgICAgICAgcmV0dXJuIFJlc3VsdFN0YXR1czo6Q1JJVElDQUxfRVJST1I7CisgICAgfQorICAgIFJlc3VsdFN0YXR1cyBzdGF0dXMgPSBSZXN1bHRTdGF0dXM6OkNSSVRJQ0FMX0VSUk9SOworICAgIGJ1ZmZlci0+cmVzZXQoKTsKKyAgICB3aGlsZSgxKSB7CisgICAgICAgIHN0ZDo6dW5pcXVlX2xvY2s8c3RkOjptdXRleD4gbG9jayhtQ2FjaGUubUxvY2spOworICAgICAgICBzeW5jUmVsZWFzZWQoKTsKKyAgICAgICAgZXZpY3RDYWNoZXMoKTsKKyAgICAgICAgYXV0byBjYWNoZUl0ID0gbUNhY2hlLm1CdWZmZXJzLmZpbmQoYnVmZmVySWQpOworICAgICAgICBpZiAoY2FjaGVJdCAhPSBtQ2FjaGUubUJ1ZmZlcnMuZW5kKCkpIHsKKyAgICAgICAgICAgIGlmIChjYWNoZUl0LT5zZWNvbmQtPmhhc0NhY2hlKCkpIHsKKyAgICAgICAgICAgICAgICAqYnVmZmVyID0gY2FjaGVJdC0+c2Vjb25kLT5mZXRjaENhY2hlKHBIYW5kbGUpOworICAgICAgICAgICAgICAgIGlmICghKmJ1ZmZlcikgeworICAgICAgICAgICAgICAgICAgICAvLyBjaGVjayB0cmFuc2ZlciB0aW1lX291dAorICAgICAgICAgICAgICAgICAgICBsb2NrLnVubG9jaygpOworICAgICAgICAgICAgICAgICAgICBzdGQ6OnRoaXNfdGhyZWFkOjp5aWVsZCgpOworICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgQUxPR1YoImNsaWVudCByZWNlaXZlIGZyb20gcmVmZXJlbmNlICVsbGQiLCAobG9uZyBsb25nKW1Db25uZWN0aW9uSWQpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAqYnVmZmVyID0gY2FjaGVJdC0+c2Vjb25kLT5jcmVhdGVDYWNoZShzaGFyZWRfZnJvbV90aGlzKCksIHBIYW5kbGUpOworICAgICAgICAgICAgICAgIGlmICgqYnVmZmVyKSB7CisgICAgICAgICAgICAgICAgICAgIG1DYWNoZS5pbmNBY3RpdmVfbCgpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBBTE9HVigiY2xpZW50IHJlY2VpdmUgZnJvbSBjYWNoZSAlbGxkIiwgKGxvbmcgbG9uZyltQ29ubmVjdGlvbklkKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGlmICghbUNhY2hlLm1DcmVhdGluZykgeworICAgICAgICAgICAgICAgIG1DYWNoZS5tQ3JlYXRpbmcgPSB0cnVlOworICAgICAgICAgICAgICAgIGxvY2sudW5sb2NrKCk7CisgICAgICAgICAgICAgICAgbmF0aXZlX2hhbmRsZV90KiBoYW5kbGUgPSBudWxscHRyOworICAgICAgICAgICAgICAgIHN0YXR1cyA9IGZldGNoQnVmZmVySGFuZGxlKHRyYW5zYWN0aW9uSWQsIGJ1ZmZlcklkLCAmaGFuZGxlKTsKKyAgICAgICAgICAgICAgICBsb2NrLmxvY2soKTsKKyAgICAgICAgICAgICAgICBpZiAoc3RhdHVzID09IFJlc3VsdFN0YXR1czo6T0spIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGhhbmRsZSkgeworICAgICAgICAgICAgICAgICAgICAgICAgYXV0byBjbGllbnRCdWZmZXIgPSBzdGQ6Om1ha2VfdW5pcXVlPENsaWVudEJ1ZmZlcj4oCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1Db25uZWN0aW9uSWQsIGJ1ZmZlcklkLCBoYW5kbGUpOworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNsaWVudEJ1ZmZlcikgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF1dG8gcmVzdWx0ID0gbUNhY2hlLm1CdWZmZXJzLmluc2VydCgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZDo6bWFrZV9wYWlyKGJ1ZmZlcklkLCBzdGQ6Om1vdmUoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsaWVudEJ1ZmZlcikpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocmVzdWx0LnNlY29uZCkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqYnVmZmVyID0gcmVzdWx0LmZpcnN0LT5zZWNvbmQtPmNyZWF0ZUNhY2hlKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNoYXJlZF9mcm9tX3RoaXMoKSwgcEhhbmRsZSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgqYnVmZmVyKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtQ2FjaGUuaW5jQWN0aXZlX2woKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBpZiAoISpidWZmZXIpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHN0YXR1cyA9IFJlc3VsdFN0YXR1czo6Tk9fTUVNT1JZOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIG1DYWNoZS5tQ3JlYXRpbmcgPSBmYWxzZTsKKyAgICAgICAgICAgICAgICBsb2NrLnVubG9jaygpOworICAgICAgICAgICAgICAgIG1DYWNoZS5tQ3JlYXRlQ3Yubm90aWZ5X2FsbCgpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICAgICAgbUNhY2hlLm1DcmVhdGVDdi53YWl0KGxvY2spOworICAgICAgICB9CisgICAgfQorICAgIGJvb2wgbmVlZHNTeW5jID0gZmFsc2U7CisgICAgYm9vbCBwb3N0ZWQgPSBwb3N0UmVjZWl2ZVJlc3VsdChidWZmZXJJZCwgdHJhbnNhY3Rpb25JZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKmJ1ZmZlciA/IHRydWUgOiBmYWxzZSwgJm5lZWRzU3luYyk7CisgICAgQUxPR1YoImNsaWVudCByZWNlaXZlICVsbGQgLSAldSA6ICVzICglZCkiLCAobG9uZyBsb25nKW1Db25uZWN0aW9uSWQsIGJ1ZmZlcklkLAorICAgICAgICAgICpidWZmZXIgPyAib2siIDogImZhaWwiLCBwb3N0ZWQpOworICAgIGlmIChtVmFsaWQgJiYgbUxvY2FsICYmIG1Mb2NhbENvbm5lY3Rpb24pIHsKKyAgICAgICAgbUxvY2FsQ29ubmVjdGlvbi0+Y2xlYW5VcChmYWxzZSk7CisgICAgfQorICAgIGlmIChuZWVkc1N5bmMgJiYgbVJlbW90ZUNvbm5lY3Rpb24pIHsKKyAgICAgICAgdHJ5U3luY0Zyb21SZW1vdGUoKTsKKyAgICB9CisgICAgaWYgKCpidWZmZXIpIHsKKyAgICAgICAgaWYgKCFwb3N0ZWQpIHsKKyAgICAgICAgICAgIGJ1ZmZlci0+cmVzZXQoKTsKKyAgICAgICAgICAgIHJldHVybiBSZXN1bHRTdGF0dXM6OkNSSVRJQ0FMX0VSUk9SOworICAgICAgICB9CisgICAgICAgIHJldHVybiBSZXN1bHRTdGF0dXM6Ok9LOworICAgIH0KKyAgICByZXR1cm4gc3RhdHVzOworfQorCisKK3ZvaWQgQnVmZmVyUG9vbENsaWVudDo6SW1wbDo6cG9zdEJ1ZmZlclJlbGVhc2UoQnVmZmVySWQgYnVmZmVySWQpIHsKKyAgICBzdGQ6OmxvY2tfZ3VhcmQ8c3RkOjptdXRleD4gbG9jayhtUmVsZWFzaW5nLm1Mb2NrKTsKKyAgICBtUmVsZWFzaW5nLm1SZWxlYXNpbmdJZHMucHVzaF9iYWNrKGJ1ZmZlcklkKTsKKyAgICBtUmVsZWFzaW5nLm1TdGF0dXNDaGFubmVsLT5wb3N0QnVmZmVyUmVsZWFzZSgKKyAgICAgICAgICAgIG1Db25uZWN0aW9uSWQsIG1SZWxlYXNpbmcubVJlbGVhc2luZ0lkcywgbVJlbGVhc2luZy5tUmVsZWFzZWRJZHMpOworfQorCisvLyBUT0RPOiByZXZpc2UgYWQtaG9jIHBvc3RpbmcgZGF0YSBzdHJ1Y3R1cmUKK2Jvb2wgQnVmZmVyUG9vbENsaWVudDo6SW1wbDo6cG9zdFNlbmQoCisgICAgICAgIEJ1ZmZlcklkIGJ1ZmZlcklkLCBDb25uZWN0aW9uSWQgcmVjZWl2ZXIsCisgICAgICAgIFRyYW5zYWN0aW9uSWQgKnRyYW5zYWN0aW9uSWQsIGludDY0X3QgKnRpbWVzdGFtcFVzKSB7CisgICAgeworICAgICAgICAvLyBUT0RPOiBkb24ndCBuZWVkIHRvIGNhbGwgc3luY1JlbGVhc2VkIGV2ZXJ5IHRpbWUKKyAgICAgICAgc3RkOjpsb2NrX2d1YXJkPHN0ZDo6bXV0ZXg+IGxvY2sobUNhY2hlLm1Mb2NrKTsKKyAgICAgICAgc3luY1JlbGVhc2VkKCk7CisgICAgfQorICAgIGJvb2wgcmV0ID0gZmFsc2U7CisgICAgYm9vbCBuZWVkc1N5bmMgPSBmYWxzZTsKKyAgICB7CisgICAgICAgIHN0ZDo6bG9ja19ndWFyZDxzdGQ6Om11dGV4PiBsb2NrKG1SZWxlYXNpbmcubUxvY2spOworICAgICAgICAqdGltZXN0YW1wVXMgPSBnZXRUaW1lc3RhbXBOb3coKTsKKyAgICAgICAgKnRyYW5zYWN0aW9uSWQgPSAobUNvbm5lY3Rpb25JZCA8PCAzMikgfCBtU2VxSWQrKzsKKyAgICAgICAgLy8gVE9ETzogcmV0cnksIGFkZCB0aW1lb3V0LCB0YXJnZXQ/CisgICAgICAgIHJldCA9ICBtUmVsZWFzaW5nLm1TdGF0dXNDaGFubmVsLT5wb3N0QnVmZmVyU3RhdHVzTWVzc2FnZSgKKyAgICAgICAgICAgICAgICAqdHJhbnNhY3Rpb25JZCwgYnVmZmVySWQsIEJ1ZmZlclN0YXR1czo6VFJBTlNGRVJfVE8sIG1Db25uZWN0aW9uSWQsCisgICAgICAgICAgICAgICAgcmVjZWl2ZXIsIG1SZWxlYXNpbmcubVJlbGVhc2luZ0lkcywgbVJlbGVhc2luZy5tUmVsZWFzZWRJZHMpOworICAgICAgICBuZWVkc1N5bmMgPSAhbUxvY2FsICYmIG1SZWxlYXNpbmcubVN0YXR1c0NoYW5uZWwtPm5lZWRzU3luYygpOworICAgIH0KKyAgICBpZiAobVZhbGlkICYmIG1Mb2NhbCAmJiBtTG9jYWxDb25uZWN0aW9uKSB7CisgICAgICAgIG1Mb2NhbENvbm5lY3Rpb24tPmNsZWFuVXAoZmFsc2UpOworICAgIH0KKyAgICBpZiAobmVlZHNTeW5jICYmIG1SZW1vdGVDb25uZWN0aW9uKSB7CisgICAgICAgIHRyeVN5bmNGcm9tUmVtb3RlKCk7CisgICAgfQorICAgIHJldHVybiByZXQ7Cit9CisKK2Jvb2wgQnVmZmVyUG9vbENsaWVudDo6SW1wbDo6cG9zdFJlY2VpdmUoCisgICAgICAgIEJ1ZmZlcklkIGJ1ZmZlcklkLCBUcmFuc2FjdGlvbklkIHRyYW5zYWN0aW9uSWQsIGludDY0X3QgdGltZXN0YW1wVXMpIHsKKyAgICBmb3IgKGludCBpID0gMDsgaSA8IGtQb3N0TWF4UmV0cnk7ICsraSkgeworICAgICAgICBzdGQ6OnVuaXF1ZV9sb2NrPHN0ZDo6bXV0ZXg+IGxvY2sobVJlbGVhc2luZy5tTG9jayk7CisgICAgICAgIGludDY0X3Qgbm93ID0gZ2V0VGltZXN0YW1wTm93KCk7CisgICAgICAgIGlmICh0aW1lc3RhbXBVcyA9PSAwIHx8IG5vdyA8IHRpbWVzdGFtcFVzKSB7CisgICAgICAgICAgICBib29sIHJlc3VsdCA9IG1SZWxlYXNpbmcubVN0YXR1c0NoYW5uZWwtPnBvc3RCdWZmZXJTdGF0dXNNZXNzYWdlKAorICAgICAgICAgICAgICAgICAgICB0cmFuc2FjdGlvbklkLCBidWZmZXJJZCwgQnVmZmVyU3RhdHVzOjpUUkFOU0ZFUl9GUk9NLAorICAgICAgICAgICAgICAgICAgICBtQ29ubmVjdGlvbklkLCAtMSwgbVJlbGVhc2luZy5tUmVsZWFzaW5nSWRzLAorICAgICAgICAgICAgICAgICAgICBtUmVsZWFzaW5nLm1SZWxlYXNlZElkcyk7CisgICAgICAgICAgICBpZiAocmVzdWx0KSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBsb2NrLnVubG9jaygpOworICAgICAgICAgICAgc3RkOjp0aGlzX3RocmVhZDo6eWllbGQoKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIG1SZWxlYXNpbmcubVN0YXR1c0NoYW5uZWwtPnBvc3RCdWZmZXJTdGF0dXNNZXNzYWdlKAorICAgICAgICAgICAgICAgICAgICB0cmFuc2FjdGlvbklkLCBidWZmZXJJZCwgQnVmZmVyU3RhdHVzOjpUUkFOU0ZFUl9USU1FT1VULAorICAgICAgICAgICAgICAgICAgICBtQ29ubmVjdGlvbklkLCAtMSwgbVJlbGVhc2luZy5tUmVsZWFzaW5nSWRzLAorICAgICAgICAgICAgICAgICAgICBtUmVsZWFzaW5nLm1SZWxlYXNlZElkcyk7CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICB9CisgICAgcmV0dXJuIGZhbHNlOworfQorCitib29sIEJ1ZmZlclBvb2xDbGllbnQ6OkltcGw6OnBvc3RSZWNlaXZlUmVzdWx0KAorICAgICAgICBCdWZmZXJJZCBidWZmZXJJZCwgVHJhbnNhY3Rpb25JZCB0cmFuc2FjdGlvbklkLCBib29sIHJlc3VsdCwgYm9vbCAqbmVlZHNTeW5jKSB7CisgICAgc3RkOjpsb2NrX2d1YXJkPHN0ZDo6bXV0ZXg+IGxvY2sobVJlbGVhc2luZy5tTG9jayk7CisgICAgLy8gVE9ETzogcmV0cnksIGFkZCB0aW1lb3V0CisgICAgYm9vbCByZXQgPSBtUmVsZWFzaW5nLm1TdGF0dXNDaGFubmVsLT5wb3N0QnVmZmVyU3RhdHVzTWVzc2FnZSgKKyAgICAgICAgICAgIHRyYW5zYWN0aW9uSWQsIGJ1ZmZlcklkLAorICAgICAgICAgICAgcmVzdWx0ID8gQnVmZmVyU3RhdHVzOjpUUkFOU0ZFUl9PSyA6IEJ1ZmZlclN0YXR1czo6VFJBTlNGRVJfRVJST1IsCisgICAgICAgICAgICBtQ29ubmVjdGlvbklkLCAtMSwgbVJlbGVhc2luZy5tUmVsZWFzaW5nSWRzLAorICAgICAgICAgICAgbVJlbGVhc2luZy5tUmVsZWFzZWRJZHMpOworICAgICpuZWVkc1N5bmMgPSAhbUxvY2FsICYmIG1SZWxlYXNpbmcubVN0YXR1c0NoYW5uZWwtPm5lZWRzU3luYygpOworICAgIHJldHVybiByZXQ7Cit9CisKK3ZvaWQgQnVmZmVyUG9vbENsaWVudDo6SW1wbDo6dHJ5U3luY0Zyb21SZW1vdGUoKSB7CisgICAgaWYgKG1SZW1vdGVTeW5jTG9jay50cnlfbG9jaygpKSB7CisgICAgICAgIGJvb2wgbmVlZHNTeW5jID0gZmFsc2U7CisgICAgICAgIHsKKyAgICAgICAgICAgIHN0ZDo6bG9ja19ndWFyZDxzdGQ6Om11dGV4PiBsb2NrKG1SZWxlYXNpbmcubUxvY2spOworICAgICAgICAgICAgbmVlZHNTeW5jID0gbVJlbGVhc2luZy5tU3RhdHVzQ2hhbm5lbC0+bmVlZHNTeW5jKCk7CisgICAgICAgIH0KKyAgICAgICAgaWYgKG5lZWRzU3luYykgeworICAgICAgICAgICAgVHJhbnNhY3Rpb25JZCB0cmFuc2FjdGlvbklkID0gKG1Db25uZWN0aW9uSWQgPDwgMzIpOworICAgICAgICAgICAgQnVmZmVySWQgYnVmZmVySWQgPSBDb25uZWN0aW9uOjpTWU5DX0JVRkZFUklEOworICAgICAgICAgICAgUmV0dXJuPHZvaWQ+IHRyYW5zUmVzdWx0ID0gbVJlbW90ZUNvbm5lY3Rpb24tPmZldGNoKAorICAgICAgICAgICAgICAgICAgICB0cmFuc2FjdGlvbklkLCBidWZmZXJJZCwKKyAgICAgICAgICAgICAgICAgICAgW10KKyAgICAgICAgICAgICAgICAgICAgKFJlc3VsdFN0YXR1cyBvdXRTdGF0dXMsIEJ1ZmZlciBvdXRCdWZmZXIpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICh2b2lkKSBvdXRTdGF0dXM7CisgICAgICAgICAgICAgICAgICAgICAgICAodm9pZCkgb3V0QnVmZmVyOworICAgICAgICAgICAgICAgICAgICB9KTsKKyAgICAgICAgfQorICAgICAgICBtUmVtb3RlU3luY0xvY2sudW5sb2NrKCk7CisgICAgfQorfQorCisvLyBzaG91bGQgaGF2ZSBtQ2FjaGUubUxvY2sKK2Jvb2wgQnVmZmVyUG9vbENsaWVudDo6SW1wbDo6c3luY1JlbGVhc2VkKHVpbnQzMl90IG1lc3NhZ2VJZCkgeworICAgIGJvb2wgY2xlYXJlZCA9IGZhbHNlOworICAgIHsKKyAgICAgICAgc3RkOjpsb2NrX2d1YXJkPHN0ZDo6bXV0ZXg+IGxvY2sobVJlbGVhc2luZy5tTG9jayk7CisgICAgICAgIGlmIChtUmVsZWFzaW5nLm1SZWxlYXNpbmdJZHMuc2l6ZSgpID4gMCkgeworICAgICAgICAgICAgbVJlbGVhc2luZy5tU3RhdHVzQ2hhbm5lbC0+cG9zdEJ1ZmZlclJlbGVhc2UoCisgICAgICAgICAgICAgICAgICAgIG1Db25uZWN0aW9uSWQsIG1SZWxlYXNpbmcubVJlbGVhc2luZ0lkcywKKyAgICAgICAgICAgICAgICAgICAgbVJlbGVhc2luZy5tUmVsZWFzZWRJZHMpOworICAgICAgICB9CisgICAgICAgIGlmIChtUmVsZWFzaW5nLm1SZWxlYXNlZElkcy5zaXplKCkgPiAwKSB7CisgICAgICAgICAgICBmb3IgKEJ1ZmZlcklkJiBpZDogbVJlbGVhc2luZy5tUmVsZWFzZWRJZHMpIHsKKyAgICAgICAgICAgICAgICBBTE9HVigiY2xpZW50IHJlbGVhc2UgYnVmZmVyICVsbGQgLSAldSIsIChsb25nIGxvbmcpbUNvbm5lY3Rpb25JZCwgaWQpOworICAgICAgICAgICAgICAgIGF1dG8gZm91bmQgPSBtQ2FjaGUubUJ1ZmZlcnMuZmluZChpZCk7CisgICAgICAgICAgICAgICAgaWYgKGZvdW5kICE9IG1DYWNoZS5tQnVmZmVycy5lbmQoKSkgeworICAgICAgICAgICAgICAgICAgICBpZiAoZm91bmQtPnNlY29uZC0+b25DYWNoZVJlbGVhc2UoKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgbUNhY2hlLmRlY0FjdGl2ZV9sKCk7CisgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgICAgICAvLyBzaG91bGQgbm90IGhhcHBlbiEKKyAgICAgICAgICAgICAgICAgICAgICAgIEFMT0dXKCJjbGllbnQgJWxsZCBjYWNoZSByZWxlYXNlIHN0YXR1cyBpbmNvbnNpdGVudCEiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsb25nIGxvbmcpbUNvbm5lY3Rpb25JZCk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICAvLyBzaG91bGQgbm90IGhhcHBlbiEKKyAgICAgICAgICAgICAgICAgICAgQUxPR1coImNsaWVudCAlbGxkIGNhY2hlIHN0YXR1cyBpbmNvbnNpdGVudCEiLCAobG9uZyBsb25nKW1Db25uZWN0aW9uSWQpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIG1SZWxlYXNpbmcubVJlbGVhc2VkSWRzLmNsZWFyKCk7CisgICAgICAgICAgICBjbGVhcmVkID0gdHJ1ZTsKKyAgICAgICAgfQorICAgIH0KKyAgICBzdGQ6OnZlY3RvcjxCdWZmZXJJbnZhbGlkYXRpb25NZXNzYWdlPiBpbnZhbGlkYXRpb25zOworICAgIG1JbnZhbGlkYXRpb25MaXN0ZW5lci0+Z2V0SW52YWxpZGF0aW9ucyhpbnZhbGlkYXRpb25zKTsKKyAgICB1aW50MzJfdCBsYXN0TXNnSWQgPSAwOworICAgIGlmIChpbnZhbGlkYXRpb25zLnNpemUoKSA+IDApIHsKKyAgICAgICAgZm9yIChhdXRvIGl0ID0gaW52YWxpZGF0aW9ucy5iZWdpbigpOyBpdCAhPSBpbnZhbGlkYXRpb25zLmVuZCgpOyArK2l0KSB7CisgICAgICAgICAgICBpZiAoaXQtPm1lc3NhZ2VJZCAhPSAwKSB7CisgICAgICAgICAgICAgICAgbGFzdE1zZ0lkID0gaXQtPm1lc3NhZ2VJZDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChpdC0+ZnJvbUJ1ZmZlcklkID09IGl0LT50b0J1ZmZlcklkKSB7CisgICAgICAgICAgICAgICAgLy8gVE9ETzogaGFuZGxlIGZyb21CdWZmZXJJZCA9IFVJTlQzMl9NQVgKKyAgICAgICAgICAgICAgICBpbnZhbGlkYXRlQnVmZmVyKGl0LT5mcm9tQnVmZmVySWQpOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBpbnZhbGlkYXRlUmFuZ2UoaXQtPmZyb21CdWZmZXJJZCwgaXQtPnRvQnVmZmVySWQpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorICAgIHsKKyAgICAgICAgc3RkOjpsb2NrX2d1YXJkPHN0ZDo6bXV0ZXg+IGxvY2sobVJlbGVhc2luZy5tTG9jayk7CisgICAgICAgIGlmIChsYXN0TXNnSWQgIT0gMCkgeworICAgICAgICAgICAgaWYgKGlzTWVzc2FnZUxhdGVyKGxhc3RNc2dJZCwgbVJlbGVhc2luZy5tSW52YWxpZGF0ZUlkKSkgeworICAgICAgICAgICAgICAgIG1SZWxlYXNpbmcubUludmFsaWRhdGVJZCA9IGxhc3RNc2dJZDsKKyAgICAgICAgICAgICAgICBtUmVsZWFzaW5nLm1JbnZhbGlkYXRlQWNrID0gZmFsc2U7CisgICAgICAgICAgICB9CisgICAgICAgIH0gZWxzZSBpZiAobWVzc2FnZUlkICE9IDApIHsKKyAgICAgICAgICAgIC8vIG1lc3NhZ2VzIGFyZSBkcmFpbmVkLgorICAgICAgICAgICAgaWYgKGlzTWVzc2FnZUxhdGVyKG1lc3NhZ2VJZCwgbVJlbGVhc2luZy5tSW52YWxpZGF0ZUlkKSkgeworICAgICAgICAgICAgICAgIG1SZWxlYXNpbmcubUludmFsaWRhdGVJZCA9IG1lc3NhZ2VJZDsKKyAgICAgICAgICAgICAgICBtUmVsZWFzaW5nLm1JbnZhbGlkYXRlQWNrID0gdHJ1ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBpZiAoIW1SZWxlYXNpbmcubUludmFsaWRhdGVBY2spIHsKKyAgICAgICAgICAgIC8vIHBvc3QgQUNLCisgICAgICAgICAgICBtUmVsZWFzaW5nLm1TdGF0dXNDaGFubmVsLT5wb3N0QnVmZmVySW52YWxpZGF0ZUFjaygKKyAgICAgICAgICAgICAgICAgICAgbUNvbm5lY3Rpb25JZCwKKyAgICAgICAgICAgICAgICAgICAgbVJlbGVhc2luZy5tSW52YWxpZGF0ZUlkLCAmbVJlbGVhc2luZy5tSW52YWxpZGF0ZUFjayk7CisgICAgICAgICAgICBBTE9HVigiY2xpZW50ICVsbGQgaW52YWxpZGF0ZWlvbiBhY2sgKCVkKSAldSIsCisgICAgICAgICAgICAgICAgKGxvbmcgbG9uZyltQ29ubmVjdGlvbklkLAorICAgICAgICAgICAgICAgIG1SZWxlYXNpbmcubUludmFsaWRhdGVBY2ssIG1SZWxlYXNpbmcubUludmFsaWRhdGVJZCk7CisgICAgICAgIH0KKyAgICB9CisgICAgcmV0dXJuIGNsZWFyZWQ7Cit9CisKKy8vIHNob3VsZCBoYXZlIG1DYWNoZS5tTG9jawordm9pZCBCdWZmZXJQb29sQ2xpZW50OjpJbXBsOjpldmljdENhY2hlcyhib29sIGNsZWFyQ2FjaGUpIHsKKyAgICBpbnQ2NF90IG5vdyA9IGdldFRpbWVzdGFtcE5vdygpOworICAgIGlmIChub3cgPj0gbUxhc3RFdmljdENhY2hlVXMgKyBrQ2FjaGVUdGxVcyB8fCBjbGVhckNhY2hlKSB7CisgICAgICAgIHNpemVfdCBldmljdGVkID0gMDsKKyAgICAgICAgZm9yIChhdXRvIGl0ID0gbUNhY2hlLm1CdWZmZXJzLmJlZ2luKCk7IGl0ICE9IG1DYWNoZS5tQnVmZmVycy5lbmQoKTspIHsKKyAgICAgICAgICAgIGlmICghaXQtPnNlY29uZC0+aGFzQ2FjaGUoKSAmJiAoaXQtPnNlY29uZC0+ZXhwaXJlKCkgfHwgY2xlYXJDYWNoZSkpIHsKKyAgICAgICAgICAgICAgICBpdCA9IG1DYWNoZS5tQnVmZmVycy5lcmFzZShpdCk7CisgICAgICAgICAgICAgICAgKytldmljdGVkOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICArK2l0OworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIEFMT0dWKCJjYWNoZSBjb3VudCAlbGxkIDogdG90YWwgJXp1LCBhY3RpdmUgJWQsIGV2aWN0ZWQgJXp1IiwKKyAgICAgICAgICAgICAgKGxvbmcgbG9uZyltQ29ubmVjdGlvbklkLCBtQ2FjaGUubUJ1ZmZlcnMuc2l6ZSgpLCBtQ2FjaGUubUFjdGl2ZSwgZXZpY3RlZCk7CisgICAgICAgIG1MYXN0RXZpY3RDYWNoZVVzID0gbm93OworICAgIH0KK30KKworLy8gc2hvdWxkIGhhdmUgbUNhY2hlLm1Mb2NrCit2b2lkIEJ1ZmZlclBvb2xDbGllbnQ6OkltcGw6OmludmFsaWRhdGVCdWZmZXIoQnVmZmVySWQgaWQpIHsKKyAgICBmb3IgKGF1dG8gaXQgPSBtQ2FjaGUubUJ1ZmZlcnMuYmVnaW4oKTsgaXQgIT0gbUNhY2hlLm1CdWZmZXJzLmVuZCgpOyArK2l0KSB7CisgICAgICAgIGlmIChpZCA9PSBpdC0+c2Vjb25kLT5pZCgpKSB7CisgICAgICAgICAgICBpZiAoIWl0LT5zZWNvbmQtPmhhc0NhY2hlKCkpIHsKKyAgICAgICAgICAgICAgICBtQ2FjaGUubUJ1ZmZlcnMuZXJhc2UoaXQpOworICAgICAgICAgICAgICAgIEFMT0dWKCJjYWNoZSBpbnZhbGlkYXRlZCAlbGxkIDogYnVmZmVyICV1IiwKKyAgICAgICAgICAgICAgICAgICAgICAobG9uZyBsb25nKW1Db25uZWN0aW9uSWQsIGlkKTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgQUxPR1coIkluY29uc2l0ZW50IGludmFsaWRhdGlvbiAlbGxkIDogYWN0aXZlciBidWZmZXIhISAldSIsCisgICAgICAgICAgICAgICAgICAgICAgKGxvbmcgbG9uZyltQ29ubmVjdGlvbklkLCAodW5zaWduZWQgaW50KWlkKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgfQorfQorCisvLyBzaG91bGQgaGF2ZSBtQ2FjaGUubUxvY2sKK3ZvaWQgQnVmZmVyUG9vbENsaWVudDo6SW1wbDo6aW52YWxpZGF0ZVJhbmdlKEJ1ZmZlcklkIGZyb20sIEJ1ZmZlcklkIHRvKSB7CisgICAgc2l6ZV90IGludmFsaWRhdGVkID0gMDsKKyAgICBmb3IgKGF1dG8gaXQgPSBtQ2FjaGUubUJ1ZmZlcnMuYmVnaW4oKTsgaXQgIT0gbUNhY2hlLm1CdWZmZXJzLmVuZCgpOykgeworICAgICAgICBpZiAoIWl0LT5zZWNvbmQtPmhhc0NhY2hlKCkpIHsKKyAgICAgICAgICAgIEJ1ZmZlcklkIGJpZCA9IGl0LT5zZWNvbmQtPmlkKCk7CisgICAgICAgICAgICBpZiAoZnJvbSA8IHRvKSB7CisgICAgICAgICAgICAgICAgaWYgKGZyb20gPD0gYmlkICYmIGJpZCA8IHRvKSB7CisgICAgICAgICAgICAgICAgICAgICsraW52YWxpZGF0ZWQ7CisgICAgICAgICAgICAgICAgICAgIGl0ID0gbUNhY2hlLm1CdWZmZXJzLmVyYXNlKGl0KTsKKyAgICAgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBpZiAoZnJvbSA8PSBiaWQgfHwgYmlkIDwgdG8pIHsKKyAgICAgICAgICAgICAgICAgICAgKytpbnZhbGlkYXRlZDsKKyAgICAgICAgICAgICAgICAgICAgaXQgPSBtQ2FjaGUubUJ1ZmZlcnMuZXJhc2UoaXQpOworICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgKytpdDsKKyAgICB9CisgICAgQUxPR1YoImNhY2hlIGludmFsaWRhdGVkICVsbGQgOiAjIG9mIGludmFsaWRhdGVkICV6dSIsCisgICAgICAgICAgKGxvbmcgbG9uZyltQ29ubmVjdGlvbklkLCBpbnZhbGlkYXRlZCk7Cit9CisKK1Jlc3VsdFN0YXR1cyBCdWZmZXJQb29sQ2xpZW50OjpJbXBsOjphbGxvY2F0ZUJ1ZmZlckhhbmRsZSgKKyAgICAgICAgY29uc3Qgc3RkOjp2ZWN0b3I8dWludDhfdD4mIHBhcmFtcywgQnVmZmVySWQgKmJ1ZmZlcklkLAorICAgICAgICBuYXRpdmVfaGFuZGxlX3QqKiBoYW5kbGUpIHsKKyAgICBpZiAobUxvY2FsQ29ubmVjdGlvbikgeworICAgICAgICBjb25zdCBuYXRpdmVfaGFuZGxlX3QqIGFsbG9jSGFuZGxlID0gbnVsbHB0cjsKKyAgICAgICAgUmVzdWx0U3RhdHVzIHN0YXR1cyA9IG1Mb2NhbENvbm5lY3Rpb24tPmFsbG9jYXRlKAorICAgICAgICAgICAgICAgIHBhcmFtcywgYnVmZmVySWQsICZhbGxvY0hhbmRsZSk7CisgICAgICAgIGlmIChzdGF0dXMgPT0gUmVzdWx0U3RhdHVzOjpPSykgeworICAgICAgICAgICAgKmhhbmRsZSA9IG5hdGl2ZV9oYW5kbGVfY2xvbmUoYWxsb2NIYW5kbGUpOworICAgICAgICB9CisgICAgICAgIEFMT0dWKCJjbGllbnQgYWxsb2NhdGUgcmVzdWx0ICVsbGQgJWQgOiAldSBjbG9uZSAlcCIsCisgICAgICAgICAgICAgIChsb25nIGxvbmcpbUNvbm5lY3Rpb25JZCwgc3RhdHVzID09IFJlc3VsdFN0YXR1czo6T0ssCisgICAgICAgICAgICAgICpoYW5kbGUgPyAqYnVmZmVySWQgOiAwICwgKmhhbmRsZSk7CisgICAgICAgIHJldHVybiBzdGF0dXM7CisgICAgfQorICAgIHJldHVybiBSZXN1bHRTdGF0dXM6OkNSSVRJQ0FMX0VSUk9SOworfQorCitSZXN1bHRTdGF0dXMgQnVmZmVyUG9vbENsaWVudDo6SW1wbDo6ZmV0Y2hCdWZmZXJIYW5kbGUoCisgICAgICAgIFRyYW5zYWN0aW9uSWQgdHJhbnNhY3Rpb25JZCwgQnVmZmVySWQgYnVmZmVySWQsCisgICAgICAgIG5hdGl2ZV9oYW5kbGVfdCAqKmhhbmRsZSkgeworICAgIHNwPElDb25uZWN0aW9uPiBjb25uZWN0aW9uOworICAgIGlmIChtTG9jYWwpIHsKKyAgICAgICAgY29ubmVjdGlvbiA9IG1Mb2NhbENvbm5lY3Rpb247CisgICAgfSBlbHNlIHsKKyAgICAgICAgY29ubmVjdGlvbiA9IG1SZW1vdGVDb25uZWN0aW9uOworICAgIH0KKyAgICBSZXN1bHRTdGF0dXMgc3RhdHVzOworICAgIFJldHVybjx2b2lkPiB0cmFuc1Jlc3VsdCA9IGNvbm5lY3Rpb24tPmZldGNoKAorICAgICAgICAgICAgdHJhbnNhY3Rpb25JZCwgYnVmZmVySWQsCisgICAgICAgICAgICBbJnN0YXR1cywgJmhhbmRsZV0KKyAgICAgICAgICAgIChSZXN1bHRTdGF0dXMgb3V0U3RhdHVzLCBCdWZmZXIgb3V0QnVmZmVyKSB7CisgICAgICAgICAgICAgICAgc3RhdHVzID0gb3V0U3RhdHVzOworICAgICAgICAgICAgICAgIGlmIChzdGF0dXMgPT0gUmVzdWx0U3RhdHVzOjpPSykgeworICAgICAgICAgICAgICAgICAgICAqaGFuZGxlID0gbmF0aXZlX2hhbmRsZV9jbG9uZSgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdXRCdWZmZXIuYnVmZmVyLmdldE5hdGl2ZUhhbmRsZSgpKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9KTsKKyAgICByZXR1cm4gdHJhbnNSZXN1bHQuaXNPaygpID8gc3RhdHVzIDogUmVzdWx0U3RhdHVzOjpDUklUSUNBTF9FUlJPUjsKK30KKworCitCdWZmZXJQb29sQ2xpZW50OjpCdWZmZXJQb29sQ2xpZW50KGNvbnN0IHNwPEFjY2Vzc29yPiAmYWNjZXNzb3IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHNwPElPYnNlcnZlcj4gJm9ic2VydmVyKSB7CisgICAgbUltcGwgPSBzdGQ6Om1ha2Vfc2hhcmVkPEltcGw+KGFjY2Vzc29yLCBvYnNlcnZlcik7Cit9CisKK0J1ZmZlclBvb2xDbGllbnQ6OkJ1ZmZlclBvb2xDbGllbnQoY29uc3Qgc3A8SUFjY2Vzc29yPiAmYWNjZXNzb3IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHNwPElPYnNlcnZlcj4gJm9ic2VydmVyKSB7CisgICAgbUltcGwgPSBzdGQ6Om1ha2Vfc2hhcmVkPEltcGw+KGFjY2Vzc29yLCBvYnNlcnZlcik7Cit9CisKK0J1ZmZlclBvb2xDbGllbnQ6On5CdWZmZXJQb29sQ2xpZW50KCkgeworICAgIC8vIFRPRE86IGhvdyB0byBoYW5kbGUgb3JwaGFuZWQgYnVmZmVycz8KK30KKworYm9vbCBCdWZmZXJQb29sQ2xpZW50Ojppc1ZhbGlkKCkgeworICAgIHJldHVybiBtSW1wbCAmJiBtSW1wbC0+aXNWYWxpZCgpOworfQorCitib29sIEJ1ZmZlclBvb2xDbGllbnQ6OmlzTG9jYWwoKSB7CisgICAgcmV0dXJuIG1JbXBsICYmIG1JbXBsLT5pc0xvY2FsKCk7Cit9CisKK2Jvb2wgQnVmZmVyUG9vbENsaWVudDo6aXNBY3RpdmUoaW50NjRfdCAqbGFzdFRyYW5zYWN0aW9uVXMsIGJvb2wgY2xlYXJDYWNoZSkgeworICAgIGlmICghaXNWYWxpZCgpKSB7CisgICAgICAgICpsYXN0VHJhbnNhY3Rpb25VcyA9IDA7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgICAgcmV0dXJuIG1JbXBsLT5pc0FjdGl2ZShsYXN0VHJhbnNhY3Rpb25VcywgY2xlYXJDYWNoZSk7Cit9CisKK0Nvbm5lY3Rpb25JZCBCdWZmZXJQb29sQ2xpZW50OjpnZXRDb25uZWN0aW9uSWQoKSB7CisgICAgaWYgKGlzVmFsaWQoKSkgeworICAgICAgICByZXR1cm4gbUltcGwtPmdldENvbm5lY3Rpb25JZCgpOworICAgIH0KKyAgICByZXR1cm4gLTE7Cit9CisKK1Jlc3VsdFN0YXR1cyBCdWZmZXJQb29sQ2xpZW50OjpnZXRBY2Nlc3NvcihzcDxJQWNjZXNzb3I+ICphY2Nlc3NvcikgeworICAgIGlmIChpc1ZhbGlkKCkpIHsKKyAgICAgICAgKmFjY2Vzc29yID0gbUltcGwtPmdldEFjY2Vzc29yKCk7CisgICAgICAgIHJldHVybiBSZXN1bHRTdGF0dXM6Ok9LOworICAgIH0KKyAgICByZXR1cm4gUmVzdWx0U3RhdHVzOjpDUklUSUNBTF9FUlJPUjsKK30KKwordm9pZCBCdWZmZXJQb29sQ2xpZW50OjpyZWNlaXZlSW52YWxpZGF0aW9uKHVpbnQzMl90IG1zZ0lkKSB7CisgICAgQUxPR1YoImJ1ZmZlcnBvb2wgY2xpZW50IHJlY3YgaW52ICV1IiwgbXNnSWQpOworICAgIGlmIChpc1ZhbGlkKCkpIHsKKyAgICAgICAgbUltcGwtPnJlY2VpdmVJbnZhbGlkYXRpb24obXNnSWQpOworICAgIH0KK30KKworUmVzdWx0U3RhdHVzIEJ1ZmZlclBvb2xDbGllbnQ6OmZsdXNoKCkgeworICAgIGlmIChpc1ZhbGlkKCkpIHsKKyAgICAgICAgcmV0dXJuIG1JbXBsLT5mbHVzaCgpOworICAgIH0KKyAgICByZXR1cm4gUmVzdWx0U3RhdHVzOjpDUklUSUNBTF9FUlJPUjsKK30KKworUmVzdWx0U3RhdHVzIEJ1ZmZlclBvb2xDbGllbnQ6OmFsbG9jYXRlKAorICAgICAgICBjb25zdCBzdGQ6OnZlY3Rvcjx1aW50OF90PiAmcGFyYW1zLAorICAgICAgICBuYXRpdmVfaGFuZGxlX3QgKipoYW5kbGUsCisgICAgICAgIHN0ZDo6c2hhcmVkX3B0cjxCdWZmZXJQb29sRGF0YT4gKmJ1ZmZlcikgeworICAgIGlmIChpc1ZhbGlkKCkpIHsKKyAgICAgICAgcmV0dXJuIG1JbXBsLT5hbGxvY2F0ZShwYXJhbXMsIGhhbmRsZSwgYnVmZmVyKTsKKyAgICB9CisgICAgcmV0dXJuIFJlc3VsdFN0YXR1czo6Q1JJVElDQUxfRVJST1I7Cit9CisKK1Jlc3VsdFN0YXR1cyBCdWZmZXJQb29sQ2xpZW50OjpyZWNlaXZlKAorICAgICAgICBUcmFuc2FjdGlvbklkIHRyYW5zYWN0aW9uSWQsIEJ1ZmZlcklkIGJ1ZmZlcklkLCBpbnQ2NF90IHRpbWVzdGFtcFVzLAorICAgICAgICBuYXRpdmVfaGFuZGxlX3QgKipoYW5kbGUsIHN0ZDo6c2hhcmVkX3B0cjxCdWZmZXJQb29sRGF0YT4gKmJ1ZmZlcikgeworICAgIGlmIChpc1ZhbGlkKCkpIHsKKyAgICAgICAgcmV0dXJuIG1JbXBsLT5yZWNlaXZlKHRyYW5zYWN0aW9uSWQsIGJ1ZmZlcklkLCB0aW1lc3RhbXBVcywgaGFuZGxlLCBidWZmZXIpOworICAgIH0KKyAgICByZXR1cm4gUmVzdWx0U3RhdHVzOjpDUklUSUNBTF9FUlJPUjsKK30KKworUmVzdWx0U3RhdHVzIEJ1ZmZlclBvb2xDbGllbnQ6OnBvc3RTZW5kKAorICAgICAgICBDb25uZWN0aW9uSWQgcmVjZWl2ZXJJZCwKKyAgICAgICAgY29uc3Qgc3RkOjpzaGFyZWRfcHRyPEJ1ZmZlclBvb2xEYXRhPiAmYnVmZmVyLAorICAgICAgICBUcmFuc2FjdGlvbklkICp0cmFuc2FjdGlvbklkLAorICAgICAgICBpbnQ2NF90ICp0aW1lc3RhbXBVcykgeworICAgIGlmIChpc1ZhbGlkKCkpIHsKKyAgICAgICAgYm9vbCByZXN1bHQgPSBtSW1wbC0+cG9zdFNlbmQoCisgICAgICAgICAgICAgICAgYnVmZmVyLT5tSWQsIHJlY2VpdmVySWQsIHRyYW5zYWN0aW9uSWQsIHRpbWVzdGFtcFVzKTsKKyAgICAgICAgcmV0dXJuIHJlc3VsdCA/IFJlc3VsdFN0YXR1czo6T0sgOiBSZXN1bHRTdGF0dXM6OkNSSVRJQ0FMX0VSUk9SOworICAgIH0KKyAgICByZXR1cm4gUmVzdWx0U3RhdHVzOjpDUklUSUNBTF9FUlJPUjsKK30KKworfSAgLy8gbmFtZXNwYWNlIGltcGxlbWVudGF0aW9uCit9ICAvLyBuYW1lc3BhY2UgVjJfMAorfSAgLy8gbmFtZXNwYWNlIGJ1ZmZlcnBvb2wKK30gIC8vIG5hbWVzcGFjZSBtZWRpYQorfSAgLy8gbmFtZXNwYWNlIGhhcmR3YXJlCit9ICAvLyBuYW1lc3BhY2UgYW5kcm9pZApkaWZmIC0tZ2l0IGEvbWVkaWEvYnVmZmVycG9vbC8yLjAvQnVmZmVyUG9vbENsaWVudC5oIGIvbWVkaWEvYnVmZmVycG9vbC8yLjAvQnVmZmVyUG9vbENsaWVudC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU4ZDlhZTYKLS0tIC9kZXYvbnVsbAorKysgYi9tZWRpYS9idWZmZXJwb29sLzIuMC9CdWZmZXJQb29sQ2xpZW50LmgKQEAgLTAsMCArMSwxMTEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTggVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworCisjaWZuZGVmIEFORFJPSURfSEFSRFdBUkVfTUVESUFfQlVGRkVSUE9PTF9WMl8wX0JVRkZFUlBPT0xDTElFTlRfSAorI2RlZmluZSBBTkRST0lEX0hBUkRXQVJFX01FRElBX0JVRkZFUlBPT0xfVjJfMF9CVUZGRVJQT09MQ0xJRU5UX0gKKworI2luY2x1ZGUgPG1lbW9yeT4KKyNpbmNsdWRlIDxhbmRyb2lkL2hhcmR3YXJlL21lZGlhL2J1ZmZlcnBvb2wvMi4wL0lBY2Nlc3Nvci5oPgorI2luY2x1ZGUgPGFuZHJvaWQvaGFyZHdhcmUvbWVkaWEvYnVmZmVycG9vbC8yLjAvSUNvbm5lY3Rpb24uaD4KKyNpbmNsdWRlIDxhbmRyb2lkL2hhcmR3YXJlL21lZGlhL2J1ZmZlcnBvb2wvMi4wL0lPYnNlcnZlci5oPgorI2luY2x1ZGUgPGJ1ZmZlcnBvb2wvQnVmZmVyUG9vbFR5cGVzLmg+CisjaW5jbHVkZSA8Y3V0aWxzL25hdGl2ZV9oYW5kbGUuaD4KKyNpbmNsdWRlICJBY2Nlc3Nvci5oIgorCituYW1lc3BhY2UgYW5kcm9pZCB7CituYW1lc3BhY2UgaGFyZHdhcmUgeworbmFtZXNwYWNlIG1lZGlhIHsKK25hbWVzcGFjZSBidWZmZXJwb29sIHsKK25hbWVzcGFjZSBWMl8wIHsKK25hbWVzcGFjZSBpbXBsZW1lbnRhdGlvbiB7CisKK3VzaW5nIDo6YW5kcm9pZDo6aGFyZHdhcmU6Om1lZGlhOjpidWZmZXJwb29sOjpWMl8wOjpJQWNjZXNzb3I7Cit1c2luZyA6OmFuZHJvaWQ6OmhhcmR3YXJlOjptZWRpYTo6YnVmZmVycG9vbDo6VjJfMDo6SUNvbm5lY3Rpb247Cit1c2luZyA6OmFuZHJvaWQ6OmhhcmR3YXJlOjptZWRpYTo6YnVmZmVycG9vbDo6VjJfMDo6SU9ic2VydmVyOwordXNpbmcgOjphbmRyb2lkOjpoYXJkd2FyZTo6bWVkaWE6OmJ1ZmZlcnBvb2w6OlYyXzA6OlJlc3VsdFN0YXR1czsKK3VzaW5nIDo6YW5kcm9pZDo6c3A7CisKKy8qKgorICogQSBidWZmZXIgcG9vbCBjbGllbnQgZm9yIGEgYnVmZmVyIHBvb2wuIEZvciBhIHNwZWNpZmljIGJ1ZmZlciBwb29sLCBhdCBtb3N0CisgKiBvbmUgYnVmZmVyIHBvb2wgY2xpZW50IGV4aXN0cyBwZXIgcHJvY2Vzcy4gVGhpcyBjbGFzcyB3aWxsIG5vdCBiZSBleHBvc2VkCisgKiBvdXRzaWRlLiBBIGJ1ZmZlciBwb29sIGNsaWVudCB3aWxsIGJlIHVzZWQgdmlhIENsaWVudE1hbmFnZXIuCisgKi8KK2NsYXNzIEJ1ZmZlclBvb2xDbGllbnQgeworcHVibGljOgorICAgIC8qKgorICAgICAqIENyZWF0ZXMgYSBidWZmZXIgcG9vbCBjbGllbnQgZnJvbSBhIGxvY2FsIGJ1ZmZlciBwb29sCisgICAgICogKHZpYSBDbGllbnRNYW5hZ2VyI2NyZWF0ZSkuCisgICAgICovCisgICAgZXhwbGljaXQgQnVmZmVyUG9vbENsaWVudChjb25zdCBzcDxBY2Nlc3Nvcj4gJmFjY2Vzc29yLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3A8SU9ic2VydmVyPiAmb2JzZXJ2ZXIpOworCisgICAgLyoqCisgICAgICogQ3JlYXRlcyBhIGJ1ZmZlciBwb29sIGNsaWVudCBmcm9tIGEgcmVtb3RlIGJ1ZmZlciBwb29sCisgICAgICogKHZpYSBDbGllbnRNYW5hZ2VyI3JlZ2lzdGVyU2VuZGVyKS4KKyAgICAgKiBOb3RlOiBBIGJ1ZmZlciBwb29sIGNsaWVudCBjcmVhdGVkIHdpdGggcmVtb3RlIGJ1ZmZlciBwb29sIGNhbm5vdAorICAgICAqIGFsbG9jYXRlIGEgYnVmZmVyLgorICAgICAqLworICAgIGV4cGxpY2l0IEJ1ZmZlclBvb2xDbGllbnQoY29uc3Qgc3A8SUFjY2Vzc29yPiAmYWNjZXNzb3IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzcDxJT2JzZXJ2ZXI+ICZvYnNlcnZlcik7CisKKyAgICAvKiogRGVzdHJ1Y3RzIGEgYnVmZmVyIHBvb2wgY2xpZW50LiAqLworICAgIH5CdWZmZXJQb29sQ2xpZW50KCk7CisKK3ByaXZhdGU6CisgICAgYm9vbCBpc1ZhbGlkKCk7CisKKyAgICBib29sIGlzTG9jYWwoKTsKKworICAgIGJvb2wgaXNBY3RpdmUoaW50NjRfdCAqbGFzdFRyYW5zYWN0aW9uVXMsIGJvb2wgY2xlYXJDYWNoZSk7CisKKyAgICBDb25uZWN0aW9uSWQgZ2V0Q29ubmVjdGlvbklkKCk7CisKKyAgICBSZXN1bHRTdGF0dXMgZ2V0QWNjZXNzb3Ioc3A8SUFjY2Vzc29yPiAqYWNjZXNzb3IpOworCisgICAgdm9pZCByZWNlaXZlSW52YWxpZGF0aW9uKHVpbnQzMl90IG1zZ0lkKTsKKworICAgIFJlc3VsdFN0YXR1cyBmbHVzaCgpOworCisgICAgUmVzdWx0U3RhdHVzIGFsbG9jYXRlKGNvbnN0IHN0ZDo6dmVjdG9yPHVpbnQ4X3Q+ICZwYXJhbXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgIG5hdGl2ZV9oYW5kbGVfdCAqKmhhbmRsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgc3RkOjpzaGFyZWRfcHRyPEJ1ZmZlclBvb2xEYXRhPiAqYnVmZmVyKTsKKworICAgIFJlc3VsdFN0YXR1cyByZWNlaXZlKFRyYW5zYWN0aW9uSWQgdHJhbnNhY3Rpb25JZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICBCdWZmZXJJZCBidWZmZXJJZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICBpbnQ2NF90IHRpbWVzdGFtcFVzLAorICAgICAgICAgICAgICAgICAgICAgICAgIG5hdGl2ZV9oYW5kbGVfdCAqKmhhbmRsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBzdGQ6OnNoYXJlZF9wdHI8QnVmZmVyUG9vbERhdGE+ICpidWZmZXIpOworCisgICAgUmVzdWx0U3RhdHVzIHBvc3RTZW5kKENvbm5lY3Rpb25JZCByZWNlaXZlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RkOjpzaGFyZWRfcHRyPEJ1ZmZlclBvb2xEYXRhPiAmYnVmZmVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICBUcmFuc2FjdGlvbklkICp0cmFuc2FjdGlvbklkLAorICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQ2NF90ICp0aW1lc3RhbXBVcyk7CisKKyAgICBjbGFzcyBJbXBsOworICAgIHN0ZDo6c2hhcmVkX3B0cjxJbXBsPiBtSW1wbDsKKworICAgIGZyaWVuZCBzdHJ1Y3QgQ2xpZW50TWFuYWdlcjsKKyAgICBmcmllbmQgc3RydWN0IE9ic2VydmVyOworfTsKKworfSAgLy8gbmFtZXNwYWNlIGltcGxlbWVudGF0aW9uCit9ICAvLyBuYW1lc3BhY2UgVjJfMAorfSAgLy8gbmFtZXNwYWNlIGJ1ZmZlcnBvb2wKK30gIC8vIG5hbWVzcGFjZSBtZWRpYQorfSAgLy8gbmFtZXNwYWNlIGhhcmR3YXJlCit9ICAvLyBuYW1lc3BhY2UgYW5kcm9pZAorCisjZW5kaWYgIC8vIEFORFJPSURfSEFSRFdBUkVfTUVESUFfQlVGRkVSUE9PTF9WMl8wX0JVRkZFUlBPT0xDTElFTlRfSApkaWZmIC0tZ2l0IGEvbWVkaWEvYnVmZmVycG9vbC8yLjAvQnVmZmVyU3RhdHVzLmNwcCBiL21lZGlhL2J1ZmZlcnBvb2wvMi4wL0J1ZmZlclN0YXR1cy5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjkzNzI2MAotLS0gL2Rldi9udWxsCisrKyBiL21lZGlhL2J1ZmZlcnBvb2wvMi4wL0J1ZmZlclN0YXR1cy5jcHAKQEAgLTAsMCArMSwzMDQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTggVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworCisjZGVmaW5lIExPR19UQUcgIkJ1ZmZlclBvb2xTdGF0dXMiCisvLyNkZWZpbmUgTE9HX05ERUJVRyAwCisKKyNpbmNsdWRlIDx0aHJlYWQ+CisjaW5jbHVkZSA8dGltZS5oPgorI2luY2x1ZGUgIkJ1ZmZlclN0YXR1cy5oIgorCituYW1lc3BhY2UgYW5kcm9pZCB7CituYW1lc3BhY2UgaGFyZHdhcmUgeworbmFtZXNwYWNlIG1lZGlhIHsKK25hbWVzcGFjZSBidWZmZXJwb29sIHsKK25hbWVzcGFjZSBWMl8wIHsKK25hbWVzcGFjZSBpbXBsZW1lbnRhdGlvbiB7CisKK2ludDY0X3QgZ2V0VGltZXN0YW1wTm93KCkgeworICAgIGludDY0X3Qgc3RhbXA7CisgICAgc3RydWN0IHRpbWVzcGVjIHRzOworICAgIC8vIFRPRE86IENMT0NLX01PTk9UT05JQ19DT0FSU0U/CisgICAgY2xvY2tfZ2V0dGltZShDTE9DS19NT05PVE9OSUMsICZ0cyk7CisgICAgc3RhbXAgPSB0cy50dl9uc2VjIC8gMTAwMDsKKyAgICBzdGFtcCArPSAodHMudHZfc2VjICogMTAwMDAwMExMKTsKKyAgICByZXR1cm4gc3RhbXA7Cit9CisKK2Jvb2wgaXNNZXNzYWdlTGF0ZXIodWludDMyX3QgY3VyTXNnSWQsIHVpbnQzMl90IHByZXZNc2dJZCkgeworICAgIHJldHVybiBjdXJNc2dJZCAhPSBwcmV2TXNnSWQgJiYgY3VyTXNnSWQgLSBwcmV2TXNnSWQgPCBwcmV2TXNnSWQgLSBjdXJNc2dJZDsKK30KKworYm9vbCBpc0J1ZmZlckluUmFuZ2UoQnVmZmVySWQgZnJvbSwgQnVmZmVySWQgdG8sIEJ1ZmZlcklkIGJ1ZmZlcklkKSB7CisgICAgaWYgKGZyb20gPCB0bykgeworICAgICAgICByZXR1cm4gZnJvbSA8PSBidWZmZXJJZCAmJiBidWZmZXJJZCA8IHRvOworICAgIH0gZWxzZSB7IC8vIHdyYXAgaGFwcGVucworICAgICAgICByZXR1cm4gZnJvbSA8PSBidWZmZXJJZCB8fCBidWZmZXJJZCA8IHRvOworICAgIH0KK30KKworc3RhdGljIGNvbnN0ZXhwciBpbnQga051bUVsZW1lbnRzSW5RdWV1ZSA9IDEwMjQqMTY7CitzdGF0aWMgY29uc3RleHByIGludCBrTWluRWxlbWVudHNUb1N5bmNJblF1ZXVlID0gMTI4OworCitSZXN1bHRTdGF0dXMgQnVmZmVyU3RhdHVzT2JzZXJ2ZXI6Om9wZW4oCisgICAgICAgIENvbm5lY3Rpb25JZCBpZCwgY29uc3QgU3RhdHVzRGVzY3JpcHRvcioqIGZtcURlc2NQdHIpIHsKKyAgICBpZiAobUJ1ZmZlclN0YXR1c1F1ZXVlcy5maW5kKGlkKSAhPSBtQnVmZmVyU3RhdHVzUXVldWVzLmVuZCgpKSB7CisgICAgICAgIC8vIFRPRE86IGlkIGNvbGxpc2lvbiBsb2c/CisgICAgICAgIHJldHVybiBSZXN1bHRTdGF0dXM6OkNSSVRJQ0FMX0VSUk9SOworICAgIH0KKyAgICBzdGQ6OnVuaXF1ZV9wdHI8QnVmZmVyU3RhdHVzUXVldWU+IHF1ZXVlID0KKyAgICAgICAgICAgIHN0ZDo6bWFrZV91bmlxdWU8QnVmZmVyU3RhdHVzUXVldWU+KGtOdW1FbGVtZW50c0luUXVldWUpOworICAgIGlmICghcXVldWUgfHwgcXVldWUtPmlzVmFsaWQoKSA9PSBmYWxzZSkgeworICAgICAgICAqZm1xRGVzY1B0ciA9IG51bGxwdHI7CisgICAgICAgIHJldHVybiBSZXN1bHRTdGF0dXM6Ok5PX01FTU9SWTsKKyAgICB9IGVsc2UgeworICAgICAgICAqZm1xRGVzY1B0ciA9IHF1ZXVlLT5nZXREZXNjKCk7CisgICAgfQorICAgIGF1dG8gcmVzdWx0ID0gbUJ1ZmZlclN0YXR1c1F1ZXVlcy5pbnNlcnQoCisgICAgICAgICAgICBzdGQ6Om1ha2VfcGFpcihpZCwgc3RkOjptb3ZlKHF1ZXVlKSkpOworICAgIGlmICghcmVzdWx0LnNlY29uZCkgeworICAgICAgICAqZm1xRGVzY1B0ciA9IG51bGxwdHI7CisgICAgICAgIHJldHVybiBSZXN1bHRTdGF0dXM6Ok5PX01FTU9SWTsKKyAgICB9CisgICAgcmV0dXJuIFJlc3VsdFN0YXR1czo6T0s7Cit9CisKK1Jlc3VsdFN0YXR1cyBCdWZmZXJTdGF0dXNPYnNlcnZlcjo6Y2xvc2UoQ29ubmVjdGlvbklkIGlkKSB7CisgICAgaWYgKG1CdWZmZXJTdGF0dXNRdWV1ZXMuZmluZChpZCkgPT0gbUJ1ZmZlclN0YXR1c1F1ZXVlcy5lbmQoKSkgeworICAgICAgICByZXR1cm4gUmVzdWx0U3RhdHVzOjpDUklUSUNBTF9FUlJPUjsKKyAgICB9CisgICAgbUJ1ZmZlclN0YXR1c1F1ZXVlcy5lcmFzZShpZCk7CisgICAgcmV0dXJuIFJlc3VsdFN0YXR1czo6T0s7Cit9CisKK3ZvaWQgQnVmZmVyU3RhdHVzT2JzZXJ2ZXI6OmdldEJ1ZmZlclN0YXR1c0NoYW5nZXMoc3RkOjp2ZWN0b3I8QnVmZmVyU3RhdHVzTWVzc2FnZT4gJm1lc3NhZ2VzKSB7CisgICAgZm9yIChhdXRvIGl0ID0gbUJ1ZmZlclN0YXR1c1F1ZXVlcy5iZWdpbigpOyBpdCAhPSBtQnVmZmVyU3RhdHVzUXVldWVzLmVuZCgpOyArK2l0KSB7CisgICAgICAgIEJ1ZmZlclN0YXR1c01lc3NhZ2UgbWVzc2FnZTsKKyAgICAgICAgc2l6ZV90IGF2YWlsID0gaXQtPnNlY29uZC0+YXZhaWxhYmxlVG9SZWFkKCk7CisgICAgICAgIHdoaWxlIChhdmFpbCA+IDApIHsKKyAgICAgICAgICAgIGlmICghaXQtPnNlY29uZC0+cmVhZCgmbWVzc2FnZSwgMSkpIHsKKyAgICAgICAgICAgICAgICAvLyBTaW5jZSBhdmFsaWFibGUgIyBvZiByZWFkcyBhcmUgYWxyZWFkeSBjb25maXJtZWQsCisgICAgICAgICAgICAgICAgLy8gdGhpcyBzaG91bGQgbm90IGhhcHBlbi4KKyAgICAgICAgICAgICAgICAvLyBUT0RPOiBlcnJvciBoYW5kbGluZyAoc3B1cmlvdXMgY2xpZW50PykKKyAgICAgICAgICAgICAgICBBTE9HVygiRk1RIG1lc3NhZ2UgY2Fubm90IGJlIHJlYWQgZnJvbSAlbGxkIiwgKGxvbmcgbG9uZylpdC0+Zmlyc3QpOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIG1lc3NhZ2UuY29ubmVjdGlvbklkID0gaXQtPmZpcnN0OworICAgICAgICAgICAgbWVzc2FnZXMucHVzaF9iYWNrKG1lc3NhZ2UpOworICAgICAgICAgICAgLS1hdmFpbDsKKyAgICAgICAgfQorICAgIH0KK30KKworQnVmZmVyU3RhdHVzQ2hhbm5lbDo6QnVmZmVyU3RhdHVzQ2hhbm5lbCgKKyAgICAgICAgY29uc3QgU3RhdHVzRGVzY3JpcHRvciAmZm1xRGVzYykgeworICAgIHN0ZDo6dW5pcXVlX3B0cjxCdWZmZXJTdGF0dXNRdWV1ZT4gcXVldWUgPQorICAgICAgICAgICAgc3RkOjptYWtlX3VuaXF1ZTxCdWZmZXJTdGF0dXNRdWV1ZT4oZm1xRGVzYyk7CisgICAgaWYgKCFxdWV1ZSB8fCBxdWV1ZS0+aXNWYWxpZCgpID09IGZhbHNlKSB7CisgICAgICAgIG1WYWxpZCA9IGZhbHNlOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIG1WYWxpZCAgPSB0cnVlOworICAgIG1CdWZmZXJTdGF0dXNRdWV1ZSA9IHN0ZDo6bW92ZShxdWV1ZSk7Cit9CisKK2Jvb2wgQnVmZmVyU3RhdHVzQ2hhbm5lbDo6aXNWYWxpZCgpIHsKKyAgICByZXR1cm4gbVZhbGlkOworfQorCitib29sIEJ1ZmZlclN0YXR1c0NoYW5uZWw6Om5lZWRzU3luYygpIHsKKyAgICBpZiAobVZhbGlkKSB7CisgICAgICAgIHNpemVfdCBhdmFpbCA9IG1CdWZmZXJTdGF0dXNRdWV1ZS0+YXZhaWxhYmxlVG9Xcml0ZSgpOworICAgICAgICByZXR1cm4gYXZhaWwgKyBrTWluRWxlbWVudHNUb1N5bmNJblF1ZXVlIDwga051bUVsZW1lbnRzSW5RdWV1ZTsKKyAgICB9CisgICAgcmV0dXJuIGZhbHNlOworfQorCit2b2lkIEJ1ZmZlclN0YXR1c0NoYW5uZWw6OnBvc3RCdWZmZXJSZWxlYXNlKAorICAgICAgICBDb25uZWN0aW9uSWQgY29ubmVjdGlvbklkLAorICAgICAgICBzdGQ6Omxpc3Q8QnVmZmVySWQ+ICZwZW5kaW5nLCBzdGQ6Omxpc3Q8QnVmZmVySWQ+ICZwb3N0ZWQpIHsKKyAgICBpZiAobVZhbGlkICYmIHBlbmRpbmcuc2l6ZSgpID4gMCkgeworICAgICAgICBzaXplX3QgYXZhaWwgPSBtQnVmZmVyU3RhdHVzUXVldWUtPmF2YWlsYWJsZVRvV3JpdGUoKTsKKyAgICAgICAgYXZhaWwgPSBzdGQ6Om1pbihhdmFpbCwgcGVuZGluZy5zaXplKCkpOworICAgICAgICBCdWZmZXJTdGF0dXNNZXNzYWdlIG1lc3NhZ2U7CisgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwIDsgaSA8IGF2YWlsOyArK2kpIHsKKyAgICAgICAgICAgIEJ1ZmZlcklkIGlkID0gcGVuZGluZy5mcm9udCgpOworICAgICAgICAgICAgbWVzc2FnZS5uZXdTdGF0dXMgPSBCdWZmZXJTdGF0dXM6Ok5PVF9VU0VEOworICAgICAgICAgICAgbWVzc2FnZS5idWZmZXJJZCA9IGlkOworICAgICAgICAgICAgbWVzc2FnZS5jb25uZWN0aW9uSWQgPSBjb25uZWN0aW9uSWQ7CisgICAgICAgICAgICBpZiAoIW1CdWZmZXJTdGF0dXNRdWV1ZS0+d3JpdGUoJm1lc3NhZ2UsIDEpKSB7CisgICAgICAgICAgICAgICAgLy8gU2luY2UgYXZhbGlhYmxlICMgb2Ygd3JpdGVzIGFyZSBhbHJlYWR5IGNvbmZpcm1lZCwKKyAgICAgICAgICAgICAgICAvLyB0aGlzIHNob3VsZCBub3QgaGFwcGVuLgorICAgICAgICAgICAgICAgIC8vIFRPRE86IGVycm9yIGhhbmRpbmc/CisgICAgICAgICAgICAgICAgQUxPR1coIkZNUSBtZXNzYWdlIGNhbm5vdCBiZSBzZW50IGZyb20gJWxsZCIsIChsb25nIGxvbmcpY29ubmVjdGlvbklkKTsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisgICAgICAgICAgICBwZW5kaW5nLnBvcF9mcm9udCgpOworICAgICAgICAgICAgcG9zdGVkLnB1c2hfYmFjayhpZCk7CisgICAgICAgIH0KKyAgICB9Cit9CisKK3ZvaWQgQnVmZmVyU3RhdHVzQ2hhbm5lbDo6cG9zdEJ1ZmZlckludmFsaWRhdGVBY2soCisgICAgICAgIENvbm5lY3Rpb25JZCBjb25uZWN0aW9uSWQsCisgICAgICAgIHVpbnQzMl90IGludmFsaWRhdGVJZCwKKyAgICAgICAgYm9vbCAqaW52YWxpZGF0ZWQpIHsKKyAgICBpZiAobVZhbGlkICYmICEqaW52YWxpZGF0ZWQpIHsKKyAgICAgICAgc2l6ZV90IGF2YWlsID0gbUJ1ZmZlclN0YXR1c1F1ZXVlLT5hdmFpbGFibGVUb1dyaXRlKCk7CisgICAgICAgIGlmIChhdmFpbCA+IDApIHsKKyAgICAgICAgICAgIEJ1ZmZlclN0YXR1c01lc3NhZ2UgbWVzc2FnZTsKKyAgICAgICAgICAgIG1lc3NhZ2UubmV3U3RhdHVzID0gQnVmZmVyU3RhdHVzOjpJTlZBTElEQVRJT05fQUNLOworICAgICAgICAgICAgbWVzc2FnZS5idWZmZXJJZCA9IGludmFsaWRhdGVJZDsKKyAgICAgICAgICAgIG1lc3NhZ2UuY29ubmVjdGlvbklkID0gY29ubmVjdGlvbklkOworICAgICAgICAgICAgaWYgKCFtQnVmZmVyU3RhdHVzUXVldWUtPndyaXRlKCZtZXNzYWdlLCAxKSkgeworICAgICAgICAgICAgICAgIC8vIFNpbmNlIGF2YWxpYWJsZSAjIG9mIHdyaXRlcyBhcmUgYWxyZWFkeSBjb25maXJtZWQsCisgICAgICAgICAgICAgICAgLy8gdGhpcyBzaG91bGQgbm90IGhhcHBlbi4KKyAgICAgICAgICAgICAgICAvLyBUT0RPOiBlcnJvciBoYW5kaW5nPworICAgICAgICAgICAgICAgIEFMT0dXKCJGTVEgbWVzc2FnZSBjYW5ub3QgYmUgc2VudCBmcm9tICVsbGQiLCAobG9uZyBsb25nKWNvbm5lY3Rpb25JZCk7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQorICAgICAgICAgICAgKmludmFsaWRhdGVkID0gdHJ1ZTsKKyAgICAgICAgfQorICAgIH0KK30KKworYm9vbCBCdWZmZXJTdGF0dXNDaGFubmVsOjpwb3N0QnVmZmVyU3RhdHVzTWVzc2FnZSgKKyAgICAgICAgVHJhbnNhY3Rpb25JZCB0cmFuc2FjdGlvbklkLCBCdWZmZXJJZCBidWZmZXJJZCwKKyAgICAgICAgQnVmZmVyU3RhdHVzIHN0YXR1cywgQ29ubmVjdGlvbklkIGNvbm5lY3Rpb25JZCwgQ29ubmVjdGlvbklkIHRhcmdldElkLAorICAgICAgICBzdGQ6Omxpc3Q8QnVmZmVySWQ+ICZwZW5kaW5nLCBzdGQ6Omxpc3Q8QnVmZmVySWQ+ICZwb3N0ZWQpIHsKKyAgICBpZiAobVZhbGlkKSB7CisgICAgICAgIHNpemVfdCBhdmFpbCA9IG1CdWZmZXJTdGF0dXNRdWV1ZS0+YXZhaWxhYmxlVG9Xcml0ZSgpOworICAgICAgICBzaXplX3QgbnVtUGVuZGluZyA9IHBlbmRpbmcuc2l6ZSgpOworICAgICAgICBpZiAoYXZhaWwgPj0gbnVtUGVuZGluZyArIDEpIHsKKyAgICAgICAgICAgIEJ1ZmZlclN0YXR1c01lc3NhZ2UgcmVsZWFzZSwgbWVzc2FnZTsKKyAgICAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbnVtUGVuZGluZzsgKytpKSB7CisgICAgICAgICAgICAgICAgQnVmZmVySWQgaWQgPSBwZW5kaW5nLmZyb250KCk7CisgICAgICAgICAgICAgICAgcmVsZWFzZS5uZXdTdGF0dXMgPSBCdWZmZXJTdGF0dXM6Ok5PVF9VU0VEOworICAgICAgICAgICAgICAgIHJlbGVhc2UuYnVmZmVySWQgPSBpZDsKKyAgICAgICAgICAgICAgICByZWxlYXNlLmNvbm5lY3Rpb25JZCA9IGNvbm5lY3Rpb25JZDsKKyAgICAgICAgICAgICAgICBpZiAoIW1CdWZmZXJTdGF0dXNRdWV1ZS0+d3JpdGUoJnJlbGVhc2UsIDEpKSB7CisgICAgICAgICAgICAgICAgICAgIC8vIFNpbmNlIGF2YWxpYWJsZSAjIG9mIHdyaXRlcyBhcmUgYWxyZWFkeSBjb25maXJtZWQsCisgICAgICAgICAgICAgICAgICAgIC8vIHRoaXMgc2hvdWxkIG5vdCBoYXBwZW4uCisgICAgICAgICAgICAgICAgICAgIC8vIFRPRE86IGVycm9yIGhhbmRsaW5nPworICAgICAgICAgICAgICAgICAgICBBTE9HVygiRk1RIG1lc3NhZ2UgY2Fubm90IGJlIHNlbnQgZnJvbSAlbGxkIiwgKGxvbmcgbG9uZyljb25uZWN0aW9uSWQpOworICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIHBlbmRpbmcucG9wX2Zyb250KCk7CisgICAgICAgICAgICAgICAgcG9zdGVkLnB1c2hfYmFjayhpZCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBtZXNzYWdlLnRyYW5zYWN0aW9uSWQgPSB0cmFuc2FjdGlvbklkOworICAgICAgICAgICAgbWVzc2FnZS5idWZmZXJJZCA9IGJ1ZmZlcklkOworICAgICAgICAgICAgbWVzc2FnZS5uZXdTdGF0dXMgPSBzdGF0dXM7CisgICAgICAgICAgICBtZXNzYWdlLmNvbm5lY3Rpb25JZCA9IGNvbm5lY3Rpb25JZDsKKyAgICAgICAgICAgIG1lc3NhZ2UudGFyZ2V0Q29ubmVjdGlvbklkID0gdGFyZ2V0SWQ7CisgICAgICAgICAgICAvLyBUT0RPIDogdGltZXNhdGFtcAorICAgICAgICAgICAgbWVzc2FnZS50aW1lc3RhbXBVcyA9IDA7CisgICAgICAgICAgICBpZiAoIW1CdWZmZXJTdGF0dXNRdWV1ZS0+d3JpdGUoJm1lc3NhZ2UsIDEpKSB7CisgICAgICAgICAgICAgICAgLy8gU2luY2UgYXZhbGlhYmxlICMgb2Ygd3JpdGVzIGFyZSBhbHJlYWR5IGNvbmZpcm1lZCwKKyAgICAgICAgICAgICAgICAvLyB0aGlzIHNob3VsZCBub3QgaGFwcGVuLgorICAgICAgICAgICAgICAgIEFMT0dXKCJGTVEgbWVzc2FnZSBjYW5ub3QgYmUgc2VudCBmcm9tICVsbGQiLCAobG9uZyBsb25nKWNvbm5lY3Rpb25JZCk7CisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgfQorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0KKyAgICB9CisgICAgcmV0dXJuIGZhbHNlOworfQorCitCdWZmZXJJbnZhbGlkYXRpb25MaXN0ZW5lcjo6QnVmZmVySW52YWxpZGF0aW9uTGlzdGVuZXIoCisgICAgICAgIGNvbnN0IEludmFsaWRhdGlvbkRlc2NyaXB0b3IgJmZtcURlc2MpIHsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8QnVmZmVySW52YWxpZGF0aW9uUXVldWU+IHF1ZXVlID0KKyAgICAgICAgICAgIHN0ZDo6bWFrZV91bmlxdWU8QnVmZmVySW52YWxpZGF0aW9uUXVldWU+KGZtcURlc2MpOworICAgIGlmICghcXVldWUgfHwgcXVldWUtPmlzVmFsaWQoKSA9PSBmYWxzZSkgeworICAgICAgICBtVmFsaWQgPSBmYWxzZTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBtVmFsaWQgID0gdHJ1ZTsKKyAgICBtQnVmZmVySW52YWxpZGF0aW9uUXVldWUgPSBzdGQ6Om1vdmUocXVldWUpOworICAgIC8vIGRyYWluIHByZXZpb3VzIG1lc3NhZ2VzCisgICAgc2l6ZV90IGF2YWlsID0gc3RkOjptaW4oCisgICAgICAgICAgICBtQnVmZmVySW52YWxpZGF0aW9uUXVldWUtPmF2YWlsYWJsZVRvUmVhZCgpLCAoc2l6ZV90KSBrTnVtRWxlbWVudHNJblF1ZXVlKTsKKyAgICBzdGQ6OnZlY3RvcjxCdWZmZXJJbnZhbGlkYXRpb25NZXNzYWdlPiB0ZW1wKGF2YWlsKTsKKyAgICBpZiAoYXZhaWwgPiAwKSB7CisgICAgICAgIG1CdWZmZXJJbnZhbGlkYXRpb25RdWV1ZS0+cmVhZCh0ZW1wLmRhdGEoKSwgYXZhaWwpOworICAgIH0KK30KKwordm9pZCBCdWZmZXJJbnZhbGlkYXRpb25MaXN0ZW5lcjo6Z2V0SW52YWxpZGF0aW9ucygKKyAgICAgICAgc3RkOjp2ZWN0b3I8QnVmZmVySW52YWxpZGF0aW9uTWVzc2FnZT4gJm1lc3NhZ2VzKSB7CisgICAgLy8gVHJ5IHR3aWNlIGluIGNhc2Ugb2Ygb3ZlcmZsb3cuCisgICAgLy8gVE9ETzogaGFuZGxpbmcgb3ZlcmZsb3cgdGhvdWdoIGl0IG1heSBub3QgaGFwcGVuLgorICAgIGZvciAoaW50IGkgPSAwOyBpIDwgMjsgKytpKSB7CisgICAgICAgIHNpemVfdCBhdmFpbCA9IHN0ZDo6bWluKAorICAgICAgICAgICAgICAgIG1CdWZmZXJJbnZhbGlkYXRpb25RdWV1ZS0+YXZhaWxhYmxlVG9SZWFkKCksIChzaXplX3QpIGtOdW1FbGVtZW50c0luUXVldWUpOworICAgICAgICBpZiAoYXZhaWwgPiAwKSB7CisgICAgICAgICAgICBzdGQ6OnZlY3RvcjxCdWZmZXJJbnZhbGlkYXRpb25NZXNzYWdlPiB0ZW1wKGF2YWlsKTsKKyAgICAgICAgICAgIGlmIChtQnVmZmVySW52YWxpZGF0aW9uUXVldWUtPnJlYWQodGVtcC5kYXRhKCksIGF2YWlsKSkgeworICAgICAgICAgICAgICAgIG1lc3NhZ2VzLnJlc2VydmUobWVzc2FnZXMuc2l6ZSgpICsgYXZhaWwpOworICAgICAgICAgICAgICAgIGZvciAoYXV0byBpdCA9IHRlbXAuYmVnaW4oKTsgaXQgIT0gdGVtcC5lbmQoKTsgKytpdCkgeworICAgICAgICAgICAgICAgICAgICBtZXNzYWdlcy5wdXNoX2JhY2soKml0KTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICB9Cit9CisKK2Jvb2wgQnVmZmVySW52YWxpZGF0aW9uTGlzdGVuZXI6OmlzVmFsaWQoKSB7CisgICAgcmV0dXJuIG1WYWxpZDsKK30KKworQnVmZmVySW52YWxpZGF0aW9uQ2hhbm5lbDo6QnVmZmVySW52YWxpZGF0aW9uQ2hhbm5lbCgpCisgICAgOiBtVmFsaWQodHJ1ZSksCisgICAgICBtQnVmZmVySW52YWxpZGF0aW9uUXVldWUoCisgICAgICAgICAgICAgIHN0ZDo6bWFrZV91bmlxdWU8QnVmZmVySW52YWxpZGF0aW9uUXVldWU+KGtOdW1FbGVtZW50c0luUXVldWUsIHRydWUpKSB7CisgICAgaWYgKCFtQnVmZmVySW52YWxpZGF0aW9uUXVldWUgfHwgbUJ1ZmZlckludmFsaWRhdGlvblF1ZXVlLT5pc1ZhbGlkKCkgPT0gZmFsc2UpIHsKKyAgICAgICAgbVZhbGlkID0gZmFsc2U7CisgICAgfQorfQorCitib29sIEJ1ZmZlckludmFsaWRhdGlvbkNoYW5uZWw6OmlzVmFsaWQoKSB7CisgICAgcmV0dXJuIG1WYWxpZDsKK30KKwordm9pZCBCdWZmZXJJbnZhbGlkYXRpb25DaGFubmVsOjpnZXREZXNjKGNvbnN0IEludmFsaWRhdGlvbkRlc2NyaXB0b3IgKipmbXFEZXNjUHRyKSB7CisgICAgaWYgKG1WYWxpZCkgeworICAgICAgICAqZm1xRGVzY1B0ciA9IG1CdWZmZXJJbnZhbGlkYXRpb25RdWV1ZS0+Z2V0RGVzYygpOworICAgIH0gZWxzZSB7CisgICAgICAgICpmbXFEZXNjUHRyID0gbnVsbHB0cjsKKyAgICB9Cit9CisKK3ZvaWQgQnVmZmVySW52YWxpZGF0aW9uQ2hhbm5lbDo6cG9zdEludmFsaWRhdGlvbigKKyAgICAgICAgdWludDMyX3QgbXNnSWQsIEJ1ZmZlcklkIGZyb21JZCwgQnVmZmVySWQgdG9JZCkgeworICAgIEJ1ZmZlckludmFsaWRhdGlvbk1lc3NhZ2UgbWVzc2FnZTsKKworICAgIG1lc3NhZ2UubWVzc2FnZUlkID0gbXNnSWQ7CisgICAgbWVzc2FnZS5mcm9tQnVmZmVySWQgPSBmcm9tSWQ7CisgICAgbWVzc2FnZS50b0J1ZmZlcklkID0gdG9JZDsKKyAgICAvLyBUT0RPOiBoYW5kbGUgZmFpbHVyZSAoaXQgZG9lcyBub3QgaGFwcGVuIG5vcm1hbGx5LikKKyAgICBtQnVmZmVySW52YWxpZGF0aW9uUXVldWUtPndyaXRlKCZtZXNzYWdlKTsKK30KKworfSAgLy8gbmFtZXNwYWNlIGltcGxlbWVudGF0aW9uCit9ICAvLyBuYW1lc3BhY2UgVjJfMAorfSAgLy8gbmFtZXNwYWNlIGJ1ZmZlcnBvb2wKK30gIC8vIG5hbWVzcGFjZSBtZWRpYQorfSAgLy8gbmFtZXNwYWNlIGhhcmR3YXJlCit9ICAvLyBuYW1lc3BhY2UgYW5kcm9pZAorCmRpZmYgLS1naXQgYS9tZWRpYS9idWZmZXJwb29sLzIuMC9CdWZmZXJTdGF0dXMuaCBiL21lZGlhL2J1ZmZlcnBvb2wvMi4wL0J1ZmZlclN0YXR1cy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZhNjU4MzgKLS0tIC9kZXYvbnVsbAorKysgYi9tZWRpYS9idWZmZXJwb29sLzIuMC9CdWZmZXJTdGF0dXMuaApAQCAtMCwwICsxLDIzMCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxOCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCisKKyNpZm5kZWYgQU5EUk9JRF9IQVJEV0FSRV9NRURJQV9CVUZGRVJQT09MX1YyXzBfQlVGRkVSU1RBVFVTX0gKKyNkZWZpbmUgQU5EUk9JRF9IQVJEV0FSRV9NRURJQV9CVUZGRVJQT09MX1YyXzBfQlVGRkVSU1RBVFVTX0gKKworI2luY2x1ZGUgPGFuZHJvaWQvaGFyZHdhcmUvbWVkaWEvYnVmZmVycG9vbC8yLjAvdHlwZXMuaD4KKyNpbmNsdWRlIDxidWZmZXJwb29sL0J1ZmZlclBvb2xUeXBlcy5oPgorI2luY2x1ZGUgPGZtcS9NZXNzYWdlUXVldWUuaD4KKyNpbmNsdWRlIDxoaWRsL01RRGVzY3JpcHRvci5oPgorI2luY2x1ZGUgPGhpZGwvU3RhdHVzLmg+CisjaW5jbHVkZSA8bWVtb3J5PgorI2luY2x1ZGUgPG11dGV4PgorI2luY2x1ZGUgPHZlY3Rvcj4KKyNpbmNsdWRlIDxsaXN0PgorCituYW1lc3BhY2UgYW5kcm9pZCB7CituYW1lc3BhY2UgaGFyZHdhcmUgeworbmFtZXNwYWNlIG1lZGlhIHsKK25hbWVzcGFjZSBidWZmZXJwb29sIHsKK25hbWVzcGFjZSBWMl8wIHsKK25hbWVzcGFjZSBpbXBsZW1lbnRhdGlvbiB7CisKKy8qKiBSZXR1cm5zIG1vbm90b25pYyB0aW1lc3RhbXAgaW4gVXMgc2luY2UgZml4ZWQgcG9pbnQgaW4gdGltZS4gKi8KK2ludDY0X3QgZ2V0VGltZXN0YW1wTm93KCk7CisKK2Jvb2wgaXNNZXNzYWdlTGF0ZXIodWludDMyX3QgY3VyTXNnSWQsIHVpbnQzMl90IHByZXZNc2dJZCk7CisKK2Jvb2wgaXNCdWZmZXJJblJhbmdlKEJ1ZmZlcklkIGZyb20sIEJ1ZmZlcklkIHRvLCBCdWZmZXJJZCBidWZmZXJJZCk7CisKKy8qKgorICogQSBjb2xsZWN0aW9uIG9mIGJ1ZmZlciBzdGF0dXMgbWVzc2FnZSBGTVEgZm9yIGEgYnVmZmVyIHBvb2wuIGJ1ZmZlcgorICogb3duZXJzaGlwL3N0YXR1cyBjaGFuZ2UgbWVzc2FnZXMgYXJlIHNlbnQgdmlhIHRoZSBGTVFzIGZyb20gdGhlIGNsaWVudHMuCisgKi8KK2NsYXNzIEJ1ZmZlclN0YXR1c09ic2VydmVyIHsKK3ByaXZhdGU6CisgICAgc3RkOjptYXA8Q29ubmVjdGlvbklkLCBzdGQ6OnVuaXF1ZV9wdHI8QnVmZmVyU3RhdHVzUXVldWU+PgorICAgICAgICAgICAgbUJ1ZmZlclN0YXR1c1F1ZXVlczsKKworcHVibGljOgorICAgIC8qKiBDcmVhdGVzIGEgYnVmZmVyIHN0YXR1cyBtZXNzYWdlIEZNUSBmb3IgdGhlIHNwZWNpZmllZAorICAgICAqIGNvbm5lY3Rpb24oY2xpZW50KS4KKyAgICAgKgorICAgICAqIEBwYXJhbSBjb25uZWN0aW9uSWQgIGNvbm5lY3Rpb24gSWQgb2YgdGhlIHNwZWNpZmllZCBjbGllbnQuCisgICAgICogQHBhcmFtIGZtcURlc2NQdHIgICAgZG91YmxlIHB0ciBvZiBjcmVhdGVkIEZNUSdzIGRlc2NyaXB0b3IuCisgICAgICoKKyAgICAgKiBAcmV0dXJuIE9LIGlmIEZNUSBpcyBjcmVhdGVkIHN1Y2Nlc3NmdWxseS4KKyAgICAgKiAgICAgICAgIE5PX01FTU9SWSB3aGVuIHRoZXJlIGlzIG5vIG1lbW9yeS4KKyAgICAgKiAgICAgICAgIENSSVRJQ0FMX0VSUk9SIG90aGVyd2lzZS4KKyAgICAgKi8KKyAgICBSZXN1bHRTdGF0dXMgb3BlbihDb25uZWN0aW9uSWQgaWQsIGNvbnN0IFN0YXR1c0Rlc2NyaXB0b3IqKiBmbXFEZXNjUHRyKTsKKworICAgIC8qKiBDbG9zZXMgYSBidWZmZXIgc3RhdHVzIG1lc3NhZ2UgRk1RIGZvciB0aGUgc3BlY2lmaWVkCisgICAgICogY29ubmVjdGlvbihjbGllbnQpLgorICAgICAqCisgICAgICogQHBhcmFtIGNvbm5lY3Rpb25JZCAgY29ubmVjdGlvbiBJZCBvZiB0aGUgc3BlY2lmaWVkIGNsaWVudC4KKyAgICAgKgorICAgICAqIEByZXR1cm4gT0sgaWYgdGhlIHNwZWNpZmllZCBjb25uZWN0aW9uIGlzIGNsb3NlZCBzdWNjZXNzZnVsbHkuCisgICAgICogICAgICAgICBDUklUSUNBTF9FUlJPUiBvdGhlcndpc2UuCisgICAgICovCisgICAgUmVzdWx0U3RhdHVzIGNsb3NlKENvbm5lY3Rpb25JZCBpZCk7CisKKyAgICAvKiogUmV0cmlldmVzIGFsbCBwZW5kaW5nIEZNUSBidWZmZXIgc3RhdHVzIG1lc3NhZ2VzIGZyb20gY2xpZW50cy4KKyAgICAgKgorICAgICAqIEBwYXJhbSBtZXNzYWdlcyAgcmV0cmlldmVkIHBlbmRpbmcgbWVzc2FnZXMuCisgICAgICovCisgICAgdm9pZCBnZXRCdWZmZXJTdGF0dXNDaGFuZ2VzKHN0ZDo6dmVjdG9yPEJ1ZmZlclN0YXR1c01lc3NhZ2U+ICZtZXNzYWdlcyk7Cit9OworCisvKioKKyAqIEEgYnVmZmVyIHN0YXR1cyBtZXNzYWdlIEZNUSBmb3IgYSBidWZmZXIgcG9vbCBjbGllbnQuIEJ1ZmZlciBvd25lcnNoaXAvc3RhdHVzCisgKiBjaGFuZ2UgbWVzc2FnZXMgYXJlIHNlbnQgdmlhIHRoZSBmbXEgdG8gdGhlIGJ1ZmZlciBwb29sLgorICovCitjbGFzcyBCdWZmZXJTdGF0dXNDaGFubmVsIHsKK3ByaXZhdGU6CisgICAgYm9vbCBtVmFsaWQ7CisgICAgc3RkOjp1bmlxdWVfcHRyPEJ1ZmZlclN0YXR1c1F1ZXVlPiBtQnVmZmVyU3RhdHVzUXVldWU7CisKK3B1YmxpYzoKKyAgICAvKioKKyAgICAgKiBDb25uZWN0cyB0byBhIGJ1ZmZlciBzdGF0dXMgbWVzc2FnZSBGTVEgZnJvbSBhIGRlc2NyaXB0b3Igb2YKKyAgICAgKiB0aGUgY3JlYXRlZCBGTVEuCisgICAgICoKKyAgICAgKiBAcGFyYW0gZm1xRGVzYyAgIERlc2NyaXB0b3Igb2YgdGhlIGNyZWF0ZWQgRk1RLgorICAgICAqLworICAgIEJ1ZmZlclN0YXR1c0NoYW5uZWwoY29uc3QgU3RhdHVzRGVzY3JpcHRvciAmZm1xRGVzYyk7CisKKyAgICAvKiogUmV0dXJucyB3aGV0aGVyIHRoZSBGTVEgaXMgY29ubmVjdGVkIHN1Y2Nlc3NmdWxseS4gKi8KKyAgICBib29sIGlzVmFsaWQoKTsKKworICAgIC8qKiBSZXR1cm5zIHdoZXRoZXIgdGhlIEZNUSBuZWVkcyB0byBiZSBzeW5jZWQgZnJvbSB0aGUgYnVmZmVyIHBvb2wgKi8KKyAgICBib29sIG5lZWRzU3luYygpOworCisgICAgLyoqCisgICAgICogUG9zdHMgYSBidWZmZXIgcmVsZWFzZSBtZXNzYWdlIHRvIHRoZSBidWZmZXIgcG9vbC4KKyAgICAgKgorICAgICAqIEBwYXJhbSBjb25uZWN0aW9uSWQgIGNvbm5lY3Rpb24gSWQgb2YgdGhlIGNsaWVudC4KKyAgICAgKiBAcGFyYW0gcGVuZGluZyAgICAgICBjdXJyZW50bHkgcGVuZGluZyBidWZmZXIgcmVsZWFzZSBtZXNzYWdlcy4KKyAgICAgKiBAcGFyYW0gcG9zdGVkICAgICAgICBwb3N0ZWQgYnVmZmVyIHJlbGVhc2UgbWVzc2FnZXMuCisgICAgICovCisgICAgdm9pZCBwb3N0QnVmZmVyUmVsZWFzZSgKKyAgICAgICAgICAgIENvbm5lY3Rpb25JZCBjb25uZWN0aW9uSWQsCisgICAgICAgICAgICBzdGQ6Omxpc3Q8QnVmZmVySWQ+ICZwZW5kaW5nLCBzdGQ6Omxpc3Q8QnVmZmVySWQ+ICZwb3N0ZWQpOworCisgICAgLyoqCisgICAgICogUG9zdHMgYSBidWZmZXIgc3RhdHVzIG1lc3NhZ2UgcmVnYXJkaW5nIHRoZSBzcGVjaWZpZWQgYnVmZmVyCisgICAgICogdHJhbnNmZXIgdHJhbnNhY3Rpb24uCisgICAgICoKKyAgICAgKiBAcGFyYW0gdHJhbnNhY3Rpb25JZCBJZCBvZiB0aGUgc3BlY2lmaWVkIHRyYW5zYWN0aW9uLgorICAgICAqIEBwYXJhbSBidWZmZXJJZCAgICAgIGJ1ZmZlciBJZCBvZiB0aGUgc3BlY2lmaWVkIHRyYW5zYWN0aW9uLgorICAgICAqIEBwYXJhbSBzdGF0dXMgICAgICAgIG5ldyBzdGF0dXMgb2YgdGhlIGJ1ZmZlci4KKyAgICAgKiBAcGFyYW0gY29ubmVjdGlvbklkICBjb25uZWN0aW9uIElkIG9mIHRoZSBjbGllbnQuCisgICAgICogQHBhcmFtIHRhcmdldElkICAgICAgY29ubmVjdGlvbiBJZCBvZiB0aGUgcmVjZWl2ZXIob25seSB3aGVuIHRoZSBzZW5kZXIKKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICBwb3N0cyBhIHN0YXR1cyBtZXNzYWdlKS4KKyAgICAgKiBAcGFyYW0gcGVuZGluZyAgICAgICBjdXJyZW50bHkgcGVuZGluZyBidWZmZXIgcmVsZWFzZSBtZXNzYWdlcy4KKyAgICAgKiBAcGFyYW0gcG9zdGVkICAgICAgICBwb3N0ZWQgYnVmZmVyIHJlbGVhc2UgbWVzc2FnZXMuCisgICAgICoKKyAgICAgKiBAcmV0dXJuIHtAY29kZSB0cnVlfSB3aGVuIHRoZSBzcGVjaWZpZWQgbWVzc2FnZSBpcyBwb3N0ZWQsCisgICAgICogICAgICAgICB7QGNvZGUgZmFsc2V9IG90aGVyd2lzZS4KKyAgICAgKi8KKyAgICBib29sIHBvc3RCdWZmZXJTdGF0dXNNZXNzYWdlKAorICAgICAgICAgICAgVHJhbnNhY3Rpb25JZCB0cmFuc2FjdGlvbklkLAorICAgICAgICAgICAgQnVmZmVySWQgYnVmZmVySWQsCisgICAgICAgICAgICBCdWZmZXJTdGF0dXMgc3RhdHVzLAorICAgICAgICAgICAgQ29ubmVjdGlvbklkIGNvbm5lY3Rpb25JZCwKKyAgICAgICAgICAgIENvbm5lY3Rpb25JZCB0YXJnZXRJZCwKKyAgICAgICAgICAgIHN0ZDo6bGlzdDxCdWZmZXJJZD4gJnBlbmRpbmcsIHN0ZDo6bGlzdDxCdWZmZXJJZD4gJnBvc3RlZCk7CisKKyAgICAvKioKKyAgICAgKiBQb3N0cyBhIGJ1ZmZlciBpbnZhbGlhZGF0aW9uIG1lc3NnZSB0byB0aGUgYnVmZmVyIHBvb2wuCisgICAgICoKKyAgICAgKiBAcGFyYW0gY29ubmVjdGlvbklkICBjb25uZWN0aW9uIElkIG9mIHRoZSBjbGllbnQuCisgICAgICogQHBhcmFtIGludmFsaWRhdGVJZCAgaW52YWxpZGF0aW9uIGFjayB0byB0aGUgYnVmZmVyIHBvb2wuCisgICAgICogICAgICAgICAgICAgICAgICAgICAgaWYgaW52YWxpZGF0aW9uIGlkIGlzIHplcm8sIHRoZSBhY2sgd2lsbCBub3QgYmUKKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICBwb3N0ZWQuCisgICAgICogQHBhcmFtIGludmFsaWRhdGVkICAgc2V0cyB7QGNvZGUgdHJ1ZX0gb25seSB3aGVuIHRoZSBpbnZhbGlkYXRpb24gYWNrIGlzCisgICAgICogICAgICAgICAgICAgICAgICAgICAgcG9zdGVkLgorICAgICAqLworICAgIHZvaWQgcG9zdEJ1ZmZlckludmFsaWRhdGVBY2soCisgICAgICAgICAgICBDb25uZWN0aW9uSWQgY29ubmVjdGlvbklkLAorICAgICAgICAgICAgdWludDMyX3QgaW52YWxpZGF0ZUlkLAorICAgICAgICAgICAgYm9vbCAqaW52YWxpZGF0ZWQpOworfTsKKworLyoqCisgKiBBIGJ1ZmZlciBpbnZhbGlkYXRpb24gRk1RIGZvciBhIGJ1ZmZlciBwb29sIGNsaWVudC4gQnVmZmVyIGludmFsaWRhdGlvbgorICogbWVzc2FnZXMgYXJlIHJlY2VpdmVkIHZpYSB0aGUgZm1xIGZyb20gdGhlIGJ1ZmZlciBwb29sLiBCdWZmZXIgaW52YWxpZGF0aW9uCisgKiBtZXNzYWdlcyBhcmUgaGFuZGxlZCBhcyBzb29uIGFzIHBvc3NpYmxlLgorICovCitjbGFzcyBCdWZmZXJJbnZhbGlkYXRpb25MaXN0ZW5lciB7Citwcml2YXRlOgorICAgIGJvb2wgbVZhbGlkOworICAgIHN0ZDo6dW5pcXVlX3B0cjxCdWZmZXJJbnZhbGlkYXRpb25RdWV1ZT4gbUJ1ZmZlckludmFsaWRhdGlvblF1ZXVlOworCitwdWJsaWM6CisgICAgLyoqCisgICAgICogQ29ubmVjdHMgdG8gYSBidWZmZXIgaW52YWxpZGF0aW9uIEZNUSBmcm9tIGEgZGVzY3JpcHRvciBvZiB0aGUgY3JlYXRlZCBGTVEuCisgICAgICoKKyAgICAgKiBAcGFyYW0gZm1xRGVzYyAgIERlc2NyaXB0b3Igb2YgdGhlIGNyZWF0ZWQgRk1RLgorICAgICAqLworICAgIEJ1ZmZlckludmFsaWRhdGlvbkxpc3RlbmVyKGNvbnN0IEludmFsaWRhdGlvbkRlc2NyaXB0b3IgJmZtcURlc2MpOworCisgICAgLyoqIFJldHJpZXZlcyBhbGwgcGVuZGluZyBidWZmZXIgaW52YWxpZGF0aW9uIG1lc3NhZ2VzIGZyb20gdGhlIGJ1ZmZlciBwb29sLgorICAgICAqCisgICAgICogQHBhcmFtIG1lc3NhZ2VzICByZXRyaWV2ZWQgcGVuZGluZyBtZXNzYWdlcy4KKyAgICAgKi8KKyAgICB2b2lkIGdldEludmFsaWRhdGlvbnMoc3RkOjp2ZWN0b3I8QnVmZmVySW52YWxpZGF0aW9uTWVzc2FnZT4gJm1lc3NhZ2VzKTsKKworICAgIC8qKiBSZXR1cm5zIHdoZXRoZXIgdGhlIEZNUSBpcyBjb25uZWN0ZWQgc3VjY2VzZnVsbHkuICovCisgICAgYm9vbCBpc1ZhbGlkKCk7Cit9OworCisvKioKKyAqIEEgYnVmZmVyIGludmFsaWRhdGlvbiBGTVEgZm9yIGEgYnVmZmVyIHBvb2wuIEEgYnVmZmVyIHBvb2wgd2lsbCBzZW5kIGJ1ZmZlcgorICogaW52YWxpZGF0aW9uIG1lc3NhZ2VzIHRvIHRoZSBjbGllbnRzIHZpYSB0aGUgRk1RLiBUaGUgRk1RIGlzIHNoYXJlZCBhbW9uZworICogYnVmZmVyIHBvb2wgY2xpZW50cy4KKyAqLworY2xhc3MgQnVmZmVySW52YWxpZGF0aW9uQ2hhbm5lbCB7Citwcml2YXRlOgorICAgIGJvb2wgbVZhbGlkOworICAgIHN0ZDo6dW5pcXVlX3B0cjxCdWZmZXJJbnZhbGlkYXRpb25RdWV1ZT4gbUJ1ZmZlckludmFsaWRhdGlvblF1ZXVlOworCitwdWJsaWM6CisgICAgLyoqCisgICAgICogQ3JlYXRlcyBhIGJ1ZmZlciBpbnZhbGlkYXRpb24gRk1RIGZvciBhIGJ1ZmZlciBwb29sLgorICAgICAqLworICAgIEJ1ZmZlckludmFsaWRhdGlvbkNoYW5uZWwoKTsKKworICAgIC8qKiBSZXR1cm5zIHdoZXRoZXIgdGhlIEZNUSBpcyBjb25uZWN0ZWQgc3VjY2VzZnVsbHkuICovCisgICAgYm9vbCBpc1ZhbGlkKCk7CisKKyAgICAvKioKKyAgICAgKiBSZXRyaWV2ZXMgdGhlIGRlc2NyaXB0b3Igb2YgYSBidWZmZXIgaW52YWxpZGF0aW9uIEZNUS4gdGhlIGRlc2NyaXB0b3IgbWF5CisgICAgICogYmUgcGFzc2VkIHRvIHRoZSBjbGllbnQgZm9yIGJ1ZmZlciBpbnZhbGlkYXRpb24gaGFuZGxpbmcuCisgICAgICoKKyAgICAgKiBAcGFyYW0gZm1xRGVzY1B0ciAgICBkb3VibGUgcHRyIG9mIGNyZWF0ZWQgRk1RJ3MgZGVzY3JpcHRvci4KKyAgICAgKi8KKyAgICB2b2lkIGdldERlc2MoY29uc3QgSW52YWxpZGF0aW9uRGVzY3JpcHRvciAqKmZtcURlc2NQdHIpOworCisgICAgLyoqIFBvc3RzIGEgYnVmZmVyIGludmFsaWRhdGlvbiBmb3IgaW52YWxpZGF0ZWQgYnVmZmVycy4KKyAgICAgKgorICAgICAqIEBwYXJhbSBtc2dJZCAgICAgSW52YWxpZGF0aW9uIG1lc3NhZ2UgaWQgd2hpY2ggaXMgdXNlZCB3aGVuIGNsaWVudHMgc2VuZAorICAgICAqICAgICAgICAgICAgICAgICAgYWNrcyBiYWNrIHZpYSBCdWZmZXJTdGF0dXNNZXNzYWdlCisgICAgICogQHBhcmFtIGZyb21JZCAgICBUaGUgc3RhcnQgYnVmZmVyaWQgb2YgdGhlIGludmFsaWRhdGVkIGJ1ZmZlcnMoaW5jbHVzaXZlKQorICAgICAqIEBwYXJhbSB0b0lkICAgICAgVGhlIGVuZCBidWZmZXJJZCBvZiB0aGUgaW52YWxpZGF0ZWQgYnVmZmVycyhpbmNsdXNpdmUpCisgICAgICovCisgICAgdm9pZCBwb3N0SW52YWxpZGF0aW9uKHVpbnQzMl90IG1zZ0lkLCBCdWZmZXJJZCBmcm9tSWQsIEJ1ZmZlcklkIHRvSWQpOworfTsKKworfSAgLy8gbmFtZXNwYWNlIGltcGxlbWVudGF0aW9uCit9ICAvLyBuYW1lc3BhY2UgVjJfMAorfSAgLy8gbmFtZXNwYWNlIGJ1ZmZlcnBvb2wKK30gIC8vIG5hbWVzcGFjZSBtZWRpYQorfSAgLy8gbmFtZXNwYWNlIGhhcmR3YXJlCit9ICAvLyBuYW1lc3BhY2UgYW5kcm9pZAorCisjZW5kaWYgIC8vIEFORFJPSURfSEFSRFdBUkVfTUVESUFfQlVGRkVSUE9PTF9WMl8wX0JVRkZFUlNUQVRVU19ICmRpZmYgLS1naXQgYS9tZWRpYS9idWZmZXJwb29sLzIuMC9DbGllbnRNYW5hZ2VyLmNwcCBiL21lZGlhL2J1ZmZlcnBvb2wvMi4wL0NsaWVudE1hbmFnZXIuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMzMWQzMTMKLS0tIC9kZXYvbnVsbAorKysgYi9tZWRpYS9idWZmZXJwb29sLzIuMC9DbGllbnRNYW5hZ2VyLmNwcApAQCAtMCwwICsxLDUzOSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxOCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCisjZGVmaW5lIExPR19UQUcgIkJ1ZmZlclBvb2xNYW5hZ2VyIgorLy8jZGVmaW5lIExPR19OREVCVUcgMAorCisjaW5jbHVkZSA8YnVmZmVycG9vbC9DbGllbnRNYW5hZ2VyLmg+CisjaW5jbHVkZSA8aGlkbC9IaWRsVHJhbnNwb3J0U3VwcG9ydC5oPgorI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorI2luY2x1ZGUgPHRpbWUuaD4KKyNpbmNsdWRlIDx1bmlzdGQuaD4KKyNpbmNsdWRlIDx1dGlscy9Mb2cuaD4KKyNpbmNsdWRlICJCdWZmZXJQb29sQ2xpZW50LmgiCisjaW5jbHVkZSAiT2JzZXJ2ZXIuaCIKKyNpbmNsdWRlICJBY2Nlc3Nvci5oIgorCituYW1lc3BhY2UgYW5kcm9pZCB7CituYW1lc3BhY2UgaGFyZHdhcmUgeworbmFtZXNwYWNlIG1lZGlhIHsKK25hbWVzcGFjZSBidWZmZXJwb29sIHsKK25hbWVzcGFjZSBWMl8wIHsKK25hbWVzcGFjZSBpbXBsZW1lbnRhdGlvbiB7CisKK3N0YXRpYyBjb25zdGV4cHIgaW50NjRfdCBrUmVnaXN0ZXJUaW1lb3V0VXMgPSA1MDAwMDA7IC8vIDAuNSBzZWMKK3N0YXRpYyBjb25zdGV4cHIgaW50NjRfdCBrQ2xlYW5VcER1cmF0aW9uVXMgPSAxMDAwMDAwOyAvLyBUT0RPOiAxIHNlYyB0dW5lCitzdGF0aWMgY29uc3RleHByIGludDY0X3Qga0NsaWVudFRpbWVvdXRVcyA9IDUwMDAwMDA7IC8vIFRPRE86IDUgc2VjcyB0dW5lCisKKy8qKgorICogVGhlIGhvbGRlciBvZiB0aGUgY29va2llIG9mIHJlbW90ZSBJQ2xpZW50TWFuYWdlci4KKyAqIFRoZSBjb29raWUgaXMgcHJvY2VzcyBsb2NhbGx5IHVuaXF1ZSBmb3IgZWFjaCBJQ2xpZW50TWFuYWdlci4KKyAqIChUaGUgY29va2llIGlzIHVzZWQgdG8gbm90aWZ5IGRlYXRoIG9mIGNsaWVudHMgdG8gYnVmZmVycG9vbCBwcm9jZXNzLikKKyAqLworY2xhc3MgQ2xpZW50TWFuYWdlckNvb2tpZUhvbGRlciB7CitwdWJsaWM6CisgICAgLyoqCisgICAgICogQ3JlYXRlcyBhIGNvb2tpZSBob2xkZXIgZm9yIHJlbW90ZSBJQ2xpZW50TWFuYWdlcihzKS4KKyAgICAgKi8KKyAgICBDbGllbnRNYW5hZ2VyQ29va2llSG9sZGVyKCk7CisKKyAgICAvKioKKyAgICAgKiBHZXRzIGEgY29va2llIGZvciBhIHJlbW90ZSBJQ2xpZW50TWFuYWdlci4KKyAgICAgKgorICAgICAqIEBwYXJhbSBtYW5hZ2VyICAgdGhlIHNwZWNpZmllZCByZW1vdGUgSUNsaWVudE1hbmFnZXIuCisgICAgICogQHBhcmFtIGFkZGVkICAgICB0cnVlIHdoZW4gdGhlIHNwZWNpZmllZCByZW1vdGUgSUNsaWVudE1hbmFnZXIgaXMgYWRkZWQKKyAgICAgKiAgICAgICAgICAgICAgICAgIG5ld2x5LCBmYWxzZSBvdGhlcndpc2UuCisgICAgICoKKyAgICAgKiBAcmV0dXJuIHRoZSBwcm9jZXNzIGxvY2FsbHkgdW5pcXVlIGNvb2tpZSBmb3IgdGhlIHNwZWNpZmllZCBJQ2xpZW50TWFuYWdlci4KKyAgICAgKi8KKyAgICB1aW50NjRfdCBnZXRDb29raWUoY29uc3Qgc3A8SUNsaWVudE1hbmFnZXI+ICZtYW5hZ2VyLCBib29sICphZGRlZCk7CisKK3ByaXZhdGU6CisgICAgdWludDY0X3QgbVNlcUlkOworICAgIHN0ZDo6bXV0ZXggbUxvY2s7CisgICAgc3RkOjpsaXN0PHN0ZDo6cGFpcjxjb25zdCB3cDxJQ2xpZW50TWFuYWdlcj4sIHVpbnQ2NF90Pj4gbU1hbmFnZXJzOworfTsKKworQ2xpZW50TWFuYWdlckNvb2tpZUhvbGRlcjo6Q2xpZW50TWFuYWdlckNvb2tpZUhvbGRlcigpIDogbVNlcUlkKDApe30KKwordWludDY0X3QgQ2xpZW50TWFuYWdlckNvb2tpZUhvbGRlcjo6Z2V0Q29va2llKAorICAgICAgICBjb25zdCBzcDxJQ2xpZW50TWFuYWdlcj4gJm1hbmFnZXIsCisgICAgICAgIGJvb2wgKmFkZGVkKSB7CisgICAgc3RkOjpsb2NrX2d1YXJkPHN0ZDo6bXV0ZXg+IGxvY2sobUxvY2spOworICAgIGZvciAoYXV0byBpdCA9IG1NYW5hZ2Vycy5iZWdpbigpOyBpdCAhPSBtTWFuYWdlcnMuZW5kKCk7KSB7CisgICAgICAgIGNvbnN0IHNwPElDbGllbnRNYW5hZ2VyPiBrZXkgPSBpdC0+Zmlyc3QucHJvbW90ZSgpOworICAgICAgICBpZiAoa2V5KSB7CisgICAgICAgICAgICBpZiAoaW50ZXJmYWNlc0VxdWFsKGtleSwgbWFuYWdlcikpIHsKKyAgICAgICAgICAgICAgICAqYWRkZWQgPSBmYWxzZTsKKyAgICAgICAgICAgICAgICByZXR1cm4gaXQtPnNlY29uZDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgICsraXQ7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBpdCA9IG1NYW5hZ2Vycy5lcmFzZShpdCk7CisgICAgICAgIH0KKyAgICB9CisgICAgdWludDY0X3QgaWQgPSBtU2VxSWQrKzsKKyAgICAqYWRkZWQgPSB0cnVlOworICAgIG1NYW5hZ2Vycy5wdXNoX2JhY2soc3RkOjptYWtlX3BhaXIobWFuYWdlciwgaWQpKTsKKyAgICByZXR1cm4gaWQ7Cit9CisKK2NsYXNzIENsaWVudE1hbmFnZXI6OkltcGwgeworcHVibGljOgorICAgIEltcGwoKTsKKworICAgIC8vIEJuUmVnaXN0ZXJTZW5kZXIKKyAgICBSZXN1bHRTdGF0dXMgcmVnaXN0ZXJTZW5kZXIoY29uc3Qgc3A8SUFjY2Vzc29yPiAmYWNjZXNzb3IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENvbm5lY3Rpb25JZCAqcENvbm5lY3Rpb25JZCk7CisKKyAgICAvLyBCcFJlZ2lzdGVyU2VuZGVyCisgICAgUmVzdWx0U3RhdHVzIHJlZ2lzdGVyU2VuZGVyKGNvbnN0IHNwPElDbGllbnRNYW5hZ2VyPiAmcmVjZWl2ZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENvbm5lY3Rpb25JZCBzZW5kZXJJZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ29ubmVjdGlvbklkICpyZWNlaXZlcklkKTsKKworICAgIFJlc3VsdFN0YXR1cyBjcmVhdGUoY29uc3Qgc3RkOjpzaGFyZWRfcHRyPEJ1ZmZlclBvb2xBbGxvY2F0b3I+ICZhbGxvY2F0b3IsCisgICAgICAgICAgICAgICAgICAgICAgICBDb25uZWN0aW9uSWQgKnBDb25uZWN0aW9uSWQpOworCisgICAgUmVzdWx0U3RhdHVzIGNsb3NlKENvbm5lY3Rpb25JZCBjb25uZWN0aW9uSWQpOworCisgICAgUmVzdWx0U3RhdHVzIGZsdXNoKENvbm5lY3Rpb25JZCBjb25uZWN0aW9uSWQpOworCisgICAgUmVzdWx0U3RhdHVzIGFsbG9jYXRlKENvbm5lY3Rpb25JZCBjb25uZWN0aW9uSWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0ZDo6dmVjdG9yPHVpbnQ4X3Q+ICZwYXJhbXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgIG5hdGl2ZV9oYW5kbGVfdCAqKmhhbmRsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgc3RkOjpzaGFyZWRfcHRyPEJ1ZmZlclBvb2xEYXRhPiAqYnVmZmVyKTsKKworICAgIFJlc3VsdFN0YXR1cyByZWNlaXZlKENvbm5lY3Rpb25JZCBjb25uZWN0aW9uSWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgVHJhbnNhY3Rpb25JZCB0cmFuc2FjdGlvbklkLAorICAgICAgICAgICAgICAgICAgICAgICAgIEJ1ZmZlcklkIGJ1ZmZlcklkLAorICAgICAgICAgICAgICAgICAgICAgICAgIGludDY0X3QgdGltZXN0YW1wVXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgbmF0aXZlX2hhbmRsZV90ICoqaGFuZGxlLAorICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZDo6c2hhcmVkX3B0cjxCdWZmZXJQb29sRGF0YT4gKmJ1ZmZlcik7CisKKyAgICBSZXN1bHRTdGF0dXMgcG9zdFNlbmQoQ29ubmVjdGlvbklkIHJlY2VpdmVySWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0ZDo6c2hhcmVkX3B0cjxCdWZmZXJQb29sRGF0YT4gJmJ1ZmZlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgVHJhbnNhY3Rpb25JZCAqdHJhbnNhY3Rpb25JZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgaW50NjRfdCAqdGltZXN0YW1wVXMpOworCisgICAgUmVzdWx0U3RhdHVzIGdldEFjY2Vzc29yKENvbm5lY3Rpb25JZCBjb25uZWN0aW9uSWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNwPElBY2Nlc3Nvcj4gKmFjY2Vzc29yKTsKKworICAgIHZvaWQgY2xlYW5VcChib29sIGNsZWFyQ2FjaGUgPSBmYWxzZSk7CisKK3ByaXZhdGU6CisgICAgLy8gSW4gb3JkZXIgdG8gcHJldmVudCBkZWFkbG9jayBiZXR3ZWVuIG11bHRpcGxlIGxvY2tzLAorICAgIC8vIGFsd2F5cyBsb2NrIENsaWVudENhY2hlLmxvY2sgYmVmb3JlIGxvY2tpbmcgQWN0aXZlQ2xpZW50cy5sb2NrLgorICAgIHN0cnVjdCBDbGllbnRDYWNoZSB7CisgICAgICAgIC8vIFRoaXMgbG9jayBpcyBoZWxkIGZvciBicmllZiBkdXJhdGlvbi4KKyAgICAgICAgLy8gQmxvY2tpbmcgb3BlcmF0aW9uIGlzIG5vdCBwZXJmb3JtZWQgd2hpbGUgaG9sZGluZyB0aGUgbG9jay4KKyAgICAgICAgc3RkOjptdXRleCBtTXV0ZXg7CisgICAgICAgIHN0ZDo6bGlzdDxzdGQ6OnBhaXI8Y29uc3Qgd3A8SUFjY2Vzc29yPiwgY29uc3Qgc3RkOjp3ZWFrX3B0cjxCdWZmZXJQb29sQ2xpZW50Pj4+CisgICAgICAgICAgICAgICAgbUNsaWVudHM7CisgICAgICAgIHN0ZDo6Y29uZGl0aW9uX3ZhcmlhYmxlIG1Db25uZWN0Q3Y7CisgICAgICAgIGJvb2wgbUNvbm5lY3Rpbmc7CisgICAgICAgIGludDY0X3QgbUxhc3RDbGVhblVwVXM7CisKKyAgICAgICAgQ2xpZW50Q2FjaGUoKSA6IG1Db25uZWN0aW5nKGZhbHNlKSwgbUxhc3RDbGVhblVwVXMoZ2V0VGltZXN0YW1wTm93KCkpIHt9CisgICAgfSBtQ2FjaGU7CisKKyAgICAvLyBBY3RpdmUgY2xpZW50cyB3aGljaCBjYW4gYmUgcmV0cmlldmVkIHZpYSBDb25uZWN0aW9uSWQKKyAgICBzdHJ1Y3QgQWN0aXZlQ2xpZW50cyB7CisgICAgICAgIC8vIFRoaXMgbG9jayBpcyBoZWxkIGZvciBicmllZiBkdXJhdGlvbi4KKyAgICAgICAgLy8gQmxvY2tpbmcgb3BlcmF0aW9uIGlzIG5vdCBwZXJmb3JtZWQgaG9sZGluZyB0aGUgbG9jay4KKyAgICAgICAgc3RkOjptdXRleCBtTXV0ZXg7CisgICAgICAgIHN0ZDo6bWFwPENvbm5lY3Rpb25JZCwgY29uc3Qgc3RkOjpzaGFyZWRfcHRyPEJ1ZmZlclBvb2xDbGllbnQ+PgorICAgICAgICAgICAgICAgIG1DbGllbnRzOworICAgIH0gbUFjdGl2ZTsKKworICAgIHNwPE9ic2VydmVyPiBtT2JzZXJ2ZXI7CisKKyAgICBDbGllbnRNYW5hZ2VyQ29va2llSG9sZGVyIG1SZW1vdGVDbGllbnRDb29raWVzOworfTsKKworQ2xpZW50TWFuYWdlcjo6SW1wbDo6SW1wbCgpCisgICAgOiBtT2JzZXJ2ZXIobmV3IE9ic2VydmVyKCkpIHt9CisKK1Jlc3VsdFN0YXR1cyBDbGllbnRNYW5hZ2VyOjpJbXBsOjpyZWdpc3RlclNlbmRlcigKKyAgICAgICAgY29uc3Qgc3A8SUFjY2Vzc29yPiAmYWNjZXNzb3IsIENvbm5lY3Rpb25JZCAqcENvbm5lY3Rpb25JZCkgeworICAgIGNsZWFuVXAoKTsKKyAgICBpbnQ2NF90IHRpbWVvdXRVcyA9IGdldFRpbWVzdGFtcE5vdygpICsga1JlZ2lzdGVyVGltZW91dFVzOworICAgIGRvIHsKKyAgICAgICAgc3RkOjp1bmlxdWVfbG9jazxzdGQ6Om11dGV4PiBsb2NrKG1DYWNoZS5tTXV0ZXgpOworICAgICAgICBmb3IgKGF1dG8gaXQgPSBtQ2FjaGUubUNsaWVudHMuYmVnaW4oKTsgaXQgIT0gbUNhY2hlLm1DbGllbnRzLmVuZCgpOyArK2l0KSB7CisgICAgICAgICAgICBzcDxJQWNjZXNzb3I+IHNBY2Nlc3NvciA9IGl0LT5maXJzdC5wcm9tb3RlKCk7CisgICAgICAgICAgICBpZiAoc0FjY2Vzc29yICYmIGludGVyZmFjZXNFcXVhbChzQWNjZXNzb3IsIGFjY2Vzc29yKSkgeworICAgICAgICAgICAgICAgIGNvbnN0IHN0ZDo6c2hhcmVkX3B0cjxCdWZmZXJQb29sQ2xpZW50PiBjbGllbnQgPSBpdC0+c2Vjb25kLmxvY2soKTsKKyAgICAgICAgICAgICAgICBpZiAoY2xpZW50KSB7CisgICAgICAgICAgICAgICAgICAgIHN0ZDo6bG9ja19ndWFyZDxzdGQ6Om11dGV4PiBsb2NrKG1BY3RpdmUubU11dGV4KTsKKyAgICAgICAgICAgICAgICAgICAgKnBDb25uZWN0aW9uSWQgPSBjbGllbnQtPmdldENvbm5lY3Rpb25JZCgpOworICAgICAgICAgICAgICAgICAgICBpZiAobUFjdGl2ZS5tQ2xpZW50cy5maW5kKCpwQ29ubmVjdGlvbklkKSAhPSBtQWN0aXZlLm1DbGllbnRzLmVuZCgpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBBTE9HVigicmVnaXN0ZXIgZXhpc3RpbmcgY29ubmVjdGlvbiAlbGxkIiwgKGxvbmcgbG9uZykqcENvbm5lY3Rpb25JZCk7CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gUmVzdWx0U3RhdHVzOjpBTFJFQURZX0VYSVNUUzsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBtQ2FjaGUubUNsaWVudHMuZXJhc2UoaXQpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGlmICghbUNhY2hlLm1Db25uZWN0aW5nKSB7CisgICAgICAgICAgICBtQ2FjaGUubUNvbm5lY3RpbmcgPSB0cnVlOworICAgICAgICAgICAgbG9jay51bmxvY2soKTsKKyAgICAgICAgICAgIFJlc3VsdFN0YXR1cyByZXN1bHQgPSBSZXN1bHRTdGF0dXM6Ok9LOworICAgICAgICAgICAgY29uc3Qgc3RkOjpzaGFyZWRfcHRyPEJ1ZmZlclBvb2xDbGllbnQ+IGNsaWVudCA9CisgICAgICAgICAgICAgICAgICAgIHN0ZDo6bWFrZV9zaGFyZWQ8QnVmZmVyUG9vbENsaWVudD4oYWNjZXNzb3IsIG1PYnNlcnZlcik7CisgICAgICAgICAgICBsb2NrLmxvY2soKTsKKyAgICAgICAgICAgIGlmICghY2xpZW50KSB7CisgICAgICAgICAgICAgICAgcmVzdWx0ID0gUmVzdWx0U3RhdHVzOjpOT19NRU1PUlk7CisgICAgICAgICAgICB9IGVsc2UgaWYgKCFjbGllbnQtPmlzVmFsaWQoKSkgeworICAgICAgICAgICAgICAgIHJlc3VsdCA9IFJlc3VsdFN0YXR1czo6Q1JJVElDQUxfRVJST1I7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAocmVzdWx0ID09IFJlc3VsdFN0YXR1czo6T0spIHsKKyAgICAgICAgICAgICAgICAvLyBUT0RPOiBoYW5kbGUgaW5zZXJ0IGZhaWwuIChtYWxsb2MgZmFpbCkKKyAgICAgICAgICAgICAgICBjb25zdCBzdGQ6OndlYWtfcHRyPEJ1ZmZlclBvb2xDbGllbnQ+IHdjbGllbnQgPSBjbGllbnQ7CisgICAgICAgICAgICAgICAgbUNhY2hlLm1DbGllbnRzLnB1c2hfYmFjayhzdGQ6Om1ha2VfcGFpcihhY2Nlc3Nvciwgd2NsaWVudCkpOworICAgICAgICAgICAgICAgIENvbm5lY3Rpb25JZCBjb25JZCA9IGNsaWVudC0+Z2V0Q29ubmVjdGlvbklkKCk7CisgICAgICAgICAgICAgICAgbU9ic2VydmVyLT5hZGRDbGllbnQoY29uSWQsIHdjbGllbnQpOworICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgc3RkOjpsb2NrX2d1YXJkPHN0ZDo6bXV0ZXg+IGxvY2sobUFjdGl2ZS5tTXV0ZXgpOworICAgICAgICAgICAgICAgICAgICBtQWN0aXZlLm1DbGllbnRzLmluc2VydChzdGQ6Om1ha2VfcGFpcihjb25JZCwgY2xpZW50KSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICpwQ29ubmVjdGlvbklkID0gY29uSWQ7CisgICAgICAgICAgICAgICAgQUxPR1YoInJlZ2lzdGVyIG5ldyBjb25uZWN0aW9uICVsbGQiLCAobG9uZyBsb25nKSpwQ29ubmVjdGlvbklkKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIG1DYWNoZS5tQ29ubmVjdGluZyA9IGZhbHNlOworICAgICAgICAgICAgbG9jay51bmxvY2soKTsKKyAgICAgICAgICAgIG1DYWNoZS5tQ29ubmVjdEN2Lm5vdGlmeV9hbGwoKTsKKyAgICAgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgICAgIH0KKyAgICAgICAgbUNhY2hlLm1Db25uZWN0Q3Yud2FpdF9mb3IoCisgICAgICAgICAgICAgICAgbG9jaywgc3RkOjpjaHJvbm86Om1pY3Jvc2Vjb25kcyhrUmVnaXN0ZXJUaW1lb3V0VXMpKTsKKyAgICB9IHdoaWxlIChnZXRUaW1lc3RhbXBOb3coKSA8IHRpbWVvdXRVcyk7CisgICAgLy8gVE9ETzogcmV0dXJuIHRpbWVvdXQgZXJyb3IKKyAgICByZXR1cm4gUmVzdWx0U3RhdHVzOjpDUklUSUNBTF9FUlJPUjsKK30KKworUmVzdWx0U3RhdHVzIENsaWVudE1hbmFnZXI6OkltcGw6OnJlZ2lzdGVyU2VuZGVyKAorICAgICAgICBjb25zdCBzcDxJQ2xpZW50TWFuYWdlcj4gJnJlY2VpdmVyLAorICAgICAgICBDb25uZWN0aW9uSWQgc2VuZGVySWQsCisgICAgICAgIENvbm5lY3Rpb25JZCAqcmVjZWl2ZXJJZCkgeworICAgIHNwPElBY2Nlc3Nvcj4gYWNjZXNzb3I7CisgICAgYm9vbCBsb2NhbCA9IGZhbHNlOworICAgIHsKKyAgICAgICAgc3RkOjpsb2NrX2d1YXJkPHN0ZDo6bXV0ZXg+IGxvY2sobUFjdGl2ZS5tTXV0ZXgpOworICAgICAgICBhdXRvIGl0ID0gbUFjdGl2ZS5tQ2xpZW50cy5maW5kKHNlbmRlcklkKTsKKyAgICAgICAgaWYgKGl0ID09IG1BY3RpdmUubUNsaWVudHMuZW5kKCkpIHsKKyAgICAgICAgICAgIHJldHVybiBSZXN1bHRTdGF0dXM6Ok5PVF9GT1VORDsKKyAgICAgICAgfQorICAgICAgICBpdC0+c2Vjb25kLT5nZXRBY2Nlc3NvcigmYWNjZXNzb3IpOworICAgICAgICBsb2NhbCA9IGl0LT5zZWNvbmQtPmlzTG9jYWwoKTsKKyAgICB9CisgICAgUmVzdWx0U3RhdHVzIHJzID0gUmVzdWx0U3RhdHVzOjpDUklUSUNBTF9FUlJPUjsKKyAgICBpZiAoYWNjZXNzb3IpIHsKKyAgICAgICBSZXR1cm48dm9pZD4gdHJhbnNSZXN1bHQgPSByZWNlaXZlci0+cmVnaXN0ZXJTZW5kZXIoCisgICAgICAgICAgICAgICAgYWNjZXNzb3IsCisgICAgICAgICAgICAgICAgWyZycywgcmVjZWl2ZXJJZF0oCisgICAgICAgICAgICAgICAgICAgICAgICBSZXN1bHRTdGF0dXMgc3RhdHVzLAorICAgICAgICAgICAgICAgICAgICAgICAgaW50NjRfdCBjb25uZWN0aW9uSWQpIHsKKyAgICAgICAgICAgICAgICAgICAgcnMgPSBzdGF0dXM7CisgICAgICAgICAgICAgICAgICAgICpyZWNlaXZlcklkID0gY29ubmVjdGlvbklkOworICAgICAgICAgICAgICAgIH0pOworICAgICAgICBpZiAoIXRyYW5zUmVzdWx0LmlzT2soKSkgeworICAgICAgICAgICAgcmV0dXJuIFJlc3VsdFN0YXR1czo6Q1JJVElDQUxfRVJST1I7CisgICAgICAgIH0gZWxzZSBpZiAobG9jYWwgJiYgcnMgPT0gUmVzdWx0U3RhdHVzOjpPSykgeworICAgICAgICAgICAgc3A8Q29ubmVjdGlvbkRlYXRoUmVjaXBpZW50PiByZWNpcGllbnQgPSBBY2Nlc3Nvcjo6Z2V0Q29ubmVjdGlvbkRlYXRoUmVjaXBpZW50KCk7CisgICAgICAgICAgICBpZiAocmVjaXBpZW50KSAgeworICAgICAgICAgICAgICAgIEFMT0dWKCJjbGllbnQgZGVhdGggcmVjaXBpZW50IHJlZ2lzdGVyZWQgJWxsZCIsIChsb25nIGxvbmcpKnJlY2VpdmVySWQpOworICAgICAgICAgICAgICAgIGJvb2wgYWRkZWQ7CisgICAgICAgICAgICAgICAgdWludDY0X3QgY29va2llID0gbVJlbW90ZUNsaWVudENvb2tpZXMuZ2V0Q29va2llKHJlY2VpdmVyLCAmYWRkZWQpOworICAgICAgICAgICAgICAgIHJlY2lwaWVudC0+YWRkQ29va2llVG9Db25uZWN0aW9uKGNvb2tpZSwgKnJlY2VpdmVySWQpOworICAgICAgICAgICAgICAgIGlmIChhZGRlZCkgeworICAgICAgICAgICAgICAgICAgICBSZXR1cm48Ym9vbD4gdHJhbnNSZXN1bHQgPSByZWNlaXZlci0+bGlua1RvRGVhdGgocmVjaXBpZW50LCBjb29raWUpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKyAgICByZXR1cm4gcnM7Cit9CisKK1Jlc3VsdFN0YXR1cyBDbGllbnRNYW5hZ2VyOjpJbXBsOjpjcmVhdGUoCisgICAgICAgIGNvbnN0IHN0ZDo6c2hhcmVkX3B0cjxCdWZmZXJQb29sQWxsb2NhdG9yPiAmYWxsb2NhdG9yLAorICAgICAgICBDb25uZWN0aW9uSWQgKnBDb25uZWN0aW9uSWQpIHsKKyAgICBjb25zdCBzcDxBY2Nlc3Nvcj4gYWNjZXNzb3IgPSBuZXcgQWNjZXNzb3IoYWxsb2NhdG9yKTsKKyAgICBpZiAoIWFjY2Vzc29yIHx8ICFhY2Nlc3Nvci0+aXNWYWxpZCgpKSB7CisgICAgICAgIHJldHVybiBSZXN1bHRTdGF0dXM6OkNSSVRJQ0FMX0VSUk9SOworICAgIH0KKyAgICAvLyBUT0RPOiBvYnNlcnZlciBpcyBsb2NhbC4gdXNlIGRpcmVjdCBjYWxsIGluc3RlYWQgb2YgaGlkbCBjYWxsLgorICAgIHN0ZDo6c2hhcmVkX3B0cjxCdWZmZXJQb29sQ2xpZW50PiBjbGllbnQgPQorICAgICAgICAgICAgc3RkOjptYWtlX3NoYXJlZDxCdWZmZXJQb29sQ2xpZW50PihhY2Nlc3NvciwgbU9ic2VydmVyKTsKKyAgICBpZiAoIWNsaWVudCB8fCAhY2xpZW50LT5pc1ZhbGlkKCkpIHsKKyAgICAgICAgcmV0dXJuIFJlc3VsdFN0YXR1czo6Q1JJVElDQUxfRVJST1I7CisgICAgfQorICAgIC8vIFNpbmNlIGEgbmV3IGJ1ZmZlcnBvb2wgaXMgY3JlYXRlZCwgZXZpY3QgbWVtb3JpZXMgd2hpY2ggYXJlIHVzZWQgYnkKKyAgICAvLyBleGlzdGluZyBidWZmZXJwb29scyBhbmQgY2xpZW50cy4KKyAgICBjbGVhblVwKHRydWUpOworICAgIHsKKyAgICAgICAgLy8gVE9ETzogaGFuZGxlIGluc2VydCBmYWlsLiAobWFsbG9jIGZhaWwpCisgICAgICAgIHN0ZDo6bG9ja19ndWFyZDxzdGQ6Om11dGV4PiBsb2NrKG1DYWNoZS5tTXV0ZXgpOworICAgICAgICBjb25zdCBzdGQ6OndlYWtfcHRyPEJ1ZmZlclBvb2xDbGllbnQ+IHdjbGllbnQgPSBjbGllbnQ7CisgICAgICAgIG1DYWNoZS5tQ2xpZW50cy5wdXNoX2JhY2soc3RkOjptYWtlX3BhaXIoYWNjZXNzb3IsIHdjbGllbnQpKTsKKyAgICAgICAgQ29ubmVjdGlvbklkIGNvbklkID0gY2xpZW50LT5nZXRDb25uZWN0aW9uSWQoKTsKKyAgICAgICAgbU9ic2VydmVyLT5hZGRDbGllbnQoY29uSWQsIHdjbGllbnQpOworICAgICAgICB7CisgICAgICAgICAgICBzdGQ6OmxvY2tfZ3VhcmQ8c3RkOjptdXRleD4gbG9jayhtQWN0aXZlLm1NdXRleCk7CisgICAgICAgICAgICBtQWN0aXZlLm1DbGllbnRzLmluc2VydChzdGQ6Om1ha2VfcGFpcihjb25JZCwgY2xpZW50KSk7CisgICAgICAgIH0KKyAgICAgICAgKnBDb25uZWN0aW9uSWQgPSBjb25JZDsKKyAgICAgICAgQUxPR1YoImNyZWF0ZSBuZXcgY29ubmVjdGlvbiAlbGxkIiwgKGxvbmcgbG9uZykqcENvbm5lY3Rpb25JZCk7CisgICAgfQorICAgIHJldHVybiBSZXN1bHRTdGF0dXM6Ok9LOworfQorCitSZXN1bHRTdGF0dXMgQ2xpZW50TWFuYWdlcjo6SW1wbDo6Y2xvc2UoQ29ubmVjdGlvbklkIGNvbm5lY3Rpb25JZCkgeworICAgIHN0ZDo6dW5pcXVlX2xvY2s8c3RkOjptdXRleD4gbG9jazEobUNhY2hlLm1NdXRleCk7CisgICAgc3RkOjp1bmlxdWVfbG9jazxzdGQ6Om11dGV4PiBsb2NrMihtQWN0aXZlLm1NdXRleCk7CisgICAgYXV0byBpdCA9IG1BY3RpdmUubUNsaWVudHMuZmluZChjb25uZWN0aW9uSWQpOworICAgIGlmIChpdCAhPSBtQWN0aXZlLm1DbGllbnRzLmVuZCgpKSB7CisgICAgICAgIHNwPElBY2Nlc3Nvcj4gYWNjZXNzb3I7CisgICAgICAgIGl0LT5zZWNvbmQtPmdldEFjY2Vzc29yKCZhY2Nlc3Nvcik7CisgICAgICAgIHN0ZDo6c2hhcmVkX3B0cjxCdWZmZXJQb29sQ2xpZW50PiBjbG9zaW5nID0gaXQtPnNlY29uZDsKKyAgICAgICAgbUFjdGl2ZS5tQ2xpZW50cy5lcmFzZShjb25uZWN0aW9uSWQpOworICAgICAgICBmb3IgKGF1dG8gY2l0ID0gbUNhY2hlLm1DbGllbnRzLmJlZ2luKCk7IGNpdCAhPSBtQ2FjaGUubUNsaWVudHMuZW5kKCk7KSB7CisgICAgICAgICAgICAvLyBjbGVhbiB1cCBkZWFkIGNsaWVudCBjYWNoZXMKKyAgICAgICAgICAgIHNwPElBY2Nlc3Nvcj4gY0FjY2Vzc29yID0gY2l0LT5maXJzdC5wcm9tb3RlKCk7CisgICAgICAgICAgICBpZiAoIWNBY2Nlc3NvciB8fCAoYWNjZXNzb3IgJiYgaW50ZXJmYWNlc0VxdWFsKGNBY2Nlc3NvciwgYWNjZXNzb3IpKSkgeworICAgICAgICAgICAgICAgIGNpdCA9IG1DYWNoZS5tQ2xpZW50cy5lcmFzZShjaXQpOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBjaXQrKzsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBsb2NrMi51bmxvY2soKTsKKyAgICAgICAgbG9jazEudW5sb2NrKCk7CisgICAgICAgIGNsb3NpbmctPmZsdXNoKCk7CisgICAgICAgIHJldHVybiBSZXN1bHRTdGF0dXM6Ok9LOworICAgIH0KKyAgICByZXR1cm4gUmVzdWx0U3RhdHVzOjpOT1RfRk9VTkQ7Cit9CisKK1Jlc3VsdFN0YXR1cyBDbGllbnRNYW5hZ2VyOjpJbXBsOjpmbHVzaChDb25uZWN0aW9uSWQgY29ubmVjdGlvbklkKSB7CisgICAgc3RkOjpzaGFyZWRfcHRyPEJ1ZmZlclBvb2xDbGllbnQ+IGNsaWVudDsKKyAgICB7CisgICAgICAgIHN0ZDo6bG9ja19ndWFyZDxzdGQ6Om11dGV4PiBsb2NrKG1BY3RpdmUubU11dGV4KTsKKyAgICAgICAgYXV0byBpdCA9IG1BY3RpdmUubUNsaWVudHMuZmluZChjb25uZWN0aW9uSWQpOworICAgICAgICBpZiAoaXQgPT0gbUFjdGl2ZS5tQ2xpZW50cy5lbmQoKSkgeworICAgICAgICAgICAgcmV0dXJuIFJlc3VsdFN0YXR1czo6Tk9UX0ZPVU5EOworICAgICAgICB9CisgICAgICAgIGNsaWVudCA9IGl0LT5zZWNvbmQ7CisgICAgfQorICAgIHJldHVybiBjbGllbnQtPmZsdXNoKCk7Cit9CisKK1Jlc3VsdFN0YXR1cyBDbGllbnRNYW5hZ2VyOjpJbXBsOjphbGxvY2F0ZSgKKyAgICAgICAgQ29ubmVjdGlvbklkIGNvbm5lY3Rpb25JZCwgY29uc3Qgc3RkOjp2ZWN0b3I8dWludDhfdD4gJnBhcmFtcywKKyAgICAgICAgbmF0aXZlX2hhbmRsZV90ICoqaGFuZGxlLCBzdGQ6OnNoYXJlZF9wdHI8QnVmZmVyUG9vbERhdGE+ICpidWZmZXIpIHsKKyAgICBzdGQ6OnNoYXJlZF9wdHI8QnVmZmVyUG9vbENsaWVudD4gY2xpZW50OworICAgIHsKKyAgICAgICAgc3RkOjpsb2NrX2d1YXJkPHN0ZDo6bXV0ZXg+IGxvY2sobUFjdGl2ZS5tTXV0ZXgpOworICAgICAgICBhdXRvIGl0ID0gbUFjdGl2ZS5tQ2xpZW50cy5maW5kKGNvbm5lY3Rpb25JZCk7CisgICAgICAgIGlmIChpdCA9PSBtQWN0aXZlLm1DbGllbnRzLmVuZCgpKSB7CisgICAgICAgICAgICByZXR1cm4gUmVzdWx0U3RhdHVzOjpOT1RfRk9VTkQ7CisgICAgICAgIH0KKyAgICAgICAgY2xpZW50ID0gaXQtPnNlY29uZDsKKyAgICB9CisgICAgcmV0dXJuIGNsaWVudC0+YWxsb2NhdGUocGFyYW1zLCBoYW5kbGUsIGJ1ZmZlcik7Cit9CisKK1Jlc3VsdFN0YXR1cyBDbGllbnRNYW5hZ2VyOjpJbXBsOjpyZWNlaXZlKAorICAgICAgICBDb25uZWN0aW9uSWQgY29ubmVjdGlvbklkLCBUcmFuc2FjdGlvbklkIHRyYW5zYWN0aW9uSWQsCisgICAgICAgIEJ1ZmZlcklkIGJ1ZmZlcklkLCBpbnQ2NF90IHRpbWVzdGFtcFVzLAorICAgICAgICBuYXRpdmVfaGFuZGxlX3QgKipoYW5kbGUsIHN0ZDo6c2hhcmVkX3B0cjxCdWZmZXJQb29sRGF0YT4gKmJ1ZmZlcikgeworICAgIHN0ZDo6c2hhcmVkX3B0cjxCdWZmZXJQb29sQ2xpZW50PiBjbGllbnQ7CisgICAgeworICAgICAgICBzdGQ6OmxvY2tfZ3VhcmQ8c3RkOjptdXRleD4gbG9jayhtQWN0aXZlLm1NdXRleCk7CisgICAgICAgIGF1dG8gaXQgPSBtQWN0aXZlLm1DbGllbnRzLmZpbmQoY29ubmVjdGlvbklkKTsKKyAgICAgICAgaWYgKGl0ID09IG1BY3RpdmUubUNsaWVudHMuZW5kKCkpIHsKKyAgICAgICAgICAgIHJldHVybiBSZXN1bHRTdGF0dXM6Ok5PVF9GT1VORDsKKyAgICAgICAgfQorICAgICAgICBjbGllbnQgPSBpdC0+c2Vjb25kOworICAgIH0KKyAgICByZXR1cm4gY2xpZW50LT5yZWNlaXZlKHRyYW5zYWN0aW9uSWQsIGJ1ZmZlcklkLCB0aW1lc3RhbXBVcywgaGFuZGxlLCBidWZmZXIpOworfQorCitSZXN1bHRTdGF0dXMgQ2xpZW50TWFuYWdlcjo6SW1wbDo6cG9zdFNlbmQoCisgICAgICAgIENvbm5lY3Rpb25JZCByZWNlaXZlcklkLCBjb25zdCBzdGQ6OnNoYXJlZF9wdHI8QnVmZmVyUG9vbERhdGE+ICZidWZmZXIsCisgICAgICAgIFRyYW5zYWN0aW9uSWQgKnRyYW5zYWN0aW9uSWQsIGludDY0X3QgKnRpbWVzdGFtcFVzKSB7CisgICAgQ29ubmVjdGlvbklkIGNvbm5lY3Rpb25JZCA9IGJ1ZmZlci0+bUNvbm5lY3Rpb25JZDsKKyAgICBzdGQ6OnNoYXJlZF9wdHI8QnVmZmVyUG9vbENsaWVudD4gY2xpZW50OworICAgIHsKKyAgICAgICAgc3RkOjpsb2NrX2d1YXJkPHN0ZDo6bXV0ZXg+IGxvY2sobUFjdGl2ZS5tTXV0ZXgpOworICAgICAgICBhdXRvIGl0ID0gbUFjdGl2ZS5tQ2xpZW50cy5maW5kKGNvbm5lY3Rpb25JZCk7CisgICAgICAgIGlmIChpdCA9PSBtQWN0aXZlLm1DbGllbnRzLmVuZCgpKSB7CisgICAgICAgICAgICByZXR1cm4gUmVzdWx0U3RhdHVzOjpOT1RfRk9VTkQ7CisgICAgICAgIH0KKyAgICAgICAgY2xpZW50ID0gaXQtPnNlY29uZDsKKyAgICB9CisgICAgcmV0dXJuIGNsaWVudC0+cG9zdFNlbmQocmVjZWl2ZXJJZCwgYnVmZmVyLCB0cmFuc2FjdGlvbklkLCB0aW1lc3RhbXBVcyk7Cit9CisKK1Jlc3VsdFN0YXR1cyBDbGllbnRNYW5hZ2VyOjpJbXBsOjpnZXRBY2Nlc3NvcigKKyAgICAgICAgQ29ubmVjdGlvbklkIGNvbm5lY3Rpb25JZCwgc3A8SUFjY2Vzc29yPiAqYWNjZXNzb3IpIHsKKyAgICBzdGQ6OnNoYXJlZF9wdHI8QnVmZmVyUG9vbENsaWVudD4gY2xpZW50OworICAgIHsKKyAgICAgICAgc3RkOjpsb2NrX2d1YXJkPHN0ZDo6bXV0ZXg+IGxvY2sobUFjdGl2ZS5tTXV0ZXgpOworICAgICAgICBhdXRvIGl0ID0gbUFjdGl2ZS5tQ2xpZW50cy5maW5kKGNvbm5lY3Rpb25JZCk7CisgICAgICAgIGlmIChpdCA9PSBtQWN0aXZlLm1DbGllbnRzLmVuZCgpKSB7CisgICAgICAgICAgICByZXR1cm4gUmVzdWx0U3RhdHVzOjpOT1RfRk9VTkQ7CisgICAgICAgIH0KKyAgICAgICAgY2xpZW50ID0gaXQtPnNlY29uZDsKKyAgICB9CisgICAgcmV0dXJuIGNsaWVudC0+Z2V0QWNjZXNzb3IoYWNjZXNzb3IpOworfQorCit2b2lkIENsaWVudE1hbmFnZXI6OkltcGw6OmNsZWFuVXAoYm9vbCBjbGVhckNhY2hlKSB7CisgICAgaW50NjRfdCBub3cgPSBnZXRUaW1lc3RhbXBOb3coKTsKKyAgICBpbnQ2NF90IGxhc3RUcmFuc2FjdGlvblVzOworICAgIHN0ZDo6bG9ja19ndWFyZDxzdGQ6Om11dGV4PiBsb2NrMShtQ2FjaGUubU11dGV4KTsKKyAgICBpZiAoY2xlYXJDYWNoZSB8fCBtQ2FjaGUubUxhc3RDbGVhblVwVXMgKyBrQ2xlYW5VcER1cmF0aW9uVXMgPCBub3cpIHsKKyAgICAgICAgc3RkOjpsb2NrX2d1YXJkPHN0ZDo6bXV0ZXg+IGxvY2syKG1BY3RpdmUubU11dGV4KTsKKyAgICAgICAgaW50IGNsZWFuZWQgPSAwOworICAgICAgICBmb3IgKGF1dG8gaXQgPSBtQWN0aXZlLm1DbGllbnRzLmJlZ2luKCk7IGl0ICE9IG1BY3RpdmUubUNsaWVudHMuZW5kKCk7KSB7CisgICAgICAgICAgICBpZiAoIWl0LT5zZWNvbmQtPmlzQWN0aXZlKCZsYXN0VHJhbnNhY3Rpb25VcywgY2xlYXJDYWNoZSkpIHsKKyAgICAgICAgICAgICAgICBpZiAobGFzdFRyYW5zYWN0aW9uVXMgKyBrQ2xpZW50VGltZW91dFVzIDwgbm93KSB7CisgICAgICAgICAgICAgICAgICAgIHNwPElBY2Nlc3Nvcj4gYWNjZXNzb3I7CisgICAgICAgICAgICAgICAgICAgIGl0LT5zZWNvbmQtPmdldEFjY2Vzc29yKCZhY2Nlc3Nvcik7CisgICAgICAgICAgICAgICAgICAgIGl0ID0gbUFjdGl2ZS5tQ2xpZW50cy5lcmFzZShpdCk7CisgICAgICAgICAgICAgICAgICAgICsrY2xlYW5lZDsKKyAgICAgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgKytpdDsKKyAgICAgICAgfQorICAgICAgICBmb3IgKGF1dG8gY2l0ID0gbUNhY2hlLm1DbGllbnRzLmJlZ2luKCk7IGNpdCAhPSBtQ2FjaGUubUNsaWVudHMuZW5kKCk7KSB7CisgICAgICAgICAgICAvLyBjbGVhbiB1cCBkZWFkIGNsaWVudCBjYWNoZXMKKyAgICAgICAgICAgIHNwPElBY2Nlc3Nvcj4gY0FjY2Vzc29yID0gY2l0LT5maXJzdC5wcm9tb3RlKCk7CisgICAgICAgICAgICBpZiAoIWNBY2Nlc3NvcikgeworICAgICAgICAgICAgICAgIGNpdCA9IG1DYWNoZS5tQ2xpZW50cy5lcmFzZShjaXQpOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICArK2NpdDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBBTE9HVigiIyBvZiBjbGVhbmVkIGNvbm5lY3Rpb25zOiAlZCIsIGNsZWFuZWQpOworICAgICAgICBtQ2FjaGUubUxhc3RDbGVhblVwVXMgPSBub3c7CisgICAgfQorfQorCisvLyBNZXRob2RzIGZyb20gOjphbmRyb2lkOjpoYXJkd2FyZTo6bWVkaWE6OmJ1ZmZlcnBvb2w6OlYyXzA6OklDbGllbnRNYW5hZ2VyIGZvbGxvdy4KK1JldHVybjx2b2lkPiBDbGllbnRNYW5hZ2VyOjpyZWdpc3RlclNlbmRlcihjb25zdCBzcDw6OmFuZHJvaWQ6OmhhcmR3YXJlOjptZWRpYTo6YnVmZmVycG9vbDo6VjJfMDo6SUFjY2Vzc29yPiYgYnVmZmVyUG9vbCwgcmVnaXN0ZXJTZW5kZXJfY2IgX2hpZGxfY2IpIHsKKyAgICBpZiAobUltcGwpIHsKKyAgICAgICAgQ29ubmVjdGlvbklkIGNvbm5lY3Rpb25JZCA9IC0xOworICAgICAgICBSZXN1bHRTdGF0dXMgc3RhdHVzID0gbUltcGwtPnJlZ2lzdGVyU2VuZGVyKGJ1ZmZlclBvb2wsICZjb25uZWN0aW9uSWQpOworICAgICAgICBfaGlkbF9jYihzdGF0dXMsIGNvbm5lY3Rpb25JZCk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgX2hpZGxfY2IoUmVzdWx0U3RhdHVzOjpDUklUSUNBTF9FUlJPUiwgLTEpOworICAgIH0KKyAgICByZXR1cm4gVm9pZCgpOworfQorCisvLyBNZXRob2RzIGZvciBsb2NhbCB1c2UuCitzcDxDbGllbnRNYW5hZ2VyPiBDbGllbnRNYW5hZ2VyOjpzSW5zdGFuY2U7CitzdGQ6Om11dGV4IENsaWVudE1hbmFnZXI6OnNJbnN0YW5jZUxvY2s7CisKK3NwPENsaWVudE1hbmFnZXI+IENsaWVudE1hbmFnZXI6OmdldEluc3RhbmNlKCkgeworICAgIHN0ZDo6bG9ja19ndWFyZDxzdGQ6Om11dGV4PiBsb2NrKHNJbnN0YW5jZUxvY2spOworICAgIGlmICghc0luc3RhbmNlKSB7CisgICAgICAgIHNJbnN0YW5jZSA9IG5ldyBDbGllbnRNYW5hZ2VyKCk7CisgICAgfQorICAgIEFjY2Vzc29yOjpjcmVhdGVJbnZhbGlkYXRvcigpOworICAgIHJldHVybiBzSW5zdGFuY2U7Cit9CisKK0NsaWVudE1hbmFnZXI6OkNsaWVudE1hbmFnZXIoKSA6IG1JbXBsKG5ldyBJbXBsKCkpIHt9CisKK0NsaWVudE1hbmFnZXI6On5DbGllbnRNYW5hZ2VyKCkgeworfQorCitSZXN1bHRTdGF0dXMgQ2xpZW50TWFuYWdlcjo6Y3JlYXRlKAorICAgICAgICBjb25zdCBzdGQ6OnNoYXJlZF9wdHI8QnVmZmVyUG9vbEFsbG9jYXRvcj4gJmFsbG9jYXRvciwKKyAgICAgICAgQ29ubmVjdGlvbklkICpwQ29ubmVjdGlvbklkKSB7CisgICAgaWYgKG1JbXBsKSB7CisgICAgICAgIHJldHVybiBtSW1wbC0+Y3JlYXRlKGFsbG9jYXRvciwgcENvbm5lY3Rpb25JZCk7CisgICAgfQorICAgIHJldHVybiBSZXN1bHRTdGF0dXM6OkNSSVRJQ0FMX0VSUk9SOworfQorCitSZXN1bHRTdGF0dXMgQ2xpZW50TWFuYWdlcjo6cmVnaXN0ZXJTZW5kZXIoCisgICAgICAgIGNvbnN0IHNwPElDbGllbnRNYW5hZ2VyPiAmcmVjZWl2ZXIsCisgICAgICAgIENvbm5lY3Rpb25JZCBzZW5kZXJJZCwKKyAgICAgICAgQ29ubmVjdGlvbklkICpyZWNlaXZlcklkKSB7CisgICAgaWYgKG1JbXBsKSB7CisgICAgICAgIHJldHVybiBtSW1wbC0+cmVnaXN0ZXJTZW5kZXIocmVjZWl2ZXIsIHNlbmRlcklkLCByZWNlaXZlcklkKTsKKyAgICB9CisgICAgcmV0dXJuIFJlc3VsdFN0YXR1czo6Q1JJVElDQUxfRVJST1I7Cit9CisKK1Jlc3VsdFN0YXR1cyBDbGllbnRNYW5hZ2VyOjpjbG9zZShDb25uZWN0aW9uSWQgY29ubmVjdGlvbklkKSB7CisgICAgaWYgKG1JbXBsKSB7CisgICAgICAgIHJldHVybiBtSW1wbC0+Y2xvc2UoY29ubmVjdGlvbklkKTsKKyAgICB9CisgICAgcmV0dXJuIFJlc3VsdFN0YXR1czo6Q1JJVElDQUxfRVJST1I7Cit9CisKK1Jlc3VsdFN0YXR1cyBDbGllbnRNYW5hZ2VyOjpmbHVzaChDb25uZWN0aW9uSWQgY29ubmVjdGlvbklkKSB7CisgICAgaWYgKG1JbXBsKSB7CisgICAgICAgIHJldHVybiBtSW1wbC0+Zmx1c2goY29ubmVjdGlvbklkKTsKKyAgICB9CisgICAgcmV0dXJuIFJlc3VsdFN0YXR1czo6Q1JJVElDQUxfRVJST1I7Cit9CisKK1Jlc3VsdFN0YXR1cyBDbGllbnRNYW5hZ2VyOjphbGxvY2F0ZSgKKyAgICAgICAgQ29ubmVjdGlvbklkIGNvbm5lY3Rpb25JZCwgY29uc3Qgc3RkOjp2ZWN0b3I8dWludDhfdD4gJnBhcmFtcywKKyAgICAgICAgbmF0aXZlX2hhbmRsZV90ICoqaGFuZGxlLCBzdGQ6OnNoYXJlZF9wdHI8QnVmZmVyUG9vbERhdGE+ICpidWZmZXIpIHsKKyAgICBpZiAobUltcGwpIHsKKyAgICAgICAgcmV0dXJuIG1JbXBsLT5hbGxvY2F0ZShjb25uZWN0aW9uSWQsIHBhcmFtcywgaGFuZGxlLCBidWZmZXIpOworICAgIH0KKyAgICByZXR1cm4gUmVzdWx0U3RhdHVzOjpDUklUSUNBTF9FUlJPUjsKK30KKworUmVzdWx0U3RhdHVzIENsaWVudE1hbmFnZXI6OnJlY2VpdmUoCisgICAgICAgIENvbm5lY3Rpb25JZCBjb25uZWN0aW9uSWQsIFRyYW5zYWN0aW9uSWQgdHJhbnNhY3Rpb25JZCwKKyAgICAgICAgQnVmZmVySWQgYnVmZmVySWQsIGludDY0X3QgdGltZXN0YW1wVXMsCisgICAgICAgIG5hdGl2ZV9oYW5kbGVfdCAqKmhhbmRsZSwgc3RkOjpzaGFyZWRfcHRyPEJ1ZmZlclBvb2xEYXRhPiAqYnVmZmVyKSB7CisgICAgaWYgKG1JbXBsKSB7CisgICAgICAgIHJldHVybiBtSW1wbC0+cmVjZWl2ZShjb25uZWN0aW9uSWQsIHRyYW5zYWN0aW9uSWQsIGJ1ZmZlcklkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGltZXN0YW1wVXMsIGhhbmRsZSwgYnVmZmVyKTsKKyAgICB9CisgICAgcmV0dXJuIFJlc3VsdFN0YXR1czo6Q1JJVElDQUxfRVJST1I7Cit9CisKK1Jlc3VsdFN0YXR1cyBDbGllbnRNYW5hZ2VyOjpwb3N0U2VuZCgKKyAgICAgICAgQ29ubmVjdGlvbklkIHJlY2VpdmVySWQsIGNvbnN0IHN0ZDo6c2hhcmVkX3B0cjxCdWZmZXJQb29sRGF0YT4gJmJ1ZmZlciwKKyAgICAgICAgVHJhbnNhY3Rpb25JZCAqdHJhbnNhY3Rpb25JZCwgaW50NjRfdCogdGltZXN0YW1wVXMpIHsKKyAgICBpZiAobUltcGwgJiYgYnVmZmVyKSB7CisgICAgICAgIHJldHVybiBtSW1wbC0+cG9zdFNlbmQocmVjZWl2ZXJJZCwgYnVmZmVyLCB0cmFuc2FjdGlvbklkLCB0aW1lc3RhbXBVcyk7CisgICAgfQorICAgIHJldHVybiBSZXN1bHRTdGF0dXM6OkNSSVRJQ0FMX0VSUk9SOworfQorCit2b2lkIENsaWVudE1hbmFnZXI6OmNsZWFuVXAoKSB7CisgICAgaWYgKG1JbXBsKSB7CisgICAgICAgIG1JbXBsLT5jbGVhblVwKHRydWUpOworICAgIH0KK30KKworfSAgLy8gbmFtZXNwYWNlIGltcGxlbWVudGF0aW9uCit9ICAvLyBuYW1lc3BhY2UgVjJfMAorfSAgLy8gbmFtZXNwYWNlIGJ1ZmZlcnBvb2wKK30gIC8vIG5hbWVzcGFjZSBtZWRpYQorfSAgLy8gbmFtZXNwYWNlIGhhcmR3YXJlCit9ICAvLyBuYW1lc3BhY2UgYW5kcm9pZApkaWZmIC0tZ2l0IGEvbWVkaWEvYnVmZmVycG9vbC8yLjAvQ29ubmVjdGlvbi5jcHAgYi9tZWRpYS9idWZmZXJwb29sLzIuMC9Db25uZWN0aW9uLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42YmQwZTc5Ci0tLSAvZGV2L251bGwKKysrIGIvbWVkaWEvYnVmZmVycG9vbC8yLjAvQ29ubmVjdGlvbi5jcHAKQEAgLTAsMCArMSw5NiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxOCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCisKKyNpbmNsdWRlICJDb25uZWN0aW9uLmgiCisKK25hbWVzcGFjZSBhbmRyb2lkIHsKK25hbWVzcGFjZSBoYXJkd2FyZSB7CituYW1lc3BhY2UgbWVkaWEgeworbmFtZXNwYWNlIGJ1ZmZlcnBvb2wgeworbmFtZXNwYWNlIFYyXzAgeworbmFtZXNwYWNlIGltcGxlbWVudGF0aW9uIHsKKworLy8gTWV0aG9kcyBmcm9tIDo6YW5kcm9pZDo6aGFyZHdhcmU6Om1lZGlhOjpidWZmZXJwb29sOjpWMl8wOjpJQ29ubmVjdGlvbiBmb2xsb3cuCitSZXR1cm48dm9pZD4gQ29ubmVjdGlvbjo6ZmV0Y2godWludDY0X3QgdHJhbnNhY3Rpb25JZCwgdWludDMyX3QgYnVmZmVySWQsIGZldGNoX2NiIF9oaWRsX2NiKSB7CisgICAgUmVzdWx0U3RhdHVzIHN0YXR1cyA9IFJlc3VsdFN0YXR1czo6Q1JJVElDQUxfRVJST1I7CisgICAgaWYgKG1Jbml0aWFsaXplZCAmJiBtQWNjZXNzb3IpIHsKKyAgICAgICAgaWYgKGJ1ZmZlcklkICE9IFNZTkNfQlVGRkVSSUQpIHsKKyAgICAgICAgICAgIGNvbnN0IG5hdGl2ZV9oYW5kbGVfdCAqaGFuZGxlID0gbnVsbHB0cjsKKyAgICAgICAgICAgIHN0YXR1cyA9IG1BY2Nlc3Nvci0+ZmV0Y2goCisgICAgICAgICAgICAgICAgICAgIG1Db25uZWN0aW9uSWQsIHRyYW5zYWN0aW9uSWQsIGJ1ZmZlcklkLCAmaGFuZGxlKTsKKyAgICAgICAgICAgIGlmIChzdGF0dXMgPT0gUmVzdWx0U3RhdHVzOjpPSykgeworICAgICAgICAgICAgICAgIF9oaWRsX2NiKHN0YXR1cywgQnVmZmVye2J1ZmZlcklkLCBoYW5kbGV9KTsKKyAgICAgICAgICAgICAgICByZXR1cm4gVm9pZCgpOworICAgICAgICAgICAgfQorICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgbUFjY2Vzc29yLT5jbGVhblVwKGZhbHNlKTsKKyAgICAgICAgfQorICAgIH0KKyAgICBfaGlkbF9jYihzdGF0dXMsIEJ1ZmZlcnswLCBudWxscHRyfSk7CisgICAgcmV0dXJuIFZvaWQoKTsKK30KKworQ29ubmVjdGlvbjo6Q29ubmVjdGlvbigpIDogbUluaXRpYWxpemVkKGZhbHNlKSwgbUNvbm5lY3Rpb25JZCgtMUxMKSB7fQorCitDb25uZWN0aW9uOjp+Q29ubmVjdGlvbigpIHsKKyAgICBpZiAobUluaXRpYWxpemVkICYmIG1BY2Nlc3NvcikgeworICAgICAgICBtQWNjZXNzb3ItPmNsb3NlKG1Db25uZWN0aW9uSWQpOworICAgIH0KK30KKwordm9pZCBDb25uZWN0aW9uOjppbml0aWFsaXplKAorICAgICAgICBjb25zdCBzcDxBY2Nlc3Nvcj4mIGFjY2Vzc29yLCBDb25uZWN0aW9uSWQgY29ubmVjdGlvbklkKSB7CisgICAgaWYgKCFtSW5pdGlhbGl6ZWQpIHsKKyAgICAgICAgbUFjY2Vzc29yID0gYWNjZXNzb3I7CisgICAgICAgIG1Db25uZWN0aW9uSWQgPSBjb25uZWN0aW9uSWQ7CisgICAgICAgIG1Jbml0aWFsaXplZCA9IHRydWU7CisgICAgfQorfQorCitSZXN1bHRTdGF0dXMgQ29ubmVjdGlvbjo6Zmx1c2goKSB7CisgICAgaWYgKG1Jbml0aWFsaXplZCAmJiBtQWNjZXNzb3IpIHsKKyAgICAgICAgcmV0dXJuIG1BY2Nlc3Nvci0+Zmx1c2goKTsKKyAgICB9CisgICAgcmV0dXJuIFJlc3VsdFN0YXR1czo6Q1JJVElDQUxfRVJST1I7Cit9CisKK1Jlc3VsdFN0YXR1cyBDb25uZWN0aW9uOjphbGxvY2F0ZSgKKyAgICAgICAgY29uc3Qgc3RkOjp2ZWN0b3I8dWludDhfdD4gJnBhcmFtcywgQnVmZmVySWQgKmJ1ZmZlcklkLAorICAgICAgICBjb25zdCBuYXRpdmVfaGFuZGxlX3QgKipoYW5kbGUpIHsKKyAgICBpZiAobUluaXRpYWxpemVkICYmIG1BY2Nlc3NvcikgeworICAgICAgICByZXR1cm4gbUFjY2Vzc29yLT5hbGxvY2F0ZShtQ29ubmVjdGlvbklkLCBwYXJhbXMsIGJ1ZmZlcklkLCBoYW5kbGUpOworICAgIH0KKyAgICByZXR1cm4gUmVzdWx0U3RhdHVzOjpDUklUSUNBTF9FUlJPUjsKK30KKwordm9pZCBDb25uZWN0aW9uOjpjbGVhblVwKGJvb2wgY2xlYXJDYWNoZSkgeworICAgIGlmIChtSW5pdGlhbGl6ZWQgJiYgbUFjY2Vzc29yKSB7CisgICAgICAgIG1BY2Nlc3Nvci0+Y2xlYW5VcChjbGVhckNhY2hlKTsKKyAgICB9Cit9CisKKy8vIE1ldGhvZHMgZnJvbSA6OmFuZHJvaWQ6OmhpZGw6OmJhc2U6OlYxXzA6OklCYXNlIGZvbGxvdy4KKworLy9JQ29ubmVjdGlvbiogSElETF9GRVRDSF9JQ29ubmVjdGlvbihjb25zdCBjaGFyKiAvKiBuYW1lICovKSB7CisvLyAgICByZXR1cm4gbmV3IENvbm5lY3Rpb24oKTsKKy8vfQorCit9ICAvLyBuYW1lc3BhY2UgaW1wbGVtZW50YXRpb24KK30gIC8vIG5hbWVzcGFjZSBWMl8wCit9ICAvLyBuYW1lc3BhY2UgYnVmZmVycG9vbAorfSAgLy8gbmFtZXNwYWNlIG1lZGlhCit9ICAvLyBuYW1lc3BhY2UgaGFyZHdhcmUKK30gIC8vIG5hbWVzcGFjZSBhbmRyb2lkCmRpZmYgLS1naXQgYS9tZWRpYS9idWZmZXJwb29sLzIuMC9Db25uZWN0aW9uLmggYi9tZWRpYS9idWZmZXJwb29sLzIuMC9Db25uZWN0aW9uLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODUwNzc0OQotLS0gL2Rldi9udWxsCisrKyBiL21lZGlhL2J1ZmZlcnBvb2wvMi4wL0Nvbm5lY3Rpb24uaApAQCAtMCwwICsxLDEwOCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxOCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCisKKyNpZm5kZWYgQU5EUk9JRF9IQVJEV0FSRV9NRURJQV9CVUZGRVJQT09MX1YyXzBfQ09OTkVDVElPTl9ICisjZGVmaW5lIEFORFJPSURfSEFSRFdBUkVfTUVESUFfQlVGRkVSUE9PTF9WMl8wX0NPTk5FQ1RJT05fSAorCisjaW5jbHVkZSA8YW5kcm9pZC9oYXJkd2FyZS9tZWRpYS9idWZmZXJwb29sLzIuMC9JQ29ubmVjdGlvbi5oPgorI2luY2x1ZGUgPGJ1ZmZlcnBvb2wvQnVmZmVyUG9vbFR5cGVzLmg+CisjaW5jbHVkZSA8aGlkbC9NUURlc2NyaXB0b3IuaD4KKyNpbmNsdWRlIDxoaWRsL1N0YXR1cy5oPgorI2luY2x1ZGUgIkFjY2Vzc29yLmgiCisKK25hbWVzcGFjZSBhbmRyb2lkIHsKK25hbWVzcGFjZSBoYXJkd2FyZSB7CituYW1lc3BhY2UgbWVkaWEgeworbmFtZXNwYWNlIGJ1ZmZlcnBvb2wgeworbmFtZXNwYWNlIFYyXzAgeworbmFtZXNwYWNlIGltcGxlbWVudGF0aW9uIHsKKwordXNpbmcgOjphbmRyb2lkOjpoYXJkd2FyZTo6aGlkbF9hcnJheTsKK3VzaW5nIDo6YW5kcm9pZDo6aGFyZHdhcmU6OmhpZGxfbWVtb3J5OwordXNpbmcgOjphbmRyb2lkOjpoYXJkd2FyZTo6aGlkbF9zdHJpbmc7Cit1c2luZyA6OmFuZHJvaWQ6OmhhcmR3YXJlOjpoaWRsX3ZlYzsKK3VzaW5nIDo6YW5kcm9pZDo6aGFyZHdhcmU6Om1lZGlhOjpidWZmZXJwb29sOjpWMl8wOjppbXBsZW1lbnRhdGlvbjo6QWNjZXNzb3I7Cit1c2luZyA6OmFuZHJvaWQ6OmhhcmR3YXJlOjpSZXR1cm47Cit1c2luZyA6OmFuZHJvaWQ6OmhhcmR3YXJlOjpWb2lkOwordXNpbmcgOjphbmRyb2lkOjpzcDsKKworc3RydWN0IENvbm5lY3Rpb24gOiBwdWJsaWMgSUNvbm5lY3Rpb24geworICAgIC8vIE1ldGhvZHMgZnJvbSA6OmFuZHJvaWQ6OmhhcmR3YXJlOjptZWRpYTo6YnVmZmVycG9vbDo6VjJfMDo6SUNvbm5lY3Rpb24gZm9sbG93LgorICAgIFJldHVybjx2b2lkPiBmZXRjaCh1aW50NjRfdCB0cmFuc2FjdGlvbklkLCB1aW50MzJfdCBidWZmZXJJZCwgZmV0Y2hfY2IgX2hpZGxfY2IpIG92ZXJyaWRlOworCisgICAgLyoqCisgICAgICogSW52YWxpZGF0ZXMgYWxsIGJ1ZmZlcnMgd2hpY2ggYXJlIGFjdGl2ZSBhbmQvb3IgYXJlIHJlYWR5IHRvIGJlIHJlY3ljbGVkLgorICAgICAqLworICAgIFJlc3VsdFN0YXR1cyBmbHVzaCgpOworCisgICAgLyoqCisgICAgICogQWxsb2NhdGVzIGEgYnVmZmVyIHVzaW5nIHRoZSBzcGVjaWZpZWQgcGFyYW1ldGVycy4gUmVjeWNsZXMgYSBidWZmZXIgaWYKKyAgICAgKiBpdCBpcyBwb3NzaWJsZS4gVGhlIHJldHVybmVkIGJ1ZmZlciBjYW4gYmUgdHJhbnNmZXJyZWQgdG8gb3RoZXIgcmVtb3RlCisgICAgICogY2xpZW50cyhDb25uZWN0aW9uKS4KKyAgICAgKgorICAgICAqIEBwYXJhbSBwYXJhbXMgICAgYWxsb2NhdGlvbiBwYXJhbWV0ZXJzLgorICAgICAqIEBwYXJhbSBidWZmZXJJZCAgSWQgb2YgdGhlIGFsbG9jYXRlZCBidWZmZXIuCisgICAgICogQHBhcmFtIGhhbmRsZSAgICBuYXRpdmUgaGFuZGxlIG9mIHRoZSBhbGxvY2F0ZWQgYnVmZmVyLgorICAgICAqCisgICAgICogQHJldHVybiBPSyBpZiBhIGJ1ZmZlciBpcyBzdWNjZXNzZnVsbHkgYWxsb2NhdGVkLgorICAgICAqICAgICAgICAgTk9fTUVNT1JZIHdoZW4gdGhlcmUgaXMgbm8gbWVtb3J5LgorICAgICAqICAgICAgICAgQ1JJVElDQUxfRVJST1Igb3RoZXJ3aXNlLgorICAgICAqLworICAgIFJlc3VsdFN0YXR1cyBhbGxvY2F0ZShjb25zdCBzdGQ6OnZlY3Rvcjx1aW50OF90PiAmcGFyYW1zLAorICAgICAgICAgICAgICAgICAgICAgICAgICBCdWZmZXJJZCAqYnVmZmVySWQsIGNvbnN0IG5hdGl2ZV9oYW5kbGVfdCAqKmhhbmRsZSk7CisKKyAgICAvKioKKyAgICAgKiBQcm9jZXNzZXMgcGVuZGluZyBidWZmZXIgc3RhdHVzIG1lc3NhZ2VzIGFuZCBwZXJmb3JtcyBwZXJpb2RpYyBjYWNoZSBjbGVhbmluZworICAgICAqIGZyb20gYnVmZmVycG9vbC4KKyAgICAgKgorICAgICAqIEBwYXJhbSBjbGVhckNhY2hlICAgIGlmIGNsZWFyQ2FjaGUgaXMgdHJ1ZSwgYnVmZmVycG9vbCBmcmVlcyBhbGwgYnVmZmVycworICAgICAqICAgICAgICAgICAgICAgICAgICAgIHdhaXRpbmcgdG8gYmUgcmVjeWNsZWQuCisgICAgICovCisgICAgdm9pZCBjbGVhblVwKGJvb2wgY2xlYXJDYWNoZSk7CisKKyAgICAvKiogRGVzdHJ1Y3RzIGEgY29ubmVjdGlvbi4gKi8KKyAgICB+Q29ubmVjdGlvbigpOworCisgICAgLyoqIENyZWF0ZXMgYSBjb25uZWN0aW9uLiAqLworICAgIENvbm5lY3Rpb24oKTsKKworICAgIC8qKgorICAgICAqIEluaXRpYWxpemVzIHdpdGggdGhlIHNwZWNpZmllZCBidWZmZXIgcG9vbCBhbmQgdGhlIGNvbm5lY3Rpb24gaWQuCisgICAgICogVGhlIGNvbm5lY3Rpb24gaWQgc2hvdWxkIGJlIHVuaXF1ZSBpbiB0aGUgd2hvbGUgc3lzdGVtLgorICAgICAqCisgICAgICogQHBhcmFtIGFjY2Vzc29yICAgICAgdGhlIHNwZWNpZmllZCBidWZmZXIgcG9vbC4KKyAgICAgKiBAcGFyYW0gY29ubmVjdGlvbklkICBJZC4KKyAgICAgKi8KKyAgICB2b2lkIGluaXRpYWxpemUoY29uc3Qgc3A8QWNjZXNzb3I+ICZhY2Nlc3NvciwgQ29ubmVjdGlvbklkIGNvbm5lY3Rpb25JZCk7CisKKyAgICBlbnVtIDogdWludDMyX3QgeworICAgICAgICBTWU5DX0JVRkZFUklEID0gVUlOVDMyX01BWCwKKyAgICB9OworCitwcml2YXRlOgorICAgIGJvb2wgbUluaXRpYWxpemVkOworICAgIHNwPEFjY2Vzc29yPiBtQWNjZXNzb3I7CisgICAgQ29ubmVjdGlvbklkIG1Db25uZWN0aW9uSWQ7Cit9OworCit9ICAvLyBuYW1lc3BhY2UgaW1wbGVtZW50YXRpb24KK30gIC8vIG5hbWVzcGFjZSBWMl8wCit9ICAvLyBuYW1lc3BhY2UgYnVmZmVycG9vbAorfSAgLy8gbmFtZXNwYWNlIG1lZGlhCit9ICAvLyBuYW1lc3BhY2UgaGFyZHdhcmUKK30gIC8vIG5hbWVzcGFjZSBhbmRyb2lkCisKKyNlbmRpZiAgLy8gQU5EUk9JRF9IQVJEV0FSRV9NRURJQV9CVUZGRVJQT09MX1YyXzBfQ09OTkVDVElPTl9ICmRpZmYgLS1naXQgYS9tZWRpYS9idWZmZXJwb29sLzIuMC9PYnNlcnZlci5jcHAgYi9tZWRpYS9idWZmZXJwb29sLzIuMC9PYnNlcnZlci5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWIyMzE2MAotLS0gL2Rldi9udWxsCisrKyBiL21lZGlhL2J1ZmZlcnBvb2wvMi4wL09ic2VydmVyLmNwcApAQCAtMCwwICsxLDczIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE4IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KKworI2luY2x1ZGUgIk9ic2VydmVyLmgiCisKK25hbWVzcGFjZSBhbmRyb2lkIHsKK25hbWVzcGFjZSBoYXJkd2FyZSB7CituYW1lc3BhY2UgbWVkaWEgeworbmFtZXNwYWNlIGJ1ZmZlcnBvb2wgeworbmFtZXNwYWNlIFYyXzAgeworbmFtZXNwYWNlIGltcGxlbWVudGF0aW9uIHsKKworT2JzZXJ2ZXI6Ok9ic2VydmVyKCkgeworfQorCitPYnNlcnZlcjo6fk9ic2VydmVyKCkgeworfQorCisvLyBNZXRob2RzIGZyb20gOjphbmRyb2lkOjpoYXJkd2FyZTo6bWVkaWE6OmJ1ZmZlcnBvb2w6OlYyXzA6OklPYnNlcnZlciBmb2xsb3cuCitSZXR1cm48dm9pZD4gT2JzZXJ2ZXI6Om9uTWVzc2FnZShpbnQ2NF90IGNvbm5lY3Rpb25JZCwgdWludDMyX3QgbXNnSWQpIHsKKyAgICBzdGQ6OnVuaXF1ZV9sb2NrPHN0ZDo6bXV0ZXg+IGxvY2sobUxvY2spOworICAgIGF1dG8gaXQgPSBtQ2xpZW50cy5maW5kKGNvbm5lY3Rpb25JZCk7CisgICAgaWYgKGl0ICE9IG1DbGllbnRzLmVuZCgpKSB7CisgICAgICAgIGNvbnN0IHN0ZDo6c2hhcmVkX3B0cjxCdWZmZXJQb29sQ2xpZW50PiBjbGllbnQgPSBpdC0+c2Vjb25kLmxvY2soKTsKKyAgICAgICAgaWYgKCFjbGllbnQpIHsKKyAgICAgICAgICAgIG1DbGllbnRzLmVyYXNlKGl0KTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGxvY2sudW5sb2NrKCk7CisgICAgICAgICAgICBjbGllbnQtPnJlY2VpdmVJbnZhbGlkYXRpb24obXNnSWQpOworICAgICAgICB9CisgICAgfQorICAgIHJldHVybiBWb2lkKCk7Cit9CisKK3ZvaWQgT2JzZXJ2ZXI6OmFkZENsaWVudChDb25uZWN0aW9uSWQgY29ubmVjdGlvbklkLAorICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0ZDo6d2Vha19wdHI8QnVmZmVyUG9vbENsaWVudD4gJndjbGllbnQpIHsKKyAgICBzdGQ6OmxvY2tfZ3VhcmQ8c3RkOjptdXRleD4gbG9jayhtTG9jayk7CisgICAgZm9yIChhdXRvIGl0ID0gbUNsaWVudHMuYmVnaW4oKTsgaXQgIT0gbUNsaWVudHMuZW5kKCk7KSB7CisgICAgICAgIGlmICghaXQtPnNlY29uZC5sb2NrKCkgfHwgaXQtPmZpcnN0ID09IGNvbm5lY3Rpb25JZCkgeworICAgICAgICAgICAgaXQgPSBtQ2xpZW50cy5lcmFzZShpdCk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICArK2l0OworICAgICAgICB9CisgICAgfQorICAgIG1DbGllbnRzLmluc2VydChzdGQ6Om1ha2VfcGFpcihjb25uZWN0aW9uSWQsIHdjbGllbnQpKTsKKworfQorCit2b2lkIE9ic2VydmVyOjpkZWxDbGllbnQoQ29ubmVjdGlvbklkIGNvbm5lY3Rpb25JZCkgeworICAgIHN0ZDo6bG9ja19ndWFyZDxzdGQ6Om11dGV4PiBsb2NrKG1Mb2NrKTsKKyAgICBtQ2xpZW50cy5lcmFzZShjb25uZWN0aW9uSWQpOworfQorCisKK30gIC8vIG5hbWVzcGFjZSBpbXBsZW1lbnRhdGlvbgorfSAgLy8gbmFtZXNwYWNlIFYyXzAKK30gIC8vIG5hbWVzcGFjZSBidWZmZXJwb29sCit9ICAvLyBuYW1lc3BhY2UgbWVkaWEKK30gIC8vIG5hbWVzcGFjZSBoYXJkd2FyZQorfSAgLy8gbmFtZXNwYWNlIGFuZHJvaWQKZGlmZiAtLWdpdCBhL21lZGlhL2J1ZmZlcnBvb2wvMi4wL09ic2VydmVyLmggYi9tZWRpYS9idWZmZXJwb29sLzIuMC9PYnNlcnZlci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQyYmQ3YzEKLS0tIC9kZXYvbnVsbAorKysgYi9tZWRpYS9idWZmZXJwb29sLzIuMC9PYnNlcnZlci5oCkBAIC0wLDAgKzEsNjcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTggVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworCisjaWZuZGVmIEFORFJPSURfSEFSRFdBUkVfTUVESUFfQlVGRkVSUE9PTF9WMl8wX09CU0VSVkVSX0gKKyNkZWZpbmUgQU5EUk9JRF9IQVJEV0FSRV9NRURJQV9CVUZGRVJQT09MX1YyXzBfT0JTRVJWRVJfSAorCisjaW5jbHVkZSA8YW5kcm9pZC9oYXJkd2FyZS9tZWRpYS9idWZmZXJwb29sLzIuMC9JT2JzZXJ2ZXIuaD4KKyNpbmNsdWRlIDxoaWRsL01RRGVzY3JpcHRvci5oPgorI2luY2x1ZGUgPGhpZGwvU3RhdHVzLmg+CisjaW5jbHVkZSAiQnVmZmVyUG9vbENsaWVudC5oIgorCituYW1lc3BhY2UgYW5kcm9pZCB7CituYW1lc3BhY2UgaGFyZHdhcmUgeworbmFtZXNwYWNlIG1lZGlhIHsKK25hbWVzcGFjZSBidWZmZXJwb29sIHsKK25hbWVzcGFjZSBWMl8wIHsKK25hbWVzcGFjZSBpbXBsZW1lbnRhdGlvbiB7CisKK3VzaW5nIDo6YW5kcm9pZDo6aGFyZHdhcmU6OmhpZGxfYXJyYXk7Cit1c2luZyA6OmFuZHJvaWQ6OmhhcmR3YXJlOjpoaWRsX21lbW9yeTsKK3VzaW5nIDo6YW5kcm9pZDo6aGFyZHdhcmU6OmhpZGxfc3RyaW5nOwordXNpbmcgOjphbmRyb2lkOjpoYXJkd2FyZTo6aGlkbF92ZWM7Cit1c2luZyA6OmFuZHJvaWQ6OmhhcmR3YXJlOjpSZXR1cm47Cit1c2luZyA6OmFuZHJvaWQ6OmhhcmR3YXJlOjpWb2lkOwordXNpbmcgOjphbmRyb2lkOjpzcDsKKworc3RydWN0IE9ic2VydmVyIDogcHVibGljIElPYnNlcnZlciB7CisgICAgLy8gTWV0aG9kcyBmcm9tIDo6YW5kcm9pZDo6aGFyZHdhcmU6Om1lZGlhOjpidWZmZXJwb29sOjpWMl8wOjpJT2JzZXJ2ZXIgZm9sbG93LgorICAgIFJldHVybjx2b2lkPiBvbk1lc3NhZ2UoaW50NjRfdCBjb25uZWN0aW9uSWQsIHVpbnQzMl90IG1zZ0lkKSBvdmVycmlkZTsKKworICAgIH5PYnNlcnZlcigpOworCisgICAgdm9pZCBhZGRDbGllbnQoQ29ubmVjdGlvbklkIGNvbm5lY3Rpb25JZCwKKyAgICAgICAgICAgICAgICAgICBjb25zdCBzdGQ6OndlYWtfcHRyPEJ1ZmZlclBvb2xDbGllbnQ+ICZ3Y2xpZW50KTsKKworICAgIHZvaWQgZGVsQ2xpZW50KENvbm5lY3Rpb25JZCBjb25uZWN0aW9uSWQpOworCitwcml2YXRlOgorICAgIE9ic2VydmVyKCk7CisKKyAgICBmcmllbmQgc3RydWN0IENsaWVudE1hbmFnZXI7CisKKyAgICBzdGQ6Om11dGV4IG1Mb2NrOworICAgIHN0ZDo6bWFwPENvbm5lY3Rpb25JZCwgY29uc3Qgc3RkOjp3ZWFrX3B0cjxCdWZmZXJQb29sQ2xpZW50Pj4gbUNsaWVudHM7Cit9OworCit9ICAvLyBuYW1lc3BhY2UgaW1wbGVtZW50YXRpb24KK30gIC8vIG5hbWVzcGFjZSBWMl8wCit9ICAvLyBuYW1lc3BhY2UgYnVmZmVycG9vbAorfSAgLy8gbmFtZXNwYWNlIG1lZGlhCit9ICAvLyBuYW1lc3BhY2UgaGFyZHdhcmUKK30gIC8vIG5hbWVzcGFjZSBhbmRyb2lkCisKKyNlbmRpZiAgLy8gQU5EUk9JRF9IQVJEV0FSRV9NRURJQV9CVUZGRVJQT09MX1YyXzBfT0JTRVJWRVJfSApkaWZmIC0tZ2l0IGEvbWVkaWEvYnVmZmVycG9vbC8yLjAvaW5jbHVkZS9idWZmZXJwb29sL0J1ZmZlclBvb2xUeXBlcy5oIGIvbWVkaWEvYnVmZmVycG9vbC8yLjAvaW5jbHVkZS9idWZmZXJwb29sL0J1ZmZlclBvb2xUeXBlcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdjOTA2Y2IKLS0tIC9kZXYvbnVsbAorKysgYi9tZWRpYS9idWZmZXJwb29sLzIuMC9pbmNsdWRlL2J1ZmZlcnBvb2wvQnVmZmVyUG9vbFR5cGVzLmgKQEAgLTAsMCArMSwxMjMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTggVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworCisjaWZuZGVmIEFORFJPSURfSEFSRFdBUkVfTUVESUFfQlVGRkVSUE9PTF9WMl8wX0JVRkZFUlBPT0xUWVBFU19ICisjZGVmaW5lIEFORFJPSURfSEFSRFdBUkVfTUVESUFfQlVGRkVSUE9PTF9WMl8wX0JVRkZFUlBPT0xUWVBFU19ICisKKyNpbmNsdWRlIDxhbmRyb2lkL2hhcmR3YXJlL21lZGlhL2J1ZmZlcnBvb2wvMi4wL3R5cGVzLmg+CisjaW5jbHVkZSA8Y3V0aWxzL25hdGl2ZV9oYW5kbGUuaD4KKyNpbmNsdWRlIDxmbXEvTWVzc2FnZVF1ZXVlLmg+CisjaW5jbHVkZSA8aGlkbC9NUURlc2NyaXB0b3IuaD4KKyNpbmNsdWRlIDxoaWRsL1N0YXR1cy5oPgorCituYW1lc3BhY2UgYW5kcm9pZCB7CituYW1lc3BhY2UgaGFyZHdhcmUgeworbmFtZXNwYWNlIG1lZGlhIHsKK25hbWVzcGFjZSBidWZmZXJwb29sIHsKKworc3RydWN0IEJ1ZmZlclBvb2xEYXRhIHsKKyAgICAvLyBGb3IgbG9jYWwgdXNlLCB0byBzcGVjaWZ5IGEgYnVmZmVycG9vbCAoY2xpZW50IGNvbm5lY3Rpb24pIGZvciBidWZmZXJzLgorICAgIC8vIFJldHVybiB2YWx1ZSBmcm9tIGNvbm5lY3QjSUFjY2Vzc29yKGFuZHJvaWQuaGFyZHdhcmUubWVkaWEuYnVmZmVycG9vbEAyLjApLgorICAgIGludDY0X3QgbUNvbm5lY3Rpb25JZDsKKyAgICAvLyBCdWZmZXJJZAorICAgIHVpbnQzMl90IG1JZDsKKworICAgIEJ1ZmZlclBvb2xEYXRhKCkgOiBtQ29ubmVjdGlvbklkKDApLCBtSWQoMCkge30KKworICAgIEJ1ZmZlclBvb2xEYXRhKAorICAgICAgICAgICAgaW50NjRfdCBjb25uZWN0aW9uSWQsIHVpbnQzMl90IGlkKQorICAgICAgICAgICAgOiBtQ29ubmVjdGlvbklkKGNvbm5lY3Rpb25JZCksIG1JZChpZCkge30KKworICAgIH5CdWZmZXJQb29sRGF0YSgpIHt9Cit9OworCituYW1lc3BhY2UgVjJfMCB7CituYW1lc3BhY2UgaW1wbGVtZW50YXRpb24geworCit1c2luZyA6OmFuZHJvaWQ6OmhhcmR3YXJlOjprU3luY2hyb25pemVkUmVhZFdyaXRlOwordXNpbmcgOjphbmRyb2lkOjpoYXJkd2FyZTo6a1Vuc3luY2hyb25pemVkV3JpdGU7CisKK3R5cGVkZWYgdWludDMyX3QgQnVmZmVySWQ7Cit0eXBlZGVmIHVpbnQ2NF90IFRyYW5zYWN0aW9uSWQ7Cit0eXBlZGVmIGludDY0X3QgQ29ubmVjdGlvbklkOworCitlbnVtIDogQ29ubmVjdGlvbklkIHsKKyAgICBJTlZBTElEX0NPTk5FQ1RJT05JRCA9IDAsCit9OworCit0eXBlZGVmIGFuZHJvaWQ6OmhhcmR3YXJlOjpNZXNzYWdlUXVldWU8QnVmZmVyU3RhdHVzTWVzc2FnZSwga1N5bmNocm9uaXplZFJlYWRXcml0ZT4gQnVmZmVyU3RhdHVzUXVldWU7Cit0eXBlZGVmIEJ1ZmZlclN0YXR1c1F1ZXVlOjpEZXNjcmlwdG9yIFN0YXR1c0Rlc2NyaXB0b3I7CisKK3R5cGVkZWYgYW5kcm9pZDo6aGFyZHdhcmU6Ok1lc3NhZ2VRdWV1ZTxCdWZmZXJJbnZhbGlkYXRpb25NZXNzYWdlLCBrVW5zeW5jaHJvbml6ZWRXcml0ZT4KKyAgICAgICAgQnVmZmVySW52YWxpZGF0aW9uUXVldWU7Cit0eXBlZGVmIEJ1ZmZlckludmFsaWRhdGlvblF1ZXVlOjpEZXNjcmlwdG9yIEludmFsaWRhdGlvbkRlc2NyaXB0b3I7CisKKy8qKgorICogQWxsb2NhdGlvbiB3cmFwcGVyIGNsYXNzIGZvciBidWZmZXIgcG9vbC4KKyAqLworc3RydWN0IEJ1ZmZlclBvb2xBbGxvY2F0aW9uIHsKKyAgICBjb25zdCBuYXRpdmVfaGFuZGxlX3QgKm1IYW5kbGU7CisKKyAgICBjb25zdCBuYXRpdmVfaGFuZGxlX3QgKmhhbmRsZSgpIHsKKyAgICAgICAgcmV0dXJuIG1IYW5kbGU7CisgICAgfQorCisgICAgQnVmZmVyUG9vbEFsbG9jYXRpb24oY29uc3QgbmF0aXZlX2hhbmRsZV90ICpoYW5kbGUpIDogbUhhbmRsZShoYW5kbGUpIHt9CisKKyAgICB+QnVmZmVyUG9vbEFsbG9jYXRpb24oKSB7fTsKK307CisKKy8qKgorICogQWxsb2NhdG9yIHdyYXBwZXIgY2xhc3MgZm9yIGJ1ZmZlciBwb29sLgorICovCitjbGFzcyBCdWZmZXJQb29sQWxsb2NhdG9yIHsKK3B1YmxpYzoKKworICAgIC8qKgorICAgICAqIEFsbG9jYXRlIGFuIGFsbG9jYXRpb24oYnVmZmVyKSBmb3IgYnVmZmVyIHBvb2wuCisgICAgICoKKyAgICAgKiBAcGFyYW0gcGFyYW1zICAgIGFsbG9jYXRpb24gcGFyYW1ldGVycworICAgICAqIEBwYXJhbSBhbGxvYyAgICAgY3JlYXRlZCBhbGxvY2F0aW9uCisgICAgICogQHBhcmFtIGFsbG9jU2l6ZSBzaXplIG9mIGNyZWF0ZWQgYWxsb2NhdGlvbgorICAgICAqCisgICAgICogQHJldHVybiBPSyB3aGVuIGFuIGFsbG9jYXRpb24gaXMgY3JlYXRlZCBzdWNjZXNzZnVsbHkuCisgICAgICovCisgICAgdmlydHVhbCBSZXN1bHRTdGF0dXMgYWxsb2NhdGUoCisgICAgICAgICAgICBjb25zdCBzdGQ6OnZlY3Rvcjx1aW50OF90PiAmcGFyYW1zLAorICAgICAgICAgICAgc3RkOjpzaGFyZWRfcHRyPEJ1ZmZlclBvb2xBbGxvY2F0aW9uPiAqYWxsb2MsCisgICAgICAgICAgICBzaXplX3QgKmFsbG9jU2l6ZSkgPSAwOworCisgICAgLyoqCisgICAgICogUmV0dXJucyB3aGV0aGVyIGFsbG9jYXRpb24gcGFyYW1ldGVycyBvZiBhbiBvbGQgYWxsb2NhdGlvbiBhcmUKKyAgICAgKiBjb21wYXRpYmxlIHdpdGggbmV3IGFsbG9jYXRpb24gcGFyYW1ldGVycy4KKyAgICAgKi8KKyAgICB2aXJ0dWFsIGJvb2wgY29tcGF0aWJsZShjb25zdCBzdGQ6OnZlY3Rvcjx1aW50OF90PiAmbmV3UGFyYW1zLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0ZDo6dmVjdG9yPHVpbnQ4X3Q+ICZvbGRQYXJhbXMpID0gMDsKKworcHJvdGVjdGVkOgorICAgIEJ1ZmZlclBvb2xBbGxvY2F0b3IoKSA9IGRlZmF1bHQ7CisKKyAgICB2aXJ0dWFsIH5CdWZmZXJQb29sQWxsb2NhdG9yKCkgPSBkZWZhdWx0OworfTsKKworfSAgLy8gbmFtZXNwYWNlIGltcGxlbWVudGF0aW9uCit9ICAvLyBuYW1lc3BhY2UgVjJfMAorfSAgLy8gbmFtZXNwYWNlIGJ1ZmZlcnBvb2wKK30gIC8vIG5hbWVzcGFjZSBtZWRpYQorfSAgLy8gbmFtZXNwYWNlIGhhcmR3YXJlCit9ICAvLyBuYW1lc3BhY2UgYW5kcm9pZAorCisjZW5kaWYgIC8vIEFORFJPSURfSEFSRFdBUkVfTUVESUFfQlVGRkVSUE9PTF9WMl8wX0JVRkZFUlBPT0xUWVBFU19ICmRpZmYgLS1naXQgYS9tZWRpYS9idWZmZXJwb29sLzIuMC9pbmNsdWRlL2J1ZmZlcnBvb2wvQ2xpZW50TWFuYWdlci5oIGIvbWVkaWEvYnVmZmVycG9vbC8yLjAvaW5jbHVkZS9idWZmZXJwb29sL0NsaWVudE1hbmFnZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45NTNjMzA0Ci0tLSAvZGV2L251bGwKKysrIGIvbWVkaWEvYnVmZmVycG9vbC8yLjAvaW5jbHVkZS9idWZmZXJwb29sL0NsaWVudE1hbmFnZXIuaApAQCAtMCwwICsxLDE5MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxOCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCisKKyNpZm5kZWYgQU5EUk9JRF9IQVJEV0FSRV9NRURJQV9CVUZGRVJQT09MX1YyXzBfQ0xJRU5UTUFOQUdFUl9ICisjZGVmaW5lIEFORFJPSURfSEFSRFdBUkVfTUVESUFfQlVGRkVSUE9PTF9WMl8wX0NMSUVOVE1BTkFHRVJfSAorCisjaW5jbHVkZSA8YW5kcm9pZC9oYXJkd2FyZS9tZWRpYS9idWZmZXJwb29sLzIuMC9JQ2xpZW50TWFuYWdlci5oPgorI2luY2x1ZGUgPGhpZGwvTVFEZXNjcmlwdG9yLmg+CisjaW5jbHVkZSA8aGlkbC9TdGF0dXMuaD4KKyNpbmNsdWRlIDxtZW1vcnk+CisjaW5jbHVkZSAiQnVmZmVyUG9vbFR5cGVzLmgiCisKK25hbWVzcGFjZSBhbmRyb2lkIHsKK25hbWVzcGFjZSBoYXJkd2FyZSB7CituYW1lc3BhY2UgbWVkaWEgeworbmFtZXNwYWNlIGJ1ZmZlcnBvb2wgeworbmFtZXNwYWNlIFYyXzAgeworbmFtZXNwYWNlIGltcGxlbWVudGF0aW9uIHsKKwordXNpbmcgOjphbmRyb2lkOjpoYXJkd2FyZTo6aGlkbF9hcnJheTsKK3VzaW5nIDo6YW5kcm9pZDo6aGFyZHdhcmU6OmhpZGxfbWVtb3J5OwordXNpbmcgOjphbmRyb2lkOjpoYXJkd2FyZTo6aGlkbF9zdHJpbmc7Cit1c2luZyA6OmFuZHJvaWQ6OmhhcmR3YXJlOjpoaWRsX3ZlYzsKK3VzaW5nIDo6YW5kcm9pZDo6aGFyZHdhcmU6Om1lZGlhOjpidWZmZXJwb29sOjpWMl8wOjpJQWNjZXNzb3I7Cit1c2luZyA6OmFuZHJvaWQ6OmhhcmR3YXJlOjptZWRpYTo6YnVmZmVycG9vbDo6VjJfMDo6UmVzdWx0U3RhdHVzOwordXNpbmcgOjphbmRyb2lkOjpoYXJkd2FyZTo6UmV0dXJuOwordXNpbmcgOjphbmRyb2lkOjpoYXJkd2FyZTo6Vm9pZDsKK3VzaW5nIDo6YW5kcm9pZDo6c3A7CisKK3N0cnVjdCBDbGllbnRNYW5hZ2VyIDogcHVibGljIElDbGllbnRNYW5hZ2VyIHsKKyAgICAvLyBNZXRob2RzIGZyb20gOjphbmRyb2lkOjpoYXJkd2FyZTo6bWVkaWE6OmJ1ZmZlcnBvb2w6OlYyXzA6OklDbGllbnRNYW5hZ2VyIGZvbGxvdy4KKyAgICBSZXR1cm48dm9pZD4gcmVnaXN0ZXJTZW5kZXIoY29uc3Qgc3A8OjphbmRyb2lkOjpoYXJkd2FyZTo6bWVkaWE6OmJ1ZmZlcnBvb2w6OlYyXzA6OklBY2Nlc3Nvcj4mIGJ1ZmZlclBvb2wsIHJlZ2lzdGVyU2VuZGVyX2NiIF9oaWRsX2NiKSBvdmVycmlkZTsKKworICAgIC8qKiBHZXRzIGFuIGluc3RhbmNlLiAqLworICAgIHN0YXRpYyBzcDxDbGllbnRNYW5hZ2VyPiBnZXRJbnN0YW5jZSgpOworCisgICAgLyoqCisgICAgICogQ3JlYXRlcyBhIGxvY2FsIGNvbm5lY3Rpb24gd2l0aCBhIG5ld2x5IGNyZWF0ZWQgYnVmZmVyIHBvb2wuCisgICAgICoKKyAgICAgKiBAcGFyYW0gYWxsb2NhdG9yICAgICBmb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9uLgorICAgICAqIEBwYXJhbSBwQ29ubmVjdGlvbklkIElkIG9mIHRoZSBjcmVhdGVkIGNvbm5lY3Rpb24uIFRoaXMgaXMKKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICBzeXN0ZW0td2lkZSB1bmlxdWUuCisgICAgICoKKyAgICAgKiBAcmV0dXJuIE9LIHdoZW4gYSBidWZmZXIgcG9vbCBhbmQgYSBsb2NhbCBjb25uZWN0aW9uIGlzIHN1Y2Nlc3NmdWxseQorICAgICAqICAgICAgICAgY3JlYXRlZC4KKyAgICAgKiAgICAgICAgIE5PX01FTU9SWSB3aGVuIHRoZXJlIGlzIG5vIG1lbW9yeS4KKyAgICAgKiAgICAgICAgIENSSVRJQ0FMX0VSUk9SIG90aGVyd2lzZS4KKyAgICAgKi8KKyAgICBSZXN1bHRTdGF0dXMgY3JlYXRlKGNvbnN0IHN0ZDo6c2hhcmVkX3B0cjxCdWZmZXJQb29sQWxsb2NhdG9yPiAmYWxsb2NhdG9yLAorICAgICAgICAgICAgICAgICAgICAgICAgQ29ubmVjdGlvbklkICpwQ29ubmVjdGlvbklkKTsKKworICAgIC8qKgorICAgICAqIFJlZ2lzdGVyIGEgY3JlYXRlZCBjb25uZWN0aW9uIGFzIHNlbmRlciBmb3IgcmVtb3RlIHByb2Nlc3MuCisgICAgICoKKyAgICAgKiBAcGFyYW0gcmVjZWl2ZXIgICAgICBUaGUgcmVtb3RlIHJlY2VpdmluZyBwcm9jZXNzLgorICAgICAqIEBwYXJhbSBzZW5kZXJJZCAgICAgIEEgbG9jYWwgY29ubmVjdGlvbiB3aGljaCB3aWxsIHNlbmQgYnVmZmVycyB0by4KKyAgICAgKiBAcGFyYW0gcmVjZWl2ZXJJZCAgICBJZCBvZiB0aGUgY3JlYXRlZCByZWNlaXZpbmcgY29ubmVjdGlvbiBvbiB0aGUgcmVjZWl2ZXIKKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICBwcm9jZXNzLgorICAgICAqCisgICAgICogQHJldHVybiBPSyB3aGVuIHRoZSByZWNlaXZpbmcgY29ubmVjdGlvbiBpcyBzdWNjZXNzZnVsbHkgY3JlYXRlZCBvbiB0aGUKKyAgICAgKiAgICAgICAgIHJlY2VpdmVyIHByb2Nlc3MuCisgICAgICogICAgICAgICBOT1RfRk9VTkQgd2hlbiB0aGUgc2VuZGVyIGNvbm5lY3Rpb24gd2FzIG5vdCBmb3VuZC4KKyAgICAgKiAgICAgICAgIEFMUkVBRFlfRVhJU1RTIHRoZSByZWNlaXZpbmcgY29ubmVjdGlvbiBpcyBhbHJlYWR5IG1hZGUuCisgICAgICogICAgICAgICBDUklUSUNBTF9FUlJPUiBvdGhlcndpc2UuCisgICAgICovCisgICAgUmVzdWx0U3RhdHVzIHJlZ2lzdGVyU2VuZGVyKGNvbnN0IHNwPElDbGllbnRNYW5hZ2VyPiAmcmVjZWl2ZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENvbm5lY3Rpb25JZCBzZW5kZXJJZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ29ubmVjdGlvbklkICpyZWNlaXZlcklkKTsKKworICAgIC8qKgorICAgICAqIENsb3NlcyB0aGUgc3BlY2lmaWVkIGNvbm5lY3Rpb24uCisgICAgICoKKyAgICAgKiBAcGFyYW0gY29ubmVjdGlvbklkICBUaGUgaWQgb2YgdGhlIGNvbm5lY3Rpb24uCisgICAgICoKKyAgICAgKiBAcmV0dXJuIE9LIHdoZW4gdGhlIGNvbm5lY3Rpb24gaXMgY2xvc2VkLgorICAgICAqICAgICAgICAgTk9UX0ZPVU5EIHdoZW4gdGhlIHNwZWNpZmllZCBjb25uZWN0aW9uIHdhcyBub3QgZm91bmQuCisgICAgICogICAgICAgICBDUklUSUNBTF9FUlJPUiBvdGhlcndpc2UuCisgICAgICovCisgICAgUmVzdWx0U3RhdHVzIGNsb3NlKENvbm5lY3Rpb25JZCBjb25uZWN0aW9uSWQpOworCisgICAgLyoqCisgICAgICogRXZpY3RzIGNhY2hlZCBhbGxvY2F0aW9ucy4gSWYgaXQncyBsb2NhbCBjb25uZWN0aW9uLCByZWxlYXNlIHRoZQorICAgICAqIHByZXZpb3VzIGFsbG9jYXRpb25zIGFuZCBkbyBub3QgcmVjeWNsZSBjdXJyZW50IGFjdGl2ZSBhbGxvY2F0aW9ucy4KKyAgICAgKgorICAgICAqIEBwYXJhbSBjb25uZWN0aW9uSWQgVGhlIGlkIG9mIHRoZSBjb25uZWN0aW9uLgorICAgICAqCisgICAgICogQHJldHVybiBPSyB3aGVuIHRoZSBjb25uZWN0aW9uIGlzIHJlc2V0dGVkLgorICAgICAqICAgICAgICAgTk9UX0ZPVU5EIHdoZW4gdGhlIHNwZWNpZmllZCBjb25uZWN0aW9uIHdhcyBub3QgZm91bmQuCisgICAgICogICAgICAgICBDUklUSUNBTF9FUlJPUiBvdGhlcndpc2UuCisgICAgICovCisgICAgUmVzdWx0U3RhdHVzIGZsdXNoKENvbm5lY3Rpb25JZCBjb25uZWN0aW9uSWQpOworCisgICAgLyoqCisgICAgICogQWxsb2NhdGVzIGEgYnVmZmVyIGZyb20gdGhlIHNwZWNpZmllZCBjb25uZWN0aW9uLgorICAgICAqCisgICAgICogQHBhcmFtIGNvbm5lY3Rpb25JZCAgVGhlIGlkIG9mIHRoZSBjb25uZWN0aW9uLgorICAgICAqIEBwYXJhbSBwYXJhbXMgICAgICAgIFRoZSBhbGxvY2F0aW9uIHBhcmFtZXRlcnMuCisgICAgICogQHBhcmFtIGhhbmRsZSAgICAgICAgVGhlIG5hdGl2ZSBoYW5kbGUgdG8gdGhlIGFsbG9jYXRlZCBidWZmZXIuIGhhbmRsZQorICAgICAqICAgICAgICAgICAgICAgICAgICAgIHNob3VsZCBiZSBjbG9uZWQgYmVmb3JlIHVzZS4KKyAgICAgKiBAcGFyYW0gYnVmZmVyICAgICAgICBUaGUgYWxsb2NhdGVkIGJ1ZmZlci4KKyAgICAgKgorICAgICAqIEByZXR1cm4gT0sgd2hlbiBhIGJ1ZmZlciB3YXMgYWxsb2NhdGVkIHN1Y2Nlc3NmdWxseS4KKyAgICAgKiAgICAgICAgIE5PVF9GT1VORCB3aGVuIHRoZSBzcGVjaWZpZWQgY29ubmVjdGlvbiB3YXMgbm90IGZvdW5kLgorICAgICAqICAgICAgICAgTk9fTUVNT1JZIHdoZW4gdGhlcmUgaXMgbm8gbWVtb3J5LgorICAgICAqICAgICAgICAgQ1JJVElDQUxfRVJST1Igb3RoZXJ3aXNlLgorICAgICAqLworICAgIFJlc3VsdFN0YXR1cyBhbGxvY2F0ZShDb25uZWN0aW9uSWQgY29ubmVjdGlvbklkLAorICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdGQ6OnZlY3Rvcjx1aW50OF90PiAmcGFyYW1zLAorICAgICAgICAgICAgICAgICAgICAgICAgICBuYXRpdmVfaGFuZGxlX3QgKipoYW5kbGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZDo6c2hhcmVkX3B0cjxCdWZmZXJQb29sRGF0YT4gKmJ1ZmZlcik7CisKKyAgICAvKioKKyAgICAgKiBSZWNlaXZlcyBhIGJ1ZmZlciBmb3IgdGhlIHRyYW5zYWN0aW9uLgorICAgICAqCisgICAgICogQHBhcmFtIGNvbm5lY3Rpb25JZCAgVGhlIGlkIG9mIHRoZSByZWNlaXZpbmcgY29ubmVjdGlvbi4KKyAgICAgKiBAcGFyYW0gdHJhbnNhY3Rpb25JZCBUaGUgaWQgZm9yIHRoZSB0cmFuc2FjdGlvbi4KKyAgICAgKiBAcGFyYW0gYnVmZmVySWQgICAgICBUaGUgaWQgZm9yIHRoZSBidWZmZXIuCisgICAgICogQHBhcmFtIHRpbWVzdGFtcFVzICAgVGhlIHRpbWVzdGFtcCBvZiB0aGUgYnVmZmVyIGlzIGJlaW5nIHNlbnQuCisgICAgICogQHBhcmFtIGhhbmRsZSAgICAgICAgVGhlIG5hdGl2ZSBoYW5kbGUgdG8gdGhlIGFsbG9jYXRlZCBidWZmZXIuIGhhbmRsZQorICAgICAqICAgICAgICAgICAgICAgICAgICAgIHNob3VsZCBiZSBjbG9uZWQgYmVmb3JlIHVzZS4KKyAgICAgKiBAcGFyYW0gYnVmZmVyICAgICAgICBUaGUgcmVjZWl2ZWQgYnVmZmVyLgorICAgICAqCisgICAgICogQHJldHVybiBPSyB3aGVuIGEgYnVmZmVyIHdhcyByZWNlaXZlZCBzdWNjZXNzZnVsbHkuCisgICAgICogICAgICAgICBOT1RfRk9VTkQgd2hlbiB0aGUgc3BlY2lmaWVkIGNvbm5lY3Rpb24gd2FzIG5vdCBmb3VuZC4KKyAgICAgKiAgICAgICAgIE5PX01FTU9SWSB3aGVuIHRoZXJlIGlzIG5vIG1lbW9yeS4KKyAgICAgKiAgICAgICAgIENSSVRJQ0FMX0VSUk9SIG90aGVyd2lzZS4KKyAgICAgKi8KKyAgICBSZXN1bHRTdGF0dXMgcmVjZWl2ZShDb25uZWN0aW9uSWQgY29ubmVjdGlvbklkLAorICAgICAgICAgICAgICAgICAgICAgICAgIFRyYW5zYWN0aW9uSWQgdHJhbnNhY3Rpb25JZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICBCdWZmZXJJZCBidWZmZXJJZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICBpbnQ2NF90IHRpbWVzdGFtcFVzLAorICAgICAgICAgICAgICAgICAgICAgICAgICBuYXRpdmVfaGFuZGxlX3QgKipoYW5kbGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgc3RkOjpzaGFyZWRfcHRyPEJ1ZmZlclBvb2xEYXRhPiAqYnVmZmVyKTsKKworICAgIC8qKgorICAgICAqIFBvc3RzIGEgYnVmZmVyIHRyYW5zZmVyIHRyYW5zYWN0aW9uIHRvIHRoZSBidWZmZXIgcG9vbC4gU2VuZHMgYSBidWZmZXIKKyAgICAgKiB0byBvdGhlciByZW1vdGUgY2xpZW50cyhjb25uZWN0aW9uKSBhZnRlciB0aGlzIGNhbGwgaGFzIGJlZW4gc3VjY2VlZGVkLgorICAgICAqCisgICAgICogQHBhcmFtIHJlY2VpdmVySWQgICAgVGhlIGlkIG9mIHRoZSByZWNlaXZpbmcgY29ubmVjdGlvbi4KKyAgICAgKiBAcGFyYW0gYnVmZmVyICAgICAgICB0byB0cmFuc2ZlcgorICAgICAqIEBwYXJhbSB0cmFuc2FjdGlvbklkIElkIG9mIHRoZSB0cmFuc2ZlciB0cmFuc2FjdGlvbi4KKyAgICAgKiBAcGFyYW0gdGltZXN0YW1wVXMgICBUaGUgdGltZXN0YW1wIG9mIHRoZSBidWZmZXIgdHJhbnNhY3Rpb24gaXMgYmVpbmcKKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICBwb3N0ZWQuCisgICAgICoKKyAgICAgKiBAcmV0dXJuIE9LIHdoZW4gYSBidWZmZXIgdHJhbnNhY3Rpb24gd2FzIHBvc3RlZCBzdWNjZXNzZnVsbHkuCisgICAgICogICAgICAgICBOT1RfRk9VTkQgd2hlbiB0aGUgc2VuZGluZyBjb25uZWN0aW9uIHdhcyBub3QgZm91bmQuCisgICAgICogICAgICAgICBDUklUSUNBTF9FUlJPUiBvdGhlcndpc2UuCisgICAgICovCisgICAgUmVzdWx0U3RhdHVzIHBvc3RTZW5kKENvbm5lY3Rpb25JZCByZWNlaXZlcklkLAorICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdGQ6OnNoYXJlZF9wdHI8QnVmZmVyUG9vbERhdGE+ICZidWZmZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgIFRyYW5zYWN0aW9uSWQgKnRyYW5zYWN0aW9uSWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgIGludDY0X3QgKnRpbWVzdGFtcFVzKTsKKworICAgIC8qKgorICAgICAqICBUaW1lIG91dCBpbmFjdGl2ZSBsaW5nZXJpbmcgY29ubmVjdGlvbnMgYW5kIGNsb3NlLgorICAgICAqLworICAgIHZvaWQgY2xlYW5VcCgpOworCisgICAgLyoqIERlc3RydWN0cyB0aGUgbWFuYWdlciBvZiBidWZmZXIgcG9vbCBjbGllbnRzLiAgKi8KKyAgICB+Q2xpZW50TWFuYWdlcigpOworcHJpdmF0ZToKKyAgICBzdGF0aWMgc3A8Q2xpZW50TWFuYWdlcj4gc0luc3RhbmNlOworICAgIHN0YXRpYyBzdGQ6Om11dGV4IHNJbnN0YW5jZUxvY2s7CisKKyAgICBjbGFzcyBJbXBsOworICAgIGNvbnN0IHN0ZDo6dW5pcXVlX3B0cjxJbXBsPiBtSW1wbDsKKworICAgIENsaWVudE1hbmFnZXIoKTsKK307CisKK30gIC8vIG5hbWVzcGFjZSBpbXBsZW1lbnRhdGlvbgorfSAgLy8gbmFtZXNwYWNlIFYyXzAKK30gIC8vIG5hbWVzcGFjZSBidWZmZXJwb29sCit9ICAvLyBuYW1lc3BhY2UgbWVkaWEKK30gIC8vIG5hbWVzcGFjZSBoYXJkd2FyZQorfSAgLy8gbmFtZXNwYWNlIGFuZHJvaWQKKworI2VuZGlmICAvLyBBTkRST0lEX0hBUkRXQVJFX01FRElBX0JVRkZFUlBPT0xfVjJfMF9DTElFTlRNQU5BR0VSX0gKZGlmZiAtLWdpdCBhL21lZGlhL2J1ZmZlcnBvb2wvMi4wL3Rlc3RzL0FuZHJvaWQuYnAgYi9tZWRpYS9idWZmZXJwb29sLzIuMC90ZXN0cy9BbmRyb2lkLmJwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhiNDRmNjEKLS0tIC9kZXYvbnVsbAorKysgYi9tZWRpYS9idWZmZXJwb29sLzIuMC90ZXN0cy9BbmRyb2lkLmJwCkBAIC0wLDAgKzEsNTEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTggVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworCitjY190ZXN0IHsKKyAgICBuYW1lOiAiVnRzVm5ka0hpZGxCdWZmZXJwb29sVjJfMFRhcmdldFNpbmdsZVRlc3QiLAorICAgIGRlZmF1bHRzOiBbIlZ0c0hhbFRhcmdldFRlc3REZWZhdWx0cyJdLAorICAgIHNyY3M6IFsKKyAgICAgICAgImFsbG9jYXRvci5jcHAiLAorICAgICAgICAic2luZ2xlLmNwcCIsCisgICAgXSwKKyAgICBzdGF0aWNfbGliczogWworICAgICAgICAiYW5kcm9pZC5oYXJkd2FyZS5tZWRpYS5idWZmZXJwb29sQDIuMCIsCisgICAgICAgICJsaWJjdXRpbHMiLAorICAgICAgICAibGlic3RhZ2VmcmlnaHRfYnVmZmVycG9vbEAyLjAiLAorICAgIF0sCisgICAgc2hhcmVkX2xpYnM6IFsKKyAgICAgICAgImxpYmZtcSIsCisgICAgXSwKKyAgICBjb21waWxlX211bHRpbGliOiAiYm90aCIsCit9CisKK2NjX3Rlc3QgeworICAgIG5hbWU6ICJWdHNWbmRrSGlkbEJ1ZmZlcnBvb2xWMl8wVGFyZ2V0TXVsdGlUZXN0IiwKKyAgICBkZWZhdWx0czogWyJWdHNIYWxUYXJnZXRUZXN0RGVmYXVsdHMiXSwKKyAgICBzcmNzOiBbCisgICAgICAgICJhbGxvY2F0b3IuY3BwIiwKKyAgICAgICAgIm11bHRpLmNwcCIsCisgICAgXSwKKyAgICBzdGF0aWNfbGliczogWworICAgICAgICAiYW5kcm9pZC5oYXJkd2FyZS5tZWRpYS5idWZmZXJwb29sQDIuMCIsCisgICAgICAgICJsaWJjdXRpbHMiLAorICAgICAgICAibGlic3RhZ2VmcmlnaHRfYnVmZmVycG9vbEAyLjAiLAorICAgIF0sCisgICAgc2hhcmVkX2xpYnM6IFsKKyAgICAgICAgImxpYmZtcSIsCisgICAgXSwKKyAgICBjb21waWxlX211bHRpbGliOiAiYm90aCIsCit9CmRpZmYgLS1naXQgYS9tZWRpYS9idWZmZXJwb29sLzIuMC90ZXN0cy9PV05FUlMgYi9tZWRpYS9idWZmZXJwb29sLzIuMC90ZXN0cy9PV05FUlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjczM2UwYwotLS0gL2Rldi9udWxsCisrKyBiL21lZGlhL2J1ZmZlcnBvb2wvMi4wL3Rlc3RzL09XTkVSUwpAQCAtMCwwICsxLDkgQEAKKyMgTWVkaWEgdGVhbQorbGFqb3NAZ29vZ2xlLmNvbQorcGF3aW5AZ29vZ2xlLmNvbQordGFrbGVlQGdvb2dsZS5jb20KK3dvbnNpa0Bnb29nbGUuY29tCisKKyMgVlRTIHRlYW0KK3lpbUBnb29nbGUuY29tCit6aHVveWFvQGdvb2dsZS5jb20KZGlmZiAtLWdpdCBhL21lZGlhL2J1ZmZlcnBvb2wvMi4wL3Rlc3RzL2FsbG9jYXRvci5jcHAgYi9tZWRpYS9idWZmZXJwb29sLzIuMC90ZXN0cy9hbGxvY2F0b3IuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg0M2Y3ZWEKLS0tIC9kZXYvbnVsbAorKysgYi9tZWRpYS9idWZmZXJwb29sLzIuMC90ZXN0cy9hbGxvY2F0b3IuY3BwCkBAIC0wLDAgKzEsMjA5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE4IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KKworI2luY2x1ZGUgPGN1dGlscy9hc2htZW0uaD4KKyNpbmNsdWRlIDxzeXMvbW1hbi5oPgorI2luY2x1ZGUgImFsbG9jYXRvci5oIgorCit1bmlvbiBQYXJhbXMgeworICBzdHJ1Y3QgeworICAgIHVpbnQzMl90IGNhcGFjaXR5OworICB9IGRhdGE7CisgIHVpbnQ4X3QgYXJyYXlbMF07CisgIFBhcmFtcygpIDogZGF0YXswfSB7fQorICBQYXJhbXModWludDMyX3Qgc2l6ZSkKKyAgICAgIDogZGF0YXtzaXplfSB7fQorfTsKKworCituYW1lc3BhY2UgeworCitzdHJ1Y3QgSGFuZGxlQXNobWVtIDogcHVibGljIG5hdGl2ZV9oYW5kbGVfdCB7CisgIEhhbmRsZUFzaG1lbShpbnQgYXNobWVtRmQsIHNpemVfdCBzaXplKQorICAgIDogbmF0aXZlX2hhbmRsZV90KGNIZWFkZXIpLAorICAgIG1GZHN7IGFzaG1lbUZkIH0sCisgICAgbUludHN7IGludCAoc2l6ZSAmIDB4RkZGRkZGRkYpLCBpbnQoKHVpbnQ2NF90KHNpemUpID4+IDMyKSAmIDB4RkZGRkZGRkYpLCBrTWFnaWMgfSB7fQorCisgIGludCBhc2htZW1GZCgpIGNvbnN0IHsgcmV0dXJuIG1GZHMubUFzaG1lbTsgfQorICBzaXplX3Qgc2l6ZSgpIGNvbnN0IHsKKyAgICByZXR1cm4gc2l6ZV90KHVuc2lnbmVkKG1JbnRzLm1TaXplTG8pKQorICAgICAgICB8IHNpemVfdCh1aW50NjRfdCh1bnNpZ25lZChtSW50cy5tU2l6ZUhpKSkgPDwgMzIpOworICB9CisKKyAgc3RhdGljIGJvb2wgaXNWYWxpZChjb25zdCBuYXRpdmVfaGFuZGxlX3QgKiBjb25zdCBvKTsKKworcHJvdGVjdGVkOgorICBzdHJ1Y3QgeworICAgIGludCBtQXNobWVtOworICB9IG1GZHM7CisgIHN0cnVjdCB7CisgICAgaW50IG1TaXplTG87CisgICAgaW50IG1TaXplSGk7CisgICAgaW50IG1NYWdpYzsKKyAgfSBtSW50czsKKworcHJpdmF0ZToKKyAgZW51bSB7CisgICAga01hZ2ljID0gJ2FobVx4MDAnLAorICAgIG51bUZkcyA9IHNpemVvZihtRmRzKSAvIHNpemVvZihpbnQpLAorICAgIG51bUludHMgPSBzaXplb2YobUludHMpIC8gc2l6ZW9mKGludCksCisgICAgdmVyc2lvbiA9IHNpemVvZihuYXRpdmVfaGFuZGxlX3QpCisgIH07CisgIGNvbnN0IHN0YXRpYyBuYXRpdmVfaGFuZGxlX3QgY0hlYWRlcjsKK307CisKK2NvbnN0IG5hdGl2ZV9oYW5kbGVfdCBIYW5kbGVBc2htZW06OmNIZWFkZXIgPSB7CisgIEhhbmRsZUFzaG1lbTo6dmVyc2lvbiwKKyAgSGFuZGxlQXNobWVtOjpudW1GZHMsCisgIEhhbmRsZUFzaG1lbTo6bnVtSW50cywKKyAge30KK307CisKK2Jvb2wgSGFuZGxlQXNobWVtOjppc1ZhbGlkKGNvbnN0IG5hdGl2ZV9oYW5kbGVfdCAqIGNvbnN0IG8pIHsKKyAgaWYgKCFvIHx8IG1lbWNtcChvLCAmY0hlYWRlciwgc2l6ZW9mKGNIZWFkZXIpKSkgeworICAgIHJldHVybiBmYWxzZTsKKyAgfQorICBjb25zdCBIYW5kbGVBc2htZW0gKm90aGVyID0gc3RhdGljX2Nhc3Q8Y29uc3QgSGFuZGxlQXNobWVtKj4obyk7CisgIHJldHVybiBvdGhlci0+bUludHMubU1hZ2ljID09IGtNYWdpYzsKK30KKworY2xhc3MgQWxsb2NhdGlvbkFzaG1lbSB7Citwcml2YXRlOgorICBBbGxvY2F0aW9uQXNobWVtKGludCBhc2htZW1GZCwgc2l6ZV90IGNhcGFjaXR5LCBib29sIHJlcykKKyAgICA6IG1IYW5kbGUoYXNobWVtRmQsIGNhcGFjaXR5KSwKKyAgICAgIG1Jbml0KHJlcykge30KKworcHVibGljOgorICBzdGF0aWMgQWxsb2NhdGlvbkFzaG1lbSAqQWxsb2Moc2l6ZV90IHNpemUpIHsKKyAgICBjb25zdGV4cHIgc3RhdGljIGNvbnN0IGNoYXIgKmtBbGxvY2F0aW9uVGFnID0gImJ1ZmZlcnBvb2xfdGVzdCI7CisgICAgaW50IGFzaG1lbUZkID0gYXNobWVtX2NyZWF0ZV9yZWdpb24oa0FsbG9jYXRpb25UYWcsIHNpemUpOworICAgIHJldHVybiBuZXcgQWxsb2NhdGlvbkFzaG1lbShhc2htZW1GZCwgc2l6ZSwgYXNobWVtRmQgPj0gMCk7CisgIH0KKworICB+QWxsb2NhdGlvbkFzaG1lbSgpIHsKKyAgICBpZiAobUluaXQpIHsKKyAgICAgIG5hdGl2ZV9oYW5kbGVfY2xvc2UoJm1IYW5kbGUpOworICAgIH0KKyAgfQorCisgIGNvbnN0IEhhbmRsZUFzaG1lbSAqaGFuZGxlKCkgeworICAgIHJldHVybiAmbUhhbmRsZTsKKyAgfQorCitwcml2YXRlOgorICBIYW5kbGVBc2htZW0gbUhhbmRsZTsKKyAgYm9vbCBtSW5pdDsKKyAgLy8gVE9ETzogbWFwcGluZyBhbmQgbWFwIGZkCit9OworCitzdHJ1Y3QgQWxsb2NhdGlvbkR0b3IgeworICBBbGxvY2F0aW9uRHRvcihjb25zdCBzdGQ6OnNoYXJlZF9wdHI8QWxsb2NhdGlvbkFzaG1lbT4gJmFsbG9jKQorICAgICAgOiBtQWxsb2MoYWxsb2MpIHt9CisKKyAgdm9pZCBvcGVyYXRvcigpKEJ1ZmZlclBvb2xBbGxvY2F0aW9uICpwb29sQWxsb2MpIHsgZGVsZXRlIHBvb2xBbGxvYzsgfQorCisgIGNvbnN0IHN0ZDo6c2hhcmVkX3B0cjxBbGxvY2F0aW9uQXNobWVtPiBtQWxsb2M7Cit9OworCit9CisKKworUmVzdWx0U3RhdHVzIFRlc3RCdWZmZXJQb29sQWxsb2NhdG9yOjphbGxvY2F0ZSgKKyAgICBjb25zdCBzdGQ6OnZlY3Rvcjx1aW50OF90PiAmcGFyYW1zLAorICAgIHN0ZDo6c2hhcmVkX3B0cjxCdWZmZXJQb29sQWxsb2NhdGlvbj4gKmFsbG9jLAorICAgIHNpemVfdCAqYWxsb2NTaXplKSB7CisgIFBhcmFtcyBhc2htZW1QYXJhbXM7CisgIG1lbWNweSgmYXNobWVtUGFyYW1zLCBwYXJhbXMuZGF0YSgpLCBzdGQ6Om1pbihzaXplb2YoUGFyYW1zKSwgcGFyYW1zLnNpemUoKSkpOworCisgIHN0ZDo6c2hhcmVkX3B0cjxBbGxvY2F0aW9uQXNobWVtPiBhc2htZW1BbGxvYyA9CisgICAgICBzdGQ6OnNoYXJlZF9wdHI8QWxsb2NhdGlvbkFzaG1lbT4oCisgICAgICAgICAgQWxsb2NhdGlvbkFzaG1lbTo6QWxsb2MoYXNobWVtUGFyYW1zLmRhdGEuY2FwYWNpdHkpKTsKKyAgaWYgKGFzaG1lbUFsbG9jKSB7CisgICAgQnVmZmVyUG9vbEFsbG9jYXRpb24gKnB0ciA9IG5ldyBCdWZmZXJQb29sQWxsb2NhdGlvbihhc2htZW1BbGxvYy0+aGFuZGxlKCkpOworICAgIGlmIChwdHIpIHsKKyAgICAgICphbGxvYyA9IHN0ZDo6c2hhcmVkX3B0cjxCdWZmZXJQb29sQWxsb2NhdGlvbj4ocHRyLCBBbGxvY2F0aW9uRHRvcihhc2htZW1BbGxvYykpOworICAgICAgaWYgKCphbGxvYykgeworICAgICAgICAgICphbGxvY1NpemUgPSBhc2htZW1QYXJhbXMuZGF0YS5jYXBhY2l0eTsKKyAgICAgICAgICByZXR1cm4gUmVzdWx0U3RhdHVzOjpPSzsKKyAgICAgIH0KKyAgICAgIGRlbGV0ZSBwdHI7CisgICAgICByZXR1cm4gUmVzdWx0U3RhdHVzOjpOT19NRU1PUlk7CisgICAgfQorICB9CisgIHJldHVybiBSZXN1bHRTdGF0dXM6OkNSSVRJQ0FMX0VSUk9SOworfQorCitib29sIFRlc3RCdWZmZXJQb29sQWxsb2NhdG9yOjpjb21wYXRpYmxlKGNvbnN0IHN0ZDo6dmVjdG9yPHVpbnQ4X3Q+ICZuZXdQYXJhbXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RkOjp2ZWN0b3I8dWludDhfdD4gJm9sZFBhcmFtcykgeworICBzaXplX3QgbmV3U2l6ZSA9IG5ld1BhcmFtcy5zaXplKCk7CisgIHNpemVfdCBvbGRTaXplID0gb2xkUGFyYW1zLnNpemUoKTsKKyAgaWYgKG5ld1NpemUgPT0gb2xkU2l6ZSkgeworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbmV3U2l6ZTsgKytpKSB7CisgICAgICBpZiAobmV3UGFyYW1zW2ldICE9IG9sZFBhcmFtc1tpXSkgeworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICB9CisgICAgfQorICAgIHJldHVybiB0cnVlOworICB9CisgIHJldHVybiBmYWxzZTsKK30KKworYm9vbCBUZXN0QnVmZmVyUG9vbEFsbG9jYXRvcjo6RmlsbChjb25zdCBuYXRpdmVfaGFuZGxlX3QgKmhhbmRsZSwgY29uc3QgdW5zaWduZWQgY2hhciB2YWwpIHsKKyAgaWYgKCFIYW5kbGVBc2htZW06OmlzVmFsaWQoaGFuZGxlKSkgeworICAgIHJldHVybiBmYWxzZTsKKyAgfQorICBjb25zdCBIYW5kbGVBc2htZW0gKm8gPSBzdGF0aWNfY2FzdDxjb25zdCBIYW5kbGVBc2htZW0qPihoYW5kbGUpOworICB1bnNpZ25lZCBjaGFyICpwdHIgPSAodW5zaWduZWQgY2hhciAqKW1tYXAoCisgICAgICBOVUxMLCBvLT5zaXplKCksIFBST1RfUkVBRHxQUk9UX1dSSVRFLCBNQVBfU0hBUkVELCBvLT5hc2htZW1GZCgpLCAwKTsKKworICBpZiAocHRyICE9IE1BUF9GQUlMRUQpIHsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG8tPnNpemUoKTsgKytpKSB7CisgICAgICBwdHJbaV0gPSB2YWw7CisgICAgfQorICAgIG11bm1hcChwdHIsIG8tPnNpemUoKSk7CisgICAgcmV0dXJuIHRydWU7CisgIH0KKyAgcmV0dXJuIGZhbHNlOworfQorCitib29sIFRlc3RCdWZmZXJQb29sQWxsb2NhdG9yOjpWZXJpZnkoY29uc3QgbmF0aXZlX2hhbmRsZV90ICpoYW5kbGUsIGNvbnN0IHVuc2lnbmVkIGNoYXIgdmFsKSB7CisgIGlmICghSGFuZGxlQXNobWVtOjppc1ZhbGlkKGhhbmRsZSkpIHsKKyAgICByZXR1cm4gZmFsc2U7CisgIH0KKyAgY29uc3QgSGFuZGxlQXNobWVtICpvID0gc3RhdGljX2Nhc3Q8Y29uc3QgSGFuZGxlQXNobWVtKj4oaGFuZGxlKTsKKyAgdW5zaWduZWQgY2hhciAqcHRyID0gKHVuc2lnbmVkIGNoYXIgKiltbWFwKAorICAgICAgTlVMTCwgby0+c2l6ZSgpLCBQUk9UX1JFQUQsIE1BUF9TSEFSRUQsIG8tPmFzaG1lbUZkKCksIDApOworCisgIGlmIChwdHIgIT0gTUFQX0ZBSUxFRCkgeworICAgIGJvb2wgcmVzID0gdHJ1ZTsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG8tPnNpemUoKTsgKytpKSB7CisgICAgICBpZiAocHRyW2ldICE9IHZhbCkgeworICAgICAgICByZXMgPSBmYWxzZTsKKyAgICAgICAgYnJlYWs7CisgICAgICB9CisgICAgfQorICAgIG11bm1hcChwdHIsIG8tPnNpemUoKSk7CisgICAgcmV0dXJuIHJlczsKKyAgfQorICByZXR1cm4gZmFsc2U7Cit9CisKK3ZvaWQgZ2V0VGVzdEFsbG9jYXRvclBhcmFtcyhzdGQ6OnZlY3Rvcjx1aW50OF90PiAqcGFyYW1zKSB7CisgIGNvbnN0ZXhwciBzdGF0aWMgaW50IGtBbGxvY2F0aW9uU2l6ZSA9IDEwMjQgKiAxMDsKKyAgUGFyYW1zIGFzaG1lbVBhcmFtcyhrQWxsb2NhdGlvblNpemUpOworCisgIHBhcmFtcy0+YXNzaWduKGFzaG1lbVBhcmFtcy5hcnJheSwgYXNobWVtUGFyYW1zLmFycmF5ICsgc2l6ZW9mKGFzaG1lbVBhcmFtcykpOworfQpkaWZmIC0tZ2l0IGEvbWVkaWEvYnVmZmVycG9vbC8yLjAvdGVzdHMvYWxsb2NhdG9yLmggYi9tZWRpYS9idWZmZXJwb29sLzIuMC90ZXN0cy9hbGxvY2F0b3IuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41MjgxZGMzCi0tLSAvZGV2L251bGwKKysrIGIvbWVkaWEvYnVmZmVycG9vbC8yLjAvdGVzdHMvYWxsb2NhdG9yLmgKQEAgLTAsMCArMSw1MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxOCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCisKKyNpZm5kZWYgVk5ES19ISURMX0JVRkZFUlBPT0xfVjJfMF9BTExPQ0FUT1JfSAorI2RlZmluZSBWTkRLX0hJRExfQlVGRkVSUE9PTF9WMl8wX0FMTE9DQVRPUl9ICisKKyNpbmNsdWRlIDxidWZmZXJwb29sL0J1ZmZlclBvb2xUeXBlcy5oPgorCit1c2luZyBhbmRyb2lkOjpoYXJkd2FyZTo6bWVkaWE6OmJ1ZmZlcnBvb2w6OlYyXzA6OlJlc3VsdFN0YXR1czsKK3VzaW5nIGFuZHJvaWQ6OmhhcmR3YXJlOjptZWRpYTo6YnVmZmVycG9vbDo6VjJfMDo6aW1wbGVtZW50YXRpb246OgorICAgIEJ1ZmZlclBvb2xBbGxvY2F0aW9uOwordXNpbmcgYW5kcm9pZDo6aGFyZHdhcmU6Om1lZGlhOjpidWZmZXJwb29sOjpWMl8wOjppbXBsZW1lbnRhdGlvbjo6CisgICAgQnVmZmVyUG9vbEFsbG9jYXRvcjsKKworLy8gYnVmZmVyIGFsbG9jYXRvciBmb3IgdGhlIHRlc3RzCitjbGFzcyBUZXN0QnVmZmVyUG9vbEFsbG9jYXRvciA6IHB1YmxpYyBCdWZmZXJQb29sQWxsb2NhdG9yIHsKKyBwdWJsaWM6CisgIFRlc3RCdWZmZXJQb29sQWxsb2NhdG9yKCkge30KKworICB+VGVzdEJ1ZmZlclBvb2xBbGxvY2F0b3IoKSBvdmVycmlkZSB7fQorCisgIFJlc3VsdFN0YXR1cyBhbGxvY2F0ZShjb25zdCBzdGQ6OnZlY3Rvcjx1aW50OF90PiAmcGFyYW1zLAorICAgICAgICAgICAgICAgICAgICAgICAgc3RkOjpzaGFyZWRfcHRyPEJ1ZmZlclBvb2xBbGxvY2F0aW9uPiAqYWxsb2MsCisgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgKmFsbG9jU2l6ZSkgb3ZlcnJpZGU7CisKKyAgYm9vbCBjb21wYXRpYmxlKGNvbnN0IHN0ZDo6dmVjdG9yPHVpbnQ4X3Q+ICZuZXdQYXJhbXMsCisgICAgICAgICAgICAgICAgICBjb25zdCBzdGQ6OnZlY3Rvcjx1aW50OF90PiAmb2xkUGFyYW1zKSBvdmVycmlkZTsKKworICBzdGF0aWMgYm9vbCBGaWxsKGNvbnN0IG5hdGl2ZV9oYW5kbGVfdCAqaGFuZGxlLCBjb25zdCB1bnNpZ25lZCBjaGFyIHZhbCk7CisKKyAgc3RhdGljIGJvb2wgVmVyaWZ5KGNvbnN0IG5hdGl2ZV9oYW5kbGVfdCAqaGFuZGxlLCBjb25zdCB1bnNpZ25lZCBjaGFyIHZhbCk7CisKK307CisKKy8vIHJldHJpZXZlIGJ1ZmZlciBhbGxvY2F0b3IgcGFyYW10ZXJzCit2b2lkIGdldFRlc3RBbGxvY2F0b3JQYXJhbXMoc3RkOjp2ZWN0b3I8dWludDhfdD4gKnBhcmFtcyk7CisKKyNlbmRpZiAgLy8gVk5ES19ISURMX0JVRkZFUlBPT0xfVjJfMF9BTExPQ0FUT1JfSApkaWZmIC0tZ2l0IGEvbWVkaWEvYnVmZmVycG9vbC8yLjAvdGVzdHMvbXVsdGkuY3BwIGIvbWVkaWEvYnVmZmVycG9vbC8yLjAvdGVzdHMvbXVsdGkuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY4YjY5OTIKLS0tIC9kZXYvbnVsbAorKysgYi9tZWRpYS9idWZmZXJwb29sLzIuMC90ZXN0cy9tdWx0aS5jcHAKQEAgLTAsMCArMSwyMjMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTggVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworCisjZGVmaW5lIExPR19UQUcgImJ1ZmZmZXJwb29sX3VuaXRfdGVzdCIKKworI2luY2x1ZGUgPGd0ZXN0L2d0ZXN0Lmg+CisKKyNpbmNsdWRlIDxhbmRyb2lkLWJhc2UvbG9nZ2luZy5oPgorI2luY2x1ZGUgPGJpbmRlci9Qcm9jZXNzU3RhdGUuaD4KKyNpbmNsdWRlIDxidWZmZXJwb29sL0NsaWVudE1hbmFnZXIuaD4KKyNpbmNsdWRlIDxoaWRsL0hpZGxTdXBwb3J0Lmg+CisjaW5jbHVkZSA8aGlkbC9IaWRsVHJhbnNwb3J0U3VwcG9ydC5oPgorI2luY2x1ZGUgPGhpZGwvTGVnYWN5U3VwcG9ydC5oPgorI2luY2x1ZGUgPGhpZGwvU3RhdHVzLmg+CisjaW5jbHVkZSA8c2lnbmFsLmg+CisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisjaW5jbHVkZSA8c3lzL3dhaXQuaD4KKyNpbmNsdWRlIDx1bmlzdGQuaD4KKyNpbmNsdWRlIDxpb3N0cmVhbT4KKyNpbmNsdWRlIDxtZW1vcnk+CisjaW5jbHVkZSA8dmVjdG9yPgorI2luY2x1ZGUgImFsbG9jYXRvci5oIgorCit1c2luZyBhbmRyb2lkOjpoYXJkd2FyZTo6Y29uZmlndXJlUnBjVGhyZWFkcG9vbDsKK3VzaW5nIGFuZHJvaWQ6OmhhcmR3YXJlOjpoaWRsX2hhbmRsZTsKK3VzaW5nIGFuZHJvaWQ6OmhhcmR3YXJlOjptZWRpYTo6YnVmZmVycG9vbDo6VjJfMDo6SUNsaWVudE1hbmFnZXI7Cit1c2luZyBhbmRyb2lkOjpoYXJkd2FyZTo6bWVkaWE6OmJ1ZmZlcnBvb2w6OlYyXzA6OlJlc3VsdFN0YXR1czsKK3VzaW5nIGFuZHJvaWQ6OmhhcmR3YXJlOjptZWRpYTo6YnVmZmVycG9vbDo6VjJfMDo6aW1wbGVtZW50YXRpb246OkJ1ZmZlcklkOwordXNpbmcgYW5kcm9pZDo6aGFyZHdhcmU6Om1lZGlhOjpidWZmZXJwb29sOjpWMl8wOjppbXBsZW1lbnRhdGlvbjo6Q2xpZW50TWFuYWdlcjsKK3VzaW5nIGFuZHJvaWQ6OmhhcmR3YXJlOjptZWRpYTo6YnVmZmVycG9vbDo6VjJfMDo6aW1wbGVtZW50YXRpb246OkNvbm5lY3Rpb25JZDsKK3VzaW5nIGFuZHJvaWQ6OmhhcmR3YXJlOjptZWRpYTo6YnVmZmVycG9vbDo6VjJfMDo6aW1wbGVtZW50YXRpb246OlRyYW5zYWN0aW9uSWQ7Cit1c2luZyBhbmRyb2lkOjpoYXJkd2FyZTo6bWVkaWE6OmJ1ZmZlcnBvb2w6OkJ1ZmZlclBvb2xEYXRhOworCituYW1lc3BhY2UgeworCisvLyBjb21tdW5pY2F0aW9uIG1lc3NhZ2UgdHlwZXMgYmV0d2VlbiBwcm9jZXNzZXMuCitlbnVtIFBpcGVDb21tYW5kIDogaW50MzJfdCB7CisgICAgSU5JVF9PSyA9IDAsCisgICAgSU5JVF9FUlJPUiwKKyAgICBTRU5ELAorICAgIFJFQ0VJVkVfT0ssCisgICAgUkVDRUlWRV9FUlJPUiwKK307CisKKy8vIGNvbW11bmljYXRpb24gbWVzc2FnZSBiZXR3ZWVuIHByb2Nlc3Nlcy4KK3VuaW9uIFBpcGVNZXNzYWdlIHsKKyAgICBzdHJ1Y3QgIHsKKyAgICAgICAgaW50MzJfdCBjb21tYW5kOworICAgICAgICBCdWZmZXJJZCBidWZmZXJJZDsKKyAgICAgICAgQ29ubmVjdGlvbklkIGNvbm5lY3Rpb25JZDsKKyAgICAgICAgVHJhbnNhY3Rpb25JZCB0cmFuc2FjdGlvbklkOworICAgICAgICBpbnQ2NF90ICB0aW1lc3RhbXBVczsKKyAgICB9IGRhdGE7CisgICAgY2hhciBhcnJheVswXTsKK307CisKKy8vIG1lZGlhLmJ1ZmZlcnBvb2wgdGVzdCBzZXR1cAorY2xhc3MgQnVmZmVycG9vbE11bHRpVGVzdCA6IHB1YmxpYyA6OnRlc3Rpbmc6OlRlc3QgeworIHB1YmxpYzoKKyAgdmlydHVhbCB2b2lkIFNldFVwKCkgb3ZlcnJpZGUgeworICAgIFJlc3VsdFN0YXR1cyBzdGF0dXM7CisgICAgbVJlY2VpdmVyUGlkID0gLTE7CisgICAgbUNvbm5lY3Rpb25WYWxpZCA9IGZhbHNlOworCisgICAgQVNTRVJUX1RSVUUocGlwZShtQ29tbWFuZFBpcGVGZHMpID09IDApOworICAgIEFTU0VSVF9UUlVFKHBpcGUobVJlc3VsdFBpcGVGZHMpID09IDApOworCisgICAgbVJlY2VpdmVyUGlkID0gZm9yaygpOworICAgIEFTU0VSVF9UUlVFKG1SZWNlaXZlclBpZCA+PSAwKTsKKworICAgIGlmIChtUmVjZWl2ZXJQaWQgPT0gMCkgeworICAgICAgZG9SZWNlaXZlcigpOworICAgICAgLy8gSW4gb3JkZXIgdG8gaWdub3JlIGd0ZXN0IGJlaGF2aW91ciwgd2FpdCBmb3IgYmVpbmcga2lsbGVkIGZyb20KKyAgICAgIC8vIHRlYXJEb3duCisgICAgICBwYXVzZSgpOworICAgIH0KKworICAgIG1NYW5hZ2VyID0gQ2xpZW50TWFuYWdlcjo6Z2V0SW5zdGFuY2UoKTsKKyAgICBBU1NFUlRfTkUobU1hbmFnZXIsIG51bGxwdHIpOworCisgICAgbUFsbG9jYXRvciA9IHN0ZDo6bWFrZV9zaGFyZWQ8VGVzdEJ1ZmZlclBvb2xBbGxvY2F0b3I+KCk7CisgICAgQVNTRVJUX1RSVUUoKGJvb2wpbUFsbG9jYXRvcik7CisKKyAgICBzdGF0dXMgPSBtTWFuYWdlci0+Y3JlYXRlKG1BbGxvY2F0b3IsICZtQ29ubmVjdGlvbklkKTsKKyAgICBBU1NFUlRfVFJVRShzdGF0dXMgPT0gUmVzdWx0U3RhdHVzOjpPSyk7CisgICAgbUNvbm5lY3Rpb25WYWxpZCA9IHRydWU7CisgIH0KKworICB2aXJ0dWFsIHZvaWQgVGVhckRvd24oKSBvdmVycmlkZSB7CisgICAgaWYgKG1SZWNlaXZlclBpZCA+IDApIHsKKyAgICAgIGtpbGwobVJlY2VpdmVyUGlkLCBTSUdLSUxMKTsKKyAgICAgIGludCB3c3RhdHVzOworICAgICAgd2FpdCgmd3N0YXR1cyk7CisgICAgfQorCisgICAgaWYgKG1Db25uZWN0aW9uVmFsaWQpIHsKKyAgICAgIG1NYW5hZ2VyLT5jbG9zZShtQ29ubmVjdGlvbklkKTsKKyAgICB9CisgIH0KKworIHByb3RlY3RlZDoKKyAgc3RhdGljIHZvaWQgZGVzY3JpcHRpb24oY29uc3Qgc3RkOjpzdHJpbmcmIGRlc2NyaXB0aW9uKSB7CisgICAgUmVjb3JkUHJvcGVydHkoImRlc2NyaXB0aW9uIiwgZGVzY3JpcHRpb24pOworICB9CisKKyAgYW5kcm9pZDo6c3A8Q2xpZW50TWFuYWdlcj4gbU1hbmFnZXI7CisgIHN0ZDo6c2hhcmVkX3B0cjxCdWZmZXJQb29sQWxsb2NhdG9yPiBtQWxsb2NhdG9yOworICBib29sIG1Db25uZWN0aW9uVmFsaWQ7CisgIENvbm5lY3Rpb25JZCBtQ29ubmVjdGlvbklkOworICBwaWRfdCBtUmVjZWl2ZXJQaWQ7CisgIGludCBtQ29tbWFuZFBpcGVGZHNbMl07CisgIGludCBtUmVzdWx0UGlwZUZkc1syXTsKKworICBib29sIHNlbmRNZXNzYWdlKGludCAqcGlwZXMsIGNvbnN0IFBpcGVNZXNzYWdlICZtZXNzYWdlKSB7CisgICAgaW50IHJldCA9IHdyaXRlKHBpcGVzWzFdLCBtZXNzYWdlLmFycmF5LCBzaXplb2YoUGlwZU1lc3NhZ2UpKTsKKyAgICByZXR1cm4gcmV0ID09IHNpemVvZihQaXBlTWVzc2FnZSk7CisgIH0KKworICBib29sIHJlY2VpdmVNZXNzYWdlKGludCAqcGlwZXMsIFBpcGVNZXNzYWdlICptZXNzYWdlKSB7CisgICAgaW50IHJldCA9IHJlYWQocGlwZXNbMF0sIG1lc3NhZ2UtPmFycmF5LCBzaXplb2YoUGlwZU1lc3NhZ2UpKTsKKyAgICByZXR1cm4gcmV0ID09IHNpemVvZihQaXBlTWVzc2FnZSk7CisgIH0KKworICB2b2lkIGRvUmVjZWl2ZXIoKSB7CisgICAgY29uZmlndXJlUnBjVGhyZWFkcG9vbCgxLCBmYWxzZSk7CisgICAgUGlwZU1lc3NhZ2UgbWVzc2FnZTsKKyAgICBtTWFuYWdlciA9IENsaWVudE1hbmFnZXI6OmdldEluc3RhbmNlKCk7CisgICAgaWYgKCFtTWFuYWdlcikgeworICAgICAgbWVzc2FnZS5kYXRhLmNvbW1hbmQgPSBQaXBlQ29tbWFuZDo6SU5JVF9FUlJPUjsKKyAgICAgIHNlbmRNZXNzYWdlKG1SZXN1bHRQaXBlRmRzLCBtZXNzYWdlKTsKKyAgICAgIHJldHVybjsKKyAgICB9CisgICAgYW5kcm9pZDo6c3RhdHVzX3Qgc3RhdHVzID0gbU1hbmFnZXItPnJlZ2lzdGVyQXNTZXJ2aWNlKCk7CisgICAgaWYgKHN0YXR1cyAhPSBhbmRyb2lkOjpPSykgeworICAgICAgbWVzc2FnZS5kYXRhLmNvbW1hbmQgPSBQaXBlQ29tbWFuZDo6SU5JVF9FUlJPUjsKKyAgICAgIHNlbmRNZXNzYWdlKG1SZXN1bHRQaXBlRmRzLCBtZXNzYWdlKTsKKyAgICAgIHJldHVybjsKKyAgICB9CisgICAgbWVzc2FnZS5kYXRhLmNvbW1hbmQgPSBQaXBlQ29tbWFuZDo6SU5JVF9PSzsKKyAgICBzZW5kTWVzc2FnZShtUmVzdWx0UGlwZUZkcywgbWVzc2FnZSk7CisKKyAgICByZWNlaXZlTWVzc2FnZShtQ29tbWFuZFBpcGVGZHMsICZtZXNzYWdlKTsKKyAgICB7CisgICAgICBuYXRpdmVfaGFuZGxlX3QgKnJoYW5kbGUgPSBudWxscHRyOworICAgICAgc3RkOjpzaGFyZWRfcHRyPEJ1ZmZlclBvb2xEYXRhPiByYnVmZmVyOworICAgICAgUmVzdWx0U3RhdHVzIHN0YXR1cyA9IG1NYW5hZ2VyLT5yZWNlaXZlKAorICAgICAgICAgIG1lc3NhZ2UuZGF0YS5jb25uZWN0aW9uSWQsIG1lc3NhZ2UuZGF0YS50cmFuc2FjdGlvbklkLAorICAgICAgICAgIG1lc3NhZ2UuZGF0YS5idWZmZXJJZCwgbWVzc2FnZS5kYXRhLnRpbWVzdGFtcFVzLCAmcmhhbmRsZSwgJnJidWZmZXIpOworICAgICAgbU1hbmFnZXItPmNsb3NlKG1lc3NhZ2UuZGF0YS5jb25uZWN0aW9uSWQpOworICAgICAgaWYgKHN0YXR1cyAhPSBSZXN1bHRTdGF0dXM6Ok9LKSB7CisgICAgICAgIGlmICghVGVzdEJ1ZmZlclBvb2xBbGxvY2F0b3I6OlZlcmlmeShyaGFuZGxlLCAweDc3KSkgeworICAgICAgICAgIG1lc3NhZ2UuZGF0YS5jb21tYW5kID0gUGlwZUNvbW1hbmQ6OlJFQ0VJVkVfRVJST1I7CisgICAgICAgICAgc2VuZE1lc3NhZ2UobVJlc3VsdFBpcGVGZHMsIG1lc3NhZ2UpOworICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgfQorICAgIH0KKyAgICBtZXNzYWdlLmRhdGEuY29tbWFuZCA9IFBpcGVDb21tYW5kOjpSRUNFSVZFX09LOworICAgIHNlbmRNZXNzYWdlKG1SZXN1bHRQaXBlRmRzLCBtZXNzYWdlKTsKKyAgfQorfTsKKworLy8gQnVmZmVyIHRyYW5zZmVyIHRlc3QgYmV0d2VlbiBwcm9jZXNzZXMuCitURVNUX0YoQnVmZmVycG9vbE11bHRpVGVzdCwgVHJhbnNmZXJCdWZmZXIpIHsKKyAgUmVzdWx0U3RhdHVzIHN0YXR1czsKKyAgUGlwZU1lc3NhZ2UgbWVzc2FnZTsKKworICBBU1NFUlRfVFJVRShyZWNlaXZlTWVzc2FnZShtUmVzdWx0UGlwZUZkcywgJm1lc3NhZ2UpKTsKKworICBhbmRyb2lkOjpzcDxJQ2xpZW50TWFuYWdlcj4gcmVjZWl2ZXIgPSBJQ2xpZW50TWFuYWdlcjo6Z2V0U2VydmljZSgpOworICBDb25uZWN0aW9uSWQgcmVjZWl2ZXJJZDsKKyAgQVNTRVJUX1RSVUUoKGJvb2wpcmVjZWl2ZXIpOworCisgIHN0YXR1cyA9IG1NYW5hZ2VyLT5yZWdpc3RlclNlbmRlcihyZWNlaXZlciwgbUNvbm5lY3Rpb25JZCwgJnJlY2VpdmVySWQpOworICBBU1NFUlRfVFJVRShzdGF0dXMgPT0gUmVzdWx0U3RhdHVzOjpPSyk7CisgIHsKKyAgICBuYXRpdmVfaGFuZGxlX3QgKnNoYW5kbGUgPSBudWxscHRyOworICAgIHN0ZDo6c2hhcmVkX3B0cjxCdWZmZXJQb29sRGF0YT4gc2J1ZmZlcjsKKyAgICBUcmFuc2FjdGlvbklkIHRyYW5zYWN0aW9uSWQ7CisgICAgaW50NjRfdCBwb3N0VXM7CisgICAgc3RkOjp2ZWN0b3I8dWludDhfdD4gdmVjUGFyYW1zOworCisgICAgZ2V0VGVzdEFsbG9jYXRvclBhcmFtcygmdmVjUGFyYW1zKTsKKyAgICBzdGF0dXMgPSBtTWFuYWdlci0+YWxsb2NhdGUobUNvbm5lY3Rpb25JZCwgdmVjUGFyYW1zLCAmc2hhbmRsZSwgJnNidWZmZXIpOworICAgIEFTU0VSVF9UUlVFKHN0YXR1cyA9PSBSZXN1bHRTdGF0dXM6Ok9LKTsKKworICAgIEFTU0VSVF9UUlVFKFRlc3RCdWZmZXJQb29sQWxsb2NhdG9yOjpGaWxsKHNoYW5kbGUsIDB4NzcpKTsKKworICAgIHN0YXR1cyA9IG1NYW5hZ2VyLT5wb3N0U2VuZChyZWNlaXZlcklkLCBzYnVmZmVyLCAmdHJhbnNhY3Rpb25JZCwgJnBvc3RVcyk7CisgICAgQVNTRVJUX1RSVUUoc3RhdHVzID09IFJlc3VsdFN0YXR1czo6T0spOworCisgICAgbWVzc2FnZS5kYXRhLmNvbW1hbmQgPSBQaXBlQ29tbWFuZDo6U0VORDsKKyAgICBtZXNzYWdlLmRhdGEuYnVmZmVySWQgPSBzYnVmZmVyLT5tSWQ7CisgICAgbWVzc2FnZS5kYXRhLmNvbm5lY3Rpb25JZCA9IHJlY2VpdmVySWQ7CisgICAgbWVzc2FnZS5kYXRhLnRyYW5zYWN0aW9uSWQgPSB0cmFuc2FjdGlvbklkOworICAgIG1lc3NhZ2UuZGF0YS50aW1lc3RhbXBVcyA9IHBvc3RVczsKKyAgICBzZW5kTWVzc2FnZShtQ29tbWFuZFBpcGVGZHMsIG1lc3NhZ2UpOworICB9CisgIEVYUEVDVF9UUlVFKHJlY2VpdmVNZXNzYWdlKG1SZXN1bHRQaXBlRmRzLCAmbWVzc2FnZSkpOworfQorCit9ICAvLyBhbm9ueW1vdXMgbmFtZXNwYWNlCisKK2ludCBtYWluKGludCBhcmdjLCBjaGFyKiogYXJndikgeworICBzZXRlbnYoIlRSRUJMRV9URVNUSU5HX09WRVJSSURFIiwgInRydWUiLCB0cnVlKTsKKyAgOjp0ZXN0aW5nOjpJbml0R29vZ2xlVGVzdCgmYXJnYywgYXJndik7CisgIGludCBzdGF0dXMgPSBSVU5fQUxMX1RFU1RTKCk7CisgIExPRyhJTkZPKSA8PCAiVGVzdCByZXN1bHQgPSAiIDw8IHN0YXR1czsKKyAgcmV0dXJuIHN0YXR1czsKK30KZGlmZiAtLWdpdCBhL21lZGlhL2J1ZmZlcnBvb2wvMi4wL3Rlc3RzL3NpbmdsZS5jcHAgYi9tZWRpYS9idWZmZXJwb29sLzIuMC90ZXN0cy9zaW5nbGUuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc3N2VkY2YKLS0tIC9kZXYvbnVsbAorKysgYi9tZWRpYS9idWZmZXJwb29sLzIuMC90ZXN0cy9zaW5nbGUuY3BwCkBAIC0wLDAgKzEsMTY2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE4IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KKworI2RlZmluZSBMT0dfVEFHICJidWZmZmVycG9vbF91bml0X3Rlc3QiCisKKyNpbmNsdWRlIDxndGVzdC9ndGVzdC5oPgorCisjaW5jbHVkZSA8YW5kcm9pZC1iYXNlL2xvZ2dpbmcuaD4KKyNpbmNsdWRlIDxiaW5kZXIvUHJvY2Vzc1N0YXRlLmg+CisjaW5jbHVkZSA8YnVmZmVycG9vbC9DbGllbnRNYW5hZ2VyLmg+CisjaW5jbHVkZSA8aGlkbC9IaWRsU3VwcG9ydC5oPgorI2luY2x1ZGUgPGhpZGwvSGlkbFRyYW5zcG9ydFN1cHBvcnQuaD4KKyNpbmNsdWRlIDxoaWRsL0xlZ2FjeVN1cHBvcnQuaD4KKyNpbmNsdWRlIDxoaWRsL1N0YXR1cy5oPgorI2luY2x1ZGUgPHVuaXN0ZC5oPgorI2luY2x1ZGUgPGlvc3RyZWFtPgorI2luY2x1ZGUgPG1lbW9yeT4KKyNpbmNsdWRlIDx2ZWN0b3I+CisjaW5jbHVkZSAiYWxsb2NhdG9yLmgiCisKK3VzaW5nIGFuZHJvaWQ6OmhhcmR3YXJlOjpoaWRsX2hhbmRsZTsKK3VzaW5nIGFuZHJvaWQ6OmhhcmR3YXJlOjptZWRpYTo6YnVmZmVycG9vbDo6VjJfMDo6UmVzdWx0U3RhdHVzOwordXNpbmcgYW5kcm9pZDo6aGFyZHdhcmU6Om1lZGlhOjpidWZmZXJwb29sOjpWMl8wOjppbXBsZW1lbnRhdGlvbjo6QnVmZmVySWQ7Cit1c2luZyBhbmRyb2lkOjpoYXJkd2FyZTo6bWVkaWE6OmJ1ZmZlcnBvb2w6OlYyXzA6OmltcGxlbWVudGF0aW9uOjpDbGllbnRNYW5hZ2VyOwordXNpbmcgYW5kcm9pZDo6aGFyZHdhcmU6Om1lZGlhOjpidWZmZXJwb29sOjpWMl8wOjppbXBsZW1lbnRhdGlvbjo6Q29ubmVjdGlvbklkOwordXNpbmcgYW5kcm9pZDo6aGFyZHdhcmU6Om1lZGlhOjpidWZmZXJwb29sOjpWMl8wOjppbXBsZW1lbnRhdGlvbjo6VHJhbnNhY3Rpb25JZDsKK3VzaW5nIGFuZHJvaWQ6OmhhcmR3YXJlOjptZWRpYTo6YnVmZmVycG9vbDo6QnVmZmVyUG9vbERhdGE7CisKK25hbWVzcGFjZSB7CisKKy8vIE51bWJlciBvZiBpdGVyYXRpb24gZm9yIGJ1ZmZlciBhbGxvY2F0aW9uIHRlc3QuCitjb25zdGV4cHIgc3RhdGljIGludCBrTnVtQWxsb2NhdGlvblRlc3QgPSAzOworCisvLyBOdW1iZXIgb2YgaXRlcmF0aW9uIGZvciBidWZmZXIgcmVjeWNsaW5nIHRlc3QuCitjb25zdGV4cHIgc3RhdGljIGludCBrTnVtUmVjeWNsZVRlc3QgPSAzOworCisvLyBtZWRpYS5idWZmZXJwb29sIHRlc3Qgc2V0dXAKK2NsYXNzIEJ1ZmZlcnBvb2xTaW5nbGVUZXN0IDogcHVibGljIDo6dGVzdGluZzo6VGVzdCB7CisgcHVibGljOgorICB2aXJ0dWFsIHZvaWQgU2V0VXAoKSBvdmVycmlkZSB7CisgICAgUmVzdWx0U3RhdHVzIHN0YXR1czsKKyAgICBtQ29ubmVjdGlvblZhbGlkID0gZmFsc2U7CisKKyAgICBtTWFuYWdlciA9IENsaWVudE1hbmFnZXI6OmdldEluc3RhbmNlKCk7CisgICAgQVNTRVJUX05FKG1NYW5hZ2VyLCBudWxscHRyKTsKKworICAgIG1BbGxvY2F0b3IgPSBzdGQ6Om1ha2Vfc2hhcmVkPFRlc3RCdWZmZXJQb29sQWxsb2NhdG9yPigpOworICAgIEFTU0VSVF9UUlVFKChib29sKW1BbGxvY2F0b3IpOworCisgICAgc3RhdHVzID0gbU1hbmFnZXItPmNyZWF0ZShtQWxsb2NhdG9yLCAmbUNvbm5lY3Rpb25JZCk7CisgICAgQVNTRVJUX1RSVUUoc3RhdHVzID09IFJlc3VsdFN0YXR1czo6T0spOworCisgICAgbUNvbm5lY3Rpb25WYWxpZCA9IHRydWU7CisKKyAgICBzdGF0dXMgPSBtTWFuYWdlci0+cmVnaXN0ZXJTZW5kZXIobU1hbmFnZXIsIG1Db25uZWN0aW9uSWQsICZtUmVjZWl2ZXJJZCk7CisgICAgQVNTRVJUX1RSVUUoc3RhdHVzID09IFJlc3VsdFN0YXR1czo6QUxSRUFEWV9FWElTVFMgJiYKKyAgICAgICAgICAgICAgICBtUmVjZWl2ZXJJZCA9PSBtQ29ubmVjdGlvbklkKTsKKyAgfQorCisgIHZpcnR1YWwgdm9pZCBUZWFyRG93bigpIG92ZXJyaWRlIHsKKyAgICBpZiAobUNvbm5lY3Rpb25WYWxpZCkgeworICAgICAgbU1hbmFnZXItPmNsb3NlKG1Db25uZWN0aW9uSWQpOworICAgIH0KKyAgfQorCisgcHJvdGVjdGVkOgorICBzdGF0aWMgdm9pZCBkZXNjcmlwdGlvbihjb25zdCBzdGQ6OnN0cmluZyYgZGVzY3JpcHRpb24pIHsKKyAgICBSZWNvcmRQcm9wZXJ0eSgiZGVzY3JpcHRpb24iLCBkZXNjcmlwdGlvbik7CisgIH0KKworICBhbmRyb2lkOjpzcDxDbGllbnRNYW5hZ2VyPiBtTWFuYWdlcjsKKyAgc3RkOjpzaGFyZWRfcHRyPEJ1ZmZlclBvb2xBbGxvY2F0b3I+IG1BbGxvY2F0b3I7CisgIGJvb2wgbUNvbm5lY3Rpb25WYWxpZDsKKyAgQ29ubmVjdGlvbklkIG1Db25uZWN0aW9uSWQ7CisgIENvbm5lY3Rpb25JZCBtUmVjZWl2ZXJJZDsKKworfTsKKworLy8gQnVmZmVyIGFsbG9jYXRpb24gdGVzdC4KKy8vIENoZWNrIHdoZXRoZXIgZWFjaCBidWZmZXIgYWxsb2NhdGlvbiBpcyBkb25lIHN1Y2Nlc3NmdWxseSB3aXRoCisvLyB1bmlxdWUgYnVmZmVyIGlkLgorVEVTVF9GKEJ1ZmZlcnBvb2xTaW5nbGVUZXN0LCBBbGxvY2F0ZUJ1ZmZlcikgeworICBSZXN1bHRTdGF0dXMgc3RhdHVzOworICBzdGQ6OnZlY3Rvcjx1aW50OF90PiB2ZWNQYXJhbXM7CisgIGdldFRlc3RBbGxvY2F0b3JQYXJhbXMoJnZlY1BhcmFtcyk7CisKKyAgc3RkOjpzaGFyZWRfcHRyPEJ1ZmZlclBvb2xEYXRhPiBidWZmZXJba051bUFsbG9jYXRpb25UZXN0XTsKKyAgbmF0aXZlX2hhbmRsZV90ICphbGxvY0hhbmRsZSA9IG51bGxwdHI7CisgIGZvciAoaW50IGkgPSAwOyBpIDwga051bUFsbG9jYXRpb25UZXN0OyArK2kpIHsKKyAgICBzdGF0dXMgPSBtTWFuYWdlci0+YWxsb2NhdGUobUNvbm5lY3Rpb25JZCwgdmVjUGFyYW1zLCAmYWxsb2NIYW5kbGUsICZidWZmZXJbaV0pOworICAgIEFTU0VSVF9UUlVFKHN0YXR1cyA9PSBSZXN1bHRTdGF0dXM6Ok9LKTsKKyAgfQorICBmb3IgKGludCBpID0gMDsgaSA8IGtOdW1BbGxvY2F0aW9uVGVzdDsgKytpKSB7CisgICAgZm9yIChpbnQgaiA9IGkgKyAxOyBqIDwga051bUFsbG9jYXRpb25UZXN0OyArK2opIHsKKyAgICAgIEFTU0VSVF9UUlVFKGJ1ZmZlcltpXS0+bUlkICE9IGJ1ZmZlcltqXS0+bUlkKTsKKyAgICB9CisgIH0KKyAgRVhQRUNUX1RSVUUoa051bUFsbG9jYXRpb25UZXN0ID4gMSk7Cit9CisKKy8vIEJ1ZmZlciByZWN5Y2xlIHRlc3QuCisvLyBDaGVjayB3aGV0aGVyIGRlLWFsbG9jYXRlZCBidWZmZXJzIGFyZSByZWN5Y2xlZC4KK1RFU1RfRihCdWZmZXJwb29sU2luZ2xlVGVzdCwgUmVjeWNsZUJ1ZmZlcikgeworICBSZXN1bHRTdGF0dXMgc3RhdHVzOworICBzdGQ6OnZlY3Rvcjx1aW50OF90PiB2ZWNQYXJhbXM7CisgIGdldFRlc3RBbGxvY2F0b3JQYXJhbXMoJnZlY1BhcmFtcyk7CisKKyAgQnVmZmVySWQgYmlkW2tOdW1SZWN5Y2xlVGVzdF07CisgIGZvciAoaW50IGkgPSAwOyBpIDwga051bVJlY3ljbGVUZXN0OyArK2kpIHsKKyAgICBzdGQ6OnNoYXJlZF9wdHI8QnVmZmVyUG9vbERhdGE+IGJ1ZmZlcjsKKyAgICBuYXRpdmVfaGFuZGxlX3QgKmFsbG9jSGFuZGxlID0gbnVsbHB0cjsKKyAgICBzdGF0dXMgPSBtTWFuYWdlci0+YWxsb2NhdGUobUNvbm5lY3Rpb25JZCwgdmVjUGFyYW1zLCAmYWxsb2NIYW5kbGUsICZidWZmZXIpOworICAgIEFTU0VSVF9UUlVFKHN0YXR1cyA9PSBSZXN1bHRTdGF0dXM6Ok9LKTsKKyAgICBiaWRbaV0gPSBidWZmZXItPm1JZDsKKyAgfQorICBmb3IgKGludCBpID0gMTsgaSA8IGtOdW1SZWN5Y2xlVGVzdDsgKytpKSB7CisgICAgQVNTRVJUX1RSVUUoYmlkW2kgLSAxXSA9PSBiaWRbaV0pOworICB9CisgIEVYUEVDVF9UUlVFKGtOdW1SZWN5Y2xlVGVzdCA+IDEpOworfQorCisvLyBCdWZmZXIgdHJhbnNmZXIgdGVzdC4KKy8vIENoZWNrIHdoZXRoZXIgYnVmZmVyIGlzIHRyYW5zZmVycmVkIHRvIGFub3RoZXIgY2xpZW50IHN1Y2Nlc3NmdWxseS4KK1RFU1RfRihCdWZmZXJwb29sU2luZ2xlVGVzdCwgVHJhbnNmZXJCdWZmZXIpIHsKKyAgUmVzdWx0U3RhdHVzIHN0YXR1czsKKyAgc3RkOjp2ZWN0b3I8dWludDhfdD4gdmVjUGFyYW1zOworICBnZXRUZXN0QWxsb2NhdG9yUGFyYW1zKCZ2ZWNQYXJhbXMpOworICBzdGQ6OnNoYXJlZF9wdHI8QnVmZmVyUG9vbERhdGE+IHNidWZmZXIsIHJidWZmZXI7CisgIG5hdGl2ZV9oYW5kbGVfdCAqYWxsb2NIYW5kbGUgPSBudWxscHRyOworICBuYXRpdmVfaGFuZGxlX3QgKnJlY3ZIYW5kbGUgPSBudWxscHRyOworCisgIFRyYW5zYWN0aW9uSWQgdHJhbnNhY3Rpb25JZDsKKyAgaW50NjRfdCBwb3N0VXM7CisKKyAgc3RhdHVzID0gbU1hbmFnZXItPmFsbG9jYXRlKG1Db25uZWN0aW9uSWQsIHZlY1BhcmFtcywgJmFsbG9jSGFuZGxlLCAmc2J1ZmZlcik7CisgIEFTU0VSVF9UUlVFKHN0YXR1cyA9PSBSZXN1bHRTdGF0dXM6Ok9LKTsKKyAgQVNTRVJUX1RSVUUoVGVzdEJ1ZmZlclBvb2xBbGxvY2F0b3I6OkZpbGwoYWxsb2NIYW5kbGUsIDB4NzcpKTsKKyAgc3RhdHVzID0gbU1hbmFnZXItPnBvc3RTZW5kKG1SZWNlaXZlcklkLCBzYnVmZmVyLCAmdHJhbnNhY3Rpb25JZCwgJnBvc3RVcyk7CisgIEFTU0VSVF9UUlVFKHN0YXR1cyA9PSBSZXN1bHRTdGF0dXM6Ok9LKTsKKyAgc3RhdHVzID0gbU1hbmFnZXItPnJlY2VpdmUobVJlY2VpdmVySWQsIHRyYW5zYWN0aW9uSWQsIHNidWZmZXItPm1JZCwgcG9zdFVzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmcmVjdkhhbmRsZSwgJnJidWZmZXIpOworICBFWFBFQ1RfVFJVRShzdGF0dXMgPT0gUmVzdWx0U3RhdHVzOjpPSyk7CisgIEFTU0VSVF9UUlVFKFRlc3RCdWZmZXJQb29sQWxsb2NhdG9yOjpWZXJpZnkocmVjdkhhbmRsZSwgMHg3NykpOworfQorCit9ICAvLyBhbm9ueW1vdXMgbmFtZXNwYWNlCisKK2ludCBtYWluKGludCBhcmdjLCBjaGFyKiogYXJndikgeworICA6OnRlc3Rpbmc6OkluaXRHb29nbGVUZXN0KCZhcmdjLCBhcmd2KTsKKyAgaW50IHN0YXR1cyA9IFJVTl9BTExfVEVTVFMoKTsKKyAgTE9HKElORk8pIDw8ICJUZXN0IHJlc3VsdCA9ICIgPDwgc3RhdHVzOworICByZXR1cm4gc3RhdHVzOworfQpkaWZmIC0tZ2l0IGEvbWVkaWEvY29kZWMyL0FuZHJvaWQubWsgYi9tZWRpYS9jb2RlYzIvQW5kcm9pZC5tawpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44MmQ3MzlmCi0tLSAvZGV2L251bGwKKysrIGIvbWVkaWEvY29kZWMyL0FuZHJvaWQubWsKQEAgLTAsMCArMSw0OCBAQAorIyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorIyBET0NVTUVOVEFUSU9OIEdFTkVSQVRJT04KKyMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KK0MyX1JPT1QgOj0gJChjYWxsIG15LWRpcikKKworQzJfRE9DU19ST09UIDo9ICQoT1VUX0RJUikvdGFyZ2V0L2NvbW1vbi9kb2NzL2NvZGVjMgorCitDMl9PVVRfVEVNUCA6PSAkKFBST0RVQ1RfT1VUKS9nZW4vRVRDL0NvZGVjMi1kb2NzX2ludGVybWVkaWF0ZXMKKworQzJfRE9YWSA6PSAkKG9yICQoc2hlbGwgY29tbWFuZCAtdiBkb3h5Z2VuKSxcCisJCSQoc2hlbGwgY29tbWFuZCAtdiAvQXBwbGljYXRpb25zL0RveHlnZW4uYXBwL0NvbnRlbnRzL1Jlc291cmNlcy9kb3h5Z2VuKSkKKworLlBIT05ZOiBjaGVjay1kb3h5Z2VuCitjaGVjay1kb3h5Z2VuOgoraWZuZGVmIEMyX0RPWFkKKwkkKGVycm9yICdkb3h5Z2VuIGlzIG5vdCBhdmFpbGFibGUnKQorZW5kaWYKKworJChDMl9PVVRfVEVNUCkvZG94eS1hcGkuY29uZmlnOiAkKEMyX1JPT1QpL2RvY3MvZG94eWdlbi5jb25maWcKKwkjIG9ubHkgZG9jdW1lbnQgaW5jbHVkZSBkaXJlY3RvcnksIG5vIGludGVybmFsIHNlY3Rpb25zCisJc2VkICdzL1woXklOUFVUICo9LipcKS9cMWluY2x1ZGVcLy87IFwKKwlzL1woXklOVEVSTkFMX0RPQ1MgKj0gKlwpLiovXDFOTy87IFwKKwlzL1woXkVOQUJMRURfU0VDVElPTlMgKj0uKlwpSU5URVJOQUxcKC4qXCkuKi9cMVwyLzsgXAorCXM6XCheT1VUUFVUX0RJUkVDVE9SWSAqPSBcKW91dDpcMSckKE9VVF9ESVIpJzo7JyBcCisJCSQoQzJfUk9PVCkvZG9jcy9kb3h5Z2VuLmNvbmZpZyA+ICRACisKKyQoQzJfT1VUX1RFTVApL2RveHktaW50ZXJuYWwuY29uZmlnOiAkKEMyX1JPT1QpL2RvY3MvZG94eWdlbi5jb25maWcKKwlzZWQgJ3M6XCheT1VUUFVUX0RJUkVDVE9SWSAqPSBcKW91dFwoLipcKWFwaTpcMSckKE9VVF9ESVIpJ1wyaW50ZXJuYWw6OycgXAorCQkkKEMyX1JPT1QpL2RvY3MvZG94eWdlbi5jb25maWcgPiAkQAorCisuUEhPTlk6IGRvY3MtYXBpCitkb2NzLWFwaTogJChDMl9PVVRfVEVNUCkvZG94eS1hcGkuY29uZmlnIGNoZWNrLWRveHlnZW4KKwllY2hvIEFQSSBkb2NzIGFyZSBidWlsZGluZyBpbiAkKEMyX0RPQ1NfUk9PVCkvYXBpCisJcm0gLXJmICQoQzJfRE9DU19ST09UKS9hcGkKKwlta2RpciAtcCAkKEMyX0RPQ1NfUk9PVCkvYXBpCisJJChDMl9ET1hZKSAkKEMyX09VVF9URU1QKS9kb3h5LWFwaS5jb25maWcKKworLlBIT05ZOiBkb2NzLWludGVybmFsCitkb2NzLWludGVybmFsOiAkKEMyX09VVF9URU1QKS9kb3h5LWludGVybmFsLmNvbmZpZyBjaGVjay1kb3h5Z2VuCisJZWNobyBJbnRlcm5hbCBkb2NzIGFyZSBidWlsZGluZyBpbiAkKEMyX0RPQ1NfUk9PVCkvaW50ZXJuYWwKKwlybSAtcmYgJChDMl9ET0NTX1JPT1QpL2ludGVybmFsCisJbWtkaXIgLXAgJChDMl9ET0NTX1JPT1QpL2ludGVybmFsCisJJChDMl9ET1hZKSAkKEMyX09VVF9URU1QKS9kb3h5LWludGVybmFsLmNvbmZpZworCisuUEhPTlk6IGRvY3MtYWxsCitkb2NzLWFsbDogZG9jcy1hcGkgZG9jcy1pbnRlcm5hbAorCitpbmNsdWRlICQoY2FsbCBhbGwtbWFrZWZpbGVzLXVuZGVyLCQoY2FsbCBteS1kaXIpKQpkaWZmIC0tZ2l0IGEvbWVkaWEvY29kZWMyL2NvbXBvbmVudHMvYWFjL0FuZHJvaWQuYnAgYi9tZWRpYS9jb2RlYzIvY29tcG9uZW50cy9hYWMvQW5kcm9pZC5icApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45ZWNhNTg1Ci0tLSAvZGV2L251bGwKKysrIGIvbWVkaWEvY29kZWMyL2NvbXBvbmVudHMvYWFjL0FuZHJvaWQuYnAKQEAgLTAsMCArMSwzMCBAQAorY2NfbGlicmFyeV9zaGFyZWQgeworICAgIG5hbWU6ICJsaWJjb2RlYzJfc29mdF9hYWNkZWMiLAorICAgIGRlZmF1bHRzOiBbCisgICAgICAgICJsaWJjb2RlYzJfc29mdC1kZWZhdWx0cyIsCisgICAgICAgICJsaWJjb2RlYzJfc29mdF9zYW5pdGl6ZV9hbGwtZGVmYXVsdHMiLAorICAgIF0sCisKKyAgICBzcmNzOiBbCisgICAgICAgICJDMlNvZnRBYWNEZWMuY3BwIiwKKyAgICAgICAgIkRyY1ByZXNNb2RlV3JhcC5jcHAiLAorICAgIF0sCisKKyAgICBzdGF0aWNfbGliczogWworICAgICAgICAibGliRnJhdW5ob2ZlckFBQyIsCisgICAgXSwKK30KKworY2NfbGlicmFyeV9zaGFyZWQgeworICAgIG5hbWU6ICJsaWJjb2RlYzJfc29mdF9hYWNlbmMiLAorICAgIGRlZmF1bHRzOiBbCisgICAgICAgICJsaWJjb2RlYzJfc29mdC1kZWZhdWx0cyIsCisgICAgICAgICJsaWJjb2RlYzJfc29mdF9zYW5pdGl6ZV9hbGwtZGVmYXVsdHMiLAorICAgIF0sCisKKyAgICBzcmNzOiBbIkMyU29mdEFhY0VuYy5jcHAiXSwKKworICAgIHN0YXRpY19saWJzOiBbCisgICAgICAgICJsaWJGcmF1bmhvZmVyQUFDIiwKKyAgICBdLAorfQpkaWZmIC0tZ2l0IGEvbWVkaWEvY29kZWMyL2NvbXBvbmVudHMvYWFjL0MyU29mdEFhY0RlYy5jcHAgYi9tZWRpYS9jb2RlYzIvY29tcG9uZW50cy9hYWMvQzJTb2Z0QWFjRGVjLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jN2M4NDQyCi0tLSAvZGV2L251bGwKKysrIGIvbWVkaWEvY29kZWMyL2NvbXBvbmVudHMvYWFjL0MyU29mdEFhY0RlYy5jcHAKQEAgLTAsMCArMSw5NDEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTcgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworCisvLyNkZWZpbmUgTE9HX05ERUJVRyAwCisjZGVmaW5lIExPR19UQUcgIkMyU29mdEFhY0RlYyIKKyNpbmNsdWRlIDxsb2cvbG9nLmg+CisKKyNpbmNsdWRlIDxpbnR0eXBlcy5oPgorI2luY2x1ZGUgPG1hdGguaD4KKyNpbmNsdWRlIDxudW1lcmljPgorCisjaW5jbHVkZSA8Y3V0aWxzL3Byb3BlcnRpZXMuaD4KKyNpbmNsdWRlIDxtZWRpYS9zdGFnZWZyaWdodC9mb3VuZGF0aW9uL01lZGlhRGVmcy5oPgorI2luY2x1ZGUgPG1lZGlhL3N0YWdlZnJpZ2h0L2ZvdW5kYXRpb24vaGV4ZHVtcC5oPgorI2luY2x1ZGUgPG1lZGlhL3N0YWdlZnJpZ2h0L01lZGlhRXJyb3JzLmg+CisjaW5jbHVkZSA8dXRpbHMvbWlzYy5oPgorCisjaW5jbHVkZSA8QzJQbGF0Zm9ybVN1cHBvcnQuaD4KKyNpbmNsdWRlIDxTaW1wbGVDMkludGVyZmFjZS5oPgorCisjaW5jbHVkZSAiQzJTb2Z0QWFjRGVjLmgiCisKKyNkZWZpbmUgRklMRVJFQURfTUFYX0xBWUVSUyAyCisKKyNkZWZpbmUgRFJDX0RFRkFVTFRfTU9CSUxFX1JFRl9MRVZFTCAtMTYuMCAgLyogNjQqLTAuMjVkQiA9IC0xNiBkQiBiZWxvdyBmdWxsIHNjYWxlIGZvciBtb2JpbGUgY29uZiAqLworI2RlZmluZSBEUkNfREVGQVVMVF9NT0JJTEVfRFJDX0NVVCAgIDEuMCAvKiBtYXhpbXVtIGNvbXByZXNzaW9uIG9mIGR5bmFtaWMgcmFuZ2UgZm9yIG1vYmlsZSBjb25mICovCisjZGVmaW5lIERSQ19ERUZBVUxUX01PQklMRV9EUkNfQk9PU1QgMS4wIC8qIG1heGltdW0gY29tcHJlc3Npb24gb2YgZHluYW1pYyByYW5nZSBmb3IgbW9iaWxlIGNvbmYgKi8KKyNkZWZpbmUgRFJDX0RFRkFVTFRfTU9CSUxFX0RSQ19IRUFWWSBDMkNvbmZpZzo6RFJDX0NPTVBSRVNTSU9OX0hFQVZZICAgLyogc3dpdGNoIGZvciBoZWF2eSBjb21wcmVzc2lvbiBmb3IgbW9iaWxlIGNvbmYgKi8KKyNkZWZpbmUgRFJDX0RFRkFVTFRfTU9CSUxFX0RSQ19FRkZFQ1QgMyAgLyogTVBFRy1EIERSQyBlZmZlY3QgdHlwZTsgMyA9PiBMaW1pdGVkIHBsYXliYWNrIHJhbmdlICovCisjZGVmaW5lIERSQ19ERUZBVUxUX01PQklMRV9FTkNfTEVWRUwgKDAuMjUpIC8qIGVuY29kZXIgdGFyZ2V0IGxldmVsOyAtMSA9PiB0aGUgdmFsdWUgaXMgdW5rbm93biwgb3RoZXJ3aXNlIGRCIHN0ZXAgdmFsdWUgKGUuZy4gNjQgZm9yIC0xNiBkQikgKi8KKyNkZWZpbmUgTUFYX0NIQU5ORUxfQ09VTlQgICAgICAgICAgICA4ICAvKiBtYXhpbXVtIG51bWJlciBvZiBhdWRpbyBjaGFubmVscyB0aGF0IGNhbiBiZSBkZWNvZGVkICovCisvLyBuYW1lcyBvZiBwcm9wZXJ0aWVzIHRoYXQgY2FuIGJlIHVzZWQgdG8gb3ZlcnJpZGUgdGhlIGRlZmF1bHQgRFJDIHNldHRpbmdzCisjZGVmaW5lIFBST1BfRFJDX09WRVJSSURFX1JFRl9MRVZFTCAgImFhY19kcmNfcmVmZXJlbmNlX2xldmVsIgorI2RlZmluZSBQUk9QX0RSQ19PVkVSUklERV9DVVQgICAgICAgICJhYWNfZHJjX2N1dCIKKyNkZWZpbmUgUFJPUF9EUkNfT1ZFUlJJREVfQk9PU1QgICAgICAiYWFjX2RyY19ib29zdCIKKyNkZWZpbmUgUFJPUF9EUkNfT1ZFUlJJREVfSEVBVlkgICAgICAiYWFjX2RyY19oZWF2eSIKKyNkZWZpbmUgUFJPUF9EUkNfT1ZFUlJJREVfRU5DX0xFVkVMICJhYWNfZHJjX2VuY190YXJnZXRfbGV2ZWwiCisjZGVmaW5lIFBST1BfRFJDX09WRVJSSURFX0VGRkVDVCAgICAgInJvLmFhY19kcmNfZWZmZWN0X3R5cGUiCisKK25hbWVzcGFjZSBhbmRyb2lkIHsKKworY2xhc3MgQzJTb2Z0QWFjRGVjOjpJbnRmSW1wbCA6IHB1YmxpYyBDMkludGVyZmFjZUhlbHBlciB7CitwdWJsaWM6CisgICAgZXhwbGljaXQgSW50ZkltcGwoY29uc3Qgc3RkOjpzaGFyZWRfcHRyPEMyUmVmbGVjdG9ySGVscGVyPiAmaGVscGVyKQorICAgICAgICA6IEMySW50ZXJmYWNlSGVscGVyKGhlbHBlcikgeworCisgICAgICAgIHNldERlcml2ZWRJbnN0YW5jZSh0aGlzKTsKKworICAgICAgICBhZGRQYXJhbWV0ZXIoCisgICAgICAgICAgICAgICAgRGVmaW5lUGFyYW0obUlucHV0Rm9ybWF0LCBDMl9OQU1FX0lOUFVUX1NUUkVBTV9GT1JNQVRfU0VUVElORykKKyAgICAgICAgICAgICAgICAud2l0aENvbnN0VmFsdWUobmV3IEMyU3RyZWFtRm9ybWF0Q29uZmlnOjppbnB1dCgwdSwgQzJGb3JtYXRDb21wcmVzc2VkKSkKKyAgICAgICAgICAgICAgICAuYnVpbGQoKSk7CisKKyAgICAgICAgYWRkUGFyYW1ldGVyKAorICAgICAgICAgICAgICAgIERlZmluZVBhcmFtKG1PdXRwdXRGb3JtYXQsIEMyX05BTUVfT1VUUFVUX1NUUkVBTV9GT1JNQVRfU0VUVElORykKKyAgICAgICAgICAgICAgICAud2l0aENvbnN0VmFsdWUobmV3IEMyU3RyZWFtRm9ybWF0Q29uZmlnOjpvdXRwdXQoMHUsIEMyRm9ybWF0QXVkaW8pKQorICAgICAgICAgICAgICAgIC5idWlsZCgpKTsKKworICAgICAgICBhZGRQYXJhbWV0ZXIoCisgICAgICAgICAgICAgICAgRGVmaW5lUGFyYW0obUlucHV0TWVkaWFUeXBlLCBDMl9OQU1FX0lOUFVUX1BPUlRfTUlNRV9TRVRUSU5HKQorICAgICAgICAgICAgICAgIC53aXRoQ29uc3RWYWx1ZShBbGxvY1NoYXJlZFN0cmluZzxDMlBvcnRNaW1lQ29uZmlnOjppbnB1dD4oCisgICAgICAgICAgICAgICAgICAgICAgICBNRURJQV9NSU1FVFlQRV9BVURJT19BQUMpKQorICAgICAgICAgICAgICAgIC5idWlsZCgpKTsKKworICAgICAgICBhZGRQYXJhbWV0ZXIoCisgICAgICAgICAgICAgICAgRGVmaW5lUGFyYW0obU91dHB1dE1lZGlhVHlwZSwgQzJfTkFNRV9PVVRQVVRfUE9SVF9NSU1FX1NFVFRJTkcpCisgICAgICAgICAgICAgICAgLndpdGhDb25zdFZhbHVlKEFsbG9jU2hhcmVkU3RyaW5nPEMyUG9ydE1pbWVDb25maWc6Om91dHB1dD4oCisgICAgICAgICAgICAgICAgICAgICAgICBNRURJQV9NSU1FVFlQRV9BVURJT19SQVcpKQorICAgICAgICAgICAgICAgIC5idWlsZCgpKTsKKworICAgICAgICBhZGRQYXJhbWV0ZXIoCisgICAgICAgICAgICAgICAgRGVmaW5lUGFyYW0obVNhbXBsZVJhdGUsIEMyX05BTUVfU1RSRUFNX1NBTVBMRV9SQVRFX1NFVFRJTkcpCisgICAgICAgICAgICAgICAgLndpdGhEZWZhdWx0KG5ldyBDMlN0cmVhbVNhbXBsZVJhdGVJbmZvOjpvdXRwdXQoMHUsIDQ0MTAwKSkKKyAgICAgICAgICAgICAgICAud2l0aEZpZWxkcyh7QzJGKG1TYW1wbGVSYXRlLCB2YWx1ZSkub25lT2YoeworICAgICAgICAgICAgICAgICAgICA3MzUwLCA4MDAwLCAxMTAyNSwgMTIwMDAsIDE2MDAwLCAyMjA1MCwgMjQwMDAsIDMyMDAwLCA0NDEwMCwgNDgwMDAKKyAgICAgICAgICAgICAgICB9KX0pCisgICAgICAgICAgICAgICAgLndpdGhTZXR0ZXIoU2V0dGVyPGRlY2x0eXBlKCptU2FtcGxlUmF0ZSk+OjpOb25TdHJpY3RWYWx1ZVdpdGhOb0RlcHMpCisgICAgICAgICAgICAgICAgLmJ1aWxkKCkpOworCisgICAgICAgIGFkZFBhcmFtZXRlcigKKyAgICAgICAgICAgICAgICBEZWZpbmVQYXJhbShtQ2hhbm5lbENvdW50LCBDMl9OQU1FX1NUUkVBTV9DSEFOTkVMX0NPVU5UX1NFVFRJTkcpCisgICAgICAgICAgICAgICAgLndpdGhEZWZhdWx0KG5ldyBDMlN0cmVhbUNoYW5uZWxDb3VudEluZm86Om91dHB1dCgwdSwgMSkpCisgICAgICAgICAgICAgICAgLndpdGhGaWVsZHMoe0MyRihtQ2hhbm5lbENvdW50LCB2YWx1ZSkuaW5SYW5nZSgxLCA4KX0pCisgICAgICAgICAgICAgICAgLndpdGhTZXR0ZXIoU2V0dGVyPGRlY2x0eXBlKCptQ2hhbm5lbENvdW50KT46OlN0cmljdFZhbHVlV2l0aE5vRGVwcykKKyAgICAgICAgICAgICAgICAuYnVpbGQoKSk7CisKKyAgICAgICAgYWRkUGFyYW1ldGVyKAorICAgICAgICAgICAgICAgIERlZmluZVBhcmFtKG1CaXRyYXRlLCBDMl9OQU1FX1NUUkVBTV9CSVRSQVRFX1NFVFRJTkcpCisgICAgICAgICAgICAgICAgLndpdGhEZWZhdWx0KG5ldyBDMkJpdHJhdGVUdW5pbmc6OmlucHV0KDB1LCA2NDAwMCkpCisgICAgICAgICAgICAgICAgLndpdGhGaWVsZHMoe0MyRihtQml0cmF0ZSwgdmFsdWUpLmluUmFuZ2UoODAwMCwgOTYwMDAwKX0pCisgICAgICAgICAgICAgICAgLndpdGhTZXR0ZXIoU2V0dGVyPGRlY2x0eXBlKCptQml0cmF0ZSk+OjpOb25TdHJpY3RWYWx1ZVdpdGhOb0RlcHMpCisgICAgICAgICAgICAgICAgLmJ1aWxkKCkpOworCisgICAgICAgIGFkZFBhcmFtZXRlcigKKyAgICAgICAgICAgICAgICBEZWZpbmVQYXJhbShtSW5wdXRNYXhCdWZTaXplLCBDMl9QQVJBTUtFWV9JTlBVVF9NQVhfQlVGRkVSX1NJWkUpCisgICAgICAgICAgICAgICAgLndpdGhDb25zdFZhbHVlKG5ldyBDMlN0cmVhbU1heEJ1ZmZlclNpemVJbmZvOjppbnB1dCgwdSwgODE5MikpCisgICAgICAgICAgICAgICAgLmJ1aWxkKCkpOworCisgICAgICAgIGFkZFBhcmFtZXRlcigKKyAgICAgICAgICAgICAgICBEZWZpbmVQYXJhbShtQWFjRm9ybWF0LCBDMl9OQU1FX1NUUkVBTV9BQUNfRk9STUFUX1NFVFRJTkcpCisgICAgICAgICAgICAgICAgLndpdGhEZWZhdWx0KG5ldyBDMlN0cmVhbUFhY0Zvcm1hdEluZm86OmlucHV0KDB1LCBDMkFhY1N0cmVhbUZvcm1hdFJhdykpCisgICAgICAgICAgICAgICAgLndpdGhGaWVsZHMoe0MyRihtQWFjRm9ybWF0LCB2YWx1ZSkub25lT2YoeworICAgICAgICAgICAgICAgICAgICBDMkFhY1N0cmVhbUZvcm1hdFJhdywgQzJBYWNTdHJlYW1Gb3JtYXRBZHRzCisgICAgICAgICAgICAgICAgfSl9KQorICAgICAgICAgICAgICAgIC53aXRoU2V0dGVyKFNldHRlcjxkZWNsdHlwZSgqbUFhY0Zvcm1hdCk+OjpTdHJpY3RWYWx1ZVdpdGhOb0RlcHMpCisgICAgICAgICAgICAgICAgLmJ1aWxkKCkpOworCisgICAgICAgIGFkZFBhcmFtZXRlcigKKyAgICAgICAgICAgICAgICBEZWZpbmVQYXJhbShtUHJvZmlsZUxldmVsLCBDMl9QQVJBTUtFWV9QUk9GSUxFX0xFVkVMKQorICAgICAgICAgICAgICAgIC53aXRoRGVmYXVsdChuZXcgQzJTdHJlYW1Qcm9maWxlTGV2ZWxJbmZvOjppbnB1dCgwdSwKKyAgICAgICAgICAgICAgICAgICAgICAgIEMyQ29uZmlnOjpQUk9GSUxFX0FBQ19MQywgQzJDb25maWc6OkxFVkVMX1VOVVNFRCkpCisgICAgICAgICAgICAgICAgLndpdGhGaWVsZHMoeworICAgICAgICAgICAgICAgICAgICBDMkYobVByb2ZpbGVMZXZlbCwgcHJvZmlsZSkub25lT2YoeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIEMyQ29uZmlnOjpQUk9GSUxFX0FBQ19MQywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBDMkNvbmZpZzo6UFJPRklMRV9BQUNfSEUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgQzJDb25maWc6OlBST0ZJTEVfQUFDX0hFX1BTLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIEMyQ29uZmlnOjpQUk9GSUxFX0FBQ19MRCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBDMkNvbmZpZzo6UFJPRklMRV9BQUNfRUxELAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIEMyQ29uZmlnOjpQUk9GSUxFX0FBQ19FUl9TQ0FMQUJMRSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBDMkNvbmZpZzo6UFJPRklMRV9BQUNfWEhFfSksCisgICAgICAgICAgICAgICAgICAgIEMyRihtUHJvZmlsZUxldmVsLCBsZXZlbCkub25lT2YoeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIEMyQ29uZmlnOjpMRVZFTF9VTlVTRUQKKyAgICAgICAgICAgICAgICAgICAgfSkKKyAgICAgICAgICAgICAgICB9KQorICAgICAgICAgICAgICAgIC53aXRoU2V0dGVyKFByb2ZpbGVMZXZlbFNldHRlcikKKyAgICAgICAgICAgICAgICAuYnVpbGQoKSk7CisKKyAgICAgICAgYWRkUGFyYW1ldGVyKAorICAgICAgICAgICAgICAgIERlZmluZVBhcmFtKG1EcmNDb21wcmVzc01vZGUsIEMyX1BBUkFNS0VZX0RSQ19DT01QUkVTU0lPTl9NT0RFKQorICAgICAgICAgICAgICAgIC53aXRoRGVmYXVsdChuZXcgQzJTdHJlYW1EcmNDb21wcmVzc2lvbk1vZGVUdW5pbmc6OmlucHV0KDB1LCBDMkNvbmZpZzo6RFJDX0NPTVBSRVNTSU9OX0hFQVZZKSkKKyAgICAgICAgICAgICAgICAud2l0aEZpZWxkcyh7CisgICAgICAgICAgICAgICAgICAgIEMyRihtRHJjQ29tcHJlc3NNb2RlLCB2YWx1ZSkub25lT2YoeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIEMyQ29uZmlnOjpEUkNfQ09NUFJFU1NJT05fT0RNX0RFRkFVTFQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgQzJDb25maWc6OkRSQ19DT01QUkVTU0lPTl9OT05FLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIEMyQ29uZmlnOjpEUkNfQ09NUFJFU1NJT05fTElHSFQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgQzJDb25maWc6OkRSQ19DT01QUkVTU0lPTl9IRUFWWX0pCisgICAgICAgICAgICAgICAgfSkKKyAgICAgICAgICAgICAgICAud2l0aFNldHRlcihTZXR0ZXI8ZGVjbHR5cGUoKm1EcmNDb21wcmVzc01vZGUpPjo6U3RyaWN0VmFsdWVXaXRoTm9EZXBzKQorICAgICAgICAgICAgICAgIC5idWlsZCgpKTsKKworICAgICAgICBhZGRQYXJhbWV0ZXIoCisgICAgICAgICAgICAgICAgRGVmaW5lUGFyYW0obURyY1RhcmdldFJlZkxldmVsLCBDMl9QQVJBTUtFWV9EUkNfVEFSR0VUX1JFRkVSRU5DRV9MRVZFTCkKKyAgICAgICAgICAgICAgICAud2l0aERlZmF1bHQobmV3IEMyU3RyZWFtRHJjVGFyZ2V0UmVmZXJlbmNlTGV2ZWxUdW5pbmc6OmlucHV0KDB1LCBEUkNfREVGQVVMVF9NT0JJTEVfUkVGX0xFVkVMKSkKKyAgICAgICAgICAgICAgICAud2l0aEZpZWxkcyh7QzJGKG1EcmNUYXJnZXRSZWZMZXZlbCwgdmFsdWUpLmluUmFuZ2UoLTMxLjc1LCAwLjI1KX0pCisgICAgICAgICAgICAgICAgLndpdGhTZXR0ZXIoU2V0dGVyPGRlY2x0eXBlKCptRHJjVGFyZ2V0UmVmTGV2ZWwpPjo6U3RyaWN0VmFsdWVXaXRoTm9EZXBzKQorICAgICAgICAgICAgICAgIC5idWlsZCgpKTsKKworICAgICAgICBhZGRQYXJhbWV0ZXIoCisgICAgICAgICAgICAgICAgRGVmaW5lUGFyYW0obURyY0VuY1RhcmdldExldmVsLCBDMl9QQVJBTUtFWV9EUkNfRU5DT0RFRF9UQVJHRVRfTEVWRUwpCisgICAgICAgICAgICAgICAgLndpdGhEZWZhdWx0KG5ldyBDMlN0cmVhbURyY0VuY29kZWRUYXJnZXRMZXZlbFR1bmluZzo6aW5wdXQoMHUsIERSQ19ERUZBVUxUX01PQklMRV9FTkNfTEVWRUwpKQorICAgICAgICAgICAgICAgIC53aXRoRmllbGRzKHtDMkYobURyY0VuY1RhcmdldExldmVsLCB2YWx1ZSkuaW5SYW5nZSgtMzEuNzUsIDAuMjUpfSkKKyAgICAgICAgICAgICAgICAud2l0aFNldHRlcihTZXR0ZXI8ZGVjbHR5cGUoKm1EcmNFbmNUYXJnZXRMZXZlbCk+OjpTdHJpY3RWYWx1ZVdpdGhOb0RlcHMpCisgICAgICAgICAgICAgICAgLmJ1aWxkKCkpOworCisgICAgICAgIGFkZFBhcmFtZXRlcigKKyAgICAgICAgICAgICAgICBEZWZpbmVQYXJhbShtRHJjQm9vc3RGYWN0b3IsIEMyX1BBUkFNS0VZX0RSQ19CT09TVF9GQUNUT1IpCisgICAgICAgICAgICAgICAgLndpdGhEZWZhdWx0KG5ldyBDMlN0cmVhbURyY0Jvb3N0RmFjdG9yVHVuaW5nOjppbnB1dCgwdSwgRFJDX0RFRkFVTFRfTU9CSUxFX0RSQ19CT09TVCkpCisgICAgICAgICAgICAgICAgLndpdGhGaWVsZHMoe0MyRihtRHJjQm9vc3RGYWN0b3IsIHZhbHVlKS5pblJhbmdlKDAsIDEuKX0pCisgICAgICAgICAgICAgICAgLndpdGhTZXR0ZXIoU2V0dGVyPGRlY2x0eXBlKCptRHJjQm9vc3RGYWN0b3IpPjo6U3RyaWN0VmFsdWVXaXRoTm9EZXBzKQorICAgICAgICAgICAgICAgIC5idWlsZCgpKTsKKworICAgICAgICBhZGRQYXJhbWV0ZXIoCisgICAgICAgICAgICAgICAgRGVmaW5lUGFyYW0obURyY0F0dGVudWF0aW9uRmFjdG9yLCBDMl9QQVJBTUtFWV9EUkNfQVRURU5VQVRJT05fRkFDVE9SKQorICAgICAgICAgICAgICAgIC53aXRoRGVmYXVsdChuZXcgQzJTdHJlYW1EcmNBdHRlbnVhdGlvbkZhY3RvclR1bmluZzo6aW5wdXQoMHUsIERSQ19ERUZBVUxUX01PQklMRV9EUkNfQ1VUKSkKKyAgICAgICAgICAgICAgICAud2l0aEZpZWxkcyh7QzJGKG1EcmNBdHRlbnVhdGlvbkZhY3RvciwgdmFsdWUpLmluUmFuZ2UoMCwgMS4pfSkKKyAgICAgICAgICAgICAgICAud2l0aFNldHRlcihTZXR0ZXI8ZGVjbHR5cGUoKm1EcmNBdHRlbnVhdGlvbkZhY3Rvcik+OjpTdHJpY3RWYWx1ZVdpdGhOb0RlcHMpCisgICAgICAgICAgICAgICAgLmJ1aWxkKCkpOworCisgICAgICAgIGFkZFBhcmFtZXRlcigKKyAgICAgICAgICAgICAgICBEZWZpbmVQYXJhbShtRHJjRWZmZWN0VHlwZSwgQzJfUEFSQU1LRVlfRFJDX0VGRkVDVF9UWVBFKQorICAgICAgICAgICAgICAgIC53aXRoRGVmYXVsdChuZXcgQzJTdHJlYW1EcmNFZmZlY3RUeXBlVHVuaW5nOjppbnB1dCgwdSwgQzJDb25maWc6OkRSQ19FRkZFQ1RfTElNSVRFRF9QTEFZQkFDS19SQU5HRSkpCisgICAgICAgICAgICAgICAgLndpdGhGaWVsZHMoeworICAgICAgICAgICAgICAgICAgICBDMkYobURyY0VmZmVjdFR5cGUsIHZhbHVlKS5vbmVPZih7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgQzJDb25maWc6OkRSQ19FRkZFQ1RfT0RNX0RFRkFVTFQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgQzJDb25maWc6OkRSQ19FRkZFQ1RfT0ZGLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIEMyQ29uZmlnOjpEUkNfRUZGRUNUX05PTkUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgQzJDb25maWc6OkRSQ19FRkZFQ1RfTEFURV9OSUdIVCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBDMkNvbmZpZzo6RFJDX0VGRkVDVF9OT0lTWV9FTlZJUk9OTUVOVCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBDMkNvbmZpZzo6RFJDX0VGRkVDVF9MSU1JVEVEX1BMQVlCQUNLX1JBTkdFLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIEMyQ29uZmlnOjpEUkNfRUZGRUNUX0xPV19QTEFZQkFDS19MRVZFTCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBDMkNvbmZpZzo6RFJDX0VGRkVDVF9ESUFMT0dfRU5IQU5DRU1FTlQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgQzJDb25maWc6OkRSQ19FRkZFQ1RfR0VORVJBTF9DT01QUkVTU0lPTn0pCisgICAgICAgICAgICAgICAgfSkKKyAgICAgICAgICAgICAgICAud2l0aFNldHRlcihTZXR0ZXI8ZGVjbHR5cGUoKm1EcmNFZmZlY3RUeXBlKT46OlN0cmljdFZhbHVlV2l0aE5vRGVwcykKKyAgICAgICAgICAgICAgICAuYnVpbGQoKSk7CisgICAgfQorCisgICAgYm9vbCBpc0FkdHMoKSBjb25zdCB7IHJldHVybiBtQWFjRm9ybWF0LT52YWx1ZSA9PSBDMkFhY1N0cmVhbUZvcm1hdEFkdHM7IH0KKyAgICBzdGF0aWMgQzJSIFByb2ZpbGVMZXZlbFNldHRlcihib29sIG1heUJsb2NrLCBDMlA8QzJTdHJlYW1Qcm9maWxlTGV2ZWxJbmZvOjppbnB1dD4gJm1lKSB7CisgICAgICAgICh2b2lkKW1heUJsb2NrOworICAgICAgICAodm9pZCltZTsgIC8vIFRPRE86IHZhbGlkYXRlCisgICAgICAgIHJldHVybiBDMlI6Ok9rKCk7CisgICAgfQorICAgIGludDMyX3QgZ2V0RHJjQ29tcHJlc3NNb2RlKCkgY29uc3QgeyByZXR1cm4gbURyY0NvbXByZXNzTW9kZS0+dmFsdWUgPT0gQzJDb25maWc6OkRSQ19DT01QUkVTU0lPTl9IRUFWWSA/IDEgOiAwOyB9CisgICAgaW50MzJfdCBnZXREcmNUYXJnZXRSZWZMZXZlbCgpIGNvbnN0IHsgcmV0dXJuIChtRHJjVGFyZ2V0UmVmTGV2ZWwtPnZhbHVlIDw9IDAgPyAtbURyY1RhcmdldFJlZkxldmVsLT52YWx1ZSAqIDQuICsgMC41IDogLTEpOyB9CisgICAgaW50MzJfdCBnZXREcmNFbmNUYXJnZXRMZXZlbCgpIGNvbnN0IHsgcmV0dXJuIChtRHJjRW5jVGFyZ2V0TGV2ZWwtPnZhbHVlIDw9IDAgPyAtbURyY0VuY1RhcmdldExldmVsLT52YWx1ZSAqIDQuICsgMC41IDogLTEpOyB9CisgICAgaW50MzJfdCBnZXREcmNCb29zdEZhY3RvcigpIGNvbnN0IHsgcmV0dXJuIG1EcmNCb29zdEZhY3Rvci0+dmFsdWUgKiAxMjcuICsgMC41OyB9CisgICAgaW50MzJfdCBnZXREcmNBdHRlbnVhdGlvbkZhY3RvcigpIGNvbnN0IHsgcmV0dXJuIG1EcmNBdHRlbnVhdGlvbkZhY3Rvci0+dmFsdWUgKiAxMjcuICsgMC41OyB9CisgICAgaW50MzJfdCBnZXREcmNFZmZlY3RUeXBlKCkgY29uc3QgeyByZXR1cm4gbURyY0VmZmVjdFR5cGUtPnZhbHVlOyB9CisKK3ByaXZhdGU6CisgICAgc3RkOjpzaGFyZWRfcHRyPEMyU3RyZWFtRm9ybWF0Q29uZmlnOjppbnB1dD4gbUlucHV0Rm9ybWF0OworICAgIHN0ZDo6c2hhcmVkX3B0cjxDMlN0cmVhbUZvcm1hdENvbmZpZzo6b3V0cHV0PiBtT3V0cHV0Rm9ybWF0OworICAgIHN0ZDo6c2hhcmVkX3B0cjxDMlBvcnRNaW1lQ29uZmlnOjppbnB1dD4gbUlucHV0TWVkaWFUeXBlOworICAgIHN0ZDo6c2hhcmVkX3B0cjxDMlBvcnRNaW1lQ29uZmlnOjpvdXRwdXQ+IG1PdXRwdXRNZWRpYVR5cGU7CisgICAgc3RkOjpzaGFyZWRfcHRyPEMyU3RyZWFtU2FtcGxlUmF0ZUluZm86Om91dHB1dD4gbVNhbXBsZVJhdGU7CisgICAgc3RkOjpzaGFyZWRfcHRyPEMyU3RyZWFtQ2hhbm5lbENvdW50SW5mbzo6b3V0cHV0PiBtQ2hhbm5lbENvdW50OworICAgIHN0ZDo6c2hhcmVkX3B0cjxDMkJpdHJhdGVUdW5pbmc6OmlucHV0PiBtQml0cmF0ZTsKKyAgICBzdGQ6OnNoYXJlZF9wdHI8QzJTdHJlYW1NYXhCdWZmZXJTaXplSW5mbzo6aW5wdXQ+IG1JbnB1dE1heEJ1ZlNpemU7CisgICAgc3RkOjpzaGFyZWRfcHRyPEMyU3RyZWFtQWFjRm9ybWF0SW5mbzo6aW5wdXQ+IG1BYWNGb3JtYXQ7CisgICAgc3RkOjpzaGFyZWRfcHRyPEMyU3RyZWFtUHJvZmlsZUxldmVsSW5mbzo6aW5wdXQ+IG1Qcm9maWxlTGV2ZWw7CisgICAgc3RkOjpzaGFyZWRfcHRyPEMyU3RyZWFtRHJjQ29tcHJlc3Npb25Nb2RlVHVuaW5nOjppbnB1dD4gbURyY0NvbXByZXNzTW9kZTsKKyAgICBzdGQ6OnNoYXJlZF9wdHI8QzJTdHJlYW1EcmNUYXJnZXRSZWZlcmVuY2VMZXZlbFR1bmluZzo6aW5wdXQ+IG1EcmNUYXJnZXRSZWZMZXZlbDsKKyAgICBzdGQ6OnNoYXJlZF9wdHI8QzJTdHJlYW1EcmNFbmNvZGVkVGFyZ2V0TGV2ZWxUdW5pbmc6OmlucHV0PiBtRHJjRW5jVGFyZ2V0TGV2ZWw7CisgICAgc3RkOjpzaGFyZWRfcHRyPEMyU3RyZWFtRHJjQm9vc3RGYWN0b3JUdW5pbmc6OmlucHV0PiBtRHJjQm9vc3RGYWN0b3I7CisgICAgc3RkOjpzaGFyZWRfcHRyPEMyU3RyZWFtRHJjQXR0ZW51YXRpb25GYWN0b3JUdW5pbmc6OmlucHV0PiBtRHJjQXR0ZW51YXRpb25GYWN0b3I7CisgICAgc3RkOjpzaGFyZWRfcHRyPEMyU3RyZWFtRHJjRWZmZWN0VHlwZVR1bmluZzo6aW5wdXQ+IG1EcmNFZmZlY3RUeXBlOworICAgIC8vIFRPRE8gQWRkIDogQzJTdHJlYW1BYWNTYnJNb2RlVHVuaW5nCit9OworCitjb25zdGV4cHIgY2hhciBDT01QT05FTlRfTkFNRVtdID0gImMyLmFuZHJvaWQuYWFjLmRlY29kZXIiOworCitDMlNvZnRBYWNEZWM6OkMyU29mdEFhY0RlYygKKyAgICAgICAgY29uc3QgY2hhciAqbmFtZSwKKyAgICAgICAgYzJfbm9kZV9pZF90IGlkLAorICAgICAgICBjb25zdCBzdGQ6OnNoYXJlZF9wdHI8SW50ZkltcGw+ICZpbnRmSW1wbCkKKyAgICA6IFNpbXBsZUMyQ29tcG9uZW50KHN0ZDo6bWFrZV9zaGFyZWQ8U2ltcGxlSW50ZXJmYWNlPEludGZJbXBsPj4obmFtZSwgaWQsIGludGZJbXBsKSksCisgICAgICBtSW50ZihpbnRmSW1wbCksCisgICAgICBtQUFDRGVjb2RlcihudWxscHRyKSwKKyAgICAgIG1TdHJlYW1JbmZvKG51bGxwdHIpLAorICAgICAgbVNpZ25hbGxlZEVycm9yKGZhbHNlKSwKKyAgICAgIG1PdXRwdXREZWxheVJpbmdCdWZmZXIobnVsbHB0cikgeworfQorCitDMlNvZnRBYWNEZWM6On5DMlNvZnRBYWNEZWMoKSB7CisgICAgb25SZWxlYXNlKCk7Cit9CisKK2MyX3N0YXR1c190IEMyU29mdEFhY0RlYzo6b25Jbml0KCkgeworICAgIHN0YXR1c190IGVyciA9IGluaXREZWNvZGVyKCk7CisgICAgcmV0dXJuIGVyciA9PSBPSyA/IEMyX09LIDogQzJfQ09SUlVQVEVEOworfQorCitjMl9zdGF0dXNfdCBDMlNvZnRBYWNEZWM6Om9uU3RvcCgpIHsKKyAgICBkcmFpbkRlY29kZXIoKTsKKyAgICAvLyByZXNldCB0aGUgImNvbmZpZ3VyZWQiIHN0YXRlCisgICAgbU91dHB1dERlbGF5Q29tcGVuc2F0ZWQgPSAwOworICAgIG1PdXRwdXREZWxheVJpbmdCdWZmZXJXcml0ZVBvcyA9IDA7CisgICAgbU91dHB1dERlbGF5UmluZ0J1ZmZlclJlYWRQb3MgPSAwOworICAgIG1PdXRwdXREZWxheVJpbmdCdWZmZXJGaWxsZWQgPSAwOworICAgIG1CdWZmZXJzSW5mby5jbGVhcigpOworCisgICAgLy8gVG8gbWFrZSB0aGUgY29kZWMgYmVoYXZlIHRoZSBzYW1lIGJlZm9yZSBhbmQgYWZ0ZXIgYSByZXNldCwgd2UgbmVlZCB0byBpbnZhbGlkYXRlIHRoZQorICAgIC8vIHN0cmVhbWluZm8gc3RydWN0LiBUaGlzIGRvZXMgdGhhdDoKKyAgICBtU3RyZWFtSW5mby0+c2FtcGxlUmF0ZSA9IDA7IC8vIFRPRE86IG1TdHJlYW1JbmZvIGlzIHJlYWQgb25seQorCisgICAgbVNpZ25hbGxlZEVycm9yID0gZmFsc2U7CisKKyAgICByZXR1cm4gQzJfT0s7Cit9CisKK3ZvaWQgQzJTb2Z0QWFjRGVjOjpvblJlc2V0KCkgeworICAgICh2b2lkKW9uU3RvcCgpOworfQorCit2b2lkIEMyU29mdEFhY0RlYzo6b25SZWxlYXNlKCkgeworICAgIGlmIChtQUFDRGVjb2RlcikgeworICAgICAgICBhYWNEZWNvZGVyX0Nsb3NlKG1BQUNEZWNvZGVyKTsKKyAgICAgICAgbUFBQ0RlY29kZXIgPSBudWxscHRyOworICAgIH0KKyAgICBpZiAobU91dHB1dERlbGF5UmluZ0J1ZmZlcikgeworICAgICAgICBkZWxldGVbXSBtT3V0cHV0RGVsYXlSaW5nQnVmZmVyOworICAgICAgICBtT3V0cHV0RGVsYXlSaW5nQnVmZmVyID0gbnVsbHB0cjsKKyAgICB9Cit9CisKK3N0YXR1c190IEMyU29mdEFhY0RlYzo6aW5pdERlY29kZXIoKSB7CisgICAgQUxPR1YoImluaXREZWNvZGVyKCkiKTsKKyAgICBzdGF0dXNfdCBzdGF0dXMgPSBVTktOT1dOX0VSUk9SOworICAgIG1BQUNEZWNvZGVyID0gYWFjRGVjb2Rlcl9PcGVuKFRUX01QNF9BRElGLCAvKiBudW0gbGF5ZXJzICovIDEpOworICAgIGlmIChtQUFDRGVjb2RlciAhPSBudWxscHRyKSB7CisgICAgICAgIG1TdHJlYW1JbmZvID0gYWFjRGVjb2Rlcl9HZXRTdHJlYW1JbmZvKG1BQUNEZWNvZGVyKTsKKyAgICAgICAgaWYgKG1TdHJlYW1JbmZvICE9IG51bGxwdHIpIHsKKyAgICAgICAgICAgIHN0YXR1cyA9IE9LOworICAgICAgICB9CisgICAgfQorCisgICAgbU91dHB1dERlbGF5Q29tcGVuc2F0ZWQgPSAwOworICAgIG1PdXRwdXREZWxheVJpbmdCdWZmZXJTaXplID0gMjA0OCAqIE1BWF9DSEFOTkVMX0NPVU5UICoga051bURlbGF5QmxvY2tzTWF4OworICAgIG1PdXRwdXREZWxheVJpbmdCdWZmZXIgPSBuZXcgc2hvcnRbbU91dHB1dERlbGF5UmluZ0J1ZmZlclNpemVdOworICAgIG1PdXRwdXREZWxheVJpbmdCdWZmZXJXcml0ZVBvcyA9IDA7CisgICAgbU91dHB1dERlbGF5UmluZ0J1ZmZlclJlYWRQb3MgPSAwOworICAgIG1PdXRwdXREZWxheVJpbmdCdWZmZXJGaWxsZWQgPSAwOworCisgICAgaWYgKG1BQUNEZWNvZGVyID09IG51bGxwdHIpIHsKKyAgICAgICAgQUxPR0UoIkFBQyBkZWNvZGVyIGlzIG51bGwuIFRPRE86IENhbiBub3QgY2FsbCBhYWNEZWNvZGVyX1NldFBhcmFtIGluIHRoZSBmb2xsb3dpbmcgY29kZSIpOworICAgIH0KKworICAgIC8vYWFjRGVjb2Rlcl9TZXRQYXJhbShtQUFDRGVjb2RlciwgQUFDX1BDTV9MSU1JVEVSX0VOQUJMRSwgMCk7CisKKyAgICAvL2luaXQgRFJDIHdyYXBwZXIKKyAgICBtRHJjV3JhcC5zZXREZWNvZGVySGFuZGxlKG1BQUNEZWNvZGVyKTsKKyAgICBtRHJjV3JhcC5zdWJtaXRTdHJlYW1EYXRhKG1TdHJlYW1JbmZvKTsKKworICAgIC8vIGZvciBzdHJlYW1zIHRoYXQgY29udGFpbiBtZXRhZGF0YSwgdXNlIHRoZSBtb2JpbGUgcHJvZmlsZSBEUkMgc2V0dGluZ3MgdW5sZXNzIG92ZXJyaWRkZW4gYnkgcGxhdGZvcm0gcHJvcGVydGllcworICAgIC8vIFRPRE86IGNoYW5nZSB0aGUgRFJDIHNldHRpbmdzIGRlcGVuZGluZyBvbiBhdWRpbyBvdXRwdXQgZGV2aWNlIHR5cGUgKEhETUksIGxvYWRzcGVha2VyLCBoZWFkcGhvbmUpCisKKyAgICAvLyAgRFJDX1BSRVNfTU9ERV9XUkFQX0RFU0lSRURfVEFSR0VUCisgICAgaW50MzJfdCB0YXJnZXRSZWZMZXZlbCA9IG1JbnRmLT5nZXREcmNUYXJnZXRSZWZMZXZlbCgpOworICAgIEFMT0dWKCJBQUMgZGVjb2RlciB1c2luZyBkZXNpcmVkIERSQyB0YXJnZXQgcmVmZXJlbmNlIGxldmVsIG9mICVkIiwgdGFyZ2V0UmVmTGV2ZWwpOworICAgIG1EcmNXcmFwLnNldFBhcmFtKERSQ19QUkVTX01PREVfV1JBUF9ERVNJUkVEX1RBUkdFVCwgKHVuc2lnbmVkKXRhcmdldFJlZkxldmVsKTsKKworICAgIC8vICBEUkNfUFJFU19NT0RFX1dSQVBfREVTSVJFRF9BVFRfRkFDVE9SCisKKyAgICBpbnQzMl90IGF0dGVudWF0aW9uRmFjdG9yID0gbUludGYtPmdldERyY0F0dGVudWF0aW9uRmFjdG9yKCk7CisgICAgQUxPR1YoIkFBQyBkZWNvZGVyIHVzaW5nIGRlc2lyZWQgRFJDIGF0dGVudWF0aW9uIGZhY3RvciBvZiAlZCIsIGF0dGVudWF0aW9uRmFjdG9yKTsKKyAgICBtRHJjV3JhcC5zZXRQYXJhbShEUkNfUFJFU19NT0RFX1dSQVBfREVTSVJFRF9BVFRfRkFDVE9SLCAodW5zaWduZWQpYXR0ZW51YXRpb25GYWN0b3IpOworCisgICAgLy8gIERSQ19QUkVTX01PREVfV1JBUF9ERVNJUkVEX0JPT1NUX0ZBQ1RPUgorICAgIGludDMyX3QgYm9vc3RGYWN0b3IgPSBtSW50Zi0+Z2V0RHJjQm9vc3RGYWN0b3IoKTsKKyAgICBBTE9HVigiQUFDIGRlY29kZXIgdXNpbmcgZGVzaXJlZCBEUkMgYm9vc3QgZmFjdG9yIG9mICVkIiwgYm9vc3RGYWN0b3IpOworICAgIG1EcmNXcmFwLnNldFBhcmFtKERSQ19QUkVTX01PREVfV1JBUF9ERVNJUkVEX0JPT1NUX0ZBQ1RPUiwgKHVuc2lnbmVkKWJvb3N0RmFjdG9yKTsKKworICAgIC8vICBEUkNfUFJFU19NT0RFX1dSQVBfREVTSVJFRF9IRUFWWQorICAgIGludDMyX3QgY29tcHJlc3NNb2RlID0gbUludGYtPmdldERyY0NvbXByZXNzTW9kZSgpOworICAgIEFMT0dWKCJBQUMgZGVjb2RlciB1c2luZyBkZXNyaWVkIERSQyBoZWF2eSBjb21wcmVzc2lvbiBzd2l0Y2ggb2YgJWQiLCBjb21wcmVzc01vZGUpOworICAgIG1EcmNXcmFwLnNldFBhcmFtKERSQ19QUkVTX01PREVfV1JBUF9ERVNJUkVEX0hFQVZZLCAodW5zaWduZWQpY29tcHJlc3NNb2RlKTsKKworICAgIC8vIERSQ19QUkVTX01PREVfV1JBUF9FTkNPREVSX1RBUkdFVAorICAgIGludDMyX3QgZW5jVGFyZ2V0TGV2ZWwgPSBtSW50Zi0+Z2V0RHJjRW5jVGFyZ2V0TGV2ZWwoKTsKKyAgICBBTE9HVigiQUFDIGRlY29kZXIgdXNpbmcgZW5jb2Rlci1zaWRlIERSQyByZWZlcmVuY2UgbGV2ZWwgb2YgJWQiLCBlbmNUYXJnZXRMZXZlbCk7CisgICAgbURyY1dyYXAuc2V0UGFyYW0oRFJDX1BSRVNfTU9ERV9XUkFQX0VOQ09ERVJfVEFSR0VULCAodW5zaWduZWQpZW5jVGFyZ2V0TGV2ZWwpOworCisgICAgLy8gQUFDX1VOSURSQ19TRVRfRUZGRUNUCisgICAgaW50MzJfdCBlZmZlY3RUeXBlID0gbUludGYtPmdldERyY0VmZmVjdFR5cGUoKTsKKyAgICBBTE9HVigiQUFDIGRlY29kZXIgdXNpbmcgTVBFRy1EIERSQyBlZmZlY3QgdHlwZSAlZCIsIGVmZmVjdFR5cGUpOworICAgIGFhY0RlY29kZXJfU2V0UGFyYW0obUFBQ0RlY29kZXIsIEFBQ19VTklEUkNfU0VUX0VGRkVDVCwgZWZmZWN0VHlwZSk7CisKKyAgICAvLyBCeSBkZWZhdWx0LCB0aGUgZGVjb2RlciBjcmVhdGVzIGEgNS4xIGNoYW5uZWwgZG93bm1peCBzaWduYWwuCisgICAgLy8gRm9yIHNldmVuIGFuZCBlaWdodCBjaGFubmVsIGlucHV0IHN0cmVhbXMsIGVuYWJsZSA2LjEgYW5kIDcuMSBjaGFubmVsIG91dHB1dAorICAgIGFhY0RlY29kZXJfU2V0UGFyYW0obUFBQ0RlY29kZXIsIEFBQ19QQ01fTUFYX09VVFBVVF9DSEFOTkVMUywgLTEpOworCisgICAgcmV0dXJuIHN0YXR1czsKK30KKworYm9vbCBDMlNvZnRBYWNEZWM6Om91dHB1dERlbGF5UmluZ0J1ZmZlclB1dFNhbXBsZXMoSU5UX1BDTSAqc2FtcGxlcywgaW50MzJfdCBudW1TYW1wbGVzKSB7CisgICAgaWYgKG51bVNhbXBsZXMgPT0gMCkgeworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgaWYgKG91dHB1dERlbGF5UmluZ0J1ZmZlclNwYWNlTGVmdCgpIDwgbnVtU2FtcGxlcykgeworICAgICAgICBBTE9HRSgiUklORyBCVUZGRVIgV09VTEQgT1ZFUkZMT1ciKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAgICBpZiAobU91dHB1dERlbGF5UmluZ0J1ZmZlcldyaXRlUG9zICsgbnVtU2FtcGxlcyA8PSBtT3V0cHV0RGVsYXlSaW5nQnVmZmVyU2l6ZQorICAgICAgICAgICAgJiYgKG1PdXRwdXREZWxheVJpbmdCdWZmZXJSZWFkUG9zIDw9IG1PdXRwdXREZWxheVJpbmdCdWZmZXJXcml0ZVBvcworICAgICAgICAgICAgICAgICAgICB8fCBtT3V0cHV0RGVsYXlSaW5nQnVmZmVyUmVhZFBvcyA+IG1PdXRwdXREZWxheVJpbmdCdWZmZXJXcml0ZVBvcyArIG51bVNhbXBsZXMpKSB7CisgICAgICAgIC8vIGZhc3RlciBtZW1jb3B5IGxvb3Agd2l0aG91dCBjaGVja3MsIGlmIHRoZSBwcmVjb25kaXRpb25zIGFsbG93IHRoaXMKKyAgICAgICAgZm9yIChpbnQzMl90IGkgPSAwOyBpIDwgbnVtU2FtcGxlczsgaSsrKSB7CisgICAgICAgICAgICBtT3V0cHV0RGVsYXlSaW5nQnVmZmVyW21PdXRwdXREZWxheVJpbmdCdWZmZXJXcml0ZVBvcysrXSA9IHNhbXBsZXNbaV07CisgICAgICAgIH0KKworICAgICAgICBpZiAobU91dHB1dERlbGF5UmluZ0J1ZmZlcldyaXRlUG9zID49IG1PdXRwdXREZWxheVJpbmdCdWZmZXJTaXplKSB7CisgICAgICAgICAgICBtT3V0cHV0RGVsYXlSaW5nQnVmZmVyV3JpdGVQb3MgLT0gbU91dHB1dERlbGF5UmluZ0J1ZmZlclNpemU7CisgICAgICAgIH0KKyAgICB9IGVsc2UgeworICAgICAgICBBTE9HVigic2xvdyBDMlNvZnRBYWNEZWM6Om91dHB1dERlbGF5UmluZ0J1ZmZlclB1dFNhbXBsZXMoKSIpOworCisgICAgICAgIGZvciAoaW50MzJfdCBpID0gMDsgaSA8IG51bVNhbXBsZXM7IGkrKykgeworICAgICAgICAgICAgbU91dHB1dERlbGF5UmluZ0J1ZmZlclttT3V0cHV0RGVsYXlSaW5nQnVmZmVyV3JpdGVQb3NdID0gc2FtcGxlc1tpXTsKKyAgICAgICAgICAgIG1PdXRwdXREZWxheVJpbmdCdWZmZXJXcml0ZVBvcysrOworICAgICAgICAgICAgaWYgKG1PdXRwdXREZWxheVJpbmdCdWZmZXJXcml0ZVBvcyA+PSBtT3V0cHV0RGVsYXlSaW5nQnVmZmVyU2l6ZSkgeworICAgICAgICAgICAgICAgIG1PdXRwdXREZWxheVJpbmdCdWZmZXJXcml0ZVBvcyAtPSBtT3V0cHV0RGVsYXlSaW5nQnVmZmVyU2l6ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKyAgICBtT3V0cHV0RGVsYXlSaW5nQnVmZmVyRmlsbGVkICs9IG51bVNhbXBsZXM7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK2ludDMyX3QgQzJTb2Z0QWFjRGVjOjpvdXRwdXREZWxheVJpbmdCdWZmZXJHZXRTYW1wbGVzKElOVF9QQ00gKnNhbXBsZXMsIGludDMyX3QgbnVtU2FtcGxlcykgeworCisgICAgaWYgKG51bVNhbXBsZXMgPiBtT3V0cHV0RGVsYXlSaW5nQnVmZmVyRmlsbGVkKSB7CisgICAgICAgIEFMT0dFKCJSSU5HIEJVRkZFUiBXT1VMRCBVTkRFUlJVTiIpOworICAgICAgICByZXR1cm4gLTE7CisgICAgfQorCisgICAgaWYgKG1PdXRwdXREZWxheVJpbmdCdWZmZXJSZWFkUG9zICsgbnVtU2FtcGxlcyA8PSBtT3V0cHV0RGVsYXlSaW5nQnVmZmVyU2l6ZQorICAgICAgICAgICAgJiYgKG1PdXRwdXREZWxheVJpbmdCdWZmZXJXcml0ZVBvcyA8IG1PdXRwdXREZWxheVJpbmdCdWZmZXJSZWFkUG9zCisgICAgICAgICAgICAgICAgICAgIHx8IG1PdXRwdXREZWxheVJpbmdCdWZmZXJXcml0ZVBvcyA+PSBtT3V0cHV0RGVsYXlSaW5nQnVmZmVyUmVhZFBvcyArIG51bVNhbXBsZXMpKSB7CisgICAgICAgIC8vIGZhc3RlciBtZW1jb3B5IGxvb3Agd2l0aG91dCBjaGVja3MsIGlmIHRoZSBwcmVjb25kaXRpb25zIGFsbG93IHRoaXMKKyAgICAgICAgaWYgKHNhbXBsZXMgIT0gbnVsbHB0cikgeworICAgICAgICAgICAgZm9yIChpbnQzMl90IGkgPSAwOyBpIDwgbnVtU2FtcGxlczsgaSsrKSB7CisgICAgICAgICAgICAgICAgc2FtcGxlc1tpXSA9IG1PdXRwdXREZWxheVJpbmdCdWZmZXJbbU91dHB1dERlbGF5UmluZ0J1ZmZlclJlYWRQb3MrK107CisgICAgICAgICAgICB9CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBtT3V0cHV0RGVsYXlSaW5nQnVmZmVyUmVhZFBvcyArPSBudW1TYW1wbGVzOworICAgICAgICB9CisgICAgICAgIGlmIChtT3V0cHV0RGVsYXlSaW5nQnVmZmVyUmVhZFBvcyA+PSBtT3V0cHV0RGVsYXlSaW5nQnVmZmVyU2l6ZSkgeworICAgICAgICAgICAgbU91dHB1dERlbGF5UmluZ0J1ZmZlclJlYWRQb3MgLT0gbU91dHB1dERlbGF5UmluZ0J1ZmZlclNpemU7CisgICAgICAgIH0KKyAgICB9IGVsc2UgeworICAgICAgICBBTE9HVigic2xvdyBDMlNvZnRBYWNEZWM6Om91dHB1dERlbGF5UmluZ0J1ZmZlckdldFNhbXBsZXMoKSIpOworCisgICAgICAgIGZvciAoaW50MzJfdCBpID0gMDsgaSA8IG51bVNhbXBsZXM7IGkrKykgeworICAgICAgICAgICAgaWYgKHNhbXBsZXMgIT0gbnVsbHB0cikgeworICAgICAgICAgICAgICAgIHNhbXBsZXNbaV0gPSBtT3V0cHV0RGVsYXlSaW5nQnVmZmVyW21PdXRwdXREZWxheVJpbmdCdWZmZXJSZWFkUG9zXTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIG1PdXRwdXREZWxheVJpbmdCdWZmZXJSZWFkUG9zKys7CisgICAgICAgICAgICBpZiAobU91dHB1dERlbGF5UmluZ0J1ZmZlclJlYWRQb3MgPj0gbU91dHB1dERlbGF5UmluZ0J1ZmZlclNpemUpIHsKKyAgICAgICAgICAgICAgICBtT3V0cHV0RGVsYXlSaW5nQnVmZmVyUmVhZFBvcyAtPSBtT3V0cHV0RGVsYXlSaW5nQnVmZmVyU2l6ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKyAgICBtT3V0cHV0RGVsYXlSaW5nQnVmZmVyRmlsbGVkIC09IG51bVNhbXBsZXM7CisgICAgcmV0dXJuIG51bVNhbXBsZXM7Cit9CisKK2ludDMyX3QgQzJTb2Z0QWFjRGVjOjpvdXRwdXREZWxheVJpbmdCdWZmZXJTYW1wbGVzQXZhaWxhYmxlKCkgeworICAgIHJldHVybiBtT3V0cHV0RGVsYXlSaW5nQnVmZmVyRmlsbGVkOworfQorCitpbnQzMl90IEMyU29mdEFhY0RlYzo6b3V0cHV0RGVsYXlSaW5nQnVmZmVyU3BhY2VMZWZ0KCkgeworICAgIHJldHVybiBtT3V0cHV0RGVsYXlSaW5nQnVmZmVyU2l6ZSAtIG91dHB1dERlbGF5UmluZ0J1ZmZlclNhbXBsZXNBdmFpbGFibGUoKTsKK30KKwordm9pZCBDMlNvZnRBYWNEZWM6OmRyYWluUmluZ0J1ZmZlcigKKyAgICAgICAgY29uc3Qgc3RkOjp1bmlxdWVfcHRyPEMyV29yaz4gJndvcmssCisgICAgICAgIGNvbnN0IHN0ZDo6c2hhcmVkX3B0cjxDMkJsb2NrUG9vbD4gJnBvb2wsCisgICAgICAgIGJvb2wgZW9zKSB7CisgICAgd2hpbGUgKCFtQnVmZmVyc0luZm8uZW1wdHkoKSAmJiBvdXRwdXREZWxheVJpbmdCdWZmZXJTYW1wbGVzQXZhaWxhYmxlKCkKKyAgICAgICAgICAgID49IG1TdHJlYW1JbmZvLT5mcmFtZVNpemUgKiBtU3RyZWFtSW5mby0+bnVtQ2hhbm5lbHMpIHsKKyAgICAgICAgSW5mbyAmb3V0SW5mbyA9IG1CdWZmZXJzSW5mby5mcm9udCgpOworICAgICAgICBBTE9HVigib3V0SW5mby5mcmFtZUluZGV4ID0gJSIgUFJJdTY0LCBvdXRJbmZvLmZyYW1lSW5kZXgpOworICAgICAgICBpbnQgc2FtcGxlc2l6ZSBfX3VudXNlZCA9IG1TdHJlYW1JbmZvLT5udW1DaGFubmVscyAqIHNpemVvZihpbnQxNl90KTsKKworICAgICAgICBpbnQgYXZhaWxhYmxlID0gb3V0cHV0RGVsYXlSaW5nQnVmZmVyU2FtcGxlc0F2YWlsYWJsZSgpOworICAgICAgICBpbnQgbnVtRnJhbWVzID0gb3V0SW5mby5kZWNvZGVkU2l6ZXMuc2l6ZSgpOworICAgICAgICBpbnQgbnVtU2FtcGxlcyA9IG51bUZyYW1lcyAqIChtU3RyZWFtSW5mby0+ZnJhbWVTaXplICogbVN0cmVhbUluZm8tPm51bUNoYW5uZWxzKTsKKyAgICAgICAgaWYgKGF2YWlsYWJsZSA8IG51bVNhbXBsZXMpIHsKKyAgICAgICAgICAgIGlmIChlb3MpIHsKKyAgICAgICAgICAgICAgICBudW1TYW1wbGVzID0gYXZhaWxhYmxlOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBBTE9HVigiJWQgc2FtcGxlcyBhdmFpbGFibGUgKCVkKSwgb3IgJWQgZnJhbWVzIiwKKyAgICAgICAgICAgICAgICBudW1TYW1wbGVzLCBhdmFpbGFibGUsIG51bUZyYW1lcyk7CisgICAgICAgIEFMT0dWKCJnZXR0aW5nICVkIGZyb20gcmluZ2J1ZmZlciIsIG51bVNhbXBsZXMpOworCisgICAgICAgIHN0ZDo6c2hhcmVkX3B0cjxDMkxpbmVhckJsb2NrPiBibG9jazsKKyAgICAgICAgc3RkOjpmdW5jdGlvbjx2b2lkKGNvbnN0IHN0ZDo6dW5pcXVlX3B0cjxDMldvcms+Jik+IGZpbGxXb3JrID0KKyAgICAgICAgICAgIFsmYmxvY2ssIG51bVNhbXBsZXMsIHBvb2wsIHRoaXNdKCkKKyAgICAgICAgICAgICAgICAgICAgLT4gc3RkOjpmdW5jdGlvbjx2b2lkKGNvbnN0IHN0ZDo6dW5pcXVlX3B0cjxDMldvcms+Jik+IHsKKyAgICAgICAgICAgICAgICBhdXRvIGZpbGxFbXB0eVdvcmsgPSBbXSgKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0ZDo6dW5pcXVlX3B0cjxDMldvcms+ICZ3b3JrLCBjMl9zdGF0dXNfdCBlcnIpIHsKKyAgICAgICAgICAgICAgICAgICAgd29yay0+cmVzdWx0ID0gZXJyOworICAgICAgICAgICAgICAgICAgICBDMkZyYW1lRGF0YSAmb3V0cHV0ID0gd29yay0+d29ya2xldHMuZnJvbnQoKS0+b3V0cHV0OworICAgICAgICAgICAgICAgICAgICBvdXRwdXQuZmxhZ3MgPSB3b3JrLT5pbnB1dC5mbGFnczsKKyAgICAgICAgICAgICAgICAgICAgb3V0cHV0LmJ1ZmZlcnMuY2xlYXIoKTsKKyAgICAgICAgICAgICAgICAgICAgb3V0cHV0Lm9yZGluYWwgPSB3b3JrLT5pbnB1dC5vcmRpbmFsOworCisgICAgICAgICAgICAgICAgICAgIHdvcmstPndvcmtsZXRzUHJvY2Vzc2VkID0gMXU7CisgICAgICAgICAgICAgICAgfTsKKworICAgICAgICAgICAgICAgIHVzaW5nIG5hbWVzcGFjZSBzdGQ6OnBsYWNlaG9sZGVyczsKKyAgICAgICAgICAgICAgICBpZiAobnVtU2FtcGxlcyA9PSAwKSB7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBzdGQ6OmJpbmQoZmlsbEVtcHR5V29yaywgXzEsIEMyX09LKTsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAvLyBUT0RPOiBlcnJvciBoYW5kbGluZywgcHJvcGVyIHVzYWdlLCBldGMuCisgICAgICAgICAgICAgICAgQzJNZW1vcnlVc2FnZSB1c2FnZSA9IHsgQzJNZW1vcnlVc2FnZTo6Q1BVX1JFQUQsIEMyTWVtb3J5VXNhZ2U6OkNQVV9XUklURSB9OworICAgICAgICAgICAgICAgIGMyX3N0YXR1c190IGVyciA9IHBvb2wtPmZldGNoTGluZWFyQmxvY2soCisgICAgICAgICAgICAgICAgICAgICAgICBudW1TYW1wbGVzICogc2l6ZW9mKGludDE2X3QpLCB1c2FnZSwgJmJsb2NrKTsKKyAgICAgICAgICAgICAgICBpZiAoZXJyICE9IEMyX09LKSB7CisgICAgICAgICAgICAgICAgICAgIEFMT0dEKCJmYWlsZWQgdG8gZmV0Y2ggYSBsaW5lYXIgYmxvY2sgKCVkKSIsIGVycik7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBzdGQ6OmJpbmQoZmlsbEVtcHR5V29yaywgXzEsIEMyX05PX01FTU9SWSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIEMyV3JpdGVWaWV3IHdWaWV3ID0gYmxvY2stPm1hcCgpLmdldCgpOworICAgICAgICAgICAgICAgIC8vIFRPRE8KKyAgICAgICAgICAgICAgICBJTlRfUENNICpvdXRCdWZmZXIgPSByZWludGVycHJldF9jYXN0PElOVF9QQ00gKj4od1ZpZXcuZGF0YSgpKTsKKyAgICAgICAgICAgICAgICBpbnQzMl90IG5zID0gb3V0cHV0RGVsYXlSaW5nQnVmZmVyR2V0U2FtcGxlcyhvdXRCdWZmZXIsIG51bVNhbXBsZXMpOworICAgICAgICAgICAgICAgIGlmIChucyAhPSBudW1TYW1wbGVzKSB7CisgICAgICAgICAgICAgICAgICAgIEFMT0dFKCJub3QgYSBjb21wbGV0ZSBmcmFtZSBvZiBzYW1wbGVzIGF2YWlsYWJsZSIpOworICAgICAgICAgICAgICAgICAgICBtU2lnbmFsbGVkRXJyb3IgPSB0cnVlOworICAgICAgICAgICAgICAgICAgICByZXR1cm4gc3RkOjpiaW5kKGZpbGxFbXB0eVdvcmssIF8xLCBDMl9DT1JSVVBURUQpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICByZXR1cm4gW2J1ZmZlciA9IGNyZWF0ZUxpbmVhckJ1ZmZlcihibG9jayldKAorICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RkOjp1bmlxdWVfcHRyPEMyV29yaz4gJndvcmspIHsKKyAgICAgICAgICAgICAgICAgICAgd29yay0+cmVzdWx0ID0gQzJfT0s7CisgICAgICAgICAgICAgICAgICAgIEMyRnJhbWVEYXRhICZvdXRwdXQgPSB3b3JrLT53b3JrbGV0cy5mcm9udCgpLT5vdXRwdXQ7CisgICAgICAgICAgICAgICAgICAgIG91dHB1dC5mbGFncyA9IHdvcmstPmlucHV0LmZsYWdzOworICAgICAgICAgICAgICAgICAgICBvdXRwdXQuYnVmZmVycy5jbGVhcigpOworICAgICAgICAgICAgICAgICAgICBvdXRwdXQuYnVmZmVycy5wdXNoX2JhY2soYnVmZmVyKTsKKyAgICAgICAgICAgICAgICAgICAgb3V0cHV0Lm9yZGluYWwgPSB3b3JrLT5pbnB1dC5vcmRpbmFsOworICAgICAgICAgICAgICAgICAgICB3b3JrLT53b3JrbGV0c1Byb2Nlc3NlZCA9IDF1OworICAgICAgICAgICAgICAgIH07CisgICAgICAgICAgICB9KCk7CisKKyAgICAgICAgaWYgKHdvcmsgJiYgd29yay0+aW5wdXQub3JkaW5hbC5mcmFtZUluZGV4ID09IGMyX2NudHI2NF90KG91dEluZm8uZnJhbWVJbmRleCkpIHsKKyAgICAgICAgICAgIGZpbGxXb3JrKHdvcmspOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgZmluaXNoKG91dEluZm8uZnJhbWVJbmRleCwgZmlsbFdvcmspOworICAgICAgICB9CisKKyAgICAgICAgQUxPR1YoIm91dCB0aW1lc3RhbXAgJSIgUFJJdTY0ICIgLyAldSIsIG91dEluZm8udGltZXN0YW1wLCBibG9jayA/IGJsb2NrLT5jYXBhY2l0eSgpIDogMCk7CisgICAgICAgIG1CdWZmZXJzSW5mby5wb3BfZnJvbnQoKTsKKyAgICB9Cit9CisKK3ZvaWQgQzJTb2Z0QWFjRGVjOjpwcm9jZXNzKAorICAgICAgICBjb25zdCBzdGQ6OnVuaXF1ZV9wdHI8QzJXb3JrPiAmd29yaywKKyAgICAgICAgY29uc3Qgc3RkOjpzaGFyZWRfcHRyPEMyQmxvY2tQb29sPiAmcG9vbCkgeworICAgIC8vIEluaXRpYWxpemUgb3V0cHV0IHdvcmsKKyAgICB3b3JrLT5yZXN1bHQgPSBDMl9PSzsKKyAgICB3b3JrLT53b3JrbGV0c1Byb2Nlc3NlZCA9IDF1OworICAgIHdvcmstPndvcmtsZXRzLmZyb250KCktPm91dHB1dC5jb25maWdVcGRhdGUuY2xlYXIoKTsKKyAgICB3b3JrLT53b3JrbGV0cy5mcm9udCgpLT5vdXRwdXQuZmxhZ3MgPSB3b3JrLT5pbnB1dC5mbGFnczsKKworICAgIGlmIChtU2lnbmFsbGVkRXJyb3IpIHsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIFVDSEFSKiBpbkJ1ZmZlcltGSUxFUkVBRF9NQVhfTEFZRVJTXTsKKyAgICBVSU5UIGluQnVmZmVyTGVuZ3RoW0ZJTEVSRUFEX01BWF9MQVlFUlNdID0gezB9OworICAgIFVJTlQgYnl0ZXNWYWxpZFtGSUxFUkVBRF9NQVhfTEFZRVJTXSA9IHswfTsKKworICAgIElOVF9QQ00gdG1wT3V0QnVmZmVyWzIwNDggKiBNQVhfQ0hBTk5FTF9DT1VOVF07CisgICAgQzJSZWFkVmlldyB2aWV3ID0gbUR1bW15UmVhZFZpZXc7CisgICAgc2l6ZV90IG9mZnNldCA9IDB1OworICAgIHNpemVfdCBzaXplID0gMHU7CisgICAgaWYgKCF3b3JrLT5pbnB1dC5idWZmZXJzLmVtcHR5KCkpIHsKKyAgICAgICAgdmlldyA9IHdvcmstPmlucHV0LmJ1ZmZlcnNbMF0tPmRhdGEoKS5saW5lYXJCbG9ja3MoKS5mcm9udCgpLm1hcCgpLmdldCgpOworICAgICAgICBzaXplID0gdmlldy5jYXBhY2l0eSgpOworICAgIH0KKworICAgIGJvb2wgZW9zID0gKHdvcmstPmlucHV0LmZsYWdzICYgQzJGcmFtZURhdGE6OkZMQUdfRU5EX09GX1NUUkVBTSkgIT0gMDsKKyAgICBib29sIGNvZGVjQ29uZmlnID0gKHdvcmstPmlucHV0LmZsYWdzICYgQzJGcmFtZURhdGE6OkZMQUdfQ09ERUNfQ09ORklHKSAhPSAwOworCisgICAgLy9UT0RPCisjaWYgMAorICAgIGlmIChtSW5wdXRCdWZmZXJDb3VudCA9PSAwICYmICFjb2RlY0NvbmZpZykgeworICAgICAgICBBTE9HVygiZmlyc3QgYnVmZmVyIHNob3VsZCBoYXZlIEZMQUdfQ09ERUNfQ09ORklHIHNldCIpOworICAgICAgICBjb2RlY0NvbmZpZyA9IHRydWU7CisgICAgfQorI2VuZGlmCisgICAgaWYgKGNvZGVjQ29uZmlnICYmIHNpemUgPiAwdSkgeworICAgICAgICAvLyBjb25zdF9jYXN0IGJlY2F1c2Ugb2YgbGliQUFDZGVjIG1ldGhvZCBzaWduYXR1cmUuCisgICAgICAgIGluQnVmZmVyWzBdID0gY29uc3RfY2FzdDxVQ0hBUiAqPih2aWV3LmRhdGEoKSArIG9mZnNldCk7CisgICAgICAgIGluQnVmZmVyTGVuZ3RoWzBdID0gc2l6ZTsKKworICAgICAgICBBQUNfREVDT0RFUl9FUlJPUiBkZWNvZGVyRXJyID0KKyAgICAgICAgICAgIGFhY0RlY29kZXJfQ29uZmlnUmF3KG1BQUNEZWNvZGVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5CdWZmZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbkJ1ZmZlckxlbmd0aCk7CisKKyAgICAgICAgaWYgKGRlY29kZXJFcnIgIT0gQUFDX0RFQ19PSykgeworICAgICAgICAgICAgQUxPR0UoImFhY0RlY29kZXJfQ29uZmlnUmF3IGRlY29kZXJFcnIgPSAweCU0LjR4IiwgZGVjb2RlckVycik7CisgICAgICAgICAgICBtU2lnbmFsbGVkRXJyb3IgPSB0cnVlOworICAgICAgICAgICAgd29yay0+cmVzdWx0ID0gQzJfQ09SUlVQVEVEOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIHdvcmstPndvcmtsZXRzLmZyb250KCktPm91dHB1dC5mbGFncyA9IHdvcmstPmlucHV0LmZsYWdzOworICAgICAgICB3b3JrLT53b3JrbGV0cy5mcm9udCgpLT5vdXRwdXQub3JkaW5hbCA9IHdvcmstPmlucHV0Lm9yZGluYWw7CisgICAgICAgIHdvcmstPndvcmtsZXRzLmZyb250KCktPm91dHB1dC5idWZmZXJzLmNsZWFyKCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBJbmZvIGluSW5mbzsKKyAgICBpbkluZm8uZnJhbWVJbmRleCA9IHdvcmstPmlucHV0Lm9yZGluYWwuZnJhbWVJbmRleC5wZWVrdSgpOworICAgIGluSW5mby50aW1lc3RhbXAgPSB3b3JrLT5pbnB1dC5vcmRpbmFsLnRpbWVzdGFtcC5wZWVrdSgpOworICAgIGluSW5mby5idWZmZXJTaXplID0gc2l6ZTsKKyAgICBpbkluZm8uZGVjb2RlZFNpemVzLmNsZWFyKCk7CisgICAgd2hpbGUgKHNpemUgPiAwdSkgeworICAgICAgICBBTE9HVigic2l6ZSA9ICV6dSIsIHNpemUpOworICAgICAgICBpZiAobUludGYtPmlzQWR0cygpKSB7CisgICAgICAgICAgICBzaXplX3QgYWR0c0hlYWRlclNpemUgPSAwOworICAgICAgICAgICAgLy8gc2tpcCAzMCBiaXRzLCBhYWNfZnJhbWVfbGVuZ3RoIGZvbGxvd3MuCisgICAgICAgICAgICAvLyBzc3Nzc3NzcyBzc3NzaWlpcCBwcGZmZmZQYyBjY29oQ0NsbCBsbGxsbGxsbCBsbGw/Pz8/PworCisgICAgICAgICAgICBjb25zdCB1aW50OF90ICphZHRzSGVhZGVyID0gdmlldy5kYXRhKCkgKyBvZmZzZXQ7CisKKyAgICAgICAgICAgIGJvb2wgc2lnbmFsRXJyb3IgPSBmYWxzZTsKKyAgICAgICAgICAgIGlmIChzaXplIDwgNykgeworICAgICAgICAgICAgICAgIEFMT0dFKCJBdWRpbyBkYXRhIHRvbyBzaG9ydCB0byBjb250YWluIGV2ZW4gdGhlIEFEVFMgaGVhZGVyLiAiCisgICAgICAgICAgICAgICAgICAgICAgICAiR290ICV6dSBieXRlcy4iLCBzaXplKTsKKyAgICAgICAgICAgICAgICBoZXhkdW1wKGFkdHNIZWFkZXIsIHNpemUpOworICAgICAgICAgICAgICAgIHNpZ25hbEVycm9yID0gdHJ1ZTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgYm9vbCBwcm90ZWN0aW9uQWJzZW50ID0gKGFkdHNIZWFkZXJbMV0gJiAxKTsKKworICAgICAgICAgICAgICAgIHVuc2lnbmVkIGFhY19mcmFtZV9sZW5ndGggPQorICAgICAgICAgICAgICAgICAgICAoKGFkdHNIZWFkZXJbM10gJiAzKSA8PCAxMSkKKyAgICAgICAgICAgICAgICAgICAgfCAoYWR0c0hlYWRlcls0XSA8PCAzKQorICAgICAgICAgICAgICAgICAgICB8IChhZHRzSGVhZGVyWzVdID4+IDUpOworCisgICAgICAgICAgICAgICAgaWYgKHNpemUgPCBhYWNfZnJhbWVfbGVuZ3RoKSB7CisgICAgICAgICAgICAgICAgICAgIEFMT0dFKCJOb3QgZW5vdWdoIGF1ZGlvIGRhdGEgZm9yIHRoZSBjb21wbGV0ZSBmcmFtZS4gIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICJHb3QgJXp1IGJ5dGVzLCBmcmFtZSBzaXplIGFjY29yZGluZyB0byB0aGUgQURUUyAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgImhlYWRlciBpcyAldSBieXRlcy4iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemUsIGFhY19mcmFtZV9sZW5ndGgpOworICAgICAgICAgICAgICAgICAgICBoZXhkdW1wKGFkdHNIZWFkZXIsIHNpemUpOworICAgICAgICAgICAgICAgICAgICBzaWduYWxFcnJvciA9IHRydWU7CisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgYWR0c0hlYWRlclNpemUgPSAocHJvdGVjdGlvbkFic2VudCA/IDcgOiA5KTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGFhY19mcmFtZV9sZW5ndGggPCBhZHRzSGVhZGVyU2l6ZSkgeworICAgICAgICAgICAgICAgICAgICAgICAgc2lnbmFsRXJyb3IgPSB0cnVlOworICAgICAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICAgICAgLy8gY29uc3RfY2FzdCBiZWNhdXNlIG9mIGxpYkFBQ2RlYyBtZXRob2Qgc2lnbmF0dXJlLgorICAgICAgICAgICAgICAgICAgICAgICAgaW5CdWZmZXJbMF0gPSBjb25zdF9jYXN0PFVDSEFSICo+KGFkdHNIZWFkZXIgKyBhZHRzSGVhZGVyU2l6ZSk7CisgICAgICAgICAgICAgICAgICAgICAgICBpbkJ1ZmZlckxlbmd0aFswXSA9IGFhY19mcmFtZV9sZW5ndGggLSBhZHRzSGVhZGVyU2l6ZTsKKworICAgICAgICAgICAgICAgICAgICAgICAgb2Zmc2V0ICs9IGFkdHNIZWFkZXJTaXplOworICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZSAtPSBhZHRzSGVhZGVyU2l6ZTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKHNpZ25hbEVycm9yKSB7CisgICAgICAgICAgICAgICAgbVNpZ25hbGxlZEVycm9yID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICB3b3JrLT5yZXN1bHQgPSBDMl9DT1JSVVBURUQ7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQorICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgLy8gY29uc3RfY2FzdCBiZWNhdXNlIG9mIGxpYkFBQ2RlYyBtZXRob2Qgc2lnbmF0dXJlLgorICAgICAgICAgICAgaW5CdWZmZXJbMF0gPSBjb25zdF9jYXN0PFVDSEFSICo+KHZpZXcuZGF0YSgpICsgb2Zmc2V0KTsKKyAgICAgICAgICAgIGluQnVmZmVyTGVuZ3RoWzBdID0gc2l6ZTsKKyAgICAgICAgfQorCisgICAgICAgIC8vIEZpbGwgYW5kIGRlY29kZQorICAgICAgICBieXRlc1ZhbGlkWzBdID0gaW5CdWZmZXJMZW5ndGhbMF07CisKKyAgICAgICAgSU5UIHByZXZTYW1wbGVSYXRlID0gbVN0cmVhbUluZm8tPnNhbXBsZVJhdGU7CisgICAgICAgIElOVCBwcmV2TnVtQ2hhbm5lbHMgPSBtU3RyZWFtSW5mby0+bnVtQ2hhbm5lbHM7CisKKyAgICAgICAgYWFjRGVjb2Rlcl9GaWxsKG1BQUNEZWNvZGVyLAorICAgICAgICAgICAgICAgICAgICAgICAgaW5CdWZmZXIsCisgICAgICAgICAgICAgICAgICAgICAgICBpbkJ1ZmZlckxlbmd0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgIGJ5dGVzVmFsaWQpOworCisgICAgICAgIC8vIHJ1biBEUkMgY2hlY2sKKyAgICAgICAgbURyY1dyYXAuc3VibWl0U3RyZWFtRGF0YShtU3RyZWFtSW5mbyk7CisgICAgICAgIG1EcmNXcmFwLnVwZGF0ZSgpOworCisgICAgICAgIFVJTlQgaW5CdWZmZXJVc2VkTGVuZ3RoID0gaW5CdWZmZXJMZW5ndGhbMF0gLSBieXRlc1ZhbGlkWzBdOworICAgICAgICBzaXplIC09IGluQnVmZmVyVXNlZExlbmd0aDsKKyAgICAgICAgb2Zmc2V0ICs9IGluQnVmZmVyVXNlZExlbmd0aDsKKworICAgICAgICBBQUNfREVDT0RFUl9FUlJPUiBkZWNvZGVyRXJyOworICAgICAgICBkbyB7CisgICAgICAgICAgICBpZiAob3V0cHV0RGVsYXlSaW5nQnVmZmVyU3BhY2VMZWZ0KCkgPAorICAgICAgICAgICAgICAgICAgICAobVN0cmVhbUluZm8tPmZyYW1lU2l6ZSAqIG1TdHJlYW1JbmZvLT5udW1DaGFubmVscykpIHsKKyAgICAgICAgICAgICAgICBBTE9HVigic2tpcHBpbmcgZGVjb2RlOiBub3QgZW5vdWdoIHNwYWNlIGxlZnQgaW4gcmluZ2J1ZmZlciIpOworICAgICAgICAgICAgICAgIC8vIGRpc2NhcmQgYnVmZmVyCisgICAgICAgICAgICAgICAgc2l6ZSA9IDA7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGludCBudW1Db25zdW1lZCA9IG1TdHJlYW1JbmZvLT5udW1Ub3RhbEJ5dGVzOworICAgICAgICAgICAgZGVjb2RlckVyciA9IGFhY0RlY29kZXJfRGVjb2RlRnJhbWUobUFBQ0RlY29kZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0bXBPdXRCdWZmZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyMDQ4ICogTUFYX0NIQU5ORUxfQ09VTlQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwIC8qIGZsYWdzICovKTsKKworICAgICAgICAgICAgbnVtQ29uc3VtZWQgPSBtU3RyZWFtSW5mby0+bnVtVG90YWxCeXRlcyAtIG51bUNvbnN1bWVkOworCisgICAgICAgICAgICBpZiAoZGVjb2RlckVyciA9PSBBQUNfREVDX05PVF9FTk9VR0hfQklUUykgeworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaW5JbmZvLmRlY29kZWRTaXplcy5wdXNoX2JhY2sobnVtQ29uc3VtZWQpOworCisgICAgICAgICAgICBpZiAoZGVjb2RlckVyciAhPSBBQUNfREVDX09LKSB7CisgICAgICAgICAgICAgICAgQUxPR1coImFhY0RlY29kZXJfRGVjb2RlRnJhbWUgZGVjb2RlckVyciA9IDB4JTQuNHgiLCBkZWNvZGVyRXJyKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKGJ5dGVzVmFsaWRbMF0gIT0gMCkgeworICAgICAgICAgICAgICAgIEFMT0dFKCJieXRlc1ZhbGlkWzBdICE9IDAgc2hvdWxkIG5ldmVyIGhhcHBlbiIpOworICAgICAgICAgICAgICAgIG1TaWduYWxsZWRFcnJvciA9IHRydWU7CisgICAgICAgICAgICAgICAgd29yay0+cmVzdWx0ID0gQzJfQ09SUlVQVEVEOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgc2l6ZV90IG51bU91dEJ5dGVzID0KKyAgICAgICAgICAgICAgICBtU3RyZWFtSW5mby0+ZnJhbWVTaXplICogc2l6ZW9mKGludDE2X3QpICogbVN0cmVhbUluZm8tPm51bUNoYW5uZWxzOworCisgICAgICAgICAgICBpZiAoZGVjb2RlckVyciA9PSBBQUNfREVDX09LKSB7CisgICAgICAgICAgICAgICAgaWYgKCFvdXRwdXREZWxheVJpbmdCdWZmZXJQdXRTYW1wbGVzKHRtcE91dEJ1ZmZlciwKKyAgICAgICAgICAgICAgICAgICAgICAgIG1TdHJlYW1JbmZvLT5mcmFtZVNpemUgKiBtU3RyZWFtSW5mby0+bnVtQ2hhbm5lbHMpKSB7CisgICAgICAgICAgICAgICAgICAgIG1TaWduYWxsZWRFcnJvciA9IHRydWU7CisgICAgICAgICAgICAgICAgICAgIHdvcmstPnJlc3VsdCA9IEMyX0NPUlJVUFRFRDsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgQUxPR1coIkFBQyBkZWNvZGVyIHJldHVybmVkIGVycm9yIDB4JTQuNHgsIHN1YnN0aXR1dGluZyBzaWxlbmNlIiwgZGVjb2RlckVycik7CisKKyAgICAgICAgICAgICAgICBtZW1zZXQodG1wT3V0QnVmZmVyLCAwLCBudW1PdXRCeXRlcyk7IC8vIFRPRE86IGNoZWNrIGZvciBvdmVyZmxvdworCisgICAgICAgICAgICAgICAgaWYgKCFvdXRwdXREZWxheVJpbmdCdWZmZXJQdXRTYW1wbGVzKHRtcE91dEJ1ZmZlciwKKyAgICAgICAgICAgICAgICAgICAgICAgIG1TdHJlYW1JbmZvLT5mcmFtZVNpemUgKiBtU3RyZWFtSW5mby0+bnVtQ2hhbm5lbHMpKSB7CisgICAgICAgICAgICAgICAgICAgIG1TaWduYWxsZWRFcnJvciA9IHRydWU7CisgICAgICAgICAgICAgICAgICAgIHdvcmstPnJlc3VsdCA9IEMyX0NPUlJVUFRFRDsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIC8vIERpc2NhcmQgaW5wdXQgYnVmZmVyLgorICAgICAgICAgICAgICAgIHNpemUgPSAwOworCisgICAgICAgICAgICAgICAgYWFjRGVjb2Rlcl9TZXRQYXJhbShtQUFDRGVjb2RlciwgQUFDX1RQREVDX0NMRUFSX0JVRkZFUiwgMSk7CisKKyAgICAgICAgICAgICAgICAvLyBBZnRlciBhbiBlcnJvciwgcmVwbGFjZSBidWZmZXJTaXplIHdpdGggdGhlIHN1bSBvZiB0aGUKKyAgICAgICAgICAgICAgICAvLyBkZWNvZGVkU2l6ZXMgdG8gcmVzeW5jaHJvbml6ZSB0aGUgaW4vb3V0IGxpc3RzLgorICAgICAgICAgICAgICAgIGluSW5mby5kZWNvZGVkU2l6ZXMucG9wX2JhY2soKTsKKyAgICAgICAgICAgICAgICBpbkluZm8uYnVmZmVyU2l6ZSA9IHN0ZDo6YWNjdW11bGF0ZSgKKyAgICAgICAgICAgICAgICAgICAgICAgIGluSW5mby5kZWNvZGVkU2l6ZXMuYmVnaW4oKSwgaW5JbmZvLmRlY29kZWRTaXplcy5lbmQoKSwgMCk7CisKKyAgICAgICAgICAgICAgICAvLyBmYWxsIHRocm91Z2gKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgLyoKKyAgICAgICAgICAgICAqIEFBQysvZUFBQysgc3RyZWFtcyBjYW4gYmUgc2lnbmFsbGVkIGluIHR3byB3YXlzOiBlaXRoZXIgZXhwbGljaXRseQorICAgICAgICAgICAgICogb3IgaW1wbGljaXRseSwgYWNjb3JkaW5nIHRvIE1QRUc0IHNwZWMuIEFBQysvZUFBQysgaXMgYSBkdWFsCisgICAgICAgICAgICAgKiByYXRlIHN5c3RlbSBhbmQgdGhlIHNhbXBsaW5nIHJhdGUgaW4gdGhlIGZpbmFsIG91dHB1dCBpcyBhY3R1YWxseQorICAgICAgICAgICAgICogZG91YmxlZCBjb21wYXJlZCB3aXRoIHRoZSBjb3JlIEFBQyBkZWNvZGVyIHNhbXBsaW5nIHJhdGUuCisgICAgICAgICAgICAgKgorICAgICAgICAgICAgICogRXhwbGljaXQgc2lnbmFsbGluZyBpcyBkb25lIGJ5IGV4cGxpY2l0bHkgZGVmaW5pbmcgU0JSIGF1ZGlvIG9iamVjdAorICAgICAgICAgICAgICogdHlwZSBpbiB0aGUgYml0c3RyZWFtLiBJbXBsaWNpdCBzaWduYWxsaW5nIGlzIGRvbmUgYnkgZW1iZWRkaW5nCisgICAgICAgICAgICAgKiBTQlIgY29udGVudCBpbiBBQUMgZXh0ZW5zaW9uIHBheWxvYWQgc3BlY2lmaWMgdG8gU0JSLCBhbmQgaGVuY2UKKyAgICAgICAgICAgICAqIHJlcXVpcmVzIGFuIEFBQyBkZWNvZGVyIHRvIHBlcmZvcm0gcHJlLWNoZWNrcyBvbiBhY3R1YWwgYXVkaW8gZnJhbWVzLgorICAgICAgICAgICAgICoKKyAgICAgICAgICAgICAqIFRodXMsIHdlIGNvdWxkIG5vdCBzYXkgZm9yIHN1cmUgd2hldGhlciBhIHN0cmVhbSBpcworICAgICAgICAgICAgICogQUFDKy9lQUFDKyB1bnRpbCB0aGUgZmlyc3QgZGF0YSBmcmFtZSBpcyBkZWNvZGVkLgorICAgICAgICAgICAgICovCisgICAgICAgICAgICBpZiAoIW1TdHJlYW1JbmZvLT5zYW1wbGVSYXRlIHx8ICFtU3RyZWFtSW5mby0+bnVtQ2hhbm5lbHMpIHsKKyAgICAgICAgICAgICAgICAvLyBpZiAoKG1JbnB1dEJ1ZmZlckNvdW50ID4gMikgJiYgKG1PdXRwdXRCdWZmZXJDb3VudCA8PSAxKSkgeworICAgICAgICAgICAgICAgICAgICBBTE9HRCgiSW52YWxpZCBBQUMgc3RyZWFtIik7CisgICAgICAgICAgICAgICAgICAgIC8vIFRPRE86IG5vdGlmeShPTVhfRXZlbnRFcnJvciwgT01YX0Vycm9yVW5kZWZpbmVkLCBkZWNvZGVyRXJyLCBOVUxMKTsKKyAgICAgICAgICAgICAgICAgICAgLy8gbVNpZ25hbGxlZEVycm9yID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICAvLyB9CisgICAgICAgICAgICB9IGVsc2UgaWYgKChtU3RyZWFtSW5mby0+c2FtcGxlUmF0ZSAhPSBwcmV2U2FtcGxlUmF0ZSkgfHwKKyAgICAgICAgICAgICAgICAgICAgICAgKG1TdHJlYW1JbmZvLT5udW1DaGFubmVscyAhPSBwcmV2TnVtQ2hhbm5lbHMpKSB7CisgICAgICAgICAgICAgICAgQUxPR0koIlJlY29uZmlndXJpbmcgZGVjb2RlcjogJWQtPiVkIEh6LCAlZC0+JWQgY2hhbm5lbHMiLAorICAgICAgICAgICAgICAgICAgICAgIHByZXZTYW1wbGVSYXRlLCBtU3RyZWFtSW5mby0+c2FtcGxlUmF0ZSwKKyAgICAgICAgICAgICAgICAgICAgICBwcmV2TnVtQ2hhbm5lbHMsIG1TdHJlYW1JbmZvLT5udW1DaGFubmVscyk7CisKKyAgICAgICAgICAgICAgICBDMlN0cmVhbVNhbXBsZVJhdGVJbmZvOjpvdXRwdXQgc2FtcGxlUmF0ZUluZm8oMHUsIG1TdHJlYW1JbmZvLT5zYW1wbGVSYXRlKTsKKyAgICAgICAgICAgICAgICBDMlN0cmVhbUNoYW5uZWxDb3VudEluZm86Om91dHB1dCBjaGFubmVsQ291bnRJbmZvKDB1LCBtU3RyZWFtSW5mby0+bnVtQ2hhbm5lbHMpOworICAgICAgICAgICAgICAgIHN0ZDo6dmVjdG9yPHN0ZDo6dW5pcXVlX3B0cjxDMlNldHRpbmdSZXN1bHQ+PiBmYWlsdXJlczsKKyAgICAgICAgICAgICAgICBjMl9zdGF0dXNfdCBlcnIgPSBtSW50Zi0+Y29uZmlnKAorICAgICAgICAgICAgICAgICAgICAgICAgeyAmc2FtcGxlUmF0ZUluZm8sICZjaGFubmVsQ291bnRJbmZvIH0sCisgICAgICAgICAgICAgICAgICAgICAgICBDMl9NQVlfQkxPQ0ssCisgICAgICAgICAgICAgICAgICAgICAgICAmZmFpbHVyZXMpOworICAgICAgICAgICAgICAgIGlmIChlcnIgPT0gT0spIHsKKyAgICAgICAgICAgICAgICAgICAgLy8gVE9ETzogdGhpcyBkb2VzIG5vdCBoYW5kbGUgdGhlIGNhc2Ugd2hlcmUgdGhlIHZhbHVlcyBhcmUKKyAgICAgICAgICAgICAgICAgICAgLy8gICAgICAgYWx0ZXJlZCBkdXJpbmcgY29uZmlnLgorICAgICAgICAgICAgICAgICAgICBDMkZyYW1lRGF0YSAmb3V0cHV0ID0gd29yay0+d29ya2xldHMuZnJvbnQoKS0+b3V0cHV0OworICAgICAgICAgICAgICAgICAgICBvdXRwdXQuY29uZmlnVXBkYXRlLnB1c2hfYmFjayhDMlBhcmFtOjpDb3B5KHNhbXBsZVJhdGVJbmZvKSk7CisgICAgICAgICAgICAgICAgICAgIG91dHB1dC5jb25maWdVcGRhdGUucHVzaF9iYWNrKEMyUGFyYW06OkNvcHkoY2hhbm5lbENvdW50SW5mbykpOworICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIEFMT0dFKCJDb25maWcgVXBkYXRlIGZhaWxlZCIpOworICAgICAgICAgICAgICAgICAgICBtU2lnbmFsbGVkRXJyb3IgPSB0cnVlOworICAgICAgICAgICAgICAgICAgICB3b3JrLT5yZXN1bHQgPSBDMl9DT1JSVVBURUQ7CisgICAgICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICBBTE9HVigic2l6ZSA9ICV6dSIsIHNpemUpOworICAgICAgICB9IHdoaWxlIChkZWNvZGVyRXJyID09IEFBQ19ERUNfT0spOworICAgIH0KKworICAgIGludDMyX3Qgb3V0cHV0RGVsYXkgPSBtU3RyZWFtSW5mby0+b3V0cHV0RGVsYXkgKiBtU3RyZWFtSW5mby0+bnVtQ2hhbm5lbHM7CisKKyAgICBtQnVmZmVyc0luZm8ucHVzaF9iYWNrKHN0ZDo6bW92ZShpbkluZm8pKTsKKyAgICB3b3JrLT53b3JrbGV0c1Byb2Nlc3NlZCA9IDB1OworICAgIGlmICghZW9zICYmIG1PdXRwdXREZWxheUNvbXBlbnNhdGVkIDwgb3V0cHV0RGVsYXkpIHsKKyAgICAgICAgLy8gZGlzY2FyZCBvdXRwdXREZWxheSBhdCB0aGUgYmVnaW5uaW5nCisgICAgICAgIGludDMyX3QgdG9Db21wZW5zYXRlID0gb3V0cHV0RGVsYXkgLSBtT3V0cHV0RGVsYXlDb21wZW5zYXRlZDsKKyAgICAgICAgaW50MzJfdCBkaXNjYXJkID0gb3V0cHV0RGVsYXlSaW5nQnVmZmVyU2FtcGxlc0F2YWlsYWJsZSgpOworICAgICAgICBpZiAoZGlzY2FyZCA+IHRvQ29tcGVuc2F0ZSkgeworICAgICAgICAgICAgZGlzY2FyZCA9IHRvQ29tcGVuc2F0ZTsKKyAgICAgICAgfQorICAgICAgICBpbnQzMl90IGRpc2NhcmRlZCA9IG91dHB1dERlbGF5UmluZ0J1ZmZlckdldFNhbXBsZXMobnVsbHB0ciwgZGlzY2FyZCk7CisgICAgICAgIG1PdXRwdXREZWxheUNvbXBlbnNhdGVkICs9IGRpc2NhcmRlZDsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmIChlb3MpIHsKKyAgICAgICAgZHJhaW5JbnRlcm5hbChEUkFJTl9DT01QT05FTlRfV0lUSF9FT1MsIHBvb2wsIHdvcmspOworICAgIH0gZWxzZSB7CisgICAgICAgIGRyYWluUmluZ0J1ZmZlcih3b3JrLCBwb29sLCBmYWxzZSAvKiBub3QgRU9TICovKTsKKyAgICB9Cit9CisKK2MyX3N0YXR1c190IEMyU29mdEFhY0RlYzo6ZHJhaW5JbnRlcm5hbCgKKyAgICAgICAgdWludDMyX3QgZHJhaW5Nb2RlLAorICAgICAgICBjb25zdCBzdGQ6OnNoYXJlZF9wdHI8QzJCbG9ja1Bvb2w+ICZwb29sLAorICAgICAgICBjb25zdCBzdGQ6OnVuaXF1ZV9wdHI8QzJXb3JrPiAmd29yaykgeworICAgIGlmIChkcmFpbk1vZGUgPT0gTk9fRFJBSU4pIHsKKyAgICAgICAgQUxPR1coImRyYWluIHdpdGggTk9fRFJBSU46IG5vLW9wIik7CisgICAgICAgIHJldHVybiBDMl9PSzsKKyAgICB9CisgICAgaWYgKGRyYWluTW9kZSA9PSBEUkFJTl9DSEFJTikgeworICAgICAgICBBTE9HVygiRFJBSU5fQ0hBSU4gbm90IHN1cHBvcnRlZCIpOworICAgICAgICByZXR1cm4gQzJfT01JVFRFRDsKKyAgICB9CisKKyAgICBib29sIGVvcyA9IChkcmFpbk1vZGUgPT0gRFJBSU5fQ09NUE9ORU5UX1dJVEhfRU9TKTsKKworICAgIGRyYWluRGVjb2RlcigpOworICAgIGRyYWluUmluZ0J1ZmZlcih3b3JrLCBwb29sLCBlb3MpOworCisgICAgaWYgKGVvcykgeworICAgICAgICBhdXRvIGZpbGxFbXB0eVdvcmsgPSBbXShjb25zdCBzdGQ6OnVuaXF1ZV9wdHI8QzJXb3JrPiAmd29yaykgeworICAgICAgICAgICAgd29yay0+d29ya2xldHMuZnJvbnQoKS0+b3V0cHV0LmZsYWdzID0gd29yay0+aW5wdXQuZmxhZ3M7CisgICAgICAgICAgICB3b3JrLT53b3JrbGV0cy5mcm9udCgpLT5vdXRwdXQuYnVmZmVycy5jbGVhcigpOworICAgICAgICAgICAgd29yay0+d29ya2xldHMuZnJvbnQoKS0+b3V0cHV0Lm9yZGluYWwgPSB3b3JrLT5pbnB1dC5vcmRpbmFsOworICAgICAgICAgICAgd29yay0+d29ya2xldHNQcm9jZXNzZWQgPSAxdTsKKyAgICAgICAgfTsKKyAgICAgICAgd2hpbGUgKG1CdWZmZXJzSW5mby5zaXplKCkgPiAxdSkgeworICAgICAgICAgICAgZmluaXNoKG1CdWZmZXJzSW5mby5mcm9udCgpLmZyYW1lSW5kZXgsIGZpbGxFbXB0eVdvcmspOworICAgICAgICAgICAgbUJ1ZmZlcnNJbmZvLnBvcF9mcm9udCgpOworICAgICAgICB9CisgICAgICAgIGlmICh3b3JrICYmIHdvcmstPndvcmtsZXRzUHJvY2Vzc2VkID09IDB1KSB7CisgICAgICAgICAgICBmaWxsRW1wdHlXb3JrKHdvcmspOworICAgICAgICB9CisgICAgICAgIG1CdWZmZXJzSW5mby5jbGVhcigpOworICAgIH0KKworICAgIHJldHVybiBDMl9PSzsKK30KKworYzJfc3RhdHVzX3QgQzJTb2Z0QWFjRGVjOjpkcmFpbigKKyAgICAgICAgdWludDMyX3QgZHJhaW5Nb2RlLAorICAgICAgICBjb25zdCBzdGQ6OnNoYXJlZF9wdHI8QzJCbG9ja1Bvb2w+ICZwb29sKSB7CisgICAgcmV0dXJuIGRyYWluSW50ZXJuYWwoZHJhaW5Nb2RlLCBwb29sLCBudWxscHRyKTsKK30KKworYzJfc3RhdHVzX3QgQzJTb2Z0QWFjRGVjOjpvbkZsdXNoX3NtKCkgeworICAgIGRyYWluRGVjb2RlcigpOworICAgIG1CdWZmZXJzSW5mby5jbGVhcigpOworCisgICAgaW50IGF2YWlsOworICAgIHdoaWxlICgoYXZhaWwgPSBvdXRwdXREZWxheVJpbmdCdWZmZXJTYW1wbGVzQXZhaWxhYmxlKCkpID4gMCkgeworICAgICAgICBpZiAoYXZhaWwgPiBtU3RyZWFtSW5mby0+ZnJhbWVTaXplICogbVN0cmVhbUluZm8tPm51bUNoYW5uZWxzKSB7CisgICAgICAgICAgICBhdmFpbCA9IG1TdHJlYW1JbmZvLT5mcmFtZVNpemUgKiBtU3RyZWFtSW5mby0+bnVtQ2hhbm5lbHM7CisgICAgICAgIH0KKyAgICAgICAgaW50MzJfdCBucyA9IG91dHB1dERlbGF5UmluZ0J1ZmZlckdldFNhbXBsZXMobnVsbHB0ciwgYXZhaWwpOworICAgICAgICBpZiAobnMgIT0gYXZhaWwpIHsKKyAgICAgICAgICAgIEFMT0dXKCJub3QgYSBjb21wbGV0ZSBmcmFtZSBvZiBzYW1wbGVzIGF2YWlsYWJsZSIpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICB9CisgICAgbU91dHB1dERlbGF5UmluZ0J1ZmZlclJlYWRQb3MgPSBtT3V0cHV0RGVsYXlSaW5nQnVmZmVyV3JpdGVQb3M7CisKKyAgICByZXR1cm4gQzJfT0s7Cit9CisKK3ZvaWQgQzJTb2Z0QWFjRGVjOjpkcmFpbkRlY29kZXIoKSB7CisgICAgLy8gZmx1c2ggZGVjb2RlciB1bnRpbCBvdXRwdXREZWxheSBpcyBjb21wZW5zYXRlZAorICAgIHdoaWxlIChtT3V0cHV0RGVsYXlDb21wZW5zYXRlZCA+IDApIHsKKyAgICAgICAgLy8gYSBidWZmZXIgYmlnIGVub3VnaCBmb3IgTUFYX0NIQU5ORUxfQ09VTlQgY2hhbm5lbHMgb2YgZGVjb2RlZCBIRS1BQUMKKyAgICAgICAgSU5UX1BDTSB0bXBPdXRCdWZmZXJbMjA0OCAqIE1BWF9DSEFOTkVMX0NPVU5UXTsKKworICAgICAgICAvLyBydW4gRFJDIGNoZWNrCisgICAgICAgIG1EcmNXcmFwLnN1Ym1pdFN0cmVhbURhdGEobVN0cmVhbUluZm8pOworICAgICAgICBtRHJjV3JhcC51cGRhdGUoKTsKKworICAgICAgICBBQUNfREVDT0RFUl9FUlJPUiBkZWNvZGVyRXJyID0KKyAgICAgICAgICAgIGFhY0RlY29kZXJfRGVjb2RlRnJhbWUobUFBQ0RlY29kZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRtcE91dEJ1ZmZlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjA0OCAqIE1BWF9DSEFOTkVMX0NPVU5ULAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBQUNERUNfRkxVU0gpOworICAgICAgICBpZiAoZGVjb2RlckVyciAhPSBBQUNfREVDX09LKSB7CisgICAgICAgICAgICBBTE9HVygiYWFjRGVjb2Rlcl9EZWNvZGVGcmFtZSBkZWNvZGVyRXJyID0gMHglNC40eCIsIGRlY29kZXJFcnIpOworICAgICAgICB9CisKKyAgICAgICAgaW50MzJfdCB0bXBPdXRCdWZmZXJTYW1wbGVzID0gbVN0cmVhbUluZm8tPmZyYW1lU2l6ZSAqIG1TdHJlYW1JbmZvLT5udW1DaGFubmVsczsKKyAgICAgICAgaWYgKHRtcE91dEJ1ZmZlclNhbXBsZXMgPiBtT3V0cHV0RGVsYXlDb21wZW5zYXRlZCkgeworICAgICAgICAgICAgdG1wT3V0QnVmZmVyU2FtcGxlcyA9IG1PdXRwdXREZWxheUNvbXBlbnNhdGVkOworICAgICAgICB9CisgICAgICAgIG91dHB1dERlbGF5UmluZ0J1ZmZlclB1dFNhbXBsZXModG1wT3V0QnVmZmVyLCB0bXBPdXRCdWZmZXJTYW1wbGVzKTsKKworICAgICAgICBtT3V0cHV0RGVsYXlDb21wZW5zYXRlZCAtPSB0bXBPdXRCdWZmZXJTYW1wbGVzOworICAgIH0KK30KKworY2xhc3MgQzJTb2Z0QWFjRGVjRmFjdG9yeSA6IHB1YmxpYyBDMkNvbXBvbmVudEZhY3RvcnkgeworcHVibGljOgorICAgIEMyU29mdEFhY0RlY0ZhY3RvcnkoKSA6IG1IZWxwZXIoc3RkOjpzdGF0aWNfcG9pbnRlcl9jYXN0PEMyUmVmbGVjdG9ySGVscGVyPigKKyAgICAgICAgICAgIEdldENvZGVjMlBsYXRmb3JtQ29tcG9uZW50U3RvcmUoKS0+Z2V0UGFyYW1SZWZsZWN0b3IoKSkpIHsKKyAgICB9CisKKyAgICB2aXJ0dWFsIGMyX3N0YXR1c190IGNyZWF0ZUNvbXBvbmVudCgKKyAgICAgICAgICAgIGMyX25vZGVfaWRfdCBpZCwKKyAgICAgICAgICAgIHN0ZDo6c2hhcmVkX3B0cjxDMkNvbXBvbmVudD4qIGNvbnN0IGNvbXBvbmVudCwKKyAgICAgICAgICAgIHN0ZDo6ZnVuY3Rpb248dm9pZChDMkNvbXBvbmVudCopPiBkZWxldGVyKSBvdmVycmlkZSB7CisgICAgICAgICpjb21wb25lbnQgPSBzdGQ6OnNoYXJlZF9wdHI8QzJDb21wb25lbnQ+KAorICAgICAgICAgICAgICAgIG5ldyBDMlNvZnRBYWNEZWMoQ09NUE9ORU5UX05BTUUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZDo6bWFrZV9zaGFyZWQ8QzJTb2Z0QWFjRGVjOjpJbnRmSW1wbD4obUhlbHBlcikpLAorICAgICAgICAgICAgICAgIGRlbGV0ZXIpOworICAgICAgICByZXR1cm4gQzJfT0s7CisgICAgfQorCisgICAgdmlydHVhbCBjMl9zdGF0dXNfdCBjcmVhdGVJbnRlcmZhY2UoCisgICAgICAgICAgICBjMl9ub2RlX2lkX3QgaWQsIHN0ZDo6c2hhcmVkX3B0cjxDMkNvbXBvbmVudEludGVyZmFjZT4qIGNvbnN0IGludGVyZmFjZSwKKyAgICAgICAgICAgIHN0ZDo6ZnVuY3Rpb248dm9pZChDMkNvbXBvbmVudEludGVyZmFjZSopPiBkZWxldGVyKSBvdmVycmlkZSB7CisgICAgICAgICppbnRlcmZhY2UgPSBzdGQ6OnNoYXJlZF9wdHI8QzJDb21wb25lbnRJbnRlcmZhY2U+KAorICAgICAgICAgICAgICAgIG5ldyBTaW1wbGVJbnRlcmZhY2U8QzJTb2Z0QWFjRGVjOjpJbnRmSW1wbD4oCisgICAgICAgICAgICAgICAgICAgICAgICBDT01QT05FTlRfTkFNRSwgaWQsIHN0ZDo6bWFrZV9zaGFyZWQ8QzJTb2Z0QWFjRGVjOjpJbnRmSW1wbD4obUhlbHBlcikpLAorICAgICAgICAgICAgICAgIGRlbGV0ZXIpOworICAgICAgICByZXR1cm4gQzJfT0s7CisgICAgfQorCisgICAgdmlydHVhbCB+QzJTb2Z0QWFjRGVjRmFjdG9yeSgpIG92ZXJyaWRlID0gZGVmYXVsdDsKKworcHJpdmF0ZToKKyAgICBzdGQ6OnNoYXJlZF9wdHI8QzJSZWZsZWN0b3JIZWxwZXI+IG1IZWxwZXI7Cit9OworCit9ICAvLyBuYW1lc3BhY2UgYW5kcm9pZAorCitleHRlcm4gIkMiIDo6QzJDb21wb25lbnRGYWN0b3J5KiBDcmVhdGVDb2RlYzJGYWN0b3J5KCkgeworICAgIEFMT0dWKCJpbiAlcyIsIF9fZnVuY19fKTsKKyAgICByZXR1cm4gbmV3IDo6YW5kcm9pZDo6QzJTb2Z0QWFjRGVjRmFjdG9yeSgpOworfQorCitleHRlcm4gIkMiIHZvaWQgRGVzdHJveUNvZGVjMkZhY3RvcnkoOjpDMkNvbXBvbmVudEZhY3RvcnkqIGZhY3RvcnkpIHsKKyAgICBBTE9HVigiaW4gJXMiLCBfX2Z1bmNfXyk7CisgICAgZGVsZXRlIGZhY3Rvcnk7Cit9CmRpZmYgLS1naXQgYS9tZWRpYS9jb2RlYzIvY29tcG9uZW50cy9hYWMvQzJTb2Z0QWFjRGVjLmggYi9tZWRpYS9jb2RlYzIvY29tcG9uZW50cy9hYWMvQzJTb2Z0QWFjRGVjLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTY1YzI5ZQotLS0gL2Rldi9udWxsCisrKyBiL21lZGlhL2NvZGVjMi9jb21wb25lbnRzL2FhYy9DMlNvZnRBYWNEZWMuaApAQCAtMCwwICsxLDEwOSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNyBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCisKKyNpZm5kZWYgQU5EUk9JRF9DMl9TT0ZUX0FBQ19ERUNfSF8KKyNkZWZpbmUgQU5EUk9JRF9DMl9TT0ZUX0FBQ19ERUNfSF8KKworI2luY2x1ZGUgPFNpbXBsZUMyQ29tcG9uZW50Lmg+CisKKworI2luY2x1ZGUgImFhY2RlY29kZXJfbGliLmgiCisjaW5jbHVkZSAiRHJjUHJlc01vZGVXcmFwLmgiCisKK25hbWVzcGFjZSBhbmRyb2lkIHsKKworc3RydWN0IEMyU29mdEFhY0RlYyA6IHB1YmxpYyBTaW1wbGVDMkNvbXBvbmVudCB7CisgICAgY2xhc3MgSW50ZkltcGw7CisKKyAgICBDMlNvZnRBYWNEZWMoY29uc3QgY2hhciAqbmFtZSwgYzJfbm9kZV9pZF90IGlkLCBjb25zdCBzdGQ6OnNoYXJlZF9wdHI8SW50ZkltcGw+ICZpbnRmSW1wbCk7CisgICAgdmlydHVhbCB+QzJTb2Z0QWFjRGVjKCk7CisKKyAgICAvLyBGcm9tIFNpbXBsZUMyQ29tcG9uZW50CisgICAgYzJfc3RhdHVzX3Qgb25Jbml0KCkgb3ZlcnJpZGU7CisgICAgYzJfc3RhdHVzX3Qgb25TdG9wKCkgb3ZlcnJpZGU7CisgICAgdm9pZCBvblJlc2V0KCkgb3ZlcnJpZGU7CisgICAgdm9pZCBvblJlbGVhc2UoKSBvdmVycmlkZTsKKyAgICBjMl9zdGF0dXNfdCBvbkZsdXNoX3NtKCkgb3ZlcnJpZGU7CisgICAgdm9pZCBwcm9jZXNzKAorICAgICAgICAgICAgY29uc3Qgc3RkOjp1bmlxdWVfcHRyPEMyV29yaz4gJndvcmssCisgICAgICAgICAgICBjb25zdCBzdGQ6OnNoYXJlZF9wdHI8QzJCbG9ja1Bvb2w+ICZwb29sKSBvdmVycmlkZTsKKyAgICBjMl9zdGF0dXNfdCBkcmFpbigKKyAgICAgICAgICAgIHVpbnQzMl90IGRyYWluTW9kZSwKKyAgICAgICAgICAgIGNvbnN0IHN0ZDo6c2hhcmVkX3B0cjxDMkJsb2NrUG9vbD4gJnBvb2wpIG92ZXJyaWRlOworCitwcml2YXRlOgorICAgIGVudW0geworICAgICAgICBrTnVtRGVsYXlCbG9ja3NNYXggICAgICA9IDgsCisgICAgfTsKKworICAgIHN0ZDo6c2hhcmVkX3B0cjxJbnRmSW1wbD4gbUludGY7CisKKyAgICBIQU5ETEVfQUFDREVDT0RFUiBtQUFDRGVjb2RlcjsKKyAgICBDU3RyZWFtSW5mbyAqbVN0cmVhbUluZm87CisgICAgYm9vbCBtSXNGaXJzdDsKKyAgICBzaXplX3QgbUlucHV0QnVmZmVyQ291bnQ7CisgICAgc2l6ZV90IG1PdXRwdXRCdWZmZXJDb3VudDsKKyAgICBib29sIG1TaWduYWxsZWRFcnJvcjsKKyAgICBzdHJ1Y3QgSW5mbyB7CisgICAgICAgIHVpbnQ2NF90IGZyYW1lSW5kZXg7CisgICAgICAgIHNpemVfdCBidWZmZXJTaXplOworICAgICAgICB1aW50NjRfdCB0aW1lc3RhbXA7CisgICAgICAgIHN0ZDo6dmVjdG9yPGludDMyX3Q+IGRlY29kZWRTaXplczsKKyAgICB9OworICAgIHN0ZDo6bGlzdDxJbmZvPiBtQnVmZmVyc0luZm87CisKKyAgICBDRHJjUHJlc01vZGVXcmFwcGVyIG1EcmNXcmFwOworCisgICAgZW51bSB7CisgICAgICAgIE5PTkUsCisgICAgICAgIEFXQUlUSU5HX0RJU0FCTEVELAorICAgICAgICBBV0FJVElOR19FTkFCTEVECisgICAgfSBtT3V0cHV0UG9ydFNldHRpbmdzQ2hhbmdlOworCisgICAgdm9pZCBpbml0UG9ydHMoKTsKKyAgICBzdGF0dXNfdCBpbml0RGVjb2RlcigpOworICAgIGJvb2wgaXNDb25maWd1cmVkKCkgY29uc3Q7CisgICAgdm9pZCBkcmFpbkRlY29kZXIoKTsKKworICAgIHZvaWQgZHJhaW5SaW5nQnVmZmVyKAorICAgICAgICAgICAgY29uc3Qgc3RkOjp1bmlxdWVfcHRyPEMyV29yaz4gJndvcmssCisgICAgICAgICAgICBjb25zdCBzdGQ6OnNoYXJlZF9wdHI8QzJCbG9ja1Bvb2w+ICZwb29sLAorICAgICAgICAgICAgYm9vbCBlb3MpOworICAgIGMyX3N0YXR1c190IGRyYWluSW50ZXJuYWwoCisgICAgICAgICAgICB1aW50MzJfdCBkcmFpbk1vZGUsCisgICAgICAgICAgICBjb25zdCBzdGQ6OnNoYXJlZF9wdHI8QzJCbG9ja1Bvb2w+ICZwb29sLAorICAgICAgICAgICAgY29uc3Qgc3RkOjp1bmlxdWVfcHRyPEMyV29yaz4gJndvcmspOworCisvLyAgICAgIGRlbGF5IGNvbXBlbnNhdGlvbgorICAgIGJvb2wgbUVuZE9mSW5wdXQ7CisgICAgYm9vbCBtRW5kT2ZPdXRwdXQ7CisgICAgaW50MzJfdCBtT3V0cHV0RGVsYXlDb21wZW5zYXRlZDsKKyAgICBpbnQzMl90IG1PdXRwdXREZWxheVJpbmdCdWZmZXJTaXplOworICAgIHNob3J0ICptT3V0cHV0RGVsYXlSaW5nQnVmZmVyOworICAgIGludDMyX3QgbU91dHB1dERlbGF5UmluZ0J1ZmZlcldyaXRlUG9zOworICAgIGludDMyX3QgbU91dHB1dERlbGF5UmluZ0J1ZmZlclJlYWRQb3M7CisgICAgaW50MzJfdCBtT3V0cHV0RGVsYXlSaW5nQnVmZmVyRmlsbGVkOworICAgIGJvb2wgb3V0cHV0RGVsYXlSaW5nQnVmZmVyUHV0U2FtcGxlcyhJTlRfUENNICpzYW1wbGVzLCBpbnQgbnVtU2FtcGxlcyk7CisgICAgaW50MzJfdCBvdXRwdXREZWxheVJpbmdCdWZmZXJHZXRTYW1wbGVzKElOVF9QQ00gKnNhbXBsZXMsIGludCBudW1TYW1wbGVzKTsKKyAgICBpbnQzMl90IG91dHB1dERlbGF5UmluZ0J1ZmZlclNhbXBsZXNBdmFpbGFibGUoKTsKKyAgICBpbnQzMl90IG91dHB1dERlbGF5UmluZ0J1ZmZlclNwYWNlTGVmdCgpOworCisgICAgQzJfRE9fTk9UX0NPUFkoQzJTb2Z0QWFjRGVjKTsKK307CisKK30gIC8vIG5hbWVzcGFjZSBhbmRyb2lkCisKKyNlbmRpZiAgLy8gQU5EUk9JRF9DMl9TT0ZUX0FBQ19ERUNfSF8KZGlmZiAtLWdpdCBhL21lZGlhL2NvZGVjMi9jb21wb25lbnRzL2FhYy9DMlNvZnRBYWNFbmMuY3BwIGIvbWVkaWEvY29kZWMyL2NvbXBvbmVudHMvYWFjL0MyU29mdEFhY0VuYy5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWVlZmJkYgotLS0gL2Rldi9udWxsCisrKyBiL21lZGlhL2NvZGVjMi9jb21wb25lbnRzL2FhYy9DMlNvZnRBYWNFbmMuY3BwCkBAIC0wLDAgKzEsNjAyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KKworLy8jZGVmaW5lIExPR19OREVCVUcgMAorI2RlZmluZSBMT0dfVEFHICJDMlNvZnRBYWNFbmMiCisjaW5jbHVkZSA8dXRpbHMvTG9nLmg+CisKKyNpbmNsdWRlIDxpbnR0eXBlcy5oPgorCisjaW5jbHVkZSA8QzJQbGF0Zm9ybVN1cHBvcnQuaD4KKyNpbmNsdWRlIDxTaW1wbGVDMkludGVyZmFjZS5oPgorI2luY2x1ZGUgPG1lZGlhL3N0YWdlZnJpZ2h0L2ZvdW5kYXRpb24vTWVkaWFEZWZzLmg+CisjaW5jbHVkZSA8bWVkaWEvc3RhZ2VmcmlnaHQvZm91bmRhdGlvbi9oZXhkdW1wLmg+CisKKyNpbmNsdWRlICJDMlNvZnRBYWNFbmMuaCIKKworbmFtZXNwYWNlIGFuZHJvaWQgeworCitjbGFzcyBDMlNvZnRBYWNFbmM6OkludGZJbXBsIDogcHVibGljIEMySW50ZXJmYWNlSGVscGVyIHsKK3B1YmxpYzoKKyAgICBleHBsaWNpdCBJbnRmSW1wbChjb25zdCBzdGQ6OnNoYXJlZF9wdHI8QzJSZWZsZWN0b3JIZWxwZXI+ICZoZWxwZXIpCisgICAgICAgIDogQzJJbnRlcmZhY2VIZWxwZXIoaGVscGVyKSB7CisKKyAgICAgICAgc2V0RGVyaXZlZEluc3RhbmNlKHRoaXMpOworCisgICAgICAgIGFkZFBhcmFtZXRlcigKKyAgICAgICAgICAgICAgICBEZWZpbmVQYXJhbShtSW5wdXRGb3JtYXQsIEMyX05BTUVfSU5QVVRfU1RSRUFNX0ZPUk1BVF9TRVRUSU5HKQorICAgICAgICAgICAgICAgIC53aXRoQ29uc3RWYWx1ZShuZXcgQzJTdHJlYW1Gb3JtYXRDb25maWc6OmlucHV0KDB1LCBDMkZvcm1hdEF1ZGlvKSkKKyAgICAgICAgICAgICAgICAuYnVpbGQoKSk7CisKKyAgICAgICAgYWRkUGFyYW1ldGVyKAorICAgICAgICAgICAgICAgIERlZmluZVBhcmFtKG1PdXRwdXRGb3JtYXQsIEMyX05BTUVfT1VUUFVUX1NUUkVBTV9GT1JNQVRfU0VUVElORykKKyAgICAgICAgICAgICAgICAud2l0aENvbnN0VmFsdWUobmV3IEMyU3RyZWFtRm9ybWF0Q29uZmlnOjpvdXRwdXQoMHUsIEMyRm9ybWF0Q29tcHJlc3NlZCkpCisgICAgICAgICAgICAgICAgLmJ1aWxkKCkpOworCisgICAgICAgIGFkZFBhcmFtZXRlcigKKyAgICAgICAgICAgICAgICBEZWZpbmVQYXJhbShtSW5wdXRNZWRpYVR5cGUsIEMyX05BTUVfSU5QVVRfUE9SVF9NSU1FX1NFVFRJTkcpCisgICAgICAgICAgICAgICAgLndpdGhDb25zdFZhbHVlKEFsbG9jU2hhcmVkU3RyaW5nPEMyUG9ydE1pbWVDb25maWc6OmlucHV0PigKKyAgICAgICAgICAgICAgICAgICAgICAgIE1FRElBX01JTUVUWVBFX0FVRElPX1JBVykpCisgICAgICAgICAgICAgICAgLmJ1aWxkKCkpOworCisgICAgICAgIGFkZFBhcmFtZXRlcigKKyAgICAgICAgICAgICAgICBEZWZpbmVQYXJhbShtT3V0cHV0TWVkaWFUeXBlLCBDMl9OQU1FX09VVFBVVF9QT1JUX01JTUVfU0VUVElORykKKyAgICAgICAgICAgICAgICAud2l0aENvbnN0VmFsdWUoQWxsb2NTaGFyZWRTdHJpbmc8QzJQb3J0TWltZUNvbmZpZzo6b3V0cHV0PigKKyAgICAgICAgICAgICAgICAgICAgICAgIE1FRElBX01JTUVUWVBFX0FVRElPX0FBQykpCisgICAgICAgICAgICAgICAgLmJ1aWxkKCkpOworCisgICAgICAgIGFkZFBhcmFtZXRlcigKKyAgICAgICAgICAgICAgICBEZWZpbmVQYXJhbShtU2FtcGxlUmF0ZSwgQzJfTkFNRV9TVFJFQU1fU0FNUExFX1JBVEVfU0VUVElORykKKyAgICAgICAgICAgICAgICAud2l0aERlZmF1bHQobmV3IEMyU3RyZWFtU2FtcGxlUmF0ZUluZm86OmlucHV0KDB1LCA0NDEwMCkpCisgICAgICAgICAgICAgICAgLndpdGhGaWVsZHMoe0MyRihtU2FtcGxlUmF0ZSwgdmFsdWUpLm9uZU9mKHsKKyAgICAgICAgICAgICAgICAgICAgODAwMCwgMTEwMjUsIDEyMDAwLCAxNjAwMCwgMjIwNTAsIDI0MDAwLCAzMjAwMCwgNDQxMDAsIDQ4MDAwCisgICAgICAgICAgICAgICAgfSl9KQorICAgICAgICAgICAgICAgIC53aXRoU2V0dGVyKChTZXR0ZXI8ZGVjbHR5cGUoKm1TYW1wbGVSYXRlKT46OlN0cmljdFZhbHVlV2l0aE5vRGVwcykpCisgICAgICAgICAgICAgICAgLmJ1aWxkKCkpOworCisgICAgICAgIGFkZFBhcmFtZXRlcigKKyAgICAgICAgICAgICAgICBEZWZpbmVQYXJhbShtQ2hhbm5lbENvdW50LCBDMl9OQU1FX1NUUkVBTV9DSEFOTkVMX0NPVU5UX1NFVFRJTkcpCisgICAgICAgICAgICAgICAgLndpdGhEZWZhdWx0KG5ldyBDMlN0cmVhbUNoYW5uZWxDb3VudEluZm86OmlucHV0KDB1LCAxKSkKKyAgICAgICAgICAgICAgICAud2l0aEZpZWxkcyh7QzJGKG1DaGFubmVsQ291bnQsIHZhbHVlKS5pblJhbmdlKDEsIDYpfSkKKyAgICAgICAgICAgICAgICAud2l0aFNldHRlcihTZXR0ZXI8ZGVjbHR5cGUoKm1DaGFubmVsQ291bnQpPjo6U3RyaWN0VmFsdWVXaXRoTm9EZXBzKQorICAgICAgICAgICAgICAgIC5idWlsZCgpKTsKKworICAgICAgICBhZGRQYXJhbWV0ZXIoCisgICAgICAgICAgICAgICAgRGVmaW5lUGFyYW0obUJpdHJhdGUsIEMyX05BTUVfU1RSRUFNX0JJVFJBVEVfU0VUVElORykKKyAgICAgICAgICAgICAgICAud2l0aERlZmF1bHQobmV3IEMyQml0cmF0ZVR1bmluZzo6b3V0cHV0KDB1LCA2NDAwMCkpCisgICAgICAgICAgICAgICAgLndpdGhGaWVsZHMoe0MyRihtQml0cmF0ZSwgdmFsdWUpLmluUmFuZ2UoODAwMCwgOTYwMDAwKX0pCisgICAgICAgICAgICAgICAgLndpdGhTZXR0ZXIoU2V0dGVyPGRlY2x0eXBlKCptQml0cmF0ZSk+OjpOb25TdHJpY3RWYWx1ZVdpdGhOb0RlcHMpCisgICAgICAgICAgICAgICAgLmJ1aWxkKCkpOworCisgICAgICAgIGFkZFBhcmFtZXRlcigKKyAgICAgICAgICAgICAgICBEZWZpbmVQYXJhbShtSW5wdXRNYXhCdWZTaXplLCBDMl9QQVJBTUtFWV9JTlBVVF9NQVhfQlVGRkVSX1NJWkUpCisgICAgICAgICAgICAgICAgLndpdGhEZWZhdWx0KG5ldyBDMlN0cmVhbU1heEJ1ZmZlclNpemVJbmZvOjppbnB1dCgwdSwgODE5MikpCisgICAgICAgICAgICAgICAgLmNhbGN1bGF0ZWRBcyhNYXhCdWZTaXplQ2FsY3VsYXRvciwgbUNoYW5uZWxDb3VudCkKKyAgICAgICAgICAgICAgICAuYnVpbGQoKSk7CisKKyAgICAgICAgYWRkUGFyYW1ldGVyKAorICAgICAgICAgICAgICAgIERlZmluZVBhcmFtKG1Qcm9maWxlTGV2ZWwsIEMyX1BBUkFNS0VZX1BST0ZJTEVfTEVWRUwpCisgICAgICAgICAgICAgICAgLndpdGhEZWZhdWx0KG5ldyBDMlN0cmVhbVByb2ZpbGVMZXZlbEluZm86Om91dHB1dCgwdSwKKyAgICAgICAgICAgICAgICAgICAgICAgIEMyQ29uZmlnOjpQUk9GSUxFX0FBQ19MQywgQzJDb25maWc6OkxFVkVMX1VOVVNFRCkpCisgICAgICAgICAgICAgICAgLndpdGhGaWVsZHMoeworICAgICAgICAgICAgICAgICAgICBDMkYobVByb2ZpbGVMZXZlbCwgcHJvZmlsZSkub25lT2YoeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIEMyQ29uZmlnOjpQUk9GSUxFX0FBQ19MQywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBDMkNvbmZpZzo6UFJPRklMRV9BQUNfSEUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgQzJDb25maWc6OlBST0ZJTEVfQUFDX0hFX1BTLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIEMyQ29uZmlnOjpQUk9GSUxFX0FBQ19MRCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBDMkNvbmZpZzo6UFJPRklMRV9BQUNfRUxEfSksCisgICAgICAgICAgICAgICAgICAgIEMyRihtUHJvZmlsZUxldmVsLCBsZXZlbCkub25lT2YoeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIEMyQ29uZmlnOjpMRVZFTF9VTlVTRUQKKyAgICAgICAgICAgICAgICAgICAgfSkKKyAgICAgICAgICAgICAgICB9KQorICAgICAgICAgICAgICAgIC53aXRoU2V0dGVyKFByb2ZpbGVMZXZlbFNldHRlcikKKyAgICAgICAgICAgICAgICAuYnVpbGQoKSk7CisgICAgfQorCisgICAgdWludDMyX3QgZ2V0U2FtcGxlUmF0ZSgpIGNvbnN0IHsgcmV0dXJuIG1TYW1wbGVSYXRlLT52YWx1ZTsgfQorICAgIHVpbnQzMl90IGdldENoYW5uZWxDb3VudCgpIGNvbnN0IHsgcmV0dXJuIG1DaGFubmVsQ291bnQtPnZhbHVlOyB9CisgICAgdWludDMyX3QgZ2V0Qml0cmF0ZSgpIGNvbnN0IHsgcmV0dXJuIG1CaXRyYXRlLT52YWx1ZTsgfQorICAgIHN0YXRpYyBDMlIgUHJvZmlsZUxldmVsU2V0dGVyKGJvb2wgbWF5QmxvY2ssIEMyUDxDMlN0cmVhbVByb2ZpbGVMZXZlbEluZm86Om91dHB1dD4gJm1lKSB7CisgICAgICAgICh2b2lkKW1heUJsb2NrOworICAgICAgICAodm9pZCltZTsgIC8vIFRPRE86IHZhbGlkYXRlCisgICAgICAgIHJldHVybiBDMlI6Ok9rKCk7CisgICAgfQorCisgICAgc3RhdGljIEMyUiBNYXhCdWZTaXplQ2FsY3VsYXRvcigKKyAgICAgICAgICAgIGJvb2wgbWF5QmxvY2ssCisgICAgICAgICAgICBDMlA8QzJTdHJlYW1NYXhCdWZmZXJTaXplSW5mbzo6aW5wdXQ+ICZtZSwKKyAgICAgICAgICAgIGNvbnN0IEMyUDxDMlN0cmVhbUNoYW5uZWxDb3VudEluZm86OmlucHV0PiAmY2hhbm5lbENvdW50KSB7CisgICAgICAgICh2b2lkKW1heUJsb2NrOworICAgICAgICBtZS5zZXQoKS52YWx1ZSA9IDEwMjQgKiBzaXplb2Yoc2hvcnQpICogY2hhbm5lbENvdW50LnYudmFsdWU7CisgICAgICAgIHJldHVybiBDMlI6Ok9rKCk7CisgICAgfQorCitwcml2YXRlOgorICAgIHN0ZDo6c2hhcmVkX3B0cjxDMlN0cmVhbUZvcm1hdENvbmZpZzo6aW5wdXQ+IG1JbnB1dEZvcm1hdDsKKyAgICBzdGQ6OnNoYXJlZF9wdHI8QzJTdHJlYW1Gb3JtYXRDb25maWc6Om91dHB1dD4gbU91dHB1dEZvcm1hdDsKKyAgICBzdGQ6OnNoYXJlZF9wdHI8QzJQb3J0TWltZUNvbmZpZzo6aW5wdXQ+IG1JbnB1dE1lZGlhVHlwZTsKKyAgICBzdGQ6OnNoYXJlZF9wdHI8QzJQb3J0TWltZUNvbmZpZzo6b3V0cHV0PiBtT3V0cHV0TWVkaWFUeXBlOworICAgIHN0ZDo6c2hhcmVkX3B0cjxDMlN0cmVhbVNhbXBsZVJhdGVJbmZvOjppbnB1dD4gbVNhbXBsZVJhdGU7CisgICAgc3RkOjpzaGFyZWRfcHRyPEMyU3RyZWFtQ2hhbm5lbENvdW50SW5mbzo6aW5wdXQ+IG1DaGFubmVsQ291bnQ7CisgICAgc3RkOjpzaGFyZWRfcHRyPEMyQml0cmF0ZVR1bmluZzo6b3V0cHV0PiBtQml0cmF0ZTsKKyAgICBzdGQ6OnNoYXJlZF9wdHI8QzJTdHJlYW1NYXhCdWZmZXJTaXplSW5mbzo6aW5wdXQ+IG1JbnB1dE1heEJ1ZlNpemU7CisgICAgc3RkOjpzaGFyZWRfcHRyPEMyU3RyZWFtUHJvZmlsZUxldmVsSW5mbzo6b3V0cHV0PiBtUHJvZmlsZUxldmVsOworfTsKKworY29uc3RleHByIGNoYXIgQ09NUE9ORU5UX05BTUVbXSA9ICJjMi5hbmRyb2lkLmFhYy5lbmNvZGVyIjsKKworQzJTb2Z0QWFjRW5jOjpDMlNvZnRBYWNFbmMoCisgICAgICAgIGNvbnN0IGNoYXIgKm5hbWUsCisgICAgICAgIGMyX25vZGVfaWRfdCBpZCwKKyAgICAgICAgY29uc3Qgc3RkOjpzaGFyZWRfcHRyPEludGZJbXBsPiAmaW50ZkltcGwpCisgICAgOiBTaW1wbGVDMkNvbXBvbmVudChzdGQ6Om1ha2Vfc2hhcmVkPFNpbXBsZUludGVyZmFjZTxJbnRmSW1wbD4+KG5hbWUsIGlkLCBpbnRmSW1wbCkpLAorICAgICAgbUludGYoaW50ZkltcGwpLAorICAgICAgbUFBQ0VuY29kZXIobnVsbHB0ciksCisgICAgICBtU0JSTW9kZSgtMSksCisgICAgICBtU0JSUmF0aW8oMCksCisgICAgICBtQUFDUHJvZmlsZShBT1RfQUFDX0xDKSwKKyAgICAgIG1OdW1CeXRlc1BlcklucHV0RnJhbWUoMHUpLAorICAgICAgbU91dEJ1ZmZlclNpemUoMHUpLAorICAgICAgbVNlbnRDb2RlY1NwZWNpZmljRGF0YShmYWxzZSksCisgICAgICBtSW5wdXRTaXplKDApLAorICAgICAgbUlucHV0VGltZVVzKC0xbGwpLAorICAgICAgbVNpZ25hbGxlZEVycm9yKGZhbHNlKSwKKyAgICAgIG1PdXRJbmRleCgwdSkgeworfQorCitDMlNvZnRBYWNFbmM6On5DMlNvZnRBYWNFbmMoKSB7CisgICAgb25SZXNldCgpOworfQorCitjMl9zdGF0dXNfdCBDMlNvZnRBYWNFbmM6Om9uSW5pdCgpIHsKKyAgICBzdGF0dXNfdCBlcnIgPSBpbml0RW5jb2RlcigpOworICAgIHJldHVybiBlcnIgPT0gT0sgPyBDMl9PSyA6IEMyX0NPUlJVUFRFRDsKK30KKworc3RhdHVzX3QgQzJTb2Z0QWFjRW5jOjppbml0RW5jb2RlcigpIHsKKyAgICBpZiAoQUFDRU5DX09LICE9IGFhY0VuY09wZW4oJm1BQUNFbmNvZGVyLCAwLCAwKSkgeworICAgICAgICBBTE9HRSgiRmFpbGVkIHRvIGluaXQgQUFDIGVuY29kZXIiKTsKKyAgICAgICAgcmV0dXJuIFVOS05PV05fRVJST1I7CisgICAgfQorICAgIHJldHVybiBzZXRBdWRpb1BhcmFtcygpOworfQorCitjMl9zdGF0dXNfdCBDMlNvZnRBYWNFbmM6Om9uU3RvcCgpIHsKKyAgICBtU2VudENvZGVjU3BlY2lmaWNEYXRhID0gZmFsc2U7CisgICAgbUlucHV0U2l6ZSA9IDB1OworICAgIG1JbnB1dFRpbWVVcyA9IC0xbGw7CisgICAgbVNpZ25hbGxlZEVycm9yID0gZmFsc2U7CisgICAgcmV0dXJuIEMyX09LOworfQorCit2b2lkIEMyU29mdEFhY0VuYzo6b25SZXNldCgpIHsKKyAgICAodm9pZClvblN0b3AoKTsKKyAgICBhYWNFbmNDbG9zZSgmbUFBQ0VuY29kZXIpOworfQorCit2b2lkIEMyU29mdEFhY0VuYzo6b25SZWxlYXNlKCkgeworICAgIC8vIG5vLW9wCit9CisKK2MyX3N0YXR1c190IEMyU29mdEFhY0VuYzo6b25GbHVzaF9zbSgpIHsKKyAgICBtU2VudENvZGVjU3BlY2lmaWNEYXRhID0gZmFsc2U7CisgICAgbUlucHV0U2l6ZSA9IDB1OworICAgIHJldHVybiBDMl9PSzsKK30KKworc3RhdGljIENIQU5ORUxfTU9ERSBnZXRDaGFubmVsTW9kZSh1aW50MzJfdCBuQ2hhbm5lbHMpIHsKKyAgICBDSEFOTkVMX01PREUgY2hNb2RlID0gTU9ERV9JTlZBTElEOworICAgIHN3aXRjaCAobkNoYW5uZWxzKSB7CisgICAgICAgIGNhc2UgMTogY2hNb2RlID0gTU9ERV8xOyBicmVhazsKKyAgICAgICAgY2FzZSAyOiBjaE1vZGUgPSBNT0RFXzI7IGJyZWFrOworICAgICAgICBjYXNlIDM6IGNoTW9kZSA9IE1PREVfMV8yOyBicmVhazsKKyAgICAgICAgY2FzZSA0OiBjaE1vZGUgPSBNT0RFXzFfMl8xOyBicmVhazsKKyAgICAgICAgY2FzZSA1OiBjaE1vZGUgPSBNT0RFXzFfMl8yOyBicmVhazsKKyAgICAgICAgY2FzZSA2OiBjaE1vZGUgPSBNT0RFXzFfMl8yXzE7IGJyZWFrOworICAgICAgICBkZWZhdWx0OiBjaE1vZGUgPSBNT0RFX0lOVkFMSUQ7CisgICAgfQorICAgIHJldHVybiBjaE1vZGU7Cit9CisKKy8vc3RhdGljIEFVRElPX09CSkVDVF9UWVBFIGdldEFPVEZyb21Qcm9maWxlKE9NWF9VMzIgcHJvZmlsZSkgeworLy8gICAgaWYgKHByb2ZpbGUgPT0gT01YX0FVRElPX0FBQ09iamVjdExDKSB7CisvLyAgICAgICAgcmV0dXJuIEFPVF9BQUNfTEM7CisvLyAgICB9IGVsc2UgaWYgKHByb2ZpbGUgPT0gT01YX0FVRElPX0FBQ09iamVjdEhFKSB7CisvLyAgICAgICAgcmV0dXJuIEFPVF9TQlI7CisvLyAgICB9IGVsc2UgaWYgKHByb2ZpbGUgPT0gT01YX0FVRElPX0FBQ09iamVjdEhFX1BTKSB7CisvLyAgICAgICAgcmV0dXJuIEFPVF9QUzsKKy8vICAgIH0gZWxzZSBpZiAocHJvZmlsZSA9PSBPTVhfQVVESU9fQUFDT2JqZWN0TEQpIHsKKy8vICAgICAgICByZXR1cm4gQU9UX0VSX0FBQ19MRDsKKy8vICAgIH0gZWxzZSBpZiAocHJvZmlsZSA9PSBPTVhfQVVESU9fQUFDT2JqZWN0RUxEKSB7CisvLyAgICAgICAgcmV0dXJuIEFPVF9FUl9BQUNfRUxEOworLy8gICAgfSBlbHNlIHsKKy8vICAgICAgICBBTE9HVygiVW5zdXBwb3J0ZWQgQUFDIHByb2ZpbGUgLSBkZWZhdWx0aW5nIHRvIEFBQy1MQyIpOworLy8gICAgICAgIHJldHVybiBBT1RfQUFDX0xDOworLy8gICAgfQorLy99CisKK3N0YXR1c190IEMyU29mdEFhY0VuYzo6c2V0QXVkaW9QYXJhbXMoKSB7CisgICAgLy8gV2UgY2FsbCB0aGlzIHdoZW5ldmVyIHNhbXBsZSByYXRlLCBudW1iZXIgb2YgY2hhbm5lbHMsIGJpdHJhdGUgb3IgU0JSIG1vZGUgY2hhbmdlCisgICAgLy8gaW4gcmVwb25zZSB0byBzZXRQYXJhbWV0ZXIgY2FsbHMuCisKKyAgICBBTE9HVigic2V0QXVkaW9QYXJhbXM6ICV1IEh6LCAldSBjaGFubmVscywgJXUgYnBzLCAlaSBzYnIgbW9kZSwgJWkgc2JyIHJhdGlvIiwKKyAgICAgICAgIG1JbnRmLT5nZXRTYW1wbGVSYXRlKCksIG1JbnRmLT5nZXRDaGFubmVsQ291bnQoKSwgbUludGYtPmdldEJpdHJhdGUoKSwgbVNCUk1vZGUsIG1TQlJSYXRpbyk7CisKKyAgICBpZiAoQUFDRU5DX09LICE9IGFhY0VuY29kZXJfU2V0UGFyYW0obUFBQ0VuY29kZXIsIEFBQ0VOQ19BT1QsIG1BQUNQcm9maWxlKSkgeworICAgICAgICBBTE9HRSgiRmFpbGVkIHRvIHNldCBBQUMgZW5jb2RlciBwYXJhbWV0ZXJzIik7CisgICAgICAgIHJldHVybiBVTktOT1dOX0VSUk9SOworICAgIH0KKworICAgIGlmIChBQUNFTkNfT0sgIT0gYWFjRW5jb2Rlcl9TZXRQYXJhbShtQUFDRW5jb2RlciwgQUFDRU5DX1NBTVBMRVJBVEUsIG1JbnRmLT5nZXRTYW1wbGVSYXRlKCkpKSB7CisgICAgICAgIEFMT0dFKCJGYWlsZWQgdG8gc2V0IEFBQyBlbmNvZGVyIHBhcmFtZXRlcnMiKTsKKyAgICAgICAgcmV0dXJuIFVOS05PV05fRVJST1I7CisgICAgfQorICAgIGlmIChBQUNFTkNfT0sgIT0gYWFjRW5jb2Rlcl9TZXRQYXJhbShtQUFDRW5jb2RlciwgQUFDRU5DX0JJVFJBVEUsIG1JbnRmLT5nZXRCaXRyYXRlKCkpKSB7CisgICAgICAgIEFMT0dFKCJGYWlsZWQgdG8gc2V0IEFBQyBlbmNvZGVyIHBhcmFtZXRlcnMiKTsKKyAgICAgICAgcmV0dXJuIFVOS05PV05fRVJST1I7CisgICAgfQorICAgIGlmIChBQUNFTkNfT0sgIT0gYWFjRW5jb2Rlcl9TZXRQYXJhbShtQUFDRW5jb2RlciwgQUFDRU5DX0NIQU5ORUxNT0RFLAorICAgICAgICAgICAgZ2V0Q2hhbm5lbE1vZGUobUludGYtPmdldENoYW5uZWxDb3VudCgpKSkpIHsKKyAgICAgICAgQUxPR0UoIkZhaWxlZCB0byBzZXQgQUFDIGVuY29kZXIgcGFyYW1ldGVycyIpOworICAgICAgICByZXR1cm4gVU5LTk9XTl9FUlJPUjsKKyAgICB9CisgICAgaWYgKEFBQ0VOQ19PSyAhPSBhYWNFbmNvZGVyX1NldFBhcmFtKG1BQUNFbmNvZGVyLCBBQUNFTkNfVFJBTlNNVVgsIFRUX01QNF9SQVcpKSB7CisgICAgICAgIEFMT0dFKCJGYWlsZWQgdG8gc2V0IEFBQyBlbmNvZGVyIHBhcmFtZXRlcnMiKTsKKyAgICAgICAgcmV0dXJuIFVOS05PV05fRVJST1I7CisgICAgfQorCisgICAgaWYgKG1TQlJNb2RlICE9IC0xICYmIG1BQUNQcm9maWxlID09IEFPVF9FUl9BQUNfRUxEKSB7CisgICAgICAgIGlmIChBQUNFTkNfT0sgIT0gYWFjRW5jb2Rlcl9TZXRQYXJhbShtQUFDRW5jb2RlciwgQUFDRU5DX1NCUl9NT0RFLCBtU0JSTW9kZSkpIHsKKyAgICAgICAgICAgIEFMT0dFKCJGYWlsZWQgdG8gc2V0IEFBQyBlbmNvZGVyIHBhcmFtZXRlcnMiKTsKKyAgICAgICAgICAgIHJldHVybiBVTktOT1dOX0VSUk9SOworICAgICAgICB9CisgICAgfQorCisgICAgLyogU0JSIHJhdGlvIHBhcmFtZXRlciBjb25maWd1cmF0aW9uczoKKyAgICAgICAwOiBEZWZhdWx0IGNvbmZpZ3VyYXRpb24gd2hlcmVpbiBTQlIgcmF0aW8gaXMgY29uZmlndXJlZCBkZXBlbmRpbmcgb24gYXVkaW8gb2JqZWN0IHR5cGUgYnkKKyAgICAgICAgICB0aGUgRkRLLgorICAgICAgIDE6IERvd25zYW1wbGVkIFNCUiAoZGVmYXVsdCBmb3IgRUxEKQorICAgICAgIDI6IER1YWxyYXRlIFNCUiAoZGVmYXVsdCBmb3IgSEUtQUFDKQorICAgICAqLworICAgIGlmIChBQUNFTkNfT0sgIT0gYWFjRW5jb2Rlcl9TZXRQYXJhbShtQUFDRW5jb2RlciwgQUFDRU5DX1NCUl9SQVRJTywgbVNCUlJhdGlvKSkgeworICAgICAgICBBTE9HRSgiRmFpbGVkIHRvIHNldCBBQUMgZW5jb2RlciBwYXJhbWV0ZXJzIik7CisgICAgICAgIHJldHVybiBVTktOT1dOX0VSUk9SOworICAgIH0KKworICAgIHJldHVybiBPSzsKK30KKwordm9pZCBDMlNvZnRBYWNFbmM6OnByb2Nlc3MoCisgICAgICAgIGNvbnN0IHN0ZDo6dW5pcXVlX3B0cjxDMldvcms+ICZ3b3JrLAorICAgICAgICBjb25zdCBzdGQ6OnNoYXJlZF9wdHI8QzJCbG9ja1Bvb2w+ICZwb29sKSB7CisgICAgLy8gSW5pdGlhbGl6ZSBvdXRwdXQgd29yaworICAgIHdvcmstPnJlc3VsdCA9IEMyX09LOworICAgIHdvcmstPndvcmtsZXRzUHJvY2Vzc2VkID0gMXU7CisgICAgd29yay0+d29ya2xldHMuZnJvbnQoKS0+b3V0cHV0LmZsYWdzID0gd29yay0+aW5wdXQuZmxhZ3M7CisKKyAgICBpZiAobVNpZ25hbGxlZEVycm9yKSB7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgYm9vbCBlb3MgPSAod29yay0+aW5wdXQuZmxhZ3MgJiBDMkZyYW1lRGF0YTo6RkxBR19FTkRfT0ZfU1RSRUFNKSAhPSAwOworCisgICAgdWludDMyX3Qgc2FtcGxlUmF0ZSA9IG1JbnRmLT5nZXRTYW1wbGVSYXRlKCk7CisgICAgdWludDMyX3QgY2hhbm5lbENvdW50ID0gbUludGYtPmdldENoYW5uZWxDb3VudCgpOworCisgICAgaWYgKCFtU2VudENvZGVjU3BlY2lmaWNEYXRhKSB7CisgICAgICAgIC8vIFRoZSB2ZXJ5IGZpcnN0IHRoaW5nIHdlIHdhbnQgdG8gb3V0cHV0IGlzIHRoZSBjb2RlYyBzcGVjaWZpYworICAgICAgICAvLyBkYXRhLgorCisgICAgICAgIGlmIChBQUNFTkNfT0sgIT0gYWFjRW5jRW5jb2RlKG1BQUNFbmNvZGVyLCBudWxscHRyLCBudWxscHRyLCBudWxscHRyLCBudWxscHRyKSkgeworICAgICAgICAgICAgQUxPR0UoIlVuYWJsZSB0byBpbml0aWFsaXplIGVuY29kZXIgZm9yIHByb2ZpbGUgLyBzYW1wbGUtcmF0ZSAvIGJpdC1yYXRlIC8gY2hhbm5lbHMiKTsKKyAgICAgICAgICAgIG1TaWduYWxsZWRFcnJvciA9IHRydWU7CisgICAgICAgICAgICB3b3JrLT5yZXN1bHQgPSBDMl9DT1JSVVBURUQ7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICB1aW50MzJfdCBiaXRyYXRlID0gbUludGYtPmdldEJpdHJhdGUoKTsKKyAgICAgICAgdWludDMyX3QgYWN0dWFsQml0UmF0ZSA9IGFhY0VuY29kZXJfR2V0UGFyYW0obUFBQ0VuY29kZXIsIEFBQ0VOQ19CSVRSQVRFKTsKKyAgICAgICAgaWYgKGJpdHJhdGUgIT0gYWN0dWFsQml0UmF0ZSkgeworICAgICAgICAgICAgQUxPR1coIlJlcXVlc3RlZCBiaXRyYXRlICV1IHVuc3VwcG9ydGVkLCB1c2luZyAldSIsIGJpdHJhdGUsIGFjdHVhbEJpdFJhdGUpOworICAgICAgICB9CisKKyAgICAgICAgQUFDRU5DX0luZm9TdHJ1Y3QgZW5jSW5mbzsKKyAgICAgICAgaWYgKEFBQ0VOQ19PSyAhPSBhYWNFbmNJbmZvKG1BQUNFbmNvZGVyLCAmZW5jSW5mbykpIHsKKyAgICAgICAgICAgIEFMT0dFKCJGYWlsZWQgdG8gZ2V0IEFBQyBlbmNvZGVyIGluZm8iKTsKKyAgICAgICAgICAgIG1TaWduYWxsZWRFcnJvciA9IHRydWU7CisgICAgICAgICAgICB3b3JrLT5yZXN1bHQgPSBDMl9DT1JSVVBURUQ7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICBzdGQ6OnVuaXF1ZV9wdHI8QzJTdHJlYW1Dc2RJbmZvOjpvdXRwdXQ+IGNzZCA9CisgICAgICAgICAgICBDMlN0cmVhbUNzZEluZm86Om91dHB1dDo6QWxsb2NVbmlxdWUoZW5jSW5mby5jb25mU2l6ZSwgMHUpOworICAgICAgICBpZiAoIWNzZCkgeworICAgICAgICAgICAgQUxPR0UoIkNTRCBhbGxvY2F0aW9uIGZhaWxlZCIpOworICAgICAgICAgICAgbVNpZ25hbGxlZEVycm9yID0gdHJ1ZTsKKyAgICAgICAgICAgIHdvcmstPnJlc3VsdCA9IEMyX05PX01FTU9SWTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICBtZW1jcHkoY3NkLT5tLnZhbHVlLCBlbmNJbmZvLmNvbmZCdWYsIGVuY0luZm8uY29uZlNpemUpOworICAgICAgICBBTE9HVigicHV0IGNzZCIpOworI2lmIGRlZmluZWQoTE9HX05ERUJVRykgJiYgIUxPR19OREVCVUcKKyAgICAgICAgaGV4ZHVtcChjc2QtPm0udmFsdWUsIGNzZC0+ZmxleENvdW50KCkpOworI2VuZGlmCisgICAgICAgIHdvcmstPndvcmtsZXRzLmZyb250KCktPm91dHB1dC5jb25maWdVcGRhdGUucHVzaF9iYWNrKHN0ZDo6bW92ZShjc2QpKTsKKworICAgICAgICBtT3V0QnVmZmVyU2l6ZSA9IGVuY0luZm8ubWF4T3V0QnVmQnl0ZXM7CisgICAgICAgIG1OdW1CeXRlc1BlcklucHV0RnJhbWUgPSBlbmNJbmZvLmZyYW1lTGVuZ3RoICogY2hhbm5lbENvdW50ICogc2l6ZW9mKGludDE2X3QpOworICAgICAgICBtSW5wdXRUaW1lVXMgPSB3b3JrLT5pbnB1dC5vcmRpbmFsLnRpbWVzdGFtcDsKKworICAgICAgICBtU2VudENvZGVjU3BlY2lmaWNEYXRhID0gdHJ1ZTsKKyAgICB9CisKKyAgICB1aW50OF90IHRlbXBbMV07CisgICAgQzJSZWFkVmlldyB2aWV3ID0gbUR1bW15UmVhZFZpZXc7CisgICAgY29uc3QgdWludDhfdCAqZGF0YSA9IHRlbXA7CisgICAgc2l6ZV90IGNhcGFjaXR5ID0gMHU7CisgICAgaWYgKCF3b3JrLT5pbnB1dC5idWZmZXJzLmVtcHR5KCkpIHsKKyAgICAgICAgdmlldyA9IHdvcmstPmlucHV0LmJ1ZmZlcnNbMF0tPmRhdGEoKS5saW5lYXJCbG9ja3MoKS5mcm9udCgpLm1hcCgpLmdldCgpOworICAgICAgICBkYXRhID0gdmlldy5kYXRhKCk7CisgICAgICAgIGNhcGFjaXR5ID0gdmlldy5jYXBhY2l0eSgpOworICAgIH0KKworICAgIHNpemVfdCBudW1GcmFtZXMgPSAoY2FwYWNpdHkgKyBtSW5wdXRTaXplICsgKGVvcyA/IG1OdW1CeXRlc1BlcklucHV0RnJhbWUgLSAxIDogMCkpCisgICAgICAgICAgICAvIG1OdW1CeXRlc1BlcklucHV0RnJhbWU7CisgICAgQUxPR1YoImNhcGFjaXR5ID0gJXp1OyBtSW5wdXRTaXplID0gJXp1OyBudW1GcmFtZXMgPSAlenUgbU51bUJ5dGVzUGVySW5wdXRGcmFtZSA9ICV1IiwKKyAgICAgICAgICBjYXBhY2l0eSwgbUlucHV0U2l6ZSwgbnVtRnJhbWVzLCBtTnVtQnl0ZXNQZXJJbnB1dEZyYW1lKTsKKworICAgIHN0ZDo6c2hhcmVkX3B0cjxDMkxpbmVhckJsb2NrPiBibG9jazsKKyAgICBzdGQ6OnNoYXJlZF9wdHI8QzJCdWZmZXI+IGJ1ZmZlcjsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8QzJXcml0ZVZpZXc+IHdWaWV3OworICAgIHVpbnQ4X3QgKm91dFB0ciA9IHRlbXA7CisgICAgc2l6ZV90IG91dEF2YWlsYWJsZSA9IDB1OworICAgIHVpbnQ2NF90IGlucHV0SW5kZXggPSB3b3JrLT5pbnB1dC5vcmRpbmFsLmZyYW1lSW5kZXgucGVla3UoKTsKKworICAgIEFBQ0VOQ19JbkFyZ3MgaW5hcmdzOworICAgIEFBQ0VOQ19PdXRBcmdzIG91dGFyZ3M7CisgICAgbWVtc2V0KCZpbmFyZ3MsIDAsIHNpemVvZihpbmFyZ3MpKTsKKyAgICBtZW1zZXQoJm91dGFyZ3MsIDAsIHNpemVvZihvdXRhcmdzKSk7CisgICAgaW5hcmdzLm51bUluU2FtcGxlcyA9IGNhcGFjaXR5IC8gc2l6ZW9mKGludDE2X3QpOworCisgICAgdm9pZCogaW5CdWZmZXJbXSAgICAgICAgPSB7ICh1bnNpZ25lZCBjaGFyICopZGF0YSB9OworICAgIElOVCAgIGluQnVmZmVySWRzW10gICAgID0geyBJTl9BVURJT19EQVRBIH07CisgICAgSU5UICAgaW5CdWZmZXJTaXplW10gICAgPSB7IChJTlQpY2FwYWNpdHkgfTsKKyAgICBJTlQgICBpbkJ1ZmZlckVsU2l6ZVtdICA9IHsgc2l6ZW9mKGludDE2X3QpIH07CisKKyAgICBBQUNFTkNfQnVmRGVzYyBpbkJ1ZkRlc2M7CisgICAgaW5CdWZEZXNjLm51bUJ1ZnMgICAgICAgICAgID0gc2l6ZW9mKGluQnVmZmVyKSAvIHNpemVvZih2b2lkKik7CisgICAgaW5CdWZEZXNjLmJ1ZnMgICAgICAgICAgICAgID0gKHZvaWQqKikmaW5CdWZmZXI7CisgICAgaW5CdWZEZXNjLmJ1ZmZlcklkZW50aWZpZXJzID0gaW5CdWZmZXJJZHM7CisgICAgaW5CdWZEZXNjLmJ1ZlNpemVzICAgICAgICAgID0gaW5CdWZmZXJTaXplOworICAgIGluQnVmRGVzYy5idWZFbFNpemVzICAgICAgICA9IGluQnVmZmVyRWxTaXplOworCisgICAgdm9pZCogb3V0QnVmZmVyW10gICAgICAgPSB7IG91dFB0ciB9OworICAgIElOVCAgIG91dEJ1ZmZlcklkc1tdICAgID0geyBPVVRfQklUU1RSRUFNX0RBVEEgfTsKKyAgICBJTlQgICBvdXRCdWZmZXJTaXplW10gICA9IHsgMCB9OworICAgIElOVCAgIG91dEJ1ZmZlckVsU2l6ZVtdID0geyBzaXplb2YoVUNIQVIpIH07CisKKyAgICBBQUNFTkNfQnVmRGVzYyBvdXRCdWZEZXNjOworICAgIG91dEJ1ZkRlc2MubnVtQnVmcyAgICAgICAgICAgPSBzaXplb2Yob3V0QnVmZmVyKSAvIHNpemVvZih2b2lkKik7CisgICAgb3V0QnVmRGVzYy5idWZzICAgICAgICAgICAgICA9ICh2b2lkKiopJm91dEJ1ZmZlcjsKKyAgICBvdXRCdWZEZXNjLmJ1ZmZlcklkZW50aWZpZXJzID0gb3V0QnVmZmVySWRzOworICAgIG91dEJ1ZkRlc2MuYnVmU2l6ZXMgICAgICAgICAgPSBvdXRCdWZmZXJTaXplOworICAgIG91dEJ1ZkRlc2MuYnVmRWxTaXplcyAgICAgICAgPSBvdXRCdWZmZXJFbFNpemU7CisKKyAgICBBQUNFTkNfRVJST1IgZW5jb2RlckVyciA9IEFBQ0VOQ19PSzsKKworICAgIGNsYXNzIEZpbGxXb3JrIHsKKyAgICBwdWJsaWM6CisgICAgICAgIEZpbGxXb3JrKHVpbnQzMl90IGZsYWdzLCBDMldvcmtPcmRpbmFsU3RydWN0IG9yZGluYWwsCisgICAgICAgICAgICAgICAgIGNvbnN0IHN0ZDo6c2hhcmVkX3B0cjxDMkJ1ZmZlcj4gJmJ1ZmZlcikKKyAgICAgICAgICAgIDogbUZsYWdzKGZsYWdzKSwgbU9yZGluYWwob3JkaW5hbCksIG1CdWZmZXIoYnVmZmVyKSB7CisgICAgICAgIH0KKyAgICAgICAgfkZpbGxXb3JrKCkgPSBkZWZhdWx0OworCisgICAgICAgIHZvaWQgb3BlcmF0b3IoKShjb25zdCBzdGQ6OnVuaXF1ZV9wdHI8QzJXb3JrPiAmd29yaykgeworICAgICAgICAgICAgd29yay0+d29ya2xldHMuZnJvbnQoKS0+b3V0cHV0LmZsYWdzID0gKEMyRnJhbWVEYXRhOjpmbGFnc190KW1GbGFnczsKKyAgICAgICAgICAgIHdvcmstPndvcmtsZXRzLmZyb250KCktPm91dHB1dC5idWZmZXJzLmNsZWFyKCk7CisgICAgICAgICAgICB3b3JrLT53b3JrbGV0cy5mcm9udCgpLT5vdXRwdXQub3JkaW5hbCA9IG1PcmRpbmFsOworICAgICAgICAgICAgd29yay0+d29ya2xldHNQcm9jZXNzZWQgPSAxdTsKKyAgICAgICAgICAgIHdvcmstPnJlc3VsdCA9IEMyX09LOworICAgICAgICAgICAgaWYgKG1CdWZmZXIpIHsKKyAgICAgICAgICAgICAgICB3b3JrLT53b3JrbGV0cy5mcm9udCgpLT5vdXRwdXQuYnVmZmVycy5wdXNoX2JhY2sobUJ1ZmZlcik7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBBTE9HVigidGltZXN0YW1wID0gJWxsZCwgaW5kZXggPSAlbGxkLCB3LyVzIGJ1ZmZlciIsCisgICAgICAgICAgICAgICAgICBtT3JkaW5hbC50aW1lc3RhbXAucGVla2xsKCksCisgICAgICAgICAgICAgICAgICBtT3JkaW5hbC5mcmFtZUluZGV4LnBlZWtsbCgpLAorICAgICAgICAgICAgICAgICAgbUJ1ZmZlciA/ICIiIDogIm8iKTsKKyAgICAgICAgfQorCisgICAgcHJpdmF0ZToKKyAgICAgICAgY29uc3QgdWludDMyX3QgbUZsYWdzOworICAgICAgICBjb25zdCBDMldvcmtPcmRpbmFsU3RydWN0IG1PcmRpbmFsOworICAgICAgICBjb25zdCBzdGQ6OnNoYXJlZF9wdHI8QzJCdWZmZXI+IG1CdWZmZXI7CisgICAgfTsKKworICAgIEMyV29ya09yZGluYWxTdHJ1Y3Qgb3V0T3JkaW5hbCA9IHdvcmstPmlucHV0Lm9yZGluYWw7CisKKyAgICB3aGlsZSAoZW5jb2RlckVyciA9PSBBQUNFTkNfT0sgJiYgaW5hcmdzLm51bUluU2FtcGxlcyA+IDApIHsKKyAgICAgICAgaWYgKG51bUZyYW1lcyAmJiAhYmxvY2spIHsKKyAgICAgICAgICAgIEMyTWVtb3J5VXNhZ2UgdXNhZ2UgPSB7IEMyTWVtb3J5VXNhZ2U6OkNQVV9SRUFELCBDMk1lbW9yeVVzYWdlOjpDUFVfV1JJVEUgfTsKKyAgICAgICAgICAgIC8vIFRPRE86IGVycm9yIGhhbmRsaW5nLCBwcm9wZXIgdXNhZ2UsIGV0Yy4KKyAgICAgICAgICAgIGMyX3N0YXR1c190IGVyciA9IHBvb2wtPmZldGNoTGluZWFyQmxvY2sobU91dEJ1ZmZlclNpemUsIHVzYWdlLCAmYmxvY2spOworICAgICAgICAgICAgaWYgKGVyciAhPSBDMl9PSykgeworICAgICAgICAgICAgICAgIEFMT0dFKCJmZXRjaExpbmVhckJsb2NrIGZhaWxlZCA6IGVyciA9ICVkIiwgZXJyKTsKKyAgICAgICAgICAgICAgICB3b3JrLT5yZXN1bHQgPSBDMl9OT19NRU1PUlk7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICB3Vmlldy5yZXNldChuZXcgQzJXcml0ZVZpZXcoYmxvY2stPm1hcCgpLmdldCgpKSk7CisgICAgICAgICAgICBvdXRQdHIgPSB3Vmlldy0+ZGF0YSgpOworICAgICAgICAgICAgb3V0QXZhaWxhYmxlID0gd1ZpZXctPnNpemUoKTsKKyAgICAgICAgICAgIC0tbnVtRnJhbWVzOworICAgICAgICB9CisKKyAgICAgICAgbWVtc2V0KCZvdXRhcmdzLCAwLCBzaXplb2Yob3V0YXJncykpOworCisgICAgICAgIG91dEJ1ZmZlclswXSA9IG91dFB0cjsKKyAgICAgICAgb3V0QnVmZmVyU2l6ZVswXSA9IG91dEF2YWlsYWJsZTsKKworICAgICAgICBlbmNvZGVyRXJyID0gYWFjRW5jRW5jb2RlKG1BQUNFbmNvZGVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZpbkJ1ZkRlc2MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJm91dEJ1ZkRlc2MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmluYXJncywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmb3V0YXJncyk7CisKKyAgICAgICAgaWYgKGVuY29kZXJFcnIgPT0gQUFDRU5DX09LKSB7CisgICAgICAgICAgICBpZiAoYnVmZmVyKSB7CisgICAgICAgICAgICAgICAgb3V0T3JkaW5hbC5mcmFtZUluZGV4ID0gbU91dEluZGV4Kys7CisgICAgICAgICAgICAgICAgb3V0T3JkaW5hbC50aW1lc3RhbXAgPSBtSW5wdXRUaW1lVXM7CisgICAgICAgICAgICAgICAgY2xvbmVBbmRTZW5kKAorICAgICAgICAgICAgICAgICAgICAgICAgaW5wdXRJbmRleCwKKyAgICAgICAgICAgICAgICAgICAgICAgIHdvcmssCisgICAgICAgICAgICAgICAgICAgICAgICBGaWxsV29yayhDMkZyYW1lRGF0YTo6RkxBR19JTkNPTVBMRVRFLCBvdXRPcmRpbmFsLCBidWZmZXIpKTsKKyAgICAgICAgICAgICAgICBidWZmZXIucmVzZXQoKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKG91dGFyZ3MubnVtT3V0Qnl0ZXMgPiAwKSB7CisgICAgICAgICAgICAgICAgbUlucHV0U2l6ZSA9IDA7CisgICAgICAgICAgICAgICAgaW50IGNvbnN1bWVkID0gKChjYXBhY2l0eSAvIHNpemVvZihpbnQxNl90KSkgLSBpbmFyZ3MubnVtSW5TYW1wbGVzKTsKKyAgICAgICAgICAgICAgICBtSW5wdXRUaW1lVXMgPSB3b3JrLT5pbnB1dC5vcmRpbmFsLnRpbWVzdGFtcAorICAgICAgICAgICAgICAgICAgICAgICAgKyAoY29uc3VtZWQgKiAxMDAwMDAwbGwgLyBjaGFubmVsQ291bnQgLyBzYW1wbGVSYXRlKTsKKyAgICAgICAgICAgICAgICBidWZmZXIgPSBjcmVhdGVMaW5lYXJCdWZmZXIoYmxvY2ssIDAsIG91dGFyZ3MubnVtT3V0Qnl0ZXMpOworI2lmIGRlZmluZWQoTE9HX05ERUJVRykgJiYgIUxPR19OREVCVUcKKyAgICAgICAgICAgICAgICBoZXhkdW1wKG91dFB0ciwgc3RkOjptaW4ob3V0YXJncy5udW1PdXRCeXRlcywgMjU2KSk7CisjZW5kaWYKKyAgICAgICAgICAgICAgICBvdXRQdHIgPSB0ZW1wOworICAgICAgICAgICAgICAgIG91dEF2YWlsYWJsZSA9IDA7CisgICAgICAgICAgICAgICAgYmxvY2sucmVzZXQoKTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgbUlucHV0U2l6ZSArPSBvdXRhcmdzLm51bUluU2FtcGxlcyAqIHNpemVvZihpbnQxNl90KTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKG91dGFyZ3MubnVtSW5TYW1wbGVzID4gMCkgeworICAgICAgICAgICAgICAgIGluQnVmZmVyWzBdID0gKGludDE2X3QgKilpbkJ1ZmZlclswXSArIG91dGFyZ3MubnVtSW5TYW1wbGVzOworICAgICAgICAgICAgICAgIGluQnVmZmVyU2l6ZVswXSAtPSBvdXRhcmdzLm51bUluU2FtcGxlcyAqIHNpemVvZihpbnQxNl90KTsKKyAgICAgICAgICAgICAgICBpbmFyZ3MubnVtSW5TYW1wbGVzIC09IG91dGFyZ3MubnVtSW5TYW1wbGVzOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIEFMT0dWKCJlbmNvZGVyRXJyID0gJWQgbUlucHV0U2l6ZSA9ICV6dSBpbmFyZ3MubnVtSW5TYW1wbGVzID0gJWQsIG1JbnB1dFRpbWVVcyA9ICVsbGQiLAorICAgICAgICAgICAgICBlbmNvZGVyRXJyLCBtSW5wdXRTaXplLCBpbmFyZ3MubnVtSW5TYW1wbGVzLCBtSW5wdXRUaW1lVXMucGVla2xsKCkpOworICAgIH0KKworICAgIGlmIChlb3MgJiYgaW5CdWZmZXJTaXplWzBdID4gMCkgeworICAgICAgICBpZiAobnVtRnJhbWVzICYmICFibG9jaykgeworICAgICAgICAgICAgQzJNZW1vcnlVc2FnZSB1c2FnZSA9IHsgQzJNZW1vcnlVc2FnZTo6Q1BVX1JFQUQsIEMyTWVtb3J5VXNhZ2U6OkNQVV9XUklURSB9OworICAgICAgICAgICAgLy8gVE9ETzogZXJyb3IgaGFuZGxpbmcsIHByb3BlciB1c2FnZSwgZXRjLgorICAgICAgICAgICAgYzJfc3RhdHVzX3QgZXJyID0gcG9vbC0+ZmV0Y2hMaW5lYXJCbG9jayhtT3V0QnVmZmVyU2l6ZSwgdXNhZ2UsICZibG9jayk7CisgICAgICAgICAgICBpZiAoZXJyICE9IEMyX09LKSB7CisgICAgICAgICAgICAgICAgQUxPR0UoImZldGNoTGluZWFyQmxvY2sgZmFpbGVkIDogZXJyID0gJWQiLCBlcnIpOworICAgICAgICAgICAgICAgIHdvcmstPnJlc3VsdCA9IEMyX05PX01FTU9SWTsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHdWaWV3LnJlc2V0KG5ldyBDMldyaXRlVmlldyhibG9jay0+bWFwKCkuZ2V0KCkpKTsKKyAgICAgICAgICAgIG91dFB0ciA9IHdWaWV3LT5kYXRhKCk7CisgICAgICAgICAgICBvdXRBdmFpbGFibGUgPSB3Vmlldy0+c2l6ZSgpOworICAgICAgICAgICAgLS1udW1GcmFtZXM7CisgICAgICAgIH0KKworICAgICAgICBtZW1zZXQoJm91dGFyZ3MsIDAsIHNpemVvZihvdXRhcmdzKSk7CisKKyAgICAgICAgb3V0QnVmZmVyWzBdID0gb3V0UHRyOworICAgICAgICBvdXRCdWZmZXJTaXplWzBdID0gb3V0QXZhaWxhYmxlOworCisgICAgICAgIC8vIEZsdXNoCisgICAgICAgIGluYXJncy5udW1JblNhbXBsZXMgPSAtMTsKKworICAgICAgICAodm9pZClhYWNFbmNFbmNvZGUobUFBQ0VuY29kZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAmaW5CdWZEZXNjLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgJm91dEJ1ZkRlc2MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAmaW5hcmdzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgJm91dGFyZ3MpOworICAgIH0KKworICAgIG91dE9yZGluYWwuZnJhbWVJbmRleCA9IG1PdXRJbmRleCsrOworICAgIG91dE9yZGluYWwudGltZXN0YW1wID0gbUlucHV0VGltZVVzOworICAgIEZpbGxXb3JrKChDMkZyYW1lRGF0YTo6ZmxhZ3NfdCkoZW9zID8gQzJGcmFtZURhdGE6OkZMQUdfRU5EX09GX1NUUkVBTSA6IDApLAorICAgICAgICAgICAgIG91dE9yZGluYWwsIGJ1ZmZlcikod29yayk7Cit9CisKK2MyX3N0YXR1c190IEMyU29mdEFhY0VuYzo6ZHJhaW4oCisgICAgICAgIHVpbnQzMl90IGRyYWluTW9kZSwKKyAgICAgICAgY29uc3Qgc3RkOjpzaGFyZWRfcHRyPEMyQmxvY2tQb29sPiAmcG9vbCkgeworICAgIHN3aXRjaCAoZHJhaW5Nb2RlKSB7CisgICAgICAgIGNhc2UgRFJBSU5fQ09NUE9ORU5UX05PX0VPUzoKKyAgICAgICAgICAgIFtbZmFsbHRocm91Z2hdXTsKKyAgICAgICAgY2FzZSBOT19EUkFJTjoKKyAgICAgICAgICAgIC8vIG5vLW9wCisgICAgICAgICAgICByZXR1cm4gQzJfT0s7CisgICAgICAgIGNhc2UgRFJBSU5fQ0hBSU46CisgICAgICAgICAgICByZXR1cm4gQzJfT01JVFRFRDsKKyAgICAgICAgY2FzZSBEUkFJTl9DT01QT05FTlRfV0lUSF9FT1M6CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIHJldHVybiBDMl9CQURfVkFMVUU7CisgICAgfQorCisgICAgKHZvaWQpcG9vbDsKKyAgICBtU2VudENvZGVjU3BlY2lmaWNEYXRhID0gZmFsc2U7CisgICAgbUlucHV0U2l6ZSA9IDB1OworCisgICAgLy8gVE9ETzogd2UgZG9uJ3QgaGF2ZSBhbnkgcGVuZGluZyB3b3JrIGF0IHRoaXMgdGltZSB0byBkcmFpbi4KKyAgICByZXR1cm4gQzJfT0s7Cit9CisKK2NsYXNzIEMyU29mdEFhY0VuY0ZhY3RvcnkgOiBwdWJsaWMgQzJDb21wb25lbnRGYWN0b3J5IHsKK3B1YmxpYzoKKyAgICBDMlNvZnRBYWNFbmNGYWN0b3J5KCkgOiBtSGVscGVyKHN0ZDo6c3RhdGljX3BvaW50ZXJfY2FzdDxDMlJlZmxlY3RvckhlbHBlcj4oCisgICAgICAgICAgICBHZXRDb2RlYzJQbGF0Zm9ybUNvbXBvbmVudFN0b3JlKCktPmdldFBhcmFtUmVmbGVjdG9yKCkpKSB7CisgICAgfQorCisgICAgdmlydHVhbCBjMl9zdGF0dXNfdCBjcmVhdGVDb21wb25lbnQoCisgICAgICAgICAgICBjMl9ub2RlX2lkX3QgaWQsCisgICAgICAgICAgICBzdGQ6OnNoYXJlZF9wdHI8QzJDb21wb25lbnQ+KiBjb25zdCBjb21wb25lbnQsCisgICAgICAgICAgICBzdGQ6OmZ1bmN0aW9uPHZvaWQoQzJDb21wb25lbnQqKT4gZGVsZXRlcikgb3ZlcnJpZGUgeworICAgICAgICAqY29tcG9uZW50ID0gc3RkOjpzaGFyZWRfcHRyPEMyQ29tcG9uZW50PigKKyAgICAgICAgICAgICAgICBuZXcgQzJTb2Z0QWFjRW5jKENPTVBPTkVOVF9OQU1FLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGQ6Om1ha2Vfc2hhcmVkPEMyU29mdEFhY0VuYzo6SW50ZkltcGw+KG1IZWxwZXIpKSwKKyAgICAgICAgICAgICAgICBkZWxldGVyKTsKKyAgICAgICAgcmV0dXJuIEMyX09LOworICAgIH0KKworICAgIHZpcnR1YWwgYzJfc3RhdHVzX3QgY3JlYXRlSW50ZXJmYWNlKAorICAgICAgICAgICAgYzJfbm9kZV9pZF90IGlkLCBzdGQ6OnNoYXJlZF9wdHI8QzJDb21wb25lbnRJbnRlcmZhY2U+KiBjb25zdCBpbnRlcmZhY2UsCisgICAgICAgICAgICBzdGQ6OmZ1bmN0aW9uPHZvaWQoQzJDb21wb25lbnRJbnRlcmZhY2UqKT4gZGVsZXRlcikgb3ZlcnJpZGUgeworICAgICAgICAqaW50ZXJmYWNlID0gc3RkOjpzaGFyZWRfcHRyPEMyQ29tcG9uZW50SW50ZXJmYWNlPigKKyAgICAgICAgICAgICAgICBuZXcgU2ltcGxlSW50ZXJmYWNlPEMyU29mdEFhY0VuYzo6SW50ZkltcGw+KAorICAgICAgICAgICAgICAgICAgICAgICAgQ09NUE9ORU5UX05BTUUsIGlkLCBzdGQ6Om1ha2Vfc2hhcmVkPEMyU29mdEFhY0VuYzo6SW50ZkltcGw+KG1IZWxwZXIpKSwKKyAgICAgICAgICAgICAgICBkZWxldGVyKTsKKyAgICAgICAgcmV0dXJuIEMyX09LOworICAgIH0KKworICAgIHZpcnR1YWwgfkMyU29mdEFhY0VuY0ZhY3RvcnkoKSBvdmVycmlkZSA9IGRlZmF1bHQ7CisKK3ByaXZhdGU6CisgICAgc3RkOjpzaGFyZWRfcHRyPEMyUmVmbGVjdG9ySGVscGVyPiBtSGVscGVyOworfTsKKworfSAgLy8gbmFtZXNwYWNlIGFuZHJvaWQKKworZXh0ZXJuICJDIiA6OkMyQ29tcG9uZW50RmFjdG9yeSogQ3JlYXRlQ29kZWMyRmFjdG9yeSgpIHsKKyAgICBBTE9HVigiaW4gJXMiLCBfX2Z1bmNfXyk7CisgICAgcmV0dXJuIG5ldyA6OmFuZHJvaWQ6OkMyU29mdEFhY0VuY0ZhY3RvcnkoKTsKK30KKworZXh0ZXJuICJDIiB2b2lkIERlc3Ryb3lDb2RlYzJGYWN0b3J5KDo6QzJDb21wb25lbnRGYWN0b3J5KiBmYWN0b3J5KSB7CisgICAgQUxPR1YoImluICVzIiwgX19mdW5jX18pOworICAgIGRlbGV0ZSBmYWN0b3J5OworfQpkaWZmIC0tZ2l0IGEvbWVkaWEvY29kZWMyL2NvbXBvbmVudHMvYWFjL0MyU29mdEFhY0VuYy5oIGIvbWVkaWEvY29kZWMyL2NvbXBvbmVudHMvYWFjL0MyU29mdEFhY0VuYy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgyZmI0MzgKLS0tIC9kZXYvbnVsbAorKysgYi9tZWRpYS9jb2RlYzIvY29tcG9uZW50cy9hYWMvQzJTb2Z0QWFjRW5jLmgKQEAgLTAsMCArMSw3NSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxOCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCisKKyNpZm5kZWYgQU5EUk9JRF9DMl9TT0ZUX0FBQ19FTkNfSF8KKyNkZWZpbmUgQU5EUk9JRF9DMl9TT0ZUX0FBQ19FTkNfSF8KKworI2luY2x1ZGUgPGF0b21pYz4KKworI2luY2x1ZGUgPFNpbXBsZUMyQ29tcG9uZW50Lmg+CisKKyNpbmNsdWRlICJhYWNlbmNfbGliLmgiCisKK25hbWVzcGFjZSBhbmRyb2lkIHsKKworY2xhc3MgQzJTb2Z0QWFjRW5jIDogcHVibGljIFNpbXBsZUMyQ29tcG9uZW50IHsKK3B1YmxpYzoKKyAgICBjbGFzcyBJbnRmSW1wbDsKKworICAgIEMyU29mdEFhY0VuYyhjb25zdCBjaGFyICpuYW1lLCBjMl9ub2RlX2lkX3QgaWQsIGNvbnN0IHN0ZDo6c2hhcmVkX3B0cjxJbnRmSW1wbD4gJmludGZJbXBsKTsKKyAgICB2aXJ0dWFsIH5DMlNvZnRBYWNFbmMoKTsKKworICAgIC8vIEZyb20gU2ltcGxlQzJDb21wb25lbnQKKyAgICBjMl9zdGF0dXNfdCBvbkluaXQoKSBvdmVycmlkZTsKKyAgICBjMl9zdGF0dXNfdCBvblN0b3AoKSBvdmVycmlkZTsKKyAgICB2b2lkIG9uUmVzZXQoKSBvdmVycmlkZTsKKyAgICB2b2lkIG9uUmVsZWFzZSgpIG92ZXJyaWRlOworICAgIGMyX3N0YXR1c190IG9uRmx1c2hfc20oKSBvdmVycmlkZTsKKyAgICB2b2lkIHByb2Nlc3MoCisgICAgICAgICAgICBjb25zdCBzdGQ6OnVuaXF1ZV9wdHI8QzJXb3JrPiAmd29yaywKKyAgICAgICAgICAgIGNvbnN0IHN0ZDo6c2hhcmVkX3B0cjxDMkJsb2NrUG9vbD4gJnBvb2wpIG92ZXJyaWRlOworICAgIGMyX3N0YXR1c190IGRyYWluKAorICAgICAgICAgICAgdWludDMyX3QgZHJhaW5Nb2RlLAorICAgICAgICAgICAgY29uc3Qgc3RkOjpzaGFyZWRfcHRyPEMyQmxvY2tQb29sPiAmcG9vbCkgb3ZlcnJpZGU7CisKK3ByaXZhdGU6CisgICAgc3RkOjpzaGFyZWRfcHRyPEludGZJbXBsPiBtSW50ZjsKKworICAgIEhBTkRMRV9BQUNFTkNPREVSIG1BQUNFbmNvZGVyOworCisgICAgaW50MzJfdCBtU0JSTW9kZTsKKyAgICBpbnQzMl90IG1TQlJSYXRpbzsKKyAgICBBVURJT19PQkpFQ1RfVFlQRSBtQUFDUHJvZmlsZTsKKyAgICBVSU5UIG1OdW1CeXRlc1BlcklucHV0RnJhbWU7CisgICAgVUlOVCBtT3V0QnVmZmVyU2l6ZTsKKworICAgIGJvb2wgbVNlbnRDb2RlY1NwZWNpZmljRGF0YTsKKyAgICBzaXplX3QgbUlucHV0U2l6ZTsKKyAgICBjMl9jbnRyNjRfdCBtSW5wdXRUaW1lVXM7CisKKyAgICBib29sIG1TaWduYWxsZWRFcnJvcjsKKyAgICBzdGQ6OmF0b21pY191aW50NjRfdCBtT3V0SW5kZXg7CisKKyAgICBzdGF0dXNfdCBpbml0RW5jb2RlcigpOworCisgICAgc3RhdHVzX3Qgc2V0QXVkaW9QYXJhbXMoKTsKKworICAgIEMyX0RPX05PVF9DT1BZKEMyU29mdEFhY0VuYyk7Cit9OworCit9ICAvLyBuYW1lc3BhY2UgYW5kcm9pZAorCisjZW5kaWYgIC8vIEFORFJPSURfQzJfU09GVF9BQUNfRU5DX0hfCmRpZmYgLS1naXQgYS9tZWRpYS9jb2RlYzIvY29tcG9uZW50cy9hYWMvRHJjUHJlc01vZGVXcmFwLmNwcCBiL21lZGlhL2NvZGVjMi9jb21wb25lbnRzL2FhYy9EcmNQcmVzTW9kZVdyYXAuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjViOWFlYmMKLS0tIC9kZXYvbnVsbAorKysgYi9tZWRpYS9jb2RlYzIvY29tcG9uZW50cy9hYWMvRHJjUHJlc01vZGVXcmFwLmNwcApAQCAtMCwwICsxLDM3MiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCisjaW5jbHVkZSAiRHJjUHJlc01vZGVXcmFwLmgiCisKKyNpbmNsdWRlIDxhc3NlcnQuaD4KKworI2RlZmluZSBMT0dfVEFHICJDMlNvZnRBYWNEcmNXcmFwcGVyIgorLy8jZGVmaW5lIExPR19OREVCVUcgMAorI2luY2x1ZGUgPHV0aWxzL0xvZy5oPgorCisvLyNkZWZpbmUgRFJDX1BSRVNfTU9ERV9XUkFQX0RFQlVHCisKKyNkZWZpbmUgR1BNX0VOQ09ERVJfVEFSR0VUX0xFVkVMIDY0CisjZGVmaW5lIE1BWF9UQVJHRVRfTEVWRUwgNDAKKworQ0RyY1ByZXNNb2RlV3JhcHBlcjo6Q0RyY1ByZXNNb2RlV3JhcHBlcigpCit7CisgICAgbURhdGFVcGRhdGUgPSB0cnVlOworCisgICAgLyogRGF0YSBmcm9tIHN0cmVhbUluZm8uICovCisgICAgLyogSW5pdGlhbGl6ZWQgdG8gdGhlIHNhbWUgdmFsdWVzIGFzIGluIHRoZSBhYWMgZGVjb2RlciAqLworICAgIG1TdHJlYW1QUkwgPSAtMTsKKyAgICBtU3RyZWFtRFJDUHJlc01vZGUgPSAtMTsKKyAgICBtU3RyZWFtTnJBQUNDaGFuID0gMDsKKyAgICBtU3RyZWFtTnJPdXRDaGFuID0gMDsKKworICAgIC8qIERlc2lyZWQgdmFsdWVzIChzZXQgYnkgdXNlcikuICovCisgICAgLyogSW5pdGlhbGl6ZWQgdG8gdGhlIHNhbWUgdmFsdWVzIGFzIGluIHRoZSBhYWMgZGVjb2RlciAqLworICAgIG1EZXNUYXJnZXQgPSAtMTsKKyAgICBtRGVzQXR0RmFjdG9yID0gMDsKKyAgICBtRGVzQm9vc3RGYWN0b3IgPSAwOworICAgIG1EZXNIZWF2eSA9IDA7CisKKyAgICBtRW5jb2RlclRhcmdldCA9IC0xOworCisgICAgLyogVmFsdWVzIGZyb20gbGFzdCB0aW1lLiAqLworICAgIC8qIEluaXRpYWxpemVkIHRvIHRoZSBzYW1lIHZhbHVlcyBhcyB0aGUgZGVzaXJlZCB2YWx1ZXMgKi8KKyAgICBtTGFzdFRhcmdldCA9IC0xOworICAgIG1MYXN0QXR0RmFjdG9yID0gMDsKKyAgICBtTGFzdEJvb3N0RmFjdG9yID0gMDsKKyAgICBtTGFzdEhlYXZ5ID0gMDsKK30KKworQ0RyY1ByZXNNb2RlV3JhcHBlcjo6fkNEcmNQcmVzTW9kZVdyYXBwZXIoKQoreworfQorCit2b2lkCitDRHJjUHJlc01vZGVXcmFwcGVyOjpzZXREZWNvZGVySGFuZGxlKGNvbnN0IEhBTkRMRV9BQUNERUNPREVSIGhhbmRsZSkKK3sKKyAgICBtSGFuZGxlRGVjb2RlciA9IGhhbmRsZTsKK30KKwordm9pZAorQ0RyY1ByZXNNb2RlV3JhcHBlcjo6c3VibWl0U3RyZWFtRGF0YShDU3RyZWFtSW5mbyogcFN0cmVhbUluZm8pCit7CisgICAgYXNzZXJ0KHBTdHJlYW1JbmZvKTsKKworICAgIGlmIChtU3RyZWFtUFJMICE9IHBTdHJlYW1JbmZvLT5kcmNQcm9nUmVmTGV2KSB7CisgICAgICAgIG1TdHJlYW1QUkwgPSBwU3RyZWFtSW5mby0+ZHJjUHJvZ1JlZkxldjsKKyAgICAgICAgbURhdGFVcGRhdGUgPSB0cnVlOworI2lmZGVmIERSQ19QUkVTX01PREVfV1JBUF9ERUJVRworICAgICAgICBBTE9HVigiRFJDIHByZXNlbnRhdGlvbiBtb2RlIHdyYXBwZXI6IGRyY1Byb2dSZWZMZXYgaXMgJWRcbiIsIG1TdHJlYW1QUkwpOworI2VuZGlmCisgICAgfQorCisgICAgaWYgKG1TdHJlYW1EUkNQcmVzTW9kZSAhPSBwU3RyZWFtSW5mby0+ZHJjUHJlc01vZGUpIHsKKyAgICAgICAgbVN0cmVhbURSQ1ByZXNNb2RlID0gcFN0cmVhbUluZm8tPmRyY1ByZXNNb2RlOworICAgICAgICBtRGF0YVVwZGF0ZSA9IHRydWU7CisjaWZkZWYgRFJDX1BSRVNfTU9ERV9XUkFQX0RFQlVHCisgICAgICAgIEFMT0dWKCJEUkMgcHJlc2VudGF0aW9uIG1vZGUgd3JhcHBlcjogZHJjUHJlc01vZGUgaXMgJWRcbiIsIG1TdHJlYW1EUkNQcmVzTW9kZSk7CisjZW5kaWYKKyAgICB9CisKKyAgICBpZiAobVN0cmVhbU5yQUFDQ2hhbiAhPSBwU3RyZWFtSW5mby0+YWFjTnVtQ2hhbm5lbHMpIHsKKyAgICAgICAgbVN0cmVhbU5yQUFDQ2hhbiA9IHBTdHJlYW1JbmZvLT5hYWNOdW1DaGFubmVsczsKKyAgICAgICAgbURhdGFVcGRhdGUgPSB0cnVlOworI2lmZGVmIERSQ19QUkVTX01PREVfV1JBUF9ERUJVRworICAgICAgICBBTE9HVigiRFJDIHByZXNlbnRhdGlvbiBtb2RlIHdyYXBwZXI6IGFhY051bUNoYW5uZWxzIGlzICVkXG4iLCBtU3RyZWFtTnJBQUNDaGFuKTsKKyNlbmRpZgorICAgIH0KKworICAgIGlmIChtU3RyZWFtTnJPdXRDaGFuICE9IHBTdHJlYW1JbmZvLT5udW1DaGFubmVscykgeworICAgICAgICBtU3RyZWFtTnJPdXRDaGFuID0gcFN0cmVhbUluZm8tPm51bUNoYW5uZWxzOworICAgICAgICBtRGF0YVVwZGF0ZSA9IHRydWU7CisjaWZkZWYgRFJDX1BSRVNfTU9ERV9XUkFQX0RFQlVHCisgICAgICAgIEFMT0dWKCJEUkMgcHJlc2VudGF0aW9uIG1vZGUgd3JhcHBlcjogbnVtQ2hhbm5lbHMgaXMgJWRcbiIsIG1TdHJlYW1Ock91dENoYW4pOworI2VuZGlmCisgICAgfQorCisKKworICAgIGlmIChtU3RyZWFtTnJPdXRDaGFuPG1TdHJlYW1OckFBQ0NoYW4pIHsKKyAgICAgICAgbUlzRG93bm1peCA9IHRydWU7CisgICAgfSBlbHNlIHsKKyAgICAgICAgbUlzRG93bm1peCA9IGZhbHNlOworICAgIH0KKworICAgIGlmIChtSXNEb3dubWl4ICYmIChtU3RyZWFtTnJPdXRDaGFuID09IDEpKSB7CisgICAgICAgIG1Jc01vbm9Eb3dubWl4ID0gdHJ1ZTsKKyAgICB9IGVsc2UgeworICAgICAgICBtSXNNb25vRG93bm1peCA9IGZhbHNlOworICAgIH0KKworICAgIGlmIChtSXNEb3dubWl4ICYmIG1TdHJlYW1Ock91dENoYW4gPT0gMil7CisgICAgICAgIG1Jc1N0ZXJlb0Rvd25taXggPSB0cnVlOworICAgIH0gZWxzZSB7CisgICAgICAgIG1Jc1N0ZXJlb0Rvd25taXggPSBmYWxzZTsKKyAgICB9CisKK30KKwordm9pZAorQ0RyY1ByZXNNb2RlV3JhcHBlcjo6c2V0UGFyYW0oY29uc3QgRFJDX1BSRVNfTU9ERV9XUkFQX1BBUkFNIHBhcmFtLCBjb25zdCBpbnQgdmFsdWUpCit7CisgICAgc3dpdGNoIChwYXJhbSkgeworICAgIGNhc2UgRFJDX1BSRVNfTU9ERV9XUkFQX0RFU0lSRURfVEFSR0VUOgorICAgICAgICBtRGVzVGFyZ2V0ID0gdmFsdWU7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgRFJDX1BSRVNfTU9ERV9XUkFQX0RFU0lSRURfQVRUX0ZBQ1RPUjoKKyAgICAgICAgbURlc0F0dEZhY3RvciA9IHZhbHVlOworICAgICAgICBicmVhazsKKyAgICBjYXNlIERSQ19QUkVTX01PREVfV1JBUF9ERVNJUkVEX0JPT1NUX0ZBQ1RPUjoKKyAgICAgICAgbURlc0Jvb3N0RmFjdG9yID0gdmFsdWU7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgRFJDX1BSRVNfTU9ERV9XUkFQX0RFU0lSRURfSEVBVlk6CisgICAgICAgIG1EZXNIZWF2eSA9IHZhbHVlOworICAgICAgICBicmVhazsKKyAgICBjYXNlIERSQ19QUkVTX01PREVfV1JBUF9FTkNPREVSX1RBUkdFVDoKKyAgICAgICAgbUVuY29kZXJUYXJnZXQgPSB2YWx1ZTsKKyAgICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgICAgYnJlYWs7CisgICAgfQorICAgIG1EYXRhVXBkYXRlID0gdHJ1ZTsKK30KKwordm9pZAorQ0RyY1ByZXNNb2RlV3JhcHBlcjo6dXBkYXRlKCkKK3sKKyAgICAvLyBHZXQgRGF0YSBmcm9tIERlY29kZXIKKyAgICBpbnQgcHJvZ1JlZkxldmVsID0gbVN0cmVhbVBSTDsKKyAgICBpbnQgZHJjUHJlc01vZGUgPSBtU3RyZWFtRFJDUHJlc01vZGU7CisKKyAgICAvLyBieSBkZWZhdWx0LCBkbyBhcyBkZXNpcmVkCisgICAgaW50IG5ld1RhcmdldCAgICAgICAgID0gbURlc1RhcmdldDsKKyAgICBpbnQgbmV3QXR0RmFjdG9yICAgICAgPSBtRGVzQXR0RmFjdG9yOworICAgIGludCBuZXdCb29zdEZhY3RvciAgICA9IG1EZXNCb29zdEZhY3RvcjsKKyAgICBpbnQgbmV3SGVhdnkgICAgICAgICAgPSBtRGVzSGVhdnk7CisKKyAgICBpZiAobURhdGFVcGRhdGUpIHsKKyAgICAgICAgLy8gc2FuaXR5IGNoZWNrCisgICAgICAgIGlmIChtRGVzVGFyZ2V0IDwgTUFYX1RBUkdFVF9MRVZFTCl7CisgICAgICAgICAgICBtRGVzVGFyZ2V0ID0gTUFYX1RBUkdFVF9MRVZFTDsgIC8vIGxpbWl0IHRhcmdldCBsZXZlbCB0byAtMTAgZEIgb3IgYmVsb3cKKyAgICAgICAgICAgIG5ld1RhcmdldCA9IE1BWF9UQVJHRVRfTEVWRUw7CisgICAgICAgIH0KKworICAgICAgICBpZiAobUVuY29kZXJUYXJnZXQgIT0gLTEpIHsKKyAgICAgICAgICAgIGlmIChtRGVzVGFyZ2V0PDEyNCkgeyAvLyBpZiB0YXJnZXQgbGV2ZWwgPiAtMzEgZEIKKyAgICAgICAgICAgICAgICBpZiAoKG1Jc1N0ZXJlb0Rvd25taXggPT0gZmFsc2UpICYmIChtSXNNb25vRG93bm1peCA9PSBmYWxzZSkpIHsKKyAgICAgICAgICAgICAgICAgICAgLy8gbm8gc3RlcmVvIG9yIG1vbm8gZG93bm1peGluZywgY2FsY3VsYXRlZCBzY2FsaW5nIG9mIGxpZ2h0IERSQworICAgICAgICAgICAgICAgICAgICAvKiB1c2UgYXMgbGl0dGxlIGNvbXByZXNzaW9uIGFzIHBvc3NpYmxlICovCisgICAgICAgICAgICAgICAgICAgIG5ld0F0dEZhY3RvciA9IDA7CisgICAgICAgICAgICAgICAgICAgIG5ld0Jvb3N0RmFjdG9yID0gMDsKKyAgICAgICAgICAgICAgICAgICAgaWYgKG1EZXNUYXJnZXQ8cHJvZ1JlZkxldmVsKSB7IC8vIGlmIHRhcmdldCBsZXZlbCA+IFBSTAorICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1FbmNvZGVyVGFyZ2V0IDwgbURlc1RhcmdldCkgeyAvLyBpZiBtRW5jb2RlclRhcmdldCA+IHRhcmdldCBsZXZlbAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIG1FbmNvZGVyVGFyZ2V0ID4gdGFyZ2V0IGxldmVsID4gUFJMCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGNhbGNGYWN0b3I7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmxvYXQgY2FsY0ZhY3Rvcl9ub3JtOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIDAuMGYgPCBjYWxjRmFjdG9yX25vcm0gPCAxLjBmCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FsY0ZhY3Rvcl9ub3JtID0gKGZsb2F0KShtRGVzVGFyZ2V0IC0gcHJvZ1JlZkxldmVsKSAvCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoZmxvYXQpKG1FbmNvZGVyVGFyZ2V0IC0gcHJvZ1JlZkxldmVsKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYWxjRmFjdG9yID0gKGludCkoY2FsY0ZhY3Rvcl9ub3JtKjEyNy4wZik7IC8vIDAgPD0gY2FsY0ZhY3RvciA8IDEyNworICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGNhbGNGYWN0b3IgaXMgdGhlIGxvd2VyIGxpbWl0CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3QXR0RmFjdG9yID0gKGNhbGNGYWN0b3I+bmV3QXR0RmFjdG9yKSA/IGNhbGNGYWN0b3IgOiBuZXdBdHRGYWN0b3I7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gbmV3IEF0dEZhY3RvciB3aWxsIGJlIGFsd2F5cyA9IGNhbGNGYWN0b3IsIGFzIGl0IGlzIHNldCB0byAwIGJlZm9yZS4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXdCb29zdEZhY3RvciA9IG5ld0F0dEZhY3RvcjsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdGFyZ2V0IGxldmVsID4gbUVuY29kZXJUYXJnZXQgPiBQUkwgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBuZXdURExpbWl0ZXJFbmFibGUgPSAxOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHRoZSB0aW1lIGRvbWFpbiBsaW1pdGVyIG11c3QgYWx3YXlzIGJlIGFjdGl2ZSBpbiB0aGlzIGNhc2UuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gICAgIEl0IGlzIGFzc3VtZWQgdGhhdCB0aGUgZnJhbWV3b3JrIGFjdGl2YXRlcyBpdCBieSBkZWZhdWx0CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3QXR0RmFjdG9yID0gMTI3OworICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ld0Jvb3N0RmFjdG9yID0gMTI3OworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICB9IGVsc2UgeyAvLyB0YXJnZXQgbGV2ZWwgPD0gUFJMCisgICAgICAgICAgICAgICAgICAgICAgICAvLyBubyByZXN0cmljdGlvbnMgcmVxdWlyZWQKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIG5ld0F0dEZhY3RvciA9IG5ld0F0dEZhY3RvcjsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0gZWxzZSB7IC8vIGRvd25taXhpbmcKKyAgICAgICAgICAgICAgICAgICAgLy8gaWYgdGFyZ2V0IGxldmVsID4gLTIzIGRCIG9yIG1vbm8gZG93bm1peAorICAgICAgICAgICAgICAgICAgICBpZiAoIChtRGVzVGFyZ2V0PDkyKSB8fCBtSXNNb25vRG93bm1peCApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIG5ld0hlYXZ5ID0gMTsKKyAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIHdlIHBlcmZvcm0gYSBkb3dubWl4LCBzbywgd2UgbmVlZCBhdCBsZWFzdCBmdWxsIGxpZ2h0IERSQworICAgICAgICAgICAgICAgICAgICAgICAgbmV3QXR0RmFjdG9yID0gMTI3OworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfSBlbHNlIHsgLy8gdGFyZ2V0IGxldmVsIDw9IC0zMSBkQgorICAgICAgICAgICAgICAgIC8vIHBsYXliYWNrIC0zMSBkQjogbGlnaHQgRFJDIG9ubHkgbmVlZGVkIGlmIHdlIHBlcmZvcm0gZG93bm1peGluZworICAgICAgICAgICAgICAgIGlmIChtSXNEb3dubWl4KSB7ICAgLy8gd2UgZG8gZG93bm1peGluZworICAgICAgICAgICAgICAgICAgICBuZXdBdHRGYWN0b3IgPSAxMjc7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGVsc2UgeyAvLyBoYW5kbGUgb3RoZXIgdXNlZCBlbmNvZGVyIHRhcmdldCBsZXZlbHMKKworICAgICAgICAgICAgLy8gU2FuaXR5IGNoZWNrOiBEUkMgcHJlc2VudGF0aW9uIG1vZGUgaXMgb25seSBzcGVjaWZpZWQgZm9yIG1heC4gNS4xIGNoYW5uZWxzCisgICAgICAgICAgICBpZiAobVN0cmVhbU5yQUFDQ2hhbiA+IDYpIHsKKyAgICAgICAgICAgICAgICBkcmNQcmVzTW9kZSA9IDA7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHN3aXRjaCAoZHJjUHJlc01vZGUpIHsKKyAgICAgICAgICAgIGNhc2UgMDoKKyAgICAgICAgICAgIGRlZmF1bHQ6IC8vIHByZXNlbnRhdGlvbiBtb2RlIG5vdCBpbmRpY2F0ZWQKKyAgICAgICAgICAgIHsKKworICAgICAgICAgICAgICAgIGlmIChtRGVzVGFyZ2V0PDEyNCkgeyAvLyBpZiB0YXJnZXQgbGV2ZWwgPiAtMzEgZEIKKyAgICAgICAgICAgICAgICAgICAgLy8gbm8gc3RlcmVvIG9yIG1vbm8gZG93bm1peGluZworICAgICAgICAgICAgICAgICAgICBpZiAoKG1Jc1N0ZXJlb0Rvd25taXggPT0gZmFsc2UpICYmIChtSXNNb25vRG93bm1peCA9PSBmYWxzZSkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtRGVzVGFyZ2V0PHByb2dSZWZMZXZlbCkgeyAvLyBpZiB0YXJnZXQgbGV2ZWwgPiBQUkwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBuZXdURExpbWl0ZXJFbmFibGUgPSAxOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHRoZSB0aW1lIGRvbWFpbiBsaW1pdGVyIG11c3QgYWx3YXlzIGJlIGFjdGl2ZSBpbiB0aGlzIGNhc2UuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gICAgSXQgaXMgYXNzdW1lZCB0aGF0IHRoZSBmcmFtZXdvcmsgYWN0aXZhdGVzIGl0IGJ5IGRlZmF1bHQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXdBdHRGYWN0b3IgPSAxMjc7IC8vIGF0IGxlYXN0LCB1c2UgbGlnaHQgY29tcHJlc3Npb24KKyAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7IC8vIHRhcmdldCBsZXZlbCA8PSBQUkwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBubyByZXN0cmljdGlvbnMgcmVxdWlyZWQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBuZXdBdHRGYWN0b3IgPSBuZXdBdHRGYWN0b3I7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7IC8vIGRvd25taXhpbmcKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIG5ld1RETGltaXRlckVuYWJsZSA9IDE7CisgICAgICAgICAgICAgICAgICAgICAgICAvLyB0aGUgdGltZSBkb21haW4gbGltaXRlciBtdXN0IGFsd2F5cyBiZSBhY3RpdmUgaW4gdGhpcyBjYXNlLgorICAgICAgICAgICAgICAgICAgICAgICAgLy8gICAgSXQgaXMgYXNzdW1lZCB0aGF0IHRoZSBmcmFtZXdvcmsgYWN0aXZhdGVzIGl0IGJ5IGRlZmF1bHQKKworICAgICAgICAgICAgICAgICAgICAgICAgLy8gaWYgdGFyZ2V0IGxldmVsID4gLTIzIGRCIG9yIG1vbm8gZG93bm1peAorICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCAobURlc1RhcmdldCA8IDkyKSB8fCBtSXNNb25vRG93bm1peCApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXdIZWF2eSA9IDE7CisgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2V7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gd2UgcGVyZm9ybSBhIGRvd25taXgsIHNvLCB3ZSBuZWVkIGF0IGxlYXN0IGZ1bGwgbGlnaHQgRFJDCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3QXR0RmFjdG9yID0gMTI3OworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfSBlbHNlIHsgLy8gdGFyZ2V0IGxldmVsIDw9IC0zMSBkQgorICAgICAgICAgICAgICAgICAgICBpZiAobUlzRG93bm1peCkgeyAgIC8vIHdlIGRvIGRvd25taXhpbmcuCisgICAgICAgICAgICAgICAgICAgICAgICAvLyBuZXdURExpbWl0ZXJFbmFibGUgPSAxOworICAgICAgICAgICAgICAgICAgICAgICAgLy8gdGhlIHRpbWUgZG9tYWluIGxpbWl0ZXIgbXVzdCBhbHdheXMgYmUgYWN0aXZlIGluIHRoaXMgY2FzZS4KKyAgICAgICAgICAgICAgICAgICAgICAgIC8vICAgIEl0IGlzIGFzc3VtZWQgdGhhdCB0aGUgZnJhbWV3b3JrIGFjdGl2YXRlcyBpdCBieSBkZWZhdWx0CisgICAgICAgICAgICAgICAgICAgICAgICBuZXdBdHRGYWN0b3IgPSAxMjc7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgLy8gUHJlc2VudGF0aW9uIG1vZGUgMSBhbmQgMiBhY2NvcmRpbmcgdG8gRVRTSSBUUyAxMDEgMTU0OgorICAgICAgICAgICAgLy8gRGlnaXRhbCBWaWRlbyBCcm9hZGNhc3RpbmcgKERWQik7IFNwZWNpZmljYXRpb24gZm9yIHRoZSB1c2Ugb2YgVmlkZW8gYW5kIEF1ZGlvIENvZGluZworICAgICAgICAgICAgLy8gaW4gQnJvYWRjYXN0aW5nIEFwcGxpY2F0aW9ucyBiYXNlZCBvbiB0aGUgTVBFRy0yIFRyYW5zcG9ydCBTdHJlYW0sCisgICAgICAgICAgICAvLyBzZWN0aW9uIEMuNS40LiwgIkRlY29kaW5nIiwgYW5kIFRhYmxlIEMuMzMKKyAgICAgICAgICAgIC8vIElTTyBEUkMgICAgICAgICAgICAtPiBuZXdIZWF2eSA9IDAgIChVc2UgbGlnaHQgY29tcHJlc3Npb24sIE1QRUctc3R5bGUpCisgICAgICAgICAgICAvLyBDb21wcmVzc2lvbl92YWx1ZSAgLT4gbmV3SGVhdnkgPSAxICAoVXNlIGhlYXZ5IGNvbXByZXNzaW9uLCBEVkItc3R5bGUpCisgICAgICAgICAgICAvLyBzY2FsaW5nIHJlc3RyaWN0ZWQgLT4gbmV3QXR0RmFjdG9yID0gMTI3CisKKyAgICAgICAgICAgIGNhc2UgMTogLy8gcHJlc2VudGF0aW9uIG1vZGUgMSwgTGlnaHQ6LTMxL0hlYXZ5Oi0yMworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGlmIChtRGVzVGFyZ2V0IDwgMTI0KSB7IC8vIGlmIHRhcmdldCBsZXZlbCA+IC0zMSBkQgorICAgICAgICAgICAgICAgICAgICAvLyBwbGF5YmFjayB1cCB0byAtMjMgZEIKKyAgICAgICAgICAgICAgICAgICAgbmV3SGVhdnkgPSAxOworICAgICAgICAgICAgICAgIH0gZWxzZSB7IC8vIHRhcmdldCBsZXZlbCA8PSAtMzEgZEIKKyAgICAgICAgICAgICAgICAgICAgLy8gcGxheWJhY2sgLTMxIGRCCisgICAgICAgICAgICAgICAgICAgIGlmIChtSXNEb3dubWl4KSB7ICAgLy8gd2UgZG8gZG93bm1peGluZy4KKyAgICAgICAgICAgICAgICAgICAgICAgIG5ld0F0dEZhY3RvciA9IDEyNzsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICBjYXNlIDI6IC8vIHByZXNlbnRhdGlvbiBtb2RlIDIsIExpZ2h0Oi0yMy9IZWF2eTotMjMKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBpZiAobURlc1RhcmdldCA8IDEyNCkgeyAvLyBpZiB0YXJnZXQgbGV2ZWwgPiAtMzEgZEIKKyAgICAgICAgICAgICAgICAgICAgLy8gcGxheWJhY2sgdXAgdG8gLTIzIGRCCisgICAgICAgICAgICAgICAgICAgIGlmIChtSXNNb25vRG93bm1peCkgeyAvLyBpZiBtb25vIGRvd25taXgKKyAgICAgICAgICAgICAgICAgICAgICAgIG5ld0hlYXZ5ID0gMTsKKyAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIG5ld0hlYXZ5ID0gMDsKKyAgICAgICAgICAgICAgICAgICAgICAgIG5ld0F0dEZhY3RvciA9IDEyNzsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0gZWxzZSB7IC8vIHRhcmdldCBsZXZlbCA8PSAtMzEgZEIKKyAgICAgICAgICAgICAgICAgICAgLy8gcGxheWJhY2sgLTMxIGRCCisgICAgICAgICAgICAgICAgICAgIG5ld0hlYXZ5ID0gMDsKKyAgICAgICAgICAgICAgICAgICAgaWYgKG1Jc0Rvd25taXgpIHsgICAvLyB3ZSBkbyBkb3dubWl4aW5nLgorICAgICAgICAgICAgICAgICAgICAgICAgbmV3QXR0RmFjdG9yID0gMTI3OworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgIH0gLy8gc3dpdGNoKCkKKyAgICAgICAgfSAvLyBpZiAobUVuY29kZXJUYXJnZXQgID09IEdQTV9FTkNPREVSX1RBUkdFVF9MRVZFTCkKKworICAgICAgICAvLyBzYW5pdHkgYWdhaW4KKyAgICAgICAgaWYgKG5ld0hlYXZ5ID09IDEpIHsKKyAgICAgICAgICAgIG5ld0Jvb3N0RmFjdG9yPTEyNzsgLy8gbm90IHJlYWxseSBuZWVkZWQgYXMgdGhlIHNhbWUgd291bGQgYmUgZG9uZSBieSB0aGUgZGVjb2RlciBhbnl3YXkKKyAgICAgICAgICAgIG5ld0F0dEZhY3RvciA9IDEyNzsKKyAgICAgICAgfQorCisgICAgICAgIC8vIHVwZGF0ZSB0aGUgZGVjb2RlcgorICAgICAgICBpZiAobmV3VGFyZ2V0ICE9IG1MYXN0VGFyZ2V0KSB7CisgICAgICAgICAgICBhYWNEZWNvZGVyX1NldFBhcmFtKG1IYW5kbGVEZWNvZGVyLCBBQUNfRFJDX1JFRkVSRU5DRV9MRVZFTCwgbmV3VGFyZ2V0KTsKKyAgICAgICAgICAgIG1MYXN0VGFyZ2V0ID0gbmV3VGFyZ2V0OworI2lmZGVmIERSQ19QUkVTX01PREVfV1JBUF9ERUJVRworICAgICAgICAgICAgaWYgKG5ld1RhcmdldCAhPSBtRGVzVGFyZ2V0KQorICAgICAgICAgICAgICAgIEFMT0dWKCJEUkMgcHJlc2VudGF0aW9uIG1vZGUgd3JhcHBlcjogZm9yY2VkIHRhcmdldCBsZXZlbCB0byAlZCAoZnJvbSAlZClcbiIsIG5ld1RhcmdldCwgbURlc1RhcmdldCk7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgQUxPR1YoIkRSQyBwcmVzZW50YXRpb24gbW9kZSB3cmFwcGVyOiBzZXQgdGFyZ2V0IGxldmVsIHRvICVkXG4iLCBuZXdUYXJnZXQpOworI2VuZGlmCisgICAgICAgIH0KKworICAgICAgICBpZiAobmV3QXR0RmFjdG9yICE9IG1MYXN0QXR0RmFjdG9yKSB7CisgICAgICAgICAgICBhYWNEZWNvZGVyX1NldFBhcmFtKG1IYW5kbGVEZWNvZGVyLCBBQUNfRFJDX0FUVEVOVUFUSU9OX0ZBQ1RPUiwgbmV3QXR0RmFjdG9yKTsKKyAgICAgICAgICAgIG1MYXN0QXR0RmFjdG9yID0gbmV3QXR0RmFjdG9yOworI2lmZGVmIERSQ19QUkVTX01PREVfV1JBUF9ERUJVRworICAgICAgICAgICAgaWYgKG5ld0F0dEZhY3RvciAhPSBtRGVzQXR0RmFjdG9yKQorICAgICAgICAgICAgICAgIEFMT0dWKCJEUkMgcHJlc2VudGF0aW9uIG1vZGUgd3JhcHBlcjogZm9yY2VkIGF0dGVudWF0aW9uIGZhY3RvciB0byAlZCAoZnJvbSAlZClcbiIsIG5ld0F0dEZhY3RvciwgbURlc0F0dEZhY3Rvcik7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgQUxPR1YoIkRSQyBwcmVzZW50YXRpb24gbW9kZSB3cmFwcGVyOiBzZXQgYXR0ZW51YXRpb24gZmFjdG9yIHRvICVkXG4iLCBuZXdBdHRGYWN0b3IpOworI2VuZGlmCisgICAgICAgIH0KKworICAgICAgICBpZiAobmV3Qm9vc3RGYWN0b3IgIT0gbUxhc3RCb29zdEZhY3RvcikgeworICAgICAgICAgICAgYWFjRGVjb2Rlcl9TZXRQYXJhbShtSGFuZGxlRGVjb2RlciwgQUFDX0RSQ19CT09TVF9GQUNUT1IsIG5ld0Jvb3N0RmFjdG9yKTsKKyAgICAgICAgICAgIG1MYXN0Qm9vc3RGYWN0b3IgPSBuZXdCb29zdEZhY3RvcjsKKyNpZmRlZiBEUkNfUFJFU19NT0RFX1dSQVBfREVCVUcKKyAgICAgICAgICAgIGlmIChuZXdCb29zdEZhY3RvciAhPSBtRGVzQm9vc3RGYWN0b3IpCisgICAgICAgICAgICAgICAgQUxPR1YoIkRSQyBwcmVzZW50YXRpb24gbW9kZSB3cmFwcGVyOiBmb3JjZWQgYm9vc3QgZmFjdG9yIHRvICVkIChmcm9tICVkKVxuIiwKKyAgICAgICAgICAgICAgICAgICAgICAgIG5ld0Jvb3N0RmFjdG9yLCBtRGVzQm9vc3RGYWN0b3IpOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIEFMT0dWKCJEUkMgcHJlc2VudGF0aW9uIG1vZGUgd3JhcHBlcjogc2V0IGJvb3N0IGZhY3RvciB0byAlZFxuIiwgbmV3Qm9vc3RGYWN0b3IpOworI2VuZGlmCisgICAgICAgIH0KKworICAgICAgICBpZiAobmV3SGVhdnkgIT0gbUxhc3RIZWF2eSkgeworICAgICAgICAgICAgYWFjRGVjb2Rlcl9TZXRQYXJhbShtSGFuZGxlRGVjb2RlciwgQUFDX0RSQ19IRUFWWV9DT01QUkVTU0lPTiwgbmV3SGVhdnkpOworICAgICAgICAgICAgbUxhc3RIZWF2eSA9IG5ld0hlYXZ5OworI2lmZGVmIERSQ19QUkVTX01PREVfV1JBUF9ERUJVRworICAgICAgICAgICAgaWYgKG5ld0hlYXZ5ICE9IG1EZXNIZWF2eSkKKyAgICAgICAgICAgICAgICBBTE9HVigiRFJDIHByZXNlbnRhdGlvbiBtb2RlIHdyYXBwZXI6IGZvcmNlZCBoZWF2eSBjb21wcmVzc2lvbiB0byAlZCAoZnJvbSAlZClcbiIsCisgICAgICAgICAgICAgICAgICAgICAgICBuZXdIZWF2eSwgbURlc0hlYXZ5KTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBBTE9HVigiRFJDIHByZXNlbnRhdGlvbiBtb2RlIHdyYXBwZXI6IHNldCBoZWF2eSBjb21wcmVzc2lvbiB0byAlZFxuIiwgbmV3SGVhdnkpOworI2VuZGlmCisgICAgICAgIH0KKworI2lmZGVmIERSQ19QUkVTX01PREVfV1JBUF9ERUJVRworICAgICAgICBBTE9HVigiRFJDIGNvbmZpZzogdGd0X2xldjogJTNkLCBjdXQ6ICUzZCwgYm9vc3Q6ICUzZCwgaGVhdnk6ICVkXG4iLCBuZXdUYXJnZXQsCisgICAgICAgICAgICAgICAgbmV3QXR0RmFjdG9yLCBuZXdCb29zdEZhY3RvciwgbmV3SGVhdnkpOworI2VuZGlmCisgICAgICAgIG1EYXRhVXBkYXRlID0gZmFsc2U7CisKKyAgICB9IC8vIGlmIChtRGF0YVVwZGF0ZSkKK30KZGlmZiAtLWdpdCBhL21lZGlhL2NvZGVjMi9jb21wb25lbnRzL2FhYy9EcmNQcmVzTW9kZVdyYXAuaCBiL21lZGlhL2NvZGVjMi9jb21wb25lbnRzL2FhYy9EcmNQcmVzTW9kZVdyYXAuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mMGI2Y2YyCi0tLSAvZGV2L251bGwKKysrIGIvbWVkaWEvY29kZWMyL2NvbXBvbmVudHMvYWFjL0RyY1ByZXNNb2RlV3JhcC5oCkBAIC0wLDAgKzEsNjIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworI3ByYWdtYSBvbmNlCisjaW5jbHVkZSAiYWFjZGVjb2Rlcl9saWIuaCIKKwordHlwZWRlZiBlbnVtCit7CisgICAgRFJDX1BSRVNfTU9ERV9XUkFQX0RFU0lSRURfVEFSR0VUICAgICAgICAgPSAweDAwMDAsCisgICAgRFJDX1BSRVNfTU9ERV9XUkFQX0RFU0lSRURfQVRUX0ZBQ1RPUiAgICAgPSAweDAwMDEsCisgICAgRFJDX1BSRVNfTU9ERV9XUkFQX0RFU0lSRURfQk9PU1RfRkFDVE9SICAgPSAweDAwMDIsCisgICAgRFJDX1BSRVNfTU9ERV9XUkFQX0RFU0lSRURfSEVBVlkgICAgICAgICAgPSAweDAwMDMsCisgICAgRFJDX1BSRVNfTU9ERV9XUkFQX0VOQ09ERVJfVEFSR0VUICAgICAgICAgPSAweDAwMDQKK30gRFJDX1BSRVNfTU9ERV9XUkFQX1BBUkFNOworCisKK2NsYXNzIENEcmNQcmVzTW9kZVdyYXBwZXIgeworcHVibGljOgorICAgIENEcmNQcmVzTW9kZVdyYXBwZXIoKTsKKyAgICB+Q0RyY1ByZXNNb2RlV3JhcHBlcigpOworICAgIHZvaWQgc2V0RGVjb2RlckhhbmRsZShjb25zdCBIQU5ETEVfQUFDREVDT0RFUiBoYW5kbGUpOworICAgIHZvaWQgc2V0UGFyYW0oY29uc3QgRFJDX1BSRVNfTU9ERV9XUkFQX1BBUkFNIHBhcmFtLCBjb25zdCBpbnQgdmFsdWUpOworICAgIHZvaWQgc3VibWl0U3RyZWFtRGF0YShDU3RyZWFtSW5mbyopOworICAgIHZvaWQgdXBkYXRlKCk7CisKK3Byb3RlY3RlZDoKKyAgICBIQU5ETEVfQUFDREVDT0RFUiBtSGFuZGxlRGVjb2RlcjsKKyAgICBpbnQgbURlc1RhcmdldDsKKyAgICBpbnQgbURlc0F0dEZhY3RvcjsKKyAgICBpbnQgbURlc0Jvb3N0RmFjdG9yOworICAgIGludCBtRGVzSGVhdnk7CisKKyAgICBpbnQgbUVuY29kZXJUYXJnZXQ7CisKKyAgICBpbnQgbUxhc3RUYXJnZXQ7CisgICAgaW50IG1MYXN0QXR0RmFjdG9yOworICAgIGludCBtTGFzdEJvb3N0RmFjdG9yOworICAgIGludCBtTGFzdEhlYXZ5OworCisgICAgU0NIQVIgbVN0cmVhbVBSTDsKKyAgICBTQ0hBUiBtU3RyZWFtRFJDUHJlc01vZGU7CisgICAgSU5UIG1TdHJlYW1OckFBQ0NoYW47CisgICAgSU5UIG1TdHJlYW1Ock91dENoYW47CisKKyAgICBib29sIG1Jc0Rvd25taXg7CisgICAgYm9vbCBtSXNNb25vRG93bm1peDsKKyAgICBib29sIG1Jc1N0ZXJlb0Rvd25taXg7CisKKyAgICBib29sIG1EYXRhVXBkYXRlOworfTsKZGlmZiAtLWdpdCBhL21lZGlhL2NvZGVjMi9jb21wb25lbnRzL2FhYy9NT0RVTEVfTElDRU5TRV9BUEFDSEUyIGIvbWVkaWEvY29kZWMyL2NvbXBvbmVudHMvYWFjL01PRFVMRV9MSUNFTlNFX0FQQUNIRTIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTY5ZGUyOQotLS0gL2Rldi9udWxsCisrKyBiL21lZGlhL2NvZGVjMi9jb21wb25lbnRzL2FhYy9NT0RVTEVfTElDRU5TRV9BUEFDSEUyCmRpZmYgLS1naXQgYS9tZWRpYS9jb2RlYzIvY29tcG9uZW50cy9hYWMvTk9USUNFIGIvbWVkaWEvY29kZWMyL2NvbXBvbmVudHMvYWFjL05PVElDRQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNWIxZWZhCi0tLSAvZGV2L251bGwKKysrIGIvbWVkaWEvY29kZWMyL2NvbXBvbmVudHMvYWFjL05PVElDRQpAQCAtMCwwICsxLDE5MCBAQAorCisgICBDb3B5cmlnaHQgKGMpIDIwMDUtMjAwOCwgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorCisgICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAgIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKworICAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAgIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisKKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQXBhY2hlIExpY2Vuc2UKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIFZlcnNpb24gMi4wLCBKYW51YXJ5IDIwMDQKKyAgICAgICAgICAgICAgICAgICAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy8KKworICAgVEVSTVMgQU5EIENPTkRJVElPTlMgRk9SIFVTRSwgUkVQUk9EVUNUSU9OLCBBTkQgRElTVFJJQlVUSU9OCisKKyAgIDEuIERlZmluaXRpb25zLgorCisgICAgICAiTGljZW5zZSIgc2hhbGwgbWVhbiB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgZm9yIHVzZSwgcmVwcm9kdWN0aW9uLAorICAgICAgYW5kIGRpc3RyaWJ1dGlvbiBhcyBkZWZpbmVkIGJ5IFNlY3Rpb25zIDEgdGhyb3VnaCA5IG9mIHRoaXMgZG9jdW1lbnQuCisKKyAgICAgICJMaWNlbnNvciIgc2hhbGwgbWVhbiB0aGUgY29weXJpZ2h0IG93bmVyIG9yIGVudGl0eSBhdXRob3JpemVkIGJ5CisgICAgICB0aGUgY29weXJpZ2h0IG93bmVyIHRoYXQgaXMgZ3JhbnRpbmcgdGhlIExpY2Vuc2UuCisKKyAgICAgICJMZWdhbCBFbnRpdHkiIHNoYWxsIG1lYW4gdGhlIHVuaW9uIG9mIHRoZSBhY3RpbmcgZW50aXR5IGFuZCBhbGwKKyAgICAgIG90aGVyIGVudGl0aWVzIHRoYXQgY29udHJvbCwgYXJlIGNvbnRyb2xsZWQgYnksIG9yIGFyZSB1bmRlciBjb21tb24KKyAgICAgIGNvbnRyb2wgd2l0aCB0aGF0IGVudGl0eS4gRm9yIHRoZSBwdXJwb3NlcyBvZiB0aGlzIGRlZmluaXRpb24sCisgICAgICAiY29udHJvbCIgbWVhbnMgKGkpIHRoZSBwb3dlciwgZGlyZWN0IG9yIGluZGlyZWN0LCB0byBjYXVzZSB0aGUKKyAgICAgIGRpcmVjdGlvbiBvciBtYW5hZ2VtZW50IG9mIHN1Y2ggZW50aXR5LCB3aGV0aGVyIGJ5IGNvbnRyYWN0IG9yCisgICAgICBvdGhlcndpc2UsIG9yIChpaSkgb3duZXJzaGlwIG9mIGZpZnR5IHBlcmNlbnQgKDUwJSkgb3IgbW9yZSBvZiB0aGUKKyAgICAgIG91dHN0YW5kaW5nIHNoYXJlcywgb3IgKGlpaSkgYmVuZWZpY2lhbCBvd25lcnNoaXAgb2Ygc3VjaCBlbnRpdHkuCisKKyAgICAgICJZb3UiIChvciAiWW91ciIpIHNoYWxsIG1lYW4gYW4gaW5kaXZpZHVhbCBvciBMZWdhbCBFbnRpdHkKKyAgICAgIGV4ZXJjaXNpbmcgcGVybWlzc2lvbnMgZ3JhbnRlZCBieSB0aGlzIExpY2Vuc2UuCisKKyAgICAgICJTb3VyY2UiIGZvcm0gc2hhbGwgbWVhbiB0aGUgcHJlZmVycmVkIGZvcm0gZm9yIG1ha2luZyBtb2RpZmljYXRpb25zLAorICAgICAgaW5jbHVkaW5nIGJ1dCBub3QgbGltaXRlZCB0byBzb2Z0d2FyZSBzb3VyY2UgY29kZSwgZG9jdW1lbnRhdGlvbgorICAgICAgc291cmNlLCBhbmQgY29uZmlndXJhdGlvbiBmaWxlcy4KKworICAgICAgIk9iamVjdCIgZm9ybSBzaGFsbCBtZWFuIGFueSBmb3JtIHJlc3VsdGluZyBmcm9tIG1lY2hhbmljYWwKKyAgICAgIHRyYW5zZm9ybWF0aW9uIG9yIHRyYW5zbGF0aW9uIG9mIGEgU291cmNlIGZvcm0sIGluY2x1ZGluZyBidXQKKyAgICAgIG5vdCBsaW1pdGVkIHRvIGNvbXBpbGVkIG9iamVjdCBjb2RlLCBnZW5lcmF0ZWQgZG9jdW1lbnRhdGlvbiwKKyAgICAgIGFuZCBjb252ZXJzaW9ucyB0byBvdGhlciBtZWRpYSB0eXBlcy4KKworICAgICAgIldvcmsiIHNoYWxsIG1lYW4gdGhlIHdvcmsgb2YgYXV0aG9yc2hpcCwgd2hldGhlciBpbiBTb3VyY2Ugb3IKKyAgICAgIE9iamVjdCBmb3JtLCBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgTGljZW5zZSwgYXMgaW5kaWNhdGVkIGJ5IGEKKyAgICAgIGNvcHlyaWdodCBub3RpY2UgdGhhdCBpcyBpbmNsdWRlZCBpbiBvciBhdHRhY2hlZCB0byB0aGUgd29yaworICAgICAgKGFuIGV4YW1wbGUgaXMgcHJvdmlkZWQgaW4gdGhlIEFwcGVuZGl4IGJlbG93KS4KKworICAgICAgIkRlcml2YXRpdmUgV29ya3MiIHNoYWxsIG1lYW4gYW55IHdvcmssIHdoZXRoZXIgaW4gU291cmNlIG9yIE9iamVjdAorICAgICAgZm9ybSwgdGhhdCBpcyBiYXNlZCBvbiAob3IgZGVyaXZlZCBmcm9tKSB0aGUgV29yayBhbmQgZm9yIHdoaWNoIHRoZQorICAgICAgZWRpdG9yaWFsIHJldmlzaW9ucywgYW5ub3RhdGlvbnMsIGVsYWJvcmF0aW9ucywgb3Igb3RoZXIgbW9kaWZpY2F0aW9ucworICAgICAgcmVwcmVzZW50LCBhcyBhIHdob2xlLCBhbiBvcmlnaW5hbCB3b3JrIG9mIGF1dGhvcnNoaXAuIEZvciB0aGUgcHVycG9zZXMKKyAgICAgIG9mIHRoaXMgTGljZW5zZSwgRGVyaXZhdGl2ZSBXb3JrcyBzaGFsbCBub3QgaW5jbHVkZSB3b3JrcyB0aGF0IHJlbWFpbgorICAgICAgc2VwYXJhYmxlIGZyb20sIG9yIG1lcmVseSBsaW5rIChvciBiaW5kIGJ5IG5hbWUpIHRvIHRoZSBpbnRlcmZhY2VzIG9mLAorICAgICAgdGhlIFdvcmsgYW5kIERlcml2YXRpdmUgV29ya3MgdGhlcmVvZi4KKworICAgICAgIkNvbnRyaWJ1dGlvbiIgc2hhbGwgbWVhbiBhbnkgd29yayBvZiBhdXRob3JzaGlwLCBpbmNsdWRpbmcKKyAgICAgIHRoZSBvcmlnaW5hbCB2ZXJzaW9uIG9mIHRoZSBXb3JrIGFuZCBhbnkgbW9kaWZpY2F0aW9ucyBvciBhZGRpdGlvbnMKKyAgICAgIHRvIHRoYXQgV29yayBvciBEZXJpdmF0aXZlIFdvcmtzIHRoZXJlb2YsIHRoYXQgaXMgaW50ZW50aW9uYWxseQorICAgICAgc3VibWl0dGVkIHRvIExpY2Vuc29yIGZvciBpbmNsdXNpb24gaW4gdGhlIFdvcmsgYnkgdGhlIGNvcHlyaWdodCBvd25lcgorICAgICAgb3IgYnkgYW4gaW5kaXZpZHVhbCBvciBMZWdhbCBFbnRpdHkgYXV0aG9yaXplZCB0byBzdWJtaXQgb24gYmVoYWxmIG9mCisgICAgICB0aGUgY29weXJpZ2h0IG93bmVyLiBGb3IgdGhlIHB1cnBvc2VzIG9mIHRoaXMgZGVmaW5pdGlvbiwgInN1Ym1pdHRlZCIKKyAgICAgIG1lYW5zIGFueSBmb3JtIG9mIGVsZWN0cm9uaWMsIHZlcmJhbCwgb3Igd3JpdHRlbiBjb21tdW5pY2F0aW9uIHNlbnQKKyAgICAgIHRvIHRoZSBMaWNlbnNvciBvciBpdHMgcmVwcmVzZW50YXRpdmVzLCBpbmNsdWRpbmcgYnV0IG5vdCBsaW1pdGVkIHRvCisgICAgICBjb21tdW5pY2F0aW9uIG9uIGVsZWN0cm9uaWMgbWFpbGluZyBsaXN0cywgc291cmNlIGNvZGUgY29udHJvbCBzeXN0ZW1zLAorICAgICAgYW5kIGlzc3VlIHRyYWNraW5nIHN5c3RlbXMgdGhhdCBhcmUgbWFuYWdlZCBieSwgb3Igb24gYmVoYWxmIG9mLCB0aGUKKyAgICAgIExpY2Vuc29yIGZvciB0aGUgcHVycG9zZSBvZiBkaXNjdXNzaW5nIGFuZCBpbXByb3ZpbmcgdGhlIFdvcmssIGJ1dAorICAgICAgZXhjbHVkaW5nIGNvbW11bmljYXRpb24gdGhhdCBpcyBjb25zcGljdW91c2x5IG1hcmtlZCBvciBvdGhlcndpc2UKKyAgICAgIGRlc2lnbmF0ZWQgaW4gd3JpdGluZyBieSB0aGUgY29weXJpZ2h0IG93bmVyIGFzICJOb3QgYSBDb250cmlidXRpb24uIgorCisgICAgICAiQ29udHJpYnV0b3IiIHNoYWxsIG1lYW4gTGljZW5zb3IgYW5kIGFueSBpbmRpdmlkdWFsIG9yIExlZ2FsIEVudGl0eQorICAgICAgb24gYmVoYWxmIG9mIHdob20gYSBDb250cmlidXRpb24gaGFzIGJlZW4gcmVjZWl2ZWQgYnkgTGljZW5zb3IgYW5kCisgICAgICBzdWJzZXF1ZW50bHkgaW5jb3Jwb3JhdGVkIHdpdGhpbiB0aGUgV29yay4KKworICAgMi4gR3JhbnQgb2YgQ29weXJpZ2h0IExpY2Vuc2UuIFN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mCisgICAgICB0aGlzIExpY2Vuc2UsIGVhY2ggQ29udHJpYnV0b3IgaGVyZWJ5IGdyYW50cyB0byBZb3UgYSBwZXJwZXR1YWwsCisgICAgICB3b3JsZHdpZGUsIG5vbi1leGNsdXNpdmUsIG5vLWNoYXJnZSwgcm95YWx0eS1mcmVlLCBpcnJldm9jYWJsZQorICAgICAgY29weXJpZ2h0IGxpY2Vuc2UgdG8gcmVwcm9kdWNlLCBwcmVwYXJlIERlcml2YXRpdmUgV29ya3Mgb2YsCisgICAgICBwdWJsaWNseSBkaXNwbGF5LCBwdWJsaWNseSBwZXJmb3JtLCBzdWJsaWNlbnNlLCBhbmQgZGlzdHJpYnV0ZSB0aGUKKyAgICAgIFdvcmsgYW5kIHN1Y2ggRGVyaXZhdGl2ZSBXb3JrcyBpbiBTb3VyY2Ugb3IgT2JqZWN0IGZvcm0uCisKKyAgIDMuIEdyYW50IG9mIFBhdGVudCBMaWNlbnNlLiBTdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZgorICAgICAgdGhpcyBMaWNlbnNlLCBlYWNoIENvbnRyaWJ1dG9yIGhlcmVieSBncmFudHMgdG8gWW91IGEgcGVycGV0dWFsLAorICAgICAgd29ybGR3aWRlLCBub24tZXhjbHVzaXZlLCBuby1jaGFyZ2UsIHJveWFsdHktZnJlZSwgaXJyZXZvY2FibGUKKyAgICAgIChleGNlcHQgYXMgc3RhdGVkIGluIHRoaXMgc2VjdGlvbikgcGF0ZW50IGxpY2Vuc2UgdG8gbWFrZSwgaGF2ZSBtYWRlLAorICAgICAgdXNlLCBvZmZlciB0byBzZWxsLCBzZWxsLCBpbXBvcnQsIGFuZCBvdGhlcndpc2UgdHJhbnNmZXIgdGhlIFdvcmssCisgICAgICB3aGVyZSBzdWNoIGxpY2Vuc2UgYXBwbGllcyBvbmx5IHRvIHRob3NlIHBhdGVudCBjbGFpbXMgbGljZW5zYWJsZQorICAgICAgYnkgc3VjaCBDb250cmlidXRvciB0aGF0IGFyZSBuZWNlc3NhcmlseSBpbmZyaW5nZWQgYnkgdGhlaXIKKyAgICAgIENvbnRyaWJ1dGlvbihzKSBhbG9uZSBvciBieSBjb21iaW5hdGlvbiBvZiB0aGVpciBDb250cmlidXRpb24ocykKKyAgICAgIHdpdGggdGhlIFdvcmsgdG8gd2hpY2ggc3VjaCBDb250cmlidXRpb24ocykgd2FzIHN1Ym1pdHRlZC4gSWYgWW91CisgICAgICBpbnN0aXR1dGUgcGF0ZW50IGxpdGlnYXRpb24gYWdhaW5zdCBhbnkgZW50aXR5IChpbmNsdWRpbmcgYQorICAgICAgY3Jvc3MtY2xhaW0gb3IgY291bnRlcmNsYWltIGluIGEgbGF3c3VpdCkgYWxsZWdpbmcgdGhhdCB0aGUgV29yaworICAgICAgb3IgYSBDb250cmlidXRpb24gaW5jb3Jwb3JhdGVkIHdpdGhpbiB0aGUgV29yayBjb25zdGl0dXRlcyBkaXJlY3QKKyAgICAgIG9yIGNvbnRyaWJ1dG9yeSBwYXRlbnQgaW5mcmluZ2VtZW50LCB0aGVuIGFueSBwYXRlbnQgbGljZW5zZXMKKyAgICAgIGdyYW50ZWQgdG8gWW91IHVuZGVyIHRoaXMgTGljZW5zZSBmb3IgdGhhdCBXb3JrIHNoYWxsIHRlcm1pbmF0ZQorICAgICAgYXMgb2YgdGhlIGRhdGUgc3VjaCBsaXRpZ2F0aW9uIGlzIGZpbGVkLgorCisgICA0LiBSZWRpc3RyaWJ1dGlvbi4gWW91IG1heSByZXByb2R1Y2UgYW5kIGRpc3RyaWJ1dGUgY29waWVzIG9mIHRoZQorICAgICAgV29yayBvciBEZXJpdmF0aXZlIFdvcmtzIHRoZXJlb2YgaW4gYW55IG1lZGl1bSwgd2l0aCBvciB3aXRob3V0CisgICAgICBtb2RpZmljYXRpb25zLCBhbmQgaW4gU291cmNlIG9yIE9iamVjdCBmb3JtLCBwcm92aWRlZCB0aGF0IFlvdQorICAgICAgbWVldCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CisKKyAgICAgIChhKSBZb3UgbXVzdCBnaXZlIGFueSBvdGhlciByZWNpcGllbnRzIG9mIHRoZSBXb3JrIG9yCisgICAgICAgICAgRGVyaXZhdGl2ZSBXb3JrcyBhIGNvcHkgb2YgdGhpcyBMaWNlbnNlOyBhbmQKKworICAgICAgKGIpIFlvdSBtdXN0IGNhdXNlIGFueSBtb2RpZmllZCBmaWxlcyB0byBjYXJyeSBwcm9taW5lbnQgbm90aWNlcworICAgICAgICAgIHN0YXRpbmcgdGhhdCBZb3UgY2hhbmdlZCB0aGUgZmlsZXM7IGFuZAorCisgICAgICAoYykgWW91IG11c3QgcmV0YWluLCBpbiB0aGUgU291cmNlIGZvcm0gb2YgYW55IERlcml2YXRpdmUgV29ya3MKKyAgICAgICAgICB0aGF0IFlvdSBkaXN0cmlidXRlLCBhbGwgY29weXJpZ2h0LCBwYXRlbnQsIHRyYWRlbWFyaywgYW5kCisgICAgICAgICAgYXR0cmlidXRpb24gbm90aWNlcyBmcm9tIHRoZSBTb3VyY2UgZm9ybSBvZiB0aGUgV29yaywKKyAgICAgICAgICBleGNsdWRpbmcgdGhvc2Ugbm90aWNlcyB0aGF0IGRvIG5vdCBwZXJ0YWluIHRvIGFueSBwYXJ0IG9mCisgICAgICAgICAgdGhlIERlcml2YXRpdmUgV29ya3M7IGFuZAorCisgICAgICAoZCkgSWYgdGhlIFdvcmsgaW5jbHVkZXMgYSAiTk9USUNFIiB0ZXh0IGZpbGUgYXMgcGFydCBvZiBpdHMKKyAgICAgICAgICBkaXN0cmlidXRpb24sIHRoZW4gYW55IERlcml2YXRpdmUgV29ya3MgdGhhdCBZb3UgZGlzdHJpYnV0ZSBtdXN0CisgICAgICAgICAgaW5jbHVkZSBhIHJlYWRhYmxlIGNvcHkgb2YgdGhlIGF0dHJpYnV0aW9uIG5vdGljZXMgY29udGFpbmVkCisgICAgICAgICAgd2l0aGluIHN1Y2ggTk9USUNFIGZpbGUsIGV4Y2x1ZGluZyB0aG9zZSBub3RpY2VzIHRoYXQgZG8gbm90CisgICAgICAgICAgcGVydGFpbiB0byBhbnkgcGFydCBvZiB0aGUgRGVyaXZhdGl2ZSBXb3JrcywgaW4gYXQgbGVhc3Qgb25lCisgICAgICAgICAgb2YgdGhlIGZvbGxvd2luZyBwbGFjZXM6IHdpdGhpbiBhIE5PVElDRSB0ZXh0IGZpbGUgZGlzdHJpYnV0ZWQKKyAgICAgICAgICBhcyBwYXJ0IG9mIHRoZSBEZXJpdmF0aXZlIFdvcmtzOyB3aXRoaW4gdGhlIFNvdXJjZSBmb3JtIG9yCisgICAgICAgICAgZG9jdW1lbnRhdGlvbiwgaWYgcHJvdmlkZWQgYWxvbmcgd2l0aCB0aGUgRGVyaXZhdGl2ZSBXb3Jrczsgb3IsCisgICAgICAgICAgd2l0aGluIGEgZGlzcGxheSBnZW5lcmF0ZWQgYnkgdGhlIERlcml2YXRpdmUgV29ya3MsIGlmIGFuZAorICAgICAgICAgIHdoZXJldmVyIHN1Y2ggdGhpcmQtcGFydHkgbm90aWNlcyBub3JtYWxseSBhcHBlYXIuIFRoZSBjb250ZW50cworICAgICAgICAgIG9mIHRoZSBOT1RJQ0UgZmlsZSBhcmUgZm9yIGluZm9ybWF0aW9uYWwgcHVycG9zZXMgb25seSBhbmQKKyAgICAgICAgICBkbyBub3QgbW9kaWZ5IHRoZSBMaWNlbnNlLiBZb3UgbWF5IGFkZCBZb3VyIG93biBhdHRyaWJ1dGlvbgorICAgICAgICAgIG5vdGljZXMgd2l0aGluIERlcml2YXRpdmUgV29ya3MgdGhhdCBZb3UgZGlzdHJpYnV0ZSwgYWxvbmdzaWRlCisgICAgICAgICAgb3IgYXMgYW4gYWRkZW5kdW0gdG8gdGhlIE5PVElDRSB0ZXh0IGZyb20gdGhlIFdvcmssIHByb3ZpZGVkCisgICAgICAgICAgdGhhdCBzdWNoIGFkZGl0aW9uYWwgYXR0cmlidXRpb24gbm90aWNlcyBjYW5ub3QgYmUgY29uc3RydWVkCisgICAgICAgICAgYXMgbW9kaWZ5aW5nIHRoZSBMaWNlbnNlLgorCisgICAgICBZb3UgbWF5IGFkZCBZb3VyIG93biBjb3B5cmlnaHQgc3RhdGVtZW50IHRvIFlvdXIgbW9kaWZpY2F0aW9ucyBhbmQKKyAgICAgIG1heSBwcm92aWRlIGFkZGl0aW9uYWwgb3IgZGlmZmVyZW50IGxpY2Vuc2UgdGVybXMgYW5kIGNvbmRpdGlvbnMKKyAgICAgIGZvciB1c2UsIHJlcHJvZHVjdGlvbiwgb3IgZGlzdHJpYnV0aW9uIG9mIFlvdXIgbW9kaWZpY2F0aW9ucywgb3IKKyAgICAgIGZvciBhbnkgc3VjaCBEZXJpdmF0aXZlIFdvcmtzIGFzIGEgd2hvbGUsIHByb3ZpZGVkIFlvdXIgdXNlLAorICAgICAgcmVwcm9kdWN0aW9uLCBhbmQgZGlzdHJpYnV0aW9uIG9mIHRoZSBXb3JrIG90aGVyd2lzZSBjb21wbGllcyB3aXRoCisgICAgICB0aGUgY29uZGl0aW9ucyBzdGF0ZWQgaW4gdGhpcyBMaWNlbnNlLgorCisgICA1LiBTdWJtaXNzaW9uIG9mIENvbnRyaWJ1dGlvbnMuIFVubGVzcyBZb3UgZXhwbGljaXRseSBzdGF0ZSBvdGhlcndpc2UsCisgICAgICBhbnkgQ29udHJpYnV0aW9uIGludGVudGlvbmFsbHkgc3VibWl0dGVkIGZvciBpbmNsdXNpb24gaW4gdGhlIFdvcmsKKyAgICAgIGJ5IFlvdSB0byB0aGUgTGljZW5zb3Igc2hhbGwgYmUgdW5kZXIgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mCisgICAgICB0aGlzIExpY2Vuc2UsIHdpdGhvdXQgYW55IGFkZGl0aW9uYWwgdGVybXMgb3IgY29uZGl0aW9ucy4KKyAgICAgIE5vdHdpdGhzdGFuZGluZyB0aGUgYWJvdmUsIG5vdGhpbmcgaGVyZWluIHNoYWxsIHN1cGVyc2VkZSBvciBtb2RpZnkKKyAgICAgIHRoZSB0ZXJtcyBvZiBhbnkgc2VwYXJhdGUgbGljZW5zZSBhZ3JlZW1lbnQgeW91IG1heSBoYXZlIGV4ZWN1dGVkCisgICAgICB3aXRoIExpY2Vuc29yIHJlZ2FyZGluZyBzdWNoIENvbnRyaWJ1dGlvbnMuCisKKyAgIDYuIFRyYWRlbWFya3MuIFRoaXMgTGljZW5zZSBkb2VzIG5vdCBncmFudCBwZXJtaXNzaW9uIHRvIHVzZSB0aGUgdHJhZGUKKyAgICAgIG5hbWVzLCB0cmFkZW1hcmtzLCBzZXJ2aWNlIG1hcmtzLCBvciBwcm9kdWN0IG5hbWVzIG9mIHRoZSBMaWNlbnNvciwKKyAgICAgIGV4Y2VwdCBhcyByZXF1aXJlZCBmb3IgcmVhc29uYWJsZSBhbmQgY3VzdG9tYXJ5IHVzZSBpbiBkZXNjcmliaW5nIHRoZQorICAgICAgb3JpZ2luIG9mIHRoZSBXb3JrIGFuZCByZXByb2R1Y2luZyB0aGUgY29udGVudCBvZiB0aGUgTk9USUNFIGZpbGUuCisKKyAgIDcuIERpc2NsYWltZXIgb2YgV2FycmFudHkuIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvcgorICAgICAgYWdyZWVkIHRvIGluIHdyaXRpbmcsIExpY2Vuc29yIHByb3ZpZGVzIHRoZSBXb3JrIChhbmQgZWFjaAorICAgICAgQ29udHJpYnV0b3IgcHJvdmlkZXMgaXRzIENvbnRyaWJ1dGlvbnMpIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgICAgICBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IKKyAgICAgIGltcGxpZWQsIGluY2x1ZGluZywgd2l0aG91dCBsaW1pdGF0aW9uLCBhbnkgd2FycmFudGllcyBvciBjb25kaXRpb25zCisgICAgICBvZiBUSVRMRSwgTk9OLUlORlJJTkdFTUVOVCwgTUVSQ0hBTlRBQklMSVRZLCBvciBGSVRORVNTIEZPUiBBCisgICAgICBQQVJUSUNVTEFSIFBVUlBPU0UuIFlvdSBhcmUgc29sZWx5IHJlc3BvbnNpYmxlIGZvciBkZXRlcm1pbmluZyB0aGUKKyAgICAgIGFwcHJvcHJpYXRlbmVzcyBvZiB1c2luZyBvciByZWRpc3RyaWJ1dGluZyB0aGUgV29yayBhbmQgYXNzdW1lIGFueQorICAgICAgcmlza3MgYXNzb2NpYXRlZCB3aXRoIFlvdXIgZXhlcmNpc2Ugb2YgcGVybWlzc2lvbnMgdW5kZXIgdGhpcyBMaWNlbnNlLgorCisgICA4LiBMaW1pdGF0aW9uIG9mIExpYWJpbGl0eS4gSW4gbm8gZXZlbnQgYW5kIHVuZGVyIG5vIGxlZ2FsIHRoZW9yeSwKKyAgICAgIHdoZXRoZXIgaW4gdG9ydCAoaW5jbHVkaW5nIG5lZ2xpZ2VuY2UpLCBjb250cmFjdCwgb3Igb3RoZXJ3aXNlLAorICAgICAgdW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IChzdWNoIGFzIGRlbGliZXJhdGUgYW5kIGdyb3NzbHkKKyAgICAgIG5lZ2xpZ2VudCBhY3RzKSBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc2hhbGwgYW55IENvbnRyaWJ1dG9yIGJlCisgICAgICBsaWFibGUgdG8gWW91IGZvciBkYW1hZ2VzLCBpbmNsdWRpbmcgYW55IGRpcmVjdCwgaW5kaXJlY3QsIHNwZWNpYWwsCisgICAgICBpbmNpZGVudGFsLCBvciBjb25zZXF1ZW50aWFsIGRhbWFnZXMgb2YgYW55IGNoYXJhY3RlciBhcmlzaW5nIGFzIGEKKyAgICAgIHJlc3VsdCBvZiB0aGlzIExpY2Vuc2Ugb3Igb3V0IG9mIHRoZSB1c2Ugb3IgaW5hYmlsaXR5IHRvIHVzZSB0aGUKKyAgICAgIFdvcmsgKGluY2x1ZGluZyBidXQgbm90IGxpbWl0ZWQgdG8gZGFtYWdlcyBmb3IgbG9zcyBvZiBnb29kd2lsbCwKKyAgICAgIHdvcmsgc3RvcHBhZ2UsIGNvbXB1dGVyIGZhaWx1cmUgb3IgbWFsZnVuY3Rpb24sIG9yIGFueSBhbmQgYWxsCisgICAgICBvdGhlciBjb21tZXJjaWFsIGRhbWFnZXMgb3IgbG9zc2VzKSwgZXZlbiBpZiBzdWNoIENvbnRyaWJ1dG9yCisgICAgICBoYXMgYmVlbiBhZHZpc2VkIG9mIHRoZSBwb3NzaWJpbGl0eSBvZiBzdWNoIGRhbWFnZXMuCisKKyAgIDkuIEFjY2VwdGluZyBXYXJyYW50eSBvciBBZGRpdGlvbmFsIExpYWJpbGl0eS4gV2hpbGUgcmVkaXN0cmlidXRpbmcKKyAgICAgIHRoZSBXb3JrIG9yIERlcml2YXRpdmUgV29ya3MgdGhlcmVvZiwgWW91IG1heSBjaG9vc2UgdG8gb2ZmZXIsCisgICAgICBhbmQgY2hhcmdlIGEgZmVlIGZvciwgYWNjZXB0YW5jZSBvZiBzdXBwb3J0LCB3YXJyYW50eSwgaW5kZW1uaXR5LAorICAgICAgb3Igb3RoZXIgbGlhYmlsaXR5IG9ibGlnYXRpb25zIGFuZC9vciByaWdodHMgY29uc2lzdGVudCB3aXRoIHRoaXMKKyAgICAgIExpY2Vuc2UuIEhvd2V2ZXIsIGluIGFjY2VwdGluZyBzdWNoIG9ibGlnYXRpb25zLCBZb3UgbWF5IGFjdCBvbmx5CisgICAgICBvbiBZb3VyIG93biBiZWhhbGYgYW5kIG9uIFlvdXIgc29sZSByZXNwb25zaWJpbGl0eSwgbm90IG9uIGJlaGFsZgorICAgICAgb2YgYW55IG90aGVyIENvbnRyaWJ1dG9yLCBhbmQgb25seSBpZiBZb3UgYWdyZWUgdG8gaW5kZW1uaWZ5LAorICAgICAgZGVmZW5kLCBhbmQgaG9sZCBlYWNoIENvbnRyaWJ1dG9yIGhhcm1sZXNzIGZvciBhbnkgbGlhYmlsaXR5CisgICAgICBpbmN1cnJlZCBieSwgb3IgY2xhaW1zIGFzc2VydGVkIGFnYWluc3QsIHN1Y2ggQ29udHJpYnV0b3IgYnkgcmVhc29uCisgICAgICBvZiB5b3VyIGFjY2VwdGluZyBhbnkgc3VjaCB3YXJyYW50eSBvciBhZGRpdGlvbmFsIGxpYWJpbGl0eS4KKworICAgRU5EIE9GIFRFUk1TIEFORCBDT05ESVRJT05TCisKZGlmZiAtLWdpdCBhL21lZGlhL2NvZGVjMi9jb21wb25lbnRzL2FhYy9wYXRlbnRfZGlzY2xhaW1lci50eHQgYi9tZWRpYS9jb2RlYzIvY29tcG9uZW50cy9hYWMvcGF0ZW50X2Rpc2NsYWltZXIudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI0YmYxMWQKLS0tIC9kZXYvbnVsbAorKysgYi9tZWRpYS9jb2RlYzIvY29tcG9uZW50cy9hYWMvcGF0ZW50X2Rpc2NsYWltZXIudHh0CkBAIC0wLDAgKzEsOSBAQAorCitUSElTIElTIE5PVCBBIEdSQU5UIE9GIFBBVEVOVCBSSUdIVFMuCisKK0dvb2dsZSBtYWtlcyBubyByZXByZXNlbnRhdGlvbiBvciB3YXJyYW50eSB0aGF0IHRoZSBjb2RlY3MgZm9yIHdoaWNoCitzb3VyY2UgY29kZSBpcyBtYWRlIGF2YWlsYWJsZSBoZXJldW5kZXIgYXJlIHVuZW5jdW1iZXJlZCBieQordGhpcmQtcGFydHkgcGF0ZW50cy4gIFRob3NlIGludGVuZGluZyB0byB1c2UgdGhpcyBzb3VyY2UgY29kZSBpbgoraGFyZHdhcmUgb3Igc29mdHdhcmUgcHJvZHVjdHMgYXJlIGFkdmlzZWQgdGhhdCBpbXBsZW1lbnRhdGlvbnMgb2YKK3RoZXNlIGNvZGVjcywgaW5jbHVkaW5nIGluIG9wZW4gc291cmNlIHNvZnR3YXJlIG9yIHNoYXJld2FyZSwgbWF5CityZXF1aXJlIHBhdGVudCBsaWNlbnNlcyBmcm9tIHRoZSByZWxldmFudCBwYXRlbnQgaG9sZGVycy4KZGlmZiAtLWdpdCBhL21lZGlhL2NvZGVjMi9jb21wb25lbnRzL2Ftcl9uYl93Yi9BbmRyb2lkLmJwIGIvbWVkaWEvY29kZWMyL2NvbXBvbmVudHMvYW1yX25iX3diL0FuZHJvaWQuYnAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2UyNWJjOQotLS0gL2Rldi9udWxsCisrKyBiL21lZGlhL2NvZGVjMi9jb21wb25lbnRzL2Ftcl9uYl93Yi9BbmRyb2lkLmJwCkBAIC0wLDAgKzEsNzcgQEAKK2NjX2xpYnJhcnlfc2hhcmVkIHsKKyAgICBuYW1lOiAibGliY29kZWMyX3NvZnRfYW1ybmJkZWMiLAorICAgIGRlZmF1bHRzOiBbCisgICAgICAgICJsaWJjb2RlYzJfc29mdC1kZWZhdWx0cyIsCisgICAgICAgICJsaWJjb2RlYzJfc29mdF9zYW5pdGl6ZV9hbGwtZGVmYXVsdHMiLAorICAgIF0sCisKKyAgICBzcmNzOiBbIkMyU29mdEFtckRlYy5jcHAiXSwKKworICAgIGNmbGFnczogWworICAgICAgICAiLURBTVJOQiIsCisgICAgXSwKKworICAgIHN0YXRpY19saWJzOiBbCisgICAgICAgICJsaWJzdGFnZWZyaWdodF9hbXJuYmRlYyIsCisgICAgICAgICJsaWJzdGFnZWZyaWdodF9hbXJ3YmRlYyIsCisgICAgXSwKKworICAgIHNoYXJlZF9saWJzOiBbCisgICAgICAgICJsaWJzdGFnZWZyaWdodF9hbXJuYl9jb21tb24iLAorICAgIF0sCit9CisKK2NjX2xpYnJhcnlfc2hhcmVkIHsKKyAgICBuYW1lOiAibGliY29kZWMyX3NvZnRfYW1yd2JkZWMiLAorICAgIGRlZmF1bHRzOiBbCisgICAgICAgICJsaWJjb2RlYzJfc29mdC1kZWZhdWx0cyIsCisgICAgICAgICJsaWJjb2RlYzJfc29mdF9zYW5pdGl6ZV9hbGwtZGVmYXVsdHMiLAorICAgIF0sCisKKyAgICBzcmNzOiBbIkMyU29mdEFtckRlYy5jcHAiXSwKKworICAgIHN0YXRpY19saWJzOiBbCisgICAgICAgICJsaWJzdGFnZWZyaWdodF9hbXJuYmRlYyIsCisgICAgICAgICJsaWJzdGFnZWZyaWdodF9hbXJ3YmRlYyIsCisgICAgXSwKKworICAgIHNoYXJlZF9saWJzOiBbCisgICAgICAgICJsaWJzdGFnZWZyaWdodF9hbXJuYl9jb21tb24iLAorICAgIF0sCit9CisKK2NjX2xpYnJhcnlfc2hhcmVkIHsKKyAgICBuYW1lOiAibGliY29kZWMyX3NvZnRfYW1ybmJlbmMiLAorICAgIGRlZmF1bHRzOiBbCisgICAgICAgICJsaWJjb2RlYzJfc29mdC1kZWZhdWx0cyIsCisgICAgICAgICJsaWJjb2RlYzJfc29mdF9zYW5pdGl6ZV9hbGwtZGVmYXVsdHMiLAorICAgIF0sCisKKyAgICBzcmNzOiBbIkMyU29mdEFtck5iRW5jLmNwcCJdLAorCisgICAgc3RhdGljX2xpYnM6IFsKKyAgICAgICAgImxpYnN0YWdlZnJpZ2h0X2Ftcm5iZW5jIiwKKyAgICBdLAorCisgICAgc2hhcmVkX2xpYnM6IFsKKyAgICAgICAgImxpYnN0YWdlZnJpZ2h0X2Ftcm5iX2NvbW1vbiIsCisgICAgXSwKK30KKworY2NfbGlicmFyeV9zaGFyZWQgeworICAgIG5hbWU6ICJsaWJjb2RlYzJfc29mdF9hbXJ3YmVuYyIsCisgICAgZGVmYXVsdHM6IFsKKyAgICAgICAgImxpYmNvZGVjMl9zb2Z0LWRlZmF1bHRzIiwKKyAgICAgICAgImxpYmNvZGVjMl9zb2Z0X3Nhbml0aXplX2FsbC1kZWZhdWx0cyIsCisgICAgXSwKKworICAgIHNyY3M6IFsiQzJTb2Z0QW1yV2JFbmMuY3BwIl0sCisKKyAgICBzdGF0aWNfbGliczogWworICAgICAgICAibGlic3RhZ2VmcmlnaHRfYW1yd2JlbmMiLAorICAgIF0sCisKKyAgICBzaGFyZWRfbGliczogWworICAgICAgICAibGlic3RhZ2VmcmlnaHRfZW5jX2NvbW1vbiIsCisgICAgXSwKK30KZGlmZiAtLWdpdCBhL21lZGlhL2NvZGVjMi9jb21wb25lbnRzL2Ftcl9uYl93Yi9DMlNvZnRBbXJEZWMuY3BwIGIvbWVkaWEvY29kZWMyL2NvbXBvbmVudHMvYW1yX25iX3diL0MyU29mdEFtckRlYy5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzU5MWUyMQotLS0gL2Rldi9udWxsCisrKyBiL21lZGlhL2NvZGVjMi9jb21wb25lbnRzL2Ftcl9uYl93Yi9DMlNvZnRBbXJEZWMuY3BwCkBAIC0wLDAgKzEsNDM4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE4IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KKworLy8jZGVmaW5lIExPR19OREVCVUcgMAorI2lmZGVmIEFNUk5CCisjZGVmaW5lIExPR19UQUcgIkMyU29mdEFtck5iRGVjIgorI2Vsc2UKKyNkZWZpbmUgTE9HX1RBRyAiQzJTb2Z0QW1yV2JEZWMiCisjZW5kaWYKKyNpbmNsdWRlIDxsb2cvbG9nLmg+CisKKyNpbmNsdWRlIDxtZWRpYS9zdGFnZWZyaWdodC9mb3VuZGF0aW9uL01lZGlhRGVmcy5oPgorCisjaW5jbHVkZSA8QzJQbGF0Zm9ybVN1cHBvcnQuaD4KKyNpbmNsdWRlIDxTaW1wbGVDMkludGVyZmFjZS5oPgorCisjaW5jbHVkZSAiQzJTb2Z0QW1yRGVjLmgiCisjaW5jbHVkZSAiZ3NtYW1yX2RlYy5oIgorI2luY2x1ZGUgInB2YW1yd2JkZWNvZGVyLmgiCisKK25hbWVzcGFjZSBhbmRyb2lkIHsKKworI2lmZGVmIEFNUk5CCisgIGNvbnN0ZXhwciBjaGFyIENPTVBPTkVOVF9OQU1FW10gPSAiYzIuYW5kcm9pZC5hbXJuYi5kZWNvZGVyIjsKKyNlbHNlCisgIGNvbnN0ZXhwciBjaGFyIENPTVBPTkVOVF9OQU1FW10gPSAiYzIuYW5kcm9pZC5hbXJ3Yi5kZWNvZGVyIjsKKyNlbmRpZgorCitjbGFzcyBDMlNvZnRBbXJEZWM6OkludGZJbXBsIDogcHVibGljIEMySW50ZXJmYWNlSGVscGVyIHsKK3B1YmxpYzoKKyAgICBleHBsaWNpdCBJbnRmSW1wbChjb25zdCBzdGQ6OnNoYXJlZF9wdHI8QzJSZWZsZWN0b3JIZWxwZXI+ICZoZWxwZXIpCisgICAgICAgIDogQzJJbnRlcmZhY2VIZWxwZXIoaGVscGVyKSB7CisKKyAgICAgICAgc2V0RGVyaXZlZEluc3RhbmNlKHRoaXMpOworCisgICAgICAgIGFkZFBhcmFtZXRlcigKKyAgICAgICAgICAgICAgICBEZWZpbmVQYXJhbShtSW5wdXRGb3JtYXQsIEMyX05BTUVfSU5QVVRfU1RSRUFNX0ZPUk1BVF9TRVRUSU5HKQorICAgICAgICAgICAgICAgIC53aXRoQ29uc3RWYWx1ZShuZXcgQzJTdHJlYW1Gb3JtYXRDb25maWc6OmlucHV0KDB1LCBDMkZvcm1hdENvbXByZXNzZWQpKQorICAgICAgICAgICAgICAgIC5idWlsZCgpKTsKKworICAgICAgICBhZGRQYXJhbWV0ZXIoCisgICAgICAgICAgICAgICAgRGVmaW5lUGFyYW0obU91dHB1dEZvcm1hdCwgQzJfTkFNRV9PVVRQVVRfU1RSRUFNX0ZPUk1BVF9TRVRUSU5HKQorICAgICAgICAgICAgICAgIC53aXRoQ29uc3RWYWx1ZShuZXcgQzJTdHJlYW1Gb3JtYXRDb25maWc6Om91dHB1dCgwdSwgQzJGb3JtYXRBdWRpbykpCisgICAgICAgICAgICAgICAgLmJ1aWxkKCkpOworCisgICAgICAgIGFkZFBhcmFtZXRlcigKKyAgICAgICAgICAgICAgICBEZWZpbmVQYXJhbShtSW5wdXRNZWRpYVR5cGUsIEMyX05BTUVfSU5QVVRfUE9SVF9NSU1FX1NFVFRJTkcpCisgICAgICAgICAgICAgICAgLndpdGhDb25zdFZhbHVlKEFsbG9jU2hhcmVkU3RyaW5nPEMyUG9ydE1pbWVDb25maWc6OmlucHV0PigKKyNpZmRlZiBBTVJOQgorICAgICAgICAgICAgICAgICAgICAgICAgTUVESUFfTUlNRVRZUEVfQVVESU9fQU1SX05CCisjZWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgTUVESUFfTUlNRVRZUEVfQVVESU9fQU1SX1dCCisjZW5kaWYKKyAgICAgICAgICAgICAgICApKS5idWlsZCgpKTsKKworICAgICAgICBhZGRQYXJhbWV0ZXIoCisgICAgICAgICAgICAgICAgRGVmaW5lUGFyYW0obU91dHB1dE1lZGlhVHlwZSwgQzJfTkFNRV9PVVRQVVRfUE9SVF9NSU1FX1NFVFRJTkcpCisgICAgICAgICAgICAgICAgLndpdGhDb25zdFZhbHVlKEFsbG9jU2hhcmVkU3RyaW5nPEMyUG9ydE1pbWVDb25maWc6Om91dHB1dD4oCisgICAgICAgICAgICAgICAgICAgICAgICBNRURJQV9NSU1FVFlQRV9BVURJT19SQVcpKQorICAgICAgICAgICAgICAgIC5idWlsZCgpKTsKKworICAgICAgICBhZGRQYXJhbWV0ZXIoCisgICAgICAgICAgICAgICAgRGVmaW5lUGFyYW0obVNhbXBsZVJhdGUsIEMyX05BTUVfU1RSRUFNX1NBTVBMRV9SQVRFX1NFVFRJTkcpCisjaWZkZWYgQU1STkIKKyAgICAgICAgICAgICAgICAud2l0aERlZmF1bHQobmV3IEMyU3RyZWFtU2FtcGxlUmF0ZUluZm86Om91dHB1dCgwdSwgODAwMCkpCisgICAgICAgICAgICAgICAgLndpdGhGaWVsZHMoe0MyRihtU2FtcGxlUmF0ZSwgdmFsdWUpLmVxdWFsVG8oODAwMCl9KQorI2Vsc2UKKyAgICAgICAgICAgICAgICAud2l0aERlZmF1bHQobmV3IEMyU3RyZWFtU2FtcGxlUmF0ZUluZm86Om91dHB1dCgwdSwgMTYwMDApKQorICAgICAgICAgICAgICAgIC53aXRoRmllbGRzKHtDMkYobVNhbXBsZVJhdGUsIHZhbHVlKS5lcXVhbFRvKDE2MDAwKX0pCisjZW5kaWYKKyAgICAgICAgICAgICAgICAud2l0aFNldHRlcigoU2V0dGVyPGRlY2x0eXBlKCptU2FtcGxlUmF0ZSk+OjpTdHJpY3RWYWx1ZVdpdGhOb0RlcHMpKQorICAgICAgICAgICAgICAgIC5idWlsZCgpKTsKKworICAgICAgICBhZGRQYXJhbWV0ZXIoCisgICAgICAgICAgICAgICAgRGVmaW5lUGFyYW0obUNoYW5uZWxDb3VudCwgQzJfTkFNRV9TVFJFQU1fQ0hBTk5FTF9DT1VOVF9TRVRUSU5HKQorICAgICAgICAgICAgICAgIC53aXRoRGVmYXVsdChuZXcgQzJTdHJlYW1DaGFubmVsQ291bnRJbmZvOjpvdXRwdXQoMHUsIDEpKQorICAgICAgICAgICAgICAgIC53aXRoRmllbGRzKHtDMkYobUNoYW5uZWxDb3VudCwgdmFsdWUpLmVxdWFsVG8oMSl9KQorICAgICAgICAgICAgICAgIC53aXRoU2V0dGVyKChTZXR0ZXI8ZGVjbHR5cGUoKm1DaGFubmVsQ291bnQpPjo6U3RyaWN0VmFsdWVXaXRoTm9EZXBzKSkKKyAgICAgICAgICAgICAgICAuYnVpbGQoKSk7CisKKyAgICAgICAgYWRkUGFyYW1ldGVyKAorICAgICAgICAgICAgICAgIERlZmluZVBhcmFtKG1CaXRyYXRlLCBDMl9OQU1FX1NUUkVBTV9CSVRSQVRFX1NFVFRJTkcpCisjaWZkZWYgQU1STkIKKyAgICAgICAgICAgICAgICAud2l0aERlZmF1bHQobmV3IEMyQml0cmF0ZVR1bmluZzo6aW5wdXQoMHUsIDQ3NTApKQorICAgICAgICAgICAgICAgIC53aXRoRmllbGRzKHtDMkYobUJpdHJhdGUsIHZhbHVlKS5pblJhbmdlKDQ3NTAsIDEyMjAwKX0pCisjZWxzZQorICAgICAgICAgICAgICAgIC53aXRoRGVmYXVsdChuZXcgQzJCaXRyYXRlVHVuaW5nOjppbnB1dCgwdSwgNjYwMCkpCisgICAgICAgICAgICAgICAgLndpdGhGaWVsZHMoe0MyRihtQml0cmF0ZSwgdmFsdWUpLmluUmFuZ2UoNjYwMCwgMjM4NTApfSkKKyNlbmRpZgorICAgICAgICAgICAgICAgIC53aXRoU2V0dGVyKFNldHRlcjxkZWNsdHlwZSgqbUJpdHJhdGUpPjo6Tm9uU3RyaWN0VmFsdWVXaXRoTm9EZXBzKQorICAgICAgICAgICAgICAgIC5idWlsZCgpKTsKKworICAgICAgICBhZGRQYXJhbWV0ZXIoCisgICAgICAgICAgICAgICAgRGVmaW5lUGFyYW0obUlucHV0TWF4QnVmU2l6ZSwgQzJfUEFSQU1LRVlfSU5QVVRfTUFYX0JVRkZFUl9TSVpFKQorICAgICAgICAgICAgICAgIC53aXRoQ29uc3RWYWx1ZShuZXcgQzJTdHJlYW1NYXhCdWZmZXJTaXplSW5mbzo6aW5wdXQoMHUsIDgxOTIpKQorICAgICAgICAgICAgICAgIC5idWlsZCgpKTsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgc3RkOjpzaGFyZWRfcHRyPEMyU3RyZWFtRm9ybWF0Q29uZmlnOjppbnB1dD4gbUlucHV0Rm9ybWF0OworICAgIHN0ZDo6c2hhcmVkX3B0cjxDMlN0cmVhbUZvcm1hdENvbmZpZzo6b3V0cHV0PiBtT3V0cHV0Rm9ybWF0OworICAgIHN0ZDo6c2hhcmVkX3B0cjxDMlBvcnRNaW1lQ29uZmlnOjppbnB1dD4gbUlucHV0TWVkaWFUeXBlOworICAgIHN0ZDo6c2hhcmVkX3B0cjxDMlBvcnRNaW1lQ29uZmlnOjpvdXRwdXQ+IG1PdXRwdXRNZWRpYVR5cGU7CisgICAgc3RkOjpzaGFyZWRfcHRyPEMyU3RyZWFtU2FtcGxlUmF0ZUluZm86Om91dHB1dD4gbVNhbXBsZVJhdGU7CisgICAgc3RkOjpzaGFyZWRfcHRyPEMyU3RyZWFtQ2hhbm5lbENvdW50SW5mbzo6b3V0cHV0PiBtQ2hhbm5lbENvdW50OworICAgIHN0ZDo6c2hhcmVkX3B0cjxDMkJpdHJhdGVUdW5pbmc6OmlucHV0PiBtQml0cmF0ZTsKKyAgICBzdGQ6OnNoYXJlZF9wdHI8QzJTdHJlYW1NYXhCdWZmZXJTaXplSW5mbzo6aW5wdXQ+IG1JbnB1dE1heEJ1ZlNpemU7Cit9OworCitDMlNvZnRBbXJEZWM6OkMyU29mdEFtckRlYygKKyAgICAgICAgY29uc3QgY2hhciAqbmFtZSwKKyAgICAgICAgYzJfbm9kZV9pZF90IGlkLAorICAgICAgICBjb25zdCBzdGQ6OnNoYXJlZF9wdHI8SW50ZkltcGw+ICZpbnRmSW1wbCkKKyAgICA6IFNpbXBsZUMyQ29tcG9uZW50KHN0ZDo6bWFrZV9zaGFyZWQ8U2ltcGxlSW50ZXJmYWNlPEludGZJbXBsPj4obmFtZSwgaWQsIGludGZJbXBsKSksCisgICAgICBtSW50ZihpbnRmSW1wbCksCisgICAgICBtQW1ySGFuZGxlKG51bGxwdHIpLAorICAgICAgbURlY29kZXJCdWYobnVsbHB0ciksCisgICAgICBtRGVjb2RlckNvb2tpZShudWxscHRyKSB7CisjaWZkZWYgQU1STkIKKyAgICBtSXNXaWRlID0gZmFsc2U7CisjZWxzZQorICAgIG1Jc1dpZGUgPSB0cnVlOworI2VuZGlmCit9CisKK0MyU29mdEFtckRlYzo6fkMyU29mdEFtckRlYygpIHsKKyAgICAodm9pZClvblJlbGVhc2UoKTsKK30KKworYzJfc3RhdHVzX3QgQzJTb2Z0QW1yRGVjOjpvbkluaXQoKSB7CisgICAgc3RhdHVzX3QgZXJyID0gaW5pdERlY29kZXIoKTsKKyAgICByZXR1cm4gZXJyID09IE9LID8gQzJfT0sgOiBDMl9OT19NRU1PUlk7Cit9CisKK2MyX3N0YXR1c190IEMyU29mdEFtckRlYzo6b25TdG9wKCkgeworICAgIGlmICghbUlzV2lkZSkgeworICAgICAgICBTcGVlY2hfRGVjb2RlX0ZyYW1lX3Jlc2V0KG1BbXJIYW5kbGUpOworICAgIH0gZWxzZSB7CisgICAgICAgIHB2RGVjb2Rlcl9BbXJXYl9SZXNldChtQW1ySGFuZGxlLCAwIC8qIHJlc2V0X2FsbCAqLyk7CisgICAgfQorICAgIG1TaWduYWxsZWRFcnJvciA9IGZhbHNlOworICAgIG1TaWduYWxsZWRPdXRwdXRFb3MgPSBmYWxzZTsKKworICAgIHJldHVybiBDMl9PSzsKK30KKwordm9pZCBDMlNvZnRBbXJEZWM6Om9uUmVzZXQoKSB7CisgICAgKHZvaWQpb25TdG9wKCk7Cit9CisKK3ZvaWQgQzJTb2Z0QW1yRGVjOjpvblJlbGVhc2UoKSB7CisgICAgaWYgKCFtSXNXaWRlKSB7CisgICAgICAgIGlmIChtQW1ySGFuZGxlKSB7CisgICAgICAgICAgICBHU01EZWNvZGVGcmFtZUV4aXQoJm1BbXJIYW5kbGUpOworICAgICAgICB9CisgICAgICAgIG1BbXJIYW5kbGUgPSBudWxscHRyOworICAgIH0gZWxzZSB7CisgICAgICAgIGlmIChtRGVjb2RlckJ1ZikgeworICAgICAgICAgICAgZnJlZShtRGVjb2RlckJ1Zik7CisgICAgICAgIH0KKyAgICAgICAgbURlY29kZXJCdWYgPSBudWxscHRyOworICAgICAgICBtQW1ySGFuZGxlID0gbnVsbHB0cjsKKyAgICAgICAgbURlY29kZXJDb29raWUgPSBudWxscHRyOworICAgIH0KK30KKworYzJfc3RhdHVzX3QgQzJTb2Z0QW1yRGVjOjpvbkZsdXNoX3NtKCkgeworICAgIHJldHVybiBvblN0b3AoKTsKK30KKworc3RhdHVzX3QgQzJTb2Z0QW1yRGVjOjppbml0RGVjb2RlcigpIHsKKyAgICBpZiAoIW1Jc1dpZGUpIHsKKyAgICAgICAgaWYgKEdTTUluaXREZWNvZGUoJm1BbXJIYW5kbGUsIChpbnQ4X3QgKikiQU1STkJEZWNvZGVyIikpCisgICAgICAgICAgICByZXR1cm4gVU5LTk9XTl9FUlJPUjsKKyAgICB9IGVsc2UgeworICAgICAgICB1aW50MzJfdCBtZW1SZXEgPSBwdkRlY29kZXJfQW1yV2JNZW1SZXF1aXJlbWVudHMoKTsKKyAgICAgICAgbURlY29kZXJCdWYgPSBtYWxsb2MobWVtUmVxKTsKKyAgICAgICAgaWYgKG1EZWNvZGVyQnVmKSB7CisgICAgICAgICAgICBwdkRlY29kZXJfQW1yV2JfSW5pdCgmbUFtckhhbmRsZSwgbURlY29kZXJCdWYsICZtRGVjb2RlckNvb2tpZSk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICByZXR1cm4gTk9fTUVNT1JZOworICAgICAgICB9CisgICAgfQorICAgIG1TaWduYWxsZWRFcnJvciA9IGZhbHNlOworICAgIG1TaWduYWxsZWRPdXRwdXRFb3MgPSBmYWxzZTsKKworICAgIHJldHVybiBPSzsKK30KKworc3RhdGljIHNpemVfdCBnZXRGcmFtZVNpemUoYm9vbCBpc1dpZGUsIHVuc2lnbmVkIEZNKSB7CisgICAgc3RhdGljIGNvbnN0IHNpemVfdCBrRnJhbWVTaXplTkJbMTZdID0geworICAgICAgICAxMiwgMTMsIDE1LCAxNywgMTksIDIwLCAyNiwgMzEsCisgICAgICAgIDUsIDYsIDUsIDUsIC8vIFNJRAorICAgICAgICAwLCAwLCAwLCAvLyBmdXR1cmUgdXNlCisgICAgICAgIDAgLy8gbm8gZGF0YQorICAgIH07CisgICAgc3RhdGljIGNvbnN0IHNpemVfdCBrRnJhbWVTaXplV0JbMTZdID0geworICAgICAgICAxNywgMjMsIDMyLCAzNiwgNDAsIDQ2LCA1MCwgNTgsIDYwLAorICAgICAgICA1LCAvLyBTSUQKKyAgICAgICAgMCwgMCwgMCwgMCwgLy8gZnV0dXJlIHVzZQorICAgICAgICAwLCAvLyBzcGVlY2ggbG9zdAorICAgICAgICAwIC8vIG5vIGRhdGEKKyAgICB9OworCisgICAgaWYgKEZNID4gMTUgfHwgKGlzV2lkZSAmJiBGTSA+IDkgJiYgRk0gPCAxNCkgfHwgKCFpc1dpZGUgJiYgRk0gPiAxMSAmJiBGTSA8IDE1KSkgeworICAgICAgICBBTE9HRSgiaWxsZWdhbCBBTVIgZnJhbWUgbW9kZSAlZCIsIEZNKTsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorICAgIC8vIGFkZCAxIGZvciBoZWFkZXIgYnl0ZQorICAgIHJldHVybiAoaXNXaWRlID8ga0ZyYW1lU2l6ZVdCW0ZNXSA6IGtGcmFtZVNpemVOQltGTV0pICsgMTsKK30KKworc3RhdGljIHN0YXR1c190IGNhbGN1bGF0ZU51bUZyYW1lcyhjb25zdCB1aW50OCAqaW5wdXQsIHNpemVfdCBpblNpemUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZDo6dmVjdG9yPHNpemVfdD4gKmZyYW1lU2l6ZUxpc3QsIGJvb2wgaXNXaWRlKSB7CisgICAgZm9yIChzaXplX3QgayA9IDA7IGsgPCBpblNpemU7KSB7CisgICAgICAgIGludDE2X3QgRk0gPSAoKGlucHV0WzBdID4+IDMpICYgMHgwZik7CisgICAgICAgIHNpemVfdCBmcmFtZVNpemUgPSBnZXRGcmFtZVNpemUoaXNXaWRlLCBGTSk7CisgICAgICAgIGlmIChmcmFtZVNpemUgPT0gMCkgeworICAgICAgICAgICAgcmV0dXJuIFVOS05PV05fRVJST1I7CisgICAgICAgIH0KKyAgICAgICAgaWYgKChpblNpemUgLSBrKSA+PSBmcmFtZVNpemUpIHsKKyAgICAgICAgICAgIGlucHV0ICs9IGZyYW1lU2l6ZTsKKyAgICAgICAgICAgIGsgKz0gZnJhbWVTaXplOworICAgICAgICB9CisgICAgICAgIGVsc2UgYnJlYWs7CisgICAgICAgIGZyYW1lU2l6ZUxpc3QtPnB1c2hfYmFjayhmcmFtZVNpemUpOworICAgIH0KKyAgICByZXR1cm4gT0s7Cit9CisKK3ZvaWQgQzJTb2Z0QW1yRGVjOjpwcm9jZXNzKAorICAgICAgICBjb25zdCBzdGQ6OnVuaXF1ZV9wdHI8QzJXb3JrPiAmd29yaywKKyAgICAgICAgY29uc3Qgc3RkOjpzaGFyZWRfcHRyPEMyQmxvY2tQb29sPiAmcG9vbCkgeworICAgIC8vIEluaXRpYWxpemUgb3V0cHV0IHdvcmsKKyAgICB3b3JrLT5yZXN1bHQgPSBDMl9PSzsKKyAgICB3b3JrLT53b3JrbGV0c1Byb2Nlc3NlZCA9IDF1OworICAgIHdvcmstPndvcmtsZXRzLmZyb250KCktPm91dHB1dC5mbGFncyA9IHdvcmstPmlucHV0LmZsYWdzOworCisgICAgaWYgKG1TaWduYWxsZWRFcnJvciB8fCBtU2lnbmFsbGVkT3V0cHV0RW9zKSB7CisgICAgICAgIHdvcmstPnJlc3VsdCA9IEMyX0JBRF9WQUxVRTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIEMyUmVhZFZpZXcgclZpZXcgPSBtRHVtbXlSZWFkVmlldzsKKyAgICBzaXplX3QgaW5PZmZzZXQgPSAwdTsKKyAgICBzaXplX3QgaW5TaXplID0gMHU7CisgICAgaWYgKCF3b3JrLT5pbnB1dC5idWZmZXJzLmVtcHR5KCkpIHsKKyAgICAgICAgclZpZXcgPSB3b3JrLT5pbnB1dC5idWZmZXJzWzBdLT5kYXRhKCkubGluZWFyQmxvY2tzKCkuZnJvbnQoKS5tYXAoKS5nZXQoKTsKKyAgICAgICAgaW5TaXplID0gclZpZXcuY2FwYWNpdHkoKTsKKyAgICAgICAgaWYgKGluU2l6ZSAmJiByVmlldy5lcnJvcigpKSB7CisgICAgICAgICAgICBBTE9HRSgicmVhZCB2aWV3IG1hcCBmYWlsZWQgJWQiLCByVmlldy5lcnJvcigpKTsKKyAgICAgICAgICAgIHdvcmstPnJlc3VsdCA9IHJWaWV3LmVycm9yKCk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICB9CisKKyAgICBib29sIGVvcyA9ICh3b3JrLT5pbnB1dC5mbGFncyAmIEMyRnJhbWVEYXRhOjpGTEFHX0VORF9PRl9TVFJFQU0pICE9IDA7CisgICAgaWYgKGluU2l6ZSA9PSAwKSB7CisgICAgICAgIHdvcmstPndvcmtsZXRzLmZyb250KCktPm91dHB1dC5mbGFncyA9IHdvcmstPmlucHV0LmZsYWdzOworICAgICAgICB3b3JrLT53b3JrbGV0cy5mcm9udCgpLT5vdXRwdXQuYnVmZmVycy5jbGVhcigpOworICAgICAgICB3b3JrLT53b3JrbGV0cy5mcm9udCgpLT5vdXRwdXQub3JkaW5hbCA9IHdvcmstPmlucHV0Lm9yZGluYWw7CisgICAgICAgIGlmIChlb3MpIHsKKyAgICAgICAgICAgIG1TaWduYWxsZWRPdXRwdXRFb3MgPSB0cnVlOworICAgICAgICAgICAgQUxPR1YoInNpZ25hbGxlZCBFT1MiKTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgQUxPR1YoImluIGJ1ZmZlciBhdHRyLiBzaXplICV6dSB0aW1lc3RhbXAgJWQgZnJhbWVpbmRleCAlZCIsIGluU2l6ZSwKKyAgICAgICAgICAoaW50KXdvcmstPmlucHV0Lm9yZGluYWwudGltZXN0YW1wLnBlZWt1KCksIChpbnQpd29yay0+aW5wdXQub3JkaW5hbC5mcmFtZUluZGV4LnBlZWt1KCkpOworCisgICAgc3RkOjp2ZWN0b3I8c2l6ZV90PiBmcmFtZVNpemVMaXN0OworICAgIGlmIChPSyAhPSBjYWxjdWxhdGVOdW1GcmFtZXMoclZpZXcuZGF0YSgpICsgaW5PZmZzZXQsIGluU2l6ZSwgJmZyYW1lU2l6ZUxpc3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtSXNXaWRlKSkgeworICAgICAgICB3b3JrLT5yZXN1bHQgPSBDMl9DT1JSVVBURUQ7CisgICAgICAgIG1TaWduYWxsZWRFcnJvciA9IHRydWU7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgaWYgKGZyYW1lU2l6ZUxpc3QuZW1wdHkoKSkgeworICAgICAgICBBTE9HRSgiaW5wdXQgc2l6ZSBzbWFsbGVyIHRoYW4gZXhwZWN0ZWQiKTsKKyAgICAgICAgd29yay0+cmVzdWx0ID0gQzJfQ09SUlVQVEVEOworICAgICAgICBtU2lnbmFsbGVkRXJyb3IgPSB0cnVlOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaW50MTZfdCBvdXRTYW1wbGVzID0gbUlzV2lkZSA/IGtOdW1TYW1wbGVzUGVyRnJhbWVXQiA6IGtOdW1TYW1wbGVzUGVyRnJhbWVOQjsKKyAgICBzaXplX3QgY2FsT3V0U2l6ZSA9IG91dFNhbXBsZXMgKiBmcmFtZVNpemVMaXN0LnNpemUoKSAqIHNpemVvZihpbnQxNl90KTsKKyAgICBzdGQ6OnNoYXJlZF9wdHI8QzJMaW5lYXJCbG9jaz4gYmxvY2s7CisgICAgQzJNZW1vcnlVc2FnZSB1c2FnZSA9IHsgQzJNZW1vcnlVc2FnZTo6Q1BVX1JFQUQsIEMyTWVtb3J5VXNhZ2U6OkNQVV9XUklURSB9OworICAgIGMyX3N0YXR1c190IGVyciA9IHBvb2wtPmZldGNoTGluZWFyQmxvY2soY2FsT3V0U2l6ZSwgdXNhZ2UsICZibG9jayk7CisgICAgaWYgKGVyciAhPSBDMl9PSykgeworICAgICAgICBBTE9HRSgiZmV0Y2hMaW5lYXJCbG9jayBmb3IgT3V0cHV0IGZhaWxlZCB3aXRoIHN0YXR1cyAlZCIsIGVycik7CisgICAgICAgIHdvcmstPnJlc3VsdCA9IEMyX05PX01FTU9SWTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBDMldyaXRlVmlldyB3VmlldyA9IGJsb2NrLT5tYXAoKS5nZXQoKTsKKyAgICBpZiAod1ZpZXcuZXJyb3IoKSkgeworICAgICAgICBBTE9HRSgid3JpdGUgdmlldyBtYXAgZmFpbGVkICVkIiwgd1ZpZXcuZXJyb3IoKSk7CisgICAgICAgIHdvcmstPnJlc3VsdCA9IHdWaWV3LmVycm9yKCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpbnQxNl90ICpvdXRwdXQgPSByZWludGVycHJldF9jYXN0PGludDE2X3QgKj4od1ZpZXcuZGF0YSgpKTsKKyAgICBhdXRvIGl0ID0gZnJhbWVTaXplTGlzdC5iZWdpbigpOworICAgIGNvbnN0IHVpbnQ4X3QgKmluUHRyID0gclZpZXcuZGF0YSgpICsgaW5PZmZzZXQ7CisgICAgc2l6ZV90IGluUG9zID0gMDsKKyAgICB3aGlsZSAoaW5Qb3MgPCBpblNpemUpIHsKKyAgICAgICAgaWYgKGl0ID09IGZyYW1lU2l6ZUxpc3QuZW5kKCkpIHsKKyAgICAgICAgICAgIEFMT0dEKCJ1bmV4cGVjdGVkIHRyYWlsaW5nIGJ5dGVzLCBpZ25vcmluZyB0aGVtIik7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICB1aW50OF90ICppbnB1dCA9IGNvbnN0X2Nhc3Q8dWludDhfdCAqPihpblB0ciArIGluUG9zKTsKKyAgICAgICAgaW50MTZfdCBGTSA9ICgoKmlucHV0ID4+IDMpICYgMHgwZik7CisgICAgICAgIGlmICghbUlzV2lkZSkgeworICAgICAgICAgICAgaW50MzJfdCBudW1CeXRlc1JlYWQgPSBBTVJEZWNvZGUobUFtckhhbmRsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChGcmFtZV9UeXBlXzNHUFApIEZNLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5wdXQgKyAxLCBvdXRwdXQsIE1JTUVfSUVURik7CisgICAgICAgICAgICBpZiAoc3RhdGljX2Nhc3Q8c2l6ZV90PihudW1CeXRlc1JlYWQgKyAxKSAhPSAqaXQpIHsKKyAgICAgICAgICAgICAgICBBTE9HRSgicGFuaWMsIHBhcnNlZCBzaXplIGRvZXMgbm90IG1hdGNoIGRlY29kZWQgc2l6ZSIpOworICAgICAgICAgICAgICAgIHdvcmstPnJlc3VsdCA9IEMyX0NPUlJVUFRFRDsKKyAgICAgICAgICAgICAgICBtU2lnbmFsbGVkRXJyb3IgPSB0cnVlOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGlmIChGTSA+PSA5KSB7CisgICAgICAgICAgICAgICAgLy8gUHJvZHVjZSBzaWxlbmNlIGluc3RlYWQgb2YgY29tZm9ydCBub2lzZSBhbmQgZm9yCisgICAgICAgICAgICAgICAgLy8gc3BlZWNoIGxvc3Qvbm8gZGF0YS4KKyAgICAgICAgICAgICAgICBtZW1zZXQob3V0cHV0LCAwLCBvdXRTYW1wbGVzICogc2l6ZW9mKGludDE2X3QpKTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgaW50MTZfdCBGVDsKKyAgICAgICAgICAgICAgICBSWF9TdGF0ZV93YiByeF9zdGF0ZTsKKyAgICAgICAgICAgICAgICBpbnQxNl90IG51bVJlY1NhbXBsZXM7CisKKyAgICAgICAgICAgICAgICBtaW1lX3Vuc29ydGluZyhjb25zdF9jYXN0PHVpbnQ4X3QgKj4oJmlucHV0WzFdKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtSW5wdXRTYW1wbGVCdWZmZXIsICZGVCwgJkZNLCAxLCAmcnhfc3RhdGUpOworICAgICAgICAgICAgICAgIHB2RGVjb2Rlcl9BbXJXYihGTSwgbUlucHV0U2FtcGxlQnVmZmVyLCBvdXRwdXQsICZudW1SZWNTYW1wbGVzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtRGVjb2RlckJ1ZiwgRlQsIG1EZWNvZGVyQ29va2llKTsKKyAgICAgICAgICAgICAgICBpZiAobnVtUmVjU2FtcGxlcyAhPSBvdXRTYW1wbGVzKSB7CisgICAgICAgICAgICAgICAgICAgIEFMT0dFKCJTYW1wbGUgb3V0cHV0IHBlciBmcmFtZSBpbmNvcnJlY3QiKTsKKyAgICAgICAgICAgICAgICAgICAgd29yay0+cmVzdWx0ID0gQzJfQ09SUlVQVEVEOworICAgICAgICAgICAgICAgICAgICBtU2lnbmFsbGVkRXJyb3IgPSB0cnVlOworICAgICAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIC8qIERlbGV0ZSB0aGUgMiBMU0JzICgxNC1iaXQgb3V0cHV0KSAqLworICAgICAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbnVtUmVjU2FtcGxlczsgKytpKSB7CisgICAgICAgICAgICAgICAgICAgIG91dHB1dFtpXSAmPSAweGZmZkM7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGluUG9zICs9ICppdDsKKyAgICAgICAgb3V0cHV0ICs9IG91dFNhbXBsZXM7CisgICAgICAgICsraXQ7CisgICAgfQorCisgICAgd29yay0+d29ya2xldHMuZnJvbnQoKS0+b3V0cHV0LmZsYWdzID0gd29yay0+aW5wdXQuZmxhZ3M7CisgICAgd29yay0+d29ya2xldHMuZnJvbnQoKS0+b3V0cHV0LmJ1ZmZlcnMuY2xlYXIoKTsKKyAgICB3b3JrLT53b3JrbGV0cy5mcm9udCgpLT5vdXRwdXQuYnVmZmVycy5wdXNoX2JhY2soY3JlYXRlTGluZWFyQnVmZmVyKGJsb2NrKSk7CisgICAgd29yay0+d29ya2xldHMuZnJvbnQoKS0+b3V0cHV0Lm9yZGluYWwgPSB3b3JrLT5pbnB1dC5vcmRpbmFsOworICAgIGlmIChlb3MpIHsKKyAgICAgICAgbVNpZ25hbGxlZE91dHB1dEVvcyA9IHRydWU7CisgICAgICAgIEFMT0dWKCJzaWduYWxsZWQgRU9TIik7CisgICAgfQorfQorCitjMl9zdGF0dXNfdCBDMlNvZnRBbXJEZWM6OmRyYWluKAorICAgICAgICB1aW50MzJfdCBkcmFpbk1vZGUsCisgICAgICAgIGNvbnN0IHN0ZDo6c2hhcmVkX3B0cjxDMkJsb2NrUG9vbD4gJnBvb2wpIHsKKyAgICAodm9pZClwb29sOworICAgIGlmIChkcmFpbk1vZGUgPT0gTk9fRFJBSU4pIHsKKyAgICAgICAgQUxPR1coImRyYWluIHdpdGggTk9fRFJBSU46IG5vLW9wIik7CisgICAgICAgIHJldHVybiBDMl9PSzsKKyAgICB9CisgICAgaWYgKGRyYWluTW9kZSA9PSBEUkFJTl9DSEFJTikgeworICAgICAgICBBTE9HVygiRFJBSU5fQ0hBSU4gbm90IHN1cHBvcnRlZCIpOworICAgICAgICByZXR1cm4gQzJfT01JVFRFRDsKKyAgICB9CisgICAgcmV0dXJuIEMyX09LOworfQorCitjbGFzcyBDMlNvZnRBTVJEZWNGYWN0b3J5IDogcHVibGljIEMyQ29tcG9uZW50RmFjdG9yeSB7CitwdWJsaWM6CisgICAgQzJTb2Z0QU1SRGVjRmFjdG9yeSgpIDogbUhlbHBlcihzdGQ6OnN0YXRpY19wb2ludGVyX2Nhc3Q8QzJSZWZsZWN0b3JIZWxwZXI+KAorICAgICAgICAgICAgR2V0Q29kZWMyUGxhdGZvcm1Db21wb25lbnRTdG9yZSgpLT5nZXRQYXJhbVJlZmxlY3RvcigpKSkgeworICAgIH0KKworICAgIHZpcnR1YWwgYzJfc3RhdHVzX3QgY3JlYXRlQ29tcG9uZW50KAorICAgICAgICAgICAgYzJfbm9kZV9pZF90IGlkLAorICAgICAgICAgICAgc3RkOjpzaGFyZWRfcHRyPEMyQ29tcG9uZW50PiogY29uc3QgY29tcG9uZW50LAorICAgICAgICAgICAgc3RkOjpmdW5jdGlvbjx2b2lkKEMyQ29tcG9uZW50Kik+IGRlbGV0ZXIpIG92ZXJyaWRlIHsKKyAgICAgICAgKmNvbXBvbmVudCA9IHN0ZDo6c2hhcmVkX3B0cjxDMkNvbXBvbmVudD4oCisgICAgICAgICAgICAgICAgbmV3IEMyU29mdEFtckRlYyhDT01QT05FTlRfTkFNRSwgaWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGQ6Om1ha2Vfc2hhcmVkPEMyU29mdEFtckRlYzo6SW50ZkltcGw+KG1IZWxwZXIpKSwKKyAgICAgICAgICAgICAgICBkZWxldGVyKTsKKyAgICAgICAgcmV0dXJuIEMyX09LOworICAgIH0KKworICAgIHZpcnR1YWwgYzJfc3RhdHVzX3QgY3JlYXRlSW50ZXJmYWNlKAorICAgICAgICAgICAgYzJfbm9kZV9pZF90IGlkLAorICAgICAgICAgICAgc3RkOjpzaGFyZWRfcHRyPEMyQ29tcG9uZW50SW50ZXJmYWNlPiogY29uc3QgaW50ZXJmYWNlLAorICAgICAgICAgICAgc3RkOjpmdW5jdGlvbjx2b2lkKEMyQ29tcG9uZW50SW50ZXJmYWNlKik+IGRlbGV0ZXIpIG92ZXJyaWRlIHsKKyAgICAgICAgKmludGVyZmFjZSA9IHN0ZDo6c2hhcmVkX3B0cjxDMkNvbXBvbmVudEludGVyZmFjZT4oCisgICAgICAgICAgICAgICAgbmV3IFNpbXBsZUludGVyZmFjZTxDMlNvZnRBbXJEZWM6OkludGZJbXBsPigKKyAgICAgICAgICAgICAgICAgICAgICAgIENPTVBPTkVOVF9OQU1FLCBpZCwgc3RkOjptYWtlX3NoYXJlZDxDMlNvZnRBbXJEZWM6OkludGZJbXBsPihtSGVscGVyKSksCisgICAgICAgICAgICAgICAgZGVsZXRlcik7CisgICAgICAgIHJldHVybiBDMl9PSzsKKyAgICB9CisKKyAgICB2aXJ0dWFsIH5DMlNvZnRBTVJEZWNGYWN0b3J5KCkgb3ZlcnJpZGUgPSBkZWZhdWx0OworCitwcml2YXRlOgorICAgIHN0ZDo6c2hhcmVkX3B0cjxDMlJlZmxlY3RvckhlbHBlcj4gbUhlbHBlcjsKK307CisKK30gIC8vIG5hbWVzcGFjZSBhbmRyb2lkCisKK2V4dGVybiAiQyIgOjpDMkNvbXBvbmVudEZhY3RvcnkqIENyZWF0ZUNvZGVjMkZhY3RvcnkoKSB7CisgICAgQUxPR1YoImluICVzIiwgX19mdW5jX18pOworICAgIHJldHVybiBuZXcgOjphbmRyb2lkOjpDMlNvZnRBTVJEZWNGYWN0b3J5KCk7Cit9CisKK2V4dGVybiAiQyIgdm9pZCBEZXN0cm95Q29kZWMyRmFjdG9yeSg6OkMyQ29tcG9uZW50RmFjdG9yeSogZmFjdG9yeSkgeworICAgIEFMT0dWKCJpbiAlcyIsIF9fZnVuY19fKTsKKyAgICBkZWxldGUgZmFjdG9yeTsKK30KZGlmZiAtLWdpdCBhL21lZGlhL2NvZGVjMi9jb21wb25lbnRzL2Ftcl9uYl93Yi9DMlNvZnRBbXJEZWMuaCBiL21lZGlhL2NvZGVjMi9jb21wb25lbnRzL2Ftcl9uYl93Yi9DMlNvZnRBbXJEZWMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42Mzg0NDUwCi0tLSAvZGV2L251bGwKKysrIGIvbWVkaWEvY29kZWMyL2NvbXBvbmVudHMvYW1yX25iX3diL0MyU29mdEFtckRlYy5oCkBAIC0wLDAgKzEsNjggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTggVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworCisjaWZuZGVmIEFORFJPSURfQzJfU09GVF9BTVJfREVDX0hfCisjZGVmaW5lIEFORFJPSURfQzJfU09GVF9BTVJfREVDX0hfCisKKyNpbmNsdWRlIDxTaW1wbGVDMkNvbXBvbmVudC5oPgorCisKK25hbWVzcGFjZSBhbmRyb2lkIHsKKworc3RydWN0IEMyU29mdEFtckRlYyA6IHB1YmxpYyBTaW1wbGVDMkNvbXBvbmVudCB7CisgICAgY2xhc3MgSW50ZkltcGw7CisKKyAgICBDMlNvZnRBbXJEZWMoY29uc3QgY2hhciAqbmFtZSwgYzJfbm9kZV9pZF90IGlkLAorICAgICAgICAgICAgICBjb25zdCBzdGQ6OnNoYXJlZF9wdHI8SW50ZkltcGw+ICZpbnRmSW1wbCk7CisgICAgdmlydHVhbCB+QzJTb2Z0QW1yRGVjKCk7CisKKyAgICAvLyBGcm9tIFNpbXBsZUMyQ29tcG9uZW50CisgICAgYzJfc3RhdHVzX3Qgb25Jbml0KCkgb3ZlcnJpZGU7CisgICAgYzJfc3RhdHVzX3Qgb25TdG9wKCkgb3ZlcnJpZGU7CisgICAgdm9pZCBvblJlc2V0KCkgb3ZlcnJpZGU7CisgICAgdm9pZCBvblJlbGVhc2UoKSBvdmVycmlkZTsKKyAgICBjMl9zdGF0dXNfdCBvbkZsdXNoX3NtKCkgb3ZlcnJpZGU7CisgICAgdm9pZCBwcm9jZXNzKAorICAgICAgICAgICAgY29uc3Qgc3RkOjp1bmlxdWVfcHRyPEMyV29yaz4gJndvcmssCisgICAgICAgICAgICBjb25zdCBzdGQ6OnNoYXJlZF9wdHI8QzJCbG9ja1Bvb2w+ICZwb29sKSBvdmVycmlkZTsKKyAgICBjMl9zdGF0dXNfdCBkcmFpbigKKyAgICAgICAgICAgIHVpbnQzMl90IGRyYWluTW9kZSwKKyAgICAgICAgICAgIGNvbnN0IHN0ZDo6c2hhcmVkX3B0cjxDMkJsb2NrUG9vbD4gJnBvb2wpIG92ZXJyaWRlOworcHJpdmF0ZToKKyAgICBlbnVtIHsKKyAgICAgICAga051bVNhbXBsZXNQZXJGcmFtZU5CICAgPSAxNjAsCisgICAgICAgIGtOdW1TYW1wbGVzUGVyRnJhbWVXQiAgID0gMzIwLAorICAgIH07CisKKyAgICBzdGQ6OnNoYXJlZF9wdHI8SW50ZkltcGw+IG1JbnRmOworICAgIHZvaWQgKm1BbXJIYW5kbGU7CisgICAgdm9pZCAqbURlY29kZXJCdWY7CisgICAgaW50MTZfdCAqbURlY29kZXJDb29raWU7CisKKyAgICBpbnQxNl90IG1JbnB1dFNhbXBsZUJ1ZmZlcls0NzddOworCisgICAgYm9vbCBtSXNXaWRlOworICAgIGJvb2wgbVNpZ25hbGxlZEVycm9yOworICAgIGJvb2wgbVNpZ25hbGxlZE91dHB1dEVvczsKKworICAgIHN0YXR1c190IGluaXREZWNvZGVyKCk7CisKKyAgICBDMl9ET19OT1RfQ09QWShDMlNvZnRBbXJEZWMpOworfTsKKworfSAgLy8gbmFtZXNwYWNlIGFuZHJvaWQKKworI2VuZGlmICAvLyBBTkRST0lEX0MyX1NPRlRfQU1SX0RFQ19IXwpkaWZmIC0tZ2l0IGEvbWVkaWEvY29kZWMyL2NvbXBvbmVudHMvYW1yX25iX3diL0MyU29mdEFtck5iRW5jLmNwcCBiL21lZGlhL2NvZGVjMi9jb21wb25lbnRzL2Ftcl9uYl93Yi9DMlNvZnRBbXJOYkVuYy5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2EyMTQ4MAotLS0gL2Rldi9udWxsCisrKyBiL21lZGlhL2NvZGVjMi9jb21wb25lbnRzL2Ftcl9uYl93Yi9DMlNvZnRBbXJOYkVuYy5jcHAKQEAgLTAsMCArMSwzNTUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTggVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworCisvLyNkZWZpbmUgTE9HX05ERUJVRyAwCisjZGVmaW5lIExPR19UQUcgIkMyU29mdEFtck5iRW5jIgorI2luY2x1ZGUgPGxvZy9sb2cuaD4KKworI2luY2x1ZGUgPG1lZGlhL3N0YWdlZnJpZ2h0L2ZvdW5kYXRpb24vTWVkaWFEZWZzLmg+CisKKyNpbmNsdWRlIDxDMlBsYXRmb3JtU3VwcG9ydC5oPgorI2luY2x1ZGUgPFNpbXBsZUMySW50ZXJmYWNlLmg+CisKKyNpbmNsdWRlICJDMlNvZnRBbXJOYkVuYy5oIgorCituYW1lc3BhY2UgYW5kcm9pZCB7CisKK2NvbnN0ZXhwciBjaGFyIENPTVBPTkVOVF9OQU1FW10gPSAiYzIuYW5kcm9pZC5hbXJuYi5lbmNvZGVyIjsKKworY2xhc3MgQzJTb2Z0QW1yTmJFbmM6OkludGZJbXBsIDogcHVibGljIEMySW50ZXJmYWNlSGVscGVyIHsKKyAgIHB1YmxpYzoKKyAgICBleHBsaWNpdCBJbnRmSW1wbChjb25zdCBzdGQ6OnNoYXJlZF9wdHI8QzJSZWZsZWN0b3JIZWxwZXI+JiBoZWxwZXIpCisgICAgICAgIDogQzJJbnRlcmZhY2VIZWxwZXIoaGVscGVyKSB7CisgICAgICAgIHNldERlcml2ZWRJbnN0YW5jZSh0aGlzKTsKKworICAgICAgICBhZGRQYXJhbWV0ZXIoCisgICAgICAgICAgICBEZWZpbmVQYXJhbShtSW5wdXRGb3JtYXQsIEMyX05BTUVfSU5QVVRfU1RSRUFNX0ZPUk1BVF9TRVRUSU5HKQorICAgICAgICAgICAgICAgIC53aXRoQ29uc3RWYWx1ZSgKKyAgICAgICAgICAgICAgICAgICAgbmV3IEMyU3RyZWFtRm9ybWF0Q29uZmlnOjppbnB1dCgwdSwgQzJGb3JtYXRBdWRpbykpCisgICAgICAgICAgICAgICAgLmJ1aWxkKCkpOworCisgICAgICAgIGFkZFBhcmFtZXRlcigKKyAgICAgICAgICAgIERlZmluZVBhcmFtKG1PdXRwdXRGb3JtYXQsIEMyX05BTUVfT1VUUFVUX1NUUkVBTV9GT1JNQVRfU0VUVElORykKKyAgICAgICAgICAgICAgICAud2l0aENvbnN0VmFsdWUoCisgICAgICAgICAgICAgICAgICAgIG5ldyBDMlN0cmVhbUZvcm1hdENvbmZpZzo6b3V0cHV0KDB1LCBDMkZvcm1hdENvbXByZXNzZWQpKQorICAgICAgICAgICAgICAgIC5idWlsZCgpKTsKKworICAgICAgICBhZGRQYXJhbWV0ZXIoCisgICAgICAgICAgICBEZWZpbmVQYXJhbShtSW5wdXRNZWRpYVR5cGUsIEMyX05BTUVfSU5QVVRfUE9SVF9NSU1FX1NFVFRJTkcpCisgICAgICAgICAgICAgICAgLndpdGhDb25zdFZhbHVlKEFsbG9jU2hhcmVkU3RyaW5nPEMyUG9ydE1pbWVDb25maWc6OmlucHV0PigKKyAgICAgICAgICAgICAgICAgICAgTUVESUFfTUlNRVRZUEVfQVVESU9fUkFXKSkKKyAgICAgICAgICAgICAgICAuYnVpbGQoKSk7CisKKyAgICAgICAgYWRkUGFyYW1ldGVyKAorICAgICAgICAgICAgRGVmaW5lUGFyYW0obU91dHB1dE1lZGlhVHlwZSwgQzJfTkFNRV9PVVRQVVRfUE9SVF9NSU1FX1NFVFRJTkcpCisgICAgICAgICAgICAgICAgLndpdGhDb25zdFZhbHVlKEFsbG9jU2hhcmVkU3RyaW5nPEMyUG9ydE1pbWVDb25maWc6Om91dHB1dD4oCisgICAgICAgICAgICAgICAgICAgIE1FRElBX01JTUVUWVBFX0FVRElPX0FNUl9OQikpCisgICAgICAgICAgICAgICAgLmJ1aWxkKCkpOworCisgICAgICAgIGFkZFBhcmFtZXRlcigKKyAgICAgICAgICAgICAgICBEZWZpbmVQYXJhbShtQ2hhbm5lbENvdW50LCBDMl9OQU1FX1NUUkVBTV9DSEFOTkVMX0NPVU5UX1NFVFRJTkcpCisgICAgICAgICAgICAgICAgLndpdGhEZWZhdWx0KG5ldyBDMlN0cmVhbUNoYW5uZWxDb3VudEluZm86OmlucHV0KDB1LCAxKSkKKyAgICAgICAgICAgICAgICAud2l0aEZpZWxkcyh7QzJGKG1DaGFubmVsQ291bnQsIHZhbHVlKS5lcXVhbFRvKDEpfSkKKyAgICAgICAgICAgICAgICAud2l0aFNldHRlcigoU2V0dGVyPGRlY2x0eXBlKCptQ2hhbm5lbENvdW50KT46OlN0cmljdFZhbHVlV2l0aE5vRGVwcykpCisgICAgICAgICAgICAgICAgLmJ1aWxkKCkpOworCisgICAgICAgIGFkZFBhcmFtZXRlcigKKyAgICAgICAgICAgIERlZmluZVBhcmFtKG1TYW1wbGVSYXRlLCBDMl9OQU1FX1NUUkVBTV9TQU1QTEVfUkFURV9TRVRUSU5HKQorICAgICAgICAgICAgICAgIC53aXRoRGVmYXVsdChuZXcgQzJTdHJlYW1TYW1wbGVSYXRlSW5mbzo6aW5wdXQoMHUsIDgwMDApKQorICAgICAgICAgICAgICAgIC53aXRoRmllbGRzKHtDMkYobVNhbXBsZVJhdGUsIHZhbHVlKS5lcXVhbFRvKDgwMDApfSkKKyAgICAgICAgICAgICAgICAud2l0aFNldHRlcigKKyAgICAgICAgICAgICAgICAgICAgKFNldHRlcjxkZWNsdHlwZSgqbVNhbXBsZVJhdGUpPjo6U3RyaWN0VmFsdWVXaXRoTm9EZXBzKSkKKyAgICAgICAgICAgICAgICAuYnVpbGQoKSk7CisKKyAgICAgICAgYWRkUGFyYW1ldGVyKAorICAgICAgICAgICAgICAgIERlZmluZVBhcmFtKG1CaXRyYXRlLCBDMl9OQU1FX1NUUkVBTV9CSVRSQVRFX1NFVFRJTkcpCisgICAgICAgICAgICAgICAgLndpdGhEZWZhdWx0KG5ldyBDMkJpdHJhdGVUdW5pbmc6Om91dHB1dCgwdSwgNDc1MCkpCisgICAgICAgICAgICAgICAgLndpdGhGaWVsZHMoe0MyRihtQml0cmF0ZSwgdmFsdWUpLmluUmFuZ2UoNDc1MCwgMTIyMDApfSkKKyAgICAgICAgICAgICAgICAud2l0aFNldHRlcihTZXR0ZXI8ZGVjbHR5cGUoKm1CaXRyYXRlKT46Ok5vblN0cmljdFZhbHVlV2l0aE5vRGVwcykKKyAgICAgICAgICAgICAgICAuYnVpbGQoKSk7CisKKyAgICAgICAgYWRkUGFyYW1ldGVyKAorICAgICAgICAgICAgICAgIERlZmluZVBhcmFtKG1JbnB1dE1heEJ1ZlNpemUsIEMyX1BBUkFNS0VZX0lOUFVUX01BWF9CVUZGRVJfU0laRSkKKyAgICAgICAgICAgICAgICAud2l0aENvbnN0VmFsdWUobmV3IEMyU3RyZWFtTWF4QnVmZmVyU2l6ZUluZm86OmlucHV0KDB1LCA4MTkyKSkKKyAgICAgICAgICAgICAgICAuYnVpbGQoKSk7CisgICAgfQorCisgICAgdWludDMyX3QgZ2V0U2FtcGxlUmF0ZSgpIGNvbnN0IHsgcmV0dXJuIG1TYW1wbGVSYXRlLT52YWx1ZTsgfQorICAgIHVpbnQzMl90IGdldENoYW5uZWxDb3VudCgpIGNvbnN0IHsgcmV0dXJuIG1DaGFubmVsQ291bnQtPnZhbHVlOyB9CisgICAgdWludDMyX3QgZ2V0Qml0cmF0ZSgpIGNvbnN0IHsgcmV0dXJuIG1CaXRyYXRlLT52YWx1ZTsgfQorCisgICBwcml2YXRlOgorICAgIHN0ZDo6c2hhcmVkX3B0cjxDMlN0cmVhbUZvcm1hdENvbmZpZzo6aW5wdXQ+IG1JbnB1dEZvcm1hdDsKKyAgICBzdGQ6OnNoYXJlZF9wdHI8QzJTdHJlYW1Gb3JtYXRDb25maWc6Om91dHB1dD4gbU91dHB1dEZvcm1hdDsKKyAgICBzdGQ6OnNoYXJlZF9wdHI8QzJQb3J0TWltZUNvbmZpZzo6aW5wdXQ+IG1JbnB1dE1lZGlhVHlwZTsKKyAgICBzdGQ6OnNoYXJlZF9wdHI8QzJQb3J0TWltZUNvbmZpZzo6b3V0cHV0PiBtT3V0cHV0TWVkaWFUeXBlOworICAgIHN0ZDo6c2hhcmVkX3B0cjxDMlN0cmVhbVNhbXBsZVJhdGVJbmZvOjppbnB1dD4gbVNhbXBsZVJhdGU7CisgICAgc3RkOjpzaGFyZWRfcHRyPEMyU3RyZWFtQ2hhbm5lbENvdW50SW5mbzo6aW5wdXQ+IG1DaGFubmVsQ291bnQ7CisgICAgc3RkOjpzaGFyZWRfcHRyPEMyQml0cmF0ZVR1bmluZzo6b3V0cHV0PiBtQml0cmF0ZTsKKyAgICBzdGQ6OnNoYXJlZF9wdHI8QzJTdHJlYW1NYXhCdWZmZXJTaXplSW5mbzo6aW5wdXQ+IG1JbnB1dE1heEJ1ZlNpemU7Cit9OworCitDMlNvZnRBbXJOYkVuYzo6QzJTb2Z0QW1yTmJFbmMoY29uc3QgY2hhciogbmFtZSwgYzJfbm9kZV9pZF90IGlkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0ZDo6c2hhcmVkX3B0cjxJbnRmSW1wbD4mIGludGZJbXBsKQorICAgIDogU2ltcGxlQzJDb21wb25lbnQoCisgICAgICAgICAgc3RkOjptYWtlX3NoYXJlZDxTaW1wbGVJbnRlcmZhY2U8SW50ZkltcGw+PihuYW1lLCBpZCwgaW50ZkltcGwpKSwKKyAgICAgIG1JbnRmKGludGZJbXBsKSwKKyAgICAgIG1FbmNTdGF0ZShudWxscHRyKSwKKyAgICAgIG1TaWRTdGF0ZShudWxscHRyKSB7Cit9CisKK0MyU29mdEFtck5iRW5jOjp+QzJTb2Z0QW1yTmJFbmMoKSB7CisgICAgb25SZWxlYXNlKCk7Cit9CisKK2MyX3N0YXR1c190IEMyU29mdEFtck5iRW5jOjpvbkluaXQoKSB7CisgICAgYm9vbCBkdHhfZW5hYmxlID0gZmFsc2U7CisKKyAgICBpZiAoQU1SRW5jb2RlSW5pdCgmbUVuY1N0YXRlLCAmbVNpZFN0YXRlLCBkdHhfZW5hYmxlKSAhPSAwKQorICAgICAgICByZXR1cm4gQzJfQ09SUlVQVEVEOworICAgIC8vIFRPRE86IGdldCBtb2RlIGRpcmVjdGx5IGZyb20gY29uZmlnCisgICAgc3dpdGNoKG1JbnRmLT5nZXRCaXRyYXRlKCkpIHsKKyAgICAgICAgY2FzZSA0NzUwOiBtTW9kZSA9IE1SNDc1OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgNTE1MDogbU1vZGUgPSBNUjUxNTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIDU5MDA6IG1Nb2RlID0gTVI1OTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIDY3MDA6IG1Nb2RlID0gTVI2NzsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIDc0MDA6IG1Nb2RlID0gTVI3NDsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIDc5NTA6IG1Nb2RlID0gTVI3OTU7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSAxMDIwMDogbU1vZGUgPSBNUjEwMjsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIDEyMjAwOiBtTW9kZSA9IE1SMTIyOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGRlZmF1bHQ6IG1Nb2RlID0gTVI3OTU7CisgICAgfQorICAgIG1Jc0ZpcnN0ID0gdHJ1ZTsKKyAgICBtU2lnbmFsbGVkRXJyb3IgPSBmYWxzZTsKKyAgICBtU2lnbmFsbGVkT3V0cHV0RW9zID0gZmFsc2U7CisgICAgbUFuY2hvclRpbWVTdGFtcCA9IDA7CisgICAgbVByb2Nlc3NlZFNhbXBsZXMgPSAwOworICAgIG1GaWxsZWRMZW4gPSAwOworCisgICAgcmV0dXJuIEMyX09LOworfQorCit2b2lkIEMyU29mdEFtck5iRW5jOjpvblJlbGVhc2UoKSB7CisgICAgaWYgKG1FbmNTdGF0ZSkgeworICAgICAgICBBTVJFbmNvZGVFeGl0KCZtRW5jU3RhdGUsICZtU2lkU3RhdGUpOworICAgICAgICBtRW5jU3RhdGUgPSBtU2lkU3RhdGUgPSBudWxscHRyOworICAgIH0KK30KKworYzJfc3RhdHVzX3QgQzJTb2Z0QW1yTmJFbmM6Om9uU3RvcCgpIHsKKyAgICBpZiAoQU1SRW5jb2RlUmVzZXQobUVuY1N0YXRlLCBtU2lkU3RhdGUpICE9IDApCisgICAgICAgIHJldHVybiBDMl9DT1JSVVBURUQ7CisgICAgbUlzRmlyc3QgPSB0cnVlOworICAgIG1TaWduYWxsZWRFcnJvciA9IGZhbHNlOworICAgIG1TaWduYWxsZWRPdXRwdXRFb3MgPSBmYWxzZTsKKyAgICBtQW5jaG9yVGltZVN0YW1wID0gMDsKKyAgICBtUHJvY2Vzc2VkU2FtcGxlcyA9IDA7CisgICAgbUZpbGxlZExlbiA9IDA7CisKKyAgICByZXR1cm4gQzJfT0s7Cit9CisKK3ZvaWQgQzJTb2Z0QW1yTmJFbmM6Om9uUmVzZXQoKSB7CisgICAgKHZvaWQpIG9uU3RvcCgpOworfQorCitjMl9zdGF0dXNfdCBDMlNvZnRBbXJOYkVuYzo6b25GbHVzaF9zbSgpIHsKKyAgICByZXR1cm4gb25TdG9wKCk7Cit9CisKK3N0YXRpYyB2b2lkIGZpbGxFbXB0eVdvcmsoY29uc3Qgc3RkOjp1bmlxdWVfcHRyPEMyV29yaz4gJndvcmspIHsKKyAgICB3b3JrLT53b3JrbGV0cy5mcm9udCgpLT5vdXRwdXQuZmxhZ3MgPSB3b3JrLT5pbnB1dC5mbGFnczsKKyAgICB3b3JrLT53b3JrbGV0cy5mcm9udCgpLT5vdXRwdXQuYnVmZmVycy5jbGVhcigpOworICAgIHdvcmstPndvcmtsZXRzLmZyb250KCktPm91dHB1dC5vcmRpbmFsID0gd29yay0+aW5wdXQub3JkaW5hbDsKKyAgICB3b3JrLT53b3JrbGV0c1Byb2Nlc3NlZCA9IDF1OworfQorCit2b2lkIEMyU29mdEFtck5iRW5jOjpwcm9jZXNzKAorICAgICAgICBjb25zdCBzdGQ6OnVuaXF1ZV9wdHI8QzJXb3JrPiAmd29yaywKKyAgICAgICAgY29uc3Qgc3RkOjpzaGFyZWRfcHRyPEMyQmxvY2tQb29sPiAmcG9vbCkgeworICAgIC8vIEluaXRpYWxpemUgb3V0cHV0IHdvcmsKKyAgICB3b3JrLT5yZXN1bHQgPSBDMl9PSzsKKyAgICB3b3JrLT53b3JrbGV0c1Byb2Nlc3NlZCA9IDF1OworICAgIHdvcmstPndvcmtsZXRzLmZyb250KCktPm91dHB1dC5mbGFncyA9IHdvcmstPmlucHV0LmZsYWdzOworCisgICAgaWYgKG1TaWduYWxsZWRFcnJvciB8fCBtU2lnbmFsbGVkT3V0cHV0RW9zKSB7CisgICAgICAgIHdvcmstPnJlc3VsdCA9IEMyX0JBRF9WQUxVRTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGJvb2wgZW9zID0gKCh3b3JrLT5pbnB1dC5mbGFncyAmIEMyRnJhbWVEYXRhOjpGTEFHX0VORF9PRl9TVFJFQU0pICE9IDApOworICAgIHNpemVfdCBpbk9mZnNldCA9IDB1OworICAgIHNpemVfdCBpblNpemUgPSAwdTsKKyAgICBDMlJlYWRWaWV3IHJWaWV3ID0gbUR1bW15UmVhZFZpZXc7CisgICAgaWYgKCF3b3JrLT5pbnB1dC5idWZmZXJzLmVtcHR5KCkpIHsKKyAgICAgICAgclZpZXcgPSB3b3JrLT5pbnB1dC5idWZmZXJzWzBdLT5kYXRhKCkubGluZWFyQmxvY2tzKCkuZnJvbnQoKS5tYXAoKS5nZXQoKTsKKyAgICAgICAgaW5TaXplID0gclZpZXcuY2FwYWNpdHkoKTsKKyAgICAgICAgaWYgKGluU2l6ZSAmJiByVmlldy5lcnJvcigpKSB7CisgICAgICAgICAgICBBTE9HRSgicmVhZCB2aWV3IG1hcCBmYWlsZWQgJWQiLCByVmlldy5lcnJvcigpKTsKKyAgICAgICAgICAgIHdvcmstPnJlc3VsdCA9IEMyX0NPUlJVUFRFRDsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgIH0KKworICAgIEFMT0dWKCJpbiBidWZmZXIgYXR0ci4gc2l6ZSAlenUgdGltZXN0YW1wICVkIGZyYW1laW5kZXggJWQsIGZsYWdzICV4IiwKKyAgICAgICAgICBpblNpemUsIChpbnQpd29yay0+aW5wdXQub3JkaW5hbC50aW1lc3RhbXAucGVla3UoKSwKKyAgICAgICAgICAoaW50KXdvcmstPmlucHV0Lm9yZGluYWwuZnJhbWVJbmRleC5wZWVrdSgpLCB3b3JrLT5pbnB1dC5mbGFncyk7CisKKyAgICBzaXplX3Qgb3V0Q2FwYWNpdHkgPSBrTnVtQnl0ZXNQZXJJbnB1dEZyYW1lOworICAgIG91dENhcGFjaXR5ICs9IG1GaWxsZWRMZW4gKyBpblNpemU7CisgICAgc3RkOjpzaGFyZWRfcHRyPEMyTGluZWFyQmxvY2s+IG91dHB1dEJsb2NrOworICAgIEMyTWVtb3J5VXNhZ2UgdXNhZ2UgPSB7IEMyTWVtb3J5VXNhZ2U6OkNQVV9SRUFELCBDMk1lbW9yeVVzYWdlOjpDUFVfV1JJVEUgfTsKKyAgICBjMl9zdGF0dXNfdCBlcnIgPSBwb29sLT5mZXRjaExpbmVhckJsb2NrKG91dENhcGFjaXR5LCB1c2FnZSwgJm91dHB1dEJsb2NrKTsKKyAgICBpZiAoZXJyICE9IEMyX09LKSB7CisgICAgICAgIEFMT0dFKCJmZXRjaExpbmVhckJsb2NrIGZvciBPdXRwdXQgZmFpbGVkIHdpdGggc3RhdHVzICVkIiwgZXJyKTsKKyAgICAgICAgd29yay0+cmVzdWx0ID0gQzJfTk9fTUVNT1JZOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIEMyV3JpdGVWaWV3IHdWaWV3ID0gb3V0cHV0QmxvY2stPm1hcCgpLmdldCgpOworICAgIGlmICh3Vmlldy5lcnJvcigpKSB7CisgICAgICAgIEFMT0dFKCJ3cml0ZSB2aWV3IG1hcCBmYWlsZWQgJWQiLCB3Vmlldy5lcnJvcigpKTsKKyAgICAgICAgd29yay0+cmVzdWx0ID0gQzJfQ09SUlVQVEVEOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIHVpbnQ2NF90IG91dFRpbWVTdGFtcCA9CisgICAgICAgIG1Qcm9jZXNzZWRTYW1wbGVzICogMTAwMDAwMGxsIC8gbUludGYtPmdldFNhbXBsZVJhdGUoKTsKKyAgICBzaXplX3QgaW5Qb3MgPSAwOworICAgIHNpemVfdCBvdXRQb3MgPSAwOworICAgIHdoaWxlIChpblBvcyA8IGluU2l6ZSkgeworICAgICAgICBjb25zdCB1aW50OF90ICppblB0ciA9IHJWaWV3LmRhdGEoKSArIGluT2Zmc2V0OworICAgICAgICBpbnQgdmFsaWRTYW1wbGVzID0gbUZpbGxlZExlbiAvIHNpemVvZihpbnQxNl90KTsKKyAgICAgICAgaWYgKChpblBvcyArIChrTnVtQnl0ZXNQZXJJbnB1dEZyYW1lIC0gbUZpbGxlZExlbikpIDw9IGluU2l6ZSkgeworICAgICAgICAgICAgbWVtY3B5KG1JbnB1dEZyYW1lICsgdmFsaWRTYW1wbGVzLCBpblB0ciArIGluUG9zLAorICAgICAgICAgICAgICAgICAgIChrTnVtQnl0ZXNQZXJJbnB1dEZyYW1lIC0gbUZpbGxlZExlbikpOworICAgICAgICAgICAgaW5Qb3MgKz0gKGtOdW1CeXRlc1BlcklucHV0RnJhbWUgLSBtRmlsbGVkTGVuKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIG1lbWNweShtSW5wdXRGcmFtZSArIHZhbGlkU2FtcGxlcywgaW5QdHIgKyBpblBvcywgKGluU2l6ZSAtIGluUG9zKSk7CisgICAgICAgICAgICBtRmlsbGVkTGVuICs9IChpblNpemUgLSBpblBvcyk7CisgICAgICAgICAgICBpblBvcyArPSAoaW5TaXplIC0gaW5Qb3MpOworICAgICAgICAgICAgaWYgKGVvcykgeworICAgICAgICAgICAgICAgIHZhbGlkU2FtcGxlcyA9IG1GaWxsZWRMZW4gLyBzaXplb2YoaW50MTZfdCk7CisgICAgICAgICAgICAgICAgbWVtc2V0KG1JbnB1dEZyYW1lICsgdmFsaWRTYW1wbGVzLCAwLCAoa051bUJ5dGVzUGVySW5wdXRGcmFtZSAtIG1GaWxsZWRMZW4pKTsKKyAgICAgICAgICAgIH0gZWxzZSBicmVhazsKKworICAgICAgICB9CisgICAgICAgIEZyYW1lX1R5cGVfM0dQUCBmcmFtZVR5cGU7CisgICAgICAgIGludCBudW1FbmNCeXRlcyA9IEFNUkVuY29kZShtRW5jU3RhdGUsIG1TaWRTdGF0ZSwgbU1vZGUsIG1JbnB1dEZyYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd1ZpZXcuZGF0YSgpICsgb3V0UG9zLCAmZnJhbWVUeXBlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQU1SX1RYX1dNRik7CisgICAgICAgIGlmIChudW1FbmNCeXRlcyA8IDAgfHwgbnVtRW5jQnl0ZXMgPiAoKGludClvdXRDYXBhY2l0eSAtIChpbnQpb3V0UG9zKSkgeworICAgICAgICAgICAgQUxPR0UoImVuY29kZUZyYW1lIGNhbGwgZmFpbGVkLCBzdGF0ZSBbJWQgJXp1ICV6dV0iLCBudW1FbmNCeXRlcywgb3V0UG9zLCBvdXRDYXBhY2l0eSk7CisgICAgICAgICAgICBtU2lnbmFsbGVkRXJyb3IgPSB0cnVlOworICAgICAgICAgICAgd29yay0+cmVzdWx0ID0gQzJfQ09SUlVQVEVEOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIC8vIENvbnZlcnQgaGVhZGVyIGJ5dGUgZnJvbSBXTUYgdG8gSUVURiBmb3JtYXQuCisgICAgICAgIGlmIChudW1FbmNCeXRlcyA+IDApCisgICAgICAgICAgICB3Vmlldy5kYXRhKClbb3V0UG9zXSA9ICgod1ZpZXcuZGF0YSgpW291dFBvc10gPDwgMykgfCA0KSAmIDB4N2M7CisgICAgICAgIG91dFBvcyArPSBudW1FbmNCeXRlczsKKyAgICAgICAgbVByb2Nlc3NlZFNhbXBsZXMgKz0ga051bVNhbXBsZXNQZXJGcmFtZTsKKyAgICAgICAgbUZpbGxlZExlbiA9IDA7CisgICAgfQorICAgIEFMT0dWKCJjYXVzYWwgc2FtcGxlIHNpemUgJWQiLCBtRmlsbGVkTGVuKTsKKyAgICBpZiAobUlzRmlyc3QpIHsKKyAgICAgICAgbUlzRmlyc3QgPSBmYWxzZTsKKyAgICAgICAgbUFuY2hvclRpbWVTdGFtcCA9IHdvcmstPmlucHV0Lm9yZGluYWwudGltZXN0YW1wLnBlZWt1bGwoKTsKKyAgICB9CisgICAgZmlsbEVtcHR5V29yayh3b3JrKTsKKyAgICBpZiAob3V0UG9zICE9IDApIHsKKyAgICAgICAgd29yay0+d29ya2xldHMuZnJvbnQoKS0+b3V0cHV0LmJ1ZmZlcnMucHVzaF9iYWNrKAorICAgICAgICAgICAgICAgIGNyZWF0ZUxpbmVhckJ1ZmZlcihzdGQ6Om1vdmUob3V0cHV0QmxvY2spLCAwLCBvdXRQb3MpKTsKKyAgICAgICAgd29yay0+d29ya2xldHMuZnJvbnQoKS0+b3V0cHV0Lm9yZGluYWwudGltZXN0YW1wID0gbUFuY2hvclRpbWVTdGFtcCArIG91dFRpbWVTdGFtcDsKKworICAgIH0KKyAgICBpZiAoZW9zKSB7CisgICAgICAgIG1TaWduYWxsZWRPdXRwdXRFb3MgPSB0cnVlOworICAgICAgICBBTE9HVigic2lnbmFsbGVkIEVPUyIpOworICAgICAgICBpZiAobUZpbGxlZExlbikgQUxPR1YoIkRpc2NhcmRpbmcgdHJhaWxpbmcgJWQgYnl0ZXMiLCBtRmlsbGVkTGVuKTsKKyAgICB9Cit9CisKK2MyX3N0YXR1c190IEMyU29mdEFtck5iRW5jOjpkcmFpbigKKyAgICAgICAgdWludDMyX3QgZHJhaW5Nb2RlLAorICAgICAgICBjb25zdCBzdGQ6OnNoYXJlZF9wdHI8QzJCbG9ja1Bvb2w+ICZwb29sKSB7CisgICAgKHZvaWQpIHBvb2w7CisgICAgaWYgKGRyYWluTW9kZSA9PSBOT19EUkFJTikgeworICAgICAgICBBTE9HVygiZHJhaW4gd2l0aCBOT19EUkFJTjogbm8tb3AiKTsKKyAgICAgICAgcmV0dXJuIEMyX09LOworICAgIH0KKyAgICBpZiAoZHJhaW5Nb2RlID09IERSQUlOX0NIQUlOKSB7CisgICAgICAgIEFMT0dXKCJEUkFJTl9DSEFJTiBub3Qgc3VwcG9ydGVkIik7CisgICAgICAgIHJldHVybiBDMl9PTUlUVEVEOworICAgIH0KKworICAgIG9uRmx1c2hfc20oKTsKKyAgICByZXR1cm4gQzJfT0s7Cit9CisKK2NsYXNzIEMyU29mdEFtck5iRW5jRmFjdG9yeSA6IHB1YmxpYyBDMkNvbXBvbmVudEZhY3RvcnkgeworcHVibGljOgorICAgIEMyU29mdEFtck5iRW5jRmFjdG9yeSgpCisgICAgICAgIDogbUhlbHBlcihzdGQ6OnN0YXRpY19wb2ludGVyX2Nhc3Q8QzJSZWZsZWN0b3JIZWxwZXI+KAorICAgICAgICAgICAgICBHZXRDb2RlYzJQbGF0Zm9ybUNvbXBvbmVudFN0b3JlKCktPmdldFBhcmFtUmVmbGVjdG9yKCkpKSB7fQorCisgICAgdmlydHVhbCBjMl9zdGF0dXNfdCBjcmVhdGVDb21wb25lbnQoCisgICAgICAgICAgICBjMl9ub2RlX2lkX3QgaWQsCisgICAgICAgICAgICBzdGQ6OnNoYXJlZF9wdHI8QzJDb21wb25lbnQ+KiBjb25zdCBjb21wb25lbnQsCisgICAgICAgICAgICBzdGQ6OmZ1bmN0aW9uPHZvaWQoQzJDb21wb25lbnQqKT4gZGVsZXRlcikgb3ZlcnJpZGUgeworICAgICAgICAqY29tcG9uZW50ID0gc3RkOjpzaGFyZWRfcHRyPEMyQ29tcG9uZW50PigKKyAgICAgICAgICAgIG5ldyBDMlNvZnRBbXJOYkVuYygKKyAgICAgICAgICAgICAgICBDT01QT05FTlRfTkFNRSwgaWQsCisgICAgICAgICAgICAgICAgc3RkOjptYWtlX3NoYXJlZDxDMlNvZnRBbXJOYkVuYzo6SW50ZkltcGw+KG1IZWxwZXIpKSwKKyAgICAgICAgICAgIGRlbGV0ZXIpOworICAgICAgICByZXR1cm4gQzJfT0s7CisgICAgfQorCisgICAgdmlydHVhbCBjMl9zdGF0dXNfdCBjcmVhdGVJbnRlcmZhY2UoCisgICAgICAgICAgICBjMl9ub2RlX2lkX3QgaWQsCisgICAgICAgICAgICBzdGQ6OnNoYXJlZF9wdHI8QzJDb21wb25lbnRJbnRlcmZhY2U+KiBjb25zdCBpbnRlcmZhY2UsCisgICAgICAgICAgICBzdGQ6OmZ1bmN0aW9uPHZvaWQoQzJDb21wb25lbnRJbnRlcmZhY2UqKT4gZGVsZXRlcikgb3ZlcnJpZGUgeworICAgICAgICAqaW50ZXJmYWNlID0gc3RkOjpzaGFyZWRfcHRyPEMyQ29tcG9uZW50SW50ZXJmYWNlPigKKyAgICAgICAgICAgIG5ldyBTaW1wbGVJbnRlcmZhY2U8QzJTb2Z0QW1yTmJFbmM6OkludGZJbXBsPigKKyAgICAgICAgICAgICAgICBDT01QT05FTlRfTkFNRSwgaWQsCisgICAgICAgICAgICAgICAgc3RkOjptYWtlX3NoYXJlZDxDMlNvZnRBbXJOYkVuYzo6SW50ZkltcGw+KG1IZWxwZXIpKSwKKyAgICAgICAgICAgIGRlbGV0ZXIpOworICAgICAgICByZXR1cm4gQzJfT0s7CisgICAgfQorCisgICAgdmlydHVhbCB+QzJTb2Z0QW1yTmJFbmNGYWN0b3J5KCkgb3ZlcnJpZGUgPSBkZWZhdWx0OworCitwcml2YXRlOgorICAgIHN0ZDo6c2hhcmVkX3B0cjxDMlJlZmxlY3RvckhlbHBlcj4gbUhlbHBlcjsKK307CisKK30gIC8vIG5hbWVzcGFjZSBhbmRyb2lkCisKK2V4dGVybiAiQyIgOjpDMkNvbXBvbmVudEZhY3RvcnkqIENyZWF0ZUNvZGVjMkZhY3RvcnkoKSB7CisgICAgQUxPR1YoImluICVzIiwgX19mdW5jX18pOworICAgIHJldHVybiBuZXcgOjphbmRyb2lkOjpDMlNvZnRBbXJOYkVuY0ZhY3RvcnkoKTsKK30KKworZXh0ZXJuICJDIiB2b2lkIERlc3Ryb3lDb2RlYzJGYWN0b3J5KDo6QzJDb21wb25lbnRGYWN0b3J5KiBmYWN0b3J5KSB7CisgICAgQUxPR1YoImluICVzIiwgX19mdW5jX18pOworICAgIGRlbGV0ZSBmYWN0b3J5OworfQpkaWZmIC0tZ2l0IGEvbWVkaWEvY29kZWMyL2NvbXBvbmVudHMvYW1yX25iX3diL0MyU29mdEFtck5iRW5jLmggYi9tZWRpYS9jb2RlYzIvY29tcG9uZW50cy9hbXJfbmJfd2IvQzJTb2Z0QW1yTmJFbmMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42YWIxNGRiCi0tLSAvZGV2L251bGwKKysrIGIvbWVkaWEvY29kZWMyL2NvbXBvbmVudHMvYW1yX25iX3diL0MyU29mdEFtck5iRW5jLmgKQEAgLTAsMCArMSw2NyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxOCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCisKKyNpZm5kZWYgQU5EUk9JRF9DMl9TT0ZUX0FNUl9OQl9FTkNfSF8KKyNkZWZpbmUgQU5EUk9JRF9DMl9TT0ZUX0FNUl9OQl9FTkNfSF8KKworI2luY2x1ZGUgPFNpbXBsZUMyQ29tcG9uZW50Lmg+CisKKyNpbmNsdWRlICJnc21hbXJfZW5jLmgiCisKK25hbWVzcGFjZSBhbmRyb2lkIHsKKworY2xhc3MgQzJTb2Z0QW1yTmJFbmMgOiBwdWJsaWMgU2ltcGxlQzJDb21wb25lbnQgeworICAgcHVibGljOgorICAgIGNsYXNzIEludGZJbXBsOworICAgIEMyU29mdEFtck5iRW5jKGNvbnN0IGNoYXIqIG5hbWUsIGMyX25vZGVfaWRfdCBpZCwKKyAgICAgICAgICAgICAgICAgICBjb25zdCBzdGQ6OnNoYXJlZF9wdHI8SW50ZkltcGw+JiBpbnRmSW1wbCk7CisgICAgdmlydHVhbCB+QzJTb2Z0QW1yTmJFbmMoKTsKKworICAgIC8vIEZyb20gU2ltcGxlQzJDb21wb25lbnQKKyAgICBjMl9zdGF0dXNfdCBvbkluaXQoKSBvdmVycmlkZTsKKyAgICBjMl9zdGF0dXNfdCBvblN0b3AoKSBvdmVycmlkZTsKKyAgICB2b2lkIG9uUmVzZXQoKSBvdmVycmlkZTsKKyAgICB2b2lkIG9uUmVsZWFzZSgpIG92ZXJyaWRlOworICAgIGMyX3N0YXR1c190IG9uRmx1c2hfc20oKSBvdmVycmlkZTsKKyAgICB2b2lkIHByb2Nlc3MoCisgICAgICAgICAgICBjb25zdCBzdGQ6OnVuaXF1ZV9wdHI8QzJXb3JrPiAmd29yaywKKyAgICAgICAgICAgIGNvbnN0IHN0ZDo6c2hhcmVkX3B0cjxDMkJsb2NrUG9vbD4gJnBvb2wpIG92ZXJyaWRlOworICAgIGMyX3N0YXR1c190IGRyYWluKAorICAgICAgICAgICAgdWludDMyX3QgZHJhaW5Nb2RlLAorICAgICAgICAgICAgY29uc3Qgc3RkOjpzaGFyZWRfcHRyPEMyQmxvY2tQb29sPiAmcG9vbCkgb3ZlcnJpZGU7CisKK3ByaXZhdGU6CisgICAgc3RkOjpzaGFyZWRfcHRyPEludGZJbXBsPiBtSW50ZjsKKyAgICBzdGF0aWMgY29uc3QgaW50MzJfdCBrTnVtU2FtcGxlc1BlckZyYW1lID0gTF9GUkFNRTsKKyAgICBzdGF0aWMgY29uc3QgaW50MzJfdCBrTnVtQnl0ZXNQZXJJbnB1dEZyYW1lID0ga051bVNhbXBsZXNQZXJGcmFtZSAqIHNpemVvZihpbnQxNl90KTsKKworICAgIHZvaWQgKm1FbmNTdGF0ZTsKKyAgICB2b2lkICptU2lkU3RhdGU7CisgICAgTW9kZSBtTW9kZTsKKyAgICBib29sIG1Jc0ZpcnN0OworICAgIGJvb2wgbVNpZ25hbGxlZEVycm9yOworICAgIGJvb2wgbVNpZ25hbGxlZE91dHB1dEVvczsKKyAgICB1aW50NjRfdCBtQW5jaG9yVGltZVN0YW1wOworICAgIHVpbnQ2NF90IG1Qcm9jZXNzZWRTYW1wbGVzOworICAgIGludDMyX3QgbUZpbGxlZExlbjsKKyAgICBpbnQxNl90IG1JbnB1dEZyYW1lW2tOdW1TYW1wbGVzUGVyRnJhbWVdOworCisgICAgQzJfRE9fTk9UX0NPUFkoQzJTb2Z0QW1yTmJFbmMpOworfTsKKworfSAgLy8gbmFtZXNwYWNlIGFuZHJvaWQKKworI2VuZGlmICAvLyBBTkRST0lEX0MyX1NPRlRfQU1SX05CX0VOQ19IXwpkaWZmIC0tZ2l0IGEvbWVkaWEvY29kZWMyL2NvbXBvbmVudHMvYW1yX25iX3diL0MyU29mdEFtcldiRW5jLmNwcCBiL21lZGlhL2NvZGVjMi9jb21wb25lbnRzL2Ftcl9uYl93Yi9DMlNvZnRBbXJXYkVuYy5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmUzODkyZgotLS0gL2Rldi9udWxsCisrKyBiL21lZGlhL2NvZGVjMi9jb21wb25lbnRzL2Ftcl9uYl93Yi9DMlNvZnRBbXJXYkVuYy5jcHAKQEAgLTAsMCArMSw0MzAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTggVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworCisvLyNkZWZpbmUgTE9HX05ERUJVRyAwCisjZGVmaW5lIExPR19UQUcgIkMyU29mdEFtcldiRW5jIgorI2luY2x1ZGUgPGxvZy9sb2cuaD4KKworI2luY2x1ZGUgPG1lZGlhL3N0YWdlZnJpZ2h0L2ZvdW5kYXRpb24vTWVkaWFEZWZzLmg+CisKKyNpbmNsdWRlIDxDMkRlYnVnLmg+CisjaW5jbHVkZSA8QzJQbGF0Zm9ybVN1cHBvcnQuaD4KKyNpbmNsdWRlIDxTaW1wbGVDMkludGVyZmFjZS5oPgorCisjaW5jbHVkZSAiQzJTb2Z0QW1yV2JFbmMuaCIKKyNpbmNsdWRlICJjbW5NZW1vcnkuaCIKKworbmFtZXNwYWNlIGFuZHJvaWQgeworCitjb25zdGV4cHIgY2hhciBDT01QT05FTlRfTkFNRVtdID0gImMyLmFuZHJvaWQuYW1yd2IuZW5jb2RlciI7CisKK2NsYXNzIEMyU29mdEFtcldiRW5jOjpJbnRmSW1wbCA6IHB1YmxpYyBDMkludGVyZmFjZUhlbHBlciB7CisgICBwdWJsaWM6CisgICAgZXhwbGljaXQgSW50ZkltcGwoY29uc3Qgc3RkOjpzaGFyZWRfcHRyPEMyUmVmbGVjdG9ySGVscGVyPiYgaGVscGVyKQorICAgICAgICA6IEMySW50ZXJmYWNlSGVscGVyKGhlbHBlcikgeworICAgICAgICBzZXREZXJpdmVkSW5zdGFuY2UodGhpcyk7CisKKyAgICAgICAgYWRkUGFyYW1ldGVyKAorICAgICAgICAgICAgRGVmaW5lUGFyYW0obUlucHV0Rm9ybWF0LCBDMl9OQU1FX0lOUFVUX1NUUkVBTV9GT1JNQVRfU0VUVElORykKKyAgICAgICAgICAgICAgICAud2l0aENvbnN0VmFsdWUoCisgICAgICAgICAgICAgICAgICAgIG5ldyBDMlN0cmVhbUZvcm1hdENvbmZpZzo6aW5wdXQoMHUsIEMyRm9ybWF0QXVkaW8pKQorICAgICAgICAgICAgICAgIC5idWlsZCgpKTsKKworICAgICAgICBhZGRQYXJhbWV0ZXIoCisgICAgICAgICAgICBEZWZpbmVQYXJhbShtT3V0cHV0Rm9ybWF0LCBDMl9OQU1FX09VVFBVVF9TVFJFQU1fRk9STUFUX1NFVFRJTkcpCisgICAgICAgICAgICAgICAgLndpdGhDb25zdFZhbHVlKAorICAgICAgICAgICAgICAgICAgICBuZXcgQzJTdHJlYW1Gb3JtYXRDb25maWc6Om91dHB1dCgwdSwgQzJGb3JtYXRDb21wcmVzc2VkKSkKKyAgICAgICAgICAgICAgICAuYnVpbGQoKSk7CisKKyAgICAgICAgYWRkUGFyYW1ldGVyKAorICAgICAgICAgICAgRGVmaW5lUGFyYW0obUlucHV0TWVkaWFUeXBlLCBDMl9OQU1FX0lOUFVUX1BPUlRfTUlNRV9TRVRUSU5HKQorICAgICAgICAgICAgICAgIC53aXRoQ29uc3RWYWx1ZShBbGxvY1NoYXJlZFN0cmluZzxDMlBvcnRNaW1lQ29uZmlnOjppbnB1dD4oCisgICAgICAgICAgICAgICAgICAgIE1FRElBX01JTUVUWVBFX0FVRElPX1JBVykpCisgICAgICAgICAgICAgICAgLmJ1aWxkKCkpOworCisgICAgICAgIGFkZFBhcmFtZXRlcigKKyAgICAgICAgICAgIERlZmluZVBhcmFtKG1PdXRwdXRNZWRpYVR5cGUsIEMyX05BTUVfT1VUUFVUX1BPUlRfTUlNRV9TRVRUSU5HKQorICAgICAgICAgICAgICAgIC53aXRoQ29uc3RWYWx1ZShBbGxvY1NoYXJlZFN0cmluZzxDMlBvcnRNaW1lQ29uZmlnOjpvdXRwdXQ+KAorICAgICAgICAgICAgICAgICAgICBNRURJQV9NSU1FVFlQRV9BVURJT19BTVJfV0IpKQorICAgICAgICAgICAgICAgIC5idWlsZCgpKTsKKworICAgICAgICBhZGRQYXJhbWV0ZXIoCisgICAgICAgICAgICAgICAgRGVmaW5lUGFyYW0obUNoYW5uZWxDb3VudCwgQzJfTkFNRV9TVFJFQU1fQ0hBTk5FTF9DT1VOVF9TRVRUSU5HKQorICAgICAgICAgICAgICAgIC53aXRoRGVmYXVsdChuZXcgQzJTdHJlYW1DaGFubmVsQ291bnRJbmZvOjppbnB1dCgwdSwgMSkpCisgICAgICAgICAgICAgICAgLndpdGhGaWVsZHMoe0MyRihtQ2hhbm5lbENvdW50LCB2YWx1ZSkuZXF1YWxUbygxKX0pCisgICAgICAgICAgICAgICAgLndpdGhTZXR0ZXIoKFNldHRlcjxkZWNsdHlwZSgqbUNoYW5uZWxDb3VudCk+OjpTdHJpY3RWYWx1ZVdpdGhOb0RlcHMpKQorICAgICAgICAgICAgICAgIC5idWlsZCgpKTsKKworICAgICAgICBhZGRQYXJhbWV0ZXIoCisgICAgICAgICAgICBEZWZpbmVQYXJhbShtU2FtcGxlUmF0ZSwgQzJfTkFNRV9TVFJFQU1fU0FNUExFX1JBVEVfU0VUVElORykKKyAgICAgICAgICAgICAgICAud2l0aERlZmF1bHQobmV3IEMyU3RyZWFtU2FtcGxlUmF0ZUluZm86OmlucHV0KDB1LCAxNjAwMCkpCisgICAgICAgICAgICAgICAgLndpdGhGaWVsZHMoe0MyRihtU2FtcGxlUmF0ZSwgdmFsdWUpLmVxdWFsVG8oMTYwMDApfSkKKyAgICAgICAgICAgICAgICAud2l0aFNldHRlcigKKyAgICAgICAgICAgICAgICAgICAgKFNldHRlcjxkZWNsdHlwZSgqbVNhbXBsZVJhdGUpPjo6U3RyaWN0VmFsdWVXaXRoTm9EZXBzKSkKKyAgICAgICAgICAgICAgICAuYnVpbGQoKSk7CisKKyAgICAgICAgYWRkUGFyYW1ldGVyKAorICAgICAgICAgICAgICAgIERlZmluZVBhcmFtKG1CaXRyYXRlLCBDMl9OQU1FX1NUUkVBTV9CSVRSQVRFX1NFVFRJTkcpCisgICAgICAgICAgICAgICAgLndpdGhEZWZhdWx0KG5ldyBDMkJpdHJhdGVUdW5pbmc6Om91dHB1dCgwdSwgNjYwMCkpCisgICAgICAgICAgICAgICAgLndpdGhGaWVsZHMoe0MyRihtQml0cmF0ZSwgdmFsdWUpLmluUmFuZ2UoNjYwMCwgMjM4NTApfSkKKyAgICAgICAgICAgICAgICAud2l0aFNldHRlcihTZXR0ZXI8ZGVjbHR5cGUoKm1CaXRyYXRlKT46Ok5vblN0cmljdFZhbHVlV2l0aE5vRGVwcykKKyAgICAgICAgICAgICAgICAuYnVpbGQoKSk7CisKKyAgICAgICAgYWRkUGFyYW1ldGVyKAorICAgICAgICAgICAgICAgIERlZmluZVBhcmFtKG1JbnB1dE1heEJ1ZlNpemUsIEMyX1BBUkFNS0VZX0lOUFVUX01BWF9CVUZGRVJfU0laRSkKKyAgICAgICAgICAgICAgICAud2l0aENvbnN0VmFsdWUobmV3IEMyU3RyZWFtTWF4QnVmZmVyU2l6ZUluZm86OmlucHV0KDB1LCA4MTkyKSkKKyAgICAgICAgICAgICAgICAuYnVpbGQoKSk7CisgICAgfQorCisgICAgdWludDMyX3QgZ2V0U2FtcGxlUmF0ZSgpIGNvbnN0IHsgcmV0dXJuIG1TYW1wbGVSYXRlLT52YWx1ZTsgfQorICAgIHVpbnQzMl90IGdldENoYW5uZWxDb3VudCgpIGNvbnN0IHsgcmV0dXJuIG1DaGFubmVsQ291bnQtPnZhbHVlOyB9CisgICAgdWludDMyX3QgZ2V0Qml0cmF0ZSgpIGNvbnN0IHsgcmV0dXJuIG1CaXRyYXRlLT52YWx1ZTsgfQorCisgICBwcml2YXRlOgorICAgIHN0ZDo6c2hhcmVkX3B0cjxDMlN0cmVhbUZvcm1hdENvbmZpZzo6aW5wdXQ+IG1JbnB1dEZvcm1hdDsKKyAgICBzdGQ6OnNoYXJlZF9wdHI8QzJTdHJlYW1Gb3JtYXRDb25maWc6Om91dHB1dD4gbU91dHB1dEZvcm1hdDsKKyAgICBzdGQ6OnNoYXJlZF9wdHI8QzJQb3J0TWltZUNvbmZpZzo6aW5wdXQ+IG1JbnB1dE1lZGlhVHlwZTsKKyAgICBzdGQ6OnNoYXJlZF9wdHI8QzJQb3J0TWltZUNvbmZpZzo6b3V0cHV0PiBtT3V0cHV0TWVkaWFUeXBlOworICAgIHN0ZDo6c2hhcmVkX3B0cjxDMlN0cmVhbVNhbXBsZVJhdGVJbmZvOjppbnB1dD4gbVNhbXBsZVJhdGU7CisgICAgc3RkOjpzaGFyZWRfcHRyPEMyU3RyZWFtQ2hhbm5lbENvdW50SW5mbzo6aW5wdXQ+IG1DaGFubmVsQ291bnQ7CisgICAgc3RkOjpzaGFyZWRfcHRyPEMyQml0cmF0ZVR1bmluZzo6b3V0cHV0PiBtQml0cmF0ZTsKKyAgICBzdGQ6OnNoYXJlZF9wdHI8QzJTdHJlYW1NYXhCdWZmZXJTaXplSW5mbzo6aW5wdXQ+IG1JbnB1dE1heEJ1ZlNpemU7Cit9OworCitDMlNvZnRBbXJXYkVuYzo6QzJTb2Z0QW1yV2JFbmMoY29uc3QgY2hhciogbmFtZSwgYzJfbm9kZV9pZF90IGlkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0ZDo6c2hhcmVkX3B0cjxJbnRmSW1wbD4mIGludGZJbXBsKQorICAgIDogU2ltcGxlQzJDb21wb25lbnQoCisgICAgICAgICAgc3RkOjptYWtlX3NoYXJlZDxTaW1wbGVJbnRlcmZhY2U8SW50ZkltcGw+PihuYW1lLCBpZCwgaW50ZkltcGwpKSwKKyAgICAgIG1JbnRmKGludGZJbXBsKSwKKyAgICAgIG1FbmNvZGVySGFuZGxlKG51bGxwdHIpLAorICAgICAgbUFwaUhhbmRsZShudWxscHRyKSwKKyAgICAgIG1NZW1PcGVyYXRvcihudWxscHRyKSB7Cit9CisKK0MyU29mdEFtcldiRW5jOjp+QzJTb2Z0QW1yV2JFbmMoKSB7CisgICAgb25SZWxlYXNlKCk7Cit9CisKK2MyX3N0YXR1c190IEMyU29mdEFtcldiRW5jOjpvbkluaXQoKSB7CisgICAgLy8gVE9ETzogZ2V0IG1vZGUgZGlyZWN0bHkgZnJvbSBjb25maWcKKyAgICBzd2l0Y2gobUludGYtPmdldEJpdHJhdGUoKSkgeworICAgICAgICBjYXNlIDY2MDA6IG1Nb2RlID0gVk9BTVJXQl9NRDY2OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgODg1MDogbU1vZGUgPSBWT0FNUldCX01EODg1OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgMTI2NTA6IG1Nb2RlID0gVk9BTVJXQl9NRDEyNjU7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSAxNDI1MDogbU1vZGUgPSBWT0FNUldCX01EMTQyNTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIDE1ODUwOiBtTW9kZSA9IFZPQU1SV0JfTUQxNTg1OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgMTgyNTA6IG1Nb2RlID0gVk9BTVJXQl9NRDE4MjU7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSAxOTg1MDogbU1vZGUgPSBWT0FNUldCX01EMTk4NTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIDIzMDUwOiBtTW9kZSA9IFZPQU1SV0JfTUQyMzA1OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgMjM4NTA6IG1Nb2RlID0gVk9BTVJXQl9NRDIzODU7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgZGVmYXVsdDogbU1vZGUgPSBWT0FNUldCX01EMjMwNTsKKyAgICB9CisgICAgc3RhdHVzX3QgZXJyID0gaW5pdEVuY29kZXIoKTsKKyAgICBtSXNGaXJzdCA9IHRydWU7CisgICAgbVNpZ25hbGxlZEVycm9yID0gZmFsc2U7CisgICAgbVNpZ25hbGxlZE91dHB1dEVvcyA9IGZhbHNlOworICAgIG1BbmNob3JUaW1lU3RhbXAgPSAwOworICAgIG1Qcm9jZXNzZWRTYW1wbGVzID0gMDsKKyAgICBtRmlsbGVkTGVuID0gMDsKKworICAgIHJldHVybiBlcnIgPT0gT0sgPyBDMl9PSyA6IEMyX05PX01FTU9SWTsKK30KKwordm9pZCBDMlNvZnRBbXJXYkVuYzo6b25SZWxlYXNlKCkgeworICAgIGlmIChtRW5jb2RlckhhbmRsZSkgeworICAgICAgICBDSEVDS19FUSgoVk9fVTMyKVZPX0VSUl9OT05FLCBtQXBpSGFuZGxlLT5VbmluaXQobUVuY29kZXJIYW5kbGUpKTsKKyAgICAgICAgbUVuY29kZXJIYW5kbGUgPSBudWxscHRyOworICAgIH0KKyAgICBpZiAobUFwaUhhbmRsZSkgeworICAgICAgICBkZWxldGUgbUFwaUhhbmRsZTsKKyAgICAgICAgbUFwaUhhbmRsZSA9IG51bGxwdHI7CisgICAgfQorICAgIGlmIChtTWVtT3BlcmF0b3IpIHsKKyAgICAgICAgZGVsZXRlIG1NZW1PcGVyYXRvcjsKKyAgICAgICAgbU1lbU9wZXJhdG9yID0gbnVsbHB0cjsKKyAgICB9Cit9CisKK2MyX3N0YXR1c190IEMyU29mdEFtcldiRW5jOjpvblN0b3AoKSB7CisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBrTnVtU2FtcGxlc1BlckZyYW1lOyBpKyspIHsKKyAgICAgICAgbUlucHV0RnJhbWVbaV0gPSAweDAwMDg7IC8qIEVIRl9NQVNLICovCisgICAgfQorICAgIHVpbnQ4X3Qgb3V0QnVmZmVyW2tOdW1CeXRlc1BlcklucHV0RnJhbWVdOworICAgICh2b2lkKSBlbmNvZGVJbnB1dChvdXRCdWZmZXIsIGtOdW1CeXRlc1BlcklucHV0RnJhbWUpOworICAgIG1Jc0ZpcnN0ID0gdHJ1ZTsKKyAgICBtU2lnbmFsbGVkRXJyb3IgPSBmYWxzZTsKKyAgICBtU2lnbmFsbGVkT3V0cHV0RW9zID0gZmFsc2U7CisgICAgbUFuY2hvclRpbWVTdGFtcCA9IDA7CisgICAgbVByb2Nlc3NlZFNhbXBsZXMgPSAwOworICAgIG1GaWxsZWRMZW4gPSAwOworCisgICAgcmV0dXJuIEMyX09LOworfQorCit2b2lkIEMyU29mdEFtcldiRW5jOjpvblJlc2V0KCkgeworICAgICh2b2lkKSBvblN0b3AoKTsKK30KKworYzJfc3RhdHVzX3QgQzJTb2Z0QW1yV2JFbmM6Om9uRmx1c2hfc20oKSB7CisgICAgcmV0dXJuIG9uU3RvcCgpOworfQorCitzdGF0dXNfdCBDMlNvZnRBbXJXYkVuYzo6aW5pdEVuY29kZXIoKSB7CisgICAgbUFwaUhhbmRsZSA9IG5ldyBWT19BVURJT19DT0RFQ0FQSTsKKyAgICBpZiAoIW1BcGlIYW5kbGUpIHJldHVybiBOT19NRU1PUlk7CisKKyAgICBpZiAoVk9fRVJSX05PTkUgIT0gdm9HZXRBTVJXQkVuY0FQSShtQXBpSGFuZGxlKSkgeworICAgICAgICBBTE9HRSgiRmFpbGVkIHRvIGdldCBhcGkgaGFuZGxlIik7CisgICAgICAgIHJldHVybiBVTktOT1dOX0VSUk9SOworICAgIH0KKworICAgIG1NZW1PcGVyYXRvciA9IG5ldyBWT19NRU1fT1BFUkFUT1I7CisgICAgaWYgKCFtTWVtT3BlcmF0b3IpIHJldHVybiBOT19NRU1PUlk7CisKKyAgICBtTWVtT3BlcmF0b3ItPkFsbG9jID0gY21uTWVtQWxsb2M7CisgICAgbU1lbU9wZXJhdG9yLT5Db3B5ID0gY21uTWVtQ29weTsKKyAgICBtTWVtT3BlcmF0b3ItPkZyZWUgPSBjbW5NZW1GcmVlOworICAgIG1NZW1PcGVyYXRvci0+U2V0ID0gY21uTWVtU2V0OworICAgIG1NZW1PcGVyYXRvci0+Q2hlY2sgPSBjbW5NZW1DaGVjazsKKworICAgIFZPX0NPREVDX0lOSVRfVVNFUkRBVEEgdXNlckRhdGE7CisgICAgbWVtc2V0KCZ1c2VyRGF0YSwgMCwgc2l6ZW9mKHVzZXJEYXRhKSk7CisgICAgdXNlckRhdGEubWVtZmxhZyA9IFZPX0lNRl9VU0VSTUVNT1BFUkFUT1I7CisgICAgdXNlckRhdGEubWVtRGF0YSA9IChWT19QVFIpIG1NZW1PcGVyYXRvcjsKKworICAgIGlmIChWT19FUlJfTk9ORSAhPSBtQXBpSGFuZGxlLT5Jbml0KAorICAgICAgICAgICAgICAgICZtRW5jb2RlckhhbmRsZSwgVk9fQVVESU9fQ29kaW5nQU1SV0IsICZ1c2VyRGF0YSkpIHsKKyAgICAgICAgQUxPR0UoIkZhaWxlZCB0byBpbml0IEFNUldCIGVuY29kZXIiKTsKKyAgICAgICAgcmV0dXJuIFVOS05PV05fRVJST1I7CisgICAgfQorCisgICAgVk9BTVJXQkZSQU1FVFlQRSB0eXBlID0gVk9BTVJXQl9SRkMzMjY3OworICAgIGlmIChWT19FUlJfTk9ORSAhPSBtQXBpSGFuZGxlLT5TZXRQYXJhbSgKKyAgICAgICAgICAgICAgICBtRW5jb2RlckhhbmRsZSwgVk9fUElEX0FNUldCX0ZSQU1FVFlQRSwgJnR5cGUpKSB7CisgICAgICAgIEFMT0dFKCJGYWlsZWQgdG8gc2V0IEFNUldCIGVuY29kZXIgZnJhbWUgdHlwZSB0byAlZCIsIHR5cGUpOworICAgICAgICByZXR1cm4gVU5LTk9XTl9FUlJPUjsKKyAgICB9CisKKyAgICBpZiAoVk9fRVJSX05PTkUgIT0KKyAgICAgICAgICAgIG1BcGlIYW5kbGUtPlNldFBhcmFtKAorICAgICAgICAgICAgICAgICAgICBtRW5jb2RlckhhbmRsZSwgVk9fUElEX0FNUldCX01PREUsICAmbU1vZGUpKSB7CisgICAgICAgIEFMT0dFKCJGYWlsZWQgdG8gc2V0IEFNUldCIGVuY29kZXIgbW9kZSB0byAlZCIsIG1Nb2RlKTsKKyAgICAgICAgcmV0dXJuIFVOS05PV05fRVJST1I7CisgICAgfQorCisgICAgcmV0dXJuIE9LOworfQorCitpbnQgQzJTb2Z0QW1yV2JFbmM6OmVuY29kZUlucHV0KHVpbnQ4X3QgKmJ1ZmZlciwgdWludDMyX3QgbGVuZ3RoKSB7CisgICAgVk9fQ09ERUNCVUZGRVIgaW5wdXREYXRhOworICAgIG1lbXNldCgmaW5wdXREYXRhLCAwLCBzaXplb2YoaW5wdXREYXRhKSk7CisgICAgaW5wdXREYXRhLkJ1ZmZlciA9ICh1bnNpZ25lZCBjaGFyICopIG1JbnB1dEZyYW1lOworICAgIGlucHV0RGF0YS5MZW5ndGggPSBrTnVtQnl0ZXNQZXJJbnB1dEZyYW1lOworCisgICAgQ0hFQ0tfRVEoKFZPX1UzMilWT19FUlJfTk9ORSwKKyAgICAgICAgICAgICBtQXBpSGFuZGxlLT5TZXRJbnB1dERhdGEobUVuY29kZXJIYW5kbGUsICZpbnB1dERhdGEpKTsKKworICAgIFZPX0FVRElPX09VVFBVVElORk8gb3V0cHV0SW5mbzsKKyAgICBtZW1zZXQoJm91dHB1dEluZm8sIDAsIHNpemVvZihvdXRwdXRJbmZvKSk7CisgICAgVk9fQ09ERUNCVUZGRVIgb3V0cHV0RGF0YTsKKyAgICBtZW1zZXQoJm91dHB1dERhdGEsIDAsIHNpemVvZihvdXRwdXREYXRhKSk7CisgICAgb3V0cHV0RGF0YS5CdWZmZXIgPSBidWZmZXI7CisgICAgb3V0cHV0RGF0YS5MZW5ndGggPSBsZW5ndGg7CisgICAgVk9fVTMyIHJldCA9IG1BcGlIYW5kbGUtPkdldE91dHB1dERhdGEoCisgICAgICAgICAgICBtRW5jb2RlckhhbmRsZSwgJm91dHB1dERhdGEsICZvdXRwdXRJbmZvKTsKKyAgICBpZiAocmV0ICE9IFZPX0VSUl9OT05FICYmIHJldCAhPSBWT19FUlJfSU5QVVRfQlVGRkVSX1NNQUxMKSB7CisgICAgICAgIEFMT0dEKCJlbmNvdW50ZXJlZCBlcnJvciBkdXJpbmcgZW5jb2RlIGNhbGwiKTsKKyAgICAgICAgcmV0dXJuIC0xOworICAgIH0KKyAgICByZXR1cm4gb3V0cHV0RGF0YS5MZW5ndGg7Cit9CisKK3N0YXRpYyB2b2lkIGZpbGxFbXB0eVdvcmsoY29uc3Qgc3RkOjp1bmlxdWVfcHRyPEMyV29yaz4gJndvcmspIHsKKyAgICB3b3JrLT53b3JrbGV0cy5mcm9udCgpLT5vdXRwdXQuZmxhZ3MgPSB3b3JrLT5pbnB1dC5mbGFnczsKKyAgICB3b3JrLT53b3JrbGV0cy5mcm9udCgpLT5vdXRwdXQuYnVmZmVycy5jbGVhcigpOworICAgIHdvcmstPndvcmtsZXRzLmZyb250KCktPm91dHB1dC5vcmRpbmFsID0gd29yay0+aW5wdXQub3JkaW5hbDsKKyAgICB3b3JrLT53b3JrbGV0c1Byb2Nlc3NlZCA9IDF1OworfQorCit2b2lkIEMyU29mdEFtcldiRW5jOjpwcm9jZXNzKAorICAgICAgICBjb25zdCBzdGQ6OnVuaXF1ZV9wdHI8QzJXb3JrPiAmd29yaywKKyAgICAgICAgY29uc3Qgc3RkOjpzaGFyZWRfcHRyPEMyQmxvY2tQb29sPiAmcG9vbCkgeworICAgIC8vIEluaXRpYWxpemUgb3V0cHV0IHdvcmsKKyAgICB3b3JrLT5yZXN1bHQgPSBDMl9PSzsKKyAgICB3b3JrLT53b3JrbGV0c1Byb2Nlc3NlZCA9IDF1OworICAgIHdvcmstPndvcmtsZXRzLmZyb250KCktPm91dHB1dC5mbGFncyA9IHdvcmstPmlucHV0LmZsYWdzOworCisgICAgaWYgKG1TaWduYWxsZWRFcnJvciB8fCBtU2lnbmFsbGVkT3V0cHV0RW9zKSB7CisgICAgICAgIHdvcmstPnJlc3VsdCA9IEMyX0JBRF9WQUxVRTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIHNpemVfdCBpbk9mZnNldCA9IDB1OworICAgIHNpemVfdCBpblNpemUgPSAwdTsKKyAgICBDMlJlYWRWaWV3IHJWaWV3ID0gbUR1bW15UmVhZFZpZXc7CisgICAgaWYgKCF3b3JrLT5pbnB1dC5idWZmZXJzLmVtcHR5KCkpIHsKKyAgICAgICAgclZpZXcgPSB3b3JrLT5pbnB1dC5idWZmZXJzWzBdLT5kYXRhKCkubGluZWFyQmxvY2tzKCkuZnJvbnQoKS5tYXAoKS5nZXQoKTsKKyAgICAgICAgaW5TaXplID0gclZpZXcuY2FwYWNpdHkoKTsKKyAgICAgICAgaWYgKGluU2l6ZSAmJiByVmlldy5lcnJvcigpKSB7CisgICAgICAgICAgICBBTE9HRSgicmVhZCB2aWV3IG1hcCBmYWlsZWQgJWQiLCByVmlldy5lcnJvcigpKTsKKyAgICAgICAgICAgIHdvcmstPnJlc3VsdCA9IHJWaWV3LmVycm9yKCk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICB9CisgICAgYm9vbCBlb3MgPSAod29yay0+aW5wdXQuZmxhZ3MgJiBDMkZyYW1lRGF0YTo6RkxBR19FTkRfT0ZfU1RSRUFNKSAhPSAwOworCisgICAgQUxPR1YoImluIGJ1ZmZlciBhdHRyLiBzaXplICV6dSB0aW1lc3RhbXAgJWQgZnJhbWVpbmRleCAlZCwgZmxhZ3MgJXgiLAorICAgICAgICAgIGluU2l6ZSwgKGludCl3b3JrLT5pbnB1dC5vcmRpbmFsLnRpbWVzdGFtcC5wZWVrdSgpLAorICAgICAgICAgIChpbnQpd29yay0+aW5wdXQub3JkaW5hbC5mcmFtZUluZGV4LnBlZWt1KCksIHdvcmstPmlucHV0LmZsYWdzKTsKKworICAgIHNpemVfdCBvdXRDYXBhY2l0eSA9IGtOdW1CeXRlc1BlcklucHV0RnJhbWU7CisgICAgb3V0Q2FwYWNpdHkgKz0gbUZpbGxlZExlbiArIGluU2l6ZTsKKyAgICBzdGQ6OnNoYXJlZF9wdHI8QzJMaW5lYXJCbG9jaz4gb3V0cHV0QmxvY2s7CisgICAgQzJNZW1vcnlVc2FnZSB1c2FnZSA9IHsgQzJNZW1vcnlVc2FnZTo6Q1BVX1JFQUQsIEMyTWVtb3J5VXNhZ2U6OkNQVV9XUklURSB9OworICAgIGMyX3N0YXR1c190IGVyciA9IHBvb2wtPmZldGNoTGluZWFyQmxvY2sob3V0Q2FwYWNpdHksIHVzYWdlLCAmb3V0cHV0QmxvY2spOworICAgIGlmIChlcnIgIT0gQzJfT0spIHsKKyAgICAgICAgQUxPR0UoImZldGNoTGluZWFyQmxvY2sgZm9yIE91dHB1dCBmYWlsZWQgd2l0aCBzdGF0dXMgJWQiLCBlcnIpOworICAgICAgICB3b3JrLT5yZXN1bHQgPSBDMl9OT19NRU1PUlk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgQzJXcml0ZVZpZXcgd1ZpZXcgPSBvdXRwdXRCbG9jay0+bWFwKCkuZ2V0KCk7CisgICAgaWYgKHdWaWV3LmVycm9yKCkpIHsKKyAgICAgICAgQUxPR0UoIndyaXRlIHZpZXcgbWFwIGZhaWxlZCAlZCIsIHdWaWV3LmVycm9yKCkpOworICAgICAgICB3b3JrLT5yZXN1bHQgPSB3Vmlldy5lcnJvcigpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIHVpbnQ2NF90IG91dFRpbWVTdGFtcCA9CisgICAgICAgIG1Qcm9jZXNzZWRTYW1wbGVzICogMTAwMDAwMGxsIC8gbUludGYtPmdldFNhbXBsZVJhdGUoKTsKKyAgICBzaXplX3QgaW5Qb3MgPSAwOworICAgIHNpemVfdCBvdXRQb3MgPSAwOworICAgIHdoaWxlIChpblBvcyA8IGluU2l6ZSkgeworICAgICAgICBjb25zdCB1aW50OF90ICppblB0ciA9IHJWaWV3LmRhdGEoKSArIGluT2Zmc2V0OworICAgICAgICBpbnQgdmFsaWRTYW1wbGVzID0gbUZpbGxlZExlbiAvIHNpemVvZihpbnQxNl90KTsKKyAgICAgICAgaWYgKChpblBvcyArIChrTnVtQnl0ZXNQZXJJbnB1dEZyYW1lIC0gbUZpbGxlZExlbikpIDw9IGluU2l6ZSkgeworICAgICAgICAgICAgbWVtY3B5KG1JbnB1dEZyYW1lICsgdmFsaWRTYW1wbGVzLCBpblB0ciArIGluUG9zLAorICAgICAgICAgICAgICAgICAgIChrTnVtQnl0ZXNQZXJJbnB1dEZyYW1lIC0gbUZpbGxlZExlbikpOworICAgICAgICAgICAgaW5Qb3MgKz0gKGtOdW1CeXRlc1BlcklucHV0RnJhbWUgLSBtRmlsbGVkTGVuKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIG1lbWNweShtSW5wdXRGcmFtZSArIHZhbGlkU2FtcGxlcywgaW5QdHIgKyBpblBvcywgKGluU2l6ZSAtIGluUG9zKSk7CisgICAgICAgICAgICBtRmlsbGVkTGVuICs9IChpblNpemUgLSBpblBvcyk7CisgICAgICAgICAgICBpblBvcyArPSAoaW5TaXplIC0gaW5Qb3MpOworICAgICAgICAgICAgaWYgKGVvcykgeworICAgICAgICAgICAgICAgIHZhbGlkU2FtcGxlcyA9IG1GaWxsZWRMZW4gLyBzaXplb2YoaW50MTZfdCk7CisgICAgICAgICAgICAgICAgbWVtc2V0KG1JbnB1dEZyYW1lICsgdmFsaWRTYW1wbGVzLCAwLCAoa051bUJ5dGVzUGVySW5wdXRGcmFtZSAtIG1GaWxsZWRMZW4pKTsKKyAgICAgICAgICAgIH0gZWxzZSBicmVhazsKKyAgICAgICAgfQorICAgICAgICBpbnQgbnVtRW5jQnl0ZXMgPSBlbmNvZGVJbnB1dCgod1ZpZXcuZGF0YSgpICsgb3V0UG9zKSwgb3V0Q2FwYWNpdHkgLSBvdXRQb3MpOworICAgICAgICBpZiAobnVtRW5jQnl0ZXMgPCAwKSB7CisgICAgICAgICAgICBBTE9HRSgiZW5jb2RlRnJhbWUgY2FsbCBmYWlsZWQsIHN0YXRlIFslZCAlenUgJXp1XSIsIG51bUVuY0J5dGVzLCBvdXRQb3MsIG91dENhcGFjaXR5KTsKKyAgICAgICAgICAgIG1TaWduYWxsZWRFcnJvciA9IHRydWU7CisgICAgICAgICAgICB3b3JrLT5yZXN1bHQgPSBDMl9DT1JSVVBURUQ7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgb3V0UG9zICs9IG51bUVuY0J5dGVzOworICAgICAgICBtUHJvY2Vzc2VkU2FtcGxlcyArPSBrTnVtU2FtcGxlc1BlckZyYW1lOworICAgICAgICBtRmlsbGVkTGVuID0gMDsKKyAgICB9CisgICAgQUxPR1YoImNhdXNhbCBzYW1wbGUgc2l6ZSAlZCIsIG1GaWxsZWRMZW4pOworICAgIGlmIChtSXNGaXJzdCkgeworICAgICAgICBtSXNGaXJzdCA9IGZhbHNlOworICAgICAgICBtQW5jaG9yVGltZVN0YW1wID0gd29yay0+aW5wdXQub3JkaW5hbC50aW1lc3RhbXAucGVla3VsbCgpOworICAgIH0KKyAgICBmaWxsRW1wdHlXb3JrKHdvcmspOworICAgIGlmIChvdXRQb3MgIT0gMCkgeworICAgICAgICB3b3JrLT53b3JrbGV0cy5mcm9udCgpLT5vdXRwdXQuYnVmZmVycy5wdXNoX2JhY2soCisgICAgICAgICAgICAgICAgY3JlYXRlTGluZWFyQnVmZmVyKHN0ZDo6bW92ZShvdXRwdXRCbG9jayksIDAsIG91dFBvcykpOworICAgICAgICB3b3JrLT53b3JrbGV0cy5mcm9udCgpLT5vdXRwdXQub3JkaW5hbC50aW1lc3RhbXAgPSBtQW5jaG9yVGltZVN0YW1wICsgb3V0VGltZVN0YW1wOworICAgIH0KKyAgICBpZiAoZW9zKSB7CisgICAgICAgIG1TaWduYWxsZWRPdXRwdXRFb3MgPSB0cnVlOworICAgICAgICBBTE9HVigic2lnbmFsbGVkIEVPUyIpOworICAgICAgICBpZiAobUZpbGxlZExlbikgQUxPR1YoIkRpc2NhcmRpbmcgdHJhaWxpbmcgJWQgYnl0ZXMiLCBtRmlsbGVkTGVuKTsKKyAgICB9Cit9CisKK2MyX3N0YXR1c190IEMyU29mdEFtcldiRW5jOjpkcmFpbigKKyAgICAgICAgdWludDMyX3QgZHJhaW5Nb2RlLAorICAgICAgICBjb25zdCBzdGQ6OnNoYXJlZF9wdHI8QzJCbG9ja1Bvb2w+ICZwb29sKSB7CisgICAgKHZvaWQpIHBvb2w7CisgICAgaWYgKGRyYWluTW9kZSA9PSBOT19EUkFJTikgeworICAgICAgICBBTE9HVygiZHJhaW4gd2l0aCBOT19EUkFJTjogbm8tb3AiKTsKKyAgICAgICAgcmV0dXJuIEMyX09LOworICAgIH0KKyAgICBpZiAoZHJhaW5Nb2RlID09IERSQUlOX0NIQUlOKSB7CisgICAgICAgIEFMT0dXKCJEUkFJTl9DSEFJTiBub3Qgc3VwcG9ydGVkIik7CisgICAgICAgIHJldHVybiBDMl9PTUlUVEVEOworICAgIH0KKworICAgIG9uRmx1c2hfc20oKTsKKyAgICByZXR1cm4gQzJfT0s7Cit9CisKK2NsYXNzIEMyU29mdEFtcldiRW5jRmFjdG9yeSA6IHB1YmxpYyBDMkNvbXBvbmVudEZhY3RvcnkgeworcHVibGljOgorICAgIEMyU29mdEFtcldiRW5jRmFjdG9yeSgpCisgICAgICAgIDogbUhlbHBlcihzdGQ6OnN0YXRpY19wb2ludGVyX2Nhc3Q8QzJSZWZsZWN0b3JIZWxwZXI+KAorICAgICAgICAgICAgICBHZXRDb2RlYzJQbGF0Zm9ybUNvbXBvbmVudFN0b3JlKCktPmdldFBhcmFtUmVmbGVjdG9yKCkpKSB7fQorCisgICAgdmlydHVhbCBjMl9zdGF0dXNfdCBjcmVhdGVDb21wb25lbnQoCisgICAgICAgICAgICBjMl9ub2RlX2lkX3QgaWQsCisgICAgICAgICAgICBzdGQ6OnNoYXJlZF9wdHI8QzJDb21wb25lbnQ+KiBjb25zdCBjb21wb25lbnQsCisgICAgICAgICAgICBzdGQ6OmZ1bmN0aW9uPHZvaWQoQzJDb21wb25lbnQqKT4gZGVsZXRlcikgb3ZlcnJpZGUgeworICAgICAgICAqY29tcG9uZW50ID0gc3RkOjpzaGFyZWRfcHRyPEMyQ29tcG9uZW50PigKKyAgICAgICAgICAgIG5ldyBDMlNvZnRBbXJXYkVuYygKKyAgICAgICAgICAgICAgICBDT01QT05FTlRfTkFNRSwgaWQsCisgICAgICAgICAgICAgICAgc3RkOjptYWtlX3NoYXJlZDxDMlNvZnRBbXJXYkVuYzo6SW50ZkltcGw+KG1IZWxwZXIpKSwKKyAgICAgICAgICAgIGRlbGV0ZXIpOworICAgICAgICByZXR1cm4gQzJfT0s7CisgICAgfQorCisgICAgdmlydHVhbCBjMl9zdGF0dXNfdCBjcmVhdGVJbnRlcmZhY2UoCisgICAgICAgICAgICBjMl9ub2RlX2lkX3QgaWQsCisgICAgICAgICAgICBzdGQ6OnNoYXJlZF9wdHI8QzJDb21wb25lbnRJbnRlcmZhY2U+KiBjb25zdCBpbnRlcmZhY2UsCisgICAgICAgICAgICBzdGQ6OmZ1bmN0aW9uPHZvaWQoQzJDb21wb25lbnRJbnRlcmZhY2UqKT4gZGVsZXRlcikgb3ZlcnJpZGUgeworICAgICAgICAqaW50ZXJmYWNlID0gc3RkOjpzaGFyZWRfcHRyPEMyQ29tcG9uZW50SW50ZXJmYWNlPigKKyAgICAgICAgICAgIG5ldyBTaW1wbGVJbnRlcmZhY2U8QzJTb2Z0QW1yV2JFbmM6OkludGZJbXBsPigKKyAgICAgICAgICAgICAgICBDT01QT05FTlRfTkFNRSwgaWQsCisgICAgICAgICAgICAgICAgc3RkOjptYWtlX3NoYXJlZDxDMlNvZnRBbXJXYkVuYzo6SW50ZkltcGw+KG1IZWxwZXIpKSwKKyAgICAgICAgICAgIGRlbGV0ZXIpOworICAgICAgICByZXR1cm4gQzJfT0s7CisgICAgfQorCisgICAgdmlydHVhbCB+QzJTb2Z0QW1yV2JFbmNGYWN0b3J5KCkgb3ZlcnJpZGUgPSBkZWZhdWx0OworCitwcml2YXRlOgorICAgIHN0ZDo6c2hhcmVkX3B0cjxDMlJlZmxlY3RvckhlbHBlcj4gbUhlbHBlcjsKK307CisKK30gIC8vIG5hbWVzcGFjZSBhbmRyb2lkCisKK2V4dGVybiAiQyIgOjpDMkNvbXBvbmVudEZhY3RvcnkqIENyZWF0ZUNvZGVjMkZhY3RvcnkoKSB7CisgICAgQUxPR1YoImluICVzIiwgX19mdW5jX18pOworICAgIHJldHVybiBuZXcgOjphbmRyb2lkOjpDMlNvZnRBbXJXYkVuY0ZhY3RvcnkoKTsKK30KKworZXh0ZXJuICJDIiB2b2lkIERlc3Ryb3lDb2RlYzJGYWN0b3J5KDo6QzJDb21wb25lbnRGYWN0b3J5KiBmYWN0b3J5KSB7CisgICAgQUxPR1YoImluICVzIiwgX19mdW5jX18pOworICAgIGRlbGV0ZSBmYWN0b3J5OworfQpkaWZmIC0tZ2l0IGEvbWVkaWEvY29kZWMyL2NvbXBvbmVudHMvYW1yX25iX3diL0MyU29mdEFtcldiRW5jLmggYi9tZWRpYS9jb2RlYzIvY29tcG9uZW50cy9hbXJfbmJfd2IvQzJTb2Z0QW1yV2JFbmMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wY2M5ZTlmCi0tLSAvZGV2L251bGwKKysrIGIvbWVkaWEvY29kZWMyL2NvbXBvbmVudHMvYW1yX25iX3diL0MyU29mdEFtcldiRW5jLmgKQEAgLTAsMCArMSw3MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxOCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCisKKyNpZm5kZWYgQU5EUk9JRF9DMl9TT0ZUX0FNUl9XQl9FTkNfSF8KKyNkZWZpbmUgQU5EUk9JRF9DMl9TT0ZUX0FNUl9XQl9FTkNfSF8KKworI2luY2x1ZGUgPFNpbXBsZUMyQ29tcG9uZW50Lmg+CisKKyNpbmNsdWRlICJ2b0FNUldCLmgiCisKK25hbWVzcGFjZSBhbmRyb2lkIHsKKworY2xhc3MgQzJTb2Z0QW1yV2JFbmMgOiBwdWJsaWMgU2ltcGxlQzJDb21wb25lbnQgeworcHVibGljOgorICAgIGNsYXNzIEludGZJbXBsOworICAgIEMyU29mdEFtcldiRW5jKGNvbnN0IGNoYXIqIG5hbWUsIGMyX25vZGVfaWRfdCBpZCwKKyAgICAgICAgICAgICAgICAgICBjb25zdCBzdGQ6OnNoYXJlZF9wdHI8SW50ZkltcGw+JiBpbnRmSW1wbCk7CisgICAgdmlydHVhbCB+QzJTb2Z0QW1yV2JFbmMoKTsKKworICAgIC8vIEZyb20gU2ltcGxlQzJDb21wb25lbnQKKyAgICBjMl9zdGF0dXNfdCBvbkluaXQoKSBvdmVycmlkZTsKKyAgICBjMl9zdGF0dXNfdCBvblN0b3AoKSBvdmVycmlkZTsKKyAgICB2b2lkIG9uUmVzZXQoKSBvdmVycmlkZTsKKyAgICB2b2lkIG9uUmVsZWFzZSgpIG92ZXJyaWRlOworICAgIGMyX3N0YXR1c190IG9uRmx1c2hfc20oKSBvdmVycmlkZTsKKyAgICB2b2lkIHByb2Nlc3MoCisgICAgICAgICAgICBjb25zdCBzdGQ6OnVuaXF1ZV9wdHI8QzJXb3JrPiAmd29yaywKKyAgICAgICAgICAgIGNvbnN0IHN0ZDo6c2hhcmVkX3B0cjxDMkJsb2NrUG9vbD4gJnBvb2wpIG92ZXJyaWRlOworICAgIGMyX3N0YXR1c190IGRyYWluKAorICAgICAgICAgICAgdWludDMyX3QgZHJhaW5Nb2RlLAorICAgICAgICAgICAgY29uc3Qgc3RkOjpzaGFyZWRfcHRyPEMyQmxvY2tQb29sPiAmcG9vbCkgb3ZlcnJpZGU7CisKK3ByaXZhdGU6CisgICAgc3RkOjpzaGFyZWRfcHRyPEludGZJbXBsPiBtSW50ZjsKKyAgICBzdGF0aWMgY29uc3QgaW50MzJfdCBrTnVtU2FtcGxlc1BlckZyYW1lID0gMzIwOworICAgIHN0YXRpYyBjb25zdCBpbnQzMl90IGtOdW1CeXRlc1BlcklucHV0RnJhbWUgPSBrTnVtU2FtcGxlc1BlckZyYW1lICogc2l6ZW9mKGludDE2X3QpOworCisgICAgdm9pZCAqbUVuY29kZXJIYW5kbGU7CisgICAgVk9fQVVESU9fQ09ERUNBUEkgKm1BcGlIYW5kbGU7CisgICAgVk9fTUVNX09QRVJBVE9SICptTWVtT3BlcmF0b3I7CisgICAgVk9BTVJXQk1PREUgbU1vZGU7CisgICAgYm9vbCBtSXNGaXJzdDsKKyAgICBib29sIG1TaWduYWxsZWRFcnJvcjsKKyAgICBib29sIG1TaWduYWxsZWRPdXRwdXRFb3M7CisgICAgdWludDY0X3QgbUFuY2hvclRpbWVTdGFtcDsKKyAgICB1aW50NjRfdCBtUHJvY2Vzc2VkU2FtcGxlczsKKyAgICBpbnQzMl90IG1GaWxsZWRMZW47CisgICAgaW50MTZfdCBtSW5wdXRGcmFtZVtrTnVtU2FtcGxlc1BlckZyYW1lXTsKKworICAgIHN0YXR1c190IGluaXRFbmNvZGVyKCk7CisgICAgaW50IGVuY29kZUlucHV0KHVpbnQ4X3QgKmJ1ZmZlciwgdWludDMyX3QgbGVuZ3RoKTsKKworICAgIEMyX0RPX05PVF9DT1BZKEMyU29mdEFtcldiRW5jKTsKK307CisKK30gIC8vIG5hbWVzcGFjZSBhbmRyb2lkCisKKyNlbmRpZiAgLy8gQU5EUk9JRF9DMl9TT0ZUX0FNUl9XQl9FTkNfSF8KZGlmZiAtLWdpdCBhL21lZGlhL2NvZGVjMi9jb21wb25lbnRzL2Ftcl9uYl93Yi9NT0RVTEVfTElDRU5TRV9BUEFDSEUyIGIvbWVkaWEvY29kZWMyL2NvbXBvbmVudHMvYW1yX25iX3diL01PRFVMRV9MSUNFTlNFX0FQQUNIRTIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTY5ZGUyOQotLS0gL2Rldi9udWxsCisrKyBiL21lZGlhL2NvZGVjMi9jb21wb25lbnRzL2Ftcl9uYl93Yi9NT0RVTEVfTElDRU5TRV9BUEFDSEUyCmRpZmYgLS1naXQgYS9tZWRpYS9jb2RlYzIvY29tcG9uZW50cy9hbXJfbmJfd2IvTk9USUNFIGIvbWVkaWEvY29kZWMyL2NvbXBvbmVudHMvYW1yX25iX3diL05PVElDRQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNWIxZWZhCi0tLSAvZGV2L251bGwKKysrIGIvbWVkaWEvY29kZWMyL2NvbXBvbmVudHMvYW1yX25iX3diL05PVElDRQpAQCAtMCwwICsxLDE5MCBAQAorCisgICBDb3B5cmlnaHQgKGMpIDIwMDUtMjAwOCwgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorCisgICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAgIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKworICAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAgIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisKKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQXBhY2hlIExpY2Vuc2UKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIFZlcnNpb24gMi4wLCBKYW51YXJ5IDIwMDQKKyAgICAgICAgICAgICAgICAgICAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy8KKworICAgVEVSTVMgQU5EIENPTkRJVElPTlMgRk9SIFVTRSwgUkVQUk9EVUNUSU9OLCBBTkQgRElTVFJJQlVUSU9OCisKKyAgIDEuIERlZmluaXRpb25zLgorCisgICAgICAiTGljZW5zZSIgc2hhbGwgbWVhbiB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgZm9yIHVzZSwgcmVwcm9kdWN0aW9uLAorICAgICAgYW5kIGRpc3RyaWJ1dGlvbiBhcyBkZWZpbmVkIGJ5IFNlY3Rpb25zIDEgdGhyb3VnaCA5IG9mIHRoaXMgZG9jdW1lbnQuCisKKyAgICAgICJMaWNlbnNvciIgc2hhbGwgbWVhbiB0aGUgY29weXJpZ2h0IG93bmVyIG9yIGVudGl0eSBhdXRob3JpemVkIGJ5CisgICAgICB0aGUgY29weXJpZ2h0IG93bmVyIHRoYXQgaXMgZ3JhbnRpbmcgdGhlIExpY2Vuc2UuCisKKyAgICAgICJMZWdhbCBFbnRpdHkiIHNoYWxsIG1lYW4gdGhlIHVuaW9uIG9mIHRoZSBhY3RpbmcgZW50aXR5IGFuZCBhbGwKKyAgICAgIG90aGVyIGVudGl0aWVzIHRoYXQgY29udHJvbCwgYXJlIGNvbnRyb2xsZWQgYnksIG9yIGFyZSB1bmRlciBjb21tb24KKyAgICAgIGNvbnRyb2wgd2l0aCB0aGF0IGVudGl0eS4gRm9yIHRoZSBwdXJwb3NlcyBvZiB0aGlzIGRlZmluaXRpb24sCisgICAgICAiY29udHJvbCIgbWVhbnMgKGkpIHRoZSBwb3dlciwgZGlyZWN0IG9yIGluZGlyZWN0LCB0byBjYXVzZSB0aGUKKyAgICAgIGRpcmVjdGlvbiBvciBtYW5hZ2VtZW50IG9mIHN1Y2ggZW50aXR5LCB3aGV0aGVyIGJ5IGNvbnRyYWN0IG9yCisgICAgICBvdGhlcndpc2UsIG9yIChpaSkgb3duZXJzaGlwIG9mIGZpZnR5IHBlcmNlbnQgKDUwJSkgb3IgbW9yZSBvZiB0aGUKKyAgICAgIG91dHN0YW5kaW5nIHNoYXJlcywgb3IgKGlpaSkgYmVuZWZpY2lhbCBvd25lcnNoaXAgb2Ygc3VjaCBlbnRpdHkuCisKKyAgICAgICJZb3UiIChvciAiWW91ciIpIHNoYWxsIG1lYW4gYW4gaW5kaXZpZHVhbCBvciBMZWdhbCBFbnRpdHkKKyAgICAgIGV4ZXJjaXNpbmcgcGVybWlzc2lvbnMgZ3JhbnRlZCBieSB0aGlzIExpY2Vuc2UuCisKKyAgICAgICJTb3VyY2UiIGZvcm0gc2hhbGwgbWVhbiB0aGUgcHJlZmVycmVkIGZvcm0gZm9yIG1ha2luZyBtb2RpZmljYXRpb25zLAorICAgICAgaW5jbHVkaW5nIGJ1dCBub3QgbGltaXRlZCB0byBzb2Z0d2FyZSBzb3VyY2UgY29kZSwgZG9jdW1lbnRhdGlvbgorICAgICAgc291cmNlLCBhbmQgY29uZmlndXJhdGlvbiBmaWxlcy4KKworICAgICAgIk9iamVjdCIgZm9ybSBzaGFsbCBtZWFuIGFueSBmb3JtIHJlc3VsdGluZyBmcm9tIG1lY2hhbmljYWwKKyAgICAgIHRyYW5zZm9ybWF0aW9uIG9yIHRyYW5zbGF0aW9uIG9mIGEgU291cmNlIGZvcm0sIGluY2x1ZGluZyBidXQKKyAgICAgIG5vdCBsaW1pdGVkIHRvIGNvbXBpbGVkIG9iamVjdCBjb2RlLCBnZW5lcmF0ZWQgZG9jdW1lbnRhdGlvbiwKKyAgICAgIGFuZCBjb252ZXJzaW9ucyB0byBvdGhlciBtZWRpYSB0eXBlcy4KKworICAgICAgIldvcmsiIHNoYWxsIG1lYW4gdGhlIHdvcmsgb2YgYXV0aG9yc2hpcCwgd2hldGhlciBpbiBTb3VyY2Ugb3IKKyAgICAgIE9iamVjdCBmb3JtLCBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgTGljZW5zZSwgYXMgaW5kaWNhdGVkIGJ5IGEKKyAgICAgIGNvcHlyaWdodCBub3RpY2UgdGhhdCBpcyBpbmNsdWRlZCBpbiBvciBhdHRhY2hlZCB0byB0aGUgd29yaworICAgICAgKGFuIGV4YW1wbGUgaXMgcHJvdmlkZWQgaW4gdGhlIEFwcGVuZGl4IGJlbG93KS4KKworICAgICAgIkRlcml2YXRpdmUgV29ya3MiIHNoYWxsIG1lYW4gYW55IHdvcmssIHdoZXRoZXIgaW4gU291cmNlIG9yIE9iamVjdAorICAgICAgZm9ybSwgdGhhdCBpcyBiYXNlZCBvbiAob3IgZGVyaXZlZCBmcm9tKSB0aGUgV29yayBhbmQgZm9yIHdoaWNoIHRoZQorICAgICAgZWRpdG9yaWFsIHJldmlzaW9ucywgYW5ub3RhdGlvbnMsIGVsYWJvcmF0aW9ucywgb3Igb3RoZXIgbW9kaWZpY2F0aW9ucworICAgICAgcmVwcmVzZW50LCBhcyBhIHdob2xlLCBhbiBvcmlnaW5hbCB3b3JrIG9mIGF1dGhvcnNoaXAuIEZvciB0aGUgcHVycG9zZXMKKyAgICAgIG9mIHRoaXMgTGljZW5zZSwgRGVyaXZhdGl2ZSBXb3JrcyBzaGFsbCBub3QgaW5jbHVkZSB3b3JrcyB0aGF0IHJlbWFpbgorICAgICAgc2VwYXJhYmxlIGZyb20sIG9yIG1lcmVseSBsaW5rIChvciBiaW5kIGJ5IG5hbWUpIHRvIHRoZSBpbnRlcmZhY2VzIG9mLAorICAgICAgdGhlIFdvcmsgYW5kIERlcml2YXRpdmUgV29ya3MgdGhlcmVvZi4KKworICAgICAgIkNvbnRyaWJ1dGlvbiIgc2hhbGwgbWVhbiBhbnkgd29yayBvZiBhdXRob3JzaGlwLCBpbmNsdWRpbmcKKyAgICAgIHRoZSBvcmlnaW5hbCB2ZXJzaW9uIG9mIHRoZSBXb3JrIGFuZCBhbnkgbW9kaWZpY2F0aW9ucyBvciBhZGRpdGlvbnMKKyAgICAgIHRvIHRoYXQgV29yayBvciBEZXJpdmF0aXZlIFdvcmtzIHRoZXJlb2YsIHRoYXQgaXMgaW50ZW50aW9uYWxseQorICAgICAgc3VibWl0dGVkIHRvIExpY2Vuc29yIGZvciBpbmNsdXNpb24gaW4gdGhlIFdvcmsgYnkgdGhlIGNvcHlyaWdodCBvd25lcgorICAgICAgb3IgYnkgYW4gaW5kaXZpZHVhbCBvciBMZWdhbCBFbnRpdHkgYXV0aG9yaXplZCB0byBzdWJtaXQgb24gYmVoYWxmIG9mCisgICAgICB0aGUgY29weXJpZ2h0IG93bmVyLiBGb3IgdGhlIHB1cnBvc2VzIG9mIHRoaXMgZGVmaW5pdGlvbiwgInN1Ym1pdHRlZCIKKyAgICAgIG1lYW5zIGFueSBmb3JtIG9mIGVsZWN0cm9uaWMsIHZlcmJhbCwgb3Igd3JpdHRlbiBjb21tdW5pY2F0aW9uIHNlbnQKKyAgICAgIHRvIHRoZSBMaWNlbnNvciBvciBpdHMgcmVwcmVzZW50YXRpdmVzLCBpbmNsdWRpbmcgYnV0IG5vdCBsaW1pdGVkIHRvCisgICAgICBjb21tdW5pY2F0aW9uIG9uIGVsZWN0cm9uaWMgbWFpbGluZyBsaXN0cywgc291cmNlIGNvZGUgY29udHJvbCBzeXN0ZW1zLAorICAgICAgYW5kIGlzc3VlIHRyYWNraW5nIHN5c3RlbXMgdGhhdCBhcmUgbWFuYWdlZCBieSwgb3Igb24gYmVoYWxmIG9mLCB0aGUKKyAgICAgIExpY2Vuc29yIGZvciB0aGUgcHVycG9zZSBvZiBkaXNjdXNzaW5nIGFuZCBpbXByb3ZpbmcgdGhlIFdvcmssIGJ1dAorICAgICAgZXhjbHVkaW5nIGNvbW11bmljYXRpb24gdGhhdCBpcyBjb25zcGljdW91c2x5IG1hcmtlZCBvciBvdGhlcndpc2UKKyAgICAgIGRlc2lnbmF0ZWQgaW4gd3JpdGluZyBieSB0aGUgY29weXJpZ2h0IG93bmVyIGFzICJOb3QgYSBDb250cmlidXRpb24uIgorCisgICAgICAiQ29udHJpYnV0b3IiIHNoYWxsIG1lYW4gTGljZW5zb3IgYW5kIGFueSBpbmRpdmlkdWFsIG9yIExlZ2FsIEVudGl0eQorICAgICAgb24gYmVoYWxmIG9mIHdob20gYSBDb250cmlidXRpb24gaGFzIGJlZW4gcmVjZWl2ZWQgYnkgTGljZW5zb3IgYW5kCisgICAgICBzdWJzZXF1ZW50bHkgaW5jb3Jwb3JhdGVkIHdpdGhpbiB0aGUgV29yay4KKworICAgMi4gR3JhbnQgb2YgQ29weXJpZ2h0IExpY2Vuc2UuIFN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mCisgICAgICB0aGlzIExpY2Vuc2UsIGVhY2ggQ29udHJpYnV0b3IgaGVyZWJ5IGdyYW50cyB0byBZb3UgYSBwZXJwZXR1YWwsCisgICAgICB3b3JsZHdpZGUsIG5vbi1leGNsdXNpdmUsIG5vLWNoYXJnZSwgcm95YWx0eS1mcmVlLCBpcnJldm9jYWJsZQorICAgICAgY29weXJpZ2h0IGxpY2Vuc2UgdG8gcmVwcm9kdWNlLCBwcmVwYXJlIERlcml2YXRpdmUgV29ya3Mgb2YsCisgICAgICBwdWJsaWNseSBkaXNwbGF5LCBwdWJsaWNseSBwZXJmb3JtLCBzdWJsaWNlbnNlLCBhbmQgZGlzdHJpYnV0ZSB0aGUKKyAgICAgIFdvcmsgYW5kIHN1Y2ggRGVyaXZhdGl2ZSBXb3JrcyBpbiBTb3VyY2Ugb3IgT2JqZWN0IGZvcm0uCisKKyAgIDMuIEdyYW50IG9mIFBhdGVudCBMaWNlbnNlLiBTdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZgorICAgICAgdGhpcyBMaWNlbnNlLCBlYWNoIENvbnRyaWJ1dG9yIGhlcmVieSBncmFudHMgdG8gWW91IGEgcGVycGV0dWFsLAorICAgICAgd29ybGR3aWRlLCBub24tZXhjbHVzaXZlLCBuby1jaGFyZ2UsIHJveWFsdHktZnJlZSwgaXJyZXZvY2FibGUKKyAgICAgIChleGNlcHQgYXMgc3RhdGVkIGluIHRoaXMgc2VjdGlvbikgcGF0ZW50IGxpY2Vuc2UgdG8gbWFrZSwgaGF2ZSBtYWRlLAorICAgICAgdXNlLCBvZmZlciB0byBzZWxsLCBzZWxsLCBpbXBvcnQsIGFuZCBvdGhlcndpc2UgdHJhbnNmZXIgdGhlIFdvcmssCisgICAgICB3aGVyZSBzdWNoIGxpY2Vuc2UgYXBwbGllcyBvbmx5IHRvIHRob3NlIHBhdGVudCBjbGFpbXMgbGljZW5zYWJsZQorICAgICAgYnkgc3VjaCBDb250cmlidXRvciB0aGF0IGFyZSBuZWNlc3NhcmlseSBpbmZyaW5nZWQgYnkgdGhlaXIKKyAgICAgIENvbnRyaWJ1dGlvbihzKSBhbG9uZSBvciBieSBjb21iaW5hdGlvbiBvZiB0aGVpciBDb250cmlidXRpb24ocykKKyAgICAgIHdpdGggdGhlIFdvcmsgdG8gd2hpY2ggc3VjaCBDb250cmlidXRpb24ocykgd2FzIHN1Ym1pdHRlZC4gSWYgWW91CisgICAgICBpbnN0aXR1dGUgcGF0ZW50IGxpdGlnYXRpb24gYWdhaW5zdCBhbnkgZW50aXR5IChpbmNsdWRpbmcgYQorICAgICAgY3Jvc3MtY2xhaW0gb3IgY291bnRlcmNsYWltIGluIGEgbGF3c3VpdCkgYWxsZWdpbmcgdGhhdCB0aGUgV29yaworICAgICAgb3IgYSBDb250cmlidXRpb24gaW5jb3Jwb3JhdGVkIHdpdGhpbiB0aGUgV29yayBjb25zdGl0dXRlcyBkaXJlY3QKKyAgICAgIG9yIGNvbnRyaWJ1dG9yeSBwYXRlbnQgaW5mcmluZ2VtZW50LCB0aGVuIGFueSBwYXRlbnQgbGljZW5zZXMKKyAgICAgIGdyYW50ZWQgdG8gWW91IHVuZGVyIHRoaXMgTGljZW5zZSBmb3IgdGhhdCBXb3JrIHNoYWxsIHRlcm1pbmF0ZQorICAgICAgYXMgb2YgdGhlIGRhdGUgc3VjaCBsaXRpZ2F0aW9uIGlzIGZpbGVkLgorCisgICA0LiBSZWRpc3RyaWJ1dGlvbi4gWW91IG1heSByZXByb2R1Y2UgYW5kIGRpc3RyaWJ1dGUgY29waWVzIG9mIHRoZQorICAgICAgV29yayBvciBEZXJpdmF0aXZlIFdvcmtzIHRoZXJlb2YgaW4gYW55IG1lZGl1bSwgd2l0aCBvciB3aXRob3V0CisgICAgICBtb2RpZmljYXRpb25zLCBhbmQgaW4gU291cmNlIG9yIE9iamVjdCBmb3JtLCBwcm92aWRlZCB0aGF0IFlvdQorICAgICAgbWVldCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CisKKyAgICAgIChhKSBZb3UgbXVzdCBnaXZlIGFueSBvdGhlciByZWNpcGllbnRzIG9mIHRoZSBXb3JrIG9yCisgICAgICAgICAgRGVyaXZhdGl2ZSBXb3JrcyBhIGNvcHkgb2YgdGhpcyBMaWNlbnNlOyBhbmQKKworICAgICAgKGIpIFlvdSBtdXN0IGNhdXNlIGFueSBtb2RpZmllZCBmaWxlcyB0byBjYXJyeSBwcm9taW5lbnQgbm90aWNlcworICAgICAgICAgIHN0YXRpbmcgdGhhdCBZb3UgY2hhbmdlZCB0aGUgZmlsZXM7IGFuZAorCisgICAgICAoYykgWW91IG11c3QgcmV0YWluLCBpbiB0aGUgU291cmNlIGZvcm0gb2YgYW55IERlcml2YXRpdmUgV29ya3MKKyAgICAgICAgICB0aGF0IFlvdSBkaXN0cmlidXRlLCBhbGwgY29weXJpZ2h0LCBwYXRlbnQsIHRyYWRlbWFyaywgYW5kCisgICAgICAgICAgYXR0cmlidXRpb24gbm90aWNlcyBmcm9tIHRoZSBTb3VyY2UgZm9ybSBvZiB0aGUgV29yaywKKyAgICAgICAgICBleGNsdWRpbmcgdGhvc2Ugbm90aWNlcyB0aGF0IGRvIG5vdCBwZXJ0YWluIHRvIGFueSBwYXJ0IG9mCisgICAgICAgICAgdGhlIERlcml2YXRpdmUgV29ya3M7IGFuZAorCisgICAgICAoZCkgSWYgdGhlIFdvcmsgaW5jbHVkZXMgYSAiTk9USUNFIiB0ZXh0IGZpbGUgYXMgcGFydCBvZiBpdHMKKyAgICAgICAgICBkaXN0cmlidXRpb24sIHRoZW4gYW55IERlcml2YXRpdmUgV29ya3MgdGhhdCBZb3UgZGlzdHJpYnV0ZSBtdXN0CisgICAgICAgICAgaW5jbHVkZSBhIHJlYWRhYmxlIGNvcHkgb2YgdGhlIGF0dHJpYnV0aW9uIG5vdGljZXMgY29udGFpbmVkCisgICAgICAgICAgd2l0aGluIHN1Y2ggTk9USUNFIGZpbGUsIGV4Y2x1ZGluZyB0aG9zZSBub3RpY2VzIHRoYXQgZG8gbm90CisgICAgICAgICAgcGVydGFpbiB0byBhbnkgcGFydCBvZiB0aGUgRGVyaXZhdGl2ZSBXb3JrcywgaW4gYXQgbGVhc3Qgb25lCisgICAgICAgICAgb2YgdGhlIGZvbGxvd2luZyBwbGFjZXM6IHdpdGhpbiBhIE5PVElDRSB0ZXh0IGZpbGUgZGlzdHJpYnV0ZWQKKyAgICAgICAgICBhcyBwYXJ0IG9mIHRoZSBEZXJpdmF0aXZlIFdvcmtzOyB3aXRoaW4gdGhlIFNvdXJjZSBmb3JtIG9yCisgICAgICAgICAgZG9jdW1lbnRhdGlvbiwgaWYgcHJvdmlkZWQgYWxvbmcgd2l0aCB0aGUgRGVyaXZhdGl2ZSBXb3Jrczsgb3IsCisgICAgICAgICAgd2l0aGluIGEgZGlzcGxheSBnZW5lcmF0ZWQgYnkgdGhlIERlcml2YXRpdmUgV29ya3MsIGlmIGFuZAorICAgICAgICAgIHdoZXJldmVyIHN1Y2ggdGhpcmQtcGFydHkgbm90aWNlcyBub3JtYWxseSBhcHBlYXIuIFRoZSBjb250ZW50cworICAgICAgICAgIG9mIHRoZSBOT1RJQ0UgZmlsZSBhcmUgZm9yIGluZm9ybWF0aW9uYWwgcHVycG9zZXMgb25seSBhbmQKKyAgICAgICAgICBkbyBub3QgbW9kaWZ5IHRoZSBMaWNlbnNlLiBZb3UgbWF5IGFkZCBZb3VyIG93biBhdHRyaWJ1dGlvbgorICAgICAgICAgIG5vdGljZXMgd2l0aGluIERlcml2YXRpdmUgV29ya3MgdGhhdCBZb3UgZGlzdHJpYnV0ZSwgYWxvbmdzaWRlCisgICAgICAgICAgb3IgYXMgYW4gYWRkZW5kdW0gdG8gdGhlIE5PVElDRSB0ZXh0IGZyb20gdGhlIFdvcmssIHByb3ZpZGVkCisgICAgICAgICAgdGhhdCBzdWNoIGFkZGl0aW9uYWwgYXR0cmlidXRpb24gbm90aWNlcyBjYW5ub3QgYmUgY29uc3RydWVkCisgICAgICAgICAgYXMgbW9kaWZ5aW5nIHRoZSBMaWNlbnNlLgorCisgICAgICBZb3UgbWF5IGFkZCBZb3VyIG93biBjb3B5cmlnaHQgc3RhdGVtZW50IHRvIFlvdXIgbW9kaWZpY2F0aW9ucyBhbmQKKyAgICAgIG1heSBwcm92aWRlIGFkZGl0aW9uYWwgb3IgZGlmZmVyZW50IGxpY2Vuc2UgdGVybXMgYW5kIGNvbmRpdGlvbnMKKyAgICAgIGZvciB1c2UsIHJlcHJvZHVjdGlvbiwgb3IgZGlzdHJpYnV0aW9uIG9mIFlvdXIgbW9kaWZpY2F0aW9ucywgb3IKKyAgICAgIGZvciBhbnkgc3VjaCBEZXJpdmF0aXZlIFdvcmtzIGFzIGEgd2hvbGUsIHByb3ZpZGVkIFlvdXIgdXNlLAorICAgICAgcmVwcm9kdWN0aW9uLCBhbmQgZGlzdHJpYnV0aW9uIG9mIHRoZSBXb3JrIG90aGVyd2lzZSBjb21wbGllcyB3aXRoCisgICAgICB0aGUgY29uZGl0aW9ucyBzdGF0ZWQgaW4gdGhpcyBMaWNlbnNlLgorCisgICA1LiBTdWJtaXNzaW9uIG9mIENvbnRyaWJ1dGlvbnMuIFVubGVzcyBZb3UgZXhwbGljaXRseSBzdGF0ZSBvdGhlcndpc2UsCisgICAgICBhbnkgQ29udHJpYnV0aW9uIGludGVudGlvbmFsbHkgc3VibWl0dGVkIGZvciBpbmNsdXNpb24gaW4gdGhlIFdvcmsKKyAgICAgIGJ5IFlvdSB0byB0aGUgTGljZW5zb3Igc2hhbGwgYmUgdW5kZXIgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mCisgICAgICB0aGlzIExpY2Vuc2UsIHdpdGhvdXQgYW55IGFkZGl0aW9uYWwgdGVybXMgb3IgY29uZGl0aW9ucy4KKyAgICAgIE5vdHdpdGhzdGFuZGluZyB0aGUgYWJvdmUsIG5vdGhpbmcgaGVyZWluIHNoYWxsIHN1cGVyc2VkZSBvciBtb2RpZnkKKyAgICAgIHRoZSB0ZXJtcyBvZiBhbnkgc2VwYXJhdGUgbGljZW5zZSBhZ3JlZW1lbnQgeW91IG1heSBoYXZlIGV4ZWN1dGVkCisgICAgICB3aXRoIExpY2Vuc29yIHJlZ2FyZGluZyBzdWNoIENvbnRyaWJ1dGlvbnMuCisKKyAgIDYuIFRyYWRlbWFya3MuIFRoaXMgTGljZW5zZSBkb2VzIG5vdCBncmFudCBwZXJtaXNzaW9uIHRvIHVzZSB0aGUgdHJhZGUKKyAgICAgIG5hbWVzLCB0cmFkZW1hcmtzLCBzZXJ2aWNlIG1hcmtzLCBvciBwcm9kdWN0IG5hbWVzIG9mIHRoZSBMaWNlbnNvciwKKyAgICAgIGV4Y2VwdCBhcyByZXF1aXJlZCBmb3IgcmVhc29uYWJsZSBhbmQgY3VzdG9tYXJ5IHVzZSBpbiBkZXNjcmliaW5nIHRoZQorICAgICAgb3JpZ2luIG9mIHRoZSBXb3JrIGFuZCByZXByb2R1Y2luZyB0aGUgY29udGVudCBvZiB0aGUgTk9USUNFIGZpbGUuCisKKyAgIDcuIERpc2NsYWltZXIgb2YgV2FycmFudHkuIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvcgorICAgICAgYWdyZWVkIHRvIGluIHdyaXRpbmcsIExpY2Vuc29yIHByb3ZpZGVzIHRoZSBXb3JrIChhbmQgZWFjaAorICAgICAgQ29udHJpYnV0b3IgcHJvdmlkZXMgaXRzIENvbnRyaWJ1dGlvbnMpIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgICAgICBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IKKyAgICAgIGltcGxpZWQsIGluY2x1ZGluZywgd2l0aG91dCBsaW1pdGF0aW9uLCBhbnkgd2FycmFudGllcyBvciBjb25kaXRpb25zCisgICAgICBvZiBUSVRMRSwgTk9OLUlORlJJTkdFTUVOVCwgTUVSQ0hBTlRBQklMSVRZLCBvciBGSVRORVNTIEZPUiBBCisgICAgICBQQVJUSUNVTEFSIFBVUlBPU0UuIFlvdSBhcmUgc29sZWx5IHJlc3BvbnNpYmxlIGZvciBkZXRlcm1pbmluZyB0aGUKKyAgICAgIGFwcHJvcHJpYXRlbmVzcyBvZiB1c2luZyBvciByZWRpc3RyaWJ1dGluZyB0aGUgV29yayBhbmQgYXNzdW1lIGFueQorICAgICAgcmlza3MgYXNzb2NpYXRlZCB3aXRoIFlvdXIgZXhlcmNpc2Ugb2YgcGVybWlzc2lvbnMgdW5kZXIgdGhpcyBMaWNlbnNlLgorCisgICA4LiBMaW1pdGF0aW9uIG9mIExpYWJpbGl0eS4gSW4gbm8gZXZlbnQgYW5kIHVuZGVyIG5vIGxlZ2FsIHRoZW9yeSwKKyAgICAgIHdoZXRoZXIgaW4gdG9ydCAoaW5jbHVkaW5nIG5lZ2xpZ2VuY2UpLCBjb250cmFjdCwgb3Igb3RoZXJ3aXNlLAorICAgICAgdW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IChzdWNoIGFzIGRlbGliZXJhdGUgYW5kIGdyb3NzbHkKKyAgICAgIG5lZ2xpZ2VudCBhY3RzKSBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc2hhbGwgYW55IENvbnRyaWJ1dG9yIGJlCisgICAgICBsaWFibGUgdG8gWW91IGZvciBkYW1hZ2VzLCBpbmNsdWRpbmcgYW55IGRpcmVjdCwgaW5kaXJlY3QsIHNwZWNpYWwsCisgICAgICBpbmNpZGVudGFsLCBvciBjb25zZXF1ZW50aWFsIGRhbWFnZXMgb2YgYW55IGNoYXJhY3RlciBhcmlzaW5nIGFzIGEKKyAgICAgIHJlc3VsdCBvZiB0aGlzIExpY2Vuc2Ugb3Igb3V0IG9mIHRoZSB1c2Ugb3IgaW5hYmlsaXR5IHRvIHVzZSB0aGUKKyAgICAgIFdvcmsgKGluY2x1ZGluZyBidXQgbm90IGxpbWl0ZWQgdG8gZGFtYWdlcyBmb3IgbG9zcyBvZiBnb29kd2lsbCwKKyAgICAgIHdvcmsgc3RvcHBhZ2UsIGNvbXB1dGVyIGZhaWx1cmUgb3IgbWFsZnVuY3Rpb24sIG9yIGFueSBhbmQgYWxsCisgICAgICBvdGhlciBjb21tZXJjaWFsIGRhbWFnZXMgb3IgbG9zc2VzKSwgZXZlbiBpZiBzdWNoIENvbnRyaWJ1dG9yCisgICAgICBoYXMgYmVlbiBhZHZpc2VkIG9mIHRoZSBwb3NzaWJpbGl0eSBvZiBzdWNoIGRhbWFnZXMuCisKKyAgIDkuIEFjY2VwdGluZyBXYXJyYW50eSBvciBBZGRpdGlvbmFsIExpYWJpbGl0eS4gV2hpbGUgcmVkaXN0cmlidXRpbmcKKyAgICAgIHRoZSBXb3JrIG9yIERlcml2YXRpdmUgV29ya3MgdGhlcmVvZiwgWW91IG1heSBjaG9vc2UgdG8gb2ZmZXIsCisgICAgICBhbmQgY2hhcmdlIGEgZmVlIGZvciwgYWNjZXB0YW5jZSBvZiBzdXBwb3J0LCB3YXJyYW50eSwgaW5kZW1uaXR5LAorICAgICAgb3Igb3RoZXIgbGlhYmlsaXR5IG9ibGlnYXRpb25zIGFuZC9vciByaWdodHMgY29uc2lzdGVudCB3aXRoIHRoaXMKKyAgICAgIExpY2Vuc2UuIEhvd2V2ZXIsIGluIGFjY2VwdGluZyBzdWNoIG9ibGlnYXRpb25zLCBZb3UgbWF5IGFjdCBvbmx5CisgICAgICBvbiBZb3VyIG93biBiZWhhbGYgYW5kIG9uIFlvdXIgc29sZSByZXNwb25zaWJpbGl0eSwgbm90IG9uIGJlaGFsZgorICAgICAgb2YgYW55IG90aGVyIENvbnRyaWJ1dG9yLCBhbmQgb25seSBpZiBZb3UgYWdyZWUgdG8gaW5kZW1uaWZ5LAorICAgICAgZGVmZW5kLCBhbmQgaG9sZCBlYWNoIENvbnRyaWJ1dG9yIGhhcm1sZXNzIGZvciBhbnkgbGlhYmlsaXR5CisgICAgICBpbmN1cnJlZCBieSwgb3IgY2xhaW1zIGFzc2VydGVkIGFnYWluc3QsIHN1Y2ggQ29udHJpYnV0b3IgYnkgcmVhc29uCisgICAgICBvZiB5b3VyIGFjY2VwdGluZyBhbnkgc3VjaCB3YXJyYW50eSBvciBhZGRpdGlvbmFsIGxpYWJpbGl0eS4KKworICAgRU5EIE9GIFRFUk1TIEFORCBDT05ESVRJT05TCisKZGlmZiAtLWdpdCBhL21lZGlhL2NvZGVjMi9jb21wb25lbnRzL2Ftcl9uYl93Yi9wYXRlbnRfZGlzY2xhaW1lci50eHQgYi9tZWRpYS9jb2RlYzIvY29tcG9uZW50cy9hbXJfbmJfd2IvcGF0ZW50X2Rpc2NsYWltZXIudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI0YmYxMWQKLS0tIC9kZXYvbnVsbAorKysgYi9tZWRpYS9jb2RlYzIvY29tcG9uZW50cy9hbXJfbmJfd2IvcGF0ZW50X2Rpc2NsYWltZXIudHh0CkBAIC0wLDAgKzEsOSBAQAorCitUSElTIElTIE5PVCBBIEdSQU5UIE9GIFBBVEVOVCBSSUdIVFMuCisKK0dvb2dsZSBtYWtlcyBubyByZXByZXNlbnRhdGlvbiBvciB3YXJyYW50eSB0aGF0IHRoZSBjb2RlY3MgZm9yIHdoaWNoCitzb3VyY2UgY29kZSBpcyBtYWRlIGF2YWlsYWJsZSBoZXJldW5kZXIgYXJlIHVuZW5jdW1iZXJlZCBieQordGhpcmQtcGFydHkgcGF0ZW50cy4gIFRob3NlIGludGVuZGluZyB0byB1c2UgdGhpcyBzb3VyY2UgY29kZSBpbgoraGFyZHdhcmUgb3Igc29mdHdhcmUgcHJvZHVjdHMgYXJlIGFkdmlzZWQgdGhhdCBpbXBsZW1lbnRhdGlvbnMgb2YKK3RoZXNlIGNvZGVjcywgaW5jbHVkaW5nIGluIG9wZW4gc291cmNlIHNvZnR3YXJlIG9yIHNoYXJld2FyZSwgbWF5CityZXF1aXJlIHBhdGVudCBsaWNlbnNlcyBmcm9tIHRoZSByZWxldmFudCBwYXRlbnQgaG9sZGVycy4KZGlmZiAtLWdpdCBhL21lZGlhL2NvZGVjMi9jb21wb25lbnRzL2F2Yy9BbmRyb2lkLmJwIGIvbWVkaWEvY29kZWMyL2NvbXBvbmVudHMvYXZjL0FuZHJvaWQuYnAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDAyMTQ0NAotLS0gL2Rldi9udWxsCisrKyBiL21lZGlhL2NvZGVjMi9jb21wb25lbnRzL2F2Yy9BbmRyb2lkLmJwCkBAIC0wLDAgKzEsMzcgQEAKK2NjX2xpYnJhcnlfc2hhcmVkIHsKKyAgICBuYW1lOiAibGliY29kZWMyX3NvZnRfYXZjZGVjIiwKKyAgICBkZWZhdWx0czogWworICAgICAgICAibGliY29kZWMyX3NvZnQtZGVmYXVsdHMiLAorICAgICAgICAibGliY29kZWMyX3NvZnRfc2FuaXRpemVfc2lnbmVkLWRlZmF1bHRzIiwKKyAgIF0sCisKKyAgICBzdGF0aWNfbGliczogWyJsaWJhdmNkZWMiXSwKKworICAgIHNyY3M6IFsiQzJTb2Z0QXZjRGVjLmNwcCJdLAorCisgICAgaW5jbHVkZV9kaXJzOiBbCisgICAgICAgICJleHRlcm5hbC9saWJhdmMvZGVjb2RlciIsCisgICAgICAgICJleHRlcm5hbC9saWJhdmMvY29tbW9uIiwKKyAgICBdLAorfQorCitjY19saWJyYXJ5X3NoYXJlZCB7CisgICAgbmFtZTogImxpYmNvZGVjMl9zb2Z0X2F2Y2VuYyIsCisgICAgZGVmYXVsdHM6IFsKKyAgICAgICAgImxpYmNvZGVjMl9zb2Z0LWRlZmF1bHRzIiwKKyAgICAgICAgImxpYmNvZGVjMl9zb2Z0X3Nhbml0aXplX3NpZ25lZC1kZWZhdWx0cyIsCisgICBdLAorCisgICAgc3RhdGljX2xpYnM6IFsibGliYXZjZW5jIl0sCisKKyAgICBzcmNzOiBbIkMyU29mdEF2Y0VuYy5jcHAiXSwKKworICAgIGluY2x1ZGVfZGlyczogWworICAgICAgICAiZXh0ZXJuYWwvbGliYXZjL2VuY29kZXIiLAorICAgICAgICAiZXh0ZXJuYWwvbGliYXZjL2NvbW1vbiIsCisgICAgXSwKKworICAgIGNmbGFnczogWworICAgICAgICAiLVduby11bnVzZWQtdmFyaWFibGUiLAorICAgIF0sCit9CmRpZmYgLS1naXQgYS9tZWRpYS9jb2RlYzIvY29tcG9uZW50cy9hdmMvQzJTb2Z0QXZjRGVjLmNwcCBiL21lZGlhL2NvZGVjMi9jb21wb25lbnRzL2F2Yy9DMlNvZnRBdmNEZWMuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNlNjI3NDQKLS0tIC9kZXYvbnVsbAorKysgYi9tZWRpYS9jb2RlYzIvY29tcG9uZW50cy9hdmMvQzJTb2Z0QXZjRGVjLmNwcApAQCAtMCwwICsxLDk3OCBAQAorLyoKKyAqIENvcHlyaWdodCAyMDE3IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KKworLy8jZGVmaW5lIExPR19OREVCVUcgMAorI2RlZmluZSBMT0dfVEFHICJDMlNvZnRBdmNEZWMiCisjaW5jbHVkZSA8bG9nL2xvZy5oPgorCisjaW5jbHVkZSA8bWVkaWEvc3RhZ2VmcmlnaHQvZm91bmRhdGlvbi9NZWRpYURlZnMuaD4KKworI2luY2x1ZGUgPEMyRGVidWcuaD4KKyNpbmNsdWRlIDxDMlBsYXRmb3JtU3VwcG9ydC5oPgorI2luY2x1ZGUgPENvZGVjMk1hcHBlci5oPgorI2luY2x1ZGUgPFNpbXBsZUMySW50ZXJmYWNlLmg+CisKKyNpbmNsdWRlICJDMlNvZnRBdmNEZWMuaCIKKyNpbmNsdWRlICJpaDI2NGQuaCIKKworbmFtZXNwYWNlIGFuZHJvaWQgeworCituYW1lc3BhY2UgeworCitjb25zdGV4cHIgY2hhciBDT01QT05FTlRfTkFNRVtdID0gImMyLmFuZHJvaWQuYXZjLmRlY29kZXIiOworCit9ICAvLyBuYW1lc3BhY2UKKworY2xhc3MgQzJTb2Z0QXZjRGVjOjpJbnRmSW1wbCA6IHB1YmxpYyBTaW1wbGVJbnRlcmZhY2U8dm9pZD46OkJhc2VQYXJhbXMgeworcHVibGljOgorICAgIGV4cGxpY2l0IEludGZJbXBsKGNvbnN0IHN0ZDo6c2hhcmVkX3B0cjxDMlJlZmxlY3RvckhlbHBlcj4gJmhlbHBlcikKKyAgICAgICAgOiBTaW1wbGVJbnRlcmZhY2U8dm9pZD46OkJhc2VQYXJhbXMoCisgICAgICAgICAgICAgICAgaGVscGVyLAorICAgICAgICAgICAgICAgIENPTVBPTkVOVF9OQU1FLAorICAgICAgICAgICAgICAgIEMyQ29tcG9uZW50OjpLSU5EX0RFQ09ERVIsCisgICAgICAgICAgICAgICAgQzJDb21wb25lbnQ6OkRPTUFJTl9WSURFTywKKyAgICAgICAgICAgICAgICBNRURJQV9NSU1FVFlQRV9WSURFT19BVkMpIHsKKyAgICAgICAgbm9Qcml2YXRlQnVmZmVycygpOyAvLyBUT0RPOiBhY2NvdW50IGZvciBvdXIgYnVmZmVycyBoZXJlCisgICAgICAgIG5vSW5wdXRSZWZlcmVuY2VzKCk7CisgICAgICAgIG5vT3V0cHV0UmVmZXJlbmNlcygpOworICAgICAgICBub0lucHV0TGF0ZW5jeSgpOworICAgICAgICBub1RpbWVTdHJldGNoKCk7CisKKyAgICAgICAgLy8gVE9ETzogb3V0cHV0IGxhdGVuY3kgYW5kIHJlb3JkZXJpbmcKKworICAgICAgICBhZGRQYXJhbWV0ZXIoCisgICAgICAgICAgICAgICAgRGVmaW5lUGFyYW0obUF0dHJpYiwgQzJfUEFSQU1LRVlfQ09NUE9ORU5UX0FUVFJJQlVURVMpCisgICAgICAgICAgICAgICAgLndpdGhDb25zdFZhbHVlKG5ldyBDMkNvbXBvbmVudEF0dHJpYnV0ZXNTZXR0aW5nKEMyQ29tcG9uZW50OjpBVFRSSUJfSVNfVEVNUE9SQUwpKQorICAgICAgICAgICAgICAgIC5idWlsZCgpKTsKKworICAgICAgICAvLyBjb2RlZCBhbmQgb3V0cHV0IHBpY3R1cmUgc2l6ZSBpcyB0aGUgc2FtZSBmb3IgdGhpcyBjb2RlYworICAgICAgICBhZGRQYXJhbWV0ZXIoCisgICAgICAgICAgICAgICAgRGVmaW5lUGFyYW0obVNpemUsIEMyX1BBUkFNS0VZX1BJQ1RVUkVfU0laRSkKKyAgICAgICAgICAgICAgICAud2l0aERlZmF1bHQobmV3IEMyU3RyZWFtUGljdHVyZVNpemVJbmZvOjpvdXRwdXQoMHUsIDMyMCwgMjQwKSkKKyAgICAgICAgICAgICAgICAud2l0aEZpZWxkcyh7CisgICAgICAgICAgICAgICAgICAgIEMyRihtU2l6ZSwgd2lkdGgpLmluUmFuZ2UoMiwgNDA4MCwgMiksCisgICAgICAgICAgICAgICAgICAgIEMyRihtU2l6ZSwgaGVpZ2h0KS5pblJhbmdlKDIsIDQwODAsIDIpLAorICAgICAgICAgICAgICAgIH0pCisgICAgICAgICAgICAgICAgLndpdGhTZXR0ZXIoU2l6ZVNldHRlcikKKyAgICAgICAgICAgICAgICAuYnVpbGQoKSk7CisKKyAgICAgICAgYWRkUGFyYW1ldGVyKAorICAgICAgICAgICAgICAgIERlZmluZVBhcmFtKG1NYXhTaXplLCBDMl9QQVJBTUtFWV9NQVhfUElDVFVSRV9TSVpFKQorICAgICAgICAgICAgICAgIC53aXRoRGVmYXVsdChuZXcgQzJTdHJlYW1NYXhQaWN0dXJlU2l6ZVR1bmluZzo6b3V0cHV0KDB1LCAzMjAsIDI0MCkpCisgICAgICAgICAgICAgICAgLndpdGhGaWVsZHMoeworICAgICAgICAgICAgICAgICAgICBDMkYobVNpemUsIHdpZHRoKS5pblJhbmdlKDIsIDQwODAsIDIpLAorICAgICAgICAgICAgICAgICAgICBDMkYobVNpemUsIGhlaWdodCkuaW5SYW5nZSgyLCA0MDgwLCAyKSwKKyAgICAgICAgICAgICAgICB9KQorICAgICAgICAgICAgICAgIC53aXRoU2V0dGVyKE1heFBpY3R1cmVTaXplU2V0dGVyLCBtU2l6ZSkKKyAgICAgICAgICAgICAgICAuYnVpbGQoKSk7CisKKyAgICAgICAgYWRkUGFyYW1ldGVyKAorICAgICAgICAgICAgICAgIERlZmluZVBhcmFtKG1Qcm9maWxlTGV2ZWwsIEMyX1BBUkFNS0VZX1BST0ZJTEVfTEVWRUwpCisgICAgICAgICAgICAgICAgLndpdGhEZWZhdWx0KG5ldyBDMlN0cmVhbVByb2ZpbGVMZXZlbEluZm86OmlucHV0KDB1LAorICAgICAgICAgICAgICAgICAgICAgICAgQzJDb25maWc6OlBST0ZJTEVfQVZDX0NPTlNUUkFJTkVEX0JBU0VMSU5FLCBDMkNvbmZpZzo6TEVWRUxfQVZDXzVfMikpCisgICAgICAgICAgICAgICAgLndpdGhGaWVsZHMoeworICAgICAgICAgICAgICAgICAgICBDMkYobVByb2ZpbGVMZXZlbCwgcHJvZmlsZSkub25lT2YoeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIEMyQ29uZmlnOjpQUk9GSUxFX0FWQ19DT05TVFJBSU5FRF9CQVNFTElORSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBDMkNvbmZpZzo6UFJPRklMRV9BVkNfQkFTRUxJTkUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgQzJDb25maWc6OlBST0ZJTEVfQVZDX01BSU4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgQzJDb25maWc6OlBST0ZJTEVfQVZDX0NPTlNUUkFJTkVEX0hJR0gsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgQzJDb25maWc6OlBST0ZJTEVfQVZDX1BST0dSRVNTSVZFX0hJR0gsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgQzJDb25maWc6OlBST0ZJTEVfQVZDX0hJR0h9KSwKKyAgICAgICAgICAgICAgICAgICAgQzJGKG1Qcm9maWxlTGV2ZWwsIGxldmVsKS5vbmVPZih7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgQzJDb25maWc6OkxFVkVMX0FWQ18xLCBDMkNvbmZpZzo6TEVWRUxfQVZDXzFCLCBDMkNvbmZpZzo6TEVWRUxfQVZDXzFfMSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBDMkNvbmZpZzo6TEVWRUxfQVZDXzFfMiwgQzJDb25maWc6OkxFVkVMX0FWQ18xXzMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgQzJDb25maWc6OkxFVkVMX0FWQ18yLCBDMkNvbmZpZzo6TEVWRUxfQVZDXzJfMSwgQzJDb25maWc6OkxFVkVMX0FWQ18yXzIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgQzJDb25maWc6OkxFVkVMX0FWQ18zLCBDMkNvbmZpZzo6TEVWRUxfQVZDXzNfMSwgQzJDb25maWc6OkxFVkVMX0FWQ18zXzIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgQzJDb25maWc6OkxFVkVMX0FWQ180LCBDMkNvbmZpZzo6TEVWRUxfQVZDXzRfMSwgQzJDb25maWc6OkxFVkVMX0FWQ180XzIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgQzJDb25maWc6OkxFVkVMX0FWQ181LCBDMkNvbmZpZzo6TEVWRUxfQVZDXzVfMSwgQzJDb25maWc6OkxFVkVMX0FWQ181XzIKKyAgICAgICAgICAgICAgICAgICAgfSkKKyAgICAgICAgICAgICAgICB9KQorICAgICAgICAgICAgICAgIC53aXRoU2V0dGVyKFByb2ZpbGVMZXZlbFNldHRlciwgbVNpemUpCisgICAgICAgICAgICAgICAgLmJ1aWxkKCkpOworCisgICAgICAgIGFkZFBhcmFtZXRlcigKKyAgICAgICAgICAgICAgICBEZWZpbmVQYXJhbShtTWF4SW5wdXRTaXplLCBDMl9QQVJBTUtFWV9JTlBVVF9NQVhfQlVGRkVSX1NJWkUpCisgICAgICAgICAgICAgICAgLndpdGhEZWZhdWx0KG5ldyBDMlN0cmVhbU1heEJ1ZmZlclNpemVJbmZvOjppbnB1dCgwdSwgMzIwICogMjQwICogMyAvIDQpKQorICAgICAgICAgICAgICAgIC53aXRoRmllbGRzKHsKKyAgICAgICAgICAgICAgICAgICAgQzJGKG1NYXhJbnB1dFNpemUsIHZhbHVlKS5hbnkoKSwKKyAgICAgICAgICAgICAgICB9KQorICAgICAgICAgICAgICAgIC5jYWxjdWxhdGVkQXMoTWF4SW5wdXRTaXplU2V0dGVyLCBtTWF4U2l6ZSkKKyAgICAgICAgICAgICAgICAuYnVpbGQoKSk7CisKKyAgICAgICAgQzJDaHJvbWFPZmZzZXRTdHJ1Y3QgbG9jYXRpb25zWzFdID0geyBDMkNocm9tYU9mZnNldFN0cnVjdDo6SVRVX1lVVl80MjBfMCgpIH07CisgICAgICAgIHN0ZDo6c2hhcmVkX3B0cjxDMlN0cmVhbUNvbG9ySW5mbzo6b3V0cHV0PiBkZWZhdWx0Q29sb3JJbmZvID0KKyAgICAgICAgICAgIEMyU3RyZWFtQ29sb3JJbmZvOjpvdXRwdXQ6OkFsbG9jU2hhcmVkKAorICAgICAgICAgICAgICAgICAgICAxdSwgMHUsIDh1IC8qIGJpdERlcHRoICovLCBDMkNvbG9yOjpZVVZfNDIwKTsKKyAgICAgICAgbWVtY3B5KGRlZmF1bHRDb2xvckluZm8tPm0ubG9jYXRpb25zLCBsb2NhdGlvbnMsIHNpemVvZihsb2NhdGlvbnMpKTsKKworICAgICAgICBkZWZhdWx0Q29sb3JJbmZvID0KKyAgICAgICAgICAgIEMyU3RyZWFtQ29sb3JJbmZvOjpvdXRwdXQ6OkFsbG9jU2hhcmVkKAorICAgICAgICAgICAgICAgICAgICB7IEMyQ2hyb21hT2Zmc2V0U3RydWN0OjpJVFVfWVVWXzQyMF8wKCkgfSwKKyAgICAgICAgICAgICAgICAgICAgMHUsIDh1IC8qIGJpdERlcHRoICovLCBDMkNvbG9yOjpZVVZfNDIwKTsKKyAgICAgICAgaGVscGVyLT5hZGRTdHJ1Y3REZXNjcmlwdG9yczxDMkNocm9tYU9mZnNldFN0cnVjdD4oKTsKKworICAgICAgICBhZGRQYXJhbWV0ZXIoCisgICAgICAgICAgICAgICAgRGVmaW5lUGFyYW0obUNvbG9ySW5mbywgQzJfUEFSQU1LRVlfQ09ERURfQ09MT1JfSU5GTykKKyAgICAgICAgICAgICAgICAud2l0aENvbnN0VmFsdWUoZGVmYXVsdENvbG9ySW5mbykKKyAgICAgICAgICAgICAgICAuYnVpbGQoKSk7CisKKyAgICAgICAgYWRkUGFyYW1ldGVyKAorICAgICAgICAgICAgICAgIERlZmluZVBhcmFtKG1EZWZhdWx0Q29sb3JBc3BlY3RzLCBDMl9QQVJBTUtFWV9ERUZBVUxUX0NPTE9SX0FTUEVDVFMpCisgICAgICAgICAgICAgICAgLndpdGhEZWZhdWx0KG5ldyBDMlN0cmVhbUNvbG9yQXNwZWN0c1R1bmluZzo6b3V0cHV0KAorICAgICAgICAgICAgICAgICAgICAgICAgMHUsIEMyQ29sb3I6OlJBTkdFX1VOU1BFQ0lGSUVELCBDMkNvbG9yOjpQUklNQVJJRVNfVU5TUEVDSUZJRUQsCisgICAgICAgICAgICAgICAgICAgICAgICBDMkNvbG9yOjpUUkFOU0ZFUl9VTlNQRUNJRklFRCwgQzJDb2xvcjo6TUFUUklYX1VOU1BFQ0lGSUVEKSkKKyAgICAgICAgICAgICAgICAud2l0aEZpZWxkcyh7CisgICAgICAgICAgICAgICAgICAgIEMyRihtRGVmYXVsdENvbG9yQXNwZWN0cywgcmFuZ2UpLmluUmFuZ2UoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEMyQ29sb3I6OlJBTkdFX1VOU1BFQ0lGSUVELCAgICAgQzJDb2xvcjo6UkFOR0VfT1RIRVIpLAorICAgICAgICAgICAgICAgICAgICBDMkYobURlZmF1bHRDb2xvckFzcGVjdHMsIHByaW1hcmllcykuaW5SYW5nZSgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQzJDb2xvcjo6UFJJTUFSSUVTX1VOU1BFQ0lGSUVELCBDMkNvbG9yOjpQUklNQVJJRVNfT1RIRVIpLAorICAgICAgICAgICAgICAgICAgICBDMkYobURlZmF1bHRDb2xvckFzcGVjdHMsIHRyYW5zZmVyKS5pblJhbmdlKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDMkNvbG9yOjpUUkFOU0ZFUl9VTlNQRUNJRklFRCwgIEMyQ29sb3I6OlRSQU5TRkVSX09USEVSKSwKKyAgICAgICAgICAgICAgICAgICAgQzJGKG1EZWZhdWx0Q29sb3JBc3BlY3RzLCBtYXRyaXgpLmluUmFuZ2UoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEMyQ29sb3I6Ok1BVFJJWF9VTlNQRUNJRklFRCwgICAgQzJDb2xvcjo6TUFUUklYX09USEVSKQorICAgICAgICAgICAgICAgIH0pCisgICAgICAgICAgICAgICAgLndpdGhTZXR0ZXIoRGVmYXVsdENvbG9yQXNwZWN0c1NldHRlcikKKyAgICAgICAgICAgICAgICAuYnVpbGQoKSk7CisKKyAgICAgICAgYWRkUGFyYW1ldGVyKAorICAgICAgICAgICAgICAgIERlZmluZVBhcmFtKG1Db2RlZENvbG9yQXNwZWN0cywgQzJfUEFSQU1LRVlfVlVJX0NPTE9SX0FTUEVDVFMpCisgICAgICAgICAgICAgICAgLndpdGhEZWZhdWx0KG5ldyBDMlN0cmVhbUNvbG9yQXNwZWN0c0luZm86OmlucHV0KAorICAgICAgICAgICAgICAgICAgICAgICAgMHUsIEMyQ29sb3I6OlJBTkdFX0xJTUlURUQsIEMyQ29sb3I6OlBSSU1BUklFU19VTlNQRUNJRklFRCwKKyAgICAgICAgICAgICAgICAgICAgICAgIEMyQ29sb3I6OlRSQU5TRkVSX1VOU1BFQ0lGSUVELCBDMkNvbG9yOjpNQVRSSVhfVU5TUEVDSUZJRUQpKQorICAgICAgICAgICAgICAgIC53aXRoRmllbGRzKHsKKyAgICAgICAgICAgICAgICAgICAgQzJGKG1Db2RlZENvbG9yQXNwZWN0cywgcmFuZ2UpLmluUmFuZ2UoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEMyQ29sb3I6OlJBTkdFX1VOU1BFQ0lGSUVELCAgICAgQzJDb2xvcjo6UkFOR0VfT1RIRVIpLAorICAgICAgICAgICAgICAgICAgICBDMkYobUNvZGVkQ29sb3JBc3BlY3RzLCBwcmltYXJpZXMpLmluUmFuZ2UoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEMyQ29sb3I6OlBSSU1BUklFU19VTlNQRUNJRklFRCwgQzJDb2xvcjo6UFJJTUFSSUVTX09USEVSKSwKKyAgICAgICAgICAgICAgICAgICAgQzJGKG1Db2RlZENvbG9yQXNwZWN0cywgdHJhbnNmZXIpLmluUmFuZ2UoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEMyQ29sb3I6OlRSQU5TRkVSX1VOU1BFQ0lGSUVELCAgQzJDb2xvcjo6VFJBTlNGRVJfT1RIRVIpLAorICAgICAgICAgICAgICAgICAgICBDMkYobUNvZGVkQ29sb3JBc3BlY3RzLCBtYXRyaXgpLmluUmFuZ2UoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEMyQ29sb3I6Ok1BVFJJWF9VTlNQRUNJRklFRCwgICAgQzJDb2xvcjo6TUFUUklYX09USEVSKQorICAgICAgICAgICAgICAgIH0pCisgICAgICAgICAgICAgICAgLndpdGhTZXR0ZXIoQ29kZWRDb2xvckFzcGVjdHNTZXR0ZXIpCisgICAgICAgICAgICAgICAgLmJ1aWxkKCkpOworCisgICAgICAgIGFkZFBhcmFtZXRlcigKKyAgICAgICAgICAgICAgICBEZWZpbmVQYXJhbShtQ29sb3JBc3BlY3RzLCBDMl9QQVJBTUtFWV9DT0xPUl9BU1BFQ1RTKQorICAgICAgICAgICAgICAgIC53aXRoRGVmYXVsdChuZXcgQzJTdHJlYW1Db2xvckFzcGVjdHNJbmZvOjpvdXRwdXQoCisgICAgICAgICAgICAgICAgICAgICAgICAwdSwgQzJDb2xvcjo6UkFOR0VfVU5TUEVDSUZJRUQsIEMyQ29sb3I6OlBSSU1BUklFU19VTlNQRUNJRklFRCwKKyAgICAgICAgICAgICAgICAgICAgICAgIEMyQ29sb3I6OlRSQU5TRkVSX1VOU1BFQ0lGSUVELCBDMkNvbG9yOjpNQVRSSVhfVU5TUEVDSUZJRUQpKQorICAgICAgICAgICAgICAgIC53aXRoRmllbGRzKHsKKyAgICAgICAgICAgICAgICAgICAgQzJGKG1Db2xvckFzcGVjdHMsIHJhbmdlKS5pblJhbmdlKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDMkNvbG9yOjpSQU5HRV9VTlNQRUNJRklFRCwgICAgIEMyQ29sb3I6OlJBTkdFX09USEVSKSwKKyAgICAgICAgICAgICAgICAgICAgQzJGKG1Db2xvckFzcGVjdHMsIHByaW1hcmllcykuaW5SYW5nZSgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQzJDb2xvcjo6UFJJTUFSSUVTX1VOU1BFQ0lGSUVELCBDMkNvbG9yOjpQUklNQVJJRVNfT1RIRVIpLAorICAgICAgICAgICAgICAgICAgICBDMkYobUNvbG9yQXNwZWN0cywgdHJhbnNmZXIpLmluUmFuZ2UoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEMyQ29sb3I6OlRSQU5TRkVSX1VOU1BFQ0lGSUVELCAgQzJDb2xvcjo6VFJBTlNGRVJfT1RIRVIpLAorICAgICAgICAgICAgICAgICAgICBDMkYobUNvbG9yQXNwZWN0cywgbWF0cml4KS5pblJhbmdlKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDMkNvbG9yOjpNQVRSSVhfVU5TUEVDSUZJRUQsICAgIEMyQ29sb3I6Ok1BVFJJWF9PVEhFUikKKyAgICAgICAgICAgICAgICB9KQorICAgICAgICAgICAgICAgIC53aXRoU2V0dGVyKENvbG9yQXNwZWN0c1NldHRlciwgbURlZmF1bHRDb2xvckFzcGVjdHMsIG1Db2RlZENvbG9yQXNwZWN0cykKKyAgICAgICAgICAgICAgICAuYnVpbGQoKSk7CisKKyAgICAgICAgLy8gVE9ETzogc3VwcG9ydCBtb3JlIGZvcm1hdHM/CisgICAgICAgIGFkZFBhcmFtZXRlcigKKyAgICAgICAgICAgICAgICBEZWZpbmVQYXJhbShtUGl4ZWxGb3JtYXQsIEMyX1BBUkFNS0VZX1BJWEVMX0ZPUk1BVCkKKyAgICAgICAgICAgICAgICAud2l0aENvbnN0VmFsdWUobmV3IEMyU3RyZWFtUGl4ZWxGb3JtYXRJbmZvOjpvdXRwdXQoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHUsIEhBTF9QSVhFTF9GT1JNQVRfWUNCQ1JfNDIwXzg4OCkpCisgICAgICAgICAgICAgICAgLmJ1aWxkKCkpOworICAgIH0KKworICAgIHN0YXRpYyBDMlIgU2l6ZVNldHRlcihib29sIG1heUJsb2NrLCBjb25zdCBDMlA8QzJTdHJlYW1QaWN0dXJlU2l6ZUluZm86Om91dHB1dD4gJm9sZE1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICBDMlA8QzJWaWRlb1NpemVTdHJlYW1JbmZvOjpvdXRwdXQ+ICZtZSkgeworICAgICAgICAodm9pZCltYXlCbG9jazsKKyAgICAgICAgQzJSIHJlcyA9IEMyUjo6T2soKTsKKyAgICAgICAgaWYgKCFtZS5GKG1lLnYud2lkdGgpLnN1cHBvcnRzQXRBbGwobWUudi53aWR0aCkpIHsKKyAgICAgICAgICAgIHJlcyA9IHJlcy5wbHVzKEMyU2V0dGluZ1Jlc3VsdEJ1aWxkZXI6OkJhZFZhbHVlKG1lLkYobWUudi53aWR0aCkpKTsKKyAgICAgICAgICAgIG1lLnNldCgpLndpZHRoID0gb2xkTWUudi53aWR0aDsKKyAgICAgICAgfQorICAgICAgICBpZiAoIW1lLkYobWUudi5oZWlnaHQpLnN1cHBvcnRzQXRBbGwobWUudi5oZWlnaHQpKSB7CisgICAgICAgICAgICByZXMgPSByZXMucGx1cyhDMlNldHRpbmdSZXN1bHRCdWlsZGVyOjpCYWRWYWx1ZShtZS5GKG1lLnYuaGVpZ2h0KSkpOworICAgICAgICAgICAgbWUuc2V0KCkuaGVpZ2h0ID0gb2xkTWUudi5oZWlnaHQ7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHJlczsKKyAgICB9CisKKyAgICBzdGF0aWMgQzJSIE1heFBpY3R1cmVTaXplU2V0dGVyKGJvb2wgbWF5QmxvY2ssIEMyUDxDMlN0cmVhbU1heFBpY3R1cmVTaXplVHVuaW5nOjpvdXRwdXQ+ICZtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEMyUDxDMlN0cmVhbVBpY3R1cmVTaXplSW5mbzo6b3V0cHV0PiAmc2l6ZSkgeworICAgICAgICAodm9pZCltYXlCbG9jazsKKyAgICAgICAgLy8gVE9ETzogZ2V0IG1heCB3aWR0aC9oZWlnaHQgZnJvbSB0aGUgc2l6ZSdzIGZpZWxkIGhlbHBlcnMgdnMuIGhhcmRjb2RpbmcKKyAgICAgICAgbWUuc2V0KCkud2lkdGggPSBjMl9taW4oYzJfbWF4KG1lLnYud2lkdGgsIHNpemUudi53aWR0aCksIDQwODB1KTsKKyAgICAgICAgbWUuc2V0KCkuaGVpZ2h0ID0gYzJfbWluKGMyX21heChtZS52LmhlaWdodCwgc2l6ZS52LmhlaWdodCksIDQwODB1KTsKKyAgICAgICAgcmV0dXJuIEMyUjo6T2soKTsKKyAgICB9CisKKyAgICBzdGF0aWMgQzJSIE1heElucHV0U2l6ZVNldHRlcihib29sIG1heUJsb2NrLCBDMlA8QzJTdHJlYW1NYXhCdWZmZXJTaXplSW5mbzo6aW5wdXQ+ICZtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBDMlA8QzJTdHJlYW1NYXhQaWN0dXJlU2l6ZVR1bmluZzo6b3V0cHV0PiAmbWF4U2l6ZSkgeworICAgICAgICAodm9pZCltYXlCbG9jazsKKyAgICAgICAgLy8gYXNzdW1lIGNvbXByZXNzaW9uIHJhdGlvIG9mIDIKKyAgICAgICAgbWUuc2V0KCkudmFsdWUgPSAoKChtYXhTaXplLnYud2lkdGggKyAxNSkgLyAxNikgKiAoKG1heFNpemUudi5oZWlnaHQgKyAxNSkgLyAxNikgKiAxOTIpOworICAgICAgICByZXR1cm4gQzJSOjpPaygpOworICAgIH0KKworICAgIHN0YXRpYyBDMlIgUHJvZmlsZUxldmVsU2V0dGVyKGJvb2wgbWF5QmxvY2ssIEMyUDxDMlN0cmVhbVByb2ZpbGVMZXZlbEluZm86OmlucHV0PiAmbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgQzJQPEMyU3RyZWFtUGljdHVyZVNpemVJbmZvOjpvdXRwdXQ+ICZzaXplKSB7CisgICAgICAgICh2b2lkKW1heUJsb2NrOworICAgICAgICAodm9pZClzaXplOworICAgICAgICAodm9pZCltZTsgIC8vIFRPRE86IHZhbGlkYXRlCisgICAgICAgIHJldHVybiBDMlI6Ok9rKCk7CisgICAgfQorCisgICAgc3RhdGljIEMyUiBEZWZhdWx0Q29sb3JBc3BlY3RzU2V0dGVyKGJvb2wgbWF5QmxvY2ssIEMyUDxDMlN0cmVhbUNvbG9yQXNwZWN0c1R1bmluZzo6b3V0cHV0PiAmbWUpIHsKKyAgICAgICAgKHZvaWQpbWF5QmxvY2s7CisgICAgICAgIGlmIChtZS52LnJhbmdlID4gQzJDb2xvcjo6UkFOR0VfT1RIRVIpIHsKKyAgICAgICAgICAgICAgICBtZS5zZXQoKS5yYW5nZSA9IEMyQ29sb3I6OlJBTkdFX09USEVSOworICAgICAgICB9CisgICAgICAgIGlmIChtZS52LnByaW1hcmllcyA+IEMyQ29sb3I6OlBSSU1BUklFU19PVEhFUikgeworICAgICAgICAgICAgICAgIG1lLnNldCgpLnByaW1hcmllcyA9IEMyQ29sb3I6OlBSSU1BUklFU19PVEhFUjsKKyAgICAgICAgfQorICAgICAgICBpZiAobWUudi50cmFuc2ZlciA+IEMyQ29sb3I6OlRSQU5TRkVSX09USEVSKSB7CisgICAgICAgICAgICAgICAgbWUuc2V0KCkudHJhbnNmZXIgPSBDMkNvbG9yOjpUUkFOU0ZFUl9PVEhFUjsKKyAgICAgICAgfQorICAgICAgICBpZiAobWUudi5tYXRyaXggPiBDMkNvbG9yOjpNQVRSSVhfT1RIRVIpIHsKKyAgICAgICAgICAgICAgICBtZS5zZXQoKS5tYXRyaXggPSBDMkNvbG9yOjpNQVRSSVhfT1RIRVI7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIEMyUjo6T2soKTsKKyAgICB9CisKKyAgICBzdGF0aWMgQzJSIENvZGVkQ29sb3JBc3BlY3RzU2V0dGVyKGJvb2wgbWF5QmxvY2ssIEMyUDxDMlN0cmVhbUNvbG9yQXNwZWN0c0luZm86OmlucHV0PiAmbWUpIHsKKyAgICAgICAgKHZvaWQpbWF5QmxvY2s7CisgICAgICAgIGlmIChtZS52LnJhbmdlID4gQzJDb2xvcjo6UkFOR0VfT1RIRVIpIHsKKyAgICAgICAgICAgICAgICBtZS5zZXQoKS5yYW5nZSA9IEMyQ29sb3I6OlJBTkdFX09USEVSOworICAgICAgICB9CisgICAgICAgIGlmIChtZS52LnByaW1hcmllcyA+IEMyQ29sb3I6OlBSSU1BUklFU19PVEhFUikgeworICAgICAgICAgICAgICAgIG1lLnNldCgpLnByaW1hcmllcyA9IEMyQ29sb3I6OlBSSU1BUklFU19PVEhFUjsKKyAgICAgICAgfQorICAgICAgICBpZiAobWUudi50cmFuc2ZlciA+IEMyQ29sb3I6OlRSQU5TRkVSX09USEVSKSB7CisgICAgICAgICAgICAgICAgbWUuc2V0KCkudHJhbnNmZXIgPSBDMkNvbG9yOjpUUkFOU0ZFUl9PVEhFUjsKKyAgICAgICAgfQorICAgICAgICBpZiAobWUudi5tYXRyaXggPiBDMkNvbG9yOjpNQVRSSVhfT1RIRVIpIHsKKyAgICAgICAgICAgICAgICBtZS5zZXQoKS5tYXRyaXggPSBDMkNvbG9yOjpNQVRSSVhfT1RIRVI7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIEMyUjo6T2soKTsKKyAgICB9CisKKyAgICBzdGF0aWMgQzJSIENvbG9yQXNwZWN0c1NldHRlcihib29sIG1heUJsb2NrLCBDMlA8QzJTdHJlYW1Db2xvckFzcGVjdHNJbmZvOjpvdXRwdXQ+ICZtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBDMlA8QzJTdHJlYW1Db2xvckFzcGVjdHNUdW5pbmc6Om91dHB1dD4gJmRlZiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBDMlA8QzJTdHJlYW1Db2xvckFzcGVjdHNJbmZvOjppbnB1dD4gJmNvZGVkKSB7CisgICAgICAgICh2b2lkKW1heUJsb2NrOworICAgICAgICAvLyB0YWtlIGRlZmF1bHQgdmFsdWVzIGZvciBhbGwgdW5zcGVjaWZpZWQgZmllbGRzLCBhbmQgY29kZWQgdmFsdWVzIGZvciBzcGVjaWZpZWQgb25lcworICAgICAgICBtZS5zZXQoKS5yYW5nZSA9IGNvZGVkLnYucmFuZ2UgPT0gUkFOR0VfVU5TUEVDSUZJRUQgPyBkZWYudi5yYW5nZSA6IGNvZGVkLnYucmFuZ2U7CisgICAgICAgIG1lLnNldCgpLnByaW1hcmllcyA9IGNvZGVkLnYucHJpbWFyaWVzID09IFBSSU1BUklFU19VTlNQRUNJRklFRAorICAgICAgICAgICAgICAgID8gZGVmLnYucHJpbWFyaWVzIDogY29kZWQudi5wcmltYXJpZXM7CisgICAgICAgIG1lLnNldCgpLnRyYW5zZmVyID0gY29kZWQudi50cmFuc2ZlciA9PSBUUkFOU0ZFUl9VTlNQRUNJRklFRAorICAgICAgICAgICAgICAgID8gZGVmLnYudHJhbnNmZXIgOiBjb2RlZC52LnRyYW5zZmVyOworICAgICAgICBtZS5zZXQoKS5tYXRyaXggPSBjb2RlZC52Lm1hdHJpeCA9PSBNQVRSSVhfVU5TUEVDSUZJRUQgPyBkZWYudi5tYXRyaXggOiBjb2RlZC52Lm1hdHJpeDsKKyAgICAgICAgcmV0dXJuIEMyUjo6T2soKTsKKyAgICB9CisKKyAgICBzdGQ6OnNoYXJlZF9wdHI8QzJTdHJlYW1Db2xvckFzcGVjdHNJbmZvOjpvdXRwdXQ+IGdldENvbG9yQXNwZWN0c19sKCkgeworICAgICAgICByZXR1cm4gbUNvbG9yQXNwZWN0czsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgc3RkOjpzaGFyZWRfcHRyPEMyU3RyZWFtUHJvZmlsZUxldmVsSW5mbzo6aW5wdXQ+IG1Qcm9maWxlTGV2ZWw7CisgICAgc3RkOjpzaGFyZWRfcHRyPEMyU3RyZWFtUGljdHVyZVNpemVJbmZvOjpvdXRwdXQ+IG1TaXplOworICAgIHN0ZDo6c2hhcmVkX3B0cjxDMlN0cmVhbU1heFBpY3R1cmVTaXplVHVuaW5nOjpvdXRwdXQ+IG1NYXhTaXplOworICAgIHN0ZDo6c2hhcmVkX3B0cjxDMlN0cmVhbU1heEJ1ZmZlclNpemVJbmZvOjppbnB1dD4gbU1heElucHV0U2l6ZTsKKyAgICBzdGQ6OnNoYXJlZF9wdHI8QzJTdHJlYW1Db2xvckluZm86Om91dHB1dD4gbUNvbG9ySW5mbzsKKyAgICBzdGQ6OnNoYXJlZF9wdHI8QzJTdHJlYW1Db2xvckFzcGVjdHNJbmZvOjppbnB1dD4gbUNvZGVkQ29sb3JBc3BlY3RzOworICAgIHN0ZDo6c2hhcmVkX3B0cjxDMlN0cmVhbUNvbG9yQXNwZWN0c1R1bmluZzo6b3V0cHV0PiBtRGVmYXVsdENvbG9yQXNwZWN0czsKKyAgICBzdGQ6OnNoYXJlZF9wdHI8QzJTdHJlYW1Db2xvckFzcGVjdHNJbmZvOjpvdXRwdXQ+IG1Db2xvckFzcGVjdHM7CisgICAgc3RkOjpzaGFyZWRfcHRyPEMyU3RyZWFtUGl4ZWxGb3JtYXRJbmZvOjpvdXRwdXQ+IG1QaXhlbEZvcm1hdDsKK307CisKK3N0YXRpYyBzaXplX3QgZ2V0Q3B1Q29yZUNvdW50KCkgeworICAgIGxvbmcgY3B1Q29yZUNvdW50ID0gMTsKKyNpZiBkZWZpbmVkKF9TQ19OUFJPQ0VTU09SU19PTkxOKQorICAgIGNwdUNvcmVDb3VudCA9IHN5c2NvbmYoX1NDX05QUk9DRVNTT1JTX09OTE4pOworI2Vsc2UKKyAgICAvLyBfU0NfTlBST0NfT05MTiBtdXN0IGJlIGRlZmluZWQuLi4KKyAgICBjcHVDb3JlQ291bnQgPSBzeXNjb25mKF9TQ19OUFJPQ19PTkxOKTsKKyNlbmRpZgorICAgIENIRUNLKGNwdUNvcmVDb3VudCA+PSAxKTsKKyAgICBBTE9HVigiTnVtYmVyIG9mIENQVSBjb3JlczogJWxkIiwgY3B1Q29yZUNvdW50KTsKKyAgICByZXR1cm4gKHNpemVfdCljcHVDb3JlQ291bnQ7Cit9CisKK3N0YXRpYyB2b2lkICppdmRfYWxpZ25lZF9tYWxsb2Modm9pZCAqY3R4dCwgV09SRDMyIGFsaWdubWVudCwgV09SRDMyIHNpemUpIHsKKyAgICAodm9pZCkgY3R4dDsKKyAgICByZXR1cm4gbWVtYWxpZ24oYWxpZ25tZW50LCBzaXplKTsKK30KKworc3RhdGljIHZvaWQgaXZkX2FsaWduZWRfZnJlZSh2b2lkICpjdHh0LCB2b2lkICptZW0pIHsKKyAgICAodm9pZCkgY3R4dDsKKyAgICBmcmVlKG1lbSk7Cit9CisKK0MyU29mdEF2Y0RlYzo6QzJTb2Z0QXZjRGVjKAorICAgICAgICBjb25zdCBjaGFyICpuYW1lLAorICAgICAgICBjMl9ub2RlX2lkX3QgaWQsCisgICAgICAgIGNvbnN0IHN0ZDo6c2hhcmVkX3B0cjxJbnRmSW1wbD4gJmludGZJbXBsKQorICAgIDogU2ltcGxlQzJDb21wb25lbnQoc3RkOjptYWtlX3NoYXJlZDxTaW1wbGVJbnRlcmZhY2U8SW50ZkltcGw+PihuYW1lLCBpZCwgaW50ZkltcGwpKSwKKyAgICAgIG1JbnRmKGludGZJbXBsKSwKKyAgICAgIG1EZWNIYW5kbGUobnVsbHB0ciksCisgICAgICBtT3V0QnVmZmVyRmx1c2gobnVsbHB0ciksCisgICAgICBtSXZDb2xvckZvcm1hdChJVl9ZVVZfNDIwUCksCisgICAgICBtV2lkdGgoMzIwKSwKKyAgICAgIG1IZWlnaHQoMjQwKSwKKyAgICAgIG1IZWFkZXJEZWNvZGVkKGZhbHNlKSB7CisgICAgR0VORVJBVEVfRklMRV9OQU1FUygpOworICAgIENSRUFURV9EVU1QX0ZJTEUobUluRmlsZSk7Cit9CisKK0MyU29mdEF2Y0RlYzo6fkMyU29mdEF2Y0RlYygpIHsKKyAgICBvblJlbGVhc2UoKTsKK30KKworYzJfc3RhdHVzX3QgQzJTb2Z0QXZjRGVjOjpvbkluaXQoKSB7CisgICAgc3RhdHVzX3QgZXJyID0gaW5pdERlY29kZXIoKTsKKyAgICByZXR1cm4gZXJyID09IE9LID8gQzJfT0sgOiBDMl9DT1JSVVBURUQ7Cit9CisKK2MyX3N0YXR1c190IEMyU29mdEF2Y0RlYzo6b25TdG9wKCkgeworICAgIGlmIChPSyAhPSByZXNldERlY29kZXIoKSkgcmV0dXJuIEMyX0NPUlJVUFRFRDsKKyAgICByZXNldFBsdWdpbigpOworICAgIHJldHVybiBDMl9PSzsKK30KKwordm9pZCBDMlNvZnRBdmNEZWM6Om9uUmVzZXQoKSB7CisgICAgKHZvaWQpIG9uU3RvcCgpOworfQorCit2b2lkIEMyU29mdEF2Y0RlYzo6b25SZWxlYXNlKCkgeworICAgICh2b2lkKSBkZWxldGVEZWNvZGVyKCk7CisgICAgaWYgKG1PdXRCdWZmZXJGbHVzaCkgeworICAgICAgICBpdmRfYWxpZ25lZF9mcmVlKG51bGxwdHIsIG1PdXRCdWZmZXJGbHVzaCk7CisgICAgICAgIG1PdXRCdWZmZXJGbHVzaCA9IG51bGxwdHI7CisgICAgfQorICAgIGlmIChtT3V0QmxvY2spIHsKKyAgICAgICAgbU91dEJsb2NrLnJlc2V0KCk7CisgICAgfQorfQorCitjMl9zdGF0dXNfdCBDMlNvZnRBdmNEZWM6Om9uRmx1c2hfc20oKSB7CisgICAgaWYgKE9LICE9IHNldEZsdXNoTW9kZSgpKSByZXR1cm4gQzJfQ09SUlVQVEVEOworCisgICAgdWludDMyX3QgYnVmZmVyU2l6ZSA9IG1TdHJpZGUgKiBtSGVpZ2h0ICogMyAvIDI7CisgICAgbU91dEJ1ZmZlckZsdXNoID0gKHVpbnQ4X3QgKilpdmRfYWxpZ25lZF9tYWxsb2MobnVsbHB0ciwgMTI4LCBidWZmZXJTaXplKTsKKyAgICBpZiAoIW1PdXRCdWZmZXJGbHVzaCkgeworICAgICAgICBBTE9HRSgiY291bGQgbm90IGFsbG9jYXRlIHRtcCBvdXRwdXQgYnVmZmVyIChmb3IgZmx1c2gpIG9mIHNpemUgJXUgIiwgYnVmZmVyU2l6ZSk7CisgICAgICAgIHJldHVybiBDMl9OT19NRU1PUlk7CisgICAgfQorCisgICAgd2hpbGUgKHRydWUpIHsKKyAgICAgICAgaXZkX3ZpZGVvX2RlY29kZV9pcF90IHNfZGVjb2RlX2lwOworICAgICAgICBpdmRfdmlkZW9fZGVjb2RlX29wX3Qgc19kZWNvZGVfb3A7CisKKyAgICAgICAgc2V0RGVjb2RlQXJncygmc19kZWNvZGVfaXAsICZzX2RlY29kZV9vcCwgbnVsbHB0ciwgbnVsbHB0ciwgMCwgMCwgMCk7CisgICAgICAgICh2b2lkKSBpdmRlY19hcGlfZnVuY3Rpb24obURlY0hhbmRsZSwgJnNfZGVjb2RlX2lwLCAmc19kZWNvZGVfb3ApOworICAgICAgICBpZiAoMCA9PSBzX2RlY29kZV9vcC51NF9vdXRwdXRfcHJlc2VudCkgeworICAgICAgICAgICAgcmVzZXRQbHVnaW4oKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgfQorCisgICAgaWYgKG1PdXRCdWZmZXJGbHVzaCkgeworICAgICAgICBpdmRfYWxpZ25lZF9mcmVlKG51bGxwdHIsIG1PdXRCdWZmZXJGbHVzaCk7CisgICAgICAgIG1PdXRCdWZmZXJGbHVzaCA9IG51bGxwdHI7CisgICAgfQorCisgICAgcmV0dXJuIEMyX09LOworfQorCitzdGF0dXNfdCBDMlNvZnRBdmNEZWM6OmNyZWF0ZURlY29kZXIoKSB7CisgICAgaXZkZXh0X2NyZWF0ZV9pcF90IHNfY3JlYXRlX2lwOworICAgIGl2ZGV4dF9jcmVhdGVfb3BfdCBzX2NyZWF0ZV9vcDsKKworICAgIHNfY3JlYXRlX2lwLnNfaXZkX2NyZWF0ZV9pcF90LnU0X3NpemUgPSBzaXplb2YoaXZkZXh0X2NyZWF0ZV9pcF90KTsKKyAgICBzX2NyZWF0ZV9pcC5zX2l2ZF9jcmVhdGVfaXBfdC5lX2NtZCA9IElWRF9DTURfQ1JFQVRFOworICAgIHNfY3JlYXRlX2lwLnNfaXZkX2NyZWF0ZV9pcF90LnU0X3NoYXJlX2Rpc3BfYnVmID0gMDsKKyAgICBzX2NyZWF0ZV9pcC5zX2l2ZF9jcmVhdGVfaXBfdC5lX291dHB1dF9mb3JtYXQgPSBtSXZDb2xvckZvcm1hdDsKKyAgICBzX2NyZWF0ZV9pcC5zX2l2ZF9jcmVhdGVfaXBfdC5wZl9hbGlnbmVkX2FsbG9jID0gaXZkX2FsaWduZWRfbWFsbG9jOworICAgIHNfY3JlYXRlX2lwLnNfaXZkX2NyZWF0ZV9pcF90LnBmX2FsaWduZWRfZnJlZSA9IGl2ZF9hbGlnbmVkX2ZyZWU7CisgICAgc19jcmVhdGVfaXAuc19pdmRfY3JlYXRlX2lwX3QucHZfbWVtX2N0eHQgPSBudWxscHRyOworICAgIHNfY3JlYXRlX29wLnNfaXZkX2NyZWF0ZV9vcF90LnU0X3NpemUgPSBzaXplb2YoaXZkZXh0X2NyZWF0ZV9vcF90KTsKKyAgICBJVl9BUElfQ0FMTF9TVEFUVVNfVCBzdGF0dXMgPSBpdmRlY19hcGlfZnVuY3Rpb24obnVsbHB0ciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnNfY3JlYXRlX2lwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmc19jcmVhdGVfb3ApOworICAgIGlmIChzdGF0dXMgIT0gSVZfU1VDQ0VTUykgeworICAgICAgICBBTE9HRSgiZXJyb3IgaW4gJXM6IDB4JXgiLCBfX2Z1bmNfXywKKyAgICAgICAgICAgICAgc19jcmVhdGVfb3Auc19pdmRfY3JlYXRlX29wX3QudTRfZXJyb3JfY29kZSk7CisgICAgICAgIHJldHVybiBVTktOT1dOX0VSUk9SOworICAgIH0KKyAgICBtRGVjSGFuZGxlID0gKGl2X29ial90KilzX2NyZWF0ZV9vcC5zX2l2ZF9jcmVhdGVfb3BfdC5wdl9oYW5kbGU7CisgICAgbURlY0hhbmRsZS0+cHZfZnhucyA9ICh2b2lkICopaXZkZWNfYXBpX2Z1bmN0aW9uOworICAgIG1EZWNIYW5kbGUtPnU0X3NpemUgPSBzaXplb2YoaXZfb2JqX3QpOworCisgICAgcmV0dXJuIE9LOworfQorCitzdGF0dXNfdCBDMlNvZnRBdmNEZWM6OnNldE51bUNvcmVzKCkgeworICAgIGl2ZGV4dF9jdGxfc2V0X251bV9jb3Jlc19pcF90IHNfc2V0X251bV9jb3Jlc19pcDsKKyAgICBpdmRleHRfY3RsX3NldF9udW1fY29yZXNfb3BfdCBzX3NldF9udW1fY29yZXNfb3A7CisKKyAgICBzX3NldF9udW1fY29yZXNfaXAudTRfc2l6ZSA9IHNpemVvZihpdmRleHRfY3RsX3NldF9udW1fY29yZXNfaXBfdCk7CisgICAgc19zZXRfbnVtX2NvcmVzX2lwLmVfY21kID0gSVZEX0NNRF9WSURFT19DVEw7CisgICAgc19zZXRfbnVtX2NvcmVzX2lwLmVfc3ViX2NtZCA9IElWREVYVF9DTURfQ1RMX1NFVF9OVU1fQ09SRVM7CisgICAgc19zZXRfbnVtX2NvcmVzX2lwLnU0X251bV9jb3JlcyA9IG1OdW1Db3JlczsKKyAgICBzX3NldF9udW1fY29yZXNfb3AudTRfc2l6ZSA9IHNpemVvZihpdmRleHRfY3RsX3NldF9udW1fY29yZXNfb3BfdCk7CisgICAgSVZfQVBJX0NBTExfU1RBVFVTX1Qgc3RhdHVzID0gaXZkZWNfYXBpX2Z1bmN0aW9uKG1EZWNIYW5kbGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZzX3NldF9udW1fY29yZXNfaXAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZzX3NldF9udW1fY29yZXNfb3ApOworICAgIGlmIChJVl9TVUNDRVNTICE9IHN0YXR1cykgeworICAgICAgICBBTE9HRCgiZXJyb3IgaW4gJXM6IDB4JXgiLCBfX2Z1bmNfXywgc19zZXRfbnVtX2NvcmVzX29wLnU0X2Vycm9yX2NvZGUpOworICAgICAgICByZXR1cm4gVU5LTk9XTl9FUlJPUjsKKyAgICB9CisKKyAgICByZXR1cm4gT0s7Cit9CisKK3N0YXR1c190IEMyU29mdEF2Y0RlYzo6c2V0UGFyYW1zKHNpemVfdCBzdHJpZGUsIElWRF9WSURFT19ERUNPREVfTU9ERV9UIGRlY19tb2RlKSB7CisgICAgaXZkX2N0bF9zZXRfY29uZmlnX2lwX3Qgc19zZXRfZHluX3BhcmFtc19pcDsKKyAgICBpdmRfY3RsX3NldF9jb25maWdfb3BfdCBzX3NldF9keW5fcGFyYW1zX29wOworCisgICAgc19zZXRfZHluX3BhcmFtc19pcC51NF9zaXplID0gc2l6ZW9mKGl2ZF9jdGxfc2V0X2NvbmZpZ19pcF90KTsKKyAgICBzX3NldF9keW5fcGFyYW1zX2lwLmVfY21kID0gSVZEX0NNRF9WSURFT19DVEw7CisgICAgc19zZXRfZHluX3BhcmFtc19pcC5lX3N1Yl9jbWQgPSBJVkRfQ01EX0NUTF9TRVRQQVJBTVM7CisgICAgc19zZXRfZHluX3BhcmFtc19pcC51NF9kaXNwX3dkID0gKFVXT1JEMzIpIHN0cmlkZTsKKyAgICBzX3NldF9keW5fcGFyYW1zX2lwLmVfZnJtX3NraXBfbW9kZSA9IElWRF9TS0lQX05PTkU7CisgICAgc19zZXRfZHluX3BhcmFtc19pcC5lX2ZybV9vdXRfbW9kZSA9IElWRF9ESVNQTEFZX0ZSQU1FX09VVDsKKyAgICBzX3NldF9keW5fcGFyYW1zX2lwLmVfdmlkX2RlY19tb2RlID0gZGVjX21vZGU7CisgICAgc19zZXRfZHluX3BhcmFtc19vcC51NF9zaXplID0gc2l6ZW9mKGl2ZF9jdGxfc2V0X2NvbmZpZ19vcF90KTsKKyAgICBJVl9BUElfQ0FMTF9TVEFUVVNfVCBzdGF0dXMgPSBpdmRlY19hcGlfZnVuY3Rpb24obURlY0hhbmRsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnNfc2V0X2R5bl9wYXJhbXNfaXAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZzX3NldF9keW5fcGFyYW1zX29wKTsKKyAgICBpZiAoc3RhdHVzICE9IElWX1NVQ0NFU1MpIHsKKyAgICAgICAgQUxPR0UoImVycm9yIGluICVzOiAweCV4IiwgX19mdW5jX18sIHNfc2V0X2R5bl9wYXJhbXNfb3AudTRfZXJyb3JfY29kZSk7CisgICAgICAgIHJldHVybiBVTktOT1dOX0VSUk9SOworICAgIH0KKworICAgIHJldHVybiBPSzsKK30KKwordm9pZCBDMlNvZnRBdmNEZWM6OmdldFZlcnNpb24oKSB7CisgICAgaXZkX2N0bF9nZXR2ZXJzaW9uaW5mb19pcF90IHNfZ2V0X3ZlcnNpb25pbmZvX2lwOworICAgIGl2ZF9jdGxfZ2V0dmVyc2lvbmluZm9fb3BfdCBzX2dldF92ZXJzaW9uaW5mb19vcDsKKyAgICBVV09SRDggYXUxX2J1Zls1MTJdOworCisgICAgc19nZXRfdmVyc2lvbmluZm9faXAudTRfc2l6ZSA9IHNpemVvZihpdmRfY3RsX2dldHZlcnNpb25pbmZvX2lwX3QpOworICAgIHNfZ2V0X3ZlcnNpb25pbmZvX2lwLmVfY21kID0gSVZEX0NNRF9WSURFT19DVEw7CisgICAgc19nZXRfdmVyc2lvbmluZm9faXAuZV9zdWJfY21kID0gSVZEX0NNRF9DVExfR0VUVkVSU0lPTjsKKyAgICBzX2dldF92ZXJzaW9uaW5mb19pcC5wdl92ZXJzaW9uX2J1ZmZlciA9IGF1MV9idWY7CisgICAgc19nZXRfdmVyc2lvbmluZm9faXAudTRfdmVyc2lvbl9idWZmZXJfc2l6ZSA9IHNpemVvZihhdTFfYnVmKTsKKyAgICBzX2dldF92ZXJzaW9uaW5mb19vcC51NF9zaXplID0gc2l6ZW9mKGl2ZF9jdGxfZ2V0dmVyc2lvbmluZm9fb3BfdCk7CisgICAgSVZfQVBJX0NBTExfU1RBVFVTX1Qgc3RhdHVzID0gaXZkZWNfYXBpX2Z1bmN0aW9uKG1EZWNIYW5kbGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZzX2dldF92ZXJzaW9uaW5mb19pcCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnNfZ2V0X3ZlcnNpb25pbmZvX29wKTsKKyAgICBpZiAoc3RhdHVzICE9IElWX1NVQ0NFU1MpIHsKKyAgICAgICAgQUxPR0QoImVycm9yIGluICVzOiAweCV4IiwgX19mdW5jX18sCisgICAgICAgICAgICAgIHNfZ2V0X3ZlcnNpb25pbmZvX29wLnU0X2Vycm9yX2NvZGUpOworICAgIH0gZWxzZSB7CisgICAgICAgIEFMT0dWKCJpdHRpYW0gZGVjb2RlciB2ZXJzaW9uIG51bWJlcjogJXMiLAorICAgICAgICAgICAgICAoY2hhciAqKSBzX2dldF92ZXJzaW9uaW5mb19pcC5wdl92ZXJzaW9uX2J1ZmZlcik7CisgICAgfQorfQorCitzdGF0dXNfdCBDMlNvZnRBdmNEZWM6OmluaXREZWNvZGVyKCkgeworICAgIGlmIChPSyAhPSBjcmVhdGVEZWNvZGVyKCkpIHJldHVybiBVTktOT1dOX0VSUk9SOworICAgIG1OdW1Db3JlcyA9IE1JTihnZXRDcHVDb3JlQ291bnQoKSwgTUFYX05VTV9DT1JFUyk7CisgICAgbVN0cmlkZSA9IEFMSUdONjQobVdpZHRoKTsKKyAgICBtU2lnbmFsbGVkRXJyb3IgPSBmYWxzZTsKKyAgICByZXNldFBsdWdpbigpOworICAgICh2b2lkKSBzZXROdW1Db3JlcygpOworICAgIGlmIChPSyAhPSBzZXRQYXJhbXMobVN0cmlkZSwgSVZEX0RFQ09ERV9GUkFNRSkpIHJldHVybiBVTktOT1dOX0VSUk9SOworICAgICh2b2lkKSBnZXRWZXJzaW9uKCk7CisKKyAgICByZXR1cm4gT0s7Cit9CisKK2Jvb2wgQzJTb2Z0QXZjRGVjOjpzZXREZWNvZGVBcmdzKGl2ZF92aWRlb19kZWNvZGVfaXBfdCAqcHNfZGVjb2RlX2lwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXZkX3ZpZGVvX2RlY29kZV9vcF90ICpwc19kZWNvZGVfb3AsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDMlJlYWRWaWV3ICppbkJ1ZmZlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEMyR3JhcGhpY1ZpZXcgKm91dEJ1ZmZlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBpbk9mZnNldCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBpblNpemUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCB0c01hcmtlcikgeworICAgIHVpbnQzMl90IGRpc3BsYXlTdHJpZGUgPSBtU3RyaWRlOworICAgIHVpbnQzMl90IGRpc3BsYXlIZWlnaHQgPSBtSGVpZ2h0OworICAgIHNpemVfdCBsdW1hU2l6ZSA9IGRpc3BsYXlTdHJpZGUgKiBkaXNwbGF5SGVpZ2h0OworICAgIHNpemVfdCBjaHJvbWFTaXplID0gbHVtYVNpemUgPj4gMjsKKworICAgIHBzX2RlY29kZV9pcC0+dTRfc2l6ZSA9IHNpemVvZihpdmRfdmlkZW9fZGVjb2RlX2lwX3QpOworICAgIHBzX2RlY29kZV9pcC0+ZV9jbWQgPSBJVkRfQ01EX1ZJREVPX0RFQ09ERTsKKyAgICBpZiAoaW5CdWZmZXIpIHsKKyAgICAgICAgcHNfZGVjb2RlX2lwLT51NF90cyA9IHRzTWFya2VyOworICAgICAgICBwc19kZWNvZGVfaXAtPnB2X3N0cmVhbV9idWZmZXIgPSBjb25zdF9jYXN0PHVpbnQ4X3QgKj4oaW5CdWZmZXItPmRhdGEoKSArIGluT2Zmc2V0KTsKKyAgICAgICAgcHNfZGVjb2RlX2lwLT51NF9udW1fQnl0ZXMgPSBpblNpemU7CisgICAgfSBlbHNlIHsKKyAgICAgICAgcHNfZGVjb2RlX2lwLT51NF90cyA9IDA7CisgICAgICAgIHBzX2RlY29kZV9pcC0+cHZfc3RyZWFtX2J1ZmZlciA9IG51bGxwdHI7CisgICAgICAgIHBzX2RlY29kZV9pcC0+dTRfbnVtX0J5dGVzID0gMDsKKyAgICB9CisgICAgcHNfZGVjb2RlX2lwLT5zX291dF9idWZmZXIudTRfbWluX291dF9idWZfc2l6ZVswXSA9IGx1bWFTaXplOworICAgIHBzX2RlY29kZV9pcC0+c19vdXRfYnVmZmVyLnU0X21pbl9vdXRfYnVmX3NpemVbMV0gPSBjaHJvbWFTaXplOworICAgIHBzX2RlY29kZV9pcC0+c19vdXRfYnVmZmVyLnU0X21pbl9vdXRfYnVmX3NpemVbMl0gPSBjaHJvbWFTaXplOworICAgIGlmIChvdXRCdWZmZXIpIHsKKyAgICAgICAgaWYgKG91dEJ1ZmZlci0+d2lkdGgoKSA8IGRpc3BsYXlTdHJpZGUgfHwgb3V0QnVmZmVyLT5oZWlnaHQoKSA8IGRpc3BsYXlIZWlnaHQpIHsKKyAgICAgICAgICAgIEFMT0dFKCJPdXRwdXQgYnVmZmVyIHRvbyBzbWFsbDogcHJvdmlkZWQgKCVkeCVkKSByZXF1aXJlZCAoJXV4JXUpIiwKKyAgICAgICAgICAgICAgICAgIG91dEJ1ZmZlci0+d2lkdGgoKSwgb3V0QnVmZmVyLT5oZWlnaHQoKSwgZGlzcGxheVN0cmlkZSwgZGlzcGxheUhlaWdodCk7CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICAgICAgcHNfZGVjb2RlX2lwLT5zX291dF9idWZmZXIucHUxX2J1ZnNbMF0gPSBvdXRCdWZmZXItPmRhdGEoKVtDMlBsYW5hckxheW91dDo6UExBTkVfWV07CisgICAgICAgIHBzX2RlY29kZV9pcC0+c19vdXRfYnVmZmVyLnB1MV9idWZzWzFdID0gb3V0QnVmZmVyLT5kYXRhKClbQzJQbGFuYXJMYXlvdXQ6OlBMQU5FX1VdOworICAgICAgICBwc19kZWNvZGVfaXAtPnNfb3V0X2J1ZmZlci5wdTFfYnVmc1syXSA9IG91dEJ1ZmZlci0+ZGF0YSgpW0MyUGxhbmFyTGF5b3V0OjpQTEFORV9WXTsKKyAgICB9IGVsc2UgeworICAgICAgICBwc19kZWNvZGVfaXAtPnNfb3V0X2J1ZmZlci5wdTFfYnVmc1swXSA9IG1PdXRCdWZmZXJGbHVzaDsKKyAgICAgICAgcHNfZGVjb2RlX2lwLT5zX291dF9idWZmZXIucHUxX2J1ZnNbMV0gPSBtT3V0QnVmZmVyRmx1c2ggKyBsdW1hU2l6ZTsKKyAgICAgICAgcHNfZGVjb2RlX2lwLT5zX291dF9idWZmZXIucHUxX2J1ZnNbMl0gPSBtT3V0QnVmZmVyRmx1c2ggKyBsdW1hU2l6ZSArIGNocm9tYVNpemU7CisgICAgfQorICAgIHBzX2RlY29kZV9pcC0+c19vdXRfYnVmZmVyLnU0X251bV9idWZzID0gMzsKKyAgICBwc19kZWNvZGVfb3AtPnU0X3NpemUgPSBzaXplb2YoaXZkX3ZpZGVvX2RlY29kZV9vcF90KTsKKworICAgIHJldHVybiB0cnVlOworfQorCitib29sIEMyU29mdEF2Y0RlYzo6Z2V0VnVpUGFyYW1zKCkgeworICAgIGl2ZGV4dF9jdGxfZ2V0X3Z1aV9wYXJhbXNfaXBfdCBzX2dldF92dWlfcGFyYW1zX2lwOworICAgIGl2ZGV4dF9jdGxfZ2V0X3Z1aV9wYXJhbXNfb3BfdCBzX2dldF92dWlfcGFyYW1zX29wOworCisgICAgc19nZXRfdnVpX3BhcmFtc19pcC51NF9zaXplID0gc2l6ZW9mKGl2ZGV4dF9jdGxfZ2V0X3Z1aV9wYXJhbXNfaXBfdCk7CisgICAgc19nZXRfdnVpX3BhcmFtc19pcC5lX2NtZCA9IElWRF9DTURfVklERU9fQ1RMOworICAgIHNfZ2V0X3Z1aV9wYXJhbXNfaXAuZV9zdWJfY21kID0KKyAgICAgICAgICAgIChJVkRfQ09OVFJPTF9BUElfQ09NTUFORF9UWVBFX1QpIElIMjY0RF9DTURfQ1RMX0dFVF9WVUlfUEFSQU1TOworICAgIHNfZ2V0X3Z1aV9wYXJhbXNfb3AudTRfc2l6ZSA9IHNpemVvZihpdmRleHRfY3RsX2dldF92dWlfcGFyYW1zX29wX3QpOworICAgIElWX0FQSV9DQUxMX1NUQVRVU19UIHN0YXR1cyA9IGl2ZGVjX2FwaV9mdW5jdGlvbihtRGVjSGFuZGxlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmc19nZXRfdnVpX3BhcmFtc19pcCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnNfZ2V0X3Z1aV9wYXJhbXNfb3ApOworICAgIGlmIChzdGF0dXMgIT0gSVZfU1VDQ0VTUykgeworICAgICAgICBBTE9HRCgiZXJyb3IgaW4gJXM6IDB4JXgiLCBfX2Z1bmNfXywgc19nZXRfdnVpX3BhcmFtc19vcC51NF9lcnJvcl9jb2RlKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIFZ1aUNvbG9yQXNwZWN0cyB2dWlDb2xvckFzcGVjdHM7CisgICAgdnVpQ29sb3JBc3BlY3RzLnByaW1hcmllcyA9IHNfZ2V0X3Z1aV9wYXJhbXNfb3AudTFfY29sb3VyX3ByaW1hcmllczsKKyAgICB2dWlDb2xvckFzcGVjdHMudHJhbnNmZXIgPSBzX2dldF92dWlfcGFyYW1zX29wLnUxX3Rmcl9jaGFyczsKKyAgICB2dWlDb2xvckFzcGVjdHMuY29lZmZzID0gc19nZXRfdnVpX3BhcmFtc19vcC51MV9tYXRyaXhfY29lZmZzOworICAgIHZ1aUNvbG9yQXNwZWN0cy5mdWxsUmFuZ2UgPSBzX2dldF92dWlfcGFyYW1zX29wLnUxX3ZpZGVvX2Z1bGxfcmFuZ2VfZmxhZzsKKworICAgIC8vIGNvbnZlcnQgdnVpIGFzcGVjdHMgdG8gQzIgdmFsdWVzIGlmIGNoYW5nZWQKKyAgICBpZiAoISh2dWlDb2xvckFzcGVjdHMgPT0gbUJpdHN0cmVhbUNvbG9yQXNwZWN0cykpIHsKKyAgICAgICAgbUJpdHN0cmVhbUNvbG9yQXNwZWN0cyA9IHZ1aUNvbG9yQXNwZWN0czsKKyAgICAgICAgQ29sb3JBc3BlY3RzIHNmQXNwZWN0czsKKyAgICAgICAgQzJTdHJlYW1Db2xvckFzcGVjdHNJbmZvOjppbnB1dCBjb2RlZEFzcGVjdHMgPSB7IDB1IH07CisgICAgICAgIENvbG9yVXRpbHM6OmNvbnZlcnRJc29Db2xvckFzcGVjdHNUb0NvZGVjQXNwZWN0cygKKyAgICAgICAgICAgICAgICB2dWlDb2xvckFzcGVjdHMucHJpbWFyaWVzLCB2dWlDb2xvckFzcGVjdHMudHJhbnNmZXIsIHZ1aUNvbG9yQXNwZWN0cy5jb2VmZnMsCisgICAgICAgICAgICAgICAgdnVpQ29sb3JBc3BlY3RzLmZ1bGxSYW5nZSwgc2ZBc3BlY3RzKTsKKyAgICAgICAgaWYgKCFDMk1hcHBlcjo6bWFwKHNmQXNwZWN0cy5tUHJpbWFyaWVzLCAmY29kZWRBc3BlY3RzLnByaW1hcmllcykpIHsKKyAgICAgICAgICAgIGNvZGVkQXNwZWN0cy5wcmltYXJpZXMgPSBDMkNvbG9yOjpQUklNQVJJRVNfVU5TUEVDSUZJRUQ7CisgICAgICAgIH0KKyAgICAgICAgaWYgKCFDMk1hcHBlcjo6bWFwKHNmQXNwZWN0cy5tUmFuZ2UsICZjb2RlZEFzcGVjdHMucmFuZ2UpKSB7CisgICAgICAgICAgICBjb2RlZEFzcGVjdHMucmFuZ2UgPSBDMkNvbG9yOjpSQU5HRV9VTlNQRUNJRklFRDsKKyAgICAgICAgfQorICAgICAgICBpZiAoIUMyTWFwcGVyOjptYXAoc2ZBc3BlY3RzLm1NYXRyaXhDb2VmZnMsICZjb2RlZEFzcGVjdHMubWF0cml4KSkgeworICAgICAgICAgICAgY29kZWRBc3BlY3RzLm1hdHJpeCA9IEMyQ29sb3I6Ok1BVFJJWF9VTlNQRUNJRklFRDsKKyAgICAgICAgfQorICAgICAgICBpZiAoIUMyTWFwcGVyOjptYXAoc2ZBc3BlY3RzLm1UcmFuc2ZlciwgJmNvZGVkQXNwZWN0cy50cmFuc2ZlcikpIHsKKyAgICAgICAgICAgIGNvZGVkQXNwZWN0cy50cmFuc2ZlciA9IEMyQ29sb3I6OlRSQU5TRkVSX1VOU1BFQ0lGSUVEOworICAgICAgICB9CisgICAgICAgIHN0ZDo6dmVjdG9yPHN0ZDo6dW5pcXVlX3B0cjxDMlNldHRpbmdSZXN1bHQ+PiBmYWlsdXJlczsKKyAgICAgICAgKHZvaWQpbUludGYtPmNvbmZpZyh7JmNvZGVkQXNwZWN0c30sIEMyX01BWV9CTE9DSywgJmZhaWx1cmVzKTsKKyAgICB9CisgICAgcmV0dXJuIHRydWU7Cit9CisKK3N0YXR1c190IEMyU29mdEF2Y0RlYzo6c2V0Rmx1c2hNb2RlKCkgeworICAgIGl2ZF9jdGxfZmx1c2hfaXBfdCBzX3NldF9mbHVzaF9pcDsKKyAgICBpdmRfY3RsX2ZsdXNoX29wX3Qgc19zZXRfZmx1c2hfb3A7CisKKyAgICBzX3NldF9mbHVzaF9pcC51NF9zaXplID0gc2l6ZW9mKGl2ZF9jdGxfZmx1c2hfaXBfdCk7CisgICAgc19zZXRfZmx1c2hfaXAuZV9jbWQgPSBJVkRfQ01EX1ZJREVPX0NUTDsKKyAgICBzX3NldF9mbHVzaF9pcC5lX3N1Yl9jbWQgPSBJVkRfQ01EX0NUTF9GTFVTSDsKKyAgICBzX3NldF9mbHVzaF9vcC51NF9zaXplID0gc2l6ZW9mKGl2ZF9jdGxfZmx1c2hfb3BfdCk7CisgICAgSVZfQVBJX0NBTExfU1RBVFVTX1Qgc3RhdHVzID0gaXZkZWNfYXBpX2Z1bmN0aW9uKG1EZWNIYW5kbGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZzX3NldF9mbHVzaF9pcCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnNfc2V0X2ZsdXNoX29wKTsKKyAgICBpZiAoc3RhdHVzICE9IElWX1NVQ0NFU1MpIHsKKyAgICAgICAgQUxPR0UoImVycm9yIGluICVzOiAweCV4IiwgX19mdW5jX18sIHNfc2V0X2ZsdXNoX29wLnU0X2Vycm9yX2NvZGUpOworICAgICAgICByZXR1cm4gVU5LTk9XTl9FUlJPUjsKKyAgICB9CisKKyAgICByZXR1cm4gT0s7Cit9CisKK3N0YXR1c190IEMyU29mdEF2Y0RlYzo6cmVzZXREZWNvZGVyKCkgeworICAgIGl2ZF9jdGxfcmVzZXRfaXBfdCBzX3Jlc2V0X2lwOworICAgIGl2ZF9jdGxfcmVzZXRfb3BfdCBzX3Jlc2V0X29wOworCisgICAgc19yZXNldF9pcC51NF9zaXplID0gc2l6ZW9mKGl2ZF9jdGxfcmVzZXRfaXBfdCk7CisgICAgc19yZXNldF9pcC5lX2NtZCA9IElWRF9DTURfVklERU9fQ1RMOworICAgIHNfcmVzZXRfaXAuZV9zdWJfY21kID0gSVZEX0NNRF9DVExfUkVTRVQ7CisgICAgc19yZXNldF9vcC51NF9zaXplID0gc2l6ZW9mKGl2ZF9jdGxfcmVzZXRfb3BfdCk7CisgICAgSVZfQVBJX0NBTExfU1RBVFVTX1Qgc3RhdHVzID0gaXZkZWNfYXBpX2Z1bmN0aW9uKG1EZWNIYW5kbGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZzX3Jlc2V0X2lwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmc19yZXNldF9vcCk7CisgICAgaWYgKElWX1NVQ0NFU1MgIT0gc3RhdHVzKSB7CisgICAgICAgIEFMT0dFKCJlcnJvciBpbiAlczogMHgleCIsIF9fZnVuY19fLCBzX3Jlc2V0X29wLnU0X2Vycm9yX2NvZGUpOworICAgICAgICByZXR1cm4gVU5LTk9XTl9FUlJPUjsKKyAgICB9CisgICAgbVN0cmlkZSA9IDA7CisgICAgKHZvaWQpIHNldE51bUNvcmVzKCk7CisgICAgbVNpZ25hbGxlZEVycm9yID0gZmFsc2U7CisgICAgbUhlYWRlckRlY29kZWQgPSBmYWxzZTsKKworICAgIHJldHVybiBPSzsKK30KKwordm9pZCBDMlNvZnRBdmNEZWM6OnJlc2V0UGx1Z2luKCkgeworICAgIG1TaWduYWxsZWRPdXRwdXRFb3MgPSBmYWxzZTsKKyAgICBnZXR0aW1lb2ZkYXkoJm1UaW1lU3RhcnQsIG51bGxwdHIpOworICAgIGdldHRpbWVvZmRheSgmbVRpbWVFbmQsIG51bGxwdHIpOworfQorCitzdGF0dXNfdCBDMlNvZnRBdmNEZWM6OmRlbGV0ZURlY29kZXIoKSB7CisgICAgaWYgKG1EZWNIYW5kbGUpIHsKKyAgICAgICAgaXZkZXh0X2RlbGV0ZV9pcF90IHNfZGVsZXRlX2lwOworICAgICAgICBpdmRleHRfZGVsZXRlX29wX3Qgc19kZWxldGVfb3A7CisKKyAgICAgICAgc19kZWxldGVfaXAuc19pdmRfZGVsZXRlX2lwX3QudTRfc2l6ZSA9IHNpemVvZihpdmRleHRfZGVsZXRlX2lwX3QpOworICAgICAgICBzX2RlbGV0ZV9pcC5zX2l2ZF9kZWxldGVfaXBfdC5lX2NtZCA9IElWRF9DTURfREVMRVRFOworICAgICAgICBzX2RlbGV0ZV9vcC5zX2l2ZF9kZWxldGVfb3BfdC51NF9zaXplID0gc2l6ZW9mKGl2ZGV4dF9kZWxldGVfb3BfdCk7CisgICAgICAgIElWX0FQSV9DQUxMX1NUQVRVU19UIHN0YXR1cyA9IGl2ZGVjX2FwaV9mdW5jdGlvbihtRGVjSGFuZGxlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnNfZGVsZXRlX2lwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnNfZGVsZXRlX29wKTsKKyAgICAgICAgaWYgKHN0YXR1cyAhPSBJVl9TVUNDRVNTKSB7CisgICAgICAgICAgICBBTE9HRSgiZXJyb3IgaW4gJXM6IDB4JXgiLCBfX2Z1bmNfXywKKyAgICAgICAgICAgICAgICAgIHNfZGVsZXRlX29wLnNfaXZkX2RlbGV0ZV9vcF90LnU0X2Vycm9yX2NvZGUpOworICAgICAgICAgICAgcmV0dXJuIFVOS05PV05fRVJST1I7CisgICAgICAgIH0KKyAgICAgICAgbURlY0hhbmRsZSA9IG51bGxwdHI7CisgICAgfQorCisgICAgcmV0dXJuIE9LOworfQorCitzdGF0aWMgdm9pZCBmaWxsRW1wdHlXb3JrKGNvbnN0IHN0ZDo6dW5pcXVlX3B0cjxDMldvcms+ICZ3b3JrKSB7CisgICAgdWludDMyX3QgZmxhZ3MgPSAwOworICAgIGlmICh3b3JrLT5pbnB1dC5mbGFncyAmIEMyRnJhbWVEYXRhOjpGTEFHX0VORF9PRl9TVFJFQU0pIHsKKyAgICAgICAgZmxhZ3MgfD0gQzJGcmFtZURhdGE6OkZMQUdfRU5EX09GX1NUUkVBTTsKKyAgICAgICAgQUxPR1YoInNpZ25hbGxpbmcgZW9zIik7CisgICAgfQorICAgIHdvcmstPndvcmtsZXRzLmZyb250KCktPm91dHB1dC5mbGFncyA9IChDMkZyYW1lRGF0YTo6ZmxhZ3NfdClmbGFnczsKKyAgICB3b3JrLT53b3JrbGV0cy5mcm9udCgpLT5vdXRwdXQuYnVmZmVycy5jbGVhcigpOworICAgIHdvcmstPndvcmtsZXRzLmZyb250KCktPm91dHB1dC5vcmRpbmFsID0gd29yay0+aW5wdXQub3JkaW5hbDsKKyAgICB3b3JrLT53b3JrbGV0c1Byb2Nlc3NlZCA9IDF1OworfQorCit2b2lkIEMyU29mdEF2Y0RlYzo6ZmluaXNoV29yayh1aW50NjRfdCBpbmRleCwgY29uc3Qgc3RkOjp1bmlxdWVfcHRyPEMyV29yaz4gJndvcmspIHsKKyAgICBzdGQ6OnNoYXJlZF9wdHI8QzJCdWZmZXI+IGJ1ZmZlciA9IGNyZWF0ZUdyYXBoaWNCdWZmZXIoc3RkOjptb3ZlKG1PdXRCbG9jayksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEMyUmVjdChtV2lkdGgsIG1IZWlnaHQpKTsKKyAgICBtT3V0QmxvY2sgPSBudWxscHRyOworICAgIHsKKyAgICAgICAgSW50ZkltcGw6OkxvY2sgbG9jayA9IG1JbnRmLT5sb2NrKCk7CisgICAgICAgIGJ1ZmZlci0+c2V0SW5mbyhtSW50Zi0+Z2V0Q29sb3JBc3BlY3RzX2woKSk7CisgICAgfQorCisgICAgYXV0byBmaWxsV29yayA9IFtidWZmZXJdKGNvbnN0IHN0ZDo6dW5pcXVlX3B0cjxDMldvcms+ICZ3b3JrKSB7CisgICAgICAgIHdvcmstPndvcmtsZXRzLmZyb250KCktPm91dHB1dC5mbGFncyA9IChDMkZyYW1lRGF0YTo6ZmxhZ3NfdCkwOworICAgICAgICB3b3JrLT53b3JrbGV0cy5mcm9udCgpLT5vdXRwdXQuYnVmZmVycy5jbGVhcigpOworICAgICAgICB3b3JrLT53b3JrbGV0cy5mcm9udCgpLT5vdXRwdXQuYnVmZmVycy5wdXNoX2JhY2soYnVmZmVyKTsKKyAgICAgICAgd29yay0+d29ya2xldHMuZnJvbnQoKS0+b3V0cHV0Lm9yZGluYWwgPSB3b3JrLT5pbnB1dC5vcmRpbmFsOworICAgICAgICB3b3JrLT53b3JrbGV0c1Byb2Nlc3NlZCA9IDF1OworICAgIH07CisgICAgaWYgKHdvcmsgJiYgYzJfY250cjY0X3QoaW5kZXgpID09IHdvcmstPmlucHV0Lm9yZGluYWwuZnJhbWVJbmRleCkgeworICAgICAgICBmaWxsV29yayh3b3JrKTsKKyAgICB9IGVsc2UgeworICAgICAgICBmaW5pc2goaW5kZXgsIGZpbGxXb3JrKTsKKyAgICB9Cit9CisKK2MyX3N0YXR1c190IEMyU29mdEF2Y0RlYzo6ZW5zdXJlRGVjb2RlclN0YXRlKGNvbnN0IHN0ZDo6c2hhcmVkX3B0cjxDMkJsb2NrUG9vbD4gJnBvb2wpIHsKKyAgICBpZiAoIW1EZWNIYW5kbGUpIHsKKyAgICAgICAgQUxPR0UoIm5vdCBzdXBwb3NlZCB0byBiZSBoZXJlLCBpbnZhbGlkIGRlY29kZXIgY29udGV4dCIpOworICAgICAgICByZXR1cm4gQzJfQ09SUlVQVEVEOworICAgIH0KKyAgICBpZiAobVN0cmlkZSAhPSBBTElHTjY0KG1XaWR0aCkpIHsKKyAgICAgICAgbVN0cmlkZSA9IEFMSUdONjQobVdpZHRoKTsKKyAgICAgICAgaWYgKE9LICE9IHNldFBhcmFtcyhtU3RyaWRlLCBJVkRfREVDT0RFX0ZSQU1FKSkgcmV0dXJuIEMyX0NPUlJVUFRFRDsKKyAgICB9CisgICAgaWYgKG1PdXRCbG9jayAmJgorICAgICAgICAgICAgKG1PdXRCbG9jay0+d2lkdGgoKSAhPSBtU3RyaWRlIHx8IG1PdXRCbG9jay0+aGVpZ2h0KCkgIT0gbUhlaWdodCkpIHsKKyAgICAgICAgbU91dEJsb2NrLnJlc2V0KCk7CisgICAgfQorICAgIGlmICghbU91dEJsb2NrKSB7CisgICAgICAgIHVpbnQzMl90IGZvcm1hdCA9IEhBTF9QSVhFTF9GT1JNQVRfWVYxMjsKKyAgICAgICAgQzJNZW1vcnlVc2FnZSB1c2FnZSA9IHsgQzJNZW1vcnlVc2FnZTo6Q1BVX1JFQUQsIEMyTWVtb3J5VXNhZ2U6OkNQVV9XUklURSB9OworICAgICAgICBjMl9zdGF0dXNfdCBlcnIgPSBwb29sLT5mZXRjaEdyYXBoaWNCbG9jayhtU3RyaWRlLCBtSGVpZ2h0LCBmb3JtYXQsIHVzYWdlLCAmbU91dEJsb2NrKTsKKyAgICAgICAgaWYgKGVyciAhPSBDMl9PSykgeworICAgICAgICAgICAgQUxPR0UoImZldGNoR3JhcGhpY0Jsb2NrIGZvciBPdXRwdXQgZmFpbGVkIHdpdGggc3RhdHVzICVkIiwgZXJyKTsKKyAgICAgICAgICAgIHJldHVybiBlcnI7CisgICAgICAgIH0KKyAgICAgICAgQUxPR1YoInByb3ZpZGVkICglZHglZCkgcmVxdWlyZWQgKCVkeCVkKSIsCisgICAgICAgICAgICAgIG1PdXRCbG9jay0+d2lkdGgoKSwgbU91dEJsb2NrLT5oZWlnaHQoKSwgbVN0cmlkZSwgbUhlaWdodCk7CisgICAgfQorCisgICAgcmV0dXJuIEMyX09LOworfQorCisvLyBUT0RPOiBjYW4gb3ZlcmFsbCBlcnJvciBjaGVja2luZyBiZSBpbXByb3ZlZD8KKy8vIFRPRE86IGFsbG93IGNvbmZpZ3VyYXRpb24gb2YgY29sb3IgZm9ybWF0IGFuZCB1c2FnZSBmb3IgZ3JhcGhpYyBidWZmZXJzIGluc3RlYWQKKy8vICAgICAgIG9mIGhhcmQgY29kaW5nIHRoZW0gdG8gSEFMX1BJWEVMX0ZPUk1BVF9ZVjEyCisvLyBUT0RPOiBwYXNzIGNvbG9yYXNwZWN0cyBpbmZvcm1hdGlvbiB0byBzdXJmYWNlCisvLyBUT0RPOiB0ZXN0IHN1cHBvcnQgZm9yIGR5bmFtaWMgY2hhbmdlIGluIHJlc29sdXRpb24KKy8vIFRPRE86IHZlcmlmeSBpZiB0aGUgZGVjb2RlciBzZW50IGJhY2sgYWxsIGZyYW1lcwordm9pZCBDMlNvZnRBdmNEZWM6OnByb2Nlc3MoCisgICAgICAgIGNvbnN0IHN0ZDo6dW5pcXVlX3B0cjxDMldvcms+ICZ3b3JrLAorICAgICAgICBjb25zdCBzdGQ6OnNoYXJlZF9wdHI8QzJCbG9ja1Bvb2w+ICZwb29sKSB7CisgICAgLy8gSW5pdGlhbGl6ZSBvdXRwdXQgd29yaworICAgIHdvcmstPnJlc3VsdCA9IEMyX09LOworICAgIHdvcmstPndvcmtsZXRzUHJvY2Vzc2VkID0gMHU7CisgICAgd29yay0+d29ya2xldHMuZnJvbnQoKS0+b3V0cHV0LmZsYWdzID0gd29yay0+aW5wdXQuZmxhZ3M7CisgICAgaWYgKG1TaWduYWxsZWRFcnJvciB8fCBtU2lnbmFsbGVkT3V0cHV0RW9zKSB7CisgICAgICAgIHdvcmstPnJlc3VsdCA9IEMyX0JBRF9WQUxVRTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIHNpemVfdCBpbk9mZnNldCA9IDB1OworICAgIHNpemVfdCBpblNpemUgPSAwdTsKKyAgICB1aW50MzJfdCB3b3JrSW5kZXggPSB3b3JrLT5pbnB1dC5vcmRpbmFsLmZyYW1lSW5kZXgucGVla3UoKSAmIDB4RkZGRkZGRkY7CisgICAgQzJSZWFkVmlldyByVmlldyA9IG1EdW1teVJlYWRWaWV3OworICAgIGlmICghd29yay0+aW5wdXQuYnVmZmVycy5lbXB0eSgpKSB7CisgICAgICAgIHJWaWV3ID0gd29yay0+aW5wdXQuYnVmZmVyc1swXS0+ZGF0YSgpLmxpbmVhckJsb2NrcygpLmZyb250KCkubWFwKCkuZ2V0KCk7CisgICAgICAgIGluU2l6ZSA9IHJWaWV3LmNhcGFjaXR5KCk7CisgICAgICAgIGlmIChpblNpemUgJiYgclZpZXcuZXJyb3IoKSkgeworICAgICAgICAgICAgQUxPR0UoInJlYWQgdmlldyBtYXAgZmFpbGVkICVkIiwgclZpZXcuZXJyb3IoKSk7CisgICAgICAgICAgICB3b3JrLT5yZXN1bHQgPSByVmlldy5lcnJvcigpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgfQorICAgIGJvb2wgZW9zID0gKCh3b3JrLT5pbnB1dC5mbGFncyAmIEMyRnJhbWVEYXRhOjpGTEFHX0VORF9PRl9TVFJFQU0pICE9IDApOworICAgIGJvb2wgaGFzUGljdHVyZSA9IGZhbHNlOworCisgICAgQUxPR1YoImluIGJ1ZmZlciBhdHRyLiBzaXplICV6dSB0aW1lc3RhbXAgJWQgZnJhbWVpbmRleCAlZCwgZmxhZ3MgJXgiLAorICAgICAgICAgIGluU2l6ZSwgKGludCl3b3JrLT5pbnB1dC5vcmRpbmFsLnRpbWVzdGFtcC5wZWVrdSgpLAorICAgICAgICAgIChpbnQpd29yay0+aW5wdXQub3JkaW5hbC5mcmFtZUluZGV4LnBlZWt1KCksIHdvcmstPmlucHV0LmZsYWdzKTsKKyAgICBzaXplX3QgaW5Qb3MgPSAwOworICAgIHdoaWxlIChpblBvcyA8IGluU2l6ZSkgeworICAgICAgICBpZiAoQzJfT0sgIT0gZW5zdXJlRGVjb2RlclN0YXRlKHBvb2wpKSB7CisgICAgICAgICAgICBtU2lnbmFsbGVkRXJyb3IgPSB0cnVlOworICAgICAgICAgICAgd29yay0+d29ya2xldHNQcm9jZXNzZWQgPSAxdTsKKyAgICAgICAgICAgIHdvcmstPnJlc3VsdCA9IEMyX0NPUlJVUFRFRDsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIGl2ZF92aWRlb19kZWNvZGVfaXBfdCBzX2RlY29kZV9pcDsKKyAgICAgICAgaXZkX3ZpZGVvX2RlY29kZV9vcF90IHNfZGVjb2RlX29wOworICAgICAgICB7CisgICAgICAgICAgICBDMkdyYXBoaWNWaWV3IHdWaWV3ID0gbU91dEJsb2NrLT5tYXAoKS5nZXQoKTsKKyAgICAgICAgICAgIGlmICh3Vmlldy5lcnJvcigpKSB7CisgICAgICAgICAgICAgICAgQUxPR0UoImdyYXBoaWMgdmlldyBtYXAgZmFpbGVkICVkIiwgd1ZpZXcuZXJyb3IoKSk7CisgICAgICAgICAgICAgICAgd29yay0+cmVzdWx0ID0gd1ZpZXcuZXJyb3IoKTsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoIXNldERlY29kZUFyZ3MoJnNfZGVjb2RlX2lwLCAmc19kZWNvZGVfb3AsICZyVmlldywgJndWaWV3LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluT2Zmc2V0ICsgaW5Qb3MsIGluU2l6ZSAtIGluUG9zLCB3b3JrSW5kZXgpKSB7CisgICAgICAgICAgICAgICAgbVNpZ25hbGxlZEVycm9yID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICB3b3JrLT53b3JrbGV0c1Byb2Nlc3NlZCA9IDF1OworICAgICAgICAgICAgICAgIHdvcmstPnJlc3VsdCA9IEMyX0NPUlJVUFRFRDsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmIChmYWxzZSA9PSBtSGVhZGVyRGVjb2RlZCkgeworICAgICAgICAgICAgICAgIC8qIERlY29kZSBoZWFkZXIgYW5kIGdldCBkaW1lbnNpb25zICovCisgICAgICAgICAgICAgICAgc2V0UGFyYW1zKG1TdHJpZGUsIElWRF9ERUNPREVfSEVBREVSKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgV09SRDMyIGRlbGF5OworICAgICAgICAgICAgR0VUVElNRSgmbVRpbWVTdGFydCwgbnVsbHB0cik7CisgICAgICAgICAgICBUSU1FX0RJRkYobVRpbWVFbmQsIG1UaW1lU3RhcnQsIGRlbGF5KTsKKyAgICAgICAgICAgICh2b2lkKSBpdmRlY19hcGlfZnVuY3Rpb24obURlY0hhbmRsZSwgJnNfZGVjb2RlX2lwLCAmc19kZWNvZGVfb3ApOworICAgICAgICAgICAgV09SRDMyIGRlY29kZVRpbWU7CisgICAgICAgICAgICBHRVRUSU1FKCZtVGltZUVuZCwgbnVsbHB0cik7CisgICAgICAgICAgICBUSU1FX0RJRkYobVRpbWVTdGFydCwgbVRpbWVFbmQsIGRlY29kZVRpbWUpOworICAgICAgICAgICAgQUxPR1YoImRlY29kZVRpbWU9JTZkIGRlbGF5PSU2ZCBudW1CeXRlcz0lNmQiLCBkZWNvZGVUaW1lLCBkZWxheSwKKyAgICAgICAgICAgICAgICAgIHNfZGVjb2RlX29wLnU0X251bV9ieXRlc19jb25zdW1lZCk7CisgICAgICAgIH0KKyAgICAgICAgaWYgKElWRF9NRU1fQUxMT0NfRkFJTEVEID09IChzX2RlY29kZV9vcC51NF9lcnJvcl9jb2RlICYgMHhGRikpIHsKKyAgICAgICAgICAgIEFMT0dFKCJhbGxvY2F0aW9uIGZhaWx1cmUgaW4gZGVjb2RlciIpOworICAgICAgICAgICAgbVNpZ25hbGxlZEVycm9yID0gdHJ1ZTsKKyAgICAgICAgICAgIHdvcmstPndvcmtsZXRzUHJvY2Vzc2VkID0gMXU7CisgICAgICAgICAgICB3b3JrLT5yZXN1bHQgPSBDMl9DT1JSVVBURUQ7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0gZWxzZSBpZiAoSVZEX1NUUkVBTV9XSURUSF9IRUlHSFRfTk9UX1NVUFBPUlRFRCA9PSAoc19kZWNvZGVfb3AudTRfZXJyb3JfY29kZSAmIDB4RkYpKSB7CisgICAgICAgICAgICBBTE9HRSgidW5zdXBwb3J0ZWQgcmVzb2x1dGlvbiA6ICVkeCVkIiwgbVdpZHRoLCBtSGVpZ2h0KTsKKyAgICAgICAgICAgIG1TaWduYWxsZWRFcnJvciA9IHRydWU7CisgICAgICAgICAgICB3b3JrLT53b3JrbGV0c1Byb2Nlc3NlZCA9IDF1OworICAgICAgICAgICAgd29yay0+cmVzdWx0ID0gQzJfQ09SUlVQVEVEOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9IGVsc2UgaWYgKElWRF9SRVNfQ0hBTkdFRCA9PSAoc19kZWNvZGVfb3AudTRfZXJyb3JfY29kZSAmIDB4RkYpKSB7CisgICAgICAgICAgICBBTE9HVigicmVzb2x1dGlvbiBjaGFuZ2VkIik7CisgICAgICAgICAgICBkcmFpbkludGVybmFsKERSQUlOX0NPTVBPTkVOVF9OT19FT1MsIHBvb2wsIHdvcmspOworICAgICAgICAgICAgcmVzZXREZWNvZGVyKCk7CisgICAgICAgICAgICByZXNldFBsdWdpbigpOworICAgICAgICAgICAgd29yay0+d29ya2xldHNQcm9jZXNzZWQgPSAwdTsKKworICAgICAgICAgICAgLyogRGVjb2RlIGhlYWRlciBhbmQgZ2V0IG5ldyBkaW1lbnNpb25zICovCisgICAgICAgICAgICBzZXRQYXJhbXMobVN0cmlkZSwgSVZEX0RFQ09ERV9IRUFERVIpOworICAgICAgICAgICAgKHZvaWQpIGl2ZGVjX2FwaV9mdW5jdGlvbihtRGVjSGFuZGxlLCAmc19kZWNvZGVfaXAsICZzX2RlY29kZV9vcCk7CisgICAgICAgIH0KKyAgICAgICAgaWYgKDAgPCBzX2RlY29kZV9vcC51NF9waWNfd2QgJiYgMCA8IHNfZGVjb2RlX29wLnU0X3BpY19odCkgeworICAgICAgICAgICAgaWYgKG1IZWFkZXJEZWNvZGVkID09IGZhbHNlKSB7CisgICAgICAgICAgICAgICAgbUhlYWRlckRlY29kZWQgPSB0cnVlOworICAgICAgICAgICAgICAgIHNldFBhcmFtcyhBTElHTjY0KHNfZGVjb2RlX29wLnU0X3BpY193ZCksIElWRF9ERUNPREVfRlJBTUUpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKHNfZGVjb2RlX29wLnU0X3BpY193ZCAhPSBtV2lkdGggfHwgc19kZWNvZGVfb3AudTRfcGljX2h0ICE9IG1IZWlnaHQpIHsKKyAgICAgICAgICAgICAgICBtV2lkdGggPSBzX2RlY29kZV9vcC51NF9waWNfd2Q7CisgICAgICAgICAgICAgICAgbUhlaWdodCA9IHNfZGVjb2RlX29wLnU0X3BpY19odDsKKyAgICAgICAgICAgICAgICBDSEVDS19FUSgwdSwgc19kZWNvZGVfb3AudTRfb3V0cHV0X3ByZXNlbnQpOworCisgICAgICAgICAgICAgICAgQzJWaWRlb1NpemVTdHJlYW1JbmZvOjpvdXRwdXQgc2l6ZSgwdSwgbVdpZHRoLCBtSGVpZ2h0KTsKKyAgICAgICAgICAgICAgICBzdGQ6OnZlY3RvcjxzdGQ6OnVuaXF1ZV9wdHI8QzJTZXR0aW5nUmVzdWx0Pj4gZmFpbHVyZXM7CisgICAgICAgICAgICAgICAgYzJfc3RhdHVzX3QgZXJyID0gbUludGYtPmNvbmZpZyh7JnNpemV9LCBDMl9NQVlfQkxPQ0ssICZmYWlsdXJlcyk7CisgICAgICAgICAgICAgICAgaWYgKGVyciA9PSBPSykgeworICAgICAgICAgICAgICAgICAgICB3b3JrLT53b3JrbGV0cy5mcm9udCgpLT5vdXRwdXQuY29uZmlnVXBkYXRlLnB1c2hfYmFjaygKKyAgICAgICAgICAgICAgICAgICAgICAgIEMyUGFyYW06OkNvcHkoc2l6ZSkpOworICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIEFMT0dFKCJDYW5ub3Qgc2V0IHdpZHRoIGFuZCBoZWlnaHQiKTsKKyAgICAgICAgICAgICAgICAgICAgbVNpZ25hbGxlZEVycm9yID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAgd29yay0+d29ya2xldHNQcm9jZXNzZWQgPSAxdTsKKyAgICAgICAgICAgICAgICAgICAgd29yay0+cmVzdWx0ID0gQzJfQ09SUlVQVEVEOworICAgICAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgICh2b2lkKWdldFZ1aVBhcmFtcygpOworICAgICAgICBoYXNQaWN0dXJlIHw9ICgxID09IHNfZGVjb2RlX29wLnU0X2ZyYW1lX2RlY29kZWRfZmxhZyk7CisgICAgICAgIGlmIChzX2RlY29kZV9vcC51NF9vdXRwdXRfcHJlc2VudCkgeworICAgICAgICAgICAgZmluaXNoV29yayhzX2RlY29kZV9vcC51NF90cywgd29yayk7CisgICAgICAgIH0KKyAgICAgICAgaWYgKDAgPT0gc19kZWNvZGVfb3AudTRfbnVtX2J5dGVzX2NvbnN1bWVkKSB7CisgICAgICAgICAgICBBTE9HRCgiQnl0ZXMgY29uc3VtZWQgaXMgemVyby4gSWdub3JpbmcgcmVtYWluaW5nIGJ5dGVzIik7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBpblBvcyArPSBzX2RlY29kZV9vcC51NF9udW1fYnl0ZXNfY29uc3VtZWQ7CisgICAgICAgIGlmIChoYXNQaWN0dXJlICYmIChpblNpemUgLSBpblBvcykpIHsKKyAgICAgICAgICAgIEFMT0dEKCJkZWNvZGVkIGZyYW1lIGluIGN1cnJlbnQgYWNjZXNzIG5hbCwgaWdub3JpbmcgZnVydGhlciB0cmFpbGluZyBieXRlcyAlZCIsCisgICAgICAgICAgICAgICAgICAoaW50KWluU2l6ZSAtIChpbnQpaW5Qb3MpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICB9CisgICAgaWYgKGVvcykgeworICAgICAgICBkcmFpbkludGVybmFsKERSQUlOX0NPTVBPTkVOVF9XSVRIX0VPUywgcG9vbCwgd29yayk7CisgICAgICAgIG1TaWduYWxsZWRPdXRwdXRFb3MgPSB0cnVlOworICAgIH0gZWxzZSBpZiAoIWhhc1BpY3R1cmUpIHsKKyAgICAgICAgZmlsbEVtcHR5V29yayh3b3JrKTsKKyAgICB9Cit9CisKK2MyX3N0YXR1c190IEMyU29mdEF2Y0RlYzo6ZHJhaW5JbnRlcm5hbCgKKyAgICAgICAgdWludDMyX3QgZHJhaW5Nb2RlLAorICAgICAgICBjb25zdCBzdGQ6OnNoYXJlZF9wdHI8QzJCbG9ja1Bvb2w+ICZwb29sLAorICAgICAgICBjb25zdCBzdGQ6OnVuaXF1ZV9wdHI8QzJXb3JrPiAmd29yaykgeworICAgIGlmIChkcmFpbk1vZGUgPT0gTk9fRFJBSU4pIHsKKyAgICAgICAgQUxPR1coImRyYWluIHdpdGggTk9fRFJBSU46IG5vLW9wIik7CisgICAgICAgIHJldHVybiBDMl9PSzsKKyAgICB9CisgICAgaWYgKGRyYWluTW9kZSA9PSBEUkFJTl9DSEFJTikgeworICAgICAgICBBTE9HVygiRFJBSU5fQ0hBSU4gbm90IHN1cHBvcnRlZCIpOworICAgICAgICByZXR1cm4gQzJfT01JVFRFRDsKKyAgICB9CisKKyAgICBpZiAoT0sgIT0gc2V0Rmx1c2hNb2RlKCkpIHJldHVybiBDMl9DT1JSVVBURUQ7CisgICAgd2hpbGUgKHRydWUpIHsKKyAgICAgICAgaWYgKEMyX09LICE9IGVuc3VyZURlY29kZXJTdGF0ZShwb29sKSkgeworICAgICAgICAgICAgbVNpZ25hbGxlZEVycm9yID0gdHJ1ZTsKKyAgICAgICAgICAgIHdvcmstPndvcmtsZXRzUHJvY2Vzc2VkID0gMXU7CisgICAgICAgICAgICB3b3JrLT5yZXN1bHQgPSBDMl9DT1JSVVBURUQ7CisgICAgICAgICAgICByZXR1cm4gQzJfQ09SUlVQVEVEOworICAgICAgICB9CisgICAgICAgIEMyR3JhcGhpY1ZpZXcgd1ZpZXcgPSBtT3V0QmxvY2stPm1hcCgpLmdldCgpOworICAgICAgICBpZiAod1ZpZXcuZXJyb3IoKSkgeworICAgICAgICAgICAgQUxPR0UoImdyYXBoaWMgdmlldyBtYXAgZmFpbGVkICVkIiwgd1ZpZXcuZXJyb3IoKSk7CisgICAgICAgICAgICByZXR1cm4gQzJfQ09SUlVQVEVEOworICAgICAgICB9CisgICAgICAgIGl2ZF92aWRlb19kZWNvZGVfaXBfdCBzX2RlY29kZV9pcDsKKyAgICAgICAgaXZkX3ZpZGVvX2RlY29kZV9vcF90IHNfZGVjb2RlX29wOworICAgICAgICBpZiAoIXNldERlY29kZUFyZ3MoJnNfZGVjb2RlX2lwLCAmc19kZWNvZGVfb3AsIG51bGxwdHIsICZ3VmlldywgMCwgMCwgMCkpIHsKKyAgICAgICAgICAgIG1TaWduYWxsZWRFcnJvciA9IHRydWU7CisgICAgICAgICAgICB3b3JrLT53b3JrbGV0c1Byb2Nlc3NlZCA9IDF1OworICAgICAgICAgICAgcmV0dXJuIEMyX0NPUlJVUFRFRDsKKyAgICAgICAgfQorICAgICAgICAodm9pZCkgaXZkZWNfYXBpX2Z1bmN0aW9uKG1EZWNIYW5kbGUsICZzX2RlY29kZV9pcCwgJnNfZGVjb2RlX29wKTsKKyAgICAgICAgaWYgKHNfZGVjb2RlX29wLnU0X291dHB1dF9wcmVzZW50KSB7CisgICAgICAgICAgICBmaW5pc2hXb3JrKHNfZGVjb2RlX29wLnU0X3RzLCB3b3JrKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGZpbGxFbXB0eVdvcmsod29yayk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgIH0KKworICAgIHJldHVybiBDMl9PSzsKK30KKworYzJfc3RhdHVzX3QgQzJTb2Z0QXZjRGVjOjpkcmFpbigKKyAgICAgICAgdWludDMyX3QgZHJhaW5Nb2RlLAorICAgICAgICBjb25zdCBzdGQ6OnNoYXJlZF9wdHI8QzJCbG9ja1Bvb2w+ICZwb29sKSB7CisgICAgcmV0dXJuIGRyYWluSW50ZXJuYWwoZHJhaW5Nb2RlLCBwb29sLCBudWxscHRyKTsKK30KKworY2xhc3MgQzJTb2Z0QXZjRGVjRmFjdG9yeSA6IHB1YmxpYyBDMkNvbXBvbmVudEZhY3RvcnkgeworcHVibGljOgorICAgIEMyU29mdEF2Y0RlY0ZhY3RvcnkoKSA6IG1IZWxwZXIoc3RkOjpzdGF0aWNfcG9pbnRlcl9jYXN0PEMyUmVmbGVjdG9ySGVscGVyPigKKyAgICAgICAgR2V0Q29kZWMyUGxhdGZvcm1Db21wb25lbnRTdG9yZSgpLT5nZXRQYXJhbVJlZmxlY3RvcigpKSkgeworICAgIH0KKworICAgIHZpcnR1YWwgYzJfc3RhdHVzX3QgY3JlYXRlQ29tcG9uZW50KAorICAgICAgICAgICAgYzJfbm9kZV9pZF90IGlkLAorICAgICAgICAgICAgc3RkOjpzaGFyZWRfcHRyPEMyQ29tcG9uZW50PiogY29uc3QgY29tcG9uZW50LAorICAgICAgICAgICAgc3RkOjpmdW5jdGlvbjx2b2lkKEMyQ29tcG9uZW50Kik+IGRlbGV0ZXIpIG92ZXJyaWRlIHsKKyAgICAgICAgKmNvbXBvbmVudCA9IHN0ZDo6c2hhcmVkX3B0cjxDMkNvbXBvbmVudD4oCisgICAgICAgICAgICAgICAgbmV3IEMyU29mdEF2Y0RlYyhDT01QT05FTlRfTkFNRSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RkOjptYWtlX3NoYXJlZDxDMlNvZnRBdmNEZWM6OkludGZJbXBsPihtSGVscGVyKSksCisgICAgICAgICAgICAgICAgZGVsZXRlcik7CisgICAgICAgIHJldHVybiBDMl9PSzsKKyAgICB9CisKKyAgICB2aXJ0dWFsIGMyX3N0YXR1c190IGNyZWF0ZUludGVyZmFjZSgKKyAgICAgICAgICAgIGMyX25vZGVfaWRfdCBpZCwKKyAgICAgICAgICAgIHN0ZDo6c2hhcmVkX3B0cjxDMkNvbXBvbmVudEludGVyZmFjZT4qIGNvbnN0IGludGVyZmFjZSwKKyAgICAgICAgICAgIHN0ZDo6ZnVuY3Rpb248dm9pZChDMkNvbXBvbmVudEludGVyZmFjZSopPiBkZWxldGVyKSBvdmVycmlkZSB7CisgICAgICAgICppbnRlcmZhY2UgPSBzdGQ6OnNoYXJlZF9wdHI8QzJDb21wb25lbnRJbnRlcmZhY2U+KAorICAgICAgICAgICAgICAgIG5ldyBTaW1wbGVJbnRlcmZhY2U8QzJTb2Z0QXZjRGVjOjpJbnRmSW1wbD4oCisgICAgICAgICAgICAgICAgICAgICAgICBDT01QT05FTlRfTkFNRSwgaWQsIHN0ZDo6bWFrZV9zaGFyZWQ8QzJTb2Z0QXZjRGVjOjpJbnRmSW1wbD4obUhlbHBlcikpLAorICAgICAgICAgICAgICAgIGRlbGV0ZXIpOworICAgICAgICByZXR1cm4gQzJfT0s7CisgICAgfQorCisgICAgdmlydHVhbCB+QzJTb2Z0QXZjRGVjRmFjdG9yeSgpIG92ZXJyaWRlID0gZGVmYXVsdDsKKworcHJpdmF0ZToKKyAgICBzdGQ6OnNoYXJlZF9wdHI8QzJSZWZsZWN0b3JIZWxwZXI+IG1IZWxwZXI7Cit9OworCit9ICAvLyBuYW1lc3BhY2UgYW5kcm9pZAorCitleHRlcm4gIkMiIDo6QzJDb21wb25lbnRGYWN0b3J5KiBDcmVhdGVDb2RlYzJGYWN0b3J5KCkgeworICAgIEFMT0dWKCJpbiAlcyIsIF9fZnVuY19fKTsKKyAgICByZXR1cm4gbmV3IDo6YW5kcm9pZDo6QzJTb2Z0QXZjRGVjRmFjdG9yeSgpOworfQorCitleHRlcm4gIkMiIHZvaWQgRGVzdHJveUNvZGVjMkZhY3RvcnkoOjpDMkNvbXBvbmVudEZhY3RvcnkqIGZhY3RvcnkpIHsKKyAgICBBTE9HVigiaW4gJXMiLCBfX2Z1bmNfXyk7CisgICAgZGVsZXRlIGZhY3Rvcnk7Cit9CmRpZmYgLS1naXQgYS9tZWRpYS9jb2RlYzIvY29tcG9uZW50cy9hdmMvQzJTb2Z0QXZjRGVjLmggYi9tZWRpYS9jb2RlYzIvY29tcG9uZW50cy9hdmMvQzJTb2Z0QXZjRGVjLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjEyN2E5MwotLS0gL2Rldi9udWxsCisrKyBiL21lZGlhL2NvZGVjMi9jb21wb25lbnRzL2F2Yy9DMlNvZnRBdmNEZWMuaApAQCAtMCwwICsxLDE5NiBAQAorLyoKKyAqIENvcHlyaWdodCAyMDE3IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KKworI2lmbmRlZiBBTkRST0lEX0MyX1NPRlRfQVZDX0RFQ19IXworI2RlZmluZSBBTkRST0lEX0MyX1NPRlRfQVZDX0RFQ19IXworCisjaW5jbHVkZSA8c3lzL3RpbWUuaD4KKworI2luY2x1ZGUgPG1lZGlhL3N0YWdlZnJpZ2h0L2ZvdW5kYXRpb24vQ29sb3JVdGlscy5oPgorCisjaW5jbHVkZSA8U2ltcGxlQzJDb21wb25lbnQuaD4KKworI2luY2x1ZGUgImloMjY0X3R5cGVkZWZzLmgiCisjaW5jbHVkZSAiaXYuaCIKKyNpbmNsdWRlICJpdmQuaCIKKworbmFtZXNwYWNlIGFuZHJvaWQgeworCisjZGVmaW5lIGl2ZGVjX2FwaV9mdW5jdGlvbiAgICAgICAgICAgICAgaWgyNjRkX2FwaV9mdW5jdGlvbgorI2RlZmluZSBpdmRleHRfY3JlYXRlX2lwX3QgICAgICAgICAgICAgIGloMjY0ZF9jcmVhdGVfaXBfdAorI2RlZmluZSBpdmRleHRfY3JlYXRlX29wX3QgICAgICAgICAgICAgIGloMjY0ZF9jcmVhdGVfb3BfdAorI2RlZmluZSBpdmRleHRfZGVsZXRlX2lwX3QgICAgICAgICAgICAgIGloMjY0ZF9kZWxldGVfaXBfdAorI2RlZmluZSBpdmRleHRfZGVsZXRlX29wX3QgICAgICAgICAgICAgIGloMjY0ZF9kZWxldGVfb3BfdAorI2RlZmluZSBpdmRleHRfY3RsX3NldF9udW1fY29yZXNfaXBfdCAgIGloMjY0ZF9jdGxfc2V0X251bV9jb3Jlc19pcF90CisjZGVmaW5lIGl2ZGV4dF9jdGxfc2V0X251bV9jb3Jlc19vcF90ICAgaWgyNjRkX2N0bF9zZXRfbnVtX2NvcmVzX29wX3QKKyNkZWZpbmUgaXZkZXh0X2N0bF9nZXRfdnVpX3BhcmFtc19pcF90ICBpaDI2NGRfY3RsX2dldF92dWlfcGFyYW1zX2lwX3QKKyNkZWZpbmUgaXZkZXh0X2N0bF9nZXRfdnVpX3BhcmFtc19vcF90ICBpaDI2NGRfY3RsX2dldF92dWlfcGFyYW1zX29wX3QKKyNkZWZpbmUgQUxJR042NCh4KSAgICAgICAgICAgICAgICAgICAgICAoKCgoeCkgKyA2MykgPj4gNikgPDwgNikKKyNkZWZpbmUgTUFYX05VTV9DT1JFUyAgICAgICAgICAgICAgICAgICA0CisjZGVmaW5lIElWREVYVF9DTURfQ1RMX1NFVF9OVU1fQ09SRVMgICAgXAorICAgICAgICAoSVZEX0NPTlRST0xfQVBJX0NPTU1BTkRfVFlQRV9UKUlIMjY0RF9DTURfQ1RMX1NFVF9OVU1fQ09SRVMKKyNkZWZpbmUgTUlOKGEsIGIpICAgICAgICAgICAgICAgICAgICAgICAoKChhKSA8IChiKSkgPyAoYSkgOiAoYikpCisjZGVmaW5lIEdFVFRJTUUoYSwgYikgICAgICAgICAgICAgICAgICAgZ2V0dGltZW9mZGF5KGEsIGIpOworI2RlZmluZSBUSU1FX0RJRkYoc3RhcnQsIGVuZCwgZGlmZikgICAgIFwKKyAgICBkaWZmID0gKCgoZW5kKS50dl9zZWMgLSAoc3RhcnQpLnR2X3NlYykgKiAxMDAwMDAwKSArIFwKKyAgICAgICAgICAgICgoZW5kKS50dl91c2VjIC0gKHN0YXJ0KS50dl91c2VjKTsKKworI2lmZGVmIEZJTEVfRFVNUF9FTkFCTEUKKyAgICAjZGVmaW5lIElOUFVUX0RVTVBfUEFUSCAgICAgIi9zZGNhcmQvY2xpcHMvYXZjZF9pbnB1dCIKKyAgICAjZGVmaW5lIElOUFVUX0RVTVBfRVhUICAgICAgImgyNjQiCisgICAgI2RlZmluZSBHRU5FUkFURV9GSUxFX05BTUVTKCkgeyAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIEdFVFRJTUUoJm1UaW1lU3RhcnQsIE5VTEwpOyAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIHN0cmNweShtSW5GaWxlLCAiIik7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIHNwcmludGYobUluRmlsZSwgIiVzXyVsZC4lbGQuJXMiLCBJTlBVVF9EVU1QX1BBVEgsICBcCisgICAgICAgICAgICAgICAgbVRpbWVTdGFydC50dl9zZWMsIG1UaW1lU3RhcnQudHZfdXNlYywgICAgICBcCisgICAgICAgICAgICAgICAgSU5QVVRfRFVNUF9FWFQpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgfQorICAgICNkZWZpbmUgQ1JFQVRFX0RVTVBfRklMRShtX2ZpbGVuYW1lKSB7ICAgICAgICAgICAgICAgICAgXAorICAgICAgICBGSUxFICpmcCA9IGZvcGVuKG1fZmlsZW5hbWUsICJ3YiIpOyAgICAgICAgICAgICAgICAgXAorICAgICAgICBpZiAoZnAgIT0gTlVMTCkgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgZmNsb3NlKGZwKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICB9IGVsc2UgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgQUxPR0QoIkNvdWxkIG5vdCBvcGVuIGZpbGUgJXMiLCBtX2ZpbGVuYW1lKTsgICAgXAorICAgICAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIH0KKyAgICAjZGVmaW5lIERVTVBfVE9fRklMRShtX2ZpbGVuYW1lLCBtX2J1ZiwgbV9zaXplLCBtX29mZnNldClcCisgICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIEZJTEUgKmZwID0gZm9wZW4obV9maWxlbmFtZSwgImFiIik7ICAgICAgICAgICAgICAgICBcCisgICAgICAgIGlmIChmcCAhPSBOVUxMICYmIG1fYnVmICE9IE5VTEwgJiYgbV9vZmZzZXQgPT0gMCkgeyBcCisgICAgICAgICAgICBpbnQgaTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICBpID0gZndyaXRlKG1fYnVmLCAxLCBtX3NpemUsIGZwKTsgICAgICAgICAgICAgICBcCisgICAgICAgICAgICBBTE9HRCgiZndyaXRlIHJldCAlZCB0byB3cml0ZSAlZCIsIGksIG1fc2l6ZSk7ICBcCisgICAgICAgICAgICBpZiAoaSAhPSAoaW50KSBtX3NpemUpIHsgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgQUxPR0QoIkVycm9yIGluIGZ3cml0ZSwgcmV0dXJuZWQgJWQiLCBpKTsgICBcCisgICAgICAgICAgICAgICAgcGVycm9yKCJFcnJvciBpbiB3cml0ZSB0byBmaWxlIik7ICAgICAgICAgICBcCisgICAgICAgICAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIH0gZWxzZSBpZiAoZnAgPT0gTlVMTCkgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICBBTE9HRCgiQ291bGQgbm90IHdyaXRlIHRvIGZpbGUgJXMiLCBtX2ZpbGVuYW1lKTtcCisgICAgICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIGlmIChmcCkgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICBmY2xvc2UoZnApOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgfQorI2Vsc2UgLyogRklMRV9EVU1QX0VOQUJMRSAqLworICAgICNkZWZpbmUgSU5QVVRfRFVNUF9QQVRICisgICAgI2RlZmluZSBJTlBVVF9EVU1QX0VYVAorICAgICNkZWZpbmUgT1VUUFVUX0RVTVBfUEFUSAorICAgICNkZWZpbmUgT1VUUFVUX0RVTVBfRVhUCisgICAgI2RlZmluZSBHRU5FUkFURV9GSUxFX05BTUVTKCkKKyAgICAjZGVmaW5lIENSRUFURV9EVU1QX0ZJTEUobV9maWxlbmFtZSkKKyAgICAjZGVmaW5lIERVTVBfVE9fRklMRShtX2ZpbGVuYW1lLCBtX2J1ZiwgbV9zaXplLCBtX29mZnNldCkKKyNlbmRpZiAvKiBGSUxFX0RVTVBfRU5BQkxFICovCisKKworY2xhc3MgQzJTb2Z0QXZjRGVjIDogcHVibGljIFNpbXBsZUMyQ29tcG9uZW50IHsKK3B1YmxpYzoKKyAgICBjbGFzcyBJbnRmSW1wbDsKKyAgICBDMlNvZnRBdmNEZWMoY29uc3QgY2hhciAqbmFtZSwgYzJfbm9kZV9pZF90IGlkLCBjb25zdCBzdGQ6OnNoYXJlZF9wdHI8SW50ZkltcGw+ICZpbnRmSW1wbCk7CisgICAgdmlydHVhbCB+QzJTb2Z0QXZjRGVjKCk7CisKKyAgICAvLyBGcm9tIFNpbXBsZUMyQ29tcG9uZW50CisgICAgYzJfc3RhdHVzX3Qgb25Jbml0KCkgb3ZlcnJpZGU7CisgICAgYzJfc3RhdHVzX3Qgb25TdG9wKCkgb3ZlcnJpZGU7CisgICAgdm9pZCBvblJlc2V0KCkgb3ZlcnJpZGU7CisgICAgdm9pZCBvblJlbGVhc2UoKSBvdmVycmlkZTsKKyAgICBjMl9zdGF0dXNfdCBvbkZsdXNoX3NtKCkgb3ZlcnJpZGU7CisgICAgdm9pZCBwcm9jZXNzKAorICAgICAgICAgICAgY29uc3Qgc3RkOjp1bmlxdWVfcHRyPEMyV29yaz4gJndvcmssCisgICAgICAgICAgICBjb25zdCBzdGQ6OnNoYXJlZF9wdHI8QzJCbG9ja1Bvb2w+ICZwb29sKSBvdmVycmlkZTsKKyAgICBjMl9zdGF0dXNfdCBkcmFpbigKKyAgICAgICAgICAgIHVpbnQzMl90IGRyYWluTW9kZSwKKyAgICAgICAgICAgIGNvbnN0IHN0ZDo6c2hhcmVkX3B0cjxDMkJsb2NrUG9vbD4gJnBvb2wpIG92ZXJyaWRlOworCitwcml2YXRlOgorICAgIHN0YXR1c190IGNyZWF0ZURlY29kZXIoKTsKKyAgICBzdGF0dXNfdCBzZXROdW1Db3JlcygpOworICAgIHN0YXR1c190IHNldFBhcmFtcyhzaXplX3Qgc3RyaWRlLCBJVkRfVklERU9fREVDT0RFX01PREVfVCBkZWNfbW9kZSk7CisgICAgdm9pZCBnZXRWZXJzaW9uKCk7CisgICAgc3RhdHVzX3QgaW5pdERlY29kZXIoKTsKKyAgICBib29sIHNldERlY29kZUFyZ3MoaXZkX3ZpZGVvX2RlY29kZV9pcF90ICpwc19kZWNvZGVfaXAsCisgICAgICAgICAgICAgICAgICAgICAgIGl2ZF92aWRlb19kZWNvZGVfb3BfdCAqcHNfZGVjb2RlX29wLAorICAgICAgICAgICAgICAgICAgICAgICBDMlJlYWRWaWV3ICppbkJ1ZmZlciwKKyAgICAgICAgICAgICAgICAgICAgICAgQzJHcmFwaGljVmlldyAqb3V0QnVmZmVyLAorICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgaW5PZmZzZXQsCisgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBpblNpemUsCisgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90IHRzTWFya2VyKTsKKyAgICBib29sIGdldFZ1aVBhcmFtcygpOworICAgIGMyX3N0YXR1c190IGVuc3VyZURlY29kZXJTdGF0ZShjb25zdCBzdGQ6OnNoYXJlZF9wdHI8QzJCbG9ja1Bvb2w+ICZwb29sKTsKKyAgICB2b2lkIGZpbmlzaFdvcmsodWludDY0X3QgaW5kZXgsIGNvbnN0IHN0ZDo6dW5pcXVlX3B0cjxDMldvcms+ICZ3b3JrKTsKKyAgICBzdGF0dXNfdCBzZXRGbHVzaE1vZGUoKTsKKyAgICBjMl9zdGF0dXNfdCBkcmFpbkludGVybmFsKAorICAgICAgICAgICAgdWludDMyX3QgZHJhaW5Nb2RlLAorICAgICAgICAgICAgY29uc3Qgc3RkOjpzaGFyZWRfcHRyPEMyQmxvY2tQb29sPiAmcG9vbCwKKyAgICAgICAgICAgIGNvbnN0IHN0ZDo6dW5pcXVlX3B0cjxDMldvcms+ICZ3b3JrKTsKKyAgICBzdGF0dXNfdCByZXNldERlY29kZXIoKTsKKyAgICB2b2lkIHJlc2V0UGx1Z2luKCk7CisgICAgc3RhdHVzX3QgZGVsZXRlRGVjb2RlcigpOworCisgICAgc3RkOjpzaGFyZWRfcHRyPEludGZJbXBsPiBtSW50ZjsKKworICAgIC8vIFRPRE86VGhpcyBpcyBub3QgdGhlIHJpZ2h0IHBsYWNlIGZvciB0aGlzIGVudW0uIFRoZXNlIHNob3VsZAorICAgIC8vIGJlIHBhcnQgb2YgYzItdm5kayBzbyB0aGF0IHRoZXkgY2FuIGJlIGFjY2Vzc2VkIGJ5IGFsbCB2aWRlbyBwbHVnaW5zCisgICAgLy8gdW50aWwgdGhlbiwgbWFrZSB0aGVtIGZlZWwgYXQgaG9tZQorICAgIGVudW0geworICAgICAgICBrTm90U3VwcG9ydGVkLAorICAgICAgICBrUHJlZmVyQml0c3RyZWFtLAorICAgICAgICBrUHJlZmVyQ29udGFpbmVyLAorICAgIH07CisKKyAgICBpdl9vYmpfdCAqbURlY0hhbmRsZTsKKyAgICBzdGQ6OnNoYXJlZF9wdHI8QzJHcmFwaGljQmxvY2s+IG1PdXRCbG9jazsKKyAgICB1aW50OF90ICptT3V0QnVmZmVyRmx1c2g7CisKKyAgICBzaXplX3QgbU51bUNvcmVzOworICAgIElWX0NPTE9SX0ZPUk1BVF9UIG1JdkNvbG9yRm9ybWF0OworCisgICAgdWludDMyX3QgbVdpZHRoOworICAgIHVpbnQzMl90IG1IZWlnaHQ7CisgICAgdWludDMyX3QgbVN0cmlkZTsKKyAgICBib29sIG1TaWduYWxsZWRPdXRwdXRFb3M7CisgICAgYm9vbCBtU2lnbmFsbGVkRXJyb3I7CisgICAgYm9vbCBtSGVhZGVyRGVjb2RlZDsKKyAgICAvLyBDb2xvciBhc3BlY3RzLiBUaGVzZSBhcmUgSVNPIHZhbHVlcyBhbmQgYXJlIG1lYW50IHRvIGRldGVjdCBjaGFuZ2VzIGluIGFzcGVjdHMgdG8gYXZvaWQKKyAgICAvLyBjb252ZXJ0aW5nIHRoZW0gdG8gQzIgdmFsdWVzIGZvciBlYWNoIGZyYW1lCisgICAgc3RydWN0IFZ1aUNvbG9yQXNwZWN0cyB7CisgICAgICAgIHVpbnQ4X3QgcHJpbWFyaWVzOworICAgICAgICB1aW50OF90IHRyYW5zZmVyOworICAgICAgICB1aW50OF90IGNvZWZmczsKKyAgICAgICAgdWludDhfdCBmdWxsUmFuZ2U7CisKKyAgICAgICAgLy8gZGVmYXVsdCBjb2xvciBhc3BlY3RzCisgICAgICAgIFZ1aUNvbG9yQXNwZWN0cygpCisgICAgICAgICAgICA6IHByaW1hcmllcygyKSwgdHJhbnNmZXIoMiksIGNvZWZmcygyKSwgZnVsbFJhbmdlKDApIHsgfQorCisgICAgICAgIGJvb2wgb3BlcmF0b3I9PShjb25zdCBWdWlDb2xvckFzcGVjdHMgJm8pIHsKKyAgICAgICAgICAgIHJldHVybiBwcmltYXJpZXMgPT0gby5wcmltYXJpZXMgJiYgdHJhbnNmZXIgPT0gby50cmFuc2ZlciAmJiBjb2VmZnMgPT0gby5jb2VmZnMKKyAgICAgICAgICAgICAgICAgICAgJiYgZnVsbFJhbmdlID09IG8uZnVsbFJhbmdlOworICAgICAgICB9CisgICAgfSBtQml0c3RyZWFtQ29sb3JBc3BlY3RzOworCisgICAgLy8gcHJvZmlsZQorICAgIHN0cnVjdCB0aW1ldmFsIG1UaW1lU3RhcnQ7CisgICAgc3RydWN0IHRpbWV2YWwgbVRpbWVFbmQ7CisjaWZkZWYgRklMRV9EVU1QX0VOQUJMRQorICAgIGNoYXIgbUluRmlsZVsyMDBdOworI2VuZGlmIC8qIEZJTEVfRFVNUF9FTkFCTEUgKi8KKworICAgIEMyX0RPX05PVF9DT1BZKEMyU29mdEF2Y0RlYyk7Cit9OworCit9ICAvLyBuYW1lc3BhY2UgYW5kcm9pZAorCisjZW5kaWYgIC8vIEFORFJPSURfQzJfU09GVF9BVkNfREVDX0hfCmRpZmYgLS1naXQgYS9tZWRpYS9jb2RlYzIvY29tcG9uZW50cy9hdmMvQzJTb2Z0QXZjRW5jLmNwcCBiL21lZGlhL2NvZGVjMi9jb21wb25lbnRzL2F2Yy9DMlNvZnRBdmNFbmMuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVlNWNmMjcKLS0tIC9kZXYvbnVsbAorKysgYi9tZWRpYS9jb2RlYzIvY29tcG9uZW50cy9hdmMvQzJTb2Z0QXZjRW5jLmNwcApAQCAtMCwwICsxLDE1NTkgQEAKKy8qCisgKiBDb3B5cmlnaHQgMjAxOCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCisKKy8vI2RlZmluZSBMT0dfTkRFQlVHIDAKKyNkZWZpbmUgTE9HX1RBRyAiQzJTb2Z0QXZjRW5jIgorI2luY2x1ZGUgPGxvZy9sb2cuaD4KKyNpbmNsdWRlIDx1dGlscy9taXNjLmg+CisKKyNpbmNsdWRlIDxtZWRpYS9oYXJkd2FyZS9WaWRlb0FQSS5oPgorI2luY2x1ZGUgPG1lZGlhL3N0YWdlZnJpZ2h0L01lZGlhRGVmcy5oPgorI2luY2x1ZGUgPG1lZGlhL3N0YWdlZnJpZ2h0L01lZGlhRXJyb3JzLmg+CisjaW5jbHVkZSA8bWVkaWEvc3RhZ2VmcmlnaHQvTWV0YURhdGEuaD4KKyNpbmNsdWRlIDxtZWRpYS9zdGFnZWZyaWdodC9mb3VuZGF0aW9uL0FVdGlscy5oPgorCisjaW5jbHVkZSA8QzJEZWJ1Zy5oPgorI2luY2x1ZGUgPEMyUGxhdGZvcm1TdXBwb3J0Lmg+CisjaW5jbHVkZSA8Q29kZWMyQnVmZmVyVXRpbHMuaD4KKyNpbmNsdWRlIDxTaW1wbGVDMkludGVyZmFjZS5oPgorI2luY2x1ZGUgPHV0aWwvQzJJbnRlcmZhY2VIZWxwZXIuaD4KKworI2luY2x1ZGUgIkMyU29mdEF2Y0VuYy5oIgorI2luY2x1ZGUgImloMjY0ZS5oIgorI2luY2x1ZGUgImloMjY0ZV9lcnJvci5oIgorCituYW1lc3BhY2UgYW5kcm9pZCB7CisKK2NsYXNzIEMyU29mdEF2Y0VuYzo6SW50ZkltcGwgOiBwdWJsaWMgQzJJbnRlcmZhY2VIZWxwZXIgeworcHVibGljOgorICAgIGV4cGxpY2l0IEludGZJbXBsKGNvbnN0IHN0ZDo6c2hhcmVkX3B0cjxDMlJlZmxlY3RvckhlbHBlcj4gJmhlbHBlcikKKyAgICAgICAgOiBDMkludGVyZmFjZUhlbHBlcihoZWxwZXIpIHsKKworICAgICAgICBzZXREZXJpdmVkSW5zdGFuY2UodGhpcyk7CisKKyAgICAgICAgYWRkUGFyYW1ldGVyKAorICAgICAgICAgICAgICAgIERlZmluZVBhcmFtKG1JbnB1dEZvcm1hdCwgQzJfTkFNRV9JTlBVVF9TVFJFQU1fRk9STUFUX1NFVFRJTkcpCisgICAgICAgICAgICAgICAgLndpdGhDb25zdFZhbHVlKG5ldyBDMlN0cmVhbUZvcm1hdENvbmZpZzo6aW5wdXQoMHUsIEMyRm9ybWF0VmlkZW8pKQorICAgICAgICAgICAgICAgIC5idWlsZCgpKTsKKworICAgICAgICBhZGRQYXJhbWV0ZXIoCisgICAgICAgICAgICAgICAgRGVmaW5lUGFyYW0obU91dHB1dEZvcm1hdCwgQzJfTkFNRV9PVVRQVVRfU1RSRUFNX0ZPUk1BVF9TRVRUSU5HKQorICAgICAgICAgICAgICAgIC53aXRoQ29uc3RWYWx1ZShuZXcgQzJTdHJlYW1Gb3JtYXRDb25maWc6Om91dHB1dCgwdSwgQzJGb3JtYXRDb21wcmVzc2VkKSkKKyAgICAgICAgICAgICAgICAuYnVpbGQoKSk7CisKKyAgICAgICAgYWRkUGFyYW1ldGVyKAorICAgICAgICAgICAgICAgIERlZmluZVBhcmFtKG1JbnB1dE1lZGlhVHlwZSwgQzJfTkFNRV9JTlBVVF9QT1JUX01JTUVfU0VUVElORykKKyAgICAgICAgICAgICAgICAud2l0aENvbnN0VmFsdWUoQWxsb2NTaGFyZWRTdHJpbmc8QzJQb3J0TWltZUNvbmZpZzo6aW5wdXQ+KAorICAgICAgICAgICAgICAgICAgICAgICAgTUVESUFfTUlNRVRZUEVfVklERU9fUkFXKSkKKyAgICAgICAgICAgICAgICAuYnVpbGQoKSk7CisKKyAgICAgICAgYWRkUGFyYW1ldGVyKAorICAgICAgICAgICAgICAgIERlZmluZVBhcmFtKG1PdXRwdXRNZWRpYVR5cGUsIEMyX05BTUVfT1VUUFVUX1BPUlRfTUlNRV9TRVRUSU5HKQorICAgICAgICAgICAgICAgIC53aXRoQ29uc3RWYWx1ZShBbGxvY1NoYXJlZFN0cmluZzxDMlBvcnRNaW1lQ29uZmlnOjpvdXRwdXQ+KAorICAgICAgICAgICAgICAgICAgICAgICAgTUVESUFfTUlNRVRZUEVfVklERU9fQVZDKSkKKyAgICAgICAgICAgICAgICAuYnVpbGQoKSk7CisKKyAgICAgICAgYWRkUGFyYW1ldGVyKAorICAgICAgICAgICAgICAgIERlZmluZVBhcmFtKG1Vc2FnZSwgQzJfTkFNRV9JTlBVVF9TVFJFQU1fVVNBR0VfU0VUVElORykKKyAgICAgICAgICAgICAgICAud2l0aENvbnN0VmFsdWUobmV3IEMyU3RyZWFtVXNhZ2VUdW5pbmc6OmlucHV0KAorICAgICAgICAgICAgICAgICAgICAgICAgMHUsICh1aW50NjRfdClDMk1lbW9yeVVzYWdlOjpDUFVfUkVBRCkpCisgICAgICAgICAgICAgICAgLmJ1aWxkKCkpOworCisgICAgICAgIGFkZFBhcmFtZXRlcigKKyAgICAgICAgICAgICAgICBEZWZpbmVQYXJhbShtU2l6ZSwgQzJfTkFNRV9TVFJFQU1fVklERU9fU0laRV9TRVRUSU5HKQorICAgICAgICAgICAgICAgIC53aXRoRGVmYXVsdChuZXcgQzJWaWRlb1NpemVTdHJlYW1UdW5pbmc6OmlucHV0KDB1LCAzMjAsIDI0MCkpCisgICAgICAgICAgICAgICAgLndpdGhGaWVsZHMoeworICAgICAgICAgICAgICAgICAgICBDMkYobVNpemUsIHdpZHRoKS5pblJhbmdlKDIsIDI1NjAsIDIpLAorICAgICAgICAgICAgICAgICAgICBDMkYobVNpemUsIGhlaWdodCkuaW5SYW5nZSgyLCAyNTYwLCAyKSwKKyAgICAgICAgICAgICAgICB9KQorICAgICAgICAgICAgICAgIC53aXRoU2V0dGVyKFNpemVTZXR0ZXIpCisgICAgICAgICAgICAgICAgLmJ1aWxkKCkpOworCisgICAgICAgIGFkZFBhcmFtZXRlcigKKyAgICAgICAgICAgICAgICBEZWZpbmVQYXJhbShtRnJhbWVSYXRlLCBDMl9OQU1FX1NUUkVBTV9GUkFNRV9SQVRFX1NFVFRJTkcpCisgICAgICAgICAgICAgICAgLndpdGhEZWZhdWx0KG5ldyBDMlN0cmVhbUZyYW1lUmF0ZUluZm86Om91dHB1dCgwdSwgMzAuKSkKKyAgICAgICAgICAgICAgICAvLyBUT0RPOiBNb3JlIHJlc3RyaWN0aW9uPworICAgICAgICAgICAgICAgIC53aXRoRmllbGRzKHtDMkYobUZyYW1lUmF0ZSwgdmFsdWUpLmdyZWF0ZXJUaGFuKDAuKX0pCisgICAgICAgICAgICAgICAgLndpdGhTZXR0ZXIoU2V0dGVyPGRlY2x0eXBlKCptRnJhbWVSYXRlKT46OlN0cmljdFZhbHVlV2l0aE5vRGVwcykKKyAgICAgICAgICAgICAgICAuYnVpbGQoKSk7CisKKyAgICAgICAgYWRkUGFyYW1ldGVyKAorICAgICAgICAgICAgICAgIERlZmluZVBhcmFtKG1CaXRyYXRlLCBDMl9OQU1FX1NUUkVBTV9CSVRSQVRFX1NFVFRJTkcpCisgICAgICAgICAgICAgICAgLndpdGhEZWZhdWx0KG5ldyBDMkJpdHJhdGVUdW5pbmc6Om91dHB1dCgwdSwgNjQwMDApKQorICAgICAgICAgICAgICAgIC53aXRoRmllbGRzKHtDMkYobUJpdHJhdGUsIHZhbHVlKS5pblJhbmdlKDQwOTYsIDEyMDAwMDAwKX0pCisgICAgICAgICAgICAgICAgLndpdGhTZXR0ZXIoQml0cmF0ZVNldHRlcikKKyAgICAgICAgICAgICAgICAuYnVpbGQoKSk7CisKKyAgICAgICAgYWRkUGFyYW1ldGVyKAorICAgICAgICAgICAgICAgIERlZmluZVBhcmFtKG1JbnRyYVJlZnJlc2gsIEMyX1BBUkFNS0VZX0lOVFJBX1JFRlJFU0gpCisgICAgICAgICAgICAgICAgLndpdGhEZWZhdWx0KG5ldyBDMlN0cmVhbUludHJhUmVmcmVzaFR1bmluZzo6b3V0cHV0KAorICAgICAgICAgICAgICAgICAgICAgICAgMHUsIEMyQ29uZmlnOjpJTlRSQV9SRUZSRVNIX0RJU0FCTEVELCAwLikpCisgICAgICAgICAgICAgICAgLndpdGhGaWVsZHMoeworICAgICAgICAgICAgICAgICAgICBDMkYobUludHJhUmVmcmVzaCwgbW9kZSkub25lT2YoeworICAgICAgICAgICAgICAgICAgICAgICAgQzJDb25maWc6OklOVFJBX1JFRlJFU0hfRElTQUJMRUQsIEMyQ29uZmlnOjpJTlRSQV9SRUZSRVNIX0FSQklUUkFSWSB9KSwKKyAgICAgICAgICAgICAgICAgICAgQzJGKG1JbnRyYVJlZnJlc2gsIHBlcmlvZCkuYW55KCkKKyAgICAgICAgICAgICAgICB9KQorICAgICAgICAgICAgICAgIC53aXRoU2V0dGVyKEludHJhUmVmcmVzaFNldHRlcikKKyAgICAgICAgICAgICAgICAuYnVpbGQoKSk7CisKKyAgICAgICAgYWRkUGFyYW1ldGVyKAorICAgICAgICAgICAgICAgIERlZmluZVBhcmFtKG1Qcm9maWxlTGV2ZWwsIEMyX1BBUkFNS0VZX1BST0ZJTEVfTEVWRUwpCisgICAgICAgICAgICAgICAgLndpdGhEZWZhdWx0KG5ldyBDMlN0cmVhbVByb2ZpbGVMZXZlbEluZm86Om91dHB1dCgKKyAgICAgICAgICAgICAgICAgICAgICAgIDB1LCBQUk9GSUxFX0FWQ19DT05TVFJBSU5FRF9CQVNFTElORSwgTEVWRUxfQVZDXzRfMSkpCisgICAgICAgICAgICAgICAgLndpdGhGaWVsZHMoeworICAgICAgICAgICAgICAgICAgICBDMkYobVByb2ZpbGVMZXZlbCwgcHJvZmlsZSkub25lT2YoeworICAgICAgICAgICAgICAgICAgICAgICAgUFJPRklMRV9BVkNfQkFTRUxJTkUsCisgICAgICAgICAgICAgICAgICAgICAgICBQUk9GSUxFX0FWQ19DT05TVFJBSU5FRF9CQVNFTElORSwKKyAgICAgICAgICAgICAgICAgICAgICAgIFBST0ZJTEVfQVZDX01BSU4sCisgICAgICAgICAgICAgICAgICAgIH0pLAorICAgICAgICAgICAgICAgICAgICBDMkYobVByb2ZpbGVMZXZlbCwgbGV2ZWwpLm9uZU9mKHsKKyAgICAgICAgICAgICAgICAgICAgICAgIExFVkVMX0FWQ18xLAorICAgICAgICAgICAgICAgICAgICAgICAgTEVWRUxfQVZDXzFCLAorICAgICAgICAgICAgICAgICAgICAgICAgTEVWRUxfQVZDXzFfMSwKKyAgICAgICAgICAgICAgICAgICAgICAgIExFVkVMX0FWQ18xXzIsCisgICAgICAgICAgICAgICAgICAgICAgICBMRVZFTF9BVkNfMV8zLAorICAgICAgICAgICAgICAgICAgICAgICAgTEVWRUxfQVZDXzIsCisgICAgICAgICAgICAgICAgICAgICAgICBMRVZFTF9BVkNfMl8xLAorICAgICAgICAgICAgICAgICAgICAgICAgTEVWRUxfQVZDXzJfMiwKKyAgICAgICAgICAgICAgICAgICAgICAgIExFVkVMX0FWQ18zLAorICAgICAgICAgICAgICAgICAgICAgICAgTEVWRUxfQVZDXzNfMSwKKyAgICAgICAgICAgICAgICAgICAgICAgIExFVkVMX0FWQ18zXzIsCisgICAgICAgICAgICAgICAgICAgICAgICBMRVZFTF9BVkNfNCwKKyAgICAgICAgICAgICAgICAgICAgICAgIExFVkVMX0FWQ180XzEsCisgICAgICAgICAgICAgICAgICAgICAgICBMRVZFTF9BVkNfNF8yLAorICAgICAgICAgICAgICAgICAgICAgICAgTEVWRUxfQVZDXzUsCisgICAgICAgICAgICAgICAgICAgIH0pLAorICAgICAgICAgICAgICAgIH0pCisgICAgICAgICAgICAgICAgLndpdGhTZXR0ZXIoUHJvZmlsZUxldmVsU2V0dGVyLCBtU2l6ZSwgbUZyYW1lUmF0ZSwgbUJpdHJhdGUpCisgICAgICAgICAgICAgICAgLmJ1aWxkKCkpOworCisgICAgICAgIGFkZFBhcmFtZXRlcigKKyAgICAgICAgICAgICAgICBEZWZpbmVQYXJhbShtUmVxdWVzdFN5bmMsIEMyX1BBUkFNS0VZX1JFUVVFU1RfU1lOQ19GUkFNRSkKKyAgICAgICAgICAgICAgICAud2l0aERlZmF1bHQobmV3IEMyU3RyZWFtUmVxdWVzdFN5bmNGcmFtZVR1bmluZzo6b3V0cHV0KDB1LCBDMl9GQUxTRSkpCisgICAgICAgICAgICAgICAgLndpdGhGaWVsZHMoe0MyRihtUmVxdWVzdFN5bmMsIHZhbHVlKS5vbmVPZih7IEMyX0ZBTFNFLCBDMl9UUlVFIH0pIH0pCisgICAgICAgICAgICAgICAgLndpdGhTZXR0ZXIoU2V0dGVyPGRlY2x0eXBlKCptUmVxdWVzdFN5bmMpPjo6Tm9uU3RyaWN0VmFsdWVXaXRoTm9EZXBzKQorICAgICAgICAgICAgICAgIC5idWlsZCgpKTsKKworICAgICAgICBhZGRQYXJhbWV0ZXIoCisgICAgICAgICAgICAgICAgRGVmaW5lUGFyYW0obVN5bmNGcmFtZVBlcmlvZCwgQzJfUEFSQU1LRVlfU1lOQ19GUkFNRV9JTlRFUlZBTCkKKyAgICAgICAgICAgICAgICAud2l0aERlZmF1bHQobmV3IEMyU3RyZWFtU3luY0ZyYW1lSW50ZXJ2YWxUdW5pbmc6Om91dHB1dCgwdSwgMTAwMDAwMCkpCisgICAgICAgICAgICAgICAgLndpdGhGaWVsZHMoe0MyRihtU3luY0ZyYW1lUGVyaW9kLCB2YWx1ZSkuYW55KCl9KQorICAgICAgICAgICAgICAgIC53aXRoU2V0dGVyKFNldHRlcjxkZWNsdHlwZSgqbVN5bmNGcmFtZVBlcmlvZCk+OjpTdHJpY3RWYWx1ZVdpdGhOb0RlcHMpCisgICAgICAgICAgICAgICAgLmJ1aWxkKCkpOworICAgIH0KKworICAgIHN0YXRpYyBDMlIgQml0cmF0ZVNldHRlcihib29sIG1heUJsb2NrLCBDMlA8QzJTdHJlYW1CaXRyYXRlSW5mbzo6b3V0cHV0PiAmbWUpIHsKKyAgICAgICAgKHZvaWQpbWF5QmxvY2s7CisgICAgICAgIEMyUiByZXMgPSBDMlI6Ok9rKCk7CisgICAgICAgIGlmIChtZS52LnZhbHVlIDw9IDQwOTYpIHsKKyAgICAgICAgICAgIG1lLnNldCgpLnZhbHVlID0gNDA5NjsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gcmVzOworICAgIH0KKworICAgIHN0YXRpYyBDMlIgU2l6ZVNldHRlcihib29sIG1heUJsb2NrLCBjb25zdCBDMlA8QzJTdHJlYW1QaWN0dXJlU2l6ZUluZm86OmlucHV0PiAmb2xkTWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgIEMyUDxDMlN0cmVhbVBpY3R1cmVTaXplSW5mbzo6aW5wdXQ+ICZtZSkgeworICAgICAgICAodm9pZCltYXlCbG9jazsKKyAgICAgICAgQzJSIHJlcyA9IEMyUjo6T2soKTsKKyAgICAgICAgaWYgKCFtZS5GKG1lLnYud2lkdGgpLnN1cHBvcnRzQXRBbGwobWUudi53aWR0aCkpIHsKKyAgICAgICAgICAgIHJlcyA9IHJlcy5wbHVzKEMyU2V0dGluZ1Jlc3VsdEJ1aWxkZXI6OkJhZFZhbHVlKG1lLkYobWUudi53aWR0aCkpKTsKKyAgICAgICAgICAgIG1lLnNldCgpLndpZHRoID0gb2xkTWUudi53aWR0aDsKKyAgICAgICAgfQorICAgICAgICBpZiAoIW1lLkYobWUudi5oZWlnaHQpLnN1cHBvcnRzQXRBbGwobWUudi5oZWlnaHQpKSB7CisgICAgICAgICAgICByZXMgPSByZXMucGx1cyhDMlNldHRpbmdSZXN1bHRCdWlsZGVyOjpCYWRWYWx1ZShtZS5GKG1lLnYuaGVpZ2h0KSkpOworICAgICAgICAgICAgbWUuc2V0KCkuaGVpZ2h0ID0gb2xkTWUudi5oZWlnaHQ7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHJlczsKKyAgICB9CisKKyAgICBzdGF0aWMgQzJSIFByb2ZpbGVMZXZlbFNldHRlcigKKyAgICAgICAgICAgIGJvb2wgbWF5QmxvY2ssCisgICAgICAgICAgICBDMlA8QzJTdHJlYW1Qcm9maWxlTGV2ZWxJbmZvOjpvdXRwdXQ+ICZtZSwKKyAgICAgICAgICAgIGNvbnN0IEMyUDxDMlZpZGVvU2l6ZVN0cmVhbVR1bmluZzo6aW5wdXQ+ICZzaXplLAorICAgICAgICAgICAgY29uc3QgQzJQPEMyU3RyZWFtRnJhbWVSYXRlSW5mbzo6b3V0cHV0PiAmZnJhbWVSYXRlLAorICAgICAgICAgICAgY29uc3QgQzJQPEMyQml0cmF0ZVR1bmluZzo6b3V0cHV0PiAmYml0cmF0ZSkgeworICAgICAgICAodm9pZCltYXlCbG9jazsKKyAgICAgICAgaWYgKCFtZS5GKG1lLnYucHJvZmlsZSkuc3VwcG9ydHNBdEFsbChtZS52LnByb2ZpbGUpKSB7CisgICAgICAgICAgICBtZS5zZXQoKS5wcm9maWxlID0gUFJPRklMRV9BVkNfQ09OU1RSQUlORURfQkFTRUxJTkU7CisgICAgICAgIH0KKworICAgICAgICBzdHJ1Y3QgTGV2ZWxMaW1pdHMgeworICAgICAgICAgICAgQzJDb25maWc6OmxldmVsX3QgbGV2ZWw7CisgICAgICAgICAgICBmbG9hdCBtYnNQZXJTZWM7CisgICAgICAgICAgICB1aW50NjRfdCBtYnM7CisgICAgICAgICAgICB1aW50MzJfdCBiaXRyYXRlOworICAgICAgICB9OworICAgICAgICBjb25zdGV4cHIgTGV2ZWxMaW1pdHMga0xpbWl0c1tdID0geworICAgICAgICAgICAgeyBMRVZFTF9BVkNfMSwgICAgIDE0ODUsICAgIDk5LCAgICAgNjQwMDAgfSwKKyAgICAgICAgICAgIC8vIERlY29kZXIgZG9lcyBub3QgcHJvcGVybHkgaGFuZGxlIGxldmVsIDFiLgorICAgICAgICAgICAgLy8geyBMRVZFTF9BVkNfMUIsICAgIDE0ODUsICAgOTksICAgMTI4MDAwIH0sCisgICAgICAgICAgICB7IExFVkVMX0FWQ18xXzEsICAgMzAwMCwgICAzOTYsICAgIDE5MjAwMCB9LAorICAgICAgICAgICAgeyBMRVZFTF9BVkNfMV8yLCAgIDYwMDAsICAgMzk2LCAgICAzODQwMDAgfSwKKyAgICAgICAgICAgIHsgTEVWRUxfQVZDXzFfMywgIDExODgwLCAgIDM5NiwgICAgNzY4MDAwIH0sCisgICAgICAgICAgICB7IExFVkVMX0FWQ18yLCAgICAxMTg4MCwgICAzOTYsICAgMjAwMDAwMCB9LAorICAgICAgICAgICAgeyBMRVZFTF9BVkNfMl8xLCAgMTk4MDAsICAgNzkyLCAgIDQwMDAwMDAgfSwKKyAgICAgICAgICAgIHsgTEVWRUxfQVZDXzJfMiwgIDIwMjUwLCAgMTYyMCwgICA0MDAwMDAwIH0sCisgICAgICAgICAgICB7IExFVkVMX0FWQ18zLCAgICA0MDUwMCwgIDE2MjAsICAxMDAwMDAwMCB9LAorICAgICAgICAgICAgeyBMRVZFTF9BVkNfM18xLCAxMDgwMDAsICAzNjAwLCAgMTQwMDAwMDAgfSwKKyAgICAgICAgICAgIHsgTEVWRUxfQVZDXzNfMiwgMjE2MDAwLCAgNTEyMCwgIDIwMDAwMDAwIH0sCisgICAgICAgICAgICB7IExFVkVMX0FWQ180LCAgIDI0NTc2MCwgIDgxOTIsICAyMDAwMDAwMCB9LAorICAgICAgICAgICAgeyBMRVZFTF9BVkNfNF8xLCAyNDU3NjAsICA4MTkyLCAgNTAwMDAwMDAgfSwKKyAgICAgICAgICAgIHsgTEVWRUxfQVZDXzRfMiwgNTIyMjQwLCAgODcwNCwgIDUwMDAwMDAwIH0sCisgICAgICAgICAgICB7IExFVkVMX0FWQ181LCAgIDU4OTgyNCwgMjIwODAsIDEzNTAwMDAwMCB9LAorICAgICAgICB9OworCisgICAgICAgIHVpbnQ2NF90IG1icyA9IHVpbnQ2NF90KChzaXplLnYud2lkdGggKyAxNSkgLyAxNikgKiAoKHNpemUudi5oZWlnaHQgKyAxNSkgLyAxNik7CisgICAgICAgIGZsb2F0IG1ic1BlclNlYyA9IGZsb2F0KG1icykgLyBmcmFtZVJhdGUudi52YWx1ZTsKKworICAgICAgICAvLyBDaGVjayBpZiB0aGUgc3VwcGxpZWQgbGV2ZWwgbWVldHMgdGhlIE1CIC8gYml0cmF0ZSByZXF1aXJlbWVudHMuIElmCisgICAgICAgIC8vIG5vdCwgdXBkYXRlIHRoZSBsZXZlbCB3aXRoIHRoZSBsb3dlc3QgbGV2ZWwgbWVldGluZyB0aGUgcmVxdWlyZW1lbnRzLgorCisgICAgICAgIGJvb2wgZm91bmQgPSBmYWxzZTsKKyAgICAgICAgLy8gQnkgZGVmYXVsdCBuZWVkc1VwZGF0ZSA9IGZhbHNlIGluIGNhc2UgdGhlIHN1cHBsaWVkIGxldmVsIGRvZXMgbWVldAorICAgICAgICAvLyB0aGUgcmVxdWlyZW1lbnRzLiBGb3IgTGV2ZWwgMWIsIHdlIHdhbnQgdG8gdXBkYXRlIHRoZSBsZXZlbCBhbnl3YXksCisgICAgICAgIC8vIHNvIHdlIHNldCBpdCB0byB0cnVlIGluIHRoYXQgY2FzZS4KKyAgICAgICAgYm9vbCBuZWVkc1VwZGF0ZSA9IChtZS52LmxldmVsID09IExFVkVMX0FWQ18xQik7CisgICAgICAgIGZvciAoY29uc3QgTGV2ZWxMaW1pdHMgJmxpbWl0IDoga0xpbWl0cykgeworICAgICAgICAgICAgaWYgKG1icyA8PSBsaW1pdC5tYnMgJiYgbWJzUGVyU2VjIDw9IGxpbWl0Lm1ic1BlclNlYyAmJgorICAgICAgICAgICAgICAgICAgICBiaXRyYXRlLnYudmFsdWUgPD0gbGltaXQuYml0cmF0ZSkgeworICAgICAgICAgICAgICAgIC8vIFRoaXMgaXMgdGhlIGxvd2VzdCBsZXZlbCB0aGF0IG1lZXRzIHRoZSByZXF1aXJlbWVudHMsIGFuZCBpZgorICAgICAgICAgICAgICAgIC8vIHdlIGhhdmVuJ3Qgc2VlbiB0aGUgc3VwcGxpZWQgbGV2ZWwgeWV0LCB0aGF0IG1lYW5zIHdlIGRvbid0CisgICAgICAgICAgICAgICAgLy8gbmVlZCB0aGUgdXBkYXRlLgorICAgICAgICAgICAgICAgIGlmIChuZWVkc1VwZGF0ZSkgeworICAgICAgICAgICAgICAgICAgICBBTE9HRCgiR2l2ZW4gbGV2ZWwgJXggZG9lcyBub3QgY292ZXIgY3VycmVudCBjb25maWd1cmF0aW9uOiAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICJhZGp1c3RpbmcgdG8gJXgiLCBtZS52LmxldmVsLCBsaW1pdC5sZXZlbCk7CisgICAgICAgICAgICAgICAgICAgIG1lLnNldCgpLmxldmVsID0gbGltaXQubGV2ZWw7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGZvdW5kID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChtZS52LmxldmVsID09IGxpbWl0LmxldmVsKSB7CisgICAgICAgICAgICAgICAgLy8gV2UgYnJlYWsgb3V0IG9mIHRoZSBsb29wIHdoZW4gdGhlIGxvd2VzdCBmZWFzaWJsZSBsZXZlbCBpcworICAgICAgICAgICAgICAgIC8vIGZvdW5kLiBUaGUgZmFjdCB0aGF0IHdlJ3JlIGhlcmUgbWVhbnMgdGhhdCBvdXIgbGV2ZWwgZG9lc24ndAorICAgICAgICAgICAgICAgIC8vIG1lZXQgdGhlIHJlcXVpcmVtZW50IGFuZCBuZWVkcyB0byBiZSB1cGRhdGVkLgorICAgICAgICAgICAgICAgIG5lZWRzVXBkYXRlID0gdHJ1ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBpZiAoIWZvdW5kKSB7CisgICAgICAgICAgICAvLyBXZSBzZXQgdG8gdGhlIGhpZ2hlc3Qgc3VwcG9ydGVkIGxldmVsLgorICAgICAgICAgICAgbWUuc2V0KCkubGV2ZWwgPSBMRVZFTF9BVkNfNTsKKyAgICAgICAgfQorCisgICAgICAgIHJldHVybiBDMlI6Ok9rKCk7CisgICAgfQorCisgICAgc3RhdGljIEMyUiBJbnRyYVJlZnJlc2hTZXR0ZXIoYm9vbCBtYXlCbG9jaywgQzJQPEMyU3RyZWFtSW50cmFSZWZyZXNoVHVuaW5nOjpvdXRwdXQ+ICZtZSkgeworICAgICAgICAodm9pZCltYXlCbG9jazsKKyAgICAgICAgQzJSIHJlcyA9IEMyUjo6T2soKTsKKyAgICAgICAgaWYgKG1lLnYucGVyaW9kIDwgMSkgeworICAgICAgICAgICAgbWUuc2V0KCkubW9kZSA9IEMyQ29uZmlnOjpJTlRSQV9SRUZSRVNIX0RJU0FCTEVEOworICAgICAgICAgICAgbWUuc2V0KCkucGVyaW9kID0gMDsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIC8vIG9ubHkgc3VwcG9ydCBhcmJpdHJhcnkgbW9kZSAoY3ljbGljIGluIG91ciBjYXNlKQorICAgICAgICAgICAgbWUuc2V0KCkubW9kZSA9IEMyQ29uZmlnOjpJTlRSQV9SRUZSRVNIX0FSQklUUkFSWTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gcmVzOworICAgIH0KKworICAgIElWX1BST0ZJTEVfVCBnZXRQcm9maWxlX2woKSBjb25zdCB7CisgICAgICAgIHN3aXRjaCAobVByb2ZpbGVMZXZlbC0+cHJvZmlsZSkgeworICAgICAgICBjYXNlIFBST0ZJTEVfQVZDX0NPTlNUUkFJTkVEX0JBU0VMSU5FOiAgW1tmYWxsdGhyb3VnaF1dOworICAgICAgICBjYXNlIFBST0ZJTEVfQVZDX0JBU0VMSU5FOiByZXR1cm4gSVZfUFJPRklMRV9CQVNFOworICAgICAgICBjYXNlIFBST0ZJTEVfQVZDX01BSU46ICAgICByZXR1cm4gSVZfUFJPRklMRV9NQUlOOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgQUxPR0QoIlVucmVjb2duaXplZCBwcm9maWxlOiAleCIsIG1Qcm9maWxlTGV2ZWwtPnByb2ZpbGUpOworICAgICAgICAgICAgcmV0dXJuIElWX1BST0ZJTEVfREVGQVVMVDsKKyAgICAgICAgfQorICAgIH0KKworICAgIFVXT1JEMzIgZ2V0TGV2ZWxfbCgpIGNvbnN0IHsKKyAgICAgICAgc3RydWN0IExldmVsIHsKKyAgICAgICAgICAgIEMyQ29uZmlnOjpsZXZlbF90IGMyTGV2ZWw7CisgICAgICAgICAgICBVV09SRDMyIGF2Y0xldmVsOworICAgICAgICB9OworICAgICAgICBjb25zdGV4cHIgTGV2ZWwgbGV2ZWxzW10gPSB7CisgICAgICAgICAgICB7IExFVkVMX0FWQ18xLCAgIDEwIH0sCisgICAgICAgICAgICB7IExFVkVMX0FWQ18xQiwgICA5IH0sCisgICAgICAgICAgICB7IExFVkVMX0FWQ18xXzEsIDExIH0sCisgICAgICAgICAgICB7IExFVkVMX0FWQ18xXzIsIDEyIH0sCisgICAgICAgICAgICB7IExFVkVMX0FWQ18xXzMsIDEzIH0sCisgICAgICAgICAgICB7IExFVkVMX0FWQ18yLCAgIDIwIH0sCisgICAgICAgICAgICB7IExFVkVMX0FWQ18yXzEsIDIxIH0sCisgICAgICAgICAgICB7IExFVkVMX0FWQ18yXzIsIDIyIH0sCisgICAgICAgICAgICB7IExFVkVMX0FWQ18zLCAgIDMwIH0sCisgICAgICAgICAgICB7IExFVkVMX0FWQ18zXzEsIDMxIH0sCisgICAgICAgICAgICB7IExFVkVMX0FWQ18zXzIsIDMyIH0sCisgICAgICAgICAgICB7IExFVkVMX0FWQ180LCAgIDQwIH0sCisgICAgICAgICAgICB7IExFVkVMX0FWQ180XzEsIDQxIH0sCisgICAgICAgICAgICB7IExFVkVMX0FWQ180XzIsIDQyIH0sCisgICAgICAgICAgICB7IExFVkVMX0FWQ181LCAgIDUwIH0sCisgICAgICAgIH07CisgICAgICAgIGZvciAoY29uc3QgTGV2ZWwgJmxldmVsIDogbGV2ZWxzKSB7CisgICAgICAgICAgICBpZiAobVByb2ZpbGVMZXZlbC0+bGV2ZWwgPT0gbGV2ZWwuYzJMZXZlbCkgeworICAgICAgICAgICAgICAgIHJldHVybiBsZXZlbC5hdmNMZXZlbDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBBTE9HRCgiVW5yZWNvZ25pemVkIGxldmVsOiAleCIsIG1Qcm9maWxlTGV2ZWwtPmxldmVsKTsKKyAgICAgICAgcmV0dXJuIDQxOworICAgIH0KKyAgICB1aW50MzJfdCBnZXRTeW5jRnJhbWVQZXJpb2RfbCgpIGNvbnN0IHsKKyAgICAgICAgaWYgKG1TeW5jRnJhbWVQZXJpb2QtPnZhbHVlIDwgMCB8fCBtU3luY0ZyYW1lUGVyaW9kLT52YWx1ZSA9PSBJTlQ2NF9NQVgpIHsKKyAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICB9CisgICAgICAgIGRvdWJsZSBwZXJpb2QgPSBtU3luY0ZyYW1lUGVyaW9kLT52YWx1ZSAvIDFlNiAqIG1GcmFtZVJhdGUtPnZhbHVlOworICAgICAgICByZXR1cm4gKHVpbnQzMl90KWMyX21heChjMl9taW4ocGVyaW9kICsgMC41LCBkb3VibGUoVUlOVDMyX01BWCkpLCAxLik7CisgICAgfQorCisgICAgLy8gdW5zYWZlIGdldHRlcnMKKyAgICBzdGQ6OnNoYXJlZF9wdHI8QzJTdHJlYW1QaWN0dXJlU2l6ZUluZm86OmlucHV0PiBnZXRTaXplX2woKSBjb25zdCB7IHJldHVybiBtU2l6ZTsgfQorICAgIHN0ZDo6c2hhcmVkX3B0cjxDMlN0cmVhbUludHJhUmVmcmVzaFR1bmluZzo6b3V0cHV0PiBnZXRJbnRyYVJlZnJlc2hfbCgpIGNvbnN0IHsgcmV0dXJuIG1JbnRyYVJlZnJlc2g7IH0KKyAgICBzdGQ6OnNoYXJlZF9wdHI8QzJTdHJlYW1GcmFtZVJhdGVJbmZvOjpvdXRwdXQ+IGdldEZyYW1lUmF0ZV9sKCkgY29uc3QgeyByZXR1cm4gbUZyYW1lUmF0ZTsgfQorICAgIHN0ZDo6c2hhcmVkX3B0cjxDMlN0cmVhbUJpdHJhdGVJbmZvOjpvdXRwdXQ+IGdldEJpdHJhdGVfbCgpIGNvbnN0IHsgcmV0dXJuIG1CaXRyYXRlOyB9CisgICAgc3RkOjpzaGFyZWRfcHRyPEMyU3RyZWFtUmVxdWVzdFN5bmNGcmFtZVR1bmluZzo6b3V0cHV0PiBnZXRSZXF1ZXN0U3luY19sKCkgY29uc3QgeyByZXR1cm4gbVJlcXVlc3RTeW5jOyB9CisKK3ByaXZhdGU6CisgICAgc3RkOjpzaGFyZWRfcHRyPEMyU3RyZWFtRm9ybWF0Q29uZmlnOjppbnB1dD4gbUlucHV0Rm9ybWF0OworICAgIHN0ZDo6c2hhcmVkX3B0cjxDMlN0cmVhbUZvcm1hdENvbmZpZzo6b3V0cHV0PiBtT3V0cHV0Rm9ybWF0OworICAgIHN0ZDo6c2hhcmVkX3B0cjxDMlBvcnRNaW1lQ29uZmlnOjppbnB1dD4gbUlucHV0TWVkaWFUeXBlOworICAgIHN0ZDo6c2hhcmVkX3B0cjxDMlBvcnRNaW1lQ29uZmlnOjpvdXRwdXQ+IG1PdXRwdXRNZWRpYVR5cGU7CisgICAgc3RkOjpzaGFyZWRfcHRyPEMyU3RyZWFtVXNhZ2VUdW5pbmc6OmlucHV0PiBtVXNhZ2U7CisgICAgc3RkOjpzaGFyZWRfcHRyPEMyVmlkZW9TaXplU3RyZWFtVHVuaW5nOjppbnB1dD4gbVNpemU7CisgICAgc3RkOjpzaGFyZWRfcHRyPEMyU3RyZWFtRnJhbWVSYXRlSW5mbzo6b3V0cHV0PiBtRnJhbWVSYXRlOworICAgIHN0ZDo6c2hhcmVkX3B0cjxDMlN0cmVhbVJlcXVlc3RTeW5jRnJhbWVUdW5pbmc6Om91dHB1dD4gbVJlcXVlc3RTeW5jOworICAgIHN0ZDo6c2hhcmVkX3B0cjxDMlN0cmVhbUludHJhUmVmcmVzaFR1bmluZzo6b3V0cHV0PiBtSW50cmFSZWZyZXNoOworICAgIHN0ZDo6c2hhcmVkX3B0cjxDMkJpdHJhdGVUdW5pbmc6Om91dHB1dD4gbUJpdHJhdGU7CisgICAgc3RkOjpzaGFyZWRfcHRyPEMyU3RyZWFtUHJvZmlsZUxldmVsSW5mbzo6b3V0cHV0PiBtUHJvZmlsZUxldmVsOworICAgIHN0ZDo6c2hhcmVkX3B0cjxDMlN0cmVhbVN5bmNGcmFtZUludGVydmFsVHVuaW5nOjpvdXRwdXQ+IG1TeW5jRnJhbWVQZXJpb2Q7Cit9OworCisjZGVmaW5lIGl2ZV9hcGlfZnVuY3Rpb24gIGloMjY0ZV9hcGlfZnVuY3Rpb24KKworY29uc3RleHByIGNoYXIgQ09NUE9ORU5UX05BTUVbXSA9ICJjMi5hbmRyb2lkLmF2Yy5lbmNvZGVyIjsKKworbmFtZXNwYWNlIHsKKworLy8gRnJvbSBleHRlcm5hbC9saWJhdmMvZW5jb2Rlci9paDI2NGVfYml0c3RyZWFtLmgKK2NvbnN0ZXhwciB1aW50MzJfdCBNSU5fU1RSRUFNX1NJWkUgPSAweDgwMDsKKworc3RhdGljIHNpemVfdCBHZXRDUFVDb3JlQ291bnQoKSB7CisgICAgbG9uZyBjcHVDb3JlQ291bnQgPSAxOworI2lmIGRlZmluZWQoX1NDX05QUk9DRVNTT1JTX09OTE4pCisgICAgY3B1Q29yZUNvdW50ID0gc3lzY29uZihfU0NfTlBST0NFU1NPUlNfT05MTik7CisjZWxzZQorICAgIC8vIF9TQ19OUFJPQ19PTkxOIG11c3QgYmUgZGVmaW5lZC4uLgorICAgIGNwdUNvcmVDb3VudCA9IHN5c2NvbmYoX1NDX05QUk9DX09OTE4pOworI2VuZGlmCisgICAgQ0hFQ0soY3B1Q29yZUNvdW50ID49IDEpOworICAgIEFMT0dWKCJOdW1iZXIgb2YgQ1BVIGNvcmVzOiAlbGQiLCBjcHVDb3JlQ291bnQpOworICAgIHJldHVybiAoc2l6ZV90KWNwdUNvcmVDb3VudDsKK30KKworfSAgLy8gbmFtZXNwYWNlCisKK0MyU29mdEF2Y0VuYzo6QzJTb2Z0QXZjRW5jKAorICAgICAgICBjb25zdCBjaGFyICpuYW1lLCBjMl9ub2RlX2lkX3QgaWQsIGNvbnN0IHN0ZDo6c2hhcmVkX3B0cjxJbnRmSW1wbD4gJmludGZJbXBsKQorICAgIDogU2ltcGxlQzJDb21wb25lbnQoc3RkOjptYWtlX3NoYXJlZDxTaW1wbGVJbnRlcmZhY2U8SW50ZkltcGw+PihuYW1lLCBpZCwgaW50ZkltcGwpKSwKKyAgICAgIG1JbnRmKGludGZJbXBsKSwKKyAgICAgIG1JdlZpZGVvQ29sb3JGb3JtYXQoSVZfWVVWXzQyMFApLAorICAgICAgbUFWQ0VuY1Byb2ZpbGUoSVZfUFJPRklMRV9CQVNFKSwKKyAgICAgIG1BVkNFbmNMZXZlbCg0MSksCisgICAgICBtU3RhcnRlZChmYWxzZSksCisgICAgICBtU2F3SW5wdXRFT1MoZmFsc2UpLAorICAgICAgbVNhd091dHB1dEVPUyhmYWxzZSksCisgICAgICBtU2lnbmFsbGVkRXJyb3IoZmFsc2UpLAorICAgICAgbUNvZGVjQ3R4KG51bGxwdHIpLAorICAgICAgLy8gVE9ETzogb3V0cHV0IGJ1ZmZlciBzaXplCisgICAgICBtT3V0QnVmZmVyU2l6ZSg1MjQyODgpIHsKKworICAgIC8vIElmIGR1bXAgaXMgZW5hYmxlZCwgdGhlbiBvcGVuIGNyZWF0ZSBhbiBlbXB0eSBmaWxlCisgICAgR0VORVJBVEVfRklMRV9OQU1FUygpOworICAgIENSRUFURV9EVU1QX0ZJTEUobUluRmlsZSk7CisgICAgQ1JFQVRFX0RVTVBfRklMRShtT3V0RmlsZSk7CisKKyAgICBpbml0RW5jUGFyYW1zKCk7Cit9CisKK0MyU29mdEF2Y0VuYzo6fkMyU29mdEF2Y0VuYygpIHsKKyAgICByZWxlYXNlRW5jb2RlcigpOworfQorCitjMl9zdGF0dXNfdCBDMlNvZnRBdmNFbmM6Om9uSW5pdCgpIHsKKyAgICByZXR1cm4gQzJfT0s7Cit9CisKK2MyX3N0YXR1c190IEMyU29mdEF2Y0VuYzo6b25TdG9wKCkgeworICAgIHJldHVybiBDMl9PSzsKK30KKwordm9pZCBDMlNvZnRBdmNFbmM6Om9uUmVzZXQoKSB7CisgICAgLy8gVE9ETzogdXNlIElWRV9DTURfQ1RMX1JFU0VUPworICAgIHJlbGVhc2VFbmNvZGVyKCk7CisgICAgaW5pdEVuY1BhcmFtcygpOworfQorCit2b2lkIEMyU29mdEF2Y0VuYzo6b25SZWxlYXNlKCkgeworICAgIHJlbGVhc2VFbmNvZGVyKCk7Cit9CisKK2MyX3N0YXR1c190IEMyU29mdEF2Y0VuYzo6b25GbHVzaF9zbSgpIHsKKyAgICAvLyBUT0RPOiB1c2UgSVZFX0NNRF9DVExfRkxVU0g/CisgICAgcmV0dXJuIEMyX09LOworfQorCit2b2lkICBDMlNvZnRBdmNFbmM6OmluaXRFbmNQYXJhbXMoKSB7CisgICAgbUNvZGVjQ3R4ID0gbnVsbHB0cjsKKyAgICBtTWVtUmVjb3JkcyA9IG51bGxwdHI7CisgICAgbU51bU1lbVJlY29yZHMgPSBERUZBVUxUX01FTV9SRUNfQ05UOworICAgIG1IZWFkZXJHZW5lcmF0ZWQgPSAwOworICAgIG1OdW1Db3JlcyA9IEdldENQVUNvcmVDb3VudCgpOworICAgIG1BcmNoID0gREVGQVVMVF9BUkNIOworICAgIG1TbGljZU1vZGUgPSBERUZBVUxUX1NMSUNFX01PREU7CisgICAgbVNsaWNlUGFyYW0gPSBERUZBVUxUX1NMSUNFX1BBUkFNOworICAgIG1IYWxmUGVsRW5hYmxlID0gREVGQVVMVF9IUEVMOworICAgIG1JSW50ZXJ2YWwgPSBERUZBVUxUX0lfSU5URVJWQUw7CisgICAgbUlEUkludGVydmFsID0gREVGQVVMVF9JRFJfSU5URVJWQUw7CisgICAgbURpc2FibGVEZWJsa0xldmVsID0gREVGQVVMVF9ESVNBQkxFX0RFQkxLX0xFVkVMOworICAgIG1FbmFibGVGYXN0U2FkID0gREVGQVVMVF9FTkFCTEVfRkFTVF9TQUQ7CisgICAgbUVuYWJsZUFsdFJlZiA9IERFRkFVTFRfRU5BQkxFX0FMVF9SRUY7CisgICAgbUVuY1NwZWVkID0gREVGQVVMVF9FTkNfU1BFRUQ7CisgICAgbUludHJhNHg0ID0gREVGQVVMVF9JTlRSQTR4NDsKKyAgICBtQ29uc3RyYWluZWRJbnRyYUZsYWcgPSBERUZBVUxUX0NPTlNUUkFJTkVEX0lOVFJBOworICAgIG1QU05SRW5hYmxlID0gREVGQVVMVF9QU05SX0VOQUJMRTsKKyAgICBtUmVjb25FbmFibGUgPSBERUZBVUxUX1JFQ09OX0VOQUJMRTsKKyAgICBtRW50cm9weU1vZGUgPSBERUZBVUxUX0VOVFJPUFlfTU9ERTsKKyAgICBtQmZyYW1lcyA9IERFRkFVTFRfQl9GUkFNRVM7CisKKyAgICBnZXR0aW1lb2ZkYXkoJm1UaW1lU3RhcnQsIG51bGxwdHIpOworICAgIGdldHRpbWVvZmRheSgmbVRpbWVFbmQsIG51bGxwdHIpOworfQorCitjMl9zdGF0dXNfdCBDMlNvZnRBdmNFbmM6OnNldERpbWVuc2lvbnMoKSB7CisgICAgaXZlX2N0bF9zZXRfZGltZW5zaW9uc19pcF90IHNfZGltZW5zaW9uc19pcDsKKyAgICBpdmVfY3RsX3NldF9kaW1lbnNpb25zX29wX3Qgc19kaW1lbnNpb25zX29wOworICAgIElWX1NUQVRVU19UIHN0YXR1czsKKworICAgIHNfZGltZW5zaW9uc19pcC5lX2NtZCA9IElWRV9DTURfVklERU9fQ1RMOworICAgIHNfZGltZW5zaW9uc19pcC5lX3N1Yl9jbWQgPSBJVkVfQ01EX0NUTF9TRVRfRElNRU5TSU9OUzsKKyAgICBzX2RpbWVuc2lvbnNfaXAudTRfaHQgPSBtU2l6ZS0+aGVpZ2h0OworICAgIHNfZGltZW5zaW9uc19pcC51NF93ZCA9IG1TaXplLT53aWR0aDsKKworICAgIHNfZGltZW5zaW9uc19pcC51NF90aW1lc3RhbXBfaGlnaCA9IC0xOworICAgIHNfZGltZW5zaW9uc19pcC51NF90aW1lc3RhbXBfbG93ID0gLTE7CisKKyAgICBzX2RpbWVuc2lvbnNfaXAudTRfc2l6ZSA9IHNpemVvZihpdmVfY3RsX3NldF9kaW1lbnNpb25zX2lwX3QpOworICAgIHNfZGltZW5zaW9uc19vcC51NF9zaXplID0gc2l6ZW9mKGl2ZV9jdGxfc2V0X2RpbWVuc2lvbnNfb3BfdCk7CisKKyAgICBzdGF0dXMgPSBpdmVfYXBpX2Z1bmN0aW9uKG1Db2RlY0N0eCwgJnNfZGltZW5zaW9uc19pcCwgJnNfZGltZW5zaW9uc19vcCk7CisgICAgaWYgKHN0YXR1cyAhPSBJVl9TVUNDRVNTKSB7CisgICAgICAgIEFMT0dFKCJVbmFibGUgdG8gc2V0IGZyYW1lIGRpbWVuc2lvbnMgPSAweCV4XG4iLAorICAgICAgICAgICAgICAgIHNfZGltZW5zaW9uc19vcC51NF9lcnJvcl9jb2RlKTsKKyAgICAgICAgcmV0dXJuIEMyX0NPUlJVUFRFRDsKKyAgICB9CisgICAgcmV0dXJuIEMyX09LOworfQorCitjMl9zdGF0dXNfdCBDMlNvZnRBdmNFbmM6OnNldE51bUNvcmVzKCkgeworICAgIElWX1NUQVRVU19UIHN0YXR1czsKKyAgICBpdmVfY3RsX3NldF9udW1fY29yZXNfaXBfdCBzX251bV9jb3Jlc19pcDsKKyAgICBpdmVfY3RsX3NldF9udW1fY29yZXNfb3BfdCBzX251bV9jb3Jlc19vcDsKKyAgICBzX251bV9jb3Jlc19pcC5lX2NtZCA9IElWRV9DTURfVklERU9fQ1RMOworICAgIHNfbnVtX2NvcmVzX2lwLmVfc3ViX2NtZCA9IElWRV9DTURfQ1RMX1NFVF9OVU1fQ09SRVM7CisgICAgc19udW1fY29yZXNfaXAudTRfbnVtX2NvcmVzID0gTUlOKG1OdW1Db3JlcywgQ09ERUNfTUFYX0NPUkVTKTsKKyAgICBzX251bV9jb3Jlc19pcC51NF90aW1lc3RhbXBfaGlnaCA9IC0xOworICAgIHNfbnVtX2NvcmVzX2lwLnU0X3RpbWVzdGFtcF9sb3cgPSAtMTsKKyAgICBzX251bV9jb3Jlc19pcC51NF9zaXplID0gc2l6ZW9mKGl2ZV9jdGxfc2V0X251bV9jb3Jlc19pcF90KTsKKworICAgIHNfbnVtX2NvcmVzX29wLnU0X3NpemUgPSBzaXplb2YoaXZlX2N0bF9zZXRfbnVtX2NvcmVzX29wX3QpOworCisgICAgc3RhdHVzID0gaXZlX2FwaV9mdW5jdGlvbigKKyAgICAgICAgICAgIG1Db2RlY0N0eCwgKHZvaWQgKikgJnNfbnVtX2NvcmVzX2lwLCAodm9pZCAqKSAmc19udW1fY29yZXNfb3ApOworICAgIGlmIChzdGF0dXMgIT0gSVZfU1VDQ0VTUykgeworICAgICAgICBBTE9HRSgiVW5hYmxlIHRvIHNldCBwcm9jZXNzb3IgcGFyYW1zID0gMHgleFxuIiwKKyAgICAgICAgICAgICAgICBzX251bV9jb3Jlc19vcC51NF9lcnJvcl9jb2RlKTsKKyAgICAgICAgcmV0dXJuIEMyX0NPUlJVUFRFRDsKKyAgICB9CisgICAgcmV0dXJuIEMyX09LOworfQorCitjMl9zdGF0dXNfdCBDMlNvZnRBdmNFbmM6OnNldEZyYW1lUmF0ZSgpIHsKKyAgICBpdmVfY3RsX3NldF9mcmFtZV9yYXRlX2lwX3Qgc19mcmFtZV9yYXRlX2lwOworICAgIGl2ZV9jdGxfc2V0X2ZyYW1lX3JhdGVfb3BfdCBzX2ZyYW1lX3JhdGVfb3A7CisgICAgSVZfU1RBVFVTX1Qgc3RhdHVzOworCisgICAgc19mcmFtZV9yYXRlX2lwLmVfY21kID0gSVZFX0NNRF9WSURFT19DVEw7CisgICAgc19mcmFtZV9yYXRlX2lwLmVfc3ViX2NtZCA9IElWRV9DTURfQ1RMX1NFVF9GUkFNRVJBVEU7CisKKyAgICBzX2ZyYW1lX3JhdGVfaXAudTRfc3JjX2ZyYW1lX3JhdGUgPSBtRnJhbWVSYXRlLT52YWx1ZSArIDAuNTsKKyAgICBzX2ZyYW1lX3JhdGVfaXAudTRfdGd0X2ZyYW1lX3JhdGUgPSBtRnJhbWVSYXRlLT52YWx1ZSArIDAuNTsKKworICAgIHNfZnJhbWVfcmF0ZV9pcC51NF90aW1lc3RhbXBfaGlnaCA9IC0xOworICAgIHNfZnJhbWVfcmF0ZV9pcC51NF90aW1lc3RhbXBfbG93ID0gLTE7CisKKyAgICBzX2ZyYW1lX3JhdGVfaXAudTRfc2l6ZSA9IHNpemVvZihpdmVfY3RsX3NldF9mcmFtZV9yYXRlX2lwX3QpOworICAgIHNfZnJhbWVfcmF0ZV9vcC51NF9zaXplID0gc2l6ZW9mKGl2ZV9jdGxfc2V0X2ZyYW1lX3JhdGVfb3BfdCk7CisKKyAgICBzdGF0dXMgPSBpdmVfYXBpX2Z1bmN0aW9uKG1Db2RlY0N0eCwgJnNfZnJhbWVfcmF0ZV9pcCwgJnNfZnJhbWVfcmF0ZV9vcCk7CisgICAgaWYgKHN0YXR1cyAhPSBJVl9TVUNDRVNTKSB7CisgICAgICAgIEFMT0dFKCJVbmFibGUgdG8gc2V0IGZyYW1lIHJhdGUgPSAweCV4XG4iLAorICAgICAgICAgICAgICAgIHNfZnJhbWVfcmF0ZV9vcC51NF9lcnJvcl9jb2RlKTsKKyAgICAgICAgcmV0dXJuIEMyX0NPUlJVUFRFRDsKKyAgICB9CisgICAgcmV0dXJuIEMyX09LOworfQorCitjMl9zdGF0dXNfdCBDMlNvZnRBdmNFbmM6OnNldElwZVBhcmFtcygpIHsKKyAgICBpdmVfY3RsX3NldF9pcGVfcGFyYW1zX2lwX3Qgc19pcGVfcGFyYW1zX2lwOworICAgIGl2ZV9jdGxfc2V0X2lwZV9wYXJhbXNfb3BfdCBzX2lwZV9wYXJhbXNfb3A7CisgICAgSVZfU1RBVFVTX1Qgc3RhdHVzOworCisgICAgc19pcGVfcGFyYW1zX2lwLmVfY21kID0gSVZFX0NNRF9WSURFT19DVEw7CisgICAgc19pcGVfcGFyYW1zX2lwLmVfc3ViX2NtZCA9IElWRV9DTURfQ1RMX1NFVF9JUEVfUEFSQU1TOworCisgICAgc19pcGVfcGFyYW1zX2lwLnU0X2VuYWJsZV9pbnRyYV80eDQgPSBtSW50cmE0eDQ7CisgICAgc19pcGVfcGFyYW1zX2lwLnU0X2VuY19zcGVlZF9wcmVzZXQgPSBtRW5jU3BlZWQ7CisgICAgc19pcGVfcGFyYW1zX2lwLnU0X2NvbnN0cmFpbmVkX2ludHJhX3ByZWQgPSBtQ29uc3RyYWluZWRJbnRyYUZsYWc7CisKKyAgICBzX2lwZV9wYXJhbXNfaXAudTRfdGltZXN0YW1wX2hpZ2ggPSAtMTsKKyAgICBzX2lwZV9wYXJhbXNfaXAudTRfdGltZXN0YW1wX2xvdyA9IC0xOworCisgICAgc19pcGVfcGFyYW1zX2lwLnU0X3NpemUgPSBzaXplb2YoaXZlX2N0bF9zZXRfaXBlX3BhcmFtc19pcF90KTsKKyAgICBzX2lwZV9wYXJhbXNfb3AudTRfc2l6ZSA9IHNpemVvZihpdmVfY3RsX3NldF9pcGVfcGFyYW1zX29wX3QpOworCisgICAgc3RhdHVzID0gaXZlX2FwaV9mdW5jdGlvbihtQ29kZWNDdHgsICZzX2lwZV9wYXJhbXNfaXAsICZzX2lwZV9wYXJhbXNfb3ApOworICAgIGlmIChzdGF0dXMgIT0gSVZfU1VDQ0VTUykgeworICAgICAgICBBTE9HRSgiVW5hYmxlIHRvIHNldCBpcGUgcGFyYW1zID0gMHgleFxuIiwKKyAgICAgICAgICAgICAgICBzX2lwZV9wYXJhbXNfb3AudTRfZXJyb3JfY29kZSk7CisgICAgICAgIHJldHVybiBDMl9DT1JSVVBURUQ7CisgICAgfQorICAgIHJldHVybiBDMl9PSzsKK30KKworYzJfc3RhdHVzX3QgQzJTb2Z0QXZjRW5jOjpzZXRCaXRSYXRlKCkgeworICAgIGl2ZV9jdGxfc2V0X2JpdHJhdGVfaXBfdCBzX2JpdHJhdGVfaXA7CisgICAgaXZlX2N0bF9zZXRfYml0cmF0ZV9vcF90IHNfYml0cmF0ZV9vcDsKKyAgICBJVl9TVEFUVVNfVCBzdGF0dXM7CisKKyAgICBzX2JpdHJhdGVfaXAuZV9jbWQgPSBJVkVfQ01EX1ZJREVPX0NUTDsKKyAgICBzX2JpdHJhdGVfaXAuZV9zdWJfY21kID0gSVZFX0NNRF9DVExfU0VUX0JJVFJBVEU7CisKKyAgICBzX2JpdHJhdGVfaXAudTRfdGFyZ2V0X2JpdHJhdGUgPSBtQml0cmF0ZS0+dmFsdWU7CisKKyAgICBzX2JpdHJhdGVfaXAudTRfdGltZXN0YW1wX2hpZ2ggPSAtMTsKKyAgICBzX2JpdHJhdGVfaXAudTRfdGltZXN0YW1wX2xvdyA9IC0xOworCisgICAgc19iaXRyYXRlX2lwLnU0X3NpemUgPSBzaXplb2YoaXZlX2N0bF9zZXRfYml0cmF0ZV9pcF90KTsKKyAgICBzX2JpdHJhdGVfb3AudTRfc2l6ZSA9IHNpemVvZihpdmVfY3RsX3NldF9iaXRyYXRlX29wX3QpOworCisgICAgc3RhdHVzID0gaXZlX2FwaV9mdW5jdGlvbihtQ29kZWNDdHgsICZzX2JpdHJhdGVfaXAsICZzX2JpdHJhdGVfb3ApOworICAgIGlmIChzdGF0dXMgIT0gSVZfU1VDQ0VTUykgeworICAgICAgICBBTE9HRSgiVW5hYmxlIHRvIHNldCBiaXQgcmF0ZSA9IDB4JXhcbiIsIHNfYml0cmF0ZV9vcC51NF9lcnJvcl9jb2RlKTsKKyAgICAgICAgcmV0dXJuIEMyX0NPUlJVUFRFRDsKKyAgICB9CisgICAgcmV0dXJuIEMyX09LOworfQorCitjMl9zdGF0dXNfdCBDMlNvZnRBdmNFbmM6OnNldEZyYW1lVHlwZShJVl9QSUNUVVJFX0NPRElOR19UWVBFX1QgZV9mcmFtZV90eXBlKSB7CisgICAgaXZlX2N0bF9zZXRfZnJhbWVfdHlwZV9pcF90IHNfZnJhbWVfdHlwZV9pcDsKKyAgICBpdmVfY3RsX3NldF9mcmFtZV90eXBlX29wX3Qgc19mcmFtZV90eXBlX29wOworICAgIElWX1NUQVRVU19UIHN0YXR1czsKKyAgICBzX2ZyYW1lX3R5cGVfaXAuZV9jbWQgPSBJVkVfQ01EX1ZJREVPX0NUTDsKKyAgICBzX2ZyYW1lX3R5cGVfaXAuZV9zdWJfY21kID0gSVZFX0NNRF9DVExfU0VUX0ZSQU1FVFlQRTsKKworICAgIHNfZnJhbWVfdHlwZV9pcC5lX2ZyYW1lX3R5cGUgPSBlX2ZyYW1lX3R5cGU7CisKKyAgICBzX2ZyYW1lX3R5cGVfaXAudTRfdGltZXN0YW1wX2hpZ2ggPSAtMTsKKyAgICBzX2ZyYW1lX3R5cGVfaXAudTRfdGltZXN0YW1wX2xvdyA9IC0xOworCisgICAgc19mcmFtZV90eXBlX2lwLnU0X3NpemUgPSBzaXplb2YoaXZlX2N0bF9zZXRfZnJhbWVfdHlwZV9pcF90KTsKKyAgICBzX2ZyYW1lX3R5cGVfb3AudTRfc2l6ZSA9IHNpemVvZihpdmVfY3RsX3NldF9mcmFtZV90eXBlX29wX3QpOworCisgICAgc3RhdHVzID0gaXZlX2FwaV9mdW5jdGlvbihtQ29kZWNDdHgsICZzX2ZyYW1lX3R5cGVfaXAsICZzX2ZyYW1lX3R5cGVfb3ApOworICAgIGlmIChzdGF0dXMgIT0gSVZfU1VDQ0VTUykgeworICAgICAgICBBTE9HRSgiVW5hYmxlIHRvIHNldCBmcmFtZSB0eXBlID0gMHgleFxuIiwKKyAgICAgICAgICAgICAgICBzX2ZyYW1lX3R5cGVfb3AudTRfZXJyb3JfY29kZSk7CisgICAgICAgIHJldHVybiBDMl9DT1JSVVBURUQ7CisgICAgfQorICAgIHJldHVybiBDMl9PSzsKK30KKworYzJfc3RhdHVzX3QgQzJTb2Z0QXZjRW5jOjpzZXRRcCgpIHsKKyAgICBpdmVfY3RsX3NldF9xcF9pcF90IHNfcXBfaXA7CisgICAgaXZlX2N0bF9zZXRfcXBfb3BfdCBzX3FwX29wOworICAgIElWX1NUQVRVU19UIHN0YXR1czsKKworICAgIHNfcXBfaXAuZV9jbWQgPSBJVkVfQ01EX1ZJREVPX0NUTDsKKyAgICBzX3FwX2lwLmVfc3ViX2NtZCA9IElWRV9DTURfQ1RMX1NFVF9RUDsKKworICAgIHNfcXBfaXAudTRfaV9xcCA9IERFRkFVTFRfSV9RUDsKKyAgICBzX3FwX2lwLnU0X2lfcXBfbWF4ID0gREVGQVVMVF9RUF9NQVg7CisgICAgc19xcF9pcC51NF9pX3FwX21pbiA9IERFRkFVTFRfUVBfTUlOOworCisgICAgc19xcF9pcC51NF9wX3FwID0gREVGQVVMVF9QX1FQOworICAgIHNfcXBfaXAudTRfcF9xcF9tYXggPSBERUZBVUxUX1FQX01BWDsKKyAgICBzX3FwX2lwLnU0X3BfcXBfbWluID0gREVGQVVMVF9RUF9NSU47CisKKyAgICBzX3FwX2lwLnU0X2JfcXAgPSBERUZBVUxUX1BfUVA7CisgICAgc19xcF9pcC51NF9iX3FwX21heCA9IERFRkFVTFRfUVBfTUFYOworICAgIHNfcXBfaXAudTRfYl9xcF9taW4gPSBERUZBVUxUX1FQX01JTjsKKworICAgIHNfcXBfaXAudTRfdGltZXN0YW1wX2hpZ2ggPSAtMTsKKyAgICBzX3FwX2lwLnU0X3RpbWVzdGFtcF9sb3cgPSAtMTsKKworICAgIHNfcXBfaXAudTRfc2l6ZSA9IHNpemVvZihpdmVfY3RsX3NldF9xcF9pcF90KTsKKyAgICBzX3FwX29wLnU0X3NpemUgPSBzaXplb2YoaXZlX2N0bF9zZXRfcXBfb3BfdCk7CisKKyAgICBzdGF0dXMgPSBpdmVfYXBpX2Z1bmN0aW9uKG1Db2RlY0N0eCwgJnNfcXBfaXAsICZzX3FwX29wKTsKKyAgICBpZiAoc3RhdHVzICE9IElWX1NVQ0NFU1MpIHsKKyAgICAgICAgQUxPR0UoIlVuYWJsZSB0byBzZXQgcXAgMHgleFxuIiwgc19xcF9vcC51NF9lcnJvcl9jb2RlKTsKKyAgICAgICAgcmV0dXJuIEMyX0NPUlJVUFRFRDsKKyAgICB9CisgICAgcmV0dXJuIEMyX09LOworfQorCitjMl9zdGF0dXNfdCBDMlNvZnRBdmNFbmM6OnNldEVuY01vZGUoSVZFX0VOQ19NT0RFX1QgZV9lbmNfbW9kZSkgeworICAgIElWX1NUQVRVU19UIHN0YXR1czsKKyAgICBpdmVfY3RsX3NldF9lbmNfbW9kZV9pcF90IHNfZW5jX21vZGVfaXA7CisgICAgaXZlX2N0bF9zZXRfZW5jX21vZGVfb3BfdCBzX2VuY19tb2RlX29wOworCisgICAgc19lbmNfbW9kZV9pcC5lX2NtZCA9IElWRV9DTURfVklERU9fQ1RMOworICAgIHNfZW5jX21vZGVfaXAuZV9zdWJfY21kID0gSVZFX0NNRF9DVExfU0VUX0VOQ19NT0RFOworCisgICAgc19lbmNfbW9kZV9pcC5lX2VuY19tb2RlID0gZV9lbmNfbW9kZTsKKworICAgIHNfZW5jX21vZGVfaXAudTRfdGltZXN0YW1wX2hpZ2ggPSAtMTsKKyAgICBzX2VuY19tb2RlX2lwLnU0X3RpbWVzdGFtcF9sb3cgPSAtMTsKKworICAgIHNfZW5jX21vZGVfaXAudTRfc2l6ZSA9IHNpemVvZihpdmVfY3RsX3NldF9lbmNfbW9kZV9pcF90KTsKKyAgICBzX2VuY19tb2RlX29wLnU0X3NpemUgPSBzaXplb2YoaXZlX2N0bF9zZXRfZW5jX21vZGVfb3BfdCk7CisKKyAgICBzdGF0dXMgPSBpdmVfYXBpX2Z1bmN0aW9uKG1Db2RlY0N0eCwgJnNfZW5jX21vZGVfaXAsICZzX2VuY19tb2RlX29wKTsKKyAgICBpZiAoc3RhdHVzICE9IElWX1NVQ0NFU1MpIHsKKyAgICAgICAgQUxPR0UoIlVuYWJsZSB0byBzZXQgaW4gaGVhZGVyIGVuY29kZSBtb2RlID0gMHgleFxuIiwKKyAgICAgICAgICAgICAgICBzX2VuY19tb2RlX29wLnU0X2Vycm9yX2NvZGUpOworICAgICAgICByZXR1cm4gQzJfQ09SUlVQVEVEOworICAgIH0KKyAgICByZXR1cm4gQzJfT0s7Cit9CisKK2MyX3N0YXR1c190IEMyU29mdEF2Y0VuYzo6c2V0VmJ2UGFyYW1zKCkgeworICAgIGl2ZV9jdGxfc2V0X3Zidl9wYXJhbXNfaXBfdCBzX3Zidl9pcDsKKyAgICBpdmVfY3RsX3NldF92YnZfcGFyYW1zX29wX3Qgc192YnZfb3A7CisgICAgSVZfU1RBVFVTX1Qgc3RhdHVzOworCisgICAgc192YnZfaXAuZV9jbWQgPSBJVkVfQ01EX1ZJREVPX0NUTDsKKyAgICBzX3Zidl9pcC5lX3N1Yl9jbWQgPSBJVkVfQ01EX0NUTF9TRVRfVkJWX1BBUkFNUzsKKworICAgIHNfdmJ2X2lwLnU0X3Zidl9idWZfc2l6ZSA9IDA7CisgICAgc192YnZfaXAudTRfdmJ2X2J1ZmZlcl9kZWxheSA9IDEwMDA7CisKKyAgICBzX3Zidl9pcC51NF90aW1lc3RhbXBfaGlnaCA9IC0xOworICAgIHNfdmJ2X2lwLnU0X3RpbWVzdGFtcF9sb3cgPSAtMTsKKworICAgIHNfdmJ2X2lwLnU0X3NpemUgPSBzaXplb2YoaXZlX2N0bF9zZXRfdmJ2X3BhcmFtc19pcF90KTsKKyAgICBzX3Zidl9vcC51NF9zaXplID0gc2l6ZW9mKGl2ZV9jdGxfc2V0X3Zidl9wYXJhbXNfb3BfdCk7CisKKyAgICBzdGF0dXMgPSBpdmVfYXBpX2Z1bmN0aW9uKG1Db2RlY0N0eCwgJnNfdmJ2X2lwLCAmc192YnZfb3ApOworICAgIGlmIChzdGF0dXMgIT0gSVZfU1VDQ0VTUykgeworICAgICAgICBBTE9HRSgiVW5hYmxlIHRvIHNldCBWQlYgcGFyYW1zID0gMHgleFxuIiwgc192YnZfb3AudTRfZXJyb3JfY29kZSk7CisgICAgICAgIHJldHVybiBDMl9DT1JSVVBURUQ7CisgICAgfQorICAgIHJldHVybiBDMl9PSzsKK30KKworYzJfc3RhdHVzX3QgQzJTb2Z0QXZjRW5jOjpzZXRBaXJQYXJhbXMoKSB7CisgICAgaXZlX2N0bF9zZXRfYWlyX3BhcmFtc19pcF90IHNfYWlyX2lwOworICAgIGl2ZV9jdGxfc2V0X2Fpcl9wYXJhbXNfb3BfdCBzX2Fpcl9vcDsKKyAgICBJVl9TVEFUVVNfVCBzdGF0dXM7CisKKyAgICBzX2Fpcl9pcC5lX2NtZCA9IElWRV9DTURfVklERU9fQ1RMOworICAgIHNfYWlyX2lwLmVfc3ViX2NtZCA9IElWRV9DTURfQ1RMX1NFVF9BSVJfUEFSQU1TOworCisgICAgc19haXJfaXAuZV9haXJfbW9kZSA9CisgICAgICAgIChtSW50cmFSZWZyZXNoLT5tb2RlID09IEMyQ29uZmlnOjpJTlRSQV9SRUZSRVNIX0RJU0FCTEVEIHx8IG1JbnRyYVJlZnJlc2gtPnBlcmlvZCA8IDEpCisgICAgICAgICAgICA/IElWRV9BSVJfTU9ERV9OT05FIDogSVZFX0FJUl9NT0RFX0NZQ0xJQzsKKyAgICBzX2Fpcl9pcC51NF9haXJfcmVmcmVzaF9wZXJpb2QgPSBtSW50cmFSZWZyZXNoLT5wZXJpb2Q7CisKKyAgICBzX2Fpcl9pcC51NF90aW1lc3RhbXBfaGlnaCA9IC0xOworICAgIHNfYWlyX2lwLnU0X3RpbWVzdGFtcF9sb3cgPSAtMTsKKworICAgIHNfYWlyX2lwLnU0X3NpemUgPSBzaXplb2YoaXZlX2N0bF9zZXRfYWlyX3BhcmFtc19pcF90KTsKKyAgICBzX2Fpcl9vcC51NF9zaXplID0gc2l6ZW9mKGl2ZV9jdGxfc2V0X2Fpcl9wYXJhbXNfb3BfdCk7CisKKyAgICBzdGF0dXMgPSBpdmVfYXBpX2Z1bmN0aW9uKG1Db2RlY0N0eCwgJnNfYWlyX2lwLCAmc19haXJfb3ApOworICAgIGlmIChzdGF0dXMgIT0gSVZfU1VDQ0VTUykgeworICAgICAgICBBTE9HRSgiVW5hYmxlIHRvIHNldCBhaXIgcGFyYW1zID0gMHgleFxuIiwgc19haXJfb3AudTRfZXJyb3JfY29kZSk7CisgICAgICAgIHJldHVybiBDMl9DT1JSVVBURUQ7CisgICAgfQorICAgIHJldHVybiBDMl9PSzsKK30KKworYzJfc3RhdHVzX3QgQzJTb2Z0QXZjRW5jOjpzZXRNZVBhcmFtcygpIHsKKyAgICBJVl9TVEFUVVNfVCBzdGF0dXM7CisgICAgaXZlX2N0bF9zZXRfbWVfcGFyYW1zX2lwX3Qgc19tZV9wYXJhbXNfaXA7CisgICAgaXZlX2N0bF9zZXRfbWVfcGFyYW1zX29wX3Qgc19tZV9wYXJhbXNfb3A7CisKKyAgICBzX21lX3BhcmFtc19pcC5lX2NtZCA9IElWRV9DTURfVklERU9fQ1RMOworICAgIHNfbWVfcGFyYW1zX2lwLmVfc3ViX2NtZCA9IElWRV9DTURfQ1RMX1NFVF9NRV9QQVJBTVM7CisKKyAgICBzX21lX3BhcmFtc19pcC51NF9lbmFibGVfZmFzdF9zYWQgPSBtRW5hYmxlRmFzdFNhZDsKKyAgICBzX21lX3BhcmFtc19pcC51NF9lbmFibGVfYWx0X3JlZiA9IG1FbmFibGVBbHRSZWY7CisKKyAgICBzX21lX3BhcmFtc19pcC51NF9lbmFibGVfaHBlbCA9IG1IYWxmUGVsRW5hYmxlOworICAgIHNfbWVfcGFyYW1zX2lwLnU0X2VuYWJsZV9xcGVsID0gREVGQVVMVF9RUEVMOworICAgIHNfbWVfcGFyYW1zX2lwLnU0X21lX3NwZWVkX3ByZXNldCA9IERFRkFVTFRfTUVfU1BFRUQ7CisgICAgc19tZV9wYXJhbXNfaXAudTRfc3JjaF9ybmdfeCA9IERFRkFVTFRfU1JDSF9STkdfWDsKKyAgICBzX21lX3BhcmFtc19pcC51NF9zcmNoX3JuZ195ID0gREVGQVVMVF9TUkNIX1JOR19ZOworCisgICAgc19tZV9wYXJhbXNfaXAudTRfdGltZXN0YW1wX2hpZ2ggPSAtMTsKKyAgICBzX21lX3BhcmFtc19pcC51NF90aW1lc3RhbXBfbG93ID0gLTE7CisKKyAgICBzX21lX3BhcmFtc19pcC51NF9zaXplID0gc2l6ZW9mKGl2ZV9jdGxfc2V0X21lX3BhcmFtc19pcF90KTsKKyAgICBzX21lX3BhcmFtc19vcC51NF9zaXplID0gc2l6ZW9mKGl2ZV9jdGxfc2V0X21lX3BhcmFtc19vcF90KTsKKworICAgIHN0YXR1cyA9IGl2ZV9hcGlfZnVuY3Rpb24obUNvZGVjQ3R4LCAmc19tZV9wYXJhbXNfaXAsICZzX21lX3BhcmFtc19vcCk7CisgICAgaWYgKHN0YXR1cyAhPSBJVl9TVUNDRVNTKSB7CisgICAgICAgIEFMT0dFKCJVbmFibGUgdG8gc2V0IG1lIHBhcmFtcyA9IDB4JXhcbiIsIHNfbWVfcGFyYW1zX29wLnU0X2Vycm9yX2NvZGUpOworICAgICAgICByZXR1cm4gQzJfQ09SUlVQVEVEOworICAgIH0KKyAgICByZXR1cm4gQzJfT0s7Cit9CisKK2MyX3N0YXR1c190IEMyU29mdEF2Y0VuYzo6c2V0R29wUGFyYW1zKCkgeworICAgIElWX1NUQVRVU19UIHN0YXR1czsKKyAgICBpdmVfY3RsX3NldF9nb3BfcGFyYW1zX2lwX3Qgc19nb3BfcGFyYW1zX2lwOworICAgIGl2ZV9jdGxfc2V0X2dvcF9wYXJhbXNfb3BfdCBzX2dvcF9wYXJhbXNfb3A7CisKKyAgICBzX2dvcF9wYXJhbXNfaXAuZV9jbWQgPSBJVkVfQ01EX1ZJREVPX0NUTDsKKyAgICBzX2dvcF9wYXJhbXNfaXAuZV9zdWJfY21kID0gSVZFX0NNRF9DVExfU0VUX0dPUF9QQVJBTVM7CisKKyAgICBzX2dvcF9wYXJhbXNfaXAudTRfaV9mcm1faW50ZXJ2YWwgPSBtSUludGVydmFsOworICAgIHNfZ29wX3BhcmFtc19pcC51NF9pZHJfZnJtX2ludGVydmFsID0gbUlEUkludGVydmFsOworCisgICAgc19nb3BfcGFyYW1zX2lwLnU0X3RpbWVzdGFtcF9oaWdoID0gLTE7CisgICAgc19nb3BfcGFyYW1zX2lwLnU0X3RpbWVzdGFtcF9sb3cgPSAtMTsKKworICAgIHNfZ29wX3BhcmFtc19pcC51NF9zaXplID0gc2l6ZW9mKGl2ZV9jdGxfc2V0X2dvcF9wYXJhbXNfaXBfdCk7CisgICAgc19nb3BfcGFyYW1zX29wLnU0X3NpemUgPSBzaXplb2YoaXZlX2N0bF9zZXRfZ29wX3BhcmFtc19vcF90KTsKKworICAgIHN0YXR1cyA9IGl2ZV9hcGlfZnVuY3Rpb24obUNvZGVjQ3R4LCAmc19nb3BfcGFyYW1zX2lwLCAmc19nb3BfcGFyYW1zX29wKTsKKyAgICBpZiAoc3RhdHVzICE9IElWX1NVQ0NFU1MpIHsKKyAgICAgICAgQUxPR0UoIlVuYWJsZSB0byBzZXQgR09QIHBhcmFtcyA9IDB4JXhcbiIsCisgICAgICAgICAgICAgICAgc19nb3BfcGFyYW1zX29wLnU0X2Vycm9yX2NvZGUpOworICAgICAgICByZXR1cm4gQzJfQ09SUlVQVEVEOworICAgIH0KKyAgICByZXR1cm4gQzJfT0s7Cit9CisKK2MyX3N0YXR1c190IEMyU29mdEF2Y0VuYzo6c2V0UHJvZmlsZVBhcmFtcygpIHsKKyAgICBJbnRmSW1wbDo6TG9jayBsb2NrID0gbUludGYtPmxvY2soKTsKKworICAgIElWX1NUQVRVU19UIHN0YXR1czsKKyAgICBpdmVfY3RsX3NldF9wcm9maWxlX3BhcmFtc19pcF90IHNfcHJvZmlsZV9wYXJhbXNfaXA7CisgICAgaXZlX2N0bF9zZXRfcHJvZmlsZV9wYXJhbXNfb3BfdCBzX3Byb2ZpbGVfcGFyYW1zX29wOworCisgICAgc19wcm9maWxlX3BhcmFtc19pcC5lX2NtZCA9IElWRV9DTURfVklERU9fQ1RMOworICAgIHNfcHJvZmlsZV9wYXJhbXNfaXAuZV9zdWJfY21kID0gSVZFX0NNRF9DVExfU0VUX1BST0ZJTEVfUEFSQU1TOworCisgICAgc19wcm9maWxlX3BhcmFtc19pcC5lX3Byb2ZpbGUgPSBtSW50Zi0+Z2V0UHJvZmlsZV9sKCk7CisgICAgc19wcm9maWxlX3BhcmFtc19pcC51NF9lbnRyb3B5X2NvZGluZ19tb2RlID0gbUVudHJvcHlNb2RlOworICAgIHNfcHJvZmlsZV9wYXJhbXNfaXAudTRfdGltZXN0YW1wX2hpZ2ggPSAtMTsKKyAgICBzX3Byb2ZpbGVfcGFyYW1zX2lwLnU0X3RpbWVzdGFtcF9sb3cgPSAtMTsKKworICAgIHNfcHJvZmlsZV9wYXJhbXNfaXAudTRfc2l6ZSA9IHNpemVvZihpdmVfY3RsX3NldF9wcm9maWxlX3BhcmFtc19pcF90KTsKKyAgICBzX3Byb2ZpbGVfcGFyYW1zX29wLnU0X3NpemUgPSBzaXplb2YoaXZlX2N0bF9zZXRfcHJvZmlsZV9wYXJhbXNfb3BfdCk7CisgICAgbG9jay51bmxvY2soKTsKKworICAgIHN0YXR1cyA9IGl2ZV9hcGlfZnVuY3Rpb24obUNvZGVjQ3R4LCAmc19wcm9maWxlX3BhcmFtc19pcCwgJnNfcHJvZmlsZV9wYXJhbXNfb3ApOworICAgIGlmIChzdGF0dXMgIT0gSVZfU1VDQ0VTUykgeworICAgICAgICBBTE9HRSgiVW5hYmxlIHRvIHNldCBwcm9maWxlIHBhcmFtcyA9IDB4JXhcbiIsCisgICAgICAgICAgICAgICAgc19wcm9maWxlX3BhcmFtc19vcC51NF9lcnJvcl9jb2RlKTsKKyAgICAgICAgcmV0dXJuIEMyX0NPUlJVUFRFRDsKKyAgICB9CisgICAgcmV0dXJuIEMyX09LOworfQorCitjMl9zdGF0dXNfdCBDMlNvZnRBdmNFbmM6OnNldERlYmxvY2tQYXJhbXMoKSB7CisgICAgSVZfU1RBVFVTX1Qgc3RhdHVzOworICAgIGl2ZV9jdGxfc2V0X2RlYmxvY2tfcGFyYW1zX2lwX3Qgc19kZWJsb2NrX3BhcmFtc19pcDsKKyAgICBpdmVfY3RsX3NldF9kZWJsb2NrX3BhcmFtc19vcF90IHNfZGVibG9ja19wYXJhbXNfb3A7CisKKyAgICBzX2RlYmxvY2tfcGFyYW1zX2lwLmVfY21kID0gSVZFX0NNRF9WSURFT19DVEw7CisgICAgc19kZWJsb2NrX3BhcmFtc19pcC5lX3N1Yl9jbWQgPSBJVkVfQ01EX0NUTF9TRVRfREVCTE9DS19QQVJBTVM7CisKKyAgICBzX2RlYmxvY2tfcGFyYW1zX2lwLnU0X2Rpc2FibGVfZGVibG9ja19sZXZlbCA9IG1EaXNhYmxlRGVibGtMZXZlbDsKKworICAgIHNfZGVibG9ja19wYXJhbXNfaXAudTRfdGltZXN0YW1wX2hpZ2ggPSAtMTsKKyAgICBzX2RlYmxvY2tfcGFyYW1zX2lwLnU0X3RpbWVzdGFtcF9sb3cgPSAtMTsKKworICAgIHNfZGVibG9ja19wYXJhbXNfaXAudTRfc2l6ZSA9IHNpemVvZihpdmVfY3RsX3NldF9kZWJsb2NrX3BhcmFtc19pcF90KTsKKyAgICBzX2RlYmxvY2tfcGFyYW1zX29wLnU0X3NpemUgPSBzaXplb2YoaXZlX2N0bF9zZXRfZGVibG9ja19wYXJhbXNfb3BfdCk7CisKKyAgICBzdGF0dXMgPSBpdmVfYXBpX2Z1bmN0aW9uKG1Db2RlY0N0eCwgJnNfZGVibG9ja19wYXJhbXNfaXAsICZzX2RlYmxvY2tfcGFyYW1zX29wKTsKKyAgICBpZiAoc3RhdHVzICE9IElWX1NVQ0NFU1MpIHsKKyAgICAgICAgQUxPR0UoIlVuYWJsZSB0byBlbmFibGUvZGlzYWJsZSBkZWJsb2NrIHBhcmFtcyA9IDB4JXhcbiIsCisgICAgICAgICAgICAgICAgc19kZWJsb2NrX3BhcmFtc19vcC51NF9lcnJvcl9jb2RlKTsKKyAgICAgICAgcmV0dXJuIEMyX0NPUlJVUFRFRDsKKyAgICB9CisgICAgcmV0dXJuIEMyX09LOworfQorCit2b2lkIEMyU29mdEF2Y0VuYzo6bG9nVmVyc2lvbigpIHsKKyAgICBpdmVfY3RsX2dldHZlcnNpb25pbmZvX2lwX3Qgc19jdGxfaXA7CisgICAgaXZlX2N0bF9nZXR2ZXJzaW9uaW5mb19vcF90IHNfY3RsX29wOworICAgIFVXT1JEOCBhdTFfYnVmWzUxMl07CisgICAgSVZfU1RBVFVTX1Qgc3RhdHVzOworCisgICAgc19jdGxfaXAuZV9jbWQgPSBJVkVfQ01EX1ZJREVPX0NUTDsKKyAgICBzX2N0bF9pcC5lX3N1Yl9jbWQgPSBJVkVfQ01EX0NUTF9HRVRWRVJTSU9OOworICAgIHNfY3RsX2lwLnU0X3NpemUgPSBzaXplb2YoaXZlX2N0bF9nZXR2ZXJzaW9uaW5mb19pcF90KTsKKyAgICBzX2N0bF9vcC51NF9zaXplID0gc2l6ZW9mKGl2ZV9jdGxfZ2V0dmVyc2lvbmluZm9fb3BfdCk7CisgICAgc19jdGxfaXAucHUxX3ZlcnNpb24gPSBhdTFfYnVmOworICAgIHNfY3RsX2lwLnU0X3ZlcnNpb25fYnVmc2l6ZSA9IHNpemVvZihhdTFfYnVmKTsKKworICAgIHN0YXR1cyA9IGl2ZV9hcGlfZnVuY3Rpb24obUNvZGVjQ3R4LCAodm9pZCAqKSAmc19jdGxfaXAsICh2b2lkICopICZzX2N0bF9vcCk7CisKKyAgICBpZiAoc3RhdHVzICE9IElWX1NVQ0NFU1MpIHsKKyAgICAgICAgQUxPR0UoIkVycm9yIGluIGdldHRpbmcgdmVyc2lvbjogMHgleCIsIHNfY3RsX29wLnU0X2Vycm9yX2NvZGUpOworICAgIH0gZWxzZSB7CisgICAgICAgIEFMT0dWKCJJdHRpYW0gZW5jb2RlciB2ZXJzaW9uOiAlcyIsIChjaGFyICopc19jdGxfaXAucHUxX3ZlcnNpb24pOworICAgIH0KKyAgICByZXR1cm47Cit9CisKK2MyX3N0YXR1c190IEMyU29mdEF2Y0VuYzo6aW5pdEVuY29kZXIoKSB7CisgICAgSVZfU1RBVFVTX1Qgc3RhdHVzOworICAgIFdPUkQzMiBsZXZlbDsKKworICAgIENIRUNLKCFtU3RhcnRlZCk7CisKKyAgICBjMl9zdGF0dXNfdCBlcnJUeXBlID0gQzJfT0s7CisKKyAgICB7CisgICAgICAgIEludGZJbXBsOjpMb2NrIGxvY2sgPSBtSW50Zi0+bG9jaygpOworICAgICAgICBtU2l6ZSA9IG1JbnRmLT5nZXRTaXplX2woKTsKKyAgICAgICAgbUJpdHJhdGUgPSBtSW50Zi0+Z2V0Qml0cmF0ZV9sKCk7CisgICAgICAgIG1GcmFtZVJhdGUgPSBtSW50Zi0+Z2V0RnJhbWVSYXRlX2woKTsKKyAgICAgICAgbUludHJhUmVmcmVzaCA9IG1JbnRmLT5nZXRJbnRyYVJlZnJlc2hfbCgpOworICAgICAgICBtQVZDRW5jTGV2ZWwgPSBtSW50Zi0+Z2V0TGV2ZWxfbCgpOworICAgICAgICBtSUludGVydmFsID0gbUludGYtPmdldFN5bmNGcmFtZVBlcmlvZF9sKCk7CisgICAgICAgIG1JRFJJbnRlcnZhbCA9IG1JbnRmLT5nZXRTeW5jRnJhbWVQZXJpb2RfbCgpOworICAgIH0KKyAgICB1aW50MzJfdCB3aWR0aCA9IG1TaXplLT53aWR0aDsKKyAgICB1aW50MzJfdCBoZWlnaHQgPSBtU2l6ZS0+aGVpZ2h0OworCisgICAgbVN0cmlkZSA9IHdpZHRoOworCisgICAgLy8gVE9ETworICAgIG1JdlZpZGVvQ29sb3JGb3JtYXQgPSBJVl9ZVVZfNDIwUDsKKworICAgIEFMT0dEKCJQYXJhbXMgd2lkdGggJWQgaGVpZ2h0ICVkIGxldmVsICVkIGNvbG9yRm9ybWF0ICVkIiwgd2lkdGgsCisgICAgICAgICAgICBoZWlnaHQsIG1BVkNFbmNMZXZlbCwgbUl2VmlkZW9Db2xvckZvcm1hdCk7CisKKyAgICAvKiBHZXR0aW5nIE51bWJlciBvZiBNZW1SZWNvcmRzICovCisgICAgeworICAgICAgICBpdl9udW1fbWVtX3JlY19pcF90IHNfbnVtX21lbV9yZWNfaXA7CisgICAgICAgIGl2X251bV9tZW1fcmVjX29wX3Qgc19udW1fbWVtX3JlY19vcDsKKworICAgICAgICBzX251bV9tZW1fcmVjX2lwLnU0X3NpemUgPSBzaXplb2YoaXZfbnVtX21lbV9yZWNfaXBfdCk7CisgICAgICAgIHNfbnVtX21lbV9yZWNfb3AudTRfc2l6ZSA9IHNpemVvZihpdl9udW1fbWVtX3JlY19vcF90KTsKKworICAgICAgICBzX251bV9tZW1fcmVjX2lwLmVfY21kID0gSVZfQ01EX0dFVF9OVU1fTUVNX1JFQzsKKworICAgICAgICBzdGF0dXMgPSBpdmVfYXBpX2Z1bmN0aW9uKG51bGxwdHIsICZzX251bV9tZW1fcmVjX2lwLCAmc19udW1fbWVtX3JlY19vcCk7CisKKyAgICAgICAgaWYgKHN0YXR1cyAhPSBJVl9TVUNDRVNTKSB7CisgICAgICAgICAgICBBTE9HRSgiR2V0IG51bWJlciBvZiBtZW1vcnkgcmVjb3JkcyBmYWlsZWQgPSAweCV4XG4iLAorICAgICAgICAgICAgICAgICAgICBzX251bV9tZW1fcmVjX29wLnU0X2Vycm9yX2NvZGUpOworICAgICAgICAgICAgcmV0dXJuIEMyX0NPUlJVUFRFRDsKKyAgICAgICAgfQorCisgICAgICAgIG1OdW1NZW1SZWNvcmRzID0gc19udW1fbWVtX3JlY19vcC51NF9udW1fbWVtX3JlYzsKKyAgICB9CisKKyAgICAvKiBBbGxvY2F0ZSBhcnJheSB0byBob2xkIG1lbW9yeSByZWNvcmRzICovCisgICAgaWYgKG1OdW1NZW1SZWNvcmRzID4gU0laRV9NQVggLyBzaXplb2YoaXZfbWVtX3JlY190KSkgeworICAgICAgICBBTE9HRSgicmVxdWVzdGVkIG1lbW9yeSBzaXplIGlzIHRvbyBiaWcuIik7CisgICAgICAgIHJldHVybiBDMl9DT1JSVVBURUQ7CisgICAgfQorICAgIG1NZW1SZWNvcmRzID0gKGl2X21lbV9yZWNfdCAqKW1hbGxvYyhtTnVtTWVtUmVjb3JkcyAqIHNpemVvZihpdl9tZW1fcmVjX3QpKTsKKyAgICBpZiAobnVsbHB0ciA9PSBtTWVtUmVjb3JkcykgeworICAgICAgICBBTE9HRSgiVW5hYmxlIHRvIGFsbG9jYXRlIG1lbW9yeSBmb3IgaG9sZCBtZW1vcnkgcmVjb3JkczogU2l6ZSAlenUiLAorICAgICAgICAgICAgICAgIG1OdW1NZW1SZWNvcmRzICogc2l6ZW9mKGl2X21lbV9yZWNfdCkpOworICAgICAgICBtU2lnbmFsbGVkRXJyb3IgPSB0cnVlOworICAgICAgICByZXR1cm4gQzJfQ09SUlVQVEVEOworICAgIH0KKworICAgIHsKKyAgICAgICAgaXZfbWVtX3JlY190ICpwc19tZW1fcmVjOworICAgICAgICBwc19tZW1fcmVjID0gbU1lbVJlY29yZHM7CisgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbU51bU1lbVJlY29yZHM7IGkrKykgeworICAgICAgICAgICAgcHNfbWVtX3JlYy0+dTRfc2l6ZSA9IHNpemVvZihpdl9tZW1fcmVjX3QpOworICAgICAgICAgICAgcHNfbWVtX3JlYy0+cHZfYmFzZSA9IG51bGxwdHI7CisgICAgICAgICAgICBwc19tZW1fcmVjLT51NF9tZW1fc2l6ZSA9IDA7CisgICAgICAgICAgICBwc19tZW1fcmVjLT51NF9tZW1fYWxpZ25tZW50ID0gMDsKKyAgICAgICAgICAgIHBzX21lbV9yZWMtPmVfbWVtX3R5cGUgPSBJVl9OQV9NRU1fVFlQRTsKKworICAgICAgICAgICAgcHNfbWVtX3JlYysrOworICAgICAgICB9CisgICAgfQorCisgICAgLyogR2V0dGluZyBNZW1SZWNvcmRzIEF0dHJpYnV0ZXMgKi8KKyAgICB7CisgICAgICAgIGl2X2ZpbGxfbWVtX3JlY19pcF90IHNfZmlsbF9tZW1fcmVjX2lwOworICAgICAgICBpdl9maWxsX21lbV9yZWNfb3BfdCBzX2ZpbGxfbWVtX3JlY19vcDsKKworICAgICAgICBzX2ZpbGxfbWVtX3JlY19pcC51NF9zaXplID0gc2l6ZW9mKGl2X2ZpbGxfbWVtX3JlY19pcF90KTsKKyAgICAgICAgc19maWxsX21lbV9yZWNfb3AudTRfc2l6ZSA9IHNpemVvZihpdl9maWxsX21lbV9yZWNfb3BfdCk7CisKKyAgICAgICAgc19maWxsX21lbV9yZWNfaXAuZV9jbWQgPSBJVl9DTURfRklMTF9OVU1fTUVNX1JFQzsKKyAgICAgICAgc19maWxsX21lbV9yZWNfaXAucHNfbWVtX3JlYyA9IG1NZW1SZWNvcmRzOworICAgICAgICBzX2ZpbGxfbWVtX3JlY19pcC51NF9udW1fbWVtX3JlYyA9IG1OdW1NZW1SZWNvcmRzOworICAgICAgICBzX2ZpbGxfbWVtX3JlY19pcC51NF9tYXhfd2QgPSB3aWR0aDsKKyAgICAgICAgc19maWxsX21lbV9yZWNfaXAudTRfbWF4X2h0ID0gaGVpZ2h0OworICAgICAgICBzX2ZpbGxfbWVtX3JlY19pcC51NF9tYXhfbGV2ZWwgPSBtQVZDRW5jTGV2ZWw7CisgICAgICAgIHNfZmlsbF9tZW1fcmVjX2lwLmVfY29sb3JfZm9ybWF0ID0gREVGQVVMVF9JTlBfQ09MT1JfRk9STUFUOworICAgICAgICBzX2ZpbGxfbWVtX3JlY19pcC51NF9tYXhfcmVmX2NudCA9IERFRkFVTFRfTUFYX1JFRl9GUk07CisgICAgICAgIHNfZmlsbF9tZW1fcmVjX2lwLnU0X21heF9yZW9yZGVyX2NudCA9IERFRkFVTFRfTUFYX1JFT1JERVJfRlJNOworICAgICAgICBzX2ZpbGxfbWVtX3JlY19pcC51NF9tYXhfc3JjaF9ybmdfeCA9IERFRkFVTFRfTUFYX1NSQ0hfUkFOR0VfWDsKKyAgICAgICAgc19maWxsX21lbV9yZWNfaXAudTRfbWF4X3NyY2hfcm5nX3kgPSBERUZBVUxUX01BWF9TUkNIX1JBTkdFX1k7CisKKyAgICAgICAgc3RhdHVzID0gaXZlX2FwaV9mdW5jdGlvbihudWxscHRyLCAmc19maWxsX21lbV9yZWNfaXAsICZzX2ZpbGxfbWVtX3JlY19vcCk7CisKKyAgICAgICAgaWYgKHN0YXR1cyAhPSBJVl9TVUNDRVNTKSB7CisgICAgICAgICAgICBBTE9HRSgiRmlsbCBtZW1vcnkgcmVjb3JkcyBmYWlsZWQgPSAweCV4XG4iLAorICAgICAgICAgICAgICAgICAgICBzX2ZpbGxfbWVtX3JlY19vcC51NF9lcnJvcl9jb2RlKTsKKyAgICAgICAgICAgIHJldHVybiBDMl9DT1JSVVBURUQ7CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvKiBBbGxvY2F0aW5nIE1lbW9yeSBmb3IgTWVtIFJlY29yZHMgKi8KKyAgICB7CisgICAgICAgIFdPUkQzMiB0b3RhbF9zaXplOworICAgICAgICBpdl9tZW1fcmVjX3QgKnBzX21lbV9yZWM7CisgICAgICAgIHRvdGFsX3NpemUgPSAwOworICAgICAgICBwc19tZW1fcmVjID0gbU1lbVJlY29yZHM7CisKKyAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtTnVtTWVtUmVjb3JkczsgaSsrKSB7CisgICAgICAgICAgICBwc19tZW1fcmVjLT5wdl9iYXNlID0gaXZlX2FsaWduZWRfbWFsbG9jKAorICAgICAgICAgICAgICAgICAgICBwc19tZW1fcmVjLT51NF9tZW1fYWxpZ25tZW50LCBwc19tZW1fcmVjLT51NF9tZW1fc2l6ZSk7CisgICAgICAgICAgICBpZiAocHNfbWVtX3JlYy0+cHZfYmFzZSA9PSBudWxscHRyKSB7CisgICAgICAgICAgICAgICAgQUxPR0UoIkFsbG9jYXRpb24gZmFpbHVyZSBmb3IgbWVtIHJlY29yZCBpZCAlenUgc2l6ZSAldVxuIiwgaSwKKyAgICAgICAgICAgICAgICAgICAgICAgIHBzX21lbV9yZWMtPnU0X21lbV9zaXplKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gQzJfQ09SUlVQVEVEOworCisgICAgICAgICAgICB9CisgICAgICAgICAgICB0b3RhbF9zaXplICs9IHBzX21lbV9yZWMtPnU0X21lbV9zaXplOworCisgICAgICAgICAgICBwc19tZW1fcmVjKys7CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvKiBDb2RlYyBJbnN0YW5jZSBDcmVhdGlvbiAqLworICAgIHsKKyAgICAgICAgaXZlX2luaXRfaXBfdCBzX2luaXRfaXA7CisgICAgICAgIGl2ZV9pbml0X29wX3Qgc19pbml0X29wOworCisgICAgICAgIG1Db2RlY0N0eCA9IChpdl9vYmpfdCAqKW1NZW1SZWNvcmRzWzBdLnB2X2Jhc2U7CisgICAgICAgIG1Db2RlY0N0eC0+dTRfc2l6ZSA9IHNpemVvZihpdl9vYmpfdCk7CisgICAgICAgIG1Db2RlY0N0eC0+cHZfZnhucyA9ICh2b2lkICopaXZlX2FwaV9mdW5jdGlvbjsKKworICAgICAgICBzX2luaXRfaXAudTRfc2l6ZSA9IHNpemVvZihpdmVfaW5pdF9pcF90KTsKKyAgICAgICAgc19pbml0X29wLnU0X3NpemUgPSBzaXplb2YoaXZlX2luaXRfb3BfdCk7CisKKyAgICAgICAgc19pbml0X2lwLmVfY21kID0gSVZfQ01EX0lOSVQ7CisgICAgICAgIHNfaW5pdF9pcC51NF9udW1fbWVtX3JlYyA9IG1OdW1NZW1SZWNvcmRzOworICAgICAgICBzX2luaXRfaXAucHNfbWVtX3JlYyA9IG1NZW1SZWNvcmRzOworICAgICAgICBzX2luaXRfaXAudTRfbWF4X3dkID0gd2lkdGg7CisgICAgICAgIHNfaW5pdF9pcC51NF9tYXhfaHQgPSBoZWlnaHQ7CisgICAgICAgIHNfaW5pdF9pcC51NF9tYXhfcmVmX2NudCA9IERFRkFVTFRfTUFYX1JFRl9GUk07CisgICAgICAgIHNfaW5pdF9pcC51NF9tYXhfcmVvcmRlcl9jbnQgPSBERUZBVUxUX01BWF9SRU9SREVSX0ZSTTsKKyAgICAgICAgc19pbml0X2lwLnU0X21heF9sZXZlbCA9IG1BVkNFbmNMZXZlbDsKKyAgICAgICAgc19pbml0X2lwLmVfaW5wX2NvbG9yX2ZtdCA9IG1JdlZpZGVvQ29sb3JGb3JtYXQ7CisKKyAgICAgICAgaWYgKG1SZWNvbkVuYWJsZSB8fCBtUFNOUkVuYWJsZSkgeworICAgICAgICAgICAgc19pbml0X2lwLnU0X2VuYWJsZV9yZWNvbiA9IDE7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBzX2luaXRfaXAudTRfZW5hYmxlX3JlY29uID0gMDsKKyAgICAgICAgfQorICAgICAgICBzX2luaXRfaXAuZV9yZWNvbl9jb2xvcl9mbXQgPSBERUZBVUxUX1JFQ09OX0NPTE9SX0ZPUk1BVDsKKyAgICAgICAgc19pbml0X2lwLmVfcmNfbW9kZSA9IERFRkFVTFRfUkNfTU9ERTsKKyAgICAgICAgc19pbml0X2lwLnU0X21heF9mcmFtZXJhdGUgPSBERUZBVUxUX01BWF9GUkFNRVJBVEU7CisgICAgICAgIHNfaW5pdF9pcC51NF9tYXhfYml0cmF0ZSA9IERFRkFVTFRfTUFYX0JJVFJBVEU7CisgICAgICAgIHNfaW5pdF9pcC51NF9udW1fYmZyYW1lcyA9IG1CZnJhbWVzOworICAgICAgICBzX2luaXRfaXAuZV9jb250ZW50X3R5cGUgPSBJVl9QUk9HUkVTU0lWRTsKKyAgICAgICAgc19pbml0X2lwLnU0X21heF9zcmNoX3JuZ194ID0gREVGQVVMVF9NQVhfU1JDSF9SQU5HRV9YOworICAgICAgICBzX2luaXRfaXAudTRfbWF4X3NyY2hfcm5nX3kgPSBERUZBVUxUX01BWF9TUkNIX1JBTkdFX1k7CisgICAgICAgIHNfaW5pdF9pcC5lX3NsaWNlX21vZGUgPSBtU2xpY2VNb2RlOworICAgICAgICBzX2luaXRfaXAudTRfc2xpY2VfcGFyYW0gPSBtU2xpY2VQYXJhbTsKKyAgICAgICAgc19pbml0X2lwLmVfYXJjaCA9IG1BcmNoOworICAgICAgICBzX2luaXRfaXAuZV9zb2MgPSBERUZBVUxUX1NPQzsKKworICAgICAgICBzdGF0dXMgPSBpdmVfYXBpX2Z1bmN0aW9uKG1Db2RlY0N0eCwgJnNfaW5pdF9pcCwgJnNfaW5pdF9vcCk7CisKKyAgICAgICAgaWYgKHN0YXR1cyAhPSBJVl9TVUNDRVNTKSB7CisgICAgICAgICAgICBBTE9HRSgiSW5pdCBlbmNvZGVyIGZhaWxlZCA9IDB4JXhcbiIsIHNfaW5pdF9vcC51NF9lcnJvcl9jb2RlKTsKKyAgICAgICAgICAgIHJldHVybiBDMl9DT1JSVVBURUQ7CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvKiBHZXQgQ29kZWMgVmVyc2lvbiAqLworICAgIGxvZ1ZlcnNpb24oKTsKKworICAgIC8qIHNldCBwcm9jZXNzb3IgZGV0YWlscyAqLworICAgIHNldE51bUNvcmVzKCk7CisKKyAgICAvKiBWaWRlbyBjb250cm9sIFNldCBGcmFtZSBkaW1lbnNpb25zICovCisgICAgc2V0RGltZW5zaW9ucygpOworCisgICAgLyogVmlkZW8gY29udHJvbCBTZXQgRnJhbWUgcmF0ZXMgKi8KKyAgICBzZXRGcmFtZVJhdGUoKTsKKworICAgIC8qIFZpZGVvIGNvbnRyb2wgU2V0IElQRSBQYXJhbXMgKi8KKyAgICBzZXRJcGVQYXJhbXMoKTsKKworICAgIC8qIFZpZGVvIGNvbnRyb2wgU2V0IEJpdHJhdGUgKi8KKyAgICBzZXRCaXRSYXRlKCk7CisKKyAgICAvKiBWaWRlbyBjb250cm9sIFNldCBRUCAqLworICAgIHNldFFwKCk7CisKKyAgICAvKiBWaWRlbyBjb250cm9sIFNldCBBSVIgcGFyYW1zICovCisgICAgc2V0QWlyUGFyYW1zKCk7CisKKyAgICAvKiBWaWRlbyBjb250cm9sIFNldCBWQlYgcGFyYW1zICovCisgICAgc2V0VmJ2UGFyYW1zKCk7CisKKyAgICAvKiBWaWRlbyBjb250cm9sIFNldCBNb3Rpb24gZXN0aW1hdGlvbiBwYXJhbXMgKi8KKyAgICBzZXRNZVBhcmFtcygpOworCisgICAgLyogVmlkZW8gY29udHJvbCBTZXQgR09QIHBhcmFtcyAqLworICAgIHNldEdvcFBhcmFtcygpOworCisgICAgLyogVmlkZW8gY29udHJvbCBTZXQgRGVibG9jayBwYXJhbXMgKi8KKyAgICBzZXREZWJsb2NrUGFyYW1zKCk7CisKKyAgICAvKiBWaWRlbyBjb250cm9sIFNldCBQcm9maWxlIHBhcmFtcyAqLworICAgIHNldFByb2ZpbGVQYXJhbXMoKTsKKworICAgIC8qIFZpZGVvIGNvbnRyb2wgU2V0IGluIEVuY29kZSBoZWFkZXIgbW9kZSAqLworICAgIHNldEVuY01vZGUoSVZFX0VOQ19NT0RFX0hFQURFUik7CisKKyAgICBBTE9HVigiaW5pdF9jb2RlYyBzdWNjZXNzZnVsbCIpOworCisgICAgbVNwc1Bwc0hlYWRlclJlY2VpdmVkID0gZmFsc2U7CisgICAgbVN0YXJ0ZWQgPSB0cnVlOworCisgICAgcmV0dXJuIEMyX09LOworfQorCitjMl9zdGF0dXNfdCBDMlNvZnRBdmNFbmM6OnJlbGVhc2VFbmNvZGVyKCkgeworICAgIElWX1NUQVRVU19UIHN0YXR1cyA9IElWX1NVQ0NFU1M7CisgICAgaXZfcmV0cmlldmVfbWVtX3JlY19pcF90IHNfcmV0cmlldmVfbWVtX2lwOworICAgIGl2X3JldHJpZXZlX21lbV9yZWNfb3BfdCBzX3JldHJpZXZlX21lbV9vcDsKKyAgICBpdl9tZW1fcmVjX3QgKnBzX21lbV9yZWM7CisKKyAgICBpZiAoIW1TdGFydGVkKSB7CisgICAgICAgIHJldHVybiBDMl9PSzsKKyAgICB9CisKKyAgICBzX3JldHJpZXZlX21lbV9pcC51NF9zaXplID0gc2l6ZW9mKGl2X3JldHJpZXZlX21lbV9yZWNfaXBfdCk7CisgICAgc19yZXRyaWV2ZV9tZW1fb3AudTRfc2l6ZSA9IHNpemVvZihpdl9yZXRyaWV2ZV9tZW1fcmVjX29wX3QpOworICAgIHNfcmV0cmlldmVfbWVtX2lwLmVfY21kID0gSVZfQ01EX1JFVFJJRVZFX01FTVJFQzsKKyAgICBzX3JldHJpZXZlX21lbV9pcC5wc19tZW1fcmVjID0gbU1lbVJlY29yZHM7CisKKyAgICBzdGF0dXMgPSBpdmVfYXBpX2Z1bmN0aW9uKG1Db2RlY0N0eCwgJnNfcmV0cmlldmVfbWVtX2lwLCAmc19yZXRyaWV2ZV9tZW1fb3ApOworCisgICAgaWYgKHN0YXR1cyAhPSBJVl9TVUNDRVNTKSB7CisgICAgICAgIEFMT0dFKCJVbmFibGUgdG8gcmV0cmlldmUgbWVtb3J5IHJlY29yZHMgPSAweCV4XG4iLAorICAgICAgICAgICAgICAgIHNfcmV0cmlldmVfbWVtX29wLnU0X2Vycm9yX2NvZGUpOworICAgICAgICByZXR1cm4gQzJfQ09SUlVQVEVEOworICAgIH0KKworICAgIC8qIEZyZWUgbWVtb3J5IHJlY29yZHMgKi8KKyAgICBwc19tZW1fcmVjID0gbU1lbVJlY29yZHM7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBzX3JldHJpZXZlX21lbV9vcC51NF9udW1fbWVtX3JlY19maWxsZWQ7IGkrKykgeworICAgICAgICBpZiAocHNfbWVtX3JlYykgaXZlX2FsaWduZWRfZnJlZShwc19tZW1fcmVjLT5wdl9iYXNlKTsKKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICBBTE9HRSgibWVtb3J5IHJlY29yZCBpcyBudWxsLiIpOworICAgICAgICAgICAgcmV0dXJuIEMyX0NPUlJVUFRFRDsKKyAgICAgICAgfQorICAgICAgICBwc19tZW1fcmVjKys7CisgICAgfQorCisgICAgaWYgKG1NZW1SZWNvcmRzKSBmcmVlKG1NZW1SZWNvcmRzKTsKKworICAgIC8vIGNsZWFyIG90aGVyIHBvaW50ZXJzIGludG8gdGhlIHNwYWNlIGJlaW5nIGZyZWUoKWQKKyAgICBtQ29kZWNDdHggPSBudWxscHRyOworCisgICAgbVN0YXJ0ZWQgPSBmYWxzZTsKKworICAgIHJldHVybiBDMl9PSzsKK30KKworYzJfc3RhdHVzX3QgQzJTb2Z0QXZjRW5jOjpzZXRFbmNvZGVBcmdzKAorICAgICAgICBpdmVfdmlkZW9fZW5jb2RlX2lwX3QgKnBzX2VuY29kZV9pcCwKKyAgICAgICAgaXZlX3ZpZGVvX2VuY29kZV9vcF90ICpwc19lbmNvZGVfb3AsCisgICAgICAgIGNvbnN0IEMyR3JhcGhpY1ZpZXcgKmNvbnN0IGlucHV0LAorICAgICAgICB1aW50OF90ICpiYXNlLAorICAgICAgICB1aW50MzJfdCBjYXBhY2l0eSwKKyAgICAgICAgdWludDY0X3QgdGltZXN0YW1wKSB7CisgICAgaXZfcmF3X2J1Zl90ICpwc19pbnBfcmF3X2J1ZjsKKworICAgIHBzX2lucF9yYXdfYnVmID0gJnBzX2VuY29kZV9pcC0+c19pbnBfYnVmOworICAgIHBzX2VuY29kZV9pcC0+c19vdXRfYnVmLnB2X2J1ZiA9IGJhc2U7CisgICAgcHNfZW5jb2RlX2lwLT5zX291dF9idWYudTRfYnl0ZXMgPSAwOworICAgIHBzX2VuY29kZV9pcC0+c19vdXRfYnVmLnU0X2J1ZnNpemUgPSBjYXBhY2l0eTsKKyAgICBwc19lbmNvZGVfaXAtPnU0X3NpemUgPSBzaXplb2YoaXZlX3ZpZGVvX2VuY29kZV9pcF90KTsKKyAgICBwc19lbmNvZGVfb3AtPnU0X3NpemUgPSBzaXplb2YoaXZlX3ZpZGVvX2VuY29kZV9vcF90KTsKKworICAgIHBzX2VuY29kZV9pcC0+ZV9jbWQgPSBJVkVfQ01EX1ZJREVPX0VOQ09ERTsKKyAgICBwc19lbmNvZGVfaXAtPnB2X2J1ZnMgPSBudWxscHRyOworICAgIHBzX2VuY29kZV9pcC0+cHZfbWJfaW5mbyA9IG51bGxwdHI7CisgICAgcHNfZW5jb2RlX2lwLT5wdl9waWNfaW5mbyA9IG51bGxwdHI7CisgICAgcHNfZW5jb2RlX2lwLT51NF9tYl9pbmZvX3R5cGUgPSAwOworICAgIHBzX2VuY29kZV9pcC0+dTRfcGljX2luZm9fdHlwZSA9IDA7CisgICAgcHNfZW5jb2RlX2lwLT51NF9pc19sYXN0ID0gMDsKKyAgICBwc19lbmNvZGVfaXAtPnU0X3RpbWVzdGFtcF9oaWdoID0gdGltZXN0YW1wID4+IDMyOworICAgIHBzX2VuY29kZV9pcC0+dTRfdGltZXN0YW1wX2xvdyA9IHRpbWVzdGFtcCAmIDB4RkZGRkZGRkY7CisgICAgcHNfZW5jb2RlX29wLT5zX291dF9idWYucHZfYnVmID0gbnVsbHB0cjsKKworICAgIC8qIEluaXRpYWxpemUgY29sb3IgZm9ybWF0cyAqLworICAgIG1lbXNldChwc19pbnBfcmF3X2J1ZiwgMCwgc2l6ZW9mKGl2X3Jhd19idWZfdCkpOworICAgIHBzX2lucF9yYXdfYnVmLT51NF9zaXplID0gc2l6ZW9mKGl2X3Jhd19idWZfdCk7CisgICAgcHNfaW5wX3Jhd19idWYtPmVfY29sb3JfZm10ID0gbUl2VmlkZW9Db2xvckZvcm1hdDsKKyAgICBpZiAoaW5wdXQgPT0gbnVsbHB0cikgeworICAgICAgICBpZiAobVNhd0lucHV0RU9TKXsKKyAgICAgICAgICAgIHBzX2VuY29kZV9pcC0+dTRfaXNfbGFzdCA9IDE7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIEMyX09LOworICAgIH0KKworICAgIGlmIChpbnB1dC0+d2lkdGgoKSA8IG1TaXplLT53aWR0aCB8fAorICAgICAgICBpbnB1dC0+aGVpZ2h0KCkgPCBtU2l6ZS0+aGVpZ2h0KSB7CisgICAgICAgIC8qIEV4cGVjdCB3aWR0aCBoZWlnaHQgdG8gYmUgY29uZmlndXJlZCAqLworICAgICAgICBBTE9HVygidW5leHBlY3RlZCBDYXBhY2l0eSBBc3BlY3QgJWQoJWQpIHggJWQoJWQpIiwgaW5wdXQtPndpZHRoKCksCisgICAgICAgICAgICAgIG1TaXplLT53aWR0aCwgaW5wdXQtPmhlaWdodCgpLCBtU2l6ZS0+aGVpZ2h0KTsKKyAgICAgICAgcmV0dXJuIEMyX0JBRF9WQUxVRTsKKyAgICB9CisgICAgQUxPR1YoIndpZHRoID0gJWQsIGhlaWdodCA9ICVkIiwgaW5wdXQtPndpZHRoKCksIGlucHV0LT5oZWlnaHQoKSk7CisgICAgY29uc3QgQzJQbGFuYXJMYXlvdXQgJmxheW91dCA9IGlucHV0LT5sYXlvdXQoKTsKKyAgICB1aW50OF90ICp5UGxhbmUgPSBjb25zdF9jYXN0PHVpbnQ4X3QgKj4oaW5wdXQtPmRhdGEoKVtDMlBsYW5hckxheW91dDo6UExBTkVfWV0pOworICAgIHVpbnQ4X3QgKnVQbGFuZSA9IGNvbnN0X2Nhc3Q8dWludDhfdCAqPihpbnB1dC0+ZGF0YSgpW0MyUGxhbmFyTGF5b3V0OjpQTEFORV9VXSk7CisgICAgdWludDhfdCAqdlBsYW5lID0gY29uc3RfY2FzdDx1aW50OF90ICo+KGlucHV0LT5kYXRhKClbQzJQbGFuYXJMYXlvdXQ6OlBMQU5FX1ZdKTsKKyAgICBpbnQzMl90IHlTdHJpZGUgPSBsYXlvdXQucGxhbmVzW0MyUGxhbmFyTGF5b3V0OjpQTEFORV9ZXS5yb3dJbmM7CisgICAgaW50MzJfdCB1U3RyaWRlID0gbGF5b3V0LnBsYW5lc1tDMlBsYW5hckxheW91dDo6UExBTkVfVV0ucm93SW5jOworICAgIGludDMyX3QgdlN0cmlkZSA9IGxheW91dC5wbGFuZXNbQzJQbGFuYXJMYXlvdXQ6OlBMQU5FX1ZdLnJvd0luYzsKKworICAgIHVpbnQzMl90IHdpZHRoID0gbVNpemUtPndpZHRoOworICAgIHVpbnQzMl90IGhlaWdodCA9IG1TaXplLT5oZWlnaHQ7CisgICAgLy8gd2lkdGggYW5kIGhlaWdodCBhcmUgYWx3YXlzIGV2ZW4gKGFzIGJsb2NrIHNpemUgaXMgMTZ4MTYpCisgICAgQ0hFQ0tfRVEoKHdpZHRoICYgMXUpLCAwdSk7CisgICAgQ0hFQ0tfRVEoKGhlaWdodCAmIDF1KSwgMHUpOworICAgIHNpemVfdCB5UGxhbmVTaXplID0gd2lkdGggKiBoZWlnaHQ7CisKKyAgICBzd2l0Y2ggKGxheW91dC50eXBlKSB7CisgICAgICAgIGNhc2UgQzJQbGFuYXJMYXlvdXQ6OlRZUEVfUkdCOgorICAgICAgICAgICAgW1tmYWxsdGhyb3VnaF1dOworICAgICAgICBjYXNlIEMyUGxhbmFyTGF5b3V0OjpUWVBFX1JHQkE6IHsKKyAgICAgICAgICAgIEFMT0dWKCJ5UGxhbmVTaXplID0gJXp1IiwgeVBsYW5lU2l6ZSk7CisgICAgICAgICAgICBNZW1vcnlCbG9jayBjb252ZXJzaW9uQnVmZmVyID0gbUNvbnZlcnNpb25CdWZmZXJzLmZldGNoKHlQbGFuZVNpemUgKiAzIC8gMik7CisgICAgICAgICAgICBtQ29udmVyc2lvbkJ1ZmZlcnNJblVzZS5lbXBsYWNlKGNvbnZlcnNpb25CdWZmZXIuZGF0YSgpLCBjb252ZXJzaW9uQnVmZmVyKTsKKyAgICAgICAgICAgIHlQbGFuZSA9IGNvbnZlcnNpb25CdWZmZXIuZGF0YSgpOworICAgICAgICAgICAgdVBsYW5lID0geVBsYW5lICsgeVBsYW5lU2l6ZTsKKyAgICAgICAgICAgIHZQbGFuZSA9IHVQbGFuZSArIHlQbGFuZVNpemUgLyA0OworICAgICAgICAgICAgeVN0cmlkZSA9IHdpZHRoOworICAgICAgICAgICAgdVN0cmlkZSA9IHZTdHJpZGUgPSB5U3RyaWRlIC8gMjsKKyAgICAgICAgICAgIENvbnZlcnRSR0JUb1BsYW5hcllVVih5UGxhbmUsIHlTdHJpZGUsIGhlaWdodCwgY29udmVyc2lvbkJ1ZmZlci5zaXplKCksICppbnB1dCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBjYXNlIEMyUGxhbmFyTGF5b3V0OjpUWVBFX1lVVjogeworICAgICAgICAgICAgaWYgKCFJc1lVVjQyMCgqaW5wdXQpKSB7CisgICAgICAgICAgICAgICAgQUxPR0UoImlucHV0IGlzIG5vdCBZVVY0MjAiKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gQzJfQkFEX1ZBTFVFOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAobGF5b3V0LnBsYW5lc1tsYXlvdXQuUExBTkVfWV0uY29sSW5jID09IDEKKyAgICAgICAgICAgICAgICAgICAgJiYgbGF5b3V0LnBsYW5lc1tsYXlvdXQuUExBTkVfVV0uY29sSW5jID09IDEKKyAgICAgICAgICAgICAgICAgICAgJiYgbGF5b3V0LnBsYW5lc1tsYXlvdXQuUExBTkVfVl0uY29sSW5jID09IDEKKyAgICAgICAgICAgICAgICAgICAgJiYgdVN0cmlkZSA9PSB2U3RyaWRlCisgICAgICAgICAgICAgICAgICAgICYmIHlTdHJpZGUgPT0gMiAqIHZTdHJpZGUpIHsKKyAgICAgICAgICAgICAgICAvLyBJNDIwIGNvbXBhdGlibGUgLSBhbHJlYWR5IHNldCB1cCBhYm92ZQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICAvLyBjb3B5IHRvIEk0MjAKKyAgICAgICAgICAgIHlTdHJpZGUgPSB3aWR0aDsKKyAgICAgICAgICAgIHVTdHJpZGUgPSB2U3RyaWRlID0geVN0cmlkZSAvIDI7CisgICAgICAgICAgICBNZW1vcnlCbG9jayBjb252ZXJzaW9uQnVmZmVyID0gbUNvbnZlcnNpb25CdWZmZXJzLmZldGNoKHlQbGFuZVNpemUgKiAzIC8gMik7CisgICAgICAgICAgICBtQ29udmVyc2lvbkJ1ZmZlcnNJblVzZS5lbXBsYWNlKGNvbnZlcnNpb25CdWZmZXIuZGF0YSgpLCBjb252ZXJzaW9uQnVmZmVyKTsKKyAgICAgICAgICAgIE1lZGlhSW1hZ2UyIGltZyA9IENyZWF0ZVlVVjQyMFBsYW5hck1lZGlhSW1hZ2UyKHdpZHRoLCBoZWlnaHQsIHlTdHJpZGUsIGhlaWdodCk7CisgICAgICAgICAgICBzdGF0dXNfdCBlcnIgPSBJbWFnZUNvcHkoY29udmVyc2lvbkJ1ZmZlci5kYXRhKCksICZpbWcsICppbnB1dCk7CisgICAgICAgICAgICBpZiAoZXJyICE9IE9LKSB7CisgICAgICAgICAgICAgICAgQUxPR0UoIkJ1ZmZlciBjb252ZXJzaW9uIGZhaWxlZDogJWQiLCBlcnIpOworICAgICAgICAgICAgICAgIHJldHVybiBDMl9CQURfVkFMVUU7CisgICAgICAgICAgICB9CisgICAgICAgICAgICB5UGxhbmUgPSBjb252ZXJzaW9uQnVmZmVyLmRhdGEoKTsKKyAgICAgICAgICAgIHVQbGFuZSA9IHlQbGFuZSArIHlQbGFuZVNpemU7CisgICAgICAgICAgICB2UGxhbmUgPSB1UGxhbmUgKyB5UGxhbmVTaXplIC8gNDsKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIH0KKworICAgICAgICBjYXNlIEMyUGxhbmFyTGF5b3V0OjpUWVBFX1lVVkE6CisgICAgICAgICAgICBBTE9HRSgiWVVWQSBwbGFuZSB0eXBlIGlzIG5vdCBzdXBwb3J0ZWQiKTsKKyAgICAgICAgICAgIHJldHVybiBDMl9CQURfVkFMVUU7CisKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIEFMT0dFKCJVbnJlY29nbml6ZWQgcGxhbmUgdHlwZTogJWQiLCBsYXlvdXQudHlwZSk7CisgICAgICAgICAgICByZXR1cm4gQzJfQkFEX1ZBTFVFOworICAgIH0KKworICAgIHN3aXRjaCAobUl2VmlkZW9Db2xvckZvcm1hdCkgeworICAgICAgICBjYXNlIElWX1lVVl80MjBQOgorICAgICAgICB7CisgICAgICAgICAgICAvLyBpbnB1dCBidWZmZXIgaXMgc3VwcG9zZWQgdG8gYmUgY29uc3QgYnV0IEl0dGlhbSBBUEkgd2FudHMgYmFyZSBwb2ludGVyLgorICAgICAgICAgICAgcHNfaW5wX3Jhd19idWYtPmFwdl9idWZzWzBdID0geVBsYW5lOworICAgICAgICAgICAgcHNfaW5wX3Jhd19idWYtPmFwdl9idWZzWzFdID0gdVBsYW5lOworICAgICAgICAgICAgcHNfaW5wX3Jhd19idWYtPmFwdl9idWZzWzJdID0gdlBsYW5lOworCisgICAgICAgICAgICBwc19pbnBfcmF3X2J1Zi0+YXU0X3dkWzBdID0gaW5wdXQtPndpZHRoKCk7CisgICAgICAgICAgICBwc19pbnBfcmF3X2J1Zi0+YXU0X3dkWzFdID0gaW5wdXQtPndpZHRoKCkgLyAyOworICAgICAgICAgICAgcHNfaW5wX3Jhd19idWYtPmF1NF93ZFsyXSA9IGlucHV0LT53aWR0aCgpIC8gMjsKKworICAgICAgICAgICAgcHNfaW5wX3Jhd19idWYtPmF1NF9odFswXSA9IGlucHV0LT5oZWlnaHQoKTsKKyAgICAgICAgICAgIHBzX2lucF9yYXdfYnVmLT5hdTRfaHRbMV0gPSBpbnB1dC0+aGVpZ2h0KCkgLyAyOworICAgICAgICAgICAgcHNfaW5wX3Jhd19idWYtPmF1NF9odFsyXSA9IGlucHV0LT5oZWlnaHQoKSAvIDI7CisKKyAgICAgICAgICAgIHBzX2lucF9yYXdfYnVmLT5hdTRfc3RyZFswXSA9IHlTdHJpZGU7CisgICAgICAgICAgICBwc19pbnBfcmF3X2J1Zi0+YXU0X3N0cmRbMV0gPSB1U3RyaWRlOworICAgICAgICAgICAgcHNfaW5wX3Jhd19idWYtPmF1NF9zdHJkWzJdID0gdlN0cmlkZTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICAgICAgY2FzZSBJVl9ZVVZfNDIySUxFOgorICAgICAgICB7CisgICAgICAgICAgICAvLyBUT0RPCisgICAgICAgICAgICAvLyBwc19pbnBfcmF3X2J1Zi0+YXB2X2J1ZnNbMF0gPSBwdTFfYnVmOworICAgICAgICAgICAgLy8gcHNfaW5wX3Jhd19idWYtPmF1NF93ZFswXSA9IG1XaWR0aCAqIDI7CisgICAgICAgICAgICAvLyBwc19pbnBfcmF3X2J1Zi0+YXU0X2h0WzBdID0gbUhlaWdodDsKKyAgICAgICAgICAgIC8vIHBzX2lucF9yYXdfYnVmLT5hdTRfc3RyZFswXSA9IG1TdHJpZGUgKiAyOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgICBjYXNlIElWX1lVVl80MjBTUF9VVjoKKyAgICAgICAgY2FzZSBJVl9ZVVZfNDIwU1BfVlU6CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgIHsKKyAgICAgICAgICAgIHBzX2lucF9yYXdfYnVmLT5hcHZfYnVmc1swXSA9IHlQbGFuZTsKKyAgICAgICAgICAgIHBzX2lucF9yYXdfYnVmLT5hcHZfYnVmc1sxXSA9IHVQbGFuZTsKKworICAgICAgICAgICAgcHNfaW5wX3Jhd19idWYtPmF1NF93ZFswXSA9IGlucHV0LT53aWR0aCgpOworICAgICAgICAgICAgcHNfaW5wX3Jhd19idWYtPmF1NF93ZFsxXSA9IGlucHV0LT53aWR0aCgpOworCisgICAgICAgICAgICBwc19pbnBfcmF3X2J1Zi0+YXU0X2h0WzBdID0gaW5wdXQtPmhlaWdodCgpOworICAgICAgICAgICAgcHNfaW5wX3Jhd19idWYtPmF1NF9odFsxXSA9IGlucHV0LT5oZWlnaHQoKSAvIDI7CisKKyAgICAgICAgICAgIHBzX2lucF9yYXdfYnVmLT5hdTRfc3RyZFswXSA9IHlTdHJpZGU7CisgICAgICAgICAgICBwc19pbnBfcmF3X2J1Zi0+YXU0X3N0cmRbMV0gPSB1U3RyaWRlOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICB9CisgICAgcmV0dXJuIEMyX09LOworfQorCit2b2lkIEMyU29mdEF2Y0VuYzo6cHJvY2VzcygKKyAgICAgICAgY29uc3Qgc3RkOjp1bmlxdWVfcHRyPEMyV29yaz4gJndvcmssCisgICAgICAgIGNvbnN0IHN0ZDo6c2hhcmVkX3B0cjxDMkJsb2NrUG9vbD4gJnBvb2wpIHsKKyAgICAvLyBJbml0aWFsaXplIG91dHB1dCB3b3JrCisgICAgd29yay0+cmVzdWx0ID0gQzJfT0s7CisgICAgd29yay0+d29ya2xldHNQcm9jZXNzZWQgPSAxdTsKKyAgICB3b3JrLT53b3JrbGV0cy5mcm9udCgpLT5vdXRwdXQuZmxhZ3MgPSB3b3JrLT5pbnB1dC5mbGFnczsKKworICAgIElWX1NUQVRVU19UIHN0YXR1czsKKyAgICBXT1JEMzIgdGltZURlbGF5LCB0aW1lVGFrZW47CisgICAgdWludDY0X3QgdGltZXN0YW1wID0gd29yay0+aW5wdXQub3JkaW5hbC50aW1lc3RhbXAucGVla3VsbCgpOworCisgICAgLy8gSW5pdGlhbGl6ZSBlbmNvZGVyIGlmIG5vdCBhbHJlYWR5IGluaXRpYWxpemVkCisgICAgaWYgKG1Db2RlY0N0eCA9PSBudWxscHRyKSB7CisgICAgICAgIGlmIChDMl9PSyAhPSBpbml0RW5jb2RlcigpKSB7CisgICAgICAgICAgICBBTE9HRSgiRmFpbGVkIHRvIGluaXRpYWxpemUgZW5jb2RlciIpOworICAgICAgICAgICAgbVNpZ25hbGxlZEVycm9yID0gdHJ1ZTsKKyAgICAgICAgICAgIHdvcmstPnJlc3VsdCA9IEMyX0NPUlJVUFRFRDsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgIH0KKyAgICBpZiAobVNpZ25hbGxlZEVycm9yKSB7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICAvLyB3aGlsZSAoIW1TYXdPdXRwdXRFT1MgJiYgIW91dFF1ZXVlLmVtcHR5KCkpIHsKKyAgICBjMl9zdGF0dXNfdCBlcnJvcjsKKyAgICBpdmVfdmlkZW9fZW5jb2RlX2lwX3Qgc19lbmNvZGVfaXA7CisgICAgaXZlX3ZpZGVvX2VuY29kZV9vcF90IHNfZW5jb2RlX29wOworCisgICAgaWYgKCFtU3BzUHBzSGVhZGVyUmVjZWl2ZWQpIHsKKyAgICAgICAgY29uc3RleHByIHVpbnQzMl90IGtIZWFkZXJMZW5ndGggPSBNSU5fU1RSRUFNX1NJWkU7CisgICAgICAgIHVpbnQ4X3QgaGVhZGVyW2tIZWFkZXJMZW5ndGhdOworICAgICAgICBlcnJvciA9IHNldEVuY29kZUFyZ3MoCisgICAgICAgICAgICAgICAgJnNfZW5jb2RlX2lwLCAmc19lbmNvZGVfb3AsIG51bGxwdHIsIGhlYWRlciwga0hlYWRlckxlbmd0aCwgdGltZXN0YW1wKTsKKyAgICAgICAgaWYgKGVycm9yICE9IEMyX09LKSB7CisgICAgICAgICAgICBBTE9HRSgic2V0RW5jb2RlQXJncyBmYWlsZWQ6ICVkIiwgZXJyb3IpOworICAgICAgICAgICAgbVNpZ25hbGxlZEVycm9yID0gdHJ1ZTsKKyAgICAgICAgICAgIHdvcmstPnJlc3VsdCA9IEMyX0NPUlJVUFRFRDsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICBzdGF0dXMgPSBpdmVfYXBpX2Z1bmN0aW9uKG1Db2RlY0N0eCwgJnNfZW5jb2RlX2lwLCAmc19lbmNvZGVfb3ApOworCisgICAgICAgIGlmIChJVl9TVUNDRVNTICE9IHN0YXR1cykgeworICAgICAgICAgICAgQUxPR0UoIkVuY29kZSBoZWFkZXIgZmFpbGVkID0gMHgleFxuIiwKKyAgICAgICAgICAgICAgICAgICAgc19lbmNvZGVfb3AudTRfZXJyb3JfY29kZSk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBBTE9HVigiQnl0ZXMgR2VuZXJhdGVkIGluIGhlYWRlciAlZFxuIiwKKyAgICAgICAgICAgICAgICAgICAgc19lbmNvZGVfb3Auc19vdXRfYnVmLnU0X2J5dGVzKTsKKyAgICAgICAgfQorCisgICAgICAgIG1TcHNQcHNIZWFkZXJSZWNlaXZlZCA9IHRydWU7CisKKyAgICAgICAgc3RkOjp1bmlxdWVfcHRyPEMyU3RyZWFtQ3NkSW5mbzo6b3V0cHV0PiBjc2QgPQorICAgICAgICAgICAgQzJTdHJlYW1Dc2RJbmZvOjpvdXRwdXQ6OkFsbG9jVW5pcXVlKHNfZW5jb2RlX29wLnNfb3V0X2J1Zi51NF9ieXRlcywgMHUpOworICAgICAgICBpZiAoIWNzZCkgeworICAgICAgICAgICAgQUxPR0UoIkNTRCBhbGxvY2F0aW9uIGZhaWxlZCIpOworICAgICAgICAgICAgbVNpZ25hbGxlZEVycm9yID0gdHJ1ZTsKKyAgICAgICAgICAgIHdvcmstPnJlc3VsdCA9IEMyX05PX01FTU9SWTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICBtZW1jcHkoY3NkLT5tLnZhbHVlLCBoZWFkZXIsIHNfZW5jb2RlX29wLnNfb3V0X2J1Zi51NF9ieXRlcyk7CisgICAgICAgIHdvcmstPndvcmtsZXRzLmZyb250KCktPm91dHB1dC5jb25maWdVcGRhdGUucHVzaF9iYWNrKHN0ZDo6bW92ZShjc2QpKTsKKworICAgICAgICBEVU1QX1RPX0ZJTEUoCisgICAgICAgICAgICAgICAgbU91dEZpbGUsIGNzZC0+bS52YWx1ZSwgY3NkLT5mbGV4Q291bnQoKSk7CisgICAgfQorCisgICAgLy8gaGFuZGxlIGR5bmFtaWMgY29uZmlnIHBhcmFtZXRlcnMKKyAgICB7CisgICAgICAgIEludGZJbXBsOjpMb2NrIGxvY2sgPSBtSW50Zi0+bG9jaygpOworICAgICAgICBzdGQ6OnNoYXJlZF9wdHI8QzJTdHJlYW1JbnRyYVJlZnJlc2hUdW5pbmc6Om91dHB1dD4gaW50cmFSZWZyZXNoID0gbUludGYtPmdldEludHJhUmVmcmVzaF9sKCk7CisgICAgICAgIHN0ZDo6c2hhcmVkX3B0cjxDMlN0cmVhbUJpdHJhdGVJbmZvOjpvdXRwdXQ+IGJpdHJhdGUgPSBtSW50Zi0+Z2V0Qml0cmF0ZV9sKCk7CisgICAgICAgIHN0ZDo6c2hhcmVkX3B0cjxDMlN0cmVhbVJlcXVlc3RTeW5jRnJhbWVUdW5pbmc6Om91dHB1dD4gcmVxdWVzdFN5bmMgPSBtSW50Zi0+Z2V0UmVxdWVzdFN5bmNfbCgpOworICAgICAgICBsb2NrLnVubG9jaygpOworCisgICAgICAgIGlmIChiaXRyYXRlICE9IG1CaXRyYXRlKSB7CisgICAgICAgICAgICBtQml0cmF0ZSA9IGJpdHJhdGU7CisgICAgICAgICAgICBzZXRCaXRSYXRlKCk7CisgICAgICAgIH0KKworICAgICAgICBpZiAoaW50cmFSZWZyZXNoICE9IG1JbnRyYVJlZnJlc2gpIHsKKyAgICAgICAgICAgIG1JbnRyYVJlZnJlc2ggPSBpbnRyYVJlZnJlc2g7CisgICAgICAgICAgICBzZXRBaXJQYXJhbXMoKTsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChyZXF1ZXN0U3luYyAhPSBtUmVxdWVzdFN5bmMpIHsKKyAgICAgICAgICAgIC8vIHdlIGNhbiBoYW5kbGUgSURSIGltbWVkaWF0ZWx5CisgICAgICAgICAgICBpZiAocmVxdWVzdFN5bmMtPnZhbHVlKSB7CisgICAgICAgICAgICAgICAgLy8gdW5zZXQgcmVxdWVzdAorICAgICAgICAgICAgICAgIEMyU3RyZWFtUmVxdWVzdFN5bmNGcmFtZVR1bmluZzo6b3V0cHV0IGNsZWFyU3luYygwdSwgQzJfRkFMU0UpOworICAgICAgICAgICAgICAgIHN0ZDo6dmVjdG9yPHN0ZDo6dW5pcXVlX3B0cjxDMlNldHRpbmdSZXN1bHQ+PiBmYWlsdXJlczsKKyAgICAgICAgICAgICAgICBtSW50Zi0+Y29uZmlnKHsgJmNsZWFyU3luYyB9LCBDMl9NQVlfQkxPQ0ssICZmYWlsdXJlcyk7CisgICAgICAgICAgICAgICAgQUxPR1YoIkdvdCBzeW5jIHJlcXVlc3QiKTsKKyAgICAgICAgICAgICAgICBzZXRGcmFtZVR5cGUoSVZfSURSX0ZSQU1FKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIG1SZXF1ZXN0U3luYyA9IHJlcXVlc3RTeW5jOworICAgICAgICB9CisgICAgfQorCisgICAgaWYgKHdvcmstPmlucHV0LmZsYWdzICYgQzJGcmFtZURhdGE6OkZMQUdfRU5EX09GX1NUUkVBTSkgeworICAgICAgICBtU2F3SW5wdXRFT1MgPSB0cnVlOworICAgIH0KKworICAgIC8qIEluIG5vcm1hbCBtb2RlLCBzdG9yZSBpbnB1dEJ1ZmZlckluZm8gYW5kIHRoaXMgd2lsbCBiZSByZXR1cm5lZAorICAgICAgIHdoZW4gZW5jb2RlciBjb25zdW1lcyB0aGlzIGlucHV0ICovCisgICAgLy8gaWYgKCFtSW5wdXREYXRhSXNNZXRhICYmIChpbnB1dEJ1ZmZlckluZm8gIT0gTlVMTCkpIHsKKyAgICAvLyAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBNQVhfSU5QVVRfQlVGRkVSX0hFQURFUlM7IGkrKykgeworICAgIC8vICAgICAgICAgaWYgKE5VTEwgPT0gbUlucHV0QnVmZmVySW5mb1tpXSkgeworICAgIC8vICAgICAgICAgICAgIG1JbnB1dEJ1ZmZlckluZm9baV0gPSBpbnB1dEJ1ZmZlckluZm87CisgICAgLy8gICAgICAgICAgICAgYnJlYWs7CisgICAgLy8gICAgICAgICB9CisgICAgLy8gICAgIH0KKyAgICAvLyB9CisgICAgc3RkOjpzaGFyZWRfcHRyPGNvbnN0IEMyR3JhcGhpY1ZpZXc+IHZpZXc7CisgICAgc3RkOjpzaGFyZWRfcHRyPEMyQnVmZmVyPiBpbnB1dEJ1ZmZlcjsKKyAgICBpZiAoIXdvcmstPmlucHV0LmJ1ZmZlcnMuZW1wdHkoKSkgeworICAgICAgICBpbnB1dEJ1ZmZlciA9IHdvcmstPmlucHV0LmJ1ZmZlcnNbMF07CisgICAgICAgIHZpZXcgPSBzdGQ6Om1ha2Vfc2hhcmVkPGNvbnN0IEMyR3JhcGhpY1ZpZXc+KAorICAgICAgICAgICAgICAgIGlucHV0QnVmZmVyLT5kYXRhKCkuZ3JhcGhpY0Jsb2NrcygpLmZyb250KCkubWFwKCkuZ2V0KCkpOworICAgICAgICBpZiAodmlldy0+ZXJyb3IoKSAhPSBDMl9PSykgeworICAgICAgICAgICAgQUxPR0UoImdyYXBoaWMgdmlldyBtYXAgZXJyID0gJWQiLCB2aWV3LT5lcnJvcigpKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgIH0KKworICAgIHN0ZDo6c2hhcmVkX3B0cjxDMkxpbmVhckJsb2NrPiBibG9jazsKKworICAgIGRvIHsKKyAgICAgICAgQzJNZW1vcnlVc2FnZSB1c2FnZSA9IHsgQzJNZW1vcnlVc2FnZTo6Q1BVX1JFQUQsIEMyTWVtb3J5VXNhZ2U6OkNQVV9XUklURSB9OworICAgICAgICAvLyBUT0RPOiBlcnJvciBoYW5kbGluZywgcHJvcGVyIHVzYWdlLCBldGMuCisgICAgICAgIGMyX3N0YXR1c190IGVyciA9IHBvb2wtPmZldGNoTGluZWFyQmxvY2sobU91dEJ1ZmZlclNpemUsIHVzYWdlLCAmYmxvY2spOworICAgICAgICBpZiAoZXJyICE9IEMyX09LKSB7CisgICAgICAgICAgICBBTE9HRSgiZmV0Y2ggbGluZWFyIGJsb2NrIGVyciA9ICVkIiwgZXJyKTsKKyAgICAgICAgICAgIHdvcmstPnJlc3VsdCA9IGVycjsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICBDMldyaXRlVmlldyB3VmlldyA9IGJsb2NrLT5tYXAoKS5nZXQoKTsKKyAgICAgICAgaWYgKHdWaWV3LmVycm9yKCkgIT0gQzJfT0spIHsKKyAgICAgICAgICAgIEFMT0dFKCJ3cml0ZSB2aWV3IG1hcCBlcnIgPSAlZCIsIHdWaWV3LmVycm9yKCkpOworICAgICAgICAgICAgd29yay0+cmVzdWx0ID0gd1ZpZXcuZXJyb3IoKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIGVycm9yID0gc2V0RW5jb2RlQXJncygKKyAgICAgICAgICAgICAgICAmc19lbmNvZGVfaXAsICZzX2VuY29kZV9vcCwgdmlldy5nZXQoKSwgd1ZpZXcuYmFzZSgpLCB3Vmlldy5jYXBhY2l0eSgpLCB0aW1lc3RhbXApOworICAgICAgICBpZiAoZXJyb3IgIT0gQzJfT0spIHsKKyAgICAgICAgICAgIEFMT0dFKCJzZXRFbmNvZGVBcmdzIGZhaWxlZCA6ICVkIiwgZXJyb3IpOworICAgICAgICAgICAgbVNpZ25hbGxlZEVycm9yID0gdHJ1ZTsKKyAgICAgICAgICAgIHdvcmstPnJlc3VsdCA9IGVycm9yOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgLy8gRFVNUF9UT19GSUxFKAorICAgICAgICAvLyAgICAgICAgIG1JbkZpbGUsIHNfZW5jb2RlX2lwLnNfaW5wX2J1Zi5hcHZfYnVmc1swXSwKKyAgICAgICAgLy8gICAgICAgICAobUhlaWdodCAqIG1TdHJpZGUgKiAzIC8gMikpOworCisgICAgICAgIEdFVFRJTUUoJm1UaW1lU3RhcnQsIG51bGxwdHIpOworICAgICAgICAvKiBDb21wdXRlIHRpbWUgZWxhcHNlZCBiZXR3ZWVuIGVuZCBvZiBwcmV2aW91cyBkZWNvZGUoKQorICAgICAgICAgKiB0byBzdGFydCBvZiBjdXJyZW50IGRlY29kZSgpICovCisgICAgICAgIFRJTUVfRElGRihtVGltZUVuZCwgbVRpbWVTdGFydCwgdGltZURlbGF5KTsKKyAgICAgICAgc3RhdHVzID0gaXZlX2FwaV9mdW5jdGlvbihtQ29kZWNDdHgsICZzX2VuY29kZV9pcCwgJnNfZW5jb2RlX29wKTsKKworICAgICAgICBpZiAoSVZfU1VDQ0VTUyAhPSBzdGF0dXMpIHsKKyAgICAgICAgICAgIGlmICgoc19lbmNvZGVfb3AudTRfZXJyb3JfY29kZSAmIDB4RkYpID09IElIMjY0RV9CSVRTVFJFQU1fQlVGRkVSX09WRVJGTE9XKSB7CisgICAgICAgICAgICAgICAgLy8gVE9ETzogdXNlIElWRV9DTURfQ1RMX0dFVEJVRklORk8gZm9yIHByb3BlciBtYXggaW5wdXQgc2l6ZT8KKyAgICAgICAgICAgICAgICBtT3V0QnVmZmVyU2l6ZSAqPSAyOworICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgfQorICAgICAgICAgICAgQUxPR0UoIkVuY29kZSBGcmFtZSBmYWlsZWQgPSAweCV4XG4iLAorICAgICAgICAgICAgICAgICAgICBzX2VuY29kZV9vcC51NF9lcnJvcl9jb2RlKTsKKyAgICAgICAgICAgIG1TaWduYWxsZWRFcnJvciA9IHRydWU7CisgICAgICAgICAgICB3b3JrLT5yZXN1bHQgPSBDMl9DT1JSVVBURUQ7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICB9IHdoaWxlIChJVl9TVUNDRVNTICE9IHN0YXR1cyk7CisKKyAgICAvLyBIb2xkIGlucHV0IGJ1ZmZlciByZWZlcmVuY2UKKyAgICBpZiAoaW5wdXRCdWZmZXIpIHsKKyAgICAgICAgbUJ1ZmZlcnNbc19lbmNvZGVfaXAuc19pbnBfYnVmLmFwdl9idWZzWzBdXSA9IGlucHV0QnVmZmVyOworICAgIH0KKworICAgIEdFVFRJTUUoJm1UaW1lRW5kLCBudWxscHRyKTsKKyAgICAvKiBDb21wdXRlIHRpbWUgdGFrZW4gZm9yIGRlY29kZSgpICovCisgICAgVElNRV9ESUZGKG1UaW1lU3RhcnQsIG1UaW1lRW5kLCB0aW1lVGFrZW4pOworCisgICAgQUxPR1YoInRpbWVUYWtlbj0lNmQgZGVsYXk9JTZkIG51bUJ5dGVzPSU2ZCIsIHRpbWVUYWtlbiwgdGltZURlbGF5LAorICAgICAgICAgICAgc19lbmNvZGVfb3Auc19vdXRfYnVmLnU0X2J5dGVzKTsKKworICAgIHZvaWQgKmZyZWVkID0gc19lbmNvZGVfb3Auc19pbnBfYnVmLmFwdl9idWZzWzBdOworICAgIC8qIElmIGVuY29kZXIgZnJlZXMgdXAgYW4gaW5wdXQgYnVmZmVyLCBtYXJrIGl0IGFzIGZyZWUgKi8KKyAgICBpZiAoZnJlZWQgIT0gbnVsbHB0cikgeworICAgICAgICBpZiAobUJ1ZmZlcnMuY291bnQoZnJlZWQpID09IDB1KSB7CisgICAgICAgICAgICBBTE9HRCgiYnVmZmVyIG5vdCB0cmFja2VkIik7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAvLyBSZWxlYXNlIGlucHV0IGJ1ZmZlciByZWZlcmVuY2UKKyAgICAgICAgICAgIG1CdWZmZXJzLmVyYXNlKGZyZWVkKTsKKyAgICAgICAgICAgIG1Db252ZXJzaW9uQnVmZmVyc0luVXNlLmVyYXNlKGZyZWVkKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHdvcmstPndvcmtsZXRzLmZyb250KCktPm91dHB1dC5mbGFncyA9IHdvcmstPmlucHV0LmZsYWdzOworICAgIHdvcmstPndvcmtsZXRzLmZyb250KCktPm91dHB1dC5vcmRpbmFsID0gd29yay0+aW5wdXQub3JkaW5hbDsKKyAgICB3b3JrLT53b3JrbGV0cy5mcm9udCgpLT5vdXRwdXQub3JkaW5hbC50aW1lc3RhbXAgPQorICAgICAgICAoKHVpbnQ2NF90KXNfZW5jb2RlX29wLnU0X3RpbWVzdGFtcF9oaWdoIDw8IDMyKSB8IHNfZW5jb2RlX29wLnU0X3RpbWVzdGFtcF9sb3c7CisgICAgd29yay0+d29ya2xldHMuZnJvbnQoKS0+b3V0cHV0LmJ1ZmZlcnMuY2xlYXIoKTsKKworICAgIGlmIChzX2VuY29kZV9vcC5zX291dF9idWYudTRfYnl0ZXMpIHsKKyAgICAgICAgc3RkOjpzaGFyZWRfcHRyPEMyQnVmZmVyPiBidWZmZXIgPQorICAgICAgICAgICAgY3JlYXRlTGluZWFyQnVmZmVyKGJsb2NrLCAwLCBzX2VuY29kZV9vcC5zX291dF9idWYudTRfYnl0ZXMpOworICAgICAgICBpZiAoSVZfSURSX0ZSQU1FID09IHNfZW5jb2RlX29wLnU0X2VuY29kZWRfZnJhbWVfdHlwZSkgeworICAgICAgICAgICAgQUxPR1YoIklEUiBmcmFtZSBwcm9kdWNlZCIpOworICAgICAgICAgICAgYnVmZmVyLT5zZXRJbmZvKHN0ZDo6bWFrZV9zaGFyZWQ8QzJTdHJlYW1QaWN0dXJlVHlwZU1hc2tJbmZvOjpvdXRwdXQ+KAorICAgICAgICAgICAgICAgICAgICAwdSAvKiBzdHJlYW0gaWQgKi8sIEMyUGljdHVyZVR5cGVLZXlGcmFtZSkpOworICAgICAgICB9CisgICAgICAgIHdvcmstPndvcmtsZXRzLmZyb250KCktPm91dHB1dC5idWZmZXJzLnB1c2hfYmFjayhidWZmZXIpOworICAgIH0KKworICAgIGlmIChzX2VuY29kZV9vcC51NF9pc19sYXN0KSB7CisgICAgICAgIC8vIG91dHB1dEJ1ZmZlckhlYWRlci0+bkZsYWdzIHw9IE9NWF9CVUZGRVJGTEFHX0VPUzsKKyAgICAgICAgbVNhd091dHB1dEVPUyA9IHRydWU7CisgICAgfSBlbHNlIHsKKyAgICAgICAgLy8gb3V0cHV0QnVmZmVySGVhZGVyLT5uRmxhZ3MgJj0gfk9NWF9CVUZGRVJGTEFHX0VPUzsKKyAgICB9Cit9CisKK2MyX3N0YXR1c190IEMyU29mdEF2Y0VuYzo6ZHJhaW4oCisgICAgICAgIHVpbnQzMl90IGRyYWluTW9kZSwKKyAgICAgICAgY29uc3Qgc3RkOjpzaGFyZWRfcHRyPEMyQmxvY2tQb29sPiAmcG9vbCkgeworICAgIC8vIFRPRE86IHVzZSBJVkVfQ01EX0NUTF9GTFVTSD8KKyAgICAodm9pZClkcmFpbk1vZGU7CisgICAgKHZvaWQpcG9vbDsKKyAgICByZXR1cm4gQzJfT0s7Cit9CisKKworY2xhc3MgQzJTb2Z0QXZjRW5jRmFjdG9yeSA6IHB1YmxpYyBDMkNvbXBvbmVudEZhY3RvcnkgeworcHVibGljOgorICAgIEMyU29mdEF2Y0VuY0ZhY3RvcnkoKSA6IG1IZWxwZXIoc3RkOjpzdGF0aWNfcG9pbnRlcl9jYXN0PEMyUmVmbGVjdG9ySGVscGVyPigKKyAgICAgICAgR2V0Q29kZWMyUGxhdGZvcm1Db21wb25lbnRTdG9yZSgpLT5nZXRQYXJhbVJlZmxlY3RvcigpKSkgeworICAgIH0KKworICAgIHZpcnR1YWwgYzJfc3RhdHVzX3QgY3JlYXRlQ29tcG9uZW50KAorICAgICAgICAgICAgYzJfbm9kZV9pZF90IGlkLAorICAgICAgICAgICAgc3RkOjpzaGFyZWRfcHRyPEMyQ29tcG9uZW50PiogY29uc3QgY29tcG9uZW50LAorICAgICAgICAgICAgc3RkOjpmdW5jdGlvbjx2b2lkKEMyQ29tcG9uZW50Kik+IGRlbGV0ZXIpIG92ZXJyaWRlIHsKKyAgICAgICAgKmNvbXBvbmVudCA9IHN0ZDo6c2hhcmVkX3B0cjxDMkNvbXBvbmVudD4oCisgICAgICAgICAgICAgICAgbmV3IEMyU29mdEF2Y0VuYyhDT01QT05FTlRfTkFNRSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RkOjptYWtlX3NoYXJlZDxDMlNvZnRBdmNFbmM6OkludGZJbXBsPihtSGVscGVyKSksCisgICAgICAgICAgICAgICAgZGVsZXRlcik7CisgICAgICAgIHJldHVybiBDMl9PSzsKKyAgICB9CisKKyAgICB2aXJ0dWFsIGMyX3N0YXR1c190IGNyZWF0ZUludGVyZmFjZSgKKyAgICAgICAgICAgIGMyX25vZGVfaWRfdCBpZCwKKyAgICAgICAgICAgIHN0ZDo6c2hhcmVkX3B0cjxDMkNvbXBvbmVudEludGVyZmFjZT4qIGNvbnN0IGludGVyZmFjZSwKKyAgICAgICAgICAgIHN0ZDo6ZnVuY3Rpb248dm9pZChDMkNvbXBvbmVudEludGVyZmFjZSopPiBkZWxldGVyKSBvdmVycmlkZSB7CisgICAgICAgICppbnRlcmZhY2UgPSBzdGQ6OnNoYXJlZF9wdHI8QzJDb21wb25lbnRJbnRlcmZhY2U+KAorICAgICAgICAgICAgICAgIG5ldyBTaW1wbGVJbnRlcmZhY2U8QzJTb2Z0QXZjRW5jOjpJbnRmSW1wbD4oCisgICAgICAgICAgICAgICAgICAgICAgICBDT01QT05FTlRfTkFNRSwgaWQsIHN0ZDo6bWFrZV9zaGFyZWQ8QzJTb2Z0QXZjRW5jOjpJbnRmSW1wbD4obUhlbHBlcikpLAorICAgICAgICAgICAgICAgIGRlbGV0ZXIpOworICAgICAgICByZXR1cm4gQzJfT0s7CisgICAgfQorCisgICAgdmlydHVhbCB+QzJTb2Z0QXZjRW5jRmFjdG9yeSgpIG92ZXJyaWRlID0gZGVmYXVsdDsKKworcHJpdmF0ZToKKyAgICBzdGQ6OnNoYXJlZF9wdHI8QzJSZWZsZWN0b3JIZWxwZXI+IG1IZWxwZXI7Cit9OworCit9ICAvLyBuYW1lc3BhY2UgYW5kcm9pZAorCitleHRlcm4gIkMiIDo6QzJDb21wb25lbnRGYWN0b3J5KiBDcmVhdGVDb2RlYzJGYWN0b3J5KCkgeworICAgIEFMT0dWKCJpbiAlcyIsIF9fZnVuY19fKTsKKyAgICByZXR1cm4gbmV3IDo6YW5kcm9pZDo6QzJTb2Z0QXZjRW5jRmFjdG9yeSgpOworfQorCitleHRlcm4gIkMiIHZvaWQgRGVzdHJveUNvZGVjMkZhY3RvcnkoOjpDMkNvbXBvbmVudEZhY3RvcnkqIGZhY3RvcnkpIHsKKyAgICBBTE9HVigiaW4gJXMiLCBfX2Z1bmNfXyk7CisgICAgZGVsZXRlIGZhY3Rvcnk7Cit9CmRpZmYgLS1naXQgYS9tZWRpYS9jb2RlYzIvY29tcG9uZW50cy9hdmMvQzJTb2Z0QXZjRW5jLmggYi9tZWRpYS9jb2RlYzIvY29tcG9uZW50cy9hdmMvQzJTb2Z0QXZjRW5jLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWEzY2E2MQotLS0gL2Rldi9udWxsCisrKyBiL21lZGlhL2NvZGVjMi9jb21wb25lbnRzL2F2Yy9DMlNvZnRBdmNFbmMuaApAQCAtMCwwICsxLDI5NiBAQAorLyoKKyAqIENvcHlyaWdodCAyMDE4IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KKworI2lmbmRlZiBBTkRST0lEX0MyX1NPRlRfQVZDX0VOQ19IX18KKyNkZWZpbmUgQU5EUk9JRF9DMl9TT0ZUX0FWQ19FTkNfSF9fCisKKyNpbmNsdWRlIDxtYXA+CisKKyNpbmNsdWRlIDx1dGlscy9WZWN0b3IuaD4KKworI2luY2x1ZGUgPFNpbXBsZUMyQ29tcG9uZW50Lmg+CisKKyNpbmNsdWRlICJpaDI2NF90eXBlZGVmcy5oIgorI2luY2x1ZGUgIml2Mi5oIgorI2luY2x1ZGUgIml2ZTIuaCIKKworbmFtZXNwYWNlIGFuZHJvaWQgeworCisjZGVmaW5lIENPREVDX01BWF9DT1JFUyAgICAgICAgICA0CisjZGVmaW5lIExFTl9TVEFUVVNfQlVGRkVSICAgICAgICAoMTAgICogMTAyNCkKKyNkZWZpbmUgTUFYX1ZCVl9CVUZGX1NJWkUgICAgICAgICgxMjAgKiAxNjM4NCkKKyNkZWZpbmUgTUFYX05VTV9JT19CVUZTICAgICAgICAgICAzCisKKyNkZWZpbmUgREVGQVVMVF9NQVhfUkVGX0ZSTSAgICAgICAgIDIKKyNkZWZpbmUgREVGQVVMVF9NQVhfUkVPUkRFUl9GUk0gICAgIDAKKyNkZWZpbmUgREVGQVVMVF9RUF9NSU4gICAgICAgICAgICAgIDEwCisjZGVmaW5lIERFRkFVTFRfUVBfTUFYICAgICAgICAgICAgICA0MAorI2RlZmluZSBERUZBVUxUX01BWF9CSVRSQVRFICAgICAgICAgMjAwMDAwMDAKKyNkZWZpbmUgREVGQVVMVF9NQVhfU1JDSF9SQU5HRV9YICAgIDI1NgorI2RlZmluZSBERUZBVUxUX01BWF9TUkNIX1JBTkdFX1kgICAgMjU2CisjZGVmaW5lIERFRkFVTFRfTUFYX0ZSQU1FUkFURSAgICAgICAxMjAwMDAKKyNkZWZpbmUgREVGQVVMVF9OVU1fQ09SRVMgICAgICAgICAgIDEKKyNkZWZpbmUgREVGQVVMVF9OVU1fQ09SRVNfUFJFX0VOQyAgIDAKKyNkZWZpbmUgREVGQVVMVF9GUFMgICAgICAgICAgICAgICAgIDMwCisjZGVmaW5lIERFRkFVTFRfRU5DX1NQRUVEICAgICAgICAgICBJVkVfTk9STUFMCisKKyNkZWZpbmUgREVGQVVMVF9NRU1fUkVDX0NOVCAgICAgICAgIDAKKyNkZWZpbmUgREVGQVVMVF9SRUNPTl9FTkFCTEUgICAgICAgIDAKKyNkZWZpbmUgREVGQVVMVF9DSEtTVU1fRU5BQkxFICAgICAgIDAKKyNkZWZpbmUgREVGQVVMVF9TVEFSVF9GUk0gICAgICAgICAgIDAKKyNkZWZpbmUgREVGQVVMVF9OVU1fRlJNUyAgICAgICAgICAgIDB4RkZGRkZGRkYKKyNkZWZpbmUgREVGQVVMVF9JTlBfQ09MT1JfRk9STUFUICAgICAgIElWX1lVVl80MjBTUF9WVQorI2RlZmluZSBERUZBVUxUX1JFQ09OX0NPTE9SX0ZPUk1BVCAgICAgSVZfWVVWXzQyMFAKKyNkZWZpbmUgREVGQVVMVF9MT09QQkFDSyAgICAgICAgICAgIDAKKyNkZWZpbmUgREVGQVVMVF9TUkNfRlJBTUVfUkFURSAgICAgIDMwCisjZGVmaW5lIERFRkFVTFRfVEdUX0ZSQU1FX1JBVEUgICAgICAzMAorI2RlZmluZSBERUZBVUxUX01BWF9XRCAgICAgICAgICAgICAgMTkyMAorI2RlZmluZSBERUZBVUxUX01BWF9IVCAgICAgICAgICAgICAgMTkyMAorI2RlZmluZSBERUZBVUxUX01BWF9MRVZFTCAgICAgICAgICAgNDEKKyNkZWZpbmUgREVGQVVMVF9TVFJJREUgICAgICAgICAgICAgIDAKKyNkZWZpbmUgREVGQVVMVF9XRCAgICAgICAgICAgICAgICAgIDEyODAKKyNkZWZpbmUgREVGQVVMVF9IVCAgICAgICAgICAgICAgICAgIDcyMAorI2RlZmluZSBERUZBVUxUX1BTTlJfRU5BQkxFICAgICAgICAgMAorI2RlZmluZSBERUZBVUxUX01FX1NQRUVEICAgICAgICAgICAgMTAwCisjZGVmaW5lIERFRkFVTFRfRU5BQkxFX0ZBU1RfU0FEICAgICAwCisjZGVmaW5lIERFRkFVTFRfRU5BQkxFX0FMVF9SRUYgICAgICAwCisjZGVmaW5lIERFRkFVTFRfUkNfTU9ERSAgICAgICAgICAgICBJVkVfUkNfU1RPUkFHRQorI2RlZmluZSBERUZBVUxUX0JJVFJBVEUgICAgICAgICAgICAgNjAwMDAwMAorI2RlZmluZSBERUZBVUxUX0lfUVAgICAgICAgICAgICAgICAgMjIKKyNkZWZpbmUgREVGQVVMVF9JX1FQX01BWCAgICAgICAgICAgIERFRkFVTFRfUVBfTUFYCisjZGVmaW5lIERFRkFVTFRfSV9RUF9NSU4gICAgICAgICAgICBERUZBVUxUX1FQX01JTgorI2RlZmluZSBERUZBVUxUX1BfUVAgICAgICAgICAgICAgICAgMjgKKyNkZWZpbmUgREVGQVVMVF9QX1FQX01BWCAgICAgICAgICAgIERFRkFVTFRfUVBfTUFYCisjZGVmaW5lIERFRkFVTFRfUF9RUF9NSU4gICAgICAgICAgICBERUZBVUxUX1FQX01JTgorI2RlZmluZSBERUZBVUxUX0JfUVAgICAgICAgICAgICAgICAgMjIKKyNkZWZpbmUgREVGQVVMVF9CX1FQX01BWCAgICAgICAgICAgIERFRkFVTFRfUVBfTUFYCisjZGVmaW5lIERFRkFVTFRfQl9RUF9NSU4gICAgICAgICAgICBERUZBVUxUX1FQX01JTgorI2RlZmluZSBERUZBVUxUX0FJUiAgICAgICAgICAgICAgICAgSVZFX0FJUl9NT0RFX05PTkUKKyNkZWZpbmUgREVGQVVMVF9BSVJfUkVGUkVTSF9QRVJJT0QgIDMwCisjZGVmaW5lIERFRkFVTFRfU1JDSF9STkdfWCAgICAgICAgICA2NAorI2RlZmluZSBERUZBVUxUX1NSQ0hfUk5HX1kgICAgICAgICAgNDgKKyNkZWZpbmUgREVGQVVMVF9JX0lOVEVSVkFMICAgICAgICAgIDMwCisjZGVmaW5lIERFRkFVTFRfSURSX0lOVEVSVkFMICAgICAgICAxMDAwCisjZGVmaW5lIERFRkFVTFRfQl9GUkFNRVMgICAgICAgICAgICAwCisjZGVmaW5lIERFRkFVTFRfRElTQUJMRV9ERUJMS19MRVZFTCAwCisjZGVmaW5lIERFRkFVTFRfSFBFTCAgICAgICAgICAgICAgICAxCisjZGVmaW5lIERFRkFVTFRfUVBFTCAgICAgICAgICAgICAgICAxCisjZGVmaW5lIERFRkFVTFRfSTQgICAgICAgICAgICAgICAgICAxCisjZGVmaW5lIERFRkFVTFRfRVBST0ZJTEUgICAgICAgICAgICBJVl9QUk9GSUxFX0JBU0UKKyNkZWZpbmUgREVGQVVMVF9FTlRST1BZX01PREUgICAgICAgIDAKKyNkZWZpbmUgREVGQVVMVF9TTElDRV9NT0RFICAgICAgICAgIElWRV9TTElDRV9NT0RFX05PTkUKKyNkZWZpbmUgREVGQVVMVF9TTElDRV9QQVJBTSAgICAgICAgIDI1NgorI2RlZmluZSBERUZBVUxUX0FSQ0ggICAgICAgICAgICAgICAgQVJDSF9BUk1fQTlRCisjZGVmaW5lIERFRkFVTFRfU09DICAgICAgICAgICAgICAgICBTT0NfR0VORVJJQworI2RlZmluZSBERUZBVUxUX0lOVFJBNHg0ICAgICAgICAgICAgMAorI2RlZmluZSBTVFJMRU5HVEggICAgICAgICAgICAgICAgICAgNTAwCisjZGVmaW5lIERFRkFVTFRfQ09OU1RSQUlORURfSU5UUkEgICAwCisKKyNkZWZpbmUgTUlOKGEsIGIpICgoYSkgPCAoYikpPyAoYSkgOiAoYikKKyNkZWZpbmUgTUFYKGEsIGIpICgoYSkgPiAoYikpPyAoYSkgOiAoYikKKyNkZWZpbmUgQUxJR04xNih4KSAoKCgoeCkgKyAxNSkgPj4gNCkgPDwgNCkKKyNkZWZpbmUgQUxJR04xMjgoeCkgKCgoKHgpICsgMTI3KSA+PiA3KSA8PCA3KQorI2RlZmluZSBBTElHTjQwOTYoeCkgKCgoKHgpICsgNDA5NSkgPj4gMTIpIDw8IDEyKQorCisvKiogVXNlZCB0byByZW1vdmUgd2FybmluZ3MgYWJvdXQgdW51c2VkIHBhcmFtZXRlcnMgKi8KKyNkZWZpbmUgVU5VU0VEKHgpICgodm9pZCkoeCkpCisKKy8qKiBHZXQgdGltZSAqLworI2RlZmluZSBHRVRUSU1FKGEsIGIpIGdldHRpbWVvZmRheShhLCBiKTsKKworLyoqIENvbXB1dGUgZGlmZmVyZW5jZSBiZXR3ZWVuIHN0YXJ0IGFuZCBlbmQgKi8KKyNkZWZpbmUgVElNRV9ESUZGKHN0YXJ0LCBlbmQsIGRpZmYpIFwKKyAgICBkaWZmID0gKCgoZW5kKS50dl9zZWMgLSAoc3RhcnQpLnR2X3NlYykgKiAxMDAwMDAwKSArIFwKKyAgICAgICAgICAgICgoZW5kKS50dl91c2VjIC0gKHN0YXJ0KS50dl91c2VjKTsKKworI2RlZmluZSBpdmVfYWxpZ25lZF9tYWxsb2MoYWxpZ25tZW50LCBzaXplKSBtZW1hbGlnbihhbGlnbm1lbnQsIHNpemUpCisjZGVmaW5lIGl2ZV9hbGlnbmVkX2ZyZWUoYnVmKSBmcmVlKGJ1ZikKKworc3RydWN0IEMyU29mdEF2Y0VuYyA6IHB1YmxpYyBTaW1wbGVDMkNvbXBvbmVudCB7CisgICAgY2xhc3MgSW50ZkltcGw7CisKKyAgICBDMlNvZnRBdmNFbmMoY29uc3QgY2hhciAqbmFtZSwgYzJfbm9kZV9pZF90IGlkLCBjb25zdCBzdGQ6OnNoYXJlZF9wdHI8SW50ZkltcGw+ICZpbnRmSW1wbCk7CisKKyAgICAvLyBGcm9tIFNpbXBsZUMyQ29tcG9uZW50CisgICAgYzJfc3RhdHVzX3Qgb25Jbml0KCkgb3ZlcnJpZGU7CisgICAgYzJfc3RhdHVzX3Qgb25TdG9wKCkgb3ZlcnJpZGU7CisgICAgdm9pZCBvblJlc2V0KCkgb3ZlcnJpZGU7CisgICAgdm9pZCBvblJlbGVhc2UoKSBvdmVycmlkZTsKKyAgICBjMl9zdGF0dXNfdCBvbkZsdXNoX3NtKCkgb3ZlcnJpZGU7CisgICAgdm9pZCBwcm9jZXNzKAorICAgICAgICAgICAgY29uc3Qgc3RkOjp1bmlxdWVfcHRyPEMyV29yaz4gJndvcmssCisgICAgICAgICAgICBjb25zdCBzdGQ6OnNoYXJlZF9wdHI8QzJCbG9ja1Bvb2w+ICZwb29sKSBvdmVycmlkZTsKKyAgICBjMl9zdGF0dXNfdCBkcmFpbigKKyAgICAgICAgICAgIHVpbnQzMl90IGRyYWluTW9kZSwKKyAgICAgICAgICAgIGNvbnN0IHN0ZDo6c2hhcmVkX3B0cjxDMkJsb2NrUG9vbD4gJnBvb2wpIG92ZXJyaWRlOworCitwcm90ZWN0ZWQ6CisgICAgdmlydHVhbCB+QzJTb2Z0QXZjRW5jKCk7CisKK3ByaXZhdGU6CisgICAgLy8gT01YIGlucHV0IGJ1ZmZlcidzIHRpbWVzdGFtcCBhbmQgZmxhZ3MKKyAgICB0eXBlZGVmIHN0cnVjdCB7CisgICAgICAgIGludDY0X3QgbVRpbWVVczsKKyAgICAgICAgaW50MzJfdCBtRmxhZ3M7CisgICAgfSBJbnB1dEJ1ZmZlckluZm87CisKKyAgICBzdGQ6OnNoYXJlZF9wdHI8SW50ZkltcGw+IG1JbnRmOworCisgICAgaW50MzJfdCBtU3RyaWRlOworCisgICAgc3RydWN0IHRpbWV2YWwgbVRpbWVTdGFydDsgICAvLyBUaW1lIGF0IHRoZSBzdGFydCBvZiBkZWNvZGUoKQorICAgIHN0cnVjdCB0aW1ldmFsIG1UaW1lRW5kOyAgICAgLy8gVGltZSBhdCB0aGUgZW5kIG9mIGRlY29kZSgpCisKKyNpZmRlZiBGSUxFX0RVTVBfRU5BQkxFCisgICAgY2hhciBtSW5GaWxlWzIwMF07CisgICAgY2hhciBtT3V0RmlsZVsyMDBdOworI2VuZGlmIC8qIEZJTEVfRFVNUF9FTkFCTEUgKi8KKworICAgIElWX0NPTE9SX0ZPUk1BVF9UIG1JdlZpZGVvQ29sb3JGb3JtYXQ7CisKKyAgICBJVl9QUk9GSUxFX1QgbUFWQ0VuY1Byb2ZpbGUgX191bnVzZWQ7CisgICAgV09SRDMyICAgbUFWQ0VuY0xldmVsOworICAgIGJvb2wgICAgIG1TdGFydGVkOworICAgIGJvb2wgICAgIG1TcHNQcHNIZWFkZXJSZWNlaXZlZDsKKworICAgIGJvb2wgICAgIG1TYXdJbnB1dEVPUzsKKyAgICBib29sICAgICBtU2F3T3V0cHV0RU9TOworICAgIGJvb2wgICAgIG1TaWduYWxsZWRFcnJvcjsKKyAgICBib29sICAgICBtSW50cmE0eDQ7CisgICAgYm9vbCAgICAgbUVuYWJsZUZhc3RTYWQ7CisgICAgYm9vbCAgICAgbUVuYWJsZUFsdFJlZjsKKyAgICBib29sICAgICBtUmVjb25FbmFibGU7CisgICAgYm9vbCAgICAgbVBTTlJFbmFibGU7CisgICAgYm9vbCAgICAgbUVudHJvcHlNb2RlOworICAgIGJvb2wgICAgIG1Db25zdHJhaW5lZEludHJhRmxhZzsKKyAgICBJVkVfU1BFRURfQ09ORklHICAgICBtRW5jU3BlZWQ7CisKKyAgICBpdl9vYmpfdCAqbUNvZGVjQ3R4OyAgICAgICAgIC8vIENvZGVjIGNvbnRleHQKKyAgICBpdl9tZW1fcmVjX3QgKm1NZW1SZWNvcmRzOyAgIC8vIE1lbW9yeSByZWNvcmRzIHJlcXVlc3RlZCBieSB0aGUgY29kZWMKKyAgICBzaXplX3QgbU51bU1lbVJlY29yZHM7ICAgICAgIC8vIE51bWJlciBvZiBtZW1vcnkgcmVjb3JkcyByZXF1ZXN0ZWQgYnkgY29kZWMKKyAgICBzaXplX3QgbU51bUNvcmVzOyAgICAgICAgICAgIC8vIE51bWJlciBvZiBjb3JlcyB1c2VkIGJ5IHRoZSBjb2RlYworCisgICAgLy8gY29uZmlndXJhdGlvbnMgdXNlZCBieSBjb21wb25lbnQgaW4gcHJvY2VzcworICAgIC8vIChUT0RPOiBrZWVwIHRoaXMgaW4gaW50ZiBidXQgbWFrZSB0aGVtIGludGVybmFsIG9ubHkpCisgICAgc3RkOjpzaGFyZWRfcHRyPEMyU3RyZWFtUGljdHVyZVNpemVJbmZvOjppbnB1dD4gbVNpemU7CisgICAgc3RkOjpzaGFyZWRfcHRyPEMyU3RyZWFtSW50cmFSZWZyZXNoVHVuaW5nOjpvdXRwdXQ+IG1JbnRyYVJlZnJlc2g7CisgICAgc3RkOjpzaGFyZWRfcHRyPEMyU3RyZWFtRnJhbWVSYXRlSW5mbzo6b3V0cHV0PiBtRnJhbWVSYXRlOworICAgIHN0ZDo6c2hhcmVkX3B0cjxDMlN0cmVhbUJpdHJhdGVJbmZvOjpvdXRwdXQ+IG1CaXRyYXRlOworICAgIHN0ZDo6c2hhcmVkX3B0cjxDMlN0cmVhbVJlcXVlc3RTeW5jRnJhbWVUdW5pbmc6Om91dHB1dD4gbVJlcXVlc3RTeW5jOworCisgICAgdWludDMyX3QgbU91dEJ1ZmZlclNpemU7CisgICAgVVdPUkQzMiBtSGVhZGVyR2VuZXJhdGVkOworICAgIFVXT1JEMzIgbUJmcmFtZXM7CisgICAgSVZfQVJDSF9UIG1BcmNoOworICAgIElWRV9TTElDRV9NT0RFX1QgbVNsaWNlTW9kZTsKKyAgICBVV09SRDMyIG1TbGljZVBhcmFtOworICAgIGJvb2wgbUhhbGZQZWxFbmFibGU7CisgICAgVVdPUkQzMiBtSUludGVydmFsOworICAgIFVXT1JEMzIgbUlEUkludGVydmFsOworICAgIFVXT1JEMzIgbURpc2FibGVEZWJsa0xldmVsOworICAgIHN0ZDo6bWFwPGNvbnN0IHZvaWQgKiwgc3RkOjpzaGFyZWRfcHRyPEMyQnVmZmVyPj4gbUJ1ZmZlcnM7CisgICAgTWVtb3J5QmxvY2tQb29sIG1Db252ZXJzaW9uQnVmZmVyczsKKyAgICBzdGQ6Om1hcDxjb25zdCB2b2lkICosIE1lbW9yeUJsb2NrPiBtQ29udmVyc2lvbkJ1ZmZlcnNJblVzZTsKKworICAgIHZvaWQgaW5pdEVuY1BhcmFtcygpOworICAgIGMyX3N0YXR1c190IGluaXRFbmNvZGVyKCk7CisgICAgYzJfc3RhdHVzX3QgcmVsZWFzZUVuY29kZXIoKTsKKworICAgIGMyX3N0YXR1c190IHNldEZyYW1lVHlwZShJVl9QSUNUVVJFX0NPRElOR19UWVBFX1QgIGVfZnJhbWVfdHlwZSk7CisgICAgYzJfc3RhdHVzX3Qgc2V0UXAoKTsKKyAgICBjMl9zdGF0dXNfdCBzZXRFbmNNb2RlKElWRV9FTkNfTU9ERV9UIGVfZW5jX21vZGUpOworICAgIGMyX3N0YXR1c190IHNldERpbWVuc2lvbnMoKTsKKyAgICBjMl9zdGF0dXNfdCBzZXROdW1Db3JlcygpOworICAgIGMyX3N0YXR1c190IHNldEZyYW1lUmF0ZSgpOworICAgIGMyX3N0YXR1c190IHNldElwZVBhcmFtcygpOworICAgIGMyX3N0YXR1c190IHNldEJpdFJhdGUoKTsKKyAgICBjMl9zdGF0dXNfdCBzZXRBaXJQYXJhbXMoKTsKKyAgICBjMl9zdGF0dXNfdCBzZXRNZVBhcmFtcygpOworICAgIGMyX3N0YXR1c190IHNldEdvcFBhcmFtcygpOworICAgIGMyX3N0YXR1c190IHNldFByb2ZpbGVQYXJhbXMoKTsKKyAgICBjMl9zdGF0dXNfdCBzZXREZWJsb2NrUGFyYW1zKCk7CisgICAgYzJfc3RhdHVzX3Qgc2V0VmJ2UGFyYW1zKCk7CisgICAgdm9pZCBsb2dWZXJzaW9uKCk7CisgICAgYzJfc3RhdHVzX3Qgc2V0RW5jb2RlQXJncygKKyAgICAgICAgICAgIGl2ZV92aWRlb19lbmNvZGVfaXBfdCAqcHNfZW5jb2RlX2lwLAorICAgICAgICAgICAgaXZlX3ZpZGVvX2VuY29kZV9vcF90ICpwc19lbmNvZGVfb3AsCisgICAgICAgICAgICBjb25zdCBDMkdyYXBoaWNWaWV3ICpjb25zdCBpbnB1dCwKKyAgICAgICAgICAgIHVpbnQ4X3QgKmJhc2UsCisgICAgICAgICAgICB1aW50MzJfdCBjYXBhY2l0eSwKKyAgICAgICAgICAgIHVpbnQ2NF90IHRpbWVzdGFtcCk7CisKKyAgICBDMl9ET19OT1RfQ09QWShDMlNvZnRBdmNFbmMpOworfTsKKworI2lmZGVmIEZJTEVfRFVNUF9FTkFCTEUKKworI2RlZmluZSBJTlBVVF9EVU1QX1BBVEggICAgICIvc2RjYXJkL21lZGlhL2F2Y2VfaW5wdXQiCisjZGVmaW5lIElOUFVUX0RVTVBfRVhUICAgICAgInl1diIKKyNkZWZpbmUgT1VUUFVUX0RVTVBfUEFUSCAgICAiL3NkY2FyZC9tZWRpYS9hdmNlX291dHB1dCIKKyNkZWZpbmUgT1VUUFVUX0RVTVBfRVhUICAgICAiaDI2NCIKKworI2RlZmluZSBHRU5FUkFURV9GSUxFX05BTUVTKCkgeyAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgR0VUVElNRSgmbVRpbWVTdGFydCwgTlVMTCk7ICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBzdHJjcHkobUluRmlsZSwgIiIpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIHNwcmludGYobUluRmlsZSwgIiVzXyVsZC4lbGQuJXMiLCBJTlBVVF9EVU1QX1BBVEgsICBcCisgICAgICAgICAgICBtVGltZVN0YXJ0LnR2X3NlYywgbVRpbWVTdGFydC50dl91c2VjLCAgICAgIFwKKyAgICAgICAgICAgIElOUFVUX0RVTVBfRVhUKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIHN0cmNweShtT3V0RmlsZSwgIiIpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgc3ByaW50ZihtT3V0RmlsZSwgIiVzXyVsZC4lbGQuJXMiLCBPVVRQVVRfRFVNUF9QQVRILFwKKyAgICAgICAgICAgIG1UaW1lU3RhcnQudHZfc2VjLCBtVGltZVN0YXJ0LnR2X3VzZWMsICAgICAgXAorICAgICAgICAgICAgT1VUUFVUX0RVTVBfRVhUKTsgICAgICAgICAgICAgICAgICAgICAgICAgICBcCit9CisKKyNkZWZpbmUgQ1JFQVRFX0RVTVBfRklMRShtX2ZpbGVuYW1lKSB7ICAgICAgICAgICAgICAgICAgXAorICAgIEZJTEUgKmZwID0gZm9wZW4obV9maWxlbmFtZSwgIndiIik7ICAgICAgICAgICAgICAgICBcCisgICAgaWYgKGZwICE9IE5VTEwpIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgQUxPR0QoIk9wZW5lZCBmaWxlICVzIiwgbV9maWxlbmFtZSk7ICAgICAgICAgICAgXAorICAgICAgICBmY2xvc2UoZnApOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgfSBlbHNlIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgQUxPR0QoIkNvdWxkIG5vdCBvcGVuIGZpbGUgJXMiLCBtX2ZpbGVuYW1lKTsgICAgXAorICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCit9CisjZGVmaW5lIERVTVBfVE9fRklMRShtX2ZpbGVuYW1lLCBtX2J1ZiwgbV9zaXplKSAgICAgICAgIFwKK3sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIEZJTEUgKmZwID0gZm9wZW4obV9maWxlbmFtZSwgImFiIik7ICAgICAgICAgICAgICAgICBcCisgICAgaWYgKGZwICE9IE5VTEwgJiYgbV9idWYgIT0gTlVMTCkgeyAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgaW50IGk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICBpID0gZndyaXRlKG1fYnVmLCAxLCBtX3NpemUsIGZwKTsgICAgICAgICAgICAgICBcCisgICAgICAgIEFMT0dEKCJmd3JpdGUgcmV0ICVkIHRvIHdyaXRlICVkIiwgaSwgbV9zaXplKTsgIFwKKyAgICAgICAgaWYgKGkgIT0gKGludCltX3NpemUpIHsgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgQUxPR0QoIkVycm9yIGluIGZ3cml0ZSwgcmV0dXJuZWQgJWQiLCBpKTsgICBcCisgICAgICAgICAgICBwZXJyb3IoIkVycm9yIGluIHdyaXRlIHRvIGZpbGUiKTsgICAgICAgICAgIFwKKyAgICAgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICBmY2xvc2UoZnApOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgfSBlbHNlIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgQUxPR0QoIkNvdWxkIG5vdCB3cml0ZSB0byBmaWxlICVzIiwgbV9maWxlbmFtZSk7XAorICAgICAgICBpZiAoZnAgIT0gTlVMTCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICBmY2xvc2UoZnApOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorfQorI2Vsc2UgLyogRklMRV9EVU1QX0VOQUJMRSAqLworI2RlZmluZSBJTlBVVF9EVU1QX1BBVEgKKyNkZWZpbmUgSU5QVVRfRFVNUF9FWFQKKyNkZWZpbmUgT1VUUFVUX0RVTVBfUEFUSAorI2RlZmluZSBPVVRQVVRfRFVNUF9FWFQKKyNkZWZpbmUgR0VORVJBVEVfRklMRV9OQU1FUygpCisjZGVmaW5lIENSRUFURV9EVU1QX0ZJTEUobV9maWxlbmFtZSkKKyNkZWZpbmUgRFVNUF9UT19GSUxFKG1fZmlsZW5hbWUsIG1fYnVmLCBtX3NpemUpCisjZW5kaWYgLyogRklMRV9EVU1QX0VOQUJMRSAqLworCit9ICAvLyBuYW1lc3BhY2UgYW5kcm9pZAorCisjZW5kaWYgIC8vIEFORFJPSURfQzJfU09GVF9BVkNfRU5DX0hfXwpkaWZmIC0tZ2l0IGEvbWVkaWEvY29kZWMyL2NvbXBvbmVudHMvYmFzZS9BbmRyb2lkLmJwIGIvbWVkaWEvY29kZWMyL2NvbXBvbmVudHMvYmFzZS9BbmRyb2lkLmJwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA2YmI4MWEKLS0tIC9kZXYvbnVsbAorKysgYi9tZWRpYS9jb2RlYzIvY29tcG9uZW50cy9iYXNlL0FuZHJvaWQuYnAKQEAgLTAsMCArMSwxNDEgQEAKKy8vIERPIE5PVCBERVBFTkQgT04gVEhJUyBESVJFQ1RMWQorLy8gdXNlIGxpYmNvZGVjMl9zb2Z0LWRlZmF1bHRzIGluc3RlYWQKK2NjX2xpYnJhcnlfc2hhcmVkIHsKKyAgICBuYW1lOiAibGliY29kZWMyX3NvZnRfY29tbW9uIiwKKyAgICBkZWZhdWx0czogWyJsaWJjb2RlYzItaW1wbC1kZWZhdWx0cyJdLAorICAgIHZlbmRvcl9hdmFpbGFibGU6IHRydWUsCisKKyAgICBzcmNzOiBbCisgICAgICAgICJTaW1wbGVDMkNvbXBvbmVudC5jcHAiLAorICAgICAgICAiU2ltcGxlQzJJbnRlcmZhY2UuY3BwIiwKKyAgICBdLAorCisgICAgZXhwb3J0X2luY2x1ZGVfZGlyczogWworICAgICAgICAiaW5jbHVkZSIsCisgICAgXSwKKworICAgIGV4cG9ydF9zaGFyZWRfbGliX2hlYWRlcnM6IFsKKyAgICAgICAgImxpYnNmcGx1Z2luX2Njb2RlY191dGlscyIsCisgICAgXSwKKworICAgIHNoYXJlZF9saWJzOiBbCisgICAgICAgICJsaWJjdXRpbHMiLCAvLyBmb3IgcHJvcGVydGllcworICAgICAgICAibGlibG9nIiwgICAgLy8gZm9yIEFMT0cKKyAgICAgICAgImxpYnNmcGx1Z2luX2Njb2RlY191dGlscyIsIC8vIGZvciBJbWFnZUNvcHkKKyAgICAgICAgImxpYnN0YWdlZnJpZ2h0X2ZvdW5kYXRpb24iLCAvLyBmb3IgTXV0ZXhlZAorICAgIF0sCisKKyAgICBzYW5pdGl6ZTogeworICAgICAgICBtaXNjX3VuZGVmaW5lZDogWworICAgICAgICAgICAgInVuc2lnbmVkLWludGVnZXItb3ZlcmZsb3ciLAorICAgICAgICAgICAgInNpZ25lZC1pbnRlZ2VyLW92ZXJmbG93IiwKKyAgICAgICAgXSwKKyAgICAgICAgY2ZpOiB0cnVlLAorICAgICAgICBkaWFnOiB7CisgICAgICAgICAgICBjZmk6IHRydWUsCisgICAgICAgIH0sCisgICAgfSwKKworICAgIGxkZmxhZ3M6IFsiLVdsLC1Cc3ltYm9saWMiXSwKK30KKworLy8gcHVibGljIGRlcGVuZGVuY3kgZm9yIHNvZnR3YXJlIGNvZGVjIGltcGxlbWVudGF0aW9uCisvLyB0byBiZSB1c2VkIGJ5IGNvZGUgdW5kZXIgbWVkaWEvY29kZWNzLyogb25seSBhcyBpdHMgc3RhYmlsaXR5IGlzIG5vdCBndWFyYW50ZWVkCitjY19kZWZhdWx0cyB7CisgICAgbmFtZTogImxpYmNvZGVjMl9zb2Z0LWRlZmF1bHRzIiwKKyAgICBkZWZhdWx0czogWyJsaWJjb2RlYzItaW1wbC1kZWZhdWx0cyJdLAorICAgIHZlbmRvcl9hdmFpbGFibGU6IHRydWUsCisKKyAgICBleHBvcnRfc2hhcmVkX2xpYl9oZWFkZXJzOiBbCisgICAgICAgICJsaWJzZnBsdWdpbl9jY29kZWNfdXRpbHMiLAorICAgIF0sCisKKyAgICBzaGFyZWRfbGliczogWworICAgICAgICAibGliY29kZWMyX3NvZnRfY29tbW9uIiwKKyAgICAgICAgImxpYmN1dGlscyIsIC8vIGZvciBwcm9wZXJ0aWVzCisgICAgICAgICJsaWJsb2ciLCAvLyBmb3IgQUxPRworICAgICAgICAibGlic2ZwbHVnaW5fY2NvZGVjX3V0aWxzIiwgLy8gZm9yIEltYWdlQ29weQorICAgICAgICAibGlic3RhZ2VmcmlnaHRfZm91bmRhdGlvbiIsIC8vIGZvciBDb2xvclV0aWxzIGFuZCBNSU1FCisgICAgXSwKKworICAgIGNmbGFnczogWworICAgICAgICAiLVdhbGwiLAorICAgICAgICAiLVdlcnJvciIsCisgICAgXSwKKworICAgIGxkZmxhZ3M6IFsiLVdsLC1Cc3ltYm9saWMiXSwKK30KKworLy8gcHVibGljIGRlcGVuZGVuY3kgZm9yIHNvZnR3YXJlIGNvZGVjIGltcGxlbWVudGF0aW9uCisvLyB0byBiZSB1c2VkIGJ5IGNvZGUgdW5kZXIgbWVkaWEvY29kZWNzLyogb25seQorY2NfZGVmYXVsdHMgeworICAgIG5hbWU6ICJsaWJjb2RlYzJfc29mdF9zYW5pdGl6ZV9hbGwtZGVmYXVsdHMiLAorCisgICAgc2FuaXRpemU6IHsKKyAgICAgICAgbWlzY191bmRlZmluZWQ6IFsKKyAgICAgICAgICAgICJ1bnNpZ25lZC1pbnRlZ2VyLW92ZXJmbG93IiwKKyAgICAgICAgICAgICJzaWduZWQtaW50ZWdlci1vdmVyZmxvdyIsCisgICAgICAgIF0sCisgICAgICAgIGNmaTogdHJ1ZSwKKyAgICAgICAgZGlhZzogeworICAgICAgICAgICAgY2ZpOiB0cnVlLAorICAgICAgICB9LAorICAgIH0sCit9CisKKy8vIHB1YmxpYyBkZXBlbmRlbmN5IGZvciBzb2Z0d2FyZSBjb2RlYyBpbXBsZW1lbnRhdGlvbgorLy8gdG8gYmUgdXNlZCBieSBjb2RlIHVuZGVyIG1lZGlhL2NvZGVjcy8qIG9ubHkKK2NjX2RlZmF1bHRzIHsKKyAgICBuYW1lOiAibGliY29kZWMyX3NvZnRfc2FuaXRpemVfc2lnbmVkLWRlZmF1bHRzIiwKKworICAgIHNhbml0aXplOiB7CisgICAgICAgIG1pc2NfdW5kZWZpbmVkOiBbCisgICAgICAgICAgICAic2lnbmVkLWludGVnZXItb3ZlcmZsb3ciLAorICAgICAgICBdLAorICAgICAgICBjZmk6IHRydWUsCisgICAgICAgIGRpYWc6IHsKKyAgICAgICAgICAgIGNmaTogdHJ1ZSwKKyAgICAgICAgfSwKKyAgICB9LAorfQorCisvLyBURU1QOiB1c2VkIGJ5IGNoZWV0czIgcHJvamVjdCAtIHJlbW92ZSB3aGVuIG5vIGxvbmdlciB1c2VkCitjY19saWJyYXJ5X3NoYXJlZCB7CisgICAgbmFtZTogImxpYmNvZGVjMl9zaW1wbGVfY29tcG9uZW50IiwKKyAgICB2ZW5kb3JfYXZhaWxhYmxlOiB0cnVlLAorCisgICAgc3JjczogWworICAgICAgICAiU2ltcGxlQzJJbnRlcmZhY2UuY3BwIiwKKyAgICBdLAorCisgICAgbG9jYWxfaW5jbHVkZV9kaXJzOiBbCisgICAgICAgICJpbmNsdWRlIiwKKyAgICBdLAorCisgICAgZXhwb3J0X2luY2x1ZGVfZGlyczogWworICAgICAgICAiaW5jbHVkZSIsCisgICAgXSwKKworICAgIHNoYXJlZF9saWJzOiBbCisgICAgICAgICJsaWJjb2RlYzIiLAorICAgICAgICAibGliY29kZWMyX3ZuZGsiLAorICAgICAgICAibGliY3V0aWxzIiwKKyAgICAgICAgImxpYmxvZyIsCisgICAgICAgICJsaWJzdGFnZWZyaWdodF9mb3VuZGF0aW9uIiwKKyAgICAgICAgImxpYnV0aWxzIiwKKyAgICBdLAorCisgICAgc2FuaXRpemU6IHsKKyAgICAgICAgbWlzY191bmRlZmluZWQ6IFsKKyAgICAgICAgICAgICJ1bnNpZ25lZC1pbnRlZ2VyLW92ZXJmbG93IiwKKyAgICAgICAgICAgICJzaWduZWQtaW50ZWdlci1vdmVyZmxvdyIsCisgICAgICAgIF0sCisgICAgICAgIGNmaTogdHJ1ZSwKKyAgICAgICAgZGlhZzogeworICAgICAgICAgICAgY2ZpOiB0cnVlLAorICAgICAgICB9LAorICAgIH0sCisKKyAgICBsZGZsYWdzOiBbIi1XbCwtQnN5bWJvbGljIl0sCit9CisKZGlmZiAtLWdpdCBhL21lZGlhL2NvZGVjMi9jb21wb25lbnRzL2Jhc2UvU2ltcGxlQzJDb21wb25lbnQuY3BwIGIvbWVkaWEvY29kZWMyL2NvbXBvbmVudHMvYmFzZS9TaW1wbGVDMkNvbXBvbmVudC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzk5MGVlNQotLS0gL2Rldi9udWxsCisrKyBiL21lZGlhL2NvZGVjMi9jb21wb25lbnRzL2Jhc2UvU2ltcGxlQzJDb21wb25lbnQuY3BwCkBAIC0wLDAgKzEsNTYyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE3IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KKworLy8jZGVmaW5lIExPR19OREVCVUcgMAorI2RlZmluZSBMT0dfVEFHICJTaW1wbGVDMkNvbXBvbmVudCIKKyNpbmNsdWRlIDxsb2cvbG9nLmg+CisKKyNpbmNsdWRlIDxjdXRpbHMvcHJvcGVydGllcy5oPgorI2luY2x1ZGUgPG1lZGlhL3N0YWdlZnJpZ2h0L2ZvdW5kYXRpb24vQU1lc3NhZ2UuaD4KKworI2luY2x1ZGUgPGludHR5cGVzLmg+CisKKyNpbmNsdWRlIDxDMkNvbmZpZy5oPgorI2luY2x1ZGUgPEMyRGVidWcuaD4KKyNpbmNsdWRlIDxDMlBsYXRmb3JtU3VwcG9ydC5oPgorI2luY2x1ZGUgPFNpbXBsZUMyQ29tcG9uZW50Lmg+CisKK25hbWVzcGFjZSBhbmRyb2lkIHsKKworc3RkOjp1bmlxdWVfcHRyPEMyV29yaz4gU2ltcGxlQzJDb21wb25lbnQ6OldvcmtRdWV1ZTo6cG9wX2Zyb250KCkgeworICAgIHN0ZDo6dW5pcXVlX3B0cjxDMldvcms+IHdvcmsgPSBzdGQ6Om1vdmUobVF1ZXVlLmZyb250KCkud29yayk7CisgICAgbVF1ZXVlLnBvcF9mcm9udCgpOworICAgIHJldHVybiB3b3JrOworfQorCit2b2lkIFNpbXBsZUMyQ29tcG9uZW50OjpXb3JrUXVldWU6OnB1c2hfYmFjayhzdGQ6OnVuaXF1ZV9wdHI8QzJXb3JrPiB3b3JrKSB7CisgICAgbVF1ZXVlLnB1c2hfYmFjayh7IHN0ZDo6bW92ZSh3b3JrKSwgTk9fRFJBSU4gfSk7Cit9CisKK2Jvb2wgU2ltcGxlQzJDb21wb25lbnQ6OldvcmtRdWV1ZTo6ZW1wdHkoKSBjb25zdCB7CisgICAgcmV0dXJuIG1RdWV1ZS5lbXB0eSgpOworfQorCit2b2lkIFNpbXBsZUMyQ29tcG9uZW50OjpXb3JrUXVldWU6OmNsZWFyKCkgeworICAgIG1RdWV1ZS5jbGVhcigpOworfQorCit1aW50MzJfdCBTaW1wbGVDMkNvbXBvbmVudDo6V29ya1F1ZXVlOjpkcmFpbk1vZGUoKSBjb25zdCB7CisgICAgcmV0dXJuIG1RdWV1ZS5mcm9udCgpLmRyYWluTW9kZTsKK30KKwordm9pZCBTaW1wbGVDMkNvbXBvbmVudDo6V29ya1F1ZXVlOjptYXJrRHJhaW4odWludDMyX3QgZHJhaW5Nb2RlKSB7CisgICAgbVF1ZXVlLnB1c2hfYmFjayh7IG51bGxwdHIsIGRyYWluTW9kZSB9KTsKK30KKworLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKworU2ltcGxlQzJDb21wb25lbnQ6OldvcmtIYW5kbGVyOjpXb3JrSGFuZGxlcigpIDogbVJ1bm5pbmcoZmFsc2UpIHt9CisKK3ZvaWQgU2ltcGxlQzJDb21wb25lbnQ6OldvcmtIYW5kbGVyOjpzZXRDb21wb25lbnQoCisgICAgICAgIGNvbnN0IHN0ZDo6c2hhcmVkX3B0cjxTaW1wbGVDMkNvbXBvbmVudD4gJnRoaXopIHsKKyAgICBtVGhpeiA9IHRoaXo7Cit9CisKK3N0YXRpYyB2b2lkIFJlcGx5KGNvbnN0IHNwPEFNZXNzYWdlPiAmbXNnLCBpbnQzMl90ICplcnIgPSBudWxscHRyKSB7CisgICAgc3A8QVJlcGx5VG9rZW4+IHJlcGx5SWQ7CisgICAgQ0hFQ0sobXNnLT5zZW5kZXJBd2FpdHNSZXNwb25zZSgmcmVwbHlJZCkpOworICAgIHNwPEFNZXNzYWdlPiByZXBseSA9IG5ldyBBTWVzc2FnZTsKKyAgICBpZiAoZXJyKSB7CisgICAgICAgIHJlcGx5LT5zZXRJbnQzMigiZXJyIiwgKmVycik7CisgICAgfQorICAgIHJlcGx5LT5wb3N0UmVwbHkocmVwbHlJZCk7Cit9CisKK3ZvaWQgU2ltcGxlQzJDb21wb25lbnQ6OldvcmtIYW5kbGVyOjpvbk1lc3NhZ2VSZWNlaXZlZChjb25zdCBzcDxBTWVzc2FnZT4gJm1zZykgeworICAgIHN0ZDo6c2hhcmVkX3B0cjxTaW1wbGVDMkNvbXBvbmVudD4gdGhpeiA9IG1UaGl6LmxvY2soKTsKKyAgICBpZiAoIXRoaXopIHsKKyAgICAgICAgQUxPR0QoImNvbXBvbmVudCBub3QgeWV0IHNldDsgbXNnID0gJXMiLCBtc2ctPmRlYnVnU3RyaW5nKCkuY19zdHIoKSk7CisgICAgICAgIHNwPEFSZXBseVRva2VuPiByZXBseUlkOworICAgICAgICBpZiAobXNnLT5zZW5kZXJBd2FpdHNSZXNwb25zZSgmcmVwbHlJZCkpIHsKKyAgICAgICAgICAgIHNwPEFNZXNzYWdlPiByZXBseSA9IG5ldyBBTWVzc2FnZTsKKyAgICAgICAgICAgIHJlcGx5LT5zZXRJbnQzMigiZXJyIiwgQzJfQ09SUlVQVEVEKTsKKyAgICAgICAgICAgIHJlcGx5LT5wb3N0UmVwbHkocmVwbHlJZCk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIHN3aXRjaCAobXNnLT53aGF0KCkpIHsKKyAgICAgICAgY2FzZSBrV2hhdFByb2Nlc3M6IHsKKyAgICAgICAgICAgIGlmIChtUnVubmluZykgeworICAgICAgICAgICAgICAgIGlmICh0aGl6LT5wcm9jZXNzUXVldWUoKSkgeworICAgICAgICAgICAgICAgICAgICAobmV3IEFNZXNzYWdlKGtXaGF0UHJvY2VzcywgdGhpcykpLT5wb3N0KCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBBTE9HVigiSWdub3JlIHByb2Nlc3MgbWVzc2FnZSBhcyB3ZSdyZSBub3QgcnVubmluZyIpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgY2FzZSBrV2hhdEluaXQ6IHsKKyAgICAgICAgICAgIGludDMyX3QgZXJyID0gdGhpei0+b25Jbml0KCk7CisgICAgICAgICAgICBSZXBseShtc2csICZlcnIpOworICAgICAgICAgICAgW1tmYWxsdGhyb3VnaF1dOworICAgICAgICB9CisgICAgICAgIGNhc2Uga1doYXRTdGFydDogeworICAgICAgICAgICAgbVJ1bm5pbmcgPSB0cnVlOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgY2FzZSBrV2hhdFN0b3A6IHsKKyAgICAgICAgICAgIGludDMyX3QgZXJyID0gdGhpei0+b25TdG9wKCk7CisgICAgICAgICAgICBSZXBseShtc2csICZlcnIpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgY2FzZSBrV2hhdFJlc2V0OiB7CisgICAgICAgICAgICB0aGl6LT5vblJlc2V0KCk7CisgICAgICAgICAgICBtUnVubmluZyA9IGZhbHNlOworICAgICAgICAgICAgUmVwbHkobXNnKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGNhc2Uga1doYXRSZWxlYXNlOiB7CisgICAgICAgICAgICB0aGl6LT5vblJlbGVhc2UoKTsKKyAgICAgICAgICAgIG1SdW5uaW5nID0gZmFsc2U7CisgICAgICAgICAgICBSZXBseShtc2cpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgZGVmYXVsdDogeworICAgICAgICAgICAgQUxPR0QoIlVucmVjb2duaXplZCBtc2c6ICVkIiwgbXNnLT53aGF0KCkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICB9Cit9CisKKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisKK25hbWVzcGFjZSB7CisKK3N0cnVjdCBEdW1teVJlYWRWaWV3IDogcHVibGljIEMyUmVhZFZpZXcgeworICAgIER1bW15UmVhZFZpZXcoKSA6IEMyUmVhZFZpZXcoQzJfTk9fSU5JVCkge30KK307CisKK30gIC8vIG5hbWVzcGFjZQorCitTaW1wbGVDMkNvbXBvbmVudDo6U2ltcGxlQzJDb21wb25lbnQoCisgICAgICAgIGNvbnN0IHN0ZDo6c2hhcmVkX3B0cjxDMkNvbXBvbmVudEludGVyZmFjZT4gJmludGYpCisgICAgOiBtRHVtbXlSZWFkVmlldyhEdW1teVJlYWRWaWV3KCkpLAorICAgICAgbUludGYoaW50ZiksCisgICAgICBtTG9vcGVyKG5ldyBBTG9vcGVyKSwKKyAgICAgIG1IYW5kbGVyKG5ldyBXb3JrSGFuZGxlcikgeworICAgIG1Mb29wZXItPnNldE5hbWUoaW50Zi0+Z2V0TmFtZSgpLmNfc3RyKCkpOworICAgICh2b2lkKW1Mb29wZXItPnJlZ2lzdGVySGFuZGxlcihtSGFuZGxlcik7CisgICAgbUxvb3Blci0+c3RhcnQoZmFsc2UsIGZhbHNlLCBBTkRST0lEX1BSSU9SSVRZX1ZJREVPKTsKK30KKworU2ltcGxlQzJDb21wb25lbnQ6On5TaW1wbGVDMkNvbXBvbmVudCgpIHsKKyAgICBtTG9vcGVyLT51bnJlZ2lzdGVySGFuZGxlcihtSGFuZGxlci0+aWQoKSk7CisgICAgKHZvaWQpbUxvb3Blci0+c3RvcCgpOworfQorCitjMl9zdGF0dXNfdCBTaW1wbGVDMkNvbXBvbmVudDo6c2V0TGlzdGVuZXJfdmIoCisgICAgICAgIGNvbnN0IHN0ZDo6c2hhcmVkX3B0cjxDMkNvbXBvbmVudDo6TGlzdGVuZXI+ICZsaXN0ZW5lciwgYzJfYmxvY2tpbmdfdCBtYXlCbG9jaykgeworICAgIG1IYW5kbGVyLT5zZXRDb21wb25lbnQoc2hhcmVkX2Zyb21fdGhpcygpKTsKKworICAgIE11dGV4ZWQ8RXhlY1N0YXRlPjo6TG9ja2VkIHN0YXRlKG1FeGVjU3RhdGUpOworICAgIGlmIChzdGF0ZS0+bVN0YXRlID09IFJVTk5JTkcpIHsKKyAgICAgICAgaWYgKGxpc3RlbmVyKSB7CisgICAgICAgICAgICByZXR1cm4gQzJfQkFEX1NUQVRFOworICAgICAgICB9IGVsc2UgaWYgKCFtYXlCbG9jaykgeworICAgICAgICAgICAgcmV0dXJuIEMyX0JMT0NLSU5HOworICAgICAgICB9CisgICAgfQorICAgIHN0YXRlLT5tTGlzdGVuZXIgPSBsaXN0ZW5lcjsKKyAgICAvLyBUT0RPOiB3YWl0IGZvciBsaXN0ZW5lciBjaGFuZ2UgdG8gaGF2ZSB0YWtlbiBwbGFjZSBiZWZvcmUgcmV0dXJuaW5nCisgICAgLy8gKGUuZy4gaWYgdGhlcmUgaXMgYW4gb25nb2luZyBsaXN0ZW5lciBjYWxsYmFjaykKKyAgICByZXR1cm4gQzJfT0s7Cit9CisKK2MyX3N0YXR1c190IFNpbXBsZUMyQ29tcG9uZW50OjpxdWV1ZV9uYihzdGQ6Omxpc3Q8c3RkOjp1bmlxdWVfcHRyPEMyV29yaz4+ICogY29uc3QgaXRlbXMpIHsKKyAgICB7CisgICAgICAgIE11dGV4ZWQ8RXhlY1N0YXRlPjo6TG9ja2VkIHN0YXRlKG1FeGVjU3RhdGUpOworICAgICAgICBpZiAoc3RhdGUtPm1TdGF0ZSAhPSBSVU5OSU5HKSB7CisgICAgICAgICAgICByZXR1cm4gQzJfQkFEX1NUQVRFOworICAgICAgICB9CisgICAgfQorICAgIGJvb2wgcXVldWVXYXNFbXB0eSA9IGZhbHNlOworICAgIHsKKyAgICAgICAgTXV0ZXhlZDxXb3JrUXVldWU+OjpMb2NrZWQgcXVldWUobVdvcmtRdWV1ZSk7CisgICAgICAgIHF1ZXVlV2FzRW1wdHkgPSBxdWV1ZS0+ZW1wdHkoKTsKKyAgICAgICAgd2hpbGUgKCFpdGVtcy0+ZW1wdHkoKSkgeworICAgICAgICAgICAgcXVldWUtPnB1c2hfYmFjayhzdGQ6Om1vdmUoaXRlbXMtPmZyb250KCkpKTsKKyAgICAgICAgICAgIGl0ZW1zLT5wb3BfZnJvbnQoKTsKKyAgICAgICAgfQorICAgIH0KKyAgICBpZiAocXVldWVXYXNFbXB0eSkgeworICAgICAgICAobmV3IEFNZXNzYWdlKFdvcmtIYW5kbGVyOjprV2hhdFByb2Nlc3MsIG1IYW5kbGVyKSktPnBvc3QoKTsKKyAgICB9CisgICAgcmV0dXJuIEMyX09LOworfQorCitjMl9zdGF0dXNfdCBTaW1wbGVDMkNvbXBvbmVudDo6YW5ub3VuY2VfbmIoY29uc3Qgc3RkOjp2ZWN0b3I8QzJXb3JrT3V0bGluZT4gJml0ZW1zKSB7CisgICAgKHZvaWQpaXRlbXM7CisgICAgcmV0dXJuIEMyX09NSVRURUQ7Cit9CisKK2MyX3N0YXR1c190IFNpbXBsZUMyQ29tcG9uZW50OjpmbHVzaF9zbSgKKyAgICAgICAgZmx1c2hfbW9kZV90IGZsdXNoTW9kZSwgc3RkOjpsaXN0PHN0ZDo6dW5pcXVlX3B0cjxDMldvcms+PiogY29uc3QgZmx1c2hlZFdvcmspIHsKKyAgICAodm9pZClmbHVzaE1vZGU7CisgICAgeworICAgICAgICBNdXRleGVkPEV4ZWNTdGF0ZT46OkxvY2tlZCBzdGF0ZShtRXhlY1N0YXRlKTsKKyAgICAgICAgaWYgKHN0YXRlLT5tU3RhdGUgIT0gUlVOTklORykgeworICAgICAgICAgICAgcmV0dXJuIEMyX0JBRF9TVEFURTsKKyAgICAgICAgfQorICAgIH0KKyAgICB7CisgICAgICAgIE11dGV4ZWQ8V29ya1F1ZXVlPjo6TG9ja2VkIHF1ZXVlKG1Xb3JrUXVldWUpOworICAgICAgICBxdWV1ZS0+aW5jR2VuZXJhdGlvbigpOworICAgICAgICAvLyBUT0RPOiBxdWV1ZS0+c3BsaWNlZEJ5KGZsdXNoZWRXb3JrLCBmbHVzaGVkV29yay0+ZW5kKCkpOworICAgICAgICB3aGlsZSAoIXF1ZXVlLT5lbXB0eSgpKSB7CisgICAgICAgICAgICBzdGQ6OnVuaXF1ZV9wdHI8QzJXb3JrPiB3b3JrID0gcXVldWUtPnBvcF9mcm9udCgpOworICAgICAgICAgICAgaWYgKHdvcmspIHsKKyAgICAgICAgICAgICAgICBmbHVzaGVkV29yay0+cHVzaF9iYWNrKHN0ZDo6bW92ZSh3b3JrKSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisgICAgeworICAgICAgICBNdXRleGVkPFBlbmRpbmdXb3JrPjo6TG9ja2VkIHBlbmRpbmcobVBlbmRpbmdXb3JrKTsKKyAgICAgICAgd2hpbGUgKCFwZW5kaW5nLT5lbXB0eSgpKSB7CisgICAgICAgICAgICBmbHVzaGVkV29yay0+cHVzaF9iYWNrKHN0ZDo6bW92ZShwZW5kaW5nLT5iZWdpbigpLT5zZWNvbmQpKTsKKyAgICAgICAgICAgIHBlbmRpbmctPmVyYXNlKHBlbmRpbmctPmJlZ2luKCkpOworICAgICAgICB9CisgICAgfQorCisgICAgcmV0dXJuIEMyX09LOworfQorCitjMl9zdGF0dXNfdCBTaW1wbGVDMkNvbXBvbmVudDo6ZHJhaW5fbmIoZHJhaW5fbW9kZV90IGRyYWluTW9kZSkgeworICAgIGlmIChkcmFpbk1vZGUgPT0gRFJBSU5fQ0hBSU4pIHsKKyAgICAgICAgcmV0dXJuIEMyX09NSVRURUQ7CisgICAgfQorICAgIHsKKyAgICAgICAgTXV0ZXhlZDxFeGVjU3RhdGU+OjpMb2NrZWQgc3RhdGUobUV4ZWNTdGF0ZSk7CisgICAgICAgIGlmIChzdGF0ZS0+bVN0YXRlICE9IFJVTk5JTkcpIHsKKyAgICAgICAgICAgIHJldHVybiBDMl9CQURfU1RBVEU7CisgICAgICAgIH0KKyAgICB9CisgICAgYm9vbCBxdWV1ZVdhc0VtcHR5ID0gZmFsc2U7CisgICAgeworICAgICAgICBNdXRleGVkPFdvcmtRdWV1ZT46OkxvY2tlZCBxdWV1ZShtV29ya1F1ZXVlKTsKKyAgICAgICAgcXVldWVXYXNFbXB0eSA9IHF1ZXVlLT5lbXB0eSgpOworICAgICAgICBxdWV1ZS0+bWFya0RyYWluKGRyYWluTW9kZSk7CisgICAgfQorICAgIGlmIChxdWV1ZVdhc0VtcHR5KSB7CisgICAgICAgIChuZXcgQU1lc3NhZ2UoV29ya0hhbmRsZXI6OmtXaGF0UHJvY2VzcywgbUhhbmRsZXIpKS0+cG9zdCgpOworICAgIH0KKworICAgIHJldHVybiBDMl9PSzsKK30KKworYzJfc3RhdHVzX3QgU2ltcGxlQzJDb21wb25lbnQ6OnN0YXJ0KCkgeworICAgIE11dGV4ZWQ8RXhlY1N0YXRlPjo6TG9ja2VkIHN0YXRlKG1FeGVjU3RhdGUpOworICAgIGlmIChzdGF0ZS0+bVN0YXRlID09IFJVTk5JTkcpIHsKKyAgICAgICAgcmV0dXJuIEMyX0JBRF9TVEFURTsKKyAgICB9CisgICAgYm9vbCBuZWVkc0luaXQgPSAoc3RhdGUtPm1TdGF0ZSA9PSBVTklOSVRJQUxJWkVEKTsKKyAgICBzdGF0ZS51bmxvY2soKTsKKyAgICBpZiAobmVlZHNJbml0KSB7CisgICAgICAgIHNwPEFNZXNzYWdlPiByZXBseTsKKyAgICAgICAgKG5ldyBBTWVzc2FnZShXb3JrSGFuZGxlcjo6a1doYXRJbml0LCBtSGFuZGxlcikpLT5wb3N0QW5kQXdhaXRSZXNwb25zZSgmcmVwbHkpOworICAgICAgICBpbnQzMl90IGVycjsKKyAgICAgICAgQ0hFQ0socmVwbHktPmZpbmRJbnQzMigiZXJyIiwgJmVycikpOworICAgICAgICBpZiAoZXJyICE9IEMyX09LKSB7CisgICAgICAgICAgICByZXR1cm4gKGMyX3N0YXR1c190KWVycjsKKyAgICAgICAgfQorICAgIH0gZWxzZSB7CisgICAgICAgIChuZXcgQU1lc3NhZ2UoV29ya0hhbmRsZXI6OmtXaGF0U3RhcnQsIG1IYW5kbGVyKSktPnBvc3QoKTsKKyAgICB9CisgICAgc3RhdGUubG9jaygpOworICAgIHN0YXRlLT5tU3RhdGUgPSBSVU5OSU5HOworICAgIHJldHVybiBDMl9PSzsKK30KKworYzJfc3RhdHVzX3QgU2ltcGxlQzJDb21wb25lbnQ6OnN0b3AoKSB7CisgICAgQUxPR1YoInN0b3AiKTsKKyAgICB7CisgICAgICAgIE11dGV4ZWQ8RXhlY1N0YXRlPjo6TG9ja2VkIHN0YXRlKG1FeGVjU3RhdGUpOworICAgICAgICBpZiAoc3RhdGUtPm1TdGF0ZSAhPSBSVU5OSU5HKSB7CisgICAgICAgICAgICByZXR1cm4gQzJfQkFEX1NUQVRFOworICAgICAgICB9CisgICAgICAgIHN0YXRlLT5tU3RhdGUgPSBTVE9QUEVEOworICAgIH0KKyAgICB7CisgICAgICAgIE11dGV4ZWQ8V29ya1F1ZXVlPjo6TG9ja2VkIHF1ZXVlKG1Xb3JrUXVldWUpOworICAgICAgICBxdWV1ZS0+Y2xlYXIoKTsKKyAgICB9CisgICAgeworICAgICAgICBNdXRleGVkPFBlbmRpbmdXb3JrPjo6TG9ja2VkIHBlbmRpbmcobVBlbmRpbmdXb3JrKTsKKyAgICAgICAgcGVuZGluZy0+Y2xlYXIoKTsKKyAgICB9CisgICAgc3A8QU1lc3NhZ2U+IHJlcGx5OworICAgIChuZXcgQU1lc3NhZ2UoV29ya0hhbmRsZXI6OmtXaGF0U3RvcCwgbUhhbmRsZXIpKS0+cG9zdEFuZEF3YWl0UmVzcG9uc2UoJnJlcGx5KTsKKyAgICBpbnQzMl90IGVycjsKKyAgICBDSEVDSyhyZXBseS0+ZmluZEludDMyKCJlcnIiLCAmZXJyKSk7CisgICAgaWYgKGVyciAhPSBDMl9PSykgeworICAgICAgICByZXR1cm4gKGMyX3N0YXR1c190KWVycjsKKyAgICB9CisgICAgcmV0dXJuIEMyX09LOworfQorCitjMl9zdGF0dXNfdCBTaW1wbGVDMkNvbXBvbmVudDo6cmVzZXQoKSB7CisgICAgQUxPR1YoInJlc2V0Iik7CisgICAgeworICAgICAgICBNdXRleGVkPEV4ZWNTdGF0ZT46OkxvY2tlZCBzdGF0ZShtRXhlY1N0YXRlKTsKKyAgICAgICAgc3RhdGUtPm1TdGF0ZSA9IFVOSU5JVElBTElaRUQ7CisgICAgfQorICAgIHsKKyAgICAgICAgTXV0ZXhlZDxXb3JrUXVldWU+OjpMb2NrZWQgcXVldWUobVdvcmtRdWV1ZSk7CisgICAgICAgIHF1ZXVlLT5jbGVhcigpOworICAgIH0KKyAgICB7CisgICAgICAgIE11dGV4ZWQ8UGVuZGluZ1dvcms+OjpMb2NrZWQgcGVuZGluZyhtUGVuZGluZ1dvcmspOworICAgICAgICBwZW5kaW5nLT5jbGVhcigpOworICAgIH0KKyAgICBzcDxBTWVzc2FnZT4gcmVwbHk7CisgICAgKG5ldyBBTWVzc2FnZShXb3JrSGFuZGxlcjo6a1doYXRSZXNldCwgbUhhbmRsZXIpKS0+cG9zdEFuZEF3YWl0UmVzcG9uc2UoJnJlcGx5KTsKKyAgICByZXR1cm4gQzJfT0s7Cit9CisKK2MyX3N0YXR1c190IFNpbXBsZUMyQ29tcG9uZW50OjpyZWxlYXNlKCkgeworICAgIEFMT0dWKCJyZWxlYXNlIik7CisgICAgc3A8QU1lc3NhZ2U+IHJlcGx5OworICAgIChuZXcgQU1lc3NhZ2UoV29ya0hhbmRsZXI6OmtXaGF0UmVsZWFzZSwgbUhhbmRsZXIpKS0+cG9zdEFuZEF3YWl0UmVzcG9uc2UoJnJlcGx5KTsKKyAgICByZXR1cm4gQzJfT0s7Cit9CisKK3N0ZDo6c2hhcmVkX3B0cjxDMkNvbXBvbmVudEludGVyZmFjZT4gU2ltcGxlQzJDb21wb25lbnQ6OmludGYoKSB7CisgICAgcmV0dXJuIG1JbnRmOworfQorCituYW1lc3BhY2UgeworCitzdGQ6Omxpc3Q8c3RkOjp1bmlxdWVfcHRyPEMyV29yaz4+IHZlYyhzdGQ6OnVuaXF1ZV9wdHI8QzJXb3JrPiAmd29yaykgeworICAgIHN0ZDo6bGlzdDxzdGQ6OnVuaXF1ZV9wdHI8QzJXb3JrPj4gcmV0OworICAgIHJldC5wdXNoX2JhY2soc3RkOjptb3ZlKHdvcmspKTsKKyAgICByZXR1cm4gcmV0OworfQorCit9ICAvLyBuYW1lc3BhY2UKKwordm9pZCBTaW1wbGVDMkNvbXBvbmVudDo6ZmluaXNoKAorICAgICAgICB1aW50NjRfdCBmcmFtZUluZGV4LCBzdGQ6OmZ1bmN0aW9uPHZvaWQoY29uc3Qgc3RkOjp1bmlxdWVfcHRyPEMyV29yaz4gJik+IGZpbGxXb3JrKSB7CisgICAgc3RkOjp1bmlxdWVfcHRyPEMyV29yaz4gd29yazsKKyAgICB7CisgICAgICAgIE11dGV4ZWQ8UGVuZGluZ1dvcms+OjpMb2NrZWQgcGVuZGluZyhtUGVuZGluZ1dvcmspOworICAgICAgICBpZiAocGVuZGluZy0+Y291bnQoZnJhbWVJbmRleCkgPT0gMCkgeworICAgICAgICAgICAgQUxPR1coInVua25vd24gZnJhbWUgaW5kZXg6ICUiIFBSSXU2NCwgZnJhbWVJbmRleCk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgd29yayA9IHN0ZDo6bW92ZShwZW5kaW5nLT5hdChmcmFtZUluZGV4KSk7CisgICAgICAgIHBlbmRpbmctPmVyYXNlKGZyYW1lSW5kZXgpOworICAgIH0KKyAgICBpZiAod29yaykgeworICAgICAgICBmaWxsV29yayh3b3JrKTsKKyAgICAgICAgc3RkOjpzaGFyZWRfcHRyPEMyQ29tcG9uZW50OjpMaXN0ZW5lcj4gbGlzdGVuZXIgPSBtRXhlY1N0YXRlLmxvY2soKS0+bUxpc3RlbmVyOworICAgICAgICBsaXN0ZW5lci0+b25Xb3JrRG9uZV9uYihzaGFyZWRfZnJvbV90aGlzKCksIHZlYyh3b3JrKSk7CisgICAgICAgIEFMT0dWKCJyZXR1cm5pbmcgcGVuZGluZyB3b3JrIik7CisgICAgfQorfQorCit2b2lkIFNpbXBsZUMyQ29tcG9uZW50OjpjbG9uZUFuZFNlbmQoCisgICAgICAgIHVpbnQ2NF90IGZyYW1lSW5kZXgsCisgICAgICAgIGNvbnN0IHN0ZDo6dW5pcXVlX3B0cjxDMldvcms+ICZjdXJyZW50V29yaywKKyAgICAgICAgc3RkOjpmdW5jdGlvbjx2b2lkKGNvbnN0IHN0ZDo6dW5pcXVlX3B0cjxDMldvcms+ICYpPiBmaWxsV29yaykgeworICAgIHN0ZDo6dW5pcXVlX3B0cjxDMldvcms+IHdvcmsobmV3IEMyV29yayk7CisgICAgaWYgKGN1cnJlbnRXb3JrLT5pbnB1dC5vcmRpbmFsLmZyYW1lSW5kZXggPT0gZnJhbWVJbmRleCkgeworICAgICAgICB3b3JrLT5pbnB1dC5mbGFncyA9IGN1cnJlbnRXb3JrLT5pbnB1dC5mbGFnczsKKyAgICAgICAgd29yay0+aW5wdXQub3JkaW5hbCA9IGN1cnJlbnRXb3JrLT5pbnB1dC5vcmRpbmFsOworICAgIH0gZWxzZSB7CisgICAgICAgIE11dGV4ZWQ8UGVuZGluZ1dvcms+OjpMb2NrZWQgcGVuZGluZyhtUGVuZGluZ1dvcmspOworICAgICAgICBpZiAocGVuZGluZy0+Y291bnQoZnJhbWVJbmRleCkgPT0gMCkgeworICAgICAgICAgICAgQUxPR1coInVua25vd24gZnJhbWUgaW5kZXg6ICUiIFBSSXU2NCwgZnJhbWVJbmRleCk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgd29yay0+aW5wdXQuZmxhZ3MgPSBwZW5kaW5nLT5hdChmcmFtZUluZGV4KS0+aW5wdXQuZmxhZ3M7CisgICAgICAgIHdvcmstPmlucHV0Lm9yZGluYWwgPSBwZW5kaW5nLT5hdChmcmFtZUluZGV4KS0+aW5wdXQub3JkaW5hbDsKKyAgICB9CisgICAgd29yay0+d29ya2xldHMuZW1wbGFjZV9iYWNrKG5ldyBDMldvcmtsZXQpOworICAgIGlmICh3b3JrKSB7CisgICAgICAgIGZpbGxXb3JrKHdvcmspOworICAgICAgICBzdGQ6OnNoYXJlZF9wdHI8QzJDb21wb25lbnQ6Okxpc3RlbmVyPiBsaXN0ZW5lciA9IG1FeGVjU3RhdGUubG9jaygpLT5tTGlzdGVuZXI7CisgICAgICAgIGxpc3RlbmVyLT5vbldvcmtEb25lX25iKHNoYXJlZF9mcm9tX3RoaXMoKSwgdmVjKHdvcmspKTsKKyAgICAgICAgQUxPR1YoImNsb25lZCBhbmQgc2VuZGluZyB3b3JrIik7CisgICAgfQorfQorCitib29sIFNpbXBsZUMyQ29tcG9uZW50Ojpwcm9jZXNzUXVldWUoKSB7CisgICAgc3RkOjp1bmlxdWVfcHRyPEMyV29yaz4gd29yazsKKyAgICB1aW50NjRfdCBnZW5lcmF0aW9uOworICAgIGludDMyX3QgZHJhaW5Nb2RlOworICAgIGJvb2wgaXNGbHVzaFBlbmRpbmcgPSBmYWxzZTsKKyAgICBib29sIGhhc1F1ZXVlZFdvcmsgPSBmYWxzZTsKKyAgICB7CisgICAgICAgIE11dGV4ZWQ8V29ya1F1ZXVlPjo6TG9ja2VkIHF1ZXVlKG1Xb3JrUXVldWUpOworICAgICAgICBpZiAocXVldWUtPmVtcHR5KCkpIHsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorCisgICAgICAgIGdlbmVyYXRpb24gPSBxdWV1ZS0+Z2VuZXJhdGlvbigpOworICAgICAgICBkcmFpbk1vZGUgPSBxdWV1ZS0+ZHJhaW5Nb2RlKCk7CisgICAgICAgIGlzRmx1c2hQZW5kaW5nID0gcXVldWUtPnBvcFBlbmRpbmdGbHVzaCgpOworICAgICAgICB3b3JrID0gcXVldWUtPnBvcF9mcm9udCgpOworICAgICAgICBoYXNRdWV1ZWRXb3JrID0gIXF1ZXVlLT5lbXB0eSgpOworICAgIH0KKyAgICBpZiAoaXNGbHVzaFBlbmRpbmcpIHsKKyAgICAgICAgQUxPR1YoInByb2Nlc3NpbmcgcGVuZGluZyBmbHVzaCIpOworICAgICAgICBjMl9zdGF0dXNfdCBlcnIgPSBvbkZsdXNoX3NtKCk7CisgICAgICAgIGlmIChlcnIgIT0gQzJfT0spIHsKKyAgICAgICAgICAgIEFMT0dEKCJmbHVzaCBlcnI6ICVkIiwgZXJyKTsKKyAgICAgICAgICAgIC8vIFRPRE86IGVycm9yCisgICAgICAgIH0KKyAgICB9CisKKyAgICBpZiAoIW1PdXRwdXRCbG9ja1Bvb2wpIHsKKyAgICAgICAgYzJfc3RhdHVzX3QgZXJyID0gW3RoaXNdIHsKKyAgICAgICAgICAgIC8vIFRPRE86IGRvbid0IHVzZSBxdWVyeV92YgorICAgICAgICAgICAgQzJTdHJlYW1Gb3JtYXRDb25maWc6Om91dHB1dCBvdXRwdXRGb3JtYXQoMHUpOworICAgICAgICAgICAgc3RkOjp2ZWN0b3I8c3RkOjp1bmlxdWVfcHRyPEMyUGFyYW0+PiBwYXJhbXM7CisgICAgICAgICAgICBjMl9zdGF0dXNfdCBlcnIgPSBpbnRmKCktPnF1ZXJ5X3ZiKAorICAgICAgICAgICAgICAgICAgICB7ICZvdXRwdXRGb3JtYXQgfSwKKyAgICAgICAgICAgICAgICAgICAgeyBDMlBvcnRCbG9ja1Bvb2xzVHVuaW5nOjpvdXRwdXQ6OlBBUkFNX1RZUEUgfSwKKyAgICAgICAgICAgICAgICAgICAgQzJfRE9OVF9CTE9DSywKKyAgICAgICAgICAgICAgICAgICAgJnBhcmFtcyk7CisgICAgICAgICAgICBpZiAoZXJyICE9IEMyX09LICYmIGVyciAhPSBDMl9CQURfSU5ERVgpIHsKKyAgICAgICAgICAgICAgICBBTE9HRCgicXVlcnkgZXJyID0gJWQiLCBlcnIpOworICAgICAgICAgICAgICAgIHJldHVybiBlcnI7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBDMkJsb2NrUG9vbDo6bG9jYWxfaWRfdCBwb29sSWQgPQorICAgICAgICAgICAgICAgIG91dHB1dEZvcm1hdC52YWx1ZSA9PSBDMkZvcm1hdFZpZGVvCisgICAgICAgICAgICAgICAgICAgICAgICA/IEMyQmxvY2tQb29sOjpCQVNJQ19HUkFQSElDCisgICAgICAgICAgICAgICAgICAgICAgICA6IEMyQmxvY2tQb29sOjpCQVNJQ19MSU5FQVI7CisgICAgICAgICAgICBpZiAocGFyYW1zLnNpemUoKSkgeworICAgICAgICAgICAgICAgIEMyUG9ydEJsb2NrUG9vbHNUdW5pbmc6Om91dHB1dCAqb3V0cHV0UG9vbHMgPQorICAgICAgICAgICAgICAgICAgICBDMlBvcnRCbG9ja1Bvb2xzVHVuaW5nOjpvdXRwdXQ6OkZyb20ocGFyYW1zWzBdLmdldCgpKTsKKyAgICAgICAgICAgICAgICBpZiAob3V0cHV0UG9vbHMgJiYgb3V0cHV0UG9vbHMtPmZsZXhDb3VudCgpID49IDEpIHsKKyAgICAgICAgICAgICAgICAgICAgcG9vbElkID0gb3V0cHV0UG9vbHMtPm0udmFsdWVzWzBdOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgZXJyID0gR2V0Q29kZWMyQmxvY2tQb29sKHBvb2xJZCwgc2hhcmVkX2Zyb21fdGhpcygpLCAmbU91dHB1dEJsb2NrUG9vbCk7CisgICAgICAgICAgICBBTE9HRCgiVXNpbmcgb3V0cHV0IGJsb2NrIHBvb2wgd2l0aCBwb29sSUQgJWxsdSA9PiBnb3QgJWxsdSAtICVkIiwKKyAgICAgICAgICAgICAgICAgICAgKHVuc2lnbmVkIGxvbmcgbG9uZylwb29sSWQsCisgICAgICAgICAgICAgICAgICAgICh1bnNpZ25lZCBsb25nIGxvbmcpKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1PdXRwdXRCbG9ja1Bvb2wgPyBtT3V0cHV0QmxvY2tQb29sLT5nZXRMb2NhbElkKCkgOiAxMTEwMDAxMTEpLAorICAgICAgICAgICAgICAgICAgICBlcnIpOworICAgICAgICAgICAgcmV0dXJuIGVycjsKKyAgICAgICAgfSgpOworICAgICAgICBpZiAoZXJyICE9IEMyX09LKSB7CisgICAgICAgICAgICBNdXRleGVkPEV4ZWNTdGF0ZT46OkxvY2tlZCBzdGF0ZShtRXhlY1N0YXRlKTsKKyAgICAgICAgICAgIHN0ZDo6c2hhcmVkX3B0cjxDMkNvbXBvbmVudDo6TGlzdGVuZXI+IGxpc3RlbmVyID0gc3RhdGUtPm1MaXN0ZW5lcjsKKyAgICAgICAgICAgIHN0YXRlLnVubG9jaygpOworICAgICAgICAgICAgbGlzdGVuZXItPm9uRXJyb3JfbmIoc2hhcmVkX2Zyb21fdGhpcygpLCBlcnIpOworICAgICAgICAgICAgcmV0dXJuIGhhc1F1ZXVlZFdvcms7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBpZiAoIXdvcmspIHsKKyAgICAgICAgYzJfc3RhdHVzX3QgZXJyID0gZHJhaW4oZHJhaW5Nb2RlLCBtT3V0cHV0QmxvY2tQb29sKTsKKyAgICAgICAgaWYgKGVyciAhPSBDMl9PSykgeworICAgICAgICAgICAgTXV0ZXhlZDxFeGVjU3RhdGU+OjpMb2NrZWQgc3RhdGUobUV4ZWNTdGF0ZSk7CisgICAgICAgICAgICBzdGQ6OnNoYXJlZF9wdHI8QzJDb21wb25lbnQ6Okxpc3RlbmVyPiBsaXN0ZW5lciA9IHN0YXRlLT5tTGlzdGVuZXI7CisgICAgICAgICAgICBzdGF0ZS51bmxvY2soKTsKKyAgICAgICAgICAgIGxpc3RlbmVyLT5vbkVycm9yX25iKHNoYXJlZF9mcm9tX3RoaXMoKSwgZXJyKTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gaGFzUXVldWVkV29yazsKKyAgICB9CisKKyAgICB7CisgICAgICAgIHN0ZDo6dmVjdG9yPEMyUGFyYW0gKj4gdXBkYXRlczsKKyAgICAgICAgZm9yIChjb25zdCBzdGQ6OnVuaXF1ZV9wdHI8QzJQYXJhbT4gJnBhcmFtOiB3b3JrLT5pbnB1dC5jb25maWdVcGRhdGUpIHsKKyAgICAgICAgICAgIGlmIChwYXJhbSkgeworICAgICAgICAgICAgICAgIHVwZGF0ZXMuZW1wbGFjZV9iYWNrKHBhcmFtLmdldCgpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBpZiAoIXVwZGF0ZXMuZW1wdHkoKSkgeworICAgICAgICAgICAgc3RkOjp2ZWN0b3I8c3RkOjp1bmlxdWVfcHRyPEMyU2V0dGluZ1Jlc3VsdD4+IGZhaWx1cmVzOworICAgICAgICAgICAgYzJfc3RhdHVzX3QgZXJyID0gaW50ZigpLT5jb25maWdfdmIodXBkYXRlcywgQzJfTUFZX0JMT0NLLCAmZmFpbHVyZXMpOworICAgICAgICAgICAgQUxPR0QoImFwcGxpZWQgJXp1IGNvbmZpZ1VwZGF0ZXMgPT4gJXMgKCVkKSIsIHVwZGF0ZXMuc2l6ZSgpLCBhc1N0cmluZyhlcnIpLCBlcnIpOworICAgICAgICB9CisgICAgfQorCisgICAgQUxPR1YoInN0YXJ0IHByb2Nlc3NpbmcgZnJhbWUgIyUiIFBSSXU2NCwgd29yay0+aW5wdXQub3JkaW5hbC5mcmFtZUluZGV4LnBlZWt1KCkpOworICAgIHByb2Nlc3Mod29yaywgbU91dHB1dEJsb2NrUG9vbCk7CisgICAgQUxPR1YoInByb2Nlc3NlZCBmcmFtZSAjJSIgUFJJdTY0LCB3b3JrLT5pbnB1dC5vcmRpbmFsLmZyYW1lSW5kZXgucGVla3UoKSk7CisgICAgeworICAgICAgICBNdXRleGVkPFdvcmtRdWV1ZT46OkxvY2tlZCBxdWV1ZShtV29ya1F1ZXVlKTsKKyAgICAgICAgaWYgKHF1ZXVlLT5nZW5lcmF0aW9uKCkgIT0gZ2VuZXJhdGlvbikgeworICAgICAgICAgICAgQUxPR0QoIndvcmsgZm9ybSBvbGQgZ2VuZXJhdGlvbjogd2FzICUiIFBSSXU2NCAiIG5vdyAlIiBQUkl1NjQsCisgICAgICAgICAgICAgICAgICAgIHF1ZXVlLT5nZW5lcmF0aW9uKCksIGdlbmVyYXRpb24pOworICAgICAgICAgICAgd29yay0+cmVzdWx0ID0gQzJfTk9UX0ZPVU5EOworICAgICAgICAgICAgcXVldWUudW5sb2NrKCk7CisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgTXV0ZXhlZDxFeGVjU3RhdGU+OjpMb2NrZWQgc3RhdGUobUV4ZWNTdGF0ZSk7CisgICAgICAgICAgICAgICAgc3RkOjpzaGFyZWRfcHRyPEMyQ29tcG9uZW50OjpMaXN0ZW5lcj4gbGlzdGVuZXIgPSBzdGF0ZS0+bUxpc3RlbmVyOworICAgICAgICAgICAgICAgIHN0YXRlLnVubG9jaygpOworICAgICAgICAgICAgICAgIGxpc3RlbmVyLT5vbldvcmtEb25lX25iKHNoYXJlZF9mcm9tX3RoaXMoKSwgdmVjKHdvcmspKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHF1ZXVlLmxvY2soKTsKKyAgICAgICAgICAgIHJldHVybiBoYXNRdWV1ZWRXb3JrOworICAgICAgICB9CisgICAgfQorICAgIGlmICh3b3JrLT53b3JrbGV0c1Byb2Nlc3NlZCAhPSAwdSkgeworICAgICAgICBNdXRleGVkPEV4ZWNTdGF0ZT46OkxvY2tlZCBzdGF0ZShtRXhlY1N0YXRlKTsKKyAgICAgICAgQUxPR1YoInJldHVybmluZyB0aGlzIHdvcmsiKTsKKyAgICAgICAgc3RkOjpzaGFyZWRfcHRyPEMyQ29tcG9uZW50OjpMaXN0ZW5lcj4gbGlzdGVuZXIgPSBzdGF0ZS0+bUxpc3RlbmVyOworICAgICAgICBzdGF0ZS51bmxvY2soKTsKKyAgICAgICAgbGlzdGVuZXItPm9uV29ya0RvbmVfbmIoc2hhcmVkX2Zyb21fdGhpcygpLCB2ZWMod29yaykpOworICAgIH0gZWxzZSB7CisgICAgICAgIEFMT0dWKCJxdWV1ZSBwZW5kaW5nIHdvcmsiKTsKKyAgICAgICAgd29yay0+aW5wdXQuYnVmZmVycy5jbGVhcigpOworICAgICAgICBzdGQ6OnVuaXF1ZV9wdHI8QzJXb3JrPiB1bmV4cGVjdGVkOworICAgICAgICB7CisgICAgICAgICAgICBNdXRleGVkPFBlbmRpbmdXb3JrPjo6TG9ja2VkIHBlbmRpbmcobVBlbmRpbmdXb3JrKTsKKyAgICAgICAgICAgIHVpbnQ2NF90IGZyYW1lSW5kZXggPSB3b3JrLT5pbnB1dC5vcmRpbmFsLmZyYW1lSW5kZXgucGVla3UoKTsKKyAgICAgICAgICAgIGlmIChwZW5kaW5nLT5jb3VudChmcmFtZUluZGV4KSAhPSAwKSB7CisgICAgICAgICAgICAgICAgdW5leHBlY3RlZCA9IHN0ZDo6bW92ZShwZW5kaW5nLT5hdChmcmFtZUluZGV4KSk7CisgICAgICAgICAgICAgICAgcGVuZGluZy0+ZXJhc2UoZnJhbWVJbmRleCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICAodm9pZClwZW5kaW5nLT5pbnNlcnQoeyBmcmFtZUluZGV4LCBzdGQ6Om1vdmUod29yaykgfSk7CisgICAgICAgIH0KKyAgICAgICAgaWYgKHVuZXhwZWN0ZWQpIHsKKyAgICAgICAgICAgIEFMT0dEKCJ1bmV4cGVjdGVkIHBlbmRpbmcgd29yayIpOworICAgICAgICAgICAgdW5leHBlY3RlZC0+cmVzdWx0ID0gQzJfQ09SUlVQVEVEOworICAgICAgICAgICAgTXV0ZXhlZDxFeGVjU3RhdGU+OjpMb2NrZWQgc3RhdGUobUV4ZWNTdGF0ZSk7CisgICAgICAgICAgICBzdGQ6OnNoYXJlZF9wdHI8QzJDb21wb25lbnQ6Okxpc3RlbmVyPiBsaXN0ZW5lciA9IHN0YXRlLT5tTGlzdGVuZXI7CisgICAgICAgICAgICBzdGF0ZS51bmxvY2soKTsKKyAgICAgICAgICAgIGxpc3RlbmVyLT5vbldvcmtEb25lX25iKHNoYXJlZF9mcm9tX3RoaXMoKSwgdmVjKHVuZXhwZWN0ZWQpKTsKKyAgICAgICAgfQorICAgIH0KKyAgICByZXR1cm4gaGFzUXVldWVkV29yazsKK30KKworc3RkOjpzaGFyZWRfcHRyPEMyQnVmZmVyPiBTaW1wbGVDMkNvbXBvbmVudDo6Y3JlYXRlTGluZWFyQnVmZmVyKAorICAgICAgICBjb25zdCBzdGQ6OnNoYXJlZF9wdHI8QzJMaW5lYXJCbG9jaz4gJmJsb2NrKSB7CisgICAgcmV0dXJuIGNyZWF0ZUxpbmVhckJ1ZmZlcihibG9jaywgYmxvY2stPm9mZnNldCgpLCBibG9jay0+c2l6ZSgpKTsKK30KKworc3RkOjpzaGFyZWRfcHRyPEMyQnVmZmVyPiBTaW1wbGVDMkNvbXBvbmVudDo6Y3JlYXRlTGluZWFyQnVmZmVyKAorICAgICAgICBjb25zdCBzdGQ6OnNoYXJlZF9wdHI8QzJMaW5lYXJCbG9jaz4gJmJsb2NrLCBzaXplX3Qgb2Zmc2V0LCBzaXplX3Qgc2l6ZSkgeworICAgIHJldHVybiBDMkJ1ZmZlcjo6Q3JlYXRlTGluZWFyQnVmZmVyKGJsb2NrLT5zaGFyZShvZmZzZXQsIHNpemUsIDo6QzJGZW5jZSgpKSk7Cit9CisKK3N0ZDo6c2hhcmVkX3B0cjxDMkJ1ZmZlcj4gU2ltcGxlQzJDb21wb25lbnQ6OmNyZWF0ZUdyYXBoaWNCdWZmZXIoCisgICAgICAgIGNvbnN0IHN0ZDo6c2hhcmVkX3B0cjxDMkdyYXBoaWNCbG9jaz4gJmJsb2NrKSB7CisgICAgcmV0dXJuIGNyZWF0ZUdyYXBoaWNCdWZmZXIoYmxvY2ssIEMyUmVjdChibG9jay0+d2lkdGgoKSwgYmxvY2stPmhlaWdodCgpKSk7Cit9CisKK3N0ZDo6c2hhcmVkX3B0cjxDMkJ1ZmZlcj4gU2ltcGxlQzJDb21wb25lbnQ6OmNyZWF0ZUdyYXBoaWNCdWZmZXIoCisgICAgICAgIGNvbnN0IHN0ZDo6c2hhcmVkX3B0cjxDMkdyYXBoaWNCbG9jaz4gJmJsb2NrLCBjb25zdCBDMlJlY3QgJmNyb3ApIHsKKyAgICByZXR1cm4gQzJCdWZmZXI6OkNyZWF0ZUdyYXBoaWNCdWZmZXIoYmxvY2stPnNoYXJlKGNyb3AsIDo6QzJGZW5jZSgpKSk7Cit9CisKK30gLy8gbmFtZXNwYWNlIGFuZHJvaWQKZGlmZiAtLWdpdCBhL21lZGlhL2NvZGVjMi9jb21wb25lbnRzL2Jhc2UvU2ltcGxlQzJJbnRlcmZhY2UuY3BwIGIvbWVkaWEvY29kZWMyL2NvbXBvbmVudHMvYmFzZS9TaW1wbGVDMkludGVyZmFjZS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzg0OWE0ZQotLS0gL2Rldi9udWxsCisrKyBiL21lZGlhL2NvZGVjMi9jb21wb25lbnRzL2Jhc2UvU2ltcGxlQzJJbnRlcmZhY2UuY3BwCkBAIC0wLDAgKzEsMzE1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE3IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KKworLy8jZGVmaW5lIExPR19OREVCVUcgMAorI2RlZmluZSBMT0dfVEFHICJTaW1wbGVDMkludGVyZmFjZSIKKyNpbmNsdWRlIDx1dGlscy9Mb2cuaD4KKworLy8gdXNlIE1lZGlhRGVmcyBoZXJlIHZzLiBNZWRpYUNvZGVjQ29uc3RhbnRzIGFzIHRoaXMgaXMgbm90IE1lZGlhQ29kZWMgc3BlY2lmaWMvZGVwZW5kZW50CisjaW5jbHVkZSA8bWVkaWEvc3RhZ2VmcmlnaHQvZm91bmRhdGlvbi9NZWRpYURlZnMuaD4KKworI2luY2x1ZGUgPFNpbXBsZUMySW50ZXJmYWNlLmg+CisKK25hbWVzcGFjZSBhbmRyb2lkIHsKKworLyogU2ltcGxlSW50ZXJmYWNlICovCisKK1NpbXBsZUludGVyZmFjZTx2b2lkPjo6QmFzZVBhcmFtczo6QmFzZVBhcmFtcygKKyAgICAgICAgY29uc3Qgc3RkOjpzaGFyZWRfcHRyPEMyUmVmbGVjdG9ySGVscGVyPiAmcmVmbGVjdG9yLAorICAgICAgICBDMlN0cmluZyBuYW1lLAorICAgICAgICBDMkNvbXBvbmVudDo6a2luZF90IGtpbmQsCisgICAgICAgIEMyQ29tcG9uZW50Ojpkb21haW5fdCBkb21haW4sCisgICAgICAgIEMyU3RyaW5nIG1lZGlhVHlwZSwKKyAgICAgICAgc3RkOjp2ZWN0b3I8QzJTdHJpbmc+IGFsaWFzZXMpCisgICAgOiBDMkludGVyZmFjZUhlbHBlcihyZWZsZWN0b3IpIHsKKyAgICBzZXREZXJpdmVkSW5zdGFuY2UodGhpcyk7CisKKyAgICBhZGRQYXJhbWV0ZXIoCisgICAgICAgICAgICBEZWZpbmVQYXJhbShtTmFtZSwgQzJfUEFSQU1LRVlfQ09NUE9ORU5UX05BTUUpCisgICAgICAgICAgICAud2l0aENvbnN0VmFsdWUoQWxsb2NTaGFyZWRTdHJpbmc8QzJDb21wb25lbnROYW1lU2V0dGluZz4obmFtZS5jX3N0cigpKSkKKyAgICAgICAgICAgIC5idWlsZCgpKTsKKworICAgIGlmIChhbGlhc2VzLnNpemUoKSkgeworICAgICAgICBDMlN0cmluZyBqb2luZWQ7CisgICAgICAgIGZvciAoY29uc3QgQzJTdHJpbmcgJmFsaWFzIDogYWxpYXNlcykgeworICAgICAgICAgICAgaWYgKGpvaW5lZC5sZW5ndGgoKSkgeworICAgICAgICAgICAgICAgIGpvaW5lZCArPSAiLCI7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBqb2luZWQgKz0gYWxpYXM7CisgICAgICAgIH0KKyAgICAgICAgYWRkUGFyYW1ldGVyKAorICAgICAgICAgICAgICAgIERlZmluZVBhcmFtKG1BbGlhc2VzLCBDMl9QQVJBTUtFWV9DT01QT05FTlRfQUxJQVNFUykKKyAgICAgICAgICAgICAgICAud2l0aENvbnN0VmFsdWUoQWxsb2NTaGFyZWRTdHJpbmc8QzJDb21wb25lbnRBbGlhc2VzU2V0dGluZz4oam9pbmVkLmNfc3RyKCkpKQorICAgICAgICAgICAgICAgIC5idWlsZCgpKTsKKyAgICB9CisKKyAgICBhZGRQYXJhbWV0ZXIoCisgICAgICAgICAgICBEZWZpbmVQYXJhbShtS2luZCwgQzJfUEFSQU1LRVlfQ09NUE9ORU5UX0tJTkQpCisgICAgICAgICAgICAud2l0aENvbnN0VmFsdWUobmV3IEMyQ29tcG9uZW50S2luZFNldHRpbmcoa2luZCkpCisgICAgICAgICAgICAuYnVpbGQoKSk7CisKKyAgICBhZGRQYXJhbWV0ZXIoCisgICAgICAgICAgICBEZWZpbmVQYXJhbShtRG9tYWluLCBDMl9QQVJBTUtFWV9DT01QT05FTlRfRE9NQUlOKQorICAgICAgICAgICAgLndpdGhDb25zdFZhbHVlKG5ldyBDMkNvbXBvbmVudERvbWFpblNldHRpbmcoZG9tYWluKSkKKyAgICAgICAgICAgIC5idWlsZCgpKTsKKworICAgIC8vIHNpbXBsZSBpbnRlcmZhY2VzIGhhdmUgc2luZ2xlIHN0cmVhbXMKKyAgICBhZGRQYXJhbWV0ZXIoCisgICAgICAgICAgICBEZWZpbmVQYXJhbShtSW5wdXRTdHJlYW1Db3VudCwgQzJfUEFSQU1LRVlfSU5QVVRfU1RSRUFNX0NPVU5UKQorICAgICAgICAgICAgLndpdGhDb25zdFZhbHVlKG5ldyBDMlBvcnRTdHJlYW1Db3VudFR1bmluZzo6aW5wdXQoMSkpCisgICAgICAgICAgICAuYnVpbGQoKSk7CisKKyAgICBhZGRQYXJhbWV0ZXIoCisgICAgICAgICAgICBEZWZpbmVQYXJhbShtT3V0cHV0U3RyZWFtQ291bnQsIEMyX1BBUkFNS0VZX09VVFBVVF9TVFJFQU1fQ09VTlQpCisgICAgICAgICAgICAud2l0aENvbnN0VmFsdWUobmV3IEMyUG9ydFN0cmVhbUNvdW50VHVuaW5nOjpvdXRwdXQoMSkpCisgICAgICAgICAgICAuYnVpbGQoKSk7CisKKyAgICAvLyBzZXQgdXAgYnVmZmVyIGZvcm1hdHMgYW5kIGFsbG9jYXRvcnMKKworICAgIC8vIGRlZmF1bHQgdG8gbGluZWFyIGJ1ZmZlcnMgYW5kIG5vIG1lZGlhIHR5cGUKKyAgICBDMkJ1ZmZlckRhdGE6OnR5cGVfdCByYXdCdWZmZXJUeXBlID0gQzJCdWZmZXJEYXRhOjpMSU5FQVI7CisgICAgQzJTdHJpbmcgcmF3TWVkaWFUeXBlOworICAgIEMyQWxsb2NhdG9yOjppZF90IHJhd0FsbG9jYXRvciA9IEMyQWxsb2NhdG9yU3RvcmU6OkRFRkFVTFRfTElORUFSOworICAgIEMyQmxvY2tQb29sOjpsb2NhbF9pZF90IHJhd1Bvb2xJZCA9IEMyQmxvY2tQb29sOjpCQVNJQ19MSU5FQVI7CisgICAgQzJCdWZmZXJEYXRhOjp0eXBlX3QgY29kZWRCdWZmZXJUeXBlID0gQzJCdWZmZXJEYXRhOjpMSU5FQVI7CisgICAgQzJBbGxvY2F0b3I6OmlkX3QgY29kZWRBbGxvY2F0b3IgPSBDMkFsbG9jYXRvclN0b3JlOjpERUZBVUxUX0xJTkVBUjsKKyAgICBDMkJsb2NrUG9vbDo6bG9jYWxfaWRfdCBjb2RlZFBvb2xJZCA9IEMyQmxvY2tQb29sOjpCQVNJQ19MSU5FQVI7CisKKyAgICBzd2l0Y2ggKGRvbWFpbikgeworICAgICAgICBjYXNlIEMyQ29tcG9uZW50OjpET01BSU5fSU1BR0U6CisgICAgICAgIGNhc2UgQzJDb21wb25lbnQ6OkRPTUFJTl9WSURFTzoKKyAgICAgICAgICAgIC8vIFRPRE86IHNob3VsZCB3ZSBkZWZpbmUgcmF3IGltYWdlPyBUaGUgb25seSBkaWZmZXJlbmNlIGlzIHRpbWVzdGFtcCBoYW5kbGluZworICAgICAgICAgICAgcmF3QnVmZmVyVHlwZSA9IEMyQnVmZmVyRGF0YTo6R1JBUEhJQzsKKyAgICAgICAgICAgIHJhd01lZGlhVHlwZSA9IE1FRElBX01JTUVUWVBFX1ZJREVPX1JBVzsKKyAgICAgICAgICAgIHJhd0FsbG9jYXRvciA9IEMyQWxsb2NhdG9yU3RvcmU6OkRFRkFVTFRfR1JBUEhJQzsKKyAgICAgICAgICAgIHJhd1Bvb2xJZCA9IEMyQmxvY2tQb29sOjpCQVNJQ19HUkFQSElDOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgQzJDb21wb25lbnQ6OkRPTUFJTl9BVURJTzoKKyAgICAgICAgICAgIHJhd0J1ZmZlclR5cGUgPSBDMkJ1ZmZlckRhdGE6OkxJTkVBUjsKKyAgICAgICAgICAgIHJhd01lZGlhVHlwZSA9IE1FRElBX01JTUVUWVBFX0FVRElPX1JBVzsKKyAgICAgICAgICAgIHJhd0FsbG9jYXRvciA9IEMyQWxsb2NhdG9yU3RvcmU6OkRFRkFVTFRfTElORUFSOworICAgICAgICAgICAgcmF3UG9vbElkID0gQzJCbG9ja1Bvb2w6OkJBU0lDX0xJTkVBUjsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgYnJlYWs7CisgICAgfQorICAgIGJvb2wgaXNFbmNvZGVyID0ga2luZCA9PSBDMkNvbXBvbmVudDo6S0lORF9FTkNPREVSOworCisgICAgLy8gaGFuZGxlIHJhdyBkZWNvZGVycworICAgIGlmIChtZWRpYVR5cGUgPT0gcmF3TWVkaWFUeXBlKSB7CisgICAgICAgIGNvZGVkQnVmZmVyVHlwZSA9IHJhd0J1ZmZlclR5cGU7CisgICAgICAgIGNvZGVkQWxsb2NhdG9yID0gcmF3QWxsb2NhdG9yOworICAgICAgICBjb2RlZFBvb2xJZCA9IHJhd1Bvb2xJZDsKKyAgICB9CisKKyAgICBhZGRQYXJhbWV0ZXIoCisgICAgICAgICAgICBEZWZpbmVQYXJhbShtSW5wdXRGb3JtYXQsIEMyX1BBUkFNS0VZX0lOUFVUX1NUUkVBTV9CVUZGRVJfVFlQRSkKKyAgICAgICAgICAgIC53aXRoQ29uc3RWYWx1ZShuZXcgQzJTdHJlYW1CdWZmZXJUeXBlU2V0dGluZzo6aW5wdXQoCisgICAgICAgICAgICAgICAgICAgIDB1LCBpc0VuY29kZXIgPyByYXdCdWZmZXJUeXBlIDogY29kZWRCdWZmZXJUeXBlKSkKKyAgICAgICAgICAgIC5idWlsZCgpKTsKKworICAgIGFkZFBhcmFtZXRlcigKKyAgICAgICAgICAgIERlZmluZVBhcmFtKG1JbnB1dE1lZGlhVHlwZSwgQzJfUEFSQU1LRVlfSU5QVVRfTUVESUFfVFlQRSkKKyAgICAgICAgICAgIC53aXRoQ29uc3RWYWx1ZShBbGxvY1NoYXJlZFN0cmluZzxDMlBvcnRNZWRpYVR5cGVTZXR0aW5nOjppbnB1dD4oCisgICAgICAgICAgICAgICAgICAgIGlzRW5jb2RlciA/IHJhd01lZGlhVHlwZSA6IG1lZGlhVHlwZSkpCisgICAgICAgICAgICAuYnVpbGQoKSk7CisKKyAgICBhZGRQYXJhbWV0ZXIoCisgICAgICAgICAgICBEZWZpbmVQYXJhbShtT3V0cHV0Rm9ybWF0LCBDMl9QQVJBTUtFWV9PVVRQVVRfU1RSRUFNX0JVRkZFUl9UWVBFKQorICAgICAgICAgICAgLndpdGhDb25zdFZhbHVlKG5ldyBDMlN0cmVhbUJ1ZmZlclR5cGVTZXR0aW5nOjpvdXRwdXQoCisgICAgICAgICAgICAgICAgICAgIDB1LCBpc0VuY29kZXIgPyBjb2RlZEJ1ZmZlclR5cGUgOiByYXdCdWZmZXJUeXBlKSkKKyAgICAgICAgICAgIC5idWlsZCgpKTsKKworICAgIGFkZFBhcmFtZXRlcigKKyAgICAgICAgICAgIERlZmluZVBhcmFtKG1PdXRwdXRNZWRpYVR5cGUsIEMyX1BBUkFNS0VZX09VVFBVVF9NRURJQV9UWVBFKQorICAgICAgICAgICAgLndpdGhDb25zdFZhbHVlKEFsbG9jU2hhcmVkU3RyaW5nPEMyUG9ydE1lZGlhVHlwZVNldHRpbmc6Om91dHB1dD4oCisgICAgICAgICAgICAgICAgICAgIGlzRW5jb2RlciA/IG1lZGlhVHlwZSA6IHJhd01lZGlhVHlwZSkpCisgICAgICAgICAgICAuYnVpbGQoKSk7CisKKyAgICBDMkFsbG9jYXRvcjo6aWRfdCBpbnB1dEFsbG9jYXRvcnNbMV0gPSB7IGlzRW5jb2RlciA/IHJhd0FsbG9jYXRvciA6IGNvZGVkQWxsb2NhdG9yIH07CisgICAgQzJBbGxvY2F0b3I6OmlkX3Qgb3V0cHV0QWxsb2NhdG9yc1sxXSA9IHsgaXNFbmNvZGVyID8gY29kZWRBbGxvY2F0b3IgOiByYXdBbGxvY2F0b3IgfTsKKyAgICBDMkJsb2NrUG9vbDo6bG9jYWxfaWRfdCBvdXRwdXRQb29sSWRzWzFdID0geyBpc0VuY29kZXIgPyBjb2RlZFBvb2xJZCA6IHJhd1Bvb2xJZCB9OworCisgICAgYWRkUGFyYW1ldGVyKAorICAgICAgICAgICAgRGVmaW5lUGFyYW0obUlucHV0QWxsb2NhdG9ycywgQzJfUEFSQU1LRVlfSU5QVVRfQUxMT0NBVE9SUykKKyAgICAgICAgICAgIC53aXRoRGVmYXVsdChDMlBvcnRBbGxvY2F0b3JzVHVuaW5nOjppbnB1dDo6QWxsb2NTaGFyZWQoaW5wdXRBbGxvY2F0b3JzKSkKKyAgICAgICAgICAgIC53aXRoRmllbGRzKHsgQzJGKG1JbnB1dEFsbG9jYXRvcnMsIG0udmFsdWVzWzBdKS5hbnkoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgQzJGKG1JbnB1dEFsbG9jYXRvcnMsIG0udmFsdWVzKS5pblJhbmdlKDAsIDEpIH0pCisgICAgICAgICAgICAud2l0aFNldHRlcihTZXR0ZXI8QzJQb3J0QWxsb2NhdG9yc1R1bmluZzo6aW5wdXQ+OjpOb25TdHJpY3RWYWx1ZXNXaXRoTm9EZXBzKQorICAgICAgICAgICAgLmJ1aWxkKCkpOworCisgICAgYWRkUGFyYW1ldGVyKAorICAgICAgICAgICAgRGVmaW5lUGFyYW0obU91dHB1dEFsbG9jYXRvcnMsIEMyX1BBUkFNS0VZX09VVFBVVF9BTExPQ0FUT1JTKQorICAgICAgICAgICAgLndpdGhEZWZhdWx0KEMyUG9ydEFsbG9jYXRvcnNUdW5pbmc6Om91dHB1dDo6QWxsb2NTaGFyZWQob3V0cHV0QWxsb2NhdG9ycykpCisgICAgICAgICAgICAud2l0aEZpZWxkcyh7IEMyRihtT3V0cHV0QWxsb2NhdG9ycywgbS52YWx1ZXNbMF0pLmFueSgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICBDMkYobU91dHB1dEFsbG9jYXRvcnMsIG0udmFsdWVzKS5pblJhbmdlKDAsIDEpIH0pCisgICAgICAgICAgICAud2l0aFNldHRlcihTZXR0ZXI8QzJQb3J0QWxsb2NhdG9yc1R1bmluZzo6b3V0cHV0Pjo6Tm9uU3RyaWN0VmFsdWVzV2l0aE5vRGVwcykKKyAgICAgICAgICAgIC5idWlsZCgpKTsKKworICAgIGFkZFBhcmFtZXRlcigKKyAgICAgICAgICAgIERlZmluZVBhcmFtKG1PdXRwdXRQb29sSWRzLCBDMl9QQVJBTUtFWV9PVVRQVVRfQkxPQ0tfUE9PTFMpCisgICAgICAgICAgICAud2l0aERlZmF1bHQoQzJQb3J0QmxvY2tQb29sc1R1bmluZzo6b3V0cHV0OjpBbGxvY1NoYXJlZChvdXRwdXRQb29sSWRzKSkKKyAgICAgICAgICAgIC53aXRoRmllbGRzKHsgQzJGKG1PdXRwdXRQb29sSWRzLCBtLnZhbHVlc1swXSkuYW55KCksCisgICAgICAgICAgICAgICAgICAgICAgICAgIEMyRihtT3V0cHV0UG9vbElkcywgbS52YWx1ZXMpLmluUmFuZ2UoMCwgMSkgfSkKKyAgICAgICAgICAgIC53aXRoU2V0dGVyKFNldHRlcjxDMlBvcnRCbG9ja1Bvb2xzVHVuaW5nOjpvdXRwdXQ+OjpOb25TdHJpY3RWYWx1ZXNXaXRoTm9EZXBzKQorICAgICAgICAgICAgLmJ1aWxkKCkpOworCisgICAgLy8gYWRkIHN0YXRlbGVzcyBwYXJhbXMKKyAgICBhZGRQYXJhbWV0ZXIoCisgICAgICAgICAgICBEZWZpbmVQYXJhbShtU3Vic2NyaWJlZFBhcmFtSW5kaWNlcywgQzJfUEFSQU1LRVlfU1VCU0NSSUJFRF9QQVJBTV9JTkRJQ0VTKQorICAgICAgICAgICAgLndpdGhEZWZhdWx0KEMyU3Vic2NyaWJlZFBhcmFtSW5kaWNlc1R1bmluZzo6QWxsb2NTaGFyZWQoMHUpKQorICAgICAgICAgICAgLndpdGhGaWVsZHMoeyBDMkYobVN1YnNjcmliZWRQYXJhbUluZGljZXMsIG0udmFsdWVzWzBdKS5hbnkoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgQzJGKG1TdWJzY3JpYmVkUGFyYW1JbmRpY2VzLCBtLnZhbHVlcykuYW55KCkgfSkKKyAgICAgICAgICAgIC53aXRoU2V0dGVyKFNldHRlcjxDMlN1YnNjcmliZWRQYXJhbUluZGljZXNUdW5pbmc+OjpOb25TdHJpY3RWYWx1ZXNXaXRoTm9EZXBzKQorICAgICAgICAgICAgLmJ1aWxkKCkpOworCisgICAgLyogVE9ETworCisgICAgYWRkUGFyYW1ldGVyKAorICAgICAgICAgICAgRGVmaW5lUGFyYW0obUN1cnJlbnRXb3JrT3JkaW5hbCwgQzJfUEFSQU1LRVlfQ1VSUkVOVF9XT1JLKQorICAgICAgICAgICAgLndpdGhEZWZhdWx0KG5ldyBDMkN1cnJlbnRXb3JrVHVuaW5nKCkpCisgICAgICAgICAgICAud2l0aEZpZWxkcyh7IEMyRihtQ3VycmVudFdvcmtPcmRpbmFsLCBtLnRpbWVTdGFtcCkuYW55KCksCisgICAgICAgICAgICAgICAgICAgICAgICAgIEMyRihtQ3VycmVudFdvcmtPcmRpbmFsLCBtLmZyYW1lSW5kZXgpLmFueSgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICBDMkYobUN1cnJlbnRXb3JrT3JkaW5hbCwgbS5jdXN0b21PcmRpbmFsKS5hbnkoKSB9KQorICAgICAgICAgICAgLndpdGhTZXR0ZXIoU2V0dGVyPEMyQ3VycmVudFdvcmtUdW5pbmc+OjpOb25TdHJpY3RWYWx1ZXNXaXRoTm9EZXBzKQorICAgICAgICAgICAgLmJ1aWxkKCkpOworCisgICAgYWRkUGFyYW1ldGVyKAorICAgICAgICAgICAgRGVmaW5lUGFyYW0obUxhc3RJbnB1dFF1ZXVlZFdvcmtPcmRpbmFsLCBDMl9QQVJBTUtFWV9MQVNUX0lOUFVUX1FVRVVFRCkKKyAgICAgICAgICAgIC53aXRoRGVmYXVsdChuZXcgQzJMYXN0V29ya1F1ZXVlZFR1bmluZzo6aW5wdXQoKSkKKyAgICAgICAgICAgIC53aXRoRmllbGRzKHsgQzJGKG1MYXN0SW5wdXRRdWV1ZWRXb3JrT3JkaW5hbCwgbS50aW1lU3RhbXApLmFueSgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICBDMkYobUxhc3RJbnB1dFF1ZXVlZFdvcmtPcmRpbmFsLCBtLmZyYW1lSW5kZXgpLmFueSgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICBDMkYobUxhc3RJbnB1dFF1ZXVlZFdvcmtPcmRpbmFsLCBtLmN1c3RvbU9yZGluYWwpLmFueSgpIH0pCisgICAgICAgICAgICAud2l0aFNldHRlcihTZXR0ZXI8QzJMYXN0V29ya1F1ZXVlZFR1bmluZzo6aW5wdXQ+OjpOb25TdHJpY3RWYWx1ZXNXaXRoTm9EZXBzKQorICAgICAgICAgICAgLmJ1aWxkKCkpOworCisgICAgYWRkUGFyYW1ldGVyKAorICAgICAgICAgICAgRGVmaW5lUGFyYW0obUxhc3RPdXRwdXRRdWV1ZWRXb3JrT3JkaW5hbCwgQzJfUEFSQU1LRVlfTEFTVF9PVVRQVVRfUVVFVUVEKQorICAgICAgICAgICAgLndpdGhEZWZhdWx0KG5ldyBDMkxhc3RXb3JrUXVldWVkVHVuaW5nOjpvdXRwdXQoKSkKKyAgICAgICAgICAgIC53aXRoRmllbGRzKHsgQzJGKG1MYXN0T3V0cHV0UXVldWVkV29ya09yZGluYWwsIG0udGltZVN0YW1wKS5hbnkoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgQzJGKG1MYXN0T3V0cHV0UXVldWVkV29ya09yZGluYWwsIG0uZnJhbWVJbmRleCkuYW55KCksCisgICAgICAgICAgICAgICAgICAgICAgICAgIEMyRihtTGFzdE91dHB1dFF1ZXVlZFdvcmtPcmRpbmFsLCBtLmN1c3RvbU9yZGluYWwpLmFueSgpIH0pCisgICAgICAgICAgICAud2l0aFNldHRlcihTZXR0ZXI8QzJMYXN0V29ya1F1ZXVlZFR1bmluZzo6b3V0cHV0Pjo6Tm9uU3RyaWN0VmFsdWVzV2l0aE5vRGVwcykKKyAgICAgICAgICAgIC5idWlsZCgpKTsKKworICAgIHN0ZDo6c2hhcmVkX3B0cjxDMk91dE9mTWVtb3J5VHVuaW5nPiBtT3V0T2ZNZW1vcnk7CisKKyAgICBzdGQ6OnNoYXJlZF9wdHI8QzJQb3J0Q29uZmlnQ291bnRlclR1bmluZzo6aW5wdXQ+IG1JbnB1dENvbmZpZ0NvdW50ZXI7CisgICAgc3RkOjpzaGFyZWRfcHRyPEMyUG9ydENvbmZpZ0NvdW50ZXJUdW5pbmc6Om91dHB1dD4gbU91dHB1dENvbmZpZ0NvdW50ZXI7CisgICAgc3RkOjpzaGFyZWRfcHRyPEMyQ29uZmlnQ291bnRlclR1bmluZz4gbURpcmVjdENvbmZpZ0NvdW50ZXI7CisKKyAgICAqLworfQorCit2b2lkIFNpbXBsZUludGVyZmFjZTx2b2lkPjo6QmFzZVBhcmFtczo6bm9JbnB1dExhdGVuY3koKSB7CisgICAgYWRkUGFyYW1ldGVyKAorICAgICAgICAgICAgRGVmaW5lUGFyYW0obVJlcXVlc3RlZElucHV0RGVsYXksIEMyX1BBUkFNS0VZX0lOUFVUX0RFTEFZX1JFUVVFU1QpCisgICAgICAgICAgICAud2l0aENvbnN0VmFsdWUobmV3IEMyUG9ydFJlcXVlc3RlZERlbGF5VHVuaW5nOjppbnB1dCgwdSkpCisgICAgICAgICAgICAuYnVpbGQoKSk7CisKKyAgICBhZGRQYXJhbWV0ZXIoCisgICAgICAgICAgICBEZWZpbmVQYXJhbShtQWN0dWFsSW5wdXREZWxheSwgQzJfUEFSQU1LRVlfSU5QVVRfREVMQVkpCisgICAgICAgICAgICAud2l0aENvbnN0VmFsdWUobmV3IEMyUG9ydEFjdHVhbERlbGF5VHVuaW5nOjppbnB1dCgwdSkpCisgICAgICAgICAgICAuYnVpbGQoKSk7Cit9CisKK3ZvaWQgU2ltcGxlSW50ZXJmYWNlPHZvaWQ+OjpCYXNlUGFyYW1zOjpub091dHB1dExhdGVuY3koKSB7CisgICAgYWRkUGFyYW1ldGVyKAorICAgICAgICAgICAgRGVmaW5lUGFyYW0obVJlcXVlc3RlZE91dHB1dERlbGF5LCBDMl9QQVJBTUtFWV9PVVRQVVRfREVMQVlfUkVRVUVTVCkKKyAgICAgICAgICAgIC53aXRoQ29uc3RWYWx1ZShuZXcgQzJQb3J0UmVxdWVzdGVkRGVsYXlUdW5pbmc6Om91dHB1dCgwdSkpCisgICAgICAgICAgICAuYnVpbGQoKSk7CisKKyAgICBhZGRQYXJhbWV0ZXIoCisgICAgICAgICAgICBEZWZpbmVQYXJhbShtQWN0dWFsT3V0cHV0RGVsYXksIEMyX1BBUkFNS0VZX09VVFBVVF9ERUxBWSkKKyAgICAgICAgICAgIC53aXRoQ29uc3RWYWx1ZShuZXcgQzJQb3J0QWN0dWFsRGVsYXlUdW5pbmc6Om91dHB1dCgwdSkpCisgICAgICAgICAgICAuYnVpbGQoKSk7Cit9CisKK3ZvaWQgU2ltcGxlSW50ZXJmYWNlPHZvaWQ+OjpCYXNlUGFyYW1zOjpub1BpcGVsaW5lTGF0ZW5jeSgpIHsKKyAgICBhZGRQYXJhbWV0ZXIoCisgICAgICAgICAgICBEZWZpbmVQYXJhbShtUmVxdWVzdGVkUGlwZWxpbmVEZWxheSwgQzJfUEFSQU1LRVlfUElQRUxJTkVfREVMQVlfUkVRVUVTVCkKKyAgICAgICAgICAgIC53aXRoQ29uc3RWYWx1ZShuZXcgQzJSZXF1ZXN0ZWRQaXBlbGluZURlbGF5VHVuaW5nKDB1KSkKKyAgICAgICAgICAgIC5idWlsZCgpKTsKKworICAgIGFkZFBhcmFtZXRlcigKKyAgICAgICAgICAgIERlZmluZVBhcmFtKG1BY3R1YWxQaXBlbGluZURlbGF5LCBDMl9QQVJBTUtFWV9QSVBFTElORV9ERUxBWSkKKyAgICAgICAgICAgIC53aXRoQ29uc3RWYWx1ZShuZXcgQzJBY3R1YWxQaXBlbGluZURlbGF5VHVuaW5nKDB1KSkKKyAgICAgICAgICAgIC5idWlsZCgpKTsKK30KKwordm9pZCBTaW1wbGVJbnRlcmZhY2U8dm9pZD46OkJhc2VQYXJhbXM6Om5vUHJpdmF0ZUJ1ZmZlcnMoKSB7CisgICAgYWRkUGFyYW1ldGVyKAorICAgICAgICAgICAgRGVmaW5lUGFyYW0obVByaXZhdGVBbGxvY2F0b3JzLCBDMl9QQVJBTUtFWV9QUklWQVRFX0FMTE9DQVRPUlMpCisgICAgICAgICAgICAud2l0aENvbnN0VmFsdWUoQzJQcml2YXRlQWxsb2NhdG9yc1R1bmluZzo6QWxsb2NTaGFyZWQoMHUpKQorICAgICAgICAgICAgLmJ1aWxkKCkpOworCisgICAgYWRkUGFyYW1ldGVyKAorICAgICAgICAgICAgRGVmaW5lUGFyYW0obU1heFByaXZhdGVCdWZmZXJDb3VudCwgQzJfUEFSQU1LRVlfTUFYX1BSSVZBVEVfQlVGRkVSX0NPVU5UKQorICAgICAgICAgICAgLndpdGhDb25zdFZhbHVlKEMyTWF4UHJpdmF0ZUJ1ZmZlckNvdW50VHVuaW5nOjpBbGxvY1NoYXJlZCgwdSkpCisgICAgICAgICAgICAuYnVpbGQoKSk7CisKKyAgICBhZGRQYXJhbWV0ZXIoCisgICAgICAgICAgICBEZWZpbmVQYXJhbShtUHJpdmF0ZVBvb2xJZHMsIEMyX1BBUkFNS0VZX1BSSVZBVEVfQkxPQ0tfUE9PTFMpCisgICAgICAgICAgICAud2l0aENvbnN0VmFsdWUoQzJQcml2YXRlQmxvY2tQb29sc1R1bmluZzo6QWxsb2NTaGFyZWQoMHUpKQorICAgICAgICAgICAgLmJ1aWxkKCkpOworfQorCit2b2lkIFNpbXBsZUludGVyZmFjZTx2b2lkPjo6QmFzZVBhcmFtczo6bm9JbnB1dFJlZmVyZW5jZXMoKSB7CisgICAgYWRkUGFyYW1ldGVyKAorICAgICAgICAgICAgRGVmaW5lUGFyYW0obU1heElucHV0UmVmZXJlbmNlQWdlLCBDMl9QQVJBTUtFWV9JTlBVVF9NQVhfUkVGRVJFTkNFX0FHRSkKKyAgICAgICAgICAgIC53aXRoQ29uc3RWYWx1ZShuZXcgQzJTdHJlYW1NYXhSZWZlcmVuY2VBZ2VUdW5pbmc6OmlucHV0KDB1KSkKKyAgICAgICAgICAgIC5idWlsZCgpKTsKKworICAgIGFkZFBhcmFtZXRlcigKKyAgICAgICAgICAgIERlZmluZVBhcmFtKG1NYXhJbnB1dFJlZmVyZW5jZUNvdW50LCBDMl9QQVJBTUtFWV9JTlBVVF9NQVhfUkVGRVJFTkNFX0NPVU5UKQorICAgICAgICAgICAgLndpdGhDb25zdFZhbHVlKG5ldyBDMlN0cmVhbU1heFJlZmVyZW5jZUNvdW50VHVuaW5nOjppbnB1dCgwdSkpCisgICAgICAgICAgICAuYnVpbGQoKSk7Cit9CisKK3ZvaWQgU2ltcGxlSW50ZXJmYWNlPHZvaWQ+OjpCYXNlUGFyYW1zOjpub091dHB1dFJlZmVyZW5jZXMoKSB7CisgICAgYWRkUGFyYW1ldGVyKAorICAgICAgICAgICAgRGVmaW5lUGFyYW0obU1heE91dHB1dFJlZmVyZW5jZUFnZSwgQzJfUEFSQU1LRVlfT1VUUFVUX01BWF9SRUZFUkVOQ0VfQUdFKQorICAgICAgICAgICAgLndpdGhDb25zdFZhbHVlKG5ldyBDMlN0cmVhbU1heFJlZmVyZW5jZUFnZVR1bmluZzo6b3V0cHV0KDB1KSkKKyAgICAgICAgICAgIC5idWlsZCgpKTsKKworICAgIGFkZFBhcmFtZXRlcigKKyAgICAgICAgICAgIERlZmluZVBhcmFtKG1NYXhPdXRwdXRSZWZlcmVuY2VDb3VudCwgQzJfUEFSQU1LRVlfT1VUUFVUX01BWF9SRUZFUkVOQ0VfQ09VTlQpCisgICAgICAgICAgICAud2l0aENvbnN0VmFsdWUobmV3IEMyU3RyZWFtTWF4UmVmZXJlbmNlQ291bnRUdW5pbmc6Om91dHB1dCgwdSkpCisgICAgICAgICAgICAuYnVpbGQoKSk7Cit9CisKK3ZvaWQgU2ltcGxlSW50ZXJmYWNlPHZvaWQ+OjpCYXNlUGFyYW1zOjpub1RpbWVTdHJldGNoKCkgeworICAgIGFkZFBhcmFtZXRlcigKKyAgICAgICAgICAgIERlZmluZVBhcmFtKG1UaW1lU3RyZXRjaCwgQzJfUEFSQU1LRVlfVElNRV9TVFJFVENIKQorICAgICAgICAgICAgLndpdGhDb25zdFZhbHVlKG5ldyBDMkNvbXBvbmVudFRpbWVTdHJldGNoVHVuaW5nKDEuZikpCisgICAgICAgICAgICAuYnVpbGQoKSk7Cit9CisKKy8qCisgICAgQ2xpZW50cyBuZWVkIHRvIGhhbmRsZSB0aGUgZm9sbG93aW5nIGJhc2UgcGFyYW1zIGR1ZSB0byBjdXN0b20gZGVwZW5kZW5jeS4KKworICAgIHN0ZDo6c2hhcmVkX3B0cjxDMkFwaUxldmVsU2V0dGluZz4gbUFwaUxldmVsOworICAgIHN0ZDo6c2hhcmVkX3B0cjxDMkFwaUZlYXR1cmVzU2V0dGluZz4gbUFwaUZlYXR1cmVzOworICAgIHN0ZDo6c2hhcmVkX3B0cjxDMkNvbXBvbmVudEF0dHJpYnV0ZXNTZXR0aW5nPiBtQXR0cmliOworCisgICAgc3RkOjpzaGFyZWRfcHRyPEMyUG9ydFN1Z2dlc3RlZEJ1ZmZlckNvdW50VHVuaW5nOjppbnB1dD4gbVN1Z2dlc3RlZElucHV0QnVmZmVyQ291bnQ7CisgICAgc3RkOjpzaGFyZWRfcHRyPEMyUG9ydFN1Z2dlc3RlZEJ1ZmZlckNvdW50VHVuaW5nOjpvdXRwdXQ+IG1TdWdnZXN0ZWRPdXRwdXRCdWZmZXJDb3VudDsKKworICAgIHN0ZDo6c2hhcmVkX3B0cjxDMlRyaXBwZWRUdW5pbmc+IG1UcmlwcGVkOworCisqLworCit9IC8vIG5hbWVzcGFjZSBhbmRyb2lkCmRpZmYgLS1naXQgYS9tZWRpYS9jb2RlYzIvY29tcG9uZW50cy9iYXNlL2luY2x1ZGUvU2ltcGxlQzJDb21wb25lbnQuaCBiL21lZGlhL2NvZGVjMi9jb21wb25lbnRzL2Jhc2UvaW5jbHVkZS9TaW1wbGVDMkNvbXBvbmVudC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIzYTk4ZjQKLS0tIC9kZXYvbnVsbAorKysgYi9tZWRpYS9jb2RlYzIvY29tcG9uZW50cy9iYXNlL2luY2x1ZGUvU2ltcGxlQzJDb21wb25lbnQuaApAQCAtMCwwICsxLDI0NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNyBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCisKKyNpZm5kZWYgU0lNUExFX0MyX0NPTVBPTkVOVF9IXworI2RlZmluZSBTSU1QTEVfQzJfQ09NUE9ORU5UX0hfCisKKyNpbmNsdWRlIDxsaXN0PgorI2luY2x1ZGUgPHVub3JkZXJlZF9tYXA+CisKKyNpbmNsdWRlIDxDMkNvbXBvbmVudC5oPgorCisjaW5jbHVkZSA8bWVkaWEvc3RhZ2VmcmlnaHQvZm91bmRhdGlvbi9BSGFuZGxlci5oPgorI2luY2x1ZGUgPG1lZGlhL3N0YWdlZnJpZ2h0L2ZvdW5kYXRpb24vQUxvb3Blci5oPgorI2luY2x1ZGUgPG1lZGlhL3N0YWdlZnJpZ2h0L2ZvdW5kYXRpb24vTXV0ZXhlZC5oPgorCituYW1lc3BhY2UgYW5kcm9pZCB7CisKK2NsYXNzIFNpbXBsZUMyQ29tcG9uZW50CisgICAgICAgIDogcHVibGljIEMyQ29tcG9uZW50LCBwdWJsaWMgc3RkOjplbmFibGVfc2hhcmVkX2Zyb21fdGhpczxTaW1wbGVDMkNvbXBvbmVudD4geworcHVibGljOgorICAgIGV4cGxpY2l0IFNpbXBsZUMyQ29tcG9uZW50KAorICAgICAgICAgICAgY29uc3Qgc3RkOjpzaGFyZWRfcHRyPEMyQ29tcG9uZW50SW50ZXJmYWNlPiAmaW50Zik7CisgICAgdmlydHVhbCB+U2ltcGxlQzJDb21wb25lbnQoKTsKKworICAgIC8vIEMyQ29tcG9uZW50CisgICAgLy8gRnJvbSBDMkNvbXBvbmVudAorICAgIHZpcnR1YWwgYzJfc3RhdHVzX3Qgc2V0TGlzdGVuZXJfdmIoCisgICAgICAgICAgICBjb25zdCBzdGQ6OnNoYXJlZF9wdHI8TGlzdGVuZXI+ICZsaXN0ZW5lciwgYzJfYmxvY2tpbmdfdCBtYXlCbG9jaykgb3ZlcnJpZGU7CisgICAgdmlydHVhbCBjMl9zdGF0dXNfdCBxdWV1ZV9uYihzdGQ6Omxpc3Q8c3RkOjp1bmlxdWVfcHRyPEMyV29yaz4+KiBjb25zdCBpdGVtcykgb3ZlcnJpZGU7CisgICAgdmlydHVhbCBjMl9zdGF0dXNfdCBhbm5vdW5jZV9uYihjb25zdCBzdGQ6OnZlY3RvcjxDMldvcmtPdXRsaW5lPiAmaXRlbXMpIG92ZXJyaWRlOworICAgIHZpcnR1YWwgYzJfc3RhdHVzX3QgZmx1c2hfc20oCisgICAgICAgICAgICBmbHVzaF9tb2RlX3QgbW9kZSwgc3RkOjpsaXN0PHN0ZDo6dW5pcXVlX3B0cjxDMldvcms+PiogY29uc3QgZmx1c2hlZFdvcmspIG92ZXJyaWRlOworICAgIHZpcnR1YWwgYzJfc3RhdHVzX3QgZHJhaW5fbmIoZHJhaW5fbW9kZV90IG1vZGUpIG92ZXJyaWRlOworICAgIHZpcnR1YWwgYzJfc3RhdHVzX3Qgc3RhcnQoKSBvdmVycmlkZTsKKyAgICB2aXJ0dWFsIGMyX3N0YXR1c190IHN0b3AoKSBvdmVycmlkZTsKKyAgICB2aXJ0dWFsIGMyX3N0YXR1c190IHJlc2V0KCkgb3ZlcnJpZGU7CisgICAgdmlydHVhbCBjMl9zdGF0dXNfdCByZWxlYXNlKCkgb3ZlcnJpZGU7CisgICAgdmlydHVhbCBzdGQ6OnNoYXJlZF9wdHI8QzJDb21wb25lbnRJbnRlcmZhY2U+IGludGYoKSBvdmVycmlkZTsKKworICAgIC8vIGZvciBoYW5kbGVyCisgICAgYm9vbCBwcm9jZXNzUXVldWUoKTsKKworcHJvdGVjdGVkOgorICAgIC8qKgorICAgICAqIEluaXRpYWxpemUgaW50ZXJuYWwgc3RhdGVzIG9mIHRoZSBjb21wb25lbnQgYWNjb3JkaW5nIHRvIHRoZSBjb25maWcgc2V0CisgICAgICogaW4gdGhlIGludGVyZmFjZS4KKyAgICAgKgorICAgICAqIFRoaXMgbWV0aG9kIGlzIGNhbGxlZCBkdXJpbmcgc3RhcnQoKSwgYnV0IG9ubHkgYXQgdGhlIGZpcnN0IGludm9jYXRpb24gb3IKKyAgICAgKiBhZnRlciByZXNldCgpLgorICAgICAqLworICAgIHZpcnR1YWwgYzJfc3RhdHVzX3Qgb25Jbml0KCkgPSAwOworCisgICAgLyoqCisgICAgICogU3RvcCB0aGUgY29tcG9uZW50LgorICAgICAqLworICAgIHZpcnR1YWwgYzJfc3RhdHVzX3Qgb25TdG9wKCkgPSAwOworCisgICAgLyoqCisgICAgICogUmVzZXQgdGhlIGNvbXBvbmVudC4KKyAgICAgKi8KKyAgICB2aXJ0dWFsIHZvaWQgb25SZXNldCgpID0gMDsKKworICAgIC8qKgorICAgICAqIFJlbGVhc2UgdGhlIGNvbXBvbmVudC4KKyAgICAgKi8KKyAgICB2aXJ0dWFsIHZvaWQgb25SZWxlYXNlKCkgPSAwOworCisgICAgLyoqCisgICAgICogRmx1c2ggdGhlIGNvbXBvbmVudC4KKyAgICAgKi8KKyAgICB2aXJ0dWFsIGMyX3N0YXR1c190IG9uRmx1c2hfc20oKSA9IDA7CisKKyAgICAvKioKKyAgICAgKiBQcm9jZXNzIHRoZSBnaXZlbiB3b3JrIGFuZCBmaW5pc2ggcGVuZGluZyB3b3JrIHVzaW5nIGZpbmlzaCgpLgorICAgICAqCisgICAgICogXHBhcmFtW2luLG91dF0gICB3b3JrICAgIHRoZSB3b3JrIHRvIHByb2Nlc3MKKyAgICAgKiBccGFyYW1baW5dICAgICAgIHBvb2wgICAgdGhlIHBvb2wgdG8gdXNlIGZvciBhbGxvY2F0aW5nIG91dHB1dCBibG9ja3MuCisgICAgICovCisgICAgdmlydHVhbCB2b2lkIHByb2Nlc3MoCisgICAgICAgICAgICBjb25zdCBzdGQ6OnVuaXF1ZV9wdHI8QzJXb3JrPiAmd29yaywKKyAgICAgICAgICAgIGNvbnN0IHN0ZDo6c2hhcmVkX3B0cjxDMkJsb2NrUG9vbD4gJnBvb2wpID0gMDsKKworICAgIC8qKgorICAgICAqIERyYWluIHRoZSBjb21wb25lbnQgYW5kIGZpbmlzaCBwZW5kaW5nIHdvcmsgdXNpbmcgZmluaXNoKCkuCisgICAgICoKKyAgICAgKiBccGFyYW1baW5dICAgZHJhaW5Nb2RlICAgbW9kZSBvZiBkcmFpbi4KKyAgICAgKiBccGFyYW1baW5dICAgcG9vbCAgICAgICAgdGhlIHBvb2wgdG8gdXNlIGZvciBhbGxvY2F0aW5nIG91dHB1dCBibG9ja3MuCisgICAgICoKKyAgICAgKiBccmV0dmFsIEMyX09LICAgICAgICAgICAgVGhlIGNvbXBvbmVudCBoYXMgZHJhaW5lZCBhbGwgcGVuZGluZyBvdXRwdXQKKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgd29yay4KKyAgICAgKiBccmV0dmFsIEMyX09NSVRURUQgICAgICAgVW5zdXBwb3J0ZWQgbW9kZSAoZS5nLiBEUkFJTl9DSEFJTikKKyAgICAgKi8KKyAgICB2aXJ0dWFsIGMyX3N0YXR1c190IGRyYWluKAorICAgICAgICAgICAgdWludDMyX3QgZHJhaW5Nb2RlLAorICAgICAgICAgICAgY29uc3Qgc3RkOjpzaGFyZWRfcHRyPEMyQmxvY2tQb29sPiAmcG9vbCkgPSAwOworCisgICAgLy8gZm9yIGRlcml2ZWQgY2xhc3NlcworICAgIC8qKgorICAgICAqIEZpbmlzaCBwZW5kaW5nIHdvcmsuCisgICAgICoKKyAgICAgKiBUaGlzIG1ldGhvZCB3aWxsIHJldHJpZXZlIHRoZSBwZW5kaW5nIHdvcmsgYWNjb3JkaW5nIHRvIHxmcmFtZUluZGV4fCBhbmQKKyAgICAgKiBmZWVkIHRoZSB3b3JrIGludG8gfGZpbGxXb3JrfCBmdW5jdGlvbi4gfGZpbGxXb3JrfCBtdXN0IGJlCisgICAgICogIm5vbi1ibG9ja2luZyIuIE9uY2UgfGZpbGxXb3JrfCByZXR1cm5zIHRoZSBmaWxsZWQgd29yayB3aWxsIGJlIHJldHVybmVkCisgICAgICogdG8gdGhlIGNsaWVudC4KKyAgICAgKgorICAgICAqIFxwYXJhbVtpbl0gICBmcmFtZUluZGV4ICAgIHRoZSBpbmRleCBvZiB0aGUgcGVuZGluZyB3b3JrCisgICAgICogXHBhcmFtW2luXSAgIGZpbGxXb3JrICAgICAgdGhlIGZ1bmN0aW9uIHRvIGZpbGwgdGhlIHJldHJpZXZlZCB3b3JrLgorICAgICAqLworICAgIHZvaWQgZmluaXNoKHVpbnQ2NF90IGZyYW1lSW5kZXgsIHN0ZDo6ZnVuY3Rpb248dm9pZChjb25zdCBzdGQ6OnVuaXF1ZV9wdHI8QzJXb3JrPiAmKT4gZmlsbFdvcmspOworCisgICAgLyoqCisgICAgICogQ2xvbmUgcGVuZGluZyBvciBjdXJyZW50IHdvcmsgYW5kIHNlbmQgdGhlIHdvcmsgYmFjayB0byBjbGllbnQuCisgICAgICoKKyAgICAgKiBUaGlzIG1ldGhvZCB3aWxsIHJldHJpZXZlIGFuZCBjbG9uZSB0aGUgcGVuZGluZyBvciBjdXJyZW50IHdvcmsgYWNjb3JkaW5nCisgICAgICogdG8gfGZyYW1lSW5kZXh8IGFuZCBmZWVkIHRoZSB3b3JrIGludG8gfGZpbGxXb3JrfCBmdW5jdGlvbi4gfGZpbGxXb3JrfAorICAgICAqIG11c3QgYmUgIm5vbi1ibG9ja2luZyIuIE9uY2UgfGZpbGxXb3JrfCByZXR1cm5zIHRoZSBmaWxsZWQgd29yayB3aWxsIGJlCisgICAgICogcmV0dXJuZWQgdG8gdGhlIGNsaWVudC4KKyAgICAgKgorICAgICAqIFxwYXJhbVtpbl0gICBmcmFtZUluZGV4ICAgIHRoZSBpbmRleCBvZiB0aGUgd29yaworICAgICAqIFxwYXJhbVtpbl0gICBjdXJyZW50V29yayAgIHRoZSBjdXJyZW50IHdvcmsgdW5kZXIgcHJvY2Vzc2luZworICAgICAqIFxwYXJhbVtpbl0gICBmaWxsV29yayAgICAgIHRoZSBmdW5jdGlvbiB0byBmaWxsIHRoZSByZXRyaWV2ZWQgd29yay4KKyAgICAgKi8KKyAgICB2b2lkIGNsb25lQW5kU2VuZCgKKyAgICAgICAgICAgIHVpbnQ2NF90IGZyYW1lSW5kZXgsCisgICAgICAgICAgICBjb25zdCBzdGQ6OnVuaXF1ZV9wdHI8QzJXb3JrPiAmY3VycmVudFdvcmssCisgICAgICAgICAgICBzdGQ6OmZ1bmN0aW9uPHZvaWQoY29uc3Qgc3RkOjp1bmlxdWVfcHRyPEMyV29yaz4gJik+IGZpbGxXb3JrKTsKKworCisgICAgc3RkOjpzaGFyZWRfcHRyPEMyQnVmZmVyPiBjcmVhdGVMaW5lYXJCdWZmZXIoCisgICAgICAgICAgICBjb25zdCBzdGQ6OnNoYXJlZF9wdHI8QzJMaW5lYXJCbG9jaz4gJmJsb2NrKTsKKworICAgIHN0ZDo6c2hhcmVkX3B0cjxDMkJ1ZmZlcj4gY3JlYXRlTGluZWFyQnVmZmVyKAorICAgICAgICAgICAgY29uc3Qgc3RkOjpzaGFyZWRfcHRyPEMyTGluZWFyQmxvY2s+ICZibG9jaywgc2l6ZV90IG9mZnNldCwgc2l6ZV90IHNpemUpOworCisgICAgc3RkOjpzaGFyZWRfcHRyPEMyQnVmZmVyPiBjcmVhdGVHcmFwaGljQnVmZmVyKAorICAgICAgICAgICAgY29uc3Qgc3RkOjpzaGFyZWRfcHRyPEMyR3JhcGhpY0Jsb2NrPiAmYmxvY2spOworCisgICAgc3RkOjpzaGFyZWRfcHRyPEMyQnVmZmVyPiBjcmVhdGVHcmFwaGljQnVmZmVyKAorICAgICAgICAgICAgY29uc3Qgc3RkOjpzaGFyZWRfcHRyPEMyR3JhcGhpY0Jsb2NrPiAmYmxvY2ssCisgICAgICAgICAgICBjb25zdCBDMlJlY3QgJmNyb3ApOworCisgICAgc3RhdGljIGNvbnN0ZXhwciB1aW50MzJfdCBOT19EUkFJTiA9IH4wdTsKKworICAgIEMyUmVhZFZpZXcgbUR1bW15UmVhZFZpZXc7CisKK3ByaXZhdGU6CisgICAgY29uc3Qgc3RkOjpzaGFyZWRfcHRyPEMyQ29tcG9uZW50SW50ZXJmYWNlPiBtSW50ZjsKKworICAgIGNsYXNzIFdvcmtIYW5kbGVyIDogcHVibGljIEFIYW5kbGVyIHsKKyAgICBwdWJsaWM6CisgICAgICAgIGVudW0geworICAgICAgICAgICAga1doYXRQcm9jZXNzLAorICAgICAgICAgICAga1doYXRJbml0LAorICAgICAgICAgICAga1doYXRTdGFydCwKKyAgICAgICAgICAgIGtXaGF0U3RvcCwKKyAgICAgICAgICAgIGtXaGF0UmVzZXQsCisgICAgICAgICAgICBrV2hhdFJlbGVhc2UsCisgICAgICAgIH07CisKKyAgICAgICAgV29ya0hhbmRsZXIoKTsKKyAgICAgICAgfldvcmtIYW5kbGVyKCkgb3ZlcnJpZGUgPSBkZWZhdWx0OworCisgICAgICAgIHZvaWQgc2V0Q29tcG9uZW50KGNvbnN0IHN0ZDo6c2hhcmVkX3B0cjxTaW1wbGVDMkNvbXBvbmVudD4gJnRoaXopOworCisgICAgcHJvdGVjdGVkOgorICAgICAgICB2b2lkIG9uTWVzc2FnZVJlY2VpdmVkKGNvbnN0IHNwPEFNZXNzYWdlPiAmbXNnKSBvdmVycmlkZTsKKworICAgIHByaXZhdGU6CisgICAgICAgIHN0ZDo6d2Vha19wdHI8U2ltcGxlQzJDb21wb25lbnQ+IG1UaGl6OworICAgICAgICBib29sIG1SdW5uaW5nOworICAgIH07CisKKyAgICBlbnVtIHsKKyAgICAgICAgVU5JTklUSUFMSVpFRCwKKyAgICAgICAgU1RPUFBFRCwKKyAgICAgICAgUlVOTklORywKKyAgICB9OworCisgICAgc3RydWN0IEV4ZWNTdGF0ZSB7CisgICAgICAgIEV4ZWNTdGF0ZSgpIDogbVN0YXRlKFVOSU5JVElBTElaRUQpIHt9CisKKyAgICAgICAgaW50IG1TdGF0ZTsKKyAgICAgICAgc3RkOjpzaGFyZWRfcHRyPEMyQ29tcG9uZW50OjpMaXN0ZW5lcj4gbUxpc3RlbmVyOworICAgIH07CisgICAgTXV0ZXhlZDxFeGVjU3RhdGU+IG1FeGVjU3RhdGU7CisKKyAgICBzcDxBTG9vcGVyPiBtTG9vcGVyOworICAgIHNwPFdvcmtIYW5kbGVyPiBtSGFuZGxlcjsKKworICAgIGNsYXNzIFdvcmtRdWV1ZSB7CisgICAgcHVibGljOgorICAgICAgICBpbmxpbmUgV29ya1F1ZXVlKCkgOiBtRmx1c2goZmFsc2UpLCBtR2VuZXJhdGlvbigwdWwpIHt9CisKKyAgICAgICAgaW5saW5lIHVpbnQ2NF90IGdlbmVyYXRpb24oKSBjb25zdCB7IHJldHVybiBtR2VuZXJhdGlvbjsgfQorICAgICAgICBpbmxpbmUgdm9pZCBpbmNHZW5lcmF0aW9uKCkgeyArK21HZW5lcmF0aW9uOyBtRmx1c2ggPSB0cnVlOyB9CisKKyAgICAgICAgc3RkOjp1bmlxdWVfcHRyPEMyV29yaz4gcG9wX2Zyb250KCk7CisgICAgICAgIHZvaWQgcHVzaF9iYWNrKHN0ZDo6dW5pcXVlX3B0cjxDMldvcms+IHdvcmspOworICAgICAgICBib29sIGVtcHR5KCkgY29uc3Q7CisgICAgICAgIHVpbnQzMl90IGRyYWluTW9kZSgpIGNvbnN0OworICAgICAgICB2b2lkIG1hcmtEcmFpbih1aW50MzJfdCBkcmFpbk1vZGUpOworICAgICAgICBpbmxpbmUgYm9vbCBwb3BQZW5kaW5nRmx1c2goKSB7CisgICAgICAgICAgICBib29sIGZsdXNoID0gbUZsdXNoOworICAgICAgICAgICAgbUZsdXNoID0gZmFsc2U7CisgICAgICAgICAgICByZXR1cm4gZmx1c2g7CisgICAgICAgIH0KKyAgICAgICAgdm9pZCBjbGVhcigpOworCisgICAgcHJpdmF0ZToKKyAgICAgICAgc3RydWN0IEVudHJ5IHsKKyAgICAgICAgICAgIHN0ZDo6dW5pcXVlX3B0cjxDMldvcms+IHdvcms7CisgICAgICAgICAgICB1aW50MzJfdCBkcmFpbk1vZGU7CisgICAgICAgIH07CisKKyAgICAgICAgYm9vbCBtRmx1c2g7CisgICAgICAgIHVpbnQ2NF90IG1HZW5lcmF0aW9uOworICAgICAgICBzdGQ6Omxpc3Q8RW50cnk+IG1RdWV1ZTsKKyAgICB9OworICAgIE11dGV4ZWQ8V29ya1F1ZXVlPiBtV29ya1F1ZXVlOworCisgICAgdHlwZWRlZiBzdGQ6OnVub3JkZXJlZF9tYXA8dWludDY0X3QsIHN0ZDo6dW5pcXVlX3B0cjxDMldvcms+PiBQZW5kaW5nV29yazsKKyAgICBNdXRleGVkPFBlbmRpbmdXb3JrPiBtUGVuZGluZ1dvcms7CisKKyAgICBzdGQ6OnNoYXJlZF9wdHI8QzJCbG9ja1Bvb2w+IG1PdXRwdXRCbG9ja1Bvb2w7CisKKyAgICBTaW1wbGVDMkNvbXBvbmVudCgpID0gZGVsZXRlOworfTsKKworfSAgLy8gbmFtZXNwYWNlIGFuZHJvaWQKKworI2VuZGlmICAvLyBTSU1QTEVfQzJfQ09NUE9ORU5UX0hfCmRpZmYgLS1naXQgYS9tZWRpYS9jb2RlYzIvY29tcG9uZW50cy9iYXNlL2luY2x1ZGUvU2ltcGxlQzJJbnRlcmZhY2UuaCBiL21lZGlhL2NvZGVjMi9jb21wb25lbnRzL2Jhc2UvaW5jbHVkZS9TaW1wbGVDMkludGVyZmFjZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIwNTFkM2QKLS0tIC9kZXYvbnVsbAorKysgYi9tZWRpYS9jb2RlYzIvY29tcG9uZW50cy9iYXNlL2luY2x1ZGUvU2ltcGxlQzJJbnRlcmZhY2UuaApAQCAtMCwwICsxLDIzNiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxOCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCisKKyNpZm5kZWYgQU5EUk9JRF9TSU1QTEVfQzJfSU5URVJGQUNFX0hfCisjZGVmaW5lIEFORFJPSURfU0lNUExFX0MyX0lOVEVSRkFDRV9IXworCisjaW5jbHVkZSA8QzJDb21wb25lbnQuaD4KKyNpbmNsdWRlIDxDMkNvbmZpZy5oPgorI2luY2x1ZGUgPHV0aWwvQzJJbnRlcmZhY2VIZWxwZXIuaD4KKworbmFtZXNwYWNlIGFuZHJvaWQgeworCisvKioKKyAqIFdyYXAgYSBjb21tb24gaW50ZXJmYWNlIG9iamVjdCAoc3VjaCBhcyBDb2RlYzJDbGllbnQ6OkludGVyZmFjZSwgb3IgQzJJbnRlcmZhY2VIZWxwZXIgaW50bworICogYSBDMkNvbXBvbmVudEludGVyZmFjZS4KKyAqCisgKiBccGFyYW0gVCBjb21tb24gaW50ZXJmYWNlIHR5cGUKKyAqLwordGVtcGxhdGUgPHR5cGVuYW1lIFQ+CitjbGFzcyBTaW1wbGVDMkludGVyZmFjZSA6IHB1YmxpYyBDMkNvbXBvbmVudEludGVyZmFjZSB7CitwdWJsaWM6CisgICAgU2ltcGxlQzJJbnRlcmZhY2UoY29uc3QgY2hhciAqbmFtZSwgYzJfbm9kZV9pZF90IGlkLCBjb25zdCBzdGQ6OnNoYXJlZF9wdHI8VD4gJmltcGwpCisgICAgICAgIDogbU5hbWUobmFtZSksCisgICAgICAgICAgbUlkKGlkKSwKKyAgICAgICAgICBtSW1wbChpbXBsKSB7CisgICAgfQorCisgICAgflNpbXBsZUMySW50ZXJmYWNlKCkgb3ZlcnJpZGUgPSBkZWZhdWx0OworCisgICAgLy8gRnJvbSBDMkNvbXBvbmVudEludGVyZmFjZQorICAgIEMyU3RyaW5nIGdldE5hbWUoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBtTmFtZTsgfQorICAgIGMyX25vZGVfaWRfdCBnZXRJZCgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIG1JZDsgfQorICAgIGMyX3N0YXR1c190IHF1ZXJ5X3ZiKAorICAgICAgICAgICAgY29uc3Qgc3RkOjp2ZWN0b3I8QzJQYXJhbSo+ICZzdGFja1BhcmFtcywKKyAgICAgICAgICAgIGNvbnN0IHN0ZDo6dmVjdG9yPEMyUGFyYW06OkluZGV4PiAmaGVhcFBhcmFtSW5kaWNlcywKKyAgICAgICAgICAgIGMyX2Jsb2NraW5nX3QgbWF5QmxvY2ssCisgICAgICAgICAgICBzdGQ6OnZlY3RvcjxzdGQ6OnVuaXF1ZV9wdHI8QzJQYXJhbT4+KiBjb25zdCBoZWFwUGFyYW1zKSBjb25zdCBvdmVycmlkZSB7CisgICAgICAgIHJldHVybiBtSW1wbC0+cXVlcnkoc3RhY2tQYXJhbXMsIGhlYXBQYXJhbUluZGljZXMsIG1heUJsb2NrLCBoZWFwUGFyYW1zKTsKKyAgICB9CisgICAgYzJfc3RhdHVzX3QgY29uZmlnX3ZiKAorICAgICAgICAgICAgY29uc3Qgc3RkOjp2ZWN0b3I8QzJQYXJhbSo+ICZwYXJhbXMsCisgICAgICAgICAgICBjMl9ibG9ja2luZ190IG1heUJsb2NrLAorICAgICAgICAgICAgc3RkOjp2ZWN0b3I8c3RkOjp1bmlxdWVfcHRyPEMyU2V0dGluZ1Jlc3VsdD4+KiBjb25zdCBmYWlsdXJlcykgb3ZlcnJpZGUgeworICAgICAgICByZXR1cm4gbUltcGwtPmNvbmZpZyhwYXJhbXMsIG1heUJsb2NrLCBmYWlsdXJlcyk7CisgICAgfQorICAgIGMyX3N0YXR1c190IGNyZWF0ZVR1bm5lbF9zbShjMl9ub2RlX2lkX3QpIG92ZXJyaWRlIHsgcmV0dXJuIEMyX09NSVRURUQ7IH0KKyAgICBjMl9zdGF0dXNfdCByZWxlYXNlVHVubmVsX3NtKGMyX25vZGVfaWRfdCkgb3ZlcnJpZGUgeyByZXR1cm4gQzJfT01JVFRFRDsgfQorICAgIGMyX3N0YXR1c190IHF1ZXJ5U3VwcG9ydGVkUGFyYW1zX25iKAorICAgICAgICAgICAgc3RkOjp2ZWN0b3I8c3RkOjpzaGFyZWRfcHRyPEMyUGFyYW1EZXNjcmlwdG9yPj4gKiBjb25zdCBwYXJhbXMpIGNvbnN0IG92ZXJyaWRlIHsKKyAgICAgICAgcmV0dXJuIG1JbXBsLT5xdWVyeVN1cHBvcnRlZFBhcmFtcyhwYXJhbXMpOworICAgIH0KKyAgICBjMl9zdGF0dXNfdCBxdWVyeVN1cHBvcnRlZFZhbHVlc192YigKKyAgICAgICAgICAgIHN0ZDo6dmVjdG9yPEMyRmllbGRTdXBwb3J0ZWRWYWx1ZXNRdWVyeT4gJmZpZWxkcywKKyAgICAgICAgICAgIGMyX2Jsb2NraW5nX3QgbWF5QmxvY2spIGNvbnN0IG92ZXJyaWRlIHsKKyAgICAgICAgcmV0dXJuIG1JbXBsLT5xdWVyeVN1cHBvcnRlZFZhbHVlcyhmaWVsZHMsIG1heUJsb2NrKTsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgQzJTdHJpbmcgbU5hbWU7CisgICAgY29uc3QgYzJfbm9kZV9pZF90IG1JZDsKKyAgICBjb25zdCBzdGQ6OnNoYXJlZF9wdHI8VD4gbUltcGw7Cit9OworCisvKioKKyAqIFV0aWxpdHkgY2xhc3NlcyBmb3IgY29tbW9uIGludGVyZmFjZXMuCisgKi8KK3RlbXBsYXRlPD4KK2NsYXNzIFNpbXBsZUMySW50ZXJmYWNlPHZvaWQ+IHsKK3B1YmxpYzoKKyAgICAvKioKKyAgICAgKiBCYXNlIENvZGVjIDIuMCBwYXJhbWV0ZXJzIHJlcXVpcmVkIGZvciBhbGwgY29tcG9uZW50cy4KKyAgICAgKi8KKyAgICBzdHJ1Y3QgQmFzZVBhcmFtcyA6IEMySW50ZXJmYWNlSGVscGVyIHsKKyAgICAgICAgZXhwbGljaXQgQmFzZVBhcmFtcygKKyAgICAgICAgICAgICAgICBjb25zdCBzdGQ6OnNoYXJlZF9wdHI8QzJSZWZsZWN0b3JIZWxwZXI+ICZoZWxwZXIsCisgICAgICAgICAgICAgICAgQzJTdHJpbmcgbmFtZSwKKyAgICAgICAgICAgICAgICBDMkNvbXBvbmVudDo6a2luZF90IGtpbmQsCisgICAgICAgICAgICAgICAgQzJDb21wb25lbnQ6OmRvbWFpbl90IGRvbWFpbiwKKyAgICAgICAgICAgICAgICBDMlN0cmluZyBtZWRpYVR5cGUsCisgICAgICAgICAgICAgICAgc3RkOjp2ZWN0b3I8QzJTdHJpbmc+IGFsaWFzZXMgPSBzdGQ6OnZlY3RvcjxDMlN0cmluZz4oKSk7CisKKyAgICAgICAgLy8vIE1hcmtzIHRoYXQgdGhpcyBjb21wb25lbnQgaGFzIG5vIGlucHV0IGxhdGVuY3kuIE90aGVyd2lzZSwgY29tcG9uZW50IG11c3QKKyAgICAgICAgLy8vIGFkZCBzdXBwb3J0IGZvciBDMlBvcnRSZXF1ZXN0ZWREZWxheVR1bmluZzo6aW5wdXQgYW5kIEMyUG9ydEFjdHVhbERlbGF5VHVuaW5nOjppbnB1dC4KKyAgICAgICAgdm9pZCBub0lucHV0TGF0ZW5jeSgpOworCisgICAgICAgIC8vLyBNYXJrcyB0aGF0IHRoaXMgY29tcG9uZW50IGhhcyBubyBvdXRwdXQgbGF0ZW5jeS4gT3RoZXJ3aXNlLCBjb21wb25lbnQgbXVzdAorICAgICAgICAvLy8gYWRkIHN1cHBvcnQgZm9yIEMyUG9ydFJlcXVlc3RlZERlbGF5VHVuaW5nOjpvdXRwdXQgYW5kIEMyUG9ydEFjdHVhbERlbGF5VHVuaW5nOjpvdXRwdXQuCisgICAgICAgIHZvaWQgbm9PdXRwdXRMYXRlbmN5KCk7CisKKyAgICAgICAgLy8vIE1hcmtzIHRoYXQgdGhpcyBjb21wb25lbnQgaGFzIG5vIHBpcGVsaW5lIGxhdGVuY3kuIE90aGVyd2lzZSwgY29tcG9uZW50IG11c3QKKyAgICAgICAgLy8vIGFkZCBzdXBwb3J0IGZvciBDMlJlcXVlc3RlZFBpcGVsaW5lRGVsYXlUdW5pbmcgYW5kIEMyQWN0dWFsUGlwZWxpbmVEZWxheVR1bmluZy4KKyAgICAgICAgdm9pZCBub1BpcGVsaW5lTGF0ZW5jeSgpOworCisgICAgICAgIC8vLyBNYXJrcyB0aGF0IHRoaXMgY29tcG9uZW50IGhhcyBubyBuZWVkIGZvciBwcml2YXRlIGJ1ZmZlcnMuIE90aGVyd2lzZSwgY29tcG9uZW50IG11c3QKKyAgICAgICAgLy8vIGFkZCBzdXBwb3J0IGZvciBDMk1heFByaXZhdGVCdWZmZXJDb3VudFR1bmluZywgQzJQcml2YXRlQWxsb2NhdG9yc1R1bmluZyBhbmQKKyAgICAgICAgLy8vIEMyUHJpdmF0ZUJsb2NrUG9vbHNUdW5pbmcuCisgICAgICAgIHZvaWQgbm9Qcml2YXRlQnVmZmVycygpOworCisgICAgICAgIC8vLyBNYXJrcyB0aGF0IHRoaXMgY29tcG9uZW50IGhvbGRzIG5vIHJlZmVyZW5jZXMgdG8gaW5wdXQgYnVmZmVycy4gT3RoZXJ3aXNlLCBjb21wb25lbnQKKyAgICAgICAgLy8vIG11c3QgYWRkIHN1cHBvcnQgZm9yIEMyU3RyZWFtTWF4UmVmZXJlbmNlQWdlVHVuaW5nOjppbnB1dCBhbmQKKyAgICAgICAgLy8vIEMyU3RyZWFtTWF4UmVmZXJlbmNlQ291bnRUdW5pbmc6OmlucHV0LgorICAgICAgICB2b2lkIG5vSW5wdXRSZWZlcmVuY2VzKCk7CisKKyAgICAgICAgLy8vIE1hcmtzIHRoYXQgdGhpcyBjb21wb25lbnQgaG9sZHMgbm8gcmVmZXJlbmNlcyB0byBvdXRwdXQgYnVmZmVycy4gT3RoZXJ3aXNlLCBjb21wb25lbnQKKyAgICAgICAgLy8vIG11c3QgYWRkIHN1cHBvcnQgZm9yIEMyU3RyZWFtTWF4UmVmZXJlbmNlQWdlVHVuaW5nOjpvdXRwdXQgYW5kCisgICAgICAgIC8vLyBDMlN0cmVhbU1heFJlZmVyZW5jZUNvdW50VHVuaW5nOjpvdXRwdXQuCisgICAgICAgIHZvaWQgbm9PdXRwdXRSZWZlcmVuY2VzKCk7CisKKyAgICAgICAgLy8vIE1hcmtzIHRoYXQgdGhpcyBjb21wb25lbnQgZG9lcyBub3Qgc3RyZXRjaCB0aW1lLiBPdGhlcndpc2UsIGNvbXBvbmVudAorICAgICAgICAvLy8gbXVzdCBhZGQgc3VwcG9ydCBmb3IgQzJDb21wb25lbnRUaW1lU3RyZXRjaFR1bmluZy4KKyAgICAgICAgdm9pZCBub1RpbWVTdHJldGNoKCk7CisKKyAgICAgICAgc3RkOjpzaGFyZWRfcHRyPEMyQXBpTGV2ZWxTZXR0aW5nPiBtQXBpTGV2ZWw7CisgICAgICAgIHN0ZDo6c2hhcmVkX3B0cjxDMkFwaUZlYXR1cmVzU2V0dGluZz4gbUFwaUZlYXR1cmVzOworCisgICAgICAgIHN0ZDo6c2hhcmVkX3B0cjxDMlBsYXRmb3JtTGV2ZWxTZXR0aW5nPiBtUGxhdGZvcm1MZXZlbDsKKyAgICAgICAgc3RkOjpzaGFyZWRfcHRyPEMyUGxhdGZvcm1GZWF0dXJlc1NldHRpbmc+IG1QbGF0Zm9ybUZlYXR1cmVzOworCisgICAgICAgIHN0ZDo6c2hhcmVkX3B0cjxDMkNvbXBvbmVudE5hbWVTZXR0aW5nPiBtTmFtZTsKKyAgICAgICAgc3RkOjpzaGFyZWRfcHRyPEMyQ29tcG9uZW50QWxpYXNlc1NldHRpbmc+IG1BbGlhc2VzOworICAgICAgICBzdGQ6OnNoYXJlZF9wdHI8QzJDb21wb25lbnRLaW5kU2V0dGluZz4gbUtpbmQ7CisgICAgICAgIHN0ZDo6c2hhcmVkX3B0cjxDMkNvbXBvbmVudERvbWFpblNldHRpbmc+IG1Eb21haW47CisgICAgICAgIHN0ZDo6c2hhcmVkX3B0cjxDMkNvbXBvbmVudEF0dHJpYnV0ZXNTZXR0aW5nPiBtQXR0cmliOworICAgICAgICBzdGQ6OnNoYXJlZF9wdHI8QzJDb21wb25lbnRUaW1lU3RyZXRjaFR1bmluZz4gbVRpbWVTdHJldGNoOworCisgICAgICAgIHN0ZDo6c2hhcmVkX3B0cjxDMlBvcnRNZWRpYVR5cGVTZXR0aW5nOjppbnB1dD4gbUlucHV0TWVkaWFUeXBlOworICAgICAgICBzdGQ6OnNoYXJlZF9wdHI8QzJQb3J0TWVkaWFUeXBlU2V0dGluZzo6b3V0cHV0PiBtT3V0cHV0TWVkaWFUeXBlOworICAgICAgICBzdGQ6OnNoYXJlZF9wdHI8QzJTdHJlYW1CdWZmZXJUeXBlU2V0dGluZzo6aW5wdXQ+IG1JbnB1dEZvcm1hdDsKKyAgICAgICAgc3RkOjpzaGFyZWRfcHRyPEMyU3RyZWFtQnVmZmVyVHlwZVNldHRpbmc6Om91dHB1dD4gbU91dHB1dEZvcm1hdDsKKworICAgICAgICBzdGQ6OnNoYXJlZF9wdHI8QzJQb3J0UmVxdWVzdGVkRGVsYXlUdW5pbmc6OmlucHV0PiBtUmVxdWVzdGVkSW5wdXREZWxheTsKKyAgICAgICAgc3RkOjpzaGFyZWRfcHRyPEMyUG9ydFJlcXVlc3RlZERlbGF5VHVuaW5nOjpvdXRwdXQ+IG1SZXF1ZXN0ZWRPdXRwdXREZWxheTsKKyAgICAgICAgc3RkOjpzaGFyZWRfcHRyPEMyUmVxdWVzdGVkUGlwZWxpbmVEZWxheVR1bmluZz4gbVJlcXVlc3RlZFBpcGVsaW5lRGVsYXk7CisKKyAgICAgICAgc3RkOjpzaGFyZWRfcHRyPEMyUG9ydEFjdHVhbERlbGF5VHVuaW5nOjppbnB1dD4gbUFjdHVhbElucHV0RGVsYXk7CisgICAgICAgIHN0ZDo6c2hhcmVkX3B0cjxDMlBvcnRBY3R1YWxEZWxheVR1bmluZzo6b3V0cHV0PiBtQWN0dWFsT3V0cHV0RGVsYXk7CisgICAgICAgIHN0ZDo6c2hhcmVkX3B0cjxDMkFjdHVhbFBpcGVsaW5lRGVsYXlUdW5pbmc+IG1BY3R1YWxQaXBlbGluZURlbGF5OworCisgICAgICAgIHN0ZDo6c2hhcmVkX3B0cjxDMlN0cmVhbU1heFJlZmVyZW5jZUFnZVR1bmluZzo6aW5wdXQ+IG1NYXhJbnB1dFJlZmVyZW5jZUFnZTsKKyAgICAgICAgc3RkOjpzaGFyZWRfcHRyPEMyU3RyZWFtTWF4UmVmZXJlbmNlQ291bnRUdW5pbmc6OmlucHV0PiBtTWF4SW5wdXRSZWZlcmVuY2VDb3VudDsKKyAgICAgICAgc3RkOjpzaGFyZWRfcHRyPEMyU3RyZWFtTWF4UmVmZXJlbmNlQWdlVHVuaW5nOjpvdXRwdXQ+IG1NYXhPdXRwdXRSZWZlcmVuY2VBZ2U7CisgICAgICAgIHN0ZDo6c2hhcmVkX3B0cjxDMlN0cmVhbU1heFJlZmVyZW5jZUNvdW50VHVuaW5nOjpvdXRwdXQ+IG1NYXhPdXRwdXRSZWZlcmVuY2VDb3VudDsKKyAgICAgICAgc3RkOjpzaGFyZWRfcHRyPEMyTWF4UHJpdmF0ZUJ1ZmZlckNvdW50VHVuaW5nPiBtTWF4UHJpdmF0ZUJ1ZmZlckNvdW50OworCisgICAgICAgIHN0ZDo6c2hhcmVkX3B0cjxDMlBvcnRTdHJlYW1Db3VudFR1bmluZzo6aW5wdXQ+IG1JbnB1dFN0cmVhbUNvdW50OworICAgICAgICBzdGQ6OnNoYXJlZF9wdHI8QzJQb3J0U3RyZWFtQ291bnRUdW5pbmc6Om91dHB1dD4gbU91dHB1dFN0cmVhbUNvdW50OworCisgICAgICAgIHN0ZDo6c2hhcmVkX3B0cjxDMlN1YnNjcmliZWRQYXJhbUluZGljZXNUdW5pbmc+IG1TdWJzY3JpYmVkUGFyYW1JbmRpY2VzOworICAgICAgICBzdGQ6OnNoYXJlZF9wdHI8QzJQb3J0U3VnZ2VzdGVkQnVmZmVyQ291bnRUdW5pbmc6OmlucHV0PiBtU3VnZ2VzdGVkSW5wdXRCdWZmZXJDb3VudDsKKyAgICAgICAgc3RkOjpzaGFyZWRfcHRyPEMyUG9ydFN1Z2dlc3RlZEJ1ZmZlckNvdW50VHVuaW5nOjpvdXRwdXQ+IG1TdWdnZXN0ZWRPdXRwdXRCdWZmZXJDb3VudDsKKworICAgICAgICBzdGQ6OnNoYXJlZF9wdHI8QzJDdXJyZW50V29ya1R1bmluZz4gbUN1cnJlbnRXb3JrT3JkaW5hbDsKKyAgICAgICAgc3RkOjpzaGFyZWRfcHRyPEMyTGFzdFdvcmtRdWV1ZWRUdW5pbmc6OmlucHV0PiBtTGFzdElucHV0UXVldWVkV29ya09yZGluYWw7CisgICAgICAgIHN0ZDo6c2hhcmVkX3B0cjxDMkxhc3RXb3JrUXVldWVkVHVuaW5nOjpvdXRwdXQ+IG1MYXN0T3V0cHV0UXVldWVkV29ya09yZGluYWw7CisKKyAgICAgICAgc3RkOjpzaGFyZWRfcHRyPEMyUG9ydEFsbG9jYXRvcnNUdW5pbmc6OmlucHV0PiBtSW5wdXRBbGxvY2F0b3JzOworICAgICAgICBzdGQ6OnNoYXJlZF9wdHI8QzJQb3J0QWxsb2NhdG9yc1R1bmluZzo6b3V0cHV0PiBtT3V0cHV0QWxsb2NhdG9yczsKKyAgICAgICAgc3RkOjpzaGFyZWRfcHRyPEMyUHJpdmF0ZUFsbG9jYXRvcnNUdW5pbmc+IG1Qcml2YXRlQWxsb2NhdG9yczsKKyAgICAgICAgc3RkOjpzaGFyZWRfcHRyPEMyUG9ydEJsb2NrUG9vbHNUdW5pbmc6Om91dHB1dD4gbU91dHB1dFBvb2xJZHM7CisgICAgICAgIHN0ZDo6c2hhcmVkX3B0cjxDMlByaXZhdGVCbG9ja1Bvb2xzVHVuaW5nPiBtUHJpdmF0ZVBvb2xJZHM7CisKKyAgICAgICAgc3RkOjpzaGFyZWRfcHRyPEMyVHJpcHBlZFR1bmluZz4gbVRyaXBwZWQ7CisgICAgICAgIHN0ZDo6c2hhcmVkX3B0cjxDMk91dE9mTWVtb3J5VHVuaW5nPiBtT3V0T2ZNZW1vcnk7CisKKyAgICAgICAgc3RkOjpzaGFyZWRfcHRyPEMyUG9ydENvbmZpZ0NvdW50ZXJUdW5pbmc6OmlucHV0PiBtSW5wdXRDb25maWdDb3VudGVyOworICAgICAgICBzdGQ6OnNoYXJlZF9wdHI8QzJQb3J0Q29uZmlnQ291bnRlclR1bmluZzo6b3V0cHV0PiBtT3V0cHV0Q29uZmlnQ291bnRlcjsKKyAgICAgICAgc3RkOjpzaGFyZWRfcHRyPEMyQ29uZmlnQ291bnRlclR1bmluZz4gbURpcmVjdENvbmZpZ0NvdW50ZXI7CisgICAgfTsKK307CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+Cit1c2luZyBTaW1wbGVJbnRlcmZhY2UgPSBTaW1wbGVDMkludGVyZmFjZTxUPjsKKwordGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgLi4uQXJncz4KK3N0ZDo6c2hhcmVkX3B0cjxUPiBBbGxvY1NoYXJlZFN0cmluZyhjb25zdCBBcmdzKCYuLi4gYXJncyksIGNvbnN0IGNoYXIgKnN0cikgeworICAgIHNpemVfdCBsZW4gPSBzdHJsZW4oc3RyKSArIDE7CisgICAgc3RkOjpzaGFyZWRfcHRyPFQ+IHJldCA9IFQ6OkFsbG9jU2hhcmVkKGxlbiwgYXJncy4uLik7CisgICAgc3RyY3B5KHJldC0+bS52YWx1ZSwgc3RyKTsKKyAgICByZXR1cm4gcmV0OworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSAuLi5BcmdzPgorc3RkOjpzaGFyZWRfcHRyPFQ+IEFsbG9jU2hhcmVkU3RyaW5nKGNvbnN0IEFyZ3MoJi4uLiBhcmdzKSwgY29uc3Qgc3RkOjpzdHJpbmcgJnN0cikgeworICAgIHN0ZDo6c2hhcmVkX3B0cjxUPiByZXQgPSBUOjpBbGxvY1NoYXJlZChzdHIubGVuZ3RoKCkgKyAxLCBhcmdzLi4uKTsKKyAgICBzdHJjcHkocmV0LT5tLnZhbHVlLCBzdHIuY19zdHIoKSk7CisgICAgcmV0dXJuIHJldDsKK30KKwordGVtcGxhdGUgPHR5cGVuYW1lIFQ+CitzdHJ1Y3QgU2V0dGVyIHsKKyAgICB0eXBlZGVmIHR5cGVuYW1lIHN0ZDo6cmVtb3ZlX3JlZmVyZW5jZTxUPjo6dHlwZSB0eXBlOworCisgICAgc3RhdGljIEMyUiBOb25TdHJpY3RWYWx1ZVdpdGhOb0RlcHMoCisgICAgICAgICAgICBib29sIG1heUJsb2NrLCBDMkludGVyZmFjZUhlbHBlcjo6QzJQPHR5cGU+ICZtZSkgeworICAgICAgICAodm9pZCltYXlCbG9jazsKKyAgICAgICAgcmV0dXJuIG1lLkYobWUudi52YWx1ZSkudmFsaWRhdGVQb3NzaWJsZShtZS52LnZhbHVlKTsKKyAgICB9CisKKyAgICBzdGF0aWMgQzJSIE5vblN0cmljdFZhbHVlc1dpdGhOb0RlcHMoCisgICAgICAgICAgICBib29sIG1heUJsb2NrLCBDMkludGVyZmFjZUhlbHBlcjo6QzJQPHR5cGU+ICZtZSkgeworICAgICAgICAodm9pZCltYXlCbG9jazsKKyAgICAgICAgQzJSIHJlcyA9IEMyUjo6T2soKTsKKyAgICAgICAgZm9yIChzaXplX3QgaXggPSAwOyBpeCA8IG1lLnYuZmxleENvdW50KCk7ICsraXgpIHsKKyAgICAgICAgICAgIHJlcy5wbHVzKG1lLkYobWUudi5tLnZhbHVlc1tpeF0pLnZhbGlkYXRlUG9zc2libGUobWUudi5tLnZhbHVlc1tpeF0pKTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gcmVzOworICAgIH0KKworICAgIHN0YXRpYyBDMlIgU3RyaWN0VmFsdWVXaXRoTm9EZXBzKAorICAgICAgICAgICAgYm9vbCBtYXlCbG9jaywKKyAgICAgICAgICAgIGNvbnN0IEMySW50ZXJmYWNlSGVscGVyOjpDMlA8dHlwZT4gJm9sZCwKKyAgICAgICAgICAgIEMySW50ZXJmYWNlSGVscGVyOjpDMlA8dHlwZT4gJm1lKSB7CisgICAgICAgICh2b2lkKW1heUJsb2NrOworICAgICAgICBpZiAoIW1lLkYobWUudi52YWx1ZSkuc3VwcG9ydHNOb3cobWUudi52YWx1ZSkpIHsKKyAgICAgICAgICAgIG1lLnNldCgpLnZhbHVlID0gb2xkLnYudmFsdWU7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIG1lLkYobWUudi52YWx1ZSkudmFsaWRhdGVQb3NzaWJsZShtZS52LnZhbHVlKTsKKyAgICB9Cit9OworCit9ICAvLyBuYW1lc3BhY2UgYW5kcm9pZAorCisjZW5kaWYgIC8vIEFORFJPSURfU0lNUExFX0MyX0lOVEVSRkFDRV9IXwpkaWZmIC0tZ2l0IGEvbWVkaWEvY29kZWMyL2NvbXBvbmVudHMvY21kcy9BbmRyb2lkLmJwIGIvbWVkaWEvY29kZWMyL2NvbXBvbmVudHMvY21kcy9BbmRyb2lkLmJwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk5NGRmZWUKLS0tIC9kZXYvbnVsbAorKysgYi9tZWRpYS9jb2RlYzIvY29tcG9uZW50cy9jbWRzL0FuZHJvaWQuYnAKQEAgLTAsMCArMSw0MCBAQAorY2NfYmluYXJ5IHsKKyAgICBuYW1lOiAiY29kZWMycGxheSIsCisgICAgZGVmYXVsdHM6IFsibGliY29kZWMyLWltcGwtZGVmYXVsdHMiXSwKKworICAgIHNyY3M6IFsKKyAgICAgICAgImNvZGVjMi5jcHAiLAorICAgIF0sCisKKyAgICBpbmNsdWRlX2RpcnM6IFsKKyAgICBdLAorCisgICAgc2hhcmVkX2xpYnM6IFsKKyAgICAgICAgImxpYmJhc2UiLAorICAgICAgICAibGliYmluZGVyIiwKKyAgICAgICAgImxpYmN1dGlscyIsCisgICAgICAgICJsaWJndWkiLAorICAgICAgICAibGlibG9nIiwKKyAgICAgICAgImxpYm1lZGlhZXh0cmFjdG9yIiwKKyAgICAgICAgImxpYnN0YWdlZnJpZ2h0IiwKKyAgICAgICAgImxpYnN0YWdlZnJpZ2h0X2ZvdW5kYXRpb24iLAorICAgICAgICAibGlidWkiLAorICAgICAgICAibGlidXRpbHMiLAorICAgIF0sCisKKyAgICBjZmxhZ3M6IFsKKyAgICAgICAgIi1XZXJyb3IiLAorICAgICAgICAiLVdhbGwiLAorICAgIF0sCisKKyAgICBzYW5pdGl6ZTogeworICAgICAgICBjZmk6IHRydWUsCisgICAgICAgIG1pc2NfdW5kZWZpbmVkOiBbCisgICAgICAgICAgICAidW5zaWduZWQtaW50ZWdlci1vdmVyZmxvdyIsCisgICAgICAgICAgICAic2lnbmVkLWludGVnZXItb3ZlcmZsb3ciLAorICAgICAgICBdLAorICAgICAgICBkaWFnOiB7CisgICAgICAgICAgICBjZmk6IHRydWUsCisgICAgICAgIH0sCisgICAgfSwKK30KZGlmZiAtLWdpdCBhL21lZGlhL2NvZGVjMi9jb21wb25lbnRzL2NtZHMvY29kZWMyLmNwcCBiL21lZGlhL2NvZGVjMi9jb21wb25lbnRzL2NtZHMvY29kZWMyLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mMmNmNTQ1Ci0tLSAvZGV2L251bGwKKysrIGIvbWVkaWEvY29kZWMyL2NvbXBvbmVudHMvY21kcy9jb2RlYzIuY3BwCkBAIC0wLDAgKzEsNDgzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE3IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KKworI2luY2x1ZGUgPGludHR5cGVzLmg+CisjaW5jbHVkZSA8ZmNudGwuaD4KKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNpbmNsdWRlIDxzeXMvdGltZS5oPgorI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorI2luY2x1ZGUgPHN5cy9zdGF0Lmg+CisKKyNpbmNsdWRlIDx0aHJlYWQ+CisKKy8vI2RlZmluZSBMT0dfTkRFQlVHIDAKKyNkZWZpbmUgTE9HX1RBRyAiY29kZWMyIgorI2luY2x1ZGUgPGxvZy9sb2cuaD4KKworI2luY2x1ZGUgPGJpbmRlci9JU2VydmljZU1hbmFnZXIuaD4KKyNpbmNsdWRlIDxiaW5kZXIvUHJvY2Vzc1N0YXRlLmg+CisjaW5jbHVkZSA8bWVkaWEvRGF0YVNvdXJjZS5oPgorI2luY2x1ZGUgPG1lZGlhL0lDcnlwdG8uaD4KKyNpbmNsdWRlIDxtZWRpYS9JTWVkaWFIVFRQU2VydmljZS5oPgorI2luY2x1ZGUgPG1lZGlhL01lZGlhU291cmNlLmg+CisjaW5jbHVkZSA8bWVkaWEvc3RhZ2VmcmlnaHQvZm91bmRhdGlvbi9BQnVmZmVyLmg+CisjaW5jbHVkZSA8bWVkaWEvc3RhZ2VmcmlnaHQvZm91bmRhdGlvbi9BTG9vcGVyLmg+CisjaW5jbHVkZSA8bWVkaWEvc3RhZ2VmcmlnaHQvZm91bmRhdGlvbi9BTWVzc2FnZS5oPgorI2luY2x1ZGUgPG1lZGlhL3N0YWdlZnJpZ2h0L2ZvdW5kYXRpb24vQVV0aWxzLmg+CisjaW5jbHVkZSA8bWVkaWEvc3RhZ2VmcmlnaHQvRGF0YVNvdXJjZUZhY3RvcnkuaD4KKyNpbmNsdWRlIDxtZWRpYS9zdGFnZWZyaWdodC9NZWRpYURlZnMuaD4KKyNpbmNsdWRlIDxtZWRpYS9zdGFnZWZyaWdodC9NZWRpYUVycm9ycy5oPgorI2luY2x1ZGUgPG1lZGlhL3N0YWdlZnJpZ2h0L01lZGlhRXh0cmFjdG9yRmFjdG9yeS5oPgorI2luY2x1ZGUgPG1lZGlhL3N0YWdlZnJpZ2h0L01ldGFEYXRhLmg+CisjaW5jbHVkZSA8bWVkaWEvc3RhZ2VmcmlnaHQvVXRpbHMuaD4KKworI2luY2x1ZGUgPGd1aS9HTENvbnN1bWVyLmg+CisjaW5jbHVkZSA8Z3VpL0lQcm9kdWNlckxpc3RlbmVyLmg+CisjaW5jbHVkZSA8Z3VpL1N1cmZhY2UuaD4KKyNpbmNsdWRlIDxndWkvU3VyZmFjZUNvbXBvc2VyQ2xpZW50Lmg+CisKKyNpbmNsdWRlIDxDMkFsbG9jYXRvckdyYWxsb2MuaD4KKyNpbmNsdWRlIDxDMkJ1ZmZlci5oPgorI2luY2x1ZGUgPEMyQnVmZmVyUHJpdi5oPgorI2luY2x1ZGUgPEMyQ29tcG9uZW50Lmg+CisjaW5jbHVkZSA8QzJDb25maWcuaD4KKyNpbmNsdWRlIDxDMkRlYnVnLmg+CisjaW5jbHVkZSA8QzJQbGF0Zm9ybVN1cHBvcnQuaD4KKyNpbmNsdWRlIDxDMldvcmsuaD4KKwordXNpbmcgbmFtZXNwYWNlIGFuZHJvaWQ7Cit1c2luZyBuYW1lc3BhY2Ugc3RkOjpjaHJvbm9fbGl0ZXJhbHM7CisKK25hbWVzcGFjZSB7CisKK2NsYXNzIExpbmVhckJ1ZmZlciA6IHB1YmxpYyBDMkJ1ZmZlciB7CitwdWJsaWM6CisgICAgZXhwbGljaXQgTGluZWFyQnVmZmVyKGNvbnN0IHN0ZDo6c2hhcmVkX3B0cjxDMkxpbmVhckJsb2NrPiAmYmxvY2spCisgICAgICAgIDogQzJCdWZmZXIoeyBibG9jay0+c2hhcmUoYmxvY2stPm9mZnNldCgpLCBibG9jay0+c2l6ZSgpLCA6OkMyRmVuY2UoKSkgfSkge30KK307CisKK2NsYXNzIExpc3RlbmVyOworCitjbGFzcyBTaW1wbGVQbGF5ZXIgeworcHVibGljOgorICAgIFNpbXBsZVBsYXllcigpOworICAgIH5TaW1wbGVQbGF5ZXIoKTsKKworICAgIHZvaWQgb25Xb3JrRG9uZShzdGQ6OndlYWtfcHRyPEMyQ29tcG9uZW50PiBjb21wb25lbnQsCisgICAgICAgICAgICAgICAgICAgIHN0ZDo6bGlzdDxzdGQ6OnVuaXF1ZV9wdHI8QzJXb3JrPj4gd29ya0l0ZW1zKTsKKyAgICB2b2lkIG9uVHJpcHBlZChzdGQ6OndlYWtfcHRyPEMyQ29tcG9uZW50PiBjb21wb25lbnQsCisgICAgICAgICAgICAgICAgICAgc3RkOjp2ZWN0b3I8c3RkOjpzaGFyZWRfcHRyPEMyU2V0dGluZ1Jlc3VsdD4+IHNldHRpbmdSZXN1bHQpOworICAgIHZvaWQgb25FcnJvcihzdGQ6OndlYWtfcHRyPEMyQ29tcG9uZW50PiBjb21wb25lbnQsIHVpbnQzMl90IGVycm9yQ29kZSk7CisKKyAgICB2b2lkIHBsYXkoY29uc3Qgc3A8SU1lZGlhU291cmNlPiAmc291cmNlKTsKKworcHJpdmF0ZToKKyAgICB0eXBlZGVmIHN0ZDo6dW5pcXVlX2xvY2s8c3RkOjptdXRleD4gVUxvY2s7CisKKyAgICBzdGQ6OnNoYXJlZF9wdHI8TGlzdGVuZXI+IG1MaXN0ZW5lcjsKKyAgICBzdGQ6OnNoYXJlZF9wdHI8QzJDb21wb25lbnQ+IG1Db21wb25lbnQ7CisKKyAgICBzcDxJUHJvZHVjZXJMaXN0ZW5lcj4gbVByb2R1Y2VyTGlzdGVuZXI7CisKKyAgICBzdGQ6OmF0b21pY19pbnQgbUxpbmVhclBvb2xJZDsKKworICAgIHN0ZDo6c2hhcmVkX3B0cjxDMkFsbG9jYXRvcj4gbUFsbG9jSW9uOworICAgIHN0ZDo6c2hhcmVkX3B0cjxDMkJsb2NrUG9vbD4gbUxpbmVhclBvb2w7CisKKyAgICBzdGQ6Om11dGV4IG1RdWV1ZUxvY2s7CisgICAgc3RkOjpjb25kaXRpb25fdmFyaWFibGUgbVF1ZXVlQ29uZGl0aW9uOworICAgIHN0ZDo6bGlzdDxzdGQ6OnVuaXF1ZV9wdHI8QzJXb3JrPj4gbVdvcmtRdWV1ZTsKKworICAgIHN0ZDo6bXV0ZXggbVByb2Nlc3NlZExvY2s7CisgICAgc3RkOjpjb25kaXRpb25fdmFyaWFibGUgbVByb2Nlc3NlZENvbmRpdGlvbjsKKyAgICBzdGQ6Omxpc3Q8c3RkOjp1bmlxdWVfcHRyPEMyV29yaz4+IG1Qcm9jZXNzZWRXb3JrOworCisgICAgc3A8U3VyZmFjZT4gbVN1cmZhY2U7CisgICAgc3A8U3VyZmFjZUNvbXBvc2VyQ2xpZW50PiBtQ29tcG9zZXJDbGllbnQ7CisgICAgc3A8U3VyZmFjZUNvbnRyb2w+IG1Db250cm9sOworfTsKKworY2xhc3MgTGlzdGVuZXIgOiBwdWJsaWMgQzJDb21wb25lbnQ6Okxpc3RlbmVyIHsKK3B1YmxpYzoKKyAgICBleHBsaWNpdCBMaXN0ZW5lcihTaW1wbGVQbGF5ZXIgKnRoaXopIDogbVRoaXModGhpeikge30KKyAgICB2aXJ0dWFsIH5MaXN0ZW5lcigpID0gZGVmYXVsdDsKKworICAgIHZpcnR1YWwgdm9pZCBvbldvcmtEb25lX25iKHN0ZDo6d2Vha19wdHI8QzJDb21wb25lbnQ+IGNvbXBvbmVudCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGQ6Omxpc3Q8c3RkOjp1bmlxdWVfcHRyPEMyV29yaz4+IHdvcmtJdGVtcykgb3ZlcnJpZGUgeworICAgICAgICBtVGhpcy0+b25Xb3JrRG9uZShjb21wb25lbnQsIHN0ZDo6bW92ZSh3b3JrSXRlbXMpKTsKKyAgICB9CisKKyAgICB2aXJ0dWFsIHZvaWQgb25UcmlwcGVkX25iKHN0ZDo6d2Vha19wdHI8QzJDb21wb25lbnQ+IGNvbXBvbmVudCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZDo6dmVjdG9yPHN0ZDo6c2hhcmVkX3B0cjxDMlNldHRpbmdSZXN1bHQ+PiBzZXR0aW5nUmVzdWx0KSBvdmVycmlkZSB7CisgICAgICAgIG1UaGlzLT5vblRyaXBwZWQoY29tcG9uZW50LCBzZXR0aW5nUmVzdWx0KTsKKyAgICB9CisKKyAgICB2aXJ0dWFsIHZvaWQgb25FcnJvcl9uYihzdGQ6OndlYWtfcHRyPEMyQ29tcG9uZW50PiBjb21wb25lbnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3QgZXJyb3JDb2RlKSBvdmVycmlkZSB7CisgICAgICAgIG1UaGlzLT5vbkVycm9yKGNvbXBvbmVudCwgZXJyb3JDb2RlKTsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgU2ltcGxlUGxheWVyICogY29uc3QgbVRoaXM7Cit9OworCisKK1NpbXBsZVBsYXllcjo6U2ltcGxlUGxheWVyKCkKKyAgICA6IG1MaXN0ZW5lcihuZXcgTGlzdGVuZXIodGhpcykpLAorICAgICAgbVByb2R1Y2VyTGlzdGVuZXIobmV3IER1bW15UHJvZHVjZXJMaXN0ZW5lciksCisgICAgICBtTGluZWFyUG9vbElkKEMyQmxvY2tQb29sOjpQTEFURk9STV9TVEFSVCksCisgICAgICBtQ29tcG9zZXJDbGllbnQobmV3IFN1cmZhY2VDb21wb3NlckNsaWVudCkgeworICAgIENIRUNLX0VRKG1Db21wb3NlckNsaWVudC0+aW5pdENoZWNrKCksIChzdGF0dXNfdClPSyk7CisKKyAgICBzdGQ6OnNoYXJlZF9wdHI8QzJBbGxvY2F0b3JTdG9yZT4gc3RvcmUgPSBHZXRDb2RlYzJQbGF0Zm9ybUFsbG9jYXRvclN0b3JlKCk7CisgICAgQ0hFQ0tfRVEoc3RvcmUtPmZldGNoQWxsb2NhdG9yKEMyQWxsb2NhdG9yU3RvcmU6OkRFRkFVTFRfTElORUFSLCAmbUFsbG9jSW9uKSwgQzJfT0spOworICAgIG1MaW5lYXJQb29sID0gc3RkOjptYWtlX3NoYXJlZDxDMlBvb2xlZEJsb2NrUG9vbD4obUFsbG9jSW9uLCBtTGluZWFyUG9vbElkKyspOworCisgICAgbUNvbnRyb2wgPSBtQ29tcG9zZXJDbGllbnQtPmNyZWF0ZVN1cmZhY2UoCisgICAgICAgICAgICBTdHJpbmc4KCJBIFN1cmZhY2UiKSwKKyAgICAgICAgICAgIDEyODAsCisgICAgICAgICAgICA4MDAsCisgICAgICAgICAgICBIQUxfUElYRUxfRk9STUFUX1lWMTIpOworICAgICAgICAgICAgLy9QSVhFTF9GT1JNQVRfUkdCXzU2NSk7CisKKyAgICBDSEVDSyhtQ29udHJvbCAhPSBudWxscHRyKTsKKyAgICBDSEVDSyhtQ29udHJvbC0+aXNWYWxpZCgpKTsKKworICAgIFN1cmZhY2VDb21wb3NlckNsaWVudDo6VHJhbnNhY3Rpb257fQorICAgICAgICAgICAgLnNldExheWVyKG1Db250cm9sLCBJTlRfTUFYKQorICAgICAgICAgICAgLnNob3cobUNvbnRyb2wpCisgICAgICAgICAgICAuYXBwbHkoKTsKKworICAgIG1TdXJmYWNlID0gbUNvbnRyb2wtPmdldFN1cmZhY2UoKTsKKyAgICBDSEVDSyhtU3VyZmFjZSAhPSBudWxscHRyKTsKKyAgICBtU3VyZmFjZS0+Y29ubmVjdChOQVRJVkVfV0lORE9XX0FQSV9DUFUsIG1Qcm9kdWNlckxpc3RlbmVyKTsKK30KKworU2ltcGxlUGxheWVyOjp+U2ltcGxlUGxheWVyKCkgeworICAgIG1Db21wb3NlckNsaWVudC0+ZGlzcG9zZSgpOworfQorCit2b2lkIFNpbXBsZVBsYXllcjo6b25Xb3JrRG9uZSgKKyAgICAgICAgc3RkOjp3ZWFrX3B0cjxDMkNvbXBvbmVudD4gY29tcG9uZW50LCBzdGQ6Omxpc3Q8c3RkOjp1bmlxdWVfcHRyPEMyV29yaz4+IHdvcmtJdGVtcykgeworICAgIEFMT0dWKCJTaW1wbGVQbGF5ZXI6Om9uV29ya0RvbmUiKTsKKyAgICAodm9pZCkgY29tcG9uZW50OworICAgIFVMb2NrIGwobVByb2Nlc3NlZExvY2spOworICAgIGZvciAoYXV0byAmIGl0ZW0gOiB3b3JrSXRlbXMpIHsKKyAgICAgICAgbVByb2Nlc3NlZFdvcmsucHVzaF9iYWNrKHN0ZDo6bW92ZShpdGVtKSk7CisgICAgfQorICAgIG1Qcm9jZXNzZWRDb25kaXRpb24ubm90aWZ5X2FsbCgpOworfQorCit2b2lkIFNpbXBsZVBsYXllcjo6b25UcmlwcGVkKAorICAgICAgICBzdGQ6OndlYWtfcHRyPEMyQ29tcG9uZW50PiBjb21wb25lbnQsCisgICAgICAgIHN0ZDo6dmVjdG9yPHN0ZDo6c2hhcmVkX3B0cjxDMlNldHRpbmdSZXN1bHQ+PiBzZXR0aW5nUmVzdWx0KSB7CisgICAgKHZvaWQpIGNvbXBvbmVudDsKKyAgICAodm9pZCkgc2V0dGluZ1Jlc3VsdDsKKyAgICAvLyBUT0RPCit9CisKK3ZvaWQgU2ltcGxlUGxheWVyOjpvbkVycm9yKHN0ZDo6d2Vha19wdHI8QzJDb21wb25lbnQ+IGNvbXBvbmVudCwgdWludDMyX3QgZXJyb3JDb2RlKSB7CisgICAgKHZvaWQpIGNvbXBvbmVudDsKKyAgICAodm9pZCkgZXJyb3JDb2RlOworICAgIC8vIFRPRE8KK30KKwordm9pZCBTaW1wbGVQbGF5ZXI6OnBsYXkoY29uc3Qgc3A8SU1lZGlhU291cmNlPiAmc291cmNlKSB7CisgICAgQUxPR1YoIlNpbXBsZVBsYXllcjo6cGxheSIpOworICAgIHNwPEFNZXNzYWdlPiBmb3JtYXQ7CisgICAgKHZvaWQpIGNvbnZlcnRNZXRhRGF0YVRvTWVzc2FnZShzb3VyY2UtPmdldEZvcm1hdCgpLCAmZm9ybWF0KTsKKworICAgIHNwPEFCdWZmZXI+IGNzZDAsIGNzZDE7CisgICAgZm9ybWF0LT5maW5kQnVmZmVyKCJjc2QtMCIsICZjc2QwKTsKKyAgICBmb3JtYXQtPmZpbmRCdWZmZXIoImNzZC0xIiwgJmNzZDEpOworCisgICAgc3RhdHVzX3QgZXJyID0gc291cmNlLT5zdGFydCgpOworCisgICAgaWYgKGVyciAhPSBPSykgeworICAgICAgICBmcHJpbnRmKHN0ZGVyciwgInNvdXJjZSByZXR1cm5lZCBlcnJvciAlZCAoMHglMDh4KVxuIiwgZXJyLCBlcnIpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgc3RkOjpzaGFyZWRfcHRyPEMyQ29tcG9uZW50U3RvcmU+IHN0b3JlID0gR2V0Q29kZWMyUGxhdGZvcm1Db21wb25lbnRTdG9yZSgpOworICAgIHN0ZDo6c2hhcmVkX3B0cjxDMkNvbXBvbmVudD4gY29tcG9uZW50OworICAgICh2b2lkKXN0b3JlLT5jcmVhdGVDb21wb25lbnQoImMyLmFuZHJvaWQuYXZjLmRlY29kZXIiLCAmY29tcG9uZW50KTsKKworICAgICh2b2lkKWNvbXBvbmVudC0+c2V0TGlzdGVuZXJfdmIobUxpc3RlbmVyLCBDMl9ET05UX0JMT0NLKTsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8QzJQb3J0QmxvY2tQb29sc1R1bmluZzo6b3V0cHV0PiBwb29scyA9CisgICAgICAgIEMyUG9ydEJsb2NrUG9vbHNUdW5pbmc6Om91dHB1dDo6QWxsb2NVbmlxdWUoeyAodWludDY0X3QpQzJCbG9ja1Bvb2w6OkJBU0lDX0dSQVBISUMgfSk7CisgICAgc3RkOjp2ZWN0b3I8c3RkOjp1bmlxdWVfcHRyPEMyU2V0dGluZ1Jlc3VsdD4+IHJlc3VsdDsKKyAgICAodm9pZCljb21wb25lbnQtPmludGYoKS0+Y29uZmlnX3ZiKHtwb29scy5nZXQoKX0sIEMyX0RPTlRfQkxPQ0ssICZyZXN1bHQpOworICAgIGNvbXBvbmVudC0+c3RhcnQoKTsKKworICAgIGZvciAoaW50IGkgPSAwOyBpIDwgODsgKytpKSB7CisgICAgICAgIG1Xb3JrUXVldWUuZW1wbGFjZV9iYWNrKG5ldyBDMldvcmspOworICAgIH0KKworICAgIHN0ZDo6YXRvbWljX2Jvb2wgcnVubmluZyh0cnVlKTsKKyAgICBzdGQ6OnRocmVhZCBzdXJmYWNlVGhyZWFkKFt0aGlzLCAmcnVubmluZ10oKSB7CisgICAgICAgIGNvbnN0IHNwPElHcmFwaGljQnVmZmVyUHJvZHVjZXI+ICZpZ2JwID0gbVN1cmZhY2UtPmdldElHcmFwaGljQnVmZmVyUHJvZHVjZXIoKTsKKyAgICAgICAgd2hpbGUgKHJ1bm5pbmcpIHsKKyAgICAgICAgICAgIHN0ZDo6dW5pcXVlX3B0cjxDMldvcms+IHdvcms7CisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgVUxvY2sgbChtUHJvY2Vzc2VkTG9jayk7CisgICAgICAgICAgICAgICAgaWYgKG1Qcm9jZXNzZWRXb3JrLmVtcHR5KCkpIHsKKyAgICAgICAgICAgICAgICAgICAgbVByb2Nlc3NlZENvbmRpdGlvbi53YWl0X2ZvcihsLCAxMDBtcyk7CisgICAgICAgICAgICAgICAgICAgIGlmIChtUHJvY2Vzc2VkV29yay5lbXB0eSgpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB3b3JrLnN3YXAobVByb2Nlc3NlZFdvcmsuZnJvbnQoKSk7CisgICAgICAgICAgICAgICAgbVByb2Nlc3NlZFdvcmsucG9wX2Zyb250KCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpbnQgc2xvdDsKKyAgICAgICAgICAgIHNwPEZlbmNlPiBmZW5jZTsKKyAgICAgICAgICAgIEFMT0dWKCJSZW5kZXI6IEZyYW1lICMlbGxkIiwgd29yay0+d29ya2xldHMuZnJvbnQoKS0+b3V0cHV0Lm9yZGluYWwuZnJhbWVJbmRleC5wZWVrbGwoKSk7CisgICAgICAgICAgICBjb25zdCBzdGQ6OnNoYXJlZF9wdHI8QzJCdWZmZXI+ICZvdXRwdXQgPSB3b3JrLT53b3JrbGV0cy5mcm9udCgpLT5vdXRwdXQuYnVmZmVyc1swXTsKKyAgICAgICAgICAgIGlmIChvdXRwdXQpIHsKKyAgICAgICAgICAgICAgICBjb25zdCBDMkNvbnN0R3JhcGhpY0Jsb2NrIGJsb2NrID0gb3V0cHV0LT5kYXRhKCkuZ3JhcGhpY0Jsb2NrcygpLmZyb250KCk7CisgICAgICAgICAgICAgICAgbmF0aXZlX2hhbmRsZV90ICpncmFsbG9jSGFuZGxlID0gVW53cmFwTmF0aXZlQ29kZWMyR3JhbGxvY0hhbmRsZShibG9jay5oYW5kbGUoKSk7CisgICAgICAgICAgICAgICAgc3A8R3JhcGhpY0J1ZmZlcj4gYnVmZmVyKG5ldyBHcmFwaGljQnVmZmVyKAorICAgICAgICAgICAgICAgICAgICAgICAgZ3JhbGxvY0hhbmRsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgIEdyYXBoaWNCdWZmZXI6OkNMT05FX0hBTkRMRSwKKyAgICAgICAgICAgICAgICAgICAgICAgIGJsb2NrLndpZHRoKCksCisgICAgICAgICAgICAgICAgICAgICAgICBibG9jay5oZWlnaHQoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgIEhBTF9QSVhFTF9GT1JNQVRfWVYxMiwKKyAgICAgICAgICAgICAgICAgICAgICAgIDEsCisgICAgICAgICAgICAgICAgICAgICAgICAodWludDY0X3QpR1JBTExPQ19VU0FHRV9TV19SRUFEX09GVEVOIHwgR1JBTExPQ19VU0FHRV9TV19XUklURV9PRlRFTiwKKyAgICAgICAgICAgICAgICAgICAgICAgIGJsb2NrLndpZHRoKCkpKTsKKyAgICAgICAgICAgICAgICBuYXRpdmVfaGFuZGxlX2RlbGV0ZShncmFsbG9jSGFuZGxlKTsKKworICAgICAgICAgICAgICAgIHN0YXR1c190IGVyciA9IGlnYnAtPmF0dGFjaEJ1ZmZlcigmc2xvdCwgYnVmZmVyKTsKKworICAgICAgICAgICAgICAgIElHcmFwaGljQnVmZmVyUHJvZHVjZXI6OlF1ZXVlQnVmZmVySW5wdXQgcWJpKAorICAgICAgICAgICAgICAgICAgICAgICAgKHdvcmstPndvcmtsZXRzLmZyb250KCktPm91dHB1dC5vcmRpbmFsLnRpbWVzdGFtcCAqIDEwMDBsbCkucGVla2xsKCksCisgICAgICAgICAgICAgICAgICAgICAgICBmYWxzZSwKKyAgICAgICAgICAgICAgICAgICAgICAgIEhBTF9EQVRBU1BBQ0VfVU5LTk9XTiwKKyAgICAgICAgICAgICAgICAgICAgICAgIFJlY3QoYmxvY2sud2lkdGgoKSwgYmxvY2suaGVpZ2h0KCkpLAorICAgICAgICAgICAgICAgICAgICAgICAgTkFUSVZFX1dJTkRPV19TQ0FMSU5HX01PREVfU0NBTEVfVE9fV0lORE9XLAorICAgICAgICAgICAgICAgICAgICAgICAgMCwKKyAgICAgICAgICAgICAgICAgICAgICAgIEZlbmNlOjpOT19GRU5DRSwKKyAgICAgICAgICAgICAgICAgICAgICAgIDApOworICAgICAgICAgICAgICAgIElHcmFwaGljQnVmZmVyUHJvZHVjZXI6OlF1ZXVlQnVmZmVyT3V0cHV0IHFibzsKKyAgICAgICAgICAgICAgICBlcnIgPSBpZ2JwLT5xdWV1ZUJ1ZmZlcihzbG90LCBxYmksICZxYm8pOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICB3b3JrLT5pbnB1dC5idWZmZXJzLmNsZWFyKCk7CisgICAgICAgICAgICB3b3JrLT53b3JrbGV0cy5jbGVhcigpOworCisgICAgICAgICAgICBVTG9jayBsKG1RdWV1ZUxvY2spOworICAgICAgICAgICAgbVdvcmtRdWV1ZS5wdXNoX2JhY2soc3RkOjptb3ZlKHdvcmspKTsKKyAgICAgICAgICAgIG1RdWV1ZUNvbmRpdGlvbi5ub3RpZnlfYWxsKCk7CisgICAgICAgIH0KKyAgICAgICAgQUxPR1YoInJlbmRlciBsb29wIGZpbmlzaGVkIik7CisgICAgfSk7CisKKyAgICBsb25nIG51bUZyYW1lcyA9IDA7CisgICAgbUxpbmVhclBvb2wucmVzZXQobmV3IEMyUG9vbGVkQmxvY2tQb29sKG1BbGxvY0lvbiwgbUxpbmVhclBvb2xJZCsrKSk7CisKKyAgICBmb3IgKDs7KSB7CisgICAgICAgIHNpemVfdCBzaXplID0gMHU7CisgICAgICAgIHZvaWQgKmRhdGEgPSBudWxscHRyOworICAgICAgICBpbnQ2NF90IHRpbWVzdGFtcCA9IDB1OworICAgICAgICBNZWRpYUJ1ZmZlckJhc2UgKmJ1ZmZlciA9IG51bGxwdHI7CisgICAgICAgIHNwPEFCdWZmZXI+IGNzZDsKKyAgICAgICAgaWYgKGNzZDAgIT0gbnVsbHB0cikgeworICAgICAgICAgICAgY3NkID0gY3NkMDsKKyAgICAgICAgICAgIGNzZDAgPSBudWxscHRyOworICAgICAgICB9IGVsc2UgaWYgKGNzZDEgIT0gbnVsbHB0cikgeworICAgICAgICAgICAgY3NkID0gY3NkMTsKKyAgICAgICAgICAgIGNzZDEgPSBudWxscHRyOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgc3RhdHVzX3QgZXJyID0gc291cmNlLT5yZWFkKCZidWZmZXIpOworICAgICAgICAgICAgaWYgKGVyciAhPSBPSykgeworICAgICAgICAgICAgICAgIENIRUNLKGJ1ZmZlciA9PSBudWxscHRyKTsKKworICAgICAgICAgICAgICAgIGlmIChlcnIgPT0gSU5GT19GT1JNQVRfQ0hBTkdFRCkgeworICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIE1ldGFEYXRhQmFzZSAmbWV0YSA9IGJ1ZmZlci0+bWV0YV9kYXRhKCk7CisgICAgICAgICAgICBDSEVDSyhtZXRhLmZpbmRJbnQ2NChrS2V5VGltZSwgJnRpbWVzdGFtcCkpOworCisgICAgICAgICAgICBzaXplID0gYnVmZmVyLT5zaXplKCk7CisgICAgICAgICAgICBkYXRhID0gYnVmZmVyLT5kYXRhKCk7CisgICAgICAgIH0KKworICAgICAgICBpZiAoY3NkICE9IG51bGxwdHIpIHsKKyAgICAgICAgICAgIHNpemUgPSBjc2QtPnNpemUoKTsKKyAgICAgICAgICAgIGRhdGEgPSBjc2QtPmRhdGEoKTsKKyAgICAgICAgfQorCisgICAgICAgIC8vIFByZXBhcmUgQzJXb3JrCisKKyAgICAgICAgc3RkOjp1bmlxdWVfcHRyPEMyV29yaz4gd29yazsKKyAgICAgICAgd2hpbGUgKCF3b3JrKSB7CisgICAgICAgICAgICBVTG9jayBsKG1RdWV1ZUxvY2spOworICAgICAgICAgICAgaWYgKCFtV29ya1F1ZXVlLmVtcHR5KCkpIHsKKyAgICAgICAgICAgICAgICB3b3JrLnN3YXAobVdvcmtRdWV1ZS5mcm9udCgpKTsKKyAgICAgICAgICAgICAgICBtV29ya1F1ZXVlLnBvcF9mcm9udCgpOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBtUXVldWVDb25kaXRpb24ud2FpdF9mb3IobCwgMTAwbXMpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIHdvcmstPmlucHV0LmZsYWdzID0gKEMyRnJhbWVEYXRhOjpmbGFnc190KTA7CisgICAgICAgIHdvcmstPmlucHV0Lm9yZGluYWwudGltZXN0YW1wID0gdGltZXN0YW1wOworICAgICAgICB3b3JrLT5pbnB1dC5vcmRpbmFsLmZyYW1lSW5kZXggPSBudW1GcmFtZXM7CisKKyAgICAgICAgc3RkOjpzaGFyZWRfcHRyPEMyTGluZWFyQmxvY2s+IGJsb2NrOworICAgICAgICBtTGluZWFyUG9vbC0+ZmV0Y2hMaW5lYXJCbG9jaygKKyAgICAgICAgICAgICAgICBzaXplLAorICAgICAgICAgICAgICAgIHsgQzJNZW1vcnlVc2FnZTo6Q1BVX1JFQUQsIEMyTWVtb3J5VXNhZ2U6OkNQVV9XUklURSB9LAorICAgICAgICAgICAgICAgICZibG9jayk7CisgICAgICAgIEMyV3JpdGVWaWV3IHZpZXcgPSBibG9jay0+bWFwKCkuZ2V0KCk7CisgICAgICAgIGlmICh2aWV3LmVycm9yKCkgIT0gQzJfT0spIHsKKyAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiQzJMaW5lYXJCbG9jazo6bWFwKCkgZmFpbGVkIDogJWQiLCB2aWV3LmVycm9yKCkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgbWVtY3B5KHZpZXcuYmFzZSgpLCBkYXRhLCBzaXplKTsKKworICAgICAgICB3b3JrLT5pbnB1dC5idWZmZXJzLmNsZWFyKCk7CisgICAgICAgIHdvcmstPmlucHV0LmJ1ZmZlcnMuZW1wbGFjZV9iYWNrKG5ldyBMaW5lYXJCdWZmZXIoYmxvY2spKTsKKyAgICAgICAgd29yay0+d29ya2xldHMuY2xlYXIoKTsKKyAgICAgICAgd29yay0+d29ya2xldHMuZW1wbGFjZV9iYWNrKG5ldyBDMldvcmtsZXQpOworCisgICAgICAgIHN0ZDo6bGlzdDxzdGQ6OnVuaXF1ZV9wdHI8QzJXb3JrPj4gaXRlbXM7CisgICAgICAgIGl0ZW1zLnB1c2hfYmFjayhzdGQ6Om1vdmUod29yaykpOworCisgICAgICAgIEFMT0dWKCJGcmFtZSAjJWxkIHNpemUgPSAlenUiLCBudW1GcmFtZXMsIHNpemUpOworICAgICAgICAvLyBETyBUSEUgREVDT0RJTkcKKyAgICAgICAgY29tcG9uZW50LT5xdWV1ZV9uYigmaXRlbXMpOworCisgICAgICAgIGlmIChidWZmZXIpIHsKKyAgICAgICAgICAgIGJ1ZmZlci0+cmVsZWFzZSgpOworICAgICAgICAgICAgYnVmZmVyID0gbnVsbHB0cjsKKyAgICAgICAgfQorCisgICAgICAgICsrbnVtRnJhbWVzOworICAgIH0KKyAgICBBTE9HVigibWFpbiBsb29wIGZpbmlzaGVkIik7CisgICAgc291cmNlLT5zdG9wKCk7CisgICAgcnVubmluZy5zdG9yZShmYWxzZSk7CisgICAgc3VyZmFjZVRocmVhZC5qb2luKCk7CisKKyAgICBjb21wb25lbnQtPnJlbGVhc2UoKTsKKyAgICBwcmludGYoIlxuIik7Cit9CisKK30gIC8vIG5hbWVzcGFjZQorCitzdGF0aWMgdm9pZCB1c2FnZShjb25zdCBjaGFyICptZSkgeworICAgIGZwcmludGYoc3RkZXJyLCAidXNhZ2U6ICVzIFtvcHRpb25zXSBbaW5wdXRfZmlsZW5hbWVdXG4iLCBtZSk7CisgICAgZnByaW50ZihzdGRlcnIsICIgICAgICAgLWgoZWxwKVxuIik7Cit9CisKK2ludCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJndikgeworICAgIGFuZHJvaWQ6OlByb2Nlc3NTdGF0ZTo6c2VsZigpLT5zdGFydFRocmVhZFBvb2woKTsKKworICAgIGludCByZXM7CisgICAgd2hpbGUgKChyZXMgPSBnZXRvcHQoYXJnYywgYXJndiwgImgiKSkgPj0gMCkgeworICAgICAgICBzd2l0Y2ggKHJlcykgeworICAgICAgICAgICAgY2FzZSAnaCc6CisgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHVzYWdlKGFyZ3ZbMF0pOworICAgICAgICAgICAgICAgIGV4aXQoMSk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKKyAgICBhcmdjIC09IG9wdGluZDsKKyAgICBhcmd2ICs9IG9wdGluZDsKKworICAgIGlmIChhcmdjIDwgMSkgeworICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIk5vIGlucHV0IGZpbGUgc3BlY2lmaWVkXG4iKTsKKyAgICAgICAgcmV0dXJuIDE7CisgICAgfQorCisgICAgc3RhdHVzX3QgZXJyID0gT0s7CisgICAgU2ltcGxlUGxheWVyIHBsYXllcjsKKworICAgIGZvciAoaW50IGsgPSAwOyBrIDwgYXJnYyAmJiBlcnIgPT0gT0s7ICsraykgeworICAgICAgICBjb25zdCBjaGFyICpmaWxlbmFtZSA9IGFyZ3Zba107CisKKyAgICAgICAgc3A8RGF0YVNvdXJjZT4gZGF0YVNvdXJjZSA9CisgICAgICAgICAgICBEYXRhU291cmNlRmFjdG9yeTo6Q3JlYXRlRnJvbVVSSShudWxscHRyIC8qIGh0dHBTZXJ2aWNlICovLCBmaWxlbmFtZSk7CisKKyAgICAgICAgaWYgKHN0cm5jYXNlY21wKGZpbGVuYW1lLCAic2luZToiLCA1KSAmJiBkYXRhU291cmNlID09IG51bGxwdHIpIHsKKyAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiVW5hYmxlIHRvIGNyZWF0ZSBkYXRhIHNvdXJjZS5cbiIpOworICAgICAgICAgICAgcmV0dXJuIDE7CisgICAgICAgIH0KKworICAgICAgICBWZWN0b3I8c3A8SU1lZGlhU291cmNlPiA+IG1lZGlhU291cmNlczsKKyAgICAgICAgc3A8SU1lZGlhU291cmNlPiBtZWRpYVNvdXJjZTsKKworICAgICAgICBzcDxJTWVkaWFFeHRyYWN0b3I+IGV4dHJhY3RvciA9IE1lZGlhRXh0cmFjdG9yRmFjdG9yeTo6Q3JlYXRlKGRhdGFTb3VyY2UpOworCisgICAgICAgIGlmIChleHRyYWN0b3IgPT0gbnVsbHB0cikgeworICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICJjb3VsZCBub3QgY3JlYXRlIGV4dHJhY3Rvci5cbiIpOworICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICB9CisKKyAgICAgICAgc3A8TWV0YURhdGE+IG1ldGEgPSBleHRyYWN0b3ItPmdldE1ldGFEYXRhKCk7CisKKyAgICAgICAgaWYgKG1ldGEgIT0gbnVsbHB0cikgeworICAgICAgICAgICAgY29uc3QgY2hhciAqbWltZTsKKyAgICAgICAgICAgIGlmICghbWV0YS0+ZmluZENTdHJpbmcoa0tleU1JTUVUeXBlLCAmbWltZSkpIHsKKyAgICAgICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgImV4dHJhY3RvciBkaWQgbm90IHByb3ZpZGUgTUlNRSB0eXBlLlxuIik7CisgICAgICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgc2l6ZV90IG51bVRyYWNrcyA9IGV4dHJhY3Rvci0+Y291bnRUcmFja3MoKTsKKworICAgICAgICBzaXplX3QgaTsKKyAgICAgICAgZm9yIChpID0gMDsgaSA8IG51bVRyYWNrczsgKytpKSB7CisgICAgICAgICAgICBtZXRhID0gZXh0cmFjdG9yLT5nZXRUcmFja01ldGFEYXRhKGksIDApOworCisgICAgICAgICAgICBpZiAobWV0YSA9PSBudWxscHRyKSB7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBjb25zdCBjaGFyICptaW1lOworICAgICAgICAgICAgbWV0YS0+ZmluZENTdHJpbmcoa0tleU1JTUVUeXBlLCAmbWltZSk7CisKKyAgICAgICAgICAgIC8vIFRPRE86IGFsbG93aW5nIEFWQyBvbmx5IGZvciB0aGUgdGltZSBiZWluZworICAgICAgICAgICAgaWYgKCFzdHJuY2FzZWNtcChtaW1lLCAidmlkZW8vYXZjIiwgOSkpIHsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgbWV0YSA9IG51bGxwdHI7CisgICAgICAgIH0KKworICAgICAgICBpZiAobWV0YSA9PSBudWxscHRyKSB7CisgICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIk5vIEFWQyB0cmFjayBmb3VuZC5cbiIpOworICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICB9CisKKyAgICAgICAgbWVkaWFTb3VyY2UgPSBleHRyYWN0b3ItPmdldFRyYWNrKGkpOworICAgICAgICBpZiAobWVkaWFTb3VyY2UgPT0gbnVsbHB0cikgeworICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICJza2lwIE5VTEwgdHJhY2sgJXp1LCB0b3RhbCB0cmFja3MgJXp1LlxuIiwgaSwgbnVtVHJhY2tzKTsKKyAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgfQorCisgICAgICAgIHBsYXllci5wbGF5KG1lZGlhU291cmNlKTsKKyAgICB9CisKKyAgICByZXR1cm4gMDsKK30KZGlmZiAtLWdpdCBhL21lZGlhL2NvZGVjMi9jb21wb25lbnRzL2ZsYWMvQW5kcm9pZC5icCBiL21lZGlhL2NvZGVjMi9jb21wb25lbnRzL2ZsYWMvQW5kcm9pZC5icApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNDg1OTY0Ci0tLSAvZGV2L251bGwKKysrIGIvbWVkaWEvY29kZWMyL2NvbXBvbmVudHMvZmxhYy9BbmRyb2lkLmJwCkBAIC0wLDAgKzEsMjcgQEAKK2NjX2xpYnJhcnlfc2hhcmVkIHsKKyAgICBuYW1lOiAibGliY29kZWMyX3NvZnRfZmxhY2RlYyIsCisgICAgZGVmYXVsdHM6IFsKKyAgICAgICAgImxpYmNvZGVjMl9zb2Z0LWRlZmF1bHRzIiwKKyAgICAgICAgImxpYmNvZGVjMl9zb2Z0X3Nhbml0aXplX2FsbC1kZWZhdWx0cyIsCisgICAgXSwKKworICAgIGhlYWRlcl9saWJzOiBbImxpYkZMQUMtaGVhZGVycyJdLAorCisgICAgc3JjczogWyJDMlNvZnRGbGFjRGVjLmNwcCJdLAorCisgICAgc2hhcmVkX2xpYnM6IFsKKyAgICAgICAgImxpYnN0YWdlZnJpZ2h0X2ZsYWNkZWMiLAorICAgIF0sCit9CisKK2NjX2xpYnJhcnlfc2hhcmVkIHsKKyAgICBuYW1lOiAibGliY29kZWMyX3NvZnRfZmxhY2VuYyIsCisgICAgZGVmYXVsdHM6IFsKKyAgICAgICAgImxpYmNvZGVjMl9zb2Z0LWRlZmF1bHRzIiwKKyAgICAgICAgImxpYmNvZGVjMl9zb2Z0X3Nhbml0aXplX2FsbC1kZWZhdWx0cyIsCisgICAgXSwKKworICAgIHNyY3M6IFsiQzJTb2Z0RmxhY0VuYy5jcHAiXSwKKworICAgIHN0YXRpY19saWJzOiBbImxpYkZMQUMiXSwKK30KZGlmZiAtLWdpdCBhL21lZGlhL2NvZGVjMi9jb21wb25lbnRzL2ZsYWMvQzJTb2Z0RmxhY0RlYy5jcHAgYi9tZWRpYS9jb2RlYzIvY29tcG9uZW50cy9mbGFjL0MyU29mdEZsYWNEZWMuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYxZTJmNTEKLS0tIC9kZXYvbnVsbAorKysgYi9tZWRpYS9jb2RlYzIvY29tcG9uZW50cy9mbGFjL0MyU29mdEZsYWNEZWMuY3BwCkBAIC0wLDAgKzEsMzcyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE4IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KKworLy8jZGVmaW5lIExPR19OREVCVUcgMAorI2RlZmluZSBMT0dfVEFHICJDMlNvZnRGbGFjRGVjIgorI2luY2x1ZGUgPGxvZy9sb2cuaD4KKworI2luY2x1ZGUgPG1lZGlhL3N0YWdlZnJpZ2h0L2ZvdW5kYXRpb24vTWVkaWFEZWZzLmg+CisKKyNpbmNsdWRlIDxDMlBsYXRmb3JtU3VwcG9ydC5oPgorI2luY2x1ZGUgPFNpbXBsZUMySW50ZXJmYWNlLmg+CisKKyNpbmNsdWRlICJDMlNvZnRGbGFjRGVjLmgiCisKK25hbWVzcGFjZSBhbmRyb2lkIHsKKworY29uc3RleHByIGNoYXIgQ09NUE9ORU5UX05BTUVbXSA9ICJjMi5hbmRyb2lkLmZsYWMuZGVjb2RlciI7CisKK2NsYXNzIEMyU29mdEZsYWNEZWM6OkludGZJbXBsIDogcHVibGljIEMySW50ZXJmYWNlSGVscGVyIHsKK3B1YmxpYzoKKyAgICBleHBsaWNpdCBJbnRmSW1wbChjb25zdCBzdGQ6OnNoYXJlZF9wdHI8QzJSZWZsZWN0b3JIZWxwZXI+ICZoZWxwZXIpCisgICAgICAgIDogQzJJbnRlcmZhY2VIZWxwZXIoaGVscGVyKSB7CisKKyAgICAgICAgc2V0RGVyaXZlZEluc3RhbmNlKHRoaXMpOworCisgICAgICAgIGFkZFBhcmFtZXRlcigKKyAgICAgICAgICAgICAgICBEZWZpbmVQYXJhbShtSW5wdXRGb3JtYXQsIEMyX05BTUVfSU5QVVRfU1RSRUFNX0ZPUk1BVF9TRVRUSU5HKQorICAgICAgICAgICAgICAgIC53aXRoQ29uc3RWYWx1ZShuZXcgQzJTdHJlYW1Gb3JtYXRDb25maWc6OmlucHV0KDB1LCBDMkZvcm1hdENvbXByZXNzZWQpKQorICAgICAgICAgICAgICAgIC5idWlsZCgpKTsKKworICAgICAgICBhZGRQYXJhbWV0ZXIoCisgICAgICAgICAgICAgICAgRGVmaW5lUGFyYW0obU91dHB1dEZvcm1hdCwgQzJfTkFNRV9PVVRQVVRfU1RSRUFNX0ZPUk1BVF9TRVRUSU5HKQorICAgICAgICAgICAgICAgIC53aXRoQ29uc3RWYWx1ZShuZXcgQzJTdHJlYW1Gb3JtYXRDb25maWc6Om91dHB1dCgwdSwgQzJGb3JtYXRBdWRpbykpCisgICAgICAgICAgICAgICAgLmJ1aWxkKCkpOworCisgICAgICAgIGFkZFBhcmFtZXRlcigKKyAgICAgICAgICAgICAgICBEZWZpbmVQYXJhbShtSW5wdXRNZWRpYVR5cGUsIEMyX05BTUVfSU5QVVRfUE9SVF9NSU1FX1NFVFRJTkcpCisgICAgICAgICAgICAgICAgLndpdGhDb25zdFZhbHVlKEFsbG9jU2hhcmVkU3RyaW5nPEMyUG9ydE1pbWVDb25maWc6OmlucHV0PigKKyAgICAgICAgICAgICAgICAgICAgICAgIE1FRElBX01JTUVUWVBFX0FVRElPX0ZMQUMpKQorICAgICAgICAgICAgICAgIC5idWlsZCgpKTsKKworICAgICAgICBhZGRQYXJhbWV0ZXIoCisgICAgICAgICAgICAgICAgRGVmaW5lUGFyYW0obU91dHB1dE1lZGlhVHlwZSwgQzJfTkFNRV9PVVRQVVRfUE9SVF9NSU1FX1NFVFRJTkcpCisgICAgICAgICAgICAgICAgLndpdGhDb25zdFZhbHVlKEFsbG9jU2hhcmVkU3RyaW5nPEMyUG9ydE1pbWVDb25maWc6Om91dHB1dD4oCisgICAgICAgICAgICAgICAgICAgICAgICBNRURJQV9NSU1FVFlQRV9BVURJT19SQVcpKQorICAgICAgICAgICAgICAgIC5idWlsZCgpKTsKKworICAgICAgICBhZGRQYXJhbWV0ZXIoCisgICAgICAgICAgICAgICAgRGVmaW5lUGFyYW0obVNhbXBsZVJhdGUsIEMyX05BTUVfU1RSRUFNX1NBTVBMRV9SQVRFX1NFVFRJTkcpCisgICAgICAgICAgICAgICAgLndpdGhEZWZhdWx0KG5ldyBDMlN0cmVhbVNhbXBsZVJhdGVJbmZvOjpvdXRwdXQoMHUsIDQ0MTAwKSkKKyAgICAgICAgICAgICAgICAud2l0aEZpZWxkcyh7QzJGKG1TYW1wbGVSYXRlLCB2YWx1ZSkuaW5SYW5nZSgxLCA2NTUzNTApfSkKKyAgICAgICAgICAgICAgICAud2l0aFNldHRlcigoU2V0dGVyPGRlY2x0eXBlKCptU2FtcGxlUmF0ZSk+OjpTdHJpY3RWYWx1ZVdpdGhOb0RlcHMpKQorICAgICAgICAgICAgICAgIC5idWlsZCgpKTsKKworICAgICAgICBhZGRQYXJhbWV0ZXIoCisgICAgICAgICAgICAgICAgRGVmaW5lUGFyYW0obUNoYW5uZWxDb3VudCwgQzJfTkFNRV9TVFJFQU1fQ0hBTk5FTF9DT1VOVF9TRVRUSU5HKQorICAgICAgICAgICAgICAgIC53aXRoRGVmYXVsdChuZXcgQzJTdHJlYW1DaGFubmVsQ291bnRJbmZvOjpvdXRwdXQoMHUsIDEpKQorICAgICAgICAgICAgICAgIC53aXRoRmllbGRzKHtDMkYobUNoYW5uZWxDb3VudCwgdmFsdWUpLmluUmFuZ2UoMSwgOCl9KQorICAgICAgICAgICAgICAgIC53aXRoU2V0dGVyKFNldHRlcjxkZWNsdHlwZSgqbUNoYW5uZWxDb3VudCk+OjpTdHJpY3RWYWx1ZVdpdGhOb0RlcHMpCisgICAgICAgICAgICAgICAgLmJ1aWxkKCkpOworCisgICAgICAgIGFkZFBhcmFtZXRlcigKKyAgICAgICAgICAgICAgICBEZWZpbmVQYXJhbShtQml0cmF0ZSwgQzJfTkFNRV9TVFJFQU1fQklUUkFURV9TRVRUSU5HKQorICAgICAgICAgICAgICAgIC53aXRoRGVmYXVsdChuZXcgQzJCaXRyYXRlVHVuaW5nOjppbnB1dCgwdSwgNzY4MDAwKSkKKyAgICAgICAgICAgICAgICAud2l0aEZpZWxkcyh7QzJGKG1CaXRyYXRlLCB2YWx1ZSkuaW5SYW5nZSgxLCAyMTAwMDAwMCl9KQorICAgICAgICAgICAgICAgIC53aXRoU2V0dGVyKFNldHRlcjxkZWNsdHlwZSgqbUJpdHJhdGUpPjo6Tm9uU3RyaWN0VmFsdWVXaXRoTm9EZXBzKQorICAgICAgICAgICAgICAgIC5idWlsZCgpKTsKKworICAgICAgICBhZGRQYXJhbWV0ZXIoCisgICAgICAgICAgICAgICAgRGVmaW5lUGFyYW0obUlucHV0TWF4QnVmU2l6ZSwgQzJfUEFSQU1LRVlfSU5QVVRfTUFYX0JVRkZFUl9TSVpFKQorICAgICAgICAgICAgICAgIC53aXRoQ29uc3RWYWx1ZShuZXcgQzJTdHJlYW1NYXhCdWZmZXJTaXplSW5mbzo6aW5wdXQoMHUsIDMyNzY4KSkKKyAgICAgICAgICAgICAgICAuYnVpbGQoKSk7CisgICAgfQorCitwcml2YXRlOgorICAgIHN0ZDo6c2hhcmVkX3B0cjxDMlN0cmVhbUZvcm1hdENvbmZpZzo6aW5wdXQ+IG1JbnB1dEZvcm1hdDsKKyAgICBzdGQ6OnNoYXJlZF9wdHI8QzJTdHJlYW1Gb3JtYXRDb25maWc6Om91dHB1dD4gbU91dHB1dEZvcm1hdDsKKyAgICBzdGQ6OnNoYXJlZF9wdHI8QzJQb3J0TWltZUNvbmZpZzo6aW5wdXQ+IG1JbnB1dE1lZGlhVHlwZTsKKyAgICBzdGQ6OnNoYXJlZF9wdHI8QzJQb3J0TWltZUNvbmZpZzo6b3V0cHV0PiBtT3V0cHV0TWVkaWFUeXBlOworICAgIHN0ZDo6c2hhcmVkX3B0cjxDMlN0cmVhbVNhbXBsZVJhdGVJbmZvOjpvdXRwdXQ+IG1TYW1wbGVSYXRlOworICAgIHN0ZDo6c2hhcmVkX3B0cjxDMlN0cmVhbUNoYW5uZWxDb3VudEluZm86Om91dHB1dD4gbUNoYW5uZWxDb3VudDsKKyAgICBzdGQ6OnNoYXJlZF9wdHI8QzJCaXRyYXRlVHVuaW5nOjppbnB1dD4gbUJpdHJhdGU7CisgICAgc3RkOjpzaGFyZWRfcHRyPEMyU3RyZWFtTWF4QnVmZmVyU2l6ZUluZm86OmlucHV0PiBtSW5wdXRNYXhCdWZTaXplOworfTsKKworQzJTb2Z0RmxhY0RlYzo6QzJTb2Z0RmxhY0RlYygKKyAgICAgICAgY29uc3QgY2hhciAqbmFtZSwKKyAgICAgICAgYzJfbm9kZV9pZF90IGlkLAorICAgICAgICBjb25zdCBzdGQ6OnNoYXJlZF9wdHI8SW50ZkltcGw+ICZpbnRmSW1wbCkKKyAgICA6IFNpbXBsZUMyQ29tcG9uZW50KHN0ZDo6bWFrZV9zaGFyZWQ8U2ltcGxlSW50ZXJmYWNlPEludGZJbXBsPj4obmFtZSwgaWQsIGludGZJbXBsKSksCisgICAgICBtSW50ZihpbnRmSW1wbCksCisgICAgICBtRkxBQ0RlY29kZXIobnVsbHB0cikgeworfQorCitDMlNvZnRGbGFjRGVjOjp+QzJTb2Z0RmxhY0RlYygpIHsKKyAgICBvblJlbGVhc2UoKTsKK30KKworYzJfc3RhdHVzX3QgQzJTb2Z0RmxhY0RlYzo6b25Jbml0KCkgeworICAgIHN0YXR1c190IGVyciA9IGluaXREZWNvZGVyKCk7CisgICAgcmV0dXJuIGVyciA9PSBPSyA/IEMyX09LIDogQzJfTk9fTUVNT1JZOworfQorCitjMl9zdGF0dXNfdCBDMlNvZnRGbGFjRGVjOjpvblN0b3AoKSB7CisgICAgaWYgKG1GTEFDRGVjb2RlcikgbUZMQUNEZWNvZGVyLT5mbHVzaCgpOworICAgIG1lbXNldCgmbVN0cmVhbUluZm8sIDAsIHNpemVvZihtU3RyZWFtSW5mbykpOworICAgIG1IYXNTdHJlYW1JbmZvID0gZmFsc2U7CisgICAgbVNpZ25hbGxlZEVycm9yID0gZmFsc2U7CisgICAgbVNpZ25hbGxlZE91dHB1dEVvcyA9IGZhbHNlOworICAgIHJldHVybiBDMl9PSzsKK30KKwordm9pZCBDMlNvZnRGbGFjRGVjOjpvblJlc2V0KCkgeworICAgIG1JbnB1dEJ1ZmZlckNvdW50ID0gMDsKKyAgICAodm9pZClvblN0b3AoKTsKK30KKwordm9pZCBDMlNvZnRGbGFjRGVjOjpvblJlbGVhc2UoKSB7CisgICAgbUlucHV0QnVmZmVyQ291bnQgPSAwOworICAgIGlmIChtRkxBQ0RlY29kZXIpIGRlbGV0ZSBtRkxBQ0RlY29kZXI7CisgICAgbUZMQUNEZWNvZGVyID0gbnVsbHB0cjsKK30KKworYzJfc3RhdHVzX3QgQzJTb2Z0RmxhY0RlYzo6b25GbHVzaF9zbSgpIHsKKyAgICByZXR1cm4gb25TdG9wKCk7Cit9CisKK3N0YXR1c190IEMyU29mdEZsYWNEZWM6OmluaXREZWNvZGVyKCkgeworICAgIGlmIChtRkxBQ0RlY29kZXIpIHsKKyAgICAgICAgZGVsZXRlIG1GTEFDRGVjb2RlcjsKKyAgICB9CisgICAgbUZMQUNEZWNvZGVyID0gRkxBQ0RlY29kZXI6OkNyZWF0ZSgpOworICAgIGlmICghbUZMQUNEZWNvZGVyKSB7CisgICAgICAgIEFMT0dFKCJpbml0RGVjb2RlcjogZmFpbGVkIHRvIGNyZWF0ZSBGTEFDRGVjb2RlciIpOworICAgICAgICBtU2lnbmFsbGVkRXJyb3IgPSB0cnVlOworICAgICAgICByZXR1cm4gTk9fTUVNT1JZOworICAgIH0KKworICAgIG1lbXNldCgmbVN0cmVhbUluZm8sIDAsIHNpemVvZihtU3RyZWFtSW5mbykpOworICAgIG1IYXNTdHJlYW1JbmZvID0gZmFsc2U7CisgICAgbVNpZ25hbGxlZEVycm9yID0gZmFsc2U7CisgICAgbVNpZ25hbGxlZE91dHB1dEVvcyA9IGZhbHNlOworICAgIG1JbnB1dEJ1ZmZlckNvdW50ID0gMDsKKworICAgIHJldHVybiBPSzsKK30KKworc3RhdGljIHZvaWQgZmlsbEVtcHR5V29yayhjb25zdCBzdGQ6OnVuaXF1ZV9wdHI8QzJXb3JrPiAmd29yaykgeworICAgIHdvcmstPndvcmtsZXRzLmZyb250KCktPm91dHB1dC5mbGFncyA9IHdvcmstPmlucHV0LmZsYWdzOworICAgIHdvcmstPndvcmtsZXRzLmZyb250KCktPm91dHB1dC5idWZmZXJzLmNsZWFyKCk7CisgICAgd29yay0+d29ya2xldHMuZnJvbnQoKS0+b3V0cHV0Lm9yZGluYWwgPSB3b3JrLT5pbnB1dC5vcmRpbmFsOworICAgIHdvcmstPndvcmtsZXRzUHJvY2Vzc2VkID0gMXU7Cit9CisKKy8vIChUT0RPKSBhZGQgbXVsdGlmcmFtZSBzdXBwb3J0LCBpbiBwbHVnaW4gYW5kIEZMQUNEZWNvZGVyLmNwcAordm9pZCBDMlNvZnRGbGFjRGVjOjpwcm9jZXNzKAorICAgICAgICBjb25zdCBzdGQ6OnVuaXF1ZV9wdHI8QzJXb3JrPiAmd29yaywKKyAgICAgICAgY29uc3Qgc3RkOjpzaGFyZWRfcHRyPEMyQmxvY2tQb29sPiAmcG9vbCkgeworICAgIC8vIEluaXRpYWxpemUgb3V0cHV0IHdvcmsKKyAgICB3b3JrLT5yZXN1bHQgPSBDMl9PSzsKKyAgICB3b3JrLT53b3JrbGV0c1Byb2Nlc3NlZCA9IDF1OworICAgIHdvcmstPndvcmtsZXRzLmZyb250KCktPm91dHB1dC5jb25maWdVcGRhdGUuY2xlYXIoKTsKKyAgICB3b3JrLT53b3JrbGV0cy5mcm9udCgpLT5vdXRwdXQuZmxhZ3MgPSB3b3JrLT5pbnB1dC5mbGFnczsKKworICAgIGlmIChtU2lnbmFsbGVkRXJyb3IgfHwgbVNpZ25hbGxlZE91dHB1dEVvcykgeworICAgICAgICB3b3JrLT5yZXN1bHQgPSBDMl9CQURfVkFMVUU7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBDMlJlYWRWaWV3IHJWaWV3ID0gbUR1bW15UmVhZFZpZXc7CisgICAgc2l6ZV90IGluT2Zmc2V0ID0gMHU7CisgICAgc2l6ZV90IGluU2l6ZSA9IDB1OworICAgIGlmICghd29yay0+aW5wdXQuYnVmZmVycy5lbXB0eSgpKSB7CisgICAgICAgIHJWaWV3ID0gd29yay0+aW5wdXQuYnVmZmVyc1swXS0+ZGF0YSgpLmxpbmVhckJsb2NrcygpLmZyb250KCkubWFwKCkuZ2V0KCk7CisgICAgICAgIGluU2l6ZSA9IHJWaWV3LmNhcGFjaXR5KCk7CisgICAgICAgIGlmIChpblNpemUgJiYgclZpZXcuZXJyb3IoKSkgeworICAgICAgICAgICAgQUxPR0UoInJlYWQgdmlldyBtYXAgZmFpbGVkICVkIiwgclZpZXcuZXJyb3IoKSk7CisgICAgICAgICAgICB3b3JrLT5yZXN1bHQgPSBDMl9DT1JSVVBURUQ7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICB9CisgICAgYm9vbCBlb3MgPSAod29yay0+aW5wdXQuZmxhZ3MgJiBDMkZyYW1lRGF0YTo6RkxBR19FTkRfT0ZfU1RSRUFNKSAhPSAwOworICAgIGJvb2wgY29kZWNDb25maWcgPSAod29yay0+aW5wdXQuZmxhZ3MgJiBDMkZyYW1lRGF0YTo6RkxBR19DT0RFQ19DT05GSUcpICE9IDA7CisKKyAgICBBTE9HVigiaW4gYnVmZmVyIGF0dHIuIHNpemUgJXp1IHRpbWVzdGFtcCAlZCBmcmFtZWluZGV4ICVkIiwgaW5TaXplLAorICAgICAgICAgIChpbnQpd29yay0+aW5wdXQub3JkaW5hbC50aW1lc3RhbXAucGVla3UoKSwgKGludCl3b3JrLT5pbnB1dC5vcmRpbmFsLmZyYW1lSW5kZXgucGVla3UoKSk7CisKKyAgICBpZiAoaW5TaXplID09IDApIHsKKyAgICAgICAgZmlsbEVtcHR5V29yayh3b3JrKTsKKyAgICAgICAgaWYgKGVvcykgeworICAgICAgICAgICAgbVNpZ25hbGxlZE91dHB1dEVvcyA9IHRydWU7CisgICAgICAgICAgICBBTE9HVigic2lnbmFsbGVkIEVPUyIpOworICAgICAgICB9CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAobUlucHV0QnVmZmVyQ291bnQgPT0gMCAmJiAhY29kZWNDb25maWcpIHsKKyAgICAgICAgQUxPR1YoIkZpcnN0IGZyYW1lIGhhcyB0byBpbmNsdWRlIGNvbmZpZ3VyYXRpb24sIGZvcmNpbmcgY29uZmlnIik7CisgICAgICAgIGNvZGVjQ29uZmlnID0gdHJ1ZTsKKyAgICB9CisKKyAgICB1aW50OF90ICppbnB1dCA9IGNvbnN0X2Nhc3Q8dWludDhfdCAqPihyVmlldy5kYXRhKCkgKyBpbk9mZnNldCk7CisgICAgaWYgKGNvZGVjQ29uZmlnKSB7CisgICAgICAgIHN0YXR1c190IGRlY29kZXJFcnIgPSBtRkxBQ0RlY29kZXItPnBhcnNlTWV0YWRhdGEoaW5wdXQsIGluU2l6ZSk7CisgICAgICAgIGlmIChkZWNvZGVyRXJyICE9IE9LICYmIGRlY29kZXJFcnIgIT0gV09VTERfQkxPQ0spIHsKKyAgICAgICAgICAgIEFMT0dFKCJwcm9jZXNzOiBGTEFDRGVjb2RlciBwYXJzZU1ldGFEYXRhIHJldHVybnMgZXJyb3IgJWQiLCBkZWNvZGVyRXJyKTsKKyAgICAgICAgICAgIG1TaWduYWxsZWRFcnJvciA9IHRydWU7CisgICAgICAgICAgICB3b3JrLT5yZXN1bHQgPSBDMl9DT1JSVVBURUQ7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICBtSW5wdXRCdWZmZXJDb3VudCsrOworICAgICAgICBmaWxsRW1wdHlXb3JrKHdvcmspOworICAgICAgICBpZiAoZW9zKSB7CisgICAgICAgICAgICBtU2lnbmFsbGVkT3V0cHV0RW9zID0gdHJ1ZTsKKyAgICAgICAgICAgIEFMT0dWKCJzaWduYWxsZWQgRU9TIik7CisgICAgICAgIH0KKworICAgICAgICBpZiAoZGVjb2RlckVyciA9PSBXT1VMRF9CTE9DSykgeworICAgICAgICAgICAgQUxPR1YoInByb2Nlc3M6IHBhcnNlTWV0YWRhdGEgaXMgQmxvY2tpbmcsIENvbnRpbnVlICVkIiwgZGVjb2RlckVycik7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBtU3RyZWFtSW5mbyA9IG1GTEFDRGVjb2Rlci0+Z2V0U3RyZWFtSW5mbygpOworICAgICAgICAgICAgaWYgKG1TdHJlYW1JbmZvLnNhbXBsZV9yYXRlICYmIG1TdHJlYW1JbmZvLm1heF9ibG9ja3NpemUgJiYKKyAgICAgICAgICAgICAgICBtU3RyZWFtSW5mby5jaGFubmVscykgeworICAgICAgICAgICAgICAgIG1IYXNTdHJlYW1JbmZvID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICBDMlN0cmVhbVNhbXBsZVJhdGVJbmZvOjpvdXRwdXQgc2FtcGxlUmF0ZUluZm8oCisgICAgICAgICAgICAgICAgICAgIDB1LCBtU3RyZWFtSW5mby5zYW1wbGVfcmF0ZSk7CisgICAgICAgICAgICAgICAgQzJTdHJlYW1DaGFubmVsQ291bnRJbmZvOjpvdXRwdXQgY2hhbm5lbENvdW50SW5mbygKKyAgICAgICAgICAgICAgICAgICAgMHUsIG1TdHJlYW1JbmZvLmNoYW5uZWxzKTsKKyAgICAgICAgICAgICAgICBzdGQ6OnZlY3RvcjxzdGQ6OnVuaXF1ZV9wdHI8QzJTZXR0aW5nUmVzdWx0Pj4gZmFpbHVyZXM7CisgICAgICAgICAgICAgICAgYzJfc3RhdHVzX3QgZXJyID0KKyAgICAgICAgICAgICAgICAgICAgbUludGYtPmNvbmZpZyh7JnNhbXBsZVJhdGVJbmZvLCAmY2hhbm5lbENvdW50SW5mb30sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQzJfTUFZX0JMT0NLLCAmZmFpbHVyZXMpOworICAgICAgICAgICAgICAgIGlmIChlcnIgPT0gT0spIHsKKyAgICAgICAgICAgICAgICAgICAgd29yay0+d29ya2xldHMuZnJvbnQoKS0+b3V0cHV0LmNvbmZpZ1VwZGF0ZS5wdXNoX2JhY2soCisgICAgICAgICAgICAgICAgICAgICAgICBDMlBhcmFtOjpDb3B5KHNhbXBsZVJhdGVJbmZvKSk7CisgICAgICAgICAgICAgICAgICAgIHdvcmstPndvcmtsZXRzLmZyb250KCktPm91dHB1dC5jb25maWdVcGRhdGUucHVzaF9iYWNrKAorICAgICAgICAgICAgICAgICAgICAgICAgQzJQYXJhbTo6Q29weShjaGFubmVsQ291bnRJbmZvKSk7CisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgQUxPR0UoIkNvbmZpZyBVcGRhdGUgZmFpbGVkIik7CisgICAgICAgICAgICAgICAgICAgIG1TaWduYWxsZWRFcnJvciA9IHRydWU7CisgICAgICAgICAgICAgICAgICAgIHdvcmstPnJlc3VsdCA9IEMyX0NPUlJVUFRFRDsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIEFMT0dEKCJwcm9jZXNzOiBkZWNvZGVyIGNvbmZpZ3VyYXRpb24gOiAlZCBIeiwgJWQgY2hhbm5lbHMsICVkIHNhbXBsZXMsIgorICAgICAgICAgICAgICAgICAgIiAlZCBibG9jayBzaXplIiwgbVN0cmVhbUluZm8uc2FtcGxlX3JhdGUsIG1TdHJlYW1JbmZvLmNoYW5uZWxzLAorICAgICAgICAgICAgICAgICAgKGludCltU3RyZWFtSW5mby50b3RhbF9zYW1wbGVzLCBtU3RyZWFtSW5mby5tYXhfYmxvY2tzaXplKTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgc2l6ZV90IG91dFNpemU7CisgICAgaWYgKG1IYXNTdHJlYW1JbmZvKQorICAgICAgICBvdXRTaXplID0gbVN0cmVhbUluZm8ubWF4X2Jsb2Nrc2l6ZSAqIG1TdHJlYW1JbmZvLmNoYW5uZWxzICogc2l6ZW9mKHNob3J0KTsKKyAgICBlbHNlCisgICAgICAgIG91dFNpemUgPSBrTWF4QmxvY2tTaXplICogRkxBQ0RlY29kZXI6OmtNYXhDaGFubmVscyAqIHNpemVvZihzaG9ydCk7CisKKyAgICBzdGQ6OnNoYXJlZF9wdHI8QzJMaW5lYXJCbG9jaz4gYmxvY2s7CisgICAgQzJNZW1vcnlVc2FnZSB1c2FnZSA9IHsgQzJNZW1vcnlVc2FnZTo6Q1BVX1JFQUQsIEMyTWVtb3J5VXNhZ2U6OkNQVV9XUklURSB9OworICAgIGMyX3N0YXR1c190IGVyciA9IHBvb2wtPmZldGNoTGluZWFyQmxvY2sob3V0U2l6ZSwgdXNhZ2UsICZibG9jayk7CisgICAgaWYgKGVyciAhPSBDMl9PSykgeworICAgICAgICBBTE9HRSgiZmV0Y2hMaW5lYXJCbG9jayBmb3IgT3V0cHV0IGZhaWxlZCB3aXRoIHN0YXR1cyAlZCIsIGVycik7CisgICAgICAgIHdvcmstPnJlc3VsdCA9IEMyX05PX01FTU9SWTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBDMldyaXRlVmlldyB3VmlldyA9IGJsb2NrLT5tYXAoKS5nZXQoKTsKKyAgICBpZiAod1ZpZXcuZXJyb3IoKSkgeworICAgICAgICBBTE9HRSgid3JpdGUgdmlldyBtYXAgZmFpbGVkICVkIiwgd1ZpZXcuZXJyb3IoKSk7CisgICAgICAgIHdvcmstPnJlc3VsdCA9IEMyX0NPUlJVUFRFRDsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIHNob3J0ICpvdXRwdXQgPSByZWludGVycHJldF9jYXN0PHNob3J0ICo+KHdWaWV3LmRhdGEoKSk7CisgICAgc3RhdHVzX3QgZGVjb2RlckVyciA9IG1GTEFDRGVjb2Rlci0+ZGVjb2RlT25lRnJhbWUoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5wdXQsIGluU2l6ZSwgb3V0cHV0LCAmb3V0U2l6ZSk7CisgICAgaWYgKGRlY29kZXJFcnIgIT0gT0spIHsKKyAgICAgICAgQUxPR0UoInByb2Nlc3M6IEZMQUNEZWNvZGVyIGRlY29kZU9uZUZyYW1lIHJldHVybnMgZXJyb3IgJWQiLCBkZWNvZGVyRXJyKTsKKyAgICAgICAgbVNpZ25hbGxlZEVycm9yID0gdHJ1ZTsKKyAgICAgICAgd29yay0+cmVzdWx0ID0gQzJfQ09SUlVQVEVEOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgbUlucHV0QnVmZmVyQ291bnQrKzsKKyAgICBBTE9HVigib3V0IGJ1ZmZlciBhdHRyLiBzaXplICV6dSIsIG91dFNpemUpOworICAgIHdvcmstPndvcmtsZXRzLmZyb250KCktPm91dHB1dC5mbGFncyA9IHdvcmstPmlucHV0LmZsYWdzOworICAgIHdvcmstPndvcmtsZXRzLmZyb250KCktPm91dHB1dC5idWZmZXJzLmNsZWFyKCk7CisgICAgd29yay0+d29ya2xldHMuZnJvbnQoKS0+b3V0cHV0LmJ1ZmZlcnMucHVzaF9iYWNrKGNyZWF0ZUxpbmVhckJ1ZmZlcihibG9jaywgMCwgb3V0U2l6ZSkpOworICAgIHdvcmstPndvcmtsZXRzLmZyb250KCktPm91dHB1dC5vcmRpbmFsID0gd29yay0+aW5wdXQub3JkaW5hbDsKKyAgICBpZiAoZW9zKSB7CisgICAgICAgIG1TaWduYWxsZWRPdXRwdXRFb3MgPSB0cnVlOworICAgICAgICBBTE9HVigic2lnbmFsbGVkIEVPUyIpOworICAgIH0KK30KKworYzJfc3RhdHVzX3QgQzJTb2Z0RmxhY0RlYzo6ZHJhaW4oCisgICAgICAgIHVpbnQzMl90IGRyYWluTW9kZSwKKyAgICAgICAgY29uc3Qgc3RkOjpzaGFyZWRfcHRyPEMyQmxvY2tQb29sPiAmcG9vbCkgeworICAgICh2b2lkKSBwb29sOworICAgIGlmIChkcmFpbk1vZGUgPT0gTk9fRFJBSU4pIHsKKyAgICAgICAgQUxPR1coImRyYWluIHdpdGggTk9fRFJBSU46IG5vLW9wIik7CisgICAgICAgIHJldHVybiBDMl9PSzsKKyAgICB9CisgICAgaWYgKGRyYWluTW9kZSA9PSBEUkFJTl9DSEFJTikgeworICAgICAgICBBTE9HVygiRFJBSU5fQ0hBSU4gbm90IHN1cHBvcnRlZCIpOworICAgICAgICByZXR1cm4gQzJfT01JVFRFRDsKKyAgICB9CisKKyAgICBpZiAobUZMQUNEZWNvZGVyKSBtRkxBQ0RlY29kZXItPmZsdXNoKCk7CisKKyAgICByZXR1cm4gQzJfT0s7Cit9CisKK2NsYXNzIEMyU29mdEZsYWNEZWNGYWN0b3J5IDogcHVibGljIEMyQ29tcG9uZW50RmFjdG9yeSB7CitwdWJsaWM6CisgICAgQzJTb2Z0RmxhY0RlY0ZhY3RvcnkoKSA6IG1IZWxwZXIoc3RkOjpzdGF0aWNfcG9pbnRlcl9jYXN0PEMyUmVmbGVjdG9ySGVscGVyPigKKyAgICAgICAgICAgIEdldENvZGVjMlBsYXRmb3JtQ29tcG9uZW50U3RvcmUoKS0+Z2V0UGFyYW1SZWZsZWN0b3IoKSkpIHsKKyAgICB9CisKKyAgICB2aXJ0dWFsIGMyX3N0YXR1c190IGNyZWF0ZUNvbXBvbmVudCgKKyAgICAgICAgICAgIGMyX25vZGVfaWRfdCBpZCwKKyAgICAgICAgICAgIHN0ZDo6c2hhcmVkX3B0cjxDMkNvbXBvbmVudD4qIGNvbnN0IGNvbXBvbmVudCwKKyAgICAgICAgICAgIHN0ZDo6ZnVuY3Rpb248dm9pZChDMkNvbXBvbmVudCopPiBkZWxldGVyKSBvdmVycmlkZSB7CisgICAgICAgICpjb21wb25lbnQgPSBzdGQ6OnNoYXJlZF9wdHI8QzJDb21wb25lbnQ+KAorICAgICAgICAgICAgICAgIG5ldyBDMlNvZnRGbGFjRGVjKENPTVBPTkVOVF9OQU1FLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RkOjptYWtlX3NoYXJlZDxDMlNvZnRGbGFjRGVjOjpJbnRmSW1wbD4obUhlbHBlcikpLAorICAgICAgICAgICAgICAgIGRlbGV0ZXIpOworICAgICAgICByZXR1cm4gQzJfT0s7CisgICAgfQorCisgICAgdmlydHVhbCBjMl9zdGF0dXNfdCBjcmVhdGVJbnRlcmZhY2UoCisgICAgICAgICAgICBjMl9ub2RlX2lkX3QgaWQsCisgICAgICAgICAgICBzdGQ6OnNoYXJlZF9wdHI8QzJDb21wb25lbnRJbnRlcmZhY2U+KiBjb25zdCBpbnRlcmZhY2UsCisgICAgICAgICAgICBzdGQ6OmZ1bmN0aW9uPHZvaWQoQzJDb21wb25lbnRJbnRlcmZhY2UqKT4gZGVsZXRlcikgb3ZlcnJpZGUgeworICAgICAgICAqaW50ZXJmYWNlID0gc3RkOjpzaGFyZWRfcHRyPEMyQ29tcG9uZW50SW50ZXJmYWNlPigKKyAgICAgICAgICAgICAgICBuZXcgU2ltcGxlSW50ZXJmYWNlPEMyU29mdEZsYWNEZWM6OkludGZJbXBsPigKKyAgICAgICAgICAgICAgICAgICAgICAgIENPTVBPTkVOVF9OQU1FLCBpZCwgc3RkOjptYWtlX3NoYXJlZDxDMlNvZnRGbGFjRGVjOjpJbnRmSW1wbD4obUhlbHBlcikpLAorICAgICAgICAgICAgICAgIGRlbGV0ZXIpOworICAgICAgICByZXR1cm4gQzJfT0s7CisgICAgfQorCisgICAgdmlydHVhbCB+QzJTb2Z0RmxhY0RlY0ZhY3RvcnkoKSBvdmVycmlkZSA9IGRlZmF1bHQ7CisKK3ByaXZhdGU6CisgICAgc3RkOjpzaGFyZWRfcHRyPEMyUmVmbGVjdG9ySGVscGVyPiBtSGVscGVyOworfTsKKworfSAgLy8gbmFtZXNwYWNlIGFuZHJvaWQKKworZXh0ZXJuICJDIiA6OkMyQ29tcG9uZW50RmFjdG9yeSogQ3JlYXRlQ29kZWMyRmFjdG9yeSgpIHsKKyAgICBBTE9HVigiaW4gJXMiLCBfX2Z1bmNfXyk7CisgICAgcmV0dXJuIG5ldyA6OmFuZHJvaWQ6OkMyU29mdEZsYWNEZWNGYWN0b3J5KCk7Cit9CisKK2V4dGVybiAiQyIgdm9pZCBEZXN0cm95Q29kZWMyRmFjdG9yeSg6OkMyQ29tcG9uZW50RmFjdG9yeSogZmFjdG9yeSkgeworICAgIEFMT0dWKCJpbiAlcyIsIF9fZnVuY19fKTsKKyAgICBkZWxldGUgZmFjdG9yeTsKK30KZGlmZiAtLWdpdCBhL21lZGlhL2NvZGVjMi9jb21wb25lbnRzL2ZsYWMvQzJTb2Z0RmxhY0RlYy5oIGIvbWVkaWEvY29kZWMyL2NvbXBvbmVudHMvZmxhYy9DMlNvZnRGbGFjRGVjLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjQ5MWJmZAotLS0gL2Rldi9udWxsCisrKyBiL21lZGlhL2NvZGVjMi9jb21wb25lbnRzL2ZsYWMvQzJTb2Z0RmxhY0RlYy5oCkBAIC0wLDAgKzEsNjYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTggVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworCisjaWZuZGVmIEFORFJPSURfQzJfU09GVF9GTEFDX0RFQ19IXworI2RlZmluZSBBTkRST0lEX0MyX1NPRlRfRkxBQ19ERUNfSF8KKworI2luY2x1ZGUgPFNpbXBsZUMyQ29tcG9uZW50Lmg+CisKKyNpbmNsdWRlICJGTEFDRGVjb2Rlci5oIgorCituYW1lc3BhY2UgYW5kcm9pZCB7CisKK3N0cnVjdCBDMlNvZnRGbGFjRGVjIDogcHVibGljIFNpbXBsZUMyQ29tcG9uZW50IHsKKyAgICBjbGFzcyBJbnRmSW1wbDsKKworICAgIEMyU29mdEZsYWNEZWMoY29uc3QgY2hhciAqbmFtZSwgYzJfbm9kZV9pZF90IGlkLAorICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0ZDo6c2hhcmVkX3B0cjxJbnRmSW1wbD4gJmludGZJbXBsKTsKKyAgICB2aXJ0dWFsIH5DMlNvZnRGbGFjRGVjKCk7CisKKyAgICAvLyBGcm9tIFNpbXBsZUMyQ29tcG9uZW50CisgICAgYzJfc3RhdHVzX3Qgb25Jbml0KCkgb3ZlcnJpZGU7CisgICAgYzJfc3RhdHVzX3Qgb25TdG9wKCkgb3ZlcnJpZGU7CisgICAgdm9pZCBvblJlc2V0KCkgb3ZlcnJpZGU7CisgICAgdm9pZCBvblJlbGVhc2UoKSBvdmVycmlkZTsKKyAgICBjMl9zdGF0dXNfdCBvbkZsdXNoX3NtKCkgb3ZlcnJpZGU7CisgICAgdm9pZCBwcm9jZXNzKAorICAgICAgICAgICAgY29uc3Qgc3RkOjp1bmlxdWVfcHRyPEMyV29yaz4gJndvcmssCisgICAgICAgICAgICBjb25zdCBzdGQ6OnNoYXJlZF9wdHI8QzJCbG9ja1Bvb2w+ICZwb29sKSBvdmVycmlkZTsKKyAgICBjMl9zdGF0dXNfdCBkcmFpbigKKyAgICAgICAgICAgIHVpbnQzMl90IGRyYWluTW9kZSwKKyAgICAgICAgICAgIGNvbnN0IHN0ZDo6c2hhcmVkX3B0cjxDMkJsb2NrUG9vbD4gJnBvb2wpIG92ZXJyaWRlOworCitwcml2YXRlOgorICAgIGVudW0geworICAgICAgICBrTWF4QmxvY2tTaXplICAgPSA0MDk2CisgICAgfTsKKworICAgIHN0ZDo6c2hhcmVkX3B0cjxJbnRmSW1wbD4gbUludGY7CisgICAgRkxBQ0RlY29kZXIgKm1GTEFDRGVjb2RlcjsKKyAgICBGTEFDX19TdHJlYW1NZXRhZGF0YV9TdHJlYW1JbmZvIG1TdHJlYW1JbmZvOworICAgIGJvb2wgbVNpZ25hbGxlZEVycm9yOworICAgIGJvb2wgbVNpZ25hbGxlZE91dHB1dEVvczsKKyAgICBib29sIG1IYXNTdHJlYW1JbmZvOworICAgIHNpemVfdCBtSW5wdXRCdWZmZXJDb3VudDsKKworICAgIHN0YXR1c190IGluaXREZWNvZGVyKCk7CisKKyAgICBDMl9ET19OT1RfQ09QWShDMlNvZnRGbGFjRGVjKTsKK307CisKK30gIC8vIG5hbWVzcGFjZSBhbmRyb2lkCisKKyNlbmRpZiAgLy8gQU5EUk9JRF9DMl9TT0ZUX0ZMQUNfREVDX0hfCmRpZmYgLS1naXQgYS9tZWRpYS9jb2RlYzIvY29tcG9uZW50cy9mbGFjL0MyU29mdEZsYWNFbmMuY3BwIGIvbWVkaWEvY29kZWMyL2NvbXBvbmVudHMvZmxhYy9DMlNvZnRGbGFjRW5jLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNDE5MmM3Ci0tLSAvZGV2L251bGwKKysrIGIvbWVkaWEvY29kZWMyL2NvbXBvbmVudHMvZmxhYy9DMlNvZnRGbGFjRW5jLmNwcApAQCAtMCwwICsxLDQ2MCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxOCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCisKKy8vI2RlZmluZSBMT0dfTkRFQlVHIDAKKyNkZWZpbmUgTE9HX1RBRyAiQzJTb2Z0RmxhY0VuYyIKKyNpbmNsdWRlIDxsb2cvbG9nLmg+CisKKyNpbmNsdWRlIDxtZWRpYS9zdGFnZWZyaWdodC9mb3VuZGF0aW9uL01lZGlhRGVmcy5oPgorCisjaW5jbHVkZSA8QzJQbGF0Zm9ybVN1cHBvcnQuaD4KKyNpbmNsdWRlIDxTaW1wbGVDMkludGVyZmFjZS5oPgorCisjaW5jbHVkZSAiQzJTb2Z0RmxhY0VuYy5oIgorCituYW1lc3BhY2UgYW5kcm9pZCB7CisKK2NsYXNzIEMyU29mdEZsYWNFbmM6OkludGZJbXBsIDogcHVibGljIEMySW50ZXJmYWNlSGVscGVyIHsKK3B1YmxpYzoKKyAgICBleHBsaWNpdCBJbnRmSW1wbChjb25zdCBzdGQ6OnNoYXJlZF9wdHI8QzJSZWZsZWN0b3JIZWxwZXI+ICZoZWxwZXIpCisgICAgICAgIDogQzJJbnRlcmZhY2VIZWxwZXIoaGVscGVyKSB7CisgICAgICAgIHNldERlcml2ZWRJbnN0YW5jZSh0aGlzKTsKKyAgICAgICAgYWRkUGFyYW1ldGVyKAorICAgICAgICAgICAgICAgIERlZmluZVBhcmFtKG1JbnB1dEZvcm1hdCwgQzJfTkFNRV9JTlBVVF9TVFJFQU1fRk9STUFUX1NFVFRJTkcpCisgICAgICAgICAgICAgICAgLndpdGhDb25zdFZhbHVlKG5ldyBDMlN0cmVhbUZvcm1hdENvbmZpZzo6aW5wdXQoMHUsIEMyRm9ybWF0QXVkaW8pKQorICAgICAgICAgICAgICAgIC5idWlsZCgpKTsKKyAgICAgICAgYWRkUGFyYW1ldGVyKAorICAgICAgICAgICAgICAgIERlZmluZVBhcmFtKG1PdXRwdXRGb3JtYXQsIEMyX05BTUVfT1VUUFVUX1NUUkVBTV9GT1JNQVRfU0VUVElORykKKyAgICAgICAgICAgICAgICAud2l0aENvbnN0VmFsdWUobmV3IEMyU3RyZWFtRm9ybWF0Q29uZmlnOjpvdXRwdXQoMHUsIEMyRm9ybWF0Q29tcHJlc3NlZCkpCisgICAgICAgICAgICAgICAgLmJ1aWxkKCkpOworICAgICAgICBhZGRQYXJhbWV0ZXIoCisgICAgICAgICAgICAgICAgRGVmaW5lUGFyYW0obUlucHV0TWVkaWFUeXBlLCBDMl9OQU1FX0lOUFVUX1BPUlRfTUlNRV9TRVRUSU5HKQorICAgICAgICAgICAgICAgIC53aXRoQ29uc3RWYWx1ZShBbGxvY1NoYXJlZFN0cmluZzxDMlBvcnRNaW1lQ29uZmlnOjppbnB1dD4oCisgICAgICAgICAgICAgICAgICAgICAgICBNRURJQV9NSU1FVFlQRV9BVURJT19SQVcpKQorICAgICAgICAgICAgICAgIC5idWlsZCgpKTsKKyAgICAgICAgYWRkUGFyYW1ldGVyKAorICAgICAgICAgICAgICAgIERlZmluZVBhcmFtKG1PdXRwdXRNZWRpYVR5cGUsIEMyX05BTUVfT1VUUFVUX1BPUlRfTUlNRV9TRVRUSU5HKQorICAgICAgICAgICAgICAgIC53aXRoQ29uc3RWYWx1ZShBbGxvY1NoYXJlZFN0cmluZzxDMlBvcnRNaW1lQ29uZmlnOjpvdXRwdXQ+KAorICAgICAgICAgICAgICAgICAgICAgICAgTUVESUFfTUlNRVRZUEVfQVVESU9fRkxBQykpCisgICAgICAgICAgICAgICAgLmJ1aWxkKCkpOworICAgICAgICBhZGRQYXJhbWV0ZXIoCisgICAgICAgICAgICAgICAgRGVmaW5lUGFyYW0obVNhbXBsZVJhdGUsIEMyX05BTUVfU1RSRUFNX1NBTVBMRV9SQVRFX1NFVFRJTkcpCisgICAgICAgICAgICAgICAgLndpdGhEZWZhdWx0KG5ldyBDMlN0cmVhbVNhbXBsZVJhdGVJbmZvOjppbnB1dCgwdSwgNDQxMDApKQorICAgICAgICAgICAgICAgIC53aXRoRmllbGRzKHtDMkYobVNhbXBsZVJhdGUsIHZhbHVlKS5pblJhbmdlKDEsIDY1NTM1MCl9KQorICAgICAgICAgICAgICAgIC53aXRoU2V0dGVyKChTZXR0ZXI8ZGVjbHR5cGUoKm1TYW1wbGVSYXRlKT46OlN0cmljdFZhbHVlV2l0aE5vRGVwcykpCisgICAgICAgICAgICAgICAgLmJ1aWxkKCkpOworICAgICAgICBhZGRQYXJhbWV0ZXIoCisgICAgICAgICAgICAgICAgRGVmaW5lUGFyYW0obUNoYW5uZWxDb3VudCwgQzJfTkFNRV9TVFJFQU1fQ0hBTk5FTF9DT1VOVF9TRVRUSU5HKQorICAgICAgICAgICAgICAgIC53aXRoRGVmYXVsdChuZXcgQzJTdHJlYW1DaGFubmVsQ291bnRJbmZvOjppbnB1dCgwdSwgMSkpCisgICAgICAgICAgICAgICAgLndpdGhGaWVsZHMoe0MyRihtQ2hhbm5lbENvdW50LCB2YWx1ZSkuaW5SYW5nZSgxLCAyKX0pCisgICAgICAgICAgICAgICAgLndpdGhTZXR0ZXIoU2V0dGVyPGRlY2x0eXBlKCptQ2hhbm5lbENvdW50KT46OlN0cmljdFZhbHVlV2l0aE5vRGVwcykKKyAgICAgICAgICAgICAgICAuYnVpbGQoKSk7CisgICAgICAgIGFkZFBhcmFtZXRlcigKKyAgICAgICAgICAgICAgICBEZWZpbmVQYXJhbShtQml0cmF0ZSwgQzJfTkFNRV9TVFJFQU1fQklUUkFURV9TRVRUSU5HKQorICAgICAgICAgICAgICAgIC53aXRoRGVmYXVsdChuZXcgQzJCaXRyYXRlVHVuaW5nOjpvdXRwdXQoMHUsIDc2ODAwMCkpCisgICAgICAgICAgICAgICAgLndpdGhGaWVsZHMoe0MyRihtQml0cmF0ZSwgdmFsdWUpLmluUmFuZ2UoMSwgMjEwMDAwMDApfSkKKyAgICAgICAgICAgICAgICAud2l0aFNldHRlcihTZXR0ZXI8ZGVjbHR5cGUoKm1CaXRyYXRlKT46Ok5vblN0cmljdFZhbHVlV2l0aE5vRGVwcykKKyAgICAgICAgICAgICAgICAuYnVpbGQoKSk7CisgICAgICAgIGFkZFBhcmFtZXRlcigKKyAgICAgICAgICAgICAgICBEZWZpbmVQYXJhbShtSW5wdXRNYXhCdWZTaXplLCBDMl9QQVJBTUtFWV9JTlBVVF9NQVhfQlVGRkVSX1NJWkUpCisgICAgICAgICAgICAgICAgLndpdGhDb25zdFZhbHVlKG5ldyBDMlN0cmVhbU1heEJ1ZmZlclNpemVJbmZvOjppbnB1dCgwdSwgNDYwOCkpCisgICAgICAgICAgICAgICAgLmJ1aWxkKCkpOworICAgIH0KKworICAgIHVpbnQzMl90IGdldFNhbXBsZVJhdGUoKSBjb25zdCB7IHJldHVybiBtU2FtcGxlUmF0ZS0+dmFsdWU7IH0KKyAgICB1aW50MzJfdCBnZXRDaGFubmVsQ291bnQoKSBjb25zdCB7IHJldHVybiBtQ2hhbm5lbENvdW50LT52YWx1ZTsgfQorICAgIHVpbnQzMl90IGdldEJpdHJhdGUoKSBjb25zdCB7IHJldHVybiBtQml0cmF0ZS0+dmFsdWU7IH0KKworcHJpdmF0ZToKKyAgICBzdGQ6OnNoYXJlZF9wdHI8QzJTdHJlYW1Gb3JtYXRDb25maWc6OmlucHV0PiBtSW5wdXRGb3JtYXQ7CisgICAgc3RkOjpzaGFyZWRfcHRyPEMyU3RyZWFtRm9ybWF0Q29uZmlnOjpvdXRwdXQ+IG1PdXRwdXRGb3JtYXQ7CisgICAgc3RkOjpzaGFyZWRfcHRyPEMyUG9ydE1pbWVDb25maWc6OmlucHV0PiBtSW5wdXRNZWRpYVR5cGU7CisgICAgc3RkOjpzaGFyZWRfcHRyPEMyUG9ydE1pbWVDb25maWc6Om91dHB1dD4gbU91dHB1dE1lZGlhVHlwZTsKKyAgICBzdGQ6OnNoYXJlZF9wdHI8QzJTdHJlYW1TYW1wbGVSYXRlSW5mbzo6aW5wdXQ+IG1TYW1wbGVSYXRlOworICAgIHN0ZDo6c2hhcmVkX3B0cjxDMlN0cmVhbUNoYW5uZWxDb3VudEluZm86OmlucHV0PiBtQ2hhbm5lbENvdW50OworICAgIHN0ZDo6c2hhcmVkX3B0cjxDMkJpdHJhdGVUdW5pbmc6Om91dHB1dD4gbUJpdHJhdGU7CisgICAgc3RkOjpzaGFyZWRfcHRyPEMyU3RyZWFtTWF4QnVmZmVyU2l6ZUluZm86OmlucHV0PiBtSW5wdXRNYXhCdWZTaXplOworfTsKK2NvbnN0ZXhwciBjaGFyIENPTVBPTkVOVF9OQU1FW10gPSAiYzIuYW5kcm9pZC5mbGFjLmVuY29kZXIiOworCitDMlNvZnRGbGFjRW5jOjpDMlNvZnRGbGFjRW5jKAorICAgICAgICBjb25zdCBjaGFyICpuYW1lLAorICAgICAgICBjMl9ub2RlX2lkX3QgaWQsCisgICAgICAgIGNvbnN0IHN0ZDo6c2hhcmVkX3B0cjxJbnRmSW1wbD4gJmludGZJbXBsKQorICAgIDogU2ltcGxlQzJDb21wb25lbnQoc3RkOjptYWtlX3NoYXJlZDxTaW1wbGVJbnRlcmZhY2U8SW50ZkltcGw+PihuYW1lLCBpZCwgaW50ZkltcGwpKSwKKyAgICAgIG1JbnRmKGludGZJbXBsKSwKKyAgICAgIG1GbGFjU3RyZWFtRW5jb2RlcihudWxscHRyKSwKKyAgICAgIG1JbnB1dEJ1ZmZlclBjbTMyKG51bGxwdHIpIHsKK30KKworQzJTb2Z0RmxhY0VuYzo6fkMyU29mdEZsYWNFbmMoKSB7CisgICAgb25SZWxlYXNlKCk7Cit9CisKK2MyX3N0YXR1c190IEMyU29mdEZsYWNFbmM6Om9uSW5pdCgpIHsKKyAgICBtRmxhY1N0cmVhbUVuY29kZXIgPSBGTEFDX19zdHJlYW1fZW5jb2Rlcl9uZXcoKTsKKyAgICBpZiAoIW1GbGFjU3RyZWFtRW5jb2RlcikgcmV0dXJuIEMyX0NPUlJVUFRFRDsKKworICAgIG1JbnB1dEJ1ZmZlclBjbTMyID0gKEZMQUNfX2ludDMyKikgbWFsbG9jKAorICAgICAgICAgICAga0luQmxvY2tTaXplICoga01heE51bUNoYW5uZWxzICogc2l6ZW9mKEZMQUNfX2ludDMyKSk7CisgICAgaWYgKCFtSW5wdXRCdWZmZXJQY20zMikgcmV0dXJuIEMyX05PX01FTU9SWTsKKworICAgIG1TaWduYWxsZWRFcnJvciA9IGZhbHNlOworICAgIG1TaWduYWxsZWRPdXRwdXRFb3MgPSBmYWxzZTsKKyAgICBtQ29tcHJlc3Npb25MZXZlbCA9IEZMQUNfQ09NUFJFU1NJT05fTEVWRUxfREVGQVVMVDsKKyAgICBtSXNGaXJzdEZyYW1lID0gdHJ1ZTsKKyAgICBtQW5jaG9yVGltZVN0YW1wID0gMHVsbDsKKyAgICBtUHJvY2Vzc2VkU2FtcGxlcyA9IDB1OworICAgIG1FbmNvZGVyV3JpdGVEYXRhID0gZmFsc2U7CisgICAgbUVuY29kZXJSZXR1cm5lZE5iQnl0ZXMgPSAwOworICAgIG1IZWFkZXJPZmZzZXQgPSAwOworICAgIG1Xcm90ZUhlYWRlciA9IGZhbHNlOworCisgICAgc3RhdHVzX3QgZXJyID0gY29uZmlndXJlRW5jb2RlcigpOworICAgIHJldHVybiBlcnIgPT0gT0sgPyBDMl9PSyA6IEMyX0NPUlJVUFRFRDsKK30KKwordm9pZCBDMlNvZnRGbGFjRW5jOjpvblJlbGVhc2UoKSB7CisgICAgaWYgKG1GbGFjU3RyZWFtRW5jb2RlcikgeworICAgICAgICBGTEFDX19zdHJlYW1fZW5jb2Rlcl9kZWxldGUobUZsYWNTdHJlYW1FbmNvZGVyKTsKKyAgICAgICAgbUZsYWNTdHJlYW1FbmNvZGVyID0gbnVsbHB0cjsKKyAgICB9CisKKyAgICBpZiAobUlucHV0QnVmZmVyUGNtMzIpIHsKKyAgICAgICAgZnJlZShtSW5wdXRCdWZmZXJQY20zMik7CisgICAgICAgIG1JbnB1dEJ1ZmZlclBjbTMyID0gbnVsbHB0cjsKKyAgICB9Cit9CisKK3ZvaWQgQzJTb2Z0RmxhY0VuYzo6b25SZXNldCgpIHsKKyAgICBtQ29tcHJlc3Npb25MZXZlbCA9IEZMQUNfQ09NUFJFU1NJT05fTEVWRUxfREVGQVVMVDsKKyAgICAodm9pZCkgb25TdG9wKCk7Cit9CisKK2MyX3N0YXR1c190IEMyU29mdEZsYWNFbmM6Om9uU3RvcCgpIHsKKyAgICBtU2lnbmFsbGVkRXJyb3IgPSBmYWxzZTsKKyAgICBtU2lnbmFsbGVkT3V0cHV0RW9zID0gZmFsc2U7CisgICAgbUlzRmlyc3RGcmFtZSA9IHRydWU7CisgICAgbUFuY2hvclRpbWVTdGFtcCA9IDB1bGw7CisgICAgbVByb2Nlc3NlZFNhbXBsZXMgPSAwdTsKKyAgICBtRW5jb2RlcldyaXRlRGF0YSA9IGZhbHNlOworICAgIG1FbmNvZGVyUmV0dXJuZWROYkJ5dGVzID0gMDsKKyAgICBtSGVhZGVyT2Zmc2V0ID0gMDsKKyAgICBtV3JvdGVIZWFkZXIgPSBmYWxzZTsKKworICAgIGMyX3N0YXR1c190IHN0YXR1cyA9IGRyYWluKERSQUlOX0NPTVBPTkVOVF9OT19FT1MsIG51bGxwdHIpOworICAgIGlmIChDMl9PSyAhPSBzdGF0dXMpIHJldHVybiBzdGF0dXM7CisKKyAgICBzdGF0dXNfdCBlcnIgPSBjb25maWd1cmVFbmNvZGVyKCk7CisgICAgaWYgKGVyciAhPSBPSykgbVNpZ25hbGxlZEVycm9yID0gdHJ1ZTsKKyAgICByZXR1cm4gQzJfT0s7Cit9CisKK2MyX3N0YXR1c190IEMyU29mdEZsYWNFbmM6Om9uRmx1c2hfc20oKSB7CisgICAgcmV0dXJuIG9uU3RvcCgpOworfQorCitzdGF0aWMgdm9pZCBmaWxsRW1wdHlXb3JrKGNvbnN0IHN0ZDo6dW5pcXVlX3B0cjxDMldvcms+ICZ3b3JrKSB7CisgICAgd29yay0+d29ya2xldHMuZnJvbnQoKS0+b3V0cHV0LmZsYWdzID0gd29yay0+aW5wdXQuZmxhZ3M7CisgICAgd29yay0+d29ya2xldHMuZnJvbnQoKS0+b3V0cHV0LmJ1ZmZlcnMuY2xlYXIoKTsKKyAgICB3b3JrLT53b3JrbGV0cy5mcm9udCgpLT5vdXRwdXQub3JkaW5hbCA9IHdvcmstPmlucHV0Lm9yZGluYWw7Cit9CisKK3ZvaWQgQzJTb2Z0RmxhY0VuYzo6cHJvY2VzcygKKyAgICAgICAgY29uc3Qgc3RkOjp1bmlxdWVfcHRyPEMyV29yaz4gJndvcmssCisgICAgICAgIGNvbnN0IHN0ZDo6c2hhcmVkX3B0cjxDMkJsb2NrUG9vbD4gJnBvb2wpIHsKKyAgICAvLyBJbml0aWFsaXplIG91dHB1dCB3b3JrCisgICAgd29yay0+cmVzdWx0ID0gQzJfT0s7CisgICAgd29yay0+d29ya2xldHNQcm9jZXNzZWQgPSAxdTsKKyAgICB3b3JrLT53b3JrbGV0cy5mcm9udCgpLT5vdXRwdXQuZmxhZ3MgPSB3b3JrLT5pbnB1dC5mbGFnczsKKworICAgIGlmIChtU2lnbmFsbGVkRXJyb3IgfHwgbVNpZ25hbGxlZE91dHB1dEVvcykgeworICAgICAgICB3b3JrLT5yZXN1bHQgPSBDMl9CQURfVkFMVUU7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBib29sIGVvcyA9ICgod29yay0+aW5wdXQuZmxhZ3MgJiBDMkZyYW1lRGF0YTo6RkxBR19FTkRfT0ZfU1RSRUFNKSAhPSAwKTsKKyAgICBDMlJlYWRWaWV3IHJWaWV3ID0gbUR1bW15UmVhZFZpZXc7CisgICAgc2l6ZV90IGluT2Zmc2V0ID0gMHU7CisgICAgc2l6ZV90IGluU2l6ZSA9IDB1OworICAgIGlmICghd29yay0+aW5wdXQuYnVmZmVycy5lbXB0eSgpKSB7CisgICAgICAgIHJWaWV3ID0gd29yay0+aW5wdXQuYnVmZmVyc1swXS0+ZGF0YSgpLmxpbmVhckJsb2NrcygpLmZyb250KCkubWFwKCkuZ2V0KCk7CisgICAgICAgIGluU2l6ZSA9IHJWaWV3LmNhcGFjaXR5KCk7CisgICAgICAgIGlmIChpblNpemUgJiYgclZpZXcuZXJyb3IoKSkgeworICAgICAgICAgICAgQUxPR0UoInJlYWQgdmlldyBtYXAgZmFpbGVkICVkIiwgclZpZXcuZXJyb3IoKSk7CisgICAgICAgICAgICB3b3JrLT5yZXN1bHQgPSBDMl9DT1JSVVBURUQ7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICB9CisKKyAgICBBTE9HVigiaW4gYnVmZmVyIGF0dHIuIHNpemUgJXp1IHRpbWVzdGFtcCAlZCBmcmFtZWluZGV4ICVkLCBmbGFncyAleCIsCisgICAgICAgICAgICAgIGluU2l6ZSwgKGludCl3b3JrLT5pbnB1dC5vcmRpbmFsLnRpbWVzdGFtcC5wZWVrdSgpLAorICAgICAgICAgICAgICAoaW50KXdvcmstPmlucHV0Lm9yZGluYWwuZnJhbWVJbmRleC5wZWVrdSgpLCB3b3JrLT5pbnB1dC5mbGFncyk7CisgICAgaWYgKG1Jc0ZpcnN0RnJhbWUgJiYgaW5TaXplKSB7CisgICAgICAgIG1BbmNob3JUaW1lU3RhbXAgPSB3b3JrLT5pbnB1dC5vcmRpbmFsLnRpbWVzdGFtcC5wZWVrdWxsKCk7CisgICAgICAgIG1Jc0ZpcnN0RnJhbWUgPSBmYWxzZTsKKyAgICB9CisKKyAgICBpZiAoIW1Xcm90ZUhlYWRlcikgeworICAgICAgICBzdGQ6OnVuaXF1ZV9wdHI8QzJTdHJlYW1Dc2RJbmZvOjpvdXRwdXQ+IGNzZCA9CisgICAgICAgICAgICBDMlN0cmVhbUNzZEluZm86Om91dHB1dDo6QWxsb2NVbmlxdWUobUhlYWRlck9mZnNldCwgMHUpOworICAgICAgICBpZiAoIWNzZCkgeworICAgICAgICAgICAgQUxPR0UoIkNTRCBhbGxvY2F0aW9uIGZhaWxlZCIpOworICAgICAgICAgICAgbVNpZ25hbGxlZEVycm9yID0gdHJ1ZTsKKyAgICAgICAgICAgIHdvcmstPnJlc3VsdCA9IEMyX05PX01FTU9SWTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICBtZW1jcHkoY3NkLT5tLnZhbHVlLCBtSGVhZGVyLCBtSGVhZGVyT2Zmc2V0KTsKKyAgICAgICAgQUxPR1YoInB1dCBjc2QsICVkIGJ5dGVzIiwgbUhlYWRlck9mZnNldCk7CisKKyAgICAgICAgd29yay0+d29ya2xldHMuZnJvbnQoKS0+b3V0cHV0LmNvbmZpZ1VwZGF0ZS5wdXNoX2JhY2soc3RkOjptb3ZlKGNzZCkpOworICAgICAgICBtV3JvdGVIZWFkZXIgPSB0cnVlOworICAgIH0KKworICAgIHVpbnQzMl90IHNhbXBsZVJhdGUgPSBtSW50Zi0+Z2V0U2FtcGxlUmF0ZSgpOworICAgIHVpbnQzMl90IGNoYW5uZWxDb3VudCA9IG1JbnRmLT5nZXRDaGFubmVsQ291bnQoKTsKKyAgICB1aW50NjRfdCBvdXRUaW1lU3RhbXAgPSBtUHJvY2Vzc2VkU2FtcGxlcyAqIDEwMDAwMDBsbCAvIHNhbXBsZVJhdGU7CisKKyAgICBzaXplX3Qgb3V0Q2FwYWNpdHkgPSBpblNpemU7CisgICAgb3V0Q2FwYWNpdHkgKz0gbUJsb2NrU2l6ZSAqIGNoYW5uZWxDb3VudCAqIHNpemVvZihpbnQxNl90KTsKKworICAgIEMyTWVtb3J5VXNhZ2UgdXNhZ2UgPSB7IEMyTWVtb3J5VXNhZ2U6OkNQVV9SRUFELCBDMk1lbW9yeVVzYWdlOjpDUFVfV1JJVEUgfTsKKyAgICBjMl9zdGF0dXNfdCBlcnIgPSBwb29sLT5mZXRjaExpbmVhckJsb2NrKG91dENhcGFjaXR5LCB1c2FnZSwgJm1PdXRwdXRCbG9jayk7CisgICAgaWYgKGVyciAhPSBDMl9PSykgeworICAgICAgICBBTE9HRSgiZmV0Y2hMaW5lYXJCbG9jayBmb3IgT3V0cHV0IGZhaWxlZCB3aXRoIHN0YXR1cyAlZCIsIGVycik7CisgICAgICAgIHdvcmstPnJlc3VsdCA9IEMyX05PX01FTU9SWTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBDMldyaXRlVmlldyB3VmlldyA9IG1PdXRwdXRCbG9jay0+bWFwKCkuZ2V0KCk7CisgICAgaWYgKHdWaWV3LmVycm9yKCkpIHsKKyAgICAgICAgQUxPR0UoIndyaXRlIHZpZXcgbWFwIGZhaWxlZCAlZCIsIHdWaWV3LmVycm9yKCkpOworICAgICAgICB3b3JrLT5yZXN1bHQgPSBDMl9DT1JSVVBURUQ7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBtRW5jb2RlcldyaXRlRGF0YSA9IHRydWU7CisgICAgbUVuY29kZXJSZXR1cm5lZE5iQnl0ZXMgPSAwOworICAgIHNpemVfdCBpblBvcyA9IDA7CisgICAgd2hpbGUgKGluUG9zIDwgaW5TaXplKSB7CisgICAgICAgIGNvbnN0IHVpbnQ4X3QgKmluUHRyID0gclZpZXcuZGF0YSgpICsgaW5PZmZzZXQ7CisgICAgICAgIHNpemVfdCBwcm9jZXNzU2l6ZSA9IE1JTihrSW5CbG9ja1NpemUgKiBjaGFubmVsQ291bnQgKiBzaXplb2YoaW50MTZfdCksIChpblNpemUgLSBpblBvcykpOworICAgICAgICBjb25zdCB1bnNpZ25lZCBuYklucHV0RnJhbWVzID0gcHJvY2Vzc1NpemUgLyAoY2hhbm5lbENvdW50ICogc2l6ZW9mKGludDE2X3QpKTsKKyAgICAgICAgY29uc3QgdW5zaWduZWQgbmJJbnB1dFNhbXBsZXMgPSBwcm9jZXNzU2l6ZSAvIHNpemVvZihpbnQxNl90KTsKKyAgICAgICAgY29uc3QgaW50MTZfdCAqcGNtMTYgPSByZWludGVycHJldF9jYXN0PGNvbnN0IGludDE2X3QgKj4oaW5QdHIgKyBpblBvcyk7CisgICAgICAgIEFMT0dWKCJhYm91dCB0byBlbmNvZGUgJXp1IGJ5dGVzIiwgcHJvY2Vzc1NpemUpOworCisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBuYklucHV0U2FtcGxlczsgaSsrKSB7CisgICAgICAgICAgICBtSW5wdXRCdWZmZXJQY20zMltpXSA9IChGTEFDX19pbnQzMikgcGNtMTZbaV07CisgICAgICAgIH0KKworICAgICAgICBGTEFDX19ib29sIG9rID0gRkxBQ19fc3RyZWFtX2VuY29kZXJfcHJvY2Vzc19pbnRlcmxlYXZlZCgKKyAgICAgICAgICAgICAgICBtRmxhY1N0cmVhbUVuY29kZXIsIG1JbnB1dEJ1ZmZlclBjbTMyLCBuYklucHV0RnJhbWVzKTsKKyAgICAgICAgaWYgKCFvaykgeworICAgICAgICAgICAgQUxPR0UoImVycm9yIGVuY291bnRlcmVkIGR1cmluZyBlbmNvZGluZyIpOworICAgICAgICAgICAgbVNpZ25hbGxlZEVycm9yID0gdHJ1ZTsKKyAgICAgICAgICAgIHdvcmstPnJlc3VsdCA9IEMyX0NPUlJVUFRFRDsKKyAgICAgICAgICAgIG1PdXRwdXRCbG9jay5yZXNldCgpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIGluUG9zICs9IHByb2Nlc3NTaXplOworICAgIH0KKyAgICBpZiAoZW9zICYmIChDMl9PSyAhPSBkcmFpbihEUkFJTl9DT01QT05FTlRfV0lUSF9FT1MsIHBvb2wpKSkgeworICAgICAgICBBTE9HRSgiZXJyb3IgZW5jb3VudGVyZWQgZHVyaW5nIGVuY29kaW5nIik7CisgICAgICAgIG1TaWduYWxsZWRFcnJvciA9IHRydWU7CisgICAgICAgIHdvcmstPnJlc3VsdCA9IEMyX0NPUlJVUFRFRDsKKyAgICAgICAgbU91dHB1dEJsb2NrLnJlc2V0KCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgZmlsbEVtcHR5V29yayh3b3JrKTsKKyAgICBpZiAobUVuY29kZXJSZXR1cm5lZE5iQnl0ZXMgIT0gMCkgeworICAgICAgICBzdGQ6OnNoYXJlZF9wdHI8QzJCdWZmZXI+IGJ1ZmZlciA9IGNyZWF0ZUxpbmVhckJ1ZmZlcihzdGQ6Om1vdmUobU91dHB1dEJsb2NrKSwgMCwgbUVuY29kZXJSZXR1cm5lZE5iQnl0ZXMpOworICAgICAgICB3b3JrLT53b3JrbGV0cy5mcm9udCgpLT5vdXRwdXQuYnVmZmVycy5wdXNoX2JhY2soYnVmZmVyKTsKKyAgICAgICAgd29yay0+d29ya2xldHMuZnJvbnQoKS0+b3V0cHV0Lm9yZGluYWwudGltZXN0YW1wID0gbUFuY2hvclRpbWVTdGFtcCArIG91dFRpbWVTdGFtcDsKKyAgICB9IGVsc2UgeworICAgICAgICBBTE9HVigiZW5jb2RlciBwcm9jZXNzX2ludGVybGVhdmVkIHJldHVybmVkIHdpdGhvdXQgZGF0YSB0byB3cml0ZSIpOworICAgIH0KKyAgICBtT3V0cHV0QmxvY2sgPSBudWxscHRyOworICAgIGlmIChlb3MpIHsKKyAgICAgICAgbVNpZ25hbGxlZE91dHB1dEVvcyA9IHRydWU7CisgICAgICAgIEFMT0dWKCJzaWduYWxsZWQgRU9TIik7CisgICAgfQorICAgIG1FbmNvZGVyV3JpdGVEYXRhID0gZmFsc2U7CisgICAgbUVuY29kZXJSZXR1cm5lZE5iQnl0ZXMgPSAwOworfQorCitGTEFDX19TdHJlYW1FbmNvZGVyV3JpdGVTdGF0dXMgQzJTb2Z0RmxhY0VuYzo6b25FbmNvZGVkRmxhY0F2YWlsYWJsZSgKKyAgICAgICAgY29uc3QgRkxBQ19fYnl0ZSBidWZmZXJbXSwgc2l6ZV90IGJ5dGVzLCB1bnNpZ25lZCBzYW1wbGVzLAorICAgICAgICB1bnNpZ25lZCBjdXJyZW50X2ZyYW1lKSB7CisgICAgKHZvaWQpIGN1cnJlbnRfZnJhbWU7CisgICAgQUxPR1YoIiVzIChieXRlcz0lenUsIHNhbXBsZXM9JXUsIGN1cnJfZnJhbWU9JXUpIiwgX19mdW5jX18sIGJ5dGVzLCBzYW1wbGVzLAorICAgICAgICAgIGN1cnJlbnRfZnJhbWUpOworCisgICAgaWYgKHNhbXBsZXMgPT0gMCkgeworICAgICAgICBBTE9HSSgic2F2aW5nICV6dSBieXRlcyBvZiBoZWFkZXIiLCBieXRlcyk7CisgICAgICAgIG1lbWNweShtSGVhZGVyICsgbUhlYWRlck9mZnNldCwgYnVmZmVyLCBieXRlcyk7CisgICAgICAgIG1IZWFkZXJPZmZzZXQgKz0gYnl0ZXM7Ly8gd2lsbCBjb250YWluIGhlYWRlciBzaXplIHdoZW4gZmluaXNoZWQgcmVjZWl2aW5nIGhlYWRlcgorICAgICAgICByZXR1cm4gRkxBQ19fU1RSRUFNX0VOQ09ERVJfV1JJVEVfU1RBVFVTX09LOworICAgIH0KKworICAgIGlmICgoc2FtcGxlcyA9PSAwKSB8fCAhbUVuY29kZXJXcml0ZURhdGEpIHsKKyAgICAgICAgLy8gY2FsbGVkIGJ5IHRoZSBlbmNvZGVyIGJlY2F1c2UgdGhlcmUncyBoZWFkZXIgZGF0YSB0byBzYXZlLCBidXQgaXQncyBub3QgdGhlIHJvbGUKKyAgICAgICAgLy8gb2YgdGhpcyBjb21wb25lbnQgKHVubGVzcyBXUklURV9GTEFDX0hFQURFUl9JTl9GSVJTVF9CVUZGRVIgaXMgZGVmaW5lZCkKKyAgICAgICAgQUxPR1YoImlnbm9yaW5nICV6dSBieXRlcyBvZiBoZWFkZXIgZGF0YSAoc2FtcGxlcz0lZCkiLCBieXRlcywgc2FtcGxlcyk7CisgICAgICAgIHJldHVybiBGTEFDX19TVFJFQU1fRU5DT0RFUl9XUklURV9TVEFUVVNfT0s7CisgICAgfQorCisgICAgLy8gd3JpdGUgZW5jb2RlZCBkYXRhCisgICAgQzJXcml0ZVZpZXcgd1ZpZXcgPSBtT3V0cHV0QmxvY2stPm1hcCgpLmdldCgpOworICAgIHVpbnQ4X3QqIG91dERhdGEgPSB3Vmlldy5kYXRhKCk7CisgICAgQUxPR1YoIndyaXRpbmcgJXp1IGJ5dGVzIG9mIGVuY29kZWQgZGF0YSBvbiBvdXRwdXQiLCBieXRlcyk7CisgICAgLy8gaW5jcmVtZW50IG1Qcm9jZXNzZWRTYW1wbGVzIHRvIG1haW50YWluIGF1ZGlvIHN5bmNocm9uaXphdGlvbiBkdXJpbmcKKyAgICAvLyBwbGF5IGJhY2sKKyAgICBtUHJvY2Vzc2VkU2FtcGxlcyArPSBzYW1wbGVzOworICAgIGlmIChieXRlcyArIG1FbmNvZGVyUmV0dXJuZWROYkJ5dGVzID4gbU91dHB1dEJsb2NrLT5jYXBhY2l0eSgpKSB7CisgICAgICAgIEFMT0dFKCJub3QgZW5vdWdoIHNwYWNlIGxlZnQgdG8gd3JpdGUgZW5jb2RlZCBkYXRhLCBkcm9wcGluZyAlenUgYnl0ZXMiLCBieXRlcyk7CisgICAgICAgIC8vIGEgZmF0YWwgZXJyb3Igd291bGQgc3RvcCB0aGUgZW5jb2RpbmcKKyAgICAgICAgcmV0dXJuIEZMQUNfX1NUUkVBTV9FTkNPREVSX1dSSVRFX1NUQVRVU19PSzsKKyAgICB9CisgICAgbWVtY3B5KG91dERhdGEgKyBtRW5jb2RlclJldHVybmVkTmJCeXRlcywgYnVmZmVyLCBieXRlcyk7CisgICAgbUVuY29kZXJSZXR1cm5lZE5iQnl0ZXMgKz0gYnl0ZXM7CisgICAgcmV0dXJuIEZMQUNfX1NUUkVBTV9FTkNPREVSX1dSSVRFX1NUQVRVU19PSzsKK30KKworCitzdGF0dXNfdCBDMlNvZnRGbGFjRW5jOjpjb25maWd1cmVFbmNvZGVyKCkgeworICAgIEFMT0dWKCIlcyBudW1DaGFubmVsPSVkLCBzYW1wbGVSYXRlPSVkIiwgX19mdW5jX18sIG1JbnRmLT5nZXRDaGFubmVsQ291bnQoKSwgbUludGYtPmdldFNhbXBsZVJhdGUoKSk7CisKKyAgICBpZiAobVNpZ25hbGxlZEVycm9yIHx8ICFtRmxhY1N0cmVhbUVuY29kZXIpIHsKKyAgICAgICAgQUxPR0UoImNhbid0IGNvbmZpZ3VyZSBlbmNvZGVyOiBubyBlbmNvZGVyIG9yIGludmFsaWQgc3RhdGUiKTsKKyAgICAgICAgcmV0dXJuIFVOS05PV05fRVJST1I7CisgICAgfQorCisgICAgRkxBQ19fYm9vbCBvayA9IHRydWU7CisgICAgb2sgPSBvayAmJiBGTEFDX19zdHJlYW1fZW5jb2Rlcl9zZXRfY2hhbm5lbHMobUZsYWNTdHJlYW1FbmNvZGVyLCBtSW50Zi0+Z2V0Q2hhbm5lbENvdW50KCkpOworICAgIG9rID0gb2sgJiYgRkxBQ19fc3RyZWFtX2VuY29kZXJfc2V0X3NhbXBsZV9yYXRlKG1GbGFjU3RyZWFtRW5jb2RlciwgbUludGYtPmdldFNhbXBsZVJhdGUoKSk7CisgICAgb2sgPSBvayAmJiBGTEFDX19zdHJlYW1fZW5jb2Rlcl9zZXRfYml0c19wZXJfc2FtcGxlKG1GbGFjU3RyZWFtRW5jb2RlciwgMTYpOworICAgIG9rID0gb2sgJiYgRkxBQ19fc3RyZWFtX2VuY29kZXJfc2V0X2NvbXByZXNzaW9uX2xldmVsKG1GbGFjU3RyZWFtRW5jb2RlciwgbUNvbXByZXNzaW9uTGV2ZWwpOworICAgIG9rID0gb2sgJiYgRkxBQ19fc3RyZWFtX2VuY29kZXJfc2V0X3ZlcmlmeShtRmxhY1N0cmVhbUVuY29kZXIsIGZhbHNlKTsKKyAgICBpZiAoIW9rKSB7CisgICAgICAgIEFMT0dFKCJ1bmtub3duIGVycm9yIHdoZW4gY29uZmlndXJpbmcgZW5jb2RlciIpOworICAgICAgICByZXR1cm4gVU5LTk9XTl9FUlJPUjsKKyAgICB9CisKKyAgICBvayAmPSBGTEFDX19TVFJFQU1fRU5DT0RFUl9JTklUX1NUQVRVU19PSyA9PQorICAgICAgICAgICAgRkxBQ19fc3RyZWFtX2VuY29kZXJfaW5pdF9zdHJlYW0obUZsYWNTdHJlYW1FbmNvZGVyLAorICAgICAgICAgICAgICAgICAgICBmbGFjRW5jb2RlcldyaXRlQ2FsbGJhY2sgICAgLyp3cml0ZV9jYWxsYmFjayovLAorICAgICAgICAgICAgICAgICAgICBudWxscHRyIC8qc2Vla19jYWxsYmFjayovLAorICAgICAgICAgICAgICAgICAgICBudWxscHRyIC8qdGVsbF9jYWxsYmFjayovLAorICAgICAgICAgICAgICAgICAgICBudWxscHRyIC8qbWV0YWRhdGFfY2FsbGJhY2sqLywKKyAgICAgICAgICAgICAgICAgICAgKHZvaWQgKikgdGhpcyAvKmNsaWVudF9kYXRhKi8pOworCisgICAgaWYgKCFvaykgeworICAgICAgICBBTE9HRSgidW5rbm93biBlcnJvciB3aGVuIGNvbmZpZ3VyaW5nIGVuY29kZXIiKTsKKyAgICAgICAgcmV0dXJuIFVOS05PV05fRVJST1I7CisgICAgfQorCisgICAgbUJsb2NrU2l6ZSA9IEZMQUNfX3N0cmVhbV9lbmNvZGVyX2dldF9ibG9ja3NpemUobUZsYWNTdHJlYW1FbmNvZGVyKTsKKworICAgIEFMT0dWKCJlbmNvZGVyIHN1Y2Nlc3NmdWxseSBjb25maWd1cmVkIik7CisgICAgcmV0dXJuIE9LOworfQorCitGTEFDX19TdHJlYW1FbmNvZGVyV3JpdGVTdGF0dXMgQzJTb2Z0RmxhY0VuYzo6ZmxhY0VuY29kZXJXcml0ZUNhbGxiYWNrKAorICAgICAgICAgICAgY29uc3QgRkxBQ19fU3RyZWFtRW5jb2RlciAqLAorICAgICAgICAgICAgY29uc3QgRkxBQ19fYnl0ZSBidWZmZXJbXSwKKyAgICAgICAgICAgIHNpemVfdCBieXRlcywKKyAgICAgICAgICAgIHVuc2lnbmVkIHNhbXBsZXMsCisgICAgICAgICAgICB1bnNpZ25lZCBjdXJyZW50X2ZyYW1lLAorICAgICAgICAgICAgdm9pZCAqY2xpZW50X2RhdGEpIHsKKyAgICByZXR1cm4gKChDMlNvZnRGbGFjRW5jKikgY2xpZW50X2RhdGEpLT5vbkVuY29kZWRGbGFjQXZhaWxhYmxlKAorICAgICAgICAgICAgYnVmZmVyLCBieXRlcywgc2FtcGxlcywgY3VycmVudF9mcmFtZSk7Cit9CisKK2MyX3N0YXR1c190IEMyU29mdEZsYWNFbmM6OmRyYWluKAorICAgICAgICB1aW50MzJfdCBkcmFpbk1vZGUsCisgICAgICAgIGNvbnN0IHN0ZDo6c2hhcmVkX3B0cjxDMkJsb2NrUG9vbD4gJnBvb2wpIHsKKyAgICAodm9pZCkgcG9vbDsKKyAgICBzd2l0Y2ggKGRyYWluTW9kZSkgeworICAgICAgICBjYXNlIE5PX0RSQUlOOgorICAgICAgICAgICAgQUxPR1coImRyYWluIHdpdGggTk9fRFJBSU46IG5vLW9wIik7CisgICAgICAgICAgICByZXR1cm4gQzJfT0s7CisgICAgICAgIGNhc2UgRFJBSU5fQ0hBSU46CisgICAgICAgICAgICBBTE9HVygiRFJBSU5fQ0hBSU4gbm90IHN1cHBvcnRlZCIpOworICAgICAgICAgICAgcmV0dXJuIEMyX09NSVRURUQ7CisgICAgICAgIGNhc2UgRFJBSU5fQ09NUE9ORU5UX1dJVEhfRU9TOgorICAgICAgICAgICAgLy8gVE9ETzogVGhpcyBmbGFnIGlzIG5vdCBiZWluZyBzZW50IGJhY2sgdG8gdGhlIGNsaWVudAorICAgICAgICAgICAgLy8gYmVjYXVzZSB0aGVyZSBhcmUgbm8gaXRlbXMgaW4gUGVuZGluZ1dvcmsgcXVldWUgYXMgYWxsIHRoZQorICAgICAgICAgICAgLy8gaW5wdXRzIGFyZSBiZWluZyBzZW50IGJhY2sgd2l0aCBlbXB0eXdvcmsgb3IgdmFsaWQgZW5jb2RlZCBkYXRhCisgICAgICAgICAgICAvLyBtU2lnbmFsbGVkT3V0cHV0RW9zID0gdHJ1ZTsKKyAgICAgICAgY2FzZSBEUkFJTl9DT01QT05FTlRfTk9fRU9TOgorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICByZXR1cm4gQzJfQkFEX1ZBTFVFOworICAgIH0KKyAgICBGTEFDX19ib29sIG9rID0gRkxBQ19fc3RyZWFtX2VuY29kZXJfZmluaXNoKG1GbGFjU3RyZWFtRW5jb2Rlcik7CisgICAgaWYgKCFvaykgcmV0dXJuIEMyX0NPUlJVUFRFRDsKKyAgICBtSXNGaXJzdEZyYW1lID0gdHJ1ZTsKKyAgICBtQW5jaG9yVGltZVN0YW1wID0gMHVsbDsKKyAgICBtUHJvY2Vzc2VkU2FtcGxlcyA9IDB1OworCisgICAgcmV0dXJuIEMyX09LOworfQorCitjbGFzcyBDMlNvZnRGbGFjRW5jRmFjdG9yeSA6IHB1YmxpYyBDMkNvbXBvbmVudEZhY3RvcnkgeworcHVibGljOgorICAgIEMyU29mdEZsYWNFbmNGYWN0b3J5KCkgOiBtSGVscGVyKHN0ZDo6c3RhdGljX3BvaW50ZXJfY2FzdDxDMlJlZmxlY3RvckhlbHBlcj4oCisgICAgICAgICAgICBHZXRDb2RlYzJQbGF0Zm9ybUNvbXBvbmVudFN0b3JlKCktPmdldFBhcmFtUmVmbGVjdG9yKCkpKSB7CisgICAgfQorCisgICAgdmlydHVhbCBjMl9zdGF0dXNfdCBjcmVhdGVDb21wb25lbnQoCisgICAgICAgICAgICBjMl9ub2RlX2lkX3QgaWQsCisgICAgICAgICAgICBzdGQ6OnNoYXJlZF9wdHI8QzJDb21wb25lbnQ+KiBjb25zdCBjb21wb25lbnQsCisgICAgICAgICAgICBzdGQ6OmZ1bmN0aW9uPHZvaWQoQzJDb21wb25lbnQqKT4gZGVsZXRlcikgb3ZlcnJpZGUgeworICAgICAgICAqY29tcG9uZW50ID0gc3RkOjpzaGFyZWRfcHRyPEMyQ29tcG9uZW50PigKKyAgICAgICAgICAgICAgICBuZXcgQzJTb2Z0RmxhY0VuYyhDT01QT05FTlRfTkFNRSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGQ6Om1ha2Vfc2hhcmVkPEMyU29mdEZsYWNFbmM6OkludGZJbXBsPihtSGVscGVyKSksCisgICAgICAgICAgICAgICAgZGVsZXRlcik7CisgICAgICAgIHJldHVybiBDMl9PSzsKKyAgICB9CisKKyAgICB2aXJ0dWFsIGMyX3N0YXR1c190IGNyZWF0ZUludGVyZmFjZSgKKyAgICAgICAgICAgIGMyX25vZGVfaWRfdCBpZCwKKyAgICAgICAgICAgIHN0ZDo6c2hhcmVkX3B0cjxDMkNvbXBvbmVudEludGVyZmFjZT4qIGNvbnN0IGludGVyZmFjZSwKKyAgICAgICAgICAgIHN0ZDo6ZnVuY3Rpb248dm9pZChDMkNvbXBvbmVudEludGVyZmFjZSopPiBkZWxldGVyKSBvdmVycmlkZSB7CisgICAgICAgICppbnRlcmZhY2UgPSBzdGQ6OnNoYXJlZF9wdHI8QzJDb21wb25lbnRJbnRlcmZhY2U+KAorICAgICAgICAgICAgICAgIG5ldyBTaW1wbGVJbnRlcmZhY2U8QzJTb2Z0RmxhY0VuYzo6SW50ZkltcGw+KAorICAgICAgICAgICAgICAgICAgICAgICAgQ09NUE9ORU5UX05BTUUsIGlkLCBzdGQ6Om1ha2Vfc2hhcmVkPEMyU29mdEZsYWNFbmM6OkludGZJbXBsPihtSGVscGVyKSksCisgICAgICAgICAgICAgICAgZGVsZXRlcik7CisgICAgICAgIHJldHVybiBDMl9PSzsKKyAgICB9CisKKyAgICB2aXJ0dWFsIH5DMlNvZnRGbGFjRW5jRmFjdG9yeSgpIG92ZXJyaWRlID0gZGVmYXVsdDsKK3ByaXZhdGU6CisgICAgc3RkOjpzaGFyZWRfcHRyPEMyUmVmbGVjdG9ySGVscGVyPiBtSGVscGVyOworfTsKKworfSAgLy8gbmFtZXNwYWNlIGFuZHJvaWQKKworZXh0ZXJuICJDIiA6OkMyQ29tcG9uZW50RmFjdG9yeSogQ3JlYXRlQ29kZWMyRmFjdG9yeSgpIHsKKyAgICBBTE9HVigiaW4gJXMiLCBfX2Z1bmNfXyk7CisgICAgcmV0dXJuIG5ldyA6OmFuZHJvaWQ6OkMyU29mdEZsYWNFbmNGYWN0b3J5KCk7Cit9CisKK2V4dGVybiAiQyIgdm9pZCBEZXN0cm95Q29kZWMyRmFjdG9yeSg6OkMyQ29tcG9uZW50RmFjdG9yeSogZmFjdG9yeSkgeworICAgIEFMT0dWKCJpbiAlcyIsIF9fZnVuY19fKTsKKyAgICBkZWxldGUgZmFjdG9yeTsKK30KZGlmZiAtLWdpdCBhL21lZGlhL2NvZGVjMi9jb21wb25lbnRzL2ZsYWMvQzJTb2Z0RmxhY0VuYy5oIGIvbWVkaWEvY29kZWMyL2NvbXBvbmVudHMvZmxhYy9DMlNvZnRGbGFjRW5jLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2RmMzA1ZQotLS0gL2Rldi9udWxsCisrKyBiL21lZGlhL2NvZGVjMi9jb21wb25lbnRzL2ZsYWMvQzJTb2Z0RmxhY0VuYy5oCkBAIC0wLDAgKzEsODkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTggVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworCisjaWZuZGVmIEFORFJPSURfQzJfU09GVF9GTEFDX0VOQ19IXworI2RlZmluZSBBTkRST0lEX0MyX1NPRlRfRkxBQ19FTkNfSF8KKworI2luY2x1ZGUgPFNpbXBsZUMyQ29tcG9uZW50Lmg+CisKKyNpbmNsdWRlICJGTEFDL3N0cmVhbV9lbmNvZGVyLmgiCisKKyNkZWZpbmUgRkxBQ19DT01QUkVTU0lPTl9MRVZFTF9NSU4gICAgIDAKKyNkZWZpbmUgRkxBQ19DT01QUkVTU0lPTl9MRVZFTF9ERUZBVUxUIDUKKyNkZWZpbmUgRkxBQ19DT01QUkVTU0lPTl9MRVZFTF9NQVggICAgIDgKKworI2RlZmluZSBGTEFDX0hFQURFUl9TSVpFICAgICAgICAgICAgICAgMTI4CisKKyNkZWZpbmUgTUlOKGEsIGIpICAgICAgICAgICAgICAgICAgICAgICgoKGEpIDwgKGIpKSA/IChhKSA6IChiKSkKKworbmFtZXNwYWNlIGFuZHJvaWQgeworCitjbGFzcyBDMlNvZnRGbGFjRW5jIDogcHVibGljIFNpbXBsZUMyQ29tcG9uZW50IHsKK3B1YmxpYzoKKyAgICBjbGFzcyBJbnRmSW1wbDsKKworICAgIEMyU29mdEZsYWNFbmMoY29uc3QgY2hhciAqbmFtZSwgYzJfbm9kZV9pZF90IGlkLCBjb25zdCBzdGQ6OnNoYXJlZF9wdHI8SW50ZkltcGw+ICZpbnRmSW1wbCk7CisgICAgdmlydHVhbCB+QzJTb2Z0RmxhY0VuYygpOworCisgICAgLy8gRnJvbSBTaW1wbGVDMkNvbXBvbmVudAorICAgIGMyX3N0YXR1c190IG9uSW5pdCgpIG92ZXJyaWRlOworICAgIGMyX3N0YXR1c190IG9uU3RvcCgpIG92ZXJyaWRlOworICAgIHZvaWQgb25SZXNldCgpIG92ZXJyaWRlOworICAgIHZvaWQgb25SZWxlYXNlKCkgb3ZlcnJpZGU7CisgICAgYzJfc3RhdHVzX3Qgb25GbHVzaF9zbSgpIG92ZXJyaWRlOworICAgIHZvaWQgcHJvY2VzcygKKyAgICAgICAgICAgIGNvbnN0IHN0ZDo6dW5pcXVlX3B0cjxDMldvcms+ICZ3b3JrLAorICAgICAgICAgICAgY29uc3Qgc3RkOjpzaGFyZWRfcHRyPEMyQmxvY2tQb29sPiAmcG9vbCkgb3ZlcnJpZGU7CisgICAgYzJfc3RhdHVzX3QgZHJhaW4oCisgICAgICAgICAgICB1aW50MzJfdCBkcmFpbk1vZGUsCisgICAgICAgICAgICBjb25zdCBzdGQ6OnNoYXJlZF9wdHI8QzJCbG9ja1Bvb2w+ICZwb29sKSBvdmVycmlkZTsKKworcHJpdmF0ZToKKyAgICBzdGF0dXNfdCBjb25maWd1cmVFbmNvZGVyKCk7CisgICAgc3RhdGljIEZMQUNfX1N0cmVhbUVuY29kZXJXcml0ZVN0YXR1cyBmbGFjRW5jb2RlcldyaXRlQ2FsbGJhY2soCisgICAgICAgICAgICBjb25zdCBGTEFDX19TdHJlYW1FbmNvZGVyICplbmNvZGVyLCBjb25zdCBGTEFDX19ieXRlIGJ1ZmZlcltdLAorICAgICAgICAgICAgc2l6ZV90IGJ5dGVzLCB1bnNpZ25lZCBzYW1wbGVzLCB1bnNpZ25lZCBjdXJyZW50X2ZyYW1lLAorICAgICAgICAgICAgdm9pZCAqY2xpZW50X2RhdGEpOworICAgIEZMQUNfX1N0cmVhbUVuY29kZXJXcml0ZVN0YXR1cyBvbkVuY29kZWRGbGFjQXZhaWxhYmxlKAorICAgICAgICAgICAgY29uc3QgRkxBQ19fYnl0ZSBidWZmZXJbXSwgc2l6ZV90IGJ5dGVzLCB1bnNpZ25lZCBzYW1wbGVzLAorICAgICAgICAgICAgdW5zaWduZWQgY3VycmVudF9mcmFtZSk7CisKKyAgICBzdGQ6OnNoYXJlZF9wdHI8SW50ZkltcGw+IG1JbnRmOworICAgIGNvbnN0IHVuc2lnbmVkIGludCBrSW5CbG9ja1NpemUgPSAxMTUyOworICAgIGNvbnN0IHVuc2lnbmVkIGludCBrTWF4TnVtQ2hhbm5lbHMgPSAyOworICAgIEZMQUNfX1N0cmVhbUVuY29kZXIqIG1GbGFjU3RyZWFtRW5jb2RlcjsKKyAgICBGTEFDX19pbnQzMiogbUlucHV0QnVmZmVyUGNtMzI7CisgICAgc3RkOjpzaGFyZWRfcHRyPEMyTGluZWFyQmxvY2s+IG1PdXRwdXRCbG9jazsKKyAgICBib29sIG1TaWduYWxsZWRFcnJvcjsKKyAgICBib29sIG1TaWduYWxsZWRPdXRwdXRFb3M7CisgICAgdWludDMyX3QgbUNvbXByZXNzaW9uTGV2ZWw7CisgICAgdWludDMyX3QgbUJsb2NrU2l6ZTsKKyAgICBib29sIG1Jc0ZpcnN0RnJhbWU7CisgICAgdWludDY0X3QgbUFuY2hvclRpbWVTdGFtcDsKKyAgICB1aW50NjRfdCBtUHJvY2Vzc2VkU2FtcGxlczsKKyAgICAvLyBzaG91bGQgdGhlIGRhdGEgcmVjZWl2ZWQgYnkgdGhlIGNhbGxiYWNrIGJlIHdyaXR0ZW4gdG8gdGhlIG91dHB1dCBwb3J0CisgICAgYm9vbCBtRW5jb2RlcldyaXRlRGF0YTsKKyAgICBzaXplX3QgbUVuY29kZXJSZXR1cm5lZE5iQnl0ZXM7CisgICAgdW5zaWduZWQgbUhlYWRlck9mZnNldDsKKyAgICBib29sIG1Xcm90ZUhlYWRlcjsKKyAgICBjaGFyIG1IZWFkZXJbRkxBQ19IRUFERVJfU0laRV07CisKKyAgICBDMl9ET19OT1RfQ09QWShDMlNvZnRGbGFjRW5jKTsKK307CisKK30gIC8vIG5hbWVzcGFjZSBhbmRyb2lkCisKKyNlbmRpZiAgLy8gQU5EUk9JRF9DMl9TT0ZUX0ZMQUNfRU5DX0hfCmRpZmYgLS1naXQgYS9tZWRpYS9jb2RlYzIvY29tcG9uZW50cy9mbGFjL01PRFVMRV9MSUNFTlNFX0FQQUNIRTIgYi9tZWRpYS9jb2RlYzIvY29tcG9uZW50cy9mbGFjL01PRFVMRV9MSUNFTlNFX0FQQUNIRTIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTY5ZGUyOQotLS0gL2Rldi9udWxsCisrKyBiL21lZGlhL2NvZGVjMi9jb21wb25lbnRzL2ZsYWMvTU9EVUxFX0xJQ0VOU0VfQVBBQ0hFMgpkaWZmIC0tZ2l0IGEvbWVkaWEvY29kZWMyL2NvbXBvbmVudHMvZmxhYy9OT1RJQ0UgYi9tZWRpYS9jb2RlYzIvY29tcG9uZW50cy9mbGFjL05PVElDRQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNWIxZWZhCi0tLSAvZGV2L251bGwKKysrIGIvbWVkaWEvY29kZWMyL2NvbXBvbmVudHMvZmxhYy9OT1RJQ0UKQEAgLTAsMCArMSwxOTAgQEAKKworICAgQ29weXJpZ2h0IChjKSAyMDA1LTIwMDgsIFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKworICAgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgICB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisKKyAgIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAgIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgICBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAgIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAgIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorCisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFwYWNoZSBMaWNlbnNlCisgICAgICAgICAgICAgICAgICAgICAgICAgICBWZXJzaW9uIDIuMCwgSmFudWFyeSAyMDA0CisgICAgICAgICAgICAgICAgICAgICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvCisKKyAgIFRFUk1TIEFORCBDT05ESVRJT05TIEZPUiBVU0UsIFJFUFJPRFVDVElPTiwgQU5EIERJU1RSSUJVVElPTgorCisgICAxLiBEZWZpbml0aW9ucy4KKworICAgICAgIkxpY2Vuc2UiIHNoYWxsIG1lYW4gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIGZvciB1c2UsIHJlcHJvZHVjdGlvbiwKKyAgICAgIGFuZCBkaXN0cmlidXRpb24gYXMgZGVmaW5lZCBieSBTZWN0aW9ucyAxIHRocm91Z2ggOSBvZiB0aGlzIGRvY3VtZW50LgorCisgICAgICAiTGljZW5zb3IiIHNoYWxsIG1lYW4gdGhlIGNvcHlyaWdodCBvd25lciBvciBlbnRpdHkgYXV0aG9yaXplZCBieQorICAgICAgdGhlIGNvcHlyaWdodCBvd25lciB0aGF0IGlzIGdyYW50aW5nIHRoZSBMaWNlbnNlLgorCisgICAgICAiTGVnYWwgRW50aXR5IiBzaGFsbCBtZWFuIHRoZSB1bmlvbiBvZiB0aGUgYWN0aW5nIGVudGl0eSBhbmQgYWxsCisgICAgICBvdGhlciBlbnRpdGllcyB0aGF0IGNvbnRyb2wsIGFyZSBjb250cm9sbGVkIGJ5LCBvciBhcmUgdW5kZXIgY29tbW9uCisgICAgICBjb250cm9sIHdpdGggdGhhdCBlbnRpdHkuIEZvciB0aGUgcHVycG9zZXMgb2YgdGhpcyBkZWZpbml0aW9uLAorICAgICAgImNvbnRyb2wiIG1lYW5zIChpKSB0aGUgcG93ZXIsIGRpcmVjdCBvciBpbmRpcmVjdCwgdG8gY2F1c2UgdGhlCisgICAgICBkaXJlY3Rpb24gb3IgbWFuYWdlbWVudCBvZiBzdWNoIGVudGl0eSwgd2hldGhlciBieSBjb250cmFjdCBvcgorICAgICAgb3RoZXJ3aXNlLCBvciAoaWkpIG93bmVyc2hpcCBvZiBmaWZ0eSBwZXJjZW50ICg1MCUpIG9yIG1vcmUgb2YgdGhlCisgICAgICBvdXRzdGFuZGluZyBzaGFyZXMsIG9yIChpaWkpIGJlbmVmaWNpYWwgb3duZXJzaGlwIG9mIHN1Y2ggZW50aXR5LgorCisgICAgICAiWW91IiAob3IgIllvdXIiKSBzaGFsbCBtZWFuIGFuIGluZGl2aWR1YWwgb3IgTGVnYWwgRW50aXR5CisgICAgICBleGVyY2lzaW5nIHBlcm1pc3Npb25zIGdyYW50ZWQgYnkgdGhpcyBMaWNlbnNlLgorCisgICAgICAiU291cmNlIiBmb3JtIHNoYWxsIG1lYW4gdGhlIHByZWZlcnJlZCBmb3JtIGZvciBtYWtpbmcgbW9kaWZpY2F0aW9ucywKKyAgICAgIGluY2x1ZGluZyBidXQgbm90IGxpbWl0ZWQgdG8gc29mdHdhcmUgc291cmNlIGNvZGUsIGRvY3VtZW50YXRpb24KKyAgICAgIHNvdXJjZSwgYW5kIGNvbmZpZ3VyYXRpb24gZmlsZXMuCisKKyAgICAgICJPYmplY3QiIGZvcm0gc2hhbGwgbWVhbiBhbnkgZm9ybSByZXN1bHRpbmcgZnJvbSBtZWNoYW5pY2FsCisgICAgICB0cmFuc2Zvcm1hdGlvbiBvciB0cmFuc2xhdGlvbiBvZiBhIFNvdXJjZSBmb3JtLCBpbmNsdWRpbmcgYnV0CisgICAgICBub3QgbGltaXRlZCB0byBjb21waWxlZCBvYmplY3QgY29kZSwgZ2VuZXJhdGVkIGRvY3VtZW50YXRpb24sCisgICAgICBhbmQgY29udmVyc2lvbnMgdG8gb3RoZXIgbWVkaWEgdHlwZXMuCisKKyAgICAgICJXb3JrIiBzaGFsbCBtZWFuIHRoZSB3b3JrIG9mIGF1dGhvcnNoaXAsIHdoZXRoZXIgaW4gU291cmNlIG9yCisgICAgICBPYmplY3QgZm9ybSwgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIExpY2Vuc2UsIGFzIGluZGljYXRlZCBieSBhCisgICAgICBjb3B5cmlnaHQgbm90aWNlIHRoYXQgaXMgaW5jbHVkZWQgaW4gb3IgYXR0YWNoZWQgdG8gdGhlIHdvcmsKKyAgICAgIChhbiBleGFtcGxlIGlzIHByb3ZpZGVkIGluIHRoZSBBcHBlbmRpeCBiZWxvdykuCisKKyAgICAgICJEZXJpdmF0aXZlIFdvcmtzIiBzaGFsbCBtZWFuIGFueSB3b3JrLCB3aGV0aGVyIGluIFNvdXJjZSBvciBPYmplY3QKKyAgICAgIGZvcm0sIHRoYXQgaXMgYmFzZWQgb24gKG9yIGRlcml2ZWQgZnJvbSkgdGhlIFdvcmsgYW5kIGZvciB3aGljaCB0aGUKKyAgICAgIGVkaXRvcmlhbCByZXZpc2lvbnMsIGFubm90YXRpb25zLCBlbGFib3JhdGlvbnMsIG9yIG90aGVyIG1vZGlmaWNhdGlvbnMKKyAgICAgIHJlcHJlc2VudCwgYXMgYSB3aG9sZSwgYW4gb3JpZ2luYWwgd29yayBvZiBhdXRob3JzaGlwLiBGb3IgdGhlIHB1cnBvc2VzCisgICAgICBvZiB0aGlzIExpY2Vuc2UsIERlcml2YXRpdmUgV29ya3Mgc2hhbGwgbm90IGluY2x1ZGUgd29ya3MgdGhhdCByZW1haW4KKyAgICAgIHNlcGFyYWJsZSBmcm9tLCBvciBtZXJlbHkgbGluayAob3IgYmluZCBieSBuYW1lKSB0byB0aGUgaW50ZXJmYWNlcyBvZiwKKyAgICAgIHRoZSBXb3JrIGFuZCBEZXJpdmF0aXZlIFdvcmtzIHRoZXJlb2YuCisKKyAgICAgICJDb250cmlidXRpb24iIHNoYWxsIG1lYW4gYW55IHdvcmsgb2YgYXV0aG9yc2hpcCwgaW5jbHVkaW5nCisgICAgICB0aGUgb3JpZ2luYWwgdmVyc2lvbiBvZiB0aGUgV29yayBhbmQgYW55IG1vZGlmaWNhdGlvbnMgb3IgYWRkaXRpb25zCisgICAgICB0byB0aGF0IFdvcmsgb3IgRGVyaXZhdGl2ZSBXb3JrcyB0aGVyZW9mLCB0aGF0IGlzIGludGVudGlvbmFsbHkKKyAgICAgIHN1Ym1pdHRlZCB0byBMaWNlbnNvciBmb3IgaW5jbHVzaW9uIGluIHRoZSBXb3JrIGJ5IHRoZSBjb3B5cmlnaHQgb3duZXIKKyAgICAgIG9yIGJ5IGFuIGluZGl2aWR1YWwgb3IgTGVnYWwgRW50aXR5IGF1dGhvcml6ZWQgdG8gc3VibWl0IG9uIGJlaGFsZiBvZgorICAgICAgdGhlIGNvcHlyaWdodCBvd25lci4gRm9yIHRoZSBwdXJwb3NlcyBvZiB0aGlzIGRlZmluaXRpb24sICJzdWJtaXR0ZWQiCisgICAgICBtZWFucyBhbnkgZm9ybSBvZiBlbGVjdHJvbmljLCB2ZXJiYWwsIG9yIHdyaXR0ZW4gY29tbXVuaWNhdGlvbiBzZW50CisgICAgICB0byB0aGUgTGljZW5zb3Igb3IgaXRzIHJlcHJlc2VudGF0aXZlcywgaW5jbHVkaW5nIGJ1dCBub3QgbGltaXRlZCB0bworICAgICAgY29tbXVuaWNhdGlvbiBvbiBlbGVjdHJvbmljIG1haWxpbmcgbGlzdHMsIHNvdXJjZSBjb2RlIGNvbnRyb2wgc3lzdGVtcywKKyAgICAgIGFuZCBpc3N1ZSB0cmFja2luZyBzeXN0ZW1zIHRoYXQgYXJlIG1hbmFnZWQgYnksIG9yIG9uIGJlaGFsZiBvZiwgdGhlCisgICAgICBMaWNlbnNvciBmb3IgdGhlIHB1cnBvc2Ugb2YgZGlzY3Vzc2luZyBhbmQgaW1wcm92aW5nIHRoZSBXb3JrLCBidXQKKyAgICAgIGV4Y2x1ZGluZyBjb21tdW5pY2F0aW9uIHRoYXQgaXMgY29uc3BpY3VvdXNseSBtYXJrZWQgb3Igb3RoZXJ3aXNlCisgICAgICBkZXNpZ25hdGVkIGluIHdyaXRpbmcgYnkgdGhlIGNvcHlyaWdodCBvd25lciBhcyAiTm90IGEgQ29udHJpYnV0aW9uLiIKKworICAgICAgIkNvbnRyaWJ1dG9yIiBzaGFsbCBtZWFuIExpY2Vuc29yIGFuZCBhbnkgaW5kaXZpZHVhbCBvciBMZWdhbCBFbnRpdHkKKyAgICAgIG9uIGJlaGFsZiBvZiB3aG9tIGEgQ29udHJpYnV0aW9uIGhhcyBiZWVuIHJlY2VpdmVkIGJ5IExpY2Vuc29yIGFuZAorICAgICAgc3Vic2VxdWVudGx5IGluY29ycG9yYXRlZCB3aXRoaW4gdGhlIFdvcmsuCisKKyAgIDIuIEdyYW50IG9mIENvcHlyaWdodCBMaWNlbnNlLiBTdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZgorICAgICAgdGhpcyBMaWNlbnNlLCBlYWNoIENvbnRyaWJ1dG9yIGhlcmVieSBncmFudHMgdG8gWW91IGEgcGVycGV0dWFsLAorICAgICAgd29ybGR3aWRlLCBub24tZXhjbHVzaXZlLCBuby1jaGFyZ2UsIHJveWFsdHktZnJlZSwgaXJyZXZvY2FibGUKKyAgICAgIGNvcHlyaWdodCBsaWNlbnNlIHRvIHJlcHJvZHVjZSwgcHJlcGFyZSBEZXJpdmF0aXZlIFdvcmtzIG9mLAorICAgICAgcHVibGljbHkgZGlzcGxheSwgcHVibGljbHkgcGVyZm9ybSwgc3VibGljZW5zZSwgYW5kIGRpc3RyaWJ1dGUgdGhlCisgICAgICBXb3JrIGFuZCBzdWNoIERlcml2YXRpdmUgV29ya3MgaW4gU291cmNlIG9yIE9iamVjdCBmb3JtLgorCisgICAzLiBHcmFudCBvZiBQYXRlbnQgTGljZW5zZS4gU3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YKKyAgICAgIHRoaXMgTGljZW5zZSwgZWFjaCBDb250cmlidXRvciBoZXJlYnkgZ3JhbnRzIHRvIFlvdSBhIHBlcnBldHVhbCwKKyAgICAgIHdvcmxkd2lkZSwgbm9uLWV4Y2x1c2l2ZSwgbm8tY2hhcmdlLCByb3lhbHR5LWZyZWUsIGlycmV2b2NhYmxlCisgICAgICAoZXhjZXB0IGFzIHN0YXRlZCBpbiB0aGlzIHNlY3Rpb24pIHBhdGVudCBsaWNlbnNlIHRvIG1ha2UsIGhhdmUgbWFkZSwKKyAgICAgIHVzZSwgb2ZmZXIgdG8gc2VsbCwgc2VsbCwgaW1wb3J0LCBhbmQgb3RoZXJ3aXNlIHRyYW5zZmVyIHRoZSBXb3JrLAorICAgICAgd2hlcmUgc3VjaCBsaWNlbnNlIGFwcGxpZXMgb25seSB0byB0aG9zZSBwYXRlbnQgY2xhaW1zIGxpY2Vuc2FibGUKKyAgICAgIGJ5IHN1Y2ggQ29udHJpYnV0b3IgdGhhdCBhcmUgbmVjZXNzYXJpbHkgaW5mcmluZ2VkIGJ5IHRoZWlyCisgICAgICBDb250cmlidXRpb24ocykgYWxvbmUgb3IgYnkgY29tYmluYXRpb24gb2YgdGhlaXIgQ29udHJpYnV0aW9uKHMpCisgICAgICB3aXRoIHRoZSBXb3JrIHRvIHdoaWNoIHN1Y2ggQ29udHJpYnV0aW9uKHMpIHdhcyBzdWJtaXR0ZWQuIElmIFlvdQorICAgICAgaW5zdGl0dXRlIHBhdGVudCBsaXRpZ2F0aW9uIGFnYWluc3QgYW55IGVudGl0eSAoaW5jbHVkaW5nIGEKKyAgICAgIGNyb3NzLWNsYWltIG9yIGNvdW50ZXJjbGFpbSBpbiBhIGxhd3N1aXQpIGFsbGVnaW5nIHRoYXQgdGhlIFdvcmsKKyAgICAgIG9yIGEgQ29udHJpYnV0aW9uIGluY29ycG9yYXRlZCB3aXRoaW4gdGhlIFdvcmsgY29uc3RpdHV0ZXMgZGlyZWN0CisgICAgICBvciBjb250cmlidXRvcnkgcGF0ZW50IGluZnJpbmdlbWVudCwgdGhlbiBhbnkgcGF0ZW50IGxpY2Vuc2VzCisgICAgICBncmFudGVkIHRvIFlvdSB1bmRlciB0aGlzIExpY2Vuc2UgZm9yIHRoYXQgV29yayBzaGFsbCB0ZXJtaW5hdGUKKyAgICAgIGFzIG9mIHRoZSBkYXRlIHN1Y2ggbGl0aWdhdGlvbiBpcyBmaWxlZC4KKworICAgNC4gUmVkaXN0cmlidXRpb24uIFlvdSBtYXkgcmVwcm9kdWNlIGFuZCBkaXN0cmlidXRlIGNvcGllcyBvZiB0aGUKKyAgICAgIFdvcmsgb3IgRGVyaXZhdGl2ZSBXb3JrcyB0aGVyZW9mIGluIGFueSBtZWRpdW0sIHdpdGggb3Igd2l0aG91dAorICAgICAgbW9kaWZpY2F0aW9ucywgYW5kIGluIFNvdXJjZSBvciBPYmplY3QgZm9ybSwgcHJvdmlkZWQgdGhhdCBZb3UKKyAgICAgIG1lZXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgorCisgICAgICAoYSkgWW91IG11c3QgZ2l2ZSBhbnkgb3RoZXIgcmVjaXBpZW50cyBvZiB0aGUgV29yayBvcgorICAgICAgICAgIERlcml2YXRpdmUgV29ya3MgYSBjb3B5IG9mIHRoaXMgTGljZW5zZTsgYW5kCisKKyAgICAgIChiKSBZb3UgbXVzdCBjYXVzZSBhbnkgbW9kaWZpZWQgZmlsZXMgdG8gY2FycnkgcHJvbWluZW50IG5vdGljZXMKKyAgICAgICAgICBzdGF0aW5nIHRoYXQgWW91IGNoYW5nZWQgdGhlIGZpbGVzOyBhbmQKKworICAgICAgKGMpIFlvdSBtdXN0IHJldGFpbiwgaW4gdGhlIFNvdXJjZSBmb3JtIG9mIGFueSBEZXJpdmF0aXZlIFdvcmtzCisgICAgICAgICAgdGhhdCBZb3UgZGlzdHJpYnV0ZSwgYWxsIGNvcHlyaWdodCwgcGF0ZW50LCB0cmFkZW1hcmssIGFuZAorICAgICAgICAgIGF0dHJpYnV0aW9uIG5vdGljZXMgZnJvbSB0aGUgU291cmNlIGZvcm0gb2YgdGhlIFdvcmssCisgICAgICAgICAgZXhjbHVkaW5nIHRob3NlIG5vdGljZXMgdGhhdCBkbyBub3QgcGVydGFpbiB0byBhbnkgcGFydCBvZgorICAgICAgICAgIHRoZSBEZXJpdmF0aXZlIFdvcmtzOyBhbmQKKworICAgICAgKGQpIElmIHRoZSBXb3JrIGluY2x1ZGVzIGEgIk5PVElDRSIgdGV4dCBmaWxlIGFzIHBhcnQgb2YgaXRzCisgICAgICAgICAgZGlzdHJpYnV0aW9uLCB0aGVuIGFueSBEZXJpdmF0aXZlIFdvcmtzIHRoYXQgWW91IGRpc3RyaWJ1dGUgbXVzdAorICAgICAgICAgIGluY2x1ZGUgYSByZWFkYWJsZSBjb3B5IG9mIHRoZSBhdHRyaWJ1dGlvbiBub3RpY2VzIGNvbnRhaW5lZAorICAgICAgICAgIHdpdGhpbiBzdWNoIE5PVElDRSBmaWxlLCBleGNsdWRpbmcgdGhvc2Ugbm90aWNlcyB0aGF0IGRvIG5vdAorICAgICAgICAgIHBlcnRhaW4gdG8gYW55IHBhcnQgb2YgdGhlIERlcml2YXRpdmUgV29ya3MsIGluIGF0IGxlYXN0IG9uZQorICAgICAgICAgIG9mIHRoZSBmb2xsb3dpbmcgcGxhY2VzOiB3aXRoaW4gYSBOT1RJQ0UgdGV4dCBmaWxlIGRpc3RyaWJ1dGVkCisgICAgICAgICAgYXMgcGFydCBvZiB0aGUgRGVyaXZhdGl2ZSBXb3Jrczsgd2l0aGluIHRoZSBTb3VyY2UgZm9ybSBvcgorICAgICAgICAgIGRvY3VtZW50YXRpb24sIGlmIHByb3ZpZGVkIGFsb25nIHdpdGggdGhlIERlcml2YXRpdmUgV29ya3M7IG9yLAorICAgICAgICAgIHdpdGhpbiBhIGRpc3BsYXkgZ2VuZXJhdGVkIGJ5IHRoZSBEZXJpdmF0aXZlIFdvcmtzLCBpZiBhbmQKKyAgICAgICAgICB3aGVyZXZlciBzdWNoIHRoaXJkLXBhcnR5IG5vdGljZXMgbm9ybWFsbHkgYXBwZWFyLiBUaGUgY29udGVudHMKKyAgICAgICAgICBvZiB0aGUgTk9USUNFIGZpbGUgYXJlIGZvciBpbmZvcm1hdGlvbmFsIHB1cnBvc2VzIG9ubHkgYW5kCisgICAgICAgICAgZG8gbm90IG1vZGlmeSB0aGUgTGljZW5zZS4gWW91IG1heSBhZGQgWW91ciBvd24gYXR0cmlidXRpb24KKyAgICAgICAgICBub3RpY2VzIHdpdGhpbiBEZXJpdmF0aXZlIFdvcmtzIHRoYXQgWW91IGRpc3RyaWJ1dGUsIGFsb25nc2lkZQorICAgICAgICAgIG9yIGFzIGFuIGFkZGVuZHVtIHRvIHRoZSBOT1RJQ0UgdGV4dCBmcm9tIHRoZSBXb3JrLCBwcm92aWRlZAorICAgICAgICAgIHRoYXQgc3VjaCBhZGRpdGlvbmFsIGF0dHJpYnV0aW9uIG5vdGljZXMgY2Fubm90IGJlIGNvbnN0cnVlZAorICAgICAgICAgIGFzIG1vZGlmeWluZyB0aGUgTGljZW5zZS4KKworICAgICAgWW91IG1heSBhZGQgWW91ciBvd24gY29weXJpZ2h0IHN0YXRlbWVudCB0byBZb3VyIG1vZGlmaWNhdGlvbnMgYW5kCisgICAgICBtYXkgcHJvdmlkZSBhZGRpdGlvbmFsIG9yIGRpZmZlcmVudCBsaWNlbnNlIHRlcm1zIGFuZCBjb25kaXRpb25zCisgICAgICBmb3IgdXNlLCByZXByb2R1Y3Rpb24sIG9yIGRpc3RyaWJ1dGlvbiBvZiBZb3VyIG1vZGlmaWNhdGlvbnMsIG9yCisgICAgICBmb3IgYW55IHN1Y2ggRGVyaXZhdGl2ZSBXb3JrcyBhcyBhIHdob2xlLCBwcm92aWRlZCBZb3VyIHVzZSwKKyAgICAgIHJlcHJvZHVjdGlvbiwgYW5kIGRpc3RyaWJ1dGlvbiBvZiB0aGUgV29yayBvdGhlcndpc2UgY29tcGxpZXMgd2l0aAorICAgICAgdGhlIGNvbmRpdGlvbnMgc3RhdGVkIGluIHRoaXMgTGljZW5zZS4KKworICAgNS4gU3VibWlzc2lvbiBvZiBDb250cmlidXRpb25zLiBVbmxlc3MgWW91IGV4cGxpY2l0bHkgc3RhdGUgb3RoZXJ3aXNlLAorICAgICAgYW55IENvbnRyaWJ1dGlvbiBpbnRlbnRpb25hbGx5IHN1Ym1pdHRlZCBmb3IgaW5jbHVzaW9uIGluIHRoZSBXb3JrCisgICAgICBieSBZb3UgdG8gdGhlIExpY2Vuc29yIHNoYWxsIGJlIHVuZGVyIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZgorICAgICAgdGhpcyBMaWNlbnNlLCB3aXRob3V0IGFueSBhZGRpdGlvbmFsIHRlcm1zIG9yIGNvbmRpdGlvbnMuCisgICAgICBOb3R3aXRoc3RhbmRpbmcgdGhlIGFib3ZlLCBub3RoaW5nIGhlcmVpbiBzaGFsbCBzdXBlcnNlZGUgb3IgbW9kaWZ5CisgICAgICB0aGUgdGVybXMgb2YgYW55IHNlcGFyYXRlIGxpY2Vuc2UgYWdyZWVtZW50IHlvdSBtYXkgaGF2ZSBleGVjdXRlZAorICAgICAgd2l0aCBMaWNlbnNvciByZWdhcmRpbmcgc3VjaCBDb250cmlidXRpb25zLgorCisgICA2LiBUcmFkZW1hcmtzLiBUaGlzIExpY2Vuc2UgZG9lcyBub3QgZ3JhbnQgcGVybWlzc2lvbiB0byB1c2UgdGhlIHRyYWRlCisgICAgICBuYW1lcywgdHJhZGVtYXJrcywgc2VydmljZSBtYXJrcywgb3IgcHJvZHVjdCBuYW1lcyBvZiB0aGUgTGljZW5zb3IsCisgICAgICBleGNlcHQgYXMgcmVxdWlyZWQgZm9yIHJlYXNvbmFibGUgYW5kIGN1c3RvbWFyeSB1c2UgaW4gZGVzY3JpYmluZyB0aGUKKyAgICAgIG9yaWdpbiBvZiB0aGUgV29yayBhbmQgcmVwcm9kdWNpbmcgdGhlIGNvbnRlbnQgb2YgdGhlIE5PVElDRSBmaWxlLgorCisgICA3LiBEaXNjbGFpbWVyIG9mIFdhcnJhbnR5LiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IKKyAgICAgIGFncmVlZCB0byBpbiB3cml0aW5nLCBMaWNlbnNvciBwcm92aWRlcyB0aGUgV29yayAoYW5kIGVhY2gKKyAgICAgIENvbnRyaWJ1dG9yIHByb3ZpZGVzIGl0cyBDb250cmlidXRpb25zKSBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICAgICAgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yCisgICAgICBpbXBsaWVkLCBpbmNsdWRpbmcsIHdpdGhvdXQgbGltaXRhdGlvbiwgYW55IHdhcnJhbnRpZXMgb3IgY29uZGl0aW9ucworICAgICAgb2YgVElUTEUsIE5PTi1JTkZSSU5HRU1FTlQsIE1FUkNIQU5UQUJJTElUWSwgb3IgRklUTkVTUyBGT1IgQQorICAgICAgUEFSVElDVUxBUiBQVVJQT1NFLiBZb3UgYXJlIHNvbGVseSByZXNwb25zaWJsZSBmb3IgZGV0ZXJtaW5pbmcgdGhlCisgICAgICBhcHByb3ByaWF0ZW5lc3Mgb2YgdXNpbmcgb3IgcmVkaXN0cmlidXRpbmcgdGhlIFdvcmsgYW5kIGFzc3VtZSBhbnkKKyAgICAgIHJpc2tzIGFzc29jaWF0ZWQgd2l0aCBZb3VyIGV4ZXJjaXNlIG9mIHBlcm1pc3Npb25zIHVuZGVyIHRoaXMgTGljZW5zZS4KKworICAgOC4gTGltaXRhdGlvbiBvZiBMaWFiaWxpdHkuIEluIG5vIGV2ZW50IGFuZCB1bmRlciBubyBsZWdhbCB0aGVvcnksCisgICAgICB3aGV0aGVyIGluIHRvcnQgKGluY2x1ZGluZyBuZWdsaWdlbmNlKSwgY29udHJhY3QsIG9yIG90aGVyd2lzZSwKKyAgICAgIHVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyAoc3VjaCBhcyBkZWxpYmVyYXRlIGFuZCBncm9zc2x5CisgICAgICBuZWdsaWdlbnQgYWN0cykgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNoYWxsIGFueSBDb250cmlidXRvciBiZQorICAgICAgbGlhYmxlIHRvIFlvdSBmb3IgZGFtYWdlcywgaW5jbHVkaW5nIGFueSBkaXJlY3QsIGluZGlyZWN0LCBzcGVjaWFsLAorICAgICAgaW5jaWRlbnRhbCwgb3IgY29uc2VxdWVudGlhbCBkYW1hZ2VzIG9mIGFueSBjaGFyYWN0ZXIgYXJpc2luZyBhcyBhCisgICAgICByZXN1bHQgb2YgdGhpcyBMaWNlbnNlIG9yIG91dCBvZiB0aGUgdXNlIG9yIGluYWJpbGl0eSB0byB1c2UgdGhlCisgICAgICBXb3JrIChpbmNsdWRpbmcgYnV0IG5vdCBsaW1pdGVkIHRvIGRhbWFnZXMgZm9yIGxvc3Mgb2YgZ29vZHdpbGwsCisgICAgICB3b3JrIHN0b3BwYWdlLCBjb21wdXRlciBmYWlsdXJlIG9yIG1hbGZ1bmN0aW9uLCBvciBhbnkgYW5kIGFsbAorICAgICAgb3RoZXIgY29tbWVyY2lhbCBkYW1hZ2VzIG9yIGxvc3NlcyksIGV2ZW4gaWYgc3VjaCBDb250cmlidXRvcgorICAgICAgaGFzIGJlZW4gYWR2aXNlZCBvZiB0aGUgcG9zc2liaWxpdHkgb2Ygc3VjaCBkYW1hZ2VzLgorCisgICA5LiBBY2NlcHRpbmcgV2FycmFudHkgb3IgQWRkaXRpb25hbCBMaWFiaWxpdHkuIFdoaWxlIHJlZGlzdHJpYnV0aW5nCisgICAgICB0aGUgV29yayBvciBEZXJpdmF0aXZlIFdvcmtzIHRoZXJlb2YsIFlvdSBtYXkgY2hvb3NlIHRvIG9mZmVyLAorICAgICAgYW5kIGNoYXJnZSBhIGZlZSBmb3IsIGFjY2VwdGFuY2Ugb2Ygc3VwcG9ydCwgd2FycmFudHksIGluZGVtbml0eSwKKyAgICAgIG9yIG90aGVyIGxpYWJpbGl0eSBvYmxpZ2F0aW9ucyBhbmQvb3IgcmlnaHRzIGNvbnNpc3RlbnQgd2l0aCB0aGlzCisgICAgICBMaWNlbnNlLiBIb3dldmVyLCBpbiBhY2NlcHRpbmcgc3VjaCBvYmxpZ2F0aW9ucywgWW91IG1heSBhY3Qgb25seQorICAgICAgb24gWW91ciBvd24gYmVoYWxmIGFuZCBvbiBZb3VyIHNvbGUgcmVzcG9uc2liaWxpdHksIG5vdCBvbiBiZWhhbGYKKyAgICAgIG9mIGFueSBvdGhlciBDb250cmlidXRvciwgYW5kIG9ubHkgaWYgWW91IGFncmVlIHRvIGluZGVtbmlmeSwKKyAgICAgIGRlZmVuZCwgYW5kIGhvbGQgZWFjaCBDb250cmlidXRvciBoYXJtbGVzcyBmb3IgYW55IGxpYWJpbGl0eQorICAgICAgaW5jdXJyZWQgYnksIG9yIGNsYWltcyBhc3NlcnRlZCBhZ2FpbnN0LCBzdWNoIENvbnRyaWJ1dG9yIGJ5IHJlYXNvbgorICAgICAgb2YgeW91ciBhY2NlcHRpbmcgYW55IHN1Y2ggd2FycmFudHkgb3IgYWRkaXRpb25hbCBsaWFiaWxpdHkuCisKKyAgIEVORCBPRiBURVJNUyBBTkQgQ09ORElUSU9OUworCmRpZmYgLS1naXQgYS9tZWRpYS9jb2RlYzIvY29tcG9uZW50cy9nNzExL0FuZHJvaWQuYnAgYi9tZWRpYS9jb2RlYzIvY29tcG9uZW50cy9nNzExL0FuZHJvaWQuYnAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2VkZTY4YwotLS0gL2Rldi9udWxsCisrKyBiL21lZGlhL2NvZGVjMi9jb21wb25lbnRzL2c3MTEvQW5kcm9pZC5icApAQCAtMCwwICsxLDIzIEBACitjY19saWJyYXJ5X3NoYXJlZCB7CisgICAgbmFtZTogImxpYmNvZGVjMl9zb2Z0X2c3MTFhbGF3ZGVjIiwKKyAgICBkZWZhdWx0czogWworICAgICAgICAibGliY29kZWMyX3NvZnQtZGVmYXVsdHMiLAorICAgICAgICAibGliY29kZWMyX3NvZnRfc2FuaXRpemVfYWxsLWRlZmF1bHRzIiwKKyAgICBdLAorCisgICAgc3JjczogWyJDMlNvZnRHNzExRGVjLmNwcCJdLAorCisgICAgY2ZsYWdzOiBbCisgICAgICAgICItREFMQVciLAorICAgIF0sCit9CisKK2NjX2xpYnJhcnlfc2hhcmVkIHsKKyAgICBuYW1lOiAibGliY29kZWMyX3NvZnRfZzcxMW1sYXdkZWMiLAorICAgIGRlZmF1bHRzOiBbCisgICAgICAgICJsaWJjb2RlYzJfc29mdC1kZWZhdWx0cyIsCisgICAgICAgICJsaWJjb2RlYzJfc29mdF9zYW5pdGl6ZV9hbGwtZGVmYXVsdHMiLAorICAgIF0sCisKKyAgICBzcmNzOiBbIkMyU29mdEc3MTFEZWMuY3BwIl0sCit9CmRpZmYgLS1naXQgYS9tZWRpYS9jb2RlYzIvY29tcG9uZW50cy9nNzExL0MyU29mdEc3MTFEZWMuY3BwIGIvbWVkaWEvY29kZWMyL2NvbXBvbmVudHMvZzcxMS9DMlNvZnRHNzExRGVjLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xYzcxZDQ1Ci0tLSAvZGV2L251bGwKKysrIGIvbWVkaWEvY29kZWMyL2NvbXBvbmVudHMvZzcxMS9DMlNvZnRHNzExRGVjLmNwcApAQCAtMCwwICsxLDMyMyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxOCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCisKKy8vI2RlZmluZSBMT0dfTkRFQlVHIDAKKyNkZWZpbmUgTE9HX1RBRyAiQzJTb2Z0RzcxMURlYyIKKyNpbmNsdWRlIDxsb2cvbG9nLmg+CisKKyNpbmNsdWRlIDxtZWRpYS9zdGFnZWZyaWdodC9mb3VuZGF0aW9uL01lZGlhRGVmcy5oPgorCisjaW5jbHVkZSA8QzJQbGF0Zm9ybVN1cHBvcnQuaD4KKyNpbmNsdWRlIDxTaW1wbGVDMkludGVyZmFjZS5oPgorCisjaW5jbHVkZSAiQzJTb2Z0RzcxMURlYy5oIgorCituYW1lc3BhY2UgYW5kcm9pZCB7CisKKyNpZmRlZiBBTEFXCitjb25zdGV4cHIgY2hhciBDT01QT05FTlRfTkFNRVtdID0gImMyLmFuZHJvaWQuZzcxMS5hbGF3LmRlY29kZXIiOworI2Vsc2UKK2NvbnN0ZXhwciBjaGFyIENPTVBPTkVOVF9OQU1FW10gPSAiYzIuYW5kcm9pZC5nNzExLm1sYXcuZGVjb2RlciI7CisjZW5kaWYKKworY2xhc3MgQzJTb2Z0RzcxMURlYzo6SW50ZkltcGwgOiBwdWJsaWMgQzJJbnRlcmZhY2VIZWxwZXIgeworcHVibGljOgorICAgIGV4cGxpY2l0IEludGZJbXBsKGNvbnN0IHN0ZDo6c2hhcmVkX3B0cjxDMlJlZmxlY3RvckhlbHBlcj4gJmhlbHBlcikKKyAgICAgICAgOiBDMkludGVyZmFjZUhlbHBlcihoZWxwZXIpIHsKKworICAgICAgICBzZXREZXJpdmVkSW5zdGFuY2UodGhpcyk7CisKKyAgICAgICAgYWRkUGFyYW1ldGVyKAorICAgICAgICAgICAgICAgIERlZmluZVBhcmFtKG1JbnB1dEZvcm1hdCwgQzJfTkFNRV9JTlBVVF9TVFJFQU1fRk9STUFUX1NFVFRJTkcpCisgICAgICAgICAgICAgICAgLndpdGhDb25zdFZhbHVlKG5ldyBDMlN0cmVhbUZvcm1hdENvbmZpZzo6aW5wdXQoMHUsIEMyRm9ybWF0Q29tcHJlc3NlZCkpCisgICAgICAgICAgICAgICAgLmJ1aWxkKCkpOworCisgICAgICAgIGFkZFBhcmFtZXRlcigKKyAgICAgICAgICAgICAgICBEZWZpbmVQYXJhbShtT3V0cHV0Rm9ybWF0LCBDMl9OQU1FX09VVFBVVF9TVFJFQU1fRk9STUFUX1NFVFRJTkcpCisgICAgICAgICAgICAgICAgLndpdGhDb25zdFZhbHVlKG5ldyBDMlN0cmVhbUZvcm1hdENvbmZpZzo6b3V0cHV0KDB1LCBDMkZvcm1hdEF1ZGlvKSkKKyAgICAgICAgICAgICAgICAuYnVpbGQoKSk7CisKKyAgICAgICAgYWRkUGFyYW1ldGVyKAorICAgICAgICAgICAgICAgIERlZmluZVBhcmFtKG1JbnB1dE1lZGlhVHlwZSwgQzJfTkFNRV9JTlBVVF9QT1JUX01JTUVfU0VUVElORykKKyAgICAgICAgICAgICAgICAud2l0aENvbnN0VmFsdWUoQWxsb2NTaGFyZWRTdHJpbmc8QzJQb3J0TWltZUNvbmZpZzo6aW5wdXQ+KAorI2lmZGVmIEFMQVcKKyAgICAgICAgICAgICAgICAgICAgICAgIE1FRElBX01JTUVUWVBFX0FVRElPX0c3MTFfQUxBVworI2Vsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgIE1FRElBX01JTUVUWVBFX0FVRElPX0c3MTFfTUxBVworI2VuZGlmCisgICAgICAgICAgICAgICAgKSkuYnVpbGQoKSk7CisKKyAgICAgICAgYWRkUGFyYW1ldGVyKAorICAgICAgICAgICAgICAgIERlZmluZVBhcmFtKG1PdXRwdXRNZWRpYVR5cGUsIEMyX05BTUVfT1VUUFVUX1BPUlRfTUlNRV9TRVRUSU5HKQorICAgICAgICAgICAgICAgIC53aXRoQ29uc3RWYWx1ZShBbGxvY1NoYXJlZFN0cmluZzxDMlBvcnRNaW1lQ29uZmlnOjpvdXRwdXQ+KAorICAgICAgICAgICAgICAgICAgICAgICAgTUVESUFfTUlNRVRZUEVfQVVESU9fUkFXKSkKKyAgICAgICAgICAgICAgICAuYnVpbGQoKSk7CisKKyAgICAgICAgYWRkUGFyYW1ldGVyKAorICAgICAgICAgICAgICAgIERlZmluZVBhcmFtKG1TYW1wbGVSYXRlLCBDMl9OQU1FX1NUUkVBTV9TQU1QTEVfUkFURV9TRVRUSU5HKQorICAgICAgICAgICAgICAgIC53aXRoRGVmYXVsdChuZXcgQzJTdHJlYW1TYW1wbGVSYXRlSW5mbzo6b3V0cHV0KDB1LCA4MDAwKSkKKyAgICAgICAgICAgICAgICAud2l0aEZpZWxkcyh7QzJGKG1TYW1wbGVSYXRlLCB2YWx1ZSkuaW5SYW5nZSg4MDAwLCA0ODAwMCl9KQorICAgICAgICAgICAgICAgIC53aXRoU2V0dGVyKChTZXR0ZXI8ZGVjbHR5cGUoKm1TYW1wbGVSYXRlKT46OlN0cmljdFZhbHVlV2l0aE5vRGVwcykpCisgICAgICAgICAgICAgICAgLmJ1aWxkKCkpOworCisgICAgICAgIGFkZFBhcmFtZXRlcigKKyAgICAgICAgICAgICAgICBEZWZpbmVQYXJhbShtQ2hhbm5lbENvdW50LCBDMl9OQU1FX1NUUkVBTV9DSEFOTkVMX0NPVU5UX1NFVFRJTkcpCisgICAgICAgICAgICAgICAgLndpdGhEZWZhdWx0KG5ldyBDMlN0cmVhbUNoYW5uZWxDb3VudEluZm86Om91dHB1dCgwdSwgMSkpCisgICAgICAgICAgICAgICAgLndpdGhGaWVsZHMoe0MyRihtQ2hhbm5lbENvdW50LCB2YWx1ZSkuZXF1YWxUbygxKX0pCisgICAgICAgICAgICAgICAgLndpdGhTZXR0ZXIoU2V0dGVyPGRlY2x0eXBlKCptQ2hhbm5lbENvdW50KT46OlN0cmljdFZhbHVlV2l0aE5vRGVwcykKKyAgICAgICAgICAgICAgICAuYnVpbGQoKSk7CisKKyAgICAgICAgYWRkUGFyYW1ldGVyKAorICAgICAgICAgICAgICAgIERlZmluZVBhcmFtKG1CaXRyYXRlLCBDMl9OQU1FX1NUUkVBTV9CSVRSQVRFX1NFVFRJTkcpCisgICAgICAgICAgICAgICAgLndpdGhEZWZhdWx0KG5ldyBDMkJpdHJhdGVUdW5pbmc6OmlucHV0KDB1LCA2NDAwMCkpCisgICAgICAgICAgICAgICAgLndpdGhGaWVsZHMoe0MyRihtQml0cmF0ZSwgdmFsdWUpLmVxdWFsVG8oNjQwMDApfSkKKyAgICAgICAgICAgICAgICAud2l0aFNldHRlcihTZXR0ZXI8ZGVjbHR5cGUoKm1CaXRyYXRlKT46Ok5vblN0cmljdFZhbHVlV2l0aE5vRGVwcykKKyAgICAgICAgICAgICAgICAuYnVpbGQoKSk7CisKKyAgICAgICAgYWRkUGFyYW1ldGVyKAorICAgICAgICAgICAgICAgIERlZmluZVBhcmFtKG1JbnB1dE1heEJ1ZlNpemUsIEMyX1BBUkFNS0VZX0lOUFVUX01BWF9CVUZGRVJfU0laRSkKKyAgICAgICAgICAgICAgICAud2l0aENvbnN0VmFsdWUobmV3IEMyU3RyZWFtTWF4QnVmZmVyU2l6ZUluZm86OmlucHV0KDB1LCA4MTkyKSkKKyAgICAgICAgICAgICAgICAuYnVpbGQoKSk7CisgICAgfQorCitwcml2YXRlOgorICAgIHN0ZDo6c2hhcmVkX3B0cjxDMlN0cmVhbUZvcm1hdENvbmZpZzo6aW5wdXQ+IG1JbnB1dEZvcm1hdDsKKyAgICBzdGQ6OnNoYXJlZF9wdHI8QzJTdHJlYW1Gb3JtYXRDb25maWc6Om91dHB1dD4gbU91dHB1dEZvcm1hdDsKKyAgICBzdGQ6OnNoYXJlZF9wdHI8QzJQb3J0TWltZUNvbmZpZzo6aW5wdXQ+IG1JbnB1dE1lZGlhVHlwZTsKKyAgICBzdGQ6OnNoYXJlZF9wdHI8QzJQb3J0TWltZUNvbmZpZzo6b3V0cHV0PiBtT3V0cHV0TWVkaWFUeXBlOworICAgIHN0ZDo6c2hhcmVkX3B0cjxDMlN0cmVhbVNhbXBsZVJhdGVJbmZvOjpvdXRwdXQ+IG1TYW1wbGVSYXRlOworICAgIHN0ZDo6c2hhcmVkX3B0cjxDMlN0cmVhbUNoYW5uZWxDb3VudEluZm86Om91dHB1dD4gbUNoYW5uZWxDb3VudDsKKyAgICBzdGQ6OnNoYXJlZF9wdHI8QzJCaXRyYXRlVHVuaW5nOjppbnB1dD4gbUJpdHJhdGU7CisgICAgc3RkOjpzaGFyZWRfcHRyPEMyU3RyZWFtTWF4QnVmZmVyU2l6ZUluZm86OmlucHV0PiBtSW5wdXRNYXhCdWZTaXplOworfTsKKworQzJTb2Z0RzcxMURlYzo6QzJTb2Z0RzcxMURlYygKKyAgICAgICAgY29uc3QgY2hhciAqbmFtZSwKKyAgICAgICAgYzJfbm9kZV9pZF90IGlkLAorICAgICAgICBjb25zdCBzdGQ6OnNoYXJlZF9wdHI8SW50ZkltcGw+ICZpbnRmSW1wbCkKKyAgICA6IFNpbXBsZUMyQ29tcG9uZW50KHN0ZDo6bWFrZV9zaGFyZWQ8U2ltcGxlSW50ZXJmYWNlPEludGZJbXBsPj4obmFtZSwgaWQsIGludGZJbXBsKSksCisgICAgICBtSW50ZihpbnRmSW1wbCkgeworfQorCitDMlNvZnRHNzExRGVjOjp+QzJTb2Z0RzcxMURlYygpIHsKKyAgICBvblJlbGVhc2UoKTsKK30KKworYzJfc3RhdHVzX3QgQzJTb2Z0RzcxMURlYzo6b25Jbml0KCkgeworICAgIG1TaWduYWxsZWRPdXRwdXRFb3MgPSBmYWxzZTsKKyAgICByZXR1cm4gQzJfT0s7Cit9CisKK2MyX3N0YXR1c190IEMyU29mdEc3MTFEZWM6Om9uU3RvcCgpIHsKKyAgICBtU2lnbmFsbGVkT3V0cHV0RW9zID0gZmFsc2U7CisgICAgcmV0dXJuIEMyX09LOworfQorCit2b2lkIEMyU29mdEc3MTFEZWM6Om9uUmVzZXQoKSB7CisgICAgKHZvaWQpb25TdG9wKCk7Cit9CisKK3ZvaWQgQzJTb2Z0RzcxMURlYzo6b25SZWxlYXNlKCkgeworfQorCitjMl9zdGF0dXNfdCBDMlNvZnRHNzExRGVjOjpvbkZsdXNoX3NtKCkgeworICAgIHJldHVybiBvblN0b3AoKTsKK30KKwordm9pZCBDMlNvZnRHNzExRGVjOjpwcm9jZXNzKAorICAgICAgICBjb25zdCBzdGQ6OnVuaXF1ZV9wdHI8QzJXb3JrPiAmd29yaywKKyAgICAgICAgY29uc3Qgc3RkOjpzaGFyZWRfcHRyPEMyQmxvY2tQb29sPiAmcG9vbCkgeworICAgIC8vIEluaXRpYWxpemUgb3V0cHV0IHdvcmsKKyAgICB3b3JrLT5yZXN1bHQgPSBDMl9PSzsKKyAgICB3b3JrLT53b3JrbGV0c1Byb2Nlc3NlZCA9IDF1OworICAgIHdvcmstPndvcmtsZXRzLmZyb250KCktPm91dHB1dC5mbGFncyA9IHdvcmstPmlucHV0LmZsYWdzOworCisgICAgaWYgKG1TaWduYWxsZWRPdXRwdXRFb3MpIHsKKyAgICAgICAgd29yay0+cmVzdWx0ID0gQzJfQkFEX1ZBTFVFOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgQzJSZWFkVmlldyByVmlldyA9IG1EdW1teVJlYWRWaWV3OworICAgIHNpemVfdCBpbk9mZnNldCA9IDB1OworICAgIHNpemVfdCBpblNpemUgPSAwdTsKKyAgICBpZiAoIXdvcmstPmlucHV0LmJ1ZmZlcnMuZW1wdHkoKSkgeworICAgICAgICByVmlldyA9IHdvcmstPmlucHV0LmJ1ZmZlcnNbMF0tPmRhdGEoKS5saW5lYXJCbG9ja3MoKS5mcm9udCgpLm1hcCgpLmdldCgpOworICAgICAgICBpblNpemUgPSByVmlldy5jYXBhY2l0eSgpOworICAgICAgICBpZiAoaW5TaXplICYmIHJWaWV3LmVycm9yKCkpIHsKKyAgICAgICAgICAgIEFMT0dFKCJyZWFkIHZpZXcgbWFwIGZhaWxlZCAlZCIsIHJWaWV3LmVycm9yKCkpOworICAgICAgICAgICAgd29yay0+cmVzdWx0ID0gQzJfQ09SUlVQVEVEOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgfQorICAgIGJvb2wgZW9zID0gKHdvcmstPmlucHV0LmZsYWdzICYgQzJGcmFtZURhdGE6OkZMQUdfRU5EX09GX1NUUkVBTSkgIT0gMDsKKyAgICBpbnQgb3V0U2l6ZSA9IGluU2l6ZSAqIHNpemVvZihpbnQxNl90KTsKKworICAgIEFMT0dWKCJpbiBidWZmZXIgYXR0ci4gc2l6ZSAlenUgdGltZXN0YW1wICVkIGZyYW1laW5kZXggJWQiLCBpblNpemUsCisgICAgICAgICAgKGludCl3b3JrLT5pbnB1dC5vcmRpbmFsLnRpbWVzdGFtcC5wZWVrdSgpLCAoaW50KXdvcmstPmlucHV0Lm9yZGluYWwuZnJhbWVJbmRleC5wZWVrdSgpKTsKKworICAgIGlmIChpblNpemUgPT0gMCkgeworICAgICAgICB3b3JrLT53b3JrbGV0cy5mcm9udCgpLT5vdXRwdXQuZmxhZ3MgPSB3b3JrLT5pbnB1dC5mbGFnczsKKyAgICAgICAgd29yay0+d29ya2xldHMuZnJvbnQoKS0+b3V0cHV0LmJ1ZmZlcnMuY2xlYXIoKTsKKyAgICAgICAgd29yay0+d29ya2xldHMuZnJvbnQoKS0+b3V0cHV0Lm9yZGluYWwgPSB3b3JrLT5pbnB1dC5vcmRpbmFsOworICAgICAgICBpZiAoZW9zKSB7CisgICAgICAgICAgICBtU2lnbmFsbGVkT3V0cHV0RW9zID0gdHJ1ZTsKKyAgICAgICAgICAgIEFMT0dWKCJzaWduYWxsZWQgRU9TIik7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIHVpbnQ4X3QgKmlucHV0cHRyID0gY29uc3RfY2FzdDx1aW50OF90ICo+KHJWaWV3LmRhdGEoKSArIGluT2Zmc2V0KTsKKworICAgIHN0ZDo6c2hhcmVkX3B0cjxDMkxpbmVhckJsb2NrPiBibG9jazsKKyAgICBDMk1lbW9yeVVzYWdlIHVzYWdlID0geyBDMk1lbW9yeVVzYWdlOjpDUFVfUkVBRCwgQzJNZW1vcnlVc2FnZTo6Q1BVX1dSSVRFIH07CisgICAgYzJfc3RhdHVzX3QgZXJyID0gcG9vbC0+ZmV0Y2hMaW5lYXJCbG9jayhvdXRTaXplLCB1c2FnZSwgJmJsb2NrKTsKKyAgICBpZiAoZXJyICE9IEMyX09LKSB7CisgICAgICAgIEFMT0dFKCJmZXRjaExpbmVhckJsb2NrIGZvciBPdXRwdXQgZmFpbGVkIHdpdGggc3RhdHVzICVkIiwgZXJyKTsKKyAgICAgICAgd29yay0+cmVzdWx0ID0gQzJfTk9fTUVNT1JZOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIEMyV3JpdGVWaWV3IHdWaWV3ID0gYmxvY2stPm1hcCgpLmdldCgpOworICAgIGlmICh3Vmlldy5lcnJvcigpKSB7CisgICAgICAgIEFMT0dFKCJ3cml0ZSB2aWV3IG1hcCBmYWlsZWQgJWQiLCB3Vmlldy5lcnJvcigpKTsKKyAgICAgICAgd29yay0+cmVzdWx0ID0gQzJfQ09SUlVQVEVEOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIGludDE2X3QgKm91dHB1dHB0ciA9IHJlaW50ZXJwcmV0X2Nhc3Q8aW50MTZfdCAqPih3Vmlldy5kYXRhKCkpOworCisjaWZkZWYgQUxBVworICAgIERlY29kZUFMYXcob3V0cHV0cHRyLCBpbnB1dHB0ciwgaW5TaXplKTsKKyNlbHNlCisgICAgRGVjb2RlTUxhdyhvdXRwdXRwdHIsIGlucHV0cHRyLCBpblNpemUpOworI2VuZGlmCisKKyAgICB3b3JrLT53b3JrbGV0cy5mcm9udCgpLT5vdXRwdXQuZmxhZ3MgPSB3b3JrLT5pbnB1dC5mbGFnczsKKyAgICB3b3JrLT53b3JrbGV0cy5mcm9udCgpLT5vdXRwdXQuYnVmZmVycy5jbGVhcigpOworICAgIHdvcmstPndvcmtsZXRzLmZyb250KCktPm91dHB1dC5idWZmZXJzLnB1c2hfYmFjayhjcmVhdGVMaW5lYXJCdWZmZXIoYmxvY2spKTsKKyAgICB3b3JrLT53b3JrbGV0cy5mcm9udCgpLT5vdXRwdXQub3JkaW5hbCA9IHdvcmstPmlucHV0Lm9yZGluYWw7CisKKyAgICBpZiAoZW9zKSB7CisgICAgICAgIG1TaWduYWxsZWRPdXRwdXRFb3MgPSB0cnVlOworICAgICAgICBBTE9HVigic2lnbmFsbGVkIEVPUyIpOworICAgIH0KK30KKworYzJfc3RhdHVzX3QgQzJTb2Z0RzcxMURlYzo6ZHJhaW4oCisgICAgICAgIHVpbnQzMl90IGRyYWluTW9kZSwKKyAgICAgICAgY29uc3Qgc3RkOjpzaGFyZWRfcHRyPEMyQmxvY2tQb29sPiAmcG9vbCkgeworICAgICh2b2lkKSBwb29sOworICAgIGlmIChkcmFpbk1vZGUgPT0gTk9fRFJBSU4pIHsKKyAgICAgICAgQUxPR1coImRyYWluIHdpdGggTk9fRFJBSU46IG5vLW9wIik7CisgICAgICAgIHJldHVybiBDMl9PSzsKKyAgICB9CisgICAgaWYgKGRyYWluTW9kZSA9PSBEUkFJTl9DSEFJTikgeworICAgICAgICBBTE9HVygiRFJBSU5fQ0hBSU4gbm90IHN1cHBvcnRlZCIpOworICAgICAgICByZXR1cm4gQzJfT01JVFRFRDsKKyAgICB9CisKKyAgICByZXR1cm4gQzJfT0s7Cit9CisKKyNpZmRlZiBBTEFXCit2b2lkIEMyU29mdEc3MTFEZWM6OkRlY29kZUFMYXcoCisgICAgICAgIGludDE2X3QgKm91dCwgY29uc3QgdWludDhfdCAqaW4sIHNpemVfdCBpblNpemUpIHsKKyAgICB3aGlsZSAoaW5TaXplID4gMCkgeworICAgICAgICBpblNpemUtLTsKKyAgICAgICAgaW50MzJfdCB4ID0gKmluKys7CisKKyAgICAgICAgaW50MzJfdCBpeCA9IHggXiAweDU1OworICAgICAgICBpeCAmPSAweDdmOworCisgICAgICAgIGludDMyX3QgaWV4cCA9IGl4ID4+IDQ7CisgICAgICAgIGludDMyX3QgbWFudCA9IGl4ICYgMHgwZjsKKworICAgICAgICBpZiAoaWV4cCA+IDApIHsKKyAgICAgICAgICAgIG1hbnQgKz0gMTY7CisgICAgICAgIH0KKworICAgICAgICBtYW50ID0gKG1hbnQgPDwgNCkgKyA4OworCisgICAgICAgIGlmIChpZXhwID4gMSkgeworICAgICAgICAgICAgbWFudCA9IG1hbnQgPDwgKGlleHAgLSAxKTsKKyAgICAgICAgfQorCisgICAgICAgICpvdXQrKyA9ICh4ID4gMTI3KSA/IG1hbnQgOiAtbWFudDsKKyAgICB9Cit9CisjZWxzZQordm9pZCBDMlNvZnRHNzExRGVjOjpEZWNvZGVNTGF3KAorICAgICAgICBpbnQxNl90ICpvdXQsIGNvbnN0IHVpbnQ4X3QgKmluLCBzaXplX3QgaW5TaXplKSB7CisgICAgd2hpbGUgKGluU2l6ZSA+IDApIHsKKyAgICAgICAgaW5TaXplLS07CisgICAgICAgIGludDMyX3QgeCA9ICppbisrOworCisgICAgICAgIGludDMyX3QgbWFudGlzc2EgPSB+eDsKKyAgICAgICAgaW50MzJfdCBleHBvbmVudCA9IChtYW50aXNzYSA+PiA0KSAmIDc7CisgICAgICAgIGludDMyX3Qgc2VnbWVudCA9IGV4cG9uZW50ICsgMTsKKyAgICAgICAgbWFudGlzc2EgJj0gMHgwZjsKKworICAgICAgICBpbnQzMl90IHN0ZXAgPSA0IDw8IHNlZ21lbnQ7CisKKyAgICAgICAgaW50MzJfdCBhYnMgPSAoMHg4MGwgPDwgZXhwb25lbnQpICsgc3RlcCAqIG1hbnRpc3NhICsgc3RlcCAvIDIgLSA0ICogMzM7CisKKyAgICAgICAgKm91dCsrID0gKHggPCAweDgwKSA/IC1hYnMgOiBhYnM7CisgICAgfQorfQorI2VuZGlmCisKK2NsYXNzIEMyU29mdEc3MTFEZWNGYWN0b3J5IDogcHVibGljIEMyQ29tcG9uZW50RmFjdG9yeSB7CitwdWJsaWM6CisgICAgQzJTb2Z0RzcxMURlY0ZhY3RvcnkoKSA6IG1IZWxwZXIoc3RkOjpzdGF0aWNfcG9pbnRlcl9jYXN0PEMyUmVmbGVjdG9ySGVscGVyPigKKyAgICAgICAgICAgIEdldENvZGVjMlBsYXRmb3JtQ29tcG9uZW50U3RvcmUoKS0+Z2V0UGFyYW1SZWZsZWN0b3IoKSkpIHsKKyAgICB9CisKKyAgICB2aXJ0dWFsIGMyX3N0YXR1c190IGNyZWF0ZUNvbXBvbmVudCgKKyAgICAgICAgICAgIGMyX25vZGVfaWRfdCBpZCwKKyAgICAgICAgICAgIHN0ZDo6c2hhcmVkX3B0cjxDMkNvbXBvbmVudD4qIGNvbnN0IGNvbXBvbmVudCwKKyAgICAgICAgICAgIHN0ZDo6ZnVuY3Rpb248dm9pZChDMkNvbXBvbmVudCopPiBkZWxldGVyKSBvdmVycmlkZSB7CisgICAgICAgICpjb21wb25lbnQgPSBzdGQ6OnNoYXJlZF9wdHI8QzJDb21wb25lbnQ+KAorICAgICAgICAgICAgICAgIG5ldyBDMlNvZnRHNzExRGVjKENPTVBPTkVOVF9OQU1FLCBpZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGQ6Om1ha2Vfc2hhcmVkPEMyU29mdEc3MTFEZWM6OkludGZJbXBsPihtSGVscGVyKSksCisgICAgICAgICAgICAgICAgZGVsZXRlcik7CisgICAgICAgIHJldHVybiBDMl9PSzsKKyAgICB9CisKKyAgICB2aXJ0dWFsIGMyX3N0YXR1c190IGNyZWF0ZUludGVyZmFjZSgKKyAgICAgICAgICAgIGMyX25vZGVfaWRfdCBpZCwgc3RkOjpzaGFyZWRfcHRyPEMyQ29tcG9uZW50SW50ZXJmYWNlPiogY29uc3QgaW50ZXJmYWNlLAorICAgICAgICAgICAgc3RkOjpmdW5jdGlvbjx2b2lkKEMyQ29tcG9uZW50SW50ZXJmYWNlKik+IGRlbGV0ZXIpIG92ZXJyaWRlIHsKKyAgICAgICAgKmludGVyZmFjZSA9IHN0ZDo6c2hhcmVkX3B0cjxDMkNvbXBvbmVudEludGVyZmFjZT4oCisgICAgICAgICAgICAgICAgbmV3IFNpbXBsZUludGVyZmFjZTxDMlNvZnRHNzExRGVjOjpJbnRmSW1wbD4oCisgICAgICAgICAgICAgICAgICAgICAgICBDT01QT05FTlRfTkFNRSwgaWQsIHN0ZDo6bWFrZV9zaGFyZWQ8QzJTb2Z0RzcxMURlYzo6SW50ZkltcGw+KG1IZWxwZXIpKSwKKyAgICAgICAgICAgICAgICBkZWxldGVyKTsKKyAgICAgICAgcmV0dXJuIEMyX09LOworICAgIH0KKworICAgIHZpcnR1YWwgfkMyU29mdEc3MTFEZWNGYWN0b3J5KCkgb3ZlcnJpZGUgPSBkZWZhdWx0OworCitwcml2YXRlOgorICAgIHN0ZDo6c2hhcmVkX3B0cjxDMlJlZmxlY3RvckhlbHBlcj4gbUhlbHBlcjsKK307CisKK30gIC8vIG5hbWVzcGFjZSBhbmRyb2lkCisKK2V4dGVybiAiQyIgOjpDMkNvbXBvbmVudEZhY3RvcnkqIENyZWF0ZUNvZGVjMkZhY3RvcnkoKSB7CisgICAgQUxPR1YoImluICVzIiwgX19mdW5jX18pOworICAgIHJldHVybiBuZXcgOjphbmRyb2lkOjpDMlNvZnRHNzExRGVjRmFjdG9yeSgpOworfQorCitleHRlcm4gIkMiIHZvaWQgRGVzdHJveUNvZGVjMkZhY3RvcnkoOjpDMkNvbXBvbmVudEZhY3RvcnkqIGZhY3RvcnkpIHsKKyAgICBBTE9HVigiaW4gJXMiLCBfX2Z1bmNfXyk7CisgICAgZGVsZXRlIGZhY3Rvcnk7Cit9CmRpZmYgLS1naXQgYS9tZWRpYS9jb2RlYzIvY29tcG9uZW50cy9nNzExL0MyU29mdEc3MTFEZWMuaCBiL21lZGlhL2NvZGVjMi9jb21wb25lbnRzL2c3MTEvQzJTb2Z0RzcxMURlYy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIzZThmZmMKLS0tIC9kZXYvbnVsbAorKysgYi9tZWRpYS9jb2RlYzIvY29tcG9uZW50cy9nNzExL0MyU29mdEc3MTFEZWMuaApAQCAtMCwwICsxLDU5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE4IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KKworI2lmbmRlZiBBTkRST0lEX0MyX1NPRlRfRzcxMV9ERUNfSF8KKyNkZWZpbmUgQU5EUk9JRF9DMl9TT0ZUX0c3MTFfREVDX0hfCisKKyNpbmNsdWRlIDxTaW1wbGVDMkNvbXBvbmVudC5oPgorCisKK25hbWVzcGFjZSBhbmRyb2lkIHsKKworc3RydWN0IEMyU29mdEc3MTFEZWMgOiBwdWJsaWMgU2ltcGxlQzJDb21wb25lbnQgeworICAgIGNsYXNzIEludGZJbXBsOworCisgICAgQzJTb2Z0RzcxMURlYyhjb25zdCBjaGFyICpuYW1lLCBjMl9ub2RlX2lkX3QgaWQsCisgICAgICAgICAgICAgICBjb25zdCBzdGQ6OnNoYXJlZF9wdHI8SW50ZkltcGw+ICZpbnRmSW1wbCk7CisgICAgdmlydHVhbCB+QzJTb2Z0RzcxMURlYygpOworCisgICAgLy8gRnJvbSBTaW1wbGVDMkNvbXBvbmVudAorICAgIGMyX3N0YXR1c190IG9uSW5pdCgpIG92ZXJyaWRlOworICAgIGMyX3N0YXR1c190IG9uU3RvcCgpIG92ZXJyaWRlOworICAgIHZvaWQgb25SZXNldCgpIG92ZXJyaWRlOworICAgIHZvaWQgb25SZWxlYXNlKCkgb3ZlcnJpZGU7CisgICAgYzJfc3RhdHVzX3Qgb25GbHVzaF9zbSgpIG92ZXJyaWRlOworICAgIHZvaWQgcHJvY2VzcygKKyAgICAgICAgICAgIGNvbnN0IHN0ZDo6dW5pcXVlX3B0cjxDMldvcms+ICZ3b3JrLAorICAgICAgICAgICAgY29uc3Qgc3RkOjpzaGFyZWRfcHRyPEMyQmxvY2tQb29sPiAmcG9vbCkgb3ZlcnJpZGU7CisgICAgYzJfc3RhdHVzX3QgZHJhaW4oCisgICAgICAgICAgICB1aW50MzJfdCBkcmFpbk1vZGUsCisgICAgICAgICAgICBjb25zdCBzdGQ6OnNoYXJlZF9wdHI8QzJCbG9ja1Bvb2w+ICZwb29sKSBvdmVycmlkZTsKK3ByaXZhdGU6CisgICAgc3RkOjpzaGFyZWRfcHRyPEludGZJbXBsPiBtSW50ZjsKKyAgICBib29sIG1TaWduYWxsZWRPdXRwdXRFb3M7CisKKyNpZmRlZiBBTEFXCisgICAgdm9pZCBEZWNvZGVBTGF3KGludDE2X3QgKm91dCwgY29uc3QgdWludDhfdCAqaW4sIHNpemVfdCBpblNpemUpOworI2Vsc2UKKyAgICB2b2lkIERlY29kZU1MYXcoaW50MTZfdCAqb3V0LCBjb25zdCB1aW50OF90ICppbiwgc2l6ZV90IGluU2l6ZSk7CisjZW5kaWYKKworICAgIEMyX0RPX05PVF9DT1BZKEMyU29mdEc3MTFEZWMpOworfTsKKworfSAgLy8gbmFtZXNwYWNlIGFuZHJvaWQKKworI2VuZGlmICAvLyBBTkRST0lEX0MyX1NPRlRfRzcxMV9ERUNfSF8KZGlmZiAtLWdpdCBhL21lZGlhL2NvZGVjMi9jb21wb25lbnRzL2c3MTEvTU9EVUxFX0xJQ0VOU0VfQVBBQ0hFMiBiL21lZGlhL2NvZGVjMi9jb21wb25lbnRzL2c3MTEvTU9EVUxFX0xJQ0VOU0VfQVBBQ0hFMgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNjlkZTI5Ci0tLSAvZGV2L251bGwKKysrIGIvbWVkaWEvY29kZWMyL2NvbXBvbmVudHMvZzcxMS9NT0RVTEVfTElDRU5TRV9BUEFDSEUyCmRpZmYgLS1naXQgYS9tZWRpYS9jb2RlYzIvY29tcG9uZW50cy9nNzExL05PVElDRSBiL21lZGlhL2NvZGVjMi9jb21wb25lbnRzL2c3MTEvTk9USUNFCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM1YjFlZmEKLS0tIC9kZXYvbnVsbAorKysgYi9tZWRpYS9jb2RlYzIvY29tcG9uZW50cy9nNzExL05PVElDRQpAQCAtMCwwICsxLDE5MCBAQAorCisgICBDb3B5cmlnaHQgKGMpIDIwMDUtMjAwOCwgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorCisgICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAgIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKworICAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAgIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisKKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQXBhY2hlIExpY2Vuc2UKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIFZlcnNpb24gMi4wLCBKYW51YXJ5IDIwMDQKKyAgICAgICAgICAgICAgICAgICAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy8KKworICAgVEVSTVMgQU5EIENPTkRJVElPTlMgRk9SIFVTRSwgUkVQUk9EVUNUSU9OLCBBTkQgRElTVFJJQlVUSU9OCisKKyAgIDEuIERlZmluaXRpb25zLgorCisgICAgICAiTGljZW5zZSIgc2hhbGwgbWVhbiB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgZm9yIHVzZSwgcmVwcm9kdWN0aW9uLAorICAgICAgYW5kIGRpc3RyaWJ1dGlvbiBhcyBkZWZpbmVkIGJ5IFNlY3Rpb25zIDEgdGhyb3VnaCA5IG9mIHRoaXMgZG9jdW1lbnQuCisKKyAgICAgICJMaWNlbnNvciIgc2hhbGwgbWVhbiB0aGUgY29weXJpZ2h0IG93bmVyIG9yIGVudGl0eSBhdXRob3JpemVkIGJ5CisgICAgICB0aGUgY29weXJpZ2h0IG93bmVyIHRoYXQgaXMgZ3JhbnRpbmcgdGhlIExpY2Vuc2UuCisKKyAgICAgICJMZWdhbCBFbnRpdHkiIHNoYWxsIG1lYW4gdGhlIHVuaW9uIG9mIHRoZSBhY3RpbmcgZW50aXR5IGFuZCBhbGwKKyAgICAgIG90aGVyIGVudGl0aWVzIHRoYXQgY29udHJvbCwgYXJlIGNvbnRyb2xsZWQgYnksIG9yIGFyZSB1bmRlciBjb21tb24KKyAgICAgIGNvbnRyb2wgd2l0aCB0aGF0IGVudGl0eS4gRm9yIHRoZSBwdXJwb3NlcyBvZiB0aGlzIGRlZmluaXRpb24sCisgICAgICAiY29udHJvbCIgbWVhbnMgKGkpIHRoZSBwb3dlciwgZGlyZWN0IG9yIGluZGlyZWN0LCB0byBjYXVzZSB0aGUKKyAgICAgIGRpcmVjdGlvbiBvciBtYW5hZ2VtZW50IG9mIHN1Y2ggZW50aXR5LCB3aGV0aGVyIGJ5IGNvbnRyYWN0IG9yCisgICAgICBvdGhlcndpc2UsIG9yIChpaSkgb3duZXJzaGlwIG9mIGZpZnR5IHBlcmNlbnQgKDUwJSkgb3IgbW9yZSBvZiB0aGUKKyAgICAgIG91dHN0YW5kaW5nIHNoYXJlcywgb3IgKGlpaSkgYmVuZWZpY2lhbCBvd25lcnNoaXAgb2Ygc3VjaCBlbnRpdHkuCisKKyAgICAgICJZb3UiIChvciAiWW91ciIpIHNoYWxsIG1lYW4gYW4gaW5kaXZpZHVhbCBvciBMZWdhbCBFbnRpdHkKKyAgICAgIGV4ZXJjaXNpbmcgcGVybWlzc2lvbnMgZ3JhbnRlZCBieSB0aGlzIExpY2Vuc2UuCisKKyAgICAgICJTb3VyY2UiIGZvcm0gc2hhbGwgbWVhbiB0aGUgcHJlZmVycmVkIGZvcm0gZm9yIG1ha2luZyBtb2RpZmljYXRpb25zLAorICAgICAgaW5jbHVkaW5nIGJ1dCBub3QgbGltaXRlZCB0byBzb2Z0d2FyZSBzb3VyY2UgY29kZSwgZG9jdW1lbnRhdGlvbgorICAgICAgc291cmNlLCBhbmQgY29uZmlndXJhdGlvbiBmaWxlcy4KKworICAgICAgIk9iamVjdCIgZm9ybSBzaGFsbCBtZWFuIGFueSBmb3JtIHJlc3VsdGluZyBmcm9tIG1lY2hhbmljYWwKKyAgICAgIHRyYW5zZm9ybWF0aW9uIG9yIHRyYW5zbGF0aW9uIG9mIGEgU291cmNlIGZvcm0sIGluY2x1ZGluZyBidXQKKyAgICAgIG5vdCBsaW1pdGVkIHRvIGNvbXBpbGVkIG9iamVjdCBjb2RlLCBnZW5lcmF0ZWQgZG9jdW1lbnRhdGlvbiwKKyAgICAgIGFuZCBjb252ZXJzaW9ucyB0byBvdGhlciBtZWRpYSB0eXBlcy4KKworICAgICAgIldvcmsiIHNoYWxsIG1lYW4gdGhlIHdvcmsgb2YgYXV0aG9yc2hpcCwgd2hldGhlciBpbiBTb3VyY2Ugb3IKKyAgICAgIE9iamVjdCBmb3JtLCBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgTGljZW5zZSwgYXMgaW5kaWNhdGVkIGJ5IGEKKyAgICAgIGNvcHlyaWdodCBub3RpY2UgdGhhdCBpcyBpbmNsdWRlZCBpbiBvciBhdHRhY2hlZCB0byB0aGUgd29yaworICAgICAgKGFuIGV4YW1wbGUgaXMgcHJvdmlkZWQgaW4gdGhlIEFwcGVuZGl4IGJlbG93KS4KKworICAgICAgIkRlcml2YXRpdmUgV29ya3MiIHNoYWxsIG1lYW4gYW55IHdvcmssIHdoZXRoZXIgaW4gU291cmNlIG9yIE9iamVjdAorICAgICAgZm9ybSwgdGhhdCBpcyBiYXNlZCBvbiAob3IgZGVyaXZlZCBmcm9tKSB0aGUgV29yayBhbmQgZm9yIHdoaWNoIHRoZQorICAgICAgZWRpdG9yaWFsIHJldmlzaW9ucywgYW5ub3RhdGlvbnMsIGVsYWJvcmF0aW9ucywgb3Igb3RoZXIgbW9kaWZpY2F0aW9ucworICAgICAgcmVwcmVzZW50LCBhcyBhIHdob2xlLCBhbiBvcmlnaW5hbCB3b3JrIG9mIGF1dGhvcnNoaXAuIEZvciB0aGUgcHVycG9zZXMKKyAgICAgIG9mIHRoaXMgTGljZW5zZSwgRGVyaXZhdGl2ZSBXb3JrcyBzaGFsbCBub3QgaW5jbHVkZSB3b3JrcyB0aGF0IHJlbWFpbgorICAgICAgc2VwYXJhYmxlIGZyb20sIG9yIG1lcmVseSBsaW5rIChvciBiaW5kIGJ5IG5hbWUpIHRvIHRoZSBpbnRlcmZhY2VzIG9mLAorICAgICAgdGhlIFdvcmsgYW5kIERlcml2YXRpdmUgV29ya3MgdGhlcmVvZi4KKworICAgICAgIkNvbnRyaWJ1dGlvbiIgc2hhbGwgbWVhbiBhbnkgd29yayBvZiBhdXRob3JzaGlwLCBpbmNsdWRpbmcKKyAgICAgIHRoZSBvcmlnaW5hbCB2ZXJzaW9uIG9mIHRoZSBXb3JrIGFuZCBhbnkgbW9kaWZpY2F0aW9ucyBvciBhZGRpdGlvbnMKKyAgICAgIHRvIHRoYXQgV29yayBvciBEZXJpdmF0aXZlIFdvcmtzIHRoZXJlb2YsIHRoYXQgaXMgaW50ZW50aW9uYWxseQorICAgICAgc3VibWl0dGVkIHRvIExpY2Vuc29yIGZvciBpbmNsdXNpb24gaW4gdGhlIFdvcmsgYnkgdGhlIGNvcHlyaWdodCBvd25lcgorICAgICAgb3IgYnkgYW4gaW5kaXZpZHVhbCBvciBMZWdhbCBFbnRpdHkgYXV0aG9yaXplZCB0byBzdWJtaXQgb24gYmVoYWxmIG9mCisgICAgICB0aGUgY29weXJpZ2h0IG93bmVyLiBGb3IgdGhlIHB1cnBvc2VzIG9mIHRoaXMgZGVmaW5pdGlvbiwgInN1Ym1pdHRlZCIKKyAgICAgIG1lYW5zIGFueSBmb3JtIG9mIGVsZWN0cm9uaWMsIHZlcmJhbCwgb3Igd3JpdHRlbiBjb21tdW5pY2F0aW9uIHNlbnQKKyAgICAgIHRvIHRoZSBMaWNlbnNvciBvciBpdHMgcmVwcmVzZW50YXRpdmVzLCBpbmNsdWRpbmcgYnV0IG5vdCBsaW1pdGVkIHRvCisgICAgICBjb21tdW5pY2F0aW9uIG9uIGVsZWN0cm9uaWMgbWFpbGluZyBsaXN0cywgc291cmNlIGNvZGUgY29udHJvbCBzeXN0ZW1zLAorICAgICAgYW5kIGlzc3VlIHRyYWNraW5nIHN5c3RlbXMgdGhhdCBhcmUgbWFuYWdlZCBieSwgb3Igb24gYmVoYWxmIG9mLCB0aGUKKyAgICAgIExpY2Vuc29yIGZvciB0aGUgcHVycG9zZSBvZiBkaXNjdXNzaW5nIGFuZCBpbXByb3ZpbmcgdGhlIFdvcmssIGJ1dAorICAgICAgZXhjbHVkaW5nIGNvbW11bmljYXRpb24gdGhhdCBpcyBjb25zcGljdW91c2x5IG1hcmtlZCBvciBvdGhlcndpc2UKKyAgICAgIGRlc2lnbmF0ZWQgaW4gd3JpdGluZyBieSB0aGUgY29weXJpZ2h0IG93bmVyIGFzICJOb3QgYSBDb250cmlidXRpb24uIgorCisgICAgICAiQ29udHJpYnV0b3IiIHNoYWxsIG1lYW4gTGljZW5zb3IgYW5kIGFueSBpbmRpdmlkdWFsIG9yIExlZ2FsIEVudGl0eQorICAgICAgb24gYmVoYWxmIG9mIHdob20gYSBDb250cmlidXRpb24gaGFzIGJlZW4gcmVjZWl2ZWQgYnkgTGljZW5zb3IgYW5kCisgICAgICBzdWJzZXF1ZW50bHkgaW5jb3Jwb3JhdGVkIHdpdGhpbiB0aGUgV29yay4KKworICAgMi4gR3JhbnQgb2YgQ29weXJpZ2h0IExpY2Vuc2UuIFN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mCisgICAgICB0aGlzIExpY2Vuc2UsIGVhY2ggQ29udHJpYnV0b3IgaGVyZWJ5IGdyYW50cyB0byBZb3UgYSBwZXJwZXR1YWwsCisgICAgICB3b3JsZHdpZGUsIG5vbi1leGNsdXNpdmUsIG5vLWNoYXJnZSwgcm95YWx0eS1mcmVlLCBpcnJldm9jYWJsZQorICAgICAgY29weXJpZ2h0IGxpY2Vuc2UgdG8gcmVwcm9kdWNlLCBwcmVwYXJlIERlcml2YXRpdmUgV29ya3Mgb2YsCisgICAgICBwdWJsaWNseSBkaXNwbGF5LCBwdWJsaWNseSBwZXJmb3JtLCBzdWJsaWNlbnNlLCBhbmQgZGlzdHJpYnV0ZSB0aGUKKyAgICAgIFdvcmsgYW5kIHN1Y2ggRGVyaXZhdGl2ZSBXb3JrcyBpbiBTb3VyY2Ugb3IgT2JqZWN0IGZvcm0uCisKKyAgIDMuIEdyYW50IG9mIFBhdGVudCBMaWNlbnNlLiBTdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZgorICAgICAgdGhpcyBMaWNlbnNlLCBlYWNoIENvbnRyaWJ1dG9yIGhlcmVieSBncmFudHMgdG8gWW91IGEgcGVycGV0dWFsLAorICAgICAgd29ybGR3aWRlLCBub24tZXhjbHVzaXZlLCBuby1jaGFyZ2UsIHJveWFsdHktZnJlZSwgaXJyZXZvY2FibGUKKyAgICAgIChleGNlcHQgYXMgc3RhdGVkIGluIHRoaXMgc2VjdGlvbikgcGF0ZW50IGxpY2Vuc2UgdG8gbWFrZSwgaGF2ZSBtYWRlLAorICAgICAgdXNlLCBvZmZlciB0byBzZWxsLCBzZWxsLCBpbXBvcnQsIGFuZCBvdGhlcndpc2UgdHJhbnNmZXIgdGhlIFdvcmssCisgICAgICB3aGVyZSBzdWNoIGxpY2Vuc2UgYXBwbGllcyBvbmx5IHRvIHRob3NlIHBhdGVudCBjbGFpbXMgbGljZW5zYWJsZQorICAgICAgYnkgc3VjaCBDb250cmlidXRvciB0aGF0IGFyZSBuZWNlc3NhcmlseSBpbmZyaW5nZWQgYnkgdGhlaXIKKyAgICAgIENvbnRyaWJ1dGlvbihzKSBhbG9uZSBvciBieSBjb21iaW5hdGlvbiBvZiB0aGVpciBDb250cmlidXRpb24ocykKKyAgICAgIHdpdGggdGhlIFdvcmsgdG8gd2hpY2ggc3VjaCBDb250cmlidXRpb24ocykgd2FzIHN1Ym1pdHRlZC4gSWYgWW91CisgICAgICBpbnN0aXR1dGUgcGF0ZW50IGxpdGlnYXRpb24gYWdhaW5zdCBhbnkgZW50aXR5IChpbmNsdWRpbmcgYQorICAgICAgY3Jvc3MtY2xhaW0gb3IgY291bnRlcmNsYWltIGluIGEgbGF3c3VpdCkgYWxsZWdpbmcgdGhhdCB0aGUgV29yaworICAgICAgb3IgYSBDb250cmlidXRpb24gaW5jb3Jwb3JhdGVkIHdpdGhpbiB0aGUgV29yayBjb25zdGl0dXRlcyBkaXJlY3QKKyAgICAgIG9yIGNvbnRyaWJ1dG9yeSBwYXRlbnQgaW5mcmluZ2VtZW50LCB0aGVuIGFueSBwYXRlbnQgbGljZW5zZXMKKyAgICAgIGdyYW50ZWQgdG8gWW91IHVuZGVyIHRoaXMgTGljZW5zZSBmb3IgdGhhdCBXb3JrIHNoYWxsIHRlcm1pbmF0ZQorICAgICAgYXMgb2YgdGhlIGRhdGUgc3VjaCBsaXRpZ2F0aW9uIGlzIGZpbGVkLgorCisgICA0LiBSZWRpc3RyaWJ1dGlvbi4gWW91IG1heSByZXByb2R1Y2UgYW5kIGRpc3RyaWJ1dGUgY29waWVzIG9mIHRoZQorICAgICAgV29yayBvciBEZXJpdmF0aXZlIFdvcmtzIHRoZXJlb2YgaW4gYW55IG1lZGl1bSwgd2l0aCBvciB3aXRob3V0CisgICAgICBtb2RpZmljYXRpb25zLCBhbmQgaW4gU291cmNlIG9yIE9iamVjdCBmb3JtLCBwcm92aWRlZCB0aGF0IFlvdQorICAgICAgbWVldCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CisKKyAgICAgIChhKSBZb3UgbXVzdCBnaXZlIGFueSBvdGhlciByZWNpcGllbnRzIG9mIHRoZSBXb3JrIG9yCisgICAgICAgICAgRGVyaXZhdGl2ZSBXb3JrcyBhIGNvcHkgb2YgdGhpcyBMaWNlbnNlOyBhbmQKKworICAgICAgKGIpIFlvdSBtdXN0IGNhdXNlIGFueSBtb2RpZmllZCBmaWxlcyB0byBjYXJyeSBwcm9taW5lbnQgbm90aWNlcworICAgICAgICAgIHN0YXRpbmcgdGhhdCBZb3UgY2hhbmdlZCB0aGUgZmlsZXM7IGFuZAorCisgICAgICAoYykgWW91IG11c3QgcmV0YWluLCBpbiB0aGUgU291cmNlIGZvcm0gb2YgYW55IERlcml2YXRpdmUgV29ya3MKKyAgICAgICAgICB0aGF0IFlvdSBkaXN0cmlidXRlLCBhbGwgY29weXJpZ2h0LCBwYXRlbnQsIHRyYWRlbWFyaywgYW5kCisgICAgICAgICAgYXR0cmlidXRpb24gbm90aWNlcyBmcm9tIHRoZSBTb3VyY2UgZm9ybSBvZiB0aGUgV29yaywKKyAgICAgICAgICBleGNsdWRpbmcgdGhvc2Ugbm90aWNlcyB0aGF0IGRvIG5vdCBwZXJ0YWluIHRvIGFueSBwYXJ0IG9mCisgICAgICAgICAgdGhlIERlcml2YXRpdmUgV29ya3M7IGFuZAorCisgICAgICAoZCkgSWYgdGhlIFdvcmsgaW5jbHVkZXMgYSAiTk9USUNFIiB0ZXh0IGZpbGUgYXMgcGFydCBvZiBpdHMKKyAgICAgICAgICBkaXN0cmlidXRpb24sIHRoZW4gYW55IERlcml2YXRpdmUgV29ya3MgdGhhdCBZb3UgZGlzdHJpYnV0ZSBtdXN0CisgICAgICAgICAgaW5jbHVkZSBhIHJlYWRhYmxlIGNvcHkgb2YgdGhlIGF0dHJpYnV0aW9uIG5vdGljZXMgY29udGFpbmVkCisgICAgICAgICAgd2l0aGluIHN1Y2ggTk9USUNFIGZpbGUsIGV4Y2x1ZGluZyB0aG9zZSBub3RpY2VzIHRoYXQgZG8gbm90CisgICAgICAgICAgcGVydGFpbiB0byBhbnkgcGFydCBvZiB0aGUgRGVyaXZhdGl2ZSBXb3JrcywgaW4gYXQgbGVhc3Qgb25lCisgICAgICAgICAgb2YgdGhlIGZvbGxvd2luZyBwbGFjZXM6IHdpdGhpbiBhIE5PVElDRSB0ZXh0IGZpbGUgZGlzdHJpYnV0ZWQKKyAgICAgICAgICBhcyBwYXJ0IG9mIHRoZSBEZXJpdmF0aXZlIFdvcmtzOyB3aXRoaW4gdGhlIFNvdXJjZSBmb3JtIG9yCisgICAgICAgICAgZG9jdW1lbnRhdGlvbiwgaWYgcHJvdmlkZWQgYWxvbmcgd2l0aCB0aGUgRGVyaXZhdGl2ZSBXb3Jrczsgb3IsCisgICAgICAgICAgd2l0aGluIGEgZGlzcGxheSBnZW5lcmF0ZWQgYnkgdGhlIERlcml2YXRpdmUgV29ya3MsIGlmIGFuZAorICAgICAgICAgIHdoZXJldmVyIHN1Y2ggdGhpcmQtcGFydHkgbm90aWNlcyBub3JtYWxseSBhcHBlYXIuIFRoZSBjb250ZW50cworICAgICAgICAgIG9mIHRoZSBOT1RJQ0UgZmlsZSBhcmUgZm9yIGluZm9ybWF0aW9uYWwgcHVycG9zZXMgb25seSBhbmQKKyAgICAgICAgICBkbyBub3QgbW9kaWZ5IHRoZSBMaWNlbnNlLiBZb3UgbWF5IGFkZCBZb3VyIG93biBhdHRyaWJ1dGlvbgorICAgICAgICAgIG5vdGljZXMgd2l0aGluIERlcml2YXRpdmUgV29ya3MgdGhhdCBZb3UgZGlzdHJpYnV0ZSwgYWxvbmdzaWRlCisgICAgICAgICAgb3IgYXMgYW4gYWRkZW5kdW0gdG8gdGhlIE5PVElDRSB0ZXh0IGZyb20gdGhlIFdvcmssIHByb3ZpZGVkCisgICAgICAgICAgdGhhdCBzdWNoIGFkZGl0aW9uYWwgYXR0cmlidXRpb24gbm90aWNlcyBjYW5ub3QgYmUgY29uc3RydWVkCisgICAgICAgICAgYXMgbW9kaWZ5aW5nIHRoZSBMaWNlbnNlLgorCisgICAgICBZb3UgbWF5IGFkZCBZb3VyIG93biBjb3B5cmlnaHQgc3RhdGVtZW50IHRvIFlvdXIgbW9kaWZpY2F0aW9ucyBhbmQKKyAgICAgIG1heSBwcm92aWRlIGFkZGl0aW9uYWwgb3IgZGlmZmVyZW50IGxpY2Vuc2UgdGVybXMgYW5kIGNvbmRpdGlvbnMKKyAgICAgIGZvciB1c2UsIHJlcHJvZHVjdGlvbiwgb3IgZGlzdHJpYnV0aW9uIG9mIFlvdXIgbW9kaWZpY2F0aW9ucywgb3IKKyAgICAgIGZvciBhbnkgc3VjaCBEZXJpdmF0aXZlIFdvcmtzIGFzIGEgd2hvbGUsIHByb3ZpZGVkIFlvdXIgdXNlLAorICAgICAgcmVwcm9kdWN0aW9uLCBhbmQgZGlzdHJpYnV0aW9uIG9mIHRoZSBXb3JrIG90aGVyd2lzZSBjb21wbGllcyB3aXRoCisgICAgICB0aGUgY29uZGl0aW9ucyBzdGF0ZWQgaW4gdGhpcyBMaWNlbnNlLgorCisgICA1LiBTdWJtaXNzaW9uIG9mIENvbnRyaWJ1dGlvbnMuIFVubGVzcyBZb3UgZXhwbGljaXRseSBzdGF0ZSBvdGhlcndpc2UsCisgICAgICBhbnkgQ29udHJpYnV0aW9uIGludGVudGlvbmFsbHkgc3VibWl0dGVkIGZvciBpbmNsdXNpb24gaW4gdGhlIFdvcmsKKyAgICAgIGJ5IFlvdSB0byB0aGUgTGljZW5zb3Igc2hhbGwgYmUgdW5kZXIgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mCisgICAgICB0aGlzIExpY2Vuc2UsIHdpdGhvdXQgYW55IGFkZGl0aW9uYWwgdGVybXMgb3IgY29uZGl0aW9ucy4KKyAgICAgIE5vdHdpdGhzdGFuZGluZyB0aGUgYWJvdmUsIG5vdGhpbmcgaGVyZWluIHNoYWxsIHN1cGVyc2VkZSBvciBtb2RpZnkKKyAgICAgIHRoZSB0ZXJtcyBvZiBhbnkgc2VwYXJhdGUgbGljZW5zZSBhZ3JlZW1lbnQgeW91IG1heSBoYXZlIGV4ZWN1dGVkCisgICAgICB3aXRoIExpY2Vuc29yIHJlZ2FyZGluZyBzdWNoIENvbnRyaWJ1dGlvbnMuCisKKyAgIDYuIFRyYWRlbWFya3MuIFRoaXMgTGljZW5zZSBkb2VzIG5vdCBncmFudCBwZXJtaXNzaW9uIHRvIHVzZSB0aGUgdHJhZGUKKyAgICAgIG5hbWVzLCB0cmFkZW1hcmtzLCBzZXJ2aWNlIG1hcmtzLCBvciBwcm9kdWN0IG5hbWVzIG9mIHRoZSBMaWNlbnNvciwKKyAgICAgIGV4Y2VwdCBhcyByZXF1aXJlZCBmb3IgcmVhc29uYWJsZSBhbmQgY3VzdG9tYXJ5IHVzZSBpbiBkZXNjcmliaW5nIHRoZQorICAgICAgb3JpZ2luIG9mIHRoZSBXb3JrIGFuZCByZXByb2R1Y2luZyB0aGUgY29udGVudCBvZiB0aGUgTk9USUNFIGZpbGUuCisKKyAgIDcuIERpc2NsYWltZXIgb2YgV2FycmFudHkuIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvcgorICAgICAgYWdyZWVkIHRvIGluIHdyaXRpbmcsIExpY2Vuc29yIHByb3ZpZGVzIHRoZSBXb3JrIChhbmQgZWFjaAorICAgICAgQ29udHJpYnV0b3IgcHJvdmlkZXMgaXRzIENvbnRyaWJ1dGlvbnMpIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgICAgICBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IKKyAgICAgIGltcGxpZWQsIGluY2x1ZGluZywgd2l0aG91dCBsaW1pdGF0aW9uLCBhbnkgd2FycmFudGllcyBvciBjb25kaXRpb25zCisgICAgICBvZiBUSVRMRSwgTk9OLUlORlJJTkdFTUVOVCwgTUVSQ0hBTlRBQklMSVRZLCBvciBGSVRORVNTIEZPUiBBCisgICAgICBQQVJUSUNVTEFSIFBVUlBPU0UuIFlvdSBhcmUgc29sZWx5IHJlc3BvbnNpYmxlIGZvciBkZXRlcm1pbmluZyB0aGUKKyAgICAgIGFwcHJvcHJpYXRlbmVzcyBvZiB1c2luZyBvciByZWRpc3RyaWJ1dGluZyB0aGUgV29yayBhbmQgYXNzdW1lIGFueQorICAgICAgcmlza3MgYXNzb2NpYXRlZCB3aXRoIFlvdXIgZXhlcmNpc2Ugb2YgcGVybWlzc2lvbnMgdW5kZXIgdGhpcyBMaWNlbnNlLgorCisgICA4LiBMaW1pdGF0aW9uIG9mIExpYWJpbGl0eS4gSW4gbm8gZXZlbnQgYW5kIHVuZGVyIG5vIGxlZ2FsIHRoZW9yeSwKKyAgICAgIHdoZXRoZXIgaW4gdG9ydCAoaW5jbHVkaW5nIG5lZ2xpZ2VuY2UpLCBjb250cmFjdCwgb3Igb3RoZXJ3aXNlLAorICAgICAgdW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IChzdWNoIGFzIGRlbGliZXJhdGUgYW5kIGdyb3NzbHkKKyAgICAgIG5lZ2xpZ2VudCBhY3RzKSBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc2hhbGwgYW55IENvbnRyaWJ1dG9yIGJlCisgICAgICBsaWFibGUgdG8gWW91IGZvciBkYW1hZ2VzLCBpbmNsdWRpbmcgYW55IGRpcmVjdCwgaW5kaXJlY3QsIHNwZWNpYWwsCisgICAgICBpbmNpZGVudGFsLCBvciBjb25zZXF1ZW50aWFsIGRhbWFnZXMgb2YgYW55IGNoYXJhY3RlciBhcmlzaW5nIGFzIGEKKyAgICAgIHJlc3VsdCBvZiB0aGlzIExpY2Vuc2Ugb3Igb3V0IG9mIHRoZSB1c2Ugb3IgaW5hYmlsaXR5IHRvIHVzZSB0aGUKKyAgICAgIFdvcmsgKGluY2x1ZGluZyBidXQgbm90IGxpbWl0ZWQgdG8gZGFtYWdlcyBmb3IgbG9zcyBvZiBnb29kd2lsbCwKKyAgICAgIHdvcmsgc3RvcHBhZ2UsIGNvbXB1dGVyIGZhaWx1cmUgb3IgbWFsZnVuY3Rpb24sIG9yIGFueSBhbmQgYWxsCisgICAgICBvdGhlciBjb21tZXJjaWFsIGRhbWFnZXMgb3IgbG9zc2VzKSwgZXZlbiBpZiBzdWNoIENvbnRyaWJ1dG9yCisgICAgICBoYXMgYmVlbiBhZHZpc2VkIG9mIHRoZSBwb3NzaWJpbGl0eSBvZiBzdWNoIGRhbWFnZXMuCisKKyAgIDkuIEFjY2VwdGluZyBXYXJyYW50eSBvciBBZGRpdGlvbmFsIExpYWJpbGl0eS4gV2hpbGUgcmVkaXN0cmlidXRpbmcKKyAgICAgIHRoZSBXb3JrIG9yIERlcml2YXRpdmUgV29ya3MgdGhlcmVvZiwgWW91IG1heSBjaG9vc2UgdG8gb2ZmZXIsCisgICAgICBhbmQgY2hhcmdlIGEgZmVlIGZvciwgYWNjZXB0YW5jZSBvZiBzdXBwb3J0LCB3YXJyYW50eSwgaW5kZW1uaXR5LAorICAgICAgb3Igb3RoZXIgbGlhYmlsaXR5IG9ibGlnYXRpb25zIGFuZC9vciByaWdodHMgY29uc2lzdGVudCB3aXRoIHRoaXMKKyAgICAgIExpY2Vuc2UuIEhvd2V2ZXIsIGluIGFjY2VwdGluZyBzdWNoIG9ibGlnYXRpb25zLCBZb3UgbWF5IGFjdCBvbmx5CisgICAgICBvbiBZb3VyIG93biBiZWhhbGYgYW5kIG9uIFlvdXIgc29sZSByZXNwb25zaWJpbGl0eSwgbm90IG9uIGJlaGFsZgorICAgICAgb2YgYW55IG90aGVyIENvbnRyaWJ1dG9yLCBhbmQgb25seSBpZiBZb3UgYWdyZWUgdG8gaW5kZW1uaWZ5LAorICAgICAgZGVmZW5kLCBhbmQgaG9sZCBlYWNoIENvbnRyaWJ1dG9yIGhhcm1sZXNzIGZvciBhbnkgbGlhYmlsaXR5CisgICAgICBpbmN1cnJlZCBieSwgb3IgY2xhaW1zIGFzc2VydGVkIGFnYWluc3QsIHN1Y2ggQ29udHJpYnV0b3IgYnkgcmVhc29uCisgICAgICBvZiB5b3VyIGFjY2VwdGluZyBhbnkgc3VjaCB3YXJyYW50eSBvciBhZGRpdGlvbmFsIGxpYWJpbGl0eS4KKworICAgRU5EIE9GIFRFUk1TIEFORCBDT05ESVRJT05TCisKZGlmZiAtLWdpdCBhL21lZGlhL2NvZGVjMi9jb21wb25lbnRzL2dzbS9BbmRyb2lkLmJwIGIvbWVkaWEvY29kZWMyL2NvbXBvbmVudHMvZ3NtL0FuZHJvaWQuYnAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTMzMGMwMQotLS0gL2Rldi9udWxsCisrKyBiL21lZGlhL2NvZGVjMi9jb21wb25lbnRzL2dzbS9BbmRyb2lkLmJwCkBAIC0wLDAgKzEsMTEgQEAKK2NjX2xpYnJhcnlfc2hhcmVkIHsKKyAgICBuYW1lOiAibGliY29kZWMyX3NvZnRfZ3NtZGVjIiwKKyAgICBkZWZhdWx0czogWworICAgICAgICAibGliY29kZWMyX3NvZnQtZGVmYXVsdHMiLAorICAgICAgICAibGliY29kZWMyX3NvZnRfc2FuaXRpemVfYWxsLWRlZmF1bHRzIiwKKyAgICBdLAorCisgICAgc3JjczogWyJDMlNvZnRHc21EZWMuY3BwIl0sCisKKyAgICBzdGF0aWNfbGliczogWyJsaWJnc20iXSwKK30KZGlmZiAtLWdpdCBhL21lZGlhL2NvZGVjMi9jb21wb25lbnRzL2dzbS9DMlNvZnRHc21EZWMuY3BwIGIvbWVkaWEvY29kZWMyL2NvbXBvbmVudHMvZ3NtL0MyU29mdEdzbURlYy5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzEwMWM3OQotLS0gL2Rldi9udWxsCisrKyBiL21lZGlhL2NvZGVjMi9jb21wb25lbnRzL2dzbS9DMlNvZnRHc21EZWMuY3BwCkBAIC0wLDAgKzEsMzExIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE4IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KKworLy8jZGVmaW5lIExPR19OREVCVUcgMAorI2RlZmluZSBMT0dfVEFHICJDMlNvZnRHc21EZWMiCisjaW5jbHVkZSA8bG9nL2xvZy5oPgorCisjaW5jbHVkZSA8bWVkaWEvc3RhZ2VmcmlnaHQvZm91bmRhdGlvbi9NZWRpYURlZnMuaD4KKworI2luY2x1ZGUgPEMyUGxhdGZvcm1TdXBwb3J0Lmg+CisjaW5jbHVkZSA8U2ltcGxlQzJJbnRlcmZhY2UuaD4KKworI2luY2x1ZGUgIkMyU29mdEdzbURlYy5oIgorCituYW1lc3BhY2UgYW5kcm9pZCB7CisKK2NvbnN0ZXhwciBjaGFyIENPTVBPTkVOVF9OQU1FW10gPSAiYzIuYW5kcm9pZC5nc20uZGVjb2RlciI7CisKK2NsYXNzIEMyU29mdEdzbURlYzo6SW50ZkltcGwgOiBwdWJsaWMgQzJJbnRlcmZhY2VIZWxwZXIgeworICAgcHVibGljOgorICAgIGV4cGxpY2l0IEludGZJbXBsKGNvbnN0IHN0ZDo6c2hhcmVkX3B0cjxDMlJlZmxlY3RvckhlbHBlcj4mIGhlbHBlcikKKyAgICAgICAgOiBDMkludGVyZmFjZUhlbHBlcihoZWxwZXIpIHsKKyAgICAgICAgc2V0RGVyaXZlZEluc3RhbmNlKHRoaXMpOworCisgICAgICAgIGFkZFBhcmFtZXRlcigKKyAgICAgICAgICAgICAgICBEZWZpbmVQYXJhbShtSW5wdXRGb3JtYXQsIEMyX05BTUVfSU5QVVRfU1RSRUFNX0ZPUk1BVF9TRVRUSU5HKQorICAgICAgICAgICAgICAgIC53aXRoQ29uc3RWYWx1ZShuZXcgQzJTdHJlYW1Gb3JtYXRDb25maWc6OmlucHV0KDB1LCBDMkZvcm1hdENvbXByZXNzZWQpKQorICAgICAgICAgICAgICAgIC5idWlsZCgpKTsKKworICAgICAgICBhZGRQYXJhbWV0ZXIoCisgICAgICAgICAgICAgICAgRGVmaW5lUGFyYW0obU91dHB1dEZvcm1hdCwgQzJfTkFNRV9PVVRQVVRfU1RSRUFNX0ZPUk1BVF9TRVRUSU5HKQorICAgICAgICAgICAgICAgIC53aXRoQ29uc3RWYWx1ZShuZXcgQzJTdHJlYW1Gb3JtYXRDb25maWc6Om91dHB1dCgwdSwgQzJGb3JtYXRBdWRpbykpCisgICAgICAgICAgICAgICAgLmJ1aWxkKCkpOworCisgICAgICAgIGFkZFBhcmFtZXRlcigKKyAgICAgICAgICAgICAgICBEZWZpbmVQYXJhbShtSW5wdXRNZWRpYVR5cGUsIEMyX05BTUVfSU5QVVRfUE9SVF9NSU1FX1NFVFRJTkcpCisgICAgICAgICAgICAgICAgLndpdGhDb25zdFZhbHVlKEFsbG9jU2hhcmVkU3RyaW5nPEMyUG9ydE1pbWVDb25maWc6OmlucHV0PigKKyAgICAgICAgICAgICAgICAgICAgICAgIE1FRElBX01JTUVUWVBFX0FVRElPX01TR1NNKSkKKyAgICAgICAgICAgICAgICAuYnVpbGQoKSk7CisKKyAgICAgICAgYWRkUGFyYW1ldGVyKAorICAgICAgICAgICAgICAgIERlZmluZVBhcmFtKG1PdXRwdXRNZWRpYVR5cGUsIEMyX05BTUVfT1VUUFVUX1BPUlRfTUlNRV9TRVRUSU5HKQorICAgICAgICAgICAgICAgIC53aXRoQ29uc3RWYWx1ZShBbGxvY1NoYXJlZFN0cmluZzxDMlBvcnRNaW1lQ29uZmlnOjpvdXRwdXQ+KAorICAgICAgICAgICAgICAgICAgICAgICAgTUVESUFfTUlNRVRZUEVfQVVESU9fUkFXKSkKKyAgICAgICAgICAgICAgICAuYnVpbGQoKSk7CisKKyAgICAgICAgYWRkUGFyYW1ldGVyKAorICAgICAgICAgICAgICAgIERlZmluZVBhcmFtKG1TYW1wbGVSYXRlLCBDMl9OQU1FX1NUUkVBTV9TQU1QTEVfUkFURV9TRVRUSU5HKQorICAgICAgICAgICAgICAgIC53aXRoRGVmYXVsdChuZXcgQzJTdHJlYW1TYW1wbGVSYXRlSW5mbzo6b3V0cHV0KDB1LCA4MDAwKSkKKyAgICAgICAgICAgICAgICAud2l0aEZpZWxkcyh7QzJGKG1TYW1wbGVSYXRlLCB2YWx1ZSkuZXF1YWxUbyg4MDAwKX0pCisgICAgICAgICAgICAgICAgLndpdGhTZXR0ZXIoKFNldHRlcjxkZWNsdHlwZSgqbVNhbXBsZVJhdGUpPjo6U3RyaWN0VmFsdWVXaXRoTm9EZXBzKSkKKyAgICAgICAgICAgICAgICAuYnVpbGQoKSk7CisKKyAgICAgICAgYWRkUGFyYW1ldGVyKAorICAgICAgICAgICAgICAgIERlZmluZVBhcmFtKG1DaGFubmVsQ291bnQsIEMyX05BTUVfU1RSRUFNX0NIQU5ORUxfQ09VTlRfU0VUVElORykKKyAgICAgICAgICAgICAgICAud2l0aERlZmF1bHQobmV3IEMyU3RyZWFtQ2hhbm5lbENvdW50SW5mbzo6b3V0cHV0KDB1LCAxKSkKKyAgICAgICAgICAgICAgICAud2l0aEZpZWxkcyh7QzJGKG1DaGFubmVsQ291bnQsIHZhbHVlKS5lcXVhbFRvKDEpfSkKKyAgICAgICAgICAgICAgICAud2l0aFNldHRlcihTZXR0ZXI8ZGVjbHR5cGUoKm1DaGFubmVsQ291bnQpPjo6U3RyaWN0VmFsdWVXaXRoTm9EZXBzKQorICAgICAgICAgICAgICAgIC5idWlsZCgpKTsKKworICAgICAgICBhZGRQYXJhbWV0ZXIoCisgICAgICAgICAgICAgICAgRGVmaW5lUGFyYW0obUJpdHJhdGUsIEMyX05BTUVfU1RSRUFNX0JJVFJBVEVfU0VUVElORykKKyAgICAgICAgICAgICAgICAud2l0aERlZmF1bHQobmV3IEMyQml0cmF0ZVR1bmluZzo6aW5wdXQoMHUsIDEzMjAwKSkKKyAgICAgICAgICAgICAgICAud2l0aEZpZWxkcyh7QzJGKG1CaXRyYXRlLCB2YWx1ZSkuZXF1YWxUbygxMzIwMCl9KQorICAgICAgICAgICAgICAgIC53aXRoU2V0dGVyKFNldHRlcjxkZWNsdHlwZSgqbUJpdHJhdGUpPjo6Tm9uU3RyaWN0VmFsdWVXaXRoTm9EZXBzKQorICAgICAgICAgICAgICAgIC5idWlsZCgpKTsKKworICAgICAgICBhZGRQYXJhbWV0ZXIoCisgICAgICAgICAgICAgICAgRGVmaW5lUGFyYW0obUlucHV0TWF4QnVmU2l6ZSwgQzJfUEFSQU1LRVlfSU5QVVRfTUFYX0JVRkZFUl9TSVpFKQorICAgICAgICAgICAgICAgIC53aXRoQ29uc3RWYWx1ZShuZXcgQzJTdHJlYW1NYXhCdWZmZXJTaXplSW5mbzo6aW5wdXQoMHUsIDEwMjQgLyBNU0dTTV9JTl9GUk1fU1ogKiBNU0dTTV9JTl9GUk1fU1opKQorICAgICAgICAgICAgICAgIC5idWlsZCgpKTsKKyAgICB9CisKKyAgIHByaXZhdGU6CisgICAgc3RkOjpzaGFyZWRfcHRyPEMyU3RyZWFtRm9ybWF0Q29uZmlnOjppbnB1dD4gbUlucHV0Rm9ybWF0OworICAgIHN0ZDo6c2hhcmVkX3B0cjxDMlN0cmVhbUZvcm1hdENvbmZpZzo6b3V0cHV0PiBtT3V0cHV0Rm9ybWF0OworICAgIHN0ZDo6c2hhcmVkX3B0cjxDMlBvcnRNaW1lQ29uZmlnOjppbnB1dD4gbUlucHV0TWVkaWFUeXBlOworICAgIHN0ZDo6c2hhcmVkX3B0cjxDMlBvcnRNaW1lQ29uZmlnOjpvdXRwdXQ+IG1PdXRwdXRNZWRpYVR5cGU7CisgICAgc3RkOjpzaGFyZWRfcHRyPEMyU3RyZWFtU2FtcGxlUmF0ZUluZm86Om91dHB1dD4gbVNhbXBsZVJhdGU7CisgICAgc3RkOjpzaGFyZWRfcHRyPEMyU3RyZWFtQ2hhbm5lbENvdW50SW5mbzo6b3V0cHV0PiBtQ2hhbm5lbENvdW50OworICAgIHN0ZDo6c2hhcmVkX3B0cjxDMkJpdHJhdGVUdW5pbmc6OmlucHV0PiBtQml0cmF0ZTsKKyAgICBzdGQ6OnNoYXJlZF9wdHI8QzJTdHJlYW1NYXhCdWZmZXJTaXplSW5mbzo6aW5wdXQ+IG1JbnB1dE1heEJ1ZlNpemU7Cit9OworCitDMlNvZnRHc21EZWM6OkMyU29mdEdzbURlYyhjb25zdCBjaGFyICpuYW1lLCBjMl9ub2RlX2lkX3QgaWQsCisgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdGQ6OnNoYXJlZF9wdHI8SW50ZkltcGw+JiBpbnRmSW1wbCkKKyAgICA6IFNpbXBsZUMyQ29tcG9uZW50KAorICAgICAgICBzdGQ6Om1ha2Vfc2hhcmVkPFNpbXBsZUludGVyZmFjZTxJbnRmSW1wbD4+KG5hbWUsIGlkLCBpbnRmSW1wbCkpLAorICAgICAgbUludGYoaW50ZkltcGwpLAorICAgICAgbUdzbShudWxscHRyKSB7Cit9CisKK0MyU29mdEdzbURlYzo6fkMyU29mdEdzbURlYygpIHsKKyAgICBvblJlbGVhc2UoKTsKK30KKworYzJfc3RhdHVzX3QgQzJTb2Z0R3NtRGVjOjpvbkluaXQoKSB7CisgICAgaWYgKCFtR3NtKSBtR3NtID0gZ3NtX2NyZWF0ZSgpOworICAgIGlmICghbUdzbSkgcmV0dXJuIEMyX05PX01FTU9SWTsKKyAgICBpbnQgbXNvcHQgPSAxOworICAgICh2b2lkKWdzbV9vcHRpb24obUdzbSwgR1NNX09QVF9XQVY0OSwgJm1zb3B0KTsKKyAgICBtU2lnbmFsbGVkRXJyb3IgPSBmYWxzZTsKKyAgICBtU2lnbmFsbGVkRW9zID0gZmFsc2U7CisgICAgcmV0dXJuIEMyX09LOworfQorCitjMl9zdGF0dXNfdCBDMlNvZnRHc21EZWM6Om9uU3RvcCgpIHsKKyAgICBpZiAobUdzbSkgeworICAgICAgICBnc21fZGVzdHJveShtR3NtKTsKKyAgICAgICAgbUdzbSA9IG51bGxwdHI7CisgICAgfQorICAgIGlmICghbUdzbSkgbUdzbSA9IGdzbV9jcmVhdGUoKTsKKyAgICBpZiAoIW1Hc20pIHJldHVybiBDMl9OT19NRU1PUlk7CisgICAgaW50IG1zb3B0ID0gMTsKKyAgICAodm9pZClnc21fb3B0aW9uKG1Hc20sIEdTTV9PUFRfV0FWNDksICZtc29wdCk7CisgICAgbVNpZ25hbGxlZEVycm9yID0gZmFsc2U7CisgICAgbVNpZ25hbGxlZEVvcyA9IGZhbHNlOworICAgIHJldHVybiBDMl9PSzsKK30KKwordm9pZCBDMlNvZnRHc21EZWM6Om9uUmVzZXQoKSB7CisgICAgKHZvaWQpb25TdG9wKCk7Cit9CisKK3ZvaWQgQzJTb2Z0R3NtRGVjOjpvblJlbGVhc2UoKSB7CisgICAgaWYgKG1Hc20pIHsKKyAgICAgICAgZ3NtX2Rlc3Ryb3kobUdzbSk7CisgICAgICAgIG1Hc20gPSBudWxscHRyOworICAgIH0KK30KKworYzJfc3RhdHVzX3QgQzJTb2Z0R3NtRGVjOjpvbkZsdXNoX3NtKCkgeworICAgIHJldHVybiBvblN0b3AoKTsKK30KKworc3RhdGljIHNpemVfdCBkZWNvZGVHU00oZ3NtIGhhbmRsZSwgaW50MTZfdCAqb3V0LCBzaXplX3Qgb3V0Q2FwYWNpdHksCisgICAgICAgICAgICAgICAgICAgICAgICB1aW50OF90ICppbiwgc2l6ZV90IGluU2l6ZSkgeworICAgIHNpemVfdCBvdXRTaXplID0gMDsKKworICAgIGlmIChpblNpemUgJSBNU0dTTV9JTl9GUk1fU1ogPT0gMAorICAgICAgICAgICAgJiYgKGluU2l6ZSAvIE1TR1NNX0lOX0ZSTV9TWiAqIE1TR1NNX09VVF9GUk1fU1ogKiBzaXplb2YoKm91dCkKKyAgICAgICAgICAgICAgICAgICAgPD0gb3V0Q2FwYWNpdHkpKSB7CisgICAgICAgIHdoaWxlIChpblNpemUgPiAwKSB7CisgICAgICAgICAgICBnc21fZGVjb2RlKGhhbmRsZSwgaW4sIG91dCk7CisgICAgICAgICAgICBpbiArPSBGUkdTTV9JTl9GUk1fU1o7CisgICAgICAgICAgICBpblNpemUgLT0gRlJHU01fSU5fRlJNX1NaOworICAgICAgICAgICAgb3V0ICs9IEZSR1NNX09VVF9GUk1fU1o7CisgICAgICAgICAgICBvdXRTaXplICs9IEZSR1NNX09VVF9GUk1fU1o7CisKKyAgICAgICAgICAgIGdzbV9kZWNvZGUoaGFuZGxlLCBpbiwgb3V0KTsKKyAgICAgICAgICAgIGluICs9IEZSR1NNX0lOX0ZSTV9TWl9NSU5VU18xOworICAgICAgICAgICAgaW5TaXplIC09IEZSR1NNX0lOX0ZSTV9TWl9NSU5VU18xOworICAgICAgICAgICAgb3V0ICs9IEZSR1NNX09VVF9GUk1fU1o7CisgICAgICAgICAgICBvdXRTaXplICs9IEZSR1NNX09VVF9GUk1fU1o7CisgICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gb3V0U2l6ZSAqIHNpemVvZihpbnQxNl90KTsKK30KKwordm9pZCBDMlNvZnRHc21EZWM6OnByb2Nlc3MoCisgICAgICAgIGNvbnN0IHN0ZDo6dW5pcXVlX3B0cjxDMldvcms+ICZ3b3JrLAorICAgICAgICBjb25zdCBzdGQ6OnNoYXJlZF9wdHI8QzJCbG9ja1Bvb2w+ICZwb29sKSB7CisgICAgLy8gSW5pdGlhbGl6ZSBvdXRwdXQgd29yaworICAgIHdvcmstPnJlc3VsdCA9IEMyX09LOworICAgIHdvcmstPndvcmtsZXRzUHJvY2Vzc2VkID0gMXU7CisgICAgd29yay0+d29ya2xldHMuZnJvbnQoKS0+b3V0cHV0LmZsYWdzID0gd29yay0+aW5wdXQuZmxhZ3M7CisKKyAgICBpZiAobVNpZ25hbGxlZEVycm9yIHx8IG1TaWduYWxsZWRFb3MpIHsKKyAgICAgICAgd29yay0+cmVzdWx0ID0gQzJfQkFEX1ZBTFVFOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgYm9vbCBlb3MgPSAoKHdvcmstPmlucHV0LmZsYWdzICYgQzJGcmFtZURhdGE6OkZMQUdfRU5EX09GX1NUUkVBTSkgIT0gMCk7CisgICAgQzJSZWFkVmlldyByVmlldyA9IG1EdW1teVJlYWRWaWV3OworICAgIHNpemVfdCBpbk9mZnNldCA9IDB1OworICAgIHNpemVfdCBpblNpemUgPSAwdTsKKyAgICBpZiAoIXdvcmstPmlucHV0LmJ1ZmZlcnMuZW1wdHkoKSkgeworICAgICAgICByVmlldyA9IHdvcmstPmlucHV0LmJ1ZmZlcnNbMF0tPmRhdGEoKS5saW5lYXJCbG9ja3MoKS5mcm9udCgpLm1hcCgpLmdldCgpOworICAgICAgICBpblNpemUgPSByVmlldy5jYXBhY2l0eSgpOworICAgICAgICBpZiAoaW5TaXplICYmIHJWaWV3LmVycm9yKCkpIHsKKyAgICAgICAgICAgIEFMT0dFKCJyZWFkIHZpZXcgbWFwIGZhaWxlZCAlZCIsIHJWaWV3LmVycm9yKCkpOworICAgICAgICAgICAgd29yay0+cmVzdWx0ID0gclZpZXcuZXJyb3IoKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgIH0KKworICAgIGlmIChpblNpemUgPT0gMCkgeworICAgICAgICB3b3JrLT53b3JrbGV0cy5mcm9udCgpLT5vdXRwdXQuZmxhZ3MgPSB3b3JrLT5pbnB1dC5mbGFnczsKKyAgICAgICAgd29yay0+d29ya2xldHMuZnJvbnQoKS0+b3V0cHV0LmJ1ZmZlcnMuY2xlYXIoKTsKKyAgICAgICAgd29yay0+d29ya2xldHMuZnJvbnQoKS0+b3V0cHV0Lm9yZGluYWwgPSB3b3JrLT5pbnB1dC5vcmRpbmFsOworICAgICAgICBpZiAoZW9zKSB7CisgICAgICAgICAgICBtU2lnbmFsbGVkRW9zID0gdHJ1ZTsKKyAgICAgICAgICAgIEFMT0dWKCJzaWduYWxsZWQgRU9TIik7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBBTE9HVigiaW4gYnVmZmVyIGF0dHIuIHNpemUgJXp1IHRpbWVzdGFtcCAlZCBmcmFtZWluZGV4ICVkIiwgaW5TaXplLAorICAgICAgICAgIChpbnQpd29yay0+aW5wdXQub3JkaW5hbC50aW1lc3RhbXAucGVla3UoKSwgKGludCl3b3JrLT5pbnB1dC5vcmRpbmFsLmZyYW1lSW5kZXgucGVla3UoKSk7CisKKyAgICBzaXplX3Qgb3V0Q2FwYWNpdHkgPSAoaW5TaXplIC8gTVNHU01fSU5fRlJNX1NaICkgKiBNU0dTTV9PVVRfRlJNX1NaICogc2l6ZW9mKGludDE2X3QpOworICAgIHN0ZDo6c2hhcmVkX3B0cjxDMkxpbmVhckJsb2NrPiBibG9jazsKKyAgICBDMk1lbW9yeVVzYWdlIHVzYWdlID0geyBDMk1lbW9yeVVzYWdlOjpDUFVfUkVBRCwgQzJNZW1vcnlVc2FnZTo6Q1BVX1dSSVRFIH07CisgICAgYzJfc3RhdHVzX3QgZXJyID0gcG9vbC0+ZmV0Y2hMaW5lYXJCbG9jayhvdXRDYXBhY2l0eSwgdXNhZ2UsICZibG9jayk7CisgICAgaWYgKGVyciAhPSBDMl9PSykgeworICAgICAgICBBTE9HRSgiZmV0Y2hMaW5lYXJCbG9jayBmb3IgT3V0cHV0IGZhaWxlZCB3aXRoIHN0YXR1cyAlZCIsIGVycik7CisgICAgICAgIHdvcmstPnJlc3VsdCA9IEMyX05PX01FTU9SWTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBDMldyaXRlVmlldyB3VmlldyA9IGJsb2NrLT5tYXAoKS5nZXQoKTsKKyAgICBpZiAod1ZpZXcuZXJyb3IoKSkgeworICAgICAgICBBTE9HRSgid3JpdGUgdmlldyBtYXAgZmFpbGVkICVkIiwgd1ZpZXcuZXJyb3IoKSk7CisgICAgICAgIHdvcmstPnJlc3VsdCA9IHdWaWV3LmVycm9yKCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpbnQxNl90ICpvdXRwdXQgPSByZWludGVycHJldF9jYXN0PGludDE2X3QgKj4od1ZpZXcuZGF0YSgpKTsKKyAgICB1aW50OF90ICppbnB1dCA9IGNvbnN0X2Nhc3Q8dWludDhfdCAqPihyVmlldy5kYXRhKCkgKyBpbk9mZnNldCk7CisgICAgc2l6ZV90IG91dFNpemUgPSBkZWNvZGVHU00obUdzbSwgb3V0cHV0LCBvdXRDYXBhY2l0eSwgaW5wdXQsIGluU2l6ZSk7CisgICAgaWYgKCFvdXRTaXplKSB7CisgICAgICAgIEFMT0dFKCJlbmNvdW50ZXJlZCBpbXByb3BlciBpbnNpemUgb3Igb3V0c2l6ZSIpOworICAgICAgICBtU2lnbmFsbGVkRXJyb3IgPSB0cnVlOworICAgICAgICB3b3JrLT5yZXN1bHQgPSBDMl9DT1JSVVBURUQ7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgQUxPR1YoIm91dCBidWZmZXIgYXR0ci4gc2l6ZSAlenUiLCBvdXRTaXplKTsKKyAgICB3b3JrLT53b3JrbGV0cy5mcm9udCgpLT5vdXRwdXQuZmxhZ3MgPSB3b3JrLT5pbnB1dC5mbGFnczsKKyAgICB3b3JrLT53b3JrbGV0cy5mcm9udCgpLT5vdXRwdXQuYnVmZmVycy5jbGVhcigpOworICAgIHdvcmstPndvcmtsZXRzLmZyb250KCktPm91dHB1dC5idWZmZXJzLnB1c2hfYmFjayhjcmVhdGVMaW5lYXJCdWZmZXIoYmxvY2ssIDAsIG91dFNpemUpKTsKKyAgICB3b3JrLT53b3JrbGV0cy5mcm9udCgpLT5vdXRwdXQub3JkaW5hbCA9IHdvcmstPmlucHV0Lm9yZGluYWw7CisgICAgaWYgKGVvcykgeworICAgICAgICBtU2lnbmFsbGVkRW9zID0gdHJ1ZTsKKyAgICAgICAgQUxPR1YoInNpZ25hbGxlZCBFT1MiKTsKKyAgICB9Cit9CisKK2MyX3N0YXR1c190IEMyU29mdEdzbURlYzo6ZHJhaW4oCisgICAgICAgIHVpbnQzMl90IGRyYWluTW9kZSwKKyAgICAgICAgY29uc3Qgc3RkOjpzaGFyZWRfcHRyPEMyQmxvY2tQb29sPiAmcG9vbCkgeworICAgICh2b2lkKSBwb29sOworICAgIGlmIChkcmFpbk1vZGUgPT0gTk9fRFJBSU4pIHsKKyAgICAgICAgQUxPR1coImRyYWluIHdpdGggTk9fRFJBSU46IG5vLW9wIik7CisgICAgICAgIHJldHVybiBDMl9PSzsKKyAgICB9CisgICAgaWYgKGRyYWluTW9kZSA9PSBEUkFJTl9DSEFJTikgeworICAgICAgICBBTE9HVygiRFJBSU5fQ0hBSU4gbm90IHN1cHBvcnRlZCIpOworICAgICAgICByZXR1cm4gQzJfT01JVFRFRDsKKyAgICB9CisKKyAgICByZXR1cm4gQzJfT0s7Cit9CisKK2NsYXNzIEMyU29mdEdTTURlY0ZhY3RvcnkgOiBwdWJsaWMgQzJDb21wb25lbnRGYWN0b3J5IHsKK3B1YmxpYzoKKyAgICBDMlNvZnRHU01EZWNGYWN0b3J5KCkgOiBtSGVscGVyKHN0ZDo6c3RhdGljX3BvaW50ZXJfY2FzdDxDMlJlZmxlY3RvckhlbHBlcj4oCisgICAgICAgICAgICBHZXRDb2RlYzJQbGF0Zm9ybUNvbXBvbmVudFN0b3JlKCktPmdldFBhcmFtUmVmbGVjdG9yKCkpKSB7CisgICAgfQorCisgICAgdmlydHVhbCBjMl9zdGF0dXNfdCBjcmVhdGVDb21wb25lbnQoCisgICAgICAgICAgICBjMl9ub2RlX2lkX3QgaWQsCisgICAgICAgICAgICBzdGQ6OnNoYXJlZF9wdHI8QzJDb21wb25lbnQ+KiBjb25zdCBjb21wb25lbnQsCisgICAgICAgICAgICBzdGQ6OmZ1bmN0aW9uPHZvaWQoQzJDb21wb25lbnQqKT4gZGVsZXRlcikgb3ZlcnJpZGUgeworICAgICAgICAqY29tcG9uZW50ID0gc3RkOjpzaGFyZWRfcHRyPEMyQ29tcG9uZW50PigKKyAgICAgICAgICAgICAgICBuZXcgQzJTb2Z0R3NtRGVjKENPTVBPTkVOVF9OQU1FLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGQ6Om1ha2Vfc2hhcmVkPEMyU29mdEdzbURlYzo6SW50ZkltcGw+KG1IZWxwZXIpKSwKKyAgICAgICAgICAgICAgICBkZWxldGVyKTsKKyAgICAgICAgcmV0dXJuIEMyX09LOworICAgIH0KKworICAgIHZpcnR1YWwgYzJfc3RhdHVzX3QgY3JlYXRlSW50ZXJmYWNlKAorICAgICAgICAgICAgYzJfbm9kZV9pZF90IGlkLAorICAgICAgICAgICAgc3RkOjpzaGFyZWRfcHRyPEMyQ29tcG9uZW50SW50ZXJmYWNlPiogY29uc3QgaW50ZXJmYWNlLAorICAgICAgICAgICAgc3RkOjpmdW5jdGlvbjx2b2lkKEMyQ29tcG9uZW50SW50ZXJmYWNlKik+IGRlbGV0ZXIpIG92ZXJyaWRlIHsKKyAgICAgICAgKmludGVyZmFjZSA9IHN0ZDo6c2hhcmVkX3B0cjxDMkNvbXBvbmVudEludGVyZmFjZT4oCisgICAgICAgICAgICAgICAgbmV3IFNpbXBsZUludGVyZmFjZTxDMlNvZnRHc21EZWM6OkludGZJbXBsPigKKyAgICAgICAgICAgICAgICAgICAgICAgIENPTVBPTkVOVF9OQU1FLCBpZCwgc3RkOjptYWtlX3NoYXJlZDxDMlNvZnRHc21EZWM6OkludGZJbXBsPihtSGVscGVyKSksCisgICAgICAgICAgICAgICAgZGVsZXRlcik7CisgICAgICAgIHJldHVybiBDMl9PSzsKKyAgICB9CisKKyAgICB2aXJ0dWFsIH5DMlNvZnRHU01EZWNGYWN0b3J5KCkgb3ZlcnJpZGUgPSBkZWZhdWx0OworCitwcml2YXRlOgorICAgIHN0ZDo6c2hhcmVkX3B0cjxDMlJlZmxlY3RvckhlbHBlcj4gbUhlbHBlcjsKK307CisKK30gIC8vIG5hbWVzcGFjZSBhbmRyb2lkCisKK2V4dGVybiAiQyIgOjpDMkNvbXBvbmVudEZhY3RvcnkqIENyZWF0ZUNvZGVjMkZhY3RvcnkoKSB7CisgICAgQUxPR1YoImluICVzIiwgX19mdW5jX18pOworICAgIHJldHVybiBuZXcgOjphbmRyb2lkOjpDMlNvZnRHU01EZWNGYWN0b3J5KCk7Cit9CisKK2V4dGVybiAiQyIgdm9pZCBEZXN0cm95Q29kZWMyRmFjdG9yeSg6OkMyQ29tcG9uZW50RmFjdG9yeSogZmFjdG9yeSkgeworICAgIEFMT0dWKCJpbiAlcyIsIF9fZnVuY19fKTsKKyAgICBkZWxldGUgZmFjdG9yeTsKK30KZGlmZiAtLWdpdCBhL21lZGlhL2NvZGVjMi9jb21wb25lbnRzL2dzbS9DMlNvZnRHc21EZWMuaCBiL21lZGlhL2NvZGVjMi9jb21wb25lbnRzL2dzbS9DMlNvZnRHc21EZWMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yYjIwOWZlCi0tLSAvZGV2L251bGwKKysrIGIvbWVkaWEvY29kZWMyL2NvbXBvbmVudHMvZ3NtL0MyU29mdEdzbURlYy5oCkBAIC0wLDAgKzEsNjUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTggVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworCisjaWZuZGVmIEFORFJPSURfQzJfU09GVF9HU01fREVDX0hfCisjZGVmaW5lIEFORFJPSURfQzJfU09GVF9HU01fREVDX0hfCisKKyNpbmNsdWRlIDxTaW1wbGVDMkNvbXBvbmVudC5oPgorCisKK2V4dGVybiAiQyIgeworICAgICNpbmNsdWRlICJnc20uaCIKK30KKworbmFtZXNwYWNlIGFuZHJvaWQgeworCisjZGVmaW5lIEZSR1NNX0lOX0ZSTV9TWiAgICAgICAgICAgICAzMworI2RlZmluZSBGUkdTTV9JTl9GUk1fU1pfTUlOVVNfMSAgICAgMzIKKyNkZWZpbmUgRlJHU01fT1VUX0ZSTV9TWiAgICAgICAgICAgIDE2MAorI2RlZmluZSBNU0dTTV9JTl9GUk1fU1ogICAgICAgICAgICAgKEZSR1NNX0lOX0ZSTV9TWiArIEZSR1NNX0lOX0ZSTV9TWl9NSU5VU18xKQorI2RlZmluZSBNU0dTTV9PVVRfRlJNX1NaICAgICAgICAgICAgKEZSR1NNX09VVF9GUk1fU1ogKiAyKQorCitzdHJ1Y3QgQzJTb2Z0R3NtRGVjIDogcHVibGljIFNpbXBsZUMyQ29tcG9uZW50IHsKKyAgICBjbGFzcyBJbnRmSW1wbDsKKworICAgIEMyU29mdEdzbURlYyhjb25zdCBjaGFyICpuYW1lLCBjMl9ub2RlX2lkX3QgaWQsCisgICAgICAgICAgICAgIGNvbnN0IHN0ZDo6c2hhcmVkX3B0cjxJbnRmSW1wbD4gJmludGZJbXBsKTsKKyAgICB2aXJ0dWFsIH5DMlNvZnRHc21EZWMoKTsKKworICAgIC8vIEZyb20gU2ltcGxlQzJDb21wb25lbnQKKyAgICBjMl9zdGF0dXNfdCBvbkluaXQoKSBvdmVycmlkZTsKKyAgICBjMl9zdGF0dXNfdCBvblN0b3AoKSBvdmVycmlkZTsKKyAgICB2b2lkIG9uUmVzZXQoKSBvdmVycmlkZTsKKyAgICB2b2lkIG9uUmVsZWFzZSgpIG92ZXJyaWRlOworICAgIGMyX3N0YXR1c190IG9uRmx1c2hfc20oKSBvdmVycmlkZTsKKyAgICB2b2lkIHByb2Nlc3MoCisgICAgICAgICAgICBjb25zdCBzdGQ6OnVuaXF1ZV9wdHI8QzJXb3JrPiAmd29yaywKKyAgICAgICAgICAgIGNvbnN0IHN0ZDo6c2hhcmVkX3B0cjxDMkJsb2NrUG9vbD4gJnBvb2wpIG92ZXJyaWRlOworICAgIGMyX3N0YXR1c190IGRyYWluKAorICAgICAgICAgICAgdWludDMyX3QgZHJhaW5Nb2RlLAorICAgICAgICAgICAgY29uc3Qgc3RkOjpzaGFyZWRfcHRyPEMyQmxvY2tQb29sPiAmcG9vbCkgb3ZlcnJpZGU7CisgcHJpdmF0ZToKKyAgICBzdGQ6OnNoYXJlZF9wdHI8SW50ZkltcGw+IG1JbnRmOworICAgIGdzbSBtR3NtOworICAgIGJvb2wgbVNpZ25hbGxlZEVycm9yOworICAgIGJvb2wgbVNpZ25hbGxlZEVvczsKKworICAgIEMyX0RPX05PVF9DT1BZKEMyU29mdEdzbURlYyk7Cit9OworCit9ICAvLyBuYW1lc3BhY2UgYW5kcm9pZAorCisjZW5kaWYgIC8vIEFORFJPSURfQzJfU09GVF9HU01fREVDX0hfCmRpZmYgLS1naXQgYS9tZWRpYS9jb2RlYzIvY29tcG9uZW50cy9nc20vTU9EVUxFX0xJQ0VOU0VfQVBBQ0hFMiBiL21lZGlhL2NvZGVjMi9jb21wb25lbnRzL2dzbS9NT0RVTEVfTElDRU5TRV9BUEFDSEUyCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU2OWRlMjkKLS0tIC9kZXYvbnVsbAorKysgYi9tZWRpYS9jb2RlYzIvY29tcG9uZW50cy9nc20vTU9EVUxFX0xJQ0VOU0VfQVBBQ0hFMgpkaWZmIC0tZ2l0IGEvbWVkaWEvY29kZWMyL2NvbXBvbmVudHMvZ3NtL05PVElDRSBiL21lZGlhL2NvZGVjMi9jb21wb25lbnRzL2dzbS9OT1RJQ0UKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzViMWVmYQotLS0gL2Rldi9udWxsCisrKyBiL21lZGlhL2NvZGVjMi9jb21wb25lbnRzL2dzbS9OT1RJQ0UKQEAgLTAsMCArMSwxOTAgQEAKKworICAgQ29weXJpZ2h0IChjKSAyMDA1LTIwMDgsIFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKworICAgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgICB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisKKyAgIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAgIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgICBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAgIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAgIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorCisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFwYWNoZSBMaWNlbnNlCisgICAgICAgICAgICAgICAgICAgICAgICAgICBWZXJzaW9uIDIuMCwgSmFudWFyeSAyMDA0CisgICAgICAgICAgICAgICAgICAgICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvCisKKyAgIFRFUk1TIEFORCBDT05ESVRJT05TIEZPUiBVU0UsIFJFUFJPRFVDVElPTiwgQU5EIERJU1RSSUJVVElPTgorCisgICAxLiBEZWZpbml0aW9ucy4KKworICAgICAgIkxpY2Vuc2UiIHNoYWxsIG1lYW4gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIGZvciB1c2UsIHJlcHJvZHVjdGlvbiwKKyAgICAgIGFuZCBkaXN0cmlidXRpb24gYXMgZGVmaW5lZCBieSBTZWN0aW9ucyAxIHRocm91Z2ggOSBvZiB0aGlzIGRvY3VtZW50LgorCisgICAgICAiTGljZW5zb3IiIHNoYWxsIG1lYW4gdGhlIGNvcHlyaWdodCBvd25lciBvciBlbnRpdHkgYXV0aG9yaXplZCBieQorICAgICAgdGhlIGNvcHlyaWdodCBvd25lciB0aGF0IGlzIGdyYW50aW5nIHRoZSBMaWNlbnNlLgorCisgICAgICAiTGVnYWwgRW50aXR5IiBzaGFsbCBtZWFuIHRoZSB1bmlvbiBvZiB0aGUgYWN0aW5nIGVudGl0eSBhbmQgYWxsCisgICAgICBvdGhlciBlbnRpdGllcyB0aGF0IGNvbnRyb2wsIGFyZSBjb250cm9sbGVkIGJ5LCBvciBhcmUgdW5kZXIgY29tbW9uCisgICAgICBjb250cm9sIHdpdGggdGhhdCBlbnRpdHkuIEZvciB0aGUgcHVycG9zZXMgb2YgdGhpcyBkZWZpbml0aW9uLAorICAgICAgImNvbnRyb2wiIG1lYW5zIChpKSB0aGUgcG93ZXIsIGRpcmVjdCBvciBpbmRpcmVjdCwgdG8gY2F1c2UgdGhlCisgICAgICBkaXJlY3Rpb24gb3IgbWFuYWdlbWVudCBvZiBzdWNoIGVudGl0eSwgd2hldGhlciBieSBjb250cmFjdCBvcgorICAgICAgb3RoZXJ3aXNlLCBvciAoaWkpIG93bmVyc2hpcCBvZiBmaWZ0eSBwZXJjZW50ICg1MCUpIG9yIG1vcmUgb2YgdGhlCisgICAgICBvdXRzdGFuZGluZyBzaGFyZXMsIG9yIChpaWkpIGJlbmVmaWNpYWwgb3duZXJzaGlwIG9mIHN1Y2ggZW50aXR5LgorCisgICAgICAiWW91IiAob3IgIllvdXIiKSBzaGFsbCBtZWFuIGFuIGluZGl2aWR1YWwgb3IgTGVnYWwgRW50aXR5CisgICAgICBleGVyY2lzaW5nIHBlcm1pc3Npb25zIGdyYW50ZWQgYnkgdGhpcyBMaWNlbnNlLgorCisgICAgICAiU291cmNlIiBmb3JtIHNoYWxsIG1lYW4gdGhlIHByZWZlcnJlZCBmb3JtIGZvciBtYWtpbmcgbW9kaWZpY2F0aW9ucywKKyAgICAgIGluY2x1ZGluZyBidXQgbm90IGxpbWl0ZWQgdG8gc29mdHdhcmUgc291cmNlIGNvZGUsIGRvY3VtZW50YXRpb24KKyAgICAgIHNvdXJjZSwgYW5kIGNvbmZpZ3VyYXRpb24gZmlsZXMuCisKKyAgICAgICJPYmplY3QiIGZvcm0gc2hhbGwgbWVhbiBhbnkgZm9ybSByZXN1bHRpbmcgZnJvbSBtZWNoYW5pY2FsCisgICAgICB0cmFuc2Zvcm1hdGlvbiBvciB0cmFuc2xhdGlvbiBvZiBhIFNvdXJjZSBmb3JtLCBpbmNsdWRpbmcgYnV0CisgICAgICBub3QgbGltaXRlZCB0byBjb21waWxlZCBvYmplY3QgY29kZSwgZ2VuZXJhdGVkIGRvY3VtZW50YXRpb24sCisgICAgICBhbmQgY29udmVyc2lvbnMgdG8gb3RoZXIgbWVkaWEgdHlwZXMuCisKKyAgICAgICJXb3JrIiBzaGFsbCBtZWFuIHRoZSB3b3JrIG9mIGF1dGhvcnNoaXAsIHdoZXRoZXIgaW4gU291cmNlIG9yCisgICAgICBPYmplY3QgZm9ybSwgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIExpY2Vuc2UsIGFzIGluZGljYXRlZCBieSBhCisgICAgICBjb3B5cmlnaHQgbm90aWNlIHRoYXQgaXMgaW5jbHVkZWQgaW4gb3IgYXR0YWNoZWQgdG8gdGhlIHdvcmsKKyAgICAgIChhbiBleGFtcGxlIGlzIHByb3ZpZGVkIGluIHRoZSBBcHBlbmRpeCBiZWxvdykuCisKKyAgICAgICJEZXJpdmF0aXZlIFdvcmtzIiBzaGFsbCBtZWFuIGFueSB3b3JrLCB3aGV0aGVyIGluIFNvdXJjZSBvciBPYmplY3QKKyAgICAgIGZvcm0sIHRoYXQgaXMgYmFzZWQgb24gKG9yIGRlcml2ZWQgZnJvbSkgdGhlIFdvcmsgYW5kIGZvciB3aGljaCB0aGUKKyAgICAgIGVkaXRvcmlhbCByZXZpc2lvbnMsIGFubm90YXRpb25zLCBlbGFib3JhdGlvbnMsIG9yIG90aGVyIG1vZGlmaWNhdGlvbnMKKyAgICAgIHJlcHJlc2VudCwgYXMgYSB3aG9sZSwgYW4gb3JpZ2luYWwgd29yayBvZiBhdXRob3JzaGlwLiBGb3IgdGhlIHB1cnBvc2VzCisgICAgICBvZiB0aGlzIExpY2Vuc2UsIERlcml2YXRpdmUgV29ya3Mgc2hhbGwgbm90IGluY2x1ZGUgd29ya3MgdGhhdCByZW1haW4KKyAgICAgIHNlcGFyYWJsZSBmcm9tLCBvciBtZXJlbHkgbGluayAob3IgYmluZCBieSBuYW1lKSB0byB0aGUgaW50ZXJmYWNlcyBvZiwKKyAgICAgIHRoZSBXb3JrIGFuZCBEZXJpdmF0aXZlIFdvcmtzIHRoZXJlb2YuCisKKyAgICAgICJDb250cmlidXRpb24iIHNoYWxsIG1lYW4gYW55IHdvcmsgb2YgYXV0aG9yc2hpcCwgaW5jbHVkaW5nCisgICAgICB0aGUgb3JpZ2luYWwgdmVyc2lvbiBvZiB0aGUgV29yayBhbmQgYW55IG1vZGlmaWNhdGlvbnMgb3IgYWRkaXRpb25zCisgICAgICB0byB0aGF0IFdvcmsgb3IgRGVyaXZhdGl2ZSBXb3JrcyB0aGVyZW9mLCB0aGF0IGlzIGludGVudGlvbmFsbHkKKyAgICAgIHN1Ym1pdHRlZCB0byBMaWNlbnNvciBmb3IgaW5jbHVzaW9uIGluIHRoZSBXb3JrIGJ5IHRoZSBjb3B5cmlnaHQgb3duZXIKKyAgICAgIG9yIGJ5IGFuIGluZGl2aWR1YWwgb3IgTGVnYWwgRW50aXR5IGF1dGhvcml6ZWQgdG8gc3VibWl0IG9uIGJlaGFsZiBvZgorICAgICAgdGhlIGNvcHlyaWdodCBvd25lci4gRm9yIHRoZSBwdXJwb3NlcyBvZiB0aGlzIGRlZmluaXRpb24sICJzdWJtaXR0ZWQiCisgICAgICBtZWFucyBhbnkgZm9ybSBvZiBlbGVjdHJvbmljLCB2ZXJiYWwsIG9yIHdyaXR0ZW4gY29tbXVuaWNhdGlvbiBzZW50CisgICAgICB0byB0aGUgTGljZW5zb3Igb3IgaXRzIHJlcHJlc2VudGF0aXZlcywgaW5jbHVkaW5nIGJ1dCBub3QgbGltaXRlZCB0bworICAgICAgY29tbXVuaWNhdGlvbiBvbiBlbGVjdHJvbmljIG1haWxpbmcgbGlzdHMsIHNvdXJjZSBjb2RlIGNvbnRyb2wgc3lzdGVtcywKKyAgICAgIGFuZCBpc3N1ZSB0cmFja2luZyBzeXN0ZW1zIHRoYXQgYXJlIG1hbmFnZWQgYnksIG9yIG9uIGJlaGFsZiBvZiwgdGhlCisgICAgICBMaWNlbnNvciBmb3IgdGhlIHB1cnBvc2Ugb2YgZGlzY3Vzc2luZyBhbmQgaW1wcm92aW5nIHRoZSBXb3JrLCBidXQKKyAgICAgIGV4Y2x1ZGluZyBjb21tdW5pY2F0aW9uIHRoYXQgaXMgY29uc3BpY3VvdXNseSBtYXJrZWQgb3Igb3RoZXJ3aXNlCisgICAgICBkZXNpZ25hdGVkIGluIHdyaXRpbmcgYnkgdGhlIGNvcHlyaWdodCBvd25lciBhcyAiTm90IGEgQ29udHJpYnV0aW9uLiIKKworICAgICAgIkNvbnRyaWJ1dG9yIiBzaGFsbCBtZWFuIExpY2Vuc29yIGFuZCBhbnkgaW5kaXZpZHVhbCBvciBMZWdhbCBFbnRpdHkKKyAgICAgIG9uIGJlaGFsZiBvZiB3aG9tIGEgQ29udHJpYnV0aW9uIGhhcyBiZWVuIHJlY2VpdmVkIGJ5IExpY2Vuc29yIGFuZAorICAgICAgc3Vic2VxdWVudGx5IGluY29ycG9yYXRlZCB3aXRoaW4gdGhlIFdvcmsuCisKKyAgIDIuIEdyYW50IG9mIENvcHlyaWdodCBMaWNlbnNlLiBTdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZgorICAgICAgdGhpcyBMaWNlbnNlLCBlYWNoIENvbnRyaWJ1dG9yIGhlcmVieSBncmFudHMgdG8gWW91IGEgcGVycGV0dWFsLAorICAgICAgd29ybGR3aWRlLCBub24tZXhjbHVzaXZlLCBuby1jaGFyZ2UsIHJveWFsdHktZnJlZSwgaXJyZXZvY2FibGUKKyAgICAgIGNvcHlyaWdodCBsaWNlbnNlIHRvIHJlcHJvZHVjZSwgcHJlcGFyZSBEZXJpdmF0aXZlIFdvcmtzIG9mLAorICAgICAgcHVibGljbHkgZGlzcGxheSwgcHVibGljbHkgcGVyZm9ybSwgc3VibGljZW5zZSwgYW5kIGRpc3RyaWJ1dGUgdGhlCisgICAgICBXb3JrIGFuZCBzdWNoIERlcml2YXRpdmUgV29ya3MgaW4gU291cmNlIG9yIE9iamVjdCBmb3JtLgorCisgICAzLiBHcmFudCBvZiBQYXRlbnQgTGljZW5zZS4gU3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YKKyAgICAgIHRoaXMgTGljZW5zZSwgZWFjaCBDb250cmlidXRvciBoZXJlYnkgZ3JhbnRzIHRvIFlvdSBhIHBlcnBldHVhbCwKKyAgICAgIHdvcmxkd2lkZSwgbm9uLWV4Y2x1c2l2ZSwgbm8tY2hhcmdlLCByb3lhbHR5LWZyZWUsIGlycmV2b2NhYmxlCisgICAgICAoZXhjZXB0IGFzIHN0YXRlZCBpbiB0aGlzIHNlY3Rpb24pIHBhdGVudCBsaWNlbnNlIHRvIG1ha2UsIGhhdmUgbWFkZSwKKyAgICAgIHVzZSwgb2ZmZXIgdG8gc2VsbCwgc2VsbCwgaW1wb3J0LCBhbmQgb3RoZXJ3aXNlIHRyYW5zZmVyIHRoZSBXb3JrLAorICAgICAgd2hlcmUgc3VjaCBsaWNlbnNlIGFwcGxpZXMgb25seSB0byB0aG9zZSBwYXRlbnQgY2xhaW1zIGxpY2Vuc2FibGUKKyAgICAgIGJ5IHN1Y2ggQ29udHJpYnV0b3IgdGhhdCBhcmUgbmVjZXNzYXJpbHkgaW5mcmluZ2VkIGJ5IHRoZWlyCisgICAgICBDb250cmlidXRpb24ocykgYWxvbmUgb3IgYnkgY29tYmluYXRpb24gb2YgdGhlaXIgQ29udHJpYnV0aW9uKHMpCisgICAgICB3aXRoIHRoZSBXb3JrIHRvIHdoaWNoIHN1Y2ggQ29udHJpYnV0aW9uKHMpIHdhcyBzdWJtaXR0ZWQuIElmIFlvdQorICAgICAgaW5zdGl0dXRlIHBhdGVudCBsaXRpZ2F0aW9uIGFnYWluc3QgYW55IGVudGl0eSAoaW5jbHVkaW5nIGEKKyAgICAgIGNyb3NzLWNsYWltIG9yIGNvdW50ZXJjbGFpbSBpbiBhIGxhd3N1aXQpIGFsbGVnaW5nIHRoYXQgdGhlIFdvcmsKKyAgICAgIG9yIGEgQ29udHJpYnV0aW9uIGluY29ycG9yYXRlZCB3aXRoaW4gdGhlIFdvcmsgY29uc3RpdHV0ZXMgZGlyZWN0CisgICAgICBvciBjb250cmlidXRvcnkgcGF0ZW50IGluZnJpbmdlbWVudCwgdGhlbiBhbnkgcGF0ZW50IGxpY2Vuc2VzCisgICAgICBncmFudGVkIHRvIFlvdSB1bmRlciB0aGlzIExpY2Vuc2UgZm9yIHRoYXQgV29yayBzaGFsbCB0ZXJtaW5hdGUKKyAgICAgIGFzIG9mIHRoZSBkYXRlIHN1Y2ggbGl0aWdhdGlvbiBpcyBmaWxlZC4KKworICAgNC4gUmVkaXN0cmlidXRpb24uIFlvdSBtYXkgcmVwcm9kdWNlIGFuZCBkaXN0cmlidXRlIGNvcGllcyBvZiB0aGUKKyAgICAgIFdvcmsgb3IgRGVyaXZhdGl2ZSBXb3JrcyB0aGVyZW9mIGluIGFueSBtZWRpdW0sIHdpdGggb3Igd2l0aG91dAorICAgICAgbW9kaWZpY2F0aW9ucywgYW5kIGluIFNvdXJjZSBvciBPYmplY3QgZm9ybSwgcHJvdmlkZWQgdGhhdCBZb3UKKyAgICAgIG1lZXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgorCisgICAgICAoYSkgWW91IG11c3QgZ2l2ZSBhbnkgb3RoZXIgcmVjaXBpZW50cyBvZiB0aGUgV29yayBvcgorICAgICAgICAgIERlcml2YXRpdmUgV29ya3MgYSBjb3B5IG9mIHRoaXMgTGljZW5zZTsgYW5kCisKKyAgICAgIChiKSBZb3UgbXVzdCBjYXVzZSBhbnkgbW9kaWZpZWQgZmlsZXMgdG8gY2FycnkgcHJvbWluZW50IG5vdGljZXMKKyAgICAgICAgICBzdGF0aW5nIHRoYXQgWW91IGNoYW5nZWQgdGhlIGZpbGVzOyBhbmQKKworICAgICAgKGMpIFlvdSBtdXN0IHJldGFpbiwgaW4gdGhlIFNvdXJjZSBmb3JtIG9mIGFueSBEZXJpdmF0aXZlIFdvcmtzCisgICAgICAgICAgdGhhdCBZb3UgZGlzdHJpYnV0ZSwgYWxsIGNvcHlyaWdodCwgcGF0ZW50LCB0cmFkZW1hcmssIGFuZAorICAgICAgICAgIGF0dHJpYnV0aW9uIG5vdGljZXMgZnJvbSB0aGUgU291cmNlIGZvcm0gb2YgdGhlIFdvcmssCisgICAgICAgICAgZXhjbHVkaW5nIHRob3NlIG5vdGljZXMgdGhhdCBkbyBub3QgcGVydGFpbiB0byBhbnkgcGFydCBvZgorICAgICAgICAgIHRoZSBEZXJpdmF0aXZlIFdvcmtzOyBhbmQKKworICAgICAgKGQpIElmIHRoZSBXb3JrIGluY2x1ZGVzIGEgIk5PVElDRSIgdGV4dCBmaWxlIGFzIHBhcnQgb2YgaXRzCisgICAgICAgICAgZGlzdHJpYnV0aW9uLCB0aGVuIGFueSBEZXJpdmF0aXZlIFdvcmtzIHRoYXQgWW91IGRpc3RyaWJ1dGUgbXVzdAorICAgICAgICAgIGluY2x1ZGUgYSByZWFkYWJsZSBjb3B5IG9mIHRoZSBhdHRyaWJ1dGlvbiBub3RpY2VzIGNvbnRhaW5lZAorICAgICAgICAgIHdpdGhpbiBzdWNoIE5PVElDRSBmaWxlLCBleGNsdWRpbmcgdGhvc2Ugbm90aWNlcyB0aGF0IGRvIG5vdAorICAgICAgICAgIHBlcnRhaW4gdG8gYW55IHBhcnQgb2YgdGhlIERlcml2YXRpdmUgV29ya3MsIGluIGF0IGxlYXN0IG9uZQorICAgICAgICAgIG9mIHRoZSBmb2xsb3dpbmcgcGxhY2VzOiB3aXRoaW4gYSBOT1RJQ0UgdGV4dCBmaWxlIGRpc3RyaWJ1dGVkCisgICAgICAgICAgYXMgcGFydCBvZiB0aGUgRGVyaXZhdGl2ZSBXb3Jrczsgd2l0aGluIHRoZSBTb3VyY2UgZm9ybSBvcgorICAgICAgICAgIGRvY3VtZW50YXRpb24sIGlmIHByb3ZpZGVkIGFsb25nIHdpdGggdGhlIERlcml2YXRpdmUgV29ya3M7IG9yLAorICAgICAgICAgIHdpdGhpbiBhIGRpc3BsYXkgZ2VuZXJhdGVkIGJ5IHRoZSBEZXJpdmF0aXZlIFdvcmtzLCBpZiBhbmQKKyAgICAgICAgICB3aGVyZXZlciBzdWNoIHRoaXJkLXBhcnR5IG5vdGljZXMgbm9ybWFsbHkgYXBwZWFyLiBUaGUgY29udGVudHMKKyAgICAgICAgICBvZiB0aGUgTk9USUNFIGZpbGUgYXJlIGZvciBpbmZvcm1hdGlvbmFsIHB1cnBvc2VzIG9ubHkgYW5kCisgICAgICAgICAgZG8gbm90IG1vZGlmeSB0aGUgTGljZW5zZS4gWW91IG1heSBhZGQgWW91ciBvd24gYXR0cmlidXRpb24KKyAgICAgICAgICBub3RpY2VzIHdpdGhpbiBEZXJpdmF0aXZlIFdvcmtzIHRoYXQgWW91IGRpc3RyaWJ1dGUsIGFsb25nc2lkZQorICAgICAgICAgIG9yIGFzIGFuIGFkZGVuZHVtIHRvIHRoZSBOT1RJQ0UgdGV4dCBmcm9tIHRoZSBXb3JrLCBwcm92aWRlZAorICAgICAgICAgIHRoYXQgc3VjaCBhZGRpdGlvbmFsIGF0dHJpYnV0aW9uIG5vdGljZXMgY2Fubm90IGJlIGNvbnN0cnVlZAorICAgICAgICAgIGFzIG1vZGlmeWluZyB0aGUgTGljZW5zZS4KKworICAgICAgWW91IG1heSBhZGQgWW91ciBvd24gY29weXJpZ2h0IHN0YXRlbWVudCB0byBZb3VyIG1vZGlmaWNhdGlvbnMgYW5kCisgICAgICBtYXkgcHJvdmlkZSBhZGRpdGlvbmFsIG9yIGRpZmZlcmVudCBsaWNlbnNlIHRlcm1zIGFuZCBjb25kaXRpb25zCisgICAgICBmb3IgdXNlLCByZXByb2R1Y3Rpb24sIG9yIGRpc3RyaWJ1dGlvbiBvZiBZb3VyIG1vZGlmaWNhdGlvbnMsIG9yCisgICAgICBmb3IgYW55IHN1Y2ggRGVyaXZhdGl2ZSBXb3JrcyBhcyBhIHdob2xlLCBwcm92aWRlZCBZb3VyIHVzZSwKKyAgICAgIHJlcHJvZHVjdGlvbiwgYW5kIGRpc3RyaWJ1dGlvbiBvZiB0aGUgV29yayBvdGhlcndpc2UgY29tcGxpZXMgd2l0aAorICAgICAgdGhlIGNvbmRpdGlvbnMgc3RhdGVkIGluIHRoaXMgTGljZW5zZS4KKworICAgNS4gU3VibWlzc2lvbiBvZiBDb250cmlidXRpb25zLiBVbmxlc3MgWW91IGV4cGxpY2l0bHkgc3RhdGUgb3RoZXJ3aXNlLAorICAgICAgYW55IENvbnRyaWJ1dGlvbiBpbnRlbnRpb25hbGx5IHN1Ym1pdHRlZCBmb3IgaW5jbHVzaW9uIGluIHRoZSBXb3JrCisgICAgICBieSBZb3UgdG8gdGhlIExpY2Vuc29yIHNoYWxsIGJlIHVuZGVyIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZgorICAgICAgdGhpcyBMaWNlbnNlLCB3aXRob3V0IGFueSBhZGRpdGlvbmFsIHRlcm1zIG9yIGNvbmRpdGlvbnMuCisgICAgICBOb3R3aXRoc3RhbmRpbmcgdGhlIGFib3ZlLCBub3RoaW5nIGhlcmVpbiBzaGFsbCBzdXBlcnNlZGUgb3IgbW9kaWZ5CisgICAgICB0aGUgdGVybXMgb2YgYW55IHNlcGFyYXRlIGxpY2Vuc2UgYWdyZWVtZW50IHlvdSBtYXkgaGF2ZSBleGVjdXRlZAorICAgICAgd2l0aCBMaWNlbnNvciByZWdhcmRpbmcgc3VjaCBDb250cmlidXRpb25zLgorCisgICA2LiBUcmFkZW1hcmtzLiBUaGlzIExpY2Vuc2UgZG9lcyBub3QgZ3JhbnQgcGVybWlzc2lvbiB0byB1c2UgdGhlIHRyYWRlCisgICAgICBuYW1lcywgdHJhZGVtYXJrcywgc2VydmljZSBtYXJrcywgb3IgcHJvZHVjdCBuYW1lcyBvZiB0aGUgTGljZW5zb3IsCisgICAgICBleGNlcHQgYXMgcmVxdWlyZWQgZm9yIHJlYXNvbmFibGUgYW5kIGN1c3RvbWFyeSB1c2UgaW4gZGVzY3JpYmluZyB0aGUKKyAgICAgIG9yaWdpbiBvZiB0aGUgV29yayBhbmQgcmVwcm9kdWNpbmcgdGhlIGNvbnRlbnQgb2YgdGhlIE5PVElDRSBmaWxlLgorCisgICA3LiBEaXNjbGFpbWVyIG9mIFdhcnJhbnR5LiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IKKyAgICAgIGFncmVlZCB0byBpbiB3cml0aW5nLCBMaWNlbnNvciBwcm92aWRlcyB0aGUgV29yayAoYW5kIGVhY2gKKyAgICAgIENvbnRyaWJ1dG9yIHByb3ZpZGVzIGl0cyBDb250cmlidXRpb25zKSBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICAgICAgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yCisgICAgICBpbXBsaWVkLCBpbmNsdWRpbmcsIHdpdGhvdXQgbGltaXRhdGlvbiwgYW55IHdhcnJhbnRpZXMgb3IgY29uZGl0aW9ucworICAgICAgb2YgVElUTEUsIE5PTi1JTkZSSU5HRU1FTlQsIE1FUkNIQU5UQUJJTElUWSwgb3IgRklUTkVTUyBGT1IgQQorICAgICAgUEFSVElDVUxBUiBQVVJQT1NFLiBZb3UgYXJlIHNvbGVseSByZXNwb25zaWJsZSBmb3IgZGV0ZXJtaW5pbmcgdGhlCisgICAgICBhcHByb3ByaWF0ZW5lc3Mgb2YgdXNpbmcgb3IgcmVkaXN0cmlidXRpbmcgdGhlIFdvcmsgYW5kIGFzc3VtZSBhbnkKKyAgICAgIHJpc2tzIGFzc29jaWF0ZWQgd2l0aCBZb3VyIGV4ZXJjaXNlIG9mIHBlcm1pc3Npb25zIHVuZGVyIHRoaXMgTGljZW5zZS4KKworICAgOC4gTGltaXRhdGlvbiBvZiBMaWFiaWxpdHkuIEluIG5vIGV2ZW50IGFuZCB1bmRlciBubyBsZWdhbCB0aGVvcnksCisgICAgICB3aGV0aGVyIGluIHRvcnQgKGluY2x1ZGluZyBuZWdsaWdlbmNlKSwgY29udHJhY3QsIG9yIG90aGVyd2lzZSwKKyAgICAgIHVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyAoc3VjaCBhcyBkZWxpYmVyYXRlIGFuZCBncm9zc2x5CisgICAgICBuZWdsaWdlbnQgYWN0cykgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNoYWxsIGFueSBDb250cmlidXRvciBiZQorICAgICAgbGlhYmxlIHRvIFlvdSBmb3IgZGFtYWdlcywgaW5jbHVkaW5nIGFueSBkaXJlY3QsIGluZGlyZWN0LCBzcGVjaWFsLAorICAgICAgaW5jaWRlbnRhbCwgb3IgY29uc2VxdWVudGlhbCBkYW1hZ2VzIG9mIGFueSBjaGFyYWN0ZXIgYXJpc2luZyBhcyBhCisgICAgICByZXN1bHQgb2YgdGhpcyBMaWNlbnNlIG9yIG91dCBvZiB0aGUgdXNlIG9yIGluYWJpbGl0eSB0byB1c2UgdGhlCisgICAgICBXb3JrIChpbmNsdWRpbmcgYnV0IG5vdCBsaW1pdGVkIHRvIGRhbWFnZXMgZm9yIGxvc3Mgb2YgZ29vZHdpbGwsCisgICAgICB3b3JrIHN0b3BwYWdlLCBjb21wdXRlciBmYWlsdXJlIG9yIG1hbGZ1bmN0aW9uLCBvciBhbnkgYW5kIGFsbAorICAgICAgb3RoZXIgY29tbWVyY2lhbCBkYW1hZ2VzIG9yIGxvc3NlcyksIGV2ZW4gaWYgc3VjaCBDb250cmlidXRvcgorICAgICAgaGFzIGJlZW4gYWR2aXNlZCBvZiB0aGUgcG9zc2liaWxpdHkgb2Ygc3VjaCBkYW1hZ2VzLgorCisgICA5LiBBY2NlcHRpbmcgV2FycmFudHkgb3IgQWRkaXRpb25hbCBMaWFiaWxpdHkuIFdoaWxlIHJlZGlzdHJpYnV0aW5nCisgICAgICB0aGUgV29yayBvciBEZXJpdmF0aXZlIFdvcmtzIHRoZXJlb2YsIFlvdSBtYXkgY2hvb3NlIHRvIG9mZmVyLAorICAgICAgYW5kIGNoYXJnZSBhIGZlZSBmb3IsIGFjY2VwdGFuY2Ugb2Ygc3VwcG9ydCwgd2FycmFudHksIGluZGVtbml0eSwKKyAgICAgIG9yIG90aGVyIGxpYWJpbGl0eSBvYmxpZ2F0aW9ucyBhbmQvb3IgcmlnaHRzIGNvbnNpc3RlbnQgd2l0aCB0aGlzCisgICAgICBMaWNlbnNlLiBIb3dldmVyLCBpbiBhY2NlcHRpbmcgc3VjaCBvYmxpZ2F0aW9ucywgWW91IG1heSBhY3Qgb25seQorICAgICAgb24gWW91ciBvd24gYmVoYWxmIGFuZCBvbiBZb3VyIHNvbGUgcmVzcG9uc2liaWxpdHksIG5vdCBvbiBiZWhhbGYKKyAgICAgIG9mIGFueSBvdGhlciBDb250cmlidXRvciwgYW5kIG9ubHkgaWYgWW91IGFncmVlIHRvIGluZGVtbmlmeSwKKyAgICAgIGRlZmVuZCwgYW5kIGhvbGQgZWFjaCBDb250cmlidXRvciBoYXJtbGVzcyBmb3IgYW55IGxpYWJpbGl0eQorICAgICAgaW5jdXJyZWQgYnksIG9yIGNsYWltcyBhc3NlcnRlZCBhZ2FpbnN0LCBzdWNoIENvbnRyaWJ1dG9yIGJ5IHJlYXNvbgorICAgICAgb2YgeW91ciBhY2NlcHRpbmcgYW55IHN1Y2ggd2FycmFudHkgb3IgYWRkaXRpb25hbCBsaWFiaWxpdHkuCisKKyAgIEVORCBPRiBURVJNUyBBTkQgQ09ORElUSU9OUworCmRpZmYgLS1naXQgYS9tZWRpYS9jb2RlYzIvY29tcG9uZW50cy9oZXZjL0FuZHJvaWQuYnAgYi9tZWRpYS9jb2RlYzIvY29tcG9uZW50cy9oZXZjL0FuZHJvaWQuYnAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmEwNDVlMQotLS0gL2Rldi9udWxsCisrKyBiL21lZGlhL2NvZGVjMi9jb21wb25lbnRzL2hldmMvQW5kcm9pZC5icApAQCAtMCwwICsxLDE2IEBACitjY19saWJyYXJ5X3NoYXJlZCB7CisgICAgbmFtZTogImxpYmNvZGVjMl9zb2Z0X2hldmNkZWMiLAorICAgIGRlZmF1bHRzOiBbCisgICAgICAgICJsaWJjb2RlYzJfc29mdC1kZWZhdWx0cyIsCisgICAgICAgICJsaWJjb2RlYzJfc29mdF9zYW5pdGl6ZV9zaWduZWQtZGVmYXVsdHMiLAorICAgIF0sCisKKyAgICBzcmNzOiBbIkMyU29mdEhldmNEZWMuY3BwIl0sCisKKyAgICBzdGF0aWNfbGliczogWyJsaWJoZXZjZGVjIl0sCisKKyAgICBpbmNsdWRlX2RpcnM6IFsKKyAgICAgICAgImV4dGVybmFsL2xpYmhldmMvZGVjb2RlciIsCisgICAgICAgICJleHRlcm5hbC9saWJoZXZjL2NvbW1vbiIsCisgICAgXSwKK30KZGlmZiAtLWdpdCBhL21lZGlhL2NvZGVjMi9jb21wb25lbnRzL2hldmMvQzJTb2Z0SGV2Y0RlYy5jcHAgYi9tZWRpYS9jb2RlYzIvY29tcG9uZW50cy9oZXZjL0MyU29mdEhldmNEZWMuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk5ODkyY2UKLS0tIC9kZXYvbnVsbAorKysgYi9tZWRpYS9jb2RlYzIvY29tcG9uZW50cy9oZXZjL0MyU29mdEhldmNEZWMuY3BwCkBAIC0wLDAgKzEsOTc2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE4IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KKworLy8jZGVmaW5lIExPR19OREVCVUcgMAorI2RlZmluZSBMT0dfVEFHICJDMlNvZnRIZXZjRGVjIgorI2luY2x1ZGUgPGxvZy9sb2cuaD4KKworI2luY2x1ZGUgPG1lZGlhL3N0YWdlZnJpZ2h0L2ZvdW5kYXRpb24vTWVkaWFEZWZzLmg+CisKKyNpbmNsdWRlIDxDMkRlYnVnLmg+CisjaW5jbHVkZSA8QzJQbGF0Zm9ybVN1cHBvcnQuaD4KKyNpbmNsdWRlIDxDb2RlYzJNYXBwZXIuaD4KKyNpbmNsdWRlIDxTaW1wbGVDMkludGVyZmFjZS5oPgorCisjaW5jbHVkZSAiQzJTb2Z0SGV2Y0RlYy5oIgorI2luY2x1ZGUgImloZXZjZF9jeGEuaCIKKworbmFtZXNwYWNlIGFuZHJvaWQgeworCituYW1lc3BhY2UgeworCitjb25zdGV4cHIgY2hhciBDT01QT05FTlRfTkFNRVtdID0gImMyLmFuZHJvaWQuaGV2Yy5kZWNvZGVyIjsKKworfSAgLy8gbmFtZXNwYWNlCisKK2NsYXNzIEMyU29mdEhldmNEZWM6OkludGZJbXBsIDogcHVibGljIFNpbXBsZUludGVyZmFjZTx2b2lkPjo6QmFzZVBhcmFtcyB7CitwdWJsaWM6CisgICAgZXhwbGljaXQgSW50ZkltcGwoY29uc3Qgc3RkOjpzaGFyZWRfcHRyPEMyUmVmbGVjdG9ySGVscGVyPiAmaGVscGVyKQorICAgICAgICA6IFNpbXBsZUludGVyZmFjZTx2b2lkPjo6QmFzZVBhcmFtcygKKyAgICAgICAgICAgICAgICBoZWxwZXIsCisgICAgICAgICAgICAgICAgQ09NUE9ORU5UX05BTUUsCisgICAgICAgICAgICAgICAgQzJDb21wb25lbnQ6OktJTkRfREVDT0RFUiwKKyAgICAgICAgICAgICAgICBDMkNvbXBvbmVudDo6RE9NQUlOX1ZJREVPLAorICAgICAgICAgICAgICAgIE1FRElBX01JTUVUWVBFX1ZJREVPX0hFVkMpIHsKKyAgICAgICAgbm9Qcml2YXRlQnVmZmVycygpOyAvLyBUT0RPOiBhY2NvdW50IGZvciBvdXIgYnVmZmVycyBoZXJlCisgICAgICAgIG5vSW5wdXRSZWZlcmVuY2VzKCk7CisgICAgICAgIG5vT3V0cHV0UmVmZXJlbmNlcygpOworICAgICAgICBub0lucHV0TGF0ZW5jeSgpOworICAgICAgICBub1RpbWVTdHJldGNoKCk7CisKKyAgICAgICAgLy8gVE9ETzogb3V0cHV0IGxhdGVuY3kgYW5kIHJlb3JkZXJpbmcKKworICAgICAgICBhZGRQYXJhbWV0ZXIoCisgICAgICAgICAgICAgICAgRGVmaW5lUGFyYW0obUF0dHJpYiwgQzJfUEFSQU1LRVlfQ09NUE9ORU5UX0FUVFJJQlVURVMpCisgICAgICAgICAgICAgICAgLndpdGhDb25zdFZhbHVlKG5ldyBDMkNvbXBvbmVudEF0dHJpYnV0ZXNTZXR0aW5nKEMyQ29tcG9uZW50OjpBVFRSSUJfSVNfVEVNUE9SQUwpKQorICAgICAgICAgICAgICAgIC5idWlsZCgpKTsKKworICAgICAgICBhZGRQYXJhbWV0ZXIoCisgICAgICAgICAgICAgICAgRGVmaW5lUGFyYW0obVNpemUsIEMyX1BBUkFNS0VZX1BJQ1RVUkVfU0laRSkKKyAgICAgICAgICAgICAgICAud2l0aERlZmF1bHQobmV3IEMyU3RyZWFtUGljdHVyZVNpemVJbmZvOjpvdXRwdXQoMHUsIDMyMCwgMjQwKSkKKyAgICAgICAgICAgICAgICAud2l0aEZpZWxkcyh7CisgICAgICAgICAgICAgICAgICAgIEMyRihtU2l6ZSwgd2lkdGgpLmluUmFuZ2UoMiwgNDA5NiwgMiksCisgICAgICAgICAgICAgICAgICAgIEMyRihtU2l6ZSwgaGVpZ2h0KS5pblJhbmdlKDIsIDQwOTYsIDIpLAorICAgICAgICAgICAgICAgIH0pCisgICAgICAgICAgICAgICAgLndpdGhTZXR0ZXIoU2l6ZVNldHRlcikKKyAgICAgICAgICAgICAgICAuYnVpbGQoKSk7CisKKyAgICAgICAgYWRkUGFyYW1ldGVyKAorICAgICAgICAgICAgICAgIERlZmluZVBhcmFtKG1Qcm9maWxlTGV2ZWwsIEMyX1BBUkFNS0VZX1BST0ZJTEVfTEVWRUwpCisgICAgICAgICAgICAgICAgLndpdGhEZWZhdWx0KG5ldyBDMlN0cmVhbVByb2ZpbGVMZXZlbEluZm86OmlucHV0KDB1LAorICAgICAgICAgICAgICAgICAgICAgICAgQzJDb25maWc6OlBST0ZJTEVfSEVWQ19NQUlOLCBDMkNvbmZpZzo6TEVWRUxfSEVWQ19NQUlOXzVfMSkpCisgICAgICAgICAgICAgICAgLndpdGhGaWVsZHMoeworICAgICAgICAgICAgICAgICAgICBDMkYobVByb2ZpbGVMZXZlbCwgcHJvZmlsZSkub25lT2YoeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIEMyQ29uZmlnOjpQUk9GSUxFX0hFVkNfTUFJTiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBDMkNvbmZpZzo6UFJPRklMRV9IRVZDX01BSU5fU1RJTEx9KSwKKyAgICAgICAgICAgICAgICAgICAgQzJGKG1Qcm9maWxlTGV2ZWwsIGxldmVsKS5vbmVPZih7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgQzJDb25maWc6OkxFVkVMX0hFVkNfTUFJTl8xLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIEMyQ29uZmlnOjpMRVZFTF9IRVZDX01BSU5fMiwgQzJDb25maWc6OkxFVkVMX0hFVkNfTUFJTl8yXzEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgQzJDb25maWc6OkxFVkVMX0hFVkNfTUFJTl8zLCBDMkNvbmZpZzo6TEVWRUxfSEVWQ19NQUlOXzNfMSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBDMkNvbmZpZzo6TEVWRUxfSEVWQ19NQUlOXzQsIEMyQ29uZmlnOjpMRVZFTF9IRVZDX01BSU5fNF8xLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIEMyQ29uZmlnOjpMRVZFTF9IRVZDX01BSU5fNSwgQzJDb25maWc6OkxFVkVMX0hFVkNfTUFJTl81XzEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgQzJDb25maWc6OkxFVkVMX0hFVkNfTUFJTl81XzIsIEMyQ29uZmlnOjpMRVZFTF9IRVZDX0hJR0hfNCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBDMkNvbmZpZzo6TEVWRUxfSEVWQ19ISUdIXzRfMSwgQzJDb25maWc6OkxFVkVMX0hFVkNfSElHSF81LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIEMyQ29uZmlnOjpMRVZFTF9IRVZDX0hJR0hfNV8xLCBDMkNvbmZpZzo6TEVWRUxfSEVWQ19ISUdIXzVfMgorICAgICAgICAgICAgICAgICAgICB9KQorICAgICAgICAgICAgICAgIH0pCisgICAgICAgICAgICAgICAgLndpdGhTZXR0ZXIoUHJvZmlsZUxldmVsU2V0dGVyLCBtU2l6ZSkKKyAgICAgICAgICAgICAgICAuYnVpbGQoKSk7CisKKyAgICAgICAgYWRkUGFyYW1ldGVyKAorICAgICAgICAgICAgICAgIERlZmluZVBhcmFtKG1NYXhTaXplLCBDMl9QQVJBTUtFWV9NQVhfUElDVFVSRV9TSVpFKQorICAgICAgICAgICAgICAgIC53aXRoRGVmYXVsdChuZXcgQzJTdHJlYW1NYXhQaWN0dXJlU2l6ZVR1bmluZzo6b3V0cHV0KDB1LCAzMjAsIDI0MCkpCisgICAgICAgICAgICAgICAgLndpdGhGaWVsZHMoeworICAgICAgICAgICAgICAgICAgICBDMkYobVNpemUsIHdpZHRoKS5pblJhbmdlKDIsIDQwOTYsIDIpLAorICAgICAgICAgICAgICAgICAgICBDMkYobVNpemUsIGhlaWdodCkuaW5SYW5nZSgyLCA0MDk2LCAyKSwKKyAgICAgICAgICAgICAgICB9KQorICAgICAgICAgICAgICAgIC53aXRoU2V0dGVyKE1heFBpY3R1cmVTaXplU2V0dGVyLCBtU2l6ZSkKKyAgICAgICAgICAgICAgICAuYnVpbGQoKSk7CisKKyAgICAgICAgYWRkUGFyYW1ldGVyKAorICAgICAgICAgICAgICAgIERlZmluZVBhcmFtKG1NYXhJbnB1dFNpemUsIEMyX1BBUkFNS0VZX0lOUFVUX01BWF9CVUZGRVJfU0laRSkKKyAgICAgICAgICAgICAgICAud2l0aERlZmF1bHQobmV3IEMyU3RyZWFtTWF4QnVmZmVyU2l6ZUluZm86OmlucHV0KDB1LCAzMjAgKiAyNDAgKiAzIC8gNCkpCisgICAgICAgICAgICAgICAgLndpdGhGaWVsZHMoeworICAgICAgICAgICAgICAgICAgICBDMkYobU1heElucHV0U2l6ZSwgdmFsdWUpLmFueSgpLAorICAgICAgICAgICAgICAgIH0pCisgICAgICAgICAgICAgICAgLmNhbGN1bGF0ZWRBcyhNYXhJbnB1dFNpemVTZXR0ZXIsIG1NYXhTaXplKQorICAgICAgICAgICAgICAgIC5idWlsZCgpKTsKKworICAgICAgICBDMkNocm9tYU9mZnNldFN0cnVjdCBsb2NhdGlvbnNbMV0gPSB7IEMyQ2hyb21hT2Zmc2V0U3RydWN0OjpJVFVfWVVWXzQyMF8wKCkgfTsKKyAgICAgICAgc3RkOjpzaGFyZWRfcHRyPEMyU3RyZWFtQ29sb3JJbmZvOjpvdXRwdXQ+IGRlZmF1bHRDb2xvckluZm8gPQorICAgICAgICAgICAgQzJTdHJlYW1Db2xvckluZm86Om91dHB1dDo6QWxsb2NTaGFyZWQoCisgICAgICAgICAgICAgICAgICAgIDF1LCAwdSwgOHUgLyogYml0RGVwdGggKi8sIEMyQ29sb3I6OllVVl80MjApOworICAgICAgICBtZW1jcHkoZGVmYXVsdENvbG9ySW5mby0+bS5sb2NhdGlvbnMsIGxvY2F0aW9ucywgc2l6ZW9mKGxvY2F0aW9ucykpOworCisgICAgICAgIGRlZmF1bHRDb2xvckluZm8gPSBDMlN0cmVhbUNvbG9ySW5mbzo6b3V0cHV0OjpBbGxvY1NoYXJlZCgKKyAgICAgICAgICAgIHtDMkNocm9tYU9mZnNldFN0cnVjdDo6SVRVX1lVVl80MjBfMCgpfSwgMHUsIDh1IC8qIGJpdERlcHRoICovLAorICAgICAgICAgICAgQzJDb2xvcjo6WVVWXzQyMCk7CisgICAgICAgIGhlbHBlci0+YWRkU3RydWN0RGVzY3JpcHRvcnM8QzJDaHJvbWFPZmZzZXRTdHJ1Y3Q+KCk7CisKKyAgICAgICAgYWRkUGFyYW1ldGVyKAorICAgICAgICAgICAgICAgIERlZmluZVBhcmFtKG1Db2xvckluZm8sIEMyX1BBUkFNS0VZX0NPREVEX0NPTE9SX0lORk8pCisgICAgICAgICAgICAgICAgLndpdGhDb25zdFZhbHVlKGRlZmF1bHRDb2xvckluZm8pCisgICAgICAgICAgICAgICAgLmJ1aWxkKCkpOworCisgICAgICAgIGFkZFBhcmFtZXRlcigKKyAgICAgICAgICAgICAgICBEZWZpbmVQYXJhbShtRGVmYXVsdENvbG9yQXNwZWN0cywgQzJfUEFSQU1LRVlfREVGQVVMVF9DT0xPUl9BU1BFQ1RTKQorICAgICAgICAgICAgICAgIC53aXRoRGVmYXVsdChuZXcgQzJTdHJlYW1Db2xvckFzcGVjdHNUdW5pbmc6Om91dHB1dCgKKyAgICAgICAgICAgICAgICAgICAgICAgIDB1LCBDMkNvbG9yOjpSQU5HRV9VTlNQRUNJRklFRCwgQzJDb2xvcjo6UFJJTUFSSUVTX1VOU1BFQ0lGSUVELAorICAgICAgICAgICAgICAgICAgICAgICAgQzJDb2xvcjo6VFJBTlNGRVJfVU5TUEVDSUZJRUQsIEMyQ29sb3I6Ok1BVFJJWF9VTlNQRUNJRklFRCkpCisgICAgICAgICAgICAgICAgLndpdGhGaWVsZHMoeworICAgICAgICAgICAgICAgICAgICBDMkYobURlZmF1bHRDb2xvckFzcGVjdHMsIHJhbmdlKS5pblJhbmdlKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDMkNvbG9yOjpSQU5HRV9VTlNQRUNJRklFRCwgICAgIEMyQ29sb3I6OlJBTkdFX09USEVSKSwKKyAgICAgICAgICAgICAgICAgICAgQzJGKG1EZWZhdWx0Q29sb3JBc3BlY3RzLCBwcmltYXJpZXMpLmluUmFuZ2UoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEMyQ29sb3I6OlBSSU1BUklFU19VTlNQRUNJRklFRCwgQzJDb2xvcjo6UFJJTUFSSUVTX09USEVSKSwKKyAgICAgICAgICAgICAgICAgICAgQzJGKG1EZWZhdWx0Q29sb3JBc3BlY3RzLCB0cmFuc2ZlcikuaW5SYW5nZSgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQzJDb2xvcjo6VFJBTlNGRVJfVU5TUEVDSUZJRUQsICBDMkNvbG9yOjpUUkFOU0ZFUl9PVEhFUiksCisgICAgICAgICAgICAgICAgICAgIEMyRihtRGVmYXVsdENvbG9yQXNwZWN0cywgbWF0cml4KS5pblJhbmdlKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDMkNvbG9yOjpNQVRSSVhfVU5TUEVDSUZJRUQsICAgIEMyQ29sb3I6Ok1BVFJJWF9PVEhFUikKKyAgICAgICAgICAgICAgICB9KQorICAgICAgICAgICAgICAgIC53aXRoU2V0dGVyKERlZmF1bHRDb2xvckFzcGVjdHNTZXR0ZXIpCisgICAgICAgICAgICAgICAgLmJ1aWxkKCkpOworCisgICAgICAgIGFkZFBhcmFtZXRlcigKKyAgICAgICAgICAgICAgICBEZWZpbmVQYXJhbShtQ29kZWRDb2xvckFzcGVjdHMsIEMyX1BBUkFNS0VZX1ZVSV9DT0xPUl9BU1BFQ1RTKQorICAgICAgICAgICAgICAgIC53aXRoRGVmYXVsdChuZXcgQzJTdHJlYW1Db2xvckFzcGVjdHNJbmZvOjppbnB1dCgKKyAgICAgICAgICAgICAgICAgICAgICAgIDB1LCBDMkNvbG9yOjpSQU5HRV9MSU1JVEVELCBDMkNvbG9yOjpQUklNQVJJRVNfVU5TUEVDSUZJRUQsCisgICAgICAgICAgICAgICAgICAgICAgICBDMkNvbG9yOjpUUkFOU0ZFUl9VTlNQRUNJRklFRCwgQzJDb2xvcjo6TUFUUklYX1VOU1BFQ0lGSUVEKSkKKyAgICAgICAgICAgICAgICAud2l0aEZpZWxkcyh7CisgICAgICAgICAgICAgICAgICAgIEMyRihtQ29kZWRDb2xvckFzcGVjdHMsIHJhbmdlKS5pblJhbmdlKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDMkNvbG9yOjpSQU5HRV9VTlNQRUNJRklFRCwgICAgIEMyQ29sb3I6OlJBTkdFX09USEVSKSwKKyAgICAgICAgICAgICAgICAgICAgQzJGKG1Db2RlZENvbG9yQXNwZWN0cywgcHJpbWFyaWVzKS5pblJhbmdlKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDMkNvbG9yOjpQUklNQVJJRVNfVU5TUEVDSUZJRUQsIEMyQ29sb3I6OlBSSU1BUklFU19PVEhFUiksCisgICAgICAgICAgICAgICAgICAgIEMyRihtQ29kZWRDb2xvckFzcGVjdHMsIHRyYW5zZmVyKS5pblJhbmdlKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDMkNvbG9yOjpUUkFOU0ZFUl9VTlNQRUNJRklFRCwgIEMyQ29sb3I6OlRSQU5TRkVSX09USEVSKSwKKyAgICAgICAgICAgICAgICAgICAgQzJGKG1Db2RlZENvbG9yQXNwZWN0cywgbWF0cml4KS5pblJhbmdlKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDMkNvbG9yOjpNQVRSSVhfVU5TUEVDSUZJRUQsICAgIEMyQ29sb3I6Ok1BVFJJWF9PVEhFUikKKyAgICAgICAgICAgICAgICB9KQorICAgICAgICAgICAgICAgIC53aXRoU2V0dGVyKENvZGVkQ29sb3JBc3BlY3RzU2V0dGVyKQorICAgICAgICAgICAgICAgIC5idWlsZCgpKTsKKworICAgICAgICBhZGRQYXJhbWV0ZXIoCisgICAgICAgICAgICAgICAgRGVmaW5lUGFyYW0obUNvbG9yQXNwZWN0cywgQzJfUEFSQU1LRVlfQ09MT1JfQVNQRUNUUykKKyAgICAgICAgICAgICAgICAud2l0aERlZmF1bHQobmV3IEMyU3RyZWFtQ29sb3JBc3BlY3RzSW5mbzo6b3V0cHV0KAorICAgICAgICAgICAgICAgICAgICAgICAgMHUsIEMyQ29sb3I6OlJBTkdFX1VOU1BFQ0lGSUVELCBDMkNvbG9yOjpQUklNQVJJRVNfVU5TUEVDSUZJRUQsCisgICAgICAgICAgICAgICAgICAgICAgICBDMkNvbG9yOjpUUkFOU0ZFUl9VTlNQRUNJRklFRCwgQzJDb2xvcjo6TUFUUklYX1VOU1BFQ0lGSUVEKSkKKyAgICAgICAgICAgICAgICAud2l0aEZpZWxkcyh7CisgICAgICAgICAgICAgICAgICAgIEMyRihtQ29sb3JBc3BlY3RzLCByYW5nZSkuaW5SYW5nZSgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQzJDb2xvcjo6UkFOR0VfVU5TUEVDSUZJRUQsICAgICBDMkNvbG9yOjpSQU5HRV9PVEhFUiksCisgICAgICAgICAgICAgICAgICAgIEMyRihtQ29sb3JBc3BlY3RzLCBwcmltYXJpZXMpLmluUmFuZ2UoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEMyQ29sb3I6OlBSSU1BUklFU19VTlNQRUNJRklFRCwgQzJDb2xvcjo6UFJJTUFSSUVTX09USEVSKSwKKyAgICAgICAgICAgICAgICAgICAgQzJGKG1Db2xvckFzcGVjdHMsIHRyYW5zZmVyKS5pblJhbmdlKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDMkNvbG9yOjpUUkFOU0ZFUl9VTlNQRUNJRklFRCwgIEMyQ29sb3I6OlRSQU5TRkVSX09USEVSKSwKKyAgICAgICAgICAgICAgICAgICAgQzJGKG1Db2xvckFzcGVjdHMsIG1hdHJpeCkuaW5SYW5nZSgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQzJDb2xvcjo6TUFUUklYX1VOU1BFQ0lGSUVELCAgICBDMkNvbG9yOjpNQVRSSVhfT1RIRVIpCisgICAgICAgICAgICAgICAgfSkKKyAgICAgICAgICAgICAgICAud2l0aFNldHRlcihDb2xvckFzcGVjdHNTZXR0ZXIsIG1EZWZhdWx0Q29sb3JBc3BlY3RzLCBtQ29kZWRDb2xvckFzcGVjdHMpCisgICAgICAgICAgICAgICAgLmJ1aWxkKCkpOworCisgICAgICAgIC8vIFRPRE86IHN1cHBvcnQgbW9yZSBmb3JtYXRzPworICAgICAgICBhZGRQYXJhbWV0ZXIoCisgICAgICAgICAgICAgICAgRGVmaW5lUGFyYW0obVBpeGVsRm9ybWF0LCBDMl9QQVJBTUtFWV9QSVhFTF9GT1JNQVQpCisgICAgICAgICAgICAgICAgLndpdGhDb25zdFZhbHVlKG5ldyBDMlN0cmVhbVBpeGVsRm9ybWF0SW5mbzo6b3V0cHV0KAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB1LCBIQUxfUElYRUxfRk9STUFUX1lDQkNSXzQyMF84ODgpKQorICAgICAgICAgICAgICAgIC5idWlsZCgpKTsKKyAgICB9CisKKyAgICBzdGF0aWMgQzJSIFNpemVTZXR0ZXIoYm9vbCBtYXlCbG9jaywgY29uc3QgQzJQPEMyU3RyZWFtUGljdHVyZVNpemVJbmZvOjpvdXRwdXQ+ICZvbGRNZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgQzJQPEMyVmlkZW9TaXplU3RyZWFtSW5mbzo6b3V0cHV0PiAmbWUpIHsKKyAgICAgICAgKHZvaWQpbWF5QmxvY2s7CisgICAgICAgIEMyUiByZXMgPSBDMlI6Ok9rKCk7CisgICAgICAgIGlmICghbWUuRihtZS52LndpZHRoKS5zdXBwb3J0c0F0QWxsKG1lLnYud2lkdGgpKSB7CisgICAgICAgICAgICByZXMgPSByZXMucGx1cyhDMlNldHRpbmdSZXN1bHRCdWlsZGVyOjpCYWRWYWx1ZShtZS5GKG1lLnYud2lkdGgpKSk7CisgICAgICAgICAgICBtZS5zZXQoKS53aWR0aCA9IG9sZE1lLnYud2lkdGg7CisgICAgICAgIH0KKyAgICAgICAgaWYgKCFtZS5GKG1lLnYuaGVpZ2h0KS5zdXBwb3J0c0F0QWxsKG1lLnYuaGVpZ2h0KSkgeworICAgICAgICAgICAgcmVzID0gcmVzLnBsdXMoQzJTZXR0aW5nUmVzdWx0QnVpbGRlcjo6QmFkVmFsdWUobWUuRihtZS52LmhlaWdodCkpKTsKKyAgICAgICAgICAgIG1lLnNldCgpLmhlaWdodCA9IG9sZE1lLnYuaGVpZ2h0OworICAgICAgICB9CisgICAgICAgIHJldHVybiByZXM7CisgICAgfQorCisgICAgc3RhdGljIEMyUiBNYXhQaWN0dXJlU2l6ZVNldHRlcihib29sIG1heUJsb2NrLCBDMlA8QzJTdHJlYW1NYXhQaWN0dXJlU2l6ZVR1bmluZzo6b3V0cHV0PiAmbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBDMlA8QzJTdHJlYW1QaWN0dXJlU2l6ZUluZm86Om91dHB1dD4gJnNpemUpIHsKKyAgICAgICAgKHZvaWQpbWF5QmxvY2s7CisgICAgICAgIC8vIFRPRE86IGdldCBtYXggd2lkdGgvaGVpZ2h0IGZyb20gdGhlIHNpemUncyBmaWVsZCBoZWxwZXJzIHZzLiBoYXJkY29kaW5nCisgICAgICAgIG1lLnNldCgpLndpZHRoID0gYzJfbWluKGMyX21heChtZS52LndpZHRoLCBzaXplLnYud2lkdGgpLCA0MDk2dSk7CisgICAgICAgIG1lLnNldCgpLmhlaWdodCA9IGMyX21pbihjMl9tYXgobWUudi5oZWlnaHQsIHNpemUudi5oZWlnaHQpLCA0MDk2dSk7CisgICAgICAgIHJldHVybiBDMlI6Ok9rKCk7CisgICAgfQorCisgICAgc3RhdGljIEMyUiBNYXhJbnB1dFNpemVTZXR0ZXIoYm9vbCBtYXlCbG9jaywgQzJQPEMyU3RyZWFtTWF4QnVmZmVyU2l6ZUluZm86OmlucHV0PiAmbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgQzJQPEMyU3RyZWFtTWF4UGljdHVyZVNpemVUdW5pbmc6Om91dHB1dD4gJm1heFNpemUpIHsKKyAgICAgICAgKHZvaWQpbWF5QmxvY2s7CisgICAgICAgIC8vIGFzc3VtZSBjb21wcmVzc2lvbiByYXRpbyBvZiAyCisgICAgICAgIG1lLnNldCgpLnZhbHVlID0gKCgobWF4U2l6ZS52LndpZHRoICsgNjMpIC8gNjQpICogKChtYXhTaXplLnYuaGVpZ2h0ICsgNjMpIC8gNjQpICogMzA3Mik7CisgICAgICAgIHJldHVybiBDMlI6Ok9rKCk7CisgICAgfQorCisgICAgc3RhdGljIEMyUiBQcm9maWxlTGV2ZWxTZXR0ZXIoYm9vbCBtYXlCbG9jaywgQzJQPEMyU3RyZWFtUHJvZmlsZUxldmVsSW5mbzo6aW5wdXQ+ICZtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBDMlA8QzJTdHJlYW1QaWN0dXJlU2l6ZUluZm86Om91dHB1dD4gJnNpemUpIHsKKyAgICAgICAgKHZvaWQpbWF5QmxvY2s7CisgICAgICAgICh2b2lkKXNpemU7CisgICAgICAgICh2b2lkKW1lOyAgLy8gVE9ETzogdmFsaWRhdGUKKyAgICAgICAgcmV0dXJuIEMyUjo6T2soKTsKKyAgICB9CisKKyAgICBzdGF0aWMgQzJSIERlZmF1bHRDb2xvckFzcGVjdHNTZXR0ZXIoYm9vbCBtYXlCbG9jaywgQzJQPEMyU3RyZWFtQ29sb3JBc3BlY3RzVHVuaW5nOjpvdXRwdXQ+ICZtZSkgeworICAgICAgICAodm9pZCltYXlCbG9jazsKKyAgICAgICAgaWYgKG1lLnYucmFuZ2UgPiBDMkNvbG9yOjpSQU5HRV9PVEhFUikgeworICAgICAgICAgICAgICAgIG1lLnNldCgpLnJhbmdlID0gQzJDb2xvcjo6UkFOR0VfT1RIRVI7CisgICAgICAgIH0KKyAgICAgICAgaWYgKG1lLnYucHJpbWFyaWVzID4gQzJDb2xvcjo6UFJJTUFSSUVTX09USEVSKSB7CisgICAgICAgICAgICAgICAgbWUuc2V0KCkucHJpbWFyaWVzID0gQzJDb2xvcjo6UFJJTUFSSUVTX09USEVSOworICAgICAgICB9CisgICAgICAgIGlmIChtZS52LnRyYW5zZmVyID4gQzJDb2xvcjo6VFJBTlNGRVJfT1RIRVIpIHsKKyAgICAgICAgICAgICAgICBtZS5zZXQoKS50cmFuc2ZlciA9IEMyQ29sb3I6OlRSQU5TRkVSX09USEVSOworICAgICAgICB9CisgICAgICAgIGlmIChtZS52Lm1hdHJpeCA+IEMyQ29sb3I6Ok1BVFJJWF9PVEhFUikgeworICAgICAgICAgICAgICAgIG1lLnNldCgpLm1hdHJpeCA9IEMyQ29sb3I6Ok1BVFJJWF9PVEhFUjsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gQzJSOjpPaygpOworICAgIH0KKworICAgIHN0YXRpYyBDMlIgQ29kZWRDb2xvckFzcGVjdHNTZXR0ZXIoYm9vbCBtYXlCbG9jaywgQzJQPEMyU3RyZWFtQ29sb3JBc3BlY3RzSW5mbzo6aW5wdXQ+ICZtZSkgeworICAgICAgICAodm9pZCltYXlCbG9jazsKKyAgICAgICAgaWYgKG1lLnYucmFuZ2UgPiBDMkNvbG9yOjpSQU5HRV9PVEhFUikgeworICAgICAgICAgICAgICAgIG1lLnNldCgpLnJhbmdlID0gQzJDb2xvcjo6UkFOR0VfT1RIRVI7CisgICAgICAgIH0KKyAgICAgICAgaWYgKG1lLnYucHJpbWFyaWVzID4gQzJDb2xvcjo6UFJJTUFSSUVTX09USEVSKSB7CisgICAgICAgICAgICAgICAgbWUuc2V0KCkucHJpbWFyaWVzID0gQzJDb2xvcjo6UFJJTUFSSUVTX09USEVSOworICAgICAgICB9CisgICAgICAgIGlmIChtZS52LnRyYW5zZmVyID4gQzJDb2xvcjo6VFJBTlNGRVJfT1RIRVIpIHsKKyAgICAgICAgICAgICAgICBtZS5zZXQoKS50cmFuc2ZlciA9IEMyQ29sb3I6OlRSQU5TRkVSX09USEVSOworICAgICAgICB9CisgICAgICAgIGlmIChtZS52Lm1hdHJpeCA+IEMyQ29sb3I6Ok1BVFJJWF9PVEhFUikgeworICAgICAgICAgICAgICAgIG1lLnNldCgpLm1hdHJpeCA9IEMyQ29sb3I6Ok1BVFJJWF9PVEhFUjsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gQzJSOjpPaygpOworICAgIH0KKworICAgIHN0YXRpYyBDMlIgQ29sb3JBc3BlY3RzU2V0dGVyKGJvb2wgbWF5QmxvY2ssIEMyUDxDMlN0cmVhbUNvbG9yQXNwZWN0c0luZm86Om91dHB1dD4gJm1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEMyUDxDMlN0cmVhbUNvbG9yQXNwZWN0c1R1bmluZzo6b3V0cHV0PiAmZGVmLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEMyUDxDMlN0cmVhbUNvbG9yQXNwZWN0c0luZm86OmlucHV0PiAmY29kZWQpIHsKKyAgICAgICAgKHZvaWQpbWF5QmxvY2s7CisgICAgICAgIC8vIHRha2UgZGVmYXVsdCB2YWx1ZXMgZm9yIGFsbCB1bnNwZWNpZmllZCBmaWVsZHMsIGFuZCBjb2RlZCB2YWx1ZXMgZm9yIHNwZWNpZmllZCBvbmVzCisgICAgICAgIG1lLnNldCgpLnJhbmdlID0gY29kZWQudi5yYW5nZSA9PSBSQU5HRV9VTlNQRUNJRklFRCA/IGRlZi52LnJhbmdlIDogY29kZWQudi5yYW5nZTsKKyAgICAgICAgbWUuc2V0KCkucHJpbWFyaWVzID0gY29kZWQudi5wcmltYXJpZXMgPT0gUFJJTUFSSUVTX1VOU1BFQ0lGSUVECisgICAgICAgICAgICAgICAgPyBkZWYudi5wcmltYXJpZXMgOiBjb2RlZC52LnByaW1hcmllczsKKyAgICAgICAgbWUuc2V0KCkudHJhbnNmZXIgPSBjb2RlZC52LnRyYW5zZmVyID09IFRSQU5TRkVSX1VOU1BFQ0lGSUVECisgICAgICAgICAgICAgICAgPyBkZWYudi50cmFuc2ZlciA6IGNvZGVkLnYudHJhbnNmZXI7CisgICAgICAgIG1lLnNldCgpLm1hdHJpeCA9IGNvZGVkLnYubWF0cml4ID09IE1BVFJJWF9VTlNQRUNJRklFRCA/IGRlZi52Lm1hdHJpeCA6IGNvZGVkLnYubWF0cml4OworICAgICAgICByZXR1cm4gQzJSOjpPaygpOworICAgIH0KKworICAgIHN0ZDo6c2hhcmVkX3B0cjxDMlN0cmVhbUNvbG9yQXNwZWN0c0luZm86Om91dHB1dD4gZ2V0Q29sb3JBc3BlY3RzX2woKSB7CisgICAgICAgIHJldHVybiBtQ29sb3JBc3BlY3RzOworICAgIH0KKworcHJpdmF0ZToKKyAgICBzdGQ6OnNoYXJlZF9wdHI8QzJTdHJlYW1Qcm9maWxlTGV2ZWxJbmZvOjppbnB1dD4gbVByb2ZpbGVMZXZlbDsKKyAgICBzdGQ6OnNoYXJlZF9wdHI8QzJTdHJlYW1QaWN0dXJlU2l6ZUluZm86Om91dHB1dD4gbVNpemU7CisgICAgc3RkOjpzaGFyZWRfcHRyPEMyU3RyZWFtTWF4UGljdHVyZVNpemVUdW5pbmc6Om91dHB1dD4gbU1heFNpemU7CisgICAgc3RkOjpzaGFyZWRfcHRyPEMyU3RyZWFtTWF4QnVmZmVyU2l6ZUluZm86OmlucHV0PiBtTWF4SW5wdXRTaXplOworICAgIHN0ZDo6c2hhcmVkX3B0cjxDMlN0cmVhbUNvbG9ySW5mbzo6b3V0cHV0PiBtQ29sb3JJbmZvOworICAgIHN0ZDo6c2hhcmVkX3B0cjxDMlN0cmVhbUNvbG9yQXNwZWN0c0luZm86OmlucHV0PiBtQ29kZWRDb2xvckFzcGVjdHM7CisgICAgc3RkOjpzaGFyZWRfcHRyPEMyU3RyZWFtQ29sb3JBc3BlY3RzVHVuaW5nOjpvdXRwdXQ+IG1EZWZhdWx0Q29sb3JBc3BlY3RzOworICAgIHN0ZDo6c2hhcmVkX3B0cjxDMlN0cmVhbUNvbG9yQXNwZWN0c0luZm86Om91dHB1dD4gbUNvbG9yQXNwZWN0czsKKyAgICBzdGQ6OnNoYXJlZF9wdHI8QzJTdHJlYW1QaXhlbEZvcm1hdEluZm86Om91dHB1dD4gbVBpeGVsRm9ybWF0OworfTsKKworc3RhdGljIHNpemVfdCBnZXRDcHVDb3JlQ291bnQoKSB7CisgICAgbG9uZyBjcHVDb3JlQ291bnQgPSAxOworI2lmIGRlZmluZWQoX1NDX05QUk9DRVNTT1JTX09OTE4pCisgICAgY3B1Q29yZUNvdW50ID0gc3lzY29uZihfU0NfTlBST0NFU1NPUlNfT05MTik7CisjZWxzZQorICAgIC8vIF9TQ19OUFJPQ19PTkxOIG11c3QgYmUgZGVmaW5lZC4uLgorICAgIGNwdUNvcmVDb3VudCA9IHN5c2NvbmYoX1NDX05QUk9DX09OTE4pOworI2VuZGlmCisgICAgQ0hFQ0soY3B1Q29yZUNvdW50ID49IDEpOworICAgIEFMT0dWKCJOdW1iZXIgb2YgQ1BVIGNvcmVzOiAlbGQiLCBjcHVDb3JlQ291bnQpOworICAgIHJldHVybiAoc2l6ZV90KWNwdUNvcmVDb3VudDsKK30KKworc3RhdGljIHZvaWQgKml2ZF9hbGlnbmVkX21hbGxvYyh2b2lkICpjdHh0LCBXT1JEMzIgYWxpZ25tZW50LCBXT1JEMzIgc2l6ZSkgeworICAgICh2b2lkKSBjdHh0OworICAgIHJldHVybiBtZW1hbGlnbihhbGlnbm1lbnQsIHNpemUpOworfQorCitzdGF0aWMgdm9pZCBpdmRfYWxpZ25lZF9mcmVlKHZvaWQgKmN0eHQsIHZvaWQgKm1lbSkgeworICAgICh2b2lkKSBjdHh0OworICAgIGZyZWUobWVtKTsKK30KKworQzJTb2Z0SGV2Y0RlYzo6QzJTb2Z0SGV2Y0RlYygKKyAgICAgICAgY29uc3QgY2hhciAqbmFtZSwKKyAgICAgICAgYzJfbm9kZV9pZF90IGlkLAorICAgICAgICBjb25zdCBzdGQ6OnNoYXJlZF9wdHI8SW50ZkltcGw+ICZpbnRmSW1wbCkKKyAgICA6IFNpbXBsZUMyQ29tcG9uZW50KHN0ZDo6bWFrZV9zaGFyZWQ8U2ltcGxlSW50ZXJmYWNlPEludGZJbXBsPj4obmFtZSwgaWQsIGludGZJbXBsKSksCisgICAgICAgIG1JbnRmKGludGZJbXBsKSwKKyAgICAgICAgbURlY0hhbmRsZShudWxscHRyKSwKKyAgICAgICAgbU91dEJ1ZmZlckZsdXNoKG51bGxwdHIpLAorICAgICAgICBtSXZDb2xvcmZvcm1hdChJVl9ZVVZfNDIwUCksCisgICAgICAgIG1XaWR0aCgzMjApLAorICAgICAgICBtSGVpZ2h0KDI0MCksCisgICAgICAgIG1IZWFkZXJEZWNvZGVkKGZhbHNlKSB7Cit9CisKK0MyU29mdEhldmNEZWM6On5DMlNvZnRIZXZjRGVjKCkgeworICAgIG9uUmVsZWFzZSgpOworfQorCitjMl9zdGF0dXNfdCBDMlNvZnRIZXZjRGVjOjpvbkluaXQoKSB7CisgICAgc3RhdHVzX3QgZXJyID0gaW5pdERlY29kZXIoKTsKKyAgICByZXR1cm4gZXJyID09IE9LID8gQzJfT0sgOiBDMl9DT1JSVVBURUQ7Cit9CisKK2MyX3N0YXR1c190IEMyU29mdEhldmNEZWM6Om9uU3RvcCgpIHsKKyAgICBpZiAoT0sgIT0gcmVzZXREZWNvZGVyKCkpIHJldHVybiBDMl9DT1JSVVBURUQ7CisgICAgcmVzZXRQbHVnaW4oKTsKKyAgICByZXR1cm4gQzJfT0s7Cit9CisKK3ZvaWQgQzJTb2Z0SGV2Y0RlYzo6b25SZXNldCgpIHsKKyAgICAodm9pZCkgb25TdG9wKCk7Cit9CisKK3ZvaWQgQzJTb2Z0SGV2Y0RlYzo6b25SZWxlYXNlKCkgeworICAgICh2b2lkKSBkZWxldGVEZWNvZGVyKCk7CisgICAgaWYgKG1PdXRCdWZmZXJGbHVzaCkgeworICAgICAgICBpdmRfYWxpZ25lZF9mcmVlKG51bGxwdHIsIG1PdXRCdWZmZXJGbHVzaCk7CisgICAgICAgIG1PdXRCdWZmZXJGbHVzaCA9IG51bGxwdHI7CisgICAgfQorICAgIGlmIChtT3V0QmxvY2spIHsKKyAgICAgICAgbU91dEJsb2NrLnJlc2V0KCk7CisgICAgfQorfQorCitjMl9zdGF0dXNfdCBDMlNvZnRIZXZjRGVjOjpvbkZsdXNoX3NtKCkgeworICAgIGlmIChPSyAhPSBzZXRGbHVzaE1vZGUoKSkgcmV0dXJuIEMyX0NPUlJVUFRFRDsKKworICAgIHVpbnQzMl90IGRpc3BsYXlTdHJpZGUgPSBtU3RyaWRlOworICAgIHVpbnQzMl90IGRpc3BsYXlIZWlnaHQgPSBtSGVpZ2h0OworICAgIHVpbnQzMl90IGJ1ZmZlclNpemUgPSBkaXNwbGF5U3RyaWRlICogZGlzcGxheUhlaWdodCAqIDMgLyAyOworICAgIG1PdXRCdWZmZXJGbHVzaCA9ICh1aW50OF90ICopaXZkX2FsaWduZWRfbWFsbG9jKG51bGxwdHIsIDEyOCwgYnVmZmVyU2l6ZSk7CisgICAgaWYgKCFtT3V0QnVmZmVyRmx1c2gpIHsKKyAgICAgICAgQUxPR0UoImNvdWxkIG5vdCBhbGxvY2F0ZSB0bXAgb3V0cHV0IGJ1ZmZlciAoZm9yIGZsdXNoKSBvZiBzaXplICV1ICIsIGJ1ZmZlclNpemUpOworICAgICAgICByZXR1cm4gQzJfTk9fTUVNT1JZOworICAgIH0KKworICAgIHdoaWxlICh0cnVlKSB7CisgICAgICAgIGl2ZF92aWRlb19kZWNvZGVfaXBfdCBzX2RlY29kZV9pcDsKKyAgICAgICAgaXZkX3ZpZGVvX2RlY29kZV9vcF90IHNfZGVjb2RlX29wOworCisgICAgICAgIHNldERlY29kZUFyZ3MoJnNfZGVjb2RlX2lwLCAmc19kZWNvZGVfb3AsIG51bGxwdHIsIG51bGxwdHIsIDAsIDAsIDApOworICAgICAgICAodm9pZCkgaXZkZWNfYXBpX2Z1bmN0aW9uKG1EZWNIYW5kbGUsICZzX2RlY29kZV9pcCwgJnNfZGVjb2RlX29wKTsKKyAgICAgICAgaWYgKDAgPT0gc19kZWNvZGVfb3AudTRfb3V0cHV0X3ByZXNlbnQpIHsKKyAgICAgICAgICAgIHJlc2V0UGx1Z2luKCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgIH0KKworICAgIGlmIChtT3V0QnVmZmVyRmx1c2gpIHsKKyAgICAgICAgaXZkX2FsaWduZWRfZnJlZShudWxscHRyLCBtT3V0QnVmZmVyRmx1c2gpOworICAgICAgICBtT3V0QnVmZmVyRmx1c2ggPSBudWxscHRyOworICAgIH0KKworICAgIHJldHVybiBDMl9PSzsKK30KKworc3RhdHVzX3QgQzJTb2Z0SGV2Y0RlYzo6Y3JlYXRlRGVjb2RlcigpIHsKKyAgICBpdmRleHRfY3JlYXRlX2lwX3Qgc19jcmVhdGVfaXA7CisgICAgaXZkZXh0X2NyZWF0ZV9vcF90IHNfY3JlYXRlX29wOworCisgICAgc19jcmVhdGVfaXAuc19pdmRfY3JlYXRlX2lwX3QudTRfc2l6ZSA9IHNpemVvZihpdmRleHRfY3JlYXRlX2lwX3QpOworICAgIHNfY3JlYXRlX2lwLnNfaXZkX2NyZWF0ZV9pcF90LmVfY21kID0gSVZEX0NNRF9DUkVBVEU7CisgICAgc19jcmVhdGVfaXAuc19pdmRfY3JlYXRlX2lwX3QudTRfc2hhcmVfZGlzcF9idWYgPSAwOworICAgIHNfY3JlYXRlX2lwLnNfaXZkX2NyZWF0ZV9pcF90LmVfb3V0cHV0X2Zvcm1hdCA9IG1JdkNvbG9yZm9ybWF0OworICAgIHNfY3JlYXRlX2lwLnNfaXZkX2NyZWF0ZV9pcF90LnBmX2FsaWduZWRfYWxsb2MgPSBpdmRfYWxpZ25lZF9tYWxsb2M7CisgICAgc19jcmVhdGVfaXAuc19pdmRfY3JlYXRlX2lwX3QucGZfYWxpZ25lZF9mcmVlID0gaXZkX2FsaWduZWRfZnJlZTsKKyAgICBzX2NyZWF0ZV9pcC5zX2l2ZF9jcmVhdGVfaXBfdC5wdl9tZW1fY3R4dCA9IG51bGxwdHI7CisgICAgc19jcmVhdGVfb3Auc19pdmRfY3JlYXRlX29wX3QudTRfc2l6ZSA9IHNpemVvZihpdmRleHRfY3JlYXRlX29wX3QpOworICAgIElWX0FQSV9DQUxMX1NUQVRVU19UIHN0YXR1cyA9IGl2ZGVjX2FwaV9mdW5jdGlvbihtRGVjSGFuZGxlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmc19jcmVhdGVfaXAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZzX2NyZWF0ZV9vcCk7CisgICAgaWYgKHN0YXR1cyAhPSBJVl9TVUNDRVNTKSB7CisgICAgICAgIEFMT0dFKCJlcnJvciBpbiAlczogMHgleCIsIF9fZnVuY19fLAorICAgICAgICAgICAgICBzX2NyZWF0ZV9vcC5zX2l2ZF9jcmVhdGVfb3BfdC51NF9lcnJvcl9jb2RlKTsKKyAgICAgICAgcmV0dXJuIFVOS05PV05fRVJST1I7CisgICAgfQorICAgIG1EZWNIYW5kbGUgPSAoaXZfb2JqX3QqKXNfY3JlYXRlX29wLnNfaXZkX2NyZWF0ZV9vcF90LnB2X2hhbmRsZTsKKyAgICBtRGVjSGFuZGxlLT5wdl9meG5zID0gKHZvaWQgKilpdmRlY19hcGlfZnVuY3Rpb247CisgICAgbURlY0hhbmRsZS0+dTRfc2l6ZSA9IHNpemVvZihpdl9vYmpfdCk7CisKKyAgICByZXR1cm4gT0s7Cit9CisKK3N0YXR1c190IEMyU29mdEhldmNEZWM6OnNldE51bUNvcmVzKCkgeworICAgIGl2ZGV4dF9jdGxfc2V0X251bV9jb3Jlc19pcF90IHNfc2V0X251bV9jb3Jlc19pcDsKKyAgICBpdmRleHRfY3RsX3NldF9udW1fY29yZXNfb3BfdCBzX3NldF9udW1fY29yZXNfb3A7CisKKyAgICBzX3NldF9udW1fY29yZXNfaXAudTRfc2l6ZSA9IHNpemVvZihpdmRleHRfY3RsX3NldF9udW1fY29yZXNfaXBfdCk7CisgICAgc19zZXRfbnVtX2NvcmVzX2lwLmVfY21kID0gSVZEX0NNRF9WSURFT19DVEw7CisgICAgc19zZXRfbnVtX2NvcmVzX2lwLmVfc3ViX2NtZCA9IElWREVYVF9DTURfQ1RMX1NFVF9OVU1fQ09SRVM7CisgICAgc19zZXRfbnVtX2NvcmVzX2lwLnU0X251bV9jb3JlcyA9IG1OdW1Db3JlczsKKyAgICBzX3NldF9udW1fY29yZXNfb3AudTRfc2l6ZSA9IHNpemVvZihpdmRleHRfY3RsX3NldF9udW1fY29yZXNfb3BfdCk7CisgICAgSVZfQVBJX0NBTExfU1RBVFVTX1Qgc3RhdHVzID0gaXZkZWNfYXBpX2Z1bmN0aW9uKG1EZWNIYW5kbGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZzX3NldF9udW1fY29yZXNfaXAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZzX3NldF9udW1fY29yZXNfb3ApOworICAgIGlmIChJVl9TVUNDRVNTICE9IHN0YXR1cykgeworICAgICAgICBBTE9HRCgiZXJyb3IgaW4gJXM6IDB4JXgiLCBfX2Z1bmNfXywgc19zZXRfbnVtX2NvcmVzX29wLnU0X2Vycm9yX2NvZGUpOworICAgICAgICByZXR1cm4gVU5LTk9XTl9FUlJPUjsKKyAgICB9CisKKyAgICByZXR1cm4gT0s7Cit9CisKK3N0YXR1c190IEMyU29mdEhldmNEZWM6OnNldFBhcmFtcyhzaXplX3Qgc3RyaWRlLCBJVkRfVklERU9fREVDT0RFX01PREVfVCBkZWNfbW9kZSkgeworICAgIGl2ZF9jdGxfc2V0X2NvbmZpZ19pcF90IHNfc2V0X2R5bl9wYXJhbXNfaXA7CisgICAgaXZkX2N0bF9zZXRfY29uZmlnX29wX3Qgc19zZXRfZHluX3BhcmFtc19vcDsKKworICAgIHNfc2V0X2R5bl9wYXJhbXNfaXAudTRfc2l6ZSA9IHNpemVvZihpdmRfY3RsX3NldF9jb25maWdfaXBfdCk7CisgICAgc19zZXRfZHluX3BhcmFtc19pcC5lX2NtZCA9IElWRF9DTURfVklERU9fQ1RMOworICAgIHNfc2V0X2R5bl9wYXJhbXNfaXAuZV9zdWJfY21kID0gSVZEX0NNRF9DVExfU0VUUEFSQU1TOworICAgIHNfc2V0X2R5bl9wYXJhbXNfaXAudTRfZGlzcF93ZCA9IChVV09SRDMyKSBzdHJpZGU7CisgICAgc19zZXRfZHluX3BhcmFtc19pcC5lX2ZybV9za2lwX21vZGUgPSBJVkRfU0tJUF9OT05FOworICAgIHNfc2V0X2R5bl9wYXJhbXNfaXAuZV9mcm1fb3V0X21vZGUgPSBJVkRfRElTUExBWV9GUkFNRV9PVVQ7CisgICAgc19zZXRfZHluX3BhcmFtc19pcC5lX3ZpZF9kZWNfbW9kZSA9IGRlY19tb2RlOworICAgIHNfc2V0X2R5bl9wYXJhbXNfb3AudTRfc2l6ZSA9IHNpemVvZihpdmRfY3RsX3NldF9jb25maWdfb3BfdCk7CisgICAgSVZfQVBJX0NBTExfU1RBVFVTX1Qgc3RhdHVzID0gaXZkZWNfYXBpX2Z1bmN0aW9uKG1EZWNIYW5kbGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZzX3NldF9keW5fcGFyYW1zX2lwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmc19zZXRfZHluX3BhcmFtc19vcCk7CisgICAgaWYgKHN0YXR1cyAhPSBJVl9TVUNDRVNTKSB7CisgICAgICAgIEFMT0dFKCJlcnJvciBpbiAlczogMHgleCIsIF9fZnVuY19fLCBzX3NldF9keW5fcGFyYW1zX29wLnU0X2Vycm9yX2NvZGUpOworICAgICAgICByZXR1cm4gVU5LTk9XTl9FUlJPUjsKKyAgICB9CisKKyAgICByZXR1cm4gT0s7Cit9CisKK3N0YXR1c190IEMyU29mdEhldmNEZWM6OmdldFZlcnNpb24oKSB7CisgICAgaXZkX2N0bF9nZXR2ZXJzaW9uaW5mb19pcF90IHNfZ2V0X3ZlcnNpb25pbmZvX2lwOworICAgIGl2ZF9jdGxfZ2V0dmVyc2lvbmluZm9fb3BfdCBzX2dldF92ZXJzaW9uaW5mb19vcDsKKyAgICBVV09SRDggYXUxX2J1Zls1MTJdOworCisgICAgc19nZXRfdmVyc2lvbmluZm9faXAudTRfc2l6ZSA9IHNpemVvZihpdmRfY3RsX2dldHZlcnNpb25pbmZvX2lwX3QpOworICAgIHNfZ2V0X3ZlcnNpb25pbmZvX2lwLmVfY21kID0gSVZEX0NNRF9WSURFT19DVEw7CisgICAgc19nZXRfdmVyc2lvbmluZm9faXAuZV9zdWJfY21kID0gSVZEX0NNRF9DVExfR0VUVkVSU0lPTjsKKyAgICBzX2dldF92ZXJzaW9uaW5mb19pcC5wdl92ZXJzaW9uX2J1ZmZlciA9IGF1MV9idWY7CisgICAgc19nZXRfdmVyc2lvbmluZm9faXAudTRfdmVyc2lvbl9idWZmZXJfc2l6ZSA9IHNpemVvZihhdTFfYnVmKTsKKyAgICBzX2dldF92ZXJzaW9uaW5mb19vcC51NF9zaXplID0gc2l6ZW9mKGl2ZF9jdGxfZ2V0dmVyc2lvbmluZm9fb3BfdCk7CisgICAgSVZfQVBJX0NBTExfU1RBVFVTX1Qgc3RhdHVzID0gaXZkZWNfYXBpX2Z1bmN0aW9uKG1EZWNIYW5kbGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZzX2dldF92ZXJzaW9uaW5mb19pcCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnNfZ2V0X3ZlcnNpb25pbmZvX29wKTsKKyAgICBpZiAoc3RhdHVzICE9IElWX1NVQ0NFU1MpIHsKKyAgICAgICAgQUxPR0QoImVycm9yIGluICVzOiAweCV4IiwgX19mdW5jX18sCisgICAgICAgICAgICAgIHNfZ2V0X3ZlcnNpb25pbmZvX29wLnU0X2Vycm9yX2NvZGUpOworICAgIH0gZWxzZSB7CisgICAgICAgIEFMT0dWKCJpdHRpYW0gZGVjb2RlciB2ZXJzaW9uIG51bWJlcjogJXMiLAorICAgICAgICAgICAgICAoY2hhciAqKSBzX2dldF92ZXJzaW9uaW5mb19pcC5wdl92ZXJzaW9uX2J1ZmZlcik7CisgICAgfQorCisgICAgcmV0dXJuIE9LOworfQorCitzdGF0dXNfdCBDMlNvZnRIZXZjRGVjOjppbml0RGVjb2RlcigpIHsKKyAgICBpZiAoT0sgIT0gY3JlYXRlRGVjb2RlcigpKSByZXR1cm4gVU5LTk9XTl9FUlJPUjsKKyAgICBtTnVtQ29yZXMgPSBNSU4oZ2V0Q3B1Q29yZUNvdW50KCksIE1BWF9OVU1fQ09SRVMpOworICAgIG1TdHJpZGUgPSBBTElHTjY0KG1XaWR0aCk7CisgICAgbVNpZ25hbGxlZEVycm9yID0gZmFsc2U7CisgICAgcmVzZXRQbHVnaW4oKTsKKyAgICAodm9pZCkgc2V0TnVtQ29yZXMoKTsKKyAgICBpZiAoT0sgIT0gc2V0UGFyYW1zKG1TdHJpZGUsIElWRF9ERUNPREVfRlJBTUUpKSByZXR1cm4gVU5LTk9XTl9FUlJPUjsKKyAgICAodm9pZCkgZ2V0VmVyc2lvbigpOworCisgICAgcmV0dXJuIE9LOworfQorCitib29sIEMyU29mdEhldmNEZWM6OnNldERlY29kZUFyZ3MoaXZkX3ZpZGVvX2RlY29kZV9pcF90ICpwc19kZWNvZGVfaXAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXZkX3ZpZGVvX2RlY29kZV9vcF90ICpwc19kZWNvZGVfb3AsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQzJSZWFkVmlldyAqaW5CdWZmZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQzJHcmFwaGljVmlldyAqb3V0QnVmZmVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBpbk9mZnNldCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgaW5TaXplLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90IHRzTWFya2VyKSB7CisgICAgdWludDMyX3QgZGlzcGxheVN0cmlkZSA9IG1TdHJpZGU7CisgICAgdWludDMyX3QgZGlzcGxheUhlaWdodCA9IG1IZWlnaHQ7CisgICAgc2l6ZV90IGx1bWFTaXplID0gZGlzcGxheVN0cmlkZSAqIGRpc3BsYXlIZWlnaHQ7CisgICAgc2l6ZV90IGNocm9tYVNpemUgPSBsdW1hU2l6ZSA+PiAyOworCisgICAgcHNfZGVjb2RlX2lwLT51NF9zaXplID0gc2l6ZW9mKGl2ZF92aWRlb19kZWNvZGVfaXBfdCk7CisgICAgcHNfZGVjb2RlX2lwLT5lX2NtZCA9IElWRF9DTURfVklERU9fREVDT0RFOworICAgIGlmIChpbkJ1ZmZlcikgeworICAgICAgICBwc19kZWNvZGVfaXAtPnU0X3RzID0gdHNNYXJrZXI7CisgICAgICAgIHBzX2RlY29kZV9pcC0+cHZfc3RyZWFtX2J1ZmZlciA9IGNvbnN0X2Nhc3Q8dWludDhfdCAqPihpbkJ1ZmZlci0+ZGF0YSgpICsgaW5PZmZzZXQpOworICAgICAgICBwc19kZWNvZGVfaXAtPnU0X251bV9CeXRlcyA9IGluU2l6ZTsKKyAgICB9IGVsc2UgeworICAgICAgICBwc19kZWNvZGVfaXAtPnU0X3RzID0gMDsKKyAgICAgICAgcHNfZGVjb2RlX2lwLT5wdl9zdHJlYW1fYnVmZmVyID0gbnVsbHB0cjsKKyAgICAgICAgcHNfZGVjb2RlX2lwLT51NF9udW1fQnl0ZXMgPSAwOworICAgIH0KKyAgICBwc19kZWNvZGVfaXAtPnNfb3V0X2J1ZmZlci51NF9taW5fb3V0X2J1Zl9zaXplWzBdID0gbHVtYVNpemU7CisgICAgcHNfZGVjb2RlX2lwLT5zX291dF9idWZmZXIudTRfbWluX291dF9idWZfc2l6ZVsxXSA9IGNocm9tYVNpemU7CisgICAgcHNfZGVjb2RlX2lwLT5zX291dF9idWZmZXIudTRfbWluX291dF9idWZfc2l6ZVsyXSA9IGNocm9tYVNpemU7CisgICAgaWYgKG91dEJ1ZmZlcikgeworICAgICAgICBpZiAob3V0QnVmZmVyLT53aWR0aCgpIDwgZGlzcGxheVN0cmlkZSB8fCBvdXRCdWZmZXItPmhlaWdodCgpIDwgZGlzcGxheUhlaWdodCkgeworICAgICAgICAgICAgQUxPR0UoIk91dHB1dCBidWZmZXIgdG9vIHNtYWxsOiBwcm92aWRlZCAoJWR4JWQpIHJlcXVpcmVkICgldXgldSkiLAorICAgICAgICAgICAgICAgICAgb3V0QnVmZmVyLT53aWR0aCgpLCBvdXRCdWZmZXItPmhlaWdodCgpLCBkaXNwbGF5U3RyaWRlLCBkaXNwbGF5SGVpZ2h0KTsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgICAgICBwc19kZWNvZGVfaXAtPnNfb3V0X2J1ZmZlci5wdTFfYnVmc1swXSA9IG91dEJ1ZmZlci0+ZGF0YSgpW0MyUGxhbmFyTGF5b3V0OjpQTEFORV9ZXTsKKyAgICAgICAgcHNfZGVjb2RlX2lwLT5zX291dF9idWZmZXIucHUxX2J1ZnNbMV0gPSBvdXRCdWZmZXItPmRhdGEoKVtDMlBsYW5hckxheW91dDo6UExBTkVfVV07CisgICAgICAgIHBzX2RlY29kZV9pcC0+c19vdXRfYnVmZmVyLnB1MV9idWZzWzJdID0gb3V0QnVmZmVyLT5kYXRhKClbQzJQbGFuYXJMYXlvdXQ6OlBMQU5FX1ZdOworICAgIH0gZWxzZSB7CisgICAgICAgIHBzX2RlY29kZV9pcC0+c19vdXRfYnVmZmVyLnB1MV9idWZzWzBdID0gbU91dEJ1ZmZlckZsdXNoOworICAgICAgICBwc19kZWNvZGVfaXAtPnNfb3V0X2J1ZmZlci5wdTFfYnVmc1sxXSA9IG1PdXRCdWZmZXJGbHVzaCArIGx1bWFTaXplOworICAgICAgICBwc19kZWNvZGVfaXAtPnNfb3V0X2J1ZmZlci5wdTFfYnVmc1syXSA9IG1PdXRCdWZmZXJGbHVzaCArIGx1bWFTaXplICsgY2hyb21hU2l6ZTsKKyAgICB9CisgICAgcHNfZGVjb2RlX2lwLT5zX291dF9idWZmZXIudTRfbnVtX2J1ZnMgPSAzOworICAgIHBzX2RlY29kZV9vcC0+dTRfc2l6ZSA9IHNpemVvZihpdmRfdmlkZW9fZGVjb2RlX29wX3QpOworICAgIHBzX2RlY29kZV9vcC0+dTRfb3V0cHV0X3ByZXNlbnQgPSAwOworCisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgQzJTb2Z0SGV2Y0RlYzo6Z2V0VnVpUGFyYW1zKCkgeworICAgIGl2ZGV4dF9jdGxfZ2V0X3Z1aV9wYXJhbXNfaXBfdCBzX2dldF92dWlfcGFyYW1zX2lwOworICAgIGl2ZGV4dF9jdGxfZ2V0X3Z1aV9wYXJhbXNfb3BfdCBzX2dldF92dWlfcGFyYW1zX29wOworCisgICAgc19nZXRfdnVpX3BhcmFtc19pcC51NF9zaXplID0gc2l6ZW9mKGl2ZGV4dF9jdGxfZ2V0X3Z1aV9wYXJhbXNfaXBfdCk7CisgICAgc19nZXRfdnVpX3BhcmFtc19pcC5lX2NtZCA9IElWRF9DTURfVklERU9fQ1RMOworICAgIHNfZ2V0X3Z1aV9wYXJhbXNfaXAuZV9zdWJfY21kID0KKyAgICAgICAgICAgIChJVkRfQ09OVFJPTF9BUElfQ09NTUFORF9UWVBFX1QpIElIRVZDRF9DWEFfQ01EX0NUTF9HRVRfVlVJX1BBUkFNUzsKKyAgICBzX2dldF92dWlfcGFyYW1zX29wLnU0X3NpemUgPSBzaXplb2YoaXZkZXh0X2N0bF9nZXRfdnVpX3BhcmFtc19vcF90KTsKKyAgICBJVl9BUElfQ0FMTF9TVEFUVVNfVCBzdGF0dXMgPSBpdmRlY19hcGlfZnVuY3Rpb24obURlY0hhbmRsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnNfZ2V0X3Z1aV9wYXJhbXNfaXAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZzX2dldF92dWlfcGFyYW1zX29wKTsKKyAgICBpZiAoc3RhdHVzICE9IElWX1NVQ0NFU1MpIHsKKyAgICAgICAgQUxPR0QoImVycm9yIGluICVzOiAweCV4IiwgX19mdW5jX18sIHNfZ2V0X3Z1aV9wYXJhbXNfb3AudTRfZXJyb3JfY29kZSk7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBWdWlDb2xvckFzcGVjdHMgdnVpQ29sb3JBc3BlY3RzOworICAgIHZ1aUNvbG9yQXNwZWN0cy5wcmltYXJpZXMgPSBzX2dldF92dWlfcGFyYW1zX29wLnUxX2NvbG91cl9wcmltYXJpZXM7CisgICAgdnVpQ29sb3JBc3BlY3RzLnRyYW5zZmVyID0gc19nZXRfdnVpX3BhcmFtc19vcC51MV90cmFuc2Zlcl9jaGFyYWN0ZXJpc3RpY3M7CisgICAgdnVpQ29sb3JBc3BlY3RzLmNvZWZmcyA9IHNfZ2V0X3Z1aV9wYXJhbXNfb3AudTFfbWF0cml4X2NvZWZmaWNpZW50czsKKyAgICB2dWlDb2xvckFzcGVjdHMuZnVsbFJhbmdlID0gc19nZXRfdnVpX3BhcmFtc19vcC51MV92aWRlb19mdWxsX3JhbmdlX2ZsYWc7CisKKyAgICAvLyBjb252ZXJ0IHZ1aSBhc3BlY3RzIHRvIEMyIHZhbHVlcyBpZiBjaGFuZ2VkCisgICAgaWYgKCEodnVpQ29sb3JBc3BlY3RzID09IG1CaXRzdHJlYW1Db2xvckFzcGVjdHMpKSB7CisgICAgICAgIG1CaXRzdHJlYW1Db2xvckFzcGVjdHMgPSB2dWlDb2xvckFzcGVjdHM7CisgICAgICAgIENvbG9yQXNwZWN0cyBzZkFzcGVjdHM7CisgICAgICAgIEMyU3RyZWFtQ29sb3JBc3BlY3RzSW5mbzo6aW5wdXQgY29kZWRBc3BlY3RzID0geyAwdSB9OworICAgICAgICBDb2xvclV0aWxzOjpjb252ZXJ0SXNvQ29sb3JBc3BlY3RzVG9Db2RlY0FzcGVjdHMoCisgICAgICAgICAgICAgICAgdnVpQ29sb3JBc3BlY3RzLnByaW1hcmllcywgdnVpQ29sb3JBc3BlY3RzLnRyYW5zZmVyLCB2dWlDb2xvckFzcGVjdHMuY29lZmZzLAorICAgICAgICAgICAgICAgIHZ1aUNvbG9yQXNwZWN0cy5mdWxsUmFuZ2UsIHNmQXNwZWN0cyk7CisgICAgICAgIGlmICghQzJNYXBwZXI6Om1hcChzZkFzcGVjdHMubVByaW1hcmllcywgJmNvZGVkQXNwZWN0cy5wcmltYXJpZXMpKSB7CisgICAgICAgICAgICBjb2RlZEFzcGVjdHMucHJpbWFyaWVzID0gQzJDb2xvcjo6UFJJTUFSSUVTX1VOU1BFQ0lGSUVEOworICAgICAgICB9CisgICAgICAgIGlmICghQzJNYXBwZXI6Om1hcChzZkFzcGVjdHMubVJhbmdlLCAmY29kZWRBc3BlY3RzLnJhbmdlKSkgeworICAgICAgICAgICAgY29kZWRBc3BlY3RzLnJhbmdlID0gQzJDb2xvcjo6UkFOR0VfVU5TUEVDSUZJRUQ7CisgICAgICAgIH0KKyAgICAgICAgaWYgKCFDMk1hcHBlcjo6bWFwKHNmQXNwZWN0cy5tTWF0cml4Q29lZmZzLCAmY29kZWRBc3BlY3RzLm1hdHJpeCkpIHsKKyAgICAgICAgICAgIGNvZGVkQXNwZWN0cy5tYXRyaXggPSBDMkNvbG9yOjpNQVRSSVhfVU5TUEVDSUZJRUQ7CisgICAgICAgIH0KKyAgICAgICAgaWYgKCFDMk1hcHBlcjo6bWFwKHNmQXNwZWN0cy5tVHJhbnNmZXIsICZjb2RlZEFzcGVjdHMudHJhbnNmZXIpKSB7CisgICAgICAgICAgICBjb2RlZEFzcGVjdHMudHJhbnNmZXIgPSBDMkNvbG9yOjpUUkFOU0ZFUl9VTlNQRUNJRklFRDsKKyAgICAgICAgfQorICAgICAgICBzdGQ6OnZlY3RvcjxzdGQ6OnVuaXF1ZV9wdHI8QzJTZXR0aW5nUmVzdWx0Pj4gZmFpbHVyZXM7CisgICAgICAgICh2b2lkKW1JbnRmLT5jb25maWcoeyZjb2RlZEFzcGVjdHN9LCBDMl9NQVlfQkxPQ0ssICZmYWlsdXJlcyk7CisgICAgfQorICAgIHJldHVybiB0cnVlOworfQorCitzdGF0dXNfdCBDMlNvZnRIZXZjRGVjOjpzZXRGbHVzaE1vZGUoKSB7CisgICAgaXZkX2N0bF9mbHVzaF9pcF90IHNfc2V0X2ZsdXNoX2lwOworICAgIGl2ZF9jdGxfZmx1c2hfb3BfdCBzX3NldF9mbHVzaF9vcDsKKworICAgIHNfc2V0X2ZsdXNoX2lwLnU0X3NpemUgPSBzaXplb2YoaXZkX2N0bF9mbHVzaF9pcF90KTsKKyAgICBzX3NldF9mbHVzaF9pcC5lX2NtZCA9IElWRF9DTURfVklERU9fQ1RMOworICAgIHNfc2V0X2ZsdXNoX2lwLmVfc3ViX2NtZCA9IElWRF9DTURfQ1RMX0ZMVVNIOworICAgIHNfc2V0X2ZsdXNoX29wLnU0X3NpemUgPSBzaXplb2YoaXZkX2N0bF9mbHVzaF9vcF90KTsKKyAgICBJVl9BUElfQ0FMTF9TVEFUVVNfVCBzdGF0dXMgPSBpdmRlY19hcGlfZnVuY3Rpb24obURlY0hhbmRsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnNfc2V0X2ZsdXNoX2lwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmc19zZXRfZmx1c2hfb3ApOworICAgIGlmIChzdGF0dXMgIT0gSVZfU1VDQ0VTUykgeworICAgICAgICBBTE9HRSgiZXJyb3IgaW4gJXM6IDB4JXgiLCBfX2Z1bmNfXywgc19zZXRfZmx1c2hfb3AudTRfZXJyb3JfY29kZSk7CisgICAgICAgIHJldHVybiBVTktOT1dOX0VSUk9SOworICAgIH0KKworICAgIHJldHVybiBPSzsKK30KKworc3RhdHVzX3QgQzJTb2Z0SGV2Y0RlYzo6cmVzZXREZWNvZGVyKCkgeworICAgIGl2ZF9jdGxfcmVzZXRfaXBfdCBzX3Jlc2V0X2lwOworICAgIGl2ZF9jdGxfcmVzZXRfb3BfdCBzX3Jlc2V0X29wOworCisgICAgc19yZXNldF9pcC51NF9zaXplID0gc2l6ZW9mKGl2ZF9jdGxfcmVzZXRfaXBfdCk7CisgICAgc19yZXNldF9pcC5lX2NtZCA9IElWRF9DTURfVklERU9fQ1RMOworICAgIHNfcmVzZXRfaXAuZV9zdWJfY21kID0gSVZEX0NNRF9DVExfUkVTRVQ7CisgICAgc19yZXNldF9vcC51NF9zaXplID0gc2l6ZW9mKGl2ZF9jdGxfcmVzZXRfb3BfdCk7CisgICAgSVZfQVBJX0NBTExfU1RBVFVTX1Qgc3RhdHVzID0gaXZkZWNfYXBpX2Z1bmN0aW9uKG1EZWNIYW5kbGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZzX3Jlc2V0X2lwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmc19yZXNldF9vcCk7CisgICAgaWYgKElWX1NVQ0NFU1MgIT0gc3RhdHVzKSB7CisgICAgICAgIEFMT0dFKCJlcnJvciBpbiAlczogMHgleCIsIF9fZnVuY19fLCBzX3Jlc2V0X29wLnU0X2Vycm9yX2NvZGUpOworICAgICAgICByZXR1cm4gVU5LTk9XTl9FUlJPUjsKKyAgICB9CisgICAgbVN0cmlkZSA9IDA7CisgICAgKHZvaWQpIHNldE51bUNvcmVzKCk7CisgICAgbVNpZ25hbGxlZEVycm9yID0gZmFsc2U7CisgICAgbUhlYWRlckRlY29kZWQgPSBmYWxzZTsKKyAgICByZXR1cm4gT0s7Cit9CisKK3ZvaWQgQzJTb2Z0SGV2Y0RlYzo6cmVzZXRQbHVnaW4oKSB7CisgICAgbVNpZ25hbGxlZE91dHB1dEVvcyA9IGZhbHNlOworICAgIGdldHRpbWVvZmRheSgmbVRpbWVTdGFydCwgbnVsbHB0cik7CisgICAgZ2V0dGltZW9mZGF5KCZtVGltZUVuZCwgbnVsbHB0cik7Cit9CisKK3N0YXR1c190IEMyU29mdEhldmNEZWM6OmRlbGV0ZURlY29kZXIoKSB7CisgICAgaWYgKG1EZWNIYW5kbGUpIHsKKyAgICAgICAgaXZkZXh0X2RlbGV0ZV9pcF90IHNfZGVsZXRlX2lwOworICAgICAgICBpdmRleHRfZGVsZXRlX29wX3Qgc19kZWxldGVfb3A7CisKKyAgICAgICAgc19kZWxldGVfaXAuc19pdmRfZGVsZXRlX2lwX3QudTRfc2l6ZSA9IHNpemVvZihpdmRleHRfZGVsZXRlX2lwX3QpOworICAgICAgICBzX2RlbGV0ZV9pcC5zX2l2ZF9kZWxldGVfaXBfdC5lX2NtZCA9IElWRF9DTURfREVMRVRFOworICAgICAgICBzX2RlbGV0ZV9vcC5zX2l2ZF9kZWxldGVfb3BfdC51NF9zaXplID0gc2l6ZW9mKGl2ZGV4dF9kZWxldGVfb3BfdCk7CisgICAgICAgIElWX0FQSV9DQUxMX1NUQVRVU19UIHN0YXR1cyA9IGl2ZGVjX2FwaV9mdW5jdGlvbihtRGVjSGFuZGxlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnNfZGVsZXRlX2lwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnNfZGVsZXRlX29wKTsKKyAgICAgICAgaWYgKHN0YXR1cyAhPSBJVl9TVUNDRVNTKSB7CisgICAgICAgICAgICBBTE9HRSgiZXJyb3IgaW4gJXM6IDB4JXgiLCBfX2Z1bmNfXywKKyAgICAgICAgICAgICAgICAgIHNfZGVsZXRlX29wLnNfaXZkX2RlbGV0ZV9vcF90LnU0X2Vycm9yX2NvZGUpOworICAgICAgICAgICAgcmV0dXJuIFVOS05PV05fRVJST1I7CisgICAgICAgIH0KKyAgICAgICAgbURlY0hhbmRsZSA9IG51bGxwdHI7CisgICAgfQorCisgICAgcmV0dXJuIE9LOworfQorCit2b2lkIGZpbGxFbXB0eVdvcmsoY29uc3Qgc3RkOjp1bmlxdWVfcHRyPEMyV29yaz4gJndvcmspIHsKKyAgICB1aW50MzJfdCBmbGFncyA9IDA7CisgICAgaWYgKHdvcmstPmlucHV0LmZsYWdzICYgQzJGcmFtZURhdGE6OkZMQUdfRU5EX09GX1NUUkVBTSkgeworICAgICAgICBmbGFncyB8PSBDMkZyYW1lRGF0YTo6RkxBR19FTkRfT0ZfU1RSRUFNOworICAgICAgICBBTE9HVigic2lnbmFsbGluZyBlb3MiKTsKKyAgICB9CisgICAgd29yay0+d29ya2xldHMuZnJvbnQoKS0+b3V0cHV0LmZsYWdzID0gKEMyRnJhbWVEYXRhOjpmbGFnc190KWZsYWdzOworICAgIHdvcmstPndvcmtsZXRzLmZyb250KCktPm91dHB1dC5idWZmZXJzLmNsZWFyKCk7CisgICAgd29yay0+d29ya2xldHMuZnJvbnQoKS0+b3V0cHV0Lm9yZGluYWwgPSB3b3JrLT5pbnB1dC5vcmRpbmFsOworICAgIHdvcmstPndvcmtsZXRzUHJvY2Vzc2VkID0gMXU7Cit9CisKK3ZvaWQgQzJTb2Z0SGV2Y0RlYzo6ZmluaXNoV29yayh1aW50NjRfdCBpbmRleCwgY29uc3Qgc3RkOjp1bmlxdWVfcHRyPEMyV29yaz4gJndvcmspIHsKKyAgICBzdGQ6OnNoYXJlZF9wdHI8QzJCdWZmZXI+IGJ1ZmZlciA9IGNyZWF0ZUdyYXBoaWNCdWZmZXIoc3RkOjptb3ZlKG1PdXRCbG9jayksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEMyUmVjdChtV2lkdGgsIG1IZWlnaHQpKTsKKyAgICBtT3V0QmxvY2sgPSBudWxscHRyOworICAgIHsKKyAgICAgICAgSW50ZkltcGw6OkxvY2sgbG9jayA9IG1JbnRmLT5sb2NrKCk7CisgICAgICAgIGJ1ZmZlci0+c2V0SW5mbyhtSW50Zi0+Z2V0Q29sb3JBc3BlY3RzX2woKSk7CisgICAgfQorCisgICAgYXV0byBmaWxsV29yayA9IFtidWZmZXJdKGNvbnN0IHN0ZDo6dW5pcXVlX3B0cjxDMldvcms+ICZ3b3JrKSB7CisgICAgICAgIHdvcmstPndvcmtsZXRzLmZyb250KCktPm91dHB1dC5mbGFncyA9IChDMkZyYW1lRGF0YTo6ZmxhZ3NfdCkwOworICAgICAgICB3b3JrLT53b3JrbGV0cy5mcm9udCgpLT5vdXRwdXQuYnVmZmVycy5jbGVhcigpOworICAgICAgICB3b3JrLT53b3JrbGV0cy5mcm9udCgpLT5vdXRwdXQuYnVmZmVycy5wdXNoX2JhY2soYnVmZmVyKTsKKyAgICAgICAgd29yay0+d29ya2xldHMuZnJvbnQoKS0+b3V0cHV0Lm9yZGluYWwgPSB3b3JrLT5pbnB1dC5vcmRpbmFsOworICAgICAgICB3b3JrLT53b3JrbGV0c1Byb2Nlc3NlZCA9IDF1OworICAgIH07CisgICAgaWYgKHdvcmsgJiYgYzJfY250cjY0X3QoaW5kZXgpID09IHdvcmstPmlucHV0Lm9yZGluYWwuZnJhbWVJbmRleCkgeworICAgICAgICBmaWxsV29yayh3b3JrKTsKKyAgICB9IGVsc2UgeworICAgICAgICBmaW5pc2goaW5kZXgsIGZpbGxXb3JrKTsKKyAgICB9Cit9CisKK2MyX3N0YXR1c190IEMyU29mdEhldmNEZWM6OmVuc3VyZURlY29kZXJTdGF0ZShjb25zdCBzdGQ6OnNoYXJlZF9wdHI8QzJCbG9ja1Bvb2w+ICZwb29sKSB7CisgICAgaWYgKCFtRGVjSGFuZGxlKSB7CisgICAgICAgIEFMT0dFKCJub3Qgc3VwcG9zZWQgdG8gYmUgaGVyZSwgaW52YWxpZCBkZWNvZGVyIGNvbnRleHQiKTsKKyAgICAgICAgcmV0dXJuIEMyX0NPUlJVUFRFRDsKKyAgICB9CisgICAgaWYgKG1TdHJpZGUgIT0gQUxJR042NChtV2lkdGgpKSB7CisgICAgICAgIG1TdHJpZGUgPSBBTElHTjY0KG1XaWR0aCk7CisgICAgICAgIGlmIChPSyAhPSBzZXRQYXJhbXMobVN0cmlkZSwgSVZEX0RFQ09ERV9GUkFNRSkpIHJldHVybiBDMl9DT1JSVVBURUQ7CisgICAgfQorICAgIGlmIChtT3V0QmxvY2sgJiYKKyAgICAgICAgICAgIChtT3V0QmxvY2stPndpZHRoKCkgIT0gbVN0cmlkZSB8fCBtT3V0QmxvY2stPmhlaWdodCgpICE9IG1IZWlnaHQpKSB7CisgICAgICAgIG1PdXRCbG9jay5yZXNldCgpOworICAgIH0KKyAgICBpZiAoIW1PdXRCbG9jaykgeworICAgICAgICB1aW50MzJfdCBmb3JtYXQgPSBIQUxfUElYRUxfRk9STUFUX1lWMTI7CisgICAgICAgIEMyTWVtb3J5VXNhZ2UgdXNhZ2UgPSB7IEMyTWVtb3J5VXNhZ2U6OkNQVV9SRUFELCBDMk1lbW9yeVVzYWdlOjpDUFVfV1JJVEUgfTsKKyAgICAgICAgYzJfc3RhdHVzX3QgZXJyID0gcG9vbC0+ZmV0Y2hHcmFwaGljQmxvY2sobVN0cmlkZSwgbUhlaWdodCwgZm9ybWF0LCB1c2FnZSwgJm1PdXRCbG9jayk7CisgICAgICAgIGlmIChlcnIgIT0gQzJfT0spIHsKKyAgICAgICAgICAgIEFMT0dFKCJmZXRjaEdyYXBoaWNCbG9jayBmb3IgT3V0cHV0IGZhaWxlZCB3aXRoIHN0YXR1cyAlZCIsIGVycik7CisgICAgICAgICAgICByZXR1cm4gZXJyOworICAgICAgICB9CisgICAgICAgIEFMT0dWKCJwcm92aWRlZCAoJWR4JWQpIHJlcXVpcmVkICglZHglZCkiLAorICAgICAgICAgICAgICBtT3V0QmxvY2stPndpZHRoKCksIG1PdXRCbG9jay0+aGVpZ2h0KCksIG1TdHJpZGUsIG1IZWlnaHQpOworICAgIH0KKworICAgIHJldHVybiBDMl9PSzsKK30KKworLy8gVE9ETzogY2FuIG92ZXJhbGwgZXJyb3IgY2hlY2tpbmcgYmUgaW1wcm92ZWQ/CisvLyBUT0RPOiBhbGxvdyBjb25maWd1cmF0aW9uIG9mIGNvbG9yIGZvcm1hdCBhbmQgdXNhZ2UgZm9yIGdyYXBoaWMgYnVmZmVycyBpbnN0ZWFkCisvLyAgICAgICBvZiBoYXJkIGNvZGluZyB0aGVtIHRvIEhBTF9QSVhFTF9GT1JNQVRfWVYxMgorLy8gVE9ETzogcGFzcyBjb2xvcmFzcGVjdHMgaW5mb3JtYXRpb24gdG8gc3VyZmFjZQorLy8gVE9ETzogdGVzdCBzdXBwb3J0IGZvciBkeW5hbWljIGNoYW5nZSBpbiByZXNvbHV0aW9uCisvLyBUT0RPOiB2ZXJpZnkgaWYgdGhlIGRlY29kZXIgc2VudCBiYWNrIGFsbCBmcmFtZXMKK3ZvaWQgQzJTb2Z0SGV2Y0RlYzo6cHJvY2VzcygKKyAgICAgICAgY29uc3Qgc3RkOjp1bmlxdWVfcHRyPEMyV29yaz4gJndvcmssCisgICAgICAgIGNvbnN0IHN0ZDo6c2hhcmVkX3B0cjxDMkJsb2NrUG9vbD4gJnBvb2wpIHsKKyAgICAvLyBJbml0aWFsaXplIG91dHB1dCB3b3JrCisgICAgd29yay0+cmVzdWx0ID0gQzJfT0s7CisgICAgd29yay0+d29ya2xldHNQcm9jZXNzZWQgPSAwdTsKKyAgICB3b3JrLT53b3JrbGV0cy5mcm9udCgpLT5vdXRwdXQuY29uZmlnVXBkYXRlLmNsZWFyKCk7CisgICAgd29yay0+d29ya2xldHMuZnJvbnQoKS0+b3V0cHV0LmZsYWdzID0gd29yay0+aW5wdXQuZmxhZ3M7CisKKyAgICBpZiAobVNpZ25hbGxlZEVycm9yIHx8IG1TaWduYWxsZWRPdXRwdXRFb3MpIHsKKyAgICAgICAgd29yay0+cmVzdWx0ID0gQzJfQkFEX1ZBTFVFOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgc2l6ZV90IGluT2Zmc2V0ID0gMHU7CisgICAgc2l6ZV90IGluU2l6ZSA9IDB1OworICAgIHVpbnQzMl90IHdvcmtJbmRleCA9IHdvcmstPmlucHV0Lm9yZGluYWwuZnJhbWVJbmRleC5wZWVrdSgpICYgMHhGRkZGRkZGRjsKKyAgICBDMlJlYWRWaWV3IHJWaWV3ID0gbUR1bW15UmVhZFZpZXc7CisgICAgaWYgKCF3b3JrLT5pbnB1dC5idWZmZXJzLmVtcHR5KCkpIHsKKyAgICAgICAgclZpZXcgPSB3b3JrLT5pbnB1dC5idWZmZXJzWzBdLT5kYXRhKCkubGluZWFyQmxvY2tzKCkuZnJvbnQoKS5tYXAoKS5nZXQoKTsKKyAgICAgICAgaW5TaXplID0gclZpZXcuY2FwYWNpdHkoKTsKKyAgICAgICAgaWYgKGluU2l6ZSAmJiByVmlldy5lcnJvcigpKSB7CisgICAgICAgICAgICBBTE9HRSgicmVhZCB2aWV3IG1hcCBmYWlsZWQgJWQiLCByVmlldy5lcnJvcigpKTsKKyAgICAgICAgICAgIHdvcmstPnJlc3VsdCA9IHJWaWV3LmVycm9yKCk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICB9CisgICAgYm9vbCBlb3MgPSAoKHdvcmstPmlucHV0LmZsYWdzICYgQzJGcmFtZURhdGE6OkZMQUdfRU5EX09GX1NUUkVBTSkgIT0gMCk7CisgICAgYm9vbCBoYXNQaWN0dXJlID0gZmFsc2U7CisKKyAgICBBTE9HVigiaW4gYnVmZmVyIGF0dHIuIHNpemUgJXp1IHRpbWVzdGFtcCAlZCBmcmFtZWluZGV4ICVkLCBmbGFncyAleCIsCisgICAgICAgICAgaW5TaXplLCAoaW50KXdvcmstPmlucHV0Lm9yZGluYWwudGltZXN0YW1wLnBlZWt1KCksCisgICAgICAgICAgKGludCl3b3JrLT5pbnB1dC5vcmRpbmFsLmZyYW1lSW5kZXgucGVla3UoKSwgd29yay0+aW5wdXQuZmxhZ3MpOworICAgIHNpemVfdCBpblBvcyA9IDA7CisgICAgd2hpbGUgKGluUG9zIDwgaW5TaXplKSB7CisgICAgICAgIGlmIChDMl9PSyAhPSBlbnN1cmVEZWNvZGVyU3RhdGUocG9vbCkpIHsKKyAgICAgICAgICAgIG1TaWduYWxsZWRFcnJvciA9IHRydWU7CisgICAgICAgICAgICB3b3JrLT53b3JrbGV0c1Byb2Nlc3NlZCA9IDF1OworICAgICAgICAgICAgd29yay0+cmVzdWx0ID0gQzJfQ09SUlVQVEVEOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIEMyR3JhcGhpY1ZpZXcgd1ZpZXcgPSBtT3V0QmxvY2stPm1hcCgpLmdldCgpOworICAgICAgICBpZiAod1ZpZXcuZXJyb3IoKSkgeworICAgICAgICAgICAgQUxPR0UoImdyYXBoaWMgdmlldyBtYXAgZmFpbGVkICVkIiwgd1ZpZXcuZXJyb3IoKSk7CisgICAgICAgICAgICB3b3JrLT5yZXN1bHQgPSB3Vmlldy5lcnJvcigpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIGl2ZF92aWRlb19kZWNvZGVfaXBfdCBzX2RlY29kZV9pcDsKKyAgICAgICAgaXZkX3ZpZGVvX2RlY29kZV9vcF90IHNfZGVjb2RlX29wOworICAgICAgICBpZiAoIXNldERlY29kZUFyZ3MoJnNfZGVjb2RlX2lwLCAmc19kZWNvZGVfb3AsICZyVmlldywgJndWaWV3LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5PZmZzZXQgKyBpblBvcywgaW5TaXplIC0gaW5Qb3MsIHdvcmtJbmRleCkpIHsKKyAgICAgICAgICAgIG1TaWduYWxsZWRFcnJvciA9IHRydWU7CisgICAgICAgICAgICB3b3JrLT53b3JrbGV0c1Byb2Nlc3NlZCA9IDF1OworICAgICAgICAgICAgd29yay0+cmVzdWx0ID0gQzJfQ09SUlVQVEVEOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgaWYgKGZhbHNlID09IG1IZWFkZXJEZWNvZGVkKSB7CisgICAgICAgICAgICAvKiBEZWNvZGUgaGVhZGVyIGFuZCBnZXQgZGltZW5zaW9ucyAqLworICAgICAgICAgICAgc2V0UGFyYW1zKG1TdHJpZGUsIElWRF9ERUNPREVfSEVBREVSKTsKKyAgICAgICAgfQorICAgICAgICBXT1JEMzIgZGVsYXk7CisgICAgICAgIEdFVFRJTUUoJm1UaW1lU3RhcnQsIG51bGxwdHIpOworICAgICAgICBUSU1FX0RJRkYobVRpbWVFbmQsIG1UaW1lU3RhcnQsIGRlbGF5KTsKKyAgICAgICAgKHZvaWQpIGl2ZGVjX2FwaV9mdW5jdGlvbihtRGVjSGFuZGxlLCAmc19kZWNvZGVfaXAsICZzX2RlY29kZV9vcCk7CisgICAgICAgIFdPUkQzMiBkZWNvZGVUaW1lOworICAgICAgICBHRVRUSU1FKCZtVGltZUVuZCwgbnVsbHB0cik7CisgICAgICAgIFRJTUVfRElGRihtVGltZVN0YXJ0LCBtVGltZUVuZCwgZGVjb2RlVGltZSk7CisgICAgICAgIEFMT0dWKCJkZWNvZGVUaW1lPSU2ZCBkZWxheT0lNmQgbnVtQnl0ZXM9JTZkIiwgZGVjb2RlVGltZSwgZGVsYXksCisgICAgICAgICAgICAgIHNfZGVjb2RlX29wLnU0X251bV9ieXRlc19jb25zdW1lZCk7CisgICAgICAgIGlmIChJVkRfTUVNX0FMTE9DX0ZBSUxFRCA9PSAoc19kZWNvZGVfb3AudTRfZXJyb3JfY29kZSAmIDB4RkYpKSB7CisgICAgICAgICAgICBBTE9HRSgiYWxsb2NhdGlvbiBmYWlsdXJlIGluIGRlY29kZXIiKTsKKyAgICAgICAgICAgIG1TaWduYWxsZWRFcnJvciA9IHRydWU7CisgICAgICAgICAgICB3b3JrLT53b3JrbGV0c1Byb2Nlc3NlZCA9IDF1OworICAgICAgICAgICAgd29yay0+cmVzdWx0ID0gQzJfQ09SUlVQVEVEOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9IGVsc2UgaWYgKElWRF9TVFJFQU1fV0lEVEhfSEVJR0hUX05PVF9TVVBQT1JURUQgPT0gKHNfZGVjb2RlX29wLnU0X2Vycm9yX2NvZGUgJiAweEZGKSkgeworICAgICAgICAgICAgQUxPR0UoInVuc3VwcG9ydGVkIHJlc29sdXRpb24gOiAlZHglZCIsIG1XaWR0aCwgbUhlaWdodCk7CisgICAgICAgICAgICBtU2lnbmFsbGVkRXJyb3IgPSB0cnVlOworICAgICAgICAgICAgd29yay0+d29ya2xldHNQcm9jZXNzZWQgPSAxdTsKKyAgICAgICAgICAgIHdvcmstPnJlc3VsdCA9IEMyX0NPUlJVUFRFRDsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfSBlbHNlIGlmIChJVkRfUkVTX0NIQU5HRUQgPT0gKHNfZGVjb2RlX29wLnU0X2Vycm9yX2NvZGUgJiAweEZGKSkgeworICAgICAgICAgICAgQUxPR1YoInJlc29sdXRpb24gY2hhbmdlZCIpOworICAgICAgICAgICAgZHJhaW5JbnRlcm5hbChEUkFJTl9DT01QT05FTlRfTk9fRU9TLCBwb29sLCB3b3JrKTsKKyAgICAgICAgICAgIHJlc2V0RGVjb2RlcigpOworICAgICAgICAgICAgcmVzZXRQbHVnaW4oKTsKKyAgICAgICAgICAgIHdvcmstPndvcmtsZXRzUHJvY2Vzc2VkID0gMHU7CisKKyAgICAgICAgICAgIC8qIERlY29kZSBoZWFkZXIgYW5kIGdldCBuZXcgZGltZW5zaW9ucyAqLworICAgICAgICAgICAgc2V0UGFyYW1zKG1TdHJpZGUsIElWRF9ERUNPREVfSEVBREVSKTsKKyAgICAgICAgICAgICh2b2lkKSBpdmRlY19hcGlfZnVuY3Rpb24obURlY0hhbmRsZSwgJnNfZGVjb2RlX2lwLCAmc19kZWNvZGVfb3ApOworICAgICAgICB9CisgICAgICAgIGlmICgwIDwgc19kZWNvZGVfb3AudTRfcGljX3dkICYmIDAgPCBzX2RlY29kZV9vcC51NF9waWNfaHQpIHsKKyAgICAgICAgICAgIGlmIChtSGVhZGVyRGVjb2RlZCA9PSBmYWxzZSkgeworICAgICAgICAgICAgICAgIG1IZWFkZXJEZWNvZGVkID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICBzZXRQYXJhbXMoQUxJR042NChzX2RlY29kZV9vcC51NF9waWNfd2QpLCBJVkRfREVDT0RFX0ZSQU1FKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChzX2RlY29kZV9vcC51NF9waWNfd2QgIT0gbVdpZHRoIHx8ICBzX2RlY29kZV9vcC51NF9waWNfaHQgIT0gbUhlaWdodCkgeworICAgICAgICAgICAgICAgIG1XaWR0aCA9IHNfZGVjb2RlX29wLnU0X3BpY193ZDsKKyAgICAgICAgICAgICAgICBtSGVpZ2h0ID0gc19kZWNvZGVfb3AudTRfcGljX2h0OworICAgICAgICAgICAgICAgIENIRUNLX0VRKDB1LCBzX2RlY29kZV9vcC51NF9vdXRwdXRfcHJlc2VudCk7CisKKyAgICAgICAgICAgICAgICBDMlZpZGVvU2l6ZVN0cmVhbUluZm86Om91dHB1dCBzaXplKDB1LCBtV2lkdGgsIG1IZWlnaHQpOworICAgICAgICAgICAgICAgIHN0ZDo6dmVjdG9yPHN0ZDo6dW5pcXVlX3B0cjxDMlNldHRpbmdSZXN1bHQ+PiBmYWlsdXJlczsKKyAgICAgICAgICAgICAgICBjMl9zdGF0dXNfdCBlcnIgPQorICAgICAgICAgICAgICAgICAgICBtSW50Zi0+Y29uZmlnKHsmc2l6ZX0sIEMyX01BWV9CTE9DSywgJmZhaWx1cmVzKTsKKyAgICAgICAgICAgICAgICBpZiAoZXJyID09IE9LKSB7CisgICAgICAgICAgICAgICAgICAgIHdvcmstPndvcmtsZXRzLmZyb250KCktPm91dHB1dC5jb25maWdVcGRhdGUucHVzaF9iYWNrKAorICAgICAgICAgICAgICAgICAgICAgICAgQzJQYXJhbTo6Q29weShzaXplKSk7CisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgQUxPR0UoIkNhbm5vdCBzZXQgd2lkdGggYW5kIGhlaWdodCIpOworICAgICAgICAgICAgICAgICAgICBtU2lnbmFsbGVkRXJyb3IgPSB0cnVlOworICAgICAgICAgICAgICAgICAgICB3b3JrLT53b3JrbGV0c1Byb2Nlc3NlZCA9IDF1OworICAgICAgICAgICAgICAgICAgICB3b3JrLT5yZXN1bHQgPSBDMl9DT1JSVVBURUQ7CisgICAgICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgKHZvaWQpIGdldFZ1aVBhcmFtcygpOworICAgICAgICBoYXNQaWN0dXJlIHw9ICgxID09IHNfZGVjb2RlX29wLnU0X2ZyYW1lX2RlY29kZWRfZmxhZyk7CisgICAgICAgIGlmIChzX2RlY29kZV9vcC51NF9vdXRwdXRfcHJlc2VudCkgeworICAgICAgICAgICAgZmluaXNoV29yayhzX2RlY29kZV9vcC51NF90cywgd29yayk7CisgICAgICAgIH0KKyAgICAgICAgaWYgKDAgPT0gc19kZWNvZGVfb3AudTRfbnVtX2J5dGVzX2NvbnN1bWVkKSB7CisgICAgICAgICAgICBBTE9HRCgiQnl0ZXMgY29uc3VtZWQgaXMgemVyby4gSWdub3JpbmcgcmVtYWluaW5nIGJ5dGVzIik7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBpblBvcyArPSBzX2RlY29kZV9vcC51NF9udW1fYnl0ZXNfY29uc3VtZWQ7CisgICAgICAgIGlmIChoYXNQaWN0dXJlICYmIChpblNpemUgLSBpblBvcykpIHsKKyAgICAgICAgICAgIEFMT0dEKCJkZWNvZGVkIGZyYW1lIGluIGN1cnJlbnQgYWNjZXNzIG5hbCwgaWdub3JpbmcgZnVydGhlciB0cmFpbGluZyBieXRlcyAlZCIsCisgICAgICAgICAgICAgICAgICAoaW50KWluU2l6ZSAtIChpbnQpaW5Qb3MpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBpZiAoZW9zKSB7CisgICAgICAgIGRyYWluSW50ZXJuYWwoRFJBSU5fQ09NUE9ORU5UX1dJVEhfRU9TLCBwb29sLCB3b3JrKTsKKyAgICAgICAgbVNpZ25hbGxlZE91dHB1dEVvcyA9IHRydWU7CisgICAgfSBlbHNlIGlmICghaGFzUGljdHVyZSkgeworICAgICAgICBmaWxsRW1wdHlXb3JrKHdvcmspOworICAgIH0KK30KKworYzJfc3RhdHVzX3QgQzJTb2Z0SGV2Y0RlYzo6ZHJhaW5JbnRlcm5hbCgKKyAgICAgICAgdWludDMyX3QgZHJhaW5Nb2RlLAorICAgICAgICBjb25zdCBzdGQ6OnNoYXJlZF9wdHI8QzJCbG9ja1Bvb2w+ICZwb29sLAorICAgICAgICBjb25zdCBzdGQ6OnVuaXF1ZV9wdHI8QzJXb3JrPiAmd29yaykgeworICAgIGlmIChkcmFpbk1vZGUgPT0gTk9fRFJBSU4pIHsKKyAgICAgICAgQUxPR1coImRyYWluIHdpdGggTk9fRFJBSU46IG5vLW9wIik7CisgICAgICAgIHJldHVybiBDMl9PSzsKKyAgICB9CisgICAgaWYgKGRyYWluTW9kZSA9PSBEUkFJTl9DSEFJTikgeworICAgICAgICBBTE9HVygiRFJBSU5fQ0hBSU4gbm90IHN1cHBvcnRlZCIpOworICAgICAgICByZXR1cm4gQzJfT01JVFRFRDsKKyAgICB9CisKKyAgICBpZiAoT0sgIT0gc2V0Rmx1c2hNb2RlKCkpIHJldHVybiBDMl9DT1JSVVBURUQ7CisgICAgd2hpbGUgKHRydWUpIHsKKyAgICAgICAgaWYgKEMyX09LICE9IGVuc3VyZURlY29kZXJTdGF0ZShwb29sKSkgeworICAgICAgICAgICAgbVNpZ25hbGxlZEVycm9yID0gdHJ1ZTsKKyAgICAgICAgICAgIHdvcmstPndvcmtsZXRzUHJvY2Vzc2VkID0gMXU7CisgICAgICAgICAgICB3b3JrLT5yZXN1bHQgPSBDMl9DT1JSVVBURUQ7CisgICAgICAgICAgICByZXR1cm4gQzJfQ09SUlVQVEVEOworICAgICAgICB9CisgICAgICAgIEMyR3JhcGhpY1ZpZXcgd1ZpZXcgPSBtT3V0QmxvY2stPm1hcCgpLmdldCgpOworICAgICAgICBpZiAod1ZpZXcuZXJyb3IoKSkgeworICAgICAgICAgICAgQUxPR0UoImdyYXBoaWMgdmlldyBtYXAgZmFpbGVkICVkIiwgd1ZpZXcuZXJyb3IoKSk7CisgICAgICAgICAgICByZXR1cm4gQzJfQ09SUlVQVEVEOworICAgICAgICB9CisgICAgICAgIGl2ZF92aWRlb19kZWNvZGVfaXBfdCBzX2RlY29kZV9pcDsKKyAgICAgICAgaXZkX3ZpZGVvX2RlY29kZV9vcF90IHNfZGVjb2RlX29wOworICAgICAgICBpZiAoIXNldERlY29kZUFyZ3MoJnNfZGVjb2RlX2lwLCAmc19kZWNvZGVfb3AsIG51bGxwdHIsICZ3VmlldywgMCwgMCwgMCkpIHsKKyAgICAgICAgICAgIG1TaWduYWxsZWRFcnJvciA9IHRydWU7CisgICAgICAgICAgICB3b3JrLT53b3JrbGV0c1Byb2Nlc3NlZCA9IDF1OworICAgICAgICAgICAgcmV0dXJuIEMyX0NPUlJVUFRFRDsKKyAgICAgICAgfQorICAgICAgICAodm9pZCkgaXZkZWNfYXBpX2Z1bmN0aW9uKG1EZWNIYW5kbGUsICZzX2RlY29kZV9pcCwgJnNfZGVjb2RlX29wKTsKKyAgICAgICAgaWYgKHNfZGVjb2RlX29wLnU0X291dHB1dF9wcmVzZW50KSB7CisgICAgICAgICAgICBmaW5pc2hXb3JrKHNfZGVjb2RlX29wLnU0X3RzLCB3b3JrKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGZpbGxFbXB0eVdvcmsod29yayk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgIH0KKworICAgIHJldHVybiBDMl9PSzsKK30KKworYzJfc3RhdHVzX3QgQzJTb2Z0SGV2Y0RlYzo6ZHJhaW4oCisgICAgICAgIHVpbnQzMl90IGRyYWluTW9kZSwKKyAgICAgICAgY29uc3Qgc3RkOjpzaGFyZWRfcHRyPEMyQmxvY2tQb29sPiAmcG9vbCkgeworICAgIHJldHVybiBkcmFpbkludGVybmFsKGRyYWluTW9kZSwgcG9vbCwgbnVsbHB0cik7Cit9CisKK2NsYXNzIEMyU29mdEhldmNEZWNGYWN0b3J5IDogcHVibGljIEMyQ29tcG9uZW50RmFjdG9yeSB7CitwdWJsaWM6CisgICAgQzJTb2Z0SGV2Y0RlY0ZhY3RvcnkoKSA6IG1IZWxwZXIoc3RkOjpzdGF0aWNfcG9pbnRlcl9jYXN0PEMyUmVmbGVjdG9ySGVscGVyPigKKyAgICAgICAgR2V0Q29kZWMyUGxhdGZvcm1Db21wb25lbnRTdG9yZSgpLT5nZXRQYXJhbVJlZmxlY3RvcigpKSkgeworICAgIH0KKworICAgIHZpcnR1YWwgYzJfc3RhdHVzX3QgY3JlYXRlQ29tcG9uZW50KAorICAgICAgICAgICAgYzJfbm9kZV9pZF90IGlkLAorICAgICAgICAgICAgc3RkOjpzaGFyZWRfcHRyPEMyQ29tcG9uZW50PiogY29uc3QgY29tcG9uZW50LAorICAgICAgICAgICAgc3RkOjpmdW5jdGlvbjx2b2lkKEMyQ29tcG9uZW50Kik+IGRlbGV0ZXIpIG92ZXJyaWRlIHsKKyAgICAgICAgKmNvbXBvbmVudCA9IHN0ZDo6c2hhcmVkX3B0cjxDMkNvbXBvbmVudD4oCisgICAgICAgICAgICAgICAgbmV3IEMyU29mdEhldmNEZWMoQ09NUE9ORU5UX05BTUUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZDo6bWFrZV9zaGFyZWQ8QzJTb2Z0SGV2Y0RlYzo6SW50ZkltcGw+KG1IZWxwZXIpKSwKKyAgICAgICAgICAgICAgICBkZWxldGVyKTsKKyAgICAgICAgcmV0dXJuIEMyX09LOworICAgIH0KKworICAgIHZpcnR1YWwgYzJfc3RhdHVzX3QgY3JlYXRlSW50ZXJmYWNlKAorICAgICAgICAgICAgYzJfbm9kZV9pZF90IGlkLAorICAgICAgICAgICAgc3RkOjpzaGFyZWRfcHRyPEMyQ29tcG9uZW50SW50ZXJmYWNlPiogY29uc3QgaW50ZXJmYWNlLAorICAgICAgICAgICAgc3RkOjpmdW5jdGlvbjx2b2lkKEMyQ29tcG9uZW50SW50ZXJmYWNlKik+IGRlbGV0ZXIpIG92ZXJyaWRlIHsKKyAgICAgICAgKmludGVyZmFjZSA9IHN0ZDo6c2hhcmVkX3B0cjxDMkNvbXBvbmVudEludGVyZmFjZT4oCisgICAgICAgICAgICAgICAgbmV3IFNpbXBsZUludGVyZmFjZTxDMlNvZnRIZXZjRGVjOjpJbnRmSW1wbD4oCisgICAgICAgICAgICAgICAgICAgICAgICBDT01QT05FTlRfTkFNRSwgaWQsIHN0ZDo6bWFrZV9zaGFyZWQ8QzJTb2Z0SGV2Y0RlYzo6SW50ZkltcGw+KG1IZWxwZXIpKSwKKyAgICAgICAgICAgICAgICBkZWxldGVyKTsKKyAgICAgICAgcmV0dXJuIEMyX09LOworICAgIH0KKworICAgIHZpcnR1YWwgfkMyU29mdEhldmNEZWNGYWN0b3J5KCkgb3ZlcnJpZGUgPSBkZWZhdWx0OworCitwcml2YXRlOgorICAgIHN0ZDo6c2hhcmVkX3B0cjxDMlJlZmxlY3RvckhlbHBlcj4gbUhlbHBlcjsKK307CisKK30gIC8vIG5hbWVzcGFjZSBhbmRyb2lkCisKK2V4dGVybiAiQyIgOjpDMkNvbXBvbmVudEZhY3RvcnkqIENyZWF0ZUNvZGVjMkZhY3RvcnkoKSB7CisgICAgQUxPR1YoImluICVzIiwgX19mdW5jX18pOworICAgIHJldHVybiBuZXcgOjphbmRyb2lkOjpDMlNvZnRIZXZjRGVjRmFjdG9yeSgpOworfQorCitleHRlcm4gIkMiIHZvaWQgRGVzdHJveUNvZGVjMkZhY3RvcnkoOjpDMkNvbXBvbmVudEZhY3RvcnkqIGZhY3RvcnkpIHsKKyAgICBBTE9HVigiaW4gJXMiLCBfX2Z1bmNfXyk7CisgICAgZGVsZXRlIGZhY3Rvcnk7Cit9CmRpZmYgLS1naXQgYS9tZWRpYS9jb2RlYzIvY29tcG9uZW50cy9oZXZjL0MyU29mdEhldmNEZWMuaCBiL21lZGlhL2NvZGVjMi9jb21wb25lbnRzL2hldmMvQzJTb2Z0SGV2Y0RlYy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc1MTExZmMKLS0tIC9kZXYvbnVsbAorKysgYi9tZWRpYS9jb2RlYzIvY29tcG9uZW50cy9oZXZjL0MyU29mdEhldmNEZWMuaApAQCAtMCwwICsxLDE1MiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxOCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCisKKyNpZm5kZWYgQU5EUk9JRF9DMl9TT0ZUX0hFVkNfREVDX0hfCisjZGVmaW5lIEFORFJPSURfQzJfU09GVF9IRVZDX0RFQ19IXworCisjaW5jbHVkZSA8bWVkaWEvc3RhZ2VmcmlnaHQvZm91bmRhdGlvbi9Db2xvclV0aWxzLmg+CisKKyNpbmNsdWRlIDxTaW1wbGVDMkNvbXBvbmVudC5oPgorCisjaW5jbHVkZSAiaWhldmNfdHlwZWRlZnMuaCIKKyNpbmNsdWRlICJpdi5oIgorI2luY2x1ZGUgIml2ZC5oIgorCituYW1lc3BhY2UgYW5kcm9pZCB7CisKKyNkZWZpbmUgaXZkZWNfYXBpX2Z1bmN0aW9uICAgICAgICAgICAgICBpaGV2Y2RfY3hhX2FwaV9mdW5jdGlvbgorI2RlZmluZSBpdmRleHRfY3JlYXRlX2lwX3QgICAgICAgICAgICAgIGloZXZjZF9jeGFfY3JlYXRlX2lwX3QKKyNkZWZpbmUgaXZkZXh0X2NyZWF0ZV9vcF90ICAgICAgICAgICAgICBpaGV2Y2RfY3hhX2NyZWF0ZV9vcF90CisjZGVmaW5lIGl2ZGV4dF9kZWxldGVfaXBfdCAgICAgICAgICAgICAgaWhldmNkX2N4YV9kZWxldGVfaXBfdAorI2RlZmluZSBpdmRleHRfZGVsZXRlX29wX3QgICAgICAgICAgICAgIGloZXZjZF9jeGFfZGVsZXRlX29wX3QKKyNkZWZpbmUgaXZkZXh0X2N0bF9zZXRfbnVtX2NvcmVzX2lwX3QgICBpaGV2Y2RfY3hhX2N0bF9zZXRfbnVtX2NvcmVzX2lwX3QKKyNkZWZpbmUgaXZkZXh0X2N0bF9zZXRfbnVtX2NvcmVzX29wX3QgICBpaGV2Y2RfY3hhX2N0bF9zZXRfbnVtX2NvcmVzX29wX3QKKyNkZWZpbmUgaXZkZXh0X2N0bF9nZXRfdnVpX3BhcmFtc19pcF90ICBpaGV2Y2RfY3hhX2N0bF9nZXRfdnVpX3BhcmFtc19pcF90CisjZGVmaW5lIGl2ZGV4dF9jdGxfZ2V0X3Z1aV9wYXJhbXNfb3BfdCAgaWhldmNkX2N4YV9jdGxfZ2V0X3Z1aV9wYXJhbXNfb3BfdAorI2RlZmluZSBBTElHTjY0KHgpICAgICAgICAgICAgICAgICAgICAgICgoKCh4KSArIDYzKSA+PiA2KSA8PCA2KQorI2RlZmluZSBNQVhfTlVNX0NPUkVTICAgICAgICAgICAgICAgICAgIDQKKyNkZWZpbmUgSVZERVhUX0NNRF9DVExfU0VUX05VTV9DT1JFUyAgICBcCisgICAgICAgIChJVkRfQ09OVFJPTF9BUElfQ09NTUFORF9UWVBFX1QpSUhFVkNEX0NYQV9DTURfQ1RMX1NFVF9OVU1fQ09SRVMKKyNkZWZpbmUgTUlOKGEsIGIpICAgICAgICAgICAgICAgICAgICAgICAoKChhKSA8IChiKSkgPyAoYSkgOiAoYikpCisjZGVmaW5lIEdFVFRJTUUoYSwgYikgICAgICAgICAgICAgICAgICAgZ2V0dGltZW9mZGF5KGEsIGIpOworI2RlZmluZSBUSU1FX0RJRkYoc3RhcnQsIGVuZCwgZGlmZikgICAgIFwKKyAgICBkaWZmID0gKCgoZW5kKS50dl9zZWMgLSAoc3RhcnQpLnR2X3NlYykgKiAxMDAwMDAwKSArIFwKKyAgICAgICAgICAgICgoZW5kKS50dl91c2VjIC0gKHN0YXJ0KS50dl91c2VjKTsKKworCitzdHJ1Y3QgQzJTb2Z0SGV2Y0RlYyA6IHB1YmxpYyBTaW1wbGVDMkNvbXBvbmVudCB7CisgICAgY2xhc3MgSW50ZkltcGw7CisKKyAgICBDMlNvZnRIZXZjRGVjKGNvbnN0IGNoYXIqIG5hbWUsIGMyX25vZGVfaWRfdCBpZCwKKyAgICAgICAgICAgICAgICAgIGNvbnN0IHN0ZDo6c2hhcmVkX3B0cjxJbnRmSW1wbD4mIGludGZJbXBsKTsKKyAgICB2aXJ0dWFsIH5DMlNvZnRIZXZjRGVjKCk7CisKKyAgICAvLyBGcm9tIFNpbXBsZUMyQ29tcG9uZW50CisgICAgYzJfc3RhdHVzX3Qgb25Jbml0KCkgb3ZlcnJpZGU7CisgICAgYzJfc3RhdHVzX3Qgb25TdG9wKCkgb3ZlcnJpZGU7CisgICAgdm9pZCBvblJlc2V0KCkgb3ZlcnJpZGU7CisgICAgdm9pZCBvblJlbGVhc2UoKSBvdmVycmlkZTsKKyAgICBjMl9zdGF0dXNfdCBvbkZsdXNoX3NtKCkgb3ZlcnJpZGU7CisgICAgdm9pZCBwcm9jZXNzKAorICAgICAgICAgICAgY29uc3Qgc3RkOjp1bmlxdWVfcHRyPEMyV29yaz4gJndvcmssCisgICAgICAgICAgICBjb25zdCBzdGQ6OnNoYXJlZF9wdHI8QzJCbG9ja1Bvb2w+ICZwb29sKSBvdmVycmlkZTsKKyAgICBjMl9zdGF0dXNfdCBkcmFpbigKKyAgICAgICAgICAgIHVpbnQzMl90IGRyYWluTW9kZSwKKyAgICAgICAgICAgIGNvbnN0IHN0ZDo6c2hhcmVkX3B0cjxDMkJsb2NrUG9vbD4gJnBvb2wpIG92ZXJyaWRlOworIHByaXZhdGU6CisgICAgc3RhdHVzX3QgY3JlYXRlRGVjb2RlcigpOworICAgIHN0YXR1c190IHNldE51bUNvcmVzKCk7CisgICAgc3RhdHVzX3Qgc2V0UGFyYW1zKHNpemVfdCBzdHJpZGUsIElWRF9WSURFT19ERUNPREVfTU9ERV9UIGRlY19tb2RlKTsKKyAgICBzdGF0dXNfdCBnZXRWZXJzaW9uKCk7CisgICAgc3RhdHVzX3QgaW5pdERlY29kZXIoKTsKKyAgICBib29sIHNldERlY29kZUFyZ3MoaXZkX3ZpZGVvX2RlY29kZV9pcF90ICpwc19kZWNvZGVfaXAsCisgICAgICAgICAgICAgICAgICAgICAgIGl2ZF92aWRlb19kZWNvZGVfb3BfdCAqcHNfZGVjb2RlX29wLAorICAgICAgICAgICAgICAgICAgICAgICBDMlJlYWRWaWV3ICppbkJ1ZmZlciwKKyAgICAgICAgICAgICAgICAgICAgICAgQzJHcmFwaGljVmlldyAqb3V0QnVmZmVyLAorICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgaW5PZmZzZXQsCisgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBpblNpemUsCisgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90IHRzTWFya2VyKTsKKyAgICBib29sIGdldFZ1aVBhcmFtcygpOworICAgIC8vIFRPRE86VGhpcyBpcyBub3QgdGhlIHJpZ2h0IHBsYWNlIGZvciBjb2xvckFzcGVjdHMgZnVuY3Rpb25zLiBUaGVzZSBzaG91bGQKKyAgICAvLyBiZSBwYXJ0IG9mIGMyLXZuZGsgc28gdGhhdCB0aGV5IGNhbiBiZSBhY2Nlc3NlZCBieSBhbGwgdmlkZW8gcGx1Z2lucworICAgIC8vIHVudGlsIHRoZW4sIG1ha2UgdGhlbSBmZWVsIGF0IGhvbWUKKyAgICBib29sIGNvbG9yQXNwZWN0c0RpZmZlcihjb25zdCBDb2xvckFzcGVjdHMgJmEsIGNvbnN0IENvbG9yQXNwZWN0cyAmYik7CisgICAgdm9pZCB1cGRhdGVGaW5hbENvbG9yQXNwZWN0cygKKyAgICAgICAgICAgIGNvbnN0IENvbG9yQXNwZWN0cyAmb3RoZXJBc3BlY3RzLCBjb25zdCBDb2xvckFzcGVjdHMgJnByZWZlcnJlZEFzcGVjdHMpOworICAgIHN0YXR1c190IGhhbmRsZUNvbG9yQXNwZWN0c0NoYW5nZSgpOworICAgIGMyX3N0YXR1c190IGVuc3VyZURlY29kZXJTdGF0ZShjb25zdCBzdGQ6OnNoYXJlZF9wdHI8QzJCbG9ja1Bvb2w+ICZwb29sKTsKKyAgICB2b2lkIGZpbmlzaFdvcmsodWludDY0X3QgaW5kZXgsIGNvbnN0IHN0ZDo6dW5pcXVlX3B0cjxDMldvcms+ICZ3b3JrKTsKKyAgICBzdGF0dXNfdCBzZXRGbHVzaE1vZGUoKTsKKyAgICBjMl9zdGF0dXNfdCBkcmFpbkludGVybmFsKAorICAgICAgICAgICAgdWludDMyX3QgZHJhaW5Nb2RlLAorICAgICAgICAgICAgY29uc3Qgc3RkOjpzaGFyZWRfcHRyPEMyQmxvY2tQb29sPiAmcG9vbCwKKyAgICAgICAgICAgIGNvbnN0IHN0ZDo6dW5pcXVlX3B0cjxDMldvcms+ICZ3b3JrKTsKKyAgICBzdGF0dXNfdCByZXNldERlY29kZXIoKTsKKyAgICB2b2lkIHJlc2V0UGx1Z2luKCk7CisgICAgc3RhdHVzX3QgZGVsZXRlRGVjb2RlcigpOworCisgICAgLy8gVE9ETzpUaGlzIGlzIG5vdCB0aGUgcmlnaHQgcGxhY2UgZm9yIHRoaXMgZW51bS4gVGhlc2Ugc2hvdWxkCisgICAgLy8gYmUgcGFydCBvZiBjMi12bmRrIHNvIHRoYXQgdGhleSBjYW4gYmUgYWNjZXNzZWQgYnkgYWxsIHZpZGVvIHBsdWdpbnMKKyAgICAvLyB1bnRpbCB0aGVuLCBtYWtlIHRoZW0gZmVlbCBhdCBob21lCisgICAgZW51bSB7CisgICAgICAgIGtOb3RTdXBwb3J0ZWQsCisgICAgICAgIGtQcmVmZXJCaXRzdHJlYW0sCisgICAgICAgIGtQcmVmZXJDb250YWluZXIsCisgICAgfTsKKworICAgIHN0ZDo6c2hhcmVkX3B0cjxJbnRmSW1wbD4gbUludGY7CisgICAgaXZfb2JqX3QgKm1EZWNIYW5kbGU7CisgICAgc3RkOjpzaGFyZWRfcHRyPEMyR3JhcGhpY0Jsb2NrPiBtT3V0QmxvY2s7CisgICAgdWludDhfdCAqbU91dEJ1ZmZlckZsdXNoOworCisgICAgc2l6ZV90IG1OdW1Db3JlczsKKyAgICBJVl9DT0xPUl9GT1JNQVRfVCBtSXZDb2xvcmZvcm1hdDsKKworICAgIHVpbnQzMl90IG1XaWR0aDsKKyAgICB1aW50MzJfdCBtSGVpZ2h0OworICAgIHVpbnQzMl90IG1TdHJpZGU7CisgICAgYm9vbCBtU2lnbmFsbGVkT3V0cHV0RW9zOworICAgIGJvb2wgbVNpZ25hbGxlZEVycm9yOworICAgIGJvb2wgbUhlYWRlckRlY29kZWQ7CisKKyAgICAvLyBDb2xvciBhc3BlY3RzLiBUaGVzZSBhcmUgSVNPIHZhbHVlcyBhbmQgYXJlIG1lYW50IHRvIGRldGVjdCBjaGFuZ2VzIGluIGFzcGVjdHMgdG8gYXZvaWQKKyAgICAvLyBjb252ZXJ0aW5nIHRoZW0gdG8gQzIgdmFsdWVzIGZvciBlYWNoIGZyYW1lCisgICAgc3RydWN0IFZ1aUNvbG9yQXNwZWN0cyB7CisgICAgICAgIHVpbnQ4X3QgcHJpbWFyaWVzOworICAgICAgICB1aW50OF90IHRyYW5zZmVyOworICAgICAgICB1aW50OF90IGNvZWZmczsKKyAgICAgICAgdWludDhfdCBmdWxsUmFuZ2U7CisKKyAgICAgICAgLy8gZGVmYXVsdCBjb2xvciBhc3BlY3RzCisgICAgICAgIFZ1aUNvbG9yQXNwZWN0cygpCisgICAgICAgICAgICA6IHByaW1hcmllcygyKSwgdHJhbnNmZXIoMiksIGNvZWZmcygyKSwgZnVsbFJhbmdlKDApIHsgfQorCisgICAgICAgIGJvb2wgb3BlcmF0b3I9PShjb25zdCBWdWlDb2xvckFzcGVjdHMgJm8pIHsKKyAgICAgICAgICAgIHJldHVybiBwcmltYXJpZXMgPT0gby5wcmltYXJpZXMgJiYgdHJhbnNmZXIgPT0gby50cmFuc2ZlciAmJiBjb2VmZnMgPT0gby5jb2VmZnMKKyAgICAgICAgICAgICAgICAgICAgJiYgZnVsbFJhbmdlID09IG8uZnVsbFJhbmdlOworICAgICAgICB9CisgICAgfSBtQml0c3RyZWFtQ29sb3JBc3BlY3RzOworCisgICAgLy8gcHJvZmlsZQorICAgIHN0cnVjdCB0aW1ldmFsIG1UaW1lU3RhcnQ7CisgICAgc3RydWN0IHRpbWV2YWwgbVRpbWVFbmQ7CisKKyAgICBDMl9ET19OT1RfQ09QWShDMlNvZnRIZXZjRGVjKTsKK307CisKK30gIC8vIG5hbWVzcGFjZSBhbmRyb2lkCisKKyNlbmRpZiAgLy8gQU5EUk9JRF9DMl9TT0ZUX0hFVkNfREVDX0hfCmRpZmYgLS1naXQgYS9tZWRpYS9jb2RlYzIvY29tcG9uZW50cy9tcDMvQW5kcm9pZC5icCBiL21lZGlhL2NvZGVjMi9jb21wb25lbnRzL21wMy9BbmRyb2lkLmJwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY2NjY1ZWQKLS0tIC9kZXYvbnVsbAorKysgYi9tZWRpYS9jb2RlYzIvY29tcG9uZW50cy9tcDMvQW5kcm9pZC5icApAQCAtMCwwICsxLDExIEBACitjY19saWJyYXJ5X3NoYXJlZCB7CisgICAgbmFtZTogImxpYmNvZGVjMl9zb2Z0X21wM2RlYyIsCisgICAgZGVmYXVsdHM6IFsKKyAgICAgICAgImxpYmNvZGVjMl9zb2Z0LWRlZmF1bHRzIiwKKyAgICAgICAgImxpYmNvZGVjMl9zb2Z0X3Nhbml0aXplX2FsbC1kZWZhdWx0cyIsCisgICAgXSwKKworICAgIHNyY3M6IFsiQzJTb2Z0TXAzRGVjLmNwcCJdLAorCisgICAgc3RhdGljX2xpYnM6IFsibGlic3RhZ2VmcmlnaHRfbXAzZGVjIl0sCit9CmRpZmYgLS1naXQgYS9tZWRpYS9jb2RlYzIvY29tcG9uZW50cy9tcDMvQzJTb2Z0TXAzRGVjLmNwcCBiL21lZGlhL2NvZGVjMi9jb21wb25lbnRzL21wMy9DMlNvZnRNcDNEZWMuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM4YjgzOTcKLS0tIC9kZXYvbnVsbAorKysgYi9tZWRpYS9jb2RlYzIvY29tcG9uZW50cy9tcDMvQzJTb2Z0TXAzRGVjLmNwcApAQCAtMCwwICsxLDU1OCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxOCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCisKKy8vI2RlZmluZSBMT0dfTkRFQlVHIDAKKyNkZWZpbmUgTE9HX1RBRyAiQzJTb2Z0TXAzRGVjIgorI2luY2x1ZGUgPGxvZy9sb2cuaD4KKworI2luY2x1ZGUgPG51bWVyaWM+CisKKyNpbmNsdWRlIDxtZWRpYS9zdGFnZWZyaWdodC9mb3VuZGF0aW9uL01lZGlhRGVmcy5oPgorCisjaW5jbHVkZSA8QzJQbGF0Zm9ybVN1cHBvcnQuaD4KKyNpbmNsdWRlIDxTaW1wbGVDMkludGVyZmFjZS5oPgorCisjaW5jbHVkZSAiQzJTb2Z0TXAzRGVjLmgiCisjaW5jbHVkZSAicHZtcDNkZWNvZGVyX2FwaS5oIgorCituYW1lc3BhY2UgYW5kcm9pZCB7CisKK2NvbnN0ZXhwciBjaGFyIENPTVBPTkVOVF9OQU1FW10gPSAiYzIuYW5kcm9pZC5tcDMuZGVjb2RlciI7CisKK2NsYXNzIEMyU29mdE1QMzo6SW50ZkltcGwgOiBwdWJsaWMgQzJJbnRlcmZhY2VIZWxwZXIgeworcHVibGljOgorICAgIGV4cGxpY2l0IEludGZJbXBsKGNvbnN0IHN0ZDo6c2hhcmVkX3B0cjxDMlJlZmxlY3RvckhlbHBlcj4gJmhlbHBlcikKKyAgICAgICAgOiBDMkludGVyZmFjZUhlbHBlcihoZWxwZXIpIHsKKworICAgICAgICBzZXREZXJpdmVkSW5zdGFuY2UodGhpcyk7CisKKyAgICAgICAgYWRkUGFyYW1ldGVyKAorICAgICAgICAgICAgICAgIERlZmluZVBhcmFtKG1JbnB1dEZvcm1hdCwgQzJfTkFNRV9JTlBVVF9TVFJFQU1fRk9STUFUX1NFVFRJTkcpCisgICAgICAgICAgICAgICAgLndpdGhDb25zdFZhbHVlKG5ldyBDMlN0cmVhbUZvcm1hdENvbmZpZzo6aW5wdXQoMHUsIEMyRm9ybWF0Q29tcHJlc3NlZCkpCisgICAgICAgICAgICAgICAgLmJ1aWxkKCkpOworCisgICAgICAgIGFkZFBhcmFtZXRlcigKKyAgICAgICAgICAgICAgICBEZWZpbmVQYXJhbShtT3V0cHV0Rm9ybWF0LCBDMl9OQU1FX09VVFBVVF9TVFJFQU1fRk9STUFUX1NFVFRJTkcpCisgICAgICAgICAgICAgICAgLndpdGhDb25zdFZhbHVlKG5ldyBDMlN0cmVhbUZvcm1hdENvbmZpZzo6b3V0cHV0KDB1LCBDMkZvcm1hdEF1ZGlvKSkKKyAgICAgICAgICAgICAgICAuYnVpbGQoKSk7CisKKyAgICAgICAgYWRkUGFyYW1ldGVyKAorICAgICAgICAgICAgICAgIERlZmluZVBhcmFtKG1JbnB1dE1lZGlhVHlwZSwgQzJfTkFNRV9JTlBVVF9QT1JUX01JTUVfU0VUVElORykKKyAgICAgICAgICAgICAgICAud2l0aENvbnN0VmFsdWUoQWxsb2NTaGFyZWRTdHJpbmc8QzJQb3J0TWltZUNvbmZpZzo6aW5wdXQ+KAorICAgICAgICAgICAgICAgICAgICAgICAgTUVESUFfTUlNRVRZUEVfQVVESU9fTVBFRykpCisgICAgICAgICAgICAgICAgLmJ1aWxkKCkpOworCisgICAgICAgIGFkZFBhcmFtZXRlcigKKyAgICAgICAgICAgICAgICBEZWZpbmVQYXJhbShtT3V0cHV0TWVkaWFUeXBlLCBDMl9OQU1FX09VVFBVVF9QT1JUX01JTUVfU0VUVElORykKKyAgICAgICAgICAgICAgICAud2l0aENvbnN0VmFsdWUoQWxsb2NTaGFyZWRTdHJpbmc8QzJQb3J0TWltZUNvbmZpZzo6b3V0cHV0PigKKyAgICAgICAgICAgICAgICAgICAgICAgIE1FRElBX01JTUVUWVBFX0FVRElPX1JBVykpCisgICAgICAgICAgICAgICAgLmJ1aWxkKCkpOworCisgICAgICAgIGFkZFBhcmFtZXRlcigKKyAgICAgICAgICAgICAgICBEZWZpbmVQYXJhbShtU2FtcGxlUmF0ZSwgQzJfTkFNRV9TVFJFQU1fU0FNUExFX1JBVEVfU0VUVElORykKKyAgICAgICAgICAgICAgICAud2l0aERlZmF1bHQobmV3IEMyU3RyZWFtU2FtcGxlUmF0ZUluZm86Om91dHB1dCgwdSwgNDQxMDApKQorICAgICAgICAgICAgICAgIC53aXRoRmllbGRzKHtDMkYobVNhbXBsZVJhdGUsIHZhbHVlKS5vbmVPZih7ODAwMCwgMTEwMjUsIDEyMDAwLCAxNjAwMCwKKyAgICAgICAgICAgICAgICAgICAgMjIwNTAsIDI0MDAwLCAzMjAwMCwgNDQxMDAsIDQ4MDAwfSl9KQorICAgICAgICAgICAgICAgIC53aXRoU2V0dGVyKChTZXR0ZXI8ZGVjbHR5cGUoKm1TYW1wbGVSYXRlKT46OlN0cmljdFZhbHVlV2l0aE5vRGVwcykpCisgICAgICAgICAgICAgICAgLmJ1aWxkKCkpOworCisgICAgICAgIGFkZFBhcmFtZXRlcigKKyAgICAgICAgICAgICAgICBEZWZpbmVQYXJhbShtQ2hhbm5lbENvdW50LCBDMl9OQU1FX1NUUkVBTV9DSEFOTkVMX0NPVU5UX1NFVFRJTkcpCisgICAgICAgICAgICAgICAgLndpdGhEZWZhdWx0KG5ldyBDMlN0cmVhbUNoYW5uZWxDb3VudEluZm86Om91dHB1dCgwdSwgMikpCisgICAgICAgICAgICAgICAgLndpdGhGaWVsZHMoe0MyRihtQ2hhbm5lbENvdW50LCB2YWx1ZSkuaW5SYW5nZSgxLCAyKX0pCisgICAgICAgICAgICAgICAgLndpdGhTZXR0ZXIoU2V0dGVyPGRlY2x0eXBlKCptQ2hhbm5lbENvdW50KT46OlN0cmljdFZhbHVlV2l0aE5vRGVwcykKKyAgICAgICAgICAgICAgICAuYnVpbGQoKSk7CisKKyAgICAgICAgYWRkUGFyYW1ldGVyKAorICAgICAgICAgICAgICAgIERlZmluZVBhcmFtKG1CaXRyYXRlLCBDMl9OQU1FX1NUUkVBTV9CSVRSQVRFX1NFVFRJTkcpCisgICAgICAgICAgICAgICAgLndpdGhEZWZhdWx0KG5ldyBDMkJpdHJhdGVUdW5pbmc6OmlucHV0KDB1LCA2NDAwMCkpCisgICAgICAgICAgICAgICAgLndpdGhGaWVsZHMoe0MyRihtQml0cmF0ZSwgdmFsdWUpLmluUmFuZ2UoODAwMCwgMzIwMDAwKX0pCisgICAgICAgICAgICAgICAgLndpdGhTZXR0ZXIoU2V0dGVyPGRlY2x0eXBlKCptQml0cmF0ZSk+OjpOb25TdHJpY3RWYWx1ZVdpdGhOb0RlcHMpCisgICAgICAgICAgICAgICAgLmJ1aWxkKCkpOworCisgICAgICAgIGFkZFBhcmFtZXRlcigKKyAgICAgICAgICAgICAgICBEZWZpbmVQYXJhbShtSW5wdXRNYXhCdWZTaXplLCBDMl9QQVJBTUtFWV9JTlBVVF9NQVhfQlVGRkVSX1NJWkUpCisgICAgICAgICAgICAgICAgLndpdGhDb25zdFZhbHVlKG5ldyBDMlN0cmVhbU1heEJ1ZmZlclNpemVJbmZvOjppbnB1dCgwdSwgODE5MikpCisgICAgICAgICAgICAgICAgLmJ1aWxkKCkpOworICAgIH0KKworcHJpdmF0ZToKKyAgICBzdGQ6OnNoYXJlZF9wdHI8QzJTdHJlYW1Gb3JtYXRDb25maWc6OmlucHV0PiBtSW5wdXRGb3JtYXQ7CisgICAgc3RkOjpzaGFyZWRfcHRyPEMyU3RyZWFtRm9ybWF0Q29uZmlnOjpvdXRwdXQ+IG1PdXRwdXRGb3JtYXQ7CisgICAgc3RkOjpzaGFyZWRfcHRyPEMyUG9ydE1pbWVDb25maWc6OmlucHV0PiBtSW5wdXRNZWRpYVR5cGU7CisgICAgc3RkOjpzaGFyZWRfcHRyPEMyUG9ydE1pbWVDb25maWc6Om91dHB1dD4gbU91dHB1dE1lZGlhVHlwZTsKKyAgICBzdGQ6OnNoYXJlZF9wdHI8QzJTdHJlYW1TYW1wbGVSYXRlSW5mbzo6b3V0cHV0PiBtU2FtcGxlUmF0ZTsKKyAgICBzdGQ6OnNoYXJlZF9wdHI8QzJTdHJlYW1DaGFubmVsQ291bnRJbmZvOjpvdXRwdXQ+IG1DaGFubmVsQ291bnQ7CisgICAgc3RkOjpzaGFyZWRfcHRyPEMyQml0cmF0ZVR1bmluZzo6aW5wdXQ+IG1CaXRyYXRlOworICAgIHN0ZDo6c2hhcmVkX3B0cjxDMlN0cmVhbU1heEJ1ZmZlclNpemVJbmZvOjppbnB1dD4gbUlucHV0TWF4QnVmU2l6ZTsKK307CisKK0MyU29mdE1QMzo6QzJTb2Z0TVAzKGNvbnN0IGNoYXIgKm5hbWUsIGMyX25vZGVfaWRfdCBpZCwKKyAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0ZDo6c2hhcmVkX3B0cjxJbnRmSW1wbD4gJmludGZJbXBsKQorICAgIDogU2ltcGxlQzJDb21wb25lbnQoc3RkOjptYWtlX3NoYXJlZDxTaW1wbGVJbnRlcmZhY2U8SW50ZkltcGw+PihuYW1lLCBpZCwgaW50ZkltcGwpKSwKKyAgICAgIG1JbnRmKGludGZJbXBsKSwKKyAgICAgIG1Db25maWcobnVsbHB0ciksCisgICAgICBtRGVjb2RlckJ1ZihudWxscHRyKSB7Cit9CisKK0MyU29mdE1QMzo6fkMyU29mdE1QMygpIHsKKyAgICBvblJlbGVhc2UoKTsKK30KKworYzJfc3RhdHVzX3QgQzJTb2Z0TVAzOjpvbkluaXQoKSB7CisgICAgc3RhdHVzX3QgZXJyID0gaW5pdERlY29kZXIoKTsKKyAgICByZXR1cm4gZXJyID09IE9LID8gQzJfT0sgOiBDMl9OT19NRU1PUlk7Cit9CisKK2MyX3N0YXR1c190IEMyU29mdE1QMzo6b25TdG9wKCkgeworICAgIC8vIE1ha2Ugc3VyZSB0aGF0IHRoZSBuZXh0IGJ1ZmZlciBvdXRwdXQgZG9lcyBub3Qgc3RpbGwKKyAgICAvLyBkZXBlbmQgb24gZnJhZ21lbnRzIGZyb20gdGhlIGxhc3Qgb25lIGRlY29kZWQuCisgICAgcHZtcDNfSW5pdERlY29kZXIobUNvbmZpZywgbURlY29kZXJCdWYpOworICAgIG1TaWduYWxsZWRFcnJvciA9IGZhbHNlOworICAgIG1Jc0ZpcnN0ID0gdHJ1ZTsKKyAgICBtU2lnbmFsbGVkT3V0cHV0RW9zID0gZmFsc2U7CisgICAgbUFuY2hvclRpbWVTdGFtcCA9IDA7CisgICAgbVByb2Nlc3NlZFNhbXBsZXMgPSAwOworCisgICAgcmV0dXJuIEMyX09LOworfQorCit2b2lkIEMyU29mdE1QMzo6b25SZXNldCgpIHsKKyAgICAodm9pZClvblN0b3AoKTsKK30KKwordm9pZCBDMlNvZnRNUDM6Om9uUmVsZWFzZSgpIHsKKyAgICBtR2FwbGVzc0J5dGVzID0gZmFsc2U7CisgICAgaWYgKG1EZWNvZGVyQnVmKSB7CisgICAgICAgIGZyZWUobURlY29kZXJCdWYpOworICAgICAgICBtRGVjb2RlckJ1ZiA9IG51bGxwdHI7CisgICAgfQorCisgICAgaWYgKG1Db25maWcpIHsKKyAgICAgICAgZGVsZXRlIG1Db25maWc7CisgICAgICAgIG1Db25maWcgPSBudWxscHRyOworICAgIH0KK30KKworc3RhdHVzX3QgQzJTb2Z0TVAzOjppbml0RGVjb2RlcigpIHsKKyAgICBtQ29uZmlnID0gbmV3IHRQVk1QM0RlY29kZXJFeHRlcm5hbHt9OworICAgIGlmICghbUNvbmZpZykgcmV0dXJuIE5PX01FTU9SWTsKKyAgICBtQ29uZmlnLT5lcXVhbGl6ZXJUeXBlID0gZmxhdDsKKyAgICBtQ29uZmlnLT5jcmNFbmFibGVkID0gZmFsc2U7CisKKyAgICBzaXplX3QgbWVtUmVxdWlyZW1lbnRzID0gcHZtcDNfZGVjb2Rlck1lbVJlcXVpcmVtZW50cygpOworICAgIG1EZWNvZGVyQnVmID0gbWFsbG9jKG1lbVJlcXVpcmVtZW50cyk7CisgICAgaWYgKCFtRGVjb2RlckJ1ZikgcmV0dXJuIE5PX01FTU9SWTsKKworICAgIHB2bXAzX0luaXREZWNvZGVyKG1Db25maWcsIG1EZWNvZGVyQnVmKTsKKworICAgIG1Jc0ZpcnN0ID0gdHJ1ZTsKKyAgICBtR2FwbGVzc0J5dGVzID0gZmFsc2U7CisgICAgbVNpZ25hbGxlZEVycm9yID0gZmFsc2U7CisgICAgbVNpZ25hbGxlZE91dHB1dEVvcyA9IGZhbHNlOworICAgIG1BbmNob3JUaW1lU3RhbXAgPSAwOworICAgIG1Qcm9jZXNzZWRTYW1wbGVzID0gMDsKKworICAgIHJldHVybiBPSzsKK30KKworLyogVGhlIGJlbG93IGNvZGUgaXMgYm9ycm93ZWQgZnJvbSAuL3Rlc3QvbXAzcmVhZGVyLmNwcCAqLworc3RhdGljIGJvb2wgcGFyc2VNcDNIZWFkZXIodWludDMyX3QgaGVhZGVyLCBzaXplX3QgKmZyYW1lX3NpemUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCAqb3V0X3NhbXBsaW5nX3JhdGUgPSBudWxscHRyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3QgKm91dF9jaGFubmVscyA9IG51bGxwdHIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCAqb3V0X2JpdHJhdGUgPSBudWxscHRyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3QgKm91dF9udW1fc2FtcGxlcyA9IG51bGxwdHIpIHsKKyAgICAqZnJhbWVfc2l6ZSA9IDA7CisgICAgaWYgKG91dF9zYW1wbGluZ19yYXRlKSAqb3V0X3NhbXBsaW5nX3JhdGUgPSAwOworICAgIGlmIChvdXRfY2hhbm5lbHMpICpvdXRfY2hhbm5lbHMgPSAwOworICAgIGlmIChvdXRfYml0cmF0ZSkgKm91dF9iaXRyYXRlID0gMDsKKyAgICBpZiAob3V0X251bV9zYW1wbGVzKSAqb3V0X251bV9zYW1wbGVzID0gMTE1MjsKKworICAgIGlmICgoaGVhZGVyICYgMHhmZmUwMDAwMCkgIT0gMHhmZmUwMDAwMCkgcmV0dXJuIGZhbHNlOworCisgICAgdW5zaWduZWQgdmVyc2lvbiA9IChoZWFkZXIgPj4gMTkpICYgMzsKKyAgICBpZiAodmVyc2lvbiA9PSAweDAxKSByZXR1cm4gZmFsc2U7CisKKyAgICB1bnNpZ25lZCBsYXllciA9IChoZWFkZXIgPj4gMTcpICYgMzsKKyAgICBpZiAobGF5ZXIgPT0gMHgwMCkgcmV0dXJuIGZhbHNlOworCisgICAgdW5zaWduZWQgYml0cmF0ZV9pbmRleCA9IChoZWFkZXIgPj4gMTIpICYgMHgwZjsKKyAgICBpZiAoYml0cmF0ZV9pbmRleCA9PSAwIHx8IGJpdHJhdGVfaW5kZXggPT0gMHgwZikgcmV0dXJuIGZhbHNlOworCisgICAgdW5zaWduZWQgc2FtcGxpbmdfcmF0ZV9pbmRleCA9IChoZWFkZXIgPj4gMTApICYgMzsKKyAgICBpZiAoc2FtcGxpbmdfcmF0ZV9pbmRleCA9PSAzKSByZXR1cm4gZmFsc2U7CisKKyAgICBzdGF0aWMgY29uc3QgaW50IGtTYW1wbGluZ1JhdGVWMVtdID0geyA0NDEwMCwgNDgwMDAsIDMyMDAwIH07CisgICAgaW50IHNhbXBsaW5nX3JhdGUgPSBrU2FtcGxpbmdSYXRlVjFbc2FtcGxpbmdfcmF0ZV9pbmRleF07CisgICAgaWYgKHZlcnNpb24gPT0gMiAvKiBWMiAqLykgeworICAgICAgICBzYW1wbGluZ19yYXRlIC89IDI7CisgICAgfSBlbHNlIGlmICh2ZXJzaW9uID09IDAgLyogVjIuNSAqLykgeworICAgICAgICBzYW1wbGluZ19yYXRlIC89IDQ7CisgICAgfQorCisgICAgdW5zaWduZWQgcGFkZGluZyA9IChoZWFkZXIgPj4gOSkgJiAxOworCisgICAgaWYgKGxheWVyID09IDMpIHsgLy8gbGF5ZXIgSQorICAgICAgICBzdGF0aWMgY29uc3QgaW50IGtCaXRyYXRlVjFbXSA9CisgICAgICAgIHsKKyAgICAgICAgICAgIDMyLCA2NCwgOTYsIDEyOCwgMTYwLCAxOTIsIDIyNCwgMjU2LCAyODgsIDMyMCwgMzUyLCAzODQsIDQxNiwgNDQ4CisgICAgICAgIH07CisgICAgICAgIHN0YXRpYyBjb25zdCBpbnQga0JpdHJhdGVWMltdID0KKyAgICAgICAgeworICAgICAgICAgICAgMzIsIDQ4LCA1NiwgNjQsIDgwLCA5NiwgMTEyLCAxMjgsIDE0NCwgMTYwLCAxNzYsIDE5MiwgMjI0LCAyNTYKKyAgICAgICAgfTsKKworICAgICAgICBpbnQgYml0cmF0ZSA9ICh2ZXJzaW9uID09IDMgLyogVjEgKi8pID8ga0JpdHJhdGVWMVtiaXRyYXRlX2luZGV4IC0gMV0gOgorICAgICAgICAgICAgICAgIGtCaXRyYXRlVjJbYml0cmF0ZV9pbmRleCAtIDFdOworCisgICAgICAgIGlmIChvdXRfYml0cmF0ZSkgeworICAgICAgICAgICAgKm91dF9iaXRyYXRlID0gYml0cmF0ZTsKKyAgICAgICAgfQorICAgICAgICAqZnJhbWVfc2l6ZSA9ICgxMjAwMCAqIGJpdHJhdGUgLyBzYW1wbGluZ19yYXRlICsgcGFkZGluZykgKiA0OworICAgICAgICBpZiAob3V0X251bV9zYW1wbGVzKSB7CisgICAgICAgICAgICAqb3V0X251bV9zYW1wbGVzID0gMzg0OworICAgICAgICB9CisgICAgfSBlbHNlIHsgLy8gbGF5ZXIgSUkgb3IgSUlJCisgICAgICAgIHN0YXRpYyBjb25zdCBpbnQga0JpdHJhdGVWMUwyW10gPQorICAgICAgICB7CisgICAgICAgICAgICAzMiwgNDgsIDU2LCA2NCwgODAsIDk2LCAxMTIsIDEyOCwgMTYwLCAxOTIsIDIyNCwgMjU2LCAzMjAsIDM4NAorICAgICAgICB9OworCisgICAgICAgIHN0YXRpYyBjb25zdCBpbnQga0JpdHJhdGVWMUwzW10gPQorICAgICAgICB7CisgICAgICAgICAgICAzMiwgNDAsIDQ4LCA1NiwgNjQsIDgwLCA5NiwgMTEyLCAxMjgsIDE2MCwgMTkyLCAyMjQsIDI1NiwgMzIwCisgICAgICAgIH07CisKKyAgICAgICAgc3RhdGljIGNvbnN0IGludCBrQml0cmF0ZVYyW10gPQorICAgICAgICB7CisgICAgICAgICAgICA4LCAxNiwgMjQsIDMyLCA0MCwgNDgsIDU2LCA2NCwgODAsIDk2LCAxMTIsIDEyOCwgMTQ0LCAxNjAKKyAgICAgICAgfTsKKworICAgICAgICBpbnQgYml0cmF0ZTsKKyAgICAgICAgaWYgKHZlcnNpb24gPT0gMyAvKiBWMSAqLykgeworICAgICAgICAgICAgYml0cmF0ZSA9IChsYXllciA9PSAyIC8qIEwyICovKSA/IGtCaXRyYXRlVjFMMltiaXRyYXRlX2luZGV4IC0gMV0gOgorICAgICAgICAgICAgICAgICAgICBrQml0cmF0ZVYxTDNbYml0cmF0ZV9pbmRleCAtIDFdOworCisgICAgICAgICAgICBpZiAob3V0X251bV9zYW1wbGVzKSB7CisgICAgICAgICAgICAgICAgKm91dF9udW1fc2FtcGxlcyA9IDExNTI7CisgICAgICAgICAgICB9CisgICAgICAgIH0gZWxzZSB7IC8vIFYyIChvciAyLjUpCisgICAgICAgICAgICBiaXRyYXRlID0ga0JpdHJhdGVWMltiaXRyYXRlX2luZGV4IC0gMV07CisgICAgICAgICAgICBpZiAob3V0X251bV9zYW1wbGVzKSB7CisgICAgICAgICAgICAgICAgKm91dF9udW1fc2FtcGxlcyA9IChsYXllciA9PSAxIC8qIEwzICovKSA/IDU3NiA6IDExNTI7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBpZiAob3V0X2JpdHJhdGUpIHsKKyAgICAgICAgICAgICpvdXRfYml0cmF0ZSA9IGJpdHJhdGU7CisgICAgICAgIH0KKworICAgICAgICBpZiAodmVyc2lvbiA9PSAzIC8qIFYxICovKSB7CisgICAgICAgICAgICAqZnJhbWVfc2l6ZSA9IDE0NDAwMCAqIGJpdHJhdGUgLyBzYW1wbGluZ19yYXRlICsgcGFkZGluZzsKKyAgICAgICAgfSBlbHNlIHsgLy8gVjIgb3IgVjIuNQorICAgICAgICAgICAgc2l6ZV90IHRtcCA9IChsYXllciA9PSAxIC8qIEwzICovKSA/IDcyMDAwIDogMTQ0MDAwOworICAgICAgICAgICAgKmZyYW1lX3NpemUgPSB0bXAgKiBiaXRyYXRlIC8gc2FtcGxpbmdfcmF0ZSArIHBhZGRpbmc7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBpZiAob3V0X3NhbXBsaW5nX3JhdGUpIHsKKyAgICAgICAgKm91dF9zYW1wbGluZ19yYXRlID0gc2FtcGxpbmdfcmF0ZTsKKyAgICB9CisKKyAgICBpZiAob3V0X2NoYW5uZWxzKSB7CisgICAgICAgIGludCBjaGFubmVsX21vZGUgPSAoaGVhZGVyID4+IDYpICYgMzsKKworICAgICAgICAqb3V0X2NoYW5uZWxzID0gKGNoYW5uZWxfbW9kZSA9PSAzKSA/IDEgOiAyOworICAgIH0KKworICAgIHJldHVybiB0cnVlOworfQorCitzdGF0aWMgdWludDMyX3QgVTMyX0FUKGNvbnN0IHVpbnQ4X3QgKnB0cikgeworICAgIHJldHVybiBwdHJbMF0gPDwgMjQgfCBwdHJbMV0gPDwgMTYgfCBwdHJbMl0gPDwgOCB8IHB0clszXTsKK30KKworc3RhdGljIHN0YXR1c190IGNhbGN1bGF0ZU91dFNpemUodWludDggKmhlYWRlciwgc2l6ZV90IGluU2l6ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZDo6dmVjdG9yPHNpemVfdD4gKmRlY29kZWRTaXplcykgeworICAgIHVpbnQzMl90IGNoYW5uZWxzOworICAgIHVpbnQzMl90IG51bVNhbXBsZXM7CisgICAgc2l6ZV90IGZyYW1lU2l6ZTsKKyAgICBzaXplX3QgdG90YWxJblNpemUgPSAwOworCisgICAgd2hpbGUgKHRvdGFsSW5TaXplICsgNCA8IGluU2l6ZSkgeworICAgICAgICBpZiAoIXBhcnNlTXAzSGVhZGVyKFUzMl9BVChoZWFkZXIgKyB0b3RhbEluU2l6ZSksICZmcmFtZVNpemUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnVsbHB0ciwgJmNoYW5uZWxzLCBudWxscHRyLCAmbnVtU2FtcGxlcykpIHsKKyAgICAgICAgICAgIEFMT0dFKCJFcnJvciBpbiBwYXJzZSBtcDMgaGVhZGVyIGR1cmluZyBvdXRTaXplIGVzdGltYXRpb24iKTsKKyAgICAgICAgICAgIHJldHVybiBVTktOT1dOX0VSUk9SOworICAgICAgICB9CisgICAgICAgIHRvdGFsSW5TaXplICs9IGZyYW1lU2l6ZTsKKyAgICAgICAgZGVjb2RlZFNpemVzLT5wdXNoX2JhY2sobnVtU2FtcGxlcyAqIGNoYW5uZWxzICogc2l6ZW9mKGludDE2X3QpKTsKKyAgICB9CisKKyAgICBpZiAoZGVjb2RlZFNpemVzLT5lbXB0eSgpKSByZXR1cm4gVU5LTk9XTl9FUlJPUjsKKworICAgIHJldHVybiBPSzsKK30KKworYzJfc3RhdHVzX3QgQzJTb2Z0TVAzOjpvbkZsdXNoX3NtKCkgeworICAgIHJldHVybiBvblN0b3AoKTsKK30KKworYzJfc3RhdHVzX3QgQzJTb2Z0TVAzOjpkcmFpbigKKyAgICAgICAgdWludDMyX3QgZHJhaW5Nb2RlLAorICAgICAgICBjb25zdCBzdGQ6OnNoYXJlZF9wdHI8QzJCbG9ja1Bvb2w+ICZwb29sKSB7CisgICAgKHZvaWQpIHBvb2w7CisgICAgaWYgKGRyYWluTW9kZSA9PSBOT19EUkFJTikgeworICAgICAgICBBTE9HVygiZHJhaW4gd2l0aCBOT19EUkFJTjogbm8tb3AiKTsKKyAgICAgICAgcmV0dXJuIEMyX09LOworICAgIH0KKyAgICBpZiAoZHJhaW5Nb2RlID09IERSQUlOX0NIQUlOKSB7CisgICAgICAgIEFMT0dXKCJEUkFJTl9DSEFJTiBub3Qgc3VwcG9ydGVkIik7CisgICAgICAgIHJldHVybiBDMl9PTUlUVEVEOworICAgIH0KKworICAgIHJldHVybiBDMl9PSzsKK30KKworLy8gVE9ETzogQ2FuIG92ZXJhbGwgZXJyb3IgY2hlY2tpbmcgYmUgaW1wcm92ZWQ/IEFzIGluIHRoZSBjaGVjayBmb3IgdmFsaWRpdHkgb2YKKy8vICAgICAgIHdvcmssIHBvb2wgcHRyLCB3b3JrLT5pbnB1dC5idWZmZXJzLnNpemUoKSA9PSAxLCAuLi4KKy8vIFRPRE86IEJsaW5kIHJlbW92YWwgb2YgNTI5IHNhbXBsZXMgZnJvbSB0aGUgb3V0cHV0IG1heSBub3Qgd29yay4gQmVjYXVzZQorLy8gICAgICAgbXBlZyBsYXllciAxIGZyYW1lIHNpemUgaXMgMzg0IHNhbXBsZXMgcGVyIGZyYW1lLiBUaGlzIHNob3VsZCBpbnRyb2R1Y2UKKy8vICAgICAgIG5lZ2F0aXZlIHZhbHVlcyBhbmQgY2FuIGNhdXNlIFNFRyBmYXVsdHMuIFNvZnQgb214IG1wMyBwbHVnaW4gY2FuIGhhdmUKKy8vICAgICAgIHRoaXMgcHJvYmxlbSAoQ0hFQ0shKQordm9pZCBDMlNvZnRNUDM6OnByb2Nlc3MoCisgICAgICAgIGNvbnN0IHN0ZDo6dW5pcXVlX3B0cjxDMldvcms+ICZ3b3JrLAorICAgICAgICBjb25zdCBzdGQ6OnNoYXJlZF9wdHI8QzJCbG9ja1Bvb2w+ICZwb29sKSB7CisgICAgLy8gSW5pdGlhbGl6ZSBvdXRwdXQgd29yaworICAgIHdvcmstPnJlc3VsdCA9IEMyX09LOworICAgIHdvcmstPndvcmtsZXRzUHJvY2Vzc2VkID0gMXU7CisgICAgd29yay0+d29ya2xldHMuZnJvbnQoKS0+b3V0cHV0LmNvbmZpZ1VwZGF0ZS5jbGVhcigpOworICAgIHdvcmstPndvcmtsZXRzLmZyb250KCktPm91dHB1dC5mbGFncyA9IHdvcmstPmlucHV0LmZsYWdzOworCisgICAgaWYgKG1TaWduYWxsZWRFcnJvciB8fCBtU2lnbmFsbGVkT3V0cHV0RW9zKSB7CisgICAgICAgIHdvcmstPnJlc3VsdCA9IEMyX0JBRF9WQUxVRTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGJvb2wgZW9zID0gKCh3b3JrLT5pbnB1dC5mbGFncyAmIEMyRnJhbWVEYXRhOjpGTEFHX0VORF9PRl9TVFJFQU0pICE9IDApOworICAgIHNpemVfdCBpblNpemUgPSAwdTsKKyAgICBDMlJlYWRWaWV3IHJWaWV3ID0gbUR1bW15UmVhZFZpZXc7CisgICAgaWYgKCF3b3JrLT5pbnB1dC5idWZmZXJzLmVtcHR5KCkpIHsKKyAgICAgICAgclZpZXcgPSB3b3JrLT5pbnB1dC5idWZmZXJzWzBdLT5kYXRhKCkubGluZWFyQmxvY2tzKCkuZnJvbnQoKS5tYXAoKS5nZXQoKTsKKyAgICAgICAgaW5TaXplID0gclZpZXcuY2FwYWNpdHkoKTsKKyAgICAgICAgaWYgKGluU2l6ZSAmJiByVmlldy5lcnJvcigpKSB7CisgICAgICAgICAgICBBTE9HRSgicmVhZCB2aWV3IG1hcCBmYWlsZWQgJWQiLCByVmlldy5lcnJvcigpKTsKKyAgICAgICAgICAgIHdvcmstPnJlc3VsdCA9IHJWaWV3LmVycm9yKCk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICB9CisKKyAgICBpZiAoaW5TaXplID09IDAgJiYgKCFtR2FwbGVzc0J5dGVzIHx8ICFlb3MpKSB7CisgICAgICAgIHdvcmstPndvcmtsZXRzLmZyb250KCktPm91dHB1dC5mbGFncyA9IHdvcmstPmlucHV0LmZsYWdzOworICAgICAgICB3b3JrLT53b3JrbGV0cy5mcm9udCgpLT5vdXRwdXQuYnVmZmVycy5jbGVhcigpOworICAgICAgICB3b3JrLT53b3JrbGV0cy5mcm9udCgpLT5vdXRwdXQub3JkaW5hbCA9IHdvcmstPmlucHV0Lm9yZGluYWw7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgQUxPR1YoImluIGJ1ZmZlciBhdHRyLiBzaXplICV6dSB0aW1lc3RhbXAgJWQgZnJhbWVpbmRleCAlZCIsIGluU2l6ZSwKKyAgICAgICAgICAoaW50KXdvcmstPmlucHV0Lm9yZGluYWwudGltZXN0YW1wLnBlZWt1KCksIChpbnQpd29yay0+aW5wdXQub3JkaW5hbC5mcmFtZUluZGV4LnBlZWt1KCkpOworCisgICAgaW50MzJfdCBudW1DaGFubmVscyA9IG1Db25maWctPm51bV9jaGFubmVsczsKKyAgICBzaXplX3QgY2FsT3V0U2l6ZTsKKyAgICBzdGQ6OnZlY3RvcjxzaXplX3Q+IGRlY29kZWRTaXplczsKKyAgICBpZiAoaW5TaXplICYmIE9LICE9IGNhbGN1bGF0ZU91dFNpemUoY29uc3RfY2FzdDx1aW50OCAqPihyVmlldy5kYXRhKCkpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpblNpemUsICZkZWNvZGVkU2l6ZXMpKSB7CisgICAgICAgIHdvcmstPnJlc3VsdCA9IEMyX0NPUlJVUFRFRDsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBjYWxPdXRTaXplID0gc3RkOjphY2N1bXVsYXRlKGRlY29kZWRTaXplcy5iZWdpbigpLCBkZWNvZGVkU2l6ZXMuZW5kKCksIDApOworICAgIGlmIChlb3MpIHsKKyAgICAgICAgY2FsT3V0U2l6ZSArPSBrUFZNUDNEZWNvZGVyRGVsYXkgKiBudW1DaGFubmVscyAqIHNpemVvZihpbnQxNl90KTsKKyAgICB9CisKKyAgICBzdGQ6OnNoYXJlZF9wdHI8QzJMaW5lYXJCbG9jaz4gYmxvY2s7CisgICAgQzJNZW1vcnlVc2FnZSB1c2FnZSA9IHsgQzJNZW1vcnlVc2FnZTo6Q1BVX1JFQUQsIEMyTWVtb3J5VXNhZ2U6OkNQVV9XUklURSB9OworICAgIGMyX3N0YXR1c190IGVyciA9IHBvb2wtPmZldGNoTGluZWFyQmxvY2soY2FsT3V0U2l6ZSwgdXNhZ2UsICZibG9jayk7CisgICAgaWYgKGVyciAhPSBDMl9PSykgeworICAgICAgICBBTE9HRSgiZmV0Y2hMaW5lYXJCbG9jayBmb3IgT3V0cHV0IGZhaWxlZCB3aXRoIHN0YXR1cyAlZCIsIGVycik7CisgICAgICAgIHdvcmstPnJlc3VsdCA9IEMyX05PX01FTU9SWTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBDMldyaXRlVmlldyB3VmlldyA9IGJsb2NrLT5tYXAoKS5nZXQoKTsKKyAgICBpZiAod1ZpZXcuZXJyb3IoKSkgeworICAgICAgICBBTE9HRSgid3JpdGUgdmlldyBtYXAgZmFpbGVkICVkIiwgd1ZpZXcuZXJyb3IoKSk7CisgICAgICAgIHdvcmstPnJlc3VsdCA9IHdWaWV3LmVycm9yKCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpbnQgb3V0U2l6ZSA9IDA7CisgICAgaW50IG91dE9mZnNldCA9IDA7CisgICAgYXV0byBpdCA9IGRlY29kZWRTaXplcy5iZWdpbigpOworICAgIHNpemVfdCBpblBvcyA9IDA7CisgICAgaW50MzJfdCBzYW1wbGluZ1JhdGUgPSBtQ29uZmlnLT5zYW1wbGluZ1JhdGU7CisgICAgd2hpbGUgKGluUG9zIDwgaW5TaXplKSB7CisgICAgICAgIGlmIChpdCA9PSBkZWNvZGVkU2l6ZXMuZW5kKCkpIHsKKyAgICAgICAgICAgIEFMT0dFKCJ1bmV4cGVjdGVkIHRyYWlsaW5nIGJ5dGVzLCBpZ25vcmluZyB0aGVtIik7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgIG1Db25maWctPnBJbnB1dEJ1ZmZlciA9IGNvbnN0X2Nhc3Q8dWludDggKj4oclZpZXcuZGF0YSgpICsgaW5Qb3MpOworICAgICAgICBtQ29uZmlnLT5pbnB1dEJ1ZmZlckN1cnJlbnRMZW5ndGggPSAoaW5TaXplIC0gaW5Qb3MpOworICAgICAgICBtQ29uZmlnLT5pbnB1dEJ1ZmZlck1heExlbmd0aCA9IDA7CisgICAgICAgIG1Db25maWctPmlucHV0QnVmZmVyVXNlZExlbmd0aCA9IDA7CisgICAgICAgIG1Db25maWctPm91dHB1dEZyYW1lU2l6ZSA9IChjYWxPdXRTaXplIC0gb3V0U2l6ZSk7CisgICAgICAgIG1Db25maWctPnBPdXRwdXRCdWZmZXIgPSByZWludGVycHJldF9jYXN0PGludDE2X3QgKj4gKHdWaWV3LmRhdGEoKSArIG91dFNpemUpOworCisgICAgICAgIEVSUk9SX0NPREUgZGVjb2RlckVycjsKKyAgICAgICAgaWYgKChkZWNvZGVyRXJyID0gcHZtcDNfZnJhbWVkZWNvZGVyKG1Db25maWcsIG1EZWNvZGVyQnVmKSkKKyAgICAgICAgICAgICAgICAhPSBOT19ERUNPRElOR19FUlJPUikgeworICAgICAgICAgICAgQUxPR0UoIm1wMyBkZWNvZGVyIHJldHVybmVkIGVycm9yICVkIiwgZGVjb2RlckVycik7CisgICAgICAgICAgICBpZiAoZGVjb2RlckVyciAhPSBOT19FTk9VR0hfTUFJTl9EQVRBX0VSUk9SCisgICAgICAgICAgICAgICAgICAgICYmIGRlY29kZXJFcnIgIT0gU0lERV9JTkZPX0VSUk9SKSB7CisgICAgICAgICAgICAgICAgbVNpZ25hbGxlZEVycm9yID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICB3b3JrLT5yZXN1bHQgPSBDMl9DT1JSVVBURUQ7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICAvLyBUaGlzIGlzIHJlY292ZXJhYmxlLCBqdXN0IGlnbm9yZSB0aGUgY3VycmVudCBmcmFtZSBhbmQKKyAgICAgICAgICAgIC8vIHBsYXkgc2lsZW5jZSBpbnN0ZWFkLgorICAgICAgICAgICAgQUxPR1YoImlnbm9yaW5nIGVycm9yIGFuZCBzZW5kaW5nIHNpbGVuY2UiKTsKKyAgICAgICAgICAgIGlmIChtQ29uZmlnLT5vdXRwdXRGcmFtZVNpemUgPT0gMCkgeworICAgICAgICAgICAgICAgIG1Db25maWctPm91dHB1dEZyYW1lU2l6ZSA9ICppdCAvIHNpemVvZihpbnQxNl90KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIG1lbXNldChtQ29uZmlnLT5wT3V0cHV0QnVmZmVyLCAwLCBtQ29uZmlnLT5vdXRwdXRGcmFtZVNpemUgKiBzaXplb2YoaW50MTZfdCkpOworICAgICAgICB9IGVsc2UgaWYgKG1Db25maWctPnNhbXBsaW5nUmF0ZSAhPSBzYW1wbGluZ1JhdGUKKyAgICAgICAgICAgICAgICB8fCBtQ29uZmlnLT5udW1fY2hhbm5lbHMgIT0gbnVtQ2hhbm5lbHMpIHsKKyAgICAgICAgICAgIEFMT0dJKCJSZWNvbmZpZ3VyaW5nIGRlY29kZXI6ICVkLT4lZCBIeiwgJWQtPiVkIGNoYW5uZWxzIiwKKyAgICAgICAgICAgICAgICAgICBzYW1wbGluZ1JhdGUsIG1Db25maWctPnNhbXBsaW5nUmF0ZSwKKyAgICAgICAgICAgICAgICAgICBudW1DaGFubmVscywgbUNvbmZpZy0+bnVtX2NoYW5uZWxzKTsKKyAgICAgICAgICAgIHNhbXBsaW5nUmF0ZSA9IG1Db25maWctPnNhbXBsaW5nUmF0ZTsKKyAgICAgICAgICAgIG51bUNoYW5uZWxzID0gbUNvbmZpZy0+bnVtX2NoYW5uZWxzOworCisgICAgICAgICAgICBDMlN0cmVhbVNhbXBsZVJhdGVJbmZvOjpvdXRwdXQgc2FtcGxlUmF0ZUluZm8oMHUsIHNhbXBsaW5nUmF0ZSk7CisgICAgICAgICAgICBDMlN0cmVhbUNoYW5uZWxDb3VudEluZm86Om91dHB1dCBjaGFubmVsQ291bnRJbmZvKDB1LCBudW1DaGFubmVscyk7CisgICAgICAgICAgICBzdGQ6OnZlY3RvcjxzdGQ6OnVuaXF1ZV9wdHI8QzJTZXR0aW5nUmVzdWx0Pj4gZmFpbHVyZXM7CisgICAgICAgICAgICBjMl9zdGF0dXNfdCBlcnIgPSBtSW50Zi0+Y29uZmlnKAorICAgICAgICAgICAgICAgICAgICB7ICZzYW1wbGVSYXRlSW5mbywgJmNoYW5uZWxDb3VudEluZm8gfSwKKyAgICAgICAgICAgICAgICAgICAgQzJfTUFZX0JMT0NLLAorICAgICAgICAgICAgICAgICAgICAmZmFpbHVyZXMpOworICAgICAgICAgICAgaWYgKGVyciA9PSBPSykgeworICAgICAgICAgICAgICAgIHdvcmstPndvcmtsZXRzLmZyb250KCktPm91dHB1dC5jb25maWdVcGRhdGUucHVzaF9iYWNrKEMyUGFyYW06OkNvcHkoc2FtcGxlUmF0ZUluZm8pKTsKKyAgICAgICAgICAgICAgICB3b3JrLT53b3JrbGV0cy5mcm9udCgpLT5vdXRwdXQuY29uZmlnVXBkYXRlLnB1c2hfYmFjayhDMlBhcmFtOjpDb3B5KGNoYW5uZWxDb3VudEluZm8pKTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgQUxPR0UoIkNvbmZpZyBVcGRhdGUgZmFpbGVkIik7CisgICAgICAgICAgICAgICAgbVNpZ25hbGxlZEVycm9yID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICB3b3JrLT5yZXN1bHQgPSBDMl9DT1JSVVBURUQ7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGlmICgqaXQgIT0gbUNvbmZpZy0+b3V0cHV0RnJhbWVTaXplICogc2l6ZW9mKGludDE2X3QpKSB7CisgICAgICAgICAgICBBTE9HRSgicGFuaWMsIHBhcnNlZCBzaXplIGRvZXMgbm90IG1hdGNoIGRlY29kZWQgc2l6ZSIpOworICAgICAgICAgICAgbVNpZ25hbGxlZEVycm9yID0gdHJ1ZTsKKyAgICAgICAgICAgIHdvcmstPnJlc3VsdCA9IEMyX0NPUlJVUFRFRDsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICBvdXRTaXplICs9IG1Db25maWctPm91dHB1dEZyYW1lU2l6ZSAqIHNpemVvZihpbnQxNl90KTsKKyAgICAgICAgaW5Qb3MgKz0gbUNvbmZpZy0+aW5wdXRCdWZmZXJVc2VkTGVuZ3RoOworICAgICAgICBpdCsrOworICAgIH0KKyAgICBpZiAobUlzRmlyc3QpIHsKKyAgICAgICAgbUlzRmlyc3QgPSBmYWxzZTsKKyAgICAgICAgbUdhcGxlc3NCeXRlcyA9IHRydWU7CisgICAgICAgIC8vIFRoZSBkZWNvZGVyIGRlbGF5IGlzIDUyOSBzYW1wbGVzLCBzbyB0cmltIHRoYXQgbWFueSBzYW1wbGVzIG9mZgorICAgICAgICAvLyB0aGUgc3RhcnQgb2YgdGhlIGZpcnN0IG91dHB1dCBidWZmZXIuIFRoaXMgZXNzZW50aWFsbHkgbWFrZXMgdGhpcworICAgICAgICAvLyBkZWNvZGVyIGhhdmUgemVybyBkZWxheSwgd2hpY2ggdGhlIHJlc3Qgb2YgdGhlIHBpcGVsaW5lIGFzc3VtZXMuCisgICAgICAgIG91dE9mZnNldCA9IGtQVk1QM0RlY29kZXJEZWxheSAqIG51bUNoYW5uZWxzICogc2l6ZW9mKGludDE2X3QpOworICAgICAgICBtQW5jaG9yVGltZVN0YW1wID0gd29yay0+aW5wdXQub3JkaW5hbC50aW1lc3RhbXAucGVla3VsbCgpOworICAgIH0KKyAgICBpZiAoZW9zKSB7CisgICAgICAgIGlmIChjYWxPdXRTaXplID49CisgICAgICAgICAgICBvdXRTaXplICsga1BWTVAzRGVjb2RlckRlbGF5ICogbnVtQ2hhbm5lbHMgKiBzaXplb2YoaW50MTZfdCkpIHsKKyAgICAgICAgICAgIGlmICghbWVtc2V0KHJlaW50ZXJwcmV0X2Nhc3Q8aW50MTZfdCo+KHdWaWV3LmRhdGEoKSArIG91dFNpemUpLCAwLAorICAgICAgICAgICAgICAgICAgICAgICAga1BWTVAzRGVjb2RlckRlbGF5ICogbnVtQ2hhbm5lbHMgKiBzaXplb2YoaW50MTZfdCkpKSB7CisgICAgICAgICAgICAgICAgbVNpZ25hbGxlZEVycm9yID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICB3b3JrLT5yZXN1bHQgPSBDMl9DT1JSVVBURUQ7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIEFMT0dWKCJBZGRpbmcgNTI5IHNhbXBsZXMgYXQgZW5kIik7CisgICAgICAgICAgICBtR2FwbGVzc0J5dGVzID0gZmFsc2U7CisgICAgICAgICAgICBvdXRTaXplICs9IGtQVk1QM0RlY29kZXJEZWxheSAqIG51bUNoYW5uZWxzICogc2l6ZW9mKGludDE2X3QpOworICAgICAgICB9CisgICAgfQorCisgICAgdWludDY0X3Qgb3V0VGltZVN0YW1wID0gbVByb2Nlc3NlZFNhbXBsZXMgKiAxMDAwMDAwbGwgLyBzYW1wbGluZ1JhdGU7CisgICAgbVByb2Nlc3NlZFNhbXBsZXMgKz0gKChvdXRTaXplIC0gb3V0T2Zmc2V0KSAvIChudW1DaGFubmVscyAqIHNpemVvZihpbnQxNl90KSkpOworICAgIEFMT0dWKCJvdXQgYnVmZmVyIGF0dHIuIG9mZnNldCAlZCBzaXplICVkIHRpbWVzdGFtcCAldSIsIG91dE9mZnNldCwgb3V0U2l6ZSAtIG91dE9mZnNldCwKKyAgICAgICAgICAodWludDMyX3QpKG1BbmNob3JUaW1lU3RhbXAgKyBvdXRUaW1lU3RhbXApKTsKKyAgICBkZWNvZGVkU2l6ZXMuY2xlYXIoKTsKKyAgICB3b3JrLT53b3JrbGV0cy5mcm9udCgpLT5vdXRwdXQuZmxhZ3MgPSB3b3JrLT5pbnB1dC5mbGFnczsKKyAgICB3b3JrLT53b3JrbGV0cy5mcm9udCgpLT5vdXRwdXQuYnVmZmVycy5jbGVhcigpOworICAgIHdvcmstPndvcmtsZXRzLmZyb250KCktPm91dHB1dC5idWZmZXJzLnB1c2hfYmFjaygKKyAgICAgICAgICAgIGNyZWF0ZUxpbmVhckJ1ZmZlcihibG9jaywgb3V0T2Zmc2V0LCBvdXRTaXplIC0gb3V0T2Zmc2V0KSk7CisgICAgd29yay0+d29ya2xldHMuZnJvbnQoKS0+b3V0cHV0Lm9yZGluYWwgPSB3b3JrLT5pbnB1dC5vcmRpbmFsOworICAgIHdvcmstPndvcmtsZXRzLmZyb250KCktPm91dHB1dC5vcmRpbmFsLnRpbWVzdGFtcCA9IG1BbmNob3JUaW1lU3RhbXAgKyBvdXRUaW1lU3RhbXA7CisgICAgaWYgKGVvcykgeworICAgICAgICBtU2lnbmFsbGVkT3V0cHV0RW9zID0gdHJ1ZTsKKyAgICAgICAgQUxPR1YoInNpZ25hbGxlZCBFT1MiKTsKKyAgICB9Cit9CisKK2NsYXNzIEMyU29mdE1wM0RlY0ZhY3RvcnkgOiBwdWJsaWMgQzJDb21wb25lbnRGYWN0b3J5IHsKK3B1YmxpYzoKKyAgICBDMlNvZnRNcDNEZWNGYWN0b3J5KCkgOiBtSGVscGVyKHN0ZDo6c3RhdGljX3BvaW50ZXJfY2FzdDxDMlJlZmxlY3RvckhlbHBlcj4oCisgICAgICAgICAgICBHZXRDb2RlYzJQbGF0Zm9ybUNvbXBvbmVudFN0b3JlKCktPmdldFBhcmFtUmVmbGVjdG9yKCkpKSB7CisgICAgfQorCisgICAgdmlydHVhbCBjMl9zdGF0dXNfdCBjcmVhdGVDb21wb25lbnQoCisgICAgICAgICAgICBjMl9ub2RlX2lkX3QgaWQsCisgICAgICAgICAgICBzdGQ6OnNoYXJlZF9wdHI8QzJDb21wb25lbnQ+KiBjb25zdCBjb21wb25lbnQsCisgICAgICAgICAgICBzdGQ6OmZ1bmN0aW9uPHZvaWQoQzJDb21wb25lbnQqKT4gZGVsZXRlcikgb3ZlcnJpZGUgeworICAgICAgICAqY29tcG9uZW50ID0gc3RkOjpzaGFyZWRfcHRyPEMyQ29tcG9uZW50PigKKyAgICAgICAgICAgICAgbmV3IEMyU29mdE1QMyhDT01QT05FTlRfTkFNRSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGQ6Om1ha2Vfc2hhcmVkPEMyU29mdE1QMzo6SW50ZkltcGw+KG1IZWxwZXIpKSwKKyAgICAgICAgICAgICAgZGVsZXRlcik7CisgICAgICAgIHJldHVybiBDMl9PSzsKKyAgICB9CisKKyAgICB2aXJ0dWFsIGMyX3N0YXR1c190IGNyZWF0ZUludGVyZmFjZSgKKyAgICAgICAgICAgIGMyX25vZGVfaWRfdCBpZCwKKyAgICAgICAgICAgIHN0ZDo6c2hhcmVkX3B0cjxDMkNvbXBvbmVudEludGVyZmFjZT4qIGNvbnN0IGludGVyZmFjZSwKKyAgICAgICAgICAgIHN0ZDo6ZnVuY3Rpb248dm9pZChDMkNvbXBvbmVudEludGVyZmFjZSopPiBkZWxldGVyKSBvdmVycmlkZSB7CisgICAgICAgICppbnRlcmZhY2UgPSBzdGQ6OnNoYXJlZF9wdHI8QzJDb21wb25lbnRJbnRlcmZhY2U+KAorICAgICAgICAgICAgICBuZXcgU2ltcGxlSW50ZXJmYWNlPEMyU29mdE1QMzo6SW50ZkltcGw+KAorICAgICAgICAgICAgICAgICAgICAgIENPTVBPTkVOVF9OQU1FLCBpZCwgc3RkOjptYWtlX3NoYXJlZDxDMlNvZnRNUDM6OkludGZJbXBsPihtSGVscGVyKSksCisgICAgICAgICAgICAgIGRlbGV0ZXIpOworICAgICAgICByZXR1cm4gQzJfT0s7CisgICAgfQorCisgICAgdmlydHVhbCB+QzJTb2Z0TXAzRGVjRmFjdG9yeSgpIG92ZXJyaWRlID0gZGVmYXVsdDsKKworcHJpdmF0ZToKKyAgICBzdGQ6OnNoYXJlZF9wdHI8QzJSZWZsZWN0b3JIZWxwZXI+IG1IZWxwZXI7Cit9OworCit9ICAvLyBuYW1lc3BhY2UgYW5kcm9pZAorCitleHRlcm4gIkMiIDo6QzJDb21wb25lbnRGYWN0b3J5KiBDcmVhdGVDb2RlYzJGYWN0b3J5KCkgeworICAgIEFMT0dWKCJpbiAlcyIsIF9fZnVuY19fKTsKKyAgICByZXR1cm4gbmV3IDo6YW5kcm9pZDo6QzJTb2Z0TXAzRGVjRmFjdG9yeSgpOworfQorCitleHRlcm4gIkMiIHZvaWQgRGVzdHJveUNvZGVjMkZhY3RvcnkoOjpDMkNvbXBvbmVudEZhY3RvcnkqIGZhY3RvcnkpIHsKKyAgICBBTE9HVigiaW4gJXMiLCBfX2Z1bmNfXyk7CisgICAgZGVsZXRlIGZhY3Rvcnk7Cit9CisKZGlmZiAtLWdpdCBhL21lZGlhL2NvZGVjMi9jb21wb25lbnRzL21wMy9DMlNvZnRNcDNEZWMuaCBiL21lZGlhL2NvZGVjMi9jb21wb25lbnRzL21wMy9DMlNvZnRNcDNEZWMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MDJiZGM0Ci0tLSAvZGV2L251bGwKKysrIGIvbWVkaWEvY29kZWMyL2NvbXBvbmVudHMvbXAzL0MyU29mdE1wM0RlYy5oCkBAIC0wLDAgKzEsNzYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTggVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworCisjaWZuZGVmIEFORFJPSURfQzJfU09GVF9NUDNfREVDX0hfCisjZGVmaW5lIEFORFJPSURfQzJfU09GVF9NUDNfREVDX0hfCisKKyNpbmNsdWRlIDxTaW1wbGVDMkNvbXBvbmVudC5oPgorCisKK3N0cnVjdCB0UFZNUDNEZWNvZGVyRXh0ZXJuYWw7CisKK2Jvb2wgcGFyc2VNcDNIZWFkZXIodWludDMyX3QgaGVhZGVyLCBzaXplX3QgKmZyYW1lX3NpemUsCisgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90ICpvdXRfc2FtcGxpbmdfcmF0ZSA9IG51bGxwdHIsCisgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90ICpvdXRfY2hhbm5lbHMgPSBudWxscHRyLAorICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCAqb3V0X2JpdHJhdGUgPSBudWxscHRyLAorICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCAqb3V0X251bV9zYW1wbGVzID0gbnVsbHB0cik7CisKK25hbWVzcGFjZSBhbmRyb2lkIHsKKworc3RydWN0IEMyU29mdE1QMyA6IHB1YmxpYyBTaW1wbGVDMkNvbXBvbmVudCB7CisgICAgY2xhc3MgSW50ZkltcGw7CisKKyAgICBDMlNvZnRNUDMoY29uc3QgY2hhciAqbmFtZSwgYzJfbm9kZV9pZF90IGlkLAorICAgICAgICAgICAgICBjb25zdCBzdGQ6OnNoYXJlZF9wdHI8SW50ZkltcGw+ICZpbnRmSW1wbCk7CisgICAgdmlydHVhbCB+QzJTb2Z0TVAzKCk7CisKKyAgICAvLyBGcm9tIFNpbXBsZUMyQ29tcG9uZW50CisgICAgYzJfc3RhdHVzX3Qgb25Jbml0KCkgb3ZlcnJpZGU7CisgICAgYzJfc3RhdHVzX3Qgb25TdG9wKCkgb3ZlcnJpZGU7CisgICAgdm9pZCBvblJlc2V0KCkgb3ZlcnJpZGU7CisgICAgdm9pZCBvblJlbGVhc2UoKSBvdmVycmlkZTsKKyAgICBjMl9zdGF0dXNfdCBvbkZsdXNoX3NtKCkgb3ZlcnJpZGU7CisgICAgdm9pZCBwcm9jZXNzKAorICAgICAgICAgICAgY29uc3Qgc3RkOjp1bmlxdWVfcHRyPEMyV29yaz4gJndvcmssCisgICAgICAgICAgICBjb25zdCBzdGQ6OnNoYXJlZF9wdHI8QzJCbG9ja1Bvb2w+ICZwb29sKSBvdmVycmlkZTsKKyAgICBjMl9zdGF0dXNfdCBkcmFpbigKKyAgICAgICAgICAgIHVpbnQzMl90IGRyYWluTW9kZSwKKyAgICAgICAgICAgIGNvbnN0IHN0ZDo6c2hhcmVkX3B0cjxDMkJsb2NrUG9vbD4gJnBvb2wpIG92ZXJyaWRlOworCitwcml2YXRlOgorICAgIGVudW0geworICAgICAgICBrUFZNUDNEZWNvZGVyRGVsYXkgPSA1MjkgLy8gc2FtcGxlcworICAgIH07CisKKyAgICBzdGQ6OnNoYXJlZF9wdHI8SW50ZkltcGw+IG1JbnRmOworICAgIHRQVk1QM0RlY29kZXJFeHRlcm5hbCAqbUNvbmZpZzsKKyAgICB2b2lkICptRGVjb2RlckJ1ZjsKKworICAgIGJvb2wgbUlzRmlyc3Q7CisgICAgYm9vbCBtU2lnbmFsbGVkRXJyb3I7CisgICAgYm9vbCBtU2lnbmFsbGVkT3V0cHV0RW9zOworICAgIGJvb2wgbUdhcGxlc3NCeXRlczsKKyAgICB1aW50NjRfdCBtQW5jaG9yVGltZVN0YW1wOworICAgIHVpbnQ2NF90IG1Qcm9jZXNzZWRTYW1wbGVzOworCisgICAgc3RhdHVzX3QgaW5pdERlY29kZXIoKTsKKworICAgIEMyX0RPX05PVF9DT1BZKEMyU29mdE1QMyk7Cit9OworCit9ICAvLyBuYW1lc3BhY2UgYW5kcm9pZAorCisjZW5kaWYgIC8vIEFORFJPSURfQzJfU09GVF9NUDNfREVDX0hfCmRpZmYgLS1naXQgYS9tZWRpYS9jb2RlYzIvY29tcG9uZW50cy9tcDMvTU9EVUxFX0xJQ0VOU0VfQVBBQ0hFMiBiL21lZGlhL2NvZGVjMi9jb21wb25lbnRzL21wMy9NT0RVTEVfTElDRU5TRV9BUEFDSEUyCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU2OWRlMjkKLS0tIC9kZXYvbnVsbAorKysgYi9tZWRpYS9jb2RlYzIvY29tcG9uZW50cy9tcDMvTU9EVUxFX0xJQ0VOU0VfQVBBQ0hFMgpkaWZmIC0tZ2l0IGEvbWVkaWEvY29kZWMyL2NvbXBvbmVudHMvbXAzL05PVElDRSBiL21lZGlhL2NvZGVjMi9jb21wb25lbnRzL21wMy9OT1RJQ0UKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzViMWVmYQotLS0gL2Rldi9udWxsCisrKyBiL21lZGlhL2NvZGVjMi9jb21wb25lbnRzL21wMy9OT1RJQ0UKQEAgLTAsMCArMSwxOTAgQEAKKworICAgQ29weXJpZ2h0IChjKSAyMDA1LTIwMDgsIFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKworICAgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgICB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisKKyAgIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAgIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgICBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAgIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAgIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorCisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFwYWNoZSBMaWNlbnNlCisgICAgICAgICAgICAgICAgICAgICAgICAgICBWZXJzaW9uIDIuMCwgSmFudWFyeSAyMDA0CisgICAgICAgICAgICAgICAgICAgICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvCisKKyAgIFRFUk1TIEFORCBDT05ESVRJT05TIEZPUiBVU0UsIFJFUFJPRFVDVElPTiwgQU5EIERJU1RSSUJVVElPTgorCisgICAxLiBEZWZpbml0aW9ucy4KKworICAgICAgIkxpY2Vuc2UiIHNoYWxsIG1lYW4gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIGZvciB1c2UsIHJlcHJvZHVjdGlvbiwKKyAgICAgIGFuZCBkaXN0cmlidXRpb24gYXMgZGVmaW5lZCBieSBTZWN0aW9ucyAxIHRocm91Z2ggOSBvZiB0aGlzIGRvY3VtZW50LgorCisgICAgICAiTGljZW5zb3IiIHNoYWxsIG1lYW4gdGhlIGNvcHlyaWdodCBvd25lciBvciBlbnRpdHkgYXV0aG9yaXplZCBieQorICAgICAgdGhlIGNvcHlyaWdodCBvd25lciB0aGF0IGlzIGdyYW50aW5nIHRoZSBMaWNlbnNlLgorCisgICAgICAiTGVnYWwgRW50aXR5IiBzaGFsbCBtZWFuIHRoZSB1bmlvbiBvZiB0aGUgYWN0aW5nIGVudGl0eSBhbmQgYWxsCisgICAgICBvdGhlciBlbnRpdGllcyB0aGF0IGNvbnRyb2wsIGFyZSBjb250cm9sbGVkIGJ5LCBvciBhcmUgdW5kZXIgY29tbW9uCisgICAgICBjb250cm9sIHdpdGggdGhhdCBlbnRpdHkuIEZvciB0aGUgcHVycG9zZXMgb2YgdGhpcyBkZWZpbml0aW9uLAorICAgICAgImNvbnRyb2wiIG1lYW5zIChpKSB0aGUgcG93ZXIsIGRpcmVjdCBvciBpbmRpcmVjdCwgdG8gY2F1c2UgdGhlCisgICAgICBkaXJlY3Rpb24gb3IgbWFuYWdlbWVudCBvZiBzdWNoIGVudGl0eSwgd2hldGhlciBieSBjb250cmFjdCBvcgorICAgICAgb3RoZXJ3aXNlLCBvciAoaWkpIG93bmVyc2hpcCBvZiBmaWZ0eSBwZXJjZW50ICg1MCUpIG9yIG1vcmUgb2YgdGhlCisgICAgICBvdXRzdGFuZGluZyBzaGFyZXMsIG9yIChpaWkpIGJlbmVmaWNpYWwgb3duZXJzaGlwIG9mIHN1Y2ggZW50aXR5LgorCisgICAgICAiWW91IiAob3IgIllvdXIiKSBzaGFsbCBtZWFuIGFuIGluZGl2aWR1YWwgb3IgTGVnYWwgRW50aXR5CisgICAgICBleGVyY2lzaW5nIHBlcm1pc3Npb25zIGdyYW50ZWQgYnkgdGhpcyBMaWNlbnNlLgorCisgICAgICAiU291cmNlIiBmb3JtIHNoYWxsIG1lYW4gdGhlIHByZWZlcnJlZCBmb3JtIGZvciBtYWtpbmcgbW9kaWZpY2F0aW9ucywKKyAgICAgIGluY2x1ZGluZyBidXQgbm90IGxpbWl0ZWQgdG8gc29mdHdhcmUgc291cmNlIGNvZGUsIGRvY3VtZW50YXRpb24KKyAgICAgIHNvdXJjZSwgYW5kIGNvbmZpZ3VyYXRpb24gZmlsZXMuCisKKyAgICAgICJPYmplY3QiIGZvcm0gc2hhbGwgbWVhbiBhbnkgZm9ybSByZXN1bHRpbmcgZnJvbSBtZWNoYW5pY2FsCisgICAgICB0cmFuc2Zvcm1hdGlvbiBvciB0cmFuc2xhdGlvbiBvZiBhIFNvdXJjZSBmb3JtLCBpbmNsdWRpbmcgYnV0CisgICAgICBub3QgbGltaXRlZCB0byBjb21waWxlZCBvYmplY3QgY29kZSwgZ2VuZXJhdGVkIGRvY3VtZW50YXRpb24sCisgICAgICBhbmQgY29udmVyc2lvbnMgdG8gb3RoZXIgbWVkaWEgdHlwZXMuCisKKyAgICAgICJXb3JrIiBzaGFsbCBtZWFuIHRoZSB3b3JrIG9mIGF1dGhvcnNoaXAsIHdoZXRoZXIgaW4gU291cmNlIG9yCisgICAgICBPYmplY3QgZm9ybSwgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIExpY2Vuc2UsIGFzIGluZGljYXRlZCBieSBhCisgICAgICBjb3B5cmlnaHQgbm90aWNlIHRoYXQgaXMgaW5jbHVkZWQgaW4gb3IgYXR0YWNoZWQgdG8gdGhlIHdvcmsKKyAgICAgIChhbiBleGFtcGxlIGlzIHByb3ZpZGVkIGluIHRoZSBBcHBlbmRpeCBiZWxvdykuCisKKyAgICAgICJEZXJpdmF0aXZlIFdvcmtzIiBzaGFsbCBtZWFuIGFueSB3b3JrLCB3aGV0aGVyIGluIFNvdXJjZSBvciBPYmplY3QKKyAgICAgIGZvcm0sIHRoYXQgaXMgYmFzZWQgb24gKG9yIGRlcml2ZWQgZnJvbSkgdGhlIFdvcmsgYW5kIGZvciB3aGljaCB0aGUKKyAgICAgIGVkaXRvcmlhbCByZXZpc2lvbnMsIGFubm90YXRpb25zLCBlbGFib3JhdGlvbnMsIG9yIG90aGVyIG1vZGlmaWNhdGlvbnMKKyAgICAgIHJlcHJlc2VudCwgYXMgYSB3aG9sZSwgYW4gb3JpZ2luYWwgd29yayBvZiBhdXRob3JzaGlwLiBGb3IgdGhlIHB1cnBvc2VzCisgICAgICBvZiB0aGlzIExpY2Vuc2UsIERlcml2YXRpdmUgV29ya3Mgc2hhbGwgbm90IGluY2x1ZGUgd29ya3MgdGhhdCByZW1haW4KKyAgICAgIHNlcGFyYWJsZSBmcm9tLCBvciBtZXJlbHkgbGluayAob3IgYmluZCBieSBuYW1lKSB0byB0aGUgaW50ZXJmYWNlcyBvZiwKKyAgICAgIHRoZSBXb3JrIGFuZCBEZXJpdmF0aXZlIFdvcmtzIHRoZXJlb2YuCisKKyAgICAgICJDb250cmlidXRpb24iIHNoYWxsIG1lYW4gYW55IHdvcmsgb2YgYXV0aG9yc2hpcCwgaW5jbHVkaW5nCisgICAgICB0aGUgb3JpZ2luYWwgdmVyc2lvbiBvZiB0aGUgV29yayBhbmQgYW55IG1vZGlmaWNhdGlvbnMgb3IgYWRkaXRpb25zCisgICAgICB0byB0aGF0IFdvcmsgb3IgRGVyaXZhdGl2ZSBXb3JrcyB0aGVyZW9mLCB0aGF0IGlzIGludGVudGlvbmFsbHkKKyAgICAgIHN1Ym1pdHRlZCB0byBMaWNlbnNvciBmb3IgaW5jbHVzaW9uIGluIHRoZSBXb3JrIGJ5IHRoZSBjb3B5cmlnaHQgb3duZXIKKyAgICAgIG9yIGJ5IGFuIGluZGl2aWR1YWwgb3IgTGVnYWwgRW50aXR5IGF1dGhvcml6ZWQgdG8gc3VibWl0IG9uIGJlaGFsZiBvZgorICAgICAgdGhlIGNvcHlyaWdodCBvd25lci4gRm9yIHRoZSBwdXJwb3NlcyBvZiB0aGlzIGRlZmluaXRpb24sICJzdWJtaXR0ZWQiCisgICAgICBtZWFucyBhbnkgZm9ybSBvZiBlbGVjdHJvbmljLCB2ZXJiYWwsIG9yIHdyaXR0ZW4gY29tbXVuaWNhdGlvbiBzZW50CisgICAgICB0byB0aGUgTGljZW5zb3Igb3IgaXRzIHJlcHJlc2VudGF0aXZlcywgaW5jbHVkaW5nIGJ1dCBub3QgbGltaXRlZCB0bworICAgICAgY29tbXVuaWNhdGlvbiBvbiBlbGVjdHJvbmljIG1haWxpbmcgbGlzdHMsIHNvdXJjZSBjb2RlIGNvbnRyb2wgc3lzdGVtcywKKyAgICAgIGFuZCBpc3N1ZSB0cmFja2luZyBzeXN0ZW1zIHRoYXQgYXJlIG1hbmFnZWQgYnksIG9yIG9uIGJlaGFsZiBvZiwgdGhlCisgICAgICBMaWNlbnNvciBmb3IgdGhlIHB1cnBvc2Ugb2YgZGlzY3Vzc2luZyBhbmQgaW1wcm92aW5nIHRoZSBXb3JrLCBidXQKKyAgICAgIGV4Y2x1ZGluZyBjb21tdW5pY2F0aW9uIHRoYXQgaXMgY29uc3BpY3VvdXNseSBtYXJrZWQgb3Igb3RoZXJ3aXNlCisgICAgICBkZXNpZ25hdGVkIGluIHdyaXRpbmcgYnkgdGhlIGNvcHlyaWdodCBvd25lciBhcyAiTm90IGEgQ29udHJpYnV0aW9uLiIKKworICAgICAgIkNvbnRyaWJ1dG9yIiBzaGFsbCBtZWFuIExpY2Vuc29yIGFuZCBhbnkgaW5kaXZpZHVhbCBvciBMZWdhbCBFbnRpdHkKKyAgICAgIG9uIGJlaGFsZiBvZiB3aG9tIGEgQ29udHJpYnV0aW9uIGhhcyBiZWVuIHJlY2VpdmVkIGJ5IExpY2Vuc29yIGFuZAorICAgICAgc3Vic2VxdWVudGx5IGluY29ycG9yYXRlZCB3aXRoaW4gdGhlIFdvcmsuCisKKyAgIDIuIEdyYW50IG9mIENvcHlyaWdodCBMaWNlbnNlLiBTdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZgorICAgICAgdGhpcyBMaWNlbnNlLCBlYWNoIENvbnRyaWJ1dG9yIGhlcmVieSBncmFudHMgdG8gWW91IGEgcGVycGV0dWFsLAorICAgICAgd29ybGR3aWRlLCBub24tZXhjbHVzaXZlLCBuby1jaGFyZ2UsIHJveWFsdHktZnJlZSwgaXJyZXZvY2FibGUKKyAgICAgIGNvcHlyaWdodCBsaWNlbnNlIHRvIHJlcHJvZHVjZSwgcHJlcGFyZSBEZXJpdmF0aXZlIFdvcmtzIG9mLAorICAgICAgcHVibGljbHkgZGlzcGxheSwgcHVibGljbHkgcGVyZm9ybSwgc3VibGljZW5zZSwgYW5kIGRpc3RyaWJ1dGUgdGhlCisgICAgICBXb3JrIGFuZCBzdWNoIERlcml2YXRpdmUgV29ya3MgaW4gU291cmNlIG9yIE9iamVjdCBmb3JtLgorCisgICAzLiBHcmFudCBvZiBQYXRlbnQgTGljZW5zZS4gU3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YKKyAgICAgIHRoaXMgTGljZW5zZSwgZWFjaCBDb250cmlidXRvciBoZXJlYnkgZ3JhbnRzIHRvIFlvdSBhIHBlcnBldHVhbCwKKyAgICAgIHdvcmxkd2lkZSwgbm9uLWV4Y2x1c2l2ZSwgbm8tY2hhcmdlLCByb3lhbHR5LWZyZWUsIGlycmV2b2NhYmxlCisgICAgICAoZXhjZXB0IGFzIHN0YXRlZCBpbiB0aGlzIHNlY3Rpb24pIHBhdGVudCBsaWNlbnNlIHRvIG1ha2UsIGhhdmUgbWFkZSwKKyAgICAgIHVzZSwgb2ZmZXIgdG8gc2VsbCwgc2VsbCwgaW1wb3J0LCBhbmQgb3RoZXJ3aXNlIHRyYW5zZmVyIHRoZSBXb3JrLAorICAgICAgd2hlcmUgc3VjaCBsaWNlbnNlIGFwcGxpZXMgb25seSB0byB0aG9zZSBwYXRlbnQgY2xhaW1zIGxpY2Vuc2FibGUKKyAgICAgIGJ5IHN1Y2ggQ29udHJpYnV0b3IgdGhhdCBhcmUgbmVjZXNzYXJpbHkgaW5mcmluZ2VkIGJ5IHRoZWlyCisgICAgICBDb250cmlidXRpb24ocykgYWxvbmUgb3IgYnkgY29tYmluYXRpb24gb2YgdGhlaXIgQ29udHJpYnV0aW9uKHMpCisgICAgICB3aXRoIHRoZSBXb3JrIHRvIHdoaWNoIHN1Y2ggQ29udHJpYnV0aW9uKHMpIHdhcyBzdWJtaXR0ZWQuIElmIFlvdQorICAgICAgaW5zdGl0dXRlIHBhdGVudCBsaXRpZ2F0aW9uIGFnYWluc3QgYW55IGVudGl0eSAoaW5jbHVkaW5nIGEKKyAgICAgIGNyb3NzLWNsYWltIG9yIGNvdW50ZXJjbGFpbSBpbiBhIGxhd3N1aXQpIGFsbGVnaW5nIHRoYXQgdGhlIFdvcmsKKyAgICAgIG9yIGEgQ29udHJpYnV0aW9uIGluY29ycG9yYXRlZCB3aXRoaW4gdGhlIFdvcmsgY29uc3RpdHV0ZXMgZGlyZWN0CisgICAgICBvciBjb250cmlidXRvcnkgcGF0ZW50IGluZnJpbmdlbWVudCwgdGhlbiBhbnkgcGF0ZW50IGxpY2Vuc2VzCisgICAgICBncmFudGVkIHRvIFlvdSB1bmRlciB0aGlzIExpY2Vuc2UgZm9yIHRoYXQgV29yayBzaGFsbCB0ZXJtaW5hdGUKKyAgICAgIGFzIG9mIHRoZSBkYXRlIHN1Y2ggbGl0aWdhdGlvbiBpcyBmaWxlZC4KKworICAgNC4gUmVkaXN0cmlidXRpb24uIFlvdSBtYXkgcmVwcm9kdWNlIGFuZCBkaXN0cmlidXRlIGNvcGllcyBvZiB0aGUKKyAgICAgIFdvcmsgb3IgRGVyaXZhdGl2ZSBXb3JrcyB0aGVyZW9mIGluIGFueSBtZWRpdW0sIHdpdGggb3Igd2l0aG91dAorICAgICAgbW9kaWZpY2F0aW9ucywgYW5kIGluIFNvdXJjZSBvciBPYmplY3QgZm9ybSwgcHJvdmlkZWQgdGhhdCBZb3UKKyAgICAgIG1lZXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgorCisgICAgICAoYSkgWW91IG11c3QgZ2l2ZSBhbnkgb3RoZXIgcmVjaXBpZW50cyBvZiB0aGUgV29yayBvcgorICAgICAgICAgIERlcml2YXRpdmUgV29ya3MgYSBjb3B5IG9mIHRoaXMgTGljZW5zZTsgYW5kCisKKyAgICAgIChiKSBZb3UgbXVzdCBjYXVzZSBhbnkgbW9kaWZpZWQgZmlsZXMgdG8gY2FycnkgcHJvbWluZW50IG5vdGljZXMKKyAgICAgICAgICBzdGF0aW5nIHRoYXQgWW91IGNoYW5nZWQgdGhlIGZpbGVzOyBhbmQKKworICAgICAgKGMpIFlvdSBtdXN0IHJldGFpbiwgaW4gdGhlIFNvdXJjZSBmb3JtIG9mIGFueSBEZXJpdmF0aXZlIFdvcmtzCisgICAgICAgICAgdGhhdCBZb3UgZGlzdHJpYnV0ZSwgYWxsIGNvcHlyaWdodCwgcGF0ZW50LCB0cmFkZW1hcmssIGFuZAorICAgICAgICAgIGF0dHJpYnV0aW9uIG5vdGljZXMgZnJvbSB0aGUgU291cmNlIGZvcm0gb2YgdGhlIFdvcmssCisgICAgICAgICAgZXhjbHVkaW5nIHRob3NlIG5vdGljZXMgdGhhdCBkbyBub3QgcGVydGFpbiB0byBhbnkgcGFydCBvZgorICAgICAgICAgIHRoZSBEZXJpdmF0aXZlIFdvcmtzOyBhbmQKKworICAgICAgKGQpIElmIHRoZSBXb3JrIGluY2x1ZGVzIGEgIk5PVElDRSIgdGV4dCBmaWxlIGFzIHBhcnQgb2YgaXRzCisgICAgICAgICAgZGlzdHJpYnV0aW9uLCB0aGVuIGFueSBEZXJpdmF0aXZlIFdvcmtzIHRoYXQgWW91IGRpc3RyaWJ1dGUgbXVzdAorICAgICAgICAgIGluY2x1ZGUgYSByZWFkYWJsZSBjb3B5IG9mIHRoZSBhdHRyaWJ1dGlvbiBub3RpY2VzIGNvbnRhaW5lZAorICAgICAgICAgIHdpdGhpbiBzdWNoIE5PVElDRSBmaWxlLCBleGNsdWRpbmcgdGhvc2Ugbm90aWNlcyB0aGF0IGRvIG5vdAorICAgICAgICAgIHBlcnRhaW4gdG8gYW55IHBhcnQgb2YgdGhlIERlcml2YXRpdmUgV29ya3MsIGluIGF0IGxlYXN0IG9uZQorICAgICAgICAgIG9mIHRoZSBmb2xsb3dpbmcgcGxhY2VzOiB3aXRoaW4gYSBOT1RJQ0UgdGV4dCBmaWxlIGRpc3RyaWJ1dGVkCisgICAgICAgICAgYXMgcGFydCBvZiB0aGUgRGVyaXZhdGl2ZSBXb3Jrczsgd2l0aGluIHRoZSBTb3VyY2UgZm9ybSBvcgorICAgICAgICAgIGRvY3VtZW50YXRpb24sIGlmIHByb3ZpZGVkIGFsb25nIHdpdGggdGhlIERlcml2YXRpdmUgV29ya3M7IG9yLAorICAgICAgICAgIHdpdGhpbiBhIGRpc3BsYXkgZ2VuZXJhdGVkIGJ5IHRoZSBEZXJpdmF0aXZlIFdvcmtzLCBpZiBhbmQKKyAgICAgICAgICB3aGVyZXZlciBzdWNoIHRoaXJkLXBhcnR5IG5vdGljZXMgbm9ybWFsbHkgYXBwZWFyLiBUaGUgY29udGVudHMKKyAgICAgICAgICBvZiB0aGUgTk9USUNFIGZpbGUgYXJlIGZvciBpbmZvcm1hdGlvbmFsIHB1cnBvc2VzIG9ubHkgYW5kCisgICAgICAgICAgZG8gbm90IG1vZGlmeSB0aGUgTGljZW5zZS4gWW91IG1heSBhZGQgWW91ciBvd24gYXR0cmlidXRpb24KKyAgICAgICAgICBub3RpY2VzIHdpdGhpbiBEZXJpdmF0aXZlIFdvcmtzIHRoYXQgWW91IGRpc3RyaWJ1dGUsIGFsb25nc2lkZQorICAgICAgICAgIG9yIGFzIGFuIGFkZGVuZHVtIHRvIHRoZSBOT1RJQ0UgdGV4dCBmcm9tIHRoZSBXb3JrLCBwcm92aWRlZAorICAgICAgICAgIHRoYXQgc3VjaCBhZGRpdGlvbmFsIGF0dHJpYnV0aW9uIG5vdGljZXMgY2Fubm90IGJlIGNvbnN0cnVlZAorICAgICAgICAgIGFzIG1vZGlmeWluZyB0aGUgTGljZW5zZS4KKworICAgICAgWW91IG1heSBhZGQgWW91ciBvd24gY29weXJpZ2h0IHN0YXRlbWVudCB0byBZb3VyIG1vZGlmaWNhdGlvbnMgYW5kCisgICAgICBtYXkgcHJvdmlkZSBhZGRpdGlvbmFsIG9yIGRpZmZlcmVudCBsaWNlbnNlIHRlcm1zIGFuZCBjb25kaXRpb25zCisgICAgICBmb3IgdXNlLCByZXByb2R1Y3Rpb24sIG9yIGRpc3RyaWJ1dGlvbiBvZiBZb3VyIG1vZGlmaWNhdGlvbnMsIG9yCisgICAgICBmb3IgYW55IHN1Y2ggRGVyaXZhdGl2ZSBXb3JrcyBhcyBhIHdob2xlLCBwcm92aWRlZCBZb3VyIHVzZSwKKyAgICAgIHJlcHJvZHVjdGlvbiwgYW5kIGRpc3RyaWJ1dGlvbiBvZiB0aGUgV29yayBvdGhlcndpc2UgY29tcGxpZXMgd2l0aAorICAgICAgdGhlIGNvbmRpdGlvbnMgc3RhdGVkIGluIHRoaXMgTGljZW5zZS4KKworICAgNS4gU3VibWlzc2lvbiBvZiBDb250cmlidXRpb25zLiBVbmxlc3MgWW91IGV4cGxpY2l0bHkgc3RhdGUgb3RoZXJ3aXNlLAorICAgICAgYW55IENvbnRyaWJ1dGlvbiBpbnRlbnRpb25hbGx5IHN1Ym1pdHRlZCBmb3IgaW5jbHVzaW9uIGluIHRoZSBXb3JrCisgICAgICBieSBZb3UgdG8gdGhlIExpY2Vuc29yIHNoYWxsIGJlIHVuZGVyIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZgorICAgICAgdGhpcyBMaWNlbnNlLCB3aXRob3V0IGFueSBhZGRpdGlvbmFsIHRlcm1zIG9yIGNvbmRpdGlvbnMuCisgICAgICBOb3R3aXRoc3RhbmRpbmcgdGhlIGFib3ZlLCBub3RoaW5nIGhlcmVpbiBzaGFsbCBzdXBlcnNlZGUgb3IgbW9kaWZ5CisgICAgICB0aGUgdGVybXMgb2YgYW55IHNlcGFyYXRlIGxpY2Vuc2UgYWdyZWVtZW50IHlvdSBtYXkgaGF2ZSBleGVjdXRlZAorICAgICAgd2l0aCBMaWNlbnNvciByZWdhcmRpbmcgc3VjaCBDb250cmlidXRpb25zLgorCisgICA2LiBUcmFkZW1hcmtzLiBUaGlzIExpY2Vuc2UgZG9lcyBub3QgZ3JhbnQgcGVybWlzc2lvbiB0byB1c2UgdGhlIHRyYWRlCisgICAgICBuYW1lcywgdHJhZGVtYXJrcywgc2VydmljZSBtYXJrcywgb3IgcHJvZHVjdCBuYW1lcyBvZiB0aGUgTGljZW5zb3IsCisgICAgICBleGNlcHQgYXMgcmVxdWlyZWQgZm9yIHJlYXNvbmFibGUgYW5kIGN1c3RvbWFyeSB1c2UgaW4gZGVzY3JpYmluZyB0aGUKKyAgICAgIG9yaWdpbiBvZiB0aGUgV29yayBhbmQgcmVwcm9kdWNpbmcgdGhlIGNvbnRlbnQgb2YgdGhlIE5PVElDRSBmaWxlLgorCisgICA3LiBEaXNjbGFpbWVyIG9mIFdhcnJhbnR5LiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IKKyAgICAgIGFncmVlZCB0byBpbiB3cml0aW5nLCBMaWNlbnNvciBwcm92aWRlcyB0aGUgV29yayAoYW5kIGVhY2gKKyAgICAgIENvbnRyaWJ1dG9yIHByb3ZpZGVzIGl0cyBDb250cmlidXRpb25zKSBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICAgICAgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yCisgICAgICBpbXBsaWVkLCBpbmNsdWRpbmcsIHdpdGhvdXQgbGltaXRhdGlvbiwgYW55IHdhcnJhbnRpZXMgb3IgY29uZGl0aW9ucworICAgICAgb2YgVElUTEUsIE5PTi1JTkZSSU5HRU1FTlQsIE1FUkNIQU5UQUJJTElUWSwgb3IgRklUTkVTUyBGT1IgQQorICAgICAgUEFSVElDVUxBUiBQVVJQT1NFLiBZb3UgYXJlIHNvbGVseSByZXNwb25zaWJsZSBmb3IgZGV0ZXJtaW5pbmcgdGhlCisgICAgICBhcHByb3ByaWF0ZW5lc3Mgb2YgdXNpbmcgb3IgcmVkaXN0cmlidXRpbmcgdGhlIFdvcmsgYW5kIGFzc3VtZSBhbnkKKyAgICAgIHJpc2tzIGFzc29jaWF0ZWQgd2l0aCBZb3VyIGV4ZXJjaXNlIG9mIHBlcm1pc3Npb25zIHVuZGVyIHRoaXMgTGljZW5zZS4KKworICAgOC4gTGltaXRhdGlvbiBvZiBMaWFiaWxpdHkuIEluIG5vIGV2ZW50IGFuZCB1bmRlciBubyBsZWdhbCB0aGVvcnksCisgICAgICB3aGV0aGVyIGluIHRvcnQgKGluY2x1ZGluZyBuZWdsaWdlbmNlKSwgY29udHJhY3QsIG9yIG90aGVyd2lzZSwKKyAgICAgIHVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyAoc3VjaCBhcyBkZWxpYmVyYXRlIGFuZCBncm9zc2x5CisgICAgICBuZWdsaWdlbnQgYWN0cykgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNoYWxsIGFueSBDb250cmlidXRvciBiZQorICAgICAgbGlhYmxlIHRvIFlvdSBmb3IgZGFtYWdlcywgaW5jbHVkaW5nIGFueSBkaXJlY3QsIGluZGlyZWN0LCBzcGVjaWFsLAorICAgICAgaW5jaWRlbnRhbCwgb3IgY29uc2VxdWVudGlhbCBkYW1hZ2VzIG9mIGFueSBjaGFyYWN0ZXIgYXJpc2luZyBhcyBhCisgICAgICByZXN1bHQgb2YgdGhpcyBMaWNlbnNlIG9yIG91dCBvZiB0aGUgdXNlIG9yIGluYWJpbGl0eSB0byB1c2UgdGhlCisgICAgICBXb3JrIChpbmNsdWRpbmcgYnV0IG5vdCBsaW1pdGVkIHRvIGRhbWFnZXMgZm9yIGxvc3Mgb2YgZ29vZHdpbGwsCisgICAgICB3b3JrIHN0b3BwYWdlLCBjb21wdXRlciBmYWlsdXJlIG9yIG1hbGZ1bmN0aW9uLCBvciBhbnkgYW5kIGFsbAorICAgICAgb3RoZXIgY29tbWVyY2lhbCBkYW1hZ2VzIG9yIGxvc3NlcyksIGV2ZW4gaWYgc3VjaCBDb250cmlidXRvcgorICAgICAgaGFzIGJlZW4gYWR2aXNlZCBvZiB0aGUgcG9zc2liaWxpdHkgb2Ygc3VjaCBkYW1hZ2VzLgorCisgICA5LiBBY2NlcHRpbmcgV2FycmFudHkgb3IgQWRkaXRpb25hbCBMaWFiaWxpdHkuIFdoaWxlIHJlZGlzdHJpYnV0aW5nCisgICAgICB0aGUgV29yayBvciBEZXJpdmF0aXZlIFdvcmtzIHRoZXJlb2YsIFlvdSBtYXkgY2hvb3NlIHRvIG9mZmVyLAorICAgICAgYW5kIGNoYXJnZSBhIGZlZSBmb3IsIGFjY2VwdGFuY2Ugb2Ygc3VwcG9ydCwgd2FycmFudHksIGluZGVtbml0eSwKKyAgICAgIG9yIG90aGVyIGxpYWJpbGl0eSBvYmxpZ2F0aW9ucyBhbmQvb3IgcmlnaHRzIGNvbnNpc3RlbnQgd2l0aCB0aGlzCisgICAgICBMaWNlbnNlLiBIb3dldmVyLCBpbiBhY2NlcHRpbmcgc3VjaCBvYmxpZ2F0aW9ucywgWW91IG1heSBhY3Qgb25seQorICAgICAgb24gWW91ciBvd24gYmVoYWxmIGFuZCBvbiBZb3VyIHNvbGUgcmVzcG9uc2liaWxpdHksIG5vdCBvbiBiZWhhbGYKKyAgICAgIG9mIGFueSBvdGhlciBDb250cmlidXRvciwgYW5kIG9ubHkgaWYgWW91IGFncmVlIHRvIGluZGVtbmlmeSwKKyAgICAgIGRlZmVuZCwgYW5kIGhvbGQgZWFjaCBDb250cmlidXRvciBoYXJtbGVzcyBmb3IgYW55IGxpYWJpbGl0eQorICAgICAgaW5jdXJyZWQgYnksIG9yIGNsYWltcyBhc3NlcnRlZCBhZ2FpbnN0LCBzdWNoIENvbnRyaWJ1dG9yIGJ5IHJlYXNvbgorICAgICAgb2YgeW91ciBhY2NlcHRpbmcgYW55IHN1Y2ggd2FycmFudHkgb3IgYWRkaXRpb25hbCBsaWFiaWxpdHkuCisKKyAgIEVORCBPRiBURVJNUyBBTkQgQ09ORElUSU9OUworCmRpZmYgLS1naXQgYS9tZWRpYS9jb2RlYzIvY29tcG9uZW50cy9tcDMvcGF0ZW50X2Rpc2NsYWltZXIudHh0IGIvbWVkaWEvY29kZWMyL2NvbXBvbmVudHMvbXAzL3BhdGVudF9kaXNjbGFpbWVyLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNGJmMTFkCi0tLSAvZGV2L251bGwKKysrIGIvbWVkaWEvY29kZWMyL2NvbXBvbmVudHMvbXAzL3BhdGVudF9kaXNjbGFpbWVyLnR4dApAQCAtMCwwICsxLDkgQEAKKworVEhJUyBJUyBOT1QgQSBHUkFOVCBPRiBQQVRFTlQgUklHSFRTLgorCitHb29nbGUgbWFrZXMgbm8gcmVwcmVzZW50YXRpb24gb3Igd2FycmFudHkgdGhhdCB0aGUgY29kZWNzIGZvciB3aGljaAorc291cmNlIGNvZGUgaXMgbWFkZSBhdmFpbGFibGUgaGVyZXVuZGVyIGFyZSB1bmVuY3VtYmVyZWQgYnkKK3RoaXJkLXBhcnR5IHBhdGVudHMuICBUaG9zZSBpbnRlbmRpbmcgdG8gdXNlIHRoaXMgc291cmNlIGNvZGUgaW4KK2hhcmR3YXJlIG9yIHNvZnR3YXJlIHByb2R1Y3RzIGFyZSBhZHZpc2VkIHRoYXQgaW1wbGVtZW50YXRpb25zIG9mCit0aGVzZSBjb2RlY3MsIGluY2x1ZGluZyBpbiBvcGVuIHNvdXJjZSBzb2Z0d2FyZSBvciBzaGFyZXdhcmUsIG1heQorcmVxdWlyZSBwYXRlbnQgbGljZW5zZXMgZnJvbSB0aGUgcmVsZXZhbnQgcGF0ZW50IGhvbGRlcnMuCmRpZmYgLS1naXQgYS9tZWRpYS9jb2RlYzIvY29tcG9uZW50cy9tcGVnMi9BbmRyb2lkLmJwIGIvbWVkaWEvY29kZWMyL2NvbXBvbmVudHMvbXBlZzIvQW5kcm9pZC5icApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44NDFmMGE5Ci0tLSAvZGV2L251bGwKKysrIGIvbWVkaWEvY29kZWMyL2NvbXBvbmVudHMvbXBlZzIvQW5kcm9pZC5icApAQCAtMCwwICsxLDE2IEBACitjY19saWJyYXJ5X3NoYXJlZCB7CisgICAgbmFtZTogImxpYmNvZGVjMl9zb2Z0X21wZWcyZGVjIiwKKyAgICBkZWZhdWx0czogWworICAgICAgICAibGliY29kZWMyX3NvZnQtZGVmYXVsdHMiLAorICAgICAgICAibGliY29kZWMyX3NvZnRfc2FuaXRpemVfc2lnbmVkLWRlZmF1bHRzIiwKKyAgICBdLAorCisgICAgc3JjczogWyJDMlNvZnRNcGVnMkRlYy5jcHAiXSwKKworICAgIHN0YXRpY19saWJzOiBbImxpYm1wZWcyZGVjIl0sCisKKyAgICBpbmNsdWRlX2RpcnM6IFsKKyAgICAgICAgImV4dGVybmFsL2xpYm1wZWcyL2RlY29kZXIiLAorICAgICAgICAiZXh0ZXJuYWwvbGlibXBlZzIvY29tbW9uIiwKKyAgICBdLAorfQpkaWZmIC0tZ2l0IGEvbWVkaWEvY29kZWMyL2NvbXBvbmVudHMvbXBlZzIvQzJTb2Z0TXBlZzJEZWMuY3BwIGIvbWVkaWEvY29kZWMyL2NvbXBvbmVudHMvbXBlZzIvQzJTb2Z0TXBlZzJEZWMuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRhMzJlYzAKLS0tIC9kZXYvbnVsbAorKysgYi9tZWRpYS9jb2RlYzIvY29tcG9uZW50cy9tcGVnMi9DMlNvZnRNcGVnMkRlYy5jcHAKQEAgLTAsMCArMSwxMDY5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE4IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KKworLy8jZGVmaW5lIExPR19OREVCVUcgMAorI2RlZmluZSBMT0dfVEFHICJDMlNvZnRNcGVnMkRlYyIKKyNpbmNsdWRlIDxsb2cvbG9nLmg+CisKKyNpbmNsdWRlIDxtZWRpYS9zdGFnZWZyaWdodC9mb3VuZGF0aW9uL01lZGlhRGVmcy5oPgorCisjaW5jbHVkZSA8QzJEZWJ1Zy5oPgorI2luY2x1ZGUgPEMyUGxhdGZvcm1TdXBwb3J0Lmg+CisjaW5jbHVkZSA8Q29kZWMyTWFwcGVyLmg+CisjaW5jbHVkZSA8U2ltcGxlQzJJbnRlcmZhY2UuaD4KKworI2luY2x1ZGUgIkMyU29mdE1wZWcyRGVjLmgiCisjaW5jbHVkZSAiaW1wZWcyZC5oIgorCituYW1lc3BhY2UgYW5kcm9pZCB7CisKK2NvbnN0ZXhwciBjaGFyIENPTVBPTkVOVF9OQU1FW10gPSAiYzIuYW5kcm9pZC5tcGVnMi5kZWNvZGVyIjsKKworY2xhc3MgQzJTb2Z0TXBlZzJEZWM6OkludGZJbXBsIDogcHVibGljIFNpbXBsZUludGVyZmFjZTx2b2lkPjo6QmFzZVBhcmFtcyB7CitwdWJsaWM6CisgICAgZXhwbGljaXQgSW50ZkltcGwoY29uc3Qgc3RkOjpzaGFyZWRfcHRyPEMyUmVmbGVjdG9ySGVscGVyPiAmaGVscGVyKQorICAgICAgICA6IFNpbXBsZUludGVyZmFjZTx2b2lkPjo6QmFzZVBhcmFtcygKKyAgICAgICAgICAgICAgICBoZWxwZXIsCisgICAgICAgICAgICAgICAgQ09NUE9ORU5UX05BTUUsCisgICAgICAgICAgICAgICAgQzJDb21wb25lbnQ6OktJTkRfREVDT0RFUiwKKyAgICAgICAgICAgICAgICBDMkNvbXBvbmVudDo6RE9NQUlOX1ZJREVPLAorICAgICAgICAgICAgICAgIE1FRElBX01JTUVUWVBFX1ZJREVPX01QRUcyKSB7CisgICAgICAgIG5vUHJpdmF0ZUJ1ZmZlcnMoKTsgLy8gVE9ETzogYWNjb3VudCBmb3Igb3VyIGJ1ZmZlcnMgaGVyZQorICAgICAgICBub0lucHV0UmVmZXJlbmNlcygpOworICAgICAgICBub091dHB1dFJlZmVyZW5jZXMoKTsKKyAgICAgICAgbm9JbnB1dExhdGVuY3koKTsKKyAgICAgICAgbm9UaW1lU3RyZXRjaCgpOworCisgICAgICAgIC8vIFRPRE86IG91dHB1dCBsYXRlbmN5IGFuZCByZW9yZGVyaW5nCisKKyAgICAgICAgYWRkUGFyYW1ldGVyKAorICAgICAgICAgICAgICAgIERlZmluZVBhcmFtKG1BdHRyaWIsIEMyX1BBUkFNS0VZX0NPTVBPTkVOVF9BVFRSSUJVVEVTKQorICAgICAgICAgICAgICAgIC53aXRoQ29uc3RWYWx1ZShuZXcgQzJDb21wb25lbnRBdHRyaWJ1dGVzU2V0dGluZyhDMkNvbXBvbmVudDo6QVRUUklCX0lTX1RFTVBPUkFMKSkKKyAgICAgICAgICAgICAgICAuYnVpbGQoKSk7CisKKyAgICAgICAgYWRkUGFyYW1ldGVyKAorICAgICAgICAgICAgICAgIERlZmluZVBhcmFtKG1TaXplLCBDMl9QQVJBTUtFWV9QSUNUVVJFX1NJWkUpCisgICAgICAgICAgICAgICAgLndpdGhEZWZhdWx0KG5ldyBDMlN0cmVhbVBpY3R1cmVTaXplSW5mbzo6b3V0cHV0KDB1LCAzMjAsIDI0MCkpCisgICAgICAgICAgICAgICAgLndpdGhGaWVsZHMoeworICAgICAgICAgICAgICAgICAgICBDMkYobVNpemUsIHdpZHRoKS5pblJhbmdlKDE2LCAxOTIwLCA0KSwKKyAgICAgICAgICAgICAgICAgICAgQzJGKG1TaXplLCBoZWlnaHQpLmluUmFuZ2UoMTYsIDEwODgsIDQpLAorICAgICAgICAgICAgICAgIH0pCisgICAgICAgICAgICAgICAgLndpdGhTZXR0ZXIoU2l6ZVNldHRlcikKKyAgICAgICAgICAgICAgICAuYnVpbGQoKSk7CisKKyAgICAgICAgYWRkUGFyYW1ldGVyKAorICAgICAgICAgICAgICAgIERlZmluZVBhcmFtKG1Qcm9maWxlTGV2ZWwsIEMyX1BBUkFNS0VZX1BST0ZJTEVfTEVWRUwpCisgICAgICAgICAgICAgICAgLndpdGhEZWZhdWx0KG5ldyBDMlN0cmVhbVByb2ZpbGVMZXZlbEluZm86OmlucHV0KDB1LAorICAgICAgICAgICAgICAgICAgICAgICAgQzJDb25maWc6OlBST0ZJTEVfTVAyVl9TSU1QTEUsIEMyQ29uZmlnOjpMRVZFTF9NUDJWX0hJR0gpKQorICAgICAgICAgICAgICAgIC53aXRoRmllbGRzKHsKKyAgICAgICAgICAgICAgICAgICAgQzJGKG1Qcm9maWxlTGV2ZWwsIHByb2ZpbGUpLm9uZU9mKHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBDMkNvbmZpZzo6UFJPRklMRV9NUDJWX1NJTVBMRSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBDMkNvbmZpZzo6UFJPRklMRV9NUDJWX01BSU59KSwKKyAgICAgICAgICAgICAgICAgICAgQzJGKG1Qcm9maWxlTGV2ZWwsIGxldmVsKS5vbmVPZih7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgQzJDb25maWc6OkxFVkVMX01QMlZfTE9XLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIEMyQ29uZmlnOjpMRVZFTF9NUDJWX01BSU4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgQzJDb25maWc6OkxFVkVMX01QMlZfSElHSF8xNDQwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIEMyQ29uZmlnOjpMRVZFTF9NUDJWX0hJR0h9KQorICAgICAgICAgICAgICAgIH0pCisgICAgICAgICAgICAgICAgLndpdGhTZXR0ZXIoUHJvZmlsZUxldmVsU2V0dGVyLCBtU2l6ZSkKKyAgICAgICAgICAgICAgICAuYnVpbGQoKSk7CisKKyAgICAgICAgYWRkUGFyYW1ldGVyKAorICAgICAgICAgICAgICAgIERlZmluZVBhcmFtKG1NYXhTaXplLCBDMl9QQVJBTUtFWV9NQVhfUElDVFVSRV9TSVpFKQorICAgICAgICAgICAgICAgIC53aXRoRGVmYXVsdChuZXcgQzJTdHJlYW1NYXhQaWN0dXJlU2l6ZVR1bmluZzo6b3V0cHV0KDB1LCAzMjAsIDI0MCkpCisgICAgICAgICAgICAgICAgLndpdGhGaWVsZHMoeworICAgICAgICAgICAgICAgICAgICBDMkYobVNpemUsIHdpZHRoKS5pblJhbmdlKDIsIDE5MjAsIDIpLAorICAgICAgICAgICAgICAgICAgICBDMkYobVNpemUsIGhlaWdodCkuaW5SYW5nZSgyLCAxMDg4LCAyKSwKKyAgICAgICAgICAgICAgICB9KQorICAgICAgICAgICAgICAgIC53aXRoU2V0dGVyKE1heFBpY3R1cmVTaXplU2V0dGVyLCBtU2l6ZSkKKyAgICAgICAgICAgICAgICAuYnVpbGQoKSk7CisKKyAgICAgICAgYWRkUGFyYW1ldGVyKAorICAgICAgICAgICAgICAgIERlZmluZVBhcmFtKG1NYXhJbnB1dFNpemUsIEMyX1BBUkFNS0VZX0lOUFVUX01BWF9CVUZGRVJfU0laRSkKKyAgICAgICAgICAgICAgICAud2l0aERlZmF1bHQobmV3IEMyU3RyZWFtTWF4QnVmZmVyU2l6ZUluZm86OmlucHV0KDB1LCAzMjAgKiAyNDAgKiAzIC8gMikpCisgICAgICAgICAgICAgICAgLndpdGhGaWVsZHMoeworICAgICAgICAgICAgICAgICAgICBDMkYobU1heElucHV0U2l6ZSwgdmFsdWUpLmFueSgpLAorICAgICAgICAgICAgICAgIH0pCisgICAgICAgICAgICAgICAgLmNhbGN1bGF0ZWRBcyhNYXhJbnB1dFNpemVTZXR0ZXIsIG1NYXhTaXplKQorICAgICAgICAgICAgICAgIC5idWlsZCgpKTsKKworICAgICAgICBDMkNocm9tYU9mZnNldFN0cnVjdCBsb2NhdGlvbnNbMV0gPSB7IEMyQ2hyb21hT2Zmc2V0U3RydWN0OjpJVFVfWVVWXzQyMF8wKCkgfTsKKyAgICAgICAgc3RkOjpzaGFyZWRfcHRyPEMyU3RyZWFtQ29sb3JJbmZvOjpvdXRwdXQ+IGRlZmF1bHRDb2xvckluZm8gPQorICAgICAgICAgICAgQzJTdHJlYW1Db2xvckluZm86Om91dHB1dDo6QWxsb2NTaGFyZWQoCisgICAgICAgICAgICAgICAgICAgIDF1LCAwdSwgOHUgLyogYml0RGVwdGggKi8sIEMyQ29sb3I6OllVVl80MjApOworICAgICAgICBtZW1jcHkoZGVmYXVsdENvbG9ySW5mby0+bS5sb2NhdGlvbnMsIGxvY2F0aW9ucywgc2l6ZW9mKGxvY2F0aW9ucykpOworCisgICAgICAgIGRlZmF1bHRDb2xvckluZm8gPQorICAgICAgICAgICAgQzJTdHJlYW1Db2xvckluZm86Om91dHB1dDo6QWxsb2NTaGFyZWQoCisgICAgICAgICAgICAgICAgICAgIHsgQzJDaHJvbWFPZmZzZXRTdHJ1Y3Q6OklUVV9ZVVZfNDIwXzAoKSB9LAorICAgICAgICAgICAgICAgICAgICAwdSwgOHUgLyogYml0RGVwdGggKi8sIEMyQ29sb3I6OllVVl80MjApOworICAgICAgICBoZWxwZXItPmFkZFN0cnVjdERlc2NyaXB0b3JzPEMyQ2hyb21hT2Zmc2V0U3RydWN0PigpOworCisgICAgICAgIGFkZFBhcmFtZXRlcigKKyAgICAgICAgICAgICAgICBEZWZpbmVQYXJhbShtQ29sb3JJbmZvLCBDMl9QQVJBTUtFWV9DT0RFRF9DT0xPUl9JTkZPKQorICAgICAgICAgICAgICAgIC53aXRoQ29uc3RWYWx1ZShkZWZhdWx0Q29sb3JJbmZvKQorICAgICAgICAgICAgICAgIC5idWlsZCgpKTsKKworICAgICAgICBhZGRQYXJhbWV0ZXIoCisgICAgICAgICAgICAgICAgRGVmaW5lUGFyYW0obURlZmF1bHRDb2xvckFzcGVjdHMsIEMyX1BBUkFNS0VZX0RFRkFVTFRfQ09MT1JfQVNQRUNUUykKKyAgICAgICAgICAgICAgICAud2l0aERlZmF1bHQobmV3IEMyU3RyZWFtQ29sb3JBc3BlY3RzVHVuaW5nOjpvdXRwdXQoCisgICAgICAgICAgICAgICAgICAgICAgICAwdSwgQzJDb2xvcjo6UkFOR0VfVU5TUEVDSUZJRUQsIEMyQ29sb3I6OlBSSU1BUklFU19VTlNQRUNJRklFRCwKKyAgICAgICAgICAgICAgICAgICAgICAgIEMyQ29sb3I6OlRSQU5TRkVSX1VOU1BFQ0lGSUVELCBDMkNvbG9yOjpNQVRSSVhfVU5TUEVDSUZJRUQpKQorICAgICAgICAgICAgICAgIC53aXRoRmllbGRzKHsKKyAgICAgICAgICAgICAgICAgICAgQzJGKG1EZWZhdWx0Q29sb3JBc3BlY3RzLCByYW5nZSkuaW5SYW5nZSgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQzJDb2xvcjo6UkFOR0VfVU5TUEVDSUZJRUQsIEMyQ29sb3I6OlJBTkdFX09USEVSKSwKKyAgICAgICAgICAgICAgICAgICAgQzJGKG1EZWZhdWx0Q29sb3JBc3BlY3RzLCBwcmltYXJpZXMpLmluUmFuZ2UoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEMyQ29sb3I6OlBSSU1BUklFU19VTlNQRUNJRklFRCwgQzJDb2xvcjo6UFJJTUFSSUVTX09USEVSKSwKKyAgICAgICAgICAgICAgICAgICAgQzJGKG1EZWZhdWx0Q29sb3JBc3BlY3RzLCB0cmFuc2ZlcikuaW5SYW5nZSgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQzJDb2xvcjo6VFJBTlNGRVJfVU5TUEVDSUZJRUQsIEMyQ29sb3I6OlRSQU5TRkVSX09USEVSKSwKKyAgICAgICAgICAgICAgICAgICAgQzJGKG1EZWZhdWx0Q29sb3JBc3BlY3RzLCBtYXRyaXgpLmluUmFuZ2UoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEMyQ29sb3I6Ok1BVFJJWF9VTlNQRUNJRklFRCwgQzJDb2xvcjo6TUFUUklYX09USEVSKQorICAgICAgICAgICAgICAgIH0pCisgICAgICAgICAgICAgICAgLndpdGhTZXR0ZXIoRGVmYXVsdENvbG9yQXNwZWN0c1NldHRlcikKKyAgICAgICAgICAgICAgICAuYnVpbGQoKSk7CisKKyAgICAgICAgYWRkUGFyYW1ldGVyKAorICAgICAgICAgICAgICAgIERlZmluZVBhcmFtKG1Db2RlZENvbG9yQXNwZWN0cywgQzJfUEFSQU1LRVlfVlVJX0NPTE9SX0FTUEVDVFMpCisgICAgICAgICAgICAgICAgLndpdGhEZWZhdWx0KG5ldyBDMlN0cmVhbUNvbG9yQXNwZWN0c0luZm86OmlucHV0KAorICAgICAgICAgICAgICAgICAgICAgICAgMHUsIEMyQ29sb3I6OlJBTkdFX0xJTUlURUQsIEMyQ29sb3I6OlBSSU1BUklFU19VTlNQRUNJRklFRCwKKyAgICAgICAgICAgICAgICAgICAgICAgIEMyQ29sb3I6OlRSQU5TRkVSX1VOU1BFQ0lGSUVELCBDMkNvbG9yOjpNQVRSSVhfVU5TUEVDSUZJRUQpKQorICAgICAgICAgICAgICAgIC53aXRoRmllbGRzKHsKKyAgICAgICAgICAgICAgICAgICAgQzJGKG1Db2RlZENvbG9yQXNwZWN0cywgcmFuZ2UpLmluUmFuZ2UoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEMyQ29sb3I6OlJBTkdFX1VOU1BFQ0lGSUVELCBDMkNvbG9yOjpSQU5HRV9PVEhFUiksCisgICAgICAgICAgICAgICAgICAgIEMyRihtQ29kZWRDb2xvckFzcGVjdHMsIHByaW1hcmllcykuaW5SYW5nZSgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQzJDb2xvcjo6UFJJTUFSSUVTX1VOU1BFQ0lGSUVELCBDMkNvbG9yOjpQUklNQVJJRVNfT1RIRVIpLAorICAgICAgICAgICAgICAgICAgICBDMkYobUNvZGVkQ29sb3JBc3BlY3RzLCB0cmFuc2ZlcikuaW5SYW5nZSgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQzJDb2xvcjo6VFJBTlNGRVJfVU5TUEVDSUZJRUQsIEMyQ29sb3I6OlRSQU5TRkVSX09USEVSKSwKKyAgICAgICAgICAgICAgICAgICAgQzJGKG1Db2RlZENvbG9yQXNwZWN0cywgbWF0cml4KS5pblJhbmdlKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDMkNvbG9yOjpNQVRSSVhfVU5TUEVDSUZJRUQsIEMyQ29sb3I6Ok1BVFJJWF9PVEhFUikKKyAgICAgICAgICAgICAgICB9KQorICAgICAgICAgICAgICAgIC53aXRoU2V0dGVyKENvZGVkQ29sb3JBc3BlY3RzU2V0dGVyKQorICAgICAgICAgICAgICAgIC5idWlsZCgpKTsKKworICAgICAgICBhZGRQYXJhbWV0ZXIoCisgICAgICAgICAgICAgICAgRGVmaW5lUGFyYW0obUNvbG9yQXNwZWN0cywgQzJfUEFSQU1LRVlfQ09MT1JfQVNQRUNUUykKKyAgICAgICAgICAgICAgICAud2l0aERlZmF1bHQobmV3IEMyU3RyZWFtQ29sb3JBc3BlY3RzSW5mbzo6b3V0cHV0KAorICAgICAgICAgICAgICAgICAgICAgICAgMHUsIEMyQ29sb3I6OlJBTkdFX1VOU1BFQ0lGSUVELCBDMkNvbG9yOjpQUklNQVJJRVNfVU5TUEVDSUZJRUQsCisgICAgICAgICAgICAgICAgICAgICAgICBDMkNvbG9yOjpUUkFOU0ZFUl9VTlNQRUNJRklFRCwgQzJDb2xvcjo6TUFUUklYX1VOU1BFQ0lGSUVEKSkKKyAgICAgICAgICAgICAgICAud2l0aEZpZWxkcyh7CisgICAgICAgICAgICAgICAgICAgIEMyRihtQ29sb3JBc3BlY3RzLCByYW5nZSkuaW5SYW5nZSgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQzJDb2xvcjo6UkFOR0VfVU5TUEVDSUZJRUQsIEMyQ29sb3I6OlJBTkdFX09USEVSKSwKKyAgICAgICAgICAgICAgICAgICAgQzJGKG1Db2xvckFzcGVjdHMsIHByaW1hcmllcykuaW5SYW5nZSgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQzJDb2xvcjo6UFJJTUFSSUVTX1VOU1BFQ0lGSUVELCBDMkNvbG9yOjpQUklNQVJJRVNfT1RIRVIpLAorICAgICAgICAgICAgICAgICAgICBDMkYobUNvbG9yQXNwZWN0cywgdHJhbnNmZXIpLmluUmFuZ2UoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEMyQ29sb3I6OlRSQU5TRkVSX1VOU1BFQ0lGSUVELCBDMkNvbG9yOjpUUkFOU0ZFUl9PVEhFUiksCisgICAgICAgICAgICAgICAgICAgIEMyRihtQ29sb3JBc3BlY3RzLCBtYXRyaXgpLmluUmFuZ2UoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEMyQ29sb3I6Ok1BVFJJWF9VTlNQRUNJRklFRCwgQzJDb2xvcjo6TUFUUklYX09USEVSKQorICAgICAgICAgICAgICAgIH0pCisgICAgICAgICAgICAgICAgLndpdGhTZXR0ZXIoQ29sb3JBc3BlY3RzU2V0dGVyLCBtRGVmYXVsdENvbG9yQXNwZWN0cywgbUNvZGVkQ29sb3JBc3BlY3RzKQorICAgICAgICAgICAgICAgIC5idWlsZCgpKTsKKworICAgICAgICAvLyBUT0RPOiBzdXBwb3J0IG1vcmUgZm9ybWF0cz8KKyAgICAgICAgYWRkUGFyYW1ldGVyKAorICAgICAgICAgICAgICAgIERlZmluZVBhcmFtKG1QaXhlbEZvcm1hdCwgQzJfUEFSQU1LRVlfUElYRUxfRk9STUFUKQorICAgICAgICAgICAgICAgIC53aXRoQ29uc3RWYWx1ZShuZXcgQzJTdHJlYW1QaXhlbEZvcm1hdEluZm86Om91dHB1dCgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwdSwgSEFMX1BJWEVMX0ZPUk1BVF9ZQ0JDUl80MjBfODg4KSkKKyAgICAgICAgICAgICAgICAuYnVpbGQoKSk7CisgICAgfQorCisgICAgc3RhdGljIEMyUiBTaXplU2V0dGVyKGJvb2wgbWF5QmxvY2ssIGNvbnN0IEMyUDxDMlN0cmVhbVBpY3R1cmVTaXplSW5mbzo6b3V0cHV0PiAmb2xkTWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgIEMyUDxDMlZpZGVvU2l6ZVN0cmVhbUluZm86Om91dHB1dD4gJm1lKSB7CisgICAgICAgICh2b2lkKW1heUJsb2NrOworICAgICAgICBDMlIgcmVzID0gQzJSOjpPaygpOworICAgICAgICBpZiAoIW1lLkYobWUudi53aWR0aCkuc3VwcG9ydHNBdEFsbChtZS52LndpZHRoKSkgeworICAgICAgICAgICAgcmVzID0gcmVzLnBsdXMoQzJTZXR0aW5nUmVzdWx0QnVpbGRlcjo6QmFkVmFsdWUobWUuRihtZS52LndpZHRoKSkpOworICAgICAgICAgICAgbWUuc2V0KCkud2lkdGggPSBvbGRNZS52LndpZHRoOworICAgICAgICB9CisgICAgICAgIGlmICghbWUuRihtZS52LmhlaWdodCkuc3VwcG9ydHNBdEFsbChtZS52LmhlaWdodCkpIHsKKyAgICAgICAgICAgIHJlcyA9IHJlcy5wbHVzKEMyU2V0dGluZ1Jlc3VsdEJ1aWxkZXI6OkJhZFZhbHVlKG1lLkYobWUudi5oZWlnaHQpKSk7CisgICAgICAgICAgICBtZS5zZXQoKS5oZWlnaHQgPSBvbGRNZS52LmhlaWdodDsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gcmVzOworICAgIH0KKworICAgIHN0YXRpYyBDMlIgTWF4UGljdHVyZVNpemVTZXR0ZXIoYm9vbCBtYXlCbG9jaywgQzJQPEMyU3RyZWFtTWF4UGljdHVyZVNpemVUdW5pbmc6Om91dHB1dD4gJm1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgQzJQPEMyU3RyZWFtUGljdHVyZVNpemVJbmZvOjpvdXRwdXQ+ICZzaXplKSB7CisgICAgICAgICh2b2lkKW1heUJsb2NrOworICAgICAgICAvLyBUT0RPOiBnZXQgbWF4IHdpZHRoL2hlaWdodCBmcm9tIHRoZSBzaXplJ3MgZmllbGQgaGVscGVycyB2cy4gaGFyZGNvZGluZworICAgICAgICBtZS5zZXQoKS53aWR0aCA9IGMyX21pbihjMl9tYXgobWUudi53aWR0aCwgc2l6ZS52LndpZHRoKSwgMTkyMHUpOworICAgICAgICBtZS5zZXQoKS5oZWlnaHQgPSBjMl9taW4oYzJfbWF4KG1lLnYuaGVpZ2h0LCBzaXplLnYuaGVpZ2h0KSwgMTA4OHUpOworICAgICAgICByZXR1cm4gQzJSOjpPaygpOworICAgIH0KKworICAgIHN0YXRpYyBDMlIgTWF4SW5wdXRTaXplU2V0dGVyKGJvb2wgbWF5QmxvY2ssIEMyUDxDMlN0cmVhbU1heEJ1ZmZlclNpemVJbmZvOjppbnB1dD4gJm1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEMyUDxDMlN0cmVhbU1heFBpY3R1cmVTaXplVHVuaW5nOjpvdXRwdXQ+ICZtYXhTaXplKSB7CisgICAgICAgICh2b2lkKW1heUJsb2NrOworICAgICAgICAvLyBhc3N1bWUgY29tcHJlc3Npb24gcmF0aW8gb2YgMQorICAgICAgICBtZS5zZXQoKS52YWx1ZSA9ICgoKG1heFNpemUudi53aWR0aCArIDE1KSAvIDE2KSAqICgobWF4U2l6ZS52LmhlaWdodCArIDE1KSAvIDE2KSAqIDM4NCk7CisgICAgICAgIHJldHVybiBDMlI6Ok9rKCk7CisgICAgfQorCisgICAgc3RhdGljIEMyUiBQcm9maWxlTGV2ZWxTZXR0ZXIoYm9vbCBtYXlCbG9jaywgQzJQPEMyU3RyZWFtUHJvZmlsZUxldmVsSW5mbzo6aW5wdXQ+ICZtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBDMlA8QzJTdHJlYW1QaWN0dXJlU2l6ZUluZm86Om91dHB1dD4gJnNpemUpIHsKKyAgICAgICAgKHZvaWQpbWF5QmxvY2s7CisgICAgICAgICh2b2lkKXNpemU7CisgICAgICAgICh2b2lkKW1lOyAgLy8gVE9ETzogdmFsaWRhdGUKKyAgICAgICAgcmV0dXJuIEMyUjo6T2soKTsKKyAgICB9CisKKyAgICBzdGF0aWMgQzJSIERlZmF1bHRDb2xvckFzcGVjdHNTZXR0ZXIoYm9vbCBtYXlCbG9jaywgQzJQPEMyU3RyZWFtQ29sb3JBc3BlY3RzVHVuaW5nOjpvdXRwdXQ+ICZtZSkgeworICAgICAgICAodm9pZCltYXlCbG9jazsKKyAgICAgICAgaWYgKG1lLnYucmFuZ2UgPiBDMkNvbG9yOjpSQU5HRV9PVEhFUikgeworICAgICAgICAgICAgICAgIG1lLnNldCgpLnJhbmdlID0gQzJDb2xvcjo6UkFOR0VfT1RIRVI7CisgICAgICAgIH0KKyAgICAgICAgaWYgKG1lLnYucHJpbWFyaWVzID4gQzJDb2xvcjo6UFJJTUFSSUVTX09USEVSKSB7CisgICAgICAgICAgICAgICAgbWUuc2V0KCkucHJpbWFyaWVzID0gQzJDb2xvcjo6UFJJTUFSSUVTX09USEVSOworICAgICAgICB9CisgICAgICAgIGlmIChtZS52LnRyYW5zZmVyID4gQzJDb2xvcjo6VFJBTlNGRVJfT1RIRVIpIHsKKyAgICAgICAgICAgICAgICBtZS5zZXQoKS50cmFuc2ZlciA9IEMyQ29sb3I6OlRSQU5TRkVSX09USEVSOworICAgICAgICB9CisgICAgICAgIGlmIChtZS52Lm1hdHJpeCA+IEMyQ29sb3I6Ok1BVFJJWF9PVEhFUikgeworICAgICAgICAgICAgICAgIG1lLnNldCgpLm1hdHJpeCA9IEMyQ29sb3I6Ok1BVFJJWF9PVEhFUjsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gQzJSOjpPaygpOworICAgIH0KKworICAgIHN0YXRpYyBDMlIgQ29kZWRDb2xvckFzcGVjdHNTZXR0ZXIoYm9vbCBtYXlCbG9jaywgQzJQPEMyU3RyZWFtQ29sb3JBc3BlY3RzSW5mbzo6aW5wdXQ+ICZtZSkgeworICAgICAgICAodm9pZCltYXlCbG9jazsKKyAgICAgICAgaWYgKG1lLnYucmFuZ2UgPiBDMkNvbG9yOjpSQU5HRV9PVEhFUikgeworICAgICAgICAgICAgICAgIG1lLnNldCgpLnJhbmdlID0gQzJDb2xvcjo6UkFOR0VfT1RIRVI7CisgICAgICAgIH0KKyAgICAgICAgaWYgKG1lLnYucHJpbWFyaWVzID4gQzJDb2xvcjo6UFJJTUFSSUVTX09USEVSKSB7CisgICAgICAgICAgICAgICAgbWUuc2V0KCkucHJpbWFyaWVzID0gQzJDb2xvcjo6UFJJTUFSSUVTX09USEVSOworICAgICAgICB9CisgICAgICAgIGlmIChtZS52LnRyYW5zZmVyID4gQzJDb2xvcjo6VFJBTlNGRVJfT1RIRVIpIHsKKyAgICAgICAgICAgICAgICBtZS5zZXQoKS50cmFuc2ZlciA9IEMyQ29sb3I6OlRSQU5TRkVSX09USEVSOworICAgICAgICB9CisgICAgICAgIGlmIChtZS52Lm1hdHJpeCA+IEMyQ29sb3I6Ok1BVFJJWF9PVEhFUikgeworICAgICAgICAgICAgICAgIG1lLnNldCgpLm1hdHJpeCA9IEMyQ29sb3I6Ok1BVFJJWF9PVEhFUjsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gQzJSOjpPaygpOworICAgIH0KKworICAgIHN0YXRpYyBDMlIgQ29sb3JBc3BlY3RzU2V0dGVyKGJvb2wgbWF5QmxvY2ssIEMyUDxDMlN0cmVhbUNvbG9yQXNwZWN0c0luZm86Om91dHB1dD4gJm1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEMyUDxDMlN0cmVhbUNvbG9yQXNwZWN0c1R1bmluZzo6b3V0cHV0PiAmZGVmLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEMyUDxDMlN0cmVhbUNvbG9yQXNwZWN0c0luZm86OmlucHV0PiAmY29kZWQpIHsKKyAgICAgICAgKHZvaWQpbWF5QmxvY2s7CisgICAgICAgIC8vIHRha2UgZGVmYXVsdCB2YWx1ZXMgZm9yIGFsbCB1bnNwZWNpZmllZCBmaWVsZHMsIGFuZCBjb2RlZCB2YWx1ZXMgZm9yIHNwZWNpZmllZCBvbmVzCisgICAgICAgIG1lLnNldCgpLnJhbmdlID0gY29kZWQudi5yYW5nZSA9PSBSQU5HRV9VTlNQRUNJRklFRCA/IGRlZi52LnJhbmdlIDogY29kZWQudi5yYW5nZTsKKyAgICAgICAgbWUuc2V0KCkucHJpbWFyaWVzID0gY29kZWQudi5wcmltYXJpZXMgPT0gUFJJTUFSSUVTX1VOU1BFQ0lGSUVECisgICAgICAgICAgICAgICAgPyBkZWYudi5wcmltYXJpZXMgOiBjb2RlZC52LnByaW1hcmllczsKKyAgICAgICAgbWUuc2V0KCkudHJhbnNmZXIgPSBjb2RlZC52LnRyYW5zZmVyID09IFRSQU5TRkVSX1VOU1BFQ0lGSUVECisgICAgICAgICAgICAgICAgPyBkZWYudi50cmFuc2ZlciA6IGNvZGVkLnYudHJhbnNmZXI7CisgICAgICAgIG1lLnNldCgpLm1hdHJpeCA9IGNvZGVkLnYubWF0cml4ID09IE1BVFJJWF9VTlNQRUNJRklFRCA/IGRlZi52Lm1hdHJpeCA6IGNvZGVkLnYubWF0cml4OworICAgICAgICByZXR1cm4gQzJSOjpPaygpOworICAgIH0KKworICAgIHN0ZDo6c2hhcmVkX3B0cjxDMlN0cmVhbUNvbG9yQXNwZWN0c0luZm86Om91dHB1dD4gZ2V0Q29sb3JBc3BlY3RzX2woKSB7CisgICAgICAgIHJldHVybiBtQ29sb3JBc3BlY3RzOworICAgIH0KKworcHJpdmF0ZToKKyAgICBzdGQ6OnNoYXJlZF9wdHI8QzJTdHJlYW1Qcm9maWxlTGV2ZWxJbmZvOjppbnB1dD4gbVByb2ZpbGVMZXZlbDsKKyAgICBzdGQ6OnNoYXJlZF9wdHI8QzJTdHJlYW1QaWN0dXJlU2l6ZUluZm86Om91dHB1dD4gbVNpemU7CisgICAgc3RkOjpzaGFyZWRfcHRyPEMyU3RyZWFtTWF4UGljdHVyZVNpemVUdW5pbmc6Om91dHB1dD4gbU1heFNpemU7CisgICAgc3RkOjpzaGFyZWRfcHRyPEMyU3RyZWFtTWF4QnVmZmVyU2l6ZUluZm86OmlucHV0PiBtTWF4SW5wdXRTaXplOworICAgIHN0ZDo6c2hhcmVkX3B0cjxDMlN0cmVhbUNvbG9ySW5mbzo6b3V0cHV0PiBtQ29sb3JJbmZvOworICAgIHN0ZDo6c2hhcmVkX3B0cjxDMlN0cmVhbUNvbG9yQXNwZWN0c0luZm86OmlucHV0PiBtQ29kZWRDb2xvckFzcGVjdHM7CisgICAgc3RkOjpzaGFyZWRfcHRyPEMyU3RyZWFtQ29sb3JBc3BlY3RzVHVuaW5nOjpvdXRwdXQ+IG1EZWZhdWx0Q29sb3JBc3BlY3RzOworICAgIHN0ZDo6c2hhcmVkX3B0cjxDMlN0cmVhbUNvbG9yQXNwZWN0c0luZm86Om91dHB1dD4gbUNvbG9yQXNwZWN0czsKKyAgICBzdGQ6OnNoYXJlZF9wdHI8QzJTdHJlYW1QaXhlbEZvcm1hdEluZm86Om91dHB1dD4gbVBpeGVsRm9ybWF0OworfTsKKworc3RhdGljIHNpemVfdCBnZXRDcHVDb3JlQ291bnQoKSB7CisgICAgbG9uZyBjcHVDb3JlQ291bnQgPSAxOworI2lmIGRlZmluZWQoX1NDX05QUk9DRVNTT1JTX09OTE4pCisgICAgY3B1Q29yZUNvdW50ID0gc3lzY29uZihfU0NfTlBST0NFU1NPUlNfT05MTik7CisjZWxzZQorICAgIC8vIF9TQ19OUFJPQ19PTkxOIG11c3QgYmUgZGVmaW5lZC4uLgorICAgIGNwdUNvcmVDb3VudCA9IHN5c2NvbmYoX1NDX05QUk9DX09OTE4pOworI2VuZGlmCisgICAgQ0hFQ0soY3B1Q29yZUNvdW50ID49IDEpOworICAgIEFMT0dWKCJOdW1iZXIgb2YgQ1BVIGNvcmVzOiAlbGQiLCBjcHVDb3JlQ291bnQpOworICAgIHJldHVybiAoc2l6ZV90KWNwdUNvcmVDb3VudDsKK30KKworc3RhdGljIHZvaWQgKml2ZF9hbGlnbmVkX21hbGxvYyhXT1JEMzIgYWxpZ25tZW50LCBXT1JEMzIgc2l6ZSkgeworICAgIHJldHVybiBtZW1hbGlnbihhbGlnbm1lbnQsIHNpemUpOworfQorCitzdGF0aWMgdm9pZCBpdmRfYWxpZ25lZF9mcmVlKHZvaWQgKm1lbSkgeworICAgIGZyZWUobWVtKTsKK30KKworQzJTb2Z0TXBlZzJEZWM6OkMyU29mdE1wZWcyRGVjKAorICAgICAgICBjb25zdCBjaGFyICpuYW1lLAorICAgICAgICBjMl9ub2RlX2lkX3QgaWQsCisgICAgICAgIGNvbnN0IHN0ZDo6c2hhcmVkX3B0cjxJbnRmSW1wbD4gJmludGZJbXBsKQorICAgIDogU2ltcGxlQzJDb21wb25lbnQoc3RkOjptYWtlX3NoYXJlZDxTaW1wbGVJbnRlcmZhY2U8SW50ZkltcGw+PihuYW1lLCBpZCwgaW50ZkltcGwpKSwKKyAgICAgICAgbUludGYoaW50ZkltcGwpLAorICAgICAgICBtRGVjSGFuZGxlKG51bGxwdHIpLAorICAgICAgICBtTWVtUmVjb3JkcyhudWxscHRyKSwKKyAgICAgICAgbU91dEJ1ZmZlckRyYWluKG51bGxwdHIpLAorICAgICAgICBtSXZDb2xvcmZvcm1hdChJVl9ZVVZfNDIwUCksCisgICAgICAgIG1XaWR0aCgzMjApLAorICAgICAgICBtSGVpZ2h0KDI0MCkgeworICAgIC8vIElmIGlucHV0IGR1bXAgaXMgZW5hYmxlZCwgdGhlbiBvcGVuIGNyZWF0ZSBhbiBlbXB0eSBmaWxlCisgICAgR0VORVJBVEVfRklMRV9OQU1FUygpOworICAgIENSRUFURV9EVU1QX0ZJTEUobUluRmlsZSk7Cit9CisKK0MyU29mdE1wZWcyRGVjOjp+QzJTb2Z0TXBlZzJEZWMoKSB7CisgICAgb25SZWxlYXNlKCk7Cit9CisKK2MyX3N0YXR1c190IEMyU29mdE1wZWcyRGVjOjpvbkluaXQoKSB7CisgICAgc3RhdHVzX3QgZXJyID0gaW5pdERlY29kZXIoKTsKKyAgICByZXR1cm4gZXJyID09IE9LID8gQzJfT0sgOiBDMl9DT1JSVVBURUQ7Cit9CisKK2MyX3N0YXR1c190IEMyU29mdE1wZWcyRGVjOjpvblN0b3AoKSB7CisgICAgaWYgKE9LICE9IHJlc2V0RGVjb2RlcigpKSByZXR1cm4gQzJfQ09SUlVQVEVEOworICAgIHJlc2V0UGx1Z2luKCk7CisgICAgcmV0dXJuIEMyX09LOworfQorCit2b2lkIEMyU29mdE1wZWcyRGVjOjpvblJlc2V0KCkgeworICAgICh2b2lkKSBvblN0b3AoKTsKK30KKwordm9pZCBDMlNvZnRNcGVnMkRlYzo6b25SZWxlYXNlKCkgeworICAgICh2b2lkKSBkZWxldGVEZWNvZGVyKCk7CisgICAgaWYgKG1PdXRCdWZmZXJEcmFpbikgeworICAgICAgICBpdmRfYWxpZ25lZF9mcmVlKG1PdXRCdWZmZXJEcmFpbik7CisgICAgICAgIG1PdXRCdWZmZXJEcmFpbiA9IG51bGxwdHI7CisgICAgfQorICAgIGlmIChtT3V0QmxvY2spIHsKKyAgICAgICAgbU91dEJsb2NrLnJlc2V0KCk7CisgICAgfQorICAgIGlmIChtTWVtUmVjb3JkcykgeworICAgICAgICBpdmRfYWxpZ25lZF9mcmVlKG1NZW1SZWNvcmRzKTsKKyAgICAgICAgbU1lbVJlY29yZHMgPSBudWxscHRyOworICAgIH0KK30KKworYzJfc3RhdHVzX3QgQzJTb2Z0TXBlZzJEZWM6Om9uRmx1c2hfc20oKSB7CisgICAgaWYgKE9LICE9IHNldEZsdXNoTW9kZSgpKSByZXR1cm4gQzJfQ09SUlVQVEVEOworCisgICAgdWludDMyX3QgZGlzcGxheVN0cmlkZSA9IG1TdHJpZGU7CisgICAgdWludDMyX3QgZGlzcGxheUhlaWdodCA9IG1IZWlnaHQ7CisgICAgdWludDMyX3QgYnVmZmVyU2l6ZSA9IGRpc3BsYXlTdHJpZGUgKiBkaXNwbGF5SGVpZ2h0ICogMyAvIDI7CisgICAgbU91dEJ1ZmZlckRyYWluID0gKHVpbnQ4X3QgKilpdmRfYWxpZ25lZF9tYWxsb2MoMTI4LCBidWZmZXJTaXplKTsKKyAgICBpZiAoIW1PdXRCdWZmZXJEcmFpbikgeworICAgICAgICBBTE9HRSgiY291bGQgbm90IGFsbG9jYXRlIHRtcCBvdXRwdXQgYnVmZmVyIChmb3IgZmx1c2gpIG9mIHNpemUgJXUgIiwgYnVmZmVyU2l6ZSk7CisgICAgICAgIHJldHVybiBDMl9OT19NRU1PUlk7CisgICAgfQorCisgICAgd2hpbGUgKHRydWUpIHsKKyAgICAgICAgaXZkX3ZpZGVvX2RlY29kZV9pcF90IHNfZGVjb2RlX2lwOworICAgICAgICBpdmRfdmlkZW9fZGVjb2RlX29wX3Qgc19kZWNvZGVfb3A7CisKKyAgICAgICAgc2V0RGVjb2RlQXJncygmc19kZWNvZGVfaXAsICZzX2RlY29kZV9vcCwgbnVsbHB0ciwgbnVsbHB0ciwgMCwgMCwgMCk7CisgICAgICAgICh2b2lkKSBpdmRlY19hcGlfZnVuY3Rpb24obURlY0hhbmRsZSwgJnNfZGVjb2RlX2lwLCAmc19kZWNvZGVfb3ApOworICAgICAgICBpZiAoMCA9PSBzX2RlY29kZV9vcC51NF9vdXRwdXRfcHJlc2VudCkgeworICAgICAgICAgICAgcmVzZXRQbHVnaW4oKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgfQorCisgICAgaWYgKG1PdXRCdWZmZXJEcmFpbikgeworICAgICAgICBpdmRfYWxpZ25lZF9mcmVlKG1PdXRCdWZmZXJEcmFpbik7CisgICAgICAgIG1PdXRCdWZmZXJEcmFpbiA9IG51bGxwdHI7CisgICAgfQorCisgICAgcmV0dXJuIEMyX09LOworfQorCitzdGF0dXNfdCBDMlNvZnRNcGVnMkRlYzo6Z2V0TnVtTWVtUmVjb3JkcygpIHsKKyAgICBpdl9udW1fbWVtX3JlY19pcF90IHNfbnVtX21lbV9yZWNfaXA7CisgICAgaXZfbnVtX21lbV9yZWNfb3BfdCBzX251bV9tZW1fcmVjX29wOworCisgICAgc19udW1fbWVtX3JlY19pcC51NF9zaXplID0gc2l6ZW9mKHNfbnVtX21lbV9yZWNfaXApOworICAgIHNfbnVtX21lbV9yZWNfaXAuZV9jbWQgPSBJVl9DTURfR0VUX05VTV9NRU1fUkVDOworICAgIHNfbnVtX21lbV9yZWNfb3AudTRfc2l6ZSA9IHNpemVvZihzX251bV9tZW1fcmVjX29wKTsKKworICAgIElWX0FQSV9DQUxMX1NUQVRVU19UIHN0YXR1cyA9IGl2ZGVjX2FwaV9mdW5jdGlvbihtRGVjSGFuZGxlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmc19udW1fbWVtX3JlY19pcCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnNfbnVtX21lbV9yZWNfb3ApOworICAgIGlmIChJVl9TVUNDRVNTICE9IHN0YXR1cykgeworICAgICAgICBBTE9HRSgiRXJyb3IgaW4gZ2V0dGluZyBtZW0gcmVjb3JkczogMHgleCIsIHNfbnVtX21lbV9yZWNfb3AudTRfZXJyb3JfY29kZSk7CisgICAgICAgIHJldHVybiBVTktOT1dOX0VSUk9SOworICAgIH0KKyAgICBtTnVtTWVtUmVjb3JkcyA9IHNfbnVtX21lbV9yZWNfb3AudTRfbnVtX21lbV9yZWM7CisKKyAgICByZXR1cm4gT0s7Cit9CisKK3N0YXR1c190IEMyU29mdE1wZWcyRGVjOjpmaWxsTWVtUmVjb3JkcygpIHsKKyAgICBpdl9tZW1fcmVjX3QgKnBzX21lbV9yZWMgPSAoaXZfbWVtX3JlY190ICopIGl2ZF9hbGlnbmVkX21hbGxvYygKKyAgICAgICAgICAgIDEyOCwgbU51bU1lbVJlY29yZHMgKiBzaXplb2YoaXZfbWVtX3JlY190KSk7CisgICAgaWYgKCFwc19tZW1fcmVjKSB7CisgICAgICAgIEFMT0dFKCJBbGxvY2F0aW9uIGZhaWx1cmUiKTsKKyAgICAgICAgcmV0dXJuIE5PX01FTU9SWTsKKyAgICB9CisgICAgbWVtc2V0KHBzX21lbV9yZWMsIDAsIG1OdW1NZW1SZWNvcmRzICogc2l6ZW9mKGl2X21lbV9yZWNfdCkpOworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbU51bU1lbVJlY29yZHM7IGkrKykKKyAgICAgICAgcHNfbWVtX3JlY1tpXS51NF9zaXplID0gc2l6ZW9mKGl2X21lbV9yZWNfdCk7CisgICAgbU1lbVJlY29yZHMgPSBwc19tZW1fcmVjOworCisgICAgaXZkZXh0X2ZpbGxfbWVtX3JlY19pcF90IHNfZmlsbF9tZW1faXA7CisgICAgaXZkZXh0X2ZpbGxfbWVtX3JlY19vcF90IHNfZmlsbF9tZW1fb3A7CisKKyAgICBzX2ZpbGxfbWVtX2lwLnNfaXZkX2ZpbGxfbWVtX3JlY19pcF90LnU0X3NpemUgPSBzaXplb2YoaXZkZXh0X2ZpbGxfbWVtX3JlY19pcF90KTsKKyAgICBzX2ZpbGxfbWVtX2lwLnU0X3NoYXJlX2Rpc3BfYnVmID0gMDsKKyAgICBzX2ZpbGxfbWVtX2lwLmVfb3V0cHV0X2Zvcm1hdCA9IG1JdkNvbG9yZm9ybWF0OworICAgIHNfZmlsbF9tZW1faXAudTRfZGVpbnRlcmxhY2UgPSAxOworICAgIHNfZmlsbF9tZW1faXAuc19pdmRfZmlsbF9tZW1fcmVjX2lwX3QuZV9jbWQgPSBJVl9DTURfRklMTF9OVU1fTUVNX1JFQzsKKyAgICBzX2ZpbGxfbWVtX2lwLnNfaXZkX2ZpbGxfbWVtX3JlY19pcF90LnB2X21lbV9yZWNfbG9jYXRpb24gPSBtTWVtUmVjb3JkczsKKyAgICBzX2ZpbGxfbWVtX2lwLnNfaXZkX2ZpbGxfbWVtX3JlY19pcF90LnU0X21heF9mcm1fd2QgPSBtV2lkdGg7CisgICAgc19maWxsX21lbV9pcC5zX2l2ZF9maWxsX21lbV9yZWNfaXBfdC51NF9tYXhfZnJtX2h0ID0gbUhlaWdodDsKKyAgICBzX2ZpbGxfbWVtX29wLnNfaXZkX2ZpbGxfbWVtX3JlY19vcF90LnU0X3NpemUgPSBzaXplb2YoaXZkZXh0X2ZpbGxfbWVtX3JlY19vcF90KTsKKyAgICBJVl9BUElfQ0FMTF9TVEFUVVNfVCBzdGF0dXMgPSBpdmRlY19hcGlfZnVuY3Rpb24obURlY0hhbmRsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnNfZmlsbF9tZW1faXAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZzX2ZpbGxfbWVtX29wKTsKKyAgICBpZiAoSVZfU1VDQ0VTUyAhPSBzdGF0dXMpIHsKKyAgICAgICAgQUxPR0UoIkVycm9yIGluIGZpbGxpbmcgbWVtIHJlY29yZHM6IDB4JXgiLAorICAgICAgICAgICAgICBzX2ZpbGxfbWVtX29wLnNfaXZkX2ZpbGxfbWVtX3JlY19vcF90LnU0X2Vycm9yX2NvZGUpOworICAgICAgICByZXR1cm4gVU5LTk9XTl9FUlJPUjsKKyAgICB9CisKKyAgICBDSEVDS19FUShtTnVtTWVtUmVjb3Jkcywgc19maWxsX21lbV9vcC5zX2l2ZF9maWxsX21lbV9yZWNfb3BfdC51NF9udW1fbWVtX3JlY19maWxsZWQpOworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbU51bU1lbVJlY29yZHM7IGkrKywgcHNfbWVtX3JlYysrKSB7CisgICAgICAgIHBzX21lbV9yZWMtPnB2X2Jhc2UgPSBpdmRfYWxpZ25lZF9tYWxsb2MoCisgICAgICAgICAgICAgICAgcHNfbWVtX3JlYy0+dTRfbWVtX2FsaWdubWVudCwgcHNfbWVtX3JlYy0+dTRfbWVtX3NpemUpOworICAgICAgICBpZiAoIXBzX21lbV9yZWMtPnB2X2Jhc2UpIHsKKyAgICAgICAgICAgIEFMT0dFKCJBbGxvY2F0aW9uIGZhaWx1cmUgZm9yIG1lbW9yeSByZWNvcmQgIyV6dSBvZiBzaXplICV1IiwKKyAgICAgICAgICAgICAgICAgIGksIHBzX21lbV9yZWMtPnU0X21lbV9zaXplKTsKKyAgICAgICAgICAgIHJldHVybiBOT19NRU1PUlk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gT0s7Cit9CisKK3N0YXR1c190IEMyU29mdE1wZWcyRGVjOjpjcmVhdGVEZWNvZGVyKCkgeworICAgIGl2ZGV4dF9pbml0X2lwX3Qgc19pbml0X2lwOworICAgIGl2ZGV4dF9pbml0X29wX3Qgc19pbml0X29wOworCisgICAgc19pbml0X2lwLnNfaXZkX2luaXRfaXBfdC51NF9zaXplID0gc2l6ZW9mKGl2ZGV4dF9pbml0X2lwX3QpOworICAgIHNfaW5pdF9pcC5zX2l2ZF9pbml0X2lwX3QuZV9jbWQgPSAoSVZEX0FQSV9DT01NQU5EX1RZUEVfVClJVl9DTURfSU5JVDsKKyAgICBzX2luaXRfaXAuc19pdmRfaW5pdF9pcF90LnB2X21lbV9yZWNfbG9jYXRpb24gPSBtTWVtUmVjb3JkczsKKyAgICBzX2luaXRfaXAuc19pdmRfaW5pdF9pcF90LnU0X2ZybV9tYXhfd2QgPSBtV2lkdGg7CisgICAgc19pbml0X2lwLnNfaXZkX2luaXRfaXBfdC51NF9mcm1fbWF4X2h0ID0gbUhlaWdodDsKKyAgICBzX2luaXRfaXAudTRfc2hhcmVfZGlzcF9idWYgPSAwOworICAgIHNfaW5pdF9pcC51NF9kZWludGVybGFjZSA9IDE7CisgICAgc19pbml0X2lwLnNfaXZkX2luaXRfaXBfdC51NF9udW1fbWVtX3JlYyA9IG1OdW1NZW1SZWNvcmRzOworICAgIHNfaW5pdF9pcC5zX2l2ZF9pbml0X2lwX3QuZV9vdXRwdXRfZm9ybWF0ID0gbUl2Q29sb3Jmb3JtYXQ7CisgICAgc19pbml0X29wLnNfaXZkX2luaXRfb3BfdC51NF9zaXplID0gc2l6ZW9mKGl2ZGV4dF9pbml0X29wX3QpOworCisgICAgbURlY0hhbmRsZSA9IChpdl9vYmpfdCAqKW1NZW1SZWNvcmRzWzBdLnB2X2Jhc2U7CisgICAgbURlY0hhbmRsZS0+cHZfZnhucyA9ICh2b2lkICopaXZkZWNfYXBpX2Z1bmN0aW9uOworICAgIG1EZWNIYW5kbGUtPnU0X3NpemUgPSBzaXplb2YoaXZfb2JqX3QpOworCisgICAgSVZfQVBJX0NBTExfU1RBVFVTX1Qgc3RhdHVzID0gaXZkZWNfYXBpX2Z1bmN0aW9uKG1EZWNIYW5kbGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZzX2luaXRfaXAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZzX2luaXRfb3ApOworICAgIGlmIChzdGF0dXMgIT0gSVZfU1VDQ0VTUykgeworICAgICAgICBBTE9HRSgiZXJyb3IgaW4gJXM6IDB4JXgiLCBfX2Z1bmNfXywKKyAgICAgICAgICAgICAgc19pbml0X29wLnNfaXZkX2luaXRfb3BfdC51NF9lcnJvcl9jb2RlKTsKKyAgICAgICAgcmV0dXJuIFVOS05PV05fRVJST1I7CisgICAgfQorCisgICAgcmV0dXJuIE9LOworfQorCitzdGF0dXNfdCBDMlNvZnRNcGVnMkRlYzo6c2V0TnVtQ29yZXMoKSB7CisgICAgaXZkZXh0X2N0bF9zZXRfbnVtX2NvcmVzX2lwX3Qgc19zZXRfbnVtX2NvcmVzX2lwOworICAgIGl2ZGV4dF9jdGxfc2V0X251bV9jb3Jlc19vcF90IHNfc2V0X251bV9jb3Jlc19vcDsKKworICAgIHNfc2V0X251bV9jb3Jlc19pcC51NF9zaXplID0gc2l6ZW9mKGl2ZGV4dF9jdGxfc2V0X251bV9jb3Jlc19pcF90KTsKKyAgICBzX3NldF9udW1fY29yZXNfaXAuZV9jbWQgPSBJVkRfQ01EX1ZJREVPX0NUTDsKKyAgICBzX3NldF9udW1fY29yZXNfaXAuZV9zdWJfY21kID0gSVZERVhUX0NNRF9DVExfU0VUX05VTV9DT1JFUzsKKyAgICBzX3NldF9udW1fY29yZXNfaXAudTRfbnVtX2NvcmVzID0gbU51bUNvcmVzOworICAgIHNfc2V0X251bV9jb3Jlc19vcC51NF9zaXplID0gc2l6ZW9mKGl2ZGV4dF9jdGxfc2V0X251bV9jb3Jlc19vcF90KTsKKyAgICBJVl9BUElfQ0FMTF9TVEFUVVNfVCBzdGF0dXMgPSBpdmRlY19hcGlfZnVuY3Rpb24obURlY0hhbmRsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnNfc2V0X251bV9jb3Jlc19pcCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnNfc2V0X251bV9jb3Jlc19vcCk7CisgICAgaWYgKHN0YXR1cyAhPSBJVl9TVUNDRVNTKSB7CisgICAgICAgIEFMT0dEKCJlcnJvciBpbiAlczogMHgleCIsIF9fZnVuY19fLCBzX3NldF9udW1fY29yZXNfb3AudTRfZXJyb3JfY29kZSk7CisgICAgICAgIHJldHVybiBVTktOT1dOX0VSUk9SOworICAgIH0KKworICAgIHJldHVybiBPSzsKK30KKworc3RhdHVzX3QgQzJTb2Z0TXBlZzJEZWM6OnNldFBhcmFtcyhzaXplX3Qgc3RyaWRlKSB7CisgICAgaXZkX2N0bF9zZXRfY29uZmlnX2lwX3Qgc19zZXRfZHluX3BhcmFtc19pcDsKKyAgICBpdmRfY3RsX3NldF9jb25maWdfb3BfdCBzX3NldF9keW5fcGFyYW1zX29wOworCisgICAgc19zZXRfZHluX3BhcmFtc19pcC51NF9zaXplID0gc2l6ZW9mKGl2ZF9jdGxfc2V0X2NvbmZpZ19pcF90KTsKKyAgICBzX3NldF9keW5fcGFyYW1zX2lwLmVfY21kID0gSVZEX0NNRF9WSURFT19DVEw7CisgICAgc19zZXRfZHluX3BhcmFtc19pcC5lX3N1Yl9jbWQgPSBJVkRfQ01EX0NUTF9TRVRQQVJBTVM7CisgICAgc19zZXRfZHluX3BhcmFtc19pcC51NF9kaXNwX3dkID0gKFVXT1JEMzIpIHN0cmlkZTsKKyAgICBzX3NldF9keW5fcGFyYW1zX2lwLmVfZnJtX3NraXBfbW9kZSA9IElWRF9TS0lQX05PTkU7CisgICAgc19zZXRfZHluX3BhcmFtc19pcC5lX2ZybV9vdXRfbW9kZSA9IElWRF9ESVNQTEFZX0ZSQU1FX09VVDsKKyAgICBzX3NldF9keW5fcGFyYW1zX2lwLmVfdmlkX2RlY19tb2RlID0gSVZEX0RFQ09ERV9GUkFNRTsKKyAgICBzX3NldF9keW5fcGFyYW1zX29wLnU0X3NpemUgPSBzaXplb2YoaXZkX2N0bF9zZXRfY29uZmlnX29wX3QpOworICAgIElWX0FQSV9DQUxMX1NUQVRVU19UIHN0YXR1cyA9IGl2ZGVjX2FwaV9mdW5jdGlvbihtRGVjSGFuZGxlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmc19zZXRfZHluX3BhcmFtc19pcCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnNfc2V0X2R5bl9wYXJhbXNfb3ApOworICAgIGlmIChzdGF0dXMgIT0gSVZfU1VDQ0VTUykgeworICAgICAgICBBTE9HRSgiZXJyb3IgaW4gJXM6IDB4JXgiLCBfX2Z1bmNfXywgc19zZXRfZHluX3BhcmFtc19vcC51NF9lcnJvcl9jb2RlKTsKKyAgICAgICAgcmV0dXJuIFVOS05PV05fRVJST1I7CisgICAgfQorCisgICAgcmV0dXJuIE9LOworfQorCitzdGF0dXNfdCBDMlNvZnRNcGVnMkRlYzo6Z2V0VmVyc2lvbigpIHsKKyAgICBpdmRfY3RsX2dldHZlcnNpb25pbmZvX2lwX3Qgc19nZXRfdmVyc2lvbmluZm9faXA7CisgICAgaXZkX2N0bF9nZXR2ZXJzaW9uaW5mb19vcF90IHNfZ2V0X3ZlcnNpb25pbmZvX29wOworICAgIFVXT1JEOCBhdTFfYnVmWzUxMl07CisKKyAgICBzX2dldF92ZXJzaW9uaW5mb19pcC51NF9zaXplID0gc2l6ZW9mKGl2ZF9jdGxfZ2V0dmVyc2lvbmluZm9faXBfdCk7CisgICAgc19nZXRfdmVyc2lvbmluZm9faXAuZV9jbWQgPSBJVkRfQ01EX1ZJREVPX0NUTDsKKyAgICBzX2dldF92ZXJzaW9uaW5mb19pcC5lX3N1Yl9jbWQgPSBJVkRfQ01EX0NUTF9HRVRWRVJTSU9OOworICAgIHNfZ2V0X3ZlcnNpb25pbmZvX2lwLnB2X3ZlcnNpb25fYnVmZmVyID0gYXUxX2J1ZjsKKyAgICBzX2dldF92ZXJzaW9uaW5mb19pcC51NF92ZXJzaW9uX2J1ZmZlcl9zaXplID0gc2l6ZW9mKGF1MV9idWYpOworICAgIHNfZ2V0X3ZlcnNpb25pbmZvX29wLnU0X3NpemUgPSBzaXplb2YoaXZkX2N0bF9nZXR2ZXJzaW9uaW5mb19vcF90KTsKKyAgICBJVl9BUElfQ0FMTF9TVEFUVVNfVCBzdGF0dXMgPSBpdmRlY19hcGlfZnVuY3Rpb24obURlY0hhbmRsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnNfZ2V0X3ZlcnNpb25pbmZvX2lwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmc19nZXRfdmVyc2lvbmluZm9fb3ApOworICAgIGlmIChzdGF0dXMgIT0gSVZfU1VDQ0VTUykgeworICAgICAgICBBTE9HRCgiZXJyb3IgaW4gJXM6IDB4JXgiLCBfX2Z1bmNfXywKKyAgICAgICAgICAgICAgc19nZXRfdmVyc2lvbmluZm9fb3AudTRfZXJyb3JfY29kZSk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgQUxPR1YoIml0dGlhbSBkZWNvZGVyIHZlcnNpb24gbnVtYmVyOiAlcyIsCisgICAgICAgICAgICAgIChjaGFyICopIHNfZ2V0X3ZlcnNpb25pbmZvX2lwLnB2X3ZlcnNpb25fYnVmZmVyKTsKKyAgICB9CisKKyAgICByZXR1cm4gT0s7Cit9CisKK3N0YXR1c190IEMyU29mdE1wZWcyRGVjOjppbml0RGVjb2RlcigpIHsKKyAgICBzdGF0dXNfdCByZXQgPSBnZXROdW1NZW1SZWNvcmRzKCk7CisgICAgaWYgKE9LICE9IHJldCkgcmV0dXJuIHJldDsKKworICAgIHJldCA9IGZpbGxNZW1SZWNvcmRzKCk7CisgICAgaWYgKE9LICE9IHJldCkgcmV0dXJuIHJldDsKKworICAgIGlmIChPSyAhPSBjcmVhdGVEZWNvZGVyKCkpIHJldHVybiBVTktOT1dOX0VSUk9SOworCisgICAgbU51bUNvcmVzID0gTUlOKGdldENwdUNvcmVDb3VudCgpLCBNQVhfTlVNX0NPUkVTKTsKKyAgICBtU3RyaWRlID0gQUxJR042NChtV2lkdGgpOworICAgIG1TaWduYWxsZWRFcnJvciA9IGZhbHNlOworICAgIHJlc2V0UGx1Z2luKCk7CisgICAgKHZvaWQpIHNldE51bUNvcmVzKCk7CisgICAgaWYgKE9LICE9IHNldFBhcmFtcyhtU3RyaWRlKSkgcmV0dXJuIFVOS05PV05fRVJST1I7CisgICAgKHZvaWQpIGdldFZlcnNpb24oKTsKKworICAgIHJldHVybiBPSzsKK30KKworYm9vbCBDMlNvZnRNcGVnMkRlYzo6c2V0RGVjb2RlQXJncyhpdmRfdmlkZW9fZGVjb2RlX2lwX3QgKnBzX2RlY29kZV9pcCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXZkX3ZpZGVvX2RlY29kZV9vcF90ICpwc19kZWNvZGVfb3AsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEMyUmVhZFZpZXcgKmluQnVmZmVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDMkdyYXBoaWNWaWV3ICpvdXRCdWZmZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBpbk9mZnNldCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IGluU2l6ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3QgdHNNYXJrZXIpIHsKKyAgICB1aW50MzJfdCBkaXNwbGF5U3RyaWRlID0gbVN0cmlkZTsKKyAgICB1aW50MzJfdCBkaXNwbGF5SGVpZ2h0ID0gbUhlaWdodDsKKyAgICBzaXplX3QgbHVtYVNpemUgPSBkaXNwbGF5U3RyaWRlICogZGlzcGxheUhlaWdodDsKKyAgICBzaXplX3QgY2hyb21hU2l6ZSA9IGx1bWFTaXplID4+IDI7CisKKyAgICBwc19kZWNvZGVfaXAtPnU0X3NpemUgPSBzaXplb2YoaXZkX3ZpZGVvX2RlY29kZV9pcF90KTsKKyAgICBwc19kZWNvZGVfaXAtPmVfY21kID0gSVZEX0NNRF9WSURFT19ERUNPREU7CisgICAgaWYgKGluQnVmZmVyKSB7CisgICAgICAgIHBzX2RlY29kZV9pcC0+dTRfdHMgPSB0c01hcmtlcjsKKyAgICAgICAgcHNfZGVjb2RlX2lwLT5wdl9zdHJlYW1fYnVmZmVyID0gY29uc3RfY2FzdDx1aW50OF90ICo+KGluQnVmZmVyLT5kYXRhKCkgKyBpbk9mZnNldCk7CisgICAgICAgIHBzX2RlY29kZV9pcC0+dTRfbnVtX0J5dGVzID0gaW5TaXplOworICAgIH0gZWxzZSB7CisgICAgICAgIHBzX2RlY29kZV9pcC0+dTRfdHMgPSAwOworICAgICAgICBwc19kZWNvZGVfaXAtPnB2X3N0cmVhbV9idWZmZXIgPSBudWxscHRyOworICAgICAgICBwc19kZWNvZGVfaXAtPnU0X251bV9CeXRlcyA9IDA7CisgICAgfQorICAgIHBzX2RlY29kZV9pcC0+c19vdXRfYnVmZmVyLnU0X21pbl9vdXRfYnVmX3NpemVbMF0gPSBsdW1hU2l6ZTsKKyAgICBwc19kZWNvZGVfaXAtPnNfb3V0X2J1ZmZlci51NF9taW5fb3V0X2J1Zl9zaXplWzFdID0gY2hyb21hU2l6ZTsKKyAgICBwc19kZWNvZGVfaXAtPnNfb3V0X2J1ZmZlci51NF9taW5fb3V0X2J1Zl9zaXplWzJdID0gY2hyb21hU2l6ZTsKKyAgICBpZiAob3V0QnVmZmVyKSB7CisgICAgICAgIGlmIChvdXRCdWZmZXItPndpZHRoKCkgPCBkaXNwbGF5U3RyaWRlIHx8IG91dEJ1ZmZlci0+aGVpZ2h0KCkgPCBkaXNwbGF5SGVpZ2h0KSB7CisgICAgICAgICAgICBBTE9HRSgiT3V0cHV0IGJ1ZmZlciB0b28gc21hbGw6IHByb3ZpZGVkICglZHglZCkgcmVxdWlyZWQgKCV1eCV1KSIsCisgICAgICAgICAgICAgICAgICBvdXRCdWZmZXItPndpZHRoKCksIG91dEJ1ZmZlci0+aGVpZ2h0KCksIGRpc3BsYXlTdHJpZGUsIGRpc3BsYXlIZWlnaHQpOworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgICAgIHBzX2RlY29kZV9pcC0+c19vdXRfYnVmZmVyLnB1MV9idWZzWzBdID0gb3V0QnVmZmVyLT5kYXRhKClbQzJQbGFuYXJMYXlvdXQ6OlBMQU5FX1ldOworICAgICAgICBwc19kZWNvZGVfaXAtPnNfb3V0X2J1ZmZlci5wdTFfYnVmc1sxXSA9IG91dEJ1ZmZlci0+ZGF0YSgpW0MyUGxhbmFyTGF5b3V0OjpQTEFORV9VXTsKKyAgICAgICAgcHNfZGVjb2RlX2lwLT5zX291dF9idWZmZXIucHUxX2J1ZnNbMl0gPSBvdXRCdWZmZXItPmRhdGEoKVtDMlBsYW5hckxheW91dDo6UExBTkVfVl07CisgICAgfSBlbHNlIHsKKyAgICAgICAgcHNfZGVjb2RlX2lwLT5zX291dF9idWZmZXIucHUxX2J1ZnNbMF0gPSBtT3V0QnVmZmVyRHJhaW47CisgICAgICAgIHBzX2RlY29kZV9pcC0+c19vdXRfYnVmZmVyLnB1MV9idWZzWzFdID0gbU91dEJ1ZmZlckRyYWluICsgbHVtYVNpemU7CisgICAgICAgIHBzX2RlY29kZV9pcC0+c19vdXRfYnVmZmVyLnB1MV9idWZzWzJdID0gbU91dEJ1ZmZlckRyYWluICsgbHVtYVNpemUgKyBjaHJvbWFTaXplOworICAgIH0KKyAgICBwc19kZWNvZGVfaXAtPnNfb3V0X2J1ZmZlci51NF9udW1fYnVmcyA9IDM7CisgICAgcHNfZGVjb2RlX29wLT51NF9zaXplID0gc2l6ZW9mKGl2ZF92aWRlb19kZWNvZGVfb3BfdCk7CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworCitib29sIEMyU29mdE1wZWcyRGVjOjpnZXRTZXFJbmZvKCkgeworICAgIGl2ZGV4dF9jdGxfZ2V0X3NlcV9pbmZvX2lwX3Qgc19jdGxfZ2V0X3NlcV9pbmZvX2lwOworICAgIGl2ZGV4dF9jdGxfZ2V0X3NlcV9pbmZvX29wX3Qgc19jdGxfZ2V0X3NlcV9pbmZvX29wOworCisgICAgc19jdGxfZ2V0X3NlcV9pbmZvX2lwLnU0X3NpemUgPSBzaXplb2YoaXZkZXh0X2N0bF9nZXRfc2VxX2luZm9faXBfdCk7CisgICAgc19jdGxfZ2V0X3NlcV9pbmZvX2lwLmVfY21kID0gSVZEX0NNRF9WSURFT19DVEw7CisgICAgc19jdGxfZ2V0X3NlcV9pbmZvX2lwLmVfc3ViX2NtZCA9CisgICAgICAgIChJVkRfQ09OVFJPTF9BUElfQ09NTUFORF9UWVBFX1QpSU1QRUcyRF9DTURfQ1RMX0dFVF9TRVFfSU5GTzsKKyAgICBzX2N0bF9nZXRfc2VxX2luZm9fb3AudTRfc2l6ZSA9IHNpemVvZihpdmRleHRfY3RsX2dldF9zZXFfaW5mb19vcF90KTsKKyAgICBJVl9BUElfQ0FMTF9TVEFUVVNfVCBzdGF0dXMgPSBpdmRlY19hcGlfZnVuY3Rpb24obURlY0hhbmRsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnNfY3RsX2dldF9zZXFfaW5mb19pcCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnNfY3RsX2dldF9zZXFfaW5mb19vcCk7CisgICAgaWYgKHN0YXR1cyAhPSBJVl9TVUNDRVNTKSB7CisgICAgICAgIEFMT0dXKCJFcnJvciBpbiBnZXR0aW5nIFNlcXVlbmNlIGluZm86IDB4JXgiLCBzX2N0bF9nZXRfc2VxX2luZm9fb3AudTRfZXJyb3JfY29kZSk7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBWdWlDb2xvckFzcGVjdHMgdnVpQ29sb3JBc3BlY3RzOworICAgIHZ1aUNvbG9yQXNwZWN0cy5wcmltYXJpZXMgPSBzX2N0bF9nZXRfc2VxX2luZm9fb3AudTFfY29sb3VyX3ByaW1hcmllczsKKyAgICB2dWlDb2xvckFzcGVjdHMudHJhbnNmZXIgPSBzX2N0bF9nZXRfc2VxX2luZm9fb3AudTFfdHJhbnNmZXJfY2hhcmFjdGVyaXN0aWNzOworICAgIHZ1aUNvbG9yQXNwZWN0cy5jb2VmZnMgPSBzX2N0bF9nZXRfc2VxX2luZm9fb3AudTFfbWF0cml4X2NvZWZmaWNpZW50czsKKyAgICB2dWlDb2xvckFzcGVjdHMuZnVsbFJhbmdlID0gIGZhbHNlOyAgLy8gbXBlZzIgdmlkZW8gaGFzIGxpbWl0ZWQgcmFuZ2UuCisKKyAgICAvLyBjb252ZXJ0IHZ1aSBhc3BlY3RzIHRvIEMyIHZhbHVlcyBpZiBjaGFuZ2VkCisgICAgaWYgKCEodnVpQ29sb3JBc3BlY3RzID09IG1CaXRzdHJlYW1Db2xvckFzcGVjdHMpKSB7CisgICAgICAgIG1CaXRzdHJlYW1Db2xvckFzcGVjdHMgPSB2dWlDb2xvckFzcGVjdHM7CisgICAgICAgIENvbG9yQXNwZWN0cyBzZkFzcGVjdHM7CisgICAgICAgIEMyU3RyZWFtQ29sb3JBc3BlY3RzSW5mbzo6aW5wdXQgY29kZWRBc3BlY3RzID0geyAwdSB9OworICAgICAgICBDb2xvclV0aWxzOjpjb252ZXJ0SXNvQ29sb3JBc3BlY3RzVG9Db2RlY0FzcGVjdHMoCisgICAgICAgICAgICAgICAgdnVpQ29sb3JBc3BlY3RzLnByaW1hcmllcywgdnVpQ29sb3JBc3BlY3RzLnRyYW5zZmVyLCB2dWlDb2xvckFzcGVjdHMuY29lZmZzLAorICAgICAgICAgICAgICAgIHZ1aUNvbG9yQXNwZWN0cy5mdWxsUmFuZ2UsIHNmQXNwZWN0cyk7CisgICAgICAgIGlmICghQzJNYXBwZXI6Om1hcChzZkFzcGVjdHMubVByaW1hcmllcywgJmNvZGVkQXNwZWN0cy5wcmltYXJpZXMpKSB7CisgICAgICAgICAgICBjb2RlZEFzcGVjdHMucHJpbWFyaWVzID0gQzJDb2xvcjo6UFJJTUFSSUVTX1VOU1BFQ0lGSUVEOworICAgICAgICB9CisgICAgICAgIGlmICghQzJNYXBwZXI6Om1hcChzZkFzcGVjdHMubVJhbmdlLCAmY29kZWRBc3BlY3RzLnJhbmdlKSkgeworICAgICAgICAgICAgY29kZWRBc3BlY3RzLnJhbmdlID0gQzJDb2xvcjo6UkFOR0VfVU5TUEVDSUZJRUQ7CisgICAgICAgIH0KKyAgICAgICAgaWYgKCFDMk1hcHBlcjo6bWFwKHNmQXNwZWN0cy5tTWF0cml4Q29lZmZzLCAmY29kZWRBc3BlY3RzLm1hdHJpeCkpIHsKKyAgICAgICAgICAgIGNvZGVkQXNwZWN0cy5tYXRyaXggPSBDMkNvbG9yOjpNQVRSSVhfVU5TUEVDSUZJRUQ7CisgICAgICAgIH0KKyAgICAgICAgaWYgKCFDMk1hcHBlcjo6bWFwKHNmQXNwZWN0cy5tVHJhbnNmZXIsICZjb2RlZEFzcGVjdHMudHJhbnNmZXIpKSB7CisgICAgICAgICAgICBjb2RlZEFzcGVjdHMudHJhbnNmZXIgPSBDMkNvbG9yOjpUUkFOU0ZFUl9VTlNQRUNJRklFRDsKKyAgICAgICAgfQorICAgICAgICBzdGQ6OnZlY3RvcjxzdGQ6OnVuaXF1ZV9wdHI8QzJTZXR0aW5nUmVzdWx0Pj4gZmFpbHVyZXM7CisgICAgICAgICh2b2lkKW1JbnRmLT5jb25maWcoeyZjb2RlZEFzcGVjdHN9LCBDMl9NQVlfQkxPQ0ssICZmYWlsdXJlcyk7CisgICAgfQorICAgIHJldHVybiB0cnVlOworfQorCitzdGF0dXNfdCBDMlNvZnRNcGVnMkRlYzo6c2V0Rmx1c2hNb2RlKCkgeworICAgIGl2ZF9jdGxfZmx1c2hfaXBfdCBzX3NldF9mbHVzaF9pcDsKKyAgICBpdmRfY3RsX2ZsdXNoX29wX3Qgc19zZXRfZmx1c2hfb3A7CisKKyAgICBzX3NldF9mbHVzaF9pcC51NF9zaXplID0gc2l6ZW9mKGl2ZF9jdGxfZmx1c2hfaXBfdCk7CisgICAgc19zZXRfZmx1c2hfaXAuZV9jbWQgPSBJVkRfQ01EX1ZJREVPX0NUTDsKKyAgICBzX3NldF9mbHVzaF9pcC5lX3N1Yl9jbWQgPSBJVkRfQ01EX0NUTF9GTFVTSDsKKyAgICBzX3NldF9mbHVzaF9vcC51NF9zaXplID0gc2l6ZW9mKGl2ZF9jdGxfZmx1c2hfb3BfdCk7CisgICAgSVZfQVBJX0NBTExfU1RBVFVTX1Qgc3RhdHVzID0gaXZkZWNfYXBpX2Z1bmN0aW9uKG1EZWNIYW5kbGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZzX3NldF9mbHVzaF9pcCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnNfc2V0X2ZsdXNoX29wKTsKKyAgICBpZiAoc3RhdHVzICE9IElWX1NVQ0NFU1MpIHsKKyAgICAgICAgQUxPR0UoImVycm9yIGluICVzOiAweCV4IiwgX19mdW5jX18sIHNfc2V0X2ZsdXNoX29wLnU0X2Vycm9yX2NvZGUpOworICAgICAgICByZXR1cm4gVU5LTk9XTl9FUlJPUjsKKyAgICB9CisKKyAgICByZXR1cm4gT0s7Cit9CisKK3N0YXR1c190IEMyU29mdE1wZWcyRGVjOjpyZXNldERlY29kZXIoKSB7CisgICAgaXZkX2N0bF9yZXNldF9pcF90IHNfcmVzZXRfaXA7CisgICAgaXZkX2N0bF9yZXNldF9vcF90IHNfcmVzZXRfb3A7CisKKyAgICBzX3Jlc2V0X2lwLnU0X3NpemUgPSBzaXplb2YoaXZkX2N0bF9yZXNldF9pcF90KTsKKyAgICBzX3Jlc2V0X2lwLmVfY21kID0gSVZEX0NNRF9WSURFT19DVEw7CisgICAgc19yZXNldF9pcC5lX3N1Yl9jbWQgPSBJVkRfQ01EX0NUTF9SRVNFVDsKKyAgICBzX3Jlc2V0X29wLnU0X3NpemUgPSBzaXplb2YoaXZkX2N0bF9yZXNldF9vcF90KTsKKyAgICBJVl9BUElfQ0FMTF9TVEFUVVNfVCBzdGF0dXMgPSBpdmRlY19hcGlfZnVuY3Rpb24obURlY0hhbmRsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnNfcmVzZXRfaXAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZzX3Jlc2V0X29wKTsKKyAgICBpZiAoSVZfU1VDQ0VTUyAhPSBzdGF0dXMpIHsKKyAgICAgICAgQUxPR0UoImVycm9yIGluICVzOiAweCV4IiwgX19mdW5jX18sIHNfcmVzZXRfb3AudTRfZXJyb3JfY29kZSk7CisgICAgICAgIHJldHVybiBVTktOT1dOX0VSUk9SOworICAgIH0KKyAgICAodm9pZCkgc2V0TnVtQ29yZXMoKTsKKyAgICBtU3RyaWRlID0gMDsKKyAgICBtU2lnbmFsbGVkRXJyb3IgPSBmYWxzZTsKKworICAgIHJldHVybiBPSzsKK30KKwordm9pZCBDMlNvZnRNcGVnMkRlYzo6cmVzZXRQbHVnaW4oKSB7CisgICAgbVNpZ25hbGxlZE91dHB1dEVvcyA9IGZhbHNlOworICAgIGdldHRpbWVvZmRheSgmbVRpbWVTdGFydCwgbnVsbHB0cik7CisgICAgZ2V0dGltZW9mZGF5KCZtVGltZUVuZCwgbnVsbHB0cik7Cit9CisKK3N0YXR1c190IEMyU29mdE1wZWcyRGVjOjpkZWxldGVEZWNvZGVyKCkgeworICAgIGlmIChtTWVtUmVjb3JkcykgeworICAgICAgICBpdl9tZW1fcmVjX3QgKnBzX21lbV9yZWMgPSBtTWVtUmVjb3JkczsKKworICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1OdW1NZW1SZWNvcmRzOyBpKyssIHBzX21lbV9yZWMrKykgeworICAgICAgICAgICAgaWYgKHBzX21lbV9yZWMtPnB2X2Jhc2UpIHsKKyAgICAgICAgICAgICAgICBpdmRfYWxpZ25lZF9mcmVlKHBzX21lbV9yZWMtPnB2X2Jhc2UpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGl2ZF9hbGlnbmVkX2ZyZWUobU1lbVJlY29yZHMpOworICAgICAgICBtTWVtUmVjb3JkcyA9IG51bGxwdHI7CisgICAgfQorICAgIG1EZWNIYW5kbGUgPSBudWxscHRyOworCisgICAgcmV0dXJuIE9LOworfQorCitzdGF0dXNfdCBDMlNvZnRNcGVnMkRlYzo6cmVJbml0RGVjb2RlcigpIHsKKyAgICBkZWxldGVEZWNvZGVyKCk7CisKKyAgICBzdGF0dXNfdCByZXQgPSBpbml0RGVjb2RlcigpOworICAgIGlmIChPSyAhPSByZXQpIHsKKyAgICAgICAgQUxPR0UoIkZhaWxlZCB0byBpbml0aWFsaXplIGRlY29kZXIiKTsKKyAgICAgICAgZGVsZXRlRGVjb2RlcigpOworICAgICAgICByZXR1cm4gcmV0OworICAgIH0KKyAgICByZXR1cm4gT0s7Cit9CisKK3ZvaWQgZmlsbEVtcHR5V29yayhjb25zdCBzdGQ6OnVuaXF1ZV9wdHI8QzJXb3JrPiAmd29yaykgeworICAgIHVpbnQzMl90IGZsYWdzID0gMDsKKyAgICBpZiAod29yay0+aW5wdXQuZmxhZ3MgJiBDMkZyYW1lRGF0YTo6RkxBR19FTkRfT0ZfU1RSRUFNKSB7CisgICAgICAgIGZsYWdzIHw9IEMyRnJhbWVEYXRhOjpGTEFHX0VORF9PRl9TVFJFQU07CisgICAgICAgIEFMT0dWKCJzaWduYWxsaW5nIGVvcyIpOworICAgIH0KKyAgICB3b3JrLT53b3JrbGV0cy5mcm9udCgpLT5vdXRwdXQuZmxhZ3MgPSAoQzJGcmFtZURhdGE6OmZsYWdzX3QpZmxhZ3M7CisgICAgd29yay0+d29ya2xldHMuZnJvbnQoKS0+b3V0cHV0LmJ1ZmZlcnMuY2xlYXIoKTsKKyAgICB3b3JrLT53b3JrbGV0cy5mcm9udCgpLT5vdXRwdXQub3JkaW5hbCA9IHdvcmstPmlucHV0Lm9yZGluYWw7CisgICAgd29yay0+d29ya2xldHNQcm9jZXNzZWQgPSAxdTsKK30KKwordm9pZCBDMlNvZnRNcGVnMkRlYzo6ZmluaXNoV29yayh1aW50NjRfdCBpbmRleCwgY29uc3Qgc3RkOjp1bmlxdWVfcHRyPEMyV29yaz4gJndvcmspIHsKKyAgICBzdGQ6OnNoYXJlZF9wdHI8QzJCdWZmZXI+IGJ1ZmZlciA9IGNyZWF0ZUdyYXBoaWNCdWZmZXIoc3RkOjptb3ZlKG1PdXRCbG9jayksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEMyUmVjdChtV2lkdGgsIG1IZWlnaHQpKTsKKyAgICBtT3V0QmxvY2sgPSBudWxscHRyOworICAgIHsKKyAgICAgICAgSW50ZkltcGw6OkxvY2sgbG9jayA9IG1JbnRmLT5sb2NrKCk7CisgICAgICAgIGJ1ZmZlci0+c2V0SW5mbyhtSW50Zi0+Z2V0Q29sb3JBc3BlY3RzX2woKSk7CisgICAgfQorCisgICAgYXV0byBmaWxsV29yayA9IFtidWZmZXJdKGNvbnN0IHN0ZDo6dW5pcXVlX3B0cjxDMldvcms+ICZ3b3JrKSB7CisgICAgICAgIHdvcmstPndvcmtsZXRzLmZyb250KCktPm91dHB1dC5mbGFncyA9IChDMkZyYW1lRGF0YTo6ZmxhZ3NfdCkwOworICAgICAgICB3b3JrLT53b3JrbGV0cy5mcm9udCgpLT5vdXRwdXQuYnVmZmVycy5jbGVhcigpOworICAgICAgICB3b3JrLT53b3JrbGV0cy5mcm9udCgpLT5vdXRwdXQuYnVmZmVycy5wdXNoX2JhY2soYnVmZmVyKTsKKyAgICAgICAgd29yay0+d29ya2xldHMuZnJvbnQoKS0+b3V0cHV0Lm9yZGluYWwgPSB3b3JrLT5pbnB1dC5vcmRpbmFsOworICAgICAgICB3b3JrLT53b3JrbGV0c1Byb2Nlc3NlZCA9IDF1OworICAgIH07CisgICAgaWYgKHdvcmsgJiYgYzJfY250cjY0X3QoaW5kZXgpID09IHdvcmstPmlucHV0Lm9yZGluYWwuZnJhbWVJbmRleCkgeworICAgICAgICBmaWxsV29yayh3b3JrKTsKKyAgICB9IGVsc2UgeworICAgICAgICBmaW5pc2goaW5kZXgsIGZpbGxXb3JrKTsKKyAgICB9Cit9CisKK2MyX3N0YXR1c190IEMyU29mdE1wZWcyRGVjOjplbnN1cmVEZWNvZGVyU3RhdGUoY29uc3Qgc3RkOjpzaGFyZWRfcHRyPEMyQmxvY2tQb29sPiAmcG9vbCkgeworICAgIGlmICghbURlY0hhbmRsZSkgeworICAgICAgICBBTE9HRSgibm90IHN1cHBvc2VkIHRvIGJlIGhlcmUsIGludmFsaWQgZGVjb2RlciBjb250ZXh0Iik7CisgICAgICAgIHJldHVybiBDMl9DT1JSVVBURUQ7CisgICAgfQorICAgIGlmIChtU3RyaWRlICE9IEFMSUdONjQobVdpZHRoKSkgeworICAgICAgICBtU3RyaWRlID0gQUxJR042NChtV2lkdGgpOworICAgICAgICBpZiAoT0sgIT0gc2V0UGFyYW1zKG1TdHJpZGUpKSByZXR1cm4gQzJfQ09SUlVQVEVEOworICAgIH0KKyAgICBpZiAobU91dEJsb2NrICYmCisgICAgICAgICAgICAobU91dEJsb2NrLT53aWR0aCgpICE9IG1TdHJpZGUgfHwgbU91dEJsb2NrLT5oZWlnaHQoKSAhPSBtSGVpZ2h0KSkgeworICAgICAgICBtT3V0QmxvY2sucmVzZXQoKTsKKyAgICB9CisgICAgaWYgKCFtT3V0QmxvY2spIHsKKyAgICAgICAgdWludDMyX3QgZm9ybWF0ID0gSEFMX1BJWEVMX0ZPUk1BVF9ZVjEyOworICAgICAgICBDMk1lbW9yeVVzYWdlIHVzYWdlID0geyBDMk1lbW9yeVVzYWdlOjpDUFVfUkVBRCwgQzJNZW1vcnlVc2FnZTo6Q1BVX1dSSVRFIH07CisgICAgICAgIGMyX3N0YXR1c190IGVyciA9IHBvb2wtPmZldGNoR3JhcGhpY0Jsb2NrKG1TdHJpZGUsIG1IZWlnaHQsIGZvcm1hdCwgdXNhZ2UsICZtT3V0QmxvY2spOworICAgICAgICBpZiAoZXJyICE9IEMyX09LKSB7CisgICAgICAgICAgICBBTE9HRSgiZmV0Y2hHcmFwaGljQmxvY2sgZm9yIE91dHB1dCBmYWlsZWQgd2l0aCBzdGF0dXMgJWQiLCBlcnIpOworICAgICAgICAgICAgcmV0dXJuIGVycjsKKyAgICAgICAgfQorICAgICAgICBBTE9HVigicHJvdmlkZWQgKCVkeCVkKSByZXF1aXJlZCAoJWR4JWQpIiwKKyAgICAgICAgICAgICAgbU91dEJsb2NrLT53aWR0aCgpLCBtT3V0QmxvY2stPmhlaWdodCgpLCBtU3RyaWRlLCBtSGVpZ2h0KTsKKyAgICB9CisKKyAgICByZXR1cm4gQzJfT0s7Cit9CisKKy8vIFRPRE86IGNhbiBvdmVyYWxsIGVycm9yIGNoZWNraW5nIGJlIGltcHJvdmVkPworLy8gVE9ETzogYWxsb3cgY29uZmlndXJhdGlvbiBvZiBjb2xvciBmb3JtYXQgYW5kIHVzYWdlIGZvciBncmFwaGljIGJ1ZmZlcnMgaW5zdGVhZAorLy8gICAgICAgb2YgaGFyZCBjb2RpbmcgdGhlbSB0byBIQUxfUElYRUxfRk9STUFUX1lWMTIKKy8vIFRPRE86IHBhc3MgY29sb3Jhc3BlY3RzIGluZm9ybWF0aW9uIHRvIHN1cmZhY2UKKy8vIFRPRE86IHRlc3Qgc3VwcG9ydCBmb3IgZHluYW1pYyBjaGFuZ2UgaW4gcmVzb2x1dGlvbgorLy8gVE9ETzogdmVyaWZ5IGlmIHRoZSBkZWNvZGVyIHNlbnQgYmFjayBhbGwgZnJhbWVzCit2b2lkIEMyU29mdE1wZWcyRGVjOjpwcm9jZXNzKAorICAgICAgICBjb25zdCBzdGQ6OnVuaXF1ZV9wdHI8QzJXb3JrPiAmd29yaywKKyAgICAgICAgY29uc3Qgc3RkOjpzaGFyZWRfcHRyPEMyQmxvY2tQb29sPiAmcG9vbCkgeworICAgIC8vIEluaXRpYWxpemUgb3V0cHV0IHdvcmsKKyAgICB3b3JrLT5yZXN1bHQgPSBDMl9PSzsKKyAgICB3b3JrLT53b3JrbGV0c1Byb2Nlc3NlZCA9IDB1OworICAgIHdvcmstPndvcmtsZXRzLmZyb250KCktPm91dHB1dC5jb25maWdVcGRhdGUuY2xlYXIoKTsKKyAgICB3b3JrLT53b3JrbGV0cy5mcm9udCgpLT5vdXRwdXQuZmxhZ3MgPSB3b3JrLT5pbnB1dC5mbGFnczsKKworICAgIGlmIChtU2lnbmFsbGVkRXJyb3IgfHwgbVNpZ25hbGxlZE91dHB1dEVvcykgeworICAgICAgICB3b3JrLT5yZXN1bHQgPSBDMl9CQURfVkFMVUU7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBzaXplX3QgaW5PZmZzZXQgPSAwdTsKKyAgICBzaXplX3QgaW5TaXplID0gMHU7CisgICAgdWludDMyX3Qgd29ya0luZGV4ID0gd29yay0+aW5wdXQub3JkaW5hbC5mcmFtZUluZGV4LnBlZWt1KCkgJiAweEZGRkZGRkZGOworICAgIEMyUmVhZFZpZXcgclZpZXcgPSBtRHVtbXlSZWFkVmlldzsKKyAgICBpZiAoIXdvcmstPmlucHV0LmJ1ZmZlcnMuZW1wdHkoKSkgeworICAgICAgICByVmlldyA9IHdvcmstPmlucHV0LmJ1ZmZlcnNbMF0tPmRhdGEoKS5saW5lYXJCbG9ja3MoKS5mcm9udCgpLm1hcCgpLmdldCgpOworICAgICAgICBpblNpemUgPSByVmlldy5jYXBhY2l0eSgpOworICAgICAgICBpZiAoaW5TaXplICYmIHJWaWV3LmVycm9yKCkpIHsKKyAgICAgICAgICAgIEFMT0dFKCJyZWFkIHZpZXcgbWFwIGZhaWxlZCAlZCIsIHJWaWV3LmVycm9yKCkpOworICAgICAgICAgICAgd29yay0+cmVzdWx0ID0gQzJfQ09SUlVQVEVEOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgfQorICAgIGJvb2wgZW9zID0gKCh3b3JrLT5pbnB1dC5mbGFncyAmIEMyRnJhbWVEYXRhOjpGTEFHX0VORF9PRl9TVFJFQU0pICE9IDApOworICAgIGJvb2wgaGFzUGljdHVyZSA9IGZhbHNlOworCisgICAgQUxPR1YoImluIGJ1ZmZlciBhdHRyLiBzaXplICV6dSB0aW1lc3RhbXAgJWQgZnJhbWVpbmRleCAlZCwgZmxhZ3MgJXgiLAorICAgICAgICAgIGluU2l6ZSwgKGludCl3b3JrLT5pbnB1dC5vcmRpbmFsLnRpbWVzdGFtcC5wZWVrdSgpLAorICAgICAgICAgIChpbnQpd29yay0+aW5wdXQub3JkaW5hbC5mcmFtZUluZGV4LnBlZWt1KCksIHdvcmstPmlucHV0LmZsYWdzKTsKKyAgICBzaXplX3QgaW5Qb3MgPSAwOworICAgIHdoaWxlIChpblBvcyA8IGluU2l6ZSkgeworICAgICAgICBpZiAoQzJfT0sgIT0gZW5zdXJlRGVjb2RlclN0YXRlKHBvb2wpKSB7CisgICAgICAgICAgICBtU2lnbmFsbGVkRXJyb3IgPSB0cnVlOworICAgICAgICAgICAgd29yay0+d29ya2xldHNQcm9jZXNzZWQgPSAxdTsKKyAgICAgICAgICAgIHdvcmstPnJlc3VsdCA9IEMyX0NPUlJVUFRFRDsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICBDMkdyYXBoaWNWaWV3IHdWaWV3ID0gbU91dEJsb2NrLT5tYXAoKS5nZXQoKTsKKyAgICAgICAgaWYgKHdWaWV3LmVycm9yKCkpIHsKKyAgICAgICAgICAgIEFMT0dFKCJncmFwaGljIHZpZXcgbWFwIGZhaWxlZCAlZCIsIHdWaWV3LmVycm9yKCkpOworICAgICAgICAgICAgd29yay0+cmVzdWx0ID0gQzJfQ09SUlVQVEVEOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgaXZkX3ZpZGVvX2RlY29kZV9pcF90IHNfZGVjb2RlX2lwOworICAgICAgICBpdmRfdmlkZW9fZGVjb2RlX29wX3Qgc19kZWNvZGVfb3A7CisgICAgICAgIGlmICghc2V0RGVjb2RlQXJncygmc19kZWNvZGVfaXAsICZzX2RlY29kZV9vcCwgJnJWaWV3LCAmd1ZpZXcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBpbk9mZnNldCArIGluUG9zLCBpblNpemUgLSBpblBvcywgd29ya0luZGV4KSkgeworICAgICAgICAgICAgbVNpZ25hbGxlZEVycm9yID0gdHJ1ZTsKKyAgICAgICAgICAgIHdvcmstPndvcmtsZXRzUHJvY2Vzc2VkID0gMXU7CisgICAgICAgICAgICB3b3JrLT5yZXN1bHQgPSBDMl9DT1JSVVBURUQ7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgLy8gSWYgaW5wdXQgZHVtcCBpcyBlbmFibGVkLCB0aGVuIHdyaXRlIHRvIGZpbGUKKyAgICAgICAgRFVNUF9UT19GSUxFKG1JbkZpbGUsIHNfZGVjb2RlX2lwLnB2X3N0cmVhbV9idWZmZXIsIHNfZGVjb2RlX2lwLnU0X251bV9CeXRlcyk7CisgICAgICAgIFdPUkQzMiBkZWxheTsKKyAgICAgICAgR0VUVElNRSgmbVRpbWVTdGFydCwgbnVsbHB0cik7CisgICAgICAgIFRJTUVfRElGRihtVGltZUVuZCwgbVRpbWVTdGFydCwgZGVsYXkpOworICAgICAgICAodm9pZCkgaXZkZWNfYXBpX2Z1bmN0aW9uKG1EZWNIYW5kbGUsICZzX2RlY29kZV9pcCwgJnNfZGVjb2RlX29wKTsKKyAgICAgICAgV09SRDMyIGRlY29kZVRpbWU7CisgICAgICAgIEdFVFRJTUUoJm1UaW1lRW5kLCBudWxscHRyKTsKKyAgICAgICAgVElNRV9ESUZGKG1UaW1lU3RhcnQsIG1UaW1lRW5kLCBkZWNvZGVUaW1lKTsKKyAgICAgICAgQUxPR1YoImRlY29kZVRpbWU9JTZkIGRlbGF5PSU2ZCBudW1CeXRlcz0lNmQgIiwgZGVjb2RlVGltZSwgZGVsYXksCisgICAgICAgICAgICAgIHNfZGVjb2RlX29wLnU0X251bV9ieXRlc19jb25zdW1lZCk7CisgICAgICAgIGlmIChJTVBFRzJEX1VOU1VQUE9SVEVEX0RJTUVOU0lPTlMgPT0gc19kZWNvZGVfb3AudTRfZXJyb3JfY29kZSkgeworICAgICAgICAgICAgQUxPR1YoInVuc3VwcG9ydGVkIHJlc29sdXRpb24gOiAlZHglZCIsIHNfZGVjb2RlX29wLnU0X3BpY193ZCwgc19kZWNvZGVfb3AudTRfcGljX2h0KTsKKyAgICAgICAgICAgIGRyYWluSW50ZXJuYWwoRFJBSU5fQ09NUE9ORU5UX05PX0VPUywgcG9vbCwgd29yayk7CisgICAgICAgICAgICByZXNldFBsdWdpbigpOworICAgICAgICAgICAgd29yay0+d29ya2xldHNQcm9jZXNzZWQgPSAwdTsKKyAgICAgICAgICAgIG1XaWR0aCA9IHNfZGVjb2RlX29wLnU0X3BpY193ZDsKKyAgICAgICAgICAgIG1IZWlnaHQgPSBzX2RlY29kZV9vcC51NF9waWNfaHQ7CisKKyAgICAgICAgICAgIEFMT0dJKCJDb25maWd1cmluZyBkZWNvZGVyOiBtV2lkdGggJWQgLCBtSGVpZ2h0ICVkICIsCisgICAgICAgICAgICAgICAgICAgbVdpZHRoLCBtSGVpZ2h0KTsKKyAgICAgICAgICAgIEMyVmlkZW9TaXplU3RyZWFtSW5mbzo6b3V0cHV0IHNpemUoMHUsIG1XaWR0aCwgbUhlaWdodCk7CisgICAgICAgICAgICBzdGQ6OnZlY3RvcjxzdGQ6OnVuaXF1ZV9wdHI8QzJTZXR0aW5nUmVzdWx0Pj4gZmFpbHVyZXM7CisgICAgICAgICAgICBjMl9zdGF0dXNfdCBlcnIgPQorICAgICAgICAgICAgICAgIG1JbnRmLT5jb25maWcoeyZzaXplfSwgQzJfTUFZX0JMT0NLLCAmZmFpbHVyZXMpOworICAgICAgICAgICAgaWYgKGVyciA9PSBPSykgeworICAgICAgICAgICAgICAgIHdvcmstPndvcmtsZXRzLmZyb250KCktPm91dHB1dC5jb25maWdVcGRhdGUucHVzaF9iYWNrKAorICAgICAgICAgICAgICAgICAgICBDMlBhcmFtOjpDb3B5KHNpemUpKTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgQUxPR0UoIkNhbm5vdCBzZXQgd2lkdGggYW5kIGhlaWdodCIpOworICAgICAgICAgICAgICAgIG1TaWduYWxsZWRFcnJvciA9IHRydWU7CisgICAgICAgICAgICAgICAgd29yay0+d29ya2xldHNQcm9jZXNzZWQgPSAxdTsKKyAgICAgICAgICAgICAgICB3b3JrLT5yZXN1bHQgPSBDMl9DT1JSVVBURUQ7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAoT0sgIT0gcmVJbml0RGVjb2RlcigpKSB7CisgICAgICAgICAgICAgICAgQUxPR0UoIkZhaWxlZCB0byByZWluaXRpYWxpemUgZGVjb2RlciIpOworICAgICAgICAgICAgICAgIG1TaWduYWxsZWRFcnJvciA9IHRydWU7CisgICAgICAgICAgICAgICAgd29yay0+d29ya2xldHNQcm9jZXNzZWQgPSAxdTsKKyAgICAgICAgICAgICAgICB3b3JrLT5yZXN1bHQgPSBDMl9DT1JSVVBURUQ7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQorICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIH0gZWxzZSBpZiAoSVZEX1JFU19DSEFOR0VEID09IChzX2RlY29kZV9vcC51NF9lcnJvcl9jb2RlICYgMHhGRikpIHsKKyAgICAgICAgICAgIEFMT0dWKCJyZXNvbHV0aW9uIGNoYW5nZWQiKTsKKyAgICAgICAgICAgIGRyYWluSW50ZXJuYWwoRFJBSU5fQ09NUE9ORU5UX05PX0VPUywgcG9vbCwgd29yayk7CisgICAgICAgICAgICByZXNldERlY29kZXIoKTsKKyAgICAgICAgICAgIHJlc2V0UGx1Z2luKCk7CisgICAgICAgICAgICB3b3JrLT53b3JrbGV0c1Byb2Nlc3NlZCA9IDB1OworICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIH0KKyAgICAgICAgaWYgKDAgPCBzX2RlY29kZV9vcC51NF9waWNfd2QgJiYgMCA8IHNfZGVjb2RlX29wLnU0X3BpY19odCkgeworICAgICAgICAgICAgaWYgKHNfZGVjb2RlX29wLnU0X3BpY193ZCAhPSBtV2lkdGggfHwgIHNfZGVjb2RlX29wLnU0X3BpY19odCAhPSBtSGVpZ2h0KSB7CisgICAgICAgICAgICAgICAgbVdpZHRoID0gc19kZWNvZGVfb3AudTRfcGljX3dkOworICAgICAgICAgICAgICAgIG1IZWlnaHQgPSBzX2RlY29kZV9vcC51NF9waWNfaHQ7CisgICAgICAgICAgICAgICAgQ0hFQ0tfRVEoMHUsIHNfZGVjb2RlX29wLnU0X291dHB1dF9wcmVzZW50KTsKKworICAgICAgICAgICAgICAgIEFMT0dJKCJDb25maWd1cmluZyBkZWNvZGVyIG91dDogbVdpZHRoICVkICwgbUhlaWdodCAlZCAiLAorICAgICAgICAgICAgICAgICAgICAgICBtV2lkdGgsIG1IZWlnaHQpOworICAgICAgICAgICAgICAgIEMyVmlkZW9TaXplU3RyZWFtSW5mbzo6b3V0cHV0IHNpemUoMHUsIG1XaWR0aCwgbUhlaWdodCk7CisgICAgICAgICAgICAgICAgc3RkOjp2ZWN0b3I8c3RkOjp1bmlxdWVfcHRyPEMyU2V0dGluZ1Jlc3VsdD4+IGZhaWx1cmVzOworICAgICAgICAgICAgICAgIGMyX3N0YXR1c190IGVyciA9CisgICAgICAgICAgICAgICAgICAgIG1JbnRmLT5jb25maWcoeyZzaXplfSwgQzJfTUFZX0JMT0NLLCAmZmFpbHVyZXMpOworICAgICAgICAgICAgICAgIGlmIChlcnIgPT0gT0spIHsKKyAgICAgICAgICAgICAgICAgICAgd29yay0+d29ya2xldHMuZnJvbnQoKS0+b3V0cHV0LmNvbmZpZ1VwZGF0ZS5wdXNoX2JhY2soCisgICAgICAgICAgICAgICAgICAgICAgICBDMlBhcmFtOjpDb3B5KHNpemUpKTsKKyAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICBBTE9HRSgiQ2Fubm90IHNldCB3aWR0aCBhbmQgaGVpZ2h0Iik7CisgICAgICAgICAgICAgICAgICAgIG1TaWduYWxsZWRFcnJvciA9IHRydWU7CisgICAgICAgICAgICAgICAgICAgIHdvcmstPndvcmtsZXRzUHJvY2Vzc2VkID0gMXU7CisgICAgICAgICAgICAgICAgICAgIHdvcmstPnJlc3VsdCA9IEMyX0NPUlJVUFRFRDsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgICh2b2lkKSBnZXRTZXFJbmZvKCk7CisgICAgICAgIGhhc1BpY3R1cmUgfD0gKDEgPT0gc19kZWNvZGVfb3AudTRfZnJhbWVfZGVjb2RlZF9mbGFnKTsKKyAgICAgICAgaWYgKHNfZGVjb2RlX29wLnU0X291dHB1dF9wcmVzZW50KSB7CisgICAgICAgICAgICBmaW5pc2hXb3JrKHNfZGVjb2RlX29wLnU0X3RzLCB3b3JrKTsKKyAgICAgICAgfQorCisgICAgICAgIGluUG9zICs9IHNfZGVjb2RlX29wLnU0X251bV9ieXRlc19jb25zdW1lZDsKKyAgICAgICAgaWYgKGhhc1BpY3R1cmUgJiYgKGluU2l6ZSAtIGluUG9zKSAhPSAwKSB7CisgICAgICAgICAgICBBTE9HRCgiZGVjb2RlZCBmcmFtZSBpbiBjdXJyZW50IGFjY2VzcyBuYWwsIGlnbm9yaW5nIGZ1cnRoZXIgdHJhaWxpbmcgYnl0ZXMgJWQiLAorICAgICAgICAgICAgICAgICAgKGludClpblNpemUgLSAoaW50KWluUG9zKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgfQorCisgICAgaWYgKGVvcykgeworICAgICAgICBkcmFpbkludGVybmFsKERSQUlOX0NPTVBPTkVOVF9XSVRIX0VPUywgcG9vbCwgd29yayk7CisgICAgICAgIG1TaWduYWxsZWRPdXRwdXRFb3MgPSB0cnVlOworICAgIH0gZWxzZSBpZiAoIWhhc1BpY3R1cmUpIHsKKyAgICAgICAgZmlsbEVtcHR5V29yayh3b3JrKTsKKyAgICB9Cit9CisKK2MyX3N0YXR1c190IEMyU29mdE1wZWcyRGVjOjpkcmFpbkludGVybmFsKAorICAgICAgICB1aW50MzJfdCBkcmFpbk1vZGUsCisgICAgICAgIGNvbnN0IHN0ZDo6c2hhcmVkX3B0cjxDMkJsb2NrUG9vbD4gJnBvb2wsCisgICAgICAgIGNvbnN0IHN0ZDo6dW5pcXVlX3B0cjxDMldvcms+ICZ3b3JrKSB7CisgICAgaWYgKGRyYWluTW9kZSA9PSBOT19EUkFJTikgeworICAgICAgICBBTE9HVygiZHJhaW4gd2l0aCBOT19EUkFJTjogbm8tb3AiKTsKKyAgICAgICAgcmV0dXJuIEMyX09LOworICAgIH0KKyAgICBpZiAoZHJhaW5Nb2RlID09IERSQUlOX0NIQUlOKSB7CisgICAgICAgIEFMT0dXKCJEUkFJTl9DSEFJTiBub3Qgc3VwcG9ydGVkIik7CisgICAgICAgIHJldHVybiBDMl9PTUlUVEVEOworICAgIH0KKworICAgIGlmIChPSyAhPSBzZXRGbHVzaE1vZGUoKSkgcmV0dXJuIEMyX0NPUlJVUFRFRDsKKyAgICB3aGlsZSAodHJ1ZSkgeworICAgICAgICBpZiAoQzJfT0sgIT0gZW5zdXJlRGVjb2RlclN0YXRlKHBvb2wpKSB7CisgICAgICAgICAgICBtU2lnbmFsbGVkRXJyb3IgPSB0cnVlOworICAgICAgICAgICAgd29yay0+d29ya2xldHNQcm9jZXNzZWQgPSAxdTsKKyAgICAgICAgICAgIHdvcmstPnJlc3VsdCA9IEMyX0NPUlJVUFRFRDsKKyAgICAgICAgICAgIHJldHVybiBDMl9DT1JSVVBURUQ7CisgICAgICAgIH0KKyAgICAgICAgQzJHcmFwaGljVmlldyB3VmlldyA9IG1PdXRCbG9jay0+bWFwKCkuZ2V0KCk7CisgICAgICAgIGlmICh3Vmlldy5lcnJvcigpKSB7CisgICAgICAgICAgICBBTE9HRSgiZ3JhcGhpYyB2aWV3IG1hcCBmYWlsZWQgJWQiLCB3Vmlldy5lcnJvcigpKTsKKyAgICAgICAgICAgIHJldHVybiBDMl9DT1JSVVBURUQ7CisgICAgICAgIH0KKyAgICAgICAgaXZkX3ZpZGVvX2RlY29kZV9pcF90IHNfZGVjb2RlX2lwOworICAgICAgICBpdmRfdmlkZW9fZGVjb2RlX29wX3Qgc19kZWNvZGVfb3A7CisgICAgICAgIGlmICghc2V0RGVjb2RlQXJncygmc19kZWNvZGVfaXAsICZzX2RlY29kZV9vcCwgbnVsbHB0ciwgJndWaWV3LCAwLCAwLCAwKSkgeworICAgICAgICAgICAgbVNpZ25hbGxlZEVycm9yID0gdHJ1ZTsKKyAgICAgICAgICAgIHdvcmstPndvcmtsZXRzUHJvY2Vzc2VkID0gMXU7CisgICAgICAgICAgICByZXR1cm4gQzJfQ09SUlVQVEVEOworICAgICAgICB9CisgICAgICAgICh2b2lkKSBpdmRlY19hcGlfZnVuY3Rpb24obURlY0hhbmRsZSwgJnNfZGVjb2RlX2lwLCAmc19kZWNvZGVfb3ApOworICAgICAgICBpZiAoc19kZWNvZGVfb3AudTRfb3V0cHV0X3ByZXNlbnQpIHsKKyAgICAgICAgICAgIGZpbmlzaFdvcmsoc19kZWNvZGVfb3AudTRfdHMsIHdvcmspOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgZmlsbEVtcHR5V29yayh3b3JrKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgfQorCisgICAgcmV0dXJuIEMyX09LOworfQorCitjMl9zdGF0dXNfdCBDMlNvZnRNcGVnMkRlYzo6ZHJhaW4oCisgICAgICAgIHVpbnQzMl90IGRyYWluTW9kZSwKKyAgICAgICAgY29uc3Qgc3RkOjpzaGFyZWRfcHRyPEMyQmxvY2tQb29sPiAmcG9vbCkgeworICAgIHJldHVybiBkcmFpbkludGVybmFsKGRyYWluTW9kZSwgcG9vbCwgbnVsbHB0cik7Cit9CisKK2NsYXNzIEMyU29mdE1wZWcyRGVjRmFjdG9yeSA6IHB1YmxpYyBDMkNvbXBvbmVudEZhY3RvcnkgeworcHVibGljOgorICAgIEMyU29mdE1wZWcyRGVjRmFjdG9yeSgpIDogbUhlbHBlcihzdGQ6OnN0YXRpY19wb2ludGVyX2Nhc3Q8QzJSZWZsZWN0b3JIZWxwZXI+KAorICAgICAgICAgICAgR2V0Q29kZWMyUGxhdGZvcm1Db21wb25lbnRTdG9yZSgpLT5nZXRQYXJhbVJlZmxlY3RvcigpKSkgeworICAgIH0KKworICAgIHZpcnR1YWwgYzJfc3RhdHVzX3QgY3JlYXRlQ29tcG9uZW50KAorICAgICAgICAgICAgYzJfbm9kZV9pZF90IGlkLAorICAgICAgICAgICAgc3RkOjpzaGFyZWRfcHRyPEMyQ29tcG9uZW50PiogY29uc3QgY29tcG9uZW50LAorICAgICAgICAgICAgc3RkOjpmdW5jdGlvbjx2b2lkKEMyQ29tcG9uZW50Kik+IGRlbGV0ZXIpIG92ZXJyaWRlIHsKKyAgICAgICAgKmNvbXBvbmVudCA9IHN0ZDo6c2hhcmVkX3B0cjxDMkNvbXBvbmVudD4oCisgICAgICAgICAgICAgICAgbmV3IEMyU29mdE1wZWcyRGVjKENPTVBPTkVOVF9OQU1FLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RkOjptYWtlX3NoYXJlZDxDMlNvZnRNcGVnMkRlYzo6SW50ZkltcGw+KG1IZWxwZXIpKSwKKyAgICAgICAgICAgICAgICBkZWxldGVyKTsKKyAgICAgICAgcmV0dXJuIEMyX09LOworICAgIH0KKworICAgIHZpcnR1YWwgYzJfc3RhdHVzX3QgY3JlYXRlSW50ZXJmYWNlKAorICAgICAgICAgICAgYzJfbm9kZV9pZF90IGlkLAorICAgICAgICAgICAgc3RkOjpzaGFyZWRfcHRyPEMyQ29tcG9uZW50SW50ZXJmYWNlPiogY29uc3QgaW50ZXJmYWNlLAorICAgICAgICAgICAgc3RkOjpmdW5jdGlvbjx2b2lkKEMyQ29tcG9uZW50SW50ZXJmYWNlKik+IGRlbGV0ZXIpIG92ZXJyaWRlIHsKKyAgICAgICAgKmludGVyZmFjZSA9IHN0ZDo6c2hhcmVkX3B0cjxDMkNvbXBvbmVudEludGVyZmFjZT4oCisgICAgICAgICAgICAgICAgbmV3IFNpbXBsZUludGVyZmFjZTxDMlNvZnRNcGVnMkRlYzo6SW50ZkltcGw+KAorICAgICAgICAgICAgICAgICAgICAgICAgQ09NUE9ORU5UX05BTUUsIGlkLCBzdGQ6Om1ha2Vfc2hhcmVkPEMyU29mdE1wZWcyRGVjOjpJbnRmSW1wbD4obUhlbHBlcikpLAorICAgICAgICAgICAgICAgIGRlbGV0ZXIpOworICAgICAgICByZXR1cm4gQzJfT0s7CisgICAgfQorCisgICAgdmlydHVhbCB+QzJTb2Z0TXBlZzJEZWNGYWN0b3J5KCkgb3ZlcnJpZGUgPSBkZWZhdWx0OworCitwcml2YXRlOgorICAgIHN0ZDo6c2hhcmVkX3B0cjxDMlJlZmxlY3RvckhlbHBlcj4gbUhlbHBlcjsKK307CisKK30gIC8vIG5hbWVzcGFjZSBhbmRyb2lkCisKK2V4dGVybiAiQyIgOjpDMkNvbXBvbmVudEZhY3RvcnkqIENyZWF0ZUNvZGVjMkZhY3RvcnkoKSB7CisgICAgQUxPR1YoImluICVzIiwgX19mdW5jX18pOworICAgIHJldHVybiBuZXcgOjphbmRyb2lkOjpDMlNvZnRNcGVnMkRlY0ZhY3RvcnkoKTsKK30KKworZXh0ZXJuICJDIiB2b2lkIERlc3Ryb3lDb2RlYzJGYWN0b3J5KDo6QzJDb21wb25lbnRGYWN0b3J5KiBmYWN0b3J5KSB7CisgICAgQUxPR1YoImluICVzIiwgX19mdW5jX18pOworICAgIGRlbGV0ZSBmYWN0b3J5OworfQpkaWZmIC0tZ2l0IGEvbWVkaWEvY29kZWMyL2NvbXBvbmVudHMvbXBlZzIvQzJTb2Z0TXBlZzJEZWMuaCBiL21lZGlhL2NvZGVjMi9jb21wb25lbnRzL21wZWcyL0MyU29mdE1wZWcyRGVjLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTk5OTg3MgotLS0gL2Rldi9udWxsCisrKyBiL21lZGlhL2NvZGVjMi9jb21wb25lbnRzL21wZWcyL0MyU29mdE1wZWcyRGVjLmgKQEAgLTAsMCArMSwxOTUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTggVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworCisjaWZuZGVmIEFORFJPSURfQzJfU09GVF9NUEVHMl9ERUNfSF8KKyNkZWZpbmUgQU5EUk9JRF9DMl9TT0ZUX01QRUcyX0RFQ19IXworCisjaW5jbHVkZSA8U2ltcGxlQzJDb21wb25lbnQuaD4KKworI2luY2x1ZGUgPG1lZGlhL3N0YWdlZnJpZ2h0L2ZvdW5kYXRpb24vQ29sb3JVdGlscy5oPgorCisjaW5jbHVkZSAiaXZfZGF0YXR5cGVkZWYuaCIKKyNpbmNsdWRlICJpdi5oIgorI2luY2x1ZGUgIml2ZC5oIgorCituYW1lc3BhY2UgYW5kcm9pZCB7CisKKyNkZWZpbmUgaXZkZWNfYXBpX2Z1bmN0aW9uICAgICAgICAgICAgICBpbXBlZzJkX2FwaV9mdW5jdGlvbgorI2RlZmluZSBpdmRleHRfaW5pdF9pcF90ICAgICAgICAgICAgICAgIGltcGVnMmRfaW5pdF9pcF90CisjZGVmaW5lIGl2ZGV4dF9pbml0X29wX3QgICAgICAgICAgICAgICAgaW1wZWcyZF9pbml0X29wX3QKKyNkZWZpbmUgaXZkZXh0X2ZpbGxfbWVtX3JlY19pcF90ICAgICAgICBpbXBlZzJkX2ZpbGxfbWVtX3JlY19pcF90CisjZGVmaW5lIGl2ZGV4dF9maWxsX21lbV9yZWNfb3BfdCAgICAgICAgaW1wZWcyZF9maWxsX21lbV9yZWNfb3BfdAorI2RlZmluZSBpdmRleHRfY3RsX3NldF9udW1fY29yZXNfaXBfdCAgIGltcGVnMmRfY3RsX3NldF9udW1fY29yZXNfaXBfdAorI2RlZmluZSBpdmRleHRfY3RsX3NldF9udW1fY29yZXNfb3BfdCAgIGltcGVnMmRfY3RsX3NldF9udW1fY29yZXNfb3BfdAorI2RlZmluZSBpdmRleHRfY3RsX2dldF9zZXFfaW5mb19pcF90ICAgIGltcGVnMmRfY3RsX2dldF9zZXFfaW5mb19pcF90CisjZGVmaW5lIGl2ZGV4dF9jdGxfZ2V0X3NlcV9pbmZvX29wX3QgICAgaW1wZWcyZF9jdGxfZ2V0X3NlcV9pbmZvX29wX3QKKyNkZWZpbmUgQUxJR042NCh4KSAgICAgICAgICAgICAgICAgICAgICAoKCgoeCkgKyA2MykgPj4gNikgPDwgNikKKyNkZWZpbmUgTUFYX05VTV9DT1JFUyAgICAgICAgICAgICAgICAgICA0CisjZGVmaW5lIElWREVYVF9DTURfQ1RMX1NFVF9OVU1fQ09SRVMgICAgXAorICAgICAgICAoSVZEX0NPTlRST0xfQVBJX0NPTU1BTkRfVFlQRV9UKUlNUEVHMkRfQ01EX0NUTF9TRVRfTlVNX0NPUkVTCisjZGVmaW5lIE1JTihhLCBiKSAgICAgICAgICAgICAgICAgICAgICAgKCgoYSkgPCAoYikpID8gKGEpIDogKGIpKQorI2RlZmluZSBHRVRUSU1FKGEsIGIpICAgICAgICAgICAgICAgICAgIGdldHRpbWVvZmRheShhLCBiKTsKKyNkZWZpbmUgVElNRV9ESUZGKHN0YXJ0LCBlbmQsIGRpZmYpICAgICBcCisgICAgZGlmZiA9ICgoKGVuZCkudHZfc2VjIC0gKHN0YXJ0KS50dl9zZWMpICogMTAwMDAwMCkgKyBcCisgICAgICAgICAgICAoKGVuZCkudHZfdXNlYyAtIChzdGFydCkudHZfdXNlYyk7CisKKyNpZmRlZiBGSUxFX0RVTVBfRU5BQkxFCisgICAgI2RlZmluZSBJTlBVVF9EVU1QX1BBVEggICAgICIvc2RjYXJkL2NsaXBzL21wZWcyZF9pbnB1dCIKKyAgICAjZGVmaW5lIElOUFVUX0RVTVBfRVhUICAgICAgIm0ydiIKKyAgICAjZGVmaW5lIEdFTkVSQVRFX0ZJTEVfTkFNRVMoKSB7ICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgR0VUVElNRSgmbVRpbWVTdGFydCwgTlVMTCk7ICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgc3RyY3B5KG1JbkZpbGUsICIiKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgc3ByaW50ZihtSW5GaWxlLCAiJXNfJWxkLiVsZC4lcyIsIElOUFVUX0RVTVBfUEFUSCwgIFwKKyAgICAgICAgICAgICAgICBtVGltZVN0YXJ0LnR2X3NlYywgbVRpbWVTdGFydC50dl91c2VjLCAgICAgIFwKKyAgICAgICAgICAgICAgICBJTlBVVF9EVU1QX0VYVCk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICB9CisgICAgI2RlZmluZSBDUkVBVEVfRFVNUF9GSUxFKG1fZmlsZW5hbWUpIHsgICAgICAgICAgICAgICAgICBcCisgICAgICAgIEZJTEUgKmZwID0gZm9wZW4obV9maWxlbmFtZSwgIndiIik7ICAgICAgICAgICAgICAgICBcCisgICAgICAgIGlmIChmcCAhPSBOVUxMKSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICBmY2xvc2UoZnApOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIH0gZWxzZSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICBBTE9HRCgiQ291bGQgbm90IG9wZW4gZmlsZSAlcyIsIG1fZmlsZW5hbWUpOyAgICBcCisgICAgICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgfQorICAgICNkZWZpbmUgRFVNUF9UT19GSUxFKG1fZmlsZW5hbWUsIG1fYnVmLCBtX3NpemUpICAgICAgICAgXAorICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICBGSUxFICpmcCA9IGZvcGVuKG1fZmlsZW5hbWUsICJhYiIpOyAgICAgICAgICAgICAgICAgXAorICAgICAgICBpZiAoZnAgIT0gTlVMTCAmJiBtX2J1ZiAhPSBOVUxMKSB7ICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgdWludDMyX3QgaTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgaSA9IGZ3cml0ZShtX2J1ZiwgMSwgbV9zaXplLCBmcCk7ICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgQUxPR0QoImZ3cml0ZSByZXQgJWQgdG8gd3JpdGUgJWQiLCBpLCBtX3NpemUpOyAgXAorICAgICAgICAgICAgaWYgKGkgIT0gKHVpbnQzMl90KW1fc2l6ZSkgeyAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgIEFMT0dEKCJFcnJvciBpbiBmd3JpdGUsIHJldHVybmVkICVkIiwgaSk7ICAgXAorICAgICAgICAgICAgICAgIHBlcnJvcigiRXJyb3IgaW4gd3JpdGUgdG8gZmlsZSIpOyAgICAgICAgICAgXAorICAgICAgICAgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgZmNsb3NlKGZwKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICB9IGVsc2UgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgQUxPR0QoIkNvdWxkIG5vdCB3cml0ZSB0byBmaWxlICVzIiwgbV9maWxlbmFtZSk7XAorICAgICAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIH0KKyNlbHNlIC8qIEZJTEVfRFVNUF9FTkFCTEUgKi8KKyAgICAjZGVmaW5lIElOUFVUX0RVTVBfUEFUSAorICAgICNkZWZpbmUgSU5QVVRfRFVNUF9FWFQKKyAgICAjZGVmaW5lIE9VVFBVVF9EVU1QX1BBVEgKKyAgICAjZGVmaW5lIE9VVFBVVF9EVU1QX0VYVAorICAgICNkZWZpbmUgR0VORVJBVEVfRklMRV9OQU1FUygpCisgICAgI2RlZmluZSBDUkVBVEVfRFVNUF9GSUxFKG1fZmlsZW5hbWUpCisgICAgI2RlZmluZSBEVU1QX1RPX0ZJTEUobV9maWxlbmFtZSwgbV9idWYsIG1fc2l6ZSkKKyNlbmRpZiAvKiBGSUxFX0RVTVBfRU5BQkxFICovCisKK3N0cnVjdCBDMlNvZnRNcGVnMkRlYyA6IHB1YmxpYyBTaW1wbGVDMkNvbXBvbmVudCB7CisgICAgY2xhc3MgSW50ZkltcGw7CisKKyAgICBDMlNvZnRNcGVnMkRlYyhjb25zdCBjaGFyKiBuYW1lLCBjMl9ub2RlX2lkX3QgaWQsCisgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RkOjpzaGFyZWRfcHRyPEludGZJbXBsPiYgaW50ZkltcGwpOworICAgIHZpcnR1YWwgfkMyU29mdE1wZWcyRGVjKCk7CisKKyAgICAvLyBGcm9tIFNpbXBsZUMyQ29tcG9uZW50CisgICAgYzJfc3RhdHVzX3Qgb25Jbml0KCkgb3ZlcnJpZGU7CisgICAgYzJfc3RhdHVzX3Qgb25TdG9wKCkgb3ZlcnJpZGU7CisgICAgdm9pZCBvblJlc2V0KCkgb3ZlcnJpZGU7CisgICAgdm9pZCBvblJlbGVhc2UoKSBvdmVycmlkZTsKKyAgICBjMl9zdGF0dXNfdCBvbkZsdXNoX3NtKCkgb3ZlcnJpZGU7CisgICAgdm9pZCBwcm9jZXNzKAorICAgICAgICAgICAgY29uc3Qgc3RkOjp1bmlxdWVfcHRyPEMyV29yaz4gJndvcmssCisgICAgICAgICAgICBjb25zdCBzdGQ6OnNoYXJlZF9wdHI8QzJCbG9ja1Bvb2w+ICZwb29sKSBvdmVycmlkZTsKKyAgICBjMl9zdGF0dXNfdCBkcmFpbigKKyAgICAgICAgICAgIHVpbnQzMl90IGRyYWluTW9kZSwKKyAgICAgICAgICAgIGNvbnN0IHN0ZDo6c2hhcmVkX3B0cjxDMkJsb2NrUG9vbD4gJnBvb2wpIG92ZXJyaWRlOworIHByaXZhdGU6CisgICAgc3RhdHVzX3QgZ2V0TnVtTWVtUmVjb3JkcygpOworICAgIHN0YXR1c190IGZpbGxNZW1SZWNvcmRzKCk7CisgICAgc3RhdHVzX3QgY3JlYXRlRGVjb2RlcigpOworICAgIHN0YXR1c190IHNldE51bUNvcmVzKCk7CisgICAgc3RhdHVzX3Qgc2V0UGFyYW1zKHNpemVfdCBzdHJpZGUpOworICAgIHN0YXR1c190IGdldFZlcnNpb24oKTsKKyAgICBzdGF0dXNfdCBpbml0RGVjb2RlcigpOworICAgIGJvb2wgc2V0RGVjb2RlQXJncyhpdmRfdmlkZW9fZGVjb2RlX2lwX3QgKnBzX2RlY29kZV9pcCwKKyAgICAgICAgICAgICAgICAgICAgICAgaXZkX3ZpZGVvX2RlY29kZV9vcF90ICpwc19kZWNvZGVfb3AsCisgICAgICAgICAgICAgICAgICAgICAgIEMyUmVhZFZpZXcgKmluQnVmZmVyLAorICAgICAgICAgICAgICAgICAgICAgICBDMkdyYXBoaWNWaWV3ICpvdXRCdWZmZXIsCisgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBpbk9mZnNldCwKKyAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IGluU2l6ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3QgdHNNYXJrZXIpOworICAgIGJvb2wgZ2V0U2VxSW5mbygpOworICAgIGMyX3N0YXR1c190IGVuc3VyZURlY29kZXJTdGF0ZShjb25zdCBzdGQ6OnNoYXJlZF9wdHI8QzJCbG9ja1Bvb2w+ICZwb29sKTsKKyAgICB2b2lkIGZpbmlzaFdvcmsodWludDY0X3QgaW5kZXgsIGNvbnN0IHN0ZDo6dW5pcXVlX3B0cjxDMldvcms+ICZ3b3JrKTsKKyAgICBzdGF0dXNfdCBzZXRGbHVzaE1vZGUoKTsKKyAgICBjMl9zdGF0dXNfdCBkcmFpbkludGVybmFsKAorICAgICAgICAgICAgdWludDMyX3QgZHJhaW5Nb2RlLAorICAgICAgICAgICAgY29uc3Qgc3RkOjpzaGFyZWRfcHRyPEMyQmxvY2tQb29sPiAmcG9vbCwKKyAgICAgICAgICAgIGNvbnN0IHN0ZDo6dW5pcXVlX3B0cjxDMldvcms+ICZ3b3JrKTsKKyAgICBzdGF0dXNfdCByZXNldERlY29kZXIoKTsKKyAgICB2b2lkIHJlc2V0UGx1Z2luKCk7CisgICAgc3RhdHVzX3QgZGVsZXRlRGVjb2RlcigpOworICAgIHN0YXR1c190IHJlSW5pdERlY29kZXIoKTsKKworICAgIC8vIFRPRE86VGhpcyBpcyBub3QgdGhlIHJpZ2h0IHBsYWNlIGZvciB0aGlzIGVudW0uIFRoZXNlIHNob3VsZAorICAgIC8vIGJlIHBhcnQgb2YgYzItdm5kayBzbyB0aGF0IHRoZXkgY2FuIGJlIGFjY2Vzc2VkIGJ5IGFsbCB2aWRlbyBwbHVnaW5zCisgICAgLy8gdW50aWwgdGhlbiwgbWFrZSB0aGVtIGZlZWwgYXQgaG9tZQorICAgIGVudW0geworICAgICAgICBrTm90U3VwcG9ydGVkLAorICAgICAgICBrUHJlZmVyQml0c3RyZWFtLAorICAgICAgICBrUHJlZmVyQ29udGFpbmVyLAorICAgIH07CisKKyAgICBzdGQ6OnNoYXJlZF9wdHI8SW50ZkltcGw+IG1JbnRmOworICAgIGl2X29ial90ICptRGVjSGFuZGxlOworICAgIGl2X21lbV9yZWNfdCAqbU1lbVJlY29yZHM7CisgICAgc2l6ZV90IG1OdW1NZW1SZWNvcmRzOworICAgIHN0ZDo6c2hhcmVkX3B0cjxDMkdyYXBoaWNCbG9jaz4gbU91dEJsb2NrOworICAgIHVpbnQ4X3QgKm1PdXRCdWZmZXJEcmFpbjsKKworICAgIHNpemVfdCBtTnVtQ29yZXM7CisgICAgSVZfQ09MT1JfRk9STUFUX1QgbUl2Q29sb3Jmb3JtYXQ7CisKKyAgICB1aW50MzJfdCBtV2lkdGg7CisgICAgdWludDMyX3QgbUhlaWdodDsKKyAgICB1aW50MzJfdCBtU3RyaWRlOworICAgIGJvb2wgbVNpZ25hbGxlZE91dHB1dEVvczsKKyAgICBib29sIG1TaWduYWxsZWRFcnJvcjsKKworICAgIC8vIENvbG9yIGFzcGVjdHMuIFRoZXNlIGFyZSBJU08gdmFsdWVzIGFuZCBhcmUgbWVhbnQgdG8gZGV0ZWN0IGNoYW5nZXMgaW4gYXNwZWN0cyB0byBhdm9pZAorICAgIC8vIGNvbnZlcnRpbmcgdGhlbSB0byBDMiB2YWx1ZXMgZm9yIGVhY2ggZnJhbWUKKyAgICBzdHJ1Y3QgVnVpQ29sb3JBc3BlY3RzIHsKKyAgICAgICAgdWludDhfdCBwcmltYXJpZXM7CisgICAgICAgIHVpbnQ4X3QgdHJhbnNmZXI7CisgICAgICAgIHVpbnQ4X3QgY29lZmZzOworICAgICAgICB1aW50OF90IGZ1bGxSYW5nZTsKKworICAgICAgICAvLyBkZWZhdWx0IGNvbG9yIGFzcGVjdHMKKyAgICAgICAgVnVpQ29sb3JBc3BlY3RzKCkKKyAgICAgICAgICAgIDogcHJpbWFyaWVzKDIpLCB0cmFuc2ZlcigyKSwgY29lZmZzKDIpLCBmdWxsUmFuZ2UoMCkgeyB9CisKKyAgICAgICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IFZ1aUNvbG9yQXNwZWN0cyAmbykgeworICAgICAgICAgICAgcmV0dXJuIHByaW1hcmllcyA9PSBvLnByaW1hcmllcyAmJiB0cmFuc2ZlciA9PSBvLnRyYW5zZmVyICYmIGNvZWZmcyA9PSBvLmNvZWZmcworICAgICAgICAgICAgICAgICAgICAmJiBmdWxsUmFuZ2UgPT0gby5mdWxsUmFuZ2U7CisgICAgICAgIH0KKyAgICB9IG1CaXRzdHJlYW1Db2xvckFzcGVjdHM7CisKKyAgICAvLyBwcm9maWxlCisgICAgc3RydWN0IHRpbWV2YWwgbVRpbWVTdGFydDsKKyAgICBzdHJ1Y3QgdGltZXZhbCBtVGltZUVuZDsKKyNpZmRlZiBGSUxFX0RVTVBfRU5BQkxFCisgICAgY2hhciBtSW5GaWxlWzIwMF07CisjZW5kaWYgLyogRklMRV9EVU1QX0VOQUJMRSAqLworCisgICAgQzJfRE9fTk9UX0NPUFkoQzJTb2Z0TXBlZzJEZWMpOworfTsKKworfSAgLy8gbmFtZXNwYWNlIGFuZHJvaWQKKworI2VuZGlmICAvLyBBTkRST0lEX0MyX1NPRlRfTVBFRzJfREVDX0hfCmRpZmYgLS1naXQgYS9tZWRpYS9jb2RlYzIvY29tcG9uZW50cy9tcGVnNF9oMjYzL0FuZHJvaWQuYnAgYi9tZWRpYS9jb2RlYzIvY29tcG9uZW50cy9tcGVnNF9oMjYzL0FuZHJvaWQuYnAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDFlNGY0NAotLS0gL2Rldi9udWxsCisrKyBiL21lZGlhL2NvZGVjMi9jb21wb25lbnRzL21wZWc0X2gyNjMvQW5kcm9pZC5icApAQCAtMCwwICsxLDY2IEBACitjY19saWJyYXJ5X3NoYXJlZCB7CisgICAgbmFtZTogImxpYmNvZGVjMl9zb2Z0X21wZWc0ZGVjIiwKKyAgICBkZWZhdWx0czogWworICAgICAgICAibGliY29kZWMyX3NvZnQtZGVmYXVsdHMiLAorICAgICAgICAibGliY29kZWMyX3NvZnRfc2FuaXRpemVfc2lnbmVkLWRlZmF1bHRzIiwKKyAgICBdLAorCisgICAgc3JjczogWyJDMlNvZnRNcGVnNERlYy5jcHAiXSwKKworICAgIHN0YXRpY19saWJzOiBbImxpYnN0YWdlZnJpZ2h0X200dmgyNjNkZWMiXSwKKworICAgIGNmbGFnczogWworICAgICAgICAiLURPU0NMX0lNUE9SVF9SRUY9IiwKKyAgICAgICAgIi1ETVBFRzQiLAorICAgIF0sCit9CisKK2NjX2xpYnJhcnlfc2hhcmVkIHsKKyAgICBuYW1lOiAibGliY29kZWMyX3NvZnRfaDI2M2RlYyIsCisgICAgZGVmYXVsdHM6IFsKKyAgICAgICAgImxpYmNvZGVjMl9zb2Z0LWRlZmF1bHRzIiwKKyAgICAgICAgImxpYmNvZGVjMl9zb2Z0X3Nhbml0aXplX3NpZ25lZC1kZWZhdWx0cyIsCisgICAgXSwKKworICAgIHNyY3M6IFsiQzJTb2Z0TXBlZzREZWMuY3BwIl0sCisKKyAgICBzdGF0aWNfbGliczogWyJsaWJzdGFnZWZyaWdodF9tNHZoMjYzZGVjIl0sCisKKyAgICBjZmxhZ3M6IFsKKyAgICAgICAgIi1ET1NDTF9JTVBPUlRfUkVGPSIsCisgICAgXSwKK30KKworY2NfbGlicmFyeV9zaGFyZWQgeworICAgIG5hbWU6ICJsaWJjb2RlYzJfc29mdF9tcGVnNGVuYyIsCisgICAgZGVmYXVsdHM6IFsKKyAgICAgICAgImxpYmNvZGVjMl9zb2Z0LWRlZmF1bHRzIiwKKyAgICAgICAgImxpYmNvZGVjMl9zb2Z0X3Nhbml0aXplX3NpZ25lZC1kZWZhdWx0cyIsCisgICAgXSwKKworCisgICAgc3JjczogWyJDMlNvZnRNcGVnNEVuYy5jcHAiXSwKKworICAgIHN0YXRpY19saWJzOiBbImxpYnN0YWdlZnJpZ2h0X200dmgyNjNlbmMiXSwKKworICAgIGNmbGFnczogWworICAgICAgICAiLURNUEVHNCIsCisgICAgICAgICItRE9TQ0xfSU1QT1JUX1JFRj0iLAorICAgIF0sCit9CisKK2NjX2xpYnJhcnlfc2hhcmVkIHsKKyAgICBuYW1lOiAibGliY29kZWMyX3NvZnRfaDI2M2VuYyIsCisgICAgZGVmYXVsdHM6IFsKKyAgICAgICAgImxpYmNvZGVjMl9zb2Z0LWRlZmF1bHRzIiwKKyAgICAgICAgImxpYmNvZGVjMl9zb2Z0X3Nhbml0aXplX3NpZ25lZC1kZWZhdWx0cyIsCisgICAgXSwKKworICAgIHNyY3M6IFsiQzJTb2Z0TXBlZzRFbmMuY3BwIl0sCisKKyAgICBzdGF0aWNfbGliczogWyAibGlic3RhZ2VmcmlnaHRfbTR2aDI2M2VuYyIgXSwKKworICAgIGNmbGFnczogWworICAgICAgICAiLURPU0NMX0lNUE9SVF9SRUY9IiwKKyAgICBdLAorfQpkaWZmIC0tZ2l0IGEvbWVkaWEvY29kZWMyL2NvbXBvbmVudHMvbXBlZzRfaDI2My9DMlNvZnRNcGVnNERlYy5jcHAgYi9tZWRpYS9jb2RlYzIvY29tcG9uZW50cy9tcGVnNF9oMjYzL0MyU29mdE1wZWc0RGVjLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45MDFmNWVkCi0tLSAvZGV2L251bGwKKysrIGIvbWVkaWEvY29kZWMyL2NvbXBvbmVudHMvbXBlZzRfaDI2My9DMlNvZnRNcGVnNERlYy5jcHAKQEAgLTAsMCArMSw3NDYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTggVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworCisvLyNkZWZpbmUgTE9HX05ERUJVRyAwCisjaWZkZWYgTVBFRzQKKyAgI2RlZmluZSBMT0dfVEFHICJDMlNvZnRNcGVnNERlYyIKKyNlbHNlCisgICNkZWZpbmUgTE9HX1RBRyAiQzJTb2Z0SDI2M0RlYyIKKyNlbmRpZgorI2luY2x1ZGUgPGxvZy9sb2cuaD4KKworI2luY2x1ZGUgPG1lZGlhL3N0YWdlZnJpZ2h0L2ZvdW5kYXRpb24vQVV0aWxzLmg+CisjaW5jbHVkZSA8bWVkaWEvc3RhZ2VmcmlnaHQvZm91bmRhdGlvbi9NZWRpYURlZnMuaD4KKworI2luY2x1ZGUgPEMyRGVidWcuaD4KKyNpbmNsdWRlIDxDMlBsYXRmb3JtU3VwcG9ydC5oPgorI2luY2x1ZGUgPFNpbXBsZUMySW50ZXJmYWNlLmg+CisKKyNpbmNsdWRlICJDMlNvZnRNcGVnNERlYy5oIgorI2luY2x1ZGUgIm1wNGRlY19hcGkuaCIKKworbmFtZXNwYWNlIGFuZHJvaWQgeworCisjaWZkZWYgTVBFRzQKK2NvbnN0ZXhwciBjaGFyIENPTVBPTkVOVF9OQU1FW10gPSAiYzIuYW5kcm9pZC5tcGVnNC5kZWNvZGVyIjsKKyNlbHNlCitjb25zdGV4cHIgY2hhciBDT01QT05FTlRfTkFNRVtdID0gImMyLmFuZHJvaWQuaDI2My5kZWNvZGVyIjsKKyNlbmRpZgorCitjbGFzcyBDMlNvZnRNcGVnNERlYzo6SW50ZkltcGwgOiBwdWJsaWMgU2ltcGxlSW50ZXJmYWNlPHZvaWQ+OjpCYXNlUGFyYW1zIHsKK3B1YmxpYzoKKyAgICBleHBsaWNpdCBJbnRmSW1wbChjb25zdCBzdGQ6OnNoYXJlZF9wdHI8QzJSZWZsZWN0b3JIZWxwZXI+ICZoZWxwZXIpCisgICAgICAgIDogU2ltcGxlSW50ZXJmYWNlPHZvaWQ+OjpCYXNlUGFyYW1zKAorICAgICAgICAgICAgICAgIGhlbHBlciwKKyAgICAgICAgICAgICAgICBDT01QT05FTlRfTkFNRSwKKyAgICAgICAgICAgICAgICBDMkNvbXBvbmVudDo6S0lORF9ERUNPREVSLAorICAgICAgICAgICAgICAgIEMyQ29tcG9uZW50OjpET01BSU5fVklERU8sCisjaWZkZWYgTVBFRzQKKyAgICAgICAgICAgICAgICBNRURJQV9NSU1FVFlQRV9WSURFT19NUEVHNAorI2Vsc2UKKyAgICAgICAgICAgICAgICBNRURJQV9NSU1FVFlQRV9WSURFT19IMjYzCisjZW5kaWYKKyAgICAgICAgICAgICAgICApIHsKKyAgICAgICAgbm9Qcml2YXRlQnVmZmVycygpOyAvLyBUT0RPOiBhY2NvdW50IGZvciBvdXIgYnVmZmVycyBoZXJlCisgICAgICAgIG5vSW5wdXRSZWZlcmVuY2VzKCk7CisgICAgICAgIG5vT3V0cHV0UmVmZXJlbmNlcygpOworICAgICAgICBub0lucHV0TGF0ZW5jeSgpOworICAgICAgICBub1RpbWVTdHJldGNoKCk7CisKKyAgICAgICAgLy8gVE9ETzogb3V0cHV0IGxhdGVuY3kgYW5kIHJlb3JkZXJpbmcKKworICAgICAgICBhZGRQYXJhbWV0ZXIoCisgICAgICAgICAgICAgICAgRGVmaW5lUGFyYW0obUF0dHJpYiwgQzJfUEFSQU1LRVlfQ09NUE9ORU5UX0FUVFJJQlVURVMpCisgICAgICAgICAgICAgICAgLndpdGhDb25zdFZhbHVlKG5ldyBDMkNvbXBvbmVudEF0dHJpYnV0ZXNTZXR0aW5nKEMyQ29tcG9uZW50OjpBVFRSSUJfSVNfVEVNUE9SQUwpKQorICAgICAgICAgICAgICAgIC5idWlsZCgpKTsKKworICAgICAgICBhZGRQYXJhbWV0ZXIoCisgICAgICAgICAgICAgICAgRGVmaW5lUGFyYW0obVNpemUsIEMyX1BBUkFNS0VZX1BJQ1RVUkVfU0laRSkKKyAgICAgICAgICAgICAgICAud2l0aERlZmF1bHQobmV3IEMyU3RyZWFtUGljdHVyZVNpemVJbmZvOjpvdXRwdXQoMHUsIDE3NiwgMTQ0KSkKKyAgICAgICAgICAgICAgICAud2l0aEZpZWxkcyh7CisjaWZkZWYgTVBFRzQKKyAgICAgICAgICAgICAgICAgICAgQzJGKG1TaXplLCB3aWR0aCkuaW5SYW5nZSgyLCAxOTIwLCAyKSwKKyAgICAgICAgICAgICAgICAgICAgQzJGKG1TaXplLCBoZWlnaHQpLmluUmFuZ2UoMiwgMTA4OCwgMiksCisjZWxzZQorICAgICAgICAgICAgICAgICAgICBDMkYobVNpemUsIHdpZHRoKS5pblJhbmdlKDIsIDM1MiwgMiksCisgICAgICAgICAgICAgICAgICAgIEMyRihtU2l6ZSwgaGVpZ2h0KS5pblJhbmdlKDIsIDI4OCwgMiksCisjZW5kaWYKKyAgICAgICAgICAgICAgICB9KQorICAgICAgICAgICAgICAgIC53aXRoU2V0dGVyKFNpemVTZXR0ZXIpCisgICAgICAgICAgICAgICAgLmJ1aWxkKCkpOworCisjaWZkZWYgTVBFRzQKKyAgICAgICAgYWRkUGFyYW1ldGVyKAorICAgICAgICAgICAgICAgIERlZmluZVBhcmFtKG1Qcm9maWxlTGV2ZWwsIEMyX1BBUkFNS0VZX1BST0ZJTEVfTEVWRUwpCisgICAgICAgICAgICAgICAgLndpdGhEZWZhdWx0KG5ldyBDMlN0cmVhbVByb2ZpbGVMZXZlbEluZm86OmlucHV0KDB1LAorICAgICAgICAgICAgICAgICAgICAgICAgQzJDb25maWc6OlBST0ZJTEVfTVA0Vl9TSU1QTEUsIEMyQ29uZmlnOjpMRVZFTF9NUDRWXzMpKQorICAgICAgICAgICAgICAgIC53aXRoRmllbGRzKHsKKyAgICAgICAgICAgICAgICAgICAgQzJGKG1Qcm9maWxlTGV2ZWwsIHByb2ZpbGUpLmVxdWFsVG8oCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgQzJDb25maWc6OlBST0ZJTEVfTVA0Vl9TSU1QTEUpLAorICAgICAgICAgICAgICAgICAgICBDMkYobVByb2ZpbGVMZXZlbCwgbGV2ZWwpLm9uZU9mKHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBDMkNvbmZpZzo6TEVWRUxfTVA0Vl8wLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIEMyQ29uZmlnOjpMRVZFTF9NUDRWXzBCLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIEMyQ29uZmlnOjpMRVZFTF9NUDRWXzEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgQzJDb25maWc6OkxFVkVMX01QNFZfMiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBDMkNvbmZpZzo6TEVWRUxfTVA0Vl8zLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIEMyQ29uZmlnOjpMRVZFTF9NUDRWXzNCLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIEMyQ29uZmlnOjpMRVZFTF9NUDRWXzQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgQzJDb25maWc6OkxFVkVMX01QNFZfNEEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgQzJDb25maWc6OkxFVkVMX01QNFZfNSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBDMkNvbmZpZzo6TEVWRUxfTVA0Vl82fSkKKyAgICAgICAgICAgICAgICB9KQorICAgICAgICAgICAgICAgIC53aXRoU2V0dGVyKFByb2ZpbGVMZXZlbFNldHRlciwgbVNpemUpCisgICAgICAgICAgICAgICAgLmJ1aWxkKCkpOworI2Vsc2UKKyAgICAgICAgYWRkUGFyYW1ldGVyKAorICAgICAgICAgICAgICAgIERlZmluZVBhcmFtKG1Qcm9maWxlTGV2ZWwsIEMyX1BBUkFNS0VZX1BST0ZJTEVfTEVWRUwpCisgICAgICAgICAgICAgICAgLndpdGhEZWZhdWx0KG5ldyBDMlN0cmVhbVByb2ZpbGVMZXZlbEluZm86OmlucHV0KDB1LAorICAgICAgICAgICAgICAgICAgICAgICAgQzJDb25maWc6OlBST0ZJTEVfSDI2M19CQVNFTElORSwgQzJDb25maWc6OkxFVkVMX0gyNjNfMzApKQorICAgICAgICAgICAgICAgIC53aXRoRmllbGRzKHsKKyAgICAgICAgICAgICAgICAgICAgQzJGKG1Qcm9maWxlTGV2ZWwsIHByb2ZpbGUpLm9uZU9mKHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBDMkNvbmZpZzo6UFJPRklMRV9IMjYzX0JBU0VMSU5FLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIEMyQ29uZmlnOjpQUk9GSUxFX0gyNjNfSVNXVjJ9KSwKKyAgICAgICAgICAgICAgICAgICAgQzJGKG1Qcm9maWxlTGV2ZWwsIGxldmVsKS5vbmVPZih7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgQzJDb25maWc6OkxFVkVMX0gyNjNfMTAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgQzJDb25maWc6OkxFVkVMX0gyNjNfMjAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgQzJDb25maWc6OkxFVkVMX0gyNjNfMzAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgQzJDb25maWc6OkxFVkVMX0gyNjNfNDAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgQzJDb25maWc6OkxFVkVMX0gyNjNfNDV9KQorICAgICAgICAgICAgICAgIH0pCisgICAgICAgICAgICAgICAgLndpdGhTZXR0ZXIoUHJvZmlsZUxldmVsU2V0dGVyLCBtU2l6ZSkKKyAgICAgICAgICAgICAgICAuYnVpbGQoKSk7CisjZW5kaWYKKworICAgICAgICBhZGRQYXJhbWV0ZXIoCisgICAgICAgICAgICAgICAgRGVmaW5lUGFyYW0obU1heFNpemUsIEMyX1BBUkFNS0VZX01BWF9QSUNUVVJFX1NJWkUpCisjaWZkZWYgTVBFRzQKKyAgICAgICAgICAgICAgICAud2l0aERlZmF1bHQobmV3IEMyU3RyZWFtTWF4UGljdHVyZVNpemVUdW5pbmc6Om91dHB1dCgwdSwgMTkyMCwgMTA4OCkpCisjZWxzZQorICAgICAgICAgICAgICAgIC53aXRoRGVmYXVsdChuZXcgQzJTdHJlYW1NYXhQaWN0dXJlU2l6ZVR1bmluZzo6b3V0cHV0KDB1LCAzNTIsIDI4OCkpCisjZW5kaWYKKyAgICAgICAgICAgICAgICAud2l0aEZpZWxkcyh7CisjaWZkZWYgTVBFRzQKKyAgICAgICAgICAgICAgICAgICAgQzJGKG1TaXplLCB3aWR0aCkuaW5SYW5nZSgyLCAxOTIwLCAyKSwKKyAgICAgICAgICAgICAgICAgICAgQzJGKG1TaXplLCBoZWlnaHQpLmluUmFuZ2UoMiwgMTA4OCwgMiksCisjZWxzZQorICAgICAgICAgICAgICAgICAgICBDMkYobVNpemUsIHdpZHRoKS5pblJhbmdlKDIsIDM1MiwgMiksCisgICAgICAgICAgICAgICAgICAgIEMyRihtU2l6ZSwgaGVpZ2h0KS5pblJhbmdlKDIsIDI4OCwgMiksCisjZW5kaWYKKyAgICAgICAgICAgICAgICB9KQorICAgICAgICAgICAgICAgIC53aXRoU2V0dGVyKE1heFBpY3R1cmVTaXplU2V0dGVyLCBtU2l6ZSkKKyAgICAgICAgICAgICAgICAuYnVpbGQoKSk7CisKKyAgICAgICAgYWRkUGFyYW1ldGVyKAorICAgICAgICAgICAgICAgIERlZmluZVBhcmFtKG1NYXhJbnB1dFNpemUsIEMyX1BBUkFNS0VZX0lOUFVUX01BWF9CVUZGRVJfU0laRSkKKyNpZmRlZiBNUEVHNAorICAgICAgICAgICAgICAgIC53aXRoRGVmYXVsdChuZXcgQzJTdHJlYW1NYXhCdWZmZXJTaXplSW5mbzo6aW5wdXQoMHUsIDE5MjAgKiAxMDg4ICogMyAvIDIpKQorI2Vsc2UKKyAgICAgICAgICAgICAgICAud2l0aERlZmF1bHQobmV3IEMyU3RyZWFtTWF4QnVmZmVyU2l6ZUluZm86OmlucHV0KDB1LCAzNTIgKiAyODggKiAzIC8gMikpCisjZW5kaWYKKyAgICAgICAgICAgICAgICAud2l0aEZpZWxkcyh7CisgICAgICAgICAgICAgICAgICAgIEMyRihtTWF4SW5wdXRTaXplLCB2YWx1ZSkuYW55KCksCisgICAgICAgICAgICAgICAgfSkKKyAgICAgICAgICAgICAgICAuY2FsY3VsYXRlZEFzKE1heElucHV0U2l6ZVNldHRlciwgbU1heFNpemUpCisgICAgICAgICAgICAgICAgLmJ1aWxkKCkpOworCisgICAgICAgIEMyQ2hyb21hT2Zmc2V0U3RydWN0IGxvY2F0aW9uc1sxXSA9IHsgQzJDaHJvbWFPZmZzZXRTdHJ1Y3Q6OklUVV9ZVVZfNDIwXzAoKSB9OworICAgICAgICBzdGQ6OnNoYXJlZF9wdHI8QzJTdHJlYW1Db2xvckluZm86Om91dHB1dD4gZGVmYXVsdENvbG9ySW5mbyA9CisgICAgICAgICAgICBDMlN0cmVhbUNvbG9ySW5mbzo6b3V0cHV0OjpBbGxvY1NoYXJlZCgKKyAgICAgICAgICAgICAgICAgICAgMXUsIDB1LCA4dSAvKiBiaXREZXB0aCAqLywgQzJDb2xvcjo6WVVWXzQyMCk7CisgICAgICAgIG1lbWNweShkZWZhdWx0Q29sb3JJbmZvLT5tLmxvY2F0aW9ucywgbG9jYXRpb25zLCBzaXplb2YobG9jYXRpb25zKSk7CisKKyAgICAgICAgZGVmYXVsdENvbG9ySW5mbyA9CisgICAgICAgICAgICBDMlN0cmVhbUNvbG9ySW5mbzo6b3V0cHV0OjpBbGxvY1NoYXJlZCgKKyAgICAgICAgICAgICAgICAgICAgeyBDMkNocm9tYU9mZnNldFN0cnVjdDo6SVRVX1lVVl80MjBfMCgpIH0sCisgICAgICAgICAgICAgICAgICAgIDB1LCA4dSAvKiBiaXREZXB0aCAqLywgQzJDb2xvcjo6WVVWXzQyMCk7CisgICAgICAgIGhlbHBlci0+YWRkU3RydWN0RGVzY3JpcHRvcnM8QzJDaHJvbWFPZmZzZXRTdHJ1Y3Q+KCk7CisKKyAgICAgICAgYWRkUGFyYW1ldGVyKAorICAgICAgICAgICAgICAgIERlZmluZVBhcmFtKG1Db2xvckluZm8sIEMyX1BBUkFNS0VZX0NPREVEX0NPTE9SX0lORk8pCisgICAgICAgICAgICAgICAgLndpdGhDb25zdFZhbHVlKGRlZmF1bHRDb2xvckluZm8pCisgICAgICAgICAgICAgICAgLmJ1aWxkKCkpOworCisgICAgICAgIC8vIFRPRE86IHN1cHBvcnQgbW9yZSBmb3JtYXRzPworICAgICAgICBhZGRQYXJhbWV0ZXIoCisgICAgICAgICAgICAgICAgRGVmaW5lUGFyYW0obVBpeGVsRm9ybWF0LCBDMl9QQVJBTUtFWV9QSVhFTF9GT1JNQVQpCisgICAgICAgICAgICAgICAgLndpdGhDb25zdFZhbHVlKG5ldyBDMlN0cmVhbVBpeGVsRm9ybWF0SW5mbzo6b3V0cHV0KAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB1LCBIQUxfUElYRUxfRk9STUFUX1lDQkNSXzQyMF84ODgpKQorICAgICAgICAgICAgICAgIC5idWlsZCgpKTsKKyAgICB9CisKKyAgICBzdGF0aWMgQzJSIFNpemVTZXR0ZXIoYm9vbCBtYXlCbG9jaywgY29uc3QgQzJQPEMyU3RyZWFtUGljdHVyZVNpemVJbmZvOjpvdXRwdXQ+ICZvbGRNZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgQzJQPEMyVmlkZW9TaXplU3RyZWFtSW5mbzo6b3V0cHV0PiAmbWUpIHsKKyAgICAgICAgKHZvaWQpbWF5QmxvY2s7CisgICAgICAgIEMyUiByZXMgPSBDMlI6Ok9rKCk7CisgICAgICAgIGlmICghbWUuRihtZS52LndpZHRoKS5zdXBwb3J0c0F0QWxsKG1lLnYud2lkdGgpKSB7CisgICAgICAgICAgICByZXMgPSByZXMucGx1cyhDMlNldHRpbmdSZXN1bHRCdWlsZGVyOjpCYWRWYWx1ZShtZS5GKG1lLnYud2lkdGgpKSk7CisgICAgICAgICAgICBtZS5zZXQoKS53aWR0aCA9IG9sZE1lLnYud2lkdGg7CisgICAgICAgIH0KKyAgICAgICAgaWYgKCFtZS5GKG1lLnYuaGVpZ2h0KS5zdXBwb3J0c0F0QWxsKG1lLnYuaGVpZ2h0KSkgeworICAgICAgICAgICAgcmVzID0gcmVzLnBsdXMoQzJTZXR0aW5nUmVzdWx0QnVpbGRlcjo6QmFkVmFsdWUobWUuRihtZS52LmhlaWdodCkpKTsKKyAgICAgICAgICAgIG1lLnNldCgpLmhlaWdodCA9IG9sZE1lLnYuaGVpZ2h0OworICAgICAgICB9CisgICAgICAgIHJldHVybiByZXM7CisgICAgfQorCisgICAgc3RhdGljIEMyUiBNYXhQaWN0dXJlU2l6ZVNldHRlcihib29sIG1heUJsb2NrLCBDMlA8QzJTdHJlYW1NYXhQaWN0dXJlU2l6ZVR1bmluZzo6b3V0cHV0PiAmbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBDMlA8QzJTdHJlYW1QaWN0dXJlU2l6ZUluZm86Om91dHB1dD4gJnNpemUpIHsKKyAgICAgICAgKHZvaWQpbWF5QmxvY2s7CisgICAgICAgIC8vIFRPRE86IGdldCBtYXggd2lkdGgvaGVpZ2h0IGZyb20gdGhlIHNpemUncyBmaWVsZCBoZWxwZXJzIHZzLiBoYXJkY29kaW5nCisjaWZkZWYgTVBFRzQKKyAgICAgICAgbWUuc2V0KCkud2lkdGggPSBjMl9taW4oYzJfbWF4KG1lLnYud2lkdGgsIHNpemUudi53aWR0aCksIDE5MjB1KTsKKyAgICAgICAgbWUuc2V0KCkuaGVpZ2h0ID0gYzJfbWluKGMyX21heChtZS52LmhlaWdodCwgc2l6ZS52LmhlaWdodCksIDEwODh1KTsKKyNlbHNlCisgICAgICAgIG1lLnNldCgpLndpZHRoID0gYzJfbWluKGMyX21heChtZS52LndpZHRoLCBzaXplLnYud2lkdGgpLCAzNTJ1KTsKKyAgICAgICAgbWUuc2V0KCkuaGVpZ2h0ID0gYzJfbWluKGMyX21heChtZS52LmhlaWdodCwgc2l6ZS52LmhlaWdodCksIDI4OHUpOworI2VuZGlmCisgICAgICAgIHJldHVybiBDMlI6Ok9rKCk7CisgICAgfQorCisgICAgc3RhdGljIEMyUiBNYXhJbnB1dFNpemVTZXR0ZXIoYm9vbCBtYXlCbG9jaywgQzJQPEMyU3RyZWFtTWF4QnVmZmVyU2l6ZUluZm86OmlucHV0PiAmbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgQzJQPEMyU3RyZWFtTWF4UGljdHVyZVNpemVUdW5pbmc6Om91dHB1dD4gJm1heFNpemUpIHsKKyAgICAgICAgKHZvaWQpbWF5QmxvY2s7CisgICAgICAgIC8vIGFzc3VtZSBjb21wcmVzc2lvbiByYXRpbyBvZiAxCisgICAgICAgIG1lLnNldCgpLnZhbHVlID0gKCgobWF4U2l6ZS52LndpZHRoICsgMTUpIC8gMTYpICogKChtYXhTaXplLnYuaGVpZ2h0ICsgMTUpIC8gMTYpICogMzg0KTsKKyAgICAgICAgcmV0dXJuIEMyUjo6T2soKTsKKyAgICB9CisKKyAgICBzdGF0aWMgQzJSIFByb2ZpbGVMZXZlbFNldHRlcihib29sIG1heUJsb2NrLCBDMlA8QzJTdHJlYW1Qcm9maWxlTGV2ZWxJbmZvOjppbnB1dD4gJm1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEMyUDxDMlN0cmVhbVBpY3R1cmVTaXplSW5mbzo6b3V0cHV0PiAmc2l6ZSkgeworICAgICAgICAodm9pZCltYXlCbG9jazsKKyAgICAgICAgKHZvaWQpc2l6ZTsKKyAgICAgICAgKHZvaWQpbWU7ICAvLyBUT0RPOiB2YWxpZGF0ZQorICAgICAgICByZXR1cm4gQzJSOjpPaygpOworICAgIH0KKworICAgIHVpbnQzMl90IGdldE1heFdpZHRoKCkgY29uc3QgeyByZXR1cm4gbU1heFNpemUtPndpZHRoOyB9CisgICAgdWludDMyX3QgZ2V0TWF4SGVpZ2h0KCkgY29uc3QgeyByZXR1cm4gbU1heFNpemUtPmhlaWdodDsgfQorCitwcml2YXRlOgorICAgIHN0ZDo6c2hhcmVkX3B0cjxDMlN0cmVhbVByb2ZpbGVMZXZlbEluZm86OmlucHV0PiBtUHJvZmlsZUxldmVsOworICAgIHN0ZDo6c2hhcmVkX3B0cjxDMlN0cmVhbVBpY3R1cmVTaXplSW5mbzo6b3V0cHV0PiBtU2l6ZTsKKyAgICBzdGQ6OnNoYXJlZF9wdHI8QzJTdHJlYW1NYXhQaWN0dXJlU2l6ZVR1bmluZzo6b3V0cHV0PiBtTWF4U2l6ZTsKKyAgICBzdGQ6OnNoYXJlZF9wdHI8QzJTdHJlYW1NYXhCdWZmZXJTaXplSW5mbzo6aW5wdXQ+IG1NYXhJbnB1dFNpemU7CisgICAgc3RkOjpzaGFyZWRfcHRyPEMyU3RyZWFtQ29sb3JJbmZvOjpvdXRwdXQ+IG1Db2xvckluZm87CisgICAgc3RkOjpzaGFyZWRfcHRyPEMyU3RyZWFtUGl4ZWxGb3JtYXRJbmZvOjpvdXRwdXQ+IG1QaXhlbEZvcm1hdDsKK307CisKK0MyU29mdE1wZWc0RGVjOjpDMlNvZnRNcGVnNERlYygKKyAgICAgICAgY29uc3QgY2hhciAqbmFtZSwKKyAgICAgICAgYzJfbm9kZV9pZF90IGlkLAorICAgICAgICBjb25zdCBzdGQ6OnNoYXJlZF9wdHI8SW50ZkltcGw+ICZpbnRmSW1wbCkKKyAgICA6IFNpbXBsZUMyQ29tcG9uZW50KHN0ZDo6bWFrZV9zaGFyZWQ8U2ltcGxlSW50ZXJmYWNlPEludGZJbXBsPj4obmFtZSwgaWQsIGludGZJbXBsKSksCisgICAgICBtSW50ZihpbnRmSW1wbCksCisgICAgICBtRGVjSGFuZGxlKG51bGxwdHIpLAorICAgICAgbU91dHB1dEJ1ZmZlcnt9LAorICAgICAgbUluaXRpYWxpemVkKGZhbHNlKSB7Cit9CisKK0MyU29mdE1wZWc0RGVjOjp+QzJTb2Z0TXBlZzREZWMoKSB7CisgICAgb25SZWxlYXNlKCk7Cit9CisKK2MyX3N0YXR1c190IEMyU29mdE1wZWc0RGVjOjpvbkluaXQoKSB7CisgICAgc3RhdHVzX3QgZXJyID0gaW5pdERlY29kZXIoKTsKKyAgICByZXR1cm4gZXJyID09IE9LID8gQzJfT0sgOiBDMl9DT1JSVVBURUQ7Cit9CisKK2MyX3N0YXR1c190IEMyU29mdE1wZWc0RGVjOjpvblN0b3AoKSB7CisgICAgaWYgKG1Jbml0aWFsaXplZCkgeworICAgICAgICBpZiAobURlY0hhbmRsZSkgeworICAgICAgICAgICAgUFZDbGVhblVwVmlkZW9EZWNvZGVyKG1EZWNIYW5kbGUpOworICAgICAgICB9CisgICAgICAgIG1Jbml0aWFsaXplZCA9IGZhbHNlOworICAgIH0KKyAgICBmb3IgKGludDMyX3QgaSA9IDA7IGkgPCBrTnVtT3V0cHV0QnVmZmVyczsgKytpKSB7CisgICAgICAgIGlmIChtT3V0cHV0QnVmZmVyW2ldKSB7CisgICAgICAgICAgICBmcmVlKG1PdXRwdXRCdWZmZXJbaV0pOworICAgICAgICAgICAgbU91dHB1dEJ1ZmZlcltpXSA9IG51bGxwdHI7CisgICAgICAgIH0KKyAgICB9CisgICAgbU51bVNhbXBsZXNPdXRwdXQgPSAwOworICAgIG1GcmFtZXNDb25maWd1cmVkID0gZmFsc2U7CisgICAgbVNpZ25hbGxlZE91dHB1dEVvcyA9IGZhbHNlOworICAgIG1TaWduYWxsZWRFcnJvciA9IGZhbHNlOworCisgICAgcmV0dXJuIEMyX09LOworfQorCit2b2lkIEMyU29mdE1wZWc0RGVjOjpvblJlc2V0KCkgeworICAgICh2b2lkKW9uU3RvcCgpOworICAgICh2b2lkKW9uSW5pdCgpOworfQorCit2b2lkIEMyU29mdE1wZWc0RGVjOjpvblJlbGVhc2UoKSB7CisgICAgaWYgKG1Jbml0aWFsaXplZCkgeworICAgICAgICBpZiAobURlY0hhbmRsZSkgeworICAgICAgICAgICAgUFZDbGVhblVwVmlkZW9EZWNvZGVyKG1EZWNIYW5kbGUpOworICAgICAgICAgICAgZGVsZXRlIG1EZWNIYW5kbGU7CisgICAgICAgICAgICBtRGVjSGFuZGxlID0gbnVsbHB0cjsKKyAgICAgICAgfQorICAgICAgICBtSW5pdGlhbGl6ZWQgPSBmYWxzZTsKKyAgICB9CisgICAgaWYgKG1PdXRCbG9jaykgeworICAgICAgICBtT3V0QmxvY2sucmVzZXQoKTsKKyAgICB9CisgICAgZm9yIChpbnQzMl90IGkgPSAwOyBpIDwga051bU91dHB1dEJ1ZmZlcnM7ICsraSkgeworICAgICAgICBpZiAobU91dHB1dEJ1ZmZlcltpXSkgeworICAgICAgICAgICAgZnJlZShtT3V0cHV0QnVmZmVyW2ldKTsKKyAgICAgICAgICAgIG1PdXRwdXRCdWZmZXJbaV0gPSBudWxscHRyOworICAgICAgICB9CisgICAgfQorfQorCitjMl9zdGF0dXNfdCBDMlNvZnRNcGVnNERlYzo6b25GbHVzaF9zbSgpIHsKKyAgICBpZiAobUluaXRpYWxpemVkKSB7CisgICAgICAgIGlmIChQVl9UUlVFICE9IFBWUmVzZXRWaWRlb0RlY29kZXIobURlY0hhbmRsZSkpIHsKKyAgICAgICAgICAgIHJldHVybiBDMl9DT1JSVVBURUQ7CisgICAgICAgIH0KKyAgICB9CisgICAgbVNpZ25hbGxlZE91dHB1dEVvcyA9IGZhbHNlOworICAgIG1TaWduYWxsZWRFcnJvciA9IGZhbHNlOworICAgIHJldHVybiBDMl9PSzsKK30KKworc3RhdHVzX3QgQzJTb2Z0TXBlZzREZWM6OmluaXREZWNvZGVyKCkgeworI2lmZGVmIE1QRUc0CisgICAgbUlzTXBlZzQgPSB0cnVlOworI2Vsc2UKKyAgICBtSXNNcGVnNCA9IGZhbHNlOworI2VuZGlmCisgICAgaWYgKCFtRGVjSGFuZGxlKSB7CisgICAgICAgIG1EZWNIYW5kbGUgPSBuZXcgdGFndmlkZW9EZWNDb250cm9sczsKKyAgICB9CisgICAgaWYgKCFtRGVjSGFuZGxlKSB7CisgICAgICAgIEFMT0dFKCJtRGVjSGFuZGxlIGlzIG51bGwiKTsKKyAgICAgICAgcmV0dXJuIE5PX01FTU9SWTsKKyAgICB9CisgICAgbWVtc2V0KG1EZWNIYW5kbGUsIDAsIHNpemVvZih0YWd2aWRlb0RlY0NvbnRyb2xzKSk7CisKKyAgICAvKiBUT0RPOiBicmluZyB0aGVzZSB2YWx1ZXMgdG8gMzUyIGFuZCAyODguIEl0IGNhbm5vdCBiZSBkb25lIGFzIG9mIG5vdworICAgICAqIGJlY2F1c2UsIGgyNjMgZG9lc24ndCBzZWVtIHRvIGFsbG93IHBvcnQgcmVjb25maWd1cmF0aW9uLiBJbiBPTVgsIHRoZQorICAgICAqIHByb2JsZW0gb2YgbGFyZ2VyIHdpZHRoIGFuZCBoZWlnaHQgdGhhbiBkZWZhdWx0IHdpZHRoIGFuZCBoZWlnaHQgaXMKKyAgICAgKiBvdmVyY29tZSBieSBhZGFwdGl2ZVBsYXlCYWNrKCkgYXBpIGNhbGwuIFRoaXMgY2FsbCBnZXRzIHdpZHRoIGFuZCBoZWlnaHQKKyAgICAgKiBpbmZvcm1hdGlvbiBmcm9tIGV4dHJhY3Rvci4gU3VjaCBhIHRoaW5nIGlzIG5vdCBwb3NzaWJsZSBoZXJlLgorICAgICAqIFNvIHdlIGFyZSBjb25maWd1cmluZyB0byBsYXJnZXIgdmFsdWVzLiovCisgICAgbVdpZHRoID0gMTQwODsKKyAgICBtSGVpZ2h0ID0gMTE1MjsKKyAgICBtTnVtU2FtcGxlc091dHB1dCA9IDA7CisgICAgbUluaXRpYWxpemVkID0gZmFsc2U7CisgICAgbUZyYW1lc0NvbmZpZ3VyZWQgPSBmYWxzZTsKKyAgICBtU2lnbmFsbGVkT3V0cHV0RW9zID0gZmFsc2U7CisgICAgbVNpZ25hbGxlZEVycm9yID0gZmFsc2U7CisKKyAgICByZXR1cm4gT0s7Cit9CisKK3ZvaWQgZmlsbEVtcHR5V29yayhjb25zdCBzdGQ6OnVuaXF1ZV9wdHI8QzJXb3JrPiAmd29yaykgeworICAgIHVpbnQzMl90IGZsYWdzID0gMDsKKyAgICBpZiAod29yay0+aW5wdXQuZmxhZ3MgJiBDMkZyYW1lRGF0YTo6RkxBR19FTkRfT0ZfU1RSRUFNKSB7CisgICAgICAgIGZsYWdzIHw9IEMyRnJhbWVEYXRhOjpGTEFHX0VORF9PRl9TVFJFQU07CisgICAgICAgIEFMT0dWKCJzaWduYWxsaW5nIGVvcyIpOworICAgIH0KKyAgICB3b3JrLT53b3JrbGV0cy5mcm9udCgpLT5vdXRwdXQuZmxhZ3MgPSAoQzJGcmFtZURhdGE6OmZsYWdzX3QpZmxhZ3M7CisgICAgd29yay0+d29ya2xldHMuZnJvbnQoKS0+b3V0cHV0LmJ1ZmZlcnMuY2xlYXIoKTsKKyAgICB3b3JrLT53b3JrbGV0cy5mcm9udCgpLT5vdXRwdXQub3JkaW5hbCA9IHdvcmstPmlucHV0Lm9yZGluYWw7CisgICAgd29yay0+d29ya2xldHNQcm9jZXNzZWQgPSAxdTsKK30KKwordm9pZCBDMlNvZnRNcGVnNERlYzo6ZmluaXNoV29yayh1aW50NjRfdCBpbmRleCwgY29uc3Qgc3RkOjp1bmlxdWVfcHRyPEMyV29yaz4gJndvcmspIHsKKyAgICBzdGQ6OnNoYXJlZF9wdHI8QzJCdWZmZXI+IGJ1ZmZlciA9IGNyZWF0ZUdyYXBoaWNCdWZmZXIoc3RkOjptb3ZlKG1PdXRCbG9jayksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEMyUmVjdChtV2lkdGgsIG1IZWlnaHQpKTsKKyAgICBtT3V0QmxvY2sgPSBudWxscHRyOworICAgIGF1dG8gZmlsbFdvcmsgPSBbYnVmZmVyLCBpbmRleF0oY29uc3Qgc3RkOjp1bmlxdWVfcHRyPEMyV29yaz4gJndvcmspIHsKKyAgICAgICAgdWludDMyX3QgZmxhZ3MgPSAwOworICAgICAgICBpZiAoKHdvcmstPmlucHV0LmZsYWdzICYgQzJGcmFtZURhdGE6OkZMQUdfRU5EX09GX1NUUkVBTSkgJiYKKyAgICAgICAgICAgICAgICAoYzJfY250cjY0X3QoaW5kZXgpID09IHdvcmstPmlucHV0Lm9yZGluYWwuZnJhbWVJbmRleCkpIHsKKyAgICAgICAgICAgIGZsYWdzIHw9IEMyRnJhbWVEYXRhOjpGTEFHX0VORF9PRl9TVFJFQU07CisgICAgICAgICAgICBBTE9HVigic2lnbmFsbGluZyBlb3MiKTsKKyAgICAgICAgfQorICAgICAgICB3b3JrLT53b3JrbGV0cy5mcm9udCgpLT5vdXRwdXQuZmxhZ3MgPSAoQzJGcmFtZURhdGE6OmZsYWdzX3QpZmxhZ3M7CisgICAgICAgIHdvcmstPndvcmtsZXRzLmZyb250KCktPm91dHB1dC5idWZmZXJzLmNsZWFyKCk7CisgICAgICAgIHdvcmstPndvcmtsZXRzLmZyb250KCktPm91dHB1dC5idWZmZXJzLnB1c2hfYmFjayhidWZmZXIpOworICAgICAgICB3b3JrLT53b3JrbGV0cy5mcm9udCgpLT5vdXRwdXQub3JkaW5hbCA9IHdvcmstPmlucHV0Lm9yZGluYWw7CisgICAgICAgIHdvcmstPndvcmtsZXRzUHJvY2Vzc2VkID0gMXU7CisgICAgfTsKKyAgICBpZiAod29yayAmJiBjMl9jbnRyNjRfdChpbmRleCkgPT0gd29yay0+aW5wdXQub3JkaW5hbC5mcmFtZUluZGV4KSB7CisgICAgICAgIGZpbGxXb3JrKHdvcmspOworICAgIH0gZWxzZSB7CisgICAgICAgIGZpbmlzaChpbmRleCwgZmlsbFdvcmspOworICAgIH0KK30KKworYzJfc3RhdHVzX3QgQzJTb2Z0TXBlZzREZWM6OmVuc3VyZURlY29kZXJTdGF0ZShjb25zdCBzdGQ6OnNoYXJlZF9wdHI8QzJCbG9ja1Bvb2w+ICZwb29sKSB7CisgICAgaWYgKCFtRGVjSGFuZGxlKSB7CisgICAgICAgIEFMT0dFKCJub3Qgc3VwcG9zZWQgdG8gYmUgaGVyZSwgaW52YWxpZCBkZWNvZGVyIGNvbnRleHQiKTsKKyAgICAgICAgcmV0dXJuIEMyX0NPUlJVUFRFRDsKKyAgICB9CisKKyAgICBtT3V0cHV0QnVmZmVyU2l6ZSA9IGFsaWduKG1JbnRmLT5nZXRNYXhXaWR0aCgpLCAxNikgKiBhbGlnbihtSW50Zi0+Z2V0TWF4SGVpZ2h0KCksIDE2KSAqIDMgLyAyOworICAgIGZvciAoaW50MzJfdCBpID0gMDsgaSA8IGtOdW1PdXRwdXRCdWZmZXJzOyArK2kpIHsKKyAgICAgICAgaWYgKCFtT3V0cHV0QnVmZmVyW2ldKSB7CisgICAgICAgICAgICBtT3V0cHV0QnVmZmVyW2ldID0gKHVpbnQ4X3QgKiltYWxsb2MobU91dHB1dEJ1ZmZlclNpemUpOworICAgICAgICAgICAgaWYgKCFtT3V0cHV0QnVmZmVyW2ldKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIEMyX05PX01FTU9SWTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKyAgICBpZiAobU91dEJsb2NrICYmCisgICAgICAgICAgICAobU91dEJsb2NrLT53aWR0aCgpICE9IGFsaWduKG1XaWR0aCwgMTYpIHx8IG1PdXRCbG9jay0+aGVpZ2h0KCkgIT0gbUhlaWdodCkpIHsKKyAgICAgICAgbU91dEJsb2NrLnJlc2V0KCk7CisgICAgfQorICAgIGlmICghbU91dEJsb2NrKSB7CisgICAgICAgIHVpbnQzMl90IGZvcm1hdCA9IEhBTF9QSVhFTF9GT1JNQVRfWVYxMjsKKyAgICAgICAgQzJNZW1vcnlVc2FnZSB1c2FnZSA9IHsgQzJNZW1vcnlVc2FnZTo6Q1BVX1JFQUQsIEMyTWVtb3J5VXNhZ2U6OkNQVV9XUklURSB9OworICAgICAgICBjMl9zdGF0dXNfdCBlcnIgPSBwb29sLT5mZXRjaEdyYXBoaWNCbG9jayhhbGlnbihtV2lkdGgsIDE2KSwgbUhlaWdodCwgZm9ybWF0LCB1c2FnZSwgJm1PdXRCbG9jayk7CisgICAgICAgIGlmIChlcnIgIT0gQzJfT0spIHsKKyAgICAgICAgICAgIEFMT0dFKCJmZXRjaEdyYXBoaWNCbG9jayBmb3IgT3V0cHV0IGZhaWxlZCB3aXRoIHN0YXR1cyAlZCIsIGVycik7CisgICAgICAgICAgICByZXR1cm4gZXJyOworICAgICAgICB9CisgICAgICAgIEFMT0dWKCJwcm92aWRlZCAoJWR4JWQpIHJlcXVpcmVkICglZHglZCkiLAorICAgICAgICAgICAgICBtT3V0QmxvY2stPndpZHRoKCksIG1PdXRCbG9jay0+aGVpZ2h0KCksIG1XaWR0aCwgbUhlaWdodCk7CisgICAgfQorICAgIHJldHVybiBDMl9PSzsKK30KKworYm9vbCBDMlNvZnRNcGVnNERlYzo6aGFuZGxlUmVzQ2hhbmdlKGNvbnN0IHN0ZDo6dW5pcXVlX3B0cjxDMldvcms+ICZ3b3JrKSB7CisgICAgdWludDMyX3QgZGlzcF93aWR0aCwgZGlzcF9oZWlnaHQ7CisgICAgUFZHZXRWaWRlb0RpbWVuc2lvbnMobURlY0hhbmRsZSwgKGludDMyICopJmRpc3Bfd2lkdGgsIChpbnQzMiAqKSZkaXNwX2hlaWdodCk7CisKKyAgICB1aW50MzJfdCBidWZfd2lkdGgsIGJ1Zl9oZWlnaHQ7CisgICAgUFZHZXRCdWZmZXJEaW1lbnNpb25zKG1EZWNIYW5kbGUsIChpbnQzMiAqKSZidWZfd2lkdGgsIChpbnQzMiAqKSZidWZfaGVpZ2h0KTsKKworICAgIENIRUNLX0xFKGRpc3Bfd2lkdGgsIGJ1Zl93aWR0aCk7CisgICAgQ0hFQ0tfTEUoZGlzcF9oZWlnaHQsIGJ1Zl9oZWlnaHQpOworCisgICAgQUxPR1YoImRpc3BsYXkgc2l6ZSAoJWR4JWQpLCBidWZmZXIgc2l6ZSAoJWR4JWQpIiwKKyAgICAgICAgICAgZGlzcF93aWR0aCwgZGlzcF9oZWlnaHQsIGJ1Zl93aWR0aCwgYnVmX2hlaWdodCk7CisKKyAgICBib29sIHJlc0NoYW5nZWQgPSBmYWxzZTsKKyAgICBpZiAoZGlzcF93aWR0aCAhPSBtV2lkdGggfHwgZGlzcF9oZWlnaHQgIT0gbUhlaWdodCkgeworICAgICAgICBtV2lkdGggPSBkaXNwX3dpZHRoOworICAgICAgICBtSGVpZ2h0ID0gZGlzcF9oZWlnaHQ7CisgICAgICAgIHJlc0NoYW5nZWQgPSB0cnVlOworICAgICAgICBmb3IgKGludDMyX3QgaSA9IDA7IGkgPCBrTnVtT3V0cHV0QnVmZmVyczsgKytpKSB7CisgICAgICAgICAgICBpZiAobU91dHB1dEJ1ZmZlcltpXSkgeworICAgICAgICAgICAgICAgIGZyZWUobU91dHB1dEJ1ZmZlcltpXSk7CisgICAgICAgICAgICAgICAgbU91dHB1dEJ1ZmZlcltpXSA9IG51bGxwdHI7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBpZiAoIW1Jc01wZWc0KSB7CisgICAgICAgICAgICBQVkNsZWFuVXBWaWRlb0RlY29kZXIobURlY0hhbmRsZSk7CisKKyAgICAgICAgICAgIHVpbnQ4X3QgKnZvbF9kYXRhWzFde307CisgICAgICAgICAgICBpbnQzMl90IHZvbF9zaXplID0gMDsKKworICAgICAgICAgICAgaWYgKCFQVkluaXRWaWRlb0RlY29kZXIoCisgICAgICAgICAgICAgICAgICAgIG1EZWNIYW5kbGUsIHZvbF9kYXRhLCAmdm9sX3NpemUsIDEsIG1JbnRmLT5nZXRNYXhXaWR0aCgpLCBtSW50Zi0+Z2V0TWF4SGVpZ2h0KCksIEgyNjNfTU9ERSkpIHsKKyAgICAgICAgICAgICAgICBBTE9HRSgiRXJyb3IgaW4gUFZJbml0VmlkZW9EZWNvZGVyIEgyNjNfTU9ERSB3aGlsZSByZXNDaGFuZ2VkIHdhcyBzZXQgdG8gdHJ1ZSIpOworICAgICAgICAgICAgICAgIG1TaWduYWxsZWRFcnJvciA9IHRydWU7CisgICAgICAgICAgICAgICAgd29yay0+cmVzdWx0ID0gQzJfQ09SUlVQVEVEOworICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIG1GcmFtZXNDb25maWd1cmVkID0gZmFsc2U7CisgICAgfQorICAgIHJldHVybiByZXNDaGFuZ2VkOworfQorCisvKiBUT0RPOiBjYW4gcmVtb3ZlIHRlbXBvcmFyeSBjb3B5IGFmdGVyIGxpYnJhcnkgc3VwcG9ydHMgd3JpdGluZyB0byBkaXNwbGF5CisgKiBidWZmZXIgWSwgVSBhbmQgViBwbGFuZSBwb2ludGVycyB1c2luZyBzdHJpZGUgaW5mby4gKi8KK3N0YXRpYyB2b2lkIGNvcHlPdXRwdXRCdWZmZXJUb1lWMTJGcmFtZSh1aW50OF90ICpkc3QsIHVpbnQ4X3QgKnNyYywgc2l6ZV90IGRzdFlTdHJpZGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IHNyY1lTdHJpZGUsIHVpbnQzMl90IHdpZHRoLCB1aW50MzJfdCBoZWlnaHQpIHsKKyAgICBzaXplX3QgZHN0VVZTdHJpZGUgPSBhbGlnbihkc3RZU3RyaWRlIC8gMiwgMTYpOworICAgIHNpemVfdCBzcmNVVlN0cmlkZSA9IHNyY1lTdHJpZGUgLyAyOworICAgIHVpbnQ4X3QgKnNyY1N0YXJ0ID0gc3JjOworICAgIHVpbnQ4X3QgKmRzdFN0YXJ0ID0gZHN0OworICAgIHNpemVfdCB2U3RyaWRlID0gYWxpZ24oaGVpZ2h0LCAxNik7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBoZWlnaHQ7ICsraSkgeworICAgICAgICAgbWVtY3B5KGRzdCwgc3JjLCB3aWR0aCk7CisgICAgICAgICBzcmMgKz0gc3JjWVN0cmlkZTsKKyAgICAgICAgIGRzdCArPSBkc3RZU3RyaWRlOworICAgIH0KKyAgICAvKiBVIGJ1ZmZlciAqLworICAgIHNyYyA9IHNyY1N0YXJ0ICsgdlN0cmlkZSAqIHNyY1lTdHJpZGU7CisgICAgZHN0ID0gZHN0U3RhcnQgKyAoZHN0WVN0cmlkZSAqIGhlaWdodCkgKyAoZHN0VVZTdHJpZGUgKiBoZWlnaHQgLyAyKTsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGhlaWdodCAvIDI7ICsraSkgeworICAgICAgICAgbWVtY3B5KGRzdCwgc3JjLCB3aWR0aCAvIDIpOworICAgICAgICAgc3JjICs9IHNyY1VWU3RyaWRlOworICAgICAgICAgZHN0ICs9IGRzdFVWU3RyaWRlOworICAgIH0KKyAgICAvKiBWIGJ1ZmZlciAqLworICAgIHNyYyA9IHNyY1N0YXJ0ICsgdlN0cmlkZSAqIHNyY1lTdHJpZGUgKiA1IC8gNDsKKyAgICBkc3QgPSBkc3RTdGFydCArIChkc3RZU3RyaWRlICogaGVpZ2h0KTsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGhlaWdodCAvIDI7ICsraSkgeworICAgICAgICAgbWVtY3B5KGRzdCwgc3JjLCB3aWR0aCAvIDIpOworICAgICAgICAgc3JjICs9IHNyY1VWU3RyaWRlOworICAgICAgICAgZHN0ICs9IGRzdFVWU3RyaWRlOworICAgIH0KK30KKwordm9pZCBDMlNvZnRNcGVnNERlYzo6cHJvY2VzcygKKyAgICAgICAgY29uc3Qgc3RkOjp1bmlxdWVfcHRyPEMyV29yaz4gJndvcmssCisgICAgICAgIGNvbnN0IHN0ZDo6c2hhcmVkX3B0cjxDMkJsb2NrUG9vbD4gJnBvb2wpIHsKKyAgICAvLyBJbml0aWFsaXplIG91dHB1dCB3b3JrCisgICAgd29yay0+cmVzdWx0ID0gQzJfT0s7CisgICAgd29yay0+d29ya2xldHNQcm9jZXNzZWQgPSAxdTsKKyAgICB3b3JrLT53b3JrbGV0cy5mcm9udCgpLT5vdXRwdXQuY29uZmlnVXBkYXRlLmNsZWFyKCk7CisgICAgd29yay0+d29ya2xldHMuZnJvbnQoKS0+b3V0cHV0LmZsYWdzID0gd29yay0+aW5wdXQuZmxhZ3M7CisKKyAgICBpZiAobVNpZ25hbGxlZEVycm9yIHx8IG1TaWduYWxsZWRPdXRwdXRFb3MpIHsKKyAgICAgICAgd29yay0+cmVzdWx0ID0gQzJfQkFEX1ZBTFVFOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgc2l6ZV90IGluT2Zmc2V0ID0gMHU7CisgICAgc2l6ZV90IGluU2l6ZSA9IDB1OworICAgIHVpbnQzMl90IHdvcmtJbmRleCA9IHdvcmstPmlucHV0Lm9yZGluYWwuZnJhbWVJbmRleC5wZWVrdSgpICYgMHhGRkZGRkZGRjsKKyAgICBDMlJlYWRWaWV3IHJWaWV3ID0gbUR1bW15UmVhZFZpZXc7CisgICAgaWYgKCF3b3JrLT5pbnB1dC5idWZmZXJzLmVtcHR5KCkpIHsKKyAgICAgICAgclZpZXcgPSB3b3JrLT5pbnB1dC5idWZmZXJzWzBdLT5kYXRhKCkubGluZWFyQmxvY2tzKCkuZnJvbnQoKS5tYXAoKS5nZXQoKTsKKyAgICAgICAgaW5TaXplID0gclZpZXcuY2FwYWNpdHkoKTsKKyAgICAgICAgaWYgKGluU2l6ZSAmJiByVmlldy5lcnJvcigpKSB7CisgICAgICAgICAgICBBTE9HRSgicmVhZCB2aWV3IG1hcCBmYWlsZWQgJWQiLCByVmlldy5lcnJvcigpKTsKKyAgICAgICAgICAgIHdvcmstPnJlc3VsdCA9IEMyX0NPUlJVUFRFRDsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgIH0KKyAgICBBTE9HVigiaW4gYnVmZmVyIGF0dHIuIHNpemUgJXp1IHRpbWVzdGFtcCAlZCBmcmFtZWluZGV4ICVkLCBmbGFncyAleCIsCisgICAgICAgICAgaW5TaXplLCAoaW50KXdvcmstPmlucHV0Lm9yZGluYWwudGltZXN0YW1wLnBlZWt1KCksCisgICAgICAgICAgKGludCl3b3JrLT5pbnB1dC5vcmRpbmFsLmZyYW1lSW5kZXgucGVla3UoKSwgd29yay0+aW5wdXQuZmxhZ3MpOworCisgICAgYm9vbCBlb3MgPSAoKHdvcmstPmlucHV0LmZsYWdzICYgQzJGcmFtZURhdGE6OkZMQUdfRU5EX09GX1NUUkVBTSkgIT0gMCk7CisgICAgaWYgKGluU2l6ZSA9PSAwKSB7CisgICAgICAgIGZpbGxFbXB0eVdvcmsod29yayk7CisgICAgICAgIGlmIChlb3MpIHsKKyAgICAgICAgICAgIG1TaWduYWxsZWRPdXRwdXRFb3MgPSB0cnVlOworICAgICAgICB9CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICB1aW50OF90ICpiaXRzdHJlYW0gPSBjb25zdF9jYXN0PHVpbnQ4X3QgKj4oclZpZXcuZGF0YSgpICsgaW5PZmZzZXQpOworICAgIHVpbnQzMl90ICpzdGFydF9jb2RlID0gKHVpbnQzMl90ICopYml0c3RyZWFtOworICAgIGJvb2wgdm9sSGVhZGVyID0gKnN0YXJ0X2NvZGUgPT0gMHhCMDAxMDAwMDsKKyAgICBpZiAodm9sSGVhZGVyKSB7CisgICAgICAgIFBWQ2xlYW5VcFZpZGVvRGVjb2RlcihtRGVjSGFuZGxlKTsKKyAgICAgICAgbUluaXRpYWxpemVkID0gZmFsc2U7CisgICAgfQorCisgICAgaWYgKCFtSW5pdGlhbGl6ZWQpIHsKKyAgICAgICAgdWludDhfdCAqdm9sX2RhdGFbMV17fTsKKyAgICAgICAgaW50MzJfdCB2b2xfc2l6ZSA9IDA7CisKKyAgICAgICAgYm9vbCBjb2RlY0NvbmZpZyA9ICh3b3JrLT5pbnB1dC5mbGFncyAmIEMyRnJhbWVEYXRhOjpGTEFHX0NPREVDX0NPTkZJRykgIT0gMDsKKyAgICAgICAgaWYgKGNvZGVjQ29uZmlnIHx8IHZvbEhlYWRlcikgeworICAgICAgICAgICAgdm9sX2RhdGFbMF0gPSBiaXRzdHJlYW07CisgICAgICAgICAgICB2b2xfc2l6ZSA9IGluU2l6ZTsKKyAgICAgICAgfQorICAgICAgICBNUDREZWNvZGluZ01vZGUgbW9kZSA9IChtSXNNcGVnNCkgPyBNUEVHNF9NT0RFIDogSDI2M19NT0RFOworICAgICAgICBpZiAoIVBWSW5pdFZpZGVvRGVjb2RlcigKKyAgICAgICAgICAgICAgICBtRGVjSGFuZGxlLCB2b2xfZGF0YSwgJnZvbF9zaXplLCAxLAorICAgICAgICAgICAgICAgIG1JbnRmLT5nZXRNYXhXaWR0aCgpLCBtSW50Zi0+Z2V0TWF4SGVpZ2h0KCksIG1vZGUpKSB7CisgICAgICAgICAgICBBTE9HRSgiUFZJbml0VmlkZW9EZWNvZGVyIGZhaWxlZC4gVW5zdXBwb3J0ZWQgY29udGVudD8iKTsKKyAgICAgICAgICAgIG1TaWduYWxsZWRFcnJvciA9IHRydWU7CisgICAgICAgICAgICB3b3JrLT5yZXN1bHQgPSBDMl9DT1JSVVBURUQ7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgbUluaXRpYWxpemVkID0gdHJ1ZTsKKyAgICAgICAgTVA0RGVjb2RpbmdNb2RlIGFjdHVhbE1vZGUgPSBQVkdldERlY0JpdHN0cmVhbU1vZGUobURlY0hhbmRsZSk7CisgICAgICAgIGlmIChtb2RlICE9IGFjdHVhbE1vZGUpIHsKKyAgICAgICAgICAgIEFMT0dFKCJEZWNvZGVkIG1vZGUgbm90IHNhbWUgYXMgYWN0dWFsIG1vZGUgb2YgdGhlIGRlY29kZXIiKTsKKyAgICAgICAgICAgIG1TaWduYWxsZWRFcnJvciA9IHRydWU7CisgICAgICAgICAgICB3b3JrLT5yZXN1bHQgPSBDMl9DT1JSVVBURUQ7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICBQVlNldFBvc3RQcm9jVHlwZShtRGVjSGFuZGxlLCAwKTsKKyAgICAgICAgaWYgKGhhbmRsZVJlc0NoYW5nZSh3b3JrKSkgeworICAgICAgICAgICAgQUxPR0koIlNldHRpbmcgd2lkdGggYW5kIGhlaWdodCIpOworICAgICAgICAgICAgQzJWaWRlb1NpemVTdHJlYW1JbmZvOjpvdXRwdXQgc2l6ZSgwdSwgbVdpZHRoLCBtSGVpZ2h0KTsKKyAgICAgICAgICAgIHN0ZDo6dmVjdG9yPHN0ZDo6dW5pcXVlX3B0cjxDMlNldHRpbmdSZXN1bHQ+PiBmYWlsdXJlczsKKyAgICAgICAgICAgIGMyX3N0YXR1c190IGVyciA9IG1JbnRmLT5jb25maWcoeyZzaXplfSwgQzJfTUFZX0JMT0NLLCAmZmFpbHVyZXMpOworICAgICAgICAgICAgaWYgKGVyciA9PSBPSykgeworICAgICAgICAgICAgICAgIHdvcmstPndvcmtsZXRzLmZyb250KCktPm91dHB1dC5jb25maWdVcGRhdGUucHVzaF9iYWNrKAorICAgICAgICAgICAgICAgICAgICBDMlBhcmFtOjpDb3B5KHNpemUpKTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgQUxPR0UoIkNvbmZpZyB1cGRhdGUgc2l6ZSBmYWlsZWQiKTsKKyAgICAgICAgICAgICAgICBtU2lnbmFsbGVkRXJyb3IgPSB0cnVlOworICAgICAgICAgICAgICAgIHdvcmstPnJlc3VsdCA9IEMyX0NPUlJVUFRFRDsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgaWYgKGNvZGVjQ29uZmlnKSB7CisgICAgICAgICAgICBmaWxsRW1wdHlXb3JrKHdvcmspOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgfQorCisgICAgc2l6ZV90IGluUG9zID0gMDsKKyAgICB3aGlsZSAoaW5Qb3MgPCBpblNpemUpIHsKKyAgICAgICAgYzJfc3RhdHVzX3QgZXJyID0gZW5zdXJlRGVjb2RlclN0YXRlKHBvb2wpOworICAgICAgICBpZiAoQzJfT0sgIT0gZXJyKSB7CisgICAgICAgICAgICBtU2lnbmFsbGVkRXJyb3IgPSB0cnVlOworICAgICAgICAgICAgd29yay0+cmVzdWx0ID0gZXJyOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIEMyR3JhcGhpY1ZpZXcgd1ZpZXcgPSBtT3V0QmxvY2stPm1hcCgpLmdldCgpOworICAgICAgICBpZiAod1ZpZXcuZXJyb3IoKSkgeworICAgICAgICAgICAgQUxPR0UoImdyYXBoaWMgdmlldyBtYXAgZmFpbGVkICVkIiwgd1ZpZXcuZXJyb3IoKSk7CisgICAgICAgICAgICB3b3JrLT5yZXN1bHQgPSBDMl9DT1JSVVBURUQ7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICB1aW50MzJfdCB5RnJhbWVTaXplID0gc2l6ZW9mKHVpbnQ4KSAqIG1EZWNIYW5kbGUtPnNpemU7CisgICAgICAgIGlmIChtT3V0cHV0QnVmZmVyU2l6ZSA8IHlGcmFtZVNpemUgKiAzIC8gMil7CisgICAgICAgICAgICBBTE9HRSgiVG9vIHNtYWxsIG91dHB1dCBidWZmZXI6ICV6dSBieXRlcyIsIG1PdXRwdXRCdWZmZXJTaXplKTsKKyAgICAgICAgICAgIG1TaWduYWxsZWRFcnJvciA9IHRydWU7CisgICAgICAgICAgICB3b3JrLT5yZXN1bHQgPSBDMl9OT19NRU1PUlk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICBpZiAoIW1GcmFtZXNDb25maWd1cmVkKSB7CisgICAgICAgICAgICBQVlNldFJlZmVyZW5jZVlVVihtRGVjSGFuZGxlLG1PdXRwdXRCdWZmZXJbMV0pOworICAgICAgICAgICAgbUZyYW1lc0NvbmZpZ3VyZWQgPSB0cnVlOworICAgICAgICB9CisKKyAgICAgICAgLy8gTmVlZCB0byBjaGVjayBpZiBoZWFkZXIgY29udGFpbnMgbmV3IGluZm8sIGUuZy4sIHdpZHRoL2hlaWdodCwgZXRjLgorICAgICAgICBWb3BIZWFkZXJJbmZvIGhlYWRlcl9pbmZvOworICAgICAgICB1aW50MzJfdCB1c2VFeHRUaW1lc3RhbXAgPSAoaW5Qb3MgPT0gMCk7CisgICAgICAgIGludDMyX3QgdG1wSW5TaXplID0gKGludDMyX3QpaW5TaXplOworICAgICAgICB1aW50OF90ICpiaXRzdHJlYW1UbXAgPSBiaXRzdHJlYW07CisgICAgICAgIHVpbnQzMl90IHRpbWVzdGFtcCA9IHdvcmtJbmRleDsKKyAgICAgICAgaWYgKFBWRGVjb2RlVm9wSGVhZGVyKAorICAgICAgICAgICAgICAgICAgICBtRGVjSGFuZGxlLCAmYml0c3RyZWFtVG1wLCAmdGltZXN0YW1wLCAmdG1wSW5TaXplLAorICAgICAgICAgICAgICAgICAgICAmaGVhZGVyX2luZm8sICZ1c2VFeHRUaW1lc3RhbXAsCisgICAgICAgICAgICAgICAgICAgIG1PdXRwdXRCdWZmZXJbbU51bVNhbXBsZXNPdXRwdXQgJiAxXSkgIT0gUFZfVFJVRSkgeworICAgICAgICAgICAgQUxPR0UoImZhaWxlZCB0byBkZWNvZGUgdm9wIGhlYWRlci4iKTsKKyAgICAgICAgICAgIG1TaWduYWxsZWRFcnJvciA9IHRydWU7CisgICAgICAgICAgICB3b3JrLT5yZXN1bHQgPSBDMl9DT1JSVVBURUQ7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICAvLyBIMjYzIGRvZXNuJ3QgaGF2ZSBWT0wgaGVhZGVyLCB0aGUgZnJhbWUgc2l6ZSBpbmZvcm1hdGlvbiBpcyBpbiBzaG9ydCBoZWFkZXIsIGkuZS4gdGhlCisgICAgICAgIC8vIGRlY29kZXIgbWF5IGRldGVjdCBzaXplIGNoYW5nZSBhZnRlciBQVkRlY29kZVZvcEhlYWRlci4KKyAgICAgICAgYm9vbCByZXNDaGFuZ2UgPSBoYW5kbGVSZXNDaGFuZ2Uod29yayk7CisgICAgICAgIGlmIChtSXNNcGVnNCAmJiByZXNDaGFuZ2UpIHsKKyAgICAgICAgICAgIG1TaWduYWxsZWRFcnJvciA9IHRydWU7CisgICAgICAgICAgICB3b3JrLT5yZXN1bHQgPSBDMl9DT1JSVVBURUQ7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0gZWxzZSBpZiAocmVzQ2hhbmdlKSB7CisgICAgICAgICAgICBBTE9HSSgiU2V0dGluZyB3aWR0aCBhbmQgaGVpZ2h0Iik7CisgICAgICAgICAgICBDMlZpZGVvU2l6ZVN0cmVhbUluZm86Om91dHB1dCBzaXplKDB1LCBtV2lkdGgsIG1IZWlnaHQpOworICAgICAgICAgICAgc3RkOjp2ZWN0b3I8c3RkOjp1bmlxdWVfcHRyPEMyU2V0dGluZ1Jlc3VsdD4+IGZhaWx1cmVzOworICAgICAgICAgICAgYzJfc3RhdHVzX3QgZXJyID0gbUludGYtPmNvbmZpZyh7JnNpemV9LCBDMl9NQVlfQkxPQ0ssICZmYWlsdXJlcyk7CisgICAgICAgICAgICBpZiAoZXJyID09IE9LKSB7CisgICAgICAgICAgICAgICAgd29yay0+d29ya2xldHMuZnJvbnQoKS0+b3V0cHV0LmNvbmZpZ1VwZGF0ZS5wdXNoX2JhY2soQzJQYXJhbTo6Q29weShzaXplKSk7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIEFMT0dFKCJDb25maWcgdXBkYXRlIHNpemUgZmFpbGVkIik7CisgICAgICAgICAgICAgICAgbVNpZ25hbGxlZEVycm9yID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICB3b3JrLT5yZXN1bHQgPSBDMl9DT1JSVVBURUQ7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQorICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIH0KKworICAgICAgICBpZiAoUFZEZWNvZGVWb3BCb2R5KG1EZWNIYW5kbGUsICZ0bXBJblNpemUpICE9IFBWX1RSVUUpIHsKKyAgICAgICAgICAgIEFMT0dFKCJmYWlsZWQgdG8gZGVjb2RlIHZpZGVvIGZyYW1lLiIpOworICAgICAgICAgICAgbVNpZ25hbGxlZEVycm9yID0gdHJ1ZTsKKyAgICAgICAgICAgIHdvcmstPnJlc3VsdCA9IEMyX0NPUlJVUFRFRDsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICBpZiAoaGFuZGxlUmVzQ2hhbmdlKHdvcmspKSB7CisgICAgICAgICAgICBtU2lnbmFsbGVkRXJyb3IgPSB0cnVlOworICAgICAgICAgICAgd29yay0+cmVzdWx0ID0gQzJfQ09SUlVQVEVEOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgdWludDhfdCAqb3V0cHV0QnVmZmVyWSA9IHdWaWV3LmRhdGEoKVtDMlBsYW5hckxheW91dDo6UExBTkVfWV07CisgICAgICAgICh2b2lkKWNvcHlPdXRwdXRCdWZmZXJUb1lWMTJGcmFtZShvdXRwdXRCdWZmZXJZLCBtT3V0cHV0QnVmZmVyW21OdW1TYW1wbGVzT3V0cHV0ICYgMV0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3Vmlldy53aWR0aCgpLCBhbGlnbihtV2lkdGgsIDE2KSwgbVdpZHRoLCBtSGVpZ2h0KTsKKworICAgICAgICBpblBvcyArPSBpblNpemUgLSAoc2l6ZV90KXRtcEluU2l6ZTsKKyAgICAgICAgZmluaXNoV29yayh3b3JrSW5kZXgsIHdvcmspOworICAgICAgICArK21OdW1TYW1wbGVzT3V0cHV0OworICAgICAgICBpZiAoaW5TaXplIC0gaW5Qb3MgIT0gMCkgeworICAgICAgICAgICAgQUxPR0QoImRlY29kZWQgZnJhbWUsIGlnbm9yaW5nIGZ1cnRoZXIgdHJhaWxpbmcgYnl0ZXMgJWQiLAorICAgICAgICAgICAgICAgICAgKGludClpblNpemUgLSAoaW50KWluUG9zKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgfQorfQorCitjMl9zdGF0dXNfdCBDMlNvZnRNcGVnNERlYzo6ZHJhaW4oCisgICAgICAgIHVpbnQzMl90IGRyYWluTW9kZSwKKyAgICAgICAgY29uc3Qgc3RkOjpzaGFyZWRfcHRyPEMyQmxvY2tQb29sPiAmcG9vbCkgeworICAgICh2b2lkKXBvb2w7CisgICAgaWYgKGRyYWluTW9kZSA9PSBOT19EUkFJTikgeworICAgICAgICBBTE9HVygiZHJhaW4gd2l0aCBOT19EUkFJTjogbm8tb3AiKTsKKyAgICAgICAgcmV0dXJuIEMyX09LOworICAgIH0KKyAgICBpZiAoZHJhaW5Nb2RlID09IERSQUlOX0NIQUlOKSB7CisgICAgICAgIEFMT0dXKCJEUkFJTl9DSEFJTiBub3Qgc3VwcG9ydGVkIik7CisgICAgICAgIHJldHVybiBDMl9PTUlUVEVEOworICAgIH0KKyAgICByZXR1cm4gQzJfT0s7Cit9CisKK2NsYXNzIEMyU29mdE1wZWc0RGVjRmFjdG9yeSA6IHB1YmxpYyBDMkNvbXBvbmVudEZhY3RvcnkgeworcHVibGljOgorICAgIEMyU29mdE1wZWc0RGVjRmFjdG9yeSgpIDogbUhlbHBlcihzdGQ6OnN0YXRpY19wb2ludGVyX2Nhc3Q8QzJSZWZsZWN0b3JIZWxwZXI+KAorICAgICAgICBHZXRDb2RlYzJQbGF0Zm9ybUNvbXBvbmVudFN0b3JlKCktPmdldFBhcmFtUmVmbGVjdG9yKCkpKSB7CisgICAgfQorCisgICAgdmlydHVhbCBjMl9zdGF0dXNfdCBjcmVhdGVDb21wb25lbnQoCisgICAgICAgICAgICBjMl9ub2RlX2lkX3QgaWQsCisgICAgICAgICAgICBzdGQ6OnNoYXJlZF9wdHI8QzJDb21wb25lbnQ+KiBjb25zdCBjb21wb25lbnQsCisgICAgICAgICAgICBzdGQ6OmZ1bmN0aW9uPHZvaWQoQzJDb21wb25lbnQqKT4gZGVsZXRlcikgb3ZlcnJpZGUgeworICAgICAgICAqY29tcG9uZW50ID0gc3RkOjpzaGFyZWRfcHRyPEMyQ29tcG9uZW50PigKKyAgICAgICAgICAgICAgICBuZXcgQzJTb2Z0TXBlZzREZWMoQ09NUE9ORU5UX05BTUUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGQ6Om1ha2Vfc2hhcmVkPEMyU29mdE1wZWc0RGVjOjpJbnRmSW1wbD4obUhlbHBlcikpLAorICAgICAgICAgICAgICAgIGRlbGV0ZXIpOworICAgICAgICByZXR1cm4gQzJfT0s7CisgICAgfQorCisgICAgdmlydHVhbCBjMl9zdGF0dXNfdCBjcmVhdGVJbnRlcmZhY2UoCisgICAgICAgICAgICBjMl9ub2RlX2lkX3QgaWQsCisgICAgICAgICAgICBzdGQ6OnNoYXJlZF9wdHI8QzJDb21wb25lbnRJbnRlcmZhY2U+KiBjb25zdCBpbnRlcmZhY2UsCisgICAgICAgICAgICBzdGQ6OmZ1bmN0aW9uPHZvaWQoQzJDb21wb25lbnRJbnRlcmZhY2UqKT4gZGVsZXRlcikgb3ZlcnJpZGUgeworICAgICAgICAqaW50ZXJmYWNlID0gc3RkOjpzaGFyZWRfcHRyPEMyQ29tcG9uZW50SW50ZXJmYWNlPigKKyAgICAgICAgICAgICAgICBuZXcgU2ltcGxlSW50ZXJmYWNlPEMyU29mdE1wZWc0RGVjOjpJbnRmSW1wbD4oCisgICAgICAgICAgICAgICAgICAgICAgICBDT01QT05FTlRfTkFNRSwgaWQsIHN0ZDo6bWFrZV9zaGFyZWQ8QzJTb2Z0TXBlZzREZWM6OkludGZJbXBsPihtSGVscGVyKSksCisgICAgICAgICAgICAgICAgZGVsZXRlcik7CisgICAgICAgIHJldHVybiBDMl9PSzsKKyAgICB9CisKKyAgICB2aXJ0dWFsIH5DMlNvZnRNcGVnNERlY0ZhY3RvcnkoKSBvdmVycmlkZSA9IGRlZmF1bHQ7CisKK3ByaXZhdGU6CisgICAgc3RkOjpzaGFyZWRfcHRyPEMyUmVmbGVjdG9ySGVscGVyPiBtSGVscGVyOworfTsKKworfSAgLy8gbmFtZXNwYWNlIGFuZHJvaWQKKworZXh0ZXJuICJDIiA6OkMyQ29tcG9uZW50RmFjdG9yeSogQ3JlYXRlQ29kZWMyRmFjdG9yeSgpIHsKKyAgICBBTE9HVigiaW4gJXMiLCBfX2Z1bmNfXyk7CisgICAgcmV0dXJuIG5ldyA6OmFuZHJvaWQ6OkMyU29mdE1wZWc0RGVjRmFjdG9yeSgpOworfQorCitleHRlcm4gIkMiIHZvaWQgRGVzdHJveUNvZGVjMkZhY3RvcnkoOjpDMkNvbXBvbmVudEZhY3RvcnkqIGZhY3RvcnkpIHsKKyAgICBBTE9HVigiaW4gJXMiLCBfX2Z1bmNfXyk7CisgICAgZGVsZXRlIGZhY3Rvcnk7Cit9CmRpZmYgLS1naXQgYS9tZWRpYS9jb2RlYzIvY29tcG9uZW50cy9tcGVnNF9oMjYzL0MyU29mdE1wZWc0RGVjLmggYi9tZWRpYS9jb2RlYzIvY29tcG9uZW50cy9tcGVnNF9oMjYzL0MyU29mdE1wZWc0RGVjLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzE2YTA5NQotLS0gL2Rldi9udWxsCisrKyBiL21lZGlhL2NvZGVjMi9jb21wb25lbnRzL21wZWc0X2gyNjMvQzJTb2Z0TXBlZzREZWMuaApAQCAtMCwwICsxLDc3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE4IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KKworI2lmbmRlZiBDMl9TT0ZUX01QRUc0X0RFQ19IXworI2RlZmluZSBDMl9TT0ZUX01QRUc0X0RFQ19IXworCisjaW5jbHVkZSA8U2ltcGxlQzJDb21wb25lbnQuaD4KKworCitzdHJ1Y3QgdGFndmlkZW9EZWNDb250cm9sczsKKworbmFtZXNwYWNlIGFuZHJvaWQgeworCitzdHJ1Y3QgQzJTb2Z0TXBlZzREZWMgOiBwdWJsaWMgU2ltcGxlQzJDb21wb25lbnQgeworICAgIGNsYXNzIEludGZJbXBsOworCisgICAgQzJTb2Z0TXBlZzREZWMoY29uc3QgY2hhciogbmFtZSwgYzJfbm9kZV9pZF90IGlkLAorICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0ZDo6c2hhcmVkX3B0cjxJbnRmSW1wbD4mIGludGZJbXBsKTsKKyAgICB2aXJ0dWFsIH5DMlNvZnRNcGVnNERlYygpOworCisgICAgLy8gRnJvbSBTaW1wbGVDMkNvbXBvbmVudAorICAgIGMyX3N0YXR1c190IG9uSW5pdCgpIG92ZXJyaWRlOworICAgIGMyX3N0YXR1c190IG9uU3RvcCgpIG92ZXJyaWRlOworICAgIHZvaWQgb25SZXNldCgpIG92ZXJyaWRlOworICAgIHZvaWQgb25SZWxlYXNlKCkgb3ZlcnJpZGU7CisgICAgYzJfc3RhdHVzX3Qgb25GbHVzaF9zbSgpIG92ZXJyaWRlOworICAgIHZvaWQgcHJvY2VzcygKKyAgICAgICAgICAgIGNvbnN0IHN0ZDo6dW5pcXVlX3B0cjxDMldvcms+ICZ3b3JrLAorICAgICAgICAgICAgY29uc3Qgc3RkOjpzaGFyZWRfcHRyPEMyQmxvY2tQb29sPiAmcG9vbCkgb3ZlcnJpZGU7CisgICAgYzJfc3RhdHVzX3QgZHJhaW4oCisgICAgICAgICAgICB1aW50MzJfdCBkcmFpbk1vZGUsCisgICAgICAgICAgICBjb25zdCBzdGQ6OnNoYXJlZF9wdHI8QzJCbG9ja1Bvb2w+ICZwb29sKSBvdmVycmlkZTsKKyBwcml2YXRlOgorICAgIGVudW0geworICAgICAgICBrTnVtT3V0cHV0QnVmZmVycyA9IDIsCisgICAgfTsKKworICAgIHN0YXR1c190IGluaXREZWNvZGVyKCk7CisgICAgYzJfc3RhdHVzX3QgZW5zdXJlRGVjb2RlclN0YXRlKGNvbnN0IHN0ZDo6c2hhcmVkX3B0cjxDMkJsb2NrUG9vbD4gJnBvb2wpOworICAgIHZvaWQgZmluaXNoV29yayh1aW50NjRfdCBpbmRleCwgY29uc3Qgc3RkOjp1bmlxdWVfcHRyPEMyV29yaz4gJndvcmspOworICAgIGJvb2wgaGFuZGxlUmVzQ2hhbmdlKGNvbnN0IHN0ZDo6dW5pcXVlX3B0cjxDMldvcms+ICZ3b3JrKTsKKworICAgIHN0ZDo6c2hhcmVkX3B0cjxJbnRmSW1wbD4gbUludGY7CisgICAgdGFndmlkZW9EZWNDb250cm9scyAqbURlY0hhbmRsZTsKKyAgICBzdGQ6OnNoYXJlZF9wdHI8QzJHcmFwaGljQmxvY2s+IG1PdXRCbG9jazsKKyAgICB1aW50OF90ICptT3V0cHV0QnVmZmVyW2tOdW1PdXRwdXRCdWZmZXJzXTsKKyAgICBzaXplX3QgIG1PdXRwdXRCdWZmZXJTaXplOworCisgICAgdWludDMyX3QgbVdpZHRoOworICAgIHVpbnQzMl90IG1IZWlnaHQ7CisgICAgdWludDMyX3QgbU51bVNhbXBsZXNPdXRwdXQ7CisKKyAgICBib29sIG1Jc01wZWc0OworICAgIGJvb2wgbUluaXRpYWxpemVkOworICAgIGJvb2wgbUZyYW1lc0NvbmZpZ3VyZWQ7CisgICAgYm9vbCBtU2lnbmFsbGVkT3V0cHV0RW9zOworICAgIGJvb2wgbVNpZ25hbGxlZEVycm9yOworCisgICAgQzJfRE9fTk9UX0NPUFkoQzJTb2Z0TXBlZzREZWMpOworfTsKKworfSAgLy8gbmFtZXNwYWNlIGFuZHJvaWQKKworI2VuZGlmICAvLyBDMl9TT0ZUX01QRUc0X0RFQ19IXwpkaWZmIC0tZ2l0IGEvbWVkaWEvY29kZWMyL2NvbXBvbmVudHMvbXBlZzRfaDI2My9DMlNvZnRNcGVnNEVuYy5jcHAgYi9tZWRpYS9jb2RlYzIvY29tcG9uZW50cy9tcGVnNF9oMjYzL0MyU29mdE1wZWc0RW5jLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jODc5NmYzCi0tLSAvZGV2L251bGwKKysrIGIvbWVkaWEvY29kZWMyL2NvbXBvbmVudHMvbXBlZzRfaDI2My9DMlNvZnRNcGVnNEVuYy5jcHAKQEAgLTAsMCArMSw2NzEgQEAKKy8qCisgKiBDb3B5cmlnaHQgMjAxOCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCisKKy8vI2RlZmluZSBMT0dfTkRFQlVHIDAKKyNpZmRlZiBNUEVHNAorICAjZGVmaW5lIExPR19UQUcgIkMyU29mdE1wZWc0RW5jIgorI2Vsc2UKKyAgI2RlZmluZSBMT0dfVEFHICJDMlNvZnRIMjYzRW5jIgorI2VuZGlmCisjaW5jbHVkZSA8bG9nL2xvZy5oPgorCisjaW5jbHVkZSA8aW50dHlwZXMuaD4KKworI2luY2x1ZGUgPG1lZGlhL2hhcmR3YXJlL1ZpZGVvQVBJLmg+CisjaW5jbHVkZSA8bWVkaWEvc3RhZ2VmcmlnaHQvZm91bmRhdGlvbi9BVXRpbHMuaD4KKyNpbmNsdWRlIDxtZWRpYS9zdGFnZWZyaWdodC9NZWRpYURlZnMuaD4KKyNpbmNsdWRlIDx1dGlscy9taXNjLmg+CisKKyNpbmNsdWRlIDxDMkRlYnVnLmg+CisjaW5jbHVkZSA8QzJQbGF0Zm9ybVN1cHBvcnQuaD4KKyNpbmNsdWRlIDxTaW1wbGVDMkludGVyZmFjZS5oPgorI2luY2x1ZGUgPHV0aWwvQzJJbnRlcmZhY2VIZWxwZXIuaD4KKworI2luY2x1ZGUgIkMyU29mdE1wZWc0RW5jLmgiCisjaW5jbHVkZSAibXA0ZW5jX2FwaS5oIgorCituYW1lc3BhY2UgYW5kcm9pZCB7CisKKyNpZmRlZiBNUEVHNAorY29uc3RleHByIGNoYXIgQ09NUE9ORU5UX05BTUVbXSA9ICJjMi5hbmRyb2lkLm1wZWc0LmVuY29kZXIiOworI2Vsc2UKK2NvbnN0ZXhwciBjaGFyIENPTVBPTkVOVF9OQU1FW10gPSAiYzIuYW5kcm9pZC5oMjYzLmVuY29kZXIiOworI2VuZGlmCisKK2NsYXNzIEMyU29mdE1wZWc0RW5jOjpJbnRmSW1wbCA6IHB1YmxpYyBDMkludGVyZmFjZUhlbHBlciB7CisgICBwdWJsaWM6CisgICAgZXhwbGljaXQgSW50ZkltcGwoY29uc3Qgc3RkOjpzaGFyZWRfcHRyPEMyUmVmbGVjdG9ySGVscGVyPiYgaGVscGVyKQorICAgICAgICA6IEMySW50ZXJmYWNlSGVscGVyKGhlbHBlcikgeworICAgICAgICBzZXREZXJpdmVkSW5zdGFuY2UodGhpcyk7CisKKyAgICAgICAgYWRkUGFyYW1ldGVyKAorICAgICAgICAgICAgRGVmaW5lUGFyYW0obUlucHV0Rm9ybWF0LCBDMl9OQU1FX0lOUFVUX1NUUkVBTV9GT1JNQVRfU0VUVElORykKKyAgICAgICAgICAgICAgICAud2l0aENvbnN0VmFsdWUoCisgICAgICAgICAgICAgICAgICAgIG5ldyBDMlN0cmVhbUZvcm1hdENvbmZpZzo6aW5wdXQoMHUsIEMyRm9ybWF0VmlkZW8pKQorICAgICAgICAgICAgICAgIC5idWlsZCgpKTsKKworICAgICAgICBhZGRQYXJhbWV0ZXIoCisgICAgICAgICAgICBEZWZpbmVQYXJhbShtT3V0cHV0Rm9ybWF0LCBDMl9OQU1FX09VVFBVVF9TVFJFQU1fRk9STUFUX1NFVFRJTkcpCisgICAgICAgICAgICAgICAgLndpdGhDb25zdFZhbHVlKAorICAgICAgICAgICAgICAgICAgICBuZXcgQzJTdHJlYW1Gb3JtYXRDb25maWc6Om91dHB1dCgwdSwgQzJGb3JtYXRDb21wcmVzc2VkKSkKKyAgICAgICAgICAgICAgICAuYnVpbGQoKSk7CisKKyAgICAgICAgYWRkUGFyYW1ldGVyKAorICAgICAgICAgICAgRGVmaW5lUGFyYW0obUlucHV0TWVkaWFUeXBlLCBDMl9OQU1FX0lOUFVUX1BPUlRfTUlNRV9TRVRUSU5HKQorICAgICAgICAgICAgICAgIC53aXRoQ29uc3RWYWx1ZShBbGxvY1NoYXJlZFN0cmluZzxDMlBvcnRNaW1lQ29uZmlnOjppbnB1dD4oCisgICAgICAgICAgICAgICAgICAgIE1FRElBX01JTUVUWVBFX1ZJREVPX1JBVykpCisgICAgICAgICAgICAgICAgLmJ1aWxkKCkpOworCisgICAgICAgIGFkZFBhcmFtZXRlcigKKyAgICAgICAgICAgIERlZmluZVBhcmFtKG1PdXRwdXRNZWRpYVR5cGUsIEMyX05BTUVfT1VUUFVUX1BPUlRfTUlNRV9TRVRUSU5HKQorICAgICAgICAgICAgICAgIC53aXRoQ29uc3RWYWx1ZShBbGxvY1NoYXJlZFN0cmluZzxDMlBvcnRNaW1lQ29uZmlnOjpvdXRwdXQ+KAorI2lmZGVmIE1QRUc0CisgICAgICAgICAgICAgICAgICAgIE1FRElBX01JTUVUWVBFX1ZJREVPX01QRUc0CisjZWxzZQorICAgICAgICAgICAgICAgICAgICBNRURJQV9NSU1FVFlQRV9WSURFT19IMjYzCisjZW5kaWYKKyAgICAgICAgICAgICAgICAgICAgKSkKKyAgICAgICAgICAgICAgICAuYnVpbGQoKSk7CisKKyAgICAgICAgYWRkUGFyYW1ldGVyKERlZmluZVBhcmFtKG1Vc2FnZSwgQzJfTkFNRV9JTlBVVF9TVFJFQU1fVVNBR0VfU0VUVElORykKKyAgICAgICAgICAgICAgICAgICAgICAgICAud2l0aENvbnN0VmFsdWUobmV3IEMyU3RyZWFtVXNhZ2VUdW5pbmc6OmlucHV0KAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwdSwgKHVpbnQ2NF90KUMyTWVtb3J5VXNhZ2U6OkNQVV9SRUFEKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAuYnVpbGQoKSk7CisKKyAgICAgICAgYWRkUGFyYW1ldGVyKAorICAgICAgICAgICAgRGVmaW5lUGFyYW0obVNpemUsIEMyX05BTUVfU1RSRUFNX1ZJREVPX1NJWkVfU0VUVElORykKKyAgICAgICAgICAgICAgICAud2l0aERlZmF1bHQobmV3IEMyVmlkZW9TaXplU3RyZWFtVHVuaW5nOjppbnB1dCgwdSwgMTc2LCAxNDQpKQorICAgICAgICAgICAgICAgIC53aXRoRmllbGRzKHsKKyNpZmRlZiBNUEVHNAorICAgICAgICAgICAgICAgICAgICBDMkYobVNpemUsIHdpZHRoKS5pblJhbmdlKDE2LCAxNzYsIDE2KSwKKyAgICAgICAgICAgICAgICAgICAgQzJGKG1TaXplLCBoZWlnaHQpLmluUmFuZ2UoMTYsIDE0NCwgMTYpLAorI2Vsc2UKKyAgICAgICAgICAgICAgICAgICAgQzJGKG1TaXplLCB3aWR0aCkub25lT2YoezE3NiwgMzUyfSksCisgICAgICAgICAgICAgICAgICAgIEMyRihtU2l6ZSwgaGVpZ2h0KS5vbmVPZih7MTQ0LCAyODh9KSwKKyNlbmRpZgorICAgICAgICAgICAgICAgIH0pCisgICAgICAgICAgICAgICAgLndpdGhTZXR0ZXIoU2l6ZVNldHRlcikKKyAgICAgICAgICAgICAgICAuYnVpbGQoKSk7CisKKyAgICAgICAgYWRkUGFyYW1ldGVyKAorICAgICAgICAgICAgRGVmaW5lUGFyYW0obUZyYW1lUmF0ZSwgQzJfTkFNRV9TVFJFQU1fRlJBTUVfUkFURV9TRVRUSU5HKQorICAgICAgICAgICAgICAgIC53aXRoRGVmYXVsdChuZXcgQzJTdHJlYW1GcmFtZVJhdGVJbmZvOjpvdXRwdXQoMHUsIDE3LikpCisgICAgICAgICAgICAgICAgLy8gVE9ETzogTW9yZSByZXN0cmljdGlvbj8KKyAgICAgICAgICAgICAgICAud2l0aEZpZWxkcyh7QzJGKG1GcmFtZVJhdGUsIHZhbHVlKS5ncmVhdGVyVGhhbigwLil9KQorICAgICAgICAgICAgICAgIC53aXRoU2V0dGVyKAorICAgICAgICAgICAgICAgICAgICBTZXR0ZXI8ZGVjbHR5cGUoKm1GcmFtZVJhdGUpPjo6U3RyaWN0VmFsdWVXaXRoTm9EZXBzKQorICAgICAgICAgICAgICAgIC5idWlsZCgpKTsKKworICAgICAgICBhZGRQYXJhbWV0ZXIoCisgICAgICAgICAgICBEZWZpbmVQYXJhbShtQml0cmF0ZSwgQzJfTkFNRV9TVFJFQU1fQklUUkFURV9TRVRUSU5HKQorICAgICAgICAgICAgICAgIC53aXRoRGVmYXVsdChuZXcgQzJCaXRyYXRlVHVuaW5nOjpvdXRwdXQoMHUsIDY0MDAwKSkKKyAgICAgICAgICAgICAgICAud2l0aEZpZWxkcyh7QzJGKG1CaXRyYXRlLCB2YWx1ZSkuaW5SYW5nZSg0MDk2LCAxMjAwMDAwMCl9KQorICAgICAgICAgICAgICAgIC53aXRoU2V0dGVyKEJpdHJhdGVTZXR0ZXIpCisgICAgICAgICAgICAgICAgLmJ1aWxkKCkpOworCisgICAgICAgIGFkZFBhcmFtZXRlcigKKyAgICAgICAgICAgICAgICBEZWZpbmVQYXJhbShtU3luY0ZyYW1lUGVyaW9kLCBDMl9QQVJBTUtFWV9TWU5DX0ZSQU1FX0lOVEVSVkFMKQorICAgICAgICAgICAgICAgIC53aXRoRGVmYXVsdChuZXcgQzJTdHJlYW1TeW5jRnJhbWVJbnRlcnZhbFR1bmluZzo6b3V0cHV0KDB1LCAxMDAwMDAwKSkKKyAgICAgICAgICAgICAgICAud2l0aEZpZWxkcyh7QzJGKG1TeW5jRnJhbWVQZXJpb2QsIHZhbHVlKS5hbnkoKX0pCisgICAgICAgICAgICAgICAgLndpdGhTZXR0ZXIoU2V0dGVyPGRlY2x0eXBlKCptU3luY0ZyYW1lUGVyaW9kKT46OlN0cmljdFZhbHVlV2l0aE5vRGVwcykKKyAgICAgICAgICAgICAgICAuYnVpbGQoKSk7CisKKyNpZmRlZiBNUEVHNAorICAgICAgICBhZGRQYXJhbWV0ZXIoCisgICAgICAgICAgICAgICAgRGVmaW5lUGFyYW0obVByb2ZpbGVMZXZlbCwgQzJfUEFSQU1LRVlfUFJPRklMRV9MRVZFTCkKKyAgICAgICAgICAgICAgICAud2l0aERlZmF1bHQobmV3IEMyU3RyZWFtUHJvZmlsZUxldmVsSW5mbzo6b3V0cHV0KAorICAgICAgICAgICAgICAgICAgICAgICAgMHUsIFBST0ZJTEVfTVA0Vl9TSU1QTEUsIExFVkVMX01QNFZfMikpCisgICAgICAgICAgICAgICAgLndpdGhGaWVsZHMoeworICAgICAgICAgICAgICAgICAgICBDMkYobVByb2ZpbGVMZXZlbCwgcHJvZmlsZSkuZXF1YWxUbygKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBQUk9GSUxFX01QNFZfU0lNUExFKSwKKyAgICAgICAgICAgICAgICAgICAgQzJGKG1Qcm9maWxlTGV2ZWwsIGxldmVsKS5vbmVPZih7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgQzJDb25maWc6OkxFVkVMX01QNFZfMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBDMkNvbmZpZzo6TEVWRUxfTVA0Vl8wQiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBDMkNvbmZpZzo6TEVWRUxfTVA0Vl8xLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIEMyQ29uZmlnOjpMRVZFTF9NUDRWXzJ9KQorICAgICAgICAgICAgICAgIH0pCisgICAgICAgICAgICAgICAgLndpdGhTZXR0ZXIoUHJvZmlsZUxldmVsU2V0dGVyKQorICAgICAgICAgICAgICAgIC5idWlsZCgpKTsKKyNlbHNlCisgICAgICAgIGFkZFBhcmFtZXRlcigKKyAgICAgICAgICAgICAgICBEZWZpbmVQYXJhbShtUHJvZmlsZUxldmVsLCBDMl9QQVJBTUtFWV9QUk9GSUxFX0xFVkVMKQorICAgICAgICAgICAgICAgIC53aXRoRGVmYXVsdChuZXcgQzJTdHJlYW1Qcm9maWxlTGV2ZWxJbmZvOjpvdXRwdXQoCisgICAgICAgICAgICAgICAgICAgICAgICAwdSwgUFJPRklMRV9IMjYzX0JBU0VMSU5FLCBMRVZFTF9IMjYzXzQ1KSkKKyAgICAgICAgICAgICAgICAud2l0aEZpZWxkcyh7CisgICAgICAgICAgICAgICAgICAgIEMyRihtUHJvZmlsZUxldmVsLCBwcm9maWxlKS5lcXVhbFRvKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBST0ZJTEVfSDI2M19CQVNFTElORSksCisgICAgICAgICAgICAgICAgICAgIEMyRihtUHJvZmlsZUxldmVsLCBsZXZlbCkub25lT2YoeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIEMyQ29uZmlnOjpMRVZFTF9IMjYzXzEwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIEMyQ29uZmlnOjpMRVZFTF9IMjYzXzIwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIEMyQ29uZmlnOjpMRVZFTF9IMjYzXzMwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIEMyQ29uZmlnOjpMRVZFTF9IMjYzXzQwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIEMyQ29uZmlnOjpMRVZFTF9IMjYzXzQ1fSkKKyAgICAgICAgICAgICAgICB9KQorICAgICAgICAgICAgICAgIC53aXRoU2V0dGVyKFByb2ZpbGVMZXZlbFNldHRlcikKKyAgICAgICAgICAgICAgICAuYnVpbGQoKSk7CisjZW5kaWYKKyAgICB9CisKKyAgICBzdGF0aWMgQzJSIEJpdHJhdGVTZXR0ZXIoYm9vbCBtYXlCbG9jaywgQzJQPEMyU3RyZWFtQml0cmF0ZUluZm86Om91dHB1dD4gJm1lKSB7CisgICAgICAgICh2b2lkKW1heUJsb2NrOworICAgICAgICBDMlIgcmVzID0gQzJSOjpPaygpOworICAgICAgICBpZiAobWUudi52YWx1ZSA8PSA0MDk2KSB7CisgICAgICAgICAgICBtZS5zZXQoKS52YWx1ZSA9IDQwOTY7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHJlczsKKyAgICB9CisKKyAgICBzdGF0aWMgQzJSIFNpemVTZXR0ZXIoYm9vbCBtYXlCbG9jaywgY29uc3QgQzJQPEMyU3RyZWFtUGljdHVyZVNpemVJbmZvOjppbnB1dD4gJm9sZE1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICBDMlA8QzJTdHJlYW1QaWN0dXJlU2l6ZUluZm86OmlucHV0PiAmbWUpIHsKKyAgICAgICAgKHZvaWQpbWF5QmxvY2s7CisgICAgICAgIEMyUiByZXMgPSBDMlI6Ok9rKCk7CisgICAgICAgIGlmICghbWUuRihtZS52LndpZHRoKS5zdXBwb3J0c0F0QWxsKG1lLnYud2lkdGgpKSB7CisgICAgICAgICAgICByZXMgPSByZXMucGx1cyhDMlNldHRpbmdSZXN1bHRCdWlsZGVyOjpCYWRWYWx1ZShtZS5GKG1lLnYud2lkdGgpKSk7CisgICAgICAgICAgICBtZS5zZXQoKS53aWR0aCA9IG9sZE1lLnYud2lkdGg7CisgICAgICAgIH0KKyAgICAgICAgaWYgKCFtZS5GKG1lLnYuaGVpZ2h0KS5zdXBwb3J0c0F0QWxsKG1lLnYuaGVpZ2h0KSkgeworICAgICAgICAgICAgcmVzID0gcmVzLnBsdXMoQzJTZXR0aW5nUmVzdWx0QnVpbGRlcjo6QmFkVmFsdWUobWUuRihtZS52LmhlaWdodCkpKTsKKyAgICAgICAgICAgIG1lLnNldCgpLmhlaWdodCA9IG9sZE1lLnYuaGVpZ2h0OworICAgICAgICB9CisgICAgICAgIHJldHVybiByZXM7CisgICAgfQorCisgICAgc3RhdGljIEMyUiBQcm9maWxlTGV2ZWxTZXR0ZXIoCisgICAgICAgICAgICBib29sIG1heUJsb2NrLAorICAgICAgICAgICAgQzJQPEMyU3RyZWFtUHJvZmlsZUxldmVsSW5mbzo6b3V0cHV0PiAmbWUpIHsKKyAgICAgICAgKHZvaWQpbWF5QmxvY2s7CisgICAgICAgIGlmICghbWUuRihtZS52LnByb2ZpbGUpLnN1cHBvcnRzQXRBbGwobWUudi5wcm9maWxlKSkgeworI2lmZGVmIE1QRUc0CisgICAgICAgICAgICBtZS5zZXQoKS5wcm9maWxlID0gUFJPRklMRV9NUDRWX1NJTVBMRTsKKyNlbHNlCisgICAgICAgICAgICBtZS5zZXQoKS5wcm9maWxlID0gUFJPRklMRV9IMjYzX0JBU0VMSU5FOworI2VuZGlmCisgICAgICAgIH0KKyAgICAgICAgaWYgKCFtZS5GKG1lLnYubGV2ZWwpLnN1cHBvcnRzQXRBbGwobWUudi5sZXZlbCkpIHsKKyNpZmRlZiBNUEVHNAorICAgICAgICAgICAgbWUuc2V0KCkubGV2ZWwgPSBMRVZFTF9NUDRWXzI7CisjZWxzZQorICAgICAgICAgICAgbWUuc2V0KCkubGV2ZWwgPSBMRVZFTF9IMjYzXzQ1OworI2VuZGlmCisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIEMyUjo6T2soKTsKKyAgICB9CisKKyAgICAvLyB1bnNhZmUgZ2V0dGVycworICAgIHN0ZDo6c2hhcmVkX3B0cjxDMlN0cmVhbVBpY3R1cmVTaXplSW5mbzo6aW5wdXQ+IGdldFNpemVfbCgpIGNvbnN0IHsgcmV0dXJuIG1TaXplOyB9CisgICAgc3RkOjpzaGFyZWRfcHRyPEMyU3RyZWFtRnJhbWVSYXRlSW5mbzo6b3V0cHV0PiBnZXRGcmFtZVJhdGVfbCgpIGNvbnN0IHsgcmV0dXJuIG1GcmFtZVJhdGU7IH0KKyAgICBzdGQ6OnNoYXJlZF9wdHI8QzJTdHJlYW1CaXRyYXRlSW5mbzo6b3V0cHV0PiBnZXRCaXRyYXRlX2woKSBjb25zdCB7IHJldHVybiBtQml0cmF0ZTsgfQorICAgIHVpbnQzMl90IGdldFN5bmNGcmFtZVBlcmlvZCgpIGNvbnN0IHsKKyAgICAgICAgaWYgKG1TeW5jRnJhbWVQZXJpb2QtPnZhbHVlIDwgMCB8fCBtU3luY0ZyYW1lUGVyaW9kLT52YWx1ZSA9PSBJTlQ2NF9NQVgpIHsKKyAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICB9CisgICAgICAgIGRvdWJsZSBwZXJpb2QgPSBtU3luY0ZyYW1lUGVyaW9kLT52YWx1ZSAvIDFlNiAqIG1GcmFtZVJhdGUtPnZhbHVlOworICAgICAgICByZXR1cm4gKHVpbnQzMl90KWMyX21heChjMl9taW4ocGVyaW9kICsgMC41LCBkb3VibGUoVUlOVDMyX01BWCkpLCAxLik7CisgICAgfQorCisgICBwcml2YXRlOgorICAgIHN0ZDo6c2hhcmVkX3B0cjxDMlN0cmVhbUZvcm1hdENvbmZpZzo6aW5wdXQ+IG1JbnB1dEZvcm1hdDsKKyAgICBzdGQ6OnNoYXJlZF9wdHI8QzJTdHJlYW1Gb3JtYXRDb25maWc6Om91dHB1dD4gbU91dHB1dEZvcm1hdDsKKyAgICBzdGQ6OnNoYXJlZF9wdHI8QzJQb3J0TWltZUNvbmZpZzo6aW5wdXQ+IG1JbnB1dE1lZGlhVHlwZTsKKyAgICBzdGQ6OnNoYXJlZF9wdHI8QzJQb3J0TWltZUNvbmZpZzo6b3V0cHV0PiBtT3V0cHV0TWVkaWFUeXBlOworICAgIHN0ZDo6c2hhcmVkX3B0cjxDMlN0cmVhbVVzYWdlVHVuaW5nOjppbnB1dD4gbVVzYWdlOworICAgIHN0ZDo6c2hhcmVkX3B0cjxDMlZpZGVvU2l6ZVN0cmVhbVR1bmluZzo6aW5wdXQ+IG1TaXplOworICAgIHN0ZDo6c2hhcmVkX3B0cjxDMlN0cmVhbUZyYW1lUmF0ZUluZm86Om91dHB1dD4gbUZyYW1lUmF0ZTsKKyAgICBzdGQ6OnNoYXJlZF9wdHI8QzJCaXRyYXRlVHVuaW5nOjpvdXRwdXQ+IG1CaXRyYXRlOworICAgIHN0ZDo6c2hhcmVkX3B0cjxDMlN0cmVhbVByb2ZpbGVMZXZlbEluZm86Om91dHB1dD4gbVByb2ZpbGVMZXZlbDsKKyAgICBzdGQ6OnNoYXJlZF9wdHI8QzJTdHJlYW1TeW5jRnJhbWVJbnRlcnZhbFR1bmluZzo6b3V0cHV0PiBtU3luY0ZyYW1lUGVyaW9kOworfTsKKworQzJTb2Z0TXBlZzRFbmM6OkMyU29mdE1wZWc0RW5jKGNvbnN0IGNoYXIqIG5hbWUsIGMyX25vZGVfaWRfdCBpZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdGQ6OnNoYXJlZF9wdHI8SW50ZkltcGw+JiBpbnRmSW1wbCkKKyAgICA6IFNpbXBsZUMyQ29tcG9uZW50KAorICAgICAgICAgIHN0ZDo6bWFrZV9zaGFyZWQ8U2ltcGxlSW50ZXJmYWNlPEludGZJbXBsPj4obmFtZSwgaWQsIGludGZJbXBsKSksCisgICAgICBtSW50ZihpbnRmSW1wbCksCisgICAgICBtSGFuZGxlKG51bGxwdHIpLAorICAgICAgbUVuY1BhcmFtcyhudWxscHRyKSwKKyAgICAgIG1TdGFydGVkKGZhbHNlKSwKKyAgICAgIG1PdXRCdWZmZXJTaXplKDUyNDI4OCkgeworfQorCitDMlNvZnRNcGVnNEVuYzo6fkMyU29mdE1wZWc0RW5jKCkgeworICAgIG9uUmVsZWFzZSgpOworfQorCitjMl9zdGF0dXNfdCBDMlNvZnRNcGVnNEVuYzo6b25Jbml0KCkgeworI2lmZGVmIE1QRUc0CisgICAgbUVuY29kZU1vZGUgPSBDT01CSU5FX01PREVfV0lUSF9FUlJfUkVTOworI2Vsc2UKKyAgICBtRW5jb2RlTW9kZSA9IEgyNjNfTU9ERTsKKyNlbmRpZgorICAgIGlmICghbUhhbmRsZSkgeworICAgICAgICBtSGFuZGxlID0gbmV3IHRhZ3ZpZGVvRW5jQ29udHJvbHM7CisgICAgfQorCisgICAgaWYgKCFtRW5jUGFyYW1zKSB7CisgICAgICAgIG1FbmNQYXJhbXMgPSBuZXcgdGFndmlkZW9FbmNPcHRpb25zOworICAgIH0KKworICAgIGlmICghKG1FbmNQYXJhbXMgJiYgbUhhbmRsZSkpIHJldHVybiBDMl9OT19NRU1PUlk7CisKKyAgICBtU2lnbmFsbGVkT3V0cHV0RW9zID0gZmFsc2U7CisgICAgbVNpZ25hbGxlZEVycm9yID0gZmFsc2U7CisKKyAgICByZXR1cm4gaW5pdEVuY29kZXIoKTsKK30KKworYzJfc3RhdHVzX3QgQzJTb2Z0TXBlZzRFbmM6Om9uU3RvcCgpIHsKKyAgICBpZiAoIW1TdGFydGVkKSB7CisgICAgICAgIHJldHVybiBDMl9PSzsKKyAgICB9CisgICAgaWYgKG1IYW5kbGUpIHsKKyAgICAgICAgKHZvaWQpUFZDbGVhblVwVmlkZW9FbmNvZGVyKG1IYW5kbGUpOworICAgIH0KKyAgICBtU3RhcnRlZCA9IGZhbHNlOworICAgIG1TaWduYWxsZWRPdXRwdXRFb3MgPSBmYWxzZTsKKyAgICBtU2lnbmFsbGVkRXJyb3IgPSBmYWxzZTsKKyAgICByZXR1cm4gQzJfT0s7Cit9CisKK3ZvaWQgQzJTb2Z0TXBlZzRFbmM6Om9uUmVzZXQoKSB7CisgICAgb25TdG9wKCk7CisgICAgaW5pdEVuY29kZXIoKTsKK30KKwordm9pZCBDMlNvZnRNcGVnNEVuYzo6b25SZWxlYXNlKCkgeworICAgIG9uU3RvcCgpOworICAgIGlmIChtRW5jUGFyYW1zKSB7CisgICAgICAgIGRlbGV0ZSBtRW5jUGFyYW1zOworICAgICAgICBtRW5jUGFyYW1zID0gbnVsbHB0cjsKKyAgICB9CisgICAgaWYgKG1IYW5kbGUpIHsKKyAgICAgICAgZGVsZXRlIG1IYW5kbGU7CisgICAgICAgIG1IYW5kbGUgPSBudWxscHRyOworICAgIH0KK30KKworYzJfc3RhdHVzX3QgQzJTb2Z0TXBlZzRFbmM6Om9uRmx1c2hfc20oKSB7CisgICAgcmV0dXJuIEMyX09LOworfQorCitzdGF0aWMgdm9pZCBmaWxsRW1wdHlXb3JrKGNvbnN0IHN0ZDo6dW5pcXVlX3B0cjxDMldvcms+ICZ3b3JrKSB7CisgICAgdWludDMyX3QgZmxhZ3MgPSAwOworICAgIGlmICh3b3JrLT5pbnB1dC5mbGFncyAmIEMyRnJhbWVEYXRhOjpGTEFHX0VORF9PRl9TVFJFQU0pIHsKKyAgICAgICAgZmxhZ3MgfD0gQzJGcmFtZURhdGE6OkZMQUdfRU5EX09GX1NUUkVBTTsKKyAgICAgICAgQUxPR1YoInNpZ25hbGxpbmcgZW9zIik7CisgICAgfQorICAgIHdvcmstPndvcmtsZXRzLmZyb250KCktPm91dHB1dC5mbGFncyA9IChDMkZyYW1lRGF0YTo6ZmxhZ3NfdClmbGFnczsKKyAgICB3b3JrLT53b3JrbGV0cy5mcm9udCgpLT5vdXRwdXQuYnVmZmVycy5jbGVhcigpOworICAgIHdvcmstPndvcmtsZXRzLmZyb250KCktPm91dHB1dC5vcmRpbmFsID0gd29yay0+aW5wdXQub3JkaW5hbDsKKyAgICB3b3JrLT53b3JrbGV0c1Byb2Nlc3NlZCA9IDF1OworfQorCitjMl9zdGF0dXNfdCBDMlNvZnRNcGVnNEVuYzo6aW5pdEVuY1BhcmFtcygpIHsKKyAgICBpZiAobUhhbmRsZSkgeworICAgICAgICBtZW1zZXQobUhhbmRsZSwgMCwgc2l6ZW9mKHRhZ3ZpZGVvRW5jQ29udHJvbHMpKTsKKyAgICB9IGVsc2UgcmV0dXJuIEMyX0NPUlJVUFRFRDsKKyAgICBpZiAobUVuY1BhcmFtcykgeworICAgICAgICBtZW1zZXQobUVuY1BhcmFtcywgMCwgc2l6ZW9mKHRhZ3ZpZGVvRW5jT3B0aW9ucykpOworICAgIH0gZWxzZSByZXR1cm4gQzJfQ09SUlVQVEVEOworCisgICAgaWYgKCFQVkdldERlZmF1bHRFbmNPcHRpb24obUVuY1BhcmFtcywgMCkpIHsKKyAgICAgICAgQUxPR0UoIkZhaWxlZCB0byBnZXQgZGVmYXVsdCBlbmNvZGluZyBwYXJhbWV0ZXJzIik7CisgICAgICAgIHJldHVybiBDMl9DT1JSVVBURUQ7CisgICAgfQorCisgICAgaWYgKG1GcmFtZVJhdGUtPnZhbHVlID09IDApIHsKKyAgICAgICAgQUxPR0UoIkZyYW1lcmF0ZSBzaG91bGQgbm90IGJlIDAiKTsKKyAgICAgICAgcmV0dXJuIEMyX0JBRF9WQUxVRTsKKyAgICB9CisKKyAgICBtRW5jUGFyYW1zLT5lbmNNb2RlID0gbUVuY29kZU1vZGU7CisgICAgbUVuY1BhcmFtcy0+ZW5jV2lkdGhbMF0gPSBtU2l6ZS0+d2lkdGg7CisgICAgbUVuY1BhcmFtcy0+ZW5jSGVpZ2h0WzBdID0gbVNpemUtPmhlaWdodDsKKyAgICBtRW5jUGFyYW1zLT5lbmNGcmFtZVJhdGVbMF0gPSBtRnJhbWVSYXRlLT52YWx1ZSArIDAuNTsKKyAgICBtRW5jUGFyYW1zLT5yY1R5cGUgPSBWQlJfMTsKKyAgICBtRW5jUGFyYW1zLT52YnZEZWxheSA9IDUuMGY7CisgICAgbUVuY1BhcmFtcy0+cHJvZmlsZV9sZXZlbCA9IENPUkVfUFJPRklMRV9MRVZFTDI7CisgICAgbUVuY1BhcmFtcy0+cGFja2V0U2l6ZSA9IDMyOworICAgIG1FbmNQYXJhbXMtPnJ2bGNFbmFibGUgPSBQVl9PRkY7CisgICAgbUVuY1BhcmFtcy0+bnVtTGF5ZXJzID0gMTsKKyAgICBtRW5jUGFyYW1zLT50aW1lSW5jUmVzID0gMTAwMDsKKyAgICBtRW5jUGFyYW1zLT50aWNrUGVyU3JjID0gbUVuY1BhcmFtcy0+dGltZUluY1JlcyAvIChtRnJhbWVSYXRlLT52YWx1ZSArIDAuNSk7CisgICAgbUVuY1BhcmFtcy0+Yml0UmF0ZVswXSA9IG1CaXRyYXRlLT52YWx1ZTsKKyAgICBtRW5jUGFyYW1zLT5pUXVhbnRbMF0gPSAxNTsKKyAgICBtRW5jUGFyYW1zLT5wUXVhbnRbMF0gPSAxMjsKKyAgICBtRW5jUGFyYW1zLT5xdWFudFR5cGVbMF0gPSAwOworICAgIG1FbmNQYXJhbXMtPm5vRnJhbWVTa2lwcGVkID0gUFZfT0ZGOworCisgICAgLy8gUFYncyBNUEVHNCBlbmNvZGVyIHJlcXVpcmVzIHRoZSB2aWRlbyBkaW1lbnNpb24gb2YgbXVsdGlwbGUKKyAgICBpZiAobVNpemUtPndpZHRoICUgMTYgIT0gMCB8fCBtU2l6ZS0+aGVpZ2h0ICUgMTYgIT0gMCkgeworICAgICAgICBBTE9HRSgiVmlkZW8gZnJhbWUgc2l6ZSAlZHglZCBtdXN0IGJlIGEgbXVsdGlwbGUgb2YgMTYiLAorICAgICAgICAgICAgICBtU2l6ZS0+d2lkdGgsIG1TaXplLT5oZWlnaHQpOworICAgICAgICByZXR1cm4gQzJfQkFEX1ZBTFVFOworICAgIH0KKworICAgIC8vIFNldCBJRFIgZnJhbWUgcmVmcmVzaCBpbnRlcnZhbAorICAgIG1FbmNQYXJhbXMtPmludHJhUGVyaW9kID0gbUludGYtPmdldFN5bmNGcmFtZVBlcmlvZCgpOworICAgIG1FbmNQYXJhbXMtPm51bUludHJhTUIgPSAwOworICAgIG1FbmNQYXJhbXMtPnNjZW5lRGV0ZWN0ID0gUFZfT047CisgICAgbUVuY1BhcmFtcy0+c2VhcmNoUmFuZ2UgPSAxNjsKKyAgICBtRW5jUGFyYW1zLT5tdjh4OEVuYWJsZSA9IFBWX09GRjsKKyAgICBtRW5jUGFyYW1zLT5nb2JIZWFkZXJJbnRlcnZhbCA9IDA7CisgICAgbUVuY1BhcmFtcy0+dXNlQUNQcmVkID0gUFZfT047CisgICAgbUVuY1BhcmFtcy0+aW50cmFEQ1ZsY1RoID0gMDsKKworICAgIHJldHVybiBDMl9PSzsKK30KKworYzJfc3RhdHVzX3QgQzJTb2Z0TXBlZzRFbmM6OmluaXRFbmNvZGVyKCkgeworICAgIGlmIChtU3RhcnRlZCkgeworICAgICAgICByZXR1cm4gQzJfT0s7CisgICAgfQorICAgIHsKKyAgICAgICAgSW50ZkltcGw6OkxvY2sgbG9jayA9IG1JbnRmLT5sb2NrKCk7CisgICAgICAgIG1TaXplID0gbUludGYtPmdldFNpemVfbCgpOworICAgICAgICBtQml0cmF0ZSA9IG1JbnRmLT5nZXRCaXRyYXRlX2woKTsKKyAgICAgICAgbUZyYW1lUmF0ZSA9IG1JbnRmLT5nZXRGcmFtZVJhdGVfbCgpOworICAgIH0KKyAgICBjMl9zdGF0dXNfdCBlcnIgPSBpbml0RW5jUGFyYW1zKCk7CisgICAgaWYgKEMyX09LICE9IGVycikgeworICAgICAgICBBTE9HRSgiRmFpbGVkIHRvIGluaXRpYWxpemVkIGVuY29kZXIgcGFyYW1zIik7CisgICAgICAgIG1TaWduYWxsZWRFcnJvciA9IHRydWU7CisgICAgICAgIHJldHVybiBlcnI7CisgICAgfQorICAgIGlmICghUFZJbml0VmlkZW9FbmNvZGVyKG1IYW5kbGUsIG1FbmNQYXJhbXMpKSB7CisgICAgICAgIEFMT0dFKCJGYWlsZWQgdG8gaW5pdGlhbGl6ZSB0aGUgZW5jb2RlciIpOworICAgICAgICBtU2lnbmFsbGVkRXJyb3IgPSB0cnVlOworICAgICAgICByZXR1cm4gQzJfQ09SUlVQVEVEOworICAgIH0KKworICAgIC8vIDFzdCBidWZmZXIgZm9yIGNvZGVjIHNwZWNpZmljIGRhdGEKKyAgICBtTnVtSW5wdXRGcmFtZXMgPSAtMTsKKyAgICBtU3RhcnRlZCA9IHRydWU7CisgICAgcmV0dXJuIEMyX09LOworfQorCit2b2lkIEMyU29mdE1wZWc0RW5jOjpwcm9jZXNzKAorICAgICAgICBjb25zdCBzdGQ6OnVuaXF1ZV9wdHI8QzJXb3JrPiAmd29yaywKKyAgICAgICAgY29uc3Qgc3RkOjpzaGFyZWRfcHRyPEMyQmxvY2tQb29sPiAmcG9vbCkgeworICAgIC8vIEluaXRpYWxpemUgb3V0cHV0IHdvcmsKKyAgICB3b3JrLT5yZXN1bHQgPSBDMl9PSzsKKyAgICB3b3JrLT53b3JrbGV0c1Byb2Nlc3NlZCA9IDF1OworICAgIHdvcmstPndvcmtsZXRzLmZyb250KCktPm91dHB1dC5mbGFncyA9IHdvcmstPmlucHV0LmZsYWdzOworICAgIGlmIChtU2lnbmFsbGVkRXJyb3IgfHwgbVNpZ25hbGxlZE91dHB1dEVvcykgeworICAgICAgICB3b3JrLT5yZXN1bHQgPSBDMl9CQURfVkFMVUU7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICAvLyBJbml0aWFsaXplIGVuY29kZXIgaWYgbm90IGFscmVhZHkgaW5pdGlhbGl6ZWQKKyAgICBpZiAoIW1TdGFydGVkICYmIEMyX09LICE9IGluaXRFbmNvZGVyKCkpIHsKKyAgICAgICAgQUxPR0UoIkZhaWxlZCB0byBpbml0aWFsaXplIGVuY29kZXIiKTsKKyAgICAgICAgbVNpZ25hbGxlZEVycm9yID0gdHJ1ZTsKKyAgICAgICAgd29yay0+cmVzdWx0ID0gQzJfQ09SUlVQVEVEOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgc3RkOjpzaGFyZWRfcHRyPEMyTGluZWFyQmxvY2s+IGJsb2NrOworICAgIEMyTWVtb3J5VXNhZ2UgdXNhZ2UgPSB7IEMyTWVtb3J5VXNhZ2U6OkNQVV9SRUFELCBDMk1lbW9yeVVzYWdlOjpDUFVfV1JJVEUgfTsKKyAgICBjMl9zdGF0dXNfdCBlcnIgPSBwb29sLT5mZXRjaExpbmVhckJsb2NrKG1PdXRCdWZmZXJTaXplLCB1c2FnZSwgJmJsb2NrKTsKKyAgICBpZiAoZXJyICE9IEMyX09LKSB7CisgICAgICAgIEFMT0dFKCJmZXRjaExpbmVhckJsb2NrIGZvciBPdXRwdXQgZmFpbGVkIHdpdGggc3RhdHVzICVkIiwgZXJyKTsKKyAgICAgICAgd29yay0+cmVzdWx0ID0gQzJfTk9fTUVNT1JZOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgQzJXcml0ZVZpZXcgd1ZpZXcgPSBibG9jay0+bWFwKCkuZ2V0KCk7CisgICAgaWYgKHdWaWV3LmVycm9yKCkpIHsKKyAgICAgICAgQUxPR0UoIndyaXRlIHZpZXcgbWFwIGZhaWxlZCAlZCIsIHdWaWV3LmVycm9yKCkpOworICAgICAgICB3b3JrLT5yZXN1bHQgPSB3Vmlldy5lcnJvcigpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgdWludDhfdCAqb3V0UHRyID0gKHVpbnQ4X3QgKil3Vmlldy5kYXRhKCk7CisgICAgaWYgKG1OdW1JbnB1dEZyYW1lcyA8IDApIHsKKyAgICAgICAgLy8gVGhlIHZlcnkgZmlyc3QgdGhpbmcgd2Ugd2FudCB0byBvdXRwdXQgaXMgdGhlIGNvZGVjIHNwZWNpZmljIGRhdGEuCisgICAgICAgIGludDMyX3Qgb3V0cHV0U2l6ZSA9IG1PdXRCdWZmZXJTaXplOworICAgICAgICBpZiAoIVBWR2V0Vm9sSGVhZGVyKG1IYW5kbGUsIG91dFB0ciwgJm91dHB1dFNpemUsIDApKSB7CisgICAgICAgICAgICBBTE9HRSgiRmFpbGVkIHRvIGdldCBWT0wgaGVhZGVyIik7CisgICAgICAgICAgICBtU2lnbmFsbGVkRXJyb3IgPSB0cnVlOworICAgICAgICAgICAgd29yay0+cmVzdWx0ID0gQzJfQ09SUlVQVEVEOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgQUxPR1YoIkJ5dGVzIEdlbmVyYXRlZCBpbiBoZWFkZXIgJWRcbiIsIG91dHB1dFNpemUpOworICAgICAgICB9CisKKyAgICAgICAgKyttTnVtSW5wdXRGcmFtZXM7CisgICAgICAgIHN0ZDo6dW5pcXVlX3B0cjxDMlN0cmVhbUNzZEluZm86Om91dHB1dD4gY3NkID0KKyAgICAgICAgICAgIEMyU3RyZWFtQ3NkSW5mbzo6b3V0cHV0OjpBbGxvY1VuaXF1ZShvdXRwdXRTaXplLCAwdSk7CisgICAgICAgIGlmICghY3NkKSB7CisgICAgICAgICAgICBBTE9HRSgiQ1NEIGFsbG9jYXRpb24gZmFpbGVkIik7CisgICAgICAgICAgICBtU2lnbmFsbGVkRXJyb3IgPSB0cnVlOworICAgICAgICAgICAgd29yay0+cmVzdWx0ID0gQzJfTk9fTUVNT1JZOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIG1lbWNweShjc2QtPm0udmFsdWUsIG91dFB0ciwgb3V0cHV0U2l6ZSk7CisgICAgICAgIHdvcmstPndvcmtsZXRzLmZyb250KCktPm91dHB1dC5jb25maWdVcGRhdGUucHVzaF9iYWNrKHN0ZDo6bW92ZShjc2QpKTsKKyAgICB9CisKKyAgICBzdGQ6OnNoYXJlZF9wdHI8Y29uc3QgQzJHcmFwaGljVmlldz4gclZpZXc7CisgICAgc3RkOjpzaGFyZWRfcHRyPEMyQnVmZmVyPiBpbnB1dEJ1ZmZlcjsKKyAgICBib29sIGVvcyA9ICgod29yay0+aW5wdXQuZmxhZ3MgJiBDMkZyYW1lRGF0YTo6RkxBR19FTkRfT0ZfU1RSRUFNKSAhPSAwKTsKKyAgICBpZiAoIXdvcmstPmlucHV0LmJ1ZmZlcnMuZW1wdHkoKSkgeworICAgICAgICBpbnB1dEJ1ZmZlciA9IHdvcmstPmlucHV0LmJ1ZmZlcnNbMF07CisgICAgICAgIHJWaWV3ID0gc3RkOjptYWtlX3NoYXJlZDxjb25zdCBDMkdyYXBoaWNWaWV3PigKKyAgICAgICAgICAgICAgICBpbnB1dEJ1ZmZlci0+ZGF0YSgpLmdyYXBoaWNCbG9ja3MoKS5mcm9udCgpLm1hcCgpLmdldCgpKTsKKyAgICAgICAgaWYgKHJWaWV3LT5lcnJvcigpICE9IEMyX09LKSB7CisgICAgICAgICAgICBBTE9HRSgiZ3JhcGhpYyB2aWV3IG1hcCBlcnIgPSAlZCIsIHJWaWV3LT5lcnJvcigpKTsKKyAgICAgICAgICAgIHdvcmstPnJlc3VsdCA9IHJWaWV3LT5lcnJvcigpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgfSBlbHNlIHsKKyAgICAgICAgZmlsbEVtcHR5V29yayh3b3JrKTsKKyAgICAgICAgaWYgKGVvcykgeworICAgICAgICAgICAgbVNpZ25hbGxlZE91dHB1dEVvcyA9IHRydWU7CisgICAgICAgICAgICBBTE9HVigic2lnbmFsbGVkIEVPUyIpOworICAgICAgICB9CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICB1aW50NjRfdCBpbnB1dFRpbWVTdGFtcCA9IHdvcmstPmlucHV0Lm9yZGluYWwudGltZXN0YW1wLnBlZWt1bGwoKTsKKyAgICBjb25zdCBDMkNvbnN0R3JhcGhpY0Jsb2NrIGluQnVmZmVyID0gaW5wdXRCdWZmZXItPmRhdGEoKS5ncmFwaGljQmxvY2tzKCkuZnJvbnQoKTsKKyAgICBpZiAoaW5CdWZmZXIud2lkdGgoKSA8IG1TaXplLT53aWR0aCB8fAorICAgICAgICBpbkJ1ZmZlci5oZWlnaHQoKSA8IG1TaXplLT5oZWlnaHQpIHsKKyAgICAgICAgLyogRXhwZWN0IHdpZHRoIGhlaWdodCB0byBiZSBjb25maWd1cmVkICovCisgICAgICAgIEFMT0dXKCJ1bmV4cGVjdGVkIENhcGFjaXR5IEFzcGVjdCAlZCglZCkgeCAlZCglZCkiLCBpbkJ1ZmZlci53aWR0aCgpLAorICAgICAgICAgICAgICBtU2l6ZS0+d2lkdGgsIGluQnVmZmVyLmhlaWdodCgpLCBtU2l6ZS0+aGVpZ2h0KTsKKyAgICAgICAgd29yay0+cmVzdWx0ID0gQzJfQkFEX1ZBTFVFOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgY29uc3QgQzJQbGFuYXJMYXlvdXQgJmxheW91dCA9IHJWaWV3LT5sYXlvdXQoKTsKKyAgICB1aW50OF90ICp5UGxhbmUgPSBjb25zdF9jYXN0PHVpbnQ4X3QgKj4oclZpZXctPmRhdGEoKVtDMlBsYW5hckxheW91dDo6UExBTkVfWV0pOworICAgIHVpbnQ4X3QgKnVQbGFuZSA9IGNvbnN0X2Nhc3Q8dWludDhfdCAqPihyVmlldy0+ZGF0YSgpW0MyUGxhbmFyTGF5b3V0OjpQTEFORV9VXSk7CisgICAgdWludDhfdCAqdlBsYW5lID0gY29uc3RfY2FzdDx1aW50OF90ICo+KHJWaWV3LT5kYXRhKClbQzJQbGFuYXJMYXlvdXQ6OlBMQU5FX1ZdKTsKKyAgICBpbnQzMl90IHlTdHJpZGUgPSBsYXlvdXQucGxhbmVzW0MyUGxhbmFyTGF5b3V0OjpQTEFORV9ZXS5yb3dJbmM7CisgICAgaW50MzJfdCB1U3RyaWRlID0gbGF5b3V0LnBsYW5lc1tDMlBsYW5hckxheW91dDo6UExBTkVfVV0ucm93SW5jOworICAgIGludDMyX3QgdlN0cmlkZSA9IGxheW91dC5wbGFuZXNbQzJQbGFuYXJMYXlvdXQ6OlBMQU5FX1ZdLnJvd0luYzsKKyAgICB1aW50MzJfdCB3aWR0aCA9IG1TaXplLT53aWR0aDsKKyAgICB1aW50MzJfdCBoZWlnaHQgPSBtU2l6ZS0+aGVpZ2h0OworICAgIC8vIHdpZHRoIGFuZCBoZWlnaHQgYXJlIGFsd2F5cyBldmVuIChhcyBibG9jayBzaXplIGlzIDE2eDE2KQorICAgIENIRUNLX0VRKCh3aWR0aCAmIDF1KSwgMHUpOworICAgIENIRUNLX0VRKChoZWlnaHQgJiAxdSksIDB1KTsKKyAgICBzaXplX3QgeVBsYW5lU2l6ZSA9IHdpZHRoICogaGVpZ2h0OworICAgIHN3aXRjaCAobGF5b3V0LnR5cGUpIHsKKyAgICAgICAgY2FzZSBDMlBsYW5hckxheW91dDo6VFlQRV9SR0I6CisgICAgICAgICAgICBbW2ZhbGx0aHJvdWdoXV07CisgICAgICAgIGNhc2UgQzJQbGFuYXJMYXlvdXQ6OlRZUEVfUkdCQTogeworICAgICAgICAgICAgTWVtb3J5QmxvY2sgY29udmVyc2lvbkJ1ZmZlciA9IG1Db252ZXJzaW9uQnVmZmVycy5mZXRjaCh5UGxhbmVTaXplICogMyAvIDIpOworICAgICAgICAgICAgbUNvbnZlcnNpb25CdWZmZXJzSW5Vc2UuZW1wbGFjZShjb252ZXJzaW9uQnVmZmVyLmRhdGEoKSwgY29udmVyc2lvbkJ1ZmZlcik7CisgICAgICAgICAgICB5UGxhbmUgPSBjb252ZXJzaW9uQnVmZmVyLmRhdGEoKTsKKyAgICAgICAgICAgIHVQbGFuZSA9IHlQbGFuZSArIHlQbGFuZVNpemU7CisgICAgICAgICAgICB2UGxhbmUgPSB1UGxhbmUgKyB5UGxhbmVTaXplIC8gNDsKKyAgICAgICAgICAgIHlTdHJpZGUgPSB3aWR0aDsKKyAgICAgICAgICAgIHVTdHJpZGUgPSB2U3RyaWRlID0gd2lkdGggLyAyOworICAgICAgICAgICAgQ29udmVydFJHQlRvUGxhbmFyWVVWKHlQbGFuZSwgeVN0cmlkZSwgaGVpZ2h0LCBjb252ZXJzaW9uQnVmZmVyLnNpemUoKSwgKnJWaWV3LmdldCgpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGNhc2UgQzJQbGFuYXJMYXlvdXQ6OlRZUEVfWVVWOiB7CisgICAgICAgICAgICBpZiAoIUlzWVVWNDIwKCpyVmlldykpIHsKKyAgICAgICAgICAgICAgICBBTE9HRSgiaW5wdXQgaXMgbm90IFlVVjQyMCIpOworICAgICAgICAgICAgICAgIHdvcmstPnJlc3VsdCA9IEMyX0JBRF9WQUxVRTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKGxheW91dC5wbGFuZXNbbGF5b3V0LlBMQU5FX1ldLmNvbEluYyA9PSAxCisgICAgICAgICAgICAgICAgICAgICYmIGxheW91dC5wbGFuZXNbbGF5b3V0LlBMQU5FX1VdLmNvbEluYyA9PSAxCisgICAgICAgICAgICAgICAgICAgICYmIGxheW91dC5wbGFuZXNbbGF5b3V0LlBMQU5FX1ZdLmNvbEluYyA9PSAxCisgICAgICAgICAgICAgICAgICAgICYmIHVTdHJpZGUgPT0gdlN0cmlkZQorICAgICAgICAgICAgICAgICAgICAmJiB5U3RyaWRlID09IDIgKiB2U3RyaWRlKSB7CisgICAgICAgICAgICAgICAgLy8gSTQyMCBjb21wYXRpYmxlIC0gcGxhbmVzIGFyZSBhbHJlYWR5IHNldCB1cCBhYm92ZQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICAvLyBjb3B5IHRvIEk0MjAKKyAgICAgICAgICAgIE1lbW9yeUJsb2NrIGNvbnZlcnNpb25CdWZmZXIgPSBtQ29udmVyc2lvbkJ1ZmZlcnMuZmV0Y2goeVBsYW5lU2l6ZSAqIDMgLyAyKTsKKyAgICAgICAgICAgIG1Db252ZXJzaW9uQnVmZmVyc0luVXNlLmVtcGxhY2UoY29udmVyc2lvbkJ1ZmZlci5kYXRhKCksIGNvbnZlcnNpb25CdWZmZXIpOworICAgICAgICAgICAgTWVkaWFJbWFnZTIgaW1nID0gQ3JlYXRlWVVWNDIwUGxhbmFyTWVkaWFJbWFnZTIod2lkdGgsIGhlaWdodCwgd2lkdGgsIGhlaWdodCk7CisgICAgICAgICAgICBzdGF0dXNfdCBlcnIgPSBJbWFnZUNvcHkoY29udmVyc2lvbkJ1ZmZlci5kYXRhKCksICZpbWcsICpyVmlldyk7CisgICAgICAgICAgICBpZiAoZXJyICE9IE9LKSB7CisgICAgICAgICAgICAgICAgQUxPR0UoIkJ1ZmZlciBjb252ZXJzaW9uIGZhaWxlZDogJWQiLCBlcnIpOworICAgICAgICAgICAgICAgIHdvcmstPnJlc3VsdCA9IEMyX0JBRF9WQUxVRTsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisgICAgICAgICAgICB5UGxhbmUgPSBjb252ZXJzaW9uQnVmZmVyLmRhdGEoKTsKKyAgICAgICAgICAgIHVQbGFuZSA9IHlQbGFuZSArIHlQbGFuZVNpemU7CisgICAgICAgICAgICB2UGxhbmUgPSB1UGxhbmUgKyB5UGxhbmVTaXplIC8gNDsKKyAgICAgICAgICAgIHlTdHJpZGUgPSB3aWR0aDsKKyAgICAgICAgICAgIHVTdHJpZGUgPSB2U3RyaWRlID0gd2lkdGggLyAyOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgICBjYXNlIEMyUGxhbmFyTGF5b3V0OjpUWVBFX1lVVkE6CisgICAgICAgICAgICBBTE9HRSgiWVVWQSBwbGFuZSB0eXBlIGlzIG5vdCBzdXBwb3J0ZWQiKTsKKyAgICAgICAgICAgIHdvcmstPnJlc3VsdCA9IEMyX0JBRF9WQUxVRTsKKyAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgQUxPR0UoIlVucmVjb2duaXplZCBwbGFuZSB0eXBlOiAlZCIsIGxheW91dC50eXBlKTsKKyAgICAgICAgICAgIHdvcmstPnJlc3VsdCA9IEMyX0JBRF9WQUxVRTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBDSEVDSyhOVUxMICE9IHlQbGFuZSk7CisgICAgLyogRW5jb2RlIGZyYW1lcyAqLworICAgIFZpZGVvRW5jRnJhbWVJTyB2aW4sIHZvdXQ7CisgICAgbWVtc2V0KCZ2aW4sIDAsIHNpemVvZih2aW4pKTsKKyAgICBtZW1zZXQoJnZvdXQsIDAsIHNpemVvZih2b3V0KSk7CisgICAgdmluLnlDaGFuID0geVBsYW5lOworICAgIHZpbi51Q2hhbiA9IHVQbGFuZTsKKyAgICB2aW4udkNoYW4gPSB2UGxhbmU7CisgICAgdmluLnRpbWVzdGFtcCA9IChpbnB1dFRpbWVTdGFtcCArIDUwMCkgLyAxMDAwOyAgLy8gaW4gbXMKKyAgICB2aW4uaGVpZ2h0ID0gYWxpZ24oaGVpZ2h0LCAxNik7CisgICAgdmluLnBpdGNoID0gYWxpZ24od2lkdGgsIDE2KTsKKworICAgIHVpbnQzMl90IG1vZFRpbWVNcyA9IDA7CisgICAgaW50MzJfdCBuTGF5ZXIgPSAwOworICAgIE1QNEhpbnRUcmFjayBoaW50VHJhY2s7CisgICAgaW50MzJfdCBvdXRwdXRTaXplID0gbU91dEJ1ZmZlclNpemU7CisgICAgaWYgKCFQVkVuY29kZVZpZGVvRnJhbWUobUhhbmRsZSwgJnZpbiwgJnZvdXQsICZtb2RUaW1lTXMsIG91dFB0ciwgJm91dHB1dFNpemUsICZuTGF5ZXIpIHx8CisgICAgICAgICFQVkdldEhpbnRUcmFjayhtSGFuZGxlLCAmaGludFRyYWNrKSkgeworICAgICAgICBBTE9HRSgiRmFpbGVkIHRvIGVuY29kZSBmcmFtZSBvciBnZXQgaGludCB0cmFjayBhdCBmcmFtZSAlIiBQUklkNjQsIG1OdW1JbnB1dEZyYW1lcyk7CisgICAgICAgIG1TaWduYWxsZWRFcnJvciA9IHRydWU7CisgICAgICAgIHdvcmstPnJlc3VsdCA9IEMyX0NPUlJVUFRFRDsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBBTE9HVigib3V0cHV0U2l6ZSBmaWxsZWQgOiAlZCIsIG91dHB1dFNpemUpOworICAgICsrbU51bUlucHV0RnJhbWVzOworICAgIENIRUNLKE5VTEwgPT0gUFZHZXRPdmVycnVuQnVmZmVyKG1IYW5kbGUpKTsKKworICAgIGZpbGxFbXB0eVdvcmsod29yayk7CisgICAgaWYgKG91dHB1dFNpemUpIHsKKyAgICAgICAgc3RkOjpzaGFyZWRfcHRyPEMyQnVmZmVyPiBidWZmZXIgPSBjcmVhdGVMaW5lYXJCdWZmZXIoYmxvY2ssIDAsIG91dHB1dFNpemUpOworICAgICAgICB3b3JrLT53b3JrbGV0cy5mcm9udCgpLT5vdXRwdXQub3JkaW5hbC50aW1lc3RhbXAgPSBpbnB1dFRpbWVTdGFtcDsKKyAgICAgICAgaWYgKGhpbnRUcmFjay5Db2RlVHlwZSA9PSAwKSB7CisgICAgICAgICAgICBidWZmZXItPnNldEluZm8oc3RkOjptYWtlX3NoYXJlZDxDMlN0cmVhbVBpY3R1cmVUeXBlTWFza0luZm86Om91dHB1dD4oCisgICAgICAgICAgICAgICAgICAgIDB1IC8qIHN0cmVhbSBpZCAqLywgQzJQaWN0dXJlVHlwZUtleUZyYW1lKSk7CisgICAgICAgIH0KKyAgICAgICAgd29yay0+d29ya2xldHMuZnJvbnQoKS0+b3V0cHV0LmJ1ZmZlcnMucHVzaF9iYWNrKGJ1ZmZlcik7CisgICAgfQorICAgIGlmIChlb3MpIHsKKyAgICAgICAgbVNpZ25hbGxlZE91dHB1dEVvcyA9IHRydWU7CisgICAgfQorCisgICAgbUNvbnZlcnNpb25CdWZmZXJzSW5Vc2UuZXJhc2UoeVBsYW5lKTsKK30KKworYzJfc3RhdHVzX3QgQzJTb2Z0TXBlZzRFbmM6OmRyYWluKAorICAgICAgICB1aW50MzJfdCBkcmFpbk1vZGUsCisgICAgICAgIGNvbnN0IHN0ZDo6c2hhcmVkX3B0cjxDMkJsb2NrUG9vbD4gJnBvb2wpIHsKKyAgICAodm9pZClwb29sOworICAgIGlmIChkcmFpbk1vZGUgPT0gTk9fRFJBSU4pIHsKKyAgICAgICAgQUxPR1coImRyYWluIHdpdGggTk9fRFJBSU46IG5vLW9wIik7CisgICAgICAgIHJldHVybiBDMl9PSzsKKyAgICB9CisgICAgaWYgKGRyYWluTW9kZSA9PSBEUkFJTl9DSEFJTikgeworICAgICAgICBBTE9HVygiRFJBSU5fQ0hBSU4gbm90IHN1cHBvcnRlZCIpOworICAgICAgICByZXR1cm4gQzJfT01JVFRFRDsKKyAgICB9CisKKyAgICByZXR1cm4gQzJfT0s7Cit9CisKK2NsYXNzIEMyU29mdE1wZWc0RW5jRmFjdG9yeSA6IHB1YmxpYyBDMkNvbXBvbmVudEZhY3RvcnkgeworcHVibGljOgorICAgIEMyU29mdE1wZWc0RW5jRmFjdG9yeSgpCisgICAgICAgIDogbUhlbHBlcihzdGQ6OnN0YXRpY19wb2ludGVyX2Nhc3Q8QzJSZWZsZWN0b3JIZWxwZXI+KAorICAgICAgICAgICAgICBHZXRDb2RlYzJQbGF0Zm9ybUNvbXBvbmVudFN0b3JlKCktPmdldFBhcmFtUmVmbGVjdG9yKCkpKSB7fQorCisgICAgdmlydHVhbCBjMl9zdGF0dXNfdCBjcmVhdGVDb21wb25lbnQoCisgICAgICAgICAgICBjMl9ub2RlX2lkX3QgaWQsCisgICAgICAgICAgICBzdGQ6OnNoYXJlZF9wdHI8QzJDb21wb25lbnQ+KiBjb25zdCBjb21wb25lbnQsCisgICAgICAgICAgICBzdGQ6OmZ1bmN0aW9uPHZvaWQoQzJDb21wb25lbnQqKT4gZGVsZXRlcikgb3ZlcnJpZGUgeworICAgICAgICAqY29tcG9uZW50ID0gc3RkOjpzaGFyZWRfcHRyPEMyQ29tcG9uZW50PigKKyAgICAgICAgICAgIG5ldyBDMlNvZnRNcGVnNEVuYygKKyAgICAgICAgICAgICAgICBDT01QT05FTlRfTkFNRSwgaWQsCisgICAgICAgICAgICAgICAgc3RkOjptYWtlX3NoYXJlZDxDMlNvZnRNcGVnNEVuYzo6SW50ZkltcGw+KG1IZWxwZXIpKSwKKyAgICAgICAgICAgIGRlbGV0ZXIpOworICAgICAgICByZXR1cm4gQzJfT0s7CisgICAgfQorCisgICAgdmlydHVhbCBjMl9zdGF0dXNfdCBjcmVhdGVJbnRlcmZhY2UoCisgICAgICAgICAgICBjMl9ub2RlX2lkX3QgaWQsCisgICAgICAgICAgICBzdGQ6OnNoYXJlZF9wdHI8QzJDb21wb25lbnRJbnRlcmZhY2U+KiBjb25zdCBpbnRlcmZhY2UsCisgICAgICAgICAgICBzdGQ6OmZ1bmN0aW9uPHZvaWQoQzJDb21wb25lbnRJbnRlcmZhY2UqKT4gZGVsZXRlcikgb3ZlcnJpZGUgeworICAgICAgICAqaW50ZXJmYWNlID0gc3RkOjpzaGFyZWRfcHRyPEMyQ29tcG9uZW50SW50ZXJmYWNlPigKKyAgICAgICAgICAgIG5ldyBTaW1wbGVJbnRlcmZhY2U8QzJTb2Z0TXBlZzRFbmM6OkludGZJbXBsPigKKyAgICAgICAgICAgICAgICBDT01QT05FTlRfTkFNRSwgaWQsCisgICAgICAgICAgICAgICAgc3RkOjptYWtlX3NoYXJlZDxDMlNvZnRNcGVnNEVuYzo6SW50ZkltcGw+KG1IZWxwZXIpKSwKKyAgICAgICAgICAgIGRlbGV0ZXIpOworICAgICAgICByZXR1cm4gQzJfT0s7CisgICAgfQorCisgICAgdmlydHVhbCB+QzJTb2Z0TXBlZzRFbmNGYWN0b3J5KCkgb3ZlcnJpZGUgPSBkZWZhdWx0OworCitwcml2YXRlOgorICAgIHN0ZDo6c2hhcmVkX3B0cjxDMlJlZmxlY3RvckhlbHBlcj4gbUhlbHBlcjsKK307CisKK30gIC8vIG5hbWVzcGFjZSBhbmRyb2lkCisKK2V4dGVybiAiQyIgOjpDMkNvbXBvbmVudEZhY3RvcnkqIENyZWF0ZUNvZGVjMkZhY3RvcnkoKSB7CisgICAgQUxPR1YoImluICVzIiwgX19mdW5jX18pOworICAgIHJldHVybiBuZXcgOjphbmRyb2lkOjpDMlNvZnRNcGVnNEVuY0ZhY3RvcnkoKTsKK30KKworZXh0ZXJuICJDIiB2b2lkIERlc3Ryb3lDb2RlYzJGYWN0b3J5KDo6QzJDb21wb25lbnRGYWN0b3J5KiBmYWN0b3J5KSB7CisgICAgQUxPR1YoImluICVzIiwgX19mdW5jX18pOworICAgIGRlbGV0ZSBmYWN0b3J5OworfQpkaWZmIC0tZ2l0IGEvbWVkaWEvY29kZWMyL2NvbXBvbmVudHMvbXBlZzRfaDI2My9DMlNvZnRNcGVnNEVuYy5oIGIvbWVkaWEvY29kZWMyL2NvbXBvbmVudHMvbXBlZzRfaDI2My9DMlNvZnRNcGVnNEVuYy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQzNDYxZmMKLS0tIC9kZXYvbnVsbAorKysgYi9tZWRpYS9jb2RlYzIvY29tcG9uZW50cy9tcGVnNF9oMjYzL0MyU29mdE1wZWc0RW5jLmgKQEAgLTAsMCArMSw4MyBAQAorLyoKKyAqIENvcHlyaWdodCAyMDE4IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KKworI2lmbmRlZiBDMl9TT0ZUX01QRUc0X0VOQ19IX18KKyNkZWZpbmUgQzJfU09GVF9NUEVHNF9FTkNfSF9fCisKKyNpbmNsdWRlIDxtYXA+CisKKyNpbmNsdWRlIDxDb2RlYzJCdWZmZXJVdGlscy5oPgorI2luY2x1ZGUgPFNpbXBsZUMyQ29tcG9uZW50Lmg+CisKKyNpbmNsdWRlICJtcDRlbmNfYXBpLmgiCisKK25hbWVzcGFjZSBhbmRyb2lkIHsKKworc3RydWN0IEMyU29mdE1wZWc0RW5jIDogcHVibGljIFNpbXBsZUMyQ29tcG9uZW50IHsKKyAgICBjbGFzcyBJbnRmSW1wbDsKKworICAgIEMyU29mdE1wZWc0RW5jKGNvbnN0IGNoYXIqIG5hbWUsIGMyX25vZGVfaWRfdCBpZCwKKyAgICAgICAgICAgICAgICAgICBjb25zdCBzdGQ6OnNoYXJlZF9wdHI8SW50ZkltcGw+JiBpbnRmSW1wbCk7CisKKyAgICAvLyBGcm9tIFNpbXBsZUMyQ29tcG9uZW50CisgICAgYzJfc3RhdHVzX3Qgb25Jbml0KCkgb3ZlcnJpZGU7CisgICAgYzJfc3RhdHVzX3Qgb25TdG9wKCkgb3ZlcnJpZGU7CisgICAgdm9pZCBvblJlc2V0KCkgb3ZlcnJpZGU7CisgICAgdm9pZCBvblJlbGVhc2UoKSBvdmVycmlkZTsKKyAgICBjMl9zdGF0dXNfdCBvbkZsdXNoX3NtKCkgb3ZlcnJpZGU7CisgICAgdm9pZCBwcm9jZXNzKAorICAgICAgICAgICAgY29uc3Qgc3RkOjp1bmlxdWVfcHRyPEMyV29yaz4gJndvcmssCisgICAgICAgICAgICBjb25zdCBzdGQ6OnNoYXJlZF9wdHI8QzJCbG9ja1Bvb2w+ICZwb29sKSBvdmVycmlkZTsKKyAgICBjMl9zdGF0dXNfdCBkcmFpbigKKyAgICAgICAgICAgIHVpbnQzMl90IGRyYWluTW9kZSwKKyAgICAgICAgICAgIGNvbnN0IHN0ZDo6c2hhcmVkX3B0cjxDMkJsb2NrUG9vbD4gJnBvb2wpIG92ZXJyaWRlOworCitwcm90ZWN0ZWQ6CisKKyAgICB2aXJ0dWFsIH5DMlNvZnRNcGVnNEVuYygpOworCitwcml2YXRlOgorICAgIHN0ZDo6c2hhcmVkX3B0cjxJbnRmSW1wbD4gbUludGY7CisKKyAgICB0YWd2aWRlb0VuY0NvbnRyb2xzICptSGFuZGxlOworICAgIHRhZ3ZpZGVvRW5jT3B0aW9ucyAgKm1FbmNQYXJhbXM7CisKKyAgICBib29sICAgICBtU3RhcnRlZDsKKyAgICBib29sICAgICBtU2lnbmFsbGVkT3V0cHV0RW9zOworICAgIGJvb2wgICAgIG1TaWduYWxsZWRFcnJvcjsKKworICAgIHVpbnQzMl90IG1PdXRCdWZmZXJTaXplOworICAgIC8vIGNvbmZpZ3VyYXRpb25zIHVzZWQgYnkgY29tcG9uZW50IGluIHByb2Nlc3MKKyAgICAvLyAoVE9ETzoga2VlcCB0aGlzIGluIGludGYgYnV0IG1ha2UgdGhlbSBpbnRlcm5hbCBvbmx5KQorICAgIHN0ZDo6c2hhcmVkX3B0cjxDMlN0cmVhbVBpY3R1cmVTaXplSW5mbzo6aW5wdXQ+IG1TaXplOworICAgIHN0ZDo6c2hhcmVkX3B0cjxDMlN0cmVhbUZyYW1lUmF0ZUluZm86Om91dHB1dD4gbUZyYW1lUmF0ZTsKKyAgICBzdGQ6OnNoYXJlZF9wdHI8QzJTdHJlYW1CaXRyYXRlSW5mbzo6b3V0cHV0PiBtQml0cmF0ZTsKKworICAgIGludDY0X3QgIG1OdW1JbnB1dEZyYW1lczsKKyAgICBNUDRFbmNvZGluZ01vZGUgbUVuY29kZU1vZGU7CisKKyAgICBNZW1vcnlCbG9ja1Bvb2wgbUNvbnZlcnNpb25CdWZmZXJzOworICAgIHN0ZDo6bWFwPHZvaWQgKiwgTWVtb3J5QmxvY2s+IG1Db252ZXJzaW9uQnVmZmVyc0luVXNlOworCisgICAgYzJfc3RhdHVzX3QgaW5pdEVuY1BhcmFtcygpOworICAgIGMyX3N0YXR1c190IGluaXRFbmNvZGVyKCk7CisKKyAgICBDMl9ET19OT1RfQ09QWShDMlNvZnRNcGVnNEVuYyk7Cit9OworCit9ICAvLyBuYW1lc3BhY2UgYW5kcm9pZAorCisjZW5kaWYgIC8vIEMyX1NPRlRfTVBFRzRfRU5DX0hfXwpkaWZmIC0tZ2l0IGEvbWVkaWEvY29kZWMyL2NvbXBvbmVudHMvbXBlZzRfaDI2My9NT0RVTEVfTElDRU5TRV9BUEFDSEUyIGIvbWVkaWEvY29kZWMyL2NvbXBvbmVudHMvbXBlZzRfaDI2My9NT0RVTEVfTElDRU5TRV9BUEFDSEUyCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU2OWRlMjkKLS0tIC9kZXYvbnVsbAorKysgYi9tZWRpYS9jb2RlYzIvY29tcG9uZW50cy9tcGVnNF9oMjYzL01PRFVMRV9MSUNFTlNFX0FQQUNIRTIKZGlmZiAtLWdpdCBhL21lZGlhL2NvZGVjMi9jb21wb25lbnRzL21wZWc0X2gyNjMvTk9USUNFIGIvbWVkaWEvY29kZWMyL2NvbXBvbmVudHMvbXBlZzRfaDI2My9OT1RJQ0UKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzViMWVmYQotLS0gL2Rldi9udWxsCisrKyBiL21lZGlhL2NvZGVjMi9jb21wb25lbnRzL21wZWc0X2gyNjMvTk9USUNFCkBAIC0wLDAgKzEsMTkwIEBACisKKyAgIENvcHlyaWdodCAoYykgMjAwNS0yMDA4LCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisKKyAgIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICAgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorCisgICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICAgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKworCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBcGFjaGUgTGljZW5zZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgVmVyc2lvbiAyLjAsIEphbnVhcnkgMjAwNAorICAgICAgICAgICAgICAgICAgICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzLworCisgICBURVJNUyBBTkQgQ09ORElUSU9OUyBGT1IgVVNFLCBSRVBST0RVQ1RJT04sIEFORCBESVNUUklCVVRJT04KKworICAgMS4gRGVmaW5pdGlvbnMuCisKKyAgICAgICJMaWNlbnNlIiBzaGFsbCBtZWFuIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBmb3IgdXNlLCByZXByb2R1Y3Rpb24sCisgICAgICBhbmQgZGlzdHJpYnV0aW9uIGFzIGRlZmluZWQgYnkgU2VjdGlvbnMgMSB0aHJvdWdoIDkgb2YgdGhpcyBkb2N1bWVudC4KKworICAgICAgIkxpY2Vuc29yIiBzaGFsbCBtZWFuIHRoZSBjb3B5cmlnaHQgb3duZXIgb3IgZW50aXR5IGF1dGhvcml6ZWQgYnkKKyAgICAgIHRoZSBjb3B5cmlnaHQgb3duZXIgdGhhdCBpcyBncmFudGluZyB0aGUgTGljZW5zZS4KKworICAgICAgIkxlZ2FsIEVudGl0eSIgc2hhbGwgbWVhbiB0aGUgdW5pb24gb2YgdGhlIGFjdGluZyBlbnRpdHkgYW5kIGFsbAorICAgICAgb3RoZXIgZW50aXRpZXMgdGhhdCBjb250cm9sLCBhcmUgY29udHJvbGxlZCBieSwgb3IgYXJlIHVuZGVyIGNvbW1vbgorICAgICAgY29udHJvbCB3aXRoIHRoYXQgZW50aXR5LiBGb3IgdGhlIHB1cnBvc2VzIG9mIHRoaXMgZGVmaW5pdGlvbiwKKyAgICAgICJjb250cm9sIiBtZWFucyAoaSkgdGhlIHBvd2VyLCBkaXJlY3Qgb3IgaW5kaXJlY3QsIHRvIGNhdXNlIHRoZQorICAgICAgZGlyZWN0aW9uIG9yIG1hbmFnZW1lbnQgb2Ygc3VjaCBlbnRpdHksIHdoZXRoZXIgYnkgY29udHJhY3Qgb3IKKyAgICAgIG90aGVyd2lzZSwgb3IgKGlpKSBvd25lcnNoaXAgb2YgZmlmdHkgcGVyY2VudCAoNTAlKSBvciBtb3JlIG9mIHRoZQorICAgICAgb3V0c3RhbmRpbmcgc2hhcmVzLCBvciAoaWlpKSBiZW5lZmljaWFsIG93bmVyc2hpcCBvZiBzdWNoIGVudGl0eS4KKworICAgICAgIllvdSIgKG9yICJZb3VyIikgc2hhbGwgbWVhbiBhbiBpbmRpdmlkdWFsIG9yIExlZ2FsIEVudGl0eQorICAgICAgZXhlcmNpc2luZyBwZXJtaXNzaW9ucyBncmFudGVkIGJ5IHRoaXMgTGljZW5zZS4KKworICAgICAgIlNvdXJjZSIgZm9ybSBzaGFsbCBtZWFuIHRoZSBwcmVmZXJyZWQgZm9ybSBmb3IgbWFraW5nIG1vZGlmaWNhdGlvbnMsCisgICAgICBpbmNsdWRpbmcgYnV0IG5vdCBsaW1pdGVkIHRvIHNvZnR3YXJlIHNvdXJjZSBjb2RlLCBkb2N1bWVudGF0aW9uCisgICAgICBzb3VyY2UsIGFuZCBjb25maWd1cmF0aW9uIGZpbGVzLgorCisgICAgICAiT2JqZWN0IiBmb3JtIHNoYWxsIG1lYW4gYW55IGZvcm0gcmVzdWx0aW5nIGZyb20gbWVjaGFuaWNhbAorICAgICAgdHJhbnNmb3JtYXRpb24gb3IgdHJhbnNsYXRpb24gb2YgYSBTb3VyY2UgZm9ybSwgaW5jbHVkaW5nIGJ1dAorICAgICAgbm90IGxpbWl0ZWQgdG8gY29tcGlsZWQgb2JqZWN0IGNvZGUsIGdlbmVyYXRlZCBkb2N1bWVudGF0aW9uLAorICAgICAgYW5kIGNvbnZlcnNpb25zIHRvIG90aGVyIG1lZGlhIHR5cGVzLgorCisgICAgICAiV29yayIgc2hhbGwgbWVhbiB0aGUgd29yayBvZiBhdXRob3JzaGlwLCB3aGV0aGVyIGluIFNvdXJjZSBvcgorICAgICAgT2JqZWN0IGZvcm0sIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSBMaWNlbnNlLCBhcyBpbmRpY2F0ZWQgYnkgYQorICAgICAgY29weXJpZ2h0IG5vdGljZSB0aGF0IGlzIGluY2x1ZGVkIGluIG9yIGF0dGFjaGVkIHRvIHRoZSB3b3JrCisgICAgICAoYW4gZXhhbXBsZSBpcyBwcm92aWRlZCBpbiB0aGUgQXBwZW5kaXggYmVsb3cpLgorCisgICAgICAiRGVyaXZhdGl2ZSBXb3JrcyIgc2hhbGwgbWVhbiBhbnkgd29yaywgd2hldGhlciBpbiBTb3VyY2Ugb3IgT2JqZWN0CisgICAgICBmb3JtLCB0aGF0IGlzIGJhc2VkIG9uIChvciBkZXJpdmVkIGZyb20pIHRoZSBXb3JrIGFuZCBmb3Igd2hpY2ggdGhlCisgICAgICBlZGl0b3JpYWwgcmV2aXNpb25zLCBhbm5vdGF0aW9ucywgZWxhYm9yYXRpb25zLCBvciBvdGhlciBtb2RpZmljYXRpb25zCisgICAgICByZXByZXNlbnQsIGFzIGEgd2hvbGUsIGFuIG9yaWdpbmFsIHdvcmsgb2YgYXV0aG9yc2hpcC4gRm9yIHRoZSBwdXJwb3NlcworICAgICAgb2YgdGhpcyBMaWNlbnNlLCBEZXJpdmF0aXZlIFdvcmtzIHNoYWxsIG5vdCBpbmNsdWRlIHdvcmtzIHRoYXQgcmVtYWluCisgICAgICBzZXBhcmFibGUgZnJvbSwgb3IgbWVyZWx5IGxpbmsgKG9yIGJpbmQgYnkgbmFtZSkgdG8gdGhlIGludGVyZmFjZXMgb2YsCisgICAgICB0aGUgV29yayBhbmQgRGVyaXZhdGl2ZSBXb3JrcyB0aGVyZW9mLgorCisgICAgICAiQ29udHJpYnV0aW9uIiBzaGFsbCBtZWFuIGFueSB3b3JrIG9mIGF1dGhvcnNoaXAsIGluY2x1ZGluZworICAgICAgdGhlIG9yaWdpbmFsIHZlcnNpb24gb2YgdGhlIFdvcmsgYW5kIGFueSBtb2RpZmljYXRpb25zIG9yIGFkZGl0aW9ucworICAgICAgdG8gdGhhdCBXb3JrIG9yIERlcml2YXRpdmUgV29ya3MgdGhlcmVvZiwgdGhhdCBpcyBpbnRlbnRpb25hbGx5CisgICAgICBzdWJtaXR0ZWQgdG8gTGljZW5zb3IgZm9yIGluY2x1c2lvbiBpbiB0aGUgV29yayBieSB0aGUgY29weXJpZ2h0IG93bmVyCisgICAgICBvciBieSBhbiBpbmRpdmlkdWFsIG9yIExlZ2FsIEVudGl0eSBhdXRob3JpemVkIHRvIHN1Ym1pdCBvbiBiZWhhbGYgb2YKKyAgICAgIHRoZSBjb3B5cmlnaHQgb3duZXIuIEZvciB0aGUgcHVycG9zZXMgb2YgdGhpcyBkZWZpbml0aW9uLCAic3VibWl0dGVkIgorICAgICAgbWVhbnMgYW55IGZvcm0gb2YgZWxlY3Ryb25pYywgdmVyYmFsLCBvciB3cml0dGVuIGNvbW11bmljYXRpb24gc2VudAorICAgICAgdG8gdGhlIExpY2Vuc29yIG9yIGl0cyByZXByZXNlbnRhdGl2ZXMsIGluY2x1ZGluZyBidXQgbm90IGxpbWl0ZWQgdG8KKyAgICAgIGNvbW11bmljYXRpb24gb24gZWxlY3Ryb25pYyBtYWlsaW5nIGxpc3RzLCBzb3VyY2UgY29kZSBjb250cm9sIHN5c3RlbXMsCisgICAgICBhbmQgaXNzdWUgdHJhY2tpbmcgc3lzdGVtcyB0aGF0IGFyZSBtYW5hZ2VkIGJ5LCBvciBvbiBiZWhhbGYgb2YsIHRoZQorICAgICAgTGljZW5zb3IgZm9yIHRoZSBwdXJwb3NlIG9mIGRpc2N1c3NpbmcgYW5kIGltcHJvdmluZyB0aGUgV29yaywgYnV0CisgICAgICBleGNsdWRpbmcgY29tbXVuaWNhdGlvbiB0aGF0IGlzIGNvbnNwaWN1b3VzbHkgbWFya2VkIG9yIG90aGVyd2lzZQorICAgICAgZGVzaWduYXRlZCBpbiB3cml0aW5nIGJ5IHRoZSBjb3B5cmlnaHQgb3duZXIgYXMgIk5vdCBhIENvbnRyaWJ1dGlvbi4iCisKKyAgICAgICJDb250cmlidXRvciIgc2hhbGwgbWVhbiBMaWNlbnNvciBhbmQgYW55IGluZGl2aWR1YWwgb3IgTGVnYWwgRW50aXR5CisgICAgICBvbiBiZWhhbGYgb2Ygd2hvbSBhIENvbnRyaWJ1dGlvbiBoYXMgYmVlbiByZWNlaXZlZCBieSBMaWNlbnNvciBhbmQKKyAgICAgIHN1YnNlcXVlbnRseSBpbmNvcnBvcmF0ZWQgd2l0aGluIHRoZSBXb3JrLgorCisgICAyLiBHcmFudCBvZiBDb3B5cmlnaHQgTGljZW5zZS4gU3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YKKyAgICAgIHRoaXMgTGljZW5zZSwgZWFjaCBDb250cmlidXRvciBoZXJlYnkgZ3JhbnRzIHRvIFlvdSBhIHBlcnBldHVhbCwKKyAgICAgIHdvcmxkd2lkZSwgbm9uLWV4Y2x1c2l2ZSwgbm8tY2hhcmdlLCByb3lhbHR5LWZyZWUsIGlycmV2b2NhYmxlCisgICAgICBjb3B5cmlnaHQgbGljZW5zZSB0byByZXByb2R1Y2UsIHByZXBhcmUgRGVyaXZhdGl2ZSBXb3JrcyBvZiwKKyAgICAgIHB1YmxpY2x5IGRpc3BsYXksIHB1YmxpY2x5IHBlcmZvcm0sIHN1YmxpY2Vuc2UsIGFuZCBkaXN0cmlidXRlIHRoZQorICAgICAgV29yayBhbmQgc3VjaCBEZXJpdmF0aXZlIFdvcmtzIGluIFNvdXJjZSBvciBPYmplY3QgZm9ybS4KKworICAgMy4gR3JhbnQgb2YgUGF0ZW50IExpY2Vuc2UuIFN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mCisgICAgICB0aGlzIExpY2Vuc2UsIGVhY2ggQ29udHJpYnV0b3IgaGVyZWJ5IGdyYW50cyB0byBZb3UgYSBwZXJwZXR1YWwsCisgICAgICB3b3JsZHdpZGUsIG5vbi1leGNsdXNpdmUsIG5vLWNoYXJnZSwgcm95YWx0eS1mcmVlLCBpcnJldm9jYWJsZQorICAgICAgKGV4Y2VwdCBhcyBzdGF0ZWQgaW4gdGhpcyBzZWN0aW9uKSBwYXRlbnQgbGljZW5zZSB0byBtYWtlLCBoYXZlIG1hZGUsCisgICAgICB1c2UsIG9mZmVyIHRvIHNlbGwsIHNlbGwsIGltcG9ydCwgYW5kIG90aGVyd2lzZSB0cmFuc2ZlciB0aGUgV29yaywKKyAgICAgIHdoZXJlIHN1Y2ggbGljZW5zZSBhcHBsaWVzIG9ubHkgdG8gdGhvc2UgcGF0ZW50IGNsYWltcyBsaWNlbnNhYmxlCisgICAgICBieSBzdWNoIENvbnRyaWJ1dG9yIHRoYXQgYXJlIG5lY2Vzc2FyaWx5IGluZnJpbmdlZCBieSB0aGVpcgorICAgICAgQ29udHJpYnV0aW9uKHMpIGFsb25lIG9yIGJ5IGNvbWJpbmF0aW9uIG9mIHRoZWlyIENvbnRyaWJ1dGlvbihzKQorICAgICAgd2l0aCB0aGUgV29yayB0byB3aGljaCBzdWNoIENvbnRyaWJ1dGlvbihzKSB3YXMgc3VibWl0dGVkLiBJZiBZb3UKKyAgICAgIGluc3RpdHV0ZSBwYXRlbnQgbGl0aWdhdGlvbiBhZ2FpbnN0IGFueSBlbnRpdHkgKGluY2x1ZGluZyBhCisgICAgICBjcm9zcy1jbGFpbSBvciBjb3VudGVyY2xhaW0gaW4gYSBsYXdzdWl0KSBhbGxlZ2luZyB0aGF0IHRoZSBXb3JrCisgICAgICBvciBhIENvbnRyaWJ1dGlvbiBpbmNvcnBvcmF0ZWQgd2l0aGluIHRoZSBXb3JrIGNvbnN0aXR1dGVzIGRpcmVjdAorICAgICAgb3IgY29udHJpYnV0b3J5IHBhdGVudCBpbmZyaW5nZW1lbnQsIHRoZW4gYW55IHBhdGVudCBsaWNlbnNlcworICAgICAgZ3JhbnRlZCB0byBZb3UgdW5kZXIgdGhpcyBMaWNlbnNlIGZvciB0aGF0IFdvcmsgc2hhbGwgdGVybWluYXRlCisgICAgICBhcyBvZiB0aGUgZGF0ZSBzdWNoIGxpdGlnYXRpb24gaXMgZmlsZWQuCisKKyAgIDQuIFJlZGlzdHJpYnV0aW9uLiBZb3UgbWF5IHJlcHJvZHVjZSBhbmQgZGlzdHJpYnV0ZSBjb3BpZXMgb2YgdGhlCisgICAgICBXb3JrIG9yIERlcml2YXRpdmUgV29ya3MgdGhlcmVvZiBpbiBhbnkgbWVkaXVtLCB3aXRoIG9yIHdpdGhvdXQKKyAgICAgIG1vZGlmaWNhdGlvbnMsIGFuZCBpbiBTb3VyY2Ugb3IgT2JqZWN0IGZvcm0sIHByb3ZpZGVkIHRoYXQgWW91CisgICAgICBtZWV0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKKworICAgICAgKGEpIFlvdSBtdXN0IGdpdmUgYW55IG90aGVyIHJlY2lwaWVudHMgb2YgdGhlIFdvcmsgb3IKKyAgICAgICAgICBEZXJpdmF0aXZlIFdvcmtzIGEgY29weSBvZiB0aGlzIExpY2Vuc2U7IGFuZAorCisgICAgICAoYikgWW91IG11c3QgY2F1c2UgYW55IG1vZGlmaWVkIGZpbGVzIHRvIGNhcnJ5IHByb21pbmVudCBub3RpY2VzCisgICAgICAgICAgc3RhdGluZyB0aGF0IFlvdSBjaGFuZ2VkIHRoZSBmaWxlczsgYW5kCisKKyAgICAgIChjKSBZb3UgbXVzdCByZXRhaW4sIGluIHRoZSBTb3VyY2UgZm9ybSBvZiBhbnkgRGVyaXZhdGl2ZSBXb3JrcworICAgICAgICAgIHRoYXQgWW91IGRpc3RyaWJ1dGUsIGFsbCBjb3B5cmlnaHQsIHBhdGVudCwgdHJhZGVtYXJrLCBhbmQKKyAgICAgICAgICBhdHRyaWJ1dGlvbiBub3RpY2VzIGZyb20gdGhlIFNvdXJjZSBmb3JtIG9mIHRoZSBXb3JrLAorICAgICAgICAgIGV4Y2x1ZGluZyB0aG9zZSBub3RpY2VzIHRoYXQgZG8gbm90IHBlcnRhaW4gdG8gYW55IHBhcnQgb2YKKyAgICAgICAgICB0aGUgRGVyaXZhdGl2ZSBXb3JrczsgYW5kCisKKyAgICAgIChkKSBJZiB0aGUgV29yayBpbmNsdWRlcyBhICJOT1RJQ0UiIHRleHQgZmlsZSBhcyBwYXJ0IG9mIGl0cworICAgICAgICAgIGRpc3RyaWJ1dGlvbiwgdGhlbiBhbnkgRGVyaXZhdGl2ZSBXb3JrcyB0aGF0IFlvdSBkaXN0cmlidXRlIG11c3QKKyAgICAgICAgICBpbmNsdWRlIGEgcmVhZGFibGUgY29weSBvZiB0aGUgYXR0cmlidXRpb24gbm90aWNlcyBjb250YWluZWQKKyAgICAgICAgICB3aXRoaW4gc3VjaCBOT1RJQ0UgZmlsZSwgZXhjbHVkaW5nIHRob3NlIG5vdGljZXMgdGhhdCBkbyBub3QKKyAgICAgICAgICBwZXJ0YWluIHRvIGFueSBwYXJ0IG9mIHRoZSBEZXJpdmF0aXZlIFdvcmtzLCBpbiBhdCBsZWFzdCBvbmUKKyAgICAgICAgICBvZiB0aGUgZm9sbG93aW5nIHBsYWNlczogd2l0aGluIGEgTk9USUNFIHRleHQgZmlsZSBkaXN0cmlidXRlZAorICAgICAgICAgIGFzIHBhcnQgb2YgdGhlIERlcml2YXRpdmUgV29ya3M7IHdpdGhpbiB0aGUgU291cmNlIGZvcm0gb3IKKyAgICAgICAgICBkb2N1bWVudGF0aW9uLCBpZiBwcm92aWRlZCBhbG9uZyB3aXRoIHRoZSBEZXJpdmF0aXZlIFdvcmtzOyBvciwKKyAgICAgICAgICB3aXRoaW4gYSBkaXNwbGF5IGdlbmVyYXRlZCBieSB0aGUgRGVyaXZhdGl2ZSBXb3JrcywgaWYgYW5kCisgICAgICAgICAgd2hlcmV2ZXIgc3VjaCB0aGlyZC1wYXJ0eSBub3RpY2VzIG5vcm1hbGx5IGFwcGVhci4gVGhlIGNvbnRlbnRzCisgICAgICAgICAgb2YgdGhlIE5PVElDRSBmaWxlIGFyZSBmb3IgaW5mb3JtYXRpb25hbCBwdXJwb3NlcyBvbmx5IGFuZAorICAgICAgICAgIGRvIG5vdCBtb2RpZnkgdGhlIExpY2Vuc2UuIFlvdSBtYXkgYWRkIFlvdXIgb3duIGF0dHJpYnV0aW9uCisgICAgICAgICAgbm90aWNlcyB3aXRoaW4gRGVyaXZhdGl2ZSBXb3JrcyB0aGF0IFlvdSBkaXN0cmlidXRlLCBhbG9uZ3NpZGUKKyAgICAgICAgICBvciBhcyBhbiBhZGRlbmR1bSB0byB0aGUgTk9USUNFIHRleHQgZnJvbSB0aGUgV29yaywgcHJvdmlkZWQKKyAgICAgICAgICB0aGF0IHN1Y2ggYWRkaXRpb25hbCBhdHRyaWJ1dGlvbiBub3RpY2VzIGNhbm5vdCBiZSBjb25zdHJ1ZWQKKyAgICAgICAgICBhcyBtb2RpZnlpbmcgdGhlIExpY2Vuc2UuCisKKyAgICAgIFlvdSBtYXkgYWRkIFlvdXIgb3duIGNvcHlyaWdodCBzdGF0ZW1lbnQgdG8gWW91ciBtb2RpZmljYXRpb25zIGFuZAorICAgICAgbWF5IHByb3ZpZGUgYWRkaXRpb25hbCBvciBkaWZmZXJlbnQgbGljZW5zZSB0ZXJtcyBhbmQgY29uZGl0aW9ucworICAgICAgZm9yIHVzZSwgcmVwcm9kdWN0aW9uLCBvciBkaXN0cmlidXRpb24gb2YgWW91ciBtb2RpZmljYXRpb25zLCBvcgorICAgICAgZm9yIGFueSBzdWNoIERlcml2YXRpdmUgV29ya3MgYXMgYSB3aG9sZSwgcHJvdmlkZWQgWW91ciB1c2UsCisgICAgICByZXByb2R1Y3Rpb24sIGFuZCBkaXN0cmlidXRpb24gb2YgdGhlIFdvcmsgb3RoZXJ3aXNlIGNvbXBsaWVzIHdpdGgKKyAgICAgIHRoZSBjb25kaXRpb25zIHN0YXRlZCBpbiB0aGlzIExpY2Vuc2UuCisKKyAgIDUuIFN1Ym1pc3Npb24gb2YgQ29udHJpYnV0aW9ucy4gVW5sZXNzIFlvdSBleHBsaWNpdGx5IHN0YXRlIG90aGVyd2lzZSwKKyAgICAgIGFueSBDb250cmlidXRpb24gaW50ZW50aW9uYWxseSBzdWJtaXR0ZWQgZm9yIGluY2x1c2lvbiBpbiB0aGUgV29yaworICAgICAgYnkgWW91IHRvIHRoZSBMaWNlbnNvciBzaGFsbCBiZSB1bmRlciB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YKKyAgICAgIHRoaXMgTGljZW5zZSwgd2l0aG91dCBhbnkgYWRkaXRpb25hbCB0ZXJtcyBvciBjb25kaXRpb25zLgorICAgICAgTm90d2l0aHN0YW5kaW5nIHRoZSBhYm92ZSwgbm90aGluZyBoZXJlaW4gc2hhbGwgc3VwZXJzZWRlIG9yIG1vZGlmeQorICAgICAgdGhlIHRlcm1zIG9mIGFueSBzZXBhcmF0ZSBsaWNlbnNlIGFncmVlbWVudCB5b3UgbWF5IGhhdmUgZXhlY3V0ZWQKKyAgICAgIHdpdGggTGljZW5zb3IgcmVnYXJkaW5nIHN1Y2ggQ29udHJpYnV0aW9ucy4KKworICAgNi4gVHJhZGVtYXJrcy4gVGhpcyBMaWNlbnNlIGRvZXMgbm90IGdyYW50IHBlcm1pc3Npb24gdG8gdXNlIHRoZSB0cmFkZQorICAgICAgbmFtZXMsIHRyYWRlbWFya3MsIHNlcnZpY2UgbWFya3MsIG9yIHByb2R1Y3QgbmFtZXMgb2YgdGhlIExpY2Vuc29yLAorICAgICAgZXhjZXB0IGFzIHJlcXVpcmVkIGZvciByZWFzb25hYmxlIGFuZCBjdXN0b21hcnkgdXNlIGluIGRlc2NyaWJpbmcgdGhlCisgICAgICBvcmlnaW4gb2YgdGhlIFdvcmsgYW5kIHJlcHJvZHVjaW5nIHRoZSBjb250ZW50IG9mIHRoZSBOT1RJQ0UgZmlsZS4KKworICAgNy4gRGlzY2xhaW1lciBvZiBXYXJyYW50eS4gVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yCisgICAgICBhZ3JlZWQgdG8gaW4gd3JpdGluZywgTGljZW5zb3IgcHJvdmlkZXMgdGhlIFdvcmsgKGFuZCBlYWNoCisgICAgICBDb250cmlidXRvciBwcm92aWRlcyBpdHMgQ29udHJpYnV0aW9ucykgb24gYW4gIkFTIElTIiBCQVNJUywKKyAgICAgIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvcgorICAgICAgaW1wbGllZCwgaW5jbHVkaW5nLCB3aXRob3V0IGxpbWl0YXRpb24sIGFueSB3YXJyYW50aWVzIG9yIGNvbmRpdGlvbnMKKyAgICAgIG9mIFRJVExFLCBOT04tSU5GUklOR0VNRU5ULCBNRVJDSEFOVEFCSUxJVFksIG9yIEZJVE5FU1MgRk9SIEEKKyAgICAgIFBBUlRJQ1VMQVIgUFVSUE9TRS4gWW91IGFyZSBzb2xlbHkgcmVzcG9uc2libGUgZm9yIGRldGVybWluaW5nIHRoZQorICAgICAgYXBwcm9wcmlhdGVuZXNzIG9mIHVzaW5nIG9yIHJlZGlzdHJpYnV0aW5nIHRoZSBXb3JrIGFuZCBhc3N1bWUgYW55CisgICAgICByaXNrcyBhc3NvY2lhdGVkIHdpdGggWW91ciBleGVyY2lzZSBvZiBwZXJtaXNzaW9ucyB1bmRlciB0aGlzIExpY2Vuc2UuCisKKyAgIDguIExpbWl0YXRpb24gb2YgTGlhYmlsaXR5LiBJbiBubyBldmVudCBhbmQgdW5kZXIgbm8gbGVnYWwgdGhlb3J5LAorICAgICAgd2hldGhlciBpbiB0b3J0IChpbmNsdWRpbmcgbmVnbGlnZW5jZSksIGNvbnRyYWN0LCBvciBvdGhlcndpc2UsCisgICAgICB1bmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgKHN1Y2ggYXMgZGVsaWJlcmF0ZSBhbmQgZ3Jvc3NseQorICAgICAgbmVnbGlnZW50IGFjdHMpIG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzaGFsbCBhbnkgQ29udHJpYnV0b3IgYmUKKyAgICAgIGxpYWJsZSB0byBZb3UgZm9yIGRhbWFnZXMsIGluY2x1ZGluZyBhbnkgZGlyZWN0LCBpbmRpcmVjdCwgc3BlY2lhbCwKKyAgICAgIGluY2lkZW50YWwsIG9yIGNvbnNlcXVlbnRpYWwgZGFtYWdlcyBvZiBhbnkgY2hhcmFjdGVyIGFyaXNpbmcgYXMgYQorICAgICAgcmVzdWx0IG9mIHRoaXMgTGljZW5zZSBvciBvdXQgb2YgdGhlIHVzZSBvciBpbmFiaWxpdHkgdG8gdXNlIHRoZQorICAgICAgV29yayAoaW5jbHVkaW5nIGJ1dCBub3QgbGltaXRlZCB0byBkYW1hZ2VzIGZvciBsb3NzIG9mIGdvb2R3aWxsLAorICAgICAgd29yayBzdG9wcGFnZSwgY29tcHV0ZXIgZmFpbHVyZSBvciBtYWxmdW5jdGlvbiwgb3IgYW55IGFuZCBhbGwKKyAgICAgIG90aGVyIGNvbW1lcmNpYWwgZGFtYWdlcyBvciBsb3NzZXMpLCBldmVuIGlmIHN1Y2ggQ29udHJpYnV0b3IKKyAgICAgIGhhcyBiZWVuIGFkdmlzZWQgb2YgdGhlIHBvc3NpYmlsaXR5IG9mIHN1Y2ggZGFtYWdlcy4KKworICAgOS4gQWNjZXB0aW5nIFdhcnJhbnR5IG9yIEFkZGl0aW9uYWwgTGlhYmlsaXR5LiBXaGlsZSByZWRpc3RyaWJ1dGluZworICAgICAgdGhlIFdvcmsgb3IgRGVyaXZhdGl2ZSBXb3JrcyB0aGVyZW9mLCBZb3UgbWF5IGNob29zZSB0byBvZmZlciwKKyAgICAgIGFuZCBjaGFyZ2UgYSBmZWUgZm9yLCBhY2NlcHRhbmNlIG9mIHN1cHBvcnQsIHdhcnJhbnR5LCBpbmRlbW5pdHksCisgICAgICBvciBvdGhlciBsaWFiaWxpdHkgb2JsaWdhdGlvbnMgYW5kL29yIHJpZ2h0cyBjb25zaXN0ZW50IHdpdGggdGhpcworICAgICAgTGljZW5zZS4gSG93ZXZlciwgaW4gYWNjZXB0aW5nIHN1Y2ggb2JsaWdhdGlvbnMsIFlvdSBtYXkgYWN0IG9ubHkKKyAgICAgIG9uIFlvdXIgb3duIGJlaGFsZiBhbmQgb24gWW91ciBzb2xlIHJlc3BvbnNpYmlsaXR5LCBub3Qgb24gYmVoYWxmCisgICAgICBvZiBhbnkgb3RoZXIgQ29udHJpYnV0b3IsIGFuZCBvbmx5IGlmIFlvdSBhZ3JlZSB0byBpbmRlbW5pZnksCisgICAgICBkZWZlbmQsIGFuZCBob2xkIGVhY2ggQ29udHJpYnV0b3IgaGFybWxlc3MgZm9yIGFueSBsaWFiaWxpdHkKKyAgICAgIGluY3VycmVkIGJ5LCBvciBjbGFpbXMgYXNzZXJ0ZWQgYWdhaW5zdCwgc3VjaCBDb250cmlidXRvciBieSByZWFzb24KKyAgICAgIG9mIHlvdXIgYWNjZXB0aW5nIGFueSBzdWNoIHdhcnJhbnR5IG9yIGFkZGl0aW9uYWwgbGlhYmlsaXR5LgorCisgICBFTkQgT0YgVEVSTVMgQU5EIENPTkRJVElPTlMKKwpkaWZmIC0tZ2l0IGEvbWVkaWEvY29kZWMyL2NvbXBvbmVudHMvbXBlZzRfaDI2My9wYXRlbnRfZGlzY2xhaW1lci50eHQgYi9tZWRpYS9jb2RlYzIvY29tcG9uZW50cy9tcGVnNF9oMjYzL3BhdGVudF9kaXNjbGFpbWVyLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNGJmMTFkCi0tLSAvZGV2L251bGwKKysrIGIvbWVkaWEvY29kZWMyL2NvbXBvbmVudHMvbXBlZzRfaDI2My9wYXRlbnRfZGlzY2xhaW1lci50eHQKQEAgLTAsMCArMSw5IEBACisKK1RISVMgSVMgTk9UIEEgR1JBTlQgT0YgUEFURU5UIFJJR0hUUy4KKworR29vZ2xlIG1ha2VzIG5vIHJlcHJlc2VudGF0aW9uIG9yIHdhcnJhbnR5IHRoYXQgdGhlIGNvZGVjcyBmb3Igd2hpY2gKK3NvdXJjZSBjb2RlIGlzIG1hZGUgYXZhaWxhYmxlIGhlcmV1bmRlciBhcmUgdW5lbmN1bWJlcmVkIGJ5Cit0aGlyZC1wYXJ0eSBwYXRlbnRzLiAgVGhvc2UgaW50ZW5kaW5nIHRvIHVzZSB0aGlzIHNvdXJjZSBjb2RlIGluCitoYXJkd2FyZSBvciBzb2Z0d2FyZSBwcm9kdWN0cyBhcmUgYWR2aXNlZCB0aGF0IGltcGxlbWVudGF0aW9ucyBvZgordGhlc2UgY29kZWNzLCBpbmNsdWRpbmcgaW4gb3BlbiBzb3VyY2Ugc29mdHdhcmUgb3Igc2hhcmV3YXJlLCBtYXkKK3JlcXVpcmUgcGF0ZW50IGxpY2Vuc2VzIGZyb20gdGhlIHJlbGV2YW50IHBhdGVudCBob2xkZXJzLgpkaWZmIC0tZ2l0IGEvbWVkaWEvY29kZWMyL2NvbXBvbmVudHMvb3B1cy9BbmRyb2lkLmJwIGIvbWVkaWEvY29kZWMyL2NvbXBvbmVudHMvb3B1cy9BbmRyb2lkLmJwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI0MGNkYjkKLS0tIC9kZXYvbnVsbAorKysgYi9tZWRpYS9jb2RlYzIvY29tcG9uZW50cy9vcHVzL0FuZHJvaWQuYnAKQEAgLTAsMCArMSwxMSBAQAorY2NfbGlicmFyeV9zaGFyZWQgeworICAgIG5hbWU6ICJsaWJjb2RlYzJfc29mdF9vcHVzZGVjIiwKKyAgICBkZWZhdWx0czogWworICAgICAgICAibGliY29kZWMyX3NvZnQtZGVmYXVsdHMiLAorICAgICAgICAibGliY29kZWMyX3NvZnRfc2FuaXRpemVfYWxsLWRlZmF1bHRzIiwKKyAgICBdLAorCisgICAgc3JjczogWyJDMlNvZnRPcHVzRGVjLmNwcCJdLAorCisgICAgc2hhcmVkX2xpYnM6IFsibGlib3B1cyJdLAorfQpkaWZmIC0tZ2l0IGEvbWVkaWEvY29kZWMyL2NvbXBvbmVudHMvb3B1cy9DMlNvZnRPcHVzRGVjLmNwcCBiL21lZGlhL2NvZGVjMi9jb21wb25lbnRzL29wdXMvQzJTb2Z0T3B1c0RlYy5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjQzOWMzYwotLS0gL2Rldi9udWxsCisrKyBiL21lZGlhL2NvZGVjMi9jb21wb25lbnRzL29wdXMvQzJTb2Z0T3B1c0RlYy5jcHAKQEAgLTAsMCArMSw1NDQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTggVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworCisvLyNkZWZpbmUgTE9HX05ERUJVRyAwCisjZGVmaW5lIExPR19UQUcgIkMyU29mdE9wdXNEZWMiCisjaW5jbHVkZSA8bG9nL2xvZy5oPgorCisjaW5jbHVkZSA8bWVkaWEvc3RhZ2VmcmlnaHQvZm91bmRhdGlvbi9NZWRpYURlZnMuaD4KKworI2luY2x1ZGUgPEMyUGxhdGZvcm1TdXBwb3J0Lmg+CisjaW5jbHVkZSA8U2ltcGxlQzJJbnRlcmZhY2UuaD4KKworI2luY2x1ZGUgIkMyU29mdE9wdXNEZWMuaCIKKworZXh0ZXJuICJDIiB7CisgICAgI2luY2x1ZGUgPG9wdXMuaD4KKyAgICAjaW5jbHVkZSA8b3B1c19tdWx0aXN0cmVhbS5oPgorfQorCituYW1lc3BhY2UgYW5kcm9pZCB7CisKK2NvbnN0ZXhwciBjaGFyIENPTVBPTkVOVF9OQU1FW10gPSAiYzIuYW5kcm9pZC5vcHVzLmRlY29kZXIiOworCitjbGFzcyBDMlNvZnRPcHVzRGVjOjpJbnRmSW1wbCA6IHB1YmxpYyBDMkludGVyZmFjZUhlbHBlciB7CisgICBwdWJsaWM6CisgICAgZXhwbGljaXQgSW50ZkltcGwoY29uc3Qgc3RkOjpzaGFyZWRfcHRyPEMyUmVmbGVjdG9ySGVscGVyPiYgaGVscGVyKQorICAgICAgICA6IEMySW50ZXJmYWNlSGVscGVyKGhlbHBlcikgeworICAgICAgICBzZXREZXJpdmVkSW5zdGFuY2UodGhpcyk7CisKKyAgICAgICAgYWRkUGFyYW1ldGVyKAorICAgICAgICAgICAgICAgIERlZmluZVBhcmFtKG1JbnB1dEZvcm1hdCwgQzJfTkFNRV9JTlBVVF9TVFJFQU1fRk9STUFUX1NFVFRJTkcpCisgICAgICAgICAgICAgICAgLndpdGhDb25zdFZhbHVlKG5ldyBDMlN0cmVhbUZvcm1hdENvbmZpZzo6aW5wdXQoMHUsIEMyRm9ybWF0Q29tcHJlc3NlZCkpCisgICAgICAgICAgICAgICAgLmJ1aWxkKCkpOworCisgICAgICAgIGFkZFBhcmFtZXRlcigKKyAgICAgICAgICAgICAgICBEZWZpbmVQYXJhbShtT3V0cHV0Rm9ybWF0LCBDMl9OQU1FX09VVFBVVF9TVFJFQU1fRk9STUFUX1NFVFRJTkcpCisgICAgICAgICAgICAgICAgLndpdGhDb25zdFZhbHVlKG5ldyBDMlN0cmVhbUZvcm1hdENvbmZpZzo6b3V0cHV0KDB1LCBDMkZvcm1hdEF1ZGlvKSkKKyAgICAgICAgICAgICAgICAuYnVpbGQoKSk7CisKKyAgICAgICAgYWRkUGFyYW1ldGVyKAorICAgICAgICAgICAgICAgIERlZmluZVBhcmFtKG1JbnB1dE1lZGlhVHlwZSwgQzJfTkFNRV9JTlBVVF9QT1JUX01JTUVfU0VUVElORykKKyAgICAgICAgICAgICAgICAud2l0aENvbnN0VmFsdWUoQWxsb2NTaGFyZWRTdHJpbmc8QzJQb3J0TWltZUNvbmZpZzo6aW5wdXQ+KAorICAgICAgICAgICAgICAgICAgICAgICAgTUVESUFfTUlNRVRZUEVfQVVESU9fT1BVUykpCisgICAgICAgICAgICAgICAgLmJ1aWxkKCkpOworCisgICAgICAgIGFkZFBhcmFtZXRlcigKKyAgICAgICAgICAgICAgICBEZWZpbmVQYXJhbShtT3V0cHV0TWVkaWFUeXBlLCBDMl9OQU1FX09VVFBVVF9QT1JUX01JTUVfU0VUVElORykKKyAgICAgICAgICAgICAgICAud2l0aENvbnN0VmFsdWUoQWxsb2NTaGFyZWRTdHJpbmc8QzJQb3J0TWltZUNvbmZpZzo6b3V0cHV0PigKKyAgICAgICAgICAgICAgICAgICAgICAgIE1FRElBX01JTUVUWVBFX0FVRElPX1JBVykpCisgICAgICAgICAgICAgICAgLmJ1aWxkKCkpOworCisgICAgICAgIGFkZFBhcmFtZXRlcigKKyAgICAgICAgICAgICAgICBEZWZpbmVQYXJhbShtU2FtcGxlUmF0ZSwgQzJfTkFNRV9TVFJFQU1fU0FNUExFX1JBVEVfU0VUVElORykKKyAgICAgICAgICAgICAgICAud2l0aERlZmF1bHQobmV3IEMyU3RyZWFtU2FtcGxlUmF0ZUluZm86Om91dHB1dCgwdSwgNDgwMDApKQorICAgICAgICAgICAgICAgIC53aXRoRmllbGRzKHtDMkYobVNhbXBsZVJhdGUsIHZhbHVlKS5lcXVhbFRvKDQ4MDAwKX0pCisgICAgICAgICAgICAgICAgLndpdGhTZXR0ZXIoKFNldHRlcjxkZWNsdHlwZSgqbVNhbXBsZVJhdGUpPjo6U3RyaWN0VmFsdWVXaXRoTm9EZXBzKSkKKyAgICAgICAgICAgICAgICAuYnVpbGQoKSk7CisKKyAgICAgICAgYWRkUGFyYW1ldGVyKAorICAgICAgICAgICAgICAgIERlZmluZVBhcmFtKG1DaGFubmVsQ291bnQsIEMyX05BTUVfU1RSRUFNX0NIQU5ORUxfQ09VTlRfU0VUVElORykKKyAgICAgICAgICAgICAgICAud2l0aERlZmF1bHQobmV3IEMyU3RyZWFtQ2hhbm5lbENvdW50SW5mbzo6b3V0cHV0KDB1LCAxKSkKKyAgICAgICAgICAgICAgICAud2l0aEZpZWxkcyh7QzJGKG1DaGFubmVsQ291bnQsIHZhbHVlKS5pblJhbmdlKDEsIDgpfSkKKyAgICAgICAgICAgICAgICAud2l0aFNldHRlcihTZXR0ZXI8ZGVjbHR5cGUoKm1DaGFubmVsQ291bnQpPjo6U3RyaWN0VmFsdWVXaXRoTm9EZXBzKQorICAgICAgICAgICAgICAgIC5idWlsZCgpKTsKKworICAgICAgICBhZGRQYXJhbWV0ZXIoCisgICAgICAgICAgICAgICAgRGVmaW5lUGFyYW0obUJpdHJhdGUsIEMyX05BTUVfU1RSRUFNX0JJVFJBVEVfU0VUVElORykKKyAgICAgICAgICAgICAgICAud2l0aERlZmF1bHQobmV3IEMyQml0cmF0ZVR1bmluZzo6aW5wdXQoMHUsIDYwMDApKQorICAgICAgICAgICAgICAgIC53aXRoRmllbGRzKHtDMkYobUJpdHJhdGUsIHZhbHVlKS5pblJhbmdlKDYwMDAsIDUxMDAwMCl9KQorICAgICAgICAgICAgICAgIC53aXRoU2V0dGVyKFNldHRlcjxkZWNsdHlwZSgqbUJpdHJhdGUpPjo6Tm9uU3RyaWN0VmFsdWVXaXRoTm9EZXBzKQorICAgICAgICAgICAgICAgIC5idWlsZCgpKTsKKworICAgICAgICBhZGRQYXJhbWV0ZXIoCisgICAgICAgICAgICAgICAgRGVmaW5lUGFyYW0obUlucHV0TWF4QnVmU2l6ZSwgQzJfUEFSQU1LRVlfSU5QVVRfTUFYX0JVRkZFUl9TSVpFKQorICAgICAgICAgICAgICAgIC53aXRoQ29uc3RWYWx1ZShuZXcgQzJTdHJlYW1NYXhCdWZmZXJTaXplSW5mbzo6aW5wdXQoMHUsIDk2MCAqIDYpKQorICAgICAgICAgICAgICAgIC5idWlsZCgpKTsKKyAgICB9CisKKyAgIHByaXZhdGU6CisgICAgc3RkOjpzaGFyZWRfcHRyPEMyU3RyZWFtRm9ybWF0Q29uZmlnOjppbnB1dD4gbUlucHV0Rm9ybWF0OworICAgIHN0ZDo6c2hhcmVkX3B0cjxDMlN0cmVhbUZvcm1hdENvbmZpZzo6b3V0cHV0PiBtT3V0cHV0Rm9ybWF0OworICAgIHN0ZDo6c2hhcmVkX3B0cjxDMlBvcnRNaW1lQ29uZmlnOjppbnB1dD4gbUlucHV0TWVkaWFUeXBlOworICAgIHN0ZDo6c2hhcmVkX3B0cjxDMlBvcnRNaW1lQ29uZmlnOjpvdXRwdXQ+IG1PdXRwdXRNZWRpYVR5cGU7CisgICAgc3RkOjpzaGFyZWRfcHRyPEMyU3RyZWFtU2FtcGxlUmF0ZUluZm86Om91dHB1dD4gbVNhbXBsZVJhdGU7CisgICAgc3RkOjpzaGFyZWRfcHRyPEMyU3RyZWFtQ2hhbm5lbENvdW50SW5mbzo6b3V0cHV0PiBtQ2hhbm5lbENvdW50OworICAgIHN0ZDo6c2hhcmVkX3B0cjxDMkJpdHJhdGVUdW5pbmc6OmlucHV0PiBtQml0cmF0ZTsKKyAgICBzdGQ6OnNoYXJlZF9wdHI8QzJTdHJlYW1NYXhCdWZmZXJTaXplSW5mbzo6aW5wdXQ+IG1JbnB1dE1heEJ1ZlNpemU7Cit9OworCitDMlNvZnRPcHVzRGVjOjpDMlNvZnRPcHVzRGVjKGNvbnN0IGNoYXIgKm5hbWUsIGMyX25vZGVfaWRfdCBpZCwKKyAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RkOjpzaGFyZWRfcHRyPEludGZJbXBsPiYgaW50ZkltcGwpCisgICAgOiBTaW1wbGVDMkNvbXBvbmVudCgKKyAgICAgICAgc3RkOjptYWtlX3NoYXJlZDxTaW1wbGVJbnRlcmZhY2U8SW50ZkltcGw+PihuYW1lLCBpZCwgaW50ZkltcGwpKSwKKyAgICAgIG1JbnRmKGludGZJbXBsKSwKKyAgICAgIG1EZWNvZGVyKG51bGxwdHIpIHsKK30KKworQzJTb2Z0T3B1c0RlYzo6fkMyU29mdE9wdXNEZWMoKSB7CisgICAgb25SZWxlYXNlKCk7Cit9CisKK2MyX3N0YXR1c190IEMyU29mdE9wdXNEZWM6Om9uSW5pdCgpIHsKKyAgICBzdGF0dXNfdCBlcnIgPSBpbml0RGVjb2RlcigpOworICAgIHJldHVybiBlcnIgPT0gT0sgPyBDMl9PSyA6IEMyX05PX01FTU9SWTsKK30KKworYzJfc3RhdHVzX3QgQzJTb2Z0T3B1c0RlYzo6b25TdG9wKCkgeworICAgIGlmIChtRGVjb2RlcikgeworICAgICAgICBvcHVzX211bHRpc3RyZWFtX2RlY29kZXJfZGVzdHJveShtRGVjb2Rlcik7CisgICAgICAgIG1EZWNvZGVyID0gbnVsbHB0cjsKKyAgICB9CisgICAgbWVtc2V0KCZtSGVhZGVyLCAwLCBzaXplb2YobUhlYWRlcikpOworICAgIG1Db2RlY0RlbGF5ID0gMDsKKyAgICBtU2Vla1ByZVJvbGwgPSAwOworICAgIG1TYW1wbGVzVG9EaXNjYXJkID0gMDsKKyAgICBtSW5wdXRCdWZmZXJDb3VudCA9IDA7CisgICAgbVNpZ25hbGxlZEVycm9yID0gZmFsc2U7CisgICAgbVNpZ25hbGxlZE91dHB1dEVvcyA9IGZhbHNlOworCisgICAgcmV0dXJuIEMyX09LOworfQorCit2b2lkIEMyU29mdE9wdXNEZWM6Om9uUmVzZXQoKSB7CisgICAgKHZvaWQpb25TdG9wKCk7Cit9CisKK3ZvaWQgQzJTb2Z0T3B1c0RlYzo6b25SZWxlYXNlKCkgeworICAgIGlmIChtRGVjb2RlcikgeworICAgICAgICBvcHVzX211bHRpc3RyZWFtX2RlY29kZXJfZGVzdHJveShtRGVjb2Rlcik7CisgICAgICAgIG1EZWNvZGVyID0gbnVsbHB0cjsKKyAgICB9Cit9CisKK3N0YXR1c190IEMyU29mdE9wdXNEZWM6OmluaXREZWNvZGVyKCkgeworICAgIG1lbXNldCgmbUhlYWRlciwgMCwgc2l6ZW9mKG1IZWFkZXIpKTsKKyAgICBtQ29kZWNEZWxheSA9IDA7CisgICAgbVNlZWtQcmVSb2xsID0gMDsKKyAgICBtU2FtcGxlc1RvRGlzY2FyZCA9IDA7CisgICAgbUlucHV0QnVmZmVyQ291bnQgPSAwOworICAgIG1TaWduYWxsZWRFcnJvciA9IGZhbHNlOworICAgIG1TaWduYWxsZWRPdXRwdXRFb3MgPSBmYWxzZTsKKworICAgIHJldHVybiBPSzsKK30KKworYzJfc3RhdHVzX3QgQzJTb2Z0T3B1c0RlYzo6b25GbHVzaF9zbSgpIHsKKyAgICBpZiAobURlY29kZXIpIHsKKyAgICAgICAgb3B1c19tdWx0aXN0cmVhbV9kZWNvZGVyX2N0bChtRGVjb2RlciwgT1BVU19SRVNFVF9TVEFURSk7CisgICAgICAgIG1TYW1wbGVzVG9EaXNjYXJkID0gbVNlZWtQcmVSb2xsOworICAgICAgICBtU2lnbmFsbGVkT3V0cHV0RW9zID0gZmFsc2U7CisgICAgfQorICAgIHJldHVybiBDMl9PSzsKK30KKworYzJfc3RhdHVzX3QgQzJTb2Z0T3B1c0RlYzo6ZHJhaW4oCisgICAgICAgIHVpbnQzMl90IGRyYWluTW9kZSwKKyAgICAgICAgY29uc3Qgc3RkOjpzaGFyZWRfcHRyPEMyQmxvY2tQb29sPiAmcG9vbCkgeworICAgICh2b2lkKSBwb29sOworICAgIGlmIChkcmFpbk1vZGUgPT0gTk9fRFJBSU4pIHsKKyAgICAgICAgQUxPR1coImRyYWluIHdpdGggTk9fRFJBSU46IG5vLW9wIik7CisgICAgICAgIHJldHVybiBDMl9PSzsKKyAgICB9CisgICAgaWYgKGRyYWluTW9kZSA9PSBEUkFJTl9DSEFJTikgeworICAgICAgICBBTE9HVygiRFJBSU5fQ0hBSU4gbm90IHN1cHBvcnRlZCIpOworICAgICAgICByZXR1cm4gQzJfT01JVFRFRDsKKyAgICB9CisKKyAgICByZXR1cm4gQzJfT0s7Cit9CisKK3N0YXRpYyB2b2lkIGZpbGxFbXB0eVdvcmsoY29uc3Qgc3RkOjp1bmlxdWVfcHRyPEMyV29yaz4gJndvcmspIHsKKyAgICB3b3JrLT53b3JrbGV0cy5mcm9udCgpLT5vdXRwdXQuZmxhZ3MgPSB3b3JrLT5pbnB1dC5mbGFnczsKKyAgICB3b3JrLT53b3JrbGV0cy5mcm9udCgpLT5vdXRwdXQuYnVmZmVycy5jbGVhcigpOworICAgIHdvcmstPndvcmtsZXRzLmZyb250KCktPm91dHB1dC5vcmRpbmFsID0gd29yay0+aW5wdXQub3JkaW5hbDsKKyAgICB3b3JrLT53b3JrbGV0c1Byb2Nlc3NlZCA9IDF1OworfQorCitzdGF0aWMgdWludDE2X3QgUmVhZExFMTYoY29uc3QgdWludDhfdCAqZGF0YSwgc2l6ZV90IGRhdGFfc2l6ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCByZWFkX29mZnNldCkgeworICAgIGlmIChyZWFkX29mZnNldCArIDEgPiBkYXRhX3NpemUpCisgICAgICAgIHJldHVybiAwOworICAgIHVpbnQxNl90IHZhbDsKKyAgICB2YWwgPSBkYXRhW3JlYWRfb2Zmc2V0XTsKKyAgICB2YWwgfD0gZGF0YVtyZWFkX29mZnNldCArIDFdIDw8IDg7CisgICAgcmV0dXJuIHZhbDsKK30KKworc3RhdGljIGNvbnN0IGludCBrUmF0ZSA9IDQ4MDAwOworCisvLyBPcHVzIHVzZXMgVm9yYmlzIGNoYW5uZWwgbWFwcGluZywgYW5kIFZvcmJpcyBjaGFubmVsIG1hcHBpbmcgc3BlY2lmaWVzCisvLyBtYXBwaW5ncyBmb3IgdXAgdG8gOCBjaGFubmVscy4gVGhpcyBpbmZvcm1hdGlvbiBpcyBwYXJ0IG9mIHRoZSBWb3JiaXMgSQorLy8gU3BlY2lmaWNhdGlvbjoKKy8vIGh0dHA6Ly93d3cueGlwaC5vcmcvdm9yYmlzL2RvYy9Wb3JiaXNfSV9zcGVjLmh0bWwKK3N0YXRpYyBjb25zdCBpbnQga01heENoYW5uZWxzID0gODsKKworLy8gTWF4aW11bSBwYWNrZXQgc2l6ZSB1c2VkIGluIFhpcGgncyBvcHVzZGVjLgorc3RhdGljIGNvbnN0IGludCBrTWF4T3B1c091dHB1dFBhY2tldFNpemVTYW1wbGVzID0gOTYwICogNjsKKworLy8gRGVmYXVsdCBhdWRpbyBvdXRwdXQgY2hhbm5lbCBsYXlvdXQuIFVzZWQgdG8gaW5pdGlhbGl6ZSB8c3RyZWFtX21hcHwgaW4KKy8vIE9wdXNIZWFkZXIsIGFuZCBwYXNzZWQgdG8gb3B1c19tdWx0aXN0cmVhbV9kZWNvZGVyX2NyZWF0ZSgpIHdoZW4gdGhlIGhlYWRlcgorLy8gZG9lcyBub3QgY29udGFpbiBtYXBwaW5nIGluZm9ybWF0aW9uLiBUaGUgdmFsdWVzIGFyZSB2YWxpZCBvbmx5IGZvciBtb25vIGFuZAorLy8gc3RlcmVvIG91dHB1dDogT3B1cyBzdHJlYW1zIHdpdGggbW9yZSB0aGFuIDIgY2hhbm5lbHMgcmVxdWlyZSBhIHN0cmVhbSBtYXAuCitzdGF0aWMgY29uc3QgaW50IGtNYXhDaGFubmVsc1dpdGhEZWZhdWx0TGF5b3V0ID0gMjsKK3N0YXRpYyBjb25zdCB1aW50OF90IGtEZWZhdWx0T3B1c0NoYW5uZWxMYXlvdXRba01heENoYW5uZWxzV2l0aERlZmF1bHRMYXlvdXRdID0geyAwLCAxIH07CisKKy8vIFBhcnNlcyBPcHVzIEhlYWRlci4gSGVhZGVyIHNwZWM6IGh0dHA6Ly93aWtpLnhpcGgub3JnL09nZ09wdXMjSURfSGVhZGVyCitzdGF0aWMgYm9vbCBQYXJzZU9wdXNIZWFkZXIoY29uc3QgdWludDhfdCAqZGF0YSwgc2l6ZV90IGRhdGFfc2l6ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBPcHVzSGVhZGVyKiBoZWFkZXIpIHsKKyAgICAvLyBTaXplIG9mIHRoZSBPcHVzIGhlYWRlciBleGNsdWRpbmcgb3B0aW9uYWwgbWFwcGluZyBpbmZvcm1hdGlvbi4KKyAgICBjb25zdCBzaXplX3Qga09wdXNIZWFkZXJTaXplID0gMTk7CisKKyAgICAvLyBPZmZzZXQgdG8gdGhlIGNoYW5uZWwgY291bnQgYnl0ZSBpbiB0aGUgT3B1cyBoZWFkZXIuCisgICAgY29uc3Qgc2l6ZV90IGtPcHVzSGVhZGVyQ2hhbm5lbHNPZmZzZXQgPSA5OworCisgICAgLy8gT2Zmc2V0IHRvIHRoZSBwcmUtc2tpcCB2YWx1ZSBpbiB0aGUgT3B1cyBoZWFkZXIuCisgICAgY29uc3Qgc2l6ZV90IGtPcHVzSGVhZGVyU2tpcFNhbXBsZXNPZmZzZXQgPSAxMDsKKworICAgIC8vIE9mZnNldCB0byB0aGUgZ2FpbiB2YWx1ZSBpbiB0aGUgT3B1cyBoZWFkZXIuCisgICAgY29uc3Qgc2l6ZV90IGtPcHVzSGVhZGVyR2Fpbk9mZnNldCA9IDE2OworCisgICAgLy8gT2Zmc2V0IHRvIHRoZSBjaGFubmVsIG1hcHBpbmcgYnl0ZSBpbiB0aGUgT3B1cyBoZWFkZXIuCisgICAgY29uc3Qgc2l6ZV90IGtPcHVzSGVhZGVyQ2hhbm5lbE1hcHBpbmdPZmZzZXQgPSAxODsKKworICAgIC8vIE9wdXMgSGVhZGVyIGNvbnRhaW5zIGEgc3RyZWFtIG1hcC4gVGhlIG1hcHBpbmcgdmFsdWVzIGFyZSBpbiB0aGUgaGVhZGVyCisgICAgLy8gYmV5b25kIHRoZSBhbHdheXMgcHJlc2VudCB8a09wdXNIZWFkZXJTaXplfCBieXRlcyBvZiBkYXRhLiBUaGUgbWFwcGluZworICAgIC8vIGRhdGEgY29udGFpbnMgc3RyZWFtIGNvdW50LCBjb3VwbGluZyBpbmZvcm1hdGlvbiwgYW5kIHBlciBjaGFubmVsIG1hcHBpbmcKKyAgICAvLyB2YWx1ZXM6CisgICAgLy8gICAtIEJ5dGUgMDogTnVtYmVyIG9mIHN0cmVhbXMuCisgICAgLy8gICAtIEJ5dGUgMTogTnVtYmVyIGNvdXBsZWQuCisgICAgLy8gICAtIEJ5dGUgMjogU3RhcnRpbmcgYXQgYnl0ZSAyIGFyZSB8aGVhZGVyLT5jaGFubmVsc3wgdWludDggbWFwcGluZworICAgIC8vICAgICAgICAgICAgIHZhbHVlcy4KKyAgICBjb25zdCBzaXplX3Qga09wdXNIZWFkZXJOdW1TdHJlYW1zT2Zmc2V0ID0ga09wdXNIZWFkZXJTaXplOworICAgIGNvbnN0IHNpemVfdCBrT3B1c0hlYWRlck51bUNvdXBsZWRPZmZzZXQgPSBrT3B1c0hlYWRlck51bVN0cmVhbXNPZmZzZXQgKyAxOworICAgIGNvbnN0IHNpemVfdCBrT3B1c0hlYWRlclN0cmVhbU1hcE9mZnNldCA9IGtPcHVzSGVhZGVyTnVtU3RyZWFtc09mZnNldCArIDI7CisKKyAgICBpZiAoZGF0YV9zaXplIDwga09wdXNIZWFkZXJTaXplKSB7CisgICAgICAgIEFMT0dFKCJIZWFkZXIgc2l6ZSBpcyB0b28gc21hbGwuIik7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgICAgaGVhZGVyLT5jaGFubmVscyA9ICooZGF0YSArIGtPcHVzSGVhZGVyQ2hhbm5lbHNPZmZzZXQpOworICAgIGlmIChoZWFkZXItPmNoYW5uZWxzIDw9IDAgfHwgaGVhZGVyLT5jaGFubmVscyA+IGtNYXhDaGFubmVscykgeworICAgICAgICBBTE9HRSgiSW52YWxpZCBIZWFkZXIsIHdyb25nIGNoYW5uZWwgY291bnQ6ICVkIiwgaGVhZGVyLT5jaGFubmVscyk7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBoZWFkZXItPnNraXBfc2FtcGxlcyA9IFJlYWRMRTE2KGRhdGEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhX3NpemUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrT3B1c0hlYWRlclNraXBTYW1wbGVzT2Zmc2V0KTsKKworICAgIGhlYWRlci0+Z2Fpbl9kYiA9IHN0YXRpY19jYXN0PGludDE2X3Q+KFJlYWRMRTE2KGRhdGEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YV9zaXplLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtPcHVzSGVhZGVyR2Fpbk9mZnNldCkpOworCisgICAgaGVhZGVyLT5jaGFubmVsX21hcHBpbmcgPSAqKGRhdGEgKyBrT3B1c0hlYWRlckNoYW5uZWxNYXBwaW5nT2Zmc2V0KTsKKyAgICBpZiAoIWhlYWRlci0+Y2hhbm5lbF9tYXBwaW5nKSB7CisgICAgICAgIGlmIChoZWFkZXItPmNoYW5uZWxzID4ga01heENoYW5uZWxzV2l0aERlZmF1bHRMYXlvdXQpIHsKKyAgICAgICAgICAgIEFMT0dFKCJJbnZhbGlkIEhlYWRlciwgbWlzc2luZyBzdHJlYW0gbWFwLiIpOworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgICAgIGhlYWRlci0+bnVtX3N0cmVhbXMgPSAxOworICAgICAgICBoZWFkZXItPm51bV9jb3VwbGVkID0gaGVhZGVyLT5jaGFubmVscyA+IDE7CisgICAgICAgIGhlYWRlci0+c3RyZWFtX21hcFswXSA9IDA7CisgICAgICAgIGhlYWRlci0+c3RyZWFtX21hcFsxXSA9IDE7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyAgICBpZiAoZGF0YV9zaXplIDwga09wdXNIZWFkZXJTdHJlYW1NYXBPZmZzZXQgKyBoZWFkZXItPmNoYW5uZWxzKSB7CisgICAgICAgIEFMT0dFKCJJbnZhbGlkIHN0cmVhbSBtYXA7IGluc3VmZmljaWVudCBkYXRhIGZvciBjdXJyZW50IGNoYW5uZWwgIgorICAgICAgICAgICAgICAiY291bnQ6ICVkIiwgaGVhZGVyLT5jaGFubmVscyk7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgICAgaGVhZGVyLT5udW1fc3RyZWFtcyA9ICooZGF0YSArIGtPcHVzSGVhZGVyTnVtU3RyZWFtc09mZnNldCk7CisgICAgaGVhZGVyLT5udW1fY291cGxlZCA9ICooZGF0YSArIGtPcHVzSGVhZGVyTnVtQ291cGxlZE9mZnNldCk7CisgICAgaWYgKGhlYWRlci0+bnVtX3N0cmVhbXMgKyBoZWFkZXItPm51bV9jb3VwbGVkICE9IGhlYWRlci0+Y2hhbm5lbHMpIHsKKyAgICAgICAgQUxPR0UoIkluY29uc2lzdGVudCBjaGFubmVsIG1hcHBpbmcuIik7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBoZWFkZXItPmNoYW5uZWxzOyArK2kpCisgICAgICAgIGhlYWRlci0+c3RyZWFtX21hcFtpXSA9ICooZGF0YSArIGtPcHVzSGVhZGVyU3RyZWFtTWFwT2Zmc2V0ICsgaSk7CisgICAgcmV0dXJuIHRydWU7Cit9CisKKy8vIENvbnZlcnQgbmFub3NlY29uZHMgdG8gbnVtYmVyIG9mIHNhbXBsZXMuCitzdGF0aWMgdWludDY0X3QgbnNfdG9fc2FtcGxlcyh1aW50NjRfdCBucywgaW50IHJhdGUpIHsKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8ZG91YmxlPihucykgKiByYXRlIC8gMTAwMDAwMDAwMDsKK30KKwordm9pZCBDMlNvZnRPcHVzRGVjOjpwcm9jZXNzKAorICAgICAgICBjb25zdCBzdGQ6OnVuaXF1ZV9wdHI8QzJXb3JrPiAmd29yaywKKyAgICAgICAgY29uc3Qgc3RkOjpzaGFyZWRfcHRyPEMyQmxvY2tQb29sPiAmcG9vbCkgeworICAgIC8vIEluaXRpYWxpemUgb3V0cHV0IHdvcmsKKyAgICB3b3JrLT5yZXN1bHQgPSBDMl9PSzsKKyAgICB3b3JrLT53b3JrbGV0c1Byb2Nlc3NlZCA9IDF1OworICAgIHdvcmstPndvcmtsZXRzLmZyb250KCktPm91dHB1dC5jb25maWdVcGRhdGUuY2xlYXIoKTsKKyAgICB3b3JrLT53b3JrbGV0cy5mcm9udCgpLT5vdXRwdXQuZmxhZ3MgPSB3b3JrLT5pbnB1dC5mbGFnczsKKworICAgIGlmIChtU2lnbmFsbGVkRXJyb3IgfHwgbVNpZ25hbGxlZE91dHB1dEVvcykgeworICAgICAgICB3b3JrLT5yZXN1bHQgPSBDMl9CQURfVkFMVUU7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBib29sIGVvcyA9ICgod29yay0+aW5wdXQuZmxhZ3MgJiBDMkZyYW1lRGF0YTo6RkxBR19FTkRfT0ZfU1RSRUFNKSAhPSAwKTsKKyAgICBzaXplX3QgaW5PZmZzZXQgPSAwdTsKKyAgICBzaXplX3QgaW5TaXplID0gMHU7CisgICAgQzJSZWFkVmlldyByVmlldyA9IG1EdW1teVJlYWRWaWV3OworICAgIGlmICghd29yay0+aW5wdXQuYnVmZmVycy5lbXB0eSgpKSB7CisgICAgICAgIHJWaWV3ID0gd29yay0+aW5wdXQuYnVmZmVyc1swXS0+ZGF0YSgpLmxpbmVhckJsb2NrcygpLmZyb250KCkubWFwKCkuZ2V0KCk7CisgICAgICAgIGluU2l6ZSA9IHJWaWV3LmNhcGFjaXR5KCk7CisgICAgICAgIGlmIChpblNpemUgJiYgclZpZXcuZXJyb3IoKSkgeworICAgICAgICAgICAgQUxPR0UoInJlYWQgdmlldyBtYXAgZmFpbGVkICVkIiwgclZpZXcuZXJyb3IoKSk7CisgICAgICAgICAgICB3b3JrLT5yZXN1bHQgPSBDMl9DT1JSVVBURUQ7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICB9CisgICAgaWYgKGluU2l6ZSA9PSAwKSB7CisgICAgICAgIGZpbGxFbXB0eVdvcmsod29yayk7CisgICAgICAgIGlmIChlb3MpIHsKKyAgICAgICAgICAgIG1TaWduYWxsZWRPdXRwdXRFb3MgPSB0cnVlOworICAgICAgICAgICAgQUxPR1YoInNpZ25hbGxlZCBFT1MiKTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgQUxPR1YoImluIGJ1ZmZlciBhdHRyLiBzaXplICV6dSB0aW1lc3RhbXAgJWQgZnJhbWVpbmRleCAlZCIsIGluU2l6ZSwKKyAgICAgICAgICAoaW50KXdvcmstPmlucHV0Lm9yZGluYWwudGltZXN0YW1wLnBlZWt1KCksIChpbnQpd29yay0+aW5wdXQub3JkaW5hbC5mcmFtZUluZGV4LnBlZWt1KCkpOworICAgIGNvbnN0IHVpbnQ4X3QgKmRhdGEgPSByVmlldy5kYXRhKCkgKyBpbk9mZnNldDsKKyAgICBpZiAobUlucHV0QnVmZmVyQ291bnQgPCAzKSB7CisgICAgICAgIGlmIChtSW5wdXRCdWZmZXJDb3VudCA9PSAwKSB7CisgICAgICAgICAgICBpZiAoIVBhcnNlT3B1c0hlYWRlcihkYXRhLCBpblNpemUsICZtSGVhZGVyKSkgeworICAgICAgICAgICAgICAgIEFMT0dFKCJFbmNvdW50ZXJlZCBlcnJvciB3aGlsZSBQYXJzaW5nIE9wdXMgSGVhZGVyLiIpOworICAgICAgICAgICAgICAgIG1TaWduYWxsZWRFcnJvciA9IHRydWU7CisgICAgICAgICAgICAgICAgd29yay0+cmVzdWx0ID0gQzJfQ09SUlVQVEVEOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHVpbnQ4X3QgY2hhbm5lbF9tYXBwaW5nW2tNYXhDaGFubmVsc10gPSB7MH07CisgICAgICAgICAgICBpZiAobUhlYWRlci5jaGFubmVscyA8PSBrTWF4Q2hhbm5lbHNXaXRoRGVmYXVsdExheW91dCkgeworICAgICAgICAgICAgICAgIG1lbWNweSgmY2hhbm5lbF9tYXBwaW5nLAorICAgICAgICAgICAgICAgICAgICAgICBrRGVmYXVsdE9wdXNDaGFubmVsTGF5b3V0LAorICAgICAgICAgICAgICAgICAgICAgICBrTWF4Q2hhbm5lbHNXaXRoRGVmYXVsdExheW91dCk7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIG1lbWNweSgmY2hhbm5lbF9tYXBwaW5nLAorICAgICAgICAgICAgICAgICAgICAgICBtSGVhZGVyLnN0cmVhbV9tYXAsCisgICAgICAgICAgICAgICAgICAgICAgIG1IZWFkZXIuY2hhbm5lbHMpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaW50IHN0YXR1cyA9IE9QVVNfSU5WQUxJRF9TVEFURTsKKyAgICAgICAgICAgIG1EZWNvZGVyID0gb3B1c19tdWx0aXN0cmVhbV9kZWNvZGVyX2NyZWF0ZShrUmF0ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtSGVhZGVyLmNoYW5uZWxzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1IZWFkZXIubnVtX3N0cmVhbXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbUhlYWRlci5udW1fY291cGxlZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFubmVsX21hcHBpbmcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnN0YXR1cyk7CisgICAgICAgICAgICBpZiAoIW1EZWNvZGVyIHx8IHN0YXR1cyAhPSBPUFVTX09LKSB7CisgICAgICAgICAgICAgICAgQUxPR0UoIm9wdXNfbXVsdGlzdHJlYW1fZGVjb2Rlcl9jcmVhdGUgZmFpbGVkIHN0YXR1cyA9ICVzIiwKKyAgICAgICAgICAgICAgICAgICAgICBvcHVzX3N0cmVycm9yKHN0YXR1cykpOworICAgICAgICAgICAgICAgIG1TaWduYWxsZWRFcnJvciA9IHRydWU7CisgICAgICAgICAgICAgICAgd29yay0+cmVzdWx0ID0gQzJfQ09SUlVQVEVEOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHN0YXR1cyA9IG9wdXNfbXVsdGlzdHJlYW1fZGVjb2Rlcl9jdGwobURlY29kZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9QVVNfU0VUX0dBSU4obUhlYWRlci5nYWluX2RiKSk7CisgICAgICAgICAgICBpZiAoc3RhdHVzICE9IE9QVVNfT0spIHsKKyAgICAgICAgICAgICAgICBBTE9HRSgiRmFpbGVkIHRvIHNldCBPUFVTIGhlYWRlciBnYWluOyBzdGF0dXMgPSAlcyIsCisgICAgICAgICAgICAgICAgICAgICAgb3B1c19zdHJlcnJvcihzdGF0dXMpKTsKKyAgICAgICAgICAgICAgICBtU2lnbmFsbGVkRXJyb3IgPSB0cnVlOworICAgICAgICAgICAgICAgIHdvcmstPnJlc3VsdCA9IEMyX0NPUlJVUFRFRDsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBpZiAoaW5TaXplIDwgOCkgeworICAgICAgICAgICAgICAgIEFMT0dFKCJJbnB1dCBzYW1wbGUgc2l6ZSBpcyB0b28gc21hbGwuIik7CisgICAgICAgICAgICAgICAgbVNpZ25hbGxlZEVycm9yID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICB3b3JrLT5yZXN1bHQgPSBDMl9DT1JSVVBURUQ7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaW50NjRfdCBzYW1wbGVzID0gbnNfdG9fc2FtcGxlcyggKihyZWludGVycHJldF9jYXN0PGludDY0X3QqPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNvbnN0X2Nhc3Q8dWludDhfdCAqPiAoZGF0YSkpKSwga1JhdGUpOworICAgICAgICAgICAgaWYgKG1JbnB1dEJ1ZmZlckNvdW50ID09IDEpIHsKKyAgICAgICAgICAgICAgICBtQ29kZWNEZWxheSA9IHNhbXBsZXM7CisgICAgICAgICAgICAgICAgbVNhbXBsZXNUb0Rpc2NhcmQgPSBtQ29kZWNEZWxheTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgIG1TZWVrUHJlUm9sbCA9IHNhbXBsZXM7CisKKyAgICAgICAgICAgICAgICBBTE9HSSgiQ29uZmlndXJpbmcgZGVjb2RlcjogJWQgSHosICVkIGNoYW5uZWxzIiwKKyAgICAgICAgICAgICAgICAgICAgICAga1JhdGUsIG1IZWFkZXIuY2hhbm5lbHMpOworICAgICAgICAgICAgICAgIEMyU3RyZWFtU2FtcGxlUmF0ZUluZm86Om91dHB1dCBzYW1wbGVSYXRlSW5mbygwdSwga1JhdGUpOworICAgICAgICAgICAgICAgIEMyU3RyZWFtQ2hhbm5lbENvdW50SW5mbzo6b3V0cHV0IGNoYW5uZWxDb3VudEluZm8oMHUsIG1IZWFkZXIuY2hhbm5lbHMpOworICAgICAgICAgICAgICAgIHN0ZDo6dmVjdG9yPHN0ZDo6dW5pcXVlX3B0cjxDMlNldHRpbmdSZXN1bHQ+PiBmYWlsdXJlczsKKyAgICAgICAgICAgICAgICBjMl9zdGF0dXNfdCBlcnIgPSBtSW50Zi0+Y29uZmlnKAorICAgICAgICAgICAgICAgICAgICAgICAgeyAmc2FtcGxlUmF0ZUluZm8sICZjaGFubmVsQ291bnRJbmZvIH0sCisgICAgICAgICAgICAgICAgICAgICAgICBDMl9NQVlfQkxPQ0ssCisgICAgICAgICAgICAgICAgICAgICAgICAmZmFpbHVyZXMpOworICAgICAgICAgICAgICAgIGlmIChlcnIgPT0gT0spIHsKKyAgICAgICAgICAgICAgICAgICAgd29yay0+d29ya2xldHMuZnJvbnQoKS0+b3V0cHV0LmNvbmZpZ1VwZGF0ZS5wdXNoX2JhY2soQzJQYXJhbTo6Q29weShzYW1wbGVSYXRlSW5mbykpOworICAgICAgICAgICAgICAgICAgICB3b3JrLT53b3JrbGV0cy5mcm9udCgpLT5vdXRwdXQuY29uZmlnVXBkYXRlLnB1c2hfYmFjayhDMlBhcmFtOjpDb3B5KGNoYW5uZWxDb3VudEluZm8pKTsKKyAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICBBTE9HRSgiQ29uZmlnIFVwZGF0ZSBmYWlsZWQiKTsKKyAgICAgICAgICAgICAgICAgICAgbVNpZ25hbGxlZEVycm9yID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAgd29yay0+cmVzdWx0ID0gQzJfQ09SUlVQVEVEOworICAgICAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgKyttSW5wdXRCdWZmZXJDb3VudDsKKyAgICAgICAgZmlsbEVtcHR5V29yayh3b3JrKTsKKyAgICAgICAgaWYgKGVvcykgeworICAgICAgICAgICAgbVNpZ25hbGxlZE91dHB1dEVvcyA9IHRydWU7CisgICAgICAgICAgICBBTE9HVigic2lnbmFsbGVkIEVPUyIpOworICAgICAgICB9CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICAvLyBJZ25vcmUgQ1NEIHJlLXN1Ym1pc3Npb25zLgorICAgIGlmICgod29yay0+aW5wdXQuZmxhZ3MgJiBDMkZyYW1lRGF0YTo6RkxBR19DT0RFQ19DT05GSUcpKSB7CisgICAgICAgIGZpbGxFbXB0eVdvcmsod29yayk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICAvLyBXaGVuIHNlZWtpbmcgdG8gemVybywgfG1Db2RlY0RlbGF5fCBzYW1wbGVzIGhhcyB0byBiZSBkaXNjYXJkZWQKKyAgICAvLyBpbnN0ZWFkIG9mIHxtU2Vla1ByZVJvbGx8IHNhbXBsZXMgKGFzIHdlIHdvdWxkIHdoZW4gc2Vla2luZyB0byBhbnkKKyAgICAvLyBvdGhlciB0aW1lc3RhbXApLgorICAgIGlmICh3b3JrLT5pbnB1dC5vcmRpbmFsLnRpbWVzdGFtcC5wZWVrdSgpID09IDApIG1TYW1wbGVzVG9EaXNjYXJkID0gbUNvZGVjRGVsYXk7CisKKyAgICBzdGQ6OnNoYXJlZF9wdHI8QzJMaW5lYXJCbG9jaz4gYmxvY2s7CisgICAgQzJNZW1vcnlVc2FnZSB1c2FnZSA9IHsgQzJNZW1vcnlVc2FnZTo6Q1BVX1JFQUQsIEMyTWVtb3J5VXNhZ2U6OkNQVV9XUklURSB9OworICAgIGMyX3N0YXR1c190IGVyciA9IHBvb2wtPmZldGNoTGluZWFyQmxvY2soCisgICAgICAgICAgICAgICAgICAgICAgICAgIGtNYXhOdW1TYW1wbGVzUGVyQnVmZmVyICoga01heENoYW5uZWxzICogc2l6ZW9mKGludDE2X3QpLAorICAgICAgICAgICAgICAgICAgICAgICAgICB1c2FnZSwgJmJsb2NrKTsKKyAgICBpZiAoZXJyICE9IEMyX09LKSB7CisgICAgICAgIEFMT0dFKCJmZXRjaExpbmVhckJsb2NrIGZvciBPdXRwdXQgZmFpbGVkIHdpdGggc3RhdHVzICVkIiwgZXJyKTsKKyAgICAgICAgd29yay0+cmVzdWx0ID0gQzJfTk9fTUVNT1JZOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIEMyV3JpdGVWaWV3IHdWaWV3ID0gYmxvY2stPm1hcCgpLmdldCgpOworICAgIGlmICh3Vmlldy5lcnJvcigpKSB7CisgICAgICAgIEFMT0dFKCJ3cml0ZSB2aWV3IG1hcCBmYWlsZWQgJWQiLCB3Vmlldy5lcnJvcigpKTsKKyAgICAgICAgd29yay0+cmVzdWx0ID0gQzJfQ09SUlVQVEVEOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaW50IG51bVNhbXBsZXMgPSBvcHVzX211bHRpc3RyZWFtX2RlY29kZShtRGVjb2RlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpblNpemUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWludGVycHJldF9jYXN0PGludDE2X3QgKj4gKHdWaWV3LmRhdGEoKSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrTWF4T3B1c091dHB1dFBhY2tldFNpemVTYW1wbGVzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCk7CisgICAgaWYgKG51bVNhbXBsZXMgPCAwKSB7CisgICAgICAgIEFMT0dFKCJvcHVzX211bHRpc3RyZWFtX2RlY29kZSByZXR1cm5lZCBudW1TYW1wbGVzICVkIiwgbnVtU2FtcGxlcyk7CisgICAgICAgIG51bVNhbXBsZXMgPSAwOworICAgICAgICBtU2lnbmFsbGVkRXJyb3IgPSB0cnVlOworICAgICAgICB3b3JrLT5yZXN1bHQgPSBDMl9DT1JSVVBURUQ7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpbnQgb3V0T2Zmc2V0ID0gMDsKKyAgICBpZiAobVNhbXBsZXNUb0Rpc2NhcmQgPiAwKSB7CisgICAgICAgIGlmIChtU2FtcGxlc1RvRGlzY2FyZCA+IG51bVNhbXBsZXMpIHsKKyAgICAgICAgICAgIG1TYW1wbGVzVG9EaXNjYXJkIC09IG51bVNhbXBsZXM7CisgICAgICAgICAgICBudW1TYW1wbGVzID0gMDsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIG51bVNhbXBsZXMgLT0gbVNhbXBsZXNUb0Rpc2NhcmQ7CisgICAgICAgICAgICBvdXRPZmZzZXQgPSBtU2FtcGxlc1RvRGlzY2FyZCAqIHNpemVvZihpbnQxNl90KSAqIG1IZWFkZXIuY2hhbm5lbHM7CisgICAgICAgICAgICBtU2FtcGxlc1RvRGlzY2FyZCA9IDA7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBpZiAobnVtU2FtcGxlcykgeworICAgICAgICBpbnQgb3V0U2l6ZSA9IG51bVNhbXBsZXMgKiBzaXplb2YoaW50MTZfdCkgKiBtSGVhZGVyLmNoYW5uZWxzOworICAgICAgICBBTE9HVigib3V0IGJ1ZmZlciBhdHRyLiBvZmZzZXQgJWQgc2l6ZSAlZCAiLCBvdXRPZmZzZXQsIG91dFNpemUpOworCisgICAgICAgIHdvcmstPndvcmtsZXRzLmZyb250KCktPm91dHB1dC5mbGFncyA9IHdvcmstPmlucHV0LmZsYWdzOworICAgICAgICB3b3JrLT53b3JrbGV0cy5mcm9udCgpLT5vdXRwdXQuYnVmZmVycy5jbGVhcigpOworICAgICAgICB3b3JrLT53b3JrbGV0cy5mcm9udCgpLT5vdXRwdXQuYnVmZmVycy5wdXNoX2JhY2soY3JlYXRlTGluZWFyQnVmZmVyKGJsb2NrLCBvdXRPZmZzZXQsIG91dFNpemUpKTsKKyAgICAgICAgd29yay0+d29ya2xldHMuZnJvbnQoKS0+b3V0cHV0Lm9yZGluYWwgPSB3b3JrLT5pbnB1dC5vcmRpbmFsOworICAgICAgICB3b3JrLT53b3JrbGV0c1Byb2Nlc3NlZCA9IDF1OworICAgIH0gZWxzZSB7CisgICAgICAgIGZpbGxFbXB0eVdvcmsod29yayk7CisgICAgICAgIGJsb2NrLnJlc2V0KCk7CisgICAgfQorICAgIGlmIChlb3MpIHsKKyAgICAgICAgbVNpZ25hbGxlZE91dHB1dEVvcyA9IHRydWU7CisgICAgICAgIEFMT0dWKCJzaWduYWxsZWQgRU9TIik7CisgICAgfQorfQorCitjbGFzcyBDMlNvZnRPcHVzRGVjRmFjdG9yeSA6IHB1YmxpYyBDMkNvbXBvbmVudEZhY3RvcnkgeworcHVibGljOgorICAgIEMyU29mdE9wdXNEZWNGYWN0b3J5KCkgOiBtSGVscGVyKHN0ZDo6c3RhdGljX3BvaW50ZXJfY2FzdDxDMlJlZmxlY3RvckhlbHBlcj4oCisgICAgICAgICAgICBHZXRDb2RlYzJQbGF0Zm9ybUNvbXBvbmVudFN0b3JlKCktPmdldFBhcmFtUmVmbGVjdG9yKCkpKSB7CisgICAgfQorCisgICAgdmlydHVhbCBjMl9zdGF0dXNfdCBjcmVhdGVDb21wb25lbnQoCisgICAgICAgICAgICBjMl9ub2RlX2lkX3QgaWQsCisgICAgICAgICAgICBzdGQ6OnNoYXJlZF9wdHI8QzJDb21wb25lbnQ+KiBjb25zdCBjb21wb25lbnQsCisgICAgICAgICAgICBzdGQ6OmZ1bmN0aW9uPHZvaWQoQzJDb21wb25lbnQqKT4gZGVsZXRlcikgb3ZlcnJpZGUgeworICAgICAgICAqY29tcG9uZW50ID0gc3RkOjpzaGFyZWRfcHRyPEMyQ29tcG9uZW50PigKKyAgICAgICAgICAgICAgICBuZXcgQzJTb2Z0T3B1c0RlYyhDT01QT05FTlRfTkFNRSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGQ6Om1ha2Vfc2hhcmVkPEMyU29mdE9wdXNEZWM6OkludGZJbXBsPihtSGVscGVyKSksCisgICAgICAgICAgICAgICAgZGVsZXRlcik7CisgICAgICAgIHJldHVybiBDMl9PSzsKKyAgICB9CisKKyAgICB2aXJ0dWFsIGMyX3N0YXR1c190IGNyZWF0ZUludGVyZmFjZSgKKyAgICAgICAgICAgIGMyX25vZGVfaWRfdCBpZCwKKyAgICAgICAgICAgIHN0ZDo6c2hhcmVkX3B0cjxDMkNvbXBvbmVudEludGVyZmFjZT4qIGNvbnN0IGludGVyZmFjZSwKKyAgICAgICAgICAgIHN0ZDo6ZnVuY3Rpb248dm9pZChDMkNvbXBvbmVudEludGVyZmFjZSopPiBkZWxldGVyKSBvdmVycmlkZSB7CisgICAgICAgICppbnRlcmZhY2UgPSBzdGQ6OnNoYXJlZF9wdHI8QzJDb21wb25lbnRJbnRlcmZhY2U+KAorICAgICAgICAgICAgICAgIG5ldyBTaW1wbGVJbnRlcmZhY2U8QzJTb2Z0T3B1c0RlYzo6SW50ZkltcGw+KAorICAgICAgICAgICAgICAgICAgICAgICAgQ09NUE9ORU5UX05BTUUsIGlkLCBzdGQ6Om1ha2Vfc2hhcmVkPEMyU29mdE9wdXNEZWM6OkludGZJbXBsPihtSGVscGVyKSksCisgICAgICAgICAgICAgICAgZGVsZXRlcik7CisgICAgICAgIHJldHVybiBDMl9PSzsKKyAgICB9CisKKyAgICB2aXJ0dWFsIH5DMlNvZnRPcHVzRGVjRmFjdG9yeSgpIG92ZXJyaWRlID0gZGVmYXVsdDsKKworcHJpdmF0ZToKKyAgICBzdGQ6OnNoYXJlZF9wdHI8QzJSZWZsZWN0b3JIZWxwZXI+IG1IZWxwZXI7Cit9OworCit9ICAvLyBuYW1lc3BhY2UgYW5kcm9pZAorCitleHRlcm4gIkMiIDo6QzJDb21wb25lbnRGYWN0b3J5KiBDcmVhdGVDb2RlYzJGYWN0b3J5KCkgeworICAgIEFMT0dWKCJpbiAlcyIsIF9fZnVuY19fKTsKKyAgICByZXR1cm4gbmV3IDo6YW5kcm9pZDo6QzJTb2Z0T3B1c0RlY0ZhY3RvcnkoKTsKK30KKworZXh0ZXJuICJDIiB2b2lkIERlc3Ryb3lDb2RlYzJGYWN0b3J5KDo6QzJDb21wb25lbnRGYWN0b3J5KiBmYWN0b3J5KSB7CisgICAgQUxPR1YoImluICVzIiwgX19mdW5jX18pOworICAgIGRlbGV0ZSBmYWN0b3J5OworfQpkaWZmIC0tZ2l0IGEvbWVkaWEvY29kZWMyL2NvbXBvbmVudHMvb3B1cy9DMlNvZnRPcHVzRGVjLmggYi9tZWRpYS9jb2RlYzIvY29tcG9uZW50cy9vcHVzL0MyU29mdE9wdXNEZWMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45MmI3NDI2Ci0tLSAvZGV2L251bGwKKysrIGIvbWVkaWEvY29kZWMyL2NvbXBvbmVudHMvb3B1cy9DMlNvZnRPcHVzRGVjLmgKQEAgLTAsMCArMSw3OSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxOCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCisKKyNpZm5kZWYgQU5EUk9JRF9DMl9TT0ZUX09QVVNfREVDX0hfCisjZGVmaW5lIEFORFJPSURfQzJfU09GVF9PUFVTX0RFQ19IXworCisjaW5jbHVkZSA8U2ltcGxlQzJDb21wb25lbnQuaD4KKworCitzdHJ1Y3QgT3B1c01TRGVjb2RlcjsKKworbmFtZXNwYWNlIGFuZHJvaWQgeworCitzdHJ1Y3QgT3B1c0hlYWRlciB7CisgIGludCBjaGFubmVsczsKKyAgaW50IHNraXBfc2FtcGxlczsKKyAgaW50IGNoYW5uZWxfbWFwcGluZzsKKyAgaW50IG51bV9zdHJlYW1zOworICBpbnQgbnVtX2NvdXBsZWQ7CisgIGludDE2X3QgZ2Fpbl9kYjsKKyAgdWludDhfdCBzdHJlYW1fbWFwWzhdOworfTsKKworc3RydWN0IEMyU29mdE9wdXNEZWMgOiBwdWJsaWMgU2ltcGxlQzJDb21wb25lbnQgeworICAgIGNsYXNzIEludGZJbXBsOworCisgICAgQzJTb2Z0T3B1c0RlYyhjb25zdCBjaGFyICpuYW1lLCBjMl9ub2RlX2lkX3QgaWQsCisgICAgICAgICAgICAgICBjb25zdCBzdGQ6OnNoYXJlZF9wdHI8SW50ZkltcGw+ICZpbnRmSW1wbCk7CisgICAgdmlydHVhbCB+QzJTb2Z0T3B1c0RlYygpOworCisgICAgLy8gRnJvbSBTaW1wbGVDMkNvbXBvbmVudAorICAgIGMyX3N0YXR1c190IG9uSW5pdCgpIG92ZXJyaWRlOworICAgIGMyX3N0YXR1c190IG9uU3RvcCgpIG92ZXJyaWRlOworICAgIHZvaWQgb25SZXNldCgpIG92ZXJyaWRlOworICAgIHZvaWQgb25SZWxlYXNlKCkgb3ZlcnJpZGU7CisgICAgYzJfc3RhdHVzX3Qgb25GbHVzaF9zbSgpIG92ZXJyaWRlOworICAgIHZvaWQgcHJvY2VzcygKKyAgICAgICAgICAgIGNvbnN0IHN0ZDo6dW5pcXVlX3B0cjxDMldvcms+ICZ3b3JrLAorICAgICAgICAgICAgY29uc3Qgc3RkOjpzaGFyZWRfcHRyPEMyQmxvY2tQb29sPiAmcG9vbCkgb3ZlcnJpZGU7CisgICAgYzJfc3RhdHVzX3QgZHJhaW4oCisgICAgICAgICAgICB1aW50MzJfdCBkcmFpbk1vZGUsCisgICAgICAgICAgICBjb25zdCBzdGQ6OnNoYXJlZF9wdHI8QzJCbG9ja1Bvb2w+ICZwb29sKSBvdmVycmlkZTsKK3ByaXZhdGU6CisgICAgZW51bSB7CisgICAgICAgIGtNYXhOdW1TYW1wbGVzUGVyQnVmZmVyID0gOTYwICogNgorICAgIH07CisKKyAgICBzdGQ6OnNoYXJlZF9wdHI8SW50ZkltcGw+IG1JbnRmOworICAgIE9wdXNNU0RlY29kZXIgKm1EZWNvZGVyOworICAgIE9wdXNIZWFkZXIgbUhlYWRlcjsKKworICAgIGludDY0X3QgbUNvZGVjRGVsYXk7CisgICAgaW50NjRfdCBtU2Vla1ByZVJvbGw7CisgICAgaW50NjRfdCBtU2FtcGxlc1RvRGlzY2FyZDsKKyAgICBzaXplX3QgbUlucHV0QnVmZmVyQ291bnQ7CisgICAgYm9vbCBtU2lnbmFsbGVkRXJyb3I7CisgICAgYm9vbCBtU2lnbmFsbGVkT3V0cHV0RW9zOworCisgICAgc3RhdHVzX3QgaW5pdERlY29kZXIoKTsKKworICAgIEMyX0RPX05PVF9DT1BZKEMyU29mdE9wdXNEZWMpOworfTsKKworfSAgLy8gbmFtZXNwYWNlIGFuZHJvaWQKKworI2VuZGlmICAvLyBBTkRST0lEX0MyX1NPRlRfT1BVU19ERUNfSF8KZGlmZiAtLWdpdCBhL21lZGlhL2NvZGVjMi9jb21wb25lbnRzL3Jhdy9BbmRyb2lkLmJwIGIvbWVkaWEvY29kZWMyL2NvbXBvbmVudHMvcmF3L0FuZHJvaWQuYnAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGM5NDRkYQotLS0gL2Rldi9udWxsCisrKyBiL21lZGlhL2NvZGVjMi9jb21wb25lbnRzL3Jhdy9BbmRyb2lkLmJwCkBAIC0wLDAgKzEsOSBAQAorY2NfbGlicmFyeV9zaGFyZWQgeworICAgIG5hbWU6ICJsaWJjb2RlYzJfc29mdF9yYXdkZWMiLAorICAgIGRlZmF1bHRzOiBbCisgICAgICAgICJsaWJjb2RlYzJfc29mdC1kZWZhdWx0cyIsCisgICAgICAgICJsaWJjb2RlYzJfc29mdF9zYW5pdGl6ZV9hbGwtZGVmYXVsdHMiLAorICAgIF0sCisKKyAgICBzcmNzOiBbIkMyU29mdFJhd0RlYy5jcHAiXSwKK30KZGlmZiAtLWdpdCBhL21lZGlhL2NvZGVjMi9jb21wb25lbnRzL3Jhdy9DMlNvZnRSYXdEZWMuY3BwIGIvbWVkaWEvY29kZWMyL2NvbXBvbmVudHMvcmF3L0MyU29mdFJhd0RlYy5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGQyYTY1MgotLS0gL2Rldi9udWxsCisrKyBiL21lZGlhL2NvZGVjMi9jb21wb25lbnRzL3Jhdy9DMlNvZnRSYXdEZWMuY3BwCkBAIC0wLDAgKzEsMjIwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE4IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KKworLy8jZGVmaW5lIExPR19OREVCVUcgMAorI2RlZmluZSBMT0dfVEFHICJDMlNvZnRSYXdEZWMiCisjaW5jbHVkZSA8bG9nL2xvZy5oPgorCisjaW5jbHVkZSA8bWVkaWEvc3RhZ2VmcmlnaHQvZm91bmRhdGlvbi9NZWRpYURlZnMuaD4KKworI2luY2x1ZGUgPEMyUGxhdGZvcm1TdXBwb3J0Lmg+CisjaW5jbHVkZSA8U2ltcGxlQzJJbnRlcmZhY2UuaD4KKworI2luY2x1ZGUgIkMyU29mdFJhd0RlYy5oIgorCituYW1lc3BhY2UgYW5kcm9pZCB7CisKK2NvbnN0ZXhwciBjaGFyIENPTVBPTkVOVF9OQU1FW10gPSAiYzIuYW5kcm9pZC5yYXcuZGVjb2RlciI7CisKK2NsYXNzIEMyU29mdFJhd0RlYzo6SW50ZkltcGwgOiBwdWJsaWMgQzJJbnRlcmZhY2VIZWxwZXIgeworcHVibGljOgorICAgIGV4cGxpY2l0IEludGZJbXBsKGNvbnN0IHN0ZDo6c2hhcmVkX3B0cjxDMlJlZmxlY3RvckhlbHBlcj4gJmhlbHBlcikKKyAgICAgICAgOiBDMkludGVyZmFjZUhlbHBlcihoZWxwZXIpIHsKKworICAgICAgICBzZXREZXJpdmVkSW5zdGFuY2UodGhpcyk7CisKKyAgICAgICAgYWRkUGFyYW1ldGVyKAorICAgICAgICAgICAgICAgIERlZmluZVBhcmFtKG1JbnB1dEZvcm1hdCwgQzJfTkFNRV9JTlBVVF9TVFJFQU1fRk9STUFUX1NFVFRJTkcpCisgICAgICAgICAgICAgICAgLndpdGhDb25zdFZhbHVlKG5ldyBDMlN0cmVhbUZvcm1hdENvbmZpZzo6aW5wdXQoMHUsIEMyRm9ybWF0Q29tcHJlc3NlZCkpCisgICAgICAgICAgICAgICAgLmJ1aWxkKCkpOworCisgICAgICAgIGFkZFBhcmFtZXRlcigKKyAgICAgICAgICAgICAgICBEZWZpbmVQYXJhbShtT3V0cHV0Rm9ybWF0LCBDMl9OQU1FX09VVFBVVF9TVFJFQU1fRk9STUFUX1NFVFRJTkcpCisgICAgICAgICAgICAgICAgLndpdGhDb25zdFZhbHVlKG5ldyBDMlN0cmVhbUZvcm1hdENvbmZpZzo6b3V0cHV0KDB1LCBDMkZvcm1hdEF1ZGlvKSkKKyAgICAgICAgICAgICAgICAuYnVpbGQoKSk7CisKKyAgICAgICAgYWRkUGFyYW1ldGVyKAorICAgICAgICAgICAgICAgIERlZmluZVBhcmFtKG1JbnB1dE1lZGlhVHlwZSwgQzJfTkFNRV9JTlBVVF9QT1JUX01JTUVfU0VUVElORykKKyAgICAgICAgICAgICAgICAud2l0aENvbnN0VmFsdWUoQWxsb2NTaGFyZWRTdHJpbmc8QzJQb3J0TWltZUNvbmZpZzo6aW5wdXQ+KAorICAgICAgICAgICAgICAgICAgICAgICAgTUVESUFfTUlNRVRZUEVfQVVESU9fUkFXKSkKKyAgICAgICAgICAgICAgICAuYnVpbGQoKSk7CisKKyAgICAgICAgYWRkUGFyYW1ldGVyKAorICAgICAgICAgICAgICAgIERlZmluZVBhcmFtKG1PdXRwdXRNZWRpYVR5cGUsIEMyX05BTUVfT1VUUFVUX1BPUlRfTUlNRV9TRVRUSU5HKQorICAgICAgICAgICAgICAgIC53aXRoQ29uc3RWYWx1ZShBbGxvY1NoYXJlZFN0cmluZzxDMlBvcnRNaW1lQ29uZmlnOjpvdXRwdXQ+KAorICAgICAgICAgICAgICAgICAgICAgICAgTUVESUFfTUlNRVRZUEVfQVVESU9fUkFXKSkKKyAgICAgICAgICAgICAgICAuYnVpbGQoKSk7CisKKyAgICAgICAgYWRkUGFyYW1ldGVyKAorICAgICAgICAgICAgICAgIERlZmluZVBhcmFtKG1TYW1wbGVSYXRlLCBDMl9OQU1FX1NUUkVBTV9TQU1QTEVfUkFURV9TRVRUSU5HKQorICAgICAgICAgICAgICAgIC53aXRoRGVmYXVsdChuZXcgQzJTdHJlYW1TYW1wbGVSYXRlSW5mbzo6b3V0cHV0KDB1LCA0NDEwMCkpCisgICAgICAgICAgICAgICAgLndpdGhGaWVsZHMoe0MyRihtU2FtcGxlUmF0ZSwgdmFsdWUpLmluUmFuZ2UoODAwMCwgMTkyMDAwKX0pCisgICAgICAgICAgICAgICAgLndpdGhTZXR0ZXIoKFNldHRlcjxkZWNsdHlwZSgqbVNhbXBsZVJhdGUpPjo6U3RyaWN0VmFsdWVXaXRoTm9EZXBzKSkKKyAgICAgICAgICAgICAgICAuYnVpbGQoKSk7CisKKyAgICAgICAgYWRkUGFyYW1ldGVyKAorICAgICAgICAgICAgICAgIERlZmluZVBhcmFtKG1DaGFubmVsQ291bnQsIEMyX05BTUVfU1RSRUFNX0NIQU5ORUxfQ09VTlRfU0VUVElORykKKyAgICAgICAgICAgICAgICAud2l0aERlZmF1bHQobmV3IEMyU3RyZWFtQ2hhbm5lbENvdW50SW5mbzo6b3V0cHV0KDB1LCAyKSkKKyAgICAgICAgICAgICAgICAud2l0aEZpZWxkcyh7QzJGKG1DaGFubmVsQ291bnQsIHZhbHVlKS5pblJhbmdlKDEsIDgpfSkKKyAgICAgICAgICAgICAgICAud2l0aFNldHRlcihTZXR0ZXI8ZGVjbHR5cGUoKm1DaGFubmVsQ291bnQpPjo6U3RyaWN0VmFsdWVXaXRoTm9EZXBzKQorICAgICAgICAgICAgICAgIC5idWlsZCgpKTsKKworICAgICAgICBhZGRQYXJhbWV0ZXIoCisgICAgICAgICAgICAgICAgRGVmaW5lUGFyYW0obUJpdHJhdGUsIEMyX05BTUVfU1RSRUFNX0JJVFJBVEVfU0VUVElORykKKyAgICAgICAgICAgICAgICAud2l0aERlZmF1bHQobmV3IEMyQml0cmF0ZVR1bmluZzo6aW5wdXQoMHUsIDY0MDAwKSkKKyAgICAgICAgICAgICAgICAud2l0aEZpZWxkcyh7QzJGKG1CaXRyYXRlLCB2YWx1ZSkuaW5SYW5nZSgxLCAxMDAwMDAwMCl9KQorICAgICAgICAgICAgICAgIC53aXRoU2V0dGVyKFNldHRlcjxkZWNsdHlwZSgqbUJpdHJhdGUpPjo6Tm9uU3RyaWN0VmFsdWVXaXRoTm9EZXBzKQorICAgICAgICAgICAgICAgIC5idWlsZCgpKTsKKworICAgICAgICBhZGRQYXJhbWV0ZXIoCisgICAgICAgICAgICAgICAgRGVmaW5lUGFyYW0obUlucHV0TWF4QnVmU2l6ZSwgQzJfUEFSQU1LRVlfSU5QVVRfTUFYX0JVRkZFUl9TSVpFKQorICAgICAgICAgICAgICAgIC53aXRoQ29uc3RWYWx1ZShuZXcgQzJTdHJlYW1NYXhCdWZmZXJTaXplSW5mbzo6aW5wdXQoMHUsIDY0ICogMTAyNCkpCisgICAgICAgICAgICAgICAgLmJ1aWxkKCkpOworICAgIH0KKworcHJpdmF0ZToKKyAgICBzdGQ6OnNoYXJlZF9wdHI8QzJTdHJlYW1Gb3JtYXRDb25maWc6OmlucHV0PiBtSW5wdXRGb3JtYXQ7CisgICAgc3RkOjpzaGFyZWRfcHRyPEMyU3RyZWFtRm9ybWF0Q29uZmlnOjpvdXRwdXQ+IG1PdXRwdXRGb3JtYXQ7CisgICAgc3RkOjpzaGFyZWRfcHRyPEMyUG9ydE1pbWVDb25maWc6OmlucHV0PiBtSW5wdXRNZWRpYVR5cGU7CisgICAgc3RkOjpzaGFyZWRfcHRyPEMyUG9ydE1pbWVDb25maWc6Om91dHB1dD4gbU91dHB1dE1lZGlhVHlwZTsKKyAgICBzdGQ6OnNoYXJlZF9wdHI8QzJTdHJlYW1TYW1wbGVSYXRlSW5mbzo6b3V0cHV0PiBtU2FtcGxlUmF0ZTsKKyAgICBzdGQ6OnNoYXJlZF9wdHI8QzJTdHJlYW1DaGFubmVsQ291bnRJbmZvOjpvdXRwdXQ+IG1DaGFubmVsQ291bnQ7CisgICAgc3RkOjpzaGFyZWRfcHRyPEMyQml0cmF0ZVR1bmluZzo6aW5wdXQ+IG1CaXRyYXRlOworICAgIHN0ZDo6c2hhcmVkX3B0cjxDMlN0cmVhbU1heEJ1ZmZlclNpemVJbmZvOjppbnB1dD4gbUlucHV0TWF4QnVmU2l6ZTsKK307CisKK0MyU29mdFJhd0RlYzo6QzJTb2Z0UmF3RGVjKAorICAgICAgICBjb25zdCBjaGFyICpuYW1lLAorICAgICAgICBjMl9ub2RlX2lkX3QgaWQsCisgICAgICAgIGNvbnN0IHN0ZDo6c2hhcmVkX3B0cjxJbnRmSW1wbD4gJmludGZJbXBsKQorICAgIDogU2ltcGxlQzJDb21wb25lbnQoc3RkOjptYWtlX3NoYXJlZDxTaW1wbGVJbnRlcmZhY2U8SW50ZkltcGw+PihuYW1lLCBpZCwgaW50ZkltcGwpKSwKKyAgICAgIG1JbnRmKGludGZJbXBsKSB7Cit9CisKK0MyU29mdFJhd0RlYzo6fkMyU29mdFJhd0RlYygpIHsKKyAgICBvblJlbGVhc2UoKTsKK30KKworYzJfc3RhdHVzX3QgQzJTb2Z0UmF3RGVjOjpvbkluaXQoKSB7CisgICAgbVNpZ25hbGxlZEVvcyA9IGZhbHNlOworICAgIHJldHVybiBDMl9PSzsKK30KKworYzJfc3RhdHVzX3QgQzJTb2Z0UmF3RGVjOjpvblN0b3AoKSB7CisgICAgbVNpZ25hbGxlZEVvcyA9IGZhbHNlOworICAgIHJldHVybiBDMl9PSzsKK30KKwordm9pZCBDMlNvZnRSYXdEZWM6Om9uUmVzZXQoKSB7CisgICAgKHZvaWQpb25TdG9wKCk7Cit9CisKK3ZvaWQgQzJTb2Z0UmF3RGVjOjpvblJlbGVhc2UoKSB7Cit9CisKK2MyX3N0YXR1c190IEMyU29mdFJhd0RlYzo6b25GbHVzaF9zbSgpIHsKKyAgICByZXR1cm4gb25TdG9wKCk7Cit9CisKK3ZvaWQgQzJTb2Z0UmF3RGVjOjpwcm9jZXNzKAorICAgICAgICBjb25zdCBzdGQ6OnVuaXF1ZV9wdHI8QzJXb3JrPiAmd29yaywKKyAgICAgICAgY29uc3Qgc3RkOjpzaGFyZWRfcHRyPEMyQmxvY2tQb29sPiAmcG9vbCkgeworICAgICh2b2lkKXBvb2w7CisgICAgd29yay0+cmVzdWx0ID0gQzJfT0s7CisgICAgd29yay0+d29ya2xldHNQcm9jZXNzZWQgPSAxdTsKKworICAgIGlmIChtU2lnbmFsbGVkRW9zKSB7CisgICAgICAgIHdvcmstPnJlc3VsdCA9IEMyX0JBRF9WQUxVRTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIEFMT0dWKCJpbiBidWZmZXIgYXR0ci4gdGltZXN0YW1wICVkIGZyYW1laW5kZXggJWQiLAorICAgICAgICAgIChpbnQpd29yay0+aW5wdXQub3JkaW5hbC50aW1lc3RhbXAucGVla3UoKSwgKGludCl3b3JrLT5pbnB1dC5vcmRpbmFsLmZyYW1lSW5kZXgucGVla3UoKSk7CisKKyAgICB3b3JrLT53b3JrbGV0cy5mcm9udCgpLT5vdXRwdXQuZmxhZ3MgPSB3b3JrLT5pbnB1dC5mbGFnczsKKyAgICB3b3JrLT53b3JrbGV0cy5mcm9udCgpLT5vdXRwdXQuYnVmZmVycy5jbGVhcigpOworICAgIHdvcmstPndvcmtsZXRzLmZyb250KCktPm91dHB1dC5vcmRpbmFsID0gd29yay0+aW5wdXQub3JkaW5hbDsKKyAgICBpZiAoIXdvcmstPmlucHV0LmJ1ZmZlcnMuZW1wdHkoKSkgeworICAgICAgICB3b3JrLT53b3JrbGV0cy5mcm9udCgpLT5vdXRwdXQuYnVmZmVycy5wdXNoX2JhY2sod29yay0+aW5wdXQuYnVmZmVyc1swXSk7CisgICAgfQorICAgIGlmICh3b3JrLT5pbnB1dC5mbGFncyAmIEMyRnJhbWVEYXRhOjpGTEFHX0VORF9PRl9TVFJFQU0pIHsKKyAgICAgICAgbVNpZ25hbGxlZEVvcyA9IHRydWU7CisgICAgICAgIEFMT0dWKCJzaWduYWxsZWQgRU9TIik7CisgICAgfQorfQorCitjMl9zdGF0dXNfdCBDMlNvZnRSYXdEZWM6OmRyYWluKAorICAgICAgICB1aW50MzJfdCBkcmFpbk1vZGUsCisgICAgICAgIGNvbnN0IHN0ZDo6c2hhcmVkX3B0cjxDMkJsb2NrUG9vbD4gJnBvb2wpIHsKKyAgICAodm9pZCkgcG9vbDsKKyAgICBpZiAoZHJhaW5Nb2RlID09IE5PX0RSQUlOKSB7CisgICAgICAgIEFMT0dXKCJkcmFpbiB3aXRoIE5PX0RSQUlOOiBuby1vcCIpOworICAgICAgICByZXR1cm4gQzJfT0s7CisgICAgfQorICAgIGlmIChkcmFpbk1vZGUgPT0gRFJBSU5fQ0hBSU4pIHsKKyAgICAgICAgQUxPR1coIkRSQUlOX0NIQUlOIG5vdCBzdXBwb3J0ZWQiKTsKKyAgICAgICAgcmV0dXJuIEMyX09NSVRURUQ7CisgICAgfQorCisgICAgcmV0dXJuIEMyX09LOworfQorCitjbGFzcyBDMlNvZnRSYXdEZWNGYWN0b3J5IDogcHVibGljIEMyQ29tcG9uZW50RmFjdG9yeSB7CitwdWJsaWM6CisgICAgQzJTb2Z0UmF3RGVjRmFjdG9yeSgpIDogbUhlbHBlcihzdGQ6OnN0YXRpY19wb2ludGVyX2Nhc3Q8QzJSZWZsZWN0b3JIZWxwZXI+KAorICAgICAgICAgICAgR2V0Q29kZWMyUGxhdGZvcm1Db21wb25lbnRTdG9yZSgpLT5nZXRQYXJhbVJlZmxlY3RvcigpKSkgeworICAgIH0KKworICAgIHZpcnR1YWwgYzJfc3RhdHVzX3QgY3JlYXRlQ29tcG9uZW50KAorICAgICAgICAgICAgYzJfbm9kZV9pZF90IGlkLAorICAgICAgICAgICAgc3RkOjpzaGFyZWRfcHRyPEMyQ29tcG9uZW50PiogY29uc3QgY29tcG9uZW50LAorICAgICAgICAgICAgc3RkOjpmdW5jdGlvbjx2b2lkKEMyQ29tcG9uZW50Kik+IGRlbGV0ZXIpIG92ZXJyaWRlIHsKKyAgICAgICAgKmNvbXBvbmVudCA9IHN0ZDo6c2hhcmVkX3B0cjxDMkNvbXBvbmVudD4oCisgICAgICAgICAgICAgICAgbmV3IEMyU29mdFJhd0RlYyhDT01QT05FTlRfTkFNRSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RkOjptYWtlX3NoYXJlZDxDMlNvZnRSYXdEZWM6OkludGZJbXBsPihtSGVscGVyKSksCisgICAgICAgICAgICAgICAgZGVsZXRlcik7CisgICAgICAgIHJldHVybiBDMl9PSzsKKyAgICB9CisKKyAgICB2aXJ0dWFsIGMyX3N0YXR1c190IGNyZWF0ZUludGVyZmFjZSgKKyAgICAgICAgICAgIGMyX25vZGVfaWRfdCBpZCwKKyAgICAgICAgICAgIHN0ZDo6c2hhcmVkX3B0cjxDMkNvbXBvbmVudEludGVyZmFjZT4qIGNvbnN0IGludGVyZmFjZSwKKyAgICAgICAgICAgIHN0ZDo6ZnVuY3Rpb248dm9pZChDMkNvbXBvbmVudEludGVyZmFjZSopPiBkZWxldGVyKSBvdmVycmlkZSB7CisgICAgICAgICppbnRlcmZhY2UgPSBzdGQ6OnNoYXJlZF9wdHI8QzJDb21wb25lbnRJbnRlcmZhY2U+KAorICAgICAgICAgICAgICAgIG5ldyBTaW1wbGVJbnRlcmZhY2U8QzJTb2Z0UmF3RGVjOjpJbnRmSW1wbD4oCisgICAgICAgICAgICAgICAgICAgICAgICBDT01QT05FTlRfTkFNRSwgaWQsIHN0ZDo6bWFrZV9zaGFyZWQ8QzJTb2Z0UmF3RGVjOjpJbnRmSW1wbD4obUhlbHBlcikpLAorICAgICAgICAgICAgICAgIGRlbGV0ZXIpOworICAgICAgICByZXR1cm4gQzJfT0s7CisgICAgfQorCisgICAgdmlydHVhbCB+QzJTb2Z0UmF3RGVjRmFjdG9yeSgpIG92ZXJyaWRlID0gZGVmYXVsdDsKKworcHJpdmF0ZToKKyAgICBzdGQ6OnNoYXJlZF9wdHI8QzJSZWZsZWN0b3JIZWxwZXI+IG1IZWxwZXI7Cit9OworCit9ICAvLyBuYW1lc3BhY2UgYW5kcm9pZAorCitleHRlcm4gIkMiIDo6QzJDb21wb25lbnRGYWN0b3J5KiBDcmVhdGVDb2RlYzJGYWN0b3J5KCkgeworICAgIEFMT0dWKCJpbiAlcyIsIF9fZnVuY19fKTsKKyAgICByZXR1cm4gbmV3IDo6YW5kcm9pZDo6QzJTb2Z0UmF3RGVjRmFjdG9yeSgpOworfQorCitleHRlcm4gIkMiIHZvaWQgRGVzdHJveUNvZGVjMkZhY3RvcnkoOjpDMkNvbXBvbmVudEZhY3RvcnkqIGZhY3RvcnkpIHsKKyAgICBBTE9HVigiaW4gJXMiLCBfX2Z1bmNfXyk7CisgICAgZGVsZXRlIGZhY3Rvcnk7Cit9CmRpZmYgLS1naXQgYS9tZWRpYS9jb2RlYzIvY29tcG9uZW50cy9yYXcvQzJTb2Z0UmF3RGVjLmggYi9tZWRpYS9jb2RlYzIvY29tcG9uZW50cy9yYXcvQzJTb2Z0UmF3RGVjLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2RmZGVjNQotLS0gL2Rldi9udWxsCisrKyBiL21lZGlhL2NvZGVjMi9jb21wb25lbnRzL3Jhdy9DMlNvZnRSYXdEZWMuaApAQCAtMCwwICsxLDUzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE4IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KKworI2lmbmRlZiBBTkRST0lEX0MyX1NPRlRfUkFXX0RFQ19IXworI2RlZmluZSBBTkRST0lEX0MyX1NPRlRfUkFXX0RFQ19IXworCisjaW5jbHVkZSA8U2ltcGxlQzJDb21wb25lbnQuaD4KKworCituYW1lc3BhY2UgYW5kcm9pZCB7CisKK3N0cnVjdCBDMlNvZnRSYXdEZWMgOiBwdWJsaWMgU2ltcGxlQzJDb21wb25lbnQgeworICAgIGNsYXNzIEludGZJbXBsOworCisgICAgQzJTb2Z0UmF3RGVjKGNvbnN0IGNoYXIqIG5hbWUsIGMyX25vZGVfaWRfdCBpZCwKKyAgICAgICAgICAgICAgY29uc3Qgc3RkOjpzaGFyZWRfcHRyPEludGZJbXBsPiYgaW50ZkltcGwpOworICAgIHZpcnR1YWwgfkMyU29mdFJhd0RlYygpOworCisgICAgLy8gRnJvbSBTaW1wbGVDMkNvbXBvbmVudAorICAgIGMyX3N0YXR1c190IG9uSW5pdCgpIG92ZXJyaWRlOworICAgIGMyX3N0YXR1c190IG9uU3RvcCgpIG92ZXJyaWRlOworICAgIHZvaWQgb25SZXNldCgpIG92ZXJyaWRlOworICAgIHZvaWQgb25SZWxlYXNlKCkgb3ZlcnJpZGU7CisgICAgYzJfc3RhdHVzX3Qgb25GbHVzaF9zbSgpIG92ZXJyaWRlOworICAgIHZvaWQgcHJvY2VzcygKKyAgICAgICAgICAgIGNvbnN0IHN0ZDo6dW5pcXVlX3B0cjxDMldvcms+ICZ3b3JrLAorICAgICAgICAgICAgY29uc3Qgc3RkOjpzaGFyZWRfcHRyPEMyQmxvY2tQb29sPiAmcG9vbCkgb3ZlcnJpZGU7CisgICAgYzJfc3RhdHVzX3QgZHJhaW4oCisgICAgICAgICAgICB1aW50MzJfdCBkcmFpbk1vZGUsCisgICAgICAgICAgICBjb25zdCBzdGQ6OnNoYXJlZF9wdHI8QzJCbG9ja1Bvb2w+ICZwb29sKSBvdmVycmlkZTsKK3ByaXZhdGU6CisgICAgc3RkOjpzaGFyZWRfcHRyPEludGZJbXBsPiBtSW50ZjsKKyAgICBib29sIG1TaWduYWxsZWRFb3M7CisKKyAgICBDMl9ET19OT1RfQ09QWShDMlNvZnRSYXdEZWMpOworfTsKKworfSAgLy8gbmFtZXNwYWNlIGFuZHJvaWQKKworI2VuZGlmICAvLyBBTkRST0lEX0MyX1NPRlRfUkFXX0RFQ19IXwpkaWZmIC0tZ2l0IGEvbWVkaWEvY29kZWMyL2NvbXBvbmVudHMvcmF3L01PRFVMRV9MSUNFTlNFX0FQQUNIRTIgYi9tZWRpYS9jb2RlYzIvY29tcG9uZW50cy9yYXcvTU9EVUxFX0xJQ0VOU0VfQVBBQ0hFMgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNjlkZTI5Ci0tLSAvZGV2L251bGwKKysrIGIvbWVkaWEvY29kZWMyL2NvbXBvbmVudHMvcmF3L01PRFVMRV9MSUNFTlNFX0FQQUNIRTIKZGlmZiAtLWdpdCBhL21lZGlhL2NvZGVjMi9jb21wb25lbnRzL3Jhdy9OT1RJQ0UgYi9tZWRpYS9jb2RlYzIvY29tcG9uZW50cy9yYXcvTk9USUNFCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM1YjFlZmEKLS0tIC9kZXYvbnVsbAorKysgYi9tZWRpYS9jb2RlYzIvY29tcG9uZW50cy9yYXcvTk9USUNFCkBAIC0wLDAgKzEsMTkwIEBACisKKyAgIENvcHlyaWdodCAoYykgMjAwNS0yMDA4LCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisKKyAgIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICAgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorCisgICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICAgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKworCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBcGFjaGUgTGljZW5zZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgVmVyc2lvbiAyLjAsIEphbnVhcnkgMjAwNAorICAgICAgICAgICAgICAgICAgICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzLworCisgICBURVJNUyBBTkQgQ09ORElUSU9OUyBGT1IgVVNFLCBSRVBST0RVQ1RJT04sIEFORCBESVNUUklCVVRJT04KKworICAgMS4gRGVmaW5pdGlvbnMuCisKKyAgICAgICJMaWNlbnNlIiBzaGFsbCBtZWFuIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBmb3IgdXNlLCByZXByb2R1Y3Rpb24sCisgICAgICBhbmQgZGlzdHJpYnV0aW9uIGFzIGRlZmluZWQgYnkgU2VjdGlvbnMgMSB0aHJvdWdoIDkgb2YgdGhpcyBkb2N1bWVudC4KKworICAgICAgIkxpY2Vuc29yIiBzaGFsbCBtZWFuIHRoZSBjb3B5cmlnaHQgb3duZXIgb3IgZW50aXR5IGF1dGhvcml6ZWQgYnkKKyAgICAgIHRoZSBjb3B5cmlnaHQgb3duZXIgdGhhdCBpcyBncmFudGluZyB0aGUgTGljZW5zZS4KKworICAgICAgIkxlZ2FsIEVudGl0eSIgc2hhbGwgbWVhbiB0aGUgdW5pb24gb2YgdGhlIGFjdGluZyBlbnRpdHkgYW5kIGFsbAorICAgICAgb3RoZXIgZW50aXRpZXMgdGhhdCBjb250cm9sLCBhcmUgY29udHJvbGxlZCBieSwgb3IgYXJlIHVuZGVyIGNvbW1vbgorICAgICAgY29udHJvbCB3aXRoIHRoYXQgZW50aXR5LiBGb3IgdGhlIHB1cnBvc2VzIG9mIHRoaXMgZGVmaW5pdGlvbiwKKyAgICAgICJjb250cm9sIiBtZWFucyAoaSkgdGhlIHBvd2VyLCBkaXJlY3Qgb3IgaW5kaXJlY3QsIHRvIGNhdXNlIHRoZQorICAgICAgZGlyZWN0aW9uIG9yIG1hbmFnZW1lbnQgb2Ygc3VjaCBlbnRpdHksIHdoZXRoZXIgYnkgY29udHJhY3Qgb3IKKyAgICAgIG90aGVyd2lzZSwgb3IgKGlpKSBvd25lcnNoaXAgb2YgZmlmdHkgcGVyY2VudCAoNTAlKSBvciBtb3JlIG9mIHRoZQorICAgICAgb3V0c3RhbmRpbmcgc2hhcmVzLCBvciAoaWlpKSBiZW5lZmljaWFsIG93bmVyc2hpcCBvZiBzdWNoIGVudGl0eS4KKworICAgICAgIllvdSIgKG9yICJZb3VyIikgc2hhbGwgbWVhbiBhbiBpbmRpdmlkdWFsIG9yIExlZ2FsIEVudGl0eQorICAgICAgZXhlcmNpc2luZyBwZXJtaXNzaW9ucyBncmFudGVkIGJ5IHRoaXMgTGljZW5zZS4KKworICAgICAgIlNvdXJjZSIgZm9ybSBzaGFsbCBtZWFuIHRoZSBwcmVmZXJyZWQgZm9ybSBmb3IgbWFraW5nIG1vZGlmaWNhdGlvbnMsCisgICAgICBpbmNsdWRpbmcgYnV0IG5vdCBsaW1pdGVkIHRvIHNvZnR3YXJlIHNvdXJjZSBjb2RlLCBkb2N1bWVudGF0aW9uCisgICAgICBzb3VyY2UsIGFuZCBjb25maWd1cmF0aW9uIGZpbGVzLgorCisgICAgICAiT2JqZWN0IiBmb3JtIHNoYWxsIG1lYW4gYW55IGZvcm0gcmVzdWx0aW5nIGZyb20gbWVjaGFuaWNhbAorICAgICAgdHJhbnNmb3JtYXRpb24gb3IgdHJhbnNsYXRpb24gb2YgYSBTb3VyY2UgZm9ybSwgaW5jbHVkaW5nIGJ1dAorICAgICAgbm90IGxpbWl0ZWQgdG8gY29tcGlsZWQgb2JqZWN0IGNvZGUsIGdlbmVyYXRlZCBkb2N1bWVudGF0aW9uLAorICAgICAgYW5kIGNvbnZlcnNpb25zIHRvIG90aGVyIG1lZGlhIHR5cGVzLgorCisgICAgICAiV29yayIgc2hhbGwgbWVhbiB0aGUgd29yayBvZiBhdXRob3JzaGlwLCB3aGV0aGVyIGluIFNvdXJjZSBvcgorICAgICAgT2JqZWN0IGZvcm0sIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSBMaWNlbnNlLCBhcyBpbmRpY2F0ZWQgYnkgYQorICAgICAgY29weXJpZ2h0IG5vdGljZSB0aGF0IGlzIGluY2x1ZGVkIGluIG9yIGF0dGFjaGVkIHRvIHRoZSB3b3JrCisgICAgICAoYW4gZXhhbXBsZSBpcyBwcm92aWRlZCBpbiB0aGUgQXBwZW5kaXggYmVsb3cpLgorCisgICAgICAiRGVyaXZhdGl2ZSBXb3JrcyIgc2hhbGwgbWVhbiBhbnkgd29yaywgd2hldGhlciBpbiBTb3VyY2Ugb3IgT2JqZWN0CisgICAgICBmb3JtLCB0aGF0IGlzIGJhc2VkIG9uIChvciBkZXJpdmVkIGZyb20pIHRoZSBXb3JrIGFuZCBmb3Igd2hpY2ggdGhlCisgICAgICBlZGl0b3JpYWwgcmV2aXNpb25zLCBhbm5vdGF0aW9ucywgZWxhYm9yYXRpb25zLCBvciBvdGhlciBtb2RpZmljYXRpb25zCisgICAgICByZXByZXNlbnQsIGFzIGEgd2hvbGUsIGFuIG9yaWdpbmFsIHdvcmsgb2YgYXV0aG9yc2hpcC4gRm9yIHRoZSBwdXJwb3NlcworICAgICAgb2YgdGhpcyBMaWNlbnNlLCBEZXJpdmF0aXZlIFdvcmtzIHNoYWxsIG5vdCBpbmNsdWRlIHdvcmtzIHRoYXQgcmVtYWluCisgICAgICBzZXBhcmFibGUgZnJvbSwgb3IgbWVyZWx5IGxpbmsgKG9yIGJpbmQgYnkgbmFtZSkgdG8gdGhlIGludGVyZmFjZXMgb2YsCisgICAgICB0aGUgV29yayBhbmQgRGVyaXZhdGl2ZSBXb3JrcyB0aGVyZW9mLgorCisgICAgICAiQ29udHJpYnV0aW9uIiBzaGFsbCBtZWFuIGFueSB3b3JrIG9mIGF1dGhvcnNoaXAsIGluY2x1ZGluZworICAgICAgdGhlIG9yaWdpbmFsIHZlcnNpb24gb2YgdGhlIFdvcmsgYW5kIGFueSBtb2RpZmljYXRpb25zIG9yIGFkZGl0aW9ucworICAgICAgdG8gdGhhdCBXb3JrIG9yIERlcml2YXRpdmUgV29ya3MgdGhlcmVvZiwgdGhhdCBpcyBpbnRlbnRpb25hbGx5CisgICAgICBzdWJtaXR0ZWQgdG8gTGljZW5zb3IgZm9yIGluY2x1c2lvbiBpbiB0aGUgV29yayBieSB0aGUgY29weXJpZ2h0IG93bmVyCisgICAgICBvciBieSBhbiBpbmRpdmlkdWFsIG9yIExlZ2FsIEVudGl0eSBhdXRob3JpemVkIHRvIHN1Ym1pdCBvbiBiZWhhbGYgb2YKKyAgICAgIHRoZSBjb3B5cmlnaHQgb3duZXIuIEZvciB0aGUgcHVycG9zZXMgb2YgdGhpcyBkZWZpbml0aW9uLCAic3VibWl0dGVkIgorICAgICAgbWVhbnMgYW55IGZvcm0gb2YgZWxlY3Ryb25pYywgdmVyYmFsLCBvciB3cml0dGVuIGNvbW11bmljYXRpb24gc2VudAorICAgICAgdG8gdGhlIExpY2Vuc29yIG9yIGl0cyByZXByZXNlbnRhdGl2ZXMsIGluY2x1ZGluZyBidXQgbm90IGxpbWl0ZWQgdG8KKyAgICAgIGNvbW11bmljYXRpb24gb24gZWxlY3Ryb25pYyBtYWlsaW5nIGxpc3RzLCBzb3VyY2UgY29kZSBjb250cm9sIHN5c3RlbXMsCisgICAgICBhbmQgaXNzdWUgdHJhY2tpbmcgc3lzdGVtcyB0aGF0IGFyZSBtYW5hZ2VkIGJ5LCBvciBvbiBiZWhhbGYgb2YsIHRoZQorICAgICAgTGljZW5zb3IgZm9yIHRoZSBwdXJwb3NlIG9mIGRpc2N1c3NpbmcgYW5kIGltcHJvdmluZyB0aGUgV29yaywgYnV0CisgICAgICBleGNsdWRpbmcgY29tbXVuaWNhdGlvbiB0aGF0IGlzIGNvbnNwaWN1b3VzbHkgbWFya2VkIG9yIG90aGVyd2lzZQorICAgICAgZGVzaWduYXRlZCBpbiB3cml0aW5nIGJ5IHRoZSBjb3B5cmlnaHQgb3duZXIgYXMgIk5vdCBhIENvbnRyaWJ1dGlvbi4iCisKKyAgICAgICJDb250cmlidXRvciIgc2hhbGwgbWVhbiBMaWNlbnNvciBhbmQgYW55IGluZGl2aWR1YWwgb3IgTGVnYWwgRW50aXR5CisgICAgICBvbiBiZWhhbGYgb2Ygd2hvbSBhIENvbnRyaWJ1dGlvbiBoYXMgYmVlbiByZWNlaXZlZCBieSBMaWNlbnNvciBhbmQKKyAgICAgIHN1YnNlcXVlbnRseSBpbmNvcnBvcmF0ZWQgd2l0aGluIHRoZSBXb3JrLgorCisgICAyLiBHcmFudCBvZiBDb3B5cmlnaHQgTGljZW5zZS4gU3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YKKyAgICAgIHRoaXMgTGljZW5zZSwgZWFjaCBDb250cmlidXRvciBoZXJlYnkgZ3JhbnRzIHRvIFlvdSBhIHBlcnBldHVhbCwKKyAgICAgIHdvcmxkd2lkZSwgbm9uLWV4Y2x1c2l2ZSwgbm8tY2hhcmdlLCByb3lhbHR5LWZyZWUsIGlycmV2b2NhYmxlCisgICAgICBjb3B5cmlnaHQgbGljZW5zZSB0byByZXByb2R1Y2UsIHByZXBhcmUgRGVyaXZhdGl2ZSBXb3JrcyBvZiwKKyAgICAgIHB1YmxpY2x5IGRpc3BsYXksIHB1YmxpY2x5IHBlcmZvcm0sIHN1YmxpY2Vuc2UsIGFuZCBkaXN0cmlidXRlIHRoZQorICAgICAgV29yayBhbmQgc3VjaCBEZXJpdmF0aXZlIFdvcmtzIGluIFNvdXJjZSBvciBPYmplY3QgZm9ybS4KKworICAgMy4gR3JhbnQgb2YgUGF0ZW50IExpY2Vuc2UuIFN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mCisgICAgICB0aGlzIExpY2Vuc2UsIGVhY2ggQ29udHJpYnV0b3IgaGVyZWJ5IGdyYW50cyB0byBZb3UgYSBwZXJwZXR1YWwsCisgICAgICB3b3JsZHdpZGUsIG5vbi1leGNsdXNpdmUsIG5vLWNoYXJnZSwgcm95YWx0eS1mcmVlLCBpcnJldm9jYWJsZQorICAgICAgKGV4Y2VwdCBhcyBzdGF0ZWQgaW4gdGhpcyBzZWN0aW9uKSBwYXRlbnQgbGljZW5zZSB0byBtYWtlLCBoYXZlIG1hZGUsCisgICAgICB1c2UsIG9mZmVyIHRvIHNlbGwsIHNlbGwsIGltcG9ydCwgYW5kIG90aGVyd2lzZSB0cmFuc2ZlciB0aGUgV29yaywKKyAgICAgIHdoZXJlIHN1Y2ggbGljZW5zZSBhcHBsaWVzIG9ubHkgdG8gdGhvc2UgcGF0ZW50IGNsYWltcyBsaWNlbnNhYmxlCisgICAgICBieSBzdWNoIENvbnRyaWJ1dG9yIHRoYXQgYXJlIG5lY2Vzc2FyaWx5IGluZnJpbmdlZCBieSB0aGVpcgorICAgICAgQ29udHJpYnV0aW9uKHMpIGFsb25lIG9yIGJ5IGNvbWJpbmF0aW9uIG9mIHRoZWlyIENvbnRyaWJ1dGlvbihzKQorICAgICAgd2l0aCB0aGUgV29yayB0byB3aGljaCBzdWNoIENvbnRyaWJ1dGlvbihzKSB3YXMgc3VibWl0dGVkLiBJZiBZb3UKKyAgICAgIGluc3RpdHV0ZSBwYXRlbnQgbGl0aWdhdGlvbiBhZ2FpbnN0IGFueSBlbnRpdHkgKGluY2x1ZGluZyBhCisgICAgICBjcm9zcy1jbGFpbSBvciBjb3VudGVyY2xhaW0gaW4gYSBsYXdzdWl0KSBhbGxlZ2luZyB0aGF0IHRoZSBXb3JrCisgICAgICBvciBhIENvbnRyaWJ1dGlvbiBpbmNvcnBvcmF0ZWQgd2l0aGluIHRoZSBXb3JrIGNvbnN0aXR1dGVzIGRpcmVjdAorICAgICAgb3IgY29udHJpYnV0b3J5IHBhdGVudCBpbmZyaW5nZW1lbnQsIHRoZW4gYW55IHBhdGVudCBsaWNlbnNlcworICAgICAgZ3JhbnRlZCB0byBZb3UgdW5kZXIgdGhpcyBMaWNlbnNlIGZvciB0aGF0IFdvcmsgc2hhbGwgdGVybWluYXRlCisgICAgICBhcyBvZiB0aGUgZGF0ZSBzdWNoIGxpdGlnYXRpb24gaXMgZmlsZWQuCisKKyAgIDQuIFJlZGlzdHJpYnV0aW9uLiBZb3UgbWF5IHJlcHJvZHVjZSBhbmQgZGlzdHJpYnV0ZSBjb3BpZXMgb2YgdGhlCisgICAgICBXb3JrIG9yIERlcml2YXRpdmUgV29ya3MgdGhlcmVvZiBpbiBhbnkgbWVkaXVtLCB3aXRoIG9yIHdpdGhvdXQKKyAgICAgIG1vZGlmaWNhdGlvbnMsIGFuZCBpbiBTb3VyY2Ugb3IgT2JqZWN0IGZvcm0sIHByb3ZpZGVkIHRoYXQgWW91CisgICAgICBtZWV0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKKworICAgICAgKGEpIFlvdSBtdXN0IGdpdmUgYW55IG90aGVyIHJlY2lwaWVudHMgb2YgdGhlIFdvcmsgb3IKKyAgICAgICAgICBEZXJpdmF0aXZlIFdvcmtzIGEgY29weSBvZiB0aGlzIExpY2Vuc2U7IGFuZAorCisgICAgICAoYikgWW91IG11c3QgY2F1c2UgYW55IG1vZGlmaWVkIGZpbGVzIHRvIGNhcnJ5IHByb21pbmVudCBub3RpY2VzCisgICAgICAgICAgc3RhdGluZyB0aGF0IFlvdSBjaGFuZ2VkIHRoZSBmaWxlczsgYW5kCisKKyAgICAgIChjKSBZb3UgbXVzdCByZXRhaW4sIGluIHRoZSBTb3VyY2UgZm9ybSBvZiBhbnkgRGVyaXZhdGl2ZSBXb3JrcworICAgICAgICAgIHRoYXQgWW91IGRpc3RyaWJ1dGUsIGFsbCBjb3B5cmlnaHQsIHBhdGVudCwgdHJhZGVtYXJrLCBhbmQKKyAgICAgICAgICBhdHRyaWJ1dGlvbiBub3RpY2VzIGZyb20gdGhlIFNvdXJjZSBmb3JtIG9mIHRoZSBXb3JrLAorICAgICAgICAgIGV4Y2x1ZGluZyB0aG9zZSBub3RpY2VzIHRoYXQgZG8gbm90IHBlcnRhaW4gdG8gYW55IHBhcnQgb2YKKyAgICAgICAgICB0aGUgRGVyaXZhdGl2ZSBXb3JrczsgYW5kCisKKyAgICAgIChkKSBJZiB0aGUgV29yayBpbmNsdWRlcyBhICJOT1RJQ0UiIHRleHQgZmlsZSBhcyBwYXJ0IG9mIGl0cworICAgICAgICAgIGRpc3RyaWJ1dGlvbiwgdGhlbiBhbnkgRGVyaXZhdGl2ZSBXb3JrcyB0aGF0IFlvdSBkaXN0cmlidXRlIG11c3QKKyAgICAgICAgICBpbmNsdWRlIGEgcmVhZGFibGUgY29weSBvZiB0aGUgYXR0cmlidXRpb24gbm90aWNlcyBjb250YWluZWQKKyAgICAgICAgICB3aXRoaW4gc3VjaCBOT1RJQ0UgZmlsZSwgZXhjbHVkaW5nIHRob3NlIG5vdGljZXMgdGhhdCBkbyBub3QKKyAgICAgICAgICBwZXJ0YWluIHRvIGFueSBwYXJ0IG9mIHRoZSBEZXJpdmF0aXZlIFdvcmtzLCBpbiBhdCBsZWFzdCBvbmUKKyAgICAgICAgICBvZiB0aGUgZm9sbG93aW5nIHBsYWNlczogd2l0aGluIGEgTk9USUNFIHRleHQgZmlsZSBkaXN0cmlidXRlZAorICAgICAgICAgIGFzIHBhcnQgb2YgdGhlIERlcml2YXRpdmUgV29ya3M7IHdpdGhpbiB0aGUgU291cmNlIGZvcm0gb3IKKyAgICAgICAgICBkb2N1bWVudGF0aW9uLCBpZiBwcm92aWRlZCBhbG9uZyB3aXRoIHRoZSBEZXJpdmF0aXZlIFdvcmtzOyBvciwKKyAgICAgICAgICB3aXRoaW4gYSBkaXNwbGF5IGdlbmVyYXRlZCBieSB0aGUgRGVyaXZhdGl2ZSBXb3JrcywgaWYgYW5kCisgICAgICAgICAgd2hlcmV2ZXIgc3VjaCB0aGlyZC1wYXJ0eSBub3RpY2VzIG5vcm1hbGx5IGFwcGVhci4gVGhlIGNvbnRlbnRzCisgICAgICAgICAgb2YgdGhlIE5PVElDRSBmaWxlIGFyZSBmb3IgaW5mb3JtYXRpb25hbCBwdXJwb3NlcyBvbmx5IGFuZAorICAgICAgICAgIGRvIG5vdCBtb2RpZnkgdGhlIExpY2Vuc2UuIFlvdSBtYXkgYWRkIFlvdXIgb3duIGF0dHJpYnV0aW9uCisgICAgICAgICAgbm90aWNlcyB3aXRoaW4gRGVyaXZhdGl2ZSBXb3JrcyB0aGF0IFlvdSBkaXN0cmlidXRlLCBhbG9uZ3NpZGUKKyAgICAgICAgICBvciBhcyBhbiBhZGRlbmR1bSB0byB0aGUgTk9USUNFIHRleHQgZnJvbSB0aGUgV29yaywgcHJvdmlkZWQKKyAgICAgICAgICB0aGF0IHN1Y2ggYWRkaXRpb25hbCBhdHRyaWJ1dGlvbiBub3RpY2VzIGNhbm5vdCBiZSBjb25zdHJ1ZWQKKyAgICAgICAgICBhcyBtb2RpZnlpbmcgdGhlIExpY2Vuc2UuCisKKyAgICAgIFlvdSBtYXkgYWRkIFlvdXIgb3duIGNvcHlyaWdodCBzdGF0ZW1lbnQgdG8gWW91ciBtb2RpZmljYXRpb25zIGFuZAorICAgICAgbWF5IHByb3ZpZGUgYWRkaXRpb25hbCBvciBkaWZmZXJlbnQgbGljZW5zZSB0ZXJtcyBhbmQgY29uZGl0aW9ucworICAgICAgZm9yIHVzZSwgcmVwcm9kdWN0aW9uLCBvciBkaXN0cmlidXRpb24gb2YgWW91ciBtb2RpZmljYXRpb25zLCBvcgorICAgICAgZm9yIGFueSBzdWNoIERlcml2YXRpdmUgV29ya3MgYXMgYSB3aG9sZSwgcHJvdmlkZWQgWW91ciB1c2UsCisgICAgICByZXByb2R1Y3Rpb24sIGFuZCBkaXN0cmlidXRpb24gb2YgdGhlIFdvcmsgb3RoZXJ3aXNlIGNvbXBsaWVzIHdpdGgKKyAgICAgIHRoZSBjb25kaXRpb25zIHN0YXRlZCBpbiB0aGlzIExpY2Vuc2UuCisKKyAgIDUuIFN1Ym1pc3Npb24gb2YgQ29udHJpYnV0aW9ucy4gVW5sZXNzIFlvdSBleHBsaWNpdGx5IHN0YXRlIG90aGVyd2lzZSwKKyAgICAgIGFueSBDb250cmlidXRpb24gaW50ZW50aW9uYWxseSBzdWJtaXR0ZWQgZm9yIGluY2x1c2lvbiBpbiB0aGUgV29yaworICAgICAgYnkgWW91IHRvIHRoZSBMaWNlbnNvciBzaGFsbCBiZSB1bmRlciB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YKKyAgICAgIHRoaXMgTGljZW5zZSwgd2l0aG91dCBhbnkgYWRkaXRpb25hbCB0ZXJtcyBvciBjb25kaXRpb25zLgorICAgICAgTm90d2l0aHN0YW5kaW5nIHRoZSBhYm92ZSwgbm90aGluZyBoZXJlaW4gc2hhbGwgc3VwZXJzZWRlIG9yIG1vZGlmeQorICAgICAgdGhlIHRlcm1zIG9mIGFueSBzZXBhcmF0ZSBsaWNlbnNlIGFncmVlbWVudCB5b3UgbWF5IGhhdmUgZXhlY3V0ZWQKKyAgICAgIHdpdGggTGljZW5zb3IgcmVnYXJkaW5nIHN1Y2ggQ29udHJpYnV0aW9ucy4KKworICAgNi4gVHJhZGVtYXJrcy4gVGhpcyBMaWNlbnNlIGRvZXMgbm90IGdyYW50IHBlcm1pc3Npb24gdG8gdXNlIHRoZSB0cmFkZQorICAgICAgbmFtZXMsIHRyYWRlbWFya3MsIHNlcnZpY2UgbWFya3MsIG9yIHByb2R1Y3QgbmFtZXMgb2YgdGhlIExpY2Vuc29yLAorICAgICAgZXhjZXB0IGFzIHJlcXVpcmVkIGZvciByZWFzb25hYmxlIGFuZCBjdXN0b21hcnkgdXNlIGluIGRlc2NyaWJpbmcgdGhlCisgICAgICBvcmlnaW4gb2YgdGhlIFdvcmsgYW5kIHJlcHJvZHVjaW5nIHRoZSBjb250ZW50IG9mIHRoZSBOT1RJQ0UgZmlsZS4KKworICAgNy4gRGlzY2xhaW1lciBvZiBXYXJyYW50eS4gVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yCisgICAgICBhZ3JlZWQgdG8gaW4gd3JpdGluZywgTGljZW5zb3IgcHJvdmlkZXMgdGhlIFdvcmsgKGFuZCBlYWNoCisgICAgICBDb250cmlidXRvciBwcm92aWRlcyBpdHMgQ29udHJpYnV0aW9ucykgb24gYW4gIkFTIElTIiBCQVNJUywKKyAgICAgIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvcgorICAgICAgaW1wbGllZCwgaW5jbHVkaW5nLCB3aXRob3V0IGxpbWl0YXRpb24sIGFueSB3YXJyYW50aWVzIG9yIGNvbmRpdGlvbnMKKyAgICAgIG9mIFRJVExFLCBOT04tSU5GUklOR0VNRU5ULCBNRVJDSEFOVEFCSUxJVFksIG9yIEZJVE5FU1MgRk9SIEEKKyAgICAgIFBBUlRJQ1VMQVIgUFVSUE9TRS4gWW91IGFyZSBzb2xlbHkgcmVzcG9uc2libGUgZm9yIGRldGVybWluaW5nIHRoZQorICAgICAgYXBwcm9wcmlhdGVuZXNzIG9mIHVzaW5nIG9yIHJlZGlzdHJpYnV0aW5nIHRoZSBXb3JrIGFuZCBhc3N1bWUgYW55CisgICAgICByaXNrcyBhc3NvY2lhdGVkIHdpdGggWW91ciBleGVyY2lzZSBvZiBwZXJtaXNzaW9ucyB1bmRlciB0aGlzIExpY2Vuc2UuCisKKyAgIDguIExpbWl0YXRpb24gb2YgTGlhYmlsaXR5LiBJbiBubyBldmVudCBhbmQgdW5kZXIgbm8gbGVnYWwgdGhlb3J5LAorICAgICAgd2hldGhlciBpbiB0b3J0IChpbmNsdWRpbmcgbmVnbGlnZW5jZSksIGNvbnRyYWN0LCBvciBvdGhlcndpc2UsCisgICAgICB1bmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgKHN1Y2ggYXMgZGVsaWJlcmF0ZSBhbmQgZ3Jvc3NseQorICAgICAgbmVnbGlnZW50IGFjdHMpIG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzaGFsbCBhbnkgQ29udHJpYnV0b3IgYmUKKyAgICAgIGxpYWJsZSB0byBZb3UgZm9yIGRhbWFnZXMsIGluY2x1ZGluZyBhbnkgZGlyZWN0LCBpbmRpcmVjdCwgc3BlY2lhbCwKKyAgICAgIGluY2lkZW50YWwsIG9yIGNvbnNlcXVlbnRpYWwgZGFtYWdlcyBvZiBhbnkgY2hhcmFjdGVyIGFyaXNpbmcgYXMgYQorICAgICAgcmVzdWx0IG9mIHRoaXMgTGljZW5zZSBvciBvdXQgb2YgdGhlIHVzZSBvciBpbmFiaWxpdHkgdG8gdXNlIHRoZQorICAgICAgV29yayAoaW5jbHVkaW5nIGJ1dCBub3QgbGltaXRlZCB0byBkYW1hZ2VzIGZvciBsb3NzIG9mIGdvb2R3aWxsLAorICAgICAgd29yayBzdG9wcGFnZSwgY29tcHV0ZXIgZmFpbHVyZSBvciBtYWxmdW5jdGlvbiwgb3IgYW55IGFuZCBhbGwKKyAgICAgIG90aGVyIGNvbW1lcmNpYWwgZGFtYWdlcyBvciBsb3NzZXMpLCBldmVuIGlmIHN1Y2ggQ29udHJpYnV0b3IKKyAgICAgIGhhcyBiZWVuIGFkdmlzZWQgb2YgdGhlIHBvc3NpYmlsaXR5IG9mIHN1Y2ggZGFtYWdlcy4KKworICAgOS4gQWNjZXB0aW5nIFdhcnJhbnR5IG9yIEFkZGl0aW9uYWwgTGlhYmlsaXR5LiBXaGlsZSByZWRpc3RyaWJ1dGluZworICAgICAgdGhlIFdvcmsgb3IgRGVyaXZhdGl2ZSBXb3JrcyB0aGVyZW9mLCBZb3UgbWF5IGNob29zZSB0byBvZmZlciwKKyAgICAgIGFuZCBjaGFyZ2UgYSBmZWUgZm9yLCBhY2NlcHRhbmNlIG9mIHN1cHBvcnQsIHdhcnJhbnR5LCBpbmRlbW5pdHksCisgICAgICBvciBvdGhlciBsaWFiaWxpdHkgb2JsaWdhdGlvbnMgYW5kL29yIHJpZ2h0cyBjb25zaXN0ZW50IHdpdGggdGhpcworICAgICAgTGljZW5zZS4gSG93ZXZlciwgaW4gYWNjZXB0aW5nIHN1Y2ggb2JsaWdhdGlvbnMsIFlvdSBtYXkgYWN0IG9ubHkKKyAgICAgIG9uIFlvdXIgb3duIGJlaGFsZiBhbmQgb24gWW91ciBzb2xlIHJlc3BvbnNpYmlsaXR5LCBub3Qgb24gYmVoYWxmCisgICAgICBvZiBhbnkgb3RoZXIgQ29udHJpYnV0b3IsIGFuZCBvbmx5IGlmIFlvdSBhZ3JlZSB0byBpbmRlbW5pZnksCisgICAgICBkZWZlbmQsIGFuZCBob2xkIGVhY2ggQ29udHJpYnV0b3IgaGFybWxlc3MgZm9yIGFueSBsaWFiaWxpdHkKKyAgICAgIGluY3VycmVkIGJ5LCBvciBjbGFpbXMgYXNzZXJ0ZWQgYWdhaW5zdCwgc3VjaCBDb250cmlidXRvciBieSByZWFzb24KKyAgICAgIG9mIHlvdXIgYWNjZXB0aW5nIGFueSBzdWNoIHdhcnJhbnR5IG9yIGFkZGl0aW9uYWwgbGlhYmlsaXR5LgorCisgICBFTkQgT0YgVEVSTVMgQU5EIENPTkRJVElPTlMKKwpkaWZmIC0tZ2l0IGEvbWVkaWEvY29kZWMyL2NvbXBvbmVudHMvdm9yYmlzL0FuZHJvaWQuYnAgYi9tZWRpYS9jb2RlYzIvY29tcG9uZW50cy92b3JiaXMvQW5kcm9pZC5icApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hNWY0ODVkCi0tLSAvZGV2L251bGwKKysrIGIvbWVkaWEvY29kZWMyL2NvbXBvbmVudHMvdm9yYmlzL0FuZHJvaWQuYnAKQEAgLTAsMCArMSwxMSBAQAorY2NfbGlicmFyeV9zaGFyZWQgeworICAgIG5hbWU6ICJsaWJjb2RlYzJfc29mdF92b3JiaXNkZWMiLAorICAgIGRlZmF1bHRzOiBbCisgICAgICAgICJsaWJjb2RlYzJfc29mdC1kZWZhdWx0cyIsCisgICAgICAgICJsaWJjb2RlYzJfc29mdF9zYW5pdGl6ZV9hbGwtZGVmYXVsdHMiLAorICAgIF0sCisKKyAgICBzcmNzOiBbIkMyU29mdFZvcmJpc0RlYy5jcHAiXSwKKworICAgIHNoYXJlZF9saWJzOiBbImxpYnZvcmJpc2lkZWMiXSwKK30KZGlmZiAtLWdpdCBhL21lZGlhL2NvZGVjMi9jb21wb25lbnRzL3ZvcmJpcy9DMlNvZnRWb3JiaXNEZWMuY3BwIGIvbWVkaWEvY29kZWMyL2NvbXBvbmVudHMvdm9yYmlzL0MyU29mdFZvcmJpc0RlYy5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjgwYWUzNgotLS0gL2Rldi9udWxsCisrKyBiL21lZGlhL2NvZGVjMi9jb21wb25lbnRzL3ZvcmJpcy9DMlNvZnRWb3JiaXNEZWMuY3BwCkBAIC0wLDAgKzEsNDkzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE4IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KKworLy8jZGVmaW5lIExPR19OREVCVUcgMAorI2RlZmluZSBMT0dfVEFHICJDMlNvZnRWb3JiaXNEZWMiCisjaW5jbHVkZSA8bG9nL2xvZy5oPgorCisjaW5jbHVkZSA8bWVkaWEvc3RhZ2VmcmlnaHQvZm91bmRhdGlvbi9NZWRpYURlZnMuaD4KKworI2luY2x1ZGUgPEMyUGxhdGZvcm1TdXBwb3J0Lmg+CisjaW5jbHVkZSA8U2ltcGxlQzJJbnRlcmZhY2UuaD4KKworI2luY2x1ZGUgIkMyU29mdFZvcmJpc0RlYy5oIgorCitleHRlcm4gIkMiIHsKKyAgICAjaW5jbHVkZSA8VHJlbW9sby9jb2RlY19pbnRlcm5hbC5oPgorCisgICAgaW50IF92b3JiaXNfdW5wYWNrX2Jvb2tzKHZvcmJpc19pbmZvICp2aSxvZ2dwYWNrX2J1ZmZlciAqb3BiKTsKKyAgICBpbnQgX3ZvcmJpc191bnBhY2tfaW5mbyh2b3JiaXNfaW5mbyAqdmksb2dncGFja19idWZmZXIgKm9wYik7CisgICAgaW50IF92b3JiaXNfdW5wYWNrX2NvbW1lbnQodm9yYmlzX2NvbW1lbnQgKnZjLG9nZ3BhY2tfYnVmZmVyICpvcGIpOworfQorCituYW1lc3BhY2UgYW5kcm9pZCB7CisKK2NvbnN0ZXhwciBjaGFyIENPTVBPTkVOVF9OQU1FW10gPSAiYzIuYW5kcm9pZC52b3JiaXMuZGVjb2RlciI7CisKK2NsYXNzIEMyU29mdFZvcmJpc0RlYzo6SW50ZkltcGwgOiBwdWJsaWMgQzJJbnRlcmZhY2VIZWxwZXIgeworcHVibGljOgorICAgIGV4cGxpY2l0IEludGZJbXBsKGNvbnN0IHN0ZDo6c2hhcmVkX3B0cjxDMlJlZmxlY3RvckhlbHBlcj4gJmhlbHBlcikKKyAgICAgICAgOiBDMkludGVyZmFjZUhlbHBlcihoZWxwZXIpIHsKKworICAgICAgICBzZXREZXJpdmVkSW5zdGFuY2UodGhpcyk7CisKKyAgICAgICAgYWRkUGFyYW1ldGVyKAorICAgICAgICAgICAgICAgIERlZmluZVBhcmFtKG1JbnB1dEZvcm1hdCwgQzJfTkFNRV9JTlBVVF9TVFJFQU1fRk9STUFUX1NFVFRJTkcpCisgICAgICAgICAgICAgICAgLndpdGhDb25zdFZhbHVlKG5ldyBDMlN0cmVhbUZvcm1hdENvbmZpZzo6aW5wdXQoMHUsIEMyRm9ybWF0Q29tcHJlc3NlZCkpCisgICAgICAgICAgICAgICAgLmJ1aWxkKCkpOworCisgICAgICAgIGFkZFBhcmFtZXRlcigKKyAgICAgICAgICAgICAgICBEZWZpbmVQYXJhbShtT3V0cHV0Rm9ybWF0LCBDMl9OQU1FX09VVFBVVF9TVFJFQU1fRk9STUFUX1NFVFRJTkcpCisgICAgICAgICAgICAgICAgLndpdGhDb25zdFZhbHVlKG5ldyBDMlN0cmVhbUZvcm1hdENvbmZpZzo6b3V0cHV0KDB1LCBDMkZvcm1hdEF1ZGlvKSkKKyAgICAgICAgICAgICAgICAuYnVpbGQoKSk7CisKKyAgICAgICAgYWRkUGFyYW1ldGVyKAorICAgICAgICAgICAgICAgIERlZmluZVBhcmFtKG1JbnB1dE1lZGlhVHlwZSwgQzJfTkFNRV9JTlBVVF9QT1JUX01JTUVfU0VUVElORykKKyAgICAgICAgICAgICAgICAud2l0aENvbnN0VmFsdWUoQWxsb2NTaGFyZWRTdHJpbmc8QzJQb3J0TWltZUNvbmZpZzo6aW5wdXQ+KAorICAgICAgICAgICAgICAgICAgICAgICAgTUVESUFfTUlNRVRZUEVfQVVESU9fVk9SQklTKSkKKyAgICAgICAgICAgICAgICAuYnVpbGQoKSk7CisKKyAgICAgICAgYWRkUGFyYW1ldGVyKAorICAgICAgICAgICAgICAgIERlZmluZVBhcmFtKG1PdXRwdXRNZWRpYVR5cGUsIEMyX05BTUVfT1VUUFVUX1BPUlRfTUlNRV9TRVRUSU5HKQorICAgICAgICAgICAgICAgIC53aXRoQ29uc3RWYWx1ZShBbGxvY1NoYXJlZFN0cmluZzxDMlBvcnRNaW1lQ29uZmlnOjpvdXRwdXQ+KAorICAgICAgICAgICAgICAgICAgICAgICAgTUVESUFfTUlNRVRZUEVfQVVESU9fUkFXKSkKKyAgICAgICAgICAgICAgICAuYnVpbGQoKSk7CisKKyAgICAgICAgYWRkUGFyYW1ldGVyKAorICAgICAgICAgICAgICAgIERlZmluZVBhcmFtKG1TYW1wbGVSYXRlLCBDMl9OQU1FX1NUUkVBTV9TQU1QTEVfUkFURV9TRVRUSU5HKQorICAgICAgICAgICAgICAgIC53aXRoRGVmYXVsdChuZXcgQzJTdHJlYW1TYW1wbGVSYXRlSW5mbzo6b3V0cHV0KDB1LCA0ODAwMCkpCisgICAgICAgICAgICAgICAgLndpdGhGaWVsZHMoe0MyRihtU2FtcGxlUmF0ZSwgdmFsdWUpLmluUmFuZ2UoODAwMCwgOTYwMDApfSkKKyAgICAgICAgICAgICAgICAud2l0aFNldHRlcigoU2V0dGVyPGRlY2x0eXBlKCptU2FtcGxlUmF0ZSk+OjpTdHJpY3RWYWx1ZVdpdGhOb0RlcHMpKQorICAgICAgICAgICAgICAgIC5idWlsZCgpKTsKKworICAgICAgICBhZGRQYXJhbWV0ZXIoCisgICAgICAgICAgICAgICAgRGVmaW5lUGFyYW0obUNoYW5uZWxDb3VudCwgQzJfTkFNRV9TVFJFQU1fQ0hBTk5FTF9DT1VOVF9TRVRUSU5HKQorICAgICAgICAgICAgICAgIC53aXRoRGVmYXVsdChuZXcgQzJTdHJlYW1DaGFubmVsQ291bnRJbmZvOjpvdXRwdXQoMHUsIDEpKQorICAgICAgICAgICAgICAgIC53aXRoRmllbGRzKHtDMkYobUNoYW5uZWxDb3VudCwgdmFsdWUpLmluUmFuZ2UoMSwgOCl9KQorICAgICAgICAgICAgICAgIC53aXRoU2V0dGVyKFNldHRlcjxkZWNsdHlwZSgqbUNoYW5uZWxDb3VudCk+OjpTdHJpY3RWYWx1ZVdpdGhOb0RlcHMpCisgICAgICAgICAgICAgICAgLmJ1aWxkKCkpOworCisgICAgICAgIGFkZFBhcmFtZXRlcigKKyAgICAgICAgICAgICAgICBEZWZpbmVQYXJhbShtQml0cmF0ZSwgQzJfTkFNRV9TVFJFQU1fQklUUkFURV9TRVRUSU5HKQorICAgICAgICAgICAgICAgIC53aXRoRGVmYXVsdChuZXcgQzJCaXRyYXRlVHVuaW5nOjppbnB1dCgwdSwgNjQwMDApKQorICAgICAgICAgICAgICAgIC53aXRoRmllbGRzKHtDMkYobUJpdHJhdGUsIHZhbHVlKS5pblJhbmdlKDMyMDAwLCA1MDAwMDApfSkKKyAgICAgICAgICAgICAgICAud2l0aFNldHRlcihTZXR0ZXI8ZGVjbHR5cGUoKm1CaXRyYXRlKT46Ok5vblN0cmljdFZhbHVlV2l0aE5vRGVwcykKKyAgICAgICAgICAgICAgICAuYnVpbGQoKSk7CisKKyAgICAgICAgYWRkUGFyYW1ldGVyKAorICAgICAgICAgICAgICAgIERlZmluZVBhcmFtKG1JbnB1dE1heEJ1ZlNpemUsIEMyX1BBUkFNS0VZX0lOUFVUX01BWF9CVUZGRVJfU0laRSkKKyAgICAgICAgICAgICAgICAud2l0aENvbnN0VmFsdWUobmV3IEMyU3RyZWFtTWF4QnVmZmVyU2l6ZUluZm86OmlucHV0KDB1LCA4MTkyICogMiAqIHNpemVvZihpbnQxNl90KSkpCisgICAgICAgICAgICAgICAgLmJ1aWxkKCkpOworICAgIH0KKworcHJpdmF0ZToKKyAgICBzdGQ6OnNoYXJlZF9wdHI8QzJTdHJlYW1Gb3JtYXRDb25maWc6OmlucHV0PiBtSW5wdXRGb3JtYXQ7CisgICAgc3RkOjpzaGFyZWRfcHRyPEMyU3RyZWFtRm9ybWF0Q29uZmlnOjpvdXRwdXQ+IG1PdXRwdXRGb3JtYXQ7CisgICAgc3RkOjpzaGFyZWRfcHRyPEMyUG9ydE1pbWVDb25maWc6OmlucHV0PiBtSW5wdXRNZWRpYVR5cGU7CisgICAgc3RkOjpzaGFyZWRfcHRyPEMyUG9ydE1pbWVDb25maWc6Om91dHB1dD4gbU91dHB1dE1lZGlhVHlwZTsKKyAgICBzdGQ6OnNoYXJlZF9wdHI8QzJTdHJlYW1TYW1wbGVSYXRlSW5mbzo6b3V0cHV0PiBtU2FtcGxlUmF0ZTsKKyAgICBzdGQ6OnNoYXJlZF9wdHI8QzJTdHJlYW1DaGFubmVsQ291bnRJbmZvOjpvdXRwdXQ+IG1DaGFubmVsQ291bnQ7CisgICAgc3RkOjpzaGFyZWRfcHRyPEMyQml0cmF0ZVR1bmluZzo6aW5wdXQ+IG1CaXRyYXRlOworICAgIHN0ZDo6c2hhcmVkX3B0cjxDMlN0cmVhbU1heEJ1ZmZlclNpemVJbmZvOjppbnB1dD4gbUlucHV0TWF4QnVmU2l6ZTsKK307CisKK0MyU29mdFZvcmJpc0RlYzo6QzJTb2Z0Vm9yYmlzRGVjKAorICAgICAgICBjb25zdCBjaGFyICpuYW1lLAorICAgICAgICBjMl9ub2RlX2lkX3QgaWQsCisgICAgICAgIGNvbnN0IHN0ZDo6c2hhcmVkX3B0cjxJbnRmSW1wbD4gJmludGZJbXBsKQorICAgIDogU2ltcGxlQzJDb21wb25lbnQoc3RkOjptYWtlX3NoYXJlZDxTaW1wbGVJbnRlcmZhY2U8SW50ZkltcGw+PihuYW1lLCBpZCwgaW50ZkltcGwpKSwKKyAgICAgIG1JbnRmKGludGZJbXBsKSwKKyAgICAgIG1TdGF0ZShudWxscHRyKSwKKyAgICAgIG1WaShudWxscHRyKSB7Cit9CisKK0MyU29mdFZvcmJpc0RlYzo6fkMyU29mdFZvcmJpc0RlYygpIHsKKyAgICBvblJlbGVhc2UoKTsKK30KKworYzJfc3RhdHVzX3QgQzJTb2Z0Vm9yYmlzRGVjOjpvbkluaXQoKSB7CisgICAgc3RhdHVzX3QgZXJyID0gaW5pdERlY29kZXIoKTsKKyAgICByZXR1cm4gZXJyID09IE9LID8gQzJfT0sgOiBDMl9OT19NRU1PUlk7Cit9CisKK2MyX3N0YXR1c190IEMyU29mdFZvcmJpc0RlYzo6b25TdG9wKCkgeworICAgIGlmIChtU3RhdGUpIHsKKyAgICAgICAgdm9yYmlzX2RzcF9jbGVhcihtU3RhdGUpOworICAgICAgICBkZWxldGUgbVN0YXRlOworICAgICAgICBtU3RhdGUgPSBudWxscHRyOworICAgIH0KKworICAgIGlmIChtVmkpIHsKKyAgICAgICAgdm9yYmlzX2luZm9fY2xlYXIobVZpKTsKKyAgICAgICAgZGVsZXRlIG1WaTsKKyAgICAgICAgbVZpID0gbnVsbHB0cjsKKyAgICB9CisgICAgbU51bUZyYW1lc0xlZnRPblBhZ2UgPSAtMTsKKyAgICBtU2lnbmFsbGVkT3V0cHV0RW9zID0gZmFsc2U7CisgICAgbVNpZ25hbGxlZEVycm9yID0gZmFsc2U7CisKKyAgICByZXR1cm4gKGluaXREZWNvZGVyKCkgPT0gT0sgPyBDMl9PSyA6IEMyX0NPUlJVUFRFRCk7Cit9CisKK3ZvaWQgQzJTb2Z0Vm9yYmlzRGVjOjpvblJlc2V0KCkgeworICAgICh2b2lkKW9uU3RvcCgpOworfQorCit2b2lkIEMyU29mdFZvcmJpc0RlYzo6b25SZWxlYXNlKCkgeworICAgIGlmIChtU3RhdGUpIHsKKyAgICAgICAgdm9yYmlzX2RzcF9jbGVhcihtU3RhdGUpOworICAgICAgICBkZWxldGUgbVN0YXRlOworICAgICAgICBtU3RhdGUgPSBudWxscHRyOworICAgIH0KKworICAgIGlmIChtVmkpIHsKKyAgICAgICAgdm9yYmlzX2luZm9fY2xlYXIobVZpKTsKKyAgICAgICAgZGVsZXRlIG1WaTsKKyAgICAgICAgbVZpID0gbnVsbHB0cjsKKyAgICB9Cit9CisKK3N0YXR1c190IEMyU29mdFZvcmJpc0RlYzo6aW5pdERlY29kZXIoKSB7CisgICAgbVZpID0gbmV3IHZvcmJpc19pbmZve307CisgICAgaWYgKCFtVmkpIHJldHVybiBOT19NRU1PUlk7CisgICAgdm9yYmlzX2luZm9fY2xlYXIobVZpKTsKKworICAgIG1TdGF0ZSA9IG5ldyB2b3JiaXNfZHNwX3N0YXRle307CisgICAgaWYgKCFtU3RhdGUpIHJldHVybiBOT19NRU1PUlk7CisgICAgdm9yYmlzX2RzcF9jbGVhcihtU3RhdGUpOworCisgICAgbU51bUZyYW1lc0xlZnRPblBhZ2UgPSAtMTsKKyAgICBtU2lnbmFsbGVkRXJyb3IgPSBmYWxzZTsKKyAgICBtU2lnbmFsbGVkT3V0cHV0RW9zID0gZmFsc2U7CisgICAgbUluZm9VbnBhY2tlZCA9IGZhbHNlOworICAgIG1Cb29rc1VucGFja2VkID0gZmFsc2U7CisgICAgcmV0dXJuIE9LOworfQorCitjMl9zdGF0dXNfdCBDMlNvZnRWb3JiaXNEZWM6Om9uRmx1c2hfc20oKSB7CisgICAgbU51bUZyYW1lc0xlZnRPblBhZ2UgPSAtMTsKKyAgICBtU2lnbmFsbGVkT3V0cHV0RW9zID0gZmFsc2U7CisgICAgaWYgKG1TdGF0ZSkgdm9yYmlzX2RzcF9yZXN0YXJ0KG1TdGF0ZSk7CisKKyAgICByZXR1cm4gQzJfT0s7Cit9CisKK2MyX3N0YXR1c190IEMyU29mdFZvcmJpc0RlYzo6ZHJhaW4oCisgICAgICAgIHVpbnQzMl90IGRyYWluTW9kZSwKKyAgICAgICAgY29uc3Qgc3RkOjpzaGFyZWRfcHRyPEMyQmxvY2tQb29sPiAmcG9vbCkgeworICAgICh2b2lkKSBwb29sOworICAgIGlmIChkcmFpbk1vZGUgPT0gTk9fRFJBSU4pIHsKKyAgICAgICAgQUxPR1coImRyYWluIHdpdGggTk9fRFJBSU46IG5vLW9wIik7CisgICAgICAgIHJldHVybiBDMl9PSzsKKyAgICB9CisgICAgaWYgKGRyYWluTW9kZSA9PSBEUkFJTl9DSEFJTikgeworICAgICAgICBBTE9HVygiRFJBSU5fQ0hBSU4gbm90IHN1cHBvcnRlZCIpOworICAgICAgICByZXR1cm4gQzJfT01JVFRFRDsKKyAgICB9CisKKyAgICByZXR1cm4gQzJfT0s7Cit9CisKK3N0YXRpYyB2b2lkIGZpbGxFbXB0eVdvcmsoY29uc3Qgc3RkOjp1bmlxdWVfcHRyPEMyV29yaz4gJndvcmspIHsKKyAgICB3b3JrLT53b3JrbGV0cy5mcm9udCgpLT5vdXRwdXQuZmxhZ3MgPSB3b3JrLT5pbnB1dC5mbGFnczsKKyAgICB3b3JrLT53b3JrbGV0cy5mcm9udCgpLT5vdXRwdXQuYnVmZmVycy5jbGVhcigpOworICAgIHdvcmstPndvcmtsZXRzLmZyb250KCktPm91dHB1dC5vcmRpbmFsID0gd29yay0+aW5wdXQub3JkaW5hbDsKKyAgICB3b3JrLT53b3JrbGV0c1Byb2Nlc3NlZCA9IDF1OworfQorCitzdGF0aWMgdm9pZCBtYWtlQml0UmVhZGVyKAorICAgICAgICBjb25zdCB2b2lkICpkYXRhLCBzaXplX3Qgc2l6ZSwKKyAgICAgICAgb2dnX2J1ZmZlciAqYnVmLCBvZ2dfcmVmZXJlbmNlICpyZWYsIG9nZ3BhY2tfYnVmZmVyICpiaXRzKSB7CisgICAgYnVmLT5kYXRhID0gKHVpbnQ4X3QgKilkYXRhOworICAgIGJ1Zi0+c2l6ZSA9IHNpemU7CisgICAgYnVmLT5yZWZjb3VudCA9IDE7CisgICAgYnVmLT5wdHIub3duZXIgPSBudWxscHRyOworCisgICAgcmVmLT5idWZmZXIgPSBidWY7CisgICAgcmVmLT5iZWdpbiA9IDA7CisgICAgcmVmLT5sZW5ndGggPSBzaXplOworICAgIHJlZi0+bmV4dCA9IG51bGxwdHI7CisKKyAgICBvZ2dwYWNrX3JlYWRpbml0KGJpdHMsIHJlZik7Cit9CisKKy8vIChDSEVDSyEpIG11bHRpZnJhbWUgaXMgdHJpY2t5LiBkZWNvZGUgY2FsbCBkb2VzbnQgcmV0dXJuIHRoZSBudW1iZXIgb2YgYnl0ZXMKKy8vIGNvbnN1bWVkIGJ5IHRoZSBjb21wb25lbnQuIEFsc28gaXQgaXMgdW5jbGVhciB3aHkgbnVtUGFnZUZyYW1lcyBpcyBiZWluZworLy8gdGFnZ2VkIGF0IHRoZSBlbmQgb2YgaW5wdXQgYnVmZmVycyBmb3IgbmV3IHBhZ2VzLiBSZWZlciBsaW5lcyAyOTctMzAwIGluCisvLyBTaW1wbGVEZWNvZGluZ1NvdXJjZS5jcHAKK3ZvaWQgQzJTb2Z0Vm9yYmlzRGVjOjpwcm9jZXNzKAorICAgICAgICBjb25zdCBzdGQ6OnVuaXF1ZV9wdHI8QzJXb3JrPiAmd29yaywKKyAgICAgICAgY29uc3Qgc3RkOjpzaGFyZWRfcHRyPEMyQmxvY2tQb29sPiAmcG9vbCkgeworICAgIC8vIEluaXRpYWxpemUgb3V0cHV0IHdvcmsKKyAgICB3b3JrLT5yZXN1bHQgPSBDMl9PSzsKKyAgICB3b3JrLT53b3JrbGV0c1Byb2Nlc3NlZCA9IDF1OworICAgIHdvcmstPndvcmtsZXRzLmZyb250KCktPm91dHB1dC5jb25maWdVcGRhdGUuY2xlYXIoKTsKKyAgICB3b3JrLT53b3JrbGV0cy5mcm9udCgpLT5vdXRwdXQuZmxhZ3MgPSB3b3JrLT5pbnB1dC5mbGFnczsKKworICAgIGlmIChtU2lnbmFsbGVkRXJyb3IgfHwgbVNpZ25hbGxlZE91dHB1dEVvcykgeworICAgICAgICB3b3JrLT5yZXN1bHQgPSBDMl9CQURfVkFMVUU7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBib29sIGVvcyA9ICgod29yay0+aW5wdXQuZmxhZ3MgJiBDMkZyYW1lRGF0YTo6RkxBR19FTkRfT0ZfU1RSRUFNKSAhPSAwKTsKKyAgICBzaXplX3QgaW5PZmZzZXQgPSAwdTsKKyAgICBzaXplX3QgaW5TaXplID0gMHU7CisgICAgQzJSZWFkVmlldyByVmlldyA9IG1EdW1teVJlYWRWaWV3OworICAgIGlmICghd29yay0+aW5wdXQuYnVmZmVycy5lbXB0eSgpKSB7CisgICAgICAgIHJWaWV3ID0gd29yay0+aW5wdXQuYnVmZmVyc1swXS0+ZGF0YSgpLmxpbmVhckJsb2NrcygpLmZyb250KCkubWFwKCkuZ2V0KCk7CisgICAgICAgIGluU2l6ZSA9IHJWaWV3LmNhcGFjaXR5KCk7CisgICAgICAgIGlmIChpblNpemUgJiYgclZpZXcuZXJyb3IoKSkgeworICAgICAgICAgICAgQUxPR0UoInJlYWQgdmlldyBtYXAgZmFpbGVkICVkIiwgclZpZXcuZXJyb3IoKSk7CisgICAgICAgICAgICB3b3JrLT5yZXN1bHQgPSByVmlldy5lcnJvcigpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgfQorCisgICAgaWYgKGluU2l6ZSA9PSAwKSB7CisgICAgICAgIGZpbGxFbXB0eVdvcmsod29yayk7CisgICAgICAgIGlmIChlb3MpIHsKKyAgICAgICAgICAgIG1TaWduYWxsZWRPdXRwdXRFb3MgPSB0cnVlOworICAgICAgICAgICAgQUxPR1YoInNpZ25hbGxlZCBFT1MiKTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgQUxPR1YoImluIGJ1ZmZlciBhdHRyLiBzaXplICV6dSB0aW1lc3RhbXAgJWQgZnJhbWVpbmRleCAlZCIsIGluU2l6ZSwKKyAgICAgICAgICAoaW50KXdvcmstPmlucHV0Lm9yZGluYWwudGltZXN0YW1wLnBlZWt1KCksIChpbnQpd29yay0+aW5wdXQub3JkaW5hbC5mcmFtZUluZGV4LnBlZWt1KCkpOworICAgIGNvbnN0IHVpbnQ4X3QgKmRhdGEgPSByVmlldy5kYXRhKCkgKyBpbk9mZnNldDsKKyAgICBpbnQzMl90IG51bUNoYW5uZWxzICA9IG1WaS0+Y2hhbm5lbHM7CisgICAgaW50MzJfdCBzYW1wbGluZ1JhdGUgPSBtVmktPnJhdGU7CisgICAgaWYgKGluU2l6ZSA+IDcgJiYgIW1lbWNtcCgmZGF0YVsxXSwgInZvcmJpcyIsIDYpKSB7CisgICAgICAgIGlmICgoZGF0YVswXSAhPSAxKSAmJiAoZGF0YVswXSAhPSA1KSkgeworICAgICAgICAgICAgQUxPR0UoInVuZXhwZWN0ZWQgdHlwZSByZWNlaXZlZCAlZCIsIGRhdGFbMF0pOworICAgICAgICAgICAgbVNpZ25hbGxlZEVycm9yID0gdHJ1ZTsKKyAgICAgICAgICAgIHdvcmstPnJlc3VsdCA9IEMyX0NPUlJVUFRFRDsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIG9nZ19idWZmZXIgYnVmOworICAgICAgICBvZ2dfcmVmZXJlbmNlIHJlZjsKKyAgICAgICAgb2dncGFja19idWZmZXIgYml0czsKKworICAgICAgICAvLyBza2lwIDcgPHR5cGUgKyAidm9yYmlzIj4gYnl0ZXMKKyAgICAgICAgbWFrZUJpdFJlYWRlcigoY29uc3QgdWludDhfdCAqKWRhdGEgKyA3LCBpblNpemUgLSA3LCAmYnVmLCAmcmVmLCAmYml0cyk7CisgICAgICAgIGlmIChkYXRhWzBdID09IDEpIHsKKyAgICAgICAgICAgIHZvcmJpc19pbmZvX2luaXQobVZpKTsKKyAgICAgICAgICAgIGlmICgwICE9IF92b3JiaXNfdW5wYWNrX2luZm8obVZpLCAmYml0cykpIHsKKyAgICAgICAgICAgICAgICBBTE9HRSgiRW5jb3VudGVyZWQgZXJyb3Igd2hpbGUgdW5wYWNraW5nIGluZm8iKTsKKyAgICAgICAgICAgICAgICBtU2lnbmFsbGVkRXJyb3IgPSB0cnVlOworICAgICAgICAgICAgICAgIHdvcmstPnJlc3VsdCA9IEMyX0NPUlJVUFRFRDsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAobVZpLT5yYXRlICE9IHNhbXBsaW5nUmF0ZSB8fAorICAgICAgICAgICAgICAgICAgICBtVmktPmNoYW5uZWxzICE9IG51bUNoYW5uZWxzKSB7CisgICAgICAgICAgICAgICAgQUxPR1YoInZvcmJpczogcmF0ZS9jaGFubmVscyBjaGFuZ2VkOiAlbGQvJWQiLCBtVmktPnJhdGUsIG1WaS0+Y2hhbm5lbHMpOworICAgICAgICAgICAgICAgIHNhbXBsaW5nUmF0ZSA9IG1WaS0+cmF0ZTsKKyAgICAgICAgICAgICAgICBudW1DaGFubmVscyA9IG1WaS0+Y2hhbm5lbHM7CisKKyAgICAgICAgICAgICAgICBDMlN0cmVhbVNhbXBsZVJhdGVJbmZvOjpvdXRwdXQgc2FtcGxlUmF0ZUluZm8oMHUsIHNhbXBsaW5nUmF0ZSk7CisgICAgICAgICAgICAgICAgQzJTdHJlYW1DaGFubmVsQ291bnRJbmZvOjpvdXRwdXQgY2hhbm5lbENvdW50SW5mbygwdSwgbnVtQ2hhbm5lbHMpOworICAgICAgICAgICAgICAgIHN0ZDo6dmVjdG9yPHN0ZDo6dW5pcXVlX3B0cjxDMlNldHRpbmdSZXN1bHQ+PiBmYWlsdXJlczsKKyAgICAgICAgICAgICAgICBjMl9zdGF0dXNfdCBlcnIgPSBtSW50Zi0+Y29uZmlnKAorICAgICAgICAgICAgICAgICAgICAgICAgeyAmc2FtcGxlUmF0ZUluZm8sICZjaGFubmVsQ291bnRJbmZvIH0sCisgICAgICAgICAgICAgICAgICAgICAgICBDMl9NQVlfQkxPQ0ssCisgICAgICAgICAgICAgICAgICAgICAgICAmZmFpbHVyZXMpOworICAgICAgICAgICAgICAgIGlmIChlcnIgPT0gT0spIHsKKyAgICAgICAgICAgICAgICAgICAgd29yay0+d29ya2xldHMuZnJvbnQoKS0+b3V0cHV0LmNvbmZpZ1VwZGF0ZS5wdXNoX2JhY2soQzJQYXJhbTo6Q29weShzYW1wbGVSYXRlSW5mbykpOworICAgICAgICAgICAgICAgICAgICB3b3JrLT53b3JrbGV0cy5mcm9udCgpLT5vdXRwdXQuY29uZmlnVXBkYXRlLnB1c2hfYmFjayhDMlBhcmFtOjpDb3B5KGNoYW5uZWxDb3VudEluZm8pKTsKKyAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICBBTE9HRSgiQ29uZmlnIFVwZGF0ZSBmYWlsZWQiKTsKKyAgICAgICAgICAgICAgICAgICAgbVNpZ25hbGxlZEVycm9yID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAgd29yay0+cmVzdWx0ID0gQzJfQ09SUlVQVEVEOworICAgICAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgbUluZm9VbnBhY2tlZCA9IHRydWU7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBpZiAoIW1JbmZvVW5wYWNrZWQpIHsKKyAgICAgICAgICAgICAgICBBTE9HRSgiRGF0YSB3aXRoIHR5cGU6NSBzZW50IGJlZm9yZSBzZW5kaW5nIHR5cGU6MSIpOworICAgICAgICAgICAgICAgIG1TaWduYWxsZWRFcnJvciA9IHRydWU7CisgICAgICAgICAgICAgICAgd29yay0+cmVzdWx0ID0gQzJfQ09SUlVQVEVEOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmICgwICE9IF92b3JiaXNfdW5wYWNrX2Jvb2tzKG1WaSwgJmJpdHMpKSB7CisgICAgICAgICAgICAgICAgQUxPR0UoIkVuY291bnRlcmVkIGVycm9yIHdoaWxlIHVucGFja2luZyBib29rcyIpOworICAgICAgICAgICAgICAgIG1TaWduYWxsZWRFcnJvciA9IHRydWU7CisgICAgICAgICAgICAgICAgd29yay0+cmVzdWx0ID0gQzJfQ09SUlVQVEVEOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmICgwICE9IHZvcmJpc19kc3BfaW5pdChtU3RhdGUsIG1WaSkpIHsKKyAgICAgICAgICAgICAgICBBTE9HRSgiRW5jb3VudGVyZWQgZXJyb3Igd2hpbGUgZHNwIGluaXQiKTsKKyAgICAgICAgICAgICAgICBtU2lnbmFsbGVkRXJyb3IgPSB0cnVlOworICAgICAgICAgICAgICAgIHdvcmstPnJlc3VsdCA9IEMyX0NPUlJVUFRFRDsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisgICAgICAgICAgICBtQm9va3NVbnBhY2tlZCA9IHRydWU7CisgICAgICAgIH0KKyAgICAgICAgZmlsbEVtcHR5V29yayh3b3JrKTsKKyAgICAgICAgaWYgKGVvcykgeworICAgICAgICAgICAgbVNpZ25hbGxlZE91dHB1dEVvcyA9IHRydWU7CisgICAgICAgICAgICBBTE9HVigic2lnbmFsbGVkIEVPUyIpOworICAgICAgICB9CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAoIW1JbmZvVW5wYWNrZWQgfHwgIW1Cb29rc1VucGFja2VkKSB7CisgICAgICAgIEFMT0dFKCJNaXNzaW5nIENPREVDX0NPTkZJRyBkYXRhIG1JbmZvVW5wYWNrZWQ6ICVkIG1Cb29rc1VucGFjayAlZCIsIG1JbmZvVW5wYWNrZWQsIG1Cb29rc1VucGFja2VkKTsKKyAgICAgICAgbVNpZ25hbGxlZEVycm9yID0gdHJ1ZTsKKyAgICAgICAgd29yay0+cmVzdWx0ID0gQzJfQ09SUlVQVEVEOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaW50MzJfdCBudW1QYWdlRnJhbWVzID0gMDsKKyAgICBpZiAoaW5TaXplIDwgc2l6ZW9mKG51bVBhZ2VGcmFtZXMpKSB7CisgICAgICAgIEFMT0dFKCJpbnB1dCBoZWFkZXIgaGFzIHNpemUgJXp1LCBleHBlY3RlZCAlenUiLCBpblNpemUsIHNpemVvZihudW1QYWdlRnJhbWVzKSk7CisgICAgICAgIG1TaWduYWxsZWRFcnJvciA9IHRydWU7CisgICAgICAgIHdvcmstPnJlc3VsdCA9IEMyX0NPUlJVUFRFRDsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBtZW1jcHkoJm51bVBhZ2VGcmFtZXMsIGRhdGEgKyBpblNpemUgLSBzaXplb2YobnVtUGFnZUZyYW1lcyksIHNpemVvZihudW1QYWdlRnJhbWVzKSk7CisgICAgaW5TaXplIC09IHNpemVvZihudW1QYWdlRnJhbWVzKTsKKyAgICBpZiAobnVtUGFnZUZyYW1lcyA+PSAwKSB7CisgICAgICAgIG1OdW1GcmFtZXNMZWZ0T25QYWdlID0gbnVtUGFnZUZyYW1lczsKKyAgICB9CisKKyAgICBvZ2dfYnVmZmVyIGJ1ZjsKKyAgICBidWYuZGF0YSA9IGNvbnN0X2Nhc3Q8dW5zaWduZWQgY2hhcio+KGRhdGEpOworICAgIGJ1Zi5zaXplID0gaW5TaXplOworICAgIGJ1Zi5yZWZjb3VudCA9IDE7CisgICAgYnVmLnB0ci5vd25lciA9IG51bGxwdHI7CisKKyAgICBvZ2dfcmVmZXJlbmNlIHJlZjsKKyAgICByZWYuYnVmZmVyID0gJmJ1ZjsKKyAgICByZWYuYmVnaW4gPSAwOworICAgIHJlZi5sZW5ndGggPSBidWYuc2l6ZTsKKyAgICByZWYubmV4dCA9IG51bGxwdHI7CisKKyAgICBvZ2dfcGFja2V0IHBhY2s7CisgICAgcGFjay5wYWNrZXQgPSAmcmVmOworICAgIHBhY2suYnl0ZXMgPSByZWYubGVuZ3RoOworICAgIHBhY2suYl9vX3MgPSAwOworICAgIHBhY2suZV9vX3MgPSAwOworICAgIHBhY2suZ3JhbnVsZXBvcyA9IDA7CisgICAgcGFjay5wYWNrZXRubyA9IDA7CisKKyAgICBzaXplX3QgbWF4U2FtcGxlc0luQnVmZmVyID0ga01heE51bVNhbXBsZXNQZXJDaGFubmVsICogbVZpLT5jaGFubmVsczsKKyAgICBzaXplX3Qgb3V0Q2FwYWNpdHkgPSAgbWF4U2FtcGxlc0luQnVmZmVyICogc2l6ZW9mKGludDE2X3QpOworICAgIHN0ZDo6c2hhcmVkX3B0cjxDMkxpbmVhckJsb2NrPiBibG9jazsKKyAgICBDMk1lbW9yeVVzYWdlIHVzYWdlID0geyBDMk1lbW9yeVVzYWdlOjpDUFVfUkVBRCwgQzJNZW1vcnlVc2FnZTo6Q1BVX1dSSVRFIH07CisgICAgYzJfc3RhdHVzX3QgZXJyID0gcG9vbC0+ZmV0Y2hMaW5lYXJCbG9jayhvdXRDYXBhY2l0eSwgdXNhZ2UsICZibG9jayk7CisgICAgaWYgKGVyciAhPSBDMl9PSykgeworICAgICAgICBBTE9HRSgiZmV0Y2hMaW5lYXJCbG9jayBmb3IgT3V0cHV0IGZhaWxlZCB3aXRoIHN0YXR1cyAlZCIsIGVycik7CisgICAgICAgIHdvcmstPnJlc3VsdCA9IEMyX05PX01FTU9SWTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBDMldyaXRlVmlldyB3VmlldyA9IGJsb2NrLT5tYXAoKS5nZXQoKTsKKyAgICBpZiAod1ZpZXcuZXJyb3IoKSkgeworICAgICAgICBBTE9HRSgid3JpdGUgdmlldyBtYXAgZmFpbGVkICVkIiwgd1ZpZXcuZXJyb3IoKSk7CisgICAgICAgIHdvcmstPnJlc3VsdCA9IHdWaWV3LmVycm9yKCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpbnQgbnVtRnJhbWVzID0gMDsKKyAgICBpbnQgcmV0ID0gdm9yYmlzX2RzcF9zeW50aGVzaXMobVN0YXRlLCAmcGFjaywgMSk7CisgICAgaWYgKDAgIT0gcmV0KSB7CisgICAgICAgIEFMT0dFKCJ2b3JiaXNfZHNwX3N5bnRoZXNpcyByZXR1cm5lZCAlZCIsIHJldCk7CisgICAgICAgIG1TaWduYWxsZWRFcnJvciA9IHRydWU7CisgICAgICAgIHdvcmstPnJlc3VsdCA9IEMyX0NPUlJVUFRFRDsKKyAgICAgICAgcmV0dXJuOworICAgIH0gZWxzZSB7CisgICAgICAgIG51bUZyYW1lcyA9IHZvcmJpc19kc3BfcGNtb3V0KAorICAgICAgICAgICAgICAgIG1TdGF0ZSwgIHJlaW50ZXJwcmV0X2Nhc3Q8aW50MTZfdCAqPiAod1ZpZXcuZGF0YSgpKSwKKyAgICAgICAgICAgICAgICBrTWF4TnVtU2FtcGxlc1BlckNoYW5uZWwpOworICAgICAgICBpZiAobnVtRnJhbWVzIDwgMCkgeworICAgICAgICAgICAgQUxPR0QoInZvcmJpc19kc3BfcGNtb3V0IHJldHVybmVkICVkIiwgbnVtRnJhbWVzKTsKKyAgICAgICAgICAgIG51bUZyYW1lcyA9IDA7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBpZiAobU51bUZyYW1lc0xlZnRPblBhZ2UgPj0gMCkgeworICAgICAgICBpZiAobnVtRnJhbWVzID4gbU51bUZyYW1lc0xlZnRPblBhZ2UpIHsKKyAgICAgICAgICAgIEFMT0dWKCJkaXNjYXJkaW5nICVkIGZyYW1lcyBhdCBlbmQgb2YgcGFnZSIsIG51bUZyYW1lcyAtIG1OdW1GcmFtZXNMZWZ0T25QYWdlKTsKKyAgICAgICAgICAgIG51bUZyYW1lcyA9IG1OdW1GcmFtZXNMZWZ0T25QYWdlOworICAgICAgICB9CisgICAgICAgIG1OdW1GcmFtZXNMZWZ0T25QYWdlIC09IG51bUZyYW1lczsKKyAgICB9CisKKyAgICBpZiAobnVtRnJhbWVzKSB7CisgICAgICAgIGludCBvdXRTaXplID0gbnVtRnJhbWVzICogc2l6ZW9mKGludDE2X3QpICogbVZpLT5jaGFubmVsczsKKworICAgICAgICB3b3JrLT53b3JrbGV0cy5mcm9udCgpLT5vdXRwdXQuZmxhZ3MgPSB3b3JrLT5pbnB1dC5mbGFnczsKKyAgICAgICAgd29yay0+d29ya2xldHMuZnJvbnQoKS0+b3V0cHV0LmJ1ZmZlcnMuY2xlYXIoKTsKKyAgICAgICAgd29yay0+d29ya2xldHMuZnJvbnQoKS0+b3V0cHV0LmJ1ZmZlcnMucHVzaF9iYWNrKGNyZWF0ZUxpbmVhckJ1ZmZlcihibG9jaywgMCwgb3V0U2l6ZSkpOworICAgICAgICB3b3JrLT53b3JrbGV0cy5mcm9udCgpLT5vdXRwdXQub3JkaW5hbCA9IHdvcmstPmlucHV0Lm9yZGluYWw7CisgICAgICAgIHdvcmstPndvcmtsZXRzUHJvY2Vzc2VkID0gMXU7CisgICAgfSBlbHNlIHsKKyAgICAgICAgZmlsbEVtcHR5V29yayh3b3JrKTsKKyAgICAgICAgYmxvY2sucmVzZXQoKTsKKyAgICB9CisgICAgaWYgKGVvcykgeworICAgICAgICBtU2lnbmFsbGVkT3V0cHV0RW9zID0gdHJ1ZTsKKyAgICAgICAgQUxPR1YoInNpZ25hbGxlZCBFT1MiKTsKKyAgICB9Cit9CisKK2NsYXNzIEMyU29mdFZvcmJpc0RlY0ZhY3RvcnkgOiBwdWJsaWMgQzJDb21wb25lbnRGYWN0b3J5IHsKK3B1YmxpYzoKKyAgICBDMlNvZnRWb3JiaXNEZWNGYWN0b3J5KCkgOiBtSGVscGVyKHN0ZDo6c3RhdGljX3BvaW50ZXJfY2FzdDxDMlJlZmxlY3RvckhlbHBlcj4oCisgICAgICAgICAgICBHZXRDb2RlYzJQbGF0Zm9ybUNvbXBvbmVudFN0b3JlKCktPmdldFBhcmFtUmVmbGVjdG9yKCkpKSB7CisgICAgfQorCisgICAgdmlydHVhbCBjMl9zdGF0dXNfdCBjcmVhdGVDb21wb25lbnQoCisgICAgICAgICAgICBjMl9ub2RlX2lkX3QgaWQsCisgICAgICAgICAgICBzdGQ6OnNoYXJlZF9wdHI8QzJDb21wb25lbnQ+KiBjb25zdCBjb21wb25lbnQsCisgICAgICAgICAgICBzdGQ6OmZ1bmN0aW9uPHZvaWQoQzJDb21wb25lbnQqKT4gZGVsZXRlcikgb3ZlcnJpZGUgeworICAgICAgICAqY29tcG9uZW50ID0gc3RkOjpzaGFyZWRfcHRyPEMyQ29tcG9uZW50PigKKyAgICAgICAgICAgICAgICBuZXcgQzJTb2Z0Vm9yYmlzRGVjKENPTVBPTkVOVF9OQU1FLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGQ6Om1ha2Vfc2hhcmVkPEMyU29mdFZvcmJpc0RlYzo6SW50ZkltcGw+KG1IZWxwZXIpKSwKKyAgICAgICAgICAgICAgICBkZWxldGVyKTsKKyAgICAgICAgcmV0dXJuIEMyX09LOworICAgIH0KKworICAgIHZpcnR1YWwgYzJfc3RhdHVzX3QgY3JlYXRlSW50ZXJmYWNlKAorICAgICAgICAgICAgYzJfbm9kZV9pZF90IGlkLAorICAgICAgICAgICAgc3RkOjpzaGFyZWRfcHRyPEMyQ29tcG9uZW50SW50ZXJmYWNlPiogY29uc3QgaW50ZXJmYWNlLAorICAgICAgICAgICAgc3RkOjpmdW5jdGlvbjx2b2lkKEMyQ29tcG9uZW50SW50ZXJmYWNlKik+IGRlbGV0ZXIpIG92ZXJyaWRlIHsKKyAgICAgICAgKmludGVyZmFjZSA9IHN0ZDo6c2hhcmVkX3B0cjxDMkNvbXBvbmVudEludGVyZmFjZT4oCisgICAgICAgICAgICAgICAgbmV3IFNpbXBsZUludGVyZmFjZTxDMlNvZnRWb3JiaXNEZWM6OkludGZJbXBsPigKKyAgICAgICAgICAgICAgICAgICAgICAgIENPTVBPTkVOVF9OQU1FLCBpZCwgc3RkOjptYWtlX3NoYXJlZDxDMlNvZnRWb3JiaXNEZWM6OkludGZJbXBsPihtSGVscGVyKSksCisgICAgICAgICAgICAgICAgZGVsZXRlcik7CisgICAgICAgIHJldHVybiBDMl9PSzsKKyAgICB9CisKKyAgICB2aXJ0dWFsIH5DMlNvZnRWb3JiaXNEZWNGYWN0b3J5KCkgb3ZlcnJpZGUgPSBkZWZhdWx0OworCitwcml2YXRlOgorICAgIHN0ZDo6c2hhcmVkX3B0cjxDMlJlZmxlY3RvckhlbHBlcj4gbUhlbHBlcjsKK307CisKK30gIC8vIG5hbWVzcGFjZSBhbmRyb2lkCisKK2V4dGVybiAiQyIgOjpDMkNvbXBvbmVudEZhY3RvcnkqIENyZWF0ZUNvZGVjMkZhY3RvcnkoKSB7CisgICAgQUxPR1YoImluICVzIiwgX19mdW5jX18pOworICAgIHJldHVybiBuZXcgOjphbmRyb2lkOjpDMlNvZnRWb3JiaXNEZWNGYWN0b3J5KCk7Cit9CisKK2V4dGVybiAiQyIgdm9pZCBEZXN0cm95Q29kZWMyRmFjdG9yeSg6OkMyQ29tcG9uZW50RmFjdG9yeSogZmFjdG9yeSkgeworICAgIEFMT0dWKCJpbiAlcyIsIF9fZnVuY19fKTsKKyAgICBkZWxldGUgZmFjdG9yeTsKK30KZGlmZiAtLWdpdCBhL21lZGlhL2NvZGVjMi9jb21wb25lbnRzL3ZvcmJpcy9DMlNvZnRWb3JiaXNEZWMuaCBiL21lZGlhL2NvZGVjMi9jb21wb25lbnRzL3ZvcmJpcy9DMlNvZnRWb3JiaXNEZWMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zYmY3MzI2Ci0tLSAvZGV2L251bGwKKysrIGIvbWVkaWEvY29kZWMyL2NvbXBvbmVudHMvdm9yYmlzL0MyU29mdFZvcmJpc0RlYy5oCkBAIC0wLDAgKzEsNzAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTggVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworCisjaWZuZGVmIEFORFJPSURfQzJfU09GVF9WT1JCSVNfREVDX0hfCisjZGVmaW5lIEFORFJPSURfQzJfU09GVF9WT1JCSVNfREVDX0hfCisKKyNpbmNsdWRlIDxTaW1wbGVDMkNvbXBvbmVudC5oPgorCisKK3N0cnVjdCB2b3JiaXNfZHNwX3N0YXRlOworc3RydWN0IHZvcmJpc19pbmZvOworCituYW1lc3BhY2UgYW5kcm9pZCB7CisKK3N0cnVjdCBDMlNvZnRWb3JiaXNEZWMgOiBwdWJsaWMgU2ltcGxlQzJDb21wb25lbnQgeworICAgIGNsYXNzIEludGZJbXBsOworCisgICAgQzJTb2Z0Vm9yYmlzRGVjKGNvbnN0IGNoYXIgKm5hbWUsIGMyX25vZGVfaWRfdCBpZCwKKyAgICAgICAgICAgICAgICAgY29uc3Qgc3RkOjpzaGFyZWRfcHRyPEludGZJbXBsPiAmaW50ZkltcGwpOworICAgIHZpcnR1YWwgfkMyU29mdFZvcmJpc0RlYygpOworCisgICAgLy8gRnJvbSBTaW1wbGVDMkNvbXBvbmVudAorICAgIGMyX3N0YXR1c190IG9uSW5pdCgpIG92ZXJyaWRlOworICAgIGMyX3N0YXR1c190IG9uU3RvcCgpIG92ZXJyaWRlOworICAgIHZvaWQgb25SZXNldCgpIG92ZXJyaWRlOworICAgIHZvaWQgb25SZWxlYXNlKCkgb3ZlcnJpZGU7CisgICAgYzJfc3RhdHVzX3Qgb25GbHVzaF9zbSgpIG92ZXJyaWRlOworICAgIHZvaWQgcHJvY2VzcygKKyAgICAgICAgICAgIGNvbnN0IHN0ZDo6dW5pcXVlX3B0cjxDMldvcms+ICZ3b3JrLAorICAgICAgICAgICAgY29uc3Qgc3RkOjpzaGFyZWRfcHRyPEMyQmxvY2tQb29sPiAmcG9vbCkgb3ZlcnJpZGU7CisgICAgYzJfc3RhdHVzX3QgZHJhaW4oCisgICAgICAgICAgICB1aW50MzJfdCBkcmFpbk1vZGUsCisgICAgICAgICAgICBjb25zdCBzdGQ6OnNoYXJlZF9wdHI8QzJCbG9ja1Bvb2w+ICZwb29sKSBvdmVycmlkZTsKKworIHByaXZhdGU6CisgICAgZW51bSB7CisgICAgICAgIGtNYXhOdW1TYW1wbGVzUGVyQ2hhbm5lbCA9IDgxOTIsCisgICAgfTsKKworICAgIHN0ZDo6c2hhcmVkX3B0cjxJbnRmSW1wbD4gbUludGY7CisgICAgdm9yYmlzX2RzcF9zdGF0ZSAqbVN0YXRlOworICAgIHZvcmJpc19pbmZvICptVmk7CisKKyAgICBpbnQzMl90IG1OdW1GcmFtZXNMZWZ0T25QYWdlOworICAgIGJvb2wgbVNpZ25hbGxlZEVycm9yOworICAgIGJvb2wgbVNpZ25hbGxlZE91dHB1dEVvczsKKyAgICBib29sIG1JbmZvVW5wYWNrZWQ7CisgICAgYm9vbCBtQm9va3NVbnBhY2tlZDsKKyAgICBzdGF0dXNfdCBpbml0RGVjb2RlcigpOworCisgICAgQzJfRE9fTk9UX0NPUFkoQzJTb2Z0Vm9yYmlzRGVjKTsKK307CisKK30gIC8vIG5hbWVzcGFjZSBhbmRyb2lkCisKKyNlbmRpZiAgLy8gQU5EUk9JRF9DMl9TT0ZUX1ZPUkJJU19ERUNfSF8KKwpkaWZmIC0tZ2l0IGEvbWVkaWEvY29kZWMyL2NvbXBvbmVudHMvdm9yYmlzL01PRFVMRV9MSUNFTlNFX0FQQUNIRTIgYi9tZWRpYS9jb2RlYzIvY29tcG9uZW50cy92b3JiaXMvTU9EVUxFX0xJQ0VOU0VfQVBBQ0hFMgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNjlkZTI5Ci0tLSAvZGV2L251bGwKKysrIGIvbWVkaWEvY29kZWMyL2NvbXBvbmVudHMvdm9yYmlzL01PRFVMRV9MSUNFTlNFX0FQQUNIRTIKZGlmZiAtLWdpdCBhL21lZGlhL2NvZGVjMi9jb21wb25lbnRzL3ZvcmJpcy9OT1RJQ0UgYi9tZWRpYS9jb2RlYzIvY29tcG9uZW50cy92b3JiaXMvTk9USUNFCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM1YjFlZmEKLS0tIC9kZXYvbnVsbAorKysgYi9tZWRpYS9jb2RlYzIvY29tcG9uZW50cy92b3JiaXMvTk9USUNFCkBAIC0wLDAgKzEsMTkwIEBACisKKyAgIENvcHlyaWdodCAoYykgMjAwNS0yMDA4LCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisKKyAgIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICAgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorCisgICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICAgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKworCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBcGFjaGUgTGljZW5zZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgVmVyc2lvbiAyLjAsIEphbnVhcnkgMjAwNAorICAgICAgICAgICAgICAgICAgICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzLworCisgICBURVJNUyBBTkQgQ09ORElUSU9OUyBGT1IgVVNFLCBSRVBST0RVQ1RJT04sIEFORCBESVNUUklCVVRJT04KKworICAgMS4gRGVmaW5pdGlvbnMuCisKKyAgICAgICJMaWNlbnNlIiBzaGFsbCBtZWFuIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBmb3IgdXNlLCByZXByb2R1Y3Rpb24sCisgICAgICBhbmQgZGlzdHJpYnV0aW9uIGFzIGRlZmluZWQgYnkgU2VjdGlvbnMgMSB0aHJvdWdoIDkgb2YgdGhpcyBkb2N1bWVudC4KKworICAgICAgIkxpY2Vuc29yIiBzaGFsbCBtZWFuIHRoZSBjb3B5cmlnaHQgb3duZXIgb3IgZW50aXR5IGF1dGhvcml6ZWQgYnkKKyAgICAgIHRoZSBjb3B5cmlnaHQgb3duZXIgdGhhdCBpcyBncmFudGluZyB0aGUgTGljZW5zZS4KKworICAgICAgIkxlZ2FsIEVudGl0eSIgc2hhbGwgbWVhbiB0aGUgdW5pb24gb2YgdGhlIGFjdGluZyBlbnRpdHkgYW5kIGFsbAorICAgICAgb3RoZXIgZW50aXRpZXMgdGhhdCBjb250cm9sLCBhcmUgY29udHJvbGxlZCBieSwgb3IgYXJlIHVuZGVyIGNvbW1vbgorICAgICAgY29udHJvbCB3aXRoIHRoYXQgZW50aXR5LiBGb3IgdGhlIHB1cnBvc2VzIG9mIHRoaXMgZGVmaW5pdGlvbiwKKyAgICAgICJjb250cm9sIiBtZWFucyAoaSkgdGhlIHBvd2VyLCBkaXJlY3Qgb3IgaW5kaXJlY3QsIHRvIGNhdXNlIHRoZQorICAgICAgZGlyZWN0aW9uIG9yIG1hbmFnZW1lbnQgb2Ygc3VjaCBlbnRpdHksIHdoZXRoZXIgYnkgY29udHJhY3Qgb3IKKyAgICAgIG90aGVyd2lzZSwgb3IgKGlpKSBvd25lcnNoaXAgb2YgZmlmdHkgcGVyY2VudCAoNTAlKSBvciBtb3JlIG9mIHRoZQorICAgICAgb3V0c3RhbmRpbmcgc2hhcmVzLCBvciAoaWlpKSBiZW5lZmljaWFsIG93bmVyc2hpcCBvZiBzdWNoIGVudGl0eS4KKworICAgICAgIllvdSIgKG9yICJZb3VyIikgc2hhbGwgbWVhbiBhbiBpbmRpdmlkdWFsIG9yIExlZ2FsIEVudGl0eQorICAgICAgZXhlcmNpc2luZyBwZXJtaXNzaW9ucyBncmFudGVkIGJ5IHRoaXMgTGljZW5zZS4KKworICAgICAgIlNvdXJjZSIgZm9ybSBzaGFsbCBtZWFuIHRoZSBwcmVmZXJyZWQgZm9ybSBmb3IgbWFraW5nIG1vZGlmaWNhdGlvbnMsCisgICAgICBpbmNsdWRpbmcgYnV0IG5vdCBsaW1pdGVkIHRvIHNvZnR3YXJlIHNvdXJjZSBjb2RlLCBkb2N1bWVudGF0aW9uCisgICAgICBzb3VyY2UsIGFuZCBjb25maWd1cmF0aW9uIGZpbGVzLgorCisgICAgICAiT2JqZWN0IiBmb3JtIHNoYWxsIG1lYW4gYW55IGZvcm0gcmVzdWx0aW5nIGZyb20gbWVjaGFuaWNhbAorICAgICAgdHJhbnNmb3JtYXRpb24gb3IgdHJhbnNsYXRpb24gb2YgYSBTb3VyY2UgZm9ybSwgaW5jbHVkaW5nIGJ1dAorICAgICAgbm90IGxpbWl0ZWQgdG8gY29tcGlsZWQgb2JqZWN0IGNvZGUsIGdlbmVyYXRlZCBkb2N1bWVudGF0aW9uLAorICAgICAgYW5kIGNvbnZlcnNpb25zIHRvIG90aGVyIG1lZGlhIHR5cGVzLgorCisgICAgICAiV29yayIgc2hhbGwgbWVhbiB0aGUgd29yayBvZiBhdXRob3JzaGlwLCB3aGV0aGVyIGluIFNvdXJjZSBvcgorICAgICAgT2JqZWN0IGZvcm0sIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSBMaWNlbnNlLCBhcyBpbmRpY2F0ZWQgYnkgYQorICAgICAgY29weXJpZ2h0IG5vdGljZSB0aGF0IGlzIGluY2x1ZGVkIGluIG9yIGF0dGFjaGVkIHRvIHRoZSB3b3JrCisgICAgICAoYW4gZXhhbXBsZSBpcyBwcm92aWRlZCBpbiB0aGUgQXBwZW5kaXggYmVsb3cpLgorCisgICAgICAiRGVyaXZhdGl2ZSBXb3JrcyIgc2hhbGwgbWVhbiBhbnkgd29yaywgd2hldGhlciBpbiBTb3VyY2Ugb3IgT2JqZWN0CisgICAgICBmb3JtLCB0aGF0IGlzIGJhc2VkIG9uIChvciBkZXJpdmVkIGZyb20pIHRoZSBXb3JrIGFuZCBmb3Igd2hpY2ggdGhlCisgICAgICBlZGl0b3JpYWwgcmV2aXNpb25zLCBhbm5vdGF0aW9ucywgZWxhYm9yYXRpb25zLCBvciBvdGhlciBtb2RpZmljYXRpb25zCisgICAgICByZXByZXNlbnQsIGFzIGEgd2hvbGUsIGFuIG9yaWdpbmFsIHdvcmsgb2YgYXV0aG9yc2hpcC4gRm9yIHRoZSBwdXJwb3NlcworICAgICAgb2YgdGhpcyBMaWNlbnNlLCBEZXJpdmF0aXZlIFdvcmtzIHNoYWxsIG5vdCBpbmNsdWRlIHdvcmtzIHRoYXQgcmVtYWluCisgICAgICBzZXBhcmFibGUgZnJvbSwgb3IgbWVyZWx5IGxpbmsgKG9yIGJpbmQgYnkgbmFtZSkgdG8gdGhlIGludGVyZmFjZXMgb2YsCisgICAgICB0aGUgV29yayBhbmQgRGVyaXZhdGl2ZSBXb3JrcyB0aGVyZW9mLgorCisgICAgICAiQ29udHJpYnV0aW9uIiBzaGFsbCBtZWFuIGFueSB3b3JrIG9mIGF1dGhvcnNoaXAsIGluY2x1ZGluZworICAgICAgdGhlIG9yaWdpbmFsIHZlcnNpb24gb2YgdGhlIFdvcmsgYW5kIGFueSBtb2RpZmljYXRpb25zIG9yIGFkZGl0aW9ucworICAgICAgdG8gdGhhdCBXb3JrIG9yIERlcml2YXRpdmUgV29ya3MgdGhlcmVvZiwgdGhhdCBpcyBpbnRlbnRpb25hbGx5CisgICAgICBzdWJtaXR0ZWQgdG8gTGljZW5zb3IgZm9yIGluY2x1c2lvbiBpbiB0aGUgV29yayBieSB0aGUgY29weXJpZ2h0IG93bmVyCisgICAgICBvciBieSBhbiBpbmRpdmlkdWFsIG9yIExlZ2FsIEVudGl0eSBhdXRob3JpemVkIHRvIHN1Ym1pdCBvbiBiZWhhbGYgb2YKKyAgICAgIHRoZSBjb3B5cmlnaHQgb3duZXIuIEZvciB0aGUgcHVycG9zZXMgb2YgdGhpcyBkZWZpbml0aW9uLCAic3VibWl0dGVkIgorICAgICAgbWVhbnMgYW55IGZvcm0gb2YgZWxlY3Ryb25pYywgdmVyYmFsLCBvciB3cml0dGVuIGNvbW11bmljYXRpb24gc2VudAorICAgICAgdG8gdGhlIExpY2Vuc29yIG9yIGl0cyByZXByZXNlbnRhdGl2ZXMsIGluY2x1ZGluZyBidXQgbm90IGxpbWl0ZWQgdG8KKyAgICAgIGNvbW11bmljYXRpb24gb24gZWxlY3Ryb25pYyBtYWlsaW5nIGxpc3RzLCBzb3VyY2UgY29kZSBjb250cm9sIHN5c3RlbXMsCisgICAgICBhbmQgaXNzdWUgdHJhY2tpbmcgc3lzdGVtcyB0aGF0IGFyZSBtYW5hZ2VkIGJ5LCBvciBvbiBiZWhhbGYgb2YsIHRoZQorICAgICAgTGljZW5zb3IgZm9yIHRoZSBwdXJwb3NlIG9mIGRpc2N1c3NpbmcgYW5kIGltcHJvdmluZyB0aGUgV29yaywgYnV0CisgICAgICBleGNsdWRpbmcgY29tbXVuaWNhdGlvbiB0aGF0IGlzIGNvbnNwaWN1b3VzbHkgbWFya2VkIG9yIG90aGVyd2lzZQorICAgICAgZGVzaWduYXRlZCBpbiB3cml0aW5nIGJ5IHRoZSBjb3B5cmlnaHQgb3duZXIgYXMgIk5vdCBhIENvbnRyaWJ1dGlvbi4iCisKKyAgICAgICJDb250cmlidXRvciIgc2hhbGwgbWVhbiBMaWNlbnNvciBhbmQgYW55IGluZGl2aWR1YWwgb3IgTGVnYWwgRW50aXR5CisgICAgICBvbiBiZWhhbGYgb2Ygd2hvbSBhIENvbnRyaWJ1dGlvbiBoYXMgYmVlbiByZWNlaXZlZCBieSBMaWNlbnNvciBhbmQKKyAgICAgIHN1YnNlcXVlbnRseSBpbmNvcnBvcmF0ZWQgd2l0aGluIHRoZSBXb3JrLgorCisgICAyLiBHcmFudCBvZiBDb3B5cmlnaHQgTGljZW5zZS4gU3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YKKyAgICAgIHRoaXMgTGljZW5zZSwgZWFjaCBDb250cmlidXRvciBoZXJlYnkgZ3JhbnRzIHRvIFlvdSBhIHBlcnBldHVhbCwKKyAgICAgIHdvcmxkd2lkZSwgbm9uLWV4Y2x1c2l2ZSwgbm8tY2hhcmdlLCByb3lhbHR5LWZyZWUsIGlycmV2b2NhYmxlCisgICAgICBjb3B5cmlnaHQgbGljZW5zZSB0byByZXByb2R1Y2UsIHByZXBhcmUgRGVyaXZhdGl2ZSBXb3JrcyBvZiwKKyAgICAgIHB1YmxpY2x5IGRpc3BsYXksIHB1YmxpY2x5IHBlcmZvcm0sIHN1YmxpY2Vuc2UsIGFuZCBkaXN0cmlidXRlIHRoZQorICAgICAgV29yayBhbmQgc3VjaCBEZXJpdmF0aXZlIFdvcmtzIGluIFNvdXJjZSBvciBPYmplY3QgZm9ybS4KKworICAgMy4gR3JhbnQgb2YgUGF0ZW50IExpY2Vuc2UuIFN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mCisgICAgICB0aGlzIExpY2Vuc2UsIGVhY2ggQ29udHJpYnV0b3IgaGVyZWJ5IGdyYW50cyB0byBZb3UgYSBwZXJwZXR1YWwsCisgICAgICB3b3JsZHdpZGUsIG5vbi1leGNsdXNpdmUsIG5vLWNoYXJnZSwgcm95YWx0eS1mcmVlLCBpcnJldm9jYWJsZQorICAgICAgKGV4Y2VwdCBhcyBzdGF0ZWQgaW4gdGhpcyBzZWN0aW9uKSBwYXRlbnQgbGljZW5zZSB0byBtYWtlLCBoYXZlIG1hZGUsCisgICAgICB1c2UsIG9mZmVyIHRvIHNlbGwsIHNlbGwsIGltcG9ydCwgYW5kIG90aGVyd2lzZSB0cmFuc2ZlciB0aGUgV29yaywKKyAgICAgIHdoZXJlIHN1Y2ggbGljZW5zZSBhcHBsaWVzIG9ubHkgdG8gdGhvc2UgcGF0ZW50IGNsYWltcyBsaWNlbnNhYmxlCisgICAgICBieSBzdWNoIENvbnRyaWJ1dG9yIHRoYXQgYXJlIG5lY2Vzc2FyaWx5IGluZnJpbmdlZCBieSB0aGVpcgorICAgICAgQ29udHJpYnV0aW9uKHMpIGFsb25lIG9yIGJ5IGNvbWJpbmF0aW9uIG9mIHRoZWlyIENvbnRyaWJ1dGlvbihzKQorICAgICAgd2l0aCB0aGUgV29yayB0byB3aGljaCBzdWNoIENvbnRyaWJ1dGlvbihzKSB3YXMgc3VibWl0dGVkLiBJZiBZb3UKKyAgICAgIGluc3RpdHV0ZSBwYXRlbnQgbGl0aWdhdGlvbiBhZ2FpbnN0IGFueSBlbnRpdHkgKGluY2x1ZGluZyBhCisgICAgICBjcm9zcy1jbGFpbSBvciBjb3VudGVyY2xhaW0gaW4gYSBsYXdzdWl0KSBhbGxlZ2luZyB0aGF0IHRoZSBXb3JrCisgICAgICBvciBhIENvbnRyaWJ1dGlvbiBpbmNvcnBvcmF0ZWQgd2l0aGluIHRoZSBXb3JrIGNvbnN0aXR1dGVzIGRpcmVjdAorICAgICAgb3IgY29udHJpYnV0b3J5IHBhdGVudCBpbmZyaW5nZW1lbnQsIHRoZW4gYW55IHBhdGVudCBsaWNlbnNlcworICAgICAgZ3JhbnRlZCB0byBZb3UgdW5kZXIgdGhpcyBMaWNlbnNlIGZvciB0aGF0IFdvcmsgc2hhbGwgdGVybWluYXRlCisgICAgICBhcyBvZiB0aGUgZGF0ZSBzdWNoIGxpdGlnYXRpb24gaXMgZmlsZWQuCisKKyAgIDQuIFJlZGlzdHJpYnV0aW9uLiBZb3UgbWF5IHJlcHJvZHVjZSBhbmQgZGlzdHJpYnV0ZSBjb3BpZXMgb2YgdGhlCisgICAgICBXb3JrIG9yIERlcml2YXRpdmUgV29ya3MgdGhlcmVvZiBpbiBhbnkgbWVkaXVtLCB3aXRoIG9yIHdpdGhvdXQKKyAgICAgIG1vZGlmaWNhdGlvbnMsIGFuZCBpbiBTb3VyY2Ugb3IgT2JqZWN0IGZvcm0sIHByb3ZpZGVkIHRoYXQgWW91CisgICAgICBtZWV0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKKworICAgICAgKGEpIFlvdSBtdXN0IGdpdmUgYW55IG90aGVyIHJlY2lwaWVudHMgb2YgdGhlIFdvcmsgb3IKKyAgICAgICAgICBEZXJpdmF0aXZlIFdvcmtzIGEgY29weSBvZiB0aGlzIExpY2Vuc2U7IGFuZAorCisgICAgICAoYikgWW91IG11c3QgY2F1c2UgYW55IG1vZGlmaWVkIGZpbGVzIHRvIGNhcnJ5IHByb21pbmVudCBub3RpY2VzCisgICAgICAgICAgc3RhdGluZyB0aGF0IFlvdSBjaGFuZ2VkIHRoZSBmaWxlczsgYW5kCisKKyAgICAgIChjKSBZb3UgbXVzdCByZXRhaW4sIGluIHRoZSBTb3VyY2UgZm9ybSBvZiBhbnkgRGVyaXZhdGl2ZSBXb3JrcworICAgICAgICAgIHRoYXQgWW91IGRpc3RyaWJ1dGUsIGFsbCBjb3B5cmlnaHQsIHBhdGVudCwgdHJhZGVtYXJrLCBhbmQKKyAgICAgICAgICBhdHRyaWJ1dGlvbiBub3RpY2VzIGZyb20gdGhlIFNvdXJjZSBmb3JtIG9mIHRoZSBXb3JrLAorICAgICAgICAgIGV4Y2x1ZGluZyB0aG9zZSBub3RpY2VzIHRoYXQgZG8gbm90IHBlcnRhaW4gdG8gYW55IHBhcnQgb2YKKyAgICAgICAgICB0aGUgRGVyaXZhdGl2ZSBXb3JrczsgYW5kCisKKyAgICAgIChkKSBJZiB0aGUgV29yayBpbmNsdWRlcyBhICJOT1RJQ0UiIHRleHQgZmlsZSBhcyBwYXJ0IG9mIGl0cworICAgICAgICAgIGRpc3RyaWJ1dGlvbiwgdGhlbiBhbnkgRGVyaXZhdGl2ZSBXb3JrcyB0aGF0IFlvdSBkaXN0cmlidXRlIG11c3QKKyAgICAgICAgICBpbmNsdWRlIGEgcmVhZGFibGUgY29weSBvZiB0aGUgYXR0cmlidXRpb24gbm90aWNlcyBjb250YWluZWQKKyAgICAgICAgICB3aXRoaW4gc3VjaCBOT1RJQ0UgZmlsZSwgZXhjbHVkaW5nIHRob3NlIG5vdGljZXMgdGhhdCBkbyBub3QKKyAgICAgICAgICBwZXJ0YWluIHRvIGFueSBwYXJ0IG9mIHRoZSBEZXJpdmF0aXZlIFdvcmtzLCBpbiBhdCBsZWFzdCBvbmUKKyAgICAgICAgICBvZiB0aGUgZm9sbG93aW5nIHBsYWNlczogd2l0aGluIGEgTk9USUNFIHRleHQgZmlsZSBkaXN0cmlidXRlZAorICAgICAgICAgIGFzIHBhcnQgb2YgdGhlIERlcml2YXRpdmUgV29ya3M7IHdpdGhpbiB0aGUgU291cmNlIGZvcm0gb3IKKyAgICAgICAgICBkb2N1bWVudGF0aW9uLCBpZiBwcm92aWRlZCBhbG9uZyB3aXRoIHRoZSBEZXJpdmF0aXZlIFdvcmtzOyBvciwKKyAgICAgICAgICB3aXRoaW4gYSBkaXNwbGF5IGdlbmVyYXRlZCBieSB0aGUgRGVyaXZhdGl2ZSBXb3JrcywgaWYgYW5kCisgICAgICAgICAgd2hlcmV2ZXIgc3VjaCB0aGlyZC1wYXJ0eSBub3RpY2VzIG5vcm1hbGx5IGFwcGVhci4gVGhlIGNvbnRlbnRzCisgICAgICAgICAgb2YgdGhlIE5PVElDRSBmaWxlIGFyZSBmb3IgaW5mb3JtYXRpb25hbCBwdXJwb3NlcyBvbmx5IGFuZAorICAgICAgICAgIGRvIG5vdCBtb2RpZnkgdGhlIExpY2Vuc2UuIFlvdSBtYXkgYWRkIFlvdXIgb3duIGF0dHJpYnV0aW9uCisgICAgICAgICAgbm90aWNlcyB3aXRoaW4gRGVyaXZhdGl2ZSBXb3JrcyB0aGF0IFlvdSBkaXN0cmlidXRlLCBhbG9uZ3NpZGUKKyAgICAgICAgICBvciBhcyBhbiBhZGRlbmR1bSB0byB0aGUgTk9USUNFIHRleHQgZnJvbSB0aGUgV29yaywgcHJvdmlkZWQKKyAgICAgICAgICB0aGF0IHN1Y2ggYWRkaXRpb25hbCBhdHRyaWJ1dGlvbiBub3RpY2VzIGNhbm5vdCBiZSBjb25zdHJ1ZWQKKyAgICAgICAgICBhcyBtb2RpZnlpbmcgdGhlIExpY2Vuc2UuCisKKyAgICAgIFlvdSBtYXkgYWRkIFlvdXIgb3duIGNvcHlyaWdodCBzdGF0ZW1lbnQgdG8gWW91ciBtb2RpZmljYXRpb25zIGFuZAorICAgICAgbWF5IHByb3ZpZGUgYWRkaXRpb25hbCBvciBkaWZmZXJlbnQgbGljZW5zZSB0ZXJtcyBhbmQgY29uZGl0aW9ucworICAgICAgZm9yIHVzZSwgcmVwcm9kdWN0aW9uLCBvciBkaXN0cmlidXRpb24gb2YgWW91ciBtb2RpZmljYXRpb25zLCBvcgorICAgICAgZm9yIGFueSBzdWNoIERlcml2YXRpdmUgV29ya3MgYXMgYSB3aG9sZSwgcHJvdmlkZWQgWW91ciB1c2UsCisgICAgICByZXByb2R1Y3Rpb24sIGFuZCBkaXN0cmlidXRpb24gb2YgdGhlIFdvcmsgb3RoZXJ3aXNlIGNvbXBsaWVzIHdpdGgKKyAgICAgIHRoZSBjb25kaXRpb25zIHN0YXRlZCBpbiB0aGlzIExpY2Vuc2UuCisKKyAgIDUuIFN1Ym1pc3Npb24gb2YgQ29udHJpYnV0aW9ucy4gVW5sZXNzIFlvdSBleHBsaWNpdGx5IHN0YXRlIG90aGVyd2lzZSwKKyAgICAgIGFueSBDb250cmlidXRpb24gaW50ZW50aW9uYWxseSBzdWJtaXR0ZWQgZm9yIGluY2x1c2lvbiBpbiB0aGUgV29yaworICAgICAgYnkgWW91IHRvIHRoZSBMaWNlbnNvciBzaGFsbCBiZSB1bmRlciB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YKKyAgICAgIHRoaXMgTGljZW5zZSwgd2l0aG91dCBhbnkgYWRkaXRpb25hbCB0ZXJtcyBvciBjb25kaXRpb25zLgorICAgICAgTm90d2l0aHN0YW5kaW5nIHRoZSBhYm92ZSwgbm90aGluZyBoZXJlaW4gc2hhbGwgc3VwZXJzZWRlIG9yIG1vZGlmeQorICAgICAgdGhlIHRlcm1zIG9mIGFueSBzZXBhcmF0ZSBsaWNlbnNlIGFncmVlbWVudCB5b3UgbWF5IGhhdmUgZXhlY3V0ZWQKKyAgICAgIHdpdGggTGljZW5zb3IgcmVnYXJkaW5nIHN1Y2ggQ29udHJpYnV0aW9ucy4KKworICAgNi4gVHJhZGVtYXJrcy4gVGhpcyBMaWNlbnNlIGRvZXMgbm90IGdyYW50IHBlcm1pc3Npb24gdG8gdXNlIHRoZSB0cmFkZQorICAgICAgbmFtZXMsIHRyYWRlbWFya3MsIHNlcnZpY2UgbWFya3MsIG9yIHByb2R1Y3QgbmFtZXMgb2YgdGhlIExpY2Vuc29yLAorICAgICAgZXhjZXB0IGFzIHJlcXVpcmVkIGZvciByZWFzb25hYmxlIGFuZCBjdXN0b21hcnkgdXNlIGluIGRlc2NyaWJpbmcgdGhlCisgICAgICBvcmlnaW4gb2YgdGhlIFdvcmsgYW5kIHJlcHJvZHVjaW5nIHRoZSBjb250ZW50IG9mIHRoZSBOT1RJQ0UgZmlsZS4KKworICAgNy4gRGlzY2xhaW1lciBvZiBXYXJyYW50eS4gVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yCisgICAgICBhZ3JlZWQgdG8gaW4gd3JpdGluZywgTGljZW5zb3IgcHJvdmlkZXMgdGhlIFdvcmsgKGFuZCBlYWNoCisgICAgICBDb250cmlidXRvciBwcm92aWRlcyBpdHMgQ29udHJpYnV0aW9ucykgb24gYW4gIkFTIElTIiBCQVNJUywKKyAgICAgIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvcgorICAgICAgaW1wbGllZCwgaW5jbHVkaW5nLCB3aXRob3V0IGxpbWl0YXRpb24sIGFueSB3YXJyYW50aWVzIG9yIGNvbmRpdGlvbnMKKyAgICAgIG9mIFRJVExFLCBOT04tSU5GUklOR0VNRU5ULCBNRVJDSEFOVEFCSUxJVFksIG9yIEZJVE5FU1MgRk9SIEEKKyAgICAgIFBBUlRJQ1VMQVIgUFVSUE9TRS4gWW91IGFyZSBzb2xlbHkgcmVzcG9uc2libGUgZm9yIGRldGVybWluaW5nIHRoZQorICAgICAgYXBwcm9wcmlhdGVuZXNzIG9mIHVzaW5nIG9yIHJlZGlzdHJpYnV0aW5nIHRoZSBXb3JrIGFuZCBhc3N1bWUgYW55CisgICAgICByaXNrcyBhc3NvY2lhdGVkIHdpdGggWW91ciBleGVyY2lzZSBvZiBwZXJtaXNzaW9ucyB1bmRlciB0aGlzIExpY2Vuc2UuCisKKyAgIDguIExpbWl0YXRpb24gb2YgTGlhYmlsaXR5LiBJbiBubyBldmVudCBhbmQgdW5kZXIgbm8gbGVnYWwgdGhlb3J5LAorICAgICAgd2hldGhlciBpbiB0b3J0IChpbmNsdWRpbmcgbmVnbGlnZW5jZSksIGNvbnRyYWN0LCBvciBvdGhlcndpc2UsCisgICAgICB1bmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgKHN1Y2ggYXMgZGVsaWJlcmF0ZSBhbmQgZ3Jvc3NseQorICAgICAgbmVnbGlnZW50IGFjdHMpIG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzaGFsbCBhbnkgQ29udHJpYnV0b3IgYmUKKyAgICAgIGxpYWJsZSB0byBZb3UgZm9yIGRhbWFnZXMsIGluY2x1ZGluZyBhbnkgZGlyZWN0LCBpbmRpcmVjdCwgc3BlY2lhbCwKKyAgICAgIGluY2lkZW50YWwsIG9yIGNvbnNlcXVlbnRpYWwgZGFtYWdlcyBvZiBhbnkgY2hhcmFjdGVyIGFyaXNpbmcgYXMgYQorICAgICAgcmVzdWx0IG9mIHRoaXMgTGljZW5zZSBvciBvdXQgb2YgdGhlIHVzZSBvciBpbmFiaWxpdHkgdG8gdXNlIHRoZQorICAgICAgV29yayAoaW5jbHVkaW5nIGJ1dCBub3QgbGltaXRlZCB0byBkYW1hZ2VzIGZvciBsb3NzIG9mIGdvb2R3aWxsLAorICAgICAgd29yayBzdG9wcGFnZSwgY29tcHV0ZXIgZmFpbHVyZSBvciBtYWxmdW5jdGlvbiwgb3IgYW55IGFuZCBhbGwKKyAgICAgIG90aGVyIGNvbW1lcmNpYWwgZGFtYWdlcyBvciBsb3NzZXMpLCBldmVuIGlmIHN1Y2ggQ29udHJpYnV0b3IKKyAgICAgIGhhcyBiZWVuIGFkdmlzZWQgb2YgdGhlIHBvc3NpYmlsaXR5IG9mIHN1Y2ggZGFtYWdlcy4KKworICAgOS4gQWNjZXB0aW5nIFdhcnJhbnR5IG9yIEFkZGl0aW9uYWwgTGlhYmlsaXR5LiBXaGlsZSByZWRpc3RyaWJ1dGluZworICAgICAgdGhlIFdvcmsgb3IgRGVyaXZhdGl2ZSBXb3JrcyB0aGVyZW9mLCBZb3UgbWF5IGNob29zZSB0byBvZmZlciwKKyAgICAgIGFuZCBjaGFyZ2UgYSBmZWUgZm9yLCBhY2NlcHRhbmNlIG9mIHN1cHBvcnQsIHdhcnJhbnR5LCBpbmRlbW5pdHksCisgICAgICBvciBvdGhlciBsaWFiaWxpdHkgb2JsaWdhdGlvbnMgYW5kL29yIHJpZ2h0cyBjb25zaXN0ZW50IHdpdGggdGhpcworICAgICAgTGljZW5zZS4gSG93ZXZlciwgaW4gYWNjZXB0aW5nIHN1Y2ggb2JsaWdhdGlvbnMsIFlvdSBtYXkgYWN0IG9ubHkKKyAgICAgIG9uIFlvdXIgb3duIGJlaGFsZiBhbmQgb24gWW91ciBzb2xlIHJlc3BvbnNpYmlsaXR5LCBub3Qgb24gYmVoYWxmCisgICAgICBvZiBhbnkgb3RoZXIgQ29udHJpYnV0b3IsIGFuZCBvbmx5IGlmIFlvdSBhZ3JlZSB0byBpbmRlbW5pZnksCisgICAgICBkZWZlbmQsIGFuZCBob2xkIGVhY2ggQ29udHJpYnV0b3IgaGFybWxlc3MgZm9yIGFueSBsaWFiaWxpdHkKKyAgICAgIGluY3VycmVkIGJ5LCBvciBjbGFpbXMgYXNzZXJ0ZWQgYWdhaW5zdCwgc3VjaCBDb250cmlidXRvciBieSByZWFzb24KKyAgICAgIG9mIHlvdXIgYWNjZXB0aW5nIGFueSBzdWNoIHdhcnJhbnR5IG9yIGFkZGl0aW9uYWwgbGlhYmlsaXR5LgorCisgICBFTkQgT0YgVEVSTVMgQU5EIENPTkRJVElPTlMKKwpkaWZmIC0tZ2l0IGEvbWVkaWEvY29kZWMyL2NvbXBvbmVudHMvdnB4L0FuZHJvaWQuYnAgYi9tZWRpYS9jb2RlYzIvY29tcG9uZW50cy92cHgvQW5kcm9pZC5icApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hYmZkMzc5Ci0tLSAvZGV2L251bGwKKysrIGIvbWVkaWEvY29kZWMyL2NvbXBvbmVudHMvdnB4L0FuZHJvaWQuYnAKQEAgLTAsMCArMSw2MCBAQAorY2NfbGlicmFyeV9zaGFyZWQgeworICAgIG5hbWU6ICJsaWJjb2RlYzJfc29mdF92cDlkZWMiLAorICAgIGRlZmF1bHRzOiBbCisgICAgICAgICJsaWJjb2RlYzJfc29mdC1kZWZhdWx0cyIsCisgICAgICAgICJsaWJjb2RlYzJfc29mdF9zYW5pdGl6ZV9hbGwtZGVmYXVsdHMiLAorICAgIF0sCisKKyAgICBzcmNzOiBbIkMyU29mdFZweERlYy5jcHAiXSwKKworICAgIHN0YXRpY19saWJzOiBbImxpYnZweCJdLAorCisgICAgY2ZsYWdzOiBbCisgICAgICAgICItRFZQOSIsCisgICAgXSwKK30KKworY2NfbGlicmFyeV9zaGFyZWQgeworICAgIG5hbWU6ICJsaWJjb2RlYzJfc29mdF92cDhkZWMiLAorICAgIGRlZmF1bHRzOiBbCisgICAgICAgICJsaWJjb2RlYzJfc29mdC1kZWZhdWx0cyIsCisgICAgICAgICJsaWJjb2RlYzJfc29mdF9zYW5pdGl6ZV9hbGwtZGVmYXVsdHMiLAorICAgIF0sCisKKyAgICBzcmNzOiBbIkMyU29mdFZweERlYy5jcHAiXSwKKworICAgIHN0YXRpY19saWJzOiBbImxpYnZweCJdLAorfQorCitjY19saWJyYXJ5X3NoYXJlZCB7CisgICAgbmFtZTogImxpYmNvZGVjMl9zb2Z0X3ZwOWVuYyIsCisgICAgZGVmYXVsdHM6IFsKKyAgICAgICAgImxpYmNvZGVjMl9zb2Z0LWRlZmF1bHRzIiwKKyAgICAgICAgImxpYmNvZGVjMl9zb2Z0X3Nhbml0aXplX2FsbC1kZWZhdWx0cyIsCisgICAgXSwKKworICAgIHNyY3M6IFsKKyAgICAgICAgIkMyU29mdFZwOUVuYy5jcHAiLAorICAgICAgICAiQzJTb2Z0VnB4RW5jLmNwcCIsCisgICAgXSwKKworICAgIHN0YXRpY19saWJzOiBbImxpYnZweCJdLAorCisgICAgY2ZsYWdzOiBbIi1EVlA5Il0sCit9CisKK2NjX2xpYnJhcnlfc2hhcmVkIHsKKyAgICBuYW1lOiAibGliY29kZWMyX3NvZnRfdnA4ZW5jIiwKKyAgICBkZWZhdWx0czogWworICAgICAgICAibGliY29kZWMyX3NvZnQtZGVmYXVsdHMiLAorICAgICAgICAibGliY29kZWMyX3NvZnRfc2FuaXRpemVfYWxsLWRlZmF1bHRzIiwKKyAgICBdLAorCisgICAgc3JjczogWworICAgICAgICAiQzJTb2Z0VnA4RW5jLmNwcCIsCisgICAgICAgICJDMlNvZnRWcHhFbmMuY3BwIiwKKyAgICBdLAorCisgICAgc3RhdGljX2xpYnM6IFsibGlidnB4Il0sCit9CisKZGlmZiAtLWdpdCBhL21lZGlhL2NvZGVjMi9jb21wb25lbnRzL3ZweC9DMlNvZnRWcDhFbmMuY3BwIGIvbWVkaWEvY29kZWMyL2NvbXBvbmVudHMvdnB4L0MyU29mdFZwOEVuYy5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGFlNzE3YQotLS0gL2Rldi9udWxsCisrKyBiL21lZGlhL2NvZGVjMi9jb21wb25lbnRzL3ZweC9DMlNvZnRWcDhFbmMuY3BwCkBAIC0wLDAgKzEsMTE0IEBACisvKgorICogQ29weXJpZ2h0IDIwMTggVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworCisvLyNkZWZpbmUgTE9HX05ERUJVRyAwCisjZGVmaW5lIExPR19UQUcgIkMyU29mdFZwOEVuYyIKKyNpbmNsdWRlIDx1dGlscy9Mb2cuaD4KKyNpbmNsdWRlIDx1dGlscy9taXNjLmg+CisKKyNpbmNsdWRlICJDMlNvZnRWcDhFbmMuaCIKKworbmFtZXNwYWNlIGFuZHJvaWQgeworCitjb25zdGV4cHIgY2hhciBDT01QT05FTlRfTkFNRVtdID0gImMyLmFuZHJvaWQudnA4LmVuY29kZXIiOworCitDMlNvZnRWcDhFbmM6OkMyU29mdFZwOEVuYyhjb25zdCBjaGFyKiBuYW1lLCBjMl9ub2RlX2lkX3QgaWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdGQ6OnNoYXJlZF9wdHI8SW50ZkltcGw+JiBpbnRmSW1wbCkKKyAgICA6IEMyU29mdFZweEVuYyhuYW1lLCBpZCwgaW50ZkltcGwpLCBtRENUUGFydGl0aW9ucygwKSwgbVByb2ZpbGUoMSkge30KKwordm9pZCBDMlNvZnRWcDhFbmM6OnNldENvZGVjU3BlY2lmaWNJbnRlcmZhY2UoKSB7CisgICAgbUNvZGVjSW50ZXJmYWNlID0gdnB4X2NvZGVjX3ZwOF9jeCgpOworfQorCit2b2lkIEMyU29mdFZwOEVuYzo6c2V0Q29kZWNTcGVjaWZpY0NvbmZpZ3VyYXRpb24oKSB7CisgICAgc3dpdGNoIChtUHJvZmlsZSkgeworICAgICAgICBjYXNlIDE6CisgICAgICAgICAgICBtQ29kZWNDb25maWd1cmF0aW9uLT5nX3Byb2ZpbGUgPSAwOworICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSAyOgorICAgICAgICAgICAgbUNvZGVjQ29uZmlndXJhdGlvbi0+Z19wcm9maWxlID0gMTsKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2UgNDoKKyAgICAgICAgICAgIG1Db2RlY0NvbmZpZ3VyYXRpb24tPmdfcHJvZmlsZSA9IDI7CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIDg6CisgICAgICAgICAgICBtQ29kZWNDb25maWd1cmF0aW9uLT5nX3Byb2ZpbGUgPSAzOworICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIG1Db2RlY0NvbmZpZ3VyYXRpb24tPmdfcHJvZmlsZSA9IDA7CisgICAgfQorfQorCit2cHhfY29kZWNfZXJyX3QgQzJTb2Z0VnA4RW5jOjpzZXRDb2RlY1NwZWNpZmljQ29udHJvbHMoKSB7CisgICAgdnB4X2NvZGVjX2Vycl90IGNvZGVjX3JldHVybiA9IHZweF9jb2RlY19jb250cm9sKG1Db2RlY0NvbnRleHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFZQOEVfU0VUX1RPS0VOX1BBUlRJVElPTlMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1EQ1RQYXJ0aXRpb25zKTsKKyAgICBpZiAoY29kZWNfcmV0dXJuICE9IFZQWF9DT0RFQ19PSykgeworICAgICAgICBBTE9HRSgiRXJyb3Igc2V0dGluZyBkY3QgcGFydGl0aW9ucyBmb3IgdnB4IGVuY29kZXIuIik7CisgICAgfQorICAgIHJldHVybiBjb2RlY19yZXR1cm47Cit9CisKK2NsYXNzIEMyU29mdFZwOEVuY0ZhY3RvcnkgOiBwdWJsaWMgQzJDb21wb25lbnRGYWN0b3J5IHsKK3B1YmxpYzoKKyAgICBDMlNvZnRWcDhFbmNGYWN0b3J5KCkKKyAgICAgICAgOiBtSGVscGVyKHN0ZDo6c3RhdGljX3BvaW50ZXJfY2FzdDxDMlJlZmxlY3RvckhlbHBlcj4oCisgICAgICAgICAgICAgIEdldENvZGVjMlBsYXRmb3JtQ29tcG9uZW50U3RvcmUoKS0+Z2V0UGFyYW1SZWZsZWN0b3IoKSkpIHt9CisKKyAgICB2aXJ0dWFsIGMyX3N0YXR1c190IGNyZWF0ZUNvbXBvbmVudCgKKyAgICAgICAgICAgIGMyX25vZGVfaWRfdCBpZCwKKyAgICAgICAgICAgIHN0ZDo6c2hhcmVkX3B0cjxDMkNvbXBvbmVudD4qIGNvbnN0IGNvbXBvbmVudCwKKyAgICAgICAgICAgIHN0ZDo6ZnVuY3Rpb248dm9pZChDMkNvbXBvbmVudCopPiBkZWxldGVyKSBvdmVycmlkZSB7CisgICAgICAgICpjb21wb25lbnQgPSBzdGQ6OnNoYXJlZF9wdHI8QzJDb21wb25lbnQ+KAorICAgICAgICAgICAgbmV3IEMyU29mdFZwOEVuYyhDT01QT05FTlRfTkFNRSwgaWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZDo6bWFrZV9zaGFyZWQ8QzJTb2Z0VnB4RW5jOjpJbnRmSW1wbD4obUhlbHBlcikpLAorICAgICAgICAgICAgZGVsZXRlcik7CisgICAgICAgIHJldHVybiBDMl9PSzsKKyAgICB9CisKKyAgICB2aXJ0dWFsIGMyX3N0YXR1c190IGNyZWF0ZUludGVyZmFjZSgKKyAgICAgICAgICAgIGMyX25vZGVfaWRfdCBpZCwKKyAgICAgICAgICAgIHN0ZDo6c2hhcmVkX3B0cjxDMkNvbXBvbmVudEludGVyZmFjZT4qIGNvbnN0IGludGVyZmFjZSwKKyAgICAgICAgICAgIHN0ZDo6ZnVuY3Rpb248dm9pZChDMkNvbXBvbmVudEludGVyZmFjZSopPiBkZWxldGVyKSBvdmVycmlkZSB7CisgICAgICAgICppbnRlcmZhY2UgPSBzdGQ6OnNoYXJlZF9wdHI8QzJDb21wb25lbnRJbnRlcmZhY2U+KAorICAgICAgICAgICAgbmV3IFNpbXBsZUludGVyZmFjZTxDMlNvZnRWcHhFbmM6OkludGZJbXBsPigKKyAgICAgICAgICAgICAgICBDT01QT05FTlRfTkFNRSwgaWQsCisgICAgICAgICAgICAgICAgc3RkOjptYWtlX3NoYXJlZDxDMlNvZnRWcHhFbmM6OkludGZJbXBsPihtSGVscGVyKSksCisgICAgICAgICAgICBkZWxldGVyKTsKKyAgICAgICAgcmV0dXJuIEMyX09LOworICAgIH0KKworICAgIHZpcnR1YWwgfkMyU29mdFZwOEVuY0ZhY3RvcnkoKSBvdmVycmlkZSA9IGRlZmF1bHQ7CisKK3ByaXZhdGU6CisgICAgc3RkOjpzaGFyZWRfcHRyPEMyUmVmbGVjdG9ySGVscGVyPiBtSGVscGVyOworfTsKKworfSAgLy8gbmFtZXNwYWNlIGFuZHJvaWQKKworZXh0ZXJuICJDIiA6OkMyQ29tcG9uZW50RmFjdG9yeSogQ3JlYXRlQ29kZWMyRmFjdG9yeSgpIHsKKyAgICBBTE9HVigiaW4gJXMiLCBfX2Z1bmNfXyk7CisgICAgcmV0dXJuIG5ldyA6OmFuZHJvaWQ6OkMyU29mdFZwOEVuY0ZhY3RvcnkoKTsKK30KKworZXh0ZXJuICJDIiB2b2lkIERlc3Ryb3lDb2RlYzJGYWN0b3J5KDo6QzJDb21wb25lbnRGYWN0b3J5KiBmYWN0b3J5KSB7CisgICAgQUxPR1YoImluICVzIiwgX19mdW5jX18pOworICAgIGRlbGV0ZSBmYWN0b3J5OworfQpkaWZmIC0tZ2l0IGEvbWVkaWEvY29kZWMyL2NvbXBvbmVudHMvdnB4L0MyU29mdFZwOEVuYy5oIGIvbWVkaWEvY29kZWMyL2NvbXBvbmVudHMvdnB4L0MyU29mdFZwOEVuYy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVkNmYzNTYKLS0tIC9kZXYvbnVsbAorKysgYi9tZWRpYS9jb2RlYzIvY29tcG9uZW50cy92cHgvQzJTb2Z0VnA4RW5jLmgKQEAgLTAsMCArMSw2MCBAQAorLyoKKyAqIENvcHlyaWdodCAyMDE4IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KKworI2lmbmRlZiBBTkRST0lEX0MyX1NPRlRfVlA4X0VOQ19IX18KKyNkZWZpbmUgQU5EUk9JRF9DMl9TT0ZUX1ZQOF9FTkNfSF9fCisKKyNpbmNsdWRlICJDMlNvZnRWcHhFbmMuaCIKKworbmFtZXNwYWNlIGFuZHJvaWQgeworCisvLyBFeHBvc2VzIHZwOCBlbmNvZGVyIGFzIGEgYzIgQ29tcG9uZW50CisvLworLy8gSW4gYWRkaXRpb24gdG8gdGhlIGJhc2UgY2xhc3Mgc2V0dGluZ3MsIE9ubHkgZm9sbG93aW5nIGVuY29kZXIgc2V0dGluZ3MgYXJlCisvLyBhdmFpbGFibGU6CisvLyAgICAtIHRva2VuIHBhcnRpdGlvbmluZworc3RydWN0IEMyU29mdFZwOEVuYyA6IHB1YmxpYyBDMlNvZnRWcHhFbmMgeworICAgIEMyU29mdFZwOEVuYyhjb25zdCBjaGFyKiBuYW1lLCBjMl9ub2RlX2lkX3QgaWQsCisgICAgICAgICAgICAgICAgIGNvbnN0IHN0ZDo6c2hhcmVkX3B0cjxJbnRmSW1wbD4mIGludGZJbXBsKTsKKworIHByb3RlY3RlZDoKKyAgICAvLyBQb3B1bGF0ZXMgfG1Db2RlY0ludGVyZmFjZXwgd2l0aCBjb2RlYyBzcGVjaWZpYyBzZXR0aW5ncy4KKyAgICB2aXJ0dWFsIHZvaWQgc2V0Q29kZWNTcGVjaWZpY0ludGVyZmFjZSgpOworCisgICAgLy8gU2V0cyBjb2RlYyBzcGVjaWZpYyBjb25maWd1cmF0aW9uLgorICAgIHZpcnR1YWwgdm9pZCBzZXRDb2RlY1NwZWNpZmljQ29uZmlndXJhdGlvbigpOworCisgICAgLy8gSW5pdGlhbGl6ZXMgY29kZWMgc3BlY2lmaWMgZW5jb2RlciBzZXR0aW5ncy4KKyAgICB2aXJ0dWFsIHZweF9jb2RlY19lcnJfdCBzZXRDb2RlY1NwZWNpZmljQ29udHJvbHMoKTsKKworIHByaXZhdGU6CisgICAgLy8gTWF4IHZhbHVlIHN1cHBvcnRlZCBmb3IgRENUIHBhcnRpdGlvbnMKKyAgICBzdGF0aWMgY29uc3QgdWludDMyX3Qga01heERDVFBhcnRpdGlvbnMgPSAzOworCisgICAgLy8gdnA4IHNwZWNpZmljIGNvbmZpZ3VyYXRpb24gcGFyYW1ldGVyCisgICAgLy8gdGhhdCBlbmFibGVzIHRva2VuIHBhcnRpdGlvbmluZyBvZgorICAgIC8vIHRoZSBzdHJlYW0gaW50byBzdWJzdHJlYW1zCisgICAgaW50MzJfdCBtRENUUGFydGl0aW9uczsKKworICAgIC8vIEMyIFByb2ZpbGUgcGFyYW1ldGVyCisgICAgaW50MzJfdCBtUHJvZmlsZTsKKworICAgIEMyX0RPX05PVF9DT1BZKEMyU29mdFZwOEVuYyk7Cit9OworCit9ICAvLyBuYW1lc3BhY2UgYW5kcm9pZAorCisjZW5kaWYgIC8vIEFORFJPSURfQzJfU09GVF9WUDhfRU5DX0hfXwpkaWZmIC0tZ2l0IGEvbWVkaWEvY29kZWMyL2NvbXBvbmVudHMvdnB4L0MyU29mdFZwOUVuYy5jcHAgYi9tZWRpYS9jb2RlYzIvY29tcG9uZW50cy92cHgvQzJTb2Z0VnA5RW5jLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMjYxNzBmCi0tLSAvZGV2L251bGwKKysrIGIvbWVkaWEvY29kZWMyL2NvbXBvbmVudHMvdnB4L0MyU29mdFZwOUVuYy5jcHAKQEAgLTAsMCArMSwxNDQgQEAKKy8qCisgKiBDb3B5cmlnaHQgMjAxOCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCisKKy8vI2RlZmluZSBMT0dfTkRFQlVHIDAKKyNkZWZpbmUgTE9HX1RBRyAiQzJTb2Z0VnA5RW5jIgorI2luY2x1ZGUgPHV0aWxzL0xvZy5oPgorI2luY2x1ZGUgPHV0aWxzL21pc2MuaD4KKworI2luY2x1ZGUgIkMyU29mdFZwOUVuYy5oIgorCituYW1lc3BhY2UgYW5kcm9pZCB7CisKK2NvbnN0ZXhwciBjaGFyIENPTVBPTkVOVF9OQU1FW10gPSAiYzIuYW5kcm9pZC52cDkuZW5jb2RlciI7CisKK0MyU29mdFZwOUVuYzo6QzJTb2Z0VnA5RW5jKGNvbnN0IGNoYXIqIG5hbWUsIGMyX25vZGVfaWRfdCBpZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0ZDo6c2hhcmVkX3B0cjxJbnRmSW1wbD4mIGludGZJbXBsKQorICAgIDogQzJTb2Z0VnB4RW5jKG5hbWUsIGlkLCBpbnRmSW1wbCksCisgICAgICBtUHJvZmlsZSgxKSwKKyAgICAgIG1MZXZlbCgwKSwKKyAgICAgIG1UaWxlQ29sdW1ucygwKSwKKyAgICAgIG1GcmFtZVBhcmFsbGVsRGVjb2RpbmcoZmFsc2UpIHsKK30KKwordm9pZCBDMlNvZnRWcDlFbmM6OnNldENvZGVjU3BlY2lmaWNJbnRlcmZhY2UoKSB7CisgICAgbUNvZGVjSW50ZXJmYWNlID0gdnB4X2NvZGVjX3ZwOV9jeCgpOworfQorCit2b2lkIEMyU29mdFZwOUVuYzo6c2V0Q29kZWNTcGVjaWZpY0NvbmZpZ3VyYXRpb24oKSB7CisgICAgc3dpdGNoIChtUHJvZmlsZSkgeworICAgICAgICBjYXNlIDE6CisgICAgICAgICAgICBtQ29kZWNDb25maWd1cmF0aW9uLT5nX3Byb2ZpbGUgPSAwOworICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSAyOgorICAgICAgICAgICAgbUNvZGVjQ29uZmlndXJhdGlvbi0+Z19wcm9maWxlID0gMTsKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2UgNDoKKyAgICAgICAgICAgIG1Db2RlY0NvbmZpZ3VyYXRpb24tPmdfcHJvZmlsZSA9IDI7CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIDg6CisgICAgICAgICAgICBtQ29kZWNDb25maWd1cmF0aW9uLT5nX3Byb2ZpbGUgPSAzOworICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIG1Db2RlY0NvbmZpZ3VyYXRpb24tPmdfcHJvZmlsZSA9IDA7CisgICAgfQorfQorCit2cHhfY29kZWNfZXJyX3QgQzJTb2Z0VnA5RW5jOjpzZXRDb2RlY1NwZWNpZmljQ29udHJvbHMoKSB7CisgICAgdnB4X2NvZGVjX2Vycl90IGNvZGVjUmV0dXJuID0gdnB4X2NvZGVjX2NvbnRyb2woCisgICAgICAgICAgICBtQ29kZWNDb250ZXh0LCBWUDlFX1NFVF9USUxFX0NPTFVNTlMsIG1UaWxlQ29sdW1ucyk7CisgICAgaWYgKGNvZGVjUmV0dXJuICE9IFZQWF9DT0RFQ19PSykgeworICAgICAgICBBTE9HRSgiRXJyb3Igc2V0dGluZyBWUDlFX1NFVF9USUxFX0NPTFVNTlMgdG8gJWQuIHZweF9jb2RlY19jb250cm9sKCkgIgorICAgICAgICAgICAgICAicmV0dXJuZWQgJWQiLCBtVGlsZUNvbHVtbnMsIGNvZGVjUmV0dXJuKTsKKyAgICAgICAgcmV0dXJuIGNvZGVjUmV0dXJuOworICAgIH0KKyAgICBjb2RlY1JldHVybiA9IHZweF9jb2RlY19jb250cm9sKAorICAgICAgICAgICAgbUNvZGVjQ29udGV4dCwgVlA5RV9TRVRfRlJBTUVfUEFSQUxMRUxfREVDT0RJTkcsCisgICAgICAgICAgICBtRnJhbWVQYXJhbGxlbERlY29kaW5nKTsKKyAgICBpZiAoY29kZWNSZXR1cm4gIT0gVlBYX0NPREVDX09LKSB7CisgICAgICAgIEFMT0dFKCJFcnJvciBzZXR0aW5nIFZQOUVfU0VUX0ZSQU1FX1BBUkFMTEVMX0RFQ09ESU5HIHRvICVkLiIKKyAgICAgICAgICAgICAgInZweF9jb2RlY19jb250cm9sKCkgcmV0dXJuZWQgJWQiLCBtRnJhbWVQYXJhbGxlbERlY29kaW5nLAorICAgICAgICAgICAgICBjb2RlY1JldHVybik7CisgICAgICAgIHJldHVybiBjb2RlY1JldHVybjsKKyAgICB9CisgICAgY29kZWNSZXR1cm4gPSB2cHhfY29kZWNfY29udHJvbChtQ29kZWNDb250ZXh0LCBWUDlFX1NFVF9ST1dfTVQsIDEpOworICAgIGlmIChjb2RlY1JldHVybiAhPSBWUFhfQ09ERUNfT0spIHsKKyAgICAgICAgQUxPR0UoIkVycm9yIHNldHRpbmcgVlA5RV9TRVRfUk9XX01UIHRvIDEuIHZweF9jb2RlY19jb250cm9sKCkgIgorICAgICAgICAgICAgICAicmV0dXJuZWQgJWQiLCBjb2RlY1JldHVybik7CisgICAgICAgIHJldHVybiBjb2RlY1JldHVybjsKKyAgICB9CisKKyAgICAvLyBGb3IgVlA5LCB3ZSBhbHdheXMgc2V0IENQVV9VU0VEIHRvIDggKGJlY2F1c2UgdGhlIHJlYWx0aW1lIGRlZmF1bHQgaXMgMAorICAgIC8vIHdoaWNoIGlzIHRvbyBzbG93KS4KKyAgICBjb2RlY1JldHVybiA9IHZweF9jb2RlY19jb250cm9sKG1Db2RlY0NvbnRleHQsIFZQOEVfU0VUX0NQVVVTRUQsIDgpOworICAgIGlmIChjb2RlY1JldHVybiAhPSBWUFhfQ09ERUNfT0spIHsKKyAgICAgICAgQUxPR0UoIkVycm9yIHNldHRpbmcgVlA4RV9TRVRfQ1BVVVNFRCB0byA4LiB2cHhfY29kZWNfY29udHJvbCgpICIKKyAgICAgICAgICAgICAgInJldHVybmVkICVkIiwgY29kZWNSZXR1cm4pOworICAgICAgICByZXR1cm4gY29kZWNSZXR1cm47CisgICAgfQorICAgIHJldHVybiBjb2RlY1JldHVybjsKK30KKworY2xhc3MgQzJTb2Z0VnA5RW5jRmFjdG9yeSA6IHB1YmxpYyBDMkNvbXBvbmVudEZhY3RvcnkgeworcHVibGljOgorICAgIEMyU29mdFZwOUVuY0ZhY3RvcnkoKQorICAgICAgICA6IG1IZWxwZXIoc3RkOjpzdGF0aWNfcG9pbnRlcl9jYXN0PEMyUmVmbGVjdG9ySGVscGVyPigKKyAgICAgICAgICAgICAgR2V0Q29kZWMyUGxhdGZvcm1Db21wb25lbnRTdG9yZSgpLT5nZXRQYXJhbVJlZmxlY3RvcigpKSkge30KKworICAgIHZpcnR1YWwgYzJfc3RhdHVzX3QgY3JlYXRlQ29tcG9uZW50KAorICAgICAgICAgICAgYzJfbm9kZV9pZF90IGlkLAorICAgICAgICAgICAgc3RkOjpzaGFyZWRfcHRyPEMyQ29tcG9uZW50PiogY29uc3QgY29tcG9uZW50LAorICAgICAgICAgICAgc3RkOjpmdW5jdGlvbjx2b2lkKEMyQ29tcG9uZW50Kik+IGRlbGV0ZXIpIG92ZXJyaWRlIHsKKyAgICAgICAgKmNvbXBvbmVudCA9IHN0ZDo6c2hhcmVkX3B0cjxDMkNvbXBvbmVudD4oCisgICAgICAgICAgICBuZXcgQzJTb2Z0VnA5RW5jKENPTVBPTkVOVF9OQU1FLCBpZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RkOjptYWtlX3NoYXJlZDxDMlNvZnRWcHhFbmM6OkludGZJbXBsPihtSGVscGVyKSksCisgICAgICAgICAgICBkZWxldGVyKTsKKyAgICAgICAgcmV0dXJuIEMyX09LOworICAgIH0KKworICAgIHZpcnR1YWwgYzJfc3RhdHVzX3QgY3JlYXRlSW50ZXJmYWNlKAorICAgICAgICAgICAgYzJfbm9kZV9pZF90IGlkLAorICAgICAgICAgICAgc3RkOjpzaGFyZWRfcHRyPEMyQ29tcG9uZW50SW50ZXJmYWNlPiogY29uc3QgaW50ZXJmYWNlLAorICAgICAgICAgICAgc3RkOjpmdW5jdGlvbjx2b2lkKEMyQ29tcG9uZW50SW50ZXJmYWNlKik+IGRlbGV0ZXIpIG92ZXJyaWRlIHsKKyAgICAgICAgKmludGVyZmFjZSA9IHN0ZDo6c2hhcmVkX3B0cjxDMkNvbXBvbmVudEludGVyZmFjZT4oCisgICAgICAgICAgICBuZXcgU2ltcGxlSW50ZXJmYWNlPEMyU29mdFZweEVuYzo6SW50ZkltcGw+KAorICAgICAgICAgICAgICAgIENPTVBPTkVOVF9OQU1FLCBpZCwKKyAgICAgICAgICAgICAgICBzdGQ6Om1ha2Vfc2hhcmVkPEMyU29mdFZweEVuYzo6SW50ZkltcGw+KG1IZWxwZXIpKSwKKyAgICAgICAgICAgIGRlbGV0ZXIpOworICAgICAgICByZXR1cm4gQzJfT0s7CisgICAgfQorCisgICAgdmlydHVhbCB+QzJTb2Z0VnA5RW5jRmFjdG9yeSgpIG92ZXJyaWRlID0gZGVmYXVsdDsKKworcHJpdmF0ZToKKyAgICBzdGQ6OnNoYXJlZF9wdHI8QzJSZWZsZWN0b3JIZWxwZXI+IG1IZWxwZXI7Cit9OworCit9ICAvLyBuYW1lc3BhY2UgYW5kcm9pZAorCitleHRlcm4gIkMiIDo6QzJDb21wb25lbnRGYWN0b3J5KiBDcmVhdGVDb2RlYzJGYWN0b3J5KCkgeworICAgIEFMT0dWKCJpbiAlcyIsIF9fZnVuY19fKTsKKyAgICByZXR1cm4gbmV3IDo6YW5kcm9pZDo6QzJTb2Z0VnA5RW5jRmFjdG9yeSgpOworfQorCitleHRlcm4gIkMiIHZvaWQgRGVzdHJveUNvZGVjMkZhY3RvcnkoOjpDMkNvbXBvbmVudEZhY3RvcnkqIGZhY3RvcnkpIHsKKyAgICBBTE9HVigiaW4gJXMiLCBfX2Z1bmNfXyk7CisgICAgZGVsZXRlIGZhY3Rvcnk7Cit9CmRpZmYgLS1naXQgYS9tZWRpYS9jb2RlYzIvY29tcG9uZW50cy92cHgvQzJTb2Z0VnA5RW5jLmggYi9tZWRpYS9jb2RlYzIvY29tcG9uZW50cy92cHgvQzJTb2Z0VnA5RW5jLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzdlZjhmZAotLS0gL2Rldi9udWxsCisrKyBiL21lZGlhL2NvZGVjMi9jb21wb25lbnRzL3ZweC9DMlNvZnRWcDlFbmMuaApAQCAtMCwwICsxLDU5IEBACisvKgorICogQ29weXJpZ2h0IDIwMTggVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworCisjaWZuZGVmIEFORFJPSURfQzJfU09GVF9WUDlfRU5DX0hfXworI2RlZmluZSBBTkRST0lEX0MyX1NPRlRfVlA5X0VOQ19IX18KKworI2luY2x1ZGUgIkMyU29mdFZweEVuYy5oIgorCituYW1lc3BhY2UgYW5kcm9pZCB7CisKKy8vIEV4cG9zZXMgdnA5IGVuY29kZXIgYXMgYSBjMiBDb21wb25lbnQKKy8vCisvLyBJbiBhZGRpdGlvbiB0byB0aGUgYmFzZSBjbGFzcyBzZXR0aW5ncywgT25seSBmb2xsb3dpbmcgZW5jb2RlciBzZXR0aW5ncyBhcmUKKy8vIGF2YWlsYWJsZToKKy8vICAgIC0gdGlsZSByb3dzCisvLyAgICAtIHRpbGUgY29sdW1ucworLy8gICAgLSBmcmFtZSBwYXJhbGxlbCBtb2RlCitzdHJ1Y3QgQzJTb2Z0VnA5RW5jIDogcHVibGljIEMyU29mdFZweEVuYyB7CisgICAgQzJTb2Z0VnA5RW5jKGNvbnN0IGNoYXIqIG5hbWUsIGMyX25vZGVfaWRfdCBpZCwKKyAgICAgICAgICAgICAgICAgY29uc3Qgc3RkOjpzaGFyZWRfcHRyPEludGZJbXBsPiYgaW50ZkltcGwpOworCisgcHJvdGVjdGVkOgorICAgIC8vIFBvcHVsYXRlcyB8bUNvZGVjSW50ZXJmYWNlfCB3aXRoIGNvZGVjIHNwZWNpZmljIHNldHRpbmdzLgorICAgIHZpcnR1YWwgdm9pZCBzZXRDb2RlY1NwZWNpZmljSW50ZXJmYWNlKCk7CisKKyAgICAvLyBTZXRzIGNvZGVjIHNwZWNpZmljIGNvbmZpZ3VyYXRpb24uCisgICAgdmlydHVhbCB2b2lkIHNldENvZGVjU3BlY2lmaWNDb25maWd1cmF0aW9uKCk7CisKKyAgICAvLyBJbml0aWFsaXplcyBjb2RlYyBzcGVjaWZpYyBlbmNvZGVyIHNldHRpbmdzLgorICAgIHZpcnR1YWwgdnB4X2NvZGVjX2Vycl90IHNldENvZGVjU3BlY2lmaWNDb250cm9scygpOworCisgcHJpdmF0ZToKKyAgICAvLyBDMiBQcm9maWxlICYgTGV2ZWwgcGFyYW1ldGVyCisgICAgaW50MzJfdCBtUHJvZmlsZTsKKyAgICBpbnQzMl90IG1MZXZlbCBfX3VudXNlZDsKKworICAgIGludDMyX3QgbVRpbGVDb2x1bW5zOworCisgICAgYm9vbCBtRnJhbWVQYXJhbGxlbERlY29kaW5nOworCisgICAgQzJfRE9fTk9UX0NPUFkoQzJTb2Z0VnA5RW5jKTsKK307CisKK30gIC8vIG5hbWVzcGFjZSBhbmRyb2lkCisKKyNlbmRpZiAgLy8gQU5EUk9JRF9DMl9TT0ZUX1ZQOV9FTkNfSF9fCmRpZmYgLS1naXQgYS9tZWRpYS9jb2RlYzIvY29tcG9uZW50cy92cHgvQzJTb2Z0VnB4RGVjLmNwcCBiL21lZGlhL2NvZGVjMi9jb21wb25lbnRzL3ZweC9DMlNvZnRWcHhEZWMuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAxZGU2ODEKLS0tIC9kZXYvbnVsbAorKysgYi9tZWRpYS9jb2RlYzIvY29tcG9uZW50cy92cHgvQzJTb2Z0VnB4RGVjLmNwcApAQCAtMCwwICsxLDY0MCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxOCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCisKKy8vI2RlZmluZSBMT0dfTkRFQlVHIDAKKyNkZWZpbmUgTE9HX1RBRyAiQzJTb2Z0VnB4RGVjIgorI2luY2x1ZGUgPGxvZy9sb2cuaD4KKworI2luY2x1ZGUgPG1lZGlhL3N0YWdlZnJpZ2h0L2ZvdW5kYXRpb24vQVV0aWxzLmg+CisjaW5jbHVkZSA8bWVkaWEvc3RhZ2VmcmlnaHQvZm91bmRhdGlvbi9NZWRpYURlZnMuaD4KKworI2luY2x1ZGUgPEMyRGVidWcuaD4KKyNpbmNsdWRlIDxDMlBsYXRmb3JtU3VwcG9ydC5oPgorI2luY2x1ZGUgPFNpbXBsZUMySW50ZXJmYWNlLmg+CisKKyNpbmNsdWRlICJDMlNvZnRWcHhEZWMuaCIKKworbmFtZXNwYWNlIGFuZHJvaWQgeworCisjaWZkZWYgVlA5Citjb25zdGV4cHIgY2hhciBDT01QT05FTlRfTkFNRVtdID0gImMyLmFuZHJvaWQudnA5LmRlY29kZXIiOworI2Vsc2UKK2NvbnN0ZXhwciBjaGFyIENPTVBPTkVOVF9OQU1FW10gPSAiYzIuYW5kcm9pZC52cDguZGVjb2RlciI7CisjZW5kaWYKKworY2xhc3MgQzJTb2Z0VnB4RGVjOjpJbnRmSW1wbCA6IHB1YmxpYyBTaW1wbGVJbnRlcmZhY2U8dm9pZD46OkJhc2VQYXJhbXMgeworcHVibGljOgorICAgIGV4cGxpY2l0IEludGZJbXBsKGNvbnN0IHN0ZDo6c2hhcmVkX3B0cjxDMlJlZmxlY3RvckhlbHBlcj4gJmhlbHBlcikKKyAgICAgICAgOiBTaW1wbGVJbnRlcmZhY2U8dm9pZD46OkJhc2VQYXJhbXMoCisgICAgICAgICAgICAgICAgaGVscGVyLAorICAgICAgICAgICAgICAgIENPTVBPTkVOVF9OQU1FLAorICAgICAgICAgICAgICAgIEMyQ29tcG9uZW50OjpLSU5EX0RFQ09ERVIsCisgICAgICAgICAgICAgICAgQzJDb21wb25lbnQ6OkRPTUFJTl9WSURFTywKKyNpZmRlZiBWUDkKKyAgICAgICAgICAgICAgICBNRURJQV9NSU1FVFlQRV9WSURFT19WUDkKKyNlbHNlCisgICAgICAgICAgICAgICAgTUVESUFfTUlNRVRZUEVfVklERU9fVlA4CisjZW5kaWYKKyAgICAgICAgICAgICAgICApIHsKKyAgICAgICAgbm9Qcml2YXRlQnVmZmVycygpOyAvLyBUT0RPOiBhY2NvdW50IGZvciBvdXIgYnVmZmVycyBoZXJlCisgICAgICAgIG5vSW5wdXRSZWZlcmVuY2VzKCk7CisgICAgICAgIG5vT3V0cHV0UmVmZXJlbmNlcygpOworICAgICAgICBub0lucHV0TGF0ZW5jeSgpOworICAgICAgICBub1RpbWVTdHJldGNoKCk7CisKKyAgICAgICAgLy8gVE9ETzogb3V0cHV0IGxhdGVuY3kgYW5kIHJlb3JkZXJpbmcKKworICAgICAgICBhZGRQYXJhbWV0ZXIoCisgICAgICAgICAgICAgICAgRGVmaW5lUGFyYW0obUF0dHJpYiwgQzJfUEFSQU1LRVlfQ09NUE9ORU5UX0FUVFJJQlVURVMpCisgICAgICAgICAgICAgICAgLndpdGhDb25zdFZhbHVlKG5ldyBDMkNvbXBvbmVudEF0dHJpYnV0ZXNTZXR0aW5nKEMyQ29tcG9uZW50OjpBVFRSSUJfSVNfVEVNUE9SQUwpKQorICAgICAgICAgICAgICAgIC5idWlsZCgpKTsKKworICAgICAgICBhZGRQYXJhbWV0ZXIoCisgICAgICAgICAgICAgICAgRGVmaW5lUGFyYW0obVNpemUsIEMyX1BBUkFNS0VZX1BJQ1RVUkVfU0laRSkKKyAgICAgICAgICAgICAgICAud2l0aERlZmF1bHQobmV3IEMyU3RyZWFtUGljdHVyZVNpemVJbmZvOjpvdXRwdXQoMHUsIDMyMCwgMjQwKSkKKyAgICAgICAgICAgICAgICAud2l0aEZpZWxkcyh7CisgICAgICAgICAgICAgICAgICAgIEMyRihtU2l6ZSwgd2lkdGgpLmluUmFuZ2UoMiwgMjA0OCwgMiksCisgICAgICAgICAgICAgICAgICAgIEMyRihtU2l6ZSwgaGVpZ2h0KS5pblJhbmdlKDIsIDIwNDgsIDIpLAorICAgICAgICAgICAgICAgIH0pCisgICAgICAgICAgICAgICAgLndpdGhTZXR0ZXIoU2l6ZVNldHRlcikKKyAgICAgICAgICAgICAgICAuYnVpbGQoKSk7CisKKyNpZmRlZiBWUDkKKyAgICAgICAgLy8gVE9ETzogQWRkIEMyQ29uZmlnOjpQUk9GSUxFX1ZQOV8ySERSID8/CisgICAgICAgIGFkZFBhcmFtZXRlcigKKyAgICAgICAgICAgICAgICBEZWZpbmVQYXJhbShtUHJvZmlsZUxldmVsLCBDMl9QQVJBTUtFWV9QUk9GSUxFX0xFVkVMKQorICAgICAgICAgICAgICAgIC53aXRoRGVmYXVsdChuZXcgQzJTdHJlYW1Qcm9maWxlTGV2ZWxJbmZvOjppbnB1dCgwdSwKKyAgICAgICAgICAgICAgICAgICAgICAgIEMyQ29uZmlnOjpQUk9GSUxFX1ZQOV8wLCBDMkNvbmZpZzo6TEVWRUxfVlA5XzUpKQorICAgICAgICAgICAgICAgIC53aXRoRmllbGRzKHsKKyAgICAgICAgICAgICAgICAgICAgQzJGKG1Qcm9maWxlTGV2ZWwsIHByb2ZpbGUpLm9uZU9mKHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBDMkNvbmZpZzo6UFJPRklMRV9WUDlfMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBDMkNvbmZpZzo6UFJPRklMRV9WUDlfMn0pLAorICAgICAgICAgICAgICAgICAgICBDMkYobVByb2ZpbGVMZXZlbCwgbGV2ZWwpLm9uZU9mKHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBDMkNvbmZpZzo6TEVWRUxfVlA5XzEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgQzJDb25maWc6OkxFVkVMX1ZQOV8xXzEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgQzJDb25maWc6OkxFVkVMX1ZQOV8yLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIEMyQ29uZmlnOjpMRVZFTF9WUDlfMl8xLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIEMyQ29uZmlnOjpMRVZFTF9WUDlfMywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBDMkNvbmZpZzo6TEVWRUxfVlA5XzNfMSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBDMkNvbmZpZzo6TEVWRUxfVlA5XzQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgQzJDb25maWc6OkxFVkVMX1ZQOV80XzEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgQzJDb25maWc6OkxFVkVMX1ZQOV81LAorICAgICAgICAgICAgICAgICAgICB9KQorICAgICAgICAgICAgICAgIH0pCisgICAgICAgICAgICAgICAgLndpdGhTZXR0ZXIoUHJvZmlsZUxldmVsU2V0dGVyLCBtU2l6ZSkKKyAgICAgICAgICAgICAgICAuYnVpbGQoKSk7CisKKyNpZiAwCisgICAgICAgIC8vIHNhbXBsZSBCVC4yMDIwIHN0YXRpYyBpbmZvCisgICAgICAgIG1IZHJTdGF0aWNJbmZvID0gc3RkOjptYWtlX3NoYXJlZDxDMlN0cmVhbUhkclN0YXRpY0luZm86Om91dHB1dD4oKTsKKyAgICAgICAgbUhkclN0YXRpY0luZm8tPm1hc3RlcmluZyA9IHsKKyAgICAgICAgICAgIC5yZWQgICA9IHsgLnggPSAwLjcwOCwgIC55ID0gMC4yOTIgfSwKKyAgICAgICAgICAgIC5ncmVlbiA9IHsgLnggPSAwLjE3MCwgIC55ID0gMC43OTcgfSwKKyAgICAgICAgICAgIC5ibHVlICA9IHsgLnggPSAwLjEzMSwgIC55ID0gMC4wNDYgfSwKKyAgICAgICAgICAgIC53aGl0ZSA9IHsgLnggPSAwLjMxMjcsIC55ID0gMC4zMjkwIH0sCisgICAgICAgICAgICAubWF4THVtaW5hbmNlID0gMTAwMCwKKyAgICAgICAgICAgIC5taW5MdW1pbmFuY2UgPSAwLjEsCisgICAgICAgIH07CisgICAgICAgIG1IZHJTdGF0aWNJbmZvLT5tYXhDbGwgPSAxMDAwOworICAgICAgICBtSGRyU3RhdGljSW5mby0+bWF4RmFsbCA9IDEyMDsKKworICAgICAgICBtSGRyU3RhdGljSW5mby0+bWF4THVtaW5hbmNlID0gMDsgLy8gZGlzYWJsZSBzdGF0aWMgaW5mbworCisgICAgICAgIGhlbHBlci0+YWRkU3RydWN0RGVzY3JpcHRvcnM8QzJNYXN0ZXJpbmdEaXNwbGF5Q29sb3JWb2x1bWVTdHJ1Y3QsIEMyQ29sb3JYeVN0cnVjdD4oKTsKKyAgICAgICAgYWRkUGFyYW1ldGVyKAorICAgICAgICAgICAgICAgIERlZmluZVBhcmFtKG1IZHJTdGF0aWNJbmZvLCBDMl9QQVJBTUtFWV9IRFJfU1RBVElDX0lORk8pCisgICAgICAgICAgICAgICAgLndpdGhEZWZhdWx0KG1IZHJTdGF0aWNJbmZvKQorICAgICAgICAgICAgICAgIC53aXRoRmllbGRzKHsKKyAgICAgICAgICAgICAgICAgICAgQzJGKG1IZHJTdGF0aWNJbmZvLCBtYXN0ZXJpbmcucmVkLngpLmluUmFuZ2UoMCwgMSksCisgICAgICAgICAgICAgICAgICAgIC8vIFRPRE8KKyAgICAgICAgICAgICAgICB9KQorICAgICAgICAgICAgICAgIC53aXRoU2V0dGVyKEhkclN0YXRpY0luZm9TZXR0ZXIpCisgICAgICAgICAgICAgICAgLmJ1aWxkKCkpOworI2VuZGlmCisjZWxzZQorICAgICAgICBhZGRQYXJhbWV0ZXIoCisgICAgICAgICAgICAgICAgRGVmaW5lUGFyYW0obVByb2ZpbGVMZXZlbCwgQzJfUEFSQU1LRVlfUFJPRklMRV9MRVZFTCkKKyAgICAgICAgICAgICAgICAud2l0aENvbnN0VmFsdWUobmV3IEMyU3RyZWFtUHJvZmlsZUxldmVsSW5mbzo6aW5wdXQoMHUsCisgICAgICAgICAgICAgICAgICAgICAgICBDMkNvbmZpZzo6UFJPRklMRV9VTlVTRUQsIEMyQ29uZmlnOjpMRVZFTF9VTlVTRUQpKQorICAgICAgICAgICAgICAgIC5idWlsZCgpKTsKKyNlbmRpZgorCisgICAgICAgIGFkZFBhcmFtZXRlcigKKyAgICAgICAgICAgICAgICBEZWZpbmVQYXJhbShtTWF4U2l6ZSwgQzJfUEFSQU1LRVlfTUFYX1BJQ1RVUkVfU0laRSkKKyAgICAgICAgICAgICAgICAud2l0aERlZmF1bHQobmV3IEMyU3RyZWFtTWF4UGljdHVyZVNpemVUdW5pbmc6Om91dHB1dCgwdSwgMzIwLCAyNDApKQorICAgICAgICAgICAgICAgIC53aXRoRmllbGRzKHsKKyAgICAgICAgICAgICAgICAgICAgQzJGKG1TaXplLCB3aWR0aCkuaW5SYW5nZSgyLCAyMDQ4LCAyKSwKKyAgICAgICAgICAgICAgICAgICAgQzJGKG1TaXplLCBoZWlnaHQpLmluUmFuZ2UoMiwgMjA0OCwgMiksCisgICAgICAgICAgICAgICAgfSkKKyAgICAgICAgICAgICAgICAud2l0aFNldHRlcihNYXhQaWN0dXJlU2l6ZVNldHRlciwgbVNpemUpCisgICAgICAgICAgICAgICAgLmJ1aWxkKCkpOworCisgICAgICAgIGFkZFBhcmFtZXRlcigKKyAgICAgICAgICAgICAgICBEZWZpbmVQYXJhbShtTWF4SW5wdXRTaXplLCBDMl9QQVJBTUtFWV9JTlBVVF9NQVhfQlVGRkVSX1NJWkUpCisgICAgICAgICAgICAgICAgLndpdGhEZWZhdWx0KG5ldyBDMlN0cmVhbU1heEJ1ZmZlclNpemVJbmZvOjppbnB1dCgwdSwgMzIwICogMjQwICogMyAvIDQpKQorICAgICAgICAgICAgICAgIC53aXRoRmllbGRzKHsKKyAgICAgICAgICAgICAgICAgICAgQzJGKG1NYXhJbnB1dFNpemUsIHZhbHVlKS5hbnkoKSwKKyAgICAgICAgICAgICAgICB9KQorICAgICAgICAgICAgICAgIC5jYWxjdWxhdGVkQXMoTWF4SW5wdXRTaXplU2V0dGVyLCBtTWF4U2l6ZSkKKyAgICAgICAgICAgICAgICAuYnVpbGQoKSk7CisKKyAgICAgICAgQzJDaHJvbWFPZmZzZXRTdHJ1Y3QgbG9jYXRpb25zWzFdID0geyBDMkNocm9tYU9mZnNldFN0cnVjdDo6SVRVX1lVVl80MjBfMCgpIH07CisgICAgICAgIHN0ZDo6c2hhcmVkX3B0cjxDMlN0cmVhbUNvbG9ySW5mbzo6b3V0cHV0PiBkZWZhdWx0Q29sb3JJbmZvID0KKyAgICAgICAgICAgIEMyU3RyZWFtQ29sb3JJbmZvOjpvdXRwdXQ6OkFsbG9jU2hhcmVkKAorICAgICAgICAgICAgICAgICAgICAxdSwgMHUsIDh1IC8qIGJpdERlcHRoICovLCBDMkNvbG9yOjpZVVZfNDIwKTsKKyAgICAgICAgbWVtY3B5KGRlZmF1bHRDb2xvckluZm8tPm0ubG9jYXRpb25zLCBsb2NhdGlvbnMsIHNpemVvZihsb2NhdGlvbnMpKTsKKworICAgICAgICBkZWZhdWx0Q29sb3JJbmZvID0KKyAgICAgICAgICAgIEMyU3RyZWFtQ29sb3JJbmZvOjpvdXRwdXQ6OkFsbG9jU2hhcmVkKAorICAgICAgICAgICAgICAgICAgICB7IEMyQ2hyb21hT2Zmc2V0U3RydWN0OjpJVFVfWVVWXzQyMF8wKCkgfSwKKyAgICAgICAgICAgICAgICAgICAgMHUsIDh1IC8qIGJpdERlcHRoICovLCBDMkNvbG9yOjpZVVZfNDIwKTsKKyAgICAgICAgaGVscGVyLT5hZGRTdHJ1Y3REZXNjcmlwdG9yczxDMkNocm9tYU9mZnNldFN0cnVjdD4oKTsKKworICAgICAgICBhZGRQYXJhbWV0ZXIoCisgICAgICAgICAgICAgICAgRGVmaW5lUGFyYW0obUNvbG9ySW5mbywgQzJfUEFSQU1LRVlfQ09ERURfQ09MT1JfSU5GTykKKyAgICAgICAgICAgICAgICAud2l0aENvbnN0VmFsdWUoZGVmYXVsdENvbG9ySW5mbykKKyAgICAgICAgICAgICAgICAuYnVpbGQoKSk7CisKKyAgICAgICAgLy8gVE9ETzogc3VwcG9ydCBtb3JlIGZvcm1hdHM/CisgICAgICAgIGFkZFBhcmFtZXRlcigKKyAgICAgICAgICAgICAgICBEZWZpbmVQYXJhbShtUGl4ZWxGb3JtYXQsIEMyX1BBUkFNS0VZX1BJWEVMX0ZPUk1BVCkKKyAgICAgICAgICAgICAgICAud2l0aENvbnN0VmFsdWUobmV3IEMyU3RyZWFtUGl4ZWxGb3JtYXRJbmZvOjpvdXRwdXQoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHUsIEhBTF9QSVhFTF9GT1JNQVRfWUNCQ1JfNDIwXzg4OCkpCisgICAgICAgICAgICAgICAgLmJ1aWxkKCkpOworICAgIH0KKworICAgIHN0YXRpYyBDMlIgU2l6ZVNldHRlcihib29sIG1heUJsb2NrLCBjb25zdCBDMlA8QzJTdHJlYW1QaWN0dXJlU2l6ZUluZm86Om91dHB1dD4gJm9sZE1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICBDMlA8QzJWaWRlb1NpemVTdHJlYW1JbmZvOjpvdXRwdXQ+ICZtZSkgeworICAgICAgICAodm9pZCltYXlCbG9jazsKKyAgICAgICAgQzJSIHJlcyA9IEMyUjo6T2soKTsKKyAgICAgICAgaWYgKCFtZS5GKG1lLnYud2lkdGgpLnN1cHBvcnRzQXRBbGwobWUudi53aWR0aCkpIHsKKyAgICAgICAgICAgIHJlcyA9IHJlcy5wbHVzKEMyU2V0dGluZ1Jlc3VsdEJ1aWxkZXI6OkJhZFZhbHVlKG1lLkYobWUudi53aWR0aCkpKTsKKyAgICAgICAgICAgIG1lLnNldCgpLndpZHRoID0gb2xkTWUudi53aWR0aDsKKyAgICAgICAgfQorICAgICAgICBpZiAoIW1lLkYobWUudi5oZWlnaHQpLnN1cHBvcnRzQXRBbGwobWUudi5oZWlnaHQpKSB7CisgICAgICAgICAgICByZXMgPSByZXMucGx1cyhDMlNldHRpbmdSZXN1bHRCdWlsZGVyOjpCYWRWYWx1ZShtZS5GKG1lLnYuaGVpZ2h0KSkpOworICAgICAgICAgICAgbWUuc2V0KCkuaGVpZ2h0ID0gb2xkTWUudi5oZWlnaHQ7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHJlczsKKyAgICB9CisKKyAgICBzdGF0aWMgQzJSIE1heFBpY3R1cmVTaXplU2V0dGVyKGJvb2wgbWF5QmxvY2ssIEMyUDxDMlN0cmVhbU1heFBpY3R1cmVTaXplVHVuaW5nOjpvdXRwdXQ+ICZtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEMyUDxDMlN0cmVhbVBpY3R1cmVTaXplSW5mbzo6b3V0cHV0PiAmc2l6ZSkgeworICAgICAgICAodm9pZCltYXlCbG9jazsKKyAgICAgICAgLy8gVE9ETzogZ2V0IG1heCB3aWR0aC9oZWlnaHQgZnJvbSB0aGUgc2l6ZSdzIGZpZWxkIGhlbHBlcnMgdnMuIGhhcmRjb2RpbmcKKyAgICAgICAgbWUuc2V0KCkud2lkdGggPSBjMl9taW4oYzJfbWF4KG1lLnYud2lkdGgsIHNpemUudi53aWR0aCksIDIwNDh1KTsKKyAgICAgICAgbWUuc2V0KCkuaGVpZ2h0ID0gYzJfbWluKGMyX21heChtZS52LmhlaWdodCwgc2l6ZS52LmhlaWdodCksIDIwNDh1KTsKKyAgICAgICAgcmV0dXJuIEMyUjo6T2soKTsKKyAgICB9CisKKyAgICBzdGF0aWMgQzJSIE1heElucHV0U2l6ZVNldHRlcihib29sIG1heUJsb2NrLCBDMlA8QzJTdHJlYW1NYXhCdWZmZXJTaXplSW5mbzo6aW5wdXQ+ICZtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBDMlA8QzJTdHJlYW1NYXhQaWN0dXJlU2l6ZVR1bmluZzo6b3V0cHV0PiAmbWF4U2l6ZSkgeworICAgICAgICAodm9pZCltYXlCbG9jazsKKyAgICAgICAgLy8gYXNzdW1lIGNvbXByZXNzaW9uIHJhdGlvIG9mIDIKKyAgICAgICAgbWUuc2V0KCkudmFsdWUgPSAoKChtYXhTaXplLnYud2lkdGggKyA2MykgLyA2NCkgKiAoKG1heFNpemUudi5oZWlnaHQgKyA2MykgLyA2NCkgKiAzMDcyKTsKKyAgICAgICAgcmV0dXJuIEMyUjo6T2soKTsKKyAgICB9CisKKworICAgIHN0YXRpYyBDMlIgUHJvZmlsZUxldmVsU2V0dGVyKGJvb2wgbWF5QmxvY2ssIEMyUDxDMlN0cmVhbVByb2ZpbGVMZXZlbEluZm86OmlucHV0PiAmbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgQzJQPEMyU3RyZWFtUGljdHVyZVNpemVJbmZvOjpvdXRwdXQ+ICZzaXplKSB7CisgICAgICAgICh2b2lkKW1heUJsb2NrOworICAgICAgICAodm9pZClzaXplOworICAgICAgICAodm9pZCltZTsgIC8vIFRPRE86IHZhbGlkYXRlCisgICAgICAgIHJldHVybiBDMlI6Ok9rKCk7CisgICAgfQorCitwcml2YXRlOgorICAgIHN0ZDo6c2hhcmVkX3B0cjxDMlN0cmVhbVByb2ZpbGVMZXZlbEluZm86OmlucHV0PiBtUHJvZmlsZUxldmVsOworICAgIHN0ZDo6c2hhcmVkX3B0cjxDMlN0cmVhbVBpY3R1cmVTaXplSW5mbzo6b3V0cHV0PiBtU2l6ZTsKKyAgICBzdGQ6OnNoYXJlZF9wdHI8QzJTdHJlYW1NYXhQaWN0dXJlU2l6ZVR1bmluZzo6b3V0cHV0PiBtTWF4U2l6ZTsKKyAgICBzdGQ6OnNoYXJlZF9wdHI8QzJTdHJlYW1NYXhCdWZmZXJTaXplSW5mbzo6aW5wdXQ+IG1NYXhJbnB1dFNpemU7CisgICAgc3RkOjpzaGFyZWRfcHRyPEMyU3RyZWFtQ29sb3JJbmZvOjpvdXRwdXQ+IG1Db2xvckluZm87CisgICAgc3RkOjpzaGFyZWRfcHRyPEMyU3RyZWFtUGl4ZWxGb3JtYXRJbmZvOjpvdXRwdXQ+IG1QaXhlbEZvcm1hdDsKKyNpZmRlZiBWUDkKKyNpZiAwCisgICAgc3RkOjpzaGFyZWRfcHRyPEMyU3RyZWFtSGRyU3RhdGljSW5mbzo6b3V0cHV0PiBtSGRyU3RhdGljSW5mbzsKKyNlbmRpZgorI2VuZGlmCit9OworCitDMlNvZnRWcHhEZWM6OkMyU29mdFZweERlYygKKyAgICAgICAgY29uc3QgY2hhciAqbmFtZSwKKyAgICAgICAgYzJfbm9kZV9pZF90IGlkLAorICAgICAgICBjb25zdCBzdGQ6OnNoYXJlZF9wdHI8SW50ZkltcGw+ICZpbnRmSW1wbCkKKyAgICA6IFNpbXBsZUMyQ29tcG9uZW50KHN0ZDo6bWFrZV9zaGFyZWQ8U2ltcGxlSW50ZXJmYWNlPEludGZJbXBsPj4obmFtZSwgaWQsIGludGZJbXBsKSksCisgICAgICBtSW50ZihpbnRmSW1wbCksCisgICAgICBtQ29kZWNDdHgobnVsbHB0cikgeworfQorCitDMlNvZnRWcHhEZWM6On5DMlNvZnRWcHhEZWMoKSB7CisgICAgb25SZWxlYXNlKCk7Cit9CisKK2MyX3N0YXR1c190IEMyU29mdFZweERlYzo6b25Jbml0KCkgeworICAgIHN0YXR1c190IGVyciA9IGluaXREZWNvZGVyKCk7CisgICAgcmV0dXJuIGVyciA9PSBPSyA/IEMyX09LIDogQzJfQ09SUlVQVEVEOworfQorCitjMl9zdGF0dXNfdCBDMlNvZnRWcHhEZWM6Om9uU3RvcCgpIHsKKyAgICBtU2lnbmFsbGVkRXJyb3IgPSBmYWxzZTsKKyAgICBtU2lnbmFsbGVkT3V0cHV0RW9zID0gZmFsc2U7CisKKyAgICByZXR1cm4gQzJfT0s7Cit9CisKK3ZvaWQgQzJTb2Z0VnB4RGVjOjpvblJlc2V0KCkgeworICAgICh2b2lkKW9uU3RvcCgpOworICAgIGMyX3N0YXR1c190IGVyciA9IG9uRmx1c2hfc20oKTsKKyAgICBpZiAoZXJyICE9IEMyX09LKQorICAgIHsKKyAgICAgICAgQUxPR1coIkZhaWxlZCB0byBmbHVzaCBkZWNvZGVyLiBUcnkgdG8gaGFyZCByZXNldCBkZWNvZGVyIik7CisgICAgICAgIGRlc3Ryb3lEZWNvZGVyKCk7CisgICAgICAgICh2b2lkKWluaXREZWNvZGVyKCk7CisgICAgfQorfQorCit2b2lkIEMyU29mdFZweERlYzo6b25SZWxlYXNlKCkgeworICAgIGRlc3Ryb3lEZWNvZGVyKCk7Cit9CisKK2MyX3N0YXR1c190IEMyU29mdFZweERlYzo6b25GbHVzaF9zbSgpIHsKKyAgICBpZiAobUZyYW1lUGFyYWxsZWxNb2RlKSB7CisgICAgICAgIC8vIEZsdXNoIGRlY29kZXIgYnkgcGFzc2luZyBudWxscHRyIGRhdGEgcHRyIGFuZCAwIHNpemUuCisgICAgICAgIC8vIElkZWFsbHksIHRoaXMgc2hvdWxkIG5ldmVyIGZhaWwuCisgICAgICAgIGlmICh2cHhfY29kZWNfZGVjb2RlKG1Db2RlY0N0eCwgbnVsbHB0ciwgMCwgbnVsbHB0ciwgMCkpIHsKKyAgICAgICAgICAgIEFMT0dFKCJGYWlsZWQgdG8gZmx1c2ggb24yIGRlY29kZXIuIik7CisgICAgICAgICAgICByZXR1cm4gQzJfQ09SUlVQVEVEOworICAgICAgICB9CisgICAgfQorCisgICAgLy8gRHJvcCBhbGwgdGhlIGRlY29kZWQgZnJhbWVzIGluIGRlY29kZXIuCisgICAgdnB4X2NvZGVjX2l0ZXJfdCBpdGVyID0gbnVsbHB0cjsKKyAgICB3aGlsZSAodnB4X2NvZGVjX2dldF9mcmFtZShtQ29kZWNDdHgsICZpdGVyKSkgeworICAgIH0KKworICAgIG1TaWduYWxsZWRFcnJvciA9IGZhbHNlOworICAgIG1TaWduYWxsZWRPdXRwdXRFb3MgPSBmYWxzZTsKKyAgICByZXR1cm4gQzJfT0s7Cit9CisKK3N0YXRpYyBpbnQgR2V0Q1BVQ29yZUNvdW50KCkgeworICAgIGludCBjcHVDb3JlQ291bnQgPSAxOworI2lmIGRlZmluZWQoX1NDX05QUk9DRVNTT1JTX09OTE4pCisgICAgY3B1Q29yZUNvdW50ID0gc3lzY29uZihfU0NfTlBST0NFU1NPUlNfT05MTik7CisjZWxzZQorICAgIC8vIF9TQ19OUFJPQ19PTkxOIG11c3QgYmUgZGVmaW5lZC4uLgorICAgIGNwdUNvcmVDb3VudCA9IHN5c2NvbmYoX1NDX05QUk9DX09OTE4pOworI2VuZGlmCisgICAgQ0hFQ0soY3B1Q29yZUNvdW50ID49IDEpOworICAgIEFMT0dWKCJOdW1iZXIgb2YgQ1BVIGNvcmVzOiAlZCIsIGNwdUNvcmVDb3VudCk7CisgICAgcmV0dXJuIGNwdUNvcmVDb3VudDsKK30KKworc3RhdHVzX3QgQzJTb2Z0VnB4RGVjOjppbml0RGVjb2RlcigpIHsKKyNpZmRlZiBWUDkKKyAgICBtTW9kZSA9IE1PREVfVlA5OworI2Vsc2UKKyAgICBtTW9kZSA9IE1PREVfVlA4OworI2VuZGlmCisKKyAgICBtV2lkdGggPSAzMjA7CisgICAgbUhlaWdodCA9IDI0MDsKKyAgICBtRnJhbWVQYXJhbGxlbE1vZGUgPSBmYWxzZTsKKyAgICBtU2lnbmFsbGVkT3V0cHV0RW9zID0gZmFsc2U7CisgICAgbVNpZ25hbGxlZEVycm9yID0gZmFsc2U7CisKKyAgICBpZiAoIW1Db2RlY0N0eCkgeworICAgICAgICBtQ29kZWNDdHggPSBuZXcgdnB4X2NvZGVjX2N0eF90OworICAgIH0KKyAgICBpZiAoIW1Db2RlY0N0eCkgeworICAgICAgICBBTE9HRSgibUNvZGVjQ3R4IGlzIG51bGwiKTsKKyAgICAgICAgcmV0dXJuIE5PX01FTU9SWTsKKyAgICB9CisKKyAgICB2cHhfY29kZWNfZGVjX2NmZ190IGNmZzsKKyAgICBtZW1zZXQoJmNmZywgMCwgc2l6ZW9mKHZweF9jb2RlY19kZWNfY2ZnX3QpKTsKKyAgICBjZmcudGhyZWFkcyA9IEdldENQVUNvcmVDb3VudCgpOworCisgICAgdnB4X2NvZGVjX2ZsYWdzX3QgZmxhZ3M7CisgICAgbWVtc2V0KCZmbGFncywgMCwgc2l6ZW9mKHZweF9jb2RlY19mbGFnc190KSk7CisgICAgaWYgKG1GcmFtZVBhcmFsbGVsTW9kZSkgZmxhZ3MgfD0gVlBYX0NPREVDX1VTRV9GUkFNRV9USFJFQURJTkc7CisKKyAgICB2cHhfY29kZWNfZXJyX3QgdnB4X2VycjsKKyAgICBpZiAoKHZweF9lcnIgPSB2cHhfY29kZWNfZGVjX2luaXQoCisgICAgICAgICAgICAgICAgIG1Db2RlY0N0eCwgbU1vZGUgPT0gTU9ERV9WUDggPyAmdnB4X2NvZGVjX3ZwOF9keF9hbGdvIDogJnZweF9jb2RlY192cDlfZHhfYWxnbywKKyAgICAgICAgICAgICAgICAgJmNmZywgZmxhZ3MpKSkgeworICAgICAgICBBTE9HRSgib24yIGRlY29kZXIgZmFpbGVkIHRvIGluaXRpYWxpemUuICglZCkiLCB2cHhfZXJyKTsKKyAgICAgICAgcmV0dXJuIFVOS05PV05fRVJST1I7CisgICAgfQorCisgICAgcmV0dXJuIE9LOworfQorCitzdGF0dXNfdCBDMlNvZnRWcHhEZWM6OmRlc3Ryb3lEZWNvZGVyKCkgeworICAgIGlmICAobUNvZGVjQ3R4KSB7CisgICAgICAgIHZweF9jb2RlY19kZXN0cm95KG1Db2RlY0N0eCk7CisgICAgICAgIGRlbGV0ZSBtQ29kZWNDdHg7CisgICAgICAgIG1Db2RlY0N0eCA9IG51bGxwdHI7CisgICAgfQorCisgICAgcmV0dXJuIE9LOworfQorCit2b2lkIGZpbGxFbXB0eVdvcmsoY29uc3Qgc3RkOjp1bmlxdWVfcHRyPEMyV29yaz4gJndvcmspIHsKKyAgICB1aW50MzJfdCBmbGFncyA9IDA7CisgICAgaWYgKHdvcmstPmlucHV0LmZsYWdzICYgQzJGcmFtZURhdGE6OkZMQUdfRU5EX09GX1NUUkVBTSkgeworICAgICAgICBmbGFncyB8PSBDMkZyYW1lRGF0YTo6RkxBR19FTkRfT0ZfU1RSRUFNOworICAgICAgICBBTE9HVigic2lnbmFsbGluZyBlb3MiKTsKKyAgICB9CisgICAgd29yay0+d29ya2xldHMuZnJvbnQoKS0+b3V0cHV0LmZsYWdzID0gKEMyRnJhbWVEYXRhOjpmbGFnc190KWZsYWdzOworICAgIHdvcmstPndvcmtsZXRzLmZyb250KCktPm91dHB1dC5idWZmZXJzLmNsZWFyKCk7CisgICAgd29yay0+d29ya2xldHMuZnJvbnQoKS0+b3V0cHV0Lm9yZGluYWwgPSB3b3JrLT5pbnB1dC5vcmRpbmFsOworICAgIHdvcmstPndvcmtsZXRzUHJvY2Vzc2VkID0gMXU7Cit9CisKK3ZvaWQgQzJTb2Z0VnB4RGVjOjpmaW5pc2hXb3JrKHVpbnQ2NF90IGluZGV4LCBjb25zdCBzdGQ6OnVuaXF1ZV9wdHI8QzJXb3JrPiAmd29yaywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0ZDo6c2hhcmVkX3B0cjxDMkdyYXBoaWNCbG9jaz4gJmJsb2NrKSB7CisgICAgc3RkOjpzaGFyZWRfcHRyPEMyQnVmZmVyPiBidWZmZXIgPSBjcmVhdGVHcmFwaGljQnVmZmVyKGJsb2NrLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDMlJlY3QobVdpZHRoLCBtSGVpZ2h0KSk7CisgICAgYXV0byBmaWxsV29yayA9IFtidWZmZXIsIGluZGV4XShjb25zdCBzdGQ6OnVuaXF1ZV9wdHI8QzJXb3JrPiAmd29yaykgeworICAgICAgICB1aW50MzJfdCBmbGFncyA9IDA7CisgICAgICAgIGlmICgod29yay0+aW5wdXQuZmxhZ3MgJiBDMkZyYW1lRGF0YTo6RkxBR19FTkRfT0ZfU1RSRUFNKSAmJgorICAgICAgICAgICAgICAgIChjMl9jbnRyNjRfdChpbmRleCkgPT0gd29yay0+aW5wdXQub3JkaW5hbC5mcmFtZUluZGV4KSkgeworICAgICAgICAgICAgZmxhZ3MgfD0gQzJGcmFtZURhdGE6OkZMQUdfRU5EX09GX1NUUkVBTTsKKyAgICAgICAgICAgIEFMT0dWKCJzaWduYWxsaW5nIGVvcyIpOworICAgICAgICB9CisgICAgICAgIHdvcmstPndvcmtsZXRzLmZyb250KCktPm91dHB1dC5mbGFncyA9IChDMkZyYW1lRGF0YTo6ZmxhZ3NfdClmbGFnczsKKyAgICAgICAgd29yay0+d29ya2xldHMuZnJvbnQoKS0+b3V0cHV0LmJ1ZmZlcnMuY2xlYXIoKTsKKyAgICAgICAgd29yay0+d29ya2xldHMuZnJvbnQoKS0+b3V0cHV0LmJ1ZmZlcnMucHVzaF9iYWNrKGJ1ZmZlcik7CisgICAgICAgIHdvcmstPndvcmtsZXRzLmZyb250KCktPm91dHB1dC5vcmRpbmFsID0gd29yay0+aW5wdXQub3JkaW5hbDsKKyAgICAgICAgd29yay0+d29ya2xldHNQcm9jZXNzZWQgPSAxdTsKKyAgICB9OworICAgIGlmICh3b3JrICYmIGMyX2NudHI2NF90KGluZGV4KSA9PSB3b3JrLT5pbnB1dC5vcmRpbmFsLmZyYW1lSW5kZXgpIHsKKyAgICAgICAgZmlsbFdvcmsod29yayk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgZmluaXNoKGluZGV4LCBmaWxsV29yayk7CisgICAgfQorfQorCit2b2lkIEMyU29mdFZweERlYzo6cHJvY2VzcygKKyAgICAgICAgY29uc3Qgc3RkOjp1bmlxdWVfcHRyPEMyV29yaz4gJndvcmssCisgICAgICAgIGNvbnN0IHN0ZDo6c2hhcmVkX3B0cjxDMkJsb2NrUG9vbD4gJnBvb2wpIHsKKyAgICAvLyBJbml0aWFsaXplIG91dHB1dCB3b3JrCisgICAgd29yay0+cmVzdWx0ID0gQzJfT0s7CisgICAgd29yay0+d29ya2xldHNQcm9jZXNzZWQgPSAwdTsKKyAgICB3b3JrLT53b3JrbGV0cy5mcm9udCgpLT5vdXRwdXQuY29uZmlnVXBkYXRlLmNsZWFyKCk7CisgICAgd29yay0+d29ya2xldHMuZnJvbnQoKS0+b3V0cHV0LmZsYWdzID0gd29yay0+aW5wdXQuZmxhZ3M7CisKKyAgICBpZiAobVNpZ25hbGxlZEVycm9yIHx8IG1TaWduYWxsZWRPdXRwdXRFb3MpIHsKKyAgICAgICAgd29yay0+cmVzdWx0ID0gQzJfQkFEX1ZBTFVFOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgc2l6ZV90IGluT2Zmc2V0ID0gMHU7CisgICAgc2l6ZV90IGluU2l6ZSA9IDB1OworICAgIEMyUmVhZFZpZXcgclZpZXcgPSBtRHVtbXlSZWFkVmlldzsKKyAgICBpZiAoIXdvcmstPmlucHV0LmJ1ZmZlcnMuZW1wdHkoKSkgeworICAgICAgICByVmlldyA9IHdvcmstPmlucHV0LmJ1ZmZlcnNbMF0tPmRhdGEoKS5saW5lYXJCbG9ja3MoKS5mcm9udCgpLm1hcCgpLmdldCgpOworICAgICAgICBpblNpemUgPSByVmlldy5jYXBhY2l0eSgpOworICAgICAgICBpZiAoaW5TaXplICYmIHJWaWV3LmVycm9yKCkpIHsKKyAgICAgICAgICAgIEFMT0dFKCJyZWFkIHZpZXcgbWFwIGZhaWxlZCAlZCIsIHJWaWV3LmVycm9yKCkpOworICAgICAgICAgICAgd29yay0+cmVzdWx0ID0gQzJfQ09SUlVQVEVEOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgfQorCisgICAgYm9vbCBjb2RlY0NvbmZpZyA9ICgod29yay0+aW5wdXQuZmxhZ3MgJiBDMkZyYW1lRGF0YTo6RkxBR19DT0RFQ19DT05GSUcpICE9MCk7CisgICAgYm9vbCBlb3MgPSAoKHdvcmstPmlucHV0LmZsYWdzICYgQzJGcmFtZURhdGE6OkZMQUdfRU5EX09GX1NUUkVBTSkgIT0gMCk7CisKKyAgICBBTE9HVigiaW4gYnVmZmVyIGF0dHIuIHNpemUgJXp1IHRpbWVzdGFtcCAlZCBmcmFtZWluZGV4ICVkLCBmbGFncyAleCIsCisgICAgICAgICAgaW5TaXplLCAoaW50KXdvcmstPmlucHV0Lm9yZGluYWwudGltZXN0YW1wLnBlZWt1KCksCisgICAgICAgICAgKGludCl3b3JrLT5pbnB1dC5vcmRpbmFsLmZyYW1lSW5kZXgucGVla3UoKSwgd29yay0+aW5wdXQuZmxhZ3MpOworCisgICAgLy8gU29mdHdhcmUgVlA5IERlY29kZXIgZG9lcyBub3QgbmVlZCB0aGUgQ29kZWMgU3BlY2lmaWMgRGF0YSAoQ1NEKQorICAgIC8vIChzcGVjaWZpZWQgaW4gaHR0cDovL3d3dy53ZWJtcHJvamVjdC5vcmcvdnA5L3Byb2ZpbGVzLykuIElnbm9yZSBpdCBpZgorICAgIC8vIGl0IHdhcyBwYXNzZWQuCisgICAgaWYgKGNvZGVjQ29uZmlnKSB7CisgICAgICAgIC8vIElnbm9yZSBDU0QgYnVmZmVyIGZvciBWUDkuCisgICAgICAgIGlmIChtTW9kZSA9PSBNT0RFX1ZQOSkgeworICAgICAgICAgICAgZmlsbEVtcHR5V29yayh3b3JrKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIC8vIFRvbGVyYXRlIHRoZSBDU0QgYnVmZmVyIGZvciBWUDguIFRoaXMgaXMgYSB3b3JrYXJvdW5kCisgICAgICAgICAgICAvLyBmb3IgYi8yODY4OTUzNi4gY29udGludWUKKyAgICAgICAgICAgIEFMT0dXKCJXQVJOSU5HOiBHb3QgQ1NEIGJ1ZmZlciBmb3IgVlA4LiBDb250aW51ZSIpOworICAgICAgICB9CisgICAgfQorCisgICAgaW50NjRfdCBmcmFtZUluZGV4ID0gd29yay0+aW5wdXQub3JkaW5hbC5mcmFtZUluZGV4LnBlZWtsbCgpOworCisgICAgaWYgKGluU2l6ZSkgeworICAgICAgICB1aW50OF90ICpiaXRzdHJlYW0gPSBjb25zdF9jYXN0PHVpbnQ4X3QgKj4oclZpZXcuZGF0YSgpICsgaW5PZmZzZXQpOworICAgICAgICB2cHhfY29kZWNfZXJyX3QgZXJyID0gdnB4X2NvZGVjX2RlY29kZSgKKyAgICAgICAgICAgICAgICBtQ29kZWNDdHgsIGJpdHN0cmVhbSwgaW5TaXplLCAmZnJhbWVJbmRleCwgMCk7CisgICAgICAgIGlmIChlcnIgIT0gVlBYX0NPREVDX09LKSB7CisgICAgICAgICAgICBBTE9HRSgib24yIGRlY29kZXIgZmFpbGVkIHRvIGRlY29kZSBmcmFtZS4gZXJyOiAlZCIsIGVycik7CisgICAgICAgICAgICBtU2lnbmFsbGVkRXJyb3IgPSB0cnVlOworICAgICAgICAgICAgd29yay0+d29ya2xldHNQcm9jZXNzZWQgPSAxdTsKKyAgICAgICAgICAgIHdvcmstPnJlc3VsdCA9IEMyX0NPUlJVUFRFRDsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgIH0KKworICAgICh2b2lkKW91dHB1dEJ1ZmZlcihwb29sLCB3b3JrKTsKKworICAgIGlmIChlb3MpIHsKKyAgICAgICAgZHJhaW5JbnRlcm5hbChEUkFJTl9DT01QT05FTlRfV0lUSF9FT1MsIHBvb2wsIHdvcmspOworICAgICAgICBtU2lnbmFsbGVkT3V0cHV0RW9zID0gdHJ1ZTsKKyAgICB9IGVsc2UgaWYgKCFpblNpemUpIHsKKyAgICAgICAgZmlsbEVtcHR5V29yayh3b3JrKTsKKyAgICB9Cit9CisKK3N0YXRpYyB2b2lkIGNvcHlPdXRwdXRCdWZmZXJUb1lWMTJGcmFtZSh1aW50OF90ICpkc3QsCisgICAgICAgIGNvbnN0IHVpbnQ4X3QgKnNyY1ksIGNvbnN0IHVpbnQ4X3QgKnNyY1UsIGNvbnN0IHVpbnQ4X3QgKnNyY1YsCisgICAgICAgIHNpemVfdCBzcmNZU3RyaWRlLCBzaXplX3Qgc3JjVVN0cmlkZSwgc2l6ZV90IHNyY1ZTdHJpZGUsCisgICAgICAgIHVpbnQzMl90IHdpZHRoLCB1aW50MzJfdCBoZWlnaHQsIGludDMyX3QgYnBwKSB7CisgICAgc2l6ZV90IGRzdFlTdHJpZGUgPSBhbGlnbih3aWR0aCwgMTYpICogYnBwIDsKKyAgICBzaXplX3QgZHN0VVZTdHJpZGUgPSBhbGlnbihkc3RZU3RyaWRlIC8gMiwgMTYpOworICAgIHVpbnQ4X3QgKmRzdFN0YXJ0ID0gZHN0OworCisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBoZWlnaHQ7ICsraSkgeworICAgICAgICAgbWVtY3B5KGRzdCwgc3JjWSwgd2lkdGggKiBicHApOworICAgICAgICAgc3JjWSArPSBzcmNZU3RyaWRlOworICAgICAgICAgZHN0ICs9IGRzdFlTdHJpZGU7CisgICAgfQorCisgICAgZHN0ID0gZHN0U3RhcnQgKyBkc3RZU3RyaWRlICogaGVpZ2h0OworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgaGVpZ2h0IC8gMjsgKytpKSB7CisgICAgICAgICBtZW1jcHkoZHN0LCBzcmNWLCB3aWR0aCAvIDIgKiBicHApOworICAgICAgICAgc3JjViArPSBzcmNWU3RyaWRlOworICAgICAgICAgZHN0ICs9IGRzdFVWU3RyaWRlOworICAgIH0KKworICAgIGRzdCA9IGRzdFN0YXJ0ICsgKGRzdFlTdHJpZGUgKiBoZWlnaHQpICsgKGRzdFVWU3RyaWRlICogaGVpZ2h0IC8gMik7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBoZWlnaHQgLyAyOyArK2kpIHsKKyAgICAgICAgIG1lbWNweShkc3QsIHNyY1UsIHdpZHRoIC8gMiAqIGJwcCk7CisgICAgICAgICBzcmNVICs9IHNyY1VTdHJpZGU7CisgICAgICAgICBkc3QgKz0gZHN0VVZTdHJpZGU7CisgICAgfQorfQorCitib29sIEMyU29mdFZweERlYzo6b3V0cHV0QnVmZmVyKAorICAgICAgICBjb25zdCBzdGQ6OnNoYXJlZF9wdHI8QzJCbG9ja1Bvb2w+ICZwb29sLAorICAgICAgICBjb25zdCBzdGQ6OnVuaXF1ZV9wdHI8QzJXb3JrPiAmd29yaykKK3sKKyAgICBpZiAoISh3b3JrICYmIHBvb2wpKSByZXR1cm4gZmFsc2U7CisKKyAgICB2cHhfY29kZWNfaXRlcl90IGl0ZXIgPSBudWxscHRyOworICAgIHZweF9pbWFnZV90ICppbWcgPSB2cHhfY29kZWNfZ2V0X2ZyYW1lKG1Db2RlY0N0eCwgJml0ZXIpOworCisgICAgaWYgKCFpbWcpIHJldHVybiBmYWxzZTsKKworICAgIGlmIChpbWctPmRfdyAhPSBtV2lkdGggfHwgaW1nLT5kX2ggIT0gbUhlaWdodCkgeworICAgICAgICBtV2lkdGggPSBpbWctPmRfdzsKKyAgICAgICAgbUhlaWdodCA9IGltZy0+ZF9oOworCisgICAgICAgIEMyVmlkZW9TaXplU3RyZWFtSW5mbzo6b3V0cHV0IHNpemUoMHUsIG1XaWR0aCwgbUhlaWdodCk7CisgICAgICAgIHN0ZDo6dmVjdG9yPHN0ZDo6dW5pcXVlX3B0cjxDMlNldHRpbmdSZXN1bHQ+PiBmYWlsdXJlczsKKyAgICAgICAgYzJfc3RhdHVzX3QgZXJyID0gbUludGYtPmNvbmZpZyh7JnNpemV9LCBDMl9NQVlfQkxPQ0ssICZmYWlsdXJlcyk7CisgICAgICAgIGlmIChlcnIgPT0gQzJfT0spIHsKKyAgICAgICAgICAgIHdvcmstPndvcmtsZXRzLmZyb250KCktPm91dHB1dC5jb25maWdVcGRhdGUucHVzaF9iYWNrKAorICAgICAgICAgICAgICAgIEMyUGFyYW06OkNvcHkoc2l6ZSkpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgQUxPR0UoIkNvbmZpZyB1cGRhdGUgc2l6ZSBmYWlsZWQiKTsKKyAgICAgICAgICAgIG1TaWduYWxsZWRFcnJvciA9IHRydWU7CisgICAgICAgICAgICB3b3JrLT53b3JrbGV0c1Byb2Nlc3NlZCA9IDF1OworICAgICAgICAgICAgd29yay0+cmVzdWx0ID0gQzJfQ09SUlVQVEVEOworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisKKyAgICB9CisgICAgQ0hFQ0soaW1nLT5mbXQgPT0gVlBYX0lNR19GTVRfSTQyMCB8fCBpbWctPmZtdCA9PSBWUFhfSU1HX0ZNVF9JNDIwMTYpOworICAgIGludDMyX3QgYnBwID0gMTsKKyAgICBpZiAoaW1nLT5mbXQgPT0gVlBYX0lNR19GTVRfSTQyMDE2KSB7CisgICAgICAgIGJwcCA9IDI7CisgICAgfQorCisgICAgc3RkOjpzaGFyZWRfcHRyPEMyR3JhcGhpY0Jsb2NrPiBibG9jazsKKyAgICB1aW50MzJfdCBmb3JtYXQgPSBIQUxfUElYRUxfRk9STUFUX1lWMTI7CisgICAgQzJNZW1vcnlVc2FnZSB1c2FnZSA9IHsgQzJNZW1vcnlVc2FnZTo6Q1BVX1JFQUQsIEMyTWVtb3J5VXNhZ2U6OkNQVV9XUklURSB9OworICAgIGMyX3N0YXR1c190IGVyciA9IHBvb2wtPmZldGNoR3JhcGhpY0Jsb2NrKGFsaWduKG1XaWR0aCwgMTYpICogYnBwLCBtSGVpZ2h0LCBmb3JtYXQsIHVzYWdlLCAmYmxvY2spOworICAgIGlmIChlcnIgIT0gQzJfT0spIHsKKyAgICAgICAgQUxPR0UoImZldGNoR3JhcGhpY0Jsb2NrIGZvciBPdXRwdXQgZmFpbGVkIHdpdGggc3RhdHVzICVkIiwgZXJyKTsKKyAgICAgICAgd29yay0+cmVzdWx0ID0gZXJyOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgQzJHcmFwaGljVmlldyB3VmlldyA9IGJsb2NrLT5tYXAoKS5nZXQoKTsKKyAgICBpZiAod1ZpZXcuZXJyb3IoKSkgeworICAgICAgICBBTE9HRSgiZ3JhcGhpYyB2aWV3IG1hcCBmYWlsZWQgJWQiLCB3Vmlldy5lcnJvcigpKTsKKyAgICAgICAgd29yay0+cmVzdWx0ID0gQzJfQ09SUlVQVEVEOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgQUxPR1YoInByb3ZpZGVkICglZHglZCkgcmVxdWlyZWQgKCVkeCVkKSwgb3V0IGZyYW1laW5kZXggJWQiLAorICAgICAgICAgICBibG9jay0+d2lkdGgoKSwgYmxvY2stPmhlaWdodCgpLCBtV2lkdGgsIG1IZWlnaHQsIChpbnQpKihpbnQ2NF90ICopaW1nLT51c2VyX3ByaXYpOworCisgICAgdWludDhfdCAqZHN0ID0gY29uc3RfY2FzdDx1aW50OF90ICo+KHdWaWV3LmRhdGEoKVtDMlBsYW5hckxheW91dDo6UExBTkVfWV0pOworICAgIHNpemVfdCBzcmNZU3RyaWRlID0gaW1nLT5zdHJpZGVbVlBYX1BMQU5FX1ldOworICAgIHNpemVfdCBzcmNVU3RyaWRlID0gaW1nLT5zdHJpZGVbVlBYX1BMQU5FX1VdOworICAgIHNpemVfdCBzcmNWU3RyaWRlID0gaW1nLT5zdHJpZGVbVlBYX1BMQU5FX1ZdOworICAgIGNvbnN0IHVpbnQ4X3QgKnNyY1kgPSAoY29uc3QgdWludDhfdCAqKWltZy0+cGxhbmVzW1ZQWF9QTEFORV9ZXTsKKyAgICBjb25zdCB1aW50OF90ICpzcmNVID0gKGNvbnN0IHVpbnQ4X3QgKilpbWctPnBsYW5lc1tWUFhfUExBTkVfVV07CisgICAgY29uc3QgdWludDhfdCAqc3JjViA9IChjb25zdCB1aW50OF90ICopaW1nLT5wbGFuZXNbVlBYX1BMQU5FX1ZdOworICAgIGNvcHlPdXRwdXRCdWZmZXJUb1lWMTJGcmFtZShkc3QsIHNyY1ksIHNyY1UsIHNyY1YsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNyY1lTdHJpZGUsIHNyY1VTdHJpZGUsIHNyY1ZTdHJpZGUsIG1XaWR0aCwgbUhlaWdodCwgYnBwKTsKKworICAgIGZpbmlzaFdvcmsoKihpbnQ2NF90ICopaW1nLT51c2VyX3ByaXYsIHdvcmssIHN0ZDo6bW92ZShibG9jaykpOworICAgIHJldHVybiB0cnVlOworfQorCitjMl9zdGF0dXNfdCBDMlNvZnRWcHhEZWM6OmRyYWluSW50ZXJuYWwoCisgICAgICAgIHVpbnQzMl90IGRyYWluTW9kZSwKKyAgICAgICAgY29uc3Qgc3RkOjpzaGFyZWRfcHRyPEMyQmxvY2tQb29sPiAmcG9vbCwKKyAgICAgICAgY29uc3Qgc3RkOjp1bmlxdWVfcHRyPEMyV29yaz4gJndvcmspIHsKKyAgICBpZiAoZHJhaW5Nb2RlID09IE5PX0RSQUlOKSB7CisgICAgICAgIEFMT0dXKCJkcmFpbiB3aXRoIE5PX0RSQUlOOiBuby1vcCIpOworICAgICAgICByZXR1cm4gQzJfT0s7CisgICAgfQorICAgIGlmIChkcmFpbk1vZGUgPT0gRFJBSU5fQ0hBSU4pIHsKKyAgICAgICAgQUxPR1coIkRSQUlOX0NIQUlOIG5vdCBzdXBwb3J0ZWQiKTsKKyAgICAgICAgcmV0dXJuIEMyX09NSVRURUQ7CisgICAgfQorCisgICAgd2hpbGUgKChvdXRwdXRCdWZmZXIocG9vbCwgd29yaykpKSB7CisgICAgfQorCisgICAgaWYgKGRyYWluTW9kZSA9PSBEUkFJTl9DT01QT05FTlRfV0lUSF9FT1MgJiYKKyAgICAgICAgICAgIHdvcmsgJiYgd29yay0+d29ya2xldHNQcm9jZXNzZWQgPT0gMHUpIHsKKyAgICAgICAgZmlsbEVtcHR5V29yayh3b3JrKTsKKyAgICB9CisKKyAgICByZXR1cm4gQzJfT0s7Cit9CitjMl9zdGF0dXNfdCBDMlNvZnRWcHhEZWM6OmRyYWluKAorICAgICAgICB1aW50MzJfdCBkcmFpbk1vZGUsCisgICAgICAgIGNvbnN0IHN0ZDo6c2hhcmVkX3B0cjxDMkJsb2NrUG9vbD4gJnBvb2wpIHsKKyAgICByZXR1cm4gZHJhaW5JbnRlcm5hbChkcmFpbk1vZGUsIHBvb2wsIG51bGxwdHIpOworfQorCitjbGFzcyBDMlNvZnRWcHhGYWN0b3J5IDogcHVibGljIEMyQ29tcG9uZW50RmFjdG9yeSB7CitwdWJsaWM6CisgICAgQzJTb2Z0VnB4RmFjdG9yeSgpIDogbUhlbHBlcihzdGQ6OnN0YXRpY19wb2ludGVyX2Nhc3Q8QzJSZWZsZWN0b3JIZWxwZXI+KAorICAgICAgICBHZXRDb2RlYzJQbGF0Zm9ybUNvbXBvbmVudFN0b3JlKCktPmdldFBhcmFtUmVmbGVjdG9yKCkpKSB7CisgICAgfQorCisgICAgdmlydHVhbCBjMl9zdGF0dXNfdCBjcmVhdGVDb21wb25lbnQoCisgICAgICAgICAgICBjMl9ub2RlX2lkX3QgaWQsCisgICAgICAgICAgICBzdGQ6OnNoYXJlZF9wdHI8QzJDb21wb25lbnQ+KiBjb25zdCBjb21wb25lbnQsCisgICAgICAgICAgICBzdGQ6OmZ1bmN0aW9uPHZvaWQoQzJDb21wb25lbnQqKT4gZGVsZXRlcikgb3ZlcnJpZGUgeworICAgICAgICAqY29tcG9uZW50ID0gc3RkOjpzaGFyZWRfcHRyPEMyQ29tcG9uZW50PigKKyAgICAgICAgICAgIG5ldyBDMlNvZnRWcHhEZWMoQ09NUE9ORU5UX05BTUUsIGlkLAorICAgICAgICAgICAgICAgICAgICAgICAgICBzdGQ6Om1ha2Vfc2hhcmVkPEMyU29mdFZweERlYzo6SW50ZkltcGw+KG1IZWxwZXIpKSwKKyAgICAgICAgICAgIGRlbGV0ZXIpOworICAgICAgICByZXR1cm4gQzJfT0s7CisgICAgfQorCisgICAgdmlydHVhbCBjMl9zdGF0dXNfdCBjcmVhdGVJbnRlcmZhY2UoCisgICAgICAgICAgICBjMl9ub2RlX2lkX3QgaWQsCisgICAgICAgICAgICBzdGQ6OnNoYXJlZF9wdHI8QzJDb21wb25lbnRJbnRlcmZhY2U+KiBjb25zdCBpbnRlcmZhY2UsCisgICAgICAgICAgICBzdGQ6OmZ1bmN0aW9uPHZvaWQoQzJDb21wb25lbnRJbnRlcmZhY2UqKT4gZGVsZXRlcikgb3ZlcnJpZGUgeworICAgICAgICAqaW50ZXJmYWNlID0gc3RkOjpzaGFyZWRfcHRyPEMyQ29tcG9uZW50SW50ZXJmYWNlPigKKyAgICAgICAgICAgIG5ldyBTaW1wbGVJbnRlcmZhY2U8QzJTb2Z0VnB4RGVjOjpJbnRmSW1wbD4oCisgICAgICAgICAgICAgICAgQ09NUE9ORU5UX05BTUUsIGlkLAorICAgICAgICAgICAgICAgIHN0ZDo6bWFrZV9zaGFyZWQ8QzJTb2Z0VnB4RGVjOjpJbnRmSW1wbD4obUhlbHBlcikpLAorICAgICAgICAgICAgZGVsZXRlcik7CisgICAgICAgIHJldHVybiBDMl9PSzsKKyAgICB9CisKKyAgICB2aXJ0dWFsIH5DMlNvZnRWcHhGYWN0b3J5KCkgb3ZlcnJpZGUgPSBkZWZhdWx0OworCitwcml2YXRlOgorICAgIHN0ZDo6c2hhcmVkX3B0cjxDMlJlZmxlY3RvckhlbHBlcj4gbUhlbHBlcjsKK307CisKK30gIC8vIG5hbWVzcGFjZSBhbmRyb2lkCisKK2V4dGVybiAiQyIgOjpDMkNvbXBvbmVudEZhY3RvcnkqIENyZWF0ZUNvZGVjMkZhY3RvcnkoKSB7CisgICAgQUxPR1YoImluICVzIiwgX19mdW5jX18pOworICAgIHJldHVybiBuZXcgOjphbmRyb2lkOjpDMlNvZnRWcHhGYWN0b3J5KCk7Cit9CisKK2V4dGVybiAiQyIgdm9pZCBEZXN0cm95Q29kZWMyRmFjdG9yeSg6OkMyQ29tcG9uZW50RmFjdG9yeSogZmFjdG9yeSkgeworICAgIEFMT0dWKCJpbiAlcyIsIF9fZnVuY19fKTsKKyAgICBkZWxldGUgZmFjdG9yeTsKK30KZGlmZiAtLWdpdCBhL21lZGlhL2NvZGVjMi9jb21wb25lbnRzL3ZweC9DMlNvZnRWcHhEZWMuaCBiL21lZGlhL2NvZGVjMi9jb21wb25lbnRzL3ZweC9DMlNvZnRWcHhEZWMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42MGM4NDg0Ci0tLSAvZGV2L251bGwKKysrIGIvbWVkaWEvY29kZWMyL2NvbXBvbmVudHMvdnB4L0MyU29mdFZweERlYy5oCkBAIC0wLDAgKzEsNzkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTggVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworCisjaWZuZGVmIEFORFJPSURfQzJfU09GVF9WUFhfREVDX0hfCisjZGVmaW5lIEFORFJPSURfQzJfU09GVF9WUFhfREVDX0hfCisKKyNpbmNsdWRlIDxTaW1wbGVDMkNvbXBvbmVudC5oPgorCisKKyNpbmNsdWRlICJ2cHgvdnB4X2RlY29kZXIuaCIKKyNpbmNsdWRlICJ2cHgvdnA4ZHguaCIKKworbmFtZXNwYWNlIGFuZHJvaWQgeworCitzdHJ1Y3QgQzJTb2Z0VnB4RGVjIDogcHVibGljIFNpbXBsZUMyQ29tcG9uZW50IHsKKyAgICBjbGFzcyBJbnRmSW1wbDsKKworICAgIEMyU29mdFZweERlYyhjb25zdCBjaGFyKiBuYW1lLCBjMl9ub2RlX2lkX3QgaWQsCisgICAgICAgICAgICAgIGNvbnN0IHN0ZDo6c2hhcmVkX3B0cjxJbnRmSW1wbD4mIGludGZJbXBsKTsKKyAgICB2aXJ0dWFsIH5DMlNvZnRWcHhEZWMoKTsKKworICAgIC8vIEZyb20gU2ltcGxlQzJDb21wb25lbnQKKyAgICBjMl9zdGF0dXNfdCBvbkluaXQoKSBvdmVycmlkZTsKKyAgICBjMl9zdGF0dXNfdCBvblN0b3AoKSBvdmVycmlkZTsKKyAgICB2b2lkIG9uUmVzZXQoKSBvdmVycmlkZTsKKyAgICB2b2lkIG9uUmVsZWFzZSgpIG92ZXJyaWRlOworICAgIGMyX3N0YXR1c190IG9uRmx1c2hfc20oKSBvdmVycmlkZTsKKyAgICB2b2lkIHByb2Nlc3MoCisgICAgICAgICAgICBjb25zdCBzdGQ6OnVuaXF1ZV9wdHI8QzJXb3JrPiAmd29yaywKKyAgICAgICAgICAgIGNvbnN0IHN0ZDo6c2hhcmVkX3B0cjxDMkJsb2NrUG9vbD4gJnBvb2wpIG92ZXJyaWRlOworICAgIGMyX3N0YXR1c190IGRyYWluKAorICAgICAgICAgICAgdWludDMyX3QgZHJhaW5Nb2RlLAorICAgICAgICAgICAgY29uc3Qgc3RkOjpzaGFyZWRfcHRyPEMyQmxvY2tQb29sPiAmcG9vbCkgb3ZlcnJpZGU7CisgcHJpdmF0ZToKKyAgICBlbnVtIHsKKyAgICAgICAgTU9ERV9WUDgsCisgICAgICAgIE1PREVfVlA5LAorICAgIH0gbU1vZGU7CisKKyAgICBzdGQ6OnNoYXJlZF9wdHI8SW50ZkltcGw+IG1JbnRmOworICAgIHZweF9jb2RlY19jdHhfdCAqbUNvZGVjQ3R4OworICAgIGJvb2wgbUZyYW1lUGFyYWxsZWxNb2RlOyAgLy8gRnJhbWUgcGFyYWxsZWwgaXMgb25seSBzdXBwb3J0ZWQgYnkgVlA5IGRlY29kZXIuCisKKyAgICB1aW50MzJfdCBtV2lkdGg7CisgICAgdWludDMyX3QgbUhlaWdodDsKKyAgICBib29sIG1TaWduYWxsZWRPdXRwdXRFb3M7CisgICAgYm9vbCBtU2lnbmFsbGVkRXJyb3I7CisKKyAgICBzdGF0dXNfdCBpbml0RGVjb2RlcigpOworICAgIHN0YXR1c190IGRlc3Ryb3lEZWNvZGVyKCk7CisgICAgdm9pZCBmaW5pc2hXb3JrKHVpbnQ2NF90IGluZGV4LCBjb25zdCBzdGQ6OnVuaXF1ZV9wdHI8QzJXb3JrPiAmd29yaywKKyAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RkOjpzaGFyZWRfcHRyPEMyR3JhcGhpY0Jsb2NrPiAmYmxvY2spOworICAgIGJvb2wgb3V0cHV0QnVmZmVyKAorICAgICAgICAgICAgY29uc3Qgc3RkOjpzaGFyZWRfcHRyPEMyQmxvY2tQb29sPiAmcG9vbCwKKyAgICAgICAgICAgIGNvbnN0IHN0ZDo6dW5pcXVlX3B0cjxDMldvcms+ICZ3b3JrKTsKKyAgICBjMl9zdGF0dXNfdCBkcmFpbkludGVybmFsKAorICAgICAgICAgICAgdWludDMyX3QgZHJhaW5Nb2RlLAorICAgICAgICAgICAgY29uc3Qgc3RkOjpzaGFyZWRfcHRyPEMyQmxvY2tQb29sPiAmcG9vbCwKKyAgICAgICAgICAgIGNvbnN0IHN0ZDo6dW5pcXVlX3B0cjxDMldvcms+ICZ3b3JrKTsKKworICAgIEMyX0RPX05PVF9DT1BZKEMyU29mdFZweERlYyk7Cit9OworCit9ICAvLyBuYW1lc3BhY2UgYW5kcm9pZAorCisjZW5kaWYgIC8vIEFORFJPSURfQzJfU09GVF9WUFhfREVDX0hfCmRpZmYgLS1naXQgYS9tZWRpYS9jb2RlYzIvY29tcG9uZW50cy92cHgvQzJTb2Z0VnB4RW5jLmNwcCBiL21lZGlhL2NvZGVjMi9jb21wb25lbnRzL3ZweC9DMlNvZnRWcHhFbmMuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE1NWE4NGYKLS0tIC9kZXYvbnVsbAorKysgYi9tZWRpYS9jb2RlYzIvY29tcG9uZW50cy92cHgvQzJTb2Z0VnB4RW5jLmNwcApAQCAtMCwwICsxLDY3MCBAQAorLyoKKyAqIENvcHlyaWdodCAyMDE4IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KKworLy8jZGVmaW5lIExPR19OREVCVUcgMAorI2RlZmluZSBMT0dfVEFHICJDMlNvZnRWcHhFbmMiCisjaW5jbHVkZSA8bG9nL2xvZy5oPgorI2luY2x1ZGUgPHV0aWxzL21pc2MuaD4KKworI2luY2x1ZGUgPG1lZGlhL2hhcmR3YXJlL1ZpZGVvQVBJLmg+CisKKyNpbmNsdWRlIDxDb2RlYzJCdWZmZXJVdGlscy5oPgorI2luY2x1ZGUgPEMyRGVidWcuaD4KKyNpbmNsdWRlICJDMlNvZnRWcHhFbmMuaCIKKworI2lmbmRlZiBJTlQzMl9NQVgKKyNkZWZpbmUgSU5UMzJfTUFYICAgMjE0NzQ4MzY0NworI2VuZGlmCisKK25hbWVzcGFjZSBhbmRyb2lkIHsKKworI2lmIDAKK3N0YXRpYyBzaXplX3QgZ2V0Q3B1Q29yZUNvdW50KCkgeworICAgIGxvbmcgY3B1Q29yZUNvdW50ID0gMTsKKyNpZiBkZWZpbmVkKF9TQ19OUFJPQ0VTU09SU19PTkxOKQorICAgIGNwdUNvcmVDb3VudCA9IHN5c2NvbmYoX1NDX05QUk9DRVNTT1JTX09OTE4pOworI2Vsc2UKKyAgICAvLyBfU0NfTlBST0NfT05MTiBtdXN0IGJlIGRlZmluZWQuLi4KKyAgICBjcHVDb3JlQ291bnQgPSBzeXNjb25mKF9TQ19OUFJPQ19PTkxOKTsKKyNlbmRpZgorICAgIENIRUNLKGNwdUNvcmVDb3VudCA+PSAxKTsKKyAgICBBTE9HVigiTnVtYmVyIG9mIENQVSBjb3JlczogJWxkIiwgY3B1Q29yZUNvdW50KTsKKyAgICByZXR1cm4gKHNpemVfdCljcHVDb3JlQ291bnQ7Cit9CisjZW5kaWYKKworQzJTb2Z0VnB4RW5jOjpDMlNvZnRWcHhFbmMoY29uc3QgY2hhciogbmFtZSwgYzJfbm9kZV9pZF90IGlkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RkOjpzaGFyZWRfcHRyPEludGZJbXBsPiYgaW50ZkltcGwpCisgICAgOiBTaW1wbGVDMkNvbXBvbmVudCgKKyAgICAgICAgICBzdGQ6Om1ha2Vfc2hhcmVkPFNpbXBsZUludGVyZmFjZTxJbnRmSW1wbD4+KG5hbWUsIGlkLCBpbnRmSW1wbCkpLAorICAgICAgbUludGYoaW50ZkltcGwpLAorICAgICAgbUNvZGVjQ29udGV4dChudWxscHRyKSwKKyAgICAgIG1Db2RlY0NvbmZpZ3VyYXRpb24obnVsbHB0ciksCisgICAgICBtQ29kZWNJbnRlcmZhY2UobnVsbHB0ciksCisgICAgICBtU3RyaWRlQWxpZ24oMiksCisgICAgICBtQ29sb3JGb3JtYXQoVlBYX0lNR19GTVRfSTQyMCksCisgICAgICBtQml0cmF0ZUNvbnRyb2xNb2RlKFZQWF9WQlIpLAorICAgICAgbUVycm9yUmVzaWxpZW5jZShmYWxzZSksCisgICAgICBtTWluUXVhbnRpemVyKDApLAorICAgICAgbU1heFF1YW50aXplcigwKSwKKyAgICAgIG1UZW1wb3JhbExheWVycygwKSwKKyAgICAgIG1UZW1wb3JhbFBhdHRlcm5UeXBlKFZQWFRlbXBvcmFsTGF5ZXJQYXR0ZXJuTm9uZSksCisgICAgICBtVGVtcG9yYWxQYXR0ZXJuTGVuZ3RoKDApLAorICAgICAgbVRlbXBvcmFsUGF0dGVybklkeCgwKSwKKyAgICAgIG1MYXN0VGltZXN0YW1wKDB4N0ZGRkZGRkZGRkZGRkZGRnVsbCksCisgICAgICBtU2lnbmFsbGVkT3V0cHV0RW9zKGZhbHNlKSwKKyAgICAgIG1TaWduYWxsZWRFcnJvcihmYWxzZSkgeworICAgIG1lbXNldChtVGVtcG9yYWxMYXllckJpdHJhdGVSYXRpbywgMCwgc2l6ZW9mKG1UZW1wb3JhbExheWVyQml0cmF0ZVJhdGlvKSk7CisgICAgbVRlbXBvcmFsTGF5ZXJCaXRyYXRlUmF0aW9bMF0gPSAxMDA7Cit9CisKK0MyU29mdFZweEVuYzo6fkMyU29mdFZweEVuYygpIHsKKyAgICBvblJlbGVhc2UoKTsKK30KKworYzJfc3RhdHVzX3QgQzJTb2Z0VnB4RW5jOjpvbkluaXQoKSB7CisgICAgc3RhdHVzX3QgZXJyID0gaW5pdEVuY29kZXIoKTsKKyAgICByZXR1cm4gZXJyID09IE9LID8gQzJfT0sgOiBDMl9DT1JSVVBURUQ7Cit9CisKK3ZvaWQgQzJTb2Z0VnB4RW5jOjpvblJlbGVhc2UoKSB7CisgICAgaWYgKG1Db2RlY0NvbnRleHQpIHsKKyAgICAgICAgdnB4X2NvZGVjX2Rlc3Ryb3kobUNvZGVjQ29udGV4dCk7CisgICAgICAgIGRlbGV0ZSBtQ29kZWNDb250ZXh0OworICAgICAgICBtQ29kZWNDb250ZXh0ID0gbnVsbHB0cjsKKyAgICB9CisKKyAgICBpZiAobUNvZGVjQ29uZmlndXJhdGlvbikgeworICAgICAgICBkZWxldGUgbUNvZGVjQ29uZmlndXJhdGlvbjsKKyAgICAgICAgbUNvZGVjQ29uZmlndXJhdGlvbiA9IG51bGxwdHI7CisgICAgfQorCisgICAgLy8gdGhpcyBvbmUgaXMgbm90IGFsbG9jYXRlZCBieSB1cworICAgIG1Db2RlY0ludGVyZmFjZSA9IG51bGxwdHI7Cit9CisKK2MyX3N0YXR1c190IEMyU29mdFZweEVuYzo6b25TdG9wKCkgeworICAgIG9uUmVsZWFzZSgpOworICAgIG1MYXN0VGltZXN0YW1wID0gMHg3RkZGRkZGRkZGRkZGRkZGTEw7CisgICAgbVNpZ25hbGxlZE91dHB1dEVvcyA9IGZhbHNlOworICAgIG1TaWduYWxsZWRFcnJvciA9IGZhbHNlOworICAgIHJldHVybiBDMl9PSzsKK30KKwordm9pZCBDMlNvZnRWcHhFbmM6Om9uUmVzZXQoKSB7CisgICAgKHZvaWQpb25TdG9wKCk7Cit9CisKK2MyX3N0YXR1c190IEMyU29mdFZweEVuYzo6b25GbHVzaF9zbSgpIHsKKyAgICByZXR1cm4gb25TdG9wKCk7Cit9CisKK3N0YXR1c190IEMyU29mdFZweEVuYzo6aW5pdEVuY29kZXIoKSB7CisgICAgdnB4X2NvZGVjX2Vycl90IGNvZGVjX3JldHVybjsKKyAgICBzdGF0dXNfdCByZXN1bHQgPSBVTktOT1dOX0VSUk9SOworICAgIHsKKyAgICAgICAgSW50ZkltcGw6OkxvY2sgbG9jayA9IG1JbnRmLT5sb2NrKCk7CisgICAgICAgIG1TaXplID0gbUludGYtPmdldFNpemVfbCgpOworICAgICAgICBtQml0cmF0ZSA9IG1JbnRmLT5nZXRCaXRyYXRlX2woKTsKKyAgICAgICAgbUJpdHJhdGVNb2RlID0gbUludGYtPmdldEJpdHJhdGVNb2RlX2woKTsKKyAgICAgICAgbUZyYW1lUmF0ZSA9IG1JbnRmLT5nZXRGcmFtZVJhdGVfbCgpOworICAgICAgICBtSW50cmFSZWZyZXNoID0gbUludGYtPmdldEludHJhUmVmcmVzaF9sKCk7CisgICAgICAgIG1SZXF1ZXN0U3luYyA9IG1JbnRmLT5nZXRSZXF1ZXN0U3luY19sKCk7CisgICAgICAgIG1UZW1wb3JhbExheWVycyA9IG1JbnRmLT5nZXRUZW1wb3JhbExheWVyc19sKCktPm0ubGF5ZXJDb3VudDsKKyAgICB9CisKKyAgICBzd2l0Y2ggKG1CaXRyYXRlTW9kZS0+dmFsdWUpIHsKKyAgICAgICAgY2FzZSBDMkNvbmZpZzo6QklUUkFURV9WQVJJQUJMRToKKyAgICAgICAgICAgIG1CaXRyYXRlQ29udHJvbE1vZGUgPSBWUFhfVkJSOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgQzJDb25maWc6OkJJVFJBVEVfQ09OU1Q6CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBtQml0cmF0ZUNvbnRyb2xNb2RlID0gVlBYX0NCUjsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICBzZXRDb2RlY1NwZWNpZmljSW50ZXJmYWNlKCk7CisgICAgaWYgKCFtQ29kZWNJbnRlcmZhY2UpIGdvdG8gQ2xlYW5VcDsKKworICAgIEFMT0dEKCJWUHg6IGluaXRFbmNvZGVyLiBCUk1vZGU6ICV1LiBUU0xheWVyczogJXp1LiBLRjogJXUuIFFQOiAldSAtICV1IiwKKyAgICAgICAgICAodWludDMyX3QpbUJpdHJhdGVDb250cm9sTW9kZSwgbVRlbXBvcmFsTGF5ZXJzLCBtSW50Zi0+Z2V0U3luY0ZyYW1lUGVyaW9kKCksCisgICAgICAgICAgbU1pblF1YW50aXplciwgbU1heFF1YW50aXplcik7CisKKyAgICBtQ29kZWNDb25maWd1cmF0aW9uID0gbmV3IHZweF9jb2RlY19lbmNfY2ZnX3Q7CisgICAgaWYgKCFtQ29kZWNDb25maWd1cmF0aW9uKSBnb3RvIENsZWFuVXA7CisgICAgY29kZWNfcmV0dXJuID0gdnB4X2NvZGVjX2VuY19jb25maWdfZGVmYXVsdChtQ29kZWNJbnRlcmZhY2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtQ29kZWNDb25maWd1cmF0aW9uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCk7CisgICAgaWYgKGNvZGVjX3JldHVybiAhPSBWUFhfQ09ERUNfT0spIHsKKyAgICAgICAgQUxPR0UoIkVycm9yIHBvcHVsYXRpbmcgZGVmYXVsdCBjb25maWd1cmF0aW9uIGZvciB2cHggZW5jb2Rlci4iKTsKKyAgICAgICAgZ290byBDbGVhblVwOworICAgIH0KKworICAgIG1Db2RlY0NvbmZpZ3VyYXRpb24tPmdfdyA9IG1TaXplLT53aWR0aDsKKyAgICBtQ29kZWNDb25maWd1cmF0aW9uLT5nX2ggPSBtU2l6ZS0+aGVpZ2h0OworICAgIC8vbUNvZGVjQ29uZmlndXJhdGlvbi0+Z190aHJlYWRzID0gZ2V0Q3B1Q29yZUNvdW50KCk7CisgICAgbUNvZGVjQ29uZmlndXJhdGlvbi0+Z190aHJlYWRzID0gMDsKKyAgICBtQ29kZWNDb25maWd1cmF0aW9uLT5nX2Vycm9yX3Jlc2lsaWVudCA9IG1FcnJvclJlc2lsaWVuY2U7CisKKyAgICAvLyB0aW1lYmFzZSB1bml0IGlzIG1pY3Jvc2Vjb25kCisgICAgLy8gZ190aW1lYmFzZSBpcyBpbiBzZWNvbmRzIChpLmUuIDEvMTAwMDAwMCBzZWNvbmRzKQorICAgIG1Db2RlY0NvbmZpZ3VyYXRpb24tPmdfdGltZWJhc2UubnVtID0gMTsKKyAgICBtQ29kZWNDb25maWd1cmF0aW9uLT5nX3RpbWViYXNlLmRlbiA9IDEwMDAwMDA7CisgICAgLy8gcmNfdGFyZ2V0X2JpdHJhdGUgaXMgaW4ga2JwcywgbUJpdHJhdGUgaW4gYnBzCisgICAgbUNvZGVjQ29uZmlndXJhdGlvbi0+cmNfdGFyZ2V0X2JpdHJhdGUgPSAobUJpdHJhdGUtPnZhbHVlICsgNTAwKSAvIDEwMDA7CisgICAgbUNvZGVjQ29uZmlndXJhdGlvbi0+cmNfZW5kX3VzYWdlID0gbUJpdHJhdGVDb250cm9sTW9kZTsKKyAgICAvLyBEaXNhYmxlIGZyYW1lIGRyb3AgLSBub3QgYWxsb3dlZCBpbiBNZWRpYUNvZGVjIG5vdy4KKyAgICBtQ29kZWNDb25maWd1cmF0aW9uLT5yY19kcm9wZnJhbWVfdGhyZXNoID0gMDsKKyAgICAvLyBEaXNhYmxlIGxhZ2dlZCBlbmNvZGluZy4KKyAgICBtQ29kZWNDb25maWd1cmF0aW9uLT5nX2xhZ19pbl9mcmFtZXMgPSAwOworICAgIGlmIChtQml0cmF0ZUNvbnRyb2xNb2RlID09IFZQWF9DQlIpIHsKKyAgICAgICAgLy8gRGlzYWJsZSBzcGF0aWFsIHJlc2l6aW5nLgorICAgICAgICBtQ29kZWNDb25maWd1cmF0aW9uLT5yY19yZXNpemVfYWxsb3dlZCA9IDA7CisgICAgICAgIC8vIFNpbmdsZS1wYXNzIG1vZGUuCisgICAgICAgIG1Db2RlY0NvbmZpZ3VyYXRpb24tPmdfcGFzcyA9IFZQWF9SQ19PTkVfUEFTUzsKKyAgICAgICAgLy8gTWF4aW11bSBhbW91bnQgb2YgYml0cyB0aGF0IGNhbiBiZSBzdWJ0cmFjdGVkIGZyb20gdGhlIHRhcmdldAorICAgICAgICAvLyBiaXRyYXRlIC0gZXhwcmVzc2VkIGFzIHBlcmNlbnRhZ2Ugb2YgdGhlIHRhcmdldCBiaXRyYXRlLgorICAgICAgICBtQ29kZWNDb25maWd1cmF0aW9uLT5yY191bmRlcnNob290X3BjdCA9IDEwMDsKKyAgICAgICAgLy8gTWF4aW11bSBhbW91bnQgb2YgYml0cyB0aGF0IGNhbiBiZSBhZGRlZCB0byB0aGUgdGFyZ2V0CisgICAgICAgIC8vIGJpdHJhdGUgLSBleHByZXNzZWQgYXMgcGVyY2VudGFnZSBvZiB0aGUgdGFyZ2V0IGJpdHJhdGUuCisgICAgICAgIG1Db2RlY0NvbmZpZ3VyYXRpb24tPnJjX292ZXJzaG9vdF9wY3QgPSAxNTsKKyAgICAgICAgLy8gSW5pdGlhbCB2YWx1ZSBvZiB0aGUgYnVmZmVyIGxldmVsIGluIG1zLgorICAgICAgICBtQ29kZWNDb25maWd1cmF0aW9uLT5yY19idWZfaW5pdGlhbF9zeiA9IDUwMDsKKyAgICAgICAgLy8gQW1vdW50IG9mIGRhdGEgdGhhdCB0aGUgZW5jb2RlciBzaG91bGQgdHJ5IHRvIG1haW50YWluIGluIG1zLgorICAgICAgICBtQ29kZWNDb25maWd1cmF0aW9uLT5yY19idWZfb3B0aW1hbF9zeiA9IDYwMDsKKyAgICAgICAgLy8gVGhlIGFtb3VudCBvZiBkYXRhIHRoYXQgbWF5IGJlIGJ1ZmZlcmVkIGJ5IHRoZSBkZWNvZGluZworICAgICAgICAvLyBhcHBsaWNhdGlvbiBpbiBtcy4KKyAgICAgICAgbUNvZGVjQ29uZmlndXJhdGlvbi0+cmNfYnVmX3N6ID0gMTAwMDsKKyAgICAgICAgLy8gRW5hYmxlIGVycm9yIHJlc2lsaWVuY2UgLSBuZWVkZWQgZm9yIHBhY2tldCBsb3NzLgorICAgICAgICBtQ29kZWNDb25maWd1cmF0aW9uLT5nX2Vycm9yX3Jlc2lsaWVudCA9IDE7CisgICAgICAgIC8vIE1heGltdW0ga2V5IGZyYW1lIGludGVydmFsIC0gZm9yIENCUiBib29zdCB0byAzMDAwCisgICAgICAgIG1Db2RlY0NvbmZpZ3VyYXRpb24tPmtmX21heF9kaXN0ID0gMzAwMDsKKyAgICAgICAgLy8gRW5jb2RlciBkZXRlcm1pbmVzIG9wdGltYWwga2V5IGZyYW1lIHBsYWNlbWVudCBhdXRvbWF0aWNhbGx5LgorICAgICAgICBtQ29kZWNDb25maWd1cmF0aW9uLT5rZl9tb2RlID0gVlBYX0tGX0FVVE87CisgICAgfQorCisgICAgLy8gRnJhbWVzIHRlbXBvcmFsIHBhdHRlcm4gLSBmb3Igbm93IFdlYlJUQyBsaWtlIHBhdHRlcm4gaXMgb25seSBzdXBwb3J0ZWQuCisgICAgc3dpdGNoIChtVGVtcG9yYWxMYXllcnMpIHsKKyAgICAgICAgY2FzZSAwOgorICAgICAgICAgICAgbVRlbXBvcmFsUGF0dGVybkxlbmd0aCA9IDA7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSAxOgorICAgICAgICAgICAgbUNvZGVjQ29uZmlndXJhdGlvbi0+dHNfbnVtYmVyX2xheWVycyA9IDE7CisgICAgICAgICAgICBtQ29kZWNDb25maWd1cmF0aW9uLT50c19yYXRlX2RlY2ltYXRvclswXSA9IDE7CisgICAgICAgICAgICBtQ29kZWNDb25maWd1cmF0aW9uLT50c19wZXJpb2RpY2l0eSA9IDE7CisgICAgICAgICAgICBtQ29kZWNDb25maWd1cmF0aW9uLT50c19sYXllcl9pZFswXSA9IDA7CisgICAgICAgICAgICBtVGVtcG9yYWxQYXR0ZXJuWzBdID0ga1RlbXBvcmFsVXBkYXRlTGFzdFJlZkFsbDsKKyAgICAgICAgICAgIG1UZW1wb3JhbFBhdHRlcm5MZW5ndGggPSAxOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgMjoKKyAgICAgICAgICAgIG1Db2RlY0NvbmZpZ3VyYXRpb24tPnRzX251bWJlcl9sYXllcnMgPSAyOworICAgICAgICAgICAgbUNvZGVjQ29uZmlndXJhdGlvbi0+dHNfcmF0ZV9kZWNpbWF0b3JbMF0gPSAyOworICAgICAgICAgICAgbUNvZGVjQ29uZmlndXJhdGlvbi0+dHNfcmF0ZV9kZWNpbWF0b3JbMV0gPSAxOworICAgICAgICAgICAgbUNvZGVjQ29uZmlndXJhdGlvbi0+dHNfcGVyaW9kaWNpdHkgPSAyOworICAgICAgICAgICAgbUNvZGVjQ29uZmlndXJhdGlvbi0+dHNfbGF5ZXJfaWRbMF0gPSAwOworICAgICAgICAgICAgbUNvZGVjQ29uZmlndXJhdGlvbi0+dHNfbGF5ZXJfaWRbMV0gPSAxOworICAgICAgICAgICAgbVRlbXBvcmFsUGF0dGVyblswXSA9IGtUZW1wb3JhbFVwZGF0ZUxhc3RBbmRHb2xkZW5SZWZBbHRSZWY7CisgICAgICAgICAgICBtVGVtcG9yYWxQYXR0ZXJuWzFdID0ga1RlbXBvcmFsVXBkYXRlR29sZGVuV2l0aG91dERlcGVuZGVuY3lSZWZBbHRSZWY7CisgICAgICAgICAgICBtVGVtcG9yYWxQYXR0ZXJuWzJdID0ga1RlbXBvcmFsVXBkYXRlTGFzdFJlZkFsdFJlZjsKKyAgICAgICAgICAgIG1UZW1wb3JhbFBhdHRlcm5bM10gPSBrVGVtcG9yYWxVcGRhdGVHb2xkZW5SZWZBbHRSZWY7CisgICAgICAgICAgICBtVGVtcG9yYWxQYXR0ZXJuWzRdID0ga1RlbXBvcmFsVXBkYXRlTGFzdFJlZkFsdFJlZjsKKyAgICAgICAgICAgIG1UZW1wb3JhbFBhdHRlcm5bNV0gPSBrVGVtcG9yYWxVcGRhdGVHb2xkZW5SZWZBbHRSZWY7CisgICAgICAgICAgICBtVGVtcG9yYWxQYXR0ZXJuWzZdID0ga1RlbXBvcmFsVXBkYXRlTGFzdFJlZkFsdFJlZjsKKyAgICAgICAgICAgIG1UZW1wb3JhbFBhdHRlcm5bN10gPSBrVGVtcG9yYWxVcGRhdGVOb25lOworICAgICAgICAgICAgbVRlbXBvcmFsUGF0dGVybkxlbmd0aCA9IDg7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSAzOgorICAgICAgICAgICAgbUNvZGVjQ29uZmlndXJhdGlvbi0+dHNfbnVtYmVyX2xheWVycyA9IDM7CisgICAgICAgICAgICBtQ29kZWNDb25maWd1cmF0aW9uLT50c19yYXRlX2RlY2ltYXRvclswXSA9IDQ7CisgICAgICAgICAgICBtQ29kZWNDb25maWd1cmF0aW9uLT50c19yYXRlX2RlY2ltYXRvclsxXSA9IDI7CisgICAgICAgICAgICBtQ29kZWNDb25maWd1cmF0aW9uLT50c19yYXRlX2RlY2ltYXRvclsyXSA9IDE7CisgICAgICAgICAgICBtQ29kZWNDb25maWd1cmF0aW9uLT50c19wZXJpb2RpY2l0eSA9IDQ7CisgICAgICAgICAgICBtQ29kZWNDb25maWd1cmF0aW9uLT50c19sYXllcl9pZFswXSA9IDA7CisgICAgICAgICAgICBtQ29kZWNDb25maWd1cmF0aW9uLT50c19sYXllcl9pZFsxXSA9IDI7CisgICAgICAgICAgICBtQ29kZWNDb25maWd1cmF0aW9uLT50c19sYXllcl9pZFsyXSA9IDE7CisgICAgICAgICAgICBtQ29kZWNDb25maWd1cmF0aW9uLT50c19sYXllcl9pZFszXSA9IDI7CisgICAgICAgICAgICBtVGVtcG9yYWxQYXR0ZXJuWzBdID0ga1RlbXBvcmFsVXBkYXRlTGFzdEFuZEdvbGRlblJlZkFsdFJlZjsKKyAgICAgICAgICAgIG1UZW1wb3JhbFBhdHRlcm5bMV0gPSBrVGVtcG9yYWxVcGRhdGVOb25lTm9SZWZHb2xkZW5SZWZBbHRSZWY7CisgICAgICAgICAgICBtVGVtcG9yYWxQYXR0ZXJuWzJdID0ga1RlbXBvcmFsVXBkYXRlR29sZGVuV2l0aG91dERlcGVuZGVuY3lSZWZBbHRSZWY7CisgICAgICAgICAgICBtVGVtcG9yYWxQYXR0ZXJuWzNdID0ga1RlbXBvcmFsVXBkYXRlTm9uZTsKKyAgICAgICAgICAgIG1UZW1wb3JhbFBhdHRlcm5bNF0gPSBrVGVtcG9yYWxVcGRhdGVMYXN0UmVmQWx0UmVmOworICAgICAgICAgICAgbVRlbXBvcmFsUGF0dGVybls1XSA9IGtUZW1wb3JhbFVwZGF0ZU5vbmU7CisgICAgICAgICAgICBtVGVtcG9yYWxQYXR0ZXJuWzZdID0ga1RlbXBvcmFsVXBkYXRlR29sZGVuUmVmQWx0UmVmOworICAgICAgICAgICAgbVRlbXBvcmFsUGF0dGVybls3XSA9IGtUZW1wb3JhbFVwZGF0ZU5vbmU7CisgICAgICAgICAgICBtVGVtcG9yYWxQYXR0ZXJuTGVuZ3RoID0gODsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgQUxPR0UoIldyb25nIG51bWJlciBvZiB0ZW1wb3JhbCBsYXllcnMgJXp1IiwgbVRlbXBvcmFsTGF5ZXJzKTsKKyAgICAgICAgICAgIGdvdG8gQ2xlYW5VcDsKKyAgICB9CisgICAgLy8gU2V0IGJpdHJhdGUgdmFsdWVzIGZvciBlYWNoIGxheWVyCisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtQ29kZWNDb25maWd1cmF0aW9uLT50c19udW1iZXJfbGF5ZXJzOyBpKyspIHsKKyAgICAgICAgbUNvZGVjQ29uZmlndXJhdGlvbi0+dHNfdGFyZ2V0X2JpdHJhdGVbaV0gPQorICAgICAgICAgICAgbUNvZGVjQ29uZmlndXJhdGlvbi0+cmNfdGFyZ2V0X2JpdHJhdGUgKgorICAgICAgICAgICAgbVRlbXBvcmFsTGF5ZXJCaXRyYXRlUmF0aW9baV0gLyAxMDA7CisgICAgfQorICAgIGlmIChtSW50Zi0+Z2V0U3luY0ZyYW1lUGVyaW9kKCkgPj0gMCkgeworICAgICAgICBtQ29kZWNDb25maWd1cmF0aW9uLT5rZl9tYXhfZGlzdCA9IG1JbnRmLT5nZXRTeW5jRnJhbWVQZXJpb2QoKTsKKyAgICAgICAgbUNvZGVjQ29uZmlndXJhdGlvbi0+a2ZfbWluX2Rpc3QgPSBtSW50Zi0+Z2V0U3luY0ZyYW1lUGVyaW9kKCk7CisgICAgICAgIG1Db2RlY0NvbmZpZ3VyYXRpb24tPmtmX21vZGUgPSBWUFhfS0ZfQVVUTzsKKyAgICB9CisgICAgaWYgKG1NaW5RdWFudGl6ZXIgPiAwKSB7CisgICAgICAgIG1Db2RlY0NvbmZpZ3VyYXRpb24tPnJjX21pbl9xdWFudGl6ZXIgPSBtTWluUXVhbnRpemVyOworICAgIH0KKyAgICBpZiAobU1heFF1YW50aXplciA+IDApIHsKKyAgICAgICAgbUNvZGVjQ29uZmlndXJhdGlvbi0+cmNfbWF4X3F1YW50aXplciA9IG1NYXhRdWFudGl6ZXI7CisgICAgfQorICAgIHNldENvZGVjU3BlY2lmaWNDb25maWd1cmF0aW9uKCk7CisgICAgbUNvZGVjQ29udGV4dCA9IG5ldyB2cHhfY29kZWNfY3R4X3Q7CisgICAgaWYgKCFtQ29kZWNDb250ZXh0KSBnb3RvIENsZWFuVXA7CisgICAgY29kZWNfcmV0dXJuID0gdnB4X2NvZGVjX2VuY19pbml0KG1Db2RlY0NvbnRleHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1Db2RlY0ludGVyZmFjZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbUNvZGVjQ29uZmlndXJhdGlvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCk7ICAvLyBmbGFncworICAgIGlmIChjb2RlY19yZXR1cm4gIT0gVlBYX0NPREVDX09LKSB7CisgICAgICAgIEFMT0dFKCJFcnJvciBpbml0aWFsaXppbmcgdnB4IGVuY29kZXIiKTsKKyAgICAgICAgZ290byBDbGVhblVwOworICAgIH0KKworICAgIC8vIEV4dHJhIENCUiBzZXR0aW5ncworICAgIGlmIChtQml0cmF0ZUNvbnRyb2xNb2RlID09IFZQWF9DQlIpIHsKKyAgICAgICAgY29kZWNfcmV0dXJuID0gdnB4X2NvZGVjX2NvbnRyb2wobUNvZGVjQ29udGV4dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVlA4RV9TRVRfU1RBVElDX1RIUkVTSE9MRCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMSk7CisgICAgICAgIGlmIChjb2RlY19yZXR1cm4gPT0gVlBYX0NPREVDX09LKSB7CisgICAgICAgICAgICB1aW50MzJfdCByY19tYXhfaW50cmFfdGFyZ2V0ID0KKyAgICAgICAgICAgICAgICAodWludDMyX3QpKG1Db2RlY0NvbmZpZ3VyYXRpb24tPnJjX2J1Zl9vcHRpbWFsX3N6ICogbUZyYW1lUmF0ZS0+dmFsdWUgLyAyMCArIDAuNSk7CisgICAgICAgICAgICAvLyBEb24ndCBnbyBiZWxvdyAzIHRpbWVzIHBlciBmcmFtZSBiYW5kd2lkdGguCisgICAgICAgICAgICBpZiAocmNfbWF4X2ludHJhX3RhcmdldCA8IDMwMCkgeworICAgICAgICAgICAgICAgIHJjX21heF9pbnRyYV90YXJnZXQgPSAzMDA7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBjb2RlY19yZXR1cm4gPSB2cHhfY29kZWNfY29udHJvbChtQ29kZWNDb250ZXh0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVlA4RV9TRVRfTUFYX0lOVFJBX0JJVFJBVEVfUENULAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmNfbWF4X2ludHJhX3RhcmdldCk7CisgICAgICAgIH0KKyAgICAgICAgaWYgKGNvZGVjX3JldHVybiA9PSBWUFhfQ09ERUNfT0spIHsKKyAgICAgICAgICAgIGNvZGVjX3JldHVybiA9IHZweF9jb2RlY19jb250cm9sKG1Db2RlY0NvbnRleHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBWUDhFX1NFVF9DUFVVU0VELAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLTgpOworICAgICAgICB9CisgICAgICAgIGlmIChjb2RlY19yZXR1cm4gIT0gVlBYX0NPREVDX09LKSB7CisgICAgICAgICAgICBBTE9HRSgiRXJyb3Igc2V0dGluZyBjYnIgcGFyYW1ldGVycyBmb3IgdnB4IGVuY29kZXIuIik7CisgICAgICAgICAgICBnb3RvIENsZWFuVXA7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBjb2RlY19yZXR1cm4gPSBzZXRDb2RlY1NwZWNpZmljQ29udHJvbHMoKTsKKyAgICBpZiAoY29kZWNfcmV0dXJuICE9IFZQWF9DT0RFQ19PSykgZ290byBDbGVhblVwOworCisgICAgeworICAgICAgICB1aW50MzJfdCB3aWR0aCA9IG1TaXplLT53aWR0aDsKKyAgICAgICAgdWludDMyX3QgaGVpZ2h0ID0gbVNpemUtPmhlaWdodDsKKyAgICAgICAgaWYgKCgodWludDY0X3Qpd2lkdGggKiBoZWlnaHQpID4KKyAgICAgICAgICAgICgodWludDY0X3QpSU5UMzJfTUFYIC8gMykpIHsKKyAgICAgICAgICAgIEFMT0dFKCJiLzI1ODEyNzk0LCBCdWZmZXIgc2l6ZSBpcyB0b28gYmlnLCB3aWR0aD0ldSwgaGVpZ2h0PSV1LiIsIHdpZHRoLCBoZWlnaHQpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgdWludDMyX3Qgc3RyaWRlID0gKHdpZHRoICsgbVN0cmlkZUFsaWduIC0gMSkgJiB+KG1TdHJpZGVBbGlnbiAtIDEpOworICAgICAgICAgICAgdWludDMyX3QgdnN0cmlkZSA9IChoZWlnaHQgKyBtU3RyaWRlQWxpZ24gLSAxKSAmIH4obVN0cmlkZUFsaWduIC0gMSk7CisgICAgICAgICAgICBtQ29udmVyc2lvbkJ1ZmZlciA9IE1lbW9yeUJsb2NrOjpBbGxvY2F0ZShzdHJpZGUgKiB2c3RyaWRlICogMyAvIDIpOworICAgICAgICAgICAgaWYgKCFtQ29udmVyc2lvbkJ1ZmZlci5zaXplKCkpIHsKKyAgICAgICAgICAgICAgICBBTE9HRSgiQWxsb2NhdGluZyBjb252ZXJzaW9uIGJ1ZmZlciBmYWlsZWQuIik7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIG1OdW1JbnB1dEZyYW1lcyA9IC0xOworICAgICAgICAgICAgICAgIHJldHVybiBPSzsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKworQ2xlYW5VcDoKKyAgICBvblJlbGVhc2UoKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCit2cHhfZW5jX2ZyYW1lX2ZsYWdzX3QgQzJTb2Z0VnB4RW5jOjpnZXRFbmNvZGVGbGFncygpIHsKKyAgICB2cHhfZW5jX2ZyYW1lX2ZsYWdzX3QgZmxhZ3MgPSAwOworICAgIGlmIChtVGVtcG9yYWxQYXR0ZXJuTGVuZ3RoID4gMCkgeworICAgICAgaW50IHBhdHRlcm5JZHggPSBtVGVtcG9yYWxQYXR0ZXJuSWR4ICUgbVRlbXBvcmFsUGF0dGVybkxlbmd0aDsKKyAgICAgIG1UZW1wb3JhbFBhdHRlcm5JZHgrKzsKKyAgICAgIHN3aXRjaCAobVRlbXBvcmFsUGF0dGVybltwYXR0ZXJuSWR4XSkgeworICAgICAgICAgIGNhc2Uga1RlbXBvcmFsVXBkYXRlTGFzdDoKKyAgICAgICAgICAgICAgZmxhZ3MgfD0gVlA4X0VGTEFHX05PX1VQRF9HRjsKKyAgICAgICAgICAgICAgZmxhZ3MgfD0gVlA4X0VGTEFHX05PX1VQRF9BUkY7CisgICAgICAgICAgICAgIGZsYWdzIHw9IFZQOF9FRkxBR19OT19SRUZfR0Y7CisgICAgICAgICAgICAgIGZsYWdzIHw9IFZQOF9FRkxBR19OT19SRUZfQVJGOworICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICBjYXNlIGtUZW1wb3JhbFVwZGF0ZUdvbGRlbldpdGhvdXREZXBlbmRlbmN5OgorICAgICAgICAgICAgICBmbGFncyB8PSBWUDhfRUZMQUdfTk9fUkVGX0dGOworICAgICAgICAgICAgICBbW2ZhbGx0aHJvdWdoXV07CisgICAgICAgICAgY2FzZSBrVGVtcG9yYWxVcGRhdGVHb2xkZW46CisgICAgICAgICAgICAgIGZsYWdzIHw9IFZQOF9FRkxBR19OT19SRUZfQVJGOworICAgICAgICAgICAgICBmbGFncyB8PSBWUDhfRUZMQUdfTk9fVVBEX0FSRjsKKyAgICAgICAgICAgICAgZmxhZ3MgfD0gVlA4X0VGTEFHX05PX1VQRF9MQVNUOworICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICBjYXNlIGtUZW1wb3JhbFVwZGF0ZUFsdHJlZldpdGhvdXREZXBlbmRlbmN5OgorICAgICAgICAgICAgICBmbGFncyB8PSBWUDhfRUZMQUdfTk9fUkVGX0FSRjsKKyAgICAgICAgICAgICAgZmxhZ3MgfD0gVlA4X0VGTEFHX05PX1JFRl9HRjsKKyAgICAgICAgICAgICAgW1tmYWxsdGhyb3VnaF1dOworICAgICAgICAgIGNhc2Uga1RlbXBvcmFsVXBkYXRlQWx0cmVmOgorICAgICAgICAgICAgICBmbGFncyB8PSBWUDhfRUZMQUdfTk9fVVBEX0dGOworICAgICAgICAgICAgICBmbGFncyB8PSBWUDhfRUZMQUdfTk9fVVBEX0xBU1Q7CisgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgIGNhc2Uga1RlbXBvcmFsVXBkYXRlTm9uZU5vUmVmQWx0cmVmOgorICAgICAgICAgICAgICBmbGFncyB8PSBWUDhfRUZMQUdfTk9fUkVGX0FSRjsKKyAgICAgICAgICAgICAgW1tmYWxsdGhyb3VnaF1dOworICAgICAgICAgIGNhc2Uga1RlbXBvcmFsVXBkYXRlTm9uZToKKyAgICAgICAgICAgICAgZmxhZ3MgfD0gVlA4X0VGTEFHX05PX1VQRF9HRjsKKyAgICAgICAgICAgICAgZmxhZ3MgfD0gVlA4X0VGTEFHX05PX1VQRF9BUkY7CisgICAgICAgICAgICAgIGZsYWdzIHw9IFZQOF9FRkxBR19OT19VUERfTEFTVDsKKyAgICAgICAgICAgICAgZmxhZ3MgfD0gVlA4X0VGTEFHX05PX1VQRF9FTlRST1BZOworICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICBjYXNlIGtUZW1wb3JhbFVwZGF0ZU5vbmVOb1JlZkdvbGRlblJlZkFsdFJlZjoKKyAgICAgICAgICAgICAgZmxhZ3MgfD0gVlA4X0VGTEFHX05PX1JFRl9HRjsKKyAgICAgICAgICAgICAgZmxhZ3MgfD0gVlA4X0VGTEFHX05PX1VQRF9HRjsKKyAgICAgICAgICAgICAgZmxhZ3MgfD0gVlA4X0VGTEFHX05PX1VQRF9BUkY7CisgICAgICAgICAgICAgIGZsYWdzIHw9IFZQOF9FRkxBR19OT19VUERfTEFTVDsKKyAgICAgICAgICAgICAgZmxhZ3MgfD0gVlA4X0VGTEFHX05PX1VQRF9FTlRST1BZOworICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICBjYXNlIGtUZW1wb3JhbFVwZGF0ZUdvbGRlbldpdGhvdXREZXBlbmRlbmN5UmVmQWx0UmVmOgorICAgICAgICAgICAgICBmbGFncyB8PSBWUDhfRUZMQUdfTk9fUkVGX0dGOworICAgICAgICAgICAgICBmbGFncyB8PSBWUDhfRUZMQUdfTk9fVVBEX0FSRjsKKyAgICAgICAgICAgICAgZmxhZ3MgfD0gVlA4X0VGTEFHX05PX1VQRF9MQVNUOworICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICBjYXNlIGtUZW1wb3JhbFVwZGF0ZUxhc3RSZWZBbHRSZWY6CisgICAgICAgICAgICAgIGZsYWdzIHw9IFZQOF9FRkxBR19OT19VUERfR0Y7CisgICAgICAgICAgICAgIGZsYWdzIHw9IFZQOF9FRkxBR19OT19VUERfQVJGOworICAgICAgICAgICAgICBmbGFncyB8PSBWUDhfRUZMQUdfTk9fUkVGX0dGOworICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICBjYXNlIGtUZW1wb3JhbFVwZGF0ZUdvbGRlblJlZkFsdFJlZjoKKyAgICAgICAgICAgICAgZmxhZ3MgfD0gVlA4X0VGTEFHX05PX1VQRF9BUkY7CisgICAgICAgICAgICAgIGZsYWdzIHw9IFZQOF9FRkxBR19OT19VUERfTEFTVDsKKyAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgY2FzZSBrVGVtcG9yYWxVcGRhdGVMYXN0QW5kR29sZGVuUmVmQWx0UmVmOgorICAgICAgICAgICAgICBmbGFncyB8PSBWUDhfRUZMQUdfTk9fVVBEX0FSRjsKKyAgICAgICAgICAgICAgZmxhZ3MgfD0gVlA4X0VGTEFHX05PX1JFRl9HRjsKKyAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgY2FzZSBrVGVtcG9yYWxVcGRhdGVMYXN0UmVmQWxsOgorICAgICAgICAgICAgICBmbGFncyB8PSBWUDhfRUZMQUdfTk9fVVBEX0FSRjsKKyAgICAgICAgICAgICAgZmxhZ3MgfD0gVlA4X0VGTEFHX05PX1VQRF9HRjsKKyAgICAgICAgICAgICAgYnJlYWs7CisgICAgICB9CisgICAgfQorICAgIHJldHVybiBmbGFnczsKK30KKworLy8gVE9ETzogYWRkIHN1cHBvcnQgZm9yIFlVViBpbnB1dCBjb2xvciBmb3JtYXRzCisvLyBUT0RPOiBhZGQgc3VwcG9ydCBmb3IgU1ZDLCBBUkYuIFNWQyBhbmQgQVJGIHJldHVybnMgbXVsdGlwbGUgZnJhbWVzCisvLyAoaGllcmFyY2hpY2FsIC8gbm9zaG93KSBpbiBvbmUgY2FsbC4gVGhlc2UgZnJhbWVzIHNob3VsZCBiZSBjb21iaW5lZCBpbiB0bworLy8gYSBzaW5nbGUgYnVmZmVyIGFuZCBzZW50IGJhY2sgdG8gdGhlIGNsaWVudAordm9pZCBDMlNvZnRWcHhFbmM6OnByb2Nlc3MoCisgICAgICAgIGNvbnN0IHN0ZDo6dW5pcXVlX3B0cjxDMldvcms+ICZ3b3JrLAorICAgICAgICBjb25zdCBzdGQ6OnNoYXJlZF9wdHI8QzJCbG9ja1Bvb2w+ICZwb29sKSB7CisgICAgLy8gSW5pdGlhbGl6ZSBvdXRwdXQgd29yaworICAgIHdvcmstPnJlc3VsdCA9IEMyX09LOworICAgIHdvcmstPndvcmtsZXRzUHJvY2Vzc2VkID0gMXU7CisgICAgd29yay0+d29ya2xldHMuZnJvbnQoKS0+b3V0cHV0LmZsYWdzID0gd29yay0+aW5wdXQuZmxhZ3M7CisKKyAgICBpZiAobVNpZ25hbGxlZEVycm9yIHx8IG1TaWduYWxsZWRPdXRwdXRFb3MpIHsKKyAgICAgICAgd29yay0+cmVzdWx0ID0gQzJfQkFEX1ZBTFVFOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIC8vIEluaXRpYWxpemUgZW5jb2RlciBpZiBub3QgYWxyZWFkeQorICAgIGlmICghbUNvZGVjQ29udGV4dCAmJiBPSyAhPSBpbml0RW5jb2RlcigpKSB7CisgICAgICAgIEFMT0dFKCJGYWlsZWQgdG8gaW5pdGlhbGl6ZSBlbmNvZGVyIik7CisgICAgICAgIG1TaWduYWxsZWRFcnJvciA9IHRydWU7CisgICAgICAgIHdvcmstPnJlc3VsdCA9IEMyX0NPUlJVUFRFRDsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIHN0ZDo6c2hhcmVkX3B0cjxjb25zdCBDMkdyYXBoaWNWaWV3PiByVmlldzsKKyAgICBzdGQ6OnNoYXJlZF9wdHI8QzJCdWZmZXI+IGlucHV0QnVmZmVyOworICAgIGlmICghd29yay0+aW5wdXQuYnVmZmVycy5lbXB0eSgpKSB7CisgICAgICAgIGlucHV0QnVmZmVyID0gd29yay0+aW5wdXQuYnVmZmVyc1swXTsKKyAgICAgICAgclZpZXcgPSBzdGQ6Om1ha2Vfc2hhcmVkPGNvbnN0IEMyR3JhcGhpY1ZpZXc+KAorICAgICAgICAgICAgICAgICAgICBpbnB1dEJ1ZmZlci0+ZGF0YSgpLmdyYXBoaWNCbG9ja3MoKS5mcm9udCgpLm1hcCgpLmdldCgpKTsKKyAgICAgICAgaWYgKHJWaWV3LT5lcnJvcigpICE9IEMyX09LKSB7CisgICAgICAgICAgICBBTE9HRSgiZ3JhcGhpYyB2aWV3IG1hcCBlcnIgPSAlZCIsIHJWaWV3LT5lcnJvcigpKTsKKyAgICAgICAgICAgIHdvcmstPnJlc3VsdCA9IEMyX0NPUlJVUFRFRDsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgIH0gZWxzZSB7CisgICAgICAgIEFMT0dWKCJFbXB0eSBpbnB1dCBCdWZmZXIiKTsKKyAgICAgICAgdWludDMyX3QgZmxhZ3MgPSAwOworICAgICAgICBpZiAod29yay0+aW5wdXQuZmxhZ3MgJiBDMkZyYW1lRGF0YTo6RkxBR19FTkRfT0ZfU1RSRUFNKSB7CisgICAgICAgICAgICBmbGFncyB8PSBDMkZyYW1lRGF0YTo6RkxBR19FTkRfT0ZfU1RSRUFNOworICAgICAgICB9CisgICAgICAgIHdvcmstPndvcmtsZXRzLmZyb250KCktPm91dHB1dC5mbGFncyA9IChDMkZyYW1lRGF0YTo6ZmxhZ3NfdClmbGFnczsKKyAgICAgICAgd29yay0+d29ya2xldHMuZnJvbnQoKS0+b3V0cHV0LmJ1ZmZlcnMuY2xlYXIoKTsKKyAgICAgICAgd29yay0+d29ya2xldHMuZnJvbnQoKS0+b3V0cHV0Lm9yZGluYWwgPSB3b3JrLT5pbnB1dC5vcmRpbmFsOworICAgICAgICB3b3JrLT53b3JrbGV0c1Byb2Nlc3NlZCA9IDF1OworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgY29uc3QgQzJDb25zdEdyYXBoaWNCbG9jayBpbkJ1ZmZlciA9CisgICAgICAgIGlucHV0QnVmZmVyLT5kYXRhKCkuZ3JhcGhpY0Jsb2NrcygpLmZyb250KCk7CisgICAgaWYgKGluQnVmZmVyLndpZHRoKCkgIT0gbVNpemUtPndpZHRoIHx8CisgICAgICAgIGluQnVmZmVyLmhlaWdodCgpICE9IG1TaXplLT5oZWlnaHQpIHsKKyAgICAgICAgQUxPR0UoInVuZXhwZWN0ZWQgSW5wdXQgYnVmZmVyIGF0dHJpYnV0ZXMgJWQoJWQpIHggJWQoJWQpIiwKKyAgICAgICAgICAgICAgaW5CdWZmZXIud2lkdGgoKSwgbVNpemUtPndpZHRoLCBpbkJ1ZmZlci5oZWlnaHQoKSwKKyAgICAgICAgICAgICAgbVNpemUtPmhlaWdodCk7CisgICAgICAgIG1TaWduYWxsZWRFcnJvciA9IHRydWU7CisgICAgICAgIHdvcmstPnJlc3VsdCA9IEMyX0JBRF9WQUxVRTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBib29sIGVvcyA9ICgod29yay0+aW5wdXQuZmxhZ3MgJiBDMkZyYW1lRGF0YTo6RkxBR19FTkRfT0ZfU1RSRUFNKSAhPSAwKTsKKyAgICB2cHhfaW1hZ2VfdCByYXdfZnJhbWU7CisgICAgY29uc3QgQzJQbGFuYXJMYXlvdXQgJmxheW91dCA9IHJWaWV3LT5sYXlvdXQoKTsKKyAgICB1aW50MzJfdCB3aWR0aCA9IHJWaWV3LT53aWR0aCgpOworICAgIHVpbnQzMl90IGhlaWdodCA9IHJWaWV3LT5oZWlnaHQoKTsKKyAgICBpZiAod2lkdGggPiAweDgwMDAgfHwgaGVpZ2h0ID4gMHg4MDAwKSB7CisgICAgICAgIEFMT0dFKCJJbWFnZSB0b28gYmlnOiAldSB4ICV1Iiwgd2lkdGgsIGhlaWdodCk7CisgICAgICAgIHdvcmstPnJlc3VsdCA9IEMyX0JBRF9WQUxVRTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICB1aW50MzJfdCBzdHJpZGUgPSAod2lkdGggKyBtU3RyaWRlQWxpZ24gLSAxKSAmIH4obVN0cmlkZUFsaWduIC0gMSk7CisgICAgdWludDMyX3QgdnN0cmlkZSA9IChoZWlnaHQgKyBtU3RyaWRlQWxpZ24gLSAxKSAmIH4obVN0cmlkZUFsaWduIC0gMSk7CisgICAgc3dpdGNoIChsYXlvdXQudHlwZSkgeworICAgICAgICBjYXNlIEMyUGxhbmFyTGF5b3V0OjpUWVBFX1JHQjoKKyAgICAgICAgY2FzZSBDMlBsYW5hckxheW91dDo6VFlQRV9SR0JBOiB7CisgICAgICAgICAgICBDb252ZXJ0UkdCVG9QbGFuYXJZVVYobUNvbnZlcnNpb25CdWZmZXIuZGF0YSgpLCBzdHJpZGUsIHZzdHJpZGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbUNvbnZlcnNpb25CdWZmZXIuc2l6ZSgpLCAqclZpZXcuZ2V0KCkpOworICAgICAgICAgICAgdnB4X2ltZ193cmFwKCZyYXdfZnJhbWUsIFZQWF9JTUdfRk1UX0k0MjAsIHdpZHRoLCBoZWlnaHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgbVN0cmlkZUFsaWduLCBtQ29udmVyc2lvbkJ1ZmZlci5kYXRhKCkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgY2FzZSBDMlBsYW5hckxheW91dDo6VFlQRV9ZVVY6IHsKKyAgICAgICAgICAgIGlmICghSXNZVVY0MjAoKnJWaWV3KSkgeworICAgICAgICAgICAgICAgIEFMT0dFKCJpbnB1dCBpcyBub3QgWVVWNDIwIik7CisgICAgICAgICAgICAgICAgd29yay0+cmVzdWx0ID0gQzJfQkFEX1ZBTFVFOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKGxheW91dC5wbGFuZXNbbGF5b3V0LlBMQU5FX1ldLmNvbEluYyA9PSAxCisgICAgICAgICAgICAgICAgICAgICYmIGxheW91dC5wbGFuZXNbbGF5b3V0LlBMQU5FX1VdLmNvbEluYyA9PSAxCisgICAgICAgICAgICAgICAgICAgICYmIGxheW91dC5wbGFuZXNbbGF5b3V0LlBMQU5FX1ZdLmNvbEluYyA9PSAxKSB7CisgICAgICAgICAgICAgICAgLy8gSTQyMCBjb21wYXRpYmxlIC0gdGhvdWdoIHdpdGggY3VzdG9tIG9mZnNldCBhbmQgc3RyaWRlCisgICAgICAgICAgICAgICAgdnB4X2ltZ193cmFwKCZyYXdfZnJhbWUsIFZQWF9JTUdfRk1UX0k0MjAsIHdpZHRoLCBoZWlnaHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1TdHJpZGVBbGlnbiwgKHVpbnQ4X3QqKXJWaWV3LT5kYXRhKClbMF0pOworICAgICAgICAgICAgICAgIHJhd19mcmFtZS5wbGFuZXNbMV0gPSAodWludDhfdCopclZpZXctPmRhdGEoKVsxXTsKKyAgICAgICAgICAgICAgICByYXdfZnJhbWUucGxhbmVzWzJdID0gKHVpbnQ4X3QqKXJWaWV3LT5kYXRhKClbMl07CisgICAgICAgICAgICAgICAgcmF3X2ZyYW1lLnN0cmlkZVswXSA9IGxheW91dC5wbGFuZXNbbGF5b3V0LlBMQU5FX1ldLnJvd0luYzsKKyAgICAgICAgICAgICAgICByYXdfZnJhbWUuc3RyaWRlWzFdID0gbGF5b3V0LnBsYW5lc1tsYXlvdXQuUExBTkVfVV0ucm93SW5jOworICAgICAgICAgICAgICAgIHJhd19mcmFtZS5zdHJpZGVbMl0gPSBsYXlvdXQucGxhbmVzW2xheW91dC5QTEFORV9WXS5yb3dJbmM7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIC8vIGNvcHkgdG8gSTQyMAorICAgICAgICAgICAgICAgIE1lZGlhSW1hZ2UyIGltZyA9IENyZWF0ZVlVVjQyMFBsYW5hck1lZGlhSW1hZ2UyKHdpZHRoLCBoZWlnaHQsIHN0cmlkZSwgdnN0cmlkZSk7CisgICAgICAgICAgICAgICAgaWYgKG1Db252ZXJzaW9uQnVmZmVyLnNpemUoKSA+PSBzdHJpZGUgKiB2c3RyaWRlICogMyAvIDIpIHsKKyAgICAgICAgICAgICAgICAgICAgc3RhdHVzX3QgZXJyID0gSW1hZ2VDb3B5KG1Db252ZXJzaW9uQnVmZmVyLmRhdGEoKSwgJmltZywgKnJWaWV3KTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGVyciAhPSBPSykgeworICAgICAgICAgICAgICAgICAgICAgICAgQUxPR0UoIkJ1ZmZlciBjb252ZXJzaW9uIGZhaWxlZDogJWQiLCBlcnIpOworICAgICAgICAgICAgICAgICAgICAgICAgd29yay0+cmVzdWx0ID0gQzJfQkFEX1ZBTFVFOworICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIHZweF9pbWdfd3JhcCgmcmF3X2ZyYW1lLCBWUFhfSU1HX0ZNVF9JNDIwLCBzdHJpZGUsIHZzdHJpZGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtU3RyaWRlQWxpZ24sICh1aW50OF90KilyVmlldy0+ZGF0YSgpWzBdKTsKKyAgICAgICAgICAgICAgICAgICAgdnB4X2ltZ19zZXRfcmVjdCgmcmF3X2ZyYW1lLCAwLCAwLCB3aWR0aCwgaGVpZ2h0KTsKKyAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICBBTE9HRSgiQ29udmVyc2lvbiBidWZmZXIgaXMgdG9vIHNtYWxsOiAldSB4ICV1IGZvciAlenUiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cmlkZSwgdnN0cmlkZSwgbUNvbnZlcnNpb25CdWZmZXIuc2l6ZSgpKTsKKyAgICAgICAgICAgICAgICAgICAgd29yay0+cmVzdWx0ID0gQzJfQkFEX1ZBTFVFOworICAgICAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIEFMT0dFKCJVbnJlY29nbml6ZWQgcGxhbmUgdHlwZTogJWQiLCBsYXlvdXQudHlwZSk7CisgICAgICAgICAgICB3b3JrLT5yZXN1bHQgPSBDMl9CQURfVkFMVUU7CisgICAgICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgdnB4X2VuY19mcmFtZV9mbGFnc190IGZsYWdzID0gZ2V0RW5jb2RlRmxhZ3MoKTsKKyAgICAvLyBoYW5kbGUgZHluYW1pYyBjb25maWcgcGFyYW1ldGVycworICAgIHsKKyAgICAgICAgSW50ZkltcGw6OkxvY2sgbG9jayA9IG1JbnRmLT5sb2NrKCk7CisgICAgICAgIHN0ZDo6c2hhcmVkX3B0cjxDMlN0cmVhbUludHJhUmVmcmVzaFR1bmluZzo6b3V0cHV0PiBpbnRyYVJlZnJlc2ggPSBtSW50Zi0+Z2V0SW50cmFSZWZyZXNoX2woKTsKKyAgICAgICAgc3RkOjpzaGFyZWRfcHRyPEMyU3RyZWFtQml0cmF0ZUluZm86Om91dHB1dD4gYml0cmF0ZSA9IG1JbnRmLT5nZXRCaXRyYXRlX2woKTsKKyAgICAgICAgc3RkOjpzaGFyZWRfcHRyPEMyU3RyZWFtUmVxdWVzdFN5bmNGcmFtZVR1bmluZzo6b3V0cHV0PiByZXF1ZXN0U3luYyA9IG1JbnRmLT5nZXRSZXF1ZXN0U3luY19sKCk7CisgICAgICAgIGxvY2sudW5sb2NrKCk7CisKKyAgICAgICAgaWYgKGludHJhUmVmcmVzaCAhPSBtSW50cmFSZWZyZXNoKSB7CisgICAgICAgICAgICBtSW50cmFSZWZyZXNoID0gaW50cmFSZWZyZXNoOworICAgICAgICAgICAgQUxPR1YoIkdvdCBtSW50cmFSZWZyZXNoIHJlcXVlc3QiKTsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChyZXF1ZXN0U3luYyAhPSBtUmVxdWVzdFN5bmMpIHsKKyAgICAgICAgICAgIC8vIHdlIGNhbiBoYW5kbGUgSURSIGltbWVkaWF0ZWx5CisgICAgICAgICAgICBpZiAocmVxdWVzdFN5bmMtPnZhbHVlKSB7CisgICAgICAgICAgICAgICAgLy8gdW5zZXQgcmVxdWVzdAorICAgICAgICAgICAgICAgIEMyU3RyZWFtUmVxdWVzdFN5bmNGcmFtZVR1bmluZzo6b3V0cHV0IGNsZWFyU3luYygwdSwgQzJfRkFMU0UpOworICAgICAgICAgICAgICAgIHN0ZDo6dmVjdG9yPHN0ZDo6dW5pcXVlX3B0cjxDMlNldHRpbmdSZXN1bHQ+PiBmYWlsdXJlczsKKyAgICAgICAgICAgICAgICBtSW50Zi0+Y29uZmlnKHsgJmNsZWFyU3luYyB9LCBDMl9NQVlfQkxPQ0ssICZmYWlsdXJlcyk7CisgICAgICAgICAgICAgICAgQUxPR1YoIkdvdCBzeW5jIHJlcXVlc3QiKTsKKyAgICAgICAgICAgICAgICBmbGFncyB8PSBWUFhfRUZMQUdfRk9SQ0VfS0Y7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBtUmVxdWVzdFN5bmMgPSByZXF1ZXN0U3luYzsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChiaXRyYXRlICE9IG1CaXRyYXRlKSB7CisgICAgICAgICAgICBtQml0cmF0ZSA9IGJpdHJhdGU7CisgICAgICAgICAgICBtQ29kZWNDb25maWd1cmF0aW9uLT5yY190YXJnZXRfYml0cmF0ZSA9CisgICAgICAgICAgICAgICAgKG1CaXRyYXRlLT52YWx1ZSArIDUwMCkgLyAxMDAwOworICAgICAgICAgICAgdnB4X2NvZGVjX2Vycl90IHJlcyA9IHZweF9jb2RlY19lbmNfY29uZmlnX3NldChtQ29kZWNDb250ZXh0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtQ29kZWNDb25maWd1cmF0aW9uKTsKKyAgICAgICAgICAgIGlmIChyZXMgIT0gVlBYX0NPREVDX09LKSB7CisgICAgICAgICAgICAgICAgQUxPR0UoInZweCBlbmNvZGVyIGZhaWxlZCB0byB1cGRhdGUgYml0cmF0ZTogJXMiLAorICAgICAgICAgICAgICAgICAgICAgIHZweF9jb2RlY19lcnJfdG9fc3RyaW5nKHJlcykpOworICAgICAgICAgICAgICAgIG1TaWduYWxsZWRFcnJvciA9IHRydWU7CisgICAgICAgICAgICAgICAgd29yay0+cmVzdWx0ID0gQzJfQ09SUlVQVEVEOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKworICAgIHVpbnQ2NF90IGlucHV0VGltZVN0YW1wID0gd29yay0+aW5wdXQub3JkaW5hbC50aW1lc3RhbXAucGVla3VsbCgpOworICAgIHVpbnQzMl90IGZyYW1lRHVyYXRpb247CisgICAgaWYgKGlucHV0VGltZVN0YW1wID4gbUxhc3RUaW1lc3RhbXApIHsKKyAgICAgICAgZnJhbWVEdXJhdGlvbiA9ICh1aW50MzJfdCkoaW5wdXRUaW1lU3RhbXAgLSBtTGFzdFRpbWVzdGFtcCk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgLy8gVXNlIGRlZmF1bHQgb2YgMzAgZnBzIGluIGNhc2Ugb2YgMCBmcmFtZSByYXRlLgorICAgICAgICBmbG9hdCBmcmFtZVJhdGUgPSBtRnJhbWVSYXRlLT52YWx1ZTsKKyAgICAgICAgaWYgKGZyYW1lUmF0ZSA8IDAuMDAxKSB7CisgICAgICAgICAgICBmcmFtZVJhdGUgPSAzMDsKKyAgICAgICAgfQorICAgICAgICBmcmFtZUR1cmF0aW9uID0gKHVpbnQzMl90KSgxMDAwMDAwIC8gZnJhbWVSYXRlICsgMC41KTsKKyAgICB9CisgICAgbUxhc3RUaW1lc3RhbXAgPSBpbnB1dFRpbWVTdGFtcDsKKworICAgIHZweF9jb2RlY19lcnJfdCBjb2RlY19yZXR1cm4gPSB2cHhfY29kZWNfZW5jb2RlKG1Db2RlY0NvbnRleHQsICZyYXdfZnJhbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5wdXRUaW1lU3RhbXAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnJhbWVEdXJhdGlvbiwgZmxhZ3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVlBYX0RMX1JFQUxUSU1FKTsKKyAgICBpZiAoY29kZWNfcmV0dXJuICE9IFZQWF9DT0RFQ19PSykgeworICAgICAgICBBTE9HRSgidnB4IGVuY29kZXIgZmFpbGVkIHRvIGVuY29kZSBmcmFtZSIpOworICAgICAgICBtU2lnbmFsbGVkRXJyb3IgPSB0cnVlOworICAgICAgICB3b3JrLT5yZXN1bHQgPSBDMl9DT1JSVVBURUQ7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBib29sIHBvcHVsYXRlZCA9IGZhbHNlOworICAgIHZweF9jb2RlY19pdGVyX3QgZW5jb2RlZF9wYWNrZXRfaXRlcmF0b3IgPSBudWxscHRyOworICAgIGNvbnN0IHZweF9jb2RlY19jeF9wa3RfdCogZW5jb2RlZF9wYWNrZXQ7CisgICAgd2hpbGUgKChlbmNvZGVkX3BhY2tldCA9IHZweF9jb2RlY19nZXRfY3hfZGF0YSgKKyAgICAgICAgICAgICAgICAgICAgbUNvZGVjQ29udGV4dCwgJmVuY29kZWRfcGFja2V0X2l0ZXJhdG9yKSkpIHsKKyAgICAgICAgaWYgKGVuY29kZWRfcGFja2V0LT5raW5kID09IFZQWF9DT0RFQ19DWF9GUkFNRV9QS1QpIHsKKyAgICAgICAgICAgIHN0ZDo6c2hhcmVkX3B0cjxDMkxpbmVhckJsb2NrPiBibG9jazsKKyAgICAgICAgICAgIEMyTWVtb3J5VXNhZ2UgdXNhZ2UgPSB7IEMyTWVtb3J5VXNhZ2U6OkNQVV9SRUFELCBDMk1lbW9yeVVzYWdlOjpDUFVfV1JJVEUgfTsKKyAgICAgICAgICAgIGMyX3N0YXR1c190IGVyciA9IHBvb2wtPmZldGNoTGluZWFyQmxvY2soZW5jb2RlZF9wYWNrZXQtPmRhdGEuZnJhbWUuc3osIHVzYWdlLCAmYmxvY2spOworICAgICAgICAgICAgaWYgKGVyciAhPSBDMl9PSykgeworICAgICAgICAgICAgICAgIEFMT0dFKCJmZXRjaExpbmVhckJsb2NrIGZvciBPdXRwdXQgZmFpbGVkIHdpdGggc3RhdHVzICVkIiwgZXJyKTsKKyAgICAgICAgICAgICAgICB3b3JrLT5yZXN1bHQgPSBDMl9OT19NRU1PUlk7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQorICAgICAgICAgICAgQzJXcml0ZVZpZXcgd1ZpZXcgPSBibG9jay0+bWFwKCkuZ2V0KCk7CisgICAgICAgICAgICBpZiAod1ZpZXcuZXJyb3IoKSkgeworICAgICAgICAgICAgICAgIEFMT0dFKCJ3cml0ZSB2aWV3IG1hcCBmYWlsZWQgJWQiLCB3Vmlldy5lcnJvcigpKTsKKyAgICAgICAgICAgICAgICB3b3JrLT5yZXN1bHQgPSBDMl9DT1JSVVBURUQ7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBtZW1jcHkod1ZpZXcuZGF0YSgpLCBlbmNvZGVkX3BhY2tldC0+ZGF0YS5mcmFtZS5idWYsIGVuY29kZWRfcGFja2V0LT5kYXRhLmZyYW1lLnN6KTsKKyAgICAgICAgICAgICsrbU51bUlucHV0RnJhbWVzOworCisgICAgICAgICAgICBBTE9HRCgiYnl0ZXMgZ2VuZXJhdGVkICV6dSIsIGVuY29kZWRfcGFja2V0LT5kYXRhLmZyYW1lLnN6KTsKKyAgICAgICAgICAgIHVpbnQzMl90IGZsYWdzID0gMDsKKyAgICAgICAgICAgIGlmIChlb3MpIHsKKyAgICAgICAgICAgICAgICBmbGFncyB8PSBDMkZyYW1lRGF0YTo6RkxBR19FTkRfT0ZfU1RSRUFNOworICAgICAgICAgICAgfQorICAgICAgICAgICAgd29yay0+d29ya2xldHMuZnJvbnQoKS0+b3V0cHV0LmZsYWdzID0gKEMyRnJhbWVEYXRhOjpmbGFnc190KWZsYWdzOworICAgICAgICAgICAgd29yay0+d29ya2xldHMuZnJvbnQoKS0+b3V0cHV0LmJ1ZmZlcnMuY2xlYXIoKTsKKyAgICAgICAgICAgIHN0ZDo6c2hhcmVkX3B0cjxDMkJ1ZmZlcj4gYnVmZmVyID0gY3JlYXRlTGluZWFyQnVmZmVyKGJsb2NrKTsKKyAgICAgICAgICAgIGlmIChlbmNvZGVkX3BhY2tldC0+ZGF0YS5mcmFtZS5mbGFncyAmIFZQWF9GUkFNRV9JU19LRVkpIHsKKyAgICAgICAgICAgICAgICBidWZmZXItPnNldEluZm8oc3RkOjptYWtlX3NoYXJlZDxDMlN0cmVhbVBpY3R1cmVUeXBlTWFza0luZm86Om91dHB1dD4oCisgICAgICAgICAgICAgICAgICAgICAgICAwdSAvKiBzdHJlYW0gaWQgKi8sIEMyUGljdHVyZVR5cGVLZXlGcmFtZSkpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgd29yay0+d29ya2xldHMuZnJvbnQoKS0+b3V0cHV0LmJ1ZmZlcnMucHVzaF9iYWNrKGJ1ZmZlcik7CisgICAgICAgICAgICB3b3JrLT53b3JrbGV0cy5mcm9udCgpLT5vdXRwdXQub3JkaW5hbCA9IHdvcmstPmlucHV0Lm9yZGluYWw7CisgICAgICAgICAgICB3b3JrLT53b3JrbGV0cy5mcm9udCgpLT5vdXRwdXQub3JkaW5hbC50aW1lc3RhbXAgPSBlbmNvZGVkX3BhY2tldC0+ZGF0YS5mcmFtZS5wdHM7CisgICAgICAgICAgICB3b3JrLT53b3JrbGV0c1Byb2Nlc3NlZCA9IDF1OworICAgICAgICAgICAgcG9wdWxhdGVkID0gdHJ1ZTsKKyAgICAgICAgICAgIGlmIChlb3MpIHsKKyAgICAgICAgICAgICAgICBtU2lnbmFsbGVkT3V0cHV0RW9zID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICBBTE9HVigic2lnbmFsbGVkIEVPUyIpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorICAgIGlmICghcG9wdWxhdGVkKSB7CisgICAgICAgIHdvcmstPndvcmtsZXRzUHJvY2Vzc2VkID0gMHU7CisgICAgfQorfQorCitjMl9zdGF0dXNfdCBDMlNvZnRWcHhFbmM6OmRyYWluKAorICAgICAgICB1aW50MzJfdCBkcmFpbk1vZGUsCisgICAgICAgIGNvbnN0IHN0ZDo6c2hhcmVkX3B0cjxDMkJsb2NrUG9vbD4gJnBvb2wpIHsKKyAgICAodm9pZClwb29sOworICAgIGlmIChkcmFpbk1vZGUgPT0gTk9fRFJBSU4pIHsKKyAgICAgICAgQUxPR1coImRyYWluIHdpdGggTk9fRFJBSU46IG5vLW9wIik7CisgICAgICAgIHJldHVybiBDMl9PSzsKKyAgICB9CisgICAgaWYgKGRyYWluTW9kZSA9PSBEUkFJTl9DSEFJTikgeworICAgICAgICBBTE9HVygiRFJBSU5fQ0hBSU4gbm90IHN1cHBvcnRlZCIpOworICAgICAgICByZXR1cm4gQzJfT01JVFRFRDsKKyAgICB9CisKKyAgICByZXR1cm4gQzJfT0s7Cit9CisKK30gIC8vIG5hbWVzcGFjZSBhbmRyb2lkCmRpZmYgLS1naXQgYS9tZWRpYS9jb2RlYzIvY29tcG9uZW50cy92cHgvQzJTb2Z0VnB4RW5jLmggYi9tZWRpYS9jb2RlYzIvY29tcG9uZW50cy92cHgvQzJTb2Z0VnB4RW5jLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODdlZDFhOQotLS0gL2Rldi9udWxsCisrKyBiL21lZGlhL2NvZGVjMi9jb21wb25lbnRzL3ZweC9DMlNvZnRWcHhFbmMuaApAQCAtMCwwICsxLDQzNyBAQAorLyoKKyAqIENvcHlyaWdodCAyMDE4IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KKworI2lmbmRlZiBBTkRST0lEX0MyX1NPRlRfVlBYX0VOQ19IX18KKyNkZWZpbmUgQU5EUk9JRF9DMl9TT0ZUX1ZQWF9FTkNfSF9fCisKKyNpbmNsdWRlIDxtZWRpYS9zdGFnZWZyaWdodC9mb3VuZGF0aW9uL01lZGlhRGVmcy5oPgorCisjaW5jbHVkZSA8QzJQbGF0Zm9ybVN1cHBvcnQuaD4KKyNpbmNsdWRlIDxDb2RlYzJCdWZmZXJVdGlscy5oPgorI2luY2x1ZGUgPFNpbXBsZUMyQ29tcG9uZW50Lmg+CisjaW5jbHVkZSA8U2ltcGxlQzJJbnRlcmZhY2UuaD4KKyNpbmNsdWRlIDx1dGlsL0MySW50ZXJmYWNlSGVscGVyLmg+CisKKyNpbmNsdWRlICJ2cHgvdnB4X2VuY29kZXIuaCIKKyNpbmNsdWRlICJ2cHgvdnB4X2NvZGVjLmgiCisjaW5jbHVkZSAidnB4L3ZweF9pbWFnZS5oIgorI2luY2x1ZGUgInZweC92cDhjeC5oIgorCituYW1lc3BhY2UgYW5kcm9pZCB7CisKKy8vIFRPRE86IFRoZXNlIGRlZnMgdGFrZW4gZnJvbSBkZXByZWNhdGVkIE9NWF9WaWRlb0V4dC5oLiBNb3ZlIHRoZXNlIGRlZmluaXRpb25zCisvLyB0byBhIG5ldyBoZWFkZXIgZmlsZSBhbmQgaW5jbHVkZSBpdC4KKworLyoqIE1heGltdW0gbnVtYmVyIG9mIHRlbXBvcmFsIGxheWVycyAqLworI2RlZmluZSBNQVhURU1QT1JBTExBWUVSUyAzCisKKy8qKiB0ZW1wb3JhbCBsYXllciBwYXR0ZXJucyAqLwordHlwZWRlZiBlbnVtIFRlbXBvcmFsUGF0dGVyblR5cGUgeworICAgIFZQWFRlbXBvcmFsTGF5ZXJQYXR0ZXJuTm9uZSA9IDAsCisgICAgVlBYVGVtcG9yYWxMYXllclBhdHRlcm5XZWJSVEMgPSAxLAorICAgIFZQWFRlbXBvcmFsTGF5ZXJQYXR0ZXJuTWF4ID0gMHg3RkZGRkZGRgorfSBUZW1wb3JhbFBhdHRlcm5UeXBlOworCisvLyBCYXNlIGNsYXNzIGZvciBhIFZQWCBFbmNvZGVyIENvbXBvbmVudAorLy8KKy8vIE9ubHkgZm9sbG93aW5nIGVuY29kZXIgc2V0dGluZ3MgYXJlIGF2YWlsYWJsZSAoY29kZWMgc3BlY2lmaWMgc2V0dGluZ3MgbWlnaHQKKy8vIGJlIGF2YWlsYWJsZSBpbiB0aGUgc3ViLWNsYXNzZXMpOgorLy8gICAgLSB2aWRlbyByZXNvbHV0aW9uCisvLyAgICAtIHRhcmdldCBiaXRyYXRlCisvLyAgICAtIHJhdGUgY29udHJvbCAoY29uc3RhbnQgLyB2YXJpYWJsZSkKKy8vICAgIC0gZnJhbWUgcmF0ZQorLy8gICAgLSBlcnJvciByZXNpbGllbmNlCisvLyAgICAtIHJlY29uc3RydWN0aW9uICYgbG9vcCBmaWx0ZXJzIChnX3Byb2ZpbGUpCisvLworLy8gT25seSBmb2xsb3dpbmcgY29sb3IgZm9ybWF0cyBhcmUgcmVjb2duaXplZAorLy8gICAgLSBDMlBsYW5hckxheW91dDo6VFlQRV9SR0IKKy8vICAgIC0gQzJQbGFuYXJMYXlvdXQ6OlRZUEVfUkdCQQorLy8KKy8vIEZvbGxvd2luZyBzZXR0aW5ncyBhcmUgbm90IGNvbmZpZ3VyYWJsZSBieSB0aGUgY2xpZW50CisvLyAgICAtIGVuY29kaW5nIGRlYWRsaW5lIGlzIHJlYWx0aW1lCisvLyAgICAtIG11bHRpdGhyZWFkZWQgZW5jb2RpbmcgdXRpbGl6ZXMgYSBudW1iZXIgb2YgdGhyZWFkcyBlcXVhbAorLy8gdG8gb25saW5lIGNwdSdzIGF2YWlsYWJsZQorLy8gICAgLSB0aGUgYWxnb3JpdGhtIGludGVyZmFjZSBmb3IgZW5jb2RlciBpcyBkZWNpZGVkIGJ5IHRoZSBzdWItY2xhc3MgaW4gdXNlCisvLyAgICAtIGZyYWN0aW9uYWwgYml0cyBvZiBmcmFtZSByYXRlIGlzIGRpc2NhcmRlZAorLy8gICAgLSB0aW1lc3RhbXBzIGFyZSBpbiBtaWNyb3NlY29uZHMsIHRoZXJlZm9yZSBlbmNvZGVyIHRpbWViYXNlIGlzIGZpeGVkCisvLyB0byAxLzEwMDAwMDAKKworc3RydWN0IEMyU29mdFZweEVuYyA6IHB1YmxpYyBTaW1wbGVDMkNvbXBvbmVudCB7CisgICAgY2xhc3MgSW50ZkltcGw7CisKKyAgICBDMlNvZnRWcHhFbmMoY29uc3QgY2hhciogbmFtZSwgYzJfbm9kZV9pZF90IGlkLAorICAgICAgICAgICAgICAgICBjb25zdCBzdGQ6OnNoYXJlZF9wdHI8SW50ZkltcGw+JiBpbnRmSW1wbCk7CisKKyAgICAvLyBGcm9tIFNpbXBsZUMyQ29tcG9uZW50CisgICAgYzJfc3RhdHVzX3Qgb25Jbml0KCkgb3ZlcnJpZGUgZmluYWw7CisgICAgYzJfc3RhdHVzX3Qgb25TdG9wKCkgb3ZlcnJpZGUgZmluYWw7CisgICAgdm9pZCBvblJlc2V0KCkgb3ZlcnJpZGUgZmluYWw7CisgICAgdm9pZCBvblJlbGVhc2UoKSBvdmVycmlkZSBmaW5hbDsKKyAgICBjMl9zdGF0dXNfdCBvbkZsdXNoX3NtKCkgb3ZlcnJpZGUgZmluYWw7CisKKyAgICB2b2lkIHByb2Nlc3MoCisgICAgICAgICAgICBjb25zdCBzdGQ6OnVuaXF1ZV9wdHI8QzJXb3JrPiAmd29yaywKKyAgICAgICAgICAgIGNvbnN0IHN0ZDo6c2hhcmVkX3B0cjxDMkJsb2NrUG9vbD4gJnBvb2wpIG92ZXJyaWRlIGZpbmFsOworICAgIGMyX3N0YXR1c190IGRyYWluKAorICAgICAgICAgICAgdWludDMyX3QgZHJhaW5Nb2RlLAorICAgICAgICAgICAgY29uc3Qgc3RkOjpzaGFyZWRfcHRyPEMyQmxvY2tQb29sPiAmcG9vbCkgb3ZlcnJpZGUgZmluYWw7CisKKyBwcm90ZWN0ZWQ6CisgICAgIHN0ZDo6c2hhcmVkX3B0cjxJbnRmSW1wbD4gbUludGY7CisgICAgIHZpcnR1YWwgfkMyU29mdFZweEVuYygpOworCisgICAgIC8vIEluaXRpYWxpemVzIHZweCBlbmNvZGVyIHdpdGggYXZhaWxhYmxlIHNldHRpbmdzLgorICAgICBzdGF0dXNfdCBpbml0RW5jb2RlcigpOworCisgICAgIC8vIFBvcHVsYXRlcyBtQ29kZWNJbnRlcmZhY2Ugd2l0aCBjb2RlYyBzcGVjaWZpYyBzZXR0aW5ncy4KKyAgICAgdmlydHVhbCB2b2lkIHNldENvZGVjU3BlY2lmaWNJbnRlcmZhY2UoKSA9IDA7CisKKyAgICAgLy8gU2V0cyBjb2RlYyBzcGVjaWZpYyBjb25maWd1cmF0aW9uLgorICAgICB2aXJ0dWFsIHZvaWQgc2V0Q29kZWNTcGVjaWZpY0NvbmZpZ3VyYXRpb24oKSA9IDA7CisKKyAgICAgLy8gU2V0cyBjb2RlYyBzcGVjaWZpYyBlbmNvZGVyIGNvbnRyb2xzLgorICAgICB2aXJ0dWFsIHZweF9jb2RlY19lcnJfdCBzZXRDb2RlY1NwZWNpZmljQ29udHJvbHMoKSA9IDA7CisKKyAgICAgLy8gR2V0IGN1cnJlbnQgZW5jb2RlIGZsYWdzLgorICAgICB2aXJ0dWFsIHZweF9lbmNfZnJhbWVfZmxhZ3NfdCBnZXRFbmNvZGVGbGFncygpOworCisgICAgIGVudW0gVGVtcG9yYWxSZWZlcmVuY2VzIHsKKyAgICAgICAgIC8vIEZvciAxIGxheWVyIGNhc2U6IHJlZmVyZW5jZSBhbGwgKGxhc3QsIGdvbGRlbiwgYW5kIGFsdCByZWYpLCBidXQgb25seQorICAgICAgICAgLy8gdXBkYXRlIGxhc3QuCisgICAgICAgICBrVGVtcG9yYWxVcGRhdGVMYXN0UmVmQWxsID0gMTIsCisgICAgICAgICAvLyBGaXJzdCBiYXNlIGxheWVyIGZyYW1lIGZvciAzIHRlbXBvcmFsIGxheWVycywgd2hpY2ggdXBkYXRlcyBsYXN0IGFuZAorICAgICAgICAgLy8gZ29sZGVuIHdpdGggYWx0IHJlZiBkZXBlbmRlbmN5LgorICAgICAgICAga1RlbXBvcmFsVXBkYXRlTGFzdEFuZEdvbGRlblJlZkFsdFJlZiA9IDExLAorICAgICAgICAgLy8gRmlyc3QgZW5oYW5jZW1lbnQgbGF5ZXIgd2l0aCBhbHQgcmVmIGRlcGVuZGVuY3kuCisgICAgICAgICBrVGVtcG9yYWxVcGRhdGVHb2xkZW5SZWZBbHRSZWYgPSAxMCwKKyAgICAgICAgIC8vIEZpcnN0IGVuaGFuY2VtZW50IGxheWVyIHdpdGggYWx0IHJlZiBkZXBlbmRlbmN5LgorICAgICAgICAga1RlbXBvcmFsVXBkYXRlR29sZGVuV2l0aG91dERlcGVuZGVuY3lSZWZBbHRSZWYgPSA5LAorICAgICAgICAgLy8gQmFzZSBsYXllciB3aXRoIGFsdCByZWYgZGVwZW5kZW5jeS4KKyAgICAgICAgIGtUZW1wb3JhbFVwZGF0ZUxhc3RSZWZBbHRSZWYgPSA4LAorICAgICAgICAgLy8gSGlnaGVzdCBlbmhhY2VtZW50IGxheWVyIHdpdGhvdXQgZGVwZW5kZW5jeSBvbiBnb2xkZW4gd2l0aCBhbHQgcmVmCisgICAgICAgICAvLyBkZXBlbmRlbmN5LgorICAgICAgICAga1RlbXBvcmFsVXBkYXRlTm9uZU5vUmVmR29sZGVuUmVmQWx0UmVmID0gNywKKyAgICAgICAgIC8vIFNlY29uZCBsYXllciBhbmQgbGFzdCBmcmFtZSBpbiBjeWNsZSwgZm9yIDIgbGF5ZXJzLgorICAgICAgICAga1RlbXBvcmFsVXBkYXRlTm9uZU5vUmVmQWx0cmVmID0gNiwKKyAgICAgICAgIC8vIEhpZ2hlc3QgZW5oYW5jZW1lbnQgbGF5ZXIuCisgICAgICAgICBrVGVtcG9yYWxVcGRhdGVOb25lID0gNSwKKyAgICAgICAgIC8vIFNlY29uZCBlbmhhbmNlbWVudCBsYXllci4KKyAgICAgICAgIGtUZW1wb3JhbFVwZGF0ZUFsdHJlZiA9IDQsCisgICAgICAgICAvLyBTZWNvbmQgZW5oYW5jZW1lbnQgbGF5ZXIgd2l0aG91dCBkZXBlbmRlbmN5IG9uIHByZXZpb3VzIGZyYW1lcyBpbgorICAgICAgICAgLy8gdGhlIHNlY29uZCBlbmhhbmNlbWVudCBsYXllci4KKyAgICAgICAgIGtUZW1wb3JhbFVwZGF0ZUFsdHJlZldpdGhvdXREZXBlbmRlbmN5ID0gMywKKyAgICAgICAgIC8vIEZpcnN0IGVuaGFuY2VtZW50IGxheWVyLgorICAgICAgICAga1RlbXBvcmFsVXBkYXRlR29sZGVuID0gMiwKKyAgICAgICAgIC8vIEZpcnN0IGVuaGFuY2VtZW50IGxheWVyIHdpdGhvdXQgZGVwZW5kZW5jeSBvbiBwcmV2aW91cyBmcmFtZXMgaW4KKyAgICAgICAgIC8vIHRoZSBmaXJzdCBlbmhhbmNlbWVudCBsYXllci4KKyAgICAgICAgIGtUZW1wb3JhbFVwZGF0ZUdvbGRlbldpdGhvdXREZXBlbmRlbmN5ID0gMSwKKyAgICAgICAgIC8vIEJhc2UgbGF5ZXIuCisgICAgICAgICBrVGVtcG9yYWxVcGRhdGVMYXN0ID0gMCwKKyAgICAgfTsKKyAgICAgZW51bSB7CisgICAgICAgICBrTWF4VGVtcG9yYWxQYXR0ZXJuID0gOAorICAgICB9OworCisgICAgIC8vIHZweCBzcGVjaWZpYyBvcGFxdWUgZGF0YSBzdHJ1Y3R1cmUgdGhhdAorICAgICAvLyBzdG9yZXMgZW5jb2RlciBzdGF0ZQorICAgICB2cHhfY29kZWNfY3R4X3QqIG1Db2RlY0NvbnRleHQ7CisKKyAgICAgLy8gdnB4IHNwZWNpZmljIGRhdGEgc3RydWN0dXJlIHRoYXQKKyAgICAgLy8gc3RvcmVzIGVuY29kZXIgY29uZmlndXJhdGlvbgorICAgICB2cHhfY29kZWNfZW5jX2NmZ190KiBtQ29kZWNDb25maWd1cmF0aW9uOworCisgICAgIC8vIHZweCBzcGVjaWZpYyByZWFkLW9ubHkgZGF0YSBzdHJ1Y3R1cmUKKyAgICAgLy8gdGhhdCBzcGVjaWZpZXMgYWxnb3JpdGhtIGludGVyZmFjZSAoZS5nLiB2cDgpCisgICAgIHZweF9jb2RlY19pZmFjZV90KiBtQ29kZWNJbnRlcmZhY2U7CisKKyAgICAgLy8gYWxpZ24gc3RyaWRlIHRvIHRoZSBwb3dlciBvZiAyCisgICAgIGludDMyX3QgbVN0cmlkZUFsaWduOworCisgICAgIC8vIENvbG9yIGZvcm1hdCBmb3IgdGhlIGlucHV0IHBvcnQKKyAgICAgdnB4X2ltZ19mbXRfdCBtQ29sb3JGb3JtYXQ7CisKKyAgICAgLy8gQml0cmF0ZSBjb250cm9sIG1vZGUsIGVpdGhlciBjb25zdGFudCBvciB2YXJpYWJsZQorICAgICB2cHhfcmNfbW9kZSBtQml0cmF0ZUNvbnRyb2xNb2RlOworCisgICAgIC8vIFBhcmFtZXRlciB0aGF0IGRlbm90ZXMgd2hldGhlciBlcnJvciByZXNpbGllbmNlCisgICAgIC8vIGlzIGVuYWJsZWQgaW4gZW5jb2RlcgorICAgICBib29sIG1FcnJvclJlc2lsaWVuY2U7CisKKyAgICAgLy8gTWluaW11bSAoYmVzdCBxdWFsaXR5KSBxdWFudGl6ZXIKKyAgICAgdWludDMyX3QgbU1pblF1YW50aXplcjsKKworICAgICAvLyBNYXhpbXVtICh3b3JzdCBxdWFsaXR5KSBxdWFudGl6ZXIKKyAgICAgdWludDMyX3QgbU1heFF1YW50aXplcjsKKworICAgICAvLyBOdW1iZXIgb2YgY29kaW5nIHRlbXBvcmFsIGxheWVycyB0byBiZSB1c2VkLgorICAgICBzaXplX3QgbVRlbXBvcmFsTGF5ZXJzOworCisgICAgIC8vIFRlbXBvcmFsIGxheWVyIGJpdHJhcmUgcmF0aW8gaW4gcGVyY2VudGFnZQorICAgICB1aW50MzJfdCBtVGVtcG9yYWxMYXllckJpdHJhdGVSYXRpb1tNQVhURU1QT1JBTExBWUVSU107CisKKyAgICAgLy8gVGVtcG9yYWwgcGF0dGVybiB0eXBlCisgICAgIFRlbXBvcmFsUGF0dGVyblR5cGUgbVRlbXBvcmFsUGF0dGVyblR5cGU7CisKKyAgICAgLy8gVGVtcG9yYWwgcGF0dGVybiBsZW5ndGgKKyAgICAgc2l6ZV90IG1UZW1wb3JhbFBhdHRlcm5MZW5ndGg7CisKKyAgICAgLy8gVGVtcG9yYWwgcGF0dGVybiBjdXJyZW50IGluZGV4CisgICAgIHNpemVfdCBtVGVtcG9yYWxQYXR0ZXJuSWR4OworCisgICAgIC8vIEZyYW1lIHR5cGUgdGVtcG9yYWwgcGF0dGVybgorICAgICBUZW1wb3JhbFJlZmVyZW5jZXMgbVRlbXBvcmFsUGF0dGVybltrTWF4VGVtcG9yYWxQYXR0ZXJuXTsKKworICAgICAvLyBMYXN0IGlucHV0IGJ1ZmZlciB0aW1lc3RhbXAKKyAgICAgdWludDY0X3QgbUxhc3RUaW1lc3RhbXA7CisKKyAgICAgLy8gTnVtYmVyIG9mIGlucHV0IGZyYW1lcworICAgICBpbnQ2NF90IG1OdW1JbnB1dEZyYW1lczsKKworICAgICAvLyBDb252ZXJzaW9uIGJ1ZmZlciBpcyBuZWVkZWQgdG8gaW5wdXQgdG8KKyAgICAgLy8geXV2NDIwIHBsYW5hciBmb3JtYXQuCisgICAgIE1lbW9yeUJsb2NrIG1Db252ZXJzaW9uQnVmZmVyOworCisgICAgIC8vIFNpZ25hbGxlZCBFT1MKKyAgICAgYm9vbCBtU2lnbmFsbGVkT3V0cHV0RW9zOworCisgICAgIC8vIFNpZ25hbGxlZCBFcnJvcgorICAgICBib29sIG1TaWduYWxsZWRFcnJvcjsKKworICAgIC8vIGNvbmZpZ3VyYXRpb25zIHVzZWQgYnkgY29tcG9uZW50IGluIHByb2Nlc3MKKyAgICAvLyAoVE9ETzoga2VlcCB0aGlzIGluIGludGYgYnV0IG1ha2UgdGhlbSBpbnRlcm5hbCBvbmx5KQorICAgIHN0ZDo6c2hhcmVkX3B0cjxDMlN0cmVhbVBpY3R1cmVTaXplSW5mbzo6aW5wdXQ+IG1TaXplOworICAgIHN0ZDo6c2hhcmVkX3B0cjxDMlN0cmVhbUludHJhUmVmcmVzaFR1bmluZzo6b3V0cHV0PiBtSW50cmFSZWZyZXNoOworICAgIHN0ZDo6c2hhcmVkX3B0cjxDMlN0cmVhbUZyYW1lUmF0ZUluZm86Om91dHB1dD4gbUZyYW1lUmF0ZTsKKyAgICBzdGQ6OnNoYXJlZF9wdHI8QzJTdHJlYW1CaXRyYXRlSW5mbzo6b3V0cHV0PiBtQml0cmF0ZTsKKyAgICBzdGQ6OnNoYXJlZF9wdHI8QzJTdHJlYW1CaXRyYXRlTW9kZVR1bmluZzo6b3V0cHV0PiBtQml0cmF0ZU1vZGU7CisgICAgc3RkOjpzaGFyZWRfcHRyPEMyU3RyZWFtUmVxdWVzdFN5bmNGcmFtZVR1bmluZzo6b3V0cHV0PiBtUmVxdWVzdFN5bmM7CisKKyAgICAgQzJfRE9fTk9UX0NPUFkoQzJTb2Z0VnB4RW5jKTsKK307CisKK2NsYXNzIEMyU29mdFZweEVuYzo6SW50ZkltcGwgOiBwdWJsaWMgQzJJbnRlcmZhY2VIZWxwZXIgeworICAgcHVibGljOgorICAgIGV4cGxpY2l0IEludGZJbXBsKGNvbnN0IHN0ZDo6c2hhcmVkX3B0cjxDMlJlZmxlY3RvckhlbHBlcj4mIGhlbHBlcikKKyAgICAgICAgOiBDMkludGVyZmFjZUhlbHBlcihoZWxwZXIpIHsKKyAgICAgICAgc2V0RGVyaXZlZEluc3RhbmNlKHRoaXMpOworCisgICAgICAgIGFkZFBhcmFtZXRlcigKKyAgICAgICAgICAgIERlZmluZVBhcmFtKG1JbnB1dEZvcm1hdCwgQzJfTkFNRV9JTlBVVF9TVFJFQU1fRk9STUFUX1NFVFRJTkcpCisgICAgICAgICAgICAgICAgLndpdGhDb25zdFZhbHVlKAorICAgICAgICAgICAgICAgICAgICBuZXcgQzJTdHJlYW1Gb3JtYXRDb25maWc6OmlucHV0KDB1LCBDMkZvcm1hdFZpZGVvKSkKKyAgICAgICAgICAgICAgICAuYnVpbGQoKSk7CisKKyAgICAgICAgYWRkUGFyYW1ldGVyKAorICAgICAgICAgICAgRGVmaW5lUGFyYW0obU91dHB1dEZvcm1hdCwgQzJfTkFNRV9PVVRQVVRfU1RSRUFNX0ZPUk1BVF9TRVRUSU5HKQorICAgICAgICAgICAgICAgIC53aXRoQ29uc3RWYWx1ZSgKKyAgICAgICAgICAgICAgICAgICAgbmV3IEMyU3RyZWFtRm9ybWF0Q29uZmlnOjpvdXRwdXQoMHUsIEMyRm9ybWF0Q29tcHJlc3NlZCkpCisgICAgICAgICAgICAgICAgLmJ1aWxkKCkpOworCisgICAgICAgIGFkZFBhcmFtZXRlcigKKyAgICAgICAgICAgIERlZmluZVBhcmFtKG1JbnB1dE1lZGlhVHlwZSwgQzJfTkFNRV9JTlBVVF9QT1JUX01JTUVfU0VUVElORykKKyAgICAgICAgICAgICAgICAud2l0aENvbnN0VmFsdWUoQWxsb2NTaGFyZWRTdHJpbmc8QzJQb3J0TWltZUNvbmZpZzo6aW5wdXQ+KAorICAgICAgICAgICAgICAgICAgICBNRURJQV9NSU1FVFlQRV9WSURFT19SQVcpKQorICAgICAgICAgICAgICAgIC5idWlsZCgpKTsKKworICAgICAgICBhZGRQYXJhbWV0ZXIoCisgICAgICAgICAgICBEZWZpbmVQYXJhbShtT3V0cHV0TWVkaWFUeXBlLCBDMl9OQU1FX09VVFBVVF9QT1JUX01JTUVfU0VUVElORykKKyAgICAgICAgICAgICAgICAud2l0aENvbnN0VmFsdWUoQWxsb2NTaGFyZWRTdHJpbmc8QzJQb3J0TWltZUNvbmZpZzo6b3V0cHV0PigKKyNpZmRlZiBWUDkKKyAgICAgICAgICAgICAgICAgICAgTUVESUFfTUlNRVRZUEVfVklERU9fVlA5CisjZWxzZQorICAgICAgICAgICAgICAgICAgICBNRURJQV9NSU1FVFlQRV9WSURFT19WUDgKKyNlbmRpZgorICAgICAgICAgICAgICAgICAgICApKQorICAgICAgICAgICAgICAgIC5idWlsZCgpKTsKKworICAgICAgICBhZGRQYXJhbWV0ZXIoRGVmaW5lUGFyYW0obVVzYWdlLCBDMl9OQU1FX0lOUFVUX1NUUkVBTV9VU0FHRV9TRVRUSU5HKQorICAgICAgICAgICAgICAgICAgICAgICAgIC53aXRoQ29uc3RWYWx1ZShuZXcgQzJTdHJlYW1Vc2FnZVR1bmluZzo6aW5wdXQoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB1LCAodWludDY0X3QpQzJNZW1vcnlVc2FnZTo6Q1BVX1JFQUQpKQorICAgICAgICAgICAgICAgICAgICAgICAgIC5idWlsZCgpKTsKKworICAgICAgICBhZGRQYXJhbWV0ZXIoCisgICAgICAgICAgICBEZWZpbmVQYXJhbShtU2l6ZSwgQzJfTkFNRV9TVFJFQU1fVklERU9fU0laRV9TRVRUSU5HKQorICAgICAgICAgICAgICAgIC53aXRoRGVmYXVsdChuZXcgQzJWaWRlb1NpemVTdHJlYW1UdW5pbmc6OmlucHV0KDB1LCAzMjAsIDI0MCkpCisgICAgICAgICAgICAgICAgLndpdGhGaWVsZHMoeworICAgICAgICAgICAgICAgICAgICBDMkYobVNpemUsIHdpZHRoKS5pblJhbmdlKDIsIDIwNDgsIDIpLAorICAgICAgICAgICAgICAgICAgICBDMkYobVNpemUsIGhlaWdodCkuaW5SYW5nZSgyLCAyMDQ4LCAyKSwKKyAgICAgICAgICAgICAgICB9KQorICAgICAgICAgICAgICAgIC53aXRoU2V0dGVyKFNpemVTZXR0ZXIpCisgICAgICAgICAgICAgICAgLmJ1aWxkKCkpOworCisgICAgICAgIGFkZFBhcmFtZXRlcigKKyAgICAgICAgICAgIERlZmluZVBhcmFtKG1CaXRyYXRlTW9kZSwgQzJfUEFSQU1LRVlfQklUUkFURV9NT0RFKQorICAgICAgICAgICAgICAgIC53aXRoRGVmYXVsdChuZXcgQzJTdHJlYW1CaXRyYXRlTW9kZVR1bmluZzo6b3V0cHV0KAorICAgICAgICAgICAgICAgICAgICAgICAgMHUsIEMyQ29uZmlnOjpCSVRSQVRFX0NPTlNUKSkKKyAgICAgICAgICAgICAgICAud2l0aEZpZWxkcyh7CisgICAgICAgICAgICAgICAgICAgIEMyRihtQml0cmF0ZU1vZGUsIHZhbHVlKS5vbmVPZih7CisgICAgICAgICAgICAgICAgICAgICAgICBDMkNvbmZpZzo6QklUUkFURV9DT05TVCwgQzJDb25maWc6OkJJVFJBVEVfVkFSSUFCTEUgfSkKKyAgICAgICAgICAgICAgICB9KQorICAgICAgICAgICAgICAgIC53aXRoU2V0dGVyKAorICAgICAgICAgICAgICAgICAgICBTZXR0ZXI8ZGVjbHR5cGUoKm1CaXRyYXRlTW9kZSk+OjpTdHJpY3RWYWx1ZVdpdGhOb0RlcHMpCisgICAgICAgICAgICAgICAgLmJ1aWxkKCkpOworCisgICAgICAgIGFkZFBhcmFtZXRlcigKKyAgICAgICAgICAgIERlZmluZVBhcmFtKG1GcmFtZVJhdGUsIEMyX05BTUVfU1RSRUFNX0ZSQU1FX1JBVEVfU0VUVElORykKKyAgICAgICAgICAgICAgICAud2l0aERlZmF1bHQobmV3IEMyU3RyZWFtRnJhbWVSYXRlSW5mbzo6b3V0cHV0KDB1LCAzMC4pKQorICAgICAgICAgICAgICAgIC8vIFRPRE86IE1vcmUgcmVzdHJpY3Rpb24/CisgICAgICAgICAgICAgICAgLndpdGhGaWVsZHMoe0MyRihtRnJhbWVSYXRlLCB2YWx1ZSkuZ3JlYXRlclRoYW4oMC4pfSkKKyAgICAgICAgICAgICAgICAud2l0aFNldHRlcigKKyAgICAgICAgICAgICAgICAgICAgU2V0dGVyPGRlY2x0eXBlKCptRnJhbWVSYXRlKT46OlN0cmljdFZhbHVlV2l0aE5vRGVwcykKKyAgICAgICAgICAgICAgICAuYnVpbGQoKSk7CisKKyAgICAgICAgYWRkUGFyYW1ldGVyKAorICAgICAgICAgICAgRGVmaW5lUGFyYW0obUxheWVyaW5nLCBDMl9QQVJBTUtFWV9URU1QT1JBTF9MQVlFUklORykKKyAgICAgICAgICAgICAgICAud2l0aERlZmF1bHQoQzJTdHJlYW1UZW1wb3JhbExheWVyaW5nVHVuaW5nOjpvdXRwdXQ6OkFsbG9jU2hhcmVkKDB1LCAwLCAwLCAwKSkKKyAgICAgICAgICAgICAgICAud2l0aEZpZWxkcyh7CisgICAgICAgICAgICAgICAgICAgIEMyRihtTGF5ZXJpbmcsIG0ubGF5ZXJDb3VudCkuaW5SYW5nZSgwLCA0KSwKKyAgICAgICAgICAgICAgICAgICAgQzJGKG1MYXllcmluZywgbS5iTGF5ZXJDb3VudCkuaW5SYW5nZSgwLCAwKSwKKyAgICAgICAgICAgICAgICAgICAgQzJGKG1MYXllcmluZywgbS5iaXRyYXRlUmF0aW9zKS5pblJhbmdlKDAuLCAxLikKKyAgICAgICAgICAgICAgICB9KQorICAgICAgICAgICAgICAgIC53aXRoU2V0dGVyKExheWVyaW5nU2V0dGVyKQorICAgICAgICAgICAgICAgIC5idWlsZCgpKTsKKworICAgICAgICBhZGRQYXJhbWV0ZXIoCisgICAgICAgICAgICAgICAgRGVmaW5lUGFyYW0obVN5bmNGcmFtZVBlcmlvZCwgQzJfUEFSQU1LRVlfU1lOQ19GUkFNRV9JTlRFUlZBTCkKKyAgICAgICAgICAgICAgICAud2l0aERlZmF1bHQobmV3IEMyU3RyZWFtU3luY0ZyYW1lSW50ZXJ2YWxUdW5pbmc6Om91dHB1dCgwdSwgMTAwMDAwMCkpCisgICAgICAgICAgICAgICAgLndpdGhGaWVsZHMoe0MyRihtU3luY0ZyYW1lUGVyaW9kLCB2YWx1ZSkuYW55KCl9KQorICAgICAgICAgICAgICAgIC53aXRoU2V0dGVyKFNldHRlcjxkZWNsdHlwZSgqbVN5bmNGcmFtZVBlcmlvZCk+OjpTdHJpY3RWYWx1ZVdpdGhOb0RlcHMpCisgICAgICAgICAgICAgICAgLmJ1aWxkKCkpOworCisgICAgICAgIGFkZFBhcmFtZXRlcigKKyAgICAgICAgICAgIERlZmluZVBhcmFtKG1CaXRyYXRlLCBDMl9OQU1FX1NUUkVBTV9CSVRSQVRFX1NFVFRJTkcpCisgICAgICAgICAgICAgICAgLndpdGhEZWZhdWx0KG5ldyBDMkJpdHJhdGVUdW5pbmc6Om91dHB1dCgwdSwgNjQwMDApKQorICAgICAgICAgICAgICAgIC53aXRoRmllbGRzKHtDMkYobUJpdHJhdGUsIHZhbHVlKS5pblJhbmdlKDQwOTYsIDQwMDAwMDAwKX0pCisgICAgICAgICAgICAgICAgLndpdGhTZXR0ZXIoQml0cmF0ZVNldHRlcikKKyAgICAgICAgICAgICAgICAuYnVpbGQoKSk7CisKKyAgICAgICAgYWRkUGFyYW1ldGVyKAorICAgICAgICAgICAgICAgIERlZmluZVBhcmFtKG1JbnRyYVJlZnJlc2gsIEMyX1BBUkFNS0VZX0lOVFJBX1JFRlJFU0gpCisgICAgICAgICAgICAgICAgLndpdGhDb25zdFZhbHVlKG5ldyBDMlN0cmVhbUludHJhUmVmcmVzaFR1bmluZzo6b3V0cHV0KAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwdSwgQzJDb25maWc6OklOVFJBX1JFRlJFU0hfRElTQUJMRUQsIDAuKSkKKyAgICAgICAgICAgICAgICAuYnVpbGQoKSk7CisKKyAgICAgICAgYWRkUGFyYW1ldGVyKAorICAgICAgICBEZWZpbmVQYXJhbShtUHJvZmlsZUxldmVsLCBDMl9QQVJBTUtFWV9QUk9GSUxFX0xFVkVMKQorICAgICAgICAud2l0aERlZmF1bHQobmV3IEMyU3RyZWFtUHJvZmlsZUxldmVsSW5mbzo6b3V0cHV0KAorICAgICAgICAgICAgICAgIDB1LCBQUk9GSUxFX1ZQOV8wLCBMRVZFTF9WUDlfNF8xKSkKKyAgICAgICAgLndpdGhGaWVsZHMoeworICAgICAgICAgICAgQzJGKG1Qcm9maWxlTGV2ZWwsIHByb2ZpbGUpLmVxdWFsVG8oCisgICAgICAgICAgICAgICAgUFJPRklMRV9WUDlfMAorICAgICAgICAgICAgKSwKKyAgICAgICAgICAgIEMyRihtUHJvZmlsZUxldmVsLCBsZXZlbCkuZXF1YWxUbygKKyAgICAgICAgICAgICAgICBMRVZFTF9WUDlfNF8xKSwKKyAgICAgICAgfSkKKyAgICAgICAgLndpdGhTZXR0ZXIoUHJvZmlsZUxldmVsU2V0dGVyKQorICAgICAgICAuYnVpbGQoKSk7CisKKyAgICAgICAgYWRkUGFyYW1ldGVyKAorICAgICAgICAgICAgICAgIERlZmluZVBhcmFtKG1SZXF1ZXN0U3luYywgQzJfUEFSQU1LRVlfUkVRVUVTVF9TWU5DX0ZSQU1FKQorICAgICAgICAgICAgICAgIC53aXRoRGVmYXVsdChuZXcgQzJTdHJlYW1SZXF1ZXN0U3luY0ZyYW1lVHVuaW5nOjpvdXRwdXQoMHUsIEMyX0ZBTFNFKSkKKyAgICAgICAgICAgICAgICAud2l0aEZpZWxkcyh7QzJGKG1SZXF1ZXN0U3luYywgdmFsdWUpLm9uZU9mKHsgQzJfRkFMU0UsIEMyX1RSVUUgfSkgfSkKKyAgICAgICAgICAgICAgICAud2l0aFNldHRlcihTZXR0ZXI8ZGVjbHR5cGUoKm1SZXF1ZXN0U3luYyk+OjpOb25TdHJpY3RWYWx1ZVdpdGhOb0RlcHMpCisgICAgICAgICAgICAgICAgLmJ1aWxkKCkpOworICAgIH0KKworICAgIHN0YXRpYyBDMlIgQml0cmF0ZVNldHRlcihib29sIG1heUJsb2NrLCBDMlA8QzJTdHJlYW1CaXRyYXRlSW5mbzo6b3V0cHV0PiAmbWUpIHsKKyAgICAgICAgKHZvaWQpbWF5QmxvY2s7CisgICAgICAgIEMyUiByZXMgPSBDMlI6Ok9rKCk7CisgICAgICAgIGlmIChtZS52LnZhbHVlIDw9IDQwOTYpIHsKKyAgICAgICAgICAgIG1lLnNldCgpLnZhbHVlID0gNDA5NjsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gcmVzOworICAgIH0KKworICAgIHN0YXRpYyBDMlIgU2l6ZVNldHRlcihib29sIG1heUJsb2NrLCBjb25zdCBDMlA8QzJTdHJlYW1QaWN0dXJlU2l6ZUluZm86OmlucHV0PiAmb2xkTWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgIEMyUDxDMlN0cmVhbVBpY3R1cmVTaXplSW5mbzo6aW5wdXQ+ICZtZSkgeworICAgICAgICAodm9pZCltYXlCbG9jazsKKyAgICAgICAgQzJSIHJlcyA9IEMyUjo6T2soKTsKKyAgICAgICAgaWYgKCFtZS5GKG1lLnYud2lkdGgpLnN1cHBvcnRzQXRBbGwobWUudi53aWR0aCkpIHsKKyAgICAgICAgICAgIHJlcyA9IHJlcy5wbHVzKEMyU2V0dGluZ1Jlc3VsdEJ1aWxkZXI6OkJhZFZhbHVlKG1lLkYobWUudi53aWR0aCkpKTsKKyAgICAgICAgICAgIG1lLnNldCgpLndpZHRoID0gb2xkTWUudi53aWR0aDsKKyAgICAgICAgfQorICAgICAgICBpZiAoIW1lLkYobWUudi5oZWlnaHQpLnN1cHBvcnRzQXRBbGwobWUudi5oZWlnaHQpKSB7CisgICAgICAgICAgICByZXMgPSByZXMucGx1cyhDMlNldHRpbmdSZXN1bHRCdWlsZGVyOjpCYWRWYWx1ZShtZS5GKG1lLnYuaGVpZ2h0KSkpOworICAgICAgICAgICAgbWUuc2V0KCkuaGVpZ2h0ID0gb2xkTWUudi5oZWlnaHQ7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHJlczsKKyAgICB9CisKKyAgICBzdGF0aWMgQzJSIFByb2ZpbGVMZXZlbFNldHRlcigKKyAgICAgICAgICAgIGJvb2wgbWF5QmxvY2ssCisgICAgICAgICAgICBDMlA8QzJTdHJlYW1Qcm9maWxlTGV2ZWxJbmZvOjpvdXRwdXQ+ICZtZSkgeworICAgICAgICAodm9pZCltYXlCbG9jazsKKyAgICAgICAgaWYgKCFtZS5GKG1lLnYucHJvZmlsZSkuc3VwcG9ydHNBdEFsbChtZS52LnByb2ZpbGUpKSB7CisgICAgICAgICAgICBtZS5zZXQoKS5wcm9maWxlID0gUFJPRklMRV9WUDlfMDsKKyAgICAgICAgfQorICAgICAgICBpZiAoIW1lLkYobWUudi5sZXZlbCkuc3VwcG9ydHNBdEFsbChtZS52LmxldmVsKSkgeworICAgICAgICAgICAgbWUuc2V0KCkubGV2ZWwgPSBMRVZFTF9WUDlfNF8xOworICAgICAgICB9CisgICAgICAgIHJldHVybiBDMlI6Ok9rKCk7CisgICAgfQorCisgICAgc3RhdGljIEMyUiBMYXllcmluZ1NldHRlcihib29sIG1heUJsb2NrLCBDMlA8QzJTdHJlYW1UZW1wb3JhbExheWVyaW5nVHVuaW5nOjpvdXRwdXQ+JiBtZSkgeworICAgICAgICAodm9pZCltYXlCbG9jazsKKyAgICAgICAgQzJSIHJlcyA9IEMyUjo6T2soKTsKKyAgICAgICAgaWYgKG1lLnYubS5sYXllckNvdW50ID4gNCkgeworICAgICAgICAgICAgbWUuc2V0KCkubS5sYXllckNvdW50ID0gNDsKKyAgICAgICAgfQorICAgICAgICBtZS5zZXQoKS5tLmJMYXllckNvdW50ID0gMDsKKyAgICAgICAgLy8gZW5zdXJlIHJhdGlvcyBhcmUgbW9ub3RvbmljIGFuZCBjbGFtcGVkIGJldHdlZW4gMCBhbmQgMQorICAgICAgICBmb3IgKHNpemVfdCBpeCA9IDA7IGl4IDwgbWUudi5mbGV4Q291bnQoKTsgKytpeCkgeworICAgICAgICAgICAgbWUuc2V0KCkubS5iaXRyYXRlUmF0aW9zW2l4XSA9IGMyX2NsYW1wKAorICAgICAgICAgICAgICAgIGl4ID4gMCA/IG1lLnYubS5iaXRyYXRlUmF0aW9zW2l4IC0gMV0gOiAwLCBtZS52Lm0uYml0cmF0ZVJhdGlvc1tpeF0sIDEuKTsKKyAgICAgICAgfQorICAgICAgICBBTE9HSSgic2V0dGluZyB0ZW1wb3JhbCBsYXllcmluZyAldSArICV1IiwgbWUudi5tLmxheWVyQ291bnQsIG1lLnYubS5iTGF5ZXJDb3VudCk7CisgICAgICAgIHJldHVybiByZXM7CisgICAgfQorCisgICAgLy8gdW5zYWZlIGdldHRlcnMKKyAgICBzdGQ6OnNoYXJlZF9wdHI8QzJTdHJlYW1QaWN0dXJlU2l6ZUluZm86OmlucHV0PiBnZXRTaXplX2woKSBjb25zdCB7IHJldHVybiBtU2l6ZTsgfQorICAgIHN0ZDo6c2hhcmVkX3B0cjxDMlN0cmVhbUludHJhUmVmcmVzaFR1bmluZzo6b3V0cHV0PiBnZXRJbnRyYVJlZnJlc2hfbCgpIGNvbnN0IHsgcmV0dXJuIG1JbnRyYVJlZnJlc2g7IH0KKyAgICBzdGQ6OnNoYXJlZF9wdHI8QzJTdHJlYW1GcmFtZVJhdGVJbmZvOjpvdXRwdXQ+IGdldEZyYW1lUmF0ZV9sKCkgY29uc3QgeyByZXR1cm4gbUZyYW1lUmF0ZTsgfQorICAgIHN0ZDo6c2hhcmVkX3B0cjxDMlN0cmVhbUJpdHJhdGVJbmZvOjpvdXRwdXQ+IGdldEJpdHJhdGVfbCgpIGNvbnN0IHsgcmV0dXJuIG1CaXRyYXRlOyB9CisgICAgc3RkOjpzaGFyZWRfcHRyPEMyU3RyZWFtQml0cmF0ZU1vZGVUdW5pbmc6Om91dHB1dD4gZ2V0Qml0cmF0ZU1vZGVfbCgpIGNvbnN0IHsgcmV0dXJuIG1CaXRyYXRlTW9kZTsgfQorICAgIHN0ZDo6c2hhcmVkX3B0cjxDMlN0cmVhbVJlcXVlc3RTeW5jRnJhbWVUdW5pbmc6Om91dHB1dD4gZ2V0UmVxdWVzdFN5bmNfbCgpIGNvbnN0IHsgcmV0dXJuIG1SZXF1ZXN0U3luYzsgfQorICAgIHN0ZDo6c2hhcmVkX3B0cjxDMlN0cmVhbVRlbXBvcmFsTGF5ZXJpbmdUdW5pbmc6Om91dHB1dD4gZ2V0VGVtcG9yYWxMYXllcnNfbCgpIGNvbnN0IHsgcmV0dXJuIG1MYXllcmluZzsgfQorICAgIHVpbnQzMl90IGdldFN5bmNGcmFtZVBlcmlvZCgpIGNvbnN0IHsKKyAgICAgICAgaWYgKG1TeW5jRnJhbWVQZXJpb2QtPnZhbHVlIDwgMCB8fCBtU3luY0ZyYW1lUGVyaW9kLT52YWx1ZSA9PSBJTlQ2NF9NQVgpIHsKKyAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICB9CisgICAgICAgIGRvdWJsZSBwZXJpb2QgPSBtU3luY0ZyYW1lUGVyaW9kLT52YWx1ZSAvIDFlNiAqIG1GcmFtZVJhdGUtPnZhbHVlOworICAgICAgICByZXR1cm4gKHVpbnQzMl90KWMyX21heChjMl9taW4ocGVyaW9kICsgMC41LCBkb3VibGUoVUlOVDMyX01BWCkpLCAxLik7CisgICAgfQorCisgICBwcml2YXRlOgorICAgIHN0ZDo6c2hhcmVkX3B0cjxDMlN0cmVhbUZvcm1hdENvbmZpZzo6aW5wdXQ+IG1JbnB1dEZvcm1hdDsKKyAgICBzdGQ6OnNoYXJlZF9wdHI8QzJTdHJlYW1Gb3JtYXRDb25maWc6Om91dHB1dD4gbU91dHB1dEZvcm1hdDsKKyAgICBzdGQ6OnNoYXJlZF9wdHI8QzJQb3J0TWltZUNvbmZpZzo6aW5wdXQ+IG1JbnB1dE1lZGlhVHlwZTsKKyAgICBzdGQ6OnNoYXJlZF9wdHI8QzJQb3J0TWltZUNvbmZpZzo6b3V0cHV0PiBtT3V0cHV0TWVkaWFUeXBlOworICAgIHN0ZDo6c2hhcmVkX3B0cjxDMlN0cmVhbVVzYWdlVHVuaW5nOjppbnB1dD4gbVVzYWdlOworICAgIHN0ZDo6c2hhcmVkX3B0cjxDMlZpZGVvU2l6ZVN0cmVhbVR1bmluZzo6aW5wdXQ+IG1TaXplOworICAgIHN0ZDo6c2hhcmVkX3B0cjxDMlN0cmVhbUZyYW1lUmF0ZUluZm86Om91dHB1dD4gbUZyYW1lUmF0ZTsKKyAgICBzdGQ6OnNoYXJlZF9wdHI8QzJTdHJlYW1UZW1wb3JhbExheWVyaW5nVHVuaW5nOjpvdXRwdXQ+IG1MYXllcmluZzsKKyAgICBzdGQ6OnNoYXJlZF9wdHI8QzJTdHJlYW1JbnRyYVJlZnJlc2hUdW5pbmc6Om91dHB1dD4gbUludHJhUmVmcmVzaDsKKyAgICBzdGQ6OnNoYXJlZF9wdHI8QzJTdHJlYW1SZXF1ZXN0U3luY0ZyYW1lVHVuaW5nOjpvdXRwdXQ+IG1SZXF1ZXN0U3luYzsKKyAgICBzdGQ6OnNoYXJlZF9wdHI8QzJTdHJlYW1TeW5jRnJhbWVJbnRlcnZhbFR1bmluZzo6b3V0cHV0PiBtU3luY0ZyYW1lUGVyaW9kOworICAgIHN0ZDo6c2hhcmVkX3B0cjxDMkJpdHJhdGVUdW5pbmc6Om91dHB1dD4gbUJpdHJhdGU7CisgICAgc3RkOjpzaGFyZWRfcHRyPEMyU3RyZWFtQml0cmF0ZU1vZGVUdW5pbmc6Om91dHB1dD4gbUJpdHJhdGVNb2RlOworICAgIHN0ZDo6c2hhcmVkX3B0cjxDMlN0cmVhbVByb2ZpbGVMZXZlbEluZm86Om91dHB1dD4gbVByb2ZpbGVMZXZlbDsKK307CisKK30gIC8vIG5hbWVzcGFjZSBhbmRyb2lkCisKKyNlbmRpZiAgLy8gQU5EUk9JRF9DMl9TT0ZUX1ZQWF9FTkNfSF9fCmRpZmYgLS1naXQgYS9tZWRpYS9jb2RlYzIvY29tcG9uZW50cy92cHgvTU9EVUxFX0xJQ0VOU0VfQVBBQ0hFMiBiL21lZGlhL2NvZGVjMi9jb21wb25lbnRzL3ZweC9NT0RVTEVfTElDRU5TRV9BUEFDSEUyCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU2OWRlMjkKLS0tIC9kZXYvbnVsbAorKysgYi9tZWRpYS9jb2RlYzIvY29tcG9uZW50cy92cHgvTU9EVUxFX0xJQ0VOU0VfQVBBQ0hFMgpkaWZmIC0tZ2l0IGEvbWVkaWEvY29kZWMyL2NvbXBvbmVudHMvdnB4L05PVElDRSBiL21lZGlhL2NvZGVjMi9jb21wb25lbnRzL3ZweC9OT1RJQ0UKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmFlZDU4YQotLS0gL2Rldi9udWxsCisrKyBiL21lZGlhL2NvZGVjMi9jb21wb25lbnRzL3ZweC9OT1RJQ0UKQEAgLTAsMCArMSwxOTAgQEAKKworICAgQ29weXJpZ2h0IChjKSAyMDA1LTIwMTMsIFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKworICAgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgICB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisKKyAgIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAgIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgICBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAgIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAgIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorCisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFwYWNoZSBMaWNlbnNlCisgICAgICAgICAgICAgICAgICAgICAgICAgICBWZXJzaW9uIDIuMCwgSmFudWFyeSAyMDA0CisgICAgICAgICAgICAgICAgICAgICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvCisKKyAgIFRFUk1TIEFORCBDT05ESVRJT05TIEZPUiBVU0UsIFJFUFJPRFVDVElPTiwgQU5EIERJU1RSSUJVVElPTgorCisgICAxLiBEZWZpbml0aW9ucy4KKworICAgICAgIkxpY2Vuc2UiIHNoYWxsIG1lYW4gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIGZvciB1c2UsIHJlcHJvZHVjdGlvbiwKKyAgICAgIGFuZCBkaXN0cmlidXRpb24gYXMgZGVmaW5lZCBieSBTZWN0aW9ucyAxIHRocm91Z2ggOSBvZiB0aGlzIGRvY3VtZW50LgorCisgICAgICAiTGljZW5zb3IiIHNoYWxsIG1lYW4gdGhlIGNvcHlyaWdodCBvd25lciBvciBlbnRpdHkgYXV0aG9yaXplZCBieQorICAgICAgdGhlIGNvcHlyaWdodCBvd25lciB0aGF0IGlzIGdyYW50aW5nIHRoZSBMaWNlbnNlLgorCisgICAgICAiTGVnYWwgRW50aXR5IiBzaGFsbCBtZWFuIHRoZSB1bmlvbiBvZiB0aGUgYWN0aW5nIGVudGl0eSBhbmQgYWxsCisgICAgICBvdGhlciBlbnRpdGllcyB0aGF0IGNvbnRyb2wsIGFyZSBjb250cm9sbGVkIGJ5LCBvciBhcmUgdW5kZXIgY29tbW9uCisgICAgICBjb250cm9sIHdpdGggdGhhdCBlbnRpdHkuIEZvciB0aGUgcHVycG9zZXMgb2YgdGhpcyBkZWZpbml0aW9uLAorICAgICAgImNvbnRyb2wiIG1lYW5zIChpKSB0aGUgcG93ZXIsIGRpcmVjdCBvciBpbmRpcmVjdCwgdG8gY2F1c2UgdGhlCisgICAgICBkaXJlY3Rpb24gb3IgbWFuYWdlbWVudCBvZiBzdWNoIGVudGl0eSwgd2hldGhlciBieSBjb250cmFjdCBvcgorICAgICAgb3RoZXJ3aXNlLCBvciAoaWkpIG93bmVyc2hpcCBvZiBmaWZ0eSBwZXJjZW50ICg1MCUpIG9yIG1vcmUgb2YgdGhlCisgICAgICBvdXRzdGFuZGluZyBzaGFyZXMsIG9yIChpaWkpIGJlbmVmaWNpYWwgb3duZXJzaGlwIG9mIHN1Y2ggZW50aXR5LgorCisgICAgICAiWW91IiAob3IgIllvdXIiKSBzaGFsbCBtZWFuIGFuIGluZGl2aWR1YWwgb3IgTGVnYWwgRW50aXR5CisgICAgICBleGVyY2lzaW5nIHBlcm1pc3Npb25zIGdyYW50ZWQgYnkgdGhpcyBMaWNlbnNlLgorCisgICAgICAiU291cmNlIiBmb3JtIHNoYWxsIG1lYW4gdGhlIHByZWZlcnJlZCBmb3JtIGZvciBtYWtpbmcgbW9kaWZpY2F0aW9ucywKKyAgICAgIGluY2x1ZGluZyBidXQgbm90IGxpbWl0ZWQgdG8gc29mdHdhcmUgc291cmNlIGNvZGUsIGRvY3VtZW50YXRpb24KKyAgICAgIHNvdXJjZSwgYW5kIGNvbmZpZ3VyYXRpb24gZmlsZXMuCisKKyAgICAgICJPYmplY3QiIGZvcm0gc2hhbGwgbWVhbiBhbnkgZm9ybSByZXN1bHRpbmcgZnJvbSBtZWNoYW5pY2FsCisgICAgICB0cmFuc2Zvcm1hdGlvbiBvciB0cmFuc2xhdGlvbiBvZiBhIFNvdXJjZSBmb3JtLCBpbmNsdWRpbmcgYnV0CisgICAgICBub3QgbGltaXRlZCB0byBjb21waWxlZCBvYmplY3QgY29kZSwgZ2VuZXJhdGVkIGRvY3VtZW50YXRpb24sCisgICAgICBhbmQgY29udmVyc2lvbnMgdG8gb3RoZXIgbWVkaWEgdHlwZXMuCisKKyAgICAgICJXb3JrIiBzaGFsbCBtZWFuIHRoZSB3b3JrIG9mIGF1dGhvcnNoaXAsIHdoZXRoZXIgaW4gU291cmNlIG9yCisgICAgICBPYmplY3QgZm9ybSwgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIExpY2Vuc2UsIGFzIGluZGljYXRlZCBieSBhCisgICAgICBjb3B5cmlnaHQgbm90aWNlIHRoYXQgaXMgaW5jbHVkZWQgaW4gb3IgYXR0YWNoZWQgdG8gdGhlIHdvcmsKKyAgICAgIChhbiBleGFtcGxlIGlzIHByb3ZpZGVkIGluIHRoZSBBcHBlbmRpeCBiZWxvdykuCisKKyAgICAgICJEZXJpdmF0aXZlIFdvcmtzIiBzaGFsbCBtZWFuIGFueSB3b3JrLCB3aGV0aGVyIGluIFNvdXJjZSBvciBPYmplY3QKKyAgICAgIGZvcm0sIHRoYXQgaXMgYmFzZWQgb24gKG9yIGRlcml2ZWQgZnJvbSkgdGhlIFdvcmsgYW5kIGZvciB3aGljaCB0aGUKKyAgICAgIGVkaXRvcmlhbCByZXZpc2lvbnMsIGFubm90YXRpb25zLCBlbGFib3JhdGlvbnMsIG9yIG90aGVyIG1vZGlmaWNhdGlvbnMKKyAgICAgIHJlcHJlc2VudCwgYXMgYSB3aG9sZSwgYW4gb3JpZ2luYWwgd29yayBvZiBhdXRob3JzaGlwLiBGb3IgdGhlIHB1cnBvc2VzCisgICAgICBvZiB0aGlzIExpY2Vuc2UsIERlcml2YXRpdmUgV29ya3Mgc2hhbGwgbm90IGluY2x1ZGUgd29ya3MgdGhhdCByZW1haW4KKyAgICAgIHNlcGFyYWJsZSBmcm9tLCBvciBtZXJlbHkgbGluayAob3IgYmluZCBieSBuYW1lKSB0byB0aGUgaW50ZXJmYWNlcyBvZiwKKyAgICAgIHRoZSBXb3JrIGFuZCBEZXJpdmF0aXZlIFdvcmtzIHRoZXJlb2YuCisKKyAgICAgICJDb250cmlidXRpb24iIHNoYWxsIG1lYW4gYW55IHdvcmsgb2YgYXV0aG9yc2hpcCwgaW5jbHVkaW5nCisgICAgICB0aGUgb3JpZ2luYWwgdmVyc2lvbiBvZiB0aGUgV29yayBhbmQgYW55IG1vZGlmaWNhdGlvbnMgb3IgYWRkaXRpb25zCisgICAgICB0byB0aGF0IFdvcmsgb3IgRGVyaXZhdGl2ZSBXb3JrcyB0aGVyZW9mLCB0aGF0IGlzIGludGVudGlvbmFsbHkKKyAgICAgIHN1Ym1pdHRlZCB0byBMaWNlbnNvciBmb3IgaW5jbHVzaW9uIGluIHRoZSBXb3JrIGJ5IHRoZSBjb3B5cmlnaHQgb3duZXIKKyAgICAgIG9yIGJ5IGFuIGluZGl2aWR1YWwgb3IgTGVnYWwgRW50aXR5IGF1dGhvcml6ZWQgdG8gc3VibWl0IG9uIGJlaGFsZiBvZgorICAgICAgdGhlIGNvcHlyaWdodCBvd25lci4gRm9yIHRoZSBwdXJwb3NlcyBvZiB0aGlzIGRlZmluaXRpb24sICJzdWJtaXR0ZWQiCisgICAgICBtZWFucyBhbnkgZm9ybSBvZiBlbGVjdHJvbmljLCB2ZXJiYWwsIG9yIHdyaXR0ZW4gY29tbXVuaWNhdGlvbiBzZW50CisgICAgICB0byB0aGUgTGljZW5zb3Igb3IgaXRzIHJlcHJlc2VudGF0aXZlcywgaW5jbHVkaW5nIGJ1dCBub3QgbGltaXRlZCB0bworICAgICAgY29tbXVuaWNhdGlvbiBvbiBlbGVjdHJvbmljIG1haWxpbmcgbGlzdHMsIHNvdXJjZSBjb2RlIGNvbnRyb2wgc3lzdGVtcywKKyAgICAgIGFuZCBpc3N1ZSB0cmFja2luZyBzeXN0ZW1zIHRoYXQgYXJlIG1hbmFnZWQgYnksIG9yIG9uIGJlaGFsZiBvZiwgdGhlCisgICAgICBMaWNlbnNvciBmb3IgdGhlIHB1cnBvc2Ugb2YgZGlzY3Vzc2luZyBhbmQgaW1wcm92aW5nIHRoZSBXb3JrLCBidXQKKyAgICAgIGV4Y2x1ZGluZyBjb21tdW5pY2F0aW9uIHRoYXQgaXMgY29uc3BpY3VvdXNseSBtYXJrZWQgb3Igb3RoZXJ3aXNlCisgICAgICBkZXNpZ25hdGVkIGluIHdyaXRpbmcgYnkgdGhlIGNvcHlyaWdodCBvd25lciBhcyAiTm90IGEgQ29udHJpYnV0aW9uLiIKKworICAgICAgIkNvbnRyaWJ1dG9yIiBzaGFsbCBtZWFuIExpY2Vuc29yIGFuZCBhbnkgaW5kaXZpZHVhbCBvciBMZWdhbCBFbnRpdHkKKyAgICAgIG9uIGJlaGFsZiBvZiB3aG9tIGEgQ29udHJpYnV0aW9uIGhhcyBiZWVuIHJlY2VpdmVkIGJ5IExpY2Vuc29yIGFuZAorICAgICAgc3Vic2VxdWVudGx5IGluY29ycG9yYXRlZCB3aXRoaW4gdGhlIFdvcmsuCisKKyAgIDIuIEdyYW50IG9mIENvcHlyaWdodCBMaWNlbnNlLiBTdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZgorICAgICAgdGhpcyBMaWNlbnNlLCBlYWNoIENvbnRyaWJ1dG9yIGhlcmVieSBncmFudHMgdG8gWW91IGEgcGVycGV0dWFsLAorICAgICAgd29ybGR3aWRlLCBub24tZXhjbHVzaXZlLCBuby1jaGFyZ2UsIHJveWFsdHktZnJlZSwgaXJyZXZvY2FibGUKKyAgICAgIGNvcHlyaWdodCBsaWNlbnNlIHRvIHJlcHJvZHVjZSwgcHJlcGFyZSBEZXJpdmF0aXZlIFdvcmtzIG9mLAorICAgICAgcHVibGljbHkgZGlzcGxheSwgcHVibGljbHkgcGVyZm9ybSwgc3VibGljZW5zZSwgYW5kIGRpc3RyaWJ1dGUgdGhlCisgICAgICBXb3JrIGFuZCBzdWNoIERlcml2YXRpdmUgV29ya3MgaW4gU291cmNlIG9yIE9iamVjdCBmb3JtLgorCisgICAzLiBHcmFudCBvZiBQYXRlbnQgTGljZW5zZS4gU3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YKKyAgICAgIHRoaXMgTGljZW5zZSwgZWFjaCBDb250cmlidXRvciBoZXJlYnkgZ3JhbnRzIHRvIFlvdSBhIHBlcnBldHVhbCwKKyAgICAgIHdvcmxkd2lkZSwgbm9uLWV4Y2x1c2l2ZSwgbm8tY2hhcmdlLCByb3lhbHR5LWZyZWUsIGlycmV2b2NhYmxlCisgICAgICAoZXhjZXB0IGFzIHN0YXRlZCBpbiB0aGlzIHNlY3Rpb24pIHBhdGVudCBsaWNlbnNlIHRvIG1ha2UsIGhhdmUgbWFkZSwKKyAgICAgIHVzZSwgb2ZmZXIgdG8gc2VsbCwgc2VsbCwgaW1wb3J0LCBhbmQgb3RoZXJ3aXNlIHRyYW5zZmVyIHRoZSBXb3JrLAorICAgICAgd2hlcmUgc3VjaCBsaWNlbnNlIGFwcGxpZXMgb25seSB0byB0aG9zZSBwYXRlbnQgY2xhaW1zIGxpY2Vuc2FibGUKKyAgICAgIGJ5IHN1Y2ggQ29udHJpYnV0b3IgdGhhdCBhcmUgbmVjZXNzYXJpbHkgaW5mcmluZ2VkIGJ5IHRoZWlyCisgICAgICBDb250cmlidXRpb24ocykgYWxvbmUgb3IgYnkgY29tYmluYXRpb24gb2YgdGhlaXIgQ29udHJpYnV0aW9uKHMpCisgICAgICB3aXRoIHRoZSBXb3JrIHRvIHdoaWNoIHN1Y2ggQ29udHJpYnV0aW9uKHMpIHdhcyBzdWJtaXR0ZWQuIElmIFlvdQorICAgICAgaW5zdGl0dXRlIHBhdGVudCBsaXRpZ2F0aW9uIGFnYWluc3QgYW55IGVudGl0eSAoaW5jbHVkaW5nIGEKKyAgICAgIGNyb3NzLWNsYWltIG9yIGNvdW50ZXJjbGFpbSBpbiBhIGxhd3N1aXQpIGFsbGVnaW5nIHRoYXQgdGhlIFdvcmsKKyAgICAgIG9yIGEgQ29udHJpYnV0aW9uIGluY29ycG9yYXRlZCB3aXRoaW4gdGhlIFdvcmsgY29uc3RpdHV0ZXMgZGlyZWN0CisgICAgICBvciBjb250cmlidXRvcnkgcGF0ZW50IGluZnJpbmdlbWVudCwgdGhlbiBhbnkgcGF0ZW50IGxpY2Vuc2VzCisgICAgICBncmFudGVkIHRvIFlvdSB1bmRlciB0aGlzIExpY2Vuc2UgZm9yIHRoYXQgV29yayBzaGFsbCB0ZXJtaW5hdGUKKyAgICAgIGFzIG9mIHRoZSBkYXRlIHN1Y2ggbGl0aWdhdGlvbiBpcyBmaWxlZC4KKworICAgNC4gUmVkaXN0cmlidXRpb24uIFlvdSBtYXkgcmVwcm9kdWNlIGFuZCBkaXN0cmlidXRlIGNvcGllcyBvZiB0aGUKKyAgICAgIFdvcmsgb3IgRGVyaXZhdGl2ZSBXb3JrcyB0aGVyZW9mIGluIGFueSBtZWRpdW0sIHdpdGggb3Igd2l0aG91dAorICAgICAgbW9kaWZpY2F0aW9ucywgYW5kIGluIFNvdXJjZSBvciBPYmplY3QgZm9ybSwgcHJvdmlkZWQgdGhhdCBZb3UKKyAgICAgIG1lZXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgorCisgICAgICAoYSkgWW91IG11c3QgZ2l2ZSBhbnkgb3RoZXIgcmVjaXBpZW50cyBvZiB0aGUgV29yayBvcgorICAgICAgICAgIERlcml2YXRpdmUgV29ya3MgYSBjb3B5IG9mIHRoaXMgTGljZW5zZTsgYW5kCisKKyAgICAgIChiKSBZb3UgbXVzdCBjYXVzZSBhbnkgbW9kaWZpZWQgZmlsZXMgdG8gY2FycnkgcHJvbWluZW50IG5vdGljZXMKKyAgICAgICAgICBzdGF0aW5nIHRoYXQgWW91IGNoYW5nZWQgdGhlIGZpbGVzOyBhbmQKKworICAgICAgKGMpIFlvdSBtdXN0IHJldGFpbiwgaW4gdGhlIFNvdXJjZSBmb3JtIG9mIGFueSBEZXJpdmF0aXZlIFdvcmtzCisgICAgICAgICAgdGhhdCBZb3UgZGlzdHJpYnV0ZSwgYWxsIGNvcHlyaWdodCwgcGF0ZW50LCB0cmFkZW1hcmssIGFuZAorICAgICAgICAgIGF0dHJpYnV0aW9uIG5vdGljZXMgZnJvbSB0aGUgU291cmNlIGZvcm0gb2YgdGhlIFdvcmssCisgICAgICAgICAgZXhjbHVkaW5nIHRob3NlIG5vdGljZXMgdGhhdCBkbyBub3QgcGVydGFpbiB0byBhbnkgcGFydCBvZgorICAgICAgICAgIHRoZSBEZXJpdmF0aXZlIFdvcmtzOyBhbmQKKworICAgICAgKGQpIElmIHRoZSBXb3JrIGluY2x1ZGVzIGEgIk5PVElDRSIgdGV4dCBmaWxlIGFzIHBhcnQgb2YgaXRzCisgICAgICAgICAgZGlzdHJpYnV0aW9uLCB0aGVuIGFueSBEZXJpdmF0aXZlIFdvcmtzIHRoYXQgWW91IGRpc3RyaWJ1dGUgbXVzdAorICAgICAgICAgIGluY2x1ZGUgYSByZWFkYWJsZSBjb3B5IG9mIHRoZSBhdHRyaWJ1dGlvbiBub3RpY2VzIGNvbnRhaW5lZAorICAgICAgICAgIHdpdGhpbiBzdWNoIE5PVElDRSBmaWxlLCBleGNsdWRpbmcgdGhvc2Ugbm90aWNlcyB0aGF0IGRvIG5vdAorICAgICAgICAgIHBlcnRhaW4gdG8gYW55IHBhcnQgb2YgdGhlIERlcml2YXRpdmUgV29ya3MsIGluIGF0IGxlYXN0IG9uZQorICAgICAgICAgIG9mIHRoZSBmb2xsb3dpbmcgcGxhY2VzOiB3aXRoaW4gYSBOT1RJQ0UgdGV4dCBmaWxlIGRpc3RyaWJ1dGVkCisgICAgICAgICAgYXMgcGFydCBvZiB0aGUgRGVyaXZhdGl2ZSBXb3Jrczsgd2l0aGluIHRoZSBTb3VyY2UgZm9ybSBvcgorICAgICAgICAgIGRvY3VtZW50YXRpb24sIGlmIHByb3ZpZGVkIGFsb25nIHdpdGggdGhlIERlcml2YXRpdmUgV29ya3M7IG9yLAorICAgICAgICAgIHdpdGhpbiBhIGRpc3BsYXkgZ2VuZXJhdGVkIGJ5IHRoZSBEZXJpdmF0aXZlIFdvcmtzLCBpZiBhbmQKKyAgICAgICAgICB3aGVyZXZlciBzdWNoIHRoaXJkLXBhcnR5IG5vdGljZXMgbm9ybWFsbHkgYXBwZWFyLiBUaGUgY29udGVudHMKKyAgICAgICAgICBvZiB0aGUgTk9USUNFIGZpbGUgYXJlIGZvciBpbmZvcm1hdGlvbmFsIHB1cnBvc2VzIG9ubHkgYW5kCisgICAgICAgICAgZG8gbm90IG1vZGlmeSB0aGUgTGljZW5zZS4gWW91IG1heSBhZGQgWW91ciBvd24gYXR0cmlidXRpb24KKyAgICAgICAgICBub3RpY2VzIHdpdGhpbiBEZXJpdmF0aXZlIFdvcmtzIHRoYXQgWW91IGRpc3RyaWJ1dGUsIGFsb25nc2lkZQorICAgICAgICAgIG9yIGFzIGFuIGFkZGVuZHVtIHRvIHRoZSBOT1RJQ0UgdGV4dCBmcm9tIHRoZSBXb3JrLCBwcm92aWRlZAorICAgICAgICAgIHRoYXQgc3VjaCBhZGRpdGlvbmFsIGF0dHJpYnV0aW9uIG5vdGljZXMgY2Fubm90IGJlIGNvbnN0cnVlZAorICAgICAgICAgIGFzIG1vZGlmeWluZyB0aGUgTGljZW5zZS4KKworICAgICAgWW91IG1heSBhZGQgWW91ciBvd24gY29weXJpZ2h0IHN0YXRlbWVudCB0byBZb3VyIG1vZGlmaWNhdGlvbnMgYW5kCisgICAgICBtYXkgcHJvdmlkZSBhZGRpdGlvbmFsIG9yIGRpZmZlcmVudCBsaWNlbnNlIHRlcm1zIGFuZCBjb25kaXRpb25zCisgICAgICBmb3IgdXNlLCByZXByb2R1Y3Rpb24sIG9yIGRpc3RyaWJ1dGlvbiBvZiBZb3VyIG1vZGlmaWNhdGlvbnMsIG9yCisgICAgICBmb3IgYW55IHN1Y2ggRGVyaXZhdGl2ZSBXb3JrcyBhcyBhIHdob2xlLCBwcm92aWRlZCBZb3VyIHVzZSwKKyAgICAgIHJlcHJvZHVjdGlvbiwgYW5kIGRpc3RyaWJ1dGlvbiBvZiB0aGUgV29yayBvdGhlcndpc2UgY29tcGxpZXMgd2l0aAorICAgICAgdGhlIGNvbmRpdGlvbnMgc3RhdGVkIGluIHRoaXMgTGljZW5zZS4KKworICAgNS4gU3VibWlzc2lvbiBvZiBDb250cmlidXRpb25zLiBVbmxlc3MgWW91IGV4cGxpY2l0bHkgc3RhdGUgb3RoZXJ3aXNlLAorICAgICAgYW55IENvbnRyaWJ1dGlvbiBpbnRlbnRpb25hbGx5IHN1Ym1pdHRlZCBmb3IgaW5jbHVzaW9uIGluIHRoZSBXb3JrCisgICAgICBieSBZb3UgdG8gdGhlIExpY2Vuc29yIHNoYWxsIGJlIHVuZGVyIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZgorICAgICAgdGhpcyBMaWNlbnNlLCB3aXRob3V0IGFueSBhZGRpdGlvbmFsIHRlcm1zIG9yIGNvbmRpdGlvbnMuCisgICAgICBOb3R3aXRoc3RhbmRpbmcgdGhlIGFib3ZlLCBub3RoaW5nIGhlcmVpbiBzaGFsbCBzdXBlcnNlZGUgb3IgbW9kaWZ5CisgICAgICB0aGUgdGVybXMgb2YgYW55IHNlcGFyYXRlIGxpY2Vuc2UgYWdyZWVtZW50IHlvdSBtYXkgaGF2ZSBleGVjdXRlZAorICAgICAgd2l0aCBMaWNlbnNvciByZWdhcmRpbmcgc3VjaCBDb250cmlidXRpb25zLgorCisgICA2LiBUcmFkZW1hcmtzLiBUaGlzIExpY2Vuc2UgZG9lcyBub3QgZ3JhbnQgcGVybWlzc2lvbiB0byB1c2UgdGhlIHRyYWRlCisgICAgICBuYW1lcywgdHJhZGVtYXJrcywgc2VydmljZSBtYXJrcywgb3IgcHJvZHVjdCBuYW1lcyBvZiB0aGUgTGljZW5zb3IsCisgICAgICBleGNlcHQgYXMgcmVxdWlyZWQgZm9yIHJlYXNvbmFibGUgYW5kIGN1c3RvbWFyeSB1c2UgaW4gZGVzY3JpYmluZyB0aGUKKyAgICAgIG9yaWdpbiBvZiB0aGUgV29yayBhbmQgcmVwcm9kdWNpbmcgdGhlIGNvbnRlbnQgb2YgdGhlIE5PVElDRSBmaWxlLgorCisgICA3LiBEaXNjbGFpbWVyIG9mIFdhcnJhbnR5LiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IKKyAgICAgIGFncmVlZCB0byBpbiB3cml0aW5nLCBMaWNlbnNvciBwcm92aWRlcyB0aGUgV29yayAoYW5kIGVhY2gKKyAgICAgIENvbnRyaWJ1dG9yIHByb3ZpZGVzIGl0cyBDb250cmlidXRpb25zKSBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICAgICAgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yCisgICAgICBpbXBsaWVkLCBpbmNsdWRpbmcsIHdpdGhvdXQgbGltaXRhdGlvbiwgYW55IHdhcnJhbnRpZXMgb3IgY29uZGl0aW9ucworICAgICAgb2YgVElUTEUsIE5PTi1JTkZSSU5HRU1FTlQsIE1FUkNIQU5UQUJJTElUWSwgb3IgRklUTkVTUyBGT1IgQQorICAgICAgUEFSVElDVUxBUiBQVVJQT1NFLiBZb3UgYXJlIHNvbGVseSByZXNwb25zaWJsZSBmb3IgZGV0ZXJtaW5pbmcgdGhlCisgICAgICBhcHByb3ByaWF0ZW5lc3Mgb2YgdXNpbmcgb3IgcmVkaXN0cmlidXRpbmcgdGhlIFdvcmsgYW5kIGFzc3VtZSBhbnkKKyAgICAgIHJpc2tzIGFzc29jaWF0ZWQgd2l0aCBZb3VyIGV4ZXJjaXNlIG9mIHBlcm1pc3Npb25zIHVuZGVyIHRoaXMgTGljZW5zZS4KKworICAgOC4gTGltaXRhdGlvbiBvZiBMaWFiaWxpdHkuIEluIG5vIGV2ZW50IGFuZCB1bmRlciBubyBsZWdhbCB0aGVvcnksCisgICAgICB3aGV0aGVyIGluIHRvcnQgKGluY2x1ZGluZyBuZWdsaWdlbmNlKSwgY29udHJhY3QsIG9yIG90aGVyd2lzZSwKKyAgICAgIHVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyAoc3VjaCBhcyBkZWxpYmVyYXRlIGFuZCBncm9zc2x5CisgICAgICBuZWdsaWdlbnQgYWN0cykgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNoYWxsIGFueSBDb250cmlidXRvciBiZQorICAgICAgbGlhYmxlIHRvIFlvdSBmb3IgZGFtYWdlcywgaW5jbHVkaW5nIGFueSBkaXJlY3QsIGluZGlyZWN0LCBzcGVjaWFsLAorICAgICAgaW5jaWRlbnRhbCwgb3IgY29uc2VxdWVudGlhbCBkYW1hZ2VzIG9mIGFueSBjaGFyYWN0ZXIgYXJpc2luZyBhcyBhCisgICAgICByZXN1bHQgb2YgdGhpcyBMaWNlbnNlIG9yIG91dCBvZiB0aGUgdXNlIG9yIGluYWJpbGl0eSB0byB1c2UgdGhlCisgICAgICBXb3JrIChpbmNsdWRpbmcgYnV0IG5vdCBsaW1pdGVkIHRvIGRhbWFnZXMgZm9yIGxvc3Mgb2YgZ29vZHdpbGwsCisgICAgICB3b3JrIHN0b3BwYWdlLCBjb21wdXRlciBmYWlsdXJlIG9yIG1hbGZ1bmN0aW9uLCBvciBhbnkgYW5kIGFsbAorICAgICAgb3RoZXIgY29tbWVyY2lhbCBkYW1hZ2VzIG9yIGxvc3NlcyksIGV2ZW4gaWYgc3VjaCBDb250cmlidXRvcgorICAgICAgaGFzIGJlZW4gYWR2aXNlZCBvZiB0aGUgcG9zc2liaWxpdHkgb2Ygc3VjaCBkYW1hZ2VzLgorCisgICA5LiBBY2NlcHRpbmcgV2FycmFudHkgb3IgQWRkaXRpb25hbCBMaWFiaWxpdHkuIFdoaWxlIHJlZGlzdHJpYnV0aW5nCisgICAgICB0aGUgV29yayBvciBEZXJpdmF0aXZlIFdvcmtzIHRoZXJlb2YsIFlvdSBtYXkgY2hvb3NlIHRvIG9mZmVyLAorICAgICAgYW5kIGNoYXJnZSBhIGZlZSBmb3IsIGFjY2VwdGFuY2Ugb2Ygc3VwcG9ydCwgd2FycmFudHksIGluZGVtbml0eSwKKyAgICAgIG9yIG90aGVyIGxpYWJpbGl0eSBvYmxpZ2F0aW9ucyBhbmQvb3IgcmlnaHRzIGNvbnNpc3RlbnQgd2l0aCB0aGlzCisgICAgICBMaWNlbnNlLiBIb3dldmVyLCBpbiBhY2NlcHRpbmcgc3VjaCBvYmxpZ2F0aW9ucywgWW91IG1heSBhY3Qgb25seQorICAgICAgb24gWW91ciBvd24gYmVoYWxmIGFuZCBvbiBZb3VyIHNvbGUgcmVzcG9uc2liaWxpdHksIG5vdCBvbiBiZWhhbGYKKyAgICAgIG9mIGFueSBvdGhlciBDb250cmlidXRvciwgYW5kIG9ubHkgaWYgWW91IGFncmVlIHRvIGluZGVtbmlmeSwKKyAgICAgIGRlZmVuZCwgYW5kIGhvbGQgZWFjaCBDb250cmlidXRvciBoYXJtbGVzcyBmb3IgYW55IGxpYWJpbGl0eQorICAgICAgaW5jdXJyZWQgYnksIG9yIGNsYWltcyBhc3NlcnRlZCBhZ2FpbnN0LCBzdWNoIENvbnRyaWJ1dG9yIGJ5IHJlYXNvbgorICAgICAgb2YgeW91ciBhY2NlcHRpbmcgYW55IHN1Y2ggd2FycmFudHkgb3IgYWRkaXRpb25hbCBsaWFiaWxpdHkuCisKKyAgIEVORCBPRiBURVJNUyBBTkQgQ09ORElUSU9OUworCmRpZmYgLS1naXQgYS9tZWRpYS9jb2RlYzIvY29tcG9uZW50cy94YWFjL0FuZHJvaWQuYnAgYi9tZWRpYS9jb2RlYzIvY29tcG9uZW50cy94YWFjL0FuZHJvaWQuYnAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzc5NWNjMQotLS0gL2Rldi9udWxsCisrKyBiL21lZGlhL2NvZGVjMi9jb21wb25lbnRzL3hhYWMvQW5kcm9pZC5icApAQCAtMCwwICsxLDExIEBACitjY19saWJyYXJ5X3NoYXJlZCB7CisgICAgbmFtZTogImxpYmNvZGVjMl9zb2Z0X3hhYWNkZWMiLAorICAgIGRlZmF1bHRzOiBbCisgICAgICAgICJsaWJjb2RlYzJfc29mdC1kZWZhdWx0cyIsCisgICAgICAgICJsaWJjb2RlYzJfc29mdF9zYW5pdGl6ZV9hbGwtZGVmYXVsdHMiLAorICAgIF0sCisKKyAgICBzcmNzOiBbIkMyU29mdFhhYWNEZWMuY3BwIl0sCisKKyAgICBzdGF0aWNfbGliczogWyJsaWJ4YWFjZGVjIl0sCit9CmRpZmYgLS1naXQgYS9tZWRpYS9jb2RlYzIvY29tcG9uZW50cy94YWFjL0MyU29mdFhhYWNEZWMuY3BwIGIvbWVkaWEvY29kZWMyL2NvbXBvbmVudHMveGFhYy9DMlNvZnRYYWFjRGVjLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xYzBlNzBiCi0tLSAvZGV2L251bGwKKysrIGIvbWVkaWEvY29kZWMyL2NvbXBvbmVudHMveGFhYy9DMlNvZnRYYWFjRGVjLmNwcApAQCAtMCwwICsxLDE1ODMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTggVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworCisvLyNkZWZpbmUgTE9HX05ERUJVRyAwCisjZGVmaW5lIExPR19UQUcgIkMyU29mdFhhYWNEZWMiCisjaW5jbHVkZSA8bG9nL2xvZy5oPgorCisjaW5jbHVkZSA8aW50dHlwZXMuaD4KKworI2luY2x1ZGUgPGN1dGlscy9wcm9wZXJ0aWVzLmg+CisjaW5jbHVkZSA8bWVkaWEvc3RhZ2VmcmlnaHQvZm91bmRhdGlvbi9BRGVidWcuaD4KKyNpbmNsdWRlIDxtZWRpYS9zdGFnZWZyaWdodC9mb3VuZGF0aW9uL01lZGlhRGVmcy5oPgorI2luY2x1ZGUgPG1lZGlhL3N0YWdlZnJpZ2h0L2ZvdW5kYXRpb24vaGV4ZHVtcC5oPgorCisjaW5jbHVkZSA8QzJQbGF0Zm9ybVN1cHBvcnQuaD4KKyNpbmNsdWRlIDxTaW1wbGVDMkludGVyZmFjZS5oPgorCisjaW5jbHVkZSAiQzJTb2Z0WGFhY0RlYy5oIgorCisjZGVmaW5lIERSQ19ERUZBVUxUX01PQklMRV9SRUZfTEVWRUwgLTE2LjAgICAvKiA2NCotMC4yNWRCID0gLTE2IGRCIGJlbG93IGZ1bGwgc2NhbGUgZm9yIG1vYmlsZSBjb25mICovCisjZGVmaW5lIERSQ19ERUZBVUxUX01PQklMRV9EUkNfQ1VUICAgMS4wICAvKiBtYXhpbXVtIGNvbXByZXNzaW9uIG9mIGR5bmFtaWMgcmFuZ2UgZm9yIG1vYmlsZSBjb25mICovCisjZGVmaW5lIERSQ19ERUZBVUxUX01PQklMRV9EUkNfQk9PU1QgMS4wIC8qIG1heGltdW0gY29tcHJlc3Npb24gb2YgZHluYW1pYyByYW5nZSBmb3IgbW9iaWxlIGNvbmYgKi8KKyNkZWZpbmUgRFJDX0RFRkFVTFRfTU9CSUxFX0RSQ19IRUFWWSBDMkNvbmZpZzo6RFJDX0NPTVBSRVNTSU9OX0hFQVZZICAgLyogc3dpdGNoIGZvciBoZWF2eSBjb21wcmVzc2lvbiBmb3IgbW9iaWxlIGNvbmYgKi8KKyNkZWZpbmUgRFJDX0RFRkFVTFRfTU9CSUxFX0RSQ19FRkZFQ1QgMyAgLyogTVBFRy1EIERSQyBlZmZlY3QgdHlwZTsgMyA9PiBMaW1pdGVkIHBsYXliYWNrIHJhbmdlICovCisjZGVmaW5lIERSQ19ERUZBVUxUX01PQklMRV9FTkNfTEVWRUwgKDAuMjUpIC8qIGVuY29kZXIgdGFyZ2V0IGxldmVsOyAtMSA9PiB0aGUgdmFsdWUgaXMgdW5rbm93biwgb3RoZXJ3aXNlIGRCIHN0ZXAgdmFsdWUgKGUuZy4gNjQgZm9yIC0xNiBkQikgKi8KKyNkZWZpbmUgTUFYX0NIQU5ORUxfQ09VTlQgICAgICAgICAgICA4ICAvKiBtYXhpbXVtIG51bWJlciBvZiBhdWRpbyBjaGFubmVscyB0aGF0IGNhbiBiZSBkZWNvZGVkICovCisvLyBuYW1lcyBvZiBwcm9wZXJ0aWVzIHRoYXQgY2FuIGJlIHVzZWQgdG8gb3ZlcnJpZGUgdGhlIGRlZmF1bHQgRFJDIHNldHRpbmdzCisjZGVmaW5lIFBST1BfRFJDX09WRVJSSURFX1JFRl9MRVZFTCAgImFhY19kcmNfcmVmZXJlbmNlX2xldmVsIgorI2RlZmluZSBQUk9QX0RSQ19PVkVSUklERV9DVVQgICAgICAgICJhYWNfZHJjX2N1dCIKKyNkZWZpbmUgUFJPUF9EUkNfT1ZFUlJJREVfQk9PU1QgICAgICAiYWFjX2RyY19ib29zdCIKKyNkZWZpbmUgUFJPUF9EUkNfT1ZFUlJJREVfSEVBVlkgICAgICAiYWFjX2RyY19oZWF2eSIKKyNkZWZpbmUgUFJPUF9EUkNfT1ZFUlJJREVfRU5DX0xFVkVMICAiYWFjX2RyY19lbmNfdGFyZ2V0X2xldmVsIgorI2RlZmluZSBQUk9QX0RSQ19PVkVSUklERV9FRkZFQ1RfVFlQRSAicm8uYWFjX2RyY19lZmZlY3RfdHlwZSIKKworI2RlZmluZSBSRVRVUk5fSUZfRkFUQUwocmV0dmFsLCBzdHIpICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgaWYgKHJldHZhbCAmIElBX0ZBVEFMX0VSUk9SKSB7ICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgQUxPR0UoIkVycm9yIGluICVzOiBSZXR1cm5lZDogJWQiLCBzdHIsIHJldHZhbCk7ICAgXAorICAgICAgICByZXR1cm4gcmV0dmFsOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgfSBlbHNlIGlmIChyZXR2YWwgIT0gSUFfTk9fRVJST1IpIHsgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgQUxPR1coIldhcm5pbmcgaW4gJXM6IFJldHVybmVkOiAlZCIsIHN0ciwgcmV0dmFsKTsgXAorICAgIH0KKworCituYW1lc3BhY2UgYW5kcm9pZCB7CisKK2NvbnN0ZXhwciBjaGFyIENPTVBPTkVOVF9OQU1FW10gPSAiYzIuYW5kcm9pZC54YWFjLmRlY29kZXIiOworCitjbGFzcyBDMlNvZnRYYWFjRGVjOjpJbnRmSW1wbCA6IHB1YmxpYyBDMkludGVyZmFjZUhlbHBlciB7CitwdWJsaWM6CisgICAgZXhwbGljaXQgSW50ZkltcGwoY29uc3Qgc3RkOjpzaGFyZWRfcHRyPEMyUmVmbGVjdG9ySGVscGVyPiAmaGVscGVyKQorICAgICAgICA6IEMySW50ZXJmYWNlSGVscGVyKGhlbHBlcikgeworCisgICAgICAgIHNldERlcml2ZWRJbnN0YW5jZSh0aGlzKTsKKworICAgICAgICBhZGRQYXJhbWV0ZXIoCisgICAgICAgICAgICAgICAgRGVmaW5lUGFyYW0obUlucHV0Rm9ybWF0LCBDMl9OQU1FX0lOUFVUX1NUUkVBTV9GT1JNQVRfU0VUVElORykKKyAgICAgICAgICAgICAgICAud2l0aENvbnN0VmFsdWUobmV3IEMyU3RyZWFtRm9ybWF0Q29uZmlnOjppbnB1dCgwdSwgQzJGb3JtYXRDb21wcmVzc2VkKSkKKyAgICAgICAgICAgICAgICAuYnVpbGQoKSk7CisKKyAgICAgICAgYWRkUGFyYW1ldGVyKAorICAgICAgICAgICAgICAgIERlZmluZVBhcmFtKG1PdXRwdXRGb3JtYXQsIEMyX05BTUVfT1VUUFVUX1NUUkVBTV9GT1JNQVRfU0VUVElORykKKyAgICAgICAgICAgICAgICAud2l0aENvbnN0VmFsdWUobmV3IEMyU3RyZWFtRm9ybWF0Q29uZmlnOjpvdXRwdXQoMHUsIEMyRm9ybWF0QXVkaW8pKQorICAgICAgICAgICAgICAgIC5idWlsZCgpKTsKKworICAgICAgICBhZGRQYXJhbWV0ZXIoCisgICAgICAgICAgICAgICAgRGVmaW5lUGFyYW0obUlucHV0TWVkaWFUeXBlLCBDMl9OQU1FX0lOUFVUX1BPUlRfTUlNRV9TRVRUSU5HKQorICAgICAgICAgICAgICAgIC53aXRoQ29uc3RWYWx1ZShBbGxvY1NoYXJlZFN0cmluZzxDMlBvcnRNaW1lQ29uZmlnOjppbnB1dD4oCisgICAgICAgICAgICAgICAgICAgICAgICBNRURJQV9NSU1FVFlQRV9BVURJT19BQUMpKQorICAgICAgICAgICAgICAgIC5idWlsZCgpKTsKKworICAgICAgICBhZGRQYXJhbWV0ZXIoCisgICAgICAgICAgICAgICAgRGVmaW5lUGFyYW0obU91dHB1dE1lZGlhVHlwZSwgQzJfTkFNRV9PVVRQVVRfUE9SVF9NSU1FX1NFVFRJTkcpCisgICAgICAgICAgICAgICAgLndpdGhDb25zdFZhbHVlKEFsbG9jU2hhcmVkU3RyaW5nPEMyUG9ydE1pbWVDb25maWc6Om91dHB1dD4oCisgICAgICAgICAgICAgICAgICAgICAgICBNRURJQV9NSU1FVFlQRV9BVURJT19SQVcpKQorICAgICAgICAgICAgICAgIC5idWlsZCgpKTsKKworICAgICAgICBhZGRQYXJhbWV0ZXIoCisgICAgICAgICAgICAgICAgRGVmaW5lUGFyYW0obVNhbXBsZVJhdGUsIEMyX05BTUVfU1RSRUFNX1NBTVBMRV9SQVRFX1NFVFRJTkcpCisgICAgICAgICAgICAgICAgLndpdGhEZWZhdWx0KG5ldyBDMlN0cmVhbVNhbXBsZVJhdGVJbmZvOjpvdXRwdXQoMHUsIDQ0MTAwKSkKKyAgICAgICAgICAgICAgICAud2l0aEZpZWxkcyh7QzJGKG1TYW1wbGVSYXRlLCB2YWx1ZSkub25lT2YoeworICAgICAgICAgICAgICAgICAgICA3MzUwLCA4MDAwLCAxMTAyNSwgMTIwMDAsIDE2MDAwLCAyMjA1MCwgMjQwMDAsIDMyMDAwLCA0NDEwMCwgNDgwMDAKKyAgICAgICAgICAgICAgICB9KX0pCisgICAgICAgICAgICAgICAgLndpdGhTZXR0ZXIoKFNldHRlcjxkZWNsdHlwZSgqbVNhbXBsZVJhdGUpPjo6U3RyaWN0VmFsdWVXaXRoTm9EZXBzKSkKKyAgICAgICAgICAgICAgICAuYnVpbGQoKSk7CisKKyAgICAgICAgYWRkUGFyYW1ldGVyKAorICAgICAgICAgICAgICAgIERlZmluZVBhcmFtKG1DaGFubmVsQ291bnQsIEMyX05BTUVfU1RSRUFNX0NIQU5ORUxfQ09VTlRfU0VUVElORykKKyAgICAgICAgICAgICAgICAud2l0aERlZmF1bHQobmV3IEMyU3RyZWFtQ2hhbm5lbENvdW50SW5mbzo6b3V0cHV0KDB1LCAxKSkKKyAgICAgICAgICAgICAgICAud2l0aEZpZWxkcyh7QzJGKG1DaGFubmVsQ291bnQsIHZhbHVlKS5pblJhbmdlKDEsIDgpfSkKKyAgICAgICAgICAgICAgICAud2l0aFNldHRlcihTZXR0ZXI8ZGVjbHR5cGUoKm1DaGFubmVsQ291bnQpPjo6U3RyaWN0VmFsdWVXaXRoTm9EZXBzKQorICAgICAgICAgICAgICAgIC5idWlsZCgpKTsKKworICAgICAgICBhZGRQYXJhbWV0ZXIoCisgICAgICAgICAgICAgICAgRGVmaW5lUGFyYW0obUJpdHJhdGUsIEMyX05BTUVfU1RSRUFNX0JJVFJBVEVfU0VUVElORykKKyAgICAgICAgICAgICAgICAud2l0aERlZmF1bHQobmV3IEMyQml0cmF0ZVR1bmluZzo6aW5wdXQoMHUsIDY0MDAwKSkKKyAgICAgICAgICAgICAgICAud2l0aEZpZWxkcyh7QzJGKG1CaXRyYXRlLCB2YWx1ZSkuaW5SYW5nZSg4MDAwLCA5NjAwMDApfSkKKyAgICAgICAgICAgICAgICAud2l0aFNldHRlcihTZXR0ZXI8ZGVjbHR5cGUoKm1CaXRyYXRlKT46Ok5vblN0cmljdFZhbHVlV2l0aE5vRGVwcykKKyAgICAgICAgICAgICAgICAuYnVpbGQoKSk7CisKKyAgICAgICAgYWRkUGFyYW1ldGVyKAorICAgICAgICAgICAgICAgIERlZmluZVBhcmFtKG1JbnB1dE1heEJ1ZlNpemUsIEMyX1BBUkFNS0VZX0lOUFVUX01BWF9CVUZGRVJfU0laRSkKKyAgICAgICAgICAgICAgICAud2l0aENvbnN0VmFsdWUobmV3IEMyU3RyZWFtTWF4QnVmZmVyU2l6ZUluZm86OmlucHV0KDB1LCA4MTkyKSkKKyAgICAgICAgICAgICAgICAuYnVpbGQoKSk7CisKKyAgICAgICAgYWRkUGFyYW1ldGVyKAorICAgICAgICAgICAgICAgIERlZmluZVBhcmFtKG1BYWNGb3JtYXQsIEMyX05BTUVfU1RSRUFNX0FBQ19GT1JNQVRfU0VUVElORykKKyAgICAgICAgICAgICAgICAud2l0aERlZmF1bHQobmV3IEMyU3RyZWFtQWFjRm9ybWF0SW5mbzo6aW5wdXQoMHUsIEMyQWFjU3RyZWFtRm9ybWF0UmF3KSkKKyAgICAgICAgICAgICAgICAud2l0aEZpZWxkcyh7QzJGKG1BYWNGb3JtYXQsIHZhbHVlKS5vbmVPZih7CisgICAgICAgICAgICAgICAgICAgIEMyQWFjU3RyZWFtRm9ybWF0UmF3LCBDMkFhY1N0cmVhbUZvcm1hdEFkdHMKKyAgICAgICAgICAgICAgICB9KX0pCisgICAgICAgICAgICAgICAgLndpdGhTZXR0ZXIoU2V0dGVyPGRlY2x0eXBlKCptQWFjRm9ybWF0KT46OlN0cmljdFZhbHVlV2l0aE5vRGVwcykKKyAgICAgICAgICAgICAgICAuYnVpbGQoKSk7CisKKyAgICAgICAgYWRkUGFyYW1ldGVyKAorICAgICAgICAgICAgICAgIERlZmluZVBhcmFtKG1Qcm9maWxlTGV2ZWwsIEMyX1BBUkFNS0VZX1BST0ZJTEVfTEVWRUwpCisgICAgICAgICAgICAgICAgLndpdGhEZWZhdWx0KG5ldyBDMlN0cmVhbVByb2ZpbGVMZXZlbEluZm86OmlucHV0KDB1LAorICAgICAgICAgICAgICAgICAgICAgICAgQzJDb25maWc6OlBST0ZJTEVfQUFDX0xDLCBDMkNvbmZpZzo6TEVWRUxfVU5VU0VEKSkKKyAgICAgICAgICAgICAgICAud2l0aEZpZWxkcyh7CisgICAgICAgICAgICAgICAgICAgIEMyRihtUHJvZmlsZUxldmVsLCBwcm9maWxlKS5vbmVPZih7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgQzJDb25maWc6OlBST0ZJTEVfQUFDX0xDLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIEMyQ29uZmlnOjpQUk9GSUxFX0FBQ19IRSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBDMkNvbmZpZzo6UFJPRklMRV9BQUNfSEVfUFMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgQzJDb25maWc6OlBST0ZJTEVfQUFDX0xELAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIEMyQ29uZmlnOjpQUk9GSUxFX0FBQ19FTEQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgQzJDb25maWc6OlBST0ZJTEVfQUFDX1hIRX0pLAorICAgICAgICAgICAgICAgICAgICBDMkYobVByb2ZpbGVMZXZlbCwgbGV2ZWwpLm9uZU9mKHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBDMkNvbmZpZzo6TEVWRUxfVU5VU0VECisgICAgICAgICAgICAgICAgICAgIH0pCisgICAgICAgICAgICAgICAgfSkKKyAgICAgICAgICAgICAgICAud2l0aFNldHRlcihQcm9maWxlTGV2ZWxTZXR0ZXIpCisgICAgICAgICAgICAgICAgLmJ1aWxkKCkpOworCisgICAgICAgIGFkZFBhcmFtZXRlcigKKyAgICAgICAgICAgICAgICBEZWZpbmVQYXJhbShtRHJjQ29tcHJlc3NNb2RlLCBDMl9QQVJBTUtFWV9EUkNfQ09NUFJFU1NJT05fTU9ERSkKKyAgICAgICAgICAgICAgICAud2l0aERlZmF1bHQobmV3IEMyU3RyZWFtRHJjQ29tcHJlc3Npb25Nb2RlVHVuaW5nOjppbnB1dCgwdSwgQzJDb25maWc6OkRSQ19DT01QUkVTU0lPTl9IRUFWWSkpCisgICAgICAgICAgICAgICAgLndpdGhGaWVsZHMoeworICAgICAgICAgICAgICAgICAgICBDMkYobURyY0NvbXByZXNzTW9kZSwgdmFsdWUpLm9uZU9mKHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBDMkNvbmZpZzo6RFJDX0NPTVBSRVNTSU9OX09ETV9ERUZBVUxULAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIEMyQ29uZmlnOjpEUkNfQ09NUFJFU1NJT05fTk9ORSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBDMkNvbmZpZzo6RFJDX0NPTVBSRVNTSU9OX0xJR0hULAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIEMyQ29uZmlnOjpEUkNfQ09NUFJFU1NJT05fSEVBVll9KQorICAgICAgICAgICAgICAgIH0pCisgICAgICAgICAgICAgICAgLndpdGhTZXR0ZXIoU2V0dGVyPGRlY2x0eXBlKCptRHJjQ29tcHJlc3NNb2RlKT46OlN0cmljdFZhbHVlV2l0aE5vRGVwcykKKyAgICAgICAgICAgICAgICAuYnVpbGQoKSk7CisKKyAgICAgICAgYWRkUGFyYW1ldGVyKAorICAgICAgICAgICAgICAgIERlZmluZVBhcmFtKG1EcmNUYXJnZXRSZWZMZXZlbCwgQzJfUEFSQU1LRVlfRFJDX1RBUkdFVF9SRUZFUkVOQ0VfTEVWRUwpCisgICAgICAgICAgICAgICAgLndpdGhEZWZhdWx0KG5ldyBDMlN0cmVhbURyY1RhcmdldFJlZmVyZW5jZUxldmVsVHVuaW5nOjppbnB1dCgwdSwgRFJDX0RFRkFVTFRfTU9CSUxFX1JFRl9MRVZFTCkpCisgICAgICAgICAgICAgICAgLndpdGhGaWVsZHMoe0MyRihtRHJjVGFyZ2V0UmVmTGV2ZWwsIHZhbHVlKS5pblJhbmdlKC0zMS43NSwgMC4yNSl9KQorICAgICAgICAgICAgICAgIC53aXRoU2V0dGVyKFNldHRlcjxkZWNsdHlwZSgqbURyY1RhcmdldFJlZkxldmVsKT46OlN0cmljdFZhbHVlV2l0aE5vRGVwcykKKyAgICAgICAgICAgICAgICAuYnVpbGQoKSk7CisKKyAgICAgICAgYWRkUGFyYW1ldGVyKAorICAgICAgICAgICAgICAgIERlZmluZVBhcmFtKG1EcmNFbmNUYXJnZXRMZXZlbCwgQzJfUEFSQU1LRVlfRFJDX0VOQ09ERURfVEFSR0VUX0xFVkVMKQorICAgICAgICAgICAgICAgIC53aXRoRGVmYXVsdChuZXcgQzJTdHJlYW1EcmNFbmNvZGVkVGFyZ2V0TGV2ZWxUdW5pbmc6OmlucHV0KDB1LCBEUkNfREVGQVVMVF9NT0JJTEVfRU5DX0xFVkVMKSkKKyAgICAgICAgICAgICAgICAud2l0aEZpZWxkcyh7QzJGKG1EcmNFbmNUYXJnZXRMZXZlbCwgdmFsdWUpLmluUmFuZ2UoLTMxLjc1LCAwLjI1KX0pCisgICAgICAgICAgICAgICAgLndpdGhTZXR0ZXIoU2V0dGVyPGRlY2x0eXBlKCptRHJjRW5jVGFyZ2V0TGV2ZWwpPjo6U3RyaWN0VmFsdWVXaXRoTm9EZXBzKQorICAgICAgICAgICAgICAgIC5idWlsZCgpKTsKKworICAgICAgICBhZGRQYXJhbWV0ZXIoCisgICAgICAgICAgICAgICAgRGVmaW5lUGFyYW0obURyY0Jvb3N0RmFjdG9yLCBDMl9QQVJBTUtFWV9EUkNfQk9PU1RfRkFDVE9SKQorICAgICAgICAgICAgICAgIC53aXRoRGVmYXVsdChuZXcgQzJTdHJlYW1EcmNCb29zdEZhY3RvclR1bmluZzo6aW5wdXQoMHUsIERSQ19ERUZBVUxUX01PQklMRV9EUkNfQk9PU1QpKQorICAgICAgICAgICAgICAgIC53aXRoRmllbGRzKHtDMkYobURyY0Jvb3N0RmFjdG9yLCB2YWx1ZSkuaW5SYW5nZSgwLCAxLil9KQorICAgICAgICAgICAgICAgIC53aXRoU2V0dGVyKFNldHRlcjxkZWNsdHlwZSgqbURyY0Jvb3N0RmFjdG9yKT46OlN0cmljdFZhbHVlV2l0aE5vRGVwcykKKyAgICAgICAgICAgICAgICAuYnVpbGQoKSk7CisKKyAgICAgICAgYWRkUGFyYW1ldGVyKAorICAgICAgICAgICAgICAgIERlZmluZVBhcmFtKG1EcmNBdHRlbnVhdGlvbkZhY3RvciwgQzJfUEFSQU1LRVlfRFJDX0FUVEVOVUFUSU9OX0ZBQ1RPUikKKyAgICAgICAgICAgICAgICAud2l0aERlZmF1bHQobmV3IEMyU3RyZWFtRHJjQXR0ZW51YXRpb25GYWN0b3JUdW5pbmc6OmlucHV0KDB1LCBEUkNfREVGQVVMVF9NT0JJTEVfRFJDX0NVVCkpCisgICAgICAgICAgICAgICAgLndpdGhGaWVsZHMoe0MyRihtRHJjQXR0ZW51YXRpb25GYWN0b3IsIHZhbHVlKS5pblJhbmdlKDAsIDEuKX0pCisgICAgICAgICAgICAgICAgLndpdGhTZXR0ZXIoU2V0dGVyPGRlY2x0eXBlKCptRHJjQXR0ZW51YXRpb25GYWN0b3IpPjo6U3RyaWN0VmFsdWVXaXRoTm9EZXBzKQorICAgICAgICAgICAgICAgIC5idWlsZCgpKTsKKworICAgICAgICBhZGRQYXJhbWV0ZXIoCisgICAgICAgICAgICAgICAgRGVmaW5lUGFyYW0obURyY0VmZmVjdFR5cGUsIEMyX1BBUkFNS0VZX0RSQ19FRkZFQ1RfVFlQRSkKKyAgICAgICAgICAgICAgICAud2l0aERlZmF1bHQobmV3IEMyU3RyZWFtRHJjRWZmZWN0VHlwZVR1bmluZzo6aW5wdXQoMHUsIEMyQ29uZmlnOjpEUkNfRUZGRUNUX0xJTUlURURfUExBWUJBQ0tfUkFOR0UpKQorICAgICAgICAgICAgICAgIC53aXRoRmllbGRzKHsKKyAgICAgICAgICAgICAgICAgICAgQzJGKG1EcmNFZmZlY3RUeXBlLCB2YWx1ZSkub25lT2YoeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIEMyQ29uZmlnOjpEUkNfRUZGRUNUX09ETV9ERUZBVUxULAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIEMyQ29uZmlnOjpEUkNfRUZGRUNUX09GRiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBDMkNvbmZpZzo6RFJDX0VGRkVDVF9OT05FLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIEMyQ29uZmlnOjpEUkNfRUZGRUNUX0xBVEVfTklHSFQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgQzJDb25maWc6OkRSQ19FRkZFQ1RfTk9JU1lfRU5WSVJPTk1FTlQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgQzJDb25maWc6OkRSQ19FRkZFQ1RfTElNSVRFRF9QTEFZQkFDS19SQU5HRSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBDMkNvbmZpZzo6RFJDX0VGRkVDVF9MT1dfUExBWUJBQ0tfTEVWRUwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgQzJDb25maWc6OkRSQ19FRkZFQ1RfRElBTE9HX0VOSEFOQ0VNRU5ULAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIEMyQ29uZmlnOjpEUkNfRUZGRUNUX0dFTkVSQUxfQ09NUFJFU1NJT059KQorICAgICAgICAgICAgICAgIH0pCisgICAgICAgICAgICAgICAgLndpdGhTZXR0ZXIoU2V0dGVyPGRlY2x0eXBlKCptRHJjRWZmZWN0VHlwZSk+OjpTdHJpY3RWYWx1ZVdpdGhOb0RlcHMpCisgICAgICAgICAgICAgICAgLmJ1aWxkKCkpOworICAgIH0KKworICAgIGJvb2wgaXNBZHRzKCkgY29uc3QgeyByZXR1cm4gbUFhY0Zvcm1hdC0+dmFsdWUgPT0gQzJBYWNTdHJlYW1Gb3JtYXRBZHRzOyB9CisgICAgdWludDMyX3QgZ2V0Qml0cmF0ZSgpIGNvbnN0IHsgcmV0dXJuIG1CaXRyYXRlLT52YWx1ZTsgfQorICAgIHN0YXRpYyBDMlIgUHJvZmlsZUxldmVsU2V0dGVyKGJvb2wgbWF5QmxvY2ssIEMyUDxDMlN0cmVhbVByb2ZpbGVMZXZlbEluZm86OmlucHV0PiAmbWUpIHsKKyAgICAgICAgKHZvaWQpbWF5QmxvY2s7CisgICAgICAgICh2b2lkKW1lOyAgLy8gVE9ETzogdmFsaWRhdGUKKyAgICAgICAgcmV0dXJuIEMyUjo6T2soKTsKKyAgICB9CisgICAgaW50MzJfdCBnZXREcmNDb21wcmVzc01vZGUoKSBjb25zdCB7IHJldHVybiBtRHJjQ29tcHJlc3NNb2RlLT52YWx1ZSA9PSBDMkNvbmZpZzo6RFJDX0NPTVBSRVNTSU9OX0hFQVZZID8gMSA6IDA7IH0KKyAgICBpbnQzMl90IGdldERyY1RhcmdldFJlZkxldmVsKCkgY29uc3QgeyByZXR1cm4gKG1EcmNUYXJnZXRSZWZMZXZlbC0+dmFsdWUgPD0gMCA/IC1tRHJjVGFyZ2V0UmVmTGV2ZWwtPnZhbHVlICogNC4gKyAwLjUgOiAtMSk7IH0KKyAgICBpbnQzMl90IGdldERyY0VuY1RhcmdldExldmVsKCkgY29uc3QgeyByZXR1cm4gKG1EcmNFbmNUYXJnZXRMZXZlbC0+dmFsdWUgPD0gMCA/IC1tRHJjRW5jVGFyZ2V0TGV2ZWwtPnZhbHVlICogNC4gKyAwLjUgOiAtMSk7IH0KKyAgICBpbnQzMl90IGdldERyY0Jvb3N0RmFjdG9yKCkgY29uc3QgeyByZXR1cm4gbURyY0Jvb3N0RmFjdG9yLT52YWx1ZSAqIDEyNy4gKyAwLjU7IH0KKyAgICBpbnQzMl90IGdldERyY0F0dGVudWF0aW9uRmFjdG9yKCkgY29uc3QgeyByZXR1cm4gbURyY0F0dGVudWF0aW9uRmFjdG9yLT52YWx1ZSAqIDEyNy4gKyAwLjU7IH0KKyAgICBpbnQzMl90IGdldERyY0VmZmVjdFR5cGUoKSBjb25zdCB7IHJldHVybiBtRHJjRWZmZWN0VHlwZS0+dmFsdWU7IH0KKworcHJpdmF0ZToKKyAgICBzdGQ6OnNoYXJlZF9wdHI8QzJTdHJlYW1Gb3JtYXRDb25maWc6OmlucHV0PiBtSW5wdXRGb3JtYXQ7CisgICAgc3RkOjpzaGFyZWRfcHRyPEMyU3RyZWFtRm9ybWF0Q29uZmlnOjpvdXRwdXQ+IG1PdXRwdXRGb3JtYXQ7CisgICAgc3RkOjpzaGFyZWRfcHRyPEMyUG9ydE1pbWVDb25maWc6OmlucHV0PiBtSW5wdXRNZWRpYVR5cGU7CisgICAgc3RkOjpzaGFyZWRfcHRyPEMyUG9ydE1pbWVDb25maWc6Om91dHB1dD4gbU91dHB1dE1lZGlhVHlwZTsKKyAgICBzdGQ6OnNoYXJlZF9wdHI8QzJTdHJlYW1TYW1wbGVSYXRlSW5mbzo6b3V0cHV0PiBtU2FtcGxlUmF0ZTsKKyAgICBzdGQ6OnNoYXJlZF9wdHI8QzJTdHJlYW1DaGFubmVsQ291bnRJbmZvOjpvdXRwdXQ+IG1DaGFubmVsQ291bnQ7CisgICAgc3RkOjpzaGFyZWRfcHRyPEMyQml0cmF0ZVR1bmluZzo6aW5wdXQ+IG1CaXRyYXRlOworICAgIHN0ZDo6c2hhcmVkX3B0cjxDMlN0cmVhbU1heEJ1ZmZlclNpemVJbmZvOjppbnB1dD4gbUlucHV0TWF4QnVmU2l6ZTsKKyAgICBzdGQ6OnNoYXJlZF9wdHI8QzJTdHJlYW1BYWNGb3JtYXRJbmZvOjppbnB1dD4gbUFhY0Zvcm1hdDsKKyAgICBzdGQ6OnNoYXJlZF9wdHI8QzJTdHJlYW1Qcm9maWxlTGV2ZWxJbmZvOjppbnB1dD4gbVByb2ZpbGVMZXZlbDsKKyAgICBzdGQ6OnNoYXJlZF9wdHI8QzJTdHJlYW1EcmNDb21wcmVzc2lvbk1vZGVUdW5pbmc6OmlucHV0PiBtRHJjQ29tcHJlc3NNb2RlOworICAgIHN0ZDo6c2hhcmVkX3B0cjxDMlN0cmVhbURyY1RhcmdldFJlZmVyZW5jZUxldmVsVHVuaW5nOjppbnB1dD4gbURyY1RhcmdldFJlZkxldmVsOworICAgIHN0ZDo6c2hhcmVkX3B0cjxDMlN0cmVhbURyY0VuY29kZWRUYXJnZXRMZXZlbFR1bmluZzo6aW5wdXQ+IG1EcmNFbmNUYXJnZXRMZXZlbDsKKyAgICBzdGQ6OnNoYXJlZF9wdHI8QzJTdHJlYW1EcmNCb29zdEZhY3RvclR1bmluZzo6aW5wdXQ+IG1EcmNCb29zdEZhY3RvcjsKKyAgICBzdGQ6OnNoYXJlZF9wdHI8QzJTdHJlYW1EcmNBdHRlbnVhdGlvbkZhY3RvclR1bmluZzo6aW5wdXQ+IG1EcmNBdHRlbnVhdGlvbkZhY3RvcjsKKyAgICBzdGQ6OnNoYXJlZF9wdHI8QzJTdHJlYW1EcmNFZmZlY3RUeXBlVHVuaW5nOjppbnB1dD4gbURyY0VmZmVjdFR5cGU7CisgICAgLy8gVE9ETyBBZGQgOiBDMlN0cmVhbUFhY1Nick1vZGVUdW5pbmcKK307CisKK0MyU29mdFhhYWNEZWM6OkMyU29mdFhhYWNEZWMoCisgICAgICAgIGNvbnN0IGNoYXIqIG5hbWUsCisgICAgICAgIGMyX25vZGVfaWRfdCBpZCwKKyAgICAgICAgY29uc3Qgc3RkOjpzaGFyZWRfcHRyPEludGZJbXBsPiAmaW50ZkltcGwpCisgICAgOiBTaW1wbGVDMkNvbXBvbmVudChzdGQ6Om1ha2Vfc2hhcmVkPFNpbXBsZUludGVyZmFjZTxJbnRmSW1wbD4+KG5hbWUsIGlkLCBpbnRmSW1wbCkpLAorICAgICAgICBtSW50ZihpbnRmSW1wbCksCisgICAgICAgIG1YaGVhYWNDb2RlY0hhbmRsZShudWxscHRyKSwKKyAgICAgICAgbU1wZWdERHJjSGFuZGxlKG51bGxwdHIpLAorICAgICAgICBtT3V0cHV0RHJhaW5CdWZmZXIobnVsbHB0cikgeworfQorCitDMlNvZnRYYWFjRGVjOjp+QzJTb2Z0WGFhY0RlYygpIHsKKyAgICBvblJlbGVhc2UoKTsKK30KKworYzJfc3RhdHVzX3QgQzJTb2Z0WGFhY0RlYzo6b25Jbml0KCkgeworICAgIG1PdXRwdXRGcmFtZUxlbmd0aCA9IDEwMjQ7CisgICAgbUlucHV0QnVmZmVyID0gbnVsbHB0cjsKKyAgICBtT3V0cHV0QnVmZmVyID0gbnVsbHB0cjsKKyAgICBtU2FtcEZyZXEgPSAwOworICAgIG1OdW1DaGFubmVscyA9IDA7CisgICAgbVBjbVdkU3ogPSAwOworICAgIG1DaGFubmVsTWFzayA9IDA7CisgICAgbU51bU91dEJ5dGVzID0gMDsKKyAgICBtQ3VyRnJhbWVJbmRleCA9IDA7CisgICAgbUN1clRpbWVzdGFtcCA9IDA7CisgICAgbUlzQ29kZWNJbml0aWFsaXplZCA9IGZhbHNlOworICAgIG1Jc0NvZGVjQ29uZmlnRmx1c2hSZXF1aXJlZCA9IGZhbHNlOworICAgIG1TaWduYWxsZWRPdXRwdXRFb3MgPSBmYWxzZTsKKyAgICBtU2lnbmFsbGVkRXJyb3IgPSBmYWxzZTsKKyAgICBtT3V0cHV0RHJhaW5CdWZmZXJXcml0ZVBvcyA9IDA7CisgICAgbURSQ0ZsYWcgPSAwOworICAgIG1NcGVnRERSQ1ByZXNlbnQgPSAwOworICAgIG1NZW1vcnlWZWMuY2xlYXIoKTsKKyAgICBtRHJjTWVtb3J5VmVjLmNsZWFyKCk7CisKKyAgICBJQV9FUlJPUkNPREUgZXJyID0gaW5pdERlY29kZXIoKTsKKyAgICByZXR1cm4gZXJyID09IElBX05PX0VSUk9SID8gQzJfT0sgOiBDMl9DT1JSVVBURUQ7CisKK30KKworYzJfc3RhdHVzX3QgQzJTb2Z0WGFhY0RlYzo6b25TdG9wKCkgeworICAgIG1PdXRwdXRGcmFtZUxlbmd0aCA9IDEwMjQ7CisgICAgZHJhaW5EZWNvZGVyKCk7CisgICAgLy8gcmVzZXQgdGhlICJjb25maWd1cmVkIiBzdGF0ZQorICAgIG1TYW1wRnJlcSA9IDA7CisgICAgbU51bUNoYW5uZWxzID0gMDsKKyAgICBtUGNtV2RTeiA9IDA7CisgICAgbUNoYW5uZWxNYXNrID0gMDsKKyAgICBtTnVtT3V0Qnl0ZXMgPSAwOworICAgIG1DdXJGcmFtZUluZGV4ID0gMDsKKyAgICBtQ3VyVGltZXN0YW1wID0gMDsKKyAgICBtU2lnbmFsbGVkT3V0cHV0RW9zID0gZmFsc2U7CisgICAgbVNpZ25hbGxlZEVycm9yID0gZmFsc2U7CisgICAgbU91dHB1dERyYWluQnVmZmVyV3JpdGVQb3MgPSAwOworICAgIG1EUkNGbGFnID0gMDsKKyAgICBtTXBlZ0REUkNQcmVzZW50ID0gMDsKKworICAgIHJldHVybiBDMl9PSzsKK30KKwordm9pZCBDMlNvZnRYYWFjRGVjOjpvblJlc2V0KCkgeworICAgICh2b2lkKW9uU3RvcCgpOworfQorCit2b2lkIEMyU29mdFhhYWNEZWM6Om9uUmVsZWFzZSgpIHsKKyAgICBJQV9FUlJPUkNPREUgZXJyQ29kZSA9IGRlSW5pdFhBQUNEZWNvZGVyKCk7CisgICAgaWYgKElBX05PX0VSUk9SICE9IGVyckNvZGUpIEFMT0dFKCJkZUluaXRYQUFDRGVjb2RlcigpIGZhaWxlZCAlZCIsIGVyckNvZGUpOworCisgICAgZXJyQ29kZSA9IGRlSW5pdE1QRUdERERyYygpOworICAgIGlmIChJQV9OT19FUlJPUiAhPSBlcnJDb2RlKSBBTE9HRSgiZGVJbml0TVBFR0RERHJjKCkgZmFpbGVkICVkIiwgZXJyQ29kZSk7CisKKyAgICBpZiAobU91dHB1dERyYWluQnVmZmVyKSB7CisgICAgICAgIGRlbGV0ZVtdIG1PdXRwdXREcmFpbkJ1ZmZlcjsKKyAgICAgICAgbU91dHB1dERyYWluQnVmZmVyID0gbnVsbHB0cjsKKyAgICB9Cit9CisKK0lBX0VSUk9SQ09ERSBDMlNvZnRYYWFjRGVjOjppbml0RGVjb2RlcigpIHsKKyAgICBBTE9HVigiaW5pdERlY29kZXIoKSIpOworICAgIElBX0VSUk9SQ09ERSBlcnJfY29kZSA9IElBX05PX0VSUk9SOworCisgICAgZXJyX2NvZGUgPSBpbml0WEFBQ0RlY29kZXIoKTsKKyAgICBpZiAoZXJyX2NvZGUgIT0gSUFfTk9fRVJST1IpIHsKKyAgICAgICAgQUxPR0UoImluaXRYQUFDRGVjb2RlciBGYWlsZWQiKTsKKyAgICAgICAgLyogQ2FsbCBkZUluaXQgdG8gZnJlZSBhbnkgYWxsb2NhdGVkIG1lbW9yeSAqLworICAgICAgICBkZUluaXRYQUFDRGVjb2RlcigpOworICAgICAgICByZXR1cm4gSUFfRkFUQUxfRVJST1I7CisgICAgfQorCisgICAgaWYgKCFtT3V0cHV0RHJhaW5CdWZmZXIpIHsKKyAgICAgICAgbU91dHB1dERyYWluQnVmZmVyID0gbmV3IChzdGQ6Om5vdGhyb3cpIGNoYXJba091dHB1dERyYWluQnVmZmVyU2l6ZV07CisgICAgICAgIGlmICghbU91dHB1dERyYWluQnVmZmVyKSByZXR1cm4gSUFfRkFUQUxfRVJST1I7CisgICAgfQorCisgICAgZXJyX2NvZGUgPSBpbml0WEFBQ0RyYygpOworICAgIFJFVFVSTl9JRl9GQVRBTChlcnJfY29kZSwgICJpbml0WEFBQ0RyYyIpOworCisKKyAgICByZXR1cm4gSUFfTk9fRVJST1I7Cit9CisKK3N0YXRpYyB2b2lkIGZpbGxFbXB0eVdvcmsoY29uc3Qgc3RkOjp1bmlxdWVfcHRyPEMyV29yaz4mIHdvcmspIHsKKyAgICB1aW50MzJfdCBmbGFncyA9IDA7CisgICAgaWYgKHdvcmstPmlucHV0LmZsYWdzICYgQzJGcmFtZURhdGE6OkZMQUdfRU5EX09GX1NUUkVBTSkgeworICAgICAgICBmbGFncyB8PSBDMkZyYW1lRGF0YTo6RkxBR19FTkRfT0ZfU1RSRUFNOworICAgICAgICBBTE9HVigic2lnbmFsbGluZyBlb3MiKTsKKyAgICB9CisgICAgd29yay0+d29ya2xldHMuZnJvbnQoKS0+b3V0cHV0LmZsYWdzID0gKEMyRnJhbWVEYXRhOjpmbGFnc190KWZsYWdzOworICAgIHdvcmstPndvcmtsZXRzLmZyb250KCktPm91dHB1dC5idWZmZXJzLmNsZWFyKCk7CisgICAgd29yay0+d29ya2xldHMuZnJvbnQoKS0+b3V0cHV0Lm9yZGluYWwgPSB3b3JrLT5pbnB1dC5vcmRpbmFsOworICAgIHdvcmstPndvcmtsZXRzUHJvY2Vzc2VkID0gMXU7Cit9CisKK3ZvaWQgQzJTb2Z0WGFhY0RlYzo6ZmluaXNoV29yayhjb25zdCBzdGQ6OnVuaXF1ZV9wdHI8QzJXb3JrPiYgd29yaywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdGQ6OnNoYXJlZF9wdHI8QzJCbG9ja1Bvb2w+JiBwb29sKSB7CisgICAgQUxPR1YoIm1DdXJGcmFtZUluZGV4ID0gJSIgUFJJdTY0LCBtQ3VyRnJhbWVJbmRleCk7CisKKyAgICBzdGQ6OnNoYXJlZF9wdHI8QzJMaW5lYXJCbG9jaz4gYmxvY2s7CisgICAgQzJNZW1vcnlVc2FnZSB1c2FnZSA9IHtDMk1lbW9yeVVzYWdlOjpDUFVfUkVBRCwgQzJNZW1vcnlVc2FnZTo6Q1BVX1dSSVRFfTsKKyAgICAvLyBUT0RPOiBlcnJvciBoYW5kbGluZywgcHJvcGVyIHVzYWdlLCBldGMuCisgICAgYzJfc3RhdHVzX3QgZXJyID0KKyAgICAgICAgcG9vbC0+ZmV0Y2hMaW5lYXJCbG9jayhtT3V0cHV0RHJhaW5CdWZmZXJXcml0ZVBvcywgdXNhZ2UsICZibG9jayk7CisgICAgaWYgKGVyciAhPSBDMl9PSykgeworICAgICAgICBBTE9HRSgiZmV0Y2hMaW5lYXJCbG9jayBmYWlsZWQgOiBlcnIgPSAlZCIsIGVycik7CisgICAgICAgIHdvcmstPnJlc3VsdCA9IEMyX05PX01FTU9SWTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBDMldyaXRlVmlldyB3VmlldyA9IGJsb2NrLT5tYXAoKS5nZXQoKTsKKyAgICBpbnQxNl90KiBvdXRCdWZmZXIgPSByZWludGVycHJldF9jYXN0PGludDE2X3QqPih3Vmlldy5kYXRhKCkpOworICAgIG1lbWNweShvdXRCdWZmZXIsIG1PdXRwdXREcmFpbkJ1ZmZlciwgbU91dHB1dERyYWluQnVmZmVyV3JpdGVQb3MpOworICAgIG1PdXRwdXREcmFpbkJ1ZmZlcldyaXRlUG9zID0gMDsKKworICAgIGF1dG8gZmlsbFdvcmsgPSBbYnVmZmVyID0gY3JlYXRlTGluZWFyQnVmZmVyKGJsb2NrKV0oCisgICAgICAgIGNvbnN0IHN0ZDo6dW5pcXVlX3B0cjxDMldvcms+JiB3b3JrKSB7CisgICAgICAgIHVpbnQzMl90IGZsYWdzID0gMDsKKyAgICAgICAgaWYgKHdvcmstPmlucHV0LmZsYWdzICYgQzJGcmFtZURhdGE6OkZMQUdfRU5EX09GX1NUUkVBTSkgeworICAgICAgICAgICAgZmxhZ3MgfD0gQzJGcmFtZURhdGE6OkZMQUdfRU5EX09GX1NUUkVBTTsKKyAgICAgICAgICAgIEFMT0dWKCJzaWduYWxsaW5nIGVvcyIpOworICAgICAgICB9CisgICAgICAgIHdvcmstPndvcmtsZXRzLmZyb250KCktPm91dHB1dC5mbGFncyA9IChDMkZyYW1lRGF0YTo6ZmxhZ3NfdClmbGFnczsKKyAgICAgICAgd29yay0+d29ya2xldHMuZnJvbnQoKS0+b3V0cHV0LmJ1ZmZlcnMuY2xlYXIoKTsKKyAgICAgICAgd29yay0+d29ya2xldHMuZnJvbnQoKS0+b3V0cHV0LmJ1ZmZlcnMucHVzaF9iYWNrKGJ1ZmZlcik7CisgICAgICAgIHdvcmstPndvcmtsZXRzLmZyb250KCktPm91dHB1dC5vcmRpbmFsID0gd29yay0+aW5wdXQub3JkaW5hbDsKKyAgICAgICAgd29yay0+d29ya2xldHNQcm9jZXNzZWQgPSAxdTsKKyAgICB9OworICAgIGlmICh3b3JrICYmIHdvcmstPmlucHV0Lm9yZGluYWwuZnJhbWVJbmRleCA9PSBjMl9jbnRyNjRfdChtQ3VyRnJhbWVJbmRleCkpIHsKKyAgICAgICAgZmlsbFdvcmsod29yayk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgZmluaXNoKG1DdXJGcmFtZUluZGV4LCBmaWxsV29yayk7CisgICAgfQorCisgICAgQUxPR1YoIm91dCB0aW1lc3RhbXAgJSIgUFJJdTY0ICIgLyAldSIsIG1DdXJUaW1lc3RhbXAsIGJsb2NrLT5jYXBhY2l0eSgpKTsKK30KKwordm9pZCBDMlNvZnRYYWFjRGVjOjpwcm9jZXNzKGNvbnN0IHN0ZDo6dW5pcXVlX3B0cjxDMldvcms+JiB3b3JrLAorICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0ZDo6c2hhcmVkX3B0cjxDMkJsb2NrUG9vbD4mIHBvb2wpIHsKKyAgICAvLyBJbml0aWFsaXplIG91dHB1dCB3b3JrCisgICAgd29yay0+cmVzdWx0ID0gQzJfT0s7CisgICAgd29yay0+d29ya2xldHNQcm9jZXNzZWQgPSAxdTsKKyAgICB3b3JrLT53b3JrbGV0cy5mcm9udCgpLT5vdXRwdXQuY29uZmlnVXBkYXRlLmNsZWFyKCk7CisgICAgd29yay0+d29ya2xldHMuZnJvbnQoKS0+b3V0cHV0LmZsYWdzID0gd29yay0+aW5wdXQuZmxhZ3M7CisKKyAgICBpZiAobVNpZ25hbGxlZEVycm9yIHx8IG1TaWduYWxsZWRPdXRwdXRFb3MpIHsKKyAgICAgICAgd29yay0+cmVzdWx0ID0gQzJfQkFEX1ZBTFVFOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIHVpbnQ4X3QqIGluQnVmZmVyID0gbnVsbHB0cjsKKyAgICB1aW50MzJfdCBpbkJ1ZmZlckxlbmd0aCA9IDA7CisgICAgQzJSZWFkVmlldyB2aWV3ID0gbUR1bW15UmVhZFZpZXc7CisgICAgc2l6ZV90IG9mZnNldCA9IDB1OworICAgIHNpemVfdCBzaXplID0gMHU7CisgICAgaWYgKCF3b3JrLT5pbnB1dC5idWZmZXJzLmVtcHR5KCkpIHsKKyAgICAgICAgdmlldyA9IHdvcmstPmlucHV0LmJ1ZmZlcnNbMF0tPmRhdGEoKS5saW5lYXJCbG9ja3MoKS5mcm9udCgpLm1hcCgpLmdldCgpOworICAgICAgICBzaXplID0gdmlldy5jYXBhY2l0eSgpOworICAgIH0KKyAgICBpZiAoc2l6ZSAmJiB2aWV3LmVycm9yKCkpIHsKKyAgICAgICAgQUxPR0UoInJlYWQgdmlldyBtYXAgZmFpbGVkICVkIiwgdmlldy5lcnJvcigpKTsKKyAgICAgICAgd29yay0+cmVzdWx0ID0gdmlldy5lcnJvcigpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgYm9vbCBlb3MgPSAod29yay0+aW5wdXQuZmxhZ3MgJiBDMkZyYW1lRGF0YTo6RkxBR19FTkRfT0ZfU1RSRUFNKSAhPSAwOworICAgIGJvb2wgY29kZWNDb25maWcgPQorICAgICAgICAod29yay0+aW5wdXQuZmxhZ3MgJiBDMkZyYW1lRGF0YTo6RkxBR19DT0RFQ19DT05GSUcpICE9IDA7CisgICAgaWYgKGNvZGVjQ29uZmlnKSB7CisgICAgICAgIGlmIChzaXplID09IDB1KSB7CisgICAgICAgICAgICBBTE9HRSgiZW1wdHkgY29kZWMgY29uZmlnIik7CisgICAgICAgICAgICBtU2lnbmFsbGVkRXJyb3IgPSB0cnVlOworICAgICAgICAgICAgd29yay0+cmVzdWx0ID0gQzJfQ09SUlVQVEVEOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIC8vIGNvbnN0X2Nhc3QgYmVjYXVzZSBvZiBsaWJBQUNkZWMgbWV0aG9kIHNpZ25hdHVyZS4KKyAgICAgICAgaW5CdWZmZXIgPSBjb25zdF9jYXN0PHVpbnQ4X3QqPih2aWV3LmRhdGEoKSArIG9mZnNldCk7CisgICAgICAgIGluQnVmZmVyTGVuZ3RoID0gc2l6ZTsKKworICAgICAgICAvKiBHQSBoZWFkZXIgY29uZmlndXJhdGlvbiBzZW50IHRvIERlY29kZXIhICovCisgICAgICAgIElBX0VSUk9SQ09ERSBlcnJfY29kZSA9IGNvbmZpZ1hBQUNEZWNvZGVyKGluQnVmZmVyLCBpbkJ1ZmZlckxlbmd0aCk7CisgICAgICAgIGlmIChJQV9OT19FUlJPUiAhPSBlcnJfY29kZSkgeworICAgICAgICAgICAgQUxPR0UoImNvbmZpZ1hBQUNEZWNvZGVyIGVycl9jb2RlID0gJWQiLCBlcnJfY29kZSk7CisgICAgICAgICAgICBtU2lnbmFsbGVkRXJyb3IgPSB0cnVlOworICAgICAgICAgICAgd29yay0+cmVzdWx0ID0gQzJfQ09SUlVQVEVEOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIHdvcmstPndvcmtsZXRzLmZyb250KCktPm91dHB1dC5mbGFncyA9IHdvcmstPmlucHV0LmZsYWdzOworICAgICAgICB3b3JrLT53b3JrbGV0cy5mcm9udCgpLT5vdXRwdXQub3JkaW5hbCA9IHdvcmstPmlucHV0Lm9yZGluYWw7CisgICAgICAgIHdvcmstPndvcmtsZXRzLmZyb250KCktPm91dHB1dC5idWZmZXJzLmNsZWFyKCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBtQ3VyRnJhbWVJbmRleCA9IHdvcmstPmlucHV0Lm9yZGluYWwuZnJhbWVJbmRleC5wZWVrdSgpOworICAgIG1DdXJUaW1lc3RhbXAgPSB3b3JrLT5pbnB1dC5vcmRpbmFsLnRpbWVzdGFtcC5wZWVrdSgpOworICAgIG1PdXRwdXREcmFpbkJ1ZmZlcldyaXRlUG9zID0gMDsKKyAgICBjaGFyKiB0ZW1wT3V0cHV0RHJhaW5CdWZmZXIgPSBtT3V0cHV0RHJhaW5CdWZmZXI7CisgICAgd2hpbGUgKHNpemUgPiAwdSkgeworICAgICAgICBpZiAoKGtPdXRwdXREcmFpbkJ1ZmZlclNpemUgKiBzaXplb2YoaW50MTZfdCkgLQorICAgICAgICAgICAgIG1PdXRwdXREcmFpbkJ1ZmZlcldyaXRlUG9zKSA8CisgICAgICAgICAgICAobU91dHB1dEZyYW1lTGVuZ3RoICogc2l6ZW9mKGludDE2X3QpICogbU51bUNoYW5uZWxzKSkgeworICAgICAgICAgICAgQUxPR1YoInNraXBwaW5nIGRlY29kZTogbm90IGVub3VnaCBzcGFjZSBsZWZ0IGluIERyYWluQnVmZmVyIik7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgIEFMT0dWKCJpbkF0dHJpYnV0ZSBzaXplID0gJXp1Iiwgc2l6ZSk7CisgICAgICAgIGlmIChtSW50Zi0+aXNBZHRzKCkpIHsKKyAgICAgICAgICAgIEFMT0dWKCJBRFRTIik7CisgICAgICAgICAgICBzaXplX3QgYWR0c0hlYWRlclNpemUgPSAwOworICAgICAgICAgICAgLy8gc2tpcCAzMCBiaXRzLCBhYWNfZnJhbWVfbGVuZ3RoIGZvbGxvd3MuCisgICAgICAgICAgICAvLyBzc3Nzc3NzcyBzc3NzaWlpcCBwcGZmZmZQYyBjY29oQ0NsbCBsbGxsbGxsbCBsbGw/Pz8/PworCisgICAgICAgICAgICBjb25zdCB1aW50OF90KiBhZHRzSGVhZGVyID0gdmlldy5kYXRhKCkgKyBvZmZzZXQ7CisgICAgICAgICAgICBib29sIHNpZ25hbEVycm9yID0gZmFsc2U7CisgICAgICAgICAgICBpZiAoc2l6ZSA8IDcpIHsKKyAgICAgICAgICAgICAgICBBTE9HRSgiQXVkaW8gZGF0YSB0b28gc2hvcnQgdG8gY29udGFpbiBldmVuIHRoZSBBRFRTIGhlYWRlci4gIgorICAgICAgICAgICAgICAgICAgICAgICJHb3QgJXp1IGJ5dGVzLiIsIHNpemUpOworICAgICAgICAgICAgICAgIGhleGR1bXAoYWR0c0hlYWRlciwgc2l6ZSk7CisgICAgICAgICAgICAgICAgc2lnbmFsRXJyb3IgPSB0cnVlOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBib29sIHByb3RlY3Rpb25BYnNlbnQgPSAoYWR0c0hlYWRlclsxXSAmIDEpOworICAgICAgICAgICAgICAgIHVuc2lnbmVkIGFhY19mcmFtZV9sZW5ndGggPSAoKGFkdHNIZWFkZXJbM10gJiAzKSA8PCAxMSkgfAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoYWR0c0hlYWRlcls0XSA8PCAzKSB8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChhZHRzSGVhZGVyWzVdID4+IDUpOworCisgICAgICAgICAgICAgICAgaWYgKHNpemUgPCBhYWNfZnJhbWVfbGVuZ3RoKSB7CisgICAgICAgICAgICAgICAgICAgIEFMT0dFKCJOb3QgZW5vdWdoIGF1ZGlvIGRhdGEgZm9yIHRoZSBjb21wbGV0ZSBmcmFtZS4gIgorICAgICAgICAgICAgICAgICAgICAgICAgICAiR290ICV6dSBieXRlcywgZnJhbWUgc2l6ZSBhY2NvcmRpbmcgdG8gdGhlIEFEVFMgIgorICAgICAgICAgICAgICAgICAgICAgICAgICAiaGVhZGVyIGlzICV1IGJ5dGVzLiIsIHNpemUsIGFhY19mcmFtZV9sZW5ndGgpOworICAgICAgICAgICAgICAgICAgICBoZXhkdW1wKGFkdHNIZWFkZXIsIHNpemUpOworICAgICAgICAgICAgICAgICAgICBzaWduYWxFcnJvciA9IHRydWU7CisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgYWR0c0hlYWRlclNpemUgPSAocHJvdGVjdGlvbkFic2VudCA/IDcgOiA5KTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGFhY19mcmFtZV9sZW5ndGggPCBhZHRzSGVhZGVyU2l6ZSkgeworICAgICAgICAgICAgICAgICAgICAgICAgc2lnbmFsRXJyb3IgPSB0cnVlOworICAgICAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICAgICAgLy8gY29uc3RfY2FzdCBiZWNhdXNlIG9mIGxpYkFBQ2RlYyBtZXRob2Qgc2lnbmF0dXJlLgorICAgICAgICAgICAgICAgICAgICAgICAgaW5CdWZmZXIgPQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0X2Nhc3Q8dWludDhfdCo+KGFkdHNIZWFkZXIgKyBhZHRzSGVhZGVyU2l6ZSk7CisgICAgICAgICAgICAgICAgICAgICAgICBpbkJ1ZmZlckxlbmd0aCA9IGFhY19mcmFtZV9sZW5ndGggLSBhZHRzSGVhZGVyU2l6ZTsKKworICAgICAgICAgICAgICAgICAgICAgICAgb2Zmc2V0ICs9IGFkdHNIZWFkZXJTaXplOworICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZSAtPSBhZHRzSGVhZGVyU2l6ZTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKHNpZ25hbEVycm9yKSB7CisgICAgICAgICAgICAgICAgbVNpZ25hbGxlZEVycm9yID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICB3b3JrLT5yZXN1bHQgPSBDMl9DT1JSVVBURUQ7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQorICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgQUxPR1YoIk5vbiBBRFRTIik7CisgICAgICAgICAgICAvLyBjb25zdF9jYXN0IGJlY2F1c2Ugb2YgbGliQUFDZGVjIG1ldGhvZCBzaWduYXR1cmUuCisgICAgICAgICAgICBpbkJ1ZmZlciA9IGNvbnN0X2Nhc3Q8dWludDhfdCo+KHZpZXcuZGF0YSgpICsgb2Zmc2V0KTsKKyAgICAgICAgICAgIGluQnVmZmVyTGVuZ3RoID0gc2l6ZTsKKyAgICAgICAgfQorCisgICAgICAgIHNpZ25lZCBpbnQgcHJldlNhbXBsZVJhdGUgPSBtU2FtcEZyZXE7CisgICAgICAgIHNpZ25lZCBpbnQgcHJldk51bUNoYW5uZWxzID0gbU51bUNoYW5uZWxzOworCisgICAgICAgIC8qIFhBQUMgZGVjb2RlciBleHBlY3RzIGZpcnN0IGZyYW1lIHRvIGJlIGZlZCB2aWEgY29uZmlnWEFBQ0RlY29kZXIgQVBJCisgICAgICAgICAqIHdoaWNoIHNob3VsZCBpbml0aWFsaXplIHRoZSBjb2RlYy4gT25jZSB0aGlzIHN0YXRlIGlzIHJlYWNoZWQsIGNhbGwgdGhlCisgICAgICAgICAqIGRlY29kZVhBQUNTdHJlYW0gQVBJIHdpdGggc2FtZSBmcmFtZSB0byBkZWNvZGUhICovCisgICAgICAgIGlmICghbUlzQ29kZWNJbml0aWFsaXplZCkgeworICAgICAgICAgICAgSUFfRVJST1JDT0RFIGVycl9jb2RlID0gY29uZmlnWEFBQ0RlY29kZXIoaW5CdWZmZXIsIGluQnVmZmVyTGVuZ3RoKTsKKyAgICAgICAgICAgIGlmIChJQV9OT19FUlJPUiAhPSBlcnJfY29kZSkgeworICAgICAgICAgICAgICAgIEFMT0dFKCJjb25maWdYQUFDRGVjb2RlciBGYWlsZWQgMiBlcnJfY29kZSA9ICVkIiwgZXJyX2NvZGUpOworICAgICAgICAgICAgICAgIG1TaWduYWxsZWRFcnJvciA9IHRydWU7CisgICAgICAgICAgICAgICAgd29yay0+cmVzdWx0ID0gQzJfQ09SUlVQVEVEOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKChtU2FtcEZyZXEgIT0gcHJldlNhbXBsZVJhdGUpIHx8CisgICAgICAgICAgICAgICAgKG1OdW1DaGFubmVscyAhPSBwcmV2TnVtQ2hhbm5lbHMpKSB7CisgICAgICAgICAgICAgICAgQUxPR0koIlJlY29uZmlndXJpbmcgZGVjb2RlcjogJWQtPiVkIEh6LCAlZC0+JWQgY2hhbm5lbHMiLAorICAgICAgICAgICAgICAgICAgICAgIHByZXZTYW1wbGVSYXRlLCBtU2FtcEZyZXEsIHByZXZOdW1DaGFubmVscywgbU51bUNoYW5uZWxzKTsKKworICAgICAgICAgICAgICAgIEMyU3RyZWFtU2FtcGxlUmF0ZUluZm86Om91dHB1dCBzYW1wbGVSYXRlSW5mbygwdSwgbVNhbXBGcmVxKTsKKyAgICAgICAgICAgICAgICBDMlN0cmVhbUNoYW5uZWxDb3VudEluZm86Om91dHB1dCBjaGFubmVsQ291bnRJbmZvKDB1LCBtTnVtQ2hhbm5lbHMpOworICAgICAgICAgICAgICAgIHN0ZDo6dmVjdG9yPHN0ZDo6dW5pcXVlX3B0cjxDMlNldHRpbmdSZXN1bHQ+PiBmYWlsdXJlczsKKyAgICAgICAgICAgICAgICBjMl9zdGF0dXNfdCBlcnIgPSBtSW50Zi0+Y29uZmlnKAorICAgICAgICAgICAgICAgICAgICAgICAgeyAmc2FtcGxlUmF0ZUluZm8sICZjaGFubmVsQ291bnRJbmZvIH0sCisgICAgICAgICAgICAgICAgICAgICAgICBDMl9NQVlfQkxPQ0ssCisgICAgICAgICAgICAgICAgICAgICAgICAmZmFpbHVyZXMpOworICAgICAgICAgICAgICAgIGlmIChlcnIgPT0gT0spIHsKKyAgICAgICAgICAgICAgICAgICAgd29yay0+d29ya2xldHMuZnJvbnQoKS0+b3V0cHV0LmNvbmZpZ1VwZGF0ZS5wdXNoX2JhY2soCisgICAgICAgICAgICAgICAgICAgICAgICBDMlBhcmFtOjpDb3B5KHNhbXBsZVJhdGVJbmZvKSk7CisgICAgICAgICAgICAgICAgICAgIHdvcmstPndvcmtsZXRzLmZyb250KCktPm91dHB1dC5jb25maWdVcGRhdGUucHVzaF9iYWNrKAorICAgICAgICAgICAgICAgICAgICAgICAgQzJQYXJhbTo6Q29weShjaGFubmVsQ291bnRJbmZvKSk7CisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgQUxPR0UoIkNvbmZpZyBVcGRhdGUgZmFpbGVkIik7CisgICAgICAgICAgICAgICAgICAgIG1TaWduYWxsZWRFcnJvciA9IHRydWU7CisgICAgICAgICAgICAgICAgICAgIHdvcmstPnJlc3VsdCA9IEMyX0NPUlJVUFRFRDsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIHNpZ25lZCBpbnQgYnl0ZXNDb25zdW1lZCA9IDA7CisgICAgICAgIElBX0VSUk9SQ09ERSBlcnJvckNvZGUgPSBJQV9OT19FUlJPUjsKKyAgICAgICAgaWYgKG1Jc0NvZGVjSW5pdGlhbGl6ZWQpIHsKKyAgICAgICAgICAgIG1Jc0NvZGVjQ29uZmlnRmx1c2hSZXF1aXJlZCA9IHRydWU7CisgICAgICAgICAgICBlcnJvckNvZGUgPSBkZWNvZGVYQUFDU3RyZWFtKGluQnVmZmVyLCBpbkJ1ZmZlckxlbmd0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmJ5dGVzQ29uc3VtZWQsICZtTnVtT3V0Qnl0ZXMpOworICAgICAgICB9IGVsc2UgaWYgKCFtSXNDb2RlY0NvbmZpZ0ZsdXNoUmVxdWlyZWQpIHsKKyAgICAgICAgICAgIEFMT0dXKCJBc3N1bXB0aW9uIHRoYXQgZmlyc3QgZnJhbWUgYWZ0ZXIgaGVhZGVyIGluaXRpYWxpemVzIGRlY29kZXIgRmFpbGVkISIpOworICAgICAgICAgICAgbVNpZ25hbGxlZEVycm9yID0gdHJ1ZTsKKyAgICAgICAgICAgIHdvcmstPnJlc3VsdCA9IEMyX0NPUlJVUFRFRDsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICBzaXplIC09IGJ5dGVzQ29uc3VtZWQ7CisgICAgICAgIG9mZnNldCArPSBieXRlc0NvbnN1bWVkOworCisgICAgICAgIGlmIChpbkJ1ZmZlckxlbmd0aCAhPSAodWludDMyX3QpYnl0ZXNDb25zdW1lZCkKKyAgICAgICAgICAgIEFMT0dXKCJBbGwgZGF0YSBub3QgY29uc3VtZWQiKTsKKworICAgICAgICAvKiBJbiBjYXNlIG9mIGVycm9yLCBkZWNvZGVyIHdvdWxkIGhhdmUgZ2l2ZW4gb3V0IGVtcHR5IGJ1ZmZlciAqLworICAgICAgICBpZiAoKElBX05PX0VSUk9SICE9IGVycm9yQ29kZSkgJiYgKDAgPT0gbU51bU91dEJ5dGVzKSAmJiBtSXNDb2RlY0luaXRpYWxpemVkKQorICAgICAgICAgICAgbU51bU91dEJ5dGVzID0gbU91dHB1dEZyYW1lTGVuZ3RoICogKG1QY21XZFN6IC8gOCkgKiBtTnVtQ2hhbm5lbHM7CisKKyAgICAgICAgaWYgKCFieXRlc0NvbnN1bWVkKSB7CisgICAgICAgICAgICBBTE9HVygiYnl0ZXNDb25zdW1lZCA9IDAgc2hvdWxkIG5ldmVyIGhhcHBlbiIpOworICAgICAgICB9CisKKyAgICAgICAgaWYgKCh1aW50MzJfdCltTnVtT3V0Qnl0ZXMgPgorICAgICAgICAgICAgbU91dHB1dEZyYW1lTGVuZ3RoICogc2l6ZW9mKGludDE2X3QpICogbU51bUNoYW5uZWxzKSB7CisgICAgICAgICAgICBBTE9HRSgibU51bU91dEJ5dGVzID4gbU91dHB1dEZyYW1lTGVuZ3RoICogc2l6ZW9mKGludDE2X3QpICogbU51bUNoYW5uZWxzLCBzaG91bGQgbmV2ZXIgaGFwcGVuIik7CisgICAgICAgICAgICBtU2lnbmFsbGVkRXJyb3IgPSB0cnVlOworICAgICAgICAgICAgd29yay0+cmVzdWx0ID0gQzJfQ09SUlVQVEVEOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgaWYgKElBX05PX0VSUk9SICE9IGVycm9yQ29kZSkgeworICAgICAgICAgICAgLy8gVE9ETzogY2hlY2sgZm9yIG92ZXJmbG93LCBBU0FOCisgICAgICAgICAgICBtZW1zZXQobU91dHB1dEJ1ZmZlciwgMCwgbU51bU91dEJ5dGVzKTsKKworICAgICAgICAgICAgLy8gRGlzY2FyZCBpbnB1dCBidWZmZXIuCisgICAgICAgICAgICBzaXplID0gMDsKKworICAgICAgICAgICAgLy8gZmFsbCB0aHJvdWdoCisgICAgICAgIH0KKyAgICAgICAgbWVtY3B5KHRlbXBPdXRwdXREcmFpbkJ1ZmZlciwgbU91dHB1dEJ1ZmZlciwgbU51bU91dEJ5dGVzKTsKKyAgICAgICAgdGVtcE91dHB1dERyYWluQnVmZmVyICs9IG1OdW1PdXRCeXRlczsKKyAgICAgICAgbU91dHB1dERyYWluQnVmZmVyV3JpdGVQb3MgKz0gbU51bU91dEJ5dGVzOworICAgIH0KKworICAgIGlmIChtT3V0cHV0RHJhaW5CdWZmZXJXcml0ZVBvcykgeworICAgICAgICBmaW5pc2hXb3JrKHdvcmssIHBvb2wpOworICAgIH0gZWxzZSB7CisgICAgICAgIGZpbGxFbXB0eVdvcmsod29yayk7CisgICAgfQorICAgIGlmIChlb3MpIG1TaWduYWxsZWRPdXRwdXRFb3MgPSB0cnVlOworfQorCitjMl9zdGF0dXNfdCBDMlNvZnRYYWFjRGVjOjpkcmFpbih1aW50MzJfdCBkcmFpbk1vZGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdGQ6OnNoYXJlZF9wdHI8QzJCbG9ja1Bvb2w+JiBwb29sKSB7CisgICAgKHZvaWQpcG9vbDsKKyAgICBpZiAoZHJhaW5Nb2RlID09IE5PX0RSQUlOKSB7CisgICAgICAgIEFMT0dXKCJkcmFpbiB3aXRoIE5PX0RSQUlOOiBuby1vcCIpOworICAgICAgICByZXR1cm4gQzJfT0s7CisgICAgfQorICAgIGlmIChkcmFpbk1vZGUgPT0gRFJBSU5fQ0hBSU4pIHsKKyAgICAgICAgQUxPR1coIkRSQUlOX0NIQUlOIG5vdCBzdXBwb3J0ZWQiKTsKKyAgICAgICAgcmV0dXJuIEMyX09NSVRURUQ7CisgICAgfQorCisgICAgcmV0dXJuIEMyX09LOworfQorCitJQV9FUlJPUkNPREUgQzJTb2Z0WGFhY0RlYzo6Y29uZmlnZmx1c2hEZWNvZGUoKSB7CisgICAgSUFfRVJST1JDT0RFIGVycl9jb2RlOworICAgIHVpbnQzMl90IHVpX2luaXRfZG9uZTsKKyAgICB1aW50MzJfdCBpbkJ1ZmZlckxlbmd0aCA9IDgyMDM7CisKKyAgICBlcnJfY29kZSA9IGl4aGVhYWNkX2RlY19hcGkobVhoZWFhY0NvZGVjSGFuZGxlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJQV9BUElfQ01EX0lOSVQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIElBX0NNRF9UWVBFX0ZMVVNIX01FTSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnVsbHB0cik7CisgICAgUkVUVVJOX0lGX0ZBVEFMKGVycl9jb2RlLCAgIklBX0NNRF9UWVBFX0ZMVVNIX01FTSIpOworCisgICAgZXJyX2NvZGUgPSBpeGhlYWFjZF9kZWNfYXBpKG1YaGVhYWNDb2RlY0hhbmRsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSUFfQVBJX0NNRF9TRVRfSU5QVVRfQllURVMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZpbkJ1ZmZlckxlbmd0aCk7CisgICAgUkVUVVJOX0lGX0ZBVEFMKGVycl9jb2RlLCAgIklBX0FQSV9DTURfU0VUX0lOUFVUX0JZVEVTIik7CisKKyAgICBlcnJfY29kZSA9IGl4aGVhYWNkX2RlY19hcGkobVhoZWFhY0NvZGVjSGFuZGxlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJQV9BUElfQ01EX0lOSVQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIElBX0NNRF9UWVBFX0ZMVVNIX01FTSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnVsbHB0cik7CisgICAgUkVUVVJOX0lGX0ZBVEFMKGVycl9jb2RlLCAgIklBX0NNRF9UWVBFX0ZMVVNIX01FTSIpOworCisgICAgZXJyX2NvZGUgPSBpeGhlYWFjZF9kZWNfYXBpKG1YaGVhYWNDb2RlY0hhbmRsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSUFfQVBJX0NNRF9JTklULAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJQV9DTURfVFlQRV9JTklUX0RPTkVfUVVFUlksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZ1aV9pbml0X2RvbmUpOworICAgIFJFVFVSTl9JRl9GQVRBTChlcnJfY29kZSwgICJJQV9DTURfVFlQRV9JTklUX0RPTkVfUVVFUlkiKTsKKworICAgIGlmICh1aV9pbml0X2RvbmUpIHsKKyAgICAgICAgZXJyX2NvZGUgPSBnZXRYQUFDU3RyZWFtSW5mbygpOworICAgICAgICBSRVRVUk5fSUZfRkFUQUwoZXJyX2NvZGUsICJnZXRYQUFDU3RyZWFtSW5mbyIpOworICAgICAgICBBTE9HVigiRm91bmQgQ29kZWMgd2l0aCBiZWxvdyBjb25maWctLS1cbnNhbXBGcmVxICVkXG5udW1DaGFubmVscyAlZFxucGNtV2RTeiAlZFxuY2hhbm5lbE1hc2sgJWRcbm91dHB1dEZyYW1lTGVuZ3RoICVkIiwKKyAgICAgICAgICAgICAgIG1TYW1wRnJlcSwgbU51bUNoYW5uZWxzLCBtUGNtV2RTeiwgbUNoYW5uZWxNYXNrLCBtT3V0cHV0RnJhbWVMZW5ndGgpOworICAgICAgICBtSXNDb2RlY0luaXRpYWxpemVkID0gdHJ1ZTsKKyAgICB9CisgICAgcmV0dXJuIElBX05PX0VSUk9SOworfQorCitjMl9zdGF0dXNfdCBDMlNvZnRYYWFjRGVjOjpvbkZsdXNoX3NtKCkgeworICAgIGlmIChtSXNDb2RlY0luaXRpYWxpemVkKSB7CisgICAgICAgIElBX0VSUk9SQ09ERSBlcnJfY29kZSA9IGNvbmZpZ2ZsdXNoRGVjb2RlKCk7CisgICAgICAgIGlmIChlcnJfY29kZSAhPSBJQV9OT19FUlJPUikgeworICAgICAgICAgICAgQUxPR0UoIkVycm9yIGluIGNvbmZpZ2ZsdXNoRGVjb2RlOiBFcnJvciAlZCIsIGVycl9jb2RlKTsKKyAgICAgICAgfQorICAgIH0KKyAgICBkcmFpbkRlY29kZXIoKTsKKyAgICBtU2lnbmFsbGVkT3V0cHV0RW9zID0gZmFsc2U7CisgICAgbVNpZ25hbGxlZEVycm9yID0gZmFsc2U7CisKKyAgICByZXR1cm4gQzJfT0s7Cit9CisKK0lBX0VSUk9SQ09ERSBDMlNvZnRYYWFjRGVjOjpkcmFpbkRlY29kZXIoKSB7CisgICAgLyogT3V0cHV0IGRlbGF5IGNvbXBlbnNhdGlvbiBsb2dpYyBzaG91bGQgc2l0IGhlcmUuICovCisgICAgLyogTm90aGluZyB0byBiZSBkb25lIGFzIFhBQUMgZGVjb2RlciBkb2VzIG5vdCBpbnRyb2R1Y2Ugb3V0cHV0IGJ1ZmZlciBkZWxheSAqLworCisgICAgcmV0dXJuIDA7Cit9CisKK0lBX0VSUk9SQ09ERSBDMlNvZnRYYWFjRGVjOjppbml0WEFBQ0RlY29kZXIoKSB7CisgICAgLyogRmlyc3QgcGFydCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgIC8qIEVycm9yIEhhbmRsZXIgSW5pdCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICAvKiBHZXQgTGlicmFyeSBOYW1lLCBMaWJyYXJ5IFZlcnNpb24gYW5kIEFQSSBWZXJzaW9uICovCisgICAgLyogSW5pdGlhbGl6ZSBBUEkgc3RydWN0dXJlICsgRGVmYXVsdCBjb25maWcgc2V0ICAgICAqLworICAgIC8qIFNldCBjb25maWcgcGFyYW1zIGZyb20gdXNlciAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICAvKiBJbml0aWFsaXplIG1lbW9yeSB0YWJsZXMgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgLyogR2V0IG1lbW9yeSBpbmZvcm1hdGlvbiBhbmQgYWxsb2NhdGUgbWVtb3J5ICAgICAgICAqLworCisgICAgbUlucHV0QnVmZmVyU2l6ZSA9IDA7CisgICAgbUlucHV0QnVmZmVyID0gbnVsbHB0cjsKKyAgICBtT3V0cHV0QnVmZmVyID0gbnVsbHB0cjsKKyAgICAvKiBQcm9jZXNzIHN0cnVjdCBpbml0aW5nIGVuZCAqLworCisgICAgLyogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAgIC8qIEluaXRpYWxpemUgQVBJIHN0cnVjdHVyZSBhbmQgc2V0IGNvbmZpZyBwYXJhbXMgdG8gZGVmYXVsdCAgICAgICAgKi8KKyAgICAvKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgICAgLyogQVBJIHNpemUgKi8KKyAgICB1aW50MzJfdCBwdWlfYXBpX3NpemU7CisgICAgLyogR2V0IHRoZSBBUEkgc2l6ZSAqLworICAgIElBX0VSUk9SQ09ERSBlcnJfY29kZSA9IGl4aGVhYWNkX2RlY19hcGkobnVsbHB0ciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIElBX0FQSV9DTURfR0VUX0FQSV9TSVpFLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZwdWlfYXBpX3NpemUpOworICAgIFJFVFVSTl9JRl9GQVRBTChlcnJfY29kZSwgICJJQV9BUElfQ01EX0dFVF9BUElfU0laRSIpOworCisgICAgLyogQWxsb2NhdGUgbWVtb3J5IGZvciBBUEkgKi8KKyAgICBtWGhlYWFjQ29kZWNIYW5kbGUgPSBtZW1hbGlnbig0LCBwdWlfYXBpX3NpemUpOworICAgIGlmICghbVhoZWFhY0NvZGVjSGFuZGxlKSB7CisgICAgICAgIEFMT0dFKCJtYWxsb2MgZm9yIHB1aV9hcGlfc2l6ZSArIDQgPj4gJWQgRmFpbGVkIiwgcHVpX2FwaV9zaXplICsgNCk7CisgICAgICAgIHJldHVybiBJQV9GQVRBTF9FUlJPUjsKKyAgICB9CisgICAgbU1lbW9yeVZlYy5wdXNoKG1YaGVhYWNDb2RlY0hhbmRsZSk7CisKKyAgICAvKiBTZXQgdGhlIGNvbmZpZyBwYXJhbXMgdG8gZGVmYXVsdCB2YWx1ZXMgKi8KKyAgICBlcnJfY29kZSA9IGl4aGVhYWNkX2RlY19hcGkobVhoZWFhY0NvZGVjSGFuZGxlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJQV9BUElfQ01EX0lOSVQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIElBX0NNRF9UWVBFX0lOSVRfQVBJX1BSRV9DT05GSUdfUEFSQU1TLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBudWxscHRyKTsKKyAgICBSRVRVUk5fSUZfRkFUQUwoZXJyX2NvZGUsICAiSUFfQ01EX1RZUEVfSU5JVF9BUElfUFJFX0NPTkZJR19QQVJBTVMiKTsKKworICAgIC8qIEdldCB0aGUgQVBJIHNpemUgKi8KKyAgICBlcnJfY29kZSA9IGlhX2RyY19kZWNfYXBpKG51bGxwdHIsIElBX0FQSV9DTURfR0VUX0FQSV9TSVpFLCAwLCAmcHVpX2FwaV9zaXplKTsKKworICAgIFJFVFVSTl9JRl9GQVRBTChlcnJfY29kZSwgIklBX0FQSV9DTURfR0VUX0FQSV9TSVpFIik7CisKKyAgICAvKiBBbGxvY2F0ZSBtZW1vcnkgZm9yIEFQSSAqLworICAgIG1NcGVnRERyY0hhbmRsZSA9IG1lbWFsaWduKDQsIHB1aV9hcGlfc2l6ZSk7CisgICAgaWYgKCFtTXBlZ0REcmNIYW5kbGUpIHsKKyAgICAgICAgQUxPR0UoIm1hbGxvYyBmb3IgcHVpX2FwaV9zaXplICsgNCA+PiAlZCBGYWlsZWQiLCBwdWlfYXBpX3NpemUgKyA0KTsKKyAgICAgICAgcmV0dXJuIElBX0ZBVEFMX0VSUk9SOworICAgIH0KKyAgICBtTWVtb3J5VmVjLnB1c2gobU1wZWdERHJjSGFuZGxlKTsKKworICAgIC8qIFNldCB0aGUgY29uZmlnIHBhcmFtcyB0byBkZWZhdWx0IHZhbHVlcyAqLworICAgIGVycl9jb2RlID0gaWFfZHJjX2RlY19hcGkobU1wZWdERHJjSGFuZGxlLCBJQV9BUElfQ01EX0lOSVQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJQV9DTURfVFlQRV9JTklUX0FQSV9QUkVfQ09ORklHX1BBUkFNUywgbnVsbHB0cik7CisKKyAgICBSRVRVUk5fSUZfRkFUQUwoZXJyX2NvZGUsICJJQV9DTURfVFlQRV9JTklUX0FQSV9QUkVfQ09ORklHX1BBUkFNUyIpOworCisgICAgLyogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAgIC8qIFNldCBjb25maWcgcGFyYW1ldGVycyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICAvKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgICAgdWludDMyX3QgdWlfbXA0X2ZsYWcgPSAxOworICAgIGVycl9jb2RlID0gaXhoZWFhY2RfZGVjX2FwaShtWGhlYWFjQ29kZWNIYW5kbGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIElBX0FQSV9DTURfU0VUX0NPTkZJR19QQVJBTSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSUFfRU5IQUFDUExVU19ERUNfQ09ORklHX1BBUkFNX0lTTVA0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmdWlfbXA0X2ZsYWcpOworICAgIFJFVFVSTl9JRl9GQVRBTChlcnJfY29kZSwgICJJQV9FTkhBQUNQTFVTX0RFQ19DT05GSUdfUEFSQU1fSVNNUDQiKTsKKworICAgIC8qICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgICAvKiBJbml0aWFsaXplIE1lbW9yeSBpbmZvIHRhYmxlcyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgLyogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAgIHVpbnQzMl90IHVpX3Byb2NfbWVtX3RhYnNfc2l6ZTsKKyAgICBwVk9JRCBwdl9hbGxvY19wdHI7CisgICAgLyogR2V0IG1lbW9yeSBpbmZvIHRhYmxlcyBzaXplICovCisgICAgZXJyX2NvZGUgPSBpeGhlYWFjZF9kZWNfYXBpKG1YaGVhYWNDb2RlY0hhbmRsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSUFfQVBJX0NNRF9HRVRfTUVNVEFCU19TSVpFLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmdWlfcHJvY19tZW1fdGFic19zaXplKTsKKyAgICBSRVRVUk5fSUZfRkFUQUwoZXJyX2NvZGUsICAiSUFfQVBJX0NNRF9HRVRfTUVNVEFCU19TSVpFIik7CisKKyAgICBwdl9hbGxvY19wdHIgPSBtZW1hbGlnbig0LCB1aV9wcm9jX21lbV90YWJzX3NpemUpOworICAgIGlmICghcHZfYWxsb2NfcHRyKSB7CisgICAgICAgIEFMT0dFKCJNYWxsb2MgZm9yIHNpemUgKHVpX3Byb2NfbWVtX3RhYnNfc2l6ZSArIDQpID0gJWQgZmFpbGVkISIsIHVpX3Byb2NfbWVtX3RhYnNfc2l6ZSArIDQpOworICAgICAgICByZXR1cm4gSUFfRkFUQUxfRVJST1I7CisgICAgfQorICAgIG1NZW1vcnlWZWMucHVzaChwdl9hbGxvY19wdHIpOworCisgICAgLyogU2V0IHBvaW50ZXIgZm9yIHByb2Nlc3MgbWVtb3J5IHRhYmxlcyAgICAqLworICAgIGVycl9jb2RlID0gaXhoZWFhY2RfZGVjX2FwaShtWGhlYWFjQ29kZWNIYW5kbGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIElBX0FQSV9DTURfU0VUX01FTVRBQlNfUFRSLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwdl9hbGxvY19wdHIpOworICAgIFJFVFVSTl9JRl9GQVRBTChlcnJfY29kZSwgICJJQV9BUElfQ01EX1NFVF9NRU1UQUJTX1BUUiIpOworCisgICAgLyogaW5pdGlhbGl6ZSB0aGUgQVBJLCBwb3N0IGNvbmZpZywgZmlsbCBtZW1vcnkgdGFibGVzICAqLworICAgIGVycl9jb2RlID0gaXhoZWFhY2RfZGVjX2FwaShtWGhlYWFjQ29kZWNIYW5kbGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIElBX0FQSV9DTURfSU5JVCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSUFfQ01EX1RZUEVfSU5JVF9BUElfUE9TVF9DT05GSUdfUEFSQU1TLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBudWxscHRyKTsKKyAgICBSRVRVUk5fSUZfRkFUQUwoZXJyX2NvZGUsICAiSUFfQ01EX1RZUEVfSU5JVF9BUElfUE9TVF9DT05GSUdfUEFSQU1TIik7CisKKyAgICAvKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgICAgLyogQWxsb2NhdGUgTWVtb3J5IHdpdGggaW5mbyBmcm9tIGxpYnJhcnkgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgIC8qICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgICAvKiBUaGVyZSBhcmUgZm91ciBkaWZmZXJlbnQgdHlwZXMgb2YgbWVtb3JpZXMsIHRoYXQgbmVlZHMgdG8gYmUgYWxsb2NhdGVkICovCisgICAgLyogcGVyc2lzdGVudCxzY3JhdGNoLGlucHV0IGFuZCBvdXRwdXQgKi8KKyAgICBmb3IgKGludCBpID0gMDsgaSA8IDQ7IGkrKykgeworICAgICAgICBpbnQgdWlfc2l6ZSA9IDAsIHVpX2FsaWdubWVudCA9IDAsIHVpX3R5cGUgPSAwOworCisgICAgICAgIC8qIEdldCBtZW1vcnkgc2l6ZSAqLworICAgICAgICBlcnJfY29kZSA9IGl4aGVhYWNkX2RlY19hcGkobVhoZWFhY0NvZGVjSGFuZGxlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSUFfQVBJX0NNRF9HRVRfTUVNX0lORk9fU0laRSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmdWlfc2l6ZSk7CisgICAgICAgIFJFVFVSTl9JRl9GQVRBTChlcnJfY29kZSwgICJJQV9BUElfQ01EX0dFVF9NRU1fSU5GT19TSVpFIik7CisKKyAgICAgICAgLyogR2V0IG1lbW9yeSBhbGlnbm1lbnQgKi8KKyAgICAgICAgZXJyX2NvZGUgPSBpeGhlYWFjZF9kZWNfYXBpKG1YaGVhYWNDb2RlY0hhbmRsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIElBX0FQSV9DTURfR0VUX01FTV9JTkZPX0FMSUdOTUVOVCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmdWlfYWxpZ25tZW50KTsKKyAgICAgICAgUkVUVVJOX0lGX0ZBVEFMKGVycl9jb2RlLCAgIklBX0FQSV9DTURfR0VUX01FTV9JTkZPX0FMSUdOTUVOVCIpOworCisgICAgICAgIC8qIEdldCBtZW1vcnkgdHlwZSAqLworICAgICAgICBlcnJfY29kZSA9IGl4aGVhYWNkX2RlY19hcGkobVhoZWFhY0NvZGVjSGFuZGxlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSUFfQVBJX0NNRF9HRVRfTUVNX0lORk9fVFlQRSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmdWlfdHlwZSk7CisgICAgICAgIFJFVFVSTl9JRl9GQVRBTChlcnJfY29kZSwgICJJQV9BUElfQ01EX0dFVF9NRU1fSU5GT19UWVBFIik7CisKKyAgICAgICAgcHZfYWxsb2NfcHRyID0gbWVtYWxpZ24odWlfYWxpZ25tZW50LCB1aV9zaXplKTsKKyAgICAgICAgaWYgKCFwdl9hbGxvY19wdHIpIHsKKyAgICAgICAgICAgIEFMT0dFKCJNYWxsb2MgZm9yIHNpemUgKHVpX3NpemUgKyB1aV9hbGlnbm1lbnQpID0gJWQgZmFpbGVkISIsCisgICAgICAgICAgICAgICAgICAgdWlfc2l6ZSArIHVpX2FsaWdubWVudCk7CisgICAgICAgICAgICByZXR1cm4gSUFfRkFUQUxfRVJST1I7CisgICAgICAgIH0KKyAgICAgICAgbU1lbW9yeVZlYy5wdXNoKHB2X2FsbG9jX3B0cik7CisKKyAgICAgICAgLyogU2V0IHRoZSBidWZmZXIgcG9pbnRlciAqLworICAgICAgICBlcnJfY29kZSA9IGl4aGVhYWNkX2RlY19hcGkobVhoZWFhY0NvZGVjSGFuZGxlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSUFfQVBJX0NNRF9TRVRfTUVNX1BUUiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwdl9hbGxvY19wdHIpOworICAgICAgICBSRVRVUk5fSUZfRkFUQUwoZXJyX2NvZGUsICAiSUFfQVBJX0NNRF9TRVRfTUVNX1BUUiIpOworICAgICAgICBpZiAodWlfdHlwZSA9PSBJQV9NRU1UWVBFX0lOUFVUKSB7CisgICAgICAgICAgICBtSW5wdXRCdWZmZXIgPSAocFdPUkQ4KXB2X2FsbG9jX3B0cjsKKyAgICAgICAgICAgIG1JbnB1dEJ1ZmZlclNpemUgPSB1aV9zaXplOworICAgICAgICB9CisgICAgICAgIGlmICh1aV90eXBlID09IElBX01FTVRZUEVfT1VUUFVUKQorICAgICAgICAgICAgbU91dHB1dEJ1ZmZlciA9IChwV09SRDgpcHZfYWxsb2NfcHRyOworICAgIH0KKyAgICAvKiBFbmQgZmlyc3QgcGFydCAqLworCisgICAgcmV0dXJuIElBX05PX0VSUk9SOworfQorCitzdGF0dXNfdCBDMlNvZnRYYWFjRGVjOjppbml0WEFBQ0RyYygpIHsKKyAgICBJQV9FUlJPUkNPREUgZXJyX2NvZGUgPSBJQV9OT19FUlJPUjsKKyAgICB1bnNpZ25lZCBpbnQgdWlfZHJjX3ZhbDsKKyAgICAvLyAgRFJDX1BSRVNfTU9ERV9XUkFQX0RFU0lSRURfVEFSR0VUCisgICAgaW50MzJfdCB0YXJnZXRSZWZMZXZlbCA9IG1JbnRmLT5nZXREcmNUYXJnZXRSZWZMZXZlbCgpOworICAgIEFMT0dWKCJBQUMgZGVjb2RlciB1c2luZyBkZXNpcmVkIERSQyB0YXJnZXQgcmVmZXJlbmNlIGxldmVsIG9mICVkIiwgdGFyZ2V0UmVmTGV2ZWwpOworICAgIHVpX2RyY192YWwgPSAodW5zaWduZWQgaW50KXRhcmdldFJlZkxldmVsOworICAgIGVycl9jb2RlID0gaXhoZWFhY2RfZGVjX2FwaShtWGhlYWFjQ29kZWNIYW5kbGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIElBX0FQSV9DTURfU0VUX0NPTkZJR19QQVJBTSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSUFfRU5IQUFDUExVU19ERUNfQ09ORklHX1BBUkFNX0RSQ19UQVJHRVRfTEVWRUwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZ1aV9kcmNfdmFsKTsKKyAgICBSRVRVUk5fSUZfRkFUQUwoZXJyX2NvZGUsICAiSUFfRU5IQUFDUExVU19ERUNfQ09ORklHX1BBUkFNX0RSQ19UQVJHRVRfTEVWRUwiKTsKKworICAgIC8qIFVzZSB1aV9kcmNfdmFsIGZyb20gUFJPUF9EUkNfT1ZFUlJJREVfUkVGX0xFVkVMIG9yIERSQ19ERUZBVUxUX01PQklMRV9SRUZfTEVWRUwKKyAgICAgKiBmb3IgSUFfRU5IQUFDUExVU19ERUNfRFJDX1RBUkdFVF9MT1VETkVTUyB0b28gKi8KKyAgICBlcnJfY29kZSA9IGl4aGVhYWNkX2RlY19hcGkobVhoZWFhY0NvZGVjSGFuZGxlLCBJQV9BUElfQ01EX1NFVF9DT05GSUdfUEFSQU0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIElBX0VOSEFBQ1BMVVNfREVDX0RSQ19UQVJHRVRfTE9VRE5FU1MsICZ1aV9kcmNfdmFsKTsKKworICAgIFJFVFVSTl9JRl9GQVRBTChlcnJfY29kZSwgIklBX0VOSEFBQ1BMVVNfREVDX0RSQ19UQVJHRVRfTE9VRE5FU1MiKTsKKworICAgIGludDMyX3QgYXR0ZW51YXRpb25GYWN0b3IgPSBtSW50Zi0+Z2V0RHJjQXR0ZW51YXRpb25GYWN0b3IoKTsKKyAgICBBTE9HVigiQUFDIGRlY29kZXIgdXNpbmcgZGVzaXJlZCBEUkMgYXR0ZW51YXRpb24gZmFjdG9yIG9mICVkIiwgYXR0ZW51YXRpb25GYWN0b3IpOworICAgIHVpX2RyY192YWwgPSAodW5zaWduZWQgaW50KWF0dGVudWF0aW9uRmFjdG9yOworICAgIGVycl9jb2RlID0gaXhoZWFhY2RfZGVjX2FwaShtWGhlYWFjQ29kZWNIYW5kbGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIElBX0FQSV9DTURfU0VUX0NPTkZJR19QQVJBTSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSUFfRU5IQUFDUExVU19ERUNfQ09ORklHX1BBUkFNX0RSQ19DVVQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZ1aV9kcmNfdmFsKTsKKyAgICBSRVRVUk5fSUZfRkFUQUwoZXJyX2NvZGUsICAiSUFfRU5IQUFDUExVU19ERUNfQ09ORklHX1BBUkFNX0RSQ19DVVQiKTsKKworICAgIC8vICBEUkNfUFJFU19NT0RFX1dSQVBfREVTSVJFRF9CT09TVF9GQUNUT1IKKyAgICBpbnQzMl90IGJvb3N0RmFjdG9yID0gbUludGYtPmdldERyY0Jvb3N0RmFjdG9yKCk7CisgICAgQUxPR1YoIkFBQyBkZWNvZGVyIHVzaW5nIGRlc2lyZWQgRFJDIGJvb3N0IGZhY3RvciBvZiAlZCIsIGJvb3N0RmFjdG9yKTsKKyAgICB1aV9kcmNfdmFsID0gKHVuc2lnbmVkIGludClib29zdEZhY3RvcjsKKyAgICBlcnJfY29kZSA9IGl4aGVhYWNkX2RlY19hcGkobVhoZWFhY0NvZGVjSGFuZGxlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJQV9BUElfQ01EX1NFVF9DT05GSUdfUEFSQU0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIElBX0VOSEFBQ1BMVVNfREVDX0NPTkZJR19QQVJBTV9EUkNfQk9PU1QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZ1aV9kcmNfdmFsKTsKKyAgICBSRVRVUk5fSUZfRkFUQUwoZXJyX2NvZGUsICAiSUFfRU5IQUFDUExVU19ERUNfQ09ORklHX1BBUkFNX0RSQ19CT09TVCIpOworCisgICAgLy8gIERSQ19QUkVTX01PREVfV1JBUF9ERVNJUkVEX0hFQVZZCisgICAgaW50MzJfdCBjb21wcmVzc01vZGUgPSBtSW50Zi0+Z2V0RHJjQ29tcHJlc3NNb2RlKCk7CisgICAgQUxPR1YoIkFBQyBkZWNvZGVyIHVzaW5nIGRlc3JpZWQgRFJDIGhlYXZ5IGNvbXByZXNzaW9uIHN3aXRjaCBvZiAlZCIsIGNvbXByZXNzTW9kZSk7CisgICAgdWlfZHJjX3ZhbCA9ICh1bnNpZ25lZCBpbnQpY29tcHJlc3NNb2RlOworCisgICAgZXJyX2NvZGUgPSBpeGhlYWFjZF9kZWNfYXBpKG1YaGVhYWNDb2RlY0hhbmRsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSUFfQVBJX0NNRF9TRVRfQ09ORklHX1BBUkFNLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJQV9FTkhBQUNQTFVTX0RFQ19DT05GSUdfUEFSQU1fRFJDX0hFQVZZX0NPTVAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZ1aV9kcmNfdmFsKTsKKyAgICBSRVRVUk5fSUZfRkFUQUwoZXJyX2NvZGUsICAiSUFfRU5IQUFDUExVU19ERUNfQ09ORklHX1BBUkFNX0RSQ19IRUFWWV9DT01QIik7CisKKyAgICAvLyBBQUNfVU5JRFJDX1NFVF9FRkZFQ1QKKyAgICBpbnQzMl90IGVmZmVjdFR5cGUgPSBtSW50Zi0+Z2V0RHJjRWZmZWN0VHlwZSgpOworICAgIEFMT0dWKCJBQUMgZGVjb2RlciB1c2luZyBNUEVHLUQgRFJDIGVmZmVjdCB0eXBlICVkIiwgZWZmZWN0VHlwZSk7CisgICAgdWlfZHJjX3ZhbCA9ICh1bnNpZ25lZCBpbnQpZWZmZWN0VHlwZTsKKyAgICBlcnJfY29kZSA9IGl4aGVhYWNkX2RlY19hcGkobVhoZWFhY0NvZGVjSGFuZGxlLCBJQV9BUElfQ01EX1NFVF9DT05GSUdfUEFSQU0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIElBX0VOSEFBQ1BMVVNfREVDX0RSQ19FRkZFQ1RfVFlQRSwgJnVpX2RyY192YWwpOworCisgICAgUkVUVVJOX0lGX0ZBVEFMKGVycl9jb2RlLCAiSUFfRU5IQUFDUExVU19ERUNfRFJDX0VGRkVDVF9UWVBFIik7CisKKyAgICByZXR1cm4gSUFfTk9fRVJST1I7Cit9CisKK0lBX0VSUk9SQ09ERSBDMlNvZnRYYWFjRGVjOjpkZUluaXRYQUFDRGVjb2RlcigpIHsKKyAgICBBTE9HVigiZGVJbml0WEFBQ0RlY29kZXIiKTsKKworICAgIC8qIEVycm9yIGNvZGUgKi8KKyAgICBJQV9FUlJPUkNPREUgZXJyX2NvZGUgPSBJQV9OT19FUlJPUjsKKworICAgIGlmIChtWGhlYWFjQ29kZWNIYW5kbGUpIHsKKyAgICAgICAgLyogVGVsbCB0aGF0IHRoZSBpbnB1dCBpcyBvdmVyIGluIHRoaXMgYnVmZmVyICovCisgICAgICAgIGVycl9jb2RlID0gaXhoZWFhY2RfZGVjX2FwaShtWGhlYWFjQ29kZWNIYW5kbGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJQV9BUElfQ01EX0lOUFVUX09WRVIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnVsbHB0cik7CisgICAgfQorCisgICAgLyogSXJyZXNwZWN0aXZlIG9mIGVycm9yIHJldHVybmVkIGluIElBX0FQSV9DTURfSU5QVVRfT1ZFUiwgZnJlZSBhbGxvY2F0ZWQgbWVtb3J5ICovCisgICAgZm9yICh2b2lkKiBidWYgOiBtTWVtb3J5VmVjKSB7CisgICAgICAgIGlmIChidWYpIGZyZWUoYnVmKTsKKyAgICB9CisgICAgbU1lbW9yeVZlYy5jbGVhcigpOworICAgIG1YaGVhYWNDb2RlY0hhbmRsZSA9IG51bGxwdHI7CisKKyAgICByZXR1cm4gZXJyX2NvZGU7Cit9CisKK0lBX0VSUk9SQ09ERSBDMlNvZnRYYWFjRGVjOjpkZUluaXRNUEVHREREcmMoKSB7CisgICAgQUxPR1YoImRlSW5pdE1QRUdERERyYyIpOworCisgICAgZm9yICh2b2lkKiBidWYgOiBtRHJjTWVtb3J5VmVjKSB7CisgICAgICAgIGlmIChidWYpIGZyZWUoYnVmKTsKKyAgICB9CisgICAgbURyY01lbW9yeVZlYy5jbGVhcigpOworICAgIHJldHVybiBJQV9OT19FUlJPUjsKK30KKworSUFfRVJST1JDT0RFIEMyU29mdFhhYWNEZWM6OmNvbmZpZ1hBQUNEZWNvZGVyKHVpbnQ4X3QqIGluQnVmZmVyLCB1aW50MzJfdCBpbkJ1ZmZlckxlbmd0aCkgeworICAgIGlmIChtSW5wdXRCdWZmZXJTaXplIDwgaW5CdWZmZXJMZW5ndGgpIHsKKyAgICAgICAgQUxPR0UoIkNhbm5vdCBjb25maWcgQUFDLCBpbnB1dCBidWZmZXIgc2l6ZSAlZCA8IGluQnVmZmVyTGVuZ3RoICVkIiwgbUlucHV0QnVmZmVyU2l6ZSwgaW5CdWZmZXJMZW5ndGgpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorICAgIC8qIENvcHkgdGhlIGJ1ZmZlciBwYXNzZWQgYnkgQW5kcm9pZCBwbHVnaW4gdG8gY29kZWMgaW5wdXQgYnVmZmVyICovCisgICAgbWVtY3B5KG1JbnB1dEJ1ZmZlciwgaW5CdWZmZXIsIGluQnVmZmVyTGVuZ3RoKTsKKworICAgIC8qIFNldCBudW1iZXIgb2YgYnl0ZXMgdG8gYmUgcHJvY2Vzc2VkICovCisgICAgSUFfRVJST1JDT0RFIGVycl9jb2RlID0gaXhoZWFhY2RfZGVjX2FwaShtWGhlYWFjQ29kZWNIYW5kbGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJQV9BUElfQ01EX1NFVF9JTlBVVF9CWVRFUywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmaW5CdWZmZXJMZW5ndGgpOworICAgIFJFVFVSTl9JRl9GQVRBTChlcnJfY29kZSwgICJJQV9BUElfQ01EX1NFVF9JTlBVVF9CWVRFUyIpOworCisgICAgaWYgKG1Jc0NvZGVjQ29uZmlnRmx1c2hSZXF1aXJlZCkgeworICAgICAgICAvKiBJZiBjb2RlYyBpcyBhbHJlYWR5IGluaXRpYWxpemVkLCB0aGVuIEdBIGhlYWRlciBpcyBwYXNzZWQgYWdhaW4gKi8KKyAgICAgICAgLyogTmVlZCB0byBjYWxsIHRoZSBGbHVzaCBBUEkgaW5zdGVhZCBvZiBJTklUX1BST0NFU1MgKi8KKyAgICAgICAgbUlzQ29kZWNJbml0aWFsaXplZCA9IGZhbHNlOyAvKiBDb2RlYyBuZWVkcyB0byBiZSBSZWluaXRpYWxpemVkIGFmdGVyIGZsdXNoICovCisgICAgICAgIGVycl9jb2RlID0gaXhoZWFhY2RfZGVjX2FwaShtWGhlYWFjQ29kZWNIYW5kbGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJQV9BUElfQ01EX0lOSVQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJQV9DTURfVFlQRV9HQV9IRFIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBudWxscHRyKTsKKyAgICAgICAgUkVUVVJOX0lGX0ZBVEFMKGVycl9jb2RlLCAgIklBX0NNRF9UWVBFX0dBX0hEUiIpOworICAgIH0gZWxzZSB7CisgICAgICAgIC8qIEluaXRpYWxpemUgdGhlIHByb2Nlc3MgKi8KKyAgICAgICAgZXJyX2NvZGUgPSBpeGhlYWFjZF9kZWNfYXBpKG1YaGVhYWNDb2RlY0hhbmRsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIElBX0FQSV9DTURfSU5JVCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIElBX0NNRF9UWVBFX0lOSVRfUFJPQ0VTUywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG51bGxwdHIpOworICAgICAgICBSRVRVUk5fSUZfRkFUQUwoZXJyX2NvZGUsICAiSUFfQ01EX1RZUEVfSU5JVF9QUk9DRVNTIik7CisgICAgfQorCisgICAgdWludDMyX3QgdWlfaW5pdF9kb25lOworICAgIC8qIENoZWNraW5nIGZvciBlbmQgb2YgaW5pdGlhbGl6YXRpb24gKi8KKyAgICBlcnJfY29kZSA9IGl4aGVhYWNkX2RlY19hcGkobVhoZWFhY0NvZGVjSGFuZGxlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJQV9BUElfQ01EX0lOSVQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIElBX0NNRF9UWVBFX0lOSVRfRE9ORV9RVUVSWSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnVpX2luaXRfZG9uZSk7CisgICAgUkVUVVJOX0lGX0ZBVEFMKGVycl9jb2RlLCAgIklBX0NNRF9UWVBFX0lOSVRfRE9ORV9RVUVSWSIpOworCisgICAgLyogSG93IG11Y2ggYnVmZmVyIGlzIHVzZWQgaW4gaW5wdXQgYnVmZmVycyAqLworICAgIGludDMyX3QgaV9ieXRlc19jb25zdW1lZDsKKyAgICBlcnJfY29kZSA9IGl4aGVhYWNkX2RlY19hcGkobVhoZWFhY0NvZGVjSGFuZGxlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJQV9BUElfQ01EX0dFVF9DVVJJRFhfSU5QVVRfQlVGLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmaV9ieXRlc19jb25zdW1lZCk7CisgICAgUkVUVVJOX0lGX0ZBVEFMKGVycl9jb2RlLCAgIklBX0FQSV9DTURfR0VUX0NVUklEWF9JTlBVVF9CVUYiKTsKKworICAgIGlmICh1aV9pbml0X2RvbmUpIHsKKyAgICAgICAgZXJyX2NvZGUgPSBnZXRYQUFDU3RyZWFtSW5mbygpOworICAgICAgICBSRVRVUk5fSUZfRkFUQUwoZXJyX2NvZGUsICJnZXRYQUFDU3RyZWFtSW5mbyIpOworICAgICAgICBBTE9HSSgiRm91bmQgQ29kZWMgd2l0aCBiZWxvdyBjb25maWctLS1cbnNhbXBGcmVxICVkXG5udW1DaGFubmVscyAlZFxucGNtV2RTeiAlZFxuY2hhbm5lbE1hc2sgJWRcbm91dHB1dEZyYW1lTGVuZ3RoICVkIiwKKyAgICAgICAgICAgICAgIG1TYW1wRnJlcSwgbU51bUNoYW5uZWxzLCBtUGNtV2RTeiwgbUNoYW5uZWxNYXNrLCBtT3V0cHV0RnJhbWVMZW5ndGgpOworICAgICAgICBtSXNDb2RlY0luaXRpYWxpemVkID0gdHJ1ZTsKKworICAgICAgICBlcnJfY29kZSA9IGNvbmZpZ01QRUdERHJjKCk7CisgICAgICAgIFJFVFVSTl9JRl9GQVRBTChlcnJfY29kZSwgImNvbmZpZ01QRUdERHJjIik7CisgICAgfQorCisgICAgcmV0dXJuIElBX05PX0VSUk9SOworfQorSUFfRVJST1JDT0RFIEMyU29mdFhhYWNEZWM6OmluaXRNUEVHREREcmMoKSB7CisgICAgSUFfRVJST1JDT0RFIGVycl9jb2RlID0gSUFfTk9fRVJST1I7CisKKyAgICBmb3IgKGludCBpID0gMDsgaSA8IChXT1JEMzIpMjsgaSsrKSB7CisgICAgICAgIFdPUkQzMiB1aV9zaXplLCB1aV9hbGlnbm1lbnQsIHVpX3R5cGU7CisgICAgICAgIHBWT0lEIHB2X2FsbG9jX3B0cjsKKworICAgICAgICAvKiBHZXQgbWVtb3J5IHNpemUgKi8KKyAgICAgICAgZXJyX2NvZGUgPSBpYV9kcmNfZGVjX2FwaShtTXBlZ0REcmNIYW5kbGUsIElBX0FQSV9DTURfR0VUX01FTV9JTkZPX1NJWkUsIGksICZ1aV9zaXplKTsKKworICAgICAgICBSRVRVUk5fSUZfRkFUQUwoZXJyX2NvZGUsICJJQV9BUElfQ01EX0dFVF9NRU1fSU5GT19TSVpFIik7CisKKyAgICAgICAgLyogR2V0IG1lbW9yeSBhbGlnbm1lbnQgKi8KKyAgICAgICAgZXJyX2NvZGUgPQorICAgICAgICAgICAgaWFfZHJjX2RlY19hcGkobU1wZWdERHJjSGFuZGxlLCBJQV9BUElfQ01EX0dFVF9NRU1fSU5GT19BTElHTk1FTlQsIGksICZ1aV9hbGlnbm1lbnQpOworCisgICAgICAgIFJFVFVSTl9JRl9GQVRBTChlcnJfY29kZSwgIklBX0FQSV9DTURfR0VUX01FTV9JTkZPX0FMSUdOTUVOVCIpOworCisgICAgICAgIC8qIEdldCBtZW1vcnkgdHlwZSAqLworICAgICAgICBlcnJfY29kZSA9IGlhX2RyY19kZWNfYXBpKG1NcGVnRERyY0hhbmRsZSwgSUFfQVBJX0NNRF9HRVRfTUVNX0lORk9fVFlQRSwgaSwgJnVpX3R5cGUpOworICAgICAgICBSRVRVUk5fSUZfRkFUQUwoZXJyX2NvZGUsICJJQV9BUElfQ01EX0dFVF9NRU1fSU5GT19UWVBFIik7CisKKyAgICAgICAgcHZfYWxsb2NfcHRyID0gbWVtYWxpZ24oNCwgdWlfc2l6ZSk7CisgICAgICAgIGlmIChwdl9hbGxvY19wdHIgPT0gbnVsbHB0cikgeworICAgICAgICAgICAgQUxPR0UoIiBDYW5ub3QgY3JlYXRlIHJlcXVlc3RlZCBtZW1vcnkgICVkIiwgdWlfc2l6ZSk7CisgICAgICAgICAgICByZXR1cm4gSUFfRkFUQUxfRVJST1I7CisgICAgICAgIH0KKyAgICAgICAgbURyY01lbW9yeVZlYy5wdXNoKHB2X2FsbG9jX3B0cik7CisKKyAgICAgICAgLyogU2V0IHRoZSBidWZmZXIgcG9pbnRlciAqLworICAgICAgICBlcnJfY29kZSA9IGlhX2RyY19kZWNfYXBpKG1NcGVnRERyY0hhbmRsZSwgSUFfQVBJX0NNRF9TRVRfTUVNX1BUUiwgaSwgcHZfYWxsb2NfcHRyKTsKKworICAgICAgICBSRVRVUk5fSUZfRkFUQUwoZXJyX2NvZGUsICJJQV9BUElfQ01EX1NFVF9NRU1fUFRSIik7CisgICAgfQorCisgICAgV09SRDMyIHVpX3NpemU7CisgICAgdWlfc2l6ZSA9IDgxOTIgKiAyOworCisgICAgbURyY0luQnVmID0gKGludDhfdCopbWVtYWxpZ24oNCwgdWlfc2l6ZSk7CisgICAgaWYgKG1EcmNJbkJ1ZiA9PSBudWxscHRyKSB7CisgICAgICAgIEFMT0dFKCIgQ2Fubm90IGNyZWF0ZSByZXF1ZXN0ZWQgbWVtb3J5ICAlZCIsIHVpX3NpemUpOworICAgICAgICByZXR1cm4gSUFfRkFUQUxfRVJST1I7CisgICAgfQorICAgIG1EcmNNZW1vcnlWZWMucHVzaChtRHJjSW5CdWYpOworCisgICAgZXJyX2NvZGUgPSBpYV9kcmNfZGVjX2FwaShtTXBlZ0REcmNIYW5kbGUsIElBX0FQSV9DTURfU0VUX01FTV9QVFIsIDIsIG1EcmNJbkJ1Zik7CisgICAgUkVUVVJOX0lGX0ZBVEFMKGVycl9jb2RlLCAiSUFfQVBJX0NNRF9TRVRfTUVNX1BUUiIpOworCisgICAgbURyY091dEJ1ZiA9IChpbnQ4X3QqKW1lbWFsaWduKDQsIHVpX3NpemUpOworICAgIGlmIChtRHJjT3V0QnVmID09IG51bGxwdHIpIHsKKyAgICAgICAgQUxPR0UoIiBDYW5ub3QgY3JlYXRlIHJlcXVlc3RlZCBtZW1vcnkgICVkIiwgdWlfc2l6ZSk7CisgICAgICAgIHJldHVybiBJQV9GQVRBTF9FUlJPUjsKKyAgICB9CisgICAgbURyY01lbW9yeVZlYy5wdXNoKG1EcmNPdXRCdWYpOworCisgICAgZXJyX2NvZGUgPSBpYV9kcmNfZGVjX2FwaShtTXBlZ0REcmNIYW5kbGUsIElBX0FQSV9DTURfU0VUX01FTV9QVFIsIDMsIG1EcmNPdXRCdWYpOworICAgIFJFVFVSTl9JRl9GQVRBTChlcnJfY29kZSwgIklBX0FQSV9DTURfU0VUX01FTV9QVFIiKTsKKworICAgIHJldHVybiBJQV9OT19FUlJPUjsKK30KK2ludCBDMlNvZnRYYWFjRGVjOjpjb25maWdNUEVHRERyYygpIHsKKyAgICBJQV9FUlJPUkNPREUgZXJyX2NvZGUgPSBJQV9OT19FUlJPUjsKKyAgICBpbnQgaV9lZmZlY3RfdHlwZTsKKyAgICBpbnQgaV9sb3VkX25vcm07CisgICAgaW50IGlfdGFyZ2V0X2xvdWRuZXNzOworICAgIHVuc2lnbmVkIGludCBpX3Nicl9tb2RlOworCisgICAgLyogU2FtcGxpbmcgRnJlcXVlbmN5ICovCisgICAgZXJyX2NvZGUgPSBpYV9kcmNfZGVjX2FwaShtTXBlZ0REcmNIYW5kbGUsIElBX0FQSV9DTURfU0VUX0NPTkZJR19QQVJBTSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIElBX0RSQ19ERUNfQ09ORklHX1BBUkFNX1NBTVBfRlJFUSwgJm1TYW1wRnJlcSk7CisgICAgUkVUVVJOX0lGX0ZBVEFMKGVycl9jb2RlLCAiSUFfRFJDX0RFQ19DT05GSUdfUEFSQU1fU0FNUF9GUkVRIik7CisgICAgLyogVG90YWwgTnVtYmVyIG9mIENoYW5uZWxzICovCisgICAgZXJyX2NvZGUgPSBpYV9kcmNfZGVjX2FwaShtTXBlZ0REcmNIYW5kbGUsIElBX0FQSV9DTURfU0VUX0NPTkZJR19QQVJBTSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIElBX0RSQ19ERUNfQ09ORklHX1BBUkFNX05VTV9DSEFOTkVMUywgJm1OdW1DaGFubmVscyk7CisgICAgUkVUVVJOX0lGX0ZBVEFMKGVycl9jb2RlLCAiSUFfRFJDX0RFQ19DT05GSUdfUEFSQU1fTlVNX0NIQU5ORUxTIik7CisKKyAgICAvKiBQQ00gd29yZCBzaXplICAqLworICAgIGVycl9jb2RlID0gaWFfZHJjX2RlY19hcGkobU1wZWdERHJjSGFuZGxlLCBJQV9BUElfQ01EX1NFVF9DT05GSUdfUEFSQU0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJQV9EUkNfREVDX0NPTkZJR19QQVJBTV9QQ01fV0RTWiwgJm1QY21XZFN6KTsKKyAgICBSRVRVUk5fSUZfRkFUQUwoZXJyX2NvZGUsICJJQV9EUkNfREVDX0NPTkZJR19QQVJBTV9QQ01fV0RTWiIpOworCisgICAgLypTZXQgRWZmZWN0IFR5cGUqLworCisgICAgZXJyX2NvZGUgPSBpeGhlYWFjZF9kZWNfYXBpKG1YaGVhYWNDb2RlY0hhbmRsZSwgSUFfQVBJX0NNRF9HRVRfQ09ORklHX1BBUkFNLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJQV9FTkhBQUNQTFVTX0RFQ19DT05GSUdfUEFSQU1fRFJDX0VGRkVDVF9UWVBFLCAmaV9lZmZlY3RfdHlwZSk7CisgICAgUkVUVVJOX0lGX0ZBVEFMKGVycl9jb2RlLCAiSUFfRU5IQUFDUExVU19ERUNfQ09ORklHX1BBUkFNX0RSQ19FRkZFQ1RfVFlQRSIpOworCisgICAgZXJyX2NvZGUgPSBpYV9kcmNfZGVjX2FwaShtTXBlZ0REcmNIYW5kbGUsIElBX0FQSV9DTURfU0VUX0NPTkZJR19QQVJBTSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIElBX0RSQ19ERUNfQ09ORklHX0RSQ19FRkZFQ1RfVFlQRSwgJmlfZWZmZWN0X3R5cGUpOworICAgIFJFVFVSTl9JRl9GQVRBTChlcnJfY29kZSwgIklBX0RSQ19ERUNfQ09ORklHX0RSQ19FRkZFQ1RfVFlQRSIpOworCisgICAgLypTZXQgdGFyZ2V0IGxvdWRuZXNzICovCisgICAgZXJyX2NvZGUgPSBpeGhlYWFjZF9kZWNfYXBpKG1YaGVhYWNDb2RlY0hhbmRsZSwgSUFfQVBJX0NNRF9HRVRfQ09ORklHX1BBUkFNLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJQV9FTkhBQUNQTFVTX0RFQ19DT05GSUdfUEFSQU1fRFJDX1RBUkdFVF9MT1VETkVTUywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmlfdGFyZ2V0X2xvdWRuZXNzKTsKKyAgICBSRVRVUk5fSUZfRkFUQUwoZXJyX2NvZGUsICJJQV9FTkhBQUNQTFVTX0RFQ19DT05GSUdfUEFSQU1fRFJDX1RBUkdFVF9MT1VETkVTUyIpOworCisgICAgZXJyX2NvZGUgPSBpYV9kcmNfZGVjX2FwaShtTXBlZ0REcmNIYW5kbGUsIElBX0FQSV9DTURfU0VUX0NPTkZJR19QQVJBTSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIElBX0RSQ19ERUNfQ09ORklHX0RSQ19UQVJHRVRfTE9VRE5FU1MsICZpX3RhcmdldF9sb3VkbmVzcyk7CisgICAgUkVUVVJOX0lGX0ZBVEFMKGVycl9jb2RlLCAiSUFfRFJDX0RFQ19DT05GSUdfRFJDX1RBUkdFVF9MT1VETkVTUyIpOworCisgICAgLypTZXQgbG91ZF9ub3JtX2ZsYWcqLworICAgIGVycl9jb2RlID0gaXhoZWFhY2RfZGVjX2FwaShtWGhlYWFjQ29kZWNIYW5kbGUsIElBX0FQSV9DTURfR0VUX0NPTkZJR19QQVJBTSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSUFfRU5IQUFDUExVU19ERUNfQ09ORklHX1BBUkFNX0RSQ19MT1VEX05PUk0sICZpX2xvdWRfbm9ybSk7CisgICAgUkVUVVJOX0lGX0ZBVEFMKGVycl9jb2RlLCAiSUFfRU5IQUFDUExVU19ERUNfQ09ORklHX1BBUkFNX0RSQ19MT1VEX05PUk0iKTsKKworICAgIGVycl9jb2RlID0gaWFfZHJjX2RlY19hcGkobU1wZWdERHJjSGFuZGxlLCBJQV9BUElfQ01EX1NFVF9DT05GSUdfUEFSQU0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJQV9EUkNfREVDX0NPTkZJR19EUkNfTE9VRF9OT1JNLCAmaV9sb3VkX25vcm0pOworICAgIFJFVFVSTl9JRl9GQVRBTChlcnJfY29kZSwgIklBX0RSQ19ERUNfQ09ORklHX0RSQ19MT1VEX05PUk0iKTsKKworICAgIGVycl9jb2RlID0gaXhoZWFhY2RfZGVjX2FwaShtWGhlYWFjQ29kZWNIYW5kbGUsIElBX0FQSV9DTURfR0VUX0NPTkZJR19QQVJBTSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSUFfRU5IQUFDUExVU19ERUNfQ09ORklHX1BBUkFNX1NCUl9NT0RFLCAmaV9zYnJfbW9kZSk7CisgICAgUkVUVVJOX0lGX0ZBVEFMKGVycl9jb2RlLCAiSUFfRU5IQUFDUExVU19ERUNfQ09ORklHX1BBUkFNX1NCUl9NT0RFIik7CisKKyAgICBlcnJfY29kZSA9IGlhX2RyY19kZWNfYXBpKG1NcGVnRERyY0hhbmRsZSwgSUFfQVBJX0NNRF9JTklULAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSUFfQ01EX1RZUEVfSU5JVF9BUElfUE9TVF9DT05GSUdfUEFSQU1TLCBudWxscHRyKTsKKworICAgIFJFVFVSTl9JRl9GQVRBTChlcnJfY29kZSwgIklBX0NNRF9UWVBFX0lOSVRfQVBJX1BPU1RfQ09ORklHX1BBUkFNUyIpOworCisgICAgLyogRnJlZSBhbnkgbWVtb3J5IHRoYXQgaXMgYWxsb2NhdGVkIGZvciBNUEVHIEQgRHJjIHNvIGZhciAqLworICAgIGRlSW5pdE1QRUdERERyYygpOworCisgICAgZXJyX2NvZGUgPSBpbml0TVBFR0RERHJjKCk7CisgICAgaWYgKGVycl9jb2RlICE9IElBX05PX0VSUk9SKSB7CisgICAgICAgIEFMT0dFKCJpbml0TVBFR0RERHJjIGZhaWxlZCB3aXRoIGVycm9yICVkIiwgZXJyX2NvZGUpOworICAgICAgICBkZUluaXRNUEVHREREcmMoKTsKKyAgICAgICAgcmV0dXJuIGVycl9jb2RlOworICAgIH0KKworICAgIC8qIERSQyBidWZmZXJzCisgICAgICAgIGJ1ZlswXSAtIGNvbnRhaW5zIGV4dGVuc2lvbiBlbGVtZW50IHBheSBsb2FkIGxvdWRuZXNzIHJlbGF0ZWQKKyAgICAgICAgYnVmWzFdIC0gY29udGFpbnMgZXh0ZW5zaW9uIGVsZW1lbnQgcGF5IGxvYWQqLworICAgIHsKKyAgICAgICAgVk9JRCogcF9hcnJheVsyXVsxNl07CisgICAgICAgIFdPUkQzMiBpaTsKKyAgICAgICAgV09SRDMyIGJ1Zl9zaXplc1syXVsxNl07CisgICAgICAgIFdPUkQzMiBudW1fZWxlbWVudHM7CisgICAgICAgIFdPUkQzMiBudW1fY29uZmlnX2V4dDsKKyAgICAgICAgV09SRDMyIGJpdF9zdHJfZm10ID0gMTsKKworICAgICAgICBXT1JEMzIgdW9fbnVtX2NoYW47CisKKyAgICAgICAgbWVtc2V0KGJ1Zl9zaXplcywgMCwgMzIgKiBzaXplb2YoV09SRDMyKSk7CisKKyAgICAgICAgZXJyX2NvZGUgPQorICAgICAgICAgICAgaXhoZWFhY2RfZGVjX2FwaShtWGhlYWFjQ29kZWNIYW5kbGUsIElBX0FQSV9DTURfR0VUX0NPTkZJR19QQVJBTSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSUFfRU5IQUFDUExVU19ERUNfQ09ORklHX0VYVF9FTEVfQlVGX1NJWkVTLCAmYnVmX3NpemVzWzBdWzBdKTsKKyAgICAgICAgUkVUVVJOX0lGX0ZBVEFMKGVycl9jb2RlLCAiSUFfRU5IQUFDUExVU19ERUNfQ09ORklHX0VYVF9FTEVfQlVGX1NJWkVTIik7CisKKyAgICAgICAgZXJyX2NvZGUgPSBpeGhlYWFjZF9kZWNfYXBpKG1YaGVhYWNDb2RlY0hhbmRsZSwgSUFfQVBJX0NNRF9HRVRfQ09ORklHX1BBUkFNLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSUFfRU5IQUFDUExVU19ERUNfQ09ORklHX0VYVF9FTEVfUFRSLCAmcF9hcnJheSk7CisgICAgICAgIFJFVFVSTl9JRl9GQVRBTChlcnJfY29kZSwgIklBX0VOSEFBQ1BMVVNfREVDX0NPTkZJR19FWFRfRUxFX1BUUiIpOworCisgICAgICAgIGVycl9jb2RlID0KKyAgICAgICAgICAgIGlhX2RyY19kZWNfYXBpKG1NcGVnRERyY0hhbmRsZSwgSUFfQVBJX0NNRF9JTklULCBJQV9DTURfVFlQRV9JTklUX1NFVF9CVUZGX1BUUiwgbnVsbHB0cik7CisgICAgICAgIFJFVFVSTl9JRl9GQVRBTChlcnJfY29kZSwgIklBX0NNRF9UWVBFX0lOSVRfU0VUX0JVRkZfUFRSIik7CisKKyAgICAgICAgZXJyX2NvZGUgPSBpeGhlYWFjZF9kZWNfYXBpKG1YaGVhYWNDb2RlY0hhbmRsZSwgSUFfQVBJX0NNRF9HRVRfQ09ORklHX1BBUkFNLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSUFfRU5IQUFDUExVU19ERUNfQ09ORklHX05VTV9FTEUsICZudW1fZWxlbWVudHMpOworICAgICAgICBSRVRVUk5fSUZfRkFUQUwoZXJyX2NvZGUsICJJQV9FTkhBQUNQTFVTX0RFQ19DT05GSUdfTlVNX0VMRSIpOworCisgICAgICAgIGVycl9jb2RlID0gaXhoZWFhY2RfZGVjX2FwaShtWGhlYWFjQ29kZWNIYW5kbGUsIElBX0FQSV9DTURfR0VUX0NPTkZJR19QQVJBTSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIElBX0VOSEFBQ1BMVVNfREVDX0NPTkZJR19OVU1fQ09ORklHX0VYVCwgJm51bV9jb25maWdfZXh0KTsKKyAgICAgICAgUkVUVVJOX0lGX0ZBVEFMKGVycl9jb2RlLCAiSUFfRU5IQUFDUExVU19ERUNfQ09ORklHX05VTV9DT05GSUdfRVhUIik7CisKKyAgICAgICAgZm9yIChpaSA9IDA7IGlpIDwgbnVtX2NvbmZpZ19leHQ7IGlpKyspIHsKKyAgICAgICAgICAgIC8qY29weSBsb3VkbmVzcyBiaXRzdHJlYW0qLworICAgICAgICAgICAgaWYgKGJ1Zl9zaXplc1swXVtpaV0gPiAwKSB7CisgICAgICAgICAgICAgICAgbWVtY3B5KG1EcmNJbkJ1ZiwgcF9hcnJheVswXVtpaV0sIGJ1Zl9zaXplc1swXVtpaV0pOworCisgICAgICAgICAgICAgICAgLypTZXQgYml0c3RyZWFtX3NwbGl0X2Zvcm1hdCAqLworICAgICAgICAgICAgICAgIGVycl9jb2RlID0gaWFfZHJjX2RlY19hcGkobU1wZWdERHJjSGFuZGxlLCBJQV9BUElfQ01EX1NFVF9DT05GSUdfUEFSQU0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJQV9EUkNfREVDX0NPTkZJR19QQVJBTV9CSVRTX0ZPUk1BVCwgJmJpdF9zdHJfZm10KTsKKyAgICAgICAgICAgICAgICBSRVRVUk5fSUZfRkFUQUwoZXJyX2NvZGUsICJJQV9EUkNfREVDX0NPTkZJR19QQVJBTV9CSVRTX0ZPUk1BVCIpOworCisgICAgICAgICAgICAgICAgLyogU2V0IG51bWJlciBvZiBieXRlcyB0byBiZSBwcm9jZXNzZWQgKi8KKyAgICAgICAgICAgICAgICBlcnJfY29kZSA9IGlhX2RyY19kZWNfYXBpKG1NcGVnRERyY0hhbmRsZSwgSUFfQVBJX0NNRF9TRVRfSU5QVVRfQllURVNfSUxfQlMsIDAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmYnVmX3NpemVzWzBdW2lpXSk7CisgICAgICAgICAgICAgICAgUkVUVVJOX0lGX0ZBVEFMKGVycl9jb2RlLCAiSUFfQVBJX0NNRF9TRVRfSU5QVVRfQllURVNfSUxfQlMiKTsKKworICAgICAgICAgICAgICAgIC8qIEV4ZWN1dGUgcHJvY2VzcyAqLworICAgICAgICAgICAgICAgIGVycl9jb2RlID0gaWFfZHJjX2RlY19hcGkobU1wZWdERHJjSGFuZGxlLCBJQV9BUElfQ01EX0lOSVQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJQV9DTURfVFlQRV9JTklUX0NQWV9JTF9CU0ZfQlVGRiwgbnVsbHB0cik7CisgICAgICAgICAgICAgICAgUkVUVVJOX0lGX0ZBVEFMKGVycl9jb2RlLCAiSUFfQ01EX1RZUEVfSU5JVF9DUFlfSUxfQlNGX0JVRkYiKTsKKworICAgICAgICAgICAgICAgIG1EUkNGbGFnID0gMTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIGZvciAoaWkgPSAwOyBpaSA8IG51bV9lbGVtZW50czsgaWkrKykgeworICAgICAgICAgICAgLypjb3B5IGNvbmZpZyBiaXRzdHJlYW0qLworICAgICAgICAgICAgaWYgKGJ1Zl9zaXplc1sxXVtpaV0gPiAwKSB7CisgICAgICAgICAgICAgICAgbWVtY3B5KG1EcmNJbkJ1ZiwgcF9hcnJheVsxXVtpaV0sIGJ1Zl9zaXplc1sxXVtpaV0pOworICAgICAgICAgICAgICAgIC8qIFNldCBudW1iZXIgb2YgYnl0ZXMgdG8gYmUgcHJvY2Vzc2VkICovCisKKyAgICAgICAgICAgICAgICAvKlNldCBiaXRzdHJlYW1fc3BsaXRfZm9ybWF0ICovCisgICAgICAgICAgICAgICAgZXJyX2NvZGUgPSBpYV9kcmNfZGVjX2FwaShtTXBlZ0REcmNIYW5kbGUsIElBX0FQSV9DTURfU0VUX0NPTkZJR19QQVJBTSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIElBX0RSQ19ERUNfQ09ORklHX1BBUkFNX0JJVFNfRk9STUFULCAmYml0X3N0cl9mbXQpOworICAgICAgICAgICAgICAgIFJFVFVSTl9JRl9GQVRBTChlcnJfY29kZSwgIklBX0RSQ19ERUNfQ09ORklHX1BBUkFNX0JJVFNfRk9STUFUIik7CisKKyAgICAgICAgICAgICAgICBlcnJfY29kZSA9IGlhX2RyY19kZWNfYXBpKG1NcGVnRERyY0hhbmRsZSwgSUFfQVBJX0NNRF9TRVRfSU5QVVRfQllURVNfSUNfQlMsIDAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmYnVmX3NpemVzWzFdW2lpXSk7CisgICAgICAgICAgICAgICAgUkVUVVJOX0lGX0ZBVEFMKGVycl9jb2RlLCAiSUFfQVBJX0NNRF9TRVRfSU5QVVRfQllURVNfSUNfQlMiKTsKKworICAgICAgICAgICAgICAgIC8qIEV4ZWN1dGUgcHJvY2VzcyAqLworICAgICAgICAgICAgICAgIGVycl9jb2RlID0gaWFfZHJjX2RlY19hcGkobU1wZWdERHJjSGFuZGxlLCBJQV9BUElfQ01EX0lOSVQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJQV9DTURfVFlQRV9JTklUX0NQWV9JQ19CU0ZfQlVGRiwgbnVsbHB0cik7CisKKyAgICAgICAgICAgICAgICBSRVRVUk5fSUZfRkFUQUwoZXJyX2NvZGUsICJJQV9DTURfVFlQRV9JTklUX0NQWV9JQ19CU0ZfQlVGRiIpOworCisgICAgICAgICAgICAgICAgbURSQ0ZsYWcgPSAxOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgaWYgKG1EUkNGbGFnID09IDEpIHsKKyAgICAgICAgICAgIG1NcGVnRERSQ1ByZXNlbnQgPSAxOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgbU1wZWdERFJDUHJlc2VudCA9IDA7CisgICAgICAgIH0KKworICAgICAgICAvKlJlYWQgaW50ZXJmYWNlIGJ1ZmZlciBjb25maWcgZmlsZSBiaXRzdHJlYW0qLworICAgICAgICBpZiAobU1wZWdERFJDUHJlc2VudCA9PSAxKSB7CisgICAgICAgICAgICBXT1JEMzIgaW50ZXJmYWNlX2lzX3ByZXNlbnQgPSAxOworCisgICAgICAgICAgICBpZiAoaV9zYnJfbW9kZSAhPSAwKSB7CisgICAgICAgICAgICAgICAgaWYgKGlfc2JyX21vZGUgPT0gMSkgeworICAgICAgICAgICAgICAgICAgICBtT3V0cHV0RnJhbWVMZW5ndGggPSAyMDQ4OworICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoaV9zYnJfbW9kZSA9PSAzKSB7CisgICAgICAgICAgICAgICAgICAgIG1PdXRwdXRGcmFtZUxlbmd0aCA9IDQwOTY7CisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgbU91dHB1dEZyYW1lTGVuZ3RoID0gMTAyNDsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIG1PdXRwdXRGcmFtZUxlbmd0aCA9IDQwOTY7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGVycl9jb2RlID0gaWFfZHJjX2RlY19hcGkobU1wZWdERHJjSGFuZGxlLCBJQV9BUElfQ01EX1NFVF9DT05GSUdfUEFSQU0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIElBX0RSQ19ERUNfQ09ORklHX1BBUkFNX0ZSQU1FX1NJWkUsIChXT1JEMzIgKikmbU91dHB1dEZyYW1lTGVuZ3RoKTsKKyAgICAgICAgICAgIFJFVFVSTl9JRl9GQVRBTChlcnJfY29kZSwgIklBX0RSQ19ERUNfQ09ORklHX1BBUkFNX0ZSQU1FX1NJWkUiKTsKKworICAgICAgICAgICAgZXJyX2NvZGUgPQorICAgICAgICAgICAgICAgIGlhX2RyY19kZWNfYXBpKG1NcGVnRERyY0hhbmRsZSwgSUFfQVBJX0NNRF9TRVRfQ09ORklHX1BBUkFNLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIElBX0RSQ19ERUNfQ09ORklHX1BBUkFNX0lOVF9QUkVTRU5ULCAmaW50ZXJmYWNlX2lzX3ByZXNlbnQpOworICAgICAgICAgICAgUkVUVVJOX0lGX0ZBVEFMKGVycl9jb2RlLCAiSUFfRFJDX0RFQ19DT05GSUdfUEFSQU1fSU5UX1BSRVNFTlQiKTsKKworICAgICAgICAgICAgLyogRXhlY3V0ZSBwcm9jZXNzICovCisgICAgICAgICAgICBlcnJfY29kZSA9IGlhX2RyY19kZWNfYXBpKG1NcGVnRERyY0hhbmRsZSwgSUFfQVBJX0NNRF9JTklULAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJQV9DTURfVFlQRV9JTklUX0NQWV9JTl9CU0ZfQlVGRiwgbnVsbHB0cik7CisgICAgICAgICAgICBSRVRVUk5fSUZfRkFUQUwoZXJyX2NvZGUsICJJQV9DTURfVFlQRV9JTklUX0NQWV9JTl9CU0ZfQlVGRiIpOworCisgICAgICAgICAgICBlcnJfY29kZSA9IGlhX2RyY19kZWNfYXBpKG1NcGVnRERyY0hhbmRsZSwgSUFfQVBJX0NNRF9JTklULAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJQV9DTURfVFlQRV9JTklUX1BST0NFU1MsIG51bGxwdHIpOworICAgICAgICAgICAgUkVUVVJOX0lGX0ZBVEFMKGVycl9jb2RlLCAiSUFfQ01EX1RZUEVfSU5JVF9QUk9DRVNTIik7CisKKyAgICAgICAgICAgIGVycl9jb2RlID0gaWFfZHJjX2RlY19hcGkobU1wZWdERHJjSGFuZGxlLCBJQV9BUElfQ01EX0dFVF9DT05GSUdfUEFSQU0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIElBX0RSQ19ERUNfQ09ORklHX1BBUkFNX05VTV9DSEFOTkVMUywgJnVvX251bV9jaGFuKTsKKyAgICAgICAgICAgIFJFVFVSTl9JRl9GQVRBTChlcnJfY29kZSwgIklBX0RSQ19ERUNfQ09ORklHX1BBUkFNX05VTV9DSEFOTkVMUyIpOworICAgICAgICB9CisgICAgfQorCisgICAgcmV0dXJuIGVycl9jb2RlOworfQorCitJQV9FUlJPUkNPREUgQzJTb2Z0WGFhY0RlYzo6ZGVjb2RlWEFBQ1N0cmVhbSh1aW50OF90KiBpbkJ1ZmZlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90IGluQnVmZmVyTGVuZ3RoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50MzJfdCogYnl0ZXNDb25zdW1lZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludDMyX3QqIG91dEJ5dGVzKSB7CisgICAgaWYgKG1JbnB1dEJ1ZmZlclNpemUgPCBpbkJ1ZmZlckxlbmd0aCkgeworICAgICAgICBBTE9HRSgiQ2Fubm90IGNvbmZpZyBBQUMsIGlucHV0IGJ1ZmZlciBzaXplICVkIDwgaW5CdWZmZXJMZW5ndGggJWQiLCBtSW5wdXRCdWZmZXJTaXplLCBpbkJ1ZmZlckxlbmd0aCk7CisgICAgICAgIHJldHVybiAtMTsKKyAgICB9CisgICAgLyogQ29weSB0aGUgYnVmZmVyIHBhc3NlZCBieSBBbmRyb2lkIHBsdWdpbiB0byBjb2RlYyBpbnB1dCBidWZmZXIgKi8KKyAgICBtZW1jcHkobUlucHV0QnVmZmVyLCBpbkJ1ZmZlciwgaW5CdWZmZXJMZW5ndGgpOworCisgICAgLyogU2V0IG51bWJlciBvZiBieXRlcyB0byBiZSBwcm9jZXNzZWQgKi8KKyAgICBJQV9FUlJPUkNPREUgZXJyX2NvZGUgPSBpeGhlYWFjZF9kZWNfYXBpKG1YaGVhYWNDb2RlY0hhbmRsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIElBX0FQSV9DTURfU0VUX0lOUFVUX0JZVEVTLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZpbkJ1ZmZlckxlbmd0aCk7CisgICAgUkVUVVJOX0lGX0ZBVEFMKGVycl9jb2RlLCAgIklBX0FQSV9DTURfU0VUX0lOUFVUX0JZVEVTIik7CisKKyAgICAvKiBFeGVjdXRlIHByb2Nlc3MgKi8KKyAgICBlcnJfY29kZSA9IGl4aGVhYWNkX2RlY19hcGkobVhoZWFhY0NvZGVjSGFuZGxlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJQV9BUElfQ01EX0VYRUNVVEUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIElBX0NNRF9UWVBFX0RPX0VYRUNVVEUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG51bGxwdHIpOworICAgIFJFVFVSTl9JRl9GQVRBTChlcnJfY29kZSwgICJJQV9DTURfVFlQRV9ET19FWEVDVVRFIik7CisKKyAgICAvKiBDaGVja2luZyBmb3IgZW5kIG9mIHByb2Nlc3NpbmcgKi8KKyAgICB1aW50MzJfdCB1aV9leGVjX2RvbmU7CisgICAgZXJyX2NvZGUgPSBpeGhlYWFjZF9kZWNfYXBpKG1YaGVhYWNDb2RlY0hhbmRsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSUFfQVBJX0NNRF9FWEVDVVRFLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJQV9DTURfVFlQRV9ET05FX1FVRVJZLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmdWlfZXhlY19kb25lKTsKKyAgICBSRVRVUk5fSUZfRkFUQUwoZXJyX2NvZGUsICAiSUFfQ01EX1RZUEVfRE9ORV9RVUVSWSIpOworCisgICAgaWYgKHVpX2V4ZWNfZG9uZSAhPSAxKSB7CisgICAgICAgIFZPSUQqIHBfYXJyYXk7ICAgICAgICAvLyBJVFRJQU06YnVmZmVyIHRvIGhhbmRsZSBnYWluIHBheWxvYWQKKyAgICAgICAgV09SRDMyIGJ1Zl9zaXplID0gMDsgIC8vIElUVElBTTpnYWluIHBheWxvYWQgbGVuZ3RoCisgICAgICAgIFdPUkQzMiBiaXRfc3RyX2ZtdCA9IDE7CisgICAgICAgIFdPUkQzMiBnYWluX3N0cmVhbV9mbGFnID0gMTsKKworICAgICAgICBlcnJfY29kZSA9IGl4aGVhYWNkX2RlY19hcGkobVhoZWFhY0NvZGVjSGFuZGxlLCBJQV9BUElfQ01EX0dFVF9DT05GSUdfUEFSQU0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJQV9FTkhBQUNQTFVTX0RFQ19DT05GSUdfR0FJTl9QQVlMT0FEX0xFTiwgJmJ1Zl9zaXplKTsKKyAgICAgICAgUkVUVVJOX0lGX0ZBVEFMKGVycl9jb2RlLCAiSUFfRU5IQUFDUExVU19ERUNfQ09ORklHX0dBSU5fUEFZTE9BRF9MRU4iKTsKKworICAgICAgICBlcnJfY29kZSA9IGl4aGVhYWNkX2RlY19hcGkobVhoZWFhY0NvZGVjSGFuZGxlLCBJQV9BUElfQ01EX0dFVF9DT05GSUdfUEFSQU0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJQV9FTkhBQUNQTFVTX0RFQ19DT05GSUdfR0FJTl9QQVlMT0FEX0JVRiwgJnBfYXJyYXkpOworICAgICAgICBSRVRVUk5fSUZfRkFUQUwoZXJyX2NvZGUsICJJQV9FTkhBQUNQTFVTX0RFQ19DT05GSUdfR0FJTl9QQVlMT0FEX0JVRiIpOworCisgICAgICAgIGlmIChidWZfc2l6ZSA+IDApIHsKKyAgICAgICAgICAgIC8qU2V0IGJpdHN0cmVhbV9zcGxpdF9mb3JtYXQgKi8KKyAgICAgICAgICAgIGVycl9jb2RlID0gaWFfZHJjX2RlY19hcGkobU1wZWdERHJjSGFuZGxlLCBJQV9BUElfQ01EX1NFVF9DT05GSUdfUEFSQU0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIElBX0RSQ19ERUNfQ09ORklHX1BBUkFNX0JJVFNfRk9STUFULCAmYml0X3N0cl9mbXQpOworICAgICAgICAgICAgUkVUVVJOX0lGX0ZBVEFMKGVycl9jb2RlLCAiSUFfRFJDX0RFQ19DT05GSUdfUEFSQU1fQklUU19GT1JNQVQiKTsKKworICAgICAgICAgICAgbWVtY3B5KG1EcmNJbkJ1ZiwgcF9hcnJheSwgYnVmX3NpemUpOworICAgICAgICAgICAgLyogU2V0IG51bWJlciBvZiBieXRlcyB0byBiZSBwcm9jZXNzZWQgKi8KKyAgICAgICAgICAgIGVycl9jb2RlID0KKyAgICAgICAgICAgICAgICBpYV9kcmNfZGVjX2FwaShtTXBlZ0REcmNIYW5kbGUsIElBX0FQSV9DTURfU0VUX0lOUFVUX0JZVEVTX0JTLCAwLCAmYnVmX3NpemUpOworICAgICAgICAgICAgUkVUVVJOX0lGX0ZBVEFMKGVycl9jb2RlLCAiSUFfRFJDX0RFQ19DT05GSUdfUEFSQU1fQklUU19GT1JNQVQiKTsKKworICAgICAgICAgICAgZXJyX2NvZGUgPSBpYV9kcmNfZGVjX2FwaShtTXBlZ0REcmNIYW5kbGUsIElBX0FQSV9DTURfU0VUX0NPTkZJR19QQVJBTSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSUFfRFJDX0RFQ19DT05GSUdfR0FJTl9TVFJFQU1fRkxBRywgJmdhaW5fc3RyZWFtX2ZsYWcpOworICAgICAgICAgICAgUkVUVVJOX0lGX0ZBVEFMKGVycl9jb2RlLCAiSUFfRFJDX0RFQ19DT05GSUdfUEFSQU1fQklUU19GT1JNQVQiKTsKKworICAgICAgICAgICAgLyogRXhlY3V0ZSBwcm9jZXNzICovCisgICAgICAgICAgICBlcnJfY29kZSA9IGlhX2RyY19kZWNfYXBpKG1NcGVnRERyY0hhbmRsZSwgSUFfQVBJX0NNRF9JTklULAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJQV9DTURfVFlQRV9JTklUX0NQWV9CU0ZfQlVGRiwgbnVsbHB0cik7CisgICAgICAgICAgICBSRVRVUk5fSUZfRkFUQUwoZXJyX2NvZGUsICJJQV9EUkNfREVDX0NPTkZJR19QQVJBTV9CSVRTX0ZPUk1BVCIpOworCisgICAgICAgICAgICBtTXBlZ0REUkNQcmVzZW50ID0gMTsKKyAgICAgICAgfQorICAgIH0KKworICAgIC8qIEhvdyBtdWNoIGJ1ZmZlciBpcyB1c2VkIGluIGlucHV0IGJ1ZmZlcnMgKi8KKyAgICBlcnJfY29kZSA9IGl4aGVhYWNkX2RlY19hcGkobVhoZWFhY0NvZGVjSGFuZGxlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJQV9BUElfQ01EX0dFVF9DVVJJRFhfSU5QVVRfQlVGLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBieXRlc0NvbnN1bWVkKTsKKyAgICBSRVRVUk5fSUZfRkFUQUwoZXJyX2NvZGUsICAiSUFfQVBJX0NNRF9HRVRfQ1VSSURYX0lOUFVUX0JVRiIpOworCisgICAgLyogR2V0IHRoZSBvdXRwdXQgYnl0ZXMgKi8KKyAgICBlcnJfY29kZSA9IGl4aGVhYWNkX2RlY19hcGkobVhoZWFhY0NvZGVjSGFuZGxlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJQV9BUElfQ01EX0dFVF9PVVRQVVRfQllURVMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG91dEJ5dGVzKTsKKyAgICBSRVRVUk5fSUZfRkFUQUwoZXJyX2NvZGUsICAiSUFfQVBJX0NNRF9HRVRfT1VUUFVUX0JZVEVTIik7CisKKyAgICBpZiAobU1wZWdERFJDUHJlc2VudCA9PSAxKSB7CisgICAgICAgIG1lbWNweShtRHJjSW5CdWYsIG1PdXRwdXRCdWZmZXIsICpvdXRCeXRlcyk7CisgICAgICAgIGVycl9jb2RlID0gaWFfZHJjX2RlY19hcGkobU1wZWdERHJjSGFuZGxlLCBJQV9BUElfQ01EX1NFVF9JTlBVVF9CWVRFUywgMCwgb3V0Qnl0ZXMpOworICAgICAgICBSRVRVUk5fSUZfRkFUQUwoZXJyX2NvZGUsICJJQV9BUElfQ01EX1NFVF9JTlBVVF9CWVRFUyIpOworCisgICAgICAgIGVycl9jb2RlID0KKyAgICAgICAgICAgIGlhX2RyY19kZWNfYXBpKG1NcGVnRERyY0hhbmRsZSwgSUFfQVBJX0NNRF9FWEVDVVRFLCBJQV9DTURfVFlQRV9ET19FWEVDVVRFLCBudWxscHRyKTsKKyAgICAgICAgUkVUVVJOX0lGX0ZBVEFMKGVycl9jb2RlLCAiSUFfQ01EX1RZUEVfRE9fRVhFQ1VURSIpOworCisgICAgICAgIG1lbWNweShtT3V0cHV0QnVmZmVyLCBtRHJjT3V0QnVmLCAqb3V0Qnl0ZXMpOworICAgIH0KKyAgICByZXR1cm4gSUFfTk9fRVJST1I7Cit9CisKK0lBX0VSUk9SQ09ERSBDMlNvZnRYYWFjRGVjOjpnZXRYQUFDU3RyZWFtSW5mbygpIHsKKyAgICBJQV9FUlJPUkNPREUgZXJyX2NvZGUgPSBJQV9OT19FUlJPUjsKKworICAgIC8qIFNhbXBsaW5nIGZyZXF1ZW5jeSAqLworICAgIGVycl9jb2RlID0gaXhoZWFhY2RfZGVjX2FwaShtWGhlYWFjQ29kZWNIYW5kbGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIElBX0FQSV9DTURfR0VUX0NPTkZJR19QQVJBTSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSUFfRU5IQUFDUExVU19ERUNfQ09ORklHX1BBUkFNX1NBTVBfRlJFUSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJm1TYW1wRnJlcSk7CisgICAgUkVUVVJOX0lGX0ZBVEFMKGVycl9jb2RlLCAgIklBX0VOSEFBQ1BMVVNfREVDX0NPTkZJR19QQVJBTV9TQU1QX0ZSRVEiKTsKKworICAgIC8qIFRvdGFsIE51bWJlciBvZiBDaGFubmVscyAqLworICAgIGVycl9jb2RlID0gaXhoZWFhY2RfZGVjX2FwaShtWGhlYWFjQ29kZWNIYW5kbGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIElBX0FQSV9DTURfR0VUX0NPTkZJR19QQVJBTSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSUFfRU5IQUFDUExVU19ERUNfQ09ORklHX1BBUkFNX05VTV9DSEFOTkVMUywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJm1OdW1DaGFubmVscyk7CisgICAgUkVUVVJOX0lGX0ZBVEFMKGVycl9jb2RlLCAgIklBX0VOSEFBQ1BMVVNfREVDX0NPTkZJR19QQVJBTV9OVU1fQ0hBTk5FTFMiKTsKKyAgICBpZiAobU51bUNoYW5uZWxzID4gTUFYX0NIQU5ORUxfQ09VTlQpIHsKKyAgICAgICAgQUxPR0UoIiBObyBvZiBjaGFubmVscyBhcmUgbW9yZSB0aGFuIG1heCBjaGFubmVsc1xuIik7CisgICAgICAgIHJldHVybiBJQV9GQVRBTF9FUlJPUjsKKyAgICB9CisKKyAgICAvKiBQQ00gd29yZCBzaXplICovCisgICAgZXJyX2NvZGUgPSBpeGhlYWFjZF9kZWNfYXBpKG1YaGVhYWNDb2RlY0hhbmRsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSUFfQVBJX0NNRF9HRVRfQ09ORklHX1BBUkFNLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJQV9FTkhBQUNQTFVTX0RFQ19DT05GSUdfUEFSQU1fUENNX1dEU1osCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZtUGNtV2RTeik7CisgICAgUkVUVVJOX0lGX0ZBVEFMKGVycl9jb2RlLCAgIklBX0VOSEFBQ1BMVVNfREVDX0NPTkZJR19QQVJBTV9QQ01fV0RTWiIpOworICAgIGlmICgobVBjbVdkU3ogLyA4KSAhPSAyKSB7CisgICAgICAgIEFMT0dFKCIgTm8gb2YgY2hhbm5lbHMgYXJlIG1vcmUgdGhhbiBtYXggY2hhbm5lbHNcbiIpOworICAgICAgICByZXR1cm4gSUFfRkFUQUxfRVJST1I7CisgICAgfQorCisgICAgLyogY2hhbm5lbCBtYXNrIHRvIHRlbGwgdGhlIGFycmFuZ2VtZW50IG9mIGNoYW5uZWxzIGluIGJpdCBzdHJlYW0gKi8KKyAgICBlcnJfY29kZSA9IGl4aGVhYWNkX2RlY19hcGkobVhoZWFhY0NvZGVjSGFuZGxlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJQV9BUElfQ01EX0dFVF9DT05GSUdfUEFSQU0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIElBX0VOSEFBQ1BMVVNfREVDX0NPTkZJR19QQVJBTV9DSEFOTkVMX01BU0ssCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZtQ2hhbm5lbE1hc2spOworICAgIFJFVFVSTl9JRl9GQVRBTChlcnJfY29kZSwgICJJQV9FTkhBQUNQTFVTX0RFQ19DT05GSUdfUEFSQU1fQ0hBTk5FTF9NQVNLIik7CisKKyAgICAvKiBDaGFubmVsIG1vZGUgdG8gdGVsbCBNT05PL1NURVJFTy9EVUFMLU1PTk8vTk9ORV9PRl9USEVTRSAqLworICAgIHVpbnQzMl90IHVpX2NoYW5uZWxfbW9kZTsKKyAgICBlcnJfY29kZSA9IGl4aGVhYWNkX2RlY19hcGkobVhoZWFhY0NvZGVjSGFuZGxlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJQV9BUElfQ01EX0dFVF9DT05GSUdfUEFSQU0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIElBX0VOSEFBQ1BMVVNfREVDX0NPTkZJR19QQVJBTV9DSEFOTkVMX01PREUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZ1aV9jaGFubmVsX21vZGUpOworICAgIFJFVFVSTl9JRl9GQVRBTChlcnJfY29kZSwgICJJQV9FTkhBQUNQTFVTX0RFQ19DT05GSUdfUEFSQU1fQ0hBTk5FTF9NT0RFIik7CisgICAgaWYgKHVpX2NoYW5uZWxfbW9kZSA9PSAwKQorICAgICAgICBBTE9HVigiQ2hhbm5lbCBNb2RlOiBNT05PX09SX1BTXG4iKTsKKyAgICBlbHNlIGlmICh1aV9jaGFubmVsX21vZGUgPT0gMSkKKyAgICAgICAgQUxPR1YoIkNoYW5uZWwgTW9kZTogU1RFUkVPXG4iKTsKKyAgICBlbHNlIGlmICh1aV9jaGFubmVsX21vZGUgPT0gMikKKyAgICAgICAgQUxPR1YoIkNoYW5uZWwgTW9kZTogRFVBTC1NT05PXG4iKTsKKyAgICBlbHNlCisgICAgICAgIEFMT0dWKCJDaGFubmVsIE1vZGU6IE5PTkVfT0ZfVEhFU0Ugb3IgTVVMVElDSEFOTkVMXG4iKTsKKworICAgIC8qIENoYW5uZWwgbW9kZSB0byB0ZWxsIFNCUiBQUkVTRU5UL05PVF9QUkVTRU5UICovCisgICAgdWludDMyX3QgdWlfc2JyX21vZGU7CisgICAgZXJyX2NvZGUgPSBpeGhlYWFjZF9kZWNfYXBpKG1YaGVhYWNDb2RlY0hhbmRsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSUFfQVBJX0NNRF9HRVRfQ09ORklHX1BBUkFNLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJQV9FTkhBQUNQTFVTX0RFQ19DT05GSUdfUEFSQU1fU0JSX01PREUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZ1aV9zYnJfbW9kZSk7CisgICAgUkVUVVJOX0lGX0ZBVEFMKGVycl9jb2RlLCAgIklBX0VOSEFBQ1BMVVNfREVDX0NPTkZJR19QQVJBTV9TQlJfTU9ERSIpOworICAgIGlmICh1aV9zYnJfbW9kZSA9PSAwKQorICAgICAgICBBTE9HVigiU0JSIE1vZGU6IE5PVF9QUkVTRU5UXG4iKTsKKyAgICBlbHNlIGlmICh1aV9zYnJfbW9kZSA9PSAxKQorICAgICAgICBBTE9HVigiU0JSIE1vZGU6IFBSRVNFTlRcbiIpOworICAgIGVsc2UKKyAgICAgICAgQUxPR1YoIlNCUiBNb2RlOiBJTExFR0FMXG4iKTsKKworICAgIC8qIG1PdXRwdXRGcmFtZUxlbmd0aCA9IDEwMjQgKiAoMSArIFNCUl9NT0RFKSBmb3IgQUFDICovCisgICAgLyogRm9yIFVTQUMgaXQgY291bGQgYmUgMTAyNCAqIDMgLCBzdXBwb3J0IHRvIHF1ZXJ5ICAqLworICAgIC8qIG5vdCB5ZXQgYWRkZWQgaW4gY29kZWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICBtT3V0cHV0RnJhbWVMZW5ndGggPSAxMDI0ICogKDEgKyB1aV9zYnJfbW9kZSk7CisgICAgQUxPR0koIm1PdXRwdXRGcmFtZUxlbmd0aCAlZCB1aV9zYnJfbW9kZSAlZCIsIG1PdXRwdXRGcmFtZUxlbmd0aCwgdWlfc2JyX21vZGUpOworCisgICAgcmV0dXJuIElBX05PX0VSUk9SOworfQorCitJQV9FUlJPUkNPREUgQzJTb2Z0WGFhY0RlYzo6c2V0WEFBQ0RSQ0luZm8oaW50MzJfdCBkcmNDdXQsIGludDMyX3QgZHJjQm9vc3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50MzJfdCBkcmNSZWZMZXZlbCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQzMl90IGRyY0hlYXZ5Q29tcHJlc3Npb24sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50MzJfdCBkckVmZmVjdFR5cGUpIHsKKyAgICBJQV9FUlJPUkNPREUgZXJyX2NvZGUgPSBJQV9OT19FUlJPUjsKKworICAgIGludDMyX3QgdWlfZHJjX2VuYWJsZSA9IDE7CisgICAgZXJyX2NvZGUgPSBpeGhlYWFjZF9kZWNfYXBpKG1YaGVhYWNDb2RlY0hhbmRsZSwgSUFfQVBJX0NNRF9TRVRfQ09ORklHX1BBUkFNLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJQV9FTkhBQUNQTFVTX0RFQ19DT05GSUdfUEFSQU1fRFJDX0VOQUJMRSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnVpX2RyY19lbmFibGUpOworICAgIFJFVFVSTl9JRl9GQVRBTChlcnJfY29kZSwgIklBX0VOSEFBQ1BMVVNfREVDX0NPTkZJR19QQVJBTV9EUkNfRU5BQkxFIik7CisgICAgaWYgKGRyY0N1dCAhPSAtMSkgeworICAgICAgICBlcnJfY29kZSA9CisgICAgICAgICAgICBpeGhlYWFjZF9kZWNfYXBpKG1YaGVhYWNDb2RlY0hhbmRsZSwgSUFfQVBJX0NNRF9TRVRfQ09ORklHX1BBUkFNLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJQV9FTkhBQUNQTFVTX0RFQ19DT05GSUdfUEFSQU1fRFJDX0NVVCwgJmRyY0N1dCk7CisgICAgICAgIFJFVFVSTl9JRl9GQVRBTChlcnJfY29kZSwgIklBX0VOSEFBQ1BMVVNfREVDX0NPTkZJR19QQVJBTV9EUkNfQ1VUIik7CisgICAgfQorCisgICAgaWYgKGRyY0Jvb3N0ICE9IC0xKSB7CisgICAgICAgIGVycl9jb2RlID0gaXhoZWFhY2RfZGVjX2FwaSgKKyAgICAgICAgICAgIG1YaGVhYWNDb2RlY0hhbmRsZSwgSUFfQVBJX0NNRF9TRVRfQ09ORklHX1BBUkFNLAorICAgICAgICAgICAgSUFfRU5IQUFDUExVU19ERUNfQ09ORklHX1BBUkFNX0RSQ19CT09TVCwgJmRyY0Jvb3N0KTsKKyAgICAgICAgUkVUVVJOX0lGX0ZBVEFMKGVycl9jb2RlLCAiSUFfRU5IQUFDUExVU19ERUNfQ09ORklHX1BBUkFNX0RSQ19CT09TVCIpOworICAgIH0KKworICAgIGlmIChkcmNSZWZMZXZlbCAhPSAtMSkgeworICAgICAgICBlcnJfY29kZSA9IGl4aGVhYWNkX2RlY19hcGkoCisgICAgICAgICAgICBtWGhlYWFjQ29kZWNIYW5kbGUsIElBX0FQSV9DTURfU0VUX0NPTkZJR19QQVJBTSwKKyAgICAgICAgICAgIElBX0VOSEFBQ1BMVVNfREVDX0NPTkZJR19QQVJBTV9EUkNfVEFSR0VUX0xFVkVMLCAmZHJjUmVmTGV2ZWwpOworICAgICAgICBSRVRVUk5fSUZfRkFUQUwoZXJyX2NvZGUsCisgICAgICAgICAgICAgICAgICAgICAgICAiSUFfRU5IQUFDUExVU19ERUNfQ09ORklHX1BBUkFNX0RSQ19UQVJHRVRfTEVWRUwiKTsKKyAgICB9CisKKyAgICBpZiAoZHJjUmVmTGV2ZWwgIT0gLTEpIHsKKyAgICAgICAgZXJyX2NvZGUgPSBpeGhlYWFjZF9kZWNfYXBpKAorICAgICAgICAgICAgbVhoZWFhY0NvZGVjSGFuZGxlLCBJQV9BUElfQ01EX1NFVF9DT05GSUdfUEFSQU0sCisgICAgICAgICAgICBJQV9FTkhBQUNQTFVTX0RFQ19EUkNfVEFSR0VUX0xPVURORVNTLCAmZHJjUmVmTGV2ZWwpOworICAgICAgICBSRVRVUk5fSUZfRkFUQUwoZXJyX2NvZGUsICJJQV9FTkhBQUNQTFVTX0RFQ19EUkNfVEFSR0VUX0xPVURORVNTIik7CisgICAgfQorCisgICAgaWYgKGRyY0hlYXZ5Q29tcHJlc3Npb24gIT0gLTEpIHsKKyAgICAgICAgZXJyX2NvZGUgPQorICAgICAgICAgICAgaXhoZWFhY2RfZGVjX2FwaShtWGhlYWFjQ29kZWNIYW5kbGUsIElBX0FQSV9DTURfU0VUX0NPTkZJR19QQVJBTSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSUFfRU5IQUFDUExVU19ERUNfQ09ORklHX1BBUkFNX0RSQ19IRUFWWV9DT01QLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmZHJjSGVhdnlDb21wcmVzc2lvbik7CisgICAgICAgIFJFVFVSTl9JRl9GQVRBTChlcnJfY29kZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICJJQV9FTkhBQUNQTFVTX0RFQ19DT05GSUdfUEFSQU1fRFJDX0hFQVZZX0NPTVAiKTsKKyAgICB9CisKKyAgICBlcnJfY29kZSA9CisgICAgICAgIGl4aGVhYWNkX2RlY19hcGkobVhoZWFhY0NvZGVjSGFuZGxlLCBJQV9BUElfQ01EX1NFVF9DT05GSUdfUEFSQU0sCisgICAgICAgICAgICAgICAgICAgICAgICAgSUFfRU5IQUFDUExVU19ERUNfRFJDX0VGRkVDVF9UWVBFLCAmZHJFZmZlY3RUeXBlKTsKKyAgICBSRVRVUk5fSUZfRkFUQUwoZXJyX2NvZGUsICJJQV9FTkhBQUNQTFVTX0RFQ19EUkNfRUZGRUNUX1RZUEUiKTsKKworICAgIGludDMyX3QgaV9lZmZlY3RfdHlwZSwgaV90YXJnZXRfbG91ZG5lc3MsIGlfbG91ZF9ub3JtOworICAgIC8qU2V0IEVmZmVjdCBUeXBlKi8KKyAgICBlcnJfY29kZSA9IGl4aGVhYWNkX2RlY19hcGkobVhoZWFhY0NvZGVjSGFuZGxlLCBJQV9BUElfQ01EX0dFVF9DT05GSUdfUEFSQU0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIElBX0VOSEFBQ1BMVVNfREVDX0NPTkZJR19QQVJBTV9EUkNfRUZGRUNUX1RZUEUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZpX2VmZmVjdF90eXBlKTsKKyAgICBSRVRVUk5fSUZfRkFUQUwoZXJyX2NvZGUsICJJQV9FTkhBQUNQTFVTX0RFQ19DT05GSUdfUEFSQU1fRFJDX0VGRkVDVF9UWVBFIik7CisKKyAgICBlcnJfY29kZSA9CisgICAgICAgIGlhX2RyY19kZWNfYXBpKG1NcGVnRERyY0hhbmRsZSwgSUFfQVBJX0NNRF9TRVRfQ09ORklHX1BBUkFNLAorICAgICAgICAgICAgICAgICAgICAgICBJQV9EUkNfREVDX0NPTkZJR19EUkNfRUZGRUNUX1RZUEUsICZpX2VmZmVjdF90eXBlKTsKKworICAgIFJFVFVSTl9JRl9GQVRBTChlcnJfY29kZSwgIklBX0RSQ19ERUNfQ09ORklHX0RSQ19FRkZFQ1RfVFlQRSIpOworCisgICAgLypTZXQgdGFyZ2V0IGxvdWRuZXNzICovCisgICAgZXJyX2NvZGUgPSBpeGhlYWFjZF9kZWNfYXBpKAorICAgICAgICBtWGhlYWFjQ29kZWNIYW5kbGUsIElBX0FQSV9DTURfR0VUX0NPTkZJR19QQVJBTSwKKyAgICAgICAgSUFfRU5IQUFDUExVU19ERUNfQ09ORklHX1BBUkFNX0RSQ19UQVJHRVRfTE9VRE5FU1MsICZpX3RhcmdldF9sb3VkbmVzcyk7CisgICAgUkVUVVJOX0lGX0ZBVEFMKGVycl9jb2RlLAorICAgICAgICAgICAgICAgICAgICAiSUFfRU5IQUFDUExVU19ERUNfQ09ORklHX1BBUkFNX0RSQ19UQVJHRVRfTE9VRE5FU1MiKTsKKworICAgIGVycl9jb2RlID0gaWFfZHJjX2RlY19hcGkobU1wZWdERHJjSGFuZGxlLCBJQV9BUElfQ01EX1NFVF9DT05GSUdfUEFSQU0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJQV9EUkNfREVDX0NPTkZJR19EUkNfVEFSR0VUX0xPVURORVNTLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmlfdGFyZ2V0X2xvdWRuZXNzKTsKKyAgICBSRVRVUk5fSUZfRkFUQUwoZXJyX2NvZGUsICJJQV9EUkNfREVDX0NPTkZJR19EUkNfVEFSR0VUX0xPVURORVNTIik7CisKKyAgICAvKlNldCBsb3VkX25vcm1fZmxhZyovCisgICAgZXJyX2NvZGUgPSBpeGhlYWFjZF9kZWNfYXBpKG1YaGVhYWNDb2RlY0hhbmRsZSwgSUFfQVBJX0NNRF9HRVRfQ09ORklHX1BBUkFNLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJQV9FTkhBQUNQTFVTX0RFQ19DT05GSUdfUEFSQU1fRFJDX0xPVURfTk9STSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmlfbG91ZF9ub3JtKTsKKyAgICBSRVRVUk5fSUZfRkFUQUwoZXJyX2NvZGUsICJJQV9FTkhBQUNQTFVTX0RFQ19DT05GSUdfUEFSQU1fRFJDX0xPVURfTk9STSIpOworCisgICAgZXJyX2NvZGUgPSBpYV9kcmNfZGVjX2FwaShtTXBlZ0REcmNIYW5kbGUsIElBX0FQSV9DTURfU0VUX0NPTkZJR19QQVJBTSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIElBX0RSQ19ERUNfQ09ORklHX0RSQ19MT1VEX05PUk0sICZpX2xvdWRfbm9ybSk7CisKKyAgICBSRVRVUk5fSUZfRkFUQUwoZXJyX2NvZGUsICJJQV9EUkNfREVDX0NPTkZJR19EUkNfTE9VRF9OT1JNIik7CisKKyAgICByZXR1cm4gSUFfTk9fRVJST1I7Cit9CisKK2NsYXNzIEMyU29mdFhhYWNEZWNGYWN0b3J5IDogcHVibGljIEMyQ29tcG9uZW50RmFjdG9yeSB7CitwdWJsaWM6CisgICAgQzJTb2Z0WGFhY0RlY0ZhY3RvcnkoKSA6IG1IZWxwZXIoc3RkOjpzdGF0aWNfcG9pbnRlcl9jYXN0PEMyUmVmbGVjdG9ySGVscGVyPigKKyAgICAgICAgICAgIEdldENvZGVjMlBsYXRmb3JtQ29tcG9uZW50U3RvcmUoKS0+Z2V0UGFyYW1SZWZsZWN0b3IoKSkpIHsKKyAgICB9CisKKyAgICB2aXJ0dWFsIGMyX3N0YXR1c190IGNyZWF0ZUNvbXBvbmVudCgKKyAgICAgICAgICAgIGMyX25vZGVfaWRfdCBpZCwKKyAgICAgICAgICAgIHN0ZDo6c2hhcmVkX3B0cjxDMkNvbXBvbmVudD4qIGNvbnN0IGNvbXBvbmVudCwKKyAgICAgICAgICAgIHN0ZDo6ZnVuY3Rpb248dm9pZChDMkNvbXBvbmVudCopPiBkZWxldGVyKSBvdmVycmlkZSB7CisgICAgICAgICpjb21wb25lbnQgPSBzdGQ6OnNoYXJlZF9wdHI8QzJDb21wb25lbnQ+KAorICAgICAgICAgICAgICAgIG5ldyBDMlNvZnRYYWFjRGVjKENPTVBPTkVOVF9OQU1FLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZDo6bWFrZV9zaGFyZWQ8QzJTb2Z0WGFhY0RlYzo6SW50ZkltcGw+KG1IZWxwZXIpKSwKKyAgICAgICAgICAgICAgICBkZWxldGVyKTsKKyAgICAgICAgcmV0dXJuIEMyX09LOworICAgIH0KKworICAgIHZpcnR1YWwgYzJfc3RhdHVzX3QgY3JlYXRlSW50ZXJmYWNlKAorICAgICAgICAgICAgYzJfbm9kZV9pZF90IGlkLAorICAgICAgICAgICAgc3RkOjpzaGFyZWRfcHRyPEMyQ29tcG9uZW50SW50ZXJmYWNlPiogY29uc3QgaW50ZXJmYWNlLAorICAgICAgICAgICAgc3RkOjpmdW5jdGlvbjx2b2lkKEMyQ29tcG9uZW50SW50ZXJmYWNlKik+IGRlbGV0ZXIpIG92ZXJyaWRlIHsKKyAgICAgICAgKmludGVyZmFjZSA9IHN0ZDo6c2hhcmVkX3B0cjxDMkNvbXBvbmVudEludGVyZmFjZT4oCisgICAgICAgICAgICAgICAgbmV3IFNpbXBsZUludGVyZmFjZTxDMlNvZnRYYWFjRGVjOjpJbnRmSW1wbD4oCisgICAgICAgICAgICAgICAgICAgICAgICBDT01QT05FTlRfTkFNRSwgaWQsIHN0ZDo6bWFrZV9zaGFyZWQ8QzJTb2Z0WGFhY0RlYzo6SW50ZkltcGw+KG1IZWxwZXIpKSwKKyAgICAgICAgICAgICAgICBkZWxldGVyKTsKKyAgICAgICAgcmV0dXJuIEMyX09LOworICAgIH0KKworICAgIHZpcnR1YWwgfkMyU29mdFhhYWNEZWNGYWN0b3J5KCkgb3ZlcnJpZGUgPSBkZWZhdWx0OworCitwcml2YXRlOgorICAgIHN0ZDo6c2hhcmVkX3B0cjxDMlJlZmxlY3RvckhlbHBlcj4gbUhlbHBlcjsKK307CisKK30gIC8vIG5hbWVzcGFjZSBhbmRyb2lkCisKK2V4dGVybiAiQyIgOjpDMkNvbXBvbmVudEZhY3RvcnkqIENyZWF0ZUNvZGVjMkZhY3RvcnkoKSB7CisgICAgQUxPR1YoImluICVzIiwgX19mdW5jX18pOworICAgIHJldHVybiBuZXcgOjphbmRyb2lkOjpDMlNvZnRYYWFjRGVjRmFjdG9yeSgpOworfQorCitleHRlcm4gIkMiIHZvaWQgRGVzdHJveUNvZGVjMkZhY3RvcnkoOjpDMkNvbXBvbmVudEZhY3RvcnkqIGZhY3RvcnkpIHsKKyAgICBBTE9HVigiaW4gJXMiLCBfX2Z1bmNfXyk7CisgICAgZGVsZXRlIGZhY3Rvcnk7Cit9CmRpZmYgLS1naXQgYS9tZWRpYS9jb2RlYzIvY29tcG9uZW50cy94YWFjL0MyU29mdFhhYWNEZWMuaCBiL21lZGlhL2NvZGVjMi9jb21wb25lbnRzL3hhYWMvQzJTb2Z0WGFhY0RlYy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVjODU2N2YKLS0tIC9kZXYvbnVsbAorKysgYi9tZWRpYS9jb2RlYzIvY29tcG9uZW50cy94YWFjL0MyU29mdFhhYWNEZWMuaApAQCAtMCwwICsxLDEzMSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxOCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCisKKyNpZm5kZWYgQU5EUk9JRF9DMl9TT0ZUX1hBQUNfREVDX0hfCisjZGVmaW5lIEFORFJPSURfQzJfU09GVF9YQUFDX0RFQ19IXworI2luY2x1ZGUgPHV0aWxzL1ZlY3Rvci5oPgorI2luY2x1ZGUgPFNpbXBsZUMyQ29tcG9uZW50Lmg+CisKKyNpbmNsdWRlICJpeGhlYWFjZF90eXBlX2RlZi5oIgorI2luY2x1ZGUgIml4aGVhYWNkX2Vycm9yX3N0YW5kYXJkcy5oIgorI2luY2x1ZGUgIml4aGVhYWNkX2Vycm9yX2hhbmRsZXIuaCIKKyNpbmNsdWRlICJpeGhlYWFjZF9hcGljbWRfc3RhbmRhcmRzLmgiCisjaW5jbHVkZSAiaXhoZWFhY2RfbWVtb3J5X3N0YW5kYXJkcy5oIgorI2luY2x1ZGUgIml4aGVhYWNkX2FhY19jb25maWcuaCIKKworI2luY2x1ZGUgImltcGRfYXBpY21kX3N0YW5kYXJkcy5oIgorI2luY2x1ZGUgImltcGRfZHJjX2NvbmZpZ19wYXJhbXMuaCIKKworI2RlZmluZSBNQVhfQ0hBTk5FTF9DT1VOVCAgICAgICAgICAgOCAgLyogbWF4aW11bSBudW1iZXIgb2YgYXVkaW8gY2hhbm5lbHMgdGhhdCBjYW4gYmUgZGVjb2RlZCAqLworI2RlZmluZSBNQVhfTlVNX0JMT0NLUyAgICAgICAgICAgICAgOCAgLyogbWF4aW11bSBudW1iZXIgb2YgYXVkaW8gYmxvY2tzIHRoYXQgY2FuIGJlIGRlY29kZWQgKi8KKworZXh0ZXJuICJDIiBJQV9FUlJPUkNPREUgaXhoZWFhY2RfZGVjX2FwaShwVk9JRCBwX2lhX21vZHVsZV9vYmosCisgICAgICAgICAgICAgICAgICAgICAgICBXT1JEMzIgaV9jbWQsIFdPUkQzMiBpX2lkeCwgcFZPSUQgcHZfdmFsdWUpOworZXh0ZXJuICJDIiBJQV9FUlJPUkNPREUgaWFfZHJjX2RlY19hcGkocFZPSUQgcF9pYV9tb2R1bGVfb2JqLAorICAgICAgICAgICAgICAgICAgICAgICAgV09SRDMyIGlfY21kLCBXT1JEMzIgaV9pZHgsIHBWT0lEIHB2X3ZhbHVlKTsKK2V4dGVybiAiQyIgIElBX0VSUk9SQ09ERSBpeGhlYWFjZF9nZXRfY29uZmlnX3BhcmFtKHBWT0lEIHBfaWFfcHJvY2Vzc19hcGlfb2JqLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcFdPUkQzMiBwaV9zYW1wX2ZyZXEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwV09SRDMyIHBpX251bV9jaGFuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcFdPUkQzMiBwaV9wY21fd2Rfc3osCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwV09SRDMyIHBpX2NoYW5uZWxfbWFzayk7CisKK25hbWVzcGFjZSBhbmRyb2lkIHsKKworc3RydWN0IEMyU29mdFhhYWNEZWMgOiBwdWJsaWMgU2ltcGxlQzJDb21wb25lbnQgeworICAgIGNsYXNzIEludGZJbXBsOworCisgICAgQzJTb2Z0WGFhY0RlYyhjb25zdCBjaGFyKiBuYW1lLCBjMl9ub2RlX2lkX3QgaWQsCisgICAgICAgICAgICAgICBjb25zdCBzdGQ6OnNoYXJlZF9wdHI8SW50ZkltcGw+JiBpbnRmSW1wbCk7CisgICAgdmlydHVhbCB+QzJTb2Z0WGFhY0RlYygpOworCisgICAgLy8gRnJvbSBTaW1wbGVDMkNvbXBvbmVudAorICAgIGMyX3N0YXR1c190IG9uSW5pdCgpIG92ZXJyaWRlOworICAgIGMyX3N0YXR1c190IG9uU3RvcCgpIG92ZXJyaWRlOworICAgIHZvaWQgb25SZXNldCgpIG92ZXJyaWRlOworICAgIHZvaWQgb25SZWxlYXNlKCkgb3ZlcnJpZGU7CisgICAgYzJfc3RhdHVzX3Qgb25GbHVzaF9zbSgpIG92ZXJyaWRlOworICAgIHZvaWQgcHJvY2VzcygKKyAgICAgICAgICAgIGNvbnN0IHN0ZDo6dW5pcXVlX3B0cjxDMldvcms+ICZ3b3JrLAorICAgICAgICAgICAgY29uc3Qgc3RkOjpzaGFyZWRfcHRyPEMyQmxvY2tQb29sPiAmcG9vbCkgb3ZlcnJpZGU7CisgICAgYzJfc3RhdHVzX3QgZHJhaW4oCisgICAgICAgICAgICB1aW50MzJfdCBkcmFpbk1vZGUsCisgICAgICAgICAgICBjb25zdCBzdGQ6OnNoYXJlZF9wdHI8QzJCbG9ja1Bvb2w+ICZwb29sKSBvdmVycmlkZTsKKworcHJpdmF0ZToKKyAgICBlbnVtIHsKKyAgICAgICAga091dHB1dERyYWluQnVmZmVyU2l6ZSAgICAgID0gMjA0OCAqIE1BWF9DSEFOTkVMX0NPVU5UICogTUFYX05VTV9CTE9DS1MsCisgICAgfTsKKworICAgIHN0ZDo6c2hhcmVkX3B0cjxJbnRmSW1wbD4gbUludGY7CisgICAgdm9pZCogbVhoZWFhY0NvZGVjSGFuZGxlOworICAgIHZvaWQqIG1NcGVnRERyY0hhbmRsZTsKKyAgICB1aW50MzJfdCBtSW5wdXRCdWZmZXJTaXplOworICAgIHVpbnQzMl90IG1PdXRwdXRGcmFtZUxlbmd0aDsKKyAgICBpbnQ4X3QqIG1JbnB1dEJ1ZmZlcjsKKyAgICBpbnQ4X3QqIG1PdXRwdXRCdWZmZXI7CisgICAgaW50MzJfdCBtU2FtcEZyZXE7CisgICAgaW50MzJfdCBtTnVtQ2hhbm5lbHM7CisgICAgaW50MzJfdCBtUGNtV2RTejsKKyAgICBpbnQzMl90IG1DaGFubmVsTWFzazsKKyAgICBpbnQzMl90IG1OdW1PdXRCeXRlczsKKyAgICB1aW50NjRfdCBtQ3VyRnJhbWVJbmRleDsKKyAgICB1aW50NjRfdCBtQ3VyVGltZXN0YW1wOworICAgIGJvb2wgbUlzQ29kZWNJbml0aWFsaXplZDsKKyAgICBib29sIG1Jc0NvZGVjQ29uZmlnRmx1c2hSZXF1aXJlZDsKKyAgICBpbnQ4X3QqIG1EcmNJbkJ1ZjsKKyAgICBpbnQ4X3QqIG1EcmNPdXRCdWY7CisgICAgaW50MzJfdCBtTXBlZ0REUkNQcmVzZW50OworICAgIGludDMyX3QgbURSQ0ZsYWc7CisKKyAgICBWZWN0b3I8dm9pZCo+IG1NZW1vcnlWZWM7CisgICAgVmVjdG9yPHZvaWQqPiBtRHJjTWVtb3J5VmVjOworCisgICAgc2l6ZV90IG1JbnB1dEJ1ZmZlckNvdW50IF9fdW51c2VkOworICAgIHNpemVfdCBtT3V0cHV0QnVmZmVyQ291bnQgX191bnVzZWQ7CisgICAgYm9vbCBtU2lnbmFsbGVkT3V0cHV0RW9zOworICAgIGJvb2wgbVNpZ25hbGxlZEVycm9yOworICAgIGNoYXIqIG1PdXRwdXREcmFpbkJ1ZmZlcjsKKyAgICB1aW50MzJfdCBtT3V0cHV0RHJhaW5CdWZmZXJXcml0ZVBvczsKKworICAgIElBX0VSUk9SQ09ERSBpbml0RGVjb2RlcigpOworICAgIElBX0VSUk9SQ09ERSBzZXREcmNQYXJhbWV0ZXIoKTsKKyAgICBJQV9FUlJPUkNPREUgY29uZmlnZmx1c2hEZWNvZGUoKTsKKyAgICBJQV9FUlJPUkNPREUgZHJhaW5EZWNvZGVyKCk7CisgICAgdm9pZCBmaW5pc2hXb3JrKGNvbnN0IHN0ZDo6dW5pcXVlX3B0cjxDMldvcms+JiB3b3JrLAorICAgICAgICAgICAgICAgICAgICBjb25zdCBzdGQ6OnNoYXJlZF9wdHI8QzJCbG9ja1Bvb2w+JiBwb29sKTsKKworICAgIElBX0VSUk9SQ09ERSBpbml0WEFBQ0RyYygpOworICAgIElBX0VSUk9SQ09ERSBpbml0WEFBQ0RlY29kZXIoKTsKKyAgICBJQV9FUlJPUkNPREUgZGVJbml0WEFBQ0RlY29kZXIoKTsKKyAgICBJQV9FUlJPUkNPREUgaW5pdE1QRUdERERyYygpOworICAgIElBX0VSUk9SQ09ERSBkZUluaXRNUEVHREREcmMoKTsKKyAgICBJQV9FUlJPUkNPREUgY29uZmlnWEFBQ0RlY29kZXIodWludDhfdCogaW5CdWZmZXIsIHVpbnQzMl90IGluQnVmZmVyTGVuZ3RoKTsKKyAgICBpbnQgY29uZmlnTVBFR0REcmMoKTsKKyAgICBJQV9FUlJPUkNPREUgZGVjb2RlWEFBQ1N0cmVhbSh1aW50OF90KiBpbkJ1ZmZlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCBpbkJ1ZmZlckxlbmd0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICBpbnQzMl90KiBieXRlc0NvbnN1bWVkLAorICAgICAgICAgICAgICAgICAgICAgICAgIGludDMyX3QqIG91dEJ5dGVzKTsKKyAgICBJQV9FUlJPUkNPREUgZ2V0WEFBQ1N0cmVhbUluZm8oKTsKKyAgICBJQV9FUlJPUkNPREUgc2V0WEFBQ0RSQ0luZm8oaW50MzJfdCBkcmNDdXQsIGludDMyX3QgZHJjQm9vc3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludDMyX3QgZHJjUmVmTGV2ZWwsIGludDMyX3QgZHJjSGVhdnlDb21wcmVzc2lvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50MzJfdCBkckVmZmVjdFR5cGUpOworCisgICAgQzJfRE9fTk9UX0NPUFkoQzJTb2Z0WGFhY0RlYyk7Cit9OworCit9ICAvLyBuYW1lc3BhY2UgYW5kcm9pZAorCisjZW5kaWYgIC8vIEMyX1NPRlRfWEFBQ19IXwpkaWZmIC0tZ2l0IGEvbWVkaWEvY29kZWMyL2NvcmUvQW5kcm9pZC5icCBiL21lZGlhL2NvZGVjMi9jb3JlL0FuZHJvaWQuYnAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjcyMzc1NQotLS0gL2Rldi9udWxsCisrKyBiL21lZGlhL2NvZGVjMi9jb3JlL0FuZHJvaWQuYnAKQEAgLTAsMCArMSw0NSBAQAorY2NfbGlicmFyeV9oZWFkZXJzIHsKKyAgICBuYW1lOiAibGliY29kZWMyX2hlYWRlcnMiLAorICAgIHZlbmRvcl9hdmFpbGFibGU6IHRydWUsCisgICAgZXhwb3J0X2luY2x1ZGVfZGlyczogWyJpbmNsdWRlIl0sCit9CisKK2NjX2xpYnJhcnlfc2hhcmVkIHsKKyAgICBuYW1lOiAibGliY29kZWMyIiwKKyAgICB2ZW5kb3JfYXZhaWxhYmxlOiB0cnVlLAorCisgICAgc3JjczogWyJDMi5jcHAiXSwKKworICAgIGNmbGFnczogWworICAgICAgICAiLVdhbGwiLAorICAgICAgICAiLVdlcnJvciIsCisgICAgXSwKKworICAgIGhlYWRlcl9saWJzOiBbCisgICAgICAgICJsaWJjb2RlYzJfaGVhZGVycyIsCisgICAgICAgICJsaWJoYXJkd2FyZV9oZWFkZXJzIiwKKyAgICAgICAgImxpYnV0aWxzX2hlYWRlcnMiLAorICAgICAgICAibWVkaWFfcGx1Z2luX2hlYWRlcnMiLAorICAgIF0sCisKKyAgICBleHBvcnRfaGVhZGVyX2xpYl9oZWFkZXJzOiBbCisgICAgICAgICJsaWJjb2RlYzJfaGVhZGVycyIsCisgICAgICAgICJsaWJoYXJkd2FyZV9oZWFkZXJzIiwKKyAgICAgICAgImxpYnV0aWxzX2hlYWRlcnMiLAorICAgICAgICAibWVkaWFfcGx1Z2luX2hlYWRlcnMiLAorICAgIF0sCisKKyAgICBzYW5pdGl6ZTogeworICAgICAgICBtaXNjX3VuZGVmaW5lZDogWworICAgICAgICAgICAgInVuc2lnbmVkLWludGVnZXItb3ZlcmZsb3ciLAorICAgICAgICAgICAgInNpZ25lZC1pbnRlZ2VyLW92ZXJmbG93IiwKKyAgICAgICAgXSwKKyAgICAgICAgY2ZpOiBmYWxzZSwgLy8gdHJ1ZSwKKyAgICAgICAgZGlhZzogeworICAgICAgICAgICAgY2ZpOiBmYWxzZSwgLy8gdHJ1ZSwKKyAgICAgICAgfSwKKyAgICB9LAorCisgICAgbGRmbGFnczogWyItV2wsLUJzeW1ib2xpYyJdLAorfQorCmRpZmYgLS1naXQgYS9tZWRpYS9jb2RlYzIvY29yZS9DMi5jcHAgYi9tZWRpYS9jb2RlYzIvY29yZS9DMi5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzU5ZDRlNQotLS0gL2Rldi9udWxsCisrKyBiL21lZGlhL2NvZGVjMi9jb3JlL0MyLmNwcApAQCAtMCwwICsxLDMzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE2IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KKworI2luY2x1ZGUgPEMyLmg+CisjaW5jbHVkZSA8QzJCdWZmZXIuaD4KKyNpbmNsdWRlIDxDMkNvbXBvbmVudC5oPgorI2luY2x1ZGUgPEMyQ29uZmlnLmg+CisjaW5jbHVkZSA8QzJQYXJhbS5oPgorI2luY2x1ZGUgPEMyUGFyYW1EZWYuaD4KKyNpbmNsdWRlIDxDMldvcmsuaD4KKworLyoqCisgKiBUaGVyZSBpcyBub3RoaW5nIGhlcmUgeWV0LiBUaGlzIGxpYnJhcnkgaXMgYnVpbHQgdG8gc2VlIHdoYXQgc3ltYm9scyBhbmQgbWV0aG9kcyBnZXQKKyAqIGRlZmluZWQgYXMgcGFydCBvZiB0aGUgQVBJIGluY2x1ZGUgZmlsZXMuCisgKgorICogR29pbmcgZm9yd2FyZCwgdGhlIENvZGVjMiBsaWJyYXJ5IHdpbGwgY29udGFpbiB1dGlsaXR5IG1ldGhvZHMgdGhhdCBhcmUgdXNlZnVsIGZvcgorICogQ29kZWMyIGNsaWVudHMuCisgKi8KKworCmRpZmYgLS1naXQgYS9tZWRpYS9jb2RlYzIvY29yZS9pbmNsdWRlL0MyLmggYi9tZWRpYS9jb2RlYzIvY29yZS9pbmNsdWRlL0MyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGE1NWY4ZAotLS0gL2Rldi9udWxsCisrKyBiL21lZGlhL2NvZGVjMi9jb3JlL2luY2x1ZGUvQzIuaApAQCAtMCwwICsxLDU1MiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNiBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCisKKyNpZm5kZWYgQzJfSF8KKyNkZWZpbmUgQzJfSF8KKworI2luY2x1ZGUgPGVycm5vLmg+CisKKyNpbmNsdWRlIDxzdHJpbmc+CisKKy8qKiBuYW5vc2Vjb25kcyB3aXRoIGFyYml0cmFyeSBvcmlnaW4uICovCit0eXBlZGVmIGludDY0X3QgYzJfbnNlY3NfdDsKKworLyoqIFxtYWlucGFnZSBDb2RlYzIKKyAqCisgKiBDb2RlYzIgaXMgYSBnZW5lcmljIGZyYW1lLWJhc2VkIGRhdGEgcHJvY2Vzc2luZyBBUEkuCisgKgorICogVGhlIG1lZGlhIHN1YnN5c3RlbSBhY2Nlc3NlcyBjb21wb25lbnRzIHZpYSB0aGUgXHJlZiBBUEkuCisgKi8KKworLyoqIFxpbmdyb3VwIEFQSQorICoKKyAqIFRoZSBDb2RlYzIgQVBJIGRlZmluZXMgdGhlIG9wZXJhdGlvbiBvZiBkYXRhIHByb2Nlc3NpbmcgY29tcG9uZW50cyBhbmQgdGhlaXIgaW50ZXJhY3Rpb24gd2l0aAorICogdGhlIHJlc3Qgb2YgdGhlIHN5c3RlbS4KKyAqCisgKiBDb2RpbmcgQ29udmVudGlvbnMKKyAqCisgKiBNaXRpZ2F0aW5nIEJpbmFyeSBDb21wYXRpYmlsaXR5LgorICoKKyAqIFdoaWxlIGZ1bGwgYmluYXJ5IGNvbXBhdGliaWxpdHkgaXMgbm90IGEgZ29hbCBvZiB0aGUgQVBJIChkdWUgdG8gb3VyIHVzZSBvZiBTVEwpLCB3ZSB0cnkgdG8KKyAqIG1pdGlnYXRlIGJpbmFyeSBicmVha3MgYnkgYWRoZXJpbmcgdG8gdGhlIGZvbGxvd2luZyBjb252ZW50aW9uczoKKyAqCisgKiAtIGF0IG1vc3Qgb25lIHZ0YWJsZSB3aXRoIHBsYWNlaG9sZGVyIHZpcnR1YWwgbWV0aG9kcworICogLSBhbGwgb3B0aW9uYWwvcGxhY2Vob2xkZXIgdmlydHVhbCBtZXRob2RzIHJldHVybmluZyBhIGMyX3N0YXR1c190LCB3aXRoIEMyX09NSVRURUQgbm90IHJlcXVpcmluZworICogICBhbnkgdXBkYXRlIHRvIGlucHV0L291dHB1dCBhcmd1bWVudHMuCisgKiAtIGxpbWl0aW5nIHN5bWJvbCBleHBvcnQgb2YgaW5saW5lIG1ldGhvZHMKKyAqIC0gdXNlIG9mIHBpbXBsIChvciBzaGFyZWQtcGltcGwpCisgKgorICogTmFtaW5nCisgKgorICogLSBhbGwgY2xhc3NlcyBhbmQgdHlwZXMgcHJlZml4IHdpdGggQzIKKyAqIC0gY2xhc3NlcyBmb3IgaW50ZXJuYWwgdXNlIHByZWZpeCB3aXRoIF9DMgorICogLSBlbnVtIHZhbHVlcyBpbiBnbG9iYWwgbmFtZXNwYWNlIHByZWZpeCB3aXRoIEMyXyBhbGwgY2FwcworICogLSBlbnVtIHZhbHVlcyBpbnNpZGUgY2xhc3NlcyBoYXZlIG5vIEMyXyBwcmVmaXggYXMgY2xhc3MgYWxyZWFkeSBoYXMgaXQKKyAqIC0gc3VwcG9ydGluZyB0d28ga2luZHMgb2YgZW51bSBuYW1pbmc6IGFsbC1jYXBzIGFuZCBrQ2FtZWxDYXNlCisgKiBcdG9kbyByZXZpc2l0IGtDYW1lbENhc2UgZm9yIHBhcmFtLXR5cGUKKyAqCisgKiBBc3BlY3RzCisgKgorICogQXNwZWN0cyBkZWZpbmUgY2VydGFpbiBjb21tb24gYmVoYXZpb3IgYWNyb3NzIGEgZ3JvdXAgb2Ygb2JqZWN0cy4KKyAqIC0gY2xhc3NlcyB3aG9zZSBuYW1lIG1hdGNoZXMgX0MyLipBc3BlY3QKKyAqIC0gb25seSBwcm90ZWN0ZWQgY29uc3RydWN0b3JzCisgKiAtIG5vIGRlc2N0cnVjdG9yIGFuZCBjb3BpYWJsZQorICogLSBhbGwgbWV0aG9kcyBhcmUgaW5saW5lIG9yIHN0YXRpYyAodGhpcyBpcyBvcHBvc2l0ZSBvZiB0aGUgaW50ZXJmYWNlIHBhcmFkaWdtIHdoZXJlIGFsbCBtZXRob2RzCisgKiAgIGFyZSB2aXJ0dWFsLCB3aGljaCB3b3VsZCBub3Qgd29yayBkdWUgdG8gdGhlIGF0IG1vc3Qgb25lIHZ0YWJsZSBydWxlLikKKyAqIC0gb25seSBwcml2YXRlIHZhcmlhYmxlcyAodGhpcyBwcmV2ZW50cyBzdWJjbGFzc2VzIGludGVyZmVyaW5nIHdpdGggdGhlIGFzcGVjdHMuKQorICovCisKKy8vLyBcZGVmZ3JvdXAgdHlwZXMgQ29tbW9uIFR5cGVzCisvLy8gQHsKKworLyoqCisgKiBDMlN0cmluZzogYmFzaWMgc3RyaW5nIGltcGxlbWVudGF0aW9uCisgKi8KK3R5cGVkZWYgc3RkOjpzdHJpbmcgQzJTdHJpbmc7CisKKy8qKgorICogQzJTdHJpbmdMaXRlcmFsOiBiYXNpYyBzdHJpbmcgbGl0ZXJhbCBpbXBsZW1lbnRhdGlvbi4KKyAqIFxub3RlIHRoZXNlIGFyZSBuZXZlciBvd25lZCBieSBhbnkgb2JqZWN0LCBhbmQgY2FuIG9ubHkgcmVmZXIgdG8gQyBzdHJpbmcgbGl0ZXJhbHMuCisgKi8KK3R5cGVkZWYgY29uc3QgY2hhciAqQzJTdHJpbmdMaXRlcmFsOworCisvKioKKyAqIGMyX3N0YXR1c190OiBzdGF0dXMgY29kZXMgdXNlZC4KKyAqLworZW51bSBjMl9zdGF0dXNfdCA6IGludDMyX3QgeworLyoKKyAqIFVzZSBQT1NJWCBlcnJubyBjb25zdGFudHMuCisgKi8KKyAgICBDMl9PSyAgICAgICAgPSAwLCAgICAgICAgICAgIC8vLzwgb3BlcmF0aW9uIGNvbXBsZXRlZCBzdWNjZXNzZnVsbHkKKworICAgIC8vIGJhZCBpbnB1dAorICAgIEMyX0JBRF9WQUxVRSA9IEVJTlZBTCwgICAgICAgLy8vPCBhcmd1bWVudCBoYXMgaW52YWxpZCB2YWx1ZSAodXNlciBlcnJvcikKKyAgICBDMl9CQURfSU5ERVggPSBFTlhJTywgICAgICAgIC8vLzwgYXJndW1lbnQgdXNlcyBpbnZhbGlkIGluZGV4ICh1c2VyIGVycm9yKQorICAgIEMyX0NBTk5PVF9ETyA9IEVOT1RTVVAsICAgICAgLy8vPCBhcmd1bWVudC9pbmRleCBpcyB2YWxpZCBidXQgbm90IHBvc3NpYmxlCisKKyAgICAvLyBiYWQgc2VxdWVuY2luZyBvZiBldmVudHMKKyAgICBDMl9EVVBMSUNBVEUgPSBFRVhJU1QsICAgICAgIC8vLzwgb2JqZWN0IGFscmVhZHkgZXhpc3RzCisgICAgQzJfTk9UX0ZPVU5EID0gRU5PRU5ULCAgICAgICAvLy88IG9iamVjdCBub3QgZm91bmQKKyAgICBDMl9CQURfU1RBVEUgPSBFUEVSTSwgICAgICAgIC8vLzwgb3BlcmF0aW9uIGlzIG5vdCBwZXJtaXR0ZWQgaW4gdGhlIGN1cnJlbnQgc3RhdGUKKyAgICBDMl9CTE9DS0lORyAgPSBFV09VTERCTE9DSywgIC8vLzwgb3BlcmF0aW9uIHdvdWxkIGJsb2NrIGJ1dCBibG9ja2luZyBpcyBub3QgcGVybWl0dGVkCisgICAgQzJfQ0FOQ0VMRUQgID0gRUlOVFIsICAgICAgICAvLy88IG9wZXJhdGlvbiBpbnRlcnJ1cHRlZC9jYW5jZWxlZAorCisgICAgLy8gYmFkIGVudmlyb25tZW50CisgICAgQzJfTk9fTUVNT1JZID0gRU5PTUVNLCAgICAgICAvLy88IG5vdCBlbm91Z2ggbWVtb3J5IHRvIGNvbXBsZXRlIG9wZXJhdGlvbgorICAgIEMyX1JFRlVTRUQgICA9IEVBQ0NFUywgICAgICAgLy8vPCBtaXNzaW5nIHBlcm1pc3Npb24gdG8gY29tcGxldGUgb3BlcmF0aW9uCisKKyAgICBDMl9USU1FRF9PVVQgPSBFVElNRURPVVQsICAgIC8vLzwgb3BlcmF0aW9uIGRpZCBub3QgY29tcGxldGUgd2l0aGluIHRpbWVvdXQKKworICAgIC8vIGJhZCB2ZXJzaW9uaW5nCisgICAgQzJfT01JVFRFRCAgID0gRU5PU1lTLCAgICAgICAvLy88IG9wZXJhdGlvbiBpcyBub3QgaW1wbGVtZW50ZWQvc3VwcG9ydGVkIChvcHRpb25hbCBvbmx5KQorCisgICAgLy8gdW5rbm93biBmYXRhbAorICAgIEMyX0NPUlJVUFRFRCA9IEVGQVVMVCwgICAgICAgLy8vPCBzb21lIHVuZXhwZWN0ZWQgZXJyb3IgcHJldmVudGVkIHRoZSBvcGVyYXRpb24KKyAgICBDMl9OT19JTklUICAgPSBFTk9ERVYsICAgICAgIC8vLzwgc3RhdHVzIGhhcyBub3QgYmVlbiBpbml0aWFsaXplZAorfTsKKworLyoqCisgKiBUeXBlIHRoYXQgZGVzY3JpYmVzIHRoZSBkZXNpcmVkIGJsb2NraW5nIGJlaGF2aW9yIGZvciB2YXJpYWJsZSBibG9ja2luZyBjYWxscy4gQmxvY2tpbmcgaW4gdGhpcworICogQVBJIGlzIHVzZWQgaW4gYSBzb21ld2hhdCBtb2RpZmllZCBtZWFuaW5nIHN1Y2ggdGhhdCBvcGVyYXRpb25zIHRoYXQgbWVyZWx5IHVwZGF0ZSB2YXJpYWJsZXMKKyAqIHByb3RlY3RlZCBieSBtdXRleGVzIGFyZSBzdGlsbCBjb25zaWRlcmVkICJub24tYmxvY2tpbmciIChhbHdheXMgdXNlZCBpbiBxdW90ZXMpLgorICovCitlbnVtIGMyX2Jsb2NraW5nX3QgOiBpbnQzMl90IHsKKyAgICAvKioKKyAgICAgKiBUaGUgb3BlcmF0aW9uIFNIQUxMIGJlICJub24tYmxvY2tpbmciLiBUaGlzIG1lYW5zIHRoYXQgaXQgc2hhbGwgbm90IHBlcmZvcm0gYW55IGZpbGUKKyAgICAgKiBvcGVyYXRpb25zLCBvciBjYWxsL3dhaXQgb24gb3RoZXIgcHJvY2Vzc2VzLiBJdCBtYXkgdXNlIGEgcHJvdGVjdGVkIHJlZ2lvbiBhcyBsb25nIGFzIHRoZQorICAgICAqIG11dGV4IGlzIG5ldmVyIHVzZWQgdG8gcHJvdGVjdCBjb2RlIHRoYXQgaXMgb3RoZXJ3aXNlICJtYXkgYmxvY2siLgorICAgICAqLworICAgIEMyX0RPTlRfQkxPQ0sgPSBmYWxzZSwKKyAgICAvKioKKyAgICAgKiBUaGUgb3BlcmF0aW9uIE1BWSBiZSB0ZW1wb3JhcmlseSBibG9ja2luZy4KKyAgICAgKi8KKyAgICBDMl9NQVlfQkxPQ0sgPSB0cnVlLAorfTsKKworLy8vIEB9CisKKy8vLyBcZGVmZ3JvdXAgdXRpbHMgVXRpbGl0aWVzCisvLy8gQHsKKworI2RlZmluZSBDMl9ET19OT1RfQ09QWSh0eXBlKSBcCisgICAgdHlwZSYgb3BlcmF0b3I9KGNvbnN0IHR5cGUgJikgPSBkZWxldGU7IFwKKyAgICB0eXBlKGNvbnN0IHR5cGUgJikgPSBkZWxldGU7IFwKKworI2RlZmluZSBDMl9ERUZBVUxUX01PVkUodHlwZSkgXAorICAgIHR5cGUmIG9wZXJhdG9yPSh0eXBlICYmKSA9IGRlZmF1bHQ7IFwKKyAgICB0eXBlKHR5cGUgJiYpID0gZGVmYXVsdDsgXAorCisjZGVmaW5lIEMyX0FMTE9XX09WRVJGTE9XIF9fYXR0cmlidXRlX18oKG5vX3Nhbml0aXplKCJpbnRlZ2VyIikpKQorI2RlZmluZSBDMl9DT05TVCAgICBfX2F0dHJpYnV0ZV9fKChjb25zdCkpCisjZGVmaW5lIEMyX0hJREUgICAgIF9fYXR0cmlidXRlX18oKHZpc2liaWxpdHkoImhpZGRlbiIpKSkKKyNkZWZpbmUgQzJfSU5MSU5FICAgaW5saW5lIEMyX0hJREUKKyNkZWZpbmUgQzJfSU5URVJOQUwgX19hdHRyaWJ1dGVfXygoaW50ZXJuYWxfbGlua2FnZSkpCisjZGVmaW5lIEMyX1BBQ0sgICAgIF9fYXR0cmlidXRlX18oKGFsaWduZWQoNCkpKQorI2RlZmluZSBDMl9QVVJFICAgICBfX2F0dHJpYnV0ZV9fKChwdXJlKSkKKworI2RlZmluZSBERUZJTkVfT1RIRVJfQ09NUEFSSVNPTl9PUEVSQVRPUlModHlwZSkgXAorICAgIGlubGluZSBib29sIG9wZXJhdG9yIT0oY29uc3QgdHlwZSAmb3RoZXIpIGNvbnN0IHsgcmV0dXJuICEoKnRoaXMgPT0gb3RoZXIpOyB9IFwKKyAgICBpbmxpbmUgYm9vbCBvcGVyYXRvcjw9KGNvbnN0IHR5cGUgJm90aGVyKSBjb25zdCB7IHJldHVybiAoKnRoaXMgPT0gb3RoZXIpIHx8ICgqdGhpcyA8IG90aGVyKTsgfSBcCisgICAgaW5saW5lIGJvb2wgb3BlcmF0b3I+PShjb25zdCB0eXBlICZvdGhlcikgY29uc3QgeyByZXR1cm4gISgqdGhpcyA8IG90aGVyKTsgfSBcCisgICAgaW5saW5lIGJvb2wgb3BlcmF0b3I+KGNvbnN0IHR5cGUgJm90aGVyKSBjb25zdCB7IHJldHVybiAhKCp0aGlzIDwgb3RoZXIpICYmICEoKnRoaXMgPT0gb3RoZXIpOyB9CisKKyNkZWZpbmUgREVGSU5FX0ZJRUxEX0JBU0VEX0NPTVBBUklTT05fT1BFUkFUT1JTKHR5cGUsIGZpZWxkKSBcCisgICAgaW5saW5lIGJvb2wgb3BlcmF0b3I8KGNvbnN0IHR5cGUgJm90aGVyKSBjb25zdCB7IHJldHVybiBmaWVsZCA8IG90aGVyLmZpZWxkOyB9IFwKKyAgICBpbmxpbmUgYm9vbCBvcGVyYXRvcj09KGNvbnN0IHR5cGUgJm90aGVyKSBjb25zdCB7IHJldHVybiBmaWVsZCA9PSBvdGhlci5maWVsZDsgfSBcCisgICAgREVGSU5FX09USEVSX0NPTVBBUklTT05fT1BFUkFUT1JTKHR5cGUpCisKKyNkZWZpbmUgREVGSU5FX0ZJRUxEX0FORF9NQVNLX0JBU0VEX0NPTVBBUklTT05fT1BFUkFUT1JTKHR5cGUsIGZpZWxkLCBtYXNrKSBcCisgICAgaW5saW5lIGJvb2wgb3BlcmF0b3I8KGNvbnN0IHR5cGUgJm90aGVyKSBjb25zdCB7IFwKKyAgICAgICAgcmV0dXJuIChmaWVsZCAmIG1hc2spIDwgKG90aGVyLmZpZWxkICYgKG1hc2spKTsgXAorICAgIH0gXAorICAgIGlubGluZSBib29sIG9wZXJhdG9yPT0oY29uc3QgdHlwZSAmb3RoZXIpIGNvbnN0IHsgXAorICAgICAgICByZXR1cm4gKGZpZWxkICYgbWFzaykgPT0gKG90aGVyLmZpZWxkICYgKG1hc2spKTsgXAorICAgIH0gXAorICAgIERFRklORV9PVEhFUl9DT01QQVJJU09OX09QRVJBVE9SUyh0eXBlKQorCisjZGVmaW5lIERFRklORV9FTlVNX09QRVJBVE9SUyhldHlwZSkgXAorICAgIGlubGluZSBjb25zdGV4cHIgZXR5cGUgb3BlcmF0b3J8KGV0eXBlIGEsIGV0eXBlIGIpIHsgcmV0dXJuIChldHlwZSkoc3RkOjp1bmRlcmx5aW5nX3R5cGU8ZXR5cGU+Ojp0eXBlKGEpIHwgc3RkOjp1bmRlcmx5aW5nX3R5cGU8ZXR5cGU+Ojp0eXBlKGIpKTsgfSBcCisgICAgaW5saW5lIGNvbnN0ZXhwciBldHlwZSAmb3BlcmF0b3J8PShldHlwZSAmYSwgZXR5cGUgYikgeyBhID0gKGV0eXBlKShzdGQ6OnVuZGVybHlpbmdfdHlwZTxldHlwZT46OnR5cGUoYSkgfCBzdGQ6OnVuZGVybHlpbmdfdHlwZTxldHlwZT46OnR5cGUoYikpOyByZXR1cm4gYTsgfSBcCisgICAgaW5saW5lIGNvbnN0ZXhwciBldHlwZSBvcGVyYXRvciYoZXR5cGUgYSwgZXR5cGUgYikgeyByZXR1cm4gKGV0eXBlKShzdGQ6OnVuZGVybHlpbmdfdHlwZTxldHlwZT46OnR5cGUoYSkgJiBzdGQ6OnVuZGVybHlpbmdfdHlwZTxldHlwZT46OnR5cGUoYikpOyB9IFwKKyAgICBpbmxpbmUgY29uc3RleHByIGV0eXBlICZvcGVyYXRvciY9KGV0eXBlICZhLCBldHlwZSBiKSB7IGEgPSAoZXR5cGUpKHN0ZDo6dW5kZXJseWluZ190eXBlPGV0eXBlPjo6dHlwZShhKSAmIHN0ZDo6dW5kZXJseWluZ190eXBlPGV0eXBlPjo6dHlwZShiKSk7IHJldHVybiBhOyB9IFwKKyAgICBpbmxpbmUgY29uc3RleHByIGV0eXBlIG9wZXJhdG9yXihldHlwZSBhLCBldHlwZSBiKSB7IHJldHVybiAoZXR5cGUpKHN0ZDo6dW5kZXJseWluZ190eXBlPGV0eXBlPjo6dHlwZShhKSBeIHN0ZDo6dW5kZXJseWluZ190eXBlPGV0eXBlPjo6dHlwZShiKSk7IH0gXAorICAgIGlubGluZSBjb25zdGV4cHIgZXR5cGUgJm9wZXJhdG9yXj0oZXR5cGUgJmEsIGV0eXBlIGIpIHsgYSA9IChldHlwZSkoc3RkOjp1bmRlcmx5aW5nX3R5cGU8ZXR5cGU+Ojp0eXBlKGEpIF4gc3RkOjp1bmRlcmx5aW5nX3R5cGU8ZXR5cGU+Ojp0eXBlKGIpKTsgcmV0dXJuIGE7IH0gXAorICAgIGlubGluZSBjb25zdGV4cHIgZXR5cGUgb3BlcmF0b3J+KGV0eXBlIGEpIHsgcmV0dXJuIChldHlwZSkofnN0ZDo6dW5kZXJseWluZ190eXBlPGV0eXBlPjo6dHlwZShhKSk7IH0KKwordGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgQj4KK2NsYXNzIEMyX0hJREUgYzJfY250cl90OworCisvLy8gXGNvbmQgSU5URVJOQUwKKworLy8vIFxkZWZncm91cCB1dGlsc19pbnRlcm5hbAorLy8vIEB7CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+CitzdHJ1Y3QgQzJfSElERSBfYzJfY250cl9jb21wYXRfaGVscGVyIHsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBVLCB0eXBlbmFtZSBFPXR5cGVuYW1lIHN0ZDo6ZW5hYmxlX2lmPHN0ZDo6aXNfaW50ZWdyYWw8VT46OnZhbHVlPjo6dHlwZT4KKyAgICBDMl9BTExPV19PVkVSRkxPVworICAgIGlubGluZSBzdGF0aWMgY29uc3RleHByIFQgZ2V0KGNvbnN0IFUgJnZhbHVlKSB7CisgICAgICAgIHJldHVybiBUKHZhbHVlKTsKKyAgICB9CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBVLCB0eXBlbmFtZSBFPXR5cGVuYW1lIHN0ZDo6ZW5hYmxlX2lmPChzaXplb2YoVSkgPj0gc2l6ZW9mKFQpKT46OnR5cGU+CisgICAgQzJfQUxMT1dfT1ZFUkZMT1cKKyAgICBpbmxpbmUgc3RhdGljIGNvbnN0ZXhwciBUIGdldChjb25zdCBjMl9jbnRyX3Q8VSwgdm9pZD4gJnZhbHVlKSB7CisgICAgICAgIHJldHVybiBUKHZhbHVlLm1WYWx1ZSk7CisgICAgfQorfTsKKworLy8vIEB9CisKKy8vLyBcZW5kY29uZAorCisvKioKKyAqIEludGVncmFsIGNvdW50ZXIgdHlwZS4KKyAqCisgKiBUaGlzIGlzIGJhc2ljYWxseSBhbiB1bnNpZ25lZCBpbnRlZ3JhbCB0eXBlIHRoYXQgaXMgTkVWRVIgY2hlY2tlZCBmb3Igb3ZlcmZsb3cvdW5kZXJmbG93IC0gYW5kCisgKiBjb21wYXJpc29uIG9wZXJhdG9ycyBhcmUgcmVkZWZpbmVkLgorICoKKyAqIFxub3RlIENvbXBhcmlzb24gb2YgY291bnRlciB0eXBlcyBpcyBub3QgZnVsbHkgdHJhbnNpdGl2ZSwgZS5nLgorICogaXQgY291bGQgYmUgdGhhdCBhID4gYiA+IGMgYnV0IGEgIT4gYy4KKyAqIHN0ZDo6bGVzczw+LCBncmVhdGVyPD4sIGxlc3NfZXF1YWw8PiBhbmQgZ3JlYXRlcl9lcXVhbDw+IHNwZWNpYWxpemF0aW9ucyB5aWVsZCB0b3RhbCBvcmRlcmluZywKKyAqIGJ1dCBtYXkgbm90IG1hdGNoIHNlbWFudGljIG9yZGVyaW5nIG9mIHRoZSB2YWx1ZXMuCisgKgorICogVGVjaG5pY2FsbHk6IGNvdW50ZXIgdHlwZXMgcmVwcmVzZW50IGludGVnZXIgdmFsdWVzOiBBICogMl5OICsgdmFsdWUsIHdoZXJlIEEgY2FuIGJlIGFyYml0cmFyeS4KKyAqIFRoaXMgbWFrZXMgYWRkaXRpb24sIHN1YnRyYWN0aW9uLCBtdWx0aXBsaWNhdGlvbiAoYXMgd2VsbCBhcyBiaXR3aXNlIG9wZXJhdGlvbnMpIHdlbGwgZGVmaW5lZC4KKyAqIEhvd2V2ZXIsIGRpdmlzaW9uIGlzIGluIGdlbmVyYWwgbm90IHdlbGwgZGVmaW5lZCwgYXMgdGhlIHJlc3VsdCBtYXkgZGVwZW5kIG9uIEEuIFRoaXMgaXMgYWxzbworICogdHJ1ZSBmb3IgbG9naWNhbCBvcGVyYXRvcnMgYW5kIGJvb2xlYW4gY29udmVyc2lvbi4KKyAqCisgKiBFdmVuIHRob3VnaCB3ZWxsIGRlZmluZWQsIGJpdHdpc2Ugb3BlcmF0b3JzIGFyZSBub3QgaW1wbGVtZW50ZWQgZm9yIGNvdW50ZXIgdHlwZXMgYXMgdGhleSBhcmUgbm90CisgKiBtZWFuaW5nZnVsLgorICovCit0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBCPXR5cGVuYW1lIHN0ZDo6ZW5hYmxlX2lmPHN0ZDo6aXNfaW50ZWdyYWw8VD46OnZhbHVlICYmIHN0ZDo6aXNfdW5zaWduZWQ8VD46OnZhbHVlPjo6dHlwZT4KK2NsYXNzIEMyX0hJREUgYzJfY250cl90IHsKKyAgICB1c2luZyBjb21wYXQgPSBfYzJfY250cl9jb21wYXRfaGVscGVyPFQ+OworCisgICAgVCBtVmFsdWU7CisgICAgY29uc3RleHByIHN0YXRpYyBUIEhBTEZfUkFOR0UgPSBUKH4wKSBeIChUKH4wKSA+PiAxKTsKKworICAgIHRlbXBsYXRlPHR5cGVuYW1lIFU+CisgICAgZnJpZW5kIHN0cnVjdCBfYzJfY250cl9jb21wYXRfaGVscGVyOworcHVibGljOgorCisgICAgLyoqCisgICAgICogRGVmYXVsdCBjb25zdHJ1Y3Rvci4gSW5pdGlhbGl6ZWQgY291bnRlciB0byAwLgorICAgICAqLworICAgIGlubGluZSBjb25zdGV4cHIgYzJfY250cl90KCkgOiBtVmFsdWUoVCgwKSkge30KKworICAgIC8qKgorICAgICAqIENvbnN0cnVjdCBmcm9tIGEgY29tcGF0aWJsZSB0eXBlLgorICAgICAqLworICAgIHRlbXBsYXRlPHR5cGVuYW1lIFU+CisgICAgaW5saW5lIGNvbnN0ZXhwciBjMl9jbnRyX3QoY29uc3QgVSAmdmFsdWUpIDogbVZhbHVlKGNvbXBhdDo6Z2V0KHZhbHVlKSkge30KKworICAgIC8qKgorICAgICAqIFBlZWsgYXMgdW5kZXJseWluZyBzaWduZWQgdHlwZS4KKyAgICAgKi8KKyAgICBDMl9BTExPV19PVkVSRkxPVworICAgIGlubGluZSBjb25zdGV4cHIgdHlwZW5hbWUgc3RkOjptYWtlX3NpZ25lZDxUPjo6dHlwZSBwZWVrKCkgY29uc3QgeworICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8dHlwZW5hbWUgc3RkOjptYWtlX3NpZ25lZDxUPjo6dHlwZT4obVZhbHVlKTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBQZWVrIGFzIHVuZGVybHlpbmcgdW5zaWduZWQgdHlwZS4KKyAgICAgKi8KKyAgICBpbmxpbmUgY29uc3RleHByIFQgcGVla3UoKSBjb25zdCB7CisgICAgICAgIHJldHVybiBtVmFsdWU7CisgICAgfQorCisgICAgLyoqCisgICAgICogUGVlayBhcyBsb25nIGxvbmcgLSBlLmcuIGZvciBwcmludGluZy4KKyAgICAgKi8KKyAgICBDMl9BTExPV19PVkVSRkxPVworICAgIGlubGluZSBjb25zdGV4cHIgbG9uZyBsb25nIHBlZWtsbCgpIGNvbnN0IHsKKyAgICAgICAgcmV0dXJuIChsb25nIGxvbmcpbVZhbHVlOworICAgIH0KKworICAgIC8qKgorICAgICAqIFBlZWsgYXMgdW5zaWduZWQgbG9uZyBsb25nIC0gZS5nLiBmb3IgcHJpbnRpbmcuCisgICAgICovCisgICAgQzJfQUxMT1dfT1ZFUkZMT1cKKyAgICBpbmxpbmUgY29uc3RleHByIHVuc2lnbmVkIGxvbmcgbG9uZyBwZWVrdWxsKCkgY29uc3QgeworICAgICAgICByZXR1cm4gKHVuc2lnbmVkIGxvbmcgbG9uZyltVmFsdWU7CisgICAgfQorCisgICAgLyoqCisgICAgICogQ29udmVydCB0byBhIHNtYWxsZXIgY291bnRlciB0eXBlLiBUaGlzIGlzIGFsd2F5cyBzYWZlLgorICAgICAqLworICAgIHRlbXBsYXRlPHR5cGVuYW1lIFUsIHR5cGVuYW1lIEU9dHlwZW5hbWUgc3RkOjplbmFibGVfaWY8KHNpemVvZihVKSA8IHNpemVvZihUKSk+Ojp0eXBlPgorICAgIGlubGluZSBvcGVyYXRvciBjMl9jbnRyX3Q8VT4oKSB7CisgICAgICAgIHJldHVybiBjMl9jbnRyX3Q8VT4obVZhbHVlKTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBBcml0aG1ldGljIG9wZXJhdG9ycworICAgICAqLworCisjZGVmaW5lIERFRklORV9DMl9DTlRSX0JJTkFSWV9PUChhdHRyaWIsIG9wLCBvcF9hc3NpZ24pIFwKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBVPiBcCisgICAgYXR0cmliIGlubGluZSBjMl9jbnRyX3Q8VD4mIG9wZXJhdG9yIG9wX2Fzc2lnbihjb25zdCBVICZ2YWx1ZSkgeyBcCisgICAgICAgIG1WYWx1ZSBvcF9hc3NpZ24gY29tcGF0OjpnZXQodmFsdWUpOyBcCisgICAgICAgIHJldHVybiAqdGhpczsgXAorICAgIH0gXAorICAgIFwKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBVLCB0eXBlbmFtZSBFPWRlY2x0eXBlKGNvbXBhdDo6Z2V0KFUoMCkpKT4gXAorICAgIGF0dHJpYiBpbmxpbmUgY29uc3RleHByIGMyX2NudHJfdDxUPiBvcGVyYXRvciBvcChjb25zdCBVICZ2YWx1ZSkgY29uc3QgeyBcCisgICAgICAgIHJldHVybiBjMl9jbnRyX3Q8VD4obVZhbHVlIG9wIGNvbXBhdDo6Z2V0KHZhbHVlKSk7IFwKKyAgICB9IFwKKyAgICBcCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVSwgdHlwZW5hbWUgRT10eXBlbmFtZSBzdGQ6OmVuYWJsZV9pZjwoc2l6ZW9mKFUpIDwgc2l6ZW9mKFQpKT46OnR5cGU+IFwKKyAgICBhdHRyaWIgaW5saW5lIGNvbnN0ZXhwciBjMl9jbnRyX3Q8VT4gb3BlcmF0b3Igb3AoY29uc3QgYzJfY250cl90PFU+ICZ2YWx1ZSkgY29uc3QgeyBcCisgICAgICAgIHJldHVybiBjMl9jbnRyX3Q8VT4oVShtVmFsdWUpIG9wIHZhbHVlLnBlZWt1KCkpOyBcCisgICAgfQorCisjZGVmaW5lIERFRklORV9DMl9DTlRSX1VOQVJZX09QKGF0dHJpYiwgb3ApIFwKKyAgICBhdHRyaWIgaW5saW5lIGNvbnN0ZXhwciBjMl9jbnRyX3Q8VD4gb3BlcmF0b3Igb3AoKSBjb25zdCB7IFwKKyAgICAgICAgcmV0dXJuIGMyX2NudHJfdDxUPihvcCBtVmFsdWUpOyBcCisgICAgfQorCisjZGVmaW5lIERFRklORV9DMl9DTlRSX0NSRU1FTlRfT1AoYXR0cmliLCBvcCkgXAorICAgIGF0dHJpYiBpbmxpbmUgYzJfY250cl90PFQ+ICZvcGVyYXRvciBvcCgpIHsgXAorICAgICAgICBvcCBtVmFsdWU7IFwKKyAgICAgICAgcmV0dXJuICp0aGlzOyBcCisgICAgfSBcCisgICAgYXR0cmliIGlubGluZSBjMl9jbnRyX3Q8VD4gb3BlcmF0b3Igb3AoaW50KSB7IFwKKyAgICAgICAgcmV0dXJuIGMyX2NudHJfdDxULCB2b2lkPihtVmFsdWUgb3ApOyBcCisgICAgfQorCisgICAgREVGSU5FX0MyX0NOVFJfQklOQVJZX09QKEMyX0FMTE9XX09WRVJGTE9XLCArLCArPSkKKyAgICBERUZJTkVfQzJfQ05UUl9CSU5BUllfT1AoQzJfQUxMT1dfT1ZFUkZMT1csIC0sIC09KQorICAgIERFRklORV9DMl9DTlRSX0JJTkFSWV9PUChDMl9BTExPV19PVkVSRkxPVywgKiwgKj0pCisKKyAgICBERUZJTkVfQzJfQ05UUl9VTkFSWV9PUChDMl9BTExPV19PVkVSRkxPVywgLSkKKyAgICBERUZJTkVfQzJfQ05UUl9VTkFSWV9PUChDMl9BTExPV19PVkVSRkxPVywgKykKKworICAgIERFRklORV9DMl9DTlRSX0NSRU1FTlRfT1AoQzJfQUxMT1dfT1ZFUkZMT1csICsrKQorICAgIERFRklORV9DMl9DTlRSX0NSRU1FTlRfT1AoQzJfQUxMT1dfT1ZFUkZMT1csIC0tKQorCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVSwgdHlwZW5hbWUgRT10eXBlbmFtZSBzdGQ6OmVuYWJsZV9pZjxzdGQ6OmlzX3Vuc2lnbmVkPFU+Ojp2YWx1ZT46OnR5cGU+CisgICAgQzJfQUxMT1dfT1ZFUkZMT1cKKyAgICBpbmxpbmUgY29uc3RleHByIGMyX2NudHJfdDxUPiBvcGVyYXRvcjw8KGNvbnN0IFUgJnZhbHVlKSBjb25zdCB7CisgICAgICAgIHJldHVybiBjMl9jbnRyX3Q8VD4obVZhbHVlIDw8IHZhbHVlKTsKKyAgICB9CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBVLCB0eXBlbmFtZSBFPXR5cGVuYW1lIHN0ZDo6ZW5hYmxlX2lmPHN0ZDo6aXNfdW5zaWduZWQ8VT46OnZhbHVlPjo6dHlwZT4KKyAgICBDMl9BTExPV19PVkVSRkxPVworICAgIGlubGluZSBjMl9jbnRyX3Q8VD4gJm9wZXJhdG9yPDw9KGNvbnN0IFUgJnZhbHVlKSB7CisgICAgICAgIG1WYWx1ZSA8PD0gdmFsdWU7CisgICAgICAgIHJldHVybiAqdGhpczsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBDb21wYXJpc29uIG9wZXJhdG9ycworICAgICAqLworICAgIEMyX0FMTE9XX09WRVJGTE9XCisgICAgaW5saW5lIGNvbnN0ZXhwciBib29sIG9wZXJhdG9yPD0oY29uc3QgYzJfY250cl90PFQ+ICZvdGhlcikgY29uc3QgeworICAgICAgICByZXR1cm4gVChvdGhlci5tVmFsdWUgLSBtVmFsdWUpIDwgSEFMRl9SQU5HRTsKKyAgICB9CisKKyAgICBDMl9BTExPV19PVkVSRkxPVworICAgIGlubGluZSBjb25zdGV4cHIgYm9vbCBvcGVyYXRvcj49KGNvbnN0IGMyX2NudHJfdDxUPiAmb3RoZXIpIGNvbnN0IHsKKyAgICAgICAgcmV0dXJuIFQobVZhbHVlIC0gb3RoZXIubVZhbHVlKSA8IEhBTEZfUkFOR0U7CisgICAgfQorCisgICAgaW5saW5lIGNvbnN0ZXhwciBib29sIG9wZXJhdG9yPT0oY29uc3QgYzJfY250cl90PFQ+ICZvdGhlcikgY29uc3QgeworICAgICAgICByZXR1cm4gbVZhbHVlID09IG90aGVyLm1WYWx1ZTsKKyAgICB9CisKKyAgICBpbmxpbmUgY29uc3RleHByIGJvb2wgb3BlcmF0b3IhPShjb25zdCBjMl9jbnRyX3Q8VD4gJm90aGVyKSBjb25zdCB7CisgICAgICAgIHJldHVybiAhKCp0aGlzID09IG90aGVyKTsKKyAgICB9CisKKyAgICBpbmxpbmUgY29uc3RleHByIGJvb2wgb3BlcmF0b3I8KGNvbnN0IGMyX2NudHJfdDxUPiAmb3RoZXIpIGNvbnN0IHsKKyAgICAgICAgcmV0dXJuICp0aGlzIDw9IG90aGVyICYmICp0aGlzICE9IG90aGVyOworICAgIH0KKworICAgIGlubGluZSBjb25zdGV4cHIgYm9vbCBvcGVyYXRvcj4oY29uc3QgYzJfY250cl90PFQ+ICZvdGhlcikgY29uc3QgeworICAgICAgICByZXR1cm4gKnRoaXMgPj0gb3RoZXIgJiYgKnRoaXMgIT0gb3RoZXI7CisgICAgfQorfTsKKwordGVtcGxhdGU8dHlwZW5hbWUgVSwgdHlwZW5hbWUgVCwgdHlwZW5hbWUgRT10eXBlbmFtZSBzdGQ6OmVuYWJsZV9pZjxzdGQ6OmlzX2ludGVncmFsPFU+Ojp2YWx1ZT46OnR5cGU+CitpbmxpbmUgY29uc3RleHByIGMyX2NudHJfdDxUPiBvcGVyYXRvcisoY29uc3QgVSAmYSwgY29uc3QgYzJfY250cl90PFQ+ICZiKSB7CisgICAgcmV0dXJuIGIgKyBhOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBVLCB0eXBlbmFtZSBULCB0eXBlbmFtZSBFPXR5cGVuYW1lIHN0ZDo6ZW5hYmxlX2lmPHN0ZDo6aXNfaW50ZWdyYWw8VT46OnZhbHVlPjo6dHlwZT4KK2lubGluZSBjb25zdGV4cHIgYzJfY250cl90PFQ+IG9wZXJhdG9yLShjb25zdCBVICZhLCBjb25zdCBjMl9jbnRyX3Q8VD4gJmIpIHsKKyAgICByZXR1cm4gYzJfY250cl90PFQ+KGEpIC0gYjsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgVSwgdHlwZW5hbWUgVCwgdHlwZW5hbWUgRT10eXBlbmFtZSBzdGQ6OmVuYWJsZV9pZjxzdGQ6OmlzX2ludGVncmFsPFU+Ojp2YWx1ZT46OnR5cGU+CitpbmxpbmUgY29uc3RleHByIGMyX2NudHJfdDxUPiBvcGVyYXRvciooY29uc3QgVSAmYSwgY29uc3QgYzJfY250cl90PFQ+ICZiKSB7CisgICAgcmV0dXJuIGIgKiBhOworfQorCit0eXBlZGVmIGMyX2NudHJfdDx1aW50MzJfdD4gYzJfY250cjMyX3Q7IC8qKiAzMi1iaXQgY291bnRlciB0eXBlICovCit0eXBlZGVmIGMyX2NudHJfdDx1aW50NjRfdD4gYzJfY250cjY0X3Q7IC8qKiA2NC1iaXQgY291bnRlciB0eXBlICovCisKKy8vLyBcY29uZCBJTlRFUk5BTAorCisvLy8gXGRlZmdyb3VwIHV0aWxzX2ludGVybmFsCisvLy8gQHsKKwordGVtcGxhdGU8dHlwZW5hbWUuLi4gVD4gc3RydWN0IGMyX3R5cGVzOworCisvKiogc3BlY2lhbGl6YXRpb24gZm9yIGEgc2luZ2xlIHR5cGUgKi8KK3RlbXBsYXRlPHR5cGVuYW1lIFQ+CitzdHJ1Y3QgYzJfdHlwZXM8VD4geworICAgIHR5cGVkZWYgdHlwZW5hbWUgc3RkOjpkZWNheTxUPjo6dHlwZSB3aWRlX3R5cGU7CisgICAgdHlwZWRlZiB3aWRlX3R5cGUgbmFycm93X3R5cGU7CisgICAgdHlwZWRlZiB3aWRlX3R5cGUgbWluX3R5cGU7IC8vIHR5cGUgZm9yIG1pbihULi4uKQorfTsKKworLyoqIHNwZWNpYWxpemF0aW9uIGZvciB0d28gdHlwZXMgKi8KK3RlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFU+CitzdHJ1Y3QgYzJfdHlwZXM8VCwgVT4geworICAgIHN0YXRpY19hc3NlcnQoc3RkOjppc19mbG9hdGluZ19wb2ludDxUPjo6dmFsdWUgPT0gc3RkOjppc19mbG9hdGluZ19wb2ludDxVPjo6dmFsdWUsCisgICAgICAgICAgICAgICAgICAibWl4aW5nIGZsb2F0aW5nIHBvaW50IGFuZCBub24tZmxvYXRpbmcgcG9pbnQgdHlwZXMgaXMgZGlzYWxsb3dlZCIpOworICAgIHN0YXRpY19hc3NlcnQoc3RkOjppc19zaWduZWQ8VD46OnZhbHVlID09IHN0ZDo6aXNfc2lnbmVkPFU+Ojp2YWx1ZSwKKyAgICAgICAgICAgICAgICAgICJtaXhpbmcgc2lnbmVkIGFuZCB1bnNpZ25lZCB0eXBlcyBpcyBkaXNhbGxvd2VkIik7CisKKyAgICB0eXBlZGVmIHR5cGVuYW1lIHN0ZDo6ZGVjYXk8CisgICAgICAgICAgICBkZWNsdHlwZSh0cnVlID8gc3RkOjpkZWNsdmFsPFQ+KCkgOiBzdGQ6OmRlY2x2YWw8VT4oKSk+Ojp0eXBlIHdpZGVfdHlwZTsKKyAgICB0eXBlZGVmIHR5cGVuYW1lIHN0ZDo6ZGVjYXk8CisgICAgICAgICAgICB0eXBlbmFtZSBzdGQ6OmNvbmRpdGlvbmFsPHNpemVvZihUKSA8IHNpemVvZihVKSwgVCwgVT46OnR5cGU+Ojp0eXBlIG5hcnJvd190eXBlOworICAgIHR5cGVkZWYgdHlwZW5hbWUgc3RkOjpjb25kaXRpb25hbDwKKyAgICAgICAgICAgIHN0ZDo6aXNfc2lnbmVkPFQ+Ojp2YWx1ZSwgd2lkZV90eXBlLCBuYXJyb3dfdHlwZT46OnR5cGUgbWluX3R5cGU7Cit9OworCisvLy8gQH0KKworLy8vIFxlbmRjb25kCisKKy8qKgorICogVHlwZSBzdXBwb3J0IHV0aWxpdHkgY2xhc3MuIE9ubHkgc3VwcG9ydHMgc2ltaWxhciBjbGFzc2VzLCBzdWNoIGFzOgorICogLSBhbGwgZmxvYXRpbmcgcG9pbnQKKyAqIC0gYWxsIHVuc2lnbmVkL2FsbCBzaWduZWQKKyAqIC0gYWxsIHBvaW50ZXIKKyAqLwordGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVSwgdHlwZW5hbWUuLi4gVj4KK3N0cnVjdCBjMl90eXBlczxULCBVLCBWLi4uPiB7CisgICAgLyoqIENvbW1vbiB0eXBlIHRoYXQgYWNjb21tb2RhdGVzIGFsbCB0ZW1wbGF0ZSBwYXJhbWV0ZXIgdHlwZXMuICovCisgICAgdHlwZWRlZiB0eXBlbmFtZSBjMl90eXBlczx0eXBlbmFtZSBjMl90eXBlczxULCBVPjo6d2lkZV90eXBlLCBWLi4uPjo6d2lkZV90eXBlIHdpZGVfdHlwZTsKKyAgICAvKiogTmFycm93ZXN0IHR5cGUgb2YgdGhlIHRlbXBsYXRlIHBhcmFtZXRlciB0eXBlcy4gKi8KKyAgICB0eXBlZGVmIHR5cGVuYW1lIGMyX3R5cGVzPHR5cGVuYW1lIGMyX3R5cGVzPFQsIFU+OjpuYXJyb3dfdHlwZSwgVi4uLj46Om5hcnJvd190eXBlIG5hcnJvd190eXBlOworICAgIC8qKiBUeXBlIHRoYXQgYWNjb21tb2RhdGVzIHRoZSBtaW5pbXVtIHZhbHVlIGZvciBhbnkgaW5wdXQgZm9yIHRoZSB0ZW1wbGF0ZSBwYXJhbWV0ZXIgdHlwZXMuICovCisgICAgdHlwZWRlZiB0eXBlbmFtZSBjMl90eXBlczx0eXBlbmFtZSBjMl90eXBlczxULCBVPjo6bWluX3R5cGUsIFYuLi4+OjptaW5fdHlwZSBtaW5fdHlwZTsKK307CisKKy8qKgorICogIFxpbmdyb3VwIHV0aWxzX2ludGVybmFsCisgKiBzcGVjaWFsaXphdGlvbiBmb3IgdHdvIHZhbHVlcyAqLwordGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVT4KK2lubGluZSBjb25zdGV4cHIgdHlwZW5hbWUgYzJfdHlwZXM8VCwgVT46OndpZGVfdHlwZSBjMl9tYXgoY29uc3QgVCBhLCBjb25zdCBVIGIpIHsKKyAgICB0eXBlZGVmIHR5cGVuYW1lIGMyX3R5cGVzPFQsIFU+Ojp3aWRlX3R5cGUgd2lkZV90eXBlOworICAgIHJldHVybiAoeyB3aWRlX3R5cGUgYV8oYSksIGJfKGIpOyBhXyA+IGJfID8gYV8gOiBiXzsgfSk7Cit9CisKKy8qKgorICogRmluZHMgdGhlIG1heGltdW0gdmFsdWUgb2YgYSBsaXN0IG9mICJzaW1pbGFybHkgdHlwZWQiIHZhbHVlcy4KKyAqCisgKiBUaGlzIGlzIGFuIGV4dGVuc2lvbiB0byBzdGQ6Om1heCB3aGVyZSB0aGUgdHlwZXMgZG8gbm90IGhhdmUgdG8gYmUgaWRlbnRpY2FsLCBhbmQgdGhlIHNtYWxsZXN0CisgKiByZXN1bHRpbmcgdHlwZSBpcyB1c2VkIHRoYXQgYWNjb21tb2RhdGVzIHRoZSBhcmd1bWVudCB0eXBlcy4KKyAqCisgKiBcbm90ZSBWYWx1ZSB0eXBlcyBtdXN0IGJlIHNpbWlsYXIsIGUuZy4gYWxsIGZsb2F0aW5nIHBvaW50LCBhbGwgcG9pbnRlcnMsIGFsbCBzaWduZWQsIG9yIGFsbAorICogdW5zaWduZWQuCisgKgorICogQHJldHVybiB0aGUgbGFyZ2VzdCBvZiB0aGUgaW5wdXQgYXJndW1lbnRzLgorICovCit0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVLCB0eXBlbmFtZS4uLiBWPgorY29uc3RleHByIHR5cGVuYW1lIGMyX3R5cGVzPFQsIFUsIFYuLi4+Ojp3aWRlX3R5cGUgYzJfbWF4KGNvbnN0IFQgYSwgY29uc3QgVSBiLCBjb25zdCBWIC4uLiBjKSB7CisgICAgdHlwZWRlZiB0eXBlbmFtZSBjMl90eXBlczxULCBVLCBWLi4uPjo6d2lkZV90eXBlIHdpZGVfdHlwZTsKKyAgICByZXR1cm4gKHsgd2lkZV90eXBlIGFfKGEpLCBiXyhjMl9tYXgoYiwgYy4uLikpOyBhXyA+IGJfID8gYV8gOiBiXzsgfSk7Cit9CisKKy8qKgorICogIFxpbmdyb3VwIHV0aWxzX2ludGVybmFsCisgKiBzcGVjaWFsaXphdGlvbiBmb3IgdHdvIHZhbHVlcyAqLwordGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVT4KK2lubGluZSBjb25zdGV4cHIgdHlwZW5hbWUgYzJfdHlwZXM8VCwgVT46Om1pbl90eXBlIGMyX21pbihjb25zdCBUIGEsIGNvbnN0IFUgYikgeworICAgIHR5cGVkZWYgdHlwZW5hbWUgYzJfdHlwZXM8VCwgVT46OndpZGVfdHlwZSB3aWRlX3R5cGU7CisgICAgcmV0dXJuICh7CisgICAgICAgIHdpZGVfdHlwZSBhXyhhKSwgYl8oYik7CisgICAgICAgIHN0YXRpY19jYXN0PHR5cGVuYW1lIGMyX3R5cGVzPFQsIFU+OjptaW5fdHlwZT4oYV8gPCBiXyA/IGFfIDogYl8pOworICAgIH0pOworfQorCisvKioKKyAqIEZpbmRzIHRoZSBtaW5pbXVtIHZhbHVlIG9mIGEgbGlzdCBvZiAic2ltaWxhcmx5IHR5cGVkIiB2YWx1ZXMuCisgKgorICogVGhpcyBpcyBhbiBleHRlbnNpb24gdG8gc3RkOjptaW4gd2hlcmUgdGhlIHR5cGVzIGRvIG5vdCBoYXZlIHRvIGJlIGlkZW50aWNhbCwgYW5kIHRoZSBzbWFsbGVzdAorICogcmVzdWx0aW5nIHR5cGUgaXMgdXNlZCB0aGF0IGFjY29tbW9kYXRlcyB0aGUgYXJndW1lbnQgdHlwZXMuCisgKgorICogXG5vdGUgVmFsdWUgdHlwZXMgbXVzdCBiZSBzaW1pbGFyLCBlLmcuIGFsbCBmbG9hdGluZyBwb2ludCwgYWxsIHBvaW50ZXJzLCBhbGwgc2lnbmVkLCBvciBhbGwKKyAqIHVuc2lnbmVkLgorICoKKyAqIEByZXR1cm4gdGhlIHNtYWxsZXN0IG9mIHRoZSBpbnB1dCBhcmd1bWVudHMuCisgKi8KK3RlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFUsIHR5cGVuYW1lLi4uIFY+Citjb25zdGV4cHIgdHlwZW5hbWUgYzJfdHlwZXM8VCwgVSwgVi4uLj46Om1pbl90eXBlIGMyX21pbihjb25zdCBUIGEsIGNvbnN0IFUgYiwgY29uc3QgViAuLi4gYykgeworICAgIHR5cGVkZWYgdHlwZW5hbWUgYzJfdHlwZXM8VSwgVi4uLj46Om1pbl90eXBlIHJlc3RfdHlwZTsKKyAgICB0eXBlZGVmIHR5cGVuYW1lIGMyX3R5cGVzPFQsIHJlc3RfdHlwZT46OndpZGVfdHlwZSB3aWRlX3R5cGU7CisgICAgcmV0dXJuICh7CisgICAgICAgIHdpZGVfdHlwZSBhXyhhKSwgYl8oYzJfbWluKGIsIGMuLi4pKTsKKyAgICAgICAgc3RhdGljX2Nhc3Q8dHlwZW5hbWUgYzJfdHlwZXM8VCwgcmVzdF90eXBlPjo6bWluX3R5cGU+KGFfIDwgYl8gPyBhXyA6IGJfKTsKKyAgICB9KTsKK30KKworLyoqCisgKiAgXGluZ3JvdXAgdXRpbHNfaW50ZXJuYWwKKyAqLwordGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVSwgdHlwZW5hbWUgVj4KK2lubGluZSBjb25zdGV4cHIgdHlwZW5hbWUgYzJfdHlwZXM8VCwgVj46OndpZGVfdHlwZSBjMl9jbGFtcChjb25zdCBUIGEsIGNvbnN0IFUgYiwgY29uc3QgViBjKSB7CisgICAgdHlwZWRlZiB0eXBlbmFtZSBjMl90eXBlczxULCBVLCBWPjo6d2lkZV90eXBlIHdpZGVfdHlwZTsKKyAgICByZXR1cm4gKHsKKyAgICAgICAgd2lkZV90eXBlIGFfKGEpLCBiXyhiKSwgY18oYyk7CisgICAgICAgIHN0YXRpY19jYXN0PHR5cGVuYW1lIGMyX3R5cGVzPFQsIFY+Ojp3aWRlX3R5cGU+KGJfIDwgYV8gPyBhXyA6IGJfID4gY18gPyBjXyA6IGJfKTsKKyAgICB9KTsKK30KKworLy8vIEB9CisKKyNpbmNsdWRlIDxmdW5jdGlvbmFsPgordGVtcGxhdGU8dHlwZW5hbWUgVD4KK3N0cnVjdCBzdGQ6Omxlc3M8OjpjMl9jbnRyX3Q8VD4+IHsKKyAgICBjb25zdGV4cHIgYm9vbCBvcGVyYXRvcigpKGNvbnN0IDo6YzJfY250cl90PFQ+ICZsaCwgY29uc3QgOjpjMl9jbnRyX3Q8VD4gJnJoKSBjb25zdCB7CisgICAgICAgIHJldHVybiBsaC5wZWVrdSgpIDwgcmgucGVla3UoKTsKKyAgICB9Cit9OwordGVtcGxhdGU8dHlwZW5hbWUgVD4KK3N0cnVjdCBzdGQ6Omxlc3NfZXF1YWw8OjpjMl9jbnRyX3Q8VD4+IHsKKyAgICBjb25zdGV4cHIgYm9vbCBvcGVyYXRvcigpKGNvbnN0IDo6YzJfY250cl90PFQ+ICZsaCwgY29uc3QgOjpjMl9jbnRyX3Q8VD4gJnJoKSBjb25zdCB7CisgICAgICAgIHJldHVybiBsaC5wZWVrdSgpIDw9IHJoLnBlZWt1KCk7CisgICAgfQorfTsKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+CitzdHJ1Y3Qgc3RkOjpncmVhdGVyPDo6YzJfY250cl90PFQ+PiB7CisgICAgY29uc3RleHByIGJvb2wgb3BlcmF0b3IoKShjb25zdCA6OmMyX2NudHJfdDxUPiAmbGgsIGNvbnN0IDo6YzJfY250cl90PFQ+ICZyaCkgY29uc3QgeworICAgICAgICByZXR1cm4gbGgucGVla3UoKSA+IHJoLnBlZWt1KCk7CisgICAgfQorfTsKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+CitzdHJ1Y3Qgc3RkOjpncmVhdGVyX2VxdWFsPDo6YzJfY250cl90PFQ+PiB7CisgICAgY29uc3RleHByIGJvb2wgb3BlcmF0b3IoKShjb25zdCA6OmMyX2NudHJfdDxUPiAmbGgsIGNvbnN0IDo6YzJfY250cl90PFQ+ICZyaCkgY29uc3QgeworICAgICAgICByZXR1cm4gbGgucGVla3UoKSA+PSByaC5wZWVrdSgpOworICAgIH0KK307CisKKyNlbmRpZiAgLy8gQzJfSF8KZGlmZiAtLWdpdCBhL21lZGlhL2NvZGVjMi9jb3JlL2luY2x1ZGUvQzJCdWZmZXIuaCBiL21lZGlhL2NvZGVjMi9jb3JlL2luY2x1ZGUvQzJCdWZmZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yOTk3ZjZlCi0tLSAvZGV2L251bGwKKysrIGIvbWVkaWEvY29kZWMyL2NvcmUvaW5jbHVkZS9DMkJ1ZmZlci5oCkBAIC0wLDAgKzEsMjMwNSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNiBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCisKKyNpZm5kZWYgQzJCVUZGRVJfSF8KKyNkZWZpbmUgQzJCVUZGRVJfSF8KKworI2luY2x1ZGUgPEMyLmg+CisjaW5jbHVkZSA8QzJCdWZmZXJCYXNlLmg+CisjaW5jbHVkZSA8QzJQYXJhbS5oPiAvLyBmb3IgQzJJbmZvCisKKyNpbmNsdWRlIDxtZW1vcnk+CisjaW5jbHVkZSA8dmVjdG9yPgorCisjaWZkZWYgX19BTkRST0lEX18KKyNpbmNsdWRlIDxhbmRyb2lkLUMyQnVmZmVyLmg+CisjZWxzZQorCit0eXBlZGVmIHZvaWQqIEMySGFuZGxlOworCisjZW5kaWYKKworLy8vIFxkZWZncm91cCBidWZmZXIgQnVmZmVycworLy8vIEB7CisKKy8vLyBcZGVmZ3JvdXAgYnVmZmVyX3N5bmMgU3luY2hyb25pemF0aW9uCisvLy8gQHsKKworLyoqCisgKiBTeW5jaHJvbml6YXRpb24gaXMgYWNjb21wbGlzaGVkIHVzaW5nIGV2ZW50IGFuZCBmZW5jZSBvYmplY3RzLgorICoKKyAqIFRoZXNlIGFyZSBjcm9zcy1wcm9jZXNzIGV4dGVuc2lvbnMgb2YgcHJvbWlzZS9mdXR1cmUgaW5mcmFzdHJ1Y3R1cmUuCisgKiBFdmVudHMgYXJlIGFuYWxvZ291cyB0byBzdGQ6OnByb21pc2U8dm9pZD4sIHdoZXJlYXMgZmVuY2VzIGFyZSB0byBzdGQ6OnNoYXJlZF9mdXR1cmU8dm9pZD4uCisgKgorICogRmVuY2VzIGFuZCBldmVudHMgYXJlIHNoYXJlYWJsZS9jb3B5YWJsZS4KKyAqCisgKiBGZW5jZXMgYXJlIHVzZWQgaW4gdHdvIHNjZW5hcmlvcywgYW5kIGFsbCBjb3BpZWQgaW5zdGFuY2VzIHJlZmVyIHRvIHRoZSBzYW1lIGV2ZW50LgorICogXHRvZG8gZG8gZXZlbnRzIG5lZWQgdG8gYmUgY29weWFibGUgb3Igc2hvdWxkIHRoZXkgYmUgdW5pcXVlPworICoKKyAqIGFjcXVpcmUgc3luYyBmZW5jZSBvYmplY3Q6IHNpZ25hbGVkIHdoZW4gaXQgaXMgc2FmZSBmb3IgdGhlIGNvbXBvbmVudCBvciBjbGllbnQgdG8gYWNjZXNzCisgKiAodGhlIGNvbnRlbnRzIG9mKSBhbiBvYmplY3QuCisgKgorICogcmVsZWFzZSBzeW5jIGZlbmNlIG9iamVjdDogXHRvZG8KKyAqCisgKiBGZW5jZXMgY2FuIGJlIGJhY2tlZCBieSBoYXJkd2FyZS4gSGFyZHdhcmUgZmVuY2VzIGFyZSBndWFyYW50ZWVkIHRvIHNpZ25hbCBOTyBNQVRURVIgV0hBVCB3aXRoaW4KKyAqIGEgc2hvcnQgKHBsYXRmb3JtIHNwZWNpZmljKSBhbW91bnQgb2YgdGltZTsgdGhpcyBndWFyYW50ZWUgaXMgdXN1YWxseSBsZXNzIHRoYW4gMTUgbXNlY3MuCisgKi8KKworLyoqCisgKiBGZW5jZSBvYmplY3QgdXNlZCBieSBjb21wb25lbnRzIGFuZCB0aGUgZnJhbWV3b3JrLgorICoKKyAqIEltcGxlbWVudHMgdGhlIHdhaXRpbmcgZm9yIGFuIGV2ZW50LCBhbmFsb2dvdXMgdG8gYSAnZnV0dXJlJy4KKyAqCisgKiBUbyBiZSBpbXBsZW1lbnRlZCBieSB2ZW5kb3JzIGlmIHVzaW5nIEhXIGZlbmNlcy4KKyAqLworY2xhc3MgQzJGZW5jZSB7CitwdWJsaWM6CisgICAgLyoqCisgICAgICogV2FpdHMgZm9yIGEgZmVuY2UgdG8gYmUgc2lnbmFsZWQgd2l0aCBhIHRpbWVvdXQuCisgICAgICoKKyAgICAgKiBcdG9kbyBhIG1lY2hhbmlzbSB0byBjYW5jZWwgYSB3YWl0IC0gZm9yIG5vdyB0aGUgb25seSB3YXkgdG8gZG8gdGhpcyBpcyB0byBhYmFuZG9uIHRoZQorICAgICAqIGV2ZW50LCBidXQgZmVuY2VzIGFyZSBzaGFyZWQgc28gY2FuY2VsaW5nIGEgd2FpdCB3aWxsIGNhbmNlbCBhbGwgd2FpdHMuCisgICAgICoKKyAgICAgKiBccGFyYW0gdGltZW91dE5zICAgICAgICAgICB0aGUgbWF4aW11bSB0aW1lIHRvIHdhaXQgaW4gbnNlY3MKKyAgICAgKgorICAgICAqIFxyZXR2YWwgQzJfT0sgICAgICAgICAgICB0aGUgZmVuY2UgaGFzIGJlZW4gc2lnbmFsZWQKKyAgICAgKiBccmV0dmFsIEMyX1RJTUVEX09VVCAgICAgdGhlIGZlbmNlIGhhcyBub3QgYmVlbiBzaWduYWxlZCB3aXRoaW4gdGhlIHRpbWVvdXQKKyAgICAgKiBccmV0dmFsIEMyX0JBRF9TVEFURSAgICAgdGhlIGZlbmNlIGhhcyBiZWVuIGFiYW5kb25lZCB3aXRob3V0IGJlaW5nIHNpZ25hbGVkIChpdCB3aWxsIG5ldmVyCisgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgIGJlIHNpZ25hbGVkKQorICAgICAqIFxyZXR2YWwgQzJfUkVGVVNFRCAgICAgICBubyBwZXJtaXNzaW9uIHRvIHdhaXQgZm9yIHRoZSBmZW5jZSAodW5leHBlY3RlZCAtIHN5c3RlbSkKKyAgICAgKiBccmV0dmFsIEMyX0NPUlJVUFRFRCAgICAgc29tZSB1bmtub3duIGVycm9yIHByZXZlbnRlZCB3YWl0aW5nIGZvciB0aGUgZmVuY2UgKHVuZXhwZWN0ZWQpCisgICAgICovCisgICAgYzJfc3RhdHVzX3Qgd2FpdChjMl9uc2Vjc190IHRpbWVvdXROcyk7CisKKyAgICAvKioKKyAgICAgKiBVc2VkIHRvIGNoZWNrIGlmIHRoaXMgZmVuY2UgaXMgdmFsaWQgKGlmIHRoZXJlIGlzIGEgY2hhbmNlIGZvciBpdCB0byBiZSBzaWduYWxlZC4pCisgICAgICogQSBmZW5jZSBiZWNvbWVzIGludmFsaWQgaWYgdGhlIGNvbnRyb2xpbmcgZXZlbnQgaXMgZGVzdHJveWVkIHdpdGhvdXQgaXQgc2lnbmFsaW5nIHRoZSBmZW5jZS4KKyAgICAgKgorICAgICAqIFxyZXR1cm4gd2hldGhlciB0aGlzIGZlbmNlIGlzIHZhbGlkCisgICAgICovCisgICAgYm9vbCB2YWxpZCgpIGNvbnN0OworCisgICAgLyoqCisgICAgICogVXNlZCB0byBjaGVjayBpZiB0aGlzIGZlbmNlIGhhcyBiZWVuIHNpZ25hbGVkIChpcyByZWFkeSkuCisgICAgICoKKyAgICAgKiBccmV0dXJuIHdoZXRoZXIgdGhpcyBmZW5jZSBoYXMgYmVlbiBzaWduYWxlZAorICAgICAqLworICAgIGJvb2wgcmVhZHkoKSBjb25zdDsKKworICAgIC8qKgorICAgICAqIFJldHVybnMgYSBmaWxlIGRlc2NyaXB0b3IgdGhhdCBjYW4gYmUgdXNlZCB0byB3YWl0IGZvciB0aGlzIGZlbmNlIGluIGEgc2VsZWN0IHN5c3RlbSBjYWxsLgorICAgICAqIFxub3RlIFRoZSByZXR1cm5lZCBmaWxlIGRlc2NyaXB0b3IsIGlmIHZhbGlkLCBtdXN0IGJlIGNsb3NlZCBieSB0aGUgY2FsbGVyLgorICAgICAqCisgICAgICogVGhpcyBjYW4gYmUgdXNlZCBpbiBlLmcuIHBvbGwoKSBzeXN0ZW0gY2FsbHMuIFRoaXMgZmlsZSBiZWNvbWVzIHJlYWRhYmxlIChQT0xMSU4pIHdoZW4gdGhlCisgICAgICogZmVuY2UgaXMgc2lnbmFsZWQsIGFuZCBiYWQgKFBPTExFUlIpIGlmIHRoZSBmZW5jZSBpcyBhYmFuZG9uZWQuCisgICAgICoKKyAgICAgKiBccmV0dXJuIGEgZmlsZSBkZXNjcmlwdG9yIHJlcHJlc2VudGluZyB0aGlzIGZlbmNlICh3aXRoIG93bmVyc2hpcCksIG9yIC0xIGlmIHRoZSBmZW5jZQorICAgICAqIGhhcyBhbHJlYWR5IGJlZW4gc2lnbmFsZWQgKFx0b2RvIG9yIGFiYW5kb25lZCkuCisgICAgICoKKyAgICAgKiBcdG9kbyB0aGlzIG11c3QgYmUgY29tcGF0aWJsZSB3aXRoIGZlbmNlcyB1c2VkIGJ5IGdyYWxsb2MKKyAgICAgKi8KKyAgICBpbnQgZmQoKSBjb25zdDsKKworICAgIC8qKgorICAgICAqIFJldHVybnMgd2hldGhlciB0aGlzIGZlbmNlIGlzIGEgaGFyZHdhcmUtYmFja2VkIGZlbmNlLgorICAgICAqIFxyZXR1cm4gd2hldGhlciB0aGlzIGlzIGEgaGFyZHdhcmUgZmVuY2UKKyAgICAgKi8KKyAgICBib29sIGlzSFcoKSBjb25zdDsKKworICAgIC8qKgorICAgICAqIE51bGwtZmVuY2UuIEEgZmVuY2UgdGhhdCBoYXMgZmlyZWQuCisgICAgICovCisgICAgY29uc3RleHByIEMyRmVuY2UoKSA6IG1JbXBsKG51bGxwdHIpIHsgfQorCitwcml2YXRlOgorICAgIGNsYXNzIEltcGw7CisgICAgc3RkOjpzaGFyZWRfcHRyPEltcGw+IG1JbXBsOworICAgIEMyRmVuY2Uoc3RkOjpzaGFyZWRfcHRyPEltcGw+IGltcGwpOworICAgIGZyaWVuZCBzdHJ1Y3QgX0MyRmVuY2VGYWN0b3J5OworfTsKKworLyoqCisgKiBFdmVudCBvYmplY3QgdXNlZCBieSBjb21wb25lbnRzIGFuZCB0aGUgZnJhbWV3b3JrLgorICoKKyAqIEltcGxlbWVudHMgdGhlIHNpZ25hbGluZyBvZiBhbiBldmVudCwgYW5hbG9nb3VzIHRvIGEgJ3Byb21pc2UnLgorICoKKyAqIEhhcmR3YXJlIGJhY2tlZCBldmVudHMgZG8gbm90IGdvIHRocm91Z2ggdGhpcyBvYmplY3QsIGFuZCBtdXN0IGJlIGV4cG9zZWQgZGlyZWN0bHkgYXMgZmVuY2VzCisgKiBieSB2ZW5kb3JzLgorICovCitjbGFzcyBDMkV2ZW50IHsKK3B1YmxpYzoKKyAgICAvKioKKyAgICAgKiBSZXR1cm5zIGEgZmVuY2UgZm9yIHRoaXMgZXZlbnQuCisgICAgICovCisgICAgQzJGZW5jZSBmZW5jZSgpIGNvbnN0OworCisgICAgLyoqCisgICAgICogU2lnbmFscyAoYWxsKSBhc3NvY2lhdGVkIGZlbmNlKHMpLgorICAgICAqIFRoaXMgaGFzIG5vIGVmZmVjdCBubyBlZmZlY3QgaWYgdGhlIGV2ZW50IHdhcyBhbHJlYWR5IHNpZ25hbGVkIG9yIGFiYW5kb25lZC4KKyAgICAgKgorICAgICAqIFxyZXR2YWwgQzJfT0sgICAgICAgICAgICB0aGUgZmVuY2Uocykgd2VyZSBzdWNjZXNzZnVsbHkgc2lnbmFsZWQKKyAgICAgKiBccmV0dmFsIEMyX0JBRF9TVEFURSAgICAgdGhlIGZlbmNlKHMpIGhhdmUgYWxyZWFkeSBiZWVuIGFiYW5kb25lZCBvciBtZXJnZWQgKGNhbGxlciBlcnJvcikKKyAgICAgKiBccmV0dmFsIEMyX0RVUExJQ0FURSAgICAgdGhlIGZlbmNlKHMpIGhhdmUgYWxyZWFkeSBiZWVuIHNpZ25hbGVkIChjYWxsZXIgZXJyb3IpCisgICAgICogXHJldHZhbCBDMl9SRUZVU0VEICAgICAgIG5vIHBlcm1pc3Npb24gdG8gc2lnbmFsIHRoZSBmZW5jZSAodW5leHBlY3RlZCAtIHN5c3RlbSkKKyAgICAgKiBccmV0dmFsIEMyX0NPUlJVUFRFRCAgICAgc29tZSB1bmtub3duIGVycm9yIHByZXZlbnRlZCBzaWduYWxpbmcgdGhlIGZlbmNlKHMpICh1bmV4cGVjdGVkKQorICAgICAqLworICAgIGMyX3N0YXR1c190IGZpcmUoKTsKKworICAgIC8qKgorICAgICAqIFRyaWdnZXIgdGhpcyBldmVudCBmcm9tIHRoZSBtZXJnaW5nIG9mIHRoZSBzdXBwbGllZCBmZW5jZXMuIFRoaXMgbWVhbnMgdGhhdCBpdCB3aWxsIGJlCisgICAgICogYWJhbmRvbmVkIGlmIGFueSBvZiB0aGVzZSBmZW5jZXMgaGF2ZSBiZWVuIGFiYW5kb25lZCwgYW5kIGl0IHdpbGwgYmUgZmlyZWQgaWYgYWxsIG9mIHRoZXNlCisgICAgICogZmVuY2VzIGhhdmUgYmVlbiBzaWduYWxlZC4KKyAgICAgKgorICAgICAqIFxyZXR2YWwgQzJfT0sgICAgICAgICAgICB0aGUgbWVyZ2luZyB3YXMgc3VjY2Vzc2Z1bGx5IGRvbmUKKyAgICAgKiBccmV0dmFsIEMyX05PX01FTU9SWSAgICAgbm90IGVub3VnaCBtZW1vcnkgdG8gcGVyZm9ybSB0aGUgbWVyZ2luZworICAgICAqIFxyZXR2YWwgQzJfRFVQTElDQVRFICAgICB0aGUgZmVuY2UgaGF2ZSBhbHJlYWR5IGJlZW4gbWVyZ2VkIChjYWxsZXIgZXJyb3IpCisgICAgICogXHJldHZhbCBDMl9CQURfU1RBVEUgICAgIHRoZSBmZW5jZSBoYXZlIGFscmVhZHkgYmVlbiBzaWduYWxlZCBvciBhYmFuZG9uZWQgKGNhbGxlciBlcnJvcikKKyAgICAgKiBccmV0dmFsIEMyX1JFRlVTRUQgICAgICAgbm8gcGVybWlzc2lvbiB0byBtZXJnZSB0aGUgZmVuY2UgKHVuZXhwZWN0ZWQgLSBzeXN0ZW0pCisgICAgICogXHJldHZhbCBDMl9DT1JSVVBURUQgICAgIHNvbWUgdW5rbm93biBlcnJvciBwcmV2ZW50ZWQgbWVyZ2luZyB0aGUgZmVuY2UocykgKHVuZXhwZWN0ZWQpCisgICAgICovCisgICAgYzJfc3RhdHVzX3QgbWVyZ2Uoc3RkOjp2ZWN0b3I8QzJGZW5jZT4gZmVuY2VzKTsKKworICAgIC8qKgorICAgICAqIEFiYW5kb25zIHRoZSBldmVudCBhbmQgYW55IGFzc29jaWF0ZWQgZmVuY2UocykuCisgICAgICogXG5vdGUgQ2FsbCB0aGlzIHRvIGV4cGxpY2l0bHkgYWJhbmRvbiBhbiBldmVudCBiZWZvcmUgaXQgaXMgZGVzdHJ1Y3RlZCB0byBhdm9pZCBhIHdhcm5pbmcuCisgICAgICoKKyAgICAgKiBUaGlzIGhhcyBubyBlZmZlY3Qgbm8gZWZmZWN0IGlmIHRoZSBldmVudCB3YXMgYWxyZWFkeSBzaWduYWxlZCBvciBhYmFuZG9uZWQuCisgICAgICoKKyAgICAgKiBccmV0dmFsIEMyX09LICAgICAgICAgICAgdGhlIGZlbmNlKHMpIHdlcmUgc3VjY2Vzc2Z1bGx5IHNpZ25hbGVkCisgICAgICogXHJldHZhbCBDMl9CQURfU1RBVEUgICAgIHRoZSBmZW5jZShzKSBoYXZlIGFscmVhZHkgYmVlbiBzaWduYWxlZCBvciBtZXJnZWQgKGNhbGxlciBlcnJvcikKKyAgICAgKiBccmV0dmFsIEMyX0RVUExJQ0FURSAgICAgdGhlIGZlbmNlKHMpIGhhdmUgYWxyZWFkeSBiZWVuIGFiYW5kb25lZCAoY2FsbGVyIGVycm9yKQorICAgICAqIFxyZXR2YWwgQzJfUkVGVVNFRCAgICAgICBubyBwZXJtaXNzaW9uIHRvIGFiYW5kb24gdGhlIGZlbmNlICh1bmV4cGVjdGVkIC0gc3lzdGVtKQorICAgICAqIFxyZXR2YWwgQzJfQ09SUlVQVEVEICAgICBzb21lIHVua25vd24gZXJyb3IgcHJldmVudGVkIHNpZ25hbGluZyB0aGUgZmVuY2UocykgKHVuZXhwZWN0ZWQpCisgICAgICovCisgICAgYzJfc3RhdHVzX3QgYWJhbmRvbigpOworCitwcml2YXRlOgorICAgIGNsYXNzIEltcGw7CisgICAgc3RkOjpzaGFyZWRfcHRyPEltcGw+IG1JbXBsOworfTsKKworLy8vIFxhZGR0b2dyb3VwIGJ1Zl9pbnRlcm5hbCBJbnRlcm5hbAorLy8vIEB7CisKKy8qKgorICogSW50ZXJmYWNlIGZvciBvYmplY3RzIHRoYXQgZW5jYXBzdWxhdGUgYW4gdXBkYXRhYmxlIHN0YXR1cyB2YWx1ZS4KKyAqLworc3RydWN0IF9DMklubmF0ZVN0YXR1cyB7CisgICAgaW5saW5lIGMyX3N0YXR1c190IHN0YXR1cygpIGNvbnN0IHsgcmV0dXJuIG1TdGF0dXM7IH0KKworcHJvdGVjdGVkOgorICAgIF9DMklubmF0ZVN0YXR1cyhjMl9zdGF0dXNfdCBzdGF0dXMpIDogbVN0YXR1cyhzdGF0dXMpIHsgfQorCisgICAgYzJfc3RhdHVzX3QgbVN0YXR1czsgLy8gdGhpcyBzdGF0dXMgaXMgdXBkYXRhYmxlIGJ5IHRoZSBvYmplY3QKK307CisKKy8vLyBAfQorCisvKioKKyAqIFRoaXMgaXMgYSB1dGlsaXR5IHRlbXBsYXRlIGZvciBvYmplY3RzIHByb3RlY3RlZCBieSBhbiBhY3F1aXJlIGZlbmNlLCBzbyB0aGF0IGVycm9ycyBkdXJpbmcKKyAqIGFjcXVpcmluZyB0aGUgb2JqZWN0IGFyZSBwcm9wYWdhdGVkIHRvIHRoZSBvYmplY3QgaXRzZWxmLgorICovCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPgorY2xhc3MgQzJBY3F1aXJhYmxlIDogcHVibGljIEMyRmVuY2UgeworcHVibGljOgorICAgIC8qKgorICAgICAqIEFjcXVpcmVzIHRoZSBvYmplY3QgcHJvdGVjdGVkIGJ5IGFuIGFjcXVpcmUgZmVuY2UuIEFueSBlcnJvcnMgZHVyaW5nIHRoZSBtYXBwaW5nIHdpbGwgYmUKKyAgICAgKiBwYXNzZWQgdG8gdGhlIG9iamVjdC4KKyAgICAgKgorICAgICAqIFxyZXR1cm4gYWNxdWlyZWQgb2JqZWN0IHBvdGVudGlhbGx5IGludmFsaWRhdGVkIGlmIHdhaXRpbmcgZm9yIHRoZSBmZW5jZSBmYWlsZWQuCisgICAgICovCisgICAgVCBnZXQoKSB7CisgICAgICAgIC8vIFRPRE86CisgICAgICAgIC8vIHdhaXQoKTsKKyAgICAgICAgcmV0dXJuIG1UOworICAgIH0KKworcHJvdGVjdGVkOgorICAgIEMyQWNxdWlyYWJsZShjMl9zdGF0dXNfdCBlcnJvciwgQzJGZW5jZSBmZW5jZSwgVCB0KSA6IEMyRmVuY2UoZmVuY2UpLCBtSW5pdGlhbEVycm9yKGVycm9yKSwgbVQodCkgeyB9CisKK3ByaXZhdGU6CisgICAgYzJfc3RhdHVzX3QgbUluaXRpYWxFcnJvcjsKKyAgICBUIG1UOyAvLyBUT0RPOiBtb3ZlIGluc3RlYWQgb2YgY29weQorfTsKKworLy8vIEB9CisKKy8vLyBcZGVmZ3JvdXAgbGluZWFyIExpbmVhciBEYXRhIEJsb2NrcworLy8vIEB7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICBMSU5FQVIgQVNQRUNUUywgQkxPQ0tTIEFORCBWSUVXUworKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qKgorICogQmFzaWMgc2VnbWVudCBtYXRoIHN1cHBvcnQuCisgKi8KK3N0cnVjdCBDMlNlZ21lbnQgeworICAgIHVpbnQzMl90IG9mZnNldDsKKyAgICB1aW50MzJfdCBzaXplOworCisgICAgaW5saW5lIGNvbnN0ZXhwciBDMlNlZ21lbnQodWludDMyX3Qgb2Zmc2V0XywgdWludDMyX3Qgc2l6ZV8pCisgICAgICAgIDogb2Zmc2V0KG9mZnNldF8pLAorICAgICAgICAgIHNpemUoc2l6ZV8pIHsKKyAgICB9CisKKyAgICBpbmxpbmUgY29uc3RleHByIGJvb2wgaXNFbXB0eSgpIGNvbnN0IHsKKyAgICAgICAgcmV0dXJuIHNpemUgPT0gMDsKKyAgICB9CisKKyAgICBpbmxpbmUgY29uc3RleHByIGJvb2wgaXNWYWxpZCgpIGNvbnN0IHsKKyAgICAgICAgcmV0dXJuIG9mZnNldCA8PSB+c2l6ZTsKKyAgICB9CisKKyAgICBpbmxpbmUgY29uc3RleHByIG9wZXJhdG9yIGJvb2woKSBjb25zdCB7CisgICAgICAgIHJldHVybiBpc1ZhbGlkKCkgJiYgIWlzRW1wdHkoKTsKKyAgICB9CisKKyAgICBpbmxpbmUgY29uc3RleHByIGJvb2wgb3BlcmF0b3IhKCkgY29uc3QgeworICAgICAgICByZXR1cm4gIWJvb2woKnRoaXMpOworICAgIH0KKworICAgIEMyX0FMTE9XX09WRVJGTE9XCisgICAgaW5saW5lIGNvbnN0ZXhwciBib29sIGNvbnRhaW5zKGNvbnN0IEMyU2VnbWVudCAmb3RoZXIpIGNvbnN0IHsKKyAgICAgICAgaWYgKCFpc1ZhbGlkKCkgfHwgIW90aGVyLmlzVmFsaWQoKSkgeworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgcmV0dXJuIG9mZnNldCA8PSBvdGhlci5vZmZzZXQKKyAgICAgICAgICAgICAgICAgICAgJiYgb2Zmc2V0ICsgc2l6ZSA+PSBvdGhlci5vZmZzZXQgKyBvdGhlci5zaXplOworICAgICAgICB9CisgICAgfQorCisgICAgaW5saW5lIGNvbnN0ZXhwciBib29sIG9wZXJhdG9yPT0oY29uc3QgQzJTZWdtZW50ICZvdGhlcikgY29uc3QgeworICAgICAgICBpZiAoIWlzVmFsaWQoKSkgeworICAgICAgICAgICAgcmV0dXJuICFvdGhlci5pc1ZhbGlkKCk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICByZXR1cm4gb2Zmc2V0ID09IG90aGVyLm9mZnNldCAmJiBzaXplID09IG90aGVyLnNpemU7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBpbmxpbmUgY29uc3RleHByIGJvb2wgb3BlcmF0b3IhPShjb25zdCBDMlNlZ21lbnQgJm90aGVyKSBjb25zdCB7CisgICAgICAgIHJldHVybiAhb3BlcmF0b3I9PShvdGhlcik7CisgICAgfQorCisgICAgaW5saW5lIGNvbnN0ZXhwciBib29sIG9wZXJhdG9yPj0oY29uc3QgQzJTZWdtZW50ICZvdGhlcikgY29uc3QgeworICAgICAgICByZXR1cm4gY29udGFpbnMob3RoZXIpOworICAgIH0KKworICAgIGlubGluZSBjb25zdGV4cHIgYm9vbCBvcGVyYXRvcj4oY29uc3QgQzJTZWdtZW50ICZvdGhlcikgY29uc3QgeworICAgICAgICByZXR1cm4gY29udGFpbnMob3RoZXIpICYmICFvcGVyYXRvcj09KG90aGVyKTsKKyAgICB9CisKKyAgICBpbmxpbmUgY29uc3RleHByIGJvb2wgb3BlcmF0b3I8PShjb25zdCBDMlNlZ21lbnQgJm90aGVyKSBjb25zdCB7CisgICAgICAgIHJldHVybiBvdGhlci5jb250YWlucygqdGhpcyk7CisgICAgfQorCisgICAgaW5saW5lIGNvbnN0ZXhwciBib29sIG9wZXJhdG9yPChjb25zdCBDMlNlZ21lbnQgJm90aGVyKSBjb25zdCB7CisgICAgICAgIHJldHVybiBvdGhlci5jb250YWlucygqdGhpcykgJiYgIW9wZXJhdG9yPT0ob3RoZXIpOworICAgIH0KKworICAgIEMyX0FMTE9XX09WRVJGTE9XCisgICAgaW5saW5lIGNvbnN0ZXhwciB1aW50MzJfdCBlbmQoKSBjb25zdCB7CisgICAgICAgIHJldHVybiBvZmZzZXQgKyBzaXplOworICAgIH0KKworICAgIEMyX0FMTE9XX09WRVJGTE9XCisgICAgaW5saW5lIGNvbnN0ZXhwciBDMlNlZ21lbnQgaW50ZXJzZWN0KGNvbnN0IEMyU2VnbWVudCAmb3RoZXIpIGNvbnN0IHsKKyAgICAgICAgcmV0dXJuIEMyU2VnbWVudChjMl9tYXgob2Zmc2V0LCBvdGhlci5vZmZzZXQpLAorICAgICAgICAgICAgICAgICAgICAgICAgIGMyX21pbihlbmQoKSwgb3RoZXIuZW5kKCkpIC0gYzJfbWF4KG9mZnNldCwgb3RoZXIub2Zmc2V0KSk7CisgICAgfQorCisgICAgLyoqIGNsYW1wcyBlbmQgdG8gb2Zmc2V0IGlmIGl0IG92ZXJmbG93cyAqLworICAgIGlubGluZSBjb25zdGV4cHIgQzJTZWdtZW50IG5vcm1hbGl6ZSgpIGNvbnN0IHsKKyAgICAgICAgcmV0dXJuIEMyU2VnbWVudChvZmZzZXQsIGMyX21heChvZmZzZXQsIGVuZCgpKSAtIG9mZnNldCk7CisgICAgfQorCisgICAgLyoqIGNsYW1wcyBlbmQgdG8gbWF4IGlmIGl0IG92ZXJmbG93cyAqLworICAgIGlubGluZSBjb25zdGV4cHIgQzJTZWdtZW50IHNhdHVyYXRlKCkgY29uc3QgeworICAgICAgICByZXR1cm4gQzJTZWdtZW50KG9mZnNldCwgYzJfbWluKHNpemUsIH5vZmZzZXQpKTsKKyAgICB9CisKK307CisKKy8qKgorICogQ29tbW9uIGFzcGVjdCBmb3IgYWxsIG9iamVjdHMgdGhhdCBoYXZlIGEgbGluZWFyIGNhcGFjaXR5LgorICovCitjbGFzcyBfQzJMaW5lYXJDYXBhY2l0eUFzcGVjdCB7CisvLy8gXG5hbWUgTGluZWFyIGNhcGFjaXR5IGludGVyZmFjZQorLy8vIEB7CitwdWJsaWM6CisgICAgaW5saW5lIGNvbnN0ZXhwciB1aW50MzJfdCBjYXBhY2l0eSgpIGNvbnN0IHsgcmV0dXJuIG1DYXBhY2l0eTsgfQorCisgICAgaW5saW5lIGNvbnN0ZXhwciBvcGVyYXRvciBDMlNlZ21lbnQoKSBjb25zdCB7CisgICAgICAgIHJldHVybiBDMlNlZ21lbnQoMCwgbUNhcGFjaXR5KTsKKyAgICB9CisKK3Byb3RlY3RlZDoKKworI2lmIFVJTlRQVFJfTUFYID09IDB4ZmZmZmZmZmYKKyAgICBzdGF0aWNfYXNzZXJ0KHNpemVvZihzaXplX3QpID09IHNpemVvZih1aW50MzJfdCksICJzaXplX3QgaXMgdG9vIGJpZyIpOworI2Vsc2UKKyAgICBzdGF0aWNfYXNzZXJ0KHNpemVvZihzaXplX3QpID4gc2l6ZW9mKHVpbnQzMl90KSwgInNpemVfdCBpcyB0b28gc21hbGwiKTsKKyAgICAvLyBleHBsaWNpdGx5IGRpc2FibGUgY29uc3RydWN0aW9uIGZyb20gc2l6ZV90CisgICAgaW5saW5lIGV4cGxpY2l0IF9DMkxpbmVhckNhcGFjaXR5QXNwZWN0KHNpemVfdCBjYXBhY2l0eSkgPSBkZWxldGU7CisjZW5kaWYKKworICAgIGlubGluZSBleHBsaWNpdCBjb25zdGV4cHIgX0MyTGluZWFyQ2FwYWNpdHlBc3BlY3QodWludDMyX3QgY2FwYWNpdHkpCisgICAgICA6IG1DYXBhY2l0eShjYXBhY2l0eSkgeyB9CisKKyAgICBpbmxpbmUgZXhwbGljaXQgY29uc3RleHByIF9DMkxpbmVhckNhcGFjaXR5QXNwZWN0KGNvbnN0IF9DMkxpbmVhckNhcGFjaXR5QXNwZWN0ICpwYXJlbnQpCisgICAgICAgIDogbUNhcGFjaXR5KHBhcmVudCA9PSBudWxscHRyID8gMCA6IHBhcmVudC0+Y2FwYWNpdHkoKSkgeyB9CisKK3ByaXZhdGU6CisgICAgdWludDMyX3QgbUNhcGFjaXR5OworLy8vIEB9Cit9OworCisvKioKKyAqIEFzcGVjdCBmb3Igb2JqZWN0cyB0aGF0IGhhdmUgYSBsaW5lYXIgcmFuZ2UgaW5zaWRlIGEgbGluZWFyIGNhcGFjaXR5LgorICoKKyAqIFRoaXMgY2xhc3MgaXMgY29waWFibGUuCisgKi8KK2NsYXNzIF9DMkxpbmVhclJhbmdlQXNwZWN0IDogcHVibGljIF9DMkxpbmVhckNhcGFjaXR5QXNwZWN0IHsKKy8vLyBcbmFtZSBMaW5lYXIgcmFuZ2UgaW50ZXJmYWNlCisvLy8gQHsKK3B1YmxpYzoKKyAgICBpbmxpbmUgY29uc3RleHByIHVpbnQzMl90IG9mZnNldCgpIGNvbnN0IHsgcmV0dXJuIG1PZmZzZXQ7IH0KKyAgICBpbmxpbmUgY29uc3RleHByIHVpbnQzMl90IGVuZE9mZnNldCgpIGNvbnN0IHsgcmV0dXJuIG1PZmZzZXQgKyBtU2l6ZTsgfQorICAgIGlubGluZSBjb25zdGV4cHIgdWludDMyX3Qgc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1TaXplOyB9CisKKyAgICBpbmxpbmUgY29uc3RleHByIG9wZXJhdG9yIEMyU2VnbWVudCgpIGNvbnN0IHsKKyAgICAgICAgcmV0dXJuIEMyU2VnbWVudChtT2Zmc2V0LCBtU2l6ZSk7CisgICAgfQorCitwcml2YXRlOgorICAgIC8vIHN1YnJhbmdlIG9mIGNhcGFjaXR5IFswLCBjYXBhY2l0eV0gJiBbc2l6ZSwgc2l6ZSArIG9mZnNldF0KKyAgICBpbmxpbmUgY29uc3RleHByIF9DMkxpbmVhclJhbmdlQXNwZWN0KHVpbnQzMl90IGNhcGFjaXR5Xywgc2l6ZV90IG9mZnNldCwgc2l6ZV90IHNpemUpCisgICAgICAgIDogX0MyTGluZWFyQ2FwYWNpdHlBc3BlY3QoY2FwYWNpdHlfKSwKKyAgICAgICAgICBtT2Zmc2V0KGMyX21pbihvZmZzZXQsIGNhcGFjaXR5KCkpKSwKKyAgICAgICAgICBtU2l6ZShjMl9taW4oc2l6ZSwgY2FwYWNpdHkoKSAtIG1PZmZzZXQpKSB7CisgICAgfQorCitwcm90ZWN0ZWQ6CisgICAgLy8gY29weSBjb25zdHJ1Y3RvciAobm8gZXJyb3IgY2hlY2spCisgICAgaW5saW5lIGNvbnN0ZXhwciBfQzJMaW5lYXJSYW5nZUFzcGVjdChjb25zdCBfQzJMaW5lYXJSYW5nZUFzcGVjdCAmb3RoZXIpCisgICAgICAgIDogX0MyTGluZWFyQ2FwYWNpdHlBc3BlY3Qob3RoZXIuY2FwYWNpdHkoKSksCisgICAgICAgICAgbU9mZnNldChvdGhlci5vZmZzZXQoKSksCisgICAgICAgICAgbVNpemUob3RoZXIuc2l6ZSgpKSB7CisgICAgfQorCisgICAgLy8gcGFyZW50IGNhcGFjaXR5IHJhbmdlIFswLCBjYXBhY2l0eV0KKyAgICBpbmxpbmUgY29uc3RleHByIGV4cGxpY2l0IF9DMkxpbmVhclJhbmdlQXNwZWN0KGNvbnN0IF9DMkxpbmVhckNhcGFjaXR5QXNwZWN0ICpwYXJlbnQpCisgICAgICAgIDogX0MyTGluZWFyQ2FwYWNpdHlBc3BlY3QocGFyZW50KSwKKyAgICAgICAgICBtT2Zmc2V0KDApLAorICAgICAgICAgIG1TaXplKGNhcGFjaXR5KCkpIHsKKyAgICB9CisKKyAgICAvLyBzdWJyYW5nZSBvZiBwYXJlbnQgY2FwYWNpdHkgWzAsIGNhcGFjaXR5XSAmIFtzaXplLCBzaXplICsgb2Zmc2V0XQorICAgIGlubGluZSBjb25zdGV4cHIgX0MyTGluZWFyUmFuZ2VBc3BlY3QoY29uc3QgX0MyTGluZWFyQ2FwYWNpdHlBc3BlY3QgKnBhcmVudCwgc2l6ZV90IG9mZnNldCwgc2l6ZV90IHNpemUpCisgICAgICAgIDogX0MyTGluZWFyQ2FwYWNpdHlBc3BlY3QocGFyZW50KSwKKyAgICAgICAgICBtT2Zmc2V0KGMyX21pbihvZmZzZXQsIGNhcGFjaXR5KCkpKSwKKyAgICAgICAgICBtU2l6ZShjMl9taW4oc2l6ZSwgY2FwYWNpdHkoKSAtIG1PZmZzZXQpKSB7CisgICAgfQorCisgICAgLy8gc3Vic2VjdGlvbiBvZiB0aGUgcGFyZW50J3MgYW5kIFtvZmZzZXQsIG9mZnNldCArIHNpemVdIHJhbmdlcworICAgIGlubGluZSBjb25zdGV4cHIgX0MyTGluZWFyUmFuZ2VBc3BlY3QoY29uc3QgX0MyTGluZWFyUmFuZ2VBc3BlY3QgKnBhcmVudCwgc2l6ZV90IG9mZnNldCwgc2l6ZV90IHNpemUpCisgICAgICAgIDogX0MyTGluZWFyQ2FwYWNpdHlBc3BlY3QocGFyZW50KSwKKyAgICAgICAgICBtT2Zmc2V0KGMyX21pbihjMl9tYXgob2Zmc2V0LCBwYXJlbnQgPT0gbnVsbHB0ciA/IDAgOiBwYXJlbnQtPm9mZnNldCgpKSwgY2FwYWNpdHkoKSkpLAorICAgICAgICAgIG1TaXplKHN0ZDo6bWluKGMyX21pbihzaXplLCBwYXJlbnQgPT0gbnVsbHB0ciA/IDAgOiBwYXJlbnQtPnNpemUoKSksIGNhcGFjaXR5KCkgLSBtT2Zmc2V0KSkgeworICAgIH0KKworcHVibGljOgorICAgIGlubGluZSBjb25zdGV4cHIgX0MyTGluZWFyUmFuZ2VBc3BlY3QgY2hpbGRSYW5nZShzaXplX3Qgb2Zmc2V0LCBzaXplX3Qgc2l6ZSkgY29uc3QgeworICAgICAgICByZXR1cm4gX0MyTGluZWFyUmFuZ2VBc3BlY3QoCisgICAgICAgICAgICBtU2l6ZSwKKyAgICAgICAgICAgIGMyX21pbihjMl9tYXgob2Zmc2V0LCBtT2Zmc2V0KSwgY2FwYWNpdHkoKSkgLSBtT2Zmc2V0LAorICAgICAgICAgICAgYzJfbWluKGMyX21pbihzaXplLCBtU2l6ZSksIGNhcGFjaXR5KCkgLSBjMl9taW4oYzJfbWF4KG9mZnNldCwgbU9mZnNldCksIGNhcGFjaXR5KCkpKSk7CisgICAgfQorCisgICAgZnJpZW5kIGNsYXNzIF9DMkVkaXRhYmxlTGluZWFyUmFuZ2VBc3BlY3Q7CisgICAgLy8gaW52YXJpYW50cyAwIDw9IG1PZmZzZXQgPD0gbU9mZnNldCArIG1TaXplIDw9IGNhcGFjaXR5KCkKKyAgICB1aW50MzJfdCBtT2Zmc2V0OworICAgIHVpbnQzMl90IG1TaXplOworLy8vIEB9Cit9OworCisvKioKKyAqIFV0aWxpdHkgY2xhc3MgZm9yIHNhZmUgcmFuZ2UgY2FsY3VsYXRpb25zIHVzaW5nIHNpemVfdC1zLgorICovCitjbGFzcyBDMkxpbmVhclJhbmdlIDogcHVibGljIF9DMkxpbmVhclJhbmdlQXNwZWN0IHsKK3B1YmxpYzoKKyAgICBpbmxpbmUgY29uc3RleHByIEMyTGluZWFyUmFuZ2UoY29uc3QgX0MyTGluZWFyQ2FwYWNpdHlBc3BlY3QgJnBhcmVudCwgc2l6ZV90IG9mZnNldCwgc2l6ZV90IHNpemUpCisgICAgICAgIDogX0MyTGluZWFyUmFuZ2VBc3BlY3QoJnBhcmVudCwgb2Zmc2V0LCBzaXplKSB7IH0KKworICAgIGlubGluZSBjb25zdGV4cHIgQzJMaW5lYXJSYW5nZShjb25zdCBfQzJMaW5lYXJSYW5nZUFzcGVjdCAmcGFyZW50LCBzaXplX3Qgb2Zmc2V0LCBzaXplX3Qgc2l6ZSkKKyAgICAgICAgOiBfQzJMaW5lYXJSYW5nZUFzcGVjdCgmcGFyZW50LCBvZmZzZXQsIHNpemUpIHsgfQorCisgICAgaW5saW5lIGNvbnN0ZXhwciBDMkxpbmVhclJhbmdlIGludGVyc2VjdChzaXplX3Qgb2Zmc2V0LCBzaXplX3Qgc2l6ZSkgY29uc3QgeworICAgICAgICByZXR1cm4gQzJMaW5lYXJSYW5nZSgqdGhpcywgb2Zmc2V0LCBzaXplKTsKKyAgICB9Cit9OworCisvKioKKyAqIFV0aWxpdHkgY2xhc3MgZm9yIHNpbXBsZSBhbmQgc2FmZSBjYXBhY2l0eSBhbmQgcmFuZ2UgY29uc3RydWN0aW9uLgorICovCitjbGFzcyBDMkxpbmVhckNhcGFjaXR5IDogcHVibGljIF9DMkxpbmVhckNhcGFjaXR5QXNwZWN0IHsKK3B1YmxpYzoKKyAgICBpbmxpbmUgY29uc3RleHByIGV4cGxpY2l0IEMyTGluZWFyQ2FwYWNpdHkoc2l6ZV90IGNhcGFjaXR5KQorICAgICAgICA6IF9DMkxpbmVhckNhcGFjaXR5QXNwZWN0KGMyX21pbihjYXBhY2l0eSwgc3RkOjpudW1lcmljX2xpbWl0czx1aW50MzJfdD46Om1heCgpKSkgeyB9CisKKyAgICBpbmxpbmUgY29uc3RleHByIEMyTGluZWFyUmFuZ2UgcmFuZ2Uoc2l6ZV90IG9mZnNldCwgc2l6ZV90IHNpemUpIGNvbnN0IHsKKyAgICAgICAgcmV0dXJuIEMyTGluZWFyUmFuZ2UoKnRoaXMsIG9mZnNldCwgc2l6ZSk7CisgICAgfQorfTsKKworLyoqCisgKiBBc3BlY3QgZm9yIG9iamVjdHMgdGhhdCBoYXZlIGFuIGVkaXRhYmxlIGxpbmVhciByYW5nZS4KKyAqCisgKiBUaGlzIGNsYXNzIGlzIGNvcGlhYmxlLgorICovCitjbGFzcyBfQzJFZGl0YWJsZUxpbmVhclJhbmdlQXNwZWN0IDogcHVibGljIF9DMkxpbmVhclJhbmdlQXNwZWN0IHsKKyAgICB1c2luZyBfQzJMaW5lYXJSYW5nZUFzcGVjdDo6X0MyTGluZWFyUmFuZ2VBc3BlY3Q7CisKK3B1YmxpYzoKKy8vLyBcbmFtZSBFZGl0YWJsZSBsaW5lYXIgcmFuZ2UgaW50ZXJmYWNlCisvLy8gQHsKKworICAgIC8qKgorICAgICAqIFNldHMgdGhlIG9mZnNldCB0byB8b2Zmc2V0fCwgd2hpbGUgdHJ5aW5nIHRvIGtlZXAgdGhlIGVuZCBvZiB0aGUgYnVmZmVyIHVuY2hhbmdlZCAoZS5nLgorICAgICAqIHNpemUgd2lsbCBncm93IGlmIG9mZnNldCBpcyBkZWNyZWFzZWQsIGFuZCBtYXkgc2hyaW5rIGlmIG9mZnNldCBpcyBpbmNyZWFzZWQuKSBSZXR1cm5zCisgICAgICogdHJ1ZSBpZiBzdWNjZXNzZnVsLCB3aGljaCBpcyBlcXVpdmFsZW50IHRvIGlmIDAgPD0gfG9mZnNldHwgPD0gY2FwYWNpdHkoKS4KKyAgICAgKgorICAgICAqIE5vdGU6IHNldHRpbmcgb2Zmc2V0IGFuZCBzaXplIHdpbGwgeWllbGQgZGlmZmVyZW50IHJlc3VsdCBkZXBlbmRpbmcgb24gdGhlIG9yZGVyIG9mIHRoZQorICAgICAqIG9wZXJhdGlvbnMuIEFsd2F5cyBzZXQgb2Zmc2V0IGZpcnN0IHRvIGVuc3VyZSBwcm9wZXIgc2l6ZS4KKyAgICAgKi8KKyAgICBpbmxpbmUgYm9vbCBzZXRPZmZzZXQodWludDMyX3Qgb2Zmc2V0KSB7CisgICAgICAgIGlmIChvZmZzZXQgPiBjYXBhY2l0eSgpKSB7CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKworICAgICAgICBpZiAob2Zmc2V0ID4gbU9mZnNldCArIG1TaXplKSB7CisgICAgICAgICAgICBtU2l6ZSA9IDA7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBtU2l6ZSA9IG1PZmZzZXQgKyBtU2l6ZSAtIG9mZnNldDsKKyAgICAgICAgfQorICAgICAgICBtT2Zmc2V0ID0gb2Zmc2V0OworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBTZXRzIHRoZSBzaXplIHRvIHxzaXplfC4gUmV0dXJucyB0cnVlIGlmIHN1Y2Nlc3NmdWwsIHdoaWNoIGlzIGVxdWl2YWxlbnQgdG8KKyAgICAgKiBpZiAwIDw9IHxzaXplfCA8PSBjYXBhY2l0eSgpIC0gb2Zmc2V0KCkuCisgICAgICoKKyAgICAgKiBOb3RlOiBzZXR0aW5nIG9mZnNldCBhbmQgc2l6ZSB3aWxsIHlpZWxkIGRpZmZlcmVudCByZXN1bHQgZGVwZW5kaW5nIG9uIHRoZSBvcmRlciBvZiB0aGUKKyAgICAgKiBvcGVyYXRpb25zLiBBbHdheXMgc2V0IG9mZnNldCBmaXJzdCB0byBlbnN1cmUgcHJvcGVyIHNpemUuCisgICAgICovCisgICAgaW5saW5lIGJvb2wgc2V0U2l6ZSh1aW50MzJfdCBzaXplKSB7CisgICAgICAgIGlmIChzaXplID4gY2FwYWNpdHkoKSAtIG1PZmZzZXQpIHsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIG1TaXplID0gc2l6ZTsKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9CisgICAgfQorCisgICAgLyoqCisgICAgICogU2V0cyB0aGUgb2Zmc2V0IHRvIHxvZmZzZXR8IHdpdGggYmVzdCBlZmZvcnQuIFNhbWUgYXMgc2V0T2Zmc2V0KCkgZXhjZXB0IHRoYXQgb2Zmc2V0IHdpbGwKKyAgICAgKiBiZSBjbGFtcGVkIHRvIHRoZSBidWZmZXIgY2FwYWNpdHkuCisgICAgICoKKyAgICAgKiBOb3RlOiBzZXR0aW5nIG9mZnNldCBhbmQgc2l6ZSAoZXZlbiB1c2luZyBiZXN0IGVmZm9ydCkgd2lsbCB5aWVsZCBkaWZmZXJlbnQgcmVzdWx0IGRlcGVuZGluZworICAgICAqIG9uIHRoZSBvcmRlciBvZiB0aGUgb3BlcmF0aW9ucy4gQWx3YXlzIHNldCBvZmZzZXQgZmlyc3QgdG8gZW5zdXJlIHByb3BlciBzaXplLgorICAgICAqLworICAgIGlubGluZSB2b2lkIHNldE9mZnNldF9iZSh1aW50MzJfdCBvZmZzZXQpIHsKKyAgICAgICAgKHZvaWQpc2V0T2Zmc2V0KGMyX21pbihvZmZzZXQsIGNhcGFjaXR5KCkpKTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBTZXRzIHRoZSBzaXplIHRvIHxzaXplfCB3aXRoIGJlc3QgZWZmb3J0LiBTYW1lIGFzIHNldFNpemUoKSBleGNlcHQgdGhhdCB0aGUgc2VsZWN0ZWQgcmVnaW9uCisgICAgICogd2lsbCBiZSBjbGFtcGVkIHRvIHRoZSBidWZmZXIgY2FwYWNpdHkgKGUuZy4gc2l6ZSBpcyBjbGFtcGVkIHRvIFswLCBjYXBhY2l0eSgpIC0gb2Zmc2V0KCldKS4KKyAgICAgKgorICAgICAqIE5vdGU6IHNldHRpbmcgb2Zmc2V0IGFuZCBzaXplIChldmVuIHVzaW5nIGJlc3QgZWZmb3J0KSB3aWxsIHlpZWxkIGRpZmZlcmVudCByZXN1bHQgZGVwZW5kaW5nCisgICAgICogb24gdGhlIG9yZGVyIG9mIHRoZSBvcGVyYXRpb25zLiBBbHdheXMgc2V0IG9mZnNldCBmaXJzdCB0byBlbnN1cmUgcHJvcGVyIHNpemUuCisgICAgICovCisgICAgaW5saW5lIHZvaWQgc2V0U2l6ZV9iZSh1aW50MzJfdCBzaXplKSB7CisgICAgICAgIG1TaXplID0gYzJfbWluKHNpemUsIGNhcGFjaXR5KCkgLSBtT2Zmc2V0KTsKKyAgICB9CisvLy8gQH0KK307CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICBBTExPQ0FUSU9OUworKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8vLyBcaW5ncm91cCBhbGxvY2F0b3IgQWxsb2NhdGlvbiBhbmQgbWVtb3J5IHBsYWNlbWVudAorLy8vIEB7CisKK2NsYXNzIEMyTGluZWFyQWxsb2NhdGlvbjsKK2NsYXNzIEMyR3JhcGhpY0FsbG9jYXRpb247CisKKy8qKgorICogIEFsbG9jYXRvcnMgYXJlIHVzZWQgYnkgdGhlIGZyYW1ld29yayB0byBhbGxvY2F0ZSBtZW1vcnkgKGFsbG9jYXRpb25zKSBmb3IgYnVmZmVycy4gVGhleSBjYW4KKyAqICBzdXBwb3J0IGVpdGhlciAxRCBvciAyRCBhbGxvY2F0aW9ucy4KKyAqCisgKiAgXG5vdGUgSW4gdGhlb3J5IHRoZXkgY291bGQgc3VwcG9ydCBib3RoLCBidXQgaW4gcHJhY3RpY2UsIHdlIHdpbGwgdXNlIG9ubHkgb25lIG9yIHRoZSBvdGhlci4KKyAqCisgKiAgTmV2ZXIgY29uc3RydWN0ZWQgb24gc3RhY2suCisgKgorICogIEFsbG9jYXRvcnMgYXJlIHByb3ZpZGVkIGJ5IHZlbmRvcnMuCisgKi8KK2NsYXNzIEMyQWxsb2NhdG9yIHsKK3B1YmxpYzoKKyAgICAvKioKKyAgICAgKiBBbGxvY2F0b3IgSUQgdHlwZS4KKyAgICAgKi8KKyAgICB0eXBlZGVmIHVpbnQzMl90IGlkX3Q7CisgICAgZW51bSA6IGlkX3QgeworICAgICAgICBCQURfSUQgPSAweEJBREQsIC8vIGludmFsaWQgYWxsb2NhdG9yIElECisgICAgfTsKKworICAgIC8qKgorICAgICAqIEFsbG9jYXRpb24gdHlwZXMuIFRoaXMgaXMgYSBiaXRtYXNrIGFuZCBpcyB1c2VkIGluIEMyQWxsb2NhdG9yOjpJbmZvCisgICAgICogdG8gbGlzdCB0aGUgc3VwcG9ydGVkIGFsbG9jYXRpb24gdHlwZXMgb2YgYW4gYWxsb2NhdG9yLgorICAgICAqLworICAgIGVudW0gdHlwZV90IDogdWludDMyX3QgeworICAgICAgICBMSU5FQVIgID0gMSA8PCAwLCAvLworICAgICAgICBHUkFQSElDID0gMSA8PCAxLAorICAgIH07CisKKyAgICAvKioKKyAgICAgKiBJbmZvcm1hdGlvbiBhYm91dCBhbiBhbGxvY2F0b3IuCisgICAgICoKKyAgICAgKiBBbGxvY2F0b3JzIGRvbid0IGhhdmUgYSBxdWVyeSBBUEkgc28gYWxsIHF1ZXJpYWJsZSBpbmZvcm1hdGlvbiBpcyBzdG9yZWQgaGVyZS4KKyAgICAgKi8KKyAgICBzdHJ1Y3QgVHJhaXRzIHsKKyAgICAgICAgQzJTdHJpbmcgbmFtZTsgICAgICAgICAgICAgIC8vLzwgYWxsb2NhdG9yIG5hbWUKKyAgICAgICAgaWRfdCBpZDsgICAgICAgICAgICAgICAgICAgIC8vLzwgYWxsb2NhdG9yIElECisgICAgICAgIHR5cGVfdCBzdXBwb3J0ZWRUeXBlczsgICAgICAvLy88IHN1cHBvcnRlZCBhbGxvY2F0aW9uIHR5cGVzCisgICAgICAgIEMyTWVtb3J5VXNhZ2UgbWluaW11bVVzYWdlOyAvLy88IHVzYWdlIHRoYXQgaXMgbWluaW1hbGx5IHJlcXVpcmVkIGZvciBhbGxvY2F0aW9ucworICAgICAgICBDMk1lbW9yeVVzYWdlIG1heGltdW1Vc2FnZTsgLy8vPCB1c2FnZSB0aGF0IGlzIG1heGltYWxseSBhbGxvd2VkIGZvciBhbGxvY2F0aW9ucworICAgIH07CisKKyAgICAvKioKKyAgICAgKiBSZXR1cm5zIHRoZSB1bmlxdWUgbmFtZSBvZiB0aGlzIGFsbG9jYXRvci4KKyAgICAgKgorICAgICAqIFRoaXMgbWV0aG9kIE1VU1QgYmUgIm5vbi1ibG9ja2luZyIgYW5kIHJldHVybiB3aXRoaW4gMW1zLgorICAgICAqCisgICAgICogXHJldHVybiB0aGUgbmFtZSBvZiB0aGlzIGFsbG9jYXRvci4KKyAgICAgKiBccmV0dmFsIGFuIGVtcHR5IHN0cmluZyBpZiB0aGVyZSB3YXMgbm90IGVub3VnaCBtZW1vcnkgdG8gYWxsb2NhdGUgdGhlIGFjdHVhbCBuYW1lLgorICAgICAqLworICAgIHZpcnR1YWwgQzJTdHJpbmcgZ2V0TmFtZSgpIGNvbnN0ID0gMDsKKworICAgIC8qKgorICAgICAqIFJldHVybnMgYSB1bmlxdWUgSUQgZm9yIHRoaXMgYWxsb2NhdG9yLiBUaGlzIElEIGlzIHVzZWQgdG8gZ2V0IHRoaXMgYWxsb2NhdG9yIGZyb20gdGhlCisgICAgICogYWxsb2NhdG9yIHN0b3JlLCBhbmQgdG8gaWRlbnRpZnkgdGhpcyBhbGxvY2F0b3IgYWNyb3NzIGFsbCBwcm9jZXNzZXMuCisgICAgICoKKyAgICAgKiBUaGlzIG1ldGhvZCBNVVNUIGJlICJub24tYmxvY2tpbmciIGFuZCByZXR1cm4gd2l0aGluIDFtcy4KKyAgICAgKgorICAgICAqIFxyZXR1cm4gYSB1bmlxdWUgSUQgZm9yIHRoaXMgYWxsb2NhdG9yLgorICAgICAqLworICAgIHZpcnR1YWwgaWRfdCBnZXRJZCgpIGNvbnN0ID0gMDsKKworICAgIC8qKgorICAgICAqIFJldHVybnMgdGhlIGFsbG9jYXRvciB0cmFpdHMuCisgICAgICoKKyAgICAgKiBUaGlzIG1ldGhvZCBNVVNUIGJlICJub24tYmxvY2tpbmciIGFuZCByZXR1cm4gd2l0aGluIDFtcy4KKyAgICAgKgorICAgICAqIEFsbG9jYXRvcnMgZG9uJ3QgaGF2ZSBhIGZ1bGwtZmxlZGdlZCBxdWVyeSBBUEksIG9ubHkgdGhpcyBtZXRob2QuCisgICAgICoKKyAgICAgKiBccmV0dXJuIGFsbG9jYXRvciBpbmZvcm1hdGlvbgorICAgICAqLworICAgIHZpcnR1YWwgc3RkOjpzaGFyZWRfcHRyPGNvbnN0IFRyYWl0cz4gZ2V0VHJhaXRzKCkgY29uc3QgPSAwOworCisgICAgLyoqCisgICAgICogQWxsb2NhdGVzIGEgMUQgYWxsb2NhdGlvbiBvZiBnaXZlbiB8Y2FwYWNpdHl8IGFuZCB8dXNhZ2V8LiBJZiBzdWNjZXNzZnVsLCB0aGUgYWxsb2NhdGlvbiBpcworICAgICAqIHN0b3JlZCBpbiB8YWxsb2NhdGlvbnwuIE90aGVyd2lzZSwgfGFsbG9jYXRpb258IGlzIHNldCB0byAnbnVsbHB0cicuCisgICAgICoKKyAgICAgKiBccGFyYW0gY2FwYWNpdHkgICAgICB0aGUgc2l6ZSBvZiByZXF1ZXN0ZWQgYWxsb2NhdGlvbiAodGhlIGFsbG9jYXRpb24gY291bGQgYmUgc2xpZ2h0bHkKKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICBsYXJnZXIsIGUuZy4gdG8gYWNjb3VudCBmb3IgYW55IHN5c3RlbS1yZXF1aXJlZCBhbGlnbm1lbnQpCisgICAgICogXHBhcmFtIHVzYWdlICAgICAgICAgdGhlIG1lbW9yeSB1c2FnZSBpbmZvIGZvciB0aGUgcmVxdWVzdGVkIGFsbG9jYXRpb24uIFxub3RlIHRoYXQgdGhlCisgICAgICogICAgICAgICAgICAgICAgICAgICAgcmV0dXJuZWQgYWxsb2NhdGlvbiBtYXkgYmUgbGF0ZXIgdXNlZC9tYXBwZWQgd2l0aCBkaWZmZXJlbnQgdXNhZ2UuCisgICAgICogICAgICAgICAgICAgICAgICAgICAgVGhlIGFsbG9jYXRvciBzaG91bGQgbGF5b3V0IHRoZSBidWZmZXIgdG8gYmUgb3B0aW1pemVkIGZvciB0aGlzIHVzYWdlLAorICAgICAqICAgICAgICAgICAgICAgICAgICAgIGJ1dCBtdXN0IHN1cHBvcnQgYW55IHVzYWdlLiBPbmUgZXhjZXB0aW9uOiBwcm90ZWN0ZWQgYnVmZmVycyBjYW4KKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICBvbmx5IGJlIHVzZWQgaW4gYSBwcm90ZWN0ZWQgc2NlbmFyaW8uCisgICAgICogXHBhcmFtIGFsbG9jYXRpb24gICAgcG9pbnRlciB0byB3aGVyZSB0aGUgYWxsb2NhdGlvbiBzaGFsbCBiZSBzdG9yZWQgb24gc3VjY2Vzcy4gbnVsbHB0cgorICAgICAqICAgICAgICAgICAgICAgICAgICAgIHdpbGwgYmUgc3RvcmVkIGhlcmUgb24gZmFpbHVyZQorICAgICAqCisgICAgICogXHJldHZhbCBDMl9PSyAgICAgICAgdGhlIGFsbG9jYXRpb24gd2FzIHN1Y2Nlc3NmdWwKKyAgICAgKiBccmV0dmFsIEMyX05PX01FTU9SWSBub3QgZW5vdWdoIG1lbW9yeSB0byBjb21wbGV0ZSB0aGUgYWxsb2NhdGlvbgorICAgICAqIFxyZXR2YWwgQzJfVElNRURfT1VUIHRoZSBhbGxvY2F0aW9uIHRpbWVkIG91dAorICAgICAqIFxyZXR2YWwgQzJfUkVGVVNFRCAgIG5vIHBlcm1pc3Npb24gdG8gY29tcGxldGUgdGhlIGFsbG9jYXRpb24KKyAgICAgKiBccmV0dmFsIEMyX0JBRF9WQUxVRSBjYXBhY2l0eSBvciB1c2FnZSBhcmUgbm90IHN1cHBvcnRlZCAoaW52YWxpZCkgKGNhbGxlciBlcnJvcikKKyAgICAgKiBccmV0dmFsIEMyX09NSVRURUQgICB0aGlzIGFsbG9jYXRvciBkb2VzIG5vdCBzdXBwb3J0IDFEIGFsbG9jYXRpb25zCisgICAgICogXHJldHZhbCBDMl9DT1JSVVBURUQgc29tZSB1bmtub3duLCB1bnJlY292ZXJhYmxlIGVycm9yIG9jY3VyZWQgZHVyaW5nIGFsbG9jYXRpb24gKHVuZXhwZWN0ZWQpCisgICAgICovCisgICAgdmlydHVhbCBjMl9zdGF0dXNfdCBuZXdMaW5lYXJBbGxvY2F0aW9uKAorICAgICAgICAgICAgdWludDMyX3QgY2FwYWNpdHkgX191bnVzZWQsIEMyTWVtb3J5VXNhZ2UgdXNhZ2UgX191bnVzZWQsCisgICAgICAgICAgICBzdGQ6OnNoYXJlZF9wdHI8QzJMaW5lYXJBbGxvY2F0aW9uPiAqYWxsb2NhdGlvbiAvKiBub25udWxsICovKSB7CisgICAgICAgICphbGxvY2F0aW9uID0gbnVsbHB0cjsKKyAgICAgICAgcmV0dXJuIEMyX09NSVRURUQ7CisgICAgfQorCisgICAgLyoqCisgICAgICogKFJlKWNyZWF0ZXMgYSAxRCBhbGxvY2F0aW9uIGZyb20gYSBuYXRpdmUgfGhhbmRsZXwuIElmIHN1Y2Nlc3NmdWwsIHRoZSBhbGxvY2F0aW9uIGlzIHN0b3JlZAorICAgICAqIGluIHxhbGxvY2F0aW9ufC4gT3RoZXJ3aXNlLCB8YWxsb2NhdGlvbnwgaXMgc2V0IHRvICdudWxscHRyJy4KKyAgICAgKgorICAgICAqIFxwYXJhbSBoYW5kbGUgICAgICB0aGUgaGFuZGxlIGZvciB0aGUgZXhpc3RpbmcgYWxsb2NhdGlvbi4gT24gc3VjY2VzcywgdGhlIGFsbG9jYXRpb24gd2lsbAorICAgICAqICAgICAgICAgICAgICAgICAgICB0YWtlIG93bmVyc2hpcCBvZiB8aGFuZGxlfC4KKyAgICAgKiBccGFyYW0gYWxsb2NhdGlvbiAgcG9pbnRlciB0byB3aGVyZSB0aGUgYWxsb2NhdGlvbiBzaGFsbCBiZSBzdG9yZWQgb24gc3VjY2Vzcy4gbnVsbHB0cgorICAgICAqICAgICAgICAgICAgICAgICAgICB3aWxsIGJlIHN0b3JlZCBoZXJlIG9uIGZhaWx1cmUKKyAgICAgKgorICAgICAqIFxyZXR2YWwgQzJfT0sgICAgICAgIHRoZSBhbGxvY2F0aW9uIHdhcyByZWNyZWF0ZWQgc3VjY2Vzc2Z1bGx5CisgICAgICogXHJldHZhbCBDMl9OT19NRU1PUlkgbm90IGVub3VnaCBtZW1vcnkgdG8gcmVjcmVhdGUgdGhlIGFsbG9jYXRpb24KKyAgICAgKiBccmV0dmFsIEMyX1RJTUVEX09VVCB0aGUgcmVjcmVhdGlvbiB0aW1lZCBvdXQgKHVuZXhwZWN0ZWQpCisgICAgICogXHJldHZhbCBDMl9SRUZVU0VEICAgbm8gcGVybWlzc2lvbiB0byByZWNyZWF0ZSB0aGUgYWxsb2NhdGlvbgorICAgICAqIFxyZXR2YWwgQzJfQkFEX1ZBTFVFIGludmFsaWQgaGFuZGxlIChjYWxsZXIgZXJyb3IpCisgICAgICogXHJldHZhbCBDMl9PTUlUVEVEICAgdGhpcyBhbGxvY2F0b3IgZG9lcyBub3Qgc3VwcG9ydCAxRCBhbGxvY2F0aW9ucworICAgICAqIFxyZXR2YWwgQzJfQ09SUlVQVEVEIHNvbWUgdW5rbm93biwgdW5yZWNvdmVyYWJsZSBlcnJvciBvY2N1cmVkIGR1cmluZyBhbGxvY2F0aW9uICh1bmV4cGVjdGVkKQorICAgICAqLworICAgIHZpcnR1YWwgYzJfc3RhdHVzX3QgcHJpb3JMaW5lYXJBbGxvY2F0aW9uKAorICAgICAgICAgICAgY29uc3QgQzJIYW5kbGUgKmhhbmRsZSBfX3VudXNlZCwKKyAgICAgICAgICAgIHN0ZDo6c2hhcmVkX3B0cjxDMkxpbmVhckFsbG9jYXRpb24+ICphbGxvY2F0aW9uIC8qIG5vbm51bGwgKi8pIHsKKyAgICAgICAgKmFsbG9jYXRpb24gPSBudWxscHRyOworICAgICAgICByZXR1cm4gQzJfT01JVFRFRDsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBBbGxvY2F0ZXMgYSAyRCBhbGxvY2F0aW9uIG9mIGdpdmVuIHx3aWR0aHwsIHxoZWlnaHR8LCB8Zm9ybWF0fCBhbmQgfHVzYWdlfC4gSWYgc3VjY2Vzc2Z1bCwKKyAgICAgKiB0aGUgYWxsb2NhdGlvbiBpcyBzdG9yZWQgaW4gfGFsbG9jYXRpb258LiBPdGhlcndpc2UsIHxhbGxvY2F0aW9ufCBpcyBzZXQgdG8gJ251bGxwdHInLgorICAgICAqCisgICAgICogXHBhcmFtIHdpZHRoICAgICAgICAgdGhlIHdpZHRoIG9mIHJlcXVlc3RlZCBhbGxvY2F0aW9uICh0aGUgYWxsb2NhdGlvbiBjb3VsZCBiZSBzbGlnaHRseQorICAgICAqICAgICAgICAgICAgICAgICAgICAgIGxhcmdlciwgZS5nLiB0byBhY2NvdW50IGZvciBhbnkgc3lzdGVtLXJlcXVpcmVkIGFsaWdubWVudCkKKyAgICAgKiBccGFyYW0gaGVpZ2h0ICAgICAgICB0aGUgaGVpZ2h0IG9mIHJlcXVlc3RlZCBhbGxvY2F0aW9uICh0aGUgYWxsb2NhdGlvbiBjb3VsZCBiZSBzbGlnaHRseQorICAgICAqICAgICAgICAgICAgICAgICAgICAgIGxhcmdlciwgZS5nLiB0byBhY2NvdW50IGZvciBhbnkgc3lzdGVtLXJlcXVpcmVkIGFsaWdubWVudCkKKyAgICAgKiBccGFyYW0gZm9ybWF0ICAgICAgICB0aGUgcGl4ZWwgZm9ybWF0IG9mIHJlcXVlc3RlZCBhbGxvY2F0aW9uLiBUaGlzIGNvdWxkIGJlIGEgdmVuZG9yCisgICAgICogICAgICAgICAgICAgICAgICAgICAgc3BlY2lmaWMgZm9ybWF0LgorICAgICAqIFxwYXJhbSB1c2FnZSAgICAgICAgIHRoZSBtZW1vcnkgdXNhZ2UgaW5mbyBmb3IgdGhlIHJlcXVlc3RlZCBhbGxvY2F0aW9uLiBcbm90ZSB0aGF0IHRoZQorICAgICAqICAgICAgICAgICAgICAgICAgICAgIHJldHVybmVkIGFsbG9jYXRpb24gbWF5IGJlIGxhdGVyIHVzZWQvbWFwcGVkIHdpdGggZGlmZmVyZW50IHVzYWdlLgorICAgICAqICAgICAgICAgICAgICAgICAgICAgIFRoZSBhbGxvY2F0b3Igc2hvdWxkIGxheW91dCB0aGUgYnVmZmVyIHRvIGJlIG9wdGltaXplZCBmb3IgdGhpcyB1c2FnZSwKKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICBidXQgbXVzdCBzdXBwb3J0IGFueSB1c2FnZS4gT25lIGV4Y2VwdGlvbjogcHJvdGVjdGVkIGJ1ZmZlcnMgY2FuCisgICAgICogICAgICAgICAgICAgICAgICAgICAgb25seSBiZSB1c2VkIGluIGEgcHJvdGVjdGVkIHNjZW5hcmlvLgorICAgICAqIFxwYXJhbSBhbGxvY2F0aW9uICAgIHBvaW50ZXIgdG8gd2hlcmUgdGhlIGFsbG9jYXRpb24gc2hhbGwgYmUgc3RvcmVkIG9uIHN1Y2Nlc3MuIG51bGxwdHIKKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICB3aWxsIGJlIHN0b3JlZCBoZXJlIG9uIGZhaWx1cmUKKyAgICAgKgorICAgICAqIFxyZXR2YWwgQzJfT0sgICAgICAgIHRoZSBhbGxvY2F0aW9uIHdhcyBzdWNjZXNzZnVsCisgICAgICogXHJldHZhbCBDMl9OT19NRU1PUlkgbm90IGVub3VnaCBtZW1vcnkgdG8gY29tcGxldGUgdGhlIGFsbG9jYXRpb24KKyAgICAgKiBccmV0dmFsIEMyX1RJTUVEX09VVCB0aGUgYWxsb2NhdGlvbiB0aW1lZCBvdXQKKyAgICAgKiBccmV0dmFsIEMyX1JFRlVTRUQgICBubyBwZXJtaXNzaW9uIHRvIGNvbXBsZXRlIHRoZSBhbGxvY2F0aW9uCisgICAgICogXHJldHZhbCBDMl9CQURfVkFMVUUgd2lkdGgsIGhlaWdodCwgZm9ybWF0IG9yIHVzYWdlIGFyZSBub3Qgc3VwcG9ydGVkIChpbnZhbGlkKSAoY2FsbGVyIGVycm9yKQorICAgICAqIFxyZXR2YWwgQzJfT01JVFRFRCAgIHRoaXMgYWxsb2NhdG9yIGRvZXMgbm90IHN1cHBvcnQgMkQgYWxsb2NhdGlvbnMKKyAgICAgKiBccmV0dmFsIEMyX0NPUlJVUFRFRCBzb21lIHVua25vd24sIHVucmVjb3ZlcmFibGUgZXJyb3Igb2NjdXJlZCBkdXJpbmcgYWxsb2NhdGlvbiAodW5leHBlY3RlZCkKKyAgICAgKi8KKyAgICB2aXJ0dWFsIGMyX3N0YXR1c190IG5ld0dyYXBoaWNBbGxvY2F0aW9uKAorICAgICAgICAgICAgdWludDMyX3Qgd2lkdGggX191bnVzZWQsIHVpbnQzMl90IGhlaWdodCBfX3VudXNlZCwgdWludDMyX3QgZm9ybWF0IF9fdW51c2VkLAorICAgICAgICAgICAgQzJNZW1vcnlVc2FnZSB1c2FnZSBfX3VudXNlZCwKKyAgICAgICAgICAgIHN0ZDo6c2hhcmVkX3B0cjxDMkdyYXBoaWNBbGxvY2F0aW9uPiAqYWxsb2NhdGlvbiAvKiBub25udWxsICovKSB7CisgICAgICAgICphbGxvY2F0aW9uID0gbnVsbHB0cjsKKyAgICAgICAgcmV0dXJuIEMyX09NSVRURUQ7CisgICAgfQorCisgICAgLyoqCisgICAgICogKFJlKWNyZWF0ZXMgYSAyRCBhbGxvY2F0aW9uIGZyb20gYSBuYXRpdmUgaGFuZGxlLiAgSWYgc3VjY2Vzc2Z1bCwgdGhlIGFsbG9jYXRpb24gaXMgc3RvcmVkCisgICAgICogaW4gfGFsbG9jYXRpb258LiBPdGhlcndpc2UsIHxhbGxvY2F0aW9ufCBpcyBzZXQgdG8gJ251bGxwdHInLgorICAgICAqCisgICAgICogXHBhcmFtIGhhbmRsZSAgICAgIHRoZSBoYW5kbGUgZm9yIHRoZSBleGlzdGluZyBhbGxvY2F0aW9uLiBPbiBzdWNjZXNzLCB0aGUgYWxsb2NhdGlvbiB3aWxsCisgICAgICogICAgICAgICAgICAgICAgICAgIHRha2Ugb3duZXJzaGlwIG9mIHxoYW5kbGV8LgorICAgICAqIFxwYXJhbSBhbGxvY2F0aW9uICBwb2ludGVyIHRvIHdoZXJlIHRoZSBhbGxvY2F0aW9uIHNoYWxsIGJlIHN0b3JlZCBvbiBzdWNjZXNzLiBudWxscHRyCisgICAgICogICAgICAgICAgICAgICAgICAgIHdpbGwgYmUgc3RvcmVkIGhlcmUgb24gZmFpbHVyZQorICAgICAqCisgICAgICogXHJldHZhbCBDMl9PSyAgICAgICAgdGhlIGFsbG9jYXRpb24gd2FzIHJlY3JlYXRlZCBzdWNjZXNzZnVsbHkKKyAgICAgKiBccmV0dmFsIEMyX05PX01FTU9SWSBub3QgZW5vdWdoIG1lbW9yeSB0byByZWNyZWF0ZSB0aGUgYWxsb2NhdGlvbgorICAgICAqIFxyZXR2YWwgQzJfVElNRURfT1VUIHRoZSByZWNyZWF0aW9uIHRpbWVkIG91dCAodW5leHBlY3RlZCkKKyAgICAgKiBccmV0dmFsIEMyX1JFRlVTRUQgICBubyBwZXJtaXNzaW9uIHRvIHJlY3JlYXRlIHRoZSBhbGxvY2F0aW9uCisgICAgICogXHJldHZhbCBDMl9CQURfVkFMVUUgaW52YWxpZCBoYW5kbGUgKGNhbGxlciBlcnJvcikKKyAgICAgKiBccmV0dmFsIEMyX09NSVRURUQgICB0aGlzIGFsbG9jYXRvciBkb2VzIG5vdCBzdXBwb3J0IDJEIGFsbG9jYXRpb25zCisgICAgICogXHJldHZhbCBDMl9DT1JSVVBURUQgc29tZSB1bmtub3duLCB1bnJlY292ZXJhYmxlIGVycm9yIG9jY3VyZWQgZHVyaW5nIHJlY3JlYXRpb24gKHVuZXhwZWN0ZWQpCisgICAgICovCisgICAgdmlydHVhbCBjMl9zdGF0dXNfdCBwcmlvckdyYXBoaWNBbGxvY2F0aW9uKAorICAgICAgICAgICAgY29uc3QgQzJIYW5kbGUgKmhhbmRsZSBfX3VudXNlZCwKKyAgICAgICAgICAgIHN0ZDo6c2hhcmVkX3B0cjxDMkdyYXBoaWNBbGxvY2F0aW9uPiAqYWxsb2NhdGlvbiAvKiBub25udWxsICovKSB7CisgICAgICAgICphbGxvY2F0aW9uID0gbnVsbHB0cjsKKyAgICAgICAgcmV0dXJuIEMyX09NSVRURUQ7CisgICAgfQorCisgICAgdmlydHVhbCB+QzJBbGxvY2F0b3IoKSA9IGRlZmF1bHQ7Citwcm90ZWN0ZWQ6CisgICAgQzJBbGxvY2F0b3IoKSA9IGRlZmF1bHQ7Cit9OworCisvKioKKyAqIFxpbmdyb3VwIGxpbmVhciBhbGxvY2F0b3IKKyAqIDFEIGFsbG9jYXRpb24gaW50ZXJmYWNlLgorICovCitjbGFzcyBDMkxpbmVhckFsbG9jYXRpb24gOiBwdWJsaWMgX0MyTGluZWFyQ2FwYWNpdHlBc3BlY3QgeworcHVibGljOgorICAgIC8qKgorICAgICAqIE1hcHMgYSBwb3J0aW9uIG9mIGFuIGFsbG9jYXRpb24gc3RhcnRpbmcgZnJvbSB8b2Zmc2V0fCB3aXRoIHxzaXplfCBpbnRvIGxvY2FsIHByb2Nlc3MgbWVtb3J5LgorICAgICAqIFN0b3JlcyB0aGUgc3RhcnRpbmcgYWRkcmVzcyBpbnRvIHxhZGRyfCwgb3IgTlVMTCBpZiB0aGUgb3BlcmF0aW9uIHdhcyB1bnN1Y2Nlc3NmdWwuCisgICAgICogfGZlbmNlfCB3aWxsIGNvbnRhaW4gYW4gYWNxdWlyZSBzeW5jIGZlbmNlIG9iamVjdC4gSWYgaXQgaXMgYWxyZWFkeQorICAgICAqIHNhZmUgdG8gYWNjZXNzIHRoZSBidWZmZXIgY29udGVudHMsIHRoZW4gaXQgd2lsbCBjb250YWluIGFuIGVtcHR5IChhbHJlYWR5IGZpcmVkKSBmZW5jZS4KKyAgICAgKgorICAgICAqIFxwYXJhbSBvZmZzZXQgICAgICAgIHN0YXJ0aW5nIHBvc2l0aW9uIG9mIHRoZSBwb3J0aW9uIHRvIGJlIG1hcHBlZCAodGhpcyBkb2VzIG5vdCBoYXZlIHRvCisgICAgICogICAgICAgICAgICAgICAgICAgICAgYmUgcGFnZSBhbGlnbmVkKQorICAgICAqIFxwYXJhbSBzaXplICAgICAgICAgIHNpemUgb2YgdGhlIHBvcnRpb24gdG8gYmUgbWFwcGVkICh0aGlzIGRvZXMgbm90IGhhdmUgdG8gYmUgcGFnZQorICAgICAqICAgICAgICAgICAgICAgICAgICAgIGFsaWduZWQpCisgICAgICogXHBhcmFtIHVzYWdlICAgICAgICAgdGhlIGRlc2lyZWQgdXNhZ2UuIFx0b2RvIHRoaXMgbXVzdCBiZSBrU29mdHdhcmVSZWFkIGFuZC9vcgorICAgICAqICAgICAgICAgICAgICAgICAgICAgIGtTb2Z0d2FyZVdyaXRlLgorICAgICAqIFxwYXJhbSBmZW5jZSAgICAgICAgIGEgcG9pbnRlciB0byBhIGZlbmNlIG9iamVjdCBpZiBhbiBhc3luYyBtYXBwaW5nIGlzIHJlcXVlc3RlZC4gSWYKKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICBub3QtbnVsbCwgYW5kIGFjcXVpcmUgZmVuY2Ugd2lsbCBiZSBzdG9yZWQgaGVyZSBvbiBzdWNjZXNzLCBvciBlbXB0eQorICAgICAqICAgICAgICAgICAgICAgICAgICAgIGZlbmNlIG9uIGZhaWx1cmUuIElmIG51bGwsIHRoZSBtYXBwaW5nIHdpbGwgYmUgc3luY2hyb25vdXMuCisgICAgICogXHBhcmFtIGFkZHIgICAgICAgICAgYSBwb2ludGVyIHRvIHdoZXJlIHRoZSBzdGFydGluZyBhZGRyZXNzIG9mIHRoZSBtYXBwZWQgcG9ydGlvbiB3aWxsIGJlCisgICAgICogICAgICAgICAgICAgICAgICAgICAgc3RvcmVkLiBPbiBmYWlsdXJlLCBudWxscHRyIHdpbGwgYmUgc3RvcmVkIGhlcmUuCisgICAgICoKKyAgICAgKiBcdG9kbyBPbmx5IG9uZSBwb3J0aW9uIGNhbiBiZSBtYXBwZWQgYXQgdGhlIHNhbWUgdGltZSAtIHRoaXMgaXMgdHJ1ZSBmb3IgZ3JhbGxvYywgYnV0IHRoZXJlCisgICAgICogICAgICAgaXMgbm8gbmVlZCBmb3IgdGhpcyBmb3IgMUQgYnVmZmVycy4KKyAgICAgKiBcdG9kbyBEbyB3ZSBuZWVkIHRvIHN1cHBvcnQgc3luYyBvcGVyYXRpb24gYXMgd2UgY291bGQganVzdCB3YWl0IGZvciB0aGUgZmVuY2U/CisgICAgICoKKyAgICAgKiBccmV0dmFsIEMyX09LICAgICAgICB0aGUgb3BlcmF0aW9uIHdhcyBzdWNjZXNzZnVsCisgICAgICogXHJldHZhbCBDMl9SRUZVU0VEICAgbm8gcGVybWlzc2lvbiB0byBtYXAgdGhlIHBvcnRpb24KKyAgICAgKiBccmV0dmFsIEMyX1RJTUVEX09VVCB0aGUgb3BlcmF0aW9uIHRpbWVkIG91dAorICAgICAqIFxyZXR2YWwgQzJfRFVQTElDQVRFIGlmIHRoZSBhbGxvY2F0aW9uIGlzIGFscmVhZHkgbWFwcGVkLgorICAgICAqIFxyZXR2YWwgQzJfTk9fTUVNT1JZIG5vdCBlbm91Z2ggbWVtb3J5IHRvIGNvbXBsZXRlIHRoZSBvcGVyYXRpb24KKyAgICAgKiBccmV0dmFsIEMyX0JBRF9WQUxVRSB0aGUgcGFyYW1ldGVycyAob2Zmc2V0L3NpemUpIGFyZSBpbnZhbGlkIG9yIG91dHNpZGUgdGhlIGFsbG9jYXRpb24sIG9yCisgICAgICogICAgICAgICAgICAgICAgICAgICAgdGhlIHVzYWdlIGZsYWdzIGFyZSBpbnZhbGlkIChjYWxsZXIgZXJyb3IpCisgICAgICogXHJldHZhbCBDMl9DT1JSVVBURUQgc29tZSB1bmtub3duIGVycm9yIHByZXZlbnRlZCB0aGUgb3BlcmF0aW9uIGZyb20gY29tcGxldGluZyAodW5leHBlY3RlZCkKKyAgICAgKi8KKyAgICB2aXJ0dWFsIGMyX3N0YXR1c190IG1hcCgKKyAgICAgICAgICAgIHNpemVfdCBvZmZzZXQsIHNpemVfdCBzaXplLCBDMk1lbW9yeVVzYWdlIHVzYWdlLCBDMkZlbmNlICpmZW5jZSAvKiBudWxsYWJsZSAqLywKKyAgICAgICAgICAgIHZvaWQgKiphZGRyIC8qIG5vbm51bGwgKi8pID0gMDsKKworICAgIC8qKgorICAgICAqIFVubWFwcyBhIHBvcnRpb24gb2YgYW4gYWxsb2NhdGlvbiBhdCB8YWRkcnwgd2l0aCB8c2l6ZXwuIFRoZXNlIG11c3QgYmUgcGFyYW1ldGVycyBwcmV2aW91c2x5CisgICAgICogcGFzc2VkIHRvIGFuZCByZXR1cm5lZCBieSB8bWFwfDsgb3RoZXJ3aXNlLCB0aGlzIG9wZXJhdGlvbiBpcyBhIG5vLW9wLgorICAgICAqCisgICAgICogXHBhcmFtIGFkZHIgICAgICAgICAgc3RhcnRpbmcgYWRkcmVzcyBvZiB0aGUgbWFwcGVkIHJlZ2lvbgorICAgICAqIFxwYXJhbSBzaXplICAgICAgICAgIHNpemUgb2YgdGhlIG1hcHBlZCByZWdpb24KKyAgICAgKiBccGFyYW0gZmVuY2UgICAgICAgICBhIHBvaW50ZXIgdG8gYSBmZW5jZSBvYmplY3QgaWYgYW4gYXN5bmMgdW5tYXBwaW5nIGlzIHJlcXVlc3RlZC4gSWYKKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICBub3QtbnVsbCwgYSByZWxlYXNlIGZlbmNlIHdpbGwgYmUgc3RvcmVkIGhlcmUgb24gc3VjY2Vzcywgb3IgZW1wdHkgZmVuY2UKKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICBvbiBmYWlsdXJlLiBUaGlzIGZlbmNlIHNpZ25hbHMgd2hlbiB0aGUgb3JpZ2luYWwgYWxsb2NhdGlvbiBjb250YWlucworICAgICAqICAgICAgICAgICAgICAgICAgICAgIGFsbCBjaGFuZ2VzIHRoYXQgaGFwcGVuZWQgdG8gdGhlIG1hcHBlZCByZWdpb24uIElmIG51bGwsIHRoZSB1bm1hcHBpbmcKKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICB3aWxsIGJlIHN5bmNocm9ub3VzLgorICAgICAqCisgICAgICogXHJldHZhbCBDMl9PSyAgICAgICAgdGhlIG9wZXJhdGlvbiB3YXMgc3VjY2Vzc2Z1bAorICAgICAqIFxyZXR2YWwgQzJfVElNRURfT1VUIHRoZSBvcGVyYXRpb24gdGltZWQgb3V0CisgICAgICogXHJldHZhbCBDMl9OT1RfRk9VTkQgaWYgdGhlIGFsbG9jYXRpb24gd2FzIG5vdCBtYXBwZWQgcHJldmlvdXNseS4KKyAgICAgKiBccmV0dmFsIEMyX0JBRF9WQUxVRSB0aGUgcGFyYW1ldGVycyAoYWRkci9zaXplKSBkbyBub3QgY29ycmVzcG9uZCB0byBwcmV2aW91c2x5IG1hcHBlZAorICAgICAqICAgICAgICAgICAgICAgICAgICAgIHJlZ2lvbnMgKGNhbGxlciBlcnJvcikKKyAgICAgKiBccmV0dmFsIEMyX0NPUlJVUFRFRCBzb21lIHVua25vd24gZXJyb3IgcHJldmVudGVkIHRoZSBvcGVyYXRpb24gZnJvbSBjb21wbGV0aW5nICh1bmV4cGVjdGVkKQorICAgICAqIFxyZXR2YWwgQzJfUkVGVVNFRCAgIG5vIHBlcm1pc3Npb24gdG8gdW5tYXAgdGhlIHBvcnRpb24gKHVuZXhwZWN0ZWQgLSBzeXN0ZW0pCisgICAgICovCisgICAgdmlydHVhbCBjMl9zdGF0dXNfdCB1bm1hcCh2b2lkICphZGRyLCBzaXplX3Qgc2l6ZSwgQzJGZW5jZSAqZmVuY2UgLyogbnVsbGFibGUgKi8pID0gMDsKKworICAgIC8qKgorICAgICAqIFJldHVybnMgdGhlIGFsbG9jYXRvciBJRCBmb3IgdGhpcyBhbGxvY2F0aW9uLiBUaGlzIGlzIHVzZWZ1bCB0byBwdXQgdGhlIGhhbmRsZSBpbnRvIGNvbnRleHQuCisgICAgICovCisgICAgdmlydHVhbCBDMkFsbG9jYXRvcjo6aWRfdCBnZXRBbGxvY2F0b3JJZCgpIGNvbnN0ID0gMDsKKworICAgIC8qKgorICAgICAqIFJldHVybnMgYSBwb2ludGVyIHRvIHRoZSBhbGxvY2F0aW9uIGhhbmRsZS4KKyAgICAgKi8KKyAgICB2aXJ0dWFsIGNvbnN0IEMySGFuZGxlICpoYW5kbGUoKSBjb25zdCA9IDA7CisKKyAgICAvKioKKyAgICAgKiBSZXR1cm5zIHRydWUgaWYgdGhpcyBpcyB0aGUgc2FtZSBhbGxvY2F0aW9uIGFzIHxvdGhlcnwuCisgICAgICovCisgICAgdmlydHVhbCBib29sIGVxdWFscyhjb25zdCBzdGQ6OnNoYXJlZF9wdHI8QzJMaW5lYXJBbGxvY2F0aW9uPiAmb3RoZXIpIGNvbnN0ID0gMDsKKworcHJvdGVjdGVkOgorICAgIC8vIFx0b2RvIHNob3VsZCB3ZSBsaW1pdCBhbGxvY2F0aW9uIGRpcmVjdGx5PworICAgIEMyTGluZWFyQWxsb2NhdGlvbihzaXplX3QgY2FwYWNpdHkpIDogX0MyTGluZWFyQ2FwYWNpdHlBc3BlY3QoYzJfbWluKGNhcGFjaXR5LCBVSU5UMzJfTUFYKSkge30KKyAgICB2aXJ0dWFsIH5DMkxpbmVhckFsbG9jYXRpb24oKSA9IGRlZmF1bHQ7Cit9OworCitjbGFzcyBDMkNpcmN1bGFyQmxvY2s7CitjbGFzcyBDMkxpbmVhckJsb2NrOworY2xhc3MgQzJHcmFwaGljQmxvY2s7CisKKy8qKgorICogIEJsb2NrIHBvb2xzIGFyZSB1c2VkIGJ5IGNvbXBvbmVudHMgdG8gb2J0YWluIG91dHB1dCBidWZmZXJzIGluIGFuIGVmZmljaWVudCB3YXkuIFRoZXkgY2FuCisgKiAgc3VwcG9ydCBlaXRoZXIgbGluZWFyICgxRCksIGNpcmN1bGFyICgxRCkgb3IgZ3JhcGhpYyAoMkQpIGJsb2Nrcy4KKyAqCisgKiAgQmxvY2sgcG9vbHMgZGVjb3VwbGUgdGhlIHJlY3ljbGluZyBvZiBtZW1vcnkvYWxsb2NhdGlvbnMgZnJvbSB0aGUgY29tcG9uZW50cy4gVGhleSBhcmUgbWVhbnQgdG8KKyAqICBiZSBhbiBvcGFxdWUgc2VydmljZSAodGhlcmUgYXJlIG5vIHB1YmxpYyBBUElzIG90aGVyIHRoYW4gb2J0YWluaW5nIGJsb2NrcykgcHJvdmlkZWQgYnkgdGhlCisgKiAgcGxhdGZvcm0uIEJsb2NrIHBvb2xzIGFyZSBhbHNvIG1lYW50IHRvIGRlY291cGxlIGFsbG9jYXRpb25zIGZyb20gbWVtb3J5IHVzZWQgYnkgYnVmZmVycy4gVGhpcworICogIGlzIGFjY29tcGxpc2hlZCBieSBhbGxvd2luZyBwb29scyB0byBhbGxvdCBtdWx0aXBsZSBtZW1vcnkgJ2Jsb2Nrcycgb24gYSBzaW5nbGUgYWxsb2NhdGlvbi4gQXMKKyAqICB0aGVpciBuYW1lIHN1Z2dlc3QsIGJsb2NrIHBvb2xzIG1haW50YWluIGEgcG9vbCBvZiBtZW1vcnkgYmxvY2tzLiBXaGVuIGEgY29tcG9uZW50IGFza3MgZm9yCisgKiAgYSBtZW1vcnkgYmxvY2ssIHBvb2xzIHdpbGwgdHJ5IHRvIHJldHVybiBhIGZyZWUgbWVtb3J5IGJsb2NrIGFscmVhZHkgaW4gdGhlIHBvb2wuIElmIG5vIHN1Y2gKKyAqICBibG9jayBleGlzdHMsIHRoZXkgd2lsbCBhbGxvY2F0ZSBtZW1vcnkgdXNpbmcgdGhlIGJhY2tpbmcgYWxsb2NhdG9yIGFuZCBhbGxvdCBhIGJsb2NrIG9uIHRoYXQKKyAqICBhbGxvY2F0aW9uLiBXaGVuIGJsb2NrcyBhcmUgbm8gbG9uZ2VyIHVzZWQgaW4gdGhlIHN5c3RlbSwgdGhleSBhcmUgcmVjeWNsZWQgYmFjayB0byB0aGUgYmxvY2sKKyAqICBwb29sIGFuZCBhcmUgYXZhaWxhYmxlIGFzIGZyZWUgYmxvY2tzLgorICoKKyAqICBOZXZlciBjb25zdHJ1Y3RlZCBvbiBzdGFjay4KKyAqLworY2xhc3MgQzJCbG9ja1Bvb2wgeworcHVibGljOgorICAgIC8qKgorICAgICAqIEJsb2NrIHBvb2wgSUQgdHlwZS4KKyAgICAgKi8KKyAgICB0eXBlZGVmIHVpbnQ2NF90IGxvY2FsX2lkX3Q7CisKKyAgICBlbnVtIDogbG9jYWxfaWRfdCB7CisgICAgICAgIEJBU0lDX0xJTkVBUiA9IDAsICAvLy88IElEIG9mIGJhc2ljICh1bm9wdGltaXplZCkgYmxvY2sgcG9vbCBmb3IgZmV0Y2hpbmcgMUQgYmxvY2tzCisgICAgICAgIEJBU0lDX0dSQVBISUMgPSAxLCAvLy88IElEIG9mIGJhc2ljICh1bm9wdGltaXplZCkgYmxvY2sgcG9vbCBmb3IgZmV0Y2hpbmcgMkQgYmxvY2tzCisgICAgICAgIFBMQVRGT1JNX1NUQVJUID0gMHgxMCwKKyAgICB9OworCisgICAgLyoqCisgICAgICogUmV0dXJucyB0aGUgSUQgZm9yIHRoaXMgYmxvY2sgcG9vbC4gVGhpcyBJRCBpcyB1c2VkIHRvIGdldCB0aGlzIGJsb2NrIHBvb2wgZnJvbSB0aGUgcGxhdGZvcm0uCisgICAgICogSXQgaXMgb25seSB2YWxpZCBpbiB0aGUgY3VycmVudCBwcm9jZXNzLgorICAgICAqCisgICAgICogVGhpcyBtZXRob2QgTVVTVCBiZSAibm9uLWJsb2NraW5nIiBhbmQgcmV0dXJuIHdpdGhpbiAxbXMuCisgICAgICoKKyAgICAgKiBccmV0dXJuIGEgbG9jYWwgSUQgZm9yIHRoaXMgYmxvY2sgcG9vbC4KKyAgICAgKi8KKyAgICB2aXJ0dWFsIGxvY2FsX2lkX3QgZ2V0TG9jYWxJZCgpIGNvbnN0ID0gMDsKKworICAgIC8qKgorICAgICAqIFJldHVybnMgdGhlIElEIG9mIHRoZSBiYWNraW5nIGFsbG9jYXRvciBvZiB0aGlzIGJsb2NrIHBvb2wuCisgICAgICoKKyAgICAgKiBUaGlzIG1ldGhvZCBNVVNUIGJlICJub24tYmxvY2tpbmciIGFuZCByZXR1cm4gd2l0aGluIDFtcy4KKyAgICAgKgorICAgICAqIFxyZXR1cm4gdGhlIElEIG9mIHRoZSBiYWNraW5nIGFsbG9jYXRvciBvZiB0aGlzIGJsb2NrIHBvb2wuCisgICAgICovCisgICAgdmlydHVhbCBDMkFsbG9jYXRvcjo6aWRfdCBnZXRBbGxvY2F0b3JJZCgpIGNvbnN0ID0gMDsKKworICAgIC8qKgorICAgICAqIE9idGFpbnMgYSBsaW5lYXIgd3JpdGVhYmxlIGJsb2NrIG9mIGdpdmVuIHxjYXBhY2l0eXwgYW5kIHx1c2FnZXwuIElmIHN1Y2Nlc3NmdWwsIHRoZQorICAgICAqIGJsb2NrIGlzIHN0b3JlZCBpbiB8YmxvY2t8LiBPdGhlcndpc2UsIHxibG9ja3wgaXMgc2V0IHRvICdudWxscHRyJy4KKyAgICAgKgorICAgICAqIFxwYXJhbSBjYXBhY2l0eSB0aGUgc2l6ZSBvZiByZXF1ZXN0ZWQgYmxvY2suCisgICAgICogXHBhcmFtIHVzYWdlICAgIHRoZSBtZW1vcnkgdXNhZ2UgaW5mbyBmb3IgdGhlIHJlcXVlc3RlZCBibG9jay4gUmV0dXJuZWQgYmxvY2tzIHdpbGwgYmUKKyAgICAgKiAgICAgICAgICAgICAgICAgb3B0aW1pemVkIGZvciB0aGlzIHVzYWdlLCBidXQgbWF5IGJlIHVzZWQgd2l0aCBhbnkgdXNhZ2UuIE9uZSBleGNlcHRpb246CisgICAgICogICAgICAgICAgICAgICAgIHByb3RlY3RlZCBibG9ja3MvYnVmZmVycyBjYW4gb25seSBiZSB1c2VkIGluIGEgcHJvdGVjdGVkIHNjZW5hcmlvLgorICAgICAqIFxwYXJhbSBibG9jayAgICBwb2ludGVyIHRvIHdoZXJlIHRoZSBvYnRhaW5lZCBibG9jayBzaGFsbCBiZSBzdG9yZWQgb24gc3VjY2Vzcy4gbnVsbHB0ciB3aWxsCisgICAgICogICAgICAgICAgICAgICAgIGJlIHN0b3JlZCBoZXJlIG9uIGZhaWx1cmUKKyAgICAgKgorICAgICAqIFxyZXR2YWwgQzJfT0sgICAgICAgIHRoZSBvcGVyYXRpb24gd2FzIHN1Y2Nlc3NmdWwKKyAgICAgKiBccmV0dmFsIEMyX05PX01FTU9SWSBub3QgZW5vdWdoIG1lbW9yeSB0byBjb21wbGV0ZSBhbnkgcmVxdWlyZWQgYWxsb2NhdGlvbgorICAgICAqIFxyZXR2YWwgQzJfVElNRURfT1VUIHRoZSBvcGVyYXRpb24gdGltZWQgb3V0CisgICAgICogXHJldHZhbCBDMl9SRUZVU0VEICAgbm8gcGVybWlzc2lvbiB0byBjb21wbGV0ZSBhbnkgcmVxdWlyZWQgYWxsb2NhdGlvbgorICAgICAqIFxyZXR2YWwgQzJfQkFEX1ZBTFVFIGNhcGFjaXR5IG9yIHVzYWdlIGFyZSBub3Qgc3VwcG9ydGVkIChpbnZhbGlkKSAoY2FsbGVyIGVycm9yKQorICAgICAqIFxyZXR2YWwgQzJfT01JVFRFRCAgIHRoaXMgcG9vbCBkb2VzIG5vdCBzdXBwb3J0IGxpbmVhciBibG9ja3MKKyAgICAgKiBccmV0dmFsIEMyX0NPUlJVUFRFRCBzb21lIHVua25vd24sIHVucmVjb3ZlcmFibGUgZXJyb3Igb2NjdXJlZCBkdXJpbmcgb3BlcmF0aW9uICh1bmV4cGVjdGVkKQorICAgICAqLworICAgIHZpcnR1YWwgYzJfc3RhdHVzX3QgZmV0Y2hMaW5lYXJCbG9jaygKKyAgICAgICAgICAgIHVpbnQzMl90IGNhcGFjaXR5IF9fdW51c2VkLCBDMk1lbW9yeVVzYWdlIHVzYWdlIF9fdW51c2VkLAorICAgICAgICAgICAgc3RkOjpzaGFyZWRfcHRyPEMyTGluZWFyQmxvY2s+ICpibG9jayAvKiBub25udWxsICovKSB7CisgICAgICAgICpibG9jayA9IG51bGxwdHI7CisgICAgICAgIHJldHVybiBDMl9PTUlUVEVEOworICAgIH0KKworICAgIC8qKgorICAgICAqIE9idGFpbnMgYSBjaXJjdWxhciB3cml0ZWFibGUgYmxvY2sgb2YgZ2l2ZW4gfGNhcGFjaXR5fCBhbmQgfHVzYWdlfC4gSWYgc3VjY2Vzc2Z1bCwgdGhlCisgICAgICogYmxvY2sgaXMgc3RvcmVkIGluIHxibG9ja3wuIE90aGVyd2lzZSwgfGJsb2NrfCBpcyBzZXQgdG8gJ251bGxwdHInLgorICAgICAqCisgICAgICogXHBhcmFtIGNhcGFjaXR5IHRoZSBzaXplIG9mIHJlcXVlc3RlZCBjaXJjdWxhciBibG9jay4gKG5vdGU6IHRoZSBzaXplIG9mIHRoZSBvYnRhaW5lZAorICAgICAqICAgICAgICAgICAgICAgICBibG9jayBjb3VsZCBiZSBzbGlnaHRseSBsYXJnZXIsIGUuZy4gdG8gYWNjb21tb2RhdGUgYW55IHN5c3RlbS1yZXF1aXJlZAorICAgICAqICAgICAgICAgICAgICAgICBhbGlnbm1lbnQpCisgICAgICogXHBhcmFtIHVzYWdlICAgIHRoZSBtZW1vcnkgdXNhZ2UgaW5mbyBmb3IgdGhlIHJlcXVlc3RlZCBibG9jay4gUmV0dXJuZWQgYmxvY2tzIHdpbGwgYmUKKyAgICAgKiAgICAgICAgICAgICAgICAgb3B0aW1pemVkIGZvciB0aGlzIHVzYWdlLCBidXQgbWF5IGJlIHVzZWQgd2l0aCBhbnkgdXNhZ2UuIE9uZSBleGNlcHRpb246CisgICAgICogICAgICAgICAgICAgICAgIHByb3RlY3RlZCBibG9ja3MvYnVmZmVycyBjYW4gb25seSBiZSB1c2VkIGluIGEgcHJvdGVjdGVkIHNjZW5hcmlvLgorICAgICAqIFxwYXJhbSBibG9jayAgICBwb2ludGVyIHRvIHdoZXJlIHRoZSBvYnRhaW5lZCBibG9jayBzaGFsbCBiZSBzdG9yZWQgb24gc3VjY2Vzcy4gbnVsbHB0cgorICAgICAqICAgICAgICAgICAgICAgICB3aWxsIGJlIHN0b3JlZCBoZXJlIG9uIGZhaWx1cmUKKyAgICAgKgorICAgICAqIFxyZXR2YWwgQzJfT0sgICAgICAgIHRoZSBvcGVyYXRpb24gd2FzIHN1Y2Nlc3NmdWwKKyAgICAgKiBccmV0dmFsIEMyX05PX01FTU9SWSBub3QgZW5vdWdoIG1lbW9yeSB0byBjb21wbGV0ZSBhbnkgcmVxdWlyZWQgYWxsb2NhdGlvbgorICAgICAqIFxyZXR2YWwgQzJfVElNRURfT1VUIHRoZSBvcGVyYXRpb24gdGltZWQgb3V0CisgICAgICogXHJldHZhbCBDMl9SRUZVU0VEICAgbm8gcGVybWlzc2lvbiB0byBjb21wbGV0ZSBhbnkgcmVxdWlyZWQgYWxsb2NhdGlvbgorICAgICAqIFxyZXR2YWwgQzJfQkFEX1ZBTFVFIGNhcGFjaXR5IG9yIHVzYWdlIGFyZSBub3Qgc3VwcG9ydGVkIChpbnZhbGlkKSAoY2FsbGVyIGVycm9yKQorICAgICAqIFxyZXR2YWwgQzJfT01JVFRFRCAgIHRoaXMgcG9vbCBkb2VzIG5vdCBzdXBwb3J0IGNpcmN1bGFyIGJsb2NrcworICAgICAqIFxyZXR2YWwgQzJfQ09SUlVQVEVEIHNvbWUgdW5rbm93biwgdW5yZWNvdmVyYWJsZSBlcnJvciBvY2N1cmVkIGR1cmluZyBvcGVyYXRpb24gKHVuZXhwZWN0ZWQpCisgICAgICovCisgICAgdmlydHVhbCBjMl9zdGF0dXNfdCBmZXRjaENpcmN1bGFyQmxvY2soCisgICAgICAgICAgICB1aW50MzJfdCBjYXBhY2l0eSBfX3VudXNlZCwgQzJNZW1vcnlVc2FnZSB1c2FnZSBfX3VudXNlZCwKKyAgICAgICAgICAgIHN0ZDo6c2hhcmVkX3B0cjxDMkNpcmN1bGFyQmxvY2s+ICpibG9jayAvKiBub25udWxsICovKSB7CisgICAgICAgICpibG9jayA9IG51bGxwdHI7CisgICAgICAgIHJldHVybiBDMl9PTUlUVEVEOworICAgIH0KKworICAgIC8qKgorICAgICAqIE9idGFpbnMgYSAyRCBncmFwaGljIGJsb2NrIG9mIGdpdmVuIHx3aWR0aHwsIHxoZWlnaHR8LCB8Zm9ybWF0fCBhbmQgfHVzYWdlfC4gSWYgc3VjY2Vzc2Z1bCwKKyAgICAgKiB0aGUgYmxvY2sgaXMgc3RvcmVkIGluIHxibG9ja3wuIE90aGVyd2lzZSwgfGJsb2NrfCBpcyBzZXQgdG8gJ251bGxwdHInLgorICAgICAqCisgICAgICogXHBhcmFtIHdpZHRoICB0aGUgd2lkdGggb2YgcmVxdWVzdGVkIGJsb2NrICh0aGUgb2J0YWluZWQgYmxvY2sgY291bGQgYmUgc2xpZ2h0bHkgbGFyZ2VyLCBlLmcuCisgICAgICogICAgICAgICAgICAgICB0byBhY2NvbW1vZGF0ZSBhbnkgc3lzdGVtLXJlcXVpcmVkIGFsaWdubWVudCkKKyAgICAgKiBccGFyYW0gaGVpZ2h0IHRoZSBoZWlnaHQgb2YgcmVxdWVzdGVkIGJsb2NrICh0aGUgb2J0YWluZWQgYmxvY2sgY291bGQgYmUgc2xpZ2h0bHkgbGFyZ2VyLAorICAgICAqICAgICAgICAgICAgICAgZS5nLiB0byBhY2NvbW1vZGF0ZSBhbnkgc3lzdGVtLXJlcXVpcmVkIGFsaWdubWVudCkKKyAgICAgKiBccGFyYW0gZm9ybWF0IHRoZSBwaXhlbCBmb3JtYXQgb2YgcmVxdWVzdGVkIGJsb2NrLiBUaGlzIGNvdWxkIGJlIGEgdmVuZG9yIHNwZWNpZmljIGZvcm1hdC4KKyAgICAgKiBccGFyYW0gdXNhZ2UgIHRoZSBtZW1vcnkgdXNhZ2UgaW5mbyBmb3IgdGhlIHJlcXVlc3RlZCBibG9jay4gUmV0dXJuZWQgYmxvY2tzIHdpbGwgYmUKKyAgICAgKiAgICAgICAgICAgICAgIG9wdGltaXplZCBmb3IgdGhpcyB1c2FnZSwgYnV0IG1heSBiZSB1c2VkIHdpdGggYW55IHVzYWdlLiBPbmUgZXhjZXB0aW9uOgorICAgICAqICAgICAgICAgICAgICAgcHJvdGVjdGVkIGJsb2Nrcy9idWZmZXJzIGNhbiBvbmx5IGJlIHVzZWQgaW4gYSBwcm90ZWN0ZWQgc2NlbmFyaW8uCisgICAgICogXHBhcmFtIGJsb2NrICBwb2ludGVyIHRvIHdoZXJlIHRoZSBvYnRhaW5lZCBibG9jayBzaGFsbCBiZSBzdG9yZWQgb24gc3VjY2Vzcy4gbnVsbHB0cgorICAgICAqICAgICAgICAgICAgICAgd2lsbCBiZSBzdG9yZWQgaGVyZSBvbiBmYWlsdXJlCisgICAgICoKKyAgICAgKiBccmV0dmFsIEMyX09LICAgICAgICB0aGUgb3BlcmF0aW9uIHdhcyBzdWNjZXNzZnVsCisgICAgICogXHJldHZhbCBDMl9OT19NRU1PUlkgbm90IGVub3VnaCBtZW1vcnkgdG8gY29tcGxldGUgYW55IHJlcXVpcmVkIGFsbG9jYXRpb24KKyAgICAgKiBccmV0dmFsIEMyX1RJTUVEX09VVCB0aGUgb3BlcmF0aW9uIHRpbWVkIG91dAorICAgICAqIFxyZXR2YWwgQzJfUkVGVVNFRCAgIG5vIHBlcm1pc3Npb24gdG8gY29tcGxldGUgYW55IHJlcXVpcmVkIGFsbG9jYXRpb24KKyAgICAgKiBccmV0dmFsIEMyX0JBRF9WQUxVRSB3aWR0aCwgaGVpZ2h0LCBmb3JtYXQgb3IgdXNhZ2UgYXJlIG5vdCBzdXBwb3J0ZWQgKGludmFsaWQpIChjYWxsZXIKKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICBlcnJvcikKKyAgICAgKiBccmV0dmFsIEMyX09NSVRURUQgICB0aGlzIHBvb2wgZG9lcyBub3Qgc3VwcG9ydCAyRCBibG9ja3MKKyAgICAgKiBccmV0dmFsIEMyX0NPUlJVUFRFRCBzb21lIHVua25vd24sIHVucmVjb3ZlcmFibGUgZXJyb3Igb2NjdXJlZCBkdXJpbmcgb3BlcmF0aW9uICh1bmV4cGVjdGVkKQorICAgICAqLworICAgIHZpcnR1YWwgYzJfc3RhdHVzX3QgZmV0Y2hHcmFwaGljQmxvY2soCisgICAgICAgICAgICB1aW50MzJfdCB3aWR0aCBfX3VudXNlZCwgdWludDMyX3QgaGVpZ2h0IF9fdW51c2VkLCB1aW50MzJfdCBmb3JtYXQgX191bnVzZWQsCisgICAgICAgICAgICBDMk1lbW9yeVVzYWdlIHVzYWdlIF9fdW51c2VkLAorICAgICAgICAgICAgc3RkOjpzaGFyZWRfcHRyPEMyR3JhcGhpY0Jsb2NrPiAqYmxvY2sgLyogbm9ubnVsbCAqLykgeworICAgICAgICAqYmxvY2sgPSBudWxscHRyOworICAgICAgICByZXR1cm4gQzJfT01JVFRFRDsKKyAgICB9CisKKyAgICB2aXJ0dWFsIH5DMkJsb2NrUG9vbCgpID0gZGVmYXVsdDsKK3Byb3RlY3RlZDoKKyAgICBDMkJsb2NrUG9vbCgpID0gZGVmYXVsdDsKK307CisKKy8vLyBAfQorCisvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy8vICBCTE9DS1MKKy8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCisvKioKKyAqIEJsb2NrcyBhcmUgc2VjdGlvbnMgb2YgYWxsb2NhdGlvbnMuIFRoZXkgY2FuIGJlIGVpdGhlciAxRCBvciAyRC4KKyAqLworCitjbGFzcyBDMkxpbmVhckFsbG9jYXRpb247CisKKy8qKgorICogQSAxRCBibG9jay4KKyAqCisgKiBcbm90ZSBjYXBhY2l0eSgpIGlzIG5vdCBtZWFuaW5nZnVsIGZvciB1c2VycyBvZiBibG9ja3M7IGluc3RlYWQgc2l6ZSgpIGlzIHRoZSBjYXBhY2l0eSBvZiB0aGUKKyAqIHVzYWJsZSBwb3J0aW9uLiBVc2UgYW5kIG9mZnNldCgpIGFuZCBzaXplKCkgaWYgYWNjZXNzaW5nIHRoZSBibG9jayBkaXJlY3RseSB0aHJvdWdoIGl0cyBoYW5kbGUKKyAqIHRvIHJlcHJlc2VudCB0aGUgYWxsb3R0ZWQgcmFuZ2Ugb2YgdGhlIHVuZGVybHlpbmcgYWxsb2NhdGlvbiB0byB0aGlzIGJsb2NrLgorICovCitjbGFzcyBDMkJsb2NrMUQgOiBwdWJsaWMgX0MyTGluZWFyUmFuZ2VBc3BlY3QgeworcHVibGljOgorICAgIC8qKgorICAgICAqIFJldHVybnMgdGhlIHVuZGVybHlpbmcgaGFuZGxlIGZvciB0aGlzIGFsbG9jYXRpb24uCisgICAgICoKKyAgICAgKiBcbm90ZSB0aGF0IHRoZSBibG9jayBhbmQgaXRzIGJsb2NrIHBvb2wgaGFzIHNoYXJlZCBvd25lcnNoaXAgb2YgdGhlIGhhbmRsZQorICAgICAqICAgICAgIGFuZCBpZiBhbGwgcmVmZXJlbmNlcyB0byB0aGUgYmxvY2sgYXJlIHJlbGVhc2VkLCB0aGUgdW5kZXJseWluZyBibG9jaworICAgICAqICAgICAgIGFsbG9jYXRpb24gbWF5IGdldCByZXVzZWQgZXZlbiBpZiBhIGNsaWVudCBrZWVwcyBhIGNsb25lIG9mIHRoaXMgaGFuZGxlLgorICAgICAqLworICAgIGNvbnN0IEMySGFuZGxlICpoYW5kbGUoKSBjb25zdDsKKworICAgIC8qKgorICAgICAqIFJldHVybnMgdGhlIGFsbG9jYXRvcidzIElEIHRoYXQgY3JlYXRlZCB0aGUgdW5kZXJseWluZyBhbGxvY2F0aW9uIGZvciB0aGlzIGJsb2NrLiBUaGlzCisgICAgICogcHJvdmlkZXMgdGhlIGNvbnRleHQgZm9yIHVuZGVyc3RhbmRpbmcgdGhlIGhhbmRsZS4KKyAgICAgKi8KKyAgICBDMkFsbG9jYXRvcjo6aWRfdCBnZXRBbGxvY2F0b3JJZCgpIGNvbnN0OworCitwcm90ZWN0ZWQ6CisgICAgY2xhc3MgSW1wbDsKKyAgICAvKiogY29uc3RydWN0IGEgYmxvY2suICovCisgICAgQzJCbG9jazFEKHN0ZDo6c2hhcmVkX3B0cjxJbXBsPiBpbXBsLCBjb25zdCBfQzJMaW5lYXJSYW5nZUFzcGVjdCAmcmFuZ2UpOworCisgICAgZnJpZW5kIHN0cnVjdCBfQzJCbG9ja0ZhY3Rvcnk7CisgICAgc3RkOjpzaGFyZWRfcHRyPEltcGw+IG1JbXBsOworfTsKKworLyoqCisgKiBSZWFkIHZpZXcgcHJvdmlkZXMgcmVhZC1vbmx5IGFjY2VzcyBmb3IgYSBsaW5lYXIgbWVtb3J5IHNlZ21lbnQuCisgKgorICogVGhpcyBjbGFzcyBpcyBjb3BpYWJsZS4KKyAqLworY2xhc3MgQzJSZWFkVmlldyA6IHB1YmxpYyBfQzJMaW5lYXJDYXBhY2l0eUFzcGVjdCB7CitwdWJsaWM6CisgICAgLyoqCisgICAgICogXHJldHVybiBwb2ludGVyIHRvIHRoZSBzdGFydCBvZiB0aGUgYmxvY2sgb3IgbnVsbHB0ciBvbiBlcnJvci4KKyAgICAgKiAgICAgICAgIFRoaXMgcG9pbnRlciBpcyBvbmx5IHZhbGlkIGR1cmluZyB0aGUgbGlmZXRpbWUgb2YgdGhpcyB2aWV3IG9yIHVudGlsIGl0IGlzIHJlbGVhc2VkLgorICAgICAqLworICAgIGNvbnN0IHVpbnQ4X3QgKmRhdGEoKSBjb25zdDsKKworICAgIC8qKgorICAgICAqIFJldHVybnMgYSBwb3J0aW9uIG9mIHRoaXMgdmlldy4KKyAgICAgKgorICAgICAqIFxwYXJhbSBvZmZzZXQgIHRoZSBzdGFydCBvZmZzZXQgb2YgdGhlIHBvcnRpb24uIFxub3RlIFRoaXMgaXMgY2xhbXBlZCB0byB0aGUgY2FwYWNpdHkgb2YgdGhpcworICAgICAqICAgICAgICAgICAgICB2aWV3LgorICAgICAqIFxwYXJhbSBzaXplICAgIHRoZSBzaXplIG9mIHRoZSBwb3J0aW9uLiBcbm90ZSBUaGlzIGlzIGNsYW1wZWQgdG8gdGhlIHJlbWFpbmluZyBkYXRhIGZyb20gb2Zmc2V0LgorICAgICAqCisgICAgICogXHJldHVybiBhIHJlYWQgdmlldyBjb250YWluaW5nIGEgcG9ydGlvbiBvZiB0aGlzIHZpZXcKKyAgICAgKi8KKyAgICBDMlJlYWRWaWV3IHN1YlZpZXcoc2l6ZV90IG9mZnNldCwgc2l6ZV90IHNpemUpIGNvbnN0OworCisgICAgLyoqCisgICAgICogXHJldHVybiBlcnJvciBkdXJpbmcgdGhlIGNyZWF0aW9uL21hcHBpbmcgb2YgdGhpcyB2aWV3LgorICAgICAqLworICAgIGMyX3N0YXR1c190IGVycm9yKCkgY29uc3Q7CisKKyAgICAvKioKKyAgICAgKiBSZWxlYXNlcyB0aGlzIHZpZXcuIFRoaXMgc2V0cyBlcnJvciB0byBDMl9OT19JTklULgorICAgICAqLworICAgIC8vdm9pZCByZWxlYXNlKCk7CisKK3Byb3RlY3RlZDoKKyAgICBjbGFzcyBJbXBsOworICAgIEMyUmVhZFZpZXcoc3RkOjpzaGFyZWRfcHRyPEltcGw+IGltcGwsIHVpbnQzMl90IG9mZnNldCwgdWludDMyX3Qgc2l6ZSk7CisgICAgZXhwbGljaXQgQzJSZWFkVmlldyhjMl9zdGF0dXNfdCBlcnJvcik7CisKK3ByaXZhdGU6CisgICAgZnJpZW5kIHN0cnVjdCBfQzJCbG9ja0ZhY3Rvcnk7CisgICAgc3RkOjpzaGFyZWRfcHRyPEltcGw+IG1JbXBsOworICAgIHVpbnQzMl90IG1PZmZzZXQ7IC8qKjwgb2Zmc2V0IGludG8gdGhlIGxpbmVhciBibG9jayBiYWNraW5nIHRoaXMgcmVhZCB2aWV3ICovCit9OworCisvKioKKyAqIFdyaXRlIHZpZXcgcHJvdmlkZXMgcmVhZC93cml0ZSBhY2Nlc3MgZm9yIGEgbGluZWFyIG1lbW9yeSBzZWdtZW50LgorICoKKyAqIFRoaXMgY2xhc3MgaXMgY29waWFibGUuIFx0b2RvIG1vdmFibGUgb25seT8KKyAqLworY2xhc3MgQzJXcml0ZVZpZXcgOiBwdWJsaWMgX0MyRWRpdGFibGVMaW5lYXJSYW5nZUFzcGVjdCB7CitwdWJsaWM6CisgICAgLyoqCisgICAgICogU3RhcnQgb2YgdGhlIGJsb2NrLgorICAgICAqCisgICAgICogXHJldHVybiBwb2ludGVyIHRvIHRoZSBzdGFydCBvZiB0aGUgYmxvY2sgb3IgbnVsbHB0ciBvbiBlcnJvci4KKyAgICAgKiAgICAgICAgIFRoaXMgcG9pbnRlciBpcyBvbmx5IHZhbGlkIGR1cmluZyB0aGUgbGlmZXRpbWUgb2YgdGhpcyB2aWV3IG9yIHVudGlsIGl0IGlzIHJlbGVhc2VkLgorICAgICAqLworICAgIHVpbnQ4X3QgKmJhc2UoKTsKKworICAgIC8qKgorICAgICAqIFxyZXR1cm4gcG9pbnRlciB0byB0aGUgYmxvY2sgYXQgdGhlIGN1cnJlbnQgb2Zmc2V0IG9yIG51bGxwdHIgb24gZXJyb3IuCisgICAgICogICAgICAgICBUaGlzIHBvaW50ZXIgaXMgb25seSB2YWxpZCBkdXJpbmcgdGhlIGxpZmV0aW1lIG9mIHRoaXMgdmlldyBvciB1bnRpbCBpdCBpcyByZWxlYXNlZC4KKyAgICAgKi8KKyAgICB1aW50OF90ICpkYXRhKCk7CisKKyAgICAvKioKKyAgICAgKiBccmV0dXJuIGVycm9yIGR1cmluZyB0aGUgY3JlYXRpb24vbWFwcGluZyBvZiB0aGlzIHZpZXcuCisgICAgICovCisgICAgYzJfc3RhdHVzX3QgZXJyb3IoKSBjb25zdDsKKworICAgIC8qKgorICAgICAqIFJlbGVhc2VzIHRoaXMgdmlldy4gVGhpcyBzZXRzIGVycm9yIHRvIEMyX05PX0lOSVQuCisgICAgICovCisgICAgLy92b2lkIHJlbGVhc2UoKTsKKworcHJvdGVjdGVkOgorICAgIGNsYXNzIEltcGw7CisgICAgQzJXcml0ZVZpZXcoc3RkOjpzaGFyZWRfcHRyPEltcGw+IGltcGwpOworICAgIGV4cGxpY2l0IEMyV3JpdGVWaWV3KGMyX3N0YXR1c190IGVycm9yKTsKKworcHJpdmF0ZToKKyAgICBmcmllbmQgc3RydWN0IF9DMkJsb2NrRmFjdG9yeTsKKyAgICBzdGQ6OnNoYXJlZF9wdHI8SW1wbD4gbUltcGw7Cit9OworCisvKioKKyAqIEEgY29uc3RhbnQgKHJlYWQtb25seSkgbGluZWFyIGJsb2NrIChwb3J0aW9uIG9mIGFuIGFsbG9jYXRpb24pIHdpdGggYW4gYWNxdWlyZSBmZW5jZS4KKyAqIEJsb2NrcyBhcmUgdW5tYXBwZWQgd2hlbiBjcmVhdGVkLCBhbmQgY2FuIGJlIG1hcHBlZCBpbnRvIGEgcmVhZCB2aWV3IG9uIGRlbWFuZC4KKyAqCisgKiBUaGlzIGNsYXNzIGlzIGNvcGlhYmxlIGFuZCBjb250YWlucyBhIHJlZmVyZW5jZSB0byB0aGUgYWxsb2NhdGlvbiB0aGF0IGl0IGlzIGJhc2VkIG9uLgorICovCitjbGFzcyBDMkNvbnN0TGluZWFyQmxvY2sgOiBwdWJsaWMgQzJCbG9jazFEIHsKK3B1YmxpYzoKKyAgICAvKioKKyAgICAgKiBNYXBzIHRoaXMgYmxvY2sgaW50byBtZW1vcnkgYW5kIHJldHVybnMgYSByZWFkIHZpZXcgZm9yIGl0LgorICAgICAqCisgICAgICogXHJldHVybiBhIHJlYWQgdmlldyBmb3IgdGhpcyBibG9jay4KKyAgICAgKi8KKyAgICBDMkFjcXVpcmFibGU8QzJSZWFkVmlldz4gbWFwKCkgY29uc3Q7CisKKyAgICAvKioKKyAgICAgKiBSZXR1cm5zIGEgcG9ydGlvbiBvZiB0aGlzIGJsb2NrLgorICAgICAqCisgICAgICogXHBhcmFtIG9mZnNldCAgdGhlIHN0YXJ0IG9mZnNldCBvZiB0aGUgcG9ydGlvbi4gXG5vdGUgVGhpcyBpcyBjbGFtcGVkIHRvIHRoZSBjYXBhY2l0eSBvZiB0aGlzCisgICAgICogICAgICAgICAgICAgIGJsb2NrLgorICAgICAqIFxwYXJhbSBzaXplICAgIHRoZSBzaXplIG9mIHRoZSBwb3J0aW9uLiBcbm90ZSBUaGlzIGlzIGNsYW1wZWQgdG8gdGhlIHJlbWFpbmluZyBkYXRhIGZyb20gb2Zmc2V0LgorICAgICAqCisgICAgICogXHJldHVybiBhIGNvbnN0YW50IGxpbmVhciBibG9jayBjb250YWluaW5nIGEgcG9ydGlvbiBvZiB0aGlzIGJsb2NrCisgICAgICovCisgICAgQzJDb25zdExpbmVhckJsb2NrIHN1YkJsb2NrKHNpemVfdCBvZmZzZXQsIHNpemVfdCBzaXplKSBjb25zdDsKKworICAgIC8qKgorICAgICAqIFJldHVybnMgdGhlIGFjcXVpcmUgZmVuY2UgZm9yIHRoaXMgYmxvY2suCisgICAgICoKKyAgICAgKiBccmV0dXJuIGEgZmVuY2UgdGhhdCBtdXN0IGJlIHdhaXRlZCBvbiBiZWZvcmUgcmVhZGluZyB0aGUgYmxvY2suCisgICAgICovCisgICAgQzJGZW5jZSBmZW5jZSgpIGNvbnN0IHsgcmV0dXJuIG1GZW5jZTsgfQorCitwcm90ZWN0ZWQ6CisgICAgQzJDb25zdExpbmVhckJsb2NrKHN0ZDo6c2hhcmVkX3B0cjxJbXBsPiBpbXBsLCBjb25zdCBfQzJMaW5lYXJSYW5nZUFzcGVjdCAmcmFuZ2UsIEMyRmVuY2UgbUZlbmNlKTsKKworcHJpdmF0ZToKKyAgICBmcmllbmQgc3RydWN0IF9DMkJsb2NrRmFjdG9yeTsKKyAgICBDMkZlbmNlIG1GZW5jZTsKK307CisKKy8qKgorICogTGluZWFyIGJsb2NrIGlzIGEgd3JpdGVhYmxlIDFEIGJsb2NrLiBPbmNlIHdyaXR0ZW4sIGl0IGNhbiBiZSBzaGFyZWQgaW4gd2hvbGUgb3IgaW4gcGFydHMgd2l0aAorICogY29uc3VtZXJzL3JlYWRlcnMgYXMgcmVhZC1vbmx5IGNvbnN0IGxpbmVhciBibG9jayhzKS4KKyAqLworY2xhc3MgQzJMaW5lYXJCbG9jayA6IHB1YmxpYyBDMkJsb2NrMUQgeworcHVibGljOgorICAgIC8qKgorICAgICAqIE1hcHMgdGhpcyBibG9jayBpbnRvIG1lbW9yeSBhbmQgcmV0dXJucyBhIHdyaXRlIHZpZXcgZm9yIGl0LgorICAgICAqCisgICAgICogXHJldHVybiBhIHdyaXRlIHZpZXcgZm9yIHRoaXMgYmxvY2suCisgICAgICovCisgICAgQzJBY3F1aXJhYmxlPEMyV3JpdGVWaWV3PiBtYXAoKTsKKworICAgIC8qKgorICAgICAqIENyZWF0ZXMgYSByZWFkLW9ubHkgY29uc3QgbGluZWFyIGJsb2NrIGZvciBhIHBvcnRpb24gb2YgdGhpcyBibG9jazsgb3B0aW9uYWxseSBwcm90ZWN0ZWQKKyAgICAgKiBieSBhbiBhY3F1aXJlIGZlbmNlLiBUaGVyZSBhcmUgdHdvIHdheXMgdG8gdXNlIHRoaXM6CisgICAgICoKKyAgICAgKiAxKSBzaGFyZSByZWFkeSBibG9jayBhZnRlciB3cml0aW5nIGRhdGEgaW50byB0aGUgYmxvY2suIEluIHRoaXMgY2FzZSBubyBmZW5jZSBzaGFsbCBiZQorICAgICAqICAgIHN1cHBsaWVkLCBhbmQgdGhlIGJsb2NrIHNoYWxsIG5vdCBiZSBtb2RpZmllZCBhZnRlciBjYWxsaW5nIHRoaXMgbWV0aG9kLgorICAgICAqIDIpIHNoYXJlIGJsb2NrIG1ldGFkYXRhIGJlZm9yZSBhY3R1YWxseSAoZmluaXNoaW5nKSB3cml0aW5nIHRoZSBkYXRhIGludG8gdGhlIGJsb2NrLiBJbgorICAgICAqICAgIHRoaXMgY2FzZSBhIGZlbmNlIG11c3QgYmUgc3VwcGxpZWQgdGhhdCB3aWxsIGJlIHRyaWdnZXJlZCB3aGVuIHRoZSBkYXRhIGlzIHdyaXR0ZW4uCisgICAgICogICAgVGhlIGJsb2NrIHNoYWxsIGJlIG1vZGlmaWVkIG9ubHkgdW50aWwgZmlyaW5nIHRoZSBldmVudCBmb3IgdGhlIGZlbmNlLgorICAgICAqLworICAgIEMyQ29uc3RMaW5lYXJCbG9jayBzaGFyZShzaXplX3Qgb2Zmc2V0LCBzaXplX3Qgc2l6ZSwgQzJGZW5jZSBmZW5jZSk7CisKK3Byb3RlY3RlZDoKKyAgICBDMkxpbmVhckJsb2NrKHN0ZDo6c2hhcmVkX3B0cjxJbXBsPiBpbXBsLCBjb25zdCBfQzJMaW5lYXJSYW5nZUFzcGVjdCAmcmFuZ2UpOworCisgICAgZnJpZW5kIHN0cnVjdCBfQzJCbG9ja0ZhY3Rvcnk7Cit9OworCisvLy8gQH0KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgIENJUkNVTEFSIEJMT0NLUyBBTkQgVklFV1MKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvLy8gXGRlZmdyb3VwIGNpcmN1bGFyIENpcmN1bGFyIGJ1ZmZlciBzdXBwb3J0CisvLy8gQHsKKworLyoqCisgKiBDaXJjdWxhciBibG9ja3MgY2FuIGJlIHVzZWQgdG8gc2hhcmUgZGF0YSBiZXR3ZWVuIGEgd3JpdGVyIGFuZCBhIHJlYWRlciAoYW5kL29yIG90aGVyIGNvbnN1bWVycyktCisgKiBpbiBhIG1lbW9yeS1lZmZpY2llbnQgd2F5IGJ5IHJldXNpbmcgYSBzZWN0aW9uIG9mIG1lbW9yeS4gQ2lyY3VsYXIgYmxvY2tzIGFyZSBhIGJpdCBtb3JlIGNvbXBsZXgKKyAqIHRoYW4gc2luZ2xlIHJlYWRlci9zaW5nbGUgd3JpdGVyIHNjaGVtZXMgdG8gZmFjaWxpdGF0ZSBibG9jay1iYXNlZCBjb25zdW1pbmcgb2YgZGF0YS4KKyAqCisgKiBUaGV5IGNhbiBvcGVyYXRlIGluIHR3byBtb2RlczoKKyAqCisgKiAxKSBvbmUgd3JpdGVyIHRoYXQgY3JlYXRlcyBibG9ja3MgdG8gYmUgY29uc3VtZWQgKHRoaXMgbW9kZWwgY2FuIGJlIHVzZWQgYnkgY29tcG9uZW50cykKKyAqCisgKiAyKSBvbmUgd3JpdGVyIHRoYXQgd3JpdGVzIGNvbnRpbnVvdXNseSwgYW5kIG9uZSByZWFkZXIgdGhhdCBjYW4gY3JlYXRlcyBibG9ja3MgdG8gYmUgY29uc3VtZWQKKyAqICAgIGJ5IGZ1cnRoZXIgcmVjaXBpZW50cyAodGhpcyBtb2RlbCBpcyB1c2VkIGJ5IHRoZSBmcmFtZXdvcmssIGFuZCBjYW5ub3QgYmUgdXNlZCBieSBjb21wb25lbnRzLikKKyAqCisgKiBDaXJjdWxhciBibG9ja3MgaGF2ZSBmb3VyIHNlZ21lbnRzIHdpdGggcnVubmluZyBwb2ludGVyczoKKyAqICAtIHJlc2VydmVkOiBkYXRhIHJlc2VydmVkIGFuZCBhdmFpbGFibGUgZm9yIHRoZSB3cml0ZXIKKyAqICAtIGNvbW1pdHRlZDogZGF0YSBjb21taXR0ZWQgYnkgdGhlIHdyaXRlciBhbmQgYXZhaWxhYmxlIHRvIHRoZSByZWFkZXIgKGlmIHByZXNlbnQpCisgKiAgLSB1c2VkOiBkYXRhIHVzZWQgYnkgY29uc3VtZXJzIChpZiBwcmVzZW50KQorICogIC0gYXZhaWxhYmxlOiB1bnVzZWQgZGF0YSBhdmFpbGFibGUgdG8gYmUgcmVzZXJ2ZWQKKyAqLworY2xhc3MgQzJDaXJjdWxhckJsb2NrIDogcHVibGljIEMyQmxvY2sxRCB7CisgICAgLy8gVE9ETzogYWRkIG1ldGhvZHMKKworcHJpdmF0ZToKKyAgICBzaXplX3QgbVJlc2VydmVkIF9fdW51c2VkOyAgIC8vIGVuZCBvZiByZXNlcnZlZCBzZWN0aW9uCisgICAgc2l6ZV90IG1Db21taXR0ZWQgX191bnVzZWQ7ICAvLyBlbmQgb2YgY29tbWl0dGVkIHNlY3Rpb24KKyAgICBzaXplX3QgbVVzZWQgX191bnVzZWQ7ICAgICAgIC8vIGVuZCBvZiB1c2VkIHNlY3Rpb24KKyAgICBzaXplX3QgbUZyZWUgX191bnVzZWQ7ICAgICAgIC8vIGVuZCBvZiBmcmVlIHNlY3Rpb24KK307CisKK2NsYXNzIF9DMkNpcmN1bGFyQmxvY2tTZWdtZW50IDogcHVibGljIF9DMkxpbmVhckNhcGFjaXR5QXNwZWN0IHsKK3B1YmxpYzoKKyAgICAvKioKKyAgICAgKiBSZXR1cm5zIHRoZSBhdmFpbGFibGUgc2l6ZSBmb3IgdGhpcyBzZWdtZW50LgorICAgICAqCisgICAgICogXHJldHVybiBjdXJyZW50bHkgYXZhaWxhYmxlIHNpemUgZm9yIHRoaXMgc2VnbWVudAorICAgICAqLworICAgIHNpemVfdCBhdmFpbGFibGUoKSBjb25zdDsKKworICAgIC8qKgorICAgICAqIFJlc2VydmUgc29tZSBzcGFjZSBmb3IgdGhpcyBzZWdtZW50IGZyb20gaXRzIGN1cnJlbnQgc3RhcnQuCisgICAgICoKKyAgICAgKiBccGFyYW0gc2l6ZSAgICBkZXNpcmVkIHNwYWNlIGluIGJ5dGVzCisgICAgICogXHBhcmFtIGZlbmNlICAgYSBwb2ludGVyIHRvIGFuIGFjcXVpcmUgZmVuY2UuIElmIG5vbi1udWxsLCB0aGUgcmVzZXJ2YXRpb24gaXMgYXN5bmNocm9ub3VzIGFuZAorICAgICAqICAgICAgICAgICAgICBhIGZlbmNlIHdpbGwgYmUgc3RvcmVkIGhlcmUgdGhhdCB3aWxsIGJlIHNpZ25hbGVkIHdoZW4gdGhlIHJlc2VydmF0aW9uIGlzCisgICAgICogICAgICAgICAgICAgIGNvbXBsZXRlLiBJZiBudWxsLCB0aGUgcmVzZXJ2YXRpb24gaXMgc3luY2hyb25vdXMuCisgICAgICoKKyAgICAgKiBccmV0dmFsIEMyX09LICAgICAgICAgICAgdGhlIHNwYWNlIHdhcyBzdWNjZXNzZnVsbHkgcmVzZXJ2ZWQKKyAgICAgKiBccmV0dmFsIEMyX05PX01FTU9SWSAgICAgdGhlIHNwYWNlIHJlcXVlc3RlZCBjYW5ub3QgYmUgcmVzZXJ2ZWQKKyAgICAgKiBccmV0dmFsIEMyX1RJTUVEX09VVCAgICAgdGhlIHJlc2VydmF0aW9uIHRpbWVkIG91dCBcdG9kbyB3aGVuPworICAgICAqIFxyZXR2YWwgQzJfQ09SUlVQVEVEICAgICBzb21lIHVua25vd24gZXJyb3IgcHJldmVudGVkIHJlc2VydmluZyBzcGFjZS4gKHVuZXhwZWN0ZWQpCisgICAgICovCisgICAgYzJfc3RhdHVzX3QgcmVzZXJ2ZShzaXplX3Qgc2l6ZSwgQzJGZW5jZSAqZmVuY2UgLyogbnVsbGFibGUgKi8pOworCisgICAgLyoqCisgICAgICogQWJhbmRvbnMgYSBwb3J0aW9uIG9mIHRoaXMgc2VnbWVudC4gVGhpcyB3aWxsIG1vdmUgdG8gdGhlIGJlZ2lubmluZyBvZiB0aGlzIHNlZ21lbnQuCisgICAgICoKKyAgICAgKiBcbm90ZSBUaGlzIG1ldGhvZHMgaXMgb25seSBhbGxvd2VkIGlmIHRoaXMgc2VnbWVudCBpcyBwcm9kdWNpbmcgYmxvY2tzLgorICAgICAqCisgICAgICogXHBhcmFtIHNpemUgICAgbnVtYmVyIG9mIGJ5dGVzIHRvIGFiYW5kb24KKyAgICAgKgorICAgICAqIFxyZXR2YWwgQzJfT0sgICAgICAgICAgICB0aGUgZGF0YSB3YXMgc3VjY2Vzc2Z1bGx5IGFiYW5kb25lZAorICAgICAqIFxyZXR2YWwgQzJfVElNRURfT1VUICAgICB0aGUgb3BlcmF0aW9uIHRpbWVkIG91dCAodW5leHBlY3RlZCkKKyAgICAgKiBccmV0dmFsIEMyX0NPUlJVUFRFRCAgICAgc29tZSB1bmtub3duIGVycm9yIHByZXZlbnRlZCBhYmFuZG9uaW5nIHRoZSBkYXRhICh1bmV4cGVjdGVkKQorICAgICAqLworICAgIGMyX3N0YXR1c190IGFiYW5kb24oc2l6ZV90IHNpemUpOworCisgICAgLyoqCisgICAgICogU2hhcmUgYSBwb3J0aW9uIGFzIGJsb2NrKHMpIHdpdGggY29uc3VtZXJzICh0aGVzZSBhcmUgbW92ZWQgdG8gdGhlIHVzZWQgc2VjdGlvbikuCisgICAgICoKKyAgICAgKiBcbm90ZSBUaGlzIG1ldGhvZHMgaXMgb25seSBhbGxvd2VkIGlmIHRoaXMgc2VnbWVudCBpcyBwcm9kdWNpbmcgYmxvY2tzLgorICAgICAqIFxub3RlIFNoYXJlIGRvZXMgbm90IG1vdmUgdGhlIGJlZ2lubmluZyBvZiB0aGUgc2VnbWVudC4gKFx0b2RvIGFkZCBhYmFuZG9uL29mZnNldD8pCisgICAgICoKKyAgICAgKiBccGFyYW0gc2l6ZSAgICBudW1iZXIgb2YgYnl0ZXMgdG8gc2hhcmUKKyAgICAgKiBccGFyYW0gZmVuY2UgICBmZW5jZSB0byBiZSB1c2VkIGZvciB0aGUgc2VjdGlvbgorICAgICAqIFxwYXJhbSBibG9ja3MgIHZlY3RvciB3aGVyZSB0aGUgYmxvY2tzIG9mIHRoZSBzZWN0aW9uIGFyZSBhcHBlbmRlZCB0bworICAgICAqCisgICAgICogXHJldHZhbCBDMl9PSyAgICAgICAgICAgIHRoZSBwb3J0aW9uIHdhcyBzdWNjZXNzZnVsbHkgc2hhcmVkCisgICAgICogXHJldHZhbCBDMl9OT19NRU1PUlkgICAgIG5vdCBlbm91Z2ggbWVtb3J5IHRvIHNoYXJlIHRoZSBwb3J0aW9uCisgICAgICogXHJldHZhbCBDMl9USU1FRF9PVVQgICAgIHRoZSBvcGVyYXRpb24gdGltZWQgb3V0ICh1bmV4cGVjdGVkKQorICAgICAqIFxyZXR2YWwgQzJfQ09SUlVQVEVEICAgICBzb21lIHVua25vd24gZXJyb3IgcHJldmVudGVkIHNoYXJpbmcgdGhlIGRhdGEgKHVuZXhwZWN0ZWQpCisgICAgICovCisgICAgYzJfc3RhdHVzX3Qgc2hhcmUoc2l6ZV90IHNpemUsIEMyRmVuY2UgZmVuY2UsIHN0ZDo6dmVjdG9yPEMyQ29uc3RMaW5lYXJCbG9jaz4gJmJsb2Nrcyk7CisKKyAgICAvKioKKyAgICAgKiBSZXR1cm5zIHRoZSBiZWdpbm5pbmcgb2Zmc2V0IG9mIHRoaXMgc2VnbWVudCBmcm9tIHRoZSBzdGFydCBvZiB0aGlzIGNpcmN1bGFyIGJsb2NrLgorICAgICAqCisgICAgICogQHJldHVybiBiZWdpbm5pbmcgb2Zmc2V0CisgICAgICovCisgICAgc2l6ZV90IGJlZ2luKCk7CisKKyAgICAvKioKKyAgICAgKiBSZXR1cm5zIHRoZSBlbmQgb2Zmc2V0IG9mIHRoaXMgc2VnbWVudCBmcm9tIHRoZSBzdGFydCBvZiB0aGlzIGNpcmN1bGFyIGJsb2NrLgorICAgICAqCisgICAgICogQHJldHVybiBlbmQgb2Zmc2V0CisgICAgICovCisgICAgc2l6ZV90IGVuZCgpOworfTsKKworLyoqCisgKiBBIGNpcmN1bGFyIHdyaXRlLXZpZXcgaXMgYSBkeW5hbWljIG1hcHBlZCB2aWV3IGZvciBhIHNlZ21lbnQgb2YgYSBjaXJjdWxhciBibG9jay4gQ2FyZSBtdXN0IGJlCisgKiB0YWtlbiB3aGVuIHVzaW5nIHRoaXMgdmlldyBzbyB0aGF0IG9ubHkgdGhlIHNlY3Rpb24gb3duZWQgYnkgdGhlIHNlZ21lbnQgaXMgbW9kaWZpZWQuCisgKi8KK2NsYXNzIEMyQ2lyY3VsYXJXcml0ZVZpZXcgOiBwdWJsaWMgX0MyTGluZWFyQ2FwYWNpdHlBc3BlY3QgeworcHVibGljOgorICAgIC8qKgorICAgICAqIFN0YXJ0IG9mIHRoZSBjaXJjdWxhciBibG9jay4KKyAgICAgKiBcbm90ZSB0aGUgc2VnbWVudCBkb2VzIG5vdCBvd24gdGhpcyBwb2ludGVyLgorICAgICAqCisgICAgICogXHJldHVybiBwb2ludGVyIHRvIHRoZSBzdGFydCBvZiB0aGUgY2lyY3VsYXIgYmxvY2sgb3IgbnVsbHB0ciBvbiBlcnJvci4KKyAgICAgKi8KKyAgICB1aW50OF90ICpiYXNlKCk7CisKKyAgICAvKioKKyAgICAgKiBccmV0dXJuIGVycm9yIGR1cmluZyB0aGUgY3JlYXRpb24vbWFwcGluZyBvZiB0aGlzIHZpZXcuCisgICAgICovCisgICAgYzJfc3RhdHVzX3QgZXJyb3IoKSBjb25zdDsKK307CisKKy8qKgorICogVGhlIHdyaXRlciBvZiBhIGNpcmN1bGFyIGJ1ZmZlci4KKyAqCisgKiBDYW4gY29tbWl0IGRhdGEgdG8gYSByZWFkZXIgKG5vdCBzdXBwb3J0ZWQgZm9yIGNvbXBvbmVudHMpIE9SIHNoYXJlIGRhdGEgYmxvY2tzIGRpcmVjdGx5IHdpdGggYQorICogY29uc3VtZXIuCisgKgorICogSWYgYSBjb21wb25lbnQgc3VwcG9ydHMgb3V0cHV0dGluZyBkYXRhIGludG8gY2lyY3VsYXIgYnVmZmVycywgaXQgbXVzdCBhbGxvY2F0ZSBhIGNpcmN1bGFyCisgKiBibG9jayBhbmQgdXNlIGEgY2lyY3VsYXIgd3JpdGVyLgorICovCitjbGFzcyBDMkNpcmN1bGFyV3JpdGVyIDogcHVibGljIF9DMkNpcmN1bGFyQmxvY2tTZWdtZW50IHsKK3B1YmxpYzoKKyAgICAvKioKKyAgICAgKiBDb21taXRzIGEgcG9ydGlvbiBvZiB0aGlzIHNlZ21lbnQgdG8gdGhlIG5leHQgc2VnbWVudC4gVGhpcyBtb3ZlcyB0aGUgYmVnaW5uaW5nIG9mIHRoZQorICAgICAqIHNlZ21lbnQuCisgICAgICoKKyAgICAgKiBccGFyYW0gc2l6ZSAgICBudW1iZXIgb2YgYnl0ZXMgdG8gY29tbWl0IHRvIHRoZSBuZXh0IHNlZ21lbnQKKyAgICAgKiBccGFyYW0gZmVuY2UgICBmZW5jZSB1c2VkIGZvciB0aGUgY29tbWl0ICh0aGUgZmVuY2UgbXVzdCBzaWduYWwgYmVmb3JlIHRoZSBkYXRhIGlzIGNvbW1pdHRlZCkKKyAgICAgKi8KKyAgICBjMl9zdGF0dXNfdCBjb21taXQoc2l6ZV90IHNpemUsIEMyRmVuY2UgZmVuY2UpOworCisgICAgLyoqCisgICAgICogTWFwcyB0aGlzIGJsb2NrIGludG8gbWVtb3J5IGFuZCByZXR1cm5zIGEgd3JpdGUgdmlldyBmb3IgaXQuCisgICAgICoKKyAgICAgKiBccmV0dXJuIGEgd3JpdGUgdmlldyBmb3IgdGhpcyBibG9jay4KKyAgICAgKi8KKyAgICBDMkFjcXVpcmFibGU8QzJDaXJjdWxhcldyaXRlVmlldz4gbWFwKCk7Cit9OworCisvLy8gQH0KKworLy8vIFxkZWZncm91cCBncmFwaGljIEdyYXBoaWMgRGF0YSBCbG9ja3MKKy8vLyBAeworCisvKioKKyAqIEMyUmVjdDogcmVjdGFuZ2xlIHR5cGUgd2l0aCBub24tbmVnYXRpdmUgY29vcmRpbmF0ZXMuCisgKgorICogXG5vdGUgVGhpcyBzdHJ1Y3QgaGFzIHB1YmxpYyBmaWVsZHMgd2l0aG91dCBnZXR0ZXJzL3NldHRlcnMuIEFsbCBtZXRob2RzIGFyZSBpbmxpbmUuCisgKi8KK3N0cnVjdCBDMlJlY3QgeworLy8gcHVibGljOgorICAgIHVpbnQzMl90IHdpZHRoOworICAgIHVpbnQzMl90IGhlaWdodDsKKyAgICB1aW50MzJfdCBsZWZ0OworICAgIHVpbnQzMl90IHRvcDsKKworICAgIGNvbnN0ZXhwciBpbmxpbmUgQzJSZWN0KCkKKyAgICAgICAgOiBDMlJlY3QoMCwgMCwgMCwgMCkgeyB9CisKKyAgICBjb25zdGV4cHIgaW5saW5lIEMyUmVjdCh1aW50MzJfdCB3aWR0aF8sIHVpbnQzMl90IGhlaWdodF8pCisgICAgICAgIDogQzJSZWN0KHdpZHRoXywgaGVpZ2h0XywgMCwgMCkgeyB9CisKKyAgICBjb25zdGV4cHIgQzJSZWN0IGlubGluZSBhdCh1aW50MzJfdCBsZWZ0XywgdWludDMyX3QgdG9wXykgY29uc3QgeworICAgICAgICByZXR1cm4gQzJSZWN0KHdpZHRoLCBoZWlnaHQsIGxlZnRfLCB0b3BfKTsKKyAgICB9CisKKyAgICAvLyB1dGlsaXR5IG1ldGhvZHMKKworICAgIGlubGluZSBjb25zdGV4cHIgYm9vbCBpc0VtcHR5KCkgY29uc3QgeworICAgICAgICByZXR1cm4gd2lkdGggPT0gMCB8fCBoZWlnaHQgPT0gMDsKKyAgICB9CisKKyAgICBpbmxpbmUgY29uc3RleHByIGJvb2wgaXNWYWxpZCgpIGNvbnN0IHsKKyAgICAgICAgcmV0dXJuIGxlZnQgPD0gfndpZHRoICYmIHRvcCA8PSB+aGVpZ2h0OworICAgIH0KKworICAgIGlubGluZSBjb25zdGV4cHIgb3BlcmF0b3IgYm9vbCgpIGNvbnN0IHsKKyAgICAgICAgcmV0dXJuIGlzVmFsaWQoKSAmJiAhaXNFbXB0eSgpOworICAgIH0KKworICAgIGlubGluZSBjb25zdGV4cHIgYm9vbCBvcGVyYXRvciEoKSBjb25zdCB7CisgICAgICAgIHJldHVybiAhYm9vbCgqdGhpcyk7CisgICAgfQorCisgICAgQzJfQUxMT1dfT1ZFUkZMT1cKKyAgICBpbmxpbmUgY29uc3RleHByIGJvb2wgY29udGFpbnMoY29uc3QgQzJSZWN0ICZvdGhlcikgY29uc3QgeworICAgICAgICBpZiAoIWlzVmFsaWQoKSB8fCAhb3RoZXIuaXNWYWxpZCgpKSB7CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICByZXR1cm4gbGVmdCA8PSBvdGhlci5sZWZ0ICYmIHRvcCA8PSBvdGhlci50b3AKKyAgICAgICAgICAgICAgICAgICAgJiYgbGVmdCArIHdpZHRoID49IG90aGVyLmxlZnQgKyBvdGhlci53aWR0aAorICAgICAgICAgICAgICAgICAgICAmJiB0b3AgKyBoZWlnaHQgPj0gb3RoZXIudG9wICsgb3RoZXIuaGVpZ2h0OworICAgICAgICB9CisgICAgfQorCisgICAgaW5saW5lIGNvbnN0ZXhwciBib29sIG9wZXJhdG9yPT0oY29uc3QgQzJSZWN0ICZvdGhlcikgY29uc3QgeworICAgICAgICBpZiAoIWlzVmFsaWQoKSkgeworICAgICAgICAgICAgcmV0dXJuICFvdGhlci5pc1ZhbGlkKCk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICByZXR1cm4gbGVmdCA9PSBvdGhlci5sZWZ0ICYmIHRvcCA9PSBvdGhlci50b3AKKyAgICAgICAgICAgICAgICAgICAgJiYgd2lkdGggPT0gb3RoZXIud2lkdGggJiYgaGVpZ2h0ID09IG90aGVyLmhlaWdodDsKKyAgICAgICAgfQorICAgIH0KKworICAgIGlubGluZSBjb25zdGV4cHIgYm9vbCBvcGVyYXRvciE9KGNvbnN0IEMyUmVjdCAmb3RoZXIpIGNvbnN0IHsKKyAgICAgICAgcmV0dXJuICFvcGVyYXRvcj09KG90aGVyKTsKKyAgICB9CisKKyAgICBpbmxpbmUgY29uc3RleHByIGJvb2wgb3BlcmF0b3I+PShjb25zdCBDMlJlY3QgJm90aGVyKSBjb25zdCB7CisgICAgICAgIHJldHVybiBjb250YWlucyhvdGhlcik7CisgICAgfQorCisgICAgaW5saW5lIGNvbnN0ZXhwciBib29sIG9wZXJhdG9yPihjb25zdCBDMlJlY3QgJm90aGVyKSBjb25zdCB7CisgICAgICAgIHJldHVybiBjb250YWlucyhvdGhlcikgJiYgIW9wZXJhdG9yPT0ob3RoZXIpOworICAgIH0KKworICAgIGlubGluZSBjb25zdGV4cHIgYm9vbCBvcGVyYXRvcjw9KGNvbnN0IEMyUmVjdCAmb3RoZXIpIGNvbnN0IHsKKyAgICAgICAgcmV0dXJuIG90aGVyLmNvbnRhaW5zKCp0aGlzKTsKKyAgICB9CisKKyAgICBpbmxpbmUgY29uc3RleHByIGJvb2wgb3BlcmF0b3I8KGNvbnN0IEMyUmVjdCAmb3RoZXIpIGNvbnN0IHsKKyAgICAgICAgcmV0dXJuIG90aGVyLmNvbnRhaW5zKCp0aGlzKSAmJiAhb3BlcmF0b3I9PShvdGhlcik7CisgICAgfQorCisgICAgQzJfQUxMT1dfT1ZFUkZMT1cKKyAgICBpbmxpbmUgY29uc3RleHByIHVpbnQzMl90IHJpZ2h0KCkgY29uc3QgeworICAgICAgICByZXR1cm4gbGVmdCArIHdpZHRoOworICAgIH0KKworICAgIEMyX0FMTE9XX09WRVJGTE9XCisgICAgaW5saW5lIGNvbnN0ZXhwciB1aW50MzJfdCBib3R0b20oKSBjb25zdCB7CisgICAgICAgIHJldHVybiB0b3AgKyBoZWlnaHQ7CisgICAgfQorCisgICAgQzJfQUxMT1dfT1ZFUkZMT1cKKyAgICBpbmxpbmUgY29uc3RleHByIEMyUmVjdCBpbnRlcnNlY3QoY29uc3QgQzJSZWN0ICZvdGhlcikgY29uc3QgeworICAgICAgICByZXR1cm4gQzJSZWN0KGMyX21pbihyaWdodCgpLCBvdGhlci5yaWdodCgpKSAtIGMyX21heChsZWZ0LCBvdGhlci5sZWZ0KSwKKyAgICAgICAgICAgICAgICAgICAgICBjMl9taW4oYm90dG9tKCksIG90aGVyLmJvdHRvbSgpKSAtIGMyX21heCh0b3AsIG90aGVyLnRvcCksCisgICAgICAgICAgICAgICAgICAgICAgYzJfbWF4KGxlZnQsIG90aGVyLmxlZnQpLAorICAgICAgICAgICAgICAgICAgICAgIGMyX21heCh0b3AsIG90aGVyLnRvcCkpOworICAgIH0KKworICAgIC8qKiBjbGFtcHMgcmlnaHQgYW5kIGJvdHRvbSB0byB0b3AsIGxlZnQgaWYgdGhleSBvdmVyZmxvdyAqLworICAgIGlubGluZSBjb25zdGV4cHIgQzJSZWN0IG5vcm1hbGl6ZSgpIGNvbnN0IHsKKyAgICAgICAgcmV0dXJuIEMyUmVjdChjMl9tYXgobGVmdCwgcmlnaHQoKSkgLSBsZWZ0LCBjMl9tYXgodG9wLCBib3R0b20oKSkgLSB0b3AsIGxlZnQsIHRvcCk7CisgICAgfQorCitwcml2YXRlOgorICAgIC8vLyBub3RlOiBwb3RlbnRpYWxseSB1bnVzdWFsIGFyZ3VtZW50IG9yZGVyCisgICAgY29uc3RleHByIGlubGluZSBDMlJlY3QodWludDMyX3Qgd2lkdGhfLCB1aW50MzJfdCBoZWlnaHRfLCB1aW50MzJfdCBsZWZ0XywgdWludDMyX3QgdG9wXykKKyAgICAgICAgOiB3aWR0aCh3aWR0aF8pLAorICAgICAgICAgIGhlaWdodChoZWlnaHRfKSwKKyAgICAgICAgICBsZWZ0KGxlZnRfKSwKKyAgICAgICAgICB0b3AodG9wXykgeyB9Cit9OworCisvKioKKyAqIEludGVyZmFjZSBmb3Igb2JqZWN0cyB0aGF0IGhhdmUgYSB3aWR0aCBhbmQgaGVpZ2h0IChwbGFuYXIgY2FwYWNpdHkpLgorICovCitjbGFzcyBfQzJQbGFuYXJDYXBhY2l0eUFzcGVjdCB7CisvLy8gXG5hbWUgUGxhbmFyIGNhcGFjaXR5IGludGVyZmFjZQorLy8vIEB7CitwdWJsaWM6CisgICAgaW5saW5lIGNvbnN0ZXhwciB1aW50MzJfdCB3aWR0aCgpIGNvbnN0IHsgcmV0dXJuIF9tV2lkdGg7IH0KKyAgICBpbmxpbmUgY29uc3RleHByIHVpbnQzMl90IGhlaWdodCgpIGNvbnN0IHsgcmV0dXJuIF9tSGVpZ2h0OyB9CisKKyAgICBpbmxpbmUgY29uc3RleHByIG9wZXJhdG9yIEMyUmVjdCgpIGNvbnN0IHsKKyAgICAgICAgcmV0dXJuIEMyUmVjdChfbVdpZHRoLCBfbUhlaWdodCk7CisgICAgfQorCitwcm90ZWN0ZWQ6CisgICAgaW5saW5lIGNvbnN0ZXhwciBfQzJQbGFuYXJDYXBhY2l0eUFzcGVjdCh1aW50MzJfdCB3aWR0aCwgdWludDMyX3QgaGVpZ2h0KQorICAgICAgOiBfbVdpZHRoKHdpZHRoKSwgX21IZWlnaHQoaGVpZ2h0KSB7IH0KKworICAgIGlubGluZSBleHBsaWNpdCBjb25zdGV4cHIgX0MyUGxhbmFyQ2FwYWNpdHlBc3BlY3QoY29uc3QgX0MyUGxhbmFyQ2FwYWNpdHlBc3BlY3QgKnBhcmVudCkKKyAgICAgICAgOiBfbVdpZHRoKHBhcmVudCA9PSBudWxscHRyID8gMCA6IHBhcmVudC0+d2lkdGgoKSksCisgICAgICAgICAgX21IZWlnaHQocGFyZW50ID09IG51bGxwdHIgPyAwIDogcGFyZW50LT5oZWlnaHQoKSkgeyB9CisKK3ByaXZhdGU6CisgICAgdWludDMyX3QgX21XaWR0aDsKKyAgICB1aW50MzJfdCBfbUhlaWdodDsKKy8vLyBAfQorfTsKKworLyoqCisgKiBDMlBsYW5lSW5mbzogaW5mb3JtYXRpb24gb24gdGhlIGxheW91dCBvZiBhIHNpbmdlIGZsZXhpYmxlIHBsYW5lLgorICoKKyAqIFB1YmxpYyBmaWVsZHMgd2l0aG91dCBnZXR0ZXJzL3NldHRlcnMuCisgKi8KK3N0cnVjdCBDMlBsYW5lSW5mbyB7CisvL3B1YmxpYzoKKyAgICBlbnVtIGNoYW5uZWxfdCA6IHVpbnQzMl90IHsKKyAgICAgICAgQ0hBTk5FTF9ZLCAgLy8vPCBsdW1hCisgICAgICAgIENIQU5ORUxfUiwgIC8vLzwgcmVkCisgICAgICAgIENIQU5ORUxfRywgIC8vLzwgZ3JlZW4KKyAgICAgICAgQ0hBTk5FTF9CLCAgLy8vPCBibHVlCisgICAgICAgIENIQU5ORUxfQSwgIC8vLzwgYWxwaGEKKyAgICAgICAgQ0hBTk5FTF9DUiwgLy8vPCBDcgorICAgICAgICBDSEFOTkVMX0NCLCAvLy88IENiCisgICAgfSBjaGFubmVsOworCisgICAgaW50MzJfdCBjb2xJbmM7ICAgICAgIC8vLzwgY29sdW1uIGluY3JlbWVudCBpbiBieXRlcy4gbWF5IGJlIG5lZ2F0aXZlCisgICAgaW50MzJfdCByb3dJbmM7ICAgICAgIC8vLzwgcm93IGluY3JlbWVudCBpbiBieXRlcy4gbWF5IGJlIG5lZ2F0aXZlCisKKyAgICB1aW50MzJfdCBjb2xTYW1wbGluZzsgLy8vPCBzdWJzYW1wbGluZyBjb21wYXJlZCB0byB3aWR0aCAobXVzdCBiZSBhIHBvd2VyIG9mIDIpCisgICAgdWludDMyX3Qgcm93U2FtcGxpbmc7IC8vLzwgc3Vic2FtcGxpbmcgY29tcGFyZWQgdG8gaGVpZ2h0IChtdXN0IGJlIGEgcG93ZXIgb2YgMikKKworICAgIHVpbnQzMl90IGFsbG9jYXRlZERlcHRoOyAvLy88IHNpemUgb2YgZWFjaCBzYW1wbGUgKG11c3QgYmUgYSBtdWx0aXBsZSBvZiA4KQorICAgIHVpbnQzMl90IGJpdERlcHRoOyAgICAgICAvLy88IHNpZ25pZmljYW50IGJpdHMgcGVyIHNhbXBsZQorICAgIC8qKgorICAgICAqIHRoZSByaWdodCBzaGlmdCBvZiB0aGUgc2lnbmlmaWNhbnQgYml0cyBpbiB0aGUgc2FtcGxlLiBFLmcuIGlmIGEgMTAtYml0IHNpZ25pZmljYW50CisgICAgICogdmFsdWUgaXMgbGFpZCBvdXQgaW4gYSAxNi1iaXQgYWxsb2NhdGlvbiBhbGlnbmVkIHRvIExTQiAodmFsdWVzIDAtMTAyMyksIHJpZ2h0U2hpZnQKKyAgICAgKiB3b3VsZCBiZSAwIGFzIHRoZSAxNi1iaXQgdmFsdWUgcmVhZCBmcm9tIHRoZSBzYW1wbGUgZG9lcyBub3QgbmVlZCB0byBiZSByaWdodCBzaGlmdGVkCisgICAgICogYW5kIGNhbiBiZSB1c2VkIGFzIGlzIChhZnRlciBhcHBseWluZyBhIDEwLWJpdCBtYXNrIG9mIDB4M0ZGKS4KKyAgICAgKgorICAgICAqICstLS0tLS0tLSstLS0tLS0tLSsKKyAgICAgKiB8ICAgICAgVlZ8VlZWVlZWVlZ8CisgICAgICogKy0tLS0tLS0tKy0tLS0tLS0tKworICAgICAqICAxNSAgICAgOCA3ICAgICAgMAorICAgICAqCisgICAgICogSWYgdGhlIHZhbHVlIGlzIGxhaWQgb3V0IGFsaWduZWQgdG8gTVNCLCByaWdodFNoaWZ0IHdvdWxkIGJlIDYsIGFzIHRoZSB2YWx1ZSByZWFkCisgICAgICogZnJvbSB0aGUgYWxsb2NhdGVkIHNhbXBsZSBtdXN0IGJlIHJpZ2h0LXNoaWZ0ZWQgYnkgNiB0byBnZXQgdGhlIGFjdHVhbCBzYW1wbGUgdmFsdWUuCisgICAgICoKKyAgICAgKiArLS0tLS0tLS0rLS0tLS0tLS0rCisgICAgICogfFZWVlZWVlZWfFZWICAgICAgfAorICAgICAqICstLS0tLS0tLSstLS0tLS0tLSsKKyAgICAgKiAgMTUgICAgIDggNyAgICAgIDAKKyAgICAgKi8KKyAgICB1aW50MzJfdCByaWdodFNoaWZ0OworCisgICAgZW51bSBlbmRpYW5uZXNzX3QgOiB1aW50MzJfdCB7CisgICAgICAgIE5BVElWRSwKKyAgICAgICAgTElUVExFX0VORCwgLy8gTElUVExFX0VORElBTiBpcyByZXNlcnZlZCBtYWNybworICAgICAgICBCSUdfRU5ELCAgICAvLyBCSUdfRU5ESUFOIGlzIGEgcmVzZXJ2ZWQgbWFjcm8KKyAgICB9IGVuZGlhbm5lc3M7IC8vLzwgZW5kaWFubmVzcyBvZiB0aGUgc2FtcGxlcworCisgICAgLyoqCisgICAgICogVGhlIGZvbGxvd2luZyB0d28gZmllbGRzIGRlZmluZSB0aGUgcmVsYXRpb24gYmV0d2VlbiBtdWx0aXBsZSBwbGFuZXMuIElmIG11bHRpcGxlIHBsYW5lcyBhcmUKKyAgICAgKiBpbnRlcmxlYXZlZCwgdGhleSBzaGFyZSBhIHJvb3QgcGxhbmUgKHdoaWNoZXZlciBwbGFuZSdzIHN0YXJ0IGFkZHJlc3MgaXMgdGhlIGxvd2VzdCksIGFuZAorICAgICAqIHxvZmZzZXR8IGlzIHRoZSBvZmZzZXQgb2YgdGhpcyBwbGFuZSBpbnNpZGUgdGhlIHJvb3QgcGxhbmUgKGluIGJ5dGVzKS4gfHJvb3RJeHwgaXMgdGhlIGluZGV4CisgICAgICogb2YgdGhlIHJvb3QgcGxhbmUuIElmIGEgcGxhbmUgaXMgaW5kZXBlbmRlbnQsIHJvb3RJeCBpcyBpdHMgaW5kZXggYW5kIG9mZnNldCBpcyAwLgorICAgICAqLworICAgIHVpbnQzMl90IHJvb3RJeDsgLy8vPCBpbmRleCBvZiB0aGUgcm9vdCBwbGFuZQorICAgIHVpbnQzMl90IG9mZnNldDsgLy8vPCBvZmZzZXQgb2YgdGhpcyBwbGFuZSBpbnNpZGUgb2YgdGhlIHJvb3QgcGxhbmUKKworICAgIGlubGluZSBjb25zdGV4cHIgc3NpemVfdCBtaW5PZmZzZXQodWludDMyX3Qgd2lkdGgsIHVpbnQzMl90IGhlaWdodCkgY29uc3QgeworICAgICAgICBzc2l6ZV90IG9mZnMgPSAwOworICAgICAgICBpZiAod2lkdGggPiAwICYmIGNvbEluYyA8IDApIHsKKyAgICAgICAgICAgIG9mZnMgKz0gY29sSW5jICogKHNzaXplX3QpKHdpZHRoIC0gMSk7CisgICAgICAgIH0KKyAgICAgICAgaWYgKGhlaWdodCA+IDAgJiYgcm93SW5jIDwgMCkgeworICAgICAgICAgICAgb2ZmcyArPSByb3dJbmMgKiAoc3NpemVfdCkoaGVpZ2h0IC0gMSk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIG9mZnM7CisgICAgfQorCisgICAgaW5saW5lIGNvbnN0ZXhwciBzc2l6ZV90IG1heE9mZnNldCh1aW50MzJfdCB3aWR0aCwgdWludDMyX3QgaGVpZ2h0KSBjb25zdCB7CisgICAgICAgIHNzaXplX3Qgb2ZmcyA9IChhbGxvY2F0ZWREZXB0aCArIDcpID4+IDM7CisgICAgICAgIGlmICh3aWR0aCA+IDAgJiYgY29sSW5jID4gMCkgeworICAgICAgICAgICAgb2ZmcyArPSBjb2xJbmMgKiAoc3NpemVfdCkod2lkdGggLSAxKTsKKyAgICAgICAgfQorICAgICAgICBpZiAoaGVpZ2h0ID4gMCAmJiByb3dJbmMgPiAwKSB7CisgICAgICAgICAgICBvZmZzICs9IHJvd0luYyAqIChzc2l6ZV90KShoZWlnaHQgLSAxKTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gb2ZmczsKKyAgICB9Cit9IEMyX1BBQ0s7CisKK3N0cnVjdCBDMlBsYW5hckxheW91dCB7CisvL3B1YmxpYzoKKyAgICBlbnVtIHR5cGVfdCA6IHVpbnQzMl90IHsKKyAgICAgICAgVFlQRV9VTktOT1dOID0gMCwKKyAgICAgICAgVFlQRV9ZVVYgPSAweDEwMCwgICAvLy88IFlVViBpbWFnZSB3aXRoIDMgcGxhbmVzCisgICAgICAgIFRZUEVfWVVWQSwgICAgICAgICAgLy8vPCBZVVZBIGltYWdlIHdpdGggNCBwbGFuZXMKKyAgICAgICAgVFlQRV9SR0IsICAgICAgICAgICAvLy88IFJHQiBpbWFnZSB3aXRoIDMgcGxhbmVzCisgICAgICAgIFRZUEVfUkdCQSwgICAgICAgICAgLy8vPCBSQkdBIGltYWdlIHdpdGggNCBwbGFuZXMKKyAgICB9OworCisgICAgdHlwZV90IHR5cGU7ICAgICAgICAgICAgICAgICAgICAvLyBpbWFnZSB0eXBlCisgICAgdWludDMyX3QgbnVtUGxhbmVzOyAgICAgICAgICAgICAvLyBudW1iZXIgb2YgY29tcG9uZW50IHBsYW5lcworICAgIHVpbnQzMl90IHJvb3RQbGFuZXM7ICAgICAgICAgICAgLy8gbnVtYmVyIG9mIGxheW91dCBwbGFuZXMgKHJvb3QgcGxhbmVzKQorCisgICAgZW51bSBwbGFuZV9pbmRleF90IDogdWludDMyX3QgeworICAgICAgICBQTEFORV9ZID0gMCwKKyAgICAgICAgUExBTkVfVSA9IDEsCisgICAgICAgIFBMQU5FX1YgPSAyLAorICAgICAgICBQTEFORV9SID0gMCwKKyAgICAgICAgUExBTkVfRyA9IDEsCisgICAgICAgIFBMQU5FX0IgPSAyLAorICAgICAgICBQTEFORV9BID0gMywKKyAgICAgICAgTUFYX05VTV9QTEFORVMgPSA0LAorICAgIH07CisKKyAgICBDMlBsYW5lSW5mbyBwbGFuZXNbTUFYX05VTV9QTEFORVNdOworfTsKKworLyoqCisgKiBBc3BlY3QgZm9yIG9iamVjdHMgdGhhdCBoYXZlIGEgcGxhbmFyIHNlY3Rpb24gKGNyb3AgcmVjdGFuZ2xlKS4KKyAqCisgKiBUaGlzIGNsYXNzIGlzIGNvcGlhYmxlLgorICovCitjbGFzcyBfQzJQbGFuYXJTZWN0aW9uQXNwZWN0IDogcHVibGljIF9DMlBsYW5hckNhcGFjaXR5QXNwZWN0IHsKKy8vLyBcbmFtZSBQbGFuYXIgc2VjdGlvbiBpbnRlcmZhY2UKKy8vLyBAeworcHJpdmF0ZToKKyAgICBpbmxpbmUgY29uc3RleHByIF9DMlBsYW5hclNlY3Rpb25Bc3BlY3QodWludDMyX3Qgd2lkdGgsIHVpbnQzMl90IGhlaWdodCwgY29uc3QgQzJSZWN0ICZjcm9wKQorICAgICAgICA6IF9DMlBsYW5hckNhcGFjaXR5QXNwZWN0KHdpZHRoLCBoZWlnaHQpLAorICAgICAgICAgIG1Dcm9wKEMyUmVjdChzdGQ6Om1pbih3aWR0aCAtIHN0ZDo6bWluKGNyb3AubGVmdCwgd2lkdGgpLCBjcm9wLndpZHRoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgc3RkOjptaW4oaGVpZ2h0IC0gc3RkOjptaW4oY3JvcC50b3AsIGhlaWdodCksIGNyb3AuaGVpZ2h0KSkuYXQoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RkOjptaW4oY3JvcC5sZWZ0LCB3aWR0aCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RkOjptaW4oY3JvcC5oZWlnaHQsIGhlaWdodCkpKSB7CisgICAgfQorCitwdWJsaWM6CisgICAgLy8gY3JvcCBjYW4gYmUgYW4gZW1wdHkgcmVjdCwgZG9lcyBub3QgaGF2ZSB0byBsaW5lIHVwIHdpdGggc3Vic2FtcGxpbmcKKyAgICAvLyBOT1RFOiB3ZSBkbyBub3Qgc3VwcG9ydCBmbG9hdGluZy1wb2ludCBjcm9wCisgICAgaW5saW5lIGNvbnN0ZXhwciBDMlJlY3QgY3JvcCgpIGNvbnN0IHsgcmV0dXJuIG1Dcm9wOyB9CisKKyAgICAvKioKKyAgICAgKiBSZXR1cm5zIGEgY2hpbGQgcGxhbmFyIHNlY3Rpb24gZm9yIHxjcm9wfCwgd2hlcmUgdGhlIGNhcGFjaXR5IHJlcHJlc2VudHMgdGhpcyBzZWN0aW9uLgorICAgICAqLworICAgIGlubGluZSBjb25zdGV4cHIgX0MyUGxhbmFyU2VjdGlvbkFzcGVjdCBjaGlsZFNlY3Rpb24oY29uc3QgQzJSZWN0ICZjcm9wKSBjb25zdCB7CisgICAgICAgIHJldHVybiBfQzJQbGFuYXJTZWN0aW9uQXNwZWN0KAorICAgICAgICAgICAgICAgIG1Dcm9wLndpZHRoLCBtQ3JvcC5oZWlnaHQsCisgICAgICAgICAgICAgICAgLy8gY3JvcCBhbmQgdHJhbnNsYXRlIHxjcm9wfCByZWN0CisgICAgICAgICAgICAgICAgQzJSZWN0KGMyX21pbihtQ3JvcC5yaWdodCgpIC0gYzJfY2xhbXAobUNyb3AubGVmdCwgY3JvcC5sZWZ0LCBtQ3JvcC5yaWdodCgpKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNyb3Aud2lkdGgpLAorICAgICAgICAgICAgICAgICAgICAgICBjMl9taW4obUNyb3AuYm90dG9tKCkgLSBjMl9jbGFtcChtQ3JvcC50b3AsIGNyb3AudG9wLCBtQ3JvcC5ib3R0b20oKSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjcm9wLmhlaWdodCkpCisgICAgICAgICAgICAgICAgLmF0KGMyX2NsYW1wKG1Dcm9wLmxlZnQsIGNyb3AubGVmdCwgbUNyb3AucmlnaHQoKSkgLSBtQ3JvcC5sZWZ0LAorICAgICAgICAgICAgICAgICAgICBjMl9jbGFtcChtQ3JvcC50b3AsIGNyb3AudG9wLCBtQ3JvcC5ib3R0b20oKSkgLSBtQ3JvcC50b3ApKTsKKyAgICB9CisKK3Byb3RlY3RlZDoKKyAgICBpbmxpbmUgY29uc3RleHByIF9DMlBsYW5hclNlY3Rpb25Bc3BlY3QoY29uc3QgX0MyUGxhbmFyQ2FwYWNpdHlBc3BlY3QgKnBhcmVudCkKKyAgICAgICAgOiBfQzJQbGFuYXJDYXBhY2l0eUFzcGVjdChwYXJlbnQpLCBtQ3JvcCh3aWR0aCgpLCBoZWlnaHQoKSkge30KKworICAgIGlubGluZSBjb25zdGV4cHIgX0MyUGxhbmFyU2VjdGlvbkFzcGVjdChjb25zdCBfQzJQbGFuYXJDYXBhY2l0eUFzcGVjdCAqcGFyZW50LCBjb25zdCBDMlJlY3QgJmNyb3ApCisgICAgICAgIDogX0MyUGxhbmFyQ2FwYWNpdHlBc3BlY3QocGFyZW50KSwKKyAgICAgICAgICBtQ3JvcChwYXJlbnQgPT0gbnVsbHB0ciA/IEMyUmVjdCgpIDogKChDMlJlY3QpKnBhcmVudCkuaW50ZXJzZWN0KGNyb3ApLm5vcm1hbGl6ZSgpKSB7IH0KKworICAgIGlubGluZSBjb25zdGV4cHIgX0MyUGxhbmFyU2VjdGlvbkFzcGVjdChjb25zdCBfQzJQbGFuYXJTZWN0aW9uQXNwZWN0ICpwYXJlbnQsIGNvbnN0IEMyUmVjdCAmY3JvcCkKKyAgICAgICAgOiBfQzJQbGFuYXJDYXBhY2l0eUFzcGVjdChwYXJlbnQpLAorICAgICAgICAgIG1Dcm9wKHBhcmVudCA9PSBudWxscHRyID8gQzJSZWN0KCkgOiBwYXJlbnQtPmNyb3AoKS5pbnRlcnNlY3QoY3JvcCkubm9ybWFsaXplKCkpIHsgfQorCitwcml2YXRlOgorICAgIGZyaWVuZCBjbGFzcyBfQzJFZGl0YWJsZVBsYW5hclNlY3Rpb25Bc3BlY3Q7CisgICAgQzJSZWN0IG1Dcm9wOworLy8vIEB9Cit9OworCisvKioKKyAqIEFzcGVjdCBmb3Igb2JqZWN0cyB0aGF0IGhhdmUgYW4gZWRpdGFibGUgcGxhbmFyIHNlY3Rpb24gKGNyb3AgcmVjdGFuZ2xlKS4KKyAqCisgKiBUaGlzIGNsYXNzIGlzIGNvcGlhYmxlLgorICovCitjbGFzcyBfQzJFZGl0YWJsZVBsYW5hclNlY3Rpb25Bc3BlY3QgOiBwdWJsaWMgX0MyUGxhbmFyU2VjdGlvbkFzcGVjdCB7CisvLy8gXG5hbWUgUGxhbmFyIHNlY3Rpb24gaW50ZXJmYWNlCisvLy8gQHsKKyAgICB1c2luZyBfQzJQbGFuYXJTZWN0aW9uQXNwZWN0OjpfQzJQbGFuYXJTZWN0aW9uQXNwZWN0OworCitwdWJsaWM6CisgICAgLy8gY3JvcCBjYW4gYmUgYW4gZW1wdHkgcmVjdCwgZG9lcyBub3QgaGF2ZSB0byBsaW5lIHVwIHdpdGggc3Vic2FtcGxpbmcKKyAgICAvLyBOT1RFOiB3ZSBkbyBub3Qgc3VwcG9ydCBmbG9hdGluZy1wb2ludCBjcm9wCisgICAgaW5saW5lIGNvbnN0ZXhwciBDMlJlY3QgY3JvcCgpIGNvbnN0IHsgcmV0dXJuIG1Dcm9wOyB9CisKKyAgICAvKioKKyAgICAgKiAgU2V0cyBjcm9wIHRvIGNyb3AgaW50ZXJzZWN0ZWQgd2l0aCBbKDAsMCkgLi4gKHdpZHRoLCBoZWlnaHQpXQorICAgICAqLworICAgIGlubGluZSB2b2lkIHNldENyb3BfYmUoY29uc3QgQzJSZWN0ICZjcm9wKSB7CisgICAgICAgIG1Dcm9wLmxlZnQgPSBzdGQ6Om1pbih3aWR0aCgpLCBjcm9wLmxlZnQpOworICAgICAgICBtQ3JvcC50b3AgPSBzdGQ6Om1pbihoZWlnaHQoKSwgY3JvcC50b3ApOworICAgICAgICAvLyBJdCdzIGd1YXJhbnRlZWQgdGhhdCBtQ3JvcC5sZWZ0IDw9IHdpZHRoKCkgJiYgbUNyb3AudG9wIDw9IGhlaWdodCgpCisgICAgICAgIG1Dcm9wLndpZHRoID0gc3RkOjptaW4od2lkdGgoKSAtIG1Dcm9wLmxlZnQsIGNyb3Aud2lkdGgpOworICAgICAgICBtQ3JvcC5oZWlnaHQgPSBzdGQ6Om1pbihoZWlnaHQoKSAtIG1Dcm9wLnRvcCwgY3JvcC5oZWlnaHQpOworICAgIH0KKworICAgIC8qKgorICAgICAqIElmIGNyb3AgaXMgd2l0aGluIHRoZSBkaW1lbnNpb25zIG9mIHRoaXMgb2JqZWN0LCBpdCBzZXRzIGNyb3AgdG8gaXQuCisgICAgICoKKyAgICAgKiBccmV0dXJuIHRydWUgaWZmIGNyb3AgaXMgd2l0aGluIHRoZSBkaW1lbnNpb25zIG9mIHRoaXMgb2JqZWN0CisgICAgICovCisgICAgaW5saW5lIGJvb2wgc2V0Q3JvcChjb25zdCBDMlJlY3QgJmNyb3ApIHsKKyAgICAgICAgaWYgKHdpZHRoKCkgPCBjcm9wLndpZHRoIHx8IGhlaWdodCgpIDwgY3JvcC5oZWlnaHQKKyAgICAgICAgICAgICAgICB8fCB3aWR0aCgpIC0gY3JvcC53aWR0aCA8IGNyb3AubGVmdCB8fCBoZWlnaHQoKSAtIGNyb3AuaGVpZ2h0IDwgY3JvcC50b3ApIHsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgICAgICBtQ3JvcCA9IGNyb3A7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKy8vLyBAfQorfTsKKworLyoqCisgKiBVdGlsaXR5IGNsYXNzIGZvciBzYWZlIHJhbmdlIGNhbGN1bGF0aW9ucyB1c2luZyBzaXplX3Qtcy4KKyAqLworY2xhc3MgQzJQbGFuYXJTZWN0aW9uIDogcHVibGljIF9DMlBsYW5hclNlY3Rpb25Bc3BlY3QgeworcHVibGljOgorICAgIGlubGluZSBjb25zdGV4cHIgQzJQbGFuYXJTZWN0aW9uKGNvbnN0IF9DMlBsYW5hckNhcGFjaXR5QXNwZWN0ICZwYXJlbnQsIGNvbnN0IEMyUmVjdCAmY3JvcCkKKyAgICAgICAgOiBfQzJQbGFuYXJTZWN0aW9uQXNwZWN0KCZwYXJlbnQsIGNyb3ApIHsgfQorCisgICAgaW5saW5lIGNvbnN0ZXhwciBDMlBsYW5hclNlY3Rpb24oY29uc3QgX0MyUGxhbmFyU2VjdGlvbkFzcGVjdCAmcGFyZW50LCBjb25zdCBDMlJlY3QgJmNyb3ApCisgICAgICAgIDogX0MyUGxhbmFyU2VjdGlvbkFzcGVjdCgmcGFyZW50LCBjcm9wKSB7IH0KKworICAgIGlubGluZSBjb25zdGV4cHIgQzJQbGFuYXJTZWN0aW9uIGludGVyc2VjdChjb25zdCBDMlJlY3QgJmNyb3ApIGNvbnN0IHsKKyAgICAgICAgcmV0dXJuIEMyUGxhbmFyU2VjdGlvbigqdGhpcywgY3JvcCk7CisgICAgfQorfTsKKworLyoqCisgKiBVdGlsaXR5IGNsYXNzIGZvciBzaW1wbGUgYW5kIHNhZmUgcGxhbmFyIGNhcGFjaXR5IGFuZCBzZWN0aW9uIGNvbnN0cnVjdGlvbi4KKyAqLworY2xhc3MgQzJQbGFuYXJDYXBhY2l0eSA6IHB1YmxpYyBfQzJQbGFuYXJDYXBhY2l0eUFzcGVjdCB7CitwdWJsaWM6CisgICAgaW5saW5lIGNvbnN0ZXhwciBleHBsaWNpdCBDMlBsYW5hckNhcGFjaXR5KHNpemVfdCB3aWR0aCwgc2l6ZV90IGhlaWdodCkKKyAgICAgICAgOiBfQzJQbGFuYXJDYXBhY2l0eUFzcGVjdChjMl9taW4od2lkdGgsIHN0ZDo6bnVtZXJpY19saW1pdHM8dWludDMyX3Q+OjptYXgoKSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYzJfbWluKGhlaWdodCwgc3RkOjpudW1lcmljX2xpbWl0czx1aW50MzJfdD46Om1heCgpKSkgeyB9CisKKyAgICBpbmxpbmUgY29uc3RleHByIEMyUGxhbmFyU2VjdGlvbiBzZWN0aW9uKGNvbnN0IEMyUmVjdCAmY3JvcCkgY29uc3QgeworICAgICAgICByZXR1cm4gQzJQbGFuYXJTZWN0aW9uKCp0aGlzLCBjcm9wKTsKKyAgICB9Cit9OworCisKKy8qKgorICogXGluZ3JvdXAgZ3JhcGhpYyBhbGxvY2F0b3IKKyAqIDJEIGFsbG9jYXRpb24gaW50ZXJmYWNlLgorICovCitjbGFzcyBDMkdyYXBoaWNBbGxvY2F0aW9uIDogcHVibGljIF9DMlBsYW5hckNhcGFjaXR5QXNwZWN0IHsKK3B1YmxpYzoKKyAgICAvKioKKyAgICAgKiBNYXBzIGEgcmVjdGFuZ3VsYXIgc2VjdGlvbiAoYXMgZGVmaW5lZCBieSB8cmVjdHwpIG9mIGEgMkQgYWxsb2NhdGlvbiBpbnRvIGxvY2FsIHByb2Nlc3MKKyAgICAgKiBtZW1vcnkgZm9yIGZsZXhpYmxlIGFjY2Vzcy4gT24gc3VjY2VzcywgaXQgZmlsbHMgb3V0IHxsYXlvdXR8IHdpdGggdGhlIHBsYW5lIHNwZWNpZmljYXRpb25zCisgICAgICogYW5kIGZpbGxzIHRoZSB8YWRkcnwgYXJyYXkgd2l0aCBwb2ludGVycyB0byB0aGUgZmlyc3QgYnl0ZSBvZiB0aGUgdG9wLWxlZnQgcGl4ZWwgb2YgZWFjaAorICAgICAqIHBsYW5lIHVzZWQuIE90aGVyd2lzZSwgaXQgbGVhdmVzIHxsYXlvdXR8IGFuZCB8YWRkcnwgdW50b3VjaGVkLiB8ZmVuY2V8IHdpbGwgY29udGFpbgorICAgICAqIGFuIGFjcXVpcmUgc3luYyBmZW5jZSBvYmplY3QuIElmIGl0IGlzIGFscmVhZHkgc2FmZSB0byBhY2Nlc3MgdGhlCisgICAgICogYnVmZmVyIGNvbnRlbnRzLCB0aGVuIGl0IHdpbGwgYmUgYW4gZW1wdHkgKGFscmVhZHkgZmlyZWQpIGZlbmNlLgorICAgICAqCisgICAgICogU2FmZSByZWdpb25zIGZvciB0aGUgcG9pbnRlciBhZGRyZXNzZXMgcmV0dXJuZWQgY2FuIGJlIGdvdHRlbiB2aWEgQzJMYXlvdXRJbmZvLm1pbk9mZnNldCgpLworICAgICAqIG1heE9mZnNldCgpLgorICAgICAqCisgICAgICogXHBhcmFtIHJlY3QgICAgICAgICAgc2VjdGlvbiB0byBiZSBtYXBwZWQgKHRoaXMgZG9lcyBub3QgaGF2ZSB0byBiZSBhbGlnbmVkKQorICAgICAqIFxwYXJhbSB1c2FnZSAgICAgICAgIHRoZSBkZXNpcmVkIHVzYWdlLiBcdG9kbyB0aGlzIG11c3QgYmUga1NvZnR3YXJlUmVhZCBhbmQvb3IKKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICBrU29mdHdhcmVXcml0ZS4KKyAgICAgKiBccGFyYW0gZmVuY2UgICAgICAgICBhIHBvaW50ZXIgdG8gYSBmZW5jZSBvYmplY3QgaWYgYW4gYXN5bmMgbWFwcGluZyBpcyByZXF1ZXN0ZWQuIElmCisgICAgICogICAgICAgICAgICAgICAgICAgICAgbm90LW51bGwsIGFuZCBhY3F1aXJlIGZlbmNlIHdpbGwgYmUgc3RvcmVkIGhlcmUgb24gc3VjY2Vzcywgb3IgZW1wdHkKKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICBmZW5jZSBvbiBmYWlsdXJlLiBJZiBudWxsLCB0aGUgbWFwcGluZyB3aWxsIGJlIHN5bmNocm9ub3VzLgorICAgICAqIFxwYXJhbSBsYXlvdXQgICAgICAgIGEgcG9pbnRlciB0byB3aGVyZSB0aGUgbWFwcGVkIHBsYW5lcycgZGVzY3JpcHRvcnMgd2lsbCBiZQorICAgICAqICAgICAgICAgICAgICAgICAgICAgIHN0b3JlZC4gT24gZmFpbHVyZSwgbnVsbHB0ciB3aWxsIGJlIHN0b3JlZCBoZXJlLgorICAgICAqIFxwYXJhbSBhZGRyICAgICAgICAgIHBvaW50ZXIgdG8gYW4gYXJyYXkgd2l0aCBhdCBsZWFzdCBDMlBsYW5hckxheW91dDo6TUFYX05VTV9QTEFORVMKKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICBlbGVtZW50cy4gT25seSBsYXlvdXQubnVtUGxhbmVzIGVsZW1lbnRzIHdpbGwgYmUgbW9kaWZpZWQgb24gc3VjY2Vzcy4KKyAgICAgKgorICAgICAqIFxyZXR2YWwgQzJfT0sgICAgICAgIHRoZSBvcGVyYXRpb24gd2FzIHN1Y2Nlc3NmdWwKKyAgICAgKiBccmV0dmFsIEMyX1JFRlVTRUQgICBubyBwZXJtaXNzaW9uIHRvIG1hcCB0aGUgc2VjdGlvbgorICAgICAqIFxyZXR2YWwgQzJfRFVQTElDQVRFIHRoZXJlIGlzIGFscmVhZHkgYSBtYXBwZWQgcmVnaW9uIGFuZCB0aGlzIGFsbG9jYXRpb24gY2Fubm90IHN1cHBvcnQKKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICBtdWx0aS1tYXBwaW5nIChjYWxsZXIgZXJyb3IpCisgICAgICogXHJldHZhbCBDMl9USU1FRF9PVVQgdGhlIG9wZXJhdGlvbiB0aW1lZCBvdXQKKyAgICAgKiBccmV0dmFsIEMyX05PX01FTU9SWSBub3QgZW5vdWdoIG1lbW9yeSB0byBjb21wbGV0ZSB0aGUgb3BlcmF0aW9uCisgICAgICogXHJldHZhbCBDMl9CQURfVkFMVUUgdGhlIHBhcmFtZXRlcnMgKHJlY3QpIGFyZSBpbnZhbGlkIG9yIG91dHNpZGUgdGhlIGFsbG9jYXRpb24sIG9yIHRoZQorICAgICAqICAgICAgICAgICAgICAgICAgICAgIHVzYWdlIGZsYWdzIGFyZSBpbnZhbGlkIChjYWxsZXIgZXJyb3IpCisgICAgICogXHJldHZhbCBDMl9DT1JSVVBURUQgc29tZSB1bmtub3duIGVycm9yIHByZXZlbnRlZCB0aGUgb3BlcmF0aW9uIGZyb20gY29tcGxldGluZyAodW5leHBlY3RlZCkKKworICAgICAqLworICAgIHZpcnR1YWwgYzJfc3RhdHVzX3QgbWFwKAorICAgICAgICAgICAgQzJSZWN0IHJlY3QsIEMyTWVtb3J5VXNhZ2UgdXNhZ2UsIEMyRmVuY2UgKmZlbmNlLAorICAgICAgICAgICAgQzJQbGFuYXJMYXlvdXQgKmxheW91dCAvKiBub25udWxsICovLCB1aW50OF90ICoqYWRkciAvKiBub25udWxsICovKSA9IDA7CisKKyAgICAvKioKKyAgICAgKiBVbm1hcHMgYSBzZWN0aW9uIG9mIGFuIGFsbG9jYXRpb24gYXQgfGFkZHJ8IHdpdGggfHJlY3R8LiBUaGVzZSBtdXN0IGJlIHBhcmFtZXRlcnMgcHJldmlvdXNseQorICAgICAqIHBhc3NlZCB0byBhbmQgcmV0dXJuZWQgYnkgfG1hcHw7IG90aGVyd2lzZSwgdGhpcyBvcGVyYXRpb24gaXMgYSBuby1vcC4KKyAgICAgKgorICAgICAqIFxwYXJhbSBhZGRyICAgICAgICAgIHBvaW50ZXIgdG8gYW4gYXJyYXkgd2l0aCBhdCBsZWFzdCBDMlBsYW5hckxheW91dDo6TUFYX05VTV9QTEFORVMKKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICBlbGVtZW50cyBjb250YWluaW5nIHRoZSBzdGFydGluZyBhZGRyZXNzZXMgb2YgdGhlIG1hcHBlZCBsYXllcnMKKyAgICAgKiBccGFyYW0gcmVjdCAgICAgICAgICBib3VuZGFyaWVzIG9mIHRoZSBtYXBwZWQgc2VjdGlvbgorICAgICAqIFxwYXJhbSBmZW5jZSAgICAgICAgIGEgcG9pbnRlciB0byBhIGZlbmNlIG9iamVjdCBpZiBhbiBhc3luYyB1bm1hcHBpbmcgaXMgcmVxdWVzdGVkLiBJZgorICAgICAqICAgICAgICAgICAgICAgICAgICAgIG5vdC1udWxsLCBhIHJlbGVhc2UgZmVuY2Ugd2lsbCBiZSBzdG9yZWQgaGVyZSBvbiBzdWNjZXNzLCBvciBlbXB0eSBmZW5jZQorICAgICAqICAgICAgICAgICAgICAgICAgICAgIG9uIGZhaWx1cmUuIFRoaXMgZmVuY2Ugc2lnbmFscyB3aGVuIHRoZSBvcmlnaW5hbCBhbGxvY2F0aW9uIGNvbnRhaW5zCisgICAgICogICAgICAgICAgICAgICAgICAgICAgYWxsIGNoYW5nZXMgdGhhdCBoYXBwZW5lZCB0byB0aGUgbWFwcGVkIHNlY3Rpb24uIElmIG51bGwsIHRoZSB1bm1hcHBpbmcKKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICB3aWxsIGJlIHN5bmNocm9ub3VzLgorICAgICAqCisgICAgICogXHJldHZhbCBDMl9PSyAgICAgICAgdGhlIG9wZXJhdGlvbiB3YXMgc3VjY2Vzc2Z1bAorICAgICAqIFxyZXR2YWwgQzJfVElNRURfT1VUIHRoZSBvcGVyYXRpb24gdGltZWQgb3V0CisgICAgICogXHJldHZhbCBDMl9OT1RfRk9VTkQgdGhlcmUgaXMgbm8gc3VjaCBtYXBwZWQgcmVnaW9uIChjYWxsZXIgZXJyb3IpCisgICAgICogXHJldHZhbCBDMl9DT1JSVVBURUQgc29tZSB1bmtub3duIGVycm9yIHByZXZlbnRlZCB0aGUgb3BlcmF0aW9uIGZyb20gY29tcGxldGluZyAodW5leHBlY3RlZCkKKyAgICAgKiBccmV0dmFsIEMyX1JFRlVTRUQgICBubyBwZXJtaXNzaW9uIHRvIHVubWFwIHRoZSBzZWN0aW9uICh1bmV4cGVjdGVkIC0gc3lzdGVtKQorICAgICAqLworICAgIHZpcnR1YWwgYzJfc3RhdHVzX3QgdW5tYXAoCisgICAgICAgICAgICB1aW50OF90ICoqYWRkciAvKiBub25udWxsICovLCBDMlJlY3QgcmVjdCwgQzJGZW5jZSAqZmVuY2UgLyogbnVsbGFibGUgKi8pID0gMDsKKworICAgIC8qKgorICAgICAqIFJldHVybnMgdGhlIGFsbG9jYXRvciBJRCBmb3IgdGhpcyBhbGxvY2F0aW9uLiBUaGlzIGlzIHVzZWZ1bCB0byBwdXQgdGhlIGhhbmRsZSBpbnRvIGNvbnRleHQuCisgICAgICovCisgICAgdmlydHVhbCBDMkFsbG9jYXRvcjo6aWRfdCBnZXRBbGxvY2F0b3JJZCgpIGNvbnN0ID0gMDsKKworICAgIC8qKgorICAgICAqIFJldHVybnMgYSBwb2ludGVyIHRvIHRoZSBhbGxvY2F0aW9uIGhhbmRsZS4KKyAgICAgKi8KKyAgICB2aXJ0dWFsIGNvbnN0IEMySGFuZGxlICpoYW5kbGUoKSBjb25zdCA9IDA7CisKKyAgICAvKioKKyAgICAgKiBSZXR1cm5zIHRydWUgaWYgdGhpcyBpcyB0aGUgc2FtZSBhbGxvY2F0aW9uIGFzIHxvdGhlcnwuCisgICAgICovCisgICAgdmlydHVhbCBib29sIGVxdWFscyhjb25zdCBzdGQ6OnNoYXJlZF9wdHI8Y29uc3QgQzJHcmFwaGljQWxsb2NhdGlvbj4gJm90aGVyKSBjb25zdCA9IDA7CisKK3Byb3RlY3RlZDoKKyAgICB1c2luZyBfQzJQbGFuYXJDYXBhY2l0eUFzcGVjdDo6X0MyUGxhbmFyQ2FwYWNpdHlBc3BlY3Q7CisgICAgdmlydHVhbCB+QzJHcmFwaGljQWxsb2NhdGlvbigpID0gZGVmYXVsdDsKK307CisKK2NsYXNzIEMyR3JhcGhpY0FsbG9jYXRpb247CisKKy8qKgorICogQSAyRCBibG9jay4KKyAqCisgKiBcbm90ZSB3aWR0aCgpL2hlaWdodCgpIGlzIG5vdCBtZWFuaW5nZnVsIGZvciB1c2VycyBvZiBibG9ja3M7IGluc3RlYWQsIGNyb3AoKS53aWR0aCgpIGFuZAorICogY3JvcCgpLmhlaWdodCgpIGlzIHRoZSBjYXBhY2l0eSBvZiB0aGUgdXNhYmxlIHBvcnRpb24uIFVzZSBhbmQgY3JvcCgpIGlmIGFjY2Vzc2luZyB0aGUgYmxvY2sKKyAqIGRpcmVjdGx5IHRocm91Z2ggaXRzIGhhbmRsZSB0byByZXByZXNlbnQgdGhlIGFsbG90dGVkIHJlZ2lvbiBvZiB0aGUgdW5kZXJseWluZyBhbGxvY2F0aW9uIHRvIHRoaXMKKyAqIGJsb2NrLgorICovCitjbGFzcyBDMkJsb2NrMkQgOiBwdWJsaWMgX0MyUGxhbmFyU2VjdGlvbkFzcGVjdCB7CitwdWJsaWM6CisgICAgLyoqCisgICAgICogUmV0dXJucyB0aGUgdW5kZXJseWluZyBoYW5kbGUgZm9yIHRoaXMgYWxsb2NhdGlvbi4KKyAgICAgKgorICAgICAqIFxub3RlIHRoYXQgdGhlIGJsb2NrIGFuZCBpdHMgYmxvY2sgcG9vbCBoYXMgc2hhcmVkIG93bmVyc2hpcCBvZiB0aGUgaGFuZGxlCisgICAgICogICAgICAgYW5kIGlmIGFsbCByZWZlcmVuY2VzIHRvIHRoZSBibG9jayBhcmUgcmVsZWFzZWQsIHRoZSB1bmRlcmx5aW5nIGJsb2NrCisgICAgICogICAgICAgYWxsb2NhdGlvbiBtYXkgZ2V0IHJldXNlZCBldmVuIGlmIGEgY2xpZW50IGtlZXBzIGEgY2xvbmUgb2YgdGhpcyBoYW5kbGUuCisgICAgICovCisgICAgY29uc3QgQzJIYW5kbGUgKmhhbmRsZSgpIGNvbnN0OworCisgICAgLyoqCisgICAgICogUmV0dXJucyB0aGUgYWxsb2NhdG9yJ3MgSUQgdGhhdCBjcmVhdGVkIHRoZSB1bmRlcmx5aW5nIGFsbG9jYXRpb24gZm9yIHRoaXMgYmxvY2suIFRoaXMKKyAgICAgKiBwcm92aWRlcyB0aGUgY29udGV4dCBmb3IgdW5kZXJzdGFuZGluZyB0aGUgaGFuZGxlLgorICAgICAqLworICAgIEMyQWxsb2NhdG9yOjppZF90IGdldEFsbG9jYXRvcklkKCkgY29uc3Q7CisKK3Byb3RlY3RlZDoKKyAgICBjbGFzcyBJbXBsOworICAgIEMyQmxvY2syRChzdGQ6OnNoYXJlZF9wdHI8SW1wbD4gaW1wbCwgY29uc3QgX0MyUGxhbmFyU2VjdGlvbkFzcGVjdCAmc2VjdGlvbik7CisKKyAgICBmcmllbmQgc3RydWN0IF9DMkJsb2NrRmFjdG9yeTsKKyAgICBzdGQ6OnNoYXJlZF9wdHI8SW1wbD4gbUltcGw7Cit9OworCisvKioKKyAqIEdyYXBoaWMgdmlldyBwcm92aWRlcyByZWFkIG9yIHJlYWQtd3JpdGUgYWNjZXNzIGZvciBhIGdyYXBoaWMgYmxvY2suCisgKgorICogVGhpcyBjbGFzcyBpcyBjb3BpYWJsZS4KKyAqCisgKiBcbm90ZSBEdWUgdG8gdGhlIHN1YnNhbXBsaW5nIG9mIGdyYXBoaWMgYnVmZmVycywgYSByZWFkIHZpZXcgbXVzdCBzdGlsbCBjb250YWluIGEgY3JvcCByZWN0YW5nbGUKKyAqIHRvIGVuc3VyZSBzdWJzYW1wbGluZyBpcyBmb2xsb3dlZC4gVGhpcyByZXN1bHRzIGluIG5lYXJseSBpZGVudGljYWwgaW50ZXJmYWNlIGJldHdlZW4gcmVhZCBhbmQKKyAqIHdyaXRlIHZpZXdzLCBzbyBDMkdyYXBoaWNWaWV3IGNhbiBlbmNvbXBhc3MgYm90aCBvZiB0aGVtLgorICovCitjbGFzcyBDMkdyYXBoaWNWaWV3IDogcHVibGljIF9DMkVkaXRhYmxlUGxhbmFyU2VjdGlvbkFzcGVjdCB7CitwdWJsaWM6CisgICAgLyoqCisgICAgICogXHJldHVybiBhcnJheSBvZiBwb2ludGVycyAob2YgbGF5b3V0KCkubnVtUGxhbmVzIGVsZW1lbnRzKSB0byB0aGUgc3RhcnQgb2YgdGhlIHBsYW5lcyBvcgorICAgICAqIG51bGxwdHIgb24gZXJyb3IuIFJlZ2FyZGxlc3Mgb2YgY3JvcCByZWN0LCB0aGV5IGFsd2F5cyBwb2ludCB0byB0aGUgdG9wLWxlZnQgY29ybmVyIG9mIGVhY2gKKyAgICAgKiBwbGFuZS4gQWNjZXNzIG91dHNpZGUgb2YgdGhlIGNyb3AgcmVjdCByZXN1bHRzIGluIGFuIHVuZGVmaW5lZCBiZWhhdmlvci4KKyAgICAgKi8KKyAgICBjb25zdCB1aW50OF90ICpjb25zdCAqZGF0YSgpIGNvbnN0OworCisgICAgLyoqCisgICAgICogXHJldHVybiBhcnJheSBvZiBwb2ludGVycyAob2YgbGF5b3V0KCkubnVtUGxhbmVzIGVsZW1lbnRzKSB0byB0aGUgc3RhcnQgb2YgdGhlIHBsYW5lcyBvcgorICAgICAqIG51bGxwdHIgb24gZXJyb3IuIFJlZ2FyZGxlc3Mgb2YgY3JvcCByZWN0LCB0aGV5IGFsd2F5cyBwb2ludCB0byB0aGUgdG9wLWxlZnQgY29ybmVyIG9mIGVhY2gKKyAgICAgKiBwbGFuZS4gQWNjZXNzIG91dHNpZGUgb2YgdGhlIGNyb3AgcmVjdCByZXN1bHRzIGluIGFuIHVuZGVmaW5lZCBiZWhhdmlvci4KKyAgICAgKi8KKyAgICB1aW50OF90ICpjb25zdCAqZGF0YSgpOworCisgICAgLyoqCisgICAgICogXHJldHVybiBsYXlvdXQgb2YgdGhlIGdyYXBoaWMgYmxvY2sgdG8gaW50ZXJwcmV0IHRoZSByZXR1cm5lZCBkYXRhLgorICAgICAqLworICAgIGNvbnN0IEMyUGxhbmFyTGF5b3V0IGxheW91dCgpIGNvbnN0OworCisgICAgLyoqCisgICAgICogUmV0dXJucyBhIHNlY3Rpb24gb2YgdGhpcyB2aWV3LgorICAgICAqCisgICAgICogXHBhcmFtIHJlY3QgICAgdGhlIGRpbWVuc2lvbiBvZiB0aGUgc2VjdGlvbi4gXG5vdGUgVGhpcyBpcyBjbGFtcGVkIHRvIHRoZSBjcm9wIG9mIHRoaXMgdmlldy4KKyAgICAgKgorICAgICAqIFxyZXR1cm4gYSByZWFkIHZpZXcgY29udGFpbmluZyB0aGUgcmVxdWVzdGVkIHNlY3Rpb24gb2YgdGhpcyB2aWV3CisgICAgICovCisgICAgY29uc3QgQzJHcmFwaGljVmlldyBzdWJWaWV3KGNvbnN0IEMyUmVjdCAmcmVjdCkgY29uc3Q7CisgICAgQzJHcmFwaGljVmlldyBzdWJWaWV3KGNvbnN0IEMyUmVjdCAmcmVjdCk7CisKKyAgICAvKioKKyAgICAgKiBccmV0dXJuIGVycm9yIGR1cmluZyB0aGUgY3JlYXRpb24vbWFwcGluZyBvZiB0aGlzIHZpZXcuCisgICAgICovCisgICAgYzJfc3RhdHVzX3QgZXJyb3IoKSBjb25zdDsKKworcHJvdGVjdGVkOgorICAgIGNsYXNzIEltcGw7CisgICAgQzJHcmFwaGljVmlldyhzdGQ6OnNoYXJlZF9wdHI8SW1wbD4gaW1wbCwgY29uc3QgX0MyUGxhbmFyU2VjdGlvbkFzcGVjdCAmc2VjdGlvbik7CisgICAgZXhwbGljaXQgQzJHcmFwaGljVmlldyhjMl9zdGF0dXNfdCBlcnJvcik7CisKK3ByaXZhdGU6CisgICAgZnJpZW5kIHN0cnVjdCBfQzJCbG9ja0ZhY3Rvcnk7CisgICAgc3RkOjpzaGFyZWRfcHRyPEltcGw+IG1JbXBsOworfTsKKworLyoqCisgKiBBIGNvbnN0YW50IChyZWFkLW9ubHkpIGdyYXBoaWMgYmxvY2sgKHBvcnRpb24gb2YgYW4gYWxsb2NhdGlvbikgd2l0aCBhbiBhY3F1aXJlIGZlbmNlLgorICogQmxvY2tzIGFyZSB1bm1hcHBlZCB3aGVuIGNyZWF0ZWQsIGFuZCBjYW4gYmUgbWFwcGVkIGludG8gYSByZWFkIHZpZXcgb24gZGVtYW5kLgorICoKKyAqIFRoaXMgY2xhc3MgaXMgY29waWFibGUgYW5kIGNvbnRhaW5zIGEgcmVmZXJlbmNlIHRvIHRoZSBhbGxvY2F0aW9uIHRoYXQgaXQgaXMgYmFzZWQgb24uCisgKi8KK2NsYXNzIEMyQ29uc3RHcmFwaGljQmxvY2sgOiBwdWJsaWMgQzJCbG9jazJEIHsKK3B1YmxpYzoKKyAgICAvKioKKyAgICAgKiBNYXBzIHRoaXMgYmxvY2sgaW50byBtZW1vcnkgYW5kIHJldHVybnMgYSByZWFkIHZpZXcgZm9yIGl0LgorICAgICAqCisgICAgICogXHJldHVybiBhIHJlYWQgdmlldyBmb3IgdGhpcyBibG9jay4KKyAgICAgKi8KKyAgICBDMkFjcXVpcmFibGU8Y29uc3QgQzJHcmFwaGljVmlldz4gbWFwKCkgY29uc3Q7CisKKyAgICAvKioKKyAgICAgKiBSZXR1cm5zIGEgc2VjdGlvbiBvZiB0aGlzIGJsb2NrLgorICAgICAqCisgICAgICogXHBhcmFtIHJlY3QgICAgdGhlIGNvb3JkaW5hdGVzIG9mIHRoZSBzZWN0aW9uLiBcbm90ZSBUaGlzIGlzIGNsYW1wZWQgdG8gdGhlIGNyb3AgcmVjdGFuZ2xlIG9mCisgICAgICogICAgICAgICAgICAgIHRoaXMgYmxvY2suCisgICAgICoKKyAgICAgKiBccmV0dXJuIGEgY29uc3RhbnQgZ3JhcGhpYyBibG9jayBjb250YWluaW5nIGEgcG9ydGlvbiBvZiB0aGlzIGJsb2NrCisgICAgICovCisgICAgQzJDb25zdEdyYXBoaWNCbG9jayBzdWJCbG9jayhjb25zdCBDMlJlY3QgJnJlY3QpIGNvbnN0OworCisgICAgLyoqCisgICAgICogUmV0dXJucyB0aGUgYWNxdWlyZSBmZW5jZSBmb3IgdGhpcyBibG9jay4KKyAgICAgKgorICAgICAqIFxyZXR1cm4gYSBmZW5jZSB0aGF0IG11c3QgYmUgd2FpdGVkIG9uIGJlZm9yZSByZWFkaW5nIHRoZSBibG9jay4KKyAgICAgKi8KKyAgICBDMkZlbmNlIGZlbmNlKCkgY29uc3QgeyByZXR1cm4gbUZlbmNlOyB9CisKK3Byb3RlY3RlZDoKKyAgICBDMkNvbnN0R3JhcGhpY0Jsb2NrKAorICAgICAgICAgICAgc3RkOjpzaGFyZWRfcHRyPEltcGw+IGltcGwsIGNvbnN0IF9DMlBsYW5hclNlY3Rpb25Bc3BlY3QgJnNlY3Rpb24sIEMyRmVuY2UgZmVuY2UpOworCitwcml2YXRlOgorICAgIGZyaWVuZCBzdHJ1Y3QgX0MyQmxvY2tGYWN0b3J5OworICAgIEMyRmVuY2UgbUZlbmNlOworfTsKKworLyoqCisgKiBHcmFwaGljIGJsb2NrIGlzIGEgd3JpdGVhYmxlIDJEIGJsb2NrLiBPbmNlIHdyaXR0ZW4sIGl0IGNhbiBiZSBzaGFyZWQgaW4gd2hvbGUgb3IgaW4gcGFydCB3aXRoCisgKiBjb25zdW1lcnMvcmVhZGVycyBhcyByZWFkLW9ubHkgY29uc3QgZ3JhcGhpYyBibG9jay4KKyAqLworY2xhc3MgQzJHcmFwaGljQmxvY2sgOiBwdWJsaWMgQzJCbG9jazJEIHsKK3B1YmxpYzoKKyAgICAvKioKKyAgICAgKiBNYXBzIHRoaXMgYmxvY2sgaW50byBtZW1vcnkgYW5kIHJldHVybnMgYSB3cml0ZSB2aWV3IGZvciBpdC4KKyAgICAgKgorICAgICAqIFxyZXR1cm4gYSB3cml0ZSB2aWV3IGZvciB0aGlzIGJsb2NrLgorICAgICAqLworICAgIEMyQWNxdWlyYWJsZTxDMkdyYXBoaWNWaWV3PiBtYXAoKTsKKworICAgIC8qKgorICAgICAqIENyZWF0ZXMgYSByZWFkLW9ubHkgY29uc3QgbGluZWFyIGJsb2NrIGZvciBhIHBvcnRpb24gb2YgdGhpcyBibG9jazsgb3B0aW9uYWxseSBwcm90ZWN0ZWQKKyAgICAgKiBieSBhbiBhY3F1aXJlIGZlbmNlLiBUaGVyZSBhcmUgdHdvIHdheXMgdG8gdXNlIHRoaXM6CisgICAgICoKKyAgICAgKiAxKSBzaGFyZSByZWFkeSBibG9jayBhZnRlciB3cml0aW5nIGRhdGEgaW50byB0aGUgYmxvY2suIEluIHRoaXMgY2FzZSBubyBmZW5jZSBzaGFsbCBiZQorICAgICAqICAgIHN1cHBsaWVkLCBhbmQgdGhlIGJsb2NrIHNoYWxsIG5vdCBiZSBtb2RpZmllZCBhZnRlciBjYWxsaW5nIHRoaXMgbWV0aG9kLgorICAgICAqIDIpIHNoYXJlIGJsb2NrIG1ldGFkYXRhIGJlZm9yZSBhY3R1YWxseSAoZmluaXNoaW5nKSB3cml0aW5nIHRoZSBkYXRhIGludG8gdGhlIGJsb2NrLiBJbgorICAgICAqICAgIHRoaXMgY2FzZSBhIGZlbmNlIG11c3QgYmUgc3VwcGxpZWQgdGhhdCB3aWxsIGJlIHRyaWdnZXJlZCB3aGVuIHRoZSBkYXRhIGlzIHdyaXR0ZW4uCisgICAgICogICAgVGhlIGJsb2NrIHNoYWxsIGJlIG1vZGlmaWVkIG9ubHkgdW50aWwgZmlyaW5nIHRoZSBldmVudCBmb3IgdGhlIGZlbmNlLgorICAgICAqLworICAgIEMyQ29uc3RHcmFwaGljQmxvY2sgc2hhcmUoY29uc3QgQzJSZWN0ICZjcm9wLCBDMkZlbmNlIGZlbmNlKTsKKworcHJvdGVjdGVkOgorICAgIEMyR3JhcGhpY0Jsb2NrKHN0ZDo6c2hhcmVkX3B0cjxJbXBsPiBpbXBsLCBjb25zdCBfQzJQbGFuYXJTZWN0aW9uQXNwZWN0ICZzZWN0aW9uKTsKKworICAgIGZyaWVuZCBzdHJ1Y3QgX0MyQmxvY2tGYWN0b3J5OworfTsKKworLy8vIEB9CisKKy8vLyBcZGVmZ3JvdXAgYnVmZmVyX29uaiBCdWZmZXIgb2JqZWN0cworLy8vIEB7CisKKy8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLy8gIEJVRkZFUlMKKy8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCisvLy8gXHRvZG86IERvIHdlIHN0aWxsIG5lZWQgdGhpcz8KKy8vLworLy8gVGhlcmUgYXJlIDIga2luZHMgb2YgYnVmZmVyczogbGluZWFyIG9yIGdyYXBoaWMuIExpbmVhciBidWZmZXJzIGNhbiBjb250YWluIGEgc2luZ2xlIGJsb2NrLCBvcgorLy8gYSBsaXN0IG9mIGJsb2NrcyAoTElORUFSX0NIVU5LUykuIFN1cHBvcnQgZm9yIGxpc3Qgb2YgYmxvY2tzIGlzIG9wdGlvbmFsLCBhbmQgY2FuIGFsbG93IGNvbnN1bWluZworLy8gZGF0YSBmcm9tIGNpcmN1bGFyIGJ1ZmZlcnMgb3Igc2NhdHRlcmVkIGRhdGEgc291cmNlcyB3aXRob3V0IGV4dHJhIG1lbWNweS4gQ3VycmVudGx5LCBsaXN0IG9mCisvLyBncmFwaGljIGJsb2NrcyBpcyBub3Qgc3VwcG9ydGVkLgorCitjbGFzcyBDMkxpbmVhckJ1ZmZlcjsgICAvLyByZWFkLXdyaXRlIGJ1ZmZlcgorY2xhc3MgQzJHcmFwaGljQnVmZmVyOyAgLy8gcmVhZC13cml0ZSBidWZmZXIKK2NsYXNzIEMyTGluZWFyQ2h1bmtzQnVmZmVyOworCisvKioKKyAqIEMyQnVmZmVyRGF0YTogdGhlIG1haW4sIG5vbi1tZXRhIGRhdGEgb2YgYSBidWZmZXIuIEEgYnVmZmVyIGNhbiBjb250YWluIGVpdGhlciBsaW5lYXIgYmxvY2tzCisgKiBvciBncmFwaGljIGJsb2NrcywgYW5kIGNhbiBjb250YWluIGVpdGhlciBhIHNpbmdsZSBibG9jayBvciBtdWx0aXBsZSBibG9ja3MuIFRoaXMgaXMgZGV0ZXJtaW5lZAorICogYnkgaXRzIHR5cGUuCisgKi8KK2NsYXNzIEMyQnVmZmVyRGF0YSB7CitwdWJsaWM6CisgICAgLyoqCisgICAgICogIFRoZSB0eXBlIG9mIGJ1ZmZlciBkYXRhLgorICAgICAqLworICAgIGVudW0gdHlwZV90IDogdWludDMyX3QgeworICAgICAgICBJTlZBTElELCAgICAgICAgICAgIC8vLzwgaW52YWxpZCBidWZmZXIgdHlwZS4gRG8gbm90IHVzZS4KKyAgICAgICAgTElORUFSLCAgICAgICAgICAgICAvLy88IHRoZSBidWZmZXIgY29udGFpbnMgYSBzaW5nbGUgbGluZWFyIGJsb2NrCisgICAgICAgIExJTkVBUl9DSFVOS1MsICAgICAgLy8vPCB0aGUgYnVmZmVyIGNvbnRhaW5zIG9uZSBvciBtb3JlIGxpbmVhciBibG9ja3MKKyAgICAgICAgR1JBUEhJQywgICAgICAgICAgICAvLy88IHRoZSBidWZmZXIgY29udGFpbnMgYSBzaW5nbGUgZ3JhcGhpYyBibG9jaworICAgICAgICBHUkFQSElDX0NIVU5LUywgICAgIC8vLzwgdGhlIGJ1ZmZlciBjb250YWlucyBvbmUgb2YgbW9yZSBncmFwaGljIGJsb2NrcworICAgIH07CisgICAgdHlwZWRlZiB0eXBlX3QgVHlwZTsgLy8gZGVwcmVjYXRlZAorCisgICAgLyoqCisgICAgICogR2V0cyB0aGUgdHlwZSBvZiB0aGlzIGJ1ZmZlciAoZGF0YSkuCisgICAgICogXHJldHVybiB0aGUgdHlwZSBvZiB0aGlzIGJ1ZmZlciBkYXRhLgorICAgICAqLworICAgIHR5cGVfdCB0eXBlKCkgY29uc3Q7CisKKyAgICAvKioKKyAgICAgKiBHZXRzIHRoZSBsaW5lYXIgYmxvY2tzIG9mIHRoaXMgYnVmZmVyLgorICAgICAqIFxyZXR1cm4gYSBjb25zdGFudCBsaXN0IG9mIGNvbnN0IGxpbmVhciBibG9ja3Mgb2YgdGhpcyBidWZmZXIuCisgICAgICogXHJldHZhbCBlbXB0eSBsaXN0IGlmIHRoaXMgYnVmZmVyIGRvZXMgbm90IGNvbnRhaW4gbGluZWFyIGJsb2NrKHMpLgorICAgICAqLworICAgIGNvbnN0IHN0ZDo6dmVjdG9yPEMyQ29uc3RMaW5lYXJCbG9jaz4gbGluZWFyQmxvY2tzKCkgY29uc3Q7CisKKyAgICAvKioKKyAgICAgKiBHZXRzIHRoZSBncmFwaGljIGJsb2NrcyBvZiB0aGlzIGJ1ZmZlci4KKyAgICAgKiBccmV0dXJuIGEgY29uc3RhbnQgbGlzdCBvZiBjb25zdCBncmFwaGljIGJsb2NrcyBvZiB0aGlzIGJ1ZmZlci4KKyAgICAgKiBccmV0dmFsIGVtcHR5IGxpc3QgaWYgdGhpcyBidWZmZXIgZG9lcyBub3QgY29udGFpbiBncmFwaGljIGJsb2NrKHMpLgorICAgICAqLworICAgIGNvbnN0IHN0ZDo6dmVjdG9yPEMyQ29uc3RHcmFwaGljQmxvY2s+IGdyYXBoaWNCbG9ja3MoKSBjb25zdDsKKworcHJpdmF0ZToKKyAgICBjbGFzcyBJbXBsOworICAgIHN0ZDo6c2hhcmVkX3B0cjxJbXBsPiBtSW1wbDsKKworcHJvdGVjdGVkOgorICAgIC8vIG5vIHB1YmxpYyBjb25zdHJ1Y3RvcgorICAgIGV4cGxpY2l0IEMyQnVmZmVyRGF0YShjb25zdCBzdGQ6OnZlY3RvcjxDMkNvbnN0TGluZWFyQmxvY2s+ICZibG9ja3MpOworICAgIGV4cGxpY2l0IEMyQnVmZmVyRGF0YShjb25zdCBzdGQ6OnZlY3RvcjxDMkNvbnN0R3JhcGhpY0Jsb2NrPiAmYmxvY2tzKTsKK307CisKKy8qKgorICogQzJCdWZmZXI6IGJ1ZmZlciBiYXNlIGNsYXNzLiBUaGVzZSBhcmUgYWx3YXlzIHVzZWQgYXMgc2hhcmVkX3B0cnMuIFRob3VnaCB0aGUgdW5kZXJseWluZyBidWZmZXIKKyAqIG9iamVjdHMgKG5hdGl2ZSBidWZmZXJzLCBpb24gYnVmZmVycywgb3IgZG1hYnVmcykgYXJlIHJlZmVyZW5jZS1jb3VudGVkIGJ5IHRoZSBzeXN0ZW0sCisgKiBDMkJ1ZmZlcnMgaG9sZCBvbmx5IGEgc2luZ2xlIHJlZmVyZW5jZS4KKyAqCisgKiBUaGVzZSBvYmplY3RzIGNhbm5vdCBiZSB1c2VkIG9uIHRoZSBzdGFjay4KKyAqLworY2xhc3MgQzJCdWZmZXIgeworcHVibGljOgorICAgIC8qKgorICAgICAqIEdldHMgdGhlIGJ1ZmZlcidzIGRhdGEuCisgICAgICoKKyAgICAgKiBccmV0dXJuIHRoZSBidWZmZXIncyBkYXRhLgorICAgICAqLworICAgIGNvbnN0IEMyQnVmZmVyRGF0YSBkYXRhKCkgY29uc3Q7CisKKyAgICAvKioKKyAgICAgKiBUaGVzZSB3aWxsIHN0aWxsIHdvcmsgaWYgdXNlZCBpbiBvbkRlYXRoTm90aWZ5LgorICAgICAqLworI2lmIDAKKyAgICBpbmxpbmUgc3RkOjpzaGFyZWRfcHRyPEMyTGluZWFyQnVmZmVyPiBhc0xpbmVhckJ1ZmZlcigpIGNvbnN0IHsKKyAgICAgICAgcmV0dXJuIG1UeXBlID09IExJTkVBUiA/IHN0ZDo6c2hhcmVkX3B0cjo6cmVpbnRlcnByZXRfY2FzdDxDMkxpbmVhckJ1ZmZlcj4odGhpcykgOiBudWxscHRyOworICAgIH0KKworICAgIGlubGluZSBzdGQ6OnNoYXJlZF9wdHI8QzJHcmFwaGljQnVmZmVyPiBhc0dyYXBoaWNCdWZmZXIoKSBjb25zdCB7CisgICAgICAgIHJldHVybiBtVHlwZSA9PSBHUkFQSElDID8gc3RkOjpzaGFyZWRfcHRyOjpyZWludGVycHJldF9jYXN0PEMyR3JhcGhpY0J1ZmZlcj4odGhpcykgOiBudWxscHRyOworICAgIH0KKworICAgIGlubGluZSBzdGQ6OnNoYXJlZF9wdHI8QzJDaXJjdWxhckJ1ZmZlcj4gYXNDaXJjdWxhckJ1ZmZlcigpIGNvbnN0IHsKKyAgICAgICAgcmV0dXJuIG1UeXBlID09IENJUkNVTEFSID8gc3RkOjpzaGFyZWRfcHRyOjpyZWludGVycHJldF9jYXN0PEMyQ2lyY3VsYXJCdWZmZXI+KHRoaXMpIDogbnVsbHB0cjsKKyAgICB9CisjZW5kaWYKKworICAgIC8vL0BuYW1lIFByZS1kZXN0cm95IG5vdGlmaWNhdGlvbiBoYW5kbGluZworICAgIC8vL0B7CisKKyAgICAvKioKKyAgICAgKiBSZWdpc3RlciBmb3Igbm90aWZpY2F0aW9uIGp1c3QgcHJpb3IgdG8gdGhlIGRlc3RydWN0aW9uIG9mIHRoaXMgb2JqZWN0LgorICAgICAqLworICAgIHR5cGVkZWYgdm9pZCAoKk9uRGVzdHJveU5vdGlmeSkgKGNvbnN0IEMyQnVmZmVyICpidWYsIHZvaWQgKmFyZyk7CisKKyAgICAvKioKKyAgICAgKiBSZWdpc3RlcnMgZm9yIGEgcHJlLWRlc3Ryb3kgbm90aWZpY2F0aW9uLiBUaGlzIGlzIGNhbGxlZCBqdXN0IHByaW9yIHRvIHRoZSBkZXN0cnVjdGlvbiBvZgorICAgICAqIHRoaXMgYnVmZmVyICh3aGVuIHRoaXMgYnVmZmVyIGlzIG5vIGxvbmdlciB2YWxpZC4pCisgICAgICoKKyAgICAgKiBccGFyYW0gb25EZXN0cm95Tm90aWZ5ICAgdGhlIG5vdGlmaWNhdGlvbiBjYWxsYmFjaworICAgICAqIFxwYXJhbSBhcmcgICAgICAgICAgICAgICBhbiBhcmJpdHJhcnkgcGFyYW1ldGVyIHBhc3NlZCB0byB0aGUgY2FsbGJhY2sKKyAgICAgKgorICAgICAqIFxyZXR2YWwgQzJfT0sgICAgICAgIHRoZSByZWdpc3RyYXRpb24gd2FzIHN1Y2Nlc3NmdWwuCisgICAgICogXHJldHZhbCBDMl9EVVBMSUNBVEUgYSBub3RpZmljYXRpb24gd2FzIGFscmVhZHkgcmVnaXN0ZXJlZCBmb3IgdGhpcyBjYWxsYmFjayBhbmQgYXJndW1lbnQKKyAgICAgKiBccmV0dmFsIEMyX05PX01FTU9SWSBub3QgZW5vdWdoIG1lbW9yeSB0byByZWdpc3RlciBmb3IgdGhpcyBjYWxsYmFjaworICAgICAqIFxyZXR2YWwgQzJfQ09SUlVQVEVEIGFuIHVua25vd24gZXJyb3IgcHJldmVudGVkIHRoZSByZWdpc3RyYXRpb24gKHVuZXhwZWN0ZWQpCisgICAgICovCisgICAgYzJfc3RhdHVzX3QgcmVnaXN0ZXJPbkRlc3Ryb3lOb3RpZnkoT25EZXN0cm95Tm90aWZ5IG9uRGVzdHJveU5vdGlmeSwgdm9pZCAqYXJnID0gbnVsbHB0cik7CisKKyAgICAvKioKKyAgICAgKiBVbnJlZ2lzdGVycyBhIHByZXZpb3VzbHkgcmVnaXN0ZXJlZCBwcmUtZGVzdHJveSBub3RpZmljYXRpb24uCisgICAgICoKKyAgICAgKiBccGFyYW0gb25EZXN0cm95Tm90aWZ5ICAgdGhlIG5vdGlmaWNhdGlvbiBjYWxsYmFjaworICAgICAqIFxwYXJhbSBhcmcgICAgICAgICAgICAgICBhbiBhcmJpdHJhcnkgcGFyYW1ldGVyIHBhc3NlZCB0byB0aGUgY2FsbGJhY2sKKyAgICAgKgorICAgICAqIFxyZXR2YWwgQzJfT0sgICAgICAgIHRoZSB1bnJlZ2lzdHJhdGlvbiB3YXMgc3VjY2Vzc2Z1bC4KKyAgICAgKiBccmV0dmFsIEMyX05PVF9GT1VORCB0aGUgbm90aWZpY2F0aW9uIHdhcyBub3QgZm91bmQKKyAgICAgKiBccmV0dmFsIEMyX0NPUlJVUFRFRCBhbiB1bmtub3duIGVycm9yIHByZXZlbnRlZCB0aGUgcmVnaXN0cmF0aW9uICh1bmV4cGVjdGVkKQorICAgICAqLworICAgIGMyX3N0YXR1c190IHVucmVnaXN0ZXJPbkRlc3Ryb3lOb3RpZnkoT25EZXN0cm95Tm90aWZ5IG9uRGVzdHJveU5vdGlmeSwgdm9pZCAqYXJnID0gbnVsbHB0cik7CisKKyAgICAvLy9AfQorCisgICAgdmlydHVhbCB+QzJCdWZmZXIoKSA9IGRlZmF1bHQ7CisKKyAgICAvLy9AbmFtZSBCdWZmZXItc3BlY2lmaWMgYXJiaXRyYXJ5IG1ldGFkYXRhIGhhbmRsaW5nCisgICAgLy8vQHsKKworICAgIC8qKgorICAgICAqIEdldHMgdGhlIGxpc3Qgb2YgbWV0YWRhdGEgYXNzb2NpYXRlZCB3aXRoIHRoaXMgYnVmZmVyLgorICAgICAqCisgICAgICogXHJldHVybiBhIGNvbnN0YW50IGxpc3Qgb2YgaW5mbyBvYmplY3RzIGFzc29jaWF0ZWQgd2l0aCB0aGlzIGJ1ZmZlci4KKyAgICAgKi8KKyAgICBjb25zdCBzdGQ6OnZlY3RvcjxzdGQ6OnNoYXJlZF9wdHI8Y29uc3QgQzJJbmZvPj4gaW5mbygpIGNvbnN0OworCisgICAgLyoqCisgICAgICogQXR0YWNoZXMgKG9yIHVwZGF0ZXMpIGFuIChleGlzdGluZykgbWV0YWRhdGEgZm9yIHRoaXMgYnVmZmVyLgorICAgICAqIElmIHRoZSBtZXRhZGF0YSBpcyBzdHJlYW0gc3BlY2lmaWMsIHRoZSBzdHJlYW0gaW5mb3JtYXRpb24gd2lsbCBiZSByZXNldC4KKyAgICAgKgorICAgICAqIFxwYXJhbSBpbmZvIE1ldGFkYXRhIHRvIHVwZGF0ZQorICAgICAqCisgICAgICogXHJldHZhbCBDMl9PSyAgICAgICAgdGhlIG1ldGFkYXRhIHdhcyBzdWNjZXNzZnVsbHkgYXR0YWNoZWQvdXBkYXRlZC4KKyAgICAgKiBccmV0dmFsIEMyX05PX01FTU9SWSBub3QgZW5vdWdoIG1lbW9yeSB0byBhdHRhY2ggdGhlIG1ldGFkYXRhICh0aGlzIHJldHVybiB2YWx1ZSBpcyBub3QKKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICB1c2VkIGlmIHRoZSBzYW1lIGtpbmQgb2YgbWV0YWRhdGEgaXMgYWxyZWFkeSBhdHRhY2hlZCB0byB0aGUgYnVmZmVyKS4KKyAgICAgKi8KKyAgICBjMl9zdGF0dXNfdCBzZXRJbmZvKGNvbnN0IHN0ZDo6c2hhcmVkX3B0cjxDMkluZm8+ICZpbmZvKTsKKworICAgIC8qKgorICAgICAqIENoZWNrcyBpZiB0aGVyZSBpcyBhIGNlcnRhaW4gdHlwZSBvZiBtZXRhZGF0YSBhdHRhY2hlZCB0byB0aGlzIGJ1ZmZlci4KKyAgICAgKgorICAgICAqIFxwYXJhbSBpbmRleCB0aGUgcGFyYW1ldGVyIHR5cGUgb2YgdGhlIG1ldGFkYXRhCisgICAgICoKKyAgICAgKiBccmV0dXJuIHRydWUgaWZmIHRoZXJlIGlzIGEgbWV0YWRhdGEgd2l0aCB0aGUgcGFyYW1ldGVyIHR5cGUgYXR0YWNoZWQgdG8gdGhpcyBidWZmZXIuCisgICAgICovCisgICAgYm9vbCBoYXNJbmZvKEMyUGFyYW06OlR5cGUgaW5kZXgpIGNvbnN0OworCisgICAgLyoqCisgICAgICogQ2hlY2tzIGlmIHRoZXJlIGlzIGEgY2VydGFpbiB0eXBlIG9mIG1ldGFkYXRhIGF0dGFjaGVkIHRvIHRoaXMgYnVmZmVyLCBhbmQgcmV0dXJucyBhCisgICAgICogc2hhcmVkIHBvaW50ZXIgdG8gaXQgaWYgdGhlcmUgaXMuIFJldHVybnMgYW4gZW1wdHkgc2hhcmVkIHBvaW50ZXIgb2JqZWN0IChudWxscHRyKSBpZiB0aGVyZQorICAgICAqIGlzIG5vdC4KKyAgICAgKgorICAgICAqIFxwYXJhbSBpbmRleCB0aGUgcGFyYW1ldGVyIHR5cGUgb2YgdGhlIG1ldGFkYXRhCisgICAgICoKKyAgICAgKiBccmV0dXJuIHNoYXJlZCBwb2ludGVyIHRvIHRoZSBtZXRhZGF0YS4KKyAgICAgKi8KKyAgICBzdGQ6OnNoYXJlZF9wdHI8Y29uc3QgQzJJbmZvPiBnZXRJbmZvKEMyUGFyYW06OlR5cGUgaW5kZXgpIGNvbnN0OworCisgICAgLyoqCisgICAgICogUmVtb3ZlcyBhIG1ldGFkYXRhIGZyb20gdGhlIGJ1ZmZlci4KKyAgICAgKi8KKyAgICBzdGQ6OnNoYXJlZF9wdHI8QzJJbmZvPiByZW1vdmVJbmZvKEMyUGFyYW06OlR5cGUgaW5kZXgpOworICAgIC8vL0B9CisKKyAgICAvKioKKyAgICAgKiBDcmVhdGVzIGEgYnVmZmVyIGNvbnRhaW5pbmcgYSBzaW5nbGUgbGluZWFyIGJsb2NrLgorICAgICAqCisgICAgICogXHBhcmFtIGJsb2NrIHRoZSBjb250ZW50IG9mIHRoZSBidWZmZXIuCisgICAgICoKKyAgICAgKiBccmV0dXJuIHNoYXJlZCBwb2ludGVyIHRvIHRoZSBjcmVhdGVkIGJ1ZmZlci4KKyAgICAgKi8KKyAgICBzdGF0aWMgc3RkOjpzaGFyZWRfcHRyPEMyQnVmZmVyPiBDcmVhdGVMaW5lYXJCdWZmZXIoY29uc3QgQzJDb25zdExpbmVhckJsb2NrICZibG9jayk7CisKKyAgICAvKioKKyAgICAgKiBDcmVhdGVzIGEgYnVmZmVyIGNvbnRhaW5pbmcgYSBzaW5nbGUgZ3JhcGhpYyBibG9jay4KKyAgICAgKgorICAgICAqIFxwYXJhbSBibG9jayB0aGUgY29udGVudCBvZiB0aGUgYnVmZmVyLgorICAgICAqCisgICAgICogXHJldHVybiBzaGFyZWQgcG9pbnRlciB0byB0aGUgY3JlYXRlZCBidWZmZXIuCisgICAgICovCisgICAgc3RhdGljIHN0ZDo6c2hhcmVkX3B0cjxDMkJ1ZmZlcj4gQ3JlYXRlR3JhcGhpY0J1ZmZlcihjb25zdCBDMkNvbnN0R3JhcGhpY0Jsb2NrICZibG9jayk7CisKKworCitwcm90ZWN0ZWQ6CisgICAgLy8gbm8gcHVibGljIGNvbnN0cnVjdG9yCisgICAgZXhwbGljaXQgQzJCdWZmZXIoY29uc3Qgc3RkOjp2ZWN0b3I8QzJDb25zdExpbmVhckJsb2NrPiAmYmxvY2tzKTsKKyAgICBleHBsaWNpdCBDMkJ1ZmZlcihjb25zdCBzdGQ6OnZlY3RvcjxDMkNvbnN0R3JhcGhpY0Jsb2NrPiAmYmxvY2tzKTsKKworcHJpdmF0ZToKKyAgICBjbGFzcyBJbXBsOworICAgIHN0ZDo6c2hhcmVkX3B0cjxJbXBsPiBtSW1wbDsKKy8vICAgIFR5cGUgX21UeXBlOworfTsKKworLyoqCisgKiBBbiBleHRlbnNpb24gb2YgQzJJbmZvIG9iamVjdHMgdGhhdCBjYW4gY29udGFpbiBhcmJpdHJhcnkgYnVmZmVyIGRhdGEuCisgKgorICogXG5vdGUgVGhpcyBvYmplY3QgaXMgbm90IGRlc2NyaWJhYmxlIGFuZCBjb250YWlucyBvcGFxdWUgZGF0YS4KKyAqLworY2xhc3MgQzJJbmZvQnVmZmVyIHsKK3B1YmxpYzoKKyAgICAvKioKKyAgICAgKiBHZXRzIHRoZSBpbmRleCBvZiB0aGlzIGluZm8gb2JqZWN0LgorICAgICAqCisgICAgICogXHJldHVybiB0aGUgcGFyYW1ldGVyIGluZGV4LgorICAgICAqLworICAgIGNvbnN0IEMyUGFyYW06OkluZGV4IGluZGV4KCkgY29uc3Q7CisKKyAgICAvKioKKyAgICAgKiBHZXRzIHRoZSBidWZmZXIncyBkYXRhLgorICAgICAqCisgICAgICogXHJldHVybiB0aGUgYnVmZmVyJ3MgZGF0YS4KKyAgICAgKi8KKyAgICBjb25zdCBDMkJ1ZmZlckRhdGEgZGF0YSgpIGNvbnN0OworfTsKKworLy8vIEB9CisKKy8vLyBcY29uZCBJTlRFUk5BTAorCisvLy8gXHRvZG8gVGhlc2UgYXJlIG5vIGxvbmdlciB1c2VkCisKKy8vLyBcYWRkdG9ncm91cCBsaW5lYXIKKy8vLyBAeworCisvKiogXGRlcHJlY2F0ZWQgKi8KK2NsYXNzIEMyTGluZWFyQnVmZmVyCisgICAgOiBwdWJsaWMgQzJCdWZmZXIsIHB1YmxpYyBfQzJMaW5lYXJSYW5nZUFzcGVjdCwKKyAgICAgIHB1YmxpYyBzdGQ6OmVuYWJsZV9zaGFyZWRfZnJvbV90aGlzPEMyTGluZWFyQnVmZmVyPiB7CitwdWJsaWM6CisgICAgLyoqIFx0b2RvIHdoYXQgaXMgdGhpcz8gKi8KKyAgICBjb25zdCBDMkhhbmRsZSAqaGFuZGxlKCkgY29uc3Q7CisKK3Byb3RlY3RlZDoKKyAgICBpbmxpbmUgQzJMaW5lYXJCdWZmZXIoY29uc3QgQzJDb25zdExpbmVhckJsb2NrICZibG9jayk7CisKK3ByaXZhdGU6CisgICAgY2xhc3MgSW1wbDsKKyAgICBJbXBsICptSW1wbDsKK307CisKK2NsYXNzIEMyUmVhZEN1cnNvcjsKKworY2xhc3MgQzJXcml0ZUN1cnNvciB7CitwdWJsaWM6CisgICAgdWludDMyX3QgcmVtYWluaW5nKCkgY29uc3Q7IC8vIHJlbWFpbmluZyBkYXRhIHRvIGJlIHJlYWQKKyAgICB2b2lkIGNvbW1pdCgpOyAvLyBjb21taXRzIHRoZSBjdXJyZW50IHBvc2l0aW9uLiBkaXNjYXJkIGRhdGEgYmVmb3JlIGN1cnJlbnQgcG9zaXRpb24KKyAgICB2b2lkIHJlc2V0KCkgY29uc3Q7ICAvLyByZXNldHMgcG9zaXRpb24gdG8gdGhlIGxhc3QgY29tbWl0dGVkIHBvc2l0aW9uCisgICAgLy8gc2xpY2VzIG9mZiBhdCBtb3N0IHxzaXplfCBieXRlcywgYW5kIG1vdmVzIGN1cnNvciBhaGVhZCBieSB0aGUgbnVtYmVyIG9mIGJ5dGVzCisgICAgLy8gc2xpY2VkIG9mZi4KKyAgICBDMlJlYWRDdXJzb3Igc2xpY2UodWludDMyX3Qgc2l6ZSkgY29uc3Q7CisgICAgLy8gc2xpY2VzIG9mZiBhdCBtb3N0IHxzaXplfCBieXRlcywgYW5kIG1vdmVzIGN1cnNvciBhaGVhZCBieSB0aGUgbnVtYmVyIG9mIGJ5dGVzCisgICAgLy8gc2xpY2VkIG9mZi4KKyAgICBDMldyaXRlQ3Vyc29yIHJlc2VydmUodWludDMyX3Qgc2l6ZSk7CisgICAgLy8gYm9vbCByZWFkKFQmKTsKKyAgICAvLyBib29sIHdyaXRlKFQmKTsKKyAgICBDMkZlbmNlIHdhaXRGb3JTcGFjZSh1aW50MzJfdCBzaXplKTsKK307CisKKy8vLyBAfQorCisvLy8gXGFkZHRvZ3JvdXAgZ3JhcGhpYworLy8vIEB7CisKK3N0cnVjdCBDMkNvbG9yU3BhY2UgeworLy9wdWJsaWM6CisgICAgZW51bSBTdGFuZGFyZCB7CisgICAgICAgIEJUNjAxLAorICAgICAgICBCVDcwOSwKKyAgICAgICAgQlQyMDIwLAorICAgICAgICAvLyBUT0RPCisgICAgfTsKKworICAgIGVudW0gUmFuZ2UgeworICAgICAgICBMSU1JVEVELAorICAgICAgICBGVUxMLAorICAgICAgICAvLyBUT0RPCisgICAgfTsKKworICAgIGVudW0gVHJhbnNmZXJGdW5jdGlvbiB7CisgICAgICAgIEJUNzA5VHJhbnNmZXIsCisgICAgICAgIEJUMjAyMFRyYW5zZmVyLAorICAgICAgICBIeWJyaWRMb2dHYW1tYTIsCisgICAgICAgIEh5YnJpZExvZ0dhbW1hNCwKKyAgICAgICAgLy8gVE9ETworICAgIH07Cit9OworCisvKiogXGRlcHJlY2F0ZWQgKi8KK2NsYXNzIEMyR3JhcGhpY0J1ZmZlciA6IHB1YmxpYyBDMkJ1ZmZlciB7CitwdWJsaWM6CisgICAgLy8gY29uc3RhbnQgYXR0cmlidXRlcworICAgIGlubGluZSB1aW50MzJfdCB3aWR0aCgpIGNvbnN0ICB7IHJldHVybiBtV2lkdGg7IH0KKyAgICBpbmxpbmUgdWludDMyX3QgaGVpZ2h0KCkgY29uc3QgeyByZXR1cm4gbUhlaWdodDsgfQorICAgIGlubGluZSB1aW50MzJfdCBmb3JtYXQoKSBjb25zdCB7IHJldHVybiBtRm9ybWF0OyB9CisgICAgaW5saW5lIGNvbnN0IEMyTWVtb3J5VXNhZ2UgdXNhZ2UoKSBjb25zdCB7IHJldHVybiBtVXNhZ2U7IH0KKworICAgIC8vIG1vZGlmaWFibGUgYXR0cmlidXRlcworCisKKyAgICB2aXJ0dWFsIGNvbnN0IEMyQ29sb3JTcGFjZSBjb2xvclNwYWNlKCkgY29uc3QgPSAwOworICAgIC8vIGJlc3QgZWZmb3J0CisgICAgdmlydHVhbCB2b2lkIHNldENvbG9yU3BhY2VfYmUoY29uc3QgQzJDb2xvclNwYWNlICZjb2xvclNwYWNlKSA9IDA7CisgICAgdmlydHVhbCBib29sIHNldENvbG9yU3BhY2UoY29uc3QgQzJDb2xvclNwYWNlICZjb2xvclNwYWNlKSA9IDA7CisKKyAgICBjb25zdCBDMkhhbmRsZSAqaGFuZGxlKCkgY29uc3Q7CisKK3Byb3RlY3RlZDoKKyAgICB1aW50MzJfdCBtV2lkdGg7CisgICAgdWludDMyX3QgbUhlaWdodDsKKyAgICB1aW50MzJfdCBtRm9ybWF0OworICAgIEMyTWVtb3J5VXNhZ2UgbVVzYWdlOworCisgICAgY2xhc3MgSW1wbDsKKyAgICBJbXBsICptSW1wbDsKK307CisKKy8vLyBAfQorCisvLy8gXGVuZGNvbmQKKworLy8vIEB9CisKKyNlbmRpZiAgLy8gQzJCVUZGRVJfSF8KZGlmZiAtLWdpdCBhL21lZGlhL2NvZGVjMi9jb3JlL2luY2x1ZGUvQzJCdWZmZXJCYXNlLmggYi9tZWRpYS9jb2RlYzIvY29yZS9pbmNsdWRlL0MyQnVmZmVyQmFzZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJiZDQ4ZjAKLS0tIC9kZXYvbnVsbAorKysgYi9tZWRpYS9jb2RlYzIvY29yZS9pbmNsdWRlL0MyQnVmZmVyQmFzZS5oCkBAIC0wLDAgKzEsOTQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworCisjaWZuZGVmIEMyQlVGRkVSX0JBU0VfSF8KKyNkZWZpbmUgQzJCVUZGRVJfQkFTRV9IXworCisvLy8gXGRlZmdyb3VwIGFsbG9jYXRvciBBbGxvY2F0aW9uIGFuZCBtZW1vcnkgcGxhY2VtZW50CisvLy8gQHsKKworLyoqCisgKiBCdWZmZXIvbWVtb3J5IHVzYWdlIGJpdHMuIFRoZXNlIHNoYWxsIGJlIHVzZWQgYnkgdGhlIGFsbG9jYXRvcnMgdG8gc2VsZWN0IG9wdGltYWwgbWVtb3J5IHR5cGUvCisgKiBwb29sIGFuZCBidWZmZXIgbGF5b3V0LiBVc2FnZSBiaXRzIGFyZSBjb25jZXB0dWFsbHkgc2VwYXJhdGVkIGludG8gcmVhZCBhbmQgd3JpdGUgdXNhZ2UsIHdoaWxlCisgKiB0aGUgYnVmZmVyIHVzZSBsaWZlLWN5Y2xlIGlzIHNlcGFyYXRlZCBpbnRvIHByb2R1Y2VycyAod3JpdGVycykgYW5kIGNvbnN1bWVycyAocmVhZGVycykuCisgKiBUaGVzZSB0d28gY29uY2VwdHMgYXJlIHJlbGF0ZWQgYnV0IG5vdCBlcXVpdmFsZW50OiBjb25zdW1lcnMgbWF5IG9ubHkgcmVhZCBidWZmZXJzIGFuZCBvbmx5CisgKiBwcm9kdWNlcnMgbWF5IHdyaXRlIHRvIGJ1ZmZlcnM7IG5vdGUsIGhvd2V2ZXIsIHRoYXQgYnVmZmVyIHByb2R1Y2VycyBtYXkgYWxzbyB3YW50IG9yIG5lZWQgdG8KKyAqIHJlYWQgdGhlIGJ1ZmZlcnMuCisgKgorICogUmVhZCBhbmQgd3JpdGUgYnVmZmVyIHVzYWdlIGJpdHMgc2hhbGwgYmUgb3ItZWQgdG8gYXJyaXZlIGF0IHRoZSBmdWxsIGJ1ZmZlciB1c2FnZS4gQWRtaXR0ZWRseSwKKyAqIHRoaXMgZG9lcyBub3QgYWNjb3VudCBmb3IgdGhlIGFtb3VudCBvZiByZWFkaW5nIGFuZCB3cml0aW5nIChlLmcuIGEgYnVmZmVyIG1heSBoYXZlIG9uZSBvciBtb3JlCisgKiByZWFkZXJzKTsgaG93ZXZlciwgdGhlIHByb3BlciBpbmZvcm1hdGlvbiBuZWNlc3NhcnkgdG8gcHJvcGVybHkgd2VpZ2ggdGhlIHZhcmlvdXMgdXNhZ2VzIHdvdWxkIGJlCisgKiB0aGUgYW1vdW50IG9mIGRhdGEgcmVhZC93cml0dGVuIGZvciBlYWNoIHVzYWdlIHR5cGUuIFRoaXMgd291bGQgcmVzdWx0IGluIGFuIGludGVnZXIgYXJyYXkgb2YKKyAqIHNpemUgNjQgKG9yIHRoZSBudW1iZXIgb2YgZGlzdGluY3QgdXNhZ2VzKSBmb3IgbWVtb3J5IHVzYWdlLCBhbmQgbGlrZWx5IHN1Y2ggZGV0YWlsZWQgaW5mb3JtYXRpb24KKyAqIHdvdWxkIG5vdCBhbHdheXMgYmUgYXZhaWxhYmxlLgorICoKKyAqIFRoYXQgcGxhdGZvcm0tYWdub3N0aWMgQ29kZWMgMi4wIEFQSSBvbmx5IGRlZmluZXMgdGhlIGJhcmUgbWluaW11bSB1c2FnZXMuIFBsYXRmb3JtcyBzaGFsbCBkZWZpbmUKKyAqIHVzYWdlIGJpdHMgdGhhdCBhcmUgYXBwcm9wcmlhdGUgZm9yIHRoZSBwbGF0Zm9ybS4KKyAqLworc3RydWN0IEMyTWVtb3J5VXNhZ2UgeworLy8gcHVibGljOgorICAgIC8qKgorICAgICAqIEJ1ZmZlciByZWFkIHVzYWdlLgorICAgICAqLworICAgIGVudW0gcmVhZF90IDogdWludDY0X3QgeworICAgICAgICAvKiogQnVmZmVyIGlzIHJlYWQgYnkgdGhlIENQVS4gKi8KKyAgICAgICAgQ1BVX1JFQUQgICAgICAgID0gMSA8PCAwLAorICAgICAgICAvKioKKyAgICAgICAgICogQnVmZmVyIHNoYWxsIG9ubHkgYmUgcmVhZCBieSB0cnVzdGVkIGhhcmR3YXJlLiBUaGUgZGVmaW5pdGlvbiBvZiB0cnVzdGVkIGhhcmR3YXJlIGlzCisgICAgICAgICAqIHBsYXRmb3JtIHNwZWNpZmljLCBidXQgdGhpcyBmbGFnIGlzIHJlc2VydmVkIHRvIHByZXZlbnQgbWFwcGluZyB0aGlzIGJsb2NrIGludG8gQ1BVCisgICAgICAgICAqIHJlYWRhYmxlIG1lbW9yeSByZXN1bHRpbmcgaW4gYnVzIGZhdWx0LiBUaGlzIGZsYWcgY2FuIGJlIHVzZWQgd2hlbiBidWZmZXIgYWNjZXNzIG11c3QgYmUKKyAgICAgICAgICogcHJvdGVjdGVkLgorICAgICAgICAgKi8KKyAgICAgICAgUkVBRF9QUk9URUNURUQgID0gMSA8PCAxLAorICAgIH07CisKKyAgICAvKioKKyAgICAgKiBCdWZmZXIgd3JpdGUgdXNhZ2UuCisgICAgICovCisgICAgZW51bSB3cml0ZV90IDogdWludDY0X3QgeworICAgICAgICAvKiogQnVmZmVyIGlzIHdyaXR0ZWQgdG8gYnkgdGhlIENQVS4gKi8KKyAgICAgICAgQ1BVX1dSSVRFICAgICAgICA9IDEgPDwgMiwKKyAgICAgICAgLyoqCisgICAgICAgICAqIEJ1ZmZlciBzaGFsbCBvbmx5IGJlIHdyaXR0ZW4gdG8gYnkgdHJ1c3RlZCBoYXJkd2FyZS4gVGhlIGRlZmluaXRpb24gb2YgdHJ1c3RlZCBoYXJkd2FyZQorICAgICAgICAgKiBpcyBwbGF0Zm9ybSBzcGVjaWZpYywgYnV0IHRoaXMgZmxhZyBpcyByZXNlcnZlZCB0byBwcmV2ZW50IG1hcHBpbmcgdGhpcyBibG9jayBpbnRvIENQVQorICAgICAgICAgKiB3cml0YWJsZSBtZW1vcnkgcmVzdWx0aW5nIGluIGJ1cyBmYXVsdC4gVGhpcyBmbGFnIGNhbiBiZSB1c2VkIHdoZW4gYnVmZmVyIGludGVncml0eSBtdXN0CisgICAgICAgICAqIGJlIHByb3RlY3RlZC4KKyAgICAgICAgICovCisgICAgICAgIFdSSVRFX1BST1RFQ1RFRCAgPSAxIDw8IDMsCisgICAgfTsKKworICAgIGVudW0gOiB1aW50NjRfdCB7CisgICAgICAgIC8qKgorICAgICAgICAgKiBCdWZmZXIgdXNhZ2UgYml0cyByZXNlcnZlZCBmb3IgdGhlIHBsYXRmb3JtLiBXZSBkb24ndCBzZXBhcmF0ZWx5IHJlc2VydmUgcmVhZCBhbmQKKyAgICAgICAgICogd3JpdGUgdXNhZ2VzIGFzIHBsYXRmb3JtcyBtYXkgaGF2ZSBhc3ltbWV0cmljIGRpc3RyaWJ1dGlvbiBiZXR3ZWVuIHRoZW0uCisgICAgICAgICAqLworICAgICAgICBQTEFURk9STV9NQVNLICAgICA9IH4oQ1BVX1JFQUQgfCBDUFVfV1JJVEUgfCBSRUFEX1BST1RFQ1RFRCB8IFdSSVRFX1BST1RFQ1RFRCksCisgICAgfTsKKworICAgIC8qKiBDcmVhdGUgYSB1c2FnZSBmcm9tIHNlcGFyYXRlIGNvbnN1bWVyIGFuZCBwcm9kdWNlciB1c2FnZSBtYXNrLiBcZGVwcmVjYXRlZCAqLworICAgIGlubGluZSBDMk1lbW9yeVVzYWdlKHVpbnQ2NF90IGNvbnN1bWVyLCB1aW50NjRfdCBwcm9kdWNlcikKKyAgICAgICAgOiBleHBlY3RlZChjb25zdW1lciB8IHByb2R1Y2VyKSB7IH0KKworICAgIGlubGluZSBleHBsaWNpdCBDMk1lbW9yeVVzYWdlKHVpbnQ2NF90IGV4cGVjdGVkXykKKyAgICAgICAgOiBleHBlY3RlZChleHBlY3RlZF8pIHsgfQorCisgICAgdWludDY0X3QgZXhwZWN0ZWQ7IC8vIGV4cGVjdGVkIGJ1ZmZlciB1c2FnZQorfTsKKworLy8vIEB9CisKKyNlbmRpZiAgLy8gQzJCVUZGRVJfQkFTRV9IXworCmRpZmYgLS1naXQgYS9tZWRpYS9jb2RlYzIvY29yZS9pbmNsdWRlL0MyQ29tcG9uZW50LmggYi9tZWRpYS9jb2RlYzIvY29yZS9pbmNsdWRlL0MyQ29tcG9uZW50LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODgxMDcyNQotLS0gL2Rldi9udWxsCisrKyBiL21lZGlhL2NvZGVjMi9jb3JlL2luY2x1ZGUvQzJDb21wb25lbnQuaApAQCAtMCwwICsxLDk3NSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNiBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCisKKyNpZm5kZWYgQzJDT01QT05FTlRfSF8KKworI2RlZmluZSBDMkNPTVBPTkVOVF9IXworCisjaW5jbHVkZSA8c3RkYm9vbC5oPgorI2luY2x1ZGUgPHN0ZGludC5oPgorCisjaW5jbHVkZSA8bGlzdD4KKyNpbmNsdWRlIDxtZW1vcnk+CisjaW5jbHVkZSA8dmVjdG9yPgorI2luY2x1ZGUgPGZ1bmN0aW9uYWw+CisKKyNpbmNsdWRlIDxDMkVudW0uaD4KKyNpbmNsdWRlIDxDMlBhcmFtLmg+CisjaW5jbHVkZSA8QzJXb3JrLmg+CisKKy8vLyBcZGVmZ3JvdXAgY29tcG9uZW50cyBDb21wb25lbnRzCisvLy8gQHsKKworc3RydWN0IEMyRmllbGRTdXBwb3J0ZWRWYWx1ZXNRdWVyeSB7CisgICAgZW51bSB0eXBlX3QgOiB1aW50MzJfdCB7CisgICAgICAgIFBPU1NJQkxFLCAvLy88IHF1ZXJ5IGFsbCBwb3NzaWJsZSB2YWx1ZXMgcmVnYXJkbGVzcyBvZiBvdGhlciBzZXR0aW5ncworICAgICAgICBDVVJSRU5ULCAgLy8vPCBxdWVyeSBjdXJyZW50bHkgcG9zc2libGUgdmFsdWVzIGdpdmVuIGRlcGVuZGVudCBzZXR0aW5ncworICAgIH07CisKK3ByaXZhdGU6CisgICAgQzJQYXJhbUZpZWxkIF9tRmllbGQ7CisgICAgdHlwZV90IF9tVHlwZTsKK3B1YmxpYzoKKyAgICBjMl9zdGF0dXNfdCBzdGF0dXM7CisgICAgQzJGaWVsZFN1cHBvcnRlZFZhbHVlcyB2YWx1ZXM7CisKKyAgICBDMkZpZWxkU3VwcG9ydGVkVmFsdWVzUXVlcnkoY29uc3QgQzJQYXJhbUZpZWxkICZmaWVsZF8sIHR5cGVfdCB0eXBlXykKKyAgICAgICAgOiBfbUZpZWxkKGZpZWxkXyksIF9tVHlwZSh0eXBlXyksIHN0YXR1cyhDMl9OT19JTklUKSB7IH0KKworICAgIHN0YXRpYyBDMkZpZWxkU3VwcG9ydGVkVmFsdWVzUXVlcnkKKyAgICBDdXJyZW50KGNvbnN0IEMyUGFyYW1GaWVsZCAmZmllbGRfKSB7CisgICAgICAgIHJldHVybiBDMkZpZWxkU3VwcG9ydGVkVmFsdWVzUXVlcnkoZmllbGRfLCBDVVJSRU5UKTsKKyAgICB9CisKKyAgICBzdGF0aWMgQzJGaWVsZFN1cHBvcnRlZFZhbHVlc1F1ZXJ5CisgICAgUG9zc2libGUoY29uc3QgQzJQYXJhbUZpZWxkICZmaWVsZF8pIHsKKyAgICAgICAgcmV0dXJuIEMyRmllbGRTdXBwb3J0ZWRWYWx1ZXNRdWVyeShmaWVsZF8sIFBPU1NJQkxFKTsKKyAgICB9CisKKyAgICBpbmxpbmUgQzJQYXJhbUZpZWxkIGZpZWxkKCkgY29uc3QgeyByZXR1cm4gX21GaWVsZDsgfTsKKworICAgIGlubGluZSB0eXBlX3QgdHlwZSgpIGNvbnN0IHsgcmV0dXJuIF9tVHlwZTsgfQorfTsKKworLyoqCisgKiBDb21wb25lbnQgaW50ZXJmYWNlIG9iamVjdC4gVGhpcyBvYmplY3QgY29udGFpbnMgYWxsIG9mIHRoZSBjb25maWd1cmF0aW9uIG9mIGEgcG90ZW50aWFsIG9yCisgKiBhY3R1YWwgY29tcG9uZW50LiBJdCBjYW4gYmUgY3JlYXRlZCBhbmQgdXNlZCBpbmRlcGVuZGVudGx5IG9mIGFuIGFjdHVhbCBDMkNvbXBvbmVudCBpbnN0YW5jZSB0bworICogcXVlcnkgc3VwcG9ydCBhbmQgcGFyYW1ldGVycyBmb3IgdmFyaW91cyBjb21wb25lbnQgc2V0dGluZ3MgYW5kIGNvbmZpZ3VyYXRpb25zIGZvciBhIHBvdGVudGlhbAorICogY29tcG9uZW50LiBBY3R1YWwgY29tcG9uZW50cyBhbHNvIGV4cG9zZSB0aGlzIGludGVyZmFjZS4KKyAqLworCitjbGFzcyBDMkNvbXBvbmVudEludGVyZmFjZSB7CitwdWJsaWM6CisgICAgLy8gQUxXQVlTIEFWQUlMQUJMRSBNRVRIT0RTCisgICAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKKyAgICAvKioKKyAgICAgKiBSZXR1cm5zIHRoZSBuYW1lIG9mIHRoaXMgY29tcG9uZW50IG9yIGNvbXBvbmVudCBpbnRlcmZhY2Ugb2JqZWN0LgorICAgICAqIFRoaXMgaXMgYSB1bmlxdWUgbmFtZSBmb3IgdGhpcyBjb21wb25lbnQgb3IgY29tcG9uZW50IGludGVyZmFjZSAnY2xhc3MnOyBob3dldmVyLCBtdWx0aXBsZQorICAgICAqIGluc3RhbmNlcyBvZiB0aGlzIGNvbXBvbmVudCBTSEFMTCBoYXZlIHRoZSBzYW1lIG5hbWUuCisgICAgICoKKyAgICAgKiBXaGVuIGF0dGFjaGVkIHRvIGEgY29tcG9uZW50LCB0aGlzIG1ldGhvZCBNVVNUIGJlIHN1cHBvcnRlZCBpbiBhbnkgY29tcG9uZW50IHN0YXRlLgorICAgICAqIFRoaXMgY2FsbCBkb2VzIG5vdCBjaGFuZ2UgdGhlIHN0YXRlIG5vciB0aGUgaW50ZXJuYWwgY29uZmlndXJhdGlvbiBvZiB0aGUgY29tcG9uZW50LgorICAgICAqCisgICAgICogVGhpcyBtZXRob2QgTVVTVCBiZSAibm9uLWJsb2NraW5nIiBhbmQgcmV0dXJuIHdpdGhpbiAxbXMuCisgICAgICoKKyAgICAgKiBccmV0dXJuIHRoZSBuYW1lIG9mIHRoaXMgY29tcG9uZW50IG9yIGNvbXBvbmVudCBpbnRlcmZhY2Ugb2JqZWN0LgorICAgICAqIFxyZXR2YWwgYW4gZW1wdHkgc3RyaW5nIGlmIHRoZXJlIHdhcyBub3QgZW5vdWdoIG1lbW9yeSB0byBhbGxvY2F0ZSB0aGUgYWN0dWFsIG5hbWUuCisgICAgICovCisgICAgdmlydHVhbCBDMlN0cmluZyBnZXROYW1lKCkgY29uc3QgPSAwOworCisgICAgLyoqCisgICAgICogUmV0dXJucyBhIHVuaXF1ZSBJRCBmb3IgdGhpcyBjb21wb25lbnQgb3IgaW50ZXJmYWNlIG9iamVjdC4KKyAgICAgKiBUaGlzIElEIGlzIHVzZWQgYXMgd29yayB0YXJnZXRzLCB1bmlxdWUgd29yayBJRHMsIGFuZCB3aGVuIGNvbmZpZ3VyaW5nIHR1bm5lbGluZy4KKyAgICAgKgorICAgICAqIFdoZW4gYXR0YWNoZWQgdG8gYSBjb21wb25lbnQsIHRoaXMgbWV0aG9kIE1VU1QgYmUgc3VwcG9ydGVkIGluIGFueSBjb21wb25lbnQgc3RhdGUuCisgICAgICogVGhpcyBjYWxsIGRvZXMgbm90IGNoYW5nZSB0aGUgc3RhdGUgbm9yIHRoZSBpbnRlcm5hbCBjb25maWd1cmF0aW9uIG9mIHRoZSBjb21wb25lbnQuCisgICAgICoKKyAgICAgKiBUaGlzIG1ldGhvZCBNVVNUIGJlICJub24tYmxvY2tpbmciIGFuZCByZXR1cm4gd2l0aGluIDFtcy4KKyAgICAgKgorICAgICAqIFxyZXR1cm4gYSB1bmlxdWUgbm9kZSBJRCBmb3IgdGhpcyBjb21wb25lbnQgb3IgY29tcG9uZW50IGludGVyZmFjZSBpbnN0YW5jZS4KKyAgICAgKi8KKyAgICB2aXJ0dWFsIGMyX25vZGVfaWRfdCBnZXRJZCgpIGNvbnN0ID0gMDsKKworICAgIC8qKgorICAgICAqIFF1ZXJpZXMgYSBzZXQgb2YgcGFyYW1ldGVycyBmcm9tIHRoZSBjb21wb25lbnQgb3IgaW50ZXJmYWNlIG9iamVjdC4KKyAgICAgKiBRdWVyeWluZyBpcyBwZXJmb3JtZWQgYXQgYmVzdCBlZmZvcnQ6IHRoZSBjb21wb25lbnQgU0hBTEwgcXVlcnkgYWxsIHN1cHBvcnRlZCBwYXJhbWV0ZXJzIGFuZAorICAgICAqIHNraXAgdW5zdXBwb3J0ZWQgb25lcywgaGVhcCBhbGxvY2F0ZWQgcGFyYW1ldGVycyB0aGF0IGNvdWxkIG5vdCBiZSBhbGxvY2F0ZWQgb3IgcGFyYW1ldGVycworICAgICAqIHRoYXQgY291bGQgbm90IGJlIHF1ZXJpZWQgd2l0aG91dCBibG9ja2luZy4gQW55IGVycm9ycyBhcmUgY29tbXVuaWNhdGVkIGluIHRoZSByZXR1cm4gdmFsdWUuCisgICAgICogQWRkaXRpb25hbGx5LCBwcmVhbGxvY2F0ZWQgKGUuZy4gc3RhY2spIHBhcmFtZXRlcnMgdGhhdCBjb3VsZCBub3QgYmUgcXVlcmllZCBhcmUgaW52YWxpZGF0ZWQuCisgICAgICogSW52YWxpZCBvciBibG9ja2luZyBwYXJhbWV0ZXJzIHRvIGJlIGFsbG9jYXRlZCBvbiB0aGUgaGVhcCBhcmUgb21pdHRlZCBmcm9tIHRoZSByZXN1bHQuCisgICAgICoKKyAgICAgKiBcbm90ZSBQYXJhbWV0ZXIgdmFsdWVzIGRvIG5vdCBkZXBlbmQgb24gdGhlIG9yZGVyIG9mIHF1ZXJ5LgorICAgICAqCisgICAgICogXHRvZG8gVGhpcyBtZXRob2QgY2Fubm90IGJlIHVzZWQgdG8gcXVlcnkgaW5mby1idWZmZXJzLiBJcyB0aGF0IGEgcHJvYmxlbT8KKyAgICAgKgorICAgICAqIFdoZW4gYXR0YWNoZWQgdG8gYSBjb21wb25lbnQsIHRoaXMgbWV0aG9kIE1VU1QgYmUgc3VwcG9ydGVkIGluIGFueSBjb21wb25lbnQgc3RhdGUgZXhjZXB0CisgICAgICogcmVsZWFzZWQuCisgICAgICogVGhpcyBjYWxsIGRvZXMgbm90IGNoYW5nZSB0aGUgc3RhdGUgbm9yIHRoZSBpbnRlcm5hbCBjb25maWd1cmF0aW9uIG9mIHRoZSBjb21wb25lbnQuCisgICAgICoKKyAgICAgKiBUaGlzIG1ldGhvZCBoYXMgYSB2YXJpYWJsZSBibG9ja2luZyBiZWhhdmlvciBiYXNlZCBvbiBzdGF0ZS4KKyAgICAgKiBJbiB0aGUgc3RvcHBlZCBzdGF0ZSB0aGlzIG1ldGhvZCBNVVNUIGJlICJub24tYmxvY2tpbmciIGFuZCByZXR1cm4gd2l0aGluIDFtcy4KKyAgICAgKiBJbiB0aGUgcnVubmluZyBzdGF0ZXMgdGhpcyBtZXRob2QgbWF5IGJlIG1vbWVudGFyaWx5IGJsb2NraW5nLCBidXQgTVVTVCByZXR1cm4gd2l0aGluIDVtcy4KKyAgICAgKgorICAgICAqIFxwYXJhbVtpbixvdXRdIHN0YWNrUGFyYW1zICBhIGxpc3Qgb2YgcGFyYW1zIHF1ZXJpZWQuIFRoZXNlIGFyZSBpbml0aWFsaXplZCBzcGVjaWZpYyB0byBlYWNoCisgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldHRpbmc7IGUuZy4gc2l6ZSBhbmQgaW5kZXggYXJlIHNldCBhbmQgcmVzdCBvZiB0aGUgbWVtYmVycyBhcmUKKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xlYXJlZC4KKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG5vdGUgRmxleGlibGUgc2V0dGluZ3MgdGhhdCBhcmUgb2YgaW5jb3JyZWN0IHNpemUgd2lsbCBiZQorICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnZhbGlkYXRlZC4KKyAgICAgKiBccGFyYW1baW5dIGhlYXBQYXJhbUluZGljZXMgYSB2ZWN0b3Igb2YgcGFyYW0gaW5kaWNlcyBmb3IgcGFyYW1zIHRvIGJlIHF1ZXJpZWQgYW5kIHJldHVybmVkCisgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uIHRoZSBoZWFwLiBUaGVzZSBwYXJhbWV0ZXJzIHdpbGwgYmUgcmV0dXJuZWQgaW4gaGVhcFBhcmFtcy4KKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVW5zdXBwb3J0ZWQgcGFyYW0gaW5kaWNlcyB3aWxsIGJlIGlnbm9yZWQuCisgICAgICogXHBhcmFtW2luXSBtYXlCbG9jayAgICAgICAgIGlmIHRydWUgKEMyX01BWV9CTE9DSyksIGltcGxlbWVudGF0aW9uIG1heSBtb21lbnRhcmlseSBibG9jay4KKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT3RoZXJ3aXNlIChDMl9ET05UX0JMT0NLKSwgaXQgbXVzdCBiZSAibm9uLWJsb2NraW5nIi4KKyAgICAgKiBccGFyYW1bb3V0XSBoZWFwUGFyYW1zICAgICAgYSBsaXN0IG9mIHBhcmFtcyB3aGVyZSB0byB3aGljaCB0aGUgc3VwcG9ydGVkIGhlYXAgcGFyYW1ldGVycworICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aWxsIGJlIGFwcGVuZGVkIGluIHRoZSBvcmRlciB0aGV5IGFwcGVhciBpbiBoZWFwUGFyYW1JbmRpY2VzLgorICAgICAqCisgICAgICogXHJldHZhbCBDMl9PSyAgICAgICAgYWxsIHBhcmFtZXRlcnMgY291bGQgYmUgcXVlcmllZAorICAgICAqIFxyZXR2YWwgQzJfQkFEX0lOREVYIGFsbCBzdXBwb3J0ZWQgcGFyYW1ldGVycyBjb3VsZCBiZSBxdWVyaWVkLCBidXQgc29tZSBwYXJhbWV0ZXJzIHdlcmUgbm90CisgICAgICogICAgICAgICAgICAgICAgICAgICAgc3VwcG9ydGVkCisgICAgICogXHJldHZhbCBDMl9CQURfU1RBVEUgd2hlbiBjYWxsZWQgaW4gdGhlIHJlbGVhc2VkIGNvbXBvbmVudCBzdGF0ZSAodXNlciBlcnJvcikKKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAodGhpcyBlcnJvciBjb2RlIGlzIG9ubHkgYWxsb3dlZCBmb3IgaW50ZXJmYWNlcyBjb25uZWN0ZWQgdG8gY29tcG9uZW50cykKKyAgICAgKiBccmV0dmFsIEMyX05PX01FTU9SWSBjb3VsZCBub3QgYWxsb2NhdGUgbWVtb3J5IGZvciBhIHN1cHBvcnRlZCBwYXJhbWV0ZXIKKyAgICAgKiBccmV0dmFsIEMyX0JMT0NLSU5HICB0aGUgb3BlcmF0aW9uIG11c3QgYmxvY2sgdG8gY29tcGxldGUgYnV0IG1heUJsb2NrIGlzIGZhbHNlCisgICAgICogICAgICAgICAgICAgICAgICAgICAgKHRoaXMgZXJyb3IgY29kZSBpcyBvbmx5IGFsbG93ZWQgZm9yIGludGVyZmFjZXMgY29ubmVjdGVkIHRvIGNvbXBvbmVudHMpCisgICAgICogXHJldHZhbCBDMl9USU1FRF9PVVQgY291bGQgbm90IHF1ZXJ5IHRoZSBwYXJhbWV0ZXJzIHdpdGhpbiB0aGUgdGltZSBsaW1pdCAodW5leHBlY3RlZCkKKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAodGhpcyBlcnJvciBjb2RlIGlzIG9ubHkgYWxsb3dlZCBmb3IgaW50ZXJmYWNlcyBjb25uZWN0ZWQgdG8gY29tcG9uZW50cworICAgICAqICAgICAgICAgICAgICAgICAgICAgIGluIHRoZSBydW5uaW5nIHN0YXRlKQorICAgICAqIFxyZXR2YWwgQzJfQ09SUlVQVEVEIHNvbWUgdW5rbm93biBlcnJvciBwcmV2ZW50ZWQgdGhlIHF1ZXJ5aW5nIG9mIHRoZSBwYXJhbWV0ZXJzCisgICAgICogICAgICAgICAgICAgICAgICAgICAgKHVuZXhwZWN0ZWQpCisgICAgICogICAgICAgICAgICAgICAgICAgICAgKHRoaXMgZXJyb3IgY29kZSBpcyBvbmx5IGFsbG93ZWQgZm9yIGludGVyZmFjZXMgY29ubmVjdGVkIHRvIGNvbXBvbmVudHMpCisgICAgICovCisgICAgdmlydHVhbCBjMl9zdGF0dXNfdCBxdWVyeV92YigKKyAgICAgICAgY29uc3Qgc3RkOjp2ZWN0b3I8QzJQYXJhbSo+ICZzdGFja1BhcmFtcywKKyAgICAgICAgY29uc3Qgc3RkOjp2ZWN0b3I8QzJQYXJhbTo6SW5kZXg+ICZoZWFwUGFyYW1JbmRpY2VzLAorICAgICAgICBjMl9ibG9ja2luZ190IG1heUJsb2NrLAorICAgICAgICBzdGQ6OnZlY3RvcjxzdGQ6OnVuaXF1ZV9wdHI8QzJQYXJhbT4+KiBjb25zdCBoZWFwUGFyYW1zKSBjb25zdCA9IDA7CisKKyAgICAvKioKKyAgICAgKiBTZXRzIGEgc2V0IG9mIHBhcmFtZXRlcnMgZm9yIHRoZSBjb21wb25lbnQgb3IgaW50ZXJmYWNlIG9iamVjdC4KKyAgICAgKgorICAgICAqIFR1bmluZyBpcyBwZXJmb3JtZWQgYXQgYmVzdCBlZmZvcnQ6IHRoZSBjb21wb25lbnQgU0hBTEwgcHJvY2VzcyB0aGUgY29uZmlndXJhdGlvbiB1cGRhdGVzIGluCisgICAgICogdGhlIG9yZGVyIHRoZXkgYXBwZWFyIGluIHxwYXJhbXN8LiBJZiBhbnkgcGFyYW1ldGVyIHVwZGF0ZSBmYWlscywgdGhlIGNvbXBvbmVudCBzaGFsbAorICAgICAqIGNvbW11bmljYXRlIHRoZSBmYWlsdXJlIGluIHRoZSByZXR1cm4gdmFsdWUgYW5kIGluIHxmYWlsdXJlc3wsIGFuZCBzdGlsbCBwcm9jZXNzIHRoZQorICAgICAqIHJlbWFpbmluZyBwYXJhbWV0ZXJzLiBVbnN1cHBvcnRlZCBwYXJhbWV0ZXJzIGFyZSBza2lwcGVkLCB0aG91Z2ggdGhleSBhcmUgY29tbXVuaWNhdGVkIGluCisgICAgICogdGhlciByZXR1cm4gdmFsdWUuIE1vc3QgcGFyYW1ldGVycyBhcmUgdXBkYXRlZCBhdCBiZXN0IGVmZm9ydCAtIHN1Y2ggdGhhdCBldmVuIGlmIGNsaWVudAorICAgICAqIHNwZWNpZmllcyBhbiB1bnN1cHBvcnRlZCB2YWx1ZSBmb3IgYSBmaWVsZCwgdGhlIGNsb3Nlc3Qgc3VwcG9ydGVkIHZhbHVlIGlzIHVzZWQuIE9uIHRoZQorICAgICAqIG90aGVyIGhhbmQsIHN0cmljdCBwYXJhbWV0ZXJzIG9ubHkgYWNjZXB0IHNwZWNpZmljIHZhbHVlcyBmb3IgdGhlaXIgZmllbGRzLCBhbmQgaWYgdGhlIGNsaWVudAorICAgICAqIHNwZWNpZmllcyBhbiB1bnN1cHBvcnRlZCB2YWx1ZSwgdGhlIHBhcmFtZXRlciBzZXR0aW5nIHNoYWxsIGZhaWwgZm9yIHRoYXQgZmllbGQuCisgICAgICogSWYgdGhlIGNsaWVudCB0cmllcyB0byBjaGFuZ2UgdGhlIHZhbHVlIG9mIGEgZmllbGQgdGhhdCByZXF1aXJlcyBtb21lbnRhcnkgYmxvY2tpbmcgd2l0aG91dAorICAgICAqIHNldHRpbmcgfG1heUJsb2NrfCB0byBDMl9NQVlfQkxPQ0ssIHRoYXQgcGFyYW1ldGVyIHNoYWxsIGFsc28gYmUgc2tpcHBlZCBhbmQgYSBzcGVjaWZpYworICAgICAqIHJldHVybiB2YWx1ZSBzaGFsbCBiZSB1c2VkLiBGaW5hbCB2YWx1ZXMgZm9yIGFsbCBwYXJhbWV0ZXJzIHNldCBhcmUgcHJvcGFnYXRlZCBiYWNrIHRvIHRoZQorICAgICAqIGNhbGxlciBpbiB8cGFyYW1zfC4KKyAgICAgKgorICAgICAqIFxub3RlIFBhcmFtZXRlciB0dW5pbmcgRE9FUyBkZXBlbmQgb24gdGhlIG9yZGVyIG9mIHRoZSB0dW5pbmcgcGFyYW1ldGVycy4gRS5nLiBzb21lIHBhcmFtZXRlcgorICAgICAqIHVwZGF0ZSBtYXkgYWxsb3cgc29tZSBzdWJzZXF1ZW50IHZhbHVlcyBmb3IgZnVydGhlciBwYXJhbWV0ZXIgdXBkYXRlcy4KKyAgICAgKgorICAgICAqIFdoZW4gYXR0YWNoZWQgdG8gYSBjb21wb25lbnQsIHRoaXMgbWV0aG9kIE1VU1QgYmUgc3VwcG9ydGVkIGluIGFueSBjb21wb25lbnQgc3RhdGUgZXhjZXB0CisgICAgICogcmVsZWFzZWQuCisgICAgICoKKyAgICAgKiBUaGlzIG1ldGhvZCBoYXMgYSB2YXJpYWJsZSBibG9ja2luZyBiZWhhdmlvciBiYXNlZCBvbiBzdGF0ZS4KKyAgICAgKiBJbiB0aGUgc3RvcHBlZCBzdGF0ZSB0aGlzIG1ldGhvZCBNVVNUIGJlICJub24tYmxvY2tpbmciIGFuZCByZXR1cm4gd2l0aGluIDFtcy4KKyAgICAgKiBJbiB0aGUgcnVubmluZyBzdGF0ZXMgdGhpcyBtZXRob2QgbWF5IGJlIG1vbWVudGFyaWx5IGJsb2NraW5nLCBidXQgTVVTVCByZXR1cm4gd2l0aGluIDVtcy4KKyAgICAgKgorICAgICAqIFxwYXJhbVtpbixvdXRdIHBhcmFtcyBhIGxpc3Qgb2YgcGFyYW1ldGVyIHVwZGF0ZXMuIFRoZXNlIHdpbGwgYmUgdXBkYXRlZCB0byB0aGUgYWN0dWFsCisgICAgICogICAgICAgICAgICAgICAgICAgICAgIHBhcmFtZXRlciB2YWx1ZXMgYWZ0ZXIgdGhlIHVwZGF0ZXMgKHRoaXMgaXMgYmVjYXVzZSB0dW5pbmcgaXMgcGVyZm9ybWVkCisgICAgICogICAgICAgICAgICAgICAgICAgICAgIGF0IGJlc3QgZWZmb3J0KS4KKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgXHRvZG8gcGFyYW1zIHRoYXQgY291bGQgbm90IGJlIHVwZGF0ZWQgYXJlIG5vdCBtYXJrZWQgaGVyZSwgc28gYXJlCisgICAgICogICAgICAgICAgICAgICAgICAgICAgIGNvbmZ1c2luZyAtIGFyZSB0aGV5ICJleGlzdGluZyIgdmFsdWVzIG9yIGludGVuZGVkIHRvIGJlIGNvbmZpZ3VyZWQKKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgdmFsdWVzPworICAgICAqIFxwYXJhbVtpbl0gbWF5QmxvY2sgICBpZiB0cnVlIChDMl9NQVlfQkxPQ0spLCBpbXBsZW1lbnRhdGlvbiBtYXkgbW9tZW50YXJpbHkgYmxvY2suCisgICAgICogICAgICAgICAgICAgICAgICAgICAgIE90aGVyd2lzZSAoQzJfRE9OVF9CTE9DSyksIGl0IG11c3QgYmUgIm5vbi1ibG9ja2luZyIuCisgICAgICogXHBhcmFtW291dF0gZmFpbHVyZXMgIGEgbGlzdCBvZiBwYXJhbWV0ZXIgZmFpbHVyZXMgYW5kIG9wdGlvbmFsIGd1aWRhbmNlCisgICAgICoKKyAgICAgKiBccmV0dmFsIEMyX09LICAgICAgICBhbGwgcGFyYW1ldGVycyBjb3VsZCBiZSB1cGRhdGVkIHN1Y2Nlc3NmdWxseQorICAgICAqIFxyZXR2YWwgQzJfQkFEX0lOREVYIGFsbCBzdXBwb3J0ZWQgcGFyYW1ldGVycyBjb3VsZCBiZSB1cGRhdGVkIHN1Y2Nlc3NmdWxseSwgYnV0IHNvbWUKKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICBwYXJhbWV0ZXJzIHdlcmUgbm90IHN1cHBvcnRlZAorICAgICAqIFxyZXR2YWwgQzJfQkFEX1ZBTFVFIHNvbWUgc3VwcG9ydGVkIHBhcmFtZXRlcnMgY291bGQgbm90IGJlIHVwZGF0ZWQgc3VjY2Vzc2Z1bGx5IGJlY2F1c2UKKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICB0aGV5IGNvbnRhaW5lZCB1bnN1cHBvcnRlZCB2YWx1ZXMuIFRoZXNlIGFyZSByZXR1cm5lZCBpbiB8ZmFpbHVyZXN8LgorICAgICAqIFxyZXR2YWwgQzJfQkFEX1NUQVRFIHdoZW4gY2FsbGVkIGluIHRoZSByZWxlYXNlZCBjb21wb25lbnQgc3RhdGUgKHVzZXIgZXJyb3IpCisgICAgICogICAgICAgICAgICAgICAgICAgICAgKHRoaXMgZXJyb3IgY29kZSBpcyBvbmx5IGFsbG93ZWQgZm9yIGludGVyZmFjZXMgY29ubmVjdGVkIHRvIGNvbXBvbmVudHMpCisgICAgICogXHJldHZhbCBDMl9OT19NRU1PUlkgc29tZSBzdXBwb3J0ZWQgcGFyYW1ldGVycyBjb3VsZCBub3QgYmUgdXBkYXRlZCBzdWNjZXNzZnVsbHkgYmVjYXVzZQorICAgICAqICAgICAgICAgICAgICAgICAgICAgIHRoZXkgY29udGFpbmVkIHVuc3VwcG9ydGVkIHZhbHVlcywgYnV0IGNvdWxkIG5vdCBhbGxvY2F0ZSBhIGZhaWx1cmUKKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICBvYmplY3QgZm9yIHRoZW0uCisgICAgICogXHJldHZhbCBDMl9USU1FRF9PVVQgY291bGQgbm90IHNldCB0aGUgcGFyYW1ldGVycyB3aXRoaW4gdGhlIHRpbWUgbGltaXQgKHVuZXhwZWN0ZWQpCisgICAgICogICAgICAgICAgICAgICAgICAgICAgKHRoaXMgZXJyb3IgY29kZSBpcyBvbmx5IGFsbG93ZWQgZm9yIGludGVyZmFjZXMgY29ubmVjdGVkIHRvIGNvbXBvbmVudHMKKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICBpbiB0aGUgcnVubmluZyBzdGF0ZSkKKyAgICAgKiBccmV0dmFsIEMyX0JMT0NLSU5HICB0aGUgb3BlcmF0aW9uIG11c3QgYmxvY2sgdG8gY29tcGxldGUgYnV0IG1heUJsb2NrIGlzIGZhbHNlCisgICAgICogICAgICAgICAgICAgICAgICAgICAgKHRoaXMgZXJyb3IgY29kZSBpcyBvbmx5IGFsbG93ZWQgZm9yIGludGVyZmFjZXMgY29ubmVjdGVkIHRvIGNvbXBvbmVudHMpCisgICAgICogXHJldHZhbCBDMl9DT1JSVVBURUQgc29tZSB1bmtub3duIGVycm9yIHByZXZlbnRlZCB0aGUgdXBkYXRlIG9mIHRoZSBwYXJhbWV0ZXJzCisgICAgICogICAgICAgICAgICAgICAgICAgICAgKHVuZXhwZWN0ZWQpCisgICAgICogICAgICAgICAgICAgICAgICAgICAgKHRoaXMgZXJyb3IgY29kZSBpcyBvbmx5IGFsbG93ZWQgZm9yIGludGVyZmFjZXMgY29ubmVjdGVkIHRvIGNvbXBvbmVudHMpCisgICAgICovCisgICAgdmlydHVhbCBjMl9zdGF0dXNfdCBjb25maWdfdmIoCisgICAgICAgICAgICBjb25zdCBzdGQ6OnZlY3RvcjxDMlBhcmFtKj4gJnBhcmFtcywKKyAgICAgICAgICAgIGMyX2Jsb2NraW5nX3QgbWF5QmxvY2ssCisgICAgICAgICAgICBzdGQ6OnZlY3RvcjxzdGQ6OnVuaXF1ZV9wdHI8QzJTZXR0aW5nUmVzdWx0Pj4qIGNvbnN0IGZhaWx1cmVzKSA9IDA7CisKKyAgICAvLyBUVU5ORUxJTkcKKyAgICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworICAgIC8qKgorICAgICAqIENyZWF0ZXMgYSB0dW5uZWwgZnJvbSB0aGlzIGNvbXBvbmVudCB0byB0aGUgdGFyZ2V0IGNvbXBvbmVudC4KKyAgICAgKgorICAgICAqIElmIHRoZSBjb21wb25lbnQgaXMgc3VjY2Vzc2Z1bGx5IGNyZWF0ZWQsIHN1YnNlcXVlbnQgd29yayBpdGVtcyBxdWV1ZWQgbWF5IGluY2x1ZGUgYQorICAgICAqIHR1bm5lbGVkIHBhdGggYmV0d2VlbiB0aGVzZSBjb21wb25lbnRzLgorICAgICAqCisgICAgICogV2hlbiBhdHRhY2hlZCB0byBhIGNvbXBvbmVudCwgdGhpcyBtZXRob2QgTVVTVCBiZSBzdXBwb3J0ZWQgaW4gYW55IGNvbXBvbmVudCBzdGF0ZSBleGNlcHQKKyAgICAgKiByZWxlYXNlZC4KKyAgICAgKgorICAgICAqIFRoaXMgbWV0aG9kIG1heSBiZSBtb21lbnRhcmlseSBibG9ja2luZywgYnV0IE1VU1QgcmV0dXJuIHdpdGhpbiA1bXMuCisgICAgICoKKyAgICAgKiBccmV0dmFsIEMyX09LICAgICAgICB0aGUgdHVubmVsIHdhcyBzdWNjZXNzZnVsbHkgY3JlYXRlZAorICAgICAqIFxyZXR2YWwgQzJfQkFEX0lOREVYIHRoZSB0YXJnZXQgY29tcG9uZW50IGRvZXMgbm90IGV4aXN0CisgICAgICogXHJldHZhbCBDMl9EVVBMSUNBVEUgdGhlIHR1bm5lbCBhbHJlYWR5IGV4aXN0cworICAgICAqIFxyZXR2YWwgQzJfT01JVFRFRCAgIHR1bm5lbGluZyBpcyBub3Qgc3VwcG9ydGVkIGJ5IHRoaXMgY29tcG9uZW50CisgICAgICogXHJldHZhbCBDMl9DQU5OT1RfRE8gdGhlIHNwZWNpZmljIHR1bm5lbCBpcyBub3Qgc3VwcG9ydGVkCisgICAgICogXHJldHZhbCBDMl9CQURfU1RBVEUgd2hlbiBjYWxsZWQgaW4gdGhlIHJlbGVhc2VkIGNvbXBvbmVudCBzdGF0ZSAodXNlciBlcnJvcikKKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAodGhpcyBlcnJvciBjb2RlIGlzIG9ubHkgYWxsb3dlZCBmb3IgaW50ZXJmYWNlcyBjb25uZWN0ZWQgdG8gY29tcG9uZW50cykKKyAgICAgKgorICAgICAqIFxyZXR2YWwgQzJfVElNRURfT1VUIGNvdWxkIG5vdCBjcmVhdGUgdGhlIHR1bm5lbCB3aXRoaW4gdGhlIHRpbWUgbGltaXQgKHVuZXhwZWN0ZWQpCisgICAgICogXHJldHZhbCBDMl9DT1JSVVBURUQgc29tZSB1bmtub3duIGVycm9yIHByZXZlbnRlZCB0aGUgY3JlYXRpb24gb2YgdGhlIHR1bm5lbCAodW5leHBlY3RlZCkKKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAodGhpcyBlcnJvciBjb2RlIGlzIG9ubHkgYWxsb3dlZCBmb3IgaW50ZXJmYWNlcyBjb25uZWN0ZWQgdG8gY29tcG9uZW50cykKKyAgICAgKi8KKyAgICB2aXJ0dWFsIGMyX3N0YXR1c190IGNyZWF0ZVR1bm5lbF9zbShjMl9ub2RlX2lkX3QgdGFyZ2V0Q29tcG9uZW50KSA9IDA7CisKKyAgICAvKioKKyAgICAgKiBSZWxlYXNlcyBhIHR1bm5lbCBmcm9tIHRoaXMgY29tcG9uZW50IHRvIHRoZSB0YXJnZXQgY29tcG9uZW50LgorICAgICAqCisgICAgICogVGhlIHJlbGVhc2Ugb2YgYSB0dW5uZWwgaXMgZGVsYXllZCB3aGlsZSB0aGVyZSBhcmUgcGVuZGluZyB3b3JrIGl0ZW1zIGZvciB0aGUgdHVubmVsLgorICAgICAqIEFmdGVyIHJlbGVhc2luZyBhIHR1bm5lbCwgc3Vic2VxdWVudCB3b3JrIGl0ZW1zIHF1ZXVlZCBNVVNUIE5PVCBpbmNsdWRlIGEgdHVubmVsZWQKKyAgICAgKiBwYXRoIGJldHdlZW4gdGhlc2UgY29tcG9uZW50cy4KKyAgICAgKgorICAgICAqIFdoZW4gYXR0YWNoZWQgdG8gYSBjb21wb25lbnQsIHRoaXMgbWV0aG9kIE1VU1QgYmUgc3VwcG9ydGVkIGluIGFueSBjb21wb25lbnQgc3RhdGUgZXhjZXB0CisgICAgICogcmVsZWFzZWQuCisgICAgICoKKyAgICAgKiBUaGlzIG1ldGhvZCBtYXkgYmUgbW9tZW50YXJpbHkgYmxvY2tpbmcsIGJ1dCBNVVNUIHJldHVybiB3aXRoaW4gNW1zLgorICAgICAqCisgICAgICogXHJldHZhbCBDMl9PSyAgICAgICAgdGhlIHR1bm5lbCB3YXMgbWFya2VkIGZvciByZWxlYXNlIHN1Y2Nlc3NmdWxseQorICAgICAqIFxyZXR2YWwgQzJfQkFEX0lOREVYIHRoZSB0YXJnZXQgY29tcG9uZW50IGRvZXMgbm90IGV4aXN0CisgICAgICogXHJldHZhbCBDMl9OT1RfRk9VTkQgdGhlIHR1bm5lbCBkb2VzIG5vdCBleGlzdAorICAgICAqIFxyZXR2YWwgQzJfT01JVFRFRCAgIHR1bm5lbGluZyBpcyBub3Qgc3VwcG9ydGVkIGJ5IHRoaXMgY29tcG9uZW50CisgICAgICogXHJldHZhbCBDMl9CQURfU1RBVEUgd2hlbiBjYWxsZWQgaW4gdGhlIHJlbGVhc2VkIGNvbXBvbmVudCBzdGF0ZSAodXNlciBlcnJvcikKKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAodGhpcyBlcnJvciBjb2RlIGlzIG9ubHkgYWxsb3dlZCBmb3IgaW50ZXJmYWNlcyBjb25uZWN0ZWQgdG8gY29tcG9uZW50cykKKyAgICAgKgorICAgICAqIFxyZXR2YWwgQzJfVElNRURfT1VUIGNvdWxkIG5vdCBtYXJrIHRoZSB0dW5uZWwgZm9yIHJlbGVhc2Ugd2l0aGluIHRoZSB0aW1lIGxpbWl0ICh1bmV4cGVjdGVkKQorICAgICAqIFxyZXR2YWwgQzJfQ09SUlVQVEVEIHNvbWUgdW5rbm93biBlcnJvciBwcmV2ZW50ZWQgdGhlIHJlbGVhc2Ugb2YgdGhlIHR1bm5lbCAodW5leHBlY3RlZCkKKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAodGhpcyBlcnJvciBjb2RlIGlzIG9ubHkgYWxsb3dlZCBmb3IgaW50ZXJmYWNlcyBjb25uZWN0ZWQgdG8gY29tcG9uZW50cykKKyAgICAgKi8KKyAgICB2aXJ0dWFsIGMyX3N0YXR1c190IHJlbGVhc2VUdW5uZWxfc20oYzJfbm9kZV9pZF90IHRhcmdldENvbXBvbmVudCkgPSAwOworCisgICAgLy8gUkVGTEVDVElPTiBNRUNIQU5JU00gKFVTRUQgRk9SIEVYVEVOU0lPTikKKyAgICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworICAgIC8qKgorICAgICAqIFJldHVybnMgdGhlIHNldCBvZiBzdXBwb3J0ZWQgcGFyYW1ldGVycy4KKyAgICAgKgorICAgICAqIFdoZW4gYXR0YWNoZWQgdG8gYSBjb21wb25lbnQsIHRoaXMgbWV0aG9kIE1VU1QgYmUgc3VwcG9ydGVkIGluIGFueSBjb21wb25lbnQgc3RhdGUgZXhjZXB0CisgICAgICogcmVsZWFzZWQuCisgICAgICoKKyAgICAgKiBUaGlzIG1ldGhvZCBNVVNUIGJlICJub24tYmxvY2tpbmciIGFuZCByZXR1cm4gd2l0aGluIDFtcy4KKyAgICAgKgorICAgICAqIFxwYXJhbVtvdXRdIHBhcmFtcyBhIHZlY3RvciBvZiBzdXBwb3J0ZWQgcGFyYW1ldGVycyB3aWxsIGJlIGFwcGVuZGVkIHRvIHRoaXMgdmVjdG9yLgorICAgICAqCisgICAgICogXHJldHZhbCBDMl9PSyAgICAgICAgdGhlIG9wZXJhdGlvbiBjb21wbGV0ZWQgc3VjY2Vzc2Z1bGx5LgorICAgICAqIFxyZXR2YWwgQzJfQkFEX1NUQVRFIHdoZW4gY2FsbGVkIGluIHRoZSByZWxlYXNlZCBjb21wb25lbnQgc3RhdGUgKHVzZXIgZXJyb3IpCisgICAgICogICAgICAgICAgICAgICAgICAgICAgKHRoaXMgZXJyb3IgY29kZSBpcyBvbmx5IGFsbG93ZWQgZm9yIGludGVyZmFjZXMgY29ubmVjdGVkIHRvIGNvbXBvbmVudHMpCisgICAgICogXHJldHZhbCBDMl9OT19NRU1PUlkgbm90IGVub3VnaCBtZW1vcnkgdG8gY29tcGxldGUgdGhpcyBtZXRob2QuCisgICAgICovCisgICAgdmlydHVhbCBjMl9zdGF0dXNfdCBxdWVyeVN1cHBvcnRlZFBhcmFtc19uYigKKyAgICAgICAgICAgIHN0ZDo6dmVjdG9yPHN0ZDo6c2hhcmVkX3B0cjxDMlBhcmFtRGVzY3JpcHRvcj4+ICogY29uc3QgcGFyYW1zKSBjb25zdCA9IDA7CisKKyAgICAvKioKKyAgICAgKiBSZXRyaWV2ZXMgdGhlIHN1cHBvcnRlZCB2YWx1ZXMgZm9yIHRoZSBxdWVyaWVkIGZpZWxkcy4KKyAgICAgKgorICAgICAqIENsaWVudCBTSEFMTCBzZXQgdGhlIHBhcmFtZXRlci1maWVsZCBzcGVjaWZpZXIgYW5kIHRoZSB0eXBlIG9mIHN1cHBvcnRlZCB2YWx1ZXMgcXVlcnkgKGUuZy4KKyAgICAgKiBjdXJyZW50bHkgc3VwcG9ydGVkIHZhbHVlcywgb3IgcG90ZW50aWFsIHN1cHBvcnRlZCB2YWx1ZXMpIGluIGZpZWxkcy4KKyAgICAgKiBVcG9uIHJldHVybiB0aGUgY29tcG9uZW50IFNIQUxMIGZpbGwgaW4gdGhlIHN1cHBvcnRlZCB2YWx1ZXMgZm9yIHRoZSBmaWVsZHMgbGlzdGVkIGFzIHdlbGwKKyAgICAgKiBhcyBhIHN0YXR1cyBmb3IgZWFjaCBmaWVsZC4gQ29tcG9uZW50IHNoYWxsIHByb2Nlc3MgYWxsIGZpZWxkcyBxdWVyaWVkIGV2ZW4gaWYgc29tZSBxdWVyaWVzCisgICAgICogZmFpbC4KKyAgICAgKgorICAgICAqIFdoZW4gYXR0YWNoZWQgdG8gYSBjb21wb25lbnQsIHRoaXMgbWV0aG9kIE1VU1QgYmUgc3VwcG9ydGVkIGluIGFueSBjb21wb25lbnQgc3RhdGUgZXhjZXB0CisgICAgICogcmVsZWFzZWQuCisgICAgICoKKyAgICAgKiBUaGlzIG1ldGhvZCBoYXMgYSB2YXJpYWJsZSBibG9ja2luZyBiZWhhdmlvciBiYXNlZCBvbiBzdGF0ZS4KKyAgICAgKiBJbiB0aGUgc3RvcHBlZCBzdGF0ZSB0aGlzIG1ldGhvZCBNVVNUIGJlICJub24tYmxvY2tpbmciIGFuZCByZXR1cm4gd2l0aGluIDFtcy4KKyAgICAgKiBJbiB0aGUgcnVubmluZyBzdGF0ZXMgdGhpcyBtZXRob2QgbWF5IGJlIG1vbWVudGFyaWx5IGJsb2NraW5nLCBidXQgTVVTVCByZXR1cm4gd2l0aGluIDVtcy4KKyAgICAgKgorICAgICAqIFxwYXJhbVtpbiBvdXRdIGZpZWxkcyBhIHZlY3RvciBvZiBmaWVsZHMgZGVzY3JpcHRvciBzdHJ1Y3R1cmVzLgorICAgICAqIFxwYXJhbVtpbl0gbWF5QmxvY2sgICBpZiB0cnVlIChDMl9NQVlfQkxPQ0spLCBpbXBsZW1lbnRhdGlvbiBtYXkgbW9tZW50YXJpbHkgYmxvY2suCisgICAgICogICAgICAgICAgICAgICAgICAgICAgIE90aGVyd2lzZSAoQzJfRE9OVF9CTE9DSyksIGl0IG11c3QgYmUgIm5vbi1ibG9ja2luZyIuCisgICAgICoKKyAgICAgKiBccmV0dmFsIEMyX09LICAgICAgICB0aGUgb3BlcmF0aW9uIGNvbXBsZXRlZCBzdWNjZXNzZnVsbHkuCisgICAgICogXHJldHZhbCBDMl9CQURfU1RBVEUgd2hlbiBjYWxsZWQgaW4gdGhlIHJlbGVhc2VkIGNvbXBvbmVudCBzdGF0ZSAodXNlciBlcnJvcikKKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAodGhpcyBlcnJvciBjb2RlIGlzIG9ubHkgYWxsb3dlZCBmb3IgaW50ZXJmYWNlcyBjb25uZWN0ZWQgdG8gY29tcG9uZW50cykKKyAgICAgKiBccmV0dmFsIEMyX0JBRF9JTkRFWCBhdCBsZWFzdCBvbmUgZmllbGQgd2FzIG5vdCByZWNvZ25pemVkIGFzIGEgY29tcG9uZW50IGZpZWxkCisgICAgICogXHJldHZhbCBDMl9USU1FRF9PVVQgY291bGQgbm90IHF1ZXJ5IHN1cHBvcnRlZCB2YWx1ZXMgd2l0aGluIHRoZSB0aW1lIGxpbWl0ICh1bmV4cGVjdGVkKQorICAgICAqICAgICAgICAgICAgICAgICAgICAgICh0aGlzIGVycm9yIGNvZGUgaXMgb25seSBhbGxvd2VkIGZvciBpbnRlcmZhY2VzIGNvbm5lY3RlZCB0byBjb21wb25lbnRzCisgICAgICogICAgICAgICAgICAgICAgICAgICAgaW4gdGhlIHJ1bm5pbmcgc3RhdGUpCisgICAgICogXHJldHZhbCBDMl9CTE9DS0lORyAgdGhlIG9wZXJhdGlvbiBtdXN0IGJsb2NrIHRvIGNvbXBsZXRlIGJ1dCBtYXlCbG9jayBpcyBmYWxzZQorICAgICAqICAgICAgICAgICAgICAgICAgICAgICh0aGlzIGVycm9yIGNvZGUgaXMgb25seSBhbGxvd2VkIGZvciBpbnRlcmZhY2VzIGNvbm5lY3RlZCB0byBjb21wb25lbnRzKQorICAgICAqIFxyZXR2YWwgQzJfQ09SUlVQVEVEIHNvbWUgdW5rbm93biBlcnJvciBwcmV2ZW50ZWQgdGhlIG9wZXJhdGlvbiBmcm9tIGNvbXBsZXRpbmcgKHVuZXhwZWN0ZWQpCisgICAgICogICAgICAgICAgICAgICAgICAgICAgKHRoaXMgZXJyb3IgY29kZSBpcyBvbmx5IGFsbG93ZWQgZm9yIGludGVyZmFjZXMgY29ubmVjdGVkIHRvIGNvbXBvbmVudHMpCisgICAgICovCisgICAgdmlydHVhbCBjMl9zdGF0dXNfdCBxdWVyeVN1cHBvcnRlZFZhbHVlc192YigKKyAgICAgICAgICAgIHN0ZDo6dmVjdG9yPEMyRmllbGRTdXBwb3J0ZWRWYWx1ZXNRdWVyeT4gJmZpZWxkcywgYzJfYmxvY2tpbmdfdCBtYXlCbG9jaykgY29uc3QgPSAwOworCisgICAgdmlydHVhbCB+QzJDb21wb25lbnRJbnRlcmZhY2UoKSA9IGRlZmF1bHQ7Cit9OworCitjbGFzcyBDMkNvbXBvbmVudCB7CitwdWJsaWM6CisgICAgY2xhc3MgTGlzdGVuZXIgeworICAgIHB1YmxpYzoKKyAgICAgICAgdmlydHVhbCB2b2lkIG9uV29ya0RvbmVfbmIoc3RkOjp3ZWFrX3B0cjxDMkNvbXBvbmVudD4gY29tcG9uZW50LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGQ6Omxpc3Q8c3RkOjp1bmlxdWVfcHRyPEMyV29yaz4+IHdvcmtJdGVtcykgPSAwOworCisgICAgICAgIHZpcnR1YWwgdm9pZCBvblRyaXBwZWRfbmIoc3RkOjp3ZWFrX3B0cjxDMkNvbXBvbmVudD4gY29tcG9uZW50LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZDo6dmVjdG9yPHN0ZDo6c2hhcmVkX3B0cjxDMlNldHRpbmdSZXN1bHQ+PiBzZXR0aW5nUmVzdWx0KSA9IDA7CisKKyAgICAgICAgdmlydHVhbCB2b2lkIG9uRXJyb3JfbmIoc3RkOjp3ZWFrX3B0cjxDMkNvbXBvbmVudD4gY29tcG9uZW50LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCBlcnJvckNvZGUpID0gMDsKKworICAgICAgICAvLyB2aXJ0dWFsIHZvaWQgb25UdW5uZWxSZWxlYXNlZCg8ZnJvbT4sIDx0bz4pID0gMDsKKworICAgICAgICAvLyB2aXJ0dWFsIHZvaWQgb25Db21wb25lbnRSZWxlYXNlZCg8aWQ+KSA9IDA7CisKKyAgICAgICAgdmlydHVhbCB+TGlzdGVuZXIoKSA9IGRlZmF1bHQ7CisgICAgfTsKKworICAgIC8qKgorICAgICAqIFNldHMgdGhlIGxpc3RlbmVyIGZvciB0aGlzIGNvbXBvbmVudAorICAgICAqCisgICAgICogVGhpcyBtZXRob2QgTVVTVCBiZSBzdXBwb3J0ZWQgaW4gYWxsIHN0YXRlcyBleGNlcHQgcmVsZWFzZWQuCisgICAgICogVGhlIGxpc3RlbmVyIGNhbiBvbmx5IGJlIHNldCB0byBub24tbnVsbCB2YWx1ZSBpbiBzdG9wcGVkIHN0YXRlICh0aGF0IGRvZXMgbm90IGluY2x1ZGUKKyAgICAgKiB0cmlwcGVkIG9yIGVycm9yKS4gSXQgY2FuIGJlIHNldCB0byBudWxscHRyIGluIGJvdGggc3RvcHBlZCBhbmQgcnVubmluZyBzdGF0ZXMuCisgICAgICogQ29tcG9uZW50cyBvbmx5IHVzZSB0aGUgbGlzdGVuZXIgaW4gcnVubmluZyBzdGF0ZS4KKyAgICAgKgorICAgICAqIElmIGxpc3RlbmVyIGlzIG51bGxwdHIsIHRoZSBjb21wb25lbnQgU0hBTEwgZ3VhcmFudGVlIHRoYXQgbm8gbW9yZSBsaXN0ZW5lciBjYWxsYmFja3MgYXJlCisgICAgICogZG9uZSB0byB0aGUgb3JpZ2luYWwgbGlzdGVuZXIgb25jZSB0aGlzIG1ldGhvZCByZXR1cm5zLiAoQW55IHBlbmRpbmcgbGlzdGVuZXIgY2FsbGJhY2tzIHdpbGwKKyAgICAgKiBuZWVkIHRvIGJlIGNvbXBsZXRlZCBkdXJpbmcgdGhpcyBjYWxsIC0gaGVuY2UgdGhpcyBjYWxsIG1heSBiZSB0ZW1wb3JhcmlseSBibG9ja2luZy4pCisgICAgICoKKyAgICAgKiBUaGlzIG1ldGhvZCBoYXMgYSB2YXJpYWJsZSBibG9ja2luZyBiZWhhdmlvciBiYXNlZCBvbiBzdGF0ZS4KKyAgICAgKiBJbiB0aGUgc3RvcHBlZCBzdGF0ZSB0aGlzIG1ldGhvZCBNVVNUIGJlICJub24tYmxvY2tpbmciIGFuZCByZXR1cm4gd2l0aGluIDFtcy4KKyAgICAgKiBJbiB0aGUgcnVubmluZyBzdGF0ZXMgdGhpcyBtZXRob2QgbWF5IGJlIG1vbWVudGFyaWx5IGJsb2NraW5nLCBidXQgTVVTVCByZXR1cm4gd2l0aGluIDVtcy4KKyAgICAgKgorICAgICAqIENvbXBvbmVudCBTSEFMTCBoYW5kbGUgbGlzdGVuZXIgbm90aWZpY2F0aW9ucyBmcm9tIHRoZSBzYW1lIHRocmVhZCAodGhlIHRocmVhZCB1c2VkIGlzCisgICAgICogYXQgdGhlIGNvbXBvbmVudCdzIGRpc2NyZXRpb24uKQorICAgICAqCisgICAgICogXG5vdGUgVGhpcyBjb3VsZCBhbHNvIGJlIGFjY29tcGxpc2hlZCBieSBwYXNzaW5nIGEgd2Vha19wdHIgdG8gYSBjb21wb25lbnQtc3BlY2lmaWMgbGlzdGVuZXIKKyAgICAgKiBoZXJlIGFuZCByZXF1aXJpbmcgdGhlIGNsaWVudCB0byBhbHdheXMgcHJvbW90ZSB0aGUgd2Vha19wdHIgYmVmb3JlIGFueSBjYWxsYmFjay4gVGhpcyB3b3VsZAorICAgICAqIHB1dCB0aGUgYnVyZGVuIG9uIHRoZSBjbGllbnQgdG8gY2xlYXIgdGhlIGxpc3RlbmVyIC0gd2FpdCBmb3IgaXRzIGRlbGV0aW9uIC0gYXQgd2hpY2ggcG9pbnQKKyAgICAgKiBpdCBpcyBndWFyYW50ZWVkIHRoYXQgbm8gbW9yZSBsaXN0ZW5lciBjYWxsYmFja3Mgd2lsbCBvY2N1ci4KKyAgICAgKgorICAgICAqIFxwYXJhbVtpbl0gbGlzdGVuZXIgdGhlIGNvbXBvbmVudCBsaXN0ZW5lciBvYmplY3QKKyAgICAgKiBccGFyYW1baW5dIG1heUJsb2NrIGlmIHRydWUgKEMyX01BWV9CTE9DSyksIGltcGxlbWVudGF0aW9uIG1heSBtb21lbnRhcmlseSBibG9jay4KKyAgICAgKiAgICAgICAgICAgICAgICAgICAgIE90aGVyd2lzZSAoQzJfRE9OVF9CTE9DSyksIGl0IG11c3QgYmUgIm5vbi1ibG9ja2luZyIuCisgICAgICoKKyAgICAgKiBccmV0dmFsIEMyX0JBRF9TVEFURSBhdHRlbXB0aW5nIHRvIGNoYW5nZSB0aGUgbGlzdGVuZXIgaW4gdGhlIHJ1bm5pbmcgc3RhdGUgdG8gYSBub24tbnVsbAorICAgICAqICAgICAgICAgICAgICAgICAgICAgIHZhbHVlICh1c2VyIGVycm9yKSwgb3IgY2FsbGVkIGluIHRoZSByZWxlYXNlZCBzdGF0ZQorICAgICAqIFxyZXR2YWwgQzJfQkxPQ0tJTkcgIHRoZSBvcGVyYXRpb24gbXVzdCBibG9jayB0byBjb21wbGV0ZSBidXQgbWF5QmxvY2sgaXMgZmFsc2UKKyAgICAgKiBccmV0dmFsIEMyX09LICAgICAgICBsaXN0ZW5lciB3YXMgdXBkYXRlZCBzdWNjZXNzZnVsbHkuCisgICAgICovCisgICAgdmlydHVhbCBjMl9zdGF0dXNfdCBzZXRMaXN0ZW5lcl92YigKKyAgICAgICAgICAgIGNvbnN0IHN0ZDo6c2hhcmVkX3B0cjxMaXN0ZW5lcj4gJmxpc3RlbmVyLCBjMl9ibG9ja2luZ190IG1heUJsb2NrKSA9IDA7CisKKyAgICAvLy8gY29tcG9uZW50IGRvbWFpbiAoZS5nLiBhdWRpbyBvciB2aWRlbykKKyAgICBlbnVtIGRvbWFpbl90IDogdWludDMyX3Q7CisKKyAgICAvLy8gY29tcG9uZW50IGtpbmQgKGUuZy4gZW5jb2RlciwgZGVjb2RlciBvciBmaWx0ZXIpCisgICAgZW51bSBraW5kX3QgOiB1aW50MzJfdDsKKworICAgIC8vLyBjb21wb25lbnQgcmFuay4gVGhpcyBudW1iZXIgaXMgdXNlZCB0byBkZXRlcm1pbmUgY29tcG9uZW50IG9yZGVyaW5nICh0aGUgbG93ZXIgdGhlIHNvb25lcikKKyAgICAvLy8gaW4gdGhlIGNvbXBvbmVudCBsaXN0LgorICAgIHR5cGVkZWYgdWludDMyX3QgcmFua190OworCisgICAgLy8vIGNvbXBvbmVudCBhdHRyaWJ1dGVzCisgICAgZW51bSBhdHRyaWJfdCA6IHVpbnQ2NF90OworCisgICAgLyoqCisgICAgICogSW5mb3JtYXRpb24gYWJvdXQgYSBjb21wb25lbnQuCisgICAgICovCisgICAgc3RydWN0IFRyYWl0cyB7CisgICAgLy8gcHVibGljOgorICAgICAgICBDMlN0cmluZyBuYW1lOyAvLy88IG5hbWUgb2YgdGhlIGNvbXBvbmVudAorICAgICAgICBkb21haW5fdCBkb21haW47IC8vLzwgY29tcG9uZW50IGRvbWFpbgorICAgICAgICBraW5kX3Qga2luZDsgLy8vPCBjb21wb25lbnQga2luZAorICAgICAgICByYW5rX3QgcmFuazsgLy8vPCBjb21wb25lbnQgcmFuaworICAgICAgICBDMlN0cmluZyBtZWRpYVR5cGU7IC8vLzwgbWVkaWEgdHlwZSBzdXBwb3J0ZWQgYnkgdGhlIGNvbXBvbmVudAorCisgICAgICAgIC8qKgorICAgICAgICAgKiBuYW1lIGFsaWFzKGVzKSBmb3IgYmFja3dhcmQgY29tcGF0aWJpbGl0eS4KKyAgICAgICAgICogXG5vdGUgTXVsdGlwbGUgY29tcG9uZW50cyBjYW4gaGF2ZSB0aGUgc2FtZSBhbGlhcyBhcyBsb25nIGFzIHRoZWlyIG1lZGlhLXR5cGUgZGlmZmVycy4KKyAgICAgICAgICovCisgICAgICAgIHN0ZDo6dmVjdG9yPEMyU3RyaW5nTGl0ZXJhbD4gYWxpYXNlczsgLy8vPCBuYW1lIGFsaWFzZXMgZm9yIGJhY2t3YXJkIGNvbXBhdGliaWxpdHkKKyAgICB9OworCisgICAgLy8gTUVUSE9EUyBBVkFJTEFCTEUgV0hFTiBSVU5OSU5HCisgICAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKKyAgICAvKioKKyAgICAgKiBRdWV1ZXMgdXAgd29yayBmb3IgdGhlIGNvbXBvbmVudC4KKyAgICAgKgorICAgICAqIFRoaXMgbWV0aG9kIE1VU1QgYmUgc3VwcG9ydGVkIGluIHJ1bm5pbmcgKGluY2x1ZGluZyB0cmlwcGVkIGFuZCBlcnJvcikgc3RhdGVzLgorICAgICAqCisgICAgICogVGhpcyBtZXRob2QgTVVTVCBiZSAibm9uLWJsb2NraW5nIiBhbmQgcmV0dXJuIHdpdGhpbiAxIG1zCisgICAgICoKKyAgICAgKiBJdCBpcyBhY2NlcHRhYmxlIGZvciB0aGlzIG1ldGhvZCB0byByZXR1cm4gT0sgYW5kIHJldHVybiBhbiBlcnJvciB2YWx1ZSB1c2luZyB0aGUKKyAgICAgKiBvbldvcmtEb25lKCkgY2FsbGJhY2suCisgICAgICoKKyAgICAgKiBccmV0dmFsIEMyX09LICAgICAgICB0aGUgd29yayB3YXMgc3VjY2Vzc2Z1bGx5IHF1ZXVlZAorICAgICAqIFxyZXR2YWwgQzJfQkFEX0lOREVYIHNvbWUgY29tcG9uZW50KHMpIGluIHRoZSB3b3JrIGRvKGVzKSBub3QgZXhpc3QKKyAgICAgKiBccmV0dmFsIEMyX0NBTk5PVF9ETyB0aGUgY29tcG9uZW50cyBhcmUgbm90IHR1bm5lbGVkCisgICAgICogXHJldHZhbCBDMl9CQURfU1RBVEUgd2hlbiBjYWxsZWQgaW4gdGhlIHN0b3BwZWQgb3IgcmVsZWFzZWQgc3RhdGUgKHVzZXIgZXJyb3IpCisgICAgICoKKyAgICAgKiBccmV0dmFsIEMyX05PX01FTU9SWSBub3QgZW5vdWdoIG1lbW9yeSB0byBxdWV1ZSB0aGUgd29yaworICAgICAqIFxyZXR2YWwgQzJfQ09SUlVQVEVEIHNvbWUgdW5rbm93biBlcnJvciBwcmV2ZW50ZWQgcXVldWluZyB0aGUgd29yayAodW5leHBlY3RlZCkKKyAgICAgKi8KKyAgICB2aXJ0dWFsIGMyX3N0YXR1c190IHF1ZXVlX25iKHN0ZDo6bGlzdDxzdGQ6OnVuaXF1ZV9wdHI8QzJXb3JrPj4qIGNvbnN0IGl0ZW1zKSA9IDA7CisKKyAgICAvKioKKyAgICAgKiBBbm5vdW5jZXMgYSB3b3JrIHRvIGJlIHF1ZXVlZCBsYXRlciBmb3IgdGhlIGNvbXBvbmVudC4gVGhpcyByZXNlcnZlcyBhIHNsb3QgZm9yIHRoZSBxdWV1ZQorICAgICAqIHRvIGVuc3VyZSBjb3JyZWN0IHdvcmsgb3JkZXJpbmcgZXZlbiBpZiB0aGUgd29yayBpcyBxdWV1ZWQgbGF0ZXIuCisgICAgICoKKyAgICAgKiBUaGlzIG1ldGhvZCBNVVNUIGJlIHN1cHBvcnRlZCBpbiBydW5uaW5nIChpbmNsdWRpbmcgdHJpcHBlZCBhbmQgZXJyb3IpIHN0YXRlcy4KKyAgICAgKgorICAgICAqIFRoaXMgbWV0aG9kIE1VU1QgYmUgIm5vbi1ibG9ja2luZyIgYW5kIHJldHVybiB3aXRoaW4gMSBtcworICAgICAqCisgICAgICogXHJldHZhbCBDMl9PSyAgICAgICAgdGhlIHdvcmsgYW5ub3VuY2VtZW50IGhhcyBiZWVuIHN1Y2Nlc3NmdWxseSByZWNvcmRlZAorICAgICAqIFxyZXR2YWwgQzJfQkFEX0lOREVYIHNvbWUgY29tcG9uZW50KHMpIGluIHRoZSB3b3JrIG91dGxpbmUgZG8oZXMpIG5vdCBleGlzdAorICAgICAqIFxyZXR2YWwgQzJfQ0FOTk9UX0RPIHRoZSBjb21wb25lbnRlcyBhcmUgbm90IHR1bm5lbGVkCisgICAgICogXHJldHZhbCBDMl9CQURfU1RBVEUgd2hlbiBjYWxsZWQgaW4gdGhlIHN0b3BwZWQgb3IgcmVsZWFzZWQgc3RhdGUgKHVzZXIgZXJyb3IpCisgICAgICoKKyAgICAgKiBccmV0dmFsIEMyX05PX01FTU9SWSBub3QgZW5vdWdoIG1lbW9yeSB0byByZWNvcmQgdGhlIHdvcmsgYW5ub3VuY2VtZW50CisgICAgICogXHJldHZhbCBDMl9DT1JSVVBURUQgc29tZSB1bmtub3duIGVycm9yIHByZXZlbnRlZCByZWNvcmRpbmcgdGhlIGFubm91bmNlbWVudCAodW5leHBlY3RlZCkKKyAgICAgKgorICAgICAqIFx0b2RvIENhbiB0aGlzIGJlIHJvbGxlZCBpbnRvIHF1ZXVlX25iPworICAgICAqIFx0b2RvIEV4cG9zZSBuZXh0IHdvcmsgaXRlbSBmb3IgZWFjaCBjb21wb25lbnQgdG8gZGV0ZWN0IHN0YWxscworICAgICAqLworICAgIHZpcnR1YWwgYzJfc3RhdHVzX3QgYW5ub3VuY2VfbmIoY29uc3Qgc3RkOjp2ZWN0b3I8QzJXb3JrT3V0bGluZT4gJml0ZW1zKSA9IDA7CisKKyAgICBlbnVtIGZsdXNoX21vZGVfdCA6IHVpbnQzMl90IHsKKyAgICAgICAgLy8vIGZsdXNoIHdvcmsgZnJvbSB0aGlzIGNvbXBvbmVudCBvbmx5CisgICAgICAgIEZMVVNIX0NPTVBPTkVOVCwKKworICAgICAgICAvLy8gZmx1c2ggd29yayBmcm9tIHRoaXMgY29tcG9uZW50IGFuZCBhbGwgY29tcG9uZW50cyBjb25uZWN0ZWQgZG93bnN0cmVhbSBmcm9tIGl0IHZpYQorICAgICAgICAvLy8gdHVubmVsaW5nCisgICAgICAgIEZMVVNIX0NIQUlOID0gKDEgPDwgMTYpLAorICAgIH07CisKKyAgICAvKioKKyAgICAgKiBEaXNjYXJkcyBhbmQgYWJhbmRvbnMgYW55IHBlbmRpbmcgd29yayBmb3IgdGhlIGNvbXBvbmVudCwgYW5kIG9wdGlvbmFsbHkgYW55IGNvbXBvbmVudAorICAgICAqIGRvd25zdHJlYW0uCisgICAgICoKKyAgICAgKiBcdG9kbyBkZWZpbmUgdGhpczogd2UgY291bGQgZmx1c2ggYWxsIHdvcmsgYmVmb3JlIGxhc3QgaXRlbSBxdWV1ZWQgZm9yIGNvbXBvbmVudCBhY3Jvc3MgYWxsCisgICAgICogICAgICAgICAgICAgICAgICAgIGNvbXBvbmVudHMgbGlua2VkIHRvIHRoaXM7IGZsdXNoIG9ubHkgd29yayBpdGVtcyB0aGF0IGFyZSBxdWV1ZWQgdG8gdGhpcworICAgICAqICAgICAgICAgICAgICAgICAgICBjb21wb25lbnQKKyAgICAgKiBcdG9kbyByZXR1cm4gd29yayAjIG9mIGxhc3QgZmx1c2hlZCBpdGVtOyBvciBhbGwgZmx1c2hlZCAoYnV0IG5vdCByZXR1cm5lZCBpdGVtcykKKyAgICAgKiBcdG9kbyB3ZSBjb3VsZCBtYWtlIGZsdXNoIHRha2UgYSB3b3JrIGl0ZW0gYW5kIGZsdXNoIGFsbCB3b3JrIGJlZm9yZS9hZnRlciB0aGF0IGl0ZW0gdG8gYWxsb3cKKyAgICAgKiAgICAgICBUQkQgKHNsaWNpbmcvc2Vlaz8pCisgICAgICogXHRvZG8gd2UgY291bGQgc2ltcGx5IHRha2UgYSBsaXN0IG9mIG51bWJlcnMgYW5kIGZsdXNoIHRob3NlLi4uIHRoaXMgaXMgYmFkIGZvciBkZWNvZGVycworICAgICAqICAgICAgIGFsc28sIHdoYXQgd291bGQgaGFwcGVuIHRvIGZpbmUgZ3JhZGUgcmVmZXJlbmNlcz8KKyAgICAgKgorICAgICAqIFRoaXMgbWV0aG9kIE1VU1QgYmUgc3VwcG9ydGVkIGluIHJ1bm5pbmcgKGluY2x1ZGluZyB0cmlwcGVkIGFuZCBlcnJvcikgc3RhdGVzLgorICAgICAqCisgICAgICogVGhpcyBtZXRob2QgbWF5IGJlIG1vbWVudGFyaWx5IGJsb2NraW5nLCBidXQgbXVzdCByZXR1cm4gd2l0aGluIDVtcy4KKyAgICAgKgorICAgICAqIFdvcmsgdGhhdCBjb3VsZCBiZSBpbW1lZGlhdGVseSBhYmFuZG9uZWQvZGlzY2FyZGVkIFNIQUxMIGJlIHJldHVybmVkIGluIHxmbHVzaGVkV29ya3w7IHRoaXMKKyAgICAgKiBjYW4gYmUgZG9uZSBpbiBhbiBhcmJpdHJhcnkgb3JkZXIuCisgICAgICoKKyAgICAgKiBXb3JrIHRoYXQgY291bGQgbm90IGJlIGFiYW5kb25lZCBvciBkaXNjYXJkZWQgaW1tZWRpYXRlbHkgU0hBTEwgYmUgbWFya2VkIHRvIGJlCisgICAgICogZGlzY2FyZGVkIGF0IHRoZSBlYXJsaWVzdCBvcHBvcnR1bml0eSwgYW5kIFNIQUxMIGJlIHJldHVybmVkIHZpYSB0aGUgb25Xb3JrRG9uZSgpIGNhbGxiYWNrLgorICAgICAqIFRoaXMgc2hhbGwgYmUgY29tcGxldGVkIHdpdGhpbiA1MDBtcy4KKyAgICAgKgorICAgICAqIFxwYXJhbSBtb2RlIGZsdXNoIG1vZGUKKyAgICAgKgorICAgICAqIFxyZXR2YWwgQzJfT0sgICAgICAgIHRoZSBjb21wb25lbnQgaGFzIGJlZW4gc3VjY2Vzc2Z1bGx5IGZsdXNoZWQKKyAgICAgKiBccmV0dmFsIEMyX0JBRF9TVEFURSB3aGVuIGNhbGxlZCBpbiB0aGUgc3RvcHBlZCBvciByZWxlYXNlZCBzdGF0ZSAodXNlciBlcnJvcikKKyAgICAgKiBccmV0dmFsIEMyX1RJTUVEX09VVCB0aGUgZmx1c2ggY291bGQgbm90IGJlIGNvbXBsZXRlZCB3aXRoaW4gdGhlIHRpbWUgbGltaXQgKHVuZXhwZWN0ZWQpCisgICAgICogXHJldHZhbCBDMl9DT1JSVVBURUQgc29tZSB1bmtub3duIGVycm9yIHByZXZlbnRlZCBmbHVzaGluZyBmcm9tIGNvbXBsZXRpb24gKHVuZXhwZWN0ZWQpCisgICAgICovCisgICAgdmlydHVhbCBjMl9zdGF0dXNfdCBmbHVzaF9zbShmbHVzaF9tb2RlX3QgbW9kZSwgc3RkOjpsaXN0PHN0ZDo6dW5pcXVlX3B0cjxDMldvcms+PiogY29uc3QgZmx1c2hlZFdvcmspID0gMDsKKworICAgIGVudW0gZHJhaW5fbW9kZV90IDogdWludDMyX3QgeworICAgICAgICAvLy8gZHJhaW4gY29tcG9uZW50IG9ubHkgYW5kIGFkZCBhbiAiZW5kLW9mLXN0cmVhbSIgbWFya2VyLiBDb21wb25lbnQgc2hhbGwgcHJvY2VzcyBhbGwKKyAgICAgICAgLy8vIHF1ZXVlZCB3b3JrIGFuZCBjb21wbGV0ZSB0aGUgY3VycmVudCBzdHJlYW0uIElmIG5ldyBpbnB1dCBpcyByZWNlaXZlZCwgaXQgc2hhbGwgc3RhcnQKKyAgICAgICAgLy8vIGEgbmV3IHN0cmVhbS4gXHRvZG8gZGVmaW5lIHdoYXQgYSBzdHJlYW0gaXMuCisgICAgICAgIERSQUlOX0NPTVBPTkVOVF9XSVRIX0VPUywKKyAgICAgICAgLy8vIGRyYWluIGNvbXBvbmVudCB3aXRob3V0IHNldHRpbmcgImVuZC1vZi1zdHJlYW0iIG1hcmtlci4gQ29tcG9uZW50IHNoYWxsIHByb2Nlc3MgYWxsCisgICAgICAgIC8vLyBxdWV1ZWQgd29yayBidXQgc2hhbGwgZXhwZWN0IG1vcmUgd29yayBpdGVtcyBmb3IgdGhlIHNhbWUgc3RyZWFtLgorICAgICAgICBEUkFJTl9DT01QT05FTlRfTk9fRU9TID0gKDEgPDwgMCksCisKKyAgICAgICAgLy8vIG1hcmtzIHRoZSBsYXN0IHdvcmsgaXRlbSB3aXRoIGEgcGVyc2lzdGVudCAiZW5kLW9mLXN0cmVhbSIgbWFya2VyIHRoYXQgd2lsbCBkcmFpbgorICAgICAgICAvLy8gZG93bnN0cmVhbSBjb21wb25lbnRzCisgICAgICAgIC8vLyBcdG9kbyB0aGlzIG1heSBjb25mdXNlIHdvcmstb3JkZXJpbmcgZG93bnN0cmVhbQorICAgICAgICBEUkFJTl9DSEFJTiA9ICgxIDw8IDE2KSwKKworICAgICAgICAvKioKKyAgICAgICAgICogXHRvZG8gZGVmaW5lIHRoaXM7IHdlIGNvdWxkIHBsYWNlIEVPUyB0byBhbGwgdXBzdHJlYW0gY29tcG9uZW50cywganVzdCB0aGlzIGNvbXBvbmVudCwgb3IKKyAgICAgICAgICogICAgICAgYWxsIHVwc3RyZWFtIGFuZCBkb3duc3RyZWFtIGNvbXBvbmVudC4KKyAgICAgICAgICogXHRvZG8gc2hvdWxkIEVPUyBjYXJyeSBvdmVyIHRvIGRvd25zdHJlYW0gY29tcG9uZW50cz8KKyAgICAgICAgICovCisgICAgfTsKKworICAgIC8qKgorICAgICAqIERyYWlucyB0aGUgY29tcG9uZW50LCBhbmQgb3B0aW9uYWxseSBkb3duc3RyZWFtIGNvbXBvbmVudHMuIFRoaXMgaXMgYSBzaWduYWxsaW5nIG1ldGhvZDsKKyAgICAgKiBhcyBzdWNoIGl0IGRvZXMgbm90IHdhaXQgZm9yIGFueSB3b3JrIGNvbXBsZXRpb24uCisgICAgICoKKyAgICAgKiBNYXJrcyBsYXN0IHdvcmsgaXRlbSBhcyAiZHJhaW4tdGlsbC1oZXJlIiwgc28gY29tcG9uZW50IGlzIG5vdGlmaWVkIG5vdCB0byB3YWl0IGZvciBmdXJ0aGVyCisgICAgICogd29yayBiZWZvcmUgaXQgcHJvY2Vzc2VzIHdvcmsgYWxyZWFkeSBxdWV1ZWQuIFRoaXMgbWV0aG9kIGNhbiBhbHNvIHVzZWQgdG8gc2V0IHRoZQorICAgICAqIGVuZC1vZi1zdHJlYW0gZmxhZyBhZnRlciB3b3JrIGhhcyBiZWVuIHF1ZXVlZC4gQ2xpZW50IGNhbiBjb250aW51ZSB0byBxdWV1ZSBmdXJ0aGVyIHdvcmsKKyAgICAgKiBpbW1lZGlhdGVseSBhZnRlciB0aGlzIG1ldGhvZCByZXR1cm5zLgorICAgICAqCisgICAgICogVGhpcyBtZXRob2QgTVVTVCBiZSBzdXBwb3J0ZWQgaW4gcnVubmluZyAoaW5jbHVkaW5nIHRyaXBwZWQpIHN0YXRlcy4KKyAgICAgKgorICAgICAqIFRoaXMgbWV0aG9kIE1VU1QgYmUgIm5vbi1ibG9ja2luZyIgYW5kIHJldHVybiB3aXRoaW4gMW1zLgorICAgICAqCisgICAgICogV29yayB0aGF0IGlzIGNvbXBsZXRlZCBTSEFMTCBiZSByZXR1cm5lZCB2aWEgdGhlIG9uV29ya0RvbmUoKSBjYWxsYmFjay4KKyAgICAgKgorICAgICAqIFxwYXJhbSBtb2RlIGRyYWluIG1vZGUKKyAgICAgKgorICAgICAqIFxyZXR2YWwgQzJfT0sgICAgICAgIHRoZSBkcmFpbiByZXF1ZXN0IGhhcyBiZWVuIHN1Y2Nlc3NmdWxseSByZWNvcmRlZAorICAgICAqIFxyZXR2YWwgQzJfQkFEX1NUQVRFIHdoZW4gY2FsbGVkIGluIHRoZSBzdG9wcGVkIG9yIHJlbGVhc2VkIHN0YXRlICh1c2VyIGVycm9yKQorICAgICAqIFxyZXR2YWwgQzJfQkFEX1ZBTFVFIHRoZSBkcmFpbiBtb2RlIGlzIG5vdCBzdXBwb3J0ZWQgYnkgdGhlIGNvbXBvbmVudAorICAgICAqICAgICAgICAgICAgICAgICAgICAgIFx0b2RvIGRlZmluZSBzdXBwb3J0ZWQgbW9kZXMgZGlzY292ZXJ5CisgICAgICogXHJldHZhbCBDMl9USU1FRF9PVVQgdGhlIGZsdXNoIGNvdWxkIG5vdCBiZSBjb21wbGV0ZWQgd2l0aGluIHRoZSB0aW1lIGxpbWl0ICh1bmV4cGVjdGVkKQorICAgICAqIFxyZXR2YWwgQzJfQ09SUlVQVEVEIHNvbWUgdW5rbm93biBlcnJvciBwcmV2ZW50ZWQgZmx1c2hpbmcgZnJvbSBjb21wbGV0aW9uICh1bmV4cGVjdGVkKQorICAgICAqLworICAgIHZpcnR1YWwgYzJfc3RhdHVzX3QgZHJhaW5fbmIoZHJhaW5fbW9kZV90IG1vZGUpID0gMDsKKworICAgIC8vIFNUQVRFIENIQU5HRSBNRVRIT0RTCisgICAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKKyAgICAvKioKKyAgICAgKiBTdGFydHMgdGhlIGNvbXBvbmVudC4KKyAgICAgKgorICAgICAqIFRoaXMgbWV0aG9kIE1VU1QgYmUgc3VwcG9ydGVkIGluIHN0b3BwZWQgc3RhdGUsIGFzIHdlbGwgYXMgZHVyaW5nIHRoZSB0cmlwcGVkIHN0YXRlLgorICAgICAqCisgICAgICogSWYgdGhlIHJldHVybiB2YWx1ZSBpcyBDMl9PSywgdGhlIGNvbXBvbmVudCBzaGFsbCBiZSBpbiB0aGUgcnVubmluZyBzdGF0ZS4KKyAgICAgKiBJZiB0aGUgcmV0dXJuIHZhbHVlIGlzIEMyX0JBRF9TVEFURSBvciBDMl9EVVBMSUNBVEUsIG5vIHN0YXRlIGNoYW5nZSBpcyBleHBlY3RlZCBhcyBhCisgICAgICogcmVzcG9uc2UgdG8gdGhpcyBjYWxsLgorICAgICAqIE90aGVyd2lzZSwgdGhlIGNvbXBvbmVudCBzaGFsbCBiZSBpbiB0aGUgc3RvcHBlZCBzdGF0ZS4KKyAgICAgKgorICAgICAqIFxub3RlIElmIGEgY29tcG9uZW50IGlzIGluIHRoZSB0cmlwcGVkIHN0YXRlIGFuZCBzdGFydCgpIGlzIGNhbGxlZCB3aGlsZSB0aGUgY29tcG9uZW50CisgICAgICogY29uZmlndXJhdGlvbiBzdGlsbCByZXN1bHRzIGluIGEgdHJpcCwgc3RhcnQgc2hhbGwgc3VjY2VlZCBhbmQgYSBuZXcgb25UcmlwcGVkIGNhbGxiYWNrCisgICAgICogc2hvdWxkIGJlIHVzZWQgdG8gY29tbXVuaWNhdGUgdGhlIGNvbmZpZ3VyYXRpb24gY29uZmxpY3QgdGhhdCByZXN1bHRzIGluIHRoZSBuZXcgdHJpcC4KKyAgICAgKgorICAgICAqIFx0b2RvIFRoaXMgbWV0aG9kIE1VU1QgcmV0dXJuIHdpdGhpbiA1MDBtcy4gU2VlbXMgdGhpcyBzaG91bGQgYmUgYWJsZSB0byByZXR1cm4gcXVpY2tseSwgYXMKKyAgICAgKiB0aGVyZSBhcmUgbm8gaW1tZWRpYXRlIGd1YXJhbnRlZXMuIFRob3VnaCB0aGVyZSBhcmUgZ3VhcmFudGVlcyBmb3IgcmVzcG9uc2l2ZW5lc3MgaW1tZWRpYXRlbHkKKyAgICAgKiBhZnRlciBzdGFydCByZXR1cm5zLgorICAgICAqCisgICAgICogXHJldHZhbCBDMl9PSyAgICAgICAgdGhlIGNvbXBvbmVudCBoYXMgc3RhcnRlZCAob3IgcmVzdW1lZCkgc3VjY2Vzc2Z1bGx5CisgICAgICogXHJldHZhbCBDMl9EVVBMSUNBVEUgd2hlbiBjYWxsZWQgZHVyaW5nIGFub3RoZXIgc3RhcnQgY2FsbCBmcm9tIGFub3RoZXIgdGhyZWFkCisgICAgICogXHJldHZhbCBDMl9CQURfU1RBVEUgd2hlbiBjYWxsZWQgaW4gYW55IHN0YXRlIG90aGVyIHRoYW4gdGhlIHN0b3BwZWQgc3RhdGUgb3IgdHJpcHBlZCBzdGF0ZSwKKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICBpbmNsdWRpbmcgd2hlbiBjYWxsZWQgZHVyaW5nIGFub3RoZXIgc3RhdGUgY2hhbmdlIGNhbGwgZnJvbSBhbm90aGVyCisgICAgICogICAgICAgICAgICAgICAgICAgICAgdGhyZWFkICh1c2VyIGVycm9yKQorICAgICAqIFxyZXR2YWwgQzJfTk9fTUVNT1JZIG5vdCBlbm91Z2ggbWVtb3J5IHRvIHN0YXJ0IHRoZSBjb21wb25lbnQKKyAgICAgKiBccmV0dmFsIEMyX1RJTUVEX09VVCB0aGUgY29tcG9uZW50IGNvdWxkIG5vdCBiZSBzdGFydGVkIHdpdGhpbiB0aGUgdGltZSBsaW1pdCAodW5leHBlY3RlZCkKKyAgICAgKiBccmV0dmFsIEMyX0NPUlJVUFRFRCBzb21lIHVua25vd24gZXJyb3IgcHJldmVudGVkIHN0YXJ0aW5nIHRoZSBjb21wb25lbnQgKHVuZXhwZWN0ZWQpCisgICAgICovCisgICAgdmlydHVhbCBjMl9zdGF0dXNfdCBzdGFydCgpID0gMDsKKworICAgIC8qKgorICAgICAqIFN0b3BzIHRoZSBjb21wb25lbnQuCisgICAgICoKKyAgICAgKiBUaGlzIG1ldGhvZCBNVVNUIGJlIHN1cHBvcnRlZCBpbiBydW5uaW5nIChpbmNsdWRpbmcgdHJpcHBlZCkgc3RhdGUuCisgICAgICoKKyAgICAgKiBUaGlzIG1ldGhvZCBNVVNUIHJldHVybiB3aXRoaW5nIDUwMG1zLgorICAgICAqCisgICAgICogVXBvbiB0aGlzIGNhbGwsIGFsbCBwZW5kaW5nIHdvcmsgU0hBTEwgYmUgYWJhbmRvbmVkIGFuZCBhbGwgYnVmZmVyIHJlZmVyZW5jZXMgU0hBTEwgYmUKKyAgICAgKiByZWxlYXNlZC4KKyAgICAgKiBJZiB0aGUgcmV0dXJuIHZhbHVlIGlzIEMyX0JBRF9TVEFURSBvciBDMl9EVVBMSUNBVEUsIG5vIHN0YXRlIGNoYW5nZSBpcyBleHBlY3RlZCBhcyBhCisgICAgICogcmVzcG9uc2UgdG8gdGhpcyBjYWxsLgorICAgICAqIEZvciBhbGwgb3RoZXIgcmV0dXJuIHZhbHVlcywgdGhlIGNvbXBvbmVudCBzaGFsbCBiZSBpbiB0aGUgc3RvcHBlZCBzdGF0ZS4KKyAgICAgKgorICAgICAqIFx0b2RvIHNob3VsZCB0aGlzIHJldHVybiBjb21wbGV0ZWQgd29yaywgc2luY2UgY2xpZW50IHdpbGwganVzdCBmcmVlIGl0PyBQZXJoYXBzIGp1c3QgdG8KKyAgICAgKiB2ZXJpZnkgYWNjb3VudGluZy4KKyAgICAgKgorICAgICAqIFRoaXMgZG9lcyBub3QgYWx0ZXIgYW55IHNldHRpbmdzIGFuZCB0dW5pbmdzIHRoYXQgbWF5IGhhdmUgcmVzdWx0ZWQgaW4gYSB0cmlwcGVkIHN0YXRlLgorICAgICAqIChJcyB0aGlzIG1hdGVyaWFsIGdpdmVuIHRoZSBkZWZpbml0aW9uPyBQZXJoYXBzIGluIGNhc2Ugd2Ugd2FudCB0byBzdGFydCBhZ2Fpbi4pCisgICAgICoKKyAgICAgKiBccmV0dmFsIEMyX09LICAgICAgICB0aGUgY29tcG9uZW50IGhhcyBzdGFydGVkIHN1Y2Nlc3NmdWxseQorICAgICAqIFxyZXR2YWwgQzJfRFVQTElDQVRFIHdoZW4gY2FsbGVkIGR1cmluZyBhbm90aGVyIHN0b3AgY2FsbCBmcm9tIGFub3RoZXIgdGhyZWFkCisgICAgICogXHJldHZhbCBDMl9CQURfU1RBVEUgd2hlbiBjYWxsZWQgaW4gYW55IHN0YXRlIG90aGVyIHRoYW4gdGhlIHJ1bm5pbmcgc3RhdGUsIGluY2x1ZGluZyB3aGVuCisgICAgICogICAgICAgICAgICAgICAgICAgICAgY2FsbGVkIGR1cmluZyBhbm90aGVyIHN0YXRlIGNoYW5nZSBjYWxsIGZyb20gYW5vdGhlciB0aHJlYWQgKHVzZXIgZXJyb3IpCisgICAgICogXHJldHZhbCBDMl9USU1FRF9PVVQgdGhlIGNvbXBvbmVudCBjb3VsZCBub3QgYmUgc3RvcHBlZCB3aXRoaW4gdGhlIHRpbWUgbGltaXQgKHVuZXhwZWN0ZWQpCisgICAgICogXHJldHZhbCBDMl9DT1JSVVBURUQgc29tZSB1bmtub3duIGVycm9yIHByZXZlbnRlZCBzdG9wcGluZyB0aGUgY29tcG9uZW50ICh1bmV4cGVjdGVkKQorICAgICAqLworICAgIHZpcnR1YWwgYzJfc3RhdHVzX3Qgc3RvcCgpID0gMDsKKworICAgIC8qKgorICAgICAqIFJlc2V0cyB0aGUgY29tcG9uZW50LgorICAgICAqCisgICAgICogVGhpcyBtZXRob2QgTVVTVCBiZSBzdXBwb3J0ZWQgaW4gYWxsIChpbmNsdWRpbmcgdHJpcHBlZCkgc3RhdGVzIG90aGVyIHRoYW4gcmVsZWFzZWQuCisgICAgICoKKyAgICAgKiBUaGlzIG1ldGhvZCBNVVNUIGJlIHN1cHBvcnRlZCBkdXJpbmcgYW55IG90aGVyIGJsb2NraW5nIGNhbGwuCisgICAgICoKKyAgICAgKiBUaGlzIG1ldGhvZCBNVVNUIHJldHVybiB3aXRoaW5nIDUwMG1zLgorICAgICAqCisgICAgICogQWZ0ZXIgdGhpcyBjYWxsIHJldHVybnMgYWxsIHdvcmsgU0hBTEwgYmUgYWJhbmRvbmVkLCBhbGwgYnVmZmVyIHJlZmVyZW5jZXMgU0hBTEwgYmUgcmVsZWFzZWQuCisgICAgICogSWYgdGhlIHJldHVybiB2YWx1ZSBpcyBDMl9CQURfU1RBVEUgb3IgQzJfRFVQTElDQVRFLCBubyBzdGF0ZSBjaGFuZ2UgaXMgZXhwZWN0ZWQgYXMgYQorICAgICAqIHJlc3BvbnNlIHRvIHRoaXMgY2FsbC4KKyAgICAgKiBGb3IgYWxsIG90aGVyIHJldHVybiB2YWx1ZXMsIHRoZSBjb21wb25lbnQgc2hhbGwgYmUgaW4gdGhlIHN0b3BwZWQgc3RhdGUuCisgICAgICoKKyAgICAgKiBcdG9kbyBzaG91bGQgdGhpcyByZXR1cm4gY29tcGxldGVkIHdvcmssIHNpbmNlIGNsaWVudCB3aWxsIGp1c3QgZnJlZSBpdD8gQWxzbywgaWYgaXQgdW5ibG9ja3MKKyAgICAgKiBhIHN0b3AsIHdoZXJlIHNob3VsZCBjb21wbGV0ZWQgd29yayBiZSByZXR1cm5lZD8KKyAgICAgKgorICAgICAqIFRoaXMgYnJpbmdzIHNldHRpbmdzIGJhY2sgdG8gdGhlaXIgZGVmYXVsdCAtICJndWFyYW50ZWVpbmciIG5vIHRyaXBwZWQgc3BhY2UuCisgICAgICoKKyAgICAgKiBcdG9kbyByZWNsYWltIHN1cHBvcnQgLSBpdCBzZWVtcyB0aGF0IHNpbmNlIG93bmVyc2hpcCBpcyBwYXNzZWQsIHRoaXMgd2lsbCBhbGxvdyByZWNsYWltaW5nCisgICAgICogc3R1ZmYuCisgICAgICoKKyAgICAgKiBccmV0dmFsIEMyX09LICAgICAgICB0aGUgY29tcG9uZW50IGhhcyBiZWVuIHJlc2V0CisgICAgICogXHJldHZhbCBDMl9EVVBMSUNBVEUgd2hlbiBjYWxsZWQgZHVyaW5nIGFub3RoZXIgcmVzZXQgY2FsbCBmcm9tIGFub3RoZXIgdGhyZWFkCisgICAgICogXHJldHZhbCBDMl9CQURfU1RBVEUgd2hlbiBjYWxsZWQgaW4gdGhlIHJlbGVhc2VkIHN0YXRlCisgICAgICogXHJldHZhbCBDMl9USU1FRF9PVVQgdGhlIGNvbXBvbmVudCBjb3VsZCBub3QgYmUgcmVzZXQgd2l0aGluIHRoZSB0aW1lIGxpbWl0ICh1bmV4cGVjdGVkKQorICAgICAqIFxyZXR2YWwgQzJfQ09SUlVQVEVEIHNvbWUgdW5rbm93biBlcnJvciBwcmV2ZW50ZWQgcmVzZXR0aW5nIHRoZSBjb21wb25lbnQgKHVuZXhwZWN0ZWQpCisgICAgICovCisgICAgdmlydHVhbCBjMl9zdGF0dXNfdCByZXNldCgpID0gMDsKKworICAgIC8qKgorICAgICAqIFJlbGVhc2VzIHRoZSBjb21wb25lbnQuCisgICAgICoKKyAgICAgKiBUaGlzIG1ldGhvZCBNVVNUIGJlIHN1cHBvcnRlZCBpbiBzdG9wcGVkIHN0YXRlLgorICAgICAqCisgICAgICogVGhpcyBtZXRob2QgTVVTVCByZXR1cm4gd2l0aGluZyA1MDBtcy4gVXBvbiByZXR1cm4gYWxsIHJlZmVyZW5jZXMgc2hhbGwgYmUgYWJhbmRvbmVkLgorICAgICAqCisgICAgICogXHJldHZhbCBDMl9PSyAgICAgICAgdGhlIGNvbXBvbmVudCBoYXMgYmVlbiByZWxlYXNlZAorICAgICAqIFxyZXR2YWwgQzJfRFVQTElDQVRFIHRoZSBjb21wb25lbnQgaXMgYWxyZWFkeSByZWxlYXNlZAorICAgICAqIFxyZXR2YWwgQzJfQkFEX1NUQVRFIHRoZSBjb21wb25lbnQgaXMgcnVubmluZworICAgICAqIFxyZXR2YWwgQzJfVElNRURfT1VUIHRoZSBjb21wb25lbnQgY291bGQgbm90IGJlIHJlbGVhc2VkIHdpdGhpbiB0aGUgdGltZSBsaW1pdCAodW5leHBlY3RlZCkKKyAgICAgKiBccmV0dmFsIEMyX0NPUlJVUFRFRCBzb21lIHVua25vd24gZXJyb3IgcHJldmVudGVkIHJlbGVhc2luZyB0aGUgY29tcG9uZW50ICh1bmV4cGVjdGVkKQorICAgICAqLworICAgIHZpcnR1YWwgYzJfc3RhdHVzX3QgcmVsZWFzZSgpID0gMDsKKworICAgIC8qKgorICAgICAqIFJldHVybnMgdGhlIGludGVyZmFjZSBmb3IgdGhpcyBjb21wb25lbnQuCisgICAgICoKKyAgICAgKiBccmV0dXJuIHRoZSBjb21wb25lbnQgaW50ZXJmYWNlCisgICAgICovCisgICAgdmlydHVhbCBzdGQ6OnNoYXJlZF9wdHI8QzJDb21wb25lbnRJbnRlcmZhY2U+IGludGYoKSA9IDA7CisKKyAgICB2aXJ0dWFsIH5DMkNvbXBvbmVudCgpID0gZGVmYXVsdDsKK307CisKK0MyRU5VTShDMkNvbXBvbmVudDo6a2luZF90LCB1aW50MzJfdCwKKyAgICBLSU5EX09USEVSLAorICAgIEtJTkRfREVDT0RFUiwKKyAgICBLSU5EX0VOQ09ERVIKKyk7CisKK0MyRU5VTShDMkNvbXBvbmVudDo6ZG9tYWluX3QsIHVpbnQzMl90LAorICAgIERPTUFJTl9PVEhFUiwKKyAgICBET01BSU5fVklERU8sCisgICAgRE9NQUlOX0FVRElPLAorICAgIERPTUFJTl9JTUFHRQorKTsKKworY2xhc3MgQzJGcmFtZUluZm9QYXJzZXIgeworcHVibGljOgorICAgIC8qKgorICAgICAqIFxyZXR1cm4gdGhlIGNvbnRlbnQgdHlwZSBzdXBwb3J0ZWQgYnkgdGhpcyBpbmZvIHBhcnNlci4KKyAgICAgKgorICAgICAqIFx0b2RvIHRoaXMgbWF5IGJlIHJlZHVuZGFudAorICAgICAqLworICAgIHZpcnR1YWwgQzJTdHJpbmdMaXRlcmFsIGdldFR5cGUoKSBjb25zdCA9IDA7CisKKyAgICAvKioKKyAgICAgKiBccmV0dXJuIGEgdmVjdG9yIG9mIHN1cHBvcnRlZCBwYXJhbWV0ZXIgaW5kaWNlcyBwYXJzZWQgYnkgdGhpcyBpbmZvIHBhcnNlci4KKyAgICAgKgorICAgICAqIFRoaXMgbWV0aG9kIE1VU1QgYmUgIm5vbi1ibG9ja2luZyIgYW5kIHJldHVybiB3aXRoaW4gMW1zLgorICAgICAqCisgICAgICogXHRvZG8gc3RpY2t5IHZzLiBub24tc3RpY2t5IHBhcmFtcz8gdGhpcyBtYXkgYmUgY29tbXVuaWNhdGVkIGJ5IHBhcmFtLXJlZmxlY3Rvci4KKyAgICAgKi8KKyAgICB2aXJ0dWFsIGNvbnN0IHN0ZDo6dmVjdG9yPEMyUGFyYW06OkluZGV4PiBnZXRQYXJzZWRQYXJhbXMoKSBjb25zdCA9IDA7CisKKyAgICAvKioKKyAgICAgKiBSZXNldHMgdGhpcyBpbmZvIHBhcnNlci4gVGhpcyBicmluZ3MgdGhpcyBwYXJzZXIgdG8gaXRzIGluaXRpYWwgc3RhdGUgYWZ0ZXIgY3JlYXRpb24uCisgICAgICoKKyAgICAgKiBUaGlzIG1ldGhvZCBTSEFMTCByZXR1cm4gd2l0aGluIDVtcy4KKyAgICAgKgorICAgICAqIFxyZXR2YWwgQzJfT0sgICAgICAgIHRoZSBpbmZvIHBhcnNlciB3YXMgcmVzZXQKKyAgICAgKiBccmV0dmFsIEMyX1RJTUVEX09VVCBjb3VsZCBub3QgcmVzZXQgdGhlIHBhcnNlciB3aXRoaW4gdGhlIHRpbWUgbGltaXQgKHVuZXhwZWN0ZWQpCisgICAgICogXHJldHZhbCBDMl9DT1JSVVBURUQgc29tZSB1bmtub3duIGVycm9yIHByZXZlbnRlZCB0aGUgcmVzZXR0aW5nIG9mIHRoZSBwYXJzZXIgKHVuZXhwZWN0ZWQpCisgICAgICovCisgICAgdmlydHVhbCBjMl9zdGF0dXNfdCByZXNldCgpIHsgcmV0dXJuIEMyX09LOyB9CisKKyAgICB2aXJ0dWFsIGMyX3N0YXR1c190IHBhcnNlRnJhbWUoQzJGcmFtZURhdGEgJmZyYW1lKTsKKworICAgIHZpcnR1YWwgfkMyRnJhbWVJbmZvUGFyc2VyKCkgPSBkZWZhdWx0OworfTsKKworY2xhc3MgQzJBbGxvY2F0b3JTdG9yZSB7CitwdWJsaWM6CisgICAgdHlwZWRlZiBDMkFsbG9jYXRvcjo6aWRfdCBpZF90OworCisgICAgZW51bSA6IEMyQWxsb2NhdG9yOjppZF90IHsKKyAgICAgICAgREVGQVVMVF9MSU5FQVIsICAgICAvLy88IGJhc2ljIGxpbmVhciBhbGxvY2F0b3IgdHlwZQorICAgICAgICBERUZBVUxUX0dSQVBISUMsICAgIC8vLzwgYmFzaWMgZ3JhcGhpYyBhbGxvY2F0b3IgdHlwZQorICAgICAgICBQTEFURk9STV9TVEFSVCA9IDB4MTAsCisgICAgICAgIFZFTkRPUl9TVEFSVCAgID0gMHgxMDAsCisgICAgICAgIEJBRF9JRCAgICAgICAgID0gQzJBbGxvY2F0b3I6OkJBRF9JRCwgLy8vPCBETyBOT1QgVVNFCisgICAgfTsKKworICAgIC8qKgorICAgICAqIFJldHVybnMgdGhlIHVuaXF1ZSBuYW1lIG9mIHRoaXMgYWxsb2NhdG9yIHN0b3JlLgorICAgICAqCisgICAgICogVGhpcyBtZXRob2QgTVVTVCBiZSAibm9uLWJsb2NraW5nIiBhbmQgcmV0dXJuIHdpdGhpbiAxbXMuCisgICAgICoKKyAgICAgKiBccmV0dXJuIHRoZSBuYW1lIG9mIHRoaXMgYWxsb2NhdG9yIHN0b3JlLgorICAgICAqIFxyZXR2YWwgYW4gZW1wdHkgc3RyaW5nIGlmIHRoZXJlIHdhcyBub3QgZW5vdWdoIG1lbW9yeSB0byBhbGxvY2F0ZSB0aGUgYWN0dWFsIG5hbWUuCisgICAgICovCisgICAgdmlydHVhbCBDMlN0cmluZyBnZXROYW1lKCkgY29uc3QgPSAwOworCisgICAgLyoqCisgICAgICogUmV0dXJucyB0aGUgc2V0IG9mIGFsbG9jYXRvcnMgc3VwcG9ydGVkIGJ5IHRoaXMgYWxsb2NhdG9yIHN0b3JlLgorICAgICAqCisgICAgICogVGhpcyBtZXRob2QgTVVTVCBiZSAibm9uLWJsb2NraW5nIiBhbmQgcmV0dXJuIHdpdGhpbiAxbXMuCisgICAgICoKKyAgICAgKiBccmV0dmFsIHZlY3RvciBvZiBhbGxvY2F0b3IgaW5mb3JtYXRpb24gKGFzIHNoYXJlZCBwb2ludGVycykKKyAgICAgKiBccmV0dmFsIGFuIGVtcHR5IHZlY3RvciBpZiB0aGVyZSB3YXMgbm90IGVub3VnaCBtZW1vcnkgdG8gYWxsb2NhdGUgdGhlIHdob2xlIHZlY3Rvci4KKyAgICAgKi8KKyAgICB2aXJ0dWFsIHN0ZDo6dmVjdG9yPHN0ZDo6c2hhcmVkX3B0cjxjb25zdCBDMkFsbG9jYXRvcjo6VHJhaXRzPj4gbGlzdEFsbG9jYXRvcnNfbmIoKSBjb25zdCA9IDA7CisKKyAgICAvKioKKyAgICAgKiBSZXRyaWV2ZXMvY3JlYXRlcyBhIHNoYXJlZCBhbGxvY2F0b3Igb2JqZWN0LgorICAgICAqCisgICAgICogVGhpcyBtZXRob2QgTVVTVCBiZSByZXR1cm4gd2l0aGluIDVtcy4KKyAgICAgKgorICAgICAqIFRoZSBhbGxvY2F0b3IgaXMgY3JlYXRlZCBvbiBmaXJzdCB1c2UsIGFuZCB0aGUgc2FtZSBhbGxvY2F0b3IgaXMgcmV0dXJuZWQgb24gc3Vic2VxdWVudAorICAgICAqIGNvbmN1cnJlbnQgdXNlcyBpbiB0aGUgc2FtZSBwcm9jZXNzLiBUaGUgYWxsb2NhdG9yIGlzIGZyZWVkIHdoZW4gaXQgaXMgbm8gbG9uZ2VyIHJlZmVyZW5jZWQuCisgICAgICoKKyAgICAgKiBccGFyYW0gaWQgICAgICB0aGUgSUQgb2YgdGhlIGFsbG9jYXRvciB0byBjcmVhdGUuIFRoaXMgaXMgZGVmaW5lZCBieSB0aGUgc3RvcmUsIGJ1dAorICAgICAqICAgICAgICAgICAgICAgIHRoZSBJRCBvZiB0aGUgZGVmYXVsdCBsaW5lYXIgYW5kIGdyYXBoaWMgYWxsb2NhdG9ycyBpcyBmb3JtYWxpemVkLgorICAgICAqIFxwYXJhbSBhbGxvY2F0b3Igc2hhcmVkIHBvaW50ZXIgd2hlcmUgdGhlIGNyZWF0ZWQgYWxsb2NhdG9yIGlzIHN0b3JlZC4gQ2xlYXJlZCBvbiBmYWlsdXJlCisgICAgICogICAgICAgICAgICAgICAgICBhbmQgdXBkYXRlZCBvbiBzdWNjZXNzLgorICAgICAqCisgICAgICogXHJldHZhbCBDMl9PSyAgICAgICAgdGhlIGFsbG9jYXRvciB3YXMgY3JlYXRlZCBzdWNjZXNzZnVsbHkKKyAgICAgKiBccmV0dmFsIEMyX1RJTUVEX09VVCBjb3VsZCBub3QgY3JlYXRlIHRoZSBhbGxvY2F0b3Igd2l0aGluIHRoZSB0aW1lIGxpbWl0ICh1bmV4cGVjdGVkKQorICAgICAqIFxyZXR2YWwgQzJfQ09SUlVQVEVEIHNvbWUgdW5rbm93biBlcnJvciBwcmV2ZW50ZWQgdGhlIGNyZWF0aW9uIG9mIHRoZSBhbGxvY2F0b3IgKHVuZXhwZWN0ZWQpCisgICAgICoKKyAgICAgKiBccmV0dmFsIEMyX05PVF9GT1VORCBubyBzdWNoIGFsbG9jYXRvcgorICAgICAqIFxyZXR2YWwgQzJfTk9fTUVNT1JZIG5vdCBlbm91Z2ggbWVtb3J5IHRvIGNyZWF0ZSB0aGUgYWxsb2NhdG9yCisgICAgICovCisgICAgdmlydHVhbCBjMl9zdGF0dXNfdCBmZXRjaEFsbG9jYXRvcihpZF90IGlkLCBzdGQ6OnNoYXJlZF9wdHI8QzJBbGxvY2F0b3I+KiBjb25zdCBhbGxvY2F0b3IpID0gMDsKKworICAgIHZpcnR1YWwgfkMyQWxsb2NhdG9yU3RvcmUoKSA9IGRlZmF1bHQ7Cit9OworCitjbGFzcyBDMkNvbXBvbmVudFN0b3JlIHsKK3B1YmxpYzoKKyAgICAvKioKKyAgICAgKiBSZXR1cm5zIHRoZSBuYW1lIG9mIHRoaXMgY29tcG9uZW50IG9yIGNvbXBvbmVudCBpbnRlcmZhY2Ugb2JqZWN0LgorICAgICAqIFRoaXMgaXMgYSB1bmlxdWUgbmFtZSBmb3IgdGhpcyBjb21wb25lbnQgb3IgY29tcG9uZW50IGludGVyZmFjZSAnY2xhc3MnOyBob3dldmVyLCBtdWx0aXBsZQorICAgICAqIGluc3RhbmNlcyBvZiB0aGlzIGNvbXBvbmVudCBTSEFMTCBoYXZlIHRoZSBzYW1lIG5hbWUuCisgICAgICoKKyAgICAgKiBUaGlzIG1ldGhvZCBNVVNUIGJlIHN1cHBvcnRlZCBpbiBhbnkgc3RhdGUuIFRoaXMgY2FsbCBkb2VzIG5vdCBjaGFuZ2UgdGhlIHN0YXRlIG5vciB0aGUKKyAgICAgKiBpbnRlcm5hbCBzdGF0ZXMgb2YgdGhlIGNvbXBvbmVudC4KKyAgICAgKgorICAgICAqIFRoaXMgbWV0aG9kIE1VU1QgYmUgIm5vbi1ibG9ja2luZyIgYW5kIHJldHVybiB3aXRoaW4gMW1zLgorICAgICAqCisgICAgICogXHJldHVybiB0aGUgbmFtZSBvZiB0aGlzIGNvbXBvbmVudCBvciBjb21wb25lbnQgaW50ZXJmYWNlIG9iamVjdC4KKyAgICAgKiBccmV0dmFsIGFuIGVtcHR5IHN0cmluZyBpZiB0aGVyZSB3YXMgbm90IGVub3VnaCBtZW1vcnkgdG8gYWxsb2NhdGUgdGhlIGFjdHVhbCBuYW1lLgorICAgICAqLworICAgIHZpcnR1YWwgQzJTdHJpbmcgZ2V0TmFtZSgpIGNvbnN0ID0gMDsKKworICAgIC8qKgorICAgICAqIENyZWF0ZXMgYSBjb21wb25lbnQuCisgICAgICoKKyAgICAgKiBUaGlzIG1ldGhvZCBTSEFMTCByZXR1cm4gd2l0aGluIDEwMG1zLgorICAgICAqCisgICAgICogXHBhcmFtIG5hbWUgICAgICAgICAgbmFtZSBvZiB0aGUgY29tcG9uZW50IHRvIGNyZWF0ZQorICAgICAqIFxwYXJhbSBjb21wb25lbnQgICAgIHNoYXJlZCBwb2ludGVyIHdoZXJlIHRoZSBjcmVhdGVkIGNvbXBvbmVudCBpcyBzdG9yZWQuIENsZWFyZWQgb24KKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICBmYWlsdXJlIGFuZCB1cGRhdGVkIG9uIHN1Y2Nlc3MuCisgICAgICoKKyAgICAgKiBccmV0dmFsIEMyX09LICAgICAgICB0aGUgY29tcG9uZW50IHdhcyBjcmVhdGVkIHN1Y2Nlc3NmdWxseQorICAgICAqIFxyZXR2YWwgQzJfVElNRURfT1VUIGNvdWxkIG5vdCBjcmVhdGUgdGhlIGNvbXBvbmVudCB3aXRoaW4gdGhlIHRpbWUgbGltaXQgKHVuZXhwZWN0ZWQpCisgICAgICogXHJldHZhbCBDMl9DT1JSVVBURUQgc29tZSB1bmtub3duIGVycm9yIHByZXZlbnRlZCB0aGUgY3JlYXRpb24gb2YgdGhlIGNvbXBvbmVudCAodW5leHBlY3RlZCkKKyAgICAgKgorICAgICAqIFxyZXR2YWwgQzJfTk9UX0ZPVU5EIG5vIHN1Y2ggY29tcG9uZW50CisgICAgICogXHJldHZhbCBDMl9OT19NRU1PUlkgbm90IGVub3VnaCBtZW1vcnkgdG8gY3JlYXRlIHRoZSBjb21wb25lbnQKKyAgICAgKi8KKyAgICB2aXJ0dWFsIGMyX3N0YXR1c190IGNyZWF0ZUNvbXBvbmVudCgKKyAgICAgICAgICAgIEMyU3RyaW5nIG5hbWUsIHN0ZDo6c2hhcmVkX3B0cjxDMkNvbXBvbmVudD4qIGNvbnN0IGNvbXBvbmVudCkgPSAwOworCisgICAgLyoqCisgICAgICogQ3JlYXRlcyBhIGNvbXBvbmVudCBpbnRlcmZhY2UuCisgICAgICoKKyAgICAgKiBUaGlzIG1ldGhvZCBTSEFMTCByZXR1cm4gd2l0aGluIDEwMG1zLgorICAgICAqCisgICAgICogXHBhcmFtIG5hbWUgICAgICAgICAgbmFtZSBvZiB0aGUgY29tcG9uZW50IGludGVyZmFjZSB0byBjcmVhdGUKKyAgICAgKiBccGFyYW0gaW50ZXJmYWNlICAgICBzaGFyZWQgcG9pbnRlciB3aGVyZSB0aGUgY3JlYXRlZCBpbnRlcmZhY2UgaXMgc3RvcmVkCisgICAgICoKKyAgICAgKiBccmV0dmFsIEMyX09LICAgICAgICB0aGUgY29tcG9uZW50IGludGVyZmFjZSB3YXMgY3JlYXRlZCBzdWNjZXNzZnVsbHkKKyAgICAgKiBccmV0dmFsIEMyX1RJTUVEX09VVCBjb3VsZCBub3QgY3JlYXRlIHRoZSBjb21wb25lbnQgaW50ZXJmYWNlIHdpdGhpbiB0aGUgdGltZSBsaW1pdAorICAgICAqICAgICAgICAgICAgICAgICAgICAgICh1bmV4cGVjdGVkKQorICAgICAqIFxyZXR2YWwgQzJfQ09SUlVQVEVEIHNvbWUgdW5rbm93biBlcnJvciBwcmV2ZW50ZWQgdGhlIGNyZWF0aW9uIG9mIHRoZSBjb21wb25lbnQgaW50ZXJmYWNlCisgICAgICogICAgICAgICAgICAgICAgICAgICAgKHVuZXhwZWN0ZWQpCisgICAgICoKKyAgICAgKiBccmV0dmFsIEMyX05PVF9GT1VORCBubyBzdWNoIGNvbXBvbmVudCBpbnRlcmZhY2UKKyAgICAgKiBccmV0dmFsIEMyX05PX01FTU9SWSBub3QgZW5vdWdoIG1lbW9yeSB0byBjcmVhdGUgdGhlIGNvbXBvbmVudCBpbnRlcmZhY2UKKyAgICAgKgorICAgICAqIFx0b2RvIERvIHdlIG5lZWQgYW4gaW50ZXJmYWNlLCBvciBjb3VsZCB0aGlzIGp1c3QgYmUgYSBjb21wb25lbnQgdGhhdCBpcyBuZXZlciBzdGFydGVkPworICAgICAqLworICAgIHZpcnR1YWwgYzJfc3RhdHVzX3QgY3JlYXRlSW50ZXJmYWNlKAorICAgICAgICAgICAgQzJTdHJpbmcgbmFtZSwgc3RkOjpzaGFyZWRfcHRyPEMyQ29tcG9uZW50SW50ZXJmYWNlPiogY29uc3QgaW50ZXJmYWNlKSA9IDA7CisKKyAgICAvKioKKyAgICAgKiBSZXR1cm5zIHRoZSBsaXN0IG9mIGNvbXBvbmVudHMgc3VwcG9ydGVkIGJ5IHRoaXMgY29tcG9uZW50IHN0b3JlLgorICAgICAqCisgICAgICogVGhpcyBtZXRob2QgTVVTVCByZXR1cm4gd2l0aGluIDUwMG1zLgorICAgICAqCisgICAgICogXHJldHZhbCB2ZWN0b3Igb2YgY29tcG9uZW50IGluZm9ybWF0aW9uLgorICAgICAqLworICAgIHZpcnR1YWwgc3RkOjp2ZWN0b3I8c3RkOjpzaGFyZWRfcHRyPGNvbnN0IEMyQ29tcG9uZW50OjpUcmFpdHM+PiBsaXN0Q29tcG9uZW50cygpID0gMDsKKworICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIFVUSUxJVFkgTUVUSE9EUyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisgICAgLy8gb24tZGVtYW5kIGJ1ZmZlciBsYXlvdXQgY29udmVyc2lvbiAoc3dpenpsaW5nKQorICAgIC8vCisgICAgdmlydHVhbCBjMl9zdGF0dXNfdCBjb3B5QnVmZmVyKAorICAgICAgICAgICAgc3RkOjpzaGFyZWRfcHRyPEMyR3JhcGhpY0J1ZmZlcj4gc3JjLCBzdGQ6OnNoYXJlZF9wdHI8QzJHcmFwaGljQnVmZmVyPiBkc3QpID0gMDsKKworICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIENPTkZJR1VSQVRJT04gQVBJIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgLy8gZS5nLiBmb3IgZ2xvYmFsIHNldHRpbmdzIChzeXN0ZW0td2lkZSBzdHJpZGUsIGV0Yy4pCisKKyAgICAvKioKKyAgICAgKiBRdWVyaWVzIGEgc2V0IG9mIHN5c3RlbS13aWRlIHBhcmFtZXRlcnMuCisgICAgICogUXVlcnlpbmcgaXMgcGVyZm9ybWVkIGF0IGJlc3QgZWZmb3J0OiB0aGUgc3RvcmUgU0hBTEwgcXVlcnkgYWxsIHN1cHBvcnRlZCBwYXJhbWV0ZXJzIGFuZAorICAgICAqIHNraXAgdW5zdXBwb3J0ZWQgb25lcywgb3IgaGVhcCBhbGxvY2F0ZWQgcGFyYW1ldGVycyB0aGF0IGNvdWxkIG5vdCBiZSBhbGxvY2F0ZWQuIEFueSBlcnJvcnMKKyAgICAgKiBhcmUgY29tbXVuaWNhdGVkIGluIHRoZSByZXR1cm4gdmFsdWUuIEFkZGl0aW9uYWxseSwgcHJlYWxsb2NhdGVkIChlLmcuIHN0YWNrKSBwYXJhbWV0ZXJzIHRoYXQKKyAgICAgKiBjb3VsZCBub3QgYmUgcXVlcmllZCBhcmUgaW52YWxpZGF0ZWQuIFBhcmFtZXRlcnMgdG8gYmUgYWxsb2NhdGVkIG9uIHRoZSBoZWFwIGFyZSBvbWl0dGVkIGZyb20KKyAgICAgKiB0aGUgcmVzdWx0LgorICAgICAqCisgICAgICogXG5vdGUgUGFyYW1ldGVyIHZhbHVlcyBkbyBub3QgZGVwZW5kIG9uIHRoZSBvcmRlciBvZiBxdWVyeS4KKyAgICAgKgorICAgICAqIFRoaXMgbWV0aG9kIG1heSBiZSBtb21lbnRhcmlseSBibG9ja2luZywgYnV0IE1VU1QgcmV0dXJuIHdpdGhpbiA1bXMuCisgICAgICoKKyAgICAgKiBccGFyYW0gc3RhY2tQYXJhbXMgICBhIGxpc3Qgb2YgcGFyYW1zIHF1ZXJpZWQuIFRoZXNlIGFyZSBpbml0aWFsaXplZCBzcGVjaWZpYyB0byBlYWNoCisgICAgICogICAgICAgICAgICAgICAgICAgICAgc2V0dGluZzsgZS5nLiBzaXplIGFuZCBpbmRleCBhcmUgc2V0IGFuZCByZXN0IG9mIHRoZSBtZW1iZXJzIGFyZQorICAgICAqICAgICAgICAgICAgICAgICAgICAgIGNsZWFyZWQuCisgICAgICogICAgICAgICAgICAgICAgICAgICAgTk9URTogRmxleGlibGUgc2V0dGluZ3MgdGhhdCBhcmUgb2YgaW5jb3JyZWN0IHNpemUgd2lsbCBiZSBpbnZhbGlkYXRlZC4KKyAgICAgKiBccGFyYW0gaGVhcFBhcmFtSW5kaWNlcyBhIHZlY3RvciBvZiBwYXJhbSBpbmRpY2VzIGZvciBwYXJhbXMgdG8gYmUgcXVlcmllZCBhbmQgcmV0dXJuZWQgb24gdGhlCisgICAgICogICAgICAgICAgICAgICAgICAgICAgaGVhcC4gVGhlc2UgcGFyYW1ldGVycyB3aWxsIGJlIHJldHVybmVkIGluIGhlYXBQYXJhbXMuIFVuc3VwcG9ydGVkIHBhcmFtCisgICAgICogICAgICAgICAgICAgICAgICAgICAgaW5kaWNlcyB3aWxsIGJlIGlnbm9yZWQuCisgICAgICogXHBhcmFtIGhlYXBQYXJhbXMgICAgYSBsaXN0IG9mIHBhcmFtcyB3aGVyZSB0byB3aGljaCB0aGUgc3VwcG9ydGVkIGhlYXAgcGFyYW1ldGVycyB3aWxsIGJlCisgICAgICogICAgICAgICAgICAgICAgICAgICAgYXBwZW5kZWQgaW4gdGhlIG9yZGVyIHRoZXkgYXBwZWFyIGluIGhlYXBQYXJhbUluZGljZXMuCisgICAgICoKKyAgICAgKiBccmV0dmFsIEMyX09LICAgICAgICBhbGwgcGFyYW1ldGVycyBjb3VsZCBiZSBxdWVyaWVkCisgICAgICogXHJldHZhbCBDMl9CQURfSU5ERVggYWxsIHN1cHBvcnRlZCBwYXJhbWV0ZXJzIGNvdWxkIGJlIHF1ZXJpZWQsIGJ1dCBzb21lIHBhcmFtZXRlcnMgd2VyZSBub3QKKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICBzdXBwb3J0ZWQKKyAgICAgKiBccmV0dmFsIEMyX05PX01FTU9SWSBjb3VsZCBub3QgYWxsb2NhdGUgbWVtb3J5IGZvciBhIHN1cHBvcnRlZCBwYXJhbWV0ZXIKKyAgICAgKiBccmV0dmFsIEMyX0NPUlJVUFRFRCBzb21lIHVua25vd24gZXJyb3IgcHJldmVudGVkIHRoZSBxdWVyeWluZyBvZiB0aGUgcGFyYW1ldGVycworICAgICAqICAgICAgICAgICAgICAgICAgICAgICh1bmV4cGVjdGVkKQorICAgICAqLworICAgIHZpcnR1YWwgYzJfc3RhdHVzX3QgcXVlcnlfc20oCisgICAgICAgIGNvbnN0IHN0ZDo6dmVjdG9yPEMyUGFyYW0qPiAmc3RhY2tQYXJhbXMsCisgICAgICAgIGNvbnN0IHN0ZDo6dmVjdG9yPEMyUGFyYW06OkluZGV4PiAmaGVhcFBhcmFtSW5kaWNlcywKKyAgICAgICAgc3RkOjp2ZWN0b3I8c3RkOjp1bmlxdWVfcHRyPEMyUGFyYW0+PiogY29uc3QgaGVhcFBhcmFtcykgY29uc3QgPSAwOworCisgICAgLyoqCisgICAgICogU2V0cyBhIHNldCBvZiBzeXN0ZW0td2lkZSBwYXJhbWV0ZXJzLgorICAgICAqCisgICAgICogXG5vdGUgVGhlcmUgYXJlIG5vIHNldHRhYmxlIHN5c3RlbS13aWRlIHBhcmFtZXRlcnMgZGVmaW5lZCB0aHVzIGZhciwgYnV0IG1heSBiZSBhZGRlZCBpbiB0aGUKKyAgICAgKiBmdXR1cmUuCisgICAgICoKKyAgICAgKiBUdW5pbmcgaXMgcGVyZm9ybWVkIGF0IGJlc3QgZWZmb3J0OiB0aGUgc3RvcmUgU0hBTEwgdXBkYXRlIGFsbCBzdXBwb3J0ZWQgY29uZmlndXJhdGlvbiBhdAorICAgICAqIGJlc3QgZWZmb3J0ICh1bmxlc3MgY29uZmlndXJlZCBvdGhlcndpc2UpIGFuZCBza2lwIHVuc3VwcG9ydGVkIG9uZXMuIEFueSBlcnJvcnMgYXJlCisgICAgICogY29tbXVuaWNhdGVkIGluIHRoZSByZXR1cm4gdmFsdWUgYW5kIGluIHxmYWlsdXJlc3wuCisgICAgICoKKyAgICAgKiBcbm90ZSBQYXJhbWV0ZXIgdHVuaW5nIERPRVMgZGVwZW5kIG9uIHRoZSBvcmRlciBvZiB0aGUgdHVuaW5nIHBhcmFtZXRlcnMuIEUuZy4gc29tZSBwYXJhbWV0ZXIKKyAgICAgKiB1cGRhdGUgbWF5IGFsbG93IHNvbWUgc3Vic2VxdWVudCBwYXJhbWV0ZXIgdXBkYXRlLgorICAgICAqCisgICAgICogVGhpcyBtZXRob2QgbWF5IGJlIG1vbWVudGFyaWx5IGJsb2NraW5nLCBidXQgTVVTVCByZXR1cm4gd2l0aGluIDVtcy4KKyAgICAgKgorICAgICAqIFxwYXJhbSBwYXJhbXMgICAgICAgIGEgbGlzdCBvZiBwYXJhbWV0ZXIgdXBkYXRlcy4gVGhlc2Ugd2lsbCBiZSB1cGRhdGVkIHRvIHRoZSBhY3R1YWwKKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICBwYXJhbWV0ZXIgdmFsdWVzIGFmdGVyIHRoZSB1cGRhdGVzICh0aGlzIGlzIGJlY2F1c2UgdHVuaW5nIGlzIHBlcmZvcm1lZAorICAgICAqICAgICAgICAgICAgICAgICAgICAgIGF0IGJlc3QgZWZmb3J0KS4KKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICBcdG9kbyBwYXJhbXMgdGhhdCBjb3VsZCBub3QgYmUgdXBkYXRlZCBhcmUgbm90IG1hcmtlZCBoZXJlLCBzbyBhcmUKKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICBjb25mdXNpbmcgLSBhcmUgdGhleSAiZXhpc3RpbmciIHZhbHVlcyBvciBpbnRlbmRlZCB0byBiZSBjb25maWd1cmVkCisgICAgICogICAgICAgICAgICAgICAgICAgICAgdmFsdWVzPworICAgICAqIFxwYXJhbSBmYWlsdXJlcyAgICAgIGEgbGlzdCBvZiBwYXJhbWV0ZXIgZmFpbHVyZXMKKyAgICAgKgorICAgICAqIFxyZXR2YWwgQzJfT0sgICAgICAgIGFsbCBwYXJhbWV0ZXJzIGNvdWxkIGJlIHVwZGF0ZWQgc3VjY2Vzc2Z1bGx5CisgICAgICogXHJldHZhbCBDMl9CQURfSU5ERVggYWxsIHN1cHBvcnRlZCBwYXJhbWV0ZXJzIGNvdWxkIGJlIHVwZGF0ZWQgc3VjY2Vzc2Z1bGx5LCBidXQgc29tZQorICAgICAqICAgICAgICAgICAgICAgICAgICAgIHBhcmFtZXRlcnMgd2VyZSBub3Qgc3VwcG9ydGVkCisgICAgICogXHJldHZhbCBDMl9CQURfVkFMVUUgc29tZSBzdXBwb3J0ZWQgcGFyYW1ldGVycyBjb3VsZCBub3QgYmUgdXBkYXRlZCBzdWNjZXNzZnVsbHkgYmVjYXVzZQorICAgICAqICAgICAgICAgICAgICAgICAgICAgIHRoZXkgY29udGFpbmVkIHVuc3VwcG9ydGVkIHZhbHVlcy4gVGhlc2UgYXJlIHJldHVybmVkIGluIHxmYWlsdXJlc3wuCisgICAgICogXHJldHZhbCBDMl9OT19NRU1PUlkgc29tZSBzdXBwb3J0ZWQgcGFyYW1ldGVycyBjb3VsZCBub3QgYmUgdXBkYXRlZCBzdWNjZXNzZnVsbHkgYmVjYXVzZQorICAgICAqICAgICAgICAgICAgICAgICAgICAgIHRoZXkgY29udGFpbmVkIHVuc3VwcG9ydGVkIHZhbHVlcywgYnV0IGNvdWxkIG5vdCBhbGxvY2F0ZSBhIGZhaWx1cmUKKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICBvYmplY3QgZm9yIHRoZW0uCisgICAgICogXHJldHZhbCBDMl9DT1JSVVBURUQgc29tZSB1bmtub3duIGVycm9yIHByZXZlbnRlZCB0aGUgdXBkYXRlIG9mIHRoZSBwYXJhbWV0ZXJzCisgICAgICogICAgICAgICAgICAgICAgICAgICAgKHVuZXhwZWN0ZWQpCisgICAgICovCisgICAgdmlydHVhbCBjMl9zdGF0dXNfdCBjb25maWdfc20oCisgICAgICAgICAgICBjb25zdCBzdGQ6OnZlY3RvcjxDMlBhcmFtKj4gJnBhcmFtcywKKyAgICAgICAgICAgIHN0ZDo6dmVjdG9yPHN0ZDo6dW5pcXVlX3B0cjxDMlNldHRpbmdSZXN1bHQ+PiogY29uc3QgZmFpbHVyZXMpID0gMDsKKworICAgIC8vIFJFRkxFQ1RJT04gTUVDSEFOSVNNIChVU0VEIEZPUiBFWFRFTlNJT04pCisgICAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKKyAgICAvKioKKyAgICAgKiBSZXR1cm5zIHRoZSBwYXJhbWV0ZXIgcmVmbGVjdG9yLgorICAgICAqCisgICAgICogVGhpcyBpcyB1c2VkIHRvIGRlc2NyaWJlIHBhcmFtZXRlciBmaWVsZHMuIFRoaXMgaXMgc2hhcmVkIGZvciBhbGwgY29tcG9uZW50cyBjcmVhdGVkIGJ5CisgICAgICogdGhpcyBjb21wb25lbnQgc3RvcmUuCisgICAgICoKKyAgICAgKiBUaGlzIG1ldGhvZCBNVVNUIGJlICJub24tYmxvY2tpbmciIGFuZCByZXR1cm4gd2l0aGluIDFtcy4KKyAgICAgKgorICAgICAqIFxyZXR1cm4gYSBzaGFyZWQgcGFyYW1ldGVyIHJlZmxlY3RvciBvYmplY3QuCisgICAgICovCisgICAgdmlydHVhbCBzdGQ6OnNoYXJlZF9wdHI8QzJQYXJhbVJlZmxlY3Rvcj4gZ2V0UGFyYW1SZWZsZWN0b3IoKSBjb25zdCA9IDA7CisKKyAgICAvKioKKyAgICAgKiBSZXR1cm5zIHRoZSBzZXQgb2Ygc3VwcG9ydGVkIHBhcmFtZXRlcnMuCisgICAgICoKKyAgICAgKiBUaGlzIG1ldGhvZCBNVVNUIGJlICJub24tYmxvY2tpbmciIGFuZCByZXR1cm4gd2l0aGluIDFtcy4KKyAgICAgKgorICAgICAqIFxwYXJhbVtvdXRdIHBhcmFtcyBhIHZlY3RvciBvZiBzdXBwb3J0ZWQgcGFyYW1ldGVycyB3aWxsIGJlIGFwcGVuZGVkIHRvIHRoaXMgdmVjdG9yLgorICAgICAqCisgICAgICogXHJldHZhbCBDMl9PSyAgICAgICAgdGhlIG9wZXJhdGlvbiBjb21wbGV0ZWQgc3VjY2Vzc2Z1bGx5LgorICAgICAqIFxyZXR2YWwgQzJfTk9fTUVNT1JZIG5vdCBlbm91Z2ggbWVtb3J5IHRvIGNvbXBsZXRlIHRoaXMgbWV0aG9kLgorICAgICAqLworICAgIHZpcnR1YWwgYzJfc3RhdHVzX3QgcXVlcnlTdXBwb3J0ZWRQYXJhbXNfbmIoCisgICAgICAgICAgICBzdGQ6OnZlY3RvcjxzdGQ6OnNoYXJlZF9wdHI8QzJQYXJhbURlc2NyaXB0b3I+PiAqIGNvbnN0IHBhcmFtcykgY29uc3QgPSAwOworCisgICAgLyoqCisgICAgICogUmV0cmlldmVzIHRoZSBzdXBwb3J0ZWQgdmFsdWVzIGZvciB0aGUgcXVlcmllZCBmaWVsZHMuCisgICAgICoKKyAgICAgKiBDbGllbnQgU0hBTEwgc2V0IHRoZSBwYXJhbWV0ZXItZmllbGQgc3BlY2lmaWVyIGFuZCB0aGUgdHlwZSBvZiBzdXBwb3J0ZWQgdmFsdWVzIHF1ZXJ5IChlLmcuCisgICAgICogY3VycmVudGx5IHN1cHBvcnRlZCB2YWx1ZXMsIG9yIHBvdGVudGlhbCBzdXBwb3J0ZWQgdmFsdWVzKSBpbiBmaWVsZHMuCisgICAgICogVXBvbiByZXR1cm4gdGhlIHN0b3JlIFNIQUxMIGZpbGwgaW4gdGhlIHN1cHBvcnRlZCB2YWx1ZXMgZm9yIHRoZSBmaWVsZHMgbGlzdGVkIGFzIHdlbGwKKyAgICAgKiBhcyBhIHN0YXR1cyBmb3IgZWFjaCBmaWVsZC4gU3RvcmUgc2hhbGwgcHJvY2VzcyBhbGwgZmllbGRzIHF1ZXJpZWQgZXZlbiBpZiBzb21lIHF1ZXJpZXMKKyAgICAgKiBmYWlsLgorICAgICAqCisgICAgICogVGhpcyBtZXRob2QgbWF5IGJlIG1vbWVudGFyaWx5IGJsb2NraW5nLCBidXQgTVVTVCByZXR1cm4gd2l0aGluIDVtcy4KKyAgICAgKgorICAgICAqIFxwYXJhbVtpbiBvdXRdIGZpZWxkcyBhIHZlY3RvciBvZiBmaWVsZHMgZGVzY3JpcHRvciBzdHJ1Y3R1cmVzLgorICAgICAqCisgICAgICogXHJldHZhbCBDMl9PSyAgICAgICAgdGhlIG9wZXJhdGlvbiBjb21wbGV0ZWQgc3VjY2Vzc2Z1bGx5LgorICAgICAqIFxyZXR2YWwgQzJfQkFEX0lOREVYIGF0IGxlYXN0IG9uZSBmaWVsZCB3YXMgbm90IHJlY29nbml6ZWQgYXMgYSBjb21wb25lbnQgc3RvcmUgZmllbGQKKyAgICAgKi8KKyAgICB2aXJ0dWFsIGMyX3N0YXR1c190IHF1ZXJ5U3VwcG9ydGVkVmFsdWVzX3NtKAorICAgICAgICAgICAgc3RkOjp2ZWN0b3I8QzJGaWVsZFN1cHBvcnRlZFZhbHVlc1F1ZXJ5PiAmZmllbGRzKSBjb25zdCA9IDA7CisKKyAgICB2aXJ0dWFsIH5DMkNvbXBvbmVudFN0b3JlKCkgPSBkZWZhdWx0OworfTsKKworLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKKy8vLyBAfQorCisjZW5kaWYgIC8vIEMyQ09NUE9ORU5UX0hfCmRpZmYgLS1naXQgYS9tZWRpYS9jb2RlYzIvY29yZS9pbmNsdWRlL0MyQ29uZmlnLmggYi9tZWRpYS9jb2RlYzIvY29yZS9pbmNsdWRlL0MyQ29uZmlnLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzk5YWRlNAotLS0gL2Rldi9udWxsCisrKyBiL21lZGlhL2NvZGVjMi9jb3JlL2luY2x1ZGUvQzJDb25maWcuaApAQCAtMCwwICsxLDIxNzkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworCisjaWZuZGVmIEMyQ09ORklHX0hfCisjZGVmaW5lIEMyQ09ORklHX0hfCisKKyNpbmNsdWRlIDxDMi5oPgorI2luY2x1ZGUgPEMyQ29tcG9uZW50Lmg+CisjaW5jbHVkZSA8QzJFbnVtLmg+CisjaW5jbHVkZSA8QzJQYXJhbURlZi5oPgorCisvLy8gXGRlZmdyb3VwIGNvbmZpZyBDb21wb25lbnQgY29uZmlndXJhdGlvbgorLy8vIEB7CisKKy8qKgorICogRW51bWVyYXRlZCBib29sZWFuLgorICovCitDMkVOVU0oYzJfYm9vbF90LCB1aW50MzJfdCwKKyAgICBDMl9GQUxTRSwgLy8vPCB0cnVlCisgICAgQzJfVFJVRSwgIC8vLzwgZmFsc2UKKykKKwordHlwZWRlZiBDMlNpbXBsZVZhbHVlU3RydWN0PGMyX2Jvb2xfdD4gQzJCb29sVmFsdWU7CisKK3R5cGVkZWYgQzJTaW1wbGVWYWx1ZVN0cnVjdDxDMkVhc3lFbnVtPGMyX2Jvb2xfdD4+IEMyRWFzeUJvb2xWYWx1ZTsKKworLyoqCisgKiBFbnVtZXJhdGVkIHNldCB0cmktc3RhdGUuCisgKgorICogVXNlZCBmb3Igb3B0aW9uYWwgY29uZmlndXJhdGlvbnMgdG8gZGlzdGluZ3Vpc2ggYmV0d2VlbiB2YWx1ZXMgc2V0IGJ5IHRoZSBjbGllbnQsCisgKiBkZWZhdWx0IHZhbHVlcyBzZXQgYnkgdGhlIGNvbXBvbmVudCwgb3IgdW5zZXQgdmFsdWVzLgorICovCitDMkVOVU0oYzJfc2V0X3QsIHVpbnQzMl90LAorICAgIEMyX1VOU0VULCAgIC8vIHBhcmFtZXRlciBpcyB1bnNldCBhbmQgaGFzIG5vIHZhbHVlCisgICAgQzJfU0VULCAgICAgLy8gcGFyYW1ldGVyIGlzL2hhcyBiZWVuIHNldCBieSB0aGUgY2xpZW50CisgICAgQzJfREVGQVVMVCwgLy8gcGFyYW1ldGVyIGhhcyBub3QgYmVlbiBzZXQgYnkgdGhlIGNsaWVudCwgYnV0IGlzIHNldCBieSB0aGUgY29tcG9uZW50CispCisKKy8qKiBFbnVtZXJhdGlvbnMgdXNlZCBieSBjb25maWd1cmF0aW9uIHBhcmFtZXRlcnMgKi8KK3N0cnVjdCBDMkNvbmZpZyB7CisgICAgZW51bSBhYWNfcGFja2FnaW5nX3QgOiB1aW50MzJfdDsgICAgICAgIC8vLzwgQUFDIHBhY2thZ2luZyAoUkFXIHZzIEFEVFMpCisgICAgZW51bSBhYWNfc2JyX21vZGVfdCA6IHVpbnQzMl90OyAgICAgICAgIC8vLzwgQUFDIFNCUiBtb2RlCisgICAgZW51bSBhcGlfZmVhdHVyZV90IDogdWludDY0X3Q7ICAgICAgICAgIC8vLzwgQVBJIGZlYXR1cmVzCisgICAgZW51bSBhcGlfbGV2ZWxfdCA6IHVpbnQzMl90OyAgICAgICAgICAgIC8vLzwgQVBJIGxldmVsCisgICAgZW51bSBiaXRyYXRlX21vZGVfdCA6IHVpbnQzMl90OyAgICAgICAgIC8vLzwgYml0cmF0ZSBjb250cm9sIG1vZGUKKyAgICBlbnVtIGRyY19jb21wcmVzc2lvbl9tb2RlX3QgOiBpbnQzMl90OyAgLy8vPCBEUkMgY29tcHJlc3Npb24gbW9kZQorICAgIGVudW0gZHJjX2VmZmVjdF90eXBlX3QgOiBpbnQzMl90OyAgICAgICAvLy88IERSQyBlZmZlY3QgdHlwZQorICAgIGVudW0gaW50cmFfcmVmcmVzaF9tb2RlX3QgOiB1aW50MzJfdDsgICAvLy88IGludHJhIHJlZnJlc2ggbW9kZXMKKyAgICBlbnVtIGxldmVsX3QgOiB1aW50MzJfdDsgICAgICAgICAgICAgICAgLy8vPCBjb2RpbmcgbGV2ZWwKKyAgICBlbnVtIG9yZGluYWxfa2V5X3QgOiB1aW50MzJfdDsgICAgICAgICAgLy8vPCB3b3JrIG9yZGVyaW5nIGtleXMKKyAgICBlbnVtIHBjbV9lbmNvZGluZ190IDogdWludDMyX3Q7ICAgICAgICAgLy8vPCBQQ00gZW5jb2RpbmcKKyAgICBlbnVtIHBpY3R1cmVfdHlwZV90IDogdWludDMyX3Q7ICAgICAgICAgLy8vPCBwaWN0dXJlIHR5cGVzCisgICAgZW51bSBwbGF0Zm9ybV9mZWF0dXJlX3QgOiB1aW50NjRfdDsgICAgIC8vLzwgcGxhdGZvcm0gZmVhdHVyZXMKKyAgICBlbnVtIHBsYXRmb3JtX2xldmVsX3QgOiB1aW50MzJfdDsgICAgICAgLy8vPCBwbGF0Zm9ybSBsZXZlbAorICAgIGVudW0gcHJlcGVuZF9oZWFkZXJfbW9kZV90IDogdWludDMyX3Q7ICAvLy88IHByZXBlbmQgaGVhZGVyIG9wZXJhdGlvbmFsIG1vZGVzCisgICAgZW51bSBwcm9maWxlX3QgOiB1aW50MzJfdDsgICAgICAgICAgICAgIC8vLzwgY29kaW5nIHByb2ZpbGUKKyAgICBlbnVtIHNjYWxpbmdfbWV0aG9kX3QgOiB1aW50MzJfdDsgICAgICAgLy8vPCBzY2FsaW5nIG1ldGhvZHMKKyAgICBlbnVtIHNjYW5fb3JkZXJfdCA6IHVpbnQzMl90OyAgICAgICAgICAgLy8vPCBzY2FuIG9yZGVycworICAgIGVudW0gc2VjdXJlX21vZGVfdCA6IHVpbnQzMl90OyAgICAgICAgICAvLy88IHNlY3VyZS9wcm90ZWN0ZWQgbW9kZXMKKyAgICBlbnVtIHN1cHBsZW1lbnRhbF9pbmZvX3QgOiB1aW50MzJfdDsgICAgLy8vPCBzdXBwbGVtZW50YWwgaW5mb3JtYXRpb24gdHlwZXMKKyAgICBlbnVtIHRpbGluZ19tb2RlX3QgOiB1aW50MzJfdDsgICAgICAgICAgLy8vPCB0aWxpbmcgbW9kZXMKK307CisKK25hbWVzcGFjZSB7CisKK2VudW0gQzJQYXJhbUluZGV4S2luZCA6IEMyUGFyYW06OnR5cGVfaW5kZXhfdCB7CisgICAgQzJfUEFSQU1fSU5ERVhfSU5WQUxJRCAgICAgICAgICAgICA9IDB4MCwgICAgLy8vPCBkbyBub3QgdXNlCisgICAgQzJfUEFSQU1fSU5ERVhfU1RSVUNUX1NUQVJUICAgICAgICA9IDB4MSwgICAgLy8vPCBzdHJ1Y3Qgb25seSBpbmRpY2VzCisgICAgQzJfUEFSQU1fSU5ERVhfUEFSQU1fU1RBUlQgICAgICAgICA9IDB4ODAwLCAgLy8vPCByZWd1bGFyIHBhcmFtZXRlcnMKKyAgICBDMl9QQVJBTV9JTkRFWF9DT0RFUl9QQVJBTV9TVEFSVCAgID0gMHgxMDAwLCAvLy88IGVuL3RyYW5zY29kZXIgcGFyYW1ldGVycworICAgIEMyX1BBUkFNX0lOREVYX1BJQ1RVUkVfUEFSQU1fU1RBUlQgPSAweDE4MDAsIC8vLzwgaW1hZ2UvdmlkZW8gcGFyYW1ldGVycworICAgIEMyX1BBUkFNX0lOREVYX1ZJREVPX1BBUkFNX1NUQVJUICAgPSAweDIwMDAsIC8vLzwgdmlkZW8gcGFyYW1ldGVycworICAgIEMyX1BBUkFNX0lOREVYX0lNQUdFX1BBUkFNX1NUQVJUICAgPSAweDI4MDAsIC8vLzwgaW1hZ2UgcGFyYW1ldGVycworICAgIEMyX1BBUkFNX0lOREVYX0FVRElPX1BBUkFNX1NUQVJUICAgPSAweDMwMDAsIC8vLzwgaW1hZ2UgcGFyYW1ldGVycworICAgIEMyX1BBUkFNX0lOREVYX1BMQVRGT1JNX1NUQVJUICAgICAgPSAweDQwMDAsIC8vLzwgcGxhdGZvcm0tZGVmaW5lZCBwYXJhbWV0ZXJzCisKKyAgICAvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSBzdHJ1Y3R1cmUgaW5kaWNlcyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLworCisgICAga1BhcmFtSW5kZXhDb2xvclh5ID0gQzJfUEFSQU1fSU5ERVhfU1RSVUNUX1NUQVJULAorICAgIGtQYXJhbUluZGV4TWFzdGVyaW5nRGlzcGxheUNvbG9yVm9sdW1lLAorICAgIGtQYXJhbUluZGV4Q2hyb21hT2Zmc2V0LAorICAgIGtQYXJhbUluZGV4R29wTGF5ZXIsCisKKyAgICAvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSBwYXJhbWV0ZXIgaW5kaWNlcyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLworCisgICAga1BhcmFtSW5kZXhBcGlMZXZlbCA9IEMyX1BBUkFNX0lOREVYX1BBUkFNX1NUQVJULAorICAgIGtQYXJhbUluZGV4QXBpRmVhdHVyZXMsCisKKyAgICAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gYWxsIGNvbXBvbmVudHMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKKyAgICAvKiBnZW5lcmljIGNvbXBvbmVudCBjaGFyYWN0ZXJpc3RpY3MgKi8KKyAgICBrUGFyYW1JbmRleE5hbWUsCisgICAga1BhcmFtSW5kZXhBbGlhc2VzLAorICAgIGtQYXJhbUluZGV4S2luZCwKKyAgICBrUGFyYW1JbmRleERvbWFpbiwKKyAgICBrUGFyYW1JbmRleEF0dHJpYnV0ZXMsCisgICAga1BhcmFtSW5kZXhUaW1lU3RyZXRjaCwKKworICAgIC8qIGNvZGluZyBjaGFyYWN0ZXJpc3RpY3MgKi8KKyAgICBrUGFyYW1JbmRleFByb2ZpbGVMZXZlbCwKKyAgICBrUGFyYW1JbmRleEluaXREYXRhLAorICAgIGtQYXJhbUluZGV4U3VwcGxlbWVudGFsRGF0YSwKKyAgICBrUGFyYW1JbmRleFN1YnNjcmliZWRTdXBwbGVtZW50YWxEYXRhLAorCisgICAgLyogcGlwZWxpbmUgY2hhcmFjdGVyaXN0aWNzICovCisgICAga1BhcmFtSW5kZXhNZWRpYVR5cGUsCisgICAga1BhcmFtSW5kZXhEZWxheVJlcXVlc3QsCisgICAga1BhcmFtSW5kZXhEZWxheSwKKyAgICBrUGFyYW1JbmRleE1heFJlZmVyZW5jZUFnZSwKKyAgICBrUGFyYW1JbmRleE1heFJlZmVyZW5jZUNvdW50LAorICAgIGtQYXJhbUluZGV4UmVvcmRlckJ1ZmZlckRlcHRoLAorICAgIGtQYXJhbUluZGV4UmVvcmRlcktleSwKKyAgICBrUGFyYW1JbmRleFN0cmVhbUNvdW50LAorICAgIGtQYXJhbUluZGV4U3Vic2NyaWJlZFBhcmFtSW5kaWNlcywKKyAgICBrUGFyYW1JbmRleFN1Z2dlc3RlZEJ1ZmZlckNvdW50LAorICAgIGtQYXJhbUluZGV4QmF0Y2hTaXplLAorICAgIGtQYXJhbUluZGV4Q3VycmVudFdvcmssCisgICAga1BhcmFtSW5kZXhMYXN0V29ya1F1ZXVlZCwKKworICAgIC8qIG1lbW9yeSBhbGxvY2F0aW9uICovCisgICAga1BhcmFtSW5kZXhBbGxvY2F0b3JzLAorICAgIGtQYXJhbUluZGV4QmxvY2tQb29scywKKyAgICBrUGFyYW1JbmRleEJ1ZmZlclR5cGUsCisgICAga1BhcmFtSW5kZXhVc2FnZSwKKyAgICBrUGFyYW1JbmRleE91dE9mTWVtb3J5LAorICAgIGtQYXJhbUluZGV4TWF4QnVmZmVyU2l6ZSwKKworICAgIC8qIG1pc2MuIHN0YXRlICovCisgICAga1BhcmFtSW5kZXhUcmlwcGVkLAorICAgIGtQYXJhbUluZGV4Q29uZmlnQ291bnRlciwKKworICAgIC8qIHJlc291cmNlcyAqLworICAgIGtQYXJhbUluZGV4UmVzb3VyY2VzTmVlZGVkLAorICAgIGtQYXJhbUluZGV4UmVzb3VyY2VzUmVzZXJ2ZWQsCisgICAga1BhcmFtSW5kZXhPcGVyYXRpbmdSYXRlLAorICAgIGtQYXJhbUluZGV4UmVhbFRpbWVQcmlvcml0eSwKKworICAgIC8qIHByb3RlY3RlZCBjb250ZW50ICovCisgICAga1BhcmFtSW5kZXhTZWN1cmVNb2RlLAorCisgICAgLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICh0cmFucy9lbiljb2RlcnMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKKyAgICBrUGFyYW1JbmRleEJpdHJhdGUgPSBDMl9QQVJBTV9JTkRFWF9DT0RFUl9QQVJBTV9TVEFSVCwKKyAgICBrUGFyYW1JbmRleEJpdHJhdGVNb2RlLAorICAgIGtQYXJhbUluZGV4UXVhbGl0eSwKKyAgICBrUGFyYW1JbmRleENvbXBsZXhpdHksCisgICAga1BhcmFtSW5kZXhQcmVwZW5kSGVhZGVyTW9kZSwKKworICAgIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBpbWFnZS92aWRlbyBjb21wb25lbnRzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCisgICAga1BhcmFtSW5kZXhQaWN0dXJlU2l6ZSA9IEMyX1BBUkFNX0lOREVYX1BJQ1RVUkVfUEFSQU1fU1RBUlQsCisgICAga1BhcmFtSW5kZXhDcm9wUmVjdCwKKyAgICBrUGFyYW1JbmRleFBpeGVsRm9ybWF0LAorICAgIGtQYXJhbUluZGV4Um90YXRpb24sCisgICAga1BhcmFtSW5kZXhQaXhlbEFzcGVjdFJhdGlvLAorICAgIGtQYXJhbUluZGV4U2NhbGVkUGljdHVyZVNpemUsCisgICAga1BhcmFtSW5kZXhTY2FsZWRDcm9wUmVjdCwKKyAgICBrUGFyYW1JbmRleFNjYWxpbmdNZXRob2QsCisgICAga1BhcmFtSW5kZXhDb2xvckluZm8sCisgICAga1BhcmFtSW5kZXhDb2xvckFzcGVjdHMsCisgICAga1BhcmFtSW5kZXhIZHJTdGF0aWNNZXRhZGF0YSwKKyAgICBrUGFyYW1JbmRleERlZmF1bHRDb2xvckFzcGVjdHMsCisKKyAgICBrUGFyYW1JbmRleEJsb2NrU2l6ZSwKKyAgICBrUGFyYW1JbmRleEJsb2NrQ291bnQsCisgICAga1BhcmFtSW5kZXhCbG9ja1JhdGUsCisKKyAgICBrUGFyYW1JbmRleFBpY3R1cmVUeXBlTWFzaywKKyAgICBrUGFyYW1JbmRleFBpY3R1cmVUeXBlLAorCisgICAgLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIHZpZGVvIGNvbXBvbmVudHMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKKyAgICBrUGFyYW1JbmRleEZyYW1lUmF0ZSA9IEMyX1BBUkFNX0lOREVYX1ZJREVPX1BBUkFNX1NUQVJULAorICAgIGtQYXJhbUluZGV4TWF4Qml0cmF0ZSwKKyAgICBrUGFyYW1JbmRleE1heEZyYW1lUmF0ZSwKKyAgICBrUGFyYW1JbmRleE1heFBpY3R1cmVTaXplLAorICAgIGtQYXJhbUluZGV4R29wLAorICAgIGtQYXJhbUluZGV4U3luY0ZyYW1lSW50ZXJ2YWwsCisgICAga1BhcmFtSW5kZXhSZXF1ZXN0U3luY0ZyYW1lLAorICAgIGtQYXJhbUluZGV4VGVtcG9yYWxMYXllcmluZywKKyAgICBrUGFyYW1JbmRleExheWVySW5kZXgsCisgICAga1BhcmFtSW5kZXhMYXllckNvdW50LAorICAgIGtQYXJhbUluZGV4SW50cmFSZWZyZXNoLAorCisgICAgLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIGltYWdlIGNvbXBvbmVudHMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKKyAgICBrUGFyYW1JbmRleFRpbGVMYXlvdXQgPSBDMl9QQVJBTV9JTkRFWF9JTUFHRV9QQVJBTV9TVEFSVCwKKyAgICBrUGFyYW1JbmRleFRpbGVIYW5kbGluZywKKworICAgIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBhdWRpbyBjb21wb25lbnRzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCisgICAga1BhcmFtSW5kZXhTYW1wbGVSYXRlID0gQzJfUEFSQU1fSU5ERVhfQVVESU9fUEFSQU1fU1RBUlQsCisgICAga1BhcmFtSW5kZXhDaGFubmVsQ291bnQsCisgICAga1BhcmFtSW5kZXhQY21FbmNvZGluZywKKyAgICBrUGFyYW1JbmRleEFhY1BhY2thZ2luZywKKyAgICBrUGFyYW1JbmRleE1heENoYW5uZWxDb3VudCwKKyAgICBrUGFyYW1JbmRleEFhY1Nick1vZGUsIC8vIGFhYyBlbmNvZGUsIGVudW0KKyAgICBrUGFyYW1JbmRleERyY0VuY29kZWRUYXJnZXRMZXZlbCwgIC8vIGRyYywgZmxvYXQgKGRCRlMpCisgICAga1BhcmFtSW5kZXhEcmNUYXJnZXRSZWZlcmVuY2VMZXZlbCwgLy8gZHJjLCBmbG9hdCAoZEJGUykKKyAgICBrUGFyYW1JbmRleERyY0NvbXByZXNzaW9uLCAvLyBkcmMsIGVudW0KKyAgICBrUGFyYW1JbmRleERyY0Jvb3N0RmFjdG9yLCAvLyBkcmMsIGZsb2F0ICgwLTEpCisgICAga1BhcmFtSW5kZXhEcmNBdHRlbnVhdGlvbkZhY3RvciwgLy8gZHJjLCBmbG9hdCAoMC0xKQorICAgIGtQYXJhbUluZGV4RHJjRWZmZWN0VHlwZSwgLy8gZHJjLCBlbnVtCisKKyAgICAvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gcGxhdGZvcm0tZGVmaW5lZCBwYXJhbWV0ZXJzID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLworCisgICAga1BhcmFtSW5kZXhQbGF0Zm9ybUxldmVsID0gQzJfUEFSQU1fSU5ERVhfUExBVEZPUk1fU1RBUlQsIC8vIGFsbCwgdTMyCisgICAga1BhcmFtSW5kZXhQbGF0Zm9ybUZlYXR1cmVzLCAvLyBhbGwsIHU2NCBtYXNrCisgICAga1BhcmFtSW5kZXhTdG9yZUlvblVzYWdlLCAvLyBzdG9yZSwgc3RydWN0CisgICAga1BhcmFtSW5kZXhBc3BlY3RzVG9EYXRhU3BhY2UsIC8vIHN0b3JlLCBzdHJ1Y3QKKyAgICBrUGFyYW1JbmRleEZsZXhpYmxlUGl4ZWxGb3JtYXREZXNjcmlwdG9yLCAvLyBzdG9yZSwgc3RydWN0CisgICAga1BhcmFtSW5kZXhGbGV4aWJsZVBpeGVsRm9ybWF0RGVzY3JpcHRvcnMsIC8vIHN0b3JlLCBzdHJ1Y3RbXQorICAgIGtQYXJhbUluZGV4RGF0YVNwYWNlVG9Bc3BlY3RzLCAvLyBzdG9yZSwgc3RydWN0CisgICAga1BhcmFtSW5kZXhEYXRhU3BhY2UsIC8vIHUzMgorICAgIGtQYXJhbUluZGV4U3VyZmFjZVNjYWxpbmcsIC8vIHUzMgorCisgICAgLy8gaW5wdXQgc3VyZmFjZQorICAgIGtQYXJhbUluZGV4SW5wdXRTdXJmYWNlRW9zLCAvLyBpbnB1dC1zdXJmYWNlLCBlb3MKKyAgICBrUGFyYW1JbmRleFRpbWVkQ29udHJvbCwgLy8gc3RydWN0CisgICAga1BhcmFtSW5kZXhTdGFydEF0LCAvLyBpbnB1dC1zdXJmYWNlLCBzdHJ1Y3QKKyAgICBrUGFyYW1JbmRleFN1c3BlbmRBdCwgLy8gaW5wdXQtc3VyZmFjZSwgc3RydWN0CisgICAga1BhcmFtSW5kZXhSZXN1bWVBdCwgLy8gaW5wdXQtc3VyZmFjZSwgc3RydWN0CisgICAga1BhcmFtSW5kZXhTdG9wQXQsIC8vIGlucHV0LXN1cmZhY2UsIHN0cnVjdAorICAgIGtQYXJhbUluZGV4VGltZU9mZnNldCwgLy8gaW5wdXQtc3VyZmFjZSwgc3RydWN0CisgICAga1BhcmFtSW5kZXhNaW5GcmFtZVJhdGUsIC8vIGlucHV0LXN1cmZhY2UsIGZsb2F0CisgICAga1BhcmFtSW5kZXhUaW1lc3RhbXBHYXBBZGp1c3RtZW50LCAvLyBpbnB1dC1zdXJmYWNlLCBzdHJ1Y3QKKworICAgIGtQYXJhbUluZGV4U3VyZmFjZUFsbG9jYXRvciwgLy8gdTMyCisKKyAgICAvLyBkZXByZWNhdGVkIGluZGljZXMgZHVlIHRvIHJlbmFtaW5nCisgICAga1BhcmFtSW5kZXhBYWNTdHJlYW1Gb3JtYXQgPSBrUGFyYW1JbmRleEFhY1BhY2thZ2luZywKKyAgICBrUGFyYW1JbmRleENzZCA9IGtQYXJhbUluZGV4SW5pdERhdGEsCisgICAga1BhcmFtSW5kZXhNYXhWaWRlb1NpemVIaW50ID0ga1BhcmFtSW5kZXhNYXhQaWN0dXJlU2l6ZSwKKyAgICBrUGFyYW1JbmRleE1pbWUgPSBrUGFyYW1JbmRleE1lZGlhVHlwZSwKKyAgICBrUGFyYW1JbmRleFJlcXVlc3RlZEluZm9zID0ga1BhcmFtSW5kZXhTdWJzY3JpYmVkUGFyYW1JbmRpY2VzLAorCisKKyAgICAvLyBkZXByZWNhdGVkIGluZGljZXMgZHVlIHRvIHJlbW92YWwKKyAgICBrUGFyYW1JbmRleFN1cHBvcnRlZFBhcmFtcyA9IDB4REVBRDAwMDAsCisgICAga1BhcmFtSW5kZXhSZWFkT25seVBhcmFtcywKKyAgICBrUGFyYW1JbmRleFRlbXBvcmFsLAorfTsKKworfQorCisvKioKKyAqIENvZGVjIDIuMCBwYXJhbWV0ZXIgdHlwZXMgZm9sbG93IHRoZSBmb2xsb3dpbmcgbmFtaW5nIGNvbnZlbnRpb246CisgKgorICogQzI8Z3JvdXA+PGRvbWFpbj48aW5kZXg+PHR5cGU+CisgKgorICogRS5nLiBDMlN0cmVhbVBpY3R1cmVTaXplSW5mbzogZ3JvdXA9IiIgZG9tYWluPSJTdHJlYW0iIGluZGV4PSJQaWN0dXJlU2l6ZSIgdHlwZT0iSW5mbyIuCisgKiBHcm91cCBpcyBzb21ld2hhdCBhcmJpdHJhcnksIGJ1dCBkZW5vdGVzIGtpbmQgb2Ygb2JqZWN0cyB0aGUgcGFyYW1ldGVyIGlzIGRlZmluZWQuCisgKiBBdCB0aGlzIHBvaW50IHdlIHVzZSBDb21wb25lbnQgYW5kIFN0b3JlIHRvIGRpc3Rpbmd1aXNoIGJhc2ljIGNvbXBvbmVudC9zdG9yZSBwYXJhbWV0ZXJzLgorICoKKyAqIFBhcmFtZXRlciBrZXlzIGFyZSBuYW1lZCBDMl9QQVJBTUtFWV9bPGdyb3VwPl9dPGRvbWFpbj5fPGluZGV4PiBhcyB0eXBlIGlzIG5vdCBleHBlY3RlZAorICogdG8gZGlzdGluZ3Vpc2ggcGFyYW1ldGVycy4gRS5nLiBhIGNvbXBvbmVudCBjb3VsZCBjaGFuZ2UgdGhlIHR5cGUgb2YgdGhlIHBhcmFtZXRlciBhbmQgaXQKKyAqIGlzIG5vdCBleHBlY3RlZCB1c2VycyB3b3VsZCBuZWVkIHRvIGNoYW5nZSB0aGUga2V5LgorICovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIEFQSSBsZXZlbCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCitlbnVtIEMyQ29uZmlnOjphcGlfbGV2ZWxfdCA6IHVpbnQzMl90IHsKKyAgICBBUElfTDBfMSA9IDAsICAgLy8vPCBzdXBwb3J0IGZvciBBUEkgbGV2ZWwgMC4xCit9OworCisvLyByZWFkLW9ubHkKK3R5cGVkZWYgQzJHbG9iYWxQYXJhbTxDMlNldHRpbmcsIEMyU2ltcGxlVmFsdWVTdHJ1Y3Q8QzJDb25maWc6OmFwaV9sZXZlbF90Piwga1BhcmFtSW5kZXhBcGlMZXZlbD4KKyAgICAgICAgQzJBcGlMZXZlbFNldHRpbmc7Citjb25zdGV4cHIgY2hhciBDMl9QQVJBTUtFWV9BUElfTEVWRUxbXSA9ICJhcGkubGV2ZWwiOworCitlbnVtIEMyQ29uZmlnOjphcGlfZmVhdHVyZV90IDogdWludDY0X3QgeworICAgIEFQSV9SRUZMRUNUSU9OICAgICAgID0gKDFVIDw8IDApLCAgLy8vPCBhYmlsaXR5IHRvIGxpc3Qgc3VwcG9ydGVkIHBhcmFtZXRlcnMKKyAgICBBUElfVkFMVUVTICAgICAgICAgICA9ICgxVSA8PCAxKSwgIC8vLzwgYWJpbGl0eSB0byBsaXN0IHN1cHBvcnRlZCB2YWx1ZXMgZm9yIGVhY2ggcGFyYW1ldGVyCisgICAgQVBJX0NVUlJFTlRfVkFMVUVTICAgPSAoMVUgPDwgMiksICAvLy88IGFiaWxpdHkgdG8gbGlzdCBjdXJyZW50bHkgc3VwcG9ydGVkIHZhbHVlcyBmb3IgZWFjaCBwYXJhbWV0ZXIKKyAgICBBUElfREVQRU5ERU5DWSAgICAgICA9ICgxVSA8PCAzKSwgIC8vLzwgaGF2ZSBhIGRlZmluZWQgcGFyYW1ldGVyIGRlcGVuZGVuY3kKKworICAgIEFQSV9TVFJFQU1TICAgICAgICAgID0gKDFVTEwgPDwgMzIpLCAgLy8vPCBzdXBwb3J0aW5nIHZhcmlhYmxlIG51bWJlciBvZiBzdHJlYW1zCisKKyAgICBBUElfVFVOTkVMSU5HICAgICAgICA9ICgxVUxMIDw8IDQ4KSwgIC8vLzwgdHVubmVsaW5nIEFQSQorfTsKKworLy8gcmVhZC1vbmx5Cit0eXBlZGVmIEMyR2xvYmFsUGFyYW08QzJTZXR0aW5nLCBDMlNpbXBsZVZhbHVlU3RydWN0PEMyQ29uZmlnOjphcGlfZmVhdHVyZV90Piwga1BhcmFtSW5kZXhBcGlGZWF0dXJlcz4KKyAgICAgICAgQzJBcGlGZWF0dXJlc1NldHRpbmc7Citjb25zdGV4cHIgY2hhciBDMl9QQVJBTUtFWV9BUElfRkVBVFVSRVNbXSA9ICJhcGkuZmVhdHVyZXMiOworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBnZW5lcmljIGNvbXBvbmVudCBjaGFyYWN0ZXJpc3RpY3MgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworLyoqCisgKiBUaGUgbmFtZSBvZiB0aGUgY29tcG9uZW50LgorICoKKyAqIFRoaXMgbXVzdCBjb250YWluIG9ubHkgYWxwaGFudW1lcmljIGNoYXJhY3RlcnMgb3IgZG90ICcuJywgaHlwaGVuICctJywgcGx1cyAnKycsIG9yCisgKiB1bmRlcmxpbmUgJ18nLiBUaGUgbmFtZSBvZiBlYWNoIGNvbXBvbmVudCBtdXN0IGJlIHVuaXF1ZS4KKyAqCisgKiBGb3IgQW5kcm9pZDogQ29tcG9uZW50IG5hbWVzIG11c3Qgc3RhcnQgd2l0aCAnYzIuJyBmb2xsb3dlZCBieSB0aGUgY29tcGFueSBuYW1lIG9yIGFiYnJldmlhdGlvbgorICogYW5kIGFub3RoZXIgZG90LCBlLmcuICdjMi5hbmRyb2lkLicuIFVzZSBvZiBsb3dlcmNhc2UgaXMgcHJlZmVycmVkIGJ1dCBub3QgcmVxdWlyZWQuCisgKi8KKy8vIHJlYWQtb25seQordHlwZWRlZiBDMkdsb2JhbFBhcmFtPEMyU2V0dGluZywgQzJTdHJpbmdWYWx1ZSwga1BhcmFtSW5kZXhOYW1lPiBDMkNvbXBvbmVudE5hbWVTZXR0aW5nOworY29uc3RleHByIGNoYXIgQzJfUEFSQU1LRVlfQ09NUE9ORU5UX05BTUVbXSAgPSAiY29tcG9uZW50Lm5hbWUiOworCisvKioKKyAqIEFsdGVybmF0ZSBuYW1lcyAoYWxpYXNlcykgb2YgdGhlIGNvbXBvbmVudC4KKyAqCisgKiBUaGlzIGlzIGEgY29tbWEgJywnIHNlcGFyYXRlZCBsaXN0IG9mIGFsdGVybmF0ZSBjb21wb25lbnQgbmFtZXMuIFVubGlrZSBjb21wb25lbnQgbmFtZXMgdGhhdAorICogbXVzdCBiZSB1bmlxdWUsIG11bHRpcGxlIGNvbXBvbmVudHMgY2FuIGhhdmUgdGhlIHNhbWUgYWxpYXMuCisgKi8KKy8vIHJlYWQtb25seQordHlwZWRlZiBDMkdsb2JhbFBhcmFtPEMyU2V0dGluZywgQzJTdHJpbmdWYWx1ZSwga1BhcmFtSW5kZXhBbGlhc2VzPiBDMkNvbXBvbmVudEFsaWFzZXNTZXR0aW5nOworY29uc3RleHByIGNoYXIgQzJfUEFSQU1LRVlfQ09NUE9ORU5UX0FMSUFTRVNbXSAgPSAiY29tcG9uZW50LmFsaWFzZXMiOworCisvKioKKyAqIENvbXBvbmVudCBraW5kLgorICovCisvLyByZWFkLW9ubHkKK3R5cGVkZWYgQzJHbG9iYWxQYXJhbTxDMlNldHRpbmcsIEMyU2ltcGxlVmFsdWVTdHJ1Y3Q8QzJDb21wb25lbnQ6OmtpbmRfdD4sIGtQYXJhbUluZGV4S2luZD4KKyAgICAgICAgQzJDb21wb25lbnRLaW5kU2V0dGluZzsKK2NvbnN0ZXhwciBjaGFyIEMyX1BBUkFNS0VZX0NPTVBPTkVOVF9LSU5EW10gID0gImNvbXBvbmVudC5raW5kIjsKKworLyoqCisgKiBDb21wb25lbnQgZG9tYWluLgorICovCisvLyByZWFkLW9ubHkKK3R5cGVkZWYgQzJHbG9iYWxQYXJhbTxDMlNldHRpbmcsIEMyU2ltcGxlVmFsdWVTdHJ1Y3Q8QzJDb21wb25lbnQ6OmRvbWFpbl90Piwga1BhcmFtSW5kZXhEb21haW4+CisgICAgICAgIEMyQ29tcG9uZW50RG9tYWluU2V0dGluZzsKK3R5cGVkZWYgQzJDb21wb25lbnREb21haW5TZXR0aW5nIEMyQ29tcG9uZW50RG9tYWluSW5mbzsgLy8gZGVwcmVjYXRlZAordHlwZWRlZiBDMkNvbXBvbmVudDo6ZG9tYWluX3QgQzJEb21haW5LaW5kOyAvLyBkZXByZWNhdGVkCitjb25zdGV4cHIgY2hhciBDMl9QQVJBTUtFWV9DT01QT05FTlRfRE9NQUlOW10gID0gImNvbXBvbmVudC5kb21haW4iOworCitjb25zdGV4cHIgQzJDb21wb25lbnQ6OmRvbWFpbl90IEMyRG9tYWluQXVkaW8gPSBDMkNvbXBvbmVudDo6RE9NQUlOX0FVRElPOyAvLyBkZXByZWNhdGVkCitjb25zdGV4cHIgQzJDb21wb25lbnQ6OmRvbWFpbl90IEMyRG9tYWluT3RoZXIgPSBDMkNvbXBvbmVudDo6RE9NQUlOX09USEVSOyAvLyBkZXByZWNhdGUKK2NvbnN0ZXhwciBDMkNvbXBvbmVudDo6ZG9tYWluX3QgQzJEb21haW5WaWRlbyA9IEMyQ29tcG9uZW50OjpET01BSU5fVklERU87IC8vIGRlcHJlY2F0ZQorCisvKioKKyAqIENvbXBvbmVudCBhdHRyaWJ1dGVzLgorICoKKyAqIFRoZXNlIGFyZSBhIHNldCBvZiBmbGFncyBwcm92aWRlZCBieSB0aGUgY29tcG9uZW50IGNoYXJhY3Rlcml6aW5nIGl0cyBwcm9jZXNzaW5nIGFsZ29yaXRobS4KKyAqLworQzJFTlVNKEMyQ29tcG9uZW50OjphdHRyaWJfdCwgdWludDY0X3QsCisgICAgQVRUUklCX0lTX1RFTVBPUkFMID0gMXUgPDwgMCwgLy8vPCBjb21wb25lbnQgaW5wdXQgb3JkZXJpbmcgbWF0dGVycyBmb3IgcHJvY2Vzc2luZworKQorCisvLyByZWFkLW9ubHkKK3R5cGVkZWYgQzJHbG9iYWxQYXJhbTxDMlNldHRpbmcsIEMyU2ltcGxlVmFsdWVTdHJ1Y3Q8QzJDb21wb25lbnQ6OmF0dHJpYl90Piwga1BhcmFtSW5kZXhBdHRyaWJ1dGVzPgorICAgICAgICBDMkNvbXBvbmVudEF0dHJpYnV0ZXNTZXR0aW5nOworY29uc3RleHByIGNoYXIgQzJfUEFSQU1LRVlfQ09NUE9ORU5UX0FUVFJJQlVURVNbXSA9ICJjb21wb25lbnQuYXR0cmlidXRlcyI7CisKKy8vIGRlcHJlY2F0ZWQKK3R5cGVkZWYgQzJDb21wb25lbnRBdHRyaWJ1dGVzU2V0dGluZyBDMkNvbXBvbmVudFRlbXBvcmFsSW5mbzsKKworLyoqCisgKiBUaW1lIHN0cmV0Y2hpbmcuCisgKgorICogVGhpcyBpcyB0aGUgcmF0aW8gYmV0d2VlbiB0aGUgcmF0ZSBvZiB0aGUgaW5wdXQgdGltZXN0YW1wLCBhbmQgdGhlIHJhdGUgb2YgdGhlIG91dHB1dCB0aW1lc3RhbXAuCisgKiBFLmcuIGlmIHRoaXMgaXMgNC4wLCBmb3IgZXZlcnkgMSBzZWNvbmRzIG9mIGlucHV0IHRpbWVzdGFtcCBkaWZmZXJlbmNlLCB0aGUgb3V0cHV0IHNoYWxsIGRpZmZlcgorICogYnkgNCBzZWNvbmRzLgorICovCit0eXBlZGVmIEMyR2xvYmFsUGFyYW08QzJUdW5pbmcsIEMyRmxvYXRWYWx1ZSwga1BhcmFtSW5kZXhUaW1lU3RyZXRjaD4gQzJDb21wb25lbnRUaW1lU3RyZXRjaFR1bmluZzsKK2NvbnN0ZXhwciBjaGFyIEMyX1BBUkFNS0VZX1RJTUVfU1RSRVRDSFtdICA9ICJhbGdvLnRpbWUtc3RyZXRjaCI7CisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIGNvZGluZyBjaGFyYWN0ZXJpc3RpY3MgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworLyoqCisgKiBQcm9maWxlIGFuZCBsZXZlbC4KKyAqCisgKiBQcm9maWxlIGRldGVybWluZXMgdGhlIHRvb2xzIHVzZWQgYnkgdGhlIGNvbXBvbmVudC4KKyAqIExldmVsIGRldGVybWluZXMgdGhlIGxldmVsIG9mIHJlc291cmNlcyB1c2VkIGJ5IHRoZSBjb21wb25lbnQuCisgKi8KKworbmFtZXNwYWNlIHsKKworZW51bSA6IHVpbnQzMl90IHsKKyAgICBfQzJfUExfTVAyVl9CQVNFID0gMHgxMDAwLAorICAgIF9DMl9QTF9BQUNfQkFTRSAgPSAweDIwMDAsCisgICAgX0MyX1BMX0gyNjNfQkFTRSA9IDB4MzAwMCwKKyAgICBfQzJfUExfTVA0Vl9CQVNFID0gMHg0MDAwLAorICAgIF9DMl9QTF9BVkNfQkFTRSAgPSAweDUwMDAsCisgICAgX0MyX1BMX0hFVkNfQkFTRSA9IDB4NjAwMCwKKyAgICBfQzJfUExfVlA5X0JBU0UgID0gMHg3MDAwLAorICAgIF9DMl9QTF9EVl9CQVNFICAgPSAweDgwMDAsCisKKyAgICBDMl9QUk9GSUxFX0xFVkVMX1ZFTkRPUl9TVEFSVCA9IDB4NzAwMDAwMDAsCit9OworCit9CisKK2VudW0gQzJDb25maWc6OnByb2ZpbGVfdCA6IHVpbnQzMl90IHsKKyAgICBQUk9GSUxFX1VOVVNFRCA9IDAsICAgICAgICAgICAgICAgICAgICAgICAgIC8vLzwgcHJvZmlsZSBpcyBub3QgdXNlZCBieSB0aGlzIG1lZGlhIHR5cGUKKworICAgIC8vIEFBQyAoTVBFRy0yIFBhcnQgNyBhbmQgTVBFRy00IFBhcnQgMykgcHJvZmlsZXMKKyAgICBQUk9GSUxFX0FBQ19MQyA9IF9DMl9QTF9BQUNfQkFTRSwgICAgICAgICAgIC8vLzwgQUFDIExvdy1Db21wbGV4aXR5CisgICAgUFJPRklMRV9BQUNfTUFJTiwgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy88IEFBQyBNYWluCisgICAgUFJPRklMRV9BQUNfU1NSLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy88IEFBQyBTY2FsYWJsZSBTYW1wbGluZyBSYXRlCisgICAgUFJPRklMRV9BQUNfTFRQLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy88IEFBQyBMb25nIFRlcm0gUHJlZGljdGlvbgorICAgIFBST0ZJTEVfQUFDX0hFLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vPCBBQUMgSGlnaC1FZmZpY2llbmN5CisgICAgUFJPRklMRV9BQUNfU0NBTEFCTEUsICAgICAgICAgICAgICAgICAgICAgICAvLy88IEFBQyBTY2FsYWJsZQorICAgIFBST0ZJTEVfQUFDX0VSX0xDLCAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vPCBBQUMgRXJyb3IgUmVzaWxpZW50IExvdy1Db21wbGV4aXR5CisgICAgUFJPRklMRV9BQUNfRVJfU0NBTEFCTEUsICAgICAgICAgICAgICAgICAgICAvLy88IEFBQyBFcnJvciBSZXNpbGllbnQgU2NhbGFibGUKKyAgICBQUk9GSUxFX0FBQ19MRCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLzwgQUFDIExvdyBEZWxheQorICAgIFBST0ZJTEVfQUFDX0hFX1BTLCAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vPCBBQUMgSGlnaC1FZmZpY2llbmN5IFBhcmFtZXRyaWMgU3RlcmVvCisgICAgUFJPRklMRV9BQUNfRUxELCAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy88IEFBQyBFbmhhbmNlZCBMb3cgRGVsYXkKKyAgICBQUk9GSUxFX0FBQ19YSEUsICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLzwgQUFDIEV4dGVuZGVkIEhpZ2gtRWZmaWNpZW5jeQorCisgICAgLy8gTVBFRy0yIFZpZGVvIHByb2ZpbGVzCisgICAgUFJPRklMRV9NUDJWX1NJTVBMRSA9IF9DMl9QTF9NUDJWX0JBU0UsICAgICAvLy88IE1QRUctMiBWaWRlbyAoSC4yNjIpIFNpbXBsZQorICAgIFBST0ZJTEVfTVAyVl9NQUlOLCAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vPCBNUEVHLTIgVmlkZW8gKEguMjYyKSBNYWluCisgICAgUFJPRklMRV9NUDJWX1NOUl9TQ0FMQUJMRSwgICAgICAgICAgICAgICAgICAvLy88IE1QRUctMiBWaWRlbyAoSC4yNjIpIFNOUiBTY2FsYWJsZQorICAgIFBST0ZJTEVfTVAyVl9TUEFUSUFMTFlfU0NBTEFCTEUsICAgICAgICAgICAgLy8vPCBNUEVHLTIgVmlkZW8gKEguMjYyKSBTcGF0aWFsbHkgU2NhbGFibGUKKyAgICBQUk9GSUxFX01QMlZfSElHSCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLzwgTVBFRy0yIFZpZGVvIChILjI2MikgSGlnaAorICAgIFBST0ZJTEVfTVAyVl80MjIsICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vPCBNUEVHLTIgVmlkZW8gKEguMjYyKSA0OjI6MgorICAgIFBST0ZJTEVfTVAyVl9NVUxUSVZJRVcsICAgICAgICAgICAgICAgICAgICAgLy8vPCBNUEVHLTIgVmlkZW8gKEguMjYyKSBNdWx0aS12aWV3CisKKyAgICAvLyBILjI2MyBwcm9maWxlcworICAgIFBST0ZJTEVfSDI2M19CQVNFTElORSA9IF9DMl9QTF9IMjYzX0JBU0UsICAgLy8vPCBILjI2MyBCYXNlbGluZSAoUHJvZmlsZSAwKQorICAgIFBST0ZJTEVfSDI2M19IMzIwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vPCBILjI2MyBILjMyMCBDb2RpbmcgRWZmaWNpZW5jeSBWZXJzaW9uIDIgQmFja3dhcmQtQ29tcGF0aWJpbGl0eSAoUHJvZmlsZSAxKQorICAgIFBST0ZJTEVfSDI2M19WMUJDLCAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vPCBILjI2MyBWZXJzaW9uIDEgQmFja3dhcmQtQ29tcGF0aWJpbGl0eSAoUHJvZmlsZSAyKQorICAgIFBST0ZJTEVfSDI2M19JU1dWMiwgICAgICAgICAgICAgICAgICAgICAgICAgLy8vPCBILjI2MyBWZXJzaW9uIDIgSW50ZXJhY3RpdmUgYW5kIFN0cmVhbWluZyBXaXJlbGVzcyAoUHJvZmlsZSAzKQorICAgIFBST0ZJTEVfSDI2M19JU1dWMywgICAgICAgICAgICAgICAgICAgICAgICAgLy8vPCBILjI2MyBWZXJzaW9uIDMgSW50ZXJhY3RpdmUgYW5kIFN0cmVhbWluZyBXaXJlbGVzcyAoUHJvZmlsZSA0KQorICAgIFBST0ZJTEVfSDI2M19ISUdIX0NPTVBSRVNTSU9OLCAgICAgICAgICAgICAgLy8vPCBILjI2MyBDb252ZXJzYXRpb25hbCBIaWdoIENvbXByZXNzaW9uIChQcm9maWxlIDUpCisgICAgUFJPRklMRV9IMjYzX0lOVEVSTkVULCAgICAgICAgICAgICAgICAgICAgICAvLy88IEguMjYzIENvbnZlcnNhdGlvbmFsIEludGVybmV0IChQcm9maWxlIDYpCisgICAgUFJPRklMRV9IMjYzX0lOVEVSTEFDRSwgICAgICAgICAgICAgICAgICAgICAvLy88IEguMjYzIENvbnZlcnNhdGlvbmFsIEludGVybGFjZSAoUHJvZmlsZSA3KQorICAgIFBST0ZJTEVfSDI2M19ISUdIX0xBVEVOQ1ksICAgICAgICAgICAgICAgICAgLy8vPCBILjI2MyBIaWdoIExhdGVuY3kgKFByb2ZpbGUgOCkKKworICAgIC8vIE1QRUctNCBQYXJ0IDIgKFZpZGVvKSBOYXR1cmFsIFZpc3VhbCBQcm9maWxlcworICAgIFBST0ZJTEVfTVA0Vl9TSU1QTEUsICAgICAgICAgICAgICAgICAgICAgICAgLy8vPCBNUEVHLTQgVmlkZW8gU2ltcGxlCisgICAgUFJPRklMRV9NUDRWX1NJTVBMRV9TQ0FMQUJMRSwgICAgICAgICAgICAgICAvLy88IE1QRUctNCBWaWRlbyBTaW1wbGUgU2NhbGFibGUKKyAgICBQUk9GSUxFX01QNFZfQ09SRSwgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLzwgTVBFRy00IFZpZGVvIENvcmUKKyAgICBQUk9GSUxFX01QNFZfTUFJTiwgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLzwgTVBFRy00IFZpZGVvIE1haW4KKyAgICBQUk9GSUxFX01QNFZfTkJJVCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLzwgTVBFRy00IFZpZGVvIE4tQml0CisgICAgUFJPRklMRV9NUDRWX0FSVFMsICAgICAgICAgICAgICAgICAgICAgICAgICAvLy88IE1QRUctNCBWaWRlbyBBZHZhbmNlZCBSZWFsdGltZSBTaW1wbGUKKyAgICBQUk9GSUxFX01QNFZfQ09SRV9TQ0FMQUJMRSwgICAgICAgICAgICAgICAgIC8vLzwgTVBFRy00IFZpZGVvIENvcmUgU2NhbGFibGUKKyAgICBQUk9GSUxFX01QNFZfQUNFLCAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLzwgTVBFRy00IFZpZGVvIEFkdmFuY2VkIENvZGluZyBFZmZpY2llbmN5CisgICAgUFJPRklMRV9NUDRWX0FEVkFOQ0VEX0NPUkUsICAgICAgICAgICAgICAgICAvLy88IE1QRUctNCBWaWRlbyBBZHZhbmNlZCBDb3JlCisgICAgUFJPRklMRV9NUDRWX1NJTVBMRV9TVFVESU8sICAgICAgICAgICAgICAgICAvLy88IE1QRUctNCBWaWRlbyBTaW1wbGUgU3R1ZGlvCisgICAgUFJPRklMRV9NUDRWX0NPUkVfU1RVRElPLCAgICAgICAgICAgICAgICAgICAvLy88IE1QRUctNCBWaWRlbyBDb3JlIFN0dWRpbworICAgIFBST0ZJTEVfTVA0Vl9BRFZBTkNFRF9TSU1QTEUsICAgICAgICAgICAgICAgLy8vPCBNUEVHLTQgVmlkZW8gQWR2YW5jZWQgU2ltcGxlCisgICAgUFJPRklMRV9NUDRWX0ZHUywgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy88IE1QRUctNCBWaWRlbyBGaW5lIEdyYW51bGFyaXR5IFNjYWxhYmxlCisKKyAgICAvLyBBVkMgLyBNUEVHLTQgUGFydCAxMCAoSC4yNjQpIHByb2ZpbGVzCisgICAgUFJPRklMRV9BVkNfQkFTRUxJTkUgPSBfQzJfUExfQVZDX0JBU0UsICAgICAvLy88IEFWQyAoSC4yNjQpIEJhc2VsaW5lCisgICAgUFJPRklMRV9BVkNfQ09OU1RSQUlORURfQkFTRUxJTkUsICAgICAgICAgICAvLy88IEFWQyAoSC4yNjQpIENvbnN0cmFpbmVkIEJhc2VsaW5lCisgICAgUFJPRklMRV9BVkNfTUFJTiwgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy88IEFWQyAoSC4yNjQpIE1haW4KKyAgICBQUk9GSUxFX0FWQ19FWFRFTkRFRCwgICAgICAgICAgICAgICAgICAgICAgIC8vLzwgQVZDIChILjI2NCkgRXh0ZW5kZWQKKyAgICBQUk9GSUxFX0FWQ19ISUdILCAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLzwgQVZDIChILjI2NCkgSGlnaAorICAgIFBST0ZJTEVfQVZDX1BST0dSRVNTSVZFX0hJR0gsICAgICAgICAgICAgICAgLy8vPCBBVkMgKEguMjY0KSBQcm9ncmVzc2l2ZSBIaWdoCisgICAgUFJPRklMRV9BVkNfQ09OU1RSQUlORURfSElHSCwgICAgICAgICAgICAgICAvLy88IEFWQyAoSC4yNjQpIENvbnN0cmFpbmVkIEhpZ2gKKyAgICBQUk9GSUxFX0FWQ19ISUdIXzEwLCAgICAgICAgICAgICAgICAgICAgICAgIC8vLzwgQVZDIChILjI2NCkgSGlnaCAxMAorICAgIFBST0ZJTEVfQVZDX1BST0dSRVNTSVZFX0hJR0hfMTAsICAgICAgICAgICAgLy8vPCBBVkMgKEguMjY0KSBQcm9ncmVzc2l2ZSBIaWdoIDEwCisgICAgUFJPRklMRV9BVkNfSElHSF80MjIsICAgICAgICAgICAgICAgICAgICAgICAvLy88IEFWQyAoSC4yNjQpIEhpZ2ggNDoyOjIKKyAgICBQUk9GSUxFX0FWQ19ISUdIXzQ0NF9QUkVESUNUSVZFLCAgICAgICAgICAgIC8vLzwgQVZDIChILjI2NCkgSGlnaCA0OjQ6NCBQcmVkaWN0aXZlCisgICAgUFJPRklMRV9BVkNfSElHSF8xMF9JTlRSQSwgICAgICAgICAgICAgICAgICAvLy88IEFWQyAoSC4yNjQpIEhpZ2ggMTAgSW50cmEKKyAgICBQUk9GSUxFX0FWQ19ISUdIXzQyMl9JTlRSQSwgICAgICAgICAgICAgICAgIC8vLzwgQVZDIChILjI2NCkgSGlnaCA0OjI6MiBJbnRyYQorICAgIFBST0ZJTEVfQVZDX0hJR0hfNDQ0X0lOVFJBLCAgICAgICAgICAgICAgICAgLy8vPCBBVkMgKEguMjY0KSBIaWdoIDQ6NDo0IEludHJhCisgICAgUFJPRklMRV9BVkNfQ0FWTENfNDQ0X0lOVFJBLCAgICAgICAgICAgICAgICAvLy88IEFWQyAoSC4yNjQpIENBVkxDIDQ6NDo0IEludHJhCisgICAgUFJPRklMRV9BVkNfU0NBTEFCTEVfQkFTRUxJTkUgPSBfQzJfUExfQVZDX0JBU0UgKyAweDEwMCwgIC8vLzwgQVZDIChILjI2NCkgU2NhbGFibGUgQmFzZWxpbmUKKyAgICBQUk9GSUxFX0FWQ19TQ0FMQUJMRV9DT05TVFJBSU5FRF9CQVNFTElORSwgIC8vLzwgQVZDIChILjI2NCkgU2NhbGFibGUgQ29uc3RyYWluZWQgQmFzZWxpbmUKKyAgICBQUk9GSUxFX0FWQ19TQ0FMQUJMRV9ISUdILCAgICAgICAgICAgICAgICAgIC8vLzwgQVZDIChILjI2NCkgU2NhbGFibGUgSGlnaAorICAgIFBST0ZJTEVfQVZDX1NDQUxBQkxFX0NPTlNUUkFJTkVEX0hJR0gsICAgICAgLy8vPCBBVkMgKEguMjY0KSBTY2FsYWJsZSBDb25zdHJhaW5lZCBIaWdoCisgICAgUFJPRklMRV9BVkNfU0NBTEFCTEVfSElHSF9JTlRSQSwgICAgICAgICAgICAvLy88IEFWQyAoSC4yNjQpIFNjYWxhYmxlIEhpZ2ggSW50cmEKKyAgICBQUk9GSUxFX0FWQ19NVUxUSVZJRVdfSElHSCA9IF9DMl9QTF9BVkNfQkFTRSArIDB4MjAwLCAgLy8vPCBBVkMgKEguMjY0KSBNdWx0aXZpZXcgSGlnaAorICAgIFBST0ZJTEVfQVZDX1NURVJFT19ISUdILCAgICAgICAgICAgICAgICAgICAgLy8vPCBBVkMgKEguMjY0KSBTdGVyZW8gSGlnaAorICAgIFBST0ZJTEVfQVZDX01GQ19ISUdILCAgICAgICAgICAgICAgICAgICAgICAgLy8vPCBBVkMgKEguMjY0KSBNRkMgSGlnaAorICAgIFBST0ZJTEVfQVZDX01VTFRJVklFV19ERVBUSF9ISUdIID0gX0MyX1BMX0FWQ19CQVNFICsgMHgzMDAsICAvLy88IEFWQyAoSC4yNjQpIE11bHRpdmlldyBEZXB0aCBIaWdoCisgICAgUFJPRklMRV9BVkNfTUZDX0RFUFRIX0hJR0gsICAgICAgICAgICAgICAgICAvLy88IEFWQyAoSC4yNjQpIE1GQyBEZXB0aCBIaWdoCisgICAgUFJPRklMRV9BVkNfRU5IQU5DRURfTVVMVElWSUVXX0RFUFRIX0hJR0ggPSBfQzJfUExfQVZDX0JBU0UgKyAweDQwMCwgIC8vLzwgQVZDIChILjI2NCkgRW5oYW5jZWQgTXVsdGl2aWV3IERlcHRoIEhpZ2gKKworICAgIC8vIEhFVkMgcHJvZmlsZXMKKyAgICBQUk9GSUxFX0hFVkNfTUFJTiA9IF9DMl9QTF9IRVZDX0JBU0UsICAgICAgIC8vLzwgSEVWQyAoSC4yNjUpIE1haW4KKyAgICBQUk9GSUxFX0hFVkNfTUFJTl8xMCwgICAgICAgICAgICAgICAgICAgICAgIC8vLzwgSEVWQyAoSC4yNjUpIE1haW4gMTAKKyAgICBQUk9GSUxFX0hFVkNfTUFJTl9TVElMTCwgICAgICAgICAgICAgICAgICAgIC8vLzwgSEVWQyAoSC4yNjUpIE1haW4gU3RpbGwgUGljdHVyZQorICAgIFBST0ZJTEVfSEVWQ19NT05PID0gX0MyX1BMX0hFVkNfQkFTRSArIDB4MTAwLCAgLy8vPCBIRVZDIChILjI2NSkgTW9ub2Nocm9tZQorICAgIFBST0ZJTEVfSEVWQ19NT05PXzEyLCAgICAgICAgICAgICAgICAgICAgICAgLy8vPCBIRVZDIChILjI2NSkgTW9ub2Nocm9tZSAxMgorICAgIFBST0ZJTEVfSEVWQ19NT05PXzE2LCAgICAgICAgICAgICAgICAgICAgICAgLy8vPCBIRVZDIChILjI2NSkgTW9ub2Nocm9tZSAxNgorICAgIFBST0ZJTEVfSEVWQ19NQUlOXzEyLCAgICAgICAgICAgICAgICAgICAgICAgLy8vPCBIRVZDIChILjI2NSkgTWFpbiAxMgorICAgIFBST0ZJTEVfSEVWQ19NQUlOXzQyMl8xMCwgICAgICAgICAgICAgICAgICAgLy8vPCBIRVZDIChILjI2NSkgTWFpbiA0OjI6MiAxMAorICAgIFBST0ZJTEVfSEVWQ19NQUlOXzQyMl8xMiwgICAgICAgICAgICAgICAgICAgLy8vPCBIRVZDIChILjI2NSkgTWFpbiA0OjI6MiAxMgorICAgIFBST0ZJTEVfSEVWQ19NQUlOXzQ0NCwgICAgICAgICAgICAgICAgICAgICAgLy8vPCBIRVZDIChILjI2NSkgTWFpbiA0OjQ6NAorICAgIFBST0ZJTEVfSEVWQ19NQUlOXzQ0NF8xMCwgICAgICAgICAgICAgICAgICAgLy8vPCBIRVZDIChILjI2NSkgTWFpbiA0OjQ6NCAxMAorICAgIFBST0ZJTEVfSEVWQ19NQUlOXzQ0NF8xMiwgICAgICAgICAgICAgICAgICAgLy8vPCBIRVZDIChILjI2NSkgTWFpbiA0OjQ6NCAxMgorICAgIFBST0ZJTEVfSEVWQ19NQUlOX0lOVFJBLCAgICAgICAgICAgICAgICAgICAgLy8vPCBIRVZDIChILjI2NSkgTWFpbiBJbnRyYQorICAgIFBST0ZJTEVfSEVWQ19NQUlOXzEwX0lOVFJBLCAgICAgICAgICAgICAgICAgLy8vPCBIRVZDIChILjI2NSkgTWFpbiAxMCBJbnRyYQorICAgIFBST0ZJTEVfSEVWQ19NQUlOXzEyX0lOVFJBLCAgICAgICAgICAgICAgICAgLy8vPCBIRVZDIChILjI2NSkgTWFpbiAxMiBJbnRyYQorICAgIFBST0ZJTEVfSEVWQ19NQUlOXzQyMl8xMF9JTlRSQSwgICAgICAgICAgICAgLy8vPCBIRVZDIChILjI2NSkgTWFpbiA0OjI6MiAxMCBJbnRyYQorICAgIFBST0ZJTEVfSEVWQ19NQUlOXzQyMl8xMl9JTlRSQSwgICAgICAgICAgICAgLy8vPCBIRVZDIChILjI2NSkgTWFpbiA0OjI6MiAxMiBJbnRyYQorICAgIFBST0ZJTEVfSEVWQ19NQUlOXzQ0NF9JTlRSQSwgICAgICAgICAgICAgICAgLy8vPCBIRVZDIChILjI2NSkgTWFpbiA0OjQ6NCBJbnRyYQorICAgIFBST0ZJTEVfSEVWQ19NQUlOXzQ0NF8xMF9JTlRSQSwgICAgICAgICAgICAgLy8vPCBIRVZDIChILjI2NSkgTWFpbiA0OjQ6NCAxMCBJbnRyYQorICAgIFBST0ZJTEVfSEVWQ19NQUlOXzQ0NF8xMl9JTlRSQSwgICAgICAgICAgICAgLy8vPCBIRVZDIChILjI2NSkgTWFpbiA0OjQ6NCAxMiBJbnRyYQorICAgIFBST0ZJTEVfSEVWQ19NQUlOXzQ0NF8xNl9JTlRSQSwgICAgICAgICAgICAgLy8vPCBIRVZDIChILjI2NSkgTWFpbiA0OjQ6NCAxNiBJbnRyYQorICAgIFBST0ZJTEVfSEVWQ19NQUlOXzQ0NF9TVElMTCwgICAgICAgICAgICAgICAgLy8vPCBIRVZDIChILjI2NSkgTWFpbiA0OjQ6NCBTdGlsbCBQaWN0dXJlCisgICAgUFJPRklMRV9IRVZDX01BSU5fNDQ0XzE2X1NUSUxMLCAgICAgICAgICAgICAvLy88IEhFVkMgKEguMjY1KSBNYWluIDQ6NDo0IDE2IFN0aWxsIFBpY3R1cmUKKyAgICBQUk9GSUxFX0hFVkNfSElHSF80NDQgPSBfQzJfUExfSEVWQ19CQVNFICsgMHgyMDAsICAvLy88IEhFVkMgKEguMjY1KSBIaWdoIFRocm91Z2hwdXQgNDo0OjQKKyAgICBQUk9GSUxFX0hFVkNfSElHSF80NDRfMTAsICAgICAgICAgICAgICAgICAgIC8vLzwgSEVWQyAoSC4yNjUpIEhpZ2ggVGhyb3VnaHB1dCA0OjQ6NCAxMAorICAgIFBST0ZJTEVfSEVWQ19ISUdIXzQ0NF8xNCwgICAgICAgICAgICAgICAgICAgLy8vPCBIRVZDIChILjI2NSkgSGlnaCBUaHJvdWdocHV0IDQ6NDo0IDE0CisgICAgUFJPRklMRV9IRVZDX0hJR0hfNDQ0XzE2X0lOVFJBLCAgICAgICAgICAgICAvLy88IEhFVkMgKEguMjY1KSBIaWdoIFRocm91Z2hwdXQgNDo0OjQgMTYgSW50cmEKKyAgICBQUk9GSUxFX0hFVkNfU1hfTUFJTiA9IF9DMl9QTF9IRVZDX0JBU0UgKyAweDMwMCwgIC8vLzwgSEVWQyAoSC4yNjUpIFNjcmVlbi1FeHRlbmRlZCBNYWluCisgICAgUFJPRklMRV9IRVZDX1NYX01BSU5fMTAsICAgICAgICAgICAgICAgICAgICAvLy88IEhFVkMgKEguMjY1KSBTY3JlZW4tRXh0ZW5kZWQgTWFpbiAxMAorICAgIFBST0ZJTEVfSEVWQ19TWF9NQUlOXzQ0NCwgICAgICAgICAgICAgICAgICAgLy8vPCBIRVZDIChILjI2NSkgU2NyZWVuLUV4dGVuZGVkIE1haW4gNDo0OjQKKyAgICBQUk9GSUxFX0hFVkNfU1hfTUFJTl80NDRfMTAsICAgICAgICAgICAgICAgIC8vLzwgSEVWQyAoSC4yNjUpIFNjcmVlbi1FeHRlbmRlZCBNYWluIDQ6NDo0IDEwCisgICAgUFJPRklMRV9IRVZDX1NYX0hJR0hfNDQ0LCAgICAgICAgICAgICAgICAgICAvLy88IEhFVkMgKEguMjY1KSBTY3JlZW4tRXh0ZW5kZWQgSGlnaCBUaHJvdWdocHV0IDQ6NDo0CisgICAgUFJPRklMRV9IRVZDX1NYX0hJR0hfNDQ0XzEwLCAgICAgICAgICAgICAgICAvLy88IEhFVkMgKEguMjY1KSBTY3JlZW4tRXh0ZW5kZWQgSGlnaCBUaHJvdWdocHV0IDQ6NDo0IDEwCisgICAgUFJPRklMRV9IRVZDX1NYX0hJR0hfNDQ0XzE0LCAgICAgICAgICAgICAgICAvLy88IEhFVkMgKEguMjY1KSBTY3JlZW4tRXh0ZW5kZWQgSGlnaCBUaHJvdWdocHV0IDQ6NDo0IDE0CisgICAgUFJPRklMRV9IRVZDX01VTFRJVklFV19NQUlOID0gX0MyX1BMX0hFVkNfQkFTRSArIDB4NDAwLCAgLy8vPCBIRVZDIChILjI2NSkgTXVsdGl2aWV3IE1haW4KKyAgICBQUk9GSUxFX0hFVkNfU0NBTEFCTEVfTUFJTiA9IF9DMl9QTF9IRVZDX0JBU0UgKyAweDUwMCwgIC8vLzwgSEVWQyAoSC4yNjUpIFNjYWxhYmxlIE1haW4KKyAgICBQUk9GSUxFX0hFVkNfU0NBTEFCTEVfTUFJTl8xMCwgICAgICAgICAgICAgIC8vLzwgSEVWQyAoSC4yNjUpIFNjYWxhYmxlIE1haW4gMTAKKyAgICBQUk9GSUxFX0hFVkNfU0NBTEFCTEVfTU9OTyA9IF9DMl9QTF9IRVZDX0JBU0UgKyAweDYwMCwgIC8vLzwgSEVWQyAoSC4yNjUpIFNjYWxhYmxlIE1vbm9jaHJvbWUKKyAgICBQUk9GSUxFX0hFVkNfU0NBTEFCTEVfTU9OT18xMiwgICAgICAgICAgICAgIC8vLzwgSEVWQyAoSC4yNjUpIFNjYWxhYmxlIE1vbm9jaHJvbWUgMTIKKyAgICBQUk9GSUxFX0hFVkNfU0NBTEFCTEVfTU9OT18xNiwgICAgICAgICAgICAgIC8vLzwgSEVWQyAoSC4yNjUpIFNjYWxhYmxlIE1vbm9jaHJvbWUgMTYKKyAgICBQUk9GSUxFX0hFVkNfU0NBTEFCTEVfTUFJTl80NDQsICAgICAgICAgICAgIC8vLzwgSEVWQyAoSC4yNjUpIFNjYWxhYmxlIE1haW4gNDo0OjQKKyAgICBQUk9GSUxFX0hFVkNfM0RfTUFJTiA9IF9DMl9QTF9IRVZDX0JBU0UgKyAweDcwMCwgIC8vLzwgSEVWQyAoSC4yNjUpIDNEIE1haW4KKworICAgIC8vIFZQOSBwcm9maWxlcworICAgIFBST0ZJTEVfVlA5XzAgPSBfQzJfUExfVlA5X0JBU0UsICAgICAgICAgICAgLy8vPCBWUDkgUHJvZmlsZSAwICg0OjI6MCkKKyAgICBQUk9GSUxFX1ZQOV8xLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLzwgVlA5IFByb2ZpbGUgMSAoNDoyOjIgb3IgNDo0OjQpCisgICAgUFJPRklMRV9WUDlfMiwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy88IFZQOSBQcm9maWxlIDIgKDQ6MjowLCAxMCBvciAxMiBiaXQpCisgICAgUFJPRklMRV9WUDlfMywgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy88IFZQOSBQcm9maWxlIDMgKDQ6MjoyIG9yIDQ6NDo0LCAxMCBvciAxMiBiaXQpCisKKyAgICAvLyBEb2xieSBWaXNpb24gcHJvZmlsZXMKKyAgICBQUk9GSUxFX0RWX0FWX1BFUiA9IF9DMl9QTF9EVl9CQVNFICsgMCwgICAgIC8vLzwgRG9sYnkgVmlzaW9uIGR2YXYucGVyIHByb2ZpbGUgKGRlcHJlY2F0ZWQpCisgICAgUFJPRklMRV9EVl9BVl9QRU4sICAgICAgICAgICAgICAgICAgICAgICAgICAvLy88IERvbGJ5IFZpc2lvbiBkdmF2LnBlbiBwcm9maWxlIChkZXByZWNhdGVkKQorICAgIFBST0ZJTEVfRFZfSEVfREVSLCAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vPCBEb2xieSBWaXNpb24gZHZoZS5kZXIgcHJvZmlsZSAoZGVwcmVjYXRlZCkKKyAgICBQUk9GSUxFX0RWX0hFX0RFTiwgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLzwgRG9sYnkgVmlzaW9uIGR2aGUuZGVuIHByb2ZpbGUgKGRlcHJlY2F0ZWQpCisgICAgUFJPRklMRV9EVl9IRV8wNCA9IF9DMl9QTF9EVl9CQVNFICsgNCwgICAgICAvLy88IERvbGJ5IFZpc2lvbiBkdmhlLjA0IHByb2ZpbGUKKyAgICBQUk9GSUxFX0RWX0hFXzA1ID0gX0MyX1BMX0RWX0JBU0UgKyA1LCAgICAgIC8vLzwgRG9sYnkgVmlzaW9uIGR2aGUuMDUgcHJvZmlsZQorICAgIFBST0ZJTEVfRFZfSEVfRFRILCAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vPCBEb2xieSBWaXNpb24gZHZoZS5kdGggcHJvZmlsZSAoZGVwcmVjYXRlZCkKKyAgICBQUk9GSUxFX0RWX0hFXzA3ID0gX0MyX1BMX0RWX0JBU0UgKyA3LCAgICAgIC8vLzwgRG9sYnkgVmlzaW9uIGR2aGUuMDcgcHJvZmlsZQorICAgIFBST0ZJTEVfRFZfSEVfMDggPSBfQzJfUExfRFZfQkFTRSArIDgsICAgICAgLy8vPCBEb2xieSBWaXNpb24gZHZoZS4wOCBwcm9maWxlCisgICAgUFJPRklMRV9EVl9BVl8wOSA9IF9DMl9QTF9EVl9CQVNFICsgOSwgICAgICAvLy88IERvbGJ5IFZpc2lvbiBkdmF2LjA5IHByb2ZpbGUKK307CisKK2VudW0gQzJDb25maWc6OmxldmVsX3QgOiB1aW50MzJfdCB7CisgICAgTEVWRUxfVU5VU0VEID0gMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy88IGxldmVsIGlzIG5vdCB1c2VkIGJ5IHRoaXMgbWVkaWEgdHlwZQorCisgICAgLy8gTVBFRy0yIFZpZGVvIGxldmVscworICAgIExFVkVMX01QMlZfTE9XID0gX0MyX1BMX01QMlZfQkFTRSwgICAgICAgICAgLy8vPCBNUEVHLTIgVmlkZW8gKEguMjYyKSBMb3cgTGV2ZWwKKyAgICBMRVZFTF9NUDJWX01BSU4sICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLzwgTVBFRy0yIFZpZGVvIChILjI2MikgTWFpbiBMZXZlbAorICAgIExFVkVMX01QMlZfSElHSF8xNDQwLCAgICAgICAgICAgICAgICAgICAgICAgLy8vPCBNUEVHLTIgVmlkZW8gKEguMjYyKSBIaWdoIDE0NDAgTGV2ZWwKKyAgICBMRVZFTF9NUDJWX0hJR0gsICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLzwgTVBFRy0yIFZpZGVvIChILjI2MikgSGlnaCBMZXZlbAorICAgIExFVkVMX01QMlZfSElHSFAsICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vPCBNUEVHLTIgVmlkZW8gKEguMjYyKSBIaWdoUCBMZXZlbAorCisgICAgLy8gSC4yNjMgbGV2ZWxzCisgICAgTEVWRUxfSDI2M18xMCA9IF9DMl9QTF9IMjYzX0JBU0UsICAgICAgICAgICAvLy88IEguMjYzIExldmVsIDEwCisgICAgTEVWRUxfSDI2M18yMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy88IEguMjYzIExldmVsIDIwCisgICAgTEVWRUxfSDI2M18zMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy88IEguMjYzIExldmVsIDMwCisgICAgTEVWRUxfSDI2M180MCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy88IEguMjYzIExldmVsIDQwCisgICAgTEVWRUxfSDI2M180NSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy88IEguMjYzIExldmVsIDQ1CisgICAgTEVWRUxfSDI2M181MCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy88IEguMjYzIExldmVsIDUwCisgICAgTEVWRUxfSDI2M182MCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy88IEguMjYzIExldmVsIDYwCisgICAgTEVWRUxfSDI2M183MCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy88IEguMjYzIExldmVsIDcwCisKKyAgICAvLyBNUEVHLTQgUGFydCAyIChWaWRlbykgbGV2ZWxzCisgICAgTEVWRUxfTVA0Vl8wID0gX0MyX1BMX01QNFZfQkFTRSwgICAgICAgICAgICAvLy88IE1QRUctNCBWaWRlbyBMZXZlbCAwCisgICAgTEVWRUxfTVA0Vl8wQiwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy88IE1QRUctNCBWaWRlbyBMZXZlbCAwYgorICAgIExFVkVMX01QNFZfMSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vPCBNUEVHLTQgVmlkZW8gTGV2ZWwgMQorICAgIExFVkVMX01QNFZfMiwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vPCBNUEVHLTQgVmlkZW8gTGV2ZWwgMgorICAgIExFVkVMX01QNFZfMywgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vPCBNUEVHLTQgVmlkZW8gTGV2ZWwgMworICAgIExFVkVMX01QNFZfM0IsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vPCBNUEVHLTQgVmlkZW8gTGV2ZWwgM2IKKyAgICBMRVZFTF9NUDRWXzQsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLzwgTVBFRy00IFZpZGVvIExldmVsIDQKKyAgICBMRVZFTF9NUDRWXzRBLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLzwgTVBFRy00IFZpZGVvIExldmVsIDRhCisgICAgTEVWRUxfTVA0Vl81LCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy88IE1QRUctNCBWaWRlbyBMZXZlbCA1CisgICAgTEVWRUxfTVA0Vl82LCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy88IE1QRUctNCBWaWRlbyBMZXZlbCA2CisKKyAgICAvLyBBVkMgLyBNUEVHLTQgUGFydCAxMCAoSC4yNjQpIGxldmVscworICAgIExFVkVMX0FWQ18xID0gX0MyX1BMX0FWQ19CQVNFLCAgICAgICAgICAgICAgLy8vPCBBVkMgKEguMjY0KSBMZXZlbCAxCisgICAgTEVWRUxfQVZDXzFCLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy88IEFWQyAoSC4yNjQpIExldmVsIDFiCisgICAgTEVWRUxfQVZDXzFfMSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy88IEFWQyAoSC4yNjQpIExldmVsIDEuMQorICAgIExFVkVMX0FWQ18xXzIsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vPCBBVkMgKEguMjY0KSBMZXZlbCAxLjIKKyAgICBMRVZFTF9BVkNfMV8zLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLzwgQVZDIChILjI2NCkgTGV2ZWwgMS4zCisgICAgTEVWRUxfQVZDXzIsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy88IEFWQyAoSC4yNjQpIExldmVsIDIKKyAgICBMRVZFTF9BVkNfMl8xLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLzwgQVZDIChILjI2NCkgTGV2ZWwgMi4xCisgICAgTEVWRUxfQVZDXzJfMiwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy88IEFWQyAoSC4yNjQpIExldmVsIDIuMgorICAgIExFVkVMX0FWQ18zLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vPCBBVkMgKEguMjY0KSBMZXZlbCAzCisgICAgTEVWRUxfQVZDXzNfMSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy88IEFWQyAoSC4yNjQpIExldmVsIDMuMQorICAgIExFVkVMX0FWQ18zXzIsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vPCBBVkMgKEguMjY0KSBMZXZlbCAzLjIKKyAgICBMRVZFTF9BVkNfNCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLzwgQVZDIChILjI2NCkgTGV2ZWwgNAorICAgIExFVkVMX0FWQ180XzEsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vPCBBVkMgKEguMjY0KSBMZXZlbCA0LjEKKyAgICBMRVZFTF9BVkNfNF8yLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLzwgQVZDIChILjI2NCkgTGV2ZWwgNC4yCisgICAgTEVWRUxfQVZDXzUsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy88IEFWQyAoSC4yNjQpIExldmVsIDUKKyAgICBMRVZFTF9BVkNfNV8xLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLzwgQVZDIChILjI2NCkgTGV2ZWwgNS4xCisgICAgTEVWRUxfQVZDXzVfMiwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy88IEFWQyAoSC4yNjQpIExldmVsIDUuMgorCisgICAgLy8gSEVWQyAoSC4yNjUpIHRpZXJzIGFuZCBsZXZlbHMKKyAgICBMRVZFTF9IRVZDX01BSU5fMSA9IF9DMl9QTF9IRVZDX0JBU0UsICAgICAgIC8vLzwgSEVWQyAoSC4yNjUpIE1haW4gVGllciBMZXZlbCAxCisgICAgTEVWRUxfSEVWQ19NQUlOXzIsICAgICAgICAgICAgICAgICAgICAgICAgICAvLy88IEhFVkMgKEguMjY1KSBNYWluIFRpZXIgTGV2ZWwgMgorICAgIExFVkVMX0hFVkNfTUFJTl8yXzEsICAgICAgICAgICAgICAgICAgICAgICAgLy8vPCBIRVZDIChILjI2NSkgTWFpbiBUaWVyIExldmVsIDIuMQorICAgIExFVkVMX0hFVkNfTUFJTl8zLCAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vPCBIRVZDIChILjI2NSkgTWFpbiBUaWVyIExldmVsIDMKKyAgICBMRVZFTF9IRVZDX01BSU5fM18xLCAgICAgICAgICAgICAgICAgICAgICAgIC8vLzwgSEVWQyAoSC4yNjUpIE1haW4gVGllciBMZXZlbCAzLjEKKyAgICBMRVZFTF9IRVZDX01BSU5fNCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLzwgSEVWQyAoSC4yNjUpIE1haW4gVGllciBMZXZlbCA0CisgICAgTEVWRUxfSEVWQ19NQUlOXzRfMSwgICAgICAgICAgICAgICAgICAgICAgICAvLy88IEhFVkMgKEguMjY1KSBNYWluIFRpZXIgTGV2ZWwgNC4xCisgICAgTEVWRUxfSEVWQ19NQUlOXzUsICAgICAgICAgICAgICAgICAgICAgICAgICAvLy88IEhFVkMgKEguMjY1KSBNYWluIFRpZXIgTGV2ZWwgNQorICAgIExFVkVMX0hFVkNfTUFJTl81XzEsICAgICAgICAgICAgICAgICAgICAgICAgLy8vPCBIRVZDIChILjI2NSkgTWFpbiBUaWVyIExldmVsIDUuMQorICAgIExFVkVMX0hFVkNfTUFJTl81XzIsICAgICAgICAgICAgICAgICAgICAgICAgLy8vPCBIRVZDIChILjI2NSkgTWFpbiBUaWVyIExldmVsIDUuMgorICAgIExFVkVMX0hFVkNfTUFJTl82LCAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vPCBIRVZDIChILjI2NSkgTWFpbiBUaWVyIExldmVsIDYKKyAgICBMRVZFTF9IRVZDX01BSU5fNl8xLCAgICAgICAgICAgICAgICAgICAgICAgIC8vLzwgSEVWQyAoSC4yNjUpIE1haW4gVGllciBMZXZlbCA2LjEKKyAgICBMRVZFTF9IRVZDX01BSU5fNl8yLCAgICAgICAgICAgICAgICAgICAgICAgIC8vLzwgSEVWQyAoSC4yNjUpIE1haW4gVGllciBMZXZlbCA2LjIKKworICAgIExFVkVMX0hFVkNfSElHSF80ID0gX0MyX1BMX0hFVkNfQkFTRSArIDB4MTAwLCAgLy8vPCBIRVZDIChILjI2NSkgSGlnaCBUaWVyIExldmVsIDQKKyAgICBMRVZFTF9IRVZDX0hJR0hfNF8xLCAgICAgICAgICAgICAgICAgICAgICAgIC8vLzwgSEVWQyAoSC4yNjUpIEhpZ2ggVGllciBMZXZlbCA0LjEKKyAgICBMRVZFTF9IRVZDX0hJR0hfNSwgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLzwgSEVWQyAoSC4yNjUpIEhpZ2ggVGllciBMZXZlbCA1CisgICAgTEVWRUxfSEVWQ19ISUdIXzVfMSwgICAgICAgICAgICAgICAgICAgICAgICAvLy88IEhFVkMgKEguMjY1KSBIaWdoIFRpZXIgTGV2ZWwgNS4xCisgICAgTEVWRUxfSEVWQ19ISUdIXzVfMiwgICAgICAgICAgICAgICAgICAgICAgICAvLy88IEhFVkMgKEguMjY1KSBIaWdoIFRpZXIgTGV2ZWwgNS4yCisgICAgTEVWRUxfSEVWQ19ISUdIXzYsICAgICAgICAgICAgICAgICAgICAgICAgICAvLy88IEhFVkMgKEguMjY1KSBIaWdoIFRpZXIgTGV2ZWwgNgorICAgIExFVkVMX0hFVkNfSElHSF82XzEsICAgICAgICAgICAgICAgICAgICAgICAgLy8vPCBIRVZDIChILjI2NSkgSGlnaCBUaWVyIExldmVsIDYuMQorICAgIExFVkVMX0hFVkNfSElHSF82XzIsICAgICAgICAgICAgICAgICAgICAgICAgLy8vPCBIRVZDIChILjI2NSkgSGlnaCBUaWVyIExldmVsIDYuMgorCisgICAgLy8gVlA5IGxldmVscworICAgIExFVkVMX1ZQOV8xID0gX0MyX1BMX1ZQOV9CQVNFLCAgICAgICAgICAgICAgLy8vPCBWUDkgTGV2ZWwgMQorICAgIExFVkVMX1ZQOV8xXzEsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vPCBWUDkgTGV2ZWwgMS4xCisgICAgTEVWRUxfVlA5XzIsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy88IFZQOSBMZXZlbCAyCisgICAgTEVWRUxfVlA5XzJfMSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy88IFZQOSBMZXZlbCAyLjEKKyAgICBMRVZFTF9WUDlfMywgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLzwgVlA5IExldmVsIDMKKyAgICBMRVZFTF9WUDlfM18xLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLzwgVlA5IExldmVsIDMuMQorICAgIExFVkVMX1ZQOV80LCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vPCBWUDkgTGV2ZWwgNAorICAgIExFVkVMX1ZQOV80XzEsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vPCBWUDkgTGV2ZWwgNC4xCisgICAgTEVWRUxfVlA5XzUsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy88IFZQOSBMZXZlbCA1CisgICAgTEVWRUxfVlA5XzVfMSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy88IFZQOSBMZXZlbCA1LjEKKyAgICBMRVZFTF9WUDlfNV8yLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLzwgVlA5IExldmVsIDUuMgorICAgIExFVkVMX1ZQOV82LCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vPCBWUDkgTGV2ZWwgNgorICAgIExFVkVMX1ZQOV82XzEsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vPCBWUDkgTGV2ZWwgNi4xCisgICAgTEVWRUxfVlA5XzZfMiwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy88IFZQOSBMZXZlbCA2LjIKKworICAgIC8vIERvbGJ5IFZpc2lvbiBsZXZlbAorICAgIExFVkVMX0RWX01BSU5fSERfMjQgPSBfQzJfUExfRFZfQkFTRSwgICAgICAgLy8vPCBEb2xieSBWaXNpb24gbWFpbiB0aWVyIGhkMjQKKyAgICBMRVZFTF9EVl9NQUlOX0hEXzMwLCAgICAgICAgICAgICAgICAgICAgICAgIC8vLzwgRG9sYnkgVmlzaW9uIG1haW4gdGllciBoZDMwCisgICAgTEVWRUxfRFZfTUFJTl9GSERfMjQsICAgICAgICAgICAgICAgICAgICAgICAvLy88IERvbGJ5IFZpc2lvbiBtYWluIHRpZXIgZmhkMjQKKyAgICBMRVZFTF9EVl9NQUlOX0ZIRF8zMCwgICAgICAgICAgICAgICAgICAgICAgIC8vLzwgRG9sYnkgVmlzaW9uIG1haW4gdGllciBmaGQzMAorICAgIExFVkVMX0RWX01BSU5fRkhEXzYwLCAgICAgICAgICAgICAgICAgICAgICAgLy8vPCBEb2xieSBWaXNpb24gbWFpbiB0aWVyIGZoZDYwCisgICAgTEVWRUxfRFZfTUFJTl9VSERfMjQsICAgICAgICAgICAgICAgICAgICAgICAvLy88IERvbGJ5IFZpc2lvbiBtYWluIHRpZXIgdWhkMjQKKyAgICBMRVZFTF9EVl9NQUlOX1VIRF8zMCwgICAgICAgICAgICAgICAgICAgICAgIC8vLzwgRG9sYnkgVmlzaW9uIG1haW4gdGllciB1aGQzMAorICAgIExFVkVMX0RWX01BSU5fVUhEXzQ4LCAgICAgICAgICAgICAgICAgICAgICAgLy8vPCBEb2xieSBWaXNpb24gbWFpbiB0aWVyIHVoZDQ4CisgICAgTEVWRUxfRFZfTUFJTl9VSERfNjAsICAgICAgICAgICAgICAgICAgICAgICAvLy88IERvbGJ5IFZpc2lvbiBtYWluIHRpZXIgdWhkNjAKKworICAgIExFVkVMX0RWX0hJR0hfSERfMjQgPSBfQzJfUExfRFZfQkFTRSArIDB4MTAwLCAgLy8vPCBEb2xieSBWaXNpb24gaGlnaCB0aWVyIGhkMjQKKyAgICBMRVZFTF9EVl9ISUdIX0hEXzMwLCAgICAgICAgICAgICAgICAgICAgICAgIC8vLzwgRG9sYnkgVmlzaW9uIGhpZ2ggdGllciBoZDMwCisgICAgTEVWRUxfRFZfSElHSF9GSERfMjQsICAgICAgICAgICAgICAgICAgICAgICAvLy88IERvbGJ5IFZpc2lvbiBoaWdoIHRpZXIgZmhkMjQKKyAgICBMRVZFTF9EVl9ISUdIX0ZIRF8zMCwgICAgICAgICAgICAgICAgICAgICAgIC8vLzwgRG9sYnkgVmlzaW9uIGhpZ2ggdGllciBmaGQzMAorICAgIExFVkVMX0RWX0hJR0hfRkhEXzYwLCAgICAgICAgICAgICAgICAgICAgICAgLy8vPCBEb2xieSBWaXNpb24gaGlnaCB0aWVyIGZoZDYwCisgICAgTEVWRUxfRFZfSElHSF9VSERfMjQsICAgICAgICAgICAgICAgICAgICAgICAvLy88IERvbGJ5IFZpc2lvbiBoaWdoIHRpZXIgdWhkMjQKKyAgICBMRVZFTF9EVl9ISUdIX1VIRF8zMCwgICAgICAgICAgICAgICAgICAgICAgIC8vLzwgRG9sYnkgVmlzaW9uIGhpZ2ggdGllciB1aGQzMAorICAgIExFVkVMX0RWX0hJR0hfVUhEXzQ4LCAgICAgICAgICAgICAgICAgICAgICAgLy8vPCBEb2xieSBWaXNpb24gaGlnaCB0aWVyIHVoZDQ4CisgICAgTEVWRUxfRFZfSElHSF9VSERfNjAsICAgICAgICAgICAgICAgICAgICAgICAvLy88IERvbGJ5IFZpc2lvbiBoaWdoIHRpZXIgdWhkNjAKK307CisKK3N0cnVjdCBDMlByb2ZpbGVMZXZlbFN0cnVjdCB7CisgICAgQzJDb25maWc6OnByb2ZpbGVfdCBwcm9maWxlOyAgLy8vPCBjb2RpbmcgcHJvZmlsZQorICAgIEMyQ29uZmlnOjpsZXZlbF90ICAgbGV2ZWw7ICAgIC8vLzwgY29kaW5nIGxldmVsCisKKyAgICBDMlByb2ZpbGVMZXZlbFN0cnVjdCgKKyAgICAgICAgICAgIEMyQ29uZmlnOjpwcm9maWxlX3QgcHJvZmlsZV8gPSBDMkNvbmZpZzo6UFJPRklMRV9VTlVTRUQsCisgICAgICAgICAgICBDMkNvbmZpZzo6bGV2ZWxfdCBsZXZlbF8gPSBDMkNvbmZpZzo6TEVWRUxfVU5VU0VEKQorICAgICAgICA6IHByb2ZpbGUocHJvZmlsZV8pLCBsZXZlbChsZXZlbF8pIHsgfQorCisgICAgREVGSU5FX0FORF9ERVNDUklCRV9DMlNUUlVDVChQcm9maWxlTGV2ZWwpCisgICAgQzJGSUVMRChwcm9maWxlLCAicHJvZmlsZSIpCisgICAgQzJGSUVMRChsZXZlbCwgICAibGV2ZWwiKQorfTsKKworLy8gVE9ETzogbWF5IG5lZWQgdG8gbWFrZSB0aGlzIGV4cGxpY2l0IChoYXZlIC5zZXQgbWVtYmVyKQordHlwZWRlZiBDMlN0cmVhbVBhcmFtPEMySW5mbywgQzJQcm9maWxlTGV2ZWxTdHJ1Y3QsIGtQYXJhbUluZGV4UHJvZmlsZUxldmVsPgorICAgICAgICBDMlN0cmVhbVByb2ZpbGVMZXZlbEluZm87Citjb25zdGV4cHIgY2hhciBDMl9QQVJBTUtFWV9QUk9GSUxFX0xFVkVMW10gPSAiY29kZWQucGwiOworI2RlZmluZSBDMl9QQVJBTUtFWV9TVFJFQU1fUFJPRklMRV9MRVZFTCBDMl9QQVJBTUtFWV9QUk9GSUxFX0xFVkVMCisKKy8qKgorICogQ29kZWMtc3BlY2lmaWMgaW5pdGlhbGl6YXRpb24gZGF0YS4KKyAqCisgKiBUaGlzIGlzIGluaXRpYWxpemF0aW9uIGRhdGEgZm9yIHRoZSBjb2RlYy4KKyAqCisgKiBGb3IgQVZDL0hFVkMsIHRoZXNlIGFyZSB0aGUgY29uY2F0ZW5hdGVkIFNQUy9QUFMvVlBTIE5BTHMuCisgKgorICogVE9ETzogZGVmaW5lIGZvciBvdGhlciBjb2RlY3MuCisgKi8KK3R5cGVkZWYgQzJTdHJlYW1QYXJhbTxDMkluZm8sIEMyQmxvYlZhbHVlLCBrUGFyYW1JbmRleEluaXREYXRhPiBDMlN0cmVhbUluaXREYXRhSW5mbzsKK3R5cGVkZWYgQzJTdHJlYW1Jbml0RGF0YUluZm8gQzJTdHJlYW1Dc2RJbmZvOyAvLyBkZXByZWNhdGVkCitjb25zdGV4cHIgY2hhciBDMl9QQVJBTUtFWV9JTklUX0RBVEFbXSA9ICJjb2RlZC5pbml0LWRhdGEiOworI2RlZmluZSBDMl9QQVJBTUtFWV9TVFJFQU1fSU5JVF9EQVRBIEMyX1BBUkFNS0VZX0lOSVRfREFUQQorCisvKioKKyAqIFN1cHBsZW1lbnRhbCBEYXRhLgorICoKKyAqIFRoaXMgaXMgY29kaW5nLXNwZWNpZmljIHN1cHBsZW1lbnRhbCBpbmZvcm1hdGlvbmFsIGRhdGEsIGUuZy4gU0VJIGZvciBBVkMvSEVWQy4KKyAqIFRoaXMgc3RydWN0dXJlIGlzIG5vdCBhIGNvbmZpZ3VyYXRpb24gc28gaXQgZG9lcyBub3QgaGF2ZSBhIHBhcmFtZXRlciBrZXkuCisgKiBUaGlzIHN0cnVjdHVyZSBzaGFsbCBiZSByZXR1cm5lZCBpbiB0aGUgY29uZmlndXJhdGlvbiB1cGRhdGUsIGFuZCBjYW4gYmUgcmVwZWF0ZWQgYXMgbmVlZGVkCisgKiBpbiB0aGUgc2FtZSB1cGRhdGUuCisgKi8KK0MyRU5VTShDMkNvbmZpZzo6c3VwcGxlbWVudGFsX2luZm9fdCwgdWludDMyX3QsCisgICAgSU5GT19OT05FID0gMCwKKworICAgIElORk9fUFJFRklYX1NFSV9VTklUID0gMHgxMDAwMCwgLy8vPCBwcmVmaXggU0VJIHBheWxvYWQgdHlwZXMgYWRkIHRoaXMgZmxhZworICAgIElORk9fU1VGRklYX1NFSV9VTklUID0gMHgyMDAwMCwgLy8vPCBzdWZmaXggU0VJIHBheWxvYWQgdHlwZXMgYWRkIHRoaXMgZmxhZworCisgICAgSU5GT19TRUlfVVNFUl9EQVRBID0gSU5GT19QUkVGSVhfU0VJX1VOSVQgfCA0LCAgICAvLy88IGNsb3NlZC1jYXB0aW9uaW5nIGRhdGEgKElUVS1UIFQzNSkKKyAgICBJTkZPX1NFSV9NRENWICAgICAgPSBJTkZPX1BSRUZJWF9TRUlfVU5JVCB8IDEzNywgIC8vLzwgbWFzdGVyaW5nIGRpc3BsYXkgY29sb3Igdm9sdW1lCisgICAgSU5GT19TRVRfVVNFUl9EQVRBX1NGWCA9IElORk9fU1VGRklYX1NFSV9VTklUIHwgNCwgLy8vPCBjbG9zZWQtY2FwdGlvbmluZyBkYXRhIChJVFUtVCBUMzUpCisKKyAgICBJTkZPX1ZFTkRPUl9TVEFSVCA9IDB4NzAwMDAwMDAKKykKKworc3RydWN0IEMyU3VwcGxlbWVudGFsRGF0YVN0cnVjdCB7CisgICAgQzJTdXBwbGVtZW50YWxEYXRhU3RydWN0KCkKKyAgICAgICAgOiB0eXBlXyhJTkZPX05PTkUpIHsgfQorCisgICAgQzJTdXBwbGVtZW50YWxEYXRhU3RydWN0KAorICAgICAgICAgICAgc2l6ZV90IGZsZXhDb3VudCwgQzJDb25maWc6OnN1cHBsZW1lbnRhbF9pbmZvX3QgdHlwZSwgc3RkOjp2ZWN0b3I8dWludDhfdD4gZGF0YV8pCisgICAgICAgIDogdHlwZV8odHlwZSkgeworICAgICAgICAgICAgbWVtY3B5KGRhdGEsICZkYXRhX1swXSwgYzJfbWluKGRhdGFfLnNpemUoKSwgZmxleENvdW50KSk7CisgICAgfQorCisgICAgQzJDb25maWc6OnN1cHBsZW1lbnRhbF9pbmZvX3QgdHlwZV87CisgICAgdWludDhfdCBkYXRhW107CisKKyAgICBERUZJTkVfQU5EX0RFU0NSSUJFX0ZMRVhfQzJTVFJVQ1QoU3VwcGxlbWVudGFsRGF0YSwgZGF0YSkKKyAgICBDMkZJRUxEKHR5cGVfLCAidHlwZSIpCisgICAgQzJGSUVMRChkYXRhLCAiZGF0YSIpCit9OwordHlwZWRlZiBDMlN0cmVhbVBhcmFtPEMySW5mbywgQzJTdXBwbGVtZW50YWxEYXRhU3RydWN0LCBrUGFyYW1JbmRleFN1cHBsZW1lbnRhbERhdGE+CisgICAgICAgIEMyU3RyZWFtU3VwcGxlbWVudGFsRGF0YUluZm87CisKKy8qKgorICogU3VwcGxlbWVudGFsIERhdGEgU3Vic2NyaXB0aW9uCisgKi8KK3R5cGVkZWYgQzJTdHJlYW1QYXJhbTxDMlR1bmluZywgQzJTaW1wbGVBcnJheVN0cnVjdDxDMkNvbmZpZzo6c3VwcGxlbWVudGFsX2luZm9fdD4sCisgICAgICAgICAgICAgICAga1BhcmFtSW5kZXhTdWJzY3JpYmVkU3VwcGxlbWVudGFsRGF0YT4KKyAgICAgICAgQzJTdHJlYW1TdWJzY3JpYmVkU3VwcGxlbWVudGFsRGF0YVR1bmluZzsKK2NvbnN0ZXhwciBjaGFyIEMyX1BBUkFNS0VZX1NVQlNDUklCRURfU1VQUExFTUVOVEFMX0RBVEFbXSA9ICJvdXRwdXQuc3Vic2NyaWJlZC1zdXBwbGVtZW50YWwiOworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIHBpcGVsaW5lIGNoYXJhY3RlcmlzdGljcyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKKy8qKgorICogTWVkaWEtdHlwZS4KKyAqCisgKiBUaGlzIGlzIGRlZmluZWQgZm9yIGJvdGggcG9ydCBhbmQgc3RyZWFtLCBidXQgc3RyZWFtIG1lZGlhIHR5cGUgbWF5IGJlIGEgc3VidHlwZSBvZiB0aGUKKyAqIHBvcnQgbWVkaWEgdHlwZS4KKyAqLwordHlwZWRlZiBDMlBvcnRQYXJhbTxDMlNldHRpbmcsIEMyU3RyaW5nVmFsdWUsIGtQYXJhbUluZGV4TWVkaWFUeXBlPiBDMlBvcnRNZWRpYVR5cGVTZXR0aW5nOwordHlwZWRlZiBDMlBvcnRNZWRpYVR5cGVTZXR0aW5nIEMyUG9ydE1pbWVDb25maWc7IC8vIGRlcHJlY2F0ZWQKK2NvbnN0ZXhwciBjaGFyIEMyX1BBUkFNS0VZX0lOUFVUX01FRElBX1RZUEVbXSA9ICJpbnB1dC5tZWRpYS10eXBlIjsKK2NvbnN0ZXhwciBjaGFyIEMyX1BBUkFNS0VZX09VVFBVVF9NRURJQV9UWVBFW10gPSAib3V0cHV0Lm1lZGlhLXR5cGUiOworI2RlZmluZSBDMl9OQU1FX0lOUFVUX1BPUlRfTUlNRV9TRVRUSU5HIEMyX1BBUkFNS0VZX0lOUFVUX01FRElBX1RZUEUKKyNkZWZpbmUgQzJfTkFNRV9PVVRQVVRfUE9SVF9NSU1FX1NFVFRJTkcgQzJfUEFSQU1LRVlfT1VUUFVUX01FRElBX1RZUEUKKwordHlwZWRlZiBDMlN0cmVhbVBhcmFtPEMyU2V0dGluZywgQzJTdHJpbmdWYWx1ZSwga1BhcmFtSW5kZXhNZWRpYVR5cGU+IEMyU3RyZWFtTWVkaWFUeXBlU2V0dGluZzsKKworLyoqCisgKiBQaXBlbGluZSBkZWxheXMuCisgKgorICogSW5wdXQgZGVsYXkgaXMgdGhlIG51bWJlciBvZiBhZGRpdGlvbmFsIGlucHV0IGZyYW1lcyByZXF1ZXN0ZWQgYnkgdGhlIGNvbXBvbmVudCB0byBwcm9jZXNzCisgKiBhbiBpbnB1dCBmcmFtZS4KKyAqCisgKiBPdXRwdXQgZGVsYXkgaXMgdGhlIG51bWJlciBvZiBhZGRpdGlvbmFsIG91dHB1dCBmcmFtZXMgdGhhdCBuZWVkIHRvIGJlIGdlbmVyYXRlZCBiZWZvcmUgYW4KKyAqIG91dHB1dCBjYW4gYmUgcmVsZWFzZWQgYnkgdGhlIGNvbXBvbmVudC4KKyAqCisgKiBQaXBlbGluZSBkZWxheSBpcyB0aGUgbnVtYmVyIG9mIGFkZGl0aW9uYWwgZnJhbWVzIHRoYXQgYXJlIHByb2Nlc3NlZCBhdCBvbmUgdGltZSBieSB0aGUKKyAqIGNvbXBvbmVudC4KKyAqCisgKiBBcyB0aGVzZSBtYXkgdmFyeSBmcm9tIGZyYW1lIHRvIGZyYW1lLCB0aGUgbnVtYmVyIGlzIHRoZSBtYXhpbXVtIHJlcXVpcmVkIHZhbHVlLiBFLmcuIGlmCisgKiBpbnB1dCBkZWxheSBpcyAwLCB0aGUgY29tcG9uZW50IGlzIGV4cGVjdGVkIHRvIGNvbnN1bWUgZWFjaCBmcmFtZSBxdWV1ZWQgZXZlbiBpZiBubyBmdXJ0aGVyCisgKiBmcmFtZXMgYXJlIHF1ZXVlZC4gU2ltaWxhcmx5LCBpZiBpbnB1dCBkZWxheSBpcyAxLCBhcyBsb25nIGFzIHRoZXJlIGFyZSBhbHdheXMgZXhhY3RseSAyCisgKiBvdXRzdGFuZGluZyBpbnB1dCBmcmFtZXMgcXVldWVkIHRvIHRoZSBjb21wb25lbnQsIGl0IHNoYWxsIHByb2R1Y2Ugb3V0cHV0LgorICovCisKK3R5cGVkZWYgQzJQb3J0UGFyYW08QzJUdW5pbmcsIEMyVWludDMyVmFsdWUsIGtQYXJhbUluZGV4RGVsYXlSZXF1ZXN0PiBDMlBvcnRSZXF1ZXN0ZWREZWxheVR1bmluZzsKK3R5cGVkZWYgQzJQb3J0UmVxdWVzdGVkRGVsYXlUdW5pbmcgQzJQb3J0UmVxdWVzdGVkTGF0ZW5jeVR1bmluZzsgLy8gZGVwcmVjYXRlZAorY29uc3RleHByIGNoYXIgQzJfUEFSQU1LRVlfSU5QVVRfREVMQVlfUkVRVUVTVFtdID0gImlucHV0LmRlbGF5LnJlcXVlc3RlZCI7Citjb25zdGV4cHIgY2hhciBDMl9QQVJBTUtFWV9PVVRQVVRfREVMQVlfUkVRVUVTVFtdID0gIm91dHB1dC5kZWxheS5yZXF1ZXN0ZWQiOworCit0eXBlZGVmIEMyR2xvYmFsUGFyYW08QzJUdW5pbmcsIEMyVWludDMyVmFsdWUsIGtQYXJhbUluZGV4RGVsYXlSZXF1ZXN0PgorICAgICAgICBDMlJlcXVlc3RlZFBpcGVsaW5lRGVsYXlUdW5pbmc7Cit0eXBlZGVmIEMyUmVxdWVzdGVkUGlwZWxpbmVEZWxheVR1bmluZyBDMkNvbXBvbmVudFJlcXVlc3RlZExhdGVuY3lUdW5pbmc7IC8vIGRlcHJlY2F0ZWQKK2NvbnN0ZXhwciBjaGFyIEMyX1BBUkFNS0VZX1BJUEVMSU5FX0RFTEFZX1JFUVVFU1RbXSA9ICJwaXBlbGluZS1kZWxheS5yZXF1ZXN0ZWQiOworCisvLyByZWFkLW9ubHkKK3R5cGVkZWYgQzJQb3J0UGFyYW08QzJUdW5pbmcsIEMyVWludDMyVmFsdWUsIGtQYXJhbUluZGV4RGVsYXk+IEMyUG9ydEFjdHVhbERlbGF5VHVuaW5nOwordHlwZWRlZiBDMlBvcnRBY3R1YWxEZWxheVR1bmluZyBDMlBvcnRMYXRlbmN5SW5mbzsgLy8gZGVwcmVjYXRlZAorY29uc3RleHByIGNoYXIgQzJfUEFSQU1LRVlfSU5QVVRfREVMQVlbXSA9ICJpbnB1dC5kZWxheS5hY3R1YWwiOworY29uc3RleHByIGNoYXIgQzJfUEFSQU1LRVlfT1VUUFVUX0RFTEFZW10gPSAib3V0cHV0LmRlbGF5LmFjdHVhbCI7CisKKy8vIHJlYWQtb25seQordHlwZWRlZiBDMkdsb2JhbFBhcmFtPEMyVHVuaW5nLCBDMlVpbnQzMlZhbHVlLCBrUGFyYW1JbmRleERlbGF5PiBDMkFjdHVhbFBpcGVsaW5lRGVsYXlUdW5pbmc7Cit0eXBlZGVmIEMyQWN0dWFsUGlwZWxpbmVEZWxheVR1bmluZyBDMkNvbXBvbmVudExhdGVuY3lJbmZvOyAvLyBkZXByZWNhdGVkCitjb25zdGV4cHIgY2hhciBDMl9QQVJBTUtFWV9QSVBFTElORV9ERUxBWVtdID0gImFsZ28uZGVsYXkuYWN0dWFsIjsKKworLyoqCisgKiBSZWZlcmVuY2UgY2hhcmFjdGVyaXN0aWNzLgorICoKKyAqIFRoZSBjb21wb25lbnQgbWF5IGhvbGQgb250byBpbnB1dCBhbmQgb3V0cHV0IGJ1ZmZlcnMgZXZlbiBhZnRlciBjb21wbGV0aW5nIHRoZSBjb3JyZXNwb25kaW5nCisgKiB3b3JrIGl0ZW0uCisgKgorICogTWF4IHJlZmVyZW5jZSBhZ2UgaXMgdGhlIGxvbmdlc3QgbnVtYmVyIG9mIGFkZGl0aW9uYWwgZnJhbWUgcHJvY2Vzc2luZyB0aGF0IGEgY29tcG9uZW50IG1heQorICogaG9sZCBvbnRvIGEgYnVmZmVyIGZvci4gTWF4IHJlZmVyZW5jZSBjb3VudCBpcyB0aGUgbnVtYmVyIG9mIGJ1ZmZlcnMgdGhhdCBhIGNvbXBvbmVudCBtYXkKKyAqIGhvbGQgb250byBhdCB0aGUgc2FtZSB0aW1lIGF0IHRoZSB3b3JzdCBjYXNlLiBUaGVzZSBudW1iZXJzIGFzc3VtZSBzaW5nbGUgZnJhbWUgcGVyIGJ1ZmZlcnMuCisgKgorICogVXNlIG1heC11aW50MzIgaWYgdGhlcmUgaXMgbm8gbGltaXQgZm9yIHRoZSBtYXggYWdlIG9yIGNvdW50LgorICovCit0eXBlZGVmIEMyU3RyZWFtUGFyYW08QzJUdW5pbmcsIEMyVWludDMyVmFsdWUsIGtQYXJhbUluZGV4TWF4UmVmZXJlbmNlQWdlPgorICAgICAgICBDMlN0cmVhbU1heFJlZmVyZW5jZUFnZVR1bmluZzsKK2NvbnN0ZXhwciBjaGFyIEMyX1BBUkFNS0VZX0lOUFVUX01BWF9SRUZFUkVOQ0VfQUdFW10gPSAiaW5wdXQucmVmZXJlbmNlLm1heC1hZ2UiOworY29uc3RleHByIGNoYXIgQzJfUEFSQU1LRVlfT1VUUFVUX01BWF9SRUZFUkVOQ0VfQUdFW10gPSAib3V0cHV0LnJlZmVyZW5jZS5tYXgtYWdlIjsKKwordHlwZWRlZiBDMlN0cmVhbVBhcmFtPEMyVHVuaW5nLCBDMlVpbnQzMlZhbHVlLCBrUGFyYW1JbmRleE1heFJlZmVyZW5jZUNvdW50PgorICAgICAgICBDMlN0cmVhbU1heFJlZmVyZW5jZUNvdW50VHVuaW5nOworY29uc3RleHByIGNoYXIgQzJfUEFSQU1LRVlfSU5QVVRfTUFYX1JFRkVSRU5DRV9DT1VOVFtdID0gImlucHV0LnJlZmVyZW5jZS5tYXgtY291bnQiOworY29uc3RleHByIGNoYXIgQzJfUEFSQU1LRVlfT1VUUFVUX01BWF9SRUZFUkVOQ0VfQ09VTlRbXSA9ICJvdXRwdXQucmVmZXJlbmNlLm1heC1jb3VudCI7CisKKy8qKgorICogT3V0cHV0IHJlb3JkZXJpbmcuCisgKgorICogVGhlIHNpemUgb2YgdGhlIHdpbmRvdyB0byB1c2UgZm9yIG91dHB1dCBidWZmZXIgcmVvcmRlcmluZy4gMCBpcyBpbnRlcnByZXRlZCBhcyAxLgorICovCisvLyBvdXRwdXQgb25seQordHlwZWRlZiBDMlBvcnRQYXJhbTxDMlR1bmluZywgQzJVaW50MzJWYWx1ZSwga1BhcmFtSW5kZXhSZW9yZGVyQnVmZmVyRGVwdGg+CisgICAgICAgIEMyUG9ydFJlb3JkZXJCdWZmZXJEZXB0aFR1bmluZzsKK2NvbnN0ZXhwciBjaGFyIEMyX1BBUkFNS0VZX09VVFBVVF9SRU9SREVSX0RFUFRIW10gPSAib3V0cHV0LnJlb3JkZXIuZGVwdGgiOworCitDMkVOVU0oQzJDb25maWc6Om9yZGluYWxfa2V5X3QsIHVpbnQzMl90LAorICAgICAgICBPUkRJTkFMLAorICAgICAgICBUSU1FU1RBTVAsCisgICAgICAgIENVU1RPTSkKKworLy8gcmVhZC1vbmx5LCBvdXRwdXQgb25seQordHlwZWRlZiBDMlBvcnRQYXJhbTxDMlNldHRpbmcsIEMyU2ltcGxlVmFsdWVTdHJ1Y3Q8QzJDb25maWc6Om9yZGluYWxfa2V5X3Q+LCBrUGFyYW1JbmRleFJlb3JkZXJLZXk+CisgICAgICAgIEMyUG9ydFJlb3JkZXJLZXlTZXR0aW5nOworY29uc3RleHByIGNoYXIgQzJfUEFSQU1LRVlfT1VUUFVUX1JFT1JERVJfS0VZW10gPSAib3V0cHV0LnJlb3JkZXIua2V5IjsKKworLyoqCisgKiBTdHJlYW0gY291bnQuCisgKi8KKy8vIHByaXZhdGUKK3R5cGVkZWYgQzJQb3J0UGFyYW08QzJUdW5pbmcsIEMyVWludDMyVmFsdWUsIGtQYXJhbUluZGV4U3RyZWFtQ291bnQ+IEMyUG9ydFN0cmVhbUNvdW50VHVuaW5nOwordHlwZWRlZiBDMlBvcnRTdHJlYW1Db3VudFR1bmluZyBDMlBvcnRTdHJlYW1Db3VudENvbmZpZzsgLy8gZGVwcmVjYXRlZAorY29uc3RleHByIGNoYXIgQzJfUEFSQU1LRVlfSU5QVVRfU1RSRUFNX0NPVU5UW10gPSAiaW5wdXQuc3RyZWFtLWNvdW50IjsKK2NvbnN0ZXhwciBjaGFyIEMyX1BBUkFNS0VZX09VVFBVVF9TVFJFQU1fQ09VTlRbXSA9ICJvdXRwdXQuc3RyZWFtLWNvdW50IjsKKworLyoqCisgKiBDb25maWcgdXBkYXRlIHN1YnNjcmlwdGlvbi4KKyAqLworLy8gcHJpdmF0ZQordHlwZWRlZiBDMkdsb2JhbFBhcmFtPEMyVHVuaW5nLCBDMlVpbnQzMkFycmF5LCBrUGFyYW1JbmRleFN1YnNjcmliZWRQYXJhbUluZGljZXM+CisgICAgICAgIEMyU3Vic2NyaWJlZFBhcmFtSW5kaWNlc1R1bmluZzsKK2NvbnN0ZXhwciBjaGFyIEMyX1BBUkFNS0VZX1NVQlNDUklCRURfUEFSQU1fSU5ESUNFU1tdID0gIm91dHB1dC5zdWJzY3JpYmVkLWluZGljZXMiOworCisvKioKKyAqIFN1Z2dlc3RlZCBidWZmZXIgKEMyRnJhbWUpIGNvdW50LiBUaGlzIGlzIGEgc3VnZ2VzdGlvbiBieSB0aGUgY29tcG9uZW50IGZvciB0aGUgbnVtYmVyIG9mCisgKiBpbnB1dCBhbmQgb3V0cHV0IGZyYW1lcyBhbGxvY2F0ZWQgZm9yIHRoZSBjb21wb25lbnQncyB1c2UgaW4gdGhlIGJ1ZmZlciBwb29scy4KKyAqCisgKiBDb21wb25lbnQgc2hhbGwgc2V0IHRoZSBhY2NlcHRhYmxlIHJhbmdlIG9mIGJ1ZmZlcnMgYWxsb2NhdGVkIGZvciBpdC4gRS5nLiBjbGllbnQgc2hhbGwKKyAqIGFsbG9jYXRlIGF0IGxlYXN0IHRoZSBtaW5pbXVtIHJlcXVpcmVkIHZhbHVlLgorICovCisvLyByZWFkLW9ubHkKK3R5cGVkZWYgQzJQb3J0UGFyYW08QzJUdW5pbmcsIEMyVWludDY0QXJyYXksIGtQYXJhbUluZGV4U3VnZ2VzdGVkQnVmZmVyQ291bnQ+CisgICAgICAgIEMyUG9ydFN1Z2dlc3RlZEJ1ZmZlckNvdW50VHVuaW5nOworY29uc3RleHByIGNoYXIgQzJfUEFSQU1LRVlfSU5QVVRfU1VHR0VTVEVEX0JVRkZFUl9DT1VOVFtdID0gImlucHV0LmJ1ZmZlcnMucG9vbC1zaXplIjsKK2NvbnN0ZXhwciBjaGFyIEMyX1BBUkFNS0VZX09VVFBVVF9TVUdHRVNURURfQlVGRkVSX0NPVU5UW10gPSAib3V0cHV0LmJ1ZmZlcnMucG9vbC1zaXplIjsKKworLyoqCisgKiBJbnB1dC9vdXRwdXQgYmF0Y2hpbmcuCisgKgorICogRm9yIGlucHV0LCBjb21wb25lbnQgcmVxdWVzdHMgdGhhdCBjbGllbnQgYmF0Y2hlcyB3b3JrIGluIGJhdGNoZXMgb2Ygc3BlY2lmaWVkIHNpemUuIEZvciBvdXRwdXQsCisgKiBjbGllbnQgcmVxdWVzdHMgdGhhdCB0aGUgY29tcG9uZW50IGJhdGNoZXMgd29yayBjb21wbGV0aW9uIGluIGdpdmVuIGJhdGNoIHNpemUuCisgKiBWYWx1ZSAwIG1lYW5zIGRvbid0IGNhcmUuCisgKi8KK3R5cGVkZWYgQzJQb3J0UGFyYW08QzJUdW5pbmcsIEMyVWludDY0QXJyYXksIGtQYXJhbUluZGV4QmF0Y2hTaXplPiBDMlBvcnRCYXRjaFNpemVUdW5pbmc7Citjb25zdGV4cHIgY2hhciBDMl9QQVJBTUtFWV9JTlBVVF9CQVRDSF9TSVpFW10gPSAiaW5wdXQuYnVmZmVycy5iYXRjaC1zaXplIjsKK2NvbnN0ZXhwciBjaGFyIEMyX1BBUkFNS0VZX09VVFBVVF9CQVRDSF9TSVpFW10gPSAib3V0cHV0LmJ1ZmZlcnMuYmF0Y2gtc2l6ZSI7CisKKy8qKgorICogQ3VycmVudCAmIGxhc3Qgd29yayBvcmRpbmFscy4KKyAqCisgKiBpbnB1dCBwb3J0OiBsYXN0IHdvcmsgcXVldWVkIHRvIGNvbXBvbmVudC4KKyAqIG91dHB1dCBwb3J0OiBsYXN0IHdvcmsgY29tcGxldGVkIGJ5IGNvbXBvbmVudC4KKyAqIGdsb2JhbDogY3VycmVudCB3b3JrLgorICovCit0eXBlZGVmIEMyUG9ydFBhcmFtPEMyVHVuaW5nLCBDMldvcmtPcmRpbmFsU3RydWN0LCBrUGFyYW1JbmRleExhc3RXb3JrUXVldWVkPiBDMkxhc3RXb3JrUXVldWVkVHVuaW5nOwordHlwZWRlZiBDMkdsb2JhbFBhcmFtPEMyVHVuaW5nLCBDMldvcmtPcmRpbmFsU3RydWN0LCBrUGFyYW1JbmRleEN1cnJlbnRXb3JrPiBDMkN1cnJlbnRXb3JrVHVuaW5nOworCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gbWVtb3J5IGFsbG9jYXRpb24gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCisvKioKKyAqIEFsbG9jYXRvcnMgdG8gdXNlLgorICoKKyAqIFRoZXNlIGFyZSByZXF1ZXN0ZWQgYnkgdGhlIGNvbXBvbmVudC4KKyAqCisgKiBJZiBub25lIHNwZWNpZmllZCwgY2xpZW50IHdpbGwgdXNlIHRoZSBkZWZhdWx0IGFsbG9jYXRvciBJRCBiYXNlZCBvbiB0aGUgY29tcG9uZW50IGRvbWFpbiBhbmQKKyAqIGtpbmQuCisgKi8KK3R5cGVkZWYgQzJQb3J0UGFyYW08QzJUdW5pbmcsIEMyU2ltcGxlQXJyYXlTdHJ1Y3Q8QzJBbGxvY2F0b3I6OmlkX3Q+LCBrUGFyYW1JbmRleEFsbG9jYXRvcnM+CisgICAgICAgIEMyUG9ydEFsbG9jYXRvcnNUdW5pbmc7Citjb25zdGV4cHIgY2hhciBDMl9QQVJBTUtFWV9JTlBVVF9BTExPQ0FUT1JTW10gPSAiaW5wdXQuYnVmZmVycy5hbGxvY2F0b3ItaWRzIjsKK2NvbnN0ZXhwciBjaGFyIEMyX1BBUkFNS0VZX09VVFBVVF9BTExPQ0FUT1JTW10gPSAib3V0cHV0LmJ1ZmZlcnMuYWxsb2NhdG9yLWlkcyI7CisKK3R5cGVkZWYgQzJHbG9iYWxQYXJhbTxDMlR1bmluZywgQzJTaW1wbGVBcnJheVN0cnVjdDxDMkFsbG9jYXRvcjo6aWRfdD4sIGtQYXJhbUluZGV4QWxsb2NhdG9ycz4KKyAgICAgICAgQzJQcml2YXRlQWxsb2NhdG9yc1R1bmluZzsKK2NvbnN0ZXhwciBjaGFyIEMyX1BBUkFNS0VZX1BSSVZBVEVfQUxMT0NBVE9SU1tdID0gImFsZ28uYnVmZmVycy5hbGxvY2F0b3ItaWRzIjsKKworLyoqCisgKiBBbGxvY2F0b3IgdG8gdXNlIGZvciBvdXRwdXR0aW5nIHRvIHN1cmZhY2UuCisgKgorICogQ29tcG9uZW50cyBjYW4gb3B0aW9uYWxseSByZXF1ZXN0IGFsbG9jYXRvciB0eXBlIGZvciBvdXRwdXR0aW5nIHRvIHN1cmZhY2UuCisgKgorICogSWYgbm9uZSBzcGVjaWZpZWQsIGNsaWVudCB3aWxsIHVzZSB0aGUgZGVmYXVsdCBCdWZmZXJRdWV1ZS1iYWNrZWQgYWxsb2NhdG9yIElEIGZvciBvdXRwdXR0aW5nIHRvCisgKiBzdXJmYWNlLgorICovCit0eXBlZGVmIEMyUG9ydFBhcmFtPEMyVHVuaW5nLCBDMlVpbnQzMlZhbHVlLCBrUGFyYW1JbmRleFN1cmZhY2VBbGxvY2F0b3I+CisgICAgICAgIEMyUG9ydFN1cmZhY2VBbGxvY2F0b3JUdW5pbmc7Citjb25zdGV4cHIgY2hhciBDMl9QQVJBTUtFWV9PVVRQVVRfU1VSRkFDRV9BTExPQ0FUT1JbXSA9ICJvdXRwdXQuYnVmZmVycy5zdXJmYWNlLWFsbG9jYXRvci1pZCI7CisKKy8qKgorICogQmxvY2sgcG9vbHMgdG8gdXNlLgorICoKKyAqIFRoZXNlIGFyZSBhbGxvY2F0ZWQgYnkgdGhlIGNsaWVudCBmb3IgdGhlIGNvbXBvbmVudCB1c2luZyB0aGUgYWxsb2NhdG9yIElEcyBzcGVjaWZpZWQgYnkgdGhlCisgKiBjb21wb25lbnQuIFRoaXMgaXMgbm90IHVzZWQgZm9yIHRoZSBpbnB1dCBwb3J0LgorICovCit0eXBlZGVmIEMyUG9ydFBhcmFtPEMyVHVuaW5nLCBDMlNpbXBsZUFycmF5U3RydWN0PEMyQmxvY2tQb29sOjpsb2NhbF9pZF90Piwga1BhcmFtSW5kZXhCbG9ja1Bvb2xzPgorICAgICAgICBDMlBvcnRCbG9ja1Bvb2xzVHVuaW5nOworY29uc3RleHByIGNoYXIgQzJfUEFSQU1LRVlfT1VUUFVUX0JMT0NLX1BPT0xTW10gPSAib3V0cHV0LmJ1ZmZlcnMucG9vbC1pZHMiOworCit0eXBlZGVmIEMyR2xvYmFsUGFyYW08QzJUdW5pbmcsIEMyU2ltcGxlQXJyYXlTdHJ1Y3Q8QzJCbG9ja1Bvb2w6OmxvY2FsX2lkX3Q+LCBrUGFyYW1JbmRleEJsb2NrUG9vbHM+CisgICAgICAgIEMyUHJpdmF0ZUJsb2NrUG9vbHNUdW5pbmc7Citjb25zdGV4cHIgY2hhciBDMl9QQVJBTUtFWV9QUklWQVRFX0JMT0NLX1BPT0xTW10gPSAiYWxnby5idWZmZXJzLnBvb2wtaWRzIjsKKworLyoqCisgKiBUaGUgbWF4IG51bWJlciBvZiBwcml2YXRlIGFsbG9jYXRpb25zIGF0IGFueSBvbmUgdGltZSBieSB0aGUgY29tcG9uZW50LgorICogKFRoaXMgaXMgYW4gYXJyYXkgd2l0aCBhIGNvcnJlc3BvbmRpbmcgdmFsdWUgZm9yIGVhY2ggcHJpdmF0ZSBhbGxvY2F0b3IpCisgKi8KK3R5cGVkZWYgQzJHbG9iYWxQYXJhbTxDMlR1bmluZywgQzJVaW50MzJBcnJheSwga1BhcmFtSW5kZXhNYXhSZWZlcmVuY2VDb3VudD4KKyAgICAgICAgQzJNYXhQcml2YXRlQnVmZmVyQ291bnRUdW5pbmc7Citjb25zdGV4cHIgY2hhciBDMl9QQVJBTUtFWV9NQVhfUFJJVkFURV9CVUZGRVJfQ09VTlRbXSA9ICJhbGdvLmJ1ZmZlcnMubWF4LWNvdW50IjsKKworLyoqCisgKiBCdWZmZXIgdHlwZQorICoKKyAqIFRoaXMgaXMgcHJvdmlkZWQgYnkgdGhlIGNvbXBvbmVudCBmb3IgdGhlIGNsaWVudCB0byBhbGxvY2F0ZSB0aGUgcHJvcGVyIGJ1ZmZlciB0eXBlIGZvciB0aGUKKyAqIGlucHV0IHBvcnQsIGFuZCBjYW4gYmUgcHJvdmlkZWQgYnkgdGhlIGNsaWVudCB0byBjb250cm9sIHRoZSBidWZmZXIgdHlwZSBmb3IgdGhlIG91dHB1dC4KKyAqLworLy8gcHJpdmF0ZQordHlwZWRlZiBDMlN0cmVhbVBhcmFtPEMyU2V0dGluZywgQzJTaW1wbGVWYWx1ZVN0cnVjdDxDMkVhc3lFbnVtPEMyQnVmZmVyRGF0YTo6dHlwZV90Pj4sCisgICAgICAgICAgICAgICAga1BhcmFtSW5kZXhCdWZmZXJUeXBlPgorICAgICAgICBDMlN0cmVhbUJ1ZmZlclR5cGVTZXR0aW5nOworCitjb25zdGV4cHIgQzJCdWZmZXJEYXRhOjp0eXBlX3QgQzJGb3JtYXRBdWRpbyAgICAgID0gQzJCdWZmZXJEYXRhOjpMSU5FQVI7IC8vIGRlcHJlY2F0ZWQKK2NvbnN0ZXhwciBDMkJ1ZmZlckRhdGE6OnR5cGVfdCBDMkZvcm1hdENvbXByZXNzZWQgPSBDMkJ1ZmZlckRhdGE6OkxJTkVBUjsgLy8gZGVwcmVjYXRlZAorY29uc3RleHByIEMyQnVmZmVyRGF0YTo6dHlwZV90IEMyRm9ybWF0VmlkZW8gICAgICA9IEMyQnVmZmVyRGF0YTo6R1JBUEhJQzsgLy8gZGVwcmVjYXRlZAordHlwZWRlZiBDMkJ1ZmZlckRhdGE6OnR5cGVfdCBDMkZvcm1hdEtpbmQ7IC8vIGRlcHJlY2F0ZWQKKwordHlwZWRlZiBDMlN0cmVhbUJ1ZmZlclR5cGVTZXR0aW5nIEMyU3RyZWFtRm9ybWF0Q29uZmlnOyAvLyBkZXByZWNhdGVkCitjb25zdGV4cHIgY2hhciBDMl9QQVJBTUtFWV9JTlBVVF9TVFJFQU1fQlVGRkVSX1RZUEVbXSA9ICJpbnB1dC5idWZmZXJzLnR5cGUiOworY29uc3RleHByIGNoYXIgQzJfUEFSQU1LRVlfT1VUUFVUX1NUUkVBTV9CVUZGRVJfVFlQRVtdID0gIm91dHB1dC5idWZmZXJzLnR5cGUiOworCisvLyBkZXByZWNhdGVkCisjZGVmaW5lIEMyX05BTUVfSU5QVVRfU1RSRUFNX0ZPUk1BVF9TRVRUSU5HIEMyX1BBUkFNS0VZX0lOUFVUX1NUUkVBTV9CVUZGRVJfVFlQRQorI2RlZmluZSBDMl9OQU1FX09VVFBVVF9TVFJFQU1fRk9STUFUX1NFVFRJTkcgQzJfUEFSQU1LRVlfT1VUUFVUX1NUUkVBTV9CVUZGRVJfVFlQRQorCisvKioKKyAqIE1lbW9yeSB1c2FnZS4KKyAqCisgKiBTdWdnZXN0ZWQgYnkgY29tcG9uZW50IGZvciBpbnB1dCBhbmQgbmVnb3RpYXRlZCBiZXR3ZWVuIGNsaWVudCBhbmQgY29tcG9uZW50IGZvciBvdXRwdXQuCisgKi8KK3R5cGVkZWYgQzJTdHJlYW1QYXJhbTxDMlR1bmluZywgQzJVaW50NjRWYWx1ZSwga1BhcmFtSW5kZXhVc2FnZT4gQzJTdHJlYW1Vc2FnZVR1bmluZzsKK2NvbnN0ZXhwciBjaGFyIEMyX1BBUkFNS0VZX0lOUFVUX1NUUkVBTV9VU0FHRVtdID0gImlucHV0LmJ1ZmZlcnMudXNhZ2UiOworY29uc3RleHByIGNoYXIgQzJfUEFSQU1LRVlfT1VUUFVUX1NUUkVBTV9VU0FHRVtdID0gIm91dHB1dC5idWZmZXJzLnVzYWdlIjsKKy8vIGRlcHJlY2F0ZWQKKyNkZWZpbmUgQzJfTkFNRV9JTlBVVF9TVFJFQU1fVVNBR0VfU0VUVElORyBDMl9QQVJBTUtFWV9JTlBVVF9TVFJFQU1fVVNBR0UKKworLyoqCisgKiBQaWN0dXJlICh2aWRlbyBvciBpbWFnZSBmcmFtZSkgc2l6ZS4KKyAqLworc3RydWN0IEMyUGljdHVyZVNpemVTdHJ1Y3QgeworICAgIGlubGluZSBDMlBpY3R1cmVTaXplU3RydWN0KCkKKyAgICAgICAgOiB3aWR0aCgwKSwgaGVpZ2h0KDApIHsgfQorCisgICAgaW5saW5lIEMyUGljdHVyZVNpemVTdHJ1Y3QodWludDMyX3Qgd2lkdGhfLCB1aW50MzJfdCBoZWlnaHRfKQorICAgICAgICA6IHdpZHRoKHdpZHRoXyksIGhlaWdodChoZWlnaHRfKSB7IH0KKworICAgIHVpbnQzMl90IHdpZHRoOyAgICAgLy8vPCB2aWRlbyB3aWR0aAorICAgIHVpbnQzMl90IGhlaWdodDsgICAgLy8vPCB2aWRlbyBoZWlnaHQKKworICAgIERFRklORV9BTkRfREVTQ1JJQkVfQzJTVFJVQ1QoUGljdHVyZVNpemUpCisgICAgQzJGSUVMRCh3aWR0aCwgIndpZHRoIikKKyAgICBDMkZJRUxEKGhlaWdodCwgImhlaWdodCIpCit9OworCisvKioKKyAqIE91dCBvZiBtZW1vcnkgc2lnbmFsaW5nCisgKgorICogVGhpcyBpcyBhIGNvbmZpZ3VyYXRpb24gZm9yIHRoZSBjbGllbnQgdG8gbWFyayB0aGF0IGl0IGNhbm5vdCBhbGxvY2F0ZSBuZWNlc3NhcnkgcHJpdmF0ZSBhbmQvCisgKiBvciBvdXRwdXQgYnVmZmVycyB0byBjb250aW51ZSBvcGVyYXRpb24sIGFuZCB0byBzaWduYWwgdGhlIGZhaWxpbmcgY29uZmlndXJhdGlvbi4KKyAqLworc3RydWN0IEMyT3V0T2ZNZW1vcnlTdHJ1Y3QgeworICAgIEMyQmxvY2tQb29sOjpsb2NhbF9pZF90IHBvb2w7ICAgLy8vPCBwb29sIElEIHRoYXQgZmFpbGVkIHRoZSBhbGxvY2F0aW9uCisgICAgdWludDY0X3QgdXNhZ2U7ICAgICAgICAgICAgICAgICAvLy88IG1lbW9yeSB1c2FnZSB1c2VkCisgICAgQzJQaWN0dXJlU2l6ZVN0cnVjdCBwbGFuYXI7ICAgICAvLy88IGJ1ZmZlciBkaW1lbnNpb25zIHRvIGJlIGFsbG9jYXRlZCBpZiAyRAorICAgIHVpbnQzMl90IGZvcm1hdDsgICAgICAgICAgICAgICAgLy8vPCBwaXhlbCBmb3JtYXQgdG8gYmUgdXNlZCBpZiAyRAorICAgIHVpbnQzMl90IGNhcGFjaXR5OyAgICAgICAgICAgICAgLy8vPCBidWZmZXIgY2FwYWNpdHkgdG8gYmUgYWxsb2NhdGVkIGlmIDFECisgICAgYzJfYm9vbF90IG91dE9mTWVtb3J5OyAgICAgICAgICAgLy8vPCB0cnVlIGlmIGNvbXBvbmVudCBpcyBvdXQgb2YgbWVtb3J5CisKKyAgICBERUZJTkVfQU5EX0RFU0NSSUJFX0MyU1RSVUNUKE91dE9mTWVtb3J5KQorICAgIEMyRklFTEQocG9vbCwgInBvb2wiKQorICAgIEMyRklFTEQodXNhZ2UsICJ1c2FnZSIpCisgICAgQzJGSUVMRChwbGFuYXIsICJwbGFuYXIiKQorICAgIEMyRklFTEQoZm9ybWF0LCAiZm9ybWF0IikKKyAgICBDMkZJRUxEKGNhcGFjaXR5LCAiY2FwYWNpdHkiKQorICAgIEMyRklFTEQob3V0T2ZNZW1vcnksICJvdXQtb2YtbWVtb3J5IikKK307CisKK3R5cGVkZWYgQzJHbG9iYWxQYXJhbTxDMlR1bmluZywgQzJPdXRPZk1lbW9yeVN0cnVjdCwga1BhcmFtSW5kZXhPdXRPZk1lbW9yeT4gQzJPdXRPZk1lbW9yeVR1bmluZzsKK2NvbnN0ZXhwciBjaGFyIEMyX1BBUkFNS0VZX09VVF9PRl9NRU1PUllbXSA9ICJhbGdvLm9vbSI7CisKKy8qKgorICogTWF4IGJ1ZmZlciBzaXplCisgKgorICogVGhpcyBpcyBhIGhpbnQgcHJvdmlkZWQgYnkgdGhlIGNvbXBvbmVudCBmb3IgdGhlIG1heGltdW0gYnVmZmVyIHNpemUgZXhwZWN0ZWQgb24gYSBzdHJlYW0gZm9yIHRoZQorICogY3VycmVudCBjb25maWd1cmF0aW9uIG9uIGl0cyBpbnB1dCBhbmQgb3V0cHV0IHN0cmVhbXMuIFRoaXMgaXMgY29tbXVuaWNhdGVkIHRvIGNsaWVudHMgc28gdGhleQorICogY2FuIHByZWFsbG9jYXRlIGlucHV0IGJ1ZmZlcnMsIG9yIGNvbmZpZ3VyZSBkb3duc3RyZWFtIGNvbXBvbmVudHMgdGhhdCByZXF1aXJlIGEgbWF4aW11bSBzaXplIG9uCisgKiB0aGVpciBidWZmZXJzLgorICoKKyAqIFJlYWQtb25seS4gUmVxdWlyZWQgdG8gYmUgcHJvdmlkZWQgYnkgY29tcG9uZW50cyBvbiBhbGwgY29tcHJlc3NlZCBzdHJlYW1zLgorICovCit0eXBlZGVmIEMyU3RyZWFtUGFyYW08QzJJbmZvLCBDMlVpbnQzMlZhbHVlLCBrUGFyYW1JbmRleE1heEJ1ZmZlclNpemU+IEMyU3RyZWFtTWF4QnVmZmVyU2l6ZUluZm87Citjb25zdGV4cHIgY2hhciBDMl9QQVJBTUtFWV9JTlBVVF9NQVhfQlVGRkVSX1NJWkVbXSA9ICJpbnB1dC5idWZmZXJzLm1heC1zaXplIjsKK2NvbnN0ZXhwciBjaGFyIEMyX1BBUkFNS0VZX09VVFBVVF9NQVhfQlVGRkVSX1NJWkVbXSA9ICJvdXRwdXQuYnVmZmVycy5tYXgtc2l6ZSI7CisKKyNkZWZpbmUgQzJfTkFNRV9TVFJFQU1fTUFYX0JVRkZFUl9TSVpFX1NFVFRJTkcgQzJfUEFSQU1LRVlfSU5QVVRfTUFYX0JVRkZFUl9TSVpFCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gbWlzYy4gc3RhdGUgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCisvKioKKyAqIFRyaXBwZWQgc3RhdGUsCisgKgorICogVGhpcyBzdGF0ZSBleGlzdHMgdG8gYmUgYWJsZSB0byBwcm92aWRlIHJlYXNvbmluZyBmb3IgYSB0cmlwcGVkIHN0YXRlIGR1cmluZyBub3JtYWwKKyAqIGludGVyZmFjZSBvcGVyYXRpb25zLCBhcyB3ZWxsIGFzIHRvIGFsbG93IGNsaWVudCB0byB0cmlwIHRoZSBjb21wb25lbnQgb24gZGVtYW5kLgorICovCit0eXBlZGVmIEMyR2xvYmFsUGFyYW08QzJUdW5pbmcsIEMyQm9vbFZhbHVlLCBrUGFyYW1JbmRleFRyaXBwZWQ+CisgICAgICAgIEMyVHJpcHBlZFR1bmluZzsKK2NvbnN0ZXhwciBjaGFyIEMyX1BBUkFNS0VZX1RSSVBQRURbXSA9ICJhbGdvLnRyaXBwZWQiOworCisvKioKKyAqIENvbmZpZ3VyYXRpb24gY291bnRlcnMuCisgKgorICogQ29uZmlndXJhdGlvbnMgYXJlIHRyYWNrZWQgdXNpbmcgdGhyZWUgY291bnRlcnMuIFRoZSBpbnB1dCBjb3VudGVyIGlzIGluY3JlbWVudGVkIGV4YWN0bHkKKyAqIG9uY2Ugd2l0aCBlYWNoIHdvcmsgYWNjZXB0ZWQgYnkgdGhlIGNvbXBvbmVudC4gVGhlIG91dHB1dCBjb3VudGVyIGlzIGluY3JlbWVudGVkIGV4YWN0bHkKKyAqIG9uY2Ugd2l0aCBlYWNoIHdvcmsgY29tcGxldGVkIGJ5IHRoZSBjb21wb25lbnQgKGluIHRoZSBvcmRlciBvZiB3b3JrIGNvbXBsZXRpb24pLiBUaGUKKyAqIGdsb2JhbCBjb3VudGVyIGlzIGluY3JlbWVudGVkIGV4YWN0bHkgb25jZSBkdXJpbmcgdG8gZWFjaCBjb25maWcoKSBjYWxsLiBUaGVzZSBjb3VudGVycworICogc2hhbGwgYmUgcmVhZC1vbmx5LgorICoKKyAqIFRPRE86IHRoZXNlIHNob3VsZCBiZSBjb3VudGVycy4KKyAqLwordHlwZWRlZiBDMlBvcnRQYXJhbTxDMlR1bmluZywgQzJVaW50NjRWYWx1ZSwga1BhcmFtSW5kZXhDb25maWdDb3VudGVyPiBDMlBvcnRDb25maWdDb3VudGVyVHVuaW5nOwordHlwZWRlZiBDMkdsb2JhbFBhcmFtPEMyVHVuaW5nLCBDMlVpbnQ2NFZhbHVlLCBrUGFyYW1JbmRleENvbmZpZ0NvdW50ZXI+IEMyQ29uZmlnQ291bnRlclR1bmluZzsKK2NvbnN0ZXhwciBjaGFyIEMyX1BBUkFNS0VZX0lOUFVUX0NPVU5URVJbXSA9ICJpbnB1dC5idWZmZXJzLmNvdW50ZXIiOworY29uc3RleHByIGNoYXIgQzJfUEFSQU1LRVlfT1VUUFVUX0NPVU5URVJbXSA9ICJvdXRwdXQuYnVmZmVycy5jb3VudGVyIjsKK2NvbnN0ZXhwciBjaGFyIEMyX1BBUkFNS0VZX0NPTkZJR19DT1VOVEVSW10gPSAiYWxnby5jb25maWcuY291bnRlciI7CisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIHJlc291cmNlcyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCisvKioKKyAqIFJlc291cmNlcyBuZWVkZWQgYW5kIHJlc291cmNlcyByZXNlcnZlZCBmb3IgY3VycmVudCBjb25maWd1cmF0aW9uLgorICoKKyAqIFJlc291cmNlcyBhcmUgdHJhY2tlZCBhcyBhIHZlY3RvciBvZiBwb3NpdGl2ZSBudW1iZXJzLiBBdmFpbGFibGUgcmVzb3VyY2VzIGFyZSBkZWZpbmVkIGJ5CisgKiB0aGUgdmVuZG9yLgorICoKKyAqIEJ5IGRlZmF1bHQsIG5vIHJlc291cmNlcyBhcmUgcmVzZXJ2ZWQgZm9yIGEgY29tcG9uZW50LiBJZiByZXNvdXJjZSByZXNlcnZhdGlvbiBpcyBzdWNjZXNzZnVsLAorICogdGhlIGNvbXBvbmVudCBzaGFsbCBiZSBhYmxlIHRvIHVzZSB0aG9zZSByZXNvdXJjZXMgZXhjbHVzaXZlbHkuIElmIGhvd2V2ZXIsIHRoZSBjb21wb25lbnQgaXMKKyAqIG5vdCB1c2luZyBhbGwgb2YgdGhlIHJlc2VydmVkIHJlc291cmNlcywgdGhvc2UgbWF5IGJlIHNoYXJlZCB3aXRoIG90aGVyIGNvbXBvbmVudHMuCisgKgorICogVE9ETzogZGVmaW5lIHNvbWUgb2YgdGhlIHJlc291cmNlcy4KKyAqLwordHlwZWRlZiBDMkdsb2JhbFBhcmFtPEMyVHVuaW5nLCBDMlVpbnQ2NEFycmF5LCBrUGFyYW1JbmRleFJlc291cmNlc05lZWRlZD4gQzJSZXNvdXJjZXNOZWVkZWRUdW5pbmc7Cit0eXBlZGVmIEMyR2xvYmFsUGFyYW08QzJUdW5pbmcsIEMyVWludDY0QXJyYXksIGtQYXJhbUluZGV4UmVzb3VyY2VzUmVzZXJ2ZWQ+CisgICAgICAgIEMyUmVzb3VyY2VzUmVzZXJ2ZWRUdW5pbmc7Citjb25zdGV4cHIgY2hhciBDMl9QQVJBTUtFWV9SRVNPVVJDRVNfTkVFREVEW10gPSAicmVzb3VyY2VzLm5lZWRlZCI7Citjb25zdGV4cHIgY2hhciBDMl9QQVJBTUtFWV9SRVNPVVJDRVNfUkVTRVJWRURbXSA9ICJyZXNvdXJjZXMucmVzZXJ2ZWQiOworCisvKioKKyAqIE9wZXJhdGluZyByYXRlLgorICoKKyAqIE9wZXJhdGluZyByYXRlIGlzIHRoZSBleHBlY3RlZCByYXRlIG9mIHdvcmsgdGhyb3VnaCB0aGUgY29tcG9uZW50LiBOZWdhdGl2ZSB2YWx1ZXMgaXMKKyAqIGludmFsaWQuCisgKgorICogVE9ETzogdGhpcyBjb3VsZCBkaXN0aW5ndWlzaCBzZXQgdmFsdWUKKyAqLwordHlwZWRlZiBDMkdsb2JhbFBhcmFtPEMyVHVuaW5nLCBDMkZsb2F0VmFsdWUsIGtQYXJhbUluZGV4T3BlcmF0aW5nUmF0ZT4gQzJPcGVyYXRpbmdSYXRlVHVuaW5nOworY29uc3RleHByIGNoYXIgQzJfUEFSQU1LRVlfT1BFUkFUSU5HX1JBVEVbXSA9ICJhbGdvLnJhdGUiOworCisvKioKKyAqIFJlYWx0aW1lIC8gb3BlcmF0aW5nIHBvaW50LgorICoKKyAqIFByaW9yaXR5IHZhbHVlIGRlZmluZXMgdGhlIG9wZXJhdGluZyBwb2ludCBmb3IgdGhlIGNvbXBvbmVudC4gT3BlcmF0aW5nIHBvaW50cyBhcmUgZGVmaW5lZCBieQorICogdGhlIHZlbmRvci4gUHJpb3JpdHkgdmFsdWUgb2YgMCBtZWFucyB0aGF0IHRoZSBjbGllbnQgcmVxdWlyZXMgb3BlcmF0aW9uIGF0IHRoZSBnaXZlbiBvcGVyYXRpbmcKKyAqIHJhdGUuIFByaW9yaXR5IHZhbHVlcyAtMSBhbmQgYmVsb3cgZGVmaW5lIG9wZXJhdGluZyBwb2ludHMgaW4gZGVjcmVhc2luZyBwZXJmb3JtYW5jZS4gSW4gdGhpcworICogY2FzZSBjbGllbnQgZXhwZWN0cyBiZXN0IGVmZm9ydCB3aXRob3V0IGV4Y2VlZGluZyB0aGUgc3BlY2lmaWMgb3BlcmF0aW5nIHBvaW50LiBUaGlzIGFsbG93cworICogY2xpZW50IHRvIHJ1biBjb21wb25lbnRzIGRlZXBlciBpbiB0aGUgYmFja2dyb3VuZCBieSB1c2luZyBsYXJnZXIgcHJpb3JpdHkgdmFsdWVzLiBJbiB0aGVzZQorICogY2FzZXMgb3BlcmF0aW5nIHJhdGUgaXMgYSBoaW50IGZvciB0aGUgbWF4aW11bSByYXRlIHRoYXQgdGhlIGNsaWVudCBhbnRpY2lwYXRlcy4KKyAqCisgKiBPcGVyYXRpbmcgcmF0ZSBhbmQgcHJpb3JpdHkgYXJlIHVzZWQgaW4gdGFuZGVtLiBFLmcuIGlmIHRoZXJlIGFyZSBjb21wb25lbnRzIHRoYXQgcnVuIGF0IGEKKyAqIGhpZ2hlciBvcGVyYXRpbmcgcG9pbnQgKHByaW9yaXR5KSBpdCB3aWxsIG1ha2UgbW9yZSByZXNvdXJjZXMgYXZhaWxhYmxlIGZvciBjb21wb25lbnRzIGF0CisgKiBhIGxvd2VyIG9wZXJhdGluZyBwb2ludCwgc28gb3BlcmF0aW5nIHJhdGUgY2FuIGJlIHVzZWQgdG8gZ2F0ZSB0aG9zZSBjb21wb25lbnRzLgorICoKKyAqIFBvc2l0aXZlIHByaW9yaXR5IHZhbHVlcyBhcmUgbm90IGRlZmluZWQgYXQgdGhlIG1vbWVudCBhbmQgc2hhbGwgYmUgdHJlYXRlZCBlcXVpdmFsZW50IHRvIDAuCisgKi8KK3R5cGVkZWYgQzJHbG9iYWxQYXJhbTxDMlR1bmluZywgQzJJbnQzMlZhbHVlLCBrUGFyYW1JbmRleFJlYWxUaW1lUHJpb3JpdHk+CisgICAgICAgIEMyUmVhbFRpbWVQcmlvcml0eVR1bmluZzsKK2NvbnN0ZXhwciBjaGFyIEMyX1BBUkFNS0VZX1BSSU9SSVRZW10gPSAiYWxnby5wcmlvcml0eSI7CisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gcHJvdGVjdGVkIGNvbnRlbnQgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCisvKioKKyAqIFNlY3VyZSBtb2RlLgorICovCitDMkVOVU0oQzJDb25maWc6OnNlY3VyZV9tb2RlX3QsIHVpbnQzMl90LAorICAgIFNNX1VOUFJPVEVDVEVELCAgICAvLy88IG5vIGNvbnRlbnQgcHJvdGVjdGlvbgorICAgIFNNX1JFQURfUFJPVEVDVEVELCAvLy88IGlucHV0IGFuZCBvdXRwdXQgYnVmZmVycyBzaGFsbCBiZSBwcm90ZWN0ZWQgZnJvbSByZWFkaW5nCispCisKK3R5cGVkZWYgQzJHbG9iYWxQYXJhbTxDMlR1bmluZywgQzJTaW1wbGVWYWx1ZVN0cnVjdDxDMkNvbmZpZzo6c2VjdXJlX21vZGVfdD4sIGtQYXJhbUluZGV4U2VjdXJlTW9kZT4KKyAgICAgICAgQzJTZWN1cmVNb2RlVHVuaW5nOworY29uc3RleHByIGNoYXIgQzJfUEFSQU1LRVlfU0VDVVJFX01PREVbXSA9ICJhbGdvLnNlY3VyZS1tb2RlIjsKKworLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSBFTkNPREVSIENPTVBPTkVOVFMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLworCisvKioKKyAqIEJpdHJhdGUKKyAqLwordHlwZWRlZiBDMlN0cmVhbVBhcmFtPEMySW5mbywgQzJVaW50MzJWYWx1ZSwga1BhcmFtSW5kZXhCaXRyYXRlPiBDMlN0cmVhbUJpdHJhdGVJbmZvOwordHlwZWRlZiBDMlN0cmVhbUJpdHJhdGVJbmZvIEMyQml0cmF0ZVR1bmluZzsgLy8gZGVwcmVjYXRlZAorY29uc3RleHByIGNoYXIgQzJfUEFSQU1LRVlfQklUUkFURVtdID0gImNvZGVkLmJpdHJhdGUiOworI2RlZmluZSBDMl9OQU1FX1NUUkVBTV9CSVRSQVRFX1NFVFRJTkcgQzJfUEFSQU1LRVlfQklUUkFURQorCisvKioKKyAqIEJpdHJhdGUgbW9kZS4KKyAqCisgKiBUT0RPOiByZWZpbmUgdGhpcyB3aXRoIGJpdHJhdGUgcmFuZ2VzIGFuZCBzdWdnZXN0ZWQgd2luZG93CisgKi8KK0MyRU5VTShDMkNvbmZpZzo6Yml0cmF0ZV9tb2RlX3QsIHVpbnQzMl90LAorICAgIEJJVFJBVEVfQ09OU1RfU0tJUF9BTExPV0VEID0gMCwgICAgICAvLy88IGNvbnN0YW50IGJpdHJhdGUsIGZyYW1lIHNraXBwaW5nIGFsbG93ZWQKKyAgICBCSVRSQVRFX0NPTlNUID0gMSwgICAgICAgICAgICAgICAgICAgLy8vPCBjb25zdGFudCBiaXRyYXRlLCBrZWVwIGFsbCBmcmFtZXMKKyAgICBCSVRSQVRFX1ZBUklBQkxFX1NLSVBfQUxMT1dFRCA9IDIsICAgLy8vPCBiaXRyYXRlIGNhbiB2YXJ5LCBmcmFtZSBza2lwcGluZyBhbGxvd2VkCisgICAgQklUUkFURV9WQVJJQUJMRSA9IDMsICAgICAgICAgICAgICAgIC8vLzwgYml0cmF0ZSBjYW4gdmFyeSwga2VlcCBhbGwgZnJhbWVzCisgICAgQklUUkFURV9JR05PUkUgPSA3LCAgICAgICAgICAgICAgICAgIC8vLzwgYml0cmF0ZSBjYW4gYmUgZXhjZWVkZWQgYXQgd2lsbCB0byBhY2hpZXZlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLzwgcXVhbGl0eSBvciBvdGhlciBzZXR0aW5ncworCisgICAgLy8gYml0cmF0ZSBtb2RlcyBhcmUgY29tcG9zZWQgb2YgdGhlIGZvbGxvd2luZyBmbGFncworICAgIEJJVFJBVEVfRkxBR19LRUVQX0FMTF9GUkFNRVMgPSAxLAorICAgIEJJVFJBVEVfRkxBR19DQU5fVkFSWSA9IDIsCisgICAgQklUUkFURV9GTEFHX0NBTl9FWENFRUQgPSA0LAorKQorCit0eXBlZGVmIEMyU3RyZWFtUGFyYW08QzJUdW5pbmcsIEMyU2ltcGxlVmFsdWVTdHJ1Y3Q8QzJDb25maWc6OmJpdHJhdGVfbW9kZV90PiwKKyAgICAgICAgICAgICAgICBrUGFyYW1JbmRleEJpdHJhdGVNb2RlPgorICAgICAgICBDMlN0cmVhbUJpdHJhdGVNb2RlVHVuaW5nOworY29uc3RleHByIGNoYXIgQzJfUEFSQU1LRVlfQklUUkFURV9NT0RFW10gPSAiYWxnby5iaXRyYXRlLW1vZGUiOworCisvKioKKyAqIFF1YWxpdHkuCisgKgorICogVGhpcyBpcyBkZWZpbmVkIGJ5IGVhY2ggY29tcG9uZW50LCB0aGUgaGlnaGVyIHRoZSBiZXR0ZXIgdGhlIG91dHB1dCBxdWFsaXR5IGF0IHRoZSBleHBlbnNlIG9mCisgKiBsZXNzIGNvbXByZXNzaW9uIGVmZmljaWVuY3kuIFRoaXMgc2V0dGluZyBpcyBkZWZpbmVkIGZvciB0aGUgb3V0cHV0IHN0cmVhbXMgaW4gY2FzZSB0aGUKKyAqIGNvbXBvbmVudCBjYW4gc3VwcG9ydCB2YXJ5aW5nIHF1YWxpdHkgb24gZWFjaCBzdHJlYW0sIG9yIGFzIGFuIG91dHB1dCBwb3J0IHR1bmluZyBpbiBjYXNlIHRoZQorICogcXVhbGl0eSBpcyBnbG9iYWwgdG8gYWxsIHN0cmVhbXMuCisgKi8KK3R5cGVkZWYgQzJTdHJlYW1QYXJhbTxDMlR1bmluZywgQzJVaW50MzJWYWx1ZSwga1BhcmFtSW5kZXhRdWFsaXR5PiBDMlN0cmVhbVF1YWxpdHlUdW5pbmc7Cit0eXBlZGVmIEMyUG9ydFBhcmFtPEMyVHVuaW5nLCBDMlVpbnQzMlZhbHVlLCBrUGFyYW1JbmRleFF1YWxpdHk+IEMyUXVhbGl0eVR1bmluZzsKK2NvbnN0ZXhwciBjaGFyIEMyX1BBUkFNS0VZX1FVQUxJVFlbXSA9ICJhbGdvLnF1YWxpdHkiOworCisvKioKKyAqIENvbXBsZXhpdHkuCisgKgorICogVGhpcyBpcyBkZWZpbmVkIGJ5IGVhY2ggY29tcG9uZW50LCB0aGlzIGhpZ2hlciB0aGUgdmFsdWUsIHRoZSBtb3JlIHJlc291cmNlcyB0aGUgY29tcG9uZW50CisgKiB3aWxsIHVzZSB0byBwcm9kdWNlIGJldHRlciBxdWFsaXR5IGF0IHRoZSBzYW1lIGNvbXByZXNzaW9uIGVmZmljaWVuY3kgb3IgYmV0dGVyIGNvbXByZXNzaW9uCisgKiBlZmZpY2llbmN5IGF0IHRoZSBzYW1lIHF1YWxpdHkuIFRoaXMgc2V0dGluZyBpcyBkZWZpbmVkIGZvciB0aGUgb3V0cHV0IHN0cmVhbXMgaW4gY2FzZSB0aGUKKyAqIGNvbXBvbmVudCBjYW4gc3VwcG9ydCB2YXJ5aW5nIGNvbXBsZXhpdHkgb24gZWFjaCBzdHJlYW0sIG9yIGFzIGFuIG91dHB1dCBwb3J0IHR1bmluZyBpbiBjYXNlIHRoZQorICogcXVhbGl0eSBpcyBnbG9iYWwgdG8gYWxsIHN0cmVhbXMKKyAqLwordHlwZWRlZiBDMlN0cmVhbVBhcmFtPEMyVHVuaW5nLCBDMlVpbnQzMlZhbHVlLCBrUGFyYW1JbmRleENvbXBsZXhpdHk+IEMyU3RyZWFtQ29tcGxleGl0eVR1bmluZzsKK3R5cGVkZWYgQzJQb3J0UGFyYW08QzJUdW5pbmcsIEMyVWludDMyVmFsdWUsIGtQYXJhbUluZGV4Q29tcGxleGl0eT4gQzJDb21wbGV4aXR5VHVuaW5nOworY29uc3RleHByIGNoYXIgQzJfUEFSQU1LRVlfQ09NUExFWElUWVtdID0gImFsZ28uY29tcGxleGl0eSI7CisKKy8qKgorICogSGVhZGVyIChpbml0LWRhdGEpIGhhbmRsaW5nIGFyb3VuZCBzeW5jIGZyYW1lcy4KKyAqLworQzJFTlVNKEMyQ29uZmlnOjpwcmVwZW5kX2hlYWRlcl9tb2RlX3QsIHVpbnQzMl90LAorICAgIC8qKgorICAgICAqIGRvbid0IHByZXBlbmQgaGVhZGVyLiBTaWduYWwgaGVhZGVyIG9ubHkgdGhyb3VnaCBDMlN0cmVhbUluaXREYXRhSW5mby4KKyAgICAgKi8KKyAgICBQUkVQRU5EX0hFQURFUl9UT19OT05FLAorCisgICAgLyoqCisgICAgICogcHJlcGVuZCBoZWFkZXIgYmVmb3JlIHRoZSBmaXJzdCBvdXRwdXQgZnJhbWUgYW5kIHRoZXJlYWZ0ZXIgYmVmb3JlIHRoZSBuZXh0IHN5bmMgZnJhbWUKKyAgICAgKiBpZiBpdCBjaGFuZ2VzLgorICAgICAqLworICAgIFBSRVBFTkRfSEVBREVSX09OX0NIQU5HRSwKKworICAgIC8qKgorICAgICAqIHByZXBlbmQgaGVhZGVyIGJlZm9yZSBldmVyeSBzeW5jIGZyYW1lLgorICAgICAqLworICAgIFBSRVBFTkRfSEVBREVSX1RPX0FMTF9TWU5DLAorKQorCit0eXBlZGVmIEMyR2xvYmFsUGFyYW08QzJTZXR0aW5nLCBDMkJvb2xWYWx1ZSwga1BhcmFtSW5kZXhQcmVwZW5kSGVhZGVyTW9kZT4KKyAgICAgICAgQzJQcmVwZW5kSGVhZGVyTW9kZVNldHRpbmc7Citjb25zdGV4cHIgY2hhciBDMl9QQVJBTUtFWV9QUkVQRU5EX0hFQURFUl9NT0RFW10gPSAib3V0cHV0LmJ1ZmZlcnMucHJlcGVuZC1oZWFkZXIiOworCisvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSBJTUFHRS9WSURFTyBDT01QT05FTlRTID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCisKKy8qCisgKiBPcmRlciBvZiB0cmFuc2Zvcm1hdGlvbiBpczoKKyAqCisgKiBjcm9wID0+IChzY2FsaW5nID0+IHNjYWxlZC1jcm9wKSA9PiBzYW1wbGUtYXNwZWN0LXJhdGlvID0+IGZsaXAgPT4gcm90YXRpb24KKyAqLworCisvKioKKyAqIFBpY3R1cmUgKGltYWdlLSBhbmQgdmlkZW8gZnJhbWUpIHNpemUuCisgKgorICogVGhpcyBpcyB1c2VkIGZvciB0aGUgb3V0cHV0IG9mIHRoZSB2aWRlbyBkZWNvZGVyLCBhbmQgdGhlIGlucHV0IG9mIHRoZSB2aWRlbyBlbmNvZGVyLgorICovCit0eXBlZGVmIEMyUGljdHVyZVNpemVTdHJ1Y3QgQzJWaWRlb1NpemVTdHJ1Y3Q7IC8vIGRlcHJlY2F0ZWQKKwordHlwZWRlZiBDMlN0cmVhbVBhcmFtPEMySW5mbywgQzJQaWN0dXJlU2l6ZVN0cnVjdCwga1BhcmFtSW5kZXhQaWN0dXJlU2l6ZT4gQzJTdHJlYW1QaWN0dXJlU2l6ZUluZm87Citjb25zdGV4cHIgY2hhciBDMl9QQVJBTUtFWV9QSUNUVVJFX1NJWkVbXSA9ICJyYXcuc2l6ZSI7CisjZGVmaW5lIEMyX1BBUkFNS0VZX1NUUkVBTV9QSUNUVVJFX1NJWkUgQzJfUEFSQU1LRVlfUElDVFVSRV9TSVpFCisjZGVmaW5lIEMyX05BTUVfU1RSRUFNX1ZJREVPX1NJWkVfSU5GTyBDMl9QQVJBTUtFWV9QSUNUVVJFX1NJWkUKK3R5cGVkZWYgQzJTdHJlYW1QaWN0dXJlU2l6ZUluZm8gQzJWaWRlb1NpemVTdHJlYW1JbmZvOyAvLyBkZXByZWNhdGVkCit0eXBlZGVmIEMyU3RyZWFtUGljdHVyZVNpemVJbmZvIEMyVmlkZW9TaXplU3RyZWFtVHVuaW5nOyAvLyBkZXByZWNhdGVkCisjZGVmaW5lIEMyX05BTUVfU1RSRUFNX1ZJREVPX1NJWkVfU0VUVElORyBDMl9QQVJBTUtFWV9QSUNUVVJFX1NJWkUKKworLyoqCisgKiBDcm9wIHJlY3RhbmdsZS4KKyAqLworc3RydWN0IEMyUmVjdFN0cnVjdCA6IEMyUmVjdCB7CisgICAgQzJSZWN0U3RydWN0KCkgPSBkZWZhdWx0OworICAgIEMyUmVjdFN0cnVjdChjb25zdCBDMlJlY3QgJnJlY3QpIDogQzJSZWN0KHJlY3QpIHsgfQorCisgICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IEMyUmVjdFN0cnVjdCAmKSA9IGRlbGV0ZTsKKyAgICBib29sIG9wZXJhdG9yIT0oY29uc3QgQzJSZWN0U3RydWN0ICYpID0gZGVsZXRlOworCisgICAgREVGSU5FX0FORF9ERVNDUklCRV9CQVNFX0MyU1RSVUNUKFJlY3QpCisgICAgQzJGSUVMRCh3aWR0aCwgIndpZHRoIikKKyAgICBDMkZJRUxEKGhlaWdodCwgImhlaWdodCIpCisgICAgQzJGSUVMRChsZWZ0LCAibGVmdCIpCisgICAgQzJGSUVMRCh0b3AsICJ0b3AiKQorfTsKKwordHlwZWRlZiBDMlN0cmVhbVBhcmFtPEMySW5mbywgQzJSZWN0U3RydWN0LCBrUGFyYW1JbmRleENyb3BSZWN0PiBDMlN0cmVhbUNyb3BSZWN0SW5mbzsKK2NvbnN0ZXhwciBjaGFyIEMyX1BBUkFNS0VZX0NST1BfUkVDVFtdID0gInJhdy5jcm9wIjsKK2NvbnN0ZXhwciBjaGFyIEMyX1BBUkFNS0VZX0NPREVEX0NST1BfUkVDVFtdID0gImNvZGVkLmNyb3AiOworCisvKioKKyAqIFBpeGVsIGZvcm1hdC4KKyAqLworLy8gVE9ETzogZGVmaW5lIHNvbWUKKwordHlwZWRlZiBDMlN0cmVhbVBhcmFtPEMySW5mbywgQzJVaW50MzJWYWx1ZSwga1BhcmFtSW5kZXhQaXhlbEZvcm1hdD4gQzJTdHJlYW1QaXhlbEZvcm1hdEluZm87Citjb25zdGV4cHIgY2hhciBDMl9QQVJBTUtFWV9QSVhFTF9GT1JNQVRbXSA9ICJyYXcucGl4ZWwtZm9ybWF0IjsKKworLyoqCisgKiBFeHRlbmRlZCByb3RhdGlvbiBpbmZvcm1hdGlvbiBhbHNvIGluY29ycG9yYXRpbmcgYSBmbGlwLgorICoKKyAqIFJvdGF0aW9uIGlzIGNvdW50ZXIgY2xvY2std2lzZS4KKyAqLworc3RydWN0IEMyUm90YXRpb25TdHJ1Y3QgeworICAgIEMyUm90YXRpb25TdHJ1Y3QoaW50MzJfdCByb3RhdGlvbiA9IDApCisgICAgICAgIDogZmxpcCgwKSwgdmFsdWUocm90YXRpb24pIHsgfQorCisgICAgaW50MzJfdCBmbGlwOyAgIC8vLzwgaG9yaXpvbnRhbCBmbGlwIChsZWZ0LXJpZ2h0IGZsaXAgYXBwbGllZCBwcmlvciB0byByb3RhdGlvbikKKyAgICBpbnQzMl90IHZhbHVlOyAgLy8vPCByb3RhdGlvbiBpbiBkZWdyZWVzIGNvdW50ZXIgY2xvY2t3aXNlCisKKyAgICBERUZJTkVfQU5EX0RFU0NSSUJFX0JBU0VfQzJTVFJVQ1QoUm90YXRpb24pCisgICAgQzJGSUVMRChmbGlwLCAiZmxpcCIpCisgICAgQzJGSUVMRCh2YWx1ZSwgInZhbHVlIikKK307CisKK3R5cGVkZWYgQzJTdHJlYW1QYXJhbTxDMkluZm8sIEMyUm90YXRpb25TdHJ1Y3QsIGtQYXJhbUluZGV4Um90YXRpb24+IEMyU3RyZWFtUm90YXRpb25JbmZvOworY29uc3RleHByIGNoYXIgQzJfUEFSQU1LRVlfUk9UQVRJT05bXSA9ICJyYXcucm90YXRpb24iOworY29uc3RleHByIGNoYXIgQzJfUEFSQU1LRVlfVlVJX1JPVEFUSU9OW10gPSAiY29kZWQudnVpLnJvdGF0aW9uIjsKKworLyoqCisgKiBQaXhlbCAoc2FtcGxlKSBhc3BlY3QgcmF0aW8uCisgKi8KK3R5cGVkZWYgQzJTdHJlYW1QYXJhbTxDMkluZm8sIEMyUGljdHVyZVNpemVTdHJ1Y3QsIGtQYXJhbUluZGV4UGl4ZWxBc3BlY3RSYXRpbz4KKyAgICAgICAgQzJTdHJlYW1QaXhlbEFzcGVjdFJhdGlvSW5mbzsKK2NvbnN0ZXhwciBjaGFyIEMyX1BBUkFNS0VZX1BJWEVMX0FTUEVDVF9SQVRJT1tdID0gInJhdy5zYXIiOworY29uc3RleHByIGNoYXIgQzJfUEFSQU1LRVlfVlVJX1BJWEVMX0FTUEVDVF9SQVRJT1tdID0gImNvZGVkLnZ1aS5zYXIiOworCisvKioKKyAqIEluLWxpbmUgc2NhbGluZy4KKyAqCisgKiBDb21wb25lbnRzIGNhbiBvcHRpb25hbGx5IHN1cHBvcnQgc2NhbGluZyBvZiByYXcgaW1hZ2UvdmlkZW8gZnJhbWVzLiAgT3Igc2NhbGluZyBvbmx5IGEKKyAqIHBvcnRpb24gb2YgcmF3IGltYWdlL3ZpZGVvIGZyYW1lcyAoc2NhbGVkLWNyb3ApLgorICovCisKK0MyRU5VTShDMkNvbmZpZzo6c2NhbGluZ19tZXRob2RfdCwgdWludDMyX3QsCisgICAgU0NBTElOR19BUkJJVFJBUlksICAgLy8vPCBhcmJpdHJhcnksIHVuc3BlY2lmaWVkCispCisKK3R5cGVkZWYgQzJTdHJlYW1QYXJhbTxDMlR1bmluZywgQzJTaW1wbGVWYWx1ZVN0cnVjdDxDMkNvbmZpZzo6c2NhbGluZ19tZXRob2RfdD4sCisgICAgICAgICAgICAgICAga1BhcmFtSW5kZXhTY2FsaW5nTWV0aG9kPgorICAgICAgICBDMlN0cmVhbVNjYWxpbmdNZXRob2RUdW5pbmc7Citjb25zdGV4cHIgY2hhciBDMl9QQVJBTUtFWV9TQ0FMSU5HX01PREVbXSA9ICJyYXcuc2NhbGluZy1tZXRob2QiOworI2RlZmluZSBDMl9QQVJBTUtFWV9TVFJFQU1fU0NBTElOR19NT0RFIEMyX1BBUkFNS0VZX1NDQUxJTkdfTU9ERQorCit0eXBlZGVmIEMyU3RyZWFtUGFyYW08QzJUdW5pbmcsIEMyUGljdHVyZVNpemVTdHJ1Y3QsIGtQYXJhbUluZGV4U2NhbGVkUGljdHVyZVNpemU+CisgICAgICAgIEMyU3RyZWFtU2NhbGVkUGljdHVyZVNpemVUdW5pbmc7Citjb25zdGV4cHIgY2hhciBDMl9QQVJBTUtFWV9TQ0FMRURfUElDVFVSRV9TSVpFW10gPSAicmF3LnNjYWxlZC1zaXplIjsKKyNkZWZpbmUgQzJfUEFSQU1LRVlfU1RSRUFNX1NDQUxFRF9QSUNUVVJFX1NJWkUgQzJfUEFSQU1LRVlfU0NBTEVEX1BJQ1RVUkVfU0laRQorCit0eXBlZGVmIEMyU3RyZWFtUGFyYW08QzJUdW5pbmcsIEMyUmVjdFN0cnVjdCwga1BhcmFtSW5kZXhTY2FsZWRDcm9wUmVjdD4KKyAgICAgICAgQzJTdHJlYW1TY2FsZWRDcm9wUmVjdFR1bmluZzsKK2NvbnN0ZXhwciBjaGFyIEMyX1BBUkFNS0VZX1NDQUxFRF9DUk9QX1JFQ1RbXSA9ICJyYXcuc2NhbGVkLWNyb3AiOworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIGNvbG9yIGluZm9ybWF0aW9uIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworLyoqCisgKiBDb2xvciBJbmZvCisgKgorICogQ2hyb21hIGxvY2F0aW9uIGNhbiB2YXJ5IGZvciB0b3AgYW5kIGJvdHRvbSBmaWVsZHMsIHNvIHVzZSBhbiBhcnJheSwgdGhhdCBjYW4gaGF2ZSAwIHRvIDIKKyAqIHZhbHVlcy4gRW1wdHkgYXJyYXkgaXMgdXNlZCBmb3Igbm9uIFlVViBmb3JtYXRzLgorICovCisKK3N0cnVjdCBDMkNvbG9yIHsKKyAgICBlbnVtIG1hdHJpeF90IDogdWludDMyX3Q7ICAvLy88IG1hdHJpeCBjb2VmZmljaWVudCAoWVVWIDw9PiBSR0IpCisgICAgZW51bSBwbGFuZV9sYXlvdXRfdCA6IHVpbnQzMl90OyAgLy8vPCBwbGFuZSBsYXlvdXQgZm9yIGZsZXhpYmxlIGZvcm1hdHMKKyAgICBlbnVtIHByaW1hcmllc190IDogdWludDMyX3Q7ICAvLy88IGNvbG9yIHByaW1hcmllcyBhbmQgd2hpdGUgcG9pbnQKKyAgICBlbnVtIHJhbmdlX3QgOiB1aW50MzJfdDsgIC8vLzwgcmFuZ2Ugb2YgY29sb3IgY29tcG9uZW50IHZhbHVlcworICAgIGVudW0gc3Vic2FtcGxpbmdfdCA6IHVpbnQzMl90OyAgLy8vPCBjaHJvbWEgc3Vic2FtcGxpbmcKKyAgICBlbnVtIHRyYW5zZmVyX3QgOiB1aW50MzJfdDsgIC8vLzwgdHJhbnNmZXIgZnVuY3Rpb24KK307CisKKy8vLyBDaHJvbWEgc3Vic2FtcGxpbmcKK0MyRU5VTShDMkNvbG9yOjpzdWJzYW1wbGluZ190LCB1aW50MzJfdCwKKyAgICBNT05PQ0hST01FLCAgICAgLy8vPCB0aGVyZSBhcmUgbm8gQ3Igbm9yIENiIHBsYW5lcworICAgIE1PTk9DSFJPTUVfQUxQSEEsIC8vLzwgdGhlcmUgYXJlIG5vIENyIG5vciBDYiBwbGFuZXMsIGJ1dCB0aGVyZSBpcyBhbiBhbHBoYSBwbGFuZQorICAgIFJHQiwgICAgICAgICAgICAvLy88IFJHQgorICAgIFJHQkEsICAgICAgICAgICAvLy88IFJHQkEKKyAgICBZVVZfNDIwLCAgICAgICAgLy8vPCBDciBhbmQgQ2IgcGxhbmVzIGFyZSBzdWJzYW1wbGVkIGJ5IDIgYm90aCBob3Jpem9udGFsbHkgYW5kIHZlcnRpY2FsbHkKKyAgICBZVVZfNDIyLCAgICAgICAgLy8vPCBDciBhbmQgQ2IgcGxhbmVzIGFyZSBzdWJzYW1wbGVkIGhvcml6b250YWxseQorICAgIFlVVl80NDQsICAgICAgICAvLy88IENyIGFuZCBDYiBwbGFuZXMgYXJlIG5vdCBzdWJzYW1wbGVkCisgICAgWVVWQV80NDQsICAgICAgIC8vLzwgQ3IgYW5kIENiIHBsYW5lcyBhcmUgbm90IHN1YnNhbXBsZWQsIHRoZXJlIGlzIGFuIGFscGhhIHBsYW5lCispCisKK3N0cnVjdCBDMkNocm9tYU9mZnNldFN0cnVjdCB7CisgICAgLy8gY2hyb21hIG9mZnNldHMgZGVmaW5lZCBieSBJVFUKKyAgICBjb25zdGV4cHIgc3RhdGljIEMyQ2hyb21hT2Zmc2V0U3RydWN0IElUVV9ZVVZfNDQ0KCkgeyByZXR1cm4geyAwLjBmLCAwLjBmIH07IH0KKyAgICBjb25zdGV4cHIgc3RhdGljIEMyQ2hyb21hT2Zmc2V0U3RydWN0IElUVV9ZVVZfNDIyKCkgeyByZXR1cm4geyAwLjBmLCAwLjBmIH07IH0KKyAgICBjb25zdGV4cHIgc3RhdGljIEMyQ2hyb21hT2Zmc2V0U3RydWN0IElUVV9ZVVZfNDIwXzAoKSB7IHJldHVybiB7IDAuMGYsIDAuNWYgfTsgfQorICAgIGNvbnN0ZXhwciBzdGF0aWMgQzJDaHJvbWFPZmZzZXRTdHJ1Y3QgSVRVX1lVVl80MjBfMSgpIHsgcmV0dXJuIHsgMC41ZiwgMC41ZiB9OyB9CisgICAgY29uc3RleHByIHN0YXRpYyBDMkNocm9tYU9mZnNldFN0cnVjdCBJVFVfWVVWXzQyMF8yKCkgeyByZXR1cm4geyAwLjBmLCAwLjBmIH07IH0KKyAgICBjb25zdGV4cHIgc3RhdGljIEMyQ2hyb21hT2Zmc2V0U3RydWN0IElUVV9ZVVZfNDIwXzMoKSB7IHJldHVybiB7IDAuNWYsIDAuMGYgfTsgfQorICAgIGNvbnN0ZXhwciBzdGF0aWMgQzJDaHJvbWFPZmZzZXRTdHJ1Y3QgSVRVX1lVVl80MjBfNCgpIHsgcmV0dXJuIHsgMC4wZiwgMS4wZiB9OyB9CisgICAgY29uc3RleHByIHN0YXRpYyBDMkNocm9tYU9mZnNldFN0cnVjdCBJVFVfWVVWXzQyMF81KCkgeyByZXR1cm4geyAwLjVmLCAxLjBmIH07IH0KKworICAgIGZsb2F0IHg7ICAgIC8vLzwgeCBvZmZzZXQgaW4gcGl4ZWxzICh0b3dhcmRzIHJpZ2h0KQorICAgIGZsb2F0IHk7ICAgIC8vLzwgeSBvZmZzZXQgaW4gcGl4ZWxzICh0b3dhcmRzIGRvd24pCisKKyAgICBERUZJTkVfQU5EX0RFU0NSSUJFX0MyU1RSVUNUKENocm9tYU9mZnNldCkKKyAgICBDMkZJRUxEKHgsICJ4IikKKyAgICBDMkZJRUxEKHksICJ5IikKK307CisKK3N0cnVjdCBDMkNvbG9ySW5mb1N0cnVjdCB7CisgICAgQzJDb2xvckluZm9TdHJ1Y3QoKQorICAgICAgICA6IGJpdERlcHRoKDgpLCBzdWJzYW1wbGluZyhDMkNvbG9yOjpZVVZfNDIwKSB7IH0KKworICAgIHVpbnQzMl90IGJpdERlcHRoOworICAgIEMyQ29sb3I6OnN1YnNhbXBsaW5nX3Qgc3Vic2FtcGxpbmc7CisgICAgQzJDaHJvbWFPZmZzZXRTdHJ1Y3QgbG9jYXRpb25zW107IC8vIG1heCAyIGVsZW1lbnRzCisKKyAgICBDMkNvbG9ySW5mb1N0cnVjdCgKKyAgICAgICAgICAgIHNpemVfdCAvKiBmbGV4Q291bnQgKi8sIHVpbnQzMl90IGJpdERlcHRoXywgQzJDb2xvcjo6c3Vic2FtcGxpbmdfdCBzdWJzYW1wbGluZ18pCisgICAgICAgIDogYml0RGVwdGgoYml0RGVwdGhfKSwgc3Vic2FtcGxpbmcoc3Vic2FtcGxpbmdfKSB7IH0KKworICAgIEMyQ29sb3JJbmZvU3RydWN0KAorICAgICAgICAgICAgc2l6ZV90IGZsZXhDb3VudCwgdWludDMyX3QgYml0RGVwdGhfLCBDMkNvbG9yOjpzdWJzYW1wbGluZ190IHN1YnNhbXBsaW5nXywKKyAgICAgICAgICAgIHN0ZDo6aW5pdGlhbGl6ZXJfbGlzdDxDMkNocm9tYU9mZnNldFN0cnVjdD4gbG9jYXRpb25zXykKKyAgICAgICAgOiBiaXREZXB0aChiaXREZXB0aF8pLCBzdWJzYW1wbGluZyhzdWJzYW1wbGluZ18pIHsKKyAgICAgICAgc2l6ZV90IGl4ID0gMDsKKyAgICAgICAgZm9yIChjb25zdCBDMkNocm9tYU9mZnNldFN0cnVjdCAmbG9jYXRpb24gOiBsb2NhdGlvbnNfKSB7CisgICAgICAgICAgICBpZiAoaXggPT0gZmxleENvdW50KSB7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBsb2NhdGlvbnNbaXhdID0gbG9jYXRpb247CisgICAgICAgICAgICArK2l4OworICAgICAgICB9CisgICAgfQorCisgICAgREVGSU5FX0FORF9ERVNDUklCRV9GTEVYX0MyU1RSVUNUKENvbG9ySW5mbywgbG9jYXRpb25zKQorICAgIEMyRklFTEQoYml0RGVwdGgsICJiaXQtZGVwdGgiKQorICAgIEMyRklFTEQoc3Vic2FtcGxpbmcsICJzdWJzYW1wbGluZyIpCisgICAgQzJGSUVMRChsb2NhdGlvbnMsICJsb2NhdGlvbnMiKQorfTsKKwordHlwZWRlZiBDMlN0cmVhbVBhcmFtPEMySW5mbywgQzJDb2xvckluZm9TdHJ1Y3QsIGtQYXJhbUluZGV4Q29sb3JJbmZvPiBDMlN0cmVhbUNvbG9ySW5mbzsKK2NvbnN0ZXhwciBjaGFyIEMyX1BBUkFNS0VZX0NPTE9SX0lORk9bXSA9ICJyYXcuY29sb3ItZm9ybWF0IjsKK2NvbnN0ZXhwciBjaGFyIEMyX1BBUkFNS0VZX0NPREVEX0NPTE9SX0lORk9bXSA9ICJjb2RlZC5jb2xvci1mb3JtYXQiOworCisvKioKKyAqIENvbG9yIEFzcGVjdHMKKyAqLworCisvKiBUaGUgbWVhbmluZyBvZiB0aGUgZm9sbG93aW5nIGVudW1lcmF0b3JzIGlzIGFzIGRlc2NyaWJlZCBpbiBJVFUtVCBILjI3My4gKi8KKworLy8vIFJhbmdlCitDMkVOVU0oQzJDb2xvcjo6cmFuZ2VfdCwgdWludDMyX3QsCisgICAgUkFOR0VfVU5TUEVDSUZJRUQsICAgICAgICAgIC8vLzwgcmFuZ2UgaXMgdW5zcGVjaWZpZWQKKyAgICBSQU5HRV9GVUxMLCAgICAgICAgICAgICAgICAgLy8vPCBmdWxsIHJhbmdlCisgICAgUkFOR0VfTElNSVRFRCwgICAgICAgICAgICAgIC8vLzwgbGltaXRlZCByYW5nZQorCisgICAgUkFOR0VfVkVORE9SX1NUQVJUID0gMHg4MCwgIC8vLzwgdmVuZG9yLXNwZWNpZmljIHJhbmdlIHZhbHVlcyBzdGFydCBoZXJlCisgICAgUkFOR0VfT1RIRVIgPSAwWEZGICAgICAgICAgIC8vLzwgbWF4IHZhbHVlLCByZXNlcnZlZCBmb3IgdW5kZWZpbmVkIHZhbHVlcworKQorCisvLy8gQ29sb3IgcHJpbWFyaWVzCitDMkVOVU0oQzJDb2xvcjo6cHJpbWFyaWVzX3QsIHVpbnQzMl90LAorICAgIFBSSU1BUklFU19VTlNQRUNJRklFRCwgICAgICAgICAgLy8vPCBwcmltYXJpZXMgYXJlIHVuc3BlY2lmaWVkCisgICAgUFJJTUFSSUVTX0JUNzA5LCAgICAgICAgICAgICAgICAvLy88IFJlYy5JVFUtUiBCVC43MDktNiBvciBlcXVpdmFsZW50CisgICAgUFJJTUFSSUVTX0JUNDcwX00sICAgICAgICAgICAgICAvLy88IFJlYy5JVFUtUiBCVC40NzAtNiBTeXN0ZW0gTSBvciBlcXVpdmFsZW50CisgICAgUFJJTUFSSUVTX0JUNjAxXzYyNSwgICAgICAgICAgICAvLy88IFJlYy5JVFUtUiBCVC42MDEtNiA2MjUgb3IgZXF1aXZhbGVudAorICAgIFBSSU1BUklFU19CVDYwMV81MjUsICAgICAgICAgICAgLy8vPCBSZWMuSVRVLVIgQlQuNjAxLTYgNTI1IG9yIGVxdWl2YWxlbnQKKyAgICBQUklNQVJJRVNfR0VORVJJQ19GSUxNLCAgICAgICAgIC8vLzwgR2VuZXJpYyBGaWxtCisgICAgUFJJTUFSSUVTX0JUMjAyMCwgICAgICAgICAgICAgICAvLy88IFJlYy5JVFUtUiBCVC4yMDIwIG9yIGVxdWl2YWxlbnQKKyAgICBQUklNQVJJRVNfUlA0MzEsICAgICAgICAgICAgICAgIC8vLzwgU01QVEUgUlAgNDMxLTIgb3IgZXF1aXZhbGVudAorICAgIFBSSU1BUklFU19FRzQzMiwgICAgICAgICAgICAgICAgLy8vPCBTTVBURSBFRyA0MzItMSBvciBlcXVpdmFsZW50CisgICAgUFJJTUFSSUVTX0VCVTMyMTMsICAgICAgICAgICAgICAvLy88IEVCVSBUZWNoLjMyMTMtRSBvciBlcXVpdmFsZW50CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8KKyAgICBQUklNQVJJRVNfVkVORE9SX1NUQVJUID0gMHg4MCwgIC8vLzwgdmVuZG9yLXNwZWNpZmljIHByaW1hcmllcyB2YWx1ZXMgc3RhcnQgaGVyZQorICAgIFBSSU1BUklFU19PVEhFUiA9IDB4ZmYgICAgICAgICAgLy8vPCBtYXggdmFsdWUsIHJlc2VydmVkIGZvciB1bmRlZmluZWQgdmFsdWVzCispCisKKy8vLyBUcmFuc2ZlciBmdW5jdGlvbgorQzJFTlVNKEMyQ29sb3I6OnRyYW5zZmVyX3QsIHVpbnQzMl90LAorICAgIFRSQU5TRkVSX1VOU1BFQ0lGSUVELCAgICAgICAgICAgLy8vPCB0cmFuc2ZlciBpcyB1bnNwZWNpZmllZAorICAgIFRSQU5TRkVSX0xJTkVBUiwgICAgICAgICAgICAgICAgLy8vPCBMaW5lYXIgdHJhbnNmZXIgY2hhcmFjdGVyaXN0aWNzCisgICAgVFJBTlNGRVJfU1JHQiwgICAgICAgICAgICAgICAgICAvLy88IHNSR0Igb3IgZXF1aXZhbGVudAorICAgIFRSQU5TRkVSXzE3ME0sICAgICAgICAgICAgICAgICAgLy8vPCBTTVBURSAxNzBNIG9yIGVxdWl2YWxlbnQgKGUuZy4gQlQuNjAxLzcwOS8yMDIwKQorICAgIFRSQU5TRkVSX0dBTU1BMjIsICAgICAgICAgICAgICAgLy8vPCBBc3N1bWVkIGRpc3BsYXkgZ2FtbWEgMi4yCisgICAgVFJBTlNGRVJfR0FNTUEyOCwgICAgICAgICAgICAgICAvLy88IEFzc3VtZWQgZGlzcGxheSBnYW1tYSAyLjgKKyAgICBUUkFOU0ZFUl9TVDIwODQsICAgICAgICAgICAgICAgIC8vLzwgU01QVEUgU1QgMjA4NCBmb3IgMTAvMTIvMTQvMTYgYml0IHN5c3RlbXMKKyAgICBUUkFOU0ZFUl9ITEcsICAgICAgICAgICAgICAgICAgIC8vLzwgQVJJQiBTVEQtQjY3IGh5YnJpZC1sb2ctZ2FtbWEKKworICAgIFRSQU5TRkVSXzI0ME0gPSAweDQwLCAgICAgICAgICAgLy8vPCBTTVBURSAyNDBNIG9yIGVxdWl2YWxlbnQKKyAgICBUUkFOU0ZFUl9YVllDQywgICAgICAgICAgICAgICAgIC8vLzwgSUVDIDYxOTY2LTItNCBvciBlcXVpdmFsZW50CisgICAgVFJBTlNGRVJfQlQxMzYxLCAgICAgICAgICAgICAgICAvLy88IFJlYy5JVFUtUiBCVC4xMzYxIGV4dGVuZGVkIGdhbXV0CisgICAgVFJBTlNGRVJfU1Q0MjgsICAgICAgICAgICAgICAgICAvLy88IFNNUFRFIFNUIDQyOC0xIG9yIGVxdWl2YWxlbnQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLworICAgIFRSQU5TRkVSX1ZFTkRPUl9TVEFSVCA9IDB4ODAsICAgLy8vPCB2ZW5kb3Itc3BlY2lmaWMgdHJhbnNmZXIgdmFsdWVzIHN0YXJ0IGhlcmUKKyAgICBUUkFOU0ZFUl9PVEhFUiA9IDB4ZmYgICAgICAgICAgIC8vLzwgbWF4IHZhbHVlLCByZXNlcnZlZCBmb3IgdW5kZWZpbmVkIHZhbHVlcworKQorCisvLy8gTWF0cml4IGNvZWZmaWNpZW50CitDMkVOVU0oQzJDb2xvcjo6bWF0cml4X3QsIHVpbnQzMl90LAorICAgIE1BVFJJWF9VTlNQRUNJRklFRCwgICAgICAgICAgICAgLy8vPCBtYXRyaXggY29lZmZpY2llbnRzIGFyZSB1bnNwZWNpZmllZAorICAgIE1BVFJJWF9CVDcwOSwgICAgICAgICAgICAgICAgICAgLy8vPCBSZWMuSVRVLVIgQlQuNzA5LTUgb3IgZXF1aXZhbGVudAorICAgIE1BVFJJWF9GQ0M0N183M182ODIsICAgICAgICAgICAgLy8vPCBGQ0MgVGl0bGUgNDcgQ0ZSIDczLjY4MiBvciBlcXVpdmFsZW50IChLUj0wLjMwLCBLQj0wLjExKQorICAgIE1BVFJJWF9CVDYwMSwgICAgICAgICAgICAgICAgICAgLy8vPCBSZWMuSVRVLVIgQlQuNDcwLCBCVC42MDEtNiA2MjUgb3IgZXF1aXZhbGVudAorICAgIE1BVFJJWF8yNDBNLCAgICAgICAgICAgICAgICAgICAgLy8vPCBTTVBURSAyNDBNIG9yIGVxdWl2YWxlbnQKKyAgICBNQVRSSVhfQlQyMDIwLCAgICAgICAgICAgICAgICAgIC8vLzwgUmVjLklUVS1SIEJULjIwMjAgbm9uLWNvbnN0YW50IGx1bWluYW5jZQorICAgIE1BVFJJWF9CVDIwMjBfQ09OU1RBTlQsICAgICAgICAgLy8vPCBSZWMuSVRVLVIgQlQuMjAyMCBjb25zdGFudCBsdW1pbmFuY2UKKyAgICBNQVRSSVhfVkVORE9SX1NUQVJUID0gMHg4MCwgICAgIC8vLzwgdmVuZG9yLXNwZWNpZmljIG1hdHJpeCBjb2VmZmljaWVudCB2YWx1ZXMgc3RhcnQgaGVyZQorICAgIE1BVFJJWF9PVEhFUiA9IDB4ZmYsICAgICAgICAgICAgLy8vPCBtYXggdmFsdWUsIHJlc2VydmVkIGZvciB1bmRlZmluZWQgdmFsdWVzCisKKyAgICBNQVRSSVhfU01QVEUyNDBNID0gTUFUUklYXzI0ME0sIC8vIGRlcHJlY2F0ZWQKKyAgICBNQVRSSVhfQlQyMDIwQ09OU1RBTlQgPSBNQVRSSVhfQlQyMDIwX0NPTlNUQU5ULCAvLyBkZXByZWNhdGVkCispCisKK2NvbnN0ZXhwciBDMkNvbG9yOjptYXRyaXhfdCBNQVRSSVhfQlQ0NzBfNk0gPSBNQVRSSVhfRkNDNDdfNzNfNjgyOyAvLyBkZXByZWNhdGVkCitjb25zdGV4cHIgQzJDb2xvcjo6bWF0cml4X3QgTUFUUklYX0JUNzA5XzUgPSBNQVRSSVhfQlQ3MDk7IC8vIGRlcHJlY2F0ZWQKK2NvbnN0ZXhwciBDMkNvbG9yOjptYXRyaXhfdCBNQVRSSVhfQlQ2MDFfNiA9IE1BVFJJWF9CVDYwMTsgLy8gZGVwcmVjYXRlZAorCitzdHJ1Y3QgQzJDb2xvckFzcGVjdHNTdHJ1Y3QgeworICAgIEMyQ29sb3I6OnJhbmdlX3QgcmFuZ2U7CisgICAgQzJDb2xvcjo6cHJpbWFyaWVzX3QgcHJpbWFyaWVzOworICAgIEMyQ29sb3I6OnRyYW5zZmVyX3QgdHJhbnNmZXI7CisgICAgQzJDb2xvcjo6bWF0cml4X3QgbWF0cml4OworCisgICAgQzJDb2xvckFzcGVjdHNTdHJ1Y3QoKQorICAgICAgICA6IHJhbmdlKEMyQ29sb3I6OlJBTkdFX1VOU1BFQ0lGSUVEKSwKKyAgICAgICAgICBwcmltYXJpZXMoQzJDb2xvcjo6UFJJTUFSSUVTX1VOU1BFQ0lGSUVEKSwKKyAgICAgICAgICB0cmFuc2ZlcihDMkNvbG9yOjpUUkFOU0ZFUl9VTlNQRUNJRklFRCksCisgICAgICAgICAgbWF0cml4KEMyQ29sb3I6Ok1BVFJJWF9VTlNQRUNJRklFRCkgeyB9CisKKyAgICBDMkNvbG9yQXNwZWN0c1N0cnVjdChDMkNvbG9yOjpyYW5nZV90IHJhbmdlXywgQzJDb2xvcjo6cHJpbWFyaWVzX3QgcHJpbWFyaWVzXywKKyAgICAgICAgICAgICAgICAgICAgICAgICBDMkNvbG9yOjp0cmFuc2Zlcl90IHRyYW5zZmVyXywgQzJDb2xvcjo6bWF0cml4X3QgbWF0cml4XykKKyAgICAgICAgOiByYW5nZShyYW5nZV8pLCBwcmltYXJpZXMocHJpbWFyaWVzXyksIHRyYW5zZmVyKHRyYW5zZmVyXyksIG1hdHJpeChtYXRyaXhfKSB7fQorCisgICAgREVGSU5FX0FORF9ERVNDUklCRV9DMlNUUlVDVChDb2xvckFzcGVjdHMpCisgICAgQzJGSUVMRChyYW5nZSwgInJhbmdlIikKKyAgICBDMkZJRUxEKHByaW1hcmllcywgInByaW1hcmllcyIpCisgICAgQzJGSUVMRCh0cmFuc2ZlciwgInRyYW5zZmVyIikKKyAgICBDMkZJRUxEKG1hdHJpeCwgIm1hdHJpeCIpCit9OworCit0eXBlZGVmIEMyU3RyZWFtUGFyYW08QzJJbmZvLCBDMkNvbG9yQXNwZWN0c1N0cnVjdCwga1BhcmFtSW5kZXhDb2xvckFzcGVjdHM+CisgICAgICAgIEMyU3RyZWFtQ29sb3JBc3BlY3RzSW5mbzsKK2NvbnN0ZXhwciBjaGFyIEMyX1BBUkFNS0VZX0NPTE9SX0FTUEVDVFNbXSA9ICJyYXcuY29sb3IiOworY29uc3RleHByIGNoYXIgQzJfUEFSQU1LRVlfVlVJX0NPTE9SX0FTUEVDVFNbXSA9ICJjb2RlZC52dWkuY29sb3IiOworCisvKioKKyAqIERlZmF1bHQgY29sb3IgYXNwZWN0cyB0byB1c2UuIFRoZXNlIGNvbWUgZnJvbSB0aGUgY29udGFpbmVyIG9yIGNsaWVudCBhbmQgc2hhbGwgYmUgaGFuZGxlZAorICogYWNjb3JkaW5nIHRvIHRoZSBjb2Rpbmcgc3RhbmRhcmQuCisgKi8KK3R5cGVkZWYgQzJTdHJlYW1QYXJhbTxDMlR1bmluZywgQzJDb2xvckFzcGVjdHNTdHJ1Y3QsIGtQYXJhbUluZGV4RGVmYXVsdENvbG9yQXNwZWN0cz4KKyAgICAgICAgQzJTdHJlYW1Db2xvckFzcGVjdHNUdW5pbmc7Citjb25zdGV4cHIgY2hhciBDMl9QQVJBTUtFWV9ERUZBVUxUX0NPTE9SX0FTUEVDVFNbXSA9ICJkZWZhdWx0LmNvbG9yIjsKKworLyoqCisgKiBIRFIgU3RhdGljIE1ldGFkYXRhIEluZm8uCisgKi8KK3N0cnVjdCBDMkNvbG9yWHlTdHJ1Y3QgeworICAgIGZsb2F0IHg7IC8vLzwgeCBjb2xvciBjb29yZGluYXRlIGluIHh5WSBzcGFjZSBbMC0xXQorICAgIGZsb2F0IHk7IC8vLzwgeSBjb2xvciBjb29yZGluYXRlIGluIHh5WSBzcGFjZSBbMC0xXQorCisgICAgREVGSU5FX0FORF9ERVNDUklCRV9DMlNUUlVDVChDb2xvclh5KQorICAgIEMyRklFTEQoeCwgIngiKQorICAgIEMyRklFTEQoeSwgInkiKQorfTsKKworc3RydWN0IEMyTWFzdGVyaW5nRGlzcGxheUNvbG9yVm9sdW1lU3RydWN0IHsKKyAgICBDMkNvbG9yWHlTdHJ1Y3QgcmVkOyAgICAvLy88IGNvb3JkaW5hdGVzIG9mIHJlZCBkaXNwbGF5IHByaW1hcnkKKyAgICBDMkNvbG9yWHlTdHJ1Y3QgZ3JlZW47ICAvLy88IGNvb3JkaW5hdGVzIG9mIGdyZWVuIGRpc3BsYXkgcHJpbWFyeQorICAgIEMyQ29sb3JYeVN0cnVjdCBibHVlOyAgIC8vLzwgY29vcmRpbmF0ZXMgb2YgYmx1ZSBkaXNwbGF5IHByaW1hcnkKKyAgICBDMkNvbG9yWHlTdHJ1Y3Qgd2hpdGU7ICAvLy88IGNvb3JkaW5hdGVzIG9mIHdoaXRlIHBvaW50CisKKyAgICBmbG9hdCBtYXhMdW1pbmFuY2U7ICAvLy88IG1heCBkaXNwbGF5IG1hc3RlcmluZyBsdW1pbmFuY2UgaW4gY2QvbV4yCisgICAgZmxvYXQgbWluTHVtaW5hbmNlOyAgLy8vPCBtaW4gZGlzcGxheSBtYXN0ZXJpbmcgbHVtaW5hbmNlIGluIGNkL21eMgorCisgICAgREVGSU5FX0FORF9ERVNDUklCRV9DMlNUUlVDVChNYXN0ZXJpbmdEaXNwbGF5Q29sb3JWb2x1bWUpCisgICAgQzJGSUVMRChyZWQsICJyZWQiKQorICAgIEMyRklFTEQoZ3JlZW4sICJncmVlbiIpCisgICAgQzJGSUVMRChibHVlLCAiYmx1ZSIpCisgICAgQzJGSUVMRCh3aGl0ZSwgIndoaXRlIikKKworICAgIEMyRklFTEQobWF4THVtaW5hbmNlLCAibWF4LWx1bWluYW5jZSIpCisgICAgQzJGSUVMRChtaW5MdW1pbmFuY2UsICJtaW4tbHVtaW5hbmNlIikKK307CisKK3N0cnVjdCBDMkhkclN0YXRpY01ldGFkYXRhU3RydWN0IHsKKyAgICBDMk1hc3RlcmluZ0Rpc3BsYXlDb2xvclZvbHVtZVN0cnVjdCBtYXN0ZXJpbmc7CisKKyAgICAvLyBjb250ZW50IGRlc2NyaXB0b3JzCisgICAgZmxvYXQgbWF4Q2xsOyAgLy8vPCBtYXggY29udGVudCBsaWdodCBsZXZlbCAocGl4ZWwgbHVtaW5hbmNlKSBpbiBjZC9tXjIKKyAgICBmbG9hdCBtYXhGYWxsOyAvLy88IG1heCBmcmFtZSBhdmVyYWdlIGxpZ2h0IGxldmVsIChmcmFtZSBsdW1pbmFuY2UpIGluIGNkL21eMgorCisgICAgREVGSU5FX0FORF9ERVNDUklCRV9CQVNFX0MyU1RSVUNUKEhkclN0YXRpY01ldGFkYXRhKQorICAgIEMyRklFTEQobWFzdGVyaW5nLCAibWFzdGVyaW5nIikKKyAgICBDMkZJRUxEKG1heENsbCwgIm1heC1jbGwiKQorICAgIEMyRklFTEQobWF4RmFsbCwgIm1heC1mYWxsIikKK307Cit0eXBlZGVmIEMyU3RyZWFtUGFyYW08QzJJbmZvLCBDMkhkclN0YXRpY01ldGFkYXRhU3RydWN0LCBrUGFyYW1JbmRleEhkclN0YXRpY01ldGFkYXRhPgorICAgICAgICBDMlN0cmVhbUhkclN0YXRpY0luZm87Citjb25zdGV4cHIgY2hhciBDMl9QQVJBTUtFWV9IRFJfU1RBVElDX0lORk9bXSA9ICJyYXcuaGRyLXN0YXRpYy1pbmZvIjsKKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIGJsb2NrLWJhc2VkIGNvZGluZyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCisvKioKKyAqIEJsb2NrLXNpemUsIGJsb2NrIGNvdW50IGFuZCBibG9jayByYXRlLiBVc2VkIHRvIGRldGVybWluZSBvciBjb21tdW5pY2F0ZSBwcm9maWxlLWxldmVsCisgKiByZXF1aXJlbWVudHMuCisgKi8KK3R5cGVkZWYgQzJTdHJlYW1QYXJhbTxDMkluZm8sIEMyUGljdHVyZVNpemVTdHJ1Y3QsIGtQYXJhbUluZGV4QmxvY2tTaXplPiBDMlN0cmVhbUJsb2NrU2l6ZUluZm87Citjb25zdGV4cHIgY2hhciBDMl9QQVJBTUtFWV9CTE9DS19TSVpFW10gPSAiY29kZWQuYmxvY2stc2l6ZSI7CisKK3R5cGVkZWYgQzJTdHJlYW1QYXJhbTxDMkluZm8sIEMyVWludDMyVmFsdWUsIGtQYXJhbUluZGV4QmxvY2tDb3VudD4gQzJTdHJlYW1CbG9ja0NvdW50SW5mbzsKK2NvbnN0ZXhwciBjaGFyIEMyX1BBUkFNS0VZX0JMT0NLX0NPVU5UW10gPSAiY29kZWQuYmxvY2stY291bnQiOworCit0eXBlZGVmIEMyU3RyZWFtUGFyYW08QzJJbmZvLCBDMkZsb2F0VmFsdWUsIGtQYXJhbUluZGV4QmxvY2tSYXRlPiBDMlN0cmVhbUJsb2NrUmF0ZUluZm87Citjb25zdGV4cHIgY2hhciBDMl9QQVJBTUtFWV9CTE9DS19SQVRFW10gPSAiY29kZWQuYmxvY2stcmF0ZSI7CisKKy8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09IFZJREVPIENPTVBPTkVOVFMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KKworLyoqCisgKiBGcmFtZSByYXRlIChjb2RlZCBhbmQgcG9ydCBmb3IgcmF3IGRhdGEpCisgKgorICogQ29kZWQgZnJhbWUgcmF0ZXMgYXJlIHdoYXQgaXMgcmVwcmVzZW50ZWQgaW4gdGhlIGNvbXByZXNzZWQgYml0c3RyZWFtIGFuZCBzaG91bGQgY29ycmVzcG9uZCB0bworICogdGhlIHRpbWVzdGFtcC4KKyAqCisgKiBGcmFtZSByYXRlcyBvbiByYXcgcG9ydHMgc2hvdWxkIHN0aWxsIGNvcnJlc3BvbmQgdG8gdGhlIHRpbWVzdGFtcHMuCisgKgorICogRm9yIHNsb3cgbW90aW9uIG9yIHRpbWVsYXBzZSByZWNvcmRpbmcsIHRoZSB0aW1lc3RhbXAgc2hhbGwgYmUgYWRqdXN0ZWQgcHJpb3IgdG8gZmVlZGluZyBhbgorICogZW5jb2RlciwgYW5kIHRoZSB0aW1lIHN0cmV0Y2ggcGFyYW1ldGVyIHNob3VsZCBiZSB1c2VkIHRvIHNpZ25hbCB0aGUgcmVsYXRpb25zaGlwIGJldHdlZW4KKyAqIHRpbWVzdGFtcCBhbmQgcmVhbC13b3JsZCB0aW1lLgorICovCit0eXBlZGVmIEMyU3RyZWFtUGFyYW08QzJJbmZvLCBDMkZsb2F0VmFsdWUsIGtQYXJhbUluZGV4RnJhbWVSYXRlPiBDMlN0cmVhbUZyYW1lUmF0ZUluZm87Citjb25zdGV4cHIgY2hhciBDMl9QQVJBTUtFWV9GUkFNRV9SQVRFW10gPSAiY29kZWQuZnJhbWUtcmF0ZSI7CisjZGVmaW5lIEMyX05BTUVfU1RSRUFNX0ZSQU1FX1JBVEVfU0VUVElORyBDMl9QQVJBTUtFWV9GUkFNRV9SQVRFCisKK3R5cGVkZWYgQzJQb3J0UGFyYW08QzJJbmZvLCBDMkZsb2F0VmFsdWUsIGtQYXJhbUluZGV4RnJhbWVSYXRlPiBDMlBvcnRGcmFtZVJhdGVJbmZvOworY29uc3RleHByIGNoYXIgQzJfUEFSQU1LRVlfSU5QVVRfRlJBTUVfUkFURVtdID0gImlucHV0LmZyYW1lLXJhdGUiOworY29uc3RleHByIGNoYXIgQzJfUEFSQU1LRVlfT1VUUFVUX0ZSQU1FX1JBVEVbXSA9ICJvdXRwdXQuZnJhbWUtcmF0ZSI7CisKKy8qKgorICogVGltZSBzdHJldGNoLiBSYXRpbyBiZXR3ZWVuIHJlYWwtd29ybGQgdGltZSBhbmQgdGltZXN0YW1wLiBFLmcuIHRpbWUgc3RyZXRjaCBvZiA0LjAgbWVhbnMgdGhhdAorICogdGltZXN0YW1wIGdyb3dzIDEvNCB0aGUgc3BlZWQgb2YgcmVhbC13b3JsZCB0aW1lIChlLmcuIDR4IHNsby1tbyBpbnB1dCkuIFRoaXMgY2FuIGJlIHVzZWQgdG8KKyAqIG9wdGltaXplIGVuY29kaW5nLgorICovCit0eXBlZGVmIEMyUG9ydFBhcmFtPEMySW5mbywgQzJGbG9hdFZhbHVlLCBrUGFyYW1JbmRleFRpbWVTdHJldGNoPiBDMlBvcnRUaW1lU3RyZXRjaEluZm87Citjb25zdGV4cHIgY2hhciBDMl9QQVJBTUtFWV9JTlBVVF9USU1FX1NUUkVUQ0hbXSA9ICJpbnB1dC50aW1lLXN0cmV0Y2giOworY29uc3RleHByIGNoYXIgQzJfUEFSQU1LRVlfT1VUUFVUX1RJTUVfU1RSRVRDSFtdID0gIm91dHB1dC50aW1lLXN0cmV0Y2giOworCisvKioKKyAqIE1heCB2aWRlbyBmcmFtZSBzaXplLgorICovCit0eXBlZGVmIEMyU3RyZWFtUGFyYW08QzJUdW5pbmcsIEMyUGljdHVyZVNpemVTdHJ1Y3QsIGtQYXJhbUluZGV4TWF4UGljdHVyZVNpemU+CisgICAgICAgIEMyU3RyZWFtTWF4UGljdHVyZVNpemVUdW5pbmc7Cit0eXBlZGVmIEMyU3RyZWFtTWF4UGljdHVyZVNpemVUdW5pbmcgQzJNYXhWaWRlb1NpemVIaW50UG9ydFNldHRpbmc7Citjb25zdGV4cHIgY2hhciBDMl9QQVJBTUtFWV9NQVhfUElDVFVSRV9TSVpFW10gPSAicmF3Lm1heC1zaXplIjsKKworLyoqCisgKiBQaWN0dXJlIHR5cGUgbWFzay4KKyAqLworQzJFTlVNKEMyQ29uZmlnOjpwaWN0dXJlX3R5cGVfdCwgdWludDMyX3QsCisgICAgU1lOQ19GUkFNRSA9ICgxIDw8IDApLCAgLy8vPCBzeW5jIGZyYW1lLCBlLmcuIElEUgorICAgIElfRlJBTUUgICAgPSAoMSA8PCAxKSwgIC8vLzwgaW50cmEgZnJhbWUgdGhhdCBpcyBjb21wbGV0ZWx5IGVuY29kZWQKKyAgICBQX0ZSQU1FICAgID0gKDEgPDwgMiksICAvLy88IGludGVyIHByZWRpY3RlZCBmcmFtZSBmcm9tIHByZXZpb3VzIGZyYW1lcworICAgIEJfRlJBTUUgICAgPSAoMSA8PCAzKSwgIC8vLzwgYmFja3dhcmQgcHJlZGljdGVkIChvdXQtb2Ytb3JkZXIpIGZyYW1lCispCisKK3R5cGVkZWYgQzJDb25maWc6OnBpY3R1cmVfdHlwZV90IEMyUGljdHVyZVR5cGVNYXNrOyAvLyBkZXByZWNhdGVkCitjb25zdGV4cHIgQzJDb25maWc6OnBpY3R1cmVfdHlwZV90IEMyUGljdHVyZVR5cGVLZXlGcmFtZSA9IEMyQ29uZmlnOjpTWU5DX0ZSQU1FOyAvLyBkZXByZWNhdGVkCisKKy8qKgorICogQWxsb3dlZCBwaWN0dXJlIHR5cGVzLgorICovCit0eXBlZGVmIEMyU3RyZWFtUGFyYW08QzJUdW5pbmcsIEMyU2ltcGxlVmFsdWVTdHJ1Y3Q8QzJFYXN5RW51bTxDMkNvbmZpZzo6cGljdHVyZV90eXBlX3Q+PiwKKyAgICAgICAgICAgICAgICBrUGFyYW1JbmRleFBpY3R1cmVUeXBlTWFzaz4KKyAgICAgICAgQzJTdHJlYW1QaWN0dXJlVHlwZU1hc2tUdW5pbmc7Citjb25zdGV4cHIgY2hhciBDMl9QQVJBTUtFWV9QSUNUVVJFX1RZUEVfTUFTS1tdID0gImNvZGluZy5waWN0dXJlLXR5cGUtbWFzayI7CisKKy8qKgorICogUmVzdWx0aW5nIHBpY3R1cmUgdHlwZQorICovCit0eXBlZGVmIEMyU3RyZWFtUGFyYW08QzJJbmZvLCBDMlNpbXBsZVZhbHVlU3RydWN0PEMyRWFzeUVudW08QzJDb25maWc6OnBpY3R1cmVfdHlwZV90Pj4sCisgICAgICAgICAgICAgICAga1BhcmFtSW5kZXhQaWN0dXJlVHlwZT4KKyAgICAgICAgQzJTdHJlYW1QaWN0dXJlVHlwZUluZm87Cit0eXBlZGVmIEMyU3RyZWFtUGljdHVyZVR5cGVJbmZvIEMyU3RyZWFtUGljdHVyZVR5cGVNYXNrSW5mbzsKK2NvbnN0ZXhwciBjaGFyIEMyX1BBUkFNS0VZX1BJQ1RVUkVfVFlQRVtdID0gImNvZGVkLnBpY3R1cmUtdHlwZSI7CisKKy8qKgorICogR09QIHNwZWNpZmljYXRpb24uCisgKgorICogR09QIGlzIHNwZWNpZmllZCBpbiBsYXllcnMgYmV0d2VlbiBzeW5jIGZyYW1lcywgYnkgc3BlY2lmeWluZyB0aGUgbnVtYmVyIG9mIHNwZWNpZmljIHR5cGUgb2YKKyAqIGZyYW1lcyBiZXR3ZWVuIHRoZSBwcmV2aW91cyB0eXBlIChzdGFydGluZyB3aXRoIHN5bmMgZnJhbWVzIGZvciB0aGUgZmlyc3QgbGF5ZXIpOgorICoKKyAqIEUuZy4KKyAqICAgICAgLSA0IEkgZnJhbWVzIGJldHdlZW4gZWFjaCBzeW5jIGZyYW1lCisgKiAgICAgIC0gMiBQIGZyYW1lcyBiZXR3ZWVuIGVhY2ggSSBmcmFtZQorICogICAgICAtIDEgQiBmcmFtZSBiZXR3ZWVuIGVhY2ggUCBmcmFtZQorICoKKyAqICAgICAgWyB7IEksIDQgfSwgeyBQLCAyIH0sIHsgQiwgMSB9IF0gPT0+IChTeW5jKUJQQlBCIElCUEJQQiBJQlBCUEIgSUJQQlBCIElCUEJQQiAoU3luYylCUEJQQgorICoKKyAqIEZvciBpbmZpbml0ZSBHT1AsIEkgbGF5ZXIgY2FuIGJlIG9taXR0ZWQgKGFzIHRoZSBmaXJzdCBmcmFtZSBpcyBhbHdheXMgYSBzeW5jIGZyYW1lLik6CisgKgorICogICAgICBbIHsgUCwgTUFYX1VJTlQgfSBdICAgPT0+IChTeW5jKVBQUFBQUFBQUFBQUFBQUFBQUC4uLgorICoKKyAqIFN5bmMgZnJhbWVzIGNhbiBhbHNvIGJlIHJlcXVlc3RlZCBvbiBkZW1hbmQsIGFuZCBhcyBhIHRpbWUtYmFzZWQgaW50ZXJ2YWwuIEZvciB0aW1lLWJhc2VkCisgKiBpbnRlcnZhbCwgaWYgdGhlcmUgaGFzbid0IGJlZW4gYSBzeW5jIGZyYW1lIGluIGF0IGxlYXN0IHRoZSBnaXZlbiB0aW1lLCB0aGUgbmV4dCBJIGZyYW1lIHNoYWxsCisgKiBiZSBlbmNvZGVkIGFzIGEgc3luYyBmcmFtZS4gIEZvciBzeW5jIHJlcXVlc3QsIHRoZSBuZXh0IEkgZnJhbWUgc2hhbGwgYmUgZW5jb2RlZCBhcyBhIHN5bmMgZnJhbWUuCisgKgorICogVGVtcG9yYWwgbGF5ZXJpbmcgd2lsbCBkZXRlcm1pbmUgR09QIHN0cnVjdHVyZSBvdGhlciB0aGFuIHRoZSBJIGZyYW1lIGNvdW50IGJldHdlZW4gc3luYworICogZnJhbWVzLgorICovCitzdHJ1Y3QgQzJHb3BMYXllclN0cnVjdCB7CisgICAgQzJHb3BMYXllclN0cnVjdChDMkNvbmZpZzo6cGljdHVyZV90eXBlX3QgdHlwZSwgdWludDMyX3QgY291bnRfKQorICAgICAgICA6IHR5cGVfKHR5cGUpLCBjb3VudChjb3VudF8pIHsgfQorCisgICAgQzJDb25maWc6OnBpY3R1cmVfdHlwZV90IHR5cGVfOworICAgIHVpbnQzMl90IGNvdW50OworCisgICAgREVGSU5FX0FORF9ERVNDUklCRV9DMlNUUlVDVChHb3BMYXllcikKKyAgICBDMkZJRUxEKHR5cGVfLCAidHlwZSIpCisgICAgQzJGSUVMRChjb3VudCwgImNvdW50IikKK307CisKK3R5cGVkZWYgQzJTdHJlYW1QYXJhbTxDMlR1bmluZywgQzJTaW1wbGVBcnJheVN0cnVjdDxDMkdvcExheWVyU3RydWN0Piwga1BhcmFtSW5kZXhHb3A+CisgICAgICAgIEMyU3RyZWFtR29wVHVuaW5nOworY29uc3RleHByIGNoYXIgQzJfUEFSQU1LRVlfR09QW10gPSAiY29kaW5nLmdvcCI7CisKKy8qKgorICogU3luYyBmcmFtZSBjYW4gYmUgcmVxdWVzdGVkIG9uIGRlbWFuZCBieSB0aGUgY2xpZW50LgorICoKKyAqIElmIHRydWUsIHRoZSBuZXh0IEkgZnJhbWUgc2hhbGwgYmUgZW5jb2RlZCBhcyBhIHN5bmMgZnJhbWUuIFRoaXMgY29uZmlnIGNhbiBiZSBwYXNzZWQKKyAqIHN5bmNocm9ub3VzbHkgd2l0aCB0aGUgd29yaywgb3IgZGlyZWN0bHkgdG8gdGhlIGNvbXBvbmVudCAtIGxlYWRpbmcgdG8gZGlmZmVyZW50IHJlc3VsdC4KKyAqIElmIGl0IGlzIHBhc3NlZCB3aXRoIHdvcmssIGl0IHNoYWxsIHRha2UgZWZmZWN0IHdoZW4gdGhhdCB3b3JrIGl0ZW0gaXMgYmVpbmcgcHJvY2Vzc2VkIChzbworICogdGhlIGZpcnN0IEkgZnJhbWUgYXQgb3IgYWZ0ZXIgdGhhdCB3b3JrIGl0ZW0gc2hhbGwgYmUgYSBzeW5jIGZyYW1lKS4KKyAqLwordHlwZWRlZiBDMlN0cmVhbVBhcmFtPEMyVHVuaW5nLCBDMkVhc3lCb29sVmFsdWUsIGtQYXJhbUluZGV4UmVxdWVzdFN5bmNGcmFtZT4KKyAgICAgICAgQzJTdHJlYW1SZXF1ZXN0U3luY0ZyYW1lVHVuaW5nOworY29uc3RleHByIGNoYXIgQzJfUEFSQU1LRVlfUkVRVUVTVF9TWU5DX0ZSQU1FW10gPSAiY29kaW5nLnJlcXVlc3Qtc3luYy1mcmFtZSI7CisKKy8qKgorICogU3luYyBmcmFtZSBpbnRlcnZhbCBpbiB0aW1lIGRvbWFpbiAodGltZXN0YW1wKS4KKyAqCisgKiBJZiB0aGVyZSBoYXNuJ3QgYmVlbiBhIHN5bmMgZnJhbWUgaW4gYXQgbGVhc3QgdGhpcyB2YWx1ZSwgdGhlIG5leHQgaW50cmEgZnJhbWUgc2hhbGwgYmUgZW5jb2RlZAorICogYXMgYSBzeW5jIGZyYW1lLiBUaGUgdmFsdWUgb2YgTUFYX0k2NCBvciBhIG5lZ2F0aXZlIHZhbHVlIG1lYW5zIG5vIHN5bmMgZnJhbWVzIGFmdGVyIHRoZSBmaXJzdAorICogZnJhbWUuIEEgdmFsdWUgb2YgMCBtZWFucyBhbGwgc3luYyBmcmFtZXMuCisgKi8KK3R5cGVkZWYgQzJTdHJlYW1QYXJhbTxDMlR1bmluZywgQzJJbnQ2NFZhbHVlLCBrUGFyYW1JbmRleFN5bmNGcmFtZUludGVydmFsPgorICAgICAgICBDMlN0cmVhbVN5bmNGcmFtZUludGVydmFsVHVuaW5nOworY29uc3RleHByIGNoYXIgQzJfUEFSQU1LRVlfU1lOQ19GUkFNRV9JTlRFUlZBTFtdID0gImNvZGluZy5zeW5jLWZyYW1lLWludGVydmFsIjsKKy8vIGRlcHJlY2F0ZWQKKyNkZWZpbmUgQzJfUEFSQU1LRVlfU1lOQ19GUkFNRV9QRVJJT0QgQzJfUEFSQU1LRVlfU1lOQ19GUkFNRV9JTlRFUlZBTAorCisvKioKKyAqIFRlbXBvcmFsIGxheWVyaW5nCisgKgorICogTGF5ZXIgaW5kZXggaXMgYSB2YWx1ZSBiZXR3ZWVuIDAgYW5kIGxheWVyIGNvdW50IC0gMS4gTGF5ZXJzIHdpdGggaGlnaGVyIGluZGV4IGhhdmUgaGlnaGVyCisgKiBmcmVxdWVuY3k6CisgKiAgICAgMAorICogICAxICAgMQorICogIDIgMiAyIDIKKyAqLwordHlwZWRlZiBDMlN0cmVhbVBhcmFtPEMySW5mbywgQzJVaW50MzJWYWx1ZSwga1BhcmFtSW5kZXhMYXllckluZGV4PiBDMlN0cmVhbUxheWVySW5kZXhJbmZvOworY29uc3RleHByIGNoYXIgQzJfUEFSQU1LRVlfTEFZRVJfSU5ERVhbXSA9ICJjb2RlZC5sYXllci1pbmRleCI7CisKK3R5cGVkZWYgQzJTdHJlYW1QYXJhbTxDMkluZm8sIEMyVWludDMyVmFsdWUsIGtQYXJhbUluZGV4TGF5ZXJDb3VudD4gQzJTdHJlYW1MYXllckNvdW50SW5mbzsKK2NvbnN0ZXhwciBjaGFyIEMyX1BBUkFNS0VZX0xBWUVSX0NPVU5UW10gPSAiY29kZWQubGF5ZXItY291bnQiOworCitzdHJ1Y3QgQzJUZW1wb3JhbExheWVyaW5nU3RydWN0IHsKKyAgICBDMlRlbXBvcmFsTGF5ZXJpbmdTdHJ1Y3QoKQorICAgICAgICA6IGxheWVyQ291bnQoMCksIGJMYXllckNvdW50KDApIHsgfQorCisgICAgQzJUZW1wb3JhbExheWVyaW5nU3RydWN0KHNpemVfdCAvKiBmbGV4Q291bnQgKi8sIHVpbnQzMl90IGxheWVyQ291bnRfLCB1aW50MzJfdCBiTGF5ZXJDb3VudF8pCisgICAgICAgIDogbGF5ZXJDb3VudChsYXllckNvdW50XyksIGJMYXllckNvdW50KGMyX21pbihsYXllckNvdW50XywgYkxheWVyQ291bnRfKSkgeyB9CisKKyAgICBDMlRlbXBvcmFsTGF5ZXJpbmdTdHJ1Y3Qoc2l6ZV90IGZsZXhDb3VudCwgdWludDMyX3QgbGF5ZXJDb3VudF8sIHVpbnQzMl90IGJMYXllckNvdW50XywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RkOjppbml0aWFsaXplcl9saXN0PGZsb2F0PiByYXRpb3MpCisgICAgICAgIDogbGF5ZXJDb3VudChsYXllckNvdW50XyksIGJMYXllckNvdW50KGMyX21pbihsYXllckNvdW50XywgYkxheWVyQ291bnRfKSkgeworICAgICAgICBzaXplX3QgaXggPSAwOworICAgICAgICBmb3IgKGZsb2F0IHJhdGlvIDogcmF0aW9zKSB7CisgICAgICAgICAgICBpZiAoaXggPT0gZmxleENvdW50KSB7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBiaXRyYXRlUmF0aW9zW2l4KytdID0gcmF0aW87CisgICAgICAgIH0KKyAgICB9CisKKyAgICB1aW50MzJfdCBsYXllckNvdW50OyAgICAgLy8vPCB0b3RhbCBudW1iZXIgb2YgbGF5ZXJzICgwIG1lYW5zIG5vIHRlbXBvcmFsIGxheWVyaW5nKQorICAgIHVpbnQzMl90IGJMYXllckNvdW50OyAgICAvLy88IHRvdGFsIG51bWJlciBvZiBiaWRpcmVjdGlvbmFsIGxheWVycyAoPD0gbnVtIGxheWVycykKKyAgICAvKioKKyAgICAgKiBCaXRyYXRlIGJ1ZGdldHMgZm9yIGVhY2ggbGF5ZXIgYW5kIHRoZSBsYXllcnMgYmVsb3csIGdpdmVuIGFzIGEgcmF0aW8gb2YgdGhlIHRvdGFsCisgICAgICogc3RyZWFtIGJpdHJhdGUuIFRoaXMgY2FuIGJlIG9taXR0ZWQgb3IgcGFydGlhbGx5IHNwZWNpZmlmZWQgYnkgdGhlIGNsaWVudCB3aGlsZSBjb25maWd1cmluZywKKyAgICAgKiBpbiB3aGljaCBjYXNlIHRoZSBjb21wb25lbnQgc2hhbGwgZmlsbCBpbiBhcHByb3ByaWF0ZSB2YWx1ZXMgZm9yIHRoZSBtaXNzaW5nIGxheWVycy4KKyAgICAgKiBUaGlzIG11c3QgYmUgcHJvdmlkZWQgYnkgdGhlIGNvbXBvbmVudCB3aGVuIHF1ZXJpZWQgZm9yIGF0IGxlYXN0IGxheWVyIGNvdW50IC0gMSAoYXMgdGhlCisgICAgICogbGFzdCBsYXllcidzIGJ1ZGdldCBpcyBhbHdheXMgMS4wKS4KKyAgICAgKi8KKyAgICBmbG9hdCBiaXRyYXRlUmF0aW9zW107ICAgLy8vPCAxLjAtYmFzZWQKKworICAgIERFRklORV9BTkRfREVTQ1JJQkVfRkxFWF9DMlNUUlVDVChUZW1wb3JhbExheWVyaW5nLCBiaXRyYXRlUmF0aW9zKQorICAgIEMyRklFTEQobGF5ZXJDb3VudCwgImxheWVyLWNvdW50IikKKyAgICBDMkZJRUxEKGJMYXllckNvdW50LCAiYi1sYXllci1jb3VudCIpCisgICAgQzJGSUVMRChiaXRyYXRlUmF0aW9zLCAiYml0cmF0ZS1yYXRpb3MiKQorfTsKKwordHlwZWRlZiBDMlN0cmVhbVBhcmFtPEMyVHVuaW5nLCBDMlRlbXBvcmFsTGF5ZXJpbmdTdHJ1Y3QsIGtQYXJhbUluZGV4VGVtcG9yYWxMYXllcmluZz4KKyAgICAgICAgQzJTdHJlYW1UZW1wb3JhbExheWVyaW5nVHVuaW5nOworY29uc3RleHByIGNoYXIgQzJfUEFSQU1LRVlfVEVNUE9SQUxfTEFZRVJJTkdbXSA9ICJjb2RpbmcudGVtcG9yYWwtbGF5ZXJpbmciOworCisvKioKKyAqIEludHJhLXJlZnJlc2guCisgKi8KKworQzJFTlVNKEMyQ29uZmlnOjppbnRyYV9yZWZyZXNoX21vZGVfdCwgdWludDMyX3QsCisgICAgSU5UUkFfUkVGUkVTSF9ESVNBQkxFRCwgICAgIC8vLzwgbm8gaW50cmEgcmVmcmVzaAorICAgIElOVFJBX1JFRlJFU0hfQVJCSVRSQVJZLCAgICAvLy88IGFyYml0cmFyeSwgdW5zcGVjaWZpZWQKKykKKworc3RydWN0IEMySW50cmFSZWZyZXNoU3RydWN0IHsKKyAgICBDMkludHJhUmVmcmVzaFN0cnVjdCgpCisgICAgICAgIDogbW9kZShDMkNvbmZpZzo6SU5UUkFfUkVGUkVTSF9ESVNBQkxFRCksIHBlcmlvZCgwLikgeyB9CisKKyAgICBDMkludHJhUmVmcmVzaFN0cnVjdChDMkNvbmZpZzo6aW50cmFfcmVmcmVzaF9tb2RlX3QgbW9kZV8sIGZsb2F0IHBlcmlvZF8pCisgICAgICAgIDogbW9kZShtb2RlXyksIHBlcmlvZChwZXJpb2RfKSB7IH0KKworICAgIEMyQ29uZmlnOjppbnRyYV9yZWZyZXNoX21vZGVfdCBtb2RlOyAvLy88IHJlZnJlc2ggbW9kZQorICAgIGZsb2F0IHBlcmlvZDsgICAgICAgICAvLy88IGludHJhIHJlZnJlc2ggcGVyaW9kIGluIGZyYW1lcyAobXVzdCBiZSA+PSAxKSwgMCBtZWFucyBkaXNhYmxlZAorCisgICAgREVGSU5FX0FORF9ERVNDUklCRV9DMlNUUlVDVChJbnRyYVJlZnJlc2gpCisgICAgQzJGSUVMRChtb2RlLCAibW9kZSIpCisgICAgQzJGSUVMRChwZXJpb2QsICJwZXJpb2QiKQorfTsKKwordHlwZWRlZiBDMlN0cmVhbVBhcmFtPEMyVHVuaW5nLCBDMkludHJhUmVmcmVzaFN0cnVjdCwga1BhcmFtSW5kZXhJbnRyYVJlZnJlc2g+CisgICAgICAgIEMyU3RyZWFtSW50cmFSZWZyZXNoVHVuaW5nOworY29uc3RleHByIGNoYXIgQzJfUEFSQU1LRVlfSU5UUkFfUkVGUkVTSFtdID0gImNvZGluZy5pbnRyYS1yZWZyZXNoIjsKKworLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gSU1BR0UgQ09NUE9ORU5UUyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLworCisvKioKKyAqIFRpbGUgbGF5b3V0LgorICoKKyAqIFRoaXMgZGVzY3JpYmVkIGhvdyB0aGUgaW1hZ2UgaXMgZGVjb21wb3NlZCBpbnRvIHRpbGVzLgorICovCitDMkVOVU0oQzJDb25maWc6OnNjYW5fb3JkZXJfdCwgdWludDMyX3QsCisgICAgU0NBTl9MRUZUX1RPX1JJR0hUX1RIRU5fRE9XTgorKQorCitzdHJ1Y3QgQzJUaWxlTGF5b3V0U3RydWN0IHsKKyAgICBDMlBpY3R1cmVTaXplU3RydWN0IHRpbGU7ICAgICAgIC8vLzwgdGlsZSBzaXplCisgICAgdWludDMyX3QgY29sdW1uQ291bnQ7ICAgICAgICAgICAvLy88IG51bWJlciBvZiB0aWxlcyBob3Jpem9udGFsbHkKKyAgICB1aW50MzJfdCByb3dDb3VudDsgICAgICAgICAgICAgIC8vLzwgbnVtYmVyIG9mIHRpbGVzIHZlcnRpY2FsbHkKKyAgICBDMkNvbmZpZzo6c2Nhbl9vcmRlcl90IG9yZGVyOyAgIC8vLzwgdGlsZSBvcmRlcgorCisgICAgREVGSU5FX0FORF9ERVNDUklCRV9DMlNUUlVDVChUaWxlTGF5b3V0KQorICAgIEMyRklFTEQodGlsZSwgInRpbGUiKQorICAgIEMyRklFTEQoY29sdW1uQ291bnQsICJjb2x1bW5zIikKKyAgICBDMkZJRUxEKHJvd0NvdW50LCAicm93cyIpCisgICAgQzJGSUVMRChvcmRlciwgIm9yZGVyIikKK307CisKK3R5cGVkZWYgQzJTdHJlYW1QYXJhbTxDMkluZm8sIEMyVGlsZUxheW91dFN0cnVjdCwga1BhcmFtSW5kZXhUaWxlTGF5b3V0PiBDMlN0cmVhbVRpbGVMYXlvdXRJbmZvOworY29uc3RleHByIGNoYXIgQzJfUEFSQU1LRVlfVElMRV9MQVlPVVRbXSA9ICJjb2RlZC50aWxlLWxheW91dCI7CisKKy8qKgorICogVGlsZSBoYW5kbGluZy4KKyAqCisgKiBXaGV0aGVyIHRvIGNvbmNhdGVuYXRlIHRpbGVzIG9yIG91dHB1dCB0aGVtIGVhY2guCisgKi8KK0MyRU5VTShDMkNvbmZpZzo6dGlsaW5nX21vZGVfdCwgdWludDMyX3QsCisgICAgVElMSU5HX1NFUEFSQVRFLCAgICAvLy88IG91dHB1dCBlYWNoIHRpbGUgaW4gYSBzZXBhcmF0ZSBvbldvcmtEb25lCisgICAgVElMSU5HX0NPTkNBVEVOQVRFICAvLy88IG91dHB1dCBvbmUgd29yayBjb21wbGV0aW9uIHBlciBmcmFtZSAoY29uY2F0ZW5hdGUgdGlsZXMpCispCisKK3R5cGVkZWYgQzJTdHJlYW1QYXJhbTxDMlR1bmluZywgQzJUaWxlTGF5b3V0U3RydWN0LCBrUGFyYW1JbmRleFRpbGVIYW5kbGluZz4KKyAgICAgICAgQzJTdHJlYW1UaWxlSGFuZGxpbmdUdW5pbmc7Citjb25zdGV4cHIgY2hhciBDMl9QQVJBTUtFWV9USUxFX0hBTkRMSU5HW10gPSAiY29kaW5nLnRpbGUtaGFuZGxpbmciOworCisvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSBBVURJTyBDT01QT05FTlRTID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCisKKy8qKgorICogU2FtcGxlIHJhdGUKKyAqLwordHlwZWRlZiBDMlN0cmVhbVBhcmFtPEMySW5mbywgQzJVaW50MzJWYWx1ZSwga1BhcmFtSW5kZXhTYW1wbGVSYXRlPiBDMlN0cmVhbVNhbXBsZVJhdGVJbmZvOworY29uc3RleHByIGNoYXIgQzJfUEFSQU1LRVlfU0FNUExFX1JBVEVbXSA9ICJyYXcuc2FtcGxlLXJhdGUiOworY29uc3RleHByIGNoYXIgQzJfUEFSQU1LRVlfQ09ERURfU0FNUExFX1JBVEVbXSA9ICJjb2RlZC5zYW1wbGUtcmF0ZSI7CisvLyBkZXByZWNhdGVkCisjZGVmaW5lIEMyX05BTUVfU1RSRUFNX1NBTVBMRV9SQVRFX1NFVFRJTkcgQzJfUEFSQU1LRVlfU0FNUExFX1JBVEUKKworLyoqCisgKiBDaGFubmVsIGNvdW50LgorICovCit0eXBlZGVmIEMyU3RyZWFtUGFyYW08QzJJbmZvLCBDMlVpbnQzMlZhbHVlLCBrUGFyYW1JbmRleENoYW5uZWxDb3VudD4gQzJTdHJlYW1DaGFubmVsQ291bnRJbmZvOworY29uc3RleHByIGNoYXIgQzJfUEFSQU1LRVlfQ0hBTk5FTF9DT1VOVFtdID0gInJhdy5jaGFubmVsLWNvdW50IjsKK2NvbnN0ZXhwciBjaGFyIEMyX1BBUkFNS0VZX0NPREVEX0NIQU5ORUxfQ09VTlRbXSA9ICJjb2RlZC5jaGFubmVsLWNvdW50IjsKKy8vIGRlcHJlY2F0ZWQKKyNkZWZpbmUgQzJfTkFNRV9TVFJFQU1fQ0hBTk5FTF9DT1VOVF9TRVRUSU5HIEMyX1BBUkFNS0VZX0NIQU5ORUxfQ09VTlQKKworLyoqCisgKiBNYXggY2hhbm5lbCBjb3VudC4gVXNlZCB0byBsaW1pdCB0aGUgbnVtYmVyIG9mIGNvZGVkIG9yIGRlY29kZWQgY2hhbm5lbHMuCisgKi8KK3R5cGVkZWYgQzJTdHJlYW1QYXJhbTxDMkluZm8sIEMyVWludDMyVmFsdWUsIGtQYXJhbUluZGV4TWF4Q2hhbm5lbENvdW50PiBDMlN0cmVhbU1heENoYW5uZWxDb3VudEluZm87Citjb25zdGV4cHIgY2hhciBDMl9QQVJBTUtFWV9NQVhfQ0hBTk5FTF9DT1VOVFtdID0gInJhdy5tYXgtY2hhbm5lbC1jb3VudCI7Citjb25zdGV4cHIgY2hhciBDMl9QQVJBTUtFWV9NQVhfQ09ERURfQ0hBTk5FTF9DT1VOVFtdID0gImNvZGVkLm1heC1jaGFubmVsLWNvdW50IjsKKworLyoqCisgKiBBdWRpbyBzYW1wbGUgZm9ybWF0IChQQ00gZW5jb2RpbmcpCisgKi8KK0MyRU5VTShDMkNvbmZpZzo6cGNtX2VuY29kaW5nX3QsIHVpbnQzMl90LAorICAgIFBDTV8xNiwKKyAgICBQQ01fOCwKKyAgICBQQ01fRkxPQVQKKykKKwordHlwZWRlZiBDMlN0cmVhbVBhcmFtPEMySW5mbywgQzJTaW1wbGVWYWx1ZVN0cnVjdDxDMkNvbmZpZzo6cGNtX2VuY29kaW5nX3Q+LCBrUGFyYW1JbmRleFBjbUVuY29kaW5nPgorICAgICAgICBDMlN0cmVhbVBjbUVuY29kaW5nSW5mbzsKK2NvbnN0ZXhwciBjaGFyIEMyX1BBUkFNS0VZX1BDTV9FTkNPRElOR1tdID0gInJhdy5wY20tZW5jb2RpbmciOworY29uc3RleHByIGNoYXIgQzJfUEFSQU1LRVlfQ09ERURfUENNX0VOQ09ESU5HW10gPSAiY29kZWQucGNtLWVuY29kaW5nIjsKKworLyoqCisgKiBBQUMgU0JSIE1vZGUuIFVzZWQgZHVyaW5nIGVuY29kaW5nLgorICovCitDMkVOVU0oQzJDb25maWc6OmFhY19zYnJfbW9kZV90LCB1aW50MzJfdCwKKyAgICBBQUNfU0JSX09GRiwKKyAgICBBQUNfU0JSX1NJTkdMRV9SQVRFLAorICAgIEFBQ19TQlJfRFVBTF9SQVRFLAorICAgIEFBQ19TQlJfQVVUTyAvLy88IGxldCB0aGUgY29kZWMgZGVjaWRlCispCisKK3R5cGVkZWYgQzJTdHJlYW1QYXJhbTxDMkluZm8sIEMyU2ltcGxlVmFsdWVTdHJ1Y3Q8QzJDb25maWc6OmFhY19zYnJfbW9kZV90Piwga1BhcmFtSW5kZXhBYWNTYnJNb2RlPgorICAgICAgICBDMlN0cmVhbUFhY1Nick1vZGVUdW5pbmc7Citjb25zdGV4cHIgY2hhciBDMl9QQVJBTUtFWV9BQUNfU0JSX01PREVbXSA9ICJjb2RpbmcuYWFjLXNici1tb2RlIjsKKworLyoqCisgKiBEUkMgQ29tcHJlc3Npb24uIFVzZWQgZHVyaW5nIGRlY29kaW5nLgorICovCitDMkVOVU0oQzJDb25maWc6OmRyY19jb21wcmVzc2lvbl9tb2RlX3QsIGludDMyX3QsCisgICAgRFJDX0NPTVBSRVNTSU9OX09ETV9ERUZBVUxULCAvLy88IG9kbSdzIGRlZmF1bHQKKyAgICBEUkNfQ09NUFJFU1NJT05fTk9ORSwKKyAgICBEUkNfQ09NUFJFU1NJT05fTElHSFQsCisgICAgRFJDX0NPTVBSRVNTSU9OX0hFQVZZIC8vLzwKKykKKwordHlwZWRlZiBDMlN0cmVhbVBhcmFtPEMySW5mbywgQzJTaW1wbGVWYWx1ZVN0cnVjdDxDMkNvbmZpZzo6ZHJjX2NvbXByZXNzaW9uX21vZGVfdD4sCisgICAgICAgICAgICAgICAga1BhcmFtSW5kZXhEcmNDb21wcmVzc2lvbj4KKyAgICAgICAgQzJTdHJlYW1EcmNDb21wcmVzc2lvbk1vZGVUdW5pbmc7Citjb25zdGV4cHIgY2hhciBDMl9QQVJBTUtFWV9EUkNfQ09NUFJFU1NJT05fTU9ERVtdID0gImNvZGluZy5kcmMuY29tcHJlc3Npb24tbW9kZSI7CisKKy8qKgorICogRFJDIHRhcmdldCByZWZlcmVuY2UgbGV2ZWwgaW4gZEJGUy4gVXNlZCBkdXJpbmcgZGVjb2RpbmcuCisgKi8KK3R5cGVkZWYgQzJTdHJlYW1QYXJhbTxDMkluZm8sIEMyRmxvYXRWYWx1ZSwga1BhcmFtSW5kZXhEcmNUYXJnZXRSZWZlcmVuY2VMZXZlbD4KKyAgICAgICAgQzJTdHJlYW1EcmNUYXJnZXRSZWZlcmVuY2VMZXZlbFR1bmluZzsKK2NvbnN0ZXhwciBjaGFyIEMyX1BBUkFNS0VZX0RSQ19UQVJHRVRfUkVGRVJFTkNFX0xFVkVMW10gPSAiY29kaW5nLmRyYy5yZWZlcmVuY2UtbGV2ZWwiOworCisvKioKKyAqIERSQyB0YXJnZXQgcmVmZXJlbmNlIGxldmVsIGluIGRCRlMuIFVzZWQgZHVyaW5nIGRlY29kaW5nLgorICovCit0eXBlZGVmIEMyU3RyZWFtUGFyYW08QzJJbmZvLCBDMkZsb2F0VmFsdWUsIGtQYXJhbUluZGV4RHJjRW5jb2RlZFRhcmdldExldmVsPgorICAgICAgICBDMlN0cmVhbURyY0VuY29kZWRUYXJnZXRMZXZlbFR1bmluZzsKK2NvbnN0ZXhwciBjaGFyIEMyX1BBUkFNS0VZX0RSQ19FTkNPREVEX1RBUkdFVF9MRVZFTFtdID0gImNvZGluZy5kcmMuZW5jb2RlZC1sZXZlbCI7CisKKy8qKgorICogRFJDIHRhcmdldCByZWZlcmVuY2UgbGV2ZWwgaW4gZEJGUy4gVXNlZCBkdXJpbmcgZGVjb2RpbmcuCisgKi8KK3R5cGVkZWYgQzJTdHJlYW1QYXJhbTxDMkluZm8sIEMyRmxvYXRWYWx1ZSwga1BhcmFtSW5kZXhEcmNCb29zdEZhY3Rvcj4KKyAgICAgICAgQzJTdHJlYW1EcmNCb29zdEZhY3RvclR1bmluZzsKK2NvbnN0ZXhwciBjaGFyIEMyX1BBUkFNS0VZX0RSQ19CT09TVF9GQUNUT1JbXSA9ICJjb2RpbmcuZHJjLmJvb3N0LWZhY3RvciI7CisKKy8qKgorICogRFJDIHRhcmdldCByZWZlcmVuY2UgbGV2ZWwgaW4gZEJGUy4gVXNlZCBkdXJpbmcgZGVjb2RpbmcuCisgKi8KK3R5cGVkZWYgQzJTdHJlYW1QYXJhbTxDMkluZm8sIEMyRmxvYXRWYWx1ZSwga1BhcmFtSW5kZXhEcmNBdHRlbnVhdGlvbkZhY3Rvcj4KKyAgICAgICAgQzJTdHJlYW1EcmNBdHRlbnVhdGlvbkZhY3RvclR1bmluZzsKK2NvbnN0ZXhwciBjaGFyIEMyX1BBUkFNS0VZX0RSQ19BVFRFTlVBVElPTl9GQUNUT1JbXSA9ICJjb2RpbmcuZHJjLmF0dGVudWF0aW9uLWZhY3RvciI7CisKKy8qKgorICogRFJDIEVmZmVjdCBUeXBlIChzZWUgSVNPIDIzMDAzLTQpIFVuaWZvcm0gRHluYW1pYyBSYW5nZSBDb250cm9sLiBVc2VkIGR1cmluZyBkZWNvZGluZy4KKyAqLworQzJFTlVNKEMyQ29uZmlnOjpkcmNfZWZmZWN0X3R5cGVfdCwgaW50MzJfdCwKKyAgICBEUkNfRUZGRUNUX09ETV9ERUZBVUxUID0gLTIsIC8vLzwgb2RtJ3MgZGVmYXVsdAorICAgIERSQ19FRkZFQ1RfT0ZGID0gLTEsICAgIC8vLzwgbm8gRFJDCisgICAgRFJDX0VGRkVDVF9OT05FID0gMCwgICAgLy8vPCBubyBEUkMgZXhjZXB0IHRvIHByZXZlbnQgY2xpcHBpbmcKKyAgICBEUkNfRUZGRUNUX0xBVEVfTklHSFQsCisgICAgRFJDX0VGRkVDVF9OT0lTWV9FTlZJUk9OTUVOVCwKKyAgICBEUkNfRUZGRUNUX0xJTUlURURfUExBWUJBQ0tfUkFOR0UsCisgICAgRFJDX0VGRkVDVF9MT1dfUExBWUJBQ0tfTEVWRUwsCisgICAgRFJDX0VGRkVDVF9ESUFMT0dfRU5IQU5DRU1FTlQsCisgICAgRFJDX0VGRkVDVF9HRU5FUkFMX0NPTVBSRVNTSU9OCispCisKK3R5cGVkZWYgQzJTdHJlYW1QYXJhbTxDMkluZm8sIEMyU2ltcGxlVmFsdWVTdHJ1Y3Q8QzJDb25maWc6OmRyY19lZmZlY3RfdHlwZV90PiwKKyAgICAgICAgICAgICAgICBrUGFyYW1JbmRleERyY0VmZmVjdFR5cGU+CisgICAgICAgIEMyU3RyZWFtRHJjRWZmZWN0VHlwZVR1bmluZzsKK2NvbnN0ZXhwciBjaGFyIEMyX1BBUkFNS0VZX0RSQ19FRkZFQ1RfVFlQRVtdID0gImNvZGluZy5kcmMuZWZmZWN0LXR5cGUiOworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gQUFDIGNvbXBvbmVudHMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKKy8qKgorICogQUFDIHN0cmVhbSBmb3JtYXQKKyAqLworQzJFTlVNKEMyQ29uZmlnOjphYWNfcGFja2FnaW5nX3QsIHVpbnQzMl90LAorICAgIEFBQ19QQUNLQUdJTkdfUkFXLAorICAgIEFBQ19QQUNLQUdJTkdfQURUUworKQorCit0eXBlZGVmIEMyQ29uZmlnOjphYWNfcGFja2FnaW5nX3QgQzJBYWNTdHJlYW1Gb3JtYXRLaW5kOyAvLyBkZXByZWNhdGVkCisvLyBkZXByZWNhdGVkCitjb25zdGV4cHIgQzJDb25maWc6OmFhY19wYWNrYWdpbmdfdCBDMkFhY1N0cmVhbUZvcm1hdFJhdyA9IEMyQ29uZmlnOjpBQUNfUEFDS0FHSU5HX1JBVzsKK2NvbnN0ZXhwciBDMkNvbmZpZzo6YWFjX3BhY2thZ2luZ190IEMyQWFjU3RyZWFtRm9ybWF0QWR0cyA9IEMyQ29uZmlnOjpBQUNfUEFDS0FHSU5HX0FEVFM7CisKK3R5cGVkZWYgQzJTdHJlYW1QYXJhbTxDMkluZm8sIEMyU2ltcGxlVmFsdWVTdHJ1Y3Q8QzJFYXN5RW51bTxDMkNvbmZpZzo6YWFjX3BhY2thZ2luZ190Pj4sCisgICAgICAgIGtQYXJhbUluZGV4QWFjUGFja2FnaW5nPiBDMlN0cmVhbUFhY1BhY2thZ2luZ0luZm87Cit0eXBlZGVmIEMyU3RyZWFtQWFjUGFja2FnaW5nSW5mbyBDMlN0cmVhbUFhY0Zvcm1hdEluZm87Citjb25zdGV4cHIgY2hhciBDMl9QQVJBTUtFWV9BQUNfUEFDS0FHSU5HW10gPSAiY29kZWQuYWFjLXBhY2thZ2luZyI7CisjZGVmaW5lIEMyX05BTUVfU1RSRUFNX0FBQ19GT1JNQVRfU0VUVElORyBDMl9QQVJBTUtFWV9BQUNfUEFDS0FHSU5HCisKKy8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09IFBMQVRGT1JNLURFRklORUQgUEFSQU1FVEVSUyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLworCisvKioKKyAqIFBsYXRmb3JtIGxldmVsIGFuZCBmZWF0dXJlcy4KKyAqLworZW51bSBDMkNvbmZpZzo6cGxhdGZvcm1fbGV2ZWxfdCA6IHVpbnQzMl90IHsKKyAgICBQTEFURk9STV9QLCAgIC8vLzwgc3VwcG9ydCBmb3IgQW5kcm9pZCA5LjAgZmVhdHVyZSBzZXQKK307CisKKy8vIHJlYWQtb25seQordHlwZWRlZiBDMkdsb2JhbFBhcmFtPEMyU2V0dGluZywgQzJTaW1wbGVWYWx1ZVN0cnVjdDxDMkNvbmZpZzo6cGxhdGZvcm1fbGV2ZWxfdD4sCisgICAgICAgICAgICAgICAga1BhcmFtSW5kZXhQbGF0Zm9ybUxldmVsPgorICAgICAgICBDMlBsYXRmb3JtTGV2ZWxTZXR0aW5nOworY29uc3RleHByIGNoYXIgQzJfUEFSQU1LRVlfUExBVEZPUk1fTEVWRUxbXSA9ICJhcGkucGxhdGZvcm0tbGV2ZWwiOworCitlbnVtIEMyQ29uZmlnOjpwbGF0Zm9ybV9mZWF0dXJlX3QgOiB1aW50NjRfdCB7CisgICAgLy8gbm8gcGxhdGZvcm0tc3BlY2lmaWMgZmVhdHVyZXMgaGF2ZSBiZWVuIGRlZmluZWQKK307CisKKy8vIHJlYWQtb25seQordHlwZWRlZiBDMkdsb2JhbFBhcmFtPEMyU2V0dGluZywgQzJTaW1wbGVWYWx1ZVN0cnVjdDxDMkNvbmZpZzo6cGxhdGZvcm1fZmVhdHVyZV90PiwKKyAgICAgICAgICAgICAgICBrUGFyYW1JbmRleFBsYXRmb3JtRmVhdHVyZXM+CisgICAgICAgIEMyUGxhdGZvcm1GZWF0dXJlc1NldHRpbmc7Citjb25zdGV4cHIgY2hhciBDMl9QQVJBTUtFWV9QTEFURk9STV9GRUFUVVJFU1tdID0gImFwaS5wbGF0Zm9ybS1mZWF0dXJlcyI7CisKKy8qKgorICogVGhpcyBzdHJ1Y3R1cmUgZGVzY3JpYmVzIHRoZSBwcmVmZXJyZWQgaW9uIGFsbG9jYXRpb24gcGFyYW1ldGVycyBmb3IgYSBnaXZlbiBtZW1vcnkgdXNhZ2UuCisgKi8KK3N0cnVjdCBDMlN0b3JlSW9uVXNhZ2VTdHJ1Y3QgeworICAgIGlubGluZSBDMlN0b3JlSW9uVXNhZ2VTdHJ1Y3QoKSB7CisgICAgICAgIG1lbXNldCh0aGlzLCAwLCBzaXplb2YoKnRoaXMpKTsKKyAgICB9CisKKyAgICBpbmxpbmUgQzJTdG9yZUlvblVzYWdlU3RydWN0KHVpbnQ2NF90IHVzYWdlXywgdWludDMyX3QgY2FwYWNpdHlfKQorICAgICAgICA6IHVzYWdlKHVzYWdlXyksIGNhcGFjaXR5KGNhcGFjaXR5XyksIGhlYXBNYXNrKDApLCBhbGxvY0ZsYWdzKDApLCBtaW5BbGlnbm1lbnQoMCkgeyB9CisKKyAgICB1aW50NjRfdCB1c2FnZTsgICAgICAgIC8vLzwgQzJNZW1vcnlVc2FnZQorICAgIHVpbnQzMl90IGNhcGFjaXR5OyAgICAgLy8vPCBjYXBhY2l0eQorICAgIGludDMyX3QgaGVhcE1hc2s7ICAgICAgLy8vPCBpb24gaGVhcE1hc2sKKyAgICBpbnQzMl90IGFsbG9jRmxhZ3M7ICAgIC8vLzwgaW9uIGFsbG9jYXRpb24gZmxhZ3MKKyAgICB1aW50MzJfdCBtaW5BbGlnbm1lbnQ7IC8vLzwgbWluaW11bSBhbGlnbm1lbnQKKworICAgIERFRklORV9BTkRfREVTQ1JJQkVfQzJTVFJVQ1QoU3RvcmVJb25Vc2FnZSkKKyAgICBDMkZJRUxEKHVzYWdlLCAidXNhZ2UiKQorICAgIEMyRklFTEQoY2FwYWNpdHksICJjYXBhY2l0eSIpCisgICAgQzJGSUVMRChoZWFwTWFzaywgImhlYXAtbWFzayIpCisgICAgQzJGSUVMRChhbGxvY0ZsYWdzLCAiYWxsb2MtZmxhZ3MiKQorICAgIEMyRklFTEQobWluQWxpZ25tZW50LCAibWluLWFsaWdubWVudCIpCit9OworCisvLyBzdG9yZSwgcHJpdmF0ZQordHlwZWRlZiBDMkdsb2JhbFBhcmFtPEMySW5mbywgQzJTdG9yZUlvblVzYWdlU3RydWN0LCBrUGFyYW1JbmRleFN0b3JlSW9uVXNhZ2U+CisgICAgICAgIEMyU3RvcmVJb25Vc2FnZUluZm87CisKKy8qKgorICogRmxleGlibGUgcGl4ZWwgZm9ybWF0IGRlc2NyaXB0b3JzCisgKi8KK3N0cnVjdCBDMkZsZXhpYmxlUGl4ZWxGb3JtYXREZXNjcmlwdG9yU3RydWN0IHsKKyAgICB1aW50MzJfdCBwaXhlbEZvcm1hdDsKKyAgICB1aW50MzJfdCBiaXREZXB0aDsKKyAgICBDMkNvbG9yOjpzdWJzYW1wbGluZ190IHN1YnNhbXBsaW5nOworICAgIEMyQ29sb3I6OnBsYW5lX2xheW91dF90IGxheW91dDsKKworICAgIERFRklORV9BTkRfREVTQ1JJQkVfQzJTVFJVQ1QoRmxleGlibGVQaXhlbEZvcm1hdERlc2NyaXB0b3IpCisgICAgQzJGSUVMRChwaXhlbEZvcm1hdCwgInBpeGVsLWZvcm1hdCIpCisgICAgQzJGSUVMRChiaXREZXB0aCwgImJpdC1kZXB0aCIpCisgICAgQzJGSUVMRChzdWJzYW1wbGluZywgInN1YnNhbXBsaW5nIikKKyAgICBDMkZJRUxEKGxheW91dCwgImxheW91dCIpCit9OworCisvKioKKyAqIFBsYW5lIGxheW91dCBvZiBmbGV4aWJsZSBwaXhlbCBmb3JtYXRzLgorICoKKyAqIGJwcDogYnl0ZXMgcGVyIGNvbG9yIGNvbXBvbmVudCwgZS5nLiAxIGZvciA4LWJpdCBmb3JtYXRzLCBhbmQgMiBmb3IgMTAtMTYtYml0IGZvcm1hdHMuCisgKi8KK0MyRU5VTShDMkNvbG9yOjpwbGFuZV9sYXlvdXRfdCwgdWludDMyX3QsCisgICAgICAgLyoqIFVua25vd24gbGF5b3V0ICovCisgICAgICAgVU5LTk9XTl9MQVlPVVQsCisKKyAgICAgICAvKiogUGxhbmFyIGxheW91dCB3aXRoIHJvd3Mgb2YgZWFjaCBwbGFuZSBwYWNrZWQgKGNvbEluYyA9IGJwcCkgKi8KKyAgICAgICBQTEFOQVJfUEFDS0VELAorCisgICAgICAgLyoqIFNlbWlwbGFuYXIgbGF5b3V0IHdpdGggcm93cyBvZiBlYWNoIHBsYW5lIHBhY2tlZCAoY29sSW5jX1kvQSA9IGJwcCAocGxhbmFyKSwKKyAgICAgICAgKiAgY29sSW5jX0NiL0NyID0gMipicHAgKGludGVybGVhdmVkKS4gVXNlZCBvbmx5IGZvciBZVVYoQSkgZm9ybWF0cy4gKi8KKyAgICAgICBTRU1JUExBTkFSX1BBQ0tFRCwKKworICAgICAgIC8qKiBJbnRlcmxlYXZlZCBwYWNrZWQuIGNvbEluYyA9IE4qYnBwIChOIGFyZSB0aGUgbnVtYmVyIG9mIGNvbG9yIGNvbXBvbmVudHMpICovCisgICAgICAgSU5URVJMRUFWRURfUEFDS0VELAorCisgICAgICAgLyoqIEludGVybGVhdmVkIGFsaWduZWQuIGNvbEluYyA9IHNtYWxsZXN0IHBvd2VyIG9mIDIgPj0gTipicHAgKE4gYXJlIHRoZSBudW1iZXIgb2YgY29sb3IKKyAgICAgICAgKiAgY29tcG9uZW50cykgKi8KKyAgICAgICBJTlRFUkxFQVZFRF9BTElHTkVECispCisKK3R5cGVkZWYgQzJHbG9iYWxQYXJhbTxDMkluZm8sIEMyU2ltcGxlQXJyYXlTdHJ1Y3Q8QzJGbGV4aWJsZVBpeGVsRm9ybWF0RGVzY3JpcHRvclN0cnVjdD4sCisgICAgICAgICAgICAgICAga1BhcmFtSW5kZXhGbGV4aWJsZVBpeGVsRm9ybWF0RGVzY3JpcHRvcnM+CisgICAgICAgIEMyU3RvcmVGbGV4aWJsZVBpeGVsRm9ybWF0RGVzY3JpcHRvcnNJbmZvOworCisvKioKKyAqIFRoaXMgc3RydWN0dXJlIGRlc2NyaWJlcyB0aGUgYW5kcm9pZCBkYXRhc3BhY2UgZm9yIGEgcmF3IHZpZGVvL2ltYWdlIGZyYW1lLgorICovCit0eXBlZGVmIEMyU3RyZWFtUGFyYW08QzJJbmZvLCBDMlVpbnQzMlZhbHVlLCBrUGFyYW1JbmRleERhdGFTcGFjZT4gQzJTdHJlYW1EYXRhU3BhY2VJbmZvOworY29uc3RleHByIGNoYXIgQzJfUEFSQU1LRVlfREFUQV9TUEFDRVtdID0gInJhdy5kYXRhLXNwYWNlIjsKKworLyoqCisgKiBUaGlzIHN0cnVjdHVyZSBkZXNjcmliZXMgdGhlIGFuZHJvaWQgc3VyZmFjZSBzY2FsaW5nIG1vZGUgZm9yIGEgcmF3IHZpZGVvL2ltYWdlIGZyYW1lLgorICovCit0eXBlZGVmIEMyU3RyZWFtUGFyYW08QzJJbmZvLCBDMlVpbnQzMlZhbHVlLCBrUGFyYW1JbmRleFN1cmZhY2VTY2FsaW5nPiBDMlN0cmVhbVN1cmZhY2VTY2FsaW5nSW5mbzsKK2NvbnN0ZXhwciBjaGFyIEMyX1BBUkFNS0VZX1NVUkZBQ0VfU0NBTElOR19NT0RFW10gPSAicmF3LnN1cmZhY2Utc2NhbGluZyI7CisKKy8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSBJTlBVVCBTVVJGQUNFID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLworCisvKioKKyAqIElucHV0IHN1cmZhY2UgRU9TCisgKi8KK3R5cGVkZWYgQzJHbG9iYWxQYXJhbTxDMlR1bmluZywgQzJFYXN5Qm9vbFZhbHVlLCBrUGFyYW1JbmRleElucHV0U3VyZmFjZUVvcz4KKyAgICAgICAgQzJJbnB1dFN1cmZhY2VFb3NUdW5pbmc7Citjb25zdGV4cHIgY2hhciBDMl9QQVJBTUtFWV9JTlBVVF9TVVJGQUNFX0VPU1tdID0gImlucHV0LXN1cmZhY2UuZW9zIjsKKyNkZWZpbmUgQzJfTkFNRV9JTlBVVF9TVVJGQUNFX0VPU19UVU5JTkcgQzJfUEFSQU1LRVlfSU5QVVRfU1VSRkFDRV9FT1MKKworLyoqCisgKiBTdGFydC9zdXNwZW5kL3Jlc3VtZS9zdG9wIGNvbnRyb2xzIGFuZCB0aW1lc3RhbXBzIGZvciBpbnB1dCBzdXJmYWNlLgorICoKKyAqIFRPRE86IG1ha2UgdGhlc2UgY291bnRlcnMKKyAqLworCitzdHJ1Y3QgQzJUaW1lZENvbnRyb2xTdHJ1Y3QgeworICAgIGMyX2Jvb2xfdCBlbmFibGVkOyAvLy88IGNvbnRyb2wgaXMgZW5hYmxlZAorICAgIGludDY0X3QgdGltZXN0YW1wOyAvLy88IGlmIGVuYWJsZWQsIHRpbWUgdGhlIGNvbnRyb2wgc2hvdWxkIHRha2UgZWZmZWN0CisKKyAgICBDMlRpbWVkQ29udHJvbFN0cnVjdCgpCisgICAgICAgIDogZW5hYmxlZChDMl9GQUxTRSksIHRpbWVzdGFtcCgwKSB7IH0KKworICAgIC8qIGltcGxpY2l0ICovIEMyVGltZWRDb250cm9sU3RydWN0KHVpbnQ2NF90IHRpbWVzdGFtcF8pCisgICAgICAgIDogZW5hYmxlZChDMl9UUlVFKSwgdGltZXN0YW1wKHRpbWVzdGFtcF8pIHsgfQorCisgICAgREVGSU5FX0FORF9ERVNDUklCRV9DMlNUUlVDVChUaW1lZENvbnRyb2wpCisgICAgQzJGSUVMRChlbmFibGVkLCAgICJlbmFibGVkIikKKyAgICBDMkZJRUxEKHRpbWVzdGFtcCwgInRpbWVzdGFtcCIpCit9OworCit0eXBlZGVmIEMyUG9ydFBhcmFtPEMyVHVuaW5nLCBDMlRpbWVkQ29udHJvbFN0cnVjdCwga1BhcmFtSW5kZXhTdGFydEF0PgorICAgICAgICBDMlBvcnRTdGFydFRpbWVzdGFtcFR1bmluZzsKK2NvbnN0ZXhwciBjaGFyIEMyX1BBUkFNS0VZX0lOUFVUX1NVUkZBQ0VfU1RBUlRfQVRbXSA9ICJpbnB1dC1zdXJmYWNlLnN0YXJ0IjsKK3R5cGVkZWYgQzJQb3J0UGFyYW08QzJUdW5pbmcsIEMyVGltZWRDb250cm9sU3RydWN0LCBrUGFyYW1JbmRleFN1c3BlbmRBdD4KKyAgICAgICAgQzJQb3J0U3VzcGVuZFRpbWVzdGFtcFR1bmluZzsKK2NvbnN0ZXhwciBjaGFyIEMyX1BBUkFNS0VZX0lOUFVUX1NVUkZBQ0VfU1VTUEVORF9BVFtdID0gImlucHV0LXN1cmZhY2Uuc3VzcGVuZCI7Cit0eXBlZGVmIEMyUG9ydFBhcmFtPEMyVHVuaW5nLCBDMlRpbWVkQ29udHJvbFN0cnVjdCwga1BhcmFtSW5kZXhSZXN1bWVBdD4KKyAgICAgICAgQzJQb3J0UmVzdW1lVGltZXN0YW1wVHVuaW5nOworY29uc3RleHByIGNoYXIgQzJfUEFSQU1LRVlfSU5QVVRfU1VSRkFDRV9SRVNVTUVfQVRbXSA9ICJpbnB1dC1zdXJmYWNlLnJlc3VtZSI7Cit0eXBlZGVmIEMyUG9ydFBhcmFtPEMyVHVuaW5nLCBDMlRpbWVkQ29udHJvbFN0cnVjdCwga1BhcmFtSW5kZXhTdG9wQXQ+CisgICAgICAgIEMyUG9ydFN0b3BUaW1lc3RhbXBUdW5pbmc7Citjb25zdGV4cHIgY2hhciBDMl9QQVJBTUtFWV9JTlBVVF9TVVJGQUNFX1NUT1BfQVRbXSA9ICJpbnB1dC1zdXJmYWNlLnN0b3AiOworCisvKioKKyAqIFRpbWUgb2Zmc2V0IGZvciBpbnB1dCBzdXJmYWNlLiBJbnB1dCB0aW1lc3RhbXAgdG8gY29kZWMgaXMgc3VyZmFjZSBidWZmZXIgdGltZXN0YW1wIHBsdXMgdGhpcworICogdGltZSBvZmZzZXQuCisgKi8KK3R5cGVkZWYgQzJHbG9iYWxQYXJhbTxDMlR1bmluZywgQzJJbnQ2NFZhbHVlLCBrUGFyYW1JbmRleFRpbWVPZmZzZXQ+IEMyQ29tcG9uZW50VGltZU9mZnNldFR1bmluZzsKK2NvbnN0ZXhwciBjaGFyIEMyX1BBUkFNS0VZX0lOUFVUX1NVUkZBQ0VfVElNRV9PRkZTRVRbXSA9ICJpbnB1dC1zdXJmYWNlLnRpbWUtb2Zmc2V0IjsKKworLyoqCisgKiBNaW5pbXVtIGZwcyBmb3IgaW5wdXQgc3VyZmFjZS4KKyAqCisgKiBSZXBlYXQgZnJhbWUgdG8gbWVldCB0aGlzLgorICovCit0eXBlZGVmIEMyUG9ydFBhcmFtPEMyVHVuaW5nLCBDMkZsb2F0VmFsdWUsIGtQYXJhbUluZGV4TWluRnJhbWVSYXRlPiBDMlBvcnRNaW5GcmFtZVJhdGVUdW5pbmc7Citjb25zdGV4cHIgY2hhciBDMl9QQVJBTUtFWV9JTlBVVF9TVVJGQUNFX01JTl9GUkFNRV9SQVRFW10gPSAiaW5wdXQtc3VyZmFjZS5taW4tZnJhbWUtcmF0ZSI7CisKKy8qKgorICogVGltZXN0YW1wIGFkanVzdG1lbnQgKG92ZXJyaWRlKSBmb3IgaW5wdXQgc3VyZmFjZSBidWZmZXJzLiBUaGVzZSBjb250cm9sIHRoZSBpbnB1dCB0aW1lc3RhbXAKKyAqIGZlZCB0byB0aGUgY29kZWMsIGJ1dCBkbyBub3QgaW1wYWN0IHRoZSBvdXRwdXQgdGltZXN0YW1wLgorICovCitzdHJ1Y3QgQzJUaW1lc3RhbXBHYXBBZGp1c3RtZW50U3RydWN0IHsKKyAgICAvLy8gY29udHJvbCBtb2RlcworICAgIGVudW0gbW9kZV90IDogdWludDMyX3Q7CisKKyAgICBpbmxpbmUgQzJUaW1lc3RhbXBHYXBBZGp1c3RtZW50U3RydWN0KCk7CisKKyAgICBpbmxpbmUgQzJUaW1lc3RhbXBHYXBBZGp1c3RtZW50U3RydWN0KG1vZGVfdCBtb2RlXywgdWludDY0X3QgdmFsdWVfKQorICAgICAgICA6IG1vZGUobW9kZV8pLCB2YWx1ZSh2YWx1ZV8pIHsgfQorCisgICAgbW9kZV90IG1vZGU7ICAgIC8vLzwgY29udHJvbCBtb2RlCisgICAgdWludDY0X3QgdmFsdWU7IC8vLzwgY29udHJvbCB2YWx1ZSBmb3IgZ2FwIGJldHdlZW4gdHdvIHRpbWVzdGFtcAorCisgICAgREVGSU5FX0FORF9ERVNDUklCRV9DMlNUUlVDVChUaW1lc3RhbXBHYXBBZGp1c3RtZW50KQorICAgIEMyRklFTEQobW9kZSwgIm1vZGUiKQorICAgIEMyRklFTEQodmFsdWUsICJ2YWx1ZSIpCit9OworCitDMkVOVU0oQzJUaW1lc3RhbXBHYXBBZGp1c3RtZW50U3RydWN0Ojptb2RlX3QsIHVpbnQzMl90LAorICAgIE5PTkUsCisgICAgTUlOX0dBUCwKKyAgICBGSVhFRF9HQVAsCispOworCitpbmxpbmUgQzJUaW1lc3RhbXBHYXBBZGp1c3RtZW50U3RydWN0OjpDMlRpbWVzdGFtcEdhcEFkanVzdG1lbnRTdHJ1Y3QoKQorICAgIDogbW9kZShDMlRpbWVzdGFtcEdhcEFkanVzdG1lbnRTdHJ1Y3Q6Ok5PTkUpLCB2YWx1ZSgwKSB7IH0KKwordHlwZWRlZiBDMlBvcnRQYXJhbTxDMlR1bmluZywgQzJUaW1lc3RhbXBHYXBBZGp1c3RtZW50U3RydWN0PiBDMlBvcnRUaW1lc3RhbXBHYXBUdW5pbmc7Citjb25zdGV4cHIgY2hhciBDMl9QQVJBTUtFWV9JTlBVVF9TVVJGQUNFX1RJTUVTVEFNUF9BREpVU1RNRU5UW10gPSAiaW5wdXQtc3VyZmFjZS50aW1lc3RhbXAtYWRqdXN0bWVudCI7CisKKy8vLyBAfQorCisjZW5kaWYgIC8vIEMyQ09ORklHX0hfCmRpZmYgLS1naXQgYS9tZWRpYS9jb2RlYzIvY29yZS9pbmNsdWRlL0MyRW51bS5oIGIvbWVkaWEvY29kZWMyL2NvcmUvaW5jbHVkZS9DMkVudW0uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMGZhZDhmCi0tLSAvZGV2L251bGwKKysrIGIvbWVkaWEvY29kZWMyL2NvcmUvaW5jbHVkZS9DMkVudW0uaApAQCAtMCwwICsxLDIyOCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNiBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCisKKyNpZm5kZWYgQzJFTlVNX0hfCisjZGVmaW5lIEMyRU5VTV9IXworCisjaW5jbHVkZSA8QzJQYXJhbS5oPgorI2luY2x1ZGUgPF9DMk1hY3JvVXRpbHMuaD4KKworI2luY2x1ZGUgPHV0aWxpdHk+CisjaW5jbHVkZSA8dmVjdG9yPgorCisvKiogXGZpbGUKKyAqIFRvb2xzIGZvciBlYXNpZXIgZW51bSBzdXBwb3J0LgorICovCisKKy8vLyBcY29uZCBJTlRFUk5BTAorCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIFVUSUxJVElFUyBGT1IgRU5VTUVSQVRJT04gUkVGTEVDVElPTiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKKy8qKgorICogVXRpbGl0eSBjbGFzcyB0aGF0IGFsbG93cyBpZ25vcmluZyBlbnVtIHZhbHVlIGFzc2lnbm1lbnQgKGUuZy4gYm90aCAnKF9DMkVudW1Db25zdClrVmFsdWUgPSB4JworICogYW5kICcoX0MyRW51bUNvbnN0KWtWYWx1ZScgd2lsbCBldmFsIHRvIGtWYWx1ZS4KKyAqLwordGVtcGxhdGU8dHlwZW5hbWUgVD4KK2NsYXNzIF9DMkVudW1Db25zdCB7CitwdWJsaWM6CisgICAgLy8gaW1wbGljaXQgY29udmVyc2lvbiBmcm9tIFQKKyAgICBpbmxpbmUgX0MyRW51bUNvbnN0KFQgdmFsdWUpIDogX21WYWx1ZSh2YWx1ZSkge30KKyAgICAvLyBpbXBsaWNpdCBjb252ZXJzaW9uIHRvIFQKKyAgICBpbmxpbmUgb3BlcmF0b3IgVCgpIHsgcmV0dXJuIF9tVmFsdWU7IH0KKyAgICAvLyBpbXBsaWNpdCBjb252ZXJzaW9uIHRvIEMyVmFsdWU6OlByaW1pdGl2ZQorICAgIGlubGluZSBvcGVyYXRvciBDMlZhbHVlOjpQcmltaXRpdmUoKSB7IHJldHVybiAoVClfbVZhbHVlOyB9CisgICAgLy8gaWdub3JlIGFzc2lnbm1lbnQgYW5kIHJldHVybiBUIGhlcmUgdG8gYXZvaWQgaW1wbGljaXQgY29udmVyc2lvbiB0byBUIGxhdGVyCisgICAgaW5saW5lIFQgJm9wZXJhdG9yID0oVCB2YWx1ZSBfX3VudXNlZCkgeyByZXR1cm4gX21WYWx1ZTsgfQorcHJpdmF0ZToKKyAgICBUIF9tVmFsdWU7Cit9OworCisvLy8gbWFwcGVyIHRvIGdldCBuYW1lIG9mIGVudW0KKy8vLyBcbm90ZSB0aGlzIHdpbGwgY29udGFpbiBhbnkgaW5pdGlhbGl6YXRpb24sIHdoaWNoIHdlIHdpbGwgcmVtb3ZlIHdoZW4gY29udmVydGluZyB0byBsb3dlci1jYXNlCisjZGVmaW5lIF9DMl9HRVRfRU5VTV9OQU1FKHgsIHkpICN4CisvLy8gbWFwcGVyIHRvIGdldCB2YWx1ZSBvZiBlbnVtCisjZGVmaW5lIF9DMl9HRVRfRU5VTV9WQUxVRSh4LCB0eXBlKSAoX0MyRW51bUNvbnN0PHR5cGU+KXgKKworLy8vIFxlbmRjb25kCisKK2NsYXNzIF9DMkVudW1VdGlscyB7CisgICAgc3RhdGljIEMyU3RyaW5nIGNhbWVsQ2FzZVRvRGFzaGVkKEMyU3RyaW5nIG5hbWUpOworCisgICAgc3RhdGljIHN0ZDo6dmVjdG9yPEMyU3RyaW5nPiBzYW5pdGl6ZUVudW1WYWx1ZU5hbWVzKAorICAgICAgICAgICAgY29uc3Qgc3RkOjp2ZWN0b3I8QzJTdHJpbmdMaXRlcmFsPiBuYW1lcywKKyAgICAgICAgICAgIEMyU3RyaW5nTGl0ZXJhbCBfcHJlZml4ID0gbnVsbHB0cik7CisKKyAgICBmcmllbmQgY2xhc3MgQzJVdGlsVGVzdF9FbnVtVXRpbHNUZXN0X1Rlc3Q7CisKK3B1YmxpYzoKKyAgICAvLyB0aGlzIG1heSBub3QgYmUgdXNlZC4uLgorICAgIHN0YXRpYyBDMl9ISURFIHN0ZDo6dmVjdG9yPEMyU3RyaW5nPiBwYXJzZUVudW1WYWx1ZXNGcm9tU3RyaW5nKEMyU3RyaW5nTGl0ZXJhbCB2YWx1ZSk7CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgorICAgIHN0YXRpYyBDMl9ISURFIEMyRmllbGREZXNjcmlwdG9yOjpOYW1lZFZhbHVlc1R5cGUgc2FuaXRpemVFbnVtVmFsdWVzKAorICAgICAgICAgICAgc3RkOjp2ZWN0b3I8VD4gdmFsdWVzLAorICAgICAgICAgICAgc3RkOjp2ZWN0b3I8QzJTdHJpbmdMaXRlcmFsPiBuYW1lcywKKyAgICAgICAgICAgIEMyU3RyaW5nTGl0ZXJhbCBwcmVmaXggPSBudWxscHRyKSB7CisgICAgICAgIEMyRmllbGREZXNjcmlwdG9yOjpOYW1lZFZhbHVlc1R5cGUgbmFtZWRWYWx1ZXM7CisgICAgICAgIHN0ZDo6dmVjdG9yPEMyU3RyaW5nPiBzYW5pdGl6ZWROYW1lcyA9IHNhbml0aXplRW51bVZhbHVlTmFtZXMobmFtZXMsIHByZWZpeCk7CisgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgdmFsdWVzLnNpemUoKSAmJiBpIDwgc2FuaXRpemVkTmFtZXMuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgICAgIG5hbWVkVmFsdWVzLmVtcGxhY2VfYmFjayhzYW5pdGl6ZWROYW1lc1tpXSwgdmFsdWVzW2ldKTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gbmFtZWRWYWx1ZXM7CisgICAgfQorCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgRT4KKyAgICBzdGF0aWMgQzJfSElERSBDMkZpZWxkRGVzY3JpcHRvcjo6TmFtZWRWYWx1ZXNUeXBlIGN1c3RvbUVudW1WYWx1ZXMoCisgICAgICAgICAgICBzdGQ6OnZlY3RvcjxzdGQ6OnBhaXI8QzJTdHJpbmdMaXRlcmFsLCBFPj4gaXRlbXMpIHsKKyAgICAgICAgQzJGaWVsZERlc2NyaXB0b3I6Ok5hbWVkVmFsdWVzVHlwZSBuYW1lZFZhbHVlczsKKyAgICAgICAgZm9yIChhdXRvICZpdGVtIDogaXRlbXMpIHsKKyAgICAgICAgICAgIG5hbWVkVmFsdWVzLmVtcGxhY2VfYmFjayhpdGVtLmZpcnN0LCBpdGVtLnNlY29uZCk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIG5hbWVkVmFsdWVzOworICAgIH0KK307CisKKyNkZWZpbmUgREVGSU5FX0MyX0VOVU1fVkFMVUVfQVVUT19IRUxQRVIobmFtZSwgdHlwZSwgcHJlZml4LCAuLi4pIFwKKyAgICBfREVGSU5FX0MyX0VOVU1fVkFMVUVfQVVUT19IRUxQRVIoX19DMl9HRU5FUkFURV9HTE9CQUxfVkFSU19fLCBuYW1lLCB0eXBlLCBwcmVmaXgsIFwKKyAgICAgICAgICAgICMjX19WQV9BUkdTX18pCisjZGVmaW5lIF9ERUZJTkVfQzJfRU5VTV9WQUxVRV9BVVRPX0hFTFBFUihlbmFibGVkLCBuYW1lLCB0eXBlLCBwcmVmaXgsIC4uLikgXAorICAgIF9fREVGSU5FX0MyX0VOVU1fVkFMVUVfQVVUT19IRUxQRVIoZW5hYmxlZCwgbmFtZSwgdHlwZSwgcHJlZml4LCAjI19fVkFfQVJHU19fKQorI2RlZmluZSBfX0RFRklORV9DMl9FTlVNX1ZBTFVFX0FVVE9fSEVMUEVSKGVuYWJsZWQsIG5hbWUsIHR5cGUsIHByZWZpeCwgLi4uKSBcCisgICAgX19fREVGSU5FX0MyX0VOVU1fVkFMVUVfQVVUT19IRUxQRVIjI2VuYWJsZWQobmFtZSwgdHlwZSwgcHJlZml4LCAjI19fVkFfQVJHU19fKQorI2RlZmluZSBfX19ERUZJTkVfQzJfRU5VTV9WQUxVRV9BVVRPX0hFTFBFUihuYW1lLCB0eXBlLCBwcmVmaXgsIC4uLikgXAordGVtcGxhdGU8PiBcCitDMkZpZWxkRGVzY3JpcHRvcjo6TmFtZWRWYWx1ZXNUeXBlIEMyRmllbGREZXNjcmlwdG9yOjpuYW1lZFZhbHVlc0Zvcihjb25zdCBuYW1lICZyIF9fdW51c2VkKSB7IFwKKyAgICByZXR1cm4gX0MyRW51bVV0aWxzOjpzYW5pdGl6ZUVudW1WYWx1ZXMoIFwKKyAgICAgICAgICAgIHN0ZDo6dmVjdG9yPEMyVmFsdWU6OlByaW1pdGl2ZT4geyBfQzJfTUFQKF9DMl9HRVRfRU5VTV9WQUxVRSwgdHlwZSwgX19WQV9BUkdTX18pIH0sIFwKKyAgICAgICAgICAgIHsgX0MyX01BUChfQzJfR0VUX0VOVU1fTkFNRSwgdHlwZSwgX19WQV9BUkdTX18pIH0sIFwKKyAgICAgICAgICAgIHByZWZpeCk7IFwKK30KKyNkZWZpbmUgX19fREVGSU5FX0MyX0VOVU1fVkFMVUVfQVVUT19IRUxQRVJfX0MyX0dFTkVSQVRFX0dMT0JBTF9WQVJTX18obmFtZSwgdHlwZSwgcHJlZml4LCAuLi4pCisKKyNkZWZpbmUgREVGSU5FX0MyX0VOVU1fVkFMVUVfQ1VTVE9NX0hFTFBFUihuYW1lLCBuYW1lcykgXAorICAgIF9ERUZJTkVfQzJfRU5VTV9WQUxVRV9DVVNUT01fSEVMUEVSKF9fQzJfR0VORVJBVEVfR0xPQkFMX1ZBUlNfXywgbmFtZSwgbmFtZXMpCisjZGVmaW5lIF9ERUZJTkVfQzJfRU5VTV9WQUxVRV9DVVNUT01fSEVMUEVSKGVuYWJsZWQsIG5hbWUsIG5hbWVzKSBcCisgICAgX19ERUZJTkVfQzJfRU5VTV9WQUxVRV9DVVNUT01fSEVMUEVSKGVuYWJsZWQsIG5hbWUsIG5hbWVzKQorI2RlZmluZSBfX0RFRklORV9DMl9FTlVNX1ZBTFVFX0NVU1RPTV9IRUxQRVIoZW5hYmxlZCwgbmFtZSwgbmFtZXMpIFwKKyAgICBfX19ERUZJTkVfQzJfRU5VTV9WQUxVRV9DVVNUT01fSEVMUEVSIyNlbmFibGVkKG5hbWUsIG5hbWVzKQorI2RlZmluZSBfX19ERUZJTkVfQzJfRU5VTV9WQUxVRV9DVVNUT01fSEVMUEVSKG5hbWUsIG5hbWVzKSBcCit0ZW1wbGF0ZTw+IFwKK0MyRmllbGREZXNjcmlwdG9yOjpOYW1lZFZhbHVlc1R5cGUgQzJGaWVsZERlc2NyaXB0b3I6Om5hbWVkVmFsdWVzRm9yKGNvbnN0IG5hbWUgJnIgX191bnVzZWQpIHsgXAorICAgIHJldHVybiBfQzJFbnVtVXRpbHM6OmN1c3RvbUVudW1WYWx1ZXMoIFwKKyAgICAgICAgICAgIHN0ZDo6dmVjdG9yPHN0ZDo6cGFpcjxDMlN0cmluZ0xpdGVyYWwsIG5hbWU+PiBuYW1lcyk7IFwKK30KKyNkZWZpbmUgX19fREVGSU5FX0MyX0VOVU1fVkFMVUVfQ1VTVE9NX0hFTFBFUl9fQzJfR0VORVJBVEVfR0xPQkFMX1ZBUlNfXyhuYW1lLCBuYW1lcykKKworLyoqCisgKiBEZWZpbmVzIGFuIGVudW0gdHlwZSB3aXRoIHRoZSBkZWZhdWx0IG5hbWVkIHZhbHVlIG1hcHBlci4gVGhlIGRlZmF1bHQgbWFwcGVyCisgKiBmaW5kcyBhbmQgcmVtb3ZlcyB0aGUgbG9uZ2VzdCBjb21tb24gcHJlZml4IGFjcm9zcyBhbGwgb2YgdGhlIGVudW0gdmFsdWUgbmFtZXMsIGFuZAorICogcmVwbGFjZXMgY2FtZWwtY2FzZSBzZXBhcmF0b3JzIHdpdGggZGFzaGVzICgnLScpLgorICoKKyAqIFRoaXMgbWFjcm8gbXVzdCBiZSB1c2VkIGluIHRoZSBnbG9iYWwgc2NvcGUgYW5kIG5hbWVzcGFjZS4KKyAqCisgKiAgfn5+fn5+fn5+fn5+fiAoLmNwcCkKKyAqICBDMkVOVU0oYzJfZW51bV90LCB1aW50MzJfdCwKKyAqICAgIEMyX1ZBTFVFMSwKKyAqICAgIEMyX1ZBTFVFMiA9IDUsCisgKiAgICBDMl9WQUxVRTMgPSBDMl9WQUxVRTEgKyAxKQorICogIC8vIG5hbWVkIHZhbHVlcyBhcmU6IEMyX1ZBTFVFMSA9PiAiMSIsIEMyX1ZBTFVFMiA9PiAiMiIsIC4uLgorICogIC8vIGxvbmdlc3QgY29tbW9uIHByZWZpeCBpcyAiQzJfVkFMVUUiCisgKiAgfn5+fn5+fn5+fn5+fgorICoKKyAqIFxwYXJhbSBuYW1lIG5hbWUgb2YgdGhlIGVudW0gdHlwZSAoVGhpcyBjYW4gYmUgYW4gaW5uZXIgY2xhc3MgZW51bS4pCisgKiBccGFyYW0gdHlwZSB1bmRlcmx5aW5nIHR5cGUKKyAqLworI2RlZmluZSBDMkVOVU0obmFtZSwgdHlwZSwgLi4uKSBcCitlbnVtIG5hbWUgOiB0eXBlIHsgX19WQV9BUkdTX18gfTsgXAorREVGSU5FX0MyX0VOVU1fVkFMVUVfQVVUT19IRUxQRVIobmFtZSwgdHlwZSwgbnVsbHB0ciwgX19WQV9BUkdTX18pCisKKy8qKgorICogRGVmaW5lcyBhbiBlbnVtIHR5cGUgd2l0aCB0aGUgZGVmYXVsdCBuYW1lZCB2YWx1ZSBtYXBwZXIgYnV0IGN1c3RvbSBwcmVmaXguIFRoZSBkZWZhdWx0CisgKiBtYXBwZXIgcmVtb3ZlcyB0aGUgcHJlZml4IGZyb20gYWxsIG9mIHRoZSBlbnVtIHZhbHVlIG5hbWVzIChpZiBwcmVzZW50KSwgYW5kCisgKiBpbnNlcnRzIGRhc2hlcyBhdCBjYW1lbC1jYXNlIHNlcGFyYXRvcnMgKGxvd0hpZ2ggYmVjb21lcyBsb3ctaGlnaCkgYW5kIGFsc28gcmVwbGFjZXMKKyAqIG5vbi1sZWFkaW5nIHVuZGVyc2NvcmVzIHdpdGggZGFzaGVzICgnLScpLgorICoKKyAqIFRoaXMgbWFjcm8gbXVzdCBiZSB1c2VkIGluIHRoZSBnbG9iYWwgc2NvcGUgYW5kIG5hbWVzcGFjZS4KKyAqCisgKiAgfn5+fn5+fn5+fn5+fiAoLmNwcCkKKyAqICBDMkVOVU1fQ1VTVE9NX1BSRUZJWChjMl9lbnVtX3QsIHVpbnQzMl90LCAiQzJfIiwKKyAqICAgIEMyX1ZBTFVFMSwKKyAqICAgIEMyX1ZBTFVFMiA9IDUsCisgKiAgICBDMl9WQUxVRTMgPSBDMl9WQUxVRTEgKyAxKQorICogIC8vIG5hbWVkIHZhbHVlcyBhcmU6IEMyX1ZBTFVFMSA9PiAiVkFMVUUxIiwgQzJfVkFMVUUyID0+ICJWQUxVRTIiLCAuLi4KKyAqICB+fn5+fn5+fn5+fn5+CisgKgorICogXHBhcmFtIG5hbWUgbmFtZSBvZiB0aGUgZW51bSB0eXBlIChUaGlzIGNhbiBiZSBhbiBpbm5lciBjbGFzcyBlbnVtLikKKyAqIFxwYXJhbSB0eXBlIHVuZGVybHlpbmcgdHlwZQorICogXHBhcmFtIHByZWZpeCBwcmVmaXggdG8gcmVtb3ZlCisgKi8KKyNkZWZpbmUgQzJFTlVNX0NVU1RPTV9QUkVGSVgobmFtZSwgdHlwZSwgcHJlZml4LCAuLi4pIFwKK2VudW0gbmFtZSA6IHR5cGUgeyBfX1ZBX0FSR1NfXyB9OyBcCitERUZJTkVfQzJfRU5VTV9WQUxVRV9BVVRPX0hFTFBFUihuYW1lLCB0eXBlLCBwcmVmaXgsIF9fVkFfQVJHU19fKQorCisvKioKKyAqIERlZmluZXMgYW4gZW51bSB0eXBlIHdpdGggY3VzdG9tIG5hbWVzLgorICoKKyAqIFRoaXMgbWFjcm8gbXVzdCBiZSB1c2VkIGluIHRoZSBnbG9iYWwgc2NvcGUgYW5kIG5hbWVzcGFjZS4KKyAqCisgKiAgfn5+fn5+fn5+fn5+fiAoLmNwcCkKKyAqICBDMkVOVU1fQ1VTVE9NX05BTUVTKFNvbWVTdHJ1Y3Q6OmMyX2VudW1fdCwgdWludDMyX3QsICh7CisgKiAgICAgIHsgIk9uZSIsIFNvbWVTdHJ1Y3Q6OkMyX1ZBTFVFMSB9LAorICogICAgICB7ICJUd28iLCBTb21lU3RydWN0OjpDMl9WQUxVRTIgfSwKKyAqICAgICAgeyAiVGhyZWUiLCBTb21lU3RydWN0OjpDMl9WQUxVRTMgfSB9KSwKKyAqICAgIEMyX1ZBTFVFMSwKKyAqICAgIEMyX1ZBTFVFMiA9IDUsCisgKiAgICBDMl9WQUxVRTMgPSBDMl9WQUxVRTEgKyAxKQorICoKKyAqICAvLyBuYW1lZCB2YWx1ZXMgYXJlOiBDMl9WQUxVRTEgPT4gIk9uZSIsIEMyX1ZBTFVFMiA9PiAiVHdvIiwgLi4uCisgKiAgfn5+fn5+fn5+fn5+fgorICovCisjZGVmaW5lIEMyRU5VTV9DVVNUT01fTkFNRVMobmFtZSwgdHlwZSwgbmFtZXMsIC4uLikgXAorZW51bSBuYW1lIDogdHlwZSB7IF9fVkFfQVJHU19fIH07IFwKK0RFRklORV9DMl9FTlVNX1ZBTFVFX0NVU1RPTV9IRUxQRVIobmFtZSwgbmFtZXMpCisKKy8qKgorICogTWFrZSBlbnVtcyB1c2FibGUgYXMgdGhlaXIgaW50ZWdyYWwgdHlwZXMuCisgKgorICogTm90ZTogdGhpcyBtYWtlcyB0aGVtIG5vdCB1c2FibGUgaW4gcHJpbnRmKCkKKyAqLwordGVtcGxhdGU8Y2xhc3MgRT4KK3N0cnVjdCBDMkVhc3lFbnVtIHsKKyAgICB1c2luZyBVID0gdHlwZW5hbWUgc3RkOjp1bmRlcmx5aW5nX3R5cGU8RT46OnR5cGU7CisgICAgRSB2YWx1ZTsKKyAgICAvLyBkZWZpbmUgY29udmVyc2lvbiBmdW5jdGlvbnMKKyAgICBpbmxpbmUgY29uc3RleHByIG9wZXJhdG9yIEUoKSBjb25zdCB7IHJldHVybiB2YWx1ZTsgfQorICAgIGlubGluZSBjb25zdGV4cHIgQzJFYXN5RW51bShFIHZhbHVlXykgOiB2YWx1ZSh2YWx1ZV8pIHsgfQorICAgIGlubGluZSBjb25zdGV4cHIgQzJFYXN5RW51bShVIHZhbHVlXykgOiB2YWx1ZShFKHZhbHVlXykpIHsgfQorICAgIGlubGluZSBjb25zdGV4cHIgQzJFYXN5RW51bSgpID0gZGVmYXVsdDsKK307CisKKy8vIG1ha2UgQzJFYXN5RW51bSBiZWhhdmUgbGlrZSBhIHJlZ3VsYXIgZW51bQorCituYW1lc3BhY2Ugc3RkIHsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBFPgorICAgIHN0cnVjdCB1bmRlcmx5aW5nX3R5cGU8QzJFYXN5RW51bTxFPj4geworICAgICAgICB0eXBlZGVmIHR5cGVuYW1lIHVuZGVybHlpbmdfdHlwZTxFPjo6dHlwZSB0eXBlOworICAgIH07CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBFPgorICAgIHN0cnVjdCBpc19lbnVtPEMyRWFzeUVudW08RT4+IHsKKyAgICAgICAgY29uc3RleHByIHN0YXRpYyBib29sIHZhbHVlID0gdHJ1ZTsKKyAgICB9OworfQorCisjZW5kaWYgIC8vIEMyRU5VTV9IXworCmRpZmYgLS1naXQgYS9tZWRpYS9jb2RlYzIvY29yZS9pbmNsdWRlL0MyUGFyYW0uaCBiL21lZGlhL2NvZGVjMi9jb3JlL2luY2x1ZGUvQzJQYXJhbS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQwYmUzYjMKLS0tIC9kZXYvbnVsbAorKysgYi9tZWRpYS9jb2RlYzIvY29yZS9pbmNsdWRlL0MyUGFyYW0uaApAQCAtMCwwICsxLDE2NzMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworCisjaWZuZGVmIEMyUEFSQU1fSF8KKyNkZWZpbmUgQzJQQVJBTV9IXworCisjaW5jbHVkZSA8QzIuaD4KKworI2luY2x1ZGUgPHN0ZGJvb2wuaD4KKyNpbmNsdWRlIDxzdGRpbnQuaD4KKworI2luY2x1ZGUgPGFsZ29yaXRobT4KKyNpbmNsdWRlIDxzdHJpbmc+CisjaW5jbHVkZSA8dHlwZV90cmFpdHM+CisjaW5jbHVkZSA8dXRpbGl0eT4KKyNpbmNsdWRlIDx2ZWN0b3I+CisKKy8vLyBcYWRkdG9ncm91cCBQYXJhbWV0ZXJzCisvLy8gQHsKKworLy8vIFxkZWZncm91cCBpbnRlcm5hbCBJbnRlcm5hbCBoZWxwZXJzLgorCisvKiEKKyAqIFxmaWxlCisgKiBQQVJBTUVURVJTOiBTRVRUSU5HcywgVFVOSU5HcywgYW5kIElORk9zCisgKiA9PT0KKyAqCisgKiBUaGVzZSByZXByZXNlbnQgbWlzY2VsbGFuZW91cyBjb250cm9sIGFuZCBtZXRhZGF0YSBpbmZvcm1hdGlvbiBhbmQgYXJlIGxpa2VseSBjb3BpZWQgaW50bworICoga2VybmVsIHNwYWNlLiBUaGVyZWZvcmUsIHRoZXNlIGFyZSBDLWxpa2Ugc3RydWN0dXJlcyBkZXNpZ25lZCB0byBjYXJyeSBqdXN0IGEgc21hbGwgYW1vdW50IG9mCisgKiBpbmZvcm1hdGlvbi4gV2UgYXJlIHVzaW5nIEMrKyB0byBiZSBhYmxlIHRvIGFkZCBjb25zdHJ1Y3RvcnMsIGFzIHdlbGwgYXMgbm9uLXZpcnR1YWwgYW5kIGNsYXNzCisgKiBtZXRob2RzLgorICoKKyAqID09U3BlY2lmaWNhdGlvbiBkZXRhaWxzOgorICoKKyAqIFJlc3RyaWN0aW9uczoKKyAqICAgLSBtdXN0IGJlIFBPRCBzdHJ1Y3QsIGUuZy4gbm8gdnRhYmxlIChubyB2aXJ0dWFsIGRlc3RydWN0b3IpCisgKiAgIC0gbXVzdCBoYXZlIHRoZSBzYW1lIHNpemUgaW4gNjQtYml0IGFuZCAzMi1iaXQgbW9kZSAobm8gc2l6ZV90KQorICogICAtIGFzIHN1Y2gsIG5vIHBvaW50ZXIgbWVtYmVycworICogICAtIHNvbWUgY29tbW9uIG1lbWJlciBmaWVsZCBuYW1lcyBhcmUgcmVzZXJ2ZWQgYXMgdGhleSBhcmUgZGVmaW5lZCBhcyBtZXRob2RzIGZvciBhbGwKKyAqICAgICBwYXJhbWV0ZXJzOgorICogICAgIHRoZXkgYXJlOiBzaXplLCB0eXBlLCBraW5kLCBpbmRleCBhbmQgc3RyZWFtCisgKgorICogQmVoYXZpb3I6CisgKiAtIFBhcmFtcyBjYW4gYmUgZ2xvYmFsIChub3QgcmVsYXRlZCB0byBpbnB1dCBvciBvdXRwdXQpLCByZWxhdGVkIHRvIGlucHV0IG9yIG91dHB1dCwKKyAqICAgb3IgcmVsYXRlZCB0byBhbiBpbnB1dC9vdXRwdXQgc3RyZWFtLgorICogLSBBbGwgcGFyYW1zIGFyZSBxdWVyaWVkL3NldCB1c2luZyBhIHVuaXF1ZSBwYXJhbSBpbmRleCwgd2hpY2ggaW5jb3Jwb3JhdGVzIGEgcG90ZW50aWFsIHN0cmVhbQorICogICBpbmRleCBhbmQvb3IgcG9ydC4KKyAqIC0gUXVlcnlpbmcgKHN1cHBvcnRlZCkgcGFyYW1zIE1VU1QgbmV2ZXIgZmFpbC4KKyAqIC0gQWxsIHBhcmFtcyBNVVNUIGhhdmUgZGVmYXVsdCB2YWx1ZXMuCisgKiAtIElmIHNvbWUgZmllbGRzIGhhdmUgInVuc3VwcG9ydGVkIiBvciAiaW52YWxpZCIgdmFsdWVzIGR1cmluZyBzZXR0aW5nLCB0aGlzIFNIT1VMRCBiZQorICogICBjb21tdW5pY2F0ZWQgdG8gdGhlIGFwcC4KKyAqICAgYSkgSWRlYWxseSwgdGhpcyBzaG91bGQgYmUgYXZvaWRlZC4gIFdoZW4gc2V0dGluZyBwYXJhbWV0ZXJzLCBpbiBnZW5lcmFsLCBjb21wb25lbnQgc2hvdWxkIGRvCisgKiAgICAgImJlc3QgZWZmb3J0IiB0byBhcHBseSBhbGwgc2V0dGluZ3MuIEl0IHNob3VsZCBjaGFuZ2UgImludmFsaWQvdW5zdXBwb3J0ZWQiIHZhbHVlcyB0byB0aGUKKyAqICAgICBuZWFyZXN0IHN1cHBvcnRlZCB2YWx1ZXMuCisgKiAgIC0gVGhpcyBpcyBjb21tdW5pY2F0ZWQgdG8gdGhlIGNsaWVudCBieSBjaGFuZ2luZyB0aGUgc291cmNlIHZhbHVlcyBpbiB0dW5lKCkvCisgKiAgICAgY29uZmlndXJlKCkuCisgKiAgIGIpIElmIGZhbGxpbmcgYmFjayB0byBhIHN1cHBvcnRlZCB2YWx1ZSBpcyBhYnNvbHV0ZWx5IGltcG9zc2libGUsIHRoZSBjb21wb25lbnQgU0hBTEwgcmV0dXJuCisgKiAgICAgYW4gZXJyb3IgZm9yIHRoZSBzcGVjaWZpYyBzZXR0aW5nLCBidXQgc2hvdWxkIGNvbnRpbnVlIHRvIGFwcGx5IG90aGVyIHNldHRpbmdzLgorICogICAgIFRPRE86IHRoaXMgY3VycmVudGx5IG1heSByZXN1bHQgaW4gdW5pbnRlbmRlZCByZXN1bHRzLgorICoKKyAqICoqTk9URToqKiB1bmxpa2UgT01YLCBwYXJhbXMgYXJlIG5vdCB2ZXJzaW9uZWQuIEluc3RlYWQsIGEgbmV3IHN0cnVjdCB3aXRoIG5ldyBwYXJhbSBpbmRleAorICogU0hBTEwgYmUgYWRkZWQgYXMgbmV3IHZlcnNpb25zIGFyZSByZXF1aXJlZC4KKyAqCisgKiBUaGUgcHJvcGVyIHN1YnR5cGUgKFNldHRpbmcsIEluZm8gb3IgUGFyYW0pIGlzIGluY29ycG9yYXRlZCBpbnRvIHRoZSBjbGFzcyB0eXBlLiBEZWZpbmUgc3RydWN0cworICogdG8gZGVmaW5lIG11bHRpcGxlIHN1YnR5cGVkIHZlcnNpb25zIG9mIHJlbGF0ZWQgcGFyYW1ldGVycy4KKyAqCisgKiA9PUltcGxlbWVudGF0aW9uIGRldGFpbHM6CisgKgorICogLSBVc2UgbWFjcm9zIHRvIGRlZmluZSBwYXJhbWV0ZXJzCisgKiAtIEFsbCBwYXJhbWV0ZXJzIG11c3QgaGF2ZSBhIGRlZmF1bHQgY29uc3RydWN0b3IKKyAqICAgLSBUaGlzIGlzIG9ubHkgdXNlZCBmb3IgaW5zdGFudGlhdGluZyB0aGUgY2xhc3MgaW4gc291cmNlIChlLmcuIHdpbGwgbm90IGJlIHVzZWQKKyAqICAgICB3aGVuIGJ1aWxkaW5nIGEgcGFyYW1ldGVyIGJ5IHRoZSBmcmFtZXdvcmsgZnJvbSBrZXkvdmFsdWUgcGFpcnMuKQorICovCisKKy8vLyBcaW5ncm91cCBpbnRlcm5hbAorCisvKioKKyAqIFBhcmFtZXRlciBiYXNlIGNsYXNzLgorICovCitzdHJ1Y3QgQzJQYXJhbSB7CisgICAgLy8gcGFyYW0gaW5kZXggZW5jb21wYXNzZXMgdGhlIGZvbGxvd2luZzoKKyAgICAvLworICAgIC8vIC0ga2luZCAoc2V0dGluZywgdHVuaW5nLCBpbmZvLCBzdHJ1Y3QpCisgICAgLy8gLSBzY29wZQorICAgIC8vICAgLSBkaXJlY3Rpb24gKGdsb2JhbCwgaW5wdXQsIG91dHB1dCkKKyAgICAvLyAgIC0gc3RyZWFtIGZsYWcKKyAgICAvLyAgIC0gc3RyZWFtIElEICh1c3VhbGx5IDApCisgICAgLy8gLSBhbmQgdGhlIHBhcmFtZXRlcidzIHR5cGUgKGNvcmUgaW5kZXgpCisgICAgLy8gICAtIGZsZXhpYmxlIHBhcmFtZXRlciBmbGFnCisgICAgLy8gICAtIHZlbmRvciBleHRlbnNpb24gZmxhZworICAgIC8vICAgLSB0eXBlIGluZGV4ICh0aGlzIGluY2x1ZGVzIHRoZSB2ZW5kb3IgZXh0ZW5zaW9uIGZsYWcpCisgICAgLy8KKyAgICAvLyBsYXlvdXQ6CisgICAgLy8KKyAgICAvLyAgICAgICAga2luZCA6IDwtLS0tLS0tIHNjb3BlIC0tLS0tLS0+IDogPC0tLS0tIGNvcmUgaW5kZXggLS0tLS0+CisgICAgLy8gICAgICArLS0tLS0tKy0tLS0tKy0tLSstLS0tLS0rLS0tLS0tLS0rLS0tLXwtLS0tLS0rLS0tLS0tLS0tLS0tLS0rCisgICAgLy8gICAgICB8IGtpbmQgfCBkaXIgfCAtIHxzdHJlYW18c3RyZWFtSUR8ZmxleHx2ZW5kb3J8ICB0eXBlIGluZGV4ICB8CisgICAgLy8gICAgICArLS0tLS0tKy0tLS0tKy0tLSstLS0tLS0rLS0tLS0tLS0rLS0tLSstLS0tLS0rLS0tLS0tLS0tLS0tLS0rCisgICAgLy8gIGJpdDogMzEuLjMwIDI5LjI4ICAgICAgIDI1ICAgMjQgLi4gMTcgIDE2ICAgIDE1ICAgMTQgICAgLi4gICAgIDAKKyAgICAvLworcHVibGljOgorICAgIC8qKgorICAgICAqIEMyUGFyYW0ga2luZHMsIHVzYWJsZSBhcyBiaXRtYXBzLgorICAgICAqLworICAgIGVudW0ga2luZF90IDogdWludDMyX3QgeworICAgICAgICBOT05FICAgID0gMCwKKyAgICAgICAgU1RSVUNUICA9ICgxIDw8IDApLAorICAgICAgICBJTkZPICAgID0gKDEgPDwgMSksCisgICAgICAgIFNFVFRJTkcgPSAoMSA8PCAyKSwKKyAgICAgICAgVFVOSU5HICA9ICgxIDw8IDMpIHwgU0VUVElORywgLy8gdHVuaW5ncyBhcmUgc2V0dGluZ3MKKyAgICB9OworCisgICAgLyoqCisgICAgICogVGhlIHBhcmFtZXRlciB0eXBlIGluZGV4IHNwZWNpZmllcyB0aGUgdW5kZXJseWluZyBwYXJhbWV0ZXIgdHlwZSBvZiBhIHBhcmFtZXRlciBhcworICAgICAqIGFuIGludGVnZXIgdmFsdWUuCisgICAgICoKKyAgICAgKiBQYXJhbWV0ZXIgdHlwZXMgYXJlIGRpdmlkZWQgaW50byB0d28gZ3JvdXBzOiBwbGF0Zm9ybSB0eXBlcyBhbmQgdmVuZG9yIHR5cGVzLgorICAgICAqCisgICAgICogUGxhdGZvcm0gdHlwZXMgYXJlIGRlZmluZWQgYnkgdGhlIHBsYXRmb3JtIGFuZCBhcmUgY29tbW9uIGZvciBhbGwgaW1wbGVtZW50YXRpb25zLgorICAgICAqCisgICAgICogVmVuZG9yIHR5cGVzIGFyZSBkZWZpbmVkIGJ5IGVhY2ggdmVuZG9ycywgc28gdGhleSBtYXkgZGlmZmVyIGJldHdlZW4gaW1wbGVtZW50YXRpb25zLgorICAgICAqIEl0IGlzIHJlY29tbWVuZGVkIHRoYXQgdmVuZG9yIHR5cGVzIGJlIHRoZSBzYW1lIGZvciBhbGwgaW1wbGVtZW50YXRpb25zIGJ5IGEgc3BlY2lmaWMKKyAgICAgKiB2ZW5kb3IuCisgICAgICovCisgICAgdHlwZWRlZiB1aW50MzJfdCB0eXBlX2luZGV4X3Q7CisgICAgZW51bSA6IHVpbnQzMl90IHsKKyAgICAgICAgICAgIFRZUEVfSU5ERVhfVkVORE9SX1NUQVJUID0gMHgwMDAwODAwMCwgLy8vPCB2ZW5kb3IgaW5kaWNlcyBTSEFMTCBzdGFydCBhZnRlciB0aGlzCisgICAgfTsKKworICAgIC8qKgorICAgICAqIENvcmUgaW5kZXggaXMgdGhlIHVuZGVybHlpbmcgcGFyYW1ldGVyIHR5cGUgZm9yIGEgcGFyYW1ldGVyLiBJdCBpcyB1c2VkIHRvIGRlc2NyaWJlIHRoZQorICAgICAqIGxheW91dCBvZiB0aGUgcGFyYW1ldGVyIHN0cnVjdHVyZSByZWdhcmRsZXNzIG9mIHRoZSBjb21wb25lbnQgb3IgcGFyYW1ldGVyIGtpbmQvc2NvcGUuCisgICAgICoKKyAgICAgKiBJdCBpcyB1c2VkIHRvIGlkZW50aWZ5IGFuZCBkaXN0aW5ndWlzaCBnbG9iYWwgcGFyYW1ldGVycywgYW5kIGFsc28gcGFyYW1ldGVycyBvbiBhIGdpdmVuCisgICAgICogcG9ydCBvciBzdHJlYW0uIFRoZXkgbXVzdCBiZSB1bmlxdWUgZm9yIHRoZSBzZXQgb2YgZ2xvYmFsIHBhcmFtZXRlcnMsIGFzIHdlbGwgYXMgZm9yIHRoZQorICAgICAqIHNldCBvZiBwYXJhbWV0ZXJzIG9uIGVhY2ggcG9ydCBvciBlYWNoIHN0cmVhbSwgYnV0IHRoZSBzYW1lIGNvcmUgaW5kZXggY2FuIGJlIHVzZWQgZm9yCisgICAgICogcGFyYW1ldGVycyBvbiBkaWZmZXJlbnQgc3RyZWFtcyBvciBwb3J0cywgYXMgd2VsbCBhcyBmb3IgZ2xvYmFsIHBhcmFtZXRlcnMgYW5kIHBvcnQvc3RyZWFtCisgICAgICogcGFyYW1ldGVycy4KKyAgICAgKgorICAgICAqIE11bHRpcGxlIHBhcmFtZXRlciB0eXBlcyBjYW4gc2hhcmUgdGhlIHNhbWUgbGF5b3V0LgorICAgICAqCisgICAgICogXG5vdGUgVGhlIGxheW91dCBmb3IgYWxsIHBhcmFtZXRlcnMgd2l0aCB0aGUgc2FtZSBjb3JlIGluZGV4IGFjcm9zcyBhbGwgY29tcG9uZW50cyBtdXN0CisgICAgICogYmUgaWRlbnRpY2FsLgorICAgICAqLworICAgIHN0cnVjdCBDb3JlSW5kZXggeworICAgIC8vcHVibGljOgorICAgICAgICBlbnVtIDogdWludDMyX3QgeworICAgICAgICAgICAgSVNfRkxFWF9GTEFHID0gMHgwMDAxMDAwMCwKKyAgICAgICAgfTsKKworICAgIHByb3RlY3RlZDoKKyAgICAgICAgZW51bSA6IHVpbnQzMl90IHsKKyAgICAgICAgICAgIEtJTkRfTUFTSyAgICAgID0gMHhDMDAwMDAwMCwKKyAgICAgICAgICAgIEtJTkRfU1RSVUNUICAgID0gMHgwMDAwMDAwMCwKKyAgICAgICAgICAgIEtJTkRfVFVOSU5HICAgID0gMHg0MDAwMDAwMCwKKyAgICAgICAgICAgIEtJTkRfU0VUVElORyAgID0gMHg4MDAwMDAwMCwKKyAgICAgICAgICAgIEtJTkRfSU5GTyAgICAgID0gMHhDMDAwMDAwMCwKKworICAgICAgICAgICAgRElSX01BU0sgICAgICAgPSAweDMwMDAwMDAwLAorICAgICAgICAgICAgRElSX0dMT0JBTCAgICAgPSAweDIwMDAwMDAwLAorICAgICAgICAgICAgRElSX1VOREVGSU5FRCAgPSBESVJfTUFTSywgLy8gTVVTVCBoYXZlIGFsbCBiaXRzIHNldAorICAgICAgICAgICAgRElSX0lOUFVUICAgICAgPSAweDAwMDAwMDAwLAorICAgICAgICAgICAgRElSX09VVFBVVCAgICAgPSAweDEwMDAwMDAwLAorCisgICAgICAgICAgICBJU19TVFJFQU1fRkxBRyAgPSAweDAyMDAwMDAwLAorICAgICAgICAgICAgU1RSRUFNX0lEX01BU0sgID0gMHgwMUZFMDAwMCwKKyAgICAgICAgICAgIFNUUkVBTV9JRF9TSElGVCA9IDE3LAorICAgICAgICAgICAgTUFYX1NUUkVBTV9JRCAgID0gU1RSRUFNX0lEX01BU0sgPj4gU1RSRUFNX0lEX1NISUZULAorICAgICAgICAgICAgU1RSRUFNX01BU0sgICAgID0gSVNfU1RSRUFNX0ZMQUcgfCBTVFJFQU1fSURfTUFTSywKKworICAgICAgICAgICAgSVNfVkVORE9SX0ZMQUcgID0gMHgwMDAwODAwMCwKKyAgICAgICAgICAgIFRZUEVfSU5ERVhfTUFTSyA9IDB4MDAwMEZGRkYsCisgICAgICAgICAgICBDT1JFX01BU0sgICAgICAgPSBUWVBFX0lOREVYX01BU0sgfCBJU19GTEVYX0ZMQUcsCisgICAgICAgIH07CisKKyAgICBwdWJsaWM6CisgICAgICAgIC8vLyBjb25zdHJ1Y3Rvci9jb252ZXJzaW9uIGZyb20gdWludDMyX3QKKyAgICAgICAgaW5saW5lIENvcmVJbmRleCh1aW50MzJfdCBpbmRleCkgOiBtSW5kZXgoaW5kZXgpIHsgfQorCisgICAgICAgIC8vIG5vIGNvbnZlcnNpb24gZnJvbSB1aW50NjRfdAorICAgICAgICBpbmxpbmUgQ29yZUluZGV4KHVpbnQ2NF90IGluZGV4KSA9IGRlbGV0ZTsKKworICAgICAgICAvLy8gcmV0dXJucyB0cnVlIGlmZiB0aGlzIGlzIGEgdmVuZG9yIGV4dGVuc2lvbiBwYXJhbWV0ZXIKKyAgICAgICAgaW5saW5lIGJvb2wgaXNWZW5kb3IoKSBjb25zdCB7IHJldHVybiBtSW5kZXggJiBJU19WRU5ET1JfRkxBRzsgfQorCisgICAgICAgIC8vLyByZXR1cm5zIHRydWUgaWZmIHRoaXMgaXMgYSBmbGV4aWJsZSBwYXJhbWV0ZXIgKHdpdGggdmFyaWFibGUgc2l6ZSkKKyAgICAgICAgaW5saW5lIGJvb2wgaXNGbGV4aWJsZSgpIGNvbnN0IHsgcmV0dXJuIG1JbmRleCAmIElTX0ZMRVhfRkxBRzsgfQorCisgICAgICAgIC8vLyByZXR1cm5zIHRoZSBjb3JlIGluZGV4CisgICAgICAgIC8vLyBUaGlzIGlzIHRoZSBjb21iaW5hdGlvbiBvZiB0aGUgcGFyYW1ldGVyIHR5cGUgaW5kZXggYW5kIHRoZSBmbGV4aWJsZSBmbGFnLgorICAgICAgICBpbmxpbmUgdWludDMyX3QgY29yZUluZGV4KCkgY29uc3QgeyByZXR1cm4gbUluZGV4ICYgQ09SRV9NQVNLOyB9CisKKyAgICAgICAgLy8vIHJldHVybnMgdGhlIHBhcmFtZXRlciB0eXBlIGluZGV4CisgICAgICAgIGlubGluZSB0eXBlX2luZGV4X3QgdHlwZUluZGV4KCkgY29uc3QgeyByZXR1cm4gbUluZGV4ICYgVFlQRV9JTkRFWF9NQVNLOyB9CisKKyAgICAgICAgREVGSU5FX0ZJRUxEX0FORF9NQVNLX0JBU0VEX0NPTVBBUklTT05fT1BFUkFUT1JTKENvcmVJbmRleCwgbUluZGV4LCBDT1JFX01BU0spCisKKyAgICBwcm90ZWN0ZWQ6CisgICAgICAgIHVpbnQzMl90IG1JbmRleDsKKyAgICB9OworCisgICAgLyoqCisgICAgICogVHlwZSBlbmNvbXBhc3NlcyB0aGUgcGFyYW1ldGVyJ3Mga2luZCAodHVuaW5nLCBzZXR0aW5nLCBpbmZvKSwgaXRzIHNjb3BlICh3aGV0aGVyIHRoZQorICAgICAqIHBhcmFtZXRlciBpcyBnbG9iYWwsIGlucHV0IG9yIG91dHB1dCwgYW5kIHdoZXRoZXIgaXQgaXMgZm9yIGEgc3RyZWFtKSBhbmQgdGhlIGl0cyBiYXNlCisgICAgICogaW5kZXggKHdoaWNoIGFsc28gZGV0ZXJtaW5lcyBpdHMgbGF5b3V0KS4KKyAgICAgKi8KKyAgICBzdHJ1Y3QgVHlwZSA6IHB1YmxpYyBDb3JlSW5kZXggeworICAgIC8vcHVibGljOgorICAgICAgICAvLy8gcmV0dXJucyB0cnVlIGlmZiB0aGlzIGlzIGEgZ2xvYmFsIHBhcmFtZXRlciAobm90IGZvciBpbnB1dCBub3Igb3V0cHV0KQorICAgICAgICBpbmxpbmUgYm9vbCBpc0dsb2JhbCgpIGNvbnN0IHsgcmV0dXJuIChtSW5kZXggJiBESVJfTUFTSykgPT0gRElSX0dMT0JBTDsgfQorICAgICAgICAvLy8gcmV0dXJucyB0cnVlIGlmZiB0aGlzIGlzIGFuIGlucHV0IG9yIGlucHV0IHN0cmVhbSBwYXJhbWV0ZXIKKyAgICAgICAgaW5saW5lIGJvb2wgZm9ySW5wdXQoKSBjb25zdCB7IHJldHVybiAobUluZGV4ICYgRElSX01BU0spID09IERJUl9JTlBVVDsgfQorICAgICAgICAvLy8gcmV0dXJucyB0cnVlIGlmZiB0aGlzIGlzIGFuIG91dHB1dCBvciBvdXRwdXQgc3RyZWFtIHBhcmFtZXRlcgorICAgICAgICBpbmxpbmUgYm9vbCBmb3JPdXRwdXQoKSBjb25zdCB7IHJldHVybiAobUluZGV4ICYgRElSX01BU0spID09IERJUl9PVVRQVVQ7IH0KKworICAgICAgICAvLy8gcmV0dXJucyB0cnVlIGlmZiB0aGlzIGlzIGEgc3RyZWFtIHBhcmFtZXRlcgorICAgICAgICBpbmxpbmUgYm9vbCBmb3JTdHJlYW0oKSBjb25zdCB7IHJldHVybiBtSW5kZXggJiBJU19TVFJFQU1fRkxBRzsgfQorICAgICAgICAvLy8gcmV0dXJucyB0cnVlIGlmZiB0aGlzIGlzIGEgcG9ydCAoaW5wdXQgb3Igb3V0cHV0KSBwYXJhbWV0ZXIKKyAgICAgICAgaW5saW5lIGJvb2wgZm9yUG9ydCgpIGNvbnN0ICAgeyByZXR1cm4gIWZvclN0cmVhbSgpICYmICFpc0dsb2JhbCgpOyB9CisKKyAgICAgICAgLy8vIHJldHVybnMgdGhlIHBhcmFtZXRlciB0eXBlOiB0aGUgcGFyYW1ldGVyIGluZGV4IHdpdGhvdXQgdGhlIHN0cmVhbSBJRAorICAgICAgICBpbmxpbmUgdWludDMyX3QgdHlwZSgpIGNvbnN0IHsgcmV0dXJuIG1JbmRleCAmICh+U1RSRUFNX0lEX01BU0spOyB9CisKKyAgICAgICAgLy8vIHJldHVybiB0aGUga2luZCAoc3RydWN0LCBpbmZvLCBzZXR0aW5nIG9yIHR1bmluZykgb2YgdGhpcyBwYXJhbQorICAgICAgICBpbmxpbmUga2luZF90IGtpbmQoKSBjb25zdCB7CisgICAgICAgICAgICBzd2l0Y2ggKG1JbmRleCAmIEtJTkRfTUFTSykgeworICAgICAgICAgICAgICAgIGNhc2UgS0lORF9TVFJVQ1Q6IHJldHVybiBTVFJVQ1Q7CisgICAgICAgICAgICAgICAgY2FzZSBLSU5EX0lORk86IHJldHVybiBJTkZPOworICAgICAgICAgICAgICAgIGNhc2UgS0lORF9TRVRUSU5HOiByZXR1cm4gU0VUVElORzsKKyAgICAgICAgICAgICAgICBjYXNlIEtJTkRfVFVOSU5HOiByZXR1cm4gVFVOSU5HOworICAgICAgICAgICAgICAgIGRlZmF1bHQ6IHJldHVybiBOT05FOyAvLyBzaG91bGQgbm90IGhhcHBlbgorICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgLy8vIGNvbnN0cnVjdG9yL2NvbnZlcnNpb24gZnJvbSB1aW50MzJfdAorICAgICAgICBpbmxpbmUgVHlwZSh1aW50MzJfdCBpbmRleCkgOiBDb3JlSW5kZXgoaW5kZXgpIHsgfQorCisgICAgICAgIC8vIG5vIGNvbnZlcnNpb24gZnJvbSB1aW50NjRfdAorICAgICAgICBpbmxpbmUgVHlwZSh1aW50NjRfdCBpbmRleCkgPSBkZWxldGU7CisKKyAgICAgICAgREVGSU5FX0ZJRUxEX0FORF9NQVNLX0JBU0VEX0NPTVBBUklTT05fT1BFUkFUT1JTKFR5cGUsIG1JbmRleCwgflNUUkVBTV9JRF9NQVNLKQorCisgICAgcHJpdmF0ZToKKyAgICAgICAgZnJpZW5kIHN0cnVjdCBDMlBhcmFtOyAgIC8vIGZvciBzZXRQb3J0KCkKKyAgICAgICAgZnJpZW5kIHN0cnVjdCBDMlR1bmluZzsgIC8vIGZvciBLSU5EX1RVTklORworICAgICAgICBmcmllbmQgc3RydWN0IEMyU2V0dGluZzsgLy8gZm9yIEtJTkRfU0VUVElORworICAgICAgICBmcmllbmQgc3RydWN0IEMySW5mbzsgICAgLy8gZm9yIEtJTkRfSU5GTworICAgICAgICAvLyBmb3IgRElSX0dMT0JBTAorICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBTLCBpbnQgSSwgY2xhc3MgRj4gZnJpZW5kIHN0cnVjdCBDMkdsb2JhbFBhcmFtOworICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBTLCBpbnQgSSwgY2xhc3MgRj4gZnJpZW5kIHN0cnVjdCBDMlBvcnRQYXJhbTsgICAvLyBmb3Iga0RpcioKKyAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgUywgaW50IEksIGNsYXNzIEY+IGZyaWVuZCBzdHJ1Y3QgQzJTdHJlYW1QYXJhbTsgLy8gZm9yIGtEaXIqCisgICAgICAgIGZyaWVuZCBzdHJ1Y3QgX0MyUGFyYW1JbnNwZWN0b3I7IC8vIGZvciB0ZXN0aW5nCisKKyAgICAgICAgLyoqCisgICAgICAgICAqIFNldHMgdGhlIHBvcnQvc3RyZWFtIGRpcmVjdGlvbi4KKyAgICAgICAgICogQHJldHVybiB0cnVlIG9uIHN1Y2Nlc3MsIGZhbHNlIGlmIGNvdWxkIG5vdCBzZXQgZGlyZWN0aW9uIChlLmcuIGl0IGlzIGdsb2JhbCBwYXJhbSkuCisgICAgICAgICAqLworICAgICAgICBpbmxpbmUgYm9vbCBzZXRQb3J0KGJvb2wgb3V0cHV0KSB7CisgICAgICAgICAgICBpZiAoaXNHbG9iYWwoKSkgeworICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgbUluZGV4ID0gKG1JbmRleCAmIH5ESVJfTUFTSykgfCAob3V0cHV0ID8gRElSX09VVFBVVCA6IERJUl9JTlBVVCk7CisgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9OworCisgICAgLyoqCisgICAgICogaW5kZXggZW5jb21wYXNzZXMgYWxsIHJlbWFpbmluZyBpbmZvcm1hdGlvbjogYmFzaWNhbGx5IHRoZSBzdHJlYW0gSUQuCisgICAgICovCisgICAgc3RydWN0IEluZGV4IDogcHVibGljIFR5cGUgeworICAgICAgICAvLy8gcmV0dXJucyB0aGUgaW5kZXggYXMgdWludDMyX3QKKyAgICAgICAgaW5saW5lIG9wZXJhdG9yIHVpbnQzMl90KCkgY29uc3QgeyByZXR1cm4gbUluZGV4OyB9CisKKyAgICAgICAgLy8vIGNvbnN0cnVjdG9yL2NvbnZlcnNpb24gZnJvbSB1aW50MzJfdAorICAgICAgICBpbmxpbmUgSW5kZXgodWludDMyX3QgaW5kZXgpIDogVHlwZShpbmRleCkgeyB9CisKKyAgICAgICAgLy8vIGNvcHkgY29uc3RydWN0b3IKKyAgICAgICAgaW5saW5lIEluZGV4KGNvbnN0IEluZGV4ICZpbmRleCkgPSBkZWZhdWx0OworCisgICAgICAgIC8vIG5vIGNvbnZlcnNpb24gZnJvbSB1aW50NjRfdAorICAgICAgICBpbmxpbmUgSW5kZXgodWludDY0X3QgaW5kZXgpID0gZGVsZXRlOworCisgICAgICAgIC8vLyByZXR1cm5zIHRoZSBzdHJlYW0gSUQgb3IgfjAgaWYgbm90IGEgc3RyZWFtCisgICAgICAgIGlubGluZSB1bnNpZ25lZCBzdHJlYW0oKSBjb25zdCB7CisgICAgICAgICAgICByZXR1cm4gZm9yU3RyZWFtKCkgPyByYXdTdHJlYW0oKSA6IH4wVTsKKyAgICAgICAgfQorCisgICAgICAgIC8vLyBSZXR1cm5zIGFuIGluZGV4IHdpdGggc3RyZWFtIGZpZWxkIHNldCB0byBnaXZlbiBzdHJlYW0uCisgICAgICAgIGlubGluZSBJbmRleCB3aXRoU3RyZWFtKHVuc2lnbmVkIHN0cmVhbSkgY29uc3QgeworICAgICAgICAgICAgSW5kZXggaXggPSBtSW5kZXg7CisgICAgICAgICAgICAodm9pZClpeC5zZXRTdHJlYW0oc3RyZWFtKTsKKyAgICAgICAgICAgIHJldHVybiBpeDsKKyAgICAgICAgfQorCisgICAgICAgIC8vLyBzZXRzIHRoZSBwb3J0IChkaXJlY3Rpb24pLiBSZXR1cm5zIHRydWUgaWZmIHN1Y2Nlc3NmdWwuCisgICAgICAgIGlubGluZSBJbmRleCB3aXRoUG9ydChib29sIG91dHB1dCkgY29uc3QgeworICAgICAgICAgICAgSW5kZXggaXggPSBtSW5kZXg7CisgICAgICAgICAgICAodm9pZClpeC5zZXRQb3J0KG91dHB1dCk7CisgICAgICAgICAgICByZXR1cm4gaXg7CisgICAgICAgIH0KKworICAgICAgICBERUZJTkVfRklFTERfQkFTRURfQ09NUEFSSVNPTl9PUEVSQVRPUlMoSW5kZXgsIG1JbmRleCkKKworICAgIHByaXZhdGU6CisgICAgICAgIGZyaWVuZCBzdHJ1Y3QgQzJQYXJhbTsgICAgICAgICAgIC8vIGZvciBzZXRTdHJlYW0sIE1ha2VTdHJlYW1JZCwgaXNWYWxpZAorICAgICAgICBmcmllbmQgc3RydWN0IF9DMlBhcmFtSW5zcGVjdG9yOyAvLyBmb3IgdGVzdGluZworCisgICAgICAgIC8qKgorICAgICAgICAgKiBAcmV0dXJuIHRydWUgaWYgdGhlIHR5cGUgaXMgdmFsaWQsIGUuZy4gZGlyZWN0aW9uIGlzIG5vdCB1bmRlZmluZWQgQU5ECisgICAgICAgICAqIHN0cmVhbSBpcyAwIGlmIG5vdCBhIHN0cmVhbSBwYXJhbS4KKyAgICAgICAgICovCisgICAgICAgIGlubGluZSBib29sIGlzVmFsaWQoKSBjb25zdCB7CisgICAgICAgICAgICAvLyB0aGVyZSBpcyBubyBUeXBlOjppc1ZhbGlkIChldmVuIHRob3VnaCBzb21lIG9mIHRoaXMgY2hlY2sgY291bGQgYmUKKyAgICAgICAgICAgIC8vIHBlcmZvcm1lZCBvbiB0eXBlcykgYXMgdGhpcyBpcyBvbmx5IHVzZWQgb24gaW5kZXguLi4KKyAgICAgICAgICAgIHJldHVybiAoZm9yU3RyZWFtKCkgPyByYXdTdHJlYW0oKSA8IE1BWF9TVFJFQU1fSUQgOiByYXdTdHJlYW0oKSA9PSAwKQorICAgICAgICAgICAgICAgICAgICAmJiAobUluZGV4ICYgRElSX01BU0spICE9IERJUl9VTkRFRklORUQ7CisgICAgICAgIH0KKworICAgICAgICAvLy8gcmV0dXJucyB0aGUgcmF3IHN0cmVhbSBJRCBmaWVsZAorICAgICAgICBpbmxpbmUgdW5zaWduZWQgcmF3U3RyZWFtKCkgY29uc3QgeworICAgICAgICAgICAgcmV0dXJuIChtSW5kZXggJiBTVFJFQU1fSURfTUFTSykgPj4gU1RSRUFNX0lEX1NISUZUOworICAgICAgICB9CisKKyAgICAgICAgLy8vIHJldHVybnMgdGhlIHN0cmVhbUlkIGJpdGZpZWxkIGZvciBhIGdpdmVuIHxzdHJlYW18LiBJZiBzdHJlYW0gaXMgaW52YWxpZCwKKyAgICAgICAgLy8vIHJldHVybnMgYW4gaW52YWxpZCBiaXRmaWVsZC4KKyAgICAgICAgaW5saW5lIHN0YXRpYyB1aW50MzJfdCBNYWtlU3RyZWFtSWQodW5zaWduZWQgc3RyZWFtKSB7CisgICAgICAgICAgICAvLyBzYXR1cmF0ZSBzdHJlYW0gSUQgKG1heCB2YWx1ZSBpcyBpbnZhbGlkKQorICAgICAgICAgICAgaWYgKHN0cmVhbSA+IE1BWF9TVFJFQU1fSUQpIHsKKyAgICAgICAgICAgICAgICBzdHJlYW0gPSBNQVhfU1RSRUFNX0lEOworICAgICAgICAgICAgfQorICAgICAgICAgICAgcmV0dXJuIChzdHJlYW0gPDwgU1RSRUFNX0lEX1NISUZUKSAmIFNUUkVBTV9JRF9NQVNLOworICAgICAgICB9CisKKyAgICAgICAgaW5saW5lIGJvb2wgY29udmVydFRvU3RyZWFtKGJvb2wgb3V0cHV0LCB1bnNpZ25lZCBzdHJlYW0pIHsKKyAgICAgICAgICAgIG1JbmRleCA9IChtSW5kZXggJiB+RElSX01BU0spIHwgSVNfU1RSRUFNX0ZMQUc7CisgICAgICAgICAgICAodm9pZClzZXRQb3J0KG91dHB1dCk7CisgICAgICAgICAgICByZXR1cm4gc2V0U3RyZWFtKHN0cmVhbSk7CisgICAgICAgIH0KKworICAgICAgICBpbmxpbmUgdm9pZCBjb252ZXJ0VG9Qb3J0KGJvb2wgb3V0cHV0KSB7CisgICAgICAgICAgICBtSW5kZXggPSAobUluZGV4ICYgfihESVJfTUFTSyB8IElTX1NUUkVBTV9GTEFHKSk7CisgICAgICAgICAgICAodm9pZClzZXRQb3J0KG91dHB1dCk7CisgICAgICAgIH0KKworICAgICAgICBpbmxpbmUgdm9pZCBjb252ZXJ0VG9HbG9iYWwoKSB7CisgICAgICAgICAgICBtSW5kZXggPSAobUluZGV4ICYgfihESVJfTUFTSyB8IElTX1NUUkVBTV9GTEFHKSkgfCBESVJfR0xPQkFMOworICAgICAgICB9CisKKyAgICAgICAgLyoqCisgICAgICAgICAqIFNldHMgdGhlIHN0cmVhbSBpbmRleC4KKyAgICAgICAgICogXHJldHVybiB0cnVlIG9uIHN1Y2Nlc3MsIGZhbHNlIGlmIGNvdWxkIG5vdCBzZXQgaW5kZXggKGUuZy4gbm90IGEgc3RyZWFtIHBhcmFtKS4KKyAgICAgICAgICovCisgICAgICAgIGlubGluZSBib29sIHNldFN0cmVhbSh1bnNpZ25lZCBzdHJlYW0pIHsKKyAgICAgICAgICAgIGlmIChmb3JTdHJlYW0oKSkgeworICAgICAgICAgICAgICAgIG1JbmRleCA9IChtSW5kZXggJiB+U1RSRUFNX0lEX01BU0spIHwgTWFrZVN0cmVhbUlkKHN0cmVhbSk7CisgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMtPnN0cmVhbSgpIDwgTUFYX1NUUkVBTV9JRDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgIH07CisKK3B1YmxpYzoKKyAgICAvLyBwdWJsaWMgZ2V0dGVycyBmb3IgSW5kZXggbWV0aG9kcworCisgICAgLy8vIHJldHVybnMgdHJ1ZSBpZmYgdGhpcyBpcyBhIHZlbmRvciBleHRlbnNpb24gcGFyYW1ldGVyCisgICAgaW5saW5lIGJvb2wgaXNWZW5kb3IoKSBjb25zdCB7IHJldHVybiBfbUluZGV4LmlzVmVuZG9yKCk7IH0KKyAgICAvLy8gcmV0dXJucyB0cnVlIGlmZiB0aGlzIGlzIGEgZmxleGlibGUgcGFyYW1ldGVyCisgICAgaW5saW5lIGJvb2wgaXNGbGV4aWJsZSgpIGNvbnN0IHsgcmV0dXJuIF9tSW5kZXguaXNGbGV4aWJsZSgpOyB9CisgICAgLy8vIHJldHVybnMgdHJ1ZSBpZmYgdGhpcyBpcyBhIGdsb2JhbCBwYXJhbWV0ZXIgKG5vdCBmb3IgaW5wdXQgbm9yIG91dHB1dCkKKyAgICBpbmxpbmUgYm9vbCBpc0dsb2JhbCgpIGNvbnN0IHsgcmV0dXJuIF9tSW5kZXguaXNHbG9iYWwoKTsgfQorICAgIC8vLyByZXR1cm5zIHRydWUgaWZmIHRoaXMgaXMgYW4gaW5wdXQgb3IgaW5wdXQgc3RyZWFtIHBhcmFtZXRlcgorICAgIGlubGluZSBib29sIGZvcklucHV0KCkgY29uc3QgeyByZXR1cm4gX21JbmRleC5mb3JJbnB1dCgpOyB9CisgICAgLy8vIHJldHVybnMgdHJ1ZSBpZmYgdGhpcyBpcyBhbiBvdXRwdXQgb3Igb3V0cHV0IHN0cmVhbSBwYXJhbWV0ZXIKKyAgICBpbmxpbmUgYm9vbCBmb3JPdXRwdXQoKSBjb25zdCB7IHJldHVybiBfbUluZGV4LmZvck91dHB1dCgpOyB9CisKKyAgICAvLy8gcmV0dXJucyB0cnVlIGlmZiB0aGlzIGlzIGEgc3RyZWFtIHBhcmFtZXRlcgorICAgIGlubGluZSBib29sIGZvclN0cmVhbSgpIGNvbnN0IHsgcmV0dXJuIF9tSW5kZXguZm9yU3RyZWFtKCk7IH0KKyAgICAvLy8gcmV0dXJucyB0cnVlIGlmZiB0aGlzIGlzIGEgcG9ydCAoaW5wdXQgb3Igb3V0cHV0KSBwYXJhbWV0ZXIKKyAgICBpbmxpbmUgYm9vbCBmb3JQb3J0KCkgY29uc3QgICB7IHJldHVybiBfbUluZGV4LmZvclBvcnQoKTsgfQorCisgICAgLy8vIHJldHVybnMgdGhlIHN0cmVhbSBJRCBvciB+MCBpZiBub3QgYSBzdHJlYW0KKyAgICBpbmxpbmUgdW5zaWduZWQgc3RyZWFtKCkgY29uc3QgeyByZXR1cm4gX21JbmRleC5zdHJlYW0oKTsgfQorCisgICAgLy8vIHJldHVybnMgdGhlIHBhcmFtZXRlciB0eXBlOiB0aGUgcGFyYW1ldGVyIGluZGV4IHdpdGhvdXQgdGhlIHN0cmVhbSBJRAorICAgIGlubGluZSBUeXBlIHR5cGUoKSBjb25zdCB7IHJldHVybiBfbUluZGV4LnR5cGUoKTsgfQorCisgICAgLy8vIHJldHVybnMgdGhlIGluZGV4IG9mIHRoaXMgcGFyYW1ldGVyCisgICAgLy8vIFx0b2RvOiBzaG91bGQgd2UgcmVzdHJpY3QgdGhpcyB0byBDMlBhcmFtRmllbGQ/CisgICAgaW5saW5lIHVpbnQzMl90IGluZGV4KCkgY29uc3QgeyByZXR1cm4gKHVpbnQzMl90KV9tSW5kZXg7IH0KKworICAgIC8vLyByZXR1cm5zIHRoZSBjb3JlIGluZGV4IG9mIHRoaXMgcGFyYW1ldGVyCisgICAgaW5saW5lIENvcmVJbmRleCBjb3JlSW5kZXgoKSBjb25zdCB7IHJldHVybiBfbUluZGV4LmNvcmVJbmRleCgpOyB9CisKKyAgICAvLy8gcmV0dXJucyB0aGUga2luZCBvZiB0aGlzIHBhcmFtZXRlcgorICAgIGlubGluZSBraW5kX3Qga2luZCgpIGNvbnN0IHsgcmV0dXJuIF9tSW5kZXgua2luZCgpOyB9CisKKyAgICAvLy8gcmV0dXJucyB0aGUgc2l6ZSBvZiB0aGUgcGFyYW1ldGVyIG9yIDAgaWYgdGhlIHBhcmFtZXRlciBpcyBpbnZhbGlkCisgICAgaW5saW5lIHNpemVfdCBzaXplKCkgY29uc3QgeyByZXR1cm4gX21TaXplOyB9CisKKyAgICAvLy8gcmV0dXJucyB0cnVlIGlmZiB0aGUgcGFyYW1ldGVyIGlzIHZhbGlkCisgICAgaW5saW5lIG9wZXJhdG9yIGJvb2woKSBjb25zdCB7IHJldHVybiBfbUluZGV4LmlzVmFsaWQoKSAmJiBfbVNpemUgPiAwOyB9CisKKyAgICAvLy8gcmV0dXJucyB0cnVlIGlmZiB0aGUgcGFyYW1ldGVyIGlzIGludmFsaWQKKyAgICBpbmxpbmUgYm9vbCBvcGVyYXRvciEoKSBjb25zdCB7IHJldHVybiAhb3BlcmF0b3IgYm9vbCgpOyB9CisKKyAgICAvLyBlcXVhbGl0eSBpcyBkb25lIGJ5IG1lbWNtcCAodXNlIGVxdWFscygpIHRvIHByZXZlbnQgYW55IG92ZXJyZWFkKQorICAgIGlubGluZSBib29sIG9wZXJhdG9yPT0oY29uc3QgQzJQYXJhbSAmbykgY29uc3QgeworICAgICAgICByZXR1cm4gZXF1YWxzKG8pICYmIG1lbWNtcCh0aGlzLCAmbywgX21TaXplKSA9PSAwOworICAgIH0KKyAgICBpbmxpbmUgYm9vbCBvcGVyYXRvciE9KGNvbnN0IEMyUGFyYW0gJm8pIGNvbnN0IHsgcmV0dXJuICFvcGVyYXRvcj09KG8pOyB9CisKKyAgICAvLy8gc2FmZShyKSB0eXBlIGNhc3QgZnJvbSBwb2ludGVyIGFuZCBzaXplCisgICAgaW5saW5lIHN0YXRpYyBDMlBhcmFtKiBGcm9tKHZvaWQgKmFkZHIsIHNpemVfdCBsZW4pIHsKKyAgICAgICAgLy8gX21TaXplIG11c3QgZml0IGludG8gc2l6ZSwgYnV0IHJlYWxseSBDMlBhcmFtIG11c3QgYWxzbyB0byBiZSBhIHZhbGlkIHBhcmFtCisgICAgICAgIGlmIChsZW4gPCBzaXplb2YoQzJQYXJhbSkpIHsKKyAgICAgICAgICAgIHJldHVybiBudWxscHRyOworICAgICAgICB9CisgICAgICAgIC8vIF9tU2l6ZSBtdXN0IG1hdGNoIGxlbmd0aAorICAgICAgICBDMlBhcmFtICpwYXJhbSA9IChDMlBhcmFtKilhZGRyOworICAgICAgICBpZiAocGFyYW0tPl9tU2l6ZSAhPSBsZW4pIHsKKyAgICAgICAgICAgIHJldHVybiBudWxscHRyOworICAgICAgICB9CisgICAgICAgIHJldHVybiBwYXJhbTsKKyAgICB9CisKKyAgICAvLy8gUmV0dXJucyBtYW5hZ2VkIGNsb25lIG9mIHxvcmlnfCBhdCBoZWFwLgorICAgIGlubGluZSBzdGF0aWMgc3RkOjp1bmlxdWVfcHRyPEMyUGFyYW0+IENvcHkoY29uc3QgQzJQYXJhbSAmb3JpZykgeworICAgICAgICBpZiAob3JpZy5zaXplKCkgPT0gMCkgeworICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgICAgIH0KKyAgICAgICAgdm9pZCAqbWVtID0gOjpvcGVyYXRvciBuZXcgKG9yaWcuc2l6ZSgpKTsKKyAgICAgICAgQzJQYXJhbSAqcGFyYW0gPSBuZXcgKG1lbSkgQzJQYXJhbShvcmlnLnNpemUoKSwgb3JpZy5fbUluZGV4KTsKKyAgICAgICAgcGFyYW0tPnVwZGF0ZUZyb20ob3JpZyk7CisgICAgICAgIHJldHVybiBzdGQ6OnVuaXF1ZV9wdHI8QzJQYXJhbT4ocGFyYW0pOworICAgIH0KKworICAgIC8vLyBSZXR1cm5zIG1hbmFnZWQgY2xvbmUgb2YgfG9yaWd8IGFzIGEgc3RyZWFtIHBhcmFtZXRlciBhdCBoZWFwLgorICAgIGlubGluZSBzdGF0aWMgc3RkOjp1bmlxdWVfcHRyPEMyUGFyYW0+IENvcHlBc1N0cmVhbSgKKyAgICAgICAgICAgIGNvbnN0IEMyUGFyYW0gJm9yaWcsIGJvb2wgb3V0cHV0LCB1bnNpZ25lZCBzdHJlYW0pIHsKKyAgICAgICAgc3RkOjp1bmlxdWVfcHRyPEMyUGFyYW0+IGNvcHkgPSBDb3B5KG9yaWcpOworICAgICAgICBpZiAoY29weSkgeworICAgICAgICAgICAgY29weS0+X21JbmRleC5jb252ZXJ0VG9TdHJlYW0ob3V0cHV0LCBzdHJlYW0pOworICAgICAgICB9CisgICAgICAgIHJldHVybiBjb3B5OworICAgIH0KKworICAgIC8vLyBSZXR1cm5zIG1hbmFnZWQgY2xvbmUgb2YgfG9yaWd8IGFzIGEgcG9ydCBwYXJhbWV0ZXIgYXQgaGVhcC4KKyAgICBpbmxpbmUgc3RhdGljIHN0ZDo6dW5pcXVlX3B0cjxDMlBhcmFtPiBDb3B5QXNQb3J0KGNvbnN0IEMyUGFyYW0gJm9yaWcsIGJvb2wgb3V0cHV0KSB7CisgICAgICAgIHN0ZDo6dW5pcXVlX3B0cjxDMlBhcmFtPiBjb3B5ID0gQ29weShvcmlnKTsKKyAgICAgICAgaWYgKGNvcHkpIHsKKyAgICAgICAgICAgIGNvcHktPl9tSW5kZXguY29udmVydFRvUG9ydChvdXRwdXQpOworICAgICAgICB9CisgICAgICAgIHJldHVybiBjb3B5OworICAgIH0KKworICAgIC8vLyBSZXR1cm5zIG1hbmFnZWQgY2xvbmUgb2YgfG9yaWd8IGFzIGEgZ2xvYmFsIHBhcmFtZXRlciBhdCBoZWFwLgorICAgIGlubGluZSBzdGF0aWMgc3RkOjp1bmlxdWVfcHRyPEMyUGFyYW0+IENvcHlBc0dsb2JhbChjb25zdCBDMlBhcmFtICZvcmlnKSB7CisgICAgICAgIHN0ZDo6dW5pcXVlX3B0cjxDMlBhcmFtPiBjb3B5ID0gQ29weShvcmlnKTsKKyAgICAgICAgaWYgKGNvcHkpIHsKKyAgICAgICAgICAgIGNvcHktPl9tSW5kZXguY29udmVydFRvR2xvYmFsKCk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIGNvcHk7CisgICAgfQorCisjaWYgMAorICAgIHRlbXBsYXRlPHR5cGVuYW1lIFAsIGNsYXNzPWRlY2x0eXBlKEMyUGFyYW0oUCgpKSk+CisgICAgUCAqQXMoKSB7IHJldHVybiBQOjpGcm9tKHRoaXMpOyB9CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgUD4KKyAgICBjb25zdCBQICpBcygpIGNvbnN0IHsgcmV0dXJuIGNvbnN0X2Nhc3Q8Y29uc3QgUCo+KFA6OkZyb20oY29uc3RfY2FzdDxDMlBhcmFtKj4odGhpcykpKTsgfQorI2VuZGlmCisKK3Byb3RlY3RlZDoKKyAgICAvLy8gc2V0cyB0aGUgc3RyZWFtIGZpZWxkLiBSZXR1cm5zIHRydWUgaWZmIHN1Y2Nlc3NmdWwuCisgICAgaW5saW5lIGJvb2wgc2V0U3RyZWFtKHVuc2lnbmVkIHN0cmVhbSkgeworICAgICAgICByZXR1cm4gX21JbmRleC5zZXRTdHJlYW0oc3RyZWFtKTsKKyAgICB9CisKKyAgICAvLy8gc2V0cyB0aGUgcG9ydCAoZGlyZWN0aW9uKS4gUmV0dXJucyB0cnVlIGlmZiBzdWNjZXNzZnVsLgorICAgIGlubGluZSBib29sIHNldFBvcnQoYm9vbCBvdXRwdXQpIHsKKyAgICAgICAgcmV0dXJuIF9tSW5kZXguc2V0UG9ydChvdXRwdXQpOworICAgIH0KKworcHVibGljOgorICAgIC8vLyBpbnZhbGlkYXRlIHRoaXMgcGFyYW1ldGVyLiBUaGVyZSBpcyBubyByZWNvdmVyeSBmcm9tIHRoaXMgY2FsbDsgZS5nLiBwYXJhbWV0ZXIKKyAgICAvLy8gY2Fubm90IGJlICdjb3JyZWN0ZWQnIHRvIGJlIHZhbGlkLgorICAgIGlubGluZSB2b2lkIGludmFsaWRhdGUoKSB7IF9tU2l6ZSA9IDA7IH0KKworICAgIC8vIGlmIG90aGVyIGlzIHRoZSBzYW1lIGtpbmQgb2YgKHZhbGlkKSBwYXJhbSBhcyB0aGlzLCBjb3B5IGl0IGludG8gdGhpcyBhbmQgcmV0dXJuIHRydWUuCisgICAgLy8gb3RoZXJ3aXNlLCBkbyBub3QgY29weSBhbnl0aGluZywgYW5kIHJldHVybiBmYWxzZS4KKyAgICBpbmxpbmUgYm9vbCB1cGRhdGVGcm9tKGNvbnN0IEMyUGFyYW0gJm90aGVyKSB7CisgICAgICAgIGlmIChvdGhlci5fbVNpemUgPD0gX21TaXplICYmIG90aGVyLl9tSW5kZXggPT0gX21JbmRleCAmJiBfbVNpemUgPiAwKSB7CisgICAgICAgICAgICBtZW1jcHkodGhpcywgJm90aGVyLCBvdGhlci5fbVNpemUpOworICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworcHJvdGVjdGVkOgorICAgIC8vIHJldHVybnMgfG98IGlmIGl0IGlzIGEgbnVsbCBwdHIsIG9yIGlmIGNhbiBzdWl0YWJseSBiZSBhIHBhcmFtIG9mIGdpdmVuIHx0eXBlfCAoZS5nLiBoYXMKKyAgICAvLyBzYW1lIHR5cGUgKGlnbm9yaW5nIHN0cmVhbSBJRCksIGFuZCBzaXplKS4gT3RoZXJ3aXNlLCByZXR1cm5zIG51bGwuIElmIHxjaGVja0RpcnwgaXMgZmFsc2UsCisgICAgLy8gYWxsb3cgdW5kZWZpbmVkIG9yIGRpZmZlcmVudCBkaXJlY3Rpb24gKGUuZy4gYXMgY29uc3RydWN0ZWQgZnJvbSBDMlBvcnRQYXJhbSgpIHZzLgorICAgIC8vIEMyUG9ydFBhcmFtOjppbnB1dCksIGJ1dCBzdGlsbCByZXF1aXJlIGVxdWl2YWxlbnQgdHlwZSAoc3RyZWFtLCBwb3J0IG9yIGdsb2JhbCk7IG90aGVyd2lzZSwKKyAgICAvLyByZXR1cm4gbnVsbC4KKyAgICBpbmxpbmUgc3RhdGljIGNvbnN0IEMyUGFyYW0qIElmU3VpdGFibGUoCisgICAgICAgICAgICBjb25zdCBDMlBhcmFtKiBvLCBzaXplX3Qgc2l6ZSwgVHlwZSB0eXBlLCBzaXplX3QgZmxleFNpemUgPSAwLCBib29sIGNoZWNrRGlyID0gdHJ1ZSkgeworICAgICAgICBpZiAobyA9PSBudWxscHRyIHx8IG8tPl9tU2l6ZSA8IHNpemUgfHwgKGZsZXhTaXplICYmICgoby0+X21TaXplIC0gc2l6ZSkgJSBmbGV4U2l6ZSkpKSB7CisgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAgICAgfSBlbHNlIGlmIChjaGVja0RpcikgeworICAgICAgICAgICAgcmV0dXJuIG8tPl9tSW5kZXgudHlwZSgpID09IHR5cGUubUluZGV4ID8gbyA6IG51bGxwdHI7CisgICAgICAgIH0gZWxzZSBpZiAoby0+X21JbmRleC5pc0dsb2JhbCgpKSB7CisgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHJldHVybiAoKG8tPl9tSW5kZXgudHlwZSgpIF4gdHlwZS5tSW5kZXgpICYgflR5cGU6OkRJUl9NQVNLKSA/IG51bGxwdHIgOiBvOworICAgICAgICB9CisgICAgfQorCisgICAgLy8vIGJhc2UgY29uc3RydWN0b3IKKyAgICBpbmxpbmUgQzJQYXJhbSh1aW50MzJfdCBwYXJhbVNpemUsIEluZGV4IHBhcmFtSW5kZXgpCisgICAgICAgIDogX21TaXplKHBhcmFtU2l6ZSksCisgICAgICAgICAgX21JbmRleChwYXJhbUluZGV4KSB7CisgICAgICAgIGlmIChwYXJhbVNpemUgPiBzaXplb2YoQzJQYXJhbSkpIHsKKyAgICAgICAgICAgIG1lbXNldCh0aGlzICsgMSwgMCwgcGFyYW1TaXplIC0gc2l6ZW9mKEMyUGFyYW0pKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIC8vLyBiYXNlIGNvbnN0cnVjdG9yIHdpdGggc3RyZWFtIHNldAorICAgIGlubGluZSBDMlBhcmFtKHVpbnQzMl90IHBhcmFtU2l6ZSwgSW5kZXggcGFyYW1JbmRleCwgdW5zaWduZWQgc3RyZWFtKQorICAgICAgICA6IF9tU2l6ZShwYXJhbVNpemUpLAorICAgICAgICAgIF9tSW5kZXgocGFyYW1JbmRleCB8IEluZGV4OjpNYWtlU3RyZWFtSWQoc3RyZWFtKSkgeworICAgICAgICBpZiAocGFyYW1TaXplID4gc2l6ZW9mKEMyUGFyYW0pKSB7CisgICAgICAgICAgICBtZW1zZXQodGhpcyArIDEsIDAsIHBhcmFtU2l6ZSAtIHNpemVvZihDMlBhcmFtKSk7CisgICAgICAgIH0KKyAgICAgICAgaWYgKCFmb3JTdHJlYW0oKSkgeworICAgICAgICAgICAgaW52YWxpZGF0ZSgpOworICAgICAgICB9CisgICAgfQorCitwcml2YXRlOgorICAgIGZyaWVuZCBzdHJ1Y3QgX0MyUGFyYW1JbnNwZWN0b3I7IC8vIGZvciB0ZXN0aW5nCisKKyAgICAvLy8gcmV0dXJucyB0cnVlIGlmZiB8b3wgaGFzIHRoZSBzYW1lIHNpemUgYW5kIGluZGV4IGFzIHRoaXMuIFRoaXMgcGVyZm9ybXMgdGhlCisgICAgLy8vIGJhc2ljIGNoZWNrIGZvciBlcXVhbGl0eS4KKyAgICBpbmxpbmUgYm9vbCBlcXVhbHMoY29uc3QgQzJQYXJhbSAmbykgY29uc3QgeworICAgICAgICByZXR1cm4gX21TaXplID09IG8uX21TaXplICYmIF9tSW5kZXggPT0gby5fbUluZGV4OworICAgIH0KKworICAgIHVpbnQzMl90IF9tU2l6ZTsKKyAgICBJbmRleCBfbUluZGV4OworfTsKKworLy8vIFxpbmdyb3VwIGludGVybmFsCisvLy8gYWxsb3cgQzJQYXJhbXMgYWNjZXNzIHRvIHByaXZhdGUgbWV0aG9kcywgZS5nLiBjb25zdHJ1Y3RvcnMKKyNkZWZpbmUgQzJQQVJBTV9NQUtFX0ZSSUVORFMgXAorICAgIHRlbXBsYXRlPHR5cGVuYW1lIFUsIHR5cGVuYW1lIFMsIGludCBJLCBjbGFzcyBGPiBmcmllbmQgc3RydWN0IEMyR2xvYmFsUGFyYW07IFwKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBVLCB0eXBlbmFtZSBTLCBpbnQgSSwgY2xhc3MgRj4gZnJpZW5kIHN0cnVjdCBDMlBvcnRQYXJhbTsgXAorICAgIHRlbXBsYXRlPHR5cGVuYW1lIFUsIHR5cGVuYW1lIFMsIGludCBJLCBjbGFzcyBGPiBmcmllbmQgc3RydWN0IEMyU3RyZWFtUGFyYW07IFwKKworLyoqCisgKiBTZXR0aW5nIGJhc2Ugc3RydWN0dXJlIGZvciBjb21wb25lbnQgbWV0aG9kIHNpZ25hdHVyZXMuIFdyYXAgY29uc3RydWN0b3JzLgorICovCitzdHJ1Y3QgQzJTZXR0aW5nIDogcHVibGljIEMyUGFyYW0geworcHJvdGVjdGVkOgorICAgIHRlbXBsYXRlPHR5cGVuYW1lIC4uLkFyZ3M+CisgICAgaW5saW5lIEMyU2V0dGluZyhjb25zdCBBcmdzKCYuLi4gYXJncykpIDogQzJQYXJhbShhcmdzLi4uKSB7IH0KK3B1YmxpYzogLy8gVE9ETworICAgIGVudW0gOiB1aW50MzJfdCB7IFBBUkFNX0tJTkQgPSBUeXBlOjpLSU5EX1NFVFRJTkcgfTsKK307CisKKy8qKgorICogVHVuaW5nIGJhc2Ugc3RydWN0dXJlIGZvciBjb21wb25lbnQgbWV0aG9kIHNpZ25hdHVyZXMuIFdyYXAgY29uc3RydWN0b3JzLgorICovCitzdHJ1Y3QgQzJUdW5pbmcgOiBwdWJsaWMgQzJTZXR0aW5nIHsKK3Byb3RlY3RlZDoKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSAuLi5BcmdzPgorICAgIGlubGluZSBDMlR1bmluZyhjb25zdCBBcmdzKCYuLi4gYXJncykpIDogQzJTZXR0aW5nKGFyZ3MuLi4pIHsgfQorcHVibGljOiAvLyBUT0RPCisgICAgZW51bSA6IHVpbnQzMl90IHsgUEFSQU1fS0lORCA9IFR5cGU6OktJTkRfVFVOSU5HIH07Cit9OworCisvKioKKyAqIEluZm8gYmFzZSBzdHJ1Y3R1cmUgZm9yIGNvbXBvbmVudCBtZXRob2Qgc2lnbmF0dXJlcy4gV3JhcCBjb25zdHJ1Y3RvcnMuCisgKi8KK3N0cnVjdCBDMkluZm8gOiBwdWJsaWMgQzJQYXJhbSB7Citwcm90ZWN0ZWQ6CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgLi4uQXJncz4KKyAgICBpbmxpbmUgQzJJbmZvKGNvbnN0IEFyZ3MoJi4uLiBhcmdzKSkgOiBDMlBhcmFtKGFyZ3MuLi4pIHsgfQorcHVibGljOiAvLyBUT0RPCisgICAgZW51bSA6IHVpbnQzMl90IHsgUEFSQU1fS0lORCA9IFR5cGU6OktJTkRfSU5GTyB9OworfTsKKworLyoqCisgKiBTdHJ1Y3R1cmUgdW5pcXVlbHkgc3BlY2lmeWluZyBhIGZpZWxkIGluIGFuIGFyYml0cmFyeSBzdHJ1Y3R1cmUuCisgKgorICogXG5vdGUgVGhpcyBzdHJ1Y3R1cmUgaXMgdXNlZCBkaWZmZXJlbnRseSBpbiBDMkZpZWxkRGVzY3JpcHRvciB0bworICogaWRlbnRpZnkgYXJyYXkgZmllbGRzLCBzdWNoIHRoYXQgX21TaXplIGlzIHRoZSBzaXplIG9mIGVhY2ggZWxlbWVudC4gVGhpcyBpcworICogYmVjYXVzZSB0aGUgZmllbGQgZGVzY3JpcHRvciBjb250YWlucyB0aGUgYXJyYXktbGVuZ3RoLCBhbmQgd2Ugd2FudCB0byBrZWVwCisgKiBhIHJlbGV2YW50IGVsZW1lbnQgc2l6ZSBmb3IgdmFyaWFibGUgbGVuZ3RoIGFycmF5cy4KKyAqLworc3RydWN0IF9DMkZpZWxkSWQgeworLy9wdWJsaWM6CisgICAgLyoqCisgICAgICogQ29uc3RydWN0b3IgdXNlZCBmb3IgQzJGaWVsZERlc2NyaXB0b3IgdGhhdCByZW1vdmVzIHRoZSBhcnJheSBleHRlbnQuCisgICAgICoKKyAgICAgKiBccGFyYW1baW5dIG9mZnNldCBwb2ludGVyIHRvIHRoZSBmaWVsZCBpbiBhbiBvYmplY3QgYXQgYWRkcmVzcyAwLgorICAgICAqLworICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQsIGNsYXNzIEI9dHlwZW5hbWUgc3RkOjpyZW1vdmVfZXh0ZW50PFQ+Ojp0eXBlPgorICAgIGlubGluZSBfQzJGaWVsZElkKFQqIG9mZnNldCkKKyAgICAgICAgOiAvLyBvZmZzZXQgaXMgZnJvbSAiMCIgc28gd2lsbCBmaXQgb24gMzItYml0cworICAgICAgICAgIF9tT2Zmc2V0KCh1aW50MzJfdCkodWludHB0cl90KShvZmZzZXQpKSwKKyAgICAgICAgICBfbVNpemUoc2l6ZW9mKEIpKSB7IH0KKworICAgIC8qKgorICAgICAqIERpcmVjdCBjb25zdHJ1Y3RvciBmcm9tIG9mZnNldCBhbmQgc2l6ZS4KKyAgICAgKgorICAgICAqIFxwYXJhbVtpbl0gb2Zmc2V0IG9mZnNldCBvZiB0aGUgZmllbGQuCisgICAgICogXHBhcmFtW2luXSBzaXplIHNpemUgb2YgdGhlIGZpZWxkLgorICAgICAqLworICAgIGlubGluZSBfQzJGaWVsZElkKHNpemVfdCBvZmZzZXQsIHNpemVfdCBzaXplKQorICAgICAgICA6IF9tT2Zmc2V0KG9mZnNldCksIF9tU2l6ZShzaXplKSB7fQorCisgICAgLyoqCisgICAgICogQ29uc3RydWN0b3IgdXNlZCB0byBpZGVudGlmeSBhIGZpZWxkIGluIGFuIG9iamVjdC4KKyAgICAgKgorICAgICAqIFxwYXJhbSBVW3R5cGVdIHBvaW50ZXIgdG8gdGhlIG9iamVjdCB0aGF0IGNvbnRhaW5zIHRoaXMgZmllbGQuIFRoaXMgaXMgbmVlZGVkIGluIGNhc2UgdGhlCisgICAgICogICAgICAgIGZpZWxkIGlzIGluIGFuIChpbmhlcml0ZWQpIGJhc2UgY2xhc3MsIGluIHdoaWNoIGNhc2UgVCB3aWxsIGJlIHRoYXQgYmFzZSBjbGFzcy4KKyAgICAgKiBccGFyYW0gcG1baW1dIG1lbWJlciBwb2ludGVyIHRvIHRoZSBmaWVsZAorICAgICAqLworICAgIHRlbXBsYXRlPHR5cGVuYW1lIFIsIHR5cGVuYW1lIFQsIHR5cGVuYW1lIFUsIHR5cGVuYW1lIEI9dHlwZW5hbWUgc3RkOjpyZW1vdmVfZXh0ZW50PFI+Ojp0eXBlPgorICAgIGlubGluZSBfQzJGaWVsZElkKFUgKiwgUiBUOjoqIHBtKQorICAgICAgICA6IF9tT2Zmc2V0KCh1aW50MzJfdCkodWludHB0cl90KSgmKCgoVSopMjU2KS0+KnBtKSkgLSAyNTZ1KSwKKyAgICAgICAgICBfbVNpemUoc2l6ZW9mKEIpKSB7IH0KKworICAgIC8qKgorICAgICAqIENvbnN0cnVjdG9yIHVzZWQgdG8gaWRlbnRpZnkgYSBmaWVsZCBpbiBhbiBvYmplY3QuCisgICAgICoKKyAgICAgKiBccGFyYW0gcG1baW1dIG1lbWJlciBwb2ludGVyIHRvIHRoZSBmaWVsZAorICAgICAqLworICAgIHRlbXBsYXRlPHR5cGVuYW1lIFIsIHR5cGVuYW1lIFQsIHR5cGVuYW1lIEI9dHlwZW5hbWUgc3RkOjpyZW1vdmVfZXh0ZW50PFI+Ojp0eXBlPgorICAgIGlubGluZSBfQzJGaWVsZElkKFIgVDo6KiBwbSkKKyAgICAgICAgOiBfbU9mZnNldCgodWludDMyX3QpKHVpbnRwdHJfdCkoJigoKFQqKTApLT4qcG0pKSksCisgICAgICAgICAgX21TaXplKHNpemVvZihCKSkgeyB9CisKKyAgICBpbmxpbmUgYm9vbCBvcGVyYXRvcj09KGNvbnN0IF9DMkZpZWxkSWQgJm90aGVyKSBjb25zdCB7CisgICAgICAgIHJldHVybiBfbU9mZnNldCA9PSBvdGhlci5fbU9mZnNldCAmJiBfbVNpemUgPT0gb3RoZXIuX21TaXplOworICAgIH0KKworICAgIGlubGluZSBib29sIG9wZXJhdG9yPChjb25zdCBfQzJGaWVsZElkICZvdGhlcikgY29uc3QgeworICAgICAgICByZXR1cm4gX21PZmZzZXQgPCBvdGhlci5fbU9mZnNldCB8fAorICAgICAgICAgICAgLy8gTk9URTogb3JkZXIgcGFyZW50IHN0cnVjdHVyZSBiZWZvcmUgc3ViIGZpZWxkCisgICAgICAgICAgICAoX21PZmZzZXQgPT0gb3RoZXIuX21PZmZzZXQgJiYgX21TaXplID4gb3RoZXIuX21TaXplKTsKKyAgICB9CisKKyAgICBERUZJTkVfT1RIRVJfQ09NUEFSSVNPTl9PUEVSQVRPUlMoX0MyRmllbGRJZCkKKworI2lmIDAKKyAgICBpbmxpbmUgdWludDMyX3Qgb2Zmc2V0KCkgY29uc3QgeyByZXR1cm4gX21PZmZzZXQ7IH0KKyAgICBpbmxpbmUgdWludDMyX3Qgc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIF9tU2l6ZTsgfQorI2VuZGlmCisKKyNpZiBkZWZpbmVkKEZSSUVORF9URVNUKQorICAgIGZyaWVuZCB2b2lkIFByaW50VG8oY29uc3QgX0MyRmllbGRJZCAmZCwgOjpzdGQ6Om9zdHJlYW0qKTsKKyNlbmRpZgorCitwcml2YXRlOgorICAgIGZyaWVuZCBzdHJ1Y3QgX0MyUGFyYW1JbnNwZWN0b3I7CisgICAgZnJpZW5kIHN0cnVjdCBDMkZpZWxkRGVzY3JpcHRvcjsKKworICAgIHVpbnQzMl90IF9tT2Zmc2V0OyAvLyBvZmZzZXQgb2YgZmllbGQKKyAgICB1aW50MzJfdCBfbVNpemU7ICAgLy8gc2l6ZSBvZiBmaWVsZAorfTsKKworLyoqCisgKiBTdHJ1Y3R1cmUgdW5pcXVlbHkgc3BlY2lmeWluZyBhICdmaWVsZCcgaW4gYSBjb25maWd1cmF0aW9uLiBUaGUgZmllbGQKKyAqIGNhbiBiZSBhIGZpZWxkIG9mIGEgY29uZmlndXJhdGlvbiwgYSBzdWJmaWVsZCBvZiBhIGZpZWxkIG9mIGEgY29uZmlndXJhdGlvbiwKKyAqIGFuZCBldmVuIHRoZSB3aG9sZSBjb25maWd1cmF0aW9uLiBNb3Jlb3ZlciwgaWYgdGhlIGZpZWxkIGNhbiBwb2ludCB0byBhbgorICogZWxlbWVudCBpbiBhIGFycmF5IGZpZWxkLCBvciB0byB0aGUgZW50aXJlIGFycmF5IGZpZWxkLgorICoKKyAqIFRoaXMgc3RydWN0dXJlIGlzIHVzZWQgZm9yIHF1ZXJ5aW5nIHN1cHBvcnRlZCB2YWx1ZXMgZm9yIGEgZmllbGQsIGFzIHdlbGwKKyAqIGFzIGNvbW11bmljYXRpbmcgY29uZmlndXJhdGlvbiBmYWlsdXJlcyBhbmQgY29uZmxpY3RzIHdoZW4gdHJ5aW5nIHRvIGNoYW5nZQorICogYSBjb25maWd1cmF0aW9uIGZvciBhIGNvbXBvbmVudC9pbnRlcmZhY2Ugb3IgYSBzdG9yZS4KKyAqLworc3RydWN0IEMyUGFyYW1GaWVsZCB7CisvL3B1YmxpYzoKKyAgICAvKioKKyAgICAgKiBDcmVhdGUgYSBmaWVsZCBpZGVudGlmaWVyIHVzaW5nIGEgY29uZmlndXJhdGlvbiBwYXJhbWV0ZXIgKHZhcmlhYmxlKSwKKyAgICAgKiBhbmQgYSBwb2ludGVyIHRvIG1lbWJlci4KKyAgICAgKgorICAgICAqIH5+fn5+fn5+fn5+fn4gKC5jcHApCisgICAgICoKKyAgICAgKiBzdHJ1Y3QgQzJTb21lUGFyYW0geworICAgICAqICAgdWludDMyX3QgbUZpZWxkOworICAgICAqICAgdWludDMyX3QgbUFycmF5WzJdOworICAgICAqICAgQzJPdGhlclN0cnVjdCBtU3RydWN0OworICAgICAqICAgdWludDMyX3QgbUZsZXhBcnJheVtdOworICAgICAqIH0gKm1QYXJhbTsKKyAgICAgKgorICAgICAqIEMyUGFyYW1GaWVsZChtUGFyYW0sICZtUGFyYW0tPm1GaWVsZCk7CisgICAgICogQzJQYXJhbUZpZWxkKG1QYXJhbSwgJm1QYXJhbS0+bUFycmF5KTsKKyAgICAgKiBDMlBhcmFtRmllbGQobVBhcmFtLCAmbVBhcmFtLT5tQXJyYXlbMF0pOworICAgICAqIEMyUGFyYW1GaWVsZChtUGFyYW0sICZtUGFyYW0tPm1TdHJ1Y3QubVN1YkZpZWxkKTsKKyAgICAgKiBDMlBhcmFtRmllbGQobVBhcmFtLCAmbVBhcmFtLT5tRmxleEFycmF5KTsKKyAgICAgKiBDMlBhcmFtRmllbGQobVBhcmFtLCAmbVBhcmFtLT5tRmxleEFycmF5WzJdKTsKKyAgICAgKgorICAgICAqIH5+fn5+fn5+fn5+fn4KKyAgICAgKgorICAgICAqIFx0b2RvIGZpeCB3aGF0IHRoaXMgaXMgZm9yIFRbXSAoZm9yIG5vdyBzaXplIGJlY29tZXMgVFsxXSkKKyAgICAgKgorICAgICAqIFxub3RlIHRoaXMgZG9lcyBub3Qgd29yayBmb3IgNjQtYml0IG1lbWJlcnMgYXMgaXQgdHJpZ2dlcnMgYQorICAgICAqICd0YWtpbmcgYWRkcmVzcyBvZiBwYWNrZWQgbWVtYmVyJyB3YXJuaW5nLgorICAgICAqCisgICAgICogXHBhcmFtIHBhcmFtIHBvaW50ZXIgdG8gcGFyYW1ldGVyCisgICAgICogXHBhcmFtIG9mZnNldCBtZW1iZXIgcG9pbnRlcgorICAgICAqLworICAgIHRlbXBsYXRlPHR5cGVuYW1lIFMsIHR5cGVuYW1lIFQ+CisgICAgaW5saW5lIEMyUGFyYW1GaWVsZChTKiBwYXJhbSwgVCogb2Zmc2V0KQorICAgICAgICA6IF9tSW5kZXgocGFyYW0tPmluZGV4KCkpLAorICAgICAgICAgIF9tRmllbGRJZCgoVCopKCh1aW50cHRyX3Qpb2Zmc2V0IC0gKHVpbnRwdHJfdClwYXJhbSkpIHt9CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBTLCB0eXBlbmFtZSBUPgorICAgIGlubGluZSBzdGF0aWMgQzJQYXJhbUZpZWxkIE1ha2UoUyYgcGFyYW0sIFQmIG9mZnNldCkgeworICAgICAgICByZXR1cm4gQzJQYXJhbUZpZWxkKHBhcmFtLmluZGV4KCksICh1aW50cHRyX3QpJm9mZnNldCAtICh1aW50cHRyX3QpJnBhcmFtLCBzaXplb2YoVCkpOworICAgIH0KKworICAgIC8qKgorICAgICAqIENyZWF0ZSBhIGZpZWxkIGlkZW50aWZpZXIgdXNpbmcgYSBjb25maWd1cmF0aW9uIHBhcmFtZXRlciAodmFyaWFibGUpLAorICAgICAqIGFuZCBhIG1lbWJlciBwb2ludGVyLiBUaGlzIG1ldGhvZCBjYW5ub3QgYmUgdXNlZCB0byByZWZlciB0byBhbgorICAgICAqIGFycmF5IGVsZW1lbnQgb3IgYSBzdWJmaWVsZC4KKyAgICAgKgorICAgICAqIH5+fn5+fn5+fn5+fn4gKC5jcHApCisgICAgICoKKyAgICAgKiBDMlNvbWVQYXJhbSBtUGFyYW07CisgICAgICogQzJQYXJhbUZpZWxkKCZtUGFyYW0sICZDMlNvbWVQYXJhbTo6bU1lbWJlckZpZWxkKTsKKyAgICAgKgorICAgICAqIH5+fn5+fn5+fn5+fn4KKyAgICAgKgorICAgICAqIFxwYXJhbSBwIHBvaW50ZXIgdG8gcGFyYW1ldGVyCisgICAgICogXHBhcmFtIFQgbWVtYmVyIHBvaW50ZXIgdG8gdGhlIGZpZWxkIG1lbWJlcgorICAgICAqLworICAgIHRlbXBsYXRlPHR5cGVuYW1lIFIsIHR5cGVuYW1lIFQsIHR5cGVuYW1lIFU+CisgICAgaW5saW5lIEMyUGFyYW1GaWVsZChVICpwLCBSIFQ6OiogcG0pIDogX21JbmRleChwLT5pbmRleCgpKSwgX21GaWVsZElkKHAsIHBtKSB7IH0KKworICAgIC8qKgorICAgICAqIENyZWF0ZSBhIGZpZWxkIGlkZW50aWZpZXIgdG8gYSBjb25maWd1cmF0aW9uIHBhcmFtZXRlciAodmFyaWFibGUpLgorICAgICAqCisgICAgICogfn5+fn5+fn5+fn5+fiAoLmNwcCkKKyAgICAgKgorICAgICAqIEMyU29tZVBhcmFtIG1QYXJhbTsKKyAgICAgKiBDMlBhcmFtRmllbGQoJm1QYXJhbSk7CisgICAgICoKKyAgICAgKiB+fn5+fn5+fn5+fn5+CisgICAgICoKKyAgICAgKiBccGFyYW0gcGFyYW0gcG9pbnRlciB0byBwYXJhbWV0ZXIKKyAgICAgKi8KKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBTPgorICAgIGlubGluZSBDMlBhcmFtRmllbGQoUyogcGFyYW0pCisgICAgICAgIDogX21JbmRleChwYXJhbS0+aW5kZXgoKSksIF9tRmllbGRJZCgwdSwgcGFyYW0tPnNpemUoKSkgeyB9CisKKyAgICAvKiogQ29weSBjb25zdHJ1Y3Rvci4gKi8KKyAgICBpbmxpbmUgQzJQYXJhbUZpZWxkKGNvbnN0IEMyUGFyYW1GaWVsZCAmb3RoZXIpID0gZGVmYXVsdDsKKworICAgIC8qKgorICAgICAqIEVxdWFsaXR5IG9wZXJhdG9yLgorICAgICAqLworICAgIGlubGluZSBib29sIG9wZXJhdG9yPT0oY29uc3QgQzJQYXJhbUZpZWxkICZvdGhlcikgY29uc3QgeworICAgICAgICByZXR1cm4gX21JbmRleCA9PSBvdGhlci5fbUluZGV4ICYmIF9tRmllbGRJZCA9PSBvdGhlci5fbUZpZWxkSWQ7CisgICAgfQorCisgICAgLyoqCisgICAgICogT3JkZXJpbmcgb3BlcmF0b3IuCisgICAgICovCisgICAgaW5saW5lIGJvb2wgb3BlcmF0b3I8KGNvbnN0IEMyUGFyYW1GaWVsZCAmb3RoZXIpIGNvbnN0IHsKKyAgICAgICAgcmV0dXJuIF9tSW5kZXggPCBvdGhlci5fbUluZGV4IHx8CisgICAgICAgICAgICAoX21JbmRleCA9PSBvdGhlci5fbUluZGV4ICYmIF9tRmllbGRJZCA8IG90aGVyLl9tRmllbGRJZCk7CisgICAgfQorCisgICAgREVGSU5FX09USEVSX0NPTVBBUklTT05fT1BFUkFUT1JTKEMyUGFyYW1GaWVsZCkKKworcHJvdGVjdGVkOgorICAgIGlubGluZSBDMlBhcmFtRmllbGQoQzJQYXJhbTo6SW5kZXggaW5kZXgsIHVpbnQzMl90IG9mZnNldCwgdWludDMyX3Qgc2l6ZSkKKyAgICAgICAgOiBfbUluZGV4KGluZGV4KSwgX21GaWVsZElkKG9mZnNldCwgc2l6ZSkge30KKworcHJpdmF0ZToKKyAgICBmcmllbmQgc3RydWN0IF9DMlBhcmFtSW5zcGVjdG9yOworCisgICAgQzJQYXJhbTo6SW5kZXggX21JbmRleDsgLy8vPCBwYXJhbWV0ZXIgaW5kZXgKKyAgICBfQzJGaWVsZElkIF9tRmllbGRJZDsgICAvLy88IGZpZWxkIGlkZW50aWZpZXIKK307CisKKy8qKgorICogQSBzaGFyZWQgKHVuaW9uKSByZXByZXNlbnRhdGlvbiBvZiBudW1lcmljIHZhbHVlcworICovCitjbGFzcyBDMlZhbHVlIHsKK3B1YmxpYzoKKyAgICAvLy8gQSB1bmlvbiBvZiBzdXBwb3J0ZWQgcHJpbWl0aXZlIHR5cGVzLgorICAgIHVuaW9uIFByaW1pdGl2ZSB7CisgICAgICAgIC8vIGZpcnN0IG1lbWJlciBpcyBhbHdheXMgemVybyBpbml0aWFsaXplZCBzbyBpdCBtdXN0IGJlIHRoZSBsYXJnZXN0CisgICAgICAgIHVpbnQ2NF90ICAgIHU2NDsgICAvLy88IHVpbnQ2NF90IHZhbHVlCisgICAgICAgIGludDY0X3QgICAgIGk2NDsgICAvLy88IGludDY0X3QgdmFsdWUKKyAgICAgICAgYzJfY250cjY0X3QgYzY0OyAgIC8vLzwgYzJfY250cjY0X3QgdmFsdWUKKyAgICAgICAgdWludDMyX3QgICAgdTMyOyAgIC8vLzwgdWludDMyX3QgdmFsdWUKKyAgICAgICAgaW50MzJfdCAgICAgaTMyOyAgIC8vLzwgaW50MzJfdCB2YWx1ZQorICAgICAgICBjMl9jbnRyMzJfdCBjMzI7ICAgLy8vPCBjMl9jbnRyMzJfdCB2YWx1ZQorICAgICAgICBmbG9hdCAgICAgICBmcDsgICAgLy8vPCBmbG9hdCB2YWx1ZQorCisgICAgICAgIC8vIGNvbnN0cnVjdG9ycyAtIGltcGxpY2l0CisgICAgICAgIFByaW1pdGl2ZSh1aW50NjRfdCB2YWx1ZSkgICAgOiB1NjQodmFsdWUpIHsgfQorICAgICAgICBQcmltaXRpdmUoaW50NjRfdCB2YWx1ZSkgICAgIDogaTY0KHZhbHVlKSB7IH0KKyAgICAgICAgUHJpbWl0aXZlKGMyX2NudHI2NF90IHZhbHVlKSA6IGM2NCh2YWx1ZSkgeyB9CisgICAgICAgIFByaW1pdGl2ZSh1aW50MzJfdCB2YWx1ZSkgICAgOiB1MzIodmFsdWUpIHsgfQorICAgICAgICBQcmltaXRpdmUoaW50MzJfdCB2YWx1ZSkgICAgIDogaTMyKHZhbHVlKSB7IH0KKyAgICAgICAgUHJpbWl0aXZlKGMyX2NudHIzMl90IHZhbHVlKSA6IGMzMih2YWx1ZSkgeyB9CisgICAgICAgIFByaW1pdGl2ZSh1aW50OF90IHZhbHVlKSAgICAgOiB1MzIodmFsdWUpIHsgfQorICAgICAgICBQcmltaXRpdmUoY2hhciB2YWx1ZSkgICAgICAgIDogaTMyKHZhbHVlKSB7IH0KKyAgICAgICAgUHJpbWl0aXZlKGZsb2F0IHZhbHVlKSAgICAgICA6IGZwKHZhbHVlKSAgeyB9CisKKyAgICAgICAgLy8gYWxsb3cgY29uc3RydWN0aW9uIGZyb20gZW51bSB0eXBlCisgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIEUsIHR5cGVuYW1lID0gdHlwZW5hbWUgc3RkOjplbmFibGVfaWY8c3RkOjppc19lbnVtPEU+Ojp2YWx1ZT46OnR5cGU+CisgICAgICAgIFByaW1pdGl2ZShFIHZhbHVlKQorICAgICAgICAgICAgOiBQcmltaXRpdmUoc3RhdGljX2Nhc3Q8dHlwZW5hbWUgc3RkOjp1bmRlcmx5aW5nX3R5cGU8RT46OnR5cGU+KHZhbHVlKSkgeyB9CisKKyAgICAgICAgUHJpbWl0aXZlKCkgOiB1NjQoMCkgeyB9CisKKyAgICAgICAgLyoqIGdldHMgdmFsdWUgb3V0IG9mIHRoZSB1bmlvbiAqLworICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBjb25zdCBUICZyZWYoKSBjb25zdDsKKworICAgICAgICAvLyB2ZXJpZnkgdGhhdCB3ZSBjYW4gYXNzdW1lIHN0YW5kYXJkIGFsaWFzaW5nCisgICAgICAgIHN0YXRpY19hc3NlcnQoc2l6ZW9mKHU2NCkgPT0gc2l6ZW9mKGk2NCksICIiKTsKKyAgICAgICAgc3RhdGljX2Fzc2VydChzaXplb2YodTY0KSA9PSBzaXplb2YoYzY0KSwgIiIpOworICAgICAgICBzdGF0aWNfYXNzZXJ0KHNpemVvZih1MzIpID09IHNpemVvZihpMzIpLCAiIik7CisgICAgICAgIHN0YXRpY19hc3NlcnQoc2l6ZW9mKHUzMikgPT0gc2l6ZW9mKGMzMiksICIiKTsKKyAgICB9OworICAgIC8vIHZlcmlmeSB0aGF0IHdlIGNhbiBhc3N1bWUgc3RhbmRhcmQgYWxpYXNpbmcKKyAgICBzdGF0aWNfYXNzZXJ0KG9mZnNldG9mKFByaW1pdGl2ZSwgdTY0KSA9PSBvZmZzZXRvZihQcmltaXRpdmUsIGk2NCksICIiKTsKKyAgICBzdGF0aWNfYXNzZXJ0KG9mZnNldG9mKFByaW1pdGl2ZSwgdTY0KSA9PSBvZmZzZXRvZihQcmltaXRpdmUsIGM2NCksICIiKTsKKyAgICBzdGF0aWNfYXNzZXJ0KG9mZnNldG9mKFByaW1pdGl2ZSwgdTMyKSA9PSBvZmZzZXRvZihQcmltaXRpdmUsIGkzMiksICIiKTsKKyAgICBzdGF0aWNfYXNzZXJ0KG9mZnNldG9mKFByaW1pdGl2ZSwgdTMyKSA9PSBvZmZzZXRvZihQcmltaXRpdmUsIGMzMiksICIiKTsKKworICAgIGVudW0gdHlwZV90IDogdWludDMyX3QgeworICAgICAgICBOT19JTklULAorICAgICAgICBJTlQzMiwKKyAgICAgICAgVUlOVDMyLAorICAgICAgICBDTlRSMzIsCisgICAgICAgIElOVDY0LAorICAgICAgICBVSU5UNjQsCisgICAgICAgIENOVFI2NCwKKyAgICAgICAgRkxPQVQsCisgICAgfTsKKworICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQsIGJvb2wgPSBzdGQ6OmlzX2VudW08VD46OnZhbHVlPgorICAgIGlubGluZSBzdGF0aWMgY29uc3RleHByIHR5cGVfdCBUeXBlRm9yKCkgeworICAgICAgICB1c2luZyBVID0gdHlwZW5hbWUgc3RkOjp1bmRlcmx5aW5nX3R5cGU8VD46OnR5cGU7CisgICAgICAgIHJldHVybiBUeXBlRm9yPFU+KCk7CisgICAgfQorCisgICAgLy8gZGVwcmVjdGF0ZWQKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBULCBib29sIEIgPSBzdGQ6OmlzX2VudW08VD46OnZhbHVlPgorICAgIGlubGluZSBzdGF0aWMgY29uc3RleHByIHR5cGVfdCB0eXBlRm9yKCkgeworICAgICAgICByZXR1cm4gVHlwZUZvcjxULCBCPigpOworICAgIH0KKworICAgIC8vIGNvbnN0cnVjdG9ycyAtIGltcGxpY2l0CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4KKyAgICBDMlZhbHVlKFQgdmFsdWUpICA6IF9tVHlwZSh0eXBlRm9yPFQ+KCkpLCBfbVZhbHVlKHZhbHVlKSB7IH0KKworICAgIEMyVmFsdWUoKSA6IF9tVHlwZShOT19JTklUKSB7IH0KKworICAgIGlubGluZSB0eXBlX3QgdHlwZSgpIGNvbnN0IHsgcmV0dXJuIF9tVHlwZTsgfQorCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4KKyAgICBpbmxpbmUgYm9vbCBnZXQoVCAqdmFsdWUpIGNvbnN0IHsKKyAgICAgICAgaWYgKF9tVHlwZSA9PSB0eXBlRm9yPFQ+KCkpIHsKKyAgICAgICAgICAgICp2YWx1ZSA9IF9tVmFsdWUucmVmPFQ+KCk7CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgLy8vIHJldHVybnMgdGhlIGFkZHJlc3Mgb2YgdGhlIHZhbHVlCisgICAgdm9pZCAqZ2V0KCkgY29uc3QgeworICAgICAgICByZXR1cm4gX21UeXBlID09IE5PX0lOSVQgPyBudWxscHRyIDogKHZvaWQqKSZfbVZhbHVlOworICAgIH0KKworICAgIC8vLyByZXR1cm5zIHRoZSBzaXplIG9mIHRoZSBjb250YWluZWQgdmFsdWUKKyAgICBzaXplX3QgaW5saW5lIHNpemVPZigpIGNvbnN0IHsKKyAgICAgICAgcmV0dXJuIFNpemVGb3IoX21UeXBlKTsKKyAgICB9CisKKyAgICBzdGF0aWMgc2l6ZV90IFNpemVGb3IodHlwZV90IHR5cGUpIHsKKyAgICAgICAgc3dpdGNoICh0eXBlKSB7CisgICAgICAgICAgICBjYXNlIElOVDMyOgorICAgICAgICAgICAgY2FzZSBVSU5UMzI6CisgICAgICAgICAgICBjYXNlIENOVFIzMjogcmV0dXJuIHNpemVvZihfbVZhbHVlLmkzMik7CisgICAgICAgICAgICBjYXNlIElOVDY0OgorICAgICAgICAgICAgY2FzZSBVSU5UNjQ6CisgICAgICAgICAgICBjYXNlIENOVFI2NDogcmV0dXJuIHNpemVvZihfbVZhbHVlLmk2NCk7CisgICAgICAgICAgICBjYXNlIEZMT0FUOiByZXR1cm4gc2l6ZW9mKF9tVmFsdWUuZnApOworICAgICAgICAgICAgZGVmYXVsdDogcmV0dXJuIDA7CisgICAgICAgIH0KKyAgICB9CisKK3ByaXZhdGU6CisgICAgdHlwZV90IF9tVHlwZTsKKyAgICBQcmltaXRpdmUgX21WYWx1ZTsKK307CisKK3RlbXBsYXRlPD4gaW5saW5lIGNvbnN0IGludDMyX3QgJkMyVmFsdWU6OlByaW1pdGl2ZTo6cmVmPGludDMyX3Q+KCkgY29uc3QgeyByZXR1cm4gaTMyOyB9Cit0ZW1wbGF0ZTw+IGlubGluZSBjb25zdCBpbnQ2NF90ICZDMlZhbHVlOjpQcmltaXRpdmU6OnJlZjxpbnQ2NF90PigpIGNvbnN0IHsgcmV0dXJuIGk2NDsgfQordGVtcGxhdGU8PiBpbmxpbmUgY29uc3QgdWludDMyX3QgJkMyVmFsdWU6OlByaW1pdGl2ZTo6cmVmPHVpbnQzMl90PigpIGNvbnN0IHsgcmV0dXJuIHUzMjsgfQordGVtcGxhdGU8PiBpbmxpbmUgY29uc3QgdWludDY0X3QgJkMyVmFsdWU6OlByaW1pdGl2ZTo6cmVmPHVpbnQ2NF90PigpIGNvbnN0IHsgcmV0dXJuIHU2NDsgfQordGVtcGxhdGU8PiBpbmxpbmUgY29uc3QgYzJfY250cjMyX3QgJkMyVmFsdWU6OlByaW1pdGl2ZTo6cmVmPGMyX2NudHIzMl90PigpIGNvbnN0IHsgcmV0dXJuIGMzMjsgfQordGVtcGxhdGU8PiBpbmxpbmUgY29uc3QgYzJfY250cjY0X3QgJkMyVmFsdWU6OlByaW1pdGl2ZTo6cmVmPGMyX2NudHI2NF90PigpIGNvbnN0IHsgcmV0dXJuIGM2NDsgfQordGVtcGxhdGU8PiBpbmxpbmUgY29uc3QgZmxvYXQgJkMyVmFsdWU6OlByaW1pdGl2ZTo6cmVmPGZsb2F0PigpIGNvbnN0IHsgcmV0dXJuIGZwOyB9CisKKy8vIHByb3ZpZGUgdHlwZXMgZm9yIGVudW1zIGFuZCB1aW50OF90LCBjaGFyIGV2ZW4gdGhvdWdoIHdlIGRvbid0IHByb3ZpZGUgcmVhZGluZyBhcyB0aGVtCit0ZW1wbGF0ZTw+IGNvbnN0ZXhwciBDMlZhbHVlOjp0eXBlX3QgQzJWYWx1ZTo6VHlwZUZvcjxjaGFyLCBmYWxzZT4oKSB7IHJldHVybiBJTlQzMjsgfQordGVtcGxhdGU8PiBjb25zdGV4cHIgQzJWYWx1ZTo6dHlwZV90IEMyVmFsdWU6OlR5cGVGb3I8aW50MzJfdCwgZmFsc2U+KCkgeyByZXR1cm4gSU5UMzI7IH0KK3RlbXBsYXRlPD4gY29uc3RleHByIEMyVmFsdWU6OnR5cGVfdCBDMlZhbHVlOjpUeXBlRm9yPGludDY0X3QsIGZhbHNlPigpIHsgcmV0dXJuIElOVDY0OyB9Cit0ZW1wbGF0ZTw+IGNvbnN0ZXhwciBDMlZhbHVlOjp0eXBlX3QgQzJWYWx1ZTo6VHlwZUZvcjx1aW50OF90LCBmYWxzZT4oKSB7IHJldHVybiBVSU5UMzI7IH0KK3RlbXBsYXRlPD4gY29uc3RleHByIEMyVmFsdWU6OnR5cGVfdCBDMlZhbHVlOjpUeXBlRm9yPHVpbnQzMl90LCBmYWxzZT4oKSB7IHJldHVybiBVSU5UMzI7IH0KK3RlbXBsYXRlPD4gY29uc3RleHByIEMyVmFsdWU6OnR5cGVfdCBDMlZhbHVlOjpUeXBlRm9yPHVpbnQ2NF90LCBmYWxzZT4oKSB7IHJldHVybiBVSU5UNjQ7IH0KK3RlbXBsYXRlPD4gY29uc3RleHByIEMyVmFsdWU6OnR5cGVfdCBDMlZhbHVlOjpUeXBlRm9yPGMyX2NudHIzMl90LCBmYWxzZT4oKSB7IHJldHVybiBDTlRSMzI7IH0KK3RlbXBsYXRlPD4gY29uc3RleHByIEMyVmFsdWU6OnR5cGVfdCBDMlZhbHVlOjpUeXBlRm9yPGMyX2NudHI2NF90LCBmYWxzZT4oKSB7IHJldHVybiBDTlRSNjQ7IH0KK3RlbXBsYXRlPD4gY29uc3RleHByIEMyVmFsdWU6OnR5cGVfdCBDMlZhbHVlOjpUeXBlRm9yPGZsb2F0LCBmYWxzZT4oKSB7IHJldHVybiBGTE9BVDsgfQorCisvLyBmb3J3YXJkIGRlY2xhcmUgZWFzeSBlbnVtIHRlbXBsYXRlCit0ZW1wbGF0ZTx0eXBlbmFtZSBFPiBzdHJ1Y3QgQzJFYXN5RW51bTsKKworLyoqCisgKiBmaWVsZCBkZXNjcmlwdG9yLiBBIGZpZWxkIGlzIHVuaXF1ZWx5IGRlZmluZWQgYnkgYW4gaW5kZXggaW50byBhIHBhcmFtZXRlci4KKyAqIChOb3RlOiBTdHJlYW0taWQgaXMgbm90IGNhcHR1cmVkIGFzIGEgZmllbGQuKQorICoKKyAqIE9yZGVyaW5nIG9mIGZpZWxkcyBpcyBieSBvZmZzZXQuIEluIGNhc2Ugb2Ygc3RydWN0dXJlcywgaXQgaXMgZGVwdGggZmlyc3QsCisgKiB3aXRoIGEgc3RydWN0dXJlIHRha2luZyBhbiBpbmRleCBqdXN0IGJlZm9yZSBhbmQgaW4gYWRkaXRpb24gdG8gaXRzIG1lbWJlcnMuCisgKi8KK3N0cnVjdCBDMkZpZWxkRGVzY3JpcHRvciB7CisvL3B1YmxpYzoKKyAgICAvKiogZmllbGQgdHlwZXMgYW5kIGZsYWdzCisgICAgICogXG5vdGU6IG9ubHkgMzItYml0IGFuZCA2NC1iaXQgZmllbGRzIGFyZSBzdXBwb3J0ZWQgKGUuZy4gbm8gYm9vbGVhbiwgYXMgdGhhdAorICAgICAqIGlzIHJlcHJlc2VudGVkIHVzaW5nIElOVDMyKS4KKyAgICAgKi8KKyAgICBlbnVtIHR5cGVfdCA6IHVpbnQzMl90IHsKKyAgICAgICAgLy8gcHJpbWl0aXZlIHR5cGVzCisgICAgICAgIElOVDMyICAgPSBDMlZhbHVlOjpJTlQzMiwgIC8vLzwgMzItYml0IHNpZ25lZCBpbnRlZ2VyCisgICAgICAgIFVJTlQzMiAgPSBDMlZhbHVlOjpVSU5UMzIsIC8vLzwgMzItYml0IHVuc2lnbmVkIGludGVnZXIKKyAgICAgICAgQ05UUjMyICA9IEMyVmFsdWU6OkNOVFIzMiwgLy8vPCAzMi1iaXQgY291bnRlcgorICAgICAgICBJTlQ2NCAgID0gQzJWYWx1ZTo6SU5UNjQsICAvLy88IDY0LWJpdCBzaWduZWQgaW50ZWdlcgorICAgICAgICBVSU5UNjQgID0gQzJWYWx1ZTo6VUlOVDY0LCAvLy88IDY0LWJpdCBzaWduZWQgaW50ZWdlcgorICAgICAgICBDTlRSNjQgID0gQzJWYWx1ZTo6Q05UUjY0LCAvLy88IDY0LWJpdCBjb3VudGVyCisgICAgICAgIEZMT0FUICAgPSBDMlZhbHVlOjpGTE9BVCwgIC8vLzwgMzItYml0IGZsb2F0aW5nIHBvaW50CisKKyAgICAgICAgLy8gYXJyYXkgdHlwZXMKKyAgICAgICAgU1RSSU5HID0gMHgxMDAsIC8vLzwgZml4ZWQtc2l6ZSBzdHJpbmcgKFBPRCkKKyAgICAgICAgQkxPQiwgICAgICAgICAgIC8vLzwgYmxvYi4gQmxvYnMgaGF2ZSBubyBzdWItZWxlbWVudHMgYW5kIGNhbiBiZSB0aG91Z2h0IG9mIGFzIGJ5dGUgYXJyYXlzOworICAgICAgICAgICAgICAgICAgICAgICAgLy8vPCBob3dldmVyLCBieXRlcyBjYW5ub3QgYmUgaW5kaXZpZHVhbGx5IGFkZHJlc3NlZCBieSBjbGllbnRzLgorCisgICAgICAgIC8vIGNvbXBsZXggdHlwZXMKKyAgICAgICAgU1RSVUNUX0ZMQUcgPSAweDIwMDAwLCAvLy88IHN0cnVjdHMuIE1hcmtlZCB3aXRoIHRoaXMgZmxhZyBpbiBhZGRpdGlvbiB0byB0aGVpciBjb3JlSW5kZXguCisgICAgfTsKKworICAgIHR5cGVkZWYgc3RkOjpwYWlyPEMyU3RyaW5nLCBDMlZhbHVlOjpQcmltaXRpdmU+IE5hbWVkVmFsdWVUeXBlOworICAgIHR5cGVkZWYgc3RkOjp2ZWN0b3I8TmFtZWRWYWx1ZVR5cGU+IE5hbWVkVmFsdWVzVHlwZTsKKyAgICAvL3R5cGVkZWYgc3RkOjpwYWlyPHN0ZDo6dmVjdG9yPEMyU3RyaW5nPiwgc3RkOjp2ZWN0b3I8QzJWYWx1ZTo6UHJpbWl0aXZlPj4gTmFtZWRWYWx1ZXNUeXBlOworCisgICAgLyoqCisgICAgICogVGVtcGxhdGUgc3BlY2lhbGl6YXRpb24gdGhhdCByZXR1cm5zIHRoZSBuYW1lZCB2YWx1ZXMgZm9yIGEgdHlwZS4KKyAgICAgKgorICAgICAqIFx0b2RvIGhpZGUgZnJvbSBjbGllbnQuCisgICAgICoKKyAgICAgKiBccmV0dXJuIGEgdmVjdG9yIG9mIG5hbWUtdmFsdWUgcGFpcnMuCisgICAgICovCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgQj4KKyAgICBzdGF0aWMgTmFtZWRWYWx1ZXNUeXBlIG5hbWVkVmFsdWVzRm9yKGNvbnN0IEIgJik7CisKKyAgICAvKiogc3BlY2lhbGl6YXRpb24gZm9yIGVhc3kgZW51bXMgKi8KKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBFPgorICAgIGlubGluZSBzdGF0aWMgTmFtZWRWYWx1ZXNUeXBlIG5hbWVkVmFsdWVzRm9yKGNvbnN0IEMyRWFzeUVudW08RT4gJikgeworICAgICAgICByZXR1cm4gbmFtZWRWYWx1ZXNGb3IoKihFKiludWxscHRyKTsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgQiwgYm9vbCBlbmFibGVkPXN0ZDo6aXNfYXJpdGhtZXRpYzxCPjo6dmFsdWUgfHwgc3RkOjppc19lbnVtPEI+Ojp2YWx1ZT4KKyAgICBzdHJ1Y3QgQzJfSElERSBfTmFtZWRWYWx1ZXNHZXR0ZXI7CisKK3B1YmxpYzoKKyAgICBpbmxpbmUgQzJGaWVsZERlc2NyaXB0b3IodWludDMyX3QgdHlwZSwgdWludDMyX3QgZXh0ZW50LCBDMlN0cmluZyBuYW1lLCBzaXplX3Qgb2Zmc2V0LCBzaXplX3Qgc2l6ZSkKKyAgICAgICAgOiBfbVR5cGUoKHR5cGVfdCl0eXBlKSwgX21FeHRlbnQoZXh0ZW50KSwgX21OYW1lKG5hbWUpLCBfbUZpZWxkSWQob2Zmc2V0LCBzaXplKSB7IH0KKworICAgIGlubGluZSBDMkZpZWxkRGVzY3JpcHRvcihjb25zdCBDMkZpZWxkRGVzY3JpcHRvciAmKSA9IGRlZmF1bHQ7CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBULCBjbGFzcyBCPXR5cGVuYW1lIHN0ZDo6cmVtb3ZlX2V4dGVudDxUPjo6dHlwZT4KKyAgICBpbmxpbmUgQzJGaWVsZERlc2NyaXB0b3IoY29uc3QgVCogb2Zmc2V0LCBjb25zdCBjaGFyICpuYW1lKQorICAgICAgICA6IF9tVHlwZSh0aGlzLT5HZXRUeXBlKChCKiludWxscHRyKSksCisgICAgICAgICAgX21FeHRlbnQoc3RkOjppc19hcnJheTxUPjo6dmFsdWUgPyBzdGQ6OmV4dGVudDxUPjo6dmFsdWUgOiAxKSwKKyAgICAgICAgICBfbU5hbWUobmFtZSksCisgICAgICAgICAgX21OYW1lZFZhbHVlcyhfTmFtZWRWYWx1ZXNHZXR0ZXI8Qj46OmdldE5hbWVkVmFsdWVzKCkpLAorICAgICAgICAgIF9tRmllbGRJZChvZmZzZXQpIHt9CisKKy8qCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgQj10eXBlbmFtZSBzdGQ6OnJlbW92ZV9leHRlbnQ8VD46OnR5cGU+CisgICAgaW5saW5lIEMyRmllbGREZXNjcmlwdG9yPFQsIEIsIGZhbHNlPihUKiBvZmZzZXQsIGNvbnN0IGNoYXIgKm5hbWUpCisgICAgICAgIDogX21UeXBlKHRoaXMtPkdldFR5cGUoKEIqKW51bGxwdHIpKSwKKyAgICAgICAgICBfbUV4dGVudChzdGQ6OmlzX2FycmF5PFQ+Ojp2YWx1ZSA/IHN0ZDo6ZXh0ZW50PFQ+Ojp2YWx1ZSA6IDEpLAorICAgICAgICAgIF9tTmFtZShuYW1lKSwKKyAgICAgICAgICBfbUZpZWxkSWQob2Zmc2V0KSB7fQorKi8KKworICAgIC8vLyBcZGVwcmVjYXRlZAorICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFMsIGNsYXNzIEI9dHlwZW5hbWUgc3RkOjpyZW1vdmVfZXh0ZW50PFQ+Ojp0eXBlPgorICAgIGlubGluZSBDMkZpZWxkRGVzY3JpcHRvcihTKiwgVCBTOjoqIGZpZWxkLCBjb25zdCBjaGFyICpuYW1lKQorICAgICAgICA6IF9tVHlwZSh0aGlzLT5HZXRUeXBlKChCKiludWxscHRyKSksCisgICAgICAgICAgX21FeHRlbnQoc3RkOjppc19hcnJheTxUPjo6dmFsdWUgPyBzdGQ6OmV4dGVudDxUPjo6dmFsdWUgOiAxKSwKKyAgICAgICAgICBfbU5hbWUobmFtZSksCisgICAgICAgICAgX21GaWVsZElkKCYoKChTKikwKS0+KmZpZWxkKSkge30KKworICAgIC8vLyByZXR1cm5zIHRoZSB0eXBlIG9mIHRoaXMgZmllbGQKKyAgICBpbmxpbmUgdHlwZV90IHR5cGUoKSBjb25zdCB7IHJldHVybiBfbVR5cGU7IH0KKyAgICAvLy8gcmV0dXJucyB0aGUgbGVuZ3RoIG9mIHRoZSBmaWVsZCBpbiBjYXNlIGl0IGlzIGFuIGFycmF5LiBSZXR1cm5zIDAgZm9yCisgICAgLy8vIFRbXSBhcnJheXMsIHJldHVybnMgMSBmb3IgVFsxXSBhcnJheXMgYXMgd2VsbCBhcyBpZiB0aGUgZmllbGQgaXMgbm90IGFuIGFycmF5LgorICAgIGlubGluZSBzaXplX3QgZXh0ZW50KCkgY29uc3QgeyByZXR1cm4gX21FeHRlbnQ7IH0KKyAgICAvLy8gcmV0dXJucyB0aGUgbmFtZSBvZiB0aGUgZmllbGQKKyAgICBpbmxpbmUgQzJTdHJpbmcgbmFtZSgpIGNvbnN0IHsgcmV0dXJuIF9tTmFtZTsgfQorCisgICAgY29uc3QgTmFtZWRWYWx1ZXNUeXBlICZuYW1lZFZhbHVlcygpIGNvbnN0IHsgcmV0dXJuIF9tTmFtZWRWYWx1ZXM7IH0KKworI2lmIGRlZmluZWQoRlJJRU5EX1RFU1QpCisgICAgZnJpZW5kIHZvaWQgUHJpbnRUbyhjb25zdCBDMkZpZWxkRGVzY3JpcHRvciAmLCA6OnN0ZDo6b3N0cmVhbSopOworICAgIGZyaWVuZCBib29sIG9wZXJhdG9yPT0oY29uc3QgQzJGaWVsZERlc2NyaXB0b3IgJiwgY29uc3QgQzJGaWVsZERlc2NyaXB0b3IgJik7CisgICAgRlJJRU5EX1RFU1QoQzJQYXJhbVRlc3RfUGFyYW1GaWVsZExpc3QsIFZlcmlmeVN0cnVjdCk7CisjZW5kaWYKKworcHJpdmF0ZToKKyAgICAvKioKKyAgICAgKiBDb25zdHJ1Y3QgYW4gb2Zmc2V0ZWQgZmllbGQgZGVzY3JpcHRvci4KKyAgICAgKi8KKyAgICBpbmxpbmUgQzJGaWVsZERlc2NyaXB0b3IoY29uc3QgQzJGaWVsZERlc2NyaXB0b3IgJmRlc2MsIHNpemVfdCBvZmZzZXQpCisgICAgICAgIDogX21UeXBlKGRlc2MuX21UeXBlKSwgX21FeHRlbnQoZGVzYy5fbUV4dGVudCksCisgICAgICAgICAgX21OYW1lKGRlc2MuX21OYW1lKSwgX21OYW1lZFZhbHVlcyhkZXNjLl9tTmFtZWRWYWx1ZXMpLAorICAgICAgICAgIF9tRmllbGRJZChkZXNjLl9tRmllbGRJZC5fbU9mZnNldCArIG9mZnNldCwgZGVzYy5fbUZpZWxkSWQuX21TaXplKSB7IH0KKworICAgIHR5cGVfdCBfbVR5cGU7CisgICAgdWludDMyX3QgX21FeHRlbnQ7IC8vIHRoZSBsYXN0IG1lbWJlciBjYW4gYmUgYXJiaXRyYXJ5IGxlbmd0aCBpZiBpdCBpcyBUW10gYXJyYXksCisgICAgICAgICAgICAgICAgICAgICAgIC8vIGV4dGVuZGluZyB0byB0aGUgZW5kIG9mIHRoZSBwYXJhbWV0ZXIgKHRoaXMgaXMgbWFya2VkIHdpdGgKKyAgICAgICAgICAgICAgICAgICAgICAgLy8gMCkuIFRbMF0tcyBhcmUgbm90IGZpZWxkcy4KKyAgICBDMlN0cmluZyBfbU5hbWU7CisgICAgTmFtZWRWYWx1ZXNUeXBlIF9tTmFtZWRWYWx1ZXM7CisKKyAgICBfQzJGaWVsZElkIF9tRmllbGRJZDsgICAvLyBmaWVsZCBpZGVudGlmaWVyIChvZmZzZXQgYW5kIHNpemUpCisKKyAgICAvLyBOT1RFOiBXZSBkbyBub3QgY2FwdHVyZSBkZWZhdWx0IHZhbHVlKHMpIGhlcmUgYXMgdGhhdCBtYXkgZGVwZW5kIG9uIHRoZSBjb21wb25lbnQuCisgICAgLy8gTk9URTogV2UgYWxzbyBkbyBub3QgY2FwdHVyZSBiZXN0RWZmb3J0LCBhcyAxKSB0aGlzIHNob3VsZCBiZSB0cnVlIGZvciBtb3N0IGZpZWxkcywKKyAgICAvLyAyKSB0aGlzIGlzIGF0IHBhcmFtZXRlciBncmFudWxhcml0eS4KKworICAgIC8vIHR5cGUgcmVzb2x1dGlvbgorICAgIGlubGluZSBzdGF0aWMgdHlwZV90IEdldFR5cGUoaW50MzJfdCopICAgICB7IHJldHVybiBJTlQzMjsgfQorICAgIGlubGluZSBzdGF0aWMgdHlwZV90IEdldFR5cGUodWludDMyX3QqKSAgICB7IHJldHVybiBVSU5UMzI7IH0KKyAgICBpbmxpbmUgc3RhdGljIHR5cGVfdCBHZXRUeXBlKGMyX2NudHIzMl90KikgeyByZXR1cm4gQ05UUjMyOyB9CisgICAgaW5saW5lIHN0YXRpYyB0eXBlX3QgR2V0VHlwZShpbnQ2NF90KikgICAgIHsgcmV0dXJuIElOVDY0OyB9CisgICAgaW5saW5lIHN0YXRpYyB0eXBlX3QgR2V0VHlwZSh1aW50NjRfdCopICAgIHsgcmV0dXJuIFVJTlQ2NDsgfQorICAgIGlubGluZSBzdGF0aWMgdHlwZV90IEdldFR5cGUoYzJfY250cjY0X3QqKSB7IHJldHVybiBDTlRSNjQ7IH0KKyAgICBpbmxpbmUgc3RhdGljIHR5cGVfdCBHZXRUeXBlKGZsb2F0KikgICAgICAgeyByZXR1cm4gRkxPQVQ7IH0KKyAgICBpbmxpbmUgc3RhdGljIHR5cGVfdCBHZXRUeXBlKGNoYXIqKSAgICAgICAgeyByZXR1cm4gU1RSSU5HOyB9CisgICAgaW5saW5lIHN0YXRpYyB0eXBlX3QgR2V0VHlwZSh1aW50OF90KikgICAgIHsgcmV0dXJuIEJMT0I7IH0KKworICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQsCisgICAgICAgICAgICAgY2xhc3M9dHlwZW5hbWUgc3RkOjplbmFibGVfaWY8c3RkOjppc19lbnVtPFQ+Ojp2YWx1ZT46OnR5cGU+CisgICAgaW5saW5lIHN0YXRpYyB0eXBlX3QgR2V0VHlwZShUKikgeworICAgICAgICB0eXBlbmFtZSBzdGQ6OnVuZGVybHlpbmdfdHlwZTxUPjo6dHlwZSB1bmRlcmx5aW5nKDApOworICAgICAgICByZXR1cm4gR2V0VHlwZSgmdW5kZXJseWluZyk7CisgICAgfQorCisgICAgLy8gdmVyaWZ5IEMyU3RydWN0IGJ5IGhhdmluZyBhIEZpZWxkTGlzdCgpIGFuZCBhIENPUkVfSU5ERVguCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVCwKKyAgICAgICAgICAgICBjbGFzcz1kZWNsdHlwZShUOjpDT1JFX0lOREVYICsgMSksIGNsYXNzPWRlY2x0eXBlKFQ6OkZpZWxkTGlzdCgpKT4KKyAgICBpbmxpbmUgc3RhdGljIHR5cGVfdCBHZXRUeXBlKFQqKSB7CisgICAgICAgIHN0YXRpY19hc3NlcnQoIXN0ZDo6aXNfYmFzZV9vZjxDMlBhcmFtLCBUPjo6dmFsdWUsICJjYW5ub3QgdXNlIEMyUGFyYW1zIGFzIGZpZWxkcyIpOworICAgICAgICByZXR1cm4gKHR5cGVfdCkoVDo6Q09SRV9JTkRFWCB8IFNUUlVDVF9GTEFHKTsKKyAgICB9CisKKyAgICBmcmllbmQgc3RydWN0IF9DMlBhcmFtSW5zcGVjdG9yOworfTsKKworLy8gbm8gbmFtZWQgdmFsdWVzIGZvciBjb21wb3VuZCB0eXBlcwordGVtcGxhdGU8dHlwZW5hbWUgQj4KK3N0cnVjdCBDMkZpZWxkRGVzY3JpcHRvcjo6X05hbWVkVmFsdWVzR2V0dGVyPEIsIGZhbHNlPiB7CisgICAgaW5saW5lIHN0YXRpYyBDMkZpZWxkRGVzY3JpcHRvcjo6TmFtZWRWYWx1ZXNUeXBlIGdldE5hbWVkVmFsdWVzKCkgeworICAgICAgICByZXR1cm4gTmFtZWRWYWx1ZXNUeXBlKCk7CisgICAgfQorfTsKKwordGVtcGxhdGU8dHlwZW5hbWUgQj4KK3N0cnVjdCBDMkZpZWxkRGVzY3JpcHRvcjo6X05hbWVkVmFsdWVzR2V0dGVyPEIsIHRydWU+IHsKKyAgICBpbmxpbmUgc3RhdGljIEMyRmllbGREZXNjcmlwdG9yOjpOYW1lZFZhbHVlc1R5cGUgZ2V0TmFtZWRWYWx1ZXMoKSB7CisgICAgICAgIHJldHVybiBDMkZpZWxkRGVzY3JpcHRvcjo6bmFtZWRWYWx1ZXNGb3IoKihCKiludWxscHRyKTsKKyAgICB9Cit9OworCisjZGVmaW5lIERFRklORV9OT19OQU1FRF9WQUxVRVNfRk9SKHR5cGUpIFwKK3RlbXBsYXRlPD4gaW5saW5lIEMyRmllbGREZXNjcmlwdG9yOjpOYW1lZFZhbHVlc1R5cGUgQzJGaWVsZERlc2NyaXB0b3I6Om5hbWVkVmFsdWVzRm9yKGNvbnN0IHR5cGUgJikgeyBcCisgICAgcmV0dXJuIE5hbWVkVmFsdWVzVHlwZSgpOyBcCit9CisKKy8vIFdlIGNhbm5vdCBzdWJ0eXBlIGNvbnN0cnVjdG9yIGZvciBlbnVtZXJhdGVkIHR5cGVzIHNvIGluc3RlZCBkZWZpbmUgbm8gbmFtZWQgdmFsdWVzIGZvcgorLy8gbm9uLWVudW1lcmF0ZWQgaW50ZWdyYWwgdHlwZXMuCitERUZJTkVfTk9fTkFNRURfVkFMVUVTX0ZPUihpbnQzMl90KQorREVGSU5FX05PX05BTUVEX1ZBTFVFU19GT1IodWludDMyX3QpCitERUZJTkVfTk9fTkFNRURfVkFMVUVTX0ZPUihjMl9jbnRyMzJfdCkKK0RFRklORV9OT19OQU1FRF9WQUxVRVNfRk9SKGludDY0X3QpCitERUZJTkVfTk9fTkFNRURfVkFMVUVTX0ZPUih1aW50NjRfdCkKK0RFRklORV9OT19OQU1FRF9WQUxVRVNfRk9SKGMyX2NudHI2NF90KQorREVGSU5FX05PX05BTUVEX1ZBTFVFU19GT1IodWludDhfdCkKK0RFRklORV9OT19OQU1FRF9WQUxVRVNfRk9SKGNoYXIpCitERUZJTkVfTk9fTkFNRURfVkFMVUVTX0ZPUihmbG9hdCkKKworLyoqCisgKiBEZXNjcmliZXMgdGhlIGZpZWxkcyBvZiBhIHN0cnVjdHVyZS4KKyAqLworc3RydWN0IEMyU3RydWN0RGVzY3JpcHRvciB7CitwdWJsaWM6CisgICAgLy8vIFJldHVybnMgdGhlIGNvcmUgaW5kZXggb2YgdGhlIHN0cnVjdAorICAgIGlubGluZSBDMlBhcmFtOjpDb3JlSW5kZXggY29yZUluZGV4KCkgY29uc3QgeyByZXR1cm4gX21UeXBlLmNvcmVJbmRleCgpOyB9CisKKyAgICAvLyBSZXR1cm5zIHRoZSBudW1iZXIgb2YgZmllbGRzIGluIHRoaXMgc3RydWN0IChub3QgY291bnRpbmcgYW55IHJlY3Vyc2l2ZSBmaWVsZHMpLgorICAgIC8vIE11c3QgYmUgYXQgbGVhc3QgMSBmb3IgdmFsaWQgc3RydWN0cy4KKyAgICBpbmxpbmUgc2l6ZV90IG51bUZpZWxkcygpIGNvbnN0IHsgcmV0dXJuIF9tRmllbGRzLnNpemUoKTsgfQorCisgICAgLy8gUmV0dXJucyB0aGUgbGlzdCBvZiBkaXJlY3QgZmllbGRzIChub3QgY291bnRpbmcgYW55IHJlY3Vyc2l2ZSBmaWVsZHMpLgorICAgIHR5cGVkZWYgc3RkOjp2ZWN0b3I8QzJGaWVsZERlc2NyaXB0b3I+Ojpjb25zdF9pdGVyYXRvciBmaWVsZF9pdGVyYXRvcjsKKyAgICBpbmxpbmUgZmllbGRfaXRlcmF0b3IgY2JlZ2luKCkgY29uc3QgeyByZXR1cm4gX21GaWVsZHMuY2JlZ2luKCk7IH0KKyAgICBpbmxpbmUgZmllbGRfaXRlcmF0b3IgY2VuZCgpIGNvbnN0IHsgcmV0dXJuIF9tRmllbGRzLmNlbmQoKTsgfQorCisgICAgLy8gb25seSBzdXBwbHlpbmcgY29uc3QgaXRlcmF0b3IgLSBidXQgdGhlc2UgbmFtZXMgYXJlIG5lZWRlZCBmb3IgcmFuZ2UgYmFzZWQgbG9vcHMKKyAgICBpbmxpbmUgZmllbGRfaXRlcmF0b3IgYmVnaW4oKSBjb25zdCB7IHJldHVybiBfbUZpZWxkcy5jYmVnaW4oKTsgfQorICAgIGlubGluZSBmaWVsZF9pdGVyYXRvciBlbmQoKSBjb25zdCB7IHJldHVybiBfbUZpZWxkcy5jZW5kKCk7IH0KKworICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+CisgICAgaW5saW5lIEMyU3RydWN0RGVzY3JpcHRvcihUKikKKyAgICAgICAgOiBDMlN0cnVjdERlc2NyaXB0b3IoVDo6Q09SRV9JTkRFWCwgVDo6RmllbGRMaXN0KCkpIHsgfQorCisgICAgaW5saW5lIEMyU3RydWN0RGVzY3JpcHRvcigKKyAgICAgICAgICAgIEMyUGFyYW06OkNvcmVJbmRleCB0eXBlLAorICAgICAgICAgICAgY29uc3Qgc3RkOjp2ZWN0b3I8QzJGaWVsZERlc2NyaXB0b3I+ICZmaWVsZHMpCisgICAgICAgIDogX21UeXBlKHR5cGUpLCBfbUZpZWxkcyhmaWVsZHMpIHsgfQorCitwcml2YXRlOgorICAgIGZyaWVuZCBzdHJ1Y3QgX0MyUGFyYW1JbnNwZWN0b3I7CisKKyAgICBpbmxpbmUgQzJTdHJ1Y3REZXNjcmlwdG9yKAorICAgICAgICAgICAgQzJQYXJhbTo6Q29yZUluZGV4IHR5cGUsCisgICAgICAgICAgICBzdGQ6OnZlY3RvcjxDMkZpZWxkRGVzY3JpcHRvcj4gJiZmaWVsZHMpCisgICAgICAgIDogX21UeXBlKHR5cGUpLCBfbUZpZWxkcyhzdGQ6Om1vdmUoZmllbGRzKSkgeyB9CisKKyAgICBjb25zdCBDMlBhcmFtOjpDb3JlSW5kZXggX21UeXBlOworICAgIGNvbnN0IHN0ZDo6dmVjdG9yPEMyRmllbGREZXNjcmlwdG9yPiBfbUZpZWxkczsKK307CisKKy8qKgorICogRGVzY3JpYmVzIHBhcmFtZXRlcnMgZm9yIGEgY29tcG9uZW50LgorICovCitzdHJ1Y3QgQzJQYXJhbURlc2NyaXB0b3IgeworcHVibGljOgorICAgIC8qKgorICAgICAqIFJldHVybnMgd2hldGhlciBzZXR0aW5nIHRoaXMgcGFyYW0gaXMgcmVxdWlyZWQgdG8gY29uZmlndXJlIHRoaXMgY29tcG9uZW50LgorICAgICAqIFRoaXMgY2FuIG9ubHkgYmUgdHJ1ZSBmb3IgYnVpbHRpbiBwYXJhbXMgZm9yIHBsYXRmb3JtLWRlZmluZWQgY29tcG9uZW50cyAoZS5nLiB2aWRlbyBhbmQKKyAgICAgKiBhdWRpbyBlbmNvZGVycy9kZWNvZGVycywgdmlkZW8vYXVkaW8gZmlsdGVycykuCisgICAgICogRm9yIHZlbmRvci1kZWZpbmVkIGNvbXBvbmVudHMsIGl0IGNhbiBiZSB0cnVlIGV2ZW4gZm9yIHZlbmRvci1kZWZpbmVkIHBhcmFtcywKKyAgICAgKiBidXQgaXQgaXMgbm90IHJlY29tbWVuZGVkLCBpbiBjYXNlIHRoZSBjb21wb25lbnQgYmVjb21lcyBwbGF0Zm9ybS1kZWZpbmVkLgorICAgICAqLworICAgIGlubGluZSBib29sIGlzUmVxdWlyZWQoKSBjb25zdCB7IHJldHVybiBfbUF0dHJpYiAmIElTX1JFUVVJUkVEOyB9CisKKyAgICAvKioKKyAgICAgKiBSZXR1cm5zIHdoZXRoZXIgdGhpcyBwYXJhbWV0ZXIgaXMgcGVyc2lzdGVudC4gVGhpcyBpcyBhbHdheXMgdHJ1ZSBmb3IgQzJUdW5pbmcgYW5kIEMyU2V0dGluZywKKyAgICAgKiBidXQgbWF5IGJlIGZhbHNlIGZvciBDMkluZm8uIElmIHRydWUsIHRoaXMgcGFyYW1ldGVyIHBlcnNpc3RzIGFjcm9zcyBmcmFtZXMgYW5kIGFwcGxpZXMgdG8KKyAgICAgKiB0aGUgY3VycmVudCBhbmQgc3Vic2VxdWVudCBmcmFtZXMuIElmIGZhbHNlLCB0aGlzIEMySW5mbyBwYXJhbWV0ZXIgb25seSBhcHBsaWVzIHRvIHRoZQorICAgICAqIGN1cnJlbnQgZnJhbWUgYW5kIGlzIG5vdCBhc3N1bWVkIHRvIGhhdmUgdGhlIHNhbWUgdmFsdWUgKG9yIGV2ZW4gYmUgcHJlc2VudCkgb24gc3Vic2VxdWVudAorICAgICAqIGZyYW1lcywgdW5sZXNzIGl0IGlzIHNwZWNpZmllZCBmb3IgdGhvc2UgZnJhbWVzLgorICAgICAqLworICAgIGlubGluZSBib29sIGlzUGVyc2lzdGVudCgpIGNvbnN0IHsgcmV0dXJuIF9tQXR0cmliICYgSVNfUEVSU0lTVEVOVDsgfQorCisgICAgaW5saW5lIGJvb2wgaXNTdHJpY3QoKSBjb25zdCB7IHJldHVybiBfbUF0dHJpYiAmIElTX1NUUklDVDsgfQorCisgICAgaW5saW5lIGJvb2wgaXNSZWFkT25seSgpIGNvbnN0IHsgcmV0dXJuIF9tQXR0cmliICYgSVNfUkVBRF9PTkxZOyB9CisKKyAgICBpbmxpbmUgYm9vbCBpc1Zpc2libGUoKSBjb25zdCB7IHJldHVybiAhKF9tQXR0cmliICYgSVNfSElEREVOKTsgfQorCisgICAgaW5saW5lIGJvb2wgaXNQdWJsaWMoKSBjb25zdCB7IHJldHVybiAhKF9tQXR0cmliICYgSVNfSU5URVJOQUwpOyB9CisKKyAgICAvLy8gUmV0dXJucyB0aGUgbmFtZSBvZiB0aGlzIHBhcmFtLgorICAgIC8vLyBUaGlzIGRlZmF1bHRzIHRvIHRoZSB1bmRlcmx5aW5nIEMyU3RydWN0J3MgbmFtZSwgYnV0IGNvdWxkIGJlIGFsdGVyZWQgZm9yIGEgY29tcG9uZW50LgorICAgIGlubGluZSBDMlN0cmluZyBuYW1lKCkgY29uc3QgeyByZXR1cm4gX21OYW1lOyB9CisKKyAgICAvLy8gUmV0dXJucyB0aGUgcGFyYW1ldGVyIGluZGV4CisgICAgaW5saW5lIEMyUGFyYW06OkluZGV4IGluZGV4KCkgY29uc3QgeyByZXR1cm4gX21JbmRleDsgfQorCisgICAgLy8vIFJldHVybnMgdGhlIGluZGljZXMgb2YgcGFyYW1ldGVycyB0aGF0IHRoaXMgcGFyYW1ldGVyIGhhcyBhIGRlcGVuZGVuY3kgb24KKyAgICBpbmxpbmUgY29uc3Qgc3RkOjp2ZWN0b3I8QzJQYXJhbTo6SW5kZXg+ICZkZXBlbmRlbmNpZXMoKSBjb25zdCB7IHJldHVybiBfbURlcGVuZGVuY2llczsgfQorCisgICAgLy8vIFxkZXByZWNhdGVkCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4KKyAgICBpbmxpbmUgQzJQYXJhbURlc2NyaXB0b3IoYm9vbCBpc1JlcXVpcmVkLCBDMlN0cmluZ0xpdGVyYWwgbmFtZSwgY29uc3QgVCopCisgICAgICAgIDogX21JbmRleChUOjpQQVJBTV9UWVBFKSwKKyAgICAgICAgICBfbUF0dHJpYihJU19QRVJTSVNURU5UIHwgKGlzUmVxdWlyZWQgPyBJU19SRVFVSVJFRCA6IDApKSwKKyAgICAgICAgICBfbU5hbWUobmFtZSkgeyB9CisKKyAgICAvLy8gXGRlcHJlY2F0ZWQKKyAgICBpbmxpbmUgQzJQYXJhbURlc2NyaXB0b3IoCisgICAgICAgICAgICBib29sIGlzUmVxdWlyZWQsIEMyU3RyaW5nTGl0ZXJhbCBuYW1lLCBDMlBhcmFtOjpJbmRleCBpbmRleCkKKyAgICAgICAgOiBfbUluZGV4KGluZGV4KSwKKyAgICAgICAgICBfbUF0dHJpYihJU19QRVJTSVNURU5UIHwgKGlzUmVxdWlyZWQgPyBJU19SRVFVSVJFRCA6IDApKSwKKyAgICAgICAgICBfbU5hbWUobmFtZSkgeyB9CisKKyAgICBlbnVtIGF0dHJpYl90IDogdWludDMyX3QgeworICAgICAgICAvLyBmbGFncyB0aGF0IGRlZmF1bHQgb24KKyAgICAgICAgSVNfUkVRVUlSRUQgICA9IDF1IDw8IDAsIC8vLzwgcGFyYW1ldGVyIGlzIHJlcXVpcmVkIHRvIGJlIHNwZWNpZmllZAorICAgICAgICBJU19QRVJTSVNURU5UID0gMXUgPDwgMSwgLy8vPCBwYXJhbWV0ZXIgcmV0YWlucyBpdHMgdmFsdWUKKyAgICAgICAgLy8gZmxhZ3MgdGhhdCBkZWZhdWx0IG9mZgorICAgICAgICBJU19TVFJJQ1QgICAgID0gMXUgPDwgMiwgLy8vPCBwYXJhbWV0ZXIgaXMgc3RyaWN0CisgICAgICAgIElTX1JFQURfT05MWSAgPSAxdSA8PCAzLCAvLy88IHBhcmFtZXRlciBpcyBwdWJsaWNseSByZWFkLW9ubHkKKyAgICAgICAgSVNfSElEREVOICAgICA9IDF1IDw8IDQsIC8vLzwgcGFyYW1ldGVyIHNoYWxsIG5vdCBiZSB2aXNpYmxlIHRvIGNsaWVudHMKKyAgICAgICAgSVNfSU5URVJOQUwgICA9IDF1IDw8IDUsIC8vLzwgcGFyYW1ldGVyIHNoYWxsIG5vdCBiZSB1c2VkIGJ5IGZyYW1ld29yayAob3RoZXIgdGhhbiB0ZXN0aW5nKQorICAgICAgICBJU19DT05TVCAgICAgID0gMXUgPDwgNiB8IElTX1JFQURfT05MWSwgLy8vPCBwYXJhbWV0ZXIgaXMgcHVibGljbHkgY29uc3QgKGhlbmNlIHJlYWQtb25seSkKKyAgICB9OworCisgICAgaW5saW5lIEMyUGFyYW1EZXNjcmlwdG9yKAorICAgICAgICBDMlBhcmFtOjpJbmRleCBpbmRleCwgYXR0cmliX3QgYXR0cmliLCBDMlN0cmluZ0xpdGVyYWwgbmFtZSkKKyAgICAgICAgOiBfbUluZGV4KGluZGV4KSwKKyAgICAgICAgICBfbUF0dHJpYihhdHRyaWIpLAorICAgICAgICAgIF9tTmFtZShuYW1lKSB7IH0KKworICAgIGlubGluZSBDMlBhcmFtRGVzY3JpcHRvcigKKyAgICAgICAgQzJQYXJhbTo6SW5kZXggaW5kZXgsIGF0dHJpYl90IGF0dHJpYiwgQzJTdHJpbmcgJiZuYW1lLAorICAgICAgICBzdGQ6OnZlY3RvcjxDMlBhcmFtOjpJbmRleD4gJiZkZXBlbmRlbmNpZXMpCisgICAgICAgIDogX21JbmRleChpbmRleCksCisgICAgICAgICAgX21BdHRyaWIoYXR0cmliKSwKKyAgICAgICAgICBfbU5hbWUobmFtZSksCisgICAgICAgICAgX21EZXBlbmRlbmNpZXMoc3RkOjptb3ZlKGRlcGVuZGVuY2llcykpIHsgfQorCitwcml2YXRlOgorICAgIGNvbnN0IEMyUGFyYW06OkluZGV4IF9tSW5kZXg7CisgICAgY29uc3QgdWludDMyX3QgX21BdHRyaWI7CisgICAgY29uc3QgQzJTdHJpbmcgX21OYW1lOworICAgIHN0ZDo6dmVjdG9yPEMyUGFyYW06OkluZGV4PiBfbURlcGVuZGVuY2llczsKKworICAgIGZyaWVuZCBzdHJ1Y3QgX0MyUGFyYW1JbnNwZWN0b3I7Cit9OworCitERUZJTkVfRU5VTV9PUEVSQVRPUlMoOjpDMlBhcmFtRGVzY3JpcHRvcjo6YXR0cmliX3QpCisKKworLy8vIFxpbmdyb3VwIGludGVybmFsCisvLy8gRGVmaW5lIGEgc3RydWN0dXJlIHdpdGhvdXQgQ09SRV9JTkRFWC4KKy8vLyBcbm90ZSBfRklFTERfTElTVCBpcyB1c2VkIG9ubHkgZHVyaW5nIGRlY2xhcmF0aW9uIHNvIHRoYXQgQzJTdHJ1Y3QgZGVjbGFyYXRpb25zIGNhbiBlbmQgd2l0aAorLy8vIGEgc2ltcGxlIGxpc3Qgb2YgQzJGSUVMRC1zIGFuZCBjbG9zaW5nIGJyYWNrZXQuIE1hcmsgaXQgdW51c2VkIGFzIGl0IGlzIG5vdCB1c2VkIGluIHRlbXBsYXRlZAorLy8vIHN0cnVjdHMuCisjZGVmaW5lIERFRklORV9CQVNFX0MyU1RSVUNUKG5hbWUpIFwKK3ByaXZhdGU6IFwKKyAgICBjb25zdCBzdGF0aWMgc3RkOjp2ZWN0b3I8QzJGaWVsZERlc2NyaXB0b3I+IF9GSUVMRF9MSVNUIF9fdW51c2VkOyAvKio8IHN0cnVjdHVyZSBmaWVsZHMgKi8gXAorcHVibGljOiBcCisgICAgdHlwZWRlZiBDMiMjbmFtZSMjU3RydWN0IF90eXBlOyAvKio8IHR5cGUgbmFtZSBzaG9ydGhhbmQgKi8gXAorICAgIHN0YXRpYyBjb25zdCBzdGQ6OnZlY3RvcjxDMkZpZWxkRGVzY3JpcHRvcj4gRmllbGRMaXN0KCk7IC8qKjwgc3RydWN0dXJlIGZpZWxkcyBmYWN0b3J5ICovCisKKy8vLyBEZWZpbmUgYSBzdHJ1Y3R1cmUgd2l0aCBtYXRjaGluZyBDT1JFX0lOREVYLgorI2RlZmluZSBERUZJTkVfQzJTVFJVQ1QobmFtZSkgXAorcHVibGljOiBcCisgICAgZW51bSA6IHVpbnQzMl90IHsgQ09SRV9JTkRFWCA9IGtQYXJhbUluZGV4IyNuYW1lIH07IFwKKyAgICBERUZJTkVfQkFTRV9DMlNUUlVDVChuYW1lKQorCisvLy8gRGVmaW5lIGEgZmxleGlibGUgc3RydWN0dXJlIHdpdGhvdXQgQ09SRV9JTkRFWC4KKyNkZWZpbmUgREVGSU5FX0JBU0VfRkxFWF9DMlNUUlVDVChuYW1lLCBmbGV4TWVtYmVyKSBcCitwdWJsaWM6IFwKKyAgICBGTEVYKEMyIyNuYW1lIyNTdHJ1Y3QsIGZsZXhNZW1iZXIpIFwKKyAgICBERUZJTkVfQkFTRV9DMlNUUlVDVChuYW1lKQorCisvLy8gRGVmaW5lIGEgZmxleGlibGUgc3RydWN0dXJlIHdpdGggbWF0Y2hpbmcgQ09SRV9JTkRFWC4KKyNkZWZpbmUgREVGSU5FX0ZMRVhfQzJTVFJVQ1QobmFtZSwgZmxleE1lbWJlcikgXAorcHVibGljOiBcCisgICAgRkxFWChDMiMjbmFtZSMjU3RydWN0LCBmbGV4TWVtYmVyKSBcCisgICAgZW51bSA6IHVpbnQzMl90IHsgQ09SRV9JTkRFWCA9IGtQYXJhbUluZGV4IyNuYW1lIHwgQzJQYXJhbTo6Q29yZUluZGV4OjpJU19GTEVYX0ZMQUcgfTsgXAorICAgIERFRklORV9CQVNFX0MyU1RSVUNUKG5hbWUpCisKKy8vLyBcaW5ncm91cCBpbnRlcm5hbAorLy8vIERlc2NyaWJlIGEgc3RydWN0dXJlIG9mIGEgdGVtcGxhdGVkIHN0cnVjdHVyZS4KKy8vIFVzZSBsaXN0Li4uIGFzIHRoZSBhcmd1bWVudCBnZXRzIHJlc3Vic2l0aXR1dGVkIGFuZCBpdCBjb250YWlucyBjb21tYXMuIEFsdGVybmF0aXZlIHdvdWxkIGJlCisvLyB0byB3cmFwIGxpc3QgaW4gYW4gZXhwcmVzc2lvbiwgZS5nLiAoeyBzdGQ6OnZlY3RvcjxDMkZpZWxkRGVzY3JpcHRvcj4gbGlzdDsgfSkpIHdoaWNoIGNvbnZlcnRzCisvLyBpdCBmcm9tIGFuIGluaXRpYWxpemVyIGxpc3QgdG8gYSB2ZWN0b3IuCisjZGVmaW5lIERFU0NSSUJFX1RFTVBMQVRFRF9DMlNUUlVDVChzdHJ1a3QsIGxpc3QuLi4pIFwKKyAgICBfREVTQ1JJQkVfVEVNUExBVEFCTEVfQzJTVFJVQ1QodGVtcGxhdGU8Piwgc3RydWt0LCBfX0MyX0dFTkVSQVRFX0dMT0JBTF9WQVJTX18sIGxpc3QpCisKKy8vLyBcZGVwcmVjYXRlZAorLy8vIERlc2NyaWJlIHRoZSBmaWVsZHMgb2YgYSBzdHJ1Y3R1cmUgdXNpbmcgYW4gaW5pdGlhbGl6ZXIgbGlzdC4KKyNkZWZpbmUgREVTQ1JJQkVfQzJTVFJVQ1QobmFtZSwgbGlzdC4uLikgXAorICAgIF9ERVNDUklCRV9URU1QTEFUQUJMRV9DMlNUUlVDVCgsIEMyIyNuYW1lIyNTdHJ1Y3QsIF9fQzJfR0VORVJBVEVfR0xPQkFMX1ZBUlNfXywgbGlzdCkKKworLy8vIFxpbmdyb3VwIGludGVybmFsCisvLy8gTWFjcm8gbGF5ZXIgdG8gZ2V0IHZhbHVlIG9mIGVuYWJsZWQgdGhhdCBpcyBwYXNzZWQgaW4gYXMgYSBtYWNybyB2YXJpYWJsZQorI2RlZmluZSBfREVTQ1JJQkVfVEVNUExBVEFCTEVfQzJTVFJVQ1QodGVtcGxhdGUsIHN0cnVrdCwgZW5hYmxlZCwgbGlzdC4uLikgXAorICAgIF9fREVTQ1JJQkVfVEVNUExBVEFCTEVfQzJTVFJVQ1QodGVtcGxhdGUsIHN0cnVrdCwgZW5hYmxlZCwgbGlzdCkKKworLy8vIFxpbmdyb3VwIGludGVybmFsCisvLy8gTWFjcm8gbGF5ZXIgdG8gcmVzb2x2ZSB0byB0aGUgc3BlY2lmaWMgbWFjcm8gYmFzZWQgb24gbWFjcm8gdmFyaWFibGUKKyNkZWZpbmUgX19ERVNDUklCRV9URU1QTEFUQUJMRV9DMlNUUlVDVCh0ZW1wbGF0ZSwgc3RydWt0LCBlbmFibGVkLCBsaXN0Li4uKSBcCisgICAgX19fREVTQ1JJQkVfVEVNUExBVEFCTEVfQzJTVFJVQ1QjI2VuYWJsZWQodGVtcGxhdGUsIHN0cnVrdCwgbGlzdCkKKworI2RlZmluZSBfX19ERVNDUklCRV9URU1QTEFUQUJMRV9DMlNUUlVDVCh0ZW1wbGF0ZSwgc3RydWt0LCBsaXN0Li4uKSBcCisgICAgdGVtcGxhdGUgXAorICAgIGNvbnN0IHN0ZDo6dmVjdG9yPEMyRmllbGREZXNjcmlwdG9yPiBzdHJ1a3Q6OkZpZWxkTGlzdCgpIHsgcmV0dXJuIGxpc3Q7IH0KKworI2RlZmluZSBfX19ERVNDUklCRV9URU1QTEFUQUJMRV9DMlNUUlVDVF9fQzJfR0VORVJBVEVfR0xPQkFMX1ZBUlNfXyh0ZW1wbGF0ZSwgc3RydWt0LCBsaXN0Li4uKQorCisvKioKKyAqIERlc2NyaWJlIGEgZmllbGQgb2YgYSBzdHJ1Y3R1cmUuCisgKiBUaGVzZSBtdXN0IGJlIGluIG9yZGVyLgorICoKKyAqIFRoZXJlIGFyZSB0d28gd2F5cyB0byB1c2UgdGhpcyBtYWNybzoKKyAqCisgKiAgfn5+fn5+fn5+fn5+fiAoLmNwcCkKKyAqICBzdHJ1Y3QgQzJWaWRlb1dpZHRoU3RydWN0IHsKKyAqICAgICAgaW50MzJfdCB3aWR0aDsKKyAqICAgICAgQzJWaWRlb1dpZHRoU3RydWN0KCkge30gLy8gb3B0aW9uYWwgZGVmYXVsdCBjb25zdHJ1Y3RvcgorICogICAgICBDMlZpZGVvV2lkdGhTdHJ1Y3QoaW50MzJfdCBfd2lkdGgpIDogd2lkdGgoX3dpZHRoKSB7fQorICoKKyAqICAgICAgREVGSU5FX0FORF9ERVNDUklCRV9DMlNUUlVDVChWaWRlb1dpZHRoKQorICogICAgICBDMkZJRUxEKHdpZHRoLCAid2lkdGgiKQorICogIH07CisgKiAgfn5+fn5+fn5+fn5+fgorICoKKyAqICB+fn5+fn5+fn5+fn5+ICguY3BwKQorICogIHN0cnVjdCBDMlZpZGVvV2lkdGhTdHJ1Y3QgeworICogICAgICBpbnQzMl90IHdpZHRoOworICogICAgICBDMlZpZGVvV2lkdGhTdHJ1Y3QoKSA9IGRlZmF1bHQ7IC8vIG9wdGlvbmFsIGRlZmF1bHQgY29uc3RydWN0b3IKKyAqICAgICAgQzJWaWRlb1dpZHRoU3RydWN0KGludDMyX3QgX3dpZHRoKSA6IHdpZHRoKF93aWR0aCkge30KKyAqCisgKiAgICAgIERFRklORV9DMlNUUlVDVChWaWRlb1dpZHRoKQorICogIH0gQzJfUEFDSzsKKyAqCisgKiAgREVTQ1JJQkVfQzJTVFJVQ1QoVmlkZW9XaWR0aCwgeworICogICAgICBDMkZJRUxEKHdpZHRoLCAid2lkdGgiKQorICogIH0pCisgKiAgfn5+fn5+fn5+fn5+fgorICoKKyAqICBGb3IgZmxleGlibGUgc3RydWN0dXJlcyAodGhvc2UgZW5kaW5nIGluIFRbXSksIHVzZSB0aGUgZmxleGlibGUgbWFjcm9zOgorICoKKyAqICB+fn5+fn5+fn5+fn5+ICguY3BwKQorICogIHN0cnVjdCBDMlZpZGVvRmxleFdpZHRoc1N0cnVjdCB7CisgKiAgICAgIGludDMyX3Qgd2lkdGhzW107CisgKiAgICAgIEMyVmlkZW9GbGV4V2lkdGhzU3RydWN0KCk7IC8vIG11c3QgaGF2ZSBhIGRlZmF1bHQgY29uc3RydWN0b3IKKyAqCisgKiAgcHJpdmF0ZToKKyAqICAgICAgLy8gbWF5IGhhdmUgcHJpdmF0ZSBjb25zdHJ1Y3RvcnMgdGFraW5nIG51bWJlciBvZiB3aWR0aHMgYXMgdGhlIGZpcnN0IGFyZ3VtZW50CisgKiAgICAgIC8vIFRoaXMgaXMgdXNlZCBieSB0aGUgQzJQYXJhbSBmYWN0b3J5IG1ldGhvZHMsIGUuZy4KKyAqICAgICAgLy8gICBDMlZpZGVvRmxleFdpZHRoc0dsb2JhbFBhcmFtOjpBbGxvY1VuaXF1ZShzaXplX3QsIGludDMyX3QpOworICogICAgICBDMlZpZGVvRmxleFdpZHRoc1N0cnVjdChzaXplX3QgZmxleENvdW50LCBpbnQzMl90IHZhbHVlKSB7CisgKiAgICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGZsZXhDb3VudDsgKytpKSB7CisgKiAgICAgICAgICAgICAgd2lkdGhzW2ldID0gdmFsdWU7CisgKiAgICAgICAgICB9CisgKiAgICAgIH0KKyAqCisgKiAgICAgIC8vIElmIHRoZSBsYXN0IGFyZ3VtZW50IGlzIFRbTl0gb3Igc3RkOjppbml0aWFsaXplcl9saXN0PFQ+LCB0aGUgZmxleENvdW50IHdpbGwKKyAqICAgICAgLy8gYmUgYXV0b21hdGljYWxseSBjYWxjdWxhdGVkIGFuZCBwYXNzZWQgYnkgdGhlIEMyUGFyYW0gZmFjdG9yeSBtZXRob2RzLCBlLmcuCisgKiAgICAgIC8vICAgaW50IHdpZHRoc1tdID0geyAxLCAyLCAzIH07CisgKiAgICAgIC8vICAgQzJWaWRlb0ZsZXhXaWR0aHNHbG9iYWxQYXJhbTo6QWxsb2NVbmlxdWUod2lkdGhzKTsKKyAqICAgICAgdGVtcGxhdGU8dW5zaWduZWQgTj4KKyAqICAgICAgQzJWaWRlb0ZsZXhXaWR0aHNTdHJ1Y3Qoc2l6ZV90IGZsZXhDb3VudCwgY29uc3QgaW50MzJfdCgmaW5pdClbTl0pIHsKKyAqICAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgZmxleENvdW50OyArK2kpIHsKKyAqICAgICAgICAgICAgICB3aWR0aHNbaV0gPSBpbml0W2ldOworICogICAgICAgICAgfQorICogICAgICB9CisgKgorICogICAgICBERUZJTkVfQU5EX0RFU0NSSUJFX0ZMRVhfQzJTVFJVQ1QoVmlkZW9GbGV4V2lkdGhzLCB3aWR0aHMpCisgKiAgICAgIEMyRklFTEQod2lkdGhzLCAid2lkdGhzIikKKyAqICB9OworICogIH5+fn5+fn5+fn5+fn4KKyAqCisgKiAgfn5+fn5+fn5+fn5+fiAoLmNwcCkKKyAqICBzdHJ1Y3QgQzJWaWRlb0ZsZXhXaWR0aHNTdHJ1Y3QgeworICogICAgICBpbnQzMl90IG1XaWR0aHNbXTsKKyAqICAgICAgQzJWaWRlb0ZsZXhXaWR0aHNTdHJ1Y3QoKTsgLy8gbXVzdCBoYXZlIGEgZGVmYXVsdCBjb25zdHJ1Y3RvcgorICoKKyAqICAgICAgREVGSU5FX0ZMRVhfQzJTVFJVQ1QoVmlkZW9GbGV4V2lkdGhzLCBtV2lkdGhzKQorICogIH0gQzJfUEFDSzsKKyAqCisgKiAgREVTQ1JJQkVfQzJTVFJVQ1QoVmlkZW9GbGV4V2lkdGhzLCB7CisgKiAgICAgIEMyRklFTEQobVdpZHRocywgIndpZHRocyIpCisgKiAgfSkKKyAqICB+fn5+fn5+fn5+fn5+CisgKgorICovCisjZGVmaW5lIERFU0NSSUJFX0MyRklFTEQobWVtYmVyLCBuYW1lKSBcCisgIEMyRmllbGREZXNjcmlwdG9yKCYoKF90eXBlKikobnVsbHB0cikpLT5tZW1iZXIsIG5hbWUpLAorCisjZGVmaW5lIEMyRklFTEQobWVtYmVyLCBuYW1lKSBfQzJGSUVMRChtZW1iZXIsIG5hbWUsIF9fQzJfR0VORVJBVEVfR0xPQkFMX1ZBUlNfXykKKy8vLyBcaWYgMAorI2RlZmluZSBfQzJGSUVMRChtZW1iZXIsIG5hbWUsIGVuYWJsZWQpIF9fQzJGSUVMRChtZW1iZXIsIG5hbWUsIGVuYWJsZWQpCisjZGVmaW5lIF9fQzJGSUVMRChtZW1iZXIsIG5hbWUsIGVuYWJsZWQpIERFU0NSSUJFX0MyRklFTEQjI2VuYWJsZWQobWVtYmVyLCBuYW1lKQorI2RlZmluZSBERVNDUklCRV9DMkZJRUxEX19DMl9HRU5FUkFURV9HTE9CQUxfVkFSU19fKG1lbWJlciwgbmFtZSkKKy8vLyBcZW5kaWYKKworLy8vIERlZmluZSBhIHN0cnVjdHVyZSB3aXRoIG1hdGNoaW5nIENPUkVfSU5ERVggYW5kIHN0YXJ0IGRlc2NyaWJpbmcgaXRzIGZpZWxkcy4KKy8vLyBUaGlzIG11c3QgYmUgYXQgdGhlIGVuZCBvZiB0aGUgc3RydWN0dXJlIGRlZmluaXRpb24uCisjZGVmaW5lIERFRklORV9BTkRfREVTQ1JJQkVfQzJTVFJVQ1QobmFtZSkgXAorICAgIF9ERUZJTkVfQU5EX0RFU0NSSUJFX0MyU1RSVUNUKG5hbWUsIERFRklORV9DMlNUUlVDVCwgX19DMl9HRU5FUkFURV9HTE9CQUxfVkFSU19fKQorCisvLy8gRGVmaW5lIGEgYmFzZSBzdHJ1Y3R1cmUgKHdpdGggbm8gQ09SRV9JTkRFWCkgYW5kIHN0YXJ0IGRlc2NyaWJpbmcgaXRzIGZpZWxkcy4KKy8vLyBUaGlzIG11c3QgYmUgYXQgdGhlIGVuZCBvZiB0aGUgc3RydWN0dXJlIGRlZmluaXRpb24uCisjZGVmaW5lIERFRklORV9BTkRfREVTQ1JJQkVfQkFTRV9DMlNUUlVDVChuYW1lKSBcCisgICAgX0RFRklORV9BTkRfREVTQ1JJQkVfQzJTVFJVQ1QobmFtZSwgREVGSU5FX0JBU0VfQzJTVFJVQ1QsIF9fQzJfR0VORVJBVEVfR0xPQkFMX1ZBUlNfXykKKworLy8vIERlZmluZSBhIGZsZXhpYmxlIHN0cnVjdHVyZSB3aXRoIG1hdGNoaW5nIENPUkVfSU5ERVggYW5kIHN0YXJ0IGRlc2NyaWJpbmcgaXRzIGZpZWxkcy4KKy8vLyBUaGlzIG11c3QgYmUgYXQgdGhlIGVuZCBvZiB0aGUgc3RydWN0dXJlIGRlZmluaXRpb24uCisjZGVmaW5lIERFRklORV9BTkRfREVTQ1JJQkVfRkxFWF9DMlNUUlVDVChuYW1lLCBmbGV4TWVtYmVyKSBcCisgICAgX0RFRklORV9BTkRfREVTQ1JJQkVfRkxFWF9DMlNUUlVDVCggXAorICAgICAgICAgICAgbmFtZSwgZmxleE1lbWJlciwgREVGSU5FX0ZMRVhfQzJTVFJVQ1QsIF9fQzJfR0VORVJBVEVfR0xPQkFMX1ZBUlNfXykKKworLy8vIERlZmluZSBhIGZsZXhpYmxlIGJhc2Ugc3RydWN0dXJlICh3aXRoIG5vIENPUkVfSU5ERVgpIGFuZCBzdGFydCBkZXNjcmliaW5nIGl0cyBmaWVsZHMuCisvLy8gVGhpcyBtdXN0IGJlIGF0IHRoZSBlbmQgb2YgdGhlIHN0cnVjdHVyZSBkZWZpbml0aW9uLgorI2RlZmluZSBERUZJTkVfQU5EX0RFU0NSSUJFX0JBU0VfRkxFWF9DMlNUUlVDVChuYW1lLCBmbGV4TWVtYmVyKSBcCisgICAgX0RFRklORV9BTkRfREVTQ1JJQkVfRkxFWF9DMlNUUlVDVCggXAorICAgICAgICAgICAgbmFtZSwgZmxleE1lbWJlciwgREVGSU5FX0JBU0VfRkxFWF9DMlNUUlVDVCwgX19DMl9HRU5FUkFURV9HTE9CQUxfVkFSU19fKQorCisvLy8gXGlmIDAKKy8qCisgICBBbHRlcm5hdGUgZGVjbGFyYXRpb24gb2YgZmllbGQgZGVmaW5pdGlvbnMgaW4gY2FzZSBubyBmaWVsZCBsaXN0IGlzIHRvIGJlIGdlbmVyYXRlZC4KKyAgIFRoZSBzcGVjaWZpYyBtYWNybyBpcyBjaG9zZWQgYmFzZWQgb24gdGhlIHZhbHVlIG9mIF9fQzJfR0VORVJBVEVfR0xPQkFMX1ZBUlNfXyAod2hldGhlciBpdCBpcworICAgZGVmaW5lZCAodG8gYmUgZW1wdHkpIG9yIG5vdC4gVGhpcyByZXF1aXJlcyB0d28gbGV2ZWwgb2YgbWFjcm8gc3Vic3RpdHV0aW9uLgorICAgVFJJQ0tZOiB1c2UgbmFtZXNwYWNlIGRlY2xhcmF0aW9uIHRvIGhhbmRsZSBjbG9zaW5nIGJyYWNrZXQgdGhhdCBpcyBub3JtYWxseSBhZnRlcgorICAgdGhlc2UgbWFjcm9zLgorKi8KKworI2RlZmluZSBfREVGSU5FX0FORF9ERVNDUklCRV9DMlNUUlVDVChuYW1lLCBkZWZpbmVNYWNybywgZW5hYmxlZCkgXAorICAgIF9fREVGSU5FX0FORF9ERVNDUklCRV9DMlNUUlVDVChuYW1lLCBkZWZpbmVNYWNybywgZW5hYmxlZCkKKyNkZWZpbmUgX19ERUZJTkVfQU5EX0RFU0NSSUJFX0MyU1RSVUNUKG5hbWUsIGRlZmluZU1hY3JvLCBlbmFibGVkKSBcCisgICAgX19fREVGSU5FX0FORF9ERVNDUklCRV9DMlNUUlVDVCMjZW5hYmxlZChuYW1lLCBkZWZpbmVNYWNybykKKyNkZWZpbmUgX19fREVGSU5FX0FORF9ERVNDUklCRV9DMlNUUlVDVF9fQzJfR0VORVJBVEVfR0xPQkFMX1ZBUlNfXyhuYW1lLCBkZWZpbmVNYWNybykgXAorICAgIGRlZmluZU1hY3JvKG5hbWUpIH0gQzJfUEFDSzsgbmFtZXNwYWNlIHsKKyNkZWZpbmUgX19fREVGSU5FX0FORF9ERVNDUklCRV9DMlNUUlVDVChuYW1lLCBkZWZpbmVNYWNybykgXAorICAgIGRlZmluZU1hY3JvKG5hbWUpIH0gQzJfUEFDSzsgXAorICAgIGNvbnN0IHN0ZDo6dmVjdG9yPEMyRmllbGREZXNjcmlwdG9yPiBDMiMjbmFtZSMjU3RydWN0OjpGaWVsZExpc3QoKSB7IHJldHVybiBfRklFTERfTElTVDsgfSBcCisgICAgY29uc3Qgc3RkOjp2ZWN0b3I8QzJGaWVsZERlc2NyaXB0b3I+IEMyIyNuYW1lIyNTdHJ1Y3Q6Ol9GSUVMRF9MSVNUID0geworCisjZGVmaW5lIF9ERUZJTkVfQU5EX0RFU0NSSUJFX0ZMRVhfQzJTVFJVQ1QobmFtZSwgZmxleE1lbWJlciwgZGVmaW5lTWFjcm8sIGVuYWJsZWQpIFwKKyAgICBfX0RFRklORV9BTkRfREVTQ1JJQkVfRkxFWF9DMlNUUlVDVChuYW1lLCBmbGV4TWVtYmVyLCBkZWZpbmVNYWNybywgZW5hYmxlZCkKKyNkZWZpbmUgX19ERUZJTkVfQU5EX0RFU0NSSUJFX0ZMRVhfQzJTVFJVQ1QobmFtZSwgZmxleE1lbWJlciwgZGVmaW5lTWFjcm8sIGVuYWJsZWQpIFwKKyAgICBfX19ERUZJTkVfQU5EX0RFU0NSSUJFX0ZMRVhfQzJTVFJVQ1QjI2VuYWJsZWQobmFtZSwgZmxleE1lbWJlciwgZGVmaW5lTWFjcm8pCisjZGVmaW5lIF9fX0RFRklORV9BTkRfREVTQ1JJQkVfRkxFWF9DMlNUUlVDVF9fQzJfR0VORVJBVEVfR0xPQkFMX1ZBUlNfXyhuYW1lLCBmbGV4TWVtYmVyLCBkZWZpbmVNYWNybykgXAorICAgIGRlZmluZU1hY3JvKG5hbWUsIGZsZXhNZW1iZXIpIH0gQzJfUEFDSzsgbmFtZXNwYWNlIHsKKyNkZWZpbmUgX19fREVGSU5FX0FORF9ERVNDUklCRV9GTEVYX0MyU1RSVUNUKG5hbWUsIGZsZXhNZW1iZXIsIGRlZmluZU1hY3JvKSBcCisgICAgZGVmaW5lTWFjcm8obmFtZSwgZmxleE1lbWJlcikgfSBDMl9QQUNLOyBcCisgICAgY29uc3Qgc3RkOjp2ZWN0b3I8QzJGaWVsZERlc2NyaXB0b3I+IEMyIyNuYW1lIyNTdHJ1Y3Q6OkZpZWxkTGlzdCgpIHsgcmV0dXJuIF9GSUVMRF9MSVNUOyB9IFwKKyAgICBjb25zdCBzdGQ6OnZlY3RvcjxDMkZpZWxkRGVzY3JpcHRvcj4gQzIjI25hbWUjI1N0cnVjdDo6X0ZJRUxEX0xJU1QgPSB7CisvLy8gXGVuZGlmCisKKworLyoqCisgKiBQYXJhbWV0ZXIgcmVmbGVjdG9yIGNsYXNzLgorICoKKyAqIFRoaXMgY2xhc3MgY2VudHJhbGl6ZXMgdGhlIGRlc2NyaXB0aW9uIG9mIHBhcmFtZXRlciBzdHJ1Y3R1cmVzLiBUaGlzIGNhbiBiZSBzaGFyZWQKKyAqIGJ5IG11bHRpcGxlIGNvbXBvbmVudHMgYXMgZGVzY3JpYmluZyBhIHBhcmFtZXRlciBkb2VzIG5vdCBpbXBseSBzdXBwb3J0IG9mIHRoYXQKKyAqIHBhcmFtZXRlci4gSG93ZXZlciwgZWFjaCBzdXBwb3J0ZWQgcGFyYW1ldGVyIGFuZCBhbnkgZGVwZW5kZW50IHN0cnVjdHVyZXMgd2l0aGluCisgKiBtdXN0IGJlIGRlc2NyaWJlZCBieSB0aGUgcGFyYW1ldGVyIHJlZmxlY3RvciBwcm92aWRlZCBieSBhIGNvbXBvbmVudC4KKyAqLworY2xhc3MgQzJQYXJhbVJlZmxlY3RvciB7CitwdWJsaWM6CisgICAgLyoqCisgICAgICogIERlc2NyaWJlcyBhIHBhcmFtZXRlciBzdHJ1Y3R1cmUuCisgICAgICoKKyAgICAgKiAgXHBhcmFtW2luXSBjb3JlSW5kZXggdGhlIGNvcmUgaW5kZXggb2YgdGhlIHBhcmFtZXRlciBzdHJ1Y3R1cmUgY29udGFpbmluZyBhdCBsZWFzdCB0aGUKKyAgICAgKiAgY29yZSBpbmRleAorICAgICAqCisgICAgICogIFxyZXR1cm4gdGhlIGRlc2NyaXB0aW9uIG9mIHRoZSBwYXJhbWV0ZXIgc3RydWN0dXJlCisgICAgICogIFxyZXR2YWwgbnVsbHB0ciBpZiB0aGUgcGFyYW1ldGVyIGlzIG5vdCBzdXBwb3J0ZWQgYnkgdGhpcyByZWZsZWN0b3IKKyAgICAgKgorICAgICAqICBUaGlzIG1ldGhvZHMgc2hhbGwgbm90IGJsb2NrIGFuZCByZXR1cm4gaW1tZWRpYXRlbHkuCisgICAgICoKKyAgICAgKiAgXG5vdGUgdGhpcyBjbGFzcyBkb2VzIG5vdCB0YWtlIGEgc2V0IG9mIGluZGljZXMgYmVjYXVzZSB3ZSB3b3VsZCB0aGVuIHByZWZlcgorICAgICAqICB0byBhbHNvIHJldHVybiBhbnkgZGVwZW5kZW50IHN0cnVjdHVyZXMsIGFuZCB3ZSBkb24ndCB3YW50IHRoaXMgbG9naWMgdG8gYmUKKyAgICAgKiAgcmVwZWF0ZWQgaW4gZWFjaCByZWZsZWN0b3IuIEFsdGVybmF0ZWx5LCB0aGlzIGNvdWxkIGp1c3QgcmV0dXJuIGEgbWFwIG9mIGFsbAorICAgICAqICBkZXNjcmlwdGlvbnMsIGJ1dCB3ZSB3YW50IHRvIGNvbnNlcnZlIG1lbW9yeSBpZiBjbGllbnQgb25seSB3YW50cyB0aGUgZGVzY3JpcHRpb24KKyAgICAgKiAgb2YgYSBmZXcgaW5kaWNlcy4KKyAgICAgKi8KKyAgICB2aXJ0dWFsIHN0ZDo6dW5pcXVlX3B0cjxDMlN0cnVjdERlc2NyaXB0b3I+IGRlc2NyaWJlKEMyUGFyYW06OkNvcmVJbmRleCBjb3JlSW5kZXgpIGNvbnN0ID0gMDsKKworcHJvdGVjdGVkOgorICAgIHZpcnR1YWwgfkMyUGFyYW1SZWZsZWN0b3IoKSA9IGRlZmF1bHQ7Cit9OworCisvKioKKyAqIEdlbmVyaWMgc3VwcG9ydGVkIHZhbHVlcyBmb3IgYSBmaWVsZC4KKyAqCisgKiBUaGlzIGNhbiBiZSBlaXRoZXIgYSByYW5nZSBvciBhIHNldCBvZiB2YWx1ZXMuIFRoZSByYW5nZSBjYW4gYmUgYSBzaW1wbGUgcmFuZ2UsIGFuIGFyaXRobWV0aWMsCisgKiBnZW9tZXRyaWMgb3IgbXVsdGlwbHktYWNjdW11bGF0ZSBzZXJpZXMgd2l0aCBhIGNsZWFyIG1pbmltdW0gYW5kIG1heGltdW0gdmFsdWUuIFZhbHVlcyBjYW4KKyAqIGJlIGRpc2NyZXRlIHZhbHVlcywgb3IgY2FuIG9wdGlvbmFsbHkgcmVwcmVzZW50IGZsYWdzIHRvIGJlIG9yLWVkLgorICoKKyAqIFxub3RlIERvIG5vdCB1c2UgZmxhZ3MgdG8gcmVwcmVzZW50IGJpdGZpZWxkcy4gVXNlIGluZGl2aWR1YWwgdmFsdWVzIG9yIHNlcGFyYXRlIGZpZWxkcyBpbnN0ZWFkLgorICovCitzdHJ1Y3QgQzJGaWVsZFN1cHBvcnRlZFZhbHVlcyB7CisvL3B1YmxpYzoKKyAgICBlbnVtIHR5cGVfdCB7CisgICAgICAgIEVNUFRZLCAgICAgIC8vLzwgbm8gc3VwcG9ydGVkIHZhbHVlcworICAgICAgICBSQU5HRSwgICAgICAvLy88IGEgbnVtZXJpYyByYW5nZSB0aGF0IGNhbiBiZSBjb250aW51b3VzIG9yIGRpc2NyZXRlCisgICAgICAgIFZBTFVFUywgICAgIC8vLzwgYSBsaXN0IG9mIHZhbHVlcworICAgICAgICBGTEFHUyAgICAgICAvLy88IGEgbGlzdCBvZiBmbGFncyB0aGF0IGNhbiBiZSBPUi1lZAorICAgIH07CisKKyAgICB0eXBlX3QgdHlwZTsgLyoqIFR5cGUgb2YgdmFsdWVzIGZvciB0aGlzIGZpZWxkLiAqLworCisgICAgdHlwZWRlZiBDMlZhbHVlOjpQcmltaXRpdmUgUHJpbWl0aXZlOworCisgICAgLyoqCisgICAgICogUmFuZ2Ugc3BlY2lmaWVyIGZvciBzdXBwb3J0ZWQgdmFsdWUuIFVzZWQgaWYgdHlwZSBpcyBSQU5HRS4KKyAgICAgKgorICAgICAqIElmIHN0ZXAgaXMgMCBhbmQgbnVtIGFuZCBkZW5vbSBhcmUgYm90aCAxLCB0aGUgc3VwcG9ydGVkIHZhbHVlcyBhcmUgYW55IHZhbHVlLCBmb3Igd2hpY2gKKyAgICAgKiBtaW4gPD0gdmFsdWUgPD0gbWF4LgorICAgICAqCisgICAgICogT3RoZXJ3aXNlLCB0aGUgcmFuZ2UgcmVwcmVzZW50cyBhIGdlb21ldHJpYy9hcml0aG1ldGljL211bHRpcGx5LWFjY3VtdWxhdGUgc2VyaWVzLCB3aGVyZQorICAgICAqIHN1Y2Nlc3NpdmUgc3VwcG9ydGVkIHZhbHVlcyBjYW4gYmUgZGVyaXZlZCBmcm9tIHByZXZpb3VzIHZhbHVlcyAoc3RhcnRpbmcgYXQgbWluKSwgdXNpbmcgdGhlCisgICAgICogZm9sbG93aW5nIGZvcm11bGE6CisgICAgICogIHZbMF0gPSBtaW4KKyAgICAgKiAgdltpXSA9IHZbaS0xXSAqIG51bSAvIGRlbm9tICsgc3RlcCBmb3IgaSA+PSAxLCB3aGlsZSBtaW4gPCB2W2ldIDw9IG1heC4KKyAgICAgKi8KKyAgICBzdHJ1Y3QgeworICAgICAgICAvKiogTG93ZXIgZW5kIG9mIHRoZSByYW5nZSAoaW5jbHVzaXZlKS4gKi8KKyAgICAgICAgUHJpbWl0aXZlIG1pbjsKKyAgICAgICAgLyoqIFVwcGVyIGVuZCBvZiB0aGUgcmFuZ2UgKGluY2x1c2l2ZSBpZiBwZXJtaXR0ZWQgYnkgc2VyaWVzKS4gKi8KKyAgICAgICAgUHJpbWl0aXZlIG1heDsKKyAgICAgICAgLyoqIFN0ZXAgYmV0d2VlbiBzdXBwb3J0ZWQgdmFsdWVzLiAqLworICAgICAgICBQcmltaXRpdmUgc3RlcDsKKyAgICAgICAgLyoqIE51bWVyYXRvciBvZiBhIGdlb21ldHJpYyBzZXJpZXMuICovCisgICAgICAgIFByaW1pdGl2ZSBudW07CisgICAgICAgIC8qKiBEZW5vbWluYXRvciBvZiBhIGdlb21ldHJpYyBzZXJpZXMuICovCisgICAgICAgIFByaW1pdGl2ZSBkZW5vbTsKKyAgICB9IHJhbmdlOworCisgICAgLyoqCisgICAgICogTGlzdCBvZiB2YWx1ZXMuIFVzZWQgaWYgdHlwZSBpcyBWQUxVRVMgb3IgRkxBR1MuCisgICAgICoKKyAgICAgKiBJZiB0eXBlIGlzIFZBTFVFUywgdGhpcyBpcyB0aGUgbGlzdCBvZiBzdXBwb3J0ZWQgdmFsdWVzIGluIGRlY3JlYXNpbmcgcHJlZmVyZW5jZS4KKyAgICAgKgorICAgICAqIElmIHR5cGUgaXMgRkxBR1MsIHRoaXMgdmVjdG9yIGNvbnRhaW5zIHsgbWluLW1hc2ssIGZsYWcxLCBmbGFnMi4uLiB9LiBCYXNpY2FsbHksIHRoZSBmaXJzdAorICAgICAqIHZhbHVlIGlzIHRoZSByZXF1aXJlZCBzZXQgb2YgZmxhZ3MgdG8gYmUgc2V0LCBhbmQgdGhlIHJlc3Qgb2YgdGhlIHZhbHVlcyBhcmUgZmxhZ3MgdGhhdCBjYW4KKyAgICAgKiBiZSBzZXQgaW5kZXBlbmRlbnRseS4gRkxBR1MgaXMgb25seSBzdXBwb3J0ZWQgZm9yIGludGVncmFsIHR5cGVzLiBTdXBwb3J0ZWQgZmxhZ3Mgc2hvdWxkCisgICAgICogbm90IG92ZXJsYXAsIGFzIGl0IGNhbiBtYWtlIHZhbGlkYXRpb24gbm9uLWRldGVybWluaXN0aWMuIFRoZSBzdGFuZGFyZCB2YWxpZGF0aW9uIG1ldGhvZAorICAgICAqIGlzIHRoYXQgc3RhcnRpbmcgZnJvbSB0aGUgb3JpZ2luYWwgdmFsdWUsIGlmIGVhY2ggZmxhZyBpcyByZW1vdmVkIHdoZW4gZnVsbHkgcHJlc2VudCAodGhlCisgICAgICogbWluLW1hc2sgbXVzdCBiZSBmdWxseSBwcmVzZW50KSwgd2Ugc2hhbGwgYXJyaXZlIGF0IDAuCisgICAgICovCisgICAgc3RkOjp2ZWN0b3I8UHJpbWl0aXZlPiB2YWx1ZXM7CisKKyAgICBDMkZpZWxkU3VwcG9ydGVkVmFsdWVzKCkKKyAgICAgICAgOiB0eXBlKEVNUFRZKSB7CisgICAgfQorCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4KKyAgICBDMkZpZWxkU3VwcG9ydGVkVmFsdWVzKFQgbWluLCBUIG1heCwgVCBzdGVwID0gVChzdGQ6OmlzX2Zsb2F0aW5nX3BvaW50PFQ+Ojp2YWx1ZSA/IDAgOiAxKSkKKyAgICAgICAgOiB0eXBlKFJBTkdFKSwKKyAgICAgICAgICByYW5nZXttaW4sIG1heCwgc3RlcCwgKFQpMSwgKFQpMX0geyB9CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgorICAgIEMyRmllbGRTdXBwb3J0ZWRWYWx1ZXMoVCBtaW4sIFQgbWF4LCBUIG51bSwgVCBkZW4pIDoKKyAgICAgICAgdHlwZShSQU5HRSksCisgICAgICAgIHJhbmdle21pbiwgbWF4LCAoVCkwLCBudW0sIGRlbn0geyB9CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgorICAgIEMyRmllbGRTdXBwb3J0ZWRWYWx1ZXMoVCBtaW4sIFQgbWF4LCBUIHN0ZXAsIFQgbnVtLCBUIGRlbikKKyAgICAgICAgOiB0eXBlKFJBTkdFKSwKKyAgICAgICAgICByYW5nZXttaW4sIG1heCwgc3RlcCwgbnVtLCBkZW59IHsgfQorCisgICAgLy8vIFxkZXByZWNhdGVkCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4KKyAgICBDMkZpZWxkU3VwcG9ydGVkVmFsdWVzKGJvb2wgZmxhZ3MsIHN0ZDo6aW5pdGlhbGl6ZXJfbGlzdDxUPiBsaXN0KQorICAgICAgICA6IHR5cGUoZmxhZ3MgPyBGTEFHUyA6IFZBTFVFUyksCisgICAgICAgICAgcmFuZ2V7KFQpMCwgKFQpMCwgKFQpMCwgKFQpMCwgKFQpMH0geworICAgICAgICBmb3IgKFQgdmFsdWUgOiBsaXN0KSB7CisgICAgICAgICAgICB2YWx1ZXMuZW1wbGFjZV9iYWNrKHZhbHVlKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIC8vLyBcZGVwcmVjYXRlZAorICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+CisgICAgQzJGaWVsZFN1cHBvcnRlZFZhbHVlcyhib29sIGZsYWdzLCBjb25zdCBzdGQ6OnZlY3RvcjxUPiYgbGlzdCkKKyAgICAgICAgOiB0eXBlKGZsYWdzID8gRkxBR1MgOiBWQUxVRVMpLAorICAgICAgICAgIHJhbmdleyhUKTAsIChUKTAsIChUKTAsIChUKTAsIChUKTB9IHsKKyAgICAgICAgZm9yKFQgdmFsdWUgOiBsaXN0KSB7CisgICAgICAgICAgICB2YWx1ZXMuZW1wbGFjZV9iYWNrKHZhbHVlKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIC8vLyBcaW50ZXJuYWwKKyAgICAvLy8gXHRvZG86IGNyZWF0ZSBzZXBhcmF0ZSB2YWx1ZXMgdnMuIGZsYWdzIGluaXRpYWxpemVyIGFzIGZvciBmbGFncyB3ZSB3YW50CisgICAgLy8vIHRvIGxpc3QgYm90aCBhbGxvd2VkIGFuZCByZXF1aXJlZCBmbGFncworICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIEU9ZGVjbHR5cGUoQzJGaWVsZERlc2NyaXB0b3I6Om5hbWVkVmFsdWVzRm9yKCooVCopMCkpPgorICAgIEMyRmllbGRTdXBwb3J0ZWRWYWx1ZXMoYm9vbCBmbGFncywgY29uc3QgVCopCisgICAgICAgIDogdHlwZShmbGFncyA/IEZMQUdTIDogVkFMVUVTKSwKKyAgICAgICAgICByYW5nZXsoVCkwLCAoVCkwLCAoVCkwLCAoVCkwLCAoVCkwfSB7CisgICAgICAgICAgICAgIEMyRmllbGREZXNjcmlwdG9yOjpOYW1lZFZhbHVlc1R5cGUgbmFtZWQgPSBDMkZpZWxkRGVzY3JpcHRvcjo6bmFtZWRWYWx1ZXNGb3IoKihUKikwKTsKKyAgICAgICAgaWYgKGZsYWdzKSB7CisgICAgICAgICAgICB2YWx1ZXMuZW1wbGFjZV9iYWNrKDApOyAvLyBtaW4tbWFzayBkZWZhdWx0cyB0byAwCisgICAgICAgIH0KKyAgICAgICAgZm9yIChjb25zdCBDMkZpZWxkRGVzY3JpcHRvcjo6TmFtZWRWYWx1ZVR5cGUgJml0ZW0gOiBuYW1lZCl7CisgICAgICAgICAgICB2YWx1ZXMuZW1wbGFjZV9iYWNrKGl0ZW0uc2Vjb25kKTsKKyAgICAgICAgfQorICAgIH0KK307CisKKy8qKgorICogU3VwcG9ydGVkIHZhbHVlcyBmb3IgYSBzcGVjaWZpYyBmaWVsZC4KKyAqCisgKiBUaGlzIGlzIGEgcGFpciBvZiB0aGUgZmllbGQgc3BlY2lmaWVyIHRvZ2V0aGVyIHdpdGggYW4gb3B0aW9uYWwgc3VwcG9ydGVkIHZhbHVlcyBvYmplY3QuCisgKiBUaGlzIHN0cnVjdHVyZSBpcyB1c2VkIHdoZW4gcmVwb3J0aW5nIHBhcmFtZXRlciBjb25maWd1cmF0aW9uIGZhaWx1cmVzIGFuZCBjb25mbGljdHMuCisgKi8KK3N0cnVjdCBDMlBhcmFtRmllbGRWYWx1ZXMgeworICAgIEMyUGFyYW1GaWVsZCBwYXJhbU9yRmllbGQ7IC8vLzwgdGhlIGZpZWxkIG9yIHBhcmFtZXRlcgorICAgIC8vLyBvcHRpb25hbCBzdXBwb3J0ZWQgdmFsdWVzIGZvciB0aGUgZmllbGQgaWYgcGFyYW1PckZpZWxkIHNwZWNpZmllcyBhbiBhY3R1YWwgZmllbGQgdGhhdCBpcworICAgIC8vLyBudW1lcmljIChub24gc3RydWN0LCBibG9iIG9yIHN0cmluZykuIFN1cHBvcnRlZCB2YWx1ZXMgZm9yIGFycmF5cyAoaW5jbHVkaW5nIHN0cmluZyBhbmQKKyAgICAvLy8gYmxvYnMpIGRlc2NyaWJlIHRoZSBzdXBwb3J0ZWQgdmFsdWVzIGZvciBlYWNoIGVsZW1lbnQgKGNoYXJhY3RlciBmb3Igc3RyaW5nLCBhbmQgYnl0ZXMgZm9yCisgICAgLy8vIGJsb2JzKS4gSXQgaXMgb3B0aW9uYWwgZm9yIHJlYWQtb25seSBzdHJpbmdzIGFuZCBibG9icy4KKyAgICBzdGQ6OnVuaXF1ZV9wdHI8QzJGaWVsZFN1cHBvcnRlZFZhbHVlcz4gdmFsdWVzOworCisgICAgLy8gVGhpcyBzdHJ1Y3QgaXMgbWVhbnQgdG8gYmUgbW92ZSBjb25zdHJ1Y3RlZC4KKyAgICBDMl9ERUZBVUxUX01PVkUoQzJQYXJhbUZpZWxkVmFsdWVzKTsKKworICAgIC8vIENvcHkgY29uc3RydWN0b3IvYXNzaWdubWVudCBpcyBhbHNvIHByb3ZpZGVkIGFzIHRoaXMgb2JqZWN0IG1heSBnZXQgY29waWVkLgorICAgIEMyUGFyYW1GaWVsZFZhbHVlcyhjb25zdCBDMlBhcmFtRmllbGRWYWx1ZXMgJm90aGVyKQorICAgICAgICA6IHBhcmFtT3JGaWVsZChvdGhlci5wYXJhbU9yRmllbGQpLAorICAgICAgICAgIHZhbHVlcyhvdGhlci52YWx1ZXMgPyBzdGQ6Om1ha2VfdW5pcXVlPEMyRmllbGRTdXBwb3J0ZWRWYWx1ZXM+KCpvdGhlci52YWx1ZXMpIDogbnVsbHB0cikgeyB9CisKKyAgICBDMlBhcmFtRmllbGRWYWx1ZXMmIG9wZXJhdG9yPShjb25zdCBDMlBhcmFtRmllbGRWYWx1ZXMgJm90aGVyKSB7CisgICAgICAgIHBhcmFtT3JGaWVsZCA9IG90aGVyLnBhcmFtT3JGaWVsZDsKKyAgICAgICAgdmFsdWVzID0gb3RoZXIudmFsdWVzID8gc3RkOjptYWtlX3VuaXF1ZTxDMkZpZWxkU3VwcG9ydGVkVmFsdWVzPigqb3RoZXIudmFsdWVzKSA6IG51bGxwdHI7CisgICAgICAgIHJldHVybiAqdGhpczsKKyAgICB9CisKKworICAgIC8qKgorICAgICAqIENvbnN0cnVjdCB3aXRoIG5vIHZhbHVlcy4KKyAgICAgKi8KKyAgICBDMlBhcmFtRmllbGRWYWx1ZXMoY29uc3QgQzJQYXJhbUZpZWxkICZwYXJhbU9yRmllbGRfKQorICAgICAgICA6IHBhcmFtT3JGaWVsZChwYXJhbU9yRmllbGRfKSB7IH0KKworICAgIC8qKgorICAgICAqIENvbnN0cnVjdCB3aXRoIHZhbHVlcy4KKyAgICAgKi8KKyAgICBDMlBhcmFtRmllbGRWYWx1ZXMoY29uc3QgQzJQYXJhbUZpZWxkICZwYXJhbU9yRmllbGRfLCBjb25zdCBDMkZpZWxkU3VwcG9ydGVkVmFsdWVzICZ2YWx1ZXNfKQorICAgICAgICA6IHBhcmFtT3JGaWVsZChwYXJhbU9yRmllbGRfKSwKKyAgICAgICAgICB2YWx1ZXMoc3RkOjptYWtlX3VuaXF1ZTxDMkZpZWxkU3VwcG9ydGVkVmFsdWVzPih2YWx1ZXNfKSkgeyB9CisKKyAgICAvKioKKyAgICAgKiBDb25zdHJ1Y3QgZnJvbSBmaWVsZHMuCisgICAgICovCisgICAgQzJQYXJhbUZpZWxkVmFsdWVzKGNvbnN0IEMyUGFyYW1GaWVsZCAmcGFyYW1PckZpZWxkXywgc3RkOjp1bmlxdWVfcHRyPEMyRmllbGRTdXBwb3J0ZWRWYWx1ZXM+ICYmdmFsdWVzXykKKyAgICAgICAgOiBwYXJhbU9yRmllbGQocGFyYW1PckZpZWxkXyksCisgICAgICAgICAgdmFsdWVzKHN0ZDo6bW92ZSh2YWx1ZXNfKSkgeyB9Cit9OworCisvLy8gQH0KKworLy8gaW5jbHVkZSBkZWJ1ZyBoZWFkZXIgZm9yIEMyUGFyYW1zLmggaWYgQzJEZWJ1Zy5oIHdhcyBhbHJlYWR5IGluY2x1ZGVkCisjaWZkZWYgQzJVVElMU19ERUJVR19IXworI2luY2x1ZGUgPHV0aWwvQzJEZWJ1Zy1wYXJhbS5oPgorI2VuZGlmCisKKyNlbmRpZiAgLy8gQzJQQVJBTV9IXwpkaWZmIC0tZ2l0IGEvbWVkaWEvY29kZWMyL2NvcmUvaW5jbHVkZS9DMlBhcmFtRGVmLmggYi9tZWRpYS9jb2RlYzIvY29yZS9pbmNsdWRlL0MyUGFyYW1EZWYuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wYTMzMjgzCi0tLSAvZGV2L251bGwKKysrIGIvbWVkaWEvY29kZWMyL2NvcmUvaW5jbHVkZS9DMlBhcmFtRGVmLmgKQEAgLTAsMCArMSw5MzEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworCisvKiogXGZpbGUKKyAqIFRlbXBsYXRlcyB1c2VkIHRvIGRlY2xhcmUgcGFyYW1ldGVycy4KKyAqLworI2lmbmRlZiBDMlBBUkFNX0RFRl9IXworI2RlZmluZSBDMlBBUkFNX0RFRl9IXworCisjaW5jbHVkZSA8dHlwZV90cmFpdHM+CisKKyNpbmNsdWRlIDxDMlBhcmFtLmg+CisKKy8vLyBcYWRkdG9ncm91cCBQYXJhbWV0ZXJzCisvLy8gQHsKKworLyogPT09PT09PT09PT09PT09PT09PT09PT09IFVUSUxJVFkgVEVNUExBVEVTIEZPUiBQQVJBTUVURVIgREVGSU5JVElPTlMgPT09PT09PT09PT09PT09PT09PT09PT09ICovCisKKy8vLyBcYWRkdG9ncm91cCBpbnRlcm5hbAorLy8vIEB7CisKKy8vLyBIZWxwZXIgY2xhc3MgdGhhdCBjaGVja3MgaWYgYSB0eXBlIGhhcyBlcXVhbGl0eSBhbmQgaW5lcXVhbGl0eSBvcGVyYXRvcnMuCitzdHJ1Y3QgQzJfSElERSBfQzJDb21wYXJhYmxlX2ltcGwKK3sKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBTLCB0eXBlbmFtZT1kZWNsdHlwZShTKCkgPT0gUygpKT4KKyAgICBzdGF0aWMgc3RkOjp0cnVlX3R5cGUgVGVzdEVxdWFsKGludCk7CisgICAgdGVtcGxhdGU8dHlwZW5hbWU+CisgICAgc3RhdGljIHN0ZDo6ZmFsc2VfdHlwZSBUZXN0RXF1YWwoLi4uKTsKKworICAgIHRlbXBsYXRlPHR5cGVuYW1lIFMsIHR5cGVuYW1lPWRlY2x0eXBlKFMoKSAhPSBTKCkpPgorICAgIHN0YXRpYyBzdGQ6OnRydWVfdHlwZSBUZXN0Tm90RXF1YWwoaW50KTsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZT4KKyAgICBzdGF0aWMgc3RkOjpmYWxzZV90eXBlIFRlc3ROb3RFcXVhbCguLi4pOworfTsKKworLyoqCisgKiBIZWxwZXIgdGVtcGxhdGUgdGhhdCByZXR1cm5zIGlmIGEgdHlwZSBoYXMgZXF1YWxpdHkgYW5kIGluZXF1YWxpdHkgb3BlcmF0b3JzLgorICoKKyAqIFVzZSBhcyBfQzJDb21wYXJhYmxlPHR5cGVuYW1lIFM+Ojp2YWx1ZS4KKyAqLwordGVtcGxhdGU8dHlwZW5hbWUgUz4KK3N0cnVjdCBDMl9ISURFIF9DMkNvbXBhcmFibGUKKyAgICA6IHB1YmxpYyBzdGQ6OmludGVncmFsX2NvbnN0YW50PGJvb2wsIGRlY2x0eXBlKF9DMkNvbXBhcmFibGVfaW1wbDo6VGVzdEVxdWFsPFM+KDApKTo6dmFsdWUKKyAgICAgICAgICAgICAgICAgICAgICAgIHx8IGRlY2x0eXBlKF9DMkNvbXBhcmFibGVfaW1wbDo6VGVzdE5vdEVxdWFsPFM+KDApKTo6dmFsdWU+IHsKK307CisKKy8vLyAgSGVscGVyIGNsYXNzIHRoYXQgY2hlY2tzIGlmIGEgdHlwZSBoYXMgYSBDT1JFX0lOREVYIGNvbnN0YW50Lgorc3RydWN0IEMyX0hJREUgX0MyQ29yZUluZGV4SGVscGVyX2ltcGwKK3sKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBTLCBpbnQ9Uzo6Q09SRV9JTkRFWD4KKyAgICBzdGF0aWMgc3RkOjp0cnVlX3R5cGUgVGVzdENvcmVJbmRleChpbnQpOworICAgIHRlbXBsYXRlPHR5cGVuYW1lPgorICAgIHN0YXRpYyBzdGQ6OmZhbHNlX3R5cGUgVGVzdENvcmVJbmRleCguLi4pOworfTsKKworLy8vIE1hY3JvIHRoYXQgZGVmaW5lcyBhbmQgdGh1cyBvdmVycmlkZXMgYSB0eXBlJ3MgQ09SRV9JTkRFWCBmb3IgYSBzZXR0aW5nCisjZGVmaW5lIF9DMl9DT1JFX0lOREVYX09WRVJSSURFKGNvcmVJbmRleCkgXAorcHVibGljOiBcCisgICAgZW51bSA6IHVpbnQzMl90IHsgQ09SRV9JTkRFWCA9IGNvcmVJbmRleCB9OworCisKKy8vLyBIZWxwZXIgdGVtcGxhdGUgdGhhdCBhZGRzIGEgQ09SRV9JTkRFWCB0byBhIHR5cGUgaWYgaXQgZG9lcyBub3QgaGF2ZSBvbmUgKGZvciB0ZXN0aW5nKQordGVtcGxhdGU8dHlwZW5hbWUgUywgaW50IENvcmVJbmRleD4KK3N0cnVjdCBDMl9ISURFIF9DMkFkZENvcmVJbmRleCA6IHB1YmxpYyBTIHsKKyAgICBfQzJfQ09SRV9JTkRFWF9PVkVSUklERShDb3JlSW5kZXgpCit9OworCisvKioKKyAqIFxicmllZiBIZWxwZXIgY2xhc3MgdG8gY2hlY2sgc3RydWN0IHJlcXVpcmVtZW50cyBmb3IgcGFyYW1ldGVycy4KKyAqCisgKiBGZWF0dXJlczoKKyAqICAtIHZlcmlmeSBkZWZhdWx0IGNvbnN0cnVjdG9yLCBubyB2aXJ0dWFsIG1ldGhvZHMsIGFuZCBubyBlcXVhbGl0eSBvcGVyYXRvcnMuCisgKiAgLSBleHBvc2UgUEFSQU1fVFlQRSwgYW5kIG5vbi1mbGV4IEZMRVhfU0laRS4KKyAqLwordGVtcGxhdGU8dHlwZW5hbWUgUywgaW50IENvcmVJbmRleCwgdW5zaWduZWQgVHlwZUZsYWdzPgorc3RydWN0IEMyX0hJREUgX0MyU3RydWN0Q2hlY2sgeworICAgIHN0YXRpY19hc3NlcnQoCisgICAgICAgICAgICBzdGQ6OmlzX2RlZmF1bHRfY29uc3RydWN0aWJsZTxTPjo6dmFsdWUsICJDMiBzdHJ1Y3R1cmUgbXVzdCBoYXZlIGRlZmF1bHQgY29uc3RydWN0b3IiKTsKKyAgICBzdGF0aWNfYXNzZXJ0KCFzdGQ6OmlzX3BvbHltb3JwaGljPFM+Ojp2YWx1ZSwgIkMyIHN0cnVjdHVyZSBtdXN0IG5vdCBoYXZlIHZpcnR1YWwgbWV0aG9kcyIpOworICAgIHN0YXRpY19hc3NlcnQoIV9DMkNvbXBhcmFibGU8Uz46OnZhbHVlLCAiQzIgc3RydWN0dXJlIG11c3Qgbm90IGhhdmUgb3BlcmF0b3I9PSBvciAhPSIpOworCitwdWJsaWM6CisgICAgZW51bSA6IHVpbnQzMl90IHsKKyAgICAgICAgUEFSQU1fVFlQRSA9IENvcmVJbmRleCB8IFR5cGVGbGFncworICAgIH07CisKK3Byb3RlY3RlZDoKKyAgICBlbnVtIDogdWludDMyX3QgeworICAgICAgICBGTEVYX1NJWkUgPSAwLAorICAgIH07Cit9OworCisvLy8gSGVscGVyIGNsYXNzIHRoYXQgY2hlY2tzIGlmIGEgdHlwZSBoYXMgYW4gaW50ZWdlciBGTEVYX1NJWkUgbWVtYmVyLgorc3RydWN0IEMyX0hJREUgX0MyRmxleGlibGVfaW1wbCB7CisgICAgLy8vIHNwZWNpYWxpemF0aW9uIGZvciB0eXBlcyB0aGF0IGhhdmUgYSBGTEVYX1NJWkUgbWVtYmVyCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgUywgdW5zaWduZWQ9Uzo6RkxFWF9TSVpFPgorICAgIHN0YXRpYyBzdGQ6OnRydWVfdHlwZSBUZXN0RmxleFNpemUoaW50KTsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZT4KKyAgICBzdGF0aWMgc3RkOjpmYWxzZV90eXBlIFRlc3RGbGV4U2l6ZSguLi4pOworfTsKKworLy8vIEhlbHBlciB0ZW1wbGF0ZSB0aGF0IHJldHVybnMgaWYgYSB0eXBlIGhhcyBhbiBpbnRlZ2VyIEZMRVhfU0laRSBtZW1iZXIuCit0ZW1wbGF0ZTx0eXBlbmFtZSBTPgorc3RydWN0IEMyX0hJREUgX0MyRmxleGlibGUKKyAgICA6IHB1YmxpYyBzdGQ6OmludGVncmFsX2NvbnN0YW50PGJvb2wsIGRlY2x0eXBlKF9DMkZsZXhpYmxlX2ltcGw6OlRlc3RGbGV4U2l6ZTxTPigwKSk6OnZhbHVlPiB7Cit9OworCisvLy8gTWFjcm8gdG8gdGVzdCBpZiBhIHR5cGUgaXMgZmxleGlibGUgKGhhcyBhIEZMRVhfU0laRSBtZW1iZXIpLgorI2RlZmluZSBJRl9GTEVYSUJMRShTKSBFTkFCTEVfSUYoX0MyRmxleGlibGU8Uz46OnZhbHVlKQorLy8vIFNob3J0aGFuZCBmb3Igc3RkOjplbmFibGVfaWYKKyNkZWZpbmUgRU5BQkxFX0lGKGNvbmQpIHR5cGVuYW1lIHN0ZDo6ZW5hYmxlX2lmPGNvbmQ+Ojp0eXBlCisKK3RlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFY9dm9pZD4KK3N0cnVjdCBDMl9ISURFIF9jMl9lbmFibGVfaWZfdHlwZSB7CisgICAgdHlwZWRlZiBWIHR5cGU7Cit9OworCisvLy8gSGVscGVyIHRlbXBsYXRlIHRoYXQgZXhwb3NlcyB0aGUgZmxleGlibGUgc3VidHlwZSBvZiBhIHN0cnVjdC4KK3RlbXBsYXRlPHR5cGVuYW1lIFMsIHR5cGVuYW1lIEU9dm9pZD4KK3N0cnVjdCBDMl9ISURFIF9DMkZsZXhIZWxwZXIgeworICAgIHR5cGVkZWYgdm9pZCBGbGV4VHlwZTsKKyAgICBlbnVtIDogdWludDMyX3QgeyBGTEVYX1NJWkUgPSAwIH07Cit9OworCisvLy8gU3BlY2lhbGl6YXRpb24gZm9yIGZsZXhpYmxlIHR5cGVzLiBUaGlzIG9ubHkgd29ya3MgaWYgX0ZsZXhNZW1iZXJUeXBlIGlzIHB1YmxpYy4KK3RlbXBsYXRlPHR5cGVuYW1lIFM+CitzdHJ1Y3QgQzJfSElERSBfQzJGbGV4SGVscGVyPFMsCisgICAgICAgIHR5cGVuYW1lIF9jMl9lbmFibGVfaWZfdHlwZTx0eXBlbmFtZSBTOjpfRmxleE1lbWJlclR5cGU+Ojp0eXBlPiB7CisgICAgdHlwZWRlZiB0eXBlbmFtZSBfQzJGbGV4SGVscGVyPHR5cGVuYW1lIFM6Ol9GbGV4TWVtYmVyVHlwZT46OkZsZXhUeXBlIEZsZXhUeXBlOworICAgIGVudW0gOiB1aW50MzJfdCB7IEZMRVhfU0laRSA9IF9DMkZsZXhIZWxwZXI8dHlwZW5hbWUgUzo6X0ZsZXhNZW1iZXJUeXBlPjo6RkxFWF9TSVpFIH07Cit9OworCisvLy8gU3BlY2lhbGl6YXRpb24gZm9yIGZsZXggYXJyYXlzLgordGVtcGxhdGU8dHlwZW5hbWUgUz4KK3N0cnVjdCBDMl9ISURFIF9DMkZsZXhIZWxwZXI8U1tdLAorICAgICAgICB0eXBlbmFtZSBzdGQ6OmVuYWJsZV9pZjxzdGQ6OmlzX3ZvaWQ8dHlwZW5hbWUgX0MyRmxleEhlbHBlcjxTPjo6RmxleFR5cGU+Ojp2YWx1ZT46OnR5cGU+IHsKKyAgICB0eXBlZGVmIFMgRmxleFR5cGU7CisgICAgZW51bSA6IHVpbnQzMl90IHsgRkxFWF9TSVpFID0gc2l6ZW9mKFMpIH07Cit9OworCisvKioKKyAqIFxicmllZiBIZWxwZXIgY2xhc3MgdG8gY2hlY2sgZmxleGlibGUgc3RydWN0IHJlcXVpcmVtZW50cyBhbmQgYWRkIGNvbW1vbiBvcGVyYXRpb25zLgorICoKKyAqIEZlYXR1cmVzOgorICogIC0gZXhwb3NlIENPUkVfSU5ERVggYW5kIEZpZWxkTGlzdCAodGhpcyBpcyBub3JtYWxseSBpbmhlcml0ZWQgZnJvbSB0aGUgc3RydWN0LCBidXQgZmxleGlibGUKKyAqICAgIHN0cnVjdHMgY2Fubm90IGJlIGJhc2UgY2xhc3NlcyBhbmQgdGh1cyBpbmhlcml0ZWQgZnJvbSkKKyAqICAtIGRpc2FibGUgY29weSBhc3NpZ25tZW50IGFuZCBjb25zdHJ1Y3Rpb24gKFRPRE86IHRoaXMgaXMgYWxyZWFkeSBkb25lIGluIHRoZSBGTEVYIG1hY3JvIGZvciB0aGUKKyAqICAgIGZsZXhpYmxlIHN0cnVjdCwgc28gbWF5IG5vdCBiZSBuZWVkZWQgaGVyZSkKKyAqLwordGVtcGxhdGU8dHlwZW5hbWUgUywgaW50IFBhcmFtSW5kZXgsIHVuc2lnbmVkIFR5cGVGbGFncz4KK3N0cnVjdCBDMl9ISURFIF9DMkZsZXhTdHJ1Y3RDaGVjayA6CisvLyBhZGQgZmxleGlibGUgZmxhZyBhcyBfQzJTdHJ1Y3RDaGVjayBkZWZpbmVzIFBBUkFNX1RZUEUKKyAgICAgICAgcHVibGljIF9DMlN0cnVjdENoZWNrPFMsIFBhcmFtSW5kZXggfCBDMlBhcmFtOjpDb3JlSW5kZXg6OklTX0ZMRVhfRkxBRywgVHlwZUZsYWdzPiB7CitwdWJsaWM6CisgICAgZW51bSA6IHVpbnQzMl90IHsKKyAgICAgICAgLy8vIFxoaWRlaW5pdGlhbGl6ZXIKKyAgICAgICAgQ09SRV9JTkRFWCA9IFBhcmFtSW5kZXggfCBDMlBhcmFtOjpDb3JlSW5kZXg6OklTX0ZMRVhfRkxBRywgLy8vPCBmbGV4aWJsZSBzdHJ1Y3QgY29yZS1pbmRleAorICAgIH07CisKKyAgICBpbmxpbmUgc3RhdGljIGNvbnN0IHN0ZDo6dmVjdG9yPEMyRmllbGREZXNjcmlwdG9yPiBGaWVsZExpc3QoKSB7IHJldHVybiBTOjpGaWVsZExpc3QoKTsgfQorCisgICAgLy8gZGVmYXVsdCBjb25zdHJ1Y3RvciBuZWVkZWQgYmVjYXVzZSBvZiB0aGUgZGlzYWJsZWQgY29weSBjb25zdHJ1Y3RvcgorICAgIGlubGluZSBfQzJGbGV4U3RydWN0Q2hlY2soKSA9IGRlZmF1bHQ7CisKK3Byb3RlY3RlZDoKKyAgICAvLyBjYW5ub3QgY29weSBmbGV4aWJsZSBwYXJhbXMKKyAgICBfQzJGbGV4U3RydWN0Q2hlY2soY29uc3QgX0MyRmxleFN0cnVjdENoZWNrPFMsIFBhcmFtSW5kZXgsIFR5cGVGbGFncz4gJikgPSBkZWxldGU7CisgICAgX0MyRmxleFN0cnVjdENoZWNrJiBvcGVyYXRvcj0gKGNvbnN0IF9DMkZsZXhTdHJ1Y3RDaGVjazxTLCBQYXJhbUluZGV4LCBUeXBlRmxhZ3M+ICYpID0gZGVsZXRlOworCisgICAgLy8gY29uc3RhbnRzIHVzZWQgZm9yIGhlbHBlciBtZXRob2RzCisgICAgZW51bSA6IHVpbnQzMl90IHsKKyAgICAgICAgLy8vIFxoaWRlaW5pdGlhbGl6ZXIKKyAgICAgICAgRkxFWF9TSVpFID0gX0MyRmxleEhlbHBlcjxTPjo6RkxFWF9TSVpFLCAvLy88IHNpemUgb2YgZmxleGlibGUgdHlwZQorICAgICAgICAvLy8gXGhpZGVpbml0aWFsaXplcgorICAgICAgICBNQVhfU0laRSA9ICh1aW50MzJfdClzdGQ6Om1pbigoc2l6ZV90KVVJTlQzMl9NQVgsIFNJWkVfTUFYKSwgLy8gVE9ETzogaXMgdGhpcyBhbHdheXMgdTMyIG1heD8KKyAgICAgICAgLy8vIFxoaWRlaW5pdGlhbGl6ZXIKKyAgICAgICAgQkFTRV9TSVpFID0gc2l6ZW9mKFMpICsgc2l6ZW9mKEMyUGFyYW0pLCAvLy88IHNpemUgb2YgdGhlIGJhc2UgcGFyYW0KKyAgICB9OworCisgICAgLy8vIHJldHVybnMgdGhlIGFsbG9jYXRlZCBzaXplIG9mIHRoaXMgcGFyYW0gd2l0aCBmbGV4Q291bnQsIG9yIDAgaWYgaXQgd291bGQgb3ZlcmZsb3cuCisgICAgaW5saW5lIHN0YXRpYyBzaXplX3QgQ2FsY1NpemUoc2l6ZV90IGZsZXhDb3VudCwgc2l6ZV90IHNpemUgPSBCQVNFX1NJWkUpIHsKKyAgICAgICAgaWYgKGZsZXhDb3VudCA8PSAoTUFYX1NJWkUgLSBzaXplKSAvIFM6OkZMRVhfU0laRSkgeworICAgICAgICAgICAgcmV0dXJuIHNpemUgKyBTOjpGTEVYX1NJWkUgKiBmbGV4Q291bnQ7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorCisgICAgLy8vIGR5bmFtaWMgbmV3IG9wZXJhdG9yIHVzYWJsZSBmb3IgcGFyYW1zIG9mIHR5cGUgUworICAgIGlubGluZSB2b2lkKiBvcGVyYXRvciBuZXcoc2l6ZV90IHNpemUsIHNpemVfdCBmbGV4Q291bnQpIG5vZXhjZXB0IHsKKyAgICAgICAgLy8gVE9ETzogYXNzZXJ0KHNpemUgPT0gQkFTRV9TSVpFKTsKKyAgICAgICAgc2l6ZSA9IENhbGNTaXplKGZsZXhDb3VudCwgc2l6ZSk7CisgICAgICAgIGlmIChzaXplID4gMCkgeworICAgICAgICAgICAgcmV0dXJuIDo6b3BlcmF0b3IgbmV3KHNpemUpOworICAgICAgICB9CisgICAgICAgIHJldHVybiBudWxscHRyOworICAgIH0KK307CisKKy8vLyBEZWZpbmUgRnJvbSgpIGNhc3Qgb3BlcmF0b3JzIGZvciBwYXJhbXMuCisjZGVmaW5lIERFRklORV9DQVNUX09QRVJBVE9SUyhfVHlwZSkgXAorICAgIGlubGluZSBzdGF0aWMgX1R5cGUqIEZyb20oQzJQYXJhbSAqb3RoZXIpIHsgXAorICAgICAgICByZXR1cm4gKF9UeXBlKilDMlBhcmFtOjpJZlN1aXRhYmxlKCBcCisgICAgICAgICAgICAgICAgb3RoZXIsIHNpemVvZihfVHlwZSksIF9UeXBlOjpQQVJBTV9UWVBFLCBfVHlwZTo6RkxFWF9TSVpFLCBcCisgICAgICAgICAgICAgICAgKF9UeXBlOjpQQVJBTV9UWVBFICYgVDo6SW5kZXg6OkRJUl9VTkRFRklORUQpICE9IFQ6OkluZGV4OjpESVJfVU5ERUZJTkVEKTsgXAorICAgIH0gXAorICAgIGlubGluZSBzdGF0aWMgY29uc3QgX1R5cGUqIEZyb20oY29uc3QgQzJQYXJhbSAqb3RoZXIpIHsgXAorICAgICAgICByZXR1cm4gY29uc3RfY2FzdDxjb25zdCBfVHlwZSo+KEZyb20oY29uc3RfY2FzdDxDMlBhcmFtICo+KG90aGVyKSkpOyBcCisgICAgfSBcCisgICAgaW5saW5lIHN0YXRpYyBfVHlwZSogRnJvbShzdGQ6Om51bGxwdHJfdCkgeyByZXR1cm4gbnVsbHB0cjsgfSBcCisKKy8qKgorICogRGVmaW5lIGZsZXhpYmxlIGFsbG9jYXRvcnMgKEFsbG9jU2hhcmVkIG9yIEFsbG9jVW5pcXVlKSBmb3IgZmxleGlibGUgcGFyYW1zLgorICogIC0gUDo6QWxsb2NYeXooZmxleENvdW50LCBhcmdzLi4uKTogYWxsb2NhdGUgZm9yIGdpdmVuIGZsZXgtY291bnQuIFRoaXMgbWFwcyB0bworICogICAgICAgICAgVChmbGV4Q291bnQsIGFyZ3MuLi4pXAorICoKKyAqIENsYW5nIGRvZXMgbm90IHN1cHBvcnQgYXJncy4uLiBmb2xsb3dlZCBieSB0ZW1wbGF0ZWQgcGFyYW0gYXMgYXJncy4uLiBlYXRzIGl0LiBIZW5jZSwKKyAqIHByb3ZpZGUgc3BlY2lhbGl6YXRpb25zIHdoZXJlIHRoZSBpbml0aWFsaXplciByZXBsYWNlcyB0aGUgZmxleENvdW50LgorICoKKyAqIFNwZWNpYWxpemF0aW9ucyB0aGF0IGRlZHVjZSBmbGV4Q291bnQ6CisgKiAgLSBQOjpBbGxvY1h5eihUW10sIGFyZ3MuLi4pOiBhbGxvY2F0ZSBmb3Igc2l6ZSBvZiAoYW5kIHdpdGgpIGluaXQgYXJyYXkuCisgKiAgLSBQOjpBbGxvY1h5eihzdGQ6OmluaXRpYWxpemVyX2xpc3Q8VD4sIGFyZ3MuLi4pOiBhbGxvY2F0ZSBmb3Igc2l6ZSBvZiAoYW5kIHdpdGgpIGluaXRpYWxpemVyCisgKiAgICAgICAgICAgIGxpc3QuCisgKiAgLSBQOjpBbGxvY1h5eihzdGQ6OnZlY3RvcjxUPiwgYXJncy4uLik6IGFsbG9jYXRlIGZvciBzaXplIG9mIChhbmQgd2l0aCkgaW5pdCB2ZWN0b3IuCisgKiAgVGhlc2Ugc3BlY2lhbGl6YXRpb25zIG1hcCB0byBUKGZsZXhDb3VudCA9IHNpemUtb2YtaW5pdCwgYXJncy4uLiwgaW5pdCkKKyAqLworI2RlZmluZSBERUZJTkVfRkxFWElCTEVfQUxMT0MoX1R5cGUsIFMsIHB0ciwgUHRyKSBcCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgLi4uQXJncz4gXAorICAgIGlubGluZSBzdGF0aWMgc3RkOjpwdHIjI19wdHI8X1R5cGU+IEFsbG9jIyNQdHIoc2l6ZV90IGZsZXhDb3VudCwgY29uc3QgQXJncygmLi4uIGFyZ3MpKSB7IFwKKyAgICAgICAgcmV0dXJuIHN0ZDo6cHRyIyNfcHRyPF9UeXBlPihuZXcoZmxleENvdW50KSBfVHlwZShmbGV4Q291bnQsIGFyZ3MuLi4pKTsgXAorICAgIH0gXAorICAgIHRlbXBsYXRlPHR5cGVuYW1lIC4uLkFyZ3MsIHR5cGVuYW1lIFU9dHlwZW5hbWUgUzo6RmxleFR5cGU+IFwKKyAgICBpbmxpbmUgc3RhdGljIHN0ZDo6cHRyIyNfcHRyPF9UeXBlPiBBbGxvYyMjUHRyKCBcCisgICAgICAgICAgICBjb25zdCBzdGQ6OmluaXRpYWxpemVyX2xpc3Q8VT4gJmluaXQsIGNvbnN0IEFyZ3MoJi4uLiBhcmdzKSkgeyBcCisgICAgICAgIHJldHVybiBzdGQ6OnB0ciMjX3B0cjxfVHlwZT4obmV3KGluaXQuc2l6ZSgpKSBfVHlwZShpbml0LnNpemUoKSwgYXJncy4uLiwgaW5pdCkpOyBcCisgICAgfSBcCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgLi4uQXJncywgdHlwZW5hbWUgVT10eXBlbmFtZSBTOjpGbGV4VHlwZT4gXAorICAgIGlubGluZSBzdGF0aWMgc3RkOjpwdHIjI19wdHI8X1R5cGU+IEFsbG9jIyNQdHIoIFwKKyAgICAgICAgICAgIGNvbnN0IHN0ZDo6dmVjdG9yPFU+ICZpbml0LCBjb25zdCBBcmdzKCYuLi4gYXJncykpIHsgXAorICAgICAgICByZXR1cm4gc3RkOjpwdHIjI19wdHI8X1R5cGU+KG5ldyhpbml0LnNpemUoKSkgX1R5cGUoaW5pdC5zaXplKCksIGFyZ3MuLi4sIGluaXQpKTsgXAorICAgIH0gXAorICAgIHRlbXBsYXRlPHR5cGVuYW1lIC4uLkFyZ3MsIHR5cGVuYW1lIFU9dHlwZW5hbWUgUzo6RmxleFR5cGUsIHVuc2lnbmVkIE4+IFwKKyAgICBpbmxpbmUgc3RhdGljIHN0ZDo6cHRyIyNfcHRyPF9UeXBlPiBBbGxvYyMjUHRyKGNvbnN0IFUoJmluaXQpW05dLCBjb25zdCBBcmdzKCYuLi4gYXJncykpIHsgXAorICAgICAgICByZXR1cm4gc3RkOjpwdHIjI19wdHI8X1R5cGU+KG5ldyhOKSBfVHlwZShOLCBhcmdzLi4uLCBpbml0KSk7IFwKKyAgICB9IFwKKworLyoqCisgKiBEZWZpbmUgZmxleGlibGUgbWV0aG9kcyBBbGxvY1NoYXJlZCwgQWxsb2NVbmlxdWUgYW5kIGZsZXhDb3VudC4KKyAqLworI2RlZmluZSBERUZJTkVfRkxFWElCTEVfTUVUSE9EUyhfVHlwZSwgUykgXAorICAgIERFRklORV9GTEVYSUJMRV9BTExPQyhfVHlwZSwgUywgc2hhcmVkLCBTaGFyZWQpIFwKKyAgICBERUZJTkVfRkxFWElCTEVfQUxMT0MoX1R5cGUsIFMsIHVuaXF1ZSwgVW5pcXVlKSBcCisgICAgaW5saW5lIHNpemVfdCBmbGV4Q291bnQoKSBjb25zdCB7IFwKKyAgICAgICAgc3RhdGljX2Fzc2VydChzaXplb2YoX1R5cGUpID09IF9UeXBlOjpCQVNFX1NJWkUsICJpbmNvcnJlY3QgQkFTRV9TSVpFIik7IFwKKyAgICAgICAgc2l6ZV90IHN6ID0gdGhpcy0+c2l6ZSgpOyBcCisgICAgICAgIGlmIChzeiA+PSBzaXplb2YoX1R5cGUpKSB7IFwKKyAgICAgICAgICAgIHJldHVybiAoc3ogLSBzaXplb2YoX1R5cGUpKSAvIF9UeXBlOjpGTEVYX1NJWkU7IFwKKyAgICAgICAgfSBcCisgICAgICAgIHJldHVybiAwOyBcCisgICAgfSBcCisKKy8vLyBNYXJrIGZsZXhpYmxlIG1lbWJlciB2YXJpYWJsZSBhbmQgbWFrZSBzdHJ1Y3R1cmUgZmxleGlibGUuCisjZGVmaW5lIEZMRVgoY2xzLCBtKSBcCisgICAgQzJfRE9fTk9UX0NPUFkoY2xzKSBcCitwcml2YXRlOiBcCisgICAgQzJQQVJBTV9NQUtFX0ZSSUVORFMgXAorICAgIC8qKiBcaWYgMCAqLyBcCisgICAgdGVtcGxhdGU8dHlwZW5hbWUsIHR5cGVuYW1lPiBmcmllbmQgc3RydWN0IF9DMkZsZXhIZWxwZXI7IFwKK3B1YmxpYzogXAorICAgIHR5cGVkZWYgZGVjbHR5cGUobSkgX0ZsZXhNZW1iZXJUeXBlOyBcCisgICAgLyogZGVmYXVsdCBjb25zdHJ1Y3RvciB3aXRoIGZsZXhDb3VudCAqLyBcCisgICAgaW5saW5lIGNscyhzaXplX3QpIDogY2xzKCkge30gXAorICAgIC8qIGNvbnN0ZXhwciBzdGF0aWMgX0ZsZXhNZW1iZXJUeXBlIGNsczo6KiBmbGV4TWVtYmVyID0gJmNsczo6bTsgKi8gXAorICAgIHR5cGVkZWYgdHlwZW5hbWUgX0MyRmxleEhlbHBlcjxfRmxleE1lbWJlclR5cGU+OjpGbGV4VHlwZSBGbGV4VHlwZTsgXAorICAgIHN0YXRpY19hc3NlcnQoXAorICAgICAgICAgICAgIXN0ZDo6aXNfdm9pZDxGbGV4VHlwZT46OnZhbHVlLCBcCisgICAgICAgICAgICAibWVtYmVyIGlzIG5vdCBmbGV4aWJsZSwgb3IgYSBmbGV4aWJsZSBhcnJheSBvZiBhIGZsZXhpYmxlIHR5cGUiKTsgXAorICAgIGVudW0gOiB1aW50MzJfdCB7IEZMRVhfU0laRSA9IF9DMkZsZXhIZWxwZXI8X0ZsZXhNZW1iZXJUeXBlPjo6RkxFWF9TSVpFIH07IFwKKyAgICAvKiogXGVuZGlmICovIFwKKworLy8vIEB9CisKKy8qKgorICogR2xvYmFsLXBhcmFtZXRlciB0ZW1wbGF0ZS4KKyAqCisgKiBCYXNlIHRlbXBsYXRlIHRvIGRlZmluZSBhIGdsb2JhbCBzZXR0aW5nL3R1bmluZyBvciBpbmZvIGJhc2VkIG9uIGEgc3RydWN0dXJlIGFuZAorICogYW4gb3B0aW9uYWwgUGFyYW1JbmRleC4gR2xvYmFsIHBhcmFtZXRlcnMgYXJlIG5vdCB0aWVkIHRvIGEgcG9ydCAoaW5wdXQgb3Igb3V0cHV0KS4KKyAqCisgKiBQYXJhbWV0ZXJzIHdyYXAgc3RydWN0dXJlcyBieSBwcmVwZW5kaW5nIGEgKHBhcmFtZXRlcikgaGVhZGVyLiBUaGUgZmllbGRzIG9mIHRoZSB3cmFwcGVkCisgKiBzdHJ1Y3R1cmUgY2FuIGJlIGFjY2Vzc2VkIGRpcmVjdGx5LCBhbmQgY29uc3RydWN0b3JzIGFuZCBwb3RlbnRpYWwgcHVibGljIG1ldGhvZHMgYXJlIGFsc28KKyAqIHdyYXBwZWQuCisgKgorICogXHRwYXJhbSBUIHBhcmFtIHR5cGUgQzJTZXR0aW5nLCBDMlR1bmluZyBvciBDMkluZm8KKyAqIFx0cGFyYW0gUyB3cmFwcGVkIHN0cnVjdHVyZQorICogXHRwYXJhbSBQYXJhbUluZGV4IG9wdGlvbmFsIHBhcmFtZXRlciBpbmRleCBvdmVycmlkZS4gTXVzdCBiZSBzcGVjaWZpZWQgZm9yIGJhc2UvcmV1c2VkCisgKiBzdHJ1Y3R1cmVzLgorICovCit0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBTLCBpbnQgUGFyYW1JbmRleD1TOjpDT1JFX0lOREVYLCBjbGFzcyBGbGV4PXZvaWQ+CitzdHJ1Y3QgQzJfSElERSBDMkdsb2JhbFBhcmFtIDogcHVibGljIFQsIHB1YmxpYyBTLAorICAgICAgICBwdWJsaWMgX0MyU3RydWN0Q2hlY2s8UywgUGFyYW1JbmRleCwgVDo6UEFSQU1fS0lORCB8IFQ6OlR5cGU6OkRJUl9HTE9CQUw+IHsKKyAgICBfQzJfQ09SRV9JTkRFWF9PVkVSUklERShQYXJhbUluZGV4KQorcHJpdmF0ZToKKyAgICB0eXBlZGVmIEMyR2xvYmFsUGFyYW08VCwgUywgUGFyYW1JbmRleD4gX1R5cGU7CisKK3B1YmxpYzoKKyAgICAvLy8gV3JhcHBlciBhcm91bmQgYmFzZSBzdHJ1Y3R1cmUncyBjb25zdHJ1Y3Rvci4KKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSAuLi5BcmdzPgorICAgIGlubGluZSBDMkdsb2JhbFBhcmFtKGNvbnN0IEFyZ3MoJi4uLiBhcmdzKSkgOiBUKHNpemVvZihfVHlwZSksIF9UeXBlOjpQQVJBTV9UWVBFKSwgUyhhcmdzLi4uKSB7IH0KKworICAgIERFRklORV9DQVNUX09QRVJBVE9SUyhfVHlwZSkKK307CisKKy8qKgorICogR2xvYmFsLXBhcmFtZXRlciB0ZW1wbGF0ZSBmb3IgZmxleGlibGUgc3RydWN0dXJlcy4KKyAqCisgKiBCYXNlIHRlbXBsYXRlIHRvIGRlZmluZSBhIGdsb2JhbCBzZXR0aW5nL3R1bmluZyBvciBpbmZvIGJhc2VkIG9uIGEgZmxleGlibGUgc3RydWN0dXJlIGFuZAorICogYW4gb3B0aW9uYWwgUGFyYW1JbmRleC4gR2xvYmFsIHBhcmFtZXRlcnMgYXJlIG5vdCB0aWVkIHRvIGEgcG9ydCAoaW5wdXQgb3Igb3V0cHV0KS4KKyAqCisgKiBcdHBhcmFtIFQgcGFyYW0gdHlwZSBDMlNldHRpbmcsIEMyVHVuaW5nIG9yIEMySW5mbworICogXHRwYXJhbSBTIHdyYXBwZWQgZmxleGlibGUgc3RydWN0dXJlCisgKiBcdHBhcmFtIFBhcmFtSW5kZXggb3B0aW9uYWwgcGFyYW1ldGVyIGluZGV4IG92ZXJyaWRlLiBNdXN0IGJlIHNwZWNpZmllZCBmb3IgYmFzZS9yZXVzZWQKKyAqICAgICAgICAgc3RydWN0dXJlcy4KKyAqCisgKiBQYXJhbWV0ZXJzIHdyYXAgc3RydWN0dXJlcyBieSBwcmVwZW5kaW5nIGEgKHBhcmFtZXRlcikgaGVhZGVyLiBUaGUgZmllbGRzIGFuZCBtZXRob2RzIG9mIGZsZXhpYmxlCisgKiBzdHJ1Y3R1cmVzIGNhbiBiZSBhY2Nlc3NlZCB2aWEgdGhlIG0gbWVtYmVyIHZhcmlhYmxlOyBob3dldmVyLCB0aGUgY29uc3RydWN0b3JzIG9mIHRoZSBzdHJ1Y3R1cmUKKyAqIGFyZSB3cmFwcGVkIGRpcmVjdGx5LiAoVGhpcyBpcyBiZWNhdXNlIGZsZXhpYmxlIHR5cGVzIGNhbm5vdCBiZSBzdWJjbGFzc2VkLikKKyAqLwordGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgUywgaW50IFBhcmFtSW5kZXg+CitzdHJ1Y3QgQzJfSElERSBDMkdsb2JhbFBhcmFtPFQsIFMsIFBhcmFtSW5kZXgsIElGX0ZMRVhJQkxFKFMpPgorICAgIDogcHVibGljIFQsIHB1YmxpYyBfQzJGbGV4U3RydWN0Q2hlY2s8UywgUGFyYW1JbmRleCwgVDo6UEFSQU1fS0lORCB8IFQ6OlR5cGU6OkRJUl9HTE9CQUw+IHsKK3ByaXZhdGU6CisgICAgdHlwZWRlZiBDMkdsb2JhbFBhcmFtPFQsIFMsIFBhcmFtSW5kZXg+IF9UeXBlOworCisgICAgLy8vIFdyYXBwZXIgYXJvdW5kIGJhc2Ugc3RydWN0dXJlJ3MgY29uc3RydWN0b3IuCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgLi4uQXJncz4KKyAgICBpbmxpbmUgQzJHbG9iYWxQYXJhbShzaXplX3QgZmxleENvdW50LCBjb25zdCBBcmdzKCYuLi4gYXJncykpCisgICAgICAgIDogVChfVHlwZTo6Q2FsY1NpemUoZmxleENvdW50KSwgX1R5cGU6OlBBUkFNX1RZUEUpLCBtKGZsZXhDb3VudCwgYXJncy4uLikgeyB9CisKK3B1YmxpYzoKKyAgICBTIG07IC8vLzwgd3JhcHBlZCBmbGV4aWJsZSBzdHJ1Y3R1cmUKKworICAgIERFRklORV9GTEVYSUJMRV9NRVRIT0RTKF9UeXBlLCBTKQorICAgIERFRklORV9DQVNUX09QRVJBVE9SUyhfVHlwZSkKK307CisKKy8qKgorICogUG9ydC1wYXJhbWV0ZXIgdGVtcGxhdGUuCisgKgorICogQmFzZSB0ZW1wbGF0ZSB0byBkZWZpbmUgYSBwb3J0IHNldHRpbmcvdHVuaW5nIG9yIGluZm8gYmFzZWQgb24gYSBzdHJ1Y3R1cmUgYW5kCisgKiBhbiBvcHRpb25hbCBQYXJhbUluZGV4LiBQb3J0IHBhcmFtZXRlcnMgYXJlIHRpZWQgdG8gYSBwb3J0IChpbnB1dCBvciBvdXRwdXQpLCBidXQgbm90IHRvIGEKKyAqIHNwZWNpZmljIHN0cmVhbS4KKyAqCisgKiBcdHBhcmFtIFQgcGFyYW0gdHlwZSBDMlNldHRpbmcsIEMyVHVuaW5nIG9yIEMySW5mbworICogXHRwYXJhbSBTIHdyYXBwZWQgc3RydWN0dXJlCisgKiBcdHBhcmFtIFBhcmFtSW5kZXggb3B0aW9uYWwgcGFyYW1ldGVyIGluZGV4IG92ZXJyaWRlLiBNdXN0IGJlIHNwZWNpZmllZCBmb3IgYmFzZS9yZXVzZWQKKyAqICAgICAgICAgc3RydWN0dXJlcy4KKyAqCisgKiBQYXJhbWV0ZXJzIHdyYXAgc3RydWN0dXJlcyBieSBwcmVwZW5kaW5nIGEgKHBhcmFtZXRlcikgaGVhZGVyLiBUaGUgZmllbGRzIG9mIHRoZSB3cmFwcGVkCisgKiBzdHJ1Y3R1cmUgY2FuIGJlIGFjY2Vzc2VkIGRpcmVjdGx5LCBhbmQgY29uc3RydWN0b3JzIGFuZCBwb3RlbnRpYWwgcHVibGljIG1ldGhvZHMgYXJlIGFsc28KKyAqIHdyYXBwZWQuCisgKgorICogVGhlcmUgYXJlIDMgZmxhdm9ycyBvZiBwb3J0IHBhcmFtZXRlcnM6IHVuc3BlY2lmaWVkLCBpbnB1dCBhbmQgb3V0cHV0LiBQYXJhbWV0ZXJzIHdpdGgKKyAqIHVuc3BlY2lmaWVkIHBvcnQgZXhwb3NlIGEgc2V0UG9ydCBtZXRob2QsIGFuZCBhZGQgYW4gaW5pdGlhbCBwb3J0IHBhcmFtZXRlciB0byB0aGUgY29uc3RydWN0b3IuCisgKi8KK3RlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFMsIGludCBQYXJhbUluZGV4PVM6OkNPUkVfSU5ERVgsIGNsYXNzIEZsZXg9dm9pZD4KK3N0cnVjdCBDMl9ISURFIEMyUG9ydFBhcmFtIDogcHVibGljIFQsIHB1YmxpYyBTLAorICAgICAgICBwcml2YXRlIF9DMlN0cnVjdENoZWNrPFMsIFBhcmFtSW5kZXgsIFQ6OlBBUkFNX0tJTkQgfCBUOjpJbmRleDo6RElSX1VOREVGSU5FRD4geworICAgIF9DMl9DT1JFX0lOREVYX09WRVJSSURFKFBhcmFtSW5kZXgpCitwcml2YXRlOgorICAgIHR5cGVkZWYgQzJQb3J0UGFyYW08VCwgUywgUGFyYW1JbmRleD4gX1R5cGU7CisKK3B1YmxpYzoKKyAgICAvLy8gRGVmYXVsdCBjb25zdHJ1Y3Rvci4KKyAgICBpbmxpbmUgQzJQb3J0UGFyYW0oKSA6IFQoc2l6ZW9mKF9UeXBlKSwgX1R5cGU6OlBBUkFNX1RZUEUpIHsgfQorICAgIHRlbXBsYXRlPHR5cGVuYW1lIC4uLkFyZ3M+CisgICAgLy8vIFdyYXBwZXIgYXJvdW5kIGJhc2Ugc3RydWN0dXJlJ3MgY29uc3RydWN0b3Igd2hpbGUgc3BlY2lmeWluZyBwb3J0L2RpcmVjdGlvbi4KKyAgICBpbmxpbmUgQzJQb3J0UGFyYW0oYm9vbCBfb3V0cHV0LCBjb25zdCBBcmdzKCYuLi4gYXJncykpCisgICAgICAgIDogVChzaXplb2YoX1R5cGUpLCBfb3V0cHV0ID8gb3V0cHV0OjpQQVJBTV9UWVBFIDogaW5wdXQ6OlBBUkFNX1RZUEUpLCBTKGFyZ3MuLi4pIHsgfQorICAgIC8vLyBTZXQgcG9ydC9kaXJlY3Rpb24uCisgICAgaW5saW5lIHZvaWQgc2V0UG9ydChib29sIG91dHB1dCkgeyBDMlBhcmFtOjpzZXRQb3J0KG91dHB1dCk7IH0KKworICAgIERFRklORV9DQVNUX09QRVJBVE9SUyhfVHlwZSkKKworICAgIC8vLyBTcGVjaWFsaXphdGlvbiBmb3IgYW4gaW5wdXQgcG9ydCBwYXJhbWV0ZXIuCisgICAgc3RydWN0IGlucHV0IDogcHVibGljIFQsIHB1YmxpYyBTLAorICAgICAgICAgICAgcHVibGljIF9DMlN0cnVjdENoZWNrPFMsIFBhcmFtSW5kZXgsIFQ6OlBBUkFNX0tJTkQgfCBUOjpJbmRleDo6RElSX0lOUFVUPiB7CisgICAgICAgIF9DMl9DT1JFX0lOREVYX09WRVJSSURFKFBhcmFtSW5kZXgpCisgICAgICAgIC8vLyBXcmFwcGVyIGFyb3VuZCBiYXNlIHN0cnVjdHVyZSdzIGNvbnN0cnVjdG9yLgorICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSAuLi5BcmdzPgorICAgICAgICBpbmxpbmUgaW5wdXQoY29uc3QgQXJncygmLi4uIGFyZ3MpKSA6IFQoc2l6ZW9mKF9UeXBlKSwgaW5wdXQ6OlBBUkFNX1RZUEUpLCBTKGFyZ3MuLi4pIHsgfQorCisgICAgICAgIERFRklORV9DQVNUX09QRVJBVE9SUyhpbnB1dCkKKworICAgIH07CisKKyAgICAvLy8gU3BlY2lhbGl6YXRpb24gZm9yIGFuIG91dHB1dCBwb3J0IHBhcmFtZXRlci4KKyAgICBzdHJ1Y3Qgb3V0cHV0IDogcHVibGljIFQsIHB1YmxpYyBTLAorICAgICAgICAgICAgcHVibGljIF9DMlN0cnVjdENoZWNrPFMsIFBhcmFtSW5kZXgsIFQ6OlBBUkFNX0tJTkQgfCBUOjpJbmRleDo6RElSX09VVFBVVD4geworICAgICAgICBfQzJfQ09SRV9JTkRFWF9PVkVSUklERShQYXJhbUluZGV4KQorICAgICAgICAvLy8gV3JhcHBlciBhcm91bmQgYmFzZSBzdHJ1Y3R1cmUncyBjb25zdHJ1Y3Rvci4KKyAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgLi4uQXJncz4KKyAgICAgICAgaW5saW5lIG91dHB1dChjb25zdCBBcmdzKCYuLi4gYXJncykpIDogVChzaXplb2YoX1R5cGUpLCBvdXRwdXQ6OlBBUkFNX1RZUEUpLCBTKGFyZ3MuLi4pIHsgfQorCisgICAgICAgIERFRklORV9DQVNUX09QRVJBVE9SUyhvdXRwdXQpCisgICAgfTsKK307CisKKy8qKgorICogUG9ydC1wYXJhbWV0ZXIgdGVtcGxhdGUgZm9yIGZsZXhpYmxlIHN0cnVjdHVyZXMuCisgKgorICogQmFzZSB0ZW1wbGF0ZSB0byBkZWZpbmUgYSBwb3J0IHNldHRpbmcvdHVuaW5nIG9yIGluZm8gYmFzZWQgb24gYSBmbGV4aWJsZSBzdHJ1Y3R1cmUgYW5kCisgKiBhbiBvcHRpb25hbCBQYXJhbUluZGV4LiBQb3J0IHBhcmFtZXRlcnMgYXJlIHRpZWQgdG8gYSBwb3J0IChpbnB1dCBvciBvdXRwdXQpLCBidXQgbm90IHRvIGEKKyAqIHNwZWNpZmljIHN0cmVhbS4KKyAqCisgKiBcdHBhcmFtIFQgcGFyYW0gdHlwZSBDMlNldHRpbmcsIEMyVHVuaW5nIG9yIEMySW5mbworICogXHRwYXJhbSBTIHdyYXBwZWQgZmxleGlibGUgc3RydWN0dXJlCisgKiBcdHBhcmFtIFBhcmFtSW5kZXggb3B0aW9uYWwgcGFyYW1ldGVyIGluZGV4IG92ZXJyaWRlLiBNdXN0IGJlIHNwZWNpZmllZCBmb3IgYmFzZS9yZXVzZWQKKyAqICAgICAgICAgc3RydWN0dXJlcy4KKyAqCisgKiBQYXJhbWV0ZXJzIHdyYXAgc3RydWN0dXJlcyBieSBwcmVwZW5kaW5nIGEgKHBhcmFtZXRlcikgaGVhZGVyLiBUaGUgZmllbGRzIGFuZCBtZXRob2RzIG9mIGZsZXhpYmxlCisgKiBzdHJ1Y3R1cmVzIGNhbiBiZSBhY2Nlc3NlZCB2aWEgdGhlIG0gbWVtYmVyIHZhcmlhYmxlOyBob3dldmVyLCB0aGUgY29uc3RydWN0b3JzIG9mIHRoZSBzdHJ1Y3R1cmUKKyAqIGFyZSB3cmFwcGVkIGRpcmVjdGx5LiAoVGhpcyBpcyBiZWNhdXNlIGZsZXhpYmxlIHR5cGVzIGNhbm5vdCBiZSBzdWJjbGFzc2VkLikKKyAqCisgKiBUaGVyZSBhcmUgMyBmbGF2b3JzIG9mIHBvcnQgcGFyYW1ldGVyczogdW5zcGVjaWZpZWQsIGlucHV0IGFuZCBvdXRwdXQuIFBhcmFtZXRlcnMgd2l0aAorICogdW5zcGVjaWZpZWQgcG9ydCBleHBvc2UgYSBzZXRQb3J0IG1ldGhvZCwgYW5kIGFkZCBhbiBpbml0aWFsIHBvcnQgcGFyYW1ldGVyIHRvIHRoZSBjb25zdHJ1Y3Rvci4KKyAqLwordGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgUywgaW50IFBhcmFtSW5kZXg+CitzdHJ1Y3QgQzJfSElERSBDMlBvcnRQYXJhbTxULCBTLCBQYXJhbUluZGV4LCBJRl9GTEVYSUJMRShTKT4KKyAgICA6IHB1YmxpYyBULCBwdWJsaWMgX0MyRmxleFN0cnVjdENoZWNrPFMsIFBhcmFtSW5kZXgsIFQ6OlBBUkFNX0tJTkQgfCBUOjpUeXBlOjpESVJfVU5ERUZJTkVEPiB7Citwcml2YXRlOgorICAgIHR5cGVkZWYgQzJQb3J0UGFyYW08VCwgUywgUGFyYW1JbmRleD4gX1R5cGU7CisKKyAgICAvLy8gRGVmYXVsdCBjb25zdHJ1Y3RvciBmb3IgYmFzaWMgYWxsb2NhdGlvbjogbmV3KGZsZXhDb3VudCkgUC4KKyAgICBpbmxpbmUgQzJQb3J0UGFyYW0oc2l6ZV90IGZsZXhDb3VudCkgOiBUKF9UeXBlOjpDYWxjU2l6ZShmbGV4Q291bnQpLCBfVHlwZTo6UEFSQU1fVFlQRSkgeyB9CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgLi4uQXJncz4KKyAgICAvLy8gV3JhcHBlciBhcm91bmQgYmFzZSBzdHJ1Y3R1cmUncyBjb25zdHJ1Y3RvciB3aGlsZSBhbHNvIHNwZWNpZnlpbmcgcG9ydC9kaXJlY3Rpb24uCisgICAgaW5saW5lIEMyUG9ydFBhcmFtKHNpemVfdCBmbGV4Q291bnQsIGJvb2wgX291dHB1dCwgY29uc3QgQXJncygmLi4uIGFyZ3MpKQorICAgICAgICA6IFQoX1R5cGU6OkNhbGNTaXplKGZsZXhDb3VudCksIF9vdXRwdXQgPyBvdXRwdXQ6OlBBUkFNX1RZUEUgOiBpbnB1dDo6UEFSQU1fVFlQRSksCisgICAgICAgICAgbShmbGV4Q291bnQsIGFyZ3MuLi4pIHsgfQorCitwdWJsaWM6CisgICAgLy8vIFNldCBwb3J0L2RpcmVjdGlvbi4KKyAgICBpbmxpbmUgdm9pZCBzZXRQb3J0KGJvb2wgb3V0cHV0KSB7IEMyUGFyYW06OnNldFBvcnQob3V0cHV0KTsgfQorCisgICAgUyBtOyAvLy88IHdyYXBwZWQgZmxleGlibGUgc3RydWN0dXJlCisKKyAgICBERUZJTkVfRkxFWElCTEVfTUVUSE9EUyhfVHlwZSwgUykKKyAgICBERUZJTkVfQ0FTVF9PUEVSQVRPUlMoX1R5cGUpCisKKyAgICAvLy8gU3BlY2lhbGl6YXRpb24gZm9yIGFuIGlucHV0IHBvcnQgcGFyYW1ldGVyLgorICAgIHN0cnVjdCBpbnB1dCA6IHB1YmxpYyBULAorICAgICAgICAgICAgcHVibGljIF9DMkZsZXhTdHJ1Y3RDaGVjazxTLCBQYXJhbUluZGV4LCBUOjpQQVJBTV9LSU5EIHwgVDo6SW5kZXg6OkRJUl9JTlBVVD4geworICAgIHByaXZhdGU6CisgICAgICAgIC8vLyBXcmFwcGVyIGFyb3VuZCBiYXNlIHN0cnVjdHVyZSdzIGNvbnN0cnVjdG9yIHdoaWxlIGFsc28gc3BlY2lmeWluZyBwb3J0L2RpcmVjdGlvbi4KKyAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgLi4uQXJncz4KKyAgICAgICAgaW5saW5lIGlucHV0KHNpemVfdCBmbGV4Q291bnQsIGNvbnN0IEFyZ3MoJi4uLiBhcmdzKSkKKyAgICAgICAgICAgIDogVChfVHlwZTo6Q2FsY1NpemUoZmxleENvdW50KSwgaW5wdXQ6OlBBUkFNX1RZUEUpLCBtKGZsZXhDb3VudCwgYXJncy4uLikgeyB9CisKKyAgICBwdWJsaWM6CisgICAgICAgIFMgbTsgLy8vPCB3cmFwcGVkIGZsZXhpYmxlIHN0cnVjdHVyZQorCisgICAgICAgIERFRklORV9GTEVYSUJMRV9NRVRIT0RTKGlucHV0LCBTKQorICAgICAgICBERUZJTkVfQ0FTVF9PUEVSQVRPUlMoaW5wdXQpCisgICAgfTsKKworICAgIC8vLyBTcGVjaWFsaXphdGlvbiBmb3IgYW4gb3V0cHV0IHBvcnQgcGFyYW1ldGVyLgorICAgIHN0cnVjdCBvdXRwdXQgOiBwdWJsaWMgVCwKKyAgICAgICAgICAgIHB1YmxpYyBfQzJGbGV4U3RydWN0Q2hlY2s8UywgUGFyYW1JbmRleCwgVDo6UEFSQU1fS0lORCB8IFQ6OkluZGV4OjpESVJfT1VUUFVUPiB7CisgICAgcHJpdmF0ZToKKyAgICAgICAgLy8vIFdyYXBwZXIgYXJvdW5kIGJhc2Ugc3RydWN0dXJlJ3MgY29uc3RydWN0b3Igd2hpbGUgYWxzbyBzcGVjaWZ5aW5nIHBvcnQvZGlyZWN0aW9uLgorICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSAuLi5BcmdzPgorICAgICAgICBpbmxpbmUgb3V0cHV0KHNpemVfdCBmbGV4Q291bnQsIGNvbnN0IEFyZ3MoJi4uLiBhcmdzKSkKKyAgICAgICAgICAgIDogVChfVHlwZTo6Q2FsY1NpemUoZmxleENvdW50KSwgb3V0cHV0OjpQQVJBTV9UWVBFKSwgbShmbGV4Q291bnQsIGFyZ3MuLi4pIHsgfQorCisgICAgcHVibGljOgorICAgICAgICBTIG07IC8vLzwgd3JhcHBlZCBmbGV4aWJsZSBzdHJ1Y3R1cmUKKworICAgICAgICBERUZJTkVfRkxFWElCTEVfTUVUSE9EUyhvdXRwdXQsIFMpCisgICAgICAgIERFRklORV9DQVNUX09QRVJBVE9SUyhvdXRwdXQpCisgICAgfTsKK307CisKKy8qKgorICogU3RyZWFtLXBhcmFtZXRlciB0ZW1wbGF0ZS4KKyAqCisgKiBCYXNlIHRlbXBsYXRlIHRvIGRlZmluZSBhIHN0cmVhbSBzZXR0aW5nL3R1bmluZyBvciBpbmZvIGJhc2VkIG9uIGEgc3RydWN0dXJlIGFuZAorICogYW4gb3B0aW9uYWwgUGFyYW1JbmRleC4gU3RyZWFtIHBhcmFtZXRlcnMgYXJlIHRpZWQgdG8gYSBzcGVjaWZpYyBzdHJlYW0gb24gYSBwb3J0IChpbnB1dCBvcgorICogb3V0cHV0KS4KKyAqCisgKiBcdHBhcmFtIFQgcGFyYW0gdHlwZSBDMlNldHRpbmcsIEMyVHVuaW5nIG9yIEMySW5mbworICogXHRwYXJhbSBTIHdyYXBwZWQgc3RydWN0dXJlCisgKiBcdHBhcmFtIFBhcmFtSW5kZXggb3B0aW9uYWwgcGFyYW10ZXIgaW5kZXggb3ZlcnJpZGUuIE11c3QgYmUgc3BlY2lmaWVkIGZvciBiYXNlL3JldXNlZAorICogICAgICAgICBzdHJ1Y3R1cmVzLgorICoKKyAqIFBhcmFtZXRlcnMgd3JhcCBzdHJ1Y3R1cmVzIGJ5IHByZXBlbmRpbmcgYSAocGFyYW1ldGVyKSBoZWFkZXIuIFRoZSBmaWVsZHMgb2YgdGhlIHdyYXBwZWQKKyAqIHN0cnVjdHVyZSBjYW4gYmUgYWNjZXNzZWQgZGlyZWN0bHksIGFuZCBjb25zdHJ1Y3RvcnMgYW5kIHBvdGVudGlhbCBwdWJsaWMgbWV0aG9kcyBhcmUgYWxzbworICogd3JhcHBlZC4KKyAqCisgKiBUaGVyZSBhcmUgMyBmbGF2b3JzIG9mIHN0cmVhbSBwYXJhbWV0ZXJzOiB1bnNwZWNpZmllZCBwb3J0LCBpbnB1dCBhbmQgb3V0cHV0LiBBbGwgb2YgdGhlc2UgZXhwb3NlCisgKiBhIHNldFN0cmVhbSBtZXRob2QgYW5kIGFuIGV4dHJhIGluaXRpYWwgc3RyZWFtSUQgcGFyYW1ldGVyIGZvciB0aGUgY29uc3RydWN0b3IuIE1vcmVvdmVyLAorICogcGFyYW1ldGVycyB3aXRoIHVuc3BlY2lmaWVkIHBvcnQgZXhwb3NlIGEgc2V0UG9ydCBtZXRob2QsIGFuZCBhZGQgYW4gYWRkaXRpb25hbCBpbml0aWFsIHBvcnQKKyAqIHBhcmFtZXRlciB0byB0aGUgY29uc3RydWN0b3IuCisgKi8KK3RlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFMsIGludCBQYXJhbUluZGV4PVM6OkNPUkVfSU5ERVgsIGNsYXNzIEZsZXg9dm9pZD4KK3N0cnVjdCBDMl9ISURFIEMyU3RyZWFtUGFyYW0gOiBwdWJsaWMgVCwgcHVibGljIFMsCisgICAgICAgIHByaXZhdGUgX0MyU3RydWN0Q2hlY2s8UywgUGFyYW1JbmRleCwKKyAgICAgICAgICAgICAgICBUOjpQQVJBTV9LSU5EIHwgVDo6SW5kZXg6OklTX1NUUkVBTV9GTEFHIHwgVDo6SW5kZXg6OkRJUl9VTkRFRklORUQ+IHsKKyAgICBfQzJfQ09SRV9JTkRFWF9PVkVSUklERShQYXJhbUluZGV4KQorcHJpdmF0ZToKKyAgICB0eXBlZGVmIEMyU3RyZWFtUGFyYW08VCwgUywgUGFyYW1JbmRleD4gX1R5cGU7CisKK3B1YmxpYzoKKyAgICAvLy8gRGVmYXVsdCBjb25zdHJ1Y3Rvci4gUG9ydC9kaXJlY3Rpb24gYW5kIHN0cmVhbS1JRCBpcyB1bmRlZmluZWQuCisgICAgaW5saW5lIEMyU3RyZWFtUGFyYW0oKSA6IFQoc2l6ZW9mKF9UeXBlKSwgX1R5cGU6OlBBUkFNX1RZUEUpIHsgfQorICAgIC8vLyBXcmFwcGVyIGFyb3VuZCBiYXNlIHN0cnVjdHVyZSdzIGNvbnN0cnVjdG9yIHdoaWxlIGFsc28gc3BlY2lmeWluZyBwb3J0L2RpcmVjdGlvbiBhbmQKKyAgICAvLy8gc3RyZWFtLUlELgorICAgIHRlbXBsYXRlPHR5cGVuYW1lIC4uLkFyZ3M+CisgICAgaW5saW5lIEMyU3RyZWFtUGFyYW0oYm9vbCBfb3V0cHV0LCB1bnNpZ25lZCBzdHJlYW0sIGNvbnN0IEFyZ3MoJi4uLiBhcmdzKSkKKyAgICAgICAgOiBUKHNpemVvZihfVHlwZSksIF9vdXRwdXQgPyBvdXRwdXQ6OlBBUkFNX1RZUEUgOiBpbnB1dDo6UEFSQU1fVFlQRSwgc3RyZWFtKSwKKyAgICAgICAgICBTKGFyZ3MuLi4pIHsgfQorICAgIC8vLyBTZXQgcG9ydC9kaXJlY3Rpb24uCisgICAgaW5saW5lIHZvaWQgc2V0UG9ydChib29sIG91dHB1dCkgeyBDMlBhcmFtOjpzZXRQb3J0KG91dHB1dCk7IH0KKyAgICAvLy8gU2V0IHN0cmVhbS1pZC4gXHJldHZhbCB0cnVlIGlmIHRoZSBzdHJlYW0taWQgd2FzIHN1Y2Nlc3NmdWxseSBzZXQuCisgICAgaW5saW5lIGJvb2wgc2V0U3RyZWFtKHVuc2lnbmVkIHN0cmVhbSkgeyByZXR1cm4gQzJQYXJhbTo6c2V0U3RyZWFtKHN0cmVhbSk7IH0KKworICAgIERFRklORV9DQVNUX09QRVJBVE9SUyhfVHlwZSkKKworICAgIC8vLyBTcGVjaWFsaXphdGlvbiBmb3IgYW4gaW5wdXQgc3RyZWFtIHBhcmFtZXRlci4KKyAgICBzdHJ1Y3QgaW5wdXQgOiBwdWJsaWMgVCwgcHVibGljIFMsCisgICAgICAgICAgICBwdWJsaWMgX0MyU3RydWN0Q2hlY2s8UywgUGFyYW1JbmRleCwKKyAgICAgICAgICAgICAgICAgICAgVDo6UEFSQU1fS0lORCB8IFQ6OkluZGV4OjpJU19TVFJFQU1fRkxBRyB8IFQ6OlR5cGU6OkRJUl9JTlBVVD4geworICAgICAgICBfQzJfQ09SRV9JTkRFWF9PVkVSUklERShQYXJhbUluZGV4KQorCisgICAgICAgIC8vLyBEZWZhdWx0IGNvbnN0cnVjdG9yLiBTdHJlYW0tSUQgaXMgdW5kZWZpbmVkLgorICAgICAgICBpbmxpbmUgaW5wdXQoKSA6IFQoc2l6ZW9mKF9UeXBlKSwgaW5wdXQ6OlBBUkFNX1RZUEUpIHsgfQorICAgICAgICAvLy8gV3JhcHBlciBhcm91bmQgYmFzZSBzdHJ1Y3R1cmUncyBjb25zdHJ1Y3RvciB3aGlsZSBhbHNvIHNwZWNpZnlpbmcgc3RyZWFtLUlELgorICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSAuLi5BcmdzPgorICAgICAgICBpbmxpbmUgaW5wdXQodW5zaWduZWQgc3RyZWFtLCBjb25zdCBBcmdzKCYuLi4gYXJncykpCisgICAgICAgICAgICA6IFQoc2l6ZW9mKF9UeXBlKSwgaW5wdXQ6OlBBUkFNX1RZUEUsIHN0cmVhbSksIFMoYXJncy4uLikgeyB9CisgICAgICAgIC8vLyBTZXQgc3RyZWFtLWlkLiBccmV0dmFsIHRydWUgaWYgdGhlIHN0cmVhbS1pZCB3YXMgc3VjY2Vzc2Z1bGx5IHNldC4KKyAgICAgICAgaW5saW5lIGJvb2wgc2V0U3RyZWFtKHVuc2lnbmVkIHN0cmVhbSkgeyByZXR1cm4gQzJQYXJhbTo6c2V0U3RyZWFtKHN0cmVhbSk7IH0KKworICAgICAgICBERUZJTkVfQ0FTVF9PUEVSQVRPUlMoaW5wdXQpCisgICAgfTsKKworICAgIC8vLyBTcGVjaWFsaXphdGlvbiBmb3IgYW4gb3V0cHV0IHN0cmVhbSBwYXJhbWV0ZXIuCisgICAgc3RydWN0IG91dHB1dCA6IHB1YmxpYyBULCBwdWJsaWMgUywKKyAgICAgICAgICAgIHB1YmxpYyBfQzJTdHJ1Y3RDaGVjazxTLCBQYXJhbUluZGV4LAorICAgICAgICAgICAgICAgICAgICBUOjpQQVJBTV9LSU5EIHwgVDo6SW5kZXg6OklTX1NUUkVBTV9GTEFHIHwgVDo6VHlwZTo6RElSX09VVFBVVD4geworICAgICAgICBfQzJfQ09SRV9JTkRFWF9PVkVSUklERShQYXJhbUluZGV4KQorCisgICAgICAgIC8vLyBEZWZhdWx0IGNvbnN0cnVjdG9yLiBTdHJlYW0tSUQgaXMgdW5kZWZpbmVkLgorICAgICAgICBpbmxpbmUgb3V0cHV0KCkgOiBUKHNpemVvZihfVHlwZSksIG91dHB1dDo6UEFSQU1fVFlQRSkgeyB9CisgICAgICAgIC8vLyBXcmFwcGVyIGFyb3VuZCBiYXNlIHN0cnVjdHVyZSdzIGNvbnN0cnVjdG9yIHdoaWxlIGFsc28gc3BlY2lmeWluZyBzdHJlYW0tSUQuCisgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIC4uLkFyZ3M+CisgICAgICAgIGlubGluZSBvdXRwdXQodW5zaWduZWQgc3RyZWFtLCBjb25zdCBBcmdzKCYuLi4gYXJncykpCisgICAgICAgICAgICA6IFQoc2l6ZW9mKF9UeXBlKSwgb3V0cHV0OjpQQVJBTV9UWVBFLCBzdHJlYW0pLCBTKGFyZ3MuLi4pIHsgfQorICAgICAgICAvLy8gU2V0IHN0cmVhbS1pZC4gXHJldHZhbCB0cnVlIGlmIHRoZSBzdHJlYW0taWQgd2FzIHN1Y2Nlc3NmdWxseSBzZXQuCisgICAgICAgIGlubGluZSBib29sIHNldFN0cmVhbSh1bnNpZ25lZCBzdHJlYW0pIHsgcmV0dXJuIEMyUGFyYW06OnNldFN0cmVhbShzdHJlYW0pOyB9CisKKyAgICAgICAgREVGSU5FX0NBU1RfT1BFUkFUT1JTKG91dHB1dCkKKyAgICB9OworfTsKKworLyoqCisgKiBTdHJlYW0tcGFyYW1ldGVyIHRlbXBsYXRlIGZvciBmbGV4aWJsZSBzdHJ1Y3R1cmVzLgorICoKKyAqIEJhc2UgdGVtcGxhdGUgdG8gZGVmaW5lIGEgc3RyZWFtIHNldHRpbmcvdHVuaW5nIG9yIGluZm8gYmFzZWQgb24gYSBmbGV4aWJsZSBzdHJ1Y3R1cmUgYW5kCisgKiBhbiBvcHRpb25hbCBQYXJhbUluZGV4LiBTdHJlYW0gcGFyYW1ldGVycyBhcmUgdGllZCB0byBhIHNwZWNpZmljIHN0cmVhbSBvbiBhIHBvcnQgKGlucHV0IG9yCisgKiBvdXRwdXQpLgorICoKKyAqIFx0cGFyYW0gVCBwYXJhbSB0eXBlIEMyU2V0dGluZywgQzJUdW5pbmcgb3IgQzJJbmZvCisgKiBcdHBhcmFtIFMgd3JhcHBlZCBmbGV4aWJsZSBzdHJ1Y3R1cmUKKyAqIFx0cGFyYW0gUGFyYW1JbmRleCBvcHRpb25hbCBwYXJhbWV0ZXIgaW5kZXggb3ZlcnJpZGUuIE11c3QgYmUgc3BlY2lmaWVkIGZvciBiYXNlL3JldXNlZAorICogICAgICAgICBzdHJ1Y3R1cmVzLgorICoKKyAqIFBhcmFtZXRlcnMgd3JhcCBzdHJ1Y3R1cmVzIGJ5IHByZXBlbmRpbmcgYSAocGFyYW1ldGVyKSBoZWFkZXIuIFRoZSBmaWVsZHMgYW5kIG1ldGhvZHMgb2YgZmxleGlibGUKKyAqIHN0cnVjdHVyZXMgY2FuIGJlIGFjY2Vzc2VkIHZpYSB0aGUgbSBtZW1iZXIgdmFyaWFibGU7IGhvd2V2ZXIsIHRoZSBjb25zdHJ1Y3RvcnMgb2YgdGhlIHN0cnVjdHVyZQorICogYXJlIHdyYXBwZWQgZGlyZWN0bHkuIChUaGlzIGlzIGJlY2F1c2UgZmxleGlibGUgdHlwZXMgY2Fubm90IGJlIHN1YmNsYXNzZWQuKQorICoKKyAqIFRoZXJlIGFyZSAzIGZsYXZvcnMgb2Ygc3RyZWFtIHBhcmFtZXRlcnM6IHVuc3BlY2lmaWVkIHBvcnQsIGlucHV0IGFuZCBvdXRwdXQuIEFsbCBvZiB0aGVzZSBleHBvc2UKKyAqIGEgc2V0U3RyZWFtIG1ldGhvZCBhbmQgYW4gZXh0cmEgaW5pdGlhbCBzdHJlYW1JRCBwYXJhbWV0ZXIgZm9yIHRoZSBjb25zdHJ1Y3Rvci4gTW9yZW92ZXIsCisgKiBwYXJhbWV0ZXJzIHdpdGggdW5zcGVjaWZpZWQgcG9ydCBleHBvc2UgYSBzZXRQb3J0IG1ldGhvZCwgYW5kIGFkZCBhbiBhZGRpdGlvbmFsIGluaXRpYWwgcG9ydAorICogcGFyYW1ldGVyIHRvIHRoZSBjb25zdHJ1Y3Rvci4KKyAqLwordGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgUywgaW50IFBhcmFtSW5kZXg+CitzdHJ1Y3QgQzJfSElERSBDMlN0cmVhbVBhcmFtPFQsIFMsIFBhcmFtSW5kZXgsIElGX0ZMRVhJQkxFKFMpPgorICAgIDogcHVibGljIFQsCisgICAgICBwdWJsaWMgX0MyRmxleFN0cnVjdENoZWNrPFMsIFBhcmFtSW5kZXgsCisgICAgICAgICAgICAgIFQ6OlBBUkFNX0tJTkQgfCBUOjpJbmRleDo6SVNfU1RSRUFNX0ZMQUcgfCBUOjpJbmRleDo6RElSX1VOREVGSU5FRD4geworcHJpdmF0ZToKKyAgICB0eXBlZGVmIEMyU3RyZWFtUGFyYW08VCwgUywgUGFyYW1JbmRleD4gX1R5cGU7CisgICAgLy8vIERlZmF1bHQgY29uc3RydWN0b3IuIFBvcnQvZGlyZWN0aW9uIGFuZCBzdHJlYW0tSUQgaXMgdW5kZWZpbmVkLgorICAgIGlubGluZSBDMlN0cmVhbVBhcmFtKHNpemVfdCBmbGV4Q291bnQpIDogVChfVHlwZTo6Q2FsY1NpemUoZmxleENvdW50KSwgX1R5cGU6OlBBUkFNX1RZUEUsIDB1KSB7IH0KKyAgICAvLy8gV3JhcHBlciBhcm91bmQgYmFzZSBzdHJ1Y3R1cmUncyBjb25zdHJ1Y3RvciB3aGlsZSBhbHNvIHNwZWNpZnlpbmcgcG9ydC9kaXJlY3Rpb24gYW5kCisgICAgLy8vIHN0cmVhbS1JRC4KKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSAuLi5BcmdzPgorICAgIGlubGluZSBDMlN0cmVhbVBhcmFtKHNpemVfdCBmbGV4Q291bnQsIGJvb2wgX291dHB1dCwgdW5zaWduZWQgc3RyZWFtLCBjb25zdCBBcmdzKCYuLi4gYXJncykpCisgICAgICAgIDogVChfVHlwZTo6Q2FsY1NpemUoZmxleENvdW50KSwgX291dHB1dCA/IG91dHB1dDo6UEFSQU1fVFlQRSA6IGlucHV0OjpQQVJBTV9UWVBFLCBzdHJlYW0pLAorICAgICAgICAgIG0oZmxleENvdW50LCBhcmdzLi4uKSB7IH0KKworcHVibGljOgorICAgIFMgbTsgLy8vPCB3cmFwcGVkIGZsZXhpYmxlIHN0cnVjdHVyZQorCisgICAgLy8vIFNldCBwb3J0L2RpcmVjdGlvbi4KKyAgICBpbmxpbmUgdm9pZCBzZXRQb3J0KGJvb2wgb3V0cHV0KSB7IEMyUGFyYW06OnNldFBvcnQob3V0cHV0KTsgfQorICAgIC8vLyBTZXQgc3RyZWFtLWlkLiBccmV0dmFsIHRydWUgaWYgdGhlIHN0cmVhbS1pZCB3YXMgc3VjY2Vzc2Z1bGx5IHNldC4KKyAgICBpbmxpbmUgYm9vbCBzZXRTdHJlYW0odW5zaWduZWQgc3RyZWFtKSB7IHJldHVybiBDMlBhcmFtOjpzZXRTdHJlYW0oc3RyZWFtKTsgfQorCisgICAgREVGSU5FX0ZMRVhJQkxFX01FVEhPRFMoX1R5cGUsIFMpCisgICAgREVGSU5FX0NBU1RfT1BFUkFUT1JTKF9UeXBlKQorCisgICAgLy8vIFNwZWNpYWxpemF0aW9uIGZvciBhbiBpbnB1dCBzdHJlYW0gcGFyYW1ldGVyLgorICAgIHN0cnVjdCBpbnB1dCA6IHB1YmxpYyBULAorICAgICAgICAgICAgcHVibGljIF9DMkZsZXhTdHJ1Y3RDaGVjazxTLCBQYXJhbUluZGV4LAorICAgICAgICAgICAgICAgICAgICBUOjpQQVJBTV9LSU5EIHwgVDo6SW5kZXg6OklTX1NUUkVBTV9GTEFHIHwgVDo6VHlwZTo6RElSX0lOUFVUPiB7CisgICAgcHJpdmF0ZToKKyAgICAgICAgLy8vIERlZmF1bHQgY29uc3RydWN0b3IuIFN0cmVhbS1JRCBpcyB1bmRlZmluZWQuCisgICAgICAgIGlubGluZSBpbnB1dChzaXplX3QgZmxleENvdW50KSA6IFQoX1R5cGU6OkNhbGNTaXplKGZsZXhDb3VudCksIGlucHV0OjpQQVJBTV9UWVBFKSB7IH0KKyAgICAgICAgLy8vIFdyYXBwZXIgYXJvdW5kIGJhc2Ugc3RydWN0dXJlJ3MgY29uc3RydWN0b3Igd2hpbGUgYWxzbyBzcGVjaWZ5aW5nIHN0cmVhbS1JRC4KKyAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgLi4uQXJncz4KKyAgICAgICAgaW5saW5lIGlucHV0KHNpemVfdCBmbGV4Q291bnQsIHVuc2lnbmVkIHN0cmVhbSwgY29uc3QgQXJncygmLi4uIGFyZ3MpKQorICAgICAgICAgICAgOiBUKF9UeXBlOjpDYWxjU2l6ZShmbGV4Q291bnQpLCBpbnB1dDo6UEFSQU1fVFlQRSwgc3RyZWFtKSwgbShmbGV4Q291bnQsIGFyZ3MuLi4pIHsgfQorCisgICAgcHVibGljOgorICAgICAgICBTIG07IC8vLzwgd3JhcHBlZCBmbGV4aWJsZSBzdHJ1Y3R1cmUKKworICAgICAgICAvLy8gU2V0IHN0cmVhbS1pZC4gXHJldHZhbCB0cnVlIGlmIHRoZSBzdHJlYW0taWQgd2FzIHN1Y2Nlc3NmdWxseSBzZXQuCisgICAgICAgIGlubGluZSBib29sIHNldFN0cmVhbSh1bnNpZ25lZCBzdHJlYW0pIHsgcmV0dXJuIEMyUGFyYW06OnNldFN0cmVhbShzdHJlYW0pOyB9CisKKyAgICAgICAgREVGSU5FX0ZMRVhJQkxFX01FVEhPRFMoaW5wdXQsIFMpCisgICAgICAgIERFRklORV9DQVNUX09QRVJBVE9SUyhpbnB1dCkKKyAgICB9OworCisgICAgLy8vIFNwZWNpYWxpemF0aW9uIGZvciBhbiBvdXRwdXQgc3RyZWFtIHBhcmFtZXRlci4KKyAgICBzdHJ1Y3Qgb3V0cHV0IDogcHVibGljIFQsCisgICAgICAgICAgICBwdWJsaWMgX0MyRmxleFN0cnVjdENoZWNrPFMsIFBhcmFtSW5kZXgsCisgICAgICAgICAgICAgICAgICAgIFQ6OlBBUkFNX0tJTkQgfCBUOjpJbmRleDo6SVNfU1RSRUFNX0ZMQUcgfCBUOjpUeXBlOjpESVJfT1VUUFVUPiB7CisgICAgcHJpdmF0ZToKKyAgICAgICAgLy8vIERlZmF1bHQgY29uc3RydWN0b3IuIFN0cmVhbS1JRCBpcyB1bmRlZmluZWQuCisgICAgICAgIGlubGluZSBvdXRwdXQoc2l6ZV90IGZsZXhDb3VudCkgOiBUKF9UeXBlOjpDYWxjU2l6ZShmbGV4Q291bnQpLCBvdXRwdXQ6OlBBUkFNX1RZUEUpIHsgfQorICAgICAgICAvLy8gV3JhcHBlciBhcm91bmQgYmFzZSBzdHJ1Y3R1cmUncyBjb25zdHJ1Y3RvciB3aGlsZSBhbHNvIHNwZWNpZnlpbmcgc3RyZWFtLUlELgorICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSAuLi5BcmdzPgorICAgICAgICBpbmxpbmUgb3V0cHV0KHNpemVfdCBmbGV4Q291bnQsIHVuc2lnbmVkIHN0cmVhbSwgY29uc3QgQXJncygmLi4uIGFyZ3MpKQorICAgICAgICAgICAgOiBUKF9UeXBlOjpDYWxjU2l6ZShmbGV4Q291bnQpLCBvdXRwdXQ6OlBBUkFNX1RZUEUsIHN0cmVhbSksIG0oZmxleENvdW50LCBhcmdzLi4uKSB7IH0KKworICAgIHB1YmxpYzoKKyAgICAgICAgUyBtOyAvLy88IHdyYXBwZWQgZmxleGlibGUgc3RydWN0dXJlCisKKyAgICAgICAgLy8vIFNldCBzdHJlYW0taWQuIFxyZXR2YWwgdHJ1ZSBpZiB0aGUgc3RyZWFtLWlkIHdhcyBzdWNjZXNzZnVsbHkgc2V0LgorICAgICAgICBpbmxpbmUgYm9vbCBzZXRTdHJlYW0odW5zaWduZWQgc3RyZWFtKSB7IHJldHVybiBDMlBhcmFtOjpzZXRTdHJlYW0oc3RyZWFtKTsgfQorCisgICAgICAgIERFRklORV9GTEVYSUJMRV9NRVRIT0RTKG91dHB1dCwgUykKKyAgICAgICAgREVGSU5FX0NBU1RfT1BFUkFUT1JTKG91dHB1dCkKKyAgICB9OworfTsKKworLyogPT09PT09PT09PT09PT09PT09PT09PT09IFNJTVBMRSBWQUxVRSBQQVJBTUVURVJTID09PT09PT09PT09PT09PT09PT09PT09PSAqLworCisvKioKKyAqIFxpbmdyb3VwIGludGVybmFsCisgKiBBIHN0cnVjdHVyZSB0ZW1wbGF0ZSBlbmNhcHN1bGF0aW5nIGEgc2luZ2xlIGVsZW1lbnQgd2l0aCBkZWZhdWx0IGNvbnN0cnVjdG9ycyBhbmQgbm8gY29yZS1pbmRleC4KKyAqLwordGVtcGxhdGU8dHlwZW5hbWUgVD4KK3N0cnVjdCBDMlNpbXBsZVZhbHVlU3RydWN0IHsKKyAgICBUIHZhbHVlOyAvLy88IHNpbXBsZSB2YWx1ZSBvZiB0aGUgc3RydWN0dXJlCisgICAgLy8gRGVmYXVsdCBjb25zdHJ1Y3Rvci4KKyAgICBpbmxpbmUgQzJTaW1wbGVWYWx1ZVN0cnVjdCgpID0gZGVmYXVsdDsKKyAgICAvLyBDb25zdHJ1Y3RvciB3aXRoIGFuIGluaXRpYWwgdmFsdWUuCisgICAgaW5saW5lIEMyU2ltcGxlVmFsdWVTdHJ1Y3QoVCB2YWx1ZSkgOiB2YWx1ZSh2YWx1ZSkge30KKyAgICBERUZJTkVfQkFTRV9DMlNUUlVDVChTaW1wbGVWYWx1ZSkKK307CisKKy8vIFRPRE86IG1vdmUgdGhpcyBhbmQgbmV4dCB0byBzb21lIGdlbmVyaWMgcGxhY2UKKy8qKgorICogSW50ZXJmYWNlIHRvIGEgYmxvY2sgb2YgKG1hcHBlZCkgbWVtb3J5IGNvbnRhaW5pbmcgYW4gYXJyYXkgb2Ygc29tZSB0eXBlIChUKS4KKyAqLwordGVtcGxhdGU8dHlwZW5hbWUgVD4KK3N0cnVjdCBDMk1lbW9yeUJsb2NrIHsKKyAgICAvLy8gXHJldHVybnMgdGhlIG51bWJlciBvZiBlbGVtZW50cyBpbiB0aGlzIGJsb2NrLgorICAgIHZpcnR1YWwgc2l6ZV90IHNpemUoKSBjb25zdCA9IDA7CisgICAgLy8vIFxyZXR1cm5zIGEgY29uc3QgcG9pbnRlciB0byB0aGUgc3RhcnQgb2YgdGhpcyBibG9jay4gQ2FyZSBtdXN0IGJlIHRha2VuIHRvIG5vdCByZWFkIG91dHNpZGUKKyAgICAvLy8gdGhlIGJsb2NrLgorICAgIHZpcnR1YWwgY29uc3QgVCAqZGF0YSgpIGNvbnN0ID0gMDsgLy8gVE9ETzogc2hvdWxkIHRoaXMgYmUgZnJpZW5kIGFjY2VzcyBvbmx5IGluIHNvbWUgQzJNZW1vcnkgbW9kdWxlPworICAgIC8vLyBccmV0dXJucyBhIHBvaW50ZXIgdG8gdGhlIHN0YXJ0IG9mIHRoaXMgYmxvY2suIENhcmUgbXVzdCBiZSB0YWtlbiB0byBub3QgcmVhZCBvciB3cml0ZQorICAgIC8vLyBvdXRzaWRlIHRoZSBibG9jay4KKyAgICBpbmxpbmUgVCAqZGF0YSgpIHsgcmV0dXJuIGNvbnN0X2Nhc3Q8VCo+KGNvbnN0X2Nhc3Q8Y29uc3QgQzJNZW1vcnlCbG9jayo+KHRoaXMpLT5kYXRhKCkpOyB9CisKK3Byb3RlY3RlZDoKKyAgICAvLyBUT0RPOiBmb3Igbm93IGl0IHNob3VsZCBuZXZlciBiZSBkZWxldGVkIGFzIEMyTWVtb3J5QmxvY2sKKyAgICB2aXJ0dWFsIH5DMk1lbW9yeUJsb2NrKCkgPSBkZWZhdWx0OworfTsKKworLyoqCisgKiBJbnRlcmZhY2UgdG8gYSBibG9jayBvZiBtZW1vcnkgY29udGFpbmluZyBhIGNvbnN0YW50IChjb25zdGV4cHIpIGFycmF5IG9mIHNvbWUgdHlwZSAoVCkuCisgKi8KK3RlbXBsYXRlPHR5cGVuYW1lIFQ+CitzdHJ1Y3QgQzJDb25zdE1lbW9yeUJsb2NrIDogcHVibGljIEMyTWVtb3J5QmxvY2s8VD4geworICAgIHZpcnR1YWwgY29uc3QgVCAqIGRhdGEoKSBjb25zdCB7IHJldHVybiBfbURhdGE7IH0KKyAgICB2aXJ0dWFsIHNpemVfdCBzaXplKCkgY29uc3QgeyByZXR1cm4gX21TaXplOyB9CisKKyAgICAvLy8gQ29uc3RydWN0b3IuCisgICAgdGVtcGxhdGU8dW5zaWduZWQgTj4KKyAgICBpbmxpbmUgY29uc3RleHByIEMyQ29uc3RNZW1vcnlCbG9jayhjb25zdCBUKCZpbml0KVtOXSkgOiBfbURhdGEoaW5pdCksIF9tU2l6ZShOKSB7fQorCitwcml2YXRlOgorICAgIGNvbnN0IFQgKl9tRGF0YTsKKyAgICBjb25zdCBzaXplX3QgX21TaXplOworfTsKKworLy8vIFxhZGR0b2dyb3VwIGludGVybmFsCisvLy8gQHsKKworLy8vIEhlbHBlciBjbGFzcyB0byBpbml0aWFsaXplIGZsZXhpYmxlIGFycmF5cyB3aXRoIHZhcmlvdXMgaW5pdGFsaXplcnMuCitzdHJ1Y3QgX0MyVmFsdWVBcnJheUhlbHBlciB7CisgICAgLy8gY2hhcltdLXMgYXJlIHVzZWQgYXMgbnVsbCB0ZXJtaW5hdGVkIHN0cmluZ3MsIHNvIHRoZSBsYXN0IGVsZW1lbnQgaXMgbmV2ZXIgaW5pdGVkLgorCisgICAgLy8vIEluaXRpYWxpemUgYSBmbGV4aWJsZSBhcnJheSB1c2luZyBhIGNvbnN0ZXhwciBtZW1vcnkgYmxvY2suCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4KKyAgICBzdGF0aWMgdm9pZCBpbml0KFQoJmFycmF5KVtdLCBzaXplX3QgYXJyYXlMZW4sIGNvbnN0IEMyTWVtb3J5QmxvY2s8VD4gJmJsb2NrKSB7CisgICAgICAgIC8vIHJlc2VydmUgbGFzdCBlbGVtZW50IGZvciB0ZXJtaW5hbCAwIGZvciBzdHJpbmdzCisgICAgICAgIGlmIChhcnJheUxlbiAmJiBzdGQ6OmlzX3NhbWU8VCwgY2hhcj46OnZhbHVlKSB7CisgICAgICAgICAgICAtLWFycmF5TGVuOworICAgICAgICB9CisgICAgICAgIGlmIChibG9jay5kYXRhKCkpIHsKKyAgICAgICAgICAgIG1lbWNweShhcnJheSwgYmxvY2suZGF0YSgpLCBzdGQ6Om1pbihhcnJheUxlbiwgYmxvY2suc2l6ZSgpKSAqIHNpemVvZihUKSk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvLy8gSW5pdGlhbGl6ZSBhIGZsZXhpYmxlIGFycmF5IHVzaW5nIGFuIGluaXRpYWxpemVyIGxpc3QuCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4KKyAgICBzdGF0aWMgdm9pZCBpbml0KFQoJmFycmF5KVtdLCBzaXplX3QgYXJyYXlMZW4sIGNvbnN0IHN0ZDo6aW5pdGlhbGl6ZXJfbGlzdDxUPiAmaW5pdCkgeworICAgICAgICBzaXplX3QgaXggPSAwOworICAgICAgICAvLyByZXNlcnZlIGxhc3QgZWxlbWVudCBmb3IgdGVybWluYWwgMCBmb3Igc3RyaW5ncworICAgICAgICBpZiAoYXJyYXlMZW4gJiYgc3RkOjppc19zYW1lPFQsIGNoYXI+Ojp2YWx1ZSkgeworICAgICAgICAgICAgLS1hcnJheUxlbjsKKyAgICAgICAgfQorICAgICAgICBmb3IgKGNvbnN0IFQgJml0ZW0gOiBpbml0KSB7CisgICAgICAgICAgICBpZiAoaXggPT0gYXJyYXlMZW4pIHsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGFycmF5W2l4KytdID0gaXRlbTsKKyAgICAgICAgfQorICAgIH0KKworICAgIC8vLyBJbml0aWFsaXplIGEgZmxleGlibGUgYXJyYXkgdXNpbmcgYSB2ZWN0b3IuCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4KKyAgICBzdGF0aWMgdm9pZCBpbml0KFQoJmFycmF5KVtdLCBzaXplX3QgYXJyYXlMZW4sIGNvbnN0IHN0ZDo6dmVjdG9yPFQ+ICZpbml0KSB7CisgICAgICAgIHNpemVfdCBpeCA9IDA7CisgICAgICAgIC8vIHJlc2VydmUgbGFzdCBlbGVtZW50IGZvciB0ZXJtaW5hbCAwIGZvciBzdHJpbmdzCisgICAgICAgIGlmIChhcnJheUxlbiAmJiBzdGQ6OmlzX3NhbWU8VCwgY2hhcj46OnZhbHVlKSB7CisgICAgICAgICAgICAtLWFycmF5TGVuOworICAgICAgICB9CisgICAgICAgIGZvciAoY29uc3QgVCAmaXRlbSA6IGluaXQpIHsKKyAgICAgICAgICAgIGlmIChpeCA9PSBhcnJheUxlbikgeworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICAgICAgYXJyYXlbaXgrK10gPSBpdGVtOworICAgICAgICB9CisgICAgfQorCisgICAgLy8vIEluaXRpYWxpemUgYSBmbGV4aWJsZSBhcnJheSB1c2luZyBhbm90aGVyIGZsZXhpYmxlIGFycmF5LgorICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQsIHVuc2lnbmVkIE4+CisgICAgc3RhdGljIHZvaWQgaW5pdChUKCZhcnJheSlbXSwgc2l6ZV90IGFycmF5TGVuLCBjb25zdCBUKCZzdHIpW05dKSB7CisgICAgICAgIC8vIHJlc2VydmUgbGFzdCBlbGVtZW50IGZvciB0ZXJtaW5hbCAwIGZvciBzdHJpbmdzCisgICAgICAgIGlmIChhcnJheUxlbiAmJiBzdGQ6OmlzX3NhbWU8VCwgY2hhcj46OnZhbHVlKSB7CisgICAgICAgICAgICAtLWFycmF5TGVuOworICAgICAgICB9CisgICAgICAgIGlmIChhcnJheUxlbikgeworICAgICAgICAgICAgbWVtY3B5KGFycmF5LCBzdHIsIHN0ZDo6bWluKGFycmF5TGVuLCAoc2l6ZV90KU4pICogc2l6ZW9mKFQpKTsKKyAgICAgICAgfQorICAgIH0KK307CisKKy8qKgorICogU3BlY2lhbGl6YXRpb24gZm9yIGEgZmxleGlibGUgYmxvYiBhbmQgc3RyaW5nIGFycmF5cy4gQSBzdHJ1Y3R1cmUgdGVtcGxhdGUgZW5jYXBzdWxhdGluZyBhIHNpbmdsZQorICogZmxleGlibGUgYXJyYXkgbWVtYmVyIHdpdGggZGVmYXVsdCBmbGV4aWJsZSBjb25zdHJ1Y3RvcnMgYW5kIG5vIGNvcmUtaW5kZXguIFRoaXMgdHlwZSBjYW5ub3QgYmUKKyAqIGNvbnN0cnVjdGVkIG9uIGl0cyBvd24gYXMgaXQncyBzaXplIGlzIDAuCisgKgorICogXGludGVybmFsIFRoaXMgaXMgZGlmZmVyZW50IGZyb20gQzJTaW1wbGVBcnJheVN0cnVjdDxUW10+IHNpbXBseSBiZWNhdXNlIGl0cyBtZW1iZXIgaGFzIHRoZSBuYW1lCisgKiBhcyB2YWx1ZSB0byByZWZsZWN0IHRoaXMgaXMgYSBzaW5nbGUgdmFsdWUuCisgKi8KK3RlbXBsYXRlPHR5cGVuYW1lIFQ+CitzdHJ1Y3QgQzJTaW1wbGVWYWx1ZVN0cnVjdDxUW10+IHsKKyAgICBzdGF0aWNfYXNzZXJ0KHN0ZDo6aXNfc2FtZTxULCBjaGFyPjo6dmFsdWUgfHwgc3RkOjppc19zYW1lPFQsIHVpbnQ4X3Q+Ojp2YWx1ZSwKKyAgICAgICAgICAgICAgICAgICJDMlNpbXBsZVZhbHVlU3RydWN0PFRbXT4gaXMgb25seSBmb3IgQkxPQiBvciBTVFJJTkciKTsKKyAgICBUIHZhbHVlW107CisKKyAgICBpbmxpbmUgQzJTaW1wbGVWYWx1ZVN0cnVjdCgpID0gZGVmYXVsdDsKKyAgICBERUZJTkVfQkFTRV9DMlNUUlVDVChTaW1wbGVWYWx1ZSkKKyAgICBGTEVYKEMyU2ltcGxlVmFsdWVTdHJ1Y3QsIHZhbHVlKQorCitwcml2YXRlOgorICAgIGlubGluZSBDMlNpbXBsZVZhbHVlU3RydWN0KHNpemVfdCBmbGV4Q291bnQsIGNvbnN0IEMyTWVtb3J5QmxvY2s8VD4gJmJsb2NrKSB7CisgICAgICAgIF9DMlZhbHVlQXJyYXlIZWxwZXI6OmluaXQodmFsdWUsIGZsZXhDb3VudCwgYmxvY2spOworICAgIH0KKworICAgIGlubGluZSBDMlNpbXBsZVZhbHVlU3RydWN0KHNpemVfdCBmbGV4Q291bnQsIGNvbnN0IHN0ZDo6aW5pdGlhbGl6ZXJfbGlzdDxUPiAmaW5pdCkgeworICAgICAgICBfQzJWYWx1ZUFycmF5SGVscGVyOjppbml0KHZhbHVlLCBmbGV4Q291bnQsIGluaXQpOworICAgIH0KKworICAgIGlubGluZSBDMlNpbXBsZVZhbHVlU3RydWN0KHNpemVfdCBmbGV4Q291bnQsIGNvbnN0IHN0ZDo6dmVjdG9yPFQ+ICZpbml0KSB7CisgICAgICAgIF9DMlZhbHVlQXJyYXlIZWxwZXI6OmluaXQodmFsdWUsIGZsZXhDb3VudCwgaW5pdCk7CisgICAgfQorCisgICAgdGVtcGxhdGU8dW5zaWduZWQgTj4KKyAgICBpbmxpbmUgQzJTaW1wbGVWYWx1ZVN0cnVjdChzaXplX3QgZmxleENvdW50LCBjb25zdCBUKCZpbml0KVtOXSkgeworICAgICAgICBfQzJWYWx1ZUFycmF5SGVscGVyOjppbml0KHZhbHVlLCBmbGV4Q291bnQsIGluaXQpOworICAgIH0KK307CisKKy8vLyBAfQorCisvKioKKyAqIEEgc3RydWN0dXJlIHRlbXBsYXRlIGVuY2Fwc3VsYXRpbmcgYSBzaW5nbGUgZmxleGlibGUgYXJyYXkgZWxlbWVudCBvZiBhIHNwZWNpZmljIHR5cGUgKFQpIHdpdGgKKyAqIGRlZmF1bHQgY29uc3RydWN0b3JzIGFuZCBubyBjb3JlLWluZGV4LiBUaGlzIHR5cGUgY2Fubm90IGJlIGNvbnN0cnVjdGVkIG9uIGl0cyBvd24gYXMgaXQncyBzaXplCisgKiBpcyAwLiBJbnN0ZWFkLCBpdCBpcyBtZWFudCB0byBiZSB1c2VkIGFzIGEgcGFyYW1ldGVyLCBlLmcuCisgKgorICogICB0eXBlZGVmIEMyU3RyZWFtUGFyYW08QzJJbmZvLCBDMlNpbXBsZUFycmF5U3RydWN0PEMyTXlGYW5jeVN0cnVjdD4sCisgKiAgICAgICAgICAga1BhcmFtSW5kZXhNeUZhbmN5QXJyYXlTdHJlYW1QYXJhbT4gQzJNeUZhbmN5QXJyYXlTdHJlYW1JbmZvOworICovCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPgorc3RydWN0IEMyU2ltcGxlQXJyYXlTdHJ1Y3QgeworICAgIHN0YXRpY19hc3NlcnQoIXN0ZDo6aXNfc2FtZTxULCBjaGFyPjo6dmFsdWUgJiYgIXN0ZDo6aXNfc2FtZTxULCB1aW50OF90Pjo6dmFsdWUsCisgICAgICAgICAgICAgICAgICAidXNlIEMyU2ltcGxlVmFsdWVTdHJ1Y3Q8VFtdPiBpcyBmb3IgQkxPQiBvciBTVFJJTkciKTsKKworICAgIFQgdmFsdWVzW107IC8vLzwgYXJyYXkgbWVtYmVyCisgICAgLy8vIERlZmF1bHQgY29uc3RydWN0b3IKKyAgICBpbmxpbmUgQzJTaW1wbGVBcnJheVN0cnVjdCgpID0gZGVmYXVsdDsKKyAgICBERUZJTkVfQkFTRV9GTEVYX0MyU1RSVUNUKFNpbXBsZUFycmF5LCB2YWx1ZXMpCisgICAgLy9GTEVYKEMyU2ltcGxlQXJyYXlTdHJ1Y3QsIHZhbHVlcykKKworcHJpdmF0ZToKKyAgICAvLy8gQ29uc3RydWN0IGZyb20gYSBDMk1lbW9yeUJsb2NrLgorICAgIC8vLyBVc2VkIG9ubHkgYnkgdGhlIGZsZXhpYmxlIHBhcmFtZXRlciBhbGxvY2F0b3JzIChBbGxvY1VuaXF1ZSAmIEFsbG9jU2hhcmVkKS4KKyAgICBpbmxpbmUgQzJTaW1wbGVBcnJheVN0cnVjdChzaXplX3QgZmxleENvdW50LCBjb25zdCBDMk1lbW9yeUJsb2NrPFQ+ICZibG9jaykgeworICAgICAgICBfQzJWYWx1ZUFycmF5SGVscGVyOjppbml0KHZhbHVlcywgZmxleENvdW50LCBibG9jayk7CisgICAgfQorCisgICAgLy8vIENvbnN0cnVjdCBmcm9tIGFuIGluaXRpYWxpemVyIGxpc3QuCisgICAgLy8vIFVzZWQgb25seSBieSB0aGUgZmxleGlibGUgcGFyYW1ldGVyIGFsbG9jYXRvcnMgKEFsbG9jVW5pcXVlICYgQWxsb2NTaGFyZWQpLgorICAgIGlubGluZSBDMlNpbXBsZUFycmF5U3RydWN0KHNpemVfdCBmbGV4Q291bnQsIGNvbnN0IHN0ZDo6aW5pdGlhbGl6ZXJfbGlzdDxUPiAmaW5pdCkgeworICAgICAgICBfQzJWYWx1ZUFycmF5SGVscGVyOjppbml0KHZhbHVlcywgZmxleENvdW50LCBpbml0KTsKKyAgICB9CisKKyAgICAvLy8gQ29uc3RydWN0IGZyb20gYW4gdmVjdG9yLgorICAgIC8vLyBVc2VkIG9ubHkgYnkgdGhlIGZsZXhpYmxlIHBhcmFtZXRlciBhbGxvY2F0b3JzIChBbGxvY1VuaXF1ZSAmIEFsbG9jU2hhcmVkKS4KKyAgICBpbmxpbmUgQzJTaW1wbGVBcnJheVN0cnVjdChzaXplX3QgZmxleENvdW50LCBjb25zdCBzdGQ6OnZlY3RvcjxUPiAmaW5pdCkgeworICAgICAgICBfQzJWYWx1ZUFycmF5SGVscGVyOjppbml0KHZhbHVlcywgZmxleENvdW50LCBpbml0KTsKKyAgICB9CisKKyAgICAvLy8gQ29uc3RydWN0IGZyb20gYW5vdGhlciBmbGV4aWJsZSBhcnJheS4KKyAgICAvLy8gVXNlZCBvbmx5IGJ5IHRoZSBmbGV4aWJsZSBwYXJhbWV0ZXIgYWxsb2NhdG9ycyAoQWxsb2NVbmlxdWUgJiBBbGxvY1NoYXJlZCkuCisgICAgdGVtcGxhdGU8dW5zaWduZWQgTj4KKyAgICBpbmxpbmUgQzJTaW1wbGVBcnJheVN0cnVjdChzaXplX3QgZmxleENvdW50LCBjb25zdCBUKCZpbml0KVtOXSkgeworICAgICAgICBfQzJWYWx1ZUFycmF5SGVscGVyOjppbml0KHZhbHVlcywgZmxleENvdW50LCBpbml0KTsKKyAgICB9Cit9OworCisvKioKKyAqIFxhZGR0b2dyb3VwIHNpbXBsZXZhbHVlIFNpbXBsZSB2YWx1ZSBhbmQgYXJyYXkgc3RydWN0dXJlcy4KKyAqIEB7CisgKgorICogU2ltcGxlIHZhbHVlIHN0cnVjdHVyZXMuCisgKgorICogU3RydWN0dXJlcyBjb250YWluaW5nIGEgc2luZ2xlIHNpbXBsZSB2YWx1ZS4gVGhlc2UgY2FuIGJlIHJldXNlZCB0byBlYXNpbHkgZGVmaW5lIHNpbXBsZQorICogcGFyYW1ldGVycyBvZiB2YXJpb3VzIHR5cGVzOgorICoKKyAqICAgdHlwZWRlZiBDMlBvcnRQYXJhbTxDMlR1bmluZywgQzJJbnQzMlZhbHVlLCBrUGFyYW1JbmRleE15SW50ZWdlclBvcnRQYXJhbT4KKyAqICAgICAgICAgICBDMk15SW50ZWdlclBvcnRQYXJhbVR1bmluZzsKKyAqCisgKiBUaGV5IGNvbnRhaW4gYSBzaW5nbGUgbWVtYmVyICh2YWx1ZSBvciB2YWx1ZXMpIHRoYXQgaXMgZGVzY3JpYmVkIGFzICJ2YWx1ZSIgb3IgInZhbHVlcyIuCisgKgorICogVGhlc2Ugc3RydWN0dXJlcyBkb24ndCBkZWZpbmUgYSBjb3JlIGluZGV4LCBhbmQgYXMgc3VjaCwgdGhleSBjYW5ub3QgYmUgdXNlZCBpbiBzdHJ1Y3R1cmUKKyAqIGRlY2xhcmF0aW9ucy4gVXNlIHR5cGVbXSBpbnN0ZWFkLCBzdWNoIGFzIGludDMyX3QgZmllbGRbXS4KKyAqLworLy8vIEEgMzItYml0IHNpZ25lZCBpbnRlZ2VyIHBhcmFtZXRlciBpbiB2YWx1ZSwgZGVzY3JpYmVkIGFzICJ2YWx1ZSIKK3R5cGVkZWYgQzJTaW1wbGVWYWx1ZVN0cnVjdDxpbnQzMl90PiBDMkludDMyVmFsdWU7CisvLy8gQSAzMi1iaXQgc2lnbmVkIGludGVnZXIgYXJyYXkgcGFyYW1ldGVyIGluIHZhbHVlcywgZGVzY3JpYmVkIGFzICJ2YWx1ZXMiCit0eXBlZGVmIEMyU2ltcGxlQXJyYXlTdHJ1Y3Q8aW50MzJfdD4gQzJJbnQzMkFycmF5OworLy8vIEEgMzItYml0IHVuc2lnbmVkIGludGVnZXIgcGFyYW1ldGVyIGluIHZhbHVlLCBkZXNjcmliZWQgYXMgInZhbHVlIgordHlwZWRlZiBDMlNpbXBsZVZhbHVlU3RydWN0PHVpbnQzMl90PiBDMlVpbnQzMlZhbHVlOworLy8vIEEgMzItYml0IHVuc2lnbmVkIGludGVnZXIgYXJyYXkgcGFyYW1ldGVyIGluIHZhbHVlcywgZGVzY3JpYmVkIGFzICJ2YWx1ZXMiCit0eXBlZGVmIEMyU2ltcGxlQXJyYXlTdHJ1Y3Q8dWludDMyX3Q+IEMyVWludDMyQXJyYXk7CisvLy8gQSA2NC1iaXQgc2lnbmVkIGludGVnZXIgcGFyYW1ldGVyIGluIHZhbHVlLCBkZXNjcmliZWQgYXMgInZhbHVlIgordHlwZWRlZiBDMlNpbXBsZVZhbHVlU3RydWN0PGludDY0X3Q+IEMySW50NjRWYWx1ZTsKKy8vLyBBIDY0LWJpdCBzaWduZWQgaW50ZWdlciBhcnJheSBwYXJhbWV0ZXIgaW4gdmFsdWVzLCBkZXNjcmliZWQgYXMgInZhbHVlcyIKK3R5cGVkZWYgQzJTaW1wbGVBcnJheVN0cnVjdDxpbnQ2NF90PiBDMkludDY0QXJyYXk7CisvLy8gQSA2NC1iaXQgdW5zaWduZWQgaW50ZWdlciBwYXJhbWV0ZXIgaW4gdmFsdWUsIGRlc2NyaWJlZCBhcyAidmFsdWUiCit0eXBlZGVmIEMyU2ltcGxlVmFsdWVTdHJ1Y3Q8dWludDY0X3Q+IEMyVWludDY0VmFsdWU7CisvLy8gQSA2NC1iaXQgdW5zaWduZWQgaW50ZWdlciBhcnJheSBwYXJhbWV0ZXIgaW4gdmFsdWVzLCBkZXNjcmliZWQgYXMgInZhbHVlcyIKK3R5cGVkZWYgQzJTaW1wbGVBcnJheVN0cnVjdDx1aW50NjRfdD4gQzJVaW50NjRBcnJheTsKKy8vLyBBIGZsb2F0IHBhcmFtZXRlciBpbiB2YWx1ZSwgZGVzY3JpYmVkIGFzICJ2YWx1ZSIKK3R5cGVkZWYgQzJTaW1wbGVWYWx1ZVN0cnVjdDxmbG9hdD4gQzJGbG9hdFZhbHVlOworLy8vIEEgZmxvYXQgYXJyYXkgcGFyYW1ldGVyIGluIHZhbHVlcywgZGVzY3JpYmVkIGFzICJ2YWx1ZXMiCit0eXBlZGVmIEMyU2ltcGxlQXJyYXlTdHJ1Y3Q8ZmxvYXQ+IEMyRmxvYXRBcnJheTsKKy8vLyBBIGJsb2IgZmxleGlibGUgcGFyYW1ldGVyIGluIHZhbHVlLCBkZXNjcmliZWQgYXMgInZhbHVlIgordHlwZWRlZiBDMlNpbXBsZVZhbHVlU3RydWN0PHVpbnQ4X3RbXT4gQzJCbG9iVmFsdWU7CisvLy8gQSBzdHJpbmcgZmxleGlibGUgcGFyYW1ldGVyIGluIHZhbHVlLCBkZXNjcmliZWQgYXMgInZhbHVlIgordHlwZWRlZiBDMlNpbXBsZVZhbHVlU3RydWN0PGNoYXJbXT4gQzJTdHJpbmdWYWx1ZTsKKwordGVtcGxhdGU8dHlwZW5hbWUgVD4KK2NvbnN0IHN0ZDo6dmVjdG9yPEMyRmllbGREZXNjcmlwdG9yPiBDMlNpbXBsZVZhbHVlU3RydWN0PFQ+OjpGaWVsZExpc3QoKSB7CisgICAgcmV0dXJuIHsgREVTQ1JJQkVfQzJGSUVMRCh2YWx1ZSwgInZhbHVlIikgfTsKK30KK3RlbXBsYXRlPHR5cGVuYW1lIFQ+Citjb25zdCBzdGQ6OnZlY3RvcjxDMkZpZWxkRGVzY3JpcHRvcj4gQzJTaW1wbGVWYWx1ZVN0cnVjdDxUW10+OjpGaWVsZExpc3QoKSB7CisgICAgcmV0dXJuIHsgREVTQ1JJQkVfQzJGSUVMRCh2YWx1ZSwgInZhbHVlIikgfTsKK30KK3RlbXBsYXRlPHR5cGVuYW1lIFQ+Citjb25zdCBzdGQ6OnZlY3RvcjxDMkZpZWxkRGVzY3JpcHRvcj4gQzJTaW1wbGVBcnJheVN0cnVjdDxUPjo6RmllbGRMaXN0KCkgeworICAgIHJldHVybiB7IERFU0NSSUJFX0MyRklFTEQodmFsdWVzLCAidmFsdWVzIikgfTsKK30KKworLy8vIEB9CisKKy8vLyBAfQorCisjZW5kaWYgIC8vIEMyUEFSQU1fREVGX0hfCmRpZmYgLS1naXQgYS9tZWRpYS9jb2RlYzIvY29yZS9pbmNsdWRlL0MyV29yay5oIGIvbWVkaWEvY29kZWMyL2NvcmUvaW5jbHVkZS9DMldvcmsuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42OTIzZjNlCi0tLSAvZGV2L251bGwKKysrIGIvbWVkaWEvY29kZWMyL2NvcmUvaW5jbHVkZS9DMldvcmsuaApAQCAtMCwwICsxLDIzNSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNiBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCisKKyNpZm5kZWYgQzJXT1JLX0hfCisKKyNkZWZpbmUgQzJXT1JLX0hfCisKKyNpbmNsdWRlIDxDMkJ1ZmZlci5oPgorI2luY2x1ZGUgPEMyUGFyYW0uaD4KKworI2luY2x1ZGUgPG1lbW9yeT4KKyNpbmNsdWRlIDxsaXN0PgorI2luY2x1ZGUgPHZlY3Rvcj4KKworI2luY2x1ZGUgPHN0ZGludC5oPgorI2luY2x1ZGUgPHN0ZGJvb2wuaD4KKworLy8vIFxkZWZncm91cCB3b3JrIFdvcmsgYW5kIGRhdGEgcHJvY2Vzc2luZworLy8vIEB7CisKKy8qKgorICogSW5mb3JtYXRpb24gZGVzY3JpYmluZyB0aGUgcmVhc29uIGEgcGFyYW1ldGVyIHNldHRpbmdzIG1heSBmYWlsLCBvcgorICogbWF5IGJlIG92ZXJyaWRlbi4KKyAqLworc3RydWN0IEMyU2V0dGluZ1Jlc3VsdCB7CisgICAgZW51bSBGYWlsdXJlIDogdWludDMyX3QgeworICAgICAgICAvKiBwYXJhbWV0ZXIgZmFpbHVyZXMgYmVsb3cgKi8KKyAgICAgICAgQkFEX1RZUEUsICAgLy8vPCBwYXJhbWV0ZXIgaXMgbm90IHN1cHBvcnRlZAorICAgICAgICBCQURfUE9SVCwgICAvLy88IHBhcmFtZXRlciBpcyBub3Qgc3VwcG9ydGVkIG9uIHRoZSBzcGVjaWZpYyBwb3J0CisgICAgICAgIEJBRF9JTkRFWCwgIC8vLzwgcGFyYW1ldGVyIGlzIG5vdCBzdXBwb3J0ZWQgb24gdGhlIHNwZWNpZmljIHN0cmVhbQorICAgICAgICBSRUFEX09OTFksICAvLy88IHBhcmFtZXRlciBpcyByZWFkLW9ubHkgYW5kIGNhbm5vdCBiZSBzZXQKKyAgICAgICAgTUlTTUFUQ0gsICAgLy8vPCBwYXJhbWV0ZXIgbWlzbWF0Y2hlcyBpbnB1dCBkYXRhCisKKyAgICAgICAgLyogZmllbGQgZmFpbHVyZXMgYmVsb3cgKi8KKyAgICAgICAgQkFEX1ZBTFVFLCAgLy8vPCBzdHJpY3QgcGFyYW1ldGVyIGRvZXMgbm90IGFjY2VwdCB2YWx1ZSBmb3IgdGhlIGZpZWxkIGF0IGFsbAorICAgICAgICBDT05GTElDVCwgICAvLy88IHN0cmljdCBwYXJhbWV0ZXIgZmllbGQgdmFsdWUgaXMgaW4gY29uZmxpY3Qgd2l0aCBhbi9vdGhlciBzZXR0aW5nKHMpCisKKyAgICAgICAgLy8vIHBhcmFtZXRlciBmaWVsZCBpcyBvdXQgb2YgcmFuZ2UgZHVlIHRvIG90aGVyIHNldHRpbmdzICh0aGlzIGZhaWx1cmUgbW9kZQorICAgICAgICAvLy8gY2FuIG9ubHkgYmUgdXNlZCBmb3Igc3RyaWN0IGNhbGN1bGF0ZWQgcGFyYW1ldGVycykKKyAgICAgICAgVU5TVVBQT1JURUQsCisKKyAgICAgICAgLy8vIGZpZWxkIGRvZXMgbm90IGFjY2VzcyB0aGUgcmVxdWVzdGVkIHBhcmFtZXRlciB2YWx1ZSBhdCBhbGwuIEl0IGhhcyBiZWVuIGNvcnJlY3RlZCB0bworICAgICAgICAvLy8gdGhlIGNsb3Nlc3Qgc3VwcG9ydGVkIHZhbHVlLiBUaGlzIGZhaWx1cmUgbW9kZSBpcyBwcm92aWRlZCB0byBnaXZlIGd1aWRhbmNlIGFzIHRvIHdoYXQKKyAgICAgICAgLy8vIGFyZSB0aGUgY3VycmVudGx5IHN1cHBvcnRlZCB2YWx1ZXMgZm9yIHRoaXMgZmllbGQgKHdoaWNoIG1heSBiZSBhIHN1YnNldCBvZiB0aGUgYXQtYWxsLQorICAgICAgICAvLy8gcG90ZW50aWFsIHZhbHVlcykKKyAgICAgICAgSU5GT19CQURfVkFMVUUsCisKKyAgICAgICAgLy8vIHJlcXVlc3RlZCBwYXJhbWV0ZXIgdmFsdWUgaXMgaW4gY29uZmxpY3Qgd2l0aCBhbi9vdGhlciBzZXR0aW5nKHMpCisgICAgICAgIC8vLyBhbmQgaGFzIGJlZW4gY29ycmVjdGVkIHRvIHRoZSBjbG9zZXN0IHN1cHBvcnRlZCB2YWx1ZS4gVGhpcyBmYWlsdXJlCisgICAgICAgIC8vLyBtb2RlIGlzIGdpdmVuIHRvIHByb3ZpZGUgZ3VpZGFuY2UgYXMgdG8gd2hhdCBhcmUgdGhlIGN1cnJlbnRseSBzdXBwb3J0ZWQgdmFsdWVzIGFzIHdlbGwKKyAgICAgICAgLy8vIGFzIHRvIG9wdGlvbmFsbHkgcHJvdmlkZSBzdWdnZXN0aW9uIHRvIHRoZSBjbGllbnQgYXMgdG8gaG93IHRvIGVuYWJsZSB0aGUgcmVxdWVzdGVkCisgICAgICAgIC8vLyBwYXJhbWV0ZXIgdmFsdWUuCisgICAgICAgIElORk9fQ09ORkxJQ1QsCisgICAgfTsKKworICAgIEZhaWx1cmUgZmFpbHVyZTsgICAgLy8vPCBmYWlsdXJlIGNvZGUKKworICAgIC8vLyBGYWlsaW5nIChvciBjb3JyZWN0ZWQpIGZpZWxkIG9yIHBhcmFtZXRlcmFuZCBvcHRpb25hbGx5LCBjdXJyZW50bHkgc3VwcG9ydGVkIHZhbHVlcyBmb3IgdGhlCisgICAgLy8vIGZpZWxkLiBWYWx1ZXMgbXVzdCBvbmx5IGJlIHNldCBmb3IgZmllbGQgZmFpbHVyZXMgb3RoZXIgdGhhbiBCQURfVkFMVUUsIGFuZCBvbmx5IGlmIHRoZXkgYXJlCisgICAgLy8vIGRpZmZlcmVudCBmcm9tIHRoZSBnbG9iYWxseSBzdXBwb3J0ZWQgdmFsdWVzIChlLmcuIGR1ZSB0byByZXN0cmljdGlvbnMgYnkgYW5vdGhlciBwYXJhbSBvcgorICAgIC8vLyBpbnB1dCBkYXRhKS4KKyAgICBDMlBhcmFtRmllbGRWYWx1ZXMgZmllbGQ7CisKKyAgICAvLy8gQ29uZmxpY3RpbmcgcGFyYW1ldGVycyBvciBmaWVsZHMgd2l0aCBvcHRpb25hbCBzdWdnZXN0aW9ucyB3aXRoIChvcHRpb25hbCkgc3VnZ2VzdGVkIHZhbHVlcworICAgIC8vLyBmb3IgYW55IGNvbmZsaWN0aW5nIGZpZWxkcyB0byBhdm9pZCB0aGUgY29uZmxpY3QuIE11c3Qgb25seSBiZSBzZXQgZm9yIENPTkZMSUNULCBVTlNVUFBPUlRFRAorICAgIC8vLyBhbmQgSU5GT19DT05GTElDVCBmYWlsdXJlIGNvZGVzLgorICAgIHN0ZDo6dmVjdG9yPEMyUGFyYW1GaWVsZFZhbHVlcz4gY29uZmxpY3RzOworfTsKKworLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisvLyAgV09SSworLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKKy8qKiBVbmlxdWUgSUQgZm9yIGEgcHJvY2Vzc2luZyBub2RlLiAqLwordHlwZWRlZiB1aW50MzJfdCBjMl9ub2RlX2lkX3Q7CisKK2VudW0geworICAgIGtQYXJhbUluZGV4V29ya09yZGluYWwsCit9OworCisvKioKKyAqIEluZm9ybWF0aW9uIGZvciBvcmRlcmluZyB3b3JrIGl0ZW1zIG9uIGEgY29tcG9uZW50IHBvcnQuCisgKi8KK3N0cnVjdCBDMldvcmtPcmRpbmFsU3RydWN0IHsKKy8vcHVibGljOgorICAgIGMyX2NudHI2NF90IHRpbWVzdGFtcDsgICAgIC8qKiBmcmFtZSB0aW1lc3RhbXAgaW4gbWljcm9zZWNvbmRzICovCisgICAgYzJfY250cjY0X3QgZnJhbWVJbmRleDsgICAgLyoqIHN1Ym1pc3Npb24gb3JkaW5hbCBvbiB0aGUgaW5pdGlhbCBjb21wb25lbnQgKi8KKyAgICBjMl9jbnRyNjRfdCBjdXN0b21PcmRpbmFsOyAvKiogY2FuIGJlIGdpdmVuIGJ5IHRoZSBjb21wb25lbnQsIGUuZy4gZGVjb2RlIG9yZGVyICovCisKKyAgICBERUZJTkVfQU5EX0RFU0NSSUJFX0MyU1RSVUNUKFdvcmtPcmRpbmFsKQorICAgIEMyRklFTEQodGltZXN0YW1wLCAidGltZXN0YW1wIikKKyAgICBDMkZJRUxEKGZyYW1lSW5kZXgsICJmcmFtZS1pbmRleCIpCisgICAgQzJGSUVMRChjdXN0b21PcmRpbmFsLCAiY3VzdG9tLW9yZGluYWwiKQorfTsKKworLyoqCisgKiBUaGlzIHN0cnVjdHVyZSByZXByZXNlbnRzIGEgQ29kZWMgMi4wIGZyYW1lIHdpdGggaXRzIG1ldGFkYXRhLgorICoKKyAqIEEgZnJhbWUgYmFzaWNhbGx5IGNvbnNpc3RzIG9mIGFuIG9yZGVyZWQgc2V0cyBvZiBidWZmZXJzLCBjb25maWd1cmF0aW9uIGNoYW5nZXMgYW5kIGluZm8gYnVmZmVycworICogYWxvbmcgd2l0aCBzb21lIG5vbi1jb25maWd1cmF0aW9uIG1ldGFkYXRhLgorICovCitzdHJ1Y3QgQzJGcmFtZURhdGEgeworLy9wdWJsaWM6CisgICAgZW51bSBmbGFnc190IDogdWludDMyX3QgeworICAgICAgICAvKioKKyAgICAgICAgICogRm9yIGlucHV0IGZyYW1lczogbm8gb3V0cHV0IGZyYW1lIHNoYWxsIGJlIGdlbmVyYXRlZCB3aGVuIHByb2Nlc3NpbmcgdGhpcyBmcmFtZSwgYnV0CisgICAgICAgICAqIG1ldGFkYXRhIHNoYWxsIHN0aWxsIGJlIHByb2Nlc3NlZC4KKyAgICAgICAgICogRm9yIG91dHB1dCBmcmFtZXM6IHRoaXMgZnJhbWUgc2hhbGwgYmUgZGlzY2FyZGVkIGFuZCBidXQgbWV0YWRhdGEgaXMgc3RpbGwgdmFsaWQuCisgICAgICAgICAqLworICAgICAgICBGTEFHX0RST1BfRlJBTUUgICAgPSAoMSA8PCAwKSwKKyAgICAgICAgLyoqCisgICAgICAgICAqIFRoaXMgZnJhbWUgaXMgdGhlIGxhc3QgZnJhbWUgb2YgdGhlIGN1cnJlbnQgc3RyZWFtLiBGdXJ0aGVyIGZyYW1lcyBhcmUgcGFydCBvZiBhIG5ldworICAgICAgICAgKiBzdHJlYW0uCisgICAgICAgICAqLworICAgICAgICBGTEFHX0VORF9PRl9TVFJFQU0gPSAoMSA8PCAxKSwKKyAgICAgICAgLyoqCisgICAgICAgICAqIFRoaXMgZnJhbWUgc2hhbGwgYmUgZGlzY2FyZGVkIHdpdGggaXRzIG1ldGFkYXRhLgorICAgICAgICAgKiBUaGlzIGZsYWcgaXMgb25seSBzZXQgYnkgY29tcG9uZW50cyAtIGUuZy4gYXMgYSByZXNwb25zZSB0byB0aGUgZmx1c2ggY29tbWFuZC4KKyAgICAgICAgICovCisgICAgICAgIEZMQUdfRElTQ0FSRF9GUkFNRSA9ICgxIDw8IDIpLAorICAgICAgICAvKioKKyAgICAgICAgICogVGhpcyBmcmFtZSBpcyBub3QgdGhlIGxhc3QgZnJhbWUgcHJvZHVjZWQgZm9yIHRoZSBpbnB1dC4KKyAgICAgICAgICoKKyAgICAgICAgICogVGhpcyBmbGFnIGlzIG5vcm1hbGx5IHNldCBieSB0aGUgY29tcG9uZW50IC0gZS5nLiB3aGVuIGFuIGlucHV0IGZyYW1lIHJlc3VsdHMgaW4gbXVsdGlwbGUKKyAgICAgICAgICogb3V0cHV0IGZyYW1lcywgdGhpcyBmbGFnIGlzIHNldCBvbiBhbGwgYnV0IHRoZSBsYXN0IG91dHB1dCBmcmFtZS4KKyAgICAgICAgICoKKyAgICAgICAgICogQWxzbywgd2hlbiBjb21wb25lbnRzIGFyZSBjaGFpbmVkLCB0aGlzIGZsYWcgc2hvdWxkIGJlIHByb3BhZ2F0ZWQgZG93biB0aGUKKyAgICAgICAgICogd29yayBjaGFpbi4gVGhhdCBpcywgaWYgc2V0IG9uIGFuIGVhcmxpZXIgZnJhbWUgb2YgYSB3b3JrLWNoYWluLCBpdCBzaG91bGQgYmUgcHJvcGFnYXRlZAorICAgICAgICAgKiB0byBhbGwgbGF0ZXIgZnJhbWVzIGluIHRoYXQgY2hhaW4uIEFkZGl0aW9uYWxseSwgY29tcG9uZW50cyBkb3duIHRoZSBjaGFpbiBjb3VsZCBzZXQKKyAgICAgICAgICogdGhpcyBmbGFnIGV2ZW4gaWYgbm90IHNldCBlYXJsaWVyLCBlLmcuIGlmIG11bHRpcGxlIG91dHB1dCBmcmFtZSBpcyBnZW5lcmF0ZWQgYXQgdGhhdAorICAgICAgICAgKiBjb21wb25lbnQgZm9yIHRoZSBpbnB1dCBmcmFtZS4KKyAgICAgICAgICovCisgICAgICAgIEZMQUdfSU5DT01QTEVURSA9ICgxIDw8IDMpLAorICAgICAgICAvKioKKyAgICAgICAgICogVGhpcyBmcmFtZSBjb250YWlucyBvbmx5IGNvZGVjLXNwZWNpZmljIGNvbmZpZ3VyYXRpb24gZGF0YSwgYW5kIG5vIGFjdHVhbCBhY2Nlc3MgdW5pdC4KKyAgICAgICAgICoKKyAgICAgICAgICogXGRlcHJlY2F0ZWQgcGFzcyBjb2RlYyBjb25maWd1cmF0aW9uIHdpdGggdXNpbmcgdGhlIFx0b2RvIGNvZGVjLXNwZWNpZmljIGNvbmZpZ3VyYXRpb24KKyAgICAgICAgICogaW5mbyB0b2dldGhlciB3aXRoIHRoZSBhY2Nlc3MgdW5pdC4KKyAgICAgICAgICovCisgICAgICAgIEZMQUdfQ09ERUNfQ09ORklHICA9ICgxdSA8PCAzMSksCisgICAgfTsKKworICAgIC8qKgorICAgICAqIEZyYW1lIGZsYWdzICovCisgICAgZmxhZ3NfdCAgZmxhZ3M7CisgICAgQzJXb3JrT3JkaW5hbFN0cnVjdCBvcmRpbmFsOworICAgIHN0ZDo6dmVjdG9yPHN0ZDo6c2hhcmVkX3B0cjxDMkJ1ZmZlcj4+IGJ1ZmZlcnM7CisgICAgLy88IGZvciBpbml0aWFsIHdvcmsgaXRlbSwgdGhlc2UgbWF5IGFsc28gY29tZSBmcm9tIHRoZSBwYXJzZXIgLSBpZiBwcm92aWRlZAorICAgIC8vPCBmb3Igb3V0cHV0IGJ1ZmZlcnMsIHRoZXNlIGFyZSB0aGUgcmVzcG9uc2VzIHRvIHJlcXVlc3RlZEluZm9zCisgICAgc3RkOjp2ZWN0b3I8c3RkOjp1bmlxdWVfcHRyPEMyUGFyYW0+PiAgICAgIGNvbmZpZ1VwZGF0ZTsKKyAgICBzdGQ6OnZlY3RvcjxzdGQ6OnNoYXJlZF9wdHI8QzJJbmZvQnVmZmVyPj4gaW5mb0J1ZmZlcnM7Cit9OworCitzdHJ1Y3QgQzJXb3JrbGV0IHsKKy8vcHVibGljOgorICAgIC8vIElOCisgICAgYzJfbm9kZV9pZF90IGNvbXBvbmVudDsKKworICAgIC8qKiBDb25maWd1cmF0aW9uIGNoYW5nZXMgdG8gYmUgYXBwbGllZCBiZWZvcmUgcHJvY2Vzc2luZyB0aGlzIHdvcmtsZXQuICovCisgICAgc3RkOjp2ZWN0b3I8c3RkOjp1bmlxdWVfcHRyPEMyVHVuaW5nPj4gdHVuaW5nczsKKyAgICBzdGQ6OnZlY3RvcjxzdGQ6OnVuaXF1ZV9wdHI8QzJTZXR0aW5nUmVzdWx0Pj4gZmFpbHVyZXM7CisKKyAgICAvLyBPVVQKKyAgICBDMkZyYW1lRGF0YSBvdXRwdXQ7Cit9OworCisvKioKKyAqIEluZm9ybWF0aW9uIGFib3V0IHBhcnRpYWwgd29yay1jaGFpbnMgbm90IHBhcnQgb2YgdGhlIGN1cnJlbnQgd29yayBpdGVtcy4KKyAqCisgKiBUbyBiZSBkZWZpbmVkIGxhdGVyLgorICovCitzdHJ1Y3QgQzJXb3JrQ2hhaW5JbmZvOworCisvKioKKyAqIFRoaXMgc3RydWN0dXJlIGhvbGRzIGluZm9ybWF0aW9uIGFib3V0IGFsbCBhIHNpbmdsZSB3b3JrIGl0ZW0uCisgKgorICogVGhpcyBzdHJ1Y3R1cmUgc2hhbGwgYmUgcGFzc2VkIGJ5IHRoZSBjbGllbnQgdG8gdGhlIGNvbXBvbmVudCBmb3IgdGhlIGZpcnN0IHdvcmtsZXQuIEFzIHN1Y2gsCisgKiB3b3JrbGV0cyBtdXN0IG5vdCBiZSBlbXB0eS4gVGhlIG93bmVyc2hpcCBvZiB0aGlzIG9iamVjdCBpcyBwYXNzZWQuCisgKi8KK3N0cnVjdCBDMldvcmsgeworLy9wdWJsaWM6CisgICAgLy8vIGFkZGl0aW9uYWwgd29yayBjaGFpbiBpbmZvIG5vdCBwYXJ0IG9mIHRoaXMgd29yaworICAgIHN0ZDo6c2hhcmVkX3B0cjxDMldvcmtDaGFpbkluZm8+IGNoYWluSW5mbzsKKworICAgIC8vLyBUaGUgaW5wdXQgZGF0YSB0byBiZSBwcm9jZXNzZWQgYXMgcGFydCBvZiB0aGlzIHdvcmsvd29yay1jaGFpbi4gVGhpcyBpcyBwcm92aWRlZCBieSB0aGUKKyAgICAvLy8gY2xpZW50IHdpdGggb3duZXJzaGlwLiBXaGVuIHRoZSB3b3JrIGlzIHJldHVybmVkICh2aWEgb25Xb3JrRG9uZSksIHRoZSBpbnB1dCBidWZmZXItcGFjaydzCisgICAgLy8vIGJ1ZmZlciB2ZWN0b3Igc2hhbGwgY29udGFpbiBudWxscHRycy4KKyAgICBDMkZyYW1lRGF0YSBpbnB1dDsKKworICAgIC8vLyBUaGUgY2hhaW4gb2YgY29tcG9uZW50cywgdHVuaW5ncyAoaW5jbHVkaW5nIG91dHB1dCBidWZmZXIgcG9vbCBJRHMpIGFuZCBpbmZvIHJlcXVlc3RzIHRoYXQgdGhlCisgICAgLy8vIGRhdGEgbXVzdCBwYXNzIHRocm91Z2guIElmIHRoaXMgaGFzIG1vcmUgdGhhbiBhIHNpbmdsZSBlbGVtZW50LCB0aGUgdHVubmVscyBiZXR3ZWVuIHN1Y2Nlc3NpdmUKKyAgICAvLy8gY29tcG9uZW50cyBvZiB0aGUgd29ya2xldCBjaGFpbiBtdXN0IGhhdmUgYmVlbiAoc3VjY2Vzc2Z1bGx5KSBwcmUtcmVnaXN0ZXJlZCBhdCB0aGUgdGltZSB0aGF0CisgICAgLy8vIHRoZSB3b3JrIGlzIHN1Ym1pdHRlZC4gQWxsb2NhdGluZyB0aGUgb3V0cHV0IGJ1ZmZlcnMgaW4gdGhlIHdvcmtsZXRzIGlzIHRoZSByZXNwb25zaWJpbGl0eSBvZgorICAgIC8vLyBlYWNoIGNvbXBvbmVudC4gVXBvbiB3b3JrIHN1Ym1pc3Npb24sIGVhY2ggb3V0cHV0IGJ1ZmZlci1wYWNrIHNoYWxsIGJlIGFuIGFwcHJvcHJpYXRlbHkgc2l6ZWQKKyAgICAvLy8gdmVjdG9yIGNvbnRhaW5pbmcgbnVsbHB0cnMuIFdoZW4gdGhlIHdvcmsgaXMgY29tcGxldGVkL3JldHVybmVkIHRvIHRoZSBjbGllbnQsIG91dHB1dCBidWZmZXJzCisgICAgLy8vIHBvaW50ZXJzIGZyb20gYWxsIGJ1dCB0aGUgZmluYWwgd29ya2xldCBzaGFsbCBiZSBudWxscHRycy4KKyAgICBzdGQ6Omxpc3Q8c3RkOjp1bmlxdWVfcHRyPEMyV29ya2xldD4+IHdvcmtsZXRzOworCisgICAgLy8vIE51bWJlciBvZiB3b3JrbGV0cyBzdWNjZXNzZnVsbHkgcHJvY2Vzc2VkIGluIHRoaXMgY2hhaW4uIFRoaXMgc2hhbGwgYmUgaW5pdGlhbGl6ZWQgdG8gMCBieSB0aGUKKyAgICAvLy8gY2xpZW50IHdoZW4gdGhlIHdvcmsgaXMgc3VibWl0dGVkLiBJdCBzaGFsbCBjb250YWluIHRoZSBudW1iZXIgb2Ygd29ya2xldHMgdGhhdCB3ZXJlCisgICAgLy8vIHN1Y2Nlc3NmdWxseSBwcm9jZXNzZWQgd2hlbiB0aGUgd29yayBpcyByZXR1cm5lZCB0byB0aGUgY2xpZW50LiBJZiB0aGlzIGlzIGxlc3MgdGhlbiB0aGUgbnVtYmVyCisgICAgLy8vIG9mIHdvcmtsZXRzLCByZXN1bHQgbXVzdCBub3QgYmUgc3VjY2Vzcy4gSXQgbXVzdCBiZSBpbiB0aGUgcmFuZ2Ugb2YgWzAsIHdvcmtsZXRzLnNpemUoKV0uCisgICAgdWludDMyX3Qgd29ya2xldHNQcm9jZXNzZWQ7CisKKyAgICAvLy8gVGhlIGZpbmFsIG91dGNvbWUgb2YgdGhlIHdvcmsgKGNvcnJlc3BvbmRpbmcgdG8gdGhlIGN1cnJlbnQgd29ya2xldHNQcm9jZXNzZWQpLiBJZiAwIHdoZW4KKyAgICAvLy8gd29yayBpcyByZXR1cm5lZCwgaXQgaXMgYXNzdW1lZCB0aGF0IGFsbCB3b3JrbGV0cyBoYXZlIGJlZW4gcHJvY2Vzc2VkLgorICAgIGMyX3N0YXR1c190IHJlc3VsdDsKK307CisKKy8qKgorICogSW5mb3JtYXRpb24gYWJvdXQgYSBmdXR1cmUgd29yayB0byBiZSBzdWJtaXR0ZWQgdG8gdGhlIGNvbXBvbmVudC4gVGhlIGluZm9ybWF0aW9uIGlzIHVzZWQgdG8KKyAqIHJlc2VydmUgdGhlIHdvcmsgZm9yIHdvcmsgb3JkZXJpbmcgcHVycG9zZXMuCisgKi8KK3N0cnVjdCBDMldvcmtPdXRsaW5lIHsKKy8vcHVibGljOgorICAgIEMyV29ya09yZGluYWxTdHJ1Y3Qgb3JkaW5hbDsKKyAgICBzdGQ6OnZlY3RvcjxjMl9ub2RlX2lkX3Q+IGNoYWluOworfTsKKworLy8vIEB9CisKKyNlbmRpZiAgLy8gQzJXT1JLX0hfCmRpZmYgLS1naXQgYS9tZWRpYS9jb2RlYzIvY29yZS9pbmNsdWRlL19DMk1hY3JvVXRpbHMuaCBiL21lZGlhL2NvZGVjMi9jb3JlL2luY2x1ZGUvX0MyTWFjcm9VdGlscy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA0ZTliYTUKLS0tIC9kZXYvbnVsbAorKysgYi9tZWRpYS9jb2RlYzIvY29yZS9pbmNsdWRlL19DMk1hY3JvVXRpbHMuaApAQCAtMCwwICsxLDE2MiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNiBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCisKKyNpZm5kZWYgQzJVVElMU19NQUNST19VVElMU19IXworI2RlZmluZSBDMlVUSUxTX01BQ1JPX1VUSUxTX0hfCisKKy8qKiBcZmlsZQorICogTWFjcm8gdXRpbGl0aWVzIGZvciB0aGUgdXRpbHMgbGlicmFyeSB1c2VkIGJ5IENvZGVjMiBpbXBsZW1lbnRhdGlvbnMuCisgKi8KKworLy8vIFxpZiAwCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBWQVJJQUJMRSBBUkdVTUVOVCBDT1VOVElORyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworLy8gcmVtb3ZlIGVtcHR5IGFyZ3VtZW50cyAtIF9DMl9BUkcoKSBleHBhbmRzIHRvICcnLCB3aGlsZSBfQzJfQVJHKHgpIGV4cGFuZHMgdG8gJywgeCcKKy8vIF9DMl9BUkduKC4uLikgZG9lcyB0aGUgc2FtZSBmb3IgbiBhcmd1bWVudHMKKyNkZWZpbmUgX0MyX0FSRyguLi4pICwgIyNfX1ZBX0FSR1NfXworI2RlZmluZSBfQzJfQVJHMihfMSwgXzIpIF9DMl9BUkcoXzEpIF9DMl9BUkcoXzIpCisjZGVmaW5lIF9DMl9BUkc0KF8xLCBfMiwgXzMsIF80KSBfQzJfQVJHMihfMSwgXzIpIF9DMl9BUkcyKF8zLCBfNCkKKyNkZWZpbmUgX0MyX0FSRzgoXzEsIF8yLCBfMywgXzQsIF81LCBfNiwgXzcsIF84KSBfQzJfQVJHNChfMSwgXzIsIF8zLCBfNCkgX0MyX0FSRzQoXzUsIF82LCBfNywgXzgpCisjZGVmaW5lIF9DMl9BUkcxNihfMSwgXzIsIF8zLCBfNCwgXzUsIF82LCBfNywgXzgsIF85LCBfMTAsIF8xMSwgXzEyLCBfMTMsIF8xNCwgXzE1LCBfMTYpIFwKKyAgICAgICAgX0MyX0FSRzgoXzEsIF8yLCBfMywgXzQsIF81LCBfNiwgXzcsIF84KSBfQzJfQVJHOChfOSwgXzEwLCBfMTEsIF8xMiwgXzEzLCBfMTQsIF8xNSwgXzE2KQorCisvLyByZXR1cm4gdGhlIDY1dGggYXJndW1lbnQKKyNkZWZpbmUgX0MyX0FSR0NfMyhfLCBfMCwgXzEsIF8yLCBfMywgXzQsIF81LCBfNiwgXzcsIF84LCBfOSwgXzEwLCBfMTEsIF8xMiwgXzEzLCBfMTQsIF8xNSwgXzE2LCBcCisgICAgICAgIF8xNywgXzE4LCBfMTksIF8yMCwgXzIxLCBfMjIsIF8yMywgXzI0LCBfMjUsIF8yNiwgXzI3LCBfMjgsIF8yOSwgXzMwLCBfMzEsIF8zMiwgXAorICAgICAgICBfMzMsIF8zNCwgXzM1LCBfMzYsIF8zNywgXzM4LCBfMzksIF80MCwgXzQxLCBfNDIsIF80MywgXzQ0LCBfNDUsIF80NiwgXzQ3LCBfNDgsIFwKKyAgICAgICAgXzQ5LCBfNTAsIF81MSwgXzUyLCBfNTMsIF81NCwgXzU1LCBfNTYsIF81NywgXzU4LCBfNTksIF82MCwgXzYxLCBfNjIsIF82MywgXzY0LCAuLi4pIF82NAorCisvLy8gXGVuZGlmCisKKy8qKgorICogUmV0dXJucyB0aGUgbnVtYmVyIG9mIGFyZ3VtZW50cy4KKyAqLworLy8gV2UgZG8gdGhpcyBieSBwcmVwZW5kaW5nIDEgYW5kIGFwcGVuZGluZyA2NSBkZXNpZ25lZCB2YWx1ZXMgc3VjaCB0aGF0IHRoZSA2NXRoIGVsZW1lbnQKKy8vIHdpbGwgYmUgdGhlIG51bWJlciBvZiBhcmd1bWVudHMuCisjZGVmaW5lIF9DMl9BUkdDKC4uLikgX0MyX0FSR0NfMSgwLCAjI19fVkFfQVJHU19fLCBcCisgICAgICAgIDY0LCA2MywgNjIsIDYxLCA2MCwgNTksIDU4LCA1NywgNTYsIDU1LCA1NCwgNTMsIDUyLCA1MSwgNTAsIDQ5LCA0OCwgNDcsIDQ2LCA0NSwgNDQsIDQzLCBcCisgICAgICAgIDQyLCA0MSwgNDAsIDM5LCAzOCwgMzcsIDM2LCAzNSwgMzQsIDMzLCAzMiwgMzEsIDMwLCAyOSwgMjgsIDI3LCAyNiwgMjUsIDI0LCAyMywgMjIsIDIxLCBcCisgICAgICAgIDIwLCAxOSwgMTgsIDE3LCAxNiwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCkKKworLy8vIFxpZiAwCisKKy8vIHN0ZXAgMS4gcmVtb3ZlIGVtcHR5IGFyZ3VtZW50cyAtIHRoaXMgaXMgbmVlZGVkIHRvIGFsbG93IHRyYWlsaW5nIGNvbW1hIGluIGVudW0gZGVmaW5pdGlvbnMKKy8vIChOT1RFOiB3ZSBkb24ndCBrbm93IHdoaWNoIGFyZ3VtZW50IHdpbGwgaGF2ZSB0aGlzIHRyYWlsaW5nIGNvbW1hIHNvIHdlIGhhdmUgdG8gdHJ5IGFsbCkKKyNkZWZpbmUgX0MyX0FSR0NfMShfLCBfMCwgXzEsIF8yLCBfMywgXzQsIF81LCBfNiwgXzcsIF84LCBfOSwgXzEwLCBfMTEsIF8xMiwgXzEzLCBfMTQsIF8xNSwgXzE2LCBcCisgICAgICAgIF8xNywgXzE4LCBfMTksIF8yMCwgXzIxLCBfMjIsIF8yMywgXzI0LCBfMjUsIF8yNiwgXzI3LCBfMjgsIF8yOSwgXzMwLCBfMzEsIF8zMiwgXAorICAgICAgICBfMzMsIF8zNCwgXzM1LCBfMzYsIF8zNywgXzM4LCBfMzksIF80MCwgXzQxLCBfNDIsIF80MywgXzQ0LCBfNDUsIF80NiwgXzQ3LCBfNDgsIFwKKyAgICAgICAgXzQ5LCBfNTAsIF81MSwgXzUyLCBfNTMsIF81NCwgXzU1LCBfNTYsIF81NywgXzU4LCBfNTksIF82MCwgXzYxLCBfNjIsIF82MywgXzY0LCAuLi4pIFwKKyAgICBfQzJfQVJHQ18yKF8gX0MyX0FSRyhfMCkgXAorICAgIF9DMl9BUkcxNihfMSwgXzIsIF8zLCBfNCwgXzUsIF82LCBfNywgXzgsIF85LCBfMTAsIF8xMSwgXzEyLCBfMTMsIF8xNCwgXzE1LCBfMTYpIFwKKyAgICBfQzJfQVJHMTYoXzE3LCBfMTgsIF8xOSwgXzIwLCBfMjEsIF8yMiwgXzIzLCBfMjQsIF8yNSwgXzI2LCBfMjcsIF8yOCwgXzI5LCBfMzAsIF8zMSwgXzMyKSBcCisgICAgX0MyX0FSRzE2KF8zMywgXzM0LCBfMzUsIF8zNiwgXzM3LCBfMzgsIF8zOSwgXzQwLCBfNDEsIF80MiwgXzQzLCBfNDQsIF80NSwgXzQ2LCBfNDcsIF80OCkgXAorICAgIF9DMl9BUkcxNihfNDksIF81MCwgXzUxLCBfNTIsIF81MywgXzU0LCBfNTUsIF81NiwgXzU3LCBfNTgsIF81OSwgXzYwLCBfNjEsIF82MiwgXzYzLCBfNjQpLCBcCisgICAgIyNfX1ZBX0FSR1NfXykKKworLy8gc3RlcCAyLiB0aGlzIGlzIG5lZWRlZCBhcyByZW1vdmVkIGFyZ3VtZW50cyBjYW5ub3QgYmUgcGFzc2VkIGRpcmVjdGx5IGFzIGVtcHR5IGludG8gYSBtYWNybworI2RlZmluZSBfQzJfQVJHQ18yKC4uLikgX0MyX0FSR0NfMyhfX1ZBX0FSR1NfXykKKworLy8vIFxlbmRpZgorCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBWQVJJQUJMRSBBUkdVTUVOVCBDT05WRVJTSU9OIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKKy8vLyBcaWYgMAorCisvLyBtYWNyb3MgdGhhdCBjb252ZXJ0IF8xLCBfMiwgXzMsIC4uLiB0byBmbihfMSwgYXJnKSwgZm4oXzIsIGFyZyksIGZuKF8zLCBhcmcpLCAuLi4KKyNkZWZpbmUgX0MyX01BUF82NChmbiwgYXJnLCBoZWFkLCAuLi4pIGZuKGhlYWQsIGFyZyksIF9DMl9NQVBfNjMoZm4sIGFyZywgIyNfX1ZBX0FSR1NfXykKKyNkZWZpbmUgX0MyX01BUF82MyhmbiwgYXJnLCBoZWFkLCAuLi4pIGZuKGhlYWQsIGFyZyksIF9DMl9NQVBfNjIoZm4sIGFyZywgIyNfX1ZBX0FSR1NfXykKKyNkZWZpbmUgX0MyX01BUF82MihmbiwgYXJnLCBoZWFkLCAuLi4pIGZuKGhlYWQsIGFyZyksIF9DMl9NQVBfNjEoZm4sIGFyZywgIyNfX1ZBX0FSR1NfXykKKyNkZWZpbmUgX0MyX01BUF82MShmbiwgYXJnLCBoZWFkLCAuLi4pIGZuKGhlYWQsIGFyZyksIF9DMl9NQVBfNjAoZm4sIGFyZywgIyNfX1ZBX0FSR1NfXykKKyNkZWZpbmUgX0MyX01BUF82MChmbiwgYXJnLCBoZWFkLCAuLi4pIGZuKGhlYWQsIGFyZyksIF9DMl9NQVBfNTkoZm4sIGFyZywgIyNfX1ZBX0FSR1NfXykKKyNkZWZpbmUgX0MyX01BUF81OShmbiwgYXJnLCBoZWFkLCAuLi4pIGZuKGhlYWQsIGFyZyksIF9DMl9NQVBfNTgoZm4sIGFyZywgIyNfX1ZBX0FSR1NfXykKKyNkZWZpbmUgX0MyX01BUF81OChmbiwgYXJnLCBoZWFkLCAuLi4pIGZuKGhlYWQsIGFyZyksIF9DMl9NQVBfNTcoZm4sIGFyZywgIyNfX1ZBX0FSR1NfXykKKyNkZWZpbmUgX0MyX01BUF81NyhmbiwgYXJnLCBoZWFkLCAuLi4pIGZuKGhlYWQsIGFyZyksIF9DMl9NQVBfNTYoZm4sIGFyZywgIyNfX1ZBX0FSR1NfXykKKyNkZWZpbmUgX0MyX01BUF81NihmbiwgYXJnLCBoZWFkLCAuLi4pIGZuKGhlYWQsIGFyZyksIF9DMl9NQVBfNTUoZm4sIGFyZywgIyNfX1ZBX0FSR1NfXykKKyNkZWZpbmUgX0MyX01BUF81NShmbiwgYXJnLCBoZWFkLCAuLi4pIGZuKGhlYWQsIGFyZyksIF9DMl9NQVBfNTQoZm4sIGFyZywgIyNfX1ZBX0FSR1NfXykKKyNkZWZpbmUgX0MyX01BUF81NChmbiwgYXJnLCBoZWFkLCAuLi4pIGZuKGhlYWQsIGFyZyksIF9DMl9NQVBfNTMoZm4sIGFyZywgIyNfX1ZBX0FSR1NfXykKKyNkZWZpbmUgX0MyX01BUF81MyhmbiwgYXJnLCBoZWFkLCAuLi4pIGZuKGhlYWQsIGFyZyksIF9DMl9NQVBfNTIoZm4sIGFyZywgIyNfX1ZBX0FSR1NfXykKKyNkZWZpbmUgX0MyX01BUF81MihmbiwgYXJnLCBoZWFkLCAuLi4pIGZuKGhlYWQsIGFyZyksIF9DMl9NQVBfNTEoZm4sIGFyZywgIyNfX1ZBX0FSR1NfXykKKyNkZWZpbmUgX0MyX01BUF81MShmbiwgYXJnLCBoZWFkLCAuLi4pIGZuKGhlYWQsIGFyZyksIF9DMl9NQVBfNTAoZm4sIGFyZywgIyNfX1ZBX0FSR1NfXykKKyNkZWZpbmUgX0MyX01BUF81MChmbiwgYXJnLCBoZWFkLCAuLi4pIGZuKGhlYWQsIGFyZyksIF9DMl9NQVBfNDkoZm4sIGFyZywgIyNfX1ZBX0FSR1NfXykKKyNkZWZpbmUgX0MyX01BUF80OShmbiwgYXJnLCBoZWFkLCAuLi4pIGZuKGhlYWQsIGFyZyksIF9DMl9NQVBfNDgoZm4sIGFyZywgIyNfX1ZBX0FSR1NfXykKKyNkZWZpbmUgX0MyX01BUF80OChmbiwgYXJnLCBoZWFkLCAuLi4pIGZuKGhlYWQsIGFyZyksIF9DMl9NQVBfNDcoZm4sIGFyZywgIyNfX1ZBX0FSR1NfXykKKyNkZWZpbmUgX0MyX01BUF80NyhmbiwgYXJnLCBoZWFkLCAuLi4pIGZuKGhlYWQsIGFyZyksIF9DMl9NQVBfNDYoZm4sIGFyZywgIyNfX1ZBX0FSR1NfXykKKyNkZWZpbmUgX0MyX01BUF80NihmbiwgYXJnLCBoZWFkLCAuLi4pIGZuKGhlYWQsIGFyZyksIF9DMl9NQVBfNDUoZm4sIGFyZywgIyNfX1ZBX0FSR1NfXykKKyNkZWZpbmUgX0MyX01BUF80NShmbiwgYXJnLCBoZWFkLCAuLi4pIGZuKGhlYWQsIGFyZyksIF9DMl9NQVBfNDQoZm4sIGFyZywgIyNfX1ZBX0FSR1NfXykKKyNkZWZpbmUgX0MyX01BUF80NChmbiwgYXJnLCBoZWFkLCAuLi4pIGZuKGhlYWQsIGFyZyksIF9DMl9NQVBfNDMoZm4sIGFyZywgIyNfX1ZBX0FSR1NfXykKKyNkZWZpbmUgX0MyX01BUF80MyhmbiwgYXJnLCBoZWFkLCAuLi4pIGZuKGhlYWQsIGFyZyksIF9DMl9NQVBfNDIoZm4sIGFyZywgIyNfX1ZBX0FSR1NfXykKKyNkZWZpbmUgX0MyX01BUF80MihmbiwgYXJnLCBoZWFkLCAuLi4pIGZuKGhlYWQsIGFyZyksIF9DMl9NQVBfNDEoZm4sIGFyZywgIyNfX1ZBX0FSR1NfXykKKyNkZWZpbmUgX0MyX01BUF80MShmbiwgYXJnLCBoZWFkLCAuLi4pIGZuKGhlYWQsIGFyZyksIF9DMl9NQVBfNDAoZm4sIGFyZywgIyNfX1ZBX0FSR1NfXykKKyNkZWZpbmUgX0MyX01BUF80MChmbiwgYXJnLCBoZWFkLCAuLi4pIGZuKGhlYWQsIGFyZyksIF9DMl9NQVBfMzkoZm4sIGFyZywgIyNfX1ZBX0FSR1NfXykKKyNkZWZpbmUgX0MyX01BUF8zOShmbiwgYXJnLCBoZWFkLCAuLi4pIGZuKGhlYWQsIGFyZyksIF9DMl9NQVBfMzgoZm4sIGFyZywgIyNfX1ZBX0FSR1NfXykKKyNkZWZpbmUgX0MyX01BUF8zOChmbiwgYXJnLCBoZWFkLCAuLi4pIGZuKGhlYWQsIGFyZyksIF9DMl9NQVBfMzcoZm4sIGFyZywgIyNfX1ZBX0FSR1NfXykKKyNkZWZpbmUgX0MyX01BUF8zNyhmbiwgYXJnLCBoZWFkLCAuLi4pIGZuKGhlYWQsIGFyZyksIF9DMl9NQVBfMzYoZm4sIGFyZywgIyNfX1ZBX0FSR1NfXykKKyNkZWZpbmUgX0MyX01BUF8zNihmbiwgYXJnLCBoZWFkLCAuLi4pIGZuKGhlYWQsIGFyZyksIF9DMl9NQVBfMzUoZm4sIGFyZywgIyNfX1ZBX0FSR1NfXykKKyNkZWZpbmUgX0MyX01BUF8zNShmbiwgYXJnLCBoZWFkLCAuLi4pIGZuKGhlYWQsIGFyZyksIF9DMl9NQVBfMzQoZm4sIGFyZywgIyNfX1ZBX0FSR1NfXykKKyNkZWZpbmUgX0MyX01BUF8zNChmbiwgYXJnLCBoZWFkLCAuLi4pIGZuKGhlYWQsIGFyZyksIF9DMl9NQVBfMzMoZm4sIGFyZywgIyNfX1ZBX0FSR1NfXykKKyNkZWZpbmUgX0MyX01BUF8zMyhmbiwgYXJnLCBoZWFkLCAuLi4pIGZuKGhlYWQsIGFyZyksIF9DMl9NQVBfMzIoZm4sIGFyZywgIyNfX1ZBX0FSR1NfXykKKyNkZWZpbmUgX0MyX01BUF8zMihmbiwgYXJnLCBoZWFkLCAuLi4pIGZuKGhlYWQsIGFyZyksIF9DMl9NQVBfMzEoZm4sIGFyZywgIyNfX1ZBX0FSR1NfXykKKyNkZWZpbmUgX0MyX01BUF8zMShmbiwgYXJnLCBoZWFkLCAuLi4pIGZuKGhlYWQsIGFyZyksIF9DMl9NQVBfMzAoZm4sIGFyZywgIyNfX1ZBX0FSR1NfXykKKyNkZWZpbmUgX0MyX01BUF8zMChmbiwgYXJnLCBoZWFkLCAuLi4pIGZuKGhlYWQsIGFyZyksIF9DMl9NQVBfMjkoZm4sIGFyZywgIyNfX1ZBX0FSR1NfXykKKyNkZWZpbmUgX0MyX01BUF8yOShmbiwgYXJnLCBoZWFkLCAuLi4pIGZuKGhlYWQsIGFyZyksIF9DMl9NQVBfMjgoZm4sIGFyZywgIyNfX1ZBX0FSR1NfXykKKyNkZWZpbmUgX0MyX01BUF8yOChmbiwgYXJnLCBoZWFkLCAuLi4pIGZuKGhlYWQsIGFyZyksIF9DMl9NQVBfMjcoZm4sIGFyZywgIyNfX1ZBX0FSR1NfXykKKyNkZWZpbmUgX0MyX01BUF8yNyhmbiwgYXJnLCBoZWFkLCAuLi4pIGZuKGhlYWQsIGFyZyksIF9DMl9NQVBfMjYoZm4sIGFyZywgIyNfX1ZBX0FSR1NfXykKKyNkZWZpbmUgX0MyX01BUF8yNihmbiwgYXJnLCBoZWFkLCAuLi4pIGZuKGhlYWQsIGFyZyksIF9DMl9NQVBfMjUoZm4sIGFyZywgIyNfX1ZBX0FSR1NfXykKKyNkZWZpbmUgX0MyX01BUF8yNShmbiwgYXJnLCBoZWFkLCAuLi4pIGZuKGhlYWQsIGFyZyksIF9DMl9NQVBfMjQoZm4sIGFyZywgIyNfX1ZBX0FSR1NfXykKKyNkZWZpbmUgX0MyX01BUF8yNChmbiwgYXJnLCBoZWFkLCAuLi4pIGZuKGhlYWQsIGFyZyksIF9DMl9NQVBfMjMoZm4sIGFyZywgIyNfX1ZBX0FSR1NfXykKKyNkZWZpbmUgX0MyX01BUF8yMyhmbiwgYXJnLCBoZWFkLCAuLi4pIGZuKGhlYWQsIGFyZyksIF9DMl9NQVBfMjIoZm4sIGFyZywgIyNfX1ZBX0FSR1NfXykKKyNkZWZpbmUgX0MyX01BUF8yMihmbiwgYXJnLCBoZWFkLCAuLi4pIGZuKGhlYWQsIGFyZyksIF9DMl9NQVBfMjEoZm4sIGFyZywgIyNfX1ZBX0FSR1NfXykKKyNkZWZpbmUgX0MyX01BUF8yMShmbiwgYXJnLCBoZWFkLCAuLi4pIGZuKGhlYWQsIGFyZyksIF9DMl9NQVBfMjAoZm4sIGFyZywgIyNfX1ZBX0FSR1NfXykKKyNkZWZpbmUgX0MyX01BUF8yMChmbiwgYXJnLCBoZWFkLCAuLi4pIGZuKGhlYWQsIGFyZyksIF9DMl9NQVBfMTkoZm4sIGFyZywgIyNfX1ZBX0FSR1NfXykKKyNkZWZpbmUgX0MyX01BUF8xOShmbiwgYXJnLCBoZWFkLCAuLi4pIGZuKGhlYWQsIGFyZyksIF9DMl9NQVBfMTgoZm4sIGFyZywgIyNfX1ZBX0FSR1NfXykKKyNkZWZpbmUgX0MyX01BUF8xOChmbiwgYXJnLCBoZWFkLCAuLi4pIGZuKGhlYWQsIGFyZyksIF9DMl9NQVBfMTcoZm4sIGFyZywgIyNfX1ZBX0FSR1NfXykKKyNkZWZpbmUgX0MyX01BUF8xNyhmbiwgYXJnLCBoZWFkLCAuLi4pIGZuKGhlYWQsIGFyZyksIF9DMl9NQVBfMTYoZm4sIGFyZywgIyNfX1ZBX0FSR1NfXykKKyNkZWZpbmUgX0MyX01BUF8xNihmbiwgYXJnLCBoZWFkLCAuLi4pIGZuKGhlYWQsIGFyZyksIF9DMl9NQVBfMTUoZm4sIGFyZywgIyNfX1ZBX0FSR1NfXykKKyNkZWZpbmUgX0MyX01BUF8xNShmbiwgYXJnLCBoZWFkLCAuLi4pIGZuKGhlYWQsIGFyZyksIF9DMl9NQVBfMTQoZm4sIGFyZywgIyNfX1ZBX0FSR1NfXykKKyNkZWZpbmUgX0MyX01BUF8xNChmbiwgYXJnLCBoZWFkLCAuLi4pIGZuKGhlYWQsIGFyZyksIF9DMl9NQVBfMTMoZm4sIGFyZywgIyNfX1ZBX0FSR1NfXykKKyNkZWZpbmUgX0MyX01BUF8xMyhmbiwgYXJnLCBoZWFkLCAuLi4pIGZuKGhlYWQsIGFyZyksIF9DMl9NQVBfMTIoZm4sIGFyZywgIyNfX1ZBX0FSR1NfXykKKyNkZWZpbmUgX0MyX01BUF8xMihmbiwgYXJnLCBoZWFkLCAuLi4pIGZuKGhlYWQsIGFyZyksIF9DMl9NQVBfMTEoZm4sIGFyZywgIyNfX1ZBX0FSR1NfXykKKyNkZWZpbmUgX0MyX01BUF8xMShmbiwgYXJnLCBoZWFkLCAuLi4pIGZuKGhlYWQsIGFyZyksIF9DMl9NQVBfMTAoZm4sIGFyZywgIyNfX1ZBX0FSR1NfXykKKyNkZWZpbmUgX0MyX01BUF8xMChmbiwgYXJnLCBoZWFkLCAuLi4pIGZuKGhlYWQsIGFyZyksIF9DMl9NQVBfOShmbiwgYXJnLCAjI19fVkFfQVJHU19fKQorI2RlZmluZSBfQzJfTUFQXzkoZm4sIGFyZywgaGVhZCwgLi4uKSBmbihoZWFkLCBhcmcpLCBfQzJfTUFQXzgoZm4sIGFyZywgIyNfX1ZBX0FSR1NfXykKKyNkZWZpbmUgX0MyX01BUF84KGZuLCBhcmcsIGhlYWQsIC4uLikgZm4oaGVhZCwgYXJnKSwgX0MyX01BUF83KGZuLCBhcmcsICMjX19WQV9BUkdTX18pCisjZGVmaW5lIF9DMl9NQVBfNyhmbiwgYXJnLCBoZWFkLCAuLi4pIGZuKGhlYWQsIGFyZyksIF9DMl9NQVBfNihmbiwgYXJnLCAjI19fVkFfQVJHU19fKQorI2RlZmluZSBfQzJfTUFQXzYoZm4sIGFyZywgaGVhZCwgLi4uKSBmbihoZWFkLCBhcmcpLCBfQzJfTUFQXzUoZm4sIGFyZywgIyNfX1ZBX0FSR1NfXykKKyNkZWZpbmUgX0MyX01BUF81KGZuLCBhcmcsIGhlYWQsIC4uLikgZm4oaGVhZCwgYXJnKSwgX0MyX01BUF80KGZuLCBhcmcsICMjX19WQV9BUkdTX18pCisjZGVmaW5lIF9DMl9NQVBfNChmbiwgYXJnLCBoZWFkLCAuLi4pIGZuKGhlYWQsIGFyZyksIF9DMl9NQVBfMyhmbiwgYXJnLCAjI19fVkFfQVJHU19fKQorI2RlZmluZSBfQzJfTUFQXzMoZm4sIGFyZywgaGVhZCwgLi4uKSBmbihoZWFkLCBhcmcpLCBfQzJfTUFQXzIoZm4sIGFyZywgIyNfX1ZBX0FSR1NfXykKKyNkZWZpbmUgX0MyX01BUF8yKGZuLCBhcmcsIGhlYWQsIC4uLikgZm4oaGVhZCwgYXJnKSwgX0MyX01BUF8xKGZuLCBhcmcsICMjX19WQV9BUkdTX18pCisjZGVmaW5lIF9DMl9NQVBfMShmbiwgYXJnLCBoZWFkLCAuLi4pIGZuKGhlYWQsIGFyZykKKworLy8vIFxlbmRpZgorCisvKioKKyAqIE1hcHMgZWFjaCBhcmd1bWVudCB1c2luZyBhbm90aGVyIG1hY3JvIHggLT4gZm4oeCwgYXJnKQorICovCisvLyB1c2Ugd3JhcHBlciB0byBjYWxsIHRoZSBwcm9wZXIgbWFwcGVyIGJhc2VkIG9uIHRoZSBudW1iZXIgb2YgYXJndW1lbnRzCisjZGVmaW5lIF9DMl9NQVAoZm4sIGFyZywgLi4uKSBfQzJfTUFQX18oX0MyX0FSR0MoX19WQV9BUkdTX18pLCBmbiwgYXJnLCAjI19fVkFfQVJHU19fKQorCisvLy8gXGlmIDAKKworLy8gZXZhbHVhdGUgX24gc28gaXQgYmVjb21lcyBhIG51bWJlcgorI2RlZmluZSBfQzJfTUFQX18oX24sIGZuLCBhcmcsIC4uLikgX0MyX01BUF8oX24sIGZuLCBhcmcsIF9fVkFfQVJHU19fKQorLy8gY2FsbCB0aGUgcHJvcGVyIG1hcHBlcgorI2RlZmluZSBfQzJfTUFQXyhfbiwgZm4sIGFyZywgLi4uKSBfQzJfTUFQXyMjX24gKGZuLCBhcmcsIF9fVkFfQVJHU19fKQorCisvLy8gXGVuZGlmCisKKyNlbmRpZiAgLy8gQzJVVElMU19NQUNST19VVElMU19IXwpkaWZmIC0tZ2l0IGEvbWVkaWEvY29kZWMyL2NvcmUvaW5jbHVkZS9hbmRyb2lkLUMyQnVmZmVyLmggYi9tZWRpYS9jb2RlYzIvY29yZS9pbmNsdWRlL2FuZHJvaWQtQzJCdWZmZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yNmJlYWI3Ci0tLSAvZGV2L251bGwKKysrIGIvbWVkaWEvY29kZWMyL2NvcmUvaW5jbHVkZS9hbmRyb2lkLUMyQnVmZmVyLmgKQEAgLTAsMCArMSw3MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNiBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCisKKyNpZm5kZWYgQU5EUk9JRF9DMkJVRkZFUl9IXworI2RlZmluZSBBTkRST0lEX0MyQlVGRkVSX0hfCisKKyNpbmNsdWRlIDxjdXRpbHMvbmF0aXZlX2hhbmRsZS5oPgorI2luY2x1ZGUgPGhhcmR3YXJlL2dyYWxsb2MuaD4KKworLyogVXNlIGFuZHJvaWQgbmF0aXZlIGhhbmRsZSBmb3IgQzJIYW5kbGUgKi8KK3R5cGVkZWYgOjpuYXRpdmVfaGFuZGxlX3QgQzJIYW5kbGU7CisKK25hbWVzcGFjZSBhbmRyb2lkIHsKKworLyoqCisgKiBBbmRyb2lkIHBsYXRmb3JtIGJ1ZmZlci9tZW1vcnkgdXNhZ2UgYml0cy4KKyAqLworc3RydWN0IEMyQW5kcm9pZE1lbW9yeVVzYWdlIDogcHVibGljIEMyTWVtb3J5VXNhZ2UgeworICAgIGlubGluZSBDMkFuZHJvaWRNZW1vcnlVc2FnZShjb25zdCBDMk1lbW9yeVVzYWdlICZ1c2FnZSkgOiBDMk1lbW9yeVVzYWdlKHVzYWdlKSB7IH0KKworLy8gcHVibGljOgorICAgIC8qKgorICAgICAqIFJldXNlIGdyYWxsb2MgZmxhZ3Mgd2hlcmUgcG9zc2libGUsIGFzIENvZGVjIDIuMCBBUEkgb25seSB1c2VzIGJpdHMgMCBhbmQgMS4KKyAgICAgKi8KKyAgICBlbnVtIGNvbnN1bWVyX3QgOiB1aW50NjRfdCB7CisgICAgICAgIFJFTkRFUlNDUklQVF9SRUFEID0gR1JBTExPQ19VU0FHRV9SRU5ERVJTQ1JJUFQsCisgICAgICAgIEhXX1RFWFRVUkVfUkVBRCAgID0gR1JBTExPQ19VU0FHRV9IV19URVhUVVJFLAorICAgICAgICBIV19DT01QT1NFUl9SRUFEICA9IEdSQUxMT0NfVVNBR0VfSFdfQ09NUE9TRVIsCisgICAgICAgIC8vIGdyYWxsb2MgZG9lcyBub3QgZGVmaW5lIGEgdmlkZW8gZGVjb2RlciByZWFkIHVzYWdlIGZsYWcsIHNvIHVzZSBlbmNvZGVyIGZvcgorICAgICAgICAvLyBub3cKKyAgICAgICAgSFdfQ09ERUNfUkVBRCAgICAgPSBHUkFMTE9DX1VTQUdFX0hXX1ZJREVPX0VOQ09ERVIsCisgICAgICAgIFJFQURfUFJPVEVDVEVEICAgID0gR1JBTExPQ19VU0FHRV9QUk9URUNURUQsCisgICAgfTsKKworICAgIGVudW0gcHJvZHVjZXJfdCA6IHVpbnQ2NF90IHsKKyAgICAgICAgUkVOREVSU0NSSVBUX1dSSVRFID0gR1JBTExPQ19VU0FHRV9SRU5ERVJTQ1JJUFQsCisgICAgICAgIEhXX1RFWFRVUkVfV1JJVEUgICA9IEdSQUxMT0NfVVNBR0VfSFdfUkVOREVSLAorICAgICAgICBIV19DT01QT1NFUl9XUklURSAgPSBHUkFMTE9DX1VTQUdFX0hXX0NPTVBPU0VSIHwgR1JBTExPQ19VU0FHRV9IV19SRU5ERVIsCisgICAgICAgIEhXX0NPREVDX1dSSVRFICAgICA9IEdSQUxMT0NfVVNBR0VfSFdfVklERU9fRU5DT0RFUiwKKyAgICAgICAgLy8gZ3JhbGxvYyBkb2VzIG5vdCBkZWZpbmUgYSB3cml0ZSBwcm90ZWN0ZWQgdXNhZ2UgZmxhZywgc28gdXNlIHJlYWQgcHJvdGVjdGVkCisgICAgICAgIC8vIG5vdworICAgICAgICBXUklURV9QUk9URUNURUQgICAgPSBHUkFMTE9DX1VTQUdFX1BST1RFQ1RFRCwKKyAgICB9OworCisgICAgLyoqCisgICAgICogQ29udmVydCBmcm9tIGdyYWxsb2MgdXNhZ2UuCisgICAgICovCisgICAgc3RhdGljIEMyTWVtb3J5VXNhZ2UgRnJvbUdyYWxsb2NVc2FnZSh1aW50NjRfdCB1c2FnZSk7CisKKyAgICAvKioKKyAgICAgKiBDb252ZXJ0IHRvIGdyYWxsb2MgdXNhZ2UuCisgICAgICovCisgICAgdWludDY0X3QgYXNHcmFsbG9jVXNhZ2UoKSBjb25zdDsKK307CisKK30gIC8vIG5hbWVzcGFjZSBhbmRyb2lkCisKKyNlbmRpZiAgLy8gQU5EUk9JRF9DMkJVRkZFUl9IXwpkaWZmIC0tZ2l0IGEvbWVkaWEvY29kZWMyL2NvcmUvaW5jbHVkZS9tZWRpYS9zdGFnZWZyaWdodC9jb2RlYzIvMS4wL0lucHV0U3VyZmFjZS5oIGIvbWVkaWEvY29kZWMyL2NvcmUvaW5jbHVkZS9tZWRpYS9zdGFnZWZyaWdodC9jb2RlYzIvMS4wL0lucHV0U3VyZmFjZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIwMTFhMDYKLS0tIC9kZXYvbnVsbAorKysgYi9tZWRpYS9jb2RlYzIvY29yZS9pbmNsdWRlL21lZGlhL3N0YWdlZnJpZ2h0L2NvZGVjMi8xLjAvSW5wdXRTdXJmYWNlLmgKQEAgLTAsMCArMSw3MSBAQAorLyoKKyAqIENvcHlyaWdodCAyMDE4LCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCisKKyNpZm5kZWYgQU5EUk9JRF9IQVJEV0FSRV9NRURJQV9DMl9WMV8wX0lOUFVUX1NVUkZBQ0VfSAorI2RlZmluZSBBTkRST0lEX0hBUkRXQVJFX01FRElBX0MyX1YxXzBfSU5QVVRfU1VSRkFDRV9ICisKKyNpbmNsdWRlIDxtZW1vcnk+CisKKyNpbmNsdWRlIDxDMkNvbXBvbmVudC5oPgorI2luY2x1ZGUgPG1lZGlhL3N0YWdlZnJpZ2h0L2JxaGVscGVyL1dHcmFwaGljQnVmZmVyUHJvZHVjZXIuaD4KKyNpbmNsdWRlIDxtZWRpYS9zdGFnZWZyaWdodC9jb2RlYzIvMS4wL0lucHV0U3VyZmFjZUNvbm5lY3Rpb24uaD4KKworbmFtZXNwYWNlIGFuZHJvaWQgeworCitjbGFzcyBHcmFwaGljQnVmZmVyU291cmNlOworCituYW1lc3BhY2UgaGFyZHdhcmUgeworbmFtZXNwYWNlIG1lZGlhIHsKK25hbWVzcGFjZSBjMiB7CituYW1lc3BhY2UgVjFfMCB7CituYW1lc3BhY2UgaW1wbGVtZW50YXRpb24geworCit1c2luZyA6OmFuZHJvaWQ6OnNwOworCit0eXBlZGVmIDo6YW5kcm9pZDo6aGFyZHdhcmU6OmdyYXBoaWNzOjpidWZmZXJxdWV1ZTo6VjFfMDo6SUdyYXBoaWNCdWZmZXJQcm9kdWNlcgorICAgICAgICBIR3JhcGhpY0J1ZmZlclByb2R1Y2VyOwordHlwZWRlZiA6OmFuZHJvaWQ6OklHcmFwaGljQnVmZmVyUHJvZHVjZXIgQkdyYXBoaWNCdWZmZXJQcm9kdWNlcjsKKworLy8gVE9ETzogOjphbmRyb2lkOjpUV0dyYXBoaWNCdWZmZXJQcm9kdWNlcjxJSW5wdXRTdXJmYWNlPgordHlwZWRlZiA6OmFuZHJvaWQ6OlRXR3JhcGhpY0J1ZmZlclByb2R1Y2VyPEhHcmFwaGljQnVmZmVyUHJvZHVjZXI+IElucHV0U3VyZmFjZUJhc2U7CisKK2NsYXNzIElucHV0U3VyZmFjZSA6IHB1YmxpYyBJbnB1dFN1cmZhY2VCYXNlIHsKK3B1YmxpYzoKKyAgICB2aXJ0dWFsIH5JbnB1dFN1cmZhY2UoKSA9IGRlZmF1bHQ7CisKKyAgICAvLyBNZXRob2RzIGZyb20gSUlucHV0U3VyZmFjZQorICAgIHNwPElucHV0U3VyZmFjZUNvbm5lY3Rpb24+IGNvbm5lY3RUb0NvbXBvbmVudCgKKyAgICAgICAgICAgIGNvbnN0IHN0ZDo6c2hhcmVkX3B0cjw6OkMyQ29tcG9uZW50PiAmY29tcCk7CisgICAgLy8gVE9ETzogaW50ZigpCisKKyAgICBzdGF0aWMgc3A8SW5wdXRTdXJmYWNlPiBDcmVhdGUoKTsKKworcHJpdmF0ZToKKyAgICBJbnB1dFN1cmZhY2UoCisgICAgICAgICAgICBjb25zdCBzcDxCR3JhcGhpY0J1ZmZlclByb2R1Y2VyPiAmYmFzZSwKKyAgICAgICAgICAgIGNvbnN0IHNwPDo6YW5kcm9pZDo6R3JhcGhpY0J1ZmZlclNvdXJjZT4gJnNvdXJjZSk7CisKKyAgICBzcDw6OmFuZHJvaWQ6OkdyYXBoaWNCdWZmZXJTb3VyY2U+IG1Tb3VyY2U7Cit9OworCit9ICAvLyBuYW1lc3BhY2UgaW1wbGVtZW50YXRpb24KK30gIC8vIG5hbWVzcGFjZSBWMV8wCit9ICAvLyBuYW1lc3BhY2UgYzIKK30gIC8vIG5hbWVzcGFjZSBtZWRpYQorfSAgLy8gbmFtZXNwYWNlIGhhcmR3YXJlCit9ICAvLyBuYW1lc3BhY2UgYW5kcm9pZAorCisjZW5kaWYgIC8vIEFORFJPSURfSEFSRFdBUkVfTUVESUFfQzJfVjFfMF9JTlBVVF9TVVJGQUNFX0gKZGlmZiAtLWdpdCBhL21lZGlhL2NvZGVjMi9jb3JlL2luY2x1ZGUvbWVkaWEvc3RhZ2VmcmlnaHQvY29kZWMyLzEuMC9JbnB1dFN1cmZhY2VDb25uZWN0aW9uLmggYi9tZWRpYS9jb2RlYzIvY29yZS9pbmNsdWRlL21lZGlhL3N0YWdlZnJpZ2h0L2NvZGVjMi8xLjAvSW5wdXRTdXJmYWNlQ29ubmVjdGlvbi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIyNGE0MTYKLS0tIC9kZXYvbnVsbAorKysgYi9tZWRpYS9jb2RlYzIvY29yZS9pbmNsdWRlL21lZGlhL3N0YWdlZnJpZ2h0L2NvZGVjMi8xLjAvSW5wdXRTdXJmYWNlQ29ubmVjdGlvbi5oCkBAIC0wLDAgKzEsNjcgQEAKKy8qCisgKiBDb3B5cmlnaHQgMjAxOCwgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworCisjaWZuZGVmIEFORFJPSURfSEFSRFdBUkVfTUVESUFfQzJfVjFfMF9JTlBVVF9TVVJGQUNFX0NPTk5FQ1RJT05fSAorI2RlZmluZSBBTkRST0lEX0hBUkRXQVJFX01FRElBX0MyX1YxXzBfSU5QVVRfU1VSRkFDRV9DT05ORUNUSU9OX0gKKworI2luY2x1ZGUgPG1lbW9yeT4KKworI2luY2x1ZGUgPEMyQ29tcG9uZW50Lmg+CisjaW5jbHVkZSA8bWVkaWEvc3RhZ2VmcmlnaHQvYnFoZWxwZXIvR3JhcGhpY0J1ZmZlclNvdXJjZS5oPgorI2luY2x1ZGUgPG1lZGlhL3N0YWdlZnJpZ2h0L2JxaGVscGVyL1dHcmFwaGljQnVmZmVyUHJvZHVjZXIuaD4KKyNpbmNsdWRlIDxtZWRpYS9zdGFnZWZyaWdodC9jb2RlYzIvMS4wL0lucHV0U3VyZmFjZUNvbm5lY3Rpb24uaD4KKworbmFtZXNwYWNlIGFuZHJvaWQgeworbmFtZXNwYWNlIGhhcmR3YXJlIHsKK25hbWVzcGFjZSBtZWRpYSB7CituYW1lc3BhY2UgYzIgeworbmFtZXNwYWNlIFYxXzAgeworbmFtZXNwYWNlIGltcGxlbWVudGF0aW9uIHsKKworLy8gVE9ETzogaW5oZXJpdCBmcm9tIElJbnB1dFN1cmZhY2VDb25uZWN0aW9uCitjbGFzcyBJbnB1dFN1cmZhY2VDb25uZWN0aW9uIDogcHVibGljIFJlZkJhc2UgeworcHVibGljOgorICAgIHZpcnR1YWwgfklucHV0U3VyZmFjZUNvbm5lY3Rpb24oKTsKKworICAgIC8vIEZyb20gSUlucHV0U3VyZmFjZUNvbm5lY3Rpb24KKyAgICB2b2lkIGRpc2Nvbm5lY3QoKTsKKworcHJpdmF0ZToKKyAgICBmcmllbmQgY2xhc3MgSW5wdXRTdXJmYWNlOworCisgICAgLy8gRm9yIElucHV0U3VyZmFjZQorICAgIElucHV0U3VyZmFjZUNvbm5lY3Rpb24oCisgICAgICAgICAgICBjb25zdCBzcDxHcmFwaGljQnVmZmVyU291cmNlPiAmc291cmNlLCBjb25zdCBzdGQ6OnNoYXJlZF9wdHI8QzJDb21wb25lbnQ+ICZjb21wKTsKKyAgICBib29sIGluaXQoKTsKKworICAgIElucHV0U3VyZmFjZUNvbm5lY3Rpb24oKSA9IGRlbGV0ZTsKKworICAgIGNsYXNzIEltcGw7CisKKyAgICBzcDxHcmFwaGljQnVmZmVyU291cmNlPiBtU291cmNlOworICAgIHNwPEltcGw+IG1JbXBsOworCisgICAgRElTQUxMT1dfRVZJTF9DT05TVFJVQ1RPUlMoSW5wdXRTdXJmYWNlQ29ubmVjdGlvbik7Cit9OworCit9ICAvLyBuYW1lc3BhY2UgaW1wbGVtZW50YXRpb24KK30gIC8vIG5hbWVzcGFjZSBWMV8wCit9ICAvLyBuYW1lc3BhY2UgYzIKK30gIC8vIG5hbWVzcGFjZSBtZWRpYQorfSAgLy8gbmFtZXNwYWNlIGhhcmR3YXJlCit9ICAvLyBuYW1lc3BhY2UgYW5kcm9pZAorCisjZW5kaWYgIC8vIEFORFJPSURfSEFSRFdBUkVfTUVESUFfQzJfVjFfMF9JTlBVVF9TVVJGQUNFX0NPTk5FQ1RJT05fSApkaWZmIC0tZ2l0IGEvbWVkaWEvY29kZWMyL2RvY3MvZG94eWZpbHRlci5zaCBiL21lZGlhL2NvZGVjMi9kb2NzL2RveHlmaWx0ZXIuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uZDgxMzE1MwotLS0gL2Rldi9udWxsCisrKyBiL21lZGlhL2NvZGVjMi9kb2NzL2RveHlmaWx0ZXIuc2gKQEAgLTAsMCArMSwxMDAgQEAKKyMhL3Vzci9iaW4vZW52IHB5dGhvbjMKK2ltcG9ydCByZSwgc3lzCisKK2dsb2JhbCBpbl9jb21tZW50LCBjdXJyZW50LCBpbmRlbnQsIGhvbGQKK2luX2NvbW1lbnQsIGN1cnJlbnQsIGluZGVudCwgaG9sZCA9IEZhbHNlLCBOb25lLCAnJywgW10KKworY2xhc3MgQ2hhbmdlQ1N0eWxlQ29tbWVudHNUb0RveHk6CisgICAgZGVmIGR1bXBfaG9sZCgpOgorICAgICAgICBnbG9iYWwgaG9sZAorICAgICAgICBmb3IgaCBpbiBob2xkOgorICAgICAgICAgICAgcHJpbnQoaCwgZW5kPScnKQorICAgICAgICBob2xkWzpdID0gW10KKworICAgIGRlZiBkb3h5X2hvbGQoKToKKyAgICAgICAgZ2xvYmFsIGN1cnJlbnQsIGhvbGQKKyAgICAgICAgaWYgY3VycmVudCA9PSAnLy8nOgorICAgICAgICAgICAgZm9yIGggaW4gaG9sZDoKKyAgICAgICAgICAgICAgICBwcmludChyZS5zdWIocideKCAqLy8oPyEvKSknLCByJ1wxLycsIGgpLCBlbmQ9JycpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBmaXJzdCA9IFRydWUKKyAgICAgICAgICAgIGZvciBoIGluIGhvbGQ6CisgICAgICAgICAgICAgICAgaWYgZmlyc3Q6CisgICAgICAgICAgICAgICAgICAgIGggPSByZS5zdWIocideKCAqL1sqXSg/IVsqXSkpJywgcidcMSonLCBoKQorICAgICAgICAgICAgICAgICAgICBmaXJzdCA9IEZhbHNlCisgICAgICAgICAgICAgICAgcHJpbnQoaCwgZW5kPScnKQorICAgICAgICBob2xkWzpdID0gW10KKworICAgIGRlZiBwcm9jZXNzX2NvbW1lbnQodCwgaW5kLCBsaW5lKToKKyAgICAgICAgZ2xvYmFsIGN1cnJlbnQsIGluZGVudCwgaG9sZAorICAgICAgICBpZiB0ICE9IGN1cnJlbnQgb3IgaW5kIG5vdCBpbiAoaW5kZW50LCBpbmRlbnQgKyAnICcpOgorICAgICAgICAgICAgZHVtcF9ob2xkKCkKKyAgICAgICAgICAgIGN1cnJlbnQsIGluZGVudCA9IHQsIGluZAorICAgICAgICBob2xkLmFwcGVuZChsaW5lKQorCisgICAgZGVmIHByb2Nlc3NfbGluZShpbmQsIGxpbmUpOgorICAgICAgICBnbG9iYWwgY3VycmVudCwgaW5kZW50CisgICAgICAgIGlmIGluZCBpbiAoaW5kZW50LCAnJyk6CisgICAgICAgICAgICBkb3h5X2hvbGQoKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgZHVtcF9ob2xkKCkKKyAgICAgICAgY3VycmVudCwgaW5kZW50ID0gTm9uZSwgTm9uZQorICAgICAgICBwcmludChsaW5lLCBlbmQ9JycpCisKKyAgICBkZWYgcHJvY2VzcyhzZWxmLCBpbnB1dCwgcGF0aCk6CisgICAgICAgIGZvciBsaW5lIGluIGlucHV0OgorICAgICAgICAgICAgaW5kID0gcmUubWF0Y2gocideKCAqKScsIGxpbmUpLmdyb3VwKDEpCisgICAgICAgICAgICBpZiBpbl9jb21tZW50OgorICAgICAgICAgICAgICAgICMgVE9ETzogdGhpcyBpcyBub3QgcXVpdGUgcmlnaHQsIGJ1dCBnb29kIGVub3VnaAorICAgICAgICAgICAgICAgIG0gPSByZS5tYXRjaChyJ14gKlsqXS8nLCBsaW5lKQorICAgICAgICAgICAgICAgIGlmIG06CisgICAgICAgICAgICAgICAgICAgIHByb2Nlc3NfY29tbWVudCgnLyonLCBpbmQsIGxpbmUpCisgICAgICAgICAgICAgICAgICAgIGluX2NvbW1lbnQgPSBGYWxzZQorICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgIHByb2Nlc3NfY29tbWVudCgnLyonLCBpbmQsIGxpbmUpCisgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgIG0gPSByZS5tYXRjaChyJ14gKi8vJywgbGluZSkKKyAgICAgICAgICAgIGlmIG06CisgICAgICAgICAgICAgICAgIyBvbmUtbGluZSBjb21tZW50CisgICAgICAgICAgICAgICAgcHJvY2Vzc19jb21tZW50KCcvLycsIGluZCwgbGluZSkKKyAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgbSA9IHJlLm1hdGNoKHInXiAqL1sqXScsIGxpbmUpCisgICAgICAgICAgICBpZiBtOgorICAgICAgICAgICAgICAgICMgbXVsdGktbGluZSBjb21tZW50CisgICAgICAgICAgICAgICAgcHJvY2Vzc19jb21tZW50KCcvKicsIGluZCwgbGluZSkKKyAgICAgICAgICAgICAgICAjIFRPRE86IHRoaXMgaXMgbm90IHF1aXRlIHJpZ2h0LCBidXQgZ29vZCBlbm91Z2gKKyAgICAgICAgICAgICAgICBpbl9jb21tZW50ID0gbm90IHJlLm1hdGNoKHInXiAqWypdLycsIGxpbmUpCisgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgIHByb2Nlc3NfbGluZShpbmQsIGxpbmUpCisKK2NsYXNzIEF1dG9Hcm91cDoKKyAgICBkZWYgcHJvY2VzcyhzZWxmLCBpbnB1dCwgcGF0aCk6CisgICAgICAgIGlmICcvY29kZWMyL2luY2x1ZGUvJyBpbiBwYXRoOgorICAgICAgICAgICAgZ3JvdXAgPSAnQVBJIENvZGVjMiBBUEknCisgICAgICAgIGVsaWYgRmFsc2U6CisgICAgICAgICAgICByZXR1cm4KKyAgICAgICAgZWxpZiAnL2NvZGVjMi92bmRrLycgaW4gcGF0aDoKKyAgICAgICAgICAgIGdyb3VwID0gJ1ZOREsgUGxhdGZvcm0gcHJvdmlkZWQgZ2x1ZScKKyAgICAgICAgZWxpZiAnL2NvZGVjMi90ZXN0cy8nIGluIHBhdGg6CisgICAgICAgICAgICBncm91cCA9ICdUZXN0cyBVbml0IHRlc3RzJworICAgICAgICBlbHNlOgorICAgICAgICAgICAgZ3JvdXAgPSAnUmFuZG9tIE1pc2MuIHNhbmRib3gnCisKKyAgICAgICAgcHJpbnQoJyN1bmRlZiBfX0FQUExFX18nKQorCisgICAgICAgIGZvciBsaW5lIGluIGlucHV0OgorICAgICAgICAgICAgaWYgcmUubWF0Y2gocidebmFtZXNwYWNlIGFuZHJvaWQgeycsIGxpbmUpOgorICAgICAgICAgICAgICAgIHByaW50KGxpbmUsIGVuZD0nJykKKyAgICAgICAgICAgICAgICBwcmludCgpCisgICAgICAgICAgICAgICAgcHJpbnQocicvLy8gXGFkZHRvZ3JvdXAge30nLmZvcm1hdChncm91cCkpCisgICAgICAgICAgICAgICAgcHJpbnQocicvLy8gQHsnKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICBlbGlmIHJlLm1hdGNoKHInXn0gKy8vICtuYW1lc3BhY2UnLCBsaW5lKToKKyAgICAgICAgICAgICAgICBwcmludChyJy8vLyBAfScpCisgICAgICAgICAgICAgICAgcHJpbnQoKQorICAgICAgICAgICAgcHJpbnQobGluZSwgZW5kPScnKQorCitQID0gQXV0b0dyb3VwKCkKK2ZvciBwYXRoIGluIHN5cy5hcmd2WzE6XToKKyAgICB3aXRoIG9wZW4ocGF0aCwgJ3J0JykgYXMgaW5wdXQ6CisgICAgICAgIFAucHJvY2VzcyhpbnB1dCwgcGF0aCkKZGlmZiAtLWdpdCBhL21lZGlhL2NvZGVjMi9kb2NzL2RveHlnZW4uY29uZmlnIGIvbWVkaWEvY29kZWMyL2RvY3MvZG94eWdlbi5jb25maWcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWMzYmVhMwotLS0gL2Rldi9udWxsCisrKyBiL21lZGlhL2NvZGVjMi9kb2NzL2RveHlnZW4uY29uZmlnCkBAIC0wLDAgKzEsMjQ0NiBAQAorIyBEb3h5ZmlsZSAxLjguMTEKKworIyBUaGlzIGZpbGUgZGVzY3JpYmVzIHRoZSBzZXR0aW5ncyB0byBiZSB1c2VkIGJ5IHRoZSBkb2N1bWVudGF0aW9uIHN5c3RlbQorIyBkb3h5Z2VuICh3d3cuZG94eWdlbi5vcmcpIGZvciBhIHByb2plY3QuCisjCisjIEFsbCB0ZXh0IGFmdGVyIGEgZG91YmxlIGhhc2ggKCMjKSBpcyBjb25zaWRlcmVkIGEgY29tbWVudCBhbmQgaXMgcGxhY2VkIGluCisjIGZyb250IG9mIHRoZSBUQUcgaXQgaXMgcHJlY2VkaW5nLgorIworIyBBbGwgdGV4dCBhZnRlciBhIHNpbmdsZSBoYXNoICgjKSBpcyBjb25zaWRlcmVkIGEgY29tbWVudCBhbmQgd2lsbCBiZSBpZ25vcmVkLgorIyBUaGUgZm9ybWF0IGlzOgorIyBUQUcgPSB2YWx1ZSBbdmFsdWUsIC4uLl0KKyMgRm9yIGxpc3RzLCBpdGVtcyBjYW4gYWxzbyBiZSBhcHBlbmRlZCB1c2luZzoKKyMgVEFHICs9IHZhbHVlIFt2YWx1ZSwgLi4uXQorIyBWYWx1ZXMgdGhhdCBjb250YWluIHNwYWNlcyBzaG91bGQgYmUgcGxhY2VkIGJldHdlZW4gcXVvdGVzIChcIiBcIikuCisKKyMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgUHJvamVjdCByZWxhdGVkIGNvbmZpZ3VyYXRpb24gb3B0aW9ucworIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisjIFRoaXMgdGFnIHNwZWNpZmllcyB0aGUgZW5jb2RpbmcgdXNlZCBmb3IgYWxsIGNoYXJhY3RlcnMgaW4gdGhlIGNvbmZpZyBmaWxlCisjIHRoYXQgZm9sbG93LiBUaGUgZGVmYXVsdCBpcyBVVEYtOCB3aGljaCBpcyBhbHNvIHRoZSBlbmNvZGluZyB1c2VkIGZvciBhbGwgdGV4dAorIyBiZWZvcmUgdGhlIGZpcnN0IG9jY3VycmVuY2Ugb2YgdGhpcyB0YWcuIERveHlnZW4gdXNlcyBsaWJpY29udiAob3IgdGhlIGljb252CisjIGJ1aWx0IGludG8gbGliYykgZm9yIHRoZSB0cmFuc2NvZGluZy4gU2VlIGh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS9saWJpY29udgorIyBmb3IgdGhlIGxpc3Qgb2YgcG9zc2libGUgZW5jb2RpbmdzLgorIyBUaGUgZGVmYXVsdCB2YWx1ZSBpczogVVRGLTguCisKK0RPWFlGSUxFX0VOQ09ESU5HICAgICAgPSBVVEYtOAorCisjIFRoZSBQUk9KRUNUX05BTUUgdGFnIGlzIGEgc2luZ2xlIHdvcmQgKG9yIGEgc2VxdWVuY2Ugb2Ygd29yZHMgc3Vycm91bmRlZCBieQorIyBkb3VibGUtcXVvdGVzLCB1bmxlc3MgeW91IGFyZSB1c2luZyBEb3h5d2l6YXJkKSB0aGF0IHNob3VsZCBpZGVudGlmeSB0aGUKKyMgcHJvamVjdCBmb3Igd2hpY2ggdGhlIGRvY3VtZW50YXRpb24gaXMgZ2VuZXJhdGVkLiBUaGlzIG5hbWUgaXMgdXNlZCBpbiB0aGUKKyMgdGl0bGUgb2YgbW9zdCBnZW5lcmF0ZWQgcGFnZXMgYW5kIGluIGEgZmV3IG90aGVyIHBsYWNlcy4KKyMgVGhlIGRlZmF1bHQgdmFsdWUgaXM6IE15IFByb2plY3QuCisKK1BST0pFQ1RfTkFNRSAgICAgICAgICAgPSBDb2RlYzIKKworIyBUaGUgUFJPSkVDVF9OVU1CRVIgdGFnIGNhbiBiZSB1c2VkIHRvIGVudGVyIGEgcHJvamVjdCBvciByZXZpc2lvbiBudW1iZXIuIFRoaXMKKyMgY291bGQgYmUgaGFuZHkgZm9yIGFyY2hpdmluZyB0aGUgZ2VuZXJhdGVkIGRvY3VtZW50YXRpb24gb3IgaWYgc29tZSB2ZXJzaW9uCisjIGNvbnRyb2wgc3lzdGVtIGlzIHVzZWQuCisKK1BST0pFQ1RfTlVNQkVSICAgICAgICAgPSAKKworIyBVc2luZyB0aGUgUFJPSkVDVF9CUklFRiB0YWcgb25lIGNhbiBwcm92aWRlIGFuIG9wdGlvbmFsIG9uZSBsaW5lIGRlc2NyaXB0aW9uCisjIGZvciBhIHByb2plY3QgdGhhdCBhcHBlYXJzIGF0IHRoZSB0b3Agb2YgZWFjaCBwYWdlIGFuZCBzaG91bGQgZ2l2ZSB2aWV3ZXIgYQorIyBxdWljayBpZGVhIGFib3V0IHRoZSBwdXJwb3NlIG9mIHRoZSBwcm9qZWN0LiBLZWVwIHRoZSBkZXNjcmlwdGlvbiBzaG9ydC4KKworUFJPSkVDVF9CUklFRiAgICAgICAgICA9IAorCisjIFdpdGggdGhlIFBST0pFQ1RfTE9HTyB0YWcgb25lIGNhbiBzcGVjaWZ5IGEgbG9nbyBvciBhbiBpY29uIHRoYXQgaXMgaW5jbHVkZWQKKyMgaW4gdGhlIGRvY3VtZW50YXRpb24uIFRoZSBtYXhpbXVtIGhlaWdodCBvZiB0aGUgbG9nbyBzaG91bGQgbm90IGV4Y2VlZCA1NQorIyBwaXhlbHMgYW5kIHRoZSBtYXhpbXVtIHdpZHRoIHNob3VsZCBub3QgZXhjZWVkIDIwMCBwaXhlbHMuIERveHlnZW4gd2lsbCBjb3B5CisjIHRoZSBsb2dvIHRvIHRoZSBvdXRwdXQgZGlyZWN0b3J5LgorCitQUk9KRUNUX0xPR08gICAgICAgICAgID0gCisKKyMgVGhlIE9VVFBVVF9ESVJFQ1RPUlkgdGFnIGlzIHVzZWQgdG8gc3BlY2lmeSB0aGUgKHJlbGF0aXZlIG9yIGFic29sdXRlKSBwYXRoCisjIGludG8gd2hpY2ggdGhlIGdlbmVyYXRlZCBkb2N1bWVudGF0aW9uIHdpbGwgYmUgd3JpdHRlbi4gSWYgYSByZWxhdGl2ZSBwYXRoIGlzCisjIGVudGVyZWQsIGl0IHdpbGwgYmUgcmVsYXRpdmUgdG8gdGhlIGxvY2F0aW9uIHdoZXJlIGRveHlnZW4gd2FzIHN0YXJ0ZWQuIElmCisjIGxlZnQgYmxhbmsgdGhlIGN1cnJlbnQgZGlyZWN0b3J5IHdpbGwgYmUgdXNlZC4KKworT1VUUFVUX0RJUkVDVE9SWSAgICAgICA9IG91dC90YXJnZXQvY29tbW9uL2RvY3MvY29kZWMyL2FwaQorCisjIElmIHRoZSBDUkVBVEVfU1VCRElSUyB0YWcgaXMgc2V0IHRvIFlFUyB0aGVuIGRveHlnZW4gd2lsbCBjcmVhdGUgNDA5NiBzdWItCisjIGRpcmVjdG9yaWVzIChpbiAyIGxldmVscykgdW5kZXIgdGhlIG91dHB1dCBkaXJlY3Rvcnkgb2YgZWFjaCBvdXRwdXQgZm9ybWF0IGFuZAorIyB3aWxsIGRpc3RyaWJ1dGUgdGhlIGdlbmVyYXRlZCBmaWxlcyBvdmVyIHRoZXNlIGRpcmVjdG9yaWVzLiBFbmFibGluZyB0aGlzCisjIG9wdGlvbiBjYW4gYmUgdXNlZnVsIHdoZW4gZmVlZGluZyBkb3h5Z2VuIGEgaHVnZSBhbW91bnQgb2Ygc291cmNlIGZpbGVzLCB3aGVyZQorIyBwdXR0aW5nIGFsbCBnZW5lcmF0ZWQgZmlsZXMgaW4gdGhlIHNhbWUgZGlyZWN0b3J5IHdvdWxkIG90aGVyd2lzZSBjYXVzZXMKKyMgcGVyZm9ybWFuY2UgcHJvYmxlbXMgZm9yIHRoZSBmaWxlIHN5c3RlbS4KKyMgVGhlIGRlZmF1bHQgdmFsdWUgaXM6IE5PLgorCitDUkVBVEVfU1VCRElSUyAgICAgICAgID0gTk8KKworIyBJZiB0aGUgQUxMT1dfVU5JQ09ERV9OQU1FUyB0YWcgaXMgc2V0IHRvIFlFUywgZG94eWdlbiB3aWxsIGFsbG93IG5vbi1BU0NJSQorIyBjaGFyYWN0ZXJzIHRvIGFwcGVhciBpbiB0aGUgbmFtZXMgb2YgZ2VuZXJhdGVkIGZpbGVzLiBJZiBzZXQgdG8gTk8sIG5vbi1BU0NJSQorIyBjaGFyYWN0ZXJzIHdpbGwgYmUgZXNjYXBlZCwgZm9yIGV4YW1wbGUgX3hFM194ODFfeDg0IHdpbGwgYmUgdXNlZCBmb3IgVW5pY29kZQorIyBVKzMwNDQuCisjIFRoZSBkZWZhdWx0IHZhbHVlIGlzOiBOTy4KKworQUxMT1dfVU5JQ09ERV9OQU1FUyAgICA9IE5PCisKKyMgVGhlIE9VVFBVVF9MQU5HVUFHRSB0YWcgaXMgdXNlZCB0byBzcGVjaWZ5IHRoZSBsYW5ndWFnZSBpbiB3aGljaCBhbGwKKyMgZG9jdW1lbnRhdGlvbiBnZW5lcmF0ZWQgYnkgZG94eWdlbiBpcyB3cml0dGVuLiBEb3h5Z2VuIHdpbGwgdXNlIHRoaXMKKyMgaW5mb3JtYXRpb24gdG8gZ2VuZXJhdGUgYWxsIGNvbnN0YW50IG91dHB1dCBpbiB0aGUgcHJvcGVyIGxhbmd1YWdlLgorIyBQb3NzaWJsZSB2YWx1ZXMgYXJlOiBBZnJpa2FhbnMsIEFyYWJpYywgQXJtZW5pYW4sIEJyYXppbGlhbiwgQ2F0YWxhbiwgQ2hpbmVzZSwKKyMgQ2hpbmVzZS1UcmFkaXRpb25hbCwgQ3JvYXRpYW4sIEN6ZWNoLCBEYW5pc2gsIER1dGNoLCBFbmdsaXNoIChVbml0ZWQgU3RhdGVzKSwKKyMgRXNwZXJhbnRvLCBGYXJzaSAoUGVyc2lhbiksIEZpbm5pc2gsIEZyZW5jaCwgR2VybWFuLCBHcmVlaywgSHVuZ2FyaWFuLAorIyBJbmRvbmVzaWFuLCBJdGFsaWFuLCBKYXBhbmVzZSwgSmFwYW5lc2UtZW4gKEphcGFuZXNlIHdpdGggRW5nbGlzaCBtZXNzYWdlcyksCisjIEtvcmVhbiwgS29yZWFuLWVuIChLb3JlYW4gd2l0aCBFbmdsaXNoIG1lc3NhZ2VzKSwgTGF0dmlhbiwgTGl0aHVhbmlhbiwKKyMgTWFjZWRvbmlhbiwgTm9yd2VnaWFuLCBQZXJzaWFuIChGYXJzaSksIFBvbGlzaCwgUG9ydHVndWVzZSwgUm9tYW5pYW4sIFJ1c3NpYW4sCisjIFNlcmJpYW4sIFNlcmJpYW4tQ3lyaWxsaWMsIFNsb3ZhaywgU2xvdmVuZSwgU3BhbmlzaCwgU3dlZGlzaCwgVHVya2lzaCwKKyMgVWtyYWluaWFuIGFuZCBWaWV0bmFtZXNlLgorIyBUaGUgZGVmYXVsdCB2YWx1ZSBpczogRW5nbGlzaC4KKworT1VUUFVUX0xBTkdVQUdFICAgICAgICA9IEVuZ2xpc2gKKworIyBJZiB0aGUgQlJJRUZfTUVNQkVSX0RFU0MgdGFnIGlzIHNldCB0byBZRVMsIGRveHlnZW4gd2lsbCBpbmNsdWRlIGJyaWVmIG1lbWJlcgorIyBkZXNjcmlwdGlvbnMgYWZ0ZXIgdGhlIG1lbWJlcnMgdGhhdCBhcmUgbGlzdGVkIGluIHRoZSBmaWxlIGFuZCBjbGFzcworIyBkb2N1bWVudGF0aW9uIChzaW1pbGFyIHRvIEphdmFkb2MpLiBTZXQgdG8gTk8gdG8gZGlzYWJsZSB0aGlzLgorIyBUaGUgZGVmYXVsdCB2YWx1ZSBpczogWUVTLgorCitCUklFRl9NRU1CRVJfREVTQyAgICAgID0gWUVTCisKKyMgSWYgdGhlIFJFUEVBVF9CUklFRiB0YWcgaXMgc2V0IHRvIFlFUywgZG94eWdlbiB3aWxsIHByZXBlbmQgdGhlIGJyaWVmCisjIGRlc2NyaXB0aW9uIG9mIGEgbWVtYmVyIG9yIGZ1bmN0aW9uIGJlZm9yZSB0aGUgZGV0YWlsZWQgZGVzY3JpcHRpb24KKyMKKyMgTm90ZTogSWYgYm90aCBISURFX1VORE9DX01FTUJFUlMgYW5kIEJSSUVGX01FTUJFUl9ERVNDIGFyZSBzZXQgdG8gTk8sIHRoZQorIyBicmllZiBkZXNjcmlwdGlvbnMgd2lsbCBiZSBjb21wbGV0ZWx5IHN1cHByZXNzZWQuCisjIFRoZSBkZWZhdWx0IHZhbHVlIGlzOiBZRVMuCisKK1JFUEVBVF9CUklFRiAgICAgICAgICAgPSBZRVMKKworIyBUaGlzIHRhZyBpbXBsZW1lbnRzIGEgcXVhc2ktaW50ZWxsaWdlbnQgYnJpZWYgZGVzY3JpcHRpb24gYWJicmV2aWF0b3IgdGhhdCBpcworIyB1c2VkIHRvIGZvcm0gdGhlIHRleHQgaW4gdmFyaW91cyBsaXN0aW5ncy4gRWFjaCBzdHJpbmcgaW4gdGhpcyBsaXN0LCBpZiBmb3VuZAorIyBhcyB0aGUgbGVhZGluZyB0ZXh0IG9mIHRoZSBicmllZiBkZXNjcmlwdGlvbiwgd2lsbCBiZSBzdHJpcHBlZCBmcm9tIHRoZSB0ZXh0CisjIGFuZCB0aGUgcmVzdWx0LCBhZnRlciBwcm9jZXNzaW5nIHRoZSB3aG9sZSBsaXN0LCBpcyB1c2VkIGFzIHRoZSBhbm5vdGF0ZWQKKyMgdGV4dC4gT3RoZXJ3aXNlLCB0aGUgYnJpZWYgZGVzY3JpcHRpb24gaXMgdXNlZCBhcy1pcy4gSWYgbGVmdCBibGFuaywgdGhlCisjIGZvbGxvd2luZyB2YWx1ZXMgYXJlIHVzZWQgKCRuYW1lIGlzIGF1dG9tYXRpY2FsbHkgcmVwbGFjZWQgd2l0aCB0aGUgbmFtZSBvZgorIyB0aGUgZW50aXR5KTpUaGUgJG5hbWUgY2xhc3MsIFRoZSAkbmFtZSB3aWRnZXQsIFRoZSAkbmFtZSBmaWxlLCBpcywgcHJvdmlkZXMsCisjIHNwZWNpZmllcywgY29udGFpbnMsIHJlcHJlc2VudHMsIGEsIGFuIGFuZCB0aGUuCisKK0FCQlJFVklBVEVfQlJJRUYgICAgICAgPSAiVGhlICRuYW1lIGNsYXNzIiBcCisgICAgICAgICAgICAgICAgICAgICAgICAgIlRoZSAkbmFtZSB3aWRnZXQiIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAiVGhlICRuYW1lIGZpbGUiIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICBpcyBcCisgICAgICAgICAgICAgICAgICAgICAgICAgcHJvdmlkZXMgXAorICAgICAgICAgICAgICAgICAgICAgICAgIHNwZWNpZmllcyBcCisgICAgICAgICAgICAgICAgICAgICAgICAgY29udGFpbnMgXAorICAgICAgICAgICAgICAgICAgICAgICAgIHJlcHJlc2VudHMgXAorICAgICAgICAgICAgICAgICAgICAgICAgIGEgXAorICAgICAgICAgICAgICAgICAgICAgICAgIGFuIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICB0aGUKKworIyBJZiB0aGUgQUxXQVlTX0RFVEFJTEVEX1NFQyBhbmQgUkVQRUFUX0JSSUVGIHRhZ3MgYXJlIGJvdGggc2V0IHRvIFlFUyB0aGVuCisjIGRveHlnZW4gd2lsbCBnZW5lcmF0ZSBhIGRldGFpbGVkIHNlY3Rpb24gZXZlbiBpZiB0aGVyZSBpcyBvbmx5IGEgYnJpZWYKKyMgZGVzY3JpcHRpb24uCisjIFRoZSBkZWZhdWx0IHZhbHVlIGlzOiBOTy4KKworQUxXQVlTX0RFVEFJTEVEX1NFQyAgICA9IE5PCisKKyMgSWYgdGhlIElOTElORV9JTkhFUklURURfTUVNQiB0YWcgaXMgc2V0IHRvIFlFUywgZG94eWdlbiB3aWxsIHNob3cgYWxsCisjIGluaGVyaXRlZCBtZW1iZXJzIG9mIGEgY2xhc3MgaW4gdGhlIGRvY3VtZW50YXRpb24gb2YgdGhhdCBjbGFzcyBhcyBpZiB0aG9zZQorIyBtZW1iZXJzIHdlcmUgb3JkaW5hcnkgY2xhc3MgbWVtYmVycy4gQ29uc3RydWN0b3JzLCBkZXN0cnVjdG9ycyBhbmQgYXNzaWdubWVudAorIyBvcGVyYXRvcnMgb2YgdGhlIGJhc2UgY2xhc3NlcyB3aWxsIG5vdCBiZSBzaG93bi4KKyMgVGhlIGRlZmF1bHQgdmFsdWUgaXM6IE5PLgorCitJTkxJTkVfSU5IRVJJVEVEX01FTUIgID0gWUVTCisKKyMgSWYgdGhlIEZVTExfUEFUSF9OQU1FUyB0YWcgaXMgc2V0IHRvIFlFUywgZG94eWdlbiB3aWxsIHByZXBlbmQgdGhlIGZ1bGwgcGF0aAorIyBiZWZvcmUgZmlsZXMgbmFtZSBpbiB0aGUgZmlsZSBsaXN0IGFuZCBpbiB0aGUgaGVhZGVyIGZpbGVzLiBJZiBzZXQgdG8gTk8gdGhlCisjIHNob3J0ZXN0IHBhdGggdGhhdCBtYWtlcyB0aGUgZmlsZSBuYW1lIHVuaXF1ZSB3aWxsIGJlIHVzZWQKKyMgVGhlIGRlZmF1bHQgdmFsdWUgaXM6IFlFUy4KKworRlVMTF9QQVRIX05BTUVTICAgICAgICA9IFlFUworCisjIFRoZSBTVFJJUF9GUk9NX1BBVEggdGFnIGNhbiBiZSB1c2VkIHRvIHN0cmlwIGEgdXNlci1kZWZpbmVkIHBhcnQgb2YgdGhlIHBhdGguCisjIFN0cmlwcGluZyBpcyBvbmx5IGRvbmUgaWYgb25lIG9mIHRoZSBzcGVjaWZpZWQgc3RyaW5ncyBtYXRjaGVzIHRoZSBsZWZ0LWhhbmQKKyMgcGFydCBvZiB0aGUgcGF0aC4gVGhlIHRhZyBjYW4gYmUgdXNlZCB0byBzaG93IHJlbGF0aXZlIHBhdGhzIGluIHRoZSBmaWxlIGxpc3QuCisjIElmIGxlZnQgYmxhbmsgdGhlIGRpcmVjdG9yeSBmcm9tIHdoaWNoIGRveHlnZW4gaXMgcnVuIGlzIHVzZWQgYXMgdGhlIHBhdGggdG8KKyMgc3RyaXAuCisjCisjIE5vdGUgdGhhdCB5b3UgY2FuIHNwZWNpZnkgYWJzb2x1dGUgcGF0aHMgaGVyZSwgYnV0IGFsc28gcmVsYXRpdmUgcGF0aHMsIHdoaWNoCisjIHdpbGwgYmUgcmVsYXRpdmUgZnJvbSB0aGUgZGlyZWN0b3J5IHdoZXJlIGRveHlnZW4gaXMgc3RhcnRlZC4KKyMgVGhpcyB0YWcgcmVxdWlyZXMgdGhhdCB0aGUgdGFnIEZVTExfUEFUSF9OQU1FUyBpcyBzZXQgdG8gWUVTLgorCitTVFJJUF9GUk9NX1BBVEggICAgICAgID0gZnJhbWV3b3Jrcy9hdi9tZWRpYS9saWJzdGFnZWZyaWdodC9jb2RlYzIKKworIyBUaGUgU1RSSVBfRlJPTV9JTkNfUEFUSCB0YWcgY2FuIGJlIHVzZWQgdG8gc3RyaXAgYSB1c2VyLWRlZmluZWQgcGFydCBvZiB0aGUKKyMgcGF0aCBtZW50aW9uZWQgaW4gdGhlIGRvY3VtZW50YXRpb24gb2YgYSBjbGFzcywgd2hpY2ggdGVsbHMgdGhlIHJlYWRlciB3aGljaAorIyBoZWFkZXIgZmlsZSB0byBpbmNsdWRlIGluIG9yZGVyIHRvIHVzZSBhIGNsYXNzLiBJZiBsZWZ0IGJsYW5rIG9ubHkgdGhlIG5hbWUgb2YKKyMgdGhlIGhlYWRlciBmaWxlIGNvbnRhaW5pbmcgdGhlIGNsYXNzIGRlZmluaXRpb24gaXMgdXNlZC4gT3RoZXJ3aXNlIG9uZSBzaG91bGQKKyMgc3BlY2lmeSB0aGUgbGlzdCBvZiBpbmNsdWRlIHBhdGhzIHRoYXQgYXJlIG5vcm1hbGx5IHBhc3NlZCB0byB0aGUgY29tcGlsZXIKKyMgdXNpbmcgdGhlIC1JIGZsYWcuCisKK1NUUklQX0ZST01fSU5DX1BBVEggICAgPSAKKworIyBJZiB0aGUgU0hPUlRfTkFNRVMgdGFnIGlzIHNldCB0byBZRVMsIGRveHlnZW4gd2lsbCBnZW5lcmF0ZSBtdWNoIHNob3J0ZXIgKGJ1dAorIyBsZXNzIHJlYWRhYmxlKSBmaWxlIG5hbWVzLiBUaGlzIGNhbiBiZSB1c2VmdWwgaXMgeW91ciBmaWxlIHN5c3RlbXMgZG9lc24ndAorIyBzdXBwb3J0IGxvbmcgbmFtZXMgbGlrZSBvbiBET1MsIE1hYywgb3IgQ0QtUk9NLgorIyBUaGUgZGVmYXVsdCB2YWx1ZSBpczogTk8uCisKK1NIT1JUX05BTUVTICAgICAgICAgICAgPSBOTworCisjIElmIHRoZSBKQVZBRE9DX0FVVE9CUklFRiB0YWcgaXMgc2V0IHRvIFlFUyB0aGVuIGRveHlnZW4gd2lsbCBpbnRlcnByZXQgdGhlCisjIGZpcnN0IGxpbmUgKHVudGlsIHRoZSBmaXJzdCBkb3QpIG9mIGEgSmF2YWRvYy1zdHlsZSBjb21tZW50IGFzIHRoZSBicmllZgorIyBkZXNjcmlwdGlvbi4gSWYgc2V0IHRvIE5PLCB0aGUgSmF2YWRvYy1zdHlsZSB3aWxsIGJlaGF2ZSBqdXN0IGxpa2UgcmVndWxhciBRdC0KKyMgc3R5bGUgY29tbWVudHMgKHRodXMgcmVxdWlyaW5nIGFuIGV4cGxpY2l0IEBicmllZiBjb21tYW5kIGZvciBhIGJyaWVmCisjIGRlc2NyaXB0aW9uLikKKyMgVGhlIGRlZmF1bHQgdmFsdWUgaXM6IE5PLgorCitKQVZBRE9DX0FVVE9CUklFRiAgICAgID0gWUVTCisKKyMgSWYgdGhlIFFUX0FVVE9CUklFRiB0YWcgaXMgc2V0IHRvIFlFUyB0aGVuIGRveHlnZW4gd2lsbCBpbnRlcnByZXQgdGhlIGZpcnN0CisjIGxpbmUgKHVudGlsIHRoZSBmaXJzdCBkb3QpIG9mIGEgUXQtc3R5bGUgY29tbWVudCBhcyB0aGUgYnJpZWYgZGVzY3JpcHRpb24uIElmCisjIHNldCB0byBOTywgdGhlIFF0LXN0eWxlIHdpbGwgYmVoYXZlIGp1c3QgbGlrZSByZWd1bGFyIFF0LXN0eWxlIGNvbW1lbnRzICh0aHVzCisjIHJlcXVpcmluZyBhbiBleHBsaWNpdCBcYnJpZWYgY29tbWFuZCBmb3IgYSBicmllZiBkZXNjcmlwdGlvbi4pCisjIFRoZSBkZWZhdWx0IHZhbHVlIGlzOiBOTy4KKworUVRfQVVUT0JSSUVGICAgICAgICAgICA9IFlFUworCisjIFRoZSBNVUxUSUxJTkVfQ1BQX0lTX0JSSUVGIHRhZyBjYW4gYmUgc2V0IHRvIFlFUyB0byBtYWtlIGRveHlnZW4gdHJlYXQgYQorIyBtdWx0aS1saW5lIEMrKyBzcGVjaWFsIGNvbW1lbnQgYmxvY2sgKGkuZS4gYSBibG9jayBvZiAvLyEgb3IgLy8vIGNvbW1lbnRzKSBhcworIyBhIGJyaWVmIGRlc2NyaXB0aW9uLiBUaGlzIHVzZWQgdG8gYmUgdGhlIGRlZmF1bHQgYmVoYXZpb3IuIFRoZSBuZXcgZGVmYXVsdCBpcworIyB0byB0cmVhdCBhIG11bHRpLWxpbmUgQysrIGNvbW1lbnQgYmxvY2sgYXMgYSBkZXRhaWxlZCBkZXNjcmlwdGlvbi4gU2V0IHRoaXMKKyMgdGFnIHRvIFlFUyBpZiB5b3UgcHJlZmVyIHRoZSBvbGQgYmVoYXZpb3IgaW5zdGVhZC4KKyMKKyMgTm90ZSB0aGF0IHNldHRpbmcgdGhpcyB0YWcgdG8gWUVTIGFsc28gbWVhbnMgdGhhdCByYXRpb25hbCByb3NlIGNvbW1lbnRzIGFyZQorIyBub3QgcmVjb2duaXplZCBhbnkgbW9yZS4KKyMgVGhlIGRlZmF1bHQgdmFsdWUgaXM6IE5PLgorCitNVUxUSUxJTkVfQ1BQX0lTX0JSSUVGID0gTk8KKworIyBJZiB0aGUgSU5IRVJJVF9ET0NTIHRhZyBpcyBzZXQgdG8gWUVTIHRoZW4gYW4gdW5kb2N1bWVudGVkIG1lbWJlciBpbmhlcml0cyB0aGUKKyMgZG9jdW1lbnRhdGlvbiBmcm9tIGFueSBkb2N1bWVudGVkIG1lbWJlciB0aGF0IGl0IHJlLWltcGxlbWVudHMuCisjIFRoZSBkZWZhdWx0IHZhbHVlIGlzOiBZRVMuCisKK0lOSEVSSVRfRE9DUyAgICAgICAgICAgPSBZRVMKKworIyBJZiB0aGUgU0VQQVJBVEVfTUVNQkVSX1BBR0VTIHRhZyBpcyBzZXQgdG8gWUVTIHRoZW4gZG94eWdlbiB3aWxsIHByb2R1Y2UgYSBuZXcKKyMgcGFnZSBmb3IgZWFjaCBtZW1iZXIuIElmIHNldCB0byBOTywgdGhlIGRvY3VtZW50YXRpb24gb2YgYSBtZW1iZXIgd2lsbCBiZSBwYXJ0CisjIG9mIHRoZSBmaWxlL2NsYXNzL25hbWVzcGFjZSB0aGF0IGNvbnRhaW5zIGl0LgorIyBUaGUgZGVmYXVsdCB2YWx1ZSBpczogTk8uCisKK1NFUEFSQVRFX01FTUJFUl9QQUdFUyAgPSBOTworCisjIFRoZSBUQUJfU0laRSB0YWcgY2FuIGJlIHVzZWQgdG8gc2V0IHRoZSBudW1iZXIgb2Ygc3BhY2VzIGluIGEgdGFiLiBEb3h5Z2VuCisjIHVzZXMgdGhpcyB2YWx1ZSB0byByZXBsYWNlIHRhYnMgYnkgc3BhY2VzIGluIGNvZGUgZnJhZ21lbnRzLgorIyBNaW5pbXVtIHZhbHVlOiAxLCBtYXhpbXVtIHZhbHVlOiAxNiwgZGVmYXVsdCB2YWx1ZTogNC4KKworVEFCX1NJWkUgICAgICAgICAgICAgICA9IDQKKworIyBUaGlzIHRhZyBjYW4gYmUgdXNlZCB0byBzcGVjaWZ5IGEgbnVtYmVyIG9mIGFsaWFzZXMgdGhhdCBhY3QgYXMgY29tbWFuZHMgaW4KKyMgdGhlIGRvY3VtZW50YXRpb24uIEFuIGFsaWFzIGhhcyB0aGUgZm9ybToKKyMgbmFtZT12YWx1ZQorIyBGb3IgZXhhbXBsZSBhZGRpbmcKKyMgInNpZGVlZmZlY3Q9QHBhciBTaWRlIEVmZmVjdHM6XG4iCisjIHdpbGwgYWxsb3cgeW91IHRvIHB1dCB0aGUgY29tbWFuZCBcc2lkZWVmZmVjdCAob3IgQHNpZGVlZmZlY3QpIGluIHRoZQorIyBkb2N1bWVudGF0aW9uLCB3aGljaCB3aWxsIHJlc3VsdCBpbiBhIHVzZXItZGVmaW5lZCBwYXJhZ3JhcGggd2l0aCBoZWFkaW5nCisjICJTaWRlIEVmZmVjdHM6Ii4gWW91IGNhbiBwdXQgXG4ncyBpbiB0aGUgdmFsdWUgcGFydCBvZiBhbiBhbGlhcyB0byBpbnNlcnQKKyMgbmV3bGluZXMuCisKK0FMSUFTRVMgICAgICAgICAgICAgICAgPSAKKworIyBUaGlzIHRhZyBjYW4gYmUgdXNlZCB0byBzcGVjaWZ5IGEgbnVtYmVyIG9mIHdvcmQta2V5d29yZCBtYXBwaW5ncyAoVENMIG9ubHkpLgorIyBBIG1hcHBpbmcgaGFzIHRoZSBmb3JtICJuYW1lPXZhbHVlIi4gRm9yIGV4YW1wbGUgYWRkaW5nICJjbGFzcz1pdGNsOjpjbGFzcyIKKyMgd2lsbCBhbGxvdyB5b3UgdG8gdXNlIHRoZSBjb21tYW5kIGNsYXNzIGluIHRoZSBpdGNsOjpjbGFzcyBtZWFuaW5nLgorCitUQ0xfU1VCU1QgICAgICAgICAgICAgID0gCisKKyMgU2V0IHRoZSBPUFRJTUlaRV9PVVRQVVRfRk9SX0MgdGFnIHRvIFlFUyBpZiB5b3VyIHByb2plY3QgY29uc2lzdHMgb2YgQyBzb3VyY2VzCisjIG9ubHkuIERveHlnZW4gd2lsbCB0aGVuIGdlbmVyYXRlIG91dHB1dCB0aGF0IGlzIG1vcmUgdGFpbG9yZWQgZm9yIEMuIEZvcgorIyBpbnN0YW5jZSwgc29tZSBvZiB0aGUgbmFtZXMgdGhhdCBhcmUgdXNlZCB3aWxsIGJlIGRpZmZlcmVudC4gVGhlIGxpc3Qgb2YgYWxsCisjIG1lbWJlcnMgd2lsbCBiZSBvbWl0dGVkLCBldGMuCisjIFRoZSBkZWZhdWx0IHZhbHVlIGlzOiBOTy4KKworT1BUSU1JWkVfT1VUUFVUX0ZPUl9DICA9IE5PCisKKyMgU2V0IHRoZSBPUFRJTUlaRV9PVVRQVVRfSkFWQSB0YWcgdG8gWUVTIGlmIHlvdXIgcHJvamVjdCBjb25zaXN0cyBvZiBKYXZhIG9yCisjIFB5dGhvbiBzb3VyY2VzIG9ubHkuIERveHlnZW4gd2lsbCB0aGVuIGdlbmVyYXRlIG91dHB1dCB0aGF0IGlzIG1vcmUgdGFpbG9yZWQKKyMgZm9yIHRoYXQgbGFuZ3VhZ2UuIEZvciBpbnN0YW5jZSwgbmFtZXNwYWNlcyB3aWxsIGJlIHByZXNlbnRlZCBhcyBwYWNrYWdlcywKKyMgcXVhbGlmaWVkIHNjb3BlcyB3aWxsIGxvb2sgZGlmZmVyZW50LCBldGMuCisjIFRoZSBkZWZhdWx0IHZhbHVlIGlzOiBOTy4KKworT1BUSU1JWkVfT1VUUFVUX0pBVkEgICA9IE5PCisKKyMgU2V0IHRoZSBPUFRJTUlaRV9GT1JfRk9SVFJBTiB0YWcgdG8gWUVTIGlmIHlvdXIgcHJvamVjdCBjb25zaXN0cyBvZiBGb3J0cmFuCisjIHNvdXJjZXMuIERveHlnZW4gd2lsbCB0aGVuIGdlbmVyYXRlIG91dHB1dCB0aGF0IGlzIHRhaWxvcmVkIGZvciBGb3J0cmFuLgorIyBUaGUgZGVmYXVsdCB2YWx1ZSBpczogTk8uCisKK09QVElNSVpFX0ZPUl9GT1JUUkFOICAgPSBOTworCisjIFNldCB0aGUgT1BUSU1JWkVfT1VUUFVUX1ZIREwgdGFnIHRvIFlFUyBpZiB5b3VyIHByb2plY3QgY29uc2lzdHMgb2YgVkhETAorIyBzb3VyY2VzLiBEb3h5Z2VuIHdpbGwgdGhlbiBnZW5lcmF0ZSBvdXRwdXQgdGhhdCBpcyB0YWlsb3JlZCBmb3IgVkhETC4KKyMgVGhlIGRlZmF1bHQgdmFsdWUgaXM6IE5PLgorCitPUFRJTUlaRV9PVVRQVVRfVkhETCAgID0gTk8KKworIyBEb3h5Z2VuIHNlbGVjdHMgdGhlIHBhcnNlciB0byB1c2UgZGVwZW5kaW5nIG9uIHRoZSBleHRlbnNpb24gb2YgdGhlIGZpbGVzIGl0CisjIHBhcnNlcy4gV2l0aCB0aGlzIHRhZyB5b3UgY2FuIGFzc2lnbiB3aGljaCBwYXJzZXIgdG8gdXNlIGZvciBhIGdpdmVuCisjIGV4dGVuc2lvbi4gRG94eWdlbiBoYXMgYSBidWlsdC1pbiBtYXBwaW5nLCBidXQgeW91IGNhbiBvdmVycmlkZSBvciBleHRlbmQgaXQKKyMgdXNpbmcgdGhpcyB0YWcuIFRoZSBmb3JtYXQgaXMgZXh0PWxhbmd1YWdlLCB3aGVyZSBleHQgaXMgYSBmaWxlIGV4dGVuc2lvbiwgYW5kCisjIGxhbmd1YWdlIGlzIG9uZSBvZiB0aGUgcGFyc2VycyBzdXBwb3J0ZWQgYnkgZG94eWdlbjogSURMLCBKYXZhLCBKYXZhc2NyaXB0LAorIyBDIywgQywgQysrLCBELCBQSFAsIE9iamVjdGl2ZS1DLCBQeXRob24sIEZvcnRyYW4gKGZpeGVkIGZvcm1hdCBGb3J0cmFuOgorIyBGb3J0cmFuRml4ZWQsIGZyZWUgZm9ybWF0dGVkIEZvcnRyYW46IEZvcnRyYW5GcmVlLCB1bmtub3duIGZvcm1hdHRlZCBGb3J0cmFuOgorIyBGb3J0cmFuLiBJbiB0aGUgbGF0ZXIgY2FzZSB0aGUgcGFyc2VyIHRyaWVzIHRvIGd1ZXNzIHdoZXRoZXIgdGhlIGNvZGUgaXMgZml4ZWQKKyMgb3IgZnJlZSBmb3JtYXR0ZWQgY29kZSwgdGhpcyBpcyB0aGUgZGVmYXVsdCBmb3IgRm9ydHJhbiB0eXBlIGZpbGVzKSwgVkhETC4gRm9yCisjIGluc3RhbmNlIHRvIG1ha2UgZG94eWdlbiB0cmVhdCAuaW5jIGZpbGVzIGFzIEZvcnRyYW4gZmlsZXMgKGRlZmF1bHQgaXMgUEhQKSwKKyMgYW5kIC5mIGZpbGVzIGFzIEMgKGRlZmF1bHQgaXMgRm9ydHJhbiksIHVzZTogaW5jPUZvcnRyYW4gZj1DLgorIworIyBOb3RlOiBGb3IgZmlsZXMgd2l0aG91dCBleHRlbnNpb24geW91IGNhbiB1c2Ugbm9fZXh0ZW5zaW9uIGFzIGEgcGxhY2Vob2xkZXIuCisjCisjIE5vdGUgdGhhdCBmb3IgY3VzdG9tIGV4dGVuc2lvbnMgeW91IGFsc28gbmVlZCB0byBzZXQgRklMRV9QQVRURVJOUyBvdGhlcndpc2UKKyMgdGhlIGZpbGVzIGFyZSBub3QgcmVhZCBieSBkb3h5Z2VuLgorCitFWFRFTlNJT05fTUFQUElORyAgICAgID0gCisKKyMgSWYgdGhlIE1BUktET1dOX1NVUFBPUlQgdGFnIGlzIGVuYWJsZWQgdGhlbiBkb3h5Z2VuIHByZS1wcm9jZXNzZXMgYWxsIGNvbW1lbnRzCisjIGFjY29yZGluZyB0byB0aGUgTWFya2Rvd24gZm9ybWF0LCB3aGljaCBhbGxvd3MgZm9yIG1vcmUgcmVhZGFibGUKKyMgZG9jdW1lbnRhdGlvbi4gU2VlIGh0dHA6Ly9kYXJpbmdmaXJlYmFsbC5uZXQvcHJvamVjdHMvbWFya2Rvd24vIGZvciBkZXRhaWxzLgorIyBUaGUgb3V0cHV0IG9mIG1hcmtkb3duIHByb2Nlc3NpbmcgaXMgZnVydGhlciBwcm9jZXNzZWQgYnkgZG94eWdlbiwgc28geW91IGNhbgorIyBtaXggZG94eWdlbiwgSFRNTCwgYW5kIFhNTCBjb21tYW5kcyB3aXRoIE1hcmtkb3duIGZvcm1hdHRpbmcuIERpc2FibGUgb25seSBpbgorIyBjYXNlIG9mIGJhY2t3YXJkIGNvbXBhdGliaWxpdGllcyBpc3N1ZXMuCisjIFRoZSBkZWZhdWx0IHZhbHVlIGlzOiBZRVMuCisKK01BUktET1dOX1NVUFBPUlQgICAgICAgPSBZRVMKKworIyBXaGVuIGVuYWJsZWQgZG94eWdlbiB0cmllcyB0byBsaW5rIHdvcmRzIHRoYXQgY29ycmVzcG9uZCB0byBkb2N1bWVudGVkCisjIGNsYXNzZXMsIG9yIG5hbWVzcGFjZXMgdG8gdGhlaXIgY29ycmVzcG9uZGluZyBkb2N1bWVudGF0aW9uLiBTdWNoIGEgbGluayBjYW4KKyMgYmUgcHJldmVudGVkIGluIGluZGl2aWR1YWwgY2FzZXMgYnkgcHV0dGluZyBhICUgc2lnbiBpbiBmcm9udCBvZiB0aGUgd29yZCBvcgorIyBnbG9iYWxseSBieSBzZXR0aW5nIEFVVE9MSU5LX1NVUFBPUlQgdG8gTk8uCisjIFRoZSBkZWZhdWx0IHZhbHVlIGlzOiBZRVMuCisKK0FVVE9MSU5LX1NVUFBPUlQgICAgICAgPSBZRVMKKworIyBJZiB5b3UgdXNlIFNUTCBjbGFzc2VzIChpLmUuIHN0ZDo6c3RyaW5nLCBzdGQ6OnZlY3RvciwgZXRjLikgYnV0IGRvIG5vdCB3YW50CisjIHRvIGluY2x1ZGUgKGEgdGFnIGZpbGUgZm9yKSB0aGUgU1RMIHNvdXJjZXMgYXMgaW5wdXQsIHRoZW4geW91IHNob3VsZCBzZXQgdGhpcworIyB0YWcgdG8gWUVTIGluIG9yZGVyIHRvIGxldCBkb3h5Z2VuIG1hdGNoIGZ1bmN0aW9ucyBkZWNsYXJhdGlvbnMgYW5kCisjIGRlZmluaXRpb25zIHdob3NlIGFyZ3VtZW50cyBjb250YWluIFNUTCBjbGFzc2VzIChlLmcuIGZ1bmMoc3RkOjpzdHJpbmcpOworIyB2ZXJzdXMgZnVuYyhzdGQ6OnN0cmluZykge30pLiBUaGlzIGFsc28gbWFrZSB0aGUgaW5oZXJpdGFuY2UgYW5kIGNvbGxhYm9yYXRpb24KKyMgZGlhZ3JhbXMgdGhhdCBpbnZvbHZlIFNUTCBjbGFzc2VzIG1vcmUgY29tcGxldGUgYW5kIGFjY3VyYXRlLgorIyBUaGUgZGVmYXVsdCB2YWx1ZSBpczogTk8uCisKK0JVSUxUSU5fU1RMX1NVUFBPUlQgICAgPSBZRVMKKworIyBJZiB5b3UgdXNlIE1pY3Jvc29mdCdzIEMrKy9DTEkgbGFuZ3VhZ2UsIHlvdSBzaG91bGQgc2V0IHRoaXMgb3B0aW9uIHRvIFlFUyB0bworIyBlbmFibGUgcGFyc2luZyBzdXBwb3J0LgorIyBUaGUgZGVmYXVsdCB2YWx1ZSBpczogTk8uCisKK0NQUF9DTElfU1VQUE9SVCAgICAgICAgPSBOTworCisjIFNldCB0aGUgU0lQX1NVUFBPUlQgdGFnIHRvIFlFUyBpZiB5b3VyIHByb2plY3QgY29uc2lzdHMgb2Ygc2lwIChzZWU6CisjIGh0dHA6Ly93d3cucml2ZXJiYW5rY29tcHV0aW5nLmNvLnVrL3NvZnR3YXJlL3NpcC9pbnRybykgc291cmNlcyBvbmx5LiBEb3h5Z2VuCisjIHdpbGwgcGFyc2UgdGhlbSBsaWtlIG5vcm1hbCBDKysgYnV0IHdpbGwgYXNzdW1lIGFsbCBjbGFzc2VzIHVzZSBwdWJsaWMgaW5zdGVhZAorIyBvZiBwcml2YXRlIGluaGVyaXRhbmNlIHdoZW4gbm8gZXhwbGljaXQgcHJvdGVjdGlvbiBrZXl3b3JkIGlzIHByZXNlbnQuCisjIFRoZSBkZWZhdWx0IHZhbHVlIGlzOiBOTy4KKworU0lQX1NVUFBPUlQgICAgICAgICAgICA9IE5PCisKKyMgRm9yIE1pY3Jvc29mdCdzIElETCB0aGVyZSBhcmUgcHJvcGdldCBhbmQgcHJvcHB1dCBhdHRyaWJ1dGVzIHRvIGluZGljYXRlCisjIGdldHRlciBhbmQgc2V0dGVyIG1ldGhvZHMgZm9yIGEgcHJvcGVydHkuIFNldHRpbmcgdGhpcyBvcHRpb24gdG8gWUVTIHdpbGwgbWFrZQorIyBkb3h5Z2VuIHRvIHJlcGxhY2UgdGhlIGdldCBhbmQgc2V0IG1ldGhvZHMgYnkgYSBwcm9wZXJ0eSBpbiB0aGUgZG9jdW1lbnRhdGlvbi4KKyMgVGhpcyB3aWxsIG9ubHkgd29yayBpZiB0aGUgbWV0aG9kcyBhcmUgaW5kZWVkIGdldHRpbmcgb3Igc2V0dGluZyBhIHNpbXBsZQorIyB0eXBlLiBJZiB0aGlzIGlzIG5vdCB0aGUgY2FzZSwgb3IgeW91IHdhbnQgdG8gc2hvdyB0aGUgbWV0aG9kcyBhbnl3YXksIHlvdQorIyBzaG91bGQgc2V0IHRoaXMgb3B0aW9uIHRvIE5PLgorIyBUaGUgZGVmYXVsdCB2YWx1ZSBpczogWUVTLgorCitJRExfUFJPUEVSVFlfU1VQUE9SVCAgID0gWUVTCisKKyMgSWYgbWVtYmVyIGdyb3VwaW5nIGlzIHVzZWQgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kIHRoZSBESVNUUklCVVRFX0dST1VQX0RPQworIyB0YWcgaXMgc2V0IHRvIFlFUyB0aGVuIGRveHlnZW4gd2lsbCByZXVzZSB0aGUgZG9jdW1lbnRhdGlvbiBvZiB0aGUgZmlyc3QKKyMgbWVtYmVyIGluIHRoZSBncm91cCAoaWYgYW55KSBmb3IgdGhlIG90aGVyIG1lbWJlcnMgb2YgdGhlIGdyb3VwLiBCeSBkZWZhdWx0CisjIGFsbCBtZW1iZXJzIG9mIGEgZ3JvdXAgbXVzdCBiZSBkb2N1bWVudGVkIGV4cGxpY2l0bHkuCisjIFRoZSBkZWZhdWx0IHZhbHVlIGlzOiBOTy4KKworRElTVFJJQlVURV9HUk9VUF9ET0MgICA9IE5PCisKKyMgSWYgb25lIGFkZHMgYSBzdHJ1Y3Qgb3IgY2xhc3MgdG8gYSBncm91cCBhbmQgdGhpcyBvcHRpb24gaXMgZW5hYmxlZCwgdGhlbiBhbHNvCisjIGFueSBuZXN0ZWQgY2xhc3Mgb3Igc3RydWN0IGlzIGFkZGVkIHRvIHRoZSBzYW1lIGdyb3VwLiBCeSBkZWZhdWx0IHRoaXMgb3B0aW9uCisjIGlzIGRpc2FibGVkIGFuZCBvbmUgaGFzIHRvIGFkZCBuZXN0ZWQgY29tcG91bmRzIGV4cGxpY2l0bHkgdmlhIFxpbmdyb3VwLgorIyBUaGUgZGVmYXVsdCB2YWx1ZSBpczogTk8uCisKK0dST1VQX05FU1RFRF9DT01QT1VORFMgPSBOTworCisjIFNldCB0aGUgU1VCR1JPVVBJTkcgdGFnIHRvIFlFUyB0byBhbGxvdyBjbGFzcyBtZW1iZXIgZ3JvdXBzIG9mIHRoZSBzYW1lIHR5cGUKKyMgKGZvciBpbnN0YW5jZSBhIGdyb3VwIG9mIHB1YmxpYyBmdW5jdGlvbnMpIHRvIGJlIHB1dCBhcyBhIHN1Ymdyb3VwIG9mIHRoYXQKKyMgdHlwZSAoZS5nLiB1bmRlciB0aGUgUHVibGljIEZ1bmN0aW9ucyBzZWN0aW9uKS4gU2V0IGl0IHRvIE5PIHRvIHByZXZlbnQKKyMgc3ViZ3JvdXBpbmcuIEFsdGVybmF0aXZlbHksIHRoaXMgY2FuIGJlIGRvbmUgcGVyIGNsYXNzIHVzaW5nIHRoZQorIyBcbm9zdWJncm91cGluZyBjb21tYW5kLgorIyBUaGUgZGVmYXVsdCB2YWx1ZSBpczogWUVTLgorCitTVUJHUk9VUElORyAgICAgICAgICAgID0gWUVTCisKKyMgV2hlbiB0aGUgSU5MSU5FX0dST1VQRURfQ0xBU1NFUyB0YWcgaXMgc2V0IHRvIFlFUywgY2xhc3Nlcywgc3RydWN0cyBhbmQgdW5pb25zCisjIGFyZSBzaG93biBpbnNpZGUgdGhlIGdyb3VwIGluIHdoaWNoIHRoZXkgYXJlIGluY2x1ZGVkIChlLmcuIHVzaW5nIFxpbmdyb3VwKQorIyBpbnN0ZWFkIG9mIG9uIGEgc2VwYXJhdGUgcGFnZSAoZm9yIEhUTUwgYW5kIE1hbiBwYWdlcykgb3Igc2VjdGlvbiAoZm9yIExhVGVYCisjIGFuZCBSVEYpLgorIworIyBOb3RlIHRoYXQgdGhpcyBmZWF0dXJlIGRvZXMgbm90IHdvcmsgaW4gY29tYmluYXRpb24gd2l0aAorIyBTRVBBUkFURV9NRU1CRVJfUEFHRVMuCisjIFRoZSBkZWZhdWx0IHZhbHVlIGlzOiBOTy4KKworSU5MSU5FX0dST1VQRURfQ0xBU1NFUyA9IE5PCisKKyMgV2hlbiB0aGUgSU5MSU5FX1NJTVBMRV9TVFJVQ1RTIHRhZyBpcyBzZXQgdG8gWUVTLCBzdHJ1Y3RzLCBjbGFzc2VzLCBhbmQgdW5pb25zCisjIHdpdGggb25seSBwdWJsaWMgZGF0YSBmaWVsZHMgb3Igc2ltcGxlIHR5cGVkZWYgZmllbGRzIHdpbGwgYmUgc2hvd24gaW5saW5lIGluCisjIHRoZSBkb2N1bWVudGF0aW9uIG9mIHRoZSBzY29wZSBpbiB3aGljaCB0aGV5IGFyZSBkZWZpbmVkIChpLmUuIGZpbGUsCisjIG5hbWVzcGFjZSwgb3IgZ3JvdXAgZG9jdW1lbnRhdGlvbiksIHByb3ZpZGVkIHRoaXMgc2NvcGUgaXMgZG9jdW1lbnRlZC4gSWYgc2V0CisjIHRvIE5PLCBzdHJ1Y3RzLCBjbGFzc2VzLCBhbmQgdW5pb25zIGFyZSBzaG93biBvbiBhIHNlcGFyYXRlIHBhZ2UgKGZvciBIVE1MIGFuZAorIyBNYW4gcGFnZXMpIG9yIHNlY3Rpb24gKGZvciBMYVRlWCBhbmQgUlRGKS4KKyMgVGhlIGRlZmF1bHQgdmFsdWUgaXM6IE5PLgorCitJTkxJTkVfU0lNUExFX1NUUlVDVFMgID0gTk8KKworIyBXaGVuIFRZUEVERUZfSElERVNfU1RSVUNUIHRhZyBpcyBlbmFibGVkLCBhIHR5cGVkZWYgb2YgYSBzdHJ1Y3QsIHVuaW9uLCBvcgorIyBlbnVtIGlzIGRvY3VtZW50ZWQgYXMgc3RydWN0LCB1bmlvbiwgb3IgZW51bSB3aXRoIHRoZSBuYW1lIG9mIHRoZSB0eXBlZGVmLiBTbworIyB0eXBlZGVmIHN0cnVjdCBUeXBlUyB7fSBUeXBlVCwgd2lsbCBhcHBlYXIgaW4gdGhlIGRvY3VtZW50YXRpb24gYXMgYSBzdHJ1Y3QKKyMgd2l0aCBuYW1lIFR5cGVULiBXaGVuIGRpc2FibGVkIHRoZSB0eXBlZGVmIHdpbGwgYXBwZWFyIGFzIGEgbWVtYmVyIG9mIGEgZmlsZSwKKyMgbmFtZXNwYWNlLCBvciBjbGFzcy4gQW5kIHRoZSBzdHJ1Y3Qgd2lsbCBiZSBuYW1lZCBUeXBlUy4gVGhpcyBjYW4gdHlwaWNhbGx5IGJlCisjIHVzZWZ1bCBmb3IgQyBjb2RlIGluIGNhc2UgdGhlIGNvZGluZyBjb252ZW50aW9uIGRpY3RhdGVzIHRoYXQgYWxsIGNvbXBvdW5kCisjIHR5cGVzIGFyZSB0eXBlZGVmJ2VkIGFuZCBvbmx5IHRoZSB0eXBlZGVmIGlzIHJlZmVyZW5jZWQsIG5ldmVyIHRoZSB0YWcgbmFtZS4KKyMgVGhlIGRlZmF1bHQgdmFsdWUgaXM6IE5PLgorCitUWVBFREVGX0hJREVTX1NUUlVDVCAgID0gWUVTCisKKyMgVGhlIHNpemUgb2YgdGhlIHN5bWJvbCBsb29rdXAgY2FjaGUgY2FuIGJlIHNldCB1c2luZyBMT09LVVBfQ0FDSEVfU0laRS4gVGhpcworIyBjYWNoZSBpcyB1c2VkIHRvIHJlc29sdmUgc3ltYm9scyBnaXZlbiB0aGVpciBuYW1lIGFuZCBzY29wZS4gU2luY2UgdGhpcyBjYW4gYmUKKyMgYW4gZXhwZW5zaXZlIHByb2Nlc3MgYW5kIG9mdGVuIHRoZSBzYW1lIHN5bWJvbCBhcHBlYXJzIG11bHRpcGxlIHRpbWVzIGluIHRoZQorIyBjb2RlLCBkb3h5Z2VuIGtlZXBzIGEgY2FjaGUgb2YgcHJlLXJlc29sdmVkIHN5bWJvbHMuIElmIHRoZSBjYWNoZSBpcyB0b28gc21hbGwKKyMgZG94eWdlbiB3aWxsIGJlY29tZSBzbG93ZXIuIElmIHRoZSBjYWNoZSBpcyB0b28gbGFyZ2UsIG1lbW9yeSBpcyB3YXN0ZWQuIFRoZQorIyBjYWNoZSBzaXplIGlzIGdpdmVuIGJ5IHRoaXMgZm9ybXVsYTogMl4oMTYrTE9PS1VQX0NBQ0hFX1NJWkUpLiBUaGUgdmFsaWQgcmFuZ2UKKyMgaXMgMC4uOSwgdGhlIGRlZmF1bHQgaXMgMCwgY29ycmVzcG9uZGluZyB0byBhIGNhY2hlIHNpemUgb2YgMl4xNj02NTUzNgorIyBzeW1ib2xzLiBBdCB0aGUgZW5kIG9mIGEgcnVuIGRveHlnZW4gd2lsbCByZXBvcnQgdGhlIGNhY2hlIHVzYWdlIGFuZCBzdWdnZXN0CisjIHRoZSBvcHRpbWFsIGNhY2hlIHNpemUgZnJvbSBhIHNwZWVkIHBvaW50IG9mIHZpZXcuCisjIE1pbmltdW0gdmFsdWU6IDAsIG1heGltdW0gdmFsdWU6IDksIGRlZmF1bHQgdmFsdWU6IDAuCisKK0xPT0tVUF9DQUNIRV9TSVpFICAgICAgPSAwCisKKyMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgQnVpbGQgcmVsYXRlZCBjb25maWd1cmF0aW9uIG9wdGlvbnMKKyMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworIyBJZiB0aGUgRVhUUkFDVF9BTEwgdGFnIGlzIHNldCB0byBZRVMsIGRveHlnZW4gd2lsbCBhc3N1bWUgYWxsIGVudGl0aWVzIGluCisjIGRvY3VtZW50YXRpb24gYXJlIGRvY3VtZW50ZWQsIGV2ZW4gaWYgbm8gZG9jdW1lbnRhdGlvbiB3YXMgYXZhaWxhYmxlLiBQcml2YXRlCisjIGNsYXNzIG1lbWJlcnMgYW5kIHN0YXRpYyBmaWxlIG1lbWJlcnMgd2lsbCBiZSBoaWRkZW4gdW5sZXNzIHRoZQorIyBFWFRSQUNUX1BSSVZBVEUgcmVzcGVjdGl2ZWx5IEVYVFJBQ1RfU1RBVElDIHRhZ3MgYXJlIHNldCB0byBZRVMuCisjIE5vdGU6IFRoaXMgd2lsbCBhbHNvIGRpc2FibGUgdGhlIHdhcm5pbmdzIGFib3V0IHVuZG9jdW1lbnRlZCBtZW1iZXJzIHRoYXQgYXJlCisjIG5vcm1hbGx5IHByb2R1Y2VkIHdoZW4gV0FSTklOR1MgaXMgc2V0IHRvIFlFUy4KKyMgVGhlIGRlZmF1bHQgdmFsdWUgaXM6IE5PLgorCitFWFRSQUNUX0FMTCAgICAgICAgICAgID0gWUVTCisKKyMgSWYgdGhlIEVYVFJBQ1RfUFJJVkFURSB0YWcgaXMgc2V0IHRvIFlFUywgYWxsIHByaXZhdGUgbWVtYmVycyBvZiBhIGNsYXNzIHdpbGwKKyMgYmUgaW5jbHVkZWQgaW4gdGhlIGRvY3VtZW50YXRpb24uCisjIFRoZSBkZWZhdWx0IHZhbHVlIGlzOiBOTy4KKworRVhUUkFDVF9QUklWQVRFICAgICAgICA9IE5PCisKKyMgSWYgdGhlIEVYVFJBQ1RfUEFDS0FHRSB0YWcgaXMgc2V0IHRvIFlFUywgYWxsIG1lbWJlcnMgd2l0aCBwYWNrYWdlIG9yIGludGVybmFsCisjIHNjb3BlIHdpbGwgYmUgaW5jbHVkZWQgaW4gdGhlIGRvY3VtZW50YXRpb24uCisjIFRoZSBkZWZhdWx0IHZhbHVlIGlzOiBOTy4KKworRVhUUkFDVF9QQUNLQUdFICAgICAgICA9IE5PCisKKyMgSWYgdGhlIEVYVFJBQ1RfU1RBVElDIHRhZyBpcyBzZXQgdG8gWUVTLCBhbGwgc3RhdGljIG1lbWJlcnMgb2YgYSBmaWxlIHdpbGwgYmUKKyMgaW5jbHVkZWQgaW4gdGhlIGRvY3VtZW50YXRpb24uCisjIFRoZSBkZWZhdWx0IHZhbHVlIGlzOiBOTy4KKworRVhUUkFDVF9TVEFUSUMgICAgICAgICA9IE5PCisKKyMgSWYgdGhlIEVYVFJBQ1RfTE9DQUxfQ0xBU1NFUyB0YWcgaXMgc2V0IHRvIFlFUywgY2xhc3NlcyAoYW5kIHN0cnVjdHMpIGRlZmluZWQKKyMgbG9jYWxseSBpbiBzb3VyY2UgZmlsZXMgd2lsbCBiZSBpbmNsdWRlZCBpbiB0aGUgZG9jdW1lbnRhdGlvbi4gSWYgc2V0IHRvIE5PLAorIyBvbmx5IGNsYXNzZXMgZGVmaW5lZCBpbiBoZWFkZXIgZmlsZXMgYXJlIGluY2x1ZGVkLiBEb2VzIG5vdCBoYXZlIGFueSBlZmZlY3QKKyMgZm9yIEphdmEgc291cmNlcy4KKyMgVGhlIGRlZmF1bHQgdmFsdWUgaXM6IFlFUy4KKworRVhUUkFDVF9MT0NBTF9DTEFTU0VTICA9IFlFUworCisjIFRoaXMgZmxhZyBpcyBvbmx5IHVzZWZ1bCBmb3IgT2JqZWN0aXZlLUMgY29kZS4gSWYgc2V0IHRvIFlFUywgbG9jYWwgbWV0aG9kcywKKyMgd2hpY2ggYXJlIGRlZmluZWQgaW4gdGhlIGltcGxlbWVudGF0aW9uIHNlY3Rpb24gYnV0IG5vdCBpbiB0aGUgaW50ZXJmYWNlIGFyZQorIyBpbmNsdWRlZCBpbiB0aGUgZG9jdW1lbnRhdGlvbi4gSWYgc2V0IHRvIE5PLCBvbmx5IG1ldGhvZHMgaW4gdGhlIGludGVyZmFjZSBhcmUKKyMgaW5jbHVkZWQuCisjIFRoZSBkZWZhdWx0IHZhbHVlIGlzOiBOTy4KKworRVhUUkFDVF9MT0NBTF9NRVRIT0RTICA9IE5PCisKKyMgSWYgdGhpcyBmbGFnIGlzIHNldCB0byBZRVMsIHRoZSBtZW1iZXJzIG9mIGFub255bW91cyBuYW1lc3BhY2VzIHdpbGwgYmUKKyMgZXh0cmFjdGVkIGFuZCBhcHBlYXIgaW4gdGhlIGRvY3VtZW50YXRpb24gYXMgYSBuYW1lc3BhY2UgY2FsbGVkCisjICdhbm9ueW1vdXNfbmFtZXNwYWNle2ZpbGV9Jywgd2hlcmUgZmlsZSB3aWxsIGJlIHJlcGxhY2VkIHdpdGggdGhlIGJhc2UgbmFtZSBvZgorIyB0aGUgZmlsZSB0aGF0IGNvbnRhaW5zIHRoZSBhbm9ueW1vdXMgbmFtZXNwYWNlLiBCeSBkZWZhdWx0IGFub255bW91cyBuYW1lc3BhY2UKKyMgYXJlIGhpZGRlbi4KKyMgVGhlIGRlZmF1bHQgdmFsdWUgaXM6IE5PLgorCitFWFRSQUNUX0FOT05fTlNQQUNFUyAgID0gTk8KKworIyBJZiB0aGUgSElERV9VTkRPQ19NRU1CRVJTIHRhZyBpcyBzZXQgdG8gWUVTLCBkb3h5Z2VuIHdpbGwgaGlkZSBhbGwKKyMgdW5kb2N1bWVudGVkIG1lbWJlcnMgaW5zaWRlIGRvY3VtZW50ZWQgY2xhc3NlcyBvciBmaWxlcy4gSWYgc2V0IHRvIE5PIHRoZXNlCisjIG1lbWJlcnMgd2lsbCBiZSBpbmNsdWRlZCBpbiB0aGUgdmFyaW91cyBvdmVydmlld3MsIGJ1dCBubyBkb2N1bWVudGF0aW9uCisjIHNlY3Rpb24gaXMgZ2VuZXJhdGVkLiBUaGlzIG9wdGlvbiBoYXMgbm8gZWZmZWN0IGlmIEVYVFJBQ1RfQUxMIGlzIGVuYWJsZWQuCisjIFRoZSBkZWZhdWx0IHZhbHVlIGlzOiBOTy4KKworSElERV9VTkRPQ19NRU1CRVJTICAgICA9IE5PCisKKyMgSWYgdGhlIEhJREVfVU5ET0NfQ0xBU1NFUyB0YWcgaXMgc2V0IHRvIFlFUywgZG94eWdlbiB3aWxsIGhpZGUgYWxsCisjIHVuZG9jdW1lbnRlZCBjbGFzc2VzIHRoYXQgYXJlIG5vcm1hbGx5IHZpc2libGUgaW4gdGhlIGNsYXNzIGhpZXJhcmNoeS4gSWYgc2V0CisjIHRvIE5PLCB0aGVzZSBjbGFzc2VzIHdpbGwgYmUgaW5jbHVkZWQgaW4gdGhlIHZhcmlvdXMgb3ZlcnZpZXdzLiBUaGlzIG9wdGlvbgorIyBoYXMgbm8gZWZmZWN0IGlmIEVYVFJBQ1RfQUxMIGlzIGVuYWJsZWQuCisjIFRoZSBkZWZhdWx0IHZhbHVlIGlzOiBOTy4KKworSElERV9VTkRPQ19DTEFTU0VTICAgICA9IE5PCisKKyMgSWYgdGhlIEhJREVfRlJJRU5EX0NPTVBPVU5EUyB0YWcgaXMgc2V0IHRvIFlFUywgZG94eWdlbiB3aWxsIGhpZGUgYWxsIGZyaWVuZAorIyAoY2xhc3N8c3RydWN0fHVuaW9uKSBkZWNsYXJhdGlvbnMuIElmIHNldCB0byBOTywgdGhlc2UgZGVjbGFyYXRpb25zIHdpbGwgYmUKKyMgaW5jbHVkZWQgaW4gdGhlIGRvY3VtZW50YXRpb24uCisjIFRoZSBkZWZhdWx0IHZhbHVlIGlzOiBOTy4KKworSElERV9GUklFTkRfQ09NUE9VTkRTICA9IE5PCisKKyMgSWYgdGhlIEhJREVfSU5fQk9EWV9ET0NTIHRhZyBpcyBzZXQgdG8gWUVTLCBkb3h5Z2VuIHdpbGwgaGlkZSBhbnkKKyMgZG9jdW1lbnRhdGlvbiBibG9ja3MgZm91bmQgaW5zaWRlIHRoZSBib2R5IG9mIGEgZnVuY3Rpb24uIElmIHNldCB0byBOTywgdGhlc2UKKyMgYmxvY2tzIHdpbGwgYmUgYXBwZW5kZWQgdG8gdGhlIGZ1bmN0aW9uJ3MgZGV0YWlsZWQgZG9jdW1lbnRhdGlvbiBibG9jay4KKyMgVGhlIGRlZmF1bHQgdmFsdWUgaXM6IE5PLgorCitISURFX0lOX0JPRFlfRE9DUyAgICAgID0gTk8KKworIyBUaGUgSU5URVJOQUxfRE9DUyB0YWcgZGV0ZXJtaW5lcyBpZiBkb2N1bWVudGF0aW9uIHRoYXQgaXMgdHlwZWQgYWZ0ZXIgYQorIyBcaW50ZXJuYWwgY29tbWFuZCBpcyBpbmNsdWRlZC4gSWYgdGhlIHRhZyBpcyBzZXQgdG8gTk8gdGhlbiB0aGUgZG9jdW1lbnRhdGlvbgorIyB3aWxsIGJlIGV4Y2x1ZGVkLiBTZXQgaXQgdG8gWUVTIHRvIGluY2x1ZGUgdGhlIGludGVybmFsIGRvY3VtZW50YXRpb24uCisjIFRoZSBkZWZhdWx0IHZhbHVlIGlzOiBOTy4KKworSU5URVJOQUxfRE9DUyAgICAgICAgICA9IFlFUworCisjIElmIHRoZSBDQVNFX1NFTlNFX05BTUVTIHRhZyBpcyBzZXQgdG8gTk8gdGhlbiBkb3h5Z2VuIHdpbGwgb25seSBnZW5lcmF0ZSBmaWxlCisjIG5hbWVzIGluIGxvd2VyLWNhc2UgbGV0dGVycy4gSWYgc2V0IHRvIFlFUywgdXBwZXItY2FzZSBsZXR0ZXJzIGFyZSBhbHNvCisjIGFsbG93ZWQuIFRoaXMgaXMgdXNlZnVsIGlmIHlvdSBoYXZlIGNsYXNzZXMgb3IgZmlsZXMgd2hvc2UgbmFtZXMgb25seSBkaWZmZXIKKyMgaW4gY2FzZSBhbmQgaWYgeW91ciBmaWxlIHN5c3RlbSBzdXBwb3J0cyBjYXNlIHNlbnNpdGl2ZSBmaWxlIG5hbWVzLiBXaW5kb3dzCisjIGFuZCBNYWMgdXNlcnMgYXJlIGFkdmlzZWQgdG8gc2V0IHRoaXMgb3B0aW9uIHRvIE5PLgorIyBUaGUgZGVmYXVsdCB2YWx1ZSBpczogc3lzdGVtIGRlcGVuZGVudC4KKworQ0FTRV9TRU5TRV9OQU1FUyAgICAgICA9IE5PCisKKyMgSWYgdGhlIEhJREVfU0NPUEVfTkFNRVMgdGFnIGlzIHNldCB0byBOTyB0aGVuIGRveHlnZW4gd2lsbCBzaG93IG1lbWJlcnMgd2l0aAorIyB0aGVpciBmdWxsIGNsYXNzIGFuZCBuYW1lc3BhY2Ugc2NvcGVzIGluIHRoZSBkb2N1bWVudGF0aW9uLiBJZiBzZXQgdG8gWUVTLCB0aGUKKyMgc2NvcGUgd2lsbCBiZSBoaWRkZW4uCisjIFRoZSBkZWZhdWx0IHZhbHVlIGlzOiBOTy4KKworSElERV9TQ09QRV9OQU1FUyAgICAgICA9IFlFUworCisjIElmIHRoZSBISURFX0NPTVBPVU5EX1JFRkVSRU5DRSB0YWcgaXMgc2V0IHRvIE5PIChkZWZhdWx0KSB0aGVuIGRveHlnZW4gd2lsbAorIyBhcHBlbmQgYWRkaXRpb25hbCB0ZXh0IHRvIGEgcGFnZSdzIHRpdGxlLCBzdWNoIGFzIENsYXNzIFJlZmVyZW5jZS4gSWYgc2V0IHRvCisjIFlFUyB0aGUgY29tcG91bmQgcmVmZXJlbmNlIHdpbGwgYmUgaGlkZGVuLgorIyBUaGUgZGVmYXVsdCB2YWx1ZSBpczogTk8uCisKK0hJREVfQ09NUE9VTkRfUkVGRVJFTkNFPSBOTworCisjIElmIHRoZSBTSE9XX0lOQ0xVREVfRklMRVMgdGFnIGlzIHNldCB0byBZRVMgdGhlbiBkb3h5Z2VuIHdpbGwgcHV0IGEgbGlzdCBvZgorIyB0aGUgZmlsZXMgdGhhdCBhcmUgaW5jbHVkZWQgYnkgYSBmaWxlIGluIHRoZSBkb2N1bWVudGF0aW9uIG9mIHRoYXQgZmlsZS4KKyMgVGhlIGRlZmF1bHQgdmFsdWUgaXM6IFlFUy4KKworU0hPV19JTkNMVURFX0ZJTEVTICAgICA9IFlFUworCisjIElmIHRoZSBTSE9XX0dST1VQRURfTUVNQl9JTkMgdGFnIGlzIHNldCB0byBZRVMgdGhlbiBEb3h5Z2VuIHdpbGwgYWRkIGZvciBlYWNoCisjIGdyb3VwZWQgbWVtYmVyIGFuIGluY2x1ZGUgc3RhdGVtZW50IHRvIHRoZSBkb2N1bWVudGF0aW9uLCB0ZWxsaW5nIHRoZSByZWFkZXIKKyMgd2hpY2ggZmlsZSB0byBpbmNsdWRlIGluIG9yZGVyIHRvIHVzZSB0aGUgbWVtYmVyLgorIyBUaGUgZGVmYXVsdCB2YWx1ZSBpczogTk8uCisKK1NIT1dfR1JPVVBFRF9NRU1CX0lOQyAgPSBOTworCisjIElmIHRoZSBGT1JDRV9MT0NBTF9JTkNMVURFUyB0YWcgaXMgc2V0IHRvIFlFUyB0aGVuIGRveHlnZW4gd2lsbCBsaXN0IGluY2x1ZGUKKyMgZmlsZXMgd2l0aCBkb3VibGUgcXVvdGVzIGluIHRoZSBkb2N1bWVudGF0aW9uIHJhdGhlciB0aGFuIHdpdGggc2hhcnAgYnJhY2tldHMuCisjIFRoZSBkZWZhdWx0IHZhbHVlIGlzOiBOTy4KKworRk9SQ0VfTE9DQUxfSU5DTFVERVMgICA9IE5PCisKKyMgSWYgdGhlIElOTElORV9JTkZPIHRhZyBpcyBzZXQgdG8gWUVTIHRoZW4gYSB0YWcgW2lubGluZV0gaXMgaW5zZXJ0ZWQgaW4gdGhlCisjIGRvY3VtZW50YXRpb24gZm9yIGlubGluZSBtZW1iZXJzLgorIyBUaGUgZGVmYXVsdCB2YWx1ZSBpczogWUVTLgorCitJTkxJTkVfSU5GTyAgICAgICAgICAgID0gWUVTCisKKyMgSWYgdGhlIFNPUlRfTUVNQkVSX0RPQ1MgdGFnIGlzIHNldCB0byBZRVMgdGhlbiBkb3h5Z2VuIHdpbGwgc29ydCB0aGUKKyMgKGRldGFpbGVkKSBkb2N1bWVudGF0aW9uIG9mIGZpbGUgYW5kIGNsYXNzIG1lbWJlcnMgYWxwaGFiZXRpY2FsbHkgYnkgbWVtYmVyCisjIG5hbWUuIElmIHNldCB0byBOTywgdGhlIG1lbWJlcnMgd2lsbCBhcHBlYXIgaW4gZGVjbGFyYXRpb24gb3JkZXIuCisjIFRoZSBkZWZhdWx0IHZhbHVlIGlzOiBZRVMuCisKK1NPUlRfTUVNQkVSX0RPQ1MgICAgICAgPSBZRVMKKworIyBJZiB0aGUgU09SVF9CUklFRl9ET0NTIHRhZyBpcyBzZXQgdG8gWUVTIHRoZW4gZG94eWdlbiB3aWxsIHNvcnQgdGhlIGJyaWVmCisjIGRlc2NyaXB0aW9ucyBvZiBmaWxlLCBuYW1lc3BhY2UgYW5kIGNsYXNzIG1lbWJlcnMgYWxwaGFiZXRpY2FsbHkgYnkgbWVtYmVyCisjIG5hbWUuIElmIHNldCB0byBOTywgdGhlIG1lbWJlcnMgd2lsbCBhcHBlYXIgaW4gZGVjbGFyYXRpb24gb3JkZXIuIE5vdGUgdGhhdAorIyB0aGlzIHdpbGwgYWxzbyBpbmZsdWVuY2UgdGhlIG9yZGVyIG9mIHRoZSBjbGFzc2VzIGluIHRoZSBjbGFzcyBsaXN0LgorIyBUaGUgZGVmYXVsdCB2YWx1ZSBpczogTk8uCisKK1NPUlRfQlJJRUZfRE9DUyAgICAgICAgPSBOTworCisjIElmIHRoZSBTT1JUX01FTUJFUlNfQ1RPUlNfMVNUIHRhZyBpcyBzZXQgdG8gWUVTIHRoZW4gZG94eWdlbiB3aWxsIHNvcnQgdGhlCisjIChicmllZiBhbmQgZGV0YWlsZWQpIGRvY3VtZW50YXRpb24gb2YgY2xhc3MgbWVtYmVycyBzbyB0aGF0IGNvbnN0cnVjdG9ycyBhbmQKKyMgZGVzdHJ1Y3RvcnMgYXJlIGxpc3RlZCBmaXJzdC4gSWYgc2V0IHRvIE5PIHRoZSBjb25zdHJ1Y3RvcnMgd2lsbCBhcHBlYXIgaW4gdGhlCisjIHJlc3BlY3RpdmUgb3JkZXJzIGRlZmluZWQgYnkgU09SVF9CUklFRl9ET0NTIGFuZCBTT1JUX01FTUJFUl9ET0NTLgorIyBOb3RlOiBJZiBTT1JUX0JSSUVGX0RPQ1MgaXMgc2V0IHRvIE5PIHRoaXMgb3B0aW9uIGlzIGlnbm9yZWQgZm9yIHNvcnRpbmcgYnJpZWYKKyMgbWVtYmVyIGRvY3VtZW50YXRpb24uCisjIE5vdGU6IElmIFNPUlRfTUVNQkVSX0RPQ1MgaXMgc2V0IHRvIE5PIHRoaXMgb3B0aW9uIGlzIGlnbm9yZWQgZm9yIHNvcnRpbmcKKyMgZGV0YWlsZWQgbWVtYmVyIGRvY3VtZW50YXRpb24uCisjIFRoZSBkZWZhdWx0IHZhbHVlIGlzOiBOTy4KKworU09SVF9NRU1CRVJTX0NUT1JTXzFTVCA9IE5PCisKKyMgSWYgdGhlIFNPUlRfR1JPVVBfTkFNRVMgdGFnIGlzIHNldCB0byBZRVMgdGhlbiBkb3h5Z2VuIHdpbGwgc29ydCB0aGUgaGllcmFyY2h5CisjIG9mIGdyb3VwIG5hbWVzIGludG8gYWxwaGFiZXRpY2FsIG9yZGVyLiBJZiBzZXQgdG8gTk8gdGhlIGdyb3VwIG5hbWVzIHdpbGwKKyMgYXBwZWFyIGluIHRoZWlyIGRlZmluZWQgb3JkZXIuCisjIFRoZSBkZWZhdWx0IHZhbHVlIGlzOiBOTy4KKworU09SVF9HUk9VUF9OQU1FUyAgICAgICA9IE5PCisKKyMgSWYgdGhlIFNPUlRfQllfU0NPUEVfTkFNRSB0YWcgaXMgc2V0IHRvIFlFUywgdGhlIGNsYXNzIGxpc3Qgd2lsbCBiZSBzb3J0ZWQgYnkKKyMgZnVsbHktcXVhbGlmaWVkIG5hbWVzLCBpbmNsdWRpbmcgbmFtZXNwYWNlcy4gSWYgc2V0IHRvIE5PLCB0aGUgY2xhc3MgbGlzdCB3aWxsCisjIGJlIHNvcnRlZCBvbmx5IGJ5IGNsYXNzIG5hbWUsIG5vdCBpbmNsdWRpbmcgdGhlIG5hbWVzcGFjZSBwYXJ0LgorIyBOb3RlOiBUaGlzIG9wdGlvbiBpcyBub3QgdmVyeSB1c2VmdWwgaWYgSElERV9TQ09QRV9OQU1FUyBpcyBzZXQgdG8gWUVTLgorIyBOb3RlOiBUaGlzIG9wdGlvbiBhcHBsaWVzIG9ubHkgdG8gdGhlIGNsYXNzIGxpc3QsIG5vdCB0byB0aGUgYWxwaGFiZXRpY2FsCisjIGxpc3QuCisjIFRoZSBkZWZhdWx0IHZhbHVlIGlzOiBOTy4KKworU09SVF9CWV9TQ09QRV9OQU1FICAgICA9IE5PCisKKyMgSWYgdGhlIFNUUklDVF9QUk9UT19NQVRDSElORyBvcHRpb24gaXMgZW5hYmxlZCBhbmQgZG94eWdlbiBmYWlscyB0byBkbyBwcm9wZXIKKyMgdHlwZSByZXNvbHV0aW9uIG9mIGFsbCBwYXJhbWV0ZXJzIG9mIGEgZnVuY3Rpb24gaXQgd2lsbCByZWplY3QgYSBtYXRjaCBiZXR3ZWVuCisjIHRoZSBwcm90b3R5cGUgYW5kIHRoZSBpbXBsZW1lbnRhdGlvbiBvZiBhIG1lbWJlciBmdW5jdGlvbiBldmVuIGlmIHRoZXJlIGlzCisjIG9ubHkgb25lIGNhbmRpZGF0ZSBvciBpdCBpcyBvYnZpb3VzIHdoaWNoIGNhbmRpZGF0ZSB0byBjaG9vc2UgYnkgZG9pbmcgYQorIyBzaW1wbGUgc3RyaW5nIG1hdGNoLiBCeSBkaXNhYmxpbmcgU1RSSUNUX1BST1RPX01BVENISU5HIGRveHlnZW4gd2lsbCBzdGlsbAorIyBhY2NlcHQgYSBtYXRjaCBiZXR3ZWVuIHByb3RvdHlwZSBhbmQgaW1wbGVtZW50YXRpb24gaW4gc3VjaCBjYXNlcy4KKyMgVGhlIGRlZmF1bHQgdmFsdWUgaXM6IE5PLgorCitTVFJJQ1RfUFJPVE9fTUFUQ0hJTkcgID0gTk8KKworIyBUaGUgR0VORVJBVEVfVE9ET0xJU1QgdGFnIGNhbiBiZSB1c2VkIHRvIGVuYWJsZSAoWUVTKSBvciBkaXNhYmxlIChOTykgdGhlIHRvZG8KKyMgbGlzdC4gVGhpcyBsaXN0IGlzIGNyZWF0ZWQgYnkgcHV0dGluZyBcdG9kbyBjb21tYW5kcyBpbiB0aGUgZG9jdW1lbnRhdGlvbi4KKyMgVGhlIGRlZmF1bHQgdmFsdWUgaXM6IFlFUy4KKworR0VORVJBVEVfVE9ET0xJU1QgICAgICA9IFlFUworCisjIFRoZSBHRU5FUkFURV9URVNUTElTVCB0YWcgY2FuIGJlIHVzZWQgdG8gZW5hYmxlIChZRVMpIG9yIGRpc2FibGUgKE5PKSB0aGUgdGVzdAorIyBsaXN0LiBUaGlzIGxpc3QgaXMgY3JlYXRlZCBieSBwdXR0aW5nIFx0ZXN0IGNvbW1hbmRzIGluIHRoZSBkb2N1bWVudGF0aW9uLgorIyBUaGUgZGVmYXVsdCB2YWx1ZSBpczogWUVTLgorCitHRU5FUkFURV9URVNUTElTVCAgICAgID0gWUVTCisKKyMgVGhlIEdFTkVSQVRFX0JVR0xJU1QgdGFnIGNhbiBiZSB1c2VkIHRvIGVuYWJsZSAoWUVTKSBvciBkaXNhYmxlIChOTykgdGhlIGJ1ZworIyBsaXN0LiBUaGlzIGxpc3QgaXMgY3JlYXRlZCBieSBwdXR0aW5nIFxidWcgY29tbWFuZHMgaW4gdGhlIGRvY3VtZW50YXRpb24uCisjIFRoZSBkZWZhdWx0IHZhbHVlIGlzOiBZRVMuCisKK0dFTkVSQVRFX0JVR0xJU1QgICAgICAgPSBZRVMKKworIyBUaGUgR0VORVJBVEVfREVQUkVDQVRFRExJU1QgdGFnIGNhbiBiZSB1c2VkIHRvIGVuYWJsZSAoWUVTKSBvciBkaXNhYmxlIChOTykKKyMgdGhlIGRlcHJlY2F0ZWQgbGlzdC4gVGhpcyBsaXN0IGlzIGNyZWF0ZWQgYnkgcHV0dGluZyBcZGVwcmVjYXRlZCBjb21tYW5kcyBpbgorIyB0aGUgZG9jdW1lbnRhdGlvbi4KKyMgVGhlIGRlZmF1bHQgdmFsdWUgaXM6IFlFUy4KKworR0VORVJBVEVfREVQUkVDQVRFRExJU1Q9IFlFUworCisjIFRoZSBFTkFCTEVEX1NFQ1RJT05TIHRhZyBjYW4gYmUgdXNlZCB0byBlbmFibGUgY29uZGl0aW9uYWwgZG9jdW1lbnRhdGlvbgorIyBzZWN0aW9ucywgbWFya2VkIGJ5IFxpZiA8c2VjdGlvbl9sYWJlbD4gLi4uIFxlbmRpZiBhbmQgXGNvbmQgPHNlY3Rpb25fbGFiZWw+CisjIC4uLiBcZW5kY29uZCBibG9ja3MuCisKK0VOQUJMRURfU0VDVElPTlMgICAgICAgPSBJTlRFUk5BTAorCisjIFRoZSBNQVhfSU5JVElBTElaRVJfTElORVMgdGFnIGRldGVybWluZXMgdGhlIG1heGltdW0gbnVtYmVyIG9mIGxpbmVzIHRoYXQgdGhlCisjIGluaXRpYWwgdmFsdWUgb2YgYSB2YXJpYWJsZSBvciBtYWNybyAvIGRlZmluZSBjYW4gaGF2ZSBmb3IgaXQgdG8gYXBwZWFyIGluIHRoZQorIyBkb2N1bWVudGF0aW9uLiBJZiB0aGUgaW5pdGlhbGl6ZXIgY29uc2lzdHMgb2YgbW9yZSBsaW5lcyB0aGFuIHNwZWNpZmllZCBoZXJlCisjIGl0IHdpbGwgYmUgaGlkZGVuLiBVc2UgYSB2YWx1ZSBvZiAwIHRvIGhpZGUgaW5pdGlhbGl6ZXJzIGNvbXBsZXRlbHkuIFRoZQorIyBhcHBlYXJhbmNlIG9mIHRoZSB2YWx1ZSBvZiBpbmRpdmlkdWFsIHZhcmlhYmxlcyBhbmQgbWFjcm9zIC8gZGVmaW5lcyBjYW4gYmUKKyMgY29udHJvbGxlZCB1c2luZyBcc2hvd2luaXRpYWxpemVyIG9yIFxoaWRlaW5pdGlhbGl6ZXIgY29tbWFuZCBpbiB0aGUKKyMgZG9jdW1lbnRhdGlvbiByZWdhcmRsZXNzIG9mIHRoaXMgc2V0dGluZy4KKyMgTWluaW11bSB2YWx1ZTogMCwgbWF4aW11bSB2YWx1ZTogMTAwMDAsIGRlZmF1bHQgdmFsdWU6IDMwLgorCitNQVhfSU5JVElBTElaRVJfTElORVMgID0gMzAKKworIyBTZXQgdGhlIFNIT1dfVVNFRF9GSUxFUyB0YWcgdG8gTk8gdG8gZGlzYWJsZSB0aGUgbGlzdCBvZiBmaWxlcyBnZW5lcmF0ZWQgYXQKKyMgdGhlIGJvdHRvbSBvZiB0aGUgZG9jdW1lbnRhdGlvbiBvZiBjbGFzc2VzIGFuZCBzdHJ1Y3RzLiBJZiBzZXQgdG8gWUVTLCB0aGUKKyMgbGlzdCB3aWxsIG1lbnRpb24gdGhlIGZpbGVzIHRoYXQgd2VyZSB1c2VkIHRvIGdlbmVyYXRlIHRoZSBkb2N1bWVudGF0aW9uLgorIyBUaGUgZGVmYXVsdCB2YWx1ZSBpczogWUVTLgorCitTSE9XX1VTRURfRklMRVMgICAgICAgID0gWUVTCisKKyMgU2V0IHRoZSBTSE9XX0ZJTEVTIHRhZyB0byBOTyB0byBkaXNhYmxlIHRoZSBnZW5lcmF0aW9uIG9mIHRoZSBGaWxlcyBwYWdlLiBUaGlzCisjIHdpbGwgcmVtb3ZlIHRoZSBGaWxlcyBlbnRyeSBmcm9tIHRoZSBRdWljayBJbmRleCBhbmQgZnJvbSB0aGUgRm9sZGVyIFRyZWUgVmlldworIyAoaWYgc3BlY2lmaWVkKS4KKyMgVGhlIGRlZmF1bHQgdmFsdWUgaXM6IFlFUy4KKworU0hPV19GSUxFUyAgICAgICAgICAgICA9IFlFUworCisjIFNldCB0aGUgU0hPV19OQU1FU1BBQ0VTIHRhZyB0byBOTyB0byBkaXNhYmxlIHRoZSBnZW5lcmF0aW9uIG9mIHRoZSBOYW1lc3BhY2VzCisjIHBhZ2UuIFRoaXMgd2lsbCByZW1vdmUgdGhlIE5hbWVzcGFjZXMgZW50cnkgZnJvbSB0aGUgUXVpY2sgSW5kZXggYW5kIGZyb20gdGhlCisjIEZvbGRlciBUcmVlIFZpZXcgKGlmIHNwZWNpZmllZCkuCisjIFRoZSBkZWZhdWx0IHZhbHVlIGlzOiBZRVMuCisKK1NIT1dfTkFNRVNQQUNFUyAgICAgICAgPSBZRVMKKworIyBUaGUgRklMRV9WRVJTSU9OX0ZJTFRFUiB0YWcgY2FuIGJlIHVzZWQgdG8gc3BlY2lmeSBhIHByb2dyYW0gb3Igc2NyaXB0IHRoYXQKKyMgZG94eWdlbiBzaG91bGQgaW52b2tlIHRvIGdldCB0aGUgY3VycmVudCB2ZXJzaW9uIGZvciBlYWNoIGZpbGUgKHR5cGljYWxseSBmcm9tCisjIHRoZSB2ZXJzaW9uIGNvbnRyb2wgc3lzdGVtKS4gRG94eWdlbiB3aWxsIGludm9rZSB0aGUgcHJvZ3JhbSBieSBleGVjdXRpbmcgKHZpYQorIyBwb3BlbigpKSB0aGUgY29tbWFuZCBjb21tYW5kIGlucHV0LWZpbGUsIHdoZXJlIGNvbW1hbmQgaXMgdGhlIHZhbHVlIG9mIHRoZQorIyBGSUxFX1ZFUlNJT05fRklMVEVSIHRhZywgYW5kIGlucHV0LWZpbGUgaXMgdGhlIG5hbWUgb2YgYW4gaW5wdXQgZmlsZSBwcm92aWRlZAorIyBieSBkb3h5Z2VuLiBXaGF0ZXZlciB0aGUgcHJvZ3JhbSB3cml0ZXMgdG8gc3RhbmRhcmQgb3V0cHV0IGlzIHVzZWQgYXMgdGhlIGZpbGUKKyMgdmVyc2lvbi4gRm9yIGFuIGV4YW1wbGUgc2VlIHRoZSBkb2N1bWVudGF0aW9uLgorCitGSUxFX1ZFUlNJT05fRklMVEVSICAgID0gCisKKyMgVGhlIExBWU9VVF9GSUxFIHRhZyBjYW4gYmUgdXNlZCB0byBzcGVjaWZ5IGEgbGF5b3V0IGZpbGUgd2hpY2ggd2lsbCBiZSBwYXJzZWQKKyMgYnkgZG94eWdlbi4gVGhlIGxheW91dCBmaWxlIGNvbnRyb2xzIHRoZSBnbG9iYWwgc3RydWN0dXJlIG9mIHRoZSBnZW5lcmF0ZWQKKyMgb3V0cHV0IGZpbGVzIGluIGFuIG91dHB1dCBmb3JtYXQgaW5kZXBlbmRlbnQgd2F5LiBUbyBjcmVhdGUgdGhlIGxheW91dCBmaWxlCisjIHRoYXQgcmVwcmVzZW50cyBkb3h5Z2VuJ3MgZGVmYXVsdHMsIHJ1biBkb3h5Z2VuIHdpdGggdGhlIC1sIG9wdGlvbi4gWW91IGNhbgorIyBvcHRpb25hbGx5IHNwZWNpZnkgYSBmaWxlIG5hbWUgYWZ0ZXIgdGhlIG9wdGlvbiwgaWYgb21pdHRlZCBEb3h5Z2VuTGF5b3V0LnhtbAorIyB3aWxsIGJlIHVzZWQgYXMgdGhlIG5hbWUgb2YgdGhlIGxheW91dCBmaWxlLgorIworIyBOb3RlIHRoYXQgaWYgeW91IHJ1biBkb3h5Z2VuIGZyb20gYSBkaXJlY3RvcnkgY29udGFpbmluZyBhIGZpbGUgY2FsbGVkCisjIERveHlnZW5MYXlvdXQueG1sLCBkb3h5Z2VuIHdpbGwgcGFyc2UgaXQgYXV0b21hdGljYWxseSBldmVuIGlmIHRoZSBMQVlPVVRfRklMRQorIyB0YWcgaXMgbGVmdCBlbXB0eS4KKworTEFZT1VUX0ZJTEUgICAgICAgICAgICA9IAorCisjIFRoZSBDSVRFX0JJQl9GSUxFUyB0YWcgY2FuIGJlIHVzZWQgdG8gc3BlY2lmeSBvbmUgb3IgbW9yZSBiaWIgZmlsZXMgY29udGFpbmluZworIyB0aGUgcmVmZXJlbmNlIGRlZmluaXRpb25zLiBUaGlzIG11c3QgYmUgYSBsaXN0IG9mIC5iaWIgZmlsZXMuIFRoZSAuYmliCisjIGV4dGVuc2lvbiBpcyBhdXRvbWF0aWNhbGx5IGFwcGVuZGVkIGlmIG9taXR0ZWQuIFRoaXMgcmVxdWlyZXMgdGhlIGJpYnRleCB0b29sCisjIHRvIGJlIGluc3RhbGxlZC4gU2VlIGFsc28gaHR0cDovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9CaWJUZVggZm9yIG1vcmUgaW5mby4KKyMgRm9yIExhVGVYIHRoZSBzdHlsZSBvZiB0aGUgYmlibGlvZ3JhcGh5IGNhbiBiZSBjb250cm9sbGVkIHVzaW5nCisjIExBVEVYX0JJQl9TVFlMRS4gVG8gdXNlIHRoaXMgZmVhdHVyZSB5b3UgbmVlZCBiaWJ0ZXggYW5kIHBlcmwgYXZhaWxhYmxlIGluIHRoZQorIyBzZWFyY2ggcGF0aC4gU2VlIGFsc28gXGNpdGUgZm9yIGluZm8gaG93IHRvIGNyZWF0ZSByZWZlcmVuY2VzLgorCitDSVRFX0JJQl9GSUxFUyAgICAgICAgID0gCisKKyMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgQ29uZmlndXJhdGlvbiBvcHRpb25zIHJlbGF0ZWQgdG8gd2FybmluZyBhbmQgcHJvZ3Jlc3MgbWVzc2FnZXMKKyMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworIyBUaGUgUVVJRVQgdGFnIGNhbiBiZSB1c2VkIHRvIHR1cm4gb24vb2ZmIHRoZSBtZXNzYWdlcyB0aGF0IGFyZSBnZW5lcmF0ZWQgdG8KKyMgc3RhbmRhcmQgb3V0cHV0IGJ5IGRveHlnZW4uIElmIFFVSUVUIGlzIHNldCB0byBZRVMgdGhpcyBpbXBsaWVzIHRoYXQgdGhlCisjIG1lc3NhZ2VzIGFyZSBvZmYuCisjIFRoZSBkZWZhdWx0IHZhbHVlIGlzOiBOTy4KKworUVVJRVQgICAgICAgICAgICAgICAgICA9IE5PCisKKyMgVGhlIFdBUk5JTkdTIHRhZyBjYW4gYmUgdXNlZCB0byB0dXJuIG9uL29mZiB0aGUgd2FybmluZyBtZXNzYWdlcyB0aGF0IGFyZQorIyBnZW5lcmF0ZWQgdG8gc3RhbmRhcmQgZXJyb3IgKHN0ZGVycikgYnkgZG94eWdlbi4gSWYgV0FSTklOR1MgaXMgc2V0IHRvIFlFUworIyB0aGlzIGltcGxpZXMgdGhhdCB0aGUgd2FybmluZ3MgYXJlIG9uLgorIworIyBUaXA6IFR1cm4gd2FybmluZ3Mgb24gd2hpbGUgd3JpdGluZyB0aGUgZG9jdW1lbnRhdGlvbi4KKyMgVGhlIGRlZmF1bHQgdmFsdWUgaXM6IFlFUy4KKworV0FSTklOR1MgICAgICAgICAgICAgICA9IFlFUworCisjIElmIHRoZSBXQVJOX0lGX1VORE9DVU1FTlRFRCB0YWcgaXMgc2V0IHRvIFlFUyB0aGVuIGRveHlnZW4gd2lsbCBnZW5lcmF0ZQorIyB3YXJuaW5ncyBmb3IgdW5kb2N1bWVudGVkIG1lbWJlcnMuIElmIEVYVFJBQ1RfQUxMIGlzIHNldCB0byBZRVMgdGhlbiB0aGlzIGZsYWcKKyMgd2lsbCBhdXRvbWF0aWNhbGx5IGJlIGRpc2FibGVkLgorIyBUaGUgZGVmYXVsdCB2YWx1ZSBpczogWUVTLgorCitXQVJOX0lGX1VORE9DVU1FTlRFRCAgID0gWUVTCisKKyMgSWYgdGhlIFdBUk5fSUZfRE9DX0VSUk9SIHRhZyBpcyBzZXQgdG8gWUVTLCBkb3h5Z2VuIHdpbGwgZ2VuZXJhdGUgd2FybmluZ3MgZm9yCisjIHBvdGVudGlhbCBlcnJvcnMgaW4gdGhlIGRvY3VtZW50YXRpb24sIHN1Y2ggYXMgbm90IGRvY3VtZW50aW5nIHNvbWUgcGFyYW1ldGVycworIyBpbiBhIGRvY3VtZW50ZWQgZnVuY3Rpb24sIG9yIGRvY3VtZW50aW5nIHBhcmFtZXRlcnMgdGhhdCBkb24ndCBleGlzdCBvciB1c2luZworIyBtYXJrdXAgY29tbWFuZHMgd3JvbmdseS4KKyMgVGhlIGRlZmF1bHQgdmFsdWUgaXM6IFlFUy4KKworV0FSTl9JRl9ET0NfRVJST1IgICAgICA9IFlFUworCisjIFRoaXMgV0FSTl9OT19QQVJBTURPQyBvcHRpb24gY2FuIGJlIGVuYWJsZWQgdG8gZ2V0IHdhcm5pbmdzIGZvciBmdW5jdGlvbnMgdGhhdAorIyBhcmUgZG9jdW1lbnRlZCwgYnV0IGhhdmUgbm8gZG9jdW1lbnRhdGlvbiBmb3IgdGhlaXIgcGFyYW1ldGVycyBvciByZXR1cm4KKyMgdmFsdWUuIElmIHNldCB0byBOTywgZG94eWdlbiB3aWxsIG9ubHkgd2FybiBhYm91dCB3cm9uZyBvciBpbmNvbXBsZXRlCisjIHBhcmFtZXRlciBkb2N1bWVudGF0aW9uLCBidXQgbm90IGFib3V0IHRoZSBhYnNlbmNlIG9mIGRvY3VtZW50YXRpb24uCisjIFRoZSBkZWZhdWx0IHZhbHVlIGlzOiBOTy4KKworV0FSTl9OT19QQVJBTURPQyAgICAgICA9IE5PCisKKyMgSWYgdGhlIFdBUk5fQVNfRVJST1IgdGFnIGlzIHNldCB0byBZRVMgdGhlbiBkb3h5Z2VuIHdpbGwgaW1tZWRpYXRlbHkgc3RvcCB3aGVuCisjIGEgd2FybmluZyBpcyBlbmNvdW50ZXJlZC4KKyMgVGhlIGRlZmF1bHQgdmFsdWUgaXM6IE5PLgorCitXQVJOX0FTX0VSUk9SICAgICAgICAgID0gTk8KKworIyBUaGUgV0FSTl9GT1JNQVQgdGFnIGRldGVybWluZXMgdGhlIGZvcm1hdCBvZiB0aGUgd2FybmluZyBtZXNzYWdlcyB0aGF0IGRveHlnZW4KKyMgY2FuIHByb2R1Y2UuIFRoZSBzdHJpbmcgc2hvdWxkIGNvbnRhaW4gdGhlICRmaWxlLCAkbGluZSwgYW5kICR0ZXh0IHRhZ3MsIHdoaWNoCisjIHdpbGwgYmUgcmVwbGFjZWQgYnkgdGhlIGZpbGUgYW5kIGxpbmUgbnVtYmVyIGZyb20gd2hpY2ggdGhlIHdhcm5pbmcgb3JpZ2luYXRlZAorIyBhbmQgdGhlIHdhcm5pbmcgdGV4dC4gT3B0aW9uYWxseSB0aGUgZm9ybWF0IG1heSBjb250YWluICR2ZXJzaW9uLCB3aGljaCB3aWxsCisjIGJlIHJlcGxhY2VkIGJ5IHRoZSB2ZXJzaW9uIG9mIHRoZSBmaWxlIChpZiBpdCBjb3VsZCBiZSBvYnRhaW5lZCB2aWEKKyMgRklMRV9WRVJTSU9OX0ZJTFRFUikKKyMgVGhlIGRlZmF1bHQgdmFsdWUgaXM6ICRmaWxlOiRsaW5lOiAkdGV4dC4KKworV0FSTl9GT1JNQVQgICAgICAgICAgICA9ICIkZmlsZTokbGluZTogJHRleHQiCisKKyMgVGhlIFdBUk5fTE9HRklMRSB0YWcgY2FuIGJlIHVzZWQgdG8gc3BlY2lmeSBhIGZpbGUgdG8gd2hpY2ggd2FybmluZyBhbmQgZXJyb3IKKyMgbWVzc2FnZXMgc2hvdWxkIGJlIHdyaXR0ZW4uIElmIGxlZnQgYmxhbmsgdGhlIG91dHB1dCBpcyB3cml0dGVuIHRvIHN0YW5kYXJkCisjIGVycm9yIChzdGRlcnIpLgorCitXQVJOX0xPR0ZJTEUgICAgICAgICAgID0gCisKKyMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgQ29uZmlndXJhdGlvbiBvcHRpb25zIHJlbGF0ZWQgdG8gdGhlIGlucHV0IGZpbGVzCisjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyMgVGhlIElOUFVUIHRhZyBpcyB1c2VkIHRvIHNwZWNpZnkgdGhlIGZpbGVzIGFuZC9vciBkaXJlY3RvcmllcyB0aGF0IGNvbnRhaW4KKyMgZG9jdW1lbnRlZCBzb3VyY2UgZmlsZXMuIFlvdSBtYXkgZW50ZXIgZmlsZSBuYW1lcyBsaWtlIG15ZmlsZS5jcHAgb3IKKyMgZGlyZWN0b3JpZXMgbGlrZSAvdXNyL3NyYy9teXByb2plY3QuIFNlcGFyYXRlIHRoZSBmaWxlcyBvciBkaXJlY3RvcmllcyB3aXRoCisjIHNwYWNlcy4gU2VlIGFsc28gRklMRV9QQVRURVJOUyBhbmQgRVhURU5TSU9OX01BUFBJTkcKKyMgTm90ZTogSWYgdGhpcyB0YWcgaXMgZW1wdHkgdGhlIGN1cnJlbnQgZGlyZWN0b3J5IGlzIHNlYXJjaGVkLgorCitJTlBVVCAgICAgICAgICAgICAgICAgID0gZnJhbWV3b3Jrcy9hdi9tZWRpYS9saWJzdGFnZWZyaWdodC9jb2RlYzIvCisKKyMgVGhpcyB0YWcgY2FuIGJlIHVzZWQgdG8gc3BlY2lmeSB0aGUgY2hhcmFjdGVyIGVuY29kaW5nIG9mIHRoZSBzb3VyY2UgZmlsZXMKKyMgdGhhdCBkb3h5Z2VuIHBhcnNlcy4gSW50ZXJuYWxseSBkb3h5Z2VuIHVzZXMgdGhlIFVURi04IGVuY29kaW5nLiBEb3h5Z2VuIHVzZXMKKyMgbGliaWNvbnYgKG9yIHRoZSBpY29udiBidWlsdCBpbnRvIGxpYmMpIGZvciB0aGUgdHJhbnNjb2RpbmcuIFNlZSB0aGUgbGliaWNvbnYKKyMgZG9jdW1lbnRhdGlvbiAoc2VlOiBodHRwOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvbGliaWNvbnYpIGZvciB0aGUgbGlzdCBvZgorIyBwb3NzaWJsZSBlbmNvZGluZ3MuCisjIFRoZSBkZWZhdWx0IHZhbHVlIGlzOiBVVEYtOC4KKworSU5QVVRfRU5DT0RJTkcgICAgICAgICA9IFVURi04CisKKyMgSWYgdGhlIHZhbHVlIG9mIHRoZSBJTlBVVCB0YWcgY29udGFpbnMgZGlyZWN0b3JpZXMsIHlvdSBjYW4gdXNlIHRoZQorIyBGSUxFX1BBVFRFUk5TIHRhZyB0byBzcGVjaWZ5IG9uZSBvciBtb3JlIHdpbGRjYXJkIHBhdHRlcm5zIChsaWtlICouY3BwIGFuZAorIyAqLmgpIHRvIGZpbHRlciBvdXQgdGhlIHNvdXJjZS1maWxlcyBpbiB0aGUgZGlyZWN0b3JpZXMuCisjCisjIE5vdGUgdGhhdCBmb3IgY3VzdG9tIGV4dGVuc2lvbnMgb3Igbm90IGRpcmVjdGx5IHN1cHBvcnRlZCBleHRlbnNpb25zIHlvdSBhbHNvCisjIG5lZWQgdG8gc2V0IEVYVEVOU0lPTl9NQVBQSU5HIGZvciB0aGUgZXh0ZW5zaW9uIG90aGVyd2lzZSB0aGUgZmlsZXMgYXJlIG5vdAorIyByZWFkIGJ5IGRveHlnZW4uCisjCisjIElmIGxlZnQgYmxhbmsgdGhlIGZvbGxvd2luZyBwYXR0ZXJucyBhcmUgdGVzdGVkOiouYywgKi5jYywgKi5jeHgsICouY3BwLAorIyAqLmMrKywgKi5qYXZhLCAqLmlpLCAqLml4eCwgKi5pcHAsICouaSsrLCAqLmlubCwgKi5pZGwsICouZGRsLCAqLm9kbCwgKi5oLAorIyAqLmhoLCAqLmh4eCwgKi5ocHAsICouaCsrLCAqLmNzLCAqLmQsICoucGhwLCAqLnBocDQsICoucGhwNSwgKi5waHRtbCwgKi5pbmMsCisjICoubSwgKi5tYXJrZG93biwgKi5tZCwgKi5tbSwgKi5kb3gsICoucHksICoucHl3LCAqLmY5MCwgKi5mLCAqLmZvciwgKi50Y2wsCisjICoudmhkLCAqLnZoZGwsICoudWNmLCAqLnFzZiwgKi5hcyBhbmQgKi5qcy4KKworRklMRV9QQVRURVJOUyAgICAgICAgICA9IEMyKi5jIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICBDMiouY3BwIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICBDMiouaAorCisjIFRoZSBSRUNVUlNJVkUgdGFnIGNhbiBiZSB1c2VkIHRvIHNwZWNpZnkgd2hldGhlciBvciBub3Qgc3ViZGlyZWN0b3JpZXMgc2hvdWxkCisjIGJlIHNlYXJjaGVkIGZvciBpbnB1dCBmaWxlcyBhcyB3ZWxsLgorIyBUaGUgZGVmYXVsdCB2YWx1ZSBpczogTk8uCisKK1JFQ1VSU0lWRSAgICAgICAgICAgICAgPSBZRVMKKworIyBUaGUgRVhDTFVERSB0YWcgY2FuIGJlIHVzZWQgdG8gc3BlY2lmeSBmaWxlcyBhbmQvb3IgZGlyZWN0b3JpZXMgdGhhdCBzaG91bGQgYmUKKyMgZXhjbHVkZWQgZnJvbSB0aGUgSU5QVVQgc291cmNlIGZpbGVzLiBUaGlzIHdheSB5b3UgY2FuIGVhc2lseSBleGNsdWRlIGEKKyMgc3ViZGlyZWN0b3J5IGZyb20gYSBkaXJlY3RvcnkgdHJlZSB3aG9zZSByb290IGlzIHNwZWNpZmllZCB3aXRoIHRoZSBJTlBVVCB0YWcuCisjCisjIE5vdGUgdGhhdCByZWxhdGl2ZSBwYXRocyBhcmUgcmVsYXRpdmUgdG8gdGhlIGRpcmVjdG9yeSBmcm9tIHdoaWNoIGRveHlnZW4gaXMKKyMgcnVuLgorCitFWENMVURFICAgICAgICAgICAgICAgID0gCisKKyMgVGhlIEVYQ0xVREVfU1lNTElOS1MgdGFnIGNhbiBiZSB1c2VkIHRvIHNlbGVjdCB3aGV0aGVyIG9yIG5vdCBmaWxlcyBvcgorIyBkaXJlY3RvcmllcyB0aGF0IGFyZSBzeW1ib2xpYyBsaW5rcyAoYSBVbml4IGZpbGUgc3lzdGVtIGZlYXR1cmUpIGFyZSBleGNsdWRlZAorIyBmcm9tIHRoZSBpbnB1dC4KKyMgVGhlIGRlZmF1bHQgdmFsdWUgaXM6IE5PLgorCitFWENMVURFX1NZTUxJTktTICAgICAgID0gTk8KKworIyBJZiB0aGUgdmFsdWUgb2YgdGhlIElOUFVUIHRhZyBjb250YWlucyBkaXJlY3RvcmllcywgeW91IGNhbiB1c2UgdGhlCisjIEVYQ0xVREVfUEFUVEVSTlMgdGFnIHRvIHNwZWNpZnkgb25lIG9yIG1vcmUgd2lsZGNhcmQgcGF0dGVybnMgdG8gZXhjbHVkZQorIyBjZXJ0YWluIGZpbGVzIGZyb20gdGhvc2UgZGlyZWN0b3JpZXMuCisjCisjIE5vdGUgdGhhdCB0aGUgd2lsZGNhcmRzIGFyZSBtYXRjaGVkIGFnYWluc3QgdGhlIGZpbGUgd2l0aCBhYnNvbHV0ZSBwYXRoLCBzbyB0bworIyBleGNsdWRlIGFsbCB0ZXN0IGRpcmVjdG9yaWVzIGZvciBleGFtcGxlIHVzZSB0aGUgcGF0dGVybiAqL3Rlc3QvKgorCitFWENMVURFX1BBVFRFUk5TICAgICAgID0gLl8qCisKKyMgVGhlIEVYQ0xVREVfU1lNQk9MUyB0YWcgY2FuIGJlIHVzZWQgdG8gc3BlY2lmeSBvbmUgb3IgbW9yZSBzeW1ib2wgbmFtZXMKKyMgKG5hbWVzcGFjZXMsIGNsYXNzZXMsIGZ1bmN0aW9ucywgZXRjLikgdGhhdCBzaG91bGQgYmUgZXhjbHVkZWQgZnJvbSB0aGUKKyMgb3V0cHV0LiBUaGUgc3ltYm9sIG5hbWUgY2FuIGJlIGEgZnVsbHkgcXVhbGlmaWVkIG5hbWUsIGEgd29yZCwgb3IgaWYgdGhlCisjIHdpbGRjYXJkICogaXMgdXNlZCwgYSBzdWJzdHJpbmcuIEV4YW1wbGVzOiBBTmFtZXNwYWNlLCBBQ2xhc3MsCisjIEFDbGFzczo6QU5hbWVzcGFjZSwgQU5hbWVzcGFjZTo6KlRlc3QKKyMKKyMgTm90ZSB0aGF0IHRoZSB3aWxkY2FyZHMgYXJlIG1hdGNoZWQgYWdhaW5zdCB0aGUgZmlsZSB3aXRoIGFic29sdXRlIHBhdGgsIHNvIHRvCisjIGV4Y2x1ZGUgYWxsIHRlc3QgZGlyZWN0b3JpZXMgdXNlIHRoZSBwYXR0ZXJuICovdGVzdC8qCisKK0VYQ0xVREVfU1lNQk9MUyAgICAgICAgPSAKKworIyBUaGUgRVhBTVBMRV9QQVRIIHRhZyBjYW4gYmUgdXNlZCB0byBzcGVjaWZ5IG9uZSBvciBtb3JlIGZpbGVzIG9yIGRpcmVjdG9yaWVzCisjIHRoYXQgY29udGFpbiBleGFtcGxlIGNvZGUgZnJhZ21lbnRzIHRoYXQgYXJlIGluY2x1ZGVkIChzZWUgdGhlIFxpbmNsdWRlCisjIGNvbW1hbmQpLgorCitFWEFNUExFX1BBVEggICAgICAgICAgID0gCisKKyMgSWYgdGhlIHZhbHVlIG9mIHRoZSBFWEFNUExFX1BBVEggdGFnIGNvbnRhaW5zIGRpcmVjdG9yaWVzLCB5b3UgY2FuIHVzZSB0aGUKKyMgRVhBTVBMRV9QQVRURVJOUyB0YWcgdG8gc3BlY2lmeSBvbmUgb3IgbW9yZSB3aWxkY2FyZCBwYXR0ZXJuIChsaWtlICouY3BwIGFuZAorIyAqLmgpIHRvIGZpbHRlciBvdXQgdGhlIHNvdXJjZS1maWxlcyBpbiB0aGUgZGlyZWN0b3JpZXMuIElmIGxlZnQgYmxhbmsgYWxsCisjIGZpbGVzIGFyZSBpbmNsdWRlZC4KKworRVhBTVBMRV9QQVRURVJOUyAgICAgICA9ICoKKworIyBJZiB0aGUgRVhBTVBMRV9SRUNVUlNJVkUgdGFnIGlzIHNldCB0byBZRVMgdGhlbiBzdWJkaXJlY3RvcmllcyB3aWxsIGJlCisjIHNlYXJjaGVkIGZvciBpbnB1dCBmaWxlcyB0byBiZSB1c2VkIHdpdGggdGhlIFxpbmNsdWRlIG9yIFxkb250aW5jbHVkZSBjb21tYW5kcworIyBpcnJlc3BlY3RpdmUgb2YgdGhlIHZhbHVlIG9mIHRoZSBSRUNVUlNJVkUgdGFnLgorIyBUaGUgZGVmYXVsdCB2YWx1ZSBpczogTk8uCisKK0VYQU1QTEVfUkVDVVJTSVZFICAgICAgPSBOTworCisjIFRoZSBJTUFHRV9QQVRIIHRhZyBjYW4gYmUgdXNlZCB0byBzcGVjaWZ5IG9uZSBvciBtb3JlIGZpbGVzIG9yIGRpcmVjdG9yaWVzCisjIHRoYXQgY29udGFpbiBpbWFnZXMgdGhhdCBhcmUgdG8gYmUgaW5jbHVkZWQgaW4gdGhlIGRvY3VtZW50YXRpb24gKHNlZSB0aGUKKyMgXGltYWdlIGNvbW1hbmQpLgorCitJTUFHRV9QQVRIICAgICAgICAgICAgID0gCisKKyMgVGhlIElOUFVUX0ZJTFRFUiB0YWcgY2FuIGJlIHVzZWQgdG8gc3BlY2lmeSBhIHByb2dyYW0gdGhhdCBkb3h5Z2VuIHNob3VsZAorIyBpbnZva2UgdG8gZmlsdGVyIGZvciBlYWNoIGlucHV0IGZpbGUuIERveHlnZW4gd2lsbCBpbnZva2UgdGhlIGZpbHRlciBwcm9ncmFtCisjIGJ5IGV4ZWN1dGluZyAodmlhIHBvcGVuKCkpIHRoZSBjb21tYW5kOgorIworIyA8ZmlsdGVyPiA8aW5wdXQtZmlsZT4KKyMKKyMgd2hlcmUgPGZpbHRlcj4gaXMgdGhlIHZhbHVlIG9mIHRoZSBJTlBVVF9GSUxURVIgdGFnLCBhbmQgPGlucHV0LWZpbGU+IGlzIHRoZQorIyBuYW1lIG9mIGFuIGlucHV0IGZpbGUuIERveHlnZW4gd2lsbCB0aGVuIHVzZSB0aGUgb3V0cHV0IHRoYXQgdGhlIGZpbHRlcgorIyBwcm9ncmFtIHdyaXRlcyB0byBzdGFuZGFyZCBvdXRwdXQuIElmIEZJTFRFUl9QQVRURVJOUyBpcyBzcGVjaWZpZWQsIHRoaXMgdGFnCisjIHdpbGwgYmUgaWdub3JlZC4KKyMKKyMgTm90ZSB0aGF0IHRoZSBmaWx0ZXIgbXVzdCBub3QgYWRkIG9yIHJlbW92ZSBsaW5lczsgaXQgaXMgYXBwbGllZCBiZWZvcmUgdGhlCisjIGNvZGUgaXMgc2Nhbm5lZCwgYnV0IG5vdCB3aGVuIHRoZSBvdXRwdXQgY29kZSBpcyBnZW5lcmF0ZWQuIElmIGxpbmVzIGFyZSBhZGRlZAorIyBvciByZW1vdmVkLCB0aGUgYW5jaG9ycyB3aWxsIG5vdCBiZSBwbGFjZWQgY29ycmVjdGx5LgorIworIyBOb3RlIHRoYXQgZm9yIGN1c3RvbSBleHRlbnNpb25zIG9yIG5vdCBkaXJlY3RseSBzdXBwb3J0ZWQgZXh0ZW5zaW9ucyB5b3UgYWxzbworIyBuZWVkIHRvIHNldCBFWFRFTlNJT05fTUFQUElORyBmb3IgdGhlIGV4dGVuc2lvbiBvdGhlcndpc2UgdGhlIGZpbGVzIGFyZSBub3QKKyMgcHJvcGVybHkgcHJvY2Vzc2VkIGJ5IGRveHlnZW4uCisKK0lOUFVUX0ZJTFRFUiAgICAgICAgICAgPSBmcmFtZXdvcmtzL2F2L21lZGlhL2xpYnN0YWdlZnJpZ2h0L2NvZGVjMi9kb2NzL2RveHlmaWx0ZXIuc2gKKworIyBUaGUgRklMVEVSX1BBVFRFUk5TIHRhZyBjYW4gYmUgdXNlZCB0byBzcGVjaWZ5IGZpbHRlcnMgb24gYSBwZXIgZmlsZSBwYXR0ZXJuCisjIGJhc2lzLiBEb3h5Z2VuIHdpbGwgY29tcGFyZSB0aGUgZmlsZSBuYW1lIHdpdGggZWFjaCBwYXR0ZXJuIGFuZCBhcHBseSB0aGUKKyMgZmlsdGVyIGlmIHRoZXJlIGlzIGEgbWF0Y2guIFRoZSBmaWx0ZXJzIGFyZSBhIGxpc3Qgb2YgdGhlIGZvcm06IHBhdHRlcm49ZmlsdGVyCisjIChsaWtlICouY3BwPW15X2NwcF9maWx0ZXIpLiBTZWUgSU5QVVRfRklMVEVSIGZvciBmdXJ0aGVyIGluZm9ybWF0aW9uIG9uIGhvdworIyBmaWx0ZXJzIGFyZSB1c2VkLiBJZiB0aGUgRklMVEVSX1BBVFRFUk5TIHRhZyBpcyBlbXB0eSBvciBpZiBub25lIG9mIHRoZQorIyBwYXR0ZXJucyBtYXRjaCB0aGUgZmlsZSBuYW1lLCBJTlBVVF9GSUxURVIgaXMgYXBwbGllZC4KKyMKKyMgTm90ZSB0aGF0IGZvciBjdXN0b20gZXh0ZW5zaW9ucyBvciBub3QgZGlyZWN0bHkgc3VwcG9ydGVkIGV4dGVuc2lvbnMgeW91IGFsc28KKyMgbmVlZCB0byBzZXQgRVhURU5TSU9OX01BUFBJTkcgZm9yIHRoZSBleHRlbnNpb24gb3RoZXJ3aXNlIHRoZSBmaWxlcyBhcmUgbm90CisjIHByb3Blcmx5IHByb2Nlc3NlZCBieSBkb3h5Z2VuLgorCitGSUxURVJfUEFUVEVSTlMgICAgICAgID0gCisKKyMgSWYgdGhlIEZJTFRFUl9TT1VSQ0VfRklMRVMgdGFnIGlzIHNldCB0byBZRVMsIHRoZSBpbnB1dCBmaWx0ZXIgKGlmIHNldCB1c2luZworIyBJTlBVVF9GSUxURVIpIHdpbGwgYWxzbyBiZSB1c2VkIHRvIGZpbHRlciB0aGUgaW5wdXQgZmlsZXMgdGhhdCBhcmUgdXNlZCBmb3IKKyMgcHJvZHVjaW5nIHRoZSBzb3VyY2UgZmlsZXMgdG8gYnJvd3NlIChpLmUuIHdoZW4gU09VUkNFX0JST1dTRVIgaXMgc2V0IHRvIFlFUykuCisjIFRoZSBkZWZhdWx0IHZhbHVlIGlzOiBOTy4KKworRklMVEVSX1NPVVJDRV9GSUxFUyAgICA9IFlFUworCisjIFRoZSBGSUxURVJfU09VUkNFX1BBVFRFUk5TIHRhZyBjYW4gYmUgdXNlZCB0byBzcGVjaWZ5IHNvdXJjZSBmaWx0ZXJzIHBlciBmaWxlCisjIHBhdHRlcm4uIEEgcGF0dGVybiB3aWxsIG92ZXJyaWRlIHRoZSBzZXR0aW5nIGZvciBGSUxURVJfUEFUVEVSTiAoaWYgYW55KSBhbmQKKyMgaXQgaXMgYWxzbyBwb3NzaWJsZSB0byBkaXNhYmxlIHNvdXJjZSBmaWx0ZXJpbmcgZm9yIGEgc3BlY2lmaWMgcGF0dGVybiB1c2luZworIyAqLmV4dD0gKHNvIHdpdGhvdXQgbmFtaW5nIGEgZmlsdGVyKS4KKyMgVGhpcyB0YWcgcmVxdWlyZXMgdGhhdCB0aGUgdGFnIEZJTFRFUl9TT1VSQ0VfRklMRVMgaXMgc2V0IHRvIFlFUy4KKworRklMVEVSX1NPVVJDRV9QQVRURVJOUyA9IAorCisjIElmIHRoZSBVU0VfTURGSUxFX0FTX01BSU5QQUdFIHRhZyByZWZlcnMgdG8gdGhlIG5hbWUgb2YgYSBtYXJrZG93biBmaWxlIHRoYXQKKyMgaXMgcGFydCBvZiB0aGUgaW5wdXQsIGl0cyBjb250ZW50cyB3aWxsIGJlIHBsYWNlZCBvbiB0aGUgbWFpbiBwYWdlCisjIChpbmRleC5odG1sKS4gVGhpcyBjYW4gYmUgdXNlZnVsIGlmIHlvdSBoYXZlIGEgcHJvamVjdCBvbiBmb3IgaW5zdGFuY2UgR2l0SHViCisjIGFuZCB3YW50IHRvIHJldXNlIHRoZSBpbnRyb2R1Y3Rpb24gcGFnZSBhbHNvIGZvciB0aGUgZG94eWdlbiBvdXRwdXQuCisKK1VTRV9NREZJTEVfQVNfTUFJTlBBR0UgPSAKKworIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBDb25maWd1cmF0aW9uIG9wdGlvbnMgcmVsYXRlZCB0byBzb3VyY2UgYnJvd3NpbmcKKyMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworIyBJZiB0aGUgU09VUkNFX0JST1dTRVIgdGFnIGlzIHNldCB0byBZRVMgdGhlbiBhIGxpc3Qgb2Ygc291cmNlIGZpbGVzIHdpbGwgYmUKKyMgZ2VuZXJhdGVkLiBEb2N1bWVudGVkIGVudGl0aWVzIHdpbGwgYmUgY3Jvc3MtcmVmZXJlbmNlZCB3aXRoIHRoZXNlIHNvdXJjZXMuCisjCisjIE5vdGU6IFRvIGdldCByaWQgb2YgYWxsIHNvdXJjZSBjb2RlIGluIHRoZSBnZW5lcmF0ZWQgb3V0cHV0LCBtYWtlIHN1cmUgdGhhdAorIyBhbHNvIFZFUkJBVElNX0hFQURFUlMgaXMgc2V0IHRvIE5PLgorIyBUaGUgZGVmYXVsdCB2YWx1ZSBpczogTk8uCisKK1NPVVJDRV9CUk9XU0VSICAgICAgICAgPSBZRVMKKworIyBTZXR0aW5nIHRoZSBJTkxJTkVfU09VUkNFUyB0YWcgdG8gWUVTIHdpbGwgaW5jbHVkZSB0aGUgYm9keSBvZiBmdW5jdGlvbnMsCisjIGNsYXNzZXMgYW5kIGVudW1zIGRpcmVjdGx5IGludG8gdGhlIGRvY3VtZW50YXRpb24uCisjIFRoZSBkZWZhdWx0IHZhbHVlIGlzOiBOTy4KKworSU5MSU5FX1NPVVJDRVMgICAgICAgICA9IE5PCisKKyMgU2V0dGluZyB0aGUgU1RSSVBfQ09ERV9DT01NRU5UUyB0YWcgdG8gWUVTIHdpbGwgaW5zdHJ1Y3QgZG94eWdlbiB0byBoaWRlIGFueQorIyBzcGVjaWFsIGNvbW1lbnQgYmxvY2tzIGZyb20gZ2VuZXJhdGVkIHNvdXJjZSBjb2RlIGZyYWdtZW50cy4gTm9ybWFsIEMsIEMrKyBhbmQKKyMgRm9ydHJhbiBjb21tZW50cyB3aWxsIGFsd2F5cyByZW1haW4gdmlzaWJsZS4KKyMgVGhlIGRlZmF1bHQgdmFsdWUgaXM6IFlFUy4KKworU1RSSVBfQ09ERV9DT01NRU5UUyAgICA9IFlFUworCisjIElmIHRoZSBSRUZFUkVOQ0VEX0JZX1JFTEFUSU9OIHRhZyBpcyBzZXQgdG8gWUVTIHRoZW4gZm9yIGVhY2ggZG9jdW1lbnRlZAorIyBmdW5jdGlvbiBhbGwgZG9jdW1lbnRlZCBmdW5jdGlvbnMgcmVmZXJlbmNpbmcgaXQgd2lsbCBiZSBsaXN0ZWQuCisjIFRoZSBkZWZhdWx0IHZhbHVlIGlzOiBOTy4KKworUkVGRVJFTkNFRF9CWV9SRUxBVElPTiA9IFlFUworCisjIElmIHRoZSBSRUZFUkVOQ0VTX1JFTEFUSU9OIHRhZyBpcyBzZXQgdG8gWUVTIHRoZW4gZm9yIGVhY2ggZG9jdW1lbnRlZCBmdW5jdGlvbgorIyBhbGwgZG9jdW1lbnRlZCBlbnRpdGllcyBjYWxsZWQvdXNlZCBieSB0aGF0IGZ1bmN0aW9uIHdpbGwgYmUgbGlzdGVkLgorIyBUaGUgZGVmYXVsdCB2YWx1ZSBpczogTk8uCisKK1JFRkVSRU5DRVNfUkVMQVRJT04gICAgPSBZRVMKKworIyBJZiB0aGUgUkVGRVJFTkNFU19MSU5LX1NPVVJDRSB0YWcgaXMgc2V0IHRvIFlFUyBhbmQgU09VUkNFX0JST1dTRVIgdGFnIGlzIHNldAorIyB0byBZRVMgdGhlbiB0aGUgaHlwZXJsaW5rcyBmcm9tIGZ1bmN0aW9ucyBpbiBSRUZFUkVOQ0VTX1JFTEFUSU9OIGFuZAorIyBSRUZFUkVOQ0VEX0JZX1JFTEFUSU9OIGxpc3RzIHdpbGwgbGluayB0byB0aGUgc291cmNlIGNvZGUuIE90aGVyd2lzZSB0aGV5IHdpbGwKKyMgbGluayB0byB0aGUgZG9jdW1lbnRhdGlvbi4KKyMgVGhlIGRlZmF1bHQgdmFsdWUgaXM6IFlFUy4KKworUkVGRVJFTkNFU19MSU5LX1NPVVJDRSA9IFlFUworCisjIElmIFNPVVJDRV9UT09MVElQUyBpcyBlbmFibGVkICh0aGUgZGVmYXVsdCkgdGhlbiBob3ZlcmluZyBhIGh5cGVybGluayBpbiB0aGUKKyMgc291cmNlIGNvZGUgd2lsbCBzaG93IGEgdG9vbHRpcCB3aXRoIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gc3VjaCBhcyBwcm90b3R5cGUsCisjIGJyaWVmIGRlc2NyaXB0aW9uIGFuZCBsaW5rcyB0byB0aGUgZGVmaW5pdGlvbiBhbmQgZG9jdW1lbnRhdGlvbi4gU2luY2UgdGhpcworIyB3aWxsIG1ha2UgdGhlIEhUTUwgZmlsZSBsYXJnZXIgYW5kIGxvYWRpbmcgb2YgbGFyZ2UgZmlsZXMgYSBiaXQgc2xvd2VyLCB5b3UKKyMgY2FuIG9wdCB0byBkaXNhYmxlIHRoaXMgZmVhdHVyZS4KKyMgVGhlIGRlZmF1bHQgdmFsdWUgaXM6IFlFUy4KKyMgVGhpcyB0YWcgcmVxdWlyZXMgdGhhdCB0aGUgdGFnIFNPVVJDRV9CUk9XU0VSIGlzIHNldCB0byBZRVMuCisKK1NPVVJDRV9UT09MVElQUyAgICAgICAgPSBZRVMKKworIyBJZiB0aGUgVVNFX0hUQUdTIHRhZyBpcyBzZXQgdG8gWUVTIHRoZW4gdGhlIHJlZmVyZW5jZXMgdG8gc291cmNlIGNvZGUgd2lsbAorIyBwb2ludCB0byB0aGUgSFRNTCBnZW5lcmF0ZWQgYnkgdGhlIGh0YWdzKDEpIHRvb2wgaW5zdGVhZCBvZiBkb3h5Z2VuIGJ1aWx0LWluCisjIHNvdXJjZSBicm93c2VyLiBUaGUgaHRhZ3MgdG9vbCBpcyBwYXJ0IG9mIEdOVSdzIGdsb2JhbCBzb3VyY2UgdGFnZ2luZyBzeXN0ZW0KKyMgKHNlZSBodHRwOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvZ2xvYmFsL2dsb2JhbC5odG1sKS4gWW91IHdpbGwgbmVlZCB2ZXJzaW9uCisjIDQuOC42IG9yIGhpZ2hlci4KKyMKKyMgVG8gdXNlIGl0IGRvIHRoZSBmb2xsb3dpbmc6CisjIC0gSW5zdGFsbCB0aGUgbGF0ZXN0IHZlcnNpb24gb2YgZ2xvYmFsCisjIC0gRW5hYmxlIFNPVVJDRV9CUk9XU0VSIGFuZCBVU0VfSFRBR1MgaW4gdGhlIGNvbmZpZyBmaWxlCisjIC0gTWFrZSBzdXJlIHRoZSBJTlBVVCBwb2ludHMgdG8gdGhlIHJvb3Qgb2YgdGhlIHNvdXJjZSB0cmVlCisjIC0gUnVuIGRveHlnZW4gYXMgbm9ybWFsCisjCisjIERveHlnZW4gd2lsbCBpbnZva2UgaHRhZ3MgKGFuZCB0aGF0IHdpbGwgaW4gdHVybiBpbnZva2UgZ3RhZ3MpLCBzbyB0aGVzZQorIyB0b29scyBtdXN0IGJlIGF2YWlsYWJsZSBmcm9tIHRoZSBjb21tYW5kIGxpbmUgKGkuZS4gaW4gdGhlIHNlYXJjaCBwYXRoKS4KKyMKKyMgVGhlIHJlc3VsdDogaW5zdGVhZCBvZiB0aGUgc291cmNlIGJyb3dzZXIgZ2VuZXJhdGVkIGJ5IGRveHlnZW4sIHRoZSBsaW5rcyB0bworIyBzb3VyY2UgY29kZSB3aWxsIG5vdyBwb2ludCB0byB0aGUgb3V0cHV0IG9mIGh0YWdzLgorIyBUaGUgZGVmYXVsdCB2YWx1ZSBpczogTk8uCisjIFRoaXMgdGFnIHJlcXVpcmVzIHRoYXQgdGhlIHRhZyBTT1VSQ0VfQlJPV1NFUiBpcyBzZXQgdG8gWUVTLgorCitVU0VfSFRBR1MgICAgICAgICAgICAgID0gTk8KKworIyBJZiB0aGUgVkVSQkFUSU1fSEVBREVSUyB0YWcgaXMgc2V0IHRoZSBZRVMgdGhlbiBkb3h5Z2VuIHdpbGwgZ2VuZXJhdGUgYQorIyB2ZXJiYXRpbSBjb3B5IG9mIHRoZSBoZWFkZXIgZmlsZSBmb3IgZWFjaCBjbGFzcyBmb3Igd2hpY2ggYW4gaW5jbHVkZSBpcworIyBzcGVjaWZpZWQuIFNldCB0byBOTyB0byBkaXNhYmxlIHRoaXMuCisjIFNlZSBhbHNvOiBTZWN0aW9uIFxjbGFzcy4KKyMgVGhlIGRlZmF1bHQgdmFsdWUgaXM6IFlFUy4KKworVkVSQkFUSU1fSEVBREVSUyAgICAgICA9IFlFUworCisjIElmIHRoZSBDTEFOR19BU1NJU1RFRF9QQVJTSU5HIHRhZyBpcyBzZXQgdG8gWUVTIHRoZW4gZG94eWdlbiB3aWxsIHVzZSB0aGUKKyMgY2xhbmcgcGFyc2VyIChzZWU6IGh0dHA6Ly9jbGFuZy5sbHZtLm9yZy8pIGZvciBtb3JlIGFjY3VyYXRlIHBhcnNpbmcgYXQgdGhlCisjIGNvc3Qgb2YgcmVkdWNlZCBwZXJmb3JtYW5jZS4gVGhpcyBjYW4gYmUgcGFydGljdWxhcmx5IGhlbHBmdWwgd2l0aCB0ZW1wbGF0ZQorIyByaWNoIEMrKyBjb2RlIGZvciB3aGljaCBkb3h5Z2VuJ3MgYnVpbHQtaW4gcGFyc2VyIGxhY2tzIHRoZSBuZWNlc3NhcnkgdHlwZQorIyBpbmZvcm1hdGlvbi4KKyMgTm90ZTogVGhlIGF2YWlsYWJpbGl0eSBvZiB0aGlzIG9wdGlvbiBkZXBlbmRzIG9uIHdoZXRoZXIgb3Igbm90IGRveHlnZW4gd2FzCisjIGdlbmVyYXRlZCB3aXRoIHRoZSAtRHVzZS1saWJjbGFuZz1PTiBvcHRpb24gZm9yIENNYWtlLgorIyBUaGUgZGVmYXVsdCB2YWx1ZSBpczogTk8uCisKK0NMQU5HX0FTU0lTVEVEX1BBUlNJTkcgPSBZRVMKKworIyBJZiBjbGFuZyBhc3Npc3RlZCBwYXJzaW5nIGlzIGVuYWJsZWQgeW91IGNhbiBwcm92aWRlIHRoZSBjb21waWxlciB3aXRoIGNvbW1hbmQKKyMgbGluZSBvcHRpb25zIHRoYXQgeW91IHdvdWxkIG5vcm1hbGx5IHVzZSB3aGVuIGludm9raW5nIHRoZSBjb21waWxlci4gTm90ZSB0aGF0CisjIHRoZSBpbmNsdWRlIHBhdGhzIHdpbGwgYWxyZWFkeSBiZSBzZXQgYnkgZG94eWdlbiBmb3IgdGhlIGZpbGVzIGFuZCBkaXJlY3RvcmllcworIyBzcGVjaWZpZWQgd2l0aCBJTlBVVCBhbmQgSU5DTFVERV9QQVRILgorIyBUaGlzIHRhZyByZXF1aXJlcyB0aGF0IHRoZSB0YWcgQ0xBTkdfQVNTSVNURURfUEFSU0lORyBpcyBzZXQgdG8gWUVTLgorCitDTEFOR19PUFRJT05TICAgICAgICAgID0gLXN0ZD1jKysxNAorCisjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIENvbmZpZ3VyYXRpb24gb3B0aW9ucyByZWxhdGVkIHRvIHRoZSBhbHBoYWJldGljYWwgY2xhc3MgaW5kZXgKKyMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworIyBJZiB0aGUgQUxQSEFCRVRJQ0FMX0lOREVYIHRhZyBpcyBzZXQgdG8gWUVTLCBhbiBhbHBoYWJldGljYWwgaW5kZXggb2YgYWxsCisjIGNvbXBvdW5kcyB3aWxsIGJlIGdlbmVyYXRlZC4gRW5hYmxlIHRoaXMgaWYgdGhlIHByb2plY3QgY29udGFpbnMgYSBsb3Qgb2YKKyMgY2xhc3Nlcywgc3RydWN0cywgdW5pb25zIG9yIGludGVyZmFjZXMuCisjIFRoZSBkZWZhdWx0IHZhbHVlIGlzOiBZRVMuCisKK0FMUEhBQkVUSUNBTF9JTkRFWCAgICAgPSBZRVMKKworIyBUaGUgQ09MU19JTl9BTFBIQV9JTkRFWCB0YWcgY2FuIGJlIHVzZWQgdG8gc3BlY2lmeSB0aGUgbnVtYmVyIG9mIGNvbHVtbnMgaW4KKyMgd2hpY2ggdGhlIGFscGhhYmV0aWNhbCBpbmRleCBsaXN0IHdpbGwgYmUgc3BsaXQuCisjIE1pbmltdW0gdmFsdWU6IDEsIG1heGltdW0gdmFsdWU6IDIwLCBkZWZhdWx0IHZhbHVlOiA1LgorIyBUaGlzIHRhZyByZXF1aXJlcyB0aGF0IHRoZSB0YWcgQUxQSEFCRVRJQ0FMX0lOREVYIGlzIHNldCB0byBZRVMuCisKK0NPTFNfSU5fQUxQSEFfSU5ERVggICAgPSA1CisKKyMgSW4gY2FzZSBhbGwgY2xhc3NlcyBpbiBhIHByb2plY3Qgc3RhcnQgd2l0aCBhIGNvbW1vbiBwcmVmaXgsIGFsbCBjbGFzc2VzIHdpbGwKKyMgYmUgcHV0IHVuZGVyIHRoZSBzYW1lIGhlYWRlciBpbiB0aGUgYWxwaGFiZXRpY2FsIGluZGV4LiBUaGUgSUdOT1JFX1BSRUZJWCB0YWcKKyMgY2FuIGJlIHVzZWQgdG8gc3BlY2lmeSBhIHByZWZpeCAob3IgYSBsaXN0IG9mIHByZWZpeGVzKSB0aGF0IHNob3VsZCBiZSBpZ25vcmVkCisjIHdoaWxlIGdlbmVyYXRpbmcgdGhlIGluZGV4IGhlYWRlcnMuCisjIFRoaXMgdGFnIHJlcXVpcmVzIHRoYXQgdGhlIHRhZyBBTFBIQUJFVElDQUxfSU5ERVggaXMgc2V0IHRvIFlFUy4KKworSUdOT1JFX1BSRUZJWCAgICAgICAgICA9IAorCisjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIENvbmZpZ3VyYXRpb24gb3B0aW9ucyByZWxhdGVkIHRvIHRoZSBIVE1MIG91dHB1dAorIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisjIElmIHRoZSBHRU5FUkFURV9IVE1MIHRhZyBpcyBzZXQgdG8gWUVTLCBkb3h5Z2VuIHdpbGwgZ2VuZXJhdGUgSFRNTCBvdXRwdXQKKyMgVGhlIGRlZmF1bHQgdmFsdWUgaXM6IFlFUy4KKworR0VORVJBVEVfSFRNTCAgICAgICAgICA9IFlFUworCisjIFRoZSBIVE1MX09VVFBVVCB0YWcgaXMgdXNlZCB0byBzcGVjaWZ5IHdoZXJlIHRoZSBIVE1MIGRvY3Mgd2lsbCBiZSBwdXQuIElmIGEKKyMgcmVsYXRpdmUgcGF0aCBpcyBlbnRlcmVkIHRoZSB2YWx1ZSBvZiBPVVRQVVRfRElSRUNUT1JZIHdpbGwgYmUgcHV0IGluIGZyb250IG9mCisjIGl0LgorIyBUaGUgZGVmYXVsdCBkaXJlY3RvcnkgaXM6IGh0bWwuCisjIFRoaXMgdGFnIHJlcXVpcmVzIHRoYXQgdGhlIHRhZyBHRU5FUkFURV9IVE1MIGlzIHNldCB0byBZRVMuCisKK0hUTUxfT1VUUFVUICAgICAgICAgICAgPSBodG1sCisKKyMgVGhlIEhUTUxfRklMRV9FWFRFTlNJT04gdGFnIGNhbiBiZSB1c2VkIHRvIHNwZWNpZnkgdGhlIGZpbGUgZXh0ZW5zaW9uIGZvciBlYWNoCisjIGdlbmVyYXRlZCBIVE1MIHBhZ2UgKGZvciBleGFtcGxlOiAuaHRtLCAucGhwLCAuYXNwKS4KKyMgVGhlIGRlZmF1bHQgdmFsdWUgaXM6IC5odG1sLgorIyBUaGlzIHRhZyByZXF1aXJlcyB0aGF0IHRoZSB0YWcgR0VORVJBVEVfSFRNTCBpcyBzZXQgdG8gWUVTLgorCitIVE1MX0ZJTEVfRVhURU5TSU9OICAgID0gLmh0bWwKKworIyBUaGUgSFRNTF9IRUFERVIgdGFnIGNhbiBiZSB1c2VkIHRvIHNwZWNpZnkgYSB1c2VyLWRlZmluZWQgSFRNTCBoZWFkZXIgZmlsZSBmb3IKKyMgZWFjaCBnZW5lcmF0ZWQgSFRNTCBwYWdlLiBJZiB0aGUgdGFnIGlzIGxlZnQgYmxhbmsgZG94eWdlbiB3aWxsIGdlbmVyYXRlIGEKKyMgc3RhbmRhcmQgaGVhZGVyLgorIworIyBUbyBnZXQgdmFsaWQgSFRNTCB0aGUgaGVhZGVyIGZpbGUgdGhhdCBpbmNsdWRlcyBhbnkgc2NyaXB0cyBhbmQgc3R5bGUgc2hlZXRzCisjIHRoYXQgZG94eWdlbiBuZWVkcywgd2hpY2ggaXMgZGVwZW5kZW50IG9uIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgdXNlZCAoZS5nLgorIyB0aGUgc2V0dGluZyBHRU5FUkFURV9UUkVFVklFVykuIEl0IGlzIGhpZ2hseSByZWNvbW1lbmRlZCB0byBzdGFydCB3aXRoIGEKKyMgZGVmYXVsdCBoZWFkZXIgdXNpbmcKKyMgZG94eWdlbiAtdyBodG1sIG5ld19oZWFkZXIuaHRtbCBuZXdfZm9vdGVyLmh0bWwgbmV3X3N0eWxlc2hlZXQuY3NzCisjIFlvdXJDb25maWdGaWxlCisjIGFuZCB0aGVuIG1vZGlmeSB0aGUgZmlsZSBuZXdfaGVhZGVyLmh0bWwuIFNlZSBhbHNvIHNlY3Rpb24gIkRveHlnZW4gdXNhZ2UiCisjIGZvciBpbmZvcm1hdGlvbiBvbiBob3cgdG8gZ2VuZXJhdGUgdGhlIGRlZmF1bHQgaGVhZGVyIHRoYXQgZG94eWdlbiBub3JtYWxseQorIyB1c2VzLgorIyBOb3RlOiBUaGUgaGVhZGVyIGlzIHN1YmplY3QgdG8gY2hhbmdlIHNvIHlvdSB0eXBpY2FsbHkgaGF2ZSB0byByZWdlbmVyYXRlIHRoZQorIyBkZWZhdWx0IGhlYWRlciB3aGVuIHVwZ3JhZGluZyB0byBhIG5ld2VyIHZlcnNpb24gb2YgZG94eWdlbi4gRm9yIGEgZGVzY3JpcHRpb24KKyMgb2YgdGhlIHBvc3NpYmxlIG1hcmtlcnMgYW5kIGJsb2NrIG5hbWVzIHNlZSB0aGUgZG9jdW1lbnRhdGlvbi4KKyMgVGhpcyB0YWcgcmVxdWlyZXMgdGhhdCB0aGUgdGFnIEdFTkVSQVRFX0hUTUwgaXMgc2V0IHRvIFlFUy4KKworSFRNTF9IRUFERVIgICAgICAgICAgICA9IAorCisjIFRoZSBIVE1MX0ZPT1RFUiB0YWcgY2FuIGJlIHVzZWQgdG8gc3BlY2lmeSBhIHVzZXItZGVmaW5lZCBIVE1MIGZvb3RlciBmb3IgZWFjaAorIyBnZW5lcmF0ZWQgSFRNTCBwYWdlLiBJZiB0aGUgdGFnIGlzIGxlZnQgYmxhbmsgZG94eWdlbiB3aWxsIGdlbmVyYXRlIGEgc3RhbmRhcmQKKyMgZm9vdGVyLiBTZWUgSFRNTF9IRUFERVIgZm9yIG1vcmUgaW5mb3JtYXRpb24gb24gaG93IHRvIGdlbmVyYXRlIGEgZGVmYXVsdAorIyBmb290ZXIgYW5kIHdoYXQgc3BlY2lhbCBjb21tYW5kcyBjYW4gYmUgdXNlZCBpbnNpZGUgdGhlIGZvb3Rlci4gU2VlIGFsc28KKyMgc2VjdGlvbiAiRG94eWdlbiB1c2FnZSIgZm9yIGluZm9ybWF0aW9uIG9uIGhvdyB0byBnZW5lcmF0ZSB0aGUgZGVmYXVsdCBmb290ZXIKKyMgdGhhdCBkb3h5Z2VuIG5vcm1hbGx5IHVzZXMuCisjIFRoaXMgdGFnIHJlcXVpcmVzIHRoYXQgdGhlIHRhZyBHRU5FUkFURV9IVE1MIGlzIHNldCB0byBZRVMuCisKK0hUTUxfRk9PVEVSICAgICAgICAgICAgPSAKKworIyBUaGUgSFRNTF9TVFlMRVNIRUVUIHRhZyBjYW4gYmUgdXNlZCB0byBzcGVjaWZ5IGEgdXNlci1kZWZpbmVkIGNhc2NhZGluZyBzdHlsZQorIyBzaGVldCB0aGF0IGlzIHVzZWQgYnkgZWFjaCBIVE1MIHBhZ2UuIEl0IGNhbiBiZSB1c2VkIHRvIGZpbmUtdHVuZSB0aGUgbG9vayBvZgorIyB0aGUgSFRNTCBvdXRwdXQuIElmIGxlZnQgYmxhbmsgZG94eWdlbiB3aWxsIGdlbmVyYXRlIGEgZGVmYXVsdCBzdHlsZSBzaGVldC4KKyMgU2VlIGFsc28gc2VjdGlvbiAiRG94eWdlbiB1c2FnZSIgZm9yIGluZm9ybWF0aW9uIG9uIGhvdyB0byBnZW5lcmF0ZSB0aGUgc3R5bGUKKyMgc2hlZXQgdGhhdCBkb3h5Z2VuIG5vcm1hbGx5IHVzZXMuCisjIE5vdGU6IEl0IGlzIHJlY29tbWVuZGVkIHRvIHVzZSBIVE1MX0VYVFJBX1NUWUxFU0hFRVQgaW5zdGVhZCBvZiB0aGlzIHRhZywgYXMKKyMgaXQgaXMgbW9yZSByb2J1c3QgYW5kIHRoaXMgdGFnIChIVE1MX1NUWUxFU0hFRVQpIHdpbGwgaW4gdGhlIGZ1dHVyZSBiZWNvbWUKKyMgb2Jzb2xldGUuCisjIFRoaXMgdGFnIHJlcXVpcmVzIHRoYXQgdGhlIHRhZyBHRU5FUkFURV9IVE1MIGlzIHNldCB0byBZRVMuCisKK0hUTUxfU1RZTEVTSEVFVCAgICAgICAgPSAKKworIyBUaGUgSFRNTF9FWFRSQV9TVFlMRVNIRUVUIHRhZyBjYW4gYmUgdXNlZCB0byBzcGVjaWZ5IGFkZGl0aW9uYWwgdXNlci1kZWZpbmVkCisjIGNhc2NhZGluZyBzdHlsZSBzaGVldHMgdGhhdCBhcmUgaW5jbHVkZWQgYWZ0ZXIgdGhlIHN0YW5kYXJkIHN0eWxlIHNoZWV0cworIyBjcmVhdGVkIGJ5IGRveHlnZW4uIFVzaW5nIHRoaXMgb3B0aW9uIG9uZSBjYW4gb3ZlcnJ1bGUgY2VydGFpbiBzdHlsZSBhc3BlY3RzLgorIyBUaGlzIGlzIHByZWZlcnJlZCBvdmVyIHVzaW5nIEhUTUxfU1RZTEVTSEVFVCBzaW5jZSBpdCBkb2VzIG5vdCByZXBsYWNlIHRoZQorIyBzdGFuZGFyZCBzdHlsZSBzaGVldCBhbmQgaXMgdGhlcmVmb3JlIG1vcmUgcm9idXN0IGFnYWluc3QgZnV0dXJlIHVwZGF0ZXMuCisjIERveHlnZW4gd2lsbCBjb3B5IHRoZSBzdHlsZSBzaGVldCBmaWxlcyB0byB0aGUgb3V0cHV0IGRpcmVjdG9yeS4KKyMgTm90ZTogVGhlIG9yZGVyIG9mIHRoZSBleHRyYSBzdHlsZSBzaGVldCBmaWxlcyBpcyBvZiBpbXBvcnRhbmNlIChlLmcuIHRoZSBsYXN0CisjIHN0eWxlIHNoZWV0IGluIHRoZSBsaXN0IG92ZXJydWxlcyB0aGUgc2V0dGluZyBvZiB0aGUgcHJldmlvdXMgb25lcyBpbiB0aGUKKyMgbGlzdCkuIEZvciBhbiBleGFtcGxlIHNlZSB0aGUgZG9jdW1lbnRhdGlvbi4KKyMgVGhpcyB0YWcgcmVxdWlyZXMgdGhhdCB0aGUgdGFnIEdFTkVSQVRFX0hUTUwgaXMgc2V0IHRvIFlFUy4KKworSFRNTF9FWFRSQV9TVFlMRVNIRUVUICA9IAorCisjIFRoZSBIVE1MX0VYVFJBX0ZJTEVTIHRhZyBjYW4gYmUgdXNlZCB0byBzcGVjaWZ5IG9uZSBvciBtb3JlIGV4dHJhIGltYWdlcyBvcgorIyBvdGhlciBzb3VyY2UgZmlsZXMgd2hpY2ggc2hvdWxkIGJlIGNvcGllZCB0byB0aGUgSFRNTCBvdXRwdXQgZGlyZWN0b3J5LiBOb3RlCisjIHRoYXQgdGhlc2UgZmlsZXMgd2lsbCBiZSBjb3BpZWQgdG8gdGhlIGJhc2UgSFRNTCBvdXRwdXQgZGlyZWN0b3J5LiBVc2UgdGhlCisjICRyZWxwYXRoXiBtYXJrZXIgaW4gdGhlIEhUTUxfSEVBREVSIGFuZC9vciBIVE1MX0ZPT1RFUiBmaWxlcyB0byBsb2FkIHRoZXNlCisjIGZpbGVzLiBJbiB0aGUgSFRNTF9TVFlMRVNIRUVUIGZpbGUsIHVzZSB0aGUgZmlsZSBuYW1lIG9ubHkuIEFsc28gbm90ZSB0aGF0IHRoZQorIyBmaWxlcyB3aWxsIGJlIGNvcGllZCBhcy1pczsgdGhlcmUgYXJlIG5vIGNvbW1hbmRzIG9yIG1hcmtlcnMgYXZhaWxhYmxlLgorIyBUaGlzIHRhZyByZXF1aXJlcyB0aGF0IHRoZSB0YWcgR0VORVJBVEVfSFRNTCBpcyBzZXQgdG8gWUVTLgorCitIVE1MX0VYVFJBX0ZJTEVTICAgICAgID0gCisKKyMgVGhlIEhUTUxfQ09MT1JTVFlMRV9IVUUgdGFnIGNvbnRyb2xzIHRoZSBjb2xvciBvZiB0aGUgSFRNTCBvdXRwdXQuIERveHlnZW4KKyMgd2lsbCBhZGp1c3QgdGhlIGNvbG9ycyBpbiB0aGUgc3R5bGUgc2hlZXQgYW5kIGJhY2tncm91bmQgaW1hZ2VzIGFjY29yZGluZyB0bworIyB0aGlzIGNvbG9yLiBIdWUgaXMgc3BlY2lmaWVkIGFzIGFuIGFuZ2xlIG9uIGEgY29sb3J3aGVlbCwgc2VlCisjIGh0dHA6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvSHVlIGZvciBtb3JlIGluZm9ybWF0aW9uLiBGb3IgaW5zdGFuY2UgdGhlIHZhbHVlCisjIDAgcmVwcmVzZW50cyByZWQsIDYwIGlzIHllbGxvdywgMTIwIGlzIGdyZWVuLCAxODAgaXMgY3lhbiwgMjQwIGlzIGJsdWUsIDMwMAorIyBwdXJwbGUsIGFuZCAzNjAgaXMgcmVkIGFnYWluLgorIyBNaW5pbXVtIHZhbHVlOiAwLCBtYXhpbXVtIHZhbHVlOiAzNTksIGRlZmF1bHQgdmFsdWU6IDIyMC4KKyMgVGhpcyB0YWcgcmVxdWlyZXMgdGhhdCB0aGUgdGFnIEdFTkVSQVRFX0hUTUwgaXMgc2V0IHRvIFlFUy4KKworSFRNTF9DT0xPUlNUWUxFX0hVRSAgICA9IDIyMAorCisjIFRoZSBIVE1MX0NPTE9SU1RZTEVfU0FUIHRhZyBjb250cm9scyB0aGUgcHVyaXR5IChvciBzYXR1cmF0aW9uKSBvZiB0aGUgY29sb3JzCisjIGluIHRoZSBIVE1MIG91dHB1dC4gRm9yIGEgdmFsdWUgb2YgMCB0aGUgb3V0cHV0IHdpbGwgdXNlIGdyYXlzY2FsZXMgb25seS4gQQorIyB2YWx1ZSBvZiAyNTUgd2lsbCBwcm9kdWNlIHRoZSBtb3N0IHZpdmlkIGNvbG9ycy4KKyMgTWluaW11bSB2YWx1ZTogMCwgbWF4aW11bSB2YWx1ZTogMjU1LCBkZWZhdWx0IHZhbHVlOiAxMDAuCisjIFRoaXMgdGFnIHJlcXVpcmVzIHRoYXQgdGhlIHRhZyBHRU5FUkFURV9IVE1MIGlzIHNldCB0byBZRVMuCisKK0hUTUxfQ09MT1JTVFlMRV9TQVQgICAgPSAxMDAKKworIyBUaGUgSFRNTF9DT0xPUlNUWUxFX0dBTU1BIHRhZyBjb250cm9scyB0aGUgZ2FtbWEgY29ycmVjdGlvbiBhcHBsaWVkIHRvIHRoZQorIyBsdW1pbmFuY2UgY29tcG9uZW50IG9mIHRoZSBjb2xvcnMgaW4gdGhlIEhUTUwgb3V0cHV0LiBWYWx1ZXMgYmVsb3cgMTAwCisjIGdyYWR1YWxseSBtYWtlIHRoZSBvdXRwdXQgbGlnaHRlciwgd2hlcmVhcyB2YWx1ZXMgYWJvdmUgMTAwIG1ha2UgdGhlIG91dHB1dAorIyBkYXJrZXIuIFRoZSB2YWx1ZSBkaXZpZGVkIGJ5IDEwMCBpcyB0aGUgYWN0dWFsIGdhbW1hIGFwcGxpZWQsIHNvIDgwIHJlcHJlc2VudHMKKyMgYSBnYW1tYSBvZiAwLjgsIFRoZSB2YWx1ZSAyMjAgcmVwcmVzZW50cyBhIGdhbW1hIG9mIDIuMiwgYW5kIDEwMCBkb2VzIG5vdAorIyBjaGFuZ2UgdGhlIGdhbW1hLgorIyBNaW5pbXVtIHZhbHVlOiA0MCwgbWF4aW11bSB2YWx1ZTogMjQwLCBkZWZhdWx0IHZhbHVlOiA4MC4KKyMgVGhpcyB0YWcgcmVxdWlyZXMgdGhhdCB0aGUgdGFnIEdFTkVSQVRFX0hUTUwgaXMgc2V0IHRvIFlFUy4KKworSFRNTF9DT0xPUlNUWUxFX0dBTU1BICA9IDgwCisKKyMgSWYgdGhlIEhUTUxfVElNRVNUQU1QIHRhZyBpcyBzZXQgdG8gWUVTIHRoZW4gdGhlIGZvb3RlciBvZiBlYWNoIGdlbmVyYXRlZCBIVE1MCisjIHBhZ2Ugd2lsbCBjb250YWluIHRoZSBkYXRlIGFuZCB0aW1lIHdoZW4gdGhlIHBhZ2Ugd2FzIGdlbmVyYXRlZC4gU2V0dGluZyB0aGlzCisjIHRvIFlFUyBjYW4gaGVscCB0byBzaG93IHdoZW4gZG94eWdlbiB3YXMgbGFzdCBydW4gYW5kIHRodXMgaWYgdGhlCisjIGRvY3VtZW50YXRpb24gaXMgdXAgdG8gZGF0ZS4KKyMgVGhlIGRlZmF1bHQgdmFsdWUgaXM6IE5PLgorIyBUaGlzIHRhZyByZXF1aXJlcyB0aGF0IHRoZSB0YWcgR0VORVJBVEVfSFRNTCBpcyBzZXQgdG8gWUVTLgorCitIVE1MX1RJTUVTVEFNUCAgICAgICAgID0gTk8KKworIyBJZiB0aGUgSFRNTF9EWU5BTUlDX1NFQ1RJT05TIHRhZyBpcyBzZXQgdG8gWUVTIHRoZW4gdGhlIGdlbmVyYXRlZCBIVE1MCisjIGRvY3VtZW50YXRpb24gd2lsbCBjb250YWluIHNlY3Rpb25zIHRoYXQgY2FuIGJlIGhpZGRlbiBhbmQgc2hvd24gYWZ0ZXIgdGhlCisjIHBhZ2UgaGFzIGxvYWRlZC4KKyMgVGhlIGRlZmF1bHQgdmFsdWUgaXM6IE5PLgorIyBUaGlzIHRhZyByZXF1aXJlcyB0aGF0IHRoZSB0YWcgR0VORVJBVEVfSFRNTCBpcyBzZXQgdG8gWUVTLgorCitIVE1MX0RZTkFNSUNfU0VDVElPTlMgID0gWUVTCisKKyMgV2l0aCBIVE1MX0lOREVYX05VTV9FTlRSSUVTIG9uZSBjYW4gY29udHJvbCB0aGUgcHJlZmVycmVkIG51bWJlciBvZiBlbnRyaWVzCisjIHNob3duIGluIHRoZSB2YXJpb3VzIHRyZWUgc3RydWN0dXJlZCBpbmRpY2VzIGluaXRpYWxseTsgdGhlIHVzZXIgY2FuIGV4cGFuZAorIyBhbmQgY29sbGFwc2UgZW50cmllcyBkeW5hbWljYWxseSBsYXRlciBvbi4gRG94eWdlbiB3aWxsIGV4cGFuZCB0aGUgdHJlZSB0bworIyBzdWNoIGEgbGV2ZWwgdGhhdCBhdCBtb3N0IHRoZSBzcGVjaWZpZWQgbnVtYmVyIG9mIGVudHJpZXMgYXJlIHZpc2libGUgKHVubGVzcworIyBhIGZ1bGx5IGNvbGxhcHNlZCB0cmVlIGFscmVhZHkgZXhjZWVkcyB0aGlzIGFtb3VudCkuIFNvIHNldHRpbmcgdGhlIG51bWJlciBvZgorIyBlbnRyaWVzIDEgd2lsbCBwcm9kdWNlIGEgZnVsbCBjb2xsYXBzZWQgdHJlZSBieSBkZWZhdWx0LiAwIGlzIGEgc3BlY2lhbCB2YWx1ZQorIyByZXByZXNlbnRpbmcgYW4gaW5maW5pdGUgbnVtYmVyIG9mIGVudHJpZXMgYW5kIHdpbGwgcmVzdWx0IGluIGEgZnVsbCBleHBhbmRlZAorIyB0cmVlIGJ5IGRlZmF1bHQuCisjIE1pbmltdW0gdmFsdWU6IDAsIG1heGltdW0gdmFsdWU6IDk5OTksIGRlZmF1bHQgdmFsdWU6IDEwMC4KKyMgVGhpcyB0YWcgcmVxdWlyZXMgdGhhdCB0aGUgdGFnIEdFTkVSQVRFX0hUTUwgaXMgc2V0IHRvIFlFUy4KKworSFRNTF9JTkRFWF9OVU1fRU5UUklFUyA9IDEwMAorCisjIElmIHRoZSBHRU5FUkFURV9ET0NTRVQgdGFnIGlzIHNldCB0byBZRVMsIGFkZGl0aW9uYWwgaW5kZXggZmlsZXMgd2lsbCBiZQorIyBnZW5lcmF0ZWQgdGhhdCBjYW4gYmUgdXNlZCBhcyBpbnB1dCBmb3IgQXBwbGUncyBYY29kZSAzIGludGVncmF0ZWQgZGV2ZWxvcG1lbnQKKyMgZW52aXJvbm1lbnQgKHNlZTogaHR0cDovL2RldmVsb3Blci5hcHBsZS5jb20vdG9vbHMveGNvZGUvKSwgaW50cm9kdWNlZCB3aXRoCisjIE9TWCAxMC41IChMZW9wYXJkKS4gVG8gY3JlYXRlIGEgZG9jdW1lbnRhdGlvbiBzZXQsIGRveHlnZW4gd2lsbCBnZW5lcmF0ZSBhCisjIE1ha2VmaWxlIGluIHRoZSBIVE1MIG91dHB1dCBkaXJlY3RvcnkuIFJ1bm5pbmcgbWFrZSB3aWxsIHByb2R1Y2UgdGhlIGRvY3NldCBpbgorIyB0aGF0IGRpcmVjdG9yeSBhbmQgcnVubmluZyBtYWtlIGluc3RhbGwgd2lsbCBpbnN0YWxsIHRoZSBkb2NzZXQgaW4KKyMgfi9MaWJyYXJ5L0RldmVsb3Blci9TaGFyZWQvRG9jdW1lbnRhdGlvbi9Eb2NTZXRzIHNvIHRoYXQgWGNvZGUgd2lsbCBmaW5kIGl0IGF0CisjIHN0YXJ0dXAuIFNlZSBodHRwOi8vZGV2ZWxvcGVyLmFwcGxlLmNvbS90b29scy9jcmVhdGluZ2RvY3NldHN3aXRoZG94eWdlbi5odG1sCisjIGZvciBtb3JlIGluZm9ybWF0aW9uLgorIyBUaGUgZGVmYXVsdCB2YWx1ZSBpczogTk8uCisjIFRoaXMgdGFnIHJlcXVpcmVzIHRoYXQgdGhlIHRhZyBHRU5FUkFURV9IVE1MIGlzIHNldCB0byBZRVMuCisKK0dFTkVSQVRFX0RPQ1NFVCAgICAgICAgPSBOTworCisjIFRoaXMgdGFnIGRldGVybWluZXMgdGhlIG5hbWUgb2YgdGhlIGRvY3NldCBmZWVkLiBBIGRvY3VtZW50YXRpb24gZmVlZCBwcm92aWRlcworIyBhbiB1bWJyZWxsYSB1bmRlciB3aGljaCBtdWx0aXBsZSBkb2N1bWVudGF0aW9uIHNldHMgZnJvbSBhIHNpbmdsZSBwcm92aWRlcgorIyAoc3VjaCBhcyBhIGNvbXBhbnkgb3IgcHJvZHVjdCBzdWl0ZSkgY2FuIGJlIGdyb3VwZWQuCisjIFRoZSBkZWZhdWx0IHZhbHVlIGlzOiBEb3h5Z2VuIGdlbmVyYXRlZCBkb2NzLgorIyBUaGlzIHRhZyByZXF1aXJlcyB0aGF0IHRoZSB0YWcgR0VORVJBVEVfRE9DU0VUIGlzIHNldCB0byBZRVMuCisKK0RPQ1NFVF9GRUVETkFNRSAgICAgICAgPSAiRG94eWdlbiBnZW5lcmF0ZWQgZG9jcyIKKworIyBUaGlzIHRhZyBzcGVjaWZpZXMgYSBzdHJpbmcgdGhhdCBzaG91bGQgdW5pcXVlbHkgaWRlbnRpZnkgdGhlIGRvY3VtZW50YXRpb24KKyMgc2V0IGJ1bmRsZS4gVGhpcyBzaG91bGQgYmUgYSByZXZlcnNlIGRvbWFpbi1uYW1lIHN0eWxlIHN0cmluZywgZS5nLgorIyBjb20ubXljb21wYW55Lk15RG9jU2V0LiBEb3h5Z2VuIHdpbGwgYXBwZW5kIC5kb2NzZXQgdG8gdGhlIG5hbWUuCisjIFRoZSBkZWZhdWx0IHZhbHVlIGlzOiBvcmcuZG94eWdlbi5Qcm9qZWN0LgorIyBUaGlzIHRhZyByZXF1aXJlcyB0aGF0IHRoZSB0YWcgR0VORVJBVEVfRE9DU0VUIGlzIHNldCB0byBZRVMuCisKK0RPQ1NFVF9CVU5ETEVfSUQgICAgICAgPSBvcmcuZG94eWdlbi5Qcm9qZWN0CisKKyMgVGhlIERPQ1NFVF9QVUJMSVNIRVJfSUQgdGFnIHNwZWNpZmllcyBhIHN0cmluZyB0aGF0IHNob3VsZCB1bmlxdWVseSBpZGVudGlmeQorIyB0aGUgZG9jdW1lbnRhdGlvbiBwdWJsaXNoZXIuIFRoaXMgc2hvdWxkIGJlIGEgcmV2ZXJzZSBkb21haW4tbmFtZSBzdHlsZQorIyBzdHJpbmcsIGUuZy4gY29tLm15Y29tcGFueS5NeURvY1NldC5kb2N1bWVudGF0aW9uLgorIyBUaGUgZGVmYXVsdCB2YWx1ZSBpczogb3JnLmRveHlnZW4uUHVibGlzaGVyLgorIyBUaGlzIHRhZyByZXF1aXJlcyB0aGF0IHRoZSB0YWcgR0VORVJBVEVfRE9DU0VUIGlzIHNldCB0byBZRVMuCisKK0RPQ1NFVF9QVUJMSVNIRVJfSUQgICAgPSBvcmcuZG94eWdlbi5QdWJsaXNoZXIKKworIyBUaGUgRE9DU0VUX1BVQkxJU0hFUl9OQU1FIHRhZyBpZGVudGlmaWVzIHRoZSBkb2N1bWVudGF0aW9uIHB1Ymxpc2hlci4KKyMgVGhlIGRlZmF1bHQgdmFsdWUgaXM6IFB1Ymxpc2hlci4KKyMgVGhpcyB0YWcgcmVxdWlyZXMgdGhhdCB0aGUgdGFnIEdFTkVSQVRFX0RPQ1NFVCBpcyBzZXQgdG8gWUVTLgorCitET0NTRVRfUFVCTElTSEVSX05BTUUgID0gUHVibGlzaGVyCisKKyMgSWYgdGhlIEdFTkVSQVRFX0hUTUxIRUxQIHRhZyBpcyBzZXQgdG8gWUVTIHRoZW4gZG94eWdlbiBnZW5lcmF0ZXMgdGhyZWUKKyMgYWRkaXRpb25hbCBIVE1MIGluZGV4IGZpbGVzOiBpbmRleC5oaHAsIGluZGV4LmhoYywgYW5kIGluZGV4Lmhoay4gVGhlCisjIGluZGV4LmhocCBpcyBhIHByb2plY3QgZmlsZSB0aGF0IGNhbiBiZSByZWFkIGJ5IE1pY3Jvc29mdCdzIEhUTUwgSGVscCBXb3Jrc2hvcAorIyAoc2VlOiBodHRwOi8vd3d3Lm1pY3Jvc29mdC5jb20vZW4tdXMvZG93bmxvYWQvZGV0YWlscy5hc3B4P2lkPTIxMTM4KSBvbgorIyBXaW5kb3dzLgorIworIyBUaGUgSFRNTCBIZWxwIFdvcmtzaG9wIGNvbnRhaW5zIGEgY29tcGlsZXIgdGhhdCBjYW4gY29udmVydCBhbGwgSFRNTCBvdXRwdXQKKyMgZ2VuZXJhdGVkIGJ5IGRveHlnZW4gaW50byBhIHNpbmdsZSBjb21waWxlZCBIVE1MIGZpbGUgKC5jaG0pLiBDb21waWxlZCBIVE1MCisjIGZpbGVzIGFyZSBub3cgdXNlZCBhcyB0aGUgV2luZG93cyA5OCBoZWxwIGZvcm1hdCwgYW5kIHdpbGwgcmVwbGFjZSB0aGUgb2xkCisjIFdpbmRvd3MgaGVscCBmb3JtYXQgKC5obHApIG9uIGFsbCBXaW5kb3dzIHBsYXRmb3JtcyBpbiB0aGUgZnV0dXJlLiBDb21wcmVzc2VkCisjIEhUTUwgZmlsZXMgYWxzbyBjb250YWluIGFuIGluZGV4LCBhIHRhYmxlIG9mIGNvbnRlbnRzLCBhbmQgeW91IGNhbiBzZWFyY2ggZm9yCisjIHdvcmRzIGluIHRoZSBkb2N1bWVudGF0aW9uLiBUaGUgSFRNTCB3b3Jrc2hvcCBhbHNvIGNvbnRhaW5zIGEgdmlld2VyIGZvcgorIyBjb21wcmVzc2VkIEhUTUwgZmlsZXMuCisjIFRoZSBkZWZhdWx0IHZhbHVlIGlzOiBOTy4KKyMgVGhpcyB0YWcgcmVxdWlyZXMgdGhhdCB0aGUgdGFnIEdFTkVSQVRFX0hUTUwgaXMgc2V0IHRvIFlFUy4KKworR0VORVJBVEVfSFRNTEhFTFAgICAgICA9IE5PCisKKyMgVGhlIENITV9GSUxFIHRhZyBjYW4gYmUgdXNlZCB0byBzcGVjaWZ5IHRoZSBmaWxlIG5hbWUgb2YgdGhlIHJlc3VsdGluZyAuY2htCisjIGZpbGUuIFlvdSBjYW4gYWRkIGEgcGF0aCBpbiBmcm9udCBvZiB0aGUgZmlsZSBpZiB0aGUgcmVzdWx0IHNob3VsZCBub3QgYmUKKyMgd3JpdHRlbiB0byB0aGUgaHRtbCBvdXRwdXQgZGlyZWN0b3J5LgorIyBUaGlzIHRhZyByZXF1aXJlcyB0aGF0IHRoZSB0YWcgR0VORVJBVEVfSFRNTEhFTFAgaXMgc2V0IHRvIFlFUy4KKworQ0hNX0ZJTEUgICAgICAgICAgICAgICA9IAorCisjIFRoZSBISENfTE9DQVRJT04gdGFnIGNhbiBiZSB1c2VkIHRvIHNwZWNpZnkgdGhlIGxvY2F0aW9uIChhYnNvbHV0ZSBwYXRoCisjIGluY2x1ZGluZyBmaWxlIG5hbWUpIG9mIHRoZSBIVE1MIGhlbHAgY29tcGlsZXIgKGhoYy5leGUpLiBJZiBub24tZW1wdHksCisjIGRveHlnZW4gd2lsbCB0cnkgdG8gcnVuIHRoZSBIVE1MIGhlbHAgY29tcGlsZXIgb24gdGhlIGdlbmVyYXRlZCBpbmRleC5oaHAuCisjIFRoZSBmaWxlIGhhcyB0byBiZSBzcGVjaWZpZWQgd2l0aCBmdWxsIHBhdGguCisjIFRoaXMgdGFnIHJlcXVpcmVzIHRoYXQgdGhlIHRhZyBHRU5FUkFURV9IVE1MSEVMUCBpcyBzZXQgdG8gWUVTLgorCitISENfTE9DQVRJT04gICAgICAgICAgID0gCisKKyMgVGhlIEdFTkVSQVRFX0NISSBmbGFnIGNvbnRyb2xzIGlmIGEgc2VwYXJhdGUgLmNoaSBpbmRleCBmaWxlIGlzIGdlbmVyYXRlZAorIyAoWUVTKSBvciB0aGF0IGl0IHNob3VsZCBiZSBpbmNsdWRlZCBpbiB0aGUgbWFzdGVyIC5jaG0gZmlsZSAoTk8pLgorIyBUaGUgZGVmYXVsdCB2YWx1ZSBpczogTk8uCisjIFRoaXMgdGFnIHJlcXVpcmVzIHRoYXQgdGhlIHRhZyBHRU5FUkFURV9IVE1MSEVMUCBpcyBzZXQgdG8gWUVTLgorCitHRU5FUkFURV9DSEkgICAgICAgICAgID0gTk8KKworIyBUaGUgQ0hNX0lOREVYX0VOQ09ESU5HIGlzIHVzZWQgdG8gZW5jb2RlIEh0bWxIZWxwIGluZGV4IChoaGspLCBjb250ZW50IChoaGMpCisjIGFuZCBwcm9qZWN0IGZpbGUgY29udGVudC4KKyMgVGhpcyB0YWcgcmVxdWlyZXMgdGhhdCB0aGUgdGFnIEdFTkVSQVRFX0hUTUxIRUxQIGlzIHNldCB0byBZRVMuCisKK0NITV9JTkRFWF9FTkNPRElORyAgICAgPSAKKworIyBUaGUgQklOQVJZX1RPQyBmbGFnIGNvbnRyb2xzIHdoZXRoZXIgYSBiaW5hcnkgdGFibGUgb2YgY29udGVudHMgaXMgZ2VuZXJhdGVkCisjIChZRVMpIG9yIGEgbm9ybWFsIHRhYmxlIG9mIGNvbnRlbnRzIChOTykgaW4gdGhlIC5jaG0gZmlsZS4gRnVydGhlcm1vcmUgaXQKKyMgZW5hYmxlcyB0aGUgUHJldmlvdXMgYW5kIE5leHQgYnV0dG9ucy4KKyMgVGhlIGRlZmF1bHQgdmFsdWUgaXM6IE5PLgorIyBUaGlzIHRhZyByZXF1aXJlcyB0aGF0IHRoZSB0YWcgR0VORVJBVEVfSFRNTEhFTFAgaXMgc2V0IHRvIFlFUy4KKworQklOQVJZX1RPQyAgICAgICAgICAgICA9IE5PCisKKyMgVGhlIFRPQ19FWFBBTkQgZmxhZyBjYW4gYmUgc2V0IHRvIFlFUyB0byBhZGQgZXh0cmEgaXRlbXMgZm9yIGdyb3VwIG1lbWJlcnMgdG8KKyMgdGhlIHRhYmxlIG9mIGNvbnRlbnRzIG9mIHRoZSBIVE1MIGhlbHAgZG9jdW1lbnRhdGlvbiBhbmQgdG8gdGhlIHRyZWUgdmlldy4KKyMgVGhlIGRlZmF1bHQgdmFsdWUgaXM6IE5PLgorIyBUaGlzIHRhZyByZXF1aXJlcyB0aGF0IHRoZSB0YWcgR0VORVJBVEVfSFRNTEhFTFAgaXMgc2V0IHRvIFlFUy4KKworVE9DX0VYUEFORCAgICAgICAgICAgICA9IE5PCisKKyMgSWYgdGhlIEdFTkVSQVRFX1FIUCB0YWcgaXMgc2V0IHRvIFlFUyBhbmQgYm90aCBRSFBfTkFNRVNQQUNFIGFuZAorIyBRSFBfVklSVFVBTF9GT0xERVIgYXJlIHNldCwgYW4gYWRkaXRpb25hbCBpbmRleCBmaWxlIHdpbGwgYmUgZ2VuZXJhdGVkIHRoYXQKKyMgY2FuIGJlIHVzZWQgYXMgaW5wdXQgZm9yIFF0J3MgcWhlbHBnZW5lcmF0b3IgdG8gZ2VuZXJhdGUgYSBRdCBDb21wcmVzc2VkIEhlbHAKKyMgKC5xY2gpIG9mIHRoZSBnZW5lcmF0ZWQgSFRNTCBkb2N1bWVudGF0aW9uLgorIyBUaGUgZGVmYXVsdCB2YWx1ZSBpczogTk8uCisjIFRoaXMgdGFnIHJlcXVpcmVzIHRoYXQgdGhlIHRhZyBHRU5FUkFURV9IVE1MIGlzIHNldCB0byBZRVMuCisKK0dFTkVSQVRFX1FIUCAgICAgICAgICAgPSBOTworCisjIElmIHRoZSBRSEdfTE9DQVRJT04gdGFnIGlzIHNwZWNpZmllZCwgdGhlIFFDSF9GSUxFIHRhZyBjYW4gYmUgdXNlZCB0byBzcGVjaWZ5CisjIHRoZSBmaWxlIG5hbWUgb2YgdGhlIHJlc3VsdGluZyAucWNoIGZpbGUuIFRoZSBwYXRoIHNwZWNpZmllZCBpcyByZWxhdGl2ZSB0bworIyB0aGUgSFRNTCBvdXRwdXQgZm9sZGVyLgorIyBUaGlzIHRhZyByZXF1aXJlcyB0aGF0IHRoZSB0YWcgR0VORVJBVEVfUUhQIGlzIHNldCB0byBZRVMuCisKK1FDSF9GSUxFICAgICAgICAgICAgICAgPSAKKworIyBUaGUgUUhQX05BTUVTUEFDRSB0YWcgc3BlY2lmaWVzIHRoZSBuYW1lc3BhY2UgdG8gdXNlIHdoZW4gZ2VuZXJhdGluZyBRdCBIZWxwCisjIFByb2plY3Qgb3V0cHV0LiBGb3IgbW9yZSBpbmZvcm1hdGlvbiBwbGVhc2Ugc2VlIFF0IEhlbHAgUHJvamVjdCAvIE5hbWVzcGFjZQorIyAoc2VlOiBodHRwOi8vcXQtcHJvamVjdC5vcmcvZG9jL3F0LTQuOC9xdGhlbHBwcm9qZWN0Lmh0bWwjbmFtZXNwYWNlKS4KKyMgVGhlIGRlZmF1bHQgdmFsdWUgaXM6IG9yZy5kb3h5Z2VuLlByb2plY3QuCisjIFRoaXMgdGFnIHJlcXVpcmVzIHRoYXQgdGhlIHRhZyBHRU5FUkFURV9RSFAgaXMgc2V0IHRvIFlFUy4KKworUUhQX05BTUVTUEFDRSAgICAgICAgICA9IG9yZy5kb3h5Z2VuLlByb2plY3QKKworIyBUaGUgUUhQX1ZJUlRVQUxfRk9MREVSIHRhZyBzcGVjaWZpZXMgdGhlIG5hbWVzcGFjZSB0byB1c2Ugd2hlbiBnZW5lcmF0aW5nIFF0CisjIEhlbHAgUHJvamVjdCBvdXRwdXQuIEZvciBtb3JlIGluZm9ybWF0aW9uIHBsZWFzZSBzZWUgUXQgSGVscCBQcm9qZWN0IC8gVmlydHVhbAorIyBGb2xkZXJzIChzZWU6IGh0dHA6Ly9xdC1wcm9qZWN0Lm9yZy9kb2MvcXQtNC44L3F0aGVscHByb2plY3QuaHRtbCN2aXJ0dWFsLQorIyBmb2xkZXJzKS4KKyMgVGhlIGRlZmF1bHQgdmFsdWUgaXM6IGRvYy4KKyMgVGhpcyB0YWcgcmVxdWlyZXMgdGhhdCB0aGUgdGFnIEdFTkVSQVRFX1FIUCBpcyBzZXQgdG8gWUVTLgorCitRSFBfVklSVFVBTF9GT0xERVIgICAgID0gZG9jCisKKyMgSWYgdGhlIFFIUF9DVVNUX0ZJTFRFUl9OQU1FIHRhZyBpcyBzZXQsIGl0IHNwZWNpZmllcyB0aGUgbmFtZSBvZiBhIGN1c3RvbQorIyBmaWx0ZXIgdG8gYWRkLiBGb3IgbW9yZSBpbmZvcm1hdGlvbiBwbGVhc2Ugc2VlIFF0IEhlbHAgUHJvamVjdCAvIEN1c3RvbQorIyBGaWx0ZXJzIChzZWU6IGh0dHA6Ly9xdC1wcm9qZWN0Lm9yZy9kb2MvcXQtNC44L3F0aGVscHByb2plY3QuaHRtbCNjdXN0b20tCisjIGZpbHRlcnMpLgorIyBUaGlzIHRhZyByZXF1aXJlcyB0aGF0IHRoZSB0YWcgR0VORVJBVEVfUUhQIGlzIHNldCB0byBZRVMuCisKK1FIUF9DVVNUX0ZJTFRFUl9OQU1FICAgPSAKKworIyBUaGUgUUhQX0NVU1RfRklMVEVSX0FUVFJTIHRhZyBzcGVjaWZpZXMgdGhlIGxpc3Qgb2YgdGhlIGF0dHJpYnV0ZXMgb2YgdGhlCisjIGN1c3RvbSBmaWx0ZXIgdG8gYWRkLiBGb3IgbW9yZSBpbmZvcm1hdGlvbiBwbGVhc2Ugc2VlIFF0IEhlbHAgUHJvamVjdCAvIEN1c3RvbQorIyBGaWx0ZXJzIChzZWU6IGh0dHA6Ly9xdC1wcm9qZWN0Lm9yZy9kb2MvcXQtNC44L3F0aGVscHByb2plY3QuaHRtbCNjdXN0b20tCisjIGZpbHRlcnMpLgorIyBUaGlzIHRhZyByZXF1aXJlcyB0aGF0IHRoZSB0YWcgR0VORVJBVEVfUUhQIGlzIHNldCB0byBZRVMuCisKK1FIUF9DVVNUX0ZJTFRFUl9BVFRSUyAgPSAKKworIyBUaGUgUUhQX1NFQ1RfRklMVEVSX0FUVFJTIHRhZyBzcGVjaWZpZXMgdGhlIGxpc3Qgb2YgdGhlIGF0dHJpYnV0ZXMgdGhpcworIyBwcm9qZWN0J3MgZmlsdGVyIHNlY3Rpb24gbWF0Y2hlcy4gUXQgSGVscCBQcm9qZWN0IC8gRmlsdGVyIEF0dHJpYnV0ZXMgKHNlZToKKyMgaHR0cDovL3F0LXByb2plY3Qub3JnL2RvYy9xdC00LjgvcXRoZWxwcHJvamVjdC5odG1sI2ZpbHRlci1hdHRyaWJ1dGVzKS4KKyMgVGhpcyB0YWcgcmVxdWlyZXMgdGhhdCB0aGUgdGFnIEdFTkVSQVRFX1FIUCBpcyBzZXQgdG8gWUVTLgorCitRSFBfU0VDVF9GSUxURVJfQVRUUlMgID0gCisKKyMgVGhlIFFIR19MT0NBVElPTiB0YWcgY2FuIGJlIHVzZWQgdG8gc3BlY2lmeSB0aGUgbG9jYXRpb24gb2YgUXQncworIyBxaGVscGdlbmVyYXRvci4gSWYgbm9uLWVtcHR5IGRveHlnZW4gd2lsbCB0cnkgdG8gcnVuIHFoZWxwZ2VuZXJhdG9yIG9uIHRoZQorIyBnZW5lcmF0ZWQgLnFocCBmaWxlLgorIyBUaGlzIHRhZyByZXF1aXJlcyB0aGF0IHRoZSB0YWcgR0VORVJBVEVfUUhQIGlzIHNldCB0byBZRVMuCisKK1FIR19MT0NBVElPTiAgICAgICAgICAgPSAKKworIyBJZiB0aGUgR0VORVJBVEVfRUNMSVBTRUhFTFAgdGFnIGlzIHNldCB0byBZRVMsIGFkZGl0aW9uYWwgaW5kZXggZmlsZXMgd2lsbCBiZQorIyBnZW5lcmF0ZWQsIHRvZ2V0aGVyIHdpdGggdGhlIEhUTUwgZmlsZXMsIHRoZXkgZm9ybSBhbiBFY2xpcHNlIGhlbHAgcGx1Z2luLiBUbworIyBpbnN0YWxsIHRoaXMgcGx1Z2luIGFuZCBtYWtlIGl0IGF2YWlsYWJsZSB1bmRlciB0aGUgaGVscCBjb250ZW50cyBtZW51IGluCisjIEVjbGlwc2UsIHRoZSBjb250ZW50cyBvZiB0aGUgZGlyZWN0b3J5IGNvbnRhaW5pbmcgdGhlIEhUTUwgYW5kIFhNTCBmaWxlcyBuZWVkcworIyB0byBiZSBjb3BpZWQgaW50byB0aGUgcGx1Z2lucyBkaXJlY3Rvcnkgb2YgZWNsaXBzZS4gVGhlIG5hbWUgb2YgdGhlIGRpcmVjdG9yeQorIyB3aXRoaW4gdGhlIHBsdWdpbnMgZGlyZWN0b3J5IHNob3VsZCBiZSB0aGUgc2FtZSBhcyB0aGUgRUNMSVBTRV9ET0NfSUQgdmFsdWUuCisjIEFmdGVyIGNvcHlpbmcgRWNsaXBzZSBuZWVkcyB0byBiZSByZXN0YXJ0ZWQgYmVmb3JlIHRoZSBoZWxwIGFwcGVhcnMuCisjIFRoZSBkZWZhdWx0IHZhbHVlIGlzOiBOTy4KKyMgVGhpcyB0YWcgcmVxdWlyZXMgdGhhdCB0aGUgdGFnIEdFTkVSQVRFX0hUTUwgaXMgc2V0IHRvIFlFUy4KKworR0VORVJBVEVfRUNMSVBTRUhFTFAgICA9IE5PCisKKyMgQSB1bmlxdWUgaWRlbnRpZmllciBmb3IgdGhlIEVjbGlwc2UgaGVscCBwbHVnaW4uIFdoZW4gaW5zdGFsbGluZyB0aGUgcGx1Z2luCisjIHRoZSBkaXJlY3RvcnkgbmFtZSBjb250YWluaW5nIHRoZSBIVE1MIGFuZCBYTUwgZmlsZXMgc2hvdWxkIGFsc28gaGF2ZSB0aGlzCisjIG5hbWUuIEVhY2ggZG9jdW1lbnRhdGlvbiBzZXQgc2hvdWxkIGhhdmUgaXRzIG93biBpZGVudGlmaWVyLgorIyBUaGUgZGVmYXVsdCB2YWx1ZSBpczogb3JnLmRveHlnZW4uUHJvamVjdC4KKyMgVGhpcyB0YWcgcmVxdWlyZXMgdGhhdCB0aGUgdGFnIEdFTkVSQVRFX0VDTElQU0VIRUxQIGlzIHNldCB0byBZRVMuCisKK0VDTElQU0VfRE9DX0lEICAgICAgICAgPSBvcmcuZG94eWdlbi5Qcm9qZWN0CisKKyMgSWYgeW91IHdhbnQgZnVsbCBjb250cm9sIG92ZXIgdGhlIGxheW91dCBvZiB0aGUgZ2VuZXJhdGVkIEhUTUwgcGFnZXMgaXQgbWlnaHQKKyMgYmUgbmVjZXNzYXJ5IHRvIGRpc2FibGUgdGhlIGluZGV4IGFuZCByZXBsYWNlIGl0IHdpdGggeW91ciBvd24uIFRoZQorIyBESVNBQkxFX0lOREVYIHRhZyBjYW4gYmUgdXNlZCB0byB0dXJuIG9uL29mZiB0aGUgY29uZGVuc2VkIGluZGV4ICh0YWJzKSBhdCB0b3AKKyMgb2YgZWFjaCBIVE1MIHBhZ2UuIEEgdmFsdWUgb2YgTk8gZW5hYmxlcyB0aGUgaW5kZXggYW5kIHRoZSB2YWx1ZSBZRVMgZGlzYWJsZXMKKyMgaXQuIFNpbmNlIHRoZSB0YWJzIGluIHRoZSBpbmRleCBjb250YWluIHRoZSBzYW1lIGluZm9ybWF0aW9uIGFzIHRoZSBuYXZpZ2F0aW9uCisjIHRyZWUsIHlvdSBjYW4gc2V0IHRoaXMgb3B0aW9uIHRvIFlFUyBpZiB5b3UgYWxzbyBzZXQgR0VORVJBVEVfVFJFRVZJRVcgdG8gWUVTLgorIyBUaGUgZGVmYXVsdCB2YWx1ZSBpczogTk8uCisjIFRoaXMgdGFnIHJlcXVpcmVzIHRoYXQgdGhlIHRhZyBHRU5FUkFURV9IVE1MIGlzIHNldCB0byBZRVMuCisKK0RJU0FCTEVfSU5ERVggICAgICAgICAgPSBOTworCisjIFRoZSBHRU5FUkFURV9UUkVFVklFVyB0YWcgaXMgdXNlZCB0byBzcGVjaWZ5IHdoZXRoZXIgYSB0cmVlLWxpa2UgaW5kZXgKKyMgc3RydWN0dXJlIHNob3VsZCBiZSBnZW5lcmF0ZWQgdG8gZGlzcGxheSBoaWVyYXJjaGljYWwgaW5mb3JtYXRpb24uIElmIHRoZSB0YWcKKyMgdmFsdWUgaXMgc2V0IHRvIFlFUywgYSBzaWRlIHBhbmVsIHdpbGwgYmUgZ2VuZXJhdGVkIGNvbnRhaW5pbmcgYSB0cmVlLWxpa2UKKyMgaW5kZXggc3RydWN0dXJlIChqdXN0IGxpa2UgdGhlIG9uZSB0aGF0IGlzIGdlbmVyYXRlZCBmb3IgSFRNTCBIZWxwKS4gRm9yIHRoaXMKKyMgdG8gd29yayBhIGJyb3dzZXIgdGhhdCBzdXBwb3J0cyBKYXZhU2NyaXB0LCBESFRNTCwgQ1NTIGFuZCBmcmFtZXMgaXMgcmVxdWlyZWQKKyMgKGkuZS4gYW55IG1vZGVybiBicm93c2VyKS4gV2luZG93cyB1c2VycyBhcmUgcHJvYmFibHkgYmV0dGVyIG9mZiB1c2luZyB0aGUKKyMgSFRNTCBoZWxwIGZlYXR1cmUuIFZpYSBjdXN0b20gc3R5bGUgc2hlZXRzIChzZWUgSFRNTF9FWFRSQV9TVFlMRVNIRUVUKSBvbmUgY2FuCisjIGZ1cnRoZXIgZmluZS10dW5lIHRoZSBsb29rIG9mIHRoZSBpbmRleC4gQXMgYW4gZXhhbXBsZSwgdGhlIGRlZmF1bHQgc3R5bGUKKyMgc2hlZXQgZ2VuZXJhdGVkIGJ5IGRveHlnZW4gaGFzIGFuIGV4YW1wbGUgdGhhdCBzaG93cyBob3cgdG8gcHV0IGFuIGltYWdlIGF0CisjIHRoZSByb290IG9mIHRoZSB0cmVlIGluc3RlYWQgb2YgdGhlIFBST0pFQ1RfTkFNRS4gU2luY2UgdGhlIHRyZWUgYmFzaWNhbGx5IGhhcworIyB0aGUgc2FtZSBpbmZvcm1hdGlvbiBhcyB0aGUgdGFiIGluZGV4LCB5b3UgY291bGQgY29uc2lkZXIgc2V0dGluZworIyBESVNBQkxFX0lOREVYIHRvIFlFUyB3aGVuIGVuYWJsaW5nIHRoaXMgb3B0aW9uLgorIyBUaGUgZGVmYXVsdCB2YWx1ZSBpczogTk8uCisjIFRoaXMgdGFnIHJlcXVpcmVzIHRoYXQgdGhlIHRhZyBHRU5FUkFURV9IVE1MIGlzIHNldCB0byBZRVMuCisKK0dFTkVSQVRFX1RSRUVWSUVXICAgICAgPSBZRVMKKworIyBUaGUgRU5VTV9WQUxVRVNfUEVSX0xJTkUgdGFnIGNhbiBiZSB1c2VkIHRvIHNldCB0aGUgbnVtYmVyIG9mIGVudW0gdmFsdWVzIHRoYXQKKyMgZG94eWdlbiB3aWxsIGdyb3VwIG9uIG9uZSBsaW5lIGluIHRoZSBnZW5lcmF0ZWQgSFRNTCBkb2N1bWVudGF0aW9uLgorIworIyBOb3RlIHRoYXQgYSB2YWx1ZSBvZiAwIHdpbGwgY29tcGxldGVseSBzdXBwcmVzcyB0aGUgZW51bSB2YWx1ZXMgZnJvbSBhcHBlYXJpbmcKKyMgaW4gdGhlIG92ZXJ2aWV3IHNlY3Rpb24uCisjIE1pbmltdW0gdmFsdWU6IDAsIG1heGltdW0gdmFsdWU6IDIwLCBkZWZhdWx0IHZhbHVlOiA0LgorIyBUaGlzIHRhZyByZXF1aXJlcyB0aGF0IHRoZSB0YWcgR0VORVJBVEVfSFRNTCBpcyBzZXQgdG8gWUVTLgorCitFTlVNX1ZBTFVFU19QRVJfTElORSAgID0gNAorCisjIElmIHRoZSB0cmVldmlldyBpcyBlbmFibGVkIChzZWUgR0VORVJBVEVfVFJFRVZJRVcpIHRoZW4gdGhpcyB0YWcgY2FuIGJlIHVzZWQKKyMgdG8gc2V0IHRoZSBpbml0aWFsIHdpZHRoIChpbiBwaXhlbHMpIG9mIHRoZSBmcmFtZSBpbiB3aGljaCB0aGUgdHJlZSBpcyBzaG93bi4KKyMgTWluaW11bSB2YWx1ZTogMCwgbWF4aW11bSB2YWx1ZTogMTUwMCwgZGVmYXVsdCB2YWx1ZTogMjUwLgorIyBUaGlzIHRhZyByZXF1aXJlcyB0aGF0IHRoZSB0YWcgR0VORVJBVEVfSFRNTCBpcyBzZXQgdG8gWUVTLgorCitUUkVFVklFV19XSURUSCAgICAgICAgID0gMjUwCisKKyMgSWYgdGhlIEVYVF9MSU5LU19JTl9XSU5ET1cgb3B0aW9uIGlzIHNldCB0byBZRVMsIGRveHlnZW4gd2lsbCBvcGVuIGxpbmtzIHRvCisjIGV4dGVybmFsIHN5bWJvbHMgaW1wb3J0ZWQgdmlhIHRhZyBmaWxlcyBpbiBhIHNlcGFyYXRlIHdpbmRvdy4KKyMgVGhlIGRlZmF1bHQgdmFsdWUgaXM6IE5PLgorIyBUaGlzIHRhZyByZXF1aXJlcyB0aGF0IHRoZSB0YWcgR0VORVJBVEVfSFRNTCBpcyBzZXQgdG8gWUVTLgorCitFWFRfTElOS1NfSU5fV0lORE9XICAgID0gTk8KKworIyBVc2UgdGhpcyB0YWcgdG8gY2hhbmdlIHRoZSBmb250IHNpemUgb2YgTGFUZVggZm9ybXVsYXMgaW5jbHVkZWQgYXMgaW1hZ2VzIGluCisjIHRoZSBIVE1MIGRvY3VtZW50YXRpb24uIFdoZW4geW91IGNoYW5nZSB0aGUgZm9udCBzaXplIGFmdGVyIGEgc3VjY2Vzc2Z1bAorIyBkb3h5Z2VuIHJ1biB5b3UgbmVlZCB0byBtYW51YWxseSByZW1vdmUgYW55IGZvcm1fKi5wbmcgaW1hZ2VzIGZyb20gdGhlIEhUTUwKKyMgb3V0cHV0IGRpcmVjdG9yeSB0byBmb3JjZSB0aGVtIHRvIGJlIHJlZ2VuZXJhdGVkLgorIyBNaW5pbXVtIHZhbHVlOiA4LCBtYXhpbXVtIHZhbHVlOiA1MCwgZGVmYXVsdCB2YWx1ZTogMTAuCisjIFRoaXMgdGFnIHJlcXVpcmVzIHRoYXQgdGhlIHRhZyBHRU5FUkFURV9IVE1MIGlzIHNldCB0byBZRVMuCisKK0ZPUk1VTEFfRk9OVFNJWkUgICAgICAgPSAxMAorCisjIFVzZSB0aGUgRk9STVVMQV9UUkFOUEFSRU5UIHRhZyB0byBkZXRlcm1pbmUgd2hldGhlciBvciBub3QgdGhlIGltYWdlcworIyBnZW5lcmF0ZWQgZm9yIGZvcm11bGFzIGFyZSB0cmFuc3BhcmVudCBQTkdzLiBUcmFuc3BhcmVudCBQTkdzIGFyZSBub3QKKyMgc3VwcG9ydGVkIHByb3Blcmx5IGZvciBJRSA2LjAsIGJ1dCBhcmUgc3VwcG9ydGVkIG9uIGFsbCBtb2Rlcm4gYnJvd3NlcnMuCisjCisjIE5vdGUgdGhhdCB3aGVuIGNoYW5naW5nIHRoaXMgb3B0aW9uIHlvdSBuZWVkIHRvIGRlbGV0ZSBhbnkgZm9ybV8qLnBuZyBmaWxlcyBpbgorIyB0aGUgSFRNTCBvdXRwdXQgZGlyZWN0b3J5IGJlZm9yZSB0aGUgY2hhbmdlcyBoYXZlIGVmZmVjdC4KKyMgVGhlIGRlZmF1bHQgdmFsdWUgaXM6IFlFUy4KKyMgVGhpcyB0YWcgcmVxdWlyZXMgdGhhdCB0aGUgdGFnIEdFTkVSQVRFX0hUTUwgaXMgc2V0IHRvIFlFUy4KKworRk9STVVMQV9UUkFOU1BBUkVOVCAgICA9IFlFUworCisjIEVuYWJsZSB0aGUgVVNFX01BVEhKQVggb3B0aW9uIHRvIHJlbmRlciBMYVRlWCBmb3JtdWxhcyB1c2luZyBNYXRoSmF4IChzZWUKKyMgaHR0cDovL3d3dy5tYXRoamF4Lm9yZykgd2hpY2ggdXNlcyBjbGllbnQgc2lkZSBKYXZhc2NyaXB0IGZvciB0aGUgcmVuZGVyaW5nCisjIGluc3RlYWQgb2YgdXNpbmcgcHJlLXJlbmRlcmVkIGJpdG1hcHMuIFVzZSB0aGlzIGlmIHlvdSBkbyBub3QgaGF2ZSBMYVRlWAorIyBpbnN0YWxsZWQgb3IgaWYgeW91IHdhbnQgdG8gZm9ybXVsYXMgbG9vayBwcmV0dGllciBpbiB0aGUgSFRNTCBvdXRwdXQuIFdoZW4KKyMgZW5hYmxlZCB5b3UgbWF5IGFsc28gbmVlZCB0byBpbnN0YWxsIE1hdGhKYXggc2VwYXJhdGVseSBhbmQgY29uZmlndXJlIHRoZSBwYXRoCisjIHRvIGl0IHVzaW5nIHRoZSBNQVRISkFYX1JFTFBBVEggb3B0aW9uLgorIyBUaGUgZGVmYXVsdCB2YWx1ZSBpczogTk8uCisjIFRoaXMgdGFnIHJlcXVpcmVzIHRoYXQgdGhlIHRhZyBHRU5FUkFURV9IVE1MIGlzIHNldCB0byBZRVMuCisKK1VTRV9NQVRISkFYICAgICAgICAgICAgPSBOTworCisjIFdoZW4gTWF0aEpheCBpcyBlbmFibGVkIHlvdSBjYW4gc2V0IHRoZSBkZWZhdWx0IG91dHB1dCBmb3JtYXQgdG8gYmUgdXNlZCBmb3IKKyMgdGhlIE1hdGhKYXggb3V0cHV0LiBTZWUgdGhlIE1hdGhKYXggc2l0ZSAoc2VlOgorIyBodHRwOi8vZG9jcy5tYXRoamF4Lm9yZy9lbi9sYXRlc3Qvb3V0cHV0Lmh0bWwpIGZvciBtb3JlIGRldGFpbHMuCisjIFBvc3NpYmxlIHZhbHVlcyBhcmU6IEhUTUwtQ1NTICh3aGljaCBpcyBzbG93ZXIsIGJ1dCBoYXMgdGhlIGJlc3QKKyMgY29tcGF0aWJpbGl0eSksIE5hdGl2ZU1NTCAoaS5lLiBNYXRoTUwpIGFuZCBTVkcuCisjIFRoZSBkZWZhdWx0IHZhbHVlIGlzOiBIVE1MLUNTUy4KKyMgVGhpcyB0YWcgcmVxdWlyZXMgdGhhdCB0aGUgdGFnIFVTRV9NQVRISkFYIGlzIHNldCB0byBZRVMuCisKK01BVEhKQVhfRk9STUFUICAgICAgICAgPSBIVE1MLUNTUworCisjIFdoZW4gTWF0aEpheCBpcyBlbmFibGVkIHlvdSBuZWVkIHRvIHNwZWNpZnkgdGhlIGxvY2F0aW9uIHJlbGF0aXZlIHRvIHRoZSBIVE1MCisjIG91dHB1dCBkaXJlY3RvcnkgdXNpbmcgdGhlIE1BVEhKQVhfUkVMUEFUSCBvcHRpb24uIFRoZSBkZXN0aW5hdGlvbiBkaXJlY3RvcnkKKyMgc2hvdWxkIGNvbnRhaW4gdGhlIE1hdGhKYXguanMgc2NyaXB0LiBGb3IgaW5zdGFuY2UsIGlmIHRoZSBtYXRoamF4IGRpcmVjdG9yeQorIyBpcyBsb2NhdGVkIGF0IHRoZSBzYW1lIGxldmVsIGFzIHRoZSBIVE1MIG91dHB1dCBkaXJlY3RvcnksIHRoZW4KKyMgTUFUSEpBWF9SRUxQQVRIIHNob3VsZCBiZSAuLi9tYXRoamF4LiBUaGUgZGVmYXVsdCB2YWx1ZSBwb2ludHMgdG8gdGhlIE1hdGhKYXgKKyMgQ29udGVudCBEZWxpdmVyeSBOZXR3b3JrIHNvIHlvdSBjYW4gcXVpY2tseSBzZWUgdGhlIHJlc3VsdCB3aXRob3V0IGluc3RhbGxpbmcKKyMgTWF0aEpheC4gSG93ZXZlciwgaXQgaXMgc3Ryb25nbHkgcmVjb21tZW5kZWQgdG8gaW5zdGFsbCBhIGxvY2FsIGNvcHkgb2YKKyMgTWF0aEpheCBmcm9tIGh0dHA6Ly93d3cubWF0aGpheC5vcmcgYmVmb3JlIGRlcGxveW1lbnQuCisjIFRoZSBkZWZhdWx0IHZhbHVlIGlzOiBodHRwOi8vY2RuLm1hdGhqYXgub3JnL21hdGhqYXgvbGF0ZXN0LgorIyBUaGlzIHRhZyByZXF1aXJlcyB0aGF0IHRoZSB0YWcgVVNFX01BVEhKQVggaXMgc2V0IHRvIFlFUy4KKworTUFUSEpBWF9SRUxQQVRIICAgICAgICA9IGh0dHA6Ly9jZG4ubWF0aGpheC5vcmcvbWF0aGpheC9sYXRlc3QKKworIyBUaGUgTUFUSEpBWF9FWFRFTlNJT05TIHRhZyBjYW4gYmUgdXNlZCB0byBzcGVjaWZ5IG9uZSBvciBtb3JlIE1hdGhKYXgKKyMgZXh0ZW5zaW9uIG5hbWVzIHRoYXQgc2hvdWxkIGJlIGVuYWJsZWQgZHVyaW5nIE1hdGhKYXggcmVuZGVyaW5nLiBGb3IgZXhhbXBsZQorIyBNQVRISkFYX0VYVEVOU0lPTlMgPSBUZVgvQU1TbWF0aCBUZVgvQU1Tc3ltYm9scworIyBUaGlzIHRhZyByZXF1aXJlcyB0aGF0IHRoZSB0YWcgVVNFX01BVEhKQVggaXMgc2V0IHRvIFlFUy4KKworTUFUSEpBWF9FWFRFTlNJT05TICAgICA9IAorCisjIFRoZSBNQVRISkFYX0NPREVGSUxFIHRhZyBjYW4gYmUgdXNlZCB0byBzcGVjaWZ5IGEgZmlsZSB3aXRoIGphdmFzY3JpcHQgcGllY2VzCisjIG9mIGNvZGUgdGhhdCB3aWxsIGJlIHVzZWQgb24gc3RhcnR1cCBvZiB0aGUgTWF0aEpheCBjb2RlLiBTZWUgdGhlIE1hdGhKYXggc2l0ZQorIyAoc2VlOiBodHRwOi8vZG9jcy5tYXRoamF4Lm9yZy9lbi9sYXRlc3Qvb3V0cHV0Lmh0bWwpIGZvciBtb3JlIGRldGFpbHMuIEZvciBhbgorIyBleGFtcGxlIHNlZSB0aGUgZG9jdW1lbnRhdGlvbi4KKyMgVGhpcyB0YWcgcmVxdWlyZXMgdGhhdCB0aGUgdGFnIFVTRV9NQVRISkFYIGlzIHNldCB0byBZRVMuCisKK01BVEhKQVhfQ09ERUZJTEUgICAgICAgPSAKKworIyBXaGVuIHRoZSBTRUFSQ0hFTkdJTkUgdGFnIGlzIGVuYWJsZWQgZG94eWdlbiB3aWxsIGdlbmVyYXRlIGEgc2VhcmNoIGJveCBmb3IKKyMgdGhlIEhUTUwgb3V0cHV0LiBUaGUgdW5kZXJseWluZyBzZWFyY2ggZW5naW5lIHVzZXMgamF2YXNjcmlwdCBhbmQgREhUTUwgYW5kCisjIHNob3VsZCB3b3JrIG9uIGFueSBtb2Rlcm4gYnJvd3Nlci4gTm90ZSB0aGF0IHdoZW4gdXNpbmcgSFRNTCBoZWxwCisjIChHRU5FUkFURV9IVE1MSEVMUCksIFF0IGhlbHAgKEdFTkVSQVRFX1FIUCksIG9yIGRvY3NldHMgKEdFTkVSQVRFX0RPQ1NFVCkKKyMgdGhlcmUgaXMgYWxyZWFkeSBhIHNlYXJjaCBmdW5jdGlvbiBzbyB0aGlzIG9uZSBzaG91bGQgdHlwaWNhbGx5IGJlIGRpc2FibGVkLgorIyBGb3IgbGFyZ2UgcHJvamVjdHMgdGhlIGphdmFzY3JpcHQgYmFzZWQgc2VhcmNoIGVuZ2luZSBjYW4gYmUgc2xvdywgdGhlbgorIyBlbmFibGluZyBTRVJWRVJfQkFTRURfU0VBUkNIIG1heSBwcm92aWRlIGEgYmV0dGVyIHNvbHV0aW9uLiBJdCBpcyBwb3NzaWJsZSB0bworIyBzZWFyY2ggdXNpbmcgdGhlIGtleWJvYXJkOyB0byBqdW1wIHRvIHRoZSBzZWFyY2ggYm94IHVzZSA8YWNjZXNzIGtleT4gKyBTCisjICh3aGF0IHRoZSA8YWNjZXNzIGtleT4gaXMgZGVwZW5kcyBvbiB0aGUgT1MgYW5kIGJyb3dzZXIsIGJ1dCBpdCBpcyB0eXBpY2FsbHkKKyMgPENUUkw+LCA8QUxUPi88b3B0aW9uPiwgb3IgYm90aCkuIEluc2lkZSB0aGUgc2VhcmNoIGJveCB1c2UgdGhlIDxjdXJzb3IgZG93bgorIyBrZXk+IHRvIGp1bXAgaW50byB0aGUgc2VhcmNoIHJlc3VsdHMgd2luZG93LCB0aGUgcmVzdWx0cyBjYW4gYmUgbmF2aWdhdGVkCisjIHVzaW5nIHRoZSA8Y3Vyc29yIGtleXM+LiBQcmVzcyA8RW50ZXI+IHRvIHNlbGVjdCBhbiBpdGVtIG9yIDxlc2NhcGU+IHRvIGNhbmNlbAorIyB0aGUgc2VhcmNoLiBUaGUgZmlsdGVyIG9wdGlvbnMgY2FuIGJlIHNlbGVjdGVkIHdoZW4gdGhlIGN1cnNvciBpcyBpbnNpZGUgdGhlCisjIHNlYXJjaCBib3ggYnkgcHJlc3NpbmcgPFNoaWZ0Pis8Y3Vyc29yIGRvd24+LiBBbHNvIGhlcmUgdXNlIHRoZSA8Y3Vyc29yIGtleXM+CisjIHRvIHNlbGVjdCBhIGZpbHRlciBhbmQgPEVudGVyPiBvciA8ZXNjYXBlPiB0byBhY3RpdmF0ZSBvciBjYW5jZWwgdGhlIGZpbHRlcgorIyBvcHRpb24uCisjIFRoZSBkZWZhdWx0IHZhbHVlIGlzOiBZRVMuCisjIFRoaXMgdGFnIHJlcXVpcmVzIHRoYXQgdGhlIHRhZyBHRU5FUkFURV9IVE1MIGlzIHNldCB0byBZRVMuCisKK1NFQVJDSEVOR0lORSAgICAgICAgICAgPSBZRVMKKworIyBXaGVuIHRoZSBTRVJWRVJfQkFTRURfU0VBUkNIIHRhZyBpcyBlbmFibGVkIHRoZSBzZWFyY2ggZW5naW5lIHdpbGwgYmUKKyMgaW1wbGVtZW50ZWQgdXNpbmcgYSB3ZWIgc2VydmVyIGluc3RlYWQgb2YgYSB3ZWIgY2xpZW50IHVzaW5nIEphdmFzY3JpcHQuIFRoZXJlCisjIGFyZSB0d28gZmxhdm9ycyBvZiB3ZWIgc2VydmVyIGJhc2VkIHNlYXJjaGluZyBkZXBlbmRpbmcgb24gdGhlIEVYVEVSTkFMX1NFQVJDSAorIyBzZXR0aW5nLiBXaGVuIGRpc2FibGVkLCBkb3h5Z2VuIHdpbGwgZ2VuZXJhdGUgYSBQSFAgc2NyaXB0IGZvciBzZWFyY2hpbmcgYW5kCisjIGFuIGluZGV4IGZpbGUgdXNlZCBieSB0aGUgc2NyaXB0LiBXaGVuIEVYVEVSTkFMX1NFQVJDSCBpcyBlbmFibGVkIHRoZSBpbmRleGluZworIyBhbmQgc2VhcmNoaW5nIG5lZWRzIHRvIGJlIHByb3ZpZGVkIGJ5IGV4dGVybmFsIHRvb2xzLiBTZWUgdGhlIHNlY3Rpb24KKyMgIkV4dGVybmFsIEluZGV4aW5nIGFuZCBTZWFyY2hpbmciIGZvciBkZXRhaWxzLgorIyBUaGUgZGVmYXVsdCB2YWx1ZSBpczogTk8uCisjIFRoaXMgdGFnIHJlcXVpcmVzIHRoYXQgdGhlIHRhZyBTRUFSQ0hFTkdJTkUgaXMgc2V0IHRvIFlFUy4KKworU0VSVkVSX0JBU0VEX1NFQVJDSCAgICA9IE5PCisKKyMgV2hlbiBFWFRFUk5BTF9TRUFSQ0ggdGFnIGlzIGVuYWJsZWQgZG94eWdlbiB3aWxsIG5vIGxvbmdlciBnZW5lcmF0ZSB0aGUgUEhQCisjIHNjcmlwdCBmb3Igc2VhcmNoaW5nLiBJbnN0ZWFkIHRoZSBzZWFyY2ggcmVzdWx0cyBhcmUgd3JpdHRlbiB0byBhbiBYTUwgZmlsZQorIyB3aGljaCBuZWVkcyB0byBiZSBwcm9jZXNzZWQgYnkgYW4gZXh0ZXJuYWwgaW5kZXhlci4gRG94eWdlbiB3aWxsIGludm9rZSBhbgorIyBleHRlcm5hbCBzZWFyY2ggZW5naW5lIHBvaW50ZWQgdG8gYnkgdGhlIFNFQVJDSEVOR0lORV9VUkwgb3B0aW9uIHRvIG9idGFpbiB0aGUKKyMgc2VhcmNoIHJlc3VsdHMuCisjCisjIERveHlnZW4gc2hpcHMgd2l0aCBhbiBleGFtcGxlIGluZGV4ZXIgKGRveHlpbmRleGVyKSBhbmQgc2VhcmNoIGVuZ2luZQorIyAoZG94eXNlYXJjaC5jZ2kpIHdoaWNoIGFyZSBiYXNlZCBvbiB0aGUgb3BlbiBzb3VyY2Ugc2VhcmNoIGVuZ2luZSBsaWJyYXJ5CisjIFhhcGlhbiAoc2VlOiBodHRwOi8veGFwaWFuLm9yZy8pLgorIworIyBTZWUgdGhlIHNlY3Rpb24gIkV4dGVybmFsIEluZGV4aW5nIGFuZCBTZWFyY2hpbmciIGZvciBkZXRhaWxzLgorIyBUaGUgZGVmYXVsdCB2YWx1ZSBpczogTk8uCisjIFRoaXMgdGFnIHJlcXVpcmVzIHRoYXQgdGhlIHRhZyBTRUFSQ0hFTkdJTkUgaXMgc2V0IHRvIFlFUy4KKworRVhURVJOQUxfU0VBUkNIICAgICAgICA9IE5PCisKKyMgVGhlIFNFQVJDSEVOR0lORV9VUkwgc2hvdWxkIHBvaW50IHRvIGEgc2VhcmNoIGVuZ2luZSBob3N0ZWQgYnkgYSB3ZWIgc2VydmVyCisjIHdoaWNoIHdpbGwgcmV0dXJuIHRoZSBzZWFyY2ggcmVzdWx0cyB3aGVuIEVYVEVSTkFMX1NFQVJDSCBpcyBlbmFibGVkLgorIworIyBEb3h5Z2VuIHNoaXBzIHdpdGggYW4gZXhhbXBsZSBpbmRleGVyIChkb3h5aW5kZXhlcikgYW5kIHNlYXJjaCBlbmdpbmUKKyMgKGRveHlzZWFyY2guY2dpKSB3aGljaCBhcmUgYmFzZWQgb24gdGhlIG9wZW4gc291cmNlIHNlYXJjaCBlbmdpbmUgbGlicmFyeQorIyBYYXBpYW4gKHNlZTogaHR0cDovL3hhcGlhbi5vcmcvKS4gU2VlIHRoZSBzZWN0aW9uICJFeHRlcm5hbCBJbmRleGluZyBhbmQKKyMgU2VhcmNoaW5nIiBmb3IgZGV0YWlscy4KKyMgVGhpcyB0YWcgcmVxdWlyZXMgdGhhdCB0aGUgdGFnIFNFQVJDSEVOR0lORSBpcyBzZXQgdG8gWUVTLgorCitTRUFSQ0hFTkdJTkVfVVJMICAgICAgID0gCisKKyMgV2hlbiBTRVJWRVJfQkFTRURfU0VBUkNIIGFuZCBFWFRFUk5BTF9TRUFSQ0ggYXJlIGJvdGggZW5hYmxlZCB0aGUgdW5pbmRleGVkCisjIHNlYXJjaCBkYXRhIGlzIHdyaXR0ZW4gdG8gYSBmaWxlIGZvciBpbmRleGluZyBieSBhbiBleHRlcm5hbCB0b29sLiBXaXRoIHRoZQorIyBTRUFSQ0hEQVRBX0ZJTEUgdGFnIHRoZSBuYW1lIG9mIHRoaXMgZmlsZSBjYW4gYmUgc3BlY2lmaWVkLgorIyBUaGUgZGVmYXVsdCBmaWxlIGlzOiBzZWFyY2hkYXRhLnhtbC4KKyMgVGhpcyB0YWcgcmVxdWlyZXMgdGhhdCB0aGUgdGFnIFNFQVJDSEVOR0lORSBpcyBzZXQgdG8gWUVTLgorCitTRUFSQ0hEQVRBX0ZJTEUgICAgICAgID0gc2VhcmNoZGF0YS54bWwKKworIyBXaGVuIFNFUlZFUl9CQVNFRF9TRUFSQ0ggYW5kIEVYVEVSTkFMX1NFQVJDSCBhcmUgYm90aCBlbmFibGVkIHRoZQorIyBFWFRFUk5BTF9TRUFSQ0hfSUQgdGFnIGNhbiBiZSB1c2VkIGFzIGFuIGlkZW50aWZpZXIgZm9yIHRoZSBwcm9qZWN0LiBUaGlzIGlzCisjIHVzZWZ1bCBpbiBjb21iaW5hdGlvbiB3aXRoIEVYVFJBX1NFQVJDSF9NQVBQSU5HUyB0byBzZWFyY2ggdGhyb3VnaCBtdWx0aXBsZQorIyBwcm9qZWN0cyBhbmQgcmVkaXJlY3QgdGhlIHJlc3VsdHMgYmFjayB0byB0aGUgcmlnaHQgcHJvamVjdC4KKyMgVGhpcyB0YWcgcmVxdWlyZXMgdGhhdCB0aGUgdGFnIFNFQVJDSEVOR0lORSBpcyBzZXQgdG8gWUVTLgorCitFWFRFUk5BTF9TRUFSQ0hfSUQgICAgID0gCisKKyMgVGhlIEVYVFJBX1NFQVJDSF9NQVBQSU5HUyB0YWcgY2FuIGJlIHVzZWQgdG8gZW5hYmxlIHNlYXJjaGluZyB0aHJvdWdoIGRveHlnZW4KKyMgcHJvamVjdHMgb3RoZXIgdGhhbiB0aGUgb25lIGRlZmluZWQgYnkgdGhpcyBjb25maWd1cmF0aW9uIGZpbGUsIGJ1dCB0aGF0IGFyZQorIyBhbGwgYWRkZWQgdG8gdGhlIHNhbWUgZXh0ZXJuYWwgc2VhcmNoIGluZGV4LiBFYWNoIHByb2plY3QgbmVlZHMgdG8gaGF2ZSBhCisjIHVuaXF1ZSBpZCBzZXQgdmlhIEVYVEVSTkFMX1NFQVJDSF9JRC4gVGhlIHNlYXJjaCBtYXBwaW5nIHRoZW4gbWFwcyB0aGUgaWQgb2YKKyMgdG8gYSByZWxhdGl2ZSBsb2NhdGlvbiB3aGVyZSB0aGUgZG9jdW1lbnRhdGlvbiBjYW4gYmUgZm91bmQuIFRoZSBmb3JtYXQgaXM6CisjIEVYVFJBX1NFQVJDSF9NQVBQSU5HUyA9IHRhZ25hbWUxPWxvYzEgdGFnbmFtZTI9bG9jMiAuLi4KKyMgVGhpcyB0YWcgcmVxdWlyZXMgdGhhdCB0aGUgdGFnIFNFQVJDSEVOR0lORSBpcyBzZXQgdG8gWUVTLgorCitFWFRSQV9TRUFSQ0hfTUFQUElOR1MgID0gCisKKyMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgQ29uZmlndXJhdGlvbiBvcHRpb25zIHJlbGF0ZWQgdG8gdGhlIExhVGVYIG91dHB1dAorIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisjIElmIHRoZSBHRU5FUkFURV9MQVRFWCB0YWcgaXMgc2V0IHRvIFlFUywgZG94eWdlbiB3aWxsIGdlbmVyYXRlIExhVGVYIG91dHB1dC4KKyMgVGhlIGRlZmF1bHQgdmFsdWUgaXM6IFlFUy4KKworR0VORVJBVEVfTEFURVggICAgICAgICA9IE5PCisKKyMgVGhlIExBVEVYX09VVFBVVCB0YWcgaXMgdXNlZCB0byBzcGVjaWZ5IHdoZXJlIHRoZSBMYVRlWCBkb2NzIHdpbGwgYmUgcHV0LiBJZiBhCisjIHJlbGF0aXZlIHBhdGggaXMgZW50ZXJlZCB0aGUgdmFsdWUgb2YgT1VUUFVUX0RJUkVDVE9SWSB3aWxsIGJlIHB1dCBpbiBmcm9udCBvZgorIyBpdC4KKyMgVGhlIGRlZmF1bHQgZGlyZWN0b3J5IGlzOiBsYXRleC4KKyMgVGhpcyB0YWcgcmVxdWlyZXMgdGhhdCB0aGUgdGFnIEdFTkVSQVRFX0xBVEVYIGlzIHNldCB0byBZRVMuCisKK0xBVEVYX09VVFBVVCAgICAgICAgICAgPSBsYXRleAorCisjIFRoZSBMQVRFWF9DTURfTkFNRSB0YWcgY2FuIGJlIHVzZWQgdG8gc3BlY2lmeSB0aGUgTGFUZVggY29tbWFuZCBuYW1lIHRvIGJlCisjIGludm9rZWQuCisjCisjIE5vdGUgdGhhdCB3aGVuIGVuYWJsaW5nIFVTRV9QREZMQVRFWCB0aGlzIG9wdGlvbiBpcyBvbmx5IHVzZWQgZm9yIGdlbmVyYXRpbmcKKyMgYml0bWFwcyBmb3IgZm9ybXVsYXMgaW4gdGhlIEhUTUwgb3V0cHV0LCBidXQgbm90IGluIHRoZSBNYWtlZmlsZSB0aGF0IGlzCisjIHdyaXR0ZW4gdG8gdGhlIG91dHB1dCBkaXJlY3RvcnkuCisjIFRoZSBkZWZhdWx0IGZpbGUgaXM6IGxhdGV4LgorIyBUaGlzIHRhZyByZXF1aXJlcyB0aGF0IHRoZSB0YWcgR0VORVJBVEVfTEFURVggaXMgc2V0IHRvIFlFUy4KKworTEFURVhfQ01EX05BTUUgICAgICAgICA9IGxhdGV4CisKKyMgVGhlIE1BS0VJTkRFWF9DTURfTkFNRSB0YWcgY2FuIGJlIHVzZWQgdG8gc3BlY2lmeSB0aGUgY29tbWFuZCBuYW1lIHRvIGdlbmVyYXRlCisjIGluZGV4IGZvciBMYVRlWC4KKyMgVGhlIGRlZmF1bHQgZmlsZSBpczogbWFrZWluZGV4LgorIyBUaGlzIHRhZyByZXF1aXJlcyB0aGF0IHRoZSB0YWcgR0VORVJBVEVfTEFURVggaXMgc2V0IHRvIFlFUy4KKworTUFLRUlOREVYX0NNRF9OQU1FICAgICA9IG1ha2VpbmRleAorCisjIElmIHRoZSBDT01QQUNUX0xBVEVYIHRhZyBpcyBzZXQgdG8gWUVTLCBkb3h5Z2VuIGdlbmVyYXRlcyBtb3JlIGNvbXBhY3QgTGFUZVgKKyMgZG9jdW1lbnRzLiBUaGlzIG1heSBiZSB1c2VmdWwgZm9yIHNtYWxsIHByb2plY3RzIGFuZCBtYXkgaGVscCB0byBzYXZlIHNvbWUKKyMgdHJlZXMgaW4gZ2VuZXJhbC4KKyMgVGhlIGRlZmF1bHQgdmFsdWUgaXM6IE5PLgorIyBUaGlzIHRhZyByZXF1aXJlcyB0aGF0IHRoZSB0YWcgR0VORVJBVEVfTEFURVggaXMgc2V0IHRvIFlFUy4KKworQ09NUEFDVF9MQVRFWCAgICAgICAgICA9IE5PCisKKyMgVGhlIFBBUEVSX1RZUEUgdGFnIGNhbiBiZSB1c2VkIHRvIHNldCB0aGUgcGFwZXIgdHlwZSB0aGF0IGlzIHVzZWQgYnkgdGhlCisjIHByaW50ZXIuCisjIFBvc3NpYmxlIHZhbHVlcyBhcmU6IGE0ICgyMTAgeCAyOTcgbW0pLCBsZXR0ZXIgKDguNSB4IDExIGluY2hlcyksIGxlZ2FsICg4LjUgeAorIyAxNCBpbmNoZXMpIGFuZCBleGVjdXRpdmUgKDcuMjUgeCAxMC41IGluY2hlcykuCisjIFRoZSBkZWZhdWx0IHZhbHVlIGlzOiBhNC4KKyMgVGhpcyB0YWcgcmVxdWlyZXMgdGhhdCB0aGUgdGFnIEdFTkVSQVRFX0xBVEVYIGlzIHNldCB0byBZRVMuCisKK1BBUEVSX1RZUEUgICAgICAgICAgICAgPSBhNAorCisjIFRoZSBFWFRSQV9QQUNLQUdFUyB0YWcgY2FuIGJlIHVzZWQgdG8gc3BlY2lmeSBvbmUgb3IgbW9yZSBMYVRlWCBwYWNrYWdlIG5hbWVzCisjIHRoYXQgc2hvdWxkIGJlIGluY2x1ZGVkIGluIHRoZSBMYVRlWCBvdXRwdXQuIFRoZSBwYWNrYWdlIGNhbiBiZSBzcGVjaWZpZWQganVzdAorIyBieSBpdHMgbmFtZSBvciB3aXRoIHRoZSBjb3JyZWN0IHN5bnRheCBhcyB0byBiZSB1c2VkIHdpdGggdGhlIExhVGVYCisjIFx1c2VwYWNrYWdlIGNvbW1hbmQuIFRvIGdldCB0aGUgdGltZXMgZm9udCBmb3IgaW5zdGFuY2UgeW91IGNhbiBzcGVjaWZ5IDoKKyMgRVhUUkFfUEFDS0FHRVM9dGltZXMgb3IgRVhUUkFfUEFDS0FHRVM9e3RpbWVzfQorIyBUbyB1c2UgdGhlIG9wdGlvbiBpbnRsaW1pdHMgd2l0aCB0aGUgYW1zbWF0aCBwYWNrYWdlIHlvdSBjYW4gc3BlY2lmeToKKyMgRVhUUkFfUEFDS0FHRVM9W2ludGxpbWl0c117YW1zbWF0aH0KKyMgSWYgbGVmdCBibGFuayBubyBleHRyYSBwYWNrYWdlcyB3aWxsIGJlIGluY2x1ZGVkLgorIyBUaGlzIHRhZyByZXF1aXJlcyB0aGF0IHRoZSB0YWcgR0VORVJBVEVfTEFURVggaXMgc2V0IHRvIFlFUy4KKworRVhUUkFfUEFDS0FHRVMgICAgICAgICA9IAorCisjIFRoZSBMQVRFWF9IRUFERVIgdGFnIGNhbiBiZSB1c2VkIHRvIHNwZWNpZnkgYSBwZXJzb25hbCBMYVRlWCBoZWFkZXIgZm9yIHRoZQorIyBnZW5lcmF0ZWQgTGFUZVggZG9jdW1lbnQuIFRoZSBoZWFkZXIgc2hvdWxkIGNvbnRhaW4gZXZlcnl0aGluZyB1bnRpbCB0aGUgZmlyc3QKKyMgY2hhcHRlci4gSWYgaXQgaXMgbGVmdCBibGFuayBkb3h5Z2VuIHdpbGwgZ2VuZXJhdGUgYSBzdGFuZGFyZCBoZWFkZXIuIFNlZQorIyBzZWN0aW9uICJEb3h5Z2VuIHVzYWdlIiBmb3IgaW5mb3JtYXRpb24gb24gaG93IHRvIGxldCBkb3h5Z2VuIHdyaXRlIHRoZQorIyBkZWZhdWx0IGhlYWRlciB0byBhIHNlcGFyYXRlIGZpbGUuCisjCisjIE5vdGU6IE9ubHkgdXNlIGEgdXNlci1kZWZpbmVkIGhlYWRlciBpZiB5b3Uga25vdyB3aGF0IHlvdSBhcmUgZG9pbmchIFRoZQorIyBmb2xsb3dpbmcgY29tbWFuZHMgaGF2ZSBhIHNwZWNpYWwgbWVhbmluZyBpbnNpZGUgdGhlIGhlYWRlcjogJHRpdGxlLAorIyAkZGF0ZXRpbWUsICRkYXRlLCAkZG94eWdlbnZlcnNpb24sICRwcm9qZWN0bmFtZSwgJHByb2plY3RudW1iZXIsCisjICRwcm9qZWN0YnJpZWYsICRwcm9qZWN0bG9nby4gRG94eWdlbiB3aWxsIHJlcGxhY2UgJHRpdGxlIHdpdGggdGhlIGVtcHR5CisjIHN0cmluZywgZm9yIHRoZSByZXBsYWNlbWVudCB2YWx1ZXMgb2YgdGhlIG90aGVyIGNvbW1hbmRzIHRoZSB1c2VyIGlzIHJlZmVycmVkCisjIHRvIEhUTUxfSEVBREVSLgorIyBUaGlzIHRhZyByZXF1aXJlcyB0aGF0IHRoZSB0YWcgR0VORVJBVEVfTEFURVggaXMgc2V0IHRvIFlFUy4KKworTEFURVhfSEVBREVSICAgICAgICAgICA9IAorCisjIFRoZSBMQVRFWF9GT09URVIgdGFnIGNhbiBiZSB1c2VkIHRvIHNwZWNpZnkgYSBwZXJzb25hbCBMYVRlWCBmb290ZXIgZm9yIHRoZQorIyBnZW5lcmF0ZWQgTGFUZVggZG9jdW1lbnQuIFRoZSBmb290ZXIgc2hvdWxkIGNvbnRhaW4gZXZlcnl0aGluZyBhZnRlciB0aGUgbGFzdAorIyBjaGFwdGVyLiBJZiBpdCBpcyBsZWZ0IGJsYW5rIGRveHlnZW4gd2lsbCBnZW5lcmF0ZSBhIHN0YW5kYXJkIGZvb3Rlci4gU2VlCisjIExBVEVYX0hFQURFUiBmb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiBob3cgdG8gZ2VuZXJhdGUgYSBkZWZhdWx0IGZvb3RlciBhbmQgd2hhdAorIyBzcGVjaWFsIGNvbW1hbmRzIGNhbiBiZSB1c2VkIGluc2lkZSB0aGUgZm9vdGVyLgorIworIyBOb3RlOiBPbmx5IHVzZSBhIHVzZXItZGVmaW5lZCBmb290ZXIgaWYgeW91IGtub3cgd2hhdCB5b3UgYXJlIGRvaW5nIQorIyBUaGlzIHRhZyByZXF1aXJlcyB0aGF0IHRoZSB0YWcgR0VORVJBVEVfTEFURVggaXMgc2V0IHRvIFlFUy4KKworTEFURVhfRk9PVEVSICAgICAgICAgICA9IAorCisjIFRoZSBMQVRFWF9FWFRSQV9TVFlMRVNIRUVUIHRhZyBjYW4gYmUgdXNlZCB0byBzcGVjaWZ5IGFkZGl0aW9uYWwgdXNlci1kZWZpbmVkCisjIExhVGVYIHN0eWxlIHNoZWV0cyB0aGF0IGFyZSBpbmNsdWRlZCBhZnRlciB0aGUgc3RhbmRhcmQgc3R5bGUgc2hlZXRzIGNyZWF0ZWQKKyMgYnkgZG94eWdlbi4gVXNpbmcgdGhpcyBvcHRpb24gb25lIGNhbiBvdmVycnVsZSBjZXJ0YWluIHN0eWxlIGFzcGVjdHMuIERveHlnZW4KKyMgd2lsbCBjb3B5IHRoZSBzdHlsZSBzaGVldCBmaWxlcyB0byB0aGUgb3V0cHV0IGRpcmVjdG9yeS4KKyMgTm90ZTogVGhlIG9yZGVyIG9mIHRoZSBleHRyYSBzdHlsZSBzaGVldCBmaWxlcyBpcyBvZiBpbXBvcnRhbmNlIChlLmcuIHRoZSBsYXN0CisjIHN0eWxlIHNoZWV0IGluIHRoZSBsaXN0IG92ZXJydWxlcyB0aGUgc2V0dGluZyBvZiB0aGUgcHJldmlvdXMgb25lcyBpbiB0aGUKKyMgbGlzdCkuCisjIFRoaXMgdGFnIHJlcXVpcmVzIHRoYXQgdGhlIHRhZyBHRU5FUkFURV9MQVRFWCBpcyBzZXQgdG8gWUVTLgorCitMQVRFWF9FWFRSQV9TVFlMRVNIRUVUID0gCisKKyMgVGhlIExBVEVYX0VYVFJBX0ZJTEVTIHRhZyBjYW4gYmUgdXNlZCB0byBzcGVjaWZ5IG9uZSBvciBtb3JlIGV4dHJhIGltYWdlcyBvcgorIyBvdGhlciBzb3VyY2UgZmlsZXMgd2hpY2ggc2hvdWxkIGJlIGNvcGllZCB0byB0aGUgTEFURVhfT1VUUFVUIG91dHB1dAorIyBkaXJlY3RvcnkuIE5vdGUgdGhhdCB0aGUgZmlsZXMgd2lsbCBiZSBjb3BpZWQgYXMtaXM7IHRoZXJlIGFyZSBubyBjb21tYW5kcyBvcgorIyBtYXJrZXJzIGF2YWlsYWJsZS4KKyMgVGhpcyB0YWcgcmVxdWlyZXMgdGhhdCB0aGUgdGFnIEdFTkVSQVRFX0xBVEVYIGlzIHNldCB0byBZRVMuCisKK0xBVEVYX0VYVFJBX0ZJTEVTICAgICAgPSAKKworIyBJZiB0aGUgUERGX0hZUEVSTElOS1MgdGFnIGlzIHNldCB0byBZRVMsIHRoZSBMYVRlWCB0aGF0IGlzIGdlbmVyYXRlZCBpcworIyBwcmVwYXJlZCBmb3IgY29udmVyc2lvbiB0byBQREYgKHVzaW5nIHBzMnBkZiBvciBwZGZsYXRleCkuIFRoZSBQREYgZmlsZSB3aWxsCisjIGNvbnRhaW4gbGlua3MgKGp1c3QgbGlrZSB0aGUgSFRNTCBvdXRwdXQpIGluc3RlYWQgb2YgcGFnZSByZWZlcmVuY2VzLiBUaGlzCisjIG1ha2VzIHRoZSBvdXRwdXQgc3VpdGFibGUgZm9yIG9ubGluZSBicm93c2luZyB1c2luZyBhIFBERiB2aWV3ZXIuCisjIFRoZSBkZWZhdWx0IHZhbHVlIGlzOiBZRVMuCisjIFRoaXMgdGFnIHJlcXVpcmVzIHRoYXQgdGhlIHRhZyBHRU5FUkFURV9MQVRFWCBpcyBzZXQgdG8gWUVTLgorCitQREZfSFlQRVJMSU5LUyAgICAgICAgID0gWUVTCisKKyMgSWYgdGhlIFVTRV9QREZMQVRFWCB0YWcgaXMgc2V0IHRvIFlFUywgZG94eWdlbiB3aWxsIHVzZSBwZGZsYXRleCB0byBnZW5lcmF0ZQorIyB0aGUgUERGIGZpbGUgZGlyZWN0bHkgZnJvbSB0aGUgTGFUZVggZmlsZXMuIFNldCB0aGlzIG9wdGlvbiB0byBZRVMsIHRvIGdldCBhCisjIGhpZ2hlciBxdWFsaXR5IFBERiBkb2N1bWVudGF0aW9uLgorIyBUaGUgZGVmYXVsdCB2YWx1ZSBpczogWUVTLgorIyBUaGlzIHRhZyByZXF1aXJlcyB0aGF0IHRoZSB0YWcgR0VORVJBVEVfTEFURVggaXMgc2V0IHRvIFlFUy4KKworVVNFX1BERkxBVEVYICAgICAgICAgICA9IFlFUworCisjIElmIHRoZSBMQVRFWF9CQVRDSE1PREUgdGFnIGlzIHNldCB0byBZRVMsIGRveHlnZW4gd2lsbCBhZGQgdGhlIFxiYXRjaG1vZGUKKyMgY29tbWFuZCB0byB0aGUgZ2VuZXJhdGVkIExhVGVYIGZpbGVzLiBUaGlzIHdpbGwgaW5zdHJ1Y3QgTGFUZVggdG8ga2VlcCBydW5uaW5nCisjIGlmIGVycm9ycyBvY2N1ciwgaW5zdGVhZCBvZiBhc2tpbmcgdGhlIHVzZXIgZm9yIGhlbHAuIFRoaXMgb3B0aW9uIGlzIGFsc28gdXNlZAorIyB3aGVuIGdlbmVyYXRpbmcgZm9ybXVsYXMgaW4gSFRNTC4KKyMgVGhlIGRlZmF1bHQgdmFsdWUgaXM6IE5PLgorIyBUaGlzIHRhZyByZXF1aXJlcyB0aGF0IHRoZSB0YWcgR0VORVJBVEVfTEFURVggaXMgc2V0IHRvIFlFUy4KKworTEFURVhfQkFUQ0hNT0RFICAgICAgICA9IE5PCisKKyMgSWYgdGhlIExBVEVYX0hJREVfSU5ESUNFUyB0YWcgaXMgc2V0IHRvIFlFUyB0aGVuIGRveHlnZW4gd2lsbCBub3QgaW5jbHVkZSB0aGUKKyMgaW5kZXggY2hhcHRlcnMgKHN1Y2ggYXMgRmlsZSBJbmRleCwgQ29tcG91bmQgSW5kZXgsIGV0Yy4pIGluIHRoZSBvdXRwdXQuCisjIFRoZSBkZWZhdWx0IHZhbHVlIGlzOiBOTy4KKyMgVGhpcyB0YWcgcmVxdWlyZXMgdGhhdCB0aGUgdGFnIEdFTkVSQVRFX0xBVEVYIGlzIHNldCB0byBZRVMuCisKK0xBVEVYX0hJREVfSU5ESUNFUyAgICAgPSBOTworCisjIElmIHRoZSBMQVRFWF9TT1VSQ0VfQ09ERSB0YWcgaXMgc2V0IHRvIFlFUyB0aGVuIGRveHlnZW4gd2lsbCBpbmNsdWRlIHNvdXJjZQorIyBjb2RlIHdpdGggc3ludGF4IGhpZ2hsaWdodGluZyBpbiB0aGUgTGFUZVggb3V0cHV0LgorIworIyBOb3RlIHRoYXQgd2hpY2ggc291cmNlcyBhcmUgc2hvd24gYWxzbyBkZXBlbmRzIG9uIG90aGVyIHNldHRpbmdzIHN1Y2ggYXMKKyMgU09VUkNFX0JST1dTRVIuCisjIFRoZSBkZWZhdWx0IHZhbHVlIGlzOiBOTy4KKyMgVGhpcyB0YWcgcmVxdWlyZXMgdGhhdCB0aGUgdGFnIEdFTkVSQVRFX0xBVEVYIGlzIHNldCB0byBZRVMuCisKK0xBVEVYX1NPVVJDRV9DT0RFICAgICAgPSBOTworCisjIFRoZSBMQVRFWF9CSUJfU1RZTEUgdGFnIGNhbiBiZSB1c2VkIHRvIHNwZWNpZnkgdGhlIHN0eWxlIHRvIHVzZSBmb3IgdGhlCisjIGJpYmxpb2dyYXBoeSwgZS5nLiBwbGFpbm5hdCwgb3IgaWVlZXRyLiBTZWUKKyMgaHR0cDovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9CaWJUZVggYW5kIFxjaXRlIGZvciBtb3JlIGluZm8uCisjIFRoZSBkZWZhdWx0IHZhbHVlIGlzOiBwbGFpbi4KKyMgVGhpcyB0YWcgcmVxdWlyZXMgdGhhdCB0aGUgdGFnIEdFTkVSQVRFX0xBVEVYIGlzIHNldCB0byBZRVMuCisKK0xBVEVYX0JJQl9TVFlMRSAgICAgICAgPSBwbGFpbgorCisjIElmIHRoZSBMQVRFWF9USU1FU1RBTVAgdGFnIGlzIHNldCB0byBZRVMgdGhlbiB0aGUgZm9vdGVyIG9mIGVhY2ggZ2VuZXJhdGVkCisjIHBhZ2Ugd2lsbCBjb250YWluIHRoZSBkYXRlIGFuZCB0aW1lIHdoZW4gdGhlIHBhZ2Ugd2FzIGdlbmVyYXRlZC4gU2V0dGluZyB0aGlzCisjIHRvIE5PIGNhbiBoZWxwIHdoZW4gY29tcGFyaW5nIHRoZSBvdXRwdXQgb2YgbXVsdGlwbGUgcnVucy4KKyMgVGhlIGRlZmF1bHQgdmFsdWUgaXM6IE5PLgorIyBUaGlzIHRhZyByZXF1aXJlcyB0aGF0IHRoZSB0YWcgR0VORVJBVEVfTEFURVggaXMgc2V0IHRvIFlFUy4KKworTEFURVhfVElNRVNUQU1QICAgICAgICA9IE5PCisKKyMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgQ29uZmlndXJhdGlvbiBvcHRpb25zIHJlbGF0ZWQgdG8gdGhlIFJURiBvdXRwdXQKKyMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworIyBJZiB0aGUgR0VORVJBVEVfUlRGIHRhZyBpcyBzZXQgdG8gWUVTLCBkb3h5Z2VuIHdpbGwgZ2VuZXJhdGUgUlRGIG91dHB1dC4gVGhlCisjIFJURiBvdXRwdXQgaXMgb3B0aW1pemVkIGZvciBXb3JkIDk3IGFuZCBtYXkgbm90IGxvb2sgdG9vIHByZXR0eSB3aXRoIG90aGVyIFJURgorIyByZWFkZXJzL2VkaXRvcnMuCisjIFRoZSBkZWZhdWx0IHZhbHVlIGlzOiBOTy4KKworR0VORVJBVEVfUlRGICAgICAgICAgICA9IE5PCisKKyMgVGhlIFJURl9PVVRQVVQgdGFnIGlzIHVzZWQgdG8gc3BlY2lmeSB3aGVyZSB0aGUgUlRGIGRvY3Mgd2lsbCBiZSBwdXQuIElmIGEKKyMgcmVsYXRpdmUgcGF0aCBpcyBlbnRlcmVkIHRoZSB2YWx1ZSBvZiBPVVRQVVRfRElSRUNUT1JZIHdpbGwgYmUgcHV0IGluIGZyb250IG9mCisjIGl0LgorIyBUaGUgZGVmYXVsdCBkaXJlY3RvcnkgaXM6IHJ0Zi4KKyMgVGhpcyB0YWcgcmVxdWlyZXMgdGhhdCB0aGUgdGFnIEdFTkVSQVRFX1JURiBpcyBzZXQgdG8gWUVTLgorCitSVEZfT1VUUFVUICAgICAgICAgICAgID0gcnRmCisKKyMgSWYgdGhlIENPTVBBQ1RfUlRGIHRhZyBpcyBzZXQgdG8gWUVTLCBkb3h5Z2VuIGdlbmVyYXRlcyBtb3JlIGNvbXBhY3QgUlRGCisjIGRvY3VtZW50cy4gVGhpcyBtYXkgYmUgdXNlZnVsIGZvciBzbWFsbCBwcm9qZWN0cyBhbmQgbWF5IGhlbHAgdG8gc2F2ZSBzb21lCisjIHRyZWVzIGluIGdlbmVyYWwuCisjIFRoZSBkZWZhdWx0IHZhbHVlIGlzOiBOTy4KKyMgVGhpcyB0YWcgcmVxdWlyZXMgdGhhdCB0aGUgdGFnIEdFTkVSQVRFX1JURiBpcyBzZXQgdG8gWUVTLgorCitDT01QQUNUX1JURiAgICAgICAgICAgID0gTk8KKworIyBJZiB0aGUgUlRGX0hZUEVSTElOS1MgdGFnIGlzIHNldCB0byBZRVMsIHRoZSBSVEYgdGhhdCBpcyBnZW5lcmF0ZWQgd2lsbAorIyBjb250YWluIGh5cGVybGluayBmaWVsZHMuIFRoZSBSVEYgZmlsZSB3aWxsIGNvbnRhaW4gbGlua3MgKGp1c3QgbGlrZSB0aGUgSFRNTAorIyBvdXRwdXQpIGluc3RlYWQgb2YgcGFnZSByZWZlcmVuY2VzLiBUaGlzIG1ha2VzIHRoZSBvdXRwdXQgc3VpdGFibGUgZm9yIG9ubGluZQorIyBicm93c2luZyB1c2luZyBXb3JkIG9yIHNvbWUgb3RoZXIgV29yZCBjb21wYXRpYmxlIHJlYWRlcnMgdGhhdCBzdXBwb3J0IHRob3NlCisjIGZpZWxkcy4KKyMKKyMgTm90ZTogV29yZFBhZCAod3JpdGUpIGFuZCBvdGhlcnMgZG8gbm90IHN1cHBvcnQgbGlua3MuCisjIFRoZSBkZWZhdWx0IHZhbHVlIGlzOiBOTy4KKyMgVGhpcyB0YWcgcmVxdWlyZXMgdGhhdCB0aGUgdGFnIEdFTkVSQVRFX1JURiBpcyBzZXQgdG8gWUVTLgorCitSVEZfSFlQRVJMSU5LUyAgICAgICAgID0gTk8KKworIyBMb2FkIHN0eWxlc2hlZXQgZGVmaW5pdGlvbnMgZnJvbSBmaWxlLiBTeW50YXggaXMgc2ltaWxhciB0byBkb3h5Z2VuJ3MgY29uZmlnCisjIGZpbGUsIGkuZS4gYSBzZXJpZXMgb2YgYXNzaWdubWVudHMuIFlvdSBvbmx5IGhhdmUgdG8gcHJvdmlkZSByZXBsYWNlbWVudHMsCisjIG1pc3NpbmcgZGVmaW5pdGlvbnMgYXJlIHNldCB0byB0aGVpciBkZWZhdWx0IHZhbHVlLgorIworIyBTZWUgYWxzbyBzZWN0aW9uICJEb3h5Z2VuIHVzYWdlIiBmb3IgaW5mb3JtYXRpb24gb24gaG93IHRvIGdlbmVyYXRlIHRoZQorIyBkZWZhdWx0IHN0eWxlIHNoZWV0IHRoYXQgZG94eWdlbiBub3JtYWxseSB1c2VzLgorIyBUaGlzIHRhZyByZXF1aXJlcyB0aGF0IHRoZSB0YWcgR0VORVJBVEVfUlRGIGlzIHNldCB0byBZRVMuCisKK1JURl9TVFlMRVNIRUVUX0ZJTEUgICAgPSAKKworIyBTZXQgb3B0aW9uYWwgdmFyaWFibGVzIHVzZWQgaW4gdGhlIGdlbmVyYXRpb24gb2YgYW4gUlRGIGRvY3VtZW50LiBTeW50YXggaXMKKyMgc2ltaWxhciB0byBkb3h5Z2VuJ3MgY29uZmlnIGZpbGUuIEEgdGVtcGxhdGUgZXh0ZW5zaW9ucyBmaWxlIGNhbiBiZSBnZW5lcmF0ZWQKKyMgdXNpbmcgZG94eWdlbiAtZSBydGYgZXh0ZW5zaW9uRmlsZS4KKyMgVGhpcyB0YWcgcmVxdWlyZXMgdGhhdCB0aGUgdGFnIEdFTkVSQVRFX1JURiBpcyBzZXQgdG8gWUVTLgorCitSVEZfRVhURU5TSU9OU19GSUxFICAgID0gCisKKyMgSWYgdGhlIFJURl9TT1VSQ0VfQ09ERSB0YWcgaXMgc2V0IHRvIFlFUyB0aGVuIGRveHlnZW4gd2lsbCBpbmNsdWRlIHNvdXJjZSBjb2RlCisjIHdpdGggc3ludGF4IGhpZ2hsaWdodGluZyBpbiB0aGUgUlRGIG91dHB1dC4KKyMKKyMgTm90ZSB0aGF0IHdoaWNoIHNvdXJjZXMgYXJlIHNob3duIGFsc28gZGVwZW5kcyBvbiBvdGhlciBzZXR0aW5ncyBzdWNoIGFzCisjIFNPVVJDRV9CUk9XU0VSLgorIyBUaGUgZGVmYXVsdCB2YWx1ZSBpczogTk8uCisjIFRoaXMgdGFnIHJlcXVpcmVzIHRoYXQgdGhlIHRhZyBHRU5FUkFURV9SVEYgaXMgc2V0IHRvIFlFUy4KKworUlRGX1NPVVJDRV9DT0RFICAgICAgICA9IE5PCisKKyMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgQ29uZmlndXJhdGlvbiBvcHRpb25zIHJlbGF0ZWQgdG8gdGhlIG1hbiBwYWdlIG91dHB1dAorIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisjIElmIHRoZSBHRU5FUkFURV9NQU4gdGFnIGlzIHNldCB0byBZRVMsIGRveHlnZW4gd2lsbCBnZW5lcmF0ZSBtYW4gcGFnZXMgZm9yCisjIGNsYXNzZXMgYW5kIGZpbGVzLgorIyBUaGUgZGVmYXVsdCB2YWx1ZSBpczogTk8uCisKK0dFTkVSQVRFX01BTiAgICAgICAgICAgPSBOTworCisjIFRoZSBNQU5fT1VUUFVUIHRhZyBpcyB1c2VkIHRvIHNwZWNpZnkgd2hlcmUgdGhlIG1hbiBwYWdlcyB3aWxsIGJlIHB1dC4gSWYgYQorIyByZWxhdGl2ZSBwYXRoIGlzIGVudGVyZWQgdGhlIHZhbHVlIG9mIE9VVFBVVF9ESVJFQ1RPUlkgd2lsbCBiZSBwdXQgaW4gZnJvbnQgb2YKKyMgaXQuIEEgZGlyZWN0b3J5IG1hbjMgd2lsbCBiZSBjcmVhdGVkIGluc2lkZSB0aGUgZGlyZWN0b3J5IHNwZWNpZmllZCBieQorIyBNQU5fT1VUUFVULgorIyBUaGUgZGVmYXVsdCBkaXJlY3RvcnkgaXM6IG1hbi4KKyMgVGhpcyB0YWcgcmVxdWlyZXMgdGhhdCB0aGUgdGFnIEdFTkVSQVRFX01BTiBpcyBzZXQgdG8gWUVTLgorCitNQU5fT1VUUFVUICAgICAgICAgICAgID0gbWFuCisKKyMgVGhlIE1BTl9FWFRFTlNJT04gdGFnIGRldGVybWluZXMgdGhlIGV4dGVuc2lvbiB0aGF0IGlzIGFkZGVkIHRvIHRoZSBnZW5lcmF0ZWQKKyMgbWFuIHBhZ2VzLiBJbiBjYXNlIHRoZSBtYW51YWwgc2VjdGlvbiBkb2VzIG5vdCBzdGFydCB3aXRoIGEgbnVtYmVyLCB0aGUgbnVtYmVyCisjIDMgaXMgcHJlcGVuZGVkLiBUaGUgZG90ICguKSBhdCB0aGUgYmVnaW5uaW5nIG9mIHRoZSBNQU5fRVhURU5TSU9OIHRhZyBpcworIyBvcHRpb25hbC4KKyMgVGhlIGRlZmF1bHQgdmFsdWUgaXM6IC4zLgorIyBUaGlzIHRhZyByZXF1aXJlcyB0aGF0IHRoZSB0YWcgR0VORVJBVEVfTUFOIGlzIHNldCB0byBZRVMuCisKK01BTl9FWFRFTlNJT04gICAgICAgICAgPSAuMworCisjIFRoZSBNQU5fU1VCRElSIHRhZyBkZXRlcm1pbmVzIHRoZSBuYW1lIG9mIHRoZSBkaXJlY3RvcnkgY3JlYXRlZCB3aXRoaW4KKyMgTUFOX09VVFBVVCBpbiB3aGljaCB0aGUgbWFuIHBhZ2VzIGFyZSBwbGFjZWQuIElmIGRlZmF1bHRzIHRvIG1hbiBmb2xsb3dlZCBieQorIyBNQU5fRVhURU5TSU9OIHdpdGggdGhlIGluaXRpYWwgLiByZW1vdmVkLgorIyBUaGlzIHRhZyByZXF1aXJlcyB0aGF0IHRoZSB0YWcgR0VORVJBVEVfTUFOIGlzIHNldCB0byBZRVMuCisKK01BTl9TVUJESVIgICAgICAgICAgICAgPSAKKworIyBJZiB0aGUgTUFOX0xJTktTIHRhZyBpcyBzZXQgdG8gWUVTIGFuZCBkb3h5Z2VuIGdlbmVyYXRlcyBtYW4gb3V0cHV0LCB0aGVuIGl0CisjIHdpbGwgZ2VuZXJhdGUgb25lIGFkZGl0aW9uYWwgbWFuIGZpbGUgZm9yIGVhY2ggZW50aXR5IGRvY3VtZW50ZWQgaW4gdGhlIHJlYWwKKyMgbWFuIHBhZ2UocykuIFRoZXNlIGFkZGl0aW9uYWwgZmlsZXMgb25seSBzb3VyY2UgdGhlIHJlYWwgbWFuIHBhZ2UsIGJ1dCB3aXRob3V0CisjIHRoZW0gdGhlIG1hbiBjb21tYW5kIHdvdWxkIGJlIHVuYWJsZSB0byBmaW5kIHRoZSBjb3JyZWN0IHBhZ2UuCisjIFRoZSBkZWZhdWx0IHZhbHVlIGlzOiBOTy4KKyMgVGhpcyB0YWcgcmVxdWlyZXMgdGhhdCB0aGUgdGFnIEdFTkVSQVRFX01BTiBpcyBzZXQgdG8gWUVTLgorCitNQU5fTElOS1MgICAgICAgICAgICAgID0gTk8KKworIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBDb25maWd1cmF0aW9uIG9wdGlvbnMgcmVsYXRlZCB0byB0aGUgWE1MIG91dHB1dAorIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisjIElmIHRoZSBHRU5FUkFURV9YTUwgdGFnIGlzIHNldCB0byBZRVMsIGRveHlnZW4gd2lsbCBnZW5lcmF0ZSBhbiBYTUwgZmlsZSB0aGF0CisjIGNhcHR1cmVzIHRoZSBzdHJ1Y3R1cmUgb2YgdGhlIGNvZGUgaW5jbHVkaW5nIGFsbCBkb2N1bWVudGF0aW9uLgorIyBUaGUgZGVmYXVsdCB2YWx1ZSBpczogTk8uCisKK0dFTkVSQVRFX1hNTCAgICAgICAgICAgPSBOTworCisjIFRoZSBYTUxfT1VUUFVUIHRhZyBpcyB1c2VkIHRvIHNwZWNpZnkgd2hlcmUgdGhlIFhNTCBwYWdlcyB3aWxsIGJlIHB1dC4gSWYgYQorIyByZWxhdGl2ZSBwYXRoIGlzIGVudGVyZWQgdGhlIHZhbHVlIG9mIE9VVFBVVF9ESVJFQ1RPUlkgd2lsbCBiZSBwdXQgaW4gZnJvbnQgb2YKKyMgaXQuCisjIFRoZSBkZWZhdWx0IGRpcmVjdG9yeSBpczogeG1sLgorIyBUaGlzIHRhZyByZXF1aXJlcyB0aGF0IHRoZSB0YWcgR0VORVJBVEVfWE1MIGlzIHNldCB0byBZRVMuCisKK1hNTF9PVVRQVVQgICAgICAgICAgICAgPSB4bWwKKworIyBJZiB0aGUgWE1MX1BST0dSQU1MSVNUSU5HIHRhZyBpcyBzZXQgdG8gWUVTLCBkb3h5Z2VuIHdpbGwgZHVtcCB0aGUgcHJvZ3JhbQorIyBsaXN0aW5ncyAoaW5jbHVkaW5nIHN5bnRheCBoaWdobGlnaHRpbmcgYW5kIGNyb3NzLXJlZmVyZW5jaW5nIGluZm9ybWF0aW9uKSB0bworIyB0aGUgWE1MIG91dHB1dC4gTm90ZSB0aGF0IGVuYWJsaW5nIHRoaXMgd2lsbCBzaWduaWZpY2FudGx5IGluY3JlYXNlIHRoZSBzaXplCisjIG9mIHRoZSBYTUwgb3V0cHV0LgorIyBUaGUgZGVmYXVsdCB2YWx1ZSBpczogWUVTLgorIyBUaGlzIHRhZyByZXF1aXJlcyB0aGF0IHRoZSB0YWcgR0VORVJBVEVfWE1MIGlzIHNldCB0byBZRVMuCisKK1hNTF9QUk9HUkFNTElTVElORyAgICAgPSBZRVMKKworIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBDb25maWd1cmF0aW9uIG9wdGlvbnMgcmVsYXRlZCB0byB0aGUgRE9DQk9PSyBvdXRwdXQKKyMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworIyBJZiB0aGUgR0VORVJBVEVfRE9DQk9PSyB0YWcgaXMgc2V0IHRvIFlFUywgZG94eWdlbiB3aWxsIGdlbmVyYXRlIERvY2Jvb2sgZmlsZXMKKyMgdGhhdCBjYW4gYmUgdXNlZCB0byBnZW5lcmF0ZSBQREYuCisjIFRoZSBkZWZhdWx0IHZhbHVlIGlzOiBOTy4KKworR0VORVJBVEVfRE9DQk9PSyAgICAgICA9IE5PCisKKyMgVGhlIERPQ0JPT0tfT1VUUFVUIHRhZyBpcyB1c2VkIHRvIHNwZWNpZnkgd2hlcmUgdGhlIERvY2Jvb2sgcGFnZXMgd2lsbCBiZSBwdXQuCisjIElmIGEgcmVsYXRpdmUgcGF0aCBpcyBlbnRlcmVkIHRoZSB2YWx1ZSBvZiBPVVRQVVRfRElSRUNUT1JZIHdpbGwgYmUgcHV0IGluCisjIGZyb250IG9mIGl0LgorIyBUaGUgZGVmYXVsdCBkaXJlY3RvcnkgaXM6IGRvY2Jvb2suCisjIFRoaXMgdGFnIHJlcXVpcmVzIHRoYXQgdGhlIHRhZyBHRU5FUkFURV9ET0NCT09LIGlzIHNldCB0byBZRVMuCisKK0RPQ0JPT0tfT1VUUFVUICAgICAgICAgPSBkb2Nib29rCisKKyMgSWYgdGhlIERPQ0JPT0tfUFJPR1JBTUxJU1RJTkcgdGFnIGlzIHNldCB0byBZRVMsIGRveHlnZW4gd2lsbCBpbmNsdWRlIHRoZQorIyBwcm9ncmFtIGxpc3RpbmdzIChpbmNsdWRpbmcgc3ludGF4IGhpZ2hsaWdodGluZyBhbmQgY3Jvc3MtcmVmZXJlbmNpbmcKKyMgaW5mb3JtYXRpb24pIHRvIHRoZSBET0NCT09LIG91dHB1dC4gTm90ZSB0aGF0IGVuYWJsaW5nIHRoaXMgd2lsbCBzaWduaWZpY2FudGx5CisjIGluY3JlYXNlIHRoZSBzaXplIG9mIHRoZSBET0NCT09LIG91dHB1dC4KKyMgVGhlIGRlZmF1bHQgdmFsdWUgaXM6IE5PLgorIyBUaGlzIHRhZyByZXF1aXJlcyB0aGF0IHRoZSB0YWcgR0VORVJBVEVfRE9DQk9PSyBpcyBzZXQgdG8gWUVTLgorCitET0NCT09LX1BST0dSQU1MSVNUSU5HID0gTk8KKworIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBDb25maWd1cmF0aW9uIG9wdGlvbnMgZm9yIHRoZSBBdXRvR2VuIERlZmluaXRpb25zIG91dHB1dAorIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisjIElmIHRoZSBHRU5FUkFURV9BVVRPR0VOX0RFRiB0YWcgaXMgc2V0IHRvIFlFUywgZG94eWdlbiB3aWxsIGdlbmVyYXRlIGFuCisjIEF1dG9HZW4gRGVmaW5pdGlvbnMgKHNlZSBodHRwOi8vYXV0b2dlbi5zZi5uZXQpIGZpbGUgdGhhdCBjYXB0dXJlcyB0aGUKKyMgc3RydWN0dXJlIG9mIHRoZSBjb2RlIGluY2x1ZGluZyBhbGwgZG9jdW1lbnRhdGlvbi4gTm90ZSB0aGF0IHRoaXMgZmVhdHVyZSBpcworIyBzdGlsbCBleHBlcmltZW50YWwgYW5kIGluY29tcGxldGUgYXQgdGhlIG1vbWVudC4KKyMgVGhlIGRlZmF1bHQgdmFsdWUgaXM6IE5PLgorCitHRU5FUkFURV9BVVRPR0VOX0RFRiAgID0gTk8KKworIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBDb25maWd1cmF0aW9uIG9wdGlvbnMgcmVsYXRlZCB0byB0aGUgUGVybCBtb2R1bGUgb3V0cHV0CisjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyMgSWYgdGhlIEdFTkVSQVRFX1BFUkxNT0QgdGFnIGlzIHNldCB0byBZRVMsIGRveHlnZW4gd2lsbCBnZW5lcmF0ZSBhIFBlcmwgbW9kdWxlCisjIGZpbGUgdGhhdCBjYXB0dXJlcyB0aGUgc3RydWN0dXJlIG9mIHRoZSBjb2RlIGluY2x1ZGluZyBhbGwgZG9jdW1lbnRhdGlvbi4KKyMKKyMgTm90ZSB0aGF0IHRoaXMgZmVhdHVyZSBpcyBzdGlsbCBleHBlcmltZW50YWwgYW5kIGluY29tcGxldGUgYXQgdGhlIG1vbWVudC4KKyMgVGhlIGRlZmF1bHQgdmFsdWUgaXM6IE5PLgorCitHRU5FUkFURV9QRVJMTU9EICAgICAgID0gTk8KKworIyBJZiB0aGUgUEVSTE1PRF9MQVRFWCB0YWcgaXMgc2V0IHRvIFlFUywgZG94eWdlbiB3aWxsIGdlbmVyYXRlIHRoZSBuZWNlc3NhcnkKKyMgTWFrZWZpbGUgcnVsZXMsIFBlcmwgc2NyaXB0cyBhbmQgTGFUZVggY29kZSB0byBiZSBhYmxlIHRvIGdlbmVyYXRlIFBERiBhbmQgRFZJCisjIG91dHB1dCBmcm9tIHRoZSBQZXJsIG1vZHVsZSBvdXRwdXQuCisjIFRoZSBkZWZhdWx0IHZhbHVlIGlzOiBOTy4KKyMgVGhpcyB0YWcgcmVxdWlyZXMgdGhhdCB0aGUgdGFnIEdFTkVSQVRFX1BFUkxNT0QgaXMgc2V0IHRvIFlFUy4KKworUEVSTE1PRF9MQVRFWCAgICAgICAgICA9IE5PCisKKyMgSWYgdGhlIFBFUkxNT0RfUFJFVFRZIHRhZyBpcyBzZXQgdG8gWUVTLCB0aGUgUGVybCBtb2R1bGUgb3V0cHV0IHdpbGwgYmUgbmljZWx5CisjIGZvcm1hdHRlZCBzbyBpdCBjYW4gYmUgcGFyc2VkIGJ5IGEgaHVtYW4gcmVhZGVyLiBUaGlzIGlzIHVzZWZ1bCBpZiB5b3Ugd2FudCB0bworIyB1bmRlcnN0YW5kIHdoYXQgaXMgZ29pbmcgb24uIE9uIHRoZSBvdGhlciBoYW5kLCBpZiB0aGlzIHRhZyBpcyBzZXQgdG8gTk8sIHRoZQorIyBzaXplIG9mIHRoZSBQZXJsIG1vZHVsZSBvdXRwdXQgd2lsbCBiZSBtdWNoIHNtYWxsZXIgYW5kIFBlcmwgd2lsbCBwYXJzZSBpdAorIyBqdXN0IHRoZSBzYW1lLgorIyBUaGUgZGVmYXVsdCB2YWx1ZSBpczogWUVTLgorIyBUaGlzIHRhZyByZXF1aXJlcyB0aGF0IHRoZSB0YWcgR0VORVJBVEVfUEVSTE1PRCBpcyBzZXQgdG8gWUVTLgorCitQRVJMTU9EX1BSRVRUWSAgICAgICAgID0gWUVTCisKKyMgVGhlIG5hbWVzIG9mIHRoZSBtYWtlIHZhcmlhYmxlcyBpbiB0aGUgZ2VuZXJhdGVkIGRveHlydWxlcy5tYWtlIGZpbGUgYXJlCisjIHByZWZpeGVkIHdpdGggdGhlIHN0cmluZyBjb250YWluZWQgaW4gUEVSTE1PRF9NQUtFVkFSX1BSRUZJWC4gVGhpcyBpcyB1c2VmdWwKKyMgc28gZGlmZmVyZW50IGRveHlydWxlcy5tYWtlIGZpbGVzIGluY2x1ZGVkIGJ5IHRoZSBzYW1lIE1ha2VmaWxlIGRvbid0CisjIG92ZXJ3cml0ZSBlYWNoIG90aGVyJ3MgdmFyaWFibGVzLgorIyBUaGlzIHRhZyByZXF1aXJlcyB0aGF0IHRoZSB0YWcgR0VORVJBVEVfUEVSTE1PRCBpcyBzZXQgdG8gWUVTLgorCitQRVJMTU9EX01BS0VWQVJfUFJFRklYID0gCisKKyMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgQ29uZmlndXJhdGlvbiBvcHRpb25zIHJlbGF0ZWQgdG8gdGhlIHByZXByb2Nlc3NvcgorIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisjIElmIHRoZSBFTkFCTEVfUFJFUFJPQ0VTU0lORyB0YWcgaXMgc2V0IHRvIFlFUywgZG94eWdlbiB3aWxsIGV2YWx1YXRlIGFsbAorIyBDLXByZXByb2Nlc3NvciBkaXJlY3RpdmVzIGZvdW5kIGluIHRoZSBzb3VyY2VzIGFuZCBpbmNsdWRlIGZpbGVzLgorIyBUaGUgZGVmYXVsdCB2YWx1ZSBpczogWUVTLgorCitFTkFCTEVfUFJFUFJPQ0VTU0lORyAgID0gWUVTCisKKyMgSWYgdGhlIE1BQ1JPX0VYUEFOU0lPTiB0YWcgaXMgc2V0IHRvIFlFUywgZG94eWdlbiB3aWxsIGV4cGFuZCBhbGwgbWFjcm8gbmFtZXMKKyMgaW4gdGhlIHNvdXJjZSBjb2RlLiBJZiBzZXQgdG8gTk8sIG9ubHkgY29uZGl0aW9uYWwgY29tcGlsYXRpb24gd2lsbCBiZQorIyBwZXJmb3JtZWQuIE1hY3JvIGV4cGFuc2lvbiBjYW4gYmUgZG9uZSBpbiBhIGNvbnRyb2xsZWQgd2F5IGJ5IHNldHRpbmcKKyMgRVhQQU5EX09OTFlfUFJFREVGIHRvIFlFUy4KKyMgVGhlIGRlZmF1bHQgdmFsdWUgaXM6IE5PLgorIyBUaGlzIHRhZyByZXF1aXJlcyB0aGF0IHRoZSB0YWcgRU5BQkxFX1BSRVBST0NFU1NJTkcgaXMgc2V0IHRvIFlFUy4KKworTUFDUk9fRVhQQU5TSU9OICAgICAgICA9IFlFUworCisjIElmIHRoZSBFWFBBTkRfT05MWV9QUkVERUYgYW5kIE1BQ1JPX0VYUEFOU0lPTiB0YWdzIGFyZSBib3RoIHNldCB0byBZRVMgdGhlbgorIyB0aGUgbWFjcm8gZXhwYW5zaW9uIGlzIGxpbWl0ZWQgdG8gdGhlIG1hY3JvcyBzcGVjaWZpZWQgd2l0aCB0aGUgUFJFREVGSU5FRCBhbmQKKyMgRVhQQU5EX0FTX0RFRklORUQgdGFncy4KKyMgVGhlIGRlZmF1bHQgdmFsdWUgaXM6IE5PLgorIyBUaGlzIHRhZyByZXF1aXJlcyB0aGF0IHRoZSB0YWcgRU5BQkxFX1BSRVBST0NFU1NJTkcgaXMgc2V0IHRvIFlFUy4KKworRVhQQU5EX09OTFlfUFJFREVGICAgICA9IFlFUworCisjIElmIHRoZSBTRUFSQ0hfSU5DTFVERVMgdGFnIGlzIHNldCB0byBZRVMsIHRoZSBpbmNsdWRlIGZpbGVzIGluIHRoZQorIyBJTkNMVURFX1BBVEggd2lsbCBiZSBzZWFyY2hlZCBpZiBhICNpbmNsdWRlIGlzIGZvdW5kLgorIyBUaGUgZGVmYXVsdCB2YWx1ZSBpczogWUVTLgorIyBUaGlzIHRhZyByZXF1aXJlcyB0aGF0IHRoZSB0YWcgRU5BQkxFX1BSRVBST0NFU1NJTkcgaXMgc2V0IHRvIFlFUy4KKworU0VBUkNIX0lOQ0xVREVTICAgICAgICA9IFlFUworCisjIFRoZSBJTkNMVURFX1BBVEggdGFnIGNhbiBiZSB1c2VkIHRvIHNwZWNpZnkgb25lIG9yIG1vcmUgZGlyZWN0b3JpZXMgdGhhdAorIyBjb250YWluIGluY2x1ZGUgZmlsZXMgdGhhdCBhcmUgbm90IGlucHV0IGZpbGVzIGJ1dCBzaG91bGQgYmUgcHJvY2Vzc2VkIGJ5IHRoZQorIyBwcmVwcm9jZXNzb3IuCisjIFRoaXMgdGFnIHJlcXVpcmVzIHRoYXQgdGhlIHRhZyBTRUFSQ0hfSU5DTFVERVMgaXMgc2V0IHRvIFlFUy4KKworSU5DTFVERV9QQVRIICAgICAgICAgICA9IC9Wb2x1bWVzL0EvYW9zcC9wcmVidWlsdHMvY2xhbmcvZGFyd2luLXg4Ni9ob3N0LzMuNi9saWIvY2xhbmcvMy42L2luY2x1ZGUgXAorICAgICAgICAgICAgICAgICAgICAgICAgIC9Wb2x1bWVzL0EvYW9zcC9leHRlcm5hbC9saWJjeHgvaW5jbHVkZSBcCisgICAgICAgICAgICAgICAgICAgICAgICAgL1ZvbHVtZXMvQS9hb3NwL2Jpb25pYy9saWJjL2luY2x1ZGUgXAorICAgICAgICAgICAgICAgICAgICAgICAgIC9Wb2x1bWVzL0EvYW9zcC9iaW9uaWMvbGliYy9rZXJuZWwvdWFwaSBcCisgICAgICAgICAgICAgICAgICAgICAgICAgL1ZvbHVtZXMvQS9hb3NwL2Jpb25pYy9saWJjL2tlcm5lbC91YXBpL2FzbS1hcm02NCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgL1ZvbHVtZXMvQS9hb3NwL2V4dGVybmFsL2d0ZXN0CisKKyMgWW91IGNhbiB1c2UgdGhlIElOQ0xVREVfRklMRV9QQVRURVJOUyB0YWcgdG8gc3BlY2lmeSBvbmUgb3IgbW9yZSB3aWxkY2FyZAorIyBwYXR0ZXJucyAobGlrZSAqLmggYW5kICouaHBwKSB0byBmaWx0ZXIgb3V0IHRoZSBoZWFkZXItZmlsZXMgaW4gdGhlCisjIGRpcmVjdG9yaWVzLiBJZiBsZWZ0IGJsYW5rLCB0aGUgcGF0dGVybnMgc3BlY2lmaWVkIHdpdGggRklMRV9QQVRURVJOUyB3aWxsIGJlCisjIHVzZWQuCisjIFRoaXMgdGFnIHJlcXVpcmVzIHRoYXQgdGhlIHRhZyBFTkFCTEVfUFJFUFJPQ0VTU0lORyBpcyBzZXQgdG8gWUVTLgorCitJTkNMVURFX0ZJTEVfUEFUVEVSTlMgID0gCisKKyMgVGhlIFBSRURFRklORUQgdGFnIGNhbiBiZSB1c2VkIHRvIHNwZWNpZnkgb25lIG9yIG1vcmUgbWFjcm8gbmFtZXMgdGhhdCBhcmUKKyMgZGVmaW5lZCBiZWZvcmUgdGhlIHByZXByb2Nlc3NvciBpcyBzdGFydGVkIChzaW1pbGFyIHRvIHRoZSAtRCBvcHRpb24gb2YgZS5nLgorIyBnY2MpLiBUaGUgYXJndW1lbnQgb2YgdGhlIHRhZyBpcyBhIGxpc3Qgb2YgbWFjcm9zIG9mIHRoZSBmb3JtOiBuYW1lIG9yCisjIG5hbWU9ZGVmaW5pdGlvbiAobm8gc3BhY2VzKS4gSWYgdGhlIGRlZmluaXRpb24gYW5kIHRoZSAiPSIgYXJlIG9taXR0ZWQsICI9MSIKKyMgaXMgYXNzdW1lZC4gVG8gcHJldmVudCBhIG1hY3JvIGRlZmluaXRpb24gZnJvbSBiZWluZyB1bmRlZmluZWQgdmlhICN1bmRlZiBvcgorIyByZWN1cnNpdmVseSBleHBhbmRlZCB1c2UgdGhlIDo9IG9wZXJhdG9yIGluc3RlYWQgb2YgdGhlID0gb3BlcmF0b3IuCisjIFRoaXMgdGFnIHJlcXVpcmVzIHRoYXQgdGhlIHRhZyBFTkFCTEVfUFJFUFJPQ0VTU0lORyBpcyBzZXQgdG8gWUVTLgorCitQUkVERUZJTkVEICAgICAgICAgICAgID0gX19BUFBMRV9fPSBcCisgICAgICAgICAgICAgICAgICAgICAgICAgX19BTkRST0lEX189MSBcCisgICAgICAgICAgICAgICAgICAgICAgICAgQU5EUk9JRDo9MSBcCisJCQkgX191bnVzZWQ9CisKKyMgSWYgdGhlIE1BQ1JPX0VYUEFOU0lPTiBhbmQgRVhQQU5EX09OTFlfUFJFREVGIHRhZ3MgYXJlIHNldCB0byBZRVMgdGhlbiB0aGlzCisjIHRhZyBjYW4gYmUgdXNlZCB0byBzcGVjaWZ5IGEgbGlzdCBvZiBtYWNybyBuYW1lcyB0aGF0IHNob3VsZCBiZSBleHBhbmRlZC4gVGhlCisjIG1hY3JvIGRlZmluaXRpb24gdGhhdCBpcyBmb3VuZCBpbiB0aGUgc291cmNlcyB3aWxsIGJlIHVzZWQuIFVzZSB0aGUgUFJFREVGSU5FRAorIyB0YWcgaWYgeW91IHdhbnQgdG8gdXNlIGEgZGlmZmVyZW50IG1hY3JvIGRlZmluaXRpb24gdGhhdCBvdmVycnVsZXMgdGhlCisjIGRlZmluaXRpb24gZm91bmQgaW4gdGhlIHNvdXJjZSBjb2RlLgorIyBUaGlzIHRhZyByZXF1aXJlcyB0aGF0IHRoZSB0YWcgRU5BQkxFX1BSRVBST0NFU1NJTkcgaXMgc2V0IHRvIFlFUy4KKworRVhQQU5EX0FTX0RFRklORUQgICAgICA9IERFRklORV9GTEVYSUJMRV9NRVRIT0RTIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICBERUZJTkVfQ0FTVF9PUEVSQVRPUlMKKworIyBJZiB0aGUgU0tJUF9GVU5DVElPTl9NQUNST1MgdGFnIGlzIHNldCB0byBZRVMgdGhlbiBkb3h5Z2VuJ3MgcHJlcHJvY2Vzc29yIHdpbGwKKyMgcmVtb3ZlIGFsbCByZWZlcmVuY2VzIHRvIGZ1bmN0aW9uLWxpa2UgbWFjcm9zIHRoYXQgYXJlIGFsb25lIG9uIGEgbGluZSwgaGF2ZQorIyBhbiBhbGwgdXBwZXJjYXNlIG5hbWUsIGFuZCBkbyBub3QgZW5kIHdpdGggYSBzZW1pY29sb24uIFN1Y2ggZnVuY3Rpb24gbWFjcm9zCisjIGFyZSB0eXBpY2FsbHkgdXNlZCBmb3IgYm9pbGVyLXBsYXRlIGNvZGUsIGFuZCB3aWxsIGNvbmZ1c2UgdGhlIHBhcnNlciBpZiBub3QKKyMgcmVtb3ZlZC4KKyMgVGhlIGRlZmF1bHQgdmFsdWUgaXM6IFlFUy4KKyMgVGhpcyB0YWcgcmVxdWlyZXMgdGhhdCB0aGUgdGFnIEVOQUJMRV9QUkVQUk9DRVNTSU5HIGlzIHNldCB0byBZRVMuCisKK1NLSVBfRlVOQ1RJT05fTUFDUk9TICAgPSBZRVMKKworIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBDb25maWd1cmF0aW9uIG9wdGlvbnMgcmVsYXRlZCB0byBleHRlcm5hbCByZWZlcmVuY2VzCisjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyMgVGhlIFRBR0ZJTEVTIHRhZyBjYW4gYmUgdXNlZCB0byBzcGVjaWZ5IG9uZSBvciBtb3JlIHRhZyBmaWxlcy4gRm9yIGVhY2ggdGFnCisjIGZpbGUgdGhlIGxvY2F0aW9uIG9mIHRoZSBleHRlcm5hbCBkb2N1bWVudGF0aW9uIHNob3VsZCBiZSBhZGRlZC4gVGhlIGZvcm1hdCBvZgorIyBhIHRhZyBmaWxlIHdpdGhvdXQgdGhpcyBsb2NhdGlvbiBpcyBhcyBmb2xsb3dzOgorIyBUQUdGSUxFUyA9IGZpbGUxIGZpbGUyIC4uLgorIyBBZGRpbmcgbG9jYXRpb24gZm9yIHRoZSB0YWcgZmlsZXMgaXMgZG9uZSBhcyBmb2xsb3dzOgorIyBUQUdGSUxFUyA9IGZpbGUxPWxvYzEgImZpbGUyID0gbG9jMiIgLi4uCisjIHdoZXJlIGxvYzEgYW5kIGxvYzIgY2FuIGJlIHJlbGF0aXZlIG9yIGFic29sdXRlIHBhdGhzIG9yIFVSTHMuIFNlZSB0aGUKKyMgc2VjdGlvbiAiTGlua2luZyB0byBleHRlcm5hbCBkb2N1bWVudGF0aW9uIiBmb3IgbW9yZSBpbmZvcm1hdGlvbiBhYm91dCB0aGUgdXNlCisjIG9mIHRhZyBmaWxlcy4KKyMgTm90ZTogRWFjaCB0YWcgZmlsZSBtdXN0IGhhdmUgYSB1bmlxdWUgbmFtZSAod2hlcmUgdGhlIG5hbWUgZG9lcyBOT1QgaW5jbHVkZQorIyB0aGUgcGF0aCkuIElmIGEgdGFnIGZpbGUgaXMgbm90IGxvY2F0ZWQgaW4gdGhlIGRpcmVjdG9yeSBpbiB3aGljaCBkb3h5Z2VuIGlzCisjIHJ1biwgeW91IG11c3QgYWxzbyBzcGVjaWZ5IHRoZSBwYXRoIHRvIHRoZSB0YWdmaWxlIGhlcmUuCisKK1RBR0ZJTEVTICAgICAgICAgICAgICAgPSAKKworIyBXaGVuIGEgZmlsZSBuYW1lIGlzIHNwZWNpZmllZCBhZnRlciBHRU5FUkFURV9UQUdGSUxFLCBkb3h5Z2VuIHdpbGwgY3JlYXRlIGEKKyMgdGFnIGZpbGUgdGhhdCBpcyBiYXNlZCBvbiB0aGUgaW5wdXQgZmlsZXMgaXQgcmVhZHMuIFNlZSBzZWN0aW9uICJMaW5raW5nIHRvCisjIGV4dGVybmFsIGRvY3VtZW50YXRpb24iIGZvciBtb3JlIGluZm9ybWF0aW9uIGFib3V0IHRoZSB1c2FnZSBvZiB0YWcgZmlsZXMuCisKK0dFTkVSQVRFX1RBR0ZJTEUgICAgICAgPSAKKworIyBJZiB0aGUgQUxMRVhURVJOQUxTIHRhZyBpcyBzZXQgdG8gWUVTLCBhbGwgZXh0ZXJuYWwgY2xhc3Mgd2lsbCBiZSBsaXN0ZWQgaW4KKyMgdGhlIGNsYXNzIGluZGV4LiBJZiBzZXQgdG8gTk8sIG9ubHkgdGhlIGluaGVyaXRlZCBleHRlcm5hbCBjbGFzc2VzIHdpbGwgYmUKKyMgbGlzdGVkLgorIyBUaGUgZGVmYXVsdCB2YWx1ZSBpczogTk8uCisKK0FMTEVYVEVSTkFMUyAgICAgICAgICAgPSBOTworCisjIElmIHRoZSBFWFRFUk5BTF9HUk9VUFMgdGFnIGlzIHNldCB0byBZRVMsIGFsbCBleHRlcm5hbCBncm91cHMgd2lsbCBiZSBsaXN0ZWQKKyMgaW4gdGhlIG1vZHVsZXMgaW5kZXguIElmIHNldCB0byBOTywgb25seSB0aGUgY3VycmVudCBwcm9qZWN0J3MgZ3JvdXBzIHdpbGwgYmUKKyMgbGlzdGVkLgorIyBUaGUgZGVmYXVsdCB2YWx1ZSBpczogWUVTLgorCitFWFRFUk5BTF9HUk9VUFMgICAgICAgID0gWUVTCisKKyMgSWYgdGhlIEVYVEVSTkFMX1BBR0VTIHRhZyBpcyBzZXQgdG8gWUVTLCBhbGwgZXh0ZXJuYWwgcGFnZXMgd2lsbCBiZSBsaXN0ZWQgaW4KKyMgdGhlIHJlbGF0ZWQgcGFnZXMgaW5kZXguIElmIHNldCB0byBOTywgb25seSB0aGUgY3VycmVudCBwcm9qZWN0J3MgcGFnZXMgd2lsbAorIyBiZSBsaXN0ZWQuCisjIFRoZSBkZWZhdWx0IHZhbHVlIGlzOiBZRVMuCisKK0VYVEVSTkFMX1BBR0VTICAgICAgICAgPSBZRVMKKworIyBUaGUgUEVSTF9QQVRIIHNob3VsZCBiZSB0aGUgYWJzb2x1dGUgcGF0aCBhbmQgbmFtZSBvZiB0aGUgcGVybCBzY3JpcHQKKyMgaW50ZXJwcmV0ZXIgKGkuZS4gdGhlIHJlc3VsdCBvZiAnd2hpY2ggcGVybCcpLgorIyBUaGUgZGVmYXVsdCBmaWxlICh3aXRoIGFic29sdXRlIHBhdGgpIGlzOiAvdXNyL2Jpbi9wZXJsLgorCitQRVJMX1BBVEggICAgICAgICAgICAgID0gL3Vzci9iaW4vcGVybAorCisjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIENvbmZpZ3VyYXRpb24gb3B0aW9ucyByZWxhdGVkIHRvIHRoZSBkb3QgdG9vbAorIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisjIElmIHRoZSBDTEFTU19ESUFHUkFNUyB0YWcgaXMgc2V0IHRvIFlFUywgZG94eWdlbiB3aWxsIGdlbmVyYXRlIGEgY2xhc3MgZGlhZ3JhbQorIyAoaW4gSFRNTCBhbmQgTGFUZVgpIGZvciBjbGFzc2VzIHdpdGggYmFzZSBvciBzdXBlciBjbGFzc2VzLiBTZXR0aW5nIHRoZSB0YWcgdG8KKyMgTk8gdHVybnMgdGhlIGRpYWdyYW1zIG9mZi4gTm90ZSB0aGF0IHRoaXMgb3B0aW9uIGFsc28gd29ya3Mgd2l0aCBIQVZFX0RPVAorIyBkaXNhYmxlZCwgYnV0IGl0IGlzIHJlY29tbWVuZGVkIHRvIGluc3RhbGwgYW5kIHVzZSBkb3QsIHNpbmNlIGl0IHlpZWxkcyBtb3JlCisjIHBvd2VyZnVsIGdyYXBocy4KKyMgVGhlIGRlZmF1bHQgdmFsdWUgaXM6IFlFUy4KKworQ0xBU1NfRElBR1JBTVMgICAgICAgICA9IFlFUworCisjIFlvdSBjYW4gZGVmaW5lIG1lc3NhZ2Ugc2VxdWVuY2UgY2hhcnRzIHdpdGhpbiBkb3h5Z2VuIGNvbW1lbnRzIHVzaW5nIHRoZSBcbXNjCisjIGNvbW1hbmQuIERveHlnZW4gd2lsbCB0aGVuIHJ1biB0aGUgbXNjZ2VuIHRvb2wgKHNlZToKKyMgaHR0cDovL3d3dy5tY3Rlcm5hbi5tZS51ay9tc2NnZW4vKSkgdG8gcHJvZHVjZSB0aGUgY2hhcnQgYW5kIGluc2VydCBpdCBpbiB0aGUKKyMgZG9jdW1lbnRhdGlvbi4gVGhlIE1TQ0dFTl9QQVRIIHRhZyBhbGxvd3MgeW91IHRvIHNwZWNpZnkgdGhlIGRpcmVjdG9yeSB3aGVyZQorIyB0aGUgbXNjZ2VuIHRvb2wgcmVzaWRlcy4gSWYgbGVmdCBlbXB0eSB0aGUgdG9vbCBpcyBhc3N1bWVkIHRvIGJlIGZvdW5kIGluIHRoZQorIyBkZWZhdWx0IHNlYXJjaCBwYXRoLgorCitNU0NHRU5fUEFUSCAgICAgICAgICAgID0gCisKKyMgWW91IGNhbiBpbmNsdWRlIGRpYWdyYW1zIG1hZGUgd2l0aCBkaWEgaW4gZG94eWdlbiBkb2N1bWVudGF0aW9uLiBEb3h5Z2VuIHdpbGwKKyMgdGhlbiBydW4gZGlhIHRvIHByb2R1Y2UgdGhlIGRpYWdyYW0gYW5kIGluc2VydCBpdCBpbiB0aGUgZG9jdW1lbnRhdGlvbi4gVGhlCisjIERJQV9QQVRIIHRhZyBhbGxvd3MgeW91IHRvIHNwZWNpZnkgdGhlIGRpcmVjdG9yeSB3aGVyZSB0aGUgZGlhIGJpbmFyeSByZXNpZGVzLgorIyBJZiBsZWZ0IGVtcHR5IGRpYSBpcyBhc3N1bWVkIHRvIGJlIGZvdW5kIGluIHRoZSBkZWZhdWx0IHNlYXJjaCBwYXRoLgorCitESUFfUEFUSCAgICAgICAgICAgICAgID0gCisKKyMgSWYgc2V0IHRvIFlFUyB0aGUgaW5oZXJpdGFuY2UgYW5kIGNvbGxhYm9yYXRpb24gZ3JhcGhzIHdpbGwgaGlkZSBpbmhlcml0YW5jZQorIyBhbmQgdXNhZ2UgcmVsYXRpb25zIGlmIHRoZSB0YXJnZXQgaXMgdW5kb2N1bWVudGVkIG9yIGlzIG5vdCBhIGNsYXNzLgorIyBUaGUgZGVmYXVsdCB2YWx1ZSBpczogWUVTLgorCitISURFX1VORE9DX1JFTEFUSU9OUyAgID0gWUVTCisKKyMgSWYgeW91IHNldCB0aGUgSEFWRV9ET1QgdGFnIHRvIFlFUyB0aGVuIGRveHlnZW4gd2lsbCBhc3N1bWUgdGhlIGRvdCB0b29sIGlzCisjIGF2YWlsYWJsZSBmcm9tIHRoZSBwYXRoLiBUaGlzIHRvb2wgaXMgcGFydCBvZiBHcmFwaHZpeiAoc2VlOgorIyBodHRwOi8vd3d3LmdyYXBodml6Lm9yZy8pLCBhIGdyYXBoIHZpc3VhbGl6YXRpb24gdG9vbGtpdCBmcm9tIEFUJlQgYW5kIEx1Y2VudAorIyBCZWxsIExhYnMuIFRoZSBvdGhlciBvcHRpb25zIGluIHRoaXMgc2VjdGlvbiBoYXZlIG5vIGVmZmVjdCBpZiB0aGlzIG9wdGlvbiBpcworIyBzZXQgdG8gTk8KKyMgVGhlIGRlZmF1bHQgdmFsdWUgaXM6IE5PLgorCitIQVZFX0RPVCAgICAgICAgICAgICAgID0gTk8KKworIyBUaGUgRE9UX05VTV9USFJFQURTIHNwZWNpZmllcyB0aGUgbnVtYmVyIG9mIGRvdCBpbnZvY2F0aW9ucyBkb3h5Z2VuIGlzIGFsbG93ZWQKKyMgdG8gcnVuIGluIHBhcmFsbGVsLiBXaGVuIHNldCB0byAwIGRveHlnZW4gd2lsbCBiYXNlIHRoaXMgb24gdGhlIG51bWJlciBvZgorIyBwcm9jZXNzb3JzIGF2YWlsYWJsZSBpbiB0aGUgc3lzdGVtLiBZb3UgY2FuIHNldCBpdCBleHBsaWNpdGx5IHRvIGEgdmFsdWUKKyMgbGFyZ2VyIHRoYW4gMCB0byBnZXQgY29udHJvbCBvdmVyIHRoZSBiYWxhbmNlIGJldHdlZW4gQ1BVIGxvYWQgYW5kIHByb2Nlc3NpbmcKKyMgc3BlZWQuCisjIE1pbmltdW0gdmFsdWU6IDAsIG1heGltdW0gdmFsdWU6IDMyLCBkZWZhdWx0IHZhbHVlOiAwLgorIyBUaGlzIHRhZyByZXF1aXJlcyB0aGF0IHRoZSB0YWcgSEFWRV9ET1QgaXMgc2V0IHRvIFlFUy4KKworRE9UX05VTV9USFJFQURTICAgICAgICA9IDAKKworIyBXaGVuIHlvdSB3YW50IGEgZGlmZmVyZW50bHkgbG9va2luZyBmb250IGluIHRoZSBkb3QgZmlsZXMgdGhhdCBkb3h5Z2VuCisjIGdlbmVyYXRlcyB5b3UgY2FuIHNwZWNpZnkgdGhlIGZvbnQgbmFtZSB1c2luZyBET1RfRk9OVE5BTUUuIFlvdSBuZWVkIHRvIG1ha2UKKyMgc3VyZSBkb3QgaXMgYWJsZSB0byBmaW5kIHRoZSBmb250LCB3aGljaCBjYW4gYmUgZG9uZSBieSBwdXR0aW5nIGl0IGluIGEKKyMgc3RhbmRhcmQgbG9jYXRpb24gb3IgYnkgc2V0dGluZyB0aGUgRE9URk9OVFBBVEggZW52aXJvbm1lbnQgdmFyaWFibGUgb3IgYnkKKyMgc2V0dGluZyBET1RfRk9OVFBBVEggdG8gdGhlIGRpcmVjdG9yeSBjb250YWluaW5nIHRoZSBmb250LgorIyBUaGUgZGVmYXVsdCB2YWx1ZSBpczogSGVsdmV0aWNhLgorIyBUaGlzIHRhZyByZXF1aXJlcyB0aGF0IHRoZSB0YWcgSEFWRV9ET1QgaXMgc2V0IHRvIFlFUy4KKworRE9UX0ZPTlROQU1FICAgICAgICAgICA9IEhlbHZldGljYQorCisjIFRoZSBET1RfRk9OVFNJWkUgdGFnIGNhbiBiZSB1c2VkIHRvIHNldCB0aGUgc2l6ZSAoaW4gcG9pbnRzKSBvZiB0aGUgZm9udCBvZgorIyBkb3QgZ3JhcGhzLgorIyBNaW5pbXVtIHZhbHVlOiA0LCBtYXhpbXVtIHZhbHVlOiAyNCwgZGVmYXVsdCB2YWx1ZTogMTAuCisjIFRoaXMgdGFnIHJlcXVpcmVzIHRoYXQgdGhlIHRhZyBIQVZFX0RPVCBpcyBzZXQgdG8gWUVTLgorCitET1RfRk9OVFNJWkUgICAgICAgICAgID0gMTAKKworIyBCeSBkZWZhdWx0IGRveHlnZW4gd2lsbCB0ZWxsIGRvdCB0byB1c2UgdGhlIGRlZmF1bHQgZm9udCBhcyBzcGVjaWZpZWQgd2l0aAorIyBET1RfRk9OVE5BTUUuIElmIHlvdSBzcGVjaWZ5IGEgZGlmZmVyZW50IGZvbnQgdXNpbmcgRE9UX0ZPTlROQU1FIHlvdSBjYW4gc2V0CisjIHRoZSBwYXRoIHdoZXJlIGRvdCBjYW4gZmluZCBpdCB1c2luZyB0aGlzIHRhZy4KKyMgVGhpcyB0YWcgcmVxdWlyZXMgdGhhdCB0aGUgdGFnIEhBVkVfRE9UIGlzIHNldCB0byBZRVMuCisKK0RPVF9GT05UUEFUSCAgICAgICAgICAgPSAKKworIyBJZiB0aGUgQ0xBU1NfR1JBUEggdGFnIGlzIHNldCB0byBZRVMgdGhlbiBkb3h5Z2VuIHdpbGwgZ2VuZXJhdGUgYSBncmFwaCBmb3IKKyMgZWFjaCBkb2N1bWVudGVkIGNsYXNzIHNob3dpbmcgdGhlIGRpcmVjdCBhbmQgaW5kaXJlY3QgaW5oZXJpdGFuY2UgcmVsYXRpb25zLgorIyBTZXR0aW5nIHRoaXMgdGFnIHRvIFlFUyB3aWxsIGZvcmNlIHRoZSBDTEFTU19ESUFHUkFNUyB0YWcgdG8gTk8uCisjIFRoZSBkZWZhdWx0IHZhbHVlIGlzOiBZRVMuCisjIFRoaXMgdGFnIHJlcXVpcmVzIHRoYXQgdGhlIHRhZyBIQVZFX0RPVCBpcyBzZXQgdG8gWUVTLgorCitDTEFTU19HUkFQSCAgICAgICAgICAgID0gWUVTCisKKyMgSWYgdGhlIENPTExBQk9SQVRJT05fR1JBUEggdGFnIGlzIHNldCB0byBZRVMgdGhlbiBkb3h5Z2VuIHdpbGwgZ2VuZXJhdGUgYQorIyBncmFwaCBmb3IgZWFjaCBkb2N1bWVudGVkIGNsYXNzIHNob3dpbmcgdGhlIGRpcmVjdCBhbmQgaW5kaXJlY3QgaW1wbGVtZW50YXRpb24KKyMgZGVwZW5kZW5jaWVzIChpbmhlcml0YW5jZSwgY29udGFpbm1lbnQsIGFuZCBjbGFzcyByZWZlcmVuY2VzIHZhcmlhYmxlcykgb2YgdGhlCisjIGNsYXNzIHdpdGggb3RoZXIgZG9jdW1lbnRlZCBjbGFzc2VzLgorIyBUaGUgZGVmYXVsdCB2YWx1ZSBpczogWUVTLgorIyBUaGlzIHRhZyByZXF1aXJlcyB0aGF0IHRoZSB0YWcgSEFWRV9ET1QgaXMgc2V0IHRvIFlFUy4KKworQ09MTEFCT1JBVElPTl9HUkFQSCAgICA9IFlFUworCisjIElmIHRoZSBHUk9VUF9HUkFQSFMgdGFnIGlzIHNldCB0byBZRVMgdGhlbiBkb3h5Z2VuIHdpbGwgZ2VuZXJhdGUgYSBncmFwaCBmb3IKKyMgZ3JvdXBzLCBzaG93aW5nIHRoZSBkaXJlY3QgZ3JvdXBzIGRlcGVuZGVuY2llcy4KKyMgVGhlIGRlZmF1bHQgdmFsdWUgaXM6IFlFUy4KKyMgVGhpcyB0YWcgcmVxdWlyZXMgdGhhdCB0aGUgdGFnIEhBVkVfRE9UIGlzIHNldCB0byBZRVMuCisKK0dST1VQX0dSQVBIUyAgICAgICAgICAgPSBZRVMKKworIyBJZiB0aGUgVU1MX0xPT0sgdGFnIGlzIHNldCB0byBZRVMsIGRveHlnZW4gd2lsbCBnZW5lcmF0ZSBpbmhlcml0YW5jZSBhbmQKKyMgY29sbGFib3JhdGlvbiBkaWFncmFtcyBpbiBhIHN0eWxlIHNpbWlsYXIgdG8gdGhlIE9NRydzIFVuaWZpZWQgTW9kZWxpbmcKKyMgTGFuZ3VhZ2UuCisjIFRoZSBkZWZhdWx0IHZhbHVlIGlzOiBOTy4KKyMgVGhpcyB0YWcgcmVxdWlyZXMgdGhhdCB0aGUgdGFnIEhBVkVfRE9UIGlzIHNldCB0byBZRVMuCisKK1VNTF9MT09LICAgICAgICAgICAgICAgPSBOTworCisjIElmIHRoZSBVTUxfTE9PSyB0YWcgaXMgZW5hYmxlZCwgdGhlIGZpZWxkcyBhbmQgbWV0aG9kcyBhcmUgc2hvd24gaW5zaWRlIHRoZQorIyBjbGFzcyBub2RlLiBJZiB0aGVyZSBhcmUgbWFueSBmaWVsZHMgb3IgbWV0aG9kcyBhbmQgbWFueSBub2RlcyB0aGUgZ3JhcGggbWF5CisjIGJlY29tZSB0b28gYmlnIHRvIGJlIHVzZWZ1bC4gVGhlIFVNTF9MSU1JVF9OVU1fRklFTERTIHRocmVzaG9sZCBsaW1pdHMgdGhlCisjIG51bWJlciBvZiBpdGVtcyBmb3IgZWFjaCB0eXBlIHRvIG1ha2UgdGhlIHNpemUgbW9yZSBtYW5hZ2VhYmxlLiBTZXQgdGhpcyB0byAwCisjIGZvciBubyBsaW1pdC4gTm90ZSB0aGF0IHRoZSB0aHJlc2hvbGQgbWF5IGJlIGV4Y2VlZGVkIGJ5IDUwJSBiZWZvcmUgdGhlIGxpbWl0CisjIGlzIGVuZm9yY2VkLiBTbyB3aGVuIHlvdSBzZXQgdGhlIHRocmVzaG9sZCB0byAxMCwgdXAgdG8gMTUgZmllbGRzIG1heSBhcHBlYXIsCisjIGJ1dCBpZiB0aGUgbnVtYmVyIGV4Y2VlZHMgMTUsIHRoZSB0b3RhbCBhbW91bnQgb2YgZmllbGRzIHNob3duIGlzIGxpbWl0ZWQgdG8KKyMgMTAuCisjIE1pbmltdW0gdmFsdWU6IDAsIG1heGltdW0gdmFsdWU6IDEwMCwgZGVmYXVsdCB2YWx1ZTogMTAuCisjIFRoaXMgdGFnIHJlcXVpcmVzIHRoYXQgdGhlIHRhZyBIQVZFX0RPVCBpcyBzZXQgdG8gWUVTLgorCitVTUxfTElNSVRfTlVNX0ZJRUxEUyAgID0gMTAKKworIyBJZiB0aGUgVEVNUExBVEVfUkVMQVRJT05TIHRhZyBpcyBzZXQgdG8gWUVTIHRoZW4gdGhlIGluaGVyaXRhbmNlIGFuZAorIyBjb2xsYWJvcmF0aW9uIGdyYXBocyB3aWxsIHNob3cgdGhlIHJlbGF0aW9ucyBiZXR3ZWVuIHRlbXBsYXRlcyBhbmQgdGhlaXIKKyMgaW5zdGFuY2VzLgorIyBUaGUgZGVmYXVsdCB2YWx1ZSBpczogTk8uCisjIFRoaXMgdGFnIHJlcXVpcmVzIHRoYXQgdGhlIHRhZyBIQVZFX0RPVCBpcyBzZXQgdG8gWUVTLgorCitURU1QTEFURV9SRUxBVElPTlMgICAgID0gTk8KKworIyBJZiB0aGUgSU5DTFVERV9HUkFQSCwgRU5BQkxFX1BSRVBST0NFU1NJTkcgYW5kIFNFQVJDSF9JTkNMVURFUyB0YWdzIGFyZSBzZXQgdG8KKyMgWUVTIHRoZW4gZG94eWdlbiB3aWxsIGdlbmVyYXRlIGEgZ3JhcGggZm9yIGVhY2ggZG9jdW1lbnRlZCBmaWxlIHNob3dpbmcgdGhlCisjIGRpcmVjdCBhbmQgaW5kaXJlY3QgaW5jbHVkZSBkZXBlbmRlbmNpZXMgb2YgdGhlIGZpbGUgd2l0aCBvdGhlciBkb2N1bWVudGVkCisjIGZpbGVzLgorIyBUaGUgZGVmYXVsdCB2YWx1ZSBpczogWUVTLgorIyBUaGlzIHRhZyByZXF1aXJlcyB0aGF0IHRoZSB0YWcgSEFWRV9ET1QgaXMgc2V0IHRvIFlFUy4KKworSU5DTFVERV9HUkFQSCAgICAgICAgICA9IFlFUworCisjIElmIHRoZSBJTkNMVURFRF9CWV9HUkFQSCwgRU5BQkxFX1BSRVBST0NFU1NJTkcgYW5kIFNFQVJDSF9JTkNMVURFUyB0YWdzIGFyZQorIyBzZXQgdG8gWUVTIHRoZW4gZG94eWdlbiB3aWxsIGdlbmVyYXRlIGEgZ3JhcGggZm9yIGVhY2ggZG9jdW1lbnRlZCBmaWxlIHNob3dpbmcKKyMgdGhlIGRpcmVjdCBhbmQgaW5kaXJlY3QgaW5jbHVkZSBkZXBlbmRlbmNpZXMgb2YgdGhlIGZpbGUgd2l0aCBvdGhlciBkb2N1bWVudGVkCisjIGZpbGVzLgorIyBUaGUgZGVmYXVsdCB2YWx1ZSBpczogWUVTLgorIyBUaGlzIHRhZyByZXF1aXJlcyB0aGF0IHRoZSB0YWcgSEFWRV9ET1QgaXMgc2V0IHRvIFlFUy4KKworSU5DTFVERURfQllfR1JBUEggICAgICA9IFlFUworCisjIElmIHRoZSBDQUxMX0dSQVBIIHRhZyBpcyBzZXQgdG8gWUVTIHRoZW4gZG94eWdlbiB3aWxsIGdlbmVyYXRlIGEgY2FsbAorIyBkZXBlbmRlbmN5IGdyYXBoIGZvciBldmVyeSBnbG9iYWwgZnVuY3Rpb24gb3IgY2xhc3MgbWV0aG9kLgorIworIyBOb3RlIHRoYXQgZW5hYmxpbmcgdGhpcyBvcHRpb24gd2lsbCBzaWduaWZpY2FudGx5IGluY3JlYXNlIHRoZSB0aW1lIG9mIGEgcnVuLgorIyBTbyBpbiBtb3N0IGNhc2VzIGl0IHdpbGwgYmUgYmV0dGVyIHRvIGVuYWJsZSBjYWxsIGdyYXBocyBmb3Igc2VsZWN0ZWQKKyMgZnVuY3Rpb25zIG9ubHkgdXNpbmcgdGhlIFxjYWxsZ3JhcGggY29tbWFuZC4gRGlzYWJsaW5nIGEgY2FsbCBncmFwaCBjYW4gYmUKKyMgYWNjb21wbGlzaGVkIGJ5IG1lYW5zIG9mIHRoZSBjb21tYW5kIFxoaWRlY2FsbGdyYXBoLgorIyBUaGUgZGVmYXVsdCB2YWx1ZSBpczogTk8uCisjIFRoaXMgdGFnIHJlcXVpcmVzIHRoYXQgdGhlIHRhZyBIQVZFX0RPVCBpcyBzZXQgdG8gWUVTLgorCitDQUxMX0dSQVBIICAgICAgICAgICAgID0gTk8KKworIyBJZiB0aGUgQ0FMTEVSX0dSQVBIIHRhZyBpcyBzZXQgdG8gWUVTIHRoZW4gZG94eWdlbiB3aWxsIGdlbmVyYXRlIGEgY2FsbGVyCisjIGRlcGVuZGVuY3kgZ3JhcGggZm9yIGV2ZXJ5IGdsb2JhbCBmdW5jdGlvbiBvciBjbGFzcyBtZXRob2QuCisjCisjIE5vdGUgdGhhdCBlbmFibGluZyB0aGlzIG9wdGlvbiB3aWxsIHNpZ25pZmljYW50bHkgaW5jcmVhc2UgdGhlIHRpbWUgb2YgYSBydW4uCisjIFNvIGluIG1vc3QgY2FzZXMgaXQgd2lsbCBiZSBiZXR0ZXIgdG8gZW5hYmxlIGNhbGxlciBncmFwaHMgZm9yIHNlbGVjdGVkCisjIGZ1bmN0aW9ucyBvbmx5IHVzaW5nIHRoZSBcY2FsbGVyZ3JhcGggY29tbWFuZC4gRGlzYWJsaW5nIGEgY2FsbGVyIGdyYXBoIGNhbiBiZQorIyBhY2NvbXBsaXNoZWQgYnkgbWVhbnMgb2YgdGhlIGNvbW1hbmQgXGhpZGVjYWxsZXJncmFwaC4KKyMgVGhlIGRlZmF1bHQgdmFsdWUgaXM6IE5PLgorIyBUaGlzIHRhZyByZXF1aXJlcyB0aGF0IHRoZSB0YWcgSEFWRV9ET1QgaXMgc2V0IHRvIFlFUy4KKworQ0FMTEVSX0dSQVBIICAgICAgICAgICA9IE5PCisKKyMgSWYgdGhlIEdSQVBISUNBTF9ISUVSQVJDSFkgdGFnIGlzIHNldCB0byBZRVMgdGhlbiBkb3h5Z2VuIHdpbGwgZ3JhcGhpY2FsCisjIGhpZXJhcmNoeSBvZiBhbGwgY2xhc3NlcyBpbnN0ZWFkIG9mIGEgdGV4dHVhbCBvbmUuCisjIFRoZSBkZWZhdWx0IHZhbHVlIGlzOiBZRVMuCisjIFRoaXMgdGFnIHJlcXVpcmVzIHRoYXQgdGhlIHRhZyBIQVZFX0RPVCBpcyBzZXQgdG8gWUVTLgorCitHUkFQSElDQUxfSElFUkFSQ0hZICAgID0gWUVTCisKKyMgSWYgdGhlIERJUkVDVE9SWV9HUkFQSCB0YWcgaXMgc2V0IHRvIFlFUyB0aGVuIGRveHlnZW4gd2lsbCBzaG93IHRoZQorIyBkZXBlbmRlbmNpZXMgYSBkaXJlY3RvcnkgaGFzIG9uIG90aGVyIGRpcmVjdG9yaWVzIGluIGEgZ3JhcGhpY2FsIHdheS4gVGhlCisjIGRlcGVuZGVuY3kgcmVsYXRpb25zIGFyZSBkZXRlcm1pbmVkIGJ5IHRoZSAjaW5jbHVkZSByZWxhdGlvbnMgYmV0d2VlbiB0aGUKKyMgZmlsZXMgaW4gdGhlIGRpcmVjdG9yaWVzLgorIyBUaGUgZGVmYXVsdCB2YWx1ZSBpczogWUVTLgorIyBUaGlzIHRhZyByZXF1aXJlcyB0aGF0IHRoZSB0YWcgSEFWRV9ET1QgaXMgc2V0IHRvIFlFUy4KKworRElSRUNUT1JZX0dSQVBIICAgICAgICA9IFlFUworCisjIFRoZSBET1RfSU1BR0VfRk9STUFUIHRhZyBjYW4gYmUgdXNlZCB0byBzZXQgdGhlIGltYWdlIGZvcm1hdCBvZiB0aGUgaW1hZ2VzCisjIGdlbmVyYXRlZCBieSBkb3QuIEZvciBhbiBleHBsYW5hdGlvbiBvZiB0aGUgaW1hZ2UgZm9ybWF0cyBzZWUgdGhlIHNlY3Rpb24KKyMgb3V0cHV0IGZvcm1hdHMgaW4gdGhlIGRvY3VtZW50YXRpb24gb2YgdGhlIGRvdCB0b29sIChHcmFwaHZpeiAoc2VlOgorIyBodHRwOi8vd3d3LmdyYXBodml6Lm9yZy8pKS4KKyMgTm90ZTogSWYgeW91IGNob29zZSBzdmcgeW91IG5lZWQgdG8gc2V0IEhUTUxfRklMRV9FWFRFTlNJT04gdG8geGh0bWwgaW4gb3JkZXIKKyMgdG8gbWFrZSB0aGUgU1ZHIGZpbGVzIHZpc2libGUgaW4gSUUgOSsgKG90aGVyIGJyb3dzZXJzIGRvIG5vdCBoYXZlIHRoaXMKKyMgcmVxdWlyZW1lbnQpLgorIyBQb3NzaWJsZSB2YWx1ZXMgYXJlOiBwbmcsIGpwZywgZ2lmLCBzdmcsIHBuZzpnZCwgcG5nOmdkOmdkLCBwbmc6Y2Fpcm8sCisjIHBuZzpjYWlybzpnZCwgcG5nOmNhaXJvOmNhaXJvLCBwbmc6Y2Fpcm86Z2RpcGx1cywgcG5nOmdkaXBsdXMgYW5kCisjIHBuZzpnZGlwbHVzOmdkaXBsdXMuCisjIFRoZSBkZWZhdWx0IHZhbHVlIGlzOiBwbmcuCisjIFRoaXMgdGFnIHJlcXVpcmVzIHRoYXQgdGhlIHRhZyBIQVZFX0RPVCBpcyBzZXQgdG8gWUVTLgorCitET1RfSU1BR0VfRk9STUFUICAgICAgID0gcG5nCisKKyMgSWYgRE9UX0lNQUdFX0ZPUk1BVCBpcyBzZXQgdG8gc3ZnLCB0aGVuIHRoaXMgb3B0aW9uIGNhbiBiZSBzZXQgdG8gWUVTIHRvCisjIGVuYWJsZSBnZW5lcmF0aW9uIG9mIGludGVyYWN0aXZlIFNWRyBpbWFnZXMgdGhhdCBhbGxvdyB6b29taW5nIGFuZCBwYW5uaW5nLgorIworIyBOb3RlIHRoYXQgdGhpcyByZXF1aXJlcyBhIG1vZGVybiBicm93c2VyIG90aGVyIHRoYW4gSW50ZXJuZXQgRXhwbG9yZXIuIFRlc3RlZAorIyBhbmQgd29ya2luZyBhcmUgRmlyZWZveCwgQ2hyb21lLCBTYWZhcmksIGFuZCBPcGVyYS4KKyMgTm90ZTogRm9yIElFIDkrIHlvdSBuZWVkIHRvIHNldCBIVE1MX0ZJTEVfRVhURU5TSU9OIHRvIHhodG1sIGluIG9yZGVyIHRvIG1ha2UKKyMgdGhlIFNWRyBmaWxlcyB2aXNpYmxlLiBPbGRlciB2ZXJzaW9ucyBvZiBJRSBkbyBub3QgaGF2ZSBTVkcgc3VwcG9ydC4KKyMgVGhlIGRlZmF1bHQgdmFsdWUgaXM6IE5PLgorIyBUaGlzIHRhZyByZXF1aXJlcyB0aGF0IHRoZSB0YWcgSEFWRV9ET1QgaXMgc2V0IHRvIFlFUy4KKworSU5URVJBQ1RJVkVfU1ZHICAgICAgICA9IE5PCisKKyMgVGhlIERPVF9QQVRIIHRhZyBjYW4gYmUgdXNlZCB0byBzcGVjaWZ5IHRoZSBwYXRoIHdoZXJlIHRoZSBkb3QgdG9vbCBjYW4gYmUKKyMgZm91bmQuIElmIGxlZnQgYmxhbmssIGl0IGlzIGFzc3VtZWQgdGhlIGRvdCB0b29sIGNhbiBiZSBmb3VuZCBpbiB0aGUgcGF0aC4KKyMgVGhpcyB0YWcgcmVxdWlyZXMgdGhhdCB0aGUgdGFnIEhBVkVfRE9UIGlzIHNldCB0byBZRVMuCisKK0RPVF9QQVRIICAgICAgICAgICAgICAgPSAKKworIyBUaGUgRE9URklMRV9ESVJTIHRhZyBjYW4gYmUgdXNlZCB0byBzcGVjaWZ5IG9uZSBvciBtb3JlIGRpcmVjdG9yaWVzIHRoYXQKKyMgY29udGFpbiBkb3QgZmlsZXMgdGhhdCBhcmUgaW5jbHVkZWQgaW4gdGhlIGRvY3VtZW50YXRpb24gKHNlZSB0aGUgXGRvdGZpbGUKKyMgY29tbWFuZCkuCisjIFRoaXMgdGFnIHJlcXVpcmVzIHRoYXQgdGhlIHRhZyBIQVZFX0RPVCBpcyBzZXQgdG8gWUVTLgorCitET1RGSUxFX0RJUlMgICAgICAgICAgID0gCisKKyMgVGhlIE1TQ0ZJTEVfRElSUyB0YWcgY2FuIGJlIHVzZWQgdG8gc3BlY2lmeSBvbmUgb3IgbW9yZSBkaXJlY3RvcmllcyB0aGF0CisjIGNvbnRhaW4gbXNjIGZpbGVzIHRoYXQgYXJlIGluY2x1ZGVkIGluIHRoZSBkb2N1bWVudGF0aW9uIChzZWUgdGhlIFxtc2NmaWxlCisjIGNvbW1hbmQpLgorCitNU0NGSUxFX0RJUlMgICAgICAgICAgID0gCisKKyMgVGhlIERJQUZJTEVfRElSUyB0YWcgY2FuIGJlIHVzZWQgdG8gc3BlY2lmeSBvbmUgb3IgbW9yZSBkaXJlY3RvcmllcyB0aGF0CisjIGNvbnRhaW4gZGlhIGZpbGVzIHRoYXQgYXJlIGluY2x1ZGVkIGluIHRoZSBkb2N1bWVudGF0aW9uIChzZWUgdGhlIFxkaWFmaWxlCisjIGNvbW1hbmQpLgorCitESUFGSUxFX0RJUlMgICAgICAgICAgID0gCisKKyMgV2hlbiB1c2luZyBwbGFudHVtbCwgdGhlIFBMQU5UVU1MX0pBUl9QQVRIIHRhZyBzaG91bGQgYmUgdXNlZCB0byBzcGVjaWZ5IHRoZQorIyBwYXRoIHdoZXJlIGphdmEgY2FuIGZpbmQgdGhlIHBsYW50dW1sLmphciBmaWxlLiBJZiBsZWZ0IGJsYW5rLCBpdCBpcyBhc3N1bWVkCisjIFBsYW50VU1MIGlzIG5vdCB1c2VkIG9yIGNhbGxlZCBkdXJpbmcgYSBwcmVwcm9jZXNzaW5nIHN0ZXAuIERveHlnZW4gd2lsbAorIyBnZW5lcmF0ZSBhIHdhcm5pbmcgd2hlbiBpdCBlbmNvdW50ZXJzIGEgXHN0YXJ0dW1sIGNvbW1hbmQgaW4gdGhpcyBjYXNlIGFuZAorIyB3aWxsIG5vdCBnZW5lcmF0ZSBvdXRwdXQgZm9yIHRoZSBkaWFncmFtLgorCitQTEFOVFVNTF9KQVJfUEFUSCAgICAgID0gCisKKyMgV2hlbiB1c2luZyBwbGFudHVtbCwgdGhlIHNwZWNpZmllZCBwYXRocyBhcmUgc2VhcmNoZWQgZm9yIGZpbGVzIHNwZWNpZmllZCBieQorIyB0aGUgIWluY2x1ZGUgc3RhdGVtZW50IGluIGEgcGxhbnR1bWwgYmxvY2suCisKK1BMQU5UVU1MX0lOQ0xVREVfUEFUSCAgPSAKKworIyBUaGUgRE9UX0dSQVBIX01BWF9OT0RFUyB0YWcgY2FuIGJlIHVzZWQgdG8gc2V0IHRoZSBtYXhpbXVtIG51bWJlciBvZiBub2RlcworIyB0aGF0IHdpbGwgYmUgc2hvd24gaW4gdGhlIGdyYXBoLiBJZiB0aGUgbnVtYmVyIG9mIG5vZGVzIGluIGEgZ3JhcGggYmVjb21lcworIyBsYXJnZXIgdGhhbiB0aGlzIHZhbHVlLCBkb3h5Z2VuIHdpbGwgdHJ1bmNhdGUgdGhlIGdyYXBoLCB3aGljaCBpcyB2aXN1YWxpemVkCisjIGJ5IHJlcHJlc2VudGluZyBhIG5vZGUgYXMgYSByZWQgYm94LiBOb3RlIHRoYXQgZG94eWdlbiBpZiB0aGUgbnVtYmVyIG9mIGRpcmVjdAorIyBjaGlsZHJlbiBvZiB0aGUgcm9vdCBub2RlIGluIGEgZ3JhcGggaXMgYWxyZWFkeSBsYXJnZXIgdGhhbgorIyBET1RfR1JBUEhfTUFYX05PREVTIHRoZW4gdGhlIGdyYXBoIHdpbGwgbm90IGJlIHNob3duIGF0IGFsbC4gQWxzbyBub3RlIHRoYXQKKyMgdGhlIHNpemUgb2YgYSBncmFwaCBjYW4gYmUgZnVydGhlciByZXN0cmljdGVkIGJ5IE1BWF9ET1RfR1JBUEhfREVQVEguCisjIE1pbmltdW0gdmFsdWU6IDAsIG1heGltdW0gdmFsdWU6IDEwMDAwLCBkZWZhdWx0IHZhbHVlOiA1MC4KKyMgVGhpcyB0YWcgcmVxdWlyZXMgdGhhdCB0aGUgdGFnIEhBVkVfRE9UIGlzIHNldCB0byBZRVMuCisKK0RPVF9HUkFQSF9NQVhfTk9ERVMgICAgPSA1MAorCisjIFRoZSBNQVhfRE9UX0dSQVBIX0RFUFRIIHRhZyBjYW4gYmUgdXNlZCB0byBzZXQgdGhlIG1heGltdW0gZGVwdGggb2YgdGhlIGdyYXBocworIyBnZW5lcmF0ZWQgYnkgZG90LiBBIGRlcHRoIHZhbHVlIG9mIDMgbWVhbnMgdGhhdCBvbmx5IG5vZGVzIHJlYWNoYWJsZSBmcm9tIHRoZQorIyByb290IGJ5IGZvbGxvd2luZyBhIHBhdGggdmlhIGF0IG1vc3QgMyBlZGdlcyB3aWxsIGJlIHNob3duLiBOb2RlcyB0aGF0IGxheQorIyBmdXJ0aGVyIGZyb20gdGhlIHJvb3Qgbm9kZSB3aWxsIGJlIG9taXR0ZWQuIE5vdGUgdGhhdCBzZXR0aW5nIHRoaXMgb3B0aW9uIHRvIDEKKyMgb3IgMiBtYXkgZ3JlYXRseSByZWR1Y2UgdGhlIGNvbXB1dGF0aW9uIHRpbWUgbmVlZGVkIGZvciBsYXJnZSBjb2RlIGJhc2VzLiBBbHNvCisjIG5vdGUgdGhhdCB0aGUgc2l6ZSBvZiBhIGdyYXBoIGNhbiBiZSBmdXJ0aGVyIHJlc3RyaWN0ZWQgYnkKKyMgRE9UX0dSQVBIX01BWF9OT0RFUy4gVXNpbmcgYSBkZXB0aCBvZiAwIG1lYW5zIG5vIGRlcHRoIHJlc3RyaWN0aW9uLgorIyBNaW5pbXVtIHZhbHVlOiAwLCBtYXhpbXVtIHZhbHVlOiAxMDAwLCBkZWZhdWx0IHZhbHVlOiAwLgorIyBUaGlzIHRhZyByZXF1aXJlcyB0aGF0IHRoZSB0YWcgSEFWRV9ET1QgaXMgc2V0IHRvIFlFUy4KKworTUFYX0RPVF9HUkFQSF9ERVBUSCAgICA9IDAKKworIyBTZXQgdGhlIERPVF9UUkFOU1BBUkVOVCB0YWcgdG8gWUVTIHRvIGdlbmVyYXRlIGltYWdlcyB3aXRoIGEgdHJhbnNwYXJlbnQKKyMgYmFja2dyb3VuZC4gVGhpcyBpcyBkaXNhYmxlZCBieSBkZWZhdWx0LCBiZWNhdXNlIGRvdCBvbiBXaW5kb3dzIGRvZXMgbm90IHNlZW0KKyMgdG8gc3VwcG9ydCB0aGlzIG91dCBvZiB0aGUgYm94LgorIworIyBXYXJuaW5nOiBEZXBlbmRpbmcgb24gdGhlIHBsYXRmb3JtIHVzZWQsIGVuYWJsaW5nIHRoaXMgb3B0aW9uIG1heSBsZWFkIHRvCisjIGJhZGx5IGFudGktYWxpYXNlZCBsYWJlbHMgb24gdGhlIGVkZ2VzIG9mIGEgZ3JhcGggKGkuZS4gdGhleSBiZWNvbWUgaGFyZCB0bworIyByZWFkKS4KKyMgVGhlIGRlZmF1bHQgdmFsdWUgaXM6IE5PLgorIyBUaGlzIHRhZyByZXF1aXJlcyB0aGF0IHRoZSB0YWcgSEFWRV9ET1QgaXMgc2V0IHRvIFlFUy4KKworRE9UX1RSQU5TUEFSRU5UICAgICAgICA9IE5PCisKKyMgU2V0IHRoZSBET1RfTVVMVElfVEFSR0VUUyB0YWcgdG8gWUVTIHRvIGFsbG93IGRvdCB0byBnZW5lcmF0ZSBtdWx0aXBsZSBvdXRwdXQKKyMgZmlsZXMgaW4gb25lIHJ1biAoaS5lLiBtdWx0aXBsZSAtbyBhbmQgLVQgb3B0aW9ucyBvbiB0aGUgY29tbWFuZCBsaW5lKS4gVGhpcworIyBtYWtlcyBkb3QgcnVuIGZhc3RlciwgYnV0IHNpbmNlIG9ubHkgbmV3ZXIgdmVyc2lvbnMgb2YgZG90ICg+MS44LjEwKSBzdXBwb3J0CisjIHRoaXMsIHRoaXMgZmVhdHVyZSBpcyBkaXNhYmxlZCBieSBkZWZhdWx0LgorIyBUaGUgZGVmYXVsdCB2YWx1ZSBpczogTk8uCisjIFRoaXMgdGFnIHJlcXVpcmVzIHRoYXQgdGhlIHRhZyBIQVZFX0RPVCBpcyBzZXQgdG8gWUVTLgorCitET1RfTVVMVElfVEFSR0VUUyAgICAgID0gTk8KKworIyBJZiB0aGUgR0VORVJBVEVfTEVHRU5EIHRhZyBpcyBzZXQgdG8gWUVTIGRveHlnZW4gd2lsbCBnZW5lcmF0ZSBhIGxlZ2VuZCBwYWdlCisjIGV4cGxhaW5pbmcgdGhlIG1lYW5pbmcgb2YgdGhlIHZhcmlvdXMgYm94ZXMgYW5kIGFycm93cyBpbiB0aGUgZG90IGdlbmVyYXRlZAorIyBncmFwaHMuCisjIFRoZSBkZWZhdWx0IHZhbHVlIGlzOiBZRVMuCisjIFRoaXMgdGFnIHJlcXVpcmVzIHRoYXQgdGhlIHRhZyBIQVZFX0RPVCBpcyBzZXQgdG8gWUVTLgorCitHRU5FUkFURV9MRUdFTkQgICAgICAgID0gWUVTCisKKyMgSWYgdGhlIERPVF9DTEVBTlVQIHRhZyBpcyBzZXQgdG8gWUVTLCBkb3h5Z2VuIHdpbGwgcmVtb3ZlIHRoZSBpbnRlcm1lZGlhdGUgZG90CisjIGZpbGVzIHRoYXQgYXJlIHVzZWQgdG8gZ2VuZXJhdGUgdGhlIHZhcmlvdXMgZ3JhcGhzLgorIyBUaGUgZGVmYXVsdCB2YWx1ZSBpczogWUVTLgorIyBUaGlzIHRhZyByZXF1aXJlcyB0aGF0IHRoZSB0YWcgSEFWRV9ET1QgaXMgc2V0IHRvIFlFUy4KKworRE9UX0NMRUFOVVAgICAgICAgICAgICA9IFlFUwpkaWZmIC0tZ2l0IGEvbWVkaWEvY29kZWMyL2ZhdWx0aW5qZWN0aW9uL0FuZHJvaWQuYnAgYi9tZWRpYS9jb2RlYzIvZmF1bHRpbmplY3Rpb24vQW5kcm9pZC5icApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hZGU2MzhmCi0tLSAvZGV2L251bGwKKysrIGIvbWVkaWEvY29kZWMyL2ZhdWx0aW5qZWN0aW9uL0FuZHJvaWQuYnAKQEAgLTAsMCArMSwzMiBAQAorY2NfbGlicmFyeV9zaGFyZWQgeworICAgIG5hbWU6ICJsaWJjb2RlYzJfY29tcG9uZW50X3dyYXBwZXIiLAorICAgIHZlbmRvcl9hdmFpbGFibGU6IHRydWUsCisKKyAgICBzcmNzOiBbCisgICAgICAgICJDMkNvbXBvbmVudFdyYXBwZXIuY3BwIiwKKyAgICAgICAgIlNpbXBsZU1ldGhvZFN0YXRlLmNwcCIsCisgICAgXSwKKworICAgIHNoYXJlZF9saWJzOiBbCisgICAgICAgICJsaWJjb2RlYzIiLAorICAgICAgICAibGliY29kZWMyX3ZuZGsiLAorICAgICAgICAibGliY3V0aWxzIiwKKyAgICAgICAgImxpYmxvZyIsCisgICAgICAgICJsaWJzdGFnZWZyaWdodF9mb3VuZGF0aW9uIiwKKyAgICAgICAgImxpYnV0aWxzIiwKKyAgICBdLAorCisgICAgc2FuaXRpemU6IHsKKyAgICAgICAgbWlzY191bmRlZmluZWQ6IFsKKyAgICAgICAgICAgICJ1bnNpZ25lZC1pbnRlZ2VyLW92ZXJmbG93IiwKKyAgICAgICAgICAgICJzaWduZWQtaW50ZWdlci1vdmVyZmxvdyIsCisgICAgICAgIF0sCisgICAgICAgIGNmaTogdHJ1ZSwKKyAgICAgICAgZGlhZzogeworICAgICAgICAgICAgY2ZpOiB0cnVlLAorICAgICAgICB9LAorICAgIH0sCisKKyAgICBsZGZsYWdzOiBbIi1XbCwtQnN5bWJvbGljIl0sCit9CisKZGlmZiAtLWdpdCBhL21lZGlhL2NvZGVjMi9mYXVsdGluamVjdGlvbi9DMkNvbXBvbmVudFdyYXBwZXIuY3BwIGIvbWVkaWEvY29kZWMyL2ZhdWx0aW5qZWN0aW9uL0MyQ29tcG9uZW50V3JhcHBlci5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzQ1ZjhiZgotLS0gL2Rldi9udWxsCisrKyBiL21lZGlhL2NvZGVjMi9mYXVsdGluamVjdGlvbi9DMkNvbXBvbmVudFdyYXBwZXIuY3BwCkBAIC0wLDAgKzEsMTI5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE4IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KKworI2RlZmluZSBMT0dfTkRFQlVHIDAKKyNkZWZpbmUgTE9HX1RBRyAiQzJDb21wb25lbnRXcmFwcGVyIgorCisjaW5jbHVkZSA8Y2hyb25vPgorI2luY2x1ZGUgPGZ1bmN0aW9uYWw+CisjaW5jbHVkZSA8dGhyZWFkPgorCisjaW5jbHVkZSA8QzJDb21wb25lbnRXcmFwcGVyLmg+CisjaW5jbHVkZSA8QzJDb25maWcuaD4KKyNpbmNsdWRlIDxDMlBsYXRmb3JtU3VwcG9ydC5oPgorCituYW1lc3BhY2UgYW5kcm9pZCB7CisKK25hbWVzcGFjZSB7CisKK3VzaW5nIG5hbWVzcGFjZSBzdGQ6OmNocm9ub19saXRlcmFsczsKKworYzJfc3RhdHVzX3QgV3JhcFNpbXBsZU1ldGhvZCgKKyAgICAgICAgc3RkOjpmdW5jdGlvbjxjMl9zdGF0dXNfdCh2b2lkKT4gb3AsIGNvbnN0IFNpbXBsZU1ldGhvZFN0YXRlICZzdGF0ZSkgeworICAgIGMyX3N0YXR1c190IHJlc3VsdCA9IEMyX09LOworICAgIHN3aXRjaCAoc3RhdGUuZ2V0TW9kZSgpKSB7CisgICAgICAgIGNhc2UgU2ltcGxlTWV0aG9kU3RhdGU6OkVYRUNVVEU6CisgICAgICAgICAgICByZXN1bHQgPSBvcCgpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgU2ltcGxlTWV0aG9kU3RhdGU6Ok5PX09QOgorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgU2ltcGxlTWV0aG9kU3RhdGU6OkhBTkc6CisgICAgICAgICAgICB3aGlsZSAodHJ1ZSkgeworICAgICAgICAgICAgICAgIHN0ZDo6dGhpc190aHJlYWQ6OnNsZWVwX2Zvcigxcyk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBicmVhazsKKyAgICB9CisgICAgKHZvaWQpc3RhdGUub3ZlcnJpZGVSZXN1bHQoJnJlc3VsdCk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworfSAgLy8gbmFtZXNwYWNlCisKK0MyQ29tcG9uZW50V3JhcHBlcjo6SW5qZWN0ZXI6OkluamVjdGVyKEMyQ29tcG9uZW50V3JhcHBlciAqdGhpeikgOiBtVGhpeih0aGl6KSB7fQorCitTaW1wbGVNZXRob2RTdGF0ZTo6SW5qZWN0ZXIgQzJDb21wb25lbnRXcmFwcGVyOjpJbmplY3Rlcjo6c3RhcnQoKSB7CisgICAgcmV0dXJuIFNpbXBsZU1ldGhvZFN0YXRlOjpJbmplY3RlcigmbVRoaXotPm1TdGFydFN0YXRlKTsKK30KKworQzJDb21wb25lbnRXcmFwcGVyOjpMaXN0ZW5lcjo6TGlzdGVuZXIoCisgICAgICAgIGNvbnN0IHN0ZDo6c2hhcmVkX3B0cjxDMkNvbXBvbmVudDo6TGlzdGVuZXI+ICZsaXN0ZW5lcikgOiBtTGlzdGVuZXIobGlzdGVuZXIpIHt9CisKK3ZvaWQgQzJDb21wb25lbnRXcmFwcGVyOjpMaXN0ZW5lcjo6b25Xb3JrRG9uZV9uYihzdGQ6OndlYWtfcHRyPEMyQ29tcG9uZW50PiBjb21wb25lbnQsCisgICAgICAgIHN0ZDo6bGlzdDxzdGQ6OnVuaXF1ZV9wdHI8QzJXb3JrPj4gd29ya0l0ZW1zKSB7CisgICAgbUxpc3RlbmVyLT5vbldvcmtEb25lX25iKGNvbXBvbmVudCwgc3RkOjptb3ZlKHdvcmtJdGVtcykpOworfQorCit2b2lkIEMyQ29tcG9uZW50V3JhcHBlcjo6TGlzdGVuZXI6Om9uVHJpcHBlZF9uYihzdGQ6OndlYWtfcHRyPEMyQ29tcG9uZW50PiBjb21wb25lbnQsCisgICAgICAgIHN0ZDo6dmVjdG9yPHN0ZDo6c2hhcmVkX3B0cjxDMlNldHRpbmdSZXN1bHQ+PiBzZXR0aW5nUmVzdWx0KSB7CisgICAgbUxpc3RlbmVyLT5vblRyaXBwZWRfbmIoY29tcG9uZW50LHNldHRpbmdSZXN1bHQpOworfQorCit2b2lkIEMyQ29tcG9uZW50V3JhcHBlcjo6TGlzdGVuZXI6Om9uRXJyb3JfbmIoCisgICAgICAgIHN0ZDo6d2Vha19wdHI8QzJDb21wb25lbnQ+IGNvbXBvbmVudCwgdWludDMyX3QgZXJyb3JDb2RlKSB7CisgICAgbUxpc3RlbmVyLT5vbkVycm9yX25iKGNvbXBvbmVudCwgZXJyb3JDb2RlKTsKK30KKworQzJDb21wb25lbnRXcmFwcGVyOjpDMkNvbXBvbmVudFdyYXBwZXIoCisgICAgICAgIGNvbnN0IHN0ZDo6c2hhcmVkX3B0cjxDMkNvbXBvbmVudD4gJmNvbXApIDogbUNvbXAoY29tcCkge30KKworYzJfc3RhdHVzX3QgQzJDb21wb25lbnRXcmFwcGVyOjpzZXRMaXN0ZW5lcl92YigKKyAgICAgICAgY29uc3Qgc3RkOjpzaGFyZWRfcHRyPEMyQ29tcG9uZW50OjpMaXN0ZW5lcj4gJmxpc3RlbmVyLCBjMl9ibG9ja2luZ190IG1heUJsb2NrKSB7CisgICAgbUxpc3RlbmVyID0gc3RkOjptYWtlX3NoYXJlZDxMaXN0ZW5lcj4obGlzdGVuZXIpOworICAgIHJldHVybiBtQ29tcC0+c2V0TGlzdGVuZXJfdmIobUxpc3RlbmVyLCBtYXlCbG9jayk7Cit9CisKK2MyX3N0YXR1c190IEMyQ29tcG9uZW50V3JhcHBlcjo6cXVldWVfbmIoc3RkOjpsaXN0PHN0ZDo6dW5pcXVlX3B0cjxDMldvcms+PiogY29uc3QgaXRlbXMpIHsKKyAgICByZXR1cm4gbUNvbXAtPnF1ZXVlX25iKGl0ZW1zKTsKK30KKworYzJfc3RhdHVzX3QgQzJDb21wb25lbnRXcmFwcGVyOjphbm5vdW5jZV9uYihjb25zdCBzdGQ6OnZlY3RvcjxDMldvcmtPdXRsaW5lPiAmaXRlbXMpIHsKKyAgICByZXR1cm4gbUNvbXAtPmFubm91bmNlX25iKGl0ZW1zKTsKK30KKworYzJfc3RhdHVzX3QgQzJDb21wb25lbnRXcmFwcGVyOjpmbHVzaF9zbSgKKyAgICAgICAgQzJDb21wb25lbnQ6OmZsdXNoX21vZGVfdCBtb2RlLCBzdGQ6Omxpc3Q8c3RkOjp1bmlxdWVfcHRyPEMyV29yaz4+KiBjb25zdCBmbHVzaGVkV29yaykgeworICAgIHJldHVybiBtQ29tcC0+Zmx1c2hfc20obW9kZSwgZmx1c2hlZFdvcmspOworfQorCitjMl9zdGF0dXNfdCBDMkNvbXBvbmVudFdyYXBwZXI6OmRyYWluX25iKEMyQ29tcG9uZW50OjpkcmFpbl9tb2RlX3QgbW9kZSkgeworICAgIHJldHVybiBtQ29tcC0+ZHJhaW5fbmIobW9kZSk7Cit9CisKK2MyX3N0YXR1c190IEMyQ29tcG9uZW50V3JhcHBlcjo6c3RhcnQoKSB7CisgICAgcmV0dXJuIFdyYXBTaW1wbGVNZXRob2QoW3RoaXNdIHsgcmV0dXJuIG1Db21wLT5zdGFydCgpOyB9LCBtU3RhcnRTdGF0ZSk7Cit9CisKK2MyX3N0YXR1c190IEMyQ29tcG9uZW50V3JhcHBlcjo6c3RvcCgpIHsKKyAgICByZXR1cm4gbUNvbXAtPnN0b3AoKTsKK30KKworYzJfc3RhdHVzX3QgQzJDb21wb25lbnRXcmFwcGVyOjpyZXNldCgpIHsKKyAgICByZXR1cm4gbUNvbXAtPnJlc2V0KCk7Cit9CisKK2MyX3N0YXR1c190IEMyQ29tcG9uZW50V3JhcHBlcjo6cmVsZWFzZSgpIHsKKyAgICByZXR1cm4gbUNvbXAtPnJlbGVhc2UoKTsKK30KKworc3RkOjpzaGFyZWRfcHRyPEMyQ29tcG9uZW50SW50ZXJmYWNlPiBDMkNvbXBvbmVudFdyYXBwZXI6OmludGYoKXsKKyAgICByZXR1cm4gbUNvbXAtPmludGYoKTsKK30KKworQzJDb21wb25lbnRXcmFwcGVyOjpJbmplY3RlciBDMkNvbXBvbmVudFdyYXBwZXI6OmluamVjdCgpIHsKKyAgICByZXR1cm4gSW5qZWN0ZXIodGhpcyk7Cit9CisKK30gIC8vIG5hbWVzcGFjZSBhbmRyb2lkCmRpZmYgLS1naXQgYS9tZWRpYS9jb2RlYzIvZmF1bHRpbmplY3Rpb24vQzJDb21wb25lbnRXcmFwcGVyLmggYi9tZWRpYS9jb2RlYzIvZmF1bHRpbmplY3Rpb24vQzJDb21wb25lbnRXcmFwcGVyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzM3MzUwZAotLS0gL2Rldi9udWxsCisrKyBiL21lZGlhL2NvZGVjMi9mYXVsdGluamVjdGlvbi9DMkNvbXBvbmVudFdyYXBwZXIuaApAQCAtMCwwICsxLDg5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE4IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KKworI2lmbmRlZiBDMl9DT01QT05FTlRfV1JBUFBFUl9IXworI2RlZmluZSBDMl9DT01QT05FTlRfV1JBUFBFUl9IXworCisjaW5jbHVkZSA8QzJDb21wb25lbnQuaD4KKworI2luY2x1ZGUgIlNpbXBsZU1ldGhvZFN0YXRlLmgiCisKK25hbWVzcGFjZSBhbmRyb2lkIHsKKworLyoqCisgKiBDcmVhdGVzIGEgV3JhcHBlciBhcm91bmQgdGhlIGNsYXNzIEMyQ29tcG9uZW50IGFuZCBpdHMgbWV0aG9kcy4gVGhlIHdyYXBwZXIgaXMgdXNlZCB0bworICogc2ltdWxhdGUgZXJyb3JzIGluIHRoZSBhbmRyb2lkIG1lZGlhIGNvbXBvbmVudHMgYnkgZmF1bHQgaW5qZWN0aW9uIHRlY2huaXF1ZS4KKyAqIFRoaXMgaXMgZG9uZSB0byBjaGVjayBob3cgdGhlIGZyYW1ld29yayBoYW5kbGVzIHRoZSBlcnJvciBzaXR1YXRpb24uCisgKi8KK2NsYXNzIEMyQ29tcG9uZW50V3JhcHBlcgorICAgICAgICA6IHB1YmxpYyBDMkNvbXBvbmVudCwgcHVibGljIHN0ZDo6ZW5hYmxlX3NoYXJlZF9mcm9tX3RoaXM8QzJDb21wb25lbnRXcmFwcGVyPiB7CitwdWJsaWM6CisgICAgY2xhc3MgSW5qZWN0ZXIgeworICAgIHB1YmxpYzoKKyAgICAgICAgZXhwbGljaXQgSW5qZWN0ZXIoQzJDb21wb25lbnRXcmFwcGVyICp0aGl6KTsKKworICAgICAgICBTaW1wbGVNZXRob2RTdGF0ZTo6SW5qZWN0ZXIgc3RhcnQoKTsKKyAgICBwcml2YXRlOgorICAgICAgICBDMkNvbXBvbmVudFdyYXBwZXIgKmNvbnN0IG1UaGl6OworICAgIH07CisKKyAgICAvKioKKyAgICAgKiBBIHdyYXBwZXIgYXJvdW5kIHRoZSBsaXN0ZW5lciBjbGFzcyBpbnNpZGUgQzJDb21wb25lbnQgY2xhc3MuCisgICAgICovCisgICAgY2xhc3MgTGlzdGVuZXIgOiBwdWJsaWMgQzJDb21wb25lbnQ6Okxpc3RlbmVyIHsKKyAgICBwdWJsaWM6CisgICAgICAgIGV4cGxpY2l0IExpc3RlbmVyKGNvbnN0IHN0ZDo6c2hhcmVkX3B0cjxDMkNvbXBvbmVudDo6TGlzdGVuZXI+ICZsaXN0ZW5lcik7CisgICAgICAgIHZpcnR1YWwgfkxpc3RlbmVyKCkgPSBkZWZhdWx0OworCisgICAgICAgIHZvaWQgb25Xb3JrRG9uZV9uYihzdGQ6OndlYWtfcHRyPEMyQ29tcG9uZW50PiBjb21wb25lbnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGQ6Omxpc3Q8c3RkOjp1bmlxdWVfcHRyPEMyV29yaz4+IHdvcmtJdGVtcykgb3ZlcnJpZGU7CisgICAgICAgIHZvaWQgb25UcmlwcGVkX25iKHN0ZDo6d2Vha19wdHI8QzJDb21wb25lbnQ+IGNvbXBvbmVudCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgc3RkOjp2ZWN0b3I8c3RkOjpzaGFyZWRfcHRyPEMyU2V0dGluZ1Jlc3VsdD4+IHNldHRpbmdSZXN1bHQpIG92ZXJyaWRlOworICAgICAgICB2b2lkIG9uRXJyb3JfbmIoc3RkOjp3ZWFrX3B0cjxDMkNvbXBvbmVudD4gY29tcG9uZW50LCB1aW50MzJfdCBlcnJvckNvZGUpIG92ZXJyaWRlOworCisgICAgcHJpdmF0ZToKKyAgICAgICAgc3RkOjpzaGFyZWRfcHRyPEMyQ29tcG9uZW50OjpMaXN0ZW5lcj4gbUxpc3RlbmVyOworICAgIH07CisKKyAgICBleHBsaWNpdCBDMkNvbXBvbmVudFdyYXBwZXIoY29uc3Qgc3RkOjpzaGFyZWRfcHRyPEMyQ29tcG9uZW50PiAmY29tcCk7CisgICAgdmlydHVhbCB+QzJDb21wb25lbnRXcmFwcGVyKCkgPSBkZWZhdWx0OworCisgICAgdmlydHVhbCBjMl9zdGF0dXNfdCBzZXRMaXN0ZW5lcl92YigKKyAgICAgICAgICAgIGNvbnN0IHN0ZDo6c2hhcmVkX3B0cjxDMkNvbXBvbmVudDo6TGlzdGVuZXI+ICZsaXN0ZW5lciwKKyAgICAgICAgICAgIGMyX2Jsb2NraW5nX3QgbWF5QmxvY2spIG92ZXJyaWRlOworICAgIHZpcnR1YWwgYzJfc3RhdHVzX3QgcXVldWVfbmIoc3RkOjpsaXN0PHN0ZDo6dW5pcXVlX3B0cjxDMldvcms+PiogY29uc3QgaXRlbXMpIG92ZXJyaWRlOworICAgIHZpcnR1YWwgYzJfc3RhdHVzX3QgYW5ub3VuY2VfbmIoY29uc3Qgc3RkOjp2ZWN0b3I8QzJXb3JrT3V0bGluZT4gJml0ZW1zKSBvdmVycmlkZTsKKyAgICB2aXJ0dWFsIGMyX3N0YXR1c190IGZsdXNoX3NtKAorICAgICAgICAgICAgZmx1c2hfbW9kZV90IG1vZGUsIHN0ZDo6bGlzdDxzdGQ6OnVuaXF1ZV9wdHI8QzJXb3JrPj4qIGNvbnN0IGZsdXNoZWRXb3JrKSBvdmVycmlkZTsKKyAgICB2aXJ0dWFsIGMyX3N0YXR1c190IGRyYWluX25iKGRyYWluX21vZGVfdCBtb2RlKSBvdmVycmlkZTsKKyAgICB2aXJ0dWFsIGMyX3N0YXR1c190IHN0YXJ0KCkgb3ZlcnJpZGU7CisgICAgdmlydHVhbCBjMl9zdGF0dXNfdCBzdG9wKCkgb3ZlcnJpZGU7CisgICAgdmlydHVhbCBjMl9zdGF0dXNfdCByZXNldCgpIG92ZXJyaWRlOworICAgIHZpcnR1YWwgYzJfc3RhdHVzX3QgcmVsZWFzZSgpIG92ZXJyaWRlOworICAgIHZpcnR1YWwgc3RkOjpzaGFyZWRfcHRyPEMyQ29tcG9uZW50SW50ZXJmYWNlPiBpbnRmKCkgb3ZlcnJpZGU7CisKKyAgICBJbmplY3RlciBpbmplY3QoKTsKKworcHJpdmF0ZToKKyAgICBzdGQ6OnNoYXJlZF9wdHI8TGlzdGVuZXI+IG1MaXN0ZW5lcjsKKyAgICBzdGQ6OnNoYXJlZF9wdHI8QzJDb21wb25lbnQ+IG1Db21wOworCisgICAgU2ltcGxlTWV0aG9kU3RhdGUgbVN0YXJ0U3RhdGU7Cit9OworCit9ICAvLyBuYW1lc3BhY2UgYW5kcm9pZAorCisjZW5kaWYgLy8gQzJfQ09NUE9ORU5UX1dSQVBQRVJfSF8KZGlmZiAtLWdpdCBhL21lZGlhL2NvZGVjMi9mYXVsdGluamVjdGlvbi9TaW1wbGVNZXRob2RTdGF0ZS5jcHAgYi9tZWRpYS9jb2RlYzIvZmF1bHRpbmplY3Rpb24vU2ltcGxlTWV0aG9kU3RhdGUuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE3OWQ2NGUKLS0tIC9kZXYvbnVsbAorKysgYi9tZWRpYS9jb2RlYzIvZmF1bHRpbmplY3Rpb24vU2ltcGxlTWV0aG9kU3RhdGUuY3BwCkBAIC0wLDAgKzEsNTIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTggVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworCisjZGVmaW5lIExPR19OREVCVUcgMAorI2RlZmluZSBMT0dfVEFHICJTaW1wbGVNZXRob2RTdGF0ZSIKKyNpbmNsdWRlIDxsb2cvbG9nLmg+CisKKyNpbmNsdWRlICJTaW1wbGVNZXRob2RTdGF0ZS5oIgorCituYW1lc3BhY2UgYW5kcm9pZCB7CisKK1NpbXBsZU1ldGhvZFN0YXRlOjpJbmplY3Rlcjo6SW5qZWN0ZXIoU2ltcGxlTWV0aG9kU3RhdGUgKnRoaXopIDogbVRoaXoodGhpeikge30KKwordm9pZCBTaW1wbGVNZXRob2RTdGF0ZTo6SW5qZWN0ZXI6OmhhbmcoKSB7CisgICAgbVRoaXotPm1Nb2RlID0gSEFORzsKK30KKwordm9pZCBTaW1wbGVNZXRob2RTdGF0ZTo6SW5qZWN0ZXI6OmZhaWwoYzJfc3RhdHVzX3QgZXJyLCBib29sIGV4ZWN1dGUpIHsKKyAgICBtVGhpei0+bU1vZGUgPSBleGVjdXRlID8gRVhFQ1VURSA6IE5PX09QOworICAgIG1UaGl6LT5tT3ZlcnJpZGUgPSB0cnVlOworICAgIG1UaGl6LT5tUmVzdWx0T3ZlcnJpZGUgPSBlcnI7Cit9CisKK1NpbXBsZU1ldGhvZFN0YXRlOjpTaW1wbGVNZXRob2RTdGF0ZSgpCisgICAgOiBtTW9kZShFWEVDVVRFKSwgbU92ZXJyaWRlKGZhbHNlKSwgbVJlc3VsdE92ZXJyaWRlKEMyX09LKSB7fQorCitTaW1wbGVNZXRob2RTdGF0ZTo6TW9kZSBTaW1wbGVNZXRob2RTdGF0ZTo6Z2V0TW9kZSgpIGNvbnN0IHsKKyAgICByZXR1cm4gbU1vZGU7Cit9CisKK2Jvb2wgU2ltcGxlTWV0aG9kU3RhdGU6Om92ZXJyaWRlUmVzdWx0KGMyX3N0YXR1c190ICpyZXN1bHQpIGNvbnN0IHsKKyAgICBpZiAoIW1PdmVycmlkZSkgeworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorICAgICpyZXN1bHQgPSBtUmVzdWx0T3ZlcnJpZGU7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK30gIC8vIG5hbWVzcGFjZSBhbmRyb2lkCmRpZmYgLS1naXQgYS9tZWRpYS9jb2RlYzIvZmF1bHRpbmplY3Rpb24vU2ltcGxlTWV0aG9kU3RhdGUuaCBiL21lZGlhL2NvZGVjMi9mYXVsdGluamVjdGlvbi9TaW1wbGVNZXRob2RTdGF0ZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRjMDQ1OWQKLS0tIC9kZXYvbnVsbAorKysgYi9tZWRpYS9jb2RlYzIvZmF1bHRpbmplY3Rpb24vU2ltcGxlTWV0aG9kU3RhdGUuaApAQCAtMCwwICsxLDgyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE4IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KKworI2lmbmRlZiBTSU1QTEVfTUVUSE9EX1NUQVRFX0hfCisjZGVmaW5lIFNJTVBMRV9NRVRIT0RfU1RBVEVfSF8KKworI2luY2x1ZGUgPEMyLmg+CisKK25hbWVzcGFjZSBhbmRyb2lkIHsKKworLyoqCisgKiBTdGF0ZSBmb3IgYSBzaW1wbGUgbWV0aG9kIHdoaWNoIHJldHVybnMgYzJfc3RhdHVzX3QgYW5kIHRha2VzIG5vIHBhcmFtZXRlcnMuCisgKi8KK2NsYXNzIFNpbXBsZU1ldGhvZFN0YXRlIHsKK3B1YmxpYzoKKyAgICBlbnVtIE1vZGUgeworICAgICAgICAvLyBFeGVjdXRlIHRoZSBub3JtYWwgb3BlcmF0aW9uCisgICAgICAgIEVYRUNVVEUsCisgICAgICAgIC8vIERvbid0IGRvIGFueXRoaW5nCisgICAgICAgIE5PX09QLAorICAgICAgICAvLyBIYW5nOyBuZXZlciByZXR1cm4KKyAgICAgICAgSEFORywKKyAgICB9OworCisgICAgLyoqCisgICAgICogSW5qZWN0ZXIgY2xhc3MgdGhhdCBtb2RpZmllcyB0aGUgaW50ZXJuYWwgc3RhdGVzIG9mIHRoaXMgY2xhc3MuCisgICAgICovCisgICAgY2xhc3MgSW5qZWN0ZXIgeworICAgIHB1YmxpYzoKKyAgICAgICAgZXhwbGljaXQgSW5qZWN0ZXIoU2ltcGxlTWV0aG9kU3RhdGUgKnRoaXopOworCisgICAgICAgIC8qKgorICAgICAgICAgKiBIYW5nIHRoZSBvcGVyYXRpb24uCisgICAgICAgICAqLworICAgICAgICB2b2lkIGhhbmcoKTsKKworICAgICAgICAvKioKKyAgICAgICAgICogRmFpbCB0aGUgb3BlcmF0aW9uIHdpdGggZ2l2ZW4gcGFyYW1zLgorICAgICAgICAgKgorICAgICAgICAgKiBccGFyYW0gZXJyICAgICAgIGVycm9yIGNvZGUgdG8gcmVwbGFjZSB0aGUgYWN0dWFsIHJldHVybiB2YWx1ZQorICAgICAgICAgKiBccGFyYW0gZXhlY3V0ZSAgIHdoZXRoZXIgdGhlIHdyYXBwZXIgc2hvdWxkIGV4ZWN1dGUgdGhlIG9wZXJhdGlvbgorICAgICAgICAgKi8KKyAgICAgICAgdm9pZCBmYWlsKGMyX3N0YXR1c190IGVyciwgYm9vbCBleGVjdXRlID0gZmFsc2UpOworCisgICAgcHJpdmF0ZToKKyAgICAgICAgU2ltcGxlTWV0aG9kU3RhdGUgKmNvbnN0IG1UaGl6OworICAgIH07CisKKyAgICBTaW1wbGVNZXRob2RTdGF0ZSgpOworCisgICAgLyoqCisgICAgICogR2V0IGV4ZWN1dGlvbiBtb2RlLgorICAgICAqLworICAgIE1vZGUgZ2V0TW9kZSgpIGNvbnN0OworCisgICAgLyoqCisgICAgICogT3ZlcnJpZGUgcmVzdWx0IGZyb20gcnVubmluZyB0aGUgb3BlcmF0aW9uIGlmIGNvbmZpZ3VyZWQgc28uCisgICAgICovCisgICAgYm9vbCBvdmVycmlkZVJlc3VsdChjMl9zdGF0dXNfdCAqcmVzdWx0KSBjb25zdDsKKworcHJpdmF0ZToKKyAgICBNb2RlIG1Nb2RlOworICAgIGJvb2wgbU92ZXJyaWRlOworICAgIGMyX3N0YXR1c190IG1SZXN1bHRPdmVycmlkZTsKK307CisKK30gIC8vIG5hbWVzcGFjZSBhbmRyb2lkCisKKyNlbmRpZiAvLyBTSU1QTEVfTUVUSE9EX1NUQVRFX0hfCmRpZmYgLS1naXQgYS9tZWRpYS9jb2RlYzIvaGlkbC8xLjAvdXRpbHMvQW5kcm9pZC5icCBiL21lZGlhL2NvZGVjMi9oaWRsLzEuMC91dGlscy9BbmRyb2lkLmJwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ1NWRlNTAKLS0tIC9kZXYvbnVsbAorKysgYi9tZWRpYS9jb2RlYzIvaGlkbC8xLjAvdXRpbHMvQW5kcm9pZC5icApAQCAtMCwwICsxLDY3IEBACisvLyBETyBOT1QgREVQRU5EIE9OIFRISVMgRElSRUNUTFkKKy8vIHVzZSBsaWJjb2RlYzItaGlkbC1kZWZhdWx0cyBpbnN0ZWFkCitjY19saWJyYXJ5IHsKKyAgICBuYW1lOiAibGliY29kZWMyX2hpZGxAMS4wIiwKKyAgICB2ZW5kb3JfYXZhaWxhYmxlOiB0cnVlLAorCisgICAgZGVmYXVsdHM6IFsiaGlkbF9kZWZhdWx0cyJdLAorCisgICAgc3JjczogWworICAgICAgICAiQ29tcG9uZW50LmNwcCIsCisgICAgICAgICJDb21wb25lbnRTdG9yZS5jcHAiLAorICAgICAgICAiQ29uZmlndXJhYmxlLmNwcCIsCisgICAgICAgICJJbnB1dFN1cmZhY2UuY3BwIiwKKyAgICAgICAgIklucHV0U3VyZmFjZUNvbm5lY3Rpb24uY3BwIiwKKyAgICAgICAgInR5cGVzLmNwcCIsCisgICAgXSwKKworICAgIGhlYWRlcl9saWJzOiBbCisgICAgICAgICJsaWJzeXN0ZW1faGVhZGVycyIsCisgICAgICAgICJsaWJjb2RlYzJfaW50ZXJuYWwiLCAvLyBwcml2YXRlCisgICAgXSwKKworICAgIHNoYXJlZF9saWJzOiBbCisgICAgICAgICJhbmRyb2lkLmhhcmR3YXJlLmdyYXBoaWNzLmJ1ZmZlcnF1ZXVlQDEuMCIsCisgICAgICAgICJhbmRyb2lkLmhhcmR3YXJlLmdyYXBoaWNzLmNvbW1vbkAxLjAiLAorICAgICAgICAiYW5kcm9pZC5oYXJkd2FyZS5tZWRpYUAxLjAiLAorICAgICAgICAiYW5kcm9pZC5oYXJkd2FyZS5tZWRpYS5idWZmZXJwb29sQDEuMCIsCisgICAgICAgICJhbmRyb2lkLmhhcmR3YXJlLm1lZGlhLmMyQDEuMCIsCisgICAgICAgICJhbmRyb2lkLmhhcmR3YXJlLm1lZGlhLm9teEAxLjAiLAorICAgICAgICAibGliYmFzZSIsCisgICAgICAgICJsaWJjb2RlYzIiLAorICAgICAgICAibGliY29kZWMyX3ZuZGsiLAorICAgICAgICAibGliY3V0aWxzIiwKKyAgICAgICAgImxpYmhpZGxiYXNlIiwKKyAgICAgICAgImxpYmhpZGx0cmFuc3BvcnQiLAorICAgICAgICAibGliaHdiaW5kZXIiLAorICAgICAgICAibGlibG9nIiwKKyAgICAgICAgImxpYnN0YWdlZnJpZ2h0X2J1ZmZlcnBvb2xAMS4wIiwKKyAgICAgICAgImxpYnN0YWdlZnJpZ2h0X2J1ZmZlcnF1ZXVlX2hlbHBlciIsCisgICAgICAgICJsaWJ1aSIsCisgICAgICAgICJsaWJ1dGlscyIsCisgICAgXSwKKworICAgIGV4cG9ydF9pbmNsdWRlX2RpcnM6IFsKKyAgICAgICAgImluY2x1ZGUiLAorICAgIF0sCisKKyAgICBleHBvcnRfc2hhcmVkX2xpYl9oZWFkZXJzOiBbCisgICAgICAgICJhbmRyb2lkLmhhcmR3YXJlLm1lZGlhLmMyQDEuMCIsCisgICAgICAgICJsaWJjb2RlYzIiLAorICAgICAgICAibGliaGlkbGJhc2UiLAorICAgICAgICAibGlic3RhZ2VmcmlnaHRfYnVmZmVycG9vbEAxLjAiLAorICAgICAgICAibGlic3RhZ2VmcmlnaHRfYnVmZmVycXVldWVfaGVscGVyIiwKKyAgICAgICAgImxpYnVpIiwKKyAgICBdLAorfQorCisvLyBwdWJsaWMgZGVwZW5kZW5jeSBmb3IgQ29kZWMgMi4wIEhBTCBzZXJ2aWNlIGltcGxlbWVudGF0aW9ucworY2NfZGVmYXVsdHMgeworICAgIG5hbWU6ICJsaWJjb2RlYzItaGlkbC1kZWZhdWx0cyIsCisgICAgZGVmYXVsdHM6IFsibGliY29kZWMyLWltcGwtZGVmYXVsdHMiXSwKKworICAgIHNoYXJlZF9saWJzOiBbCisgICAgICAgICJhbmRyb2lkLmhhcmR3YXJlLm1lZGlhLmMyQDEuMCIsCisgICAgICAgICJsaWJjb2RlYzJfaGlkbEAxLjAiLAorICAgIF0sCit9CmRpZmYgLS1naXQgYS9tZWRpYS9jb2RlYzIvaGlkbC8xLjAvdXRpbHMvQ29tcG9uZW50LmNwcCBiL21lZGlhL2NvZGVjMi9oaWRsLzEuMC91dGlscy9Db21wb25lbnQuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFhNGM2YjIKLS0tIC9kZXYvbnVsbAorKysgYi9tZWRpYS9jb2RlYzIvaGlkbC8xLjAvdXRpbHMvQ29tcG9uZW50LmNwcApAQCAtMCwwICsxLDEwNjAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTggVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworCisvLyNkZWZpbmUgTE9HX05ERUJVRyAwCisjZGVmaW5lIExPR19UQUcgIkNvZGVjMi1Db21wb25lbnQiCisjaW5jbHVkZSA8YW5kcm9pZC1iYXNlL2xvZ2dpbmcuaD4KKworI2luY2x1ZGUgPEMyUGxhdGZvcm1TdXBwb3J0Lmg+CisjaW5jbHVkZSA8Y29kZWMyL2hpZGwvMS4wL0NvbXBvbmVudC5oPgorI2luY2x1ZGUgPGNvZGVjMi9oaWRsLzEuMC9Db21wb25lbnRTdG9yZS5oPgorI2luY2x1ZGUgPGNvZGVjMi9oaWRsLzEuMC90eXBlcy5oPgorCisjaW5jbHVkZSA8aGlkbC9IaWRsQmluZGVyU3VwcG9ydC5oPgorI2luY2x1ZGUgPHV0aWxzL1RpbWVycy5oPgorCisjaW5jbHVkZSA8QzJCcUJ1ZmZlclByaXYuaD4KKyNpbmNsdWRlIDxDMkRlYnVnLmg+CisjaW5jbHVkZSA8QzJQbGF0Zm9ybVN1cHBvcnQuaD4KKworI2luY2x1ZGUgPGNocm9ubz4KKyNpbmNsdWRlIDx0aHJlYWQ+CisKK25hbWVzcGFjZSBhbmRyb2lkIHsKK25hbWVzcGFjZSBoYXJkd2FyZSB7CituYW1lc3BhY2UgbWVkaWEgeworbmFtZXNwYWNlIGMyIHsKK25hbWVzcGFjZSBWMV8wIHsKK25hbWVzcGFjZSB1dGlscyB7CisKK3VzaW5nIG5hbWVzcGFjZSA6OmFuZHJvaWQ7CisKK25hbWVzcGFjZSAvKiB1bm5hbWVkICovIHsKKworLy8gSW1wbGVtZW50YXRpb24gb2YgQ29uZmlndXJhYmxlQzJJbnRmIGJhc2VkIG9uIEMyQ29tcG9uZW50SW50ZXJmYWNlCitzdHJ1Y3QgQ29tcEludGYgOiBwdWJsaWMgQ29uZmlndXJhYmxlQzJJbnRmIHsKKyAgICBDb21wSW50Zihjb25zdCBzdGQ6OnNoYXJlZF9wdHI8QzJDb21wb25lbnRJbnRlcmZhY2U+JiBpbnRmKSA6CisgICAgICAgIENvbmZpZ3VyYWJsZUMySW50ZihpbnRmLT5nZXROYW1lKCkpLAorICAgICAgICBtSW50ZihpbnRmKSB7CisgICAgfQorCisgICAgdmlydHVhbCBjMl9zdGF0dXNfdCBjb25maWcoCisgICAgICAgICAgICBjb25zdCBzdGQ6OnZlY3RvcjxDMlBhcmFtKj4mIHBhcmFtcywKKyAgICAgICAgICAgIGMyX2Jsb2NraW5nX3QgbWF5QmxvY2ssCisgICAgICAgICAgICBzdGQ6OnZlY3RvcjxzdGQ6OnVuaXF1ZV9wdHI8QzJTZXR0aW5nUmVzdWx0Pj4qIGNvbnN0IGZhaWx1cmVzCisgICAgICAgICAgICApIG92ZXJyaWRlIHsKKyAgICAgICAgQUxPR1YoImNvbmZpZyIpOworICAgICAgICByZXR1cm4gbUludGYtPmNvbmZpZ192YihwYXJhbXMsIG1heUJsb2NrLCBmYWlsdXJlcyk7CisgICAgfQorCisgICAgdmlydHVhbCBjMl9zdGF0dXNfdCBxdWVyeSgKKyAgICAgICAgICAgIGNvbnN0IHN0ZDo6dmVjdG9yPEMyUGFyYW06OkluZGV4PiYgaW5kaWNlcywKKyAgICAgICAgICAgIGMyX2Jsb2NraW5nX3QgbWF5QmxvY2ssCisgICAgICAgICAgICBzdGQ6OnZlY3RvcjxzdGQ6OnVuaXF1ZV9wdHI8QzJQYXJhbT4+KiBjb25zdCBwYXJhbXMKKyAgICAgICAgICAgICkgY29uc3Qgb3ZlcnJpZGUgeworICAgICAgICBBTE9HVigicXVlcnkiKTsKKyAgICAgICAgcmV0dXJuIG1JbnRmLT5xdWVyeV92Yih7fSwgaW5kaWNlcywgbWF5QmxvY2ssIHBhcmFtcyk7CisgICAgfQorCisgICAgdmlydHVhbCBjMl9zdGF0dXNfdCBxdWVyeVN1cHBvcnRlZFBhcmFtcygKKyAgICAgICAgICAgIHN0ZDo6dmVjdG9yPHN0ZDo6c2hhcmVkX3B0cjxDMlBhcmFtRGVzY3JpcHRvcj4+KiBjb25zdCBwYXJhbXMKKyAgICAgICAgICAgICkgY29uc3Qgb3ZlcnJpZGUgeworICAgICAgICBBTE9HVigicXVlcnlTdXBwb3J0ZWRQYXJhbXMiKTsKKyAgICAgICAgcmV0dXJuIG1JbnRmLT5xdWVyeVN1cHBvcnRlZFBhcmFtc19uYihwYXJhbXMpOworICAgIH0KKworICAgIHZpcnR1YWwgYzJfc3RhdHVzX3QgcXVlcnlTdXBwb3J0ZWRWYWx1ZXMoCisgICAgICAgICAgICBzdGQ6OnZlY3RvcjxDMkZpZWxkU3VwcG9ydGVkVmFsdWVzUXVlcnk+JiBmaWVsZHMsCisgICAgICAgICAgICBjMl9ibG9ja2luZ190IG1heUJsb2NrKSBjb25zdCBvdmVycmlkZSB7CisgICAgICAgIEFMT0dWKCJxdWVyeVN1cHBvcnRlZFZhbHVlcyIpOworICAgICAgICByZXR1cm4gbUludGYtPnF1ZXJ5U3VwcG9ydGVkVmFsdWVzX3ZiKGZpZWxkcywgbWF5QmxvY2spOworICAgIH0KKworcHJvdGVjdGVkOgorICAgIHN0ZDo6c2hhcmVkX3B0cjxDMkNvbXBvbmVudEludGVyZmFjZT4gbUludGY7Cit9OworCit9IC8vIHVubmFtZWQgbmFtZXNwYWNlCisKKy8vIElucHV0QnVmZmVyTWFuYWdlcgorLy8gPT09PT09PT09PT09PT09PT09CisvLworLy8gSW5wdXRCdWZmZXJNYW5hZ2VyIHByZXNlbnRzIGEgd2F5IHRvIHRyYWNrIGFuZCB1bnRyYWNrIGlucHV0IGJ1ZmZlcnMgaW4gdGhpcworLy8gKGNvZGVjKSBwcm9jZXNzIGFuZCBzZW5kIGEgbm90aWZpY2F0aW9uIHRvIGEgbGlzdGVuZXIsIHBvc3NpYmx5IGluIGEKKy8vIGRpZmZlcmVudCBwcm9jZXNzLCB3aGVuIGEgdHJhY2tlZCBidWZmZXIgbm8gbG9uZ2VyIGhhcyBhbnkgcmVmZXJlbmNlcyBpbiB0aGlzCisvLyBwcm9jZXNzLiAoSW4gZmFjdCwgdGhpcyBjbGFzcyB3b3VsZCB3b3JrIGZvciBsaXN0ZW5lcnMgaW4gdGhlIHNhbWUgcHJvY2VzcworLy8gdG9vLCBidXQgdGhlIG9wdGltaXphdGlvbiBkaXNjdXNzZWQgYmVsb3cgd2lsbCBub3QgYmUgYmVuZWZpY2lhbC4pCisvLworLy8gSW5wdXRCdWZmZXJNYW5hZ2VyIGhvbGRzIGEgY29sbGVjdGlvbiBvZiByZWNvcmRzIHJlcHJlc2VudGluZyB0cmFja2VkIGJ1ZmZlcnMKKy8vIGFuZCB0aGVpciBjYWxsYmFjayBsaXN0ZW5lcnMuIENvbmNlcHR1YWxseSwgb25lIHJlY29yZCBpcyBhIHRyaXBsZSAobGlzdGVuZXIsCisvLyBmcmFtZUluZGV4LCBidWZmZXJJbmRleCkgd2hlcmUKKy8vCisvLyAtIChmcmFtZUluZGV4LCBidWZmZXJJbmRleCkgaXMgYSBwYWlyIG9mIGluZGljZXMgdXNlZCB0byBpZGVudGlmeSB0aGUgYnVmZmVyLgorLy8gLSBsaXN0ZW5lciBpcyBvZiB0eXBlIElDb21wb25lbnRMaXN0ZW5lci4gSXRzIG9uRnJhbWVzUmVuZGVyZWQoKSBmdW5jdGlvbgorLy8gICB3aWxsIGJlIGNhbGxlZCBhZnRlciB0aGUgYXNzb2NpYXRlZCBidWZmZXIgZGllcy4gVGhlIGFyZ3VtZW50IG9mCisvLyAgIG9uRnJhbWVzUmVuZGVyZWQoKSBpcyBhIGxpc3Qgb2YgUmVuZGVyZWRGcmFtZSBvYmplY3RzLCBlYWNoIG9mIHdoaWNoIGhhcworLy8gICB0aGUgZm9sbG93aW5nIG1lbWJlcnM6CisvLworLy8gICAgIHVpbnQ2NF90IGJ1ZmZlclF1ZXVlSWQKKy8vICAgICBpbnQzMl90ICBzbG90SWQKKy8vICAgICBpbnQ2NF90ICB0aW1lc3RhbXBOcworLy8KKy8vIFdoZW4gYSB0cmFja2VkIGJ1ZmZlciBhc3NvY2lhdGVkIHRvIHRoZSB0cmlwbGUgKGxpc3RlbmVyLCBmcmFtZUluZGV4LAorLy8gYnVmZmVySW5kZXgpIGdvZXMgb3V0IG9mIHNjb3BlLCBsaXN0ZW5lci0+b25GcmFtZXNSZW5kZXJlZCgpIHdpbGwgYmUgY2FsbGVkCisvLyB3aXRoIGEgUmVuZGVyZWRGcmFtZSBvYmplY3Qgd2hvc2UgbWVtYmVycyBhcmUgc2V0IGFzIGZvbGxvd3M6CisvLworLy8gICAgIGJ1ZmZlclF1ZXVlSWQgPSBmcmFtZUluZGV4CisvLyAgICAgc2xvdElkICAgICAgICA9IH5idWZmZXJJbmRleAorLy8gICAgIHRpbWVzdGFtcE5zICAgPSBzeXN0ZW1UaW1lKCkgYXQgdGhlIHRpbWUgb2Ygbm90aWZpY2F0aW9uCisvLworLy8gVGhlIHJlYXNvbiBmb3IgdGhlIGJpdHdpc2UgbmVnYXRpb24gb2YgYnVmZmVySW5kZXggaXMgdGhhdCBvbkZyYW1lc1JlbmRlcmVkKCkKKy8vIG1heSBiZSB1c2VkIGZvciBhIGRpZmZlcmVudCBwdXJwb3NlIHdoZW4gc2xvdElkIGlzIG5vbi1uZWdhdGl2ZSAod2hpY2ggaXMgYQorLy8gbW9yZSBnZW5lcmFsIHVzZSBjYXNlKS4KKy8vCisvLyBJUEMgT3B0aW1pemF0aW9uCisvLyAtLS0tLS0tLS0tLS0tLS0tCisvLworLy8gU2luY2Ugb25GcmFtZXNSZW5kZXJlZCgpIGdlbmVyYWxseSBpcyBhbiBJUEMgY2FsbCwgSW5wdXRCdWZmZXJNYW5hZ2VyIHRyaWVzCisvLyBub3QgdG8gY2FsbCBpdCB0b28gb2Z0ZW4uIFRoZXJlIGlzIGEgbWVjaGFuaXNtIHRvIGd1YXJhbnRlZSB0aGF0IGFueSB0d28KKy8vIGNhbGxzIHRvIHRoZSBzYW1lIGxpc3RlbmVyIGFyZSBhdCBsZWFzdCBrTm90aWZpY2F0aW9uUGVyaW9kTnMgbmFub3NlY29uZHMKKy8vIGFwYXJ0LgorLy8KK3N0cnVjdCBJbnB1dEJ1ZmZlck1hbmFnZXIgeworICAgIC8vIFRoZSBtaW5pbXVtIHRpbWUgcGVyaW9kIGJldHdlZW4gSVBDIGNhbGxzIHRvIG5vdGlmeSB0aGUgY2xpZW50IGFib3V0IHRoZQorICAgIC8vIGRlc3RydWN0aW9uIG9mIGlucHV0IGJ1ZmZlcnMuCisgICAgc3RhdGljIGNvbnN0ZXhwciBuc2Vjc190IGtOb3RpZmljYXRpb25QZXJpb2ROcyA9IDEwMDAwMDA7CisKKyAgICAvLyBUcmFjayBhbGwgYnVmZmVycyBpbiBhIEMyRnJhbWVEYXRhIG9iamVjdC4KKyAgICAvLworICAgIC8vIGlucHV0IChDMkZyYW1lRGF0YSkgaGFzIHRoZSBmb2xsb3dpbmcgdHdvIG1lbWJlcnMgdGhhdCBhcmUgb2YgaW50ZXJlc3Q6CisgICAgLy8KKyAgICAvLyAgIEMyV29ya09yZGluYWwgICAgICAgICAgICAgICAgb3JkaW5hbAorICAgIC8vICAgdmVjdG9yPHNoYXJlZF9wdHI8QzJCdWZmZXI+PiBidWZmZXJzCisgICAgLy8KKyAgICAvLyBDYWxsaW5nIHJlZ2lzdGVyRnJhbWVEYXRhKGxpc3RlbmVyLCBpbnB1dCkgd2lsbCByZWdpc3RlciBtdWx0aXBsZQorICAgIC8vIHRyaXBsZXMgKCwgZnJhbWVJbmRleCwgYnVmZmVySW5kZXgpIHdoZXJlIGZyYW1lSW5kZXggaXMgZXF1YWwgdG8KKyAgICAvLyBpbnB1dC5vcmRpbmFsLmZyYW1lSW5kZXggYW5kIGJ1ZmZlckluZGV4IHJ1bnMgdGhyb3VnaCB0aGUgaW5kaWNlcyBvZgorICAgIC8vIGlucHV0LmJ1ZmZlcnMgc3VjaCB0aGF0IGlucHV0LmJ1ZmZlcnNbYnVmZmVySW5kZXhdIGlzIG5vdCBudWxsLgorICAgIC8vCisgICAgLy8gVGhpcyBzaG91bGQgYmUgY2FsbGVkIGZyb20gcXVldWUoKS4KKyAgICBzdGF0aWMgdm9pZCByZWdpc3RlckZyYW1lRGF0YSgKKyAgICAgICAgICAgIGNvbnN0IHNwPElDb21wb25lbnRMaXN0ZW5lcj4mIGxpc3RlbmVyLAorICAgICAgICAgICAgY29uc3QgQzJGcmFtZURhdGEmIGlucHV0KTsKKworICAgIC8vIFVudHJhY2sgYWxsIGJ1ZmZlcnMgaW4gYSBDMkZyYW1lRGF0YSBvYmplY3QuCisgICAgLy8KKyAgICAvLyBDYWxsaW5nIHVucmVnaXN0ZXJGcmFtZURhdGEobGlzdGVuZXIsIGlucHV0KSB3aWxsIHVucmVnaXN0ZXIgYW5kIHJlbW92ZQorICAgIC8vIHBlbmRpbmcgbm90aWZpY2F0aW9ucyBmb3IgYWxsIHRyaXBsZXMgKGwsIGZpLCBidWZmZXJJbmRleCkgc3VjaCB0aGF0CisgICAgLy8gbCA9IGxpc3RlbmVyIGFuZCBmaSA9IGlucHV0Lm9yZGluYWwuZnJhbWVJbmRleC4KKyAgICAvLworICAgIC8vIFRoaXMgc2hvdWxkIGJlIGNhbGxlZCBmcm9tIG9uV29ya0RvbmUoKSBhbmQgZmx1c2goKS4KKyAgICBzdGF0aWMgdm9pZCB1bnJlZ2lzdGVyRnJhbWVEYXRhKAorICAgICAgICAgICAgY29uc3Qgd3A8SUNvbXBvbmVudExpc3RlbmVyPiYgbGlzdGVuZXIsCisgICAgICAgICAgICBjb25zdCBDMkZyYW1lRGF0YSYgaW5wdXQpOworCisgICAgLy8gVW50cmFjayBhbGwgYnVmZmVycyBhc3NvY2lhdGVkIHRvIGEgZ2l2ZW4gbGlzdGVuZXIuCisgICAgLy8KKyAgICAvLyBDYWxsaW5nIHVucmVnaXN0ZXJGcmFtZURhdGEobGlzdGVuZXIpIHdpbGwgdW5yZWdpc3RlciBhbmQgcmVtb3ZlCisgICAgLy8gcGVuZGluZyBub3RpZmljYXRpb25zIGZvciBhbGwgdHJpcGxlcyAobCwgZnJhbWVJbmRleCwgYnVmZmVySW5kZXgpIHN1Y2gKKyAgICAvLyB0aGF0IGwgPSBsaXN0ZW5lci4KKyAgICAvLworICAgIC8vIFRoaXMgc2hvdWxkIGJlIGNhbGxlZCB3aGVuIHRoZSBjb21wb25lbnQgY2xlYW5zIHVwIGFsbCBpbnB1dCBidWZmZXJzLAorICAgIC8vIGkuZS4sIHdoZW4gcmVzZXQoKSwgcmVsZWFzZSgpLCBzdG9wKCkgb3IgfkNvbXBvbmVudCgpIGlzIGNhbGxlZC4KKyAgICBzdGF0aWMgdm9pZCB1bnJlZ2lzdGVyRnJhbWVEYXRhKAorICAgICAgICAgICAgY29uc3Qgd3A8SUNvbXBvbmVudExpc3RlbmVyPiYgbGlzdGVuZXIpOworCitwcml2YXRlOgorICAgIHZvaWQgX3JlZ2lzdGVyRnJhbWVEYXRhKAorICAgICAgICAgICAgY29uc3Qgc3A8SUNvbXBvbmVudExpc3RlbmVyPiYgbGlzdGVuZXIsCisgICAgICAgICAgICBjb25zdCBDMkZyYW1lRGF0YSYgaW5wdXQpOworICAgIHZvaWQgX3VucmVnaXN0ZXJGcmFtZURhdGEoCisgICAgICAgICAgICBjb25zdCB3cDxJQ29tcG9uZW50TGlzdGVuZXI+JiBsaXN0ZW5lciwKKyAgICAgICAgICAgIGNvbnN0IEMyRnJhbWVEYXRhJiBpbnB1dCk7CisgICAgdm9pZCBfdW5yZWdpc3RlckZyYW1lRGF0YSgKKyAgICAgICAgICAgIGNvbnN0IHdwPElDb21wb25lbnRMaXN0ZW5lcj4mIGxpc3RlbmVyKTsKKworICAgIC8vIFRoZSBjYWxsYmFjayBmdW5jdGlvbiB0aWVkIHRvIEMyQnVmZmVyIG9iamVjdHMuCisgICAgLy8KKyAgICAvLyBOb3RlOiBUaGlzIGZ1bmN0aW9uIGFzc3VtZXMgdGhhdCBzSW5zdGFuY2UgaXMgdGhlIG9ubHkgaW5zdGFuY2Ugb2YgdGhpcworICAgIC8vICAgICAgIGNsYXNzLgorICAgIHN0YXRpYyB2b2lkIG9uQnVmZmVyRGVzdHJveWVkKGNvbnN0IEMyQnVmZmVyKiBidWYsIHZvaWQqIGFyZyk7CisgICAgdm9pZCBfb25CdWZmZXJEZXN0cm95ZWQoY29uc3QgQzJCdWZmZXIqIGJ1Ziwgdm9pZCogYXJnKTsKKworICAgIC8vIENvbXBhcmlzb24gb3BlcmF0b3IgZm9yIHdlYWsgcG9pbnRlcnMuCisgICAgc3RydWN0IENvbXBhcmVXZWFrQ29tcG9uZW50TGlzdGVuZXIgeworICAgICAgICBjb25zdGV4cHIgYm9vbCBvcGVyYXRvcigpKAorICAgICAgICAgICAgICAgIGNvbnN0IHdwPElDb21wb25lbnRMaXN0ZW5lcj4mIHgsCisgICAgICAgICAgICAgICAgY29uc3Qgd3A8SUNvbXBvbmVudExpc3RlbmVyPiYgeSkgY29uc3QgeworICAgICAgICAgICAgcmV0dXJuIHguZ2V0X3JlZnMoKSA8IHkuZ2V0X3JlZnMoKTsKKyAgICAgICAgfQorICAgIH07CisKKyAgICAvLyBQZXJzaXN0ZW50IGRhdGEgdG8gYmUgcGFzc2VkIGFzICJhcmciIGluIG9uQnVmZmVyRGVzdHJveWVkKCkuCisgICAgLy8gVGhpcyBpcyBlc3NlbnRpYWxseSB0aGUgdHJpcGxlIChsaXN0ZW5lciwgZnJhbWVJbmRleCwgYnVmZmVySW5kZXgpIHBsdXMgYQorICAgIC8vIHdlYWsgcG9pbnRlciB0byB0aGUgQzJCdWZmZXIgb2JqZWN0LgorICAgIC8vCisgICAgLy8gTm90ZSB0aGF0IHRoZSAia2V5IiBpcyBidWZmZXJJbmRleCBhY2NvcmRpbmcgdG8gb3BlcmF0b3I8KCkuIFRoaXMgaXMKKyAgICAvLyBkZXNpZ25lZCB0byB3b3JrIHdpdGggVHJhY2tlZEJ1ZmZlcnNNYXAgZGVmaW5lZCBiZWxvdy4KKyAgICBzdHJ1Y3QgVHJhY2tlZEJ1ZmZlciB7CisgICAgICAgIHdwPElDb21wb25lbnRMaXN0ZW5lcj4gbGlzdGVuZXI7CisgICAgICAgIHVpbnQ2NF90IGZyYW1lSW5kZXg7CisgICAgICAgIHNpemVfdCBidWZmZXJJbmRleDsKKyAgICAgICAgc3RkOjp3ZWFrX3B0cjxDMkJ1ZmZlcj4gYnVmZmVyOworICAgICAgICBUcmFja2VkQnVmZmVyKGNvbnN0IHdwPElDb21wb25lbnRMaXN0ZW5lcj4mIGxpc3RlbmVyLAorICAgICAgICAgICAgICAgICAgICAgIHVpbnQ2NF90IGZyYW1lSW5kZXgsCisgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IGJ1ZmZlckluZGV4LAorICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0ZDo6c2hhcmVkX3B0cjxDMkJ1ZmZlcj4mIGJ1ZmZlcikKKyAgICAgICAgICAgICAgOiBsaXN0ZW5lcihsaXN0ZW5lciksCisgICAgICAgICAgICAgICAgZnJhbWVJbmRleChmcmFtZUluZGV4KSwKKyAgICAgICAgICAgICAgICBidWZmZXJJbmRleChidWZmZXJJbmRleCksCisgICAgICAgICAgICAgICAgYnVmZmVyKGJ1ZmZlcikge30KKyAgICAgICAgVHJhY2tlZEJ1ZmZlcihjb25zdCBUcmFja2VkQnVmZmVyJikgPSBkZWZhdWx0OworICAgICAgICBib29sIG9wZXJhdG9yPChjb25zdCBUcmFja2VkQnVmZmVyJiBvdGhlcikgY29uc3QgeworICAgICAgICAgICAgcmV0dXJuIGJ1ZmZlckluZGV4IDwgb3RoZXIuYnVmZmVySW5kZXg7CisgICAgICAgIH0KKyAgICB9OworCisgICAgLy8gTWFwOiBsaXN0ZW5lciAtPiBmcmFtZUluZGV4IC0+IHNldDxUcmFja2VkQnVmZmVyPi4KKyAgICAvLyBFc3NlbnRpYWxseSwgdGhpcyBpcyB1c2VkIHRvIHN0b3JlIHRyaXBsZXMgKGxpc3RlbmVyLCBmcmFtZUluZGV4LAorICAgIC8vIGJ1ZmZlckluZGV4KSB0aGF0J3Mgc2VhcmNoYWJsZSBieSBsaXN0ZW5lciBhbmQgKGxpc3RlbmVyLCBmcmFtZUluZGV4KS4KKyAgICAvLyBIb3dldmVyLCB0aGUgdmFsdWUgb2YgdGhlIGlubmVybW9zdCBtYXAgaXMgVHJhY2tlZEJ1ZmZlciwgd2hpY2ggYWxzbworICAgIC8vIGNvbnRhaW5zIGFuIGV4dHJhIGNvcHkgb2YgbGlzdGVuZXIgYW5kIGZyYW1lSW5kZXguIFRoaXMgaXMgbmVlZGVkCisgICAgLy8gYmVjYXVzZSBvbkJ1ZmZlckRlc3Ryb3llZCgpIG5lZWRzIHRvIGtub3cgbGlzdGVuZXIgYW5kIGZyYW1lSW5kZXggdG9vLgorICAgIHR5cGVkZWYgc3RkOjptYXA8d3A8SUNvbXBvbmVudExpc3RlbmVyPiwKKyAgICAgICAgICAgICAgICAgICAgIHN0ZDo6bWFwPHVpbnQ2NF90LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RkOjpzZXQ8VHJhY2tlZEJ1ZmZlcj4+LAorICAgICAgICAgICAgICAgICAgICAgQ29tcGFyZVdlYWtDb21wb25lbnRMaXN0ZW5lcj4gVHJhY2tlZEJ1ZmZlcnNNYXA7CisKKyAgICAvLyBTdG9yYWdlIGZvciBwZW5kaW5nICh1bnNlbnQpIGRlYXRoIG5vdGlmaWNhdGlvbnMgZm9yIG9uZSBsaXN0ZW5lci4KKyAgICAvLyBFYWNoIHBhaXIgaW4gbWVtYmVyIG5hbWVkICJpbmRpY2VzIiBhcmUgKGZyYW1lSW5kZXgsIGJ1ZmZlckluZGV4KSBmcm9tCisgICAgLy8gdGhlIChsaXN0ZW5lciwgZnJhbWVJbmRleCwgYnVmZmVySW5kZXgpIHRyaXBsZS4KKyAgICBzdHJ1Y3QgRGVhdGhOb3RpZmljYXRpb25zIHsKKworICAgICAgICAvLyBUaGUgbnVtYmVyIG9mIHBlbmRpbmcgbm90aWZpY2F0aW9ucyBmb3IgdGhpcyBsaXN0ZW5lci4KKyAgICAgICAgLy8gY291bnQgbWF5IGJlIDAsIGluIHdoaWNoIGNhc2UgdGhlIERlYXRoTm90aWZpY2F0aW9ucyBvYmplY3Qgd2lsbAorICAgICAgICAvLyByZW1haW4gdmFsaWQgZm9yIG9ubHkgYSBzbWFsbCBwZXJpb2QgKGtOb3RpZmljYXRpb25QZXJpb2ROcworICAgICAgICAvLyBuYW5vc2Vjb25kcykuCisgICAgICAgIHNpemVfdCBjb3VudDsKKworICAgICAgICAvLyBUaGUgdGltZXN0YW1wIG9mIHRoZSBtb3N0IHJlY2VudCBjYWxsYmFjayBvbiB0aGlzIGxpc3RlbmVyLiBUaGlzIGlzCisgICAgICAgIC8vIHVzZWQgdG8gZ3VhcmFudGVlIHRoYXQgY2FsbGJhY2tzIGRvIG5vdCBvY2N1ciB0b28gZnJlcXVlbnRseSwgYW5kCisgICAgICAgIC8vIGFsc28gdG8gdHJpZ2dlciBleHBpcmF0aW9uIG9mIGEgRGVhdGhOb3RpZmljYXRpb25zIG9iamVjdCB0aGF0IGhhcworICAgICAgICAvLyBjb3VudCA9IDAuCisgICAgICAgIG5zZWNzX3QgbGFzdFNlbnROczsKKworICAgICAgICAvLyBNYXA6IGZyYW1lSW5kZXggLT4gdmVjdG9yIG9mIGJ1ZmZlckluZGljZXMKKyAgICAgICAgLy8gVGhpcyBpcyBlc3NlbnRpYWxseSBhIGNvbGxlY3Rpb24gb2YgKGZyYW1kZUluZGV4LCBidWZmZXJJbmRleCkuCisgICAgICAgIHN0ZDo6bWFwPHVpbnQ2NF90LCBzdGQ6OnZlY3RvcjxzaXplX3Q+PiBpbmRpY2VzOworCisgICAgICAgIERlYXRoTm90aWZpY2F0aW9ucygpCisgICAgICAgICAgICAgIDogY291bnQoMCksCisgICAgICAgICAgICAgICAgbGFzdFNlbnROcyhzeXN0ZW1UaW1lKCkgLSBrTm90aWZpY2F0aW9uUGVyaW9kTnMpLAorICAgICAgICAgICAgICAgIGluZGljZXMoKSB7fQorICAgIH07CisKKyAgICAvLyBNdXRleCBmb3IgdGhlIG1hbmFnZW1lbnQgb2YgYWxsIGlucHV0IGJ1ZmZlcnMuCisgICAgc3RkOjptdXRleCBtTXV0ZXg7CisKKyAgICAvLyBUcmFja2VkIGlucHV0IGJ1ZmZlcnMuCisgICAgVHJhY2tlZEJ1ZmZlcnNNYXAgbVRyYWNrZWRCdWZmZXJzTWFwOworCisgICAgLy8gRGVhdGggbm90aWZpY2F0aW9ucyB0byBiZSBzZW50LgorICAgIC8vCisgICAgLy8gQSBEZWF0aE5vdGlmaWNhdGlvbnMgb2JqZWN0IGlzIGFzc29jaWF0ZWQgdG8gZWFjaCBsaXN0ZW5lci4gQW4gZW50cnkgaW4KKyAgICAvLyB0aGlzIG1hcCB3aWxsIGJlIHJlbW92ZWQgaWYgaXRzIGFzc29jaWF0ZWQgRGVhdGhOb3RpZmljYXRpb25zIGhhcyBjb3VudCA9CisgICAgLy8gMCBhbmQgbGFzdFNlbnROcyA8IHN5c3RlbVRpbWUoKSAtIGtOb3RpZmljYXRpb25QZXJpb2ROcy4KKyAgICBzdGQ6Om1hcDx3cDxJQ29tcG9uZW50TGlzdGVuZXI+LCBEZWF0aE5vdGlmaWNhdGlvbnM+IG1EZWF0aE5vdGlmaWNhdGlvbnM7CisKKyAgICAvLyBDb25kaXRpb24gdmFyaWFibGUgc2lnbmFsZWQgd2hlbiBhbiBlbnRyeSBpcyBhZGRlZCB0byBtRGVhdGhOb3RpZmljYXRpb25zLgorICAgIHN0ZDo6Y29uZGl0aW9uX3ZhcmlhYmxlIG1PbkJ1ZmZlckRlc3Ryb3llZDsKKworICAgIC8vIE5vdGlmeSB0aGUgY2xpZW50cyBhYm91dCBidWZmZXIgZGVzdHJ1Y3Rpb25zLgorICAgIC8vIFJldHVybiBmYWxzZSBpZiBhbGwgZGVzdHJ1Y3Rpb25zIGhhdmUgYmVlbiBub3RpZmllZC4KKyAgICAvLyBSZXR1cm4gdHJ1ZSBhbmQgc2V0IHRpbWVUb1JldHJ5IHRvIHRoZSBkdXJhdGlvbiB0byB3YWl0IGZvciBiZWZvcmUKKyAgICAvLyByZXRyeWluZyBpZiBzb21lIGRlc3RydWN0aW9ucyBoYXZlIG5vdCBiZWVuIG5vdGlmaWVkLgorICAgIGJvb2wgcHJvY2Vzc05vdGlmaWNhdGlvbnMobnNlY3NfdCogdGltZVRvUmV0cnlOcyk7CisKKyAgICAvLyBNYWluIGZ1bmN0aW9uIGZvciB0aGUgaW5wdXQgYnVmZmVyIG1hbmFnZXIgdGhyZWFkLgorICAgIHZvaWQgbWFpbigpOworCisgICAgLy8gVGhlIHRocmVhZCB0aGF0IG1hbmFnZXMgbm90aWZpY2F0aW9ucy4KKyAgICAvLworICAgIC8vIE5vdGU6IFRoaXMgdmFyaWFibGUgaXMgZGVjbGFyZWQgbGFzdCBzbyBpdHMgaW5pdGlhbGl6YXRpb24gd2lsbCBoYXBwZW4KKyAgICAvLyBhZnRlciBhbGwgb3RoZXIgbWVtYmVyIHZhcmlhYmxlcyBoYXZlIGJlZW4gaW5pdGlhbGl6ZWQuCisgICAgc3RkOjp0aHJlYWQgbU1haW5UaHJlYWQ7CisKKyAgICAvLyBQcml2YXRlIGNvbnN0cnVjdG9yLgorICAgIElucHV0QnVmZmVyTWFuYWdlcigpOworCisgICAgLy8gVGhlIG9ubHkgaW5zdGFuY2Ugb2YgdGhpcyBjbGFzcy4KKyAgICBzdGF0aWMgSW5wdXRCdWZmZXJNYW5hZ2VyJiBnZXRJbnN0YW5jZSgpOworCit9OworCisvLyBDb21wb25lbnRJbnRlcmZhY2UKK0NvbXBvbmVudEludGVyZmFjZTo6Q29tcG9uZW50SW50ZXJmYWNlKAorICAgICAgICBjb25zdCBzdGQ6OnNoYXJlZF9wdHI8QzJDb21wb25lbnRJbnRlcmZhY2U+JiBpbnRmLAorICAgICAgICBjb25zdCBzcDxDb21wb25lbnRTdG9yZT4mIHN0b3JlKSA6CisgICAgQ29uZmlndXJhYmxlKG5ldyBDYWNoZWRDb25maWd1cmFibGUoc3RkOjptYWtlX3VuaXF1ZTxDb21wSW50Zj4oaW50ZikpKSwKKyAgICBtSW50ZXJmYWNlKGludGYpIHsKKyAgICBtSW5pdCA9IGluaXQoc3RvcmUuZ2V0KCkpOworfQorCitjMl9zdGF0dXNfdCBDb21wb25lbnRJbnRlcmZhY2U6OnN0YXR1cygpIGNvbnN0IHsKKyAgICByZXR1cm4gbUluaXQ7Cit9CisKKy8vIENvbXBvbmVudExpc3RlbmVyIHdyYXBwZXIKK3N0cnVjdCBDb21wb25lbnQ6Okxpc3RlbmVyIDogcHVibGljIEMyQ29tcG9uZW50OjpMaXN0ZW5lciB7CisKKyAgICBMaXN0ZW5lcihjb25zdCBzcDxDb21wb25lbnQ+JiBjb21wb25lbnQpIDoKKyAgICAgICAgbUNvbXBvbmVudChjb21wb25lbnQpLAorICAgICAgICBtTGlzdGVuZXIoY29tcG9uZW50LT5tTGlzdGVuZXIpIHsKKyAgICB9CisKKyAgICB2aXJ0dWFsIHZvaWQgb25FcnJvcl9uYigKKyAgICAgICAgICAgIHN0ZDo6d2Vha19wdHI8QzJDb21wb25lbnQ+IC8qIGMyY29tcG9uZW50ICovLAorICAgICAgICAgICAgdWludDMyX3QgZXJyb3JDb2RlKSBvdmVycmlkZSB7CisgICAgICAgIEFMT0dWKCJvbkVycm9yIik7CisgICAgICAgIHNwPElDb21wb25lbnRMaXN0ZW5lcj4gbGlzdGVuZXIgPSBtTGlzdGVuZXIucHJvbW90ZSgpOworICAgICAgICBpZiAobGlzdGVuZXIpIHsKKyAgICAgICAgICAgIFJldHVybjx2b2lkPiB0cmFuc1N0YXR1cyA9IGxpc3RlbmVyLT5vbkVycm9yKFN0YXR1czo6T0ssIGVycm9yQ29kZSk7CisgICAgICAgICAgICBpZiAoIXRyYW5zU3RhdHVzLmlzT2soKSkgeworICAgICAgICAgICAgICAgIEFMT0dFKCJvbkVycm9yIC0tIHRyYW5zYWN0aW9uIGZhaWxlZC4iKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKworICAgIHZpcnR1YWwgdm9pZCBvblRyaXBwZWRfbmIoCisgICAgICAgICAgICBzdGQ6OndlYWtfcHRyPEMyQ29tcG9uZW50PiAvKiBjMmNvbXBvbmVudCAqLywKKyAgICAgICAgICAgIHN0ZDo6dmVjdG9yPHN0ZDo6c2hhcmVkX3B0cjxDMlNldHRpbmdSZXN1bHQ+PiBjMnNldHRpbmdSZXN1bHQKKyAgICAgICAgICAgICkgb3ZlcnJpZGUgeworICAgICAgICBBTE9HVigib25UcmlwcGVkIik7CisgICAgICAgIHNwPElDb21wb25lbnRMaXN0ZW5lcj4gbGlzdGVuZXIgPSBtTGlzdGVuZXIucHJvbW90ZSgpOworICAgICAgICBpZiAobGlzdGVuZXIpIHsKKyAgICAgICAgICAgIGhpZGxfdmVjPFNldHRpbmdSZXN1bHQ+IHNldHRpbmdSZXN1bHRzKGMyc2V0dGluZ1Jlc3VsdC5zaXplKCkpOworICAgICAgICAgICAgc2l6ZV90IGl4ID0gMDsKKyAgICAgICAgICAgIGZvciAoY29uc3Qgc3RkOjpzaGFyZWRfcHRyPEMyU2V0dGluZ1Jlc3VsdD4gJmMycmVzdWx0IDoKKyAgICAgICAgICAgICAgICAgICAgYzJzZXR0aW5nUmVzdWx0KSB7CisgICAgICAgICAgICAgICAgaWYgKGMycmVzdWx0KSB7CisgICAgICAgICAgICAgICAgICAgIGlmIChvYmpjcHkoJnNldHRpbmdSZXN1bHRzW2l4KytdLCAqYzJyZXN1bHQpICE9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3RhdHVzOjpPSykgeworICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICBzZXR0aW5nUmVzdWx0cy5yZXNpemUoaXgpOworICAgICAgICAgICAgUmV0dXJuPHZvaWQ+IHRyYW5zU3RhdHVzID0gbGlzdGVuZXItPm9uVHJpcHBlZChzZXR0aW5nUmVzdWx0cyk7CisgICAgICAgICAgICBpZiAoIXRyYW5zU3RhdHVzLmlzT2soKSkgeworICAgICAgICAgICAgICAgIEFMT0dFKCJvblRyaXBwZWQgLS0gdHJhbnNhY3Rpb24gZmFpbGVkLiIpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCisgICAgdmlydHVhbCB2b2lkIG9uV29ya0RvbmVfbmIoCisgICAgICAgICAgICBzdGQ6OndlYWtfcHRyPEMyQ29tcG9uZW50PiAvKiBjMmNvbXBvbmVudCAqLywKKyAgICAgICAgICAgIHN0ZDo6bGlzdDxzdGQ6OnVuaXF1ZV9wdHI8QzJXb3JrPj4gYzJ3b3JrSXRlbXMpIG92ZXJyaWRlIHsKKyAgICAgICAgQUxPR1YoIm9uV29ya0RvbmUiKTsKKyAgICAgICAgZm9yIChjb25zdCBzdGQ6OnVuaXF1ZV9wdHI8QzJXb3JrPiYgd29yayA6IGMyd29ya0l0ZW1zKSB7CisgICAgICAgICAgICBpZiAod29yaykgeworICAgICAgICAgICAgICAgIGlmICh3b3JrLT53b3JrbGV0cy5lbXB0eSgpCisgICAgICAgICAgICAgICAgICAgICAgICB8fCAhd29yay0+d29ya2xldHMuYmFjaygpCisgICAgICAgICAgICAgICAgICAgICAgICB8fCAod29yay0+d29ya2xldHMuYmFjaygpLT5vdXRwdXQuZmxhZ3MgJgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIEMyRnJhbWVEYXRhOjpGTEFHX0lOQ09NUExFVEUpID09IDApIHsKKyAgICAgICAgICAgICAgICAgICAgSW5wdXRCdWZmZXJNYW5hZ2VyOjoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnJlZ2lzdGVyRnJhbWVEYXRhKG1MaXN0ZW5lciwgd29yay0+aW5wdXQpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIHNwPElDb21wb25lbnRMaXN0ZW5lcj4gbGlzdGVuZXIgPSBtTGlzdGVuZXIucHJvbW90ZSgpOworICAgICAgICBpZiAobGlzdGVuZXIpIHsKKyAgICAgICAgICAgIFdvcmtCdW5kbGUgd29ya0J1bmRsZTsKKworICAgICAgICAgICAgc3A8Q29tcG9uZW50PiBzdHJvbmdDb21wb25lbnQgPSBtQ29tcG9uZW50LnByb21vdGUoKTsKKyAgICAgICAgICAgIGlmIChvYmpjcHkoJndvcmtCdW5kbGUsIGMyd29ya0l0ZW1zLCBzdHJvbmdDb21wb25lbnQgPworICAgICAgICAgICAgICAgICAgICAmc3Ryb25nQ29tcG9uZW50LT5tQnVmZmVyUG9vbFNlbmRlciA6IG51bGxwdHIpCisgICAgICAgICAgICAgICAgICAgICE9IFN0YXR1czo6T0spIHsKKyAgICAgICAgICAgICAgICBBTE9HRSgib25Xb3JrRG9uZSgpIHJlY2VpdmVkIGNvcnJ1cHRlZCB3b3JrIGl0ZW1zLiIpOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIFJldHVybjx2b2lkPiB0cmFuc1N0YXR1cyA9IGxpc3RlbmVyLT5vbldvcmtEb25lKHdvcmtCdW5kbGUpOworICAgICAgICAgICAgaWYgKCF0cmFuc1N0YXR1cy5pc09rKCkpIHsKKyAgICAgICAgICAgICAgICBBTE9HRSgib25Xb3JrRG9uZSAtLSB0cmFuc2FjdGlvbiBmYWlsZWQuIik7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQorICAgICAgICAgICAgeWllbGRCdWZmZXJRdWV1ZUJsb2NrcyhjMndvcmtJdGVtcywgdHJ1ZSk7CisgICAgICAgIH0KKyAgICB9CisKK3Byb3RlY3RlZDoKKyAgICB3cDxDb21wb25lbnQ+IG1Db21wb25lbnQ7CisgICAgd3A8SUNvbXBvbmVudExpc3RlbmVyPiBtTGlzdGVuZXI7Cit9OworCisvLyBDb21wb25lbnQKK0NvbXBvbmVudDo6Q29tcG9uZW50KAorICAgICAgICBjb25zdCBzdGQ6OnNoYXJlZF9wdHI8QzJDb21wb25lbnQ+JiBjb21wb25lbnQsCisgICAgICAgIGNvbnN0IHNwPElDb21wb25lbnRMaXN0ZW5lcj4mIGxpc3RlbmVyLAorICAgICAgICBjb25zdCBzcDxDb21wb25lbnRTdG9yZT4mIHN0b3JlLAorICAgICAgICBjb25zdCBzcDw6OmFuZHJvaWQ6OmhhcmR3YXJlOjptZWRpYTo6YnVmZmVycG9vbDo6VjFfMDo6CisgICAgICAgIElDbGllbnRNYW5hZ2VyPiYgY2xpZW50UG9vbE1hbmFnZXIpIDoKKyAgICBDb25maWd1cmFibGUobmV3IENhY2hlZENvbmZpZ3VyYWJsZSgKKyAgICAgICAgICAgIHN0ZDo6bWFrZV91bmlxdWU8Q29tcEludGY+KGNvbXBvbmVudC0+aW50ZigpKSkpLAorICAgIG1Db21wb25lbnQoY29tcG9uZW50KSwKKyAgICBtSW50ZXJmYWNlKGNvbXBvbmVudC0+aW50ZigpKSwKKyAgICBtTGlzdGVuZXIobGlzdGVuZXIpLAorICAgIG1TdG9yZShzdG9yZSksCisgICAgbUJ1ZmZlclBvb2xTZW5kZXIoY2xpZW50UG9vbE1hbmFnZXIpIHsKKyAgICAvLyBSZXRyaWV2ZSBzdXBwb3J0ZWQgcGFyYW1ldGVycyBmcm9tIHN0b3JlCisgICAgLy8gVE9ETzogV2UgY291bGQgY2FjaGUgdGhpcyBwZXIgY29tcG9uZW50L2ludGVyZmFjZSB0eXBlCisgICAgbUluaXQgPSBpbml0KHN0b3JlLmdldCgpKTsKK30KKworYzJfc3RhdHVzX3QgQ29tcG9uZW50OjpzdGF0dXMoKSBjb25zdCB7CisgICAgcmV0dXJuIG1Jbml0OworfQorCisvLyBNZXRob2RzIGZyb20gOjphbmRyb2lkOjpoYXJkd2FyZTo6bWVkaWE6OmMyOjpWMV8wOjpJQ29tcG9uZW50CitSZXR1cm48U3RhdHVzPiBDb21wb25lbnQ6OnF1ZXVlKGNvbnN0IFdvcmtCdW5kbGUmIHdvcmtCdW5kbGUpIHsKKyAgICBBTE9HVigicXVldWUgLS0gY29udmVydGluZyBpbnB1dCIpOworICAgIHN0ZDo6bGlzdDxzdGQ6OnVuaXF1ZV9wdHI8QzJXb3JrPj4gYzJ3b3JrczsKKworICAgIGlmIChvYmpjcHkoJmMyd29ya3MsIHdvcmtCdW5kbGUpICE9IEMyX09LKSB7CisgICAgICAgIEFMT0dWKCJxdWV1ZSAtLSBjb3JydXB0ZWQiKTsKKyAgICAgICAgcmV0dXJuIFN0YXR1czo6Q09SUlVQVEVEOworICAgIH0KKworICAgIC8vIFJlZ2lzdGVyIGlucHV0IGJ1ZmZlcnMuCisgICAgZm9yIChjb25zdCBzdGQ6OnVuaXF1ZV9wdHI8QzJXb3JrPiYgd29yayA6IGMyd29ya3MpIHsKKyAgICAgICAgaWYgKHdvcmspIHsKKyAgICAgICAgICAgIElucHV0QnVmZmVyTWFuYWdlcjo6CisgICAgICAgICAgICAgICAgICAgIHJlZ2lzdGVyRnJhbWVEYXRhKG1MaXN0ZW5lciwgd29yay0+aW5wdXQpOworICAgICAgICB9CisgICAgfQorCisgICAgQUxPR1YoInF1ZXVlIC0tIGNhbGxpbmciKTsKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8U3RhdHVzPihtQ29tcG9uZW50LT5xdWV1ZV9uYigmYzJ3b3JrcykpOworfQorCitSZXR1cm48dm9pZD4gQ29tcG9uZW50OjpmbHVzaChmbHVzaF9jYiBfaGlkbF9jYikgeworICAgIHN0ZDo6bGlzdDxzdGQ6OnVuaXF1ZV9wdHI8QzJXb3JrPj4gYzJmbHVzaGVkV29ya3M7CisgICAgQUxPR1YoImZsdXNoIC0tIGNhbGxpbmciKTsKKyAgICBjMl9zdGF0dXNfdCBjMnJlcyA9IG1Db21wb25lbnQtPmZsdXNoX3NtKAorICAgICAgICAgICAgQzJDb21wb25lbnQ6OkZMVVNIX0NPTVBPTkVOVCwKKyAgICAgICAgICAgICZjMmZsdXNoZWRXb3Jrcyk7CisKKyAgICAvLyBVbnJlZ2lzdGVyIGlucHV0IGJ1ZmZlcnMuCisgICAgZm9yIChjb25zdCBzdGQ6OnVuaXF1ZV9wdHI8QzJXb3JrPiYgd29yayA6IGMyZmx1c2hlZFdvcmtzKSB7CisgICAgICAgIGlmICh3b3JrKSB7CisgICAgICAgICAgICBpZiAod29yay0+d29ya2xldHMuZW1wdHkoKQorICAgICAgICAgICAgICAgICAgICB8fCAhd29yay0+d29ya2xldHMuYmFjaygpCisgICAgICAgICAgICAgICAgICAgIHx8ICh3b3JrLT53b3JrbGV0cy5iYWNrKCktPm91dHB1dC5mbGFncyAmCisgICAgICAgICAgICAgICAgICAgICAgICBDMkZyYW1lRGF0YTo6RkxBR19JTkNPTVBMRVRFKSA9PSAwKSB7CisgICAgICAgICAgICAgICAgSW5wdXRCdWZmZXJNYW5hZ2VyOjoKKyAgICAgICAgICAgICAgICAgICAgICAgIHVucmVnaXN0ZXJGcmFtZURhdGEobUxpc3RlbmVyLCB3b3JrLT5pbnB1dCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKKyAgICBXb3JrQnVuZGxlIGZsdXNoZWRXb3JrQnVuZGxlOworICAgIFN0YXR1cyByZXMgPSBzdGF0aWNfY2FzdDxTdGF0dXM+KGMycmVzKTsKKyAgICBpZiAoYzJyZXMgPT0gQzJfT0spIHsKKyAgICAgICAgQUxPR1YoImZsdXNoIC0tIGNvbnZlcnRpbmcgb3V0cHV0Iik7CisgICAgICAgIHJlcyA9IG9iamNweSgmZmx1c2hlZFdvcmtCdW5kbGUsIGMyZmx1c2hlZFdvcmtzLCAmbUJ1ZmZlclBvb2xTZW5kZXIpOworICAgIH0KKyAgICBfaGlkbF9jYihyZXMsIGZsdXNoZWRXb3JrQnVuZGxlKTsKKyAgICB5aWVsZEJ1ZmZlclF1ZXVlQmxvY2tzKGMyZmx1c2hlZFdvcmtzLCB0cnVlKTsKKyAgICByZXR1cm4gVm9pZCgpOworfQorCitSZXR1cm48U3RhdHVzPiBDb21wb25lbnQ6OmRyYWluKGJvb2wgd2l0aEVvcykgeworICAgIEFMT0dWKCJkcmFpbiIpOworICAgIHJldHVybiBzdGF0aWNfY2FzdDxTdGF0dXM+KG1Db21wb25lbnQtPmRyYWluX25iKHdpdGhFb3MgPworICAgICAgICAgICAgQzJDb21wb25lbnQ6OkRSQUlOX0NPTVBPTkVOVF9XSVRIX0VPUyA6CisgICAgICAgICAgICBDMkNvbXBvbmVudDo6RFJBSU5fQ09NUE9ORU5UX05PX0VPUykpOworfQorCitSZXR1cm48U3RhdHVzPiBDb21wb25lbnQ6OnNldE91dHB1dFN1cmZhY2UoCisgICAgICAgIHVpbnQ2NF90IGJsb2NrUG9vbElkLAorICAgICAgICBjb25zdCBzcDxIR3JhcGhpY0J1ZmZlclByb2R1Y2VyPiYgc3VyZmFjZSkgeworICAgIHN0ZDo6c2hhcmVkX3B0cjxDMkJsb2NrUG9vbD4gcG9vbDsKKyAgICBHZXRDb2RlYzJCbG9ja1Bvb2woYmxvY2tQb29sSWQsIG1Db21wb25lbnQsICZwb29sKTsKKyAgICBpZiAocG9vbCAmJiBwb29sLT5nZXRBbGxvY2F0b3JJZCgpID09IEMyUGxhdGZvcm1BbGxvY2F0b3JTdG9yZTo6QlVGRkVSUVVFVUUpIHsKKyAgICAgICAgc3RkOjpzaGFyZWRfcHRyPEMyQnVmZmVyUXVldWVCbG9ja1Bvb2w+IGJxUG9vbCA9CisgICAgICAgICAgICAgICAgc3RkOjpzdGF0aWNfcG9pbnRlcl9jYXN0PEMyQnVmZmVyUXVldWVCbG9ja1Bvb2w+KHBvb2wpOworICAgICAgICBDMkJ1ZmZlclF1ZXVlQmxvY2tQb29sOjpPblJlbmRlckNhbGxiYWNrIGNiID0KKyAgICAgICAgICAgIFt0aGlzXSh1aW50NjRfdCBwcm9kdWNlciwgaW50MzJfdCBzbG90LCBpbnQ2NF90IG5zZWNzKSB7CisgICAgICAgICAgICAgICAgLy8gVE9ETzogYmF0Y2ggdGhpcworICAgICAgICAgICAgICAgIGhpZGxfdmVjPElDb21wb25lbnRMaXN0ZW5lcjo6UmVuZGVyZWRGcmFtZT4gcmVuZGVyZWQ7CisgICAgICAgICAgICAgICAgcmVuZGVyZWQucmVzaXplKDEpOworICAgICAgICAgICAgICAgIHJlbmRlcmVkWzBdID0geyBwcm9kdWNlciwgc2xvdCwgbnNlY3MgfTsKKyAgICAgICAgICAgICAgICAodm9pZCltTGlzdGVuZXItPm9uRnJhbWVzUmVuZGVyZWQocmVuZGVyZWQpLmlzT2soKTsKKyAgICAgICAgfTsKKyAgICAgICAgaWYgKGJxUG9vbCkgeworICAgICAgICAgICAgYnFQb29sLT5zZXRSZW5kZXJDYWxsYmFjayhjYik7CisgICAgICAgICAgICBicVBvb2wtPmNvbmZpZ3VyZVByb2R1Y2VyKHN1cmZhY2UpOworICAgICAgICB9CisgICAgfQorICAgIHJldHVybiBTdGF0dXM6Ok9LOworfQorCitSZXR1cm48U3RhdHVzPiBDb21wb25lbnQ6OmNvbm5lY3RUb09teElucHV0U3VyZmFjZSgKKyAgICAgICAgY29uc3Qgc3A8SEdyYXBoaWNCdWZmZXJQcm9kdWNlcj4mIHByb2R1Y2VyLAorICAgICAgICBjb25zdCBzcDw6OmFuZHJvaWQ6OmhhcmR3YXJlOjptZWRpYTo6b214OjpWMV8wOjoKKyAgICAgICAgSUdyYXBoaWNCdWZmZXJTb3VyY2U+JiBzb3VyY2UpIHsKKyAgICAvLyBUT0RPIGltcGxlbWVudAorICAgICh2b2lkKXByb2R1Y2VyOworICAgICh2b2lkKXNvdXJjZTsKKyAgICByZXR1cm4gU3RhdHVzOjpPTUlUVEVEOworfQorCitSZXR1cm48U3RhdHVzPiBDb21wb25lbnQ6OmRpc2Nvbm5lY3RGcm9tSW5wdXRTdXJmYWNlKCkgeworICAgIC8vIFRPRE8gaW1wbGVtZW50CisgICAgcmV0dXJuIFN0YXR1czo6T0s7Cit9CisKK25hbWVzcGFjZSAvKiB1bm5hbWVkICovIHsKKworc3RydWN0IEJsb2NrUG9vbEludGYgOiBwdWJsaWMgQ29uZmlndXJhYmxlQzJJbnRmIHsKKyAgICBCbG9ja1Bvb2xJbnRmKGNvbnN0IHN0ZDo6c2hhcmVkX3B0cjxDMkJsb2NrUG9vbD4mIHBvb2wpIDoKKyAgICAgICAgQ29uZmlndXJhYmxlQzJJbnRmKCJDMkJsb2NrUG9vbDoiICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIChwb29sID8gc3RkOjp0b19zdHJpbmcocG9vbC0+Z2V0TG9jYWxJZCgpKSA6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAibnVsbCIpKSwKKyAgICAgICAgbVBvb2wocG9vbCkgeworICAgIH0KKworICAgIHZpcnR1YWwgYzJfc3RhdHVzX3QgY29uZmlnKAorICAgICAgICAgICAgY29uc3Qgc3RkOjp2ZWN0b3I8QzJQYXJhbSo+JiBwYXJhbXMsCisgICAgICAgICAgICBjMl9ibG9ja2luZ190IG1heUJsb2NrLAorICAgICAgICAgICAgc3RkOjp2ZWN0b3I8c3RkOjp1bmlxdWVfcHRyPEMyU2V0dGluZ1Jlc3VsdD4+KiBjb25zdCBmYWlsdXJlcworICAgICAgICAgICAgKSBvdmVycmlkZSB7CisgICAgICAgICh2b2lkKXBhcmFtczsKKyAgICAgICAgKHZvaWQpbWF5QmxvY2s7CisgICAgICAgICh2b2lkKWZhaWx1cmVzOworICAgICAgICByZXR1cm4gQzJfT0s7CisgICAgfQorCisgICAgdmlydHVhbCBjMl9zdGF0dXNfdCBxdWVyeSgKKyAgICAgICAgICAgIGNvbnN0IHN0ZDo6dmVjdG9yPEMyUGFyYW06OkluZGV4PiYgaW5kaWNlcywKKyAgICAgICAgICAgIGMyX2Jsb2NraW5nX3QgbWF5QmxvY2ssCisgICAgICAgICAgICBzdGQ6OnZlY3RvcjxzdGQ6OnVuaXF1ZV9wdHI8QzJQYXJhbT4+KiBjb25zdCBwYXJhbXMKKyAgICAgICAgICAgICkgY29uc3Qgb3ZlcnJpZGUgeworICAgICAgICAodm9pZClpbmRpY2VzOworICAgICAgICAodm9pZCltYXlCbG9jazsKKyAgICAgICAgKHZvaWQpcGFyYW1zOworICAgICAgICByZXR1cm4gQzJfT0s7CisgICAgfQorCisgICAgdmlydHVhbCBjMl9zdGF0dXNfdCBxdWVyeVN1cHBvcnRlZFBhcmFtcygKKyAgICAgICAgICAgIHN0ZDo6dmVjdG9yPHN0ZDo6c2hhcmVkX3B0cjxDMlBhcmFtRGVzY3JpcHRvcj4+KiBjb25zdCBwYXJhbXMKKyAgICAgICAgICAgICkgY29uc3Qgb3ZlcnJpZGUgeworICAgICAgICAodm9pZClwYXJhbXM7CisgICAgICAgIHJldHVybiBDMl9PSzsKKyAgICB9CisKKyAgICB2aXJ0dWFsIGMyX3N0YXR1c190IHF1ZXJ5U3VwcG9ydGVkVmFsdWVzKAorICAgICAgICAgICAgc3RkOjp2ZWN0b3I8QzJGaWVsZFN1cHBvcnRlZFZhbHVlc1F1ZXJ5PiYgZmllbGRzLAorICAgICAgICAgICAgYzJfYmxvY2tpbmdfdCBtYXlCbG9jaykgY29uc3Qgb3ZlcnJpZGUgeworICAgICAgICAodm9pZClmaWVsZHM7CisgICAgICAgICh2b2lkKW1heUJsb2NrOworICAgICAgICByZXR1cm4gQzJfT0s7CisgICAgfQorCitwcm90ZWN0ZWQ6CisgICAgc3RkOjpzaGFyZWRfcHRyPEMyQmxvY2tQb29sPiBtUG9vbDsKK307CisKK30gLy8gdW5uYW1lZCBuYW1lc3BhY2UKKworUmV0dXJuPHZvaWQ+IENvbXBvbmVudDo6Y3JlYXRlQmxvY2tQb29sKAorICAgICAgICB1aW50MzJfdCBhbGxvY2F0b3JJZCwKKyAgICAgICAgY3JlYXRlQmxvY2tQb29sX2NiIF9oaWRsX2NiKSB7CisgICAgc3RkOjpzaGFyZWRfcHRyPEMyQmxvY2tQb29sPiBibG9ja1Bvb2w7CisgICAgYzJfc3RhdHVzX3Qgc3RhdHVzID0gQ3JlYXRlQ29kZWMyQmxvY2tQb29sKAorICAgICAgICAgICAgc3RhdGljX2Nhc3Q8QzJQbGF0Zm9ybUFsbG9jYXRvclN0b3JlOjppZF90PihhbGxvY2F0b3JJZCksCisgICAgICAgICAgICBtQ29tcG9uZW50LAorICAgICAgICAgICAgJmJsb2NrUG9vbCk7CisgICAgaWYgKHN0YXR1cyAhPSBDMl9PSykgeworICAgICAgICBibG9ja1Bvb2wgPSBudWxscHRyOworICAgIH0KKyAgICBpZiAoYmxvY2tQb29sKSB7CisgICAgICAgIG1CbG9ja1Bvb2xzTXV0ZXgubG9jaygpOworICAgICAgICBtQmxvY2tQb29scy5lbXBsYWNlKGJsb2NrUG9vbC0+Z2V0TG9jYWxJZCgpLCBibG9ja1Bvb2wpOworICAgICAgICBtQmxvY2tQb29sc011dGV4LnVubG9jaygpOworICAgIH0gZWxzZSBpZiAoc3RhdHVzID09IEMyX09LKSB7CisgICAgICAgIHN0YXR1cyA9IEMyX0NPUlJVUFRFRDsKKyAgICB9CisKKyAgICBfaGlkbF9jYihzdGF0aWNfY2FzdDxTdGF0dXM+KHN0YXR1cyksCisgICAgICAgICAgICBibG9ja1Bvb2wgPyBibG9ja1Bvb2wtPmdldExvY2FsSWQoKSA6IDAsCisgICAgICAgICAgICBuZXcgQ2FjaGVkQ29uZmlndXJhYmxlKAorICAgICAgICAgICAgc3RkOjptYWtlX3VuaXF1ZTxCbG9ja1Bvb2xJbnRmPihibG9ja1Bvb2wpKSk7CisgICAgcmV0dXJuIFZvaWQoKTsKK30KKworUmV0dXJuPFN0YXR1cz4gQ29tcG9uZW50OjpkZXN0cm95QmxvY2tQb29sKHVpbnQ2NF90IGJsb2NrUG9vbElkKSB7CisgICAgc3RkOjpsb2NrX2d1YXJkPHN0ZDo6bXV0ZXg+IGxvY2sobUJsb2NrUG9vbHNNdXRleCk7CisgICAgcmV0dXJuIG1CbG9ja1Bvb2xzLmVyYXNlKGJsb2NrUG9vbElkKSA9PSAxID8KKyAgICAgICAgICAgIFN0YXR1czo6T0sgOiBTdGF0dXM6OkNPUlJVUFRFRDsKK30KKworUmV0dXJuPFN0YXR1cz4gQ29tcG9uZW50OjpzdGFydCgpIHsKKyAgICBBTE9HVigic3RhcnQiKTsKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8U3RhdHVzPihtQ29tcG9uZW50LT5zdGFydCgpKTsKK30KKworUmV0dXJuPFN0YXR1cz4gQ29tcG9uZW50OjpzdG9wKCkgeworICAgIEFMT0dWKCJzdG9wIik7CisgICAgSW5wdXRCdWZmZXJNYW5hZ2VyOjp1bnJlZ2lzdGVyRnJhbWVEYXRhKG1MaXN0ZW5lcik7CisgICAgcmV0dXJuIHN0YXRpY19jYXN0PFN0YXR1cz4obUNvbXBvbmVudC0+c3RvcCgpKTsKK30KKworUmV0dXJuPFN0YXR1cz4gQ29tcG9uZW50OjpyZXNldCgpIHsKKyAgICBBTE9HVigicmVzZXQiKTsKKyAgICBTdGF0dXMgc3RhdHVzID0gc3RhdGljX2Nhc3Q8U3RhdHVzPihtQ29tcG9uZW50LT5yZXNldCgpKTsKKyAgICB7CisgICAgICAgIHN0ZDo6bG9ja19ndWFyZDxzdGQ6Om11dGV4PiBsb2NrKG1CbG9ja1Bvb2xzTXV0ZXgpOworICAgICAgICBtQmxvY2tQb29scy5jbGVhcigpOworICAgIH0KKyAgICBJbnB1dEJ1ZmZlck1hbmFnZXI6OnVucmVnaXN0ZXJGcmFtZURhdGEobUxpc3RlbmVyKTsKKyAgICByZXR1cm4gc3RhdHVzOworfQorCitSZXR1cm48U3RhdHVzPiBDb21wb25lbnQ6OnJlbGVhc2UoKSB7CisgICAgQUxPR1YoInJlbGVhc2UiKTsKKyAgICBTdGF0dXMgc3RhdHVzID0gc3RhdGljX2Nhc3Q8U3RhdHVzPihtQ29tcG9uZW50LT5yZWxlYXNlKCkpOworICAgIHsKKyAgICAgICAgc3RkOjpsb2NrX2d1YXJkPHN0ZDo6bXV0ZXg+IGxvY2sobUJsb2NrUG9vbHNNdXRleCk7CisgICAgICAgIG1CbG9ja1Bvb2xzLmNsZWFyKCk7CisgICAgfQorICAgIElucHV0QnVmZmVyTWFuYWdlcjo6dW5yZWdpc3RlckZyYW1lRGF0YShtTGlzdGVuZXIpOworICAgIHJldHVybiBzdGF0dXM7Cit9CisKK3ZvaWQgQ29tcG9uZW50OjpzZXRMb2NhbElkKGNvbnN0IENvbXBvbmVudDo6TG9jYWxJZCYgbG9jYWxJZCkgeworICAgIG1Mb2NhbElkID0gbG9jYWxJZDsKK30KKwordm9pZCBDb21wb25lbnQ6OmluaXRMaXN0ZW5lcihjb25zdCBzcDxDb21wb25lbnQ+JiBzZWxmKSB7CisgICAgc3RkOjpzaGFyZWRfcHRyPEMyQ29tcG9uZW50OjpMaXN0ZW5lcj4gYzJsaXN0ZW5lciA9CisgICAgICAgICAgICBzdGQ6Om1ha2Vfc2hhcmVkPExpc3RlbmVyPihzZWxmKTsKKyAgICBjMl9zdGF0dXNfdCByZXMgPSBtQ29tcG9uZW50LT5zZXRMaXN0ZW5lcl92YihjMmxpc3RlbmVyLCBDMl9ET05UX0JMT0NLKTsKKyAgICBpZiAocmVzICE9IEMyX09LKSB7CisgICAgICAgIG1Jbml0ID0gcmVzOworICAgIH0KK30KKworQ29tcG9uZW50Ojp+Q29tcG9uZW50KCkgeworICAgIElucHV0QnVmZmVyTWFuYWdlcjo6dW5yZWdpc3RlckZyYW1lRGF0YShtTGlzdGVuZXIpOworICAgIG1TdG9yZS0+cmVwb3J0Q29tcG9uZW50RGVhdGgobUxvY2FsSWQpOworfQorCitDb21wb25lbnQ6OkludGVyZmFjZUtleTo6SW50ZXJmYWNlS2V5KGNvbnN0IHNwPElDb21wb25lbnQ+JiBjb21wb25lbnQpIHsKKyAgICBpc1JlbW90ZSA9IGNvbXBvbmVudC0+aXNSZW1vdGUoKTsKKyAgICBpZiAoaXNSZW1vdGUpIHsKKyAgICAgICAgcmVtb3RlID0gOjphbmRyb2lkOjpoYXJkd2FyZTo6dG9CaW5kZXIoY29tcG9uZW50KTsKKyAgICB9IGVsc2UgeworICAgICAgICBsb2NhbCA9IGNvbXBvbmVudDsKKyAgICB9Cit9CisKKy8vIElucHV0QnVmZmVyTWFuYWdlciBpbXBsZW1lbnRhdGlvbgorCitjb25zdGV4cHIgbnNlY3NfdCBJbnB1dEJ1ZmZlck1hbmFnZXI6OmtOb3RpZmljYXRpb25QZXJpb2ROczsKKwordm9pZCBJbnB1dEJ1ZmZlck1hbmFnZXI6OnJlZ2lzdGVyRnJhbWVEYXRhKAorICAgICAgICBjb25zdCBzcDxJQ29tcG9uZW50TGlzdGVuZXI+JiBsaXN0ZW5lciwKKyAgICAgICAgY29uc3QgQzJGcmFtZURhdGEmIGlucHV0KSB7CisgICAgZ2V0SW5zdGFuY2UoKS5fcmVnaXN0ZXJGcmFtZURhdGEobGlzdGVuZXIsIGlucHV0KTsKK30KKwordm9pZCBJbnB1dEJ1ZmZlck1hbmFnZXI6OnVucmVnaXN0ZXJGcmFtZURhdGEoCisgICAgICAgIGNvbnN0IHdwPElDb21wb25lbnRMaXN0ZW5lcj4mIGxpc3RlbmVyLAorICAgICAgICBjb25zdCBDMkZyYW1lRGF0YSYgaW5wdXQpIHsKKyAgICBnZXRJbnN0YW5jZSgpLl91bnJlZ2lzdGVyRnJhbWVEYXRhKGxpc3RlbmVyLCBpbnB1dCk7Cit9CisKK3ZvaWQgSW5wdXRCdWZmZXJNYW5hZ2VyOjp1bnJlZ2lzdGVyRnJhbWVEYXRhKAorICAgICAgICBjb25zdCB3cDxJQ29tcG9uZW50TGlzdGVuZXI+JiBsaXN0ZW5lcikgeworICAgIGdldEluc3RhbmNlKCkuX3VucmVnaXN0ZXJGcmFtZURhdGEobGlzdGVuZXIpOworfQorCit2b2lkIElucHV0QnVmZmVyTWFuYWdlcjo6X3JlZ2lzdGVyRnJhbWVEYXRhKAorICAgICAgICBjb25zdCBzcDxJQ29tcG9uZW50TGlzdGVuZXI+JiBsaXN0ZW5lciwKKyAgICAgICAgY29uc3QgQzJGcmFtZURhdGEmIGlucHV0KSB7CisgICAgdWludDY0X3QgZnJhbWVJbmRleCA9IGlucHV0Lm9yZGluYWwuZnJhbWVJbmRleC5wZWVrdSgpOworICAgIEFMT0dWKCJJbnB1dEJ1ZmZlck1hbmFnZXI6Ol9yZWdpc3RlckZyYW1lRGF0YSBjYWxsZWQgIgorICAgICAgICAgICIobGlzdGVuZXIgQCAlcCwgZnJhbWVJbmRleCA9ICVsbHUpIiwKKyAgICAgICAgICBsaXN0ZW5lci5nZXQoKSwKKyAgICAgICAgICBzdGF0aWNfY2FzdDxsb25nIGxvbmcgdW5zaWduZWQ+KGZyYW1lSW5kZXgpKTsKKyAgICBzdGQ6OmxvY2tfZ3VhcmQ8c3RkOjptdXRleD4gbG9jayhtTXV0ZXgpOworCisgICAgc3RkOjpzZXQ8VHJhY2tlZEJ1ZmZlcj4gJmJ1ZmZlcklkcyA9CisgICAgICAgICAgICBtVHJhY2tlZEJ1ZmZlcnNNYXBbbGlzdGVuZXJdW2ZyYW1lSW5kZXhdOworCisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBpbnB1dC5idWZmZXJzLnNpemUoKTsgKytpKSB7CisgICAgICAgIGlmICghaW5wdXQuYnVmZmVyc1tpXSkgeworICAgICAgICAgICAgQUxPR1YoIklucHV0QnVmZmVyTWFuYWdlcjo6X3JlZ2lzdGVyRnJhbWVEYXRhOiAiCisgICAgICAgICAgICAgICAgICAiSW5wdXQgYnVmZmVyIGF0IGluZGV4ICV6dSBpcyBudWxsIiwgaSk7CisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQorICAgICAgICBjb25zdCBUcmFja2VkQnVmZmVyICZidWZmZXJJZCA9CisgICAgICAgICAgICAgICAgKmJ1ZmZlcklkcy5lbXBsYWNlKGxpc3RlbmVyLCBmcmFtZUluZGV4LCBpLCBpbnB1dC5idWZmZXJzW2ldKS4KKyAgICAgICAgICAgICAgICBmaXJzdDsKKworICAgICAgICBjMl9zdGF0dXNfdCBzdGF0dXMgPSBpbnB1dC5idWZmZXJzW2ldLT5yZWdpc3Rlck9uRGVzdHJveU5vdGlmeSgKKyAgICAgICAgICAgICAgICBvbkJ1ZmZlckRlc3Ryb3llZCwKKyAgICAgICAgICAgICAgICBjb25zdF9jYXN0PHZvaWQqPihyZWludGVycHJldF9jYXN0PGNvbnN0IHZvaWQqPigmYnVmZmVySWQpKSk7CisgICAgICAgIGlmIChzdGF0dXMgIT0gQzJfT0spIHsKKyAgICAgICAgICAgIEFMT0dEKCJJbnB1dEJ1ZmZlck1hbmFnZXI6IHJlZ2lzdGVyT25EZXN0cm95Tm90aWZ5IGZhaWxlZCAiCisgICAgICAgICAgICAgICAgICAiKGxpc3RlbmVyIEAgJXAsIGZyYW1lSW5kZXggPSAlbGx1LCBidWZmZXJJbmRleCA9ICV6dSkgIgorICAgICAgICAgICAgICAgICAgIj0+ICVzICglZCkiLAorICAgICAgICAgICAgICAgICAgbGlzdGVuZXIuZ2V0KCksCisgICAgICAgICAgICAgICAgICBzdGF0aWNfY2FzdDx1bnNpZ25lZCBsb25nIGxvbmc+KGZyYW1lSW5kZXgpLAorICAgICAgICAgICAgICAgICAgaSwKKyAgICAgICAgICAgICAgICAgIGFzU3RyaW5nKHN0YXR1cyksIHN0YXRpY19jYXN0PGludD4oc3RhdHVzKSk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBtRGVhdGhOb3RpZmljYXRpb25zLmVtcGxhY2UobGlzdGVuZXIsIERlYXRoTm90aWZpY2F0aW9ucygpKTsKK30KKworLy8gUmVtb3ZlIGEgcGFpciAobGlzdGVuZXIsIGZyYW1lSW5kZXgpIGZyb20gbVRyYWNrZWRCdWZmZXJzTWFwIGFuZAorLy8gbURlYXRoTm90aWZpY2F0aW9ucy4gVGhpcyBpbXBsaWVzIGFsbCBidWZmZXJJbmRpY2VzIGFyZSByZW1vdmVkLgorLy8KKy8vIFRoaXMgaXMgY2FsbGVkIGZyb20gb25Xb3JrRG9uZSgpIGFuZCBmbHVzaCgpLgordm9pZCBJbnB1dEJ1ZmZlck1hbmFnZXI6Ol91bnJlZ2lzdGVyRnJhbWVEYXRhKAorICAgICAgICBjb25zdCB3cDxJQ29tcG9uZW50TGlzdGVuZXI+JiBsaXN0ZW5lciwKKyAgICAgICAgY29uc3QgQzJGcmFtZURhdGEmIGlucHV0KSB7CisgICAgdWludDY0X3QgZnJhbWVJbmRleCA9IGlucHV0Lm9yZGluYWwuZnJhbWVJbmRleC5wZWVrdSgpOworICAgIEFMT0dWKCJJbnB1dEJ1ZmZlck1hbmFnZXI6Ol91bnJlZ2lzdGVyRnJhbWVEYXRhIGNhbGxlZCAiCisgICAgICAgICAgIihsaXN0ZW5lciBAICVwLCBmcmFtZUluZGV4ID0gJWxsdSkiLAorICAgICAgICAgIGxpc3RlbmVyLnVuc2FmZV9nZXQoKSwKKyAgICAgICAgICBzdGF0aWNfY2FzdDxsb25nIGxvbmcgdW5zaWduZWQ+KGZyYW1lSW5kZXgpKTsKKyAgICBzdGQ6OmxvY2tfZ3VhcmQ8c3RkOjptdXRleD4gbG9jayhtTXV0ZXgpOworCisgICAgYXV0byBmaW5kTGlzdGVuZXIgPSBtVHJhY2tlZEJ1ZmZlcnNNYXAuZmluZChsaXN0ZW5lcik7CisgICAgaWYgKGZpbmRMaXN0ZW5lciAhPSBtVHJhY2tlZEJ1ZmZlcnNNYXAuZW5kKCkpIHsKKyAgICAgICAgc3RkOjptYXA8dWludDY0X3QsIHN0ZDo6c2V0PFRyYWNrZWRCdWZmZXI+PiAmZnJhbWVJbmRleDJCdWZmZXJJZHMKKyAgICAgICAgICAgICAgICA9IGZpbmRMaXN0ZW5lci0+c2Vjb25kOworICAgICAgICBhdXRvIGZpbmRGcmFtZUluZGV4ID0gZnJhbWVJbmRleDJCdWZmZXJJZHMuZmluZChmcmFtZUluZGV4KTsKKyAgICAgICAgaWYgKGZpbmRGcmFtZUluZGV4ICE9IGZyYW1lSW5kZXgyQnVmZmVySWRzLmVuZCgpKSB7CisgICAgICAgICAgICBzdGQ6OnNldDxUcmFja2VkQnVmZmVyPiAmYnVmZmVySWRzID0gZmluZEZyYW1lSW5kZXgtPnNlY29uZDsKKyAgICAgICAgICAgIGZvciAoY29uc3QgVHJhY2tlZEJ1ZmZlciYgYnVmZmVySWQgOiBidWZmZXJJZHMpIHsKKyAgICAgICAgICAgICAgICBzdGQ6OnNoYXJlZF9wdHI8QzJCdWZmZXI+IGJ1ZmZlciA9IGJ1ZmZlcklkLmJ1ZmZlci5sb2NrKCk7CisgICAgICAgICAgICAgICAgaWYgKGJ1ZmZlcikgeworICAgICAgICAgICAgICAgICAgICBjMl9zdGF0dXNfdCBzdGF0dXMgPSBidWZmZXItPnVucmVnaXN0ZXJPbkRlc3Ryb3lOb3RpZnkoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgb25CdWZmZXJEZXN0cm95ZWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3RfY2FzdDx2b2lkKj4oCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVpbnRlcnByZXRfY2FzdDxjb25zdCB2b2lkKj4oJmJ1ZmZlcklkKSkpOworICAgICAgICAgICAgICAgICAgICBpZiAoc3RhdHVzICE9IEMyX09LKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBBTE9HRCgiSW5wdXRCdWZmZXJNYW5hZ2VyOiAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidW5yZWdpc3Rlck9uRGVzdHJveU5vdGlmeSBmYWlsZWQgIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIihsaXN0ZW5lciBAICVwLCAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZnJhbWVJbmRleCA9ICVsbHUsICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJidWZmZXJJbmRleCA9ICV6dSkgIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIj0+ICVzICglZCkiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnVmZmVySWQubGlzdGVuZXIudW5zYWZlX2dldCgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGljX2Nhc3Q8dW5zaWduZWQgbG9uZyBsb25nPigKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBidWZmZXJJZC5mcmFtZUluZGV4KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1ZmZlcklkLmJ1ZmZlckluZGV4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXNTdHJpbmcoc3RhdHVzKSwgc3RhdGljX2Nhc3Q8aW50PihzdGF0dXMpKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgZnJhbWVJbmRleDJCdWZmZXJJZHMuZXJhc2UoZmluZEZyYW1lSW5kZXgpOworICAgICAgICAgICAgaWYgKGZyYW1lSW5kZXgyQnVmZmVySWRzLmVtcHR5KCkpIHsKKyAgICAgICAgICAgICAgICBtVHJhY2tlZEJ1ZmZlcnNNYXAuZXJhc2UoZmluZExpc3RlbmVyKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKworICAgIGF1dG8gZmluZExpc3RlbmVyRCA9IG1EZWF0aE5vdGlmaWNhdGlvbnMuZmluZChsaXN0ZW5lcik7CisgICAgaWYgKGZpbmRMaXN0ZW5lckQgIT0gbURlYXRoTm90aWZpY2F0aW9ucy5lbmQoKSkgeworICAgICAgICBEZWF0aE5vdGlmaWNhdGlvbnMgJmRlYXRoTm90aWZpY2F0aW9ucyA9IGZpbmRMaXN0ZW5lckQtPnNlY29uZDsKKyAgICAgICAgYXV0byBmaW5kRnJhbWVJbmRleCA9IGRlYXRoTm90aWZpY2F0aW9ucy5pbmRpY2VzLmZpbmQoZnJhbWVJbmRleCk7CisgICAgICAgIGlmIChmaW5kRnJhbWVJbmRleCAhPSBkZWF0aE5vdGlmaWNhdGlvbnMuaW5kaWNlcy5lbmQoKSkgeworICAgICAgICAgICAgc3RkOjp2ZWN0b3I8c2l6ZV90PiAmYnVmZmVySW5kaWNlcyA9IGZpbmRGcmFtZUluZGV4LT5zZWNvbmQ7CisgICAgICAgICAgICBkZWF0aE5vdGlmaWNhdGlvbnMuY291bnQgLT0gYnVmZmVySW5kaWNlcy5zaXplKCk7CisgICAgICAgICAgICBkZWF0aE5vdGlmaWNhdGlvbnMuaW5kaWNlcy5lcmFzZShmaW5kRnJhbWVJbmRleCk7CisgICAgICAgIH0KKyAgICB9Cit9CisKKy8vIFJlbW92ZSBsaXN0ZW5lciBmcm9tIG1UcmFja2VkQnVmZmVyc01hcCBhbmQgbURlYXRoTm90aWZpY2F0aW9ucy4gVGhpcyBpbXBsaWVzCisvLyBhbGwgZnJhbWVJbmRpY2VzIGFuZCBidWZmZXJJbmRpY2VzIGFyZSByZW1vdmVkLgorLy8KKy8vIFRoaXMgaXMgY2FsbGVkIHdoZW4gdGhlIGNvbXBvbmVudCBjbGVhbnMgdXAgYWxsIGlucHV0IGJ1ZmZlcnMsIGkuZS4sIHdoZW4KKy8vIHJlc2V0KCksIHJlbGVhc2UoKSwgc3RvcCgpIG9yIH5Db21wb25lbnQoKSBpcyBjYWxsZWQuCit2b2lkIElucHV0QnVmZmVyTWFuYWdlcjo6X3VucmVnaXN0ZXJGcmFtZURhdGEoCisgICAgICAgIGNvbnN0IHdwPElDb21wb25lbnRMaXN0ZW5lcj4mIGxpc3RlbmVyKSB7CisgICAgQUxPR1YoIklucHV0QnVmZmVyTWFuYWdlcjo6X3VucmVnaXN0ZXJGcmFtZURhdGEgY2FsbGVkIChsaXN0ZW5lciBAICVwKSIsCisgICAgICAgICAgICBsaXN0ZW5lci51bnNhZmVfZ2V0KCkpOworICAgIHN0ZDo6bG9ja19ndWFyZDxzdGQ6Om11dGV4PiBsb2NrKG1NdXRleCk7CisKKyAgICBhdXRvIGZpbmRMaXN0ZW5lciA9IG1UcmFja2VkQnVmZmVyc01hcC5maW5kKGxpc3RlbmVyKTsKKyAgICBpZiAoZmluZExpc3RlbmVyICE9IG1UcmFja2VkQnVmZmVyc01hcC5lbmQoKSkgeworICAgICAgICBzdGQ6Om1hcDx1aW50NjRfdCwgc3RkOjpzZXQ8VHJhY2tlZEJ1ZmZlcj4+ICZmcmFtZUluZGV4MkJ1ZmZlcklkcyA9CisgICAgICAgICAgICAgICAgZmluZExpc3RlbmVyLT5zZWNvbmQ7CisgICAgICAgIGZvciAoYXV0byBmaW5kRnJhbWVJbmRleCA9IGZyYW1lSW5kZXgyQnVmZmVySWRzLmJlZ2luKCk7CisgICAgICAgICAgICAgICAgZmluZEZyYW1lSW5kZXggIT0gZnJhbWVJbmRleDJCdWZmZXJJZHMuZW5kKCk7CisgICAgICAgICAgICAgICAgKytmaW5kRnJhbWVJbmRleCkgeworICAgICAgICAgICAgc3RkOjpzZXQ8VHJhY2tlZEJ1ZmZlcj4gJmJ1ZmZlcklkcyA9IGZpbmRGcmFtZUluZGV4LT5zZWNvbmQ7CisgICAgICAgICAgICBmb3IgKGNvbnN0IFRyYWNrZWRCdWZmZXImIGJ1ZmZlcklkIDogYnVmZmVySWRzKSB7CisgICAgICAgICAgICAgICAgc3RkOjpzaGFyZWRfcHRyPEMyQnVmZmVyPiBidWZmZXIgPSBidWZmZXJJZC5idWZmZXIubG9jaygpOworICAgICAgICAgICAgICAgIGlmIChidWZmZXIpIHsKKyAgICAgICAgICAgICAgICAgICAgYzJfc3RhdHVzX3Qgc3RhdHVzID0gYnVmZmVyLT51bnJlZ2lzdGVyT25EZXN0cm95Tm90aWZ5KAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uQnVmZmVyRGVzdHJveWVkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0X2Nhc3Q8dm9pZCo+KAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3Qgdm9pZCo+KCZidWZmZXJJZCkpKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKHN0YXR1cyAhPSBDMl9PSykgeworICAgICAgICAgICAgICAgICAgICAgICAgQUxPR0QoIklucHV0QnVmZmVyTWFuYWdlcjogIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInVucmVnaXN0ZXJPbkRlc3Ryb3lOb3RpZnkgZmFpbGVkICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIobGlzdGVuZXIgQCAlcCwgIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImZyYW1lSW5kZXggPSAlbGx1LCAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiYnVmZmVySW5kZXggPSAlenUpICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICI9PiAlcyAoJWQpIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1ZmZlcklkLmxpc3RlbmVyLnVuc2FmZV9nZXQoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRpY19jYXN0PHVuc2lnbmVkIGxvbmcgbG9uZz4oYnVmZmVySWQuZnJhbWVJbmRleCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBidWZmZXJJZC5idWZmZXJJbmRleCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFzU3RyaW5nKHN0YXR1cyksIHN0YXRpY19jYXN0PGludD4oc3RhdHVzKSk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgbVRyYWNrZWRCdWZmZXJzTWFwLmVyYXNlKGZpbmRMaXN0ZW5lcik7CisgICAgfQorCisgICAgbURlYXRoTm90aWZpY2F0aW9ucy5lcmFzZShsaXN0ZW5lcik7Cit9CisKKy8vIE1vdmUgYSBidWZmZXIgZnJvbSBtVHJhY2tlZEJ1ZmZlcnNNYXAgdG8gbURlYXRoTm90aWZpY2F0aW9ucy4KKy8vIFRoaXMgaXMgY2FsbGVkIHdoZW4gYSByZWdpc3RlcmVkIEMyQnVmZmVyIG9iamVjdCBpcyBkZXN0cm95ZWQuCit2b2lkIElucHV0QnVmZmVyTWFuYWdlcjo6b25CdWZmZXJEZXN0cm95ZWQoY29uc3QgQzJCdWZmZXIqIGJ1Ziwgdm9pZCogYXJnKSB7CisgICAgZ2V0SW5zdGFuY2UoKS5fb25CdWZmZXJEZXN0cm95ZWQoYnVmLCBhcmcpOworfQorCit2b2lkIElucHV0QnVmZmVyTWFuYWdlcjo6X29uQnVmZmVyRGVzdHJveWVkKGNvbnN0IEMyQnVmZmVyKiBidWYsIHZvaWQqIGFyZykgeworICAgIGlmICghYnVmIHx8ICFhcmcpIHsKKyAgICAgICAgQUxPR1coIklucHV0QnVmZmVyTWFuYWdlcjo6X29uQnVmZmVyRGVzdHJveWVkIGNhbGxlZCAiCisgICAgICAgICAgICAgICJ3aXRoIG51bGwgYXJndW1lbnQocykgKGJ1ZiBAICVwLCBhcmcgQCAlcCkiLAorICAgICAgICAgICAgICBidWYsIGFyZyk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgVHJhY2tlZEJ1ZmZlciBpZCgqcmVpbnRlcnByZXRfY2FzdDxUcmFja2VkQnVmZmVyKj4oYXJnKSk7CisgICAgQUxPR1YoIklucHV0QnVmZmVyTWFuYWdlcjo6X29uQnVmZmVyRGVzdHJveWVkIGNhbGxlZCAiCisgICAgICAgICAgIihsaXN0ZW5lciBAICVwLCBmcmFtZUluZGV4ID0gJWxsdSwgYnVmZmVySW5kZXggPSAlenUpIiwKKyAgICAgICAgICBpZC5saXN0ZW5lci51bnNhZmVfZ2V0KCksCisgICAgICAgICAgc3RhdGljX2Nhc3Q8dW5zaWduZWQgbG9uZyBsb25nPihpZC5mcmFtZUluZGV4KSwKKyAgICAgICAgICBpZC5idWZmZXJJbmRleCk7CisKKyAgICBzdGQ6OmxvY2tfZ3VhcmQ8c3RkOjptdXRleD4gbG9jayhtTXV0ZXgpOworCisgICAgYXV0byBmaW5kTGlzdGVuZXIgPSBtVHJhY2tlZEJ1ZmZlcnNNYXAuZmluZChpZC5saXN0ZW5lcik7CisgICAgaWYgKGZpbmRMaXN0ZW5lciA9PSBtVHJhY2tlZEJ1ZmZlcnNNYXAuZW5kKCkpIHsKKyAgICAgICAgQUxPR0QoIklucHV0QnVmZmVyTWFuYWdlcjo6X29uQnVmZmVyRGVzdHJveWVkIHJlY2VpdmVkICIKKyAgICAgICAgICAgICAgImludmFsaWQgbGlzdGVuZXIgIgorICAgICAgICAgICAgICAiKGxpc3RlbmVyIEAgJXAsIGZyYW1lSW5kZXggPSAlbGx1LCBidWZmZXJJbmRleCA9ICV6dSkiLAorICAgICAgICAgICAgICBpZC5saXN0ZW5lci51bnNhZmVfZ2V0KCksCisgICAgICAgICAgICAgIHN0YXRpY19jYXN0PHVuc2lnbmVkIGxvbmcgbG9uZz4oaWQuZnJhbWVJbmRleCksCisgICAgICAgICAgICAgIGlkLmJ1ZmZlckluZGV4KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIHN0ZDo6bWFwPHVpbnQ2NF90LCBzdGQ6OnNldDxUcmFja2VkQnVmZmVyPj4gJmZyYW1lSW5kZXgyQnVmZmVySWRzCisgICAgICAgICAgICA9IGZpbmRMaXN0ZW5lci0+c2Vjb25kOworICAgIGF1dG8gZmluZEZyYW1lSW5kZXggPSBmcmFtZUluZGV4MkJ1ZmZlcklkcy5maW5kKGlkLmZyYW1lSW5kZXgpOworICAgIGlmIChmaW5kRnJhbWVJbmRleCA9PSBmcmFtZUluZGV4MkJ1ZmZlcklkcy5lbmQoKSkgeworICAgICAgICBBTE9HRCgiSW5wdXRCdWZmZXJNYW5hZ2VyOjpfb25CdWZmZXJEZXN0cm95ZWQgcmVjZWl2ZWQgIgorICAgICAgICAgICAgICAiaW52YWxpZCBmcmFtZSBpbmRleCAiCisgICAgICAgICAgICAgICIobGlzdGVuZXIgQCAlcCwgZnJhbWVJbmRleCA9ICVsbHUsIGJ1ZmZlckluZGV4ID0gJXp1KSIsCisgICAgICAgICAgICAgIGlkLmxpc3RlbmVyLnVuc2FmZV9nZXQoKSwKKyAgICAgICAgICAgICAgc3RhdGljX2Nhc3Q8dW5zaWduZWQgbG9uZyBsb25nPihpZC5mcmFtZUluZGV4KSwKKyAgICAgICAgICAgICAgaWQuYnVmZmVySW5kZXgpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgc3RkOjpzZXQ8VHJhY2tlZEJ1ZmZlcj4gJmJ1ZmZlcklkcyA9IGZpbmRGcmFtZUluZGV4LT5zZWNvbmQ7CisgICAgYXV0byBmaW5kQnVmZmVySWQgPSBidWZmZXJJZHMuZmluZChpZCk7CisgICAgaWYgKGZpbmRCdWZmZXJJZCA9PSBidWZmZXJJZHMuZW5kKCkpIHsKKyAgICAgICAgQUxPR0QoIklucHV0QnVmZmVyTWFuYWdlcjo6X29uQnVmZmVyRGVzdHJveWVkIHJlY2VpdmVkICIKKyAgICAgICAgICAgICAgImludmFsaWQgYnVmZmVyIGluZGV4OiAiCisgICAgICAgICAgICAgICIobGlzdGVuZXIgQCAlcCwgZnJhbWVJbmRleCA9ICVsbHUsIGJ1ZmZlckluZGV4ID0gJXp1KSIsCisgICAgICAgICAgICAgIGlkLmxpc3RlbmVyLnVuc2FmZV9nZXQoKSwKKyAgICAgICAgICAgICAgc3RhdGljX2Nhc3Q8dW5zaWduZWQgbG9uZyBsb25nPihpZC5mcmFtZUluZGV4KSwKKyAgICAgICAgICAgICAgaWQuYnVmZmVySW5kZXgpOworICAgIH0KKworICAgIGJ1ZmZlcklkcy5lcmFzZShmaW5kQnVmZmVySWQpOworICAgIGlmIChidWZmZXJJZHMuZW1wdHkoKSkgeworICAgICAgICBmcmFtZUluZGV4MkJ1ZmZlcklkcy5lcmFzZShmaW5kRnJhbWVJbmRleCk7CisgICAgICAgIGlmIChmcmFtZUluZGV4MkJ1ZmZlcklkcy5lbXB0eSgpKSB7CisgICAgICAgICAgICBtVHJhY2tlZEJ1ZmZlcnNNYXAuZXJhc2UoZmluZExpc3RlbmVyKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIERlYXRoTm90aWZpY2F0aW9ucyAmZGVhdGhOb3RpZmljYXRpb25zID0gbURlYXRoTm90aWZpY2F0aW9uc1tpZC5saXN0ZW5lcl07CisgICAgZGVhdGhOb3RpZmljYXRpb25zLmluZGljZXNbaWQuZnJhbWVJbmRleF0uZW1wbGFjZV9iYWNrKGlkLmJ1ZmZlckluZGV4KTsKKyAgICArK2RlYXRoTm90aWZpY2F0aW9ucy5jb3VudDsKKyAgICBtT25CdWZmZXJEZXN0cm95ZWQubm90aWZ5X29uZSgpOworfQorCisvLyBOb3RpZnkgdGhlIGNsaWVudHMgYWJvdXQgYnVmZmVyIGRlc3RydWN0aW9ucy4KKy8vIFJldHVybiBmYWxzZSBpZiBhbGwgZGVzdHJ1Y3Rpb25zIGhhdmUgYmVlbiBub3RpZmllZC4KKy8vIFJldHVybiB0cnVlIGFuZCBzZXQgdGltZVRvUmV0cnkgdG8gdGhlIHRpbWUgcG9pbnQgdG8gd2FpdCBmb3IgYmVmb3JlCisvLyByZXRyeWluZyBpZiBzb21lIGRlc3RydWN0aW9ucyBoYXZlIG5vdCBiZWVuIG5vdGlmaWVkLgorYm9vbCBJbnB1dEJ1ZmZlck1hbmFnZXI6OnByb2Nlc3NOb3RpZmljYXRpb25zKG5zZWNzX3QqIHRpbWVUb1JldHJ5TnMpIHsKKworICAgIHN0cnVjdCBOb3RpZmljYXRpb24geworICAgICAgICBzcDxJQ29tcG9uZW50TGlzdGVuZXI+IGxpc3RlbmVyOworICAgICAgICBoaWRsX3ZlYzxJQ29tcG9uZW50TGlzdGVuZXI6OlJlbmRlcmVkRnJhbWU+IHJlbmRlcmVkRnJhbWVzOworICAgICAgICBOb3RpZmljYXRpb24oY29uc3Qgc3A8SUNvbXBvbmVudExpc3RlbmVyPiYgbCwgc2l6ZV90IHMpCisgICAgICAgICAgICAgIDogbGlzdGVuZXIobCksIHJlbmRlcmVkRnJhbWVzKHMpIHt9CisgICAgfTsKKyAgICBzdGQ6Omxpc3Q8Tm90aWZpY2F0aW9uPiBub3RpZmljYXRpb25zOworCisgICAgYm9vbCByZXRyeSA9IGZhbHNlOworICAgIHsKKyAgICAgICAgc3RkOjpsb2NrX2d1YXJkPHN0ZDo6bXV0ZXg+IGxvY2sobU11dGV4KTsKKyAgICAgICAgKnRpbWVUb1JldHJ5TnMgPSBrTm90aWZpY2F0aW9uUGVyaW9kTnM7CisgICAgICAgIG5zZWNzX3QgdGltZU5vd05zID0gc3lzdGVtVGltZSgpOworICAgICAgICBmb3IgKGF1dG8gaXQgPSBtRGVhdGhOb3RpZmljYXRpb25zLmJlZ2luKCk7CisgICAgICAgICAgICAgICAgaXQgIT0gbURlYXRoTm90aWZpY2F0aW9ucy5lbmQoKTsgKSB7CisgICAgICAgICAgICBzcDxJQ29tcG9uZW50TGlzdGVuZXI+IGxpc3RlbmVyID0gaXQtPmZpcnN0LnByb21vdGUoKTsKKyAgICAgICAgICAgIGlmICghbGlzdGVuZXIpIHsKKyAgICAgICAgICAgICAgICArK2l0OworICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgfQorICAgICAgICAgICAgRGVhdGhOb3RpZmljYXRpb25zICZkZWF0aE5vdGlmaWNhdGlvbnMgPSBpdC0+c2Vjb25kOworCisgICAgICAgICAgICBuc2Vjc190IHRpbWVTaW5jZUxhc3ROb3RpZmllZE5zID0KKyAgICAgICAgICAgICAgICAgICAgdGltZU5vd05zIC0gZGVhdGhOb3RpZmljYXRpb25zLmxhc3RTZW50TnM7CisgICAgICAgICAgICAvLyBJZiBub3QgZW5vdWdoIHRpbWUgaGFzIHBhc3NlZCBzaW5jZSB0aGUgbGFzdCBjYWxsYmFjaywgbGVhdmUgdGhlCisgICAgICAgICAgICAvLyBub3RpZmljYXRpb25zIGZvciB0aGlzIGxpc3RlbmVyIHVudG91Y2hlZCBmb3Igbm93IGFuZCByZXRyeQorICAgICAgICAgICAgLy8gbGF0ZXIuCisgICAgICAgICAgICBpZiAodGltZVNpbmNlTGFzdE5vdGlmaWVkTnMgPCBrTm90aWZpY2F0aW9uUGVyaW9kTnMpIHsKKyAgICAgICAgICAgICAgICByZXRyeSA9IHRydWU7CisgICAgICAgICAgICAgICAgKnRpbWVUb1JldHJ5TnMgPSBzdGQ6Om1pbigqdGltZVRvUmV0cnlOcywKKyAgICAgICAgICAgICAgICAgICAgICAgIGtOb3RpZmljYXRpb25QZXJpb2ROcyAtIHRpbWVTaW5jZUxhc3ROb3RpZmllZE5zKTsKKyAgICAgICAgICAgICAgICBBTE9HVigiSW5wdXRCdWZmZXJNYW5hZ2VyOiBOb3RpZmljYXRpb25zIGZvciAiCisgICAgICAgICAgICAgICAgICAgICAgImxpc3RlbmVyIEAgJXAgd2lsbCBiZSBwb3N0cG9uZWQuIiwKKyAgICAgICAgICAgICAgICAgICAgICBsaXN0ZW5lci5nZXQoKSk7CisgICAgICAgICAgICAgICAgKytpdDsKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgLy8gSWYgZW5vdWdoIHRpbWUgaGFzIHBhc3NlZCBzaW5jZSB0aGUgbGFzdCBub3RpZmljYXRpb24gdG8gdGhpcworICAgICAgICAgICAgLy8gbGlzdGVuZXIgYnV0IHRoZXJlIGFyZSBjdXJyZW50bHkgbm8gcGVuZGluZyBub3RpZmljYXRpb25zLCB0aGUKKyAgICAgICAgICAgIC8vIGxpc3RlbmVyIGNhbiBiZSByZW1vdmVkIGZyb20gbURlYXRoTm90aWZpY2F0aW9ucy0tLXRoZXJlIGlzIG5vCisgICAgICAgICAgICAvLyBuZWVkIHRvIGtlZXAgdHJhY2sgb2YgdGhlIGxhc3Qgbm90aWZpY2F0aW9uIHRpbWUgYW55bW9yZS4KKyAgICAgICAgICAgIGlmIChkZWF0aE5vdGlmaWNhdGlvbnMuY291bnQgPT0gMCkgeworICAgICAgICAgICAgICAgIGl0ID0gbURlYXRoTm90aWZpY2F0aW9ucy5lcmFzZShpdCk7CisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIC8vIENyZWF0ZSB0aGUgYXJndW1lbnQgZm9yIHRoZSBjYWxsYmFjay4KKyAgICAgICAgICAgIG5vdGlmaWNhdGlvbnMuZW1wbGFjZV9iYWNrKGxpc3RlbmVyLCBkZWF0aE5vdGlmaWNhdGlvbnMuY291bnQpOworICAgICAgICAgICAgaGlkbF92ZWM8SUNvbXBvbmVudExpc3RlbmVyOjpSZW5kZXJlZEZyYW1lPiYgcmVuZGVyZWRGcmFtZXMgPQorICAgICAgICAgICAgICAgICAgICBub3RpZmljYXRpb25zLmJhY2soKS5yZW5kZXJlZEZyYW1lczsKKyAgICAgICAgICAgIHNpemVfdCBpID0gMDsKKyAgICAgICAgICAgIGZvciAoc3RkOjpwYWlyPGNvbnN0IHVpbnQ2NF90LCBzdGQ6OnZlY3RvcjxzaXplX3Q+PiYgcCA6CisgICAgICAgICAgICAgICAgICAgIGRlYXRoTm90aWZpY2F0aW9ucy5pbmRpY2VzKSB7CisgICAgICAgICAgICAgICAgdWludDY0X3QgZnJhbWVJbmRleCA9IHAuZmlyc3Q7CisgICAgICAgICAgICAgICAgY29uc3Qgc3RkOjp2ZWN0b3I8c2l6ZV90PiAmYnVmZmVySW5kaWNlcyA9IHAuc2Vjb25kOworICAgICAgICAgICAgICAgIGZvciAoY29uc3Qgc2l6ZV90JiBidWZmZXJJbmRleCA6IGJ1ZmZlckluZGljZXMpIHsKKyAgICAgICAgICAgICAgICAgICAgSUNvbXBvbmVudExpc3RlbmVyOjpSZW5kZXJlZEZyYW1lICZyZW5kZXJlZEZyYW1lCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPSByZW5kZXJlZEZyYW1lc1tpKytdOworICAgICAgICAgICAgICAgICAgICByZW5kZXJlZEZyYW1lLnNsb3RJZCA9IH5idWZmZXJJbmRleDsKKyAgICAgICAgICAgICAgICAgICAgcmVuZGVyZWRGcmFtZS5idWZmZXJRdWV1ZUlkID0gZnJhbWVJbmRleDsKKyAgICAgICAgICAgICAgICAgICAgcmVuZGVyZWRGcmFtZS50aW1lc3RhbXBOcyA9IHRpbWVOb3dOczsKKyAgICAgICAgICAgICAgICAgICAgQUxPR1YoIklucHV0QnVmZmVyTWFuYWdlcjogIgorICAgICAgICAgICAgICAgICAgICAgICAgICAiU2VuZGluZyBkZWF0aCBub3RpZmljYXRpb24gKGxpc3RlbmVyIEAgJXAsICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgImZyYW1lSW5kZXggPSAlbGx1LCBidWZmZXJJbmRleCA9ICV6dSkiLAorICAgICAgICAgICAgICAgICAgICAgICAgICBsaXN0ZW5lci5nZXQoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGljX2Nhc3Q8bG9uZyBsb25nIHVuc2lnbmVkPihmcmFtZUluZGV4KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgYnVmZmVySW5kZXgpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgLy8gQ2xlYXIgZGVhdGhOb3RpZmljYXRpb25zIGZvciB0aGlzIGxpc3RlbmVyIGFuZCBzZXQgcmV0cnkgdG8gdHJ1ZQorICAgICAgICAgICAgLy8gc28gcHJvY2Vzc05vdGlmaWNhdGlvbnMgd2lsbCBiZSBjYWxsZWQgYWdhaW4uIFRoaXMgd2lsbAorICAgICAgICAgICAgLy8gZ3VhcmFudGVlIHRoYXQgYSBsaXN0ZW5lciB3aXRoIG5vIHBlbmRpbmcgbm90aWZpY2F0aW9ucyB3aWxsCisgICAgICAgICAgICAvLyBldmVudHVhbGx5IGJlIHJlbW92ZWQgZnJvbSBtRGVhdGhOb3RpZmljYXRpb25zIGFmdGVyCisgICAgICAgICAgICAvLyBrTm90aWZpY2F0aW9uUGVyaW9kTnMgbmFub3NlY29uZHMgaGFzIHBhc3NlZC4KKyAgICAgICAgICAgIHJldHJ5ID0gdHJ1ZTsKKyAgICAgICAgICAgIGRlYXRoTm90aWZpY2F0aW9ucy5pbmRpY2VzLmNsZWFyKCk7CisgICAgICAgICAgICBkZWF0aE5vdGlmaWNhdGlvbnMuY291bnQgPSAwOworICAgICAgICAgICAgZGVhdGhOb3RpZmljYXRpb25zLmxhc3RTZW50TnMgPSB0aW1lTm93TnM7CisgICAgICAgICAgICArK2l0OworICAgICAgICB9CisgICAgfQorCisgICAgLy8gQ2FsbCBvbkZyYW1lc1JlbmRlcmVkIG91dHNpZGUgdGhlIGxvY2sgdG8gYXZvaWQgZGVhZGxvY2suCisgICAgZm9yIChjb25zdCBOb3RpZmljYXRpb24mIG5vdGlmaWNhdGlvbiA6IG5vdGlmaWNhdGlvbnMpIHsKKyAgICAgICAgaWYgKCFub3RpZmljYXRpb24ubGlzdGVuZXItPm9uRnJhbWVzUmVuZGVyZWQoCisgICAgICAgICAgICAgICAgbm90aWZpY2F0aW9uLnJlbmRlcmVkRnJhbWVzKS5pc09rKCkpIHsKKyAgICAgICAgICAgIC8vIFRoaXMgbWF5IHRyaWdnZXIgaWYgdGhlIGNsaWVudCBoYXMgZGllZC4KKyAgICAgICAgICAgIEFMT0dEKCJJbnB1dEJ1ZmZlck1hbmFnZXI6IG9uRnJhbWVzUmVuZGVyZWQgdHJhbnNhY3Rpb24gZmFpbGVkICIKKyAgICAgICAgICAgICAgICAgICIobGlzdGVuZXIgQCAlcCkiLAorICAgICAgICAgICAgICAgICAgbm90aWZpY2F0aW9uLmxpc3RlbmVyLmdldCgpKTsKKyAgICAgICAgfQorICAgIH0KKyAgICBpZiAocmV0cnkpIHsKKyAgICAgICAgQUxPR1YoIklucHV0QnVmZmVyTWFuYWdlcjogUGVuZGluZyBkZWF0aCBub3RpZmljYXRpb25zIgorICAgICAgICAgICAgICAid2lsbCBiZSBzZW50IGluICVsbGRucy4iLAorICAgICAgICAgICAgICBzdGF0aWNfY2FzdDxsb25nIGxvbmc+KCp0aW1lVG9SZXRyeU5zKSk7CisgICAgfQorICAgIHJldHVybiByZXRyeTsKK30KKwordm9pZCBJbnB1dEJ1ZmZlck1hbmFnZXI6Om1haW4oKSB7CisgICAgQUxPR1YoIklucHV0QnVmZmVyTWFuYWdlcjogU3RhcnRpbmcgbWFpbiB0aHJlYWQiKTsKKyAgICBuc2Vjc190IHRpbWVUb1JldHJ5TnM7CisgICAgd2hpbGUgKHRydWUpIHsKKyAgICAgICAgc3RkOjp1bmlxdWVfbG9jazxzdGQ6Om11dGV4PiBsb2NrKG1NdXRleCk7CisgICAgICAgIHdoaWxlIChtRGVhdGhOb3RpZmljYXRpb25zLmVtcHR5KCkpIHsKKyAgICAgICAgICAgIEFMT0dWKCJJbnB1dEJ1ZmZlck1hbmFnZXI6IFdhaXRpbmcgZm9yIGJ1ZmZlciBkZWF0aHMiKTsKKyAgICAgICAgICAgIG1PbkJ1ZmZlckRlc3Ryb3llZC53YWl0KGxvY2spOworICAgICAgICB9CisgICAgICAgIGxvY2sudW5sb2NrKCk7CisgICAgICAgIEFMT0dWKCJJbnB1dEJ1ZmZlck1hbmFnZXI6IFNlbmRpbmcgYnVmZmVyIGRlYXRoIG5vdGlmaWNhdGlvbnMiKTsKKyAgICAgICAgd2hpbGUgKHByb2Nlc3NOb3RpZmljYXRpb25zKCZ0aW1lVG9SZXRyeU5zKSkgeworICAgICAgICAgICAgc3RkOjp0aGlzX3RocmVhZDo6c2xlZXBfZm9yKAorICAgICAgICAgICAgICAgICAgICBzdGQ6OmNocm9ubzo6bmFub3NlY29uZHModGltZVRvUmV0cnlOcykpOworICAgICAgICAgICAgQUxPR1YoIklucHV0QnVmZmVyTWFuYWdlcjogU2VuZGluZyBwZW5kaW5nIGRlYXRoIG5vdGlmaWNhdGlvbnMiKTsKKyAgICAgICAgfQorICAgICAgICBBTE9HVigiSW5wdXRCdWZmZXJNYW5hZ2VyOiBObyBwZW5kaW5nIGRlYXRoIG5vdGlmaWNhdGlvbnMiKTsKKyAgICB9Cit9CisKK0lucHV0QnVmZmVyTWFuYWdlcjo6SW5wdXRCdWZmZXJNYW5hZ2VyKCkKKyAgICAgIDogbU1haW5UaHJlYWQoJklucHV0QnVmZmVyTWFuYWdlcjo6bWFpbiwgdGhpcykgeworfQorCitJbnB1dEJ1ZmZlck1hbmFnZXImIElucHV0QnVmZmVyTWFuYWdlcjo6Z2V0SW5zdGFuY2UoKSB7CisgICAgc3RhdGljIElucHV0QnVmZmVyTWFuYWdlciBpbnN0YW5jZXt9OworICAgIHJldHVybiBpbnN0YW5jZTsKK30KKworfSAgLy8gbmFtZXNwYWNlIHV0aWxzCit9ICAvLyBuYW1lc3BhY2UgVjFfMAorfSAgLy8gbmFtZXNwYWNlIGMyCit9ICAvLyBuYW1lc3BhY2UgbWVkaWEKK30gIC8vIG5hbWVzcGFjZSBoYXJkd2FyZQorfSAgLy8gbmFtZXNwYWNlIGFuZHJvaWQKKwpkaWZmIC0tZ2l0IGEvbWVkaWEvY29kZWMyL2hpZGwvMS4wL3V0aWxzL0NvbXBvbmVudFN0b3JlLmNwcCBiL21lZGlhL2NvZGVjMi9oaWRsLzEuMC91dGlscy9Db21wb25lbnRTdG9yZS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWQxYmJlMAotLS0gL2Rldi9udWxsCisrKyBiL21lZGlhL2NvZGVjMi9oaWRsLzEuMC91dGlscy9Db21wb25lbnRTdG9yZS5jcHAKQEAgLTAsMCArMSw0MzcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTggVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworCisvLyNkZWZpbmUgTE9HX05ERUJVRyAwCisjZGVmaW5lIExPR19UQUcgIkNvZGVjMi1Db21wb25lbnRTdG9yZSIKKyNpbmNsdWRlIDxsb2cvbG9nLmg+CisKKyNpbmNsdWRlIDxjb2RlYzIvaGlkbC8xLjAvQ29tcG9uZW50U3RvcmUuaD4KKyNpbmNsdWRlIDxjb2RlYzIvaGlkbC8xLjAvSW5wdXRTdXJmYWNlLmg+CisjaW5jbHVkZSA8Y29kZWMyL2hpZGwvMS4wL0NvbXBvbmVudC5oPgorI2luY2x1ZGUgPGNvZGVjMi9oaWRsLzEuMC9Db25maWd1cmFibGVDMkludGYuaD4KKyNpbmNsdWRlIDxjb2RlYzIvaGlkbC8xLjAvdHlwZXMuaD4KKworI2luY2x1ZGUgPG1lZGlhL3N0YWdlZnJpZ2h0L2JxaGVscGVyL1dHcmFwaGljQnVmZmVyUHJvZHVjZXIuaD4KKyNpbmNsdWRlIDxtZWRpYS9zdGFnZWZyaWdodC9icWhlbHBlci9HcmFwaGljQnVmZmVyU291cmNlLmg+CisKKyNpbmNsdWRlIDxDMlBsYXRmb3JtU3VwcG9ydC5oPgorI2luY2x1ZGUgPHV0aWwvQzJJbnRlcmZhY2VIZWxwZXIuaD4KKworI2luY2x1ZGUgPHV0aWxzL0Vycm9ycy5oPgorCisjaW5jbHVkZSA8YW5kcm9pZC1iYXNlL2ZpbGUuaD4KKworI2lmZGVmIExPRworI3VuZGVmIExPRworI2VuZGlmCisKKyNpZmRlZiBQTE9HCisjdW5kZWYgUExPRworI2VuZGlmCisKKyNpbmNsdWRlIDxhbmRyb2lkLWJhc2UvbG9nZ2luZy5oPgorCisjaW5jbHVkZSA8b3N0cmVhbT4KKyNpbmNsdWRlIDxzc3RyZWFtPgorI2luY2x1ZGUgPGlvbWFuaXA+CisKK25hbWVzcGFjZSBhbmRyb2lkIHsKK25hbWVzcGFjZSBoYXJkd2FyZSB7CituYW1lc3BhY2UgbWVkaWEgeworbmFtZXNwYWNlIGMyIHsKK25hbWVzcGFjZSBWMV8wIHsKK25hbWVzcGFjZSB1dGlscyB7CisKK3VzaW5nIG5hbWVzcGFjZSA6OmFuZHJvaWQ7Cit1c2luZyA6OmFuZHJvaWQ6OkdyYXBoaWNCdWZmZXJTb3VyY2U7Cit1c2luZyBuYW1lc3BhY2UgOjphbmRyb2lkOjpoYXJkd2FyZTo6bWVkaWE6OmJ1ZmZlcnBvb2w6OlYxXzA6OmltcGxlbWVudGF0aW9uOworCituYW1lc3BhY2UgLyogdW5uYW1lZCAqLyB7CisKK3N0cnVjdCBTdG9yZUludGYgOiBwdWJsaWMgQ29uZmlndXJhYmxlQzJJbnRmIHsKKyAgICBTdG9yZUludGYoY29uc3Qgc3RkOjpzaGFyZWRfcHRyPEMyQ29tcG9uZW50U3RvcmU+JiBzdG9yZSkgOgorICAgICAgICBDb25maWd1cmFibGVDMkludGYoc3RvcmUgPyBzdG9yZS0+Z2V0TmFtZSgpIDogIiIpLAorICAgICAgICBtU3RvcmUoc3RvcmUpIHsKKyAgICB9CisKKyAgICBjMl9zdGF0dXNfdCBjb25maWcoCisgICAgICAgICAgICBjb25zdCBzdGQ6OnZlY3RvcjxDMlBhcmFtKj4gJnBhcmFtcywKKyAgICAgICAgICAgIGMyX2Jsb2NraW5nX3QgbWF5QmxvY2ssCisgICAgICAgICAgICBzdGQ6OnZlY3RvcjxzdGQ6OnVuaXF1ZV9wdHI8QzJTZXR0aW5nUmVzdWx0Pj4gKmNvbnN0IGZhaWx1cmVzCisgICAgICAgICAgICApIG92ZXJyaWRlIHsKKyAgICAgICAgLy8gQXNzdW1lIGFsbCBwYXJhbXMgYXJlIGJsb2NraW5nCisgICAgICAgIC8vIFRPRE86IEZpbHRlciBmb3Igc3VwcG9ydGVkIHBhcmFtcworICAgICAgICBpZiAobWF5QmxvY2sgPT0gQzJfRE9OVF9CTE9DSyAmJiBwYXJhbXMuc2l6ZSgpICE9IDApIHsKKyAgICAgICAgICAgIHJldHVybiBDMl9CTE9DS0lORzsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gbVN0b3JlLT5jb25maWdfc20ocGFyYW1zLCBmYWlsdXJlcyk7CisgICAgfQorCisgICAgYzJfc3RhdHVzX3QgcXVlcnkoCisgICAgICAgICAgICBjb25zdCBzdGQ6OnZlY3RvcjxDMlBhcmFtOjpJbmRleD4gJmluZGljZXMsCisgICAgICAgICAgICBjMl9ibG9ja2luZ190IG1heUJsb2NrLAorICAgICAgICAgICAgc3RkOjp2ZWN0b3I8c3RkOjp1bmlxdWVfcHRyPEMyUGFyYW0+PiAqY29uc3QgcGFyYW1zKSBjb25zdCBvdmVycmlkZSB7CisgICAgICAgIC8vIEFzc3VtZSBhbGwgcGFyYW1zIGFyZSBibG9ja2luZworICAgICAgICAvLyBUT0RPOiBGaWx0ZXIgZm9yIHN1cHBvcnRlZCBwYXJhbXMKKyAgICAgICAgaWYgKG1heUJsb2NrID09IEMyX0RPTlRfQkxPQ0sgJiYgaW5kaWNlcy5zaXplKCkgIT0gMCkgeworICAgICAgICAgICAgcmV0dXJuIEMyX0JMT0NLSU5HOworICAgICAgICB9CisgICAgICAgIHJldHVybiBtU3RvcmUtPnF1ZXJ5X3NtKHt9LCBpbmRpY2VzLCBwYXJhbXMpOworICAgIH0KKworICAgIGMyX3N0YXR1c190IHF1ZXJ5U3VwcG9ydGVkUGFyYW1zKAorICAgICAgICAgICAgc3RkOjp2ZWN0b3I8c3RkOjpzaGFyZWRfcHRyPEMyUGFyYW1EZXNjcmlwdG9yPj4gKmNvbnN0IHBhcmFtcworICAgICAgICAgICAgKSBjb25zdCBvdmVycmlkZSB7CisgICAgICAgIHJldHVybiBtU3RvcmUtPnF1ZXJ5U3VwcG9ydGVkUGFyYW1zX25iKHBhcmFtcyk7CisgICAgfQorCisgICAgYzJfc3RhdHVzX3QgcXVlcnlTdXBwb3J0ZWRWYWx1ZXMoCisgICAgICAgICAgICBzdGQ6OnZlY3RvcjxDMkZpZWxkU3VwcG9ydGVkVmFsdWVzUXVlcnk+ICZmaWVsZHMsCisgICAgICAgICAgICBjMl9ibG9ja2luZ190IG1heUJsb2NrKSBjb25zdCBvdmVycmlkZSB7CisgICAgICAgIC8vIEFzc3VtZSBhbGwgcGFyYW1zIGFyZSBibG9ja2luZworICAgICAgICAvLyBUT0RPOiBGaWx0ZXIgZm9yIHN1cHBvcnRlZCBwYXJhbXMKKyAgICAgICAgaWYgKG1heUJsb2NrID09IEMyX0RPTlRfQkxPQ0sgJiYgZmllbGRzLnNpemUoKSAhPSAwKSB7CisgICAgICAgICAgICByZXR1cm4gQzJfQkxPQ0tJTkc7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIG1TdG9yZS0+cXVlcnlTdXBwb3J0ZWRWYWx1ZXNfc20oZmllbGRzKTsKKyAgICB9CisKK3Byb3RlY3RlZDoKKyAgICBzdGQ6OnNoYXJlZF9wdHI8QzJDb21wb25lbnRTdG9yZT4gbVN0b3JlOworfTsKKworfSAvLyB1bm5hbWVkIG5hbWVzcGFjZQorCitDb21wb25lbnRTdG9yZTo6Q29tcG9uZW50U3RvcmUoY29uc3Qgc3RkOjpzaGFyZWRfcHRyPEMyQ29tcG9uZW50U3RvcmU+JiBzdG9yZSkgOgorICAgIENvbmZpZ3VyYWJsZShuZXcgQ2FjaGVkQ29uZmlndXJhYmxlKHN0ZDo6bWFrZV91bmlxdWU8U3RvcmVJbnRmPihzdG9yZSkpKSwKKyAgICBtU3RvcmUoc3RvcmUpIHsKKworICAgIHN0ZDo6c2hhcmVkX3B0cjxDMkNvbXBvbmVudFN0b3JlPiBwbGF0Zm9ybVN0b3JlID0gYW5kcm9pZDo6R2V0Q29kZWMyUGxhdGZvcm1Db21wb25lbnRTdG9yZSgpOworICAgIFNldFByZWZlcnJlZENvZGVjMkNvbXBvbmVudFN0b3JlKHN0b3JlKTsKKworICAgIC8vIFJldHJpZXZlIHN0cnVjdCBkZXNjcmlwdG9ycworICAgIG1QYXJhbVJlZmxlY3RvciA9IG1TdG9yZS0+Z2V0UGFyYW1SZWZsZWN0b3IoKTsKKworICAgIC8vIFJldHJpZXZlIHN1cHBvcnRlZCBwYXJhbWV0ZXJzIGZyb20gc3RvcmUKKyAgICBtSW5pdCA9IGluaXQodGhpcyk7Cit9CisKK2MyX3N0YXR1c190IENvbXBvbmVudFN0b3JlOjp2YWxpZGF0ZVN1cHBvcnRlZFBhcmFtcygKKyAgICAgICAgY29uc3Qgc3RkOjp2ZWN0b3I8c3RkOjpzaGFyZWRfcHRyPEMyUGFyYW1EZXNjcmlwdG9yPj4mIHBhcmFtcykgeworICAgIGMyX3N0YXR1c190IHJlcyA9IEMyX09LOworCisgICAgZm9yIChjb25zdCBzdGQ6OnNoYXJlZF9wdHI8QzJQYXJhbURlc2NyaXB0b3I+ICZkZXNjIDogcGFyYW1zKSB7CisgICAgICAgIGlmICghZGVzYykgeworICAgICAgICAgICAgLy8gQWxsIGRlc2NyaXB0b3JzIHNob3VsZCBiZSB2YWxpZAorICAgICAgICAgICAgcmVzID0gcmVzID8gcmVzIDogQzJfQkFEX1ZBTFVFOworICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIH0KKyAgICAgICAgQzJQYXJhbTo6Q29yZUluZGV4IGNvcmVJbmRleCA9IGRlc2MtPmluZGV4KCkuY29yZUluZGV4KCk7CisgICAgICAgIHN0ZDo6bG9ja19ndWFyZDxzdGQ6Om11dGV4PiBsb2NrKG1TdHJ1Y3REZXNjcmlwdG9yc011dGV4KTsKKyAgICAgICAgYXV0byBpdCA9IG1TdHJ1Y3REZXNjcmlwdG9ycy5maW5kKGNvcmVJbmRleCk7CisgICAgICAgIGlmIChpdCA9PSBtU3RydWN0RGVzY3JpcHRvcnMuZW5kKCkpIHsKKyAgICAgICAgICAgIHN0ZDo6c2hhcmVkX3B0cjxDMlN0cnVjdERlc2NyaXB0b3I+IHN0cnVjdERlc2MgPQorICAgICAgICAgICAgICAgICAgICBtUGFyYW1SZWZsZWN0b3ItPmRlc2NyaWJlKGNvcmVJbmRleCk7CisgICAgICAgICAgICBpZiAoIXN0cnVjdERlc2MpIHsKKyAgICAgICAgICAgICAgICAvLyBBbGwgc3VwcG9ydGVkIHBhcmFtcyBtdXN0IGJlIGRlc2NyaWJlZAorICAgICAgICAgICAgICAgIHJlcyA9IEMyX0JBRF9JTkRFWDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIG1TdHJ1Y3REZXNjcmlwdG9ycy5pbnNlcnQoeyBjb3JlSW5kZXgsIHN0cnVjdERlc2MgfSk7CisgICAgICAgIH0KKyAgICB9CisgICAgcmV0dXJuIHJlczsKK30KKworLy8gTWV0aG9kcyBmcm9tIDo6YW5kcm9pZDo6aGFyZHdhcmU6Om1lZGlhOjpjMjo6VjFfMDo6SUNvbXBvbmVudFN0b3JlCitSZXR1cm48dm9pZD4gQ29tcG9uZW50U3RvcmU6OmNyZWF0ZUNvbXBvbmVudCgKKyAgICAgICAgY29uc3QgaGlkbF9zdHJpbmcmIG5hbWUsCisgICAgICAgIGNvbnN0IHNwPElDb21wb25lbnRMaXN0ZW5lcj4mIGxpc3RlbmVyLAorICAgICAgICBjb25zdCBzcDxJQ2xpZW50TWFuYWdlcj4mIHBvb2wsCisgICAgICAgIGNyZWF0ZUNvbXBvbmVudF9jYiBfaGlkbF9jYikgeworCisgICAgc3A8Q29tcG9uZW50PiBjb21wb25lbnQ7CisgICAgc3RkOjpzaGFyZWRfcHRyPEMyQ29tcG9uZW50PiBjMmNvbXBvbmVudDsKKyAgICBTdGF0dXMgc3RhdHVzID0gc3RhdGljX2Nhc3Q8U3RhdHVzPigKKyAgICAgICAgICAgIG1TdG9yZS0+Y3JlYXRlQ29tcG9uZW50KG5hbWUsICZjMmNvbXBvbmVudCkpOworCisgICAgaWYgKHN0YXR1cyA9PSBTdGF0dXM6Ok9LKSB7CisgICAgICAgIG9uSW50ZXJmYWNlTG9hZGVkKGMyY29tcG9uZW50LT5pbnRmKCkpOworICAgICAgICBjb21wb25lbnQgPSBuZXcgQ29tcG9uZW50KGMyY29tcG9uZW50LCBsaXN0ZW5lciwgdGhpcywgcG9vbCk7CisgICAgICAgIGlmICghY29tcG9uZW50KSB7CisgICAgICAgICAgICBzdGF0dXMgPSBTdGF0dXM6OkNPUlJVUFRFRDsKKyAgICAgICAgfSBlbHNlIGlmIChjb21wb25lbnQtPnN0YXR1cygpICE9IEMyX09LKSB7CisgICAgICAgICAgICBzdGF0dXMgPSBzdGF0aWNfY2FzdDxTdGF0dXM+KGNvbXBvbmVudC0+c3RhdHVzKCkpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgY29tcG9uZW50LT5pbml0TGlzdGVuZXIoY29tcG9uZW50KTsKKyAgICAgICAgICAgIGlmIChjb21wb25lbnQtPnN0YXR1cygpICE9IEMyX09LKSB7CisgICAgICAgICAgICAgICAgc3RhdHVzID0gc3RhdGljX2Nhc3Q8U3RhdHVzPihjb21wb25lbnQtPnN0YXR1cygpKTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgc3RkOjpsb2NrX2d1YXJkPHN0ZDo6bXV0ZXg+IGxvY2sobUNvbXBvbmVudFJvc3Rlck11dGV4KTsKKyAgICAgICAgICAgICAgICBjb21wb25lbnQtPnNldExvY2FsSWQoCisgICAgICAgICAgICAgICAgICAgICAgICBtQ29tcG9uZW50Um9zdGVyLmVtcGxhY2UoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ29tcG9uZW50OjpJbnRlcmZhY2VLZXkoY29tcG9uZW50KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjMmNvbXBvbmVudCkKKyAgICAgICAgICAgICAgICAgICAgICAgIC5maXJzdCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisgICAgX2hpZGxfY2Ioc3RhdHVzLCBjb21wb25lbnQpOworICAgIHJldHVybiBWb2lkKCk7Cit9CisKK1JldHVybjx2b2lkPiBDb21wb25lbnRTdG9yZTo6Y3JlYXRlSW50ZXJmYWNlKAorICAgICAgICBjb25zdCBoaWRsX3N0cmluZyYgbmFtZSwKKyAgICAgICAgY3JlYXRlSW50ZXJmYWNlX2NiIF9oaWRsX2NiKSB7CisgICAgc3RkOjpzaGFyZWRfcHRyPEMyQ29tcG9uZW50SW50ZXJmYWNlPiBjMmludGVyZmFjZTsKKyAgICBjMl9zdGF0dXNfdCByZXMgPSBtU3RvcmUtPmNyZWF0ZUludGVyZmFjZShuYW1lLCAmYzJpbnRlcmZhY2UpOworICAgIHNwPElDb21wb25lbnRJbnRlcmZhY2U+IGludGVyZmFjZTsKKyAgICBpZiAocmVzID09IEMyX09LKSB7CisgICAgICAgIG9uSW50ZXJmYWNlTG9hZGVkKGMyaW50ZXJmYWNlKTsKKyAgICAgICAgaW50ZXJmYWNlID0gbmV3IENvbXBvbmVudEludGVyZmFjZShjMmludGVyZmFjZSwgdGhpcyk7CisgICAgfQorICAgIF9oaWRsX2NiKChTdGF0dXMpcmVzLCBpbnRlcmZhY2UpOworICAgIHJldHVybiBWb2lkKCk7Cit9CisKK1JldHVybjx2b2lkPiBDb21wb25lbnRTdG9yZTo6bGlzdENvbXBvbmVudHMobGlzdENvbXBvbmVudHNfY2IgX2hpZGxfY2IpIHsKKyAgICBzdGQ6OnZlY3RvcjxzdGQ6OnNoYXJlZF9wdHI8Y29uc3QgQzJDb21wb25lbnQ6OlRyYWl0cz4+IGMydHJhaXRzID0KKyAgICAgICAgICAgIG1TdG9yZS0+bGlzdENvbXBvbmVudHMoKTsKKyAgICBoaWRsX3ZlYzxJQ29tcG9uZW50U3RvcmU6OkNvbXBvbmVudFRyYWl0cz4gdHJhaXRzKGMydHJhaXRzLnNpemUoKSk7CisgICAgc2l6ZV90IGl4ID0gMDsKKyAgICBmb3IgKGNvbnN0IHN0ZDo6c2hhcmVkX3B0cjxjb25zdCBDMkNvbXBvbmVudDo6VHJhaXRzPiAmYzJ0cmFpdCA6IGMydHJhaXRzKSB7CisgICAgICAgIGlmIChjMnRyYWl0KSB7CisgICAgICAgICAgICBvYmpjcHkoJnRyYWl0c1tpeCsrXSwgKmMydHJhaXQpOworICAgICAgICB9CisgICAgfQorICAgIHRyYWl0cy5yZXNpemUoaXgpOworICAgIF9oaWRsX2NiKHRyYWl0cyk7CisgICAgcmV0dXJuIFZvaWQoKTsKK30KKworUmV0dXJuPHNwPElJbnB1dFN1cmZhY2U+PiBDb21wb25lbnRTdG9yZTo6Y3JlYXRlSW5wdXRTdXJmYWNlKCkgeworICAgIHNwPEdyYXBoaWNCdWZmZXJTb3VyY2U+IHNvdXJjZSA9IG5ldyBHcmFwaGljQnVmZmVyU291cmNlKCk7CisgICAgaWYgKHNvdXJjZS0+aW5pdENoZWNrKCkgIT0gT0spIHsKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgfQorICAgIHR5cGVkZWYgOjphbmRyb2lkOjpoYXJkd2FyZTo6Z3JhcGhpY3M6OmJ1ZmZlcnF1ZXVlOjpWMV8wOjoKKyAgICAgICAgICAgIElHcmFwaGljQnVmZmVyUHJvZHVjZXIgSEdicDsKKyAgICB0eXBlZGVmIDo6YW5kcm9pZDo6VFdHcmFwaGljQnVmZmVyUHJvZHVjZXI8SEdicD4gQjJIR2JwOworICAgIHJldHVybiBuZXcgSW5wdXRTdXJmYWNlKAorICAgICAgICAgICAgdGhpcywKKyAgICAgICAgICAgIHN0ZDo6bWFrZV9zaGFyZWQ8QzJSZWZsZWN0b3JIZWxwZXI+KCksCisgICAgICAgICAgICBuZXcgQjJIR2JwKHNvdXJjZS0+Z2V0SUdyYXBoaWNCdWZmZXJQcm9kdWNlcigpKSwKKyAgICAgICAgICAgIHNvdXJjZSk7Cit9CisKK3ZvaWQgQ29tcG9uZW50U3RvcmU6Om9uSW50ZXJmYWNlTG9hZGVkKGNvbnN0IHN0ZDo6c2hhcmVkX3B0cjxDMkNvbXBvbmVudEludGVyZmFjZT4gJmludGYpIHsKKyAgICAvLyBpbnZhbGlkYXRlIHVuc3VwcG9ydGVkIHN0cnVjdCBkZXNjcmlwdG9ycyBpZiBhIG5ldyBpbnRlcmZhY2UgaXMgbG9hZGVkIGFzIGl0IG1heSBoYXZlCisgICAgLy8gZXhwb3NlZCBuZXcgZGVzY3JpcHRvcnMKKyAgICBzdGQ6OmxvY2tfZ3VhcmQ8c3RkOjptdXRleD4gbG9jayhtU3RydWN0RGVzY3JpcHRvcnNNdXRleCk7CisgICAgaWYgKCFtTG9hZGVkSW50ZXJmYWNlcy5jb3VudChpbnRmLT5nZXROYW1lKCkpKSB7CisgICAgICAgIG1VbnN1cHBvcnRlZFN0cnVjdERlc2NyaXB0b3JzLmNsZWFyKCk7CisgICAgICAgIG1Mb2FkZWRJbnRlcmZhY2VzLmVtcGxhY2UoaW50Zi0+Z2V0TmFtZSgpKTsKKyAgICB9Cit9CisKK1JldHVybjx2b2lkPiBDb21wb25lbnRTdG9yZTo6Z2V0U3RydWN0RGVzY3JpcHRvcnMoCisgICAgICAgIGNvbnN0IGhpZGxfdmVjPHVpbnQzMl90PiYgaW5kaWNlcywKKyAgICAgICAgZ2V0U3RydWN0RGVzY3JpcHRvcnNfY2IgX2hpZGxfY2IpIHsKKyAgICBoaWRsX3ZlYzxTdHJ1Y3REZXNjcmlwdG9yPiBkZXNjcmlwdG9ycyhpbmRpY2VzLnNpemUoKSk7CisgICAgc2l6ZV90IGRzdEl4ID0gMDsKKyAgICBTdGF0dXMgcmVzID0gU3RhdHVzOjpPSzsKKyAgICBmb3IgKHNpemVfdCBzcmNJeCA9IDA7IHNyY0l4IDwgaW5kaWNlcy5zaXplKCk7ICsrc3JjSXgpIHsKKyAgICAgICAgc3RkOjpsb2NrX2d1YXJkPHN0ZDo6bXV0ZXg+IGxvY2sobVN0cnVjdERlc2NyaXB0b3JzTXV0ZXgpOworICAgICAgICBjb25zdCBDMlBhcmFtOjpDb3JlSW5kZXggY29yZUluZGV4ID0gQzJQYXJhbTo6Q29yZUluZGV4KGluZGljZXNbc3JjSXhdKS5jb3JlSW5kZXgoKTsKKyAgICAgICAgY29uc3QgYXV0byBpdGVtID0gbVN0cnVjdERlc2NyaXB0b3JzLmZpbmQoY29yZUluZGV4KTsKKyAgICAgICAgaWYgKGl0ZW0gPT0gbVN0cnVjdERlc2NyaXB0b3JzLmVuZCgpKSB7CisgICAgICAgICAgICAvLyBub3QgaW4gdGhlIGNhY2hlLCBhbmQgbm90IGtub3duIHRvIGJlIHVuc3VwcG9ydGVkLCBxdWVyeSBsb2NhbCByZWZsZWN0b3IKKyAgICAgICAgICAgIGlmICghbVVuc3VwcG9ydGVkU3RydWN0RGVzY3JpcHRvcnMuY291bnQoY29yZUluZGV4KSkgeworICAgICAgICAgICAgICAgIHN0ZDo6c2hhcmVkX3B0cjxDMlN0cnVjdERlc2NyaXB0b3I+IHN0cnVjdERlc2MgPQorICAgICAgICAgICAgICAgICAgICBtUGFyYW1SZWZsZWN0b3ItPmRlc2NyaWJlKGNvcmVJbmRleCk7CisgICAgICAgICAgICAgICAgaWYgKCFzdHJ1Y3REZXNjKSB7CisgICAgICAgICAgICAgICAgICAgIG1VbnN1cHBvcnRlZFN0cnVjdERlc2NyaXB0b3JzLmVtcGxhY2UoY29yZUluZGV4KTsKKyAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICBtU3RydWN0RGVzY3JpcHRvcnMuaW5zZXJ0KHsgY29yZUluZGV4LCBzdHJ1Y3REZXNjIH0pOworICAgICAgICAgICAgICAgICAgICBvYmpjcHkoJmRlc2NyaXB0b3JzW2RzdEl4KytdLCAqc3RydWN0RGVzYyk7CisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJlcyA9IFN0YXR1czo6Tk9UX0ZPVU5EOworICAgICAgICB9IGVsc2UgaWYgKGl0ZW0tPnNlY29uZCkgeworICAgICAgICAgICAgb2JqY3B5KCZkZXNjcmlwdG9yc1tkc3RJeCsrXSwgKml0ZW0tPnNlY29uZCk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICByZXMgPSBTdGF0dXM6Ok5PX01FTU9SWTsKKyAgICAgICAgfQorICAgIH0KKyAgICBkZXNjcmlwdG9ycy5yZXNpemUoZHN0SXgpOworICAgIF9oaWRsX2NiKHJlcywgZGVzY3JpcHRvcnMpOworICAgIHJldHVybiBWb2lkKCk7Cit9CisKK1JldHVybjxzcDxJQ2xpZW50TWFuYWdlcj4+IENvbXBvbmVudFN0b3JlOjpnZXRQb29sQ2xpZW50TWFuYWdlcigpIHsKKyAgICByZXR1cm4gQ2xpZW50TWFuYWdlcjo6Z2V0SW5zdGFuY2UoKTsKK30KKworUmV0dXJuPFN0YXR1cz4gQ29tcG9uZW50U3RvcmU6OmNvcHlCdWZmZXIoY29uc3QgQnVmZmVyJiBzcmMsIGNvbnN0IEJ1ZmZlciYgZHN0KSB7CisgICAgLy8gVE9ETyBpbXBsZW1lbnQKKyAgICAodm9pZClzcmM7CisgICAgKHZvaWQpZHN0OworICAgIHJldHVybiBTdGF0dXM6Ok9NSVRURUQ7Cit9CisKK3ZvaWQgQ29tcG9uZW50U3RvcmU6OnJlcG9ydENvbXBvbmVudERlYXRoKAorICAgICAgICBjb25zdCBDb21wb25lbnQ6OkxvY2FsSWQmIGNvbXBvbmVudExvY2FsSWQpIHsKKyAgICBzdGQ6OmxvY2tfZ3VhcmQ8c3RkOjptdXRleD4gbG9jayhtQ29tcG9uZW50Um9zdGVyTXV0ZXgpOworICAgIG1Db21wb25lbnRSb3N0ZXIuZXJhc2UoY29tcG9uZW50TG9jYWxJZCk7Cit9CisKK3N0ZDo6c2hhcmVkX3B0cjxDMkNvbXBvbmVudD4gQ29tcG9uZW50U3RvcmU6OmZpbmRDMkNvbXBvbmVudCgKKyAgICAgICAgY29uc3Qgc3A8SUNvbXBvbmVudD4mIGNvbXBvbmVudCkgY29uc3QgeworICAgIHN0ZDo6bG9ja19ndWFyZDxzdGQ6Om11dGV4PiBsb2NrKG1Db21wb25lbnRSb3N0ZXJNdXRleCk7CisgICAgQ29tcG9uZW50OjpMb2NhbElkIGl0ID0gbUNvbXBvbmVudFJvc3Rlci5maW5kKAorICAgICAgICAgICAgQ29tcG9uZW50OjpJbnRlcmZhY2VLZXkoY29tcG9uZW50KSk7CisgICAgaWYgKGl0ID09IG1Db21wb25lbnRSb3N0ZXIuZW5kKCkpIHsKKyAgICAgICAgcmV0dXJuIHN0ZDo6c2hhcmVkX3B0cjxDMkNvbXBvbmVudD4oKTsKKyAgICB9CisgICAgcmV0dXJuIGl0LT5zZWNvbmQubG9jaygpOworfQorCisvLyBEZWJ1ZyBkdW1wCisKK25hbWVzcGFjZSAvKiB1bm5hbWVkICovIHsKKworLy8gRHVtcCBjb21wb25lbnQgdHJhaXRzCitzdGQ6Om9zdHJlYW0mIGR1bXAoCisgICAgICAgIHN0ZDo6b3N0cmVhbSYgb3V0LAorICAgICAgICBjb25zdCBzdGQ6OnNoYXJlZF9wdHI8Y29uc3QgQzJDb21wb25lbnQ6OlRyYWl0cz4mIGNvbXApIHsKKworICAgIGNvbnN0ZXhwciBjb25zdCBjaGFyIGluZGVudFtdID0gIiAgICAiOworCisgICAgb3V0IDw8IGluZGVudCA8PCAibmFtZTogIiA8PCBjb21wLT5uYW1lIDw8IHN0ZDo6ZW5kbDsKKyAgICBvdXQgPDwgaW5kZW50IDw8ICJkb21haW46ICIgPDwgY29tcC0+ZG9tYWluIDw8IHN0ZDo6ZW5kbDsKKyAgICBvdXQgPDwgaW5kZW50IDw8ICJraW5kOiAiIDw8IGNvbXAtPmtpbmQgPDwgc3RkOjplbmRsOworICAgIG91dCA8PCBpbmRlbnQgPDwgInJhbms6ICIgPDwgY29tcC0+cmFuayA8PCBzdGQ6OmVuZGw7CisgICAgb3V0IDw8IGluZGVudCA8PCAibWVkaWFUeXBlOiAiIDw8IGNvbXAtPm1lZGlhVHlwZSA8PCBzdGQ6OmVuZGw7CisgICAgb3V0IDw8IGluZGVudCA8PCAiYWxpYXNlczoiOworICAgIGZvciAoY29uc3QgYXV0byYgYWxpYXMgOiBjb21wLT5hbGlhc2VzKSB7CisgICAgICAgIG91dCA8PCAnICcgPDwgYWxpYXM7CisgICAgfQorICAgIG91dCA8PCBzdGQ6OmVuZGw7CisKKyAgICByZXR1cm4gb3V0OworfQorCisvLyBEdW1wIGNvbXBvbmVudAorc3RkOjpvc3RyZWFtJiBkdW1wKAorICAgICAgICBzdGQ6Om9zdHJlYW0mIG91dCwKKyAgICAgICAgY29uc3Qgc3RkOjpzaGFyZWRfcHRyPEMyQ29tcG9uZW50PiYgY29tcCkgeworCisgICAgY29uc3RleHByIGNvbnN0IGNoYXIgaW5kZW50W10gPSAiICAgICI7CisKKyAgICBzdGQ6OnNoYXJlZF9wdHI8QzJDb21wb25lbnRJbnRlcmZhY2U+IGludGYgPSBjb21wLT5pbnRmKCk7CisgICAgaWYgKCFpbnRmKSB7CisgICAgICAgIG91dCA8PCBpbmRlbnQgPDwgIlVua25vd24gLS0gbnVsbCBpbnRlcmZhY2UiIDw8IHN0ZDo6ZW5kbDsKKyAgICAgICAgcmV0dXJuIG91dDsKKyAgICB9CisgICAgb3V0IDw8IGluZGVudCA8PCAibmFtZTogIiA8PCBpbnRmLT5nZXROYW1lKCkgPDwgc3RkOjplbmRsOworICAgIG91dCA8PCBpbmRlbnQgPDwgImlkOiAiIDw8IGludGYtPmdldElkKCkgPDwgc3RkOjplbmRsOworICAgIHJldHVybiBvdXQ7Cit9CisKK30gLy8gdW5uYW1lZCBuYW1lc3BhY2UKKworUmV0dXJuPHZvaWQ+IENvbXBvbmVudFN0b3JlOjpkZWJ1ZygKKyAgICAgICAgY29uc3QgaGlkbF9oYW5kbGUmIGhhbmRsZSwKKyAgICAgICAgY29uc3QgaGlkbF92ZWM8aGlkbF9zdHJpbmc+JiAvKiBhcmdzICovKSB7CisgICAgTE9HKElORk8pIDw8ICJkZWJ1ZyAtLSBkdW1waW5nLi4uIjsKKyAgICBjb25zdCBuYXRpdmVfaGFuZGxlX3QgKmggPSBoYW5kbGUuZ2V0TmF0aXZlSGFuZGxlKCk7CisgICAgaWYgKCFoIHx8IGgtPm51bUZkcyAhPSAxKSB7CisgICAgICAgTE9HKEVSUk9SKSA8PCAiZGVidWcgLS0gZHVtcGluZyBmYWlsZWQgLS0gIgorICAgICAgICAgICAgICAgImludmFsaWQgZmlsZSBkZXNjcmlwdG9yIHRvIGR1bXAgdG8iOworICAgICAgIHJldHVybiBWb2lkKCk7CisgICAgfQorICAgIHN0ZDo6b3N0cmluZ3N0cmVhbSBvdXQ7CisKKyAgICB7IC8vIFBvcHVsYXRlICJvdXQiLgorCisgICAgICAgIGNvbnN0ZXhwciBjb25zdCBjaGFyIGluZGVudFtdID0gIiAgIjsKKworICAgICAgICAvLyBTaG93IG5hbWUuCisgICAgICAgIG91dCA8PCAiQmVnaW5uaW5nIG9mIGR1bXAgLS0gQzJDb21wb25lbnRTdG9yZTogIgorICAgICAgICAgICAgICAgIDw8IG1TdG9yZS0+Z2V0TmFtZSgpIDw8IHN0ZDo6ZW5kbCA8PCBzdGQ6OmVuZGw7CisKKyAgICAgICAgLy8gUmV0cmlldmUgdGhlIGxpc3Qgb2Ygc3VwcG9ydGVkIGNvbXBvbmVudHMuCisgICAgICAgIHN0ZDo6dmVjdG9yPHN0ZDo6c2hhcmVkX3B0cjxjb25zdCBDMkNvbXBvbmVudDo6VHJhaXRzPj4gdHJhaXRzTGlzdCA9CisgICAgICAgICAgICAgICAgbVN0b3JlLT5saXN0Q29tcG9uZW50cygpOworCisgICAgICAgIC8vIER1bXAgdGhlIHRyYWl0cyBvZiBzdXBwb3J0ZWQgY29tcG9uZW50cy4KKyAgICAgICAgb3V0IDw8IGluZGVudCA8PCAiU3VwcG9ydGVkIGNvbXBvbmVudHM6IiA8PCBzdGQ6OmVuZGwgPDwgc3RkOjplbmRsOworICAgICAgICBpZiAodHJhaXRzTGlzdC5zaXplKCkgPT0gMCkgeworICAgICAgICAgICAgb3V0IDw8IGluZGVudCA8PCBpbmRlbnQgPDwgIk5PTkUiIDw8IHN0ZDo6ZW5kbCA8PCBzdGQ6OmVuZGw7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBmb3IgKGNvbnN0IGF1dG8mIHRyYWl0cyA6IHRyYWl0c0xpc3QpIHsKKyAgICAgICAgICAgICAgICBkdW1wKG91dCwgdHJhaXRzKSA8PCBzdGQ6OmVuZGw7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICAvLyBSZXRyaWV2ZSB0aGUgbGlzdCBvZiBhY3RpdmUgY29tcG9uZW50cy4KKyAgICAgICAgc3RkOjpsaXN0PHN0ZDo6c2hhcmVkX3B0cjxDMkNvbXBvbmVudD4+IGFjdGl2ZUNvbXBzOworICAgICAgICB7CisgICAgICAgICAgICBzdGQ6OmxvY2tfZ3VhcmQ8c3RkOjptdXRleD4gbG9jayhtQ29tcG9uZW50Um9zdGVyTXV0ZXgpOworICAgICAgICAgICAgYXV0byBpID0gbUNvbXBvbmVudFJvc3Rlci5iZWdpbigpOworICAgICAgICAgICAgd2hpbGUgKGkgIT0gbUNvbXBvbmVudFJvc3Rlci5lbmQoKSkgeworICAgICAgICAgICAgICAgIHN0ZDo6c2hhcmVkX3B0cjxDMkNvbXBvbmVudD4gYzJjb21wID0gaS0+c2Vjb25kLmxvY2soKTsKKyAgICAgICAgICAgICAgICBpZiAoIWMyY29tcCkgeworICAgICAgICAgICAgICAgICAgICBhdXRvIGogPSBpOworICAgICAgICAgICAgICAgICAgICArK2k7CisgICAgICAgICAgICAgICAgICAgIG1Db21wb25lbnRSb3N0ZXIuZXJhc2Uoaik7CisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgKytpOworICAgICAgICAgICAgICAgICAgICBhY3RpdmVDb21wcy5lbXBsYWNlX2JhY2soYzJjb21wKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICAvLyBEdW1wIGFjdGl2ZSBjb21wb25lbnRzLgorICAgICAgICBvdXQgPDwgaW5kZW50IDw8ICJBY3RpdmUgY29tcG9uZW50czoiIDw8IHN0ZDo6ZW5kbCA8PCBzdGQ6OmVuZGw7CisgICAgICAgIGlmIChhY3RpdmVDb21wcy5zaXplKCkgPT0gMCkgeworICAgICAgICAgICAgb3V0IDw8IGluZGVudCA8PCBpbmRlbnQgPDwgIk5PTkUiIDw8IHN0ZDo6ZW5kbCA8PCBzdGQ6OmVuZGw7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBmb3IgKGNvbnN0IHN0ZDo6c2hhcmVkX3B0cjxDMkNvbXBvbmVudD4mIGMyY29tcCA6IGFjdGl2ZUNvbXBzKSB7CisgICAgICAgICAgICAgICAgZHVtcChvdXQsIGMyY29tcCkgPDwgc3RkOjplbmRsOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgb3V0IDw8ICJFbmQgb2YgZHVtcCAtLSBDMkNvbXBvbmVudFN0b3JlOiAiCisgICAgICAgICAgICAgICAgPDwgbVN0b3JlLT5nZXROYW1lKCkgPDwgc3RkOjplbmRsOworICAgIH0KKworICAgIGlmICghYW5kcm9pZDo6YmFzZTo6V3JpdGVTdHJpbmdUb0ZkKG91dC5zdHIoKSwgaC0+ZGF0YVswXSkpIHsKKyAgICAgICAgUExPRyhXQVJOSU5HKSA8PCAiZGVidWcgLS0gZHVtcGluZyBmYWlsZWQgLS0gd3JpdGUoKSI7CisgICAgfSBlbHNlIHsKKyAgICAgICAgTE9HKElORk8pIDw8ICJkZWJ1ZyAtLSBkdW1waW5nIHN1Y2NlZWRlZCI7CisgICAgfQorICAgIHJldHVybiBWb2lkKCk7Cit9CisKKworfSAgLy8gbmFtZXNwYWNlIHV0aWxzCit9ICAvLyBuYW1lc3BhY2UgVjFfMAorfSAgLy8gbmFtZXNwYWNlIGMyCit9ICAvLyBuYW1lc3BhY2UgbWVkaWEKK30gIC8vIG5hbWVzcGFjZSBoYXJkd2FyZQorfSAgLy8gbmFtZXNwYWNlIGFuZHJvaWQKKwpkaWZmIC0tZ2l0IGEvbWVkaWEvY29kZWMyL2hpZGwvMS4wL3V0aWxzL0NvbmZpZ3VyYWJsZS5jcHAgYi9tZWRpYS9jb2RlYzIvaGlkbC8xLjAvdXRpbHMvQ29uZmlndXJhYmxlLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kMDIzYmE4Ci0tLSAvZGV2L251bGwKKysrIGIvbWVkaWEvY29kZWMyL2hpZGwvMS4wL3V0aWxzL0NvbmZpZ3VyYWJsZS5jcHAKQEAgLTAsMCArMSwxNzAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTggVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworCisvLyNkZWZpbmUgTE9HX05ERUJVRyAwCisjZGVmaW5lIExPR19UQUcgIkNvZGVjMi1Db25maWd1cmFibGUiCisjaW5jbHVkZSA8bG9nL2xvZy5oPgorCisjaW5jbHVkZSA8Y29kZWMyL2hpZGwvMS4wL0NvbmZpZ3VyYWJsZS5oPgorI2luY2x1ZGUgPGNvZGVjMi9oaWRsLzEuMC9Db21wb25lbnRTdG9yZS5oPgorI2luY2x1ZGUgPGNvZGVjMi9oaWRsLzEuMC90eXBlcy5oPgorI2luY2x1ZGUgPEMyUGFyYW1JbnRlcm5hbC5oPgorCituYW1lc3BhY2UgYW5kcm9pZCB7CituYW1lc3BhY2UgaGFyZHdhcmUgeworbmFtZXNwYWNlIG1lZGlhIHsKK25hbWVzcGFjZSBjMiB7CituYW1lc3BhY2UgVjFfMCB7CituYW1lc3BhY2UgdXRpbHMgeworCit1c2luZyBuYW1lc3BhY2UgOjphbmRyb2lkOworCitDYWNoZWRDb25maWd1cmFibGU6OkNhY2hlZENvbmZpZ3VyYWJsZSgKKyAgICAgICAgc3RkOjp1bmlxdWVfcHRyPENvbmZpZ3VyYWJsZUMySW50Zj4mJiBpbnRmKSA6CisgICAgbUludGYoc3RkOjptb3ZlKGludGYpKSB7Cit9CisKK2MyX3N0YXR1c190IENhY2hlZENvbmZpZ3VyYWJsZTo6aW5pdChDb21wb25lbnRTdG9yZSogc3RvcmUpIHsKKyAgICAvLyBSZXRyaWV2ZSBzdXBwb3J0ZWQgcGFyYW1ldGVycyBmcm9tIHN0b3JlCisgICAgYzJfc3RhdHVzX3QgaW5pdCA9IG1JbnRmLT5xdWVyeVN1cHBvcnRlZFBhcmFtcygmbVN1cHBvcnRlZFBhcmFtcyk7CisgICAgYzJfc3RhdHVzX3QgdmFsaWRhdGUgPSBzdG9yZS0+dmFsaWRhdGVTdXBwb3J0ZWRQYXJhbXMobVN1cHBvcnRlZFBhcmFtcyk7CisgICAgcmV0dXJuIGluaXQgPT0gQzJfT0sgPyBDMl9PSyA6IHZhbGlkYXRlOworfQorCisvLyBNZXRob2RzIGZyb20gOjphbmRyb2lkOjpoYXJkd2FyZTo6bWVkaWE6OmMyOjpWMV8wOjpJQ29uZmlndXJhYmxlIGZvbGxvdy4KK1JldHVybjx2b2lkPiBDYWNoZWRDb25maWd1cmFibGU6OmdldE5hbWUoZ2V0TmFtZV9jYiBfaGlkbF9jYikgeworICAgIF9oaWRsX2NiKG1JbnRmLT5nZXROYW1lKCkpOworICAgIHJldHVybiBWb2lkKCk7Cit9CisKK1JldHVybjx2b2lkPiBDYWNoZWRDb25maWd1cmFibGU6OnF1ZXJ5KAorICAgICAgICBjb25zdCBoaWRsX3ZlYzx1aW50MzJfdD4mIGluZGljZXMsCisgICAgICAgIGJvb2wgbWF5QmxvY2ssCisgICAgICAgIHF1ZXJ5X2NiIF9oaWRsX2NiKSB7CisgICAgdHlwZWRlZiBDMlBhcmFtOjpJbmRleCBJbmRleDsKKyAgICBzdGQ6OnZlY3RvcjxJbmRleD4gYzJoZWFwUGFyYW1JbmRpY2VzKAorICAgICAgICAgICAgKEluZGV4KilpbmRpY2VzLmRhdGEoKSwKKyAgICAgICAgICAgIChJbmRleCopaW5kaWNlcy5kYXRhKCkgKyBpbmRpY2VzLnNpemUoKSk7CisgICAgc3RkOjp2ZWN0b3I8c3RkOjp1bmlxdWVfcHRyPEMyUGFyYW0+PiBjMmhlYXBQYXJhbXM7CisgICAgYzJfc3RhdHVzX3QgYzJyZXMgPSBtSW50Zi0+cXVlcnkoCisgICAgICAgICAgICBjMmhlYXBQYXJhbUluZGljZXMsCisgICAgICAgICAgICBtYXlCbG9jayA/IEMyX01BWV9CTE9DSyA6IEMyX0RPTlRfQkxPQ0ssCisgICAgICAgICAgICAmYzJoZWFwUGFyYW1zKTsKKworICAgIGhpZGxfdmVjPHVpbnQ4X3Q+IHBhcmFtczsKKyAgICBjcmVhdGVQYXJhbXNCbG9iKCZwYXJhbXMsIGMyaGVhcFBhcmFtcyk7CisgICAgX2hpZGxfY2Ioc3RhdGljX2Nhc3Q8U3RhdHVzPihjMnJlcyksIHBhcmFtcyk7CisKKyAgICByZXR1cm4gVm9pZCgpOworfQorCitSZXR1cm48dm9pZD4gQ2FjaGVkQ29uZmlndXJhYmxlOjpjb25maWcoCisgICAgICAgIGNvbnN0IGhpZGxfdmVjPHVpbnQ4X3Q+JiBpblBhcmFtcywKKyAgICAgICAgYm9vbCBtYXlCbG9jaywKKyAgICAgICAgY29uZmlnX2NiIF9oaWRsX2NiKSB7CisgICAgLy8gaW5QYXJhbXMgaXMgbm90IHdyaXRhYmxlLCBzbyBjcmVhdGUgYSBjb3B5IGFzIGNvbmZpZyBtb2RpZmllcyB0aGUgcGFyYW1ldGVycworICAgIGhpZGxfdmVjPHVpbnQ4X3Q+IGluUGFyYW1zQ29weSA9IGluUGFyYW1zOworICAgIHN0ZDo6dmVjdG9yPEMyUGFyYW0qPiBjMnBhcmFtczsKKyAgICBpZiAocGFyc2VQYXJhbXNCbG9iKCZjMnBhcmFtcywgaW5QYXJhbXNDb3B5KSAhPSBDMl9PSykgeworICAgICAgICBfaGlkbF9jYihTdGF0dXM6OkNPUlJVUFRFRCwKKyAgICAgICAgICAgICAgICBoaWRsX3ZlYzxTZXR0aW5nUmVzdWx0PigpLAorICAgICAgICAgICAgICAgIGhpZGxfdmVjPHVpbnQ4X3Q+KCkpOworICAgICAgICByZXR1cm4gVm9pZCgpOworICAgIH0KKyAgICAvLyBUT0RPOiBjaGVjayBpZiBibG9iIHdhcyBpbnZhbGlkCisgICAgc3RkOjp2ZWN0b3I8c3RkOjp1bmlxdWVfcHRyPEMyU2V0dGluZ1Jlc3VsdD4+IGMyZmFpbHVyZXM7CisgICAgYzJfc3RhdHVzX3QgYzJyZXMgPSBtSW50Zi0+Y29uZmlnKAorICAgICAgICAgICAgYzJwYXJhbXMsCisgICAgICAgICAgICBtYXlCbG9jayA/IEMyX01BWV9CTE9DSyA6IEMyX0RPTlRfQkxPQ0ssCisgICAgICAgICAgICAmYzJmYWlsdXJlcyk7CisgICAgaGlkbF92ZWM8U2V0dGluZ1Jlc3VsdD4gZmFpbHVyZXMoYzJmYWlsdXJlcy5zaXplKCkpOworICAgIHsKKyAgICAgICAgc2l6ZV90IGl4ID0gMDsKKyAgICAgICAgZm9yIChjb25zdCBzdGQ6OnVuaXF1ZV9wdHI8QzJTZXR0aW5nUmVzdWx0PiYgYzJyZXN1bHQgOiBjMmZhaWx1cmVzKSB7CisgICAgICAgICAgICBpZiAoYzJyZXN1bHQpIHsKKyAgICAgICAgICAgICAgICBvYmpjcHkoJmZhaWx1cmVzW2l4KytdLCAqYzJyZXN1bHQpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGZhaWx1cmVzLnJlc2l6ZShpeCk7CisgICAgfQorICAgIGhpZGxfdmVjPHVpbnQ4X3Q+IG91dFBhcmFtczsKKyAgICBjcmVhdGVQYXJhbXNCbG9iKCZvdXRQYXJhbXMsIGMycGFyYW1zKTsKKyAgICBfaGlkbF9jYigoU3RhdHVzKWMycmVzLCBmYWlsdXJlcywgb3V0UGFyYW1zKTsKKyAgICByZXR1cm4gVm9pZCgpOworfQorCitSZXR1cm48dm9pZD4gQ2FjaGVkQ29uZmlndXJhYmxlOjpxdWVyeVN1cHBvcnRlZFBhcmFtcygKKyAgICAgICAgdWludDMyX3Qgc3RhcnQsCisgICAgICAgIHVpbnQzMl90IGNvdW50LAorICAgICAgICBxdWVyeVN1cHBvcnRlZFBhcmFtc19jYiBfaGlkbF9jYikgeworICAgIEMyTGluZWFyUmFuZ2UgcmVxdWVzdCA9IEMyTGluZWFyQ2FwYWNpdHkobVN1cHBvcnRlZFBhcmFtcy5zaXplKCkpLnJhbmdlKAorICAgICAgICAgICAgc3RhcnQsIGNvdW50KTsKKyAgICBoaWRsX3ZlYzxQYXJhbURlc2NyaXB0b3I+IHBhcmFtcyhyZXF1ZXN0LnNpemUoKSk7CisgICAgU3RhdHVzIHJlcyA9IFN0YXR1czo6T0s7CisgICAgc2l6ZV90IGRzdEl4ID0gMDsKKyAgICBmb3IgKHNpemVfdCBzcmNJeCA9IHJlcXVlc3Qub2Zmc2V0KCk7IHNyY0l4IDwgcmVxdWVzdC5lbmRPZmZzZXQoKTsgKytzcmNJeCkgeworICAgICAgICBpZiAobVN1cHBvcnRlZFBhcmFtc1tzcmNJeF0pIHsKKyAgICAgICAgICAgIG9iamNweSgmcGFyYW1zW2RzdEl4KytdLCAqbVN1cHBvcnRlZFBhcmFtc1tzcmNJeF0pOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgcmVzID0gU3RhdHVzOjpCQURfSU5ERVg7CisgICAgICAgIH0KKyAgICB9CisgICAgcGFyYW1zLnJlc2l6ZShkc3RJeCk7CisgICAgX2hpZGxfY2IocmVzLCBwYXJhbXMpOworICAgIHJldHVybiBWb2lkKCk7Cit9CisKK1JldHVybjx2b2lkPiBDYWNoZWRDb25maWd1cmFibGU6OnF1ZXJ5U3VwcG9ydGVkVmFsdWVzKAorICAgICAgICBjb25zdCBoaWRsX3ZlYzxGaWVsZFN1cHBvcnRlZFZhbHVlc1F1ZXJ5PiYgaW5GaWVsZHMsCisgICAgICAgIGJvb2wgbWF5QmxvY2ssCisgICAgICAgIHF1ZXJ5U3VwcG9ydGVkVmFsdWVzX2NiIF9oaWRsX2NiKSB7CisgICAgc3RkOjp2ZWN0b3I8QzJGaWVsZFN1cHBvcnRlZFZhbHVlc1F1ZXJ5PiBjMmZpZWxkczsKKyAgICB7CisgICAgICAgIC8vIEMyRmllbGRTdXBwb3J0ZWRWYWx1ZXNRdWVyeSBvYmplY3RzIGFyZSByZXN0cmljdGVkIGluIHRoYXQgc29tZQorICAgICAgICAvLyBtZW1iZXJzIGFyZSBjb25zdC4KKyAgICAgICAgLy8gQzJQYXJhbUZpZWxkIC0gcmVxdWlyZWQgZm9yIGl0cyBjb25zdHJ1Y3RvciAtIGhhcyBubyBjb25zdHJ1Y3RvcnMKKyAgICAgICAgLy8gZnJvbSBmaWVsZHMuIFVzZSBDMlBhcmFtSW5zcGVjdG9yLgorICAgICAgICBmb3IgKGNvbnN0IEZpZWxkU3VwcG9ydGVkVmFsdWVzUXVlcnkgJnF1ZXJ5IDogaW5GaWVsZHMpIHsKKyAgICAgICAgICAgIGMyZmllbGRzLmVtcGxhY2VfYmFjayhfQzJQYXJhbUluc3BlY3Rvcjo6Q3JlYXRlUGFyYW1GaWVsZCgKKyAgICAgICAgICAgICAgICAgICAgcXVlcnkuZmllbGQuaW5kZXgsCisgICAgICAgICAgICAgICAgICAgIHF1ZXJ5LmZpZWxkLmZpZWxkSWQub2Zmc2V0LAorICAgICAgICAgICAgICAgICAgICBxdWVyeS5maWVsZC5maWVsZElkLnNpemUpLAorICAgICAgICAgICAgICAgICAgICBxdWVyeS50eXBlID09IEZpZWxkU3VwcG9ydGVkVmFsdWVzUXVlcnk6OlR5cGU6OlBPU1NJQkxFID8KKyAgICAgICAgICAgICAgICAgICAgQzJGaWVsZFN1cHBvcnRlZFZhbHVlc1F1ZXJ5OjpQT1NTSUJMRSA6CisgICAgICAgICAgICAgICAgICAgIEMyRmllbGRTdXBwb3J0ZWRWYWx1ZXNRdWVyeTo6Q1VSUkVOVCk7CisgICAgICAgIH0KKyAgICB9CisgICAgYzJfc3RhdHVzX3QgYzJyZXMgPSBtSW50Zi0+cXVlcnlTdXBwb3J0ZWRWYWx1ZXMoCisgICAgICAgICAgICBjMmZpZWxkcywKKyAgICAgICAgICAgIG1heUJsb2NrID8gQzJfTUFZX0JMT0NLIDogQzJfRE9OVF9CTE9DSyk7CisgICAgaGlkbF92ZWM8RmllbGRTdXBwb3J0ZWRWYWx1ZXNRdWVyeVJlc3VsdD4gb3V0RmllbGRzKGluRmllbGRzLnNpemUoKSk7CisgICAgeworICAgICAgICBzaXplX3QgaXggPSAwOworICAgICAgICBmb3IgKGNvbnN0IEMyRmllbGRTdXBwb3J0ZWRWYWx1ZXNRdWVyeSAmcmVzdWx0IDogYzJmaWVsZHMpIHsKKyAgICAgICAgICAgIG9iamNweSgmb3V0RmllbGRzW2l4KytdLCByZXN1bHQpOworICAgICAgICB9CisgICAgfQorICAgIF9oaWRsX2NiKChTdGF0dXMpYzJyZXMsIG91dEZpZWxkcyk7CisgICAgcmV0dXJuIFZvaWQoKTsKK30KKworfSAgLy8gbmFtZXNwYWNlIHV0aWxzCit9ICAvLyBuYW1lc3BhY2UgVjFfMAorfSAgLy8gbmFtZXNwYWNlIGMyCit9ICAvLyBuYW1lc3BhY2UgbWVkaWEKK30gIC8vIG5hbWVzcGFjZSBoYXJkd2FyZQorfSAgLy8gbmFtZXNwYWNlIGFuZHJvaWQKKwpkaWZmIC0tZ2l0IGEvbWVkaWEvY29kZWMyL2hpZGwvMS4wL3V0aWxzL0lucHV0U3VyZmFjZS5jcHAgYi9tZWRpYS9jb2RlYzIvaGlkbC8xLjAvdXRpbHMvSW5wdXRTdXJmYWNlLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNjY5NDYwCi0tLSAvZGV2L251bGwKKysrIGIvbWVkaWEvY29kZWMyL2hpZGwvMS4wL3V0aWxzL0lucHV0U3VyZmFjZS5jcHAKQEAgLTAsMCArMSwzMDkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTggVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworCisvLyNkZWZpbmUgTE9HX05ERUJVRyAwCisjZGVmaW5lIExPR19UQUcgIkNvZGVjMi1JbnB1dFN1cmZhY2UiCisjaW5jbHVkZSA8bG9nL2xvZy5oPgorCisjaW5jbHVkZSA8Y29kZWMyL2hpZGwvMS4wL0lucHV0U3VyZmFjZS5oPgorI2luY2x1ZGUgPGNvZGVjMi9oaWRsLzEuMC9JbnB1dFN1cmZhY2VDb25uZWN0aW9uLmg+CisKKyNpbmNsdWRlIDx1dGlsL0MySW50ZXJmYWNlSGVscGVyLmg+CisjaW5jbHVkZSA8QzJDb21wb25lbnQuaD4KKyNpbmNsdWRlIDxDMkNvbmZpZy5oPgorCisjaW5jbHVkZSA8bWVtb3J5PgorCituYW1lc3BhY2UgYW5kcm9pZCB7CituYW1lc3BhY2UgaGFyZHdhcmUgeworbmFtZXNwYWNlIG1lZGlhIHsKK25hbWVzcGFjZSBjMiB7CituYW1lc3BhY2UgVjFfMCB7CituYW1lc3BhY2UgdXRpbHMgeworCit1c2luZyBuYW1lc3BhY2UgOjphbmRyb2lkOworCitjbGFzcyBJbnB1dFN1cmZhY2U6OkNvbmZpZ3VyYWJsZUltcGwgOiBwdWJsaWMgQzJJbnRlcmZhY2VIZWxwZXIgeworcHVibGljOgorICAgIGV4cGxpY2l0IENvbmZpZ3VyYWJsZUltcGwoCisgICAgICAgICAgICBjb25zdCBzdGQ6OnNoYXJlZF9wdHI8QzJSZWZsZWN0b3JIZWxwZXI+ICZoZWxwZXIpCisgICAgICAgIDogQzJJbnRlcmZhY2VIZWxwZXIoaGVscGVyKSB7CisKKyAgICAgICAgc2V0RGVyaXZlZEluc3RhbmNlKHRoaXMpOworCisgICAgICAgIGFkZFBhcmFtZXRlcigKKyAgICAgICAgICAgICAgICBEZWZpbmVQYXJhbShtRW9zLCBDMl9OQU1FX0lOUFVUX1NVUkZBQ0VfRU9TX1RVTklORykKKyAgICAgICAgICAgICAgICAud2l0aERlZmF1bHQobmV3IEMySW5wdXRTdXJmYWNlRW9zVHVuaW5nKGZhbHNlKSkKKyAgICAgICAgICAgICAgICAud2l0aEZpZWxkcyh7QzJGKG1Fb3MsIHZhbHVlKS5vbmVPZih7dHJ1ZSwgZmFsc2V9KX0pCisgICAgICAgICAgICAgICAgLndpdGhTZXR0ZXIoRW9zU2V0dGVyKQorICAgICAgICAgICAgICAgIC5idWlsZCgpKTsKKyAgICB9CisKKyAgICBzdGF0aWMgQzJSIEVvc1NldHRlcihib29sIG1heUJsb2NrLCBDMlA8QzJJbnB1dFN1cmZhY2VFb3NUdW5pbmc+ICZtZSkgeworICAgICAgICAodm9pZCltYXlCbG9jazsKKyAgICAgICAgcmV0dXJuIG1lLkYobWUudi52YWx1ZSkudmFsaWRhdGVQb3NzaWJsZShtZS52LnZhbHVlKTsKKyAgICB9CisKKyAgICBib29sIGVvcygpIGNvbnN0IHsgcmV0dXJuIG1Fb3MtPnZhbHVlOyB9CisKK3ByaXZhdGU6CisgICAgc3RkOjpzaGFyZWRfcHRyPEMySW5wdXRTdXJmYWNlRW9zVHVuaW5nPiBtRW9zOworfTsKKworbmFtZXNwYWNlIHsKKworY2xhc3MgQ29uZmlndXJhYmxlV3JhcHBlciA6IHB1YmxpYyBDb25maWd1cmFibGVDMkludGYgeworcHVibGljOgorICAgIENvbmZpZ3VyYWJsZVdyYXBwZXIoCisgICAgICAgICAgICBjb25zdCBzdGQ6OnNoYXJlZF9wdHI8SW5wdXRTdXJmYWNlOjpDb25maWd1cmFibGVJbXBsPiAmaW1wbCwKKyAgICAgICAgICAgIGNvbnN0IHNwPEdyYXBoaWNCdWZmZXJTb3VyY2U+ICZzb3VyY2UpCisgICAgICAgIDogQ29uZmlndXJhYmxlQzJJbnRmKCJpbnB1dC1zdXJmYWNlIiksCisgICAgICAgICAgbUltcGwoaW1wbCksCisgICAgICAgICAgbVNvdXJjZShzb3VyY2UpIHsKKyAgICB9CisKKyAgICB+Q29uZmlndXJhYmxlV3JhcHBlcigpIG92ZXJyaWRlID0gZGVmYXVsdDsKKworICAgIGMyX3N0YXR1c190IHF1ZXJ5KAorICAgICAgICAgICAgY29uc3Qgc3RkOjp2ZWN0b3I8QzJQYXJhbTo6SW5kZXg+ICZpbmRpY2VzLAorICAgICAgICAgICAgYzJfYmxvY2tpbmdfdCBtYXlCbG9jaywKKyAgICAgICAgICAgIHN0ZDo6dmVjdG9yPHN0ZDo6dW5pcXVlX3B0cjxDMlBhcmFtPj4qIGNvbnN0IHBhcmFtcykgY29uc3Qgb3ZlcnJpZGUgeworICAgICAgICByZXR1cm4gbUltcGwtPnF1ZXJ5KHt9LCBpbmRpY2VzLCBtYXlCbG9jaywgcGFyYW1zKTsKKyAgICB9CisKKyAgICBjMl9zdGF0dXNfdCBjb25maWcoCisgICAgICAgICAgICBjb25zdCBzdGQ6OnZlY3RvcjxDMlBhcmFtKj4gJnBhcmFtcywKKyAgICAgICAgICAgIGMyX2Jsb2NraW5nX3QgbWF5QmxvY2ssCisgICAgICAgICAgICBzdGQ6OnZlY3RvcjxzdGQ6OnVuaXF1ZV9wdHI8QzJTZXR0aW5nUmVzdWx0Pj4qIGNvbnN0IGZhaWx1cmVzKSBvdmVycmlkZSB7CisgICAgICAgIGMyX3N0YXR1c190IGVyciA9IG1JbXBsLT5jb25maWcocGFyYW1zLCBtYXlCbG9jaywgZmFpbHVyZXMpOworICAgICAgICBpZiAobUltcGwtPmVvcygpKSB7CisgICAgICAgICAgICBzcDxHcmFwaGljQnVmZmVyU291cmNlPiBzb3VyY2UgPSBtU291cmNlLnByb21vdGUoKTsKKyAgICAgICAgICAgIGlmIChzb3VyY2UgPT0gbnVsbHB0ciB8fCBzb3VyY2UtPnNpZ25hbEVuZE9mSW5wdXRTdHJlYW0oKSAhPSBPSykgeworICAgICAgICAgICAgICAgIC8vIFRPRE86IHB1dCBzb21ldGhpbmcgaW4gfGZhaWx1cmVzfAorICAgICAgICAgICAgICAgIGVyciA9IEMyX0JBRF9WQUxVRTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIC8vIFRPRE86IHJlc2V0IGVvcz8KKyAgICAgICAgfQorICAgICAgICByZXR1cm4gZXJyOworICAgIH0KKworICAgIGMyX3N0YXR1c190IHF1ZXJ5U3VwcG9ydGVkUGFyYW1zKAorICAgICAgICAgICAgc3RkOjp2ZWN0b3I8c3RkOjpzaGFyZWRfcHRyPEMyUGFyYW1EZXNjcmlwdG9yPj4qIGNvbnN0IHBhcmFtcykgY29uc3Qgb3ZlcnJpZGUgeworICAgICAgICByZXR1cm4gbUltcGwtPnF1ZXJ5U3VwcG9ydGVkUGFyYW1zKHBhcmFtcyk7CisgICAgfQorCisgICAgYzJfc3RhdHVzX3QgcXVlcnlTdXBwb3J0ZWRWYWx1ZXMoCisgICAgICAgICAgICBzdGQ6OnZlY3RvcjxDMkZpZWxkU3VwcG9ydGVkVmFsdWVzUXVlcnk+JiBmaWVsZHMsCisgICAgICAgICAgICBjMl9ibG9ja2luZ190IG1heUJsb2NrKSBjb25zdCBvdmVycmlkZSB7CisgICAgICAgIHJldHVybiBtSW1wbC0+cXVlcnlTdXBwb3J0ZWRWYWx1ZXMoZmllbGRzLCBtYXlCbG9jayk7CisgICAgfQorCitwcml2YXRlOgorICAgIGNvbnN0IHN0ZDo6c2hhcmVkX3B0cjxJbnB1dFN1cmZhY2U6OkNvbmZpZ3VyYWJsZUltcGw+IG1JbXBsOworICAgIHdwPEdyYXBoaWNCdWZmZXJTb3VyY2U+IG1Tb3VyY2U7Cit9OworCit9ICAvLyBuYW1lc3BhY2UKKworCitSZXR1cm48dm9pZD4gSW5wdXRTdXJmYWNlOjpjb25uZWN0VG9Db21wb25lbnQoCisgICAgICAgIGNvbnN0IHNwPElDb21wb25lbnQ+JiBjb21wb25lbnQsCisgICAgICAgIGNvbm5lY3RUb0NvbXBvbmVudF9jYiBfaGlkbF9jYikgeworICAgIFN0YXR1cyBzdGF0dXM7CisgICAgc3A8SW5wdXRTdXJmYWNlQ29ubmVjdGlvbj4gY29ubjsKKyAgICBpZiAoIWNvbXBvbmVudCkgeworICAgICAgICBzdGF0dXMgPSBTdGF0dXM6OkJBRF9WQUxVRTsKKyAgICB9IGVsc2UgeworICAgICAgICBzdGQ6OnNoYXJlZF9wdHI8QzJDb21wb25lbnQ+IGNvbXAgPSBtU3RvcmUtPmZpbmRDMkNvbXBvbmVudChjb21wb25lbnQpOworICAgICAgICBpZiAoIWNvbXApIHsKKyAgICAgICAgICAgIGNvbm4gPSBuZXcgSW5wdXRTdXJmYWNlQ29ubmVjdGlvbihtU291cmNlLCBjb21wb25lbnQpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgY29ubiA9IG5ldyBJbnB1dFN1cmZhY2VDb25uZWN0aW9uKG1Tb3VyY2UsIGNvbXApOworICAgICAgICB9CisgICAgICAgIGlmICghY29ubi0+aW5pdCgpKSB7CisgICAgICAgICAgICBjb25uID0gbnVsbHB0cjsKKyAgICAgICAgICAgIHN0YXR1cyA9IFN0YXR1czo6QkFEX1ZBTFVFOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgc3RhdHVzID0gU3RhdHVzOjpPSzsKKyAgICAgICAgfQorICAgIH0KKyAgICBfaGlkbF9jYihzdGF0dXMsIGNvbm4pOworICAgIHJldHVybiBWb2lkKCk7Cit9CisKK1JldHVybjxzcDxJQ29uZmlndXJhYmxlPj4gSW5wdXRTdXJmYWNlOjpnZXRDb25maWd1cmFibGUoKSB7CisgICAgcmV0dXJuIG1Db25maWd1cmFibGU7Cit9CisKKy8vIERlcml2ZWQgbWV0aG9kcyBmcm9tIElHcmFwaGljQnVmZmVyUHJvZHVjZXIKKworUmV0dXJuPHZvaWQ+IElucHV0U3VyZmFjZTo6cmVxdWVzdEJ1ZmZlcigKKyAgICAgICAgaW50MzJfdCBzbG90LAorICAgICAgICByZXF1ZXN0QnVmZmVyX2NiIF9oaWRsX2NiKSB7CisgICAgcmV0dXJuIG1CYXNlLT5yZXF1ZXN0QnVmZmVyKHNsb3QsIF9oaWRsX2NiKTsKK30KKworUmV0dXJuPGludDMyX3Q+IElucHV0U3VyZmFjZTo6c2V0TWF4RGVxdWV1ZWRCdWZmZXJDb3VudCgKKyAgICAgICAgaW50MzJfdCBtYXhEZXF1ZXVlZEJ1ZmZlcnMpIHsKKyAgICByZXR1cm4gbUJhc2UtPnNldE1heERlcXVldWVkQnVmZmVyQ291bnQobWF4RGVxdWV1ZWRCdWZmZXJzKTsKK30KKworUmV0dXJuPGludDMyX3Q+IElucHV0U3VyZmFjZTo6c2V0QXN5bmNNb2RlKAorICAgICAgICBib29sIGFzeW5jKSB7CisgICAgcmV0dXJuIG1CYXNlLT5zZXRBc3luY01vZGUoYXN5bmMpOworfQorCitSZXR1cm48dm9pZD4gSW5wdXRTdXJmYWNlOjpkZXF1ZXVlQnVmZmVyKAorICAgICAgICB1aW50MzJfdCB3aWR0aCwKKyAgICAgICAgdWludDMyX3QgaGVpZ2h0LAorICAgICAgICBQaXhlbEZvcm1hdCBmb3JtYXQsCisgICAgICAgIHVpbnQzMl90IHVzYWdlLAorICAgICAgICBib29sIGdldEZyYW1lVGltZXN0YW1wcywKKyAgICAgICAgZGVxdWV1ZUJ1ZmZlcl9jYiBfaGlkbF9jYikgeworICAgIHJldHVybiBtQmFzZS0+ZGVxdWV1ZUJ1ZmZlcigKKyAgICAgICAgICAgIHdpZHRoLCBoZWlnaHQsIGZvcm1hdCwgdXNhZ2UsIGdldEZyYW1lVGltZXN0YW1wcywgX2hpZGxfY2IpOworfQorCitSZXR1cm48aW50MzJfdD4gSW5wdXRTdXJmYWNlOjpkZXRhY2hCdWZmZXIoCisgICAgICAgIGludDMyX3Qgc2xvdCkgeworICAgIHJldHVybiBtQmFzZS0+ZGV0YWNoQnVmZmVyKHNsb3QpOworfQorCitSZXR1cm48dm9pZD4gSW5wdXRTdXJmYWNlOjpkZXRhY2hOZXh0QnVmZmVyKAorICAgICAgICBkZXRhY2hOZXh0QnVmZmVyX2NiIF9oaWRsX2NiKSB7CisgICAgcmV0dXJuIG1CYXNlLT5kZXRhY2hOZXh0QnVmZmVyKF9oaWRsX2NiKTsKK30KKworUmV0dXJuPHZvaWQ+IElucHV0U3VyZmFjZTo6YXR0YWNoQnVmZmVyKAorICAgICAgICBjb25zdCBBbndCdWZmZXImIGJ1ZmZlciwKKyAgICAgICAgYXR0YWNoQnVmZmVyX2NiIF9oaWRsX2NiKSB7CisgICAgcmV0dXJuIG1CYXNlLT5hdHRhY2hCdWZmZXIoYnVmZmVyLCBfaGlkbF9jYik7Cit9CisKK1JldHVybjx2b2lkPiBJbnB1dFN1cmZhY2U6OnF1ZXVlQnVmZmVyKAorICAgICAgICBpbnQzMl90IHNsb3QsCisgICAgICAgIGNvbnN0IFF1ZXVlQnVmZmVySW5wdXQmIGlucHV0LAorICAgICAgICBxdWV1ZUJ1ZmZlcl9jYiBfaGlkbF9jYikgeworICAgIHJldHVybiBtQmFzZS0+cXVldWVCdWZmZXIoc2xvdCwgaW5wdXQsIF9oaWRsX2NiKTsKK30KKworUmV0dXJuPGludDMyX3Q+IElucHV0U3VyZmFjZTo6Y2FuY2VsQnVmZmVyKAorICAgICAgICBpbnQzMl90IHNsb3QsCisgICAgICAgIGNvbnN0IGhpZGxfaGFuZGxlJiBmZW5jZSkgeworICAgIHJldHVybiBtQmFzZS0+Y2FuY2VsQnVmZmVyKHNsb3QsIGZlbmNlKTsKK30KKworUmV0dXJuPHZvaWQ+IElucHV0U3VyZmFjZTo6cXVlcnkoCisgICAgICAgIGludDMyX3Qgd2hhdCwKKyAgICAgICAgcXVlcnlfY2IgX2hpZGxfY2IpIHsKKyAgICByZXR1cm4gbUJhc2UtPnF1ZXJ5KHdoYXQsIF9oaWRsX2NiKTsKK30KKworUmV0dXJuPHZvaWQ+IElucHV0U3VyZmFjZTo6Y29ubmVjdCgKKyAgICAgICAgY29uc3Qgc3A8SFByb2R1Y2VyTGlzdGVuZXI+JiBsaXN0ZW5lciwKKyAgICAgICAgaW50MzJfdCBhcGksCisgICAgICAgIGJvb2wgcHJvZHVjZXJDb250cm9sbGVkQnlBcHAsCisgICAgICAgIGNvbm5lY3RfY2IgX2hpZGxfY2IpIHsKKyAgICByZXR1cm4gbUJhc2UtPmNvbm5lY3QobGlzdGVuZXIsIGFwaSwgcHJvZHVjZXJDb250cm9sbGVkQnlBcHAsIF9oaWRsX2NiKTsKK30KKworUmV0dXJuPGludDMyX3Q+IElucHV0U3VyZmFjZTo6ZGlzY29ubmVjdCgKKyAgICAgICAgaW50MzJfdCBhcGksCisgICAgICAgIERpc2Nvbm5lY3RNb2RlIG1vZGUpIHsKKyAgICByZXR1cm4gbUJhc2UtPmRpc2Nvbm5lY3QoYXBpLCBtb2RlKTsKK30KKworUmV0dXJuPGludDMyX3Q+IElucHV0U3VyZmFjZTo6c2V0U2lkZWJhbmRTdHJlYW0oCisgICAgICAgIGNvbnN0IGhpZGxfaGFuZGxlJiBzdHJlYW0pIHsKKyAgICByZXR1cm4gbUJhc2UtPnNldFNpZGViYW5kU3RyZWFtKHN0cmVhbSk7Cit9CisKK1JldHVybjx2b2lkPiBJbnB1dFN1cmZhY2U6OmFsbG9jYXRlQnVmZmVycygKKyAgICAgICAgdWludDMyX3Qgd2lkdGgsCisgICAgICAgIHVpbnQzMl90IGhlaWdodCwKKyAgICAgICAgUGl4ZWxGb3JtYXQgZm9ybWF0LAorICAgICAgICB1aW50MzJfdCB1c2FnZSkgeworICAgIHJldHVybiBtQmFzZS0+YWxsb2NhdGVCdWZmZXJzKHdpZHRoLCBoZWlnaHQsIGZvcm1hdCwgdXNhZ2UpOworfQorCitSZXR1cm48aW50MzJfdD4gSW5wdXRTdXJmYWNlOjphbGxvd0FsbG9jYXRpb24oCisgICAgICAgIGJvb2wgYWxsb3cpIHsKKyAgICByZXR1cm4gbUJhc2UtPmFsbG93QWxsb2NhdGlvbihhbGxvdyk7Cit9CisKK1JldHVybjxpbnQzMl90PiBJbnB1dFN1cmZhY2U6OnNldEdlbmVyYXRpb25OdW1iZXIoCisgICAgICAgIHVpbnQzMl90IGdlbmVyYXRpb25OdW1iZXIpIHsKKyAgICByZXR1cm4gbUJhc2UtPnNldEdlbmVyYXRpb25OdW1iZXIoZ2VuZXJhdGlvbk51bWJlcik7Cit9CisKK1JldHVybjx2b2lkPiBJbnB1dFN1cmZhY2U6OmdldENvbnN1bWVyTmFtZSgKKyAgICAgICAgZ2V0Q29uc3VtZXJOYW1lX2NiIF9oaWRsX2NiKSB7CisgICAgcmV0dXJuIG1CYXNlLT5nZXRDb25zdW1lck5hbWUoX2hpZGxfY2IpOworfQorCitSZXR1cm48aW50MzJfdD4gSW5wdXRTdXJmYWNlOjpzZXRTaGFyZWRCdWZmZXJNb2RlKAorICAgICAgICBib29sIHNoYXJlZEJ1ZmZlck1vZGUpIHsKKyAgICByZXR1cm4gbUJhc2UtPnNldFNoYXJlZEJ1ZmZlck1vZGUoc2hhcmVkQnVmZmVyTW9kZSk7Cit9CisKK1JldHVybjxpbnQzMl90PiBJbnB1dFN1cmZhY2U6OnNldEF1dG9SZWZyZXNoKAorICAgICAgICBib29sIGF1dG9SZWZyZXNoKSB7CisgICAgcmV0dXJuIG1CYXNlLT5zZXRBdXRvUmVmcmVzaChhdXRvUmVmcmVzaCk7Cit9CisKK1JldHVybjxpbnQzMl90PiBJbnB1dFN1cmZhY2U6OnNldERlcXVldWVUaW1lb3V0KAorICAgICAgICBpbnQ2NF90IHRpbWVvdXROcykgeworICAgIHJldHVybiBtQmFzZS0+c2V0RGVxdWV1ZVRpbWVvdXQodGltZW91dE5zKTsKK30KKworUmV0dXJuPHZvaWQ+IElucHV0U3VyZmFjZTo6Z2V0TGFzdFF1ZXVlZEJ1ZmZlcigKKyAgICAgICAgZ2V0TGFzdFF1ZXVlZEJ1ZmZlcl9jYiBfaGlkbF9jYikgeworICAgIHJldHVybiBtQmFzZS0+Z2V0TGFzdFF1ZXVlZEJ1ZmZlcihfaGlkbF9jYik7Cit9CisKK1JldHVybjx2b2lkPiBJbnB1dFN1cmZhY2U6OmdldEZyYW1lVGltZXN0YW1wcygKKyAgICAgICAgZ2V0RnJhbWVUaW1lc3RhbXBzX2NiIF9oaWRsX2NiKSB7CisgICAgcmV0dXJuIG1CYXNlLT5nZXRGcmFtZVRpbWVzdGFtcHMoX2hpZGxfY2IpOworfQorCitSZXR1cm48dm9pZD4gSW5wdXRTdXJmYWNlOjpnZXRVbmlxdWVJZCgKKyAgICAgICAgZ2V0VW5pcXVlSWRfY2IgX2hpZGxfY2IpIHsKKyAgICByZXR1cm4gbUJhc2UtPmdldFVuaXF1ZUlkKF9oaWRsX2NiKTsKK30KKworLy8gQ29uc3RydWN0b3IgaXMgZXhjbHVzaXZlIHRvIENvbXBvbmVudFN0b3JlLgorSW5wdXRTdXJmYWNlOjpJbnB1dFN1cmZhY2UoCisgICAgICAgIGNvbnN0IHNwPENvbXBvbmVudFN0b3JlPiYgc3RvcmUsCisgICAgICAgIGNvbnN0IHN0ZDo6c2hhcmVkX3B0cjxDMlJlZmxlY3RvckhlbHBlcj4mIHJlZmxlY3RvciwKKyAgICAgICAgY29uc3Qgc3A8SEdyYXBoaWNCdWZmZXJQcm9kdWNlcj4mIGJhc2UsCisgICAgICAgIGNvbnN0IHNwPEdyYXBoaWNCdWZmZXJTb3VyY2U+JiBzb3VyY2UpIDoKKyAgICBtU3RvcmUoc3RvcmUpLAorICAgIG1CYXNlKGJhc2UpLAorICAgIG1Tb3VyY2Uoc291cmNlKSwKKyAgICBtSGVscGVyKHN0ZDo6bWFrZV9zaGFyZWQ8Q29uZmlndXJhYmxlSW1wbD4ocmVmbGVjdG9yKSksCisgICAgbUNvbmZpZ3VyYWJsZShuZXcgQ2FjaGVkQ29uZmlndXJhYmxlKAorICAgICAgICAgICAgc3RkOjptYWtlX3VuaXF1ZTxDb25maWd1cmFibGVXcmFwcGVyPihtSGVscGVyLCBzb3VyY2UpKSkgeworCisgICAgbUNvbmZpZ3VyYWJsZS0+aW5pdChzdG9yZS5nZXQoKSk7Cit9CisKK30gIC8vIG5hbWVzcGFjZSB1dGlscworfSAgLy8gbmFtZXNwYWNlIFYxXzAKK30gIC8vIG5hbWVzcGFjZSBjMgorfSAgLy8gbmFtZXNwYWNlIG1lZGlhCit9ICAvLyBuYW1lc3BhY2UgaGFyZHdhcmUKK30gIC8vIG5hbWVzcGFjZSBhbmRyb2lkCisKZGlmZiAtLWdpdCBhL21lZGlhL2NvZGVjMi9oaWRsLzEuMC91dGlscy9JbnB1dFN1cmZhY2VDb25uZWN0aW9uLmNwcCBiL21lZGlhL2NvZGVjMi9oaWRsLzEuMC91dGlscy9JbnB1dFN1cmZhY2VDb25uZWN0aW9uLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iYTdjMmQ2Ci0tLSAvZGV2L251bGwKKysrIGIvbWVkaWEvY29kZWMyL2hpZGwvMS4wL3V0aWxzL0lucHV0U3VyZmFjZUNvbm5lY3Rpb24uY3BwCkBAIC0wLDAgKzEsNDM5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE4IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KKworLy8jZGVmaW5lIExPR19OREVCVUcgMAorI2RlZmluZSBMT0dfVEFHICJDb2RlYzItSW5wdXRTdXJmYWNlQ29ubmVjdGlvbiIKKyNpbmNsdWRlIDxsb2cvbG9nLmg+CisKKyNpbmNsdWRlIDxjb2RlYzIvaGlkbC8xLjAvSW5wdXRTdXJmYWNlQ29ubmVjdGlvbi5oPgorCisjaW5jbHVkZSA8bWVtb3J5PgorI2luY2x1ZGUgPGxpc3Q+CisjaW5jbHVkZSA8bXV0ZXg+CisjaW5jbHVkZSA8YXRvbWljPgorCisjaW5jbHVkZSA8aGlkbC9IaWRsU3VwcG9ydC5oPgorI2luY2x1ZGUgPG1lZGlhL3N0YWdlZnJpZ2h0L2JxaGVscGVyL0NvbXBvbmVudFdyYXBwZXIuaD4KKyNpbmNsdWRlIDxzeXN0ZW0vZ3JhcGhpY3MuaD4KKyNpbmNsdWRlIDx1aS9HcmFwaGljQnVmZmVyLmg+CisjaW5jbHVkZSA8dXRpbHMvRXJyb3JzLmg+CisKKyNpbmNsdWRlIDxDMi5oPgorI2luY2x1ZGUgPEMyQWxsb2NhdG9yR3JhbGxvYy5oPgorI2luY2x1ZGUgPEMyQmxvY2tJbnRlcm5hbC5oPgorI2luY2x1ZGUgPEMyQnVmZmVyLmg+CisjaW5jbHVkZSA8QzJDb21wb25lbnQuaD4KKyNpbmNsdWRlIDxDMkNvbmZpZy5oPgorI2luY2x1ZGUgPEMyRGVidWcuaD4KKyNpbmNsdWRlIDxDMlBsYXRmb3JtU3VwcG9ydC5oPgorI2luY2x1ZGUgPEMyV29yay5oPgorCituYW1lc3BhY2UgYW5kcm9pZCB7CituYW1lc3BhY2UgaGFyZHdhcmUgeworbmFtZXNwYWNlIG1lZGlhIHsKK25hbWVzcGFjZSBjMiB7CituYW1lc3BhY2UgVjFfMCB7CituYW1lc3BhY2UgdXRpbHMgeworCitjb25zdGV4cHIgaW50MzJfdCBrQnVmZmVyQ291bnQgPSAxNjsKKwordXNpbmcgbmFtZXNwYWNlIDo6YW5kcm9pZDsKK3VzaW5nIDo6YW5kcm9pZDo6aGFyZHdhcmU6OmhpZGxfc3RyaW5nOwordXNpbmcgOjphbmRyb2lkOjpoYXJkd2FyZTo6aGlkbF92ZWM7Cit1c2luZyA6OmFuZHJvaWQ6OmhhcmR3YXJlOjpSZXR1cm47CisKK25hbWVzcGFjZSAvKiB1bm5hbWVkICovIHsKKworY2xhc3MgQnVmZmVyMkQgOiBwdWJsaWMgQzJCdWZmZXIgeworcHVibGljOgorICAgIGV4cGxpY2l0IEJ1ZmZlcjJEKEMyQ29uc3RHcmFwaGljQmxvY2sgYmxvY2spIDogQzJCdWZmZXIoeyBibG9jayB9KSB7CisgICAgfQorfTsKKworfSAvLyB1bm5hbWVkIG5hbWVzcGFjZQorCitzdHJ1Y3QgSW5wdXRTdXJmYWNlQ29ubmVjdGlvbjo6SW1wbCA6IHB1YmxpYyBDb21wb25lbnRXcmFwcGVyIHsKKyAgICBJbXBsKGNvbnN0IHNwPEdyYXBoaWNCdWZmZXJTb3VyY2U+JiBzb3VyY2UsCisgICAgICAgICBjb25zdCBzdGQ6OnNoYXJlZF9wdHI8QzJDb21wb25lbnQ+JiBjb21wKSA6CisgICAgICAgICAgICBtU291cmNlKHNvdXJjZSksIG1Db21wKGNvbXApLCBtUmVtb3RlQ29tcCgpLAorICAgICAgICAgICAgbUZyYW1lSW5kZXgoMCkgeworICAgICAgICBzdGQ6OnNoYXJlZF9wdHI8QzJDb21wb25lbnRJbnRlcmZhY2U+IGludGYgPSBjb21wLT5pbnRmKCk7CisgICAgICAgIG1Db21wTmFtZSA9IGludGYgPyBpbnRmLT5nZXROYW1lKCkgOiAiIjsKKyAgICB9CisKKyAgICBJbXBsKGNvbnN0IHNwPEdyYXBoaWNCdWZmZXJTb3VyY2U+JiBzb3VyY2UsCisgICAgICAgICBjb25zdCBzcDxJQ29tcG9uZW50PiYgY29tcCkgOgorICAgICAgICAgICAgbVNvdXJjZShzb3VyY2UpLCBtQ29tcCgpLCBtUmVtb3RlQ29tcChjb21wKSwKKyAgICAgICAgICAgIG1GcmFtZUluZGV4KDApIHsKKyAgICAgICAgUmV0dXJuPHZvaWQ+IHRyYW5zU3RhdHVzID0gY29tcC0+Z2V0TmFtZSgKKyAgICAgICAgICAgICAgICBbdGhpc10oY29uc3QgaGlkbF9zdHJpbmcmIG5hbWUpIHsKKyAgICAgICAgICAgICAgICAgICAgbUNvbXBOYW1lID0gbmFtZS5jX3N0cigpOworICAgICAgICAgICAgICAgIH0pOworICAgICAgICBpZiAoIXRyYW5zU3RhdHVzLmlzT2soKSkgeworICAgICAgICAgICAgQUxPR0QoImdldE5hbWUgLS0gQ2Fubm90IG9idGFpbiByZW1vdGUgY29tcG9uZW50IG5hbWUuIik7CisgICAgICAgIH0KKyAgICB9CisKKyAgICB2aXJ0dWFsIH5JbXBsKCkgPSBkZWZhdWx0OworCisgICAgYm9vbCBpbml0KCkgeworICAgICAgICBzcDxHcmFwaGljQnVmZmVyU291cmNlPiBzb3VyY2UgPSBtU291cmNlLnByb21vdGUoKTsKKyAgICAgICAgaWYgKHNvdXJjZSA9PSBudWxscHRyKSB7CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICAgICAgc3RhdHVzX3QgZXJyID0gc291cmNlLT5pbml0Q2hlY2soKTsKKyAgICAgICAgaWYgKGVyciAhPSBPSykgeworICAgICAgICAgICAgQUxPR0QoIkltcGw6OmluaXQgLS0gR0JTIGluaXQgZmFpbGVkOiAlZCIsIGVycik7CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKworICAgICAgICAvLyBUT0RPOiByZWFkIHNldHRpbmdzIHByb3Blcmx5IGZyb20gdGhlIGludGVyZmFjZQorICAgICAgICBDMlZpZGVvU2l6ZVN0cmVhbVR1bmluZzo6aW5wdXQgaW5wdXRTaXplOworICAgICAgICBDMlN0cmVhbVVzYWdlVHVuaW5nOjppbnB1dCB1c2FnZTsKKyAgICAgICAgYzJfc3RhdHVzX3QgYzJTdGF0dXMgPSBjb21wUXVlcnkoeyAmaW5wdXRTaXplLCAmdXNhZ2UgfSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge30sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEMyX01BWV9CTE9DSywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnVsbHB0cik7CisgICAgICAgIGlmIChjMlN0YXR1cyAhPSBDMl9PSykgeworICAgICAgICAgICAgQUxPR0QoIkltcGw6OmluaXQgLS0gY2Fubm90IHF1ZXJ5IGluZm9ybWF0aW9uIGZyb20gIgorICAgICAgICAgICAgICAgICAgICAidGhlIGNvbXBvbmVudCBpbnRlcmZhY2U6ICVzLiIsIGFzU3RyaW5nKGMyU3RhdHVzKSk7CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKworICAgICAgICAvLyBUT0RPOiBwcm9wZXIgY29sb3IgYXNwZWN0ICYgZGF0YXNwYWNlCisgICAgICAgIGFuZHJvaWRfZGF0YXNwYWNlIGRhdGFTcGFjZSA9IEhBTF9EQVRBU1BBQ0VfQlQ3MDk7CisKKyAgICAgICAgLy8gVE9ETzogdXNlIHRoZSB1c2FnZSByZWFkIGZyb20gaW50ZgorICAgICAgICAvLyB1aW50MzJfdCBncmFsbG9jVXNhZ2UgPQorICAgICAgICAvLyAgICAgICAgIEMyQW5kcm9pZE1lbW9yeVVzYWdlKEMyTWVtb3J5VXNhZ2UodXNhZ2UudmFsdWUpKS4KKyAgICAgICAgLy8gICAgICAgICBhc0dyYWxsb2NVc2FnZSgpOworCisgICAgICAgIHVpbnQzMl90IGdyYWxsb2NVc2FnZSA9CisgICAgICAgICAgICAgICAgbUNvbXBOYW1lLmNvbXBhcmUoMCwgMTEsICJjMi5hbmRyb2lkLiIpID09IDAgPworICAgICAgICAgICAgICAgIEdSQUxMT0NfVVNBR0VfU1dfUkVBRF9PRlRFTiA6CisgICAgICAgICAgICAgICAgR1JBTExPQ19VU0FHRV9IV19WSURFT19FTkNPREVSOworCisgICAgICAgIGVyciA9IHNvdXJjZS0+Y29uZmlndXJlKAorICAgICAgICAgICAgICAgIHRoaXMsIGRhdGFTcGFjZSwga0J1ZmZlckNvdW50LAorICAgICAgICAgICAgICAgIGlucHV0U2l6ZS53aWR0aCwgaW5wdXRTaXplLmhlaWdodCwKKyAgICAgICAgICAgICAgICBncmFsbG9jVXNhZ2UpOworICAgICAgICBpZiAoZXJyICE9IE9LKSB7CisgICAgICAgICAgICBBTE9HRCgiSW1wbDo6aW5pdCAtLSBHQlMgY29uZmlndXJlIGZhaWxlZDogJWQiLCBlcnIpOworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgICAgIGZvciAoaW50MzJfdCBpID0gMDsgaSA8IGtCdWZmZXJDb3VudDsgKytpKSB7CisgICAgICAgICAgICBpZiAoIXNvdXJjZS0+b25JbnB1dEJ1ZmZlckFkZGVkKGkpLmlzT2soKSkgeworICAgICAgICAgICAgICAgIEFMT0dEKCJJbXBsOjppbml0OiBwb3B1bGF0aW5nIEdCUyBzbG90cyBmYWlsZWQiKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgaWYgKCFzb3VyY2UtPnN0YXJ0KCkuaXNPaygpKSB7CisgICAgICAgICAgICBBTE9HRCgiSW1wbDo6aW5pdCAtLSBHQlMgc3RhcnQgZmFpbGVkIik7CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICAgICAgbUFsbG9jYXRvck11dGV4LmxvY2soKTsKKyAgICAgICAgYzJfc3RhdHVzX3QgYzJlcnIgPSBHZXRDb2RlYzJQbGF0Zm9ybUFsbG9jYXRvclN0b3JlKCktPmZldGNoQWxsb2NhdG9yKAorICAgICAgICAgICAgICAgIEMyQWxsb2NhdG9yU3RvcmU6OlBMQVRGT1JNX1NUQVJUICsgMSwgIC8vIEdSQUxMT0MKKyAgICAgICAgICAgICAgICAmbUFsbG9jYXRvcik7CisgICAgICAgIG1BbGxvY2F0b3JNdXRleC51bmxvY2soKTsKKyAgICAgICAgaWYgKGMyZXJyICE9IE9LKSB7CisgICAgICAgICAgICBBTE9HRCgiSW1wbDo6aW5pdCAtLSBmYWlsZWQgdG8gZmV0Y2ggZ3JhbGxvYyBhbGxvY2F0b3I6ICVkIiwgYzJlcnIpOworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKworICAgIC8vIEZyb20gQ29tcG9uZW50V3JhcHBlcgorICAgIHZpcnR1YWwgc3RhdHVzX3Qgc3VibWl0QnVmZmVyKAorICAgICAgICAgICAgaW50MzJfdCBidWZmZXJJZCwKKyAgICAgICAgICAgIGNvbnN0IHNwPEdyYXBoaWNCdWZmZXI+JiBidWZmZXIsCisgICAgICAgICAgICBpbnQ2NF90IHRpbWVzdGFtcCwKKyAgICAgICAgICAgIGludCBmZW5jZUZkKSBvdmVycmlkZSB7CisgICAgICAgIEFMT0dWKCJJbXBsOjpzdWJtaXRCdWZmZXIgLS0gYnVmZmVySWQgPSAlZCIsIGJ1ZmZlcklkKTsKKyAgICAgICAgLy8gVE9ETzogVXNlIGZkIHRvIGNvbnN0cnVjdCBmZW5jZQorICAgICAgICAodm9pZClmZW5jZUZkOworCisgICAgICAgIHN0ZDo6c2hhcmVkX3B0cjxDMkdyYXBoaWNBbGxvY2F0aW9uPiBhbGxvYzsKKyAgICAgICAgQzJIYW5kbGUqIGhhbmRsZSA9IFdyYXBOYXRpdmVDb2RlYzJHcmFsbG9jSGFuZGxlKAorICAgICAgICAgICAgICAgIG5hdGl2ZV9oYW5kbGVfY2xvbmUoYnVmZmVyLT5oYW5kbGUpLAorICAgICAgICAgICAgICAgIGJ1ZmZlci0+d2lkdGgsIGJ1ZmZlci0+aGVpZ2h0LAorICAgICAgICAgICAgICAgIGJ1ZmZlci0+Zm9ybWF0LCBidWZmZXItPnVzYWdlLCBidWZmZXItPnN0cmlkZSk7CisgICAgICAgIG1BbGxvY2F0b3JNdXRleC5sb2NrKCk7CisgICAgICAgIGMyX3N0YXR1c190IGVyciA9IG1BbGxvY2F0b3ItPnByaW9yR3JhcGhpY0FsbG9jYXRpb24oaGFuZGxlLCAmYWxsb2MpOworICAgICAgICBtQWxsb2NhdG9yTXV0ZXgudW5sb2NrKCk7CisgICAgICAgIGlmIChlcnIgIT0gT0spIHsKKyAgICAgICAgICAgIHJldHVybiBVTktOT1dOX0VSUk9SOworICAgICAgICB9CisgICAgICAgIHN0ZDo6c2hhcmVkX3B0cjxDMkdyYXBoaWNCbG9jaz4gYmxvY2sgPQorICAgICAgICAgICAgICAgIF9DMkJsb2NrRmFjdG9yeTo6Q3JlYXRlR3JhcGhpY0Jsb2NrKGFsbG9jKTsKKworICAgICAgICBzdGQ6OnVuaXF1ZV9wdHI8QzJXb3JrPiB3b3JrKG5ldyBDMldvcmspOworICAgICAgICB3b3JrLT5pbnB1dC5mbGFncyA9IChDMkZyYW1lRGF0YTo6ZmxhZ3NfdCkwOworICAgICAgICB3b3JrLT5pbnB1dC5vcmRpbmFsLnRpbWVzdGFtcCA9IHRpbWVzdGFtcDsKKyAgICAgICAgd29yay0+aW5wdXQub3JkaW5hbC5mcmFtZUluZGV4ID0gbUZyYW1lSW5kZXguZmV0Y2hfYWRkKAorICAgICAgICAgICAgICAgIDEsIHN0ZDo6bWVtb3J5X29yZGVyX3JlbGF4ZWQpOworICAgICAgICB3b3JrLT5pbnB1dC5idWZmZXJzLmNsZWFyKCk7CisgICAgICAgIHN0ZDo6c2hhcmVkX3B0cjxDMkJ1ZmZlcj4gYzJCdWZmZXIoCisgICAgICAgICAgICAgICAgLy8gVE9ETzogZmVuY2UKKyAgICAgICAgICAgICAgICBuZXcgQnVmZmVyMkQoYmxvY2stPnNoYXJlKAorICAgICAgICAgICAgICAgICAgICAgICAgQzJSZWN0KGJsb2NrLT53aWR0aCgpLCBibG9jay0+aGVpZ2h0KCkpLCA6OkMyRmVuY2UoKSkpLAorICAgICAgICAgICAgICAgIFtidWZmZXJJZCwgc3JjID0gbVNvdXJjZV0oQzJCdWZmZXIqIHB0cikgeworICAgICAgICAgICAgICAgICAgICBkZWxldGUgcHRyOworICAgICAgICAgICAgICAgICAgICBzcDxHcmFwaGljQnVmZmVyU291cmNlPiBzb3VyY2UgPSBzcmMucHJvbW90ZSgpOworICAgICAgICAgICAgICAgICAgICBpZiAoc291cmNlICE9IG51bGxwdHIpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIFRPRE86IGZlbmNlCisgICAgICAgICAgICAgICAgICAgICAgICAodm9pZClzb3VyY2UtPm9uSW5wdXRCdWZmZXJFbXB0aWVkKGJ1ZmZlcklkLCAtMSk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9KTsKKyAgICAgICAgd29yay0+aW5wdXQuYnVmZmVycy5wdXNoX2JhY2soYzJCdWZmZXIpOworICAgICAgICB3b3JrLT53b3JrbGV0cy5jbGVhcigpOworICAgICAgICB3b3JrLT53b3JrbGV0cy5lbXBsYWNlX2JhY2sobmV3IEMyV29ya2xldCk7CisgICAgICAgIHN0ZDo6bGlzdDxzdGQ6OnVuaXF1ZV9wdHI8QzJXb3JrPj4gaXRlbXM7CisgICAgICAgIGl0ZW1zLnB1c2hfYmFjayhzdGQ6Om1vdmUod29yaykpOworCisgICAgICAgIGVyciA9IGNvbXBRdWV1ZSgmaXRlbXMpOworICAgICAgICByZXR1cm4gKGVyciA9PSBDMl9PSykgPyBPSyA6IFVOS05PV05fRVJST1I7CisgICAgfQorCisgICAgdmlydHVhbCBzdGF0dXNfdCBzdWJtaXRFb3MoaW50MzJfdCAvKiBidWZmZXJJZCAqLykgb3ZlcnJpZGUgeworICAgICAgICBBTE9HVigiSW1wbDo6c3VibWl0RW9zIik7CisKKyAgICAgICAgc3RkOjp1bmlxdWVfcHRyPEMyV29yaz4gd29yayhuZXcgQzJXb3JrKTsKKyAgICAgICAgd29yay0+aW5wdXQuZmxhZ3MgPSAoQzJGcmFtZURhdGE6OmZsYWdzX3QpMDsKKyAgICAgICAgd29yay0+aW5wdXQub3JkaW5hbC5mcmFtZUluZGV4ID0gbUZyYW1lSW5kZXguZmV0Y2hfYWRkKAorICAgICAgICAgICAgICAgIDEsIHN0ZDo6bWVtb3J5X29yZGVyX3JlbGF4ZWQpOworICAgICAgICB3b3JrLT5pbnB1dC5idWZmZXJzLmNsZWFyKCk7CisgICAgICAgIHdvcmstPndvcmtsZXRzLmNsZWFyKCk7CisgICAgICAgIHdvcmstPndvcmtsZXRzLmVtcGxhY2VfYmFjayhuZXcgQzJXb3JrbGV0KTsKKyAgICAgICAgc3RkOjpsaXN0PHN0ZDo6dW5pcXVlX3B0cjxDMldvcms+PiBpdGVtczsKKyAgICAgICAgaXRlbXMucHVzaF9iYWNrKHN0ZDo6bW92ZSh3b3JrKSk7CisKKyAgICAgICAgYzJfc3RhdHVzX3QgZXJyID0gY29tcFF1ZXVlKCZpdGVtcyk7CisgICAgICAgIHJldHVybiAoZXJyID09IEMyX09LKSA/IE9LIDogVU5LTk9XTl9FUlJPUjsKKyAgICB9CisKKyAgICB2b2lkIGRpc3BhdGNoRGF0YVNwYWNlQ2hhbmdlZCgKKyAgICAgICAgICAgIGludDMyX3QgZGF0YVNwYWNlLCBpbnQzMl90IGFzcGVjdHMsIGludDMyX3QgcGl4ZWxGb3JtYXQpIG92ZXJyaWRlIHsKKyAgICAgICAgLy8gVE9ETworICAgICAgICAodm9pZClkYXRhU3BhY2U7CisgICAgICAgICh2b2lkKWFzcGVjdHM7CisgICAgICAgICh2b2lkKXBpeGVsRm9ybWF0OworICAgIH0KKworcHJpdmF0ZToKKyAgICBjMl9zdGF0dXNfdCBjb21wUXVlcnkoCisgICAgICAgICAgICBjb25zdCBzdGQ6OnZlY3RvcjxDMlBhcmFtKj4gJnN0YWNrUGFyYW1zLAorICAgICAgICAgICAgY29uc3Qgc3RkOjp2ZWN0b3I8QzJQYXJhbTo6SW5kZXg+ICZoZWFwUGFyYW1JbmRpY2VzLAorICAgICAgICAgICAgYzJfYmxvY2tpbmdfdCBtYXlCbG9jaywKKyAgICAgICAgICAgIHN0ZDo6dmVjdG9yPHN0ZDo6dW5pcXVlX3B0cjxDMlBhcmFtPj4qIGNvbnN0IGhlYXBQYXJhbXMpIHsKKyAgICAgICAgc3RkOjpzaGFyZWRfcHRyPEMyQ29tcG9uZW50PiBjb21wID0gbUNvbXAubG9jaygpOworICAgICAgICBpZiAoY29tcCkgeworICAgICAgICAgICAgc3RkOjpzaGFyZWRfcHRyPEMyQ29tcG9uZW50SW50ZXJmYWNlPiBpbnRmID0gY29tcC0+aW50ZigpOworICAgICAgICAgICAgaWYgKGludGYpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gaW50Zi0+cXVlcnlfdmIoc3RhY2tQYXJhbXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlYXBQYXJhbUluZGljZXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1heUJsb2NrLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWFwUGFyYW1zKTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgQUxPR0QoImNvbXBRdWVyeSAtLSBjb21wb25lbnQgZG9lcyBub3QgaGF2ZSBhbiBpbnRlcmZhY2UuIik7CisgICAgICAgICAgICAgICAgcmV0dXJuIEMyX0JBRF9TVEFURTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBpZiAoIW1SZW1vdGVDb21wKSB7CisgICAgICAgICAgICBBTE9HRCgiY29tcFF1ZXJ5IC0tIGNvbXBvbmVudCBubyBsb25nZXIgZXhpc3RzLiIpOworICAgICAgICAgICAgcmV0dXJuIEMyX0JBRF9TVEFURTsKKyAgICAgICAgfQorCisgICAgICAgIGhpZGxfdmVjPFBhcmFtSW5kZXg+IGluZGljZXMoCisgICAgICAgICAgICAgICAgc3RhY2tQYXJhbXMuc2l6ZSgpICsgaGVhcFBhcmFtSW5kaWNlcy5zaXplKCkpOworICAgICAgICBzaXplX3QgbnVtSW5kaWNlcyA9IDA7CisgICAgICAgIGZvciAoQzJQYXJhbSogY29uc3QmIHN0YWNrUGFyYW0gOiBzdGFja1BhcmFtcykgeworICAgICAgICAgICAgaWYgKCFzdGFja1BhcmFtKSB7CisgICAgICAgICAgICAgICAgQUxPR0QoImNvbXBRdWVyeSAtLSBudWxsIHN0YWNrIHBhcmFtIGVuY291bnRlcmVkLiIpOworICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaW5kaWNlc1tudW1JbmRpY2VzKytdID0gc3RhdGljX2Nhc3Q8UGFyYW1JbmRleD4oc3RhY2tQYXJhbS0+aW5kZXgoKSk7CisgICAgICAgIH0KKyAgICAgICAgc2l6ZV90IG51bVN0YWNrSW5kaWNlcyA9IG51bUluZGljZXM7CisgICAgICAgIGZvciAoY29uc3QgQzJQYXJhbTo6SW5kZXgmIGluZGV4IDogaGVhcFBhcmFtSW5kaWNlcykgeworICAgICAgICAgICAgaW5kaWNlc1tudW1JbmRpY2VzKytdID0KKyAgICAgICAgICAgICAgICAgICAgc3RhdGljX2Nhc3Q8UGFyYW1JbmRleD4oc3RhdGljX2Nhc3Q8dWludDMyX3Q+KGluZGV4KSk7CisgICAgICAgIH0KKyAgICAgICAgaW5kaWNlcy5yZXNpemUobnVtSW5kaWNlcyk7CisgICAgICAgIGlmIChoZWFwUGFyYW1zKSB7CisgICAgICAgICAgICBoZWFwUGFyYW1zLT5yZXNlcnZlKGhlYXBQYXJhbXMtPnNpemUoKSArIG51bUluZGljZXMpOworICAgICAgICB9CisgICAgICAgIGMyX3N0YXR1c190IHN0YXR1czsKKyAgICAgICAgUmV0dXJuPHZvaWQ+IHRyYW5zU3RhdHVzID0gbVJlbW90ZUNvbXAtPnF1ZXJ5KAorICAgICAgICAgICAgICAgIGluZGljZXMsCisgICAgICAgICAgICAgICAgbWF5QmxvY2sgPT0gQzJfTUFZX0JMT0NLLAorICAgICAgICAgICAgICAgIFsmc3RhdHVzLCAmbnVtU3RhY2tJbmRpY2VzLCAmc3RhY2tQYXJhbXMsIGhlYXBQYXJhbXNdKAorICAgICAgICAgICAgICAgICAgICAgICAgU3RhdHVzIHMsIGNvbnN0IFBhcmFtcyYgcCkgeworICAgICAgICAgICAgICAgICAgICBzdGF0dXMgPSBzdGF0aWNfY2FzdDxjMl9zdGF0dXNfdD4ocyk7CisgICAgICAgICAgICAgICAgICAgIGlmIChzdGF0dXMgIT0gQzJfT0sgJiYgc3RhdHVzICE9IEMyX0JBRF9JTkRFWCkgeworICAgICAgICAgICAgICAgICAgICAgICAgQUxPR0QoImNvbXBRdWVyeSAtLSBjYWxsIGZhaWxlZDogJXMuIiwgYXNTdHJpbmcoc3RhdHVzKSk7CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgc3RkOjp2ZWN0b3I8QzJQYXJhbSo+IHBhcmFtUG9pbnRlcnM7CisgICAgICAgICAgICAgICAgICAgIGMyX3N0YXR1c190IHBhcnNlU3RhdHVzID0gcGFyc2VQYXJhbXNCbG9iKCZwYXJhbVBvaW50ZXJzLCBwKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKHBhcnNlU3RhdHVzICE9IEMyX09LKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBBTE9HRCgiY29tcFF1ZXJ5IC0tIGVycm9yIHdoaWxlIHBhcnNpbmcgcGFyYW1zOiAlcy4iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXNTdHJpbmcocGFyc2VTdGF0dXMpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHN0YXR1cyA9IHBhcnNlU3RhdHVzOworICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIHNpemVfdCBpID0gMDsKKyAgICAgICAgICAgICAgICAgICAgZm9yIChhdXRvIGl0ID0gcGFyYW1Qb2ludGVycy5iZWdpbigpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGl0ICE9IHBhcmFtUG9pbnRlcnMuZW5kKCk7ICkgeworICAgICAgICAgICAgICAgICAgICAgICAgQzJQYXJhbSogcGFyYW1Qb2ludGVyID0gKml0OworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG51bVN0YWNrSW5kaWNlcyA+IDApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLW51bVN0YWNrSW5kaWNlczsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXBhcmFtUG9pbnRlcikgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBTE9HRCgiY29tcFF1ZXJ5IC0tIG51bGwgc3RhY2sgcGFyYW0uIik7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsraXQ7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKDsgaSA8IHN0YWNrUGFyYW1zLnNpemUoKSAmJgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIXN0YWNrUGFyYW1zW2ldOyApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKytpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBDSEVDSyhpIDwgc3RhY2tQYXJhbXMuc2l6ZSgpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoc3RhY2tQYXJhbXNbaV0tPmluZGV4KCkgIT0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcmFtUG9pbnRlci0+aW5kZXgoKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBTE9HRCgiY29tcFF1ZXJ5IC0tIHBhcmFtIHNraXBwZWQuIGluZGV4ID0gJWQiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0aWNfY2FzdDxpbnQ+KAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGFja1BhcmFtc1tpXS0+aW5kZXgoKSkpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGFja1BhcmFtc1tpKytdLT5pbnZhbGlkYXRlKCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXN0YWNrUGFyYW1zW2krK10tPnVwZGF0ZUZyb20oKnBhcmFtUG9pbnRlcikpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQUxPR0QoImNvbXBRdWVyeSAtLSBwYXJhbSB1cGRhdGUgZmFpbGVkOiAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJpbmRleCA9ICVkLiIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRpY19jYXN0PGludD4ocGFyYW1Qb2ludGVyLT5pbmRleCgpKSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXBhcmFtUG9pbnRlcikgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBTE9HRCgiY29tcFF1ZXJ5IC0tIG51bGwgaGVhcCBwYXJhbS4iKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKytpdDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghaGVhcFBhcmFtcykgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBTE9HRCgiY29tcFF1ZXJ5IC0tIHRvbyBtYW55IHN0YWNrIHBhcmFtcy4iKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlYXBQYXJhbXMtPmVtcGxhY2VfYmFjayhDMlBhcmFtOjpDb3B5KCpwYXJhbVBvaW50ZXIpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgICsraXQ7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9KTsKKyAgICAgICAgaWYgKCF0cmFuc1N0YXR1cy5pc09rKCkpIHsKKyAgICAgICAgICAgIEFMT0dEKCJjb21wUXVlcnkgLS0gdHJhbnNhY3Rpb24gZmFpbGVkLiIpOworICAgICAgICAgICAgcmV0dXJuIEMyX0NPUlJVUFRFRDsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gc3RhdHVzOworICAgIH0KKworICAgIGMyX3N0YXR1c190IGNvbXBRdWV1ZShzdGQ6Omxpc3Q8c3RkOjp1bmlxdWVfcHRyPEMyV29yaz4+KiBjb25zdCBpdGVtcykgeworICAgICAgICBzdGQ6OnNoYXJlZF9wdHI8QzJDb21wb25lbnQ+IGNvbXAgPSBtQ29tcC5sb2NrKCk7CisgICAgICAgIGlmIChjb21wKSB7CisgICAgICAgICAgICByZXR1cm4gY29tcC0+cXVldWVfbmIoaXRlbXMpOworICAgICAgICB9CisKKyAgICAgICAgV29ya0J1bmRsZSB3b3JrQnVuZGxlOworICAgICAgICBTdGF0dXMgaGlkbFN0YXR1cyA9IG9iamNweSgmd29ya0J1bmRsZSwgKml0ZW1zLCBudWxscHRyKTsKKyAgICAgICAgaWYgKGhpZGxTdGF0dXMgIT0gU3RhdHVzOjpPSykgeworICAgICAgICAgICAgQUxPR0QoImNvbXBRdWV1ZSAtLSBiYWQgaW5wdXQuIik7CisgICAgICAgICAgICByZXR1cm4gQzJfQ09SUlVQVEVEOworICAgICAgICB9CisgICAgICAgIFJldHVybjxTdGF0dXM+IHRyYW5zU3RhdHVzID0gbVJlbW90ZUNvbXAtPnF1ZXVlKHdvcmtCdW5kbGUpOworICAgICAgICBpZiAoIXRyYW5zU3RhdHVzLmlzT2soKSkgeworICAgICAgICAgICAgQUxPR0QoImNvbXBRdWV1ZSAtLSB0cmFuc2FjdGlvbiBmYWlsZWQuIik7CisgICAgICAgICAgICByZXR1cm4gQzJfQ09SUlVQVEVEOworICAgICAgICB9CisgICAgICAgIGMyX3N0YXR1c190IHN0YXR1cyA9CisgICAgICAgICAgICAgICAgc3RhdGljX2Nhc3Q8YzJfc3RhdHVzX3Q+KHN0YXRpY19jYXN0PFN0YXR1cz4odHJhbnNTdGF0dXMpKTsKKyAgICAgICAgaWYgKHN0YXR1cyAhPSBDMl9PSykgeworICAgICAgICAgICAgQUxPR1YoImNvbXBRdWV1ZSAtLSBjYWxsIGZhaWxlZDogJXMuIiwgYXNTdHJpbmcoc3RhdHVzKSk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHN0YXR1czsKKyAgICB9CisKKyAgICB3cDxHcmFwaGljQnVmZmVyU291cmNlPiBtU291cmNlOworICAgIHN0ZDo6d2Vha19wdHI8QzJDb21wb25lbnQ+IG1Db21wOworICAgIHNwPElDb21wb25lbnQ+IG1SZW1vdGVDb21wOworICAgIHN0ZDo6c3RyaW5nIG1Db21wTmFtZTsKKworICAgIC8vIE5lZWRlZCBmb3IgQ29tcG9uZW50V3JhcHBlciBpbXBsZW1lbnRhdGlvbgorICAgIHN0ZDo6bXV0ZXggbUFsbG9jYXRvck11dGV4OworICAgIHN0ZDo6c2hhcmVkX3B0cjxDMkFsbG9jYXRvcj4gbUFsbG9jYXRvcjsKKyAgICBzdGQ6OmF0b21pY191aW50NjRfdCBtRnJhbWVJbmRleDsKK307CisKK0lucHV0U3VyZmFjZUNvbm5lY3Rpb246OklucHV0U3VyZmFjZUNvbm5lY3Rpb24oCisgICAgICAgIGNvbnN0IHNwPEdyYXBoaWNCdWZmZXJTb3VyY2U+JiBzb3VyY2UsCisgICAgICAgIGNvbnN0IHN0ZDo6c2hhcmVkX3B0cjxDMkNvbXBvbmVudD4mIGNvbXApIDoKKyAgICBtU291cmNlKHNvdXJjZSksCisgICAgbUltcGwobmV3IEltcGwoc291cmNlLCBjb21wKSkgeworfQorCitJbnB1dFN1cmZhY2VDb25uZWN0aW9uOjpJbnB1dFN1cmZhY2VDb25uZWN0aW9uKAorICAgICAgICBjb25zdCBzcDxHcmFwaGljQnVmZmVyU291cmNlPiYgc291cmNlLAorICAgICAgICBjb25zdCBzcDxJQ29tcG9uZW50PiYgY29tcCkgOgorICAgIG1Tb3VyY2Uoc291cmNlKSwKKyAgICBtSW1wbChuZXcgSW1wbChzb3VyY2UsIGNvbXApKSB7Cit9CisKK0lucHV0U3VyZmFjZUNvbm5lY3Rpb246On5JbnB1dFN1cmZhY2VDb25uZWN0aW9uKCkgeworICAgIGlmIChtU291cmNlKSB7CisgICAgICAgICh2b2lkKW1Tb3VyY2UtPnN0b3AoKTsKKyAgICAgICAgKHZvaWQpbVNvdXJjZS0+cmVsZWFzZSgpOworICAgICAgICBtU291cmNlLmNsZWFyKCk7CisgICAgfQorICAgIG1JbXBsLmNsZWFyKCk7Cit9CisKK2Jvb2wgSW5wdXRTdXJmYWNlQ29ubmVjdGlvbjo6aW5pdCgpIHsKKyAgICBtTXV0ZXgubG9jaygpOworICAgIHNwPEltcGw+IGltcGwgPSBtSW1wbDsKKyAgICBtTXV0ZXgudW5sb2NrKCk7CisKKyAgICBpZiAoIWltcGwpIHsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAgICByZXR1cm4gaW1wbC0+aW5pdCgpOworfQorCitSZXR1cm48U3RhdHVzPiBJbnB1dFN1cmZhY2VDb25uZWN0aW9uOjpkaXNjb25uZWN0KCkgeworICAgIEFMT0dWKCJkaXNjb25uZWN0Iik7CisgICAgbU11dGV4LmxvY2soKTsKKyAgICBpZiAobVNvdXJjZSkgeworICAgICAgICAodm9pZCltU291cmNlLT5zdG9wKCk7CisgICAgICAgICh2b2lkKW1Tb3VyY2UtPnJlbGVhc2UoKTsKKyAgICAgICAgbVNvdXJjZS5jbGVhcigpOworICAgIH0KKyAgICBtSW1wbC5jbGVhcigpOworICAgIG1NdXRleC51bmxvY2soKTsKKyAgICBBTE9HVigiZGlzY29ubmVjdGVkIik7CisgICAgcmV0dXJuIFN0YXR1czo6T0s7Cit9CisKK30gIC8vIG5hbWVzcGFjZSB1dGlscworfSAgLy8gbmFtZXNwYWNlIFYxXzAKK30gIC8vIG5hbWVzcGFjZSBjMgorfSAgLy8gbmFtZXNwYWNlIG1lZGlhCit9ICAvLyBuYW1lc3BhY2UgaGFyZHdhcmUKK30gIC8vIG5hbWVzcGFjZSBhbmRyb2lkCisKZGlmZiAtLWdpdCBhL21lZGlhL2NvZGVjMi9oaWRsLzEuMC91dGlscy9pbmNsdWRlL2NvZGVjMi9oaWRsLzEuMC9Db21wb25lbnQuaCBiL21lZGlhL2NvZGVjMi9oaWRsLzEuMC91dGlscy9pbmNsdWRlL2NvZGVjMi9oaWRsLzEuMC9Db21wb25lbnQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zNmRlYzFjCi0tLSAvZGV2L251bGwKKysrIGIvbWVkaWEvY29kZWMyL2hpZGwvMS4wL3V0aWxzL2luY2x1ZGUvY29kZWMyL2hpZGwvMS4wL0NvbXBvbmVudC5oCkBAIC0wLDAgKzEsMTc0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE4IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KKworI2lmbmRlZiBDT0RFQzJfSElETF9WMV8wX1VUSUxTX0NPTVBPTkVOVF9ICisjZGVmaW5lIENPREVDMl9ISURMX1YxXzBfVVRJTFNfQ09NUE9ORU5UX0gKKworI2luY2x1ZGUgPGNvZGVjMi9oaWRsLzEuMC9Db25maWd1cmFibGUuaD4KKyNpbmNsdWRlIDxjb2RlYzIvaGlkbC8xLjAvdHlwZXMuaD4KKworI2luY2x1ZGUgPGFuZHJvaWQvaGFyZHdhcmUvbWVkaWEvYnVmZmVycG9vbC8xLjAvSUNsaWVudE1hbmFnZXIuaD4KKyNpbmNsdWRlIDxhbmRyb2lkL2hhcmR3YXJlL21lZGlhL2MyLzEuMC9JQ29tcG9uZW50TGlzdGVuZXIuaD4KKyNpbmNsdWRlIDxhbmRyb2lkL2hhcmR3YXJlL21lZGlhL2MyLzEuMC9JQ29tcG9uZW50U3RvcmUuaD4KKyNpbmNsdWRlIDxhbmRyb2lkL2hhcmR3YXJlL21lZGlhL2MyLzEuMC9JQ29tcG9uZW50Lmg+CisjaW5jbHVkZSA8aGlkbC9TdGF0dXMuaD4KKyNpbmNsdWRlIDxod2JpbmRlci9JQmluZGVyLmg+CisKKyNpbmNsdWRlIDxDMkNvbXBvbmVudC5oPgorI2luY2x1ZGUgPEMyQnVmZmVyLmg+CisjaW5jbHVkZSA8QzIuaD4KKworI2luY2x1ZGUgPGxpc3Q+CisjaW5jbHVkZSA8bWFwPgorI2luY2x1ZGUgPG1lbW9yeT4KKworbmFtZXNwYWNlIGFuZHJvaWQgeworbmFtZXNwYWNlIGhhcmR3YXJlIHsKK25hbWVzcGFjZSBtZWRpYSB7CituYW1lc3BhY2UgYzIgeworbmFtZXNwYWNlIFYxXzAgeworbmFtZXNwYWNlIHV0aWxzIHsKKwordXNpbmcgOjphbmRyb2lkOjpoYXJkd2FyZTo6aGlkbF9hcnJheTsKK3VzaW5nIDo6YW5kcm9pZDo6aGFyZHdhcmU6OmhpZGxfbWVtb3J5OwordXNpbmcgOjphbmRyb2lkOjpoYXJkd2FyZTo6aGlkbF9zdHJpbmc7Cit1c2luZyA6OmFuZHJvaWQ6OmhhcmR3YXJlOjpoaWRsX3ZlYzsKK3VzaW5nIDo6YW5kcm9pZDo6aGFyZHdhcmU6OlJldHVybjsKK3VzaW5nIDo6YW5kcm9pZDo6aGFyZHdhcmU6OlZvaWQ7Cit1c2luZyA6OmFuZHJvaWQ6OmhhcmR3YXJlOjpJQmluZGVyOwordXNpbmcgOjphbmRyb2lkOjpzcDsKK3VzaW5nIDo6YW5kcm9pZDo6d3A7CisKK3N0cnVjdCBDb21wb25lbnRTdG9yZTsKKworc3RydWN0IENvbXBvbmVudEludGVyZmFjZSA6IHB1YmxpYyBDb25maWd1cmFibGU8SUNvbXBvbmVudEludGVyZmFjZT4geworICAgIENvbXBvbmVudEludGVyZmFjZSgKKyAgICAgICAgICAgIGNvbnN0IHN0ZDo6c2hhcmVkX3B0cjxDMkNvbXBvbmVudEludGVyZmFjZT4mIGludGVyZmFjZSwKKyAgICAgICAgICAgIGNvbnN0IHNwPENvbXBvbmVudFN0b3JlPiYgc3RvcmUpOworICAgIGMyX3N0YXR1c190IHN0YXR1cygpIGNvbnN0OworCitwcm90ZWN0ZWQ6CisgICAgYzJfc3RhdHVzX3QgbUluaXQ7CisgICAgc3RkOjpzaGFyZWRfcHRyPEMyQ29tcG9uZW50SW50ZXJmYWNlPiBtSW50ZXJmYWNlOworICAgIHNwPENvbXBvbmVudFN0b3JlPiBtU3RvcmU7Cit9OworCitzdHJ1Y3QgQ29tcG9uZW50IDogcHVibGljIENvbmZpZ3VyYWJsZTxJQ29tcG9uZW50PiB7CisgICAgQ29tcG9uZW50KAorICAgICAgICAgICAgY29uc3Qgc3RkOjpzaGFyZWRfcHRyPEMyQ29tcG9uZW50PiYsCisgICAgICAgICAgICBjb25zdCBzcDxJQ29tcG9uZW50TGlzdGVuZXI+JiBsaXN0ZW5lciwKKyAgICAgICAgICAgIGNvbnN0IHNwPENvbXBvbmVudFN0b3JlPiYgc3RvcmUsCisgICAgICAgICAgICBjb25zdCBzcDw6OmFuZHJvaWQ6OmhhcmR3YXJlOjptZWRpYTo6YnVmZmVycG9vbDo6VjFfMDo6CisgICAgICAgICAgICAgICAgSUNsaWVudE1hbmFnZXI+JiBjbGllbnRQb29sTWFuYWdlcik7CisgICAgYzJfc3RhdHVzX3Qgc3RhdHVzKCkgY29uc3Q7CisKKyAgICB0eXBlZGVmIDo6YW5kcm9pZDo6aGFyZHdhcmU6OmdyYXBoaWNzOjpidWZmZXJxdWV1ZTo6VjFfMDo6CisgICAgICAgICAgICBJR3JhcGhpY0J1ZmZlclByb2R1Y2VyIEhHcmFwaGljQnVmZmVyUHJvZHVjZXI7CisKKyAgICAvLyBNZXRob2RzIGZyb20gSUNvbXBvbmVudCBmb2xsb3cuCisgICAgdmlydHVhbCBSZXR1cm48U3RhdHVzPiBxdWV1ZShjb25zdCBXb3JrQnVuZGxlJiB3b3JrQnVuZGxlKSBvdmVycmlkZTsKKyAgICB2aXJ0dWFsIFJldHVybjx2b2lkPiBmbHVzaChmbHVzaF9jYiBfaGlkbF9jYikgb3ZlcnJpZGU7CisgICAgdmlydHVhbCBSZXR1cm48U3RhdHVzPiBkcmFpbihib29sIHdpdGhFb3MpIG92ZXJyaWRlOworICAgIHZpcnR1YWwgUmV0dXJuPFN0YXR1cz4gc2V0T3V0cHV0U3VyZmFjZSgKKyAgICAgICAgICAgIHVpbnQ2NF90IGJsb2NrUG9vbElkLAorICAgICAgICAgICAgY29uc3Qgc3A8SEdyYXBoaWNCdWZmZXJQcm9kdWNlcj4mIHN1cmZhY2UpIG92ZXJyaWRlOworICAgIHZpcnR1YWwgUmV0dXJuPFN0YXR1cz4gY29ubmVjdFRvT214SW5wdXRTdXJmYWNlKAorICAgICAgICAgICAgY29uc3Qgc3A8SEdyYXBoaWNCdWZmZXJQcm9kdWNlcj4mIHByb2R1Y2VyLAorICAgICAgICAgICAgY29uc3Qgc3A8OjphbmRyb2lkOjpoYXJkd2FyZTo6bWVkaWE6Om9teDo6VjFfMDo6CisgICAgICAgICAgICBJR3JhcGhpY0J1ZmZlclNvdXJjZT4mIHNvdXJjZSkgb3ZlcnJpZGU7CisgICAgdmlydHVhbCBSZXR1cm48U3RhdHVzPiBkaXNjb25uZWN0RnJvbUlucHV0U3VyZmFjZSgpIG92ZXJyaWRlOworICAgIHZpcnR1YWwgUmV0dXJuPHZvaWQ+IGNyZWF0ZUJsb2NrUG9vbCgKKyAgICAgICAgICAgIHVpbnQzMl90IGFsbG9jYXRvcklkLAorICAgICAgICAgICAgY3JlYXRlQmxvY2tQb29sX2NiIF9oaWRsX2NiKSBvdmVycmlkZTsKKyAgICB2aXJ0dWFsIFJldHVybjxTdGF0dXM+IGRlc3Ryb3lCbG9ja1Bvb2wodWludDY0X3QgYmxvY2tQb29sSWQpIG92ZXJyaWRlOworICAgIHZpcnR1YWwgUmV0dXJuPFN0YXR1cz4gc3RhcnQoKSBvdmVycmlkZTsKKyAgICB2aXJ0dWFsIFJldHVybjxTdGF0dXM+IHN0b3AoKSBvdmVycmlkZTsKKyAgICB2aXJ0dWFsIFJldHVybjxTdGF0dXM+IHJlc2V0KCkgb3ZlcnJpZGU7CisgICAgdmlydHVhbCBSZXR1cm48U3RhdHVzPiByZWxlYXNlKCkgb3ZlcnJpZGU7CisKK3Byb3RlY3RlZDoKKyAgICBjMl9zdGF0dXNfdCBtSW5pdDsKKyAgICBzdGQ6OnNoYXJlZF9wdHI8QzJDb21wb25lbnQ+IG1Db21wb25lbnQ7CisgICAgc3RkOjpzaGFyZWRfcHRyPEMyQ29tcG9uZW50SW50ZXJmYWNlPiBtSW50ZXJmYWNlOworICAgIHNwPElDb21wb25lbnRMaXN0ZW5lcj4gbUxpc3RlbmVyOworICAgIHNwPENvbXBvbmVudFN0b3JlPiBtU3RvcmU7CisgICAgOjphbmRyb2lkOjpoYXJkd2FyZTo6bWVkaWE6OmMyOjpWMV8wOjp1dGlsczo6RGVmYXVsdEJ1ZmZlclBvb2xTZW5kZXIKKyAgICAgICAgICAgIG1CdWZmZXJQb29sU2VuZGVyOworCisgICAgc3RkOjptdXRleCBtQmxvY2tQb29sc011dGV4OworICAgIC8vIFRoaXMgbWFwIGtlZXBzIEMyQmxvY2tQb29sIG9iamVjdHMgdGhhdCBhcmUgY3JlYXRlZCBieSBjcmVhdGVCbG9ja1Bvb2woKQorICAgIC8vIGFsaXZlLiBUaGVzZSBDMkJsb2NrUG9vbCBvYmplY3RzIGNhbiBiZSBkZWxldGVkIGJ5IGNhbGxpbmcKKyAgICAvLyBkZXN0cm95QmxvY2tQb29sKCksIHJlc2V0KCkgb3IgcmVsZWFzZSgpLCBvciBieSBkZXN0cm95aW5nIHRoZSBjb21wb25lbnQuCisgICAgc3RkOjptYXA8dWludDY0X3QsIHN0ZDo6c2hhcmVkX3B0cjxDMkJsb2NrUG9vbD4+IG1CbG9ja1Bvb2xzOworCisgICAgLy8gVGhpcyBzdHJ1Y3QgaXMgYSBjb21wYXJhYmxlIHdyYXBwZXIgZm9yIElDb21wb25lbnQuCisgICAgLy8KKyAgICAvLyBBbiBJQ29tcG9uZW50IG9iamVjdCBpcyBlaXRoZXIgbG9jYWwgb3IgcmVtb3RlLiBJZiBpdCBpcyBsb2NhbCwgd2UgY2FuCisgICAgLy8gdXNlIHRoZSB1bmRlcmx5aW5nIHBvaW50ZXIgYXMgYSBrZXkuIElmIGl0IGlzIHJlbW90ZSwgd2UgaGF2ZSB0byB1c2UgdGhlCisgICAgLy8gdW5kZXJseWluZyBwb2ludGVyIG9mIHRoZSBhc3NvY2lhdGVkIGJpbmRlciBvYmplY3QgYXMgYSBrZXkuCisgICAgLy8KKyAgICAvLyBTZWUgaW50ZXJmYWNlc0VxdWFsKCkgZm9yIG1vcmUgZGV0YWlsLgorICAgIHN0cnVjdCBJbnRlcmZhY2VLZXkgeworICAgICAgICAvLyBBbiBJbnRlcmZhY2VLZXkgaXMgY29uc3RydWN0ZWQgZnJvbSBJQ29tcG9uZW50LgorICAgICAgICBJbnRlcmZhY2VLZXkoY29uc3Qgc3A8SUNvbXBvbmVudD4mIGNvbXBvbmVudCk7CisgICAgICAgIC8vIG9wZXJhdG9yPCBpcyBkZWZpbmVkIGhlcmUgdG8gY29udHJvbCB0aGUgZGVmYXVsdCBkZWZpbml0aW9uIG9mCisgICAgICAgIC8vIHN0ZDo6bGVzczxJbnRlcmZhY2VLZXk+LCB3aGljaCB3aWxsIGJlIHVzZWQgaW4gdHlwZSBSb3N0ZXIgZGVmaW5lZAorICAgICAgICAvLyBiZWxvdy4KKyAgICAgICAgYm9vbCBvcGVyYXRvcjwoY29uc3QgSW50ZXJmYWNlS2V5JiBvdGhlcikgY29uc3QgeworICAgICAgICAgICAgcmV0dXJuIGlzUmVtb3RlID8KKyAgICAgICAgICAgICAgICAgICAgKG90aGVyLmlzUmVtb3RlID8KKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIHJlbW90ZSAmIHJlbW90ZQorICAgICAgICAgICAgICAgICAgICAgICAgc3RkOjpsZXNzPElCaW5kZXIqPigpKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlbW90ZS51bnNhZmVfZ2V0KCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3RoZXIucmVtb3RlLnVuc2FmZV9nZXQoKSkgOgorICAgICAgICAgICAgICAgICAgICAgICAgLy8gcmVtb3RlICYgbG9jYWwKKyAgICAgICAgICAgICAgICAgICAgICAgIGZhbHNlKSA6CisgICAgICAgICAgICAgICAgICAgIChvdGhlci5pc1JlbW90ZSA/CisgICAgICAgICAgICAgICAgICAgICAgICAvLyBsb2NhbCAmIHJlbW90ZQorICAgICAgICAgICAgICAgICAgICAgICAgdHJ1ZSA6CisgICAgICAgICAgICAgICAgICAgICAgICAvLyBsb2NhbCAmIGxvY2FsCisgICAgICAgICAgICAgICAgICAgICAgICBzdGQ6Omxlc3M8SUNvbXBvbmVudCo+KCkoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9jYWwudW5zYWZlX2dldCgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG90aGVyLmxvY2FsLnVuc2FmZV9nZXQoKSkpOworICAgICAgICB9CisgICAgcHJpdmF0ZToKKyAgICAgICAgYm9vbCBpc1JlbW90ZTsKKyAgICAgICAgd3A8SUJpbmRlcj4gcmVtb3RlOworICAgICAgICB3cDxJQ29tcG9uZW50PiBsb2NhbDsKKyAgICB9OworCisgICAgdHlwZWRlZiBzdGQ6Om1hcDxJbnRlcmZhY2VLZXksIHN0ZDo6d2Vha19wdHI8QzJDb21wb25lbnQ+PiBSb3N0ZXI7CisgICAgdHlwZWRlZiBSb3N0ZXI6OmNvbnN0X2l0ZXJhdG9yIExvY2FsSWQ7CisgICAgTG9jYWxJZCBtTG9jYWxJZDsKKyAgICB2b2lkIHNldExvY2FsSWQoY29uc3QgTG9jYWxJZCYgbG9jYWxJZCk7CisKKyAgICB2b2lkIGluaXRMaXN0ZW5lcihjb25zdCBzcDxDb21wb25lbnQ+JiBzZWxmKTsKKworICAgIHZpcnR1YWwgfkNvbXBvbmVudCgpIG92ZXJyaWRlOworCisgICAgZnJpZW5kIHN0cnVjdCBDb21wb25lbnRTdG9yZTsKKworICAgIHN0cnVjdCBMaXN0ZW5lcjsKK307CisKK30gIC8vIG5hbWVzcGFjZSB1dGlscworfSAgLy8gbmFtZXNwYWNlIFYxXzAKK30gIC8vIG5hbWVzcGFjZSBjMgorfSAgLy8gbmFtZXNwYWNlIG1lZGlhCit9ICAvLyBuYW1lc3BhY2UgaGFyZHdhcmUKK30gIC8vIG5hbWVzcGFjZSBhbmRyb2lkCisKKyNlbmRpZiAgLy8gQ09ERUMyX0hJRExfVjFfMF9VVElMU19DT01QT05FTlRfSApkaWZmIC0tZ2l0IGEvbWVkaWEvY29kZWMyL2hpZGwvMS4wL3V0aWxzL2luY2x1ZGUvY29kZWMyL2hpZGwvMS4wL0NvbXBvbmVudFN0b3JlLmggYi9tZWRpYS9jb2RlYzIvaGlkbC8xLjAvdXRpbHMvaW5jbHVkZS9jb2RlYzIvaGlkbC8xLjAvQ29tcG9uZW50U3RvcmUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41ODIxZThhCi0tLSAvZGV2L251bGwKKysrIGIvbWVkaWEvY29kZWMyL2hpZGwvMS4wL3V0aWxzL2luY2x1ZGUvY29kZWMyL2hpZGwvMS4wL0NvbXBvbmVudFN0b3JlLmgKQEAgLTAsMCArMSwxMjQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTggVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworCisjaWZuZGVmIENPREVDMl9ISURMX1YxXzBfVVRJTFNfQ09NUE9ORU5UU1RPUkVfSAorI2RlZmluZSBDT0RFQzJfSElETF9WMV8wX1VUSUxTX0NPTVBPTkVOVFNUT1JFX0gKKworI2luY2x1ZGUgPGNvZGVjMi9oaWRsLzEuMC9Db21wb25lbnQuaD4KKyNpbmNsdWRlIDxjb2RlYzIvaGlkbC8xLjAvQ29uZmlndXJhYmxlLmg+CisjaW5jbHVkZSA8YW5kcm9pZC9oYXJkd2FyZS9tZWRpYS9jMi8xLjAvSUNvbXBvbmVudFN0b3JlLmg+CisjaW5jbHVkZSA8YW5kcm9pZC9oYXJkd2FyZS9tZWRpYS9idWZmZXJwb29sLzEuMC9JQ2xpZW50TWFuYWdlci5oPgorI2luY2x1ZGUgPGhpZGwvU3RhdHVzLmg+CisKKyNpbmNsdWRlIDxDMkNvbXBvbmVudC5oPgorI2luY2x1ZGUgPEMyUGFyYW0uaD4KKyNpbmNsdWRlIDxDMi5oPgorCisjaW5jbHVkZSA8bWFwPgorI2luY2x1ZGUgPG1lbW9yeT4KKyNpbmNsdWRlIDxtdXRleD4KKyNpbmNsdWRlIDxzZXQ+CisjaW5jbHVkZSA8dmVjdG9yPgorCituYW1lc3BhY2UgYW5kcm9pZCB7CituYW1lc3BhY2UgaGFyZHdhcmUgeworbmFtZXNwYWNlIG1lZGlhIHsKK25hbWVzcGFjZSBjMiB7CituYW1lc3BhY2UgVjFfMCB7CituYW1lc3BhY2UgdXRpbHMgeworCit1c2luZyA6OmFuZHJvaWQ6OmhhcmR3YXJlOjptZWRpYTo6YnVmZmVycG9vbDo6VjFfMDo6SUNsaWVudE1hbmFnZXI7CisKK3VzaW5nIDo6YW5kcm9pZDo6aGFyZHdhcmU6OmhpZGxfYXJyYXk7Cit1c2luZyA6OmFuZHJvaWQ6OmhhcmR3YXJlOjpoaWRsX2hhbmRsZTsKK3VzaW5nIDo6YW5kcm9pZDo6aGFyZHdhcmU6OmhpZGxfbWVtb3J5OwordXNpbmcgOjphbmRyb2lkOjpoYXJkd2FyZTo6aGlkbF9zdHJpbmc7Cit1c2luZyA6OmFuZHJvaWQ6OmhhcmR3YXJlOjpoaWRsX3ZlYzsKK3VzaW5nIDo6YW5kcm9pZDo6aGFyZHdhcmU6OlJldHVybjsKK3VzaW5nIDo6YW5kcm9pZDo6aGFyZHdhcmU6OlZvaWQ7Cit1c2luZyA6OmFuZHJvaWQ6OnNwOwordXNpbmcgOjphbmRyb2lkOjp3cDsKKworc3RydWN0IENvbXBvbmVudFN0b3JlIDogcHVibGljIENvbmZpZ3VyYWJsZTxJQ29tcG9uZW50U3RvcmU+IHsKKyAgICBDb21wb25lbnRTdG9yZShjb25zdCBzdGQ6OnNoYXJlZF9wdHI8QzJDb21wb25lbnRTdG9yZT4mIHN0b3JlKTsKKyAgICB2aXJ0dWFsIH5Db21wb25lbnRTdG9yZSgpID0gZGVmYXVsdDsKKworICAgIGMyX3N0YXR1c190IHN0YXR1cygpIGNvbnN0IHsKKyAgICAgICAgcmV0dXJuIG1Jbml0OworICAgIH0KKworICAgIGMyX3N0YXR1c190IHZhbGlkYXRlU3VwcG9ydGVkUGFyYW1zKAorICAgICAgICAgICAgY29uc3Qgc3RkOjp2ZWN0b3I8c3RkOjpzaGFyZWRfcHRyPEMyUGFyYW1EZXNjcmlwdG9yPj4mIHBhcmFtcyk7CisKKyAgICAvLyBNZXRob2RzIGZyb20gOjphbmRyb2lkOjpoYXJkd2FyZTo6bWVkaWE6OmMyOjpWMV8wOjpJQ29tcG9uZW50U3RvcmUKKyAgICBSZXR1cm48dm9pZD4gY3JlYXRlQ29tcG9uZW50KAorICAgICAgICAgICAgY29uc3QgaGlkbF9zdHJpbmcmIG5hbWUsCisgICAgICAgICAgICBjb25zdCBzcDxJQ29tcG9uZW50TGlzdGVuZXI+JiBsaXN0ZW5lciwKKyAgICAgICAgICAgIGNvbnN0IHNwPElDbGllbnRNYW5hZ2VyPiYgcG9vbCwKKyAgICAgICAgICAgIGNyZWF0ZUNvbXBvbmVudF9jYiBfaGlkbF9jYikgb3ZlcnJpZGU7CisgICAgUmV0dXJuPHZvaWQ+IGNyZWF0ZUludGVyZmFjZSgKKyAgICAgICAgICAgIGNvbnN0IGhpZGxfc3RyaW5nJiBuYW1lLAorICAgICAgICAgICAgY3JlYXRlSW50ZXJmYWNlX2NiIF9oaWRsX2NiKSBvdmVycmlkZTsKKyAgICBSZXR1cm48dm9pZD4gbGlzdENvbXBvbmVudHMobGlzdENvbXBvbmVudHNfY2IgX2hpZGxfY2IpIG92ZXJyaWRlOworICAgIFJldHVybjxzcDxJSW5wdXRTdXJmYWNlPj4gY3JlYXRlSW5wdXRTdXJmYWNlKCkgb3ZlcnJpZGU7CisgICAgUmV0dXJuPHZvaWQ+IGdldFN0cnVjdERlc2NyaXB0b3JzKAorICAgICAgICAgICAgY29uc3QgaGlkbF92ZWM8dWludDMyX3Q+JiBpbmRpY2VzLAorICAgICAgICAgICAgZ2V0U3RydWN0RGVzY3JpcHRvcnNfY2IgX2hpZGxfY2IpIG92ZXJyaWRlOworICAgIFJldHVybjxzcDxJQ2xpZW50TWFuYWdlcj4+IGdldFBvb2xDbGllbnRNYW5hZ2VyKCkgb3ZlcnJpZGU7CisgICAgUmV0dXJuPFN0YXR1cz4gY29weUJ1ZmZlcigKKyAgICAgICAgICAgIGNvbnN0IEJ1ZmZlciYgc3JjLAorICAgICAgICAgICAgY29uc3QgQnVmZmVyJiBkc3QpIG92ZXJyaWRlOworCisgICAgLy8gRGVidWcgZHVtcAorICAgIFJldHVybjx2b2lkPiBkZWJ1ZygKKyAgICAgICAgICAgIGNvbnN0IGhpZGxfaGFuZGxlJiBoYW5kbGUsCisgICAgICAgICAgICBjb25zdCBoaWRsX3ZlYzxoaWRsX3N0cmluZz4mIGFyZ3MpIG92ZXJyaWRlOworCitwcm90ZWN0ZWQ6CisgICAgLy8gZG9lcyBib29ra2VlcGluZyBmb3IgYW4gaW50ZXJmYWNlIHRoYXQgaGFzIGJlZW4gbG9hZGVkCisgICAgdm9pZCBvbkludGVyZmFjZUxvYWRlZChjb25zdCBzdGQ6OnNoYXJlZF9wdHI8QzJDb21wb25lbnRJbnRlcmZhY2U+ICZpbnRmKTsKKworICAgIGMyX3N0YXR1c190IG1Jbml0OworICAgIHN0ZDo6c2hhcmVkX3B0cjxDMkNvbXBvbmVudFN0b3JlPiBtU3RvcmU7CisgICAgc3RkOjpzaGFyZWRfcHRyPEMyUGFyYW1SZWZsZWN0b3I+IG1QYXJhbVJlZmxlY3RvcjsKKworICAgIHN0ZDo6bWFwPEMyUGFyYW06OkNvcmVJbmRleCwgc3RkOjpzaGFyZWRfcHRyPEMyU3RydWN0RGVzY3JpcHRvcj4+IG1TdHJ1Y3REZXNjcmlwdG9yczsKKyAgICBzdGQ6OnNldDxDMlBhcmFtOjpDb3JlSW5kZXg+IG1VbnN1cHBvcnRlZFN0cnVjdERlc2NyaXB0b3JzOworICAgIHN0ZDo6c2V0PEMyU3RyaW5nPiBtTG9hZGVkSW50ZXJmYWNlczsKKyAgICBtdXRhYmxlIHN0ZDo6bXV0ZXggbVN0cnVjdERlc2NyaXB0b3JzTXV0ZXg7CisKKyAgICAvLyBDb21wb25lbnQgbGlmZXRpbWUgbWFuYWdlbWVudAorICAgIENvbXBvbmVudDo6Um9zdGVyIG1Db21wb25lbnRSb3N0ZXI7CisgICAgbXV0YWJsZSBzdGQ6Om11dGV4IG1Db21wb25lbnRSb3N0ZXJNdXRleDsKKyAgICB2b2lkIHJlcG9ydENvbXBvbmVudERlYXRoKGNvbnN0IENvbXBvbmVudDo6TG9jYWxJZCYgY29tcG9uZW50TG9jYWxJZCk7CisKKyAgICBmcmllbmQgQ29tcG9uZW50OworCisgICAgLy8gQzJDb21wb25lbnQgbG9va3VwCisgICAgc3RkOjpzaGFyZWRfcHRyPEMyQ29tcG9uZW50PiBmaW5kQzJDb21wb25lbnQoCisgICAgICAgICAgICBjb25zdCBzcDxJQ29tcG9uZW50PiYgY29tcG9uZW50KSBjb25zdDsKKworICAgIGZyaWVuZCBzdHJ1Y3QgSW5wdXRTdXJmYWNlOworfTsKKworfSAgLy8gbmFtZXNwYWNlIHV0aWxzCit9ICAvLyBuYW1lc3BhY2UgVjFfMAorfSAgLy8gbmFtZXNwYWNlIGMyCit9ICAvLyBuYW1lc3BhY2UgbWVkaWEKK30gIC8vIG5hbWVzcGFjZSBoYXJkd2FyZQorfSAgLy8gbmFtZXNwYWNlIGFuZHJvaWQKKworI2VuZGlmICAvLyBDT0RFQzJfSElETF9WMV8wX1VUSUxTX0NPTVBPTkVOVFNUT1JFX0gKZGlmZiAtLWdpdCBhL21lZGlhL2NvZGVjMi9oaWRsLzEuMC91dGlscy9pbmNsdWRlL2NvZGVjMi9oaWRsLzEuMC9Db25maWd1cmFibGUuaCBiL21lZGlhL2NvZGVjMi9oaWRsLzEuMC91dGlscy9pbmNsdWRlL2NvZGVjMi9oaWRsLzEuMC9Db25maWd1cmFibGUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yZTMzYTZmCi0tLSAvZGV2L251bGwKKysrIGIvbWVkaWEvY29kZWMyL2hpZGwvMS4wL3V0aWxzL2luY2x1ZGUvY29kZWMyL2hpZGwvMS4wL0NvbmZpZ3VyYWJsZS5oCkBAIC0wLDAgKzEsMTU3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE4IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KKworI2lmbmRlZiBDT0RFQzJfSElETF9WMV8wX1VUSUxTX0NPTkZJR1VSQUJMRV9ICisjZGVmaW5lIENPREVDMl9ISURMX1YxXzBfVVRJTFNfQ09ORklHVVJBQkxFX0gKKworI2luY2x1ZGUgPGNvZGVjMi9oaWRsLzEuMC9Db25maWd1cmFibGVDMkludGYuaD4KKworI2luY2x1ZGUgPEMyQ29tcG9uZW50Lmg+CisjaW5jbHVkZSA8QzJQYXJhbS5oPgorI2luY2x1ZGUgPEMyLmg+CisKKyNpbmNsdWRlIDxhbmRyb2lkL2hhcmR3YXJlL21lZGlhL2MyLzEuMC9JQ29uZmlndXJhYmxlLmg+CisjaW5jbHVkZSA8aGlkbC9TdGF0dXMuaD4KKworI2luY2x1ZGUgPG1lbW9yeT4KKworbmFtZXNwYWNlIGFuZHJvaWQgeworbmFtZXNwYWNlIGhhcmR3YXJlIHsKK25hbWVzcGFjZSBtZWRpYSB7CituYW1lc3BhY2UgYzIgeworbmFtZXNwYWNlIFYxXzAgeworbmFtZXNwYWNlIHV0aWxzIHsKKwordXNpbmcgOjphbmRyb2lkOjpoYXJkd2FyZTo6aGlkbF9hcnJheTsKK3VzaW5nIDo6YW5kcm9pZDo6aGFyZHdhcmU6OmhpZGxfbWVtb3J5OwordXNpbmcgOjphbmRyb2lkOjpoYXJkd2FyZTo6aGlkbF9zdHJpbmc7Cit1c2luZyA6OmFuZHJvaWQ6OmhhcmR3YXJlOjpoaWRsX3ZlYzsKK3VzaW5nIDo6YW5kcm9pZDo6aGFyZHdhcmU6OlJldHVybjsKK3VzaW5nIDo6YW5kcm9pZDo6aGFyZHdhcmU6OlZvaWQ7Cit1c2luZyA6OmFuZHJvaWQ6OnNwOworCitzdHJ1Y3QgQ29tcG9uZW50U3RvcmU7CisKKy8qKgorICogSW1wbGVtZW50YXRpb24gb2YgdGhlIElDb25maWd1cmFibGUgaW50ZXJmYWNlIHRoYXQgc3VwcG9ydHMgY2FjaGluZyBvZgorICogc3VwcG9ydGVkIHBhcmFtZXRlcnMgZnJvbSBhIHN1cHBsaWVkIENvbXBvbmVudFN0b3JlLgorICoKKyAqIFRoaXMgaXMgbWFpbmx5IHRoZSBzYW1lIGZvciBhbGwgb2YgdGhlIGNvbmZpZ3VyYWJsZSBDMiBpbnRlcmZhY2VzIHRob3VnaAorICogdGhlcmUgYXJlIHNsaWdodCBkaWZmZXJlbmNlcyBpbiB0aGUgYmxvY2tpbmcgYmVoYXZpb3IuIFRoaXMgaXMgaGFuZGxlZCBpbiB0aGUKKyAqIENvbmZpZ3VyYWJsZUMySW50ZiBpbXBsZW1lbnRhdGlvbnMuCisgKi8KK3N0cnVjdCBDYWNoZWRDb25maWd1cmFibGUgOiBwdWJsaWMgSUNvbmZpZ3VyYWJsZSB7CisgICAgQ2FjaGVkQ29uZmlndXJhYmxlKHN0ZDo6dW5pcXVlX3B0cjxDb25maWd1cmFibGVDMkludGY+JiYgaW50Zik7CisKKyAgICBjMl9zdGF0dXNfdCBpbml0KENvbXBvbmVudFN0b3JlKiBzdG9yZSk7CisKKyAgICAvLyBNZXRob2RzIGZyb20gOjphbmRyb2lkOjpoYXJkd2FyZTo6bWVkaWE6OmMyOjpWMV8wOjpJQ29uZmlndXJhYmxlCisKKyAgICB2aXJ0dWFsIFJldHVybjx2b2lkPiBnZXROYW1lKGdldE5hbWVfY2IgX2hpZGxfY2IpIG92ZXJyaWRlOworCisgICAgdmlydHVhbCBSZXR1cm48dm9pZD4gcXVlcnkoCisgICAgICAgICAgICBjb25zdCBoaWRsX3ZlYzx1aW50MzJfdD4mIGluZGljZXMsCisgICAgICAgICAgICBib29sIG1heUJsb2NrLAorICAgICAgICAgICAgcXVlcnlfY2IgX2hpZGxfY2IpIG92ZXJyaWRlOworCisgICAgdmlydHVhbCBSZXR1cm48dm9pZD4gY29uZmlnKAorICAgICAgICAgICAgY29uc3QgaGlkbF92ZWM8dWludDhfdD4mIGluUGFyYW1zLAorICAgICAgICAgICAgYm9vbCBtYXlCbG9jaywKKyAgICAgICAgICAgIGNvbmZpZ19jYiBfaGlkbF9jYikgb3ZlcnJpZGU7CisKKyAgICB2aXJ0dWFsIFJldHVybjx2b2lkPiBxdWVyeVN1cHBvcnRlZFBhcmFtcygKKyAgICAgICAgICAgIHVpbnQzMl90IHN0YXJ0LAorICAgICAgICAgICAgdWludDMyX3QgY291bnQsCisgICAgICAgICAgICBxdWVyeVN1cHBvcnRlZFBhcmFtc19jYiBfaGlkbF9jYikgb3ZlcnJpZGU7CisKKyAgICB2aXJ0dWFsIFJldHVybjx2b2lkPiBxdWVyeVN1cHBvcnRlZFZhbHVlcygKKyAgICAgICAgICAgIGNvbnN0IGhpZGxfdmVjPEZpZWxkU3VwcG9ydGVkVmFsdWVzUXVlcnk+JiBpbkZpZWxkcywKKyAgICAgICAgICAgIGJvb2wgbWF5QmxvY2ssCisgICAgICAgICAgICBxdWVyeVN1cHBvcnRlZFZhbHVlc19jYiBfaGlkbF9jYikgb3ZlcnJpZGU7CisKK3Byb3RlY3RlZDoKKyAgICAvLyBDb21tb24gQ29kZWMyLjAgaW50ZXJmYWNlIHdyYXBwZXIKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8Q29uZmlndXJhYmxlQzJJbnRmPiBtSW50ZjsKKworICAgIC8vIENhY2hlZCBzdXBwb3J0ZWQgcGFyYW1zCisgICAgc3RkOjp2ZWN0b3I8c3RkOjpzaGFyZWRfcHRyPEMyUGFyYW1EZXNjcmlwdG9yPj4gbVN1cHBvcnRlZFBhcmFtczsKK307CisKKy8qKgorICogVGVtcGxhdGUgdGhhdCBpbXBsZW1lbnRzIHRoZSBgSUNvbmZpZ3VyYWJsZWAgaW50ZXJmYWNlIGZvciBhbiBpbmhlcml0ZWQKKyAqIGludGVyZmFjZS4gQ2xhc3NlcyB0aGF0IGltcGxlbWVudCBhIGNoaWxkIGludGVyZmFjZSBgSWAgb2YgYElDb25maWd1cmFibGVgCisgKiBjYW4gZGVyaXZlIGZyb20gYENvbmZpZ3VyYWJsZTxJPmAuCisgKi8KK3RlbXBsYXRlIDx0eXBlbmFtZSBJPgorc3RydWN0IENvbmZpZ3VyYWJsZSA6IHB1YmxpYyBJIHsKKyAgICBDb25maWd1cmFibGUoY29uc3Qgc3A8Q2FjaGVkQ29uZmlndXJhYmxlPiYgaW50Zik6IG1JbnRmKGludGYpIHsKKyAgICB9CisKKyAgICBjMl9zdGF0dXNfdCBpbml0KENvbXBvbmVudFN0b3JlKiBzdG9yZSkgeworICAgICAgICByZXR1cm4gbUludGYtPmluaXQoc3RvcmUpOworICAgIH0KKworICAgIC8vIE1ldGhvZHMgZnJvbSA6OmFuZHJvaWQ6OmhhcmR3YXJlOjptZWRpYTo6YzI6OlYxXzA6OklDb25maWd1cmFibGUKKworICAgIHVzaW5nIGdldE5hbWVfY2IgPSB0eXBlbmFtZSBJOjpnZXROYW1lX2NiOworICAgIHZpcnR1YWwgUmV0dXJuPHZvaWQ+IGdldE5hbWUoZ2V0TmFtZV9jYiBfaGlkbF9jYikgb3ZlcnJpZGUgeworICAgICAgICByZXR1cm4gbUludGYtPmdldE5hbWUoX2hpZGxfY2IpOworICAgIH0KKworICAgIHVzaW5nIHF1ZXJ5X2NiID0gdHlwZW5hbWUgSTo6cXVlcnlfY2I7CisgICAgdmlydHVhbCBSZXR1cm48dm9pZD4gcXVlcnkoCisgICAgICAgICAgICBjb25zdCBoaWRsX3ZlYzx1aW50MzJfdD4mIGluZGljZXMsCisgICAgICAgICAgICBib29sIG1heUJsb2NrLAorICAgICAgICAgICAgcXVlcnlfY2IgX2hpZGxfY2IpIG92ZXJyaWRlIHsKKyAgICAgICAgcmV0dXJuIG1JbnRmLT5xdWVyeShpbmRpY2VzLCBtYXlCbG9jaywgX2hpZGxfY2IpOworICAgIH0KKworICAgIHVzaW5nIGNvbmZpZ19jYiA9IHR5cGVuYW1lIEk6OmNvbmZpZ19jYjsKKyAgICB2aXJ0dWFsIFJldHVybjx2b2lkPiBjb25maWcoCisgICAgICAgICAgICBjb25zdCBoaWRsX3ZlYzx1aW50OF90PiYgaW5QYXJhbXMsCisgICAgICAgICAgICBib29sIG1heUJsb2NrLAorICAgICAgICAgICAgY29uZmlnX2NiIF9oaWRsX2NiKSBvdmVycmlkZSB7CisgICAgICAgIHJldHVybiBtSW50Zi0+Y29uZmlnKGluUGFyYW1zLCBtYXlCbG9jaywgX2hpZGxfY2IpOworICAgIH0KKworICAgIHVzaW5nIHF1ZXJ5U3VwcG9ydGVkUGFyYW1zX2NiID0gdHlwZW5hbWUgSTo6cXVlcnlTdXBwb3J0ZWRQYXJhbXNfY2I7CisgICAgdmlydHVhbCBSZXR1cm48dm9pZD4gcXVlcnlTdXBwb3J0ZWRQYXJhbXMoCisgICAgICAgICAgICB1aW50MzJfdCBzdGFydCwKKyAgICAgICAgICAgIHVpbnQzMl90IGNvdW50LAorICAgICAgICAgICAgcXVlcnlTdXBwb3J0ZWRQYXJhbXNfY2IgX2hpZGxfY2IpIG92ZXJyaWRlIHsKKyAgICAgICAgcmV0dXJuIG1JbnRmLT5xdWVyeVN1cHBvcnRlZFBhcmFtcyhzdGFydCwgY291bnQsIF9oaWRsX2NiKTsKKyAgICB9CisKKyAgICB1c2luZyBxdWVyeVN1cHBvcnRlZFZhbHVlc19jYiA9IHR5cGVuYW1lIEk6OnF1ZXJ5U3VwcG9ydGVkVmFsdWVzX2NiOworICAgIHZpcnR1YWwgUmV0dXJuPHZvaWQ+IHF1ZXJ5U3VwcG9ydGVkVmFsdWVzKAorICAgICAgICAgICAgY29uc3QgaGlkbF92ZWM8RmllbGRTdXBwb3J0ZWRWYWx1ZXNRdWVyeT4mIGluRmllbGRzLAorICAgICAgICAgICAgYm9vbCBtYXlCbG9jaywKKyAgICAgICAgICAgIHF1ZXJ5U3VwcG9ydGVkVmFsdWVzX2NiIF9oaWRsX2NiKSBvdmVycmlkZSB7CisgICAgICAgIHJldHVybiBtSW50Zi0+cXVlcnlTdXBwb3J0ZWRWYWx1ZXMoaW5GaWVsZHMsIG1heUJsb2NrLCBfaGlkbF9jYik7CisgICAgfQorCitwcm90ZWN0ZWQ6CisgICAgc3A8Q2FjaGVkQ29uZmlndXJhYmxlPiBtSW50ZjsKK307CisKK30gIC8vIG5hbWVzcGFjZSB1dGlscworfSAgLy8gbmFtZXNwYWNlIFYxXzAKK30gIC8vIG5hbWVzcGFjZSBjMgorfSAgLy8gbmFtZXNwYWNlIG1lZGlhCit9ICAvLyBuYW1lc3BhY2UgaGFyZHdhcmUKK30gIC8vIG5hbWVzcGFjZSBhbmRyb2lkCisKKyNlbmRpZiAgLy8gQ09ERUMyX0hJRExfVjFfMF9VVElMU19DT05GSUdVUkFCTEVfSApkaWZmIC0tZ2l0IGEvbWVkaWEvY29kZWMyL2hpZGwvMS4wL3V0aWxzL2luY2x1ZGUvY29kZWMyL2hpZGwvMS4wL0NvbmZpZ3VyYWJsZUMySW50Zi5oIGIvbWVkaWEvY29kZWMyL2hpZGwvMS4wL3V0aWxzL2luY2x1ZGUvY29kZWMyL2hpZGwvMS4wL0NvbmZpZ3VyYWJsZUMySW50Zi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI4ODAxYmIKLS0tIC9kZXYvbnVsbAorKysgYi9tZWRpYS9jb2RlYzIvaGlkbC8xLjAvdXRpbHMvaW5jbHVkZS9jb2RlYzIvaGlkbC8xLjAvQ29uZmlndXJhYmxlQzJJbnRmLmgKQEAgLTAsMCArMSw4MCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxOCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCisKKyNpZm5kZWYgQ09ERUMyX0hJRExfVjFfMF9VVElMU19DT05GSUdVUkFCTEVDMklOVEZfSAorI2RlZmluZSBDT0RFQzJfSElETF9WMV8wX1VUSUxTX0NPTkZJR1VSQUJMRUMySU5URl9ICisKKyNpbmNsdWRlIDxDMldvcmsuaD4KKyNpbmNsdWRlIDxDMkNvbXBvbmVudC5oPgorI2luY2x1ZGUgPEMyUGFyYW0uaD4KKyNpbmNsdWRlIDxDMi5oPgorCisjaW5jbHVkZSA8aGlkbC9IaWRsU3VwcG9ydC5oPgorI2luY2x1ZGUgPHV0aWxzL1N0cm9uZ1BvaW50ZXIuaD4KKyNpbmNsdWRlIDx2ZWN0b3I+CisjaW5jbHVkZSA8bWVtb3J5PgorCituYW1lc3BhY2UgYW5kcm9pZCB7CituYW1lc3BhY2UgaGFyZHdhcmUgeworbmFtZXNwYWNlIG1lZGlhIHsKK25hbWVzcGFjZSBjMiB7CituYW1lc3BhY2UgVjFfMCB7CituYW1lc3BhY2UgdXRpbHMgeworCit1c2luZyA6OmFuZHJvaWQ6OnNwOwordXNpbmcgOjphbmRyb2lkOjpoYXJkd2FyZTo6aGlkbF9zdHJpbmc7Cit1c2luZyA6OmFuZHJvaWQ6OmhhcmR3YXJlOjpoaWRsX3ZlYzsKK3VzaW5nIDo6YW5kcm9pZDo6aGFyZHdhcmU6OlJldHVybjsKK3VzaW5nIDo6YW5kcm9pZDo6aGFyZHdhcmU6OlZvaWQ7CisKKy8qKgorICogQ29tbW9uIENvZGVjIDIuMCBpbnRlcmZhY2Ugd3JhcHBlci4KKyAqLworc3RydWN0IENvbmZpZ3VyYWJsZUMySW50ZiB7CisgICAgQzJTdHJpbmcgZ2V0TmFtZSgpIGNvbnN0IHsgcmV0dXJuIG1OYW1lOyB9CisgICAgLyoqIEMyQ29tcG9uZW50SW50ZXJmYWNlOjpxdWVyeV92YiBzYW5zIHN0YWNrIHBhcmFtcyAqLworICAgIHZpcnR1YWwgYzJfc3RhdHVzX3QgcXVlcnkoCisgICAgICAgICAgICBjb25zdCBzdGQ6OnZlY3RvcjxDMlBhcmFtOjpJbmRleD4gJmluZGljZXMsCisgICAgICAgICAgICBjMl9ibG9ja2luZ190IG1heUJsb2NrLAorICAgICAgICAgICAgc3RkOjp2ZWN0b3I8c3RkOjp1bmlxdWVfcHRyPEMyUGFyYW0+PiogY29uc3QgcGFyYW1zKSBjb25zdCA9IDA7CisgICAgLyoqIEMyQ29tcG9uZW50SW50ZXJmYWNlOjpjb25maWdfdmIgKi8KKyAgICB2aXJ0dWFsIGMyX3N0YXR1c190IGNvbmZpZygKKyAgICAgICAgICAgIGNvbnN0IHN0ZDo6dmVjdG9yPEMyUGFyYW0qPiAmcGFyYW1zLAorICAgICAgICAgICAgYzJfYmxvY2tpbmdfdCBtYXlCbG9jaywKKyAgICAgICAgICAgIHN0ZDo6dmVjdG9yPHN0ZDo6dW5pcXVlX3B0cjxDMlNldHRpbmdSZXN1bHQ+PiogY29uc3QgZmFpbHVyZXMpID0gMDsKKyAgICAvKiogQzJDb21wb25lbnRJbnRlcmZhY2U6OnF1ZXJ5U3VwcG9ydGVkUGFyYW1zX25iICovCisgICAgdmlydHVhbCBjMl9zdGF0dXNfdCBxdWVyeVN1cHBvcnRlZFBhcmFtcygKKyAgICAgICAgICAgIHN0ZDo6dmVjdG9yPHN0ZDo6c2hhcmVkX3B0cjxDMlBhcmFtRGVzY3JpcHRvcj4+KiBjb25zdCBwYXJhbXMpIGNvbnN0ID0gMDsKKyAgICAvKiogQzJDb21wb25lbnRJbnRlcmZhY2U6OnF1ZXJ5U3VwcG9ydGVkUGFyYW1zX25iICovCisgICAgdmlydHVhbCBjMl9zdGF0dXNfdCBxdWVyeVN1cHBvcnRlZFZhbHVlcygKKyAgICAgICAgICAgIHN0ZDo6dmVjdG9yPEMyRmllbGRTdXBwb3J0ZWRWYWx1ZXNRdWVyeT4mIGZpZWxkcywgYzJfYmxvY2tpbmdfdCBtYXlCbG9jaykgY29uc3QgPSAwOworCisgICAgdmlydHVhbCB+Q29uZmlndXJhYmxlQzJJbnRmKCkgPSBkZWZhdWx0OworCisgICAgQ29uZmlndXJhYmxlQzJJbnRmKGNvbnN0IEMyU3RyaW5nJiBuYW1lKSA6IG1OYW1lKG5hbWUpIHt9CisKK3Byb3RlY3RlZDoKKyAgICBDMlN0cmluZyBtTmFtZTsgLyogY2FjaGUgY29tcG9uZW50IG5hbWUgKi8KK307CisKK30gIC8vIG5hbWVzcGFjZSB1dGlscworfSAgLy8gbmFtZXNwYWNlIFYxXzAKK30gIC8vIG5hbWVzcGFjZSBjMgorfSAgLy8gbmFtZXNwYWNlIG1lZGlhCit9ICAvLyBuYW1lc3BhY2UgaGFyZHdhcmUKK30gIC8vIG5hbWVzcGFjZSBhbmRyb2lkCisKKyNlbmRpZiAgLy8gQ09ERUMyX0hJRExfVjFfMF9VVElMU19DT05GSUdVUkFCTEVDMklOVEZfSApkaWZmIC0tZ2l0IGEvbWVkaWEvY29kZWMyL2hpZGwvMS4wL3V0aWxzL2luY2x1ZGUvY29kZWMyL2hpZGwvMS4wL0lucHV0U3VyZmFjZS5oIGIvbWVkaWEvY29kZWMyL2hpZGwvMS4wL3V0aWxzL2luY2x1ZGUvY29kZWMyL2hpZGwvMS4wL0lucHV0U3VyZmFjZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNlZjI1OGUKLS0tIC9kZXYvbnVsbAorKysgYi9tZWRpYS9jb2RlYzIvaGlkbC8xLjAvdXRpbHMvaW5jbHVkZS9jb2RlYzIvaGlkbC8xLjAvSW5wdXRTdXJmYWNlLmgKQEAgLTAsMCArMSwyMDAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTggVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworCisjaWZuZGVmIENPREVDMl9ISURMX1YxXzBfVVRJTFNfSU5QVVRTVVJGQUNFX0gKKyNkZWZpbmUgQ09ERUMyX0hJRExfVjFfMF9VVElMU19JTlBVVFNVUkZBQ0VfSAorCisjaW5jbHVkZSA8Y29kZWMyL2hpZGwvMS4wL0NvbXBvbmVudFN0b3JlLmg+CisKKyNpbmNsdWRlIDxhbmRyb2lkL2hhcmR3YXJlL21lZGlhL2MyLzEuMC9JSW5wdXRTdXJmYWNlLmg+CisjaW5jbHVkZSA8YW5kcm9pZC9oYXJkd2FyZS9tZWRpYS9jMi8xLjAvSUNvbXBvbmVudC5oPgorCisjaW5jbHVkZSA8YW5kcm9pZC9oYXJkd2FyZS9ncmFwaGljcy9idWZmZXJxdWV1ZS8xLjAvSUdyYXBoaWNCdWZmZXJQcm9kdWNlci5oPgorI2luY2x1ZGUgPGFuZHJvaWQvaGFyZHdhcmUvZ3JhcGhpY3MvYnVmZmVycXVldWUvMS4wL0lQcm9kdWNlckxpc3RlbmVyLmg+CisjaW5jbHVkZSA8YW5kcm9pZC9oYXJkd2FyZS9ncmFwaGljcy9jb21tb24vMS4wL3R5cGVzLmg+CisjaW5jbHVkZSA8YW5kcm9pZC9oYXJkd2FyZS9tZWRpYS8xLjAvdHlwZXMuaD4KKworI2luY2x1ZGUgPGd1aS9JR3JhcGhpY0J1ZmZlclByb2R1Y2VyLmg+CisjaW5jbHVkZSA8bWVkaWEvc3RhZ2VmcmlnaHQvYnFoZWxwZXIvR3JhcGhpY0J1ZmZlclNvdXJjZS5oPgorCisjaW5jbHVkZSA8aGlkbC9IaWRsU3VwcG9ydC5oPgorI2luY2x1ZGUgPGhpZGwvU3RhdHVzLmg+CisKK2NsYXNzIEMyUmVmbGVjdG9ySGVscGVyOworCituYW1lc3BhY2UgYW5kcm9pZCB7CituYW1lc3BhY2UgaGFyZHdhcmUgeworbmFtZXNwYWNlIG1lZGlhIHsKK25hbWVzcGFjZSBjMiB7CituYW1lc3BhY2UgVjFfMCB7CituYW1lc3BhY2UgdXRpbHMgeworCit1c2luZyA6OmFuZHJvaWQ6OmhhcmR3YXJlOjpoaWRsX2hhbmRsZTsKK3VzaW5nIDo6YW5kcm9pZDo6aGFyZHdhcmU6OmhpZGxfc3RyaW5nOwordXNpbmcgOjphbmRyb2lkOjpoYXJkd2FyZTo6aGlkbF92ZWM7Cit1c2luZyA6OmFuZHJvaWQ6OmhhcmR3YXJlOjpSZXR1cm47Cit1c2luZyA6OmFuZHJvaWQ6OmhhcmR3YXJlOjpWb2lkOwordXNpbmcgOjphbmRyb2lkOjpzcDsKKwordXNpbmcgOjphbmRyb2lkOjpoYXJkd2FyZTo6Z3JhcGhpY3M6OmNvbW1vbjo6VjFfMDo6UGl4ZWxGb3JtYXQ7Cit1c2luZyA6OmFuZHJvaWQ6OmhhcmR3YXJlOjptZWRpYTo6VjFfMDo6QW53QnVmZmVyOworCitzdHJ1Y3QgSW5wdXRTdXJmYWNlIDogcHVibGljIElJbnB1dFN1cmZhY2UgeworCisgICAgdHlwZWRlZiA6OmFuZHJvaWQ6OmhpZGw6OmJhc2U6OlYxXzA6OklCYXNlIElCYXNlOworCisgICAgdHlwZWRlZiA6OmFuZHJvaWQ6OmhhcmR3YXJlOjpncmFwaGljczo6YnVmZmVycXVldWU6OlYxXzA6OgorICAgICAgICAgICAgSVByb2R1Y2VyTGlzdGVuZXIgSFByb2R1Y2VyTGlzdGVuZXI7CisKKyAgICB0eXBlZGVmIDo6YW5kcm9pZDo6CisgICAgICAgICAgICBJR3JhcGhpY0J1ZmZlclByb2R1Y2VyIEJHcmFwaGljQnVmZmVyUHJvZHVjZXI7CisKKyAgICB0eXBlZGVmIDo6YW5kcm9pZDo6aGFyZHdhcmU6OmdyYXBoaWNzOjpidWZmZXJxdWV1ZTo6VjFfMDo6CisgICAgICAgICAgICBJR3JhcGhpY0J1ZmZlclByb2R1Y2VyIEhHcmFwaGljQnVmZmVyUHJvZHVjZXI7CisKKyAgICB0eXBlZGVmIDo6YW5kcm9pZDo6CisgICAgICAgICAgICBHcmFwaGljQnVmZmVyU291cmNlIEdyYXBoaWNCdWZmZXJTb3VyY2U7CisKKy8vIFR5cGUgZGlzYW1iaWd1YXRpb24KKworICAgIHR5cGVkZWYgOjphbmRyb2lkOjpoYXJkd2FyZTo6bWVkaWE6OmMyOjpWMV8wOjpTdGF0dXMgU3RhdHVzOworCisvLyBOZXcgbWV0aG9kcyBmcm9tIElJbnB1dFN1cmZhY2UKKworICAgIHZpcnR1YWwgUmV0dXJuPHZvaWQ+IGNvbm5lY3RUb0NvbXBvbmVudCgKKyAgICAgICAgICAgIGNvbnN0IHNwPElDb21wb25lbnQ+JiBjb21wb25lbnQsCisgICAgICAgICAgICBjb25uZWN0VG9Db21wb25lbnRfY2IgX2hpZGxfY2IpIG92ZXJyaWRlOworCisgICAgdmlydHVhbCBSZXR1cm48c3A8SUNvbmZpZ3VyYWJsZT4+IGdldENvbmZpZ3VyYWJsZSgpIG92ZXJyaWRlOworCisvLyBNZXRob2RzIGRlcml2ZWQgZnJvbSBJR3JhcGhpY0J1ZmZlclByb2R1Y2VyCisKKyAgICB2aXJ0dWFsIFJldHVybjx2b2lkPiByZXF1ZXN0QnVmZmVyKAorICAgICAgICAgICAgaW50MzJfdCBzbG90LAorICAgICAgICAgICAgcmVxdWVzdEJ1ZmZlcl9jYiBfaGlkbF9jYikgb3ZlcnJpZGU7CisKKyAgICB2aXJ0dWFsIFJldHVybjxpbnQzMl90PiBzZXRNYXhEZXF1ZXVlZEJ1ZmZlckNvdW50KAorICAgICAgICAgICAgaW50MzJfdCBtYXhEZXF1ZXVlZEJ1ZmZlcnMpIG92ZXJyaWRlOworCisgICAgdmlydHVhbCBSZXR1cm48aW50MzJfdD4gc2V0QXN5bmNNb2RlKAorICAgICAgICAgICAgYm9vbCBhc3luYykgb3ZlcnJpZGU7CisKKyAgICB2aXJ0dWFsIFJldHVybjx2b2lkPiBkZXF1ZXVlQnVmZmVyKAorICAgICAgICAgICAgdWludDMyX3Qgd2lkdGgsCisgICAgICAgICAgICB1aW50MzJfdCBoZWlnaHQsCisgICAgICAgICAgICBQaXhlbEZvcm1hdCBmb3JtYXQsCisgICAgICAgICAgICB1aW50MzJfdCB1c2FnZSwKKyAgICAgICAgICAgIGJvb2wgZ2V0RnJhbWVUaW1lc3RhbXBzLAorICAgICAgICAgICAgZGVxdWV1ZUJ1ZmZlcl9jYiBfaGlkbF9jYikgb3ZlcnJpZGU7CisKKyAgICB2aXJ0dWFsIFJldHVybjxpbnQzMl90PiBkZXRhY2hCdWZmZXIoCisgICAgICAgICAgICBpbnQzMl90IHNsb3QpIG92ZXJyaWRlOworCisgICAgdmlydHVhbCBSZXR1cm48dm9pZD4gZGV0YWNoTmV4dEJ1ZmZlcigKKyAgICAgICAgICAgIGRldGFjaE5leHRCdWZmZXJfY2IgX2hpZGxfY2IpIG92ZXJyaWRlOworCisgICAgdmlydHVhbCBSZXR1cm48dm9pZD4gYXR0YWNoQnVmZmVyKAorICAgICAgICAgICAgY29uc3QgQW53QnVmZmVyJiBidWZmZXIsCisgICAgICAgICAgICBhdHRhY2hCdWZmZXJfY2IgX2hpZGxfY2IpIG92ZXJyaWRlOworCisgICAgdmlydHVhbCBSZXR1cm48dm9pZD4gcXVldWVCdWZmZXIoCisgICAgICAgICAgICBpbnQzMl90IHNsb3QsCisgICAgICAgICAgICBjb25zdCBRdWV1ZUJ1ZmZlcklucHV0JiBpbnB1dCwKKyAgICAgICAgICAgIHF1ZXVlQnVmZmVyX2NiIF9oaWRsX2NiKSBvdmVycmlkZTsKKworICAgIHZpcnR1YWwgUmV0dXJuPGludDMyX3Q+IGNhbmNlbEJ1ZmZlcigKKyAgICAgICAgICAgIGludDMyX3Qgc2xvdCwKKyAgICAgICAgICAgIGNvbnN0IGhpZGxfaGFuZGxlJiBmZW5jZSkgb3ZlcnJpZGU7CisKKyAgICB2aXJ0dWFsIFJldHVybjx2b2lkPiBxdWVyeSgKKyAgICAgICAgICAgIGludDMyX3Qgd2hhdCwKKyAgICAgICAgICAgIHF1ZXJ5X2NiIF9oaWRsX2NiKSBvdmVycmlkZTsKKworICAgIHZpcnR1YWwgUmV0dXJuPHZvaWQ+IGNvbm5lY3QoCisgICAgICAgICAgICBjb25zdCBzcDxIUHJvZHVjZXJMaXN0ZW5lcj4mIGxpc3RlbmVyLAorICAgICAgICAgICAgaW50MzJfdCBhcGksCisgICAgICAgICAgICBib29sIHByb2R1Y2VyQ29udHJvbGxlZEJ5QXBwLAorICAgICAgICAgICAgY29ubmVjdF9jYiBfaGlkbF9jYikgb3ZlcnJpZGU7CisKKyAgICB2aXJ0dWFsIFJldHVybjxpbnQzMl90PiBkaXNjb25uZWN0KAorICAgICAgICAgICAgaW50MzJfdCBhcGksCisgICAgICAgICAgICBEaXNjb25uZWN0TW9kZSBtb2RlKSBvdmVycmlkZTsKKworICAgIHZpcnR1YWwgUmV0dXJuPGludDMyX3Q+IHNldFNpZGViYW5kU3RyZWFtKAorICAgICAgICAgICAgY29uc3QgaGlkbF9oYW5kbGUmIHN0cmVhbSkgb3ZlcnJpZGU7CisKKyAgICB2aXJ0dWFsIFJldHVybjx2b2lkPiBhbGxvY2F0ZUJ1ZmZlcnMoCisgICAgICAgICAgICB1aW50MzJfdCB3aWR0aCwKKyAgICAgICAgICAgIHVpbnQzMl90IGhlaWdodCwKKyAgICAgICAgICAgIFBpeGVsRm9ybWF0IGZvcm1hdCwKKyAgICAgICAgICAgIHVpbnQzMl90IHVzYWdlKSBvdmVycmlkZTsKKworICAgIHZpcnR1YWwgUmV0dXJuPGludDMyX3Q+IGFsbG93QWxsb2NhdGlvbigKKyAgICAgICAgICAgIGJvb2wgYWxsb3cpIG92ZXJyaWRlOworCisgICAgdmlydHVhbCBSZXR1cm48aW50MzJfdD4gc2V0R2VuZXJhdGlvbk51bWJlcigKKyAgICAgICAgICAgIHVpbnQzMl90IGdlbmVyYXRpb25OdW1iZXIpIG92ZXJyaWRlOworCisgICAgdmlydHVhbCBSZXR1cm48dm9pZD4gZ2V0Q29uc3VtZXJOYW1lKAorICAgICAgICAgICAgZ2V0Q29uc3VtZXJOYW1lX2NiIF9oaWRsX2NiKSBvdmVycmlkZTsKKworICAgIHZpcnR1YWwgUmV0dXJuPGludDMyX3Q+IHNldFNoYXJlZEJ1ZmZlck1vZGUoCisgICAgICAgICAgICBib29sIHNoYXJlZEJ1ZmZlck1vZGUpIG92ZXJyaWRlOworCisgICAgdmlydHVhbCBSZXR1cm48aW50MzJfdD4gc2V0QXV0b1JlZnJlc2goCisgICAgICAgICAgICBib29sIGF1dG9SZWZyZXNoKSBvdmVycmlkZTsKKworICAgIHZpcnR1YWwgUmV0dXJuPGludDMyX3Q+IHNldERlcXVldWVUaW1lb3V0KAorICAgICAgICAgICAgaW50NjRfdCB0aW1lb3V0TnMpIG92ZXJyaWRlOworCisgICAgdmlydHVhbCBSZXR1cm48dm9pZD4gZ2V0TGFzdFF1ZXVlZEJ1ZmZlcigKKyAgICAgICAgICAgIGdldExhc3RRdWV1ZWRCdWZmZXJfY2IgX2hpZGxfY2IpIG92ZXJyaWRlOworCisgICAgdmlydHVhbCBSZXR1cm48dm9pZD4gZ2V0RnJhbWVUaW1lc3RhbXBzKAorICAgICAgICAgICAgZ2V0RnJhbWVUaW1lc3RhbXBzX2NiIF9oaWRsX2NiKSBvdmVycmlkZTsKKworICAgIHZpcnR1YWwgUmV0dXJuPHZvaWQ+IGdldFVuaXF1ZUlkKAorICAgICAgICAgICAgZ2V0VW5pcXVlSWRfY2IgX2hpZGxfY2IpIG92ZXJyaWRlOworCisgICAgY2xhc3MgQ29uZmlndXJhYmxlSW1wbDsKKworcHJvdGVjdGVkOgorICAgIHNwPENvbXBvbmVudFN0b3JlPiBtU3RvcmU7CisgICAgc3A8SEdyYXBoaWNCdWZmZXJQcm9kdWNlcj4gbUJhc2U7CisgICAgc3A8R3JhcGhpY0J1ZmZlclNvdXJjZT4gbVNvdXJjZTsKKyAgICBzdGQ6OnNoYXJlZF9wdHI8Q29uZmlndXJhYmxlSW1wbD4gbUhlbHBlcjsKKyAgICBzcDxDYWNoZWRDb25maWd1cmFibGU+IG1Db25maWd1cmFibGU7CisKKyAgICBJbnB1dFN1cmZhY2UoCisgICAgICAgICAgICBjb25zdCBzcDxDb21wb25lbnRTdG9yZT4mIHN0b3JlLAorICAgICAgICAgICAgY29uc3Qgc3RkOjpzaGFyZWRfcHRyPEMyUmVmbGVjdG9ySGVscGVyPiYgcmVmbGVjdG9yLAorICAgICAgICAgICAgY29uc3Qgc3A8SEdyYXBoaWNCdWZmZXJQcm9kdWNlcj4mIGJhc2UsCisgICAgICAgICAgICBjb25zdCBzcDxHcmFwaGljQnVmZmVyU291cmNlPiYgc291cmNlKTsKKworICAgIHZpcnR1YWwgfklucHV0U3VyZmFjZSgpIG92ZXJyaWRlID0gZGVmYXVsdDsKKworICAgIGZyaWVuZCBzdHJ1Y3QgQ29tcG9uZW50U3RvcmU7Cit9OworCisKK30gIC8vIG5hbWVzcGFjZSB1dGlscworfSAgLy8gbmFtZXNwYWNlIFYxXzAKK30gIC8vIG5hbWVzcGFjZSBjMgorfSAgLy8gbmFtZXNwYWNlIG1lZGlhCit9ICAvLyBuYW1lc3BhY2UgaGFyZHdhcmUKK30gIC8vIG5hbWVzcGFjZSBhbmRyb2lkCisKKyNlbmRpZiAgLy8gQ09ERUMyX0hJRExfVjFfMF9VVElMU19JTlBVVFNVUkZBQ0VfSApkaWZmIC0tZ2l0IGEvbWVkaWEvY29kZWMyL2hpZGwvMS4wL3V0aWxzL2luY2x1ZGUvY29kZWMyL2hpZGwvMS4wL0lucHV0U3VyZmFjZUNvbm5lY3Rpb24uaCBiL21lZGlhL2NvZGVjMi9oaWRsLzEuMC91dGlscy9pbmNsdWRlL2NvZGVjMi9oaWRsLzEuMC9JbnB1dFN1cmZhY2VDb25uZWN0aW9uLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTA0ZmE5ZQotLS0gL2Rldi9udWxsCisrKyBiL21lZGlhL2NvZGVjMi9oaWRsLzEuMC91dGlscy9pbmNsdWRlL2NvZGVjMi9oaWRsLzEuMC9JbnB1dFN1cmZhY2VDb25uZWN0aW9uLmgKQEAgLTAsMCArMSw4NSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxOCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCisKKyNpZm5kZWYgQ09ERUMyX0hJRExfVjFfMF9VVElMU19JTlBVVFNVUkZBQ0VDT05ORUNUSU9OX0gKKyNkZWZpbmUgQ09ERUMyX0hJRExfVjFfMF9VVElMU19JTlBVVFNVUkZBQ0VDT05ORUNUSU9OX0gKKworI2luY2x1ZGUgPGNvZGVjMi9oaWRsLzEuMC9Db21wb25lbnQuaD4KKworI2luY2x1ZGUgPGFuZHJvaWQvaGFyZHdhcmUvbWVkaWEvYzIvMS4wL0lDb21wb25lbnQuaD4KKyNpbmNsdWRlIDxhbmRyb2lkL2hhcmR3YXJlL21lZGlhL2MyLzEuMC9JSW5wdXRTdXJmYWNlQ29ubmVjdGlvbi5oPgorCisjaW5jbHVkZSA8bWVkaWEvc3RhZ2VmcmlnaHQvYnFoZWxwZXIvR3JhcGhpY0J1ZmZlclNvdXJjZS5oPgorCisjaW5jbHVkZSA8aGlkbC9IaWRsU3VwcG9ydC5oPgorI2luY2x1ZGUgPGhpZGwvU3RhdHVzLmg+CisKKyNpbmNsdWRlIDxDMkNvbXBvbmVudC5oPgorCisjaW5jbHVkZSA8bWVtb3J5PgorI2luY2x1ZGUgPG11dGV4PgorCituYW1lc3BhY2UgYW5kcm9pZCB7CituYW1lc3BhY2UgaGFyZHdhcmUgeworbmFtZXNwYWNlIG1lZGlhIHsKK25hbWVzcGFjZSBjMiB7CituYW1lc3BhY2UgVjFfMCB7CituYW1lc3BhY2UgdXRpbHMgeworCit1c2luZyA6OmFuZHJvaWQ6OmhhcmR3YXJlOjpSZXR1cm47Cit1c2luZyA6OmFuZHJvaWQ6OmhhcmR3YXJlOjpWb2lkOwordXNpbmcgOjphbmRyb2lkOjpzcDsKK3VzaW5nIDo6YW5kcm9pZDo6R3JhcGhpY0J1ZmZlclNvdXJjZTsKKworc3RydWN0IElucHV0U3VyZmFjZUNvbm5lY3Rpb24gOiBwdWJsaWMgSUlucHV0U3VyZmFjZUNvbm5lY3Rpb24geworCisgICAgdmlydHVhbCBSZXR1cm48U3RhdHVzPiBkaXNjb25uZWN0KCkgb3ZlcnJpZGU7CisKK3Byb3RlY3RlZDoKKworICAgIElucHV0U3VyZmFjZUNvbm5lY3Rpb24oCisgICAgICAgICAgICBjb25zdCBzcDxHcmFwaGljQnVmZmVyU291cmNlPiYgc291cmNlLAorICAgICAgICAgICAgY29uc3Qgc3RkOjpzaGFyZWRfcHRyPEMyQ29tcG9uZW50PiYgY29tcG9uZW50KTsKKworICAgIElucHV0U3VyZmFjZUNvbm5lY3Rpb24oCisgICAgICAgICAgICBjb25zdCBzcDxHcmFwaGljQnVmZmVyU291cmNlPiYgc291cmNlLAorICAgICAgICAgICAgY29uc3Qgc3A8SUNvbXBvbmVudD4mIGNvbXBvbmVudCk7CisKKyAgICBib29sIGluaXQoKTsKKworICAgIGZyaWVuZCBzdHJ1Y3QgSW5wdXRTdXJmYWNlOworCisgICAgSW5wdXRTdXJmYWNlQ29ubmVjdGlvbigpID0gZGVsZXRlOworICAgIElucHV0U3VyZmFjZUNvbm5lY3Rpb24oY29uc3QgSW5wdXRTdXJmYWNlQ29ubmVjdGlvbiYpID0gZGVsZXRlOworICAgIHZvaWQgb3BlcmF0b3I9KGNvbnN0IElucHV0U3VyZmFjZUNvbm5lY3Rpb24mKSA9IGRlbGV0ZTsKKworICAgIHN0cnVjdCBJbXBsOworCisgICAgc3RkOjptdXRleCBtTXV0ZXg7CisgICAgc3A8R3JhcGhpY0J1ZmZlclNvdXJjZT4gbVNvdXJjZTsKKyAgICBzcDxJbXBsPiBtSW1wbDsKKworICAgIHZpcnR1YWwgfklucHV0U3VyZmFjZUNvbm5lY3Rpb24oKSBvdmVycmlkZTsKK307CisKK30gIC8vIG5hbWVzcGFjZSB1dGlscworfSAgLy8gbmFtZXNwYWNlIFYxXzAKK30gIC8vIG5hbWVzcGFjZSBjMgorfSAgLy8gbmFtZXNwYWNlIG1lZGlhCit9ICAvLyBuYW1lc3BhY2UgaGFyZHdhcmUKK30gIC8vIG5hbWVzcGFjZSBhbmRyb2lkCisKKyNlbmRpZiAgLy8gQ09ERUMyX0hJRExfVjFfMF9VVElMU19JTlBVVFNVUkZBQ0VDT05ORUNUSU9OX0gKZGlmZiAtLWdpdCBhL21lZGlhL2NvZGVjMi9oaWRsLzEuMC91dGlscy9pbmNsdWRlL2NvZGVjMi9oaWRsLzEuMC90eXBlcy5oIGIvbWVkaWEvY29kZWMyL2hpZGwvMS4wL3V0aWxzL2luY2x1ZGUvY29kZWMyL2hpZGwvMS4wL3R5cGVzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNThmNWM5NgotLS0gL2Rldi9udWxsCisrKyBiL21lZGlhL2NvZGVjMi9oaWRsLzEuMC91dGlscy9pbmNsdWRlL2NvZGVjMi9oaWRsLzEuMC90eXBlcy5oCkBAIC0wLDAgKzEsMzY4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE4IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KKworI2lmbmRlZiBDT0RFQzJfSElETF9WMV8wX1VUSUxTX1RZUEVTX0gKKyNkZWZpbmUgQ09ERUMyX0hJRExfVjFfMF9VVElMU19UWVBFU19ICisKKyNpbmNsdWRlIDxjaHJvbm8+CisKKyNpbmNsdWRlIDxidWZmZXJwb29sL0NsaWVudE1hbmFnZXIuaD4KKyNpbmNsdWRlIDxhbmRyb2lkL2hhcmR3YXJlL21lZGlhL2J1ZmZlcnBvb2wvMS4wL0lDbGllbnRNYW5hZ2VyLmg+CisjaW5jbHVkZSA8YW5kcm9pZC9oYXJkd2FyZS9tZWRpYS9idWZmZXJwb29sLzEuMC90eXBlcy5oPgorI2luY2x1ZGUgPGFuZHJvaWQvaGFyZHdhcmUvbWVkaWEvYzIvMS4wL0lDb21wb25lbnRTdG9yZS5oPgorI2luY2x1ZGUgPGFuZHJvaWQvaGFyZHdhcmUvbWVkaWEvYzIvMS4wL3R5cGVzLmg+CisjaW5jbHVkZSA8Z3VpL0lHcmFwaGljQnVmZmVyUHJvZHVjZXIuaD4KKworI2luY2x1ZGUgPEMyQ29tcG9uZW50Lmg+CisjaW5jbHVkZSA8QzJQYXJhbS5oPgorI2luY2x1ZGUgPEMyUGFyYW1EZWYuaD4KKyNpbmNsdWRlIDxDMldvcmsuaD4KKwordXNpbmcgbmFtZXNwYWNlIHN0ZDo6Y2hyb25vX2xpdGVyYWxzOworCituYW1lc3BhY2UgYW5kcm9pZCB7CituYW1lc3BhY2UgaGFyZHdhcmUgeworbmFtZXNwYWNlIG1lZGlhIHsKK25hbWVzcGFjZSBjMiB7CituYW1lc3BhY2UgVjFfMCB7CituYW1lc3BhY2UgdXRpbHMgeworCit1c2luZyA6OmFuZHJvaWQ6OmhhcmR3YXJlOjpoaWRsX2JpdGZpZWxkOwordXNpbmcgOjphbmRyb2lkOjpoYXJkd2FyZTo6aGlkbF9oYW5kbGU7Cit1c2luZyA6OmFuZHJvaWQ6OmhhcmR3YXJlOjpoaWRsX3N0cmluZzsKK3VzaW5nIDo6YW5kcm9pZDo6aGFyZHdhcmU6OmhpZGxfdmVjOwordXNpbmcgOjphbmRyb2lkOjpzdGF0dXNfdDsKK3VzaW5nIDo6YW5kcm9pZDo6c3A7Cit1c2luZyA6OmFuZHJvaWQ6OmhhcmR3YXJlOjptZWRpYTo6YnVmZmVycG9vbDo6VjFfMDo6aW1wbGVtZW50YXRpb246OgorICAgICAgICBDb25uZWN0aW9uSWQ7Cit1c2luZyA6OmFuZHJvaWQ6OklHcmFwaGljQnVmZmVyUHJvZHVjZXI7CisKKy8vIFR5cGVzIG9mIG1ldGFkYXRhIGZvciBCbG9ja3MuCitzdHJ1Y3QgQzJIaWRsX1JhbmdlIHsKKyAgICB1aW50MzJfdCBvZmZzZXQ7CisgICAgdWludDMyX3QgbGVuZ3RoOyAvLyBEbyBub3QgdXNlICJzaXplIiBiZWNhdXNlIHRoZSBuYW1lIGNvbGxpZGVzIHdpdGggQzJJbmZvOjpzaXplKCkuCit9OwordHlwZWRlZiBDMkdsb2JhbFBhcmFtPEMySW5mbywgQzJIaWRsX1JhbmdlLCAwPiBDMkhpZGxfUmFuZ2VJbmZvOworCitzdHJ1Y3QgQzJIaWRsX1JlY3QgeworICAgIHVpbnQzMl90IGxlZnQ7CisgICAgdWludDMyX3QgdG9wOworICAgIHVpbnQzMl90IHdpZHRoOworICAgIHVpbnQzMl90IGhlaWdodDsKK307Cit0eXBlZGVmIEMyR2xvYmFsUGFyYW08QzJJbmZvLCBDMkhpZGxfUmVjdCwgMT4gQzJIaWRsX1JlY3RJbmZvOworCisvLyBDMlNldHRpbmdSZXN1bHQgLT4gU2V0dGluZ1Jlc3VsdAorU3RhdHVzIG9iamNweSgKKyAgICAgICAgU2V0dGluZ1Jlc3VsdCogZCwKKyAgICAgICAgY29uc3QgQzJTZXR0aW5nUmVzdWx0JiBzKTsKKworLy8gU2V0dGluZ1Jlc3VsdCAtPiBzdGQ6OnVuaXF1ZV9wdHI8QzJTZXR0aW5nUmVzdWx0PgorYzJfc3RhdHVzX3Qgb2JqY3B5KAorICAgICAgICBzdGQ6OnVuaXF1ZV9wdHI8QzJTZXR0aW5nUmVzdWx0PiogZCwKKyAgICAgICAgY29uc3QgU2V0dGluZ1Jlc3VsdCYgcyk7CisKKy8vIEMyUGFyYW1EZXNjcmlwdG9yIC0+IFBhcmFtRGVzY3JpcHRvcgorU3RhdHVzIG9iamNweSgKKyAgICAgICAgUGFyYW1EZXNjcmlwdG9yKiBkLAorICAgICAgICBjb25zdCBDMlBhcmFtRGVzY3JpcHRvciYgcyk7CisKKy8vIFBhcmFtRGVzY3JpcHRvciAtPiBzdGQ6OnNoYXJlZF9wdHI8QzJQYXJhbURlc2NyaXB0b3I+CitjMl9zdGF0dXNfdCBvYmpjcHkoCisgICAgICAgIHN0ZDo6c2hhcmVkX3B0cjxDMlBhcmFtRGVzY3JpcHRvcj4qIGQsCisgICAgICAgIGNvbnN0IFBhcmFtRGVzY3JpcHRvciYgcyk7CisKKy8vIEMyRmllbGRTdXBwb3J0ZWRWYWx1ZXNRdWVyeSAtPiBGaWVsZFN1cHBvcnRlZFZhbHVlc1F1ZXJ5CitTdGF0dXMgb2JqY3B5KAorICAgICAgICBGaWVsZFN1cHBvcnRlZFZhbHVlc1F1ZXJ5KiBkLAorICAgICAgICBjb25zdCBDMkZpZWxkU3VwcG9ydGVkVmFsdWVzUXVlcnkmIHMpOworCisvLyBGaWVsZFN1cHBvcnRlZFZhbHVlc1F1ZXJ5IC0+IEMyRmllbGRTdXBwb3J0ZWRWYWx1ZXNRdWVyeQorYzJfc3RhdHVzX3Qgb2JqY3B5KAorICAgICAgICBDMkZpZWxkU3VwcG9ydGVkVmFsdWVzUXVlcnkqIGQsCisgICAgICAgIGNvbnN0IEZpZWxkU3VwcG9ydGVkVmFsdWVzUXVlcnkmIHMpOworCisvLyBDMkZpZWxkU3VwcG9ydGVkVmFsdWVzUXVlcnkgLT4gRmllbGRTdXBwb3J0ZWRWYWx1ZXNRdWVyeVJlc3VsdAorU3RhdHVzIG9iamNweSgKKyAgICAgICAgRmllbGRTdXBwb3J0ZWRWYWx1ZXNRdWVyeVJlc3VsdCogZCwKKyAgICAgICAgY29uc3QgQzJGaWVsZFN1cHBvcnRlZFZhbHVlc1F1ZXJ5JiBzKTsKKworLy8gRmllbGRTdXBwb3J0ZWRWYWx1ZXNRdWVyeSwgRmllbGRTdXBwb3J0ZWRWYWx1ZXNRdWVyeVJlc3VsdCAtPiBDMkZpZWxkU3VwcG9ydGVkVmFsdWVzUXVlcnkKK2MyX3N0YXR1c190IG9iamNweSgKKyAgICAgICAgQzJGaWVsZFN1cHBvcnRlZFZhbHVlc1F1ZXJ5KiBkLAorICAgICAgICBjb25zdCBGaWVsZFN1cHBvcnRlZFZhbHVlc1F1ZXJ5JiBzcSwKKyAgICAgICAgY29uc3QgRmllbGRTdXBwb3J0ZWRWYWx1ZXNRdWVyeVJlc3VsdCYgc3IpOworCisvLyBDMkNvbXBvbmVudDo6VHJhaXRzIC0+IENvbXBvbmVudFRyYWl0cworU3RhdHVzIG9iamNweSgKKyAgICAgICAgSUNvbXBvbmVudFN0b3JlOjpDb21wb25lbnRUcmFpdHMqIGQsCisgICAgICAgIGNvbnN0IEMyQ29tcG9uZW50OjpUcmFpdHMmIHMpOworCisvLyBDb21wb25lbnRUcmFpdHMgLT4gQzJDb21wb25lbnQ6OlRyYWl0cywgc3RkOjp1bmlxdWVfcHRyPHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPj4KKy8vIE5vdGU6IFRoZSBvdXRwdXQgZCBpcyBvbmx5IHZhbGlkIGFzIGxvbmcgYXMgYWxpYXNlc0J1ZmZlciByZW1haW5zIGFsaXZlLgorYzJfc3RhdHVzX3Qgb2JqY3B5KAorICAgICAgICBDMkNvbXBvbmVudDo6VHJhaXRzKiBkLAorICAgICAgICBzdGQ6OnVuaXF1ZV9wdHI8c3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+PiogYWxpYXNlc0J1ZmZlciwKKyAgICAgICAgY29uc3QgSUNvbXBvbmVudFN0b3JlOjpDb21wb25lbnRUcmFpdHMmIHMpOworCisvLyBDMlN0cnVjdERlc2NyaXB0b3IgLT4gU3RydWN0RGVzY3JpcHRvcgorU3RhdHVzIG9iamNweSgKKyAgICAgICAgU3RydWN0RGVzY3JpcHRvciogZCwKKyAgICAgICAgY29uc3QgQzJTdHJ1Y3REZXNjcmlwdG9yJiBzKTsKKworLy8gU3RydWN0RGVzY3JpcHRvciAtPiBDMlN0cnVjdERlc2NyaXB0b3IKK2MyX3N0YXR1c190IG9iamNweSgKKyAgICAgICAgc3RkOjp1bmlxdWVfcHRyPEMyU3RydWN0RGVzY3JpcHRvcj4qIGQsCisgICAgICAgIGNvbnN0IFN0cnVjdERlc2NyaXB0b3ImIHMpOworCisvLyBBYnN0cmFjdCBjbGFzcyB0byBiZSB1c2VkIGluCisvLyBvYmpjcHkoc3RkOjpsaXN0PHN0ZDo6dW5pcXVlX3B0cjxDMldvcms+PiAtPiBXb3JrQnVuZGxlKS4KK3N0cnVjdCBCdWZmZXJQb29sU2VuZGVyIHsKKyAgICB0eXBlZGVmIDo6YW5kcm9pZDo6aGFyZHdhcmU6Om1lZGlhOjpidWZmZXJwb29sOjpWMV8wOjoKKyAgICAgICAgICAgIFJlc3VsdFN0YXR1cyBSZXN1bHRTdGF0dXM7CisgICAgdHlwZWRlZiA6OmFuZHJvaWQ6OmhhcmR3YXJlOjptZWRpYTo6YnVmZmVycG9vbDo6VjFfMDo6CisgICAgICAgICAgICBCdWZmZXJTdGF0dXNNZXNzYWdlIEJ1ZmZlclN0YXR1c01lc3NhZ2U7CisgICAgdHlwZWRlZiA6OmFuZHJvaWQ6OmhhcmR3YXJlOjptZWRpYTo6YnVmZmVycG9vbDo6CisgICAgICAgICAgICBCdWZmZXJQb29sRGF0YSBCdWZmZXJQb29sRGF0YTsKKworICAgIC8qKgorICAgICAqIFNlbmQgYnBEYXRhIGFuZCByZXR1cm4gQnVmZmVyU3RhdHVzTWVzc2FnZSB0aGF0IGNhbiBiZSBzdXBwbGllZCB0bworICAgICAqIElDbGllbnRNYW5hZ2VyOjpyZWNlaXZlKCkgaW4gdGhlIHJlY2VpdmluZyBwcm9jZXNzLgorICAgICAqCisgICAgICogVGhpcyBmdW5jdGlvbiB3aWxsIGJlIGNhbGxlZCBmcm9tIHdpdGhpbiB0aGUgZnVuY3Rpb24KKyAgICAgKiBvYmpjcHkoc3RkOjpsaXN0PHN0ZDo6dW5pcXVlX3B0cjxDMldvcms+PiAtPiBXb3JrQnVuZGxlKS4KKyAgICAgKgorICAgICAqIFxwYXJhbVtpbl0gYnBEYXRhIEJ1ZmZlclBvb2xEYXRhIGlkZW50aWZ5aW5nIHRoZSBidWZmZXIgdG8gc2VuZC4KKyAgICAgKiBccGFyYW1bb3V0XSBicE1lc3NhZ2UgQnVmZmVyU3RhdHVzTWVzc2FnZSBvZiB0aGUgdHJhbnNhY3Rpb24uIEluZm9ybWF0aW9uCisgICAgICogICAgaW5zaWRlIFxwIGJwTWVzc2FnZSBzaG91bGQgYmUgcGFzc2VkIHRvIHRoZSByZWNlaXZpbmcgcHJvY2VzcyBieSBzb21lCisgICAgICogICAgb3RoZXIgbWVhbnMgc28gaXQgY2FuIGNhbGwgcmVjZWl2ZSgpIHByb3Blcmx5LgorICAgICAqIFxyZXR1cm4gUmVzdWx0U3RhdHVzIHZhbHVlIHRoYXQgZGV0ZXJtaW5lcyB0aGUgc3VjY2VzcyBvZiB0aGUgb3BlcmF0aW9uLgorICAgICAqICAgIChTZWUgdGhlIHBvc3NpYmxlIHZhbHVlcyBvZiBSZXN1bHRTdGF0dXMgaW4KKyAgICAgKiAgICBoYXJkd2FyZS9pbnRlcmZhY2VzL21lZGlhL2J1ZmZlcnBvb2wvMS4wL3R5cGVzLmhhbC4pCisgICAgICovCisgICAgdmlydHVhbCBSZXN1bHRTdGF0dXMgc2VuZCgKKyAgICAgICAgICAgIGNvbnN0IHN0ZDo6c2hhcmVkX3B0cjxCdWZmZXJQb29sRGF0YT4mIGJwRGF0YSwKKyAgICAgICAgICAgIEJ1ZmZlclN0YXR1c01lc3NhZ2UqIGJwTWVzc2FnZSkgPSAwOworCisgICAgdmlydHVhbCB+QnVmZmVyUG9vbFNlbmRlcigpID0gZGVmYXVsdDsKK307CisKKy8vIERlZmF1bHQgaW1wbGVtZW50YXRpb24gb2YgQnVmZmVyUG9vbFNlbmRlci4KKy8vCisvLyBUbyB1c2UgRGVmYXVsdEJ1ZmZlclBvb2xTZW5kZXIsIHRoZSBJQ2xpZW50TWFuYWdlciBpbnN0YW5jZSBvZiB0aGUgcmVjZWl2aW5nCisvLyBwcm9jZXNzIG11c3QgYmUgc2V0IGJlZm9yZSBzZW5kKCkgY2FuIG9wZXJhdGUuIERlZmF1bHRCdWZmZXJQb29sU2VuZGVyIHdpbGwKKy8vIGhvbGQgYSBzdHJvbmcgcmVmZXJlbmNlIHRvIHRoZSBJQ2xpZW50TWFuYWdlciBpbnN0YW5jZSBhbmQgdXNlIGl0IHRvIGNhbGwKKy8vIElDbGllbnRNYW5hZ2VyOjpyZWdpc3RlclNlbmRlcigpIHRvIGVzdGFibGlzaCB0aGUgYnVmZmVycG9vbCBjb25uZWN0aW9uIHdoZW4KKy8vIHNlbmQoKSBpcyBjYWxsZWQuCitzdHJ1Y3QgRGVmYXVsdEJ1ZmZlclBvb2xTZW5kZXIgOiBCdWZmZXJQb29sU2VuZGVyIHsKKyAgICB0eXBlZGVmIDo6YW5kcm9pZDo6aGFyZHdhcmU6Om1lZGlhOjpidWZmZXJwb29sOjpWMV8wOjppbXBsZW1lbnRhdGlvbjo6CisgICAgICAgICAgICBDbGllbnRNYW5hZ2VyIENsaWVudE1hbmFnZXI7CisgICAgdHlwZWRlZiA6OmFuZHJvaWQ6OmhhcmR3YXJlOjptZWRpYTo6YnVmZmVycG9vbDo6VjFfMDo6CisgICAgICAgICAgICBJQ2xpZW50TWFuYWdlciBJQ2xpZW50TWFuYWdlcjsKKworICAgIC8vIFNldCB0aGUgSUNsaWVudE1hbmFnZXIgaW5zdGFuY2Ugb2YgdGhlIHJlY2VpdmluZyBwcm9jZXNzIGFuZCB0aGUgcmVmcmVzaAorICAgIC8vIGludGVydmFsIGZvciB0aGUgY29ubmVjdGlvbi4gVGhlIGRlZmF1bHQgaW50ZXJ2YWwgaXMgNC41IHNlY29uZHMsIHdoaWNoCisgICAgLy8gaXMgc2xpZ2h0bHkgc2hvcnRlciB0aGFuIHRoZSBhbW91bnQgb2YgdGltZSB0aGUgYnVmZmVycG9vbCB3aWxsIGtlZXAgYW4KKyAgICAvLyBpbmFjdGl2ZSBjb25uZWN0aW9uIGZvci4KKyAgICBEZWZhdWx0QnVmZmVyUG9vbFNlbmRlcigKKyAgICAgICAgICAgIGNvbnN0IHNwPElDbGllbnRNYW5hZ2VyPiYgcmVjZWl2ZXJNYW5hZ2VyID0gbnVsbHB0ciwKKyAgICAgICAgICAgIHN0ZDo6Y2hyb25vOjpzdGVhZHlfY2xvY2s6OmR1cmF0aW9uIHJlZnJlc2hJbnRlcnZhbCA9IDQ1MDBtcyk7CisKKyAgICAvLyBTZXQgdGhlIElDbGllbnRNYW5hZ2VyIGluc3RhbmNlIG9mIHRoZSByZWNlaXZpbmcgcHJvY2VzcyBhbmQgdGhlIHJlZnJlc2gKKyAgICAvLyBpbnRlcnZhbCBmb3IgdGhlIGNvbm5lY3Rpb24uIFRoZSBkZWZhdWx0IGludGVydmFsIGlzIDQuNSBzZWNvbmRzLCB3aGljaAorICAgIC8vIGlzIHNsaWdodGx5IHNob3J0ZXIgdGhhbiB0aGUgYW1vdW50IG9mIHRpbWUgdGhlIGJ1ZmZlcnBvb2wgd2lsbCBrZWVwIGFuCisgICAgLy8gaW5hY3RpdmUgY29ubmVjdGlvbiBmb3IuCisgICAgdm9pZCBzZXRSZWNlaXZlcigKKyAgICAgICAgICAgIGNvbnN0IHNwPElDbGllbnRNYW5hZ2VyPiYgcmVjZWl2ZXJNYW5hZ2VyLAorICAgICAgICAgICAgc3RkOjpjaHJvbm86OnN0ZWFkeV9jbG9jazo6ZHVyYXRpb24gcmVmcmVzaEludGVydmFsID0gNDUwMG1zKTsKKworICAgIC8vIEltcGxlbWVudGF0aW9uIG9mIEJ1ZmZlclBvb2xTZW5kZXI6OnNlbmQoKS4gc2VuZCgpIHdpbGwgZXN0YWJsaXNoIGEKKyAgICAvLyBidWZmZXJwb29sIGNvbm5lY3Rpb24gaWYgbmVlZGVkLCB0aGVuIHNlbmQgdGhlIGJ1ZmZlcnBvb2wgZGF0YSBvdmVyIHRvCisgICAgLy8gdGhlIHJlY2VpdmluZyBwcm9jZXNzLgorICAgIHZpcnR1YWwgUmVzdWx0U3RhdHVzIHNlbmQoCisgICAgICAgICAgICBjb25zdCBzdGQ6OnNoYXJlZF9wdHI8QnVmZmVyUG9vbERhdGE+JiBicERhdGEsCisgICAgICAgICAgICBCdWZmZXJTdGF0dXNNZXNzYWdlKiBicE1lc3NhZ2UpIG92ZXJyaWRlOworCitwcml2YXRlOgorICAgIHN0ZDo6bXV0ZXggbU11dGV4OworICAgIHNwPENsaWVudE1hbmFnZXI+IG1TZW5kZXJNYW5hZ2VyOworICAgIHNwPElDbGllbnRNYW5hZ2VyPiBtUmVjZWl2ZXJNYW5hZ2VyOworICAgIGludDY0X3QgbVJlY2VpdmVyQ29ubmVjdGlvbklkOworICAgIGludDY0X3QgbVNvdXJjZUNvbm5lY3Rpb25JZDsKKyAgICBzdGQ6OmNocm9ubzo6c3RlYWR5X2Nsb2NrOjp0aW1lX3BvaW50IG1MYXN0U2VudDsKKyAgICBzdGQ6OmNocm9ubzo6c3RlYWR5X2Nsb2NrOjpkdXJhdGlvbiBtUmVmcmVzaEludGVydmFsOworfTsKKworLy8gc3RkOjpsaXN0PHN0ZDo6dW5pcXVlX3B0cjxDMldvcms+PiAtPiBXb3JrQnVuZGxlCisvLyBOb3RlOiBJZiBidWZmZXJwb29sIHdpbGwgYmUgdXNlZCwgYnBTZW5kZXIgbXVzdCBub3QgYmUgbnVsbC4KK1N0YXR1cyBvYmpjcHkoCisgICAgICAgIFdvcmtCdW5kbGUqIGQsCisgICAgICAgIGNvbnN0IHN0ZDo6bGlzdDxzdGQ6OnVuaXF1ZV9wdHI8QzJXb3JrPj4mIHMsCisgICAgICAgIEJ1ZmZlclBvb2xTZW5kZXIqIGJwU2VuZGVyID0gbnVsbHB0cik7CisKKy8vIFdvcmtCdW5kbGUgLT4gc3RkOjpsaXN0PHN0ZDo6dW5pcXVlX3B0cjxDMldvcms+PgorYzJfc3RhdHVzX3Qgb2JqY3B5KAorICAgICAgICBzdGQ6Omxpc3Q8c3RkOjp1bmlxdWVfcHRyPEMyV29yaz4+KiBkLAorICAgICAgICBjb25zdCBXb3JrQnVuZGxlJiBzKTsKKworLyoqCisgKiBQYXJzZXMgYSBwYXJhbXMgYmxvYiBhbmQgcmV0dXJucyBDMlBhcmFtIHBvaW50ZXJzIHRvIGl0cyBwYXJhbXMuCisgKiBccGFyYW1bb3V0XSBwYXJhbXMgdGFyZ2V0IHZlY3RvciBvZiBDMlBhcmFtIHBvaW50ZXJzCisgKiBccGFyYW1baW5dIGJsb2IgcGFyYW1ldGVyIGJsb2IgdG8gcGFyc2UKKyAqIFxyZXR2YWwgQzJfT0sgaWYgdGhlIGZ1bGwgYmxvYiB3YXMgcGFyc2VkCisgKiBccmV0dmFsIEMyX0JBRF9WQUxVRSBvdGhlcndpc2UKKyAqLworYzJfc3RhdHVzX3QgcGFyc2VQYXJhbXNCbG9iKAorICAgICAgICBzdGQ6OnZlY3RvcjxDMlBhcmFtKj4gKnBhcmFtcywKKyAgICAgICAgY29uc3QgaGlkbF92ZWM8dWludDhfdD4gJmJsb2IpOworCisvKioKKyAqIENvbmNhdGVuYXRlcyBhIGxpc3Qgb2YgQzJQYXJhbXMgaW50byBhIHBhcmFtcyBibG9iLgorICogXHBhcmFtW291dF0gYmxvYiB0YXJnZXQgYmxvYgorICogXHBhcmFtW2luXSBwYXJhbXMgcGFyYW1ldGVycyB0byBjb25jYXRlbmF0ZQorICogXHJldHZhbCBDMl9PSyBpZiB0aGUgYmxvYiB3YXMgc3VjY2Vzc2Z1bGx5IGNyZWF0ZWQKKyAqIFxyZXR2YWwgQzJfQkFEX1ZBTFVFIGlmIHRoZSBibG9iIHdhcyBub3Qgc3VjY2Vzc2Z1bCAodGhpcyBvbmx5IGhhcHBlbnMgaWYgdGhlIHBhcmFtZXRlcnMgd2VyZQorICogICAgICAgICBub3QgY29uc3QpCisgKi8KK1N0YXR1cyBjcmVhdGVQYXJhbXNCbG9iKAorICAgICAgICBoaWRsX3ZlYzx1aW50OF90PiAqYmxvYiwKKyAgICAgICAgY29uc3Qgc3RkOjp2ZWN0b3I8QzJQYXJhbSo+ICZwYXJhbXMpOworU3RhdHVzIGNyZWF0ZVBhcmFtc0Jsb2IoCisgICAgICAgIGhpZGxfdmVjPHVpbnQ4X3Q+ICpibG9iLAorICAgICAgICBjb25zdCBzdGQ6OnZlY3RvcjxzdGQ6OnVuaXF1ZV9wdHI8QzJQYXJhbT4+ICZwYXJhbXMpOworU3RhdHVzIGNyZWF0ZVBhcmFtc0Jsb2IoCisgICAgICAgIGhpZGxfdmVjPHVpbnQ4X3Q+ICpibG9iLAorICAgICAgICBjb25zdCBzdGQ6OnZlY3RvcjxzdGQ6OnNoYXJlZF9wdHI8Y29uc3QgQzJJbmZvPj4gJnBhcmFtcyk7CitTdGF0dXMgY3JlYXRlUGFyYW1zQmxvYigKKyAgICAgICAgaGlkbF92ZWM8dWludDhfdD4gKmJsb2IsCisgICAgICAgIGNvbnN0IHN0ZDo6dmVjdG9yPHN0ZDo6dW5pcXVlX3B0cjxDMlR1bmluZz4+ICZwYXJhbXMpOworCisvKioKKyAqIFBhcnNlcyBhIHBhcmFtcyBibG9iIGFuZCBjcmVhdGUgYSB2ZWN0b3Igb2YgQzJQYXJhbXMgd2hvc2UgbWVtYmVycyBhcmUgY29waWVzCisgKiBvZiB0aGUgcGFyYW1zIGluIHRoZSBibG9iLgorICogXHBhcmFtW291dF0gcGFyYW1zIHRoZSByZXN1bHRpbmcgdmVjdG9yCisgKiBccGFyYW1baW5dIGJsb2IgcGFyYW1ldGVyIGJsb2IgdG8gcGFyc2UKKyAqIFxyZXR2YWwgQzJfT0sgaWYgdGhlIGZ1bGwgYmxvYiB3YXMgcGFyc2VkIGFuZCBwYXJhbXMgd2FzIGNvbnN0cnVjdGVkCisgKiBccmV0dmFsIEMyX0JBRF9WQUxVRSBvdGhlcndpc2UKKyAqLworYzJfc3RhdHVzX3QgY29weVBhcmFtc0Zyb21CbG9iKAorICAgICAgICBzdGQ6OnZlY3RvcjxzdGQ6OnVuaXF1ZV9wdHI8QzJQYXJhbT4+KiBwYXJhbXMsCisgICAgICAgIFBhcmFtcyBibG9iKTsKKworLyoqCisgKiBQYXJzZXMgYSBwYXJhbXMgYmxvYiBhbmQgYXBwbGllcyB1cGRhdGVzIHRvIHBhcmFtcworICogXHBhcmFtW2luLG91dF0gcGFyYW1zIHBhcmFtcyB0byBiZSB1cGRhdGVkCisgKiBccGFyYW1baW5dIGJsb2IgcGFyYW1ldGVyIGJsb2IgY29udGFpbmluZyB1cGRhdGVzCisgKiBccmV0dmFsIEMyX09LIGlmIHRoZSBmdWxsIGJsb2Igd2FzIHBhcnNlZCBhbmQgcGFyYW1zIHdhcyB1cGRhdGVkCisgKiBccmV0dmFsIEMyX0JBRF9WQUxVRSBvdGhlcndpc2UKKyAqLworYzJfc3RhdHVzX3QgdXBkYXRlUGFyYW1zRnJvbUJsb2IoCisgICAgICAgIGNvbnN0IHN0ZDo6dmVjdG9yPEMyUGFyYW0qPiYgcGFyYW1zLAorICAgICAgICBjb25zdCBQYXJhbXMmIGJsb2IpOworCisvKioKKyAqIENvbnZlcnRzIGEgQnVmZmVyUG9vbCBzdGF0dXMgdmFsdWUgdG8gYzJfc3RhdHVzX3QuCisgKiBccGFyYW0gQnVmZmVyUG9vbCBzdGF0dXMKKyAqIFxyZXR1cm4gQ29ycmVzcG9uZGluZyBjMl9zdGF0dXNfdAorICovCitjMl9zdGF0dXNfdCB0b0MyU3RhdHVzKDo6YW5kcm9pZDo6aGFyZHdhcmU6Om1lZGlhOjpidWZmZXJwb29sOjpWMV8wOjoKKyAgICAgICAgUmVzdWx0U3RhdHVzIHJzKTsKKworLy8gQnVmZmVyUXVldWUtQmFzZWQgQmxvY2sgT3BlcmF0aW9ucworLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCisvLyBDcmVhdGUgYSBHcmFwaGljQnVmZmVyIG9iamVjdCBmcm9tIGEgZ3JhcGhpYyBibG9jayBhbmQgYXR0YWNoIGl0IHRvIGFuCisvLyBJR3JhcGhpY0J1ZmZlclByb2R1Y2VyLgorc3RhdHVzX3QgYXR0YWNoVG9CdWZmZXJRdWV1ZShjb25zdCBDMkNvbnN0R3JhcGhpY0Jsb2NrJiBibG9jaywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3A8SUdyYXBoaWNCdWZmZXJQcm9kdWNlcj4mIGlnYnAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90IGdlbmVyYXRpb24sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludDMyX3QqIGJxU2xvdCk7CisKKy8vIFJldHVybiBmYWxzZSBpZiBibG9jayBkb2VzIG5vdCBjb21lIGZyb20gYSBidWZmZXJxdWV1ZS1iYXNlZCBibG9ja3Bvb2wuCisvLyBPdGhlcndpc2UsIGV4dHJhY3QgZ2VuZXJhdGlvbiwgYnFJZCBhbmQgYnFTbG90IGFuZCByZXR1cm4gdHJ1ZS4KK2Jvb2wgZ2V0QnVmZmVyUXVldWVBc3NpZ25tZW50KGNvbnN0IEMyQ29uc3RHcmFwaGljQmxvY2smIGJsb2NrLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3QqIGdlbmVyYXRpb24sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50NjRfdCogYnFJZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludDMyX3QqIGJxU2xvdCk7CisKKy8vIERpc2Fzc29jaWF0ZSB0aGUgZ2l2ZW4gYmxvY2sgd2l0aCBpdHMgZGVzaWduYXRlZCBidWZmZXJxdWV1ZSBzbyB0aGF0CisvLyBjYW5jZWxCdWZmZXIoKSB3aWxsIG5vdCBiZSBjYWxsZWQgd2hlbiB0aGUgYmxvY2sgaXMgZGVzdHJveWVkLiBJZiB0aGUgYmxvY2sKKy8vIGRvZXMgbm90IGhhdmUgYSBkZXNpZ25hdGVkIGJ1ZmZlcnF1ZXVlLCB0aGUgZnVuY3Rpb24gcmV0dXJucyBmYWxzZS4KKy8vIE90aGVyd2lzZSwgaXQgcmV0dXJucyB0cnVlLgorLy8KKy8vIE5vdGU6IFRoaXMgZnVuY3Rpb24gc2hvdWxkIGJlIGNhbGxlZCBhZnRlciBhdHRhY2hCdWZmZXIoKSBvciBxdWV1ZUJ1ZmZlcigpIGlzCisvLyBjYWxsZWQgbWFudWFsbHkuCitib29sIHlpZWxkQnVmZmVyUXVldWVCbG9jayhjb25zdCBDMkNvbnN0R3JhcGhpY0Jsb2NrJiBibG9jayk7CisKKy8vIENhbGwgeWllbGRCdWZmZXJRdWV1ZUJsb2NrKCkgb24gYmxvY2tzIGluIHRoZSBnaXZlbiB3b3JrTGlzdC4gcHJvY2Vzc0lucHV0CisvLyBkZXRlcm1pbmVzIHdoZXRoZXIgaW5wdXQgYmxvY2tzIGFyZSB5aWVsZGVkLiBwcm9jZXNzT3V0cHV0IHdvcmtzIHNpbWlsYXJseSBvbgorLy8gb3V0cHV0IGJsb2Nrcy4gKFRoZSBkZWZhdWx0IHZhbHVlIG9mIHByb2Nlc3NJbnB1dCBpcyBmYWxzZSB3aGlsZSB0aGUgZGVmYXVsdAorLy8gdmFsdWUgb2YgcHJvY2Vzc091dHB1dCBpcyB0cnVlLiBUaGlzIGltcGxpZXMgdGhhdCBpbiBtb3N0IGNhc2VzLCBvbmx5IG91dHB1dAorLy8gYnVmZmVycyBjb250YWluIGJ1ZmZlcnF1ZXVlLWJhc2VkIGJsb2Nrcy4pCisvLworLy8gTm90ZTogVGhpcyBmdW5jdGlvbiBzaG91bGQgYmUgY2FsbGVkIGFmdGVyIFdvcmtCdW5kbGUgaGFzIGJlZW4gc3VjY2Vzc2Z1bGx5CisvLyBzZW50IG92ZXIgdGhlIFRyZWJsZSBib3VuZGFyeSB0byBhbm90aGVyIHByb2Nlc3MuCit2b2lkIHlpZWxkQnVmZmVyUXVldWVCbG9ja3MoY29uc3Qgc3RkOjpsaXN0PHN0ZDo6dW5pcXVlX3B0cjxDMldvcms+PiYgd29ya0xpc3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBwcm9jZXNzSW5wdXQgPSBmYWxzZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIHByb2Nlc3NPdXRwdXQgPSB0cnVlKTsKKworLy8gQXNzaWduIHRoZSBnaXZlbiBibG9jayB0byBhIGJ1ZmZlcnF1ZXVlIHNvIHRoYXQgd2hlbiB0aGUgYmxvY2sgaXMgZGVzdHJveWVkLAorLy8gY2FuY2VsQnVmZmVyKCkgd2lsbCBiZSBjYWxsZWQuCisvLworLy8gSWYgdGhlIGJsb2NrIGRvZXMgbm90IGNvbWUgZnJvbSBhIGJ1ZmZlcnF1ZXVlLWJhc2VkIGJsb2NrcG9vbCwgdGhpcyBmdW5jdGlvbgorLy8gcmV0dXJucyBmYWxzZS4KKy8vCisvLyBJZiB0aGUgYmxvY2sgYWxyZWFkeSBoYXMgYSBidWZmZXJxdWV1ZSBhc3NpZ25tZW50IHRoYXQgbWF0Y2hlcyB0aGUgZ2l2ZW4gb25lLAorLy8gdGhlIGZ1bmN0aW9uIHJldHVybnMgdHJ1ZS4KKy8vCisvLyBJZiB0aGUgYmxvY2sgYWxyZWFkeSBoYXMgYSBidWZmZXJxdWV1ZSBhc3NpZ25tZW50IHRoYXQgZG9lcyBub3QgbWF0Y2ggdGhlCisvLyBnaXZlbiBvbmUsIHRoZSBibG9jayB3aWxsIGJlIHJlYXNzaWduZWQgdG8gdGhlIGdpdmVuIGJ1ZmZlcnF1ZXVlLiBUaGlzCisvLyB3aWxsIGNhbGwgYXR0YWNoQnVmZmVyKCkgb24gdGhlIGdpdmVuIGlnYnAuIFRoZSBmdW5jdGlvbiB0aGVuIHJldHVybnMgdHJ1ZSBvbgorLy8gc3VjY2VzcyBvciBmYWxzZSBvbiBhbnkgZmFpbHVyZSBkdXJpbmcgdGhlIG9wZXJhdGlvbi4KKy8vCisvLyBOb3RlOiBUaGlzIGZ1bmN0aW9uIHNob3VsZCBiZSBjYWxsZWQgYWZ0ZXIgZGV0YWNoQnVmZmVyKCkgb3IgZGVxdWV1ZUJ1ZmZlcigpCisvLyBpcyBjYWxsZWQgbWFudWFsbHkuCitib29sIGhvbGRCdWZmZXJRdWV1ZUJsb2NrKGNvbnN0IEMyQ29uc3RHcmFwaGljQmxvY2smIGJsb2NrLAorICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzcDxJR3JhcGhpY0J1ZmZlclByb2R1Y2VyPiYgaWdicCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDY0X3QgYnFJZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3QgZ2VuZXJhdGlvbik7CisKKy8vIENhbGwgaG9sZEJ1ZmZlclF1ZXVlQmxvY2soKSBvbiBpbnB1dCBvciBvdXRwdXQgYmxvY2tzIGluIHRoZSBnaXZlbiB3b3JrTGlzdC4KKy8vIFNpbmNlIHRoZSBidWZmZXJxdWV1ZSBhc3NpZ25tZW50IGZvciBpbnB1dCBhbmQgb3V0cHV0IGJ1ZmZlcnMgY2FuIGJlCisvLyBkaWZmZXJlbnQsIHRoaXMgZnVuY3Rpb24gdGFrZXMgZm9ySW5wdXQgdG8gZGV0ZXJtaW5lIHdoZXRoZXIgdGhlIGdpdmVuCisvLyBidWZmZXJxdWV1ZSBpcyBmb3IgaW5wdXQgYnVmZmVycyBvciBvdXRwdXQgYnVmZmVycy4gKFRoZSBkZWZhdWx0IHZhbHVlIG9mCisvLyBmb3JJbnB1dCBpcyBmYWxzZS4pCisvLworLy8gSW4gdGhlIChyYXJlKSBjYXNlIHRoYXQgYm90aCBpbnB1dCBhbmQgb3V0cHV0IGJ1ZmZlcnMgYXJlIGJ1ZmZlcnF1ZXVlLWJhc2VkLAorLy8gdGhpcyBmdW5jdGlvbiBtdXN0IGJlIGNhbGxlZCB0d2ljZSwgb25jZSBmb3IgdGhlIGlucHV0IGJ1ZmZlcnMgYW5kIG9uY2UgZm9yCisvLyB0aGUgb3V0cHV0IGJ1ZmZlcnMuCisvLworLy8gTm90ZTogVGhpcyBmdW5jdGlvbiBzaG91bGQgYmUgY2FsbGVkIGFmdGVyIFdvcmtCdW5kbGUgaGFzIGJlZW4gcmVjZWl2ZWQgZnJvbQorLy8gYW5vdGhlciBwcm9jZXNzLgordm9pZCBob2xkQnVmZmVyUXVldWVCbG9ja3MoY29uc3Qgc3RkOjpsaXN0PHN0ZDo6dW5pcXVlX3B0cjxDMldvcms+PiYgd29ya0xpc3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzcDxJR3JhcGhpY0J1ZmZlclByb2R1Y2VyPiYgaWdicCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQ2NF90IGJxSWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCBnZW5lcmF0aW9uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBmb3JJbnB1dCA9IGZhbHNlKTsKKworfSAgLy8gbmFtZXNwYWNlIHV0aWxzCit9ICAvLyBuYW1lc3BhY2UgVjFfMAorfSAgLy8gbmFtZXNwYWNlIGMyCit9ICAvLyBuYW1lc3BhY2UgbWVkaWEKK30gIC8vIG5hbWVzcGFjZSBoYXJkd2FyZQorfSAgLy8gbmFtZXNwYWNlIGFuZHJvaWQKKworI2VuZGlmICAvLyBDT0RFQzJfSElETF9WMV8wX1VUSUxTX1RZUEVTX0gKZGlmZiAtLWdpdCBhL21lZGlhL2NvZGVjMi9oaWRsLzEuMC91dGlscy90eXBlcy5jcHAgYi9tZWRpYS9jb2RlYzIvaGlkbC8xLjAvdXRpbHMvdHlwZXMuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU4Mjc1MDQKLS0tIC9kZXYvbnVsbAorKysgYi9tZWRpYS9jb2RlYzIvaGlkbC8xLjAvdXRpbHMvdHlwZXMuY3BwCkBAIC0wLDAgKzEsMTgwMyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxOCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCisKKy8vI2RlZmluZSBMT0dfTkRFQlVHIDAKKyNkZWZpbmUgTE9HX1RBRyAiQ29kZWMyLXR5cGVzIgorI2luY2x1ZGUgPGxvZy9sb2cuaD4KKworI2luY2x1ZGUgPGNvZGVjMi9oaWRsLzEuMC90eXBlcy5oPgorCisjaW5jbHVkZSA8bWVkaWEvc3RhZ2VmcmlnaHQvYnFoZWxwZXIvV0dyYXBoaWNCdWZmZXJQcm9kdWNlci5oPgorCisjaW5jbHVkZSA8QzJBbGxvY2F0b3JJb24uaD4KKyNpbmNsdWRlIDxDMkFsbG9jYXRvckdyYWxsb2MuaD4KKyNpbmNsdWRlIDxDMkJsb2NrSW50ZXJuYWwuaD4KKyNpbmNsdWRlIDxDMkJ1ZmZlci5oPgorI2luY2x1ZGUgPEMyQ29tcG9uZW50Lmg+CisjaW5jbHVkZSA8QzJQYXJhbS5oPgorI2luY2x1ZGUgPEMyUGFyYW1JbnRlcm5hbC5oPgorI2luY2x1ZGUgPEMyUGxhdGZvcm1TdXBwb3J0Lmg+CisjaW5jbHVkZSA8QzJXb3JrLmg+CisjaW5jbHVkZSA8dXRpbC9DMlBhcmFtVXRpbHMuaD4KKworI2luY2x1ZGUgPGFsZ29yaXRobT4KKyNpbmNsdWRlIDxmdW5jdGlvbmFsPgorI2luY2x1ZGUgPHVub3JkZXJlZF9tYXA+CisKKyNpbmNsdWRlIDxtZWRpYS9zdGFnZWZyaWdodC9mb3VuZGF0aW9uL0FVdGlscy5oPgorCituYW1lc3BhY2UgYW5kcm9pZCB7CituYW1lc3BhY2UgaGFyZHdhcmUgeworbmFtZXNwYWNlIG1lZGlhIHsKK25hbWVzcGFjZSBjMiB7CituYW1lc3BhY2UgVjFfMCB7CituYW1lc3BhY2UgdXRpbHMgeworCit1c2luZyBuYW1lc3BhY2UgOjphbmRyb2lkOwordXNpbmcgOjphbmRyb2lkOjpoYXJkd2FyZTo6UmV0dXJuOwordXNpbmcgOjphbmRyb2lkOjpoYXJkd2FyZTo6bWVkaWE6OmJ1ZmZlcnBvb2w6OkJ1ZmZlclBvb2xEYXRhOwordXNpbmcgOjphbmRyb2lkOjpoYXJkd2FyZTo6bWVkaWE6OmJ1ZmZlcnBvb2w6OlYxXzA6OkJ1ZmZlclN0YXR1c01lc3NhZ2U7Cit1c2luZyA6OmFuZHJvaWQ6OmhhcmR3YXJlOjptZWRpYTo6YnVmZmVycG9vbDo6VjFfMDo6UmVzdWx0U3RhdHVzOwordXNpbmcgOjphbmRyb2lkOjpoYXJkd2FyZTo6bWVkaWE6OmJ1ZmZlcnBvb2w6OlYxXzA6OmltcGxlbWVudGF0aW9uOjoKKyAgICAgICAgQ2xpZW50TWFuYWdlcjsKK3VzaW5nIDo6YW5kcm9pZDo6aGFyZHdhcmU6Om1lZGlhOjpidWZmZXJwb29sOjpWMV8wOjppbXBsZW1lbnRhdGlvbjo6CisgICAgICAgIFRyYW5zYWN0aW9uSWQ7Cit1c2luZyA6OmFuZHJvaWQ6OlRXR3JhcGhpY0J1ZmZlclByb2R1Y2VyOworCituYW1lc3BhY2UgLyogdW5uYW1lZCAqLyB7CisKK3RlbXBsYXRlIDx0eXBlbmFtZSBDb21tb24sIHR5cGVuYW1lIERzdFZlY3RvciwgdHlwZW5hbWUgU3JjVmVjdG9yPgordm9pZCBjb3B5VmVjdG9yKERzdFZlY3RvciogZCwgY29uc3QgU3JjVmVjdG9yJiBzKSB7CisgICAgc3RhdGljX2Fzc2VydChzaXplb2YoQ29tbW9uKSA9PSBzaXplb2YoZGVjbHR5cGUoKCpkKVswXSkpLAorICAgICAgICAgICAgIkRzdFZlY3RvcidzIGNvbXBvbmVudCBzaXplIGRvZXMgbm90IG1hdGNoIENvbW1vbiIpOworICAgIHN0YXRpY19hc3NlcnQoc2l6ZW9mKENvbW1vbikgPT0gc2l6ZW9mKGRlY2x0eXBlKHNbMF0pKSwKKyAgICAgICAgICAgICJTcmNWZWN0b3IncyBjb21wb25lbnQgc2l6ZSBkb2VzIG5vdCBtYXRjaCBDb21tb24iKTsKKyAgICBkLT5yZXNpemUocy5zaXplKCkpOworICAgIHN0ZDo6Y29weSgKKyAgICAgICAgICAgIHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgQ29tbW9uKj4oJnNbMF0pLAorICAgICAgICAgICAgcmVpbnRlcnByZXRfY2FzdDxjb25zdCBDb21tb24qPigmc1swXSArIHMuc2l6ZSgpKSwKKyAgICAgICAgICAgIHJlaW50ZXJwcmV0X2Nhc3Q8Q29tbW9uKj4oJigqZClbMF0pKTsKK30KKworLy8gQzJQYXJhbUZpZWxkIC0+IFBhcmFtRmllbGQKK3ZvaWQgb2JqY3B5KFBhcmFtRmllbGQgKmQsIGNvbnN0IEMyUGFyYW1GaWVsZCAmcykgeworICAgIGQtPmluZGV4ID0gc3RhdGljX2Nhc3Q8UGFyYW1JbmRleD4oX0MyUGFyYW1JbnNwZWN0b3I6OkdldEluZGV4KHMpKTsKKyAgICBkLT5maWVsZElkLm9mZnNldCA9IHN0YXRpY19jYXN0PHVpbnQzMl90PihfQzJQYXJhbUluc3BlY3Rvcjo6R2V0T2Zmc2V0KHMpKTsKKyAgICBkLT5maWVsZElkLnNpemUgPSBzdGF0aWNfY2FzdDx1aW50MzJfdD4oX0MyUGFyYW1JbnNwZWN0b3I6OkdldFNpemUocykpOworfQorCitzdHJ1Y3QgQzJQYXJhbUZpZWxkQnVpbGRlciA6IHB1YmxpYyBDMlBhcmFtRmllbGQgeworICAgIEMyUGFyYW1GaWVsZEJ1aWxkZXIoKSA6IEMyUGFyYW1GaWVsZCgKKyAgICAgICAgICAgIHN0YXRpY19jYXN0PEMyUGFyYW06OkluZGV4PihzdGF0aWNfY2FzdDx1aW50MzJfdD4oMCkpLCAwLCAwKSB7CisgICAgfQorICAgIC8vIFBhcmFtRmllbGQgLT4gQzJQYXJhbUZpZWxkCisgICAgQzJQYXJhbUZpZWxkQnVpbGRlcihjb25zdCBQYXJhbUZpZWxkJiBzKSA6IEMyUGFyYW1GaWVsZCgKKyAgICAgICAgICAgIHN0YXRpY19jYXN0PEMyUGFyYW06OkluZGV4PihzdGF0aWNfY2FzdDx1aW50MzJfdD4ocy5pbmRleCkpLAorICAgICAgICAgICAgc3RhdGljX2Nhc3Q8dWludDMyX3Q+KHMuZmllbGRJZC5vZmZzZXQpLAorICAgICAgICAgICAgc3RhdGljX2Nhc3Q8dWludDMyX3Q+KHMuZmllbGRJZC5zaXplKSkgeworICAgIH0KK307CisKKy8vIEMyV29ya09yZGluYWxTdHJ1Y3QgLT4gV29ya09yZGluYWwKK3ZvaWQgb2JqY3B5KFdvcmtPcmRpbmFsICpkLCBjb25zdCBDMldvcmtPcmRpbmFsU3RydWN0ICZzKSB7CisgICAgZC0+ZnJhbWVJbmRleCA9IHN0YXRpY19jYXN0PHVpbnQ2NF90PihzLmZyYW1lSW5kZXgucGVla3UoKSk7CisgICAgZC0+dGltZXN0YW1wVXMgPSBzdGF0aWNfY2FzdDx1aW50NjRfdD4ocy50aW1lc3RhbXAucGVla3UoKSk7CisgICAgZC0+Y3VzdG9tT3JkaW5hbCA9IHN0YXRpY19jYXN0PHVpbnQ2NF90PihzLmN1c3RvbU9yZGluYWwucGVla3UoKSk7Cit9CisKKy8vIFdvcmtPcmRpbmFsIC0+IEMyV29ya09yZGluYWxTdHJ1Y3QKK3ZvaWQgb2JqY3B5KEMyV29ya09yZGluYWxTdHJ1Y3QgKmQsIGNvbnN0IFdvcmtPcmRpbmFsICZzKSB7CisgICAgZC0+ZnJhbWVJbmRleCA9IGMyX2NudHI2NF90KHMuZnJhbWVJbmRleCk7CisgICAgZC0+dGltZXN0YW1wID0gYzJfY250cjY0X3Qocy50aW1lc3RhbXBVcyk7CisgICAgZC0+Y3VzdG9tT3JkaW5hbCA9IGMyX2NudHI2NF90KHMuY3VzdG9tT3JkaW5hbCk7Cit9CisKKy8vIEMyRmllbGRTdXBwb3J0ZWRWYWx1ZXM6OnJhbmdlJ3MgdHlwZSAtPiBGaWVsZFN1cHBvcnRlZFZhbHVlczo6UmFuZ2UKK3ZvaWQgb2JqY3B5KAorICAgICAgICBGaWVsZFN1cHBvcnRlZFZhbHVlczo6UmFuZ2UqIGQsCisgICAgICAgIGNvbnN0IGRlY2x0eXBlKEMyRmllbGRTdXBwb3J0ZWRWYWx1ZXM6OnJhbmdlKSYgcykgeworICAgIGQtPm1pbiA9IHN0YXRpY19jYXN0PFByaW1pdGl2ZVZhbHVlPihzLm1pbi51NjQpOworICAgIGQtPm1heCA9IHN0YXRpY19jYXN0PFByaW1pdGl2ZVZhbHVlPihzLm1heC51NjQpOworICAgIGQtPnN0ZXAgPSBzdGF0aWNfY2FzdDxQcmltaXRpdmVWYWx1ZT4ocy5zdGVwLnU2NCk7CisgICAgZC0+bnVtID0gc3RhdGljX2Nhc3Q8UHJpbWl0aXZlVmFsdWU+KHMubnVtLnU2NCk7CisgICAgZC0+ZGVub20gPSBzdGF0aWNfY2FzdDxQcmltaXRpdmVWYWx1ZT4ocy5kZW5vbS51NjQpOworfQorCisvLyBDMkZpZWxkU3VwcG9ydGVkVmFsdWVzIC0+IEZpZWxkU3VwcG9ydGVkVmFsdWVzCitTdGF0dXMgb2JqY3B5KEZpZWxkU3VwcG9ydGVkVmFsdWVzICpkLCBjb25zdCBDMkZpZWxkU3VwcG9ydGVkVmFsdWVzICZzKSB7CisgICAgZC0+dHlwZU90aGVyID0gc3RhdGljX2Nhc3Q8aW50MzJfdD4ocy50eXBlKTsKKyAgICBzd2l0Y2ggKHMudHlwZSkgeworICAgIGNhc2UgQzJGaWVsZFN1cHBvcnRlZFZhbHVlczo6RU1QVFk6CisgICAgICAgIGQtPnR5cGUgPSBGaWVsZFN1cHBvcnRlZFZhbHVlczo6VHlwZTo6RU1QVFk7CisgICAgICAgIGQtPnZhbHVlcy5yZXNpemUoMCk7CisgICAgICAgIHJldHVybiBTdGF0dXM6Ok9LOworICAgIGNhc2UgQzJGaWVsZFN1cHBvcnRlZFZhbHVlczo6UkFOR0U6CisgICAgICAgIGQtPnR5cGUgPSBGaWVsZFN1cHBvcnRlZFZhbHVlczo6VHlwZTo6UkFOR0U7CisgICAgICAgIG9iamNweSgmZC0+cmFuZ2UsIHMucmFuZ2UpOworICAgICAgICBkLT52YWx1ZXMucmVzaXplKDApOworICAgICAgICByZXR1cm4gU3RhdHVzOjpPSzsKKyAgICBkZWZhdWx0OgorICAgICAgICBzd2l0Y2ggKHMudHlwZSkgeworICAgICAgICBjYXNlIEMyRmllbGRTdXBwb3J0ZWRWYWx1ZXM6OlZBTFVFUzoKKyAgICAgICAgICAgIGQtPnR5cGUgPSBGaWVsZFN1cHBvcnRlZFZhbHVlczo6VHlwZTo6VkFMVUVTOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgQzJGaWVsZFN1cHBvcnRlZFZhbHVlczo6RkxBR1M6CisgICAgICAgICAgICBkLT50eXBlID0gRmllbGRTdXBwb3J0ZWRWYWx1ZXM6OlR5cGU6OkZMQUdTOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBkLT50eXBlID0gRmllbGRTdXBwb3J0ZWRWYWx1ZXM6OlR5cGU6Ok9USEVSOworICAgICAgICAgICAgLy8gQ29weSBhbGwgZmllbGRzIGluIHRoaXMgY2FzZQorICAgICAgICAgICAgb2JqY3B5KCZkLT5yYW5nZSwgcy5yYW5nZSk7CisgICAgICAgIH0KKyAgICAgICAgZC0+dmFsdWVzLnJlc2l6ZShzLnZhbHVlcy5zaXplKCkpOworICAgICAgICBjb3B5VmVjdG9yPHVpbnQ2NF90PigmZC0+dmFsdWVzLCBzLnZhbHVlcyk7CisgICAgICAgIHJldHVybiBTdGF0dXM6Ok9LOworICAgIH0KK30KKworLy8gRmllbGRTdXBwb3J0ZWRWYWx1ZXM6OlJhbmdlIC0+IEMyRmllbGRTdXBwb3J0ZWRWYWx1ZXM6OnJhbmdlJ3MgdHlwZQordm9pZCBvYmpjcHkoCisgICAgICAgIGRlY2x0eXBlKEMyRmllbGRTdXBwb3J0ZWRWYWx1ZXM6OnJhbmdlKSogZCwKKyAgICAgICAgY29uc3QgRmllbGRTdXBwb3J0ZWRWYWx1ZXM6OlJhbmdlJiBzKSB7CisgICAgZC0+bWluLnU2NCA9IHN0YXRpY19jYXN0PHVpbnQ2NF90PihzLm1pbik7CisgICAgZC0+bWF4LnU2NCA9IHN0YXRpY19jYXN0PHVpbnQ2NF90PihzLm1heCk7CisgICAgZC0+c3RlcC51NjQgPSBzdGF0aWNfY2FzdDx1aW50NjRfdD4ocy5zdGVwKTsKKyAgICBkLT5udW0udTY0ID0gc3RhdGljX2Nhc3Q8dWludDY0X3Q+KHMubnVtKTsKKyAgICBkLT5kZW5vbS51NjQgPSBzdGF0aWNfY2FzdDx1aW50NjRfdD4ocy5kZW5vbSk7Cit9CisKKy8vIEZpZWxkU3VwcG9ydGVkVmFsdWVzIC0+IEMyRmllbGRTdXBwb3J0ZWRWYWx1ZXMKK2MyX3N0YXR1c190IG9iamNweShDMkZpZWxkU3VwcG9ydGVkVmFsdWVzICpkLCBjb25zdCBGaWVsZFN1cHBvcnRlZFZhbHVlcyAmcykgeworICAgIHN3aXRjaCAocy50eXBlKSB7CisgICAgY2FzZSBGaWVsZFN1cHBvcnRlZFZhbHVlczo6VHlwZTo6RU1QVFk6CisgICAgICAgIGQtPnR5cGUgPSBDMkZpZWxkU3VwcG9ydGVkVmFsdWVzOjpFTVBUWTsKKyAgICAgICAgcmV0dXJuIEMyX09LOworICAgIGNhc2UgRmllbGRTdXBwb3J0ZWRWYWx1ZXM6OlR5cGU6OlJBTkdFOgorICAgICAgICBkLT50eXBlID0gQzJGaWVsZFN1cHBvcnRlZFZhbHVlczo6UkFOR0U7CisgICAgICAgIG9iamNweSgmZC0+cmFuZ2UsIHMucmFuZ2UpOworICAgICAgICBkLT52YWx1ZXMucmVzaXplKDApOworICAgICAgICByZXR1cm4gQzJfT0s7CisgICAgZGVmYXVsdDoKKyAgICAgICAgc3dpdGNoIChzLnR5cGUpIHsKKyAgICAgICAgY2FzZSBGaWVsZFN1cHBvcnRlZFZhbHVlczo6VHlwZTo6VkFMVUVTOgorICAgICAgICAgICAgZC0+dHlwZSA9IEMyRmllbGRTdXBwb3J0ZWRWYWx1ZXM6OlZBTFVFUzsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEZpZWxkU3VwcG9ydGVkVmFsdWVzOjpUeXBlOjpGTEFHUzoKKyAgICAgICAgICAgIGQtPnR5cGUgPSBDMkZpZWxkU3VwcG9ydGVkVmFsdWVzOjpGTEFHUzsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgZC0+dHlwZSA9IHN0YXRpY19jYXN0PEMyRmllbGRTdXBwb3J0ZWRWYWx1ZXM6OnR5cGVfdD4ocy50eXBlT3RoZXIpOworICAgICAgICAgICAgLy8gQ29weSBhbGwgZmllbGRzIGluIHRoaXMgY2FzZQorICAgICAgICAgICAgb2JqY3B5KCZkLT5yYW5nZSwgcy5yYW5nZSk7CisgICAgICAgIH0KKyAgICAgICAgY29weVZlY3Rvcjx1aW50NjRfdD4oJmQtPnZhbHVlcywgcy52YWx1ZXMpOworICAgICAgICByZXR1cm4gQzJfT0s7CisgICAgfQorfQorCit9IC8vIHVubmFtZWQgbmFtZXNwYWNlCisKKy8vIEMyRmllbGRTdXBwb3J0ZWRWYWx1ZXNRdWVyeSAtPiBGaWVsZFN1cHBvcnRlZFZhbHVlc1F1ZXJ5CitTdGF0dXMgb2JqY3B5KAorICAgICAgICBGaWVsZFN1cHBvcnRlZFZhbHVlc1F1ZXJ5KiBkLAorICAgICAgICBjb25zdCBDMkZpZWxkU3VwcG9ydGVkVmFsdWVzUXVlcnkmIHMpIHsKKyAgICBvYmpjcHkoJmQtPmZpZWxkLCBzLmZpZWxkKCkpOworICAgIHN3aXRjaCAocy50eXBlKCkpIHsKKyAgICBjYXNlIEMyRmllbGRTdXBwb3J0ZWRWYWx1ZXNRdWVyeTo6UE9TU0lCTEU6CisgICAgICAgIGQtPnR5cGUgPSBGaWVsZFN1cHBvcnRlZFZhbHVlc1F1ZXJ5OjpUeXBlOjpQT1NTSUJMRTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBDMkZpZWxkU3VwcG9ydGVkVmFsdWVzUXVlcnk6OkNVUlJFTlQ6CisgICAgICAgIGQtPnR5cGUgPSBGaWVsZFN1cHBvcnRlZFZhbHVlc1F1ZXJ5OjpUeXBlOjpDVVJSRU5UOworICAgICAgICBicmVhazsKKyAgICBkZWZhdWx0OgorICAgICAgICBBTE9HRSgiVW5rbm93biB0eXBlIG9mIEMyRmllbGRTdXBwb3J0ZWRWYWx1ZXNRdWVyeTogJXUiLAorICAgICAgICAgICAgICAgIHN0YXRpY19jYXN0PHVuc2lnbmVkPihzLnR5cGUoKSkpOworICAgICAgICByZXR1cm4gU3RhdHVzOjpCQURfVkFMVUU7CisgICAgfQorICAgIHJldHVybiBTdGF0dXM6Ok9LOworfQorCisvLyBGaWVsZFN1cHBvcnRlZFZhbHVlc1F1ZXJ5IC0+IEMyRmllbGRTdXBwb3J0ZWRWYWx1ZXNRdWVyeQorYzJfc3RhdHVzX3Qgb2JqY3B5KAorICAgICAgICBDMkZpZWxkU3VwcG9ydGVkVmFsdWVzUXVlcnkqIGQsCisgICAgICAgIGNvbnN0IEZpZWxkU3VwcG9ydGVkVmFsdWVzUXVlcnkmIHMpIHsKKyAgICBDMkZpZWxkU3VwcG9ydGVkVmFsdWVzUXVlcnk6OnR5cGVfdCBkVHlwZTsKKyAgICBzd2l0Y2ggKHMudHlwZSkgeworICAgIGNhc2UgRmllbGRTdXBwb3J0ZWRWYWx1ZXNRdWVyeTo6VHlwZTo6UE9TU0lCTEU6CisgICAgICAgIGRUeXBlID0gQzJGaWVsZFN1cHBvcnRlZFZhbHVlc1F1ZXJ5OjpQT1NTSUJMRTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBGaWVsZFN1cHBvcnRlZFZhbHVlc1F1ZXJ5OjpUeXBlOjpDVVJSRU5UOgorICAgICAgICBkVHlwZSA9IEMyRmllbGRTdXBwb3J0ZWRWYWx1ZXNRdWVyeTo6Q1VSUkVOVDsKKyAgICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgICAgQUxPR0UoIlVua25vd24gdHlwZSBvZiBGaWVsZFN1cHBvcnRlZFZhbHVlc1F1ZXJ5OiAldSIsCisgICAgICAgICAgICAgICAgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KHMudHlwZSkpOworICAgICAgICByZXR1cm4gQzJfQkFEX1ZBTFVFOworICAgIH0KKyAgICAqZCA9IEMyRmllbGRTdXBwb3J0ZWRWYWx1ZXNRdWVyeShDMlBhcmFtRmllbGRCdWlsZGVyKHMuZmllbGQpLCBkVHlwZSk7CisgICAgcmV0dXJuIEMyX09LOworfQorCisvLyBDMkZpZWxkU3VwcG9ydGVkVmFsdWVzUXVlcnkgLT4gRmllbGRTdXBwb3J0ZWRWYWx1ZXNRdWVyeVJlc3VsdAorU3RhdHVzIG9iamNweSgKKyAgICAgICAgRmllbGRTdXBwb3J0ZWRWYWx1ZXNRdWVyeVJlc3VsdCogZCwKKyAgICAgICAgY29uc3QgQzJGaWVsZFN1cHBvcnRlZFZhbHVlc1F1ZXJ5JiBzKSB7CisgICAgZC0+c3RhdHVzID0gc3RhdGljX2Nhc3Q8U3RhdHVzPihzLnN0YXR1cyk7CisgICAgcmV0dXJuIG9iamNweSgmZC0+dmFsdWVzLCBzLnZhbHVlcyk7Cit9CisKKy8vIEZpZWxkU3VwcG9ydGVkVmFsdWVzUXVlcnksIEZpZWxkU3VwcG9ydGVkVmFsdWVzUXVlcnlSZXN1bHQgLT4KKy8vIEMyRmllbGRTdXBwb3J0ZWRWYWx1ZXNRdWVyeQorYzJfc3RhdHVzX3Qgb2JqY3B5KAorICAgICAgICBDMkZpZWxkU3VwcG9ydGVkVmFsdWVzUXVlcnkqIGQsCisgICAgICAgIGNvbnN0IEZpZWxkU3VwcG9ydGVkVmFsdWVzUXVlcnkmIHNxLAorICAgICAgICBjb25zdCBGaWVsZFN1cHBvcnRlZFZhbHVlc1F1ZXJ5UmVzdWx0JiBzcikgeworICAgIGMyX3N0YXR1c190IHN0YXR1cyA9IG9iamNweShkLCBzcSk7CisgICAgaWYgKHN0YXR1cyAhPSBDMl9PSykgeworICAgICAgICByZXR1cm4gc3RhdHVzOworICAgIH0KKyAgICBkLT5zdGF0dXMgPSBzdGF0aWNfY2FzdDxjMl9zdGF0dXNfdD4oc3Iuc3RhdHVzKTsKKyAgICByZXR1cm4gb2JqY3B5KCZkLT52YWx1ZXMsIHNyLnZhbHVlcyk7Cit9CisKKy8vIEMyQ29tcG9uZW50OjpUcmFpdHMgLT4gSUNvbXBvbmVudFN0b3JlOjpDb21wb25lbnRUcmFpdHMKK1N0YXR1cyBvYmpjcHkoCisgICAgICAgIElDb21wb25lbnRTdG9yZTo6Q29tcG9uZW50VHJhaXRzICpkLAorICAgICAgICBjb25zdCBDMkNvbXBvbmVudDo6VHJhaXRzICZzKSB7CisgICAgZC0+bmFtZSA9IHMubmFtZTsKKworICAgIHN3aXRjaCAocy5kb21haW4pIHsKKyAgICBjYXNlIEMyQ29tcG9uZW50OjpET01BSU5fVklERU86CisgICAgICAgIGQtPmRvbWFpbiA9IElDb21wb25lbnRTdG9yZTo6Q29tcG9uZW50VHJhaXRzOjpEb21haW46OlZJREVPOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEMyQ29tcG9uZW50OjpET01BSU5fQVVESU86CisgICAgICAgIGQtPmRvbWFpbiA9IElDb21wb25lbnRTdG9yZTo6Q29tcG9uZW50VHJhaXRzOjpEb21haW46OkFVRElPOworICAgICAgICBicmVhazsKKyAgICBkZWZhdWx0OgorICAgICAgICBkLT5kb21haW4gPSBJQ29tcG9uZW50U3RvcmU6OkNvbXBvbmVudFRyYWl0czo6RG9tYWluOjpPVEhFUjsKKyAgICB9CisgICAgZC0+ZG9tYWluT3RoZXIgPSBzdGF0aWNfY2FzdDx1aW50MzJfdD4ocy5kb21haW4pOworCisgICAgc3dpdGNoIChzLmtpbmQpIHsKKyAgICBjYXNlIEMyQ29tcG9uZW50OjpLSU5EX0RFQ09ERVI6CisgICAgICAgIGQtPmtpbmQgPSBJQ29tcG9uZW50U3RvcmU6OkNvbXBvbmVudFRyYWl0czo6S2luZDo6REVDT0RFUjsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBDMkNvbXBvbmVudDo6S0lORF9FTkNPREVSOgorICAgICAgICBkLT5raW5kID0gSUNvbXBvbmVudFN0b3JlOjpDb21wb25lbnRUcmFpdHM6OktpbmQ6OkVOQ09ERVI7CisgICAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICAgIGQtPmtpbmQgPSBJQ29tcG9uZW50U3RvcmU6OkNvbXBvbmVudFRyYWl0czo6S2luZDo6T1RIRVI7CisgICAgfQorICAgIGQtPmtpbmRPdGhlciA9IHN0YXRpY19jYXN0PHVpbnQzMl90PihzLmtpbmQpOworCisgICAgZC0+cmFuayA9IHN0YXRpY19jYXN0PHVpbnQzMl90PihzLnJhbmspOworCisgICAgZC0+bWVkaWFUeXBlID0gcy5tZWRpYVR5cGU7CisKKyAgICBkLT5hbGlhc2VzLnJlc2l6ZShzLmFsaWFzZXMuc2l6ZSgpKTsKKyAgICBmb3IgKHNpemVfdCBpeCA9IHMuYWxpYXNlcy5zaXplKCk7IGl4ID4gMDsgKSB7CisgICAgICAgIC0taXg7CisgICAgICAgIGQtPmFsaWFzZXNbaXhdID0gcy5hbGlhc2VzW2l4XTsKKyAgICB9CisgICAgcmV0dXJuIFN0YXR1czo6T0s7Cit9CisKKy8vIENvbXBvbmVudFRyYWl0cyAtPiBDMkNvbXBvbmVudDo6VHJhaXRzLCBzdGQ6OnVuaXF1ZV9wdHI8c3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+PgorYzJfc3RhdHVzX3Qgb2JqY3B5KAorICAgICAgICBDMkNvbXBvbmVudDo6VHJhaXRzKiBkLAorICAgICAgICBzdGQ6OnVuaXF1ZV9wdHI8c3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+PiogYWxpYXNlc0J1ZmZlciwKKyAgICAgICAgY29uc3QgSUNvbXBvbmVudFN0b3JlOjpDb21wb25lbnRUcmFpdHMmIHMpIHsKKyAgICBkLT5uYW1lID0gcy5uYW1lLmNfc3RyKCk7CisKKyAgICBzd2l0Y2ggKHMuZG9tYWluKSB7CisgICAgY2FzZSBJQ29tcG9uZW50U3RvcmU6OkNvbXBvbmVudFRyYWl0czo6RG9tYWluOjpWSURFTzoKKyAgICAgICAgZC0+ZG9tYWluID0gQzJDb21wb25lbnQ6OkRPTUFJTl9WSURFTzsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBJQ29tcG9uZW50U3RvcmU6OkNvbXBvbmVudFRyYWl0czo6RG9tYWluOjpBVURJTzoKKyAgICAgICAgZC0+ZG9tYWluID0gQzJDb21wb25lbnQ6OkRPTUFJTl9BVURJTzsKKyAgICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgICAgZC0+ZG9tYWluID0gc3RhdGljX2Nhc3Q8QzJDb21wb25lbnQ6OmRvbWFpbl90PihzLmRvbWFpbk90aGVyKTsKKyAgICB9CisKKyAgICBzd2l0Y2ggKHMua2luZCkgeworICAgIGNhc2UgSUNvbXBvbmVudFN0b3JlOjpDb21wb25lbnRUcmFpdHM6OktpbmQ6OkRFQ09ERVI6CisgICAgICAgIGQtPmtpbmQgPSBDMkNvbXBvbmVudDo6S0lORF9ERUNPREVSOworICAgICAgICBicmVhazsKKyAgICBjYXNlIElDb21wb25lbnRTdG9yZTo6Q29tcG9uZW50VHJhaXRzOjpLaW5kOjpFTkNPREVSOgorICAgICAgICBkLT5raW5kID0gQzJDb21wb25lbnQ6OktJTkRfRU5DT0RFUjsKKyAgICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgICAgZC0+a2luZCA9IHN0YXRpY19jYXN0PEMyQ29tcG9uZW50OjpraW5kX3Q+KHMua2luZE90aGVyKTsKKyAgICB9CisKKyAgICBkLT5yYW5rID0gc3RhdGljX2Nhc3Q8QzJDb21wb25lbnQ6OnJhbmtfdD4ocy5yYW5rKTsKKyAgICBkLT5tZWRpYVR5cGUgPSBzLm1lZGlhVHlwZS5jX3N0cigpOworCisgICAgLy8gYWxpYXNlc0J1ZmZlciBtdXN0IG5vdCBiZSByZXNpemVkIGFmdGVyIHRoaXMuCisgICAgKmFsaWFzZXNCdWZmZXIgPSBzdGQ6Om1ha2VfdW5pcXVlPHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPj4oCisgICAgICAgICAgICBzLmFsaWFzZXMuc2l6ZSgpKTsKKyAgICAoKmFsaWFzZXNCdWZmZXIpLT5yZXNpemUocy5hbGlhc2VzLnNpemUoKSk7CisgICAgc3RkOjp2ZWN0b3I8QzJTdHJpbmdMaXRlcmFsPiBkQWxpYXNlcyhzLmFsaWFzZXMuc2l6ZSgpKTsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHMuYWxpYXNlcy5zaXplKCk7ICsraSkgeworICAgICAgICAoKiphbGlhc2VzQnVmZmVyKVtpXSA9IHMuYWxpYXNlc1tpXS5jX3N0cigpOworICAgICAgICBkLT5hbGlhc2VzW2ldID0gKCoqYWxpYXNlc0J1ZmZlcilbaV0uY19zdHIoKTsKKyAgICB9CisgICAgcmV0dXJuIEMyX09LOworfQorCituYW1lc3BhY2UgLyogdW5uYW1lZCAqLyB7CisKKy8vIEMyUGFyYW1GaWVsZFZhbHVlcyAtPiBQYXJhbUZpZWxkVmFsdWVzCitTdGF0dXMgb2JqY3B5KFBhcmFtRmllbGRWYWx1ZXMgKmQsIGNvbnN0IEMyUGFyYW1GaWVsZFZhbHVlcyAmcykgeworICAgIG9iamNweSgmZC0+cGFyYW1PckZpZWxkLCBzLnBhcmFtT3JGaWVsZCk7CisgICAgaWYgKHMudmFsdWVzKSB7CisgICAgICAgIGQtPnZhbHVlcy5yZXNpemUoMSk7CisgICAgICAgIHJldHVybiBvYmpjcHkoJmQtPnZhbHVlc1swXSwgKnMudmFsdWVzKTsKKyAgICB9CisgICAgZC0+dmFsdWVzLnJlc2l6ZSgwKTsKKyAgICByZXR1cm4gU3RhdHVzOjpPSzsKK30KKworLy8gUGFyYW1GaWVsZFZhbHVlcyAtPiBDMlBhcmFtRmllbGRWYWx1ZXMKK2MyX3N0YXR1c190IG9iamNweShDMlBhcmFtRmllbGRWYWx1ZXMgKmQsIGNvbnN0IFBhcmFtRmllbGRWYWx1ZXMgJnMpIHsKKyAgICBkLT5wYXJhbU9yRmllbGQgPSBDMlBhcmFtRmllbGRCdWlsZGVyKHMucGFyYW1PckZpZWxkKTsKKyAgICBpZiAocy52YWx1ZXMuc2l6ZSgpID09IDEpIHsKKyAgICAgICAgZC0+dmFsdWVzID0gc3RkOjptYWtlX3VuaXF1ZTxDMkZpZWxkU3VwcG9ydGVkVmFsdWVzPigpOworICAgICAgICByZXR1cm4gb2JqY3B5KGQtPnZhbHVlcy5nZXQoKSwgcy52YWx1ZXNbMF0pOworICAgIH0gZWxzZSBpZiAocy52YWx1ZXMuc2l6ZSgpID09IDApIHsKKyAgICAgICAgZC0+dmFsdWVzLnJlc2V0KCk7CisgICAgICAgIHJldHVybiBDMl9PSzsKKyAgICB9CisgICAgQUxPR0UoIk11bHRpcGxlIEZpZWxkU3VwcG9ydGVkVmFsdWVzIG9iamVjdHMuICIKKyAgICAgICAgICAgICIoT25seSBvbmUgaXMgYWxsb3dlZC4pIik7CisgICAgcmV0dXJuIEMyX0JBRF9WQUxVRTsKK30KKworfSAvLyB1bm5hbWVkIG5hbWVzcGFjZQorCisvLyBDMlNldHRpbmdSZXN1bHQgLT4gU2V0dGluZ1Jlc3VsdAorU3RhdHVzIG9iamNweShTZXR0aW5nUmVzdWx0ICpkLCBjb25zdCBDMlNldHRpbmdSZXN1bHQgJnMpIHsKKyAgICBkLT5mYWlsdXJlT3RoZXIgPSBzdGF0aWNfY2FzdDx1aW50MzJfdD4ocy5mYWlsdXJlKTsKKyAgICBzd2l0Y2ggKHMuZmFpbHVyZSkgeworICAgIGNhc2UgQzJTZXR0aW5nUmVzdWx0OjpSRUFEX09OTFk6CisgICAgICAgIGQtPmZhaWx1cmUgPSBTZXR0aW5nUmVzdWx0OjpGYWlsdXJlOjpSRUFEX09OTFk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQzJTZXR0aW5nUmVzdWx0OjpNSVNNQVRDSDoKKyAgICAgICAgZC0+ZmFpbHVyZSA9IFNldHRpbmdSZXN1bHQ6OkZhaWx1cmU6Ok1JU01BVENIOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEMyU2V0dGluZ1Jlc3VsdDo6QkFEX1ZBTFVFOgorICAgICAgICBkLT5mYWlsdXJlID0gU2V0dGluZ1Jlc3VsdDo6RmFpbHVyZTo6QkFEX1ZBTFVFOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEMyU2V0dGluZ1Jlc3VsdDo6QkFEX1RZUEU6CisgICAgICAgIGQtPmZhaWx1cmUgPSBTZXR0aW5nUmVzdWx0OjpGYWlsdXJlOjpCQURfVFlQRTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBDMlNldHRpbmdSZXN1bHQ6OkJBRF9QT1JUOgorICAgICAgICBkLT5mYWlsdXJlID0gU2V0dGluZ1Jlc3VsdDo6RmFpbHVyZTo6QkFEX1BPUlQ7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQzJTZXR0aW5nUmVzdWx0OjpCQURfSU5ERVg6CisgICAgICAgIGQtPmZhaWx1cmUgPSBTZXR0aW5nUmVzdWx0OjpGYWlsdXJlOjpCQURfSU5ERVg7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQzJTZXR0aW5nUmVzdWx0OjpDT05GTElDVDoKKyAgICAgICAgZC0+ZmFpbHVyZSA9IFNldHRpbmdSZXN1bHQ6OkZhaWx1cmU6OkNPTkZMSUNUOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEMyU2V0dGluZ1Jlc3VsdDo6VU5TVVBQT1JURUQ6CisgICAgICAgIGQtPmZhaWx1cmUgPSBTZXR0aW5nUmVzdWx0OjpGYWlsdXJlOjpVTlNVUFBPUlRFRDsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBDMlNldHRpbmdSZXN1bHQ6OklORk9fQ09ORkxJQ1Q6CisgICAgICAgIGQtPmZhaWx1cmUgPSBTZXR0aW5nUmVzdWx0OjpGYWlsdXJlOjpJTkZPX0NPTkZMSUNUOworICAgICAgICBicmVhazsKKyAgICBkZWZhdWx0OgorICAgICAgICBkLT5mYWlsdXJlID0gU2V0dGluZ1Jlc3VsdDo6RmFpbHVyZTo6T1RIRVI7CisgICAgfQorICAgIFN0YXR1cyBzdGF0dXMgPSBvYmpjcHkoJmQtPmZpZWxkLCBzLmZpZWxkKTsKKyAgICBpZiAoc3RhdHVzICE9IFN0YXR1czo6T0spIHsKKyAgICAgICAgcmV0dXJuIHN0YXR1czsKKyAgICB9CisgICAgZC0+Y29uZmxpY3RzLnJlc2l6ZShzLmNvbmZsaWN0cy5zaXplKCkpOworICAgIHNpemVfdCBpID0gMDsKKyAgICBmb3IgKGNvbnN0IEMyUGFyYW1GaWVsZFZhbHVlcyYgc0NvbmZsaWN0IDogcy5jb25mbGljdHMpIHsKKyAgICAgICAgUGFyYW1GaWVsZFZhbHVlcyAmZENvbmZsaWN0ID0gZC0+Y29uZmxpY3RzW2krK107CisgICAgICAgIHN0YXR1cyA9IG9iamNweSgmZENvbmZsaWN0LCBzQ29uZmxpY3QpOworICAgICAgICBpZiAoc3RhdHVzICE9IFN0YXR1czo6T0spIHsKKyAgICAgICAgICAgIHJldHVybiBzdGF0dXM7CisgICAgICAgIH0KKyAgICB9CisgICAgcmV0dXJuIFN0YXR1czo6T0s7Cit9CisKKy8vIFNldHRpbmdSZXN1bHQgLT4gc3RkOjp1bmlxdWVfcHRyPEMyU2V0dGluZ1Jlc3VsdD4KK2MyX3N0YXR1c190IG9iamNweShzdGQ6OnVuaXF1ZV9wdHI8QzJTZXR0aW5nUmVzdWx0PiAqZCwgY29uc3QgU2V0dGluZ1Jlc3VsdCAmcykgeworICAgICpkID0gc3RkOjp1bmlxdWVfcHRyPEMyU2V0dGluZ1Jlc3VsdD4obmV3IEMyU2V0dGluZ1Jlc3VsdCB7CisgICAgICAgICAgICAuZmllbGQgPSBDMlBhcmFtRmllbGRWYWx1ZXMoQzJQYXJhbUZpZWxkQnVpbGRlcigpKSB9KTsKKyAgICBpZiAoISpkKSB7CisgICAgICAgIHJldHVybiBDMl9OT19NRU1PUlk7CisgICAgfQorCisgICAgLy8gZmFpbHVyZQorICAgIHN3aXRjaCAocy5mYWlsdXJlKSB7CisgICAgY2FzZSBTZXR0aW5nUmVzdWx0OjpGYWlsdXJlOjpSRUFEX09OTFk6CisgICAgICAgICgqZCktPmZhaWx1cmUgPSBDMlNldHRpbmdSZXN1bHQ6OlJFQURfT05MWTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBTZXR0aW5nUmVzdWx0OjpGYWlsdXJlOjpNSVNNQVRDSDoKKyAgICAgICAgKCpkKS0+ZmFpbHVyZSA9IEMyU2V0dGluZ1Jlc3VsdDo6TUlTTUFUQ0g7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgU2V0dGluZ1Jlc3VsdDo6RmFpbHVyZTo6QkFEX1ZBTFVFOgorICAgICAgICAoKmQpLT5mYWlsdXJlID0gQzJTZXR0aW5nUmVzdWx0OjpCQURfVkFMVUU7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgU2V0dGluZ1Jlc3VsdDo6RmFpbHVyZTo6QkFEX1RZUEU6CisgICAgICAgICgqZCktPmZhaWx1cmUgPSBDMlNldHRpbmdSZXN1bHQ6OkJBRF9UWVBFOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFNldHRpbmdSZXN1bHQ6OkZhaWx1cmU6OkJBRF9QT1JUOgorICAgICAgICAoKmQpLT5mYWlsdXJlID0gQzJTZXR0aW5nUmVzdWx0OjpCQURfUE9SVDsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBTZXR0aW5nUmVzdWx0OjpGYWlsdXJlOjpCQURfSU5ERVg6CisgICAgICAgICgqZCktPmZhaWx1cmUgPSBDMlNldHRpbmdSZXN1bHQ6OkJBRF9JTkRFWDsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBTZXR0aW5nUmVzdWx0OjpGYWlsdXJlOjpDT05GTElDVDoKKyAgICAgICAgKCpkKS0+ZmFpbHVyZSA9IEMyU2V0dGluZ1Jlc3VsdDo6Q09ORkxJQ1Q7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgU2V0dGluZ1Jlc3VsdDo6RmFpbHVyZTo6VU5TVVBQT1JURUQ6CisgICAgICAgICgqZCktPmZhaWx1cmUgPSBDMlNldHRpbmdSZXN1bHQ6OlVOU1VQUE9SVEVEOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFNldHRpbmdSZXN1bHQ6OkZhaWx1cmU6OklORk9fQ09ORkxJQ1Q6CisgICAgICAgICgqZCktPmZhaWx1cmUgPSBDMlNldHRpbmdSZXN1bHQ6OklORk9fQ09ORkxJQ1Q7CisgICAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICAgICgqZCktPmZhaWx1cmUgPSBzdGF0aWNfY2FzdDxDMlNldHRpbmdSZXN1bHQ6OkZhaWx1cmU+KHMuZmFpbHVyZU90aGVyKTsKKyAgICB9CisKKyAgICAvLyBmaWVsZAorICAgIGMyX3N0YXR1c190IHN0YXR1cyA9IG9iamNweSgmKCpkKS0+ZmllbGQsIHMuZmllbGQpOworICAgIGlmIChzdGF0dXMgIT0gQzJfT0spIHsKKyAgICAgICAgcmV0dXJuIHN0YXR1czsKKyAgICB9CisKKyAgICAvLyBjb25mbGljdHMKKyAgICAoKmQpLT5jb25mbGljdHMuY2xlYXIoKTsKKyAgICAoKmQpLT5jb25mbGljdHMucmVzZXJ2ZShzLmNvbmZsaWN0cy5zaXplKCkpOworICAgIGZvciAoY29uc3QgUGFyYW1GaWVsZFZhbHVlcyYgc0NvbmZsaWN0IDogcy5jb25mbGljdHMpIHsKKyAgICAgICAgKCpkKS0+Y29uZmxpY3RzLmVtcGxhY2VfYmFjaygKKyAgICAgICAgICAgICAgICBDMlBhcmFtRmllbGRWYWx1ZXN7IEMyUGFyYW1GaWVsZEJ1aWxkZXIoKSwgbnVsbHB0ciB9KTsKKyAgICAgICAgc3RhdHVzID0gb2JqY3B5KCYoKmQpLT5jb25mbGljdHMuYmFjaygpLCBzQ29uZmxpY3QpOworICAgICAgICBpZiAoc3RhdHVzICE9IEMyX09LKSB7CisgICAgICAgICAgICByZXR1cm4gc3RhdHVzOworICAgICAgICB9CisgICAgfQorICAgIHJldHVybiBDMl9PSzsKK30KKworLy8gQzJQYXJhbURlc2NyaXB0b3IgLT4gUGFyYW1EZXNjcmlwdG9yCitTdGF0dXMgb2JqY3B5KFBhcmFtRGVzY3JpcHRvciAqZCwgY29uc3QgQzJQYXJhbURlc2NyaXB0b3IgJnMpIHsKKyAgICBkLT5pbmRleCA9IHN0YXRpY19jYXN0PFBhcmFtSW5kZXg+KHMuaW5kZXgoKSk7CisgICAgZC0+YXR0cmliID0gc3RhdGljX2Nhc3Q8aGlkbF9iaXRmaWVsZDxQYXJhbURlc2NyaXB0b3I6OkF0dHJpYj4+KAorICAgICAgICAgICAgX0MyUGFyYW1JbnNwZWN0b3I6OkdldEF0dHJpYihzKSk7CisgICAgZC0+bmFtZSA9IHMubmFtZSgpOworICAgIGNvcHlWZWN0b3I8dWludDMyX3Q+KCZkLT5kZXBlbmRlbmNpZXMsIHMuZGVwZW5kZW5jaWVzKCkpOworICAgIHJldHVybiBTdGF0dXM6Ok9LOworfQorCisvLyBQYXJhbURlc2NyaXB0b3IgLT4gQzJQYXJhbURlc2NyaXB0b3IKK2MyX3N0YXR1c190IG9iamNweShzdGQ6OnNoYXJlZF9wdHI8QzJQYXJhbURlc2NyaXB0b3I+ICpkLCBjb25zdCBQYXJhbURlc2NyaXB0b3IgJnMpIHsKKyAgICBzdGQ6OnZlY3RvcjxDMlBhcmFtOjpJbmRleD4gZERlcGVuZGVuY2llczsKKyAgICBkRGVwZW5kZW5jaWVzLnJlc2VydmUocy5kZXBlbmRlbmNpZXMuc2l6ZSgpKTsKKyAgICBmb3IgKGNvbnN0IFBhcmFtSW5kZXgmIHNEZXBlbmRlbmN5IDogcy5kZXBlbmRlbmNpZXMpIHsKKyAgICAgICAgZERlcGVuZGVuY2llcy5lbXBsYWNlX2JhY2soc3RhdGljX2Nhc3Q8dWludDMyX3Q+KHNEZXBlbmRlbmN5KSk7CisgICAgfQorICAgICpkID0gc3RkOjptYWtlX3NoYXJlZDxDMlBhcmFtRGVzY3JpcHRvcj4oCisgICAgICAgICAgICBDMlBhcmFtOjpJbmRleChzdGF0aWNfY2FzdDx1aW50MzJfdD4ocy5pbmRleCkpLAorICAgICAgICAgICAgc3RhdGljX2Nhc3Q8QzJQYXJhbURlc2NyaXB0b3I6OmF0dHJpYl90PihzLmF0dHJpYiksCisgICAgICAgICAgICBDMlN0cmluZyhzLm5hbWUuY19zdHIoKSksCisgICAgICAgICAgICBzdGQ6Om1vdmUoZERlcGVuZGVuY2llcykpOworICAgIHJldHVybiBDMl9PSzsKK30KKworLy8gQzJTdHJ1Y3REZXNjcmlwdG9yIC0+IFN0cnVjdERlc2NyaXB0b3IKK1N0YXR1cyBvYmpjcHkoU3RydWN0RGVzY3JpcHRvciAqZCwgY29uc3QgQzJTdHJ1Y3REZXNjcmlwdG9yICZzKSB7CisgICAgZC0+dHlwZSA9IHN0YXRpY19jYXN0PFBhcmFtSW5kZXg+KHMuY29yZUluZGV4KCkuY29yZUluZGV4KCkpOworICAgIGQtPmZpZWxkcy5yZXNpemUocy5udW1GaWVsZHMoKSk7CisgICAgc2l6ZV90IGkgPSAwOworICAgIGZvciAoY29uc3QgYXV0byYgc0ZpZWxkIDogcykgeworICAgICAgICBGaWVsZERlc2NyaXB0b3ImIGRGaWVsZCA9IGQtPmZpZWxkc1tpKytdOworICAgICAgICBkRmllbGQuZmllbGRJZC5vZmZzZXQgPSBzdGF0aWNfY2FzdDx1aW50MzJfdD4oCisgICAgICAgICAgICAgICAgX0MyUGFyYW1JbnNwZWN0b3I6OkdldE9mZnNldChzRmllbGQpKTsKKyAgICAgICAgZEZpZWxkLmZpZWxkSWQuc2l6ZSA9IHN0YXRpY19jYXN0PHVpbnQzMl90PigKKyAgICAgICAgICAgICAgICBfQzJQYXJhbUluc3BlY3Rvcjo6R2V0U2l6ZShzRmllbGQpKTsKKyAgICAgICAgZEZpZWxkLnR5cGUgPSBzdGF0aWNfY2FzdDxoaWRsX2JpdGZpZWxkPEZpZWxkRGVzY3JpcHRvcjo6VHlwZT4+KAorICAgICAgICAgICAgICAgIHNGaWVsZC50eXBlKCkpOworICAgICAgICBkRmllbGQubGVuZ3RoID0gc3RhdGljX2Nhc3Q8dWludDMyX3Q+KHNGaWVsZC5leHRlbnQoKSk7CisgICAgICAgIGRGaWVsZC5uYW1lID0gc3RhdGljX2Nhc3Q8aGlkbF9zdHJpbmc+KHNGaWVsZC5uYW1lKCkpOworICAgICAgICBjb25zdCBhdXRvJiBzTmFtZWRWYWx1ZXMgPSBzRmllbGQubmFtZWRWYWx1ZXMoKTsKKyAgICAgICAgZEZpZWxkLm5hbWVkVmFsdWVzLnJlc2l6ZShzTmFtZWRWYWx1ZXMuc2l6ZSgpKTsKKyAgICAgICAgc2l6ZV90IGogPSAwOworICAgICAgICBmb3IgKGNvbnN0IGF1dG8mIHNOYW1lZFZhbHVlIDogc05hbWVkVmFsdWVzKSB7CisgICAgICAgICAgICBGaWVsZERlc2NyaXB0b3I6Ok5hbWVkVmFsdWUmIGROYW1lZFZhbHVlID0gZEZpZWxkLm5hbWVkVmFsdWVzW2orK107CisgICAgICAgICAgICBkTmFtZWRWYWx1ZS5uYW1lID0gc3RhdGljX2Nhc3Q8aGlkbF9zdHJpbmc+KHNOYW1lZFZhbHVlLmZpcnN0KTsKKyAgICAgICAgICAgIGROYW1lZFZhbHVlLnZhbHVlID0gc3RhdGljX2Nhc3Q8UHJpbWl0aXZlVmFsdWU+KAorICAgICAgICAgICAgICAgICAgICBzTmFtZWRWYWx1ZS5zZWNvbmQudTY0KTsKKyAgICAgICAgfQorICAgIH0KKyAgICByZXR1cm4gU3RhdHVzOjpPSzsKK30KKworLy8gU3RydWN0RGVzY3JpcHRvciAtPiBDMlN0cnVjdERlc2NyaXB0b3IKK2MyX3N0YXR1c190IG9iamNweShzdGQ6OnVuaXF1ZV9wdHI8QzJTdHJ1Y3REZXNjcmlwdG9yPiAqZCwgY29uc3QgU3RydWN0RGVzY3JpcHRvciAmcykgeworICAgIEMyUGFyYW06OkNvcmVJbmRleCBkSW5kZXggPSBDMlBhcmFtOjpDb3JlSW5kZXgoc3RhdGljX2Nhc3Q8dWludDMyX3Q+KHMudHlwZSkpOworICAgIHN0ZDo6dmVjdG9yPEMyRmllbGREZXNjcmlwdG9yPiBkRmllbGRzOworICAgIGRGaWVsZHMucmVzZXJ2ZShzLmZpZWxkcy5zaXplKCkpOworICAgIGZvciAoY29uc3QgYXV0byAmc0ZpZWxkIDogcy5maWVsZHMpIHsKKyAgICAgICAgQzJGaWVsZERlc2NyaXB0b3IgZEZpZWxkID0geworICAgICAgICAgICAgc3RhdGljX2Nhc3Q8dWludDMyX3Q+KHNGaWVsZC50eXBlKSwKKyAgICAgICAgICAgIHNGaWVsZC5sZW5ndGgsCisgICAgICAgICAgICBzRmllbGQubmFtZSwKKyAgICAgICAgICAgIHNGaWVsZC5maWVsZElkLm9mZnNldCwKKyAgICAgICAgICAgIHNGaWVsZC5maWVsZElkLnNpemUgfTsKKyAgICAgICAgQzJGaWVsZERlc2NyaXB0b3I6Ok5hbWVkVmFsdWVzVHlwZSBuYW1lZFZhbHVlczsKKyAgICAgICAgbmFtZWRWYWx1ZXMucmVzZXJ2ZShzRmllbGQubmFtZWRWYWx1ZXMuc2l6ZSgpKTsKKyAgICAgICAgZm9yIChjb25zdCBhdXRvJiBzTmFtZWRWYWx1ZSA6IHNGaWVsZC5uYW1lZFZhbHVlcykgeworICAgICAgICAgICAgbmFtZWRWYWx1ZXMuZW1wbGFjZV9iYWNrKAorICAgICAgICAgICAgICAgIHNOYW1lZFZhbHVlLm5hbWUsCisgICAgICAgICAgICAgICAgQzJWYWx1ZTo6UHJpbWl0aXZlKHN0YXRpY19jYXN0PHVpbnQ2NF90PihzTmFtZWRWYWx1ZS52YWx1ZSkpKTsKKyAgICAgICAgfQorICAgICAgICBfQzJQYXJhbUluc3BlY3Rvcjo6QWRkTmFtZWRWYWx1ZXMoZEZpZWxkLCBzdGQ6Om1vdmUobmFtZWRWYWx1ZXMpKTsKKyAgICAgICAgZEZpZWxkcy5lbXBsYWNlX2JhY2soZEZpZWxkKTsKKyAgICB9CisgICAgKmQgPSBzdGQ6Om1ha2VfdW5pcXVlPEMyU3RydWN0RGVzY3JpcHRvcj4oCisgICAgICAgICAgICBfQzJQYXJhbUluc3BlY3Rvcjo6Q3JlYXRlU3RydWN0RGVzY3JpcHRvcihkSW5kZXgsIHN0ZDo6bW92ZShkRmllbGRzKSkpOworICAgIHJldHVybiBDMl9PSzsKK30KKworbmFtZXNwYWNlIC8qIHVubmFtZWQgKi8geworCisvLyBGaW5kIG9yIGFkZCBhIGhpZGwgQmFzZUJsb2NrIG9iamVjdCBmcm9tIGEgZ2l2ZW4gQzJIYW5kbGUqIHRvIGEgbGlzdCBhbmQgYW4KKy8vIGFzc29jaWF0ZWQgbWFwLgorLy8gTm90ZTogVGhlIGhhbmRsZSBpcyBub3QgY2xvbmVkLgorU3RhdHVzIF9hZGRCYXNlQmxvY2soCisgICAgICAgIHVpbnQzMl90KiBpbmRleCwKKyAgICAgICAgY29uc3QgQzJIYW5kbGUqIGhhbmRsZSwKKyAgICAgICAgc3RkOjpsaXN0PEJhc2VCbG9jaz4qIGJhc2VCbG9ja3MsCisgICAgICAgIHN0ZDo6bWFwPGNvbnN0IHZvaWQqLCB1aW50MzJfdD4qIGJhc2VCbG9ja0luZGljZXMpIHsKKyAgICBpZiAoIWhhbmRsZSkgeworICAgICAgICBBTE9HRSgiYWRkQmFzZUJsb2NrIGNhbGxlZCBvbiBhIG51bGwgQzJIYW5kbGUuIik7CisgICAgICAgIHJldHVybiBTdGF0dXM6OkJBRF9WQUxVRTsKKyAgICB9CisgICAgYXV0byBpdCA9IGJhc2VCbG9ja0luZGljZXMtPmZpbmQoaGFuZGxlKTsKKyAgICBpZiAoaXQgIT0gYmFzZUJsb2NrSW5kaWNlcy0+ZW5kKCkpIHsKKyAgICAgICAgKmluZGV4ID0gaXQtPnNlY29uZDsKKyAgICB9IGVsc2UgeworICAgICAgICAqaW5kZXggPSBiYXNlQmxvY2tzLT5zaXplKCk7CisgICAgICAgIGJhc2VCbG9ja0luZGljZXMtPmVtcGxhY2UoaGFuZGxlLCAqaW5kZXgpOworICAgICAgICBiYXNlQmxvY2tzLT5lbXBsYWNlX2JhY2soKTsKKworICAgICAgICBCYXNlQmxvY2sgJmRCYXNlQmxvY2sgPSBiYXNlQmxvY2tzLT5iYWNrKCk7CisgICAgICAgIGRCYXNlQmxvY2sudHlwZSA9IEJhc2VCbG9jazo6VHlwZTo6TkFUSVZFOworICAgICAgICAvLyBUaGlzIGRvZXMgbm90IGNsb25lIHRoZSBoYW5kbGUuCisgICAgICAgIGRCYXNlQmxvY2submF0aXZlQmxvY2sgPQorICAgICAgICAgICAgICAgIHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgbmF0aXZlX2hhbmRsZV90Kj4oaGFuZGxlKTsKKworICAgIH0KKyAgICByZXR1cm4gU3RhdHVzOjpPSzsKK30KKworLy8gRmluZCBvciBhZGQgYSBoaWRsIEJhc2VCbG9jayBvYmplY3QgZnJvbSBhIGdpdmVuIEJ1ZmZlclBvb2xEYXRhIHRvIGEgbGlzdCBhbmQKKy8vIGFuIGFzc29jaWF0ZWQgbWFwLgorU3RhdHVzIF9hZGRCYXNlQmxvY2soCisgICAgICAgIHVpbnQzMl90KiBpbmRleCwKKyAgICAgICAgY29uc3Qgc3RkOjpzaGFyZWRfcHRyPEJ1ZmZlclBvb2xEYXRhPiBicERhdGEsCisgICAgICAgIEJ1ZmZlclBvb2xTZW5kZXIqIGJ1ZmZlclBvb2xTZW5kZXIsCisgICAgICAgIHN0ZDo6bGlzdDxCYXNlQmxvY2s+KiBiYXNlQmxvY2tzLAorICAgICAgICBzdGQ6Om1hcDxjb25zdCB2b2lkKiwgdWludDMyX3Q+KiBiYXNlQmxvY2tJbmRpY2VzKSB7CisgICAgaWYgKCFicERhdGEpIHsKKyAgICAgICAgQUxPR0UoImFkZEJhc2VCbG9jayBjYWxsZWQgb24gYSBudWxsIEJ1ZmZlclBvb2xEYXRhLiIpOworICAgICAgICByZXR1cm4gU3RhdHVzOjpCQURfVkFMVUU7CisgICAgfQorICAgIGF1dG8gaXQgPSBiYXNlQmxvY2tJbmRpY2VzLT5maW5kKGJwRGF0YS5nZXQoKSk7CisgICAgaWYgKGl0ICE9IGJhc2VCbG9ja0luZGljZXMtPmVuZCgpKSB7CisgICAgICAgICppbmRleCA9IGl0LT5zZWNvbmQ7CisgICAgfSBlbHNlIHsKKyAgICAgICAgKmluZGV4ID0gYmFzZUJsb2Nrcy0+c2l6ZSgpOworICAgICAgICBiYXNlQmxvY2tJbmRpY2VzLT5lbXBsYWNlKGJwRGF0YS5nZXQoKSwgKmluZGV4KTsKKyAgICAgICAgYmFzZUJsb2Nrcy0+ZW1wbGFjZV9iYWNrKCk7CisKKyAgICAgICAgQmFzZUJsb2NrICZkQmFzZUJsb2NrID0gYmFzZUJsb2Nrcy0+YmFjaygpOworICAgICAgICBkQmFzZUJsb2NrLnR5cGUgPSBCYXNlQmxvY2s6OlR5cGU6OlBPT0xFRDsKKworICAgICAgICBpZiAoYnVmZmVyUG9vbFNlbmRlcikgeworICAgICAgICAgICAgUmVzdWx0U3RhdHVzIGJwU3RhdHVzID0gYnVmZmVyUG9vbFNlbmRlci0+c2VuZCgKKyAgICAgICAgICAgICAgICAgICAgYnBEYXRhLAorICAgICAgICAgICAgICAgICAgICAmZEJhc2VCbG9jay5wb29sZWRCbG9jayk7CisKKyAgICAgICAgICAgIGlmIChicFN0YXR1cyAhPSBSZXN1bHRTdGF0dXM6Ok9LKSB7CisgICAgICAgICAgICAgICAgQUxPR0UoIkZhaWxlZCB0byBzZW5kIGJ1ZmZlciB3aXRoIEJ1ZmZlclBvb2wuIEVycm9yOiAlZC4iLAorICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGljX2Nhc3Q8aW50PihicFN0YXR1cykpOworICAgICAgICAgICAgICAgIHJldHVybiBTdGF0dXM6OkJBRF9WQUxVRTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKyAgICByZXR1cm4gU3RhdHVzOjpPSzsKK30KKworU3RhdHVzIGFkZEJhc2VCbG9jaygKKyAgICAgICAgdWludDMyX3QqIGluZGV4LAorICAgICAgICBjb25zdCBDMkhhbmRsZSogaGFuZGxlLAorICAgICAgICBjb25zdCBzdGQ6OnNoYXJlZF9wdHI8Y29uc3QgX0MyQmxvY2tQb29sRGF0YT4mIGJsb2NrUG9vbERhdGEsCisgICAgICAgIEJ1ZmZlclBvb2xTZW5kZXIqIGJ1ZmZlclBvb2xTZW5kZXIsCisgICAgICAgIHN0ZDo6bGlzdDxCYXNlQmxvY2s+KiBiYXNlQmxvY2tzLAorICAgICAgICBzdGQ6Om1hcDxjb25zdCB2b2lkKiwgdWludDMyX3Q+KiBiYXNlQmxvY2tJbmRpY2VzKSB7CisgICAgaWYgKCFibG9ja1Bvb2xEYXRhKSB7CisgICAgICAgIC8vIE5vIEJ1ZmZlclBvb2xEYXRhID09PiBOQVRJVkUgYmxvY2suCisgICAgICAgIHJldHVybiBfYWRkQmFzZUJsb2NrKAorICAgICAgICAgICAgICAgIGluZGV4LCBoYW5kbGUsCisgICAgICAgICAgICAgICAgYmFzZUJsb2NrcywgYmFzZUJsb2NrSW5kaWNlcyk7CisgICAgfQorICAgIHN3aXRjaCAoYmxvY2tQb29sRGF0YS0+Z2V0VHlwZSgpKSB7CisgICAgY2FzZSBfQzJCbG9ja1Bvb2xEYXRhOjpUWVBFX0JVRkZFUlBPT0w6IHsKKyAgICAgICAgICAgIC8vIEJ1ZmZlclBvb2xEYXRhCisgICAgICAgICAgICBzdGQ6OnNoYXJlZF9wdHI8QnVmZmVyUG9vbERhdGE+IGJwRGF0YTsKKyAgICAgICAgICAgIGlmICghX0MyQmxvY2tGYWN0b3J5OjpHZXRCdWZmZXJQb29sRGF0YShibG9ja1Bvb2xEYXRhLCAmYnBEYXRhKQorICAgICAgICAgICAgICAgICAgICB8fCAhYnBEYXRhKSB7CisgICAgICAgICAgICAgICAgQUxPR0UoIkJ1ZmZlclBvb2xEYXRhIHVuYXZhaWxhYmxlIGluIGEgYmxvY2suIik7CisgICAgICAgICAgICAgICAgcmV0dXJuIFN0YXR1czo6QkFEX1ZBTFVFOworICAgICAgICAgICAgfQorICAgICAgICAgICAgcmV0dXJuIF9hZGRCYXNlQmxvY2soCisgICAgICAgICAgICAgICAgICAgIGluZGV4LCBicERhdGEsCisgICAgICAgICAgICAgICAgICAgIGJ1ZmZlclBvb2xTZW5kZXIsIGJhc2VCbG9ja3MsIGJhc2VCbG9ja0luZGljZXMpOworICAgICAgICB9CisgICAgY2FzZSBfQzJCbG9ja1Bvb2xEYXRhOjpUWVBFX0JVRkZFUlFVRVVFOgorICAgICAgICAvLyBEbyB0aGUgc2FtZSB0aGluZyBhcyBhIE5BVElWRSBibG9jay4KKyAgICAgICAgcmV0dXJuIF9hZGRCYXNlQmxvY2soCisgICAgICAgICAgICAgICAgaW5kZXgsIGhhbmRsZSwKKyAgICAgICAgICAgICAgICBiYXNlQmxvY2tzLCBiYXNlQmxvY2tJbmRpY2VzKTsKKyAgICBkZWZhdWx0OgorICAgICAgICBBTE9HRSgiVW5rbm93biBDMkJsb2NrUG9vbERhdGEgdHlwZS4iKTsKKyAgICAgICAgcmV0dXJuIFN0YXR1czo6QkFEX1ZBTFVFOworICAgIH0KK30KKworLy8gQzJGZW5jZSAtPiBoaWRsX2hhbmRsZQorLy8gTm90ZTogRmlsZSBkZXNjcmlwdG9ycyBhcmUgbm90IGR1cGxpY2F0ZWQuIFRoZSBvcmlnaW5hbCBmaWxlIGRlc2NyaXB0b3IgbXVzdAorLy8gbm90IGJlIGNsb3NlZCBiZWZvcmUgdGhlIHRyYW5zYWN0aW9uIGlzIGNvbXBsZXRlLgorU3RhdHVzIG9iamNweShoaWRsX2hhbmRsZSogZCwgY29uc3QgQzJGZW5jZSYgcykgeworICAgICh2b2lkKXM7IC8vIFRPRE86IGltcGxlbWVudCBzLmZkKCkKKyAgICBpbnQgZmVuY2VGZCA9IC0xOworICAgIGQtPnNldFRvKG51bGxwdHIpOworICAgIGlmIChmZW5jZUZkID49IDApIHsKKyAgICAgICAgbmF0aXZlX2hhbmRsZV90ICpoYW5kbGUgPSBuYXRpdmVfaGFuZGxlX2NyZWF0ZSgxLCAwKTsKKyAgICAgICAgaWYgKCFoYW5kbGUpIHsKKyAgICAgICAgICAgIHJldHVybiBTdGF0dXM6Ok5PX01FTU9SWTsKKyAgICAgICAgfQorICAgICAgICBoYW5kbGUtPmRhdGFbMF0gPSBmZW5jZUZkOworICAgICAgICBkLT5zZXRUbyhoYW5kbGUsIHRydWUgLyogb3ducyAqLyk7CisgICAgfQorICAgIHJldHVybiBTdGF0dXM6Ok9LOworfQorCisvLyBDMkNvbnN0TGluZWFyQmxvY2sgLT4gQmxvY2sKKy8vIE5vdGU6IE5hdGl2ZSBoYW5kbGVzIGFyZSBub3QgZHVwbGljYXRlZC4gVGhlIG9yaWdpbmFsIGhhbmRsZXMgbXVzdCBub3QgYmUKKy8vIGNsb3NlZCBiZWZvcmUgdGhlIHRyYW5zYWN0aW9uIGlzIGNvbXBsZXRlLgorU3RhdHVzIG9iamNweShCbG9jayogZCwgY29uc3QgQzJDb25zdExpbmVhckJsb2NrJiBzLAorICAgICAgICBCdWZmZXJQb29sU2VuZGVyKiBidWZmZXJQb29sU2VuZGVyLAorICAgICAgICBzdGQ6Omxpc3Q8QmFzZUJsb2NrPiogYmFzZUJsb2NrcywKKyAgICAgICAgc3RkOjptYXA8Y29uc3Qgdm9pZCosIHVpbnQzMl90PiogYmFzZUJsb2NrSW5kaWNlcykgeworICAgIHN0ZDo6c2hhcmVkX3B0cjxjb25zdCBfQzJCbG9ja1Bvb2xEYXRhPiBicERhdGEgPQorICAgICAgICAgICAgX0MyQmxvY2tGYWN0b3J5OjpHZXRMaW5lYXJCbG9ja1Bvb2xEYXRhKHMpOworICAgIFN0YXR1cyBzdGF0dXMgPSBhZGRCYXNlQmxvY2soJmQtPmluZGV4LCBzLmhhbmRsZSgpLCBicERhdGEsCisgICAgICAgICAgICBidWZmZXJQb29sU2VuZGVyLCBiYXNlQmxvY2tzLCBiYXNlQmxvY2tJbmRpY2VzKTsKKyAgICBpZiAoc3RhdHVzICE9IFN0YXR1czo6T0spIHsKKyAgICAgICAgcmV0dXJuIHN0YXR1czsKKyAgICB9CisKKyAgICAvLyBDcmVhdGUgdGhlIG1ldGFkYXRhLgorICAgIEMySGlkbF9SYW5nZUluZm8gZFJhbmdlSW5mbzsKKyAgICBkUmFuZ2VJbmZvLm9mZnNldCA9IHN0YXRpY19jYXN0PHVpbnQzMl90PihzLm9mZnNldCgpKTsKKyAgICBkUmFuZ2VJbmZvLmxlbmd0aCA9IHN0YXRpY19jYXN0PHVpbnQzMl90PihzLnNpemUoKSk7CisgICAgc3RhdHVzID0gY3JlYXRlUGFyYW1zQmxvYigmZC0+bWV0YSwKKyAgICAgICAgICAgIHN0ZDo6dmVjdG9yPEMyUGFyYW0qPnsgJmRSYW5nZUluZm8gfSk7CisgICAgaWYgKHN0YXR1cyAhPSBTdGF0dXM6Ok9LKSB7CisgICAgICAgIHJldHVybiBTdGF0dXM6OkJBRF9WQUxVRTsKKyAgICB9CisKKyAgICAvLyBDb3B5IHRoZSBmZW5jZQorICAgIHJldHVybiBvYmpjcHkoJmQtPmZlbmNlLCBzLmZlbmNlKCkpOworfQorCisvLyBDMkNvbnN0R3JhcGhpY0Jsb2NrIC0+IEJsb2NrCisvLyBOb3RlOiBOYXRpdmUgaGFuZGxlcyBhcmUgbm90IGR1cGxpY2F0ZWQuIFRoZSBvcmlnaW5hbCBoYW5kbGVzIG11c3Qgbm90IGJlCisvLyBjbG9zZWQgYmVmb3JlIHRoZSB0cmFuc2FjdGlvbiBpcyBjb21wbGV0ZS4KK1N0YXR1cyBvYmpjcHkoQmxvY2sqIGQsIGNvbnN0IEMyQ29uc3RHcmFwaGljQmxvY2smIHMsCisgICAgICAgIEJ1ZmZlclBvb2xTZW5kZXIqIGJ1ZmZlclBvb2xTZW5kZXIsCisgICAgICAgIHN0ZDo6bGlzdDxCYXNlQmxvY2s+KiBiYXNlQmxvY2tzLAorICAgICAgICBzdGQ6Om1hcDxjb25zdCB2b2lkKiwgdWludDMyX3Q+KiBiYXNlQmxvY2tJbmRpY2VzKSB7CisgICAgc3RkOjpzaGFyZWRfcHRyPGNvbnN0IF9DMkJsb2NrUG9vbERhdGE+IGJwRGF0YSA9CisgICAgICAgICAgICBfQzJCbG9ja0ZhY3Rvcnk6OkdldEdyYXBoaWNCbG9ja1Bvb2xEYXRhKHMpOworICAgIFN0YXR1cyBzdGF0dXMgPSBhZGRCYXNlQmxvY2soJmQtPmluZGV4LCBzLmhhbmRsZSgpLCBicERhdGEsCisgICAgICAgICAgICBidWZmZXJQb29sU2VuZGVyLCBiYXNlQmxvY2tzLCBiYXNlQmxvY2tJbmRpY2VzKTsKKworICAgIC8vIENyZWF0ZSB0aGUgbWV0YWRhdGEuCisgICAgQzJIaWRsX1JlY3RJbmZvIGRSZWN0SW5mbzsKKyAgICBDMlJlY3Qgc1JlY3QgPSBzLmNyb3AoKTsKKyAgICBkUmVjdEluZm8ubGVmdCA9IHN0YXRpY19jYXN0PHVpbnQzMl90PihzUmVjdC5sZWZ0KTsKKyAgICBkUmVjdEluZm8udG9wID0gc3RhdGljX2Nhc3Q8dWludDMyX3Q+KHNSZWN0LnRvcCk7CisgICAgZFJlY3RJbmZvLndpZHRoID0gc3RhdGljX2Nhc3Q8dWludDMyX3Q+KHNSZWN0LndpZHRoKTsKKyAgICBkUmVjdEluZm8uaGVpZ2h0ID0gc3RhdGljX2Nhc3Q8dWludDMyX3Q+KHNSZWN0LmhlaWdodCk7CisgICAgc3RhdHVzID0gY3JlYXRlUGFyYW1zQmxvYigmZC0+bWV0YSwKKyAgICAgICAgICAgIHN0ZDo6dmVjdG9yPEMyUGFyYW0qPnsgJmRSZWN0SW5mbyB9KTsKKyAgICBpZiAoc3RhdHVzICE9IFN0YXR1czo6T0spIHsKKyAgICAgICAgcmV0dXJuIFN0YXR1czo6QkFEX1ZBTFVFOworICAgIH0KKworICAgIC8vIENvcHkgdGhlIGZlbmNlCisgICAgcmV0dXJuIG9iamNweSgmZC0+ZmVuY2UsIHMuZmVuY2UoKSk7Cit9CisKKy8vIEMyQnVmZmVyRGF0YSAtPiBCdWZmZXIKKy8vIFRoaXMgZnVuY3Rpb24gb25seSBmaWxscyBpbiBkLT5ibG9ja3MuCitTdGF0dXMgb2JqY3B5KEJ1ZmZlciogZCwgY29uc3QgQzJCdWZmZXJEYXRhJiBzLAorICAgICAgICBCdWZmZXJQb29sU2VuZGVyKiBidWZmZXJQb29sU2VuZGVyLAorICAgICAgICBzdGQ6Omxpc3Q8QmFzZUJsb2NrPiogYmFzZUJsb2NrcywKKyAgICAgICAgc3RkOjptYXA8Y29uc3Qgdm9pZCosIHVpbnQzMl90PiogYmFzZUJsb2NrSW5kaWNlcykgeworICAgIFN0YXR1cyBzdGF0dXM7CisgICAgZC0+YmxvY2tzLnJlc2l6ZSgKKyAgICAgICAgICAgIHMubGluZWFyQmxvY2tzKCkuc2l6ZSgpICsKKyAgICAgICAgICAgIHMuZ3JhcGhpY0Jsb2NrcygpLnNpemUoKSk7CisgICAgc2l6ZV90IGkgPSAwOworICAgIGZvciAoY29uc3QgQzJDb25zdExpbmVhckJsb2NrJiBsaW5lYXJCbG9jayA6IHMubGluZWFyQmxvY2tzKCkpIHsKKyAgICAgICAgQmxvY2smIGRCbG9jayA9IGQtPmJsb2Nrc1tpKytdOworICAgICAgICBzdGF0dXMgPSBvYmpjcHkoCisgICAgICAgICAgICAgICAgJmRCbG9jaywgbGluZWFyQmxvY2ssCisgICAgICAgICAgICAgICAgYnVmZmVyUG9vbFNlbmRlciwgYmFzZUJsb2NrcywgYmFzZUJsb2NrSW5kaWNlcyk7CisgICAgICAgIGlmIChzdGF0dXMgIT0gU3RhdHVzOjpPSykgeworICAgICAgICAgICAgcmV0dXJuIHN0YXR1czsKKyAgICAgICAgfQorICAgIH0KKyAgICBmb3IgKGNvbnN0IEMyQ29uc3RHcmFwaGljQmxvY2smIGdyYXBoaWNCbG9jayA6IHMuZ3JhcGhpY0Jsb2NrcygpKSB7CisgICAgICAgIEJsb2NrJiBkQmxvY2sgPSBkLT5ibG9ja3NbaSsrXTsKKyAgICAgICAgc3RhdHVzID0gb2JqY3B5KAorICAgICAgICAgICAgICAgICZkQmxvY2ssIGdyYXBoaWNCbG9jaywKKyAgICAgICAgICAgICAgICBidWZmZXJQb29sU2VuZGVyLCBiYXNlQmxvY2tzLCBiYXNlQmxvY2tJbmRpY2VzKTsKKyAgICAgICAgaWYgKHN0YXR1cyAhPSBTdGF0dXM6Ok9LKSB7CisgICAgICAgICAgICByZXR1cm4gc3RhdHVzOworICAgICAgICB9CisgICAgfQorICAgIHJldHVybiBTdGF0dXM6Ok9LOworfQorCisvLyBDMkJ1ZmZlciAtPiBCdWZmZXIKK1N0YXR1cyBvYmpjcHkoQnVmZmVyKiBkLCBjb25zdCBDMkJ1ZmZlciYgcywKKyAgICAgICAgQnVmZmVyUG9vbFNlbmRlciogYnVmZmVyUG9vbFNlbmRlciwKKyAgICAgICAgc3RkOjpsaXN0PEJhc2VCbG9jaz4qIGJhc2VCbG9ja3MsCisgICAgICAgIHN0ZDo6bWFwPGNvbnN0IHZvaWQqLCB1aW50MzJfdD4qIGJhc2VCbG9ja0luZGljZXMpIHsKKyAgICBTdGF0dXMgc3RhdHVzID0gY3JlYXRlUGFyYW1zQmxvYigmZC0+aW5mbywgcy5pbmZvKCkpOworICAgIGlmIChzdGF0dXMgIT0gU3RhdHVzOjpPSykgeworICAgICAgICByZXR1cm4gc3RhdHVzOworICAgIH0KKyAgICByZXR1cm4gb2JqY3B5KGQsIHMuZGF0YSgpLCBidWZmZXJQb29sU2VuZGVyLCBiYXNlQmxvY2tzLCBiYXNlQmxvY2tJbmRpY2VzKTsKK30KKworLy8gQzJJbmZvQnVmZmVyIC0+IEluZm9CdWZmZXIKK1N0YXR1cyBvYmpjcHkoSW5mb0J1ZmZlciogZCwgY29uc3QgQzJJbmZvQnVmZmVyJiBzLAorICAgICAgICBCdWZmZXJQb29sU2VuZGVyKiBidWZmZXJQb29sU2VuZGVyLAorICAgICAgICBzdGQ6Omxpc3Q8QmFzZUJsb2NrPiogYmFzZUJsb2NrcywKKyAgICAgICAgc3RkOjptYXA8Y29uc3Qgdm9pZCosIHVpbnQzMl90PiogYmFzZUJsb2NrSW5kaWNlcykgeworICAgIC8vIFRPRE86IEMySW5mb0J1ZmZlciBpcyBub3QgaW1wbGVtZW50ZWQuCisgICAgKHZvaWQpZDsKKyAgICAodm9pZClzOworICAgICh2b2lkKWJ1ZmZlclBvb2xTZW5kZXI7CisgICAgKHZvaWQpYmFzZUJsb2NrczsKKyAgICAodm9pZCliYXNlQmxvY2tJbmRpY2VzOworICAgIHJldHVybiBTdGF0dXM6Ok9LOworICAgIC8qCisgICAgLy8gU3R1YiBpbXBsZW1lbnRhdGlvbiB0aGF0IG1heSB3b3JrIGluIHRoZSBmdXR1cmUuCisgICAgZC0+aW5kZXggPSBzdGF0aWNfY2FzdDx1aW50MzJfdD4ocy5pbmRleCgpKTsKKyAgICBkLT5idWZmZXIuaW5mby5yZXNpemUoMCk7CisgICAgcmV0dXJuIG9iamNweSgmZC0+YnVmZmVyLCBzLmRhdGEoKSwgYmFzZUJsb2NrcywgYmFzZUJsb2NrSW5kaWNlcyk7CisgICAgKi8KK30KKworLy8gQzJGcmFtZURhdGEgLT4gRnJhbWVEYXRhCitTdGF0dXMgb2JqY3B5KEZyYW1lRGF0YSogZCwgY29uc3QgQzJGcmFtZURhdGEmIHMsCisgICAgICAgIEJ1ZmZlclBvb2xTZW5kZXIqIGJ1ZmZlclBvb2xTZW5kZXIsCisgICAgICAgIHN0ZDo6bGlzdDxCYXNlQmxvY2s+KiBiYXNlQmxvY2tzLAorICAgICAgICBzdGQ6Om1hcDxjb25zdCB2b2lkKiwgdWludDMyX3Q+KiBiYXNlQmxvY2tJbmRpY2VzKSB7CisgICAgZC0+ZmxhZ3MgPSBzdGF0aWNfY2FzdDxoaWRsX2JpdGZpZWxkPEZyYW1lRGF0YTo6RmxhZ3M+PihzLmZsYWdzKTsKKyAgICBvYmpjcHkoJmQtPm9yZGluYWwsIHMub3JkaW5hbCk7CisKKyAgICBTdGF0dXMgc3RhdHVzOworICAgIGQtPmJ1ZmZlcnMucmVzaXplKHMuYnVmZmVycy5zaXplKCkpOworICAgIHNpemVfdCBpID0gMDsKKyAgICBmb3IgKGNvbnN0IHN0ZDo6c2hhcmVkX3B0cjxDMkJ1ZmZlcj4mIHNCdWZmZXIgOiBzLmJ1ZmZlcnMpIHsKKyAgICAgICAgQnVmZmVyJiBkQnVmZmVyID0gZC0+YnVmZmVyc1tpKytdOworICAgICAgICBpZiAoIXNCdWZmZXIpIHsKKyAgICAgICAgICAgIC8vIEEgbnVsbCAocG9pbnRlciB0bykgQzJCdWZmZXIgY29ycmVzcG9uZHMgdG8gYSBCdWZmZXIgd2l0aCBlbXB0eQorICAgICAgICAgICAgLy8gaW5mbyBhbmQgYmxvY2tzLgorICAgICAgICAgICAgZEJ1ZmZlci5pbmZvLnJlc2l6ZSgwKTsKKyAgICAgICAgICAgIGRCdWZmZXIuYmxvY2tzLnJlc2l6ZSgwKTsKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB9CisgICAgICAgIHN0YXR1cyA9IG9iamNweSgKKyAgICAgICAgICAgICAgICAmZEJ1ZmZlciwgKnNCdWZmZXIsCisgICAgICAgICAgICAgICAgYnVmZmVyUG9vbFNlbmRlciwgYmFzZUJsb2NrcywgYmFzZUJsb2NrSW5kaWNlcyk7CisgICAgICAgIGlmIChzdGF0dXMgIT0gU3RhdHVzOjpPSykgeworICAgICAgICAgICAgcmV0dXJuIHN0YXR1czsKKyAgICAgICAgfQorICAgIH0KKworICAgIHN0YXR1cyA9IGNyZWF0ZVBhcmFtc0Jsb2IoJmQtPmNvbmZpZ1VwZGF0ZSwgcy5jb25maWdVcGRhdGUpOworICAgIGlmIChzdGF0dXMgIT0gU3RhdHVzOjpPSykgeworICAgICAgICByZXR1cm4gc3RhdHVzOworICAgIH0KKworICAgIGQtPmluZm9CdWZmZXJzLnJlc2l6ZShzLmluZm9CdWZmZXJzLnNpemUoKSk7CisgICAgaSA9IDA7CisgICAgZm9yIChjb25zdCBzdGQ6OnNoYXJlZF9wdHI8QzJJbmZvQnVmZmVyPiYgc0luZm9CdWZmZXIgOiBzLmluZm9CdWZmZXJzKSB7CisgICAgICAgIEluZm9CdWZmZXImIGRJbmZvQnVmZmVyID0gZC0+aW5mb0J1ZmZlcnNbaSsrXTsKKyAgICAgICAgaWYgKCFzSW5mb0J1ZmZlcikgeworICAgICAgICAgICAgQUxPR0UoIk51bGwgQzJJbmZvQnVmZmVyIik7CisgICAgICAgICAgICByZXR1cm4gU3RhdHVzOjpCQURfVkFMVUU7CisgICAgICAgIH0KKyAgICAgICAgc3RhdHVzID0gb2JqY3B5KCZkSW5mb0J1ZmZlciwgKnNJbmZvQnVmZmVyLAorICAgICAgICAgICAgICAgIGJ1ZmZlclBvb2xTZW5kZXIsIGJhc2VCbG9ja3MsIGJhc2VCbG9ja0luZGljZXMpOworICAgICAgICBpZiAoc3RhdHVzICE9IFN0YXR1czo6T0spIHsKKyAgICAgICAgICAgIHJldHVybiBzdGF0dXM7CisgICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gc3RhdHVzOworfQorCit9IC8vIHVubmFtZWQgbmFtZXNwYWNlCisKKy8vIERlZmF1bHRCdWZmZXJQb29sU2VuZGVyJ3MgaW1wbGVtZW50YXRpb24KKworRGVmYXVsdEJ1ZmZlclBvb2xTZW5kZXI6OkRlZmF1bHRCdWZmZXJQb29sU2VuZGVyKAorICAgICAgICBjb25zdCBzcDxJQ2xpZW50TWFuYWdlcj4mIHJlY2VpdmVyTWFuYWdlciwKKyAgICAgICAgc3RkOjpjaHJvbm86OnN0ZWFkeV9jbG9jazo6ZHVyYXRpb24gcmVmcmVzaEludGVydmFsKQorICAgIDogbVJlY2VpdmVyTWFuYWdlcihyZWNlaXZlck1hbmFnZXIpLAorICAgICAgbVNvdXJjZUNvbm5lY3Rpb25JZCgwKSwKKyAgICAgIG1MYXN0U2VudChzdGQ6OmNocm9ubzo6c3RlYWR5X2Nsb2NrOjpub3coKSksCisgICAgICBtUmVmcmVzaEludGVydmFsKHJlZnJlc2hJbnRlcnZhbCkgeworfQorCit2b2lkIERlZmF1bHRCdWZmZXJQb29sU2VuZGVyOjpzZXRSZWNlaXZlcigKKyAgICAgICAgY29uc3Qgc3A8SUNsaWVudE1hbmFnZXI+JiByZWNlaXZlck1hbmFnZXIsCisgICAgICAgIHN0ZDo6Y2hyb25vOjpzdGVhZHlfY2xvY2s6OmR1cmF0aW9uIHJlZnJlc2hJbnRlcnZhbCkgeworICAgIHN0ZDo6bG9ja19ndWFyZDxzdGQ6Om11dGV4PiBsb2NrKG1NdXRleCk7CisgICAgaWYgKG1SZWNlaXZlck1hbmFnZXIgIT0gcmVjZWl2ZXJNYW5hZ2VyKSB7CisgICAgICAgIG1SZWNlaXZlck1hbmFnZXIgPSByZWNlaXZlck1hbmFnZXI7CisgICAgfQorICAgIG1SZWZyZXNoSW50ZXJ2YWwgPSByZWZyZXNoSW50ZXJ2YWw7Cit9CisKK1Jlc3VsdFN0YXR1cyBEZWZhdWx0QnVmZmVyUG9vbFNlbmRlcjo6c2VuZCgKKyAgICAgICAgY29uc3Qgc3RkOjpzaGFyZWRfcHRyPEJ1ZmZlclBvb2xEYXRhPiYgYnBEYXRhLAorICAgICAgICBCdWZmZXJTdGF0dXNNZXNzYWdlKiBicE1lc3NhZ2UpIHsKKyAgICBpZiAoIW1SZWNlaXZlck1hbmFnZXIpIHsKKyAgICAgICAgQUxPR0UoIk5vIGFjY2VzcyB0byByZWNlaXZlcidzIEJ1ZmZlclBvb2wuIik7CisgICAgICAgIHJldHVybiBSZXN1bHRTdGF0dXM6Ok5PVF9GT1VORDsKKyAgICB9CisgICAgUmVzdWx0U3RhdHVzIHJzOworICAgIHN0ZDo6bG9ja19ndWFyZDxzdGQ6Om11dGV4PiBsb2NrKG1NdXRleCk7CisgICAgaWYgKCFtU2VuZGVyTWFuYWdlcikgeworICAgICAgICBtU2VuZGVyTWFuYWdlciA9IENsaWVudE1hbmFnZXI6OmdldEluc3RhbmNlKCk7CisgICAgICAgIGlmICghbVNlbmRlck1hbmFnZXIpIHsKKyAgICAgICAgICAgIEFMT0dFKCJGYWlsZWQgdG8gcmV0cmlldmUgbG9jYWwgQnVmZmVyUG9vbCBDbGllbnRNYW5hZ2VyLiIpOworICAgICAgICAgICAgcmV0dXJuIFJlc3VsdFN0YXR1czo6Q1JJVElDQUxfRVJST1I7CisgICAgICAgIH0KKyAgICB9CisgICAgaW50NjRfdCBjb25uZWN0aW9uSWQgPSBicERhdGEtPm1Db25uZWN0aW9uSWQ7CisgICAgc3RkOjpjaHJvbm86OnN0ZWFkeV9jbG9jazo6dGltZV9wb2ludCBub3cgPQorICAgICAgICAgICAgc3RkOjpjaHJvbm86OnN0ZWFkeV9jbG9jazo6bm93KCk7CisgICAgc3RkOjpjaHJvbm86OnN0ZWFkeV9jbG9jazo6ZHVyYXRpb24gaW50ZXJ2YWwgPSBub3cgLSBtTGFzdFNlbnQ7CisgICAgaWYgKG1Tb3VyY2VDb25uZWN0aW9uSWQgPT0gMCB8fAorICAgICAgICAgICAgbVNvdXJjZUNvbm5lY3Rpb25JZCAhPSBjb25uZWN0aW9uSWQgfHwKKyAgICAgICAgICAgIGludGVydmFsID4gbVJlZnJlc2hJbnRlcnZhbCkgeworICAgICAgICAvLyBJbml0aWFsaXplIHRoZSBidWZmZXJwb29sIGNvbm5lY3Rpb24uCisgICAgICAgIG1Tb3VyY2VDb25uZWN0aW9uSWQgPSBjb25uZWN0aW9uSWQ7CisgICAgICAgIGlmIChtU291cmNlQ29ubmVjdGlvbklkID09IDApIHsKKyAgICAgICAgICAgIHJldHVybiBSZXN1bHRTdGF0dXM6OkNSSVRJQ0FMX0VSUk9SOworICAgICAgICB9CisKKyAgICAgICAgaW50NjRfdCByZWNlaXZlckNvbm5lY3Rpb25JZDsKKyAgICAgICAgcnMgPSBtU2VuZGVyTWFuYWdlci0+cmVnaXN0ZXJTZW5kZXIobVJlY2VpdmVyTWFuYWdlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29ubmVjdGlvbklkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmcmVjZWl2ZXJDb25uZWN0aW9uSWQpOworICAgICAgICBpZiAoKHJzICE9IFJlc3VsdFN0YXR1czo6T0spICYmIChycyAhPSBSZXN1bHRTdGF0dXM6OkFMUkVBRFlfRVhJU1RTKSkgeworICAgICAgICAgICAgQUxPR1coInJlZ2lzdGVyU2VuZGVyIC0tIHJldHVybmVkIGVycm9yOiAlZC4iLAorICAgICAgICAgICAgICAgICAgICBzdGF0aWNfY2FzdDxpbnQ+KHJzKSk7CisgICAgICAgICAgICByZXR1cm4gcnM7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBBTE9HVigicmVnaXN0ZXJTZW5kZXIgLS0gc3VjY2VlZGVkLiIpOworICAgICAgICAgICAgbVJlY2VpdmVyQ29ubmVjdGlvbklkID0gcmVjZWl2ZXJDb25uZWN0aW9uSWQ7CisgICAgICAgIH0KKyAgICB9CisKKyAgICB1aW50NjRfdCB0cmFuc2FjdGlvbklkOworICAgIGludDY0X3QgdGltZXN0YW1wVXM7CisgICAgcnMgPSBtU2VuZGVyTWFuYWdlci0+cG9zdFNlbmQoCisgICAgICAgICAgICBtUmVjZWl2ZXJDb25uZWN0aW9uSWQsIGJwRGF0YSwgJnRyYW5zYWN0aW9uSWQsICZ0aW1lc3RhbXBVcyk7CisgICAgaWYgKHJzICE9IFJlc3VsdFN0YXR1czo6T0spIHsKKyAgICAgICAgQUxPR0UoIkNsaWVudE1hbmFnZXI6OnBvc3RTZW5kIC0tIHJldHVybmVkIGVycm9yOiAlZC4iLAorICAgICAgICAgICAgICAgIHN0YXRpY19jYXN0PGludD4ocnMpKTsKKyAgICAgICAgcmV0dXJuIHJzOworICAgIH0KKyAgICBpZiAoIWJwTWVzc2FnZSkgeworICAgICAgICBBTE9HRSgiTnVsbCBvdXRwdXQgcGFyYW1ldGVyIGZvciBCdWZmZXJTdGF0dXNNZXNzYWdlLiIpOworICAgICAgICByZXR1cm4gUmVzdWx0U3RhdHVzOjpDUklUSUNBTF9FUlJPUjsKKyAgICB9CisgICAgYnBNZXNzYWdlLT5jb25uZWN0aW9uSWQgPSBtUmVjZWl2ZXJDb25uZWN0aW9uSWQ7CisgICAgYnBNZXNzYWdlLT5idWZmZXJJZCA9IGJwRGF0YS0+bUlkOworICAgIGJwTWVzc2FnZS0+dHJhbnNhY3Rpb25JZCA9IHRyYW5zYWN0aW9uSWQ7CisgICAgYnBNZXNzYWdlLT50aW1lc3RhbXBVcyA9IHRpbWVzdGFtcFVzOworICAgIG1MYXN0U2VudCA9IG5vdzsKKyAgICByZXR1cm4gcnM7Cit9CisKKy8vIHN0ZDo6bGlzdDxzdGQ6OnVuaXF1ZV9wdHI8QzJXb3JrPj4gLT4gV29ya0J1bmRsZQorU3RhdHVzIG9iamNweSgKKyAgICAgICAgV29ya0J1bmRsZSogZCwKKyAgICAgICAgY29uc3Qgc3RkOjpsaXN0PHN0ZDo6dW5pcXVlX3B0cjxDMldvcms+PiYgcywKKyAgICAgICAgQnVmZmVyUG9vbFNlbmRlciogYnVmZmVyUG9vbFNlbmRlcikgeworICAgIFN0YXR1cyBzdGF0dXMgPSBTdGF0dXM6Ok9LOworCisgICAgLy8gYmFzZUJsb2NrcyBob2xkcyBhIGxpc3Qgb2YgQmFzZUJsb2NrIG9iamVjdHMgdGhhdCBCbG9ja3MgY2FuIHJlZmVyIHRvLgorICAgIHN0ZDo6bGlzdDxCYXNlQmxvY2s+IGJhc2VCbG9ja3M7CisKKyAgICAvLyBiYXNlQmxvY2tJbmRpY2VzIG1hcHMgYSByYXcgcG9pbnRlciB0byBuYXRpdmVfaGFuZGxlX3Qgb3IgQnVmZmVyUG9vbERhdGEKKyAgICAvLyBpbnNpZGUgYmFzZUJsb2NrcyB0byB0aGUgY29ycmVzcG9uZGluZyBpbmRleCBpbnRvIGJhc2VCbG9ja3MuIFRoZSBrZXlzCisgICAgLy8gKHBvaW50ZXJzKSBhcmUgdXNlZCB0byBpZGVudGlmeSBibG9ja3MgdGhhdCBoYXZlIHRoZSBzYW1lICJiYXNlIGJsb2NrIiBpbgorICAgIC8vIHMsIGEgbGlzdCBvZiBDMldvcmsgb2JqZWN0cy4gQmVjYXVzZSBiYXNlQmxvY2tzIHdpbGwgYmUgY29waWVkIGludG8gYQorICAgIC8vIGhpZGxfdmVjIGV2ZW50dWFsbHksIHRoZSB2YWx1ZXMgb2YgYmFzZUJsb2NrSW5kaWNlcyBhcmUgemVyby1iYXNlZAorICAgIC8vIGludGVnZXIgaW5kaWNlcyBpbnN0ZWFkIG9mIGxpc3QgaXRlcmF0b3JzLgorICAgIC8vCisgICAgLy8gTm90ZSB0aGF0IHRoZSBwb2ludGVycyBjYW4gYmUgcmF3IGJlY2F1c2UgYmFzZUJsb2NrSW5kaWNlcyBoYXMgYSBzaG9ydGVyCisgICAgLy8gbGlmZXNwYW4gdGhhbiBhbGwgb2YgYmFzZSBibG9ja3MuCisgICAgc3RkOjptYXA8Y29uc3Qgdm9pZCosIHVpbnQzMl90PiBiYXNlQmxvY2tJbmRpY2VzOworCisgICAgZC0+d29ya3MucmVzaXplKHMuc2l6ZSgpKTsKKyAgICBzaXplX3QgaSA9IDA7CisgICAgZm9yIChjb25zdCBzdGQ6OnVuaXF1ZV9wdHI8QzJXb3JrPiYgc1dvcmsgOiBzKSB7CisgICAgICAgIFdvcmsgJmRXb3JrID0gZC0+d29ya3NbaSsrXTsKKyAgICAgICAgaWYgKCFzV29yaykgeworICAgICAgICAgICAgQUxPR1coIk51bGwgQzJXb3JrIGVuY291bnRlcmVkLiIpOworICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIH0KKyAgICAgICAgc3RhdHVzID0gb2JqY3B5KCZkV29yay5pbnB1dCwgc1dvcmstPmlucHV0LAorICAgICAgICAgICAgICAgIGJ1ZmZlclBvb2xTZW5kZXIsICZiYXNlQmxvY2tzLCAmYmFzZUJsb2NrSW5kaWNlcyk7CisgICAgICAgIGlmIChzdGF0dXMgIT0gU3RhdHVzOjpPSykgeworICAgICAgICAgICAgcmV0dXJuIHN0YXR1czsKKyAgICAgICAgfQorICAgICAgICBpZiAoc1dvcmstPndvcmtsZXRzLnNpemUoKSA9PSAwKSB7CisgICAgICAgICAgICBBTE9HVygiV29yayB3aXRoIG5vIHdvcmtsZXRzLiIpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgaWYgKHNXb3JrLT53b3JrbGV0cy5zaXplKCkgPiAxKSB7CisgICAgICAgICAgICAgICAgQUxPR1coIldvcmsgd2l0aCBtdWx0aXBsZSB3b3JrbGV0cy4gIgorICAgICAgICAgICAgICAgICAgICAgICAgIk9ubHkgdGhlIGZpcnN0IHdvcmtsZXQgd2lsbCBiZSBtYXJzaGFsbGVkLiIpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKCFzV29yay0+d29ya2xldHMuZnJvbnQoKSkgeworICAgICAgICAgICAgICAgIEFMT0dFKCJOdWxsIHdvcmtsZXQgZW5jb3VudGVyZWQuIik7CisgICAgICAgICAgICAgICAgcmV0dXJuIFN0YXR1czo6QkFEX1ZBTFVFOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICAvLyBQYXJjZWwgdGhlIGZpcnN0IHdvcmtsZXQuCisgICAgICAgICAgICBjb25zdCBDMldvcmtsZXQgJnNXb3JrbGV0ID0gKnNXb3JrLT53b3JrbGV0cy5mcm9udCgpOworICAgICAgICAgICAgV29ya2xldCAmZFdvcmtsZXQgPSBkV29yay53b3JrbGV0OworCisgICAgICAgICAgICBkV29ya2xldC50dW5pbmdzLnJlc2l6ZShzV29ya2xldC50dW5pbmdzLnNpemUoKSk7CisgICAgICAgICAgICBzaXplX3QgaiA9IDA7CisgICAgICAgICAgICBmb3IgKGNvbnN0IHN0ZDo6dW5pcXVlX3B0cjxDMlR1bmluZz4mIHNUdW5pbmcgOiBzV29ya2xldC50dW5pbmdzKSB7CisgICAgICAgICAgICAgICAgc3RhdHVzID0gY3JlYXRlUGFyYW1zQmxvYigKKyAgICAgICAgICAgICAgICAgICAgICAgICZkV29ya2xldC50dW5pbmdzW2orK10sCisgICAgICAgICAgICAgICAgICAgICAgICBzdGQ6OnZlY3RvcjxDMlBhcmFtKj4KKyAgICAgICAgICAgICAgICAgICAgICAgIHsgcmVpbnRlcnByZXRfY2FzdDxDMlBhcmFtKj4oc1R1bmluZy5nZXQoKSkgfSk7CisgICAgICAgICAgICAgICAgaWYgKHN0YXR1cyAhPSBTdGF0dXM6Ok9LKSB7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBzdGF0dXM7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorCisgICAgICAgICAgICBkV29ya2xldC5mYWlsdXJlcy5yZXNpemUoc1dvcmtsZXQuZmFpbHVyZXMuc2l6ZSgpKTsKKyAgICAgICAgICAgIGogPSAwOworICAgICAgICAgICAgZm9yIChjb25zdCBzdGQ6OnVuaXF1ZV9wdHI8QzJTZXR0aW5nUmVzdWx0PiYgc0ZhaWx1cmUgOgorICAgICAgICAgICAgICAgICAgICBzV29ya2xldC5mYWlsdXJlcykgeworICAgICAgICAgICAgICAgIGlmICghc0ZhaWx1cmUpIHsKKyAgICAgICAgICAgICAgICAgICAgQUxPR0UoIk51bGwgQzJTZXR0aW5nUmVzdWx0Iik7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBTdGF0dXM6OkJBRF9WQUxVRTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgc3RhdHVzID0gb2JqY3B5KCZkV29ya2xldC5mYWlsdXJlc1tqKytdLCAqc0ZhaWx1cmUpOworICAgICAgICAgICAgICAgIGlmIChzdGF0dXMgIT0gU3RhdHVzOjpPSykgeworICAgICAgICAgICAgICAgICAgICByZXR1cm4gc3RhdHVzOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgc3RhdHVzID0gb2JqY3B5KCZkV29ya2xldC5vdXRwdXQsIHNXb3JrbGV0Lm91dHB1dCwKKyAgICAgICAgICAgICAgICAgICAgYnVmZmVyUG9vbFNlbmRlciwgJmJhc2VCbG9ja3MsICZiYXNlQmxvY2tJbmRpY2VzKTsKKyAgICAgICAgICAgIGlmIChzdGF0dXMgIT0gU3RhdHVzOjpPSykgeworICAgICAgICAgICAgICAgIHJldHVybiBzdGF0dXM7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgZFdvcmsud29ya2xldFByb2Nlc3NlZCA9IHNXb3JrLT53b3JrbGV0c1Byb2Nlc3NlZCA+IDA7CisgICAgICAgIGRXb3JrLnJlc3VsdCA9IHN0YXRpY19jYXN0PFN0YXR1cz4oc1dvcmstPnJlc3VsdCk7CisgICAgfQorCisgICAgLy8gQ29weSBzdGQ6Omxpc3Q8QmFzZUJsb2NrPiB0byBoaWRsX3ZlYzxCYXNlQmxvY2s+LgorICAgIHsKKyAgICAgICAgZC0+YmFzZUJsb2Nrcy5yZXNpemUoYmFzZUJsb2Nrcy5zaXplKCkpOworICAgICAgICBzaXplX3QgaSA9IDA7CisgICAgICAgIGZvciAoY29uc3QgQmFzZUJsb2NrJiBiYXNlQmxvY2sgOiBiYXNlQmxvY2tzKSB7CisgICAgICAgICAgICBkLT5iYXNlQmxvY2tzW2krK10gPSBiYXNlQmxvY2s7CisgICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gU3RhdHVzOjpPSzsKK30KKworbmFtZXNwYWNlIC8qIHVubmFtZWQgKi8geworCitzdHJ1Y3QgQzJCYXNlQmxvY2sgeworICAgIGVudW0gdHlwZV90IHsKKyAgICAgICAgTElORUFSLAorICAgICAgICBHUkFQSElDLAorICAgIH07CisgICAgdHlwZV90IHR5cGU7CisgICAgc3RkOjpzaGFyZWRfcHRyPEMyTGluZWFyQmxvY2s+IGxpbmVhcjsKKyAgICBzdGQ6OnNoYXJlZF9wdHI8QzJHcmFwaGljQmxvY2s+IGdyYXBoaWM7Cit9OworCisvLyBoaWRsX2hhbmRsZSAtPiBDMkZlbmNlCisvLyBOb3RlOiBGaWxlIGRlc2NyaXB0b3JzIGFyZSBub3QgZHVwbGljYXRlZC4gVGhlIG9yaWdpbmFsIGZpbGUgZGVzY3JpcHRvciBtdXN0CisvLyBub3QgYmUgY2xvc2VkIGJlZm9yZSB0aGUgdHJhbnNhY3Rpb24gaXMgY29tcGxldGUuCitjMl9zdGF0dXNfdCBvYmpjcHkoQzJGZW5jZSogZCwgY29uc3QgaGlkbF9oYW5kbGUmIHMpIHsKKyAgICAvLyBUT0RPOiBJbXBsZW1lbnQuCisgICAgKHZvaWQpczsKKyAgICAqZCA9IEMyRmVuY2UoKTsKKyAgICByZXR1cm4gQzJfT0s7Cit9CisKKy8vIEMyTGluZWFyQmxvY2ssIHZlY3RvcjxDMlBhcmFtKj4sIEMyRmVuY2UgLT4gQzJCdWZmZXIKK2MyX3N0YXR1c190IGNyZWF0ZUxpbmVhckJ1ZmZlcigKKyAgICAgICAgc3RkOjpzaGFyZWRfcHRyPEMyQnVmZmVyPiogYnVmZmVyLAorICAgICAgICBjb25zdCBzdGQ6OnNoYXJlZF9wdHI8QzJMaW5lYXJCbG9jaz4mIGJsb2NrLAorICAgICAgICBjb25zdCBzdGQ6OnZlY3RvcjxDMlBhcmFtKj4mIG1ldGEsCisgICAgICAgIGNvbnN0IEMyRmVuY2UmIGZlbmNlKSB7CisgICAgLy8gQ2hlY2sgdGhlIGJsb2NrIG1ldGEuIEl0IHNob3VsZCBoYXZlIGV4YWN0bHkgMSBDMkluZm86CisgICAgLy8gQzJIaWRsX1JhbmdlSW5mby4KKyAgICBpZiAoKG1ldGEuc2l6ZSgpICE9IDEpIHx8ICFtZXRhWzBdKSB7CisgICAgICAgIEFMT0dFKCJJbnZhbGlkIGJsb2NrIG1ldGFkYXRhIGZvciBpb24gYmxvY2suIik7CisgICAgICAgIHJldHVybiBDMl9CQURfVkFMVUU7CisgICAgfQorICAgIGlmIChtZXRhWzBdLT5zaXplKCkgIT0gc2l6ZW9mKEMySGlkbF9SYW5nZUluZm8pKSB7CisgICAgICAgIEFMT0dFKCJJbnZhbGlkIGJsb2NrIG1ldGFkYXRhIGZvciBpb24gYmxvY2s6IHJhbmdlLiIpOworICAgICAgICByZXR1cm4gQzJfQkFEX1ZBTFVFOworICAgIH0KKyAgICBDMkhpZGxfUmFuZ2VJbmZvICpyYW5nZUluZm8gPQorICAgICAgICAgICAgcmVpbnRlcnByZXRfY2FzdDxDMkhpZGxfUmFuZ2VJbmZvKj4obWV0YVswXSk7CisKKyAgICAvLyBDcmVhdGUgQzJCdWZmZXIgZnJvbSBDMkxpbmVhckJsb2NrLgorICAgICpidWZmZXIgPSBDMkJ1ZmZlcjo6Q3JlYXRlTGluZWFyQnVmZmVyKGJsb2NrLT5zaGFyZSgKKyAgICAgICAgICAgIHJhbmdlSW5mby0+b2Zmc2V0LCByYW5nZUluZm8tPmxlbmd0aCwKKyAgICAgICAgICAgIGZlbmNlKSk7CisgICAgaWYgKCEoKmJ1ZmZlcikpIHsKKyAgICAgICAgQUxPR0UoIkNhbm5vdCBjcmVhdGUgYSBsaW5lYXIgYnVmZmVyLiIpOworICAgICAgICByZXR1cm4gQzJfQkFEX1ZBTFVFOworICAgIH0KKyAgICByZXR1cm4gQzJfT0s7Cit9CisKKy8vIEMyR3JhcGhpY0Jsb2NrLCB2ZWN0b3I8QzJQYXJhbSo+LCBDMkZlbmNlIC0+IEMyQnVmZmVyCitjMl9zdGF0dXNfdCBjcmVhdGVHcmFwaGljQnVmZmVyKAorICAgICAgICBzdGQ6OnNoYXJlZF9wdHI8QzJCdWZmZXI+KiBidWZmZXIsCisgICAgICAgIGNvbnN0IHN0ZDo6c2hhcmVkX3B0cjxDMkdyYXBoaWNCbG9jaz4mIGJsb2NrLAorICAgICAgICBjb25zdCBzdGQ6OnZlY3RvcjxDMlBhcmFtKj4mIG1ldGEsCisgICAgICAgIGNvbnN0IEMyRmVuY2UmIGZlbmNlKSB7CisgICAgLy8gQ2hlY2sgdGhlIGJsb2NrIG1ldGEuIEl0IHNob3VsZCBoYXZlIGV4YWN0bHkgMSBDMkluZm86CisgICAgLy8gQzJIaWRsX1JlY3RJbmZvLgorICAgIGlmICgobWV0YS5zaXplKCkgIT0gMSkgfHwgIW1ldGFbMF0pIHsKKyAgICAgICAgQUxPR0UoIkludmFsaWQgYmxvY2sgbWV0YWRhdGEgZm9yIGdyYXBoaWMgYmxvY2suIik7CisgICAgICAgIHJldHVybiBDMl9CQURfVkFMVUU7CisgICAgfQorICAgIGlmIChtZXRhWzBdLT5zaXplKCkgIT0gc2l6ZW9mKEMySGlkbF9SZWN0SW5mbykpIHsKKyAgICAgICAgQUxPR0UoIkludmFsaWQgYmxvY2sgbWV0YWRhdGEgZm9yIGdyYXBoaWMgYmxvY2s6IGNyb3AgcmVjdC4iKTsKKyAgICAgICAgcmV0dXJuIEMyX0JBRF9WQUxVRTsKKyAgICB9CisgICAgQzJIaWRsX1JlY3RJbmZvICpyZWN0SW5mbyA9CisgICAgICAgICAgICByZWludGVycHJldF9jYXN0PEMySGlkbF9SZWN0SW5mbyo+KG1ldGFbMF0pOworCisgICAgLy8gQ3JlYXRlIEMyQnVmZmVyIGZyb20gQzJHcmFwaGljQmxvY2suCisgICAgKmJ1ZmZlciA9IEMyQnVmZmVyOjpDcmVhdGVHcmFwaGljQnVmZmVyKGJsb2NrLT5zaGFyZSgKKyAgICAgICAgICAgIEMyUmVjdChyZWN0SW5mby0+d2lkdGgsIHJlY3RJbmZvLT5oZWlnaHQpLgorICAgICAgICAgICAgYXQocmVjdEluZm8tPmxlZnQsIHJlY3RJbmZvLT50b3ApLAorICAgICAgICAgICAgZmVuY2UpKTsKKyAgICBpZiAoISgqYnVmZmVyKSkgeworICAgICAgICBBTE9HRSgiQ2Fubm90IGNyZWF0ZSBhIGdyYXBoaWMgYnVmZmVyLiIpOworICAgICAgICByZXR1cm4gQzJfQkFEX1ZBTFVFOworICAgIH0KKyAgICByZXR1cm4gQzJfT0s7Cit9CisKKy8vIEJ1ZmZlciAtPiBDMkJ1ZmZlcgorLy8gTm90ZTogVGhlIG5hdGl2ZSBoYW5kbGVzIHdpbGwgYmUgY2xvbmVkLgorYzJfc3RhdHVzX3Qgb2JqY3B5KHN0ZDo6c2hhcmVkX3B0cjxDMkJ1ZmZlcj4qIGQsIGNvbnN0IEJ1ZmZlciYgcywKKyAgICAgICAgY29uc3Qgc3RkOjp2ZWN0b3I8QzJCYXNlQmxvY2s+JiBiYXNlQmxvY2tzKSB7CisgICAgYzJfc3RhdHVzX3Qgc3RhdHVzOworICAgICpkID0gbnVsbHB0cjsKKworICAgIC8vIEN1cnJlbnRseSwgYSBub24tbnVsbCBDMkJ1ZmZlciBtdXN0IGNvbnRhaW4gZXhhY3RseSAxIGJsb2NrLgorICAgIGlmIChzLmJsb2Nrcy5zaXplKCkgPT0gMCkgeworICAgICAgICByZXR1cm4gQzJfT0s7CisgICAgfSBlbHNlIGlmIChzLmJsb2Nrcy5zaXplKCkgIT0gMSkgeworICAgICAgICBBTE9HRSgiQ3VycmVudGx5LCBhIEMyQnVmZmVyIG11c3QgY29udGFpbiBleGFjdGx5IDEgYmxvY2suIik7CisgICAgICAgIHJldHVybiBDMl9CQURfVkFMVUU7CisgICAgfQorCisgICAgY29uc3QgQmxvY2sgJnNCbG9jayA9IHMuYmxvY2tzWzBdOworICAgIGlmIChzQmxvY2suaW5kZXggPj0gYmFzZUJsb2Nrcy5zaXplKCkpIHsKKyAgICAgICAgQUxPR0UoIkluZGV4IGludG8gYmFzZUJsb2NrcyBpcyBvdXQgb2YgcmFuZ2UuIik7CisgICAgICAgIHJldHVybiBDMl9CQURfVkFMVUU7CisgICAgfQorICAgIGNvbnN0IEMyQmFzZUJsb2NrICZiYXNlQmxvY2sgPSBiYXNlQmxvY2tzW3NCbG9jay5pbmRleF07CisKKyAgICAvLyBQYXJzZSBtZXRhLgorICAgIHN0ZDo6dmVjdG9yPEMyUGFyYW0qPiBzQmxvY2tNZXRhOworICAgIHN0YXR1cyA9IHBhcnNlUGFyYW1zQmxvYigmc0Jsb2NrTWV0YSwgc0Jsb2NrLm1ldGEpOworICAgIGlmIChzdGF0dXMgIT0gQzJfT0spIHsKKyAgICAgICAgQUxPR0UoIkludmFsaWQgYmxvY2sgcGFyYW1zIGJsb2IuIik7CisgICAgICAgIHJldHVybiBDMl9CQURfVkFMVUU7CisgICAgfQorCisgICAgLy8gQ29weSBmZW5jZS4KKyAgICBDMkZlbmNlIGRGZW5jZTsKKyAgICBzdGF0dXMgPSBvYmpjcHkoJmRGZW5jZSwgc0Jsb2NrLmZlbmNlKTsKKworICAgIC8vIENvbnN0cnVjdCBhIGJsb2NrLgorICAgIHN3aXRjaCAoYmFzZUJsb2NrLnR5cGUpIHsKKyAgICBjYXNlIEMyQmFzZUJsb2NrOjpMSU5FQVI6CisgICAgICAgIHN0YXR1cyA9IGNyZWF0ZUxpbmVhckJ1ZmZlcihkLCBiYXNlQmxvY2subGluZWFyLCBzQmxvY2tNZXRhLCBkRmVuY2UpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEMyQmFzZUJsb2NrOjpHUkFQSElDOgorICAgICAgICBzdGF0dXMgPSBjcmVhdGVHcmFwaGljQnVmZmVyKGQsIGJhc2VCbG9jay5ncmFwaGljLCBzQmxvY2tNZXRhLCBkRmVuY2UpOworICAgICAgICBicmVhazsKKyAgICBkZWZhdWx0OgorICAgICAgICBBTE9HRSgiSW52YWxpZCBCYXNlQmxvY2sgdHlwZS4iKTsKKyAgICAgICAgcmV0dXJuIEMyX0JBRF9WQUxVRTsKKyAgICB9CisgICAgaWYgKHN0YXR1cyAhPSBDMl9PSykgeworICAgICAgICByZXR1cm4gc3RhdHVzOworICAgIH0KKworICAgIC8vIFBhcnNlIGluZm8KKyAgICBzdGQ6OnZlY3RvcjxDMlBhcmFtKj4gcGFyYW1zOworICAgIHN0YXR1cyA9IHBhcnNlUGFyYW1zQmxvYigmcGFyYW1zLCBzLmluZm8pOworICAgIGlmIChzdGF0dXMgIT0gQzJfT0spIHsKKyAgICAgICAgQUxPR0UoIkludmFsaWQgYnVmZmVyIHBhcmFtcyBibG9iLiIpOworICAgICAgICByZXR1cm4gc3RhdHVzOworICAgIH0KKyAgICBmb3IgKEMyUGFyYW0qIHBhcmFtIDogcGFyYW1zKSB7CisgICAgICAgIGlmIChwYXJhbSA9PSBudWxscHRyKSB7CisgICAgICAgICAgICBBTE9HRSgiTnVsbCBidWZmZXIgcGFyYW0gZW5jb3VudGVyZWQuIik7CisgICAgICAgICAgICByZXR1cm4gQzJfQkFEX1ZBTFVFOworICAgICAgICB9CisgICAgICAgIHN0ZDo6c2hhcmVkX3B0cjxDMlBhcmFtPiBjMnBhcmFtKAorICAgICAgICAgICAgICAgIEMyUGFyYW06OkNvcHkoKnBhcmFtKS5yZWxlYXNlKCkpOworICAgICAgICBpZiAoIWMycGFyYW0pIHsKKyAgICAgICAgICAgIEFMT0dFKCJJbnZhbGlkIGJ1ZmZlciBwYXJhbSBpbnNpZGUgYSBibG9iLiIpOworICAgICAgICAgICAgcmV0dXJuIEMyX0JBRF9WQUxVRTsKKyAgICAgICAgfQorICAgICAgICBzdGF0dXMgPSAoKmQpLT5zZXRJbmZvKHN0ZDo6c3RhdGljX3BvaW50ZXJfY2FzdDxDMkluZm8+KGMycGFyYW0pKTsKKyAgICAgICAgaWYgKHN0YXR1cyAhPSBDMl9PSykgeworICAgICAgICAgICAgQUxPR0UoIkMyQnVmZmVyOjpzZXRJbmZvIGZhaWxlZCgpLiIpOworICAgICAgICAgICAgcmV0dXJuIEMyX0JBRF9WQUxVRTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHJldHVybiBDMl9PSzsKK30KKworLy8gRnJhbWVEYXRhIC0+IEMyRnJhbWVEYXRhCitjMl9zdGF0dXNfdCBvYmpjcHkoQzJGcmFtZURhdGEqIGQsIGNvbnN0IEZyYW1lRGF0YSYgcywKKyAgICAgICAgY29uc3Qgc3RkOjp2ZWN0b3I8QzJCYXNlQmxvY2s+JiBiYXNlQmxvY2tzKSB7CisgICAgYzJfc3RhdHVzX3Qgc3RhdHVzOworICAgIGQtPmZsYWdzID0gc3RhdGljX2Nhc3Q8QzJGcmFtZURhdGE6OmZsYWdzX3Q+KHMuZmxhZ3MpOworICAgIG9iamNweSgmZC0+b3JkaW5hbCwgcy5vcmRpbmFsKTsKKyAgICBkLT5idWZmZXJzLmNsZWFyKCk7CisgICAgZC0+YnVmZmVycy5yZXNlcnZlKHMuYnVmZmVycy5zaXplKCkpOworICAgIGZvciAoY29uc3QgQnVmZmVyJiBzQnVmZmVyIDogcy5idWZmZXJzKSB7CisgICAgICAgIHN0ZDo6c2hhcmVkX3B0cjxDMkJ1ZmZlcj4gZEJ1ZmZlcjsKKyAgICAgICAgc3RhdHVzID0gb2JqY3B5KCZkQnVmZmVyLCBzQnVmZmVyLCBiYXNlQmxvY2tzKTsKKyAgICAgICAgaWYgKHN0YXR1cyAhPSBDMl9PSykgeworICAgICAgICAgICAgcmV0dXJuIHN0YXR1czsKKyAgICAgICAgfQorICAgICAgICBkLT5idWZmZXJzLmVtcGxhY2VfYmFjayhkQnVmZmVyKTsKKyAgICB9CisKKyAgICBzdGQ6OnZlY3RvcjxDMlBhcmFtKj4gcGFyYW1zOworICAgIHN0YXR1cyA9IHBhcnNlUGFyYW1zQmxvYigmcGFyYW1zLCBzLmNvbmZpZ1VwZGF0ZSk7CisgICAgaWYgKHN0YXR1cyAhPSBDMl9PSykgeworICAgICAgICBBTE9HRSgiRmFpbGVkIHRvIHBhcnNlIGZyYW1lIGRhdGEgcGFyYW1zLiIpOworICAgICAgICByZXR1cm4gc3RhdHVzOworICAgIH0KKyAgICBkLT5jb25maWdVcGRhdGUuY2xlYXIoKTsKKyAgICBmb3IgKEMyUGFyYW0qIHBhcmFtIDogcGFyYW1zKSB7CisgICAgICAgIGQtPmNvbmZpZ1VwZGF0ZS5lbXBsYWNlX2JhY2soQzJQYXJhbTo6Q29weSgqcGFyYW0pKTsKKyAgICAgICAgaWYgKCFkLT5jb25maWdVcGRhdGUuYmFjaygpKSB7CisgICAgICAgICAgICBBTE9HRSgiVW5leHBlY3RlZCBlcnJvciB3aGlsZSBwYXJzaW5nIGZyYW1lIGRhdGEgcGFyYW1zLiIpOworICAgICAgICAgICAgcmV0dXJuIEMyX0JBRF9WQUxVRTsKKyAgICAgICAgfQorICAgIH0KKworICAgIC8vIFRPRE86IEltcGxlbWVudCB0aGlzIG9uY2UgQzJJbmZvQnVmZmVyIGhhcyBjb25zdHJ1Y3RvcnMuCisgICAgZC0+aW5mb0J1ZmZlcnMuY2xlYXIoKTsKKyAgICByZXR1cm4gQzJfT0s7Cit9CisKKy8vIEJhc2VCbG9jayAtPiBDMkJhc2VCbG9jaworYzJfc3RhdHVzX3Qgb2JqY3B5KEMyQmFzZUJsb2NrKiBkLCBjb25zdCBCYXNlQmxvY2smIHMpIHsKKyAgICBzd2l0Y2ggKHMudHlwZSkgeworICAgIGNhc2UgQmFzZUJsb2NrOjpUeXBlOjpOQVRJVkU6IHsKKyAgICAgICAgICAgIG5hdGl2ZV9oYW5kbGVfdCogc0hhbmRsZSA9CisgICAgICAgICAgICAgICAgICAgIG5hdGl2ZV9oYW5kbGVfY2xvbmUocy5uYXRpdmVCbG9jayk7CisgICAgICAgICAgICBpZiAoc0hhbmRsZSA9PSBudWxscHRyKSB7CisgICAgICAgICAgICAgICAgQUxPR0UoIk51bGwgbmF0aXZlIGhhbmRsZSBpbiBhIGJsb2NrLiIpOworICAgICAgICAgICAgICAgIHJldHVybiBDMl9CQURfVkFMVUU7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBjb25zdCBDMkhhbmRsZSAqc0MySGFuZGxlID0KKyAgICAgICAgICAgICAgICAgICAgcmVpbnRlcnByZXRfY2FzdDxjb25zdCBDMkhhbmRsZSo+KHNIYW5kbGUpOworCisgICAgICAgICAgICBkLT5saW5lYXIgPSBfQzJCbG9ja0ZhY3Rvcnk6OkNyZWF0ZUxpbmVhckJsb2NrKHNDMkhhbmRsZSk7CisgICAgICAgICAgICBpZiAoZC0+bGluZWFyKSB7CisgICAgICAgICAgICAgICAgZC0+dHlwZSA9IEMyQmFzZUJsb2NrOjpMSU5FQVI7CisgICAgICAgICAgICAgICAgcmV0dXJuIEMyX09LOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBkLT5ncmFwaGljID0gX0MyQmxvY2tGYWN0b3J5OjpDcmVhdGVHcmFwaGljQmxvY2soc0MySGFuZGxlKTsKKyAgICAgICAgICAgIGlmIChkLT5ncmFwaGljKSB7CisgICAgICAgICAgICAgICAgZC0+dHlwZSA9IEMyQmFzZUJsb2NrOjpHUkFQSElDOworICAgICAgICAgICAgICAgIHJldHVybiBDMl9PSzsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgQUxPR0UoIlVua25vd24gaGFuZGxlIHR5cGUgaW4gbmF0aXZlIEJhc2VCbG9jay4iKTsKKyAgICAgICAgICAgIGlmIChzSGFuZGxlKSB7CisgICAgICAgICAgICAgICAgbmF0aXZlX2hhbmRsZV9jbG9zZShzSGFuZGxlKTsKKyAgICAgICAgICAgICAgICBuYXRpdmVfaGFuZGxlX2RlbGV0ZShzSGFuZGxlKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJldHVybiBDMl9CQURfVkFMVUU7CisgICAgICAgIH0KKyAgICBjYXNlIEJhc2VCbG9jazo6VHlwZTo6UE9PTEVEOiB7CisgICAgICAgICAgICBjb25zdCBCdWZmZXJTdGF0dXNNZXNzYWdlICZicE1lc3NhZ2UgPQorICAgICAgICAgICAgICAgICAgICBzLnBvb2xlZEJsb2NrOworICAgICAgICAgICAgc3A8Q2xpZW50TWFuYWdlcj4gYnAgPSBDbGllbnRNYW5hZ2VyOjpnZXRJbnN0YW5jZSgpOworICAgICAgICAgICAgc3RkOjpzaGFyZWRfcHRyPEJ1ZmZlclBvb2xEYXRhPiBicERhdGE7CisgICAgICAgICAgICBuYXRpdmVfaGFuZGxlX3QgKmNIYW5kbGU7CisgICAgICAgICAgICBSZXN1bHRTdGF0dXMgYnBTdGF0dXMgPSBicC0+cmVjZWl2ZSgKKyAgICAgICAgICAgICAgICAgICAgYnBNZXNzYWdlLmNvbm5lY3Rpb25JZCwKKyAgICAgICAgICAgICAgICAgICAgYnBNZXNzYWdlLnRyYW5zYWN0aW9uSWQsCisgICAgICAgICAgICAgICAgICAgIGJwTWVzc2FnZS5idWZmZXJJZCwKKyAgICAgICAgICAgICAgICAgICAgYnBNZXNzYWdlLnRpbWVzdGFtcFVzLAorICAgICAgICAgICAgICAgICAgICAmY0hhbmRsZSwKKyAgICAgICAgICAgICAgICAgICAgJmJwRGF0YSk7CisgICAgICAgICAgICBpZiAoYnBTdGF0dXMgIT0gUmVzdWx0U3RhdHVzOjpPSykgeworICAgICAgICAgICAgICAgIEFMT0dFKCJGYWlsZWQgdG8gcmVjZWl2ZSBidWZmZXIgZnJvbSBidWZmZXJwb29sIC0tICIKKyAgICAgICAgICAgICAgICAgICAgICAgICJyZXN1bHRTdGF0dXMgPSAlZCIsCisgICAgICAgICAgICAgICAgICAgICAgICBzdGF0aWNfY2FzdDxpbnQ+KGJwU3RhdHVzKSk7CisgICAgICAgICAgICAgICAgcmV0dXJuIHRvQzJTdGF0dXMoYnBTdGF0dXMpOworICAgICAgICAgICAgfSBlbHNlIGlmICghYnBEYXRhKSB7CisgICAgICAgICAgICAgICAgQUxPR0UoIk5vIGRhdGEgaW4gYnVmZmVycG9vbCB0cmFuc2FjdGlvbi4iKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gQzJfQkFEX1ZBTFVFOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBkLT5saW5lYXIgPSBfQzJCbG9ja0ZhY3Rvcnk6OkNyZWF0ZUxpbmVhckJsb2NrKGNIYW5kbGUsIGJwRGF0YSk7CisgICAgICAgICAgICBpZiAoZC0+bGluZWFyKSB7CisgICAgICAgICAgICAgICAgZC0+dHlwZSA9IEMyQmFzZUJsb2NrOjpMSU5FQVI7CisgICAgICAgICAgICAgICAgcmV0dXJuIEMyX09LOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBkLT5ncmFwaGljID0gX0MyQmxvY2tGYWN0b3J5OjpDcmVhdGVHcmFwaGljQmxvY2soY0hhbmRsZSwgYnBEYXRhKTsKKyAgICAgICAgICAgIGlmIChkLT5ncmFwaGljKSB7CisgICAgICAgICAgICAgICAgZC0+dHlwZSA9IEMyQmFzZUJsb2NrOjpHUkFQSElDOworICAgICAgICAgICAgICAgIHJldHVybiBDMl9PSzsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgQUxPR0UoIlVua25vd24gaGFuZGxlIHR5cGUgaW4gcG9vbGVkIEJhc2VCbG9jay4iKTsKKyAgICAgICAgICAgIHJldHVybiBDMl9CQURfVkFMVUU7CisgICAgICAgIH0KKyAgICBkZWZhdWx0OgorICAgICAgICBBTE9HRSgiQ29ycnVwdGVkIEJhc2VCbG9jayB0eXBlOiAlZCIsIHN0YXRpY19jYXN0PGludD4ocy50eXBlKSk7CisgICAgICAgIHJldHVybiBDMl9CQURfVkFMVUU7CisgICAgfQorfQorCit9IC8vIHVubmFtZWQgbmFtZXNwYWNlCisKKy8vIFdvcmtCdW5kbGUgLT4gc3RkOjpsaXN0PHN0ZDo6dW5pcXVlX3B0cjxDMldvcms+PgorYzJfc3RhdHVzX3Qgb2JqY3B5KHN0ZDo6bGlzdDxzdGQ6OnVuaXF1ZV9wdHI8QzJXb3JrPj4qIGQsIGNvbnN0IFdvcmtCdW5kbGUmIHMpIHsKKyAgICBjMl9zdGF0dXNfdCBzdGF0dXM7CisKKyAgICAvLyBDb252ZXJ0IEJhc2VCbG9ja3MgdG8gQzJCYXNlQmxvY2tzLgorICAgIHN0ZDo6dmVjdG9yPEMyQmFzZUJsb2NrPiBkQmFzZUJsb2NrcyhzLmJhc2VCbG9ja3Muc2l6ZSgpKTsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHMuYmFzZUJsb2Nrcy5zaXplKCk7ICsraSkgeworICAgICAgICBzdGF0dXMgPSBvYmpjcHkoJmRCYXNlQmxvY2tzW2ldLCBzLmJhc2VCbG9ja3NbaV0pOworICAgICAgICBpZiAoc3RhdHVzICE9IEMyX09LKSB7CisgICAgICAgICAgICByZXR1cm4gc3RhdHVzOworICAgICAgICB9CisgICAgfQorCisgICAgZC0+Y2xlYXIoKTsKKyAgICBmb3IgKGNvbnN0IFdvcmsmIHNXb3JrIDogcy53b3JrcykgeworICAgICAgICBkLT5lbXBsYWNlX2JhY2soc3RkOjptYWtlX3VuaXF1ZTxDMldvcms+KCkpOworICAgICAgICBDMldvcmsmIGRXb3JrID0gKmQtPmJhY2soKTsKKworICAgICAgICAvLyBpbnB1dAorICAgICAgICBzdGF0dXMgPSBvYmpjcHkoJmRXb3JrLmlucHV0LCBzV29yay5pbnB1dCwgZEJhc2VCbG9ja3MpOworICAgICAgICBpZiAoc3RhdHVzICE9IEMyX09LKSB7CisgICAgICAgICAgICBBTE9HRSgiRXJyb3IgY29uc3RydWN0aW5nIEMyV29yaydzIGlucHV0LiIpOworICAgICAgICAgICAgcmV0dXJuIEMyX0JBRF9WQUxVRTsKKyAgICAgICAgfQorCisgICAgICAgIC8vIHdvcmtsZXQocykKKyAgICAgICAgZFdvcmsud29ya2xldHMuY2xlYXIoKTsKKyAgICAgICAgLy8gVE9ETzogQ3VycmVudGx5LCB0dW5uZWxpbmcgaXMgbm90IHN1cHBvcnRlZC4KKyAgICAgICAgaWYgKHNXb3JrLndvcmtsZXRQcm9jZXNzZWQpIHsKKyAgICAgICAgICAgIGRXb3JrLndvcmtsZXRzUHJvY2Vzc2VkID0gMTsKKworICAgICAgICAgICAgY29uc3QgV29ya2xldCAmc1dvcmtsZXQgPSBzV29yay53b3JrbGV0OworICAgICAgICAgICAgc3RkOjp1bmlxdWVfcHRyPEMyV29ya2xldD4gZFdvcmtsZXQgPSBzdGQ6Om1ha2VfdW5pcXVlPEMyV29ya2xldD4oKTsKKworICAgICAgICAgICAgLy8gdHVuaW5ncworICAgICAgICAgICAgZFdvcmtsZXQtPnR1bmluZ3MuY2xlYXIoKTsKKyAgICAgICAgICAgIGRXb3JrbGV0LT50dW5pbmdzLnJlc2VydmUoc1dvcmtsZXQudHVuaW5ncy5zaXplKCkpOworICAgICAgICAgICAgZm9yIChjb25zdCBQYXJhbXMmIHNUdW5pbmcgOiBzV29ya2xldC50dW5pbmdzKSB7CisgICAgICAgICAgICAgICAgc3RkOjp2ZWN0b3I8QzJQYXJhbSo+IGRQYXJhbXM7CisgICAgICAgICAgICAgICAgc3RhdHVzID0gcGFyc2VQYXJhbXNCbG9iKCZkUGFyYW1zLCBzVHVuaW5nKTsKKyAgICAgICAgICAgICAgICBpZiAoc3RhdHVzICE9IEMyX09LKSB7CisgICAgICAgICAgICAgICAgICAgIEFMT0dFKCJGYWlsZWQgdG8gcGFyc2UgQzJUdW5pbmcgaW4gQzJXb3JrbGV0LiIpOworICAgICAgICAgICAgICAgICAgICByZXR1cm4gQzJfQkFEX1ZBTFVFOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBmb3IgKEMyUGFyYW0qIHBhcmFtIDogZFBhcmFtcykgeworICAgICAgICAgICAgICAgICAgICBzdGQ6OnVuaXF1ZV9wdHI8QzJQYXJhbT4gZFBhcmFtID0gQzJQYXJhbTo6Q29weSgqcGFyYW0pOworICAgICAgICAgICAgICAgICAgICBpZiAoIWRQYXJhbSkgeworICAgICAgICAgICAgICAgICAgICAgICAgQUxPR0UoIk51bGwgQzJUdW5pbmcgZW5jb3VudGVyZWQgd2hpbGUgIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAicGFyc2luZyBDMldvcmtsZXQuIik7CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gQzJfQkFEX1ZBTFVFOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGRXb3JrbGV0LT50dW5pbmdzLmVtcGxhY2VfYmFjaygKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGQ6OnVuaXF1ZV9wdHI8QzJUdW5pbmc+KAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlaW50ZXJwcmV0X2Nhc3Q8QzJUdW5pbmcqPigKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBkUGFyYW0ucmVsZWFzZSgpKSkpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIC8vIGZhaWx1cmVzCisgICAgICAgICAgICBkV29ya2xldC0+ZmFpbHVyZXMuY2xlYXIoKTsKKyAgICAgICAgICAgIGRXb3JrbGV0LT5mYWlsdXJlcy5yZXNlcnZlKHNXb3JrbGV0LmZhaWx1cmVzLnNpemUoKSk7CisgICAgICAgICAgICBmb3IgKGNvbnN0IFNldHRpbmdSZXN1bHQmIHNGYWlsdXJlIDogc1dvcmtsZXQuZmFpbHVyZXMpIHsKKyAgICAgICAgICAgICAgICBzdGQ6OnVuaXF1ZV9wdHI8QzJTZXR0aW5nUmVzdWx0PiBkRmFpbHVyZTsKKyAgICAgICAgICAgICAgICBzdGF0dXMgPSBvYmpjcHkoJmRGYWlsdXJlLCBzRmFpbHVyZSk7CisgICAgICAgICAgICAgICAgaWYgKHN0YXR1cyAhPSBDMl9PSykgeworICAgICAgICAgICAgICAgICAgICBBTE9HRSgiRmFpbGVkIHRvIGNyZWF0ZSBDMlNldHRpbmdSZXN1bHQgaW4gQzJXb3JrbGV0LiIpOworICAgICAgICAgICAgICAgICAgICByZXR1cm4gQzJfQkFEX1ZBTFVFOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBkV29ya2xldC0+ZmFpbHVyZXMuZW1wbGFjZV9iYWNrKHN0ZDo6bW92ZShkRmFpbHVyZSkpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgLy8gb3V0cHV0CisgICAgICAgICAgICBzdGF0dXMgPSBvYmpjcHkoJmRXb3JrbGV0LT5vdXRwdXQsIHNXb3JrbGV0Lm91dHB1dCwgZEJhc2VCbG9ja3MpOworICAgICAgICAgICAgaWYgKHN0YXR1cyAhPSBDMl9PSykgeworICAgICAgICAgICAgICAgIEFMT0dFKCJGYWlsZWQgdG8gY3JlYXRlIG91dHB1dCBDMkZyYW1lRGF0YS4iKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gQzJfQkFEX1ZBTFVFOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZFdvcmsud29ya2xldHMuZW1wbGFjZV9iYWNrKHN0ZDo6bW92ZShkV29ya2xldCkpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgZFdvcmsud29ya2xldHMuZW1wbGFjZV9iYWNrKHN0ZDo6bWFrZV91bmlxdWU8QzJXb3JrbGV0PigpKTsKKyAgICAgICAgICAgIGRXb3JrLndvcmtsZXRzUHJvY2Vzc2VkID0gMDsKKyAgICAgICAgfQorCisgICAgICAgIC8vIHJlc3VsdAorICAgICAgICBkV29yay5yZXN1bHQgPSBzdGF0aWNfY2FzdDxjMl9zdGF0dXNfdD4oc1dvcmsucmVzdWx0KTsKKyAgICB9CisKKyAgICByZXR1cm4gQzJfT0s7Cit9CisKK2NvbnN0ZXhwciBzaXplX3QgUEFSQU1TX0FMSUdOTUVOVCA9IDg7ICAvLyA2NC1iaXQgYWxpZ25tZW50CitzdGF0aWNfYXNzZXJ0KFBBUkFNU19BTElHTk1FTlQgJSBhbGlnbm9mKEMyUGFyYW0pID09IDAsICJDMlBhcmFtIGFsaWdubWVudCBtaXNtYXRjaCIpOworc3RhdGljX2Fzc2VydChQQVJBTVNfQUxJR05NRU5UICUgYWxpZ25vZihDMkluZm8pID09IDAsICJDMlBhcmFtIGFsaWdubWVudCBtaXNtYXRjaCIpOworc3RhdGljX2Fzc2VydChQQVJBTVNfQUxJR05NRU5UICUgYWxpZ25vZihDMlR1bmluZykgPT0gMCwgIkMyUGFyYW0gYWxpZ25tZW50IG1pc21hdGNoIik7CisKKy8vIFBhcmFtcyAtPiBzdGQ6OnZlY3RvcjxDMlBhcmFtKj4KK2MyX3N0YXR1c190IHBhcnNlUGFyYW1zQmxvYihzdGQ6OnZlY3RvcjxDMlBhcmFtKj4gKnBhcmFtcywgY29uc3QgaGlkbF92ZWM8dWludDhfdD4gJmJsb2IpIHsKKyAgICAvLyBhc3N1bWluZyBibG9iIGlzIGNvbnN0IGhlcmUKKyAgICBzaXplX3Qgc2l6ZSA9IGJsb2Iuc2l6ZSgpOworICAgIHNpemVfdCBpeCA9IDA7CisgICAgY29uc3QgdWludDhfdCAqZGF0YSA9IGJsb2IuZGF0YSgpOworICAgIEMyUGFyYW0gKnAgPSBudWxscHRyOworCisgICAgZG8geworICAgICAgICBwID0gQzJQYXJhbVV0aWxzOjpQYXJzZUZpcnN0KGRhdGEgKyBpeCwgc2l6ZSAtIGl4KTsKKyAgICAgICAgaWYgKHApIHsKKyAgICAgICAgICAgIHBhcmFtcy0+ZW1wbGFjZV9iYWNrKHApOworICAgICAgICAgICAgaXggKz0gcC0+c2l6ZSgpOworICAgICAgICAgICAgaXggPSBhbGlnbihpeCwgUEFSQU1TX0FMSUdOTUVOVCk7CisgICAgICAgIH0KKyAgICB9IHdoaWxlIChwKTsKKworICAgIHJldHVybiBpeCA9PSBzaXplID8gQzJfT0sgOiBDMl9CQURfVkFMVUU7Cit9CisKK25hbWVzcGFjZSAvKiB1bm5hbWVkICovIHsKKworLyoqCisgKiBDb25jYXRlbmF0ZXMgYSBsaXN0IG9mIEMyUGFyYW1zIGludG8gYSBwYXJhbXMgYmxvYi4KKyAqIFxwYXJhbVtvdXRdIGJsb2IgdGFyZ2V0IGJsb2IKKyAqIFxwYXJhbVtpbl0gcGFyYW1zIHBhcmFtZXRlcnMgdG8gY29uY2F0ZW5hdGUKKyAqIFxyZXR2YWwgQzJfT0sgaWYgdGhlIGJsb2Igd2FzIHN1Y2Nlc3NmdWxseSBjcmVhdGVkCisgKiBccmV0dmFsIEMyX0JBRF9WQUxVRSBpZiB0aGUgYmxvYiB3YXMgbm90IHN1Y2Nlc3NmdWwgKHRoaXMgb25seSBoYXBwZW5zIGlmIHRoZSBwYXJhbWV0ZXJzIHdlcmUKKyAqICAgICAgICAgbm90IGNvbnN0KQorICovCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPgorU3RhdHVzIF9jcmVhdGVQYXJhbXNCbG9iKGhpZGxfdmVjPHVpbnQ4X3Q+ICpibG9iLCBjb25zdCBUICZwYXJhbXMpIHsKKyAgICAvLyBhc3N1bWluZyB0aGUgcGFyYW1ldGVyIHZhbHVlcyBhcmUgY29uc3QKKyAgICBzaXplX3Qgc2l6ZSA9IDA7CisgICAgZm9yIChjb25zdCBhdXRvICZwIDogcGFyYW1zKSB7CisgICAgICAgIGlmICghcCkgeworICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIH0KKyAgICAgICAgc2l6ZSArPSBwLT5zaXplKCk7CisgICAgICAgIHNpemUgPSBhbGlnbihzaXplLCBQQVJBTVNfQUxJR05NRU5UKTsKKyAgICB9CisgICAgYmxvYi0+cmVzaXplKHNpemUpOworICAgIHNpemVfdCBpeCA9IDA7CisgICAgZm9yIChjb25zdCBhdXRvICZwIDogcGFyYW1zKSB7CisgICAgICAgIGlmICghcCkgeworICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIH0KKyAgICAgICAgLy8gTkVWRVIgb3ZlcndyaXRlIGV2ZW4gaWYgcGFyYW0gdmFsdWVzIChlLmcuIHNpemUpIGNoYW5nZWQKKyAgICAgICAgc2l6ZV90IHBhcmFtU2l6ZSA9IHN0ZDo6bWluKHAtPnNpemUoKSwgc2l6ZSAtIGl4KTsKKyAgICAgICAgc3RkOjpjb3B5KAorICAgICAgICAgICAgICAgIHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdWludDhfdCo+KCYqcCksCisgICAgICAgICAgICAgICAgcmVpbnRlcnByZXRfY2FzdDxjb25zdCB1aW50OF90Kj4oJipwKSArIHBhcmFtU2l6ZSwKKyAgICAgICAgICAgICAgICAmKCpibG9iKVtpeF0pOworICAgICAgICBpeCArPSBwYXJhbVNpemU7CisgICAgICAgIGl4ID0gYWxpZ24oaXgsIFBBUkFNU19BTElHTk1FTlQpOworICAgIH0KKyAgICBibG9iLT5yZXNpemUoaXgpOworICAgIHJldHVybiBpeCA9PSBzaXplID8gU3RhdHVzOjpPSyA6IFN0YXR1czo6Q09SUlVQVEVEOworfQorCit9IC8vIHVubmFtZWQgbmFtZXNwYWNlCisKKy8vIHN0ZDo6dmVjdG9yPGNvbnN0IEMyUGFyYW0qPiAtPiBQYXJhbXMKK1N0YXR1cyBjcmVhdGVQYXJhbXNCbG9iKAorICAgICAgICBoaWRsX3ZlYzx1aW50OF90PiAqYmxvYiwKKyAgICAgICAgY29uc3Qgc3RkOjp2ZWN0b3I8Y29uc3QgQzJQYXJhbSo+ICZwYXJhbXMpIHsKKyAgICByZXR1cm4gX2NyZWF0ZVBhcmFtc0Jsb2IoYmxvYiwgcGFyYW1zKTsKK30KKworLy8gc3RkOjp2ZWN0b3I8QzJQYXJhbSo+IC0+IFBhcmFtcworU3RhdHVzIGNyZWF0ZVBhcmFtc0Jsb2IoCisgICAgICAgIGhpZGxfdmVjPHVpbnQ4X3Q+ICpibG9iLAorICAgICAgICBjb25zdCBzdGQ6OnZlY3RvcjxDMlBhcmFtKj4gJnBhcmFtcykgeworICAgIHJldHVybiBfY3JlYXRlUGFyYW1zQmxvYihibG9iLCBwYXJhbXMpOworfQorCisvLyBzdGQ6OnZlY3RvcjxzdGQ6OnVuaXF1ZV9wdHI8QzJQYXJhbT4+IC0+IFBhcmFtcworU3RhdHVzIGNyZWF0ZVBhcmFtc0Jsb2IoCisgICAgICAgIGhpZGxfdmVjPHVpbnQ4X3Q+ICpibG9iLAorICAgICAgICBjb25zdCBzdGQ6OnZlY3RvcjxzdGQ6OnVuaXF1ZV9wdHI8QzJQYXJhbT4+ICZwYXJhbXMpIHsKKyAgICByZXR1cm4gX2NyZWF0ZVBhcmFtc0Jsb2IoYmxvYiwgcGFyYW1zKTsKK30KKworLy8gc3RkOjp2ZWN0b3I8c3RkOjp1bmlxdWVfcHRyPEMyVHVuaW5nPj4gLT4gUGFyYW1zCitTdGF0dXMgY3JlYXRlUGFyYW1zQmxvYigKKyAgICAgICAgaGlkbF92ZWM8dWludDhfdD4gKmJsb2IsCisgICAgICAgIGNvbnN0IHN0ZDo6dmVjdG9yPHN0ZDo6dW5pcXVlX3B0cjxDMlR1bmluZz4+ICZwYXJhbXMpIHsKKyAgICByZXR1cm4gX2NyZWF0ZVBhcmFtc0Jsb2IoYmxvYiwgcGFyYW1zKTsKK30KKworLy8gc3RkOjp2ZWN0b3I8c3RkOjpzaGFyZWRfcHRyPGNvbnN0IEMySW5mbz4+IC0+IFBhcmFtcworU3RhdHVzIGNyZWF0ZVBhcmFtc0Jsb2IoCisgICAgICAgIGhpZGxfdmVjPHVpbnQ4X3Q+ICpibG9iLAorICAgICAgICBjb25zdCBzdGQ6OnZlY3RvcjxzdGQ6OnNoYXJlZF9wdHI8Y29uc3QgQzJJbmZvPj4gJnBhcmFtcykgeworICAgIHJldHVybiBfY3JlYXRlUGFyYW1zQmxvYihibG9iLCBwYXJhbXMpOworfQorCisvLyBQYXJhbXMgLT4gc3RkOjp2ZWN0b3I8c3RkOjp1bmlxdWVfcHRyPEMyUGFyYW0+PgorYzJfc3RhdHVzX3QgY29weVBhcmFtc0Zyb21CbG9iKAorICAgICAgICBzdGQ6OnZlY3RvcjxzdGQ6OnVuaXF1ZV9wdHI8QzJQYXJhbT4+KiBwYXJhbXMsCisgICAgICAgIFBhcmFtcyBibG9iKSB7CisgICAgc3RkOjp2ZWN0b3I8QzJQYXJhbSo+IHBhcmFtUG9pbnRlcnM7CisgICAgYzJfc3RhdHVzX3Qgc3RhdHVzID0gcGFyc2VQYXJhbXNCbG9iKCZwYXJhbVBvaW50ZXJzLCBibG9iKTsKKyAgICBpZiAoc3RhdHVzICE9IEMyX09LKSB7CisgICAgICAgIEFMT0dFKCJjb3B5UGFyYW1zRnJvbUJsb2IgLS0gYmxvYiBwYXJzaW5nIGZhaWxlZC4iKTsKKyAgICAgICAgcmV0dXJuIHN0YXR1czsKKyAgICB9CisgICAgcGFyYW1zLT5yZXNpemUocGFyYW1Qb2ludGVycy5zaXplKCkpOworICAgIHNpemVfdCBpID0gMDsKKyAgICBmb3IgKEMyUGFyYW0qIGNvbnN0JiBwYXJhbVBvaW50ZXIgOiBwYXJhbVBvaW50ZXJzKSB7CisgICAgICAgIGlmICghcGFyYW1Qb2ludGVyKSB7CisgICAgICAgICAgICBBTE9HRSgiY29weVBhcmFtc0Zyb21CbG9iIC0tIGNvcnJ1cHRlZCBwYXJhbXMgYmxvYi4iKTsKKyAgICAgICAgICAgIHJldHVybiBDMl9CQURfVkFMVUU7CisgICAgICAgIH0KKyAgICAgICAgKCpwYXJhbXMpW2krK10gPSBDMlBhcmFtOjpDb3B5KCpwYXJhbVBvaW50ZXIpOworICAgIH0KKyAgICByZXR1cm4gQzJfT0s7Cit9CisKKy8vIFBhcmFtcyAtPiB1cGRhdGUgc3RkOjp2ZWN0b3I8c3RkOjp1bmlxdWVfcHRyPEMyUGFyYW0+PgorYzJfc3RhdHVzX3QgdXBkYXRlUGFyYW1zRnJvbUJsb2IoCisgICAgICAgIGNvbnN0IHN0ZDo6dmVjdG9yPEMyUGFyYW0qPiYgcGFyYW1zLAorICAgICAgICBjb25zdCBQYXJhbXMmIGJsb2IpIHsKKyAgICBzdGQ6OnVub3JkZXJlZF9tYXA8dWludDMyX3QsIEMyUGFyYW0qPiBpbmRleDJwYXJhbTsKKyAgICBmb3IgKEMyUGFyYW0qIGNvbnN0JiBwYXJhbSA6IHBhcmFtcykgeworICAgICAgICBpZiAoIXBhcmFtKSB7CisgICAgICAgICAgICBBTE9HRSgidXBkYXRlUGFyYW1zRnJvbUJsb2IgLS0gY29ycnVwdGVkIGlucHV0IHBhcmFtcy4iKTsKKyAgICAgICAgICAgIHJldHVybiBDMl9CQURfVkFMVUU7CisgICAgICAgIH0KKyAgICAgICAgaWYgKGluZGV4MnBhcmFtLmZpbmQocGFyYW0tPmluZGV4KCkpID09IGluZGV4MnBhcmFtLmVuZCgpKSB7CisgICAgICAgICAgICBpbmRleDJwYXJhbS5lbXBsYWNlKHBhcmFtLT5pbmRleCgpLCBwYXJhbSk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBzdGQ6OnZlY3RvcjxDMlBhcmFtKj4gcGFyYW1Qb2ludGVyczsKKyAgICBjMl9zdGF0dXNfdCBzdGF0dXMgPSBwYXJzZVBhcmFtc0Jsb2IoJnBhcmFtUG9pbnRlcnMsIGJsb2IpOworICAgIGlmIChzdGF0dXMgIT0gQzJfT0spIHsKKyAgICAgICAgQUxPR0UoInVwZGF0ZVBhcmFtc0Zyb21CbG9iIC0tIGJsb2IgcGFyc2luZyBmYWlsZWQuIik7CisgICAgICAgIHJldHVybiBzdGF0dXM7CisgICAgfQorCisgICAgZm9yIChDMlBhcmFtKiBjb25zdCYgcGFyYW1Qb2ludGVyIDogcGFyYW1Qb2ludGVycykgeworICAgICAgICBpZiAoIXBhcmFtUG9pbnRlcikgeworICAgICAgICAgICAgQUxPR0UoInVwZGF0ZVBhcmFtc0Zyb21CbG9iIC0tIGNvcnJ1cHRlZCBwYXJhbSBpbiBibG9iLiIpOworICAgICAgICAgICAgcmV0dXJuIEMyX0JBRF9WQUxVRTsKKyAgICAgICAgfQorICAgICAgICBkZWNsdHlwZShpbmRleDJwYXJhbSk6Oml0ZXJhdG9yIGkgPSBpbmRleDJwYXJhbS5maW5kKAorICAgICAgICAgICAgICAgIHBhcmFtUG9pbnRlci0+aW5kZXgoKSk7CisgICAgICAgIGlmIChpID09IGluZGV4MnBhcmFtLmVuZCgpKSB7CisgICAgICAgICAgICBBTE9HVygidXBkYXRlUGFyYW1zRnJvbUJsb2IgLS0gdW5zZWVuIHBhcmFtIGluZGV4LiIpOworICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIH0KKyAgICAgICAgaWYgKCFpLT5zZWNvbmQtPnVwZGF0ZUZyb20oKnBhcmFtUG9pbnRlcikpIHsKKyAgICAgICAgICAgIEFMT0dFKCJ1cGRhdGVQYXJhbXNGcm9tQmxvYiAtLSBtaXNtYXRjaGluZyBzaXplczogIgorICAgICAgICAgICAgICAgICAgICAiJXUgdnMgJXUgKGluZGV4ID0gJXUpLiIsCisgICAgICAgICAgICAgICAgICAgIHN0YXRpY19jYXN0PHVuc2lnbmVkPihwYXJhbXMuc2l6ZSgpKSwKKyAgICAgICAgICAgICAgICAgICAgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KHBhcmFtUG9pbnRlci0+c2l6ZSgpKSwKKyAgICAgICAgICAgICAgICAgICAgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KGktPmZpcnN0KSk7CisgICAgICAgICAgICByZXR1cm4gQzJfQkFEX1ZBTFVFOworICAgICAgICB9CisgICAgfQorICAgIHJldHVybiBDMl9PSzsKK30KKworLy8gQ29udmVydCBCdWZmZXJQb29sIFJlc3VsdFN0YXR1cyB0byBjMl9zdGF0dXNfdC4KK2MyX3N0YXR1c190IHRvQzJTdGF0dXMoUmVzdWx0U3RhdHVzIHJzKSB7CisgICAgc3dpdGNoIChycykgeworICAgIGNhc2UgUmVzdWx0U3RhdHVzOjpPSzoKKyAgICAgICAgcmV0dXJuIEMyX09LOworICAgIGNhc2UgUmVzdWx0U3RhdHVzOjpOT19NRU1PUlk6CisgICAgICAgIHJldHVybiBDMl9OT19NRU1PUlk7CisgICAgY2FzZSBSZXN1bHRTdGF0dXM6OkFMUkVBRFlfRVhJU1RTOgorICAgICAgICByZXR1cm4gQzJfRFVQTElDQVRFOworICAgIGNhc2UgUmVzdWx0U3RhdHVzOjpOT1RfRk9VTkQ6CisgICAgICAgIHJldHVybiBDMl9OT1RfRk9VTkQ7CisgICAgY2FzZSBSZXN1bHRTdGF0dXM6OkNSSVRJQ0FMX0VSUk9SOgorICAgICAgICByZXR1cm4gQzJfQ09SUlVQVEVEOworICAgIGRlZmF1bHQ6CisgICAgICAgIEFMT0dXKCJVbnJlY29nbml6ZWQgQnVmZmVyUG9vbCBSZXN1bHRTdGF0dXM6ICVkIiwgc3RhdGljX2Nhc3Q8aW50PihycykpOworICAgICAgICByZXR1cm4gQzJfQ09SUlVQVEVEOworICAgIH0KK30KKworbmFtZXNwYWNlIC8qIHVubmFtZWQgKi8geworCisvLyBDcmVhdGUgYSBHcmFwaGljQnVmZmVyIG9iamVjdCBmcm9tIGEgZ3JhcGhpYyBibG9jay4KK3NwPEdyYXBoaWNCdWZmZXI+IGNyZWF0ZUdyYXBoaWNCdWZmZXIoY29uc3QgQzJDb25zdEdyYXBoaWNCbG9jayYgYmxvY2spIHsKKyAgICB1aW50MzJfdCB3aWR0aDsKKyAgICB1aW50MzJfdCBoZWlnaHQ7CisgICAgdWludDMyX3QgZm9ybWF0OworICAgIHVpbnQ2NF90IHVzYWdlOworICAgIHVpbnQzMl90IHN0cmlkZTsKKyAgICB1aW50MzJfdCBnZW5lcmF0aW9uOworICAgIHVpbnQ2NF90IGJxSWQ7CisgICAgaW50MzJfdCBicVNsb3Q7CisgICAgX1Vud3JhcE5hdGl2ZUNvZGVjMkdyYWxsb2NNZXRhZGF0YSgKKyAgICAgICAgICAgIGJsb2NrLmhhbmRsZSgpLCAmd2lkdGgsICZoZWlnaHQsICZmb3JtYXQsICZ1c2FnZSwKKyAgICAgICAgICAgICZzdHJpZGUsICZnZW5lcmF0aW9uLCAmYnFJZCwgcmVpbnRlcnByZXRfY2FzdDx1aW50MzJfdCo+KCZicVNsb3QpKTsKKyAgICBuYXRpdmVfaGFuZGxlX3QgKmdyYWxsb2NIYW5kbGUgPQorICAgICAgICAgICAgVW53cmFwTmF0aXZlQ29kZWMyR3JhbGxvY0hhbmRsZShibG9jay5oYW5kbGUoKSk7CisgICAgc3A8R3JhcGhpY0J1ZmZlcj4gZ3JhcGhpY0J1ZmZlciA9CisgICAgICAgICAgICBuZXcgR3JhcGhpY0J1ZmZlcihncmFsbG9jSGFuZGxlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR3JhcGhpY0J1ZmZlcjo6Q0xPTkVfSEFORExFLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2lkdGgsIGhlaWdodCwgZm9ybWF0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMSwgdXNhZ2UsIHN0cmlkZSk7CisgICAgbmF0aXZlX2hhbmRsZV9kZWxldGUoZ3JhbGxvY0hhbmRsZSk7CisgICAgcmV0dXJuIGdyYXBoaWNCdWZmZXI7Cit9CisKK3RlbXBsYXRlIDx0eXBlbmFtZSBCbG9ja1Byb2Nlc3Nvcj4KK3ZvaWQgZm9yRWFjaEJsb2NrKEMyRnJhbWVEYXRhJiBmcmFtZURhdGEsCisgICAgICAgICAgICAgICAgICBCbG9ja1Byb2Nlc3NvciBwcm9jZXNzKSB7CisgICAgZm9yIChjb25zdCBzdGQ6OnNoYXJlZF9wdHI8QzJCdWZmZXI+JiBidWZmZXIgOiBmcmFtZURhdGEuYnVmZmVycykgeworICAgICAgICBpZiAoYnVmZmVyKSB7CisgICAgICAgICAgICBmb3IgKGNvbnN0IEMyQ29uc3RHcmFwaGljQmxvY2smIGJsb2NrIDoKKyAgICAgICAgICAgICAgICAgICAgYnVmZmVyLT5kYXRhKCkuZ3JhcGhpY0Jsb2NrcygpKSB7CisgICAgICAgICAgICAgICAgcHJvY2VzcyhibG9jayk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9Cit9CisKK3RlbXBsYXRlIDx0eXBlbmFtZSBCbG9ja1Byb2Nlc3Nvcj4KK3ZvaWQgZm9yRWFjaEJsb2NrKGNvbnN0IHN0ZDo6bGlzdDxzdGQ6OnVuaXF1ZV9wdHI8QzJXb3JrPj4mIHdvcmtMaXN0LAorICAgICAgICAgICAgICAgICAgQmxvY2tQcm9jZXNzb3IgcHJvY2VzcywKKyAgICAgICAgICAgICAgICAgIGJvb2wgcHJvY2Vzc0lucHV0LCBib29sIHByb2Nlc3NPdXRwdXQpIHsKKyAgICBmb3IgKGNvbnN0IHN0ZDo6dW5pcXVlX3B0cjxDMldvcms+JiB3b3JrIDogd29ya0xpc3QpIHsKKyAgICAgICAgaWYgKCF3b3JrKSB7CisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQorICAgICAgICBpZiAocHJvY2Vzc0lucHV0KSB7CisgICAgICAgICAgICBmb3JFYWNoQmxvY2sod29yay0+aW5wdXQsIHByb2Nlc3MpOworICAgICAgICB9CisgICAgICAgIGlmIChwcm9jZXNzT3V0cHV0KSB7CisgICAgICAgICAgICBmb3IgKGNvbnN0IHN0ZDo6dW5pcXVlX3B0cjxDMldvcmtsZXQ+JiB3b3JrbGV0IDogd29yay0+d29ya2xldHMpIHsKKyAgICAgICAgICAgICAgICBpZiAod29ya2xldCkgeworICAgICAgICAgICAgICAgICAgICBmb3JFYWNoQmxvY2sod29ya2xldC0+b3V0cHV0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvY2Vzcyk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorfQorCitzcDxIR3JhcGhpY0J1ZmZlclByb2R1Y2VyPiBnZXRIZ2JwKGNvbnN0IHNwPElHcmFwaGljQnVmZmVyUHJvZHVjZXI+JiBpZ2JwKSB7CisgICAgc3A8SEdyYXBoaWNCdWZmZXJQcm9kdWNlcj4gaGdicCA9IGlnYnAtPmdldEhhbEludGVyZmFjZSgpOworICAgIHJldHVybiBoZ2JwID8gaGdicCA6CisgICAgICAgICAgICBuZXcgVFdHcmFwaGljQnVmZmVyUHJvZHVjZXI8SEdyYXBoaWNCdWZmZXJQcm9kdWNlcj4oaWdicCk7Cit9CisKK30gLy8gdW5uYW1lZCBuYW1lc3BhY2UKKworc3RhdHVzX3QgYXR0YWNoVG9CdWZmZXJRdWV1ZShjb25zdCBDMkNvbnN0R3JhcGhpY0Jsb2NrJiBibG9jaywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3A8SUdyYXBoaWNCdWZmZXJQcm9kdWNlcj4mIGlnYnAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90IGdlbmVyYXRpb24sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludDMyX3QqIGJxU2xvdCkgeworICAgIGlmICghaWdicCkgeworICAgICAgICBBTE9HVygiYXR0YWNoVG9CdWZmZXJRdWV1ZSAtLSBudWxsIHByb2R1Y2VyLiIpOworICAgICAgICByZXR1cm4gTk9fSU5JVDsKKyAgICB9CisKKyAgICBzcDxHcmFwaGljQnVmZmVyPiBncmFwaGljQnVmZmVyID0gY3JlYXRlR3JhcGhpY0J1ZmZlcihibG9jayk7CisgICAgZ3JhcGhpY0J1ZmZlci0+c2V0R2VuZXJhdGlvbk51bWJlcihnZW5lcmF0aW9uKTsKKworICAgIEFMT0dWKCJhdHRhY2hUb0J1ZmZlclF1ZXVlIC0tIGF0dGFjaGluZyBidWZmZXI6ICIKKyAgICAgICAgICAgICJibG9jayBkaW1lbnNpb24gJXV4JXUsICIKKyAgICAgICAgICAgICJncmFwaGljQnVmZmVyIGRpbWVuc2lvbiAldXgldSwgIgorICAgICAgICAgICAgImZvcm1hdCAlI3gsIHVzYWdlICUjbGx4LCBzdHJpZGUgJXUsIGdlbmVyYXRpb24gJXUuIiwKKyAgICAgICAgICAgIHN0YXRpY19jYXN0PHVuc2lnbmVkPihibG9jay53aWR0aCgpKSwKKyAgICAgICAgICAgIHN0YXRpY19jYXN0PHVuc2lnbmVkPihibG9jay5oZWlnaHQoKSksCisgICAgICAgICAgICBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oZ3JhcGhpY0J1ZmZlci0+Z2V0V2lkdGgoKSksCisgICAgICAgICAgICBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oZ3JhcGhpY0J1ZmZlci0+Z2V0SGVpZ2h0KCkpLAorICAgICAgICAgICAgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KGdyYXBoaWNCdWZmZXItPmdldFBpeGVsRm9ybWF0KCkpLAorICAgICAgICAgICAgc3RhdGljX2Nhc3Q8dW5zaWduZWQgbG9uZyBsb25nPihncmFwaGljQnVmZmVyLT5nZXRVc2FnZSgpKSwKKyAgICAgICAgICAgIHN0YXRpY19jYXN0PHVuc2lnbmVkPihncmFwaGljQnVmZmVyLT5nZXRTdHJpZGUoKSksCisgICAgICAgICAgICBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oZ3JhcGhpY0J1ZmZlci0+Z2V0R2VuZXJhdGlvbk51bWJlcigpKSk7CisKKyAgICBzdGF0dXNfdCByZXN1bHQgPSBpZ2JwLT5hdHRhY2hCdWZmZXIoYnFTbG90LCBncmFwaGljQnVmZmVyKTsKKyAgICBpZiAocmVzdWx0ICE9IE9LKSB7CisgICAgICAgIEFMT0dXKCJhdHRhY2hUb0J1ZmZlclF1ZXVlIC0tIGF0dGFjaEJ1ZmZlciBmYWlsZWQuIEVycm9yIGNvZGUgPSAlZCIsCisgICAgICAgICAgICAgICAgc3RhdGljX2Nhc3Q8aW50PihyZXN1bHQpKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAgICBBTE9HVigiYXR0YWNoVG9CdWZmZXJRdWV1ZSAtLSBhdHRhY2hCdWZmZXIgcmV0dXJuZWQgc2xvdCAlZCIsCisgICAgICAgICAgICBzdGF0aWNfY2FzdDxpbnQ+KCpicVNsb3QpKTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBnZXRCdWZmZXJRdWV1ZUFzc2lnbm1lbnQoY29uc3QgQzJDb25zdEdyYXBoaWNCbG9jayYgYmxvY2ssCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCogZ2VuZXJhdGlvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQ2NF90KiBicUlkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50MzJfdCogYnFTbG90KSB7CisgICAgcmV0dXJuIF9DMkJsb2NrRmFjdG9yeTo6R2V0QnVmZmVyUXVldWVEYXRhKAorICAgICAgICAgICAgX0MyQmxvY2tGYWN0b3J5OjpHZXRHcmFwaGljQmxvY2tQb29sRGF0YShibG9jayksCisgICAgICAgICAgICBnZW5lcmF0aW9uLCBicUlkLCBicVNsb3QpOworfQorCitib29sIHlpZWxkQnVmZmVyUXVldWVCbG9jayhjb25zdCBDMkNvbnN0R3JhcGhpY0Jsb2NrJiBibG9jaykgeworICAgIHN0ZDo6c2hhcmVkX3B0cjxfQzJCbG9ja1Bvb2xEYXRhPiBkYXRhID0KKyAgICAgICAgICAgIF9DMkJsb2NrRmFjdG9yeTo6R2V0R3JhcGhpY0Jsb2NrUG9vbERhdGEoYmxvY2spOworICAgIGlmIChkYXRhICYmIF9DMkJsb2NrRmFjdG9yeTo6R2V0QnVmZmVyUXVldWVEYXRhKGRhdGEpKSB7CisgICAgICAgIF9DMkJsb2NrRmFjdG9yeTo6WWllbGRCbG9ja1RvQnVmZmVyUXVldWUoZGF0YSk7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK3ZvaWQgeWllbGRCdWZmZXJRdWV1ZUJsb2NrcygKKyAgICAgICAgY29uc3Qgc3RkOjpsaXN0PHN0ZDo6dW5pcXVlX3B0cjxDMldvcms+PiYgd29ya0xpc3QsCisgICAgICAgIGJvb2wgcHJvY2Vzc0lucHV0LCBib29sIHByb2Nlc3NPdXRwdXQpIHsKKyAgICBmb3JFYWNoQmxvY2sod29ya0xpc3QsIHlpZWxkQnVmZmVyUXVldWVCbG9jaywgcHJvY2Vzc0lucHV0LCBwcm9jZXNzT3V0cHV0KTsKK30KKworYm9vbCBob2xkQnVmZmVyUXVldWVCbG9jayhjb25zdCBDMkNvbnN0R3JhcGhpY0Jsb2NrJiBibG9jaywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzcDxJR3JhcGhpY0J1ZmZlclByb2R1Y2VyPiYgaWdicCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50NjRfdCBicUlkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90IGdlbmVyYXRpb24pIHsKKyAgICBzdGQ6OnNoYXJlZF9wdHI8X0MyQmxvY2tQb29sRGF0YT4gZGF0YSA9CisgICAgICAgICAgICBfQzJCbG9ja0ZhY3Rvcnk6OkdldEdyYXBoaWNCbG9ja1Bvb2xEYXRhKGJsb2NrKTsKKyAgICBpZiAoIWRhdGEpIHsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIHVpbnQzMl90IG9sZEdlbmVyYXRpb247CisgICAgdWludDY0X3Qgb2xkSWQ7CisgICAgaW50MzJfdCBvbGRTbG90OworICAgIC8vIElmIHRoZSBibG9jayBpcyBub3QgYnVmZmVycXVldWUtYmFzZWQsIGRvIG5vdGhpbmcuCisgICAgaWYgKCFfQzJCbG9ja0ZhY3Rvcnk6OkdldEJ1ZmZlclF1ZXVlRGF0YSgKKyAgICAgICAgICAgIGRhdGEsICZvbGRHZW5lcmF0aW9uLCAmb2xkSWQsICZvbGRTbG90KSB8fAorICAgICAgICAgICAgKG9sZElkID09IDApKSB7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICAvLyBJZiB0aGUgYmxvY2sncyBicUlkIGlzIHRoZSBzYW1lIGFzIHRoZSBkZXNpcmVkIGJxSWQsIGp1c3QgaG9sZC4KKyAgICBpZiAoKG9sZElkID09IGJxSWQpICYmIChvbGRHZW5lcmF0aW9uID09IGdlbmVyYXRpb24pKSB7CisgICAgICAgIEFMT0dWKCJob2xkQnVmZmVyUXVldWVCbG9jayAtLSBpbXBvcnQgd2l0aG91dCBhdHRhY2hpbmc6ICIKKyAgICAgICAgICAgICAgICAiYnFJZCAlbGx1LCBicVNsb3QgJWQsIGdlbmVyYXRpb24gJXUuIiwKKyAgICAgICAgICAgICAgICBzdGF0aWNfY2FzdDxsb25nIGxvbmcgdW5zaWduZWQ+KG9sZElkKSwKKyAgICAgICAgICAgICAgICBzdGF0aWNfY2FzdDxpbnQ+KG9sZFNsb3QpLAorICAgICAgICAgICAgICAgIHN0YXRpY19jYXN0PHVuc2lnbmVkPihnZW5lcmF0aW9uKSk7CisgICAgICAgIF9DMkJsb2NrRmFjdG9yeTo6SG9sZEJsb2NrRnJvbUJ1ZmZlclF1ZXVlKGRhdGEsIGdldEhnYnAoaWdicCkpOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAgICAvLyBPdGhlcndpc2UsIGF0dGFjaCB0byB0aGUgZ2l2ZW4gaWdicCwgd2hpY2ggbXVzdCBub3QgYmUgbnVsbC4KKyAgICBpZiAoIWlnYnApIHsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIGludDMyX3QgYnFTbG90OworICAgIHN0YXR1c190IHJlc3VsdCA9IGF0dGFjaFRvQnVmZmVyUXVldWUoYmxvY2ssIGlnYnAsIGdlbmVyYXRpb24sICZicVNsb3QpOworCisgICAgaWYgKHJlc3VsdCAhPSBPSykgeworICAgICAgICBBTE9HRSgiaG9sZEJ1ZmZlclF1ZXVlQmxvY2sgLS0gZmFpbCB0byBhdHRhY2g6ICIKKyAgICAgICAgICAgICAgICAidGFyZ2V0IGJxSWQgJWxsdSwgZ2VuZXJhdGlvbiAldS4iLAorICAgICAgICAgICAgICAgIHN0YXRpY19jYXN0PGxvbmcgbG9uZyB1bnNpZ25lZD4oYnFJZCksCisgICAgICAgICAgICAgICAgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KGdlbmVyYXRpb24pKTsKKworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgQUxPR1YoImhvbGRCdWZmZXJRdWV1ZUJsb2NrIC0tIGF0dGFjaGVkOiAiCisgICAgICAgICAgICAiYnFJZCAlbGx1LCBicVNsb3QgJWQsIGdlbmVyYXRpb24gJXUuIiwKKyAgICAgICAgICAgIHN0YXRpY19jYXN0PGxvbmcgbG9uZyB1bnNpZ25lZD4oYnFJZCksCisgICAgICAgICAgICBzdGF0aWNfY2FzdDxpbnQ+KGJxU2xvdCksCisgICAgICAgICAgICBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oZ2VuZXJhdGlvbikpOworICAgIF9DMkJsb2NrRmFjdG9yeTo6QXNzaWduQmxvY2tUb0J1ZmZlclF1ZXVlKAorICAgICAgICAgICAgZGF0YSwgZ2V0SGdicChpZ2JwKSwgYnFJZCwgYnFTbG90LCB0cnVlKTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKwordm9pZCBob2xkQnVmZmVyUXVldWVCbG9ja3MoY29uc3Qgc3RkOjpsaXN0PHN0ZDo6dW5pcXVlX3B0cjxDMldvcms+PiYgd29ya0xpc3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzcDxJR3JhcGhpY0J1ZmZlclByb2R1Y2VyPiYgaWdicCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQ2NF90IGJxSWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCBnZW5lcmF0aW9uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBmb3JJbnB1dCkgeworICAgIGZvckVhY2hCbG9jayh3b3JrTGlzdCwKKyAgICAgICAgICAgICAgICAgc3RkOjpiaW5kKGhvbGRCdWZmZXJRdWV1ZUJsb2NrLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RkOjpwbGFjZWhvbGRlcnM6Ol8xLCBpZ2JwLCBicUlkLCBnZW5lcmF0aW9uKSwKKyAgICAgICAgICAgICAgICAgZm9ySW5wdXQsICFmb3JJbnB1dCk7Cit9CisKK30gIC8vIG5hbWVzcGFjZSB1dGlscworfSAgLy8gbmFtZXNwYWNlIFYxXzAKK30gIC8vIG5hbWVzcGFjZSBjMgorfSAgLy8gbmFtZXNwYWNlIG1lZGlhCit9ICAvLyBuYW1lc3BhY2UgaGFyZHdhcmUKK30gIC8vIG5hbWVzcGFjZSBhbmRyb2lkCisKZGlmZiAtLWdpdCBhL21lZGlhL2NvZGVjMi9oaWRsLzEuMC92dHMvYXVkaW8vQW5kcm9pZC5icCBiL21lZGlhL2NvZGVjMi9oaWRsLzEuMC92dHMvYXVkaW8vQW5kcm9pZC5icApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42ODc3NTRiCi0tLSAvZGV2L251bGwKKysrIGIvbWVkaWEvY29kZWMyL2hpZGwvMS4wL3Z0cy9hdWRpby9BbmRyb2lkLmJwCkBAIC0wLDAgKzEsMzMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTggVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworCitjY190ZXN0IHsKKyAgICBuYW1lOiAiVnRzSGlkbEMyVjFfMFRhcmdldEF1ZGlvRGVjVGVzdCIsCisgICAgZGVmYXVsdHM6IFsiVnRzTWVkaWFDMlYxXzBEZWZhdWx0cyJdLAorICAgIHNyY3M6IFsKKyAgICAgICAgIlZ0c0hpZGxDMlYxXzBUYXJnZXRBdWRpb0RlY1Rlc3QuY3BwIiwKKyAgICAgICAgLy8ibWVkaWFfYXVkaW9faGlkbF90ZXN0X2NvbW1vbi5jcHAiCisgICAgXSwKK30KKworY2NfdGVzdCB7CisgICAgbmFtZTogIlZ0c0hpZGxDMlYxXzBUYXJnZXRBdWRpb0VuY1Rlc3QiLAorICAgIGRlZmF1bHRzOiBbIlZ0c01lZGlhQzJWMV8wRGVmYXVsdHMiXSwKKyAgICBzcmNzOiBbCisgICAgICAgICJWdHNIaWRsQzJWMV8wVGFyZ2V0QXVkaW9FbmNUZXN0LmNwcCIsCisgICAgICAgIC8vIm1lZGlhX2F1ZGlvX2hpZGxfdGVzdF9jb21tb24uY3BwIgorICAgIF0sCit9CmRpZmYgLS1naXQgYS9tZWRpYS9jb2RlYzIvaGlkbC8xLjAvdnRzL2F1ZGlvL1Z0c0hpZGxDMlYxXzBUYXJnZXRBdWRpb0RlY1Rlc3QuY3BwIGIvbWVkaWEvY29kZWMyL2hpZGwvMS4wL3Z0cy9hdWRpby9WdHNIaWRsQzJWMV8wVGFyZ2V0QXVkaW9EZWNUZXN0LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42ZmQ5MjAwCi0tLSAvZGV2L251bGwKKysrIGIvbWVkaWEvY29kZWMyL2hpZGwvMS4wL3Z0cy9hdWRpby9WdHNIaWRsQzJWMV8wVGFyZ2V0QXVkaW9EZWNUZXN0LmNwcApAQCAtMCwwICsxLDkwNyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxOCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCisKKy8vICNkZWZpbmUgTE9HX05ERUJVRyAwCisjZGVmaW5lIExPR19UQUcgImNvZGVjMl9oaWRsX2hhbF9hdWRpb19kZWNfdGVzdCIKKworI2luY2x1ZGUgPGFuZHJvaWQtYmFzZS9sb2dnaW5nLmg+CisjaW5jbHVkZSA8Z3Rlc3QvZ3Rlc3QuaD4KKyNpbmNsdWRlIDxhbGdvcml0aG0+CisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxmc3RyZWFtPgorCisjaW5jbHVkZSA8Y29kZWMyL2hpZGwvY2xpZW50Lmg+CisjaW5jbHVkZSA8QzJBbGxvY2F0b3JJb24uaD4KKyNpbmNsdWRlIDxDMkNvbmZpZy5oPgorI2luY2x1ZGUgPEMyRGVidWcuaD4KKyNpbmNsdWRlIDxDMkJ1ZmZlci5oPgorI2luY2x1ZGUgPEMyQnVmZmVyUHJpdi5oPgorCit1c2luZyBhbmRyb2lkOjpDMkFsbG9jYXRvcklvbjsKKworI2luY2x1ZGUgPFZ0c0hhbEhpZGxUYXJnZXRUZXN0QmFzZS5oPgorI2luY2x1ZGUgIm1lZGlhX2MyX2F1ZGlvX2hpZGxfdGVzdF9jb21tb24uaCIKKyNpbmNsdWRlICJtZWRpYV9jMl9oaWRsX3Rlc3RfY29tbW9uLmgiCisKK3N0cnVjdCBGcmFtZUluZm8geworICAgIGludCBieXRlc0NvdW50OworICAgIHVpbnQzMl90IGZsYWdzOworICAgIGludDY0X3QgdGltZXN0YW1wOworfTsKKworY2xhc3MgTGluZWFyQnVmZmVyIDogcHVibGljIEMyQnVmZmVyIHsKKyAgIHB1YmxpYzoKKyAgICBleHBsaWNpdCBMaW5lYXJCdWZmZXIoY29uc3Qgc3RkOjpzaGFyZWRfcHRyPEMyTGluZWFyQmxvY2s+JiBibG9jaykKKyAgICAgICAgOiBDMkJ1ZmZlcigKKyAgICAgICAgICAgICAge2Jsb2NrLT5zaGFyZShibG9jay0+b2Zmc2V0KCksIGJsb2NrLT5zaXplKCksIDo6QzJGZW5jZSgpKX0pIHt9Cit9OworCitzdGF0aWMgQ29tcG9uZW50VGVzdEVudmlyb25tZW50KiBnRW52ID0gbnVsbHB0cjsKKworbmFtZXNwYWNlIHsKKworY2xhc3MgQ29kZWMyQXVkaW9EZWNIaWRsVGVzdCA6IHB1YmxpYyA6OnRlc3Rpbmc6OlZ0c0hhbEhpZGxUYXJnZXRUZXN0QmFzZSB7CisgICBwcml2YXRlOgorICAgIHR5cGVkZWYgOjp0ZXN0aW5nOjpWdHNIYWxIaWRsVGFyZ2V0VGVzdEJhc2UgU3VwZXI7CisKKyAgIHB1YmxpYzoKKyAgICA6OnN0ZDo6c3RyaW5nIGdldFRlc3RDYXNlSW5mbygpIGNvbnN0IG92ZXJyaWRlIHsKKyAgICAgICAgcmV0dXJuIDo6c3RkOjpzdHJpbmcoKSArCisgICAgICAgICAgICAgICAgIkNvbXBvbmVudDogIiArIGdFbnYtPmdldENvbXBvbmVudCgpLmNfc3RyKCkgKyAiIHwgIiArCisgICAgICAgICAgICAgICAgIkluc3RhbmNlOiAiICsgZ0Vudi0+Z2V0SW5zdGFuY2UoKS5jX3N0cigpICsgIiB8ICIgKworICAgICAgICAgICAgICAgICJSZXM6ICIgKyBnRW52LT5nZXRSZXMoKS5jX3N0cigpOworICAgIH0KKworICAgIC8vIGdvb2dsZS5jb2RlYzIgQXVkaW8gdGVzdCBzZXR1cAorICAgIHZpcnR1YWwgdm9pZCBTZXRVcCgpIG92ZXJyaWRlIHsKKyAgICAgICAgU3VwZXI6OlNldFVwKCk7CisgICAgICAgIG1EaXNhYmxlVGVzdCA9IGZhbHNlOworICAgICAgICBBTE9HVigiQ29kZWMyQXVkaW9EZWNIaWRsVGVzdCBTZXRVcCIpOworICAgICAgICBtQ2xpZW50ID0gYW5kcm9pZDo6Q29kZWMyQ2xpZW50OjpDcmVhdGVGcm9tU2VydmljZSgKKyAgICAgICAgICAgIGdFbnYtPmdldEluc3RhbmNlKCkuY19zdHIoKSk7CisgICAgICAgIEFTU0VSVF9ORShtQ2xpZW50LCBudWxscHRyKTsKKyAgICAgICAgbUxpc3RlbmVyLnJlc2V0KG5ldyBDb2RlY0xpc3RlbmVyKAorICAgICAgICAgICAgW3RoaXNdKHN0ZDo6bGlzdDxzdGQ6OnVuaXF1ZV9wdHI8QzJXb3JrPj4mIHdvcmtJdGVtcykgeworICAgICAgICAgICAgICAgIGhhbmRsZVdvcmtEb25lKHdvcmtJdGVtcyk7CisgICAgICAgICAgICB9KSk7CisgICAgICAgIEFTU0VSVF9ORShtTGlzdGVuZXIsIG51bGxwdHIpOworICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IE1BWF9JTlBVVF9CVUZGRVJTOyArK2kpIHsKKyAgICAgICAgICAgIG1Xb3JrUXVldWUuZW1wbGFjZV9iYWNrKG5ldyBDMldvcmspOworICAgICAgICB9CisgICAgICAgIG1DbGllbnQtPmNyZWF0ZUNvbXBvbmVudChnRW52LT5nZXRDb21wb25lbnQoKS5jX3N0cigpLCBtTGlzdGVuZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmbUNvbXBvbmVudCk7CisgICAgICAgIEFTU0VSVF9ORShtQ29tcG9uZW50LCBudWxscHRyKTsKKworICAgICAgICBzdGQ6OnNoYXJlZF9wdHI8QzJBbGxvY2F0b3JTdG9yZT4gc3RvcmUgPQorICAgICAgICAgICAgYW5kcm9pZDo6R2V0Q29kZWMyUGxhdGZvcm1BbGxvY2F0b3JTdG9yZSgpOworICAgICAgICBDSEVDS19FUShzdG9yZS0+ZmV0Y2hBbGxvY2F0b3IoQzJBbGxvY2F0b3JTdG9yZTo6REVGQVVMVF9MSU5FQVIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmbUxpbmVhckFsbG9jYXRvciksCisgICAgICAgICAgICAgICAgIEMyX09LKTsKKyAgICAgICAgbUxpbmVhclBvb2wgPSBzdGQ6Om1ha2Vfc2hhcmVkPEMyUG9vbGVkQmxvY2tQb29sPihtTGluZWFyQWxsb2NhdG9yLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1CbG9ja1Bvb2xJZCsrKTsKKyAgICAgICAgQVNTRVJUX05FKG1MaW5lYXJQb29sLCBudWxscHRyKTsKKworICAgICAgICBtQ29tcE5hbWUgPSB1bmtub3duX2NvbXA7CisgICAgICAgIHN0cnVjdCBTdHJpbmdUb05hbWUgeworICAgICAgICAgICAgY29uc3QgY2hhciogTmFtZTsKKyAgICAgICAgICAgIHN0YW5kYXJkQ29tcCBDb21wTmFtZTsKKyAgICAgICAgfTsKKyAgICAgICAgY29uc3QgU3RyaW5nVG9OYW1lIGtTdHJpbmdUb05hbWVbXSA9IHsKKyAgICAgICAgICAgIHsieGFhYyIsIHhhYWN9LAorICAgICAgICAgICAgeyJtcDMiLCBtcDN9LAorICAgICAgICAgICAgeyJhbXJuYiIsIGFtcm5ifSwKKyAgICAgICAgICAgIHsiYW1yd2IiLCBhbXJ3Yn0sCisgICAgICAgICAgICB7ImFhYyIsIGFhY30sCisgICAgICAgICAgICB7InZvcmJpcyIsIHZvcmJpc30sCisgICAgICAgICAgICB7Im9wdXMiLCBvcHVzfSwKKyAgICAgICAgICAgIHsicGNtIiwgcGNtfSwKKyAgICAgICAgICAgIHsiZzcxMS5hbGF3IiwgZzcxMWFsYXd9LAorICAgICAgICAgICAgeyJnNzExLm1sYXciLCBnNzExbWxhd30sCisgICAgICAgICAgICB7ImdzbSIsIGdzbX0sCisgICAgICAgICAgICB7InJhdyIsIHJhd30sCisgICAgICAgICAgICB7ImZsYWMiLCBmbGFjfSwKKyAgICAgICAgfTsKKyAgICAgICAgY29uc3Qgc2l6ZV90IGtOdW1TdHJpbmdUb05hbWUgPQorICAgICAgICAgICAgc2l6ZW9mKGtTdHJpbmdUb05hbWUpIC8gc2l6ZW9mKGtTdHJpbmdUb05hbWVbMF0pOworCisgICAgICAgIHN0ZDo6c3RyaW5nIHN1YnN0cmluZzsKKyAgICAgICAgc3RkOjpzdHJpbmcgY29tcDsKKyAgICAgICAgc3Vic3RyaW5nID0gc3RkOjpzdHJpbmcoZ0Vudi0+Z2V0Q29tcG9uZW50KCkpOworICAgICAgICAvKiBUT0RPOiBiZXR0ZXIgYXBwcm9hY2ggdG8gZmluZCB0aGUgY29tcG9uZW50ICovCisgICAgICAgIC8qICJjMi5hbmRyb2lkLiIgPT4gMTF0aCBwb3NpdGlvbiAqLworICAgICAgICBzaXplX3QgcG9zID0gMTE7CisgICAgICAgIHNpemVfdCBsZW4gPSBzdWJzdHJpbmcuZmluZCgiLmRlY29kZXIiLCBwb3MpOworICAgICAgICBjb21wID0gc3Vic3RyaW5nLnN1YnN0cihwb3MsIGxlbiAtIHBvcyk7CisKKyAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBrTnVtU3RyaW5nVG9OYW1lOyArK2kpIHsKKyAgICAgICAgICAgIGlmICghc3RyY2FzZWNtcChjb21wLmNfc3RyKCksIGtTdHJpbmdUb05hbWVbaV0uTmFtZSkpIHsKKyAgICAgICAgICAgICAgICBtQ29tcE5hbWUgPSBrU3RyaW5nVG9OYW1lW2ldLkNvbXBOYW1lOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIG1Fb3MgPSBmYWxzZTsKKyAgICAgICAgbUZyYW1lc1JlY2VpdmVkID0gMDsKKyAgICAgICAgbVRpbWVzdGFtcFVzID0gMHU7CisgICAgICAgIG1UaW1lc3RhbXBEZXZUZXN0ID0gZmFsc2U7CisgICAgICAgIGlmIChtQ29tcE5hbWUgPT0gdW5rbm93bl9jb21wKSBtRGlzYWJsZVRlc3QgPSB0cnVlOworICAgICAgICBpZiAobURpc2FibGVUZXN0KSBzdGQ6OmNvdXQgPDwgIlsgICBXQVJOICAgXSBUZXN0IERpc2FibGVkIFxuIjsKKyAgICB9CisKKyAgICB2aXJ0dWFsIHZvaWQgVGVhckRvd24oKSBvdmVycmlkZSB7CisgICAgICAgIGlmIChtQ29tcG9uZW50ICE9IG51bGxwdHIpIHsKKyAgICAgICAgICAgIGlmICg6OnRlc3Rpbmc6OlRlc3Q6Okhhc0ZhdGFsRmFpbHVyZSgpKSByZXR1cm47CisgICAgICAgICAgICBtQ29tcG9uZW50LT5yZWxlYXNlKCk7CisgICAgICAgICAgICBtQ29tcG9uZW50ID0gbnVsbHB0cjsKKyAgICAgICAgfQorICAgICAgICBTdXBlcjo6VGVhckRvd24oKTsKKyAgICB9CisKKyAgICBzdHJ1Y3Qgb3V0cHV0TWV0YURhdGEgeworICAgICAgICB1aW50NjRfdCB0aW1lc3RhbXBVczsKKyAgICAgICAgdWludDMyX3QgcmFuZ2VMZW5ndGg7CisgICAgfTsKKyAgICAvLyBjYWxsYmFjayBmdW5jdGlvbiB0byBwcm9jZXNzIG9uV29ya0RvbmUgcmVjZWl2ZWQgYnkgTGlzdGVuZXIKKyAgICB2b2lkIGhhbmRsZVdvcmtEb25lKHN0ZDo6bGlzdDxzdGQ6OnVuaXF1ZV9wdHI8QzJXb3JrPj4mIHdvcmtJdGVtcykgeworICAgICAgICBmb3IgKHN0ZDo6dW5pcXVlX3B0cjxDMldvcms+JiB3b3JrIDogd29ya0l0ZW1zKSB7CisgICAgICAgICAgICAvLyBoYW5kbGUgY29uZmlndXJhdGlvbiBjaGFuZ2VzIGluIHdvcmsgZG9uZQorICAgICAgICAgICAgaWYgKCF3b3JrLT53b3JrbGV0cy5lbXB0eSgpICYmCisgICAgICAgICAgICAgICAgKHdvcmstPndvcmtsZXRzLmZyb250KCktPm91dHB1dC5jb25maWdVcGRhdGUuc2l6ZSgpICE9IDApKSB7CisgICAgICAgICAgICAgICAgQUxPR1YoIkNvbmZpZyBVcGRhdGUiKTsKKyAgICAgICAgICAgICAgICBzdGQ6OnZlY3RvcjxzdGQ6OnVuaXF1ZV9wdHI8QzJQYXJhbT4+IHVwZGF0ZXMgPQorICAgICAgICAgICAgICAgICAgICBzdGQ6Om1vdmUod29yay0+d29ya2xldHMuZnJvbnQoKS0+b3V0cHV0LmNvbmZpZ1VwZGF0ZSk7CisgICAgICAgICAgICAgICAgc3RkOjp2ZWN0b3I8QzJQYXJhbSo+IGNvbmZpZ1BhcmFtOworICAgICAgICAgICAgICAgIHN0ZDo6dmVjdG9yPHN0ZDo6dW5pcXVlX3B0cjxDMlNldHRpbmdSZXN1bHQ+PiBmYWlsdXJlczsKKyAgICAgICAgICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHVwZGF0ZXMuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgICAgICAgICAgICAgQzJQYXJhbSogcGFyYW0gPSB1cGRhdGVzW2ldLmdldCgpOworICAgICAgICAgICAgICAgICAgICBpZiAoKHBhcmFtLT5pbmRleCgpID09IEMyU3RyZWFtU2FtcGxlUmF0ZUluZm86Om91dHB1dDo6UEFSQU1fVFlQRSkgfHwKKyAgICAgICAgICAgICAgICAgICAgICAgIChwYXJhbS0+aW5kZXgoKSA9PSBDMlN0cmVhbUNoYW5uZWxDb3VudEluZm86Om91dHB1dDo6UEFSQU1fVFlQRSkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbmZpZ1BhcmFtLnB1c2hfYmFjayhwYXJhbSk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgbUNvbXBvbmVudC0+Y29uZmlnKGNvbmZpZ1BhcmFtLCBDMl9ET05UX0JMT0NLLCAmZmFpbHVyZXMpOworICAgICAgICAgICAgICAgIEFTU0VSVF9FUShmYWlsdXJlcy5zaXplKCksIDB1KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIG1GcmFtZXNSZWNlaXZlZCsrOworICAgICAgICAgICAgbUVvcyA9ICh3b3JrLT53b3JrbGV0cy5mcm9udCgpLT5vdXRwdXQuZmxhZ3MgJgorICAgICAgICAgICAgICAgICAgICBDMkZyYW1lRGF0YTo6RkxBR19FTkRfT0ZfU1RSRUFNKSAhPSAwOworICAgICAgICAgICAgYXV0byBmcmFtZUluZGV4SXQgPQorICAgICAgICAgICAgICAgIHN0ZDo6ZmluZChtRmx1c2hlZEluZGljZXMuYmVnaW4oKSwgbUZsdXNoZWRJbmRpY2VzLmVuZCgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICB3b3JrLT5pbnB1dC5vcmRpbmFsLmZyYW1lSW5kZXgucGVla3UoKSk7CisgICAgICAgICAgICBBTE9HVigiV29ya0RvbmU6IGZyYW1lSUQgcmVjZWl2ZWQgJWQiLAorICAgICAgICAgICAgICAgIChpbnQpd29yay0+d29ya2xldHMuZnJvbnQoKS0+b3V0cHV0Lm9yZGluYWwuZnJhbWVJbmRleC5wZWVrdSgpKTsKKworICAgICAgICAgICAgLy8gRm9yIGRlY29kZXIgY29tcG9uZW50cyBjdXJyZW50IHRpbWVzdGFtcCBhbHdheXMgZXhjZWVkcworICAgICAgICAgICAgLy8gcHJldmlvdXMgdGltZXN0YW1wCisgICAgICAgICAgICBib29sIGNvZGVjQ29uZmlnID0gKCh3b3JrLT53b3JrbGV0cy5mcm9udCgpLT5vdXRwdXQuZmxhZ3MgJgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQzJGcmFtZURhdGE6OkZMQUdfQ09ERUNfQ09ORklHKSAhPSAwKTsKKyAgICAgICAgICAgIGlmICghY29kZWNDb25maWcgJiYKKyAgICAgICAgICAgICAgICAhd29yay0+d29ya2xldHMuZnJvbnQoKS0+b3V0cHV0LmJ1ZmZlcnMuZW1wdHkoKSkgeworICAgICAgICAgICAgICAgIEVYUEVDVF9HRSh3b3JrLT53b3JrbGV0cy5mcm9udCgpLT5vdXRwdXQub3JkaW5hbC50aW1lc3RhbXAucGVla3UoKSwKKyAgICAgICAgICAgICAgICAgICAgbVRpbWVzdGFtcFVzKTsKKyAgICAgICAgICAgICAgICBtVGltZXN0YW1wVXMgPQorICAgICAgICAgICAgICAgICAgICB3b3JrLT53b3JrbGV0cy5mcm9udCgpLT5vdXRwdXQub3JkaW5hbC50aW1lc3RhbXAucGVla3UoKTsKKyAgICAgICAgICAgICAgICB1aW50MzJfdCByYW5nZUxlbmd0aCA9CisgICAgICAgICAgICAgICAgICAgIHdvcmstPndvcmtsZXRzLmZyb250KCktPm91dHB1dC5idWZmZXJzWzBdLT5kYXRhKCkKKyAgICAgICAgICAgICAgICAgICAgLmxpbmVhckJsb2NrcygpLmZyb250KCkubWFwKCkuZ2V0KCkuY2FwYWNpdHkoKTsKKyAgICAgICAgICAgICAgICAvL0xpc3Qgb2YgdGltZXN0YW1wIHZhbHVlcyBhbmQgb3V0cHV0IHNpemUgdG8gY2FsY3VsYXRlIHRpbWVzdGFtcAorICAgICAgICAgICAgICAgIGlmIChtVGltZXN0YW1wRGV2VGVzdCkgeworICAgICAgICAgICAgICAgICAgICBvdXRwdXRNZXRhRGF0YSBtZXRhID0ge21UaW1lc3RhbXBVcywgcmFuZ2VMZW5ndGh9OworICAgICAgICAgICAgICAgICAgICBvQnVmZmVyTWV0YURhdGEucHVzaF9iYWNrKG1ldGEpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgd29yay0+aW5wdXQuYnVmZmVycy5jbGVhcigpOworICAgICAgICAgICAgd29yay0+d29ya2xldHMuY2xlYXIoKTsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICB0eXBlZGVmIHN0ZDo6dW5pcXVlX2xvY2s8c3RkOjptdXRleD4gVUxvY2s7CisgICAgICAgICAgICAgICAgVUxvY2sgbChtUXVldWVMb2NrKTsKKyAgICAgICAgICAgICAgICBtV29ya1F1ZXVlLnB1c2hfYmFjayhzdGQ6Om1vdmUod29yaykpOworICAgICAgICAgICAgICAgIGlmICghbUZsdXNoZWRJbmRpY2VzLmVtcHR5KCkpIHsKKyAgICAgICAgICAgICAgICAgICAgbUZsdXNoZWRJbmRpY2VzLmVyYXNlKGZyYW1lSW5kZXhJdCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIG1RdWV1ZUNvbmRpdGlvbi5ub3RpZnlfYWxsKCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKKyAgICBlbnVtIHN0YW5kYXJkQ29tcCB7CisgICAgICAgIHhhYWMsCisgICAgICAgIG1wMywKKyAgICAgICAgYW1ybmIsCisgICAgICAgIGFtcndiLAorICAgICAgICBhYWMsCisgICAgICAgIHZvcmJpcywKKyAgICAgICAgb3B1cywKKyAgICAgICAgcGNtLAorICAgICAgICBnNzExYWxhdywKKyAgICAgICAgZzcxMW1sYXcsCisgICAgICAgIGdzbSwKKyAgICAgICAgcmF3LAorICAgICAgICBmbGFjLAorICAgICAgICB1bmtub3duX2NvbXAsCisgICAgfTsKKworICAgIGJvb2wgbUVvczsKKyAgICBib29sIG1EaXNhYmxlVGVzdDsKKyAgICBib29sIG1UaW1lc3RhbXBEZXZUZXN0OworICAgIHN0YW5kYXJkQ29tcCBtQ29tcE5hbWU7CisgICAgdWludDY0X3QgbVRpbWVzdGFtcFVzOworICAgIHVpbnQzMl90IG1GcmFtZXNSZWNlaXZlZDsKKyAgICBzdGQ6Omxpc3Q8dWludDY0X3Q+IG1GbHVzaGVkSW5kaWNlczsKKyAgICBzdGQ6Omxpc3Q8dWludDY0X3Q+IG1UaW1lc3RhbXBVc2xpc3Q7CisgICAgOjphbmRyb2lkOjpMaXN0PG91dHB1dE1ldGFEYXRhPiBvQnVmZmVyTWV0YURhdGE7CisKKyAgICBDMkJsb2NrUG9vbDo6bG9jYWxfaWRfdCBtQmxvY2tQb29sSWQ7CisgICAgc3RkOjpzaGFyZWRfcHRyPEMyQmxvY2tQb29sPiBtTGluZWFyUG9vbDsKKyAgICBzdGQ6OnNoYXJlZF9wdHI8QzJBbGxvY2F0b3I+IG1MaW5lYXJBbGxvY2F0b3I7CisKKyAgICBzdGQ6Om11dGV4IG1RdWV1ZUxvY2s7CisgICAgc3RkOjpjb25kaXRpb25fdmFyaWFibGUgbVF1ZXVlQ29uZGl0aW9uOworICAgIHN0ZDo6bGlzdDxzdGQ6OnVuaXF1ZV9wdHI8QzJXb3JrPj4gbVdvcmtRdWV1ZTsKKworICAgIHN0ZDo6c2hhcmVkX3B0cjxhbmRyb2lkOjpDb2RlYzJDbGllbnQ+IG1DbGllbnQ7CisgICAgc3RkOjpzaGFyZWRfcHRyPGFuZHJvaWQ6OkNvZGVjMkNsaWVudDo6TGlzdGVuZXI+IG1MaXN0ZW5lcjsKKyAgICBzdGQ6OnNoYXJlZF9wdHI8YW5kcm9pZDo6Q29kZWMyQ2xpZW50OjpDb21wb25lbnQ+IG1Db21wb25lbnQ7CisKKyAgIHByb3RlY3RlZDoKKyAgICBzdGF0aWMgdm9pZCBkZXNjcmlwdGlvbihjb25zdCBzdGQ6OnN0cmluZyYgZGVzY3JpcHRpb24pIHsKKyAgICAgICAgUmVjb3JkUHJvcGVydHkoImRlc2NyaXB0aW9uIiwgZGVzY3JpcHRpb24pOworICAgIH0KK307CisKK3ZvaWQgdmFsaWRhdGVDb21wb25lbnQoCisgICAgY29uc3Qgc3RkOjpzaGFyZWRfcHRyPGFuZHJvaWQ6OkNvZGVjMkNsaWVudDo6Q29tcG9uZW50PiYgY29tcG9uZW50LAorICAgIENvZGVjMkF1ZGlvRGVjSGlkbFRlc3Q6OnN0YW5kYXJkQ29tcCBjb21wTmFtZSwgYm9vbCYgZGlzYWJsZVRlc3QpIHsKKyAgICAvLyBWYWxpZGF0ZSBpdHMgYSBDMiBDb21wb25lbnQKKyAgICBpZiAoY29tcG9uZW50LT5nZXROYW1lKCkuZmluZCgiYzIiKSA9PSBzdGQ6OnN0cmluZzo6bnBvcykgeworICAgICAgICBBTE9HRSgiTm90IGEgYzIgY29tcG9uZW50Iik7CisgICAgICAgIGRpc2FibGVUZXN0ID0gdHJ1ZTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIC8vIFZhbGlkYXRlIGl0cyBub3QgYW4gZW5jb2RlciBhbmQgdGhlIGNvbXBvbmVudCB0byBiZSB0ZXN0ZWQgaXMgYXVkaW8KKyAgICBpZiAoY29tcG9uZW50LT5nZXROYW1lKCkuZmluZCgiZW5jb2RlciIpICE9IHN0ZDo6c3RyaW5nOjpucG9zKSB7CisgICAgICAgIEFMT0dFKCJFeHBlY3RlZCBEZWNvZGVyLCBnaXZlbiBFbmNvZGVyIik7CisgICAgICAgIGRpc2FibGVUZXN0ID0gdHJ1ZTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBzdGQ6OnZlY3RvcjxzdGQ6OnVuaXF1ZV9wdHI8QzJQYXJhbT4+IHF1ZXJpZWQ7CisgICAgYzJfc3RhdHVzX3QgYzJlcnIgPQorICAgICAgICBjb21wb25lbnQtPnF1ZXJ5KHt9LCB7QzJQb3J0TWVkaWFUeXBlU2V0dGluZzo6aW5wdXQ6OlBBUkFNX1RZUEV9LAorICAgICAgICAgICAgICAgICAgICAgICAgIEMyX0RPTlRfQkxPQ0ssICZxdWVyaWVkKTsKKyAgICBpZiAoYzJlcnIgIT0gQzJfT0sgJiYgcXVlcmllZC5zaXplKCkgPT0gMCkgeworICAgICAgICBBTE9HRSgiUXVlcnkgbWVkaWEgdHlwZSBmYWlsZWQgPT4gJWQiLCBjMmVycik7CisgICAgfSBlbHNlIHsKKyAgICAgICAgc3RkOjpzdHJpbmcgaW5wdXREb21haW4gPQorICAgICAgICAgICAgKChDMlN0cmVhbU1lZGlhVHlwZVNldHRpbmc6OmlucHV0KilxdWVyaWVkWzBdLmdldCgpKS0+bS52YWx1ZTsKKyAgICAgICAgaWYgKGlucHV0RG9tYWluLmZpbmQoImF1ZGlvLyIpID09IHN0ZDo6c3RyaW5nOjpucG9zKSB7CisgICAgICAgICAgICBBTE9HRSgiRXhwZWN0ZWQgQXVkaW8gQ29tcG9uZW50Iik7CisgICAgICAgICAgICBkaXNhYmxlVGVzdCA9IHRydWU7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvLyBWYWxpZGF0ZXMgY29tcG9uZW50IG5hbWUKKyAgICBpZiAoY29tcE5hbWUgPT0gQ29kZWMyQXVkaW9EZWNIaWRsVGVzdDo6dW5rbm93bl9jb21wKSB7CisgICAgICAgIEFMT0dFKCJDb21wb25lbnQgSW5WYWxpZCIpOworICAgICAgICBkaXNhYmxlVGVzdCA9IHRydWU7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgQUxPR1YoIkNvbXBvbmVudCBWYWxpZCIpOworfQorCisvLyBTZXQgRGVmYXVsdCBjb25maWcgcGFyYW0uCit2b2lkIHNldHVwQ29uZmlnUGFyYW0oCisgICAgY29uc3Qgc3RkOjpzaGFyZWRfcHRyPGFuZHJvaWQ6OkNvZGVjMkNsaWVudDo6Q29tcG9uZW50PiYgY29tcG9uZW50LAorICAgIGludDMyX3QqIGJpdFN0cmVhbUluZm8pIHsKKyAgICBzdGQ6OnZlY3RvcjxzdGQ6OnVuaXF1ZV9wdHI8QzJTZXR0aW5nUmVzdWx0Pj4gZmFpbHVyZXM7CisgICAgQzJTdHJlYW1TYW1wbGVSYXRlSW5mbzo6b3V0cHV0IHNhbXBsZVJhdGVJbmZvKDB1LCBiaXRTdHJlYW1JbmZvWzBdKTsKKyAgICBDMlN0cmVhbUNoYW5uZWxDb3VudEluZm86Om91dHB1dCBjaGFubmVsQ291bnRJbmZvKDB1LCBiaXRTdHJlYW1JbmZvWzFdKTsKKworICAgIHN0ZDo6dmVjdG9yPEMyUGFyYW0qPiBjb25maWdQYXJhbXsmc2FtcGxlUmF0ZUluZm8sICZjaGFubmVsQ291bnRJbmZvfTsKKyAgICBjMl9zdGF0dXNfdCBzdGF0dXMgPQorICAgICAgICBjb21wb25lbnQtPmNvbmZpZyhjb25maWdQYXJhbSwgQzJfRE9OVF9CTE9DSywgJmZhaWx1cmVzKTsKKyAgICBBU1NFUlRfRVEoZmFpbHVyZXMuc2l6ZSgpLCAwdSk7CisgICAgQVNTRVJUX0VRKHN0YXR1cywgQzJfT0spOworfQorCisvLyBJbiBkZWNvZGVyIGNvbXBvbmVudHMsIG9mdGVuIHRoZSBpbnB1dCBwYXJhbWV0ZXJzIGdldCB1cGRhdGVkIHVwb24KKy8vIHBhcnNpbmcgdGhlIGhlYWRlciBvZiBlbGVtZW50YXJ5IHN0cmVhbS4gQ2xpZW50IG5lZWRzIHRvIGNvbGxlY3QgdGhpcworLy8gaW5mb3JtYXRpb24gYW5kIHJlY29uZmlndXJlCit2b2lkIGdldElucHV0Q2hhbm5lbEluZm8oCisgICAgY29uc3Qgc3RkOjpzaGFyZWRfcHRyPGFuZHJvaWQ6OkNvZGVjMkNsaWVudDo6Q29tcG9uZW50PiYgY29tcG9uZW50LAorICAgIENvZGVjMkF1ZGlvRGVjSGlkbFRlc3Q6OnN0YW5kYXJkQ29tcCBjb21wTmFtZSwgaW50MzJfdCogYml0U3RyZWFtSW5mbykgeworICAgIC8vIHF1ZXJ5IG5TYW1wbGVSYXRlIGFuZCBuQ2hhbm5lbHMKKyAgICBzdGQ6OmluaXRpYWxpemVyX2xpc3Q8QzJQYXJhbTo6SW5kZXg+IGluZGljZXN7CisgICAgICAgIEMyU3RyZWFtU2FtcGxlUmF0ZUluZm86Om91dHB1dDo6UEFSQU1fVFlQRSwKKyAgICAgICAgQzJTdHJlYW1DaGFubmVsQ291bnRJbmZvOjpvdXRwdXQ6OlBBUkFNX1RZUEUsCisgICAgfTsKKyAgICBzdGQ6OnZlY3RvcjxzdGQ6OnVuaXF1ZV9wdHI8QzJQYXJhbT4+IGluUGFyYW1zOworICAgIGMyX3N0YXR1c190IHN0YXR1cyA9CisgICAgICAgIGNvbXBvbmVudC0+cXVlcnkoe30sIGluZGljZXMsIEMyX0RPTlRfQkxPQ0ssICZpblBhcmFtcyk7CisgICAgaWYgKHN0YXR1cyAhPSBDMl9PSyAmJiBpblBhcmFtcy5zaXplKCkgPT0gMCkgeworICAgICAgICBBTE9HRSgiUXVlcnkgbWVkaWEgdHlwZSBmYWlsZWQgPT4gJWQiLCBzdGF0dXMpOworICAgICAgICBBU1NFUlRfVFJVRShmYWxzZSk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgc2l6ZV90IG9mZnNldCA9IHNpemVvZihDMlBhcmFtKTsKKyAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBpblBhcmFtcy5zaXplKCk7ICsraSkgeworICAgICAgICAgICAgQzJQYXJhbSogcGFyYW0gPSBpblBhcmFtc1tpXS5nZXQoKTsKKyAgICAgICAgICAgIGJpdFN0cmVhbUluZm9baV0gPSAqKGludDMyX3QqKSgodWludDhfdCopcGFyYW0gKyBvZmZzZXQpOworICAgICAgICB9CisgICAgICAgIHN3aXRjaCAoY29tcE5hbWUpIHsKKyAgICAgICAgICAgIGNhc2UgQ29kZWMyQXVkaW9EZWNIaWRsVGVzdDo6YW1ybmI6IHsKKyAgICAgICAgICAgICAgICBBU1NFUlRfRVEoYml0U3RyZWFtSW5mb1swXSwgODAwMCk7CisgICAgICAgICAgICAgICAgQVNTRVJUX0VRKGJpdFN0cmVhbUluZm9bMV0sIDEpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICAgICAgY2FzZSBDb2RlYzJBdWRpb0RlY0hpZGxUZXN0OjphbXJ3YjogeworICAgICAgICAgICAgICAgIEFTU0VSVF9FUShiaXRTdHJlYW1JbmZvWzBdLCAxNjAwMCk7CisgICAgICAgICAgICAgICAgQVNTRVJUX0VRKGJpdFN0cmVhbUluZm9bMV0sIDEpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICAgICAgY2FzZSBDb2RlYzJBdWRpb0RlY0hpZGxUZXN0Ojpnc206IHsKKyAgICAgICAgICAgICAgICBBU1NFUlRfRVEoYml0U3RyZWFtSW5mb1swXSwgODAwMCk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgfQorfQorCisvLyBMb29rVXBUYWJsZSBvZiBjbGlwcyBhbmQgbWV0YWRhdGEgZm9yIGNvbXBvbmVudCB0ZXN0aW5nCit2b2lkIEdldFVSTEZvckNvbXBvbmVudChDb2RlYzJBdWRpb0RlY0hpZGxUZXN0OjpzdGFuZGFyZENvbXAgY29tcCwgY2hhciogbVVSTCwKKyAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIqIGluZm8pIHsKKyAgICBzdHJ1Y3QgQ29tcFRvVVJMIHsKKyAgICAgICAgQ29kZWMyQXVkaW9EZWNIaWRsVGVzdDo6c3RhbmRhcmRDb21wIGNvbXA7CisgICAgICAgIGNvbnN0IGNoYXIqIG1VUkw7CisgICAgICAgIGNvbnN0IGNoYXIqIGluZm87CisgICAgfTsKKyAgICBzdGF0aWMgY29uc3QgQ29tcFRvVVJMIGtDb21wVG9VUkxbXSA9IHsKKyAgICAgICAge0NvZGVjMkF1ZGlvRGVjSGlkbFRlc3Q6OnN0YW5kYXJkQ29tcDo6eGFhYywKKyAgICAgICAgICJiYmJfYWFjX3N0ZXJlb18xMjhrYnBzXzQ4MDAwaHouYWFjIiwKKyAgICAgICAgICJiYmJfYWFjX3N0ZXJlb18xMjhrYnBzXzQ4MDAwaHouaW5mbyJ9LAorICAgICAgICB7Q29kZWMyQXVkaW9EZWNIaWRsVGVzdDo6c3RhbmRhcmRDb21wOjptcDMsCisgICAgICAgICAiYmJiX21wM19zdGVyZW9fMTkya2Jwc180ODAwMGh6Lm1wMyIsCisgICAgICAgICAiYmJiX21wM19zdGVyZW9fMTkya2Jwc180ODAwMGh6LmluZm8ifSwKKyAgICAgICAge0NvZGVjMkF1ZGlvRGVjSGlkbFRlc3Q6OnN0YW5kYXJkQ29tcDo6YWFjLAorICAgICAgICAgImJiYl9hYWNfc3RlcmVvXzEyOGticHNfNDgwMDBoei5hYWMiLAorICAgICAgICAgImJiYl9hYWNfc3RlcmVvXzEyOGticHNfNDgwMDBoei5pbmZvIn0sCisgICAgICAgIHtDb2RlYzJBdWRpb0RlY0hpZGxUZXN0OjpzdGFuZGFyZENvbXA6OmFtcm5iLAorICAgICAgICAgInNpbmVfYW1ybmJfMWNoXzEya2Jwc184MDAwaHouYW1ybmIiLAorICAgICAgICAgInNpbmVfYW1ybmJfMWNoXzEya2Jwc184MDAwaHouaW5mbyJ9LAorICAgICAgICB7Q29kZWMyQXVkaW9EZWNIaWRsVGVzdDo6c3RhbmRhcmRDb21wOjphbXJ3YiwKKyAgICAgICAgICJiYmJfYW1yd2JfMWNoXzE0a2Jwc18xNjAwMGh6LmFtcndiIiwKKyAgICAgICAgICJiYmJfYW1yd2JfMWNoXzE0a2Jwc18xNjAwMGh6LmluZm8ifSwKKyAgICAgICAge0NvZGVjMkF1ZGlvRGVjSGlkbFRlc3Q6OnN0YW5kYXJkQ29tcDo6dm9yYmlzLAorICAgICAgICAgImJiYl92b3JiaXNfc3RlcmVvXzEyOGticHNfNDgwMDBoei52b3JiaXMiLAorICAgICAgICAgImJiYl92b3JiaXNfc3RlcmVvXzEyOGticHNfNDgwMDBoei5pbmZvIn0sCisgICAgICAgIHtDb2RlYzJBdWRpb0RlY0hpZGxUZXN0OjpzdGFuZGFyZENvbXA6Om9wdXMsCisgICAgICAgICAiYmJiX29wdXNfc3RlcmVvXzEyOGticHNfNDgwMDBoei5vcHVzIiwKKyAgICAgICAgICJiYmJfb3B1c19zdGVyZW9fMTI4a2Jwc180ODAwMGh6LmluZm8ifSwKKyAgICAgICAge0NvZGVjMkF1ZGlvRGVjSGlkbFRlc3Q6OnN0YW5kYXJkQ29tcDo6ZzcxMWFsYXcsCisgICAgICAgICJiYmJfZzcxMWFsYXdfMWNoXzhraHoucmF3IiwKKyAgICAgICAgICJiYmJfZzcxMWFsYXdfMWNoXzhraHouaW5mbyJ9LAorICAgICAgICB7Q29kZWMyQXVkaW9EZWNIaWRsVGVzdDo6c3RhbmRhcmRDb21wOjpnNzExbWxhdywKKyAgICAgICAgImJiYl9nNzExbXVsYXdfMWNoXzhraHoucmF3IiwKKyAgICAgICAgICJiYmJfZzcxMW11bGF3XzFjaF84a2h6LmluZm8ifSwKKyAgICAgICAge0NvZGVjMkF1ZGlvRGVjSGlkbFRlc3Q6OnN0YW5kYXJkQ29tcDo6Z3NtLAorICAgICAgICAiYmJiX2dzbV8xY2hfOGtoel8xM2ticHMucmF3IiwKKyAgICAgICAgICJiYmJfZ3NtXzFjaF84a2h6XzEza2Jwcy5pbmZvIn0sCisgICAgICAgIHtDb2RlYzJBdWRpb0RlY0hpZGxUZXN0OjpzdGFuZGFyZENvbXA6OnJhdywKKyAgICAgICAgImJiYl9yYXdfMWNoXzhraHpfczMybGUucmF3IiwKKyAgICAgICAgICJiYmJfcmF3XzFjaF84a2h6X3MzMmxlLmluZm8ifSwKKyAgICAgICAge0NvZGVjMkF1ZGlvRGVjSGlkbFRlc3Q6OnN0YW5kYXJkQ29tcDo6ZmxhYywKKyAgICAgICAgICJiYmJfZmxhY19zdGVyZW9fNjgwa2Jwc180ODAwMGh6LmZsYWMiLAorICAgICAgICAgImJiYl9mbGFjX3N0ZXJlb182ODBrYnBzXzQ4MDAwaHouaW5mbyJ9LAorICAgIH07CisKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHNpemVvZihrQ29tcFRvVVJMKSAvIHNpemVvZihrQ29tcFRvVVJMWzBdKTsgKytpKSB7CisgICAgICAgIGlmIChrQ29tcFRvVVJMW2ldLmNvbXAgPT0gY29tcCkgeworICAgICAgICAgICAgc3RyY2F0KG1VUkwsIGtDb21wVG9VUkxbaV0ubVVSTCk7CisgICAgICAgICAgICBzdHJjYXQoaW5mbywga0NvbXBUb1VSTFtpXS5pbmZvKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgIH0KK30KKwordm9pZCBkZWNvZGVORnJhbWVzKGNvbnN0IHN0ZDo6c2hhcmVkX3B0cjxhbmRyb2lkOjpDb2RlYzJDbGllbnQ6OkNvbXBvbmVudD4gJmNvbXBvbmVudCwKKyAgICAgICAgICAgICAgICAgICBzdGQ6Om11dGV4ICZxdWV1ZUxvY2ssIHN0ZDo6Y29uZGl0aW9uX3ZhcmlhYmxlICZxdWV1ZUNvbmRpdGlvbiwKKyAgICAgICAgICAgICAgICAgICBzdGQ6Omxpc3Q8c3RkOjp1bmlxdWVfcHRyPEMyV29yaz4+ICZ3b3JrUXVldWUsCisgICAgICAgICAgICAgICAgICAgc3RkOjpsaXN0PHVpbnQ2NF90PiAmZmx1c2hlZEluZGljZXMsCisgICAgICAgICAgICAgICAgICAgc3RkOjpzaGFyZWRfcHRyPEMyQmxvY2tQb29sPiAmbGluZWFyUG9vbCwKKyAgICAgICAgICAgICAgICAgICBzdGQ6Omlmc3RyZWFtJiBlbGVTdHJlYW0sCisgICAgICAgICAgICAgICAgICAgYW5kcm9pZDo6VmVjdG9yPEZyYW1lSW5mbz4qIEluZm8sCisgICAgICAgICAgICAgICAgICAgaW50IG9mZnNldCwgaW50IHJhbmdlLCBib29sIHNpZ25hbEVPUyA9IHRydWUpIHsKKyAgICB0eXBlZGVmIHN0ZDo6dW5pcXVlX2xvY2s8c3RkOjptdXRleD4gVUxvY2s7CisgICAgaW50IGZyYW1lSUQgPSBvZmZzZXQ7CisgICAgaW50IG1heFJldHJ5ID0gMDsKKyAgICB3aGlsZSAoMSkgeworICAgICAgICBpZiAoZnJhbWVJRCA9PSAoaW50KUluZm8tPnNpemUoKSB8fCBmcmFtZUlEID09IChvZmZzZXQgKyByYW5nZSkpIGJyZWFrOworICAgICAgICB1aW50MzJfdCBmbGFncyA9IDA7CisgICAgICAgIHN0ZDo6dW5pcXVlX3B0cjxDMldvcms+IHdvcms7CisgICAgICAgIC8vIFByZXBhcmUgQzJXb3JrCisgICAgICAgIHdoaWxlICghd29yayAmJiAobWF4UmV0cnkgPCBNQVhfUkVUUlkpKSB7CisgICAgICAgICAgICBVTG9jayBsKHF1ZXVlTG9jayk7CisgICAgICAgICAgICBpZiAoIXdvcmtRdWV1ZS5lbXB0eSgpKSB7CisgICAgICAgICAgICAgICAgd29yay5zd2FwKHdvcmtRdWV1ZS5mcm9udCgpKTsKKyAgICAgICAgICAgICAgICB3b3JrUXVldWUucG9wX2Zyb250KCk7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIHF1ZXVlQ29uZGl0aW9uLndhaXRfZm9yKGwsIFRJTUVfT1VUKTsKKyAgICAgICAgICAgICAgICBtYXhSZXRyeSsrOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGlmICghd29yayAmJiAobWF4UmV0cnkgPj0gTUFYX1JFVFJZKSkgeworICAgICAgICAgICAgQVNTRVJUX1RSVUUoZmFsc2UpIDw8ICJXYWl0IGZvciBnZW5lcmF0aW5nIEMyV29yayBleGNlZWRlZCB0aW1lb3V0IjsKKyAgICAgICAgfQorICAgICAgICBpbnQ2NF90IHRpbWVzdGFtcCA9ICgqSW5mbylbZnJhbWVJRF0udGltZXN0YW1wOworICAgICAgICBpZiAoKCpJbmZvKVtmcmFtZUlEXS5mbGFncykgZmxhZ3MgPSAxdSA8PCAoKCpJbmZvKVtmcmFtZUlEXS5mbGFncyAtIDEpOworICAgICAgICBpZiAoc2lnbmFsRU9TICYmICgoZnJhbWVJRCA9PSAoaW50KUluZm8tPnNpemUoKSAtIDEpIHx8CisgICAgICAgICAgICAgICAgICAgICAgICAgIChmcmFtZUlEID09IChvZmZzZXQgKyByYW5nZSAtIDEpKSkpCisgICAgICAgICAgICBmbGFncyB8PSBDMkZyYW1lRGF0YTo6RkxBR19FTkRfT0ZfU1RSRUFNOworCisgICAgICAgIHdvcmstPmlucHV0LmZsYWdzID0gKEMyRnJhbWVEYXRhOjpmbGFnc190KWZsYWdzOworICAgICAgICB3b3JrLT5pbnB1dC5vcmRpbmFsLnRpbWVzdGFtcCA9IHRpbWVzdGFtcDsKKyAgICAgICAgd29yay0+aW5wdXQub3JkaW5hbC5mcmFtZUluZGV4ID0gZnJhbWVJRDsKKyAgICAgICAgeworICAgICAgICAgICAgVUxvY2sgbChxdWV1ZUxvY2spOworICAgICAgICAgICAgZmx1c2hlZEluZGljZXMuZW1wbGFjZV9iYWNrKGZyYW1lSUQpOworICAgICAgICB9CisgICAgICAgIGludCBzaXplID0gKCpJbmZvKVtmcmFtZUlEXS5ieXRlc0NvdW50OworICAgICAgICBjaGFyKiBkYXRhID0gKGNoYXIqKW1hbGxvYyhzaXplKTsKKworICAgICAgICBlbGVTdHJlYW0ucmVhZChkYXRhLCBzaXplKTsKKyAgICAgICAgQVNTRVJUX0VRKGVsZVN0cmVhbS5nY291bnQoKSwgc2l6ZSk7CisKKyAgICAgICAgc3RkOjpzaGFyZWRfcHRyPEMyTGluZWFyQmxvY2s+IGJsb2NrOworICAgICAgICBBU1NFUlRfRVEoQzJfT0ssCisgICAgICAgICAgICAgICAgICBsaW5lYXJQb29sLT5mZXRjaExpbmVhckJsb2NrKAorICAgICAgICAgICAgICAgICAgICAgIHNpemUsIHtDMk1lbW9yeVVzYWdlOjpDUFVfUkVBRCwgQzJNZW1vcnlVc2FnZTo6Q1BVX1dSSVRFfSwKKyAgICAgICAgICAgICAgICAgICAgICAmYmxvY2spKTsKKyAgICAgICAgQVNTRVJUX1RSVUUoYmxvY2spOworCisgICAgICAgIC8vIFdyaXRlIFZpZXcKKyAgICAgICAgQzJXcml0ZVZpZXcgdmlldyA9IGJsb2NrLT5tYXAoKS5nZXQoKTsKKyAgICAgICAgaWYgKHZpZXcuZXJyb3IoKSAhPSBDMl9PSykgeworICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICJDMkxpbmVhckJsb2NrOjptYXAoKSBmYWlsZWQgOiAlZCIsIHZpZXcuZXJyb3IoKSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBBU1NFUlRfRVEoKHNpemVfdClzaXplLCB2aWV3LmNhcGFjaXR5KCkpOworICAgICAgICBBU1NFUlRfRVEoMHUsIHZpZXcub2Zmc2V0KCkpOworICAgICAgICBBU1NFUlRfRVEoKHNpemVfdClzaXplLCB2aWV3LnNpemUoKSk7CisKKyAgICAgICAgbWVtY3B5KHZpZXcuYmFzZSgpLCBkYXRhLCBzaXplKTsKKworICAgICAgICB3b3JrLT5pbnB1dC5idWZmZXJzLmNsZWFyKCk7CisgICAgICAgIHdvcmstPmlucHV0LmJ1ZmZlcnMuZW1wbGFjZV9iYWNrKG5ldyBMaW5lYXJCdWZmZXIoYmxvY2spKTsKKyAgICAgICAgd29yay0+d29ya2xldHMuY2xlYXIoKTsKKyAgICAgICAgd29yay0+d29ya2xldHMuZW1wbGFjZV9iYWNrKG5ldyBDMldvcmtsZXQpOworICAgICAgICBmcmVlKGRhdGEpOworCisgICAgICAgIHN0ZDo6bGlzdDxzdGQ6OnVuaXF1ZV9wdHI8QzJXb3JrPj4gaXRlbXM7CisgICAgICAgIGl0ZW1zLnB1c2hfYmFjayhzdGQ6Om1vdmUod29yaykpOworCisgICAgICAgIC8vIERPIFRIRSBERUNPRElORworICAgICAgICBBU1NFUlRfRVEoY29tcG9uZW50LT5xdWV1ZSgmaXRlbXMpLCBDMl9PSyk7CisgICAgICAgIEFMT0dWKCJGcmFtZSAjJWQgc2l6ZSA9ICVkIHF1ZXVlZCIsIGZyYW1lSUQsIHNpemUpOworICAgICAgICBmcmFtZUlEKys7CisgICAgICAgIG1heFJldHJ5ID0gMDsKKyAgICB9Cit9CisKK3ZvaWQgd2FpdE9uSW5wdXRDb25zdW1wdGlvbihzdGQ6Om11dGV4JiBxdWV1ZUxvY2ssCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RkOjpjb25kaXRpb25fdmFyaWFibGUmIHF1ZXVlQ29uZGl0aW9uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZDo6bGlzdDxzdGQ6OnVuaXF1ZV9wdHI8QzJXb3JrPj4mIHdvcmtRdWV1ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgYnVmZmVyQ291bnQgPSBNQVhfSU5QVVRfQlVGRkVSUykgeworICAgIHR5cGVkZWYgc3RkOjp1bmlxdWVfbG9jazxzdGQ6Om11dGV4PiBVTG9jazsKKyAgICB1aW50MzJfdCBxdWV1ZVNpemU7CisgICAgdWludDMyX3QgbWF4UmV0cnkgPSAwOworICAgIHsKKyAgICAgICAgVUxvY2sgbChxdWV1ZUxvY2spOworICAgICAgICBxdWV1ZVNpemUgPSB3b3JrUXVldWUuc2l6ZSgpOworICAgIH0KKyAgICB3aGlsZSAoKG1heFJldHJ5IDwgTUFYX1JFVFJZKSAmJiAocXVldWVTaXplIDwgYnVmZmVyQ291bnQpKSB7CisgICAgICAgIFVMb2NrIGwocXVldWVMb2NrKTsKKyAgICAgICAgaWYgKHF1ZXVlU2l6ZSAhPSB3b3JrUXVldWUuc2l6ZSgpKSB7CisgICAgICAgICAgICBxdWV1ZVNpemUgPSB3b3JrUXVldWUuc2l6ZSgpOworICAgICAgICAgICAgbWF4UmV0cnkgPSAwOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgcXVldWVDb25kaXRpb24ud2FpdF9mb3IobCwgVElNRV9PVVQpOworICAgICAgICAgICAgbWF4UmV0cnkrKzsKKyAgICAgICAgfQorICAgIH0KK30KKworVEVTVF9GKENvZGVjMkF1ZGlvRGVjSGlkbFRlc3QsIHZhbGlkYXRlQ29tcE5hbWUpIHsKKyAgICBpZiAobURpc2FibGVUZXN0KSByZXR1cm47CisgICAgQUxPR1YoIkNoZWNrcyBpZiB0aGUgZ2l2ZW4gY29tcG9uZW50IGlzIGEgdmFsaWQgYXVkaW8gY29tcG9uZW50Iik7CisgICAgdmFsaWRhdGVDb21wb25lbnQobUNvbXBvbmVudCwgbUNvbXBOYW1lLCBtRGlzYWJsZVRlc3QpOworICAgIEFTU0VSVF9FUShtRGlzYWJsZVRlc3QsIGZhbHNlKTsKK30KKworVEVTVF9GKENvZGVjMkF1ZGlvRGVjSGlkbFRlc3QsIGNvbmZpZ0NvbXApIHsKKyAgICBkZXNjcmlwdGlvbigiVGVzdHMgY29tcG9uZW50IHNwZWNpZmljIGNvbmZpZ3VyYXRpb24iKTsKKyAgICBpZiAobURpc2FibGVUZXN0KSByZXR1cm47CisgICAgQVNTRVJUX0VRKG1Db21wb25lbnQtPnN0YXJ0KCksIEMyX09LKTsKKyAgICBpbnQzMl90IGJpdFN0cmVhbUluZm9bMl0gPSB7MH07CisgICAgQVNTRVJUX05PX0ZBVEFMX0ZBSUxVUkUoCisgICAgICAgIGdldElucHV0Q2hhbm5lbEluZm8obUNvbXBvbmVudCwgbUNvbXBOYW1lLCBiaXRTdHJlYW1JbmZvKSk7CisgICAgc2V0dXBDb25maWdQYXJhbShtQ29tcG9uZW50LCBiaXRTdHJlYW1JbmZvKTsKKyAgICBBU1NFUlRfRVEobUNvbXBvbmVudC0+c3RvcCgpLCBDMl9PSyk7Cit9CisKK1RFU1RfRihDb2RlYzJBdWRpb0RlY0hpZGxUZXN0LCBEZWNvZGVUZXN0KSB7CisgICAgZGVzY3JpcHRpb24oIkRlY29kZXMgaW5wdXQgZmlsZSIpOworICAgIGlmIChtRGlzYWJsZVRlc3QpIHJldHVybjsKKworICAgIEFTU0VSVF9FUShtQ29tcG9uZW50LT5zdGFydCgpLCBDMl9PSyk7CisgICAgbVRpbWVzdGFtcERldlRlc3QgPSB0cnVlOworICAgIGNoYXIgbVVSTFs1MTJdLCBpbmZvWzUxMl07CisgICAgc3RkOjppZnN0cmVhbSBlbGVTdHJlYW0sIGVsZUluZm87CisKKyAgICBzdHJjcHkobVVSTCwgZ0Vudi0+Z2V0UmVzKCkuY19zdHIoKSk7CisgICAgc3RyY3B5KGluZm8sIGdFbnYtPmdldFJlcygpLmNfc3RyKCkpOworICAgIEdldFVSTEZvckNvbXBvbmVudChtQ29tcE5hbWUsIG1VUkwsIGluZm8pOworCisgICAgZWxlSW5mby5vcGVuKGluZm8pOworICAgIEFTU0VSVF9FUShlbGVJbmZvLmlzX29wZW4oKSwgdHJ1ZSk7CisgICAgYW5kcm9pZDo6VmVjdG9yPEZyYW1lSW5mbz4gSW5mbzsKKyAgICBpbnQgYnl0ZXNDb3VudCA9IDA7CisgICAgdWludDMyX3QgZmxhZ3MgPSAwOworICAgIHVpbnQzMl90IHRpbWVzdGFtcCA9IDA7CisgICAgd2hpbGUgKDEpIHsKKyAgICAgICAgaWYgKCEoZWxlSW5mbyA+PiBieXRlc0NvdW50KSkgYnJlYWs7CisgICAgICAgIGVsZUluZm8gPj4gZmxhZ3M7CisgICAgICAgIGVsZUluZm8gPj4gdGltZXN0YW1wOworICAgICAgICBib29sIGNvZGVjQ29uZmlnID0KKyAgICAgICAgICAgICgoMSA8PCAoZmxhZ3MgLSAxKSkgJiBDMkZyYW1lRGF0YTo6RkxBR19DT0RFQ19DT05GSUcpICE9IDA7CisgICAgICAgIGlmIChtVGltZXN0YW1wRGV2VGVzdCAmJiAhY29kZWNDb25maWcpCisgICAgICAgICAgICBtVGltZXN0YW1wVXNsaXN0LnB1c2hfYmFjayh0aW1lc3RhbXApOworICAgICAgICBJbmZvLnB1c2hfYmFjayh7Ynl0ZXNDb3VudCwgZmxhZ3MsIHRpbWVzdGFtcH0pOworICAgIH0KKyAgICBlbGVJbmZvLmNsb3NlKCk7CisgICAgaW50MzJfdCBiaXRTdHJlYW1JbmZvWzJdID0gezB9OworICAgIGlmIChtQ29tcE5hbWUgPT0gcmF3KSB7CisgICAgICAgIGJpdFN0cmVhbUluZm9bMF0gPSA4MDAwOworICAgICAgICBiaXRTdHJlYW1JbmZvWzFdID0gMTsKKyAgICB9IGVsc2UgeworICAgICAgICBBU1NFUlRfTk9fRkFUQUxfRkFJTFVSRSgKKyAgICAgICAgICAgIGdldElucHV0Q2hhbm5lbEluZm8obUNvbXBvbmVudCwgbUNvbXBOYW1lLCBiaXRTdHJlYW1JbmZvKSk7CisgICAgfQorICAgIHNldHVwQ29uZmlnUGFyYW0obUNvbXBvbmVudCwgYml0U3RyZWFtSW5mbyk7CisgICAgQUxPR1YoIm1VUkwgOiAlcyIsIG1VUkwpOworICAgIGVsZVN0cmVhbS5vcGVuKG1VUkwsIHN0ZDo6aWZzdHJlYW06OmJpbmFyeSk7CisgICAgQVNTRVJUX0VRKGVsZVN0cmVhbS5pc19vcGVuKCksIHRydWUpOworICAgIEFTU0VSVF9OT19GQVRBTF9GQUlMVVJFKGRlY29kZU5GcmFtZXMoCisgICAgICAgIG1Db21wb25lbnQsIG1RdWV1ZUxvY2ssIG1RdWV1ZUNvbmRpdGlvbiwgbVdvcmtRdWV1ZSwgbUZsdXNoZWRJbmRpY2VzLAorICAgICAgICBtTGluZWFyUG9vbCwgZWxlU3RyZWFtLCAmSW5mbywgMCwgKGludClJbmZvLnNpemUoKSkpOworICAgIC8vIGJsb2NraW5nIGNhbGwgdG8gZW5zdXJlcyBhcHBsaWNhdGlvbiB0byBXYWl0IHRpbGwgYWxsIHRoZSBpbnB1dHMgYXJlCisgICAgLy8gY29uc3VtZWQKKyAgICBBU1NFUlRfTk9fRkFUQUxfRkFJTFVSRSgKKyAgICAgICAgd2FpdE9uSW5wdXRDb25zdW1wdGlvbihtUXVldWVMb2NrLCBtUXVldWVDb25kaXRpb24sIG1Xb3JrUXVldWUpKTsKKyAgICBlbGVTdHJlYW0uY2xvc2UoKTsKKyAgICBpZiAobUZyYW1lc1JlY2VpdmVkICE9IEluZm8uc2l6ZSgpKSB7CisgICAgICAgIEFMT0dFKCJJbnB1dCBidWZmZXIgY291bnQgYW5kIE91dHB1dCBidWZmZXIgY291bnQgbWlzbWF0Y2giKTsKKyAgICAgICAgQUxPR0UoImZyYW1lc1JlY2VpdmVkIDogJWQgaW5wdXRGcmFtZXMgOiAlenUiLCBtRnJhbWVzUmVjZWl2ZWQsCisgICAgICAgICAgICAgIEluZm8uc2l6ZSgpKTsKKyAgICAgICAgQVNTRVJUX1RSVUUoZmFsc2UpOworICAgIH0KKyAgICBBU1NFUlRfRVEobUVvcywgdHJ1ZSk7CisgICAgaWYgKG1UaW1lc3RhbXBEZXZUZXN0KSB7CisgICAgICAgIHVpbnQ2NF90IGV4cFRzOworICAgICAgICB1aW50MzJfdCBzYW1wbGVzUmVjZWl2ZWQgPSAwOworICAgICAgICAvLyBVcGRhdGUgU2FtcGxlUmF0ZSBhbmQgQ2hhbm5lbENvdW50CisgICAgICAgIEFTU0VSVF9OT19GQVRBTF9GQUlMVVJFKAorICAgICAgICAgICAgZ2V0SW5wdXRDaGFubmVsSW5mbyhtQ29tcG9uZW50LCBtQ29tcE5hbWUsIGJpdFN0cmVhbUluZm8pKTsKKyAgICAgICAgaW50IG5TYW1wbGVSYXRlID0gYml0U3RyZWFtSW5mb1swXTsKKyAgICAgICAgaW50IG5DaGFubmVscyA9IGJpdFN0cmVhbUluZm9bMV07CisgICAgICAgIHN0ZDo6bGlzdDx1aW50NjRfdD46Oml0ZXJhdG9yIGl0SW4gPSBtVGltZXN0YW1wVXNsaXN0LmJlZ2luKCk7CisgICAgICAgIGFuZHJvaWQ6Okxpc3Q8b3V0cHV0TWV0YURhdGE+OjppdGVyYXRvciBpdE91dCA9IG9CdWZmZXJNZXRhRGF0YS5iZWdpbigpOworICAgICAgICBFWFBFQ1RfRVEoKml0SW4sIGl0T3V0LT50aW1lc3RhbXBVcyk7CisgICAgICAgIGV4cFRzID0gKml0SW47CisgICAgICAgIHdoaWxlIChpdE91dCAhPSBvQnVmZmVyTWV0YURhdGEuZW5kKCkpIHsKKyAgICAgICAgICAgIEVYUEVDVF9FUShleHBUcywgaXRPdXQtPnRpbWVzdGFtcFVzKTsKKyAgICAgICAgICAgIGlmIChleHBUcyAhPSBpdE91dC0+dGltZXN0YW1wVXMpIGJyZWFrOworICAgICAgICAgICAgLy8gYnVmZmVyIHNhbXBsZXMgPSAoKHRvdGFsIGJ5dGVzKSAvIChhYyAqIChiaXRzIHBlciBzYW1wbGUgLyA4KSkKKyAgICAgICAgICAgIHNhbXBsZXNSZWNlaXZlZCArPSAoKGl0T3V0LT5yYW5nZUxlbmd0aCkgLyAobkNoYW5uZWxzICogMikpOworICAgICAgICAgICAgZXhwVHMgPSBzYW1wbGVzUmVjZWl2ZWQgKiAxMDAwMDAwbGwgLyBuU2FtcGxlUmF0ZTsKKyAgICAgICAgICAgIGl0T3V0Kys7CisgICAgICAgIH0KKyAgICAgICAgaXRJbiA9IG1UaW1lc3RhbXBVc2xpc3QuZW5kKCk7CisgICAgICAgIC0taXRJbjsKKyAgICAgICAgRVhQRUNUX0dUKGV4cFRzLCAqaXRJbik7CisgICAgICAgIG9CdWZmZXJNZXRhRGF0YS5jbGVhcigpOworICAgICAgICBtVGltZXN0YW1wVXNsaXN0LmNsZWFyKCk7CisgICAgfQorICAgIEFTU0VSVF9FUShtQ29tcG9uZW50LT5zdG9wKCksIEMyX09LKTsKK30KKworLy8gdGh1bWJuYWlsIHRlc3QKK1RFU1RfRihDb2RlYzJBdWRpb0RlY0hpZGxUZXN0LCBUaHVtYm5haWxUZXN0KSB7CisgICAgZGVzY3JpcHRpb24oIlRlc3QgUmVxdWVzdCBmb3IgdGh1bWJuYWlsIik7CisgICAgaWYgKG1EaXNhYmxlVGVzdCkgcmV0dXJuOworCisgICAgQVNTRVJUX0VRKG1Db21wb25lbnQtPnN0YXJ0KCksIEMyX09LKTsKKyAgICBjaGFyIG1VUkxbNTEyXSwgaW5mb1s1MTJdOworICAgIHN0ZDo6aWZzdHJlYW0gZWxlU3RyZWFtLCBlbGVJbmZvOworCisgICAgc3RyY3B5KG1VUkwsIGdFbnYtPmdldFJlcygpLmNfc3RyKCkpOworICAgIHN0cmNweShpbmZvLCBnRW52LT5nZXRSZXMoKS5jX3N0cigpKTsKKyAgICBHZXRVUkxGb3JDb21wb25lbnQobUNvbXBOYW1lLCBtVVJMLCBpbmZvKTsKKworICAgIGVsZUluZm8ub3BlbihpbmZvKTsKKyAgICBBU1NFUlRfRVEoZWxlSW5mby5pc19vcGVuKCksIHRydWUpOworICAgIGFuZHJvaWQ6OlZlY3RvcjxGcmFtZUluZm8+IEluZm87CisgICAgaW50IGJ5dGVzQ291bnQgPSAwOworICAgIHVpbnQzMl90IGZsYWdzID0gMDsKKyAgICB1aW50MzJfdCB0aW1lc3RhbXAgPSAwOworICAgIHdoaWxlICgxKSB7CisgICAgICAgIGlmICghKGVsZUluZm8gPj4gYnl0ZXNDb3VudCkpIGJyZWFrOworICAgICAgICBlbGVJbmZvID4+IGZsYWdzOworICAgICAgICBlbGVJbmZvID4+IHRpbWVzdGFtcDsKKyAgICAgICAgSW5mby5wdXNoX2JhY2soe2J5dGVzQ291bnQsIGZsYWdzLCB0aW1lc3RhbXB9KTsKKyAgICB9CisgICAgZWxlSW5mby5jbG9zZSgpOworICAgIGludDMyX3QgYml0U3RyZWFtSW5mb1syXSA9IHswfTsKKyAgICBpZiAobUNvbXBOYW1lID09IHJhdykgeworICAgICAgICBiaXRTdHJlYW1JbmZvWzBdID0gODAwMDsKKyAgICAgICAgYml0U3RyZWFtSW5mb1sxXSA9IDE7CisgICAgfSBlbHNlIHsKKyAgICAgICAgQVNTRVJUX05PX0ZBVEFMX0ZBSUxVUkUoCisgICAgICAgICAgICBnZXRJbnB1dENoYW5uZWxJbmZvKG1Db21wb25lbnQsIG1Db21wTmFtZSwgYml0U3RyZWFtSW5mbykpOworICAgIH0KKyAgICBzZXR1cENvbmZpZ1BhcmFtKG1Db21wb25lbnQsIGJpdFN0cmVhbUluZm8pOworICAgIEFMT0dWKCJtVVJMIDogJXMiLCBtVVJMKTsKKworICAgIC8vIHJlcXVlc3QgRU9TIGZvciB0aHVtYm5haWwKKyAgICAvLyBzaWduYWwgRU9TIGZsYWcgd2l0aCBsYXN0IGZyYW1lCisgICAgc2l6ZV90IGkgPSAtMTsKKyAgICBkbyB7CisgICAgICAgIGkrKzsKKyAgICAgICAgZmxhZ3MgPSAwOworICAgICAgICBpZiAoSW5mb1tpXS5mbGFncykgZmxhZ3MgPSAxdSA8PCAoSW5mb1tpXS5mbGFncyAtIDEpOworCisgICAgfSB3aGlsZSAoIShmbGFncyAmIFNZTkNfRlJBTUUpKTsKKyAgICBlbGVTdHJlYW0ub3BlbihtVVJMLCBzdGQ6Omlmc3RyZWFtOjpiaW5hcnkpOworICAgIEFTU0VSVF9FUShlbGVTdHJlYW0uaXNfb3BlbigpLCB0cnVlKTsKKyAgICBBU1NFUlRfTk9fRkFUQUxfRkFJTFVSRShkZWNvZGVORnJhbWVzKAorICAgICAgICBtQ29tcG9uZW50LCBtUXVldWVMb2NrLCBtUXVldWVDb25kaXRpb24sIG1Xb3JrUXVldWUsIG1GbHVzaGVkSW5kaWNlcywKKyAgICAgICAgbUxpbmVhclBvb2wsIGVsZVN0cmVhbSwgJkluZm8sIDAsIGkgKyAxKSk7CisgICAgQVNTRVJUX05PX0ZBVEFMX0ZBSUxVUkUoCisgICAgICAgIHdhaXRPbklucHV0Q29uc3VtcHRpb24obVF1ZXVlTG9jaywgbVF1ZXVlQ29uZGl0aW9uLCBtV29ya1F1ZXVlKSk7CisgICAgZWxlU3RyZWFtLmNsb3NlKCk7CisgICAgRVhQRUNUX0dFKG1GcmFtZXNSZWNlaXZlZCwgMVUpOworICAgIEFTU0VSVF9FUShtRW9zLCB0cnVlKTsKKyAgICBBU1NFUlRfRVEobUNvbXBvbmVudC0+c3RvcCgpLCBDMl9PSyk7Cit9CisKK1RFU1RfRihDb2RlYzJBdWRpb0RlY0hpZGxUZXN0LCBFT1NUZXN0KSB7CisgICAgZGVzY3JpcHRpb24oIlRlc3QgZW1wdHkgaW5wdXQgYnVmZmVyIHdpdGggRU9TIGZsYWciKTsKKyAgICBpZiAobURpc2FibGVUZXN0KSByZXR1cm47CisgICAgdHlwZWRlZiBzdGQ6OnVuaXF1ZV9sb2NrPHN0ZDo6bXV0ZXg+IFVMb2NrOworICAgIEFTU0VSVF9FUShtQ29tcG9uZW50LT5zdGFydCgpLCBDMl9PSyk7CisgICAgc3RkOjp1bmlxdWVfcHRyPEMyV29yaz4gd29yazsKKyAgICAvLyBQcmVwYXJlIEMyV29yaworICAgIHsKKyAgICAgICAgVUxvY2sgbChtUXVldWVMb2NrKTsKKyAgICAgICAgaWYgKCFtV29ya1F1ZXVlLmVtcHR5KCkpIHsKKyAgICAgICAgICAgIHdvcmsuc3dhcChtV29ya1F1ZXVlLmZyb250KCkpOworICAgICAgICAgICAgbVdvcmtRdWV1ZS5wb3BfZnJvbnQoKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIEFTU0VSVF9UUlVFKGZhbHNlKSA8PCAibVdvcmtRdWV1ZSBFbXB0eSBhdCB0aGUgc3RhcnQgb2YgdGVzdCI7CisgICAgICAgIH0KKyAgICB9CisgICAgQVNTRVJUX05FKHdvcmssIG51bGxwdHIpOworCisgICAgd29yay0+aW5wdXQuZmxhZ3MgPSAoQzJGcmFtZURhdGE6OmZsYWdzX3QpQzJGcmFtZURhdGE6OkZMQUdfRU5EX09GX1NUUkVBTTsKKyAgICB3b3JrLT5pbnB1dC5vcmRpbmFsLnRpbWVzdGFtcCA9IDA7CisgICAgd29yay0+aW5wdXQub3JkaW5hbC5mcmFtZUluZGV4ID0gMDsKKyAgICB3b3JrLT5pbnB1dC5idWZmZXJzLmNsZWFyKCk7CisgICAgd29yay0+d29ya2xldHMuY2xlYXIoKTsKKyAgICB3b3JrLT53b3JrbGV0cy5lbXBsYWNlX2JhY2sobmV3IEMyV29ya2xldCk7CisKKyAgICBzdGQ6Omxpc3Q8c3RkOjp1bmlxdWVfcHRyPEMyV29yaz4+IGl0ZW1zOworICAgIGl0ZW1zLnB1c2hfYmFjayhzdGQ6Om1vdmUod29yaykpOworICAgIEFTU0VSVF9FUShtQ29tcG9uZW50LT5xdWV1ZSgmaXRlbXMpLCBDMl9PSyk7CisKKyAgICB7CisgICAgICAgIHR5cGVkZWYgc3RkOjp1bmlxdWVfbG9jazxzdGQ6Om11dGV4PiBVTG9jazsKKyAgICAgICAgVUxvY2sgbChtUXVldWVMb2NrKTsKKyAgICAgICAgaWYgKG1Xb3JrUXVldWUuc2l6ZSgpICE9IE1BWF9JTlBVVF9CVUZGRVJTKSB7CisgICAgICAgICAgICBtUXVldWVDb25kaXRpb24ud2FpdF9mb3IobCwgVElNRV9PVVQpOworICAgICAgICB9CisgICAgfQorICAgIEFTU0VSVF9FUShtRW9zLCB0cnVlKTsKKyAgICBBU1NFUlRfRVEobVdvcmtRdWV1ZS5zaXplKCksIChzaXplX3QpTUFYX0lOUFVUX0JVRkZFUlMpOworICAgIEFTU0VSVF9FUShtQ29tcG9uZW50LT5zdG9wKCksIEMyX09LKTsKK30KKworVEVTVF9GKENvZGVjMkF1ZGlvRGVjSGlkbFRlc3QsIEVtcHR5QnVmZmVyVGVzdCkgeworICAgIGRlc2NyaXB0aW9uKCJUZXN0cyBlbXB0eSBpbnB1dCBidWZmZXIiKTsKKyAgICBpZiAobURpc2FibGVUZXN0KSByZXR1cm47CisgICAgdHlwZWRlZiBzdGQ6OnVuaXF1ZV9sb2NrPHN0ZDo6bXV0ZXg+IFVMb2NrOworICAgIEFTU0VSVF9FUShtQ29tcG9uZW50LT5zdGFydCgpLCBDMl9PSyk7CisgICAgc3RkOjp1bmlxdWVfcHRyPEMyV29yaz4gd29yazsKKyAgICAvLyBQcmVwYXJlIEMyV29yaworICAgIHsKKyAgICAgICAgVUxvY2sgbChtUXVldWVMb2NrKTsKKyAgICAgICAgaWYgKCFtV29ya1F1ZXVlLmVtcHR5KCkpIHsKKyAgICAgICAgICAgIHdvcmsuc3dhcChtV29ya1F1ZXVlLmZyb250KCkpOworICAgICAgICAgICAgbVdvcmtRdWV1ZS5wb3BfZnJvbnQoKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIEFTU0VSVF9UUlVFKGZhbHNlKSA8PCAibVdvcmtRdWV1ZSBFbXB0eSBhdCB0aGUgc3RhcnQgb2YgdGVzdCI7CisgICAgICAgIH0KKyAgICB9CisgICAgQVNTRVJUX05FKHdvcmssIG51bGxwdHIpOworCisgICAgd29yay0+aW5wdXQuZmxhZ3MgPSAoQzJGcmFtZURhdGE6OmZsYWdzX3QpMDsKKyAgICB3b3JrLT5pbnB1dC5vcmRpbmFsLnRpbWVzdGFtcCA9IDA7CisgICAgd29yay0+aW5wdXQub3JkaW5hbC5mcmFtZUluZGV4ID0gMDsKKyAgICB3b3JrLT5pbnB1dC5idWZmZXJzLmNsZWFyKCk7CisgICAgd29yay0+d29ya2xldHMuY2xlYXIoKTsKKyAgICB3b3JrLT53b3JrbGV0cy5lbXBsYWNlX2JhY2sobmV3IEMyV29ya2xldCk7CisKKyAgICBzdGQ6Omxpc3Q8c3RkOjp1bmlxdWVfcHRyPEMyV29yaz4+IGl0ZW1zOworICAgIGl0ZW1zLnB1c2hfYmFjayhzdGQ6Om1vdmUod29yaykpOworICAgIEFTU0VSVF9FUShtQ29tcG9uZW50LT5xdWV1ZSgmaXRlbXMpLCBDMl9PSyk7CisKKyAgICB7CisgICAgICAgIHR5cGVkZWYgc3RkOjp1bmlxdWVfbG9jazxzdGQ6Om11dGV4PiBVTG9jazsKKyAgICAgICAgVUxvY2sgbChtUXVldWVMb2NrKTsKKyAgICAgICAgaWYgKG1Xb3JrUXVldWUuc2l6ZSgpICE9IE1BWF9JTlBVVF9CVUZGRVJTKSB7CisgICAgICAgICAgICBtUXVldWVDb25kaXRpb24ud2FpdF9mb3IobCwgVElNRV9PVVQpOworICAgICAgICB9CisgICAgfQorICAgIEFTU0VSVF9FUShtV29ya1F1ZXVlLnNpemUoKSwgKHNpemVfdClNQVhfSU5QVVRfQlVGRkVSUyk7CisgICAgQVNTRVJUX0VRKG1Db21wb25lbnQtPnN0b3AoKSwgQzJfT0spOworfQorCitURVNUX0YoQ29kZWMyQXVkaW9EZWNIaWRsVGVzdCwgRmx1c2hUZXN0KSB7CisgICAgZGVzY3JpcHRpb24oIlRlc3RzIEZsdXNoIGNhbGxzIik7CisgICAgaWYgKG1EaXNhYmxlVGVzdCkgcmV0dXJuOworICAgIHR5cGVkZWYgc3RkOjp1bmlxdWVfbG9jazxzdGQ6Om11dGV4PiBVTG9jazsKKyAgICBBU1NFUlRfRVEobUNvbXBvbmVudC0+c3RhcnQoKSwgQzJfT0spOworICAgIGNoYXIgbVVSTFs1MTJdLCBpbmZvWzUxMl07CisgICAgc3RkOjppZnN0cmVhbSBlbGVTdHJlYW0sIGVsZUluZm87CisKKyAgICBzdHJjcHkobVVSTCwgZ0Vudi0+Z2V0UmVzKCkuY19zdHIoKSk7CisgICAgc3RyY3B5KGluZm8sIGdFbnYtPmdldFJlcygpLmNfc3RyKCkpOworICAgIEdldFVSTEZvckNvbXBvbmVudChtQ29tcE5hbWUsIG1VUkwsIGluZm8pOworCisgICAgZWxlSW5mby5vcGVuKGluZm8pOworICAgIEFTU0VSVF9FUShlbGVJbmZvLmlzX29wZW4oKSwgdHJ1ZSk7CisgICAgYW5kcm9pZDo6VmVjdG9yPEZyYW1lSW5mbz4gSW5mbzsKKyAgICBpbnQgYnl0ZXNDb3VudCA9IDA7CisgICAgdWludDMyX3QgZmxhZ3MgPSAwOworICAgIHVpbnQzMl90IHRpbWVzdGFtcCA9IDA7CisgICAgbUZsdXNoZWRJbmRpY2VzLmNsZWFyKCk7CisgICAgd2hpbGUgKDEpIHsKKyAgICAgICAgaWYgKCEoZWxlSW5mbyA+PiBieXRlc0NvdW50KSkgYnJlYWs7CisgICAgICAgIGVsZUluZm8gPj4gZmxhZ3M7CisgICAgICAgIGVsZUluZm8gPj4gdGltZXN0YW1wOworICAgICAgICBJbmZvLnB1c2hfYmFjayh7Ynl0ZXNDb3VudCwgZmxhZ3MsIHRpbWVzdGFtcH0pOworICAgIH0KKyAgICBlbGVJbmZvLmNsb3NlKCk7CisgICAgaW50MzJfdCBiaXRTdHJlYW1JbmZvWzJdID0gezB9OworICAgIGlmIChtQ29tcE5hbWUgPT0gcmF3KSB7CisgICAgICAgIGJpdFN0cmVhbUluZm9bMF0gPSA4MDAwOworICAgICAgICBiaXRTdHJlYW1JbmZvWzFdID0gMTsKKyAgICB9IGVsc2UgeworICAgICAgICBBU1NFUlRfTk9fRkFUQUxfRkFJTFVSRSgKKyAgICAgICAgICAgIGdldElucHV0Q2hhbm5lbEluZm8obUNvbXBvbmVudCwgbUNvbXBOYW1lLCBiaXRTdHJlYW1JbmZvKSk7CisgICAgfQorICAgIHNldHVwQ29uZmlnUGFyYW0obUNvbXBvbmVudCwgYml0U3RyZWFtSW5mbyk7CisgICAgQUxPR1YoIm1VUkwgOiAlcyIsIG1VUkwpOworICAgIGVsZVN0cmVhbS5vcGVuKG1VUkwsIHN0ZDo6aWZzdHJlYW06OmJpbmFyeSk7CisgICAgQVNTRVJUX0VRKGVsZVN0cmVhbS5pc19vcGVuKCksIHRydWUpOworICAgIC8vIERlY29kZSAxMjggZnJhbWVzIGFuZCBmbHVzaC4gaGVyZSAxMjggaXMgY2hvc2VuIHRvIGVuc3VyZSB0aGVyZSBpcyBhIGtleQorICAgIC8vIGZyYW1lIGFmdGVyIHRoaXMgc28gdGhhdCB0aGUgYmVsb3cgc2VjdGlvbiBjYW4gYmUgY292ZXJlZCBmb3IgYWxsCisgICAgLy8gY29tcG9uZW50cworICAgIHVpbnQzMl90IG51bUZyYW1lc0ZsdXNoZWQgPSAxMjg7CisgICAgQVNTRVJUX05PX0ZBVEFMX0ZBSUxVUkUoZGVjb2RlTkZyYW1lcygKKyAgICAgICAgbUNvbXBvbmVudCwgbVF1ZXVlTG9jaywgbVF1ZXVlQ29uZGl0aW9uLCBtV29ya1F1ZXVlLCBtRmx1c2hlZEluZGljZXMsCisgICAgICAgIG1MaW5lYXJQb29sLCBlbGVTdHJlYW0sICZJbmZvLCAwLCBudW1GcmFtZXNGbHVzaGVkLCBmYWxzZSkpOworICAgIC8vIGZsdXNoCisgICAgc3RkOjpsaXN0PHN0ZDo6dW5pcXVlX3B0cjxDMldvcms+PiBmbHVzaGVkV29yazsKKyAgICBjMl9zdGF0dXNfdCBlcnIgPQorICAgICAgICBtQ29tcG9uZW50LT5mbHVzaChDMkNvbXBvbmVudDo6RkxVU0hfQ09NUE9ORU5ULCAmZmx1c2hlZFdvcmspOworICAgIEFTU0VSVF9FUShlcnIsIEMyX09LKTsKKyAgICBBU1NFUlRfTk9fRkFUQUxfRkFJTFVSRSgKKyAgICAgICAgd2FpdE9uSW5wdXRDb25zdW1wdGlvbihtUXVldWVMb2NrLCBtUXVldWVDb25kaXRpb24sIG1Xb3JrUXVldWUsCisgICAgICAgICAgICAoc2l6ZV90KU1BWF9JTlBVVF9CVUZGRVJTIC0gZmx1c2hlZFdvcmsuc2l6ZSgpKSk7CisgICAgdWludDY0X3QgZnJhbWVJbmRleDsKKyAgICB7CisgICAgICAgIC8vVXBkYXRlIG1GbHVzaGVkSW5kaWNlcyBiYXNlZCBvbiB0aGUgaW5kZXggcmVjZWl2ZWQgZnJvbSBmbHVzaCgpCisgICAgICAgIFVMb2NrIGwobVF1ZXVlTG9jayk7CisgICAgICAgIGZvciAoc3RkOjp1bmlxdWVfcHRyPEMyV29yaz4mIHdvcmsgOiBmbHVzaGVkV29yaykgeworICAgICAgICAgICAgQVNTRVJUX05FKHdvcmssIG51bGxwdHIpOworICAgICAgICAgICAgZnJhbWVJbmRleCA9IHdvcmstPmlucHV0Lm9yZGluYWwuZnJhbWVJbmRleC5wZWVrdSgpOworICAgICAgICAgICAgc3RkOjpsaXN0PHVpbnQ2NF90Pjo6aXRlcmF0b3IgZnJhbWVJbmRleEl0ID0KKyAgICAgICAgICAgICAgICBzdGQ6OmZpbmQobUZsdXNoZWRJbmRpY2VzLmJlZ2luKCksIG1GbHVzaGVkSW5kaWNlcy5lbmQoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgZnJhbWVJbmRleCk7CisgICAgICAgICAgICBpZiAoIW1GbHVzaGVkSW5kaWNlcy5lbXB0eSgpICYmCisgICAgICAgICAgICAgICAgKGZyYW1lSW5kZXhJdCAhPSBtRmx1c2hlZEluZGljZXMuZW5kKCkpKSB7CisgICAgICAgICAgICAgICAgbUZsdXNoZWRJbmRpY2VzLmVyYXNlKGZyYW1lSW5kZXhJdCk7CisgICAgICAgICAgICAgICAgd29yay0+aW5wdXQuYnVmZmVycy5jbGVhcigpOworICAgICAgICAgICAgICAgIHdvcmstPndvcmtsZXRzLmNsZWFyKCk7CisgICAgICAgICAgICAgICAgbVdvcmtRdWV1ZS5wdXNoX2JhY2soc3RkOjptb3ZlKHdvcmspKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKyAgICAvLyBTZWVrIHRvIG5leHQga2V5IGZyYW1lIGFuZCBzdGFydCBkZWNvZGluZyB0aWxsIHRoZSBlbmQKKyAgICBtRmx1c2hlZEluZGljZXMuY2xlYXIoKTsKKyAgICBpbnQgaW5kZXggPSBudW1GcmFtZXNGbHVzaGVkOworICAgIGJvb2wga2V5RnJhbWUgPSBmYWxzZTsKKyAgICBmbGFncyA9IDA7CisgICAgd2hpbGUgKGluZGV4IDwgKGludClJbmZvLnNpemUoKSkgeworICAgICAgICBpZiAoSW5mb1tpbmRleF0uZmxhZ3MpIGZsYWdzID0gMXUgPDwgKEluZm9baW5kZXhdLmZsYWdzIC0gMSk7CisgICAgICAgIGlmICgoZmxhZ3MgJiBTWU5DX0ZSQU1FKSA9PSBTWU5DX0ZSQU1FKSB7CisgICAgICAgICAgICBrZXlGcmFtZSA9IHRydWU7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBmbGFncyA9IDA7CisgICAgICAgIGVsZVN0cmVhbS5pZ25vcmUoSW5mb1tpbmRleF0uYnl0ZXNDb3VudCk7CisgICAgICAgIGluZGV4Kys7CisgICAgfQorICAgIGlmIChrZXlGcmFtZSkgeworICAgICAgICBBU1NFUlRfTk9fRkFUQUxfRkFJTFVSRSgKKyAgICAgICAgICAgIGRlY29kZU5GcmFtZXMobUNvbXBvbmVudCwgbVF1ZXVlTG9jaywgbVF1ZXVlQ29uZGl0aW9uLCBtV29ya1F1ZXVlLAorICAgICAgICAgICAgICAgICAgICAgICAgICBtRmx1c2hlZEluZGljZXMsIG1MaW5lYXJQb29sLCBlbGVTdHJlYW0sICZJbmZvLCBpbmRleCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgKGludClJbmZvLnNpemUoKSAtIGluZGV4KSk7CisgICAgfQorICAgIGVsZVN0cmVhbS5jbG9zZSgpOworICAgIGVyciA9CisgICAgICAgIG1Db21wb25lbnQtPmZsdXNoKEMyQ29tcG9uZW50OjpGTFVTSF9DT01QT05FTlQsICZmbHVzaGVkV29yayk7CisgICAgQVNTRVJUX0VRKGVyciwgQzJfT0spOworICAgIEFTU0VSVF9OT19GQVRBTF9GQUlMVVJFKAorICAgICAgICB3YWl0T25JbnB1dENvbnN1bXB0aW9uKG1RdWV1ZUxvY2ssIG1RdWV1ZUNvbmRpdGlvbiwgbVdvcmtRdWV1ZSwKKyAgICAgICAgICAgIChzaXplX3QpTUFYX0lOUFVUX0JVRkZFUlMgLSBmbHVzaGVkV29yay5zaXplKCkpKTsKKyAgICB7CisgICAgICAgIC8vVXBkYXRlIG1GbHVzaGVkSW5kaWNlcyBiYXNlZCBvbiB0aGUgaW5kZXggcmVjZWl2ZWQgZnJvbSBmbHVzaCgpCisgICAgICAgIFVMb2NrIGwobVF1ZXVlTG9jayk7CisgICAgICAgIGZvciAoc3RkOjp1bmlxdWVfcHRyPEMyV29yaz4mIHdvcmsgOiBmbHVzaGVkV29yaykgeworICAgICAgICAgICAgQVNTRVJUX05FKHdvcmssIG51bGxwdHIpOworICAgICAgICAgICAgZnJhbWVJbmRleCA9IHdvcmstPmlucHV0Lm9yZGluYWwuZnJhbWVJbmRleC5wZWVrdSgpOworICAgICAgICAgICAgc3RkOjpsaXN0PHVpbnQ2NF90Pjo6aXRlcmF0b3IgZnJhbWVJbmRleEl0ID0KKyAgICAgICAgICAgICAgICBzdGQ6OmZpbmQobUZsdXNoZWRJbmRpY2VzLmJlZ2luKCksIG1GbHVzaGVkSW5kaWNlcy5lbmQoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgZnJhbWVJbmRleCk7CisgICAgICAgICAgICBpZiAoIW1GbHVzaGVkSW5kaWNlcy5lbXB0eSgpICYmCisgICAgICAgICAgICAgICAgKGZyYW1lSW5kZXhJdCAhPSBtRmx1c2hlZEluZGljZXMuZW5kKCkpKSB7CisgICAgICAgICAgICAgICAgbUZsdXNoZWRJbmRpY2VzLmVyYXNlKGZyYW1lSW5kZXhJdCk7CisgICAgICAgICAgICAgICAgd29yay0+aW5wdXQuYnVmZmVycy5jbGVhcigpOworICAgICAgICAgICAgICAgIHdvcmstPndvcmtsZXRzLmNsZWFyKCk7CisgICAgICAgICAgICAgICAgbVdvcmtRdWV1ZS5wdXNoX2JhY2soc3RkOjptb3ZlKHdvcmspKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKyAgICBBU1NFUlRfRVEobUZsdXNoZWRJbmRpY2VzLmVtcHR5KCksIHRydWUpOworICAgIEFTU0VSVF9FUShtQ29tcG9uZW50LT5zdG9wKCksIEMyX09LKTsKK30KKworfSAgLy8gYW5vbnltb3VzIG5hbWVzcGFjZQorCitpbnQgbWFpbihpbnQgYXJnYywgY2hhcioqIGFyZ3YpIHsKKyAgICBnRW52ID0gbmV3IENvbXBvbmVudFRlc3RFbnZpcm9ubWVudCgpOworICAgIDo6dGVzdGluZzo6QWRkR2xvYmFsVGVzdEVudmlyb25tZW50KGdFbnYpOworICAgIDo6dGVzdGluZzo6SW5pdEdvb2dsZVRlc3QoJmFyZ2MsIGFyZ3YpOworICAgIGdFbnYtPmluaXQoJmFyZ2MsIGFyZ3YpOworICAgIGludCBzdGF0dXMgPSBnRW52LT5pbml0RnJvbU9wdGlvbnMoYXJnYywgYXJndik7CisgICAgaWYgKHN0YXR1cyA9PSAwKSB7CisgICAgICAgIGludCBzdGF0dXMgPSBSVU5fQUxMX1RFU1RTKCk7CisgICAgICAgIExPRyhJTkZPKSA8PCAiQzIgVGVzdCByZXN1bHQgPSAiIDw8IHN0YXR1czsKKyAgICB9CisgICAgcmV0dXJuIHN0YXR1czsKK30KZGlmZiAtLWdpdCBhL21lZGlhL2NvZGVjMi9oaWRsLzEuMC92dHMvYXVkaW8vVnRzSGlkbEMyVjFfMFRhcmdldEF1ZGlvRW5jVGVzdC5jcHAgYi9tZWRpYS9jb2RlYzIvaGlkbC8xLjAvdnRzL2F1ZGlvL1Z0c0hpZGxDMlYxXzBUYXJnZXRBdWRpb0VuY1Rlc3QuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRmODZhYWQKLS0tIC9kZXYvbnVsbAorKysgYi9tZWRpYS9jb2RlYzIvaGlkbC8xLjAvdnRzL2F1ZGlvL1Z0c0hpZGxDMlYxXzBUYXJnZXRBdWRpb0VuY1Rlc3QuY3BwCkBAIC0wLDAgKzEsNjc1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE4IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KKworLy8gI2RlZmluZSBMT0dfTkRFQlVHIDAKKyNkZWZpbmUgTE9HX1RBRyAiY29kZWMyX2hpZGxfaGFsX2F1ZGlvX2VuY190ZXN0IgorCisjaW5jbHVkZSA8YW5kcm9pZC1iYXNlL2xvZ2dpbmcuaD4KKyNpbmNsdWRlIDxndGVzdC9ndGVzdC5oPgorI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8ZnN0cmVhbT4KKyNpbmNsdWRlIDxhbGdvcml0aG0+CisKKyNpbmNsdWRlIDxjb2RlYzIvaGlkbC9jbGllbnQuaD4KKyNpbmNsdWRlIDxDMkFsbG9jYXRvcklvbi5oPgorI2luY2x1ZGUgPEMyQ29uZmlnLmg+CisjaW5jbHVkZSA8QzJEZWJ1Zy5oPgorI2luY2x1ZGUgPEMyQnVmZmVyLmg+CisjaW5jbHVkZSA8QzJCdWZmZXJQcml2Lmg+CisKK3VzaW5nIGFuZHJvaWQ6OkMyQWxsb2NhdG9ySW9uOworCisjaW5jbHVkZSA8VnRzSGFsSGlkbFRhcmdldFRlc3RCYXNlLmg+CisjaW5jbHVkZSAibWVkaWFfYzJfYXVkaW9faGlkbF90ZXN0X2NvbW1vbi5oIgorI2luY2x1ZGUgIm1lZGlhX2MyX2hpZGxfdGVzdF9jb21tb24uaCIKKworY2xhc3MgTGluZWFyQnVmZmVyIDogcHVibGljIEMyQnVmZmVyIHsKKyAgIHB1YmxpYzoKKyAgICBleHBsaWNpdCBMaW5lYXJCdWZmZXIoY29uc3Qgc3RkOjpzaGFyZWRfcHRyPEMyTGluZWFyQmxvY2s+JiBibG9jaykKKyAgICAgICAgOiBDMkJ1ZmZlcigKKyAgICAgICAgICAgICAge2Jsb2NrLT5zaGFyZShibG9jay0+b2Zmc2V0KCksIGJsb2NrLT5zaXplKCksIDo6QzJGZW5jZSgpKX0pIHt9Cit9OworCitzdGF0aWMgQ29tcG9uZW50VGVzdEVudmlyb25tZW50KiBnRW52ID0gbnVsbHB0cjsKKworbmFtZXNwYWNlIHsKKworY2xhc3MgQ29kZWMyQXVkaW9FbmNIaWRsVGVzdCA6IHB1YmxpYyA6OnRlc3Rpbmc6OlZ0c0hhbEhpZGxUYXJnZXRUZXN0QmFzZSB7CisgICBwcml2YXRlOgorICAgIHR5cGVkZWYgOjp0ZXN0aW5nOjpWdHNIYWxIaWRsVGFyZ2V0VGVzdEJhc2UgU3VwZXI7CisKKyAgIHB1YmxpYzoKKyAgICA6OnN0ZDo6c3RyaW5nIGdldFRlc3RDYXNlSW5mbygpIGNvbnN0IG92ZXJyaWRlIHsKKyAgICAgICAgcmV0dXJuIDo6c3RkOjpzdHJpbmcoKSArCisgICAgICAgICAgICAgICAgIkNvbXBvbmVudDogIiArIGdFbnYtPmdldENvbXBvbmVudCgpLmNfc3RyKCkgKyAiIHwgIiArCisgICAgICAgICAgICAgICAgIkluc3RhbmNlOiAiICsgZ0Vudi0+Z2V0SW5zdGFuY2UoKS5jX3N0cigpICsgIiB8ICIgKworICAgICAgICAgICAgICAgICJSZXM6ICIgKyBnRW52LT5nZXRSZXMoKS5jX3N0cigpOworICAgIH0KKworICAgIC8vIGdvb2dsZS5jb2RlYzIgQXVkaW8gdGVzdCBzZXR1cAorICAgIHZpcnR1YWwgdm9pZCBTZXRVcCgpIG92ZXJyaWRlIHsKKyAgICAgICAgU3VwZXI6OlNldFVwKCk7CisgICAgICAgIG1EaXNhYmxlVGVzdCA9IGZhbHNlOworICAgICAgICBBTE9HVigiQ29kZWMyQXVkaW9FbmNIaWRsVGVzdCBTZXRVcCIpOworICAgICAgICBtQ2xpZW50ID0gYW5kcm9pZDo6Q29kZWMyQ2xpZW50OjpDcmVhdGVGcm9tU2VydmljZSgKKyAgICAgICAgICAgIGdFbnYtPmdldEluc3RhbmNlKCkuY19zdHIoKSk7CisgICAgICAgIEFTU0VSVF9ORShtQ2xpZW50LCBudWxscHRyKTsKKyAgICAgICAgbUxpc3RlbmVyLnJlc2V0KG5ldyBDb2RlY0xpc3RlbmVyKAorICAgICAgICAgICAgW3RoaXNdKHN0ZDo6bGlzdDxzdGQ6OnVuaXF1ZV9wdHI8QzJXb3JrPj4mIHdvcmtJdGVtcykgeworICAgICAgICAgICAgICAgIGhhbmRsZVdvcmtEb25lKHdvcmtJdGVtcyk7CisgICAgICAgICAgICB9KSk7CisgICAgICAgIEFTU0VSVF9ORShtTGlzdGVuZXIsIG51bGxwdHIpOworICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IE1BWF9JTlBVVF9CVUZGRVJTOyArK2kpIHsKKyAgICAgICAgICAgIG1Xb3JrUXVldWUuZW1wbGFjZV9iYWNrKG5ldyBDMldvcmspOworICAgICAgICB9CisgICAgICAgIG1DbGllbnQtPmNyZWF0ZUNvbXBvbmVudChnRW52LT5nZXRDb21wb25lbnQoKS5jX3N0cigpLCBtTGlzdGVuZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmbUNvbXBvbmVudCk7CisgICAgICAgIEFTU0VSVF9ORShtQ29tcG9uZW50LCBudWxscHRyKTsKKworICAgICAgICBzdGQ6OnNoYXJlZF9wdHI8QzJBbGxvY2F0b3JTdG9yZT4gc3RvcmUgPQorICAgICAgICAgICAgYW5kcm9pZDo6R2V0Q29kZWMyUGxhdGZvcm1BbGxvY2F0b3JTdG9yZSgpOworICAgICAgICBDSEVDS19FUShzdG9yZS0+ZmV0Y2hBbGxvY2F0b3IoQzJBbGxvY2F0b3JTdG9yZTo6REVGQVVMVF9MSU5FQVIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmbUxpbmVhckFsbG9jYXRvciksCisgICAgICAgICAgICAgICAgIEMyX09LKTsKKyAgICAgICAgbUxpbmVhclBvb2wgPSBzdGQ6Om1ha2Vfc2hhcmVkPEMyUG9vbGVkQmxvY2tQb29sPihtTGluZWFyQWxsb2NhdG9yLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1CbG9ja1Bvb2xJZCsrKTsKKyAgICAgICAgQVNTRVJUX05FKG1MaW5lYXJQb29sLCBudWxscHRyKTsKKworICAgICAgICBtQ29tcE5hbWUgPSB1bmtub3duX2NvbXA7CisgICAgICAgIHN0cnVjdCBTdHJpbmdUb05hbWUgeworICAgICAgICAgICAgY29uc3QgY2hhciogTmFtZTsKKyAgICAgICAgICAgIHN0YW5kYXJkQ29tcCBDb21wTmFtZTsKKyAgICAgICAgfTsKKyAgICAgICAgY29uc3QgU3RyaW5nVG9OYW1lIGtTdHJpbmdUb05hbWVbXSA9IHsKKyAgICAgICAgICAgIHsiYWFjIiwgYWFjfSwKKyAgICAgICAgICAgIHsiZmxhYyIsIGZsYWN9LAorICAgICAgICAgICAgeyJhbXJuYiIsIGFtcm5ifSwKKyAgICAgICAgICAgIHsiYW1yd2IiLCBhbXJ3Yn0sCisgICAgICAgIH07CisgICAgICAgIGNvbnN0IHNpemVfdCBrTnVtU3RyaW5nVG9OYW1lID0KKyAgICAgICAgICAgIHNpemVvZihrU3RyaW5nVG9OYW1lKSAvIHNpemVvZihrU3RyaW5nVG9OYW1lWzBdKTsKKworICAgICAgICBzdGQ6OnN0cmluZyBzdWJzdHJpbmc7CisgICAgICAgIHN0ZDo6c3RyaW5nIGNvbXA7CisgICAgICAgIHN1YnN0cmluZyA9IHN0ZDo6c3RyaW5nKGdFbnYtPmdldENvbXBvbmVudCgpKTsKKyAgICAgICAgLyogVE9ETzogYmV0dGVyIGFwcHJvYWNoIHRvIGZpbmQgdGhlIGNvbXBvbmVudCAqLworICAgICAgICAvKiAiYzIuYW5kcm9pZC4iID0+IDExdGggcG9zaXRpb24gKi8KKyAgICAgICAgc2l6ZV90IHBvcyA9IDExOworICAgICAgICBzaXplX3QgbGVuID0gc3Vic3RyaW5nLmZpbmQoIi5lbmNvZGVyIiwgcG9zKTsKKyAgICAgICAgY29tcCA9IHN1YnN0cmluZy5zdWJzdHIocG9zLCBsZW4gLSBwb3MpOworCisgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwga051bVN0cmluZ1RvTmFtZTsgKytpKSB7CisgICAgICAgICAgICBpZiAoIXN0cmNhc2VjbXAoY29tcC5jX3N0cigpLCBrU3RyaW5nVG9OYW1lW2ldLk5hbWUpKSB7CisgICAgICAgICAgICAgICAgbUNvbXBOYW1lID0ga1N0cmluZ1RvTmFtZVtpXS5Db21wTmFtZTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBtRW9zID0gZmFsc2U7CisgICAgICAgIG1Dc2QgPSBmYWxzZTsKKyAgICAgICAgbUZyYW1lc1JlY2VpdmVkID0gMDsKKyAgICAgICAgaWYgKG1Db21wTmFtZSA9PSB1bmtub3duX2NvbXApIG1EaXNhYmxlVGVzdCA9IHRydWU7CisgICAgICAgIGlmIChtRGlzYWJsZVRlc3QpIHN0ZDo6Y291dCA8PCAiWyAgIFdBUk4gICBdIFRlc3QgRGlzYWJsZWQgXG4iOworICAgIH0KKworICAgIHZpcnR1YWwgdm9pZCBUZWFyRG93bigpIG92ZXJyaWRlIHsKKyAgICAgICAgaWYgKG1Db21wb25lbnQgIT0gbnVsbHB0cikgeworICAgICAgICAgICAgaWYgKDo6dGVzdGluZzo6VGVzdDo6SGFzRmF0YWxGYWlsdXJlKCkpIHJldHVybjsKKyAgICAgICAgICAgIG1Db21wb25lbnQtPnJlbGVhc2UoKTsKKyAgICAgICAgICAgIG1Db21wb25lbnQgPSBudWxscHRyOworICAgICAgICB9CisgICAgICAgIFN1cGVyOjpUZWFyRG93bigpOworICAgIH0KKyAgICAvLyBjYWxsYmFjayBmdW5jdGlvbiB0byBwcm9jZXNzIG9uV29ya0RvbmUgcmVjZWl2ZWQgYnkgTGlzdGVuZXIKKyAgICB2b2lkIGhhbmRsZVdvcmtEb25lKHN0ZDo6bGlzdDxzdGQ6OnVuaXF1ZV9wdHI8QzJXb3JrPj4mIHdvcmtJdGVtcykgeworICAgICAgICBmb3IgKHN0ZDo6dW5pcXVlX3B0cjxDMldvcms+JiB3b3JrIDogd29ya0l0ZW1zKSB7CisgICAgICAgICAgICAvLyBoYW5kbGUgY29uZmlndXJhdGlvbiBjaGFuZ2VzIGluIHdvcmsgZG9uZQorICAgICAgICAgICAgaWYgKCF3b3JrLT53b3JrbGV0cy5lbXB0eSgpICYmCisgICAgICAgICAgICAgICAgKHdvcmstPndvcmtsZXRzLmZyb250KCktPm91dHB1dC5jb25maWdVcGRhdGUuc2l6ZSgpICE9IDApKSB7CisgICAgICAgICAgICAgICAgQUxPR1YoIkNvbmZpZyBVcGRhdGUiKTsKKyAgICAgICAgICAgICAgICBzdGQ6OnZlY3RvcjxzdGQ6OnVuaXF1ZV9wdHI8QzJQYXJhbT4+IHVwZGF0ZXMgPQorICAgICAgICAgICAgICAgICAgICBzdGQ6Om1vdmUod29yay0+d29ya2xldHMuZnJvbnQoKS0+b3V0cHV0LmNvbmZpZ1VwZGF0ZSk7CisgICAgICAgICAgICAgICAgc3RkOjp2ZWN0b3I8QzJQYXJhbSo+IGNvbmZpZ1BhcmFtOworICAgICAgICAgICAgICAgIHN0ZDo6dmVjdG9yPHN0ZDo6dW5pcXVlX3B0cjxDMlNldHRpbmdSZXN1bHQ+PiBmYWlsdXJlczsKKyAgICAgICAgICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHVwZGF0ZXMuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgICAgICAgICAgICAgQzJQYXJhbSogcGFyYW0gPSB1cGRhdGVzW2ldLmdldCgpOworICAgICAgICAgICAgICAgICAgICBpZiAocGFyYW0tPmluZGV4KCkgPT0gQzJTdHJlYW1Dc2RJbmZvOjpvdXRwdXQ6OlBBUkFNX1RZUEUpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIG1Dc2QgPSB0cnVlOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgbUZyYW1lc1JlY2VpdmVkKys7CisgICAgICAgICAgICBtRW9zID0gKHdvcmstPndvcmtsZXRzLmZyb250KCktPm91dHB1dC5mbGFncyAmCisgICAgICAgICAgICAgICAgICAgIEMyRnJhbWVEYXRhOjpGTEFHX0VORF9PRl9TVFJFQU0pICE9IDA7CisgICAgICAgICAgICBhdXRvIGZyYW1lSW5kZXhJdCA9CisgICAgICAgICAgICAgICAgc3RkOjpmaW5kKG1GbHVzaGVkSW5kaWNlcy5iZWdpbigpLCBtRmx1c2hlZEluZGljZXMuZW5kKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgIHdvcmstPmlucHV0Lm9yZGluYWwuZnJhbWVJbmRleC5wZWVrdSgpKTsKKyAgICAgICAgICAgIEFMT0dWKCJXb3JrRG9uZTogZnJhbWVJRCByZWNlaXZlZCAlZCIsCisgICAgICAgICAgICAgICAgKGludCl3b3JrLT53b3JrbGV0cy5mcm9udCgpLT5vdXRwdXQub3JkaW5hbC5mcmFtZUluZGV4LnBlZWt1KCkpOworICAgICAgICAgICAgd29yay0+aW5wdXQuYnVmZmVycy5jbGVhcigpOworICAgICAgICAgICAgd29yay0+d29ya2xldHMuY2xlYXIoKTsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICB0eXBlZGVmIHN0ZDo6dW5pcXVlX2xvY2s8c3RkOjptdXRleD4gVUxvY2s7CisgICAgICAgICAgICAgICAgVUxvY2sgbChtUXVldWVMb2NrKTsKKyAgICAgICAgICAgICAgICBtV29ya1F1ZXVlLnB1c2hfYmFjayhzdGQ6Om1vdmUod29yaykpOworICAgICAgICAgICAgICAgIGlmICghbUZsdXNoZWRJbmRpY2VzLmVtcHR5KCkpIHsKKyAgICAgICAgICAgICAgICAgICAgbUZsdXNoZWRJbmRpY2VzLmVyYXNlKGZyYW1lSW5kZXhJdCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIG1RdWV1ZUNvbmRpdGlvbi5ub3RpZnlfYWxsKCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisgICAgZW51bSBzdGFuZGFyZENvbXAgeworICAgICAgICBhYWMsCisgICAgICAgIGZsYWMsCisgICAgICAgIGFtcm5iLAorICAgICAgICBhbXJ3YiwKKyAgICAgICAgdW5rbm93bl9jb21wLAorICAgIH07CisKKyAgICBib29sIG1Fb3M7CisgICAgYm9vbCBtQ3NkOworICAgIGJvb2wgbURpc2FibGVUZXN0OworICAgIHN0YW5kYXJkQ29tcCBtQ29tcE5hbWU7CisgICAgdWludDMyX3QgbUZyYW1lc1JlY2VpdmVkOworICAgIHN0ZDo6bGlzdDx1aW50NjRfdD4gbUZsdXNoZWRJbmRpY2VzOworCisgICAgQzJCbG9ja1Bvb2w6OmxvY2FsX2lkX3QgbUJsb2NrUG9vbElkOworICAgIHN0ZDo6c2hhcmVkX3B0cjxDMkJsb2NrUG9vbD4gbUxpbmVhclBvb2w7CisgICAgc3RkOjpzaGFyZWRfcHRyPEMyQWxsb2NhdG9yPiBtTGluZWFyQWxsb2NhdG9yOworCisgICAgc3RkOjptdXRleCBtUXVldWVMb2NrOworICAgIHN0ZDo6Y29uZGl0aW9uX3ZhcmlhYmxlIG1RdWV1ZUNvbmRpdGlvbjsKKyAgICBzdGQ6Omxpc3Q8c3RkOjp1bmlxdWVfcHRyPEMyV29yaz4+IG1Xb3JrUXVldWU7CisKKyAgICBzdGQ6OnNoYXJlZF9wdHI8YW5kcm9pZDo6Q29kZWMyQ2xpZW50PiBtQ2xpZW50OworICAgIHN0ZDo6c2hhcmVkX3B0cjxhbmRyb2lkOjpDb2RlYzJDbGllbnQ6Okxpc3RlbmVyPiBtTGlzdGVuZXI7CisgICAgc3RkOjpzaGFyZWRfcHRyPGFuZHJvaWQ6OkNvZGVjMkNsaWVudDo6Q29tcG9uZW50PiBtQ29tcG9uZW50OworCisgICBwcm90ZWN0ZWQ6CisgICAgc3RhdGljIHZvaWQgZGVzY3JpcHRpb24oY29uc3Qgc3RkOjpzdHJpbmcmIGRlc2NyaXB0aW9uKSB7CisgICAgICAgIFJlY29yZFByb3BlcnR5KCJkZXNjcmlwdGlvbiIsIGRlc2NyaXB0aW9uKTsKKyAgICB9Cit9OworCit2b2lkIHZhbGlkYXRlQ29tcG9uZW50KAorICAgIGNvbnN0IHN0ZDo6c2hhcmVkX3B0cjxhbmRyb2lkOjpDb2RlYzJDbGllbnQ6OkNvbXBvbmVudD4mIGNvbXBvbmVudCwKKyAgICBDb2RlYzJBdWRpb0VuY0hpZGxUZXN0OjpzdGFuZGFyZENvbXAgY29tcE5hbWUsIGJvb2wmIGRpc2FibGVUZXN0KSB7CisgICAgLy8gVmFsaWRhdGUgaXRzIGEgQzIgQ29tcG9uZW50CisgICAgaWYgKGNvbXBvbmVudC0+Z2V0TmFtZSgpLmZpbmQoImMyIikgPT0gc3RkOjpzdHJpbmc6Om5wb3MpIHsKKyAgICAgICAgQUxPR0UoIk5vdCBhIGMyIGNvbXBvbmVudCIpOworICAgICAgICBkaXNhYmxlVGVzdCA9IHRydWU7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICAvLyBWYWxpZGF0ZSBpdHMgbm90IGFuIGVuY29kZXIgYW5kIHRoZSBjb21wb25lbnQgdG8gYmUgdGVzdGVkIGlzIGF1ZGlvCisgICAgaWYgKGNvbXBvbmVudC0+Z2V0TmFtZSgpLmZpbmQoImRlY29kZXIiKSAhPSBzdGQ6OnN0cmluZzo6bnBvcykgeworICAgICAgICBBTE9HRSgiRXhwZWN0ZWQgRW5jb2RlciwgZ2l2ZW4gRGVjb2RlciIpOworICAgICAgICBkaXNhYmxlVGVzdCA9IHRydWU7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgc3RkOjp2ZWN0b3I8c3RkOjp1bmlxdWVfcHRyPEMyUGFyYW0+PiBxdWVyaWVkOworICAgIGMyX3N0YXR1c190IGMyZXJyID0KKyAgICAgICAgY29tcG9uZW50LT5xdWVyeSh7fSwge0MyUG9ydE1lZGlhVHlwZVNldHRpbmc6OmlucHV0OjpQQVJBTV9UWVBFfSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBDMl9ET05UX0JMT0NLLCAmcXVlcmllZCk7CisgICAgaWYgKGMyZXJyICE9IEMyX09LICYmIHF1ZXJpZWQuc2l6ZSgpID09IDApIHsKKyAgICAgICAgQUxPR0UoIlF1ZXJ5IG1lZGlhIHR5cGUgZmFpbGVkID0+ICVkIiwgYzJlcnIpOworICAgIH0gZWxzZSB7CisgICAgICAgIHN0ZDo6c3RyaW5nIGlucHV0RG9tYWluID0KKyAgICAgICAgICAgICgoQzJTdHJlYW1NZWRpYVR5cGVTZXR0aW5nOjppbnB1dCopcXVlcmllZFswXS5nZXQoKSktPm0udmFsdWU7CisgICAgICAgIGlmIChpbnB1dERvbWFpbi5maW5kKCJhdWRpby8iKSA9PSBzdGQ6OnN0cmluZzo6bnBvcykgeworICAgICAgICAgICAgQUxPR0UoIkV4cGVjdGVkIEF1ZGlvIENvbXBvbmVudCIpOworICAgICAgICAgICAgZGlzYWJsZVRlc3QgPSB0cnVlOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgfQorCisgICAgLy8gVmFsaWRhdGVzIGNvbXBvbmVudCBuYW1lCisgICAgaWYgKGNvbXBOYW1lID09IENvZGVjMkF1ZGlvRW5jSGlkbFRlc3Q6OnVua25vd25fY29tcCkgeworICAgICAgICBBTE9HRSgiQ29tcG9uZW50IEluVmFsaWQiKTsKKyAgICAgICAgZGlzYWJsZVRlc3QgPSB0cnVlOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIEFMT0dWKCJDb21wb25lbnQgVmFsaWQiKTsKK30KKworLy8gU2V0IERlZmF1bHQgY29uZmlnIHBhcmFtLgordm9pZCBzZXR1cENvbmZpZ1BhcmFtKAorICAgIGNvbnN0IHN0ZDo6c2hhcmVkX3B0cjxhbmRyb2lkOjpDb2RlYzJDbGllbnQ6OkNvbXBvbmVudD4mIGNvbXBvbmVudCwKKyAgICBpbnQzMl90IG5DaGFubmVscywgaW50MzJfdCBuU2FtcGxlUmF0ZSkgeworICAgIHN0ZDo6dmVjdG9yPHN0ZDo6dW5pcXVlX3B0cjxDMlNldHRpbmdSZXN1bHQ+PiBmYWlsdXJlczsKKyAgICBDMlN0cmVhbVNhbXBsZVJhdGVJbmZvOjppbnB1dCBzYW1wbGVSYXRlSW5mbygwdSwgblNhbXBsZVJhdGUpOworICAgIEMyU3RyZWFtQ2hhbm5lbENvdW50SW5mbzo6aW5wdXQgY2hhbm5lbENvdW50SW5mbygwdSwgbkNoYW5uZWxzKTsKKworICAgIHN0ZDo6dmVjdG9yPEMyUGFyYW0qPiBjb25maWdQYXJhbXsmc2FtcGxlUmF0ZUluZm8sICZjaGFubmVsQ291bnRJbmZvfTsKKyAgICBjMl9zdGF0dXNfdCBzdGF0dXMgPQorICAgICAgICBjb21wb25lbnQtPmNvbmZpZyhjb25maWdQYXJhbSwgQzJfRE9OVF9CTE9DSywgJmZhaWx1cmVzKTsKKyAgICBBU1NFUlRfRVEoZmFpbHVyZXMuc2l6ZSgpLCAwdSk7CisgICAgQVNTRVJUX0VRKHN0YXR1cywgQzJfT0spOworfQorCisvLyBMb29rVXBUYWJsZSBvZiBjbGlwcyBhbmQgbWV0YWRhdGEgZm9yIGNvbXBvbmVudCB0ZXN0aW5nCit2b2lkIEdldFVSTEZvckNvbXBvbmVudChDb2RlYzJBdWRpb0VuY0hpZGxUZXN0OjpzdGFuZGFyZENvbXAgY29tcCwgY2hhciogbVVSTCkgeworICAgIHN0cnVjdCBDb21wVG9VUkwgeworICAgICAgICBDb2RlYzJBdWRpb0VuY0hpZGxUZXN0OjpzdGFuZGFyZENvbXAgY29tcDsKKyAgICAgICAgY29uc3QgY2hhciogbVVSTDsKKyAgICB9OworICAgIHN0YXRpYyBjb25zdCBDb21wVG9VUkwga0NvbXBUb1VSTFtdID0geworICAgICAgICB7Q29kZWMyQXVkaW9FbmNIaWRsVGVzdDo6c3RhbmRhcmRDb21wOjphYWMsCisgICAgICAgICAiYmJiX3Jhd18yY2hfNDhraHpfczE2bGUucmF3In0sCisgICAgICAgIHtDb2RlYzJBdWRpb0VuY0hpZGxUZXN0OjpzdGFuZGFyZENvbXA6OmFtcm5iLAorICAgICAgICAgImJiYl9yYXdfMWNoXzhraHpfczE2bGUucmF3In0sCisgICAgICAgIHtDb2RlYzJBdWRpb0VuY0hpZGxUZXN0OjpzdGFuZGFyZENvbXA6OmFtcndiLAorICAgICAgICAgImJiYl9yYXdfMWNoXzE2a2h6X3MxNmxlLnJhdyJ9LAorICAgICAgICB7Q29kZWMyQXVkaW9FbmNIaWRsVGVzdDo6c3RhbmRhcmRDb21wOjpmbGFjLAorICAgICAgICAgImJiYl9yYXdfMmNoXzQ4a2h6X3MxNmxlLnJhdyJ9LAorICAgIH07CisKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHNpemVvZihrQ29tcFRvVVJMKSAvIHNpemVvZihrQ29tcFRvVVJMWzBdKTsgKytpKSB7CisgICAgICAgIGlmIChrQ29tcFRvVVJMW2ldLmNvbXAgPT0gY29tcCkgeworICAgICAgICAgICAgc3RyY2F0KG1VUkwsIGtDb21wVG9VUkxbaV0ubVVSTCk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICB9Cit9CisKK3ZvaWQgZW5jb2RlTkZyYW1lcyhjb25zdCBzdGQ6OnNoYXJlZF9wdHI8YW5kcm9pZDo6Q29kZWMyQ2xpZW50OjpDb21wb25lbnQ+ICZjb21wb25lbnQsCisgICAgICAgICAgICAgICAgICAgc3RkOjptdXRleCAmcXVldWVMb2NrLCBzdGQ6OmNvbmRpdGlvbl92YXJpYWJsZSAmcXVldWVDb25kaXRpb24sCisgICAgICAgICAgICAgICAgICAgc3RkOjpsaXN0PHN0ZDo6dW5pcXVlX3B0cjxDMldvcms+PiAmd29ya1F1ZXVlLAorICAgICAgICAgICAgICAgICAgIHN0ZDo6bGlzdDx1aW50NjRfdD4gJmZsdXNoZWRJbmRpY2VzLAorICAgICAgICAgICAgICAgICAgIHN0ZDo6c2hhcmVkX3B0cjxDMkJsb2NrUG9vbD4gJmxpbmVhclBvb2wsCisgICAgICAgICAgICAgICAgICAgc3RkOjppZnN0cmVhbSYgZWxlU3RyZWFtLCB1aW50MzJfdCBuRnJhbWVzLAorICAgICAgICAgICAgICAgICAgIGludDMyX3Qgc2FtcGxlc1BlckZyYW1lLCBpbnQzMl90IG5DaGFubmVscywKKyAgICAgICAgICAgICAgICAgICBpbnQzMl90IG5TYW1wbGVSYXRlLCBib29sIGZsdXNoZWQgPSBmYWxzZSwKKyAgICAgICAgICAgICAgICAgICBib29sIHNpZ25hbEVPUyA9IHRydWUpIHsKKyAgICB0eXBlZGVmIHN0ZDo6dW5pcXVlX2xvY2s8c3RkOjptdXRleD4gVUxvY2s7CisKKyAgICB1aW50MzJfdCBmcmFtZUlEID0gMDsKKyAgICB1aW50MzJfdCBtYXhSZXRyeSA9IDA7CisgICAgaW50IGJ5dGVzQ291bnQgPSBzYW1wbGVzUGVyRnJhbWUgKiBuQ2hhbm5lbHMgKiAyOworICAgIGludDMyX3QgdGltZXN0YW1wSW5jciA9CisgICAgICAgIChpbnQpKCgoZmxvYXQpc2FtcGxlc1BlckZyYW1lIC8gblNhbXBsZVJhdGUpICogMTAwMDAwMCk7CisgICAgdWludDY0X3QgdGltZXN0YW1wID0gMDsKKyAgICB3aGlsZSAoMSkgeworICAgICAgICBpZiAobkZyYW1lcyA9PSAwKSBicmVhazsKKyAgICAgICAgdWludDMyX3QgZmxhZ3MgPSAwOworICAgICAgICBzdGQ6OnVuaXF1ZV9wdHI8QzJXb3JrPiB3b3JrOworICAgICAgICAvLyBQcmVwYXJlIEMyV29yaworICAgICAgICB3aGlsZSAoIXdvcmsgJiYgKG1heFJldHJ5IDwgTUFYX1JFVFJZKSkgeworICAgICAgICAgICAgVUxvY2sgbChxdWV1ZUxvY2spOworICAgICAgICAgICAgaWYgKCF3b3JrUXVldWUuZW1wdHkoKSkgeworICAgICAgICAgICAgICAgIHdvcmsuc3dhcCh3b3JrUXVldWUuZnJvbnQoKSk7CisgICAgICAgICAgICAgICAgd29ya1F1ZXVlLnBvcF9mcm9udCgpOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBxdWV1ZUNvbmRpdGlvbi53YWl0X2ZvcihsLCBUSU1FX09VVCk7CisgICAgICAgICAgICAgICAgbWF4UmV0cnkrKzsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBpZiAoIXdvcmsgJiYgKG1heFJldHJ5ID49IE1BWF9SRVRSWSkpIHsKKyAgICAgICAgICAgIEFTU0VSVF9UUlVFKGZhbHNlKSA8PCAiV2FpdCBmb3IgZ2VuZXJhdGluZyBDMldvcmsgZXhjZWVkZWQgdGltZW91dCI7CisgICAgICAgIH0KKyAgICAgICAgaWYgKHNpZ25hbEVPUyAmJiAobkZyYW1lcyA9PSAxKSkKKyAgICAgICAgICAgIGZsYWdzIHw9IEMyRnJhbWVEYXRhOjpGTEFHX0VORF9PRl9TVFJFQU07CisgICAgICAgIGlmIChmbHVzaGVkKSB7CisgICAgICAgICAgICBmbGFncyB8PSBTWU5DX0ZSQU1FOworICAgICAgICAgICAgZmx1c2hlZCA9IGZhbHNlOworICAgICAgICB9CisgICAgICAgIHdvcmstPmlucHV0LmZsYWdzID0gKEMyRnJhbWVEYXRhOjpmbGFnc190KWZsYWdzOworICAgICAgICB3b3JrLT5pbnB1dC5vcmRpbmFsLnRpbWVzdGFtcCA9IHRpbWVzdGFtcDsKKyAgICAgICAgd29yay0+aW5wdXQub3JkaW5hbC5mcmFtZUluZGV4ID0gZnJhbWVJRDsKKyAgICAgICAgeworICAgICAgICAgICAgVUxvY2sgbChxdWV1ZUxvY2spOworICAgICAgICAgICAgZmx1c2hlZEluZGljZXMuZW1wbGFjZV9iYWNrKGZyYW1lSUQpOworICAgICAgICB9CisgICAgICAgIGNoYXIqIGRhdGEgPSAoY2hhciopbWFsbG9jKGJ5dGVzQ291bnQpOworICAgICAgICBlbGVTdHJlYW0ucmVhZChkYXRhLCBieXRlc0NvdW50KTsKKyAgICAgICAgQVNTRVJUX0VRKGVsZVN0cmVhbS5nY291bnQoKSwgYnl0ZXNDb3VudCk7CisgICAgICAgIHN0ZDo6c2hhcmVkX3B0cjxDMkxpbmVhckJsb2NrPiBibG9jazsKKyAgICAgICAgQVNTRVJUX0VRKEMyX09LLCBsaW5lYXJQb29sLT5mZXRjaExpbmVhckJsb2NrKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBieXRlc0NvdW50LCB7QzJNZW1vcnlVc2FnZTo6Q1BVX1JFQUQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDMk1lbW9yeVVzYWdlOjpDUFVfV1JJVEV9LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmYmxvY2spKTsKKyAgICAgICAgQVNTRVJUX1RSVUUoYmxvY2spOworICAgICAgICAvLyBXcml0ZSBWaWV3CisgICAgICAgIEMyV3JpdGVWaWV3IHZpZXcgPSBibG9jay0+bWFwKCkuZ2V0KCk7CisgICAgICAgIGlmICh2aWV3LmVycm9yKCkgIT0gQzJfT0spIHsKKyAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiQzJMaW5lYXJCbG9jazo6bWFwKCkgZmFpbGVkIDogJWQiLCB2aWV3LmVycm9yKCkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgQVNTRVJUX0VRKChzaXplX3QpYnl0ZXNDb3VudCwgdmlldy5jYXBhY2l0eSgpKTsKKyAgICAgICAgQVNTRVJUX0VRKDB1LCB2aWV3Lm9mZnNldCgpKTsKKyAgICAgICAgQVNTRVJUX0VRKChzaXplX3QpYnl0ZXNDb3VudCwgdmlldy5zaXplKCkpOworCisgICAgICAgIG1lbWNweSh2aWV3LmJhc2UoKSwgZGF0YSwgYnl0ZXNDb3VudCk7CisgICAgICAgIHdvcmstPmlucHV0LmJ1ZmZlcnMuY2xlYXIoKTsKKyAgICAgICAgd29yay0+aW5wdXQuYnVmZmVycy5lbXBsYWNlX2JhY2sobmV3IExpbmVhckJ1ZmZlcihibG9jaykpOworICAgICAgICB3b3JrLT53b3JrbGV0cy5jbGVhcigpOworICAgICAgICB3b3JrLT53b3JrbGV0cy5lbXBsYWNlX2JhY2sobmV3IEMyV29ya2xldCk7CisgICAgICAgIGZyZWUoZGF0YSk7CisKKyAgICAgICAgc3RkOjpsaXN0PHN0ZDo6dW5pcXVlX3B0cjxDMldvcms+PiBpdGVtczsKKyAgICAgICAgaXRlbXMucHVzaF9iYWNrKHN0ZDo6bW92ZSh3b3JrKSk7CisKKyAgICAgICAgLy8gRE8gVEhFIERFQ09ESU5HCisgICAgICAgIEFTU0VSVF9FUShjb21wb25lbnQtPnF1ZXVlKCZpdGVtcyksIEMyX09LKTsKKyAgICAgICAgQUxPR1YoIkZyYW1lICMlZCBzaXplID0gJWQgcXVldWVkIiwgZnJhbWVJRCwgYnl0ZXNDb3VudCk7CisgICAgICAgIG5GcmFtZXMtLTsKKyAgICAgICAgdGltZXN0YW1wICs9IHRpbWVzdGFtcEluY3I7CisgICAgICAgIGZyYW1lSUQrKzsKKyAgICAgICAgbWF4UmV0cnkgPSAwOworICAgIH0KK30KKwordm9pZCB3YWl0T25JbnB1dENvbnN1bXB0aW9uKHN0ZDo6bXV0ZXgmIHF1ZXVlTG9jaywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGQ6OmNvbmRpdGlvbl92YXJpYWJsZSYgcXVldWVDb25kaXRpb24sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RkOjpsaXN0PHN0ZDo6dW5pcXVlX3B0cjxDMldvcms+PiYgd29ya1F1ZXVlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBidWZmZXJDb3VudCA9IE1BWF9JTlBVVF9CVUZGRVJTKSB7CisgICAgdHlwZWRlZiBzdGQ6OnVuaXF1ZV9sb2NrPHN0ZDo6bXV0ZXg+IFVMb2NrOworICAgIHVpbnQzMl90IHF1ZXVlU2l6ZTsKKyAgICB1aW50MzJfdCBtYXhSZXRyeSA9IDA7CisgICAgeworICAgICAgICBVTG9jayBsKHF1ZXVlTG9jayk7CisgICAgICAgIHF1ZXVlU2l6ZSA9IHdvcmtRdWV1ZS5zaXplKCk7CisgICAgfQorICAgIHdoaWxlICgobWF4UmV0cnkgPCBNQVhfUkVUUlkpICYmIChxdWV1ZVNpemUgPCBidWZmZXJDb3VudCkpIHsKKyAgICAgICAgVUxvY2sgbChxdWV1ZUxvY2spOworICAgICAgICBpZiAocXVldWVTaXplICE9IHdvcmtRdWV1ZS5zaXplKCkpIHsKKyAgICAgICAgICAgIHF1ZXVlU2l6ZSA9IHdvcmtRdWV1ZS5zaXplKCk7CisgICAgICAgICAgICBtYXhSZXRyeSA9IDA7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBxdWV1ZUNvbmRpdGlvbi53YWl0X2ZvcihsLCBUSU1FX09VVCk7CisgICAgICAgICAgICBtYXhSZXRyeSsrOworICAgICAgICB9CisgICAgfQorfQorCitURVNUX0YoQ29kZWMyQXVkaW9FbmNIaWRsVGVzdCwgdmFsaWRhdGVDb21wTmFtZSkgeworICAgIGlmIChtRGlzYWJsZVRlc3QpIHJldHVybjsKKyAgICBBTE9HVigiQ2hlY2tzIGlmIHRoZSBnaXZlbiBjb21wb25lbnQgaXMgYSB2YWxpZCBhdWRpbyBjb21wb25lbnQiKTsKKyAgICB2YWxpZGF0ZUNvbXBvbmVudChtQ29tcG9uZW50LCBtQ29tcE5hbWUsIG1EaXNhYmxlVGVzdCk7CisgICAgQVNTRVJUX0VRKG1EaXNhYmxlVGVzdCwgZmFsc2UpOworfQorCitURVNUX0YoQ29kZWMyQXVkaW9FbmNIaWRsVGVzdCwgRW5jb2RlVGVzdCkgeworICAgIEFMT0dWKCJFbmNvZGVUZXN0Iik7CisgICAgaWYgKG1EaXNhYmxlVGVzdCkgcmV0dXJuOworICAgIEFTU0VSVF9FUShtQ29tcG9uZW50LT5zdGFydCgpLCBDMl9PSyk7CisgICAgY2hhciBtVVJMWzUxMl07CisgICAgc3RyY3B5KG1VUkwsIGdFbnYtPmdldFJlcygpLmNfc3RyKCkpOworICAgIEdldFVSTEZvckNvbXBvbmVudChtQ29tcE5hbWUsIG1VUkwpOworCisgICAgLy8gU2V0dGluZyBkZWZhdWx0IGNvbmZpZ3VyYXRpb24KKyAgICBpbnQzMl90IG5DaGFubmVscyA9IDI7CisgICAgaW50MzJfdCBuU2FtcGxlUmF0ZSA9IDQ0MTAwOworICAgIGludDMyX3Qgc2FtcGxlc1BlckZyYW1lID0gMTAyNDsKKyAgICBzd2l0Y2ggKG1Db21wTmFtZSkgeworICAgICAgICBjYXNlIGFhYzoKKyAgICAgICAgICAgIG5DaGFubmVscyA9IDI7CisgICAgICAgICAgICBuU2FtcGxlUmF0ZSA9IDQ4MDAwOworICAgICAgICAgICAgc2FtcGxlc1BlckZyYW1lID0gMTAyNDsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIGZsYWM6CisgICAgICAgICAgICBuQ2hhbm5lbHMgPSAyOworICAgICAgICAgICAgblNhbXBsZVJhdGUgPSA0ODAwMDsKKyAgICAgICAgICAgIHNhbXBsZXNQZXJGcmFtZSA9IDExNTI7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBhbXJuYjoKKyAgICAgICAgICAgIG5DaGFubmVscyA9IDE7CisgICAgICAgICAgICBuU2FtcGxlUmF0ZSA9IDgwMDA7CisgICAgICAgICAgICBzYW1wbGVzUGVyRnJhbWUgPSAxNjA7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBhbXJ3YjoKKyAgICAgICAgICAgIG5DaGFubmVscyA9IDE7CisgICAgICAgICAgICBuU2FtcGxlUmF0ZSA9IDE2MDAwOworICAgICAgICAgICAgc2FtcGxlc1BlckZyYW1lID0gMTYwOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBBU1NFUlRfVFJVRShmYWxzZSk7CisgICAgfQorICAgIHNldHVwQ29uZmlnUGFyYW0obUNvbXBvbmVudCwgbkNoYW5uZWxzLCBuU2FtcGxlUmF0ZSk7CisgICAgc3RkOjppZnN0cmVhbSBlbGVTdHJlYW07CisgICAgdWludDMyX3QgbnVtRnJhbWVzID0gMTI4OworICAgIGVsZVN0cmVhbS5vcGVuKG1VUkwsIHN0ZDo6aWZzdHJlYW06OmJpbmFyeSk7CisgICAgQVNTRVJUX0VRKGVsZVN0cmVhbS5pc19vcGVuKCksIHRydWUpOworICAgIEFMT0dWKCJtVVJMIDogJXMiLCBtVVJMKTsKKyAgICBBU1NFUlRfTk9fRkFUQUxfRkFJTFVSRSgKKyAgICAgICAgZW5jb2RlTkZyYW1lcyhtQ29tcG9uZW50LCBtUXVldWVMb2NrLCBtUXVldWVDb25kaXRpb24sIG1Xb3JrUXVldWUsCisgICAgICAgICAgICAgICAgICAgICAgbUZsdXNoZWRJbmRpY2VzLCBtTGluZWFyUG9vbCwgZWxlU3RyZWFtLCBudW1GcmFtZXMsCisgICAgICAgICAgICAgICAgICAgICAgc2FtcGxlc1BlckZyYW1lLCBuQ2hhbm5lbHMsIG5TYW1wbGVSYXRlKSk7CisgICAgLy8gYmxvY2tpbmcgY2FsbCB0byBlbnN1cmVzIGFwcGxpY2F0aW9uIHRvIFdhaXQgdGlsbCBhbGwgdGhlIGlucHV0cyBhcmUKKyAgICAvLyBjb25zdW1lZAorICAgIEFTU0VSVF9OT19GQVRBTF9GQUlMVVJFKAorICAgICAgICB3YWl0T25JbnB1dENvbnN1bXB0aW9uKG1RdWV1ZUxvY2ssIG1RdWV1ZUNvbmRpdGlvbiwgbVdvcmtRdWV1ZSkpOworICAgIGVsZVN0cmVhbS5jbG9zZSgpOworICAgIGlmIChtRnJhbWVzUmVjZWl2ZWQgIT0gbnVtRnJhbWVzKSB7CisgICAgICAgIEFMT0dFKCJJbnB1dCBidWZmZXIgY291bnQgYW5kIE91dHB1dCBidWZmZXIgY291bnQgbWlzbWF0Y2giKTsKKyAgICAgICAgQUxPR0UoImZyYW1lc1JlY2VpdmVkIDogJWQgaW5wdXRGcmFtZXMgOiAldSIsIG1GcmFtZXNSZWNlaXZlZCwgbnVtRnJhbWVzKTsKKyAgICAgICAgQVNTRVJUX1RSVUUoZmFsc2UpOworICAgIH0KKyAgICBpZiAoKG1Db21wTmFtZSA9PSBmbGFjIHx8IG1Db21wTmFtZSA9PSBhYWMpKSB7CisgICAgICAgIGlmICghbUNzZCkgeworICAgICAgICAgICAgQUxPR0UoIkNTRCBidWZmZXIgbWlzc2luZyIpOworICAgICAgICAgICAgQVNTRVJUX1RSVUUoZmFsc2UpOworICAgICAgICB9CisgICAgfQorICAgIEFTU0VSVF9FUShtRW9zLCB0cnVlKTsKKyAgICBBU1NFUlRfRVEobUNvbXBvbmVudC0+c3RvcCgpLCBDMl9PSyk7Cit9CisKK1RFU1RfRihDb2RlYzJBdWRpb0VuY0hpZGxUZXN0LCBFT1NUZXN0KSB7CisgICAgZGVzY3JpcHRpb24oIlRlc3QgZW1wdHkgaW5wdXQgYnVmZmVyIHdpdGggRU9TIGZsYWciKTsKKyAgICBpZiAobURpc2FibGVUZXN0KSByZXR1cm47CisgICAgQVNTRVJUX0VRKG1Db21wb25lbnQtPnN0YXJ0KCksIEMyX09LKTsKKworICAgIHR5cGVkZWYgc3RkOjp1bmlxdWVfbG9jazxzdGQ6Om11dGV4PiBVTG9jazsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8QzJXb3JrPiB3b3JrOworICAgIHsKKyAgICAgICAgVUxvY2sgbChtUXVldWVMb2NrKTsKKyAgICAgICAgaWYgKCFtV29ya1F1ZXVlLmVtcHR5KCkpIHsKKyAgICAgICAgICAgIHdvcmsuc3dhcChtV29ya1F1ZXVlLmZyb250KCkpOworICAgICAgICAgICAgbVdvcmtRdWV1ZS5wb3BfZnJvbnQoKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIEFMT0dFKCJtV29ya1F1ZXVlIEVtcHR5IGlzIG5vdCBleHBlY3RlZCBhdCB0aGUgc3RhcnQgb2YgdGhlIHRlc3QiKTsKKyAgICAgICAgICAgIEFTU0VSVF9UUlVFKGZhbHNlKTsKKyAgICAgICAgfQorICAgIH0KKyAgICBBU1NFUlRfTkUod29yaywgbnVsbHB0cik7CisgICAgd29yay0+aW5wdXQuZmxhZ3MgPSAoQzJGcmFtZURhdGE6OmZsYWdzX3QpQzJGcmFtZURhdGE6OkZMQUdfRU5EX09GX1NUUkVBTTsKKyAgICB3b3JrLT5pbnB1dC5vcmRpbmFsLnRpbWVzdGFtcCA9IDA7CisgICAgd29yay0+aW5wdXQub3JkaW5hbC5mcmFtZUluZGV4ID0gMDsKKyAgICB3b3JrLT5pbnB1dC5idWZmZXJzLmNsZWFyKCk7CisgICAgd29yay0+d29ya2xldHMuY2xlYXIoKTsKKyAgICB3b3JrLT53b3JrbGV0cy5lbXBsYWNlX2JhY2sobmV3IEMyV29ya2xldCk7CisKKyAgICBzdGQ6Omxpc3Q8c3RkOjp1bmlxdWVfcHRyPEMyV29yaz4+IGl0ZW1zOworICAgIGl0ZW1zLnB1c2hfYmFjayhzdGQ6Om1vdmUod29yaykpOworICAgIEFTU0VSVF9FUShtQ29tcG9uZW50LT5xdWV1ZSgmaXRlbXMpLCBDMl9PSyk7CisgICAgdWludDMyX3QgcXVldWVTaXplOworICAgIHsKKyAgICAgICAgVUxvY2sgbChtUXVldWVMb2NrKTsKKyAgICAgICAgcXVldWVTaXplID0gbVdvcmtRdWV1ZS5zaXplKCk7CisgICAgICAgIGlmIChxdWV1ZVNpemUgPCBNQVhfSU5QVVRfQlVGRkVSUykgeworICAgICAgICAgICAgbVF1ZXVlQ29uZGl0aW9uLndhaXRfZm9yKGwsIFRJTUVfT1VUKTsKKyAgICAgICAgfQorICAgIH0KKyAgICBBU1NFUlRfRVEobUVvcywgdHJ1ZSk7CisgICAgQVNTRVJUX0VRKG1Db21wb25lbnQtPnN0b3AoKSwgQzJfT0spOworfQorCitURVNUX0YoQ29kZWMyQXVkaW9FbmNIaWRsVGVzdCwgRW1wdHlCdWZmZXJUZXN0KSB7CisgICAgZGVzY3JpcHRpb24oIlRlc3RzIGVtcHR5IGlucHV0IGJ1ZmZlciIpOworICAgIGlmIChtRGlzYWJsZVRlc3QpIHJldHVybjsKKyAgICBBU1NFUlRfRVEobUNvbXBvbmVudC0+c3RhcnQoKSwgQzJfT0spOworCisgICAgdHlwZWRlZiBzdGQ6OnVuaXF1ZV9sb2NrPHN0ZDo6bXV0ZXg+IFVMb2NrOworICAgIHN0ZDo6dW5pcXVlX3B0cjxDMldvcms+IHdvcms7CisgICAgeworICAgICAgICBVTG9jayBsKG1RdWV1ZUxvY2spOworICAgICAgICBpZiAoIW1Xb3JrUXVldWUuZW1wdHkoKSkgeworICAgICAgICAgICAgd29yay5zd2FwKG1Xb3JrUXVldWUuZnJvbnQoKSk7CisgICAgICAgICAgICBtV29ya1F1ZXVlLnBvcF9mcm9udCgpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgQUxPR0UoIm1Xb3JrUXVldWUgRW1wdHkgaXMgbm90IGV4cGVjdGVkIGF0IHRoZSBzdGFydCBvZiB0aGUgdGVzdCIpOworICAgICAgICAgICAgQVNTRVJUX1RSVUUoZmFsc2UpOworICAgICAgICB9CisgICAgfQorICAgIEFTU0VSVF9ORSh3b3JrLCBudWxscHRyKTsKKyAgICB3b3JrLT5pbnB1dC5mbGFncyA9IChDMkZyYW1lRGF0YTo6ZmxhZ3NfdCkwOworICAgIHdvcmstPmlucHV0Lm9yZGluYWwudGltZXN0YW1wID0gMDsKKyAgICB3b3JrLT5pbnB1dC5vcmRpbmFsLmZyYW1lSW5kZXggPSAwOworICAgIHdvcmstPmlucHV0LmJ1ZmZlcnMuY2xlYXIoKTsKKyAgICB3b3JrLT53b3JrbGV0cy5jbGVhcigpOworICAgIHdvcmstPndvcmtsZXRzLmVtcGxhY2VfYmFjayhuZXcgQzJXb3JrbGV0KTsKKworICAgIHN0ZDo6bGlzdDxzdGQ6OnVuaXF1ZV9wdHI8QzJXb3JrPj4gaXRlbXM7CisgICAgaXRlbXMucHVzaF9iYWNrKHN0ZDo6bW92ZSh3b3JrKSk7CisgICAgQVNTRVJUX0VRKG1Db21wb25lbnQtPnF1ZXVlKCZpdGVtcyksIEMyX09LKTsKKyAgICB1aW50MzJfdCBxdWV1ZVNpemU7CisgICAgeworICAgICAgICBVTG9jayBsKG1RdWV1ZUxvY2spOworICAgICAgICBxdWV1ZVNpemUgPSBtV29ya1F1ZXVlLnNpemUoKTsKKyAgICAgICAgaWYgKHF1ZXVlU2l6ZSA8IE1BWF9JTlBVVF9CVUZGRVJTKSB7CisgICAgICAgICAgICBtUXVldWVDb25kaXRpb24ud2FpdF9mb3IobCwgVElNRV9PVVQpOworICAgICAgICB9CisgICAgfQorICAgIEFTU0VSVF9FUShtV29ya1F1ZXVlLnNpemUoKSwgKHVpbnQzMl90KU1BWF9JTlBVVF9CVUZGRVJTKTsKKyAgICBBU1NFUlRfRVEobUNvbXBvbmVudC0+c3RvcCgpLCBDMl9PSyk7Cit9CisKK1RFU1RfRihDb2RlYzJBdWRpb0VuY0hpZGxUZXN0LCBGbHVzaFRlc3QpIHsKKyAgICBkZXNjcmlwdGlvbigiVGVzdCBSZXF1ZXN0IGZvciBmbHVzaCIpOworICAgIGlmIChtRGlzYWJsZVRlc3QpIHJldHVybjsKKyAgICBBU1NFUlRfRVEobUNvbXBvbmVudC0+c3RhcnQoKSwgQzJfT0spOworCisgICAgdHlwZWRlZiBzdGQ6OnVuaXF1ZV9sb2NrPHN0ZDo6bXV0ZXg+IFVMb2NrOworICAgIGNoYXIgbVVSTFs1MTJdOworICAgIHN0cmNweShtVVJMLCBnRW52LT5nZXRSZXMoKS5jX3N0cigpKTsKKyAgICBHZXRVUkxGb3JDb21wb25lbnQobUNvbXBOYW1lLCBtVVJMKTsKKworICAgIC8vIFNldHRpbmcgZGVmYXVsdCBjb25maWd1cmF0aW9uCisgICAgbUZsdXNoZWRJbmRpY2VzLmNsZWFyKCk7CisgICAgaW50MzJfdCBuQ2hhbm5lbHMgPSAyOworICAgIGludDMyX3QgblNhbXBsZVJhdGUgPSA0NDEwMDsKKyAgICBpbnQzMl90IHNhbXBsZXNQZXJGcmFtZSA9IDEwMjQ7CisgICAgc3dpdGNoIChtQ29tcE5hbWUpIHsKKyAgICAgICAgY2FzZSBhYWM6CisgICAgICAgICAgICBuQ2hhbm5lbHMgPSAyOworICAgICAgICAgICAgblNhbXBsZVJhdGUgPSA0ODAwMDsKKyAgICAgICAgICAgIHNhbXBsZXNQZXJGcmFtZSA9IDEwMjQ7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBmbGFjOgorICAgICAgICAgICAgbkNoYW5uZWxzID0gMjsKKyAgICAgICAgICAgIG5TYW1wbGVSYXRlID0gNDgwMDA7CisgICAgICAgICAgICBzYW1wbGVzUGVyRnJhbWUgPSAxMTUyOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgYW1ybmI6CisgICAgICAgICAgICBuQ2hhbm5lbHMgPSAxOworICAgICAgICAgICAgblNhbXBsZVJhdGUgPSA4MDAwOworICAgICAgICAgICAgc2FtcGxlc1BlckZyYW1lID0gMTYwOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgYW1yd2I6CisgICAgICAgICAgICBuQ2hhbm5lbHMgPSAxOworICAgICAgICAgICAgblNhbXBsZVJhdGUgPSAxNjAwMDsKKyAgICAgICAgICAgIHNhbXBsZXNQZXJGcmFtZSA9IDE2MDsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgQVNTRVJUX1RSVUUoZmFsc2UpOworICAgIH0KKyAgICBzZXR1cENvbmZpZ1BhcmFtKG1Db21wb25lbnQsIG5DaGFubmVscywgblNhbXBsZVJhdGUpOworICAgIHN0ZDo6aWZzdHJlYW0gZWxlU3RyZWFtOworICAgIHVpbnQzMl90IG51bUZyYW1lc0ZsdXNoZWQgPSAzMDsKKyAgICB1aW50MzJfdCBudW1GcmFtZXMgPSAxMjg7CisgICAgZWxlU3RyZWFtLm9wZW4obVVSTCwgc3RkOjppZnN0cmVhbTo6YmluYXJ5KTsKKyAgICBBU1NFUlRfRVEoZWxlU3RyZWFtLmlzX29wZW4oKSwgdHJ1ZSk7CisgICAgQUxPR1YoIm1VUkwgOiAlcyIsIG1VUkwpOworICAgIEFTU0VSVF9OT19GQVRBTF9GQUlMVVJFKAorICAgICAgICBlbmNvZGVORnJhbWVzKG1Db21wb25lbnQsIG1RdWV1ZUxvY2ssIG1RdWV1ZUNvbmRpdGlvbiwgbVdvcmtRdWV1ZSwKKyAgICAgICAgICAgICAgICAgICAgICBtRmx1c2hlZEluZGljZXMsIG1MaW5lYXJQb29sLCBlbGVTdHJlYW0sIG51bUZyYW1lc0ZsdXNoZWQsCisgICAgICAgICAgICAgICAgICAgICAgc2FtcGxlc1BlckZyYW1lLCBuQ2hhbm5lbHMsIG5TYW1wbGVSYXRlKSk7CisgICAgc3RkOjpsaXN0PHN0ZDo6dW5pcXVlX3B0cjxDMldvcms+PiBmbHVzaGVkV29yazsKKyAgICBjMl9zdGF0dXNfdCBlcnIgPQorICAgICAgICBtQ29tcG9uZW50LT5mbHVzaChDMkNvbXBvbmVudDo6RkxVU0hfQ09NUE9ORU5ULCAmZmx1c2hlZFdvcmspOworICAgIEFTU0VSVF9FUShlcnIsIEMyX09LKTsKKyAgICBBU1NFUlRfTk9fRkFUQUxfRkFJTFVSRSgKKyAgICAgICAgd2FpdE9uSW5wdXRDb25zdW1wdGlvbihtUXVldWVMb2NrLCBtUXVldWVDb25kaXRpb24sIG1Xb3JrUXVldWUsCisgICAgICAgICAgICAoc2l6ZV90KU1BWF9JTlBVVF9CVUZGRVJTIC0gZmx1c2hlZFdvcmsuc2l6ZSgpKSk7CisgICAgdWludDY0X3QgZnJhbWVJbmRleDsKKyAgICB7CisgICAgICAgIC8vVXBkYXRlIG1GbHVzaGVkSW5kaWNlcyBiYXNlZCBvbiB0aGUgaW5kZXggcmVjZWl2ZWQgZnJvbSBmbHVzaCgpCisgICAgICAgIFVMb2NrIGwobVF1ZXVlTG9jayk7CisgICAgICAgIGZvciAoc3RkOjp1bmlxdWVfcHRyPEMyV29yaz4mIHdvcmsgOiBmbHVzaGVkV29yaykgeworICAgICAgICAgICAgQVNTRVJUX05FKHdvcmssIG51bGxwdHIpOworICAgICAgICAgICAgZnJhbWVJbmRleCA9IHdvcmstPmlucHV0Lm9yZGluYWwuZnJhbWVJbmRleC5wZWVrdSgpOworICAgICAgICAgICAgc3RkOjpsaXN0PHVpbnQ2NF90Pjo6aXRlcmF0b3IgZnJhbWVJbmRleEl0ID0KKyAgICAgICAgICAgICAgICBzdGQ6OmZpbmQobUZsdXNoZWRJbmRpY2VzLmJlZ2luKCksIG1GbHVzaGVkSW5kaWNlcy5lbmQoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgZnJhbWVJbmRleCk7CisgICAgICAgICAgICBpZiAoIW1GbHVzaGVkSW5kaWNlcy5lbXB0eSgpICYmCisgICAgICAgICAgICAgICAgKGZyYW1lSW5kZXhJdCAhPSBtRmx1c2hlZEluZGljZXMuZW5kKCkpKSB7CisgICAgICAgICAgICAgICAgbUZsdXNoZWRJbmRpY2VzLmVyYXNlKGZyYW1lSW5kZXhJdCk7CisgICAgICAgICAgICAgICAgd29yay0+aW5wdXQuYnVmZmVycy5jbGVhcigpOworICAgICAgICAgICAgICAgIHdvcmstPndvcmtsZXRzLmNsZWFyKCk7CisgICAgICAgICAgICAgICAgbVdvcmtRdWV1ZS5wdXNoX2JhY2soc3RkOjptb3ZlKHdvcmspKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKyAgICBtRmx1c2hlZEluZGljZXMuY2xlYXIoKTsKKyAgICBBU1NFUlRfTk9fRkFUQUxfRkFJTFVSRSgKKyAgICAgICAgZW5jb2RlTkZyYW1lcyhtQ29tcG9uZW50LCBtUXVldWVMb2NrLCBtUXVldWVDb25kaXRpb24sIG1Xb3JrUXVldWUsCisgICAgICAgICAgICAgICAgICAgICAgbUZsdXNoZWRJbmRpY2VzLCBtTGluZWFyUG9vbCwgZWxlU3RyZWFtLAorICAgICAgICAgICAgICAgICAgICAgIG51bUZyYW1lcyAtIG51bUZyYW1lc0ZsdXNoZWQsIHNhbXBsZXNQZXJGcmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICBuQ2hhbm5lbHMsIG5TYW1wbGVSYXRlLCB0cnVlKSk7CisgICAgZWxlU3RyZWFtLmNsb3NlKCk7CisgICAgZXJyID0KKyAgICAgICAgbUNvbXBvbmVudC0+Zmx1c2goQzJDb21wb25lbnQ6OkZMVVNIX0NPTVBPTkVOVCwgJmZsdXNoZWRXb3JrKTsKKyAgICBBU1NFUlRfRVEoZXJyLCBDMl9PSyk7CisgICAgQVNTRVJUX05PX0ZBVEFMX0ZBSUxVUkUoCisgICAgICAgIHdhaXRPbklucHV0Q29uc3VtcHRpb24obVF1ZXVlTG9jaywgbVF1ZXVlQ29uZGl0aW9uLCBtV29ya1F1ZXVlLAorICAgICAgICAgICAgKHNpemVfdClNQVhfSU5QVVRfQlVGRkVSUyAtIGZsdXNoZWRXb3JrLnNpemUoKSkpOworICAgIHsKKyAgICAgICAgLy9VcGRhdGUgbUZsdXNoZWRJbmRpY2VzIGJhc2VkIG9uIHRoZSBpbmRleCByZWNlaXZlZCBmcm9tIGZsdXNoKCkKKyAgICAgICAgVUxvY2sgbChtUXVldWVMb2NrKTsKKyAgICAgICAgZm9yIChzdGQ6OnVuaXF1ZV9wdHI8QzJXb3JrPiYgd29yayA6IGZsdXNoZWRXb3JrKSB7CisgICAgICAgICAgICBBU1NFUlRfTkUod29yaywgbnVsbHB0cik7CisgICAgICAgICAgICBmcmFtZUluZGV4ID0gd29yay0+aW5wdXQub3JkaW5hbC5mcmFtZUluZGV4LnBlZWt1KCk7CisgICAgICAgICAgICBzdGQ6Omxpc3Q8dWludDY0X3Q+OjppdGVyYXRvciBmcmFtZUluZGV4SXQgPQorICAgICAgICAgICAgICAgIHN0ZDo6ZmluZChtRmx1c2hlZEluZGljZXMuYmVnaW4oKSwgbUZsdXNoZWRJbmRpY2VzLmVuZCgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICBmcmFtZUluZGV4KTsKKyAgICAgICAgICAgIGlmICghbUZsdXNoZWRJbmRpY2VzLmVtcHR5KCkgJiYKKyAgICAgICAgICAgICAgICAoZnJhbWVJbmRleEl0ICE9IG1GbHVzaGVkSW5kaWNlcy5lbmQoKSkpIHsKKyAgICAgICAgICAgICAgICBtRmx1c2hlZEluZGljZXMuZXJhc2UoZnJhbWVJbmRleEl0KTsKKyAgICAgICAgICAgICAgICB3b3JrLT5pbnB1dC5idWZmZXJzLmNsZWFyKCk7CisgICAgICAgICAgICAgICAgd29yay0+d29ya2xldHMuY2xlYXIoKTsKKyAgICAgICAgICAgICAgICBtV29ya1F1ZXVlLnB1c2hfYmFjayhzdGQ6Om1vdmUod29yaykpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorICAgIEFTU0VSVF9FUShtRmx1c2hlZEluZGljZXMuZW1wdHkoKSwgdHJ1ZSk7CisgICAgQVNTRVJUX0VRKG1Db21wb25lbnQtPnN0b3AoKSwgQzJfT0spOworfQorCit9ICAvLyBhbm9ueW1vdXMgbmFtZXNwYWNlCisKK2ludCBtYWluKGludCBhcmdjLCBjaGFyKiogYXJndikgeworICAgIGdFbnYgPSBuZXcgQ29tcG9uZW50VGVzdEVudmlyb25tZW50KCk7CisgICAgOjp0ZXN0aW5nOjpBZGRHbG9iYWxUZXN0RW52aXJvbm1lbnQoZ0Vudik7CisgICAgOjp0ZXN0aW5nOjpJbml0R29vZ2xlVGVzdCgmYXJnYywgYXJndik7CisgICAgZ0Vudi0+aW5pdCgmYXJnYywgYXJndik7CisgICAgaW50IHN0YXR1cyA9IGdFbnYtPmluaXRGcm9tT3B0aW9ucyhhcmdjLCBhcmd2KTsKKyAgICBpZiAoc3RhdHVzID09IDApIHsKKyAgICAgICAgaW50IHN0YXR1cyA9IFJVTl9BTExfVEVTVFMoKTsKKyAgICAgICAgTE9HKElORk8pIDw8ICJDMiBUZXN0IHJlc3VsdCA9ICIgPDwgc3RhdHVzOworICAgIH0KKyAgICByZXR1cm4gc3RhdHVzOworfQpkaWZmIC0tZ2l0IGEvbWVkaWEvY29kZWMyL2hpZGwvMS4wL3Z0cy9hdWRpby9tZWRpYV9jMl9hdWRpb19oaWRsX3Rlc3RfY29tbW9uLmggYi9tZWRpYS9jb2RlYzIvaGlkbC8xLjAvdnRzL2F1ZGlvL21lZGlhX2MyX2F1ZGlvX2hpZGxfdGVzdF9jb21tb24uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44OWViNjllCi0tLSAvZGV2L251bGwKKysrIGIvbWVkaWEvY29kZWMyL2hpZGwvMS4wL3Z0cy9hdWRpby9tZWRpYV9jMl9hdWRpb19oaWRsX3Rlc3RfY29tbW9uLmgKQEAgLTAsMCArMSwyNCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxOCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCisKKyNpZm5kZWYgTUVESUFfQzJfQVVESU9fSElETF9URVNUX0NPTU1PTl9ICisjZGVmaW5lIE1FRElBX0MyX0FVRElPX0hJRExfVEVTVF9DT01NT05fSAorCisjZGVmaW5lIE1BWF9SRVRSWSAyMAorI2RlZmluZSBUSU1FX09VVCAyMDBtcworI2RlZmluZSBNQVhfSU5QVVRfQlVGRkVSUyA4CisKKyNlbmRpZiAgLy8gTUVESUFfQzJfQVVESU9fSElETF9URVNUX0NPTU1PTl9ICmRpZmYgLS1naXQgYS9tZWRpYS9jb2RlYzIvaGlkbC8xLjAvdnRzL2NvbW1vbi9BbmRyb2lkLmJwIGIvbWVkaWEvY29kZWMyL2hpZGwvMS4wL3Z0cy9jb21tb24vQW5kcm9pZC5icApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45NGY0NmVkCi0tLSAvZGV2L251bGwKKysrIGIvbWVkaWEvY29kZWMyL2hpZGwvMS4wL3Z0cy9jb21tb24vQW5kcm9pZC5icApAQCAtMCwwICsxLDMzIEBACitjY19saWJyYXJ5X3N0YXRpYyB7CisgICAgbmFtZTogIlZ0c01lZGlhQzJWMV8wQ29tbW9uVXRpbCIsCisgICAgZGVmYXVsdHM6IFsKKyAgICAgICAgIlZ0c0hhbFRhcmdldFRlc3REZWZhdWx0cyIsCisgICAgICAgICJsaWJjb2RlYzItaGlkbC1kZWZhdWx0cyIsCisgICAgXSwKKworICAgIGluY2x1ZGVfZGlyczogWworICAgICAgICAiZnJhbWV3b3Jrcy9hdi9tZWRpYS9jb2RlYzIvaGlkbC9jbGllbnQvaW5jbHVkZSIsCisgICAgXSwKKworICAgIHNyY3M6IFsKKyAgICAgICAgIm1lZGlhX2MyX2hpZGxfdGVzdF9jb21tb24uY3BwIiwKKyAgICBdLAorCisgICAgZXhwb3J0X2luY2x1ZGVfZGlyczogWyIuIl0sCit9CisKK2NjX2RlZmF1bHRzIHsKKyAgICBuYW1lOiAiVnRzTWVkaWFDMlYxXzBEZWZhdWx0cyIsCisgICAgZGVmYXVsdHM6IFsKKyAgICAgICAgIlZ0c0hhbFRhcmdldFRlc3REZWZhdWx0cyIsCisgICAgICAgICJsaWJjb2RlYzItaGlkbC1kZWZhdWx0cyIsCisgICAgXSwKKworICAgIHN0YXRpY19saWJzOiBbCisgICAgICAgICJWdHNNZWRpYUMyVjFfMENvbW1vblV0aWwiLAorICAgIF0sCisKKyAgICBzaGFyZWRfbGliczogWworICAgICAgICAibGliY29kZWMyX2NsaWVudCIsCisgICAgXSwKK30KZGlmZiAtLWdpdCBhL21lZGlhL2NvZGVjMi9oaWRsLzEuMC92dHMvY29tbW9uL1JFQURNRS5tZCBiL21lZGlhL2NvZGVjMi9oaWRsLzEuMC92dHMvY29tbW9uL1JFQURNRS5tZApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kYTU2OWE4Ci0tLSAvZGV2L251bGwKKysrIGIvbWVkaWEvY29kZWMyL2hpZGwvMS4wL3Z0cy9jb21tb24vUkVBRE1FLm1kCkBAIC0wLDAgKzEsMjIgQEAKKyMjIENvZGVjMiBIYWwgQCAxLjAgdGVzdHMgIyMKKy0tLQorIyMjIyBtYXN0ZXIgOgorRnVuY3Rpb25hbGl0eSBvZiBtYXN0ZXIgaXMgdG8gZW51bWVyYXRlIGFsbCB0aGUgQ29kZWMyIGNvbXBvbmVudHMgYXZhaWxhYmxlIGluIEMyIG1lZGlhIHNlcnZpY2UuCisKK3VzYWdlOiBNdHNIaWRsQzJWMVxfMFRhcmdldE1hc3RlclRlc3QgLUkgc29mdHdhcmUKKworIyMjIyBjb21wb25lbnQgOgorRnVuY3Rpb25hbGl0eSBvZiBjb21wb25lbnQgaXMgdG8gdGVzdCBjb21tb24gZnVuY3Rpb25hbGl0eSBhY3Jvc3MgYWxsIHRoZSBDb2RlYzIgY29tcG9uZW50cyBhdmFpbGFibGUgaW4gQzIgbWVkaWEgc2VydmljZS4gRm9yIGEgc3RhbmRhcmQgQzIgY29tcG9uZW50LCB0aGVzZSB0ZXN0cyBhcmUgZXhwZWN0ZWQgdG8gcGFzcy4KKwordXNhZ2U6IE10c0hpZGxDMlYxXF8wVGFyZ2V0Q29tcG9uZW50VGVzdCAtSSBzb2Z0d2FyZSAtQyA8Y29tcCBuYW1lPgorCisjIyMjIGF1ZGlvIDoKK0Z1bmN0aW9uYWxpdHkgb2YgYXVkaW8gdGVzdCBpcyB0byB2YWxpZGF0ZSBhdWRpbyBzcGVjaWZpYyBmdW5jdGlvbmFsaXR5IENvZGVjMiBjb21wb25lbnRzLiBUaGUgcmVzb3VyY2UgZmlsZXMgZm9yIHRoaXMgdGVzdCBhcmUgdGFrZW4gZnJvbSBoYXJkd2FyZS9pbnRlcmZhY2VzL21lZGlhL3Jlcy4gVGhlIHBhdGggdG8gdGhlc2UgZmlsZXMgb24gdGhlIGRldmljZSBpcyByZXF1aXJlZCB0byBiZSBnaXZlbiBmb3IgYml0c3RyZWFtIHRlc3RzLgorCit1c2FnZTogTXRzSGlkbEMyVjFcXzBUYXJnZXRBdWRpb0RlY1Rlc3QgLUkgc29mdHdhcmUgLUMgPGNvbXAgbmFtZT4gLVAgL3NkY2FyZC9tZWRpYQorCisjIyMjIHZpZGVvIDoKK0Z1bmN0aW9uYWxpdHkgb2YgdmlkZW8gdGVzdCBpcyB0byB2YWxpZGF0ZSB2aWRlbyBzcGVjaWZpYyBmdW5jdGlvbmFsaXR5IENvZGVjMiBjb21wb25lbnRzLiBUaGUgcmVzb3VyY2UgZmlsZXMgZm9yIHRoaXMgdGVzdCBhcmUgdGFrZW4gZnJvbSBoYXJkd2FyZS9pbnRlcmZhY2VzL21lZGlhL3Jlcy4gVGhlIHBhdGggdG8gdGhlc2UgZmlsZXMgb24gdGhlIGRldmljZSBpcyByZXF1aXJlZCB0byBiZSBnaXZlbiBmb3IgYml0c3RyZWFtIHRlc3RzLgorCit1c2FnZTogTXRzSGlkbEMyVjFcXzBUYXJnZXRWaWRlb0RlY1Rlc3QgLUkgc29mdHdhcmUgLUMgPGNvbXAgbmFtZT4gLVAgL3NkY2FyZC9tZWRpYQorCmRpZmYgLS1naXQgYS9tZWRpYS9jb2RlYzIvaGlkbC8xLjAvdnRzL2NvbW1vbi9tZWRpYV9jMl9oaWRsX3Rlc3RfY29tbW9uLmNwcCBiL21lZGlhL2NvZGVjMi9oaWRsLzEuMC92dHMvY29tbW9uL21lZGlhX2MyX2hpZGxfdGVzdF9jb21tb24uY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZkY2NkYmIKLS0tIC9kZXYvbnVsbAorKysgYi9tZWRpYS9jb2RlYzIvaGlkbC8xLjAvdnRzL2NvbW1vbi9tZWRpYV9jMl9oaWRsX3Rlc3RfY29tbW9uLmNwcApAQCAtMCwwICsxLDUyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE4IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KKworI2RlZmluZSBMT0dfVEFHICJtZWRpYV9jMl9oaWRsX3Rlc3RfY29tbW9uIgorI2luY2x1ZGUgPHN0ZGlvLmg+CisKKyNpbmNsdWRlICJtZWRpYV9jMl9oaWRsX3Rlc3RfY29tbW9uLmgiCit1c2luZyA6OmFuZHJvaWQ6OmhhcmR3YXJlOjptZWRpYTo6YzI6OlYxXzA6OkZpZWxkU3VwcG9ydGVkVmFsdWVzOworCit2b2lkIGR1bXBGU1YoY29uc3QgRmllbGRTdXBwb3J0ZWRWYWx1ZXMmIHN2KSB7CisgICAgQUxPR0QoIkR1bXBpbmcgRlNWIGRhdGEiKTsKKyAgICB1c2luZyBuYW1lc3BhY2Ugc3RkOworICAgIGlmIChzdi50eXBlID09IEZpZWxkU3VwcG9ydGVkVmFsdWVzOjpUeXBlOjpFTVBUWSkgeworICAgICAgICBBTE9HRCgiRlNWIFZhbHVlIGlzIEVtcHR5Iik7CisgICAgfQorICAgIGlmIChzdi50eXBlID09IEZpZWxkU3VwcG9ydGVkVmFsdWVzOjpUeXBlOjpSQU5HRSkgeworICAgICAgICBBTE9HRCgiRHVtcGluZyBGU1YgcmFuZ2UiKTsKKyAgICAgICAgY291dCA8PCAiLnJhbmdlKCIgPDwgc3YucmFuZ2UubWluOworICAgICAgICBpZiAoc3YucmFuZ2Uuc3RlcCAhPSAwKSB7CisgICAgICAgICAgICBjb3V0IDw8ICI6IiA8PCBzdi5yYW5nZS5zdGVwOworICAgICAgICB9CisgICAgICAgIGlmIChzdi5yYW5nZS5udW0gIT0gMSB8fCBzdi5yYW5nZS5kZW5vbSAhPSAxKSB7CisgICAgICAgICAgICBjb3V0IDw8ICI6IiA8PCBzdi5yYW5nZS5udW0gPDwgIi8iIDw8IHN2LnJhbmdlLmRlbm9tOworICAgICAgICB9CisgICAgICAgIGNvdXQgPDwgIiAiIDw8IHN2LnJhbmdlLm1heCA8PCAiKSI7CisgICAgfQorICAgIGlmIChzdi52YWx1ZXMuc2l6ZSgpKSB7CisgICAgICAgIEFMT0dEKCJEdW1waW5nIEZTViB2YWx1ZSIpOworICAgICAgICBjb3V0IDw8IChzdi50eXBlID09IEZpZWxkU3VwcG9ydGVkVmFsdWVzOjpUeXBlOjpGTEFHUyA/ICIuZmxhZ3MoIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6ICIubGlzdCgiKTsKKyAgICAgICAgY29uc3QgY2hhciogc2VwID0gIiI7CisgICAgICAgIGZvciAoY29uc3QgYXV0byYgcCA6IHN2LnZhbHVlcykgeworICAgICAgICAgICAgY291dCA8PCBzZXAgPDwgcDsKKyAgICAgICAgICAgIHNlcCA9ICIsIjsKKyAgICAgICAgfQorICAgICAgICBjb3V0IDw8ICIpIjsKKyAgICB9CisgICAgY291dCA8PCBlbmRsOworfQpkaWZmIC0tZ2l0IGEvbWVkaWEvY29kZWMyL2hpZGwvMS4wL3Z0cy9jb21tb24vbWVkaWFfYzJfaGlkbF90ZXN0X2NvbW1vbi5oIGIvbWVkaWEvY29kZWMyL2hpZGwvMS4wL3Z0cy9jb21tb24vbWVkaWFfYzJfaGlkbF90ZXN0X2NvbW1vbi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY3NjViYWEKLS0tIC9kZXYvbnVsbAorKysgYi9tZWRpYS9jb2RlYzIvaGlkbC8xLjAvdnRzL2NvbW1vbi9tZWRpYV9jMl9oaWRsX3Rlc3RfY29tbW9uLmgKQEAgLTAsMCArMSwxODAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTggVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworCisjaWZuZGVmIE1FRElBX0MyX0hJRExfVEVTVF9DT01NT05fSAorI2RlZmluZSBNRURJQV9DMl9ISURMX1RFU1RfQ09NTU9OX0gKKworI2luY2x1ZGUgPGNvZGVjMi9oaWRsL2NsaWVudC5oPgorCisjaW5jbHVkZSA8YW5kcm9pZC9oYXJkd2FyZS9tZWRpYS9jMi8xLjAvdHlwZXMuaD4KKworI2luY2x1ZGUgPEMyQ29tcG9uZW50Lmg+CisjaW5jbHVkZSA8Z2V0b3B0Lmg+CisjaW5jbHVkZSA8aGlkbC9IaWRsU3VwcG9ydC5oPgorI2luY2x1ZGUgPG1lZGlhL3N0YWdlZnJpZ2h0L2ZvdW5kYXRpb24vQUxvb3Blci5oPgorI2luY2x1ZGUgPG1lZGlhL3N0YWdlZnJpZ2h0L2ZvdW5kYXRpb24vTXV0ZXhlZC5oPgorCit1c2luZyBuYW1lc3BhY2UgOjphbmRyb2lkOjpoYXJkd2FyZTo6bWVkaWE6OmMyOjpWMV8wOwordXNpbmcgbmFtZXNwYWNlIDo6YW5kcm9pZDo6aGFyZHdhcmU6Om1lZGlhOjpjMjo6VjFfMDo6dXRpbHM7CisKK3VzaW5nIDo6YW5kcm9pZDo6TXV0ZXhlZDsKK3VzaW5nIDo6YW5kcm9pZDo6aGFyZHdhcmU6OlZvaWQ7Cit1c2luZyA6OmFuZHJvaWQ6OmhhcmR3YXJlOjpSZXR1cm47Cit1c2luZyA6OmFuZHJvaWQ6OmhhcmR3YXJlOjpoaWRsX3ZlYzsKK3VzaW5nIDo6YW5kcm9pZDo6aGFyZHdhcmU6OmhpZGxfc3RyaW5nOworCisjaW5jbHVkZSA8VnRzSGFsSGlkbFRhcmdldFRlc3RFbnZCYXNlLmg+CisKKy8qCisgKiBIYW5kbGUgQ2FsbGJhY2sgZnVuY3Rpb25zIG9uV29ya0RvbmUoKSwgb25UcmlwcGVkKCksCisgKiBvbkVycm9yKCksIG9uRGVhdGgoKSwgb25GcmFtZXNSZW5kZXJlZCgpCisgKi8KK3N0cnVjdCBDb2RlY0xpc3RlbmVyIDogcHVibGljIGFuZHJvaWQ6OkNvZGVjMkNsaWVudDo6TGlzdGVuZXIgeworICAgcHVibGljOgorICAgIENvZGVjTGlzdGVuZXIoCisgICAgICAgIGNvbnN0IHN0ZDo6ZnVuY3Rpb248dm9pZChzdGQ6Omxpc3Q8c3RkOjp1bmlxdWVfcHRyPEMyV29yaz4+JiB3b3JrSXRlbXMpPiBmbiA9CisgICAgICAgICAgICBudWxscHRyKQorICAgICAgICA6IGNhbGxCYWNrKGZuKSB7fQorICAgIHZpcnR1YWwgdm9pZCBvbldvcmtEb25lKAorICAgICAgICBjb25zdCBzdGQ6OndlYWtfcHRyPGFuZHJvaWQ6OkNvZGVjMkNsaWVudDo6Q29tcG9uZW50PiYgY29tcCwKKyAgICAgICAgc3RkOjpsaXN0PHN0ZDo6dW5pcXVlX3B0cjxDMldvcms+PiYgd29ya0l0ZW1zLAorICAgICAgICBzaXplX3QgbnVtRGlzY2FyZGVkSW5wdXRCdWZmZXJzKSBvdmVycmlkZSB7CisgICAgICAgIC8qIFRPRE8gKi8KKyAgICAgICAgQUxPR0QoIm9uV29ya0RvbmUgY2FsbGVkIik7CisgICAgICAgICh2b2lkKWNvbXA7CisgICAgICAgICh2b2lkKW51bURpc2NhcmRlZElucHV0QnVmZmVyczsKKyAgICAgICAgaWYgKGNhbGxCYWNrKSBjYWxsQmFjayh3b3JrSXRlbXMpOworICAgIH0KKworICAgIHZpcnR1YWwgdm9pZCBvblRyaXBwZWQoCisgICAgICAgIGNvbnN0IHN0ZDo6d2Vha19wdHI8YW5kcm9pZDo6Q29kZWMyQ2xpZW50OjpDb21wb25lbnQ+JiBjb21wLAorICAgICAgICBjb25zdCBzdGQ6OnZlY3RvcjxzdGQ6OnNoYXJlZF9wdHI8QzJTZXR0aW5nUmVzdWx0Pj4mIHNldHRpbmdSZXN1bHRzKQorICAgICAgICBvdmVycmlkZSB7CisgICAgICAgIC8qIFRPRE8gKi8KKyAgICAgICAgKHZvaWQpY29tcDsKKyAgICAgICAgKHZvaWQpc2V0dGluZ1Jlc3VsdHM7CisgICAgfQorCisgICAgdmlydHVhbCB2b2lkIG9uRXJyb3IoCisgICAgICAgIGNvbnN0IHN0ZDo6d2Vha19wdHI8YW5kcm9pZDo6Q29kZWMyQ2xpZW50OjpDb21wb25lbnQ+JiBjb21wLAorICAgICAgICB1aW50MzJfdCBlcnJvckNvZGUpIG92ZXJyaWRlIHsKKyAgICAgICAgLyogVE9ETyAqLworICAgICAgICAodm9pZCljb21wOworICAgICAgICBBTE9HRCgib25FcnJvciBjYWxsZWQiKTsKKyAgICAgICAgaWYgKGVycm9yQ29kZSAhPSAwKSBBTE9HRSgiRXJyb3IgOiAldSIsIGVycm9yQ29kZSk7CisgICAgfQorCisgICAgdmlydHVhbCB2b2lkIG9uRGVhdGgoCisgICAgICAgIGNvbnN0IHN0ZDo6d2Vha19wdHI8YW5kcm9pZDo6Q29kZWMyQ2xpZW50OjpDb21wb25lbnQ+JiBjb21wKSBvdmVycmlkZSB7CisgICAgICAgIC8qIFRPRE8gKi8KKyAgICAgICAgKHZvaWQpY29tcDsKKyAgICB9CisKKyAgICB2aXJ0dWFsIHZvaWQgb25JbnB1dEJ1ZmZlckRvbmUoCisgICAgICAgIGNvbnN0IHN0ZDo6c2hhcmVkX3B0cjxDMkJ1ZmZlcj4mIGJ1ZmZlcikgb3ZlcnJpZGUgeworICAgICAgICAvKiBUT0RPICovCisgICAgICAgICh2b2lkKWJ1ZmZlcjsKKyAgICB9CisKKyAgICB2aXJ0dWFsIHZvaWQgb25GcmFtZXNSZW5kZXJlZCgKKyAgICAgICAgY29uc3Qgc3RkOjp2ZWN0b3I8UmVuZGVyZWRGcmFtZT4mIHJlbmRlcmVkRnJhbWVzKSBvdmVycmlkZSB7CisgICAgICAgIC8qIFRPRE8gKi8KKyAgICAgICAgKHZvaWQpcmVuZGVyZWRGcmFtZXM7CisgICAgfQorICAgIC8vIHN0ZDo6bXV0ZXggbVF1ZXVlTG9jazsKKyAgICAvLyBzdGQ6OmNvbmRpdGlvbl92YXJpYWJsZSBtUXVldWVDb25kaXRpb247CisgICAgLy8gc3RkOjpsaXN0PHN0ZDo6dW5pcXVlX3B0cjxDMldvcms+PiBtV29ya1F1ZXVlOworICAgIHN0ZDo6ZnVuY3Rpb248dm9pZChzdGQ6Omxpc3Q8c3RkOjp1bmlxdWVfcHRyPEMyV29yaz4+JiB3b3JrSXRlbXMpPiBjYWxsQmFjazsKK307CisKKy8vIEEgY2xhc3MgZm9yIHRlc3QgZW52aXJvbm1lbnQgc2V0dXAKK2NsYXNzIENvbXBvbmVudFRlc3RFbnZpcm9ubWVudCA6IHB1YmxpYyA6OnRlc3Rpbmc6OlZ0c0hhbEhpZGxUYXJnZXRUZXN0RW52QmFzZSB7CisgICBwcml2YXRlOgorICAgIHR5cGVkZWYgOjp0ZXN0aW5nOjpWdHNIYWxIaWRsVGFyZ2V0VGVzdEVudkJhc2UgU3VwZXI7CisKKyAgIHB1YmxpYzoKKyAgICB2aXJ0dWFsIHZvaWQgcmVnaXN0ZXJUZXN0U2VydmljZXMoKSBvdmVycmlkZSB7CisgICAgICAgIHJlZ2lzdGVyVGVzdFNlcnZpY2U8SUNvbXBvbmVudFN0b3JlPigpOworICAgIH0KKworICAgIENvbXBvbmVudFRlc3RFbnZpcm9ubWVudCgpIDogcmVzKCIvc2RjYXJkL21lZGlhLyIpIHt9CisKKyAgICB2b2lkIHNldENvbXBvbmVudChjb25zdCBjaGFyKiBfY29tcG9uZW50KSB7IGNvbXBvbmVudCA9IF9jb21wb25lbnQ7IH0KKworICAgIHZvaWQgc2V0SW5zdGFuY2UoY29uc3QgY2hhciogX2luc3RhbmNlKSB7IGluc3RhbmNlID0gX2luc3RhbmNlOyB9CisKKyAgICB2b2lkIHNldFJlcyhjb25zdCBjaGFyKiBfcmVzKSB7IHJlcyA9IF9yZXM7IH0KKworICAgIGNvbnN0IGhpZGxfc3RyaW5nIGdldEluc3RhbmNlKCkgY29uc3QgeyByZXR1cm4gaW5zdGFuY2U7IH0KKworICAgIGNvbnN0IGhpZGxfc3RyaW5nIGdldENvbXBvbmVudCgpIGNvbnN0IHsgcmV0dXJuIGNvbXBvbmVudDsgfQorCisgICAgY29uc3QgaGlkbF9zdHJpbmcgZ2V0UmVzKCkgY29uc3QgeyByZXR1cm4gcmVzOyB9CisKKyAgICBpbnQgaW5pdEZyb21PcHRpb25zKGludCBhcmdjLCBjaGFyKiogYXJndikgeworICAgICAgICBzdGF0aWMgc3RydWN0IG9wdGlvbiBvcHRpb25zW10gPSB7CisgICAgICAgICAgICB7Imluc3RhbmNlIiwgcmVxdWlyZWRfYXJndW1lbnQsIDAsICdJJ30sCisgICAgICAgICAgICB7ImNvbXBvbmVudCIsIHJlcXVpcmVkX2FyZ3VtZW50LCAwLCAnQyd9LAorICAgICAgICAgICAgeyJyZXMiLCByZXF1aXJlZF9hcmd1bWVudCwgMCwgJ1AnfSwKKyAgICAgICAgICAgIHswLCAwLCAwLCAwfX07CisKKyAgICAgICAgd2hpbGUgKHRydWUpIHsKKyAgICAgICAgICAgIGludCBpbmRleCA9IDA7CisgICAgICAgICAgICBpbnQgYyA9IGdldG9wdF9sb25nKGFyZ2MsIGFyZ3YsICJJOkM6UDoiLCBvcHRpb25zLCAmaW5kZXgpOworICAgICAgICAgICAgaWYgKGMgPT0gLTEpIHsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgc3dpdGNoIChjKSB7CisgICAgICAgICAgICAgICAgY2FzZSAnSSc6CisgICAgICAgICAgICAgICAgICAgIHNldEluc3RhbmNlKG9wdGFyZyk7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIGNhc2UgJ0MnOgorICAgICAgICAgICAgICAgICAgICBzZXRDb21wb25lbnQob3B0YXJnKTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgY2FzZSAnUCc6CisgICAgICAgICAgICAgICAgICAgIHNldFJlcyhvcHRhcmcpOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICBjYXNlICc/JzoKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBpZiAob3B0aW5kIDwgYXJnYykgeworICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsCisgICAgICAgICAgICAgICAgICAgICJ1bnJlY29nbml6ZWQgb3B0aW9uOiAlc1xuXG4iCisgICAgICAgICAgICAgICAgICAgICJ1c2FnZTogJXMgPGd0ZXN0IG9wdGlvbnM+IDx0ZXN0IG9wdGlvbnM+XG5cbiIKKyAgICAgICAgICAgICAgICAgICAgInRlc3Qgb3B0aW9ucyBhcmU6XG5cbiIKKyAgICAgICAgICAgICAgICAgICAgIi1JLCAtLWluc3RhbmNlOiBzb2Z0d2FyZSBmb3IgQzIgY29tcG9uZW50cywgZWxzZSBkZWZhdWx0XG4iCisgICAgICAgICAgICAgICAgICAgICItQywgLS1jb21wb25lbnQ6IEMyIGNvbXBvbmVudCB0byB0ZXN0XG4iCisgICAgICAgICAgICAgICAgICAgICItUCwgLS1yZXM6IFJlc291cmNlIGZpbGVzIGRpcmVjdG9yeSBsb2NhdGlvblxuIiwKKyAgICAgICAgICAgICAgICAgICAgYXJndltvcHRpbmQgPzogMV0sIGFyZ3ZbMF0pOworICAgICAgICAgICAgcmV0dXJuIDI7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorCisgICBwcml2YXRlOgorICAgIGhpZGxfc3RyaW5nIGluc3RhbmNlOworICAgIGhpZGxfc3RyaW5nIGNvbXBvbmVudDsKKyAgICBoaWRsX3N0cmluZyByZXM7Cit9OworCisvKgorICogY29tbW9uIGZ1bmN0aW9ucyBkZWNsYXJhdGlvbnMKKyAqLwordm9pZCBkdW1wRlNWKGNvbnN0IEZpZWxkU3VwcG9ydGVkVmFsdWVzJiBzdik7CisjZW5kaWYgIC8vIE1FRElBX0MyX0hJRExfVEVTVF9DT01NT05fSApkaWZmIC0tZ2l0IGEvbWVkaWEvY29kZWMyL2hpZGwvMS4wL3Z0cy9jb21wb25lbnQvQW5kcm9pZC5icCBiL21lZGlhL2NvZGVjMi9oaWRsLzEuMC92dHMvY29tcG9uZW50L0FuZHJvaWQuYnAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGI5MTNiNgotLS0gL2Rldi9udWxsCisrKyBiL21lZGlhL2NvZGVjMi9oaWRsLzEuMC92dHMvY29tcG9uZW50L0FuZHJvaWQuYnAKQEAgLTAsMCArMSwyMiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxOCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCisKK2NjX3Rlc3QgeworICAgIG5hbWU6ICJWdHNIaWRsQzJWMV8wVGFyZ2V0Q29tcG9uZW50VGVzdCIsCisgICAgZGVmYXVsdHM6IFsiVnRzTWVkaWFDMlYxXzBEZWZhdWx0cyJdLAorICAgIHNyY3M6IFsiVnRzSGlkbEMyVjFfMFRhcmdldENvbXBvbmVudFRlc3QuY3BwIl0sCit9CisKZGlmZiAtLWdpdCBhL21lZGlhL2NvZGVjMi9oaWRsLzEuMC92dHMvY29tcG9uZW50L1Z0c0hpZGxDMlYxXzBUYXJnZXRDb21wb25lbnRUZXN0LmNwcCBiL21lZGlhL2NvZGVjMi9oaWRsLzEuMC92dHMvY29tcG9uZW50L1Z0c0hpZGxDMlYxXzBUYXJnZXRDb21wb25lbnRUZXN0LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iN2ZiNjU1Ci0tLSAvZGV2L251bGwKKysrIGIvbWVkaWEvY29kZWMyL2hpZGwvMS4wL3Z0cy9jb21wb25lbnQvVnRzSGlkbEMyVjFfMFRhcmdldENvbXBvbmVudFRlc3QuY3BwCkBAIC0wLDAgKzEsMjA5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE4IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KKworLy8jZGVmaW5lIExPR19OREVCVUcgMAorI2RlZmluZSBMT0dfVEFHICJjb2RlYzJfaGlkbF9oYWxfY29tcG9uZW50X3Rlc3QiCisKKyNpbmNsdWRlIDxhbmRyb2lkLWJhc2UvbG9nZ2luZy5oPgorI2luY2x1ZGUgPGd0ZXN0L2d0ZXN0Lmg+CisKKyNpbmNsdWRlIDxDMkNvbmZpZy5oPgorI2luY2x1ZGUgPGNvZGVjMi9oaWRsL2NsaWVudC5oPgorCisjaW5jbHVkZSA8VnRzSGFsSGlkbFRhcmdldFRlc3RCYXNlLmg+CisjaW5jbHVkZSAibWVkaWFfYzJfaGlkbF90ZXN0X2NvbW1vbi5oIgorCitzdGF0aWMgQ29tcG9uZW50VGVzdEVudmlyb25tZW50KiBnRW52ID0gbnVsbHB0cjsKKworbmFtZXNwYWNlIHsKKworLy8gZ29vZ2xlLmNvZGVjMiBDb21wb25lbnQgdGVzdCBzZXR1cAorY2xhc3MgQ29kZWMyQ29tcG9uZW50SGlkbFRlc3QgOiBwdWJsaWMgOjp0ZXN0aW5nOjpWdHNIYWxIaWRsVGFyZ2V0VGVzdEJhc2UgeworICAgcHJpdmF0ZToKKyAgICB0eXBlZGVmIDo6dGVzdGluZzo6VnRzSGFsSGlkbFRhcmdldFRlc3RCYXNlIFN1cGVyOworCisgICBwdWJsaWM6CisgICAgdmlydHVhbCB2b2lkIFNldFVwKCkgb3ZlcnJpZGUgeworICAgICAgICBTdXBlcjo6U2V0VXAoKTsKKyAgICAgICAgbUNsaWVudCA9IGFuZHJvaWQ6OkNvZGVjMkNsaWVudDo6Q3JlYXRlRnJvbVNlcnZpY2UoCisgICAgICAgICAgICBnRW52LT5nZXRJbnN0YW5jZSgpLmNfc3RyKCkpOworICAgICAgICBBU1NFUlRfTkUobUNsaWVudCwgbnVsbHB0cik7CisgICAgICAgIG1MaXN0ZW5lci5yZXNldChuZXcgQ29kZWNMaXN0ZW5lcigpKTsKKyAgICAgICAgQVNTRVJUX05FKG1MaXN0ZW5lciwgbnVsbHB0cik7CisgICAgICAgIG1DbGllbnQtPmNyZWF0ZUNvbXBvbmVudChnRW52LT5nZXRDb21wb25lbnQoKS5jX3N0cigpLCBtTGlzdGVuZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmbUNvbXBvbmVudCk7CisgICAgICAgIEFTU0VSVF9ORShtQ29tcG9uZW50LCBudWxscHRyKTsKKyAgICB9CisKKyAgICB2aXJ0dWFsIHZvaWQgVGVhckRvd24oKSBvdmVycmlkZSB7CisgICAgICAgIGlmIChtQ29tcG9uZW50ICE9IG51bGxwdHIpIHsKKyAgICAgICAgICAgIC8vIElmIHlvdSBoYXZlIGVuY291bnRlcmVkIGEgZmF0YWwgZmFpbHVyZSwgaXQgaXMgcG9zc2libGUgdGhhdAorICAgICAgICAgICAgLy8gZnJlZU5vZGUoKSB3aWxsIG5vdCBnbyB0aHJvdWdoLiBJbnN0ZWFkIG9mIGhhbmdpbmcgdGhlIGFwcC4KKyAgICAgICAgICAgIC8vIGxldCBpdCBwYXNzIHRocm91Z2ggYW5kIHJlcG9ydCBlcnJvcnMKKyAgICAgICAgICAgIGlmICg6OnRlc3Rpbmc6OlRlc3Q6Okhhc0ZhdGFsRmFpbHVyZSgpKSByZXR1cm47CisgICAgICAgICAgICBtQ29tcG9uZW50LT5yZWxlYXNlKCk7CisgICAgICAgICAgICBtQ29tcG9uZW50ID0gbnVsbHB0cjsKKyAgICAgICAgfQorICAgICAgICBTdXBlcjo6VGVhckRvd24oKTsKKyAgICB9CisKKyAgICBzdGQ6OnNoYXJlZF9wdHI8YW5kcm9pZDo6Q29kZWMyQ2xpZW50PiBtQ2xpZW50OworICAgIHN0ZDo6c2hhcmVkX3B0cjxhbmRyb2lkOjpDb2RlYzJDbGllbnQ6Okxpc3RlbmVyPiBtTGlzdGVuZXI7CisgICAgc3RkOjpzaGFyZWRfcHRyPGFuZHJvaWQ6OkNvZGVjMkNsaWVudDo6Q29tcG9uZW50PiBtQ29tcG9uZW50OworCisgICBwcm90ZWN0ZWQ6CisgICAgc3RhdGljIHZvaWQgZGVzY3JpcHRpb24oY29uc3Qgc3RkOjpzdHJpbmcmIGRlc2NyaXB0aW9uKSB7CisgICAgICAgIFJlY29yZFByb3BlcnR5KCJkZXNjcmlwdGlvbiIsIGRlc2NyaXB0aW9uKTsKKyAgICB9Cit9OworCisvLyBUZXN0IEVtcHR5IEZsdXNoCitURVNUX0YoQ29kZWMyQ29tcG9uZW50SGlkbFRlc3QsIEVtcHR5Rmx1c2gpIHsKKyAgICBBTE9HVigiRW1wdHkgRmx1c2ggVGVzdCIpOworICAgIGMyX3N0YXR1c190IGVyciA9IG1Db21wb25lbnQtPnN0YXJ0KCk7CisgICAgQVNTRVJUX0VRKGVyciwgQzJfT0spOworCisgICAgc3RkOjpsaXN0PHN0ZDo6dW5pcXVlX3B0cjxDMldvcms+PiBmbHVzaGVkV29yazsKKyAgICBlcnIgPSBtQ29tcG9uZW50LT5mbHVzaChDMkNvbXBvbmVudDo6RkxVU0hfQ09NUE9ORU5ULCAmZmx1c2hlZFdvcmspOworICAgIEFTU0VSVF9FUShlcnIsIEMyX09LKTsKKworICAgIGVyciA9IG1Db21wb25lbnQtPnN0b3AoKTsKKyAgICBBU1NFUlRfRVEoZXJyLCBDMl9PSyk7CisgICAgLy8gRW1wdHkgRmx1c2ggc2hvdWxkIG5vdCByZXR1cm4gYW55IHdvcmsKKyAgICBBU1NFUlRfRVEoZmx1c2hlZFdvcmsuc2l6ZSgpLCAwdSk7Cit9CisKKy8vIFRlc3QgUXVldWUgRW1wdHkgV29yaworVEVTVF9GKENvZGVjMkNvbXBvbmVudEhpZGxUZXN0LCBRdWV1ZUVtcHR5V29yaykgeworICAgIEFMT0dWKCJRdWV1ZSBFbXB0eSBXb3JrIFRlc3QiKTsKKyAgICBjMl9zdGF0dXNfdCBlcnIgPSBtQ29tcG9uZW50LT5zdGFydCgpOworICAgIEFTU0VSVF9FUShlcnIsIEMyX09LKTsKKworICAgIC8vIFF1ZXVlaW5nIGFuIGVtcHR5IFdvcmtCdW5kbGUKKyAgICBzdGQ6Omxpc3Q8c3RkOjp1bmlxdWVfcHRyPEMyV29yaz4+IHdvcmtMaXN0OworICAgIGVyciA9IG1Db21wb25lbnQtPnF1ZXVlKCZ3b3JrTGlzdCk7CisgICAgQVNTRVJUX0VRKGVyciwgQzJfT0spOworCisgICAgZXJyID0gbUNvbXBvbmVudC0+cmVzZXQoKTsKKyAgICBBU1NFUlRfRVEoZXJyLCBDMl9PSyk7Cit9CisKKy8vIFRlc3QgQ29tcG9uZW50IENvbmZpZ3VyYXRpb24KK1RFU1RfRihDb2RlYzJDb21wb25lbnRIaWRsVGVzdCwgQ29uZmlnKSB7CisgICAgQUxPR1YoIkNvbmZpZ3VyYXRpb24gVGVzdCIpOworCisgICAgQzJTdHJpbmcgbmFtZSA9IG1Db21wb25lbnQtPmdldE5hbWUoKTsKKyAgICBFWFBFQ1RfTkUobmFtZS5lbXB0eSgpLCB0cnVlKSA8PCAiSW52YWxpZCBDb21wb25lbnQgTmFtZSI7CisKKyAgICBjMl9zdGF0dXNfdCBlcnIgPSBDMl9PSzsKKyAgICBzdGQ6OnZlY3RvcjxzdGQ6OnVuaXF1ZV9wdHI8QzJQYXJhbT4+IHF1ZXJpZWQ7CisgICAgc3RkOjp2ZWN0b3I8c3RkOjp1bmlxdWVfcHRyPEMyU2V0dGluZ1Jlc3VsdD4+IGZhaWx1cmVzOworCisgICAgLy8gUXVlcnkgc3VwcG9ydGVkIHBhcmFtcyBieSB0aGUgY29tcG9uZW50CisgICAgc3RkOjp2ZWN0b3I8c3RkOjpzaGFyZWRfcHRyPEMyUGFyYW1EZXNjcmlwdG9yPj4gcGFyYW1zOworICAgIGVyciA9IG1Db21wb25lbnQtPnF1ZXJ5U3VwcG9ydGVkUGFyYW1zKCZwYXJhbXMpOworICAgIEFTU0VSVF9FUShlcnIsIEMyX09LKTsKKyAgICBBTE9HVigiTnVtYmVyIG9mIHRvdGFsIHBhcmFtcyAtICV6dSIsIHBhcmFtcy5zaXplKCkpOworCisgICAgLy8gUXVlcnkgYW5kIGNvbmZpZyBhbGwgdGhlIHN1cHBvcnRlZCBwYXJhbXMKKyAgICBmb3IgKHN0ZDo6c2hhcmVkX3B0cjxDMlBhcmFtRGVzY3JpcHRvcj4gcCA6IHBhcmFtcykgeworICAgICAgICBBTE9HRCgiUXVlcnlpbmcgaW5kZXggJWQiLCAoaW50KXAtPmluZGV4KCkpOworICAgICAgICBlcnIgPSBtQ29tcG9uZW50LT5xdWVyeSh7fSwge3AtPmluZGV4KCl9LCBDMl9ET05UX0JMT0NLLCAmcXVlcmllZCk7CisgICAgICAgIEVYUEVDVF9ORShxdWVyaWVkLnNpemUoKSwgMHUpOworICAgICAgICBFWFBFQ1RfRVEoZXJyLCBDMl9PSyk7CisgICAgICAgIGVyciA9IG1Db21wb25lbnQtPmNvbmZpZyh7cXVlcmllZFswXS5nZXQoKX0sIEMyX0RPTlRfQkxPQ0ssICZmYWlsdXJlcyk7CisgICAgICAgIEFTU0VSVF9FUShlcnIsIEMyX09LKTsKKyAgICAgICAgQVNTRVJUX0VRKGZhaWx1cmVzLnNpemUoKSwgMHUpOworICAgIH0KK30KKworLy8gVGVzdCBNdWx0aXBsZSBTdGFydCBTdG9wIFJlc2V0IFRlc3QKK1RFU1RfRihDb2RlYzJDb21wb25lbnRIaWRsVGVzdCwgTXVsdGlwbGVTdGFydFN0b3BSZXNldCkgeworICAgIEFMT0dWKCJNdWx0aXBsZSBTdGFydCBTdG9wIGFuZCBSZXNldCBUZXN0Iik7CisgICAgYzJfc3RhdHVzX3QgZXJyID0gQzJfT0s7CisKKyNkZWZpbmUgTUFYX1JFVFJZIDE2CisKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IE1BWF9SRVRSWTsgaSsrKSB7CisgICAgICAgIGVyciA9IG1Db21wb25lbnQtPnN0YXJ0KCk7CisgICAgICAgIEFTU0VSVF9FUShlcnIsIEMyX09LKTsKKworICAgICAgICBlcnIgPSBtQ29tcG9uZW50LT5zdG9wKCk7CisgICAgICAgIEFTU0VSVF9FUShlcnIsIEMyX09LKTsKKyAgICB9CisKKyAgICBlcnIgPSBtQ29tcG9uZW50LT5zdGFydCgpOworICAgIEFTU0VSVF9FUShlcnIsIEMyX09LKTsKKworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgTUFYX1JFVFJZOyBpKyspIHsKKyAgICAgICAgZXJyID0gbUNvbXBvbmVudC0+cmVzZXQoKTsKKyAgICAgICAgQVNTRVJUX0VRKGVyciwgQzJfT0spOworICAgIH0KKworICAgIGVyciA9IG1Db21wb25lbnQtPnN0YXJ0KCk7CisgICAgQVNTRVJUX0VRKGVyciwgQzJfT0spOworCisgICAgZXJyID0gbUNvbXBvbmVudC0+c3RvcCgpOworICAgIEFTU0VSVF9FUShlcnIsIEMyX09LKTsKKworICAgIC8vIFNlY29uZCBzdG9wIHNob3VsZCByZXR1cm4gZXJyb3IKKyAgICBlcnIgPSBtQ29tcG9uZW50LT5zdG9wKCk7CisgICAgQVNTRVJUX05FKGVyciwgQzJfT0spOworfQorCisvLyBUZXN0IENvbXBvbmVudCBSZWxlYXNlIEFQSQorVEVTVF9GKENvZGVjMkNvbXBvbmVudEhpZGxUZXN0LCBNdWx0aXBsZVJlbGVhc2UpIHsKKyAgICBBTE9HVigiTXVsdGlwbGUgUmVsZWFzZSBUZXN0Iik7CisgICAgYzJfc3RhdHVzX3QgZXJyID0gbUNvbXBvbmVudC0+c3RhcnQoKTsKKyAgICBBU1NFUlRfRVEoZXJyLCBDMl9PSyk7CisKKyAgICAvLyBRdWVyeSBDb21wb25lbnQgRG9tYWluIFR5cGUKKyAgICBzdGQ6OnZlY3RvcjxzdGQ6OnVuaXF1ZV9wdHI8QzJQYXJhbT4+IHF1ZXJpZWQ7CisgICAgZXJyID0gbUNvbXBvbmVudC0+cXVlcnkoe30sIHtDMlBvcnRNZWRpYVR5cGVTZXR0aW5nOjppbnB1dDo6UEFSQU1fVFlQRX0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgQzJfRE9OVF9CTE9DSywgJnF1ZXJpZWQpOworICAgIEVYUEVDVF9ORShxdWVyaWVkLnNpemUoKSwgMHUpOworCisgICAgLy8gQ29uZmlndXJlIENvbXBvbmVudCBEb21haW4KKyAgICBzdGQ6OnZlY3RvcjxzdGQ6OnVuaXF1ZV9wdHI8QzJTZXR0aW5nUmVzdWx0Pj4gZmFpbHVyZXM7CisgICAgQzJQb3J0TWVkaWFUeXBlU2V0dGluZzo6aW5wdXQqIHBvcnRNZWRpYVR5cGUgPQorICAgICAgICBDMlBvcnRNZWRpYVR5cGVTZXR0aW5nOjppbnB1dDo6RnJvbShxdWVyaWVkWzBdLmdldCgpKTsKKyAgICBlcnIgPSBtQ29tcG9uZW50LT5jb25maWcoe3BvcnRNZWRpYVR5cGV9LCBDMl9ET05UX0JMT0NLLCAmZmFpbHVyZXMpOworICAgIEFTU0VSVF9FUShlcnIsIEMyX09LKTsKKyAgICBBU1NFUlRfRVEoZmFpbHVyZXMuc2l6ZSgpLCAwdSk7CisKKyNkZWZpbmUgTUFYX1JFVFJZIDE2CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBNQVhfUkVUUlk7IGkrKykgeworICAgICAgICBlcnIgPSBtQ29tcG9uZW50LT5yZWxlYXNlKCk7CisgICAgICAgIEFTU0VSVF9FUShlcnIsIEMyX09LKTsKKyAgICB9Cit9CisKK30gIC8vIGFub255bW91cyBuYW1lc3BhY2UKKworLy8gVE9ETzogQWRkIHRlc3QgZm9yIEludmFsaWQgd29yaywKKy8vIFRPRE86IEFkZCB0ZXN0IGZvciBJbnZhbGlkIHN0YXRlcworaW50IG1haW4oaW50IGFyZ2MsIGNoYXIqKiBhcmd2KSB7CisgICAgZ0VudiA9IG5ldyBDb21wb25lbnRUZXN0RW52aXJvbm1lbnQoKTsKKyAgICA6OnRlc3Rpbmc6OkFkZEdsb2JhbFRlc3RFbnZpcm9ubWVudChnRW52KTsKKyAgICA6OnRlc3Rpbmc6OkluaXRHb29nbGVUZXN0KCZhcmdjLCBhcmd2KTsKKyAgICBnRW52LT5pbml0KCZhcmdjLCBhcmd2KTsKKyAgICBpbnQgc3RhdHVzID0gZ0Vudi0+aW5pdEZyb21PcHRpb25zKGFyZ2MsIGFyZ3YpOworICAgIGlmIChzdGF0dXMgPT0gMCkgeworICAgICAgICBzdGF0dXMgPSBSVU5fQUxMX1RFU1RTKCk7CisgICAgICAgIExPRyhJTkZPKSA8PCAiQzIgVGVzdCByZXN1bHQgPSAiIDw8IHN0YXR1czsKKyAgICB9CisgICAgcmV0dXJuIHN0YXR1czsKK30KZGlmZiAtLWdpdCBhL21lZGlhL2NvZGVjMi9oaWRsLzEuMC92dHMvbWFzdGVyL0FuZHJvaWQuYnAgYi9tZWRpYS9jb2RlYzIvaGlkbC8xLjAvdnRzL21hc3Rlci9BbmRyb2lkLmJwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUxNjRkNjgKLS0tIC9kZXYvbnVsbAorKysgYi9tZWRpYS9jb2RlYzIvaGlkbC8xLjAvdnRzL21hc3Rlci9BbmRyb2lkLmJwCkBAIC0wLDAgKzEsMjIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTggVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworCitjY190ZXN0IHsKKyAgICBuYW1lOiAiVnRzSGlkbEMyVjFfMFRhcmdldE1hc3RlclRlc3QiLAorICAgIGRlZmF1bHRzOiBbIlZ0c01lZGlhQzJWMV8wRGVmYXVsdHMiXSwKKyAgICBzcmNzOiBbIlZ0c0hpZGxDMlYxXzBUYXJnZXRNYXN0ZXJUZXN0LmNwcCJdLAorfQorCmRpZmYgLS1naXQgYS9tZWRpYS9jb2RlYzIvaGlkbC8xLjAvdnRzL21hc3Rlci9WdHNIaWRsQzJWMV8wVGFyZ2V0TWFzdGVyVGVzdC5jcHAgYi9tZWRpYS9jb2RlYzIvaGlkbC8xLjAvdnRzL21hc3Rlci9WdHNIaWRsQzJWMV8wVGFyZ2V0TWFzdGVyVGVzdC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDFlNjRjYgotLS0gL2Rldi9udWxsCisrKyBiL21lZGlhL2NvZGVjMi9oaWRsLzEuMC92dHMvbWFzdGVyL1Z0c0hpZGxDMlYxXzBUYXJnZXRNYXN0ZXJUZXN0LmNwcApAQCAtMCwwICsxLDEwMSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxOCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCisKKy8vI2RlZmluZSBMT0dfTkRFQlVHIDAKKyNkZWZpbmUgTE9HX1RBRyAiY29kZWMyX2hpZGxfaGFsX21hc3Rlcl90ZXN0IgorCisjaW5jbHVkZSA8YW5kcm9pZC1iYXNlL2xvZ2dpbmcuaD4KKyNpbmNsdWRlIDxndGVzdC9ndGVzdC5oPgorCisjaW5jbHVkZSA8Y29kZWMyL2hpZGwvY2xpZW50Lmg+CisKKyNpbmNsdWRlIDxWdHNIYWxIaWRsVGFyZ2V0VGVzdEJhc2UuaD4KKyNpbmNsdWRlICJtZWRpYV9jMl9oaWRsX3Rlc3RfY29tbW9uLmgiCisKK3N0YXRpYyBDb21wb25lbnRUZXN0RW52aXJvbm1lbnQqIGdFbnYgPSBudWxscHRyOworCituYW1lc3BhY2UgeworCisvLyBnb29nbGUuY29kZWMyIE1hc3RlciB0ZXN0IHNldHVwCitjbGFzcyBDb2RlYzJNYXN0ZXJIYWxUZXN0IDogcHVibGljIDo6dGVzdGluZzo6VnRzSGFsSGlkbFRhcmdldFRlc3RCYXNlIHsKKyAgIHByaXZhdGU6CisgICAgdHlwZWRlZiA6OnRlc3Rpbmc6OlZ0c0hhbEhpZGxUYXJnZXRUZXN0QmFzZSBTdXBlcjsKKworICAgcHVibGljOgorICAgIHZpcnR1YWwgdm9pZCBTZXRVcCgpIG92ZXJyaWRlIHsKKyAgICAgICAgU3VwZXI6OlNldFVwKCk7CisgICAgICAgIG1DbGllbnQgPSBhbmRyb2lkOjpDb2RlYzJDbGllbnQ6OkNyZWF0ZUZyb21TZXJ2aWNlKAorICAgICAgICAgICAgZ0Vudi0+Z2V0SW5zdGFuY2UoKS5jX3N0cigpKTsKKyAgICAgICAgQVNTRVJUX05FKG1DbGllbnQsIG51bGxwdHIpOworICAgIH0KKworICAgcHJvdGVjdGVkOgorICAgIHN0YXRpYyB2b2lkIGRlc2NyaXB0aW9uKGNvbnN0IHN0ZDo6c3RyaW5nJiBkZXNjcmlwdGlvbikgeworICAgICAgICBSZWNvcmRQcm9wZXJ0eSgiZGVzY3JpcHRpb24iLCBkZXNjcmlwdGlvbik7CisgICAgfQorCisgICAgc3RkOjpzaGFyZWRfcHRyPGFuZHJvaWQ6OkNvZGVjMkNsaWVudD4gbUNsaWVudDsKK307CisKK3ZvaWQgZGlzcGxheUNvbXBvbmVudEluZm8oY29uc3Qgc3RkOjp2ZWN0b3I8QzJDb21wb25lbnQ6OlRyYWl0cz4mIGNvbXBMaXN0KSB7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBjb21wTGlzdC5zaXplKCk7IGkrKykgeworICAgICAgICBzdGQ6OmNvdXQgPDwgY29tcExpc3RbaV0ubmFtZSA8PCAiIHwgIiA8PCBjb21wTGlzdFtpXS5kb21haW47CisgICAgICAgIHN0ZDo6Y291dCA8PCAiIHwgIiA8PCBjb21wTGlzdFtpXS5raW5kIDw8ICJcbiI7CisgICAgfQorfQorCisvLyBMaXN0IENvbXBvbmVudHMKK1RFU1RfRihDb2RlYzJNYXN0ZXJIYWxUZXN0LCBMaXN0Q29tcG9uZW50cykgeworICAgIEFMT0dWKCJMaXN0Q29tcG9uZW50cyBUZXN0Iik7CisKKyAgICBDMlN0cmluZyBuYW1lID0gbUNsaWVudC0+Z2V0TmFtZSgpOworICAgIEVYUEVDVF9ORShuYW1lLmVtcHR5KCksIHRydWUpIDw8ICJJbnZhbGlkIENvZGVjMkNsaWVudCBOYW1lIjsKKworICAgIC8vIEdldCBMaXN0IG9mIGNvbXBvbmVudHMgZnJvbSBISURMIENvZGVjMkNsaWVudCBpbnN0YW5jZQorICAgIGNvbnN0IHN0ZDo6dmVjdG9yPEMyQ29tcG9uZW50OjpUcmFpdHM+IGxpc3RUcmFpdHMgPQorICAgICAgICBtQ2xpZW50LT5MaXN0Q29tcG9uZW50cygpOworCisgICAgaWYgKGxpc3RUcmFpdHMuc2l6ZSgpID09IDApCisgICAgICAgIEFMT0dFKCJXYXJuaW5nLCBDb21wb25lbnRJbmZvIGxpc3QgZW1wdHkiKTsKKyAgICBlbHNlIHsKKyAgICAgICAgKHZvaWQpZGlzcGxheUNvbXBvbmVudEluZm87CisgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbGlzdFRyYWl0cy5zaXplKCk7IGkrKykgeworICAgICAgICAgICAgc3RkOjpzaGFyZWRfcHRyPGFuZHJvaWQ6OkNvZGVjMkNsaWVudDo6TGlzdGVuZXI+IGxpc3RlbmVyOworICAgICAgICAgICAgc3RkOjpzaGFyZWRfcHRyPGFuZHJvaWQ6OkNvZGVjMkNsaWVudDo6Q29tcG9uZW50PiBjb21wb25lbnQ7CisgICAgICAgICAgICBsaXN0ZW5lci5yZXNldChuZXcgQ29kZWNMaXN0ZW5lcigpKTsKKyAgICAgICAgICAgIEFTU0VSVF9ORShsaXN0ZW5lciwgbnVsbHB0cik7CisKKyAgICAgICAgICAgIG1DbGllbnQtPmNyZWF0ZUNvbXBvbmVudChsaXN0VHJhaXRzW2ldLm5hbWUuY19zdHIoKSwgbGlzdGVuZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmNvbXBvbmVudCk7CisgICAgICAgICAgICBBU1NFUlRfTkUoY29tcG9uZW50LCBudWxscHRyKSA8PCAiQ3JlYXRlIGNvbXBvbmVudCBmYWlsZWQgZm9yICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDw8IGxpc3RUcmFpdHNbaV0ubmFtZS5jX3N0cigpOworICAgICAgICB9CisgICAgfQorfQorCit9ICAvLyBhbm9ueW1vdXMgbmFtZXNwYWNlCisKK2ludCBtYWluKGludCBhcmdjLCBjaGFyKiogYXJndikgeworICAgIGdFbnYgPSBuZXcgQ29tcG9uZW50VGVzdEVudmlyb25tZW50KCk7CisgICAgOjp0ZXN0aW5nOjpJbml0R29vZ2xlVGVzdCgmYXJnYywgYXJndik7CisgICAgZ0Vudi0+aW5pdCgmYXJnYywgYXJndik7CisgICAgaW50IHN0YXR1cyA9IGdFbnYtPmluaXRGcm9tT3B0aW9ucyhhcmdjLCBhcmd2KTsKKyAgICBpZiAoc3RhdHVzID09IDApIHsKKyAgICAgICAgc3RhdHVzID0gUlVOX0FMTF9URVNUUygpOworICAgICAgICBMT0coSU5GTykgPDwgIkMyIFRlc3QgcmVzdWx0ID0gIiA8PCBzdGF0dXM7CisgICAgfQorICAgIHJldHVybiBzdGF0dXM7Cit9CmRpZmYgLS1naXQgYS9tZWRpYS9jb2RlYzIvaGlkbC8xLjAvdnRzL3Jlcy9iYmJfMzUyeDI4OF80MjBwXzMwZnBzXzMyZnJhbWVzLnl1diBiL21lZGlhL2NvZGVjMi9oaWRsLzEuMC92dHMvcmVzL2JiYl8zNTJ4Mjg4XzQyMHBfMzBmcHNfMzJmcmFtZXMueXV2Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI1YTNlNGIKLS0tIC9kZXYvbnVsbAorKysgYi9tZWRpYS9jb2RlYzIvaGlkbC8xLjAvdnRzL3Jlcy9iYmJfMzUyeDI4OF80MjBwXzMwZnBzXzMyZnJhbWVzLnl1dgpAQCAtMCwwICsxIEBACivKysrKysrKysrKysrLy8vLy8vLy8vLy8zMzMzNzc3Nzc3Nzc3NzczMzMvLy8vLy8vLy8vLy8vLzMvLy8vLy8vLy8vLy8vMzMzMzM3Nzc7Oz8/Pz9DQ0NHR0dLS0tLS0tLT09PT0tLS0tLS0tLT09TU1NTU09PT09PT09PT09PT09PT09PT09PT09PT09PT09PS0tLS0tLS0tLS0tPT09PT1NTV1dXV1dXV1dXV1dXV1dXV1NTU1NTT09PT09PT09PT09TU09PU1NTU1NTU1NTU09PT09PS0tLS0tPT09TU1NTU1NPT09LS0tLS0tLR0dHR0dPHhnNlYFtLWWdVTUZIQD03Nzg5Nzw8PDo8Oz42Oj04PDs6OTg3ODs7Oj87PTs8PD47P0E/QkJBQ0RFREE+PTw7QENDQUBDQ0FBR0hHSUtSwtXS09PT09TU1NTU1NTU1NTU1NXV1dXV1dXV1dXVysrKysrKysrKysrKy8vLy8vLy8vLy8vMzMzMzMzNzc3Nzc3Nzc3MzMzMy8vLy8vLy8vLy8vLzMzMy8vLy8vLy8vLy8vLzMzMzc3Nzc3Oz8/P0NDQ0NHR0tLS0tLS09PT09PT09PT09PS09PT09TU1NTU1NTU09PT09PT09PT09PT09PT1NTU1NTU1NTT09PT09LS0tLS0tLT09PT09PU1NTU1dXV1dXV1dXV1dXV1dXV1dXV1NTU1NPT09PT09PT09PU1NPT09TU1NTU1NTU1NPT09PS0tLS0tPT09PU1NTU1NTU09PT09PS0tLS0tLR0dHSzIxyZ2BcTVllUktHSz87Mzc4Ozg5Pj05PDpBOjs9Nzs8PDo6Nzg6Ozw/Oz88PTw/Pj9BPUFBPkNDREJAQT46Oz9EREFDRERCQklHSEhJTr7V0tPT09TU1NTU1NTU1NTU1NXV1dXV1dXV1dXV1crKy8vKysrKysrKy8vLy8vLy8vLy8vLy8zMzMzMzM3Nzc3Nzc3NzMzMzMzMy8vLy8vMzMzMzMzMzMzLy8zMzMzMzMvLzMzMzc3Nzc3Ozs/P0NDQ0NDR0dLS0tLS09PT09PT09PU09PT09PT09TU1NXV1dTU1NTT09PU1NPT09PT09PT1NTU1NTU1NTU1NPT09PS0tLS0tLS0tPT09PT1NTV1dXV1dXV1dXV1dXV1tbV1dXV1dTU1NTT09PT09PT09PU1NTU09TU1NTU1NTU1NTT09PT0tLS0tLT09PU1NTU1NTU1NTU09PT09PT0tLS0tHR0s+Sd2hfXk9XZ01LRks9ODc2NTk5OTw+OT88Qzk7PDc5PD07OTc5Ojw9QDs+PT47PD48PT5BQD5EQ0NDP0E9Ojs+QkNFQ0NEQT9FSEpJSky61dPT09TU1NTU1NTU1NTV1dXV1dXV1dXV1dXV1dXLy8vLy8vLy8rKysvLy8vLy8vLy8zLy8vMzMzMzMzNzc3Nzc3Nzc3MzMzMzMzMzMzMzMzMzMzMzczMzMzMzMzMzMzMzMzMzc3Nzc3Ozs/Pz9DQ0NDQ0dHS0tPT09PT09PT09TU1NTU09TU1NTU1NTV1dXU1NTU1NPU1NTU09PT09TU1NTU1dTU1NTV1dTU09PT09LS0tLS0tLS09PT09TU1dXV1dbW1dXV1dXV1tbW1tXV1dXV1NTU1NTT09PT09PT1NTU1NTU1NTU1NTU1NTU09PT09LS0tLT09PU1NTU1dXV1dTU1NTT09PT09PT0tLS0dHRmn5nYWJOVWpKSElLPzw6OTM3Njc3PDs+Oj06Ojo4ODo7Ozg4Ojo7PD46PT09Ojw/PD0/QkA/Q0RDRD5APT08QENEQ0JEQkQ+REhJSUtMttfT09TU1NTU1NXV1dXV1dXV1dXV1dXV1dXV1dXVy8vLy8vLy8vLy8vLy8vLy8vLy8zMzMzMzMzMzMzNzc3Nzc3Nzc3Nzc3MzMzMzMzMzMzMzMzNzc3NzczMzMzMzMzMzMzMzc3Nzc3Ozs7Pz8/Q0NDQ0NHS0tLT09PT09PT1NTU1NTU1NTU1NTU1NTV1dXV1NTU1NPT1NTU1NTU1NTU1NTU1dXV1NXV1dXV1NTU09PT09PS0tLT09PT09PU1NXV1dbW1tXV1dbW1tbW1tbW1dXV1dXU1NTU1NTU1NTU1NTU1NTU1NTU1NXU1NTU1NTT09PT09PT09PU1NTU1dXV1dXV1dTU1NTU09PT09PS0tLR0p+DaV9kU1hsSEhIS0A9Nzg0NzY6Oj47RDw9Ojw8OTg6OTo6OTs8Ojo7OT48Pjk9QDs/QUFCP0JCQUM9Pz8+PEBCRUNDQkBBO0ZJR01MSbLY09TU1NTU1NXV1dXV1dXV1dXW1tbW1tbV1dXW1svLy8vLy8vLy8vLy8vLy8vLy8vMzMzMzMzMzM3Nzc3Nzc3Nzc3Ozc3NzczMzMzMzMzMzc3Nzc3Nzc3Nzc3Nzc3Nzc3Mzc3Nzs7Ozs7Pz8/P0NDQ0NHS0tLS09PT09PT09TU1NTU1NTU1NTU1NTV1NXV1dTU1NTU1NTU1NTU1NTV1NTU1dXV1dXV1dXV1dTU1NTU1NPT09PT09PT09PU1NXV1dbW1tbW1tbW1tbW1tbW1tbV1dXV1dTU1NTU1NTU1NTU1NTV1NTU1NXV1dXU1NTU1NTT09PT09PT1NTU1dXV1dXV1dXU1NTU1NTT09PT09LS0tSjiGxfZlJWakdIR0lBPTM2Njo7PDhDPEFBPjxBPDg5Ojw6Ojw8PDk8PTo7PD09PD89QD9AQT9AQUBCPD4+PzxCQ0NDRkBBQT1ISklOTUeu2NPU1NTV1dXV1dXV1dXV1dbW1tbW1tbW1tbW1tbLy8vMy8vLy8vLy8vLy8vLy8vMzMzMzc3Nzc3Nzc3Nzc3Nzc3Nzs7Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Ozs3Nzc3Nzc3Nzc3Nzs7Ozs7Oz8/P0NDQ0NHR0dLS0tPT09PT09PT1NTU1NTU1NTU1NTU1NTV1dXV1dTU1NTU1NTU1NTU1dXV1dXV1dXV1dXV1dXU1NTU1NTU09PT09PT1NTU1NTV1dbW1tbW1tbW1tbW1tbX19bW1tXV1dXV1dXV1dXV1dTU1NTU1dXV1dXV1dXU1NTU1NTU09PT09PT1NTU1NXV1dXV1dXV1dXV1NTU1NPT09PT0tLWroprY2VSWGhMSkdJQjg0OTQ6Ozo5QDk+Q0U/PDs5OTk9Oj07PDw6PTw7OTw9Ozs/PUA9PT5AQD9CQT5APD05QERDQkFBQj48SEpLTU5HqNnU1NXV1dXV1dXV1dXW1tbW1tbW1tbW1tbW1tbWy8vMzMvLy8vLy8vLy8vLy8rKy8vLy8zMzMzMzMzMzM3Nzc3Nzc7Ozs3Nzc3Nzc/Pz8/Pz8/Pz8/Pz9DQ0dHR0dHR0dHR0dHS0tHV2djY2NnZ2dra2trb29vZ2dnZ2dnZ2dra2tra2tjW19fX19fX19jX2NfX19rb2tra2tra2tvc29vb3Nzc3Nzc3Nzd3Nvb29va1NPT09PT09PT09PU1NbV1dXV1dXV1dXV1dXW1tbX1tbW1tbV1dXV1dXV1dXV1dTU1dXV1dXV1dXU1NTU1NTU1NTU09PU1NTU1NXV1dXW1dXV1dXV1dTU1NTT09PT09PS1bqKa2hoUlhkSUlMTkA5OTozO0A8Nz05QUM9QD89ODo6Ozk9Oz4/Ojs8PDo7PDo7Pj1APT8/P0FAQUE/QTw8Oz5BRENBREA9PElJSk1NRqPa09TV1dXV1dXV1dXW1tbW1tbW1tbW1tbW1tbW1szMz9DPz8/Pz8/Pz8/Pz8/W3t3d3t7e3t7e3t7e3t3S0NDQ0NDQ0NDQ0NDQ0ci5ubm5ubm5ubm5ubq6t6WkpKSkpKSkpKSkpKSnhmBjY2NjY2NjY2NjZGRlhIuKioqKioqKioqKioemuri4uLi4uLi4uLi4ubSNi4uLi4uLi4uLioqKi4eBgoKCgoKCgoGBgYF/kdPT09PT09PS0tLS09PT2+Lh4uLi4uLi4uLj4+Pi2NfX1tbW1tbW1tbV1dXV1dXV1dXV1dbW1dXV1dXV1dTU1NTU1NTU1NTV1dXV1dXW1dXV1dXV1dXV1NTU1NTT09PT09XDkXJsaU5SYkxMVk08Ojo3Nz5DPzg+Oj8/QTw/QDc7Ojs7PTs+Pjo7PD48Oz07PT8+QDw/Pz1AQEBBPj88PjxAQUVCQkZAQD9HSEpLUEae2tXV1dXV1dXW1tbW1tbW1tbW1tbW19fX19fX19fMzNDS0tLS0tLS0tLS0tLR3uvr6+rq6urq6urq6uvp1dLS0tLS0tLS0tLS0tTEqaqqqqqqqqqqqqqqq6aGhIWFhYWFhYWFhYWFik4MEhISEhISEhISEhIRE0pUU1NTU1NTU1NTU1NPg6ejo6Ojo6Ojo6Ojo6ScWFJTU1NTU1NTU1NTU1RNQ0RERERERENDQ0RDP13R09PT09PT0tLS0tLS0t/q6+vr6+vr6+vr6+vr6dnX19fX1tbW1tbW1tbW1dXV1dXV1dbW1tbV1dXV1dXV1dXV1dTU1NTV1dXV1dXW1tXV1dXV1dXV1dXU1NTU1NTU1NPUy5h3bGlKTl9NUlVNPjw8NztAQz42Ojc+Pzs9QkA5PDk9Ozw6PD07PTs9Ozs9PD0+PT07QT08QUBBQT08Pzw7QEJDQURFPUFAQ0ZLS09GmNzV1dXV1dbW1tbW1tbW1tbW1tfX19fX19fX19fXzMzQ0tLS0tLS0tLS0tLS0d3q6enp6enp6enq6unq6dXS0tLS0tLS0tLS0tLUxaqrq6urq6urq6urq6yoiIeHh4eHh4eHh4eHh41SEhgYGBgYGBgYGBgYFxpOWVdXV1dXV1dXV1dXU4WopKSkpKSkpKSkpKSmnlxWV1dXV1dXV1dXV1dYUUlJSUlJSUlJSEhISERg0NPS0tLS0tLS0tLS0tHf6urq6urq6urq6urq6unZ19jX19fX19fX1tbW1tbW1tbW1tbW1tbW1tbV1dXV1dXV1dXV1dXV1dXV1dXW1tbW1tXV1dXV1dXV1dXU1NTU1NTU1NGcenFpSlRdT1JVTkQ+Pzs+QEA4Ojs4PDw8Oz46Ojs4Ozk5Ozw7Ojw5Ozs8Ozo9PT0+PUE/Pj8/Pj08PT88PEFBQ0FERTw+QEVGSktNRpPc1dXV1tbW1tbW1tbW1tbW1tfX19fX19fX19fX183Nz9HR0tLS0tLS0dLR0dDc6Ofn5+fn5+fn5+fn5+bV0dLS0tLS0tLS0tLS08Wtrq6urq6urq6urq6vq46NjY2NjY2NjY2NjY2SXSInJycnJycoKCgoKCcpWmNiYWJhYWJiYmJiYl6MrKmpqampqampqampqqNnYWJiYmJiYmJiYmJiYlxUVFRUVFRUVFRUVFVRa9DS0tLS0tLS0tLS0tLR3+np6enp6enp6enp6enn2djY2NjY19fX19fX19fX19fX19bW1tfX19fW1tbW1tbV1dXV1dXV1dXV1dXV1tbW1tbW1tbW1tbV1dXV1dXU1NTU1NTWo3txZElbYE5OVU9AQT89REI+Oz06OTo6PTw7PDs6OTg5OTs8Ozw8Ojo7PDo7QD08PTxAQTxBQTs7PEA/PD1CP0RDQ0U8PkJERkpMTEWN3NXV1tbW1tbW1tbW1tbX19fX19fX19fY2NjY2NjNzc3Ozs7Ozs7Ozs7NzMzMzs/Pz8/Pz8/Pz9DQ0NDQz87Ozs7Ozs7Ozs7Ozs7Ny8zMzMzMzMzMzMzMzMvJycrKysrKysrKysrKysfCw8PExMTExcXFxcbGxsvMy8zLzMzMzMzMzMzLz9HR0tLS0tLS0tLS0tLRzczMzMzMzMzMzMvLy8vKysrKysrKysvLysrLy83V1dXW1tbW1tbW1tbW1dfY2NnZ2dnZ2dnZ2dnZ2djY2NjY2NjY2NjY2NfX19fX19fX1tfX19fX19bW1tbW1tbW1tXV1dXV1dXV1dbV1dbW1tbW1tbW1tXV1dXV1dTU1NTU169/cF5GXmJQUVdOR0ZDQ0lBPz07PDo8N0BBPD04Ojs4OTg7Pzs8PDs7PDw8PD87PD46Pj44PkI8Pj1BPjw+QkBERUNAPD5APkNJSUtEh9zV1tbW1tbW1tbW1tbX19fX19fX19jY2NjY2NjYzs3Nzc3Nzc3Nzc3NzdHNzc3NzczP09LSzs3P0s7Ozs7Ozs7O0tPPz8/S1M/P0tTV1M/Pz8/Pz8/Pz8/Pz8/P0NDQ0NDQ0dHR0dHS09PU1NTU1dXV1tbW1tfW1tbX1tfX19fX19fX19bW1tbW1tbW1dbW1tbW1tfX19fX19fX1tbW1tbW1tfX19fX19fX19fX2NjX1tbW1tbX19fX19fX19fX19jY2NjY2NjY2NnZ2dnZ2dnZ2djY2NjY2NjY2NjY2NjX19fX19jY19fX1tbW1tbW1tbW1tbW1tbW1dbW1dbW1tbW1tbW1tbW1tXV1dXV1NTV1di4gm9XSl9jUlFaS0hBQTxCPT07Oj4+PD4/PT0/ODk6OTk3OD48PD47Ozw7PDs/PT0+OTs7OT0+P0A+QD07OkI/QkNCPz0+QD5CRUdKQoDc1tbW1tbW1tbW19fX19fX19fX2NjY2NjY2NjY2M7Ozs7Ozs7Nzc3Nzsqfys3Nzc3QuYOEi8fTwJrMz87Ozs7O0qucz9DTuZ/R0JyChIrIz87Ozs7Ozs7Ozs7Oz8/Pz8/P0NDQ0NDQ0NDR0dHR0tLT09PU1NTU1NTV1dXV1dXV1dXV1dXV1dXV1dXW1tbV1dXV1dbW1tbV1dXV1dXV1NTU1NXV1dXV1dXV1dXW1tbW1tbW1tbX19fX19fX19fY2NjY2NjY2NjY2NnZ2dnZ2dnZ2dnZ2dnY2NjY2NjY2NjY2NjY2NjY2NfX19fX1tbW1tbW1tbW1tbW1tbV1tbW1tbW1tbW1tbW1tbW1dXV1dXV1dXYwIBuVU9gY1dZW0xMQkA9PTw9Ojw9Qj5CQkA8Ojg5ODo6Ojc7Pz4/PDw7PDo5Pzw8PTg5PD9BPj09PUFAPTtBQkBCQz47QD9BQUlHSkF629bW1tbW1tbX19fX19fX19jY2NjY2NnZ2djY2dnOzs7Ozs7Ozs7OzdKpj63Rzs7Ozpu3tqSiwJOerNPOzs7O0racpaPVspeYtbaTuLmvotLOzs7Ozs7Ozs7Pz8/Pz8/Pz9DQ0NHR0dHR0dHS0tLT09TU1NTU1dXV1dXV1dXV1dXV1dXV1dXV1dXW1tbW1tXV1dbW1tbW1tXV1dXV1dXU1dXV1dXV1dXW1tbW1tbW1tbW1tfX19fX19jX19fY2NjY2NjY2djY2dnZ2dnZ2dnZ2dnZ2dnZ2djY2NjY2NjY2dnY2NjZ2NjY19fX19fX19bW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tXV1dXV1dXV18h/b1pTYWVeXVxPSkQ9QD8+PDc6Pjk/RD5AOTg3ODk7Ozw4OT89PTw9PD47OkE7OTs5OzxDQDw7PT5AQT49QkQ/QkM9PT8+Pz5ISUg/ddrW1tbX19fX19fX19fX2NjY2NjZ2dnZ2dnZ2dnZzs7Ozs7Ozs7Ozs/Inrym0tDQzsqgl36Cw6abr6fUz8/Pz86dnJGdw52ipqvSkX1+r7DRzs7Ozs7Ozs7Oz8/Pz8/Pz8/Q0NDR0dHR0dLS0tPT09TU1dXV1dXV1dXV1dXV1dXV1dXV1dXV1tbW1tbW1tbV1dXV1dXW1tbV1dXV1dXV1dXV1dXW1tbW1tbW1tbW1tbW1tfX19fX19jY2NjY2NjY2NjY2NjZ2dnZ2dna2dnZ2dnZ2dnZ2dnZ2djY2NjY2NnZ2dnZ2dnY2NjY2NfX19fX19fX19bW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1dbV1dXV1dfNiHNdWGloXl9gT0lGOkFAPj48PDk2P0I/Qjk2NDg6Ozo8Ojk+PD49PTs/PTxBPjw8Ojw8PTw6PEA9QEI+PkFCPUNDPT0+Oz9BRUtIQHDZ1tbX19fX19fX19fY2NjY2NjZ2dnZ2dnZ2dnZ2c/Pz8/Pz87Ozs7SrKWnqdXAvNLHnY+ey9PJipiq1M/Pz9G/mKCbsq3Ihpmt1dLNnp7D0M/Pz8/Pz8/Pz8/Pz8/Pz8/Q0NDQ0dHS0tLS09PT1NTU1dXV1dXV1dbW1tbW1dbW1tbW1tbV1tbW1tbW1tbW1dXV1dXV1dXW1dXV1dXV1dXV1dXW1tbW1tbW1tfX19fX19fX19fX19jY2NjY2NjY2NjY2NnZ2dnZ2dnZ2tnZ2dnZ2dnZ2dnZ2dnZ2dnY2dnZ2dnZ2dnZ2dnY2NjY19fX19fX19fX19bW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbV1dXW0JB1W1tqaWFeXVNOSTxDQEE+Pz46OEVAP0I7NzQ5Ojo5Ozs4Oz0/Pj49QT08P0A9Pjw8PDw8Oj1AQD8/PT5CQD9AQkA8QD0+QUVLRz9r19fX19fX19fX2NjY2NjY2NjZ2dnZ2dnZ2dnZ2tnPz8/Pz8/Pz8/QzJ2Nl6zQmpfKxZ6ynpbN1q2YqtTPz8/TtJmWqrik26OYrdXTwKCg0M/Pz8/Pz8/Pz8/Pz8/Pz8/P0NDQ0dHS0tLT09PT1NTU1NXV1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbV1dXV1dXV1dXV1dXV1dXV1dXW1tbW1tbW19fX19fX19fX19fY19fY2NjY2NjY2NjY2NjZ2dnZ2dnZ2drZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2djY2NjY2NfX19fX19fW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1dXV1tKUcl5ea2tqZV1PTEc/RENDQDo9OzxCPD08OTY0Ojk4Ojo5Nzs/QDs8PUA8PEE+PD07PTw/PDo8Q0A+PTs9QD5CPkBBPkA9QD9GSUQ/ZtXX19fX19fY2NjY2NjY2NnZ2dna2tra2tra2traz8/Pz8/Pz8/P07GigJuvyqCjv8qcpYynrdiqmarUz8/P1KuafqOPoNihmK3V1bCiqdTQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NHR0tLT09PT1NTU1NXV1dbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1dXV1dXV1dXW1tXW1tbW1tbV1tbW1tbX19fX19fX19fX19fY2NjY2NjY2NjY2NjY2NjY2dnZ2dnZ2dna2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2djZ2djY2NjY2NfX19fX19bW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbSk3BgXnBoZmVaUUhHQkVDQEA3Ojo8Pjk8OTc2NTk6Njo8Ozc8QEA8Ojo9Ojw/Pj08OUA8PDo6OT9APT08PUBBQz9APz5BOz9ARkpCP2LS2NfX2NjY2NjY2NjY2dnZ2dnZ2tra29vb29vb28/Pz8/Pz8/P0M6fkGyclteqo9PSrqa1mJ/Vqpmq1M/Q0NSsm6eLlqHZoZit1dSjobrU0dHR0NDQ0dHQ0NDQ0NDQ0NDQ0NHR0tLT09PT1NTU1dXV1dbW1tfX19bW1tbW1tbW1tbX1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tfW1tfX19jY2NfX19fX2NjY2NjY2NjY2NnZ2dnZ2dnZ2dnZ2dna2tnZ2dnZ2dnZ2dnZ2dnZ2dnZ2djY2dnZ2dnZ2dnZ2dnZ2NjY2NjY2NjX19fX1tbW1tbW1tbW1tbW1tbX19fX19fW1tbW1tbX0pNuYFxxZGdkWlVKQENHREFBODs/PD07PDw3NTU4OTY4Ozo5PDo+Pzw9PTk8Pz49Ojo+OT06Ojg+Pzw9PTw+QEFDQT48PDpCRERKRkJd0NnX19jY2NjY2NjY2dnZ2dna2trb29vb29vb29vPz8/Pz8/Pz9G9n8O31pfA09HQ0srSzZeb1KqZq9XRz9DTtrKypZmp2qGYrtbNnp/J0tHR0dHR0dHR0dHR0NDR0dHR0dHR0tLT09PU1NTV1dXV1tbW1tfX19fX19bW1tbW1tfX19fW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW19fX19fY2NjY2NjY2NjY2NjY2djZ2dnZ2dnZ2dnZ2dnZ2drZ2tnZ2dnZ2dnZ2dnZ2dnZ2djY2NjY2NjZ2dnZ2dnZ2dnZ2dnY2NjY2NjY2NfX19fX19fX19fW1tfX1tbX19fX19fX19fX19bW19GSbF1cb2doYl1PRj9ISEZFQDw8Pj48PT08NzU2Ojk2Ojs6Ojs4QD86PDw5PD49Ozs6Pzk/Ojs5PT49Pjw7PTxAQ0I/Pz47Q0ZGR0hEWc3a2NjY2NjZ2dnZ2dnZ2dna2trb29vb29vb29vb0NDQz8/Pz8/Pz5V+e6WS1KKa08ySl6ObodirmavV0pem1cSimZabtNqjmK/Ywp+h0tHR0dHR0dHR0dHR0dHR0dHR0tLS0tLT09PU1NTV1dXV1tbW19fX19fX19fX19fX19fX19fX1tbW1tbW1tbW1tbX19bW1tbW1tbW1tbW1tbW1tbW1tbW1tfX19fY2NjY2NjY2NjY2NjY2dnZ2dnZ2dnZ2dnZ2dnZ2tra2tra2tnZ2dnZ2dnZ2dnZ2djY2NjY2NjZ2dnZ2tnZ2dnZ2dnZ2djY2NjY2NjY2NjX19fX19fX19fX19fX19fX19fX19fX19fX1tfPjGRWXnBrXGBgTkVITUlJT0M+OkI9PUBCOzU1Nzw6Nzo7Ojo7OT09OTo6OT0+Pz07OT47PDo8Ozk+PD47PD0+QENCPz5BPEFDR0ZGRVXJ29jY2NnZ2dnZ2dnZ2dra2tvb29vb29zc3Nzc3NDQ0NDQ0M/Pz9DR1aeZrcmjqL7KnbGdo7XZqZup2LiroMfVoqukmszYoZmt2rKkptbS0tLS0tLS0tLS0tLR0dHS0tLT0tPT09PU1NTV1dbW1tbX19fX19fX19fX19fX19fX19fX19bW1tbW1tfX19fX19fW1tbW1tbW1tbX19fW1tbW1tbW1tbX19fX2NjY2NjY2NnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dra2tra2tra2trZ2dnZ2dnZ2dnZ2djY2NjY2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnY2dnY2NjY2NjX19fX19fX19fX19fX19fY2NfX19fX19fYzYZdV2JvZE9dVEtIRlNRS0tAPj1EPD9DRj01NTc7OTY6Ozo8PTo7Pzo6OTg6PT0/Pjs/Oz49Ojs5Pjs9PD0+QURCQD8+PzxAQUVHRURSxdvY2dnZ2dnZ2dnZ2tra2tvb29vb3Nzc3Nzc3NzQ0NDQ0NDQ0NDQ0NO5gL3Tm5bP1LWLkZ/T1LyBu9TOlKDT08iRjbTV1LGEw9a5g7/V0tLS0tLS0tLS0tLS0tLS0tLT09PT09PU1NXV1dbW1tfX19fX19fY2NjY19fX19fX19fX19fX19fW1tbX19fX19fW1tbW1tbW1tbW19fX1tbW1tbW1tbX19fX19jY2NjY2NnZ2dnZ2dnZ2dnZ2tnZ2tra2tra2tra29ra2tra2tnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2NjY2NjX19fX19fX19fY2NjY2NjY2NjY2NfX2ct+WlVpaltMX01KTEpVTEZCPDw/RkVHS0g9NjY3Ojk3OTo7Ojw9OT45OTo4Oz0+PkE+PTk8PDo9Pj47PTk5Oj9FQUA+PT8/QkBHRURFUMHc2dnZ2dnZ2dna2trb29vb29vb3Nzc3Nzc3dzc0NDQ0NDQ0NDQ0NDQ0cHR0crI0tDUxLjS0tHSwtLQ08fM0tHUyMHV0dLRw9XS0cLT0tLS0tLS09PT09PT09LS0tPT09PU1NTU1NXV1dbW1tfX19fX19fX2NjY2NjX19fX2NfX19fX19fX19fX19fX19fX1tbW1tbW1tbW1tfX1tbW1tbW1tbW19fX19fY2NjY2NjY2dnZ2dnZ2dnZ2dra2tra2tra2tra29va2tra2tra2dnZ2dna2tnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dna2tnZ2dnZ2dnZ2djY2NjX19fX19fY2NjY2NjY2NjY2NjY19rHd1xSZ2laTlpOTFBRV0VKPz89P0FETExAPjc3NTs4ODk5Ojs8Pjw+ODo6OTs+P0A9Pj46NTo6Oz0/Ojs5Ojw+QkJAPz8/P0FCR0RDRE683dnZ2dnZ2dna2tvb29vb29vb3Nzc3Nzc3d3d3dDR0dDQ0NDQ0NDQ0NDS0NDR0dDQ0dPU0dHR0dPR0dHS0tHR0dPU0tLS0tXT09PV0tLS0tPT09PT09PT09PT09PT09PU1NTU1dXV1dbW1tfX19fX2NjY2NjY2NjY2NfX19jY19fX19fX19fX19fX19fX19fX1tbW1tbW1tbX19bW1tbW1tbW1tfX19fX2NjY2NjY2NnZ2dna2tra2tra2tra2tra2tra2tvb2tra2tra2trZ2tra2tra2tra2tra2tnZ2dnZ2dnZ2dnZ2trZ2tra29ra2trZ2dnZ2dnZ2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjbwXNYVWlrU0xSTlBSWVRGSTw+Qz9BQkVKPT03ODY5Nzc4OTk7Oz0/QDw9ODk7Ozs/Pjw8OTU6PT47OTk7PD8/P0JCQT1BPUBBQkZCQkJLtd7Z2dra2tra2tvb29vb29vc3Nzc3Nzd3d3d3d3R0dHR0dHR0dHR0dDQ0NDQ0NDQ0dHR0dHR0dHR0dHR0dHS0tLS0tLS0tPT09PT09PT09PT09PT09TU1NPT1NTU1NTU1NXV1dXV1dXW1tbX19fX2NjY2NjY2NjY2NjY19fY2NjX19fX19fX19fX19fX19fX19fX19fW1tbX19fX1tbW1tbW1tbX19fX19jY2NjY2NnZ2dna2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tnZ2dnZ2dnZ2NjY2NjY2NnZ2dnZ2dnZ2NjY2NjY3LxvVFRsbExLUkpUUlVLRkQ6PkdEREFERjw/ODk6OTU5OTo3PD07PkA9PTc5Ojs5Pjs5OTY2Oj1AQT47PDk6Pj9DQT4/Qj0+QkNFQkFCSrDe2dra2tvb29vb29vb29vc3Nzc3Nzd3d3d3d3d0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0tLS0tLS0tLS0tLS0tLS0tPT09PT09PT09PT09PT1NTU1NTU1NTU1NTU1dXV1dXV1tbW1tbW19fX19jY2NjY2NjY2NjY2NjY2NjY2NjY19fX19fX19fX19fX19fX19fX19fX19fX19fW1tbW1tfW19fX19jY2NjY2NjZ2dnZ2dra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2trZ2dnZ2dnZ2djZ2dnZ2dnZ2dnZ2dnZ2dnY2Ny2a1NbcGtLVVdSXFFXSEQ+PEJKRT1ISj89PDc4ODo1OTg5Njs+PD1APDw1OTk8Oj87OTk0ODw9PUFBPD47Ojw+QD89PkE9PUNGR0I/Qkmq39ra29vb29vb29vb3Nzc3Nzc3N3d3d3d3d3d3dHR0dHR0dHR0dHR0dHR0dHR0dHS0M/U0M7P0tLT0tLS0tLS0tLS0tPT09TU1NTU1NTU1NTU1NTU1NTU1NTU1NTV1dXV1dXV1dbW1tbW19fX19fY2NjY2NjY2NjY2NjY2NjY2NjY2NjX19fX19fX19jY2NfX19fX19fX19fX19fX19fX19fX19fX19jY2NjY2NjY2dnZ2dra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tvb29va2tra2tra2tra2tra2tra2tnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dndsGRTYXJfT1pUV19RUkdCPUVJS0FBTEQ/Pzs5ODg5Mzg2ODY5Pj0+Pz06Njo7Pjs9PTo5Njg6PTtAQDxAPz0/P0I+PD48PEJFSElCPkNJpODa29vb29vb3Nzc3Nzc3Nzc3N3d3d3d3d3d3t7S0tLS0tLS0tLS0dHR0dHR0dPT0bm7zLqbnLrQyNPT0tLS09PT09PT09PU1NTU1NTU1NTU1NTU1dXV1dXV1dXV1dXV1dbW1tbW1tbX19fX19fY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjX19fX19fX19fX19fX19fX19fX19jY2NjY2NjY2NjZ2dra2tra2tra2tra2tra2tra2tra2tra29va2tra29va2tvb2tra2tra2tra2tra2trb29vb29va2tra2tra2tra2tra2tra2tra2tnZ2dnZ2trZ2dnZ2dnZ2dnZ2dnZ3qpfVWBuW1VZUVpeT0xHQ0ZNSUZEQ0k7QUE7PDg4NjU4Njk4Nzw/QT89Ojc8Pz48Pz87OjY4OD09QEE9QD5BQD1AOjs6Pj1BRUdKQkBDR57h29vb29vc3Nzc3Nzc3Nzc3d3d3d3d3d7e3t7e0tLS0tLS0tLS0tLS0tLS0tO+wMqaoKKViJGeqpOpz9TT09PT09PT09PU1NTU1NTU1NTU1NTV1dXV1dXV1dXV1dXV1tbW1tbW1tbX19fX19fY2NjY2NnZ2dnZ2dnZ2dnZ2djY2djY2NjY2NjY2NjY2NjY2NjY2NjX19fX19fX19fX19fX19fX19fY2NjY2NjY2NjZ2dna2tra2tra2tra2tra2tra2tra29vb29vb29vb29vb29vb29vb29ra2tra2tra2tra2tvb29vb29va29vb29vb29va2tra2tra2tra2tra2tra2trZ2dnZ2dnZ2dnZ2d6iXFVeblheXU5aUFROQ0NMSUlJRklEPEFBPDs4NzY3OTc3OTk9P0E/PDo5QD88PkI/Ojg3NzY9P0BAPUBBPz88PTs7OD48P0VJSEE/Q0aX4dvb29zc3Nzc3Nzc3N3d3d3d3d3d3t7e3t7e3tPT09PT0tLS0tLS0tLS0tTIlZyum5m1iX2TjIKBhMTV09PT09PT09PU1NTU1dXV1dXV1dXV1dXV1dXV1dXV1tbW1tbW1tbW1tfX19fX19fX2NjY2NjY2dnZ2dnZ2dnZ2dnZ2dnZ2NjY2NjY2NjY2NjY2NjY2NjY2NfX19fX19fX19fX19fX19fX2NjY2NjY2NjY2dnZ2dnZ2dna2tra2tra2tra2tra29vb29vb29vb29vb29vb29vb29vb2tra2tra2tra2tvb29vb29vb2tvb29vb29vb2tra2tra2tra2tra2tra2tra2tra2tra2tnZ2dndmlpYYW5ZYVdPV01QRUJETElNS0ZJRT5CRDg4ODY3OTc1Njk4PT1BPjo4OT4+PD9APzw1Njc2PD4/PjtAQEA/Pj4/Pjs/PkFCRkdCQENIkeLb29zc3Nzc3d3d3d3d3d3d3d7e3t7e3t7f39/U09PT09PT09PT09LS0tLTz6h+kayPko6MhoCIiYSQo8rU09PT09PU1NTU1dXV1dXV1dXV1dXV1dbW1tbW1tbW1tbW1tbW19fX19fX19fX2NjY2NjY2dnZ2dnZ2dnZ2dnZ2dnZ2dnY2NjY2NjY19jY2NjY2NjY2NjY2NjX19fX19fX19fX19fY2NjY2NjY2NjY2NnZ2dnZ2dna2tra2tra2tra2tra29vb29vb29vb29vb29vb29vb29vb29ra2tra2tra2tvb29vb29vb29vb29vb29vb29va2tra2tra2tra2tra29vb29ra2tra2tra2tna3JJaWWNuWlpSVV5QTDxAR05IUklIRT48SEY4OTc1Nzg3NTg5ODs+Pj07ODlBPj1AP0E+NzU5Njs+QUI/P0BAQUI/Pj8+QUBEQUZIQj9FSozi3Nzc3Nzc3d3d3d3d3d3e3t7e3t7f39/f39/f1NTU09PT09PT09PT09PWtaWaiIuQhYCFi4iBg4qLf4bC1tTU1NTU1NTV1dXV1dXV1dXV1dXW1tbW1tbW1tbX19fX19fX19fX2NjY2NjY2NjY2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2djY2NjY2NjY2NjY2NjY2NjY2NjY2NjX19fX19fX19fY2NjY2NjY2NjY2dnZ2dna2dra2tra2tra2tra2tra2tvb29vb29vb29vb29vb29vb29vb29vb29ra2tra2trb29vb29vb29vb29vb29vb29vb29vb2tra2tra2tra29vb29vb29vb29vb2tra29uIWltnalxYTFpfVkg6TEhMSkpDREVDQUxINzo3Njc4ODU4Nzg5PDw7Ozk4QD89Pj8/PDY3PDQ3P0JCQUBAPz8/QT09P0A+QEBGRT09REuI4tzc3Nzd3d3d3d7e3t7e3t7e3t/f39/f39/f39TU1NTU1NPT09PT09PUxZKCg4WGfYGCfXx5foGCg36k29bU1NTU1NTV1dXV1dXV1tbV1tbW1tbW1tfX19fX19fX19fX19fX19jY2NjY2NjZ2dnZ2dnZ2dna2tnZ2dnZ2dnZ2dnY2NnY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjX19fX19fY2NjY2NjY2NjY2dnZ2dna2tra2tra2tra2tra29vb29vb29vb29vc3Nzc3Nvb29vb29vb29vb29vb2tra2tra29vb29zb29zb29vb29vb29vb29vb29vb29va2tvb29vb29vb29vb29vb29vb2tvZgFpebWhaU0ldW1hKRE1ISlNMR0ZBQD9KQjg7NjY5OTc1ODY4Ozo7Ojw5OD09O0A9Ozo2NTw3Oz1CQEFBPD49QEE9PEA/Pz5CREU+PERLg+Lc3d3d3d3d3t7e3t7e3t7f39/f39/f39/f39/V1dTU1NTU1NPT09PT2LKEkKh9g3l2hIh/e3d5gn5+i67A1dTU1NXV1dXV1tbW1tbW1tbW1tbW1tfX19fX19fY2NjY2NjY2NjY2NjY2NjZ2dnZ2dnZ2dna2trZ2dnZ2dnZ2dnY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2dnZ2dna2tra2tra2trb2tra2tvb29vb29vb29vc3Nzc3Nzc29vb29vb29vb29vb29va2trb29vb29zc3Nzc3Nvb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vc1nlcWmxmWFJPYFFSQUhHSkZYTEZAQENDSz87Ozc4ODc2NTc2ODo5PDw6PTs/PTs9Pjw7ODg8OT0/QkFCQzw8P0FCPj1BQkNCREVDQDtDTH3h3d3d3d3e3t7e3t7e39/f39/f39/f39/g4ODg1dXV1NXU1NTU1NPU0ruen3WKeXuIgICChYGDcnOAhYOMrNfV1NXV1dXW1tbW1tbW1tbW1tbW19fX19fX2NjY2NjY2NjY2NjZ2dnZ2dnZ2dnY2NnZ2dna2tra2trZ2dnZ2dnZ2djY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2dnZ2dna2tra2tra29vb29ra2trb3Nzc3Nzc29zc3Nzc3Nzc3Nzb29vb29vb29vb29rb29vb29vb29zc3Nzc3Nzc3Nvb29zc3Nzc3Nvb29vb29vb29vb29vc3Nzc3Nzc3Nvb29vb3dByXV9wZVdLUGNPS0JHQ0pIS0ZBPEE9SFFBOjo3Nzg3Njc4Nzw6OD09PD47QD88Pz07Ojs5Ojk8QEJAQkNAPUFAPz1AQkNDQUBAP0A7RU144N3d3d7e3t/f39/f39/f39/f3+Dg4ODg4ODg4NXV1dXV1dXV1NXU18h4i4V8goh6g4SBfoKCc2l0hYuGkJ3U1tXU1dbW1tbW1tbW1tbW19fX19fX19jY2NjY2NjY2NjZ2dnZ2dnZ2dnZ2dnZ2dnZ2dra2tra2tra2dnZ2dnZ2dnY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2dnZ2dna2tra2tra2tra2tvb2tvb3Nzc3Nzc3Nvc3Nzc3Nzc3Nzc29zb29vb29vb29vb29vb29vb29vc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc29vb297KalxjcWVST1heSz9HTElPS0VAPkFCP0lPPjk6NzY7NzY6Ozc7Ojg6PDw+Oz09Oz48Ojs4OTo4OUFCQkFAQDtAQj06PkFCQz8+PT4/PUZOdN/e3t7e3t7f39/f39/f4ODg4ODg4ODg4ODg4OHV1dXV1dXV1dXV1s6dhpl+f5OTin+CgXx9gnNxm4mAgoOJwNnat7TQ19bW1tbX19fX19fX19fX2NjY2NjY2NjY2NjZ2dnZ2dnZ2dnZ2tnZ2dnZ2dra2tra2tra2trZ2dnZ2dnZ2dnZ2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NnZ2dna2tra2tra2tra2tra29vb3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nvb29vb29vb29vb29vb29vc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3NvfwGNaW21gVlBTU0pETEhNSEk8PkFEQ0ZORDw8OTc5OjY4Ozk3PDk4OTw9OzlAPjpBPzw3NTc7ODpAQUVBPz45PUI/Oz1CQkI6Pj07PT5GTnHe3t7e3t/f39/f39/f4ODg4ODg4ODg4OHh4eHh1tbW1tbW1tbV1tjLioCHhYOXjHh7e3lvfYF1a3ebdHZ7eInHxpiMrdjZ19fX19fX19fY2NjY2NjY2NjY2NjY2NjY2dnZ2drZ2dna2tra2tra2tra2tra2tra2tra2dnZ2dnZ2dnZ2dnZ2dnZ2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NnZ2dnZ2dnZ2dna2tra2tra2tra2tra29vb3Nzc3dzd3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nvb29vb29zb29vb3Nzc3Nzc3Nzd3dzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3d3d3d3d3Nzc3Nzc4LdjV1lrYlJNVVFMSktGS0ZDQD5CQT9FTT4+PTg5OTo3OTo3NT03Nzo+PDs7Qjw5Pz05NjY4PTk6QEJGQD49PEBCREA9QD9DO0A9PD4/Rk9t3N/e3t/f3+Dg4ODg4ODg4ODg4OHh4eHh4eHh4dbW1tbW1tbW1tfVrYZ6d32rn3l4entzdH+Dfm9xe3l6c3t2k4qFgImkzdnY19fX2NjY2NjY2NjY2NjY2NjY2NjY2NnZ2dna2tna2tra2tra2tra2tra2tra2tra2tnZ2dnZ2dnZ2dnZ2dnZ2dnZ2djY2NjY2NjY2NjY2NjY2NjY2NjY2dnZ2dnZ2dnZ2dra2tra2tra2tra29vb29vc3Nzc3N3d3d3c3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc29vb29vc3Nzb3Nzc3Nzc3N3d3d3d3d3d3dzc3Nzc3Nzd3d3c3Nzc3Nzc3N3d3d3d3d3d3d3d3dzc3OGtYVtebGJSTVZMTUdLS0RGQkI7QT08RUxCQT44Ojk6Nzc5NjY6NTs+QDs9Oz89PD89Ojk5Ojw5PEVDRkA/PkBDQkQ9OT0/QT1CPz1APkdPadvf3t/f3+Dg4ODg4ODh4eHh4eHh4eHh4eHi4uLW1tbW1tbW1tfQmH+Qh4N9eoN2e3Vzenl6kKqmd3JyfoeHh4CAfoKEhJHJzNnX19jY2NjY2NjY2NjY2NjY2NjY2NnZ2dnZ2tra2tra2tra2tra29ra2tra2tra2tra2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2djZ2dnZ2dnZ2djY2NnZ2dnZ2dnZ2dnZ2tra2tra2tra2tra29vb29vb3Nzc3N3d3d3d3d3d3d3d3d3d3d3c3Nzc3Nzc3Nzb29vb3Nzc3Nzc3Nzc3Nzd3d3d3d3d3d3d3dzc3N3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3NzhpV9UYm1iUE9TSUhHRkpJSUJBPkJCPEVFREA+ODo4Ozc3Ojc4ODY+Pz07PDk9PDo+PTs6Njc7NjpEQUY+Pz8/PkNBPzs9PT47REM/PjxIT2fZ4N/f3+Dg4ODg4eHh4eHh4eHh4eLi4uLi4uLi1tbW1tbW19jYyH52doN+fnR2eIaCenl1d5yhu6GEgoCAfoeKinx/gYaMnKjO2NjY2NjY2NjY2djY2NjZ2djY2NjY2dnZ2dra2tra2trb29rb29rb2tra2tra2tra2tnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dna2tra2tra2tra2tra2trb29vb29zc3Nzc3N3d3d3d3d3d3d3d3d3d3d3d3dzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3e3t7e3t7e3d3d3d3c35pbT2drXFBRUElDT0pLR0xHSkJAP0FHREBBPDg8ODg1ODk3Njc3QEA/Ozw5Pj04PTw8Ojc4PTk/RENGPkE/QkBDPzw6Pj0/PkVEPz07S1Fj1+Hf4ODg4ODh4eHh4eHh4uLi4uLi4uLi4uLj49bW1tbW19XB3LRueHJze3B6eXaFiIR7eH2AgZiljH98fnuRhZaLhoGDgY6Rvd3Z2NjY2NjZ2dnZ2dnZ2dnZ2dnY2dnZ2dna2tra2trb29va2tva2tra2trb29ra2tra2tnZ2dnZ2dnZ2dnZ2dna2trZ2dnZ2dra2tra2tnZ2dnZ2dna2tra2tra2tra2tra2tra2trb29vc3Nzc3Nzc3N3d3d3d3d3d3d3d3d3d3d3d3d3d3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3e3t7e3t7e3t7e3t7e3t7e3t3d3d6NWFdobllQUUtISlNJTUhNSUtBQz9DRkJBRDo6PDg2NDg4NzY2Nj8+Pjo8OTw7Oj09PDw4Ozw8RERERD4/PkI+Qj84PT8/Q0NCQEE+O0xUY9Xh3+Dg4OHh4eHh4eLi4uLi4uLi4uLi4uPj4+PW1tbW1teslLZ6eHJvd5V7dHuLgHh1bn6Fg3t/hYhyfH2bnI6JioJ+g32Hk5rH1NjY2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dna2tra2trb29vb29vb29vb2tra2tra2tra2tra2tnZ2dnZ2dnZ2dna2tra2tra2tra2tra2tra2tra2tra2tra2trb2tra2tra2tra2trb29vc3Nzc3Nzc3Nzd3d3d3d3d3d3d3d3d3d3d3d3d3d3c3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3N3d3d3d3d3d3d3d3d3d3d3d3d3e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3d7Zf1lgaGxcUUtHR09LTk5PTURGQkg/Q0hEREA6Ozs4NzU3Nzc4NThAPkA7PDk8Ozw+Ojk7OTk7OUZERUI8QD4/PEBDOz5AP0A/Qj8+OjtKVWPV4eDg4eHh4eHi4uLi4uLi4uLi4uPj4+Pj4+Pj1tbX19vKhYR3cXJubniVhHt4hH95dnB4c3eLkY6CdnN9ioaId3d1d4ODfIiIk8Pb2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dra2trb2tvb29vb29vb29vb29rb2tra2tra2tra2tra2tnZ2dnZ2dna2tra2tra2tra2trb2tra2tra2tra2tra2trb29vb2tra2trb29vb29vb3Nzc3Nzc3Nzd3d3d3d3d3d3d3d3d3d3d3d7e3d3d3d3c3Nzc3Nzc3Nzc3Nzc3Nzc3d3d3d3d3d3d3d3d3d3d3d3d3d7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7f0nVZaGlqVk5KSE1OR01EUElGSD9FPUZMREM+Ozs8OTc3OTY2OTU4Pj4/PTs8QDs9PDo3Ozc5OThHREVCPUE9Qj8+QDw/QUE/QEJAPjs8S1Ri1OLg4eHh4eLi4uLi4uLi4+Pj4+Pj4+Pj4+Pj49fX19fEknuJf29sbnV2foSBg4qGfnVybWVtiIaKjoR7c4OHint4e4OPj4GEioqxztrZ2dnZ2dnZ2dna2tra2tra2tra2trb29vb29zc3Nzb29vb29vb29va2tra2tra2tra2tra2tra2tra2tra2tra2tra2tvb29va2tra2tra2tvb2tvb29vb29vb29vb29vb29vb29zc3Nzc3Nzc3d3d3d3d3d3d3d3d3d3d3t7e3t3d3d3d3d3d3d3d3dzc3Nzc3Nzc3d3d3d3d3d3e3t7e3t7e3t7e3t7e3t7e3t7e3t7f39/f39/f39/f39/f3t7e4clsW2pqalNOR0hOT0VIRk1JSUA7RD5ISUA9PDo6Ojg2ODo3Nzk0OD08PT07ODw8PDw4Njc4OTo6RUJFQT9APEI/Q0M+PkNEQUBAP0A8PUtRYdPj4OHh4uLi4uLi4uPj4+Pj4+Pj4+Pj4+Pj5OTX19fZqXaFfnx3bHB3eXh8jH2KhYB3anN0d3p9bot7fnl6foR/gIGDfnh8foeGlrbT2tnZ2dra2tra2tra2tra2tra2tvb29vb3Nzc3Nzc3Nvb29vb29vb29ra2tra2tra2tra2tra2tra2tra2tra29ra29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb3Nzc3Nzc3Nzc3d3d3d3d3d3d3d3d3d3d3d7e3t7d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3t7e3t7e3t7e3t7e3t7e3t7e3t7e39/f39/f39/f39/f39/f39/e3uO9amFpa2lRTkZNTEtKWE1OR0FAQE9BRD9AOzw4ODk5Njg2NjY4NDs+PD07OTY6Ojk6OTU4OTg5OkJERj8+Pj5AQEBCPzxBQD88Pj9BOT5KT17S4+Hh4eLi4uLi4+Pj4+Pj4+Pj4+Pj4+Tk5OTk19fX2sqKhIB5c29tcXN1d4CUeHaAfHWHhXd1cnWgmXp7d3Z5doR0bWxue3iAmouTu9za2tra2tra2trb29vb29vb29vb29zc3Nzc3Nzc3Nzc3Nzc29vb29vb2tra2tra2tra2tra2tra2tra2tra29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vc3Nzc3Nzc3Nzc3d3d3d3d3d3d3d3d3d3d3d3e3t7e3t3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3t7e3t7e3t7e3t7e3t7e3t7e3t/f39/f39/f39/f39/f39/f39/f397js2lpbmloUFBPTExPUk9LU0Y/RURERT48PDg6ODc5OTU2ODY2NzM6Pjs+PTc6Pjk5OTk2Ojo4NzxDRUc/Pzs/PkA9PkE8Oz0+OUFAQDhBTlFc0OTh4eLi4uLj4+Pj4+Pj4+Pj4+Pk5OTk5OTk5NjY2NjauY6AenZ1bmpveHCBfWt0cnZ3hIV5h4d5lY55eXp1d3pza298gHx2fYh8gLLe2tra2tvb29vb29vb29vc3Nzc3Nzc3Nzc3dzc3Nzc3Nzc3Nzb29vb29rb29vb29ra2tra2tra2tra29va29vb29vb29vb29zc3Nzb29vb29vb29vb29vc3Nvb3Nzc3Nzc3Nzc3Nzc3Nzc3d3d3d3d3t7e3t7e3d7e3t3d3t7e3t7e3t7d3d3d3d3d3d3d3d3d3d3d3d3d3t7e3t7e3t7e3t7f39/f39/f39/f39/f39/f39/f4ODg4ODg4N/f39/f4qpqa2hrZFNQT0ZQVFJOSFJLPkREQ0I7Ozk5Ojg2Nzg1NjY4ODg0Oz88Pzw5PDw3Ozo6Nzo6Nzo9Q0JDPUE+Pzw5PT5BQDs8PDtFQD47Q05TXNDk4eLi4uLj4+Pj4+Pj4+Pj5OTk5OTk5OTk5OTY2NjZ1p5vdntveHh2cG50d3BwdHBzb36Jc3qGhY2EenNtcoB6hn1vg5OBdnx9g4a13drb29vc29vc3Nzc3Nzc3Nzc3Nzc3Nzc3d3d3Nzc3Nzc3Nzc3Nzb29vb29vb29vb2tra2tra2tvb29vb29vb3Nzc3Nzc3Nzc3Nzc3Nzc3Nvb29vb29vc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzd3d3d3d3d3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3d3d3d3d3d7e3t7e3t7e3t7e3t7f39/f39/f39/f39/f39/f39/g4ODg4ODg4ODg4ODg4N/f3+KgbWhma2ZVVlJHUFFOS0xMRUJIRUc9OD08Ojo3Nzg2Nzc2NTY3NDg+PD09Ojg6OD46Ozc4Nzc6Oj5DRDtDQj49OD1AQUQ/Pjw+RTw+PUJNUF/S4+Hi4uLj4+Pj4+Pj4+Pk5OTk5OTk5OTk5OTk2NjY3MB2doCCfnp4eHBsdXlya399bHNvdGdoaYB/aWl4c2d+iYl4cIKGe3d9foWKvN3b3Nzc3Nzc3Nzc3Nzc3Nzc3d3c3Nzc3N3d3dzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nvb29vb29vb29vb3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzd3d3d3d3d3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7f39/f39/f39/f39/f39/f4ODg4ODg4ODg4ODg4ODg4ODg4ODflGttZm5mU1NJUFlUTEhGTkZGRUJGPTs+PDs5Nzc4NTc5NjQ1NzU4PDs9Pjo6OztAOTs7ODc6OTlAQkE8QUE/Pzk/QEJFQ0FAQEM7Oz1ES01g1uTi4uLi4+Pj4+Pj4+Pk5OTk5OTk5OTk5OTk5NnZ2tmYc3uqhJaCcnR1dn14aGx8d2h4d25rcXR5gIJ3dHyBhIJ9c3CAin94gn95g8je29zc3Nzc3Nzc3Nzc3d3d3d3d3d3d3d3d3N3d3dzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nvb29zc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3N3d3d3d3d3d3d3d3d3d3d3d3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e39/f39/f39/f4N/f39/f3+Dg4ODg4ODg4ODg4ODg4ODg4ODg4ODh24tubWdzY1lRTVVbV0hDSUZOS0dCRD8/Qjo7OjY2NzU2NzY0ODc2Ozw7Pj86PDk8Qjg3OTo6Ojk6QUFCQUJDQEE+PT9CQ0NEQUJGOTg9REpOYtjk4uLi4+Pj4+Pj5OTk5OTk5OTk5OTk5OTk5OXZ2drcqHGCtXiRfnNsem6EgXaCfWtoan+DeHV8dn2FhXRmcHl9d316gIqFe318foC03tzc3Nzc3N3d3d3d3d3d3d3d3d3d3d3d3dzd3d3d3dzc3N3c3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzd3Nzd3d3d3d3d3Nzc3Nzc3Nzc3Nzc3N3d3d3d3d3d3d3d3d3d3d3d3d3d3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e397e3t7e39/f39/f39/f39/g4ODg4ODg4ODg4ODg4ODg4ODg4ODg4eDg4ODg4ODg4tiFb3FrdWFWT1VVXE9ETUY+SkdKRUQ8P0I6PDk4Njg0NTY3NDc2NDk7Ozw7OD47PEE4ODo9OD04Oj09QEBAP0FCP0A+QENCQ0FBRTc2O0RMTmPa5OLi4+Pj4+Pj5OTk5OTk5OTk5OTk5OTk5OXl29ra3Z5sbnNxhY1ybXBuf391hH5rcnZ2enN4gXhzbnVwbWt2fHmFiIB/f392coODsd/c3Nzc3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3Nzd3d3c3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3N3d3d3d3d3d3d3d3d3d3d3d3d3c3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e39/f39/f39/f39/f39/f39/f39/f39/f39/f4ODg4ODg4ODg4ODg4ODg4ODg4OHh4eDg4eHh4eHh4eHh4OLXhW1xb3ZeUldTWlpRSkhDQFFAQkQ8OT9BOjw5NzU3NDU2NjQ3NTY9PDo9PTk+OjxAODo6PDY7OTs+PUJCQjtBQkBDQEBEREM8PUA3OjxFS01l3OPi4uPj4+Pj5OTk5OTk5OTk5OTk5OXl5eXl5dPOxsB+cWxveHt2b3VuanNzbZKGeG50dG5vdIZ/b2twboJ0bXZyfY2DdnF/d3mKgabf3Nzc3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3dzc3d3d3dzc3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3t7e3t7e3t7e3t7e3t/f3t7e3t7f39/f39/f39/f39/f39/f39/f39/f39/f39/f4ODg4ODg4ODg4ODg4ODg4ODg4ODg4eHh4eHh4eHh4eHh4eHh4eHi1oZucG1xYFJZUFdfWUpMTElSP0Q9OTtCRjs6OTc0NTY1NzU0NjY2Pj07Pz45PTk7Pjg9Ozo0ODtAQENCQ0FCRkE/Q0BBQkREOz0+OTs8QkxNZODl4+Pk5OTj4+Tk5OTk5OTk5OTk5eXl5eXl5eW5t7Woc3JscHd6dHd4bXFydXd/hHRyc2xsa3F8bnBudGuBf3GAd32Eg355gHNygYqg2d3c3d3d3d3d3d7e3t3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3e3t7e3t7e3t7d3d3d3t7e3t7e3t7e3t7f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f4ODg4ODg4ODg4ODg4ODg4ODg4OHh4eHh4eHh4eHh4eHh4eHh4eHh49WHcWxqbF5YWlVXYFZWUE9QTD1BOjs8RkE4Ojg3MzY1Njk2NTg1Nz89Oz8+OT04Ozw5PTs7NTo9Q0JCPENDREREQUE/PkJDQzw9Pjg5PENLS2PN0dnh1sjY4+Tk5OTk5OTk5OTk5eXl5eXl5eXltbW2q3J5cm59f3Z1d2hqaGlwb3Zta2tnZWZxdG15gG5teXd2iHhxa2podXV5dHV/wd/c3d3d3d3d3d3e3t7e3d3d3d7d3d3d3d3d3d3d3t7e3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3e3t7e3t7e3t3d3d3d3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f4ODg39/g4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4OHh4eHh4eHh4eHh4eHh4eHi4uHh4ePVhnFwY2lhV1NZV19MUk9STUtAPjg5O0E+ODc5NjQ3Njc6NjY2NDk+Pzo8Pzo/OTo6Nzo9PDk5PEFBPTtBQ0VDRkA+Pj5BRUQ+QEE3OD5GSEpesrW4wbm1u8jg5eXl5OTl5OXl5+fn5+fm5ebm5ra2tbWOfX5weoR1cnZnYmNlbGtyb2ZpbHZtd4Z9hXlsbHd4a3ZwfH14c3V5fHd2h7ng3d3d3d3d3d7e3t7e3t7d3t7e3t7d3d3d3d3d3t7e3t7d3t7e3t7e3t3d3d3d3d3d3d7e3t7e3t7e3t7d3d3d3d3d3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4OHh4eHh4eHh4eLi4uLi4uLi4uLi4eHj1Yd1bl5uY1pUU1hXS1NLSk1SR0E4Ozs+PDk4NzU2NTY2OTY4NjY5Pzw6PT07Pzo7Ozk8PDs5Oj4+Pjs8PUFEQkNBQEBBP0JDPDw9Nzs+REVKXrG1tLW2t7e2y9rJ3uXl3eDi3tXU1tPU4OPg39+2treuh3t/bnmNenJ1bWNobGxtaXR4enF5enqIh4N6aWh9cWRvcXyGgX55e318e4an2t7d3d3d3d7e3t7e3t7e3t7e3t7e3d3d3d3d3t7e3t7e3t7e3t7e3t7e3t3e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7f39/e3t7e3t7f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4OHh4eHh4eHh4eLi4uLi4uLi4uLi4uHh49aGdmxhb19dV1lcWlJQSEpXTEVHPUA9Ozs9OTY0NjU1NTg2NzY3OD87OT09PDw5OTw6Pjw6OTg+Qjs7Pj5AREBDRUFAQD0/QDw9PTU5PEJHRl2xtbW2uLm5ubq9uMPT0r3BwcC6u7y6u8TMxb/Dt7e3hGl1gX1ndYd5Z3Vxa2t5eHB3fH15bWl3e3h3bml1j4FwbHl4d3d9gXuGgnmAoNze3d3d3t7e3t7e3t7e3t7e3t7e3t3d3d3d3d7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t/f39/e3t7e3t/f39/f39/f39/f39/f39/f39/f39/f39/f39/f4ODg4ODg39/f39/f39/f3+Dg4N/f4ODg4ODg4ODg4ODg4ODg4ODg4ODh4OHh4eHh4eHh4eHh4eHh4eHh4uLi4uLi4uLi4uLi4uLi4ePXhXJrZ3RhW1hYX15TVVVRVUpMRj9JRDs5PTY2NDc3NTc4Nzc3ODk8PDo+PDg8Oj0+OTs8OTs5P0E8PT9DP0FARUJCQTw9Q0A6Pjw1NDlER0dasbW1tre5ubm5ubm3ubm4uLm5urq6urm5urm6u7e3uX9ucHN6b3B/eXNuc3Vsc3Z4cXFwb2tvcX6Bc2mHhIF9dHOHdW11hYmBgHJ2hafd3d3d3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7f39/f3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f4ODg4ODg4ODg39/f3+Dg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4eDg4eHh4eHh4eHh4eHh4eHh4eHh4eHh4uLi4uLi4uLi4uLi4uLi4uHj14lxa2xyW1dXXWBUUVVUUFJPSkNATUE9Ozk2NTM0NjQ2ODc3Nzk6Pjs8Pjs5PDo8PDk8PTw7PT0+PUNEREBDQkE/QD48PkE8OD06NjY6QkpIWLG1tLa2uLm5uLi5uLe3uLi5urq5ubi4uLi6uru3uKx7cnhxf3ZzfnBsbXpyZ29sbW50cHt3d3Jyd3pvhpJ2f3x8enZ5fH9zfYdyda3T393d3d7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e39/f39/f39/f39/e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f4ODg4ODg4ODg4ODg4ODg4ODf3+Dg4ODg4ODg4ODg4ODg4ODg4eHh4eDg4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4uLi4uLi4uLi4uLi4uLi4uLi49eHb2pxalVWV2FbT1FSUE5XSURESUo/Ojk6NzUzNDk1NzY2Nzg4Ojw7PD46PDo6PTw5PDw9Oz09PDs9REdEQ0E8PDw8Pj5AOzg8ODE1OkFGRVautbW1tre4uLm4uLi4uLe4ubq5uLi3t7i4ubq7t7mqcnB4d3x7e4J3aG5xam9qY2lyf21zcn54dHFsanaAeX2AgH91doB1a4qLgHaR1d/d3d7e39/f3t/f3t7e3t7e3t7e3t7e3t7e3t7e39/f39/f39/f39/f4N/e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t/f39/f39/f39/f39/f39/f39/f39/f3+Dg4ODg4ODf4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHi4uLi4uLi4uLi4uLi4uLi4uLi4uPYhm1sdGVWUFxnWE1YU1JRWUVDS1BOOzk4ODY1NDM5NTY2NzY4Nzk+OT0+OTw5OTw7Njg5OTo8QEA9PkBGQEJCQDo+PEE9Pzs7OzYxNjxCR0RQqLa1tra2tre4t7i4uLi4uLm6ubi4t7e3t7e5ure2tIlyd3h9iXxwem99c2hqbGdnbHRscXd0cWx2c3Fxd3FyfHl4g3Z7d2mLkYp9kM7f3d7e3tvY2drZ297f39/e3+De39/f3Nvc3N3e3uDg3+Dg4ODf3t7e39jS397f397e3t/f3t7f3t/f3t7e3t7e3t7e3t7e3t/f39/f39/f39/f39/f39/f39/f4ODf4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODh4eHh4eHh4eHh4eHh4eHh4eLi4eLi4uLi4uLi4uLi4uLj4+Lj4+Li4uPj4+Pi4uLi4+Lk14NoZ3VkVlVkZVdKWllXW1Q9RU1LSD04NzU3NjQzOTQ0Nzc1Njc5PTo9Pjw9PDk7PDk5Oj45PD4/PkFBQ0FFRUQ+OzxBPjw5PDs3Mzc+REhFSqG2tbW1tbW2tre4uLi4t7e4uLi3tra2tra3uLm2traLfXpsbHp/cGx5dm5qaGdlcXp4b2lvb3B1c21zd4Fnb32CgYNyf3lqcHJ6f6ng393Zy8a/vb6/vsLN0tDW3tnc4NfQzcPCw8PH1dfT2dzX1NjX0MfExce9vM/Kz87Y3djO3N3c2t3T0dze39/e397e3t7e4N/f39/f39/f39/f39/f39/f4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4OHh4eLi4uLi4uLf4uPi4eLg4d7W29/Sw8rJx9Hb3OLk4eHg2dre1sbExcTN2trf5OHi4trX3st9aWZxYVleZWFNTFRLUlpMO0hNSEZBPTc2NjUzNDY2NDg3NjU2OTw7Pj46Pjk5PDk3OTs7Oj49PEBAQ0RCR0ZCQT08Q0A9OTw7Nzc3P0RGRkaZtrS1tbW2tra4uLi4uLi3uLi3s7W2t7a3t7i5tba3opdxb29waW50dnFmZWNrbmdvcm1mZ2tygWVvdnyAeGRzj39zaHFyaWVlbm+w39HFv7u5ubm5ubq6uru6vc3Gw8e/urq6uru7u8HCvcHFvby/vry7urq5ubq6ubm6w8XDucDDwby/ube/z8/U3tjc3t/g3tLa4N/f4ODg39/f39/f39/f3+Dg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODh4eDg4ODg4ODg4ODh4eHh4uLi4eDh4uLi4uHa2t3RwsPCu8XT1uDdydPDrrnAsaqrq6uwtLbJ0sXRxLG4v7Srq6usr7S0vMzE1c60tLureGxtbWBdYl9ZS1NVVFFQREBRTUhEPzo3ODQ3MzE1NjQ5ODQ2Njo8Oz08ODw5Njo6ODg5NzU8PDw/QEFAQkRDQkE8PkI/Pz09PTc1OD5DRUNAj7a0tLW1t7i4uLi4uLm5uLe1sautr7Oxs7OztLS0tqaei2tue3ZxeXhnY2hfcXdha25vaG99b25ja2lseHdsa4Z+bHB6dm1scG95sca8uru7urm5ubq6urq6urq6urq6urq6urq7u7q7u7y7urq6ubq7u7q6urq6urq6ubi3t7i4t7e2tbW1tbi3u8e+w8XHzcS4wMnH0tzZ2d/e3uDf39/f4ODh4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODh3Nji4uLi4eHh4OHg3tfGxtHQztTe3tPO0t/SuLi8sq2trKysrrG+ua63rKipqamqq6urqqqqq6ysuKyqqqqrq6urra6urq6urryzrayrpHlub21fXl1dVE1SU1xUSkE/UElIPjg5NjgzNzMwNTczNzg1NzY2Ojw/PDg5Ozo6Ojg5OjY1OTs7Pj9EP0NFQkNCP0BAQT9APjw3ODc6QUVEP4W4tLS1tbe4uLm5uLi3t7SurKuqqq2urq6vsLGzs7WjcG5ucm1wg311aWFlaGZkY2Rxc21td25naW1tZXBzb29zcXN8h4F6dX11n7u6uru7urm5ubm6urq6urq6ubq6urq5uLm5ubm6urq6u7q5ubm5ubq6ubm6ubm4uLi3t7e4uLe3t7a2tbW2tra1tbW1tba1t7e3t7rBvrzGycrb3+Dg3tvd3d7h4tDW4uHg4ODg4ODg4ODg4ODg4OHg4OHi0768zNjd3OLg0dnbxL23sLCxsa+zu7uzsLS9s66urq2tra2sq6qqqqmpqKmpqampqqurqqqqqamoqampqampqaqqqqytrq6urq6urq6sraR4aWJxZmFZWlZRUk5cU0Y9QlJEQTc8OzY5NTY1NDU2NTg3NTY1Nzg7Pjw7OTk5Ojg3Nzk3Njg8Oz47RD8/Q0BBREE+P0M9Pjw+Ojo3Nz9DRj54srCztLW2t7i3trKurq2sq6uqqaqtraysrq+xs7S1t4xucnRqaIB5ZmpmZWxdaG5waGxxYmNmcoJ+dmhobGpueoaBhXx4cXF5gK+6ubq6urm5uLm5ubm5ubm5ubm5ubm4uLe3t7e3uLm5ubm5uLe3t7i5uLi4uLi3t7a2tre3t7e3tra2trW0tLW1tbW2trW1tre3t7e3t7e3tre4v8bP0MS+v8DE19e8ydra4OHg4ODh4eDg4ODh4eDb3t7Uzby3tre6wMDJxLfIvrKwsLCwr7Cvrq6ur7Cwr66urq6uraytrKurq6qpqampqampqampqKmpqKmpqampqKmpqKmpqqqrraytra2ur66trK2heWpjbWdiXFhRUFFLVEpCOklRP0E3PDk0OjU2NTQ1NDY4ODY4Njs6OTw9PTs6ODY2ODg6NzY3Pj09PT5BQUVCQkNBQUBBOj09Pz05Ojc9QUc8bKqmqKutsLGwrqupqKqrq6mpqamrrKytra2ur7O0tbilgIdvaWdzdGZrcG1qZGxvcm5rbWNrcHyJhG5qbHx4Y3uKfnNqc25rcY+7ubm5ubm5ubi4ubm5ubm5ubq5uLi4t7e3t7e3t7i5ubi4uLe2tra3t7e3t7a2t7a2tra3tra2tbW1tba1tLS0tbW1tra2tra3t7e3t7i4uLe2t7a2uLm4uLe3uL6+uLq9vcfb4OHg2Nnd4eHg3dfKwcPCurm5uLe4uLi3tbS0tLKysbGxsLCvr6+vr6+vr6+vr66ura2srKyrq6yqqqmoqKmppqepqaehpaipqamoop+hoZyip6inqausrK2ur7Cwrq2unXdwbGphY2BZUU1RTFJGQzlNUEY+ODs3Mjc5Njc0NDM1ODg3OTc7OTo9PTw6Ojk3NDo5ODY2OD8/QEI9RENDQ0FDQEJBQDtAP0A/PDw6O0NIPWOopaWlpqioqKenp6ipqqmoqKipqqqsra6wsLCztLW1taWYdn5xZmt4cW9tZmVsaGNsZ2ZpaX11bWlvfXZ5hWZod294b3Fvcninu7m5ubm5ubm4uLm6ubm5ubq5ubi3t7a1tba2tre3t7e3t7a2tba2tre2tbW1tra3t7e2tbS0tLS0tLS1tLS0tLW1tba2tra2t7e3t7e3t7a2tre2tre3uLe2t7i4t7i4uLi4wMXTyry8w83PyMC9urm5ubq6ubi4uLi4t7W0tLSzs7KysrGwr6+vr66urq+vr6+uraysrKurrKysq6ehoJ6gn5ydoaGdlpmkpKaon5mZmZmanZ+gn56fpKqtrq+ura2srJl1cGlrY2FeXVVOU0tSREQ4TktHQTo4NTI2OTY2NDczNzc3ODk3OTo7PT0+ODg4NzU6OTk1OD9AQEFEPkZBQkNAQkNCQT88QEJCQD0+OjpERj5cpqWmpqampqanqKenqKioqKenqaurrKytra2ttLS0tbekc311bnONf3JmanFjaW1jaGZobG51aV9jZ3VzdnpuZ3Bwcn56cYihu7m5ubm6urq6urm2s7W1uLm2trW1tra1tbW1tbW3tra3tra2tbW2tbW1tbS1tLa2t7e2tbS0s7O0tLW1tLS0tbW1tra2tra2t7e3t7e3tra2trW2tbW2tra2tra2tra3tra3uLi3uri4uLe3t7i5ubm5urq6urm4t7e3t7W1tLS0s7OysrKxsbCwr66urq6urq+vra2srKuppaSmpqScmZubmpmZmpmXl5eXl5aZm5iZmZmZm52en5+dnJ6gpKWko6OioqKQdG5jcGFeXltUU1RIVEo/PFFCRkM7ODYzNzo1NTQ4Mzg5OTc4OTc7OTs9Ozc6NzU2OTk4NTg+Pz9ART5CQD9DPzxBQUI/PT9EQT8+PTk9Q0Y/VaSlpqanqKeoqamop6ioqKioqKiqrKuqqaipq7W1tba5o3eKcXKHhnd0cGh5a2JjYWVsaW5zal9jZWNjZWprYmRqbHaXjX6ovbm3tre5u7u6uLWxrKurqq6wrKyrq62tq6yvsLGvr7CytbW2t7W1trW1tbW1trW2trSvr7O0tLSvra6vsrW0tbW1tbW2t7e3t7e3t7e3t7e3t7Owsra1tLa2tre3tra2tbW1tra3t7e5uLi4t7e3uLi4ubq6urq5uLi3t7e1tbS0tLS0tLS0s7OysbCvr6+vr66vr62oo6KgnJqampqZmZqbm5qampqbmpmZmZiXl5aYmZmZmpycnZ+foJ+goKChoaCgoJ+fi3RuaXRdYGZeUlRLRFRJPUVTSEVCOzo0NDY5NDQ1NzM4ODg3ODk5Ojs7Pz04OjkzNTg5NjM5PT5AP0A6QEJCQkA/QEJCPz0+QUFCPz06PkVDQFGjpqWlp6inqauqqKaoqKipp6ioqKinp6ioqaq1tbe3t7KZtH99kIx1Z2lqbGZjYGNoZW94cGlicXx5cGpmZmRma3NqhYystrKwra2ttLeysLCtrKuqqamop6ipqampqKinqKipqaeoqqurra2sqqytraysrq6trqunpaSnqqyopKOkpamwsbGztbW2t7i3t7W1tre4t7e3t7Kppaasq6ivtLa1s7W3t7a1tbW2tra3t7e4t7a2t7e3t7m6urq5uLi3t7Wxs7S0tLKxsK6sq6yurrCxsK2rqqmqqKijnJqZmJmYmJiYmZmZmZmZmpqZm5ubnJybmZeYmZqbnJydnJ2foKGhoqKioKGgoKCfnop1amtuWVxhVktPREdVRz5PV0hEPTw4MzQ0ODQ1NDgyODk4ODk6Ojw5OUA8Njk6MzY3OTE0PD8/QEFBOkNGRUJBREJDQTo7P0FCQz9APUBEQ0BPo6empaemqKqqqqakpqenqKioqKimpqaoq6uttba3t7e4rbJ1cHuDdmBiaWtiZWZhZGdmfYh5bHKAfXFvcXhjbW5xZo+srKurq6ysra6urK2trKuqp6WlpaWlpqioqKiopaeoqKeoqKeoqKmqp6Wko6KioqOioKKioaKhoKChoaKjpKOjpaWlqLC0s7OzsKuqqaqztLa3trGopaOioaGipKiqqairs7Sxrq6xs7W2tra3uLi3tre3t7e3t7a2uLe0sa6ppqerrKmnpqWkpKSkpKWnqaajoJ+enZycm5uampmZmJeXmZmZmJiZmpqampqampqbm5mYmpydnZ2dnZucoKGgoaOjoqCgoKCfnp2FdGtsaFdYU0pHTUVITUdAU1dGRz09OTM2Mzc0NjU3Mzg6Ojo6Ojw9OjpBPDY9ODM3ODgzNztAPz9AQDpCRUNAQkRDQT87O0BDQkNBQDxBQ0A9TqKnpqanp6mqq6mkpaWlpaaoqKippqanqKmpqrW2tre3t7izc2h7c2JnamtpaWJhZGloXV1tfHJma3J/fHR8bm1zc36gqamrq6uqq62trKusq6mpqKWjpKWmpqWmp6eqqaamp6enqKinp6iop6WjpKKhoaGhn56en5+fn56foKGho6Wko6OkpKSlp6enpqWkpaampqeqraumpKKhoaChpKWlpaempaeoqKalpaivtLa3trW1tra1tbOwrKupqa6rqKWlpqampaSkpaWlpqWkpKSkpaKhoaGgnp2bm5ucm5qamZiXmJiYmJiZmpmZmZmYmZmZmZqZmZydnJycnJybnJ+fn6ChoaKgoKCfnZ2cgHNrbmReU0pITUZETEtFRFFTQ0c9PDgzNjI4NDY0NjQ4OTg6Ozk7Pjw5PTs5PTczNTk2NTY8QD0/QD88P0JDPkJCQj89Pj5CQ0FFQD86PkVAO0+jpqWkpqeoqaelpKWlpKWnp6eoqKanp6alpqa1tba2trW2uYptcW1vfHxxZ2pmYGFsYFROW2hqbm9tgYJ9cWdxdn6aqKeoqqmpq6urrKqqqqimpqWkoqOlpqalpaWmqaqppqWjpKWmpqSko6Kio6KhoJ+fnp6cnJycnZ2dnJ2en6CioaKjo6OhoqKkpaSioqOjpKSjpKSko6Ggn6GipKanp6ipqaelpaSipKSlqK2wsKyrqqusqqmnpaWmpaWlpaalpaioqailpaWkpKSlpKOjpKOioaGhoqKgnp2cnJubm5qZmJiYmJmam5mYl5eWlpeXmJiZmpqcm5qampubm5ucnJ6goKGgnp6enpycm356bnJiXlNNSlBFRk5NQkBPRT5JOz01MzYzODM2Njc1Ojs4OTs5Oj49Ozo5OT03NjY5NjU2PkI+PkE/PT5DQT5DQ0BAO0A/QkJCRUA+Oz5FPzxQoKSjpKOjo6SkoqSlpaSlpqamp6empqalpqaltLW1tbS0tbiBaHx9ZXOCemxwdWFfY1ROT1FbaGxpbGxxbW5xbnScoqSnqKioqauqqqqqqaempaSjo6OjpKSlpqalp6ytqaShnp2epKShn56foKCenJ2dnJycmpqam5ucnJubm5ydnp6foKChoJ+goaOioKGjpKSjoqSlpaWkop+go6SkpKapqainpaGdnJ+jpaipqainqKioqaempaWkpKSlpqampqampqenpaWko6Ojo6KioqGhoqKhoqOkop+enZ2cmpubmpqZmJeXmJaWlZSUlJWVl5iYmpubnJuampqam5ucm5ucnp+fnpucnJyam5p/fnF0YFtUTUdNSEZMSj8/TkM8QDs8NDM4Mzc0NzU3ODs9ODo6OTk7PTs7ODk+Njc4OTU4OD9APT9BPjs9RD89REA/PzpAQUE/QUVAPjw8Qz88Tp2ioaKioKCipaSkpKWlpqenp6empqampaampbW1tbS0tLS3jHalsXdmc3Jvc2xjZGlYT1JRT09dgG1kYFptkZGSoqKjpaampqenqKiop6alpaOioaGhoaKjpaempqesq6emoJycm6Ghnpubmp2cmZiam5qampmZmZubm5uampqampucnZ6goaCfnp+hoJ6foqOko6Omp6inqKWioKGhoaGkpaWlpKCcmZmbnqOmpqampqanpqempaSlpKWlpqiop6inpaWlpaWkpKOjo6KhoqKioqKhoaKjo6Kgn56enZybnJubmZaUlJSTk5OTk5SUlJWWl5qam5ubm5qZmZqanJ2dnZ2dnZuampqamZqXf3dvc11aTkhKTkdFRklERU5APD09PDQ1OzQ2NDY1Njc5Ozg5OTg5OTw7PDc6Ozc4ODg1ODg/Qj9BQTw+P0A8PEJAQT49QT4/Pz1CQUA6OkA8PE+doqGfoJ+dn6OkpKSlpqeoqKenp6ampqampqW1tLS0tLS0tbSXtqd1Znh2Y2xjY2VjW1JTU1JNXqCMeFhodpajnp6hoaOjo6OjpKSlpqalpKSioaGjo6OjoqOlpqamp6enpp+bmpuioJqWl5Wam5qXl5iZmpqYmJqampqbm5qZmZmenZ2goqOjo6KkpKWinqGhoaKjpaampqSjoaCgn5+hoZ+goJ2amJiZm5yhpKOjpKWmp6alpaOjpKSkpKWnp6ampqampaWmpKOjo6SjoqKjpKGfoKGhoKGgoaCfn56dnZyamJeVk5KSkpKSkpOTkpOUlZaZmpqbm5qampqbnZ6enp2cnJybm5qamZmZlH10bHReWk9IRUdGQkVORT9GOzo+Pzs0Njo2OTM2NDY4OTo4OTc4ODo8Ozw5Ozs6OjY3ODk5Pj9APjw9QD5AOjlAQT89QT8+QUE+QUE/Ojk9PjpQnaCfnJucnJufoqOlpaWlp6iop6ampqanpqantLS0tLOysrGwsK2rkHiGj36amn93Yl1TUlFRTGKgootaiKCgn52YmZycnZ2eoaGgpKenp6WkoqGjp6alpaOipaampaanpqagm5mboaCXkpOSl5qcmpeXl5iampmampqam5qYmJmaoKCgoKGfoaKipKamop6gn5+goaOko6Khn56enpyanZuZmpqZmJeZnqCioqKioqKkpaWmpKSkpKKioqKkpaWlpaWlpaalpaOko6KioqGgoKGgnp+fn5+fnp+foJ+cm5qZl5WUlJSTkZCRkpKSkpKSk5SVl5iZmpmZmpqam5+fnp2cnJycmpmZmpiXl5F8cmdxXl1QRj9BRD9KT0JCRjhDRT4+OTg7Nzc0ODQ1OTo6Ozk3OTo8Ozo8PT48PDo2NzY5OD4/QT47Pz49PDg6PkFAQUE/P0FCP0RBPjo4PkE8U5ycm5uampycnaGio6KjoqSmp6alpaampqSjo7KysK2rp6amp6alpqiln6iop6qnoXmEXFFST0xcnKCAYpmgnp2clZOVlpeZmp2dnqGmpqampKOioqanp6ajpKampaWmp6amop2cn6Gfl5GRkJSXmp2YlpeWmJuZmpqampqZl5iam6Ghn56fnpybnJ6goJ6dn5+fn6Cio6SjoqCfnp2ZlpeXl5iYmZubnqKioqKioqGio6WlpKOio6SioaGhoqOkpKSko6SkpKSioqKhoqGgoJ+gnp2enp2dnZ2dnp6em5mYl5WTk5SUk5KQj5GSkZKSkZKTlJaXl5iYmZqampyenZ2dnJubmpiYmpmXlZaNempmamBiTkY+P0A9SkVAQ0A7QEE8Ozs5Ojc2NTg0Njc5OT04ODs6Oz87Ojs8Ojk6Nzc2ODs8Oz08Ojo8PTw3Oz5DQkRDPz1BQ0FEQT88OkBCO1eZmJqamZmam5ucnp2foqKhoqSlpKSlpqSioJ6op6alpqWlpaemp6ampqakpaanqKehqXJOUU1KVJahenKanJyenJeVlJWWmJiXl5qeoqKhoqOkpKOjpqalpKanpqWlpqalpaOgoKGhoJmSkI+Wm5menJaXl5eZm5ycnJqamZeZm5uen52cnZyZmZqcnZ2dnp6fn5+hoaCgoaKgn56bl5WVlZeanZ2fn6GhoqKio6OhoaCgoJ2cnaGioqOkpKOioaSlpKOko6SjoqKioqKhoKGfn52cnZ2cnJ2dnJ2enpqXlpaVlJOTkpKSkpCRkpKTkpGSlJWWl5iYmJiam5ycnJycnJ2cm5mYmZiWlJWXi3hsY2RiZFFHQT1DO0tIRDo7Ozw+OTo6OTo3Mzc5NTk5ODk8OTg7OT09Ozo7Ojk8PDc2NDc/PDo9Ozw/Pjw7ODxBQ0FDQkI+P0NAQkFAOj9APztZmZiampqam5ubmpydoKGhoaGhoqKioqKhn5+dpKWmpqenpaWmp6ampqWkpKalpKSkpaaGUFJQT0+PmHB6mpubnJ6cnJycm5ubmZiYm56dnp6foKOkoqGhoqOio6SkpqalpKSjoqGhnpyblZKUmJyam56amJiYmJqcnpyam5iWmZybnJycnJydmpqbnJ2dnp6dnp6fn52cnJyhoaCblpWVlZacn6Ggn5+hoKKjoqOhnZuZlpaWlpicnqCip6ikoaCgoqOjoqKioKCgoJ+fnp+gnp2cm5ucnJydnJmanJuWk5KSkpKUk5KSkpKSkpOSkpKRkpSVlpeYmJiYmZqcm5qbm5ucnJqZmJiXlZWWl4d3ZGdoZGJNQ0U8RDlJSkU5Ojs9PTo6Nzg6NjQ3OTU8OTY4OTc5PDs7PDo6PDs6PDw4Nzg3Pj07Pj46Qj86Ojo/QURCQ0FBQD9EQUFAPjpAPj06W5qYmZqbmpubm5uen6CgoaKioKCgn5+enp2dnKWkpaanpqWlpqakoqKio6Oko6Kjo6KnllRYVVJOZ21rgZ6am5udn6Cgn56enp6dnJ2dnJ6enp+goaCfn5+goKGio6OkpKSkoqGhnpuamZehtZ6ZmZienpiYmZmam5qWlZeWlZicnJ2cm52dnpybnJ2cnZ6bmJqeoaGdm5udoKKhmpWVlpaZoKKfnZueoaKjop+em5eXlJKSlJeYmZ2goqenpaGgn56goaGioaCfnp2cnJubnJubmpqZmpydnJmXmZaVk5GQkJCPkZKSkpKSkZKTk5OTk5OTlJWWlpeXl5manJubnJucnJqamZeXlpaVlZSEcmZsYmRbREJMPT84RktCPEA+Pj05Ozk6PTg1ODg2Ozg2Njo4PDw7Ozw8Ozk8Oj09OTU4Nzw5PD88OkE/Ojo6QEBDQkRBQ0A/Q0FAPj08QD09Ol+al5mamZeYmZycn5+foaGhoJ+fn56foKCenZ2lpKSko6OioqOjoZ+foaGipKOio6SiradXXl1UV19ua42dmpqbnJ2dm5ucnZ+enZycnJydnZ+goKChoaGgoKCgoqShoqKhoaCenJubm5mfq5ucmpuZnJ6ZlpaWl5eTjo6QlJabnJuam5udn52cnJycnJ6dlpSZnJ+in5ycnZ+hoJuXl5mZmpycnJubnZ6fnZqXlpaWlJOTlJiampqfoKGmpqWgn56fnqChoaCenJubnJybm5ybm5qZmJmZmZmXl5iVlJKQkJCQj5CSkpKSkZGTk5aYl5STkpSVlJWWlZaZmZmam52cnJyampmXlpaWlpaQgG9vZV5gV0BKSDg/N0lFP0VBPD07Ojo8Ozs3NTs4Njo3NTY6Oj47Oj0+Pj07Ozs+Ozo4Ojk5NkBBPTo8PTo6OT9BQ0JERUM+P0FBPz8+Pj89PDtgl5WXl5aVl5mbnqGhoKGioqCenp6enqCgn52bpaWkpKSioKCfoJ+dnaChoqOjo6OkobCjXWVkYGFua4GenJubm5ubmZianJ2enJubm5ycnJ6ipKGeoKGioqKhoKWzrKCgn5+enJmZmpqbrmp2nZ2em5manJiXlZWWkY6Nj5KYnZycm5ycnqCdnJucnJyempWVm56foZ+dnJyenp2cmpqampqampqbm5qXl5aTkpWVlpWTlZaam5qanZ6foqWjnp6fn5+en5+enZ6fnZycm5qcm5qbmpiZmJiYmJiYlZSTkZCRkJCQkZKTk5CRk5SYmZiVk5SVlZWWlZaXmZmXmZqenpyamJiXl5aWl5eYjX1ubV9lVlRFSzw3PjdSRUM+QkE4Ozw7OTg6ODY7Nzc6Njc5Oj0+Ojw8PT49PD06Pz06ODw9OTtAPj4/PT45OTs/QkNAQ0VDPT9DQj5AQD5APTw8YZWSlJWWlpeanJ6goKCgoaCgnp6enp6gn56em6WlpKSioJ+fnZ2dm5mbnJydnp+gn56rmGNpbW5pZm2enZybm5ybmpmZmZqam5ucm5uam5ygo6SgnZ+en6ChoJ+mkpurn6CgnpuamZqZqIREf5+enpyZmJqamJiYmJKOj5OXnJ2bnJ2cnJycnZycnp6dnpqVl5ygoaGfnp2eoJ+cnJuam5qbmpqYmpmVk5OTkpOWl5eVlJiYmZucnJydoJ+gnp6enp+fn56en6KjpKKgnp6cm5qam5uZmJmZmJeXlpWUlJORkZCQkZKTk5OSk5OUmJmYlpWUlZaWlpaWl5iYmJiXmZqamZeXl5aXlpeWl4l4dmddX1dURUU5OTs8WT5AOEI/OTw8Pjk4Ozg6Ozc5OjU4OTs9PDk9Oz0+PD0+Oz8/Ozk+PDw+Pz5AQUE9ODc7QkNFP0FFQz1AREJBQEQ7Oz47PGKWk5SUlpWUlpiYmZubnJycnZ2cnJ2en56dnJqkpKSkoJ+enpybm5qZmJiYmZucnZ6cpolla3R4bVuFop2dnJydnJqbmpqampydnZ2bmpuboKKinpucnZycnJ2eoJ5inKaenpyampucoaNRR4OgnZ6cm5qanZqam5yVkZOXm52dnJ2fnZycnJycnZ6fnp+cl5idn6GhoJ6cn6CfnJqbm5ubmpmZmZmZl5WWlZaYl5eXlpaYmZuenp2dn6GhoJ+fnp6fn5+dn5+hoqKhoZ+fn5yZm5qcnZuampmXlpaYl5eXlpWTkpGTlJSTlJSUlJaZmJaVlZeZmJeYl5eXl5eYl5iXl5eXlpaYl5eVl5eDeHZfW11eUT1GOjk4P1VDQTtDQzo8Pz86Ojk3Ozg4ODc0ODk8Ozw4Ojs8PTo8Pjk/QT06PTw+PkA/PUBBPjk2PERDRUBBRUU9PkVERD9COzo8OTpkl5SVlZaUlJSUlJWXmJiamZqcnJydnp6dnZybo6Oko6CenJuamZqZmJiYmZiam5ubm6WJa3F2em9lmp+enp2dnJybnZ6dnJ2enp2dnJydm5ygoJuampubm5udm5qmZl2joJuamZudnK51SUyGoJycnZybmp+fm5ydm5mZmZudnZ2dn52dn5+dnJydn5+fn5uanZ+goJ+dnJ6gnpubm5ubm5yampuamZudnJqZmJeYmJiYmp2foKCgoJ+hoaGgoJ+en5+fnp6foaKhoJ+enp+enJqam5ubmpqZlpaXmZmYmJiWlJOUlJWVk5OVlZSVlpWVlZSYmZuamZaWl5WWmJiWl5OUlJGRk4yRkJOWfXhqYWJiXFE8QDw2OENWSERCOjg7Oj47Nzc5Nj06OTk2NDc6Ozw+OTo6Oz47PT08QD47Oz46PT89PkBBP0A8NztBQ0U/P0REPj9EREM+Qj07PDs6Z5aTk5OTk5OTlJSVlpeWl5aWl5mbm5ybm5uamaOjoqCfnpuamJeYl5eXmJmYmZybm5qkgGpqb3lzcZegnp2dnJydnp6enp+enp2cnJydnp2bnJuampqam5ubmZmYpIBSeKKZmZqdm6CkX1ZOh6GcnJ2cm5qdn5ucnJubnJubnZ2dnJydnp2enZydnZ2cnJ2dm5uenp6dnZybnpubnJubm5ydnJubmpmbmpmYmZmYmpmZmpyfn5+jpaKfoaKioaGfnqCgn5+fnqCioaChn5+fn52ZmpucnZqZmJWWl5aVlZaTkpOUk5STkJCSk5GUkY+OkJGOlZabmJWYlJmXlJiRjJCPk5yTkoyFjIeDhndxZ2pkXFxRQT44NkJHYEJFR0A+Ozw7Ojg4NjU8ODo4MzQ6Njk9PTk5Ojs9Ozw6PD48Oj5AOj5APjw/QD8+PDg6Q0FEPz5CRD89Q0VCPUJAPDw8OmeYk5KSk5OSk5SVlJWXl5aWlZaXmZmZmpqampqkoqCfn52bmpmYmJiXl5iZmJmcnZ2cqH1nZXN7enOJop+enp2dnp6enZ2enZ6enp2dnZ6cm5ybmpubm5ycm5iYmaCIW1+UmpmbnJyjj2RaTIGinp6dnZybm52bnJybnJ2dnZ2dnJ2dnp+fn52cnZ2dm5qbnJmZnJ2dnZ2dm5uanJ2dnJycnp2dnZybmZeVlZeXmJqam5ubnZ6foqOhoKGhnJucm5ubnZqcmZycn6CfnZiZmZmUkpKUl5SPj4+OkYyNiYuQi4mLjpGRj4mQmJiQkoyNi5KQj5iYoqiqpqWlrKOmoZqep6eyqKKVo6Cfl39wcWlsXFtbTEY8NzdHR1g+SE5URjk+Ojg5ODc1PTk4NzMzOTY6Pjw6Nzo8Ozo6Ojo8PDs/PjtAQD47PT5BPDw2N0A+QkA+QUY+PEFEQT1DQj49PDlmmJSTk5OTkpOUlZOVl5iYmJaXl5iZmZqampqaoqGfnp2cm5mYmJiYmJiYmZmZm5ybnKx/am16f3lxh6Genp2cnZ6enp6enp6dnp2dnZ6enJubnJubm5ubm5uZmJmfl11ddpeanJ2dooFkWU1+op6enp2dnp6dnJydnJ2dnZ6fnZ2fn56goJ+enZ2dnZybnJ2em5qbm52enZ6dm5uanJ2cnp2cnZqYl5SRjo+QkJGVmJSWlJiZmpudmJuYlY2Mjo6TkpKRj4mQjpGRjo+Ki42NjYiIi4+Lg42NkY+MkI2Qk5WVnJihoJySn6SipKmam5eanKOprb3Bwbq8uL26ucC8ubq3uru7tL2zwbV/bnVmZ1peWUxJRTo7TElTPFZSSUM6QTo7Ozc3NTo6OjgyNTY4Oz08OTk7Ozw5Nzo4Ojw6PT85PD8+PDw9QTs5NTg8O0A/QT9EPTxBQkA8REM9PT06YZOTkZCUlJOTk5OTlJeYlpeZmJmYmZqbmpqamp+gnp+fnJqZmpqampmYl5iZmZmZmZmphXB1e4B3b4mhnp6enp6fn56en56fn56dnp6fnp2dnJ2cm5ubm5ucmpiZmZpgYWCAlp2cnph0Y1VOgKKfn5+enZ6hoJ6dnp2enZ2fn56en6CenZ6enJydnZ2cm5qYnJuVmJqamJiYmJmSjJCXlKCXk4+MjYqKiImMiJORh5CPjYqKkJCLjoqMi4+IiImJjpGOjYaFiYaKhoWLiI+SkJCNkJKXlpKamJ2TlJ6kpqaqq7Gsr6+rpquqsbm5tbS0rqyvtMDIxcXBvsbDxMTDurW+t7a0s7C2tb6qcHRyXGZfXl1JRj8/RUtMVklcTEQ/PUI6Qzk5Nzc7OTk3MTc5ODo+ODg6PDw7OTc5OTs9Oj4/OT5BPDs+PD46OTY5PDpBPkNBQT08QkBAPkJEPj8+OVyHhIOHi42KiYaFgYqMkZOVmJiHlZaWkpiampmenZ+gn52ampubm5ycm5iWmJiXl5ibqo56dXZ7f3mCoJ+fnp+goKCfn5+foKCfnp2dnp+enp2dnJqbm5ybm5uYmZmfaV5bZX+cnJ6Mal9QUoaem52dnZycoaGfnZ6dnZ2dnp2dnJiWlpaYlZWSlpmWk5GKjI+PjI+NkIuLj4+WiYiEi5GZjn2Fi42PjYyHioyQm4yRj4+Lio6TjIyNjIiSi4yFiYyPhouIh42KhYyEj4qXkJOYmpWbnKOqoaKknKKrsbe0ubWxtK2vsrKlp7O6sbq6vLa3tsDDw729vLa/urq8wbW4wL60r66mqa+3mm58Z1tjWl1fSEU+QUtJU1hZXkFGOTk9OkY/Pzo3Ozs7NjM6Nzo5Pjg6Ojw9OTk4Ozk7PDo+PTtAQDs8QjxAOjg0Nzw7QkBBQj4+O0NEREBDQz4+PjlhmZWLkYWNj5aSiHl9e3+Fi4OKgoqJhmuAeJCLlpqRnZ2UlJGTlpeampiWk42Sk5KQm5uIdndzcX1/cpGgnZubm5yenZ2eoKGgm5uWlpucmpubnJuYmZqYmJmbmpqXk3NoYVR2k5ech1xWUFeKko6SkY+Uk5KXm5mYm5ePjpCLjo2Ch4uLi4qLiI2RjIeHhoqIiZGKh4yEhYqNi4qNhI+UkIyDkJOUmZWQi5OTkZWRlpWOj5GMlI2Oj4qIj4ePhoeJiYmNiomJioWNh46JmJKUmpuXmKChp6Cko5qqqbO2sbWwqKqiqK6tn6qvsK21ubi8wr/BxLixtbCutrOwuL68ury+urOzp7G3wpB1gGNiXlpXUk1IRkVQSVlXX1tDUDpCQz1HRj84Nzo6NzU1OTc8OTw5ODo9Pjo6Nzs7Pjs7PTs9P0E7Pz48Pzo4NDM3OkFBQEI+PjpDREM/QUM7PT45Z6mloqKZn6CippeUiI2CiIJ1h4iKiIp7e3Z7enmPeoiSfn18en6CkYWBgH1zfH99fISHfnRweHZzfHaBj4iIiYeIioyMkZicl4iOhIuNi4iNkZCPi5GPi4yPkJGRjpKanpJ9oKOWpJxuTE9jhoaCjYuGiYp/iYqGiJiRiIOIg4KFfIuLjIaJi4iKkIyIi42PjI+Wh4mLio6NjY2Wk5OdnJyalpycm56bmpuYnpeTkZWWkJKRi4+LlpSMjYqDi4SEiYyQkIqOio2LipGJjZOTk5SVk5KcmZ6Xn6CfpaKvsamupKSfmKStpqa4t6ysu729wsPAv7+vpa2wsLS3uLO0uLa0ta6stK+4tLaBeXpjZmBeVlFRQUVMT0lcXl9UR0dCS0xCREA9ODg7OTU3Nzk3Ozc9PDk9Pj05Ozg6Oz88Oj06PkJBOD88Oj84NjQyOTtCQD9CPj04QEI/P0BEO0A+N2CloJqXnaGaoaCPl5efl5WCjaCfo6GdmpKOjIxycXBvdnFucG1ucHZub29waHBxcHR+c3FycXd7cnl2d3Jyd3Z6e3l8fXt/iIGEi3+PkYaNi4yGiouLiYeEgYaDgISgnY5/bJallZ+AiX9fcn+AgpKQhoSEhY2DhIyPj4+IjY+Hi4iRkJWRjpCKk5eOj5WYp6SfnZWYlpaln5udq6aqt7W4srGnr6qnpqGfmp2WkpWVkYqPjImTjZuVjYuLhoaJjJWQkJCLmZKVlZSbkJiTlIyNkYyWl5WilZ6mqauno6OqsJucpp+mq6G0vb6zs7+5u7u6uby9rqiusa6wuLyztLGxqrCpqLGxsqild3J0X2hhYFRWUUlKSFZNXl5eVExKRVFKRUdDPTk5OTc0ODY5Mzg4PTo9PD47OTs4Ojs/PDw+OT9DPzg7Ojg8Nzc2Mzc5RT4/Qz89N0BAQT4/RDw+PThUj4yGh4eUjJWZl5yWmZaNlZyWlZydoKCdmpiWeHFubXJ4cXFsbnJwa3FvcG1yc3t1dnd5fnVxeHZ0d3tybn98gX15eH1/eYOGg4WCg5CLkIuLi46Pi4mJhYKCfn+Aoot8blJ1nIyMWnF9fH59fIaOjYuGjZSRi5CXj5SXkpihlp6WlZunpp+goKawq6GjpbW0sqqmqq+isba5vcK7ucO+vLi9uLWxrLCsppuSk5mfm5SPk5WOmp2doJqfn5edo6qsoZ+em62hp6qwqaampJiRkZWUo6SirKSss7Szs6i3tru4sLKvra2yt7a6srW6s7e5u7i8urayr6yxsbKztLOxsa2us7Gzs6yhl3Zxc19jXlJRVE1PSUdYT1pcZFROR1VPRURKRD44OTg3NTg4ODU5Nzo6PTw/Ojg8ODk5PTs9PTpCPj84Ozo5Ojk4NjI1N0I+P0RAQDY+P0I/PEM8PT46Tn98go6MjJOTl5eaj5SWjZaRkZSXk5qanqGdnHJvcnFxcXFxcG5zcW91dHJxdneAdXd8eYV+d3t8eX1/fICJiYmDfXp/h4GIiYGAgIGGiIKGi4eIhYSIiIqFgIJ9mJp3WE9McJSGgkxgb3F3iIWKjouNkJmclJSUoJqan6Ktsa6ppKWtr6ysrLWuvrmtrqm1sLexq7G2rK+9wsLAvrq8trKutraxtK66u7OurKepp6unoqmtoKmooq+wuLSxvLq6urK0ta+8tLezt7e7t7mtrbCprLW5sbeytLe2sLu7vLu6ury1vLi0wbWsqqqrtLG3uLm1trSzsKymrrCqq7Cxq6yusLKxtK6qo5N4dnJlZ1tMUlBFTUlTV1JlXmdUUExcUUhMUkNBOTk3OTU4ODY2Ozc5Ojs6Pjk4Ozo6Ojw8Pj08RD45Njs7ODg+OTUxNTZCRkREP0A3Pj5DPjpBP0BAO0t/gomXmJSdlpabmIuSlo6XkZGVl5SZl5+bmZx8dHV2dXl1c3RudnJzdHV2d319gH56gXyDfoJ/fYB/hIKFj52RiYF/go+Xjo6HgoCBiIuFfoqRi3+IjYyLi4eRjaONVS8wPXeHd3ZBRF5rbYSQiYmQj42PlJSYkJWcmp2eqK6ysLC1tLOtsrW4sLy1tbGqsKqztbS7t7SztrS1r7i4t62noqassLCvtre3vrW5vLOysa61u7C0r6+yu7axuMC9tLS0s7izvLq2tLrAvbm6ubq+ubm5vrWysa+yr6q1tLGzsbSzrri4tb+vpKaoo6ussa+zrq6wsKytq6qroqKmqKKnrauqpaynoqeYeHlxZmVZT09NSVJNV01PX15cTlVVYlFEVE07Pzk8ODk1ODc1Nzk1Ojo6OTs4Ojw8Oj08Pj4/P0I9ODY6Ojk6QDs1MjY2QUZDQz4/Nz49Q0I5P0I/PjtLjpGTmJmVmZGTopiTkpKLk4uOkI+Vl5ablZSbhoJ9enh2dHRzdH53end2gIKDhouMhISFioaQiYeRk5aRjZaalY+IjI+emJaVkpCTl5qamZCeoZ2Tl5uhmp2boqacZ0FaSDt3eWtnRS84W2xzkI+LmJqPj4yUmpecnZugnaSstLm6vK+2tLi0tLK3uLmzq6+qqKy1srK1rrGrrqa3s7OxpaGotbCvrayrtbqyu7q6tLK3ur67ubG4sLmtqLK4u66ttLS3tbu2trm5vLe0r7G0t7a5s7e1pq2pq6ior6yprq2up6KxtLG0q6aop6Cjq66oqq6orLKwr6+pqKGeoaGjpqOgopqlo56ol3J3bmdiVUpUT09KRFBLX2JYWlFcVGBNSFJJQUA5Ojg2Njc3NTg5NDs5Ozk8Nzs+Ojg8PD0/QkBBPTs2OTk5Oj87NjM3OD5GQkJAQjk+PUBDPkBGQj44R5OWkZWTkpSQkZ+ZnZmVkI+Sko6Mk5aWko6RlZGSkIaBeXJzdXuBhI6HhZGTkpicnJiVkJWYo5yaoaeqqZ+clpeVnaKioZyZnpmlqKyvramnqqqpp6KlqKmrqamvj0tvoXhBe3djYlBQWkdgboqhoaSem5qkp6Spq66spaSoq6+xtK6qrK6zr6ystLS0ua6urayqrLKwsK2wqKqmsrS0uK6qtrqwr6qurLC3s7i0t7W0u7y4tbWxtauyrKiys7uvrbGytLa1sbG0s7OvrKuvs7a0sayutKqqpqWnrauoqKupqqifqbOwqqeppaOio7CtqaatpairrayppaSioKWipaOYmZyVnqKippdudWVnZFdPWUtLSktTVHBiWWRXX1tcUlpQTEM8ODk6Njk4NzQ3NzQ4Ojw6PDg6PTk3PDw7PkM/QT47OTo5Ojs+PTg0NThBREVEQkM5PjtAPkI/R0Q+N0KSm5SVlZaVj46Wl5qZlZGKk5SSjo+SkYqKiY2Ul5qTjYmCho6VkZSfmpuin5+jnqGhn5ijpKelpaapqa2rqaKmpKilpKGfnqOjra2srairrq6rq6ykoaKmqaeoo3hgv9amQ3uMgHVPbY51UmR/o6inoKKhrqyrqqetrqilpKmpqqmmo6iqqaekp66wr7Ovq7Crqq+yr7Czua+rqLCxrrCyubO0r62vtbCss7GurLW1tLSzs7CvrKyqrKusr7G0s7CwrrCwsKyqrauqq6alrrCysKumqbCvqaOkqaunqKaopquwq6mvqaaoqaalo6iwraqpqKKpo6WnpKGhoKKloZ2el5aYlJugpKmUbnNeamlfVlpOUk5RT1NlXGVjW11ZXFBZT0tAPDs5Ojc6ODczNTMzODo9OTo4OTo5Oj08PEBEPkA9OTo8PDw+Oz45NTo8QkFFQUNBOT47P0BEQENCQDdAkZ6YlJeZlpGHi5SSl5GIg4mLk4+OkI2Hh4SFlZmWmJeZlpqeop2ZnKKkoaCdn5qfoKGgpqGgoKCjo6KlqKmrramqpqOmpaCloKaop6aoqaepqaSnp5mdpKWjop1if73Ar3eeo5qUZUxheG1RdJWioqChn6GhqKCcn6GloaCmo6KfpKGspp6foaGkrKqnrKivq6e0sa6ur7WyrKqwq6mtrbWwrq6srreup6yqpKivsq+sq7Kvqqqpq6utqa6urrGxraqtqaunp6uoqauinaapqKilqKisqKilpKWop6iopqmsr6+oq6mhoqKlo6Opq6ymqKWjqKKhoKSdnZ+hoZ2bnZ+amZWcnKOqlG9zZm5yZF1dUFVPV1BeZWRsaGJiWlpSVE9NQTo9Ojo4Ozk1MTYzMjg4Ozk5OTk7OTk8Oz0/Qz5APTk7Ojs8QDw+PDk5PEFCRUFGQTo9Oz9BQUJBRUI4PYqWlJOYmpaPiISNjpGSjIiIiI+JiZCRjoqKiJubmZygpaKlnqKjoZqeoZyanZ6bnKOop6ugoKOYoJ2XnKGjo6WjoqKkrKilqaCepqmnq6mkoKKhoqehpq6mpp2eaoScuo+m0KGZsahYTKyTU2WPoJ6goJ6doKOZlpqYo6KipJ+ZnKGhoqCbmp6goaSgnaejqrGorqusqaSqqquorKalrKqws6+rq6mwq6appaWoq6ynpqevq6Wnq6upq6irqqqrrailqKOmpaesqayoopykoaOmo6qpqKano6SnqKanqKepqKupoaKoo5yepqWjqKino6WlpqmgpJ6inpeYnZ+doqKlnpiUlZ6go5d1d2t2eGJfXFVZUVVXW2Nfc19oX2NTUVlUSD48PTg7OTo4NTM3MzM0Nzo4OT05Ozo5PDxBQEM9PT44Ozw9PEA/Qj86ODo+P0NAREE6Oz49QD9DQ0VDOTyCmJmenZ2alZKKiZGRl5GQh4SJgoGNj4+Sj42cnZ+hpKmlqaeorK2moqKfmKSmo6Stsa6yp6asm56em5qjp6Cfo5+foq+rq6yoqKuvqaiqqKKgoaiqrbGyr6uiooZ3fn1yzsmxm6eva1WqsGJah6afpaKhnZ+imJWem5+fpKGblZigoZ2enJudnZuZmZWen6Oonp2iqKGaoaOmoqSoqaqoq7CxqKWlp6eopKWpqaqnoqWmqKadnqWloqClpaOlpqCjpaOjpaelqamqpKekpqKmp6SrqaenpKGlqKynpqWlo6OopJWdo5+bnaCjqaeopqGjo6mooKiioJyVkZqfn6GmopuXkpCamqCVfHdvfXlmW1tgX1pcVVxoZG9jbWlpYl5QUEA/Ozo4OTg8OzYzNDMzMzc5OTs8OTs7OT49QkBAPTs9ODw9QD08PENBPjo4PT9EP0M+Ojk+PEI/P0FEQjk6gJ6kp6Gem5+gmY+ZnaCWloqGj4iEi4qTl5SRo6Wnqq6trLOys7S4t62pqqevtLKxqq6usbKusa2lq7OssbGpq6+rq6y2sLSwq7GysaOgo6qqp6+3t7S1trOtrq2PhoNuj825lZCil3RUb3pzbnuVpqqno5+eo5udoZqWnqScm5aZoqefoJ+joJuUlpmWl5qfoJmVnqGZmJ2dpZ2gpKeqqaiqraylqaSlqaeqqaqsp6SkpKOimZmhnpqaoaCfpaWYnqSmpKqooqelpaGqp6mnp6ejqKWmpaGkqKesoqejoaalpaOVl52Ym5mVo6elpaSfnZ2lo6Kqo5+amZiXnJyaoaGakJOTl5ibjYB3cnZ4amJbX19cYllgZG5ta25hX2RgUE9BQDs7OTs4Ojk2MTQzNjQ3Nzc6PTo8Ozk9PUI/Pj89PDo/OTo7PD5BRUA9OTtAQj5DPTs5PjlAQEA/QkM7OXuao6OcoJ2dop2Zn6KioJibmJaYkpSQm5qWl7S0rrW4s7S4tre0uLm3tbm4ub28uKqLnLK4vLS9urW7uru4s7q/uLe5u7G3r6iusq2inaCrsre7u7u5ucG4tLWgiHlkWZ+3wKaonYh3a3FveHh6fYaOkpicoqWmq6WkmKGko52goaKooaOgpaGck5mYmJmco56cmpudl5uZlqWam5+hqKmpqKuvr66pqKmrrKytq6irp6WjoJyfo6Ojn6Cipammmpyip6Spn6GjoqKgpaanpqSooJ+ipKGjoqiop6OloKGop6alo5mbmJuTj6GknqKfmJiVoJuhpaCfm5udnJuamZugmo2YmZiTkYaBdnh5eGNbUllUX19hbWh2a3FoaWliWlNMQDw6Ozg5Nzk3NTU2Mjg1Njc3Ojw7Ozs7QD4/QD0+Pjk6PDk2Nz47QkZCPDg7PkNDRDw+OT43PkFCP0ZDOzhwkpqblJ6bm52Vl52doqajopaXnpaXl6GblJi+t7G4uba3t7i7l5S2vbu9vcDFtaK7mKC3v7+6wcm0nbu2sra/xcGooLa0urGqrrSxsLK0tbfBxszPzszJvrOkkHNmUkSLl4mJiH54cW5nZmxpa3FycXFydHyMqcTEu6Knqqynq6mlpqCnoKGmoZOWmJ2foqSjnZ6coaChnZekmpmdoKaqqqqtrq2tsLGrrK2sqamrrqimpaalpqSkpqaeo6eppKGcoKKjpqCio5+jpJ2foqWgpJyboZ6fo6GhpaSlqaOkpaGkp6ehn52elpOcoJeZko+MjJeWn5uWnJqdnJqTlpSUmJOQmp2YiouHgIB8gnhhXllTYWlhZnRvdGl0ZGlkYltMSz46OTg5ODg5NzM0NTI1NDY2OTw8Oz08P0E/QEA9Pj44OTs4Njc/OUJFQzw7PD5DREM9QDs9Nz1DQ0BFQjw3Z4yRk4qalZiblZWYm6Knq6aVl5iQlZmhnpeXvrWztLu6ubi5woeYt6u4u8DCxbOjw6e4s72/tMTHvbS7uL62wMTErqCworW2tb2+wcTHw8XH2+Pj2su8r6SXiHRZWlFDaXpsb3Vua2VlWVdeWFxjaWloZWBoibTAwLmpr7Gwr6yqoqajrJ+fpquXmqifpaWfoJydoKuwsKyiq5yYm6Cor7Kys6uorre1sq2tqaalqKulpaStqaShn6Cnnp6mqKmmnp+anqGlpqmcnaObl6KmmpuanZ+cmqGcmZ2eoKijn6GenaWioKOioZSZmpmTj4qLhI2Qk5uPjpiVm5eYkJORkomNl5iYk4uKi32AgIVwYGJfXmtjYm54dXdvbVtiUlZcTUc7PDk3OTc5Ojc0NDQxNDM3Njg8Ozo8PEBAPUA/Pj8+Ojo5Ojc6Pz5FRUU8PT1AQkJCQUE7PDhAQ0NARD87NV6MjIaFlouUlZeYl5ifpqellpWVkZebn5ual7mxtrO5vLy5urWqsryxvsG0vMe5uLuuv6fGw7/KxsnIxcXJvMLHx7+xsKe8vL7FxMbJx8XGvs3R1cq5p52UhnJeUVRLRFtmXmRrZWFgaFlUWFJWWFlcWFp0mba7q7SyrbOtqa6vp6awr7Ktqq+zpKu1qaeopKCgnqmyuL61tbWqqaausre4t7apq7i8ubexr66noqOop6SfqKOfnqCZoZydoqSnp6GelJuaoKGlnqChnpajnZSQlpiboZqflpORlpSin5qenJudoZ6kn56VnJiPkpOPjImTkJefiZCWkZuUmJGRlZaDjJWXlpKLjIh8f4R/amZoYWtsZ252cnJ2cmdeYFxSSUU/Ojo6Nzg0ODw3NjU0MjMzNjU3PDo7PDs9QD4/QD48PTk5OTs6PDw+QkRFPj49QENDQkREOzo4QUJCQUNAOTNbk4iEjZGKi5GRlZCSmp2fnJOSmJSdnZqXmpW2sbm1tb6+tri1uLO8vMTEusPHwb+0s8XFxr/CzcfLzsvLx8HDxsfIysXExcO7vLzBxcHFxL/CwcfLyLeUdWVVUE9USD5ea15fZWJgXWRhU1ZWVVNUV3Kbq7CqqKqtrKmlpZ6pr6uyu7q4u7e5t7O5uLOurLO0qrC1ub3Bur6+vL60urm4u7qysbS8u7q7s7Oyp6Smq6uioaCdmpudmpyXmpuenJygnZaclpuZnZ6io52UnJCNiY6OkZ6bnJWNh5KLmJiWmpybmJybnp6cmp6UjpiYmpSRmZeeoZWYmpKXlJWRlJqYk4+TnZaSi5F+enx/dWtsbmRvbWlxeG95amlhXWdhUUZEQTw5OTc2NDQ6ODQ2NTMzMzY1Nj05OTs7PT47Pj49Oz05OTs7Oz89QUNBQkFAPEBDQ0NFQjw4OUQ/P0BCPzsyV5uQkZCQh4WSjo2IjZCTlZGPjZSUm5STlpqRs7e4uLi+u7C1sri2tbbAw8G+w8LAvru+u7u8xMzEzNDLxsa/xcfLyNTLysjGv7u7vsS+xcjGxsTEw7m4w5thSURHS0Q9W2ViYWhjYFtjX1dRTk9PVX+0uqyupaSip6SgoKWZqrSxvsG+urm6uLW0srG0tLO6wL7Av769u7u9vsDCt7a3tru7sru+ubi3u7a3tKyoqamrpqijnpOampyYkZKZl5GRmJqXnpiWk5acm5+dlJOJiX6GiIyWlJiZkYmVkZeWlZmbmpaYl5idnpyhmJWZmZyXl5ybn56jnJ6WmJeTlpyZmZyUlp2UlpOJdnl6e3dua2lodlpnc3hzemdnXmRbUlhJRj87Nzg4NzYxNjk3NDQzMzM2NDY7ODo7Oz08OD0+PDo7PDs9Ozs+PkRBQURCQEBBQkNDREM9OTlCQD8/QD89MkyWmpaSk4yKmJCKi4yOkpKKiIaNkJiKj5CUl7O7tba/vb2xtrjBvby0uL/Bsbi3vsHFvbu8wsbJv8jOyMHEwcfKysbKxczIzcbIxb/DwMvNz8rGxMTEwsTBrYNPRk1FO01bX2VrZV9bYFlYUk1Uf6KqubWzq6mjoa2qrKetn6y0tL/Dvrm4vbawrausr7W0ur7Fv7u8urO5u7i5ubWtsLS9u7G/vLiytrmzubu0ra2orKyqqaeXnpualY2MmJSTjJWWlJyZl5WWmZKYn5mQiop+iYqKkY6Vl5OUn5mWkJSZmJmWmJOUm6GeoZiYmp2ZmZaenpibopqdnJuYmpuZlpeXlpyZlJyYfoB4eXZ2ZWZpamhea3BueXhjYmFgXlhXRkU4Ojg6OTc5NDQ5NzY2NTEyMzM0Ozo9Pzs9PTo6PTs8Pjo7Pz48QkBDQkJFQj0/Q0NDQ0RFQDk6QkFBQj5CQTVCkJeUlZmSj5qQjpKRjZSVi4qHjI2UiImPkpq2u7S8xsHEwr3BxcLAtLO9v6ywr7rDysPCvs3IxbfByMW/wcLIzMrCwsTJzM3Oz8zDx8bIycjIycfFycfIx8LGlmpYRz8/R15jYmpgWlhXU1V2mba+u7y6vKytpqm7urm3v7O1uLLAxrq3t8Gzsa2tqau1s7u2w7a2vbWxt762s7e4sLW2v7uwvbq0q7CxsbO8urOzrqutq6yxnaOjoJqQjpiXlZCclpaYlpWSnJmTm5+clpGUjpWQiYyQlZOUm56YmZKSnJedlJmSk5aZmJ2VnJ6do5yVnZ+TnKKcnKCfnaOemJSVl5ebmpmgkH99cXRxb2NhaHZpamp1bnlsXmRbVmBZTEhENjw5OTg4OjUzOjY2NDQxMzUyNTs6PD47Ozw9PDs8PTw7PD49P0E/RUFCQ0M+QEFARUVERUE7Nz5DQkI+Q0I4O4+akZaalJKUjZCUlI6VlI6Pi4yJk4uIkJObt8C6xsXEw8zCwcS9vrWvt7uvr7O6wMfFxMHMy8W2ucDCwsTHytHLwcPExsnFzNDNx8zJwsLHwsvLyMfMyc7Fxsa9qXJQSzBYU1VmYVNOT3CpyMjCxMbAvL60sbCwwb6+wcbAvre2w8K6urbAvrWyrKmvsri+tMC0tLi0t7nEua+8vrm+v8K/tbq2q6qsrq+wt768trSura2vtaWlqKimmpycnZyeopydmZOQkp2VmKCdmJiVmZmZl46LlH2QkJefmZmYk5GToI6Nko+VjpCUlaKdnKSem52elpyjoKGipKOkop6amZubm52enIN9cn14cGdga2p3bWlmdm90Y11jVVdVVE1HOjc7OTk3Nzo3NDg3ODQ1MjM0MjU7Ojk+Oj08Pz04Oj05OTk9PEBBQEVCQUJBQT9AP0RFREVAPDk+QkNCQENBOjSAoZeUmZiVkImUk5aTiZGMlJGOiJaKi5CXnMXLw8O8wMPHwbm9vbu4tre3rrK3uLzAwsDCx8bHurzAwsTHyMbSycHDw7+/vsTLyMrLyby8yMfJzcjDyMnJxcXCw8LBvJE/TnZ+iVZMb6TL1MW2v7/Av7q6vbWzs8C/ub/CucG3u8G8uri7ub27srCvsKy5wri9ube1t7q9xb24xsjCwcLGwr28tamurrCwr7O6t7m2sK+tr7OppquprqannqSlo6OjoqCblZiekZecl5GRlZeZlZmRlJiSlYyYo5qcnp2FiZ+TfJKWlZKUlJennaCipJ+en56foaGkoqKjoaOinJyfnqOgppl5enmAc3BmZWdka2Via25vb19ZXVdWTlBKRjk5Ozk3Njc3NjM3ODk1NjEzNTI3PDw8QDs/PDw6ODo8OTk4Pj1APz9GP0JBQz89QT5ARENDQTw5PENBQ0RBQDozbKKdlZedlo+PmJiZmIiSjZGVkI+Vjo6TlpbKy7u5urnBu7q3vsG8vLu5sa61uri4u8S6vsC+vru8wMXBxsK+xsK5u8O6uLm8vsHHwca7ucjIw8XEwMPBwcDEwcK9vMWnd2qDkJhvqcjIx9HBr729uLm7u764tbG6v7S8vrG5tbi7tryztbm2uba5t7GtusG6vMG/t77Ev8bDw8fHwrvAwr/Cv7iys7O1tLGut7S3tbSxrK2wp6alp7CtqJ+nq6ajqKWmpqCgn5SYmZSRkZWUl5OYl5qhnZ6hnKGdoaWglpSbkZeXmJqTnpmZqaSlpKWdo6CanqCkoqOcoqGjoJ6cnp6ppaiVfXqDeG5mYWViYWNkZGpjZ2RbWlpdWVFPRT07OTo7Nzc5OTY0OTk6NTMxNDUyNzo7O0A9Pzw8OTc3Ozo5Ojw+QD8+RDxCQURAPz49QkRCQkI9OjlCP0FCPT44NVmfnJiTmZaRlZiYmpeQkZCQk5GTlJKSkpSUxce4tbq5wrm5vMPFwri7ubGxtry6tbnAu7u5tre0tLW/u72/ub66urTAuLW3sq66u7fAt7zKz8C6v8C8u8W9usDEv72+r3NlfZGLidHFv7/Jv7DBv7q3u765tri0uLy1vbi1tK+zvLG3tri/tr25vb65t7q+u7/Axb29y8PGw8TAw762ubq2v7i7v7y4trOyq7CwsrWzs66sq6emnqeurauiqKumpqqjp6iqo5+Ym52bmpicnJiXnJuhpZ2anqGhoKGmoJqbnJiboJ+dnJ+coKiho6SknaKfmqKgop+el6Shop+dmpieqKWhi3x5iH1xZGFjY2hrZ2dqZmpeVlZUWU9UTEY4PzY7Ojc3OTs2NTo7PDYzMTM0MTc7OTg/PT47PDs3Njk5ODo7PUA/PkA9PT9CPjxAQUNDQT9DPTo2PEBBQDw9ODdJlJibj5OUkZWYlZGWkpWRkJGUlZSTk5OYlcHCwLq8ub62uL7EwMKxvbqytLO4vLW3vMC8vbS0sbC1t7W7wbi+ub+8vLe0t6+ut7W5v7vB1o23v7vDtbrHtrW4ury4ubaqo5iOf4PJv7+7wb65xr3Cv7zFuLe3tbi2try7uba0uLq1s7i8vbm/ucPAwLu5vLu+vcjEvcfEw7rAvb62sra4srm0usLCureysaysq62yr7Kur6ijpJ6rrKyqpKakpKiqoqemraihoaGmn6Oiop6bnKKfoKOdnJuhn6KgpKCem5eZn6GdnZ6eoaWkoaKioZ6ho5yinqCZnZijn52eoJqZoKKmnYR6g4F5cW1lZWdvamVsaFlZT0tLS1JKTEhEOT44PTs2Ojs5Njc8ODk4NjA0MzE3OTk7Pz0+Ojw6ODg5PDg6Ozs7PD1BPj09Q0E8P0NDREA/Pzw6Nz5CREE/QDg4P4mYmoyMkI+Tl5WMkpCakpGXmJaUlJKQmZTDvsbBwby8uLi6v7a8scK2tLyxtLa4s7q9v768sq2vrLGwt7y3u73BxLm3t7a1ubm6u7+8z8R3p8y9x7e5t622tLe5s7WxvMnDlUt6yr6/vr28v8jDxcW+x7i1s7O+uLm4vru6uby7urS3u7q5v7zEwL+5uri/ubvFxr3Fw8Kyur27sa+2uLO3s7q+wLm2rLGrrqmqqa2qqq6mpKWnrq2ppaOio6GkpaWmoqato6Klo5+ho6Gcmpyhn6CloaCenZygnaWgnpeVmZ2fn52gn6KmpaCknpybn6Ofn5mcmZ2epJyWnKOcnqGcppZ+f4Z8a25xZ3FrdGZjbmBcVUhLSkRKQ0NHPzo7OD48Nzs7OTc4Ozc8PDYyNzUxNjk8PD08QTs8Ojs6OT45Ojs9PUA+RD89PkRAPz9BRkQ/Pzw9OTc/QUNCQEI5Ojl3nJiLh4uQkpOWjY+TmpOQnZiSkY6QjpiTvbfHvsO+vbu+vL22uri9ure9s7OwuLi1uby7wLeqraSusLi7sr2+u8S2tbi1t7++xLzCxNavdH+6yM/CwLiutLS7vbe5sb3Dyo9DdM3Dwr++vbzHzMfHxMe8trW3wb27vMDDu7/Cv7y2t729vcHBwL+8ube8wru3v8W7wr++tbe8vK+vt7awtLO6ubq7r6mtq62rrKaqoqeuqKWqra2vp6Sgn6ajnqKjqKOjq6Oiop6dm5ublJaZnJyfpZ6fnpmYnpejoJyXmZqZmqOjop6jo6egpqCbnaCjnp2WoJmcoKCblJegn6WcmKKQgYaBcWZsam91b3hkaGNcY1FLVUhFRUNHQzw7OTg9Ojc6PTo4OTs3PD01MzY1MDY4OTo8O0A9PDo+PDk+OTk9Pjs/PkM8Pz5APz4/P0ZEQEE/Pjo3P0BDQz9APTo4ZqGYj4uNlZKVlY6PlpmVl5uVjoyMjY+bk7m2wbS/vLm8w8C+wLq1trKywLmvsry8sLe7tru8qqqjsLm9vLK8vrzFuLG4ubzGycrCxsnSmnFyq9LRzMrEtbq/xMi+vrS/wMB5Um3LxsK+wby/w8zKx8XGwbm+vcS/wL/CyL3HxsXFvLrEv7vBv7rAvLu7wMS9t7nCub69t7S2uLqur7WxsLCytre0t6yurKqsrKuoq6Gms6qlra+trKippaOkp5+io6Onoaeiop6cnZyamYyQlpeZnaKZnpuVkp2UoaCdmZ6fmJimpqKfoqKmoqeloqCko6GbnaCbnKKfl5WVnp6kmpafiYGDgXRwbW10bG1vYGNfYmJOSU0/RUA/REM7Ozo6Ozo4Ozw6OTw+Ojo+NDQ1NTE5OTo5PDtAPD89PTw4PDs6PDs7Pz5DPkI+QD89Pz9FRUJBQj87Nj9CRUQ9QUE6OlmfmJOSlZqVmpOQlpeclZuZlpSVkZKTnZm2uLaxuru6vsG5uca7trWypb69tLbBv66zvbS4wbGwsbS7xNDDur68xL63vMC/yc/HyMrKwodyc6PLzMvNysbCw8vOwby4vbqxcGNiu8jEwMC/xMDKycPDw8O5w76+ucC9w8bCys7Hxr26xr26v7m3wLm5vsDCvrW0vLi2u7CvsrK1r7Cvrqyus7CzsrirsbKxqrCrq6yrrLatqKyusqarrKmpoaWgpaakrKSmoaChnqGgnaCMlJeTm5+mmZ6emZOYnZ+gnp2eopuYp62ooqSgoKKqpqmhqKGlm6CgnZ2jn5SYmKKdpqGfm4J7eoh7bW14fGBxZFxfYGBUST5DRUlCQz5DOz42OTo7Ozs7Ozs7PT05PTU2NjIxODo5Ozs6QTs/PDw+Nzs8Ozw9PTw9Pz5BQUE/P0FCQUVDQkRAPDY+Q0RFPkJEPztTmZuZmJ6dmqCalpyZn5KdlZ2boJWWlJqYur20sLu8wcTCv8XGura5sqO7vbS3xLuwtbq2ucS4tLy3u7ur2sO+tr7Avr66ppypsrbDv6V6dniaxMfLyMHDwMDJysG/u7mxoX1zaq3IxcS/wMG/y8fDwMjAu8K7ubS7u8PDwc3QysS9tby7ub+5urW1s7/Avre0s7S4rbeqr7CwsrGvq6+nr7ausrG5rra2uLSzsLGttrS6sa6srranrLKsraSjoaenqLKrqqWkp6elpaCml5ujn6SmraKeo6KanaWiop+foaWenbC0sKSlnp+kqaevp6mgq6CiopqipJ2anqGmp6+psZWCe32Bem5zeXRocF5cX11aUkZFRE1JQUQ9SDs7NTk7Ojw8Ojs7Ozw/Oj01NDUxMjc4ODs8O0I8Pz46OzY6PTo7Pj0/QD87QUFBPj4/QkBBQkJFPjo1OkFCST9AQkA7TJqdnZ6fnZienZmampySoJWbnp+blZGRl8W+urbDvMbCvr/Ixbe1uLe2ubu0r7e3srWzt7m8u7a7u8S5bazOvba5wLyrfm5obmxygZWYc3d8l72/xsC5wLy+xcS9vbixsJmQfoCbysLDvL2/v8PDvr/Ivb7AuMi+q6Ghoaa5wcnFuLK4uLe9ubuxtrLIwLu2tLGwt6yzqbCtrbS3r6uuqrG1r7Gvt7O6usC/tre2sru6wLWyrbO3rLC6r7KloqWrrK+5s7KosK+xr6qiqKGkraitrLOun6inpqWmq6Sknqaqo6ayuLOrpZyfp6anrquqpbClpaWbpKOYn6exrLW4sLKOhHl/fHdtdXtxb2pcYGFaVFFBRklHS0BFQ0k8PTY7OTk8Ozo6Ozo9Pzw9NTU2MTM2OTg8QT5AOz1AOzs5PD04Oj08QD46Oj49Pj09PkBCQkJBRD03NDU9REc9Q0I/PEWUnqCgoJyXmpiYlZmdmZ2fm52bnJaRj5LDwMK9wrzEvLy7xbu3s7e2tru7s6CWtayvsbS0tLa4ucDNtHaAs722tcKlh2laXWBNUltabnN3gJ+4uMK6s7u3u72/uru7rqSbmYiRfsDEw768v7u7uLbBwrbAu8isvK26uJ+TkZujt7SwtLS1vLm+ubq7ysO7uravsL2xuK+ys7C3vbaur66wt7CsrLK2vbzEwrq9t7bAv8G3tbC2srGzurGxr6err6u2v7e1qbqztbmxp6uop7ausrG1uaisrK+qr7CqqKessayytry0saykqKuoqKusq6i2qaaonqadmKOuvLG7wbSmiYF7gnpzdnd4bnJhX2ddW1VKPT8/R0c9R0NDOTo1Ozk5Pjw8OTo8Pj4+Pjg4MzE1Nzg5Pj9BPzs6Pz08Oz09OTs8OTs6Nzs+PT1DQT8/QUJEQkE8ODU4PUNGPUREPzw/iZ2en52Xl5WUk5aZnpubmpuYlJ2Uio6Owb7Dwr6+vrm2usCxtbGzt7fCtbOrrbOoqa61r620trnCyaiEeImgr7Wea2VmVlhfSUlNUFNsd4WlsLe+ubK1sru5vLa5vrSVnKeWoXCuycTAvb+5s66yvbuuu7uUj87c5uLRuJqShn+dra+us7q3ur67wMXBu7y3sLXEtb+0uLu0u8PCs7a2sbisqaWrsr23v7+7u7exvL28trGvq6uprbOvsLCrsLSpuMC2sqm0tbC3tq2spqu7s660uMKwsbG1sbK1saywsri4ubi+tLGzrqyxramvrqqyuK6trainoZ6ptr+4ur+wlol9gHxxdHd0d3JtYGRiXF5PSUI/PUlERk1EQDc3NTs6OT48PDk4PT47PT86ODMyNTc2OD8/Qj86OD4+PTw5PDk7Ozo8Ozs6PEA+QkI9QEE/QkI/PDs3OjxBRD5CQz8+QYqgm6GdlJiVlZKYmpyWm5WalY2bj4SIhru0vb+7vLm3s7y8rLOytLS2wLXAr7Kzqqqxt62pubO3v8WriHx2jKCZYFRDV1ZIYWtWT0ZJYI2gq6+2urW0sqy8ubi1uMG9i5myo6ZypcvCv7m6ta6lrLOwprO5mujj29XX1c+6iXVqbJisp6+2s7K6tbu7u7W4trC1xLK+vL68ubrFybq9vraxp6SeoamxrrW5trKxq7S2trGopp6gmaWmpKynq6y2qa+6sa2kpq2lq7GrrKmtuLawsrjBtrGxtbGvu7ayt7W1sry1urKwsbKutLKqrq2nuLWyta2uqqiosrq9wLa0qY6Ce393cHxvdnNvZF5oWV1eU09OQj9KQ0FLSkA2NjU7Nzg+Ojs4Nz4+PDs/OjkzMjc1NzU8PD48PDg+Pjw8OTk5Ozs7Pjs7OTw+P0E9PEJAPz9CQD47Njc6QERBQ0E/QUKJoJ2loJSWmJiVnqCcl5uYmpGMmYmDhoS1r7S7u7S1sLG2uq6wtLOvtbq1urC1s7KttrqvrbyzuLi/tZGCeIiPb05KP2NaQU53gJRrTUFcgbC1s7WytK+su7q4trm/xnaEqp+bZae/uLWysa2tn6Snp52ror3Lq6i1ys/Py5l0a2xyoKSqra6nsKyvsbGtsa6ur7mwtLy+uLm4x8W8vLu4qaKcmJufp6assq6zqaapqq6popqXl5GcmpijnqKir6ekrKaompqemqGnp6anqa+2squ0trCqsK+xqbm2sbWxrqy3s7avrquuq7S1ra+rq7GtsbKoraurs7W3ur2wq6GLeoJ5cnZ0bXZqbF1ca1VeXFBOSERHTUJHTkc4NjY1OjU6PTg7OTc8PTo7PTo5MjM2Nzc3Pjs9Pjo6Pz48PDw6Ojs5Oz47PTk8Pj1CPDtAP0A/QT8+OjU1OkBFQkRBQEJBiJ+ipqGYm56dmqWpmJudmpmUjJmHhoeGrq2uuLmxsqiur7iyq7CwqrK1ubm+tbK4tLm6trm7tbWzt7aVjIiEe1hGQU6GWkpKWHaNgGNAUqK5s7SysLGtsLm4tru3ur2QorKspHOrsKmrraujqKCdnp2Ymq6zWjhLearFysaigIWSiIieo6mooKanpaqtp6ynqKesq6yyu7SztLm6trK2ramgmpaWm52fq6yqr6Oko6GpoJuTjo+QlJKSmZaanaSloJ+ep5iVkpSZnqSjoaWqrK2iqaqppKmtrqW0sa6xrKqprq+wraWmqqSos66trKmmpqmrpqqnq7Ksr7Oxq6mWgX+Bd3J5aXV0b2VVYmRYXVJPTUlASVNETkM9ODg3NTo3PD06Ozw4OTw7Ozw7ODI0ODk3ODs7PDs4PD0+Oz08Ojk8Ojs9PTw6OkA9PDw7QD5CQEE/Pjk1ODs8RkFDRD9BQYijpqKjnqCfp6Coqpufm5yZmI6Xi42PjKqpqLGvsK2lp6ayr6mmq6CvsLu1vby4wMG+vLy8ua6sr7G7qpmZlWlOQFJ4cVBJSUtnm4FZRVGtu7Gss6+urK22trK0ta6ppp+am52fpqieoKipn6GnlpuWl4ysfTJSaFZ0r7WxnoyaoqKblp2jop+epKCkrKWmqKSio6OrrLOuqa6urqeqraisoZyamJmYm6qoq6ufpqKbo5yVkIyPkJCTkJeVlpifnp6amaaXk4+Slp2ioKWipqSnoKKko6Ghq6uksq2qrKyno6yuraufoaKkpK+srKmmo6KqpKqppKmrpqmsq6ahiHmDfHZ/emN4bW5cUWlVUE9HUE1NQ1BSQD87PjQ6OjU7Oj07Ojk9OTk8Ozw8OzkzNjk5Njo7Pz06ODs6Pjw6PDs5Oz07PDw9PjxAPT88ODtAQEE/Pz45NDk8N0FDQkQ9QEOOqqSjoqGinaqlpqimoZ6dmZ2PmJWTkJWnpKGmqKmlpKChp6uhnKKbp6u1sry9wMLCwL7AuLSnpKyovMKrpL5pRVKcglFXSUlfS1OOYWRigK61qrK0rqqrr7Cys62lnZGXk4+YoJ+ioJyjpJ+dqJOZlJWLoGNehod0WoyjmZuYnaGkp6adnp+gnKGfo6innKehoKSfrKisrKCpq6agpKimrKOenp6al5qrpqqxo6WonqCclpOPj5KRmZCWlZiXn5ibmpukmZeUlZqdoJ2nqKWgo6Kho5+coKmqpa6upqipoaKqrqqnoaCio6msq6eppqShqaKlqaalpKKmpKijkn59gHV2fW5se2RoVlNkTkpIR09TTktOSDxFQD0yQDg1OTs+Ozk5Ozg6PDs7Ozk5NDg7ODc7Oz48Ojk8Oj07Ozw9OTw8PD49PUE+QEJAPTc6P0FCQEA/ODU1PDpAQ0BEPkFGlq6koqWeo6KpqKipqqWmnp2imJiZmZWbop6bnqOioKOgoZqgmJeXlqGorK62trq5ure3u66ooKGpoarGv8qhUEFynnhPbktLYmV1c2BbXnCPsa+us7Wqpqyso5uZlI2RlZeYmJyfoqKcnaSemqSWlpaUj4huh7q/o2Nnk4eUkY6eo6Kmop2fpp6dn6OmqJ6jpp+qnaqtqq6nqLClo6Smp6ymoaWim5mer6iusqumq6qgm5iYmJWTlpqTlZaalpuXmJihnpycl5uhm56ao6eln6GioqOdm6Gmp6aoraOppZ6kp6mkpaWhpaSsrKmmq6eioKSjpKenoZ+gpaKmoIl8gH53eX1leXlhYlNWYUlJS0xTVUpTUU05PkE2Nz02NTs6PDw5Ozs4Ojw9Ozs4NjU3OjY5Pj0+PDk5PTk9PTw+PTs7PDo+PTw/Pz9APT03Oj5AQEA/Pzg1NT08PkFCRkBAR6CupKaroaOqrK6tp6ypqKCipp6bm56aoJyalZmfn5uen56WlJOXk5KcnqSorq2sq6uvqq+pnpeepZ2jx8ePV1NJZKNdZX5vcl1Qa2NbZF9da4+0sLC4rKahnJ2alJiamZCOkZWRjI6Nk5minJeimJmWlpmIeqTH1tWfT2x/iYCDlJqYm6ujobCjmqOmpqqioaqiqaSosquxsqu5qKarp6urqKysp6Ggo7GusrG0qrKvo5mcnZ6hmJubmpiZm5WWm5aZnKWhoJqjoZqdmZ+kop6gn6KmnZulpqWkpaiip6OepqOinqaloqWlqKykpq2noJ2eoJ6gpaGenqWgppmBe4F8dnZzaIJtZVxTW1pNUktPT1ZNVE1CNz5DNzg9NzY6PDw9Ojw5ODo7PDo7OTc2Oj01OTw7QD03ODs3PTs9PT06Ozw4Pj09QD5BPj4+ODg8P0BAPT83NTg9Pj1BQEZAQUihqqCrq6GkqquwramtqaelpaWkoKGfnqWXl5SYmZ6YnJ2blo+VmZKRnJihnaqip6Cep6Gln5ySm6KanqukjXpVaXJ1dXFidnZYV2NgY2dZWFdlrK6sr6efnqKhl5GUnKCcmZiSk5+coaOanpqWnpmdlpqXj3efytqysmdGZnp4f4OBe4q1r6azrKGtraOvpaSmoamorrWzsr22vrCssa6tqaq0sbCoq6iztbizuK2ytKSgnaWgrKGhoqGgmpmWlqCcm5iloaCeo6Ggn5ucpaCfnZyhqJ+fp6meoaOkoKagnqehn5ymo5+ipaOooKmrpZ+dnZudmqainpyjnqeQgYN/fHh2and1Xm1bUmFJUlZIRlZXS0NNSD1LSThFPDc3Oz49PDo8OTg6Ojs6PDk2Njo8Nzs+PT8+OTc9OT47PEA8OkA6OkA/O0A+QUA9PDk3Oj5APzo+NzU4PT0/QUBEQEJGnKueqamipamorqimqqWmp6aoqqGlpKOmkpOVmJacmpqcmpWTmZuNk5+ZqJ2un6eenKGdnpqZkpiem6KhoKSAboJwYGNYTFtTWk1MUFhSSE1NR5esqqmloJ+akZKUmJiWlpWMiIuOlZ2cnZyelp2YpZ2gmpNwhr2yU4p1eXFlaWplXlBrrLqstLSwt7CutKmmpKWsqbmztbvDvMPBt7u2q66xuLe8r7OwtcG8t76zs7WirKKpqbKpq6inqJqZnpqqp6CZqKCfn6iopaWfnaqiop6bn6igpKetmaCjnp6nnqCmnpycoqGbo6KhnZympaWkn6KZnJukn6CboJyjiYaFfnZybWl3bWhuXVhbQ1dOSkdOR0NHTj0+TD41PDk2Oj0/PDs6Ojg4PDk6Ozs8NTQ6PDg5Pj4/Pjg4Pzk8Oz0/Oz1BPTo/PjxAPj8+Pz08Njs/QT07Pzg1ODw8QERCREFCQ5WqoKapo6mqqKmjoamgpqinrK6lqaWpqZSSl5mUmpqanJiYmZyamJmqoLGit6Swpp+enZ2XmJWZnpuco5+dimJXXmVgV01RRz4+P0NDPz5CUXioramqpqCen6Gjnp+em52clJOVlZ6emJSFnZmfmamirKCSgnuIg3qBkKWHc1pLX1pJQKfBtbm7wMO5vbusrqexrbHCtrjCxsDIysDKv7C5ub24wr64tLvGxL3DvLi0qrOtqrO0r7Ouqq+jnqyot7Kto7CmoaOwsa6wpKWuo6GgmqGmoaSqqpmdoJmao6CmqKGcnqKemaSenpiYo6OhpJ6mmpuipJ6fm5ubnIeGgXx0cmtrdXJxaFdcUUZVSERKUEk/RkI0Rkg5Njw+Nzs8Pjw8Ojo4OTw4OTs4Ozo5Ozw3Oz49Pj02OEA5Ozs9QDw9QDk3PDw7Pj0+PUI+Pjc6QUA+PD45NTg9Oz1DQEFDQkGRqqGlqqelqqimn6KnnKasp7Gyq62jqayVkpWalJecoqGbnqCinJ+psqu7sr+rr6ylnqCgnJyYmp+gmp+flX1gXmVgUUdEPUM/RTw/OTZOf6qzp6SkoqCepaymn5idlZKanpmVjIqGiIZ4bIafoqGpqbSReYyHh5ajpKaIYm5rka6ATES3xL/EyM3QyMvDsre1vrK+xbu+zM3GzMzM0se+v8DCvcfHwrjEysnEwce/urS6u7S7t7C2squ7sq67t8C7uqu4rauquLu1vK6uuKOmo56mpaKjqaaZm5+Zmp2nqqegoaGkmJSjlZSZkZydn6Sep5+en6KdmJmUmJSIhX56cmtkaW94a2ZaXEZMTUVEVE1FQkU3Oj87NTQ5OTc5Pj87PDs7OD48Njo9OTw9OTw9Ojs9Pj4+NztBOj45PT45PT44Nzs6Ojo/Pz1CPj83OkFAPTw9ODY2PDo8QD9BQUE+kqugp66noqulpKKipaGlqquwsq2upKmmlJWWmpaUm6SmnaGqp6KrrLy8v8PBsrK4p6Ghq6qhnJ6hoZ2bmn1zamFXTkU+SVl8cGJCPVyOrqyhmZucnp6Zl5eYk42Pl5eUj42QjIKDgnZycGxvjaSrrbKnc3Z5bmxsgoR7hVlWeYzAp2FuzMTEy9DS1c7Tyb3Av8O7xsXIxdHTzdPQ09PMysHGxsbKyM+/ydHNx8bJxsK9xMG+vr+1vrOtv8DDxMjFyMSvv7myuL3EwsG7vLy1rqenrqigoqmkmpagmpmdqKupo6SknpePm4uQmYmVmJugn6OdnZeempOTi5WPhYF5dXNlYmdyb2dfWlpET01DRlFJRENBNTU1ODlCPTY4OkE+Ozs+PDk+PTc6PTk6PDg8PDw7Pz8+PD0+Qzw7OkA9Ojs6Ojg4ODk7QT48QD8+OTtBQTs7Pjc4Njo7PkI+Q0FAPpOvn6ivpqiro6KloKampKuoq62qrqKqo5Kcl5ebmJuirJ2frqalsarFxszOzb+wwaikqKytqqCdo56bnZZrZl1USURAP0uFnqWahKCyraOenJ+amJeUk5SXkZCQjYiEhImHg4CBgYB5cXFuanaht7WZl29lZlxNVoOAcJB6aG9ftKdsn9PPxM3U1djR183Gx8nMw8XKz8rS19LX0tXW09TIzMfMzcrTzc7TzcbJysvCx8zHycnGv8Ozs8jFy8vMz8fKv76/vcHHxczMycnAw8CusLOonqGqo5qTnpyYnqaprKSlppaXipWFkZSHkpKSmZualpiQm5aQjIaRi4B7cnV2Z2Nnd2plV1hSRE5HQElRQz5CPToyMkE8RTw3ODxCPTs9Pzs7Pj05Oj48Oz44Ojk5Oj86Pj1APkA8Pjs+Ozk9PTw5Njo6Pj08PEA/Pjk6QEE6OT44Ojo6Oz4+PEE/QT6QrKKiqaanqKSfop2qqKOso6OnpqyiqZ+To5iWn56dpK6bn7CrqKyxyc3U18/Gu8esrbO3rK6jnqOinaGdY1NMSkRDP0JSrdG9sq+mnJycoKShnZuUlJWUin15cWxlYmhycHJ7hYqAdXBtcHJtg6yYi5ppV2NYX2RwgG1+j3JPc5uZgMbQ0cLP09bY1dXSy8nO0MvGzdLJ0tXX2dbY09bYzdLKztHMz9HN09DAycjLxMzNzM/QxsfItsDLwNLNzNDHysnAxMPIz83Q0c/NysjNuLe7qJ+lq6efmJ6jnp2qpa2pqKiSlYiQhIyRho2MiJOVmZCWjJiSj4aHjIR9eHN2cGNhZXNjXVJcSktHQUZJSj87QTg+NTU4Njs4Njo8QD07Pjw7OUA7OTo8Ozs8Nz09Ozo+Oz08Pjw/Ojo8Ozs5Oz89OTU7PD48PD0/Pz46O0BCOzk/OTg7PT0+PzxBQEQ8hqugnKegp6Oim6CbqaSlqaCfoaGmn6ifmKSimqmmoqarmqOwsamotdDU19rSx8bLtLXBxbG1qKGlpaCio1tJQEFEQUZQdbGvppqUl5+cmqCgnpudmpWJd2lkYV9gYF9eX19dYWx1c3BvbmtwbnKGjYuOYk9cVFxgUWZeWGVaTWp3eYfV0dDL0M3T19bT1dDP0tPRydPRx9DX19jS2NLX2dTWzM/Pyc3SzM/RwMfEycfPztLR0cjMzcDLzcbUz83PyMXLx8fJzMvU1NHVz9LM08K5xbGlqLWuqJuoq6Wdsqiws6ysk4+TjoiKjoOPi4SQjpmNk4+Zj4+ChYx8enFzdG1hY2ltX1ZRYEpKQ0ZDU04/PD40Mzo9NTI4NTU8PEA8Ozw6OTpAOjg7Oj46PTg+Ojo8QD08OTs9Pzk6Pz07PTw9PTo2PD0/QD08PT0+OjxAQjw6PDc0Oj48P0A9RkFEPYKknKClnqWlo5mcnaSeo6OfnZ+doJqnnpyhqZ+vraqqq52lrreoq7fX1NXZ2dHO0L+8zMm2vq6nqqiho6xnQzg9PkRYgqqon5eVl5manJ+dmJudk31xZWNiX19hX15hYF5hYF9gZW1wcG1qbW9zdH97cWtlVEdJUVBHRT1KUFxfdVtz1dTQyc7M0tbS0dbNz9XV0cXR08rQ1NXWztPR2NfX18zIzsTKz83KzcDKwcnKzs/QzNDOzszP0MjM0dHLzsvDysjKzcvM0tPO1NLR0NDKvci5sK67ubWrtrCtqLits7+7sZqOoJSRjo2IjpCFkY2ZjJGRlY6RgIWJenZvcG9rYWRucGFYXFtJRkZFTVlFO0A9MzM8PDg3ODY1Oz5APTk8PDg8Pjk8QDtAOj04Pzk4Oj88PTg7PkI6Oj08OkE9PTw6Nj08P0A9PDs9Pjg7QEE9Ojw4ODs+PD4+OkVCRT6Bn5mlp6Cgo6eam5+cl56eoZqdmpyappufpKefuLa1taykrK6+tLDA2NLX2tzWzs3Kw9LPwcGxqaytqaSyfEhGQjtWjaGblZOWm56enpyTlpeUiGteXl5hZGJgYGFhYGBgXl9fXVxibXJubXFxcnF3aU9+jWpRWEtXT0tgQEtbUm1idtHSzsbNzM3Uy87SzMrW1tDM0NPLzNDS08rO0dXS1dbKwMrCxs3DycrDzcTGycvLz8vOzdHO1MzHydDNycfLxsfCxsrMztHRx9DPzc7M0MXHwbi5vcTCvcO5srK+sLvDw7WqmKWhmJaRlZWSi5SNmpGUlI+PlYKJhnlxcmttaGBgcWhZWGhWTUdNSVFRQjtEPzs2ODo4Ojs1Nz09QTs6PD05PD05PT06Pjo8ODs9OTtAPD47Pj5BPDk9Pj1CPTs3NzU/PDw/PDw7PDw4O0FAPDo8OTs7Ozw9QTpFQUU+hJ6bqK2epKSqnJ6fmJKXm5+am56ZmaKVoamppcTCwb+7tbKxx8K4ytXW2drb2MzMz8jW1cTCta+0qKCtl3hsb292j5qNjJeVkJORkZWWlZCLe2ViYmJgXV5hY2JgX19gYWFgX11bXWdxcW9wcW1pbnBmfYt6ZmdbSlZdYzxBVkthaXfOzcbExs3K0cfKzc3F0NLPzczUysfKzs/Hxs7Sy9DPxbrEv8bKvcPHyc7Fw8jAx87IxM3LzdDJxcXQycbCxsnFv8HIzczMz8PKzMnHzNDFxci7x8PJycLPwL28v7DByca5vaqwsqelnaKcmJCbkKOZl5mRlZiJj4J4b3Vka2BeZnFhW1dgR0lIR0lNVUc/Sj02NDM1NT09NDg9PT06Oz08OTo7OT89OTw7PDg6PDo6QD1APD09Pjw6Qz48Pz04ODk6QD4/Pjw7Ozs7ODo+Pzw7Ojc5PD49Oz49RkFDPYOgm6qupa6qq5qdoJeUjpedmpmgmpqcm6WysazJzcrIxL68uczMxtDV1dja29jQyc/P0dPIwre7u62ktn5ngoahqZONjZaPhYODg4F9hIR/c19bXl1eYF5gY2RjX11cXl9gYF9bWlxha3JwbW1oZ2lqdoORkn1oaFRXZlBCRVxWV115ysS/wr/Cx8nIyMnHv8TLxcfKzMnEwcrJwcHLz8TLyL+5wbzGyL7Axs/LxMDDu8rHyLvJxsXKwb7Cy8bFxL7Gvr3BxMbMxsW8v8rDxcfSxcHJwMrKx8jG0MPDxsOuxMvHw8q3v7y6s6mspKWYn5iso6Gmm6Ogm5V8d3N1ZmpbYW5tWlxYUkRMR0NHRExERlNANTQzMzVAPTM6PDw7OTw8PDg7PTtBPTo8Ojs3Oz05Oz07PTs6OD4+PEI+Oz88OTk7Pz07QD48Ozk5OTk6Oz06PDo2OTw+PDs+O0NCRD5/pZypsqm0rrCdnp6YnImUm5man6Kfmp2ovri8ys/RzMfCw8bNzs7M1c/V2djZz8vSzc3OyMG1w76ysLZtXnp7nZGKkpaGeoCEhX91eHVycF9aW1xgYGJjZGRlZGBbXF5dXl1fW1laXGFucW1pZmdraGx/kp2Oc2VaW1NBQkVPUlNWkcK3uLu5t8DBwcO9vbi8vrjDycTGwbzGv7e6w8i/wcm7tru7xcO/vMLOw8a+vrXBvsS7vce8w7q1vcbEwsO3wLa2v7+8zcS9trrIu7++zMTCxsPGycfJxtDGwszHssfJw87MwMXCv7yyt7Cyp6ioubClrbCqrayUend4a2VoYGhvZFZeWUpGSkZIS0FGQkZKQTk6NjU4ODUzOzo7PDk8PDs5Ozk6QD46Ojw6Nzo7Nzo7Oz88OjxAPUA/PT8/Oz07O0A8Pj4+Ojk5ODk3ODo8PDw7OTo8Pjs7PjpAQEU+fqygrLWrt7SyoZ6fl5qNlJaan52mop2et8XCxMjO0srKysfNzc7RyNDG1tTV183Kz8XJxcfBusW9rK6nYGN3gJKLiIuEeH+Ghn99g3t0dGNcXF1eX2BiY2JiZGViXVxbXF5cXl1aW1xdZ3Jva2RjaWlrcomikn9mWVFRU05AO0dMcKCzrrKysrKyurS7sLavs66xusG7wMS7v7q0sbq+wLjHuLS8tsHCvbi9xsHDu7Wvs7W7v7TFuLu1rLm9vsC9sbq2sLe6s8a9t6+8v7W3tcW9vsPGwMTGxsfMxb/FxrvHy7/PycfDxcHDt8O9vba5vse/rLW7tbe2jnl0eGdnZWJrbl5WXmBGS0hISkdCREFFRj89OjU2NjYzMzs6Oz06Ozs6Oz44PEE9PDo7ODc5OTk7PDo+Ozk+Pz1APz5CQD1AOjo+Oz89PTk6Ojo4NTY7PT48PDo7OT49OT86PEBAPIi3pauzsby8sa2foJmUlJiXnqujr6qnpMbLzcjFyM3M0MvNyMnIysnKxNDN0s/NxcfBxcG/urjJt6uwmltnb4iOhYiJenh+hYZ2d4F8c2hdXV1dXmBfYGRhXmNlY19eXFteXF1eWltbXV9rb2xmY2ZoZ2p1kY+DbV9TWGRdT0REXZWYo6atqqiqp7KstK+xp62mq7K6ubXCubm5r6q0ubqzwbmvwLG9vLu1u8e5w7atqqiwssC2uL2wsaiys7W7vKuutqeutq68srCquLCuu667uLvAwL66w7/Gw8XAvMbBx8q4xcfFv8fDwrnExsK7xsnMy7O5wr27s4l0dndraWBibGlZV1dbQUxMTUpFQUM/RkE7Ojo5OTY4NTQ6Ojk7PD07Ojs+ODtAPD05Ojc5Pjk7PDo4Ozs6Pj45QT0/QD87Pjo7PDo9PDw4OTg5NzY4PDw9Ozw6Ojs+PTs/Ozs+QDyKwKuouLe5w62zqZ2ZlJaZoZymsLWxt6bFzdLLw8XBxM/GzcHDxr/ExMPDysLJyr/AvMK6s7W1w6+qsZNbaX6SiI6Pe3h9iYV5e4SAd25eXVxcXV9gX19kY2JkY2JgX11aW1paXVpaWlpcY21tZmRkZGZnaniHfm9oXGNsaXFzhJSXj5KdpKqhpqGpqKupr6KlnqmstLWwvLivtq6nrbezs7u3s7yvuLm1srvBssGvpamjq7Gzs6i9qquoq6yutbSmqK6hpLCps6anqK6mqLessbO3urq7sry+vr7Ev7XBwMfIt76/xbfEw7+7v8TCvsTIzMq/v8TAwKmHc3RzamlcYW9kV1ZYUEhaU1NLRkZFPj9AOjc4OTc3NjQzNzo5OTo8Ozs8PDc7PTs7Ozw4OT44PTs8Njo9Oz89N0E+P0A/Ojw8Oj05Ojs6Nzc3ODg3OTw7PDs5Ozo8OTc5Pjw+P0E7jMKvrry3ucSwtrCbmZWcmKqpsLGztb2vxdDPzMPHubnLwcu+u8m2vcO+usq4wcPCtba8trGvtbyuqKuTY22Ig4eLgHp9f354dH58c3dlX11cXF5fYF5fY2NhYmBhX11dXFpYWVtbWFdZXF9lamRiY2FkZGhtendxcWh0f39oa5OakI2GmJukoKCeo6Olpayem5qjpauwr7a2pq+rpqmzq7O5sLW1rba5srC6urG2paCkoKaxqKypuaqlp6eop7OtoKemn5ykpayfn6ekoaGxra2ssrWzs7C1vLa7wcCyur7DwbG5ucKzwL3Atbi7vb68wsfEw8S/v8SghHhxbGJmYGtvYFVZX0hOaE9USEZLRjw9QD06Ozs4MjY1MzY5OTk7OTo6PDo3PD88PDs8ODg8OTs6Ozc4Ojo8OTg+Oj89OTg8Ojs+OTc3NzY3ODg2NjY7Ojo7OTo7PDg1OTw6Pj5AO43Itba9uLrBur22oJ6VnaCmurars7O7s8TPycvCxbi3x8DMv7jKt7vFuLPFuLO/wKy2vLKspq+0raGjkmlyhoWGgHx4dXNvbWppaXBpX2BdXFxcXl9fYWNiYGBhYF5cW1xcWFlYWFhWWFpdXmNiYGNjY2JlZml2eHRvfIN8UmeNlYqKgJSZnKKZnJ2ho6GlnJmhmp2prqywtKKoqKmrq6S0uKy2r6yytK6zta+wqp+en6SisqSmqritoqamoKitqpmfn56ZnZ+lmpmjnJyesKmsqKqrrK2wsrivuLm6sLa8u7qrs7K5s720t7KxtbS/tb3AvcPCu7u9l4R7c2xfZV5kZFhUV15JV11LUEdKSkdBPD8/QTs/PDA1NjM1Ojs5Ozg5OTw8Nz4/Oz07Ozg4PDg5ODw3ODo7Ozo7Pzo9Ozc4PDo9PDc0Nzc2NzU3NDY2Ozc5Ojs6ODo5ODo7OTo8PzuJyba4vru4wcHBtKSkmZqkpsCyr7astLfFz8jIwMa7u8PDz765yLi4v7eywrSxu7usurqxop+pq6eYnpBtfoWGf3hybW9ta2JeYmZmXV1eXV1dXF1fYGFiY2NiYV9cW1taWllYV1dXV1dYV1pdYWJjY2JiY2RkbXpybnd+Zz1ljJKGioKRmZqim5eaoaSgopqdn5mXrKysrbCgpKGsqqahtK+wsayor7KnurOmtaCin5yjoq2joqq2qqKjpp6mpqOWmJ2XmZqdoJqXnZydnK2hrKijpKatq7KzqrWwsquyubWvqq+ysrO3s6+pra6xt7G6trq9v7ezsZSGenZmX2ZfW1lWU1pVS1tRTEpFSEtJQz0/QkJAQToyNDUyNDk5ODk7OTo9PDY9Pzs8Pjs3Ozs3Nzc+Njo+Ozo4Oj07PD06Ozw6PTs4Nzk3NDY1NTQ2Nzg1Ojo4Ojk5PDg3Ojg5PkA6gci9uL2/tr68v7KdpaOYpbHDtba9rbS4wszIxr/FtsHAx863wMO9s7m5ssC2sbm7rbK1r5+apKqglJuQeH+DhH94b3F0cWhlZGhkY1xcW1tdXVxbXmBhXl9fYF5cW1pcWllYVldXVlhXWFdVV2BiY2FhYmBgZGZycGtye1A5W32NhoyFjJiWmpmSnJ2moZydpZuamKmkra6pmqGhtqign62otammp62wpLewo7ego5yZmaqmoZqtua+joaScoqCfk5WhlJaWnJmYlpeclZ+pnqqkop2jqqqwrai0rKqmrbKwpauts7GvsK+vp6insq2xtLC7tLq3rqOUgnp3ZV9hV1lYU1JUS01eTFBMR0hNTEU9QD49Qjw7NzY1MzQ5ODg5OTo5Pjo4Pj47PTw8Nz49Njc2PTc7PTs5Nzk7Ozw+OTk6Ozo4Njc2NTQ1MzEwNDU2Nzk6ODo5Ojo3Ojs5OT1AOnbAvLS6wrG+t72tnaenoqq7wL3Aua60uMHMyMXCw73FuMjMssHCwa68u7W7vLW5ubCwsaqcmqGqlZGKi4CAfHdxaWxydHBoaGVkZmFcXFpZWlxcXF1eXVxbXF5cW1tZW1taWFZXV1ZXWFdXVlVaYmJgYGFfX2BiZ3Bpbm45LjBMgImNh4qTmJaakZuao6KgpKSdm52knamtpJ6gobWmoKCip7Khpaelr6Wxrau1nqCdlZWpoaKUrbGxn6Kjnp6Zm5OLoJORk5iYkpeYmJeep5unoaKapKWlq6SlsKeloqusraaprq+vq6iqqrOmpquvtLGuvLaxsK+fknt4c2ViXFtdWE5MUUhSYU1WUE9KTk9FQkQ/OT02OTo3NjQ1OTk7OTg4Nzs4OT0+Oz47PDY5Ozc7Njs3Ozs6ODU6Ozo7OzY8Ozg4NDc3NjMzMjEuLzI1NTY7Ojg7Nzg3Njw7Ojs7QTh4u7uxtr2wvLG3rJ6lpqy4u7zBxbqyubXEycnAwsbFx7bGxLPBv8Wrt7e9tr26u7WyrK2omZmgpIyKdImIfnZuY2FmaWhmZ2lmaWxgXVxbWlpaWlxdXFtcXl9cWllbWVlaW1dVWFdUVFZWUlRSVF9fXV5fXF1dYGFoa2thLh8rTHWEioWIjpqTmpGXm6GeqaKhoaGioJqnqKKYnKKwqaCgnKSpnaeinqysqqmtraKhoZWYopqcj6uosJyfop+el5mTip2RjZKTlZCYmJOcoaOcpKGilaCipKWbo6uloqSqpKutpa2yqaalpqa1pqmorbO1tLm6r6usnoxzcXBhW1dWVlJHUU9IWlxPUkpUS1NMRUdKQzg7Oz08OTY2Nzo5Ozo5NzY5Nzc6Ozo9PDw2Ozw4PjU5ODo4ODY1OTo7PDk3Pzw5Njc4NDUyMTIxLi4xNDI2Ojg2OTg1OTg5ODk7OUA5e7W0rLS7srCrsa2dqKevubmzwMi6tcCvxcjMusHJzMi1yb2xvsPJrbG4wbW8wLy0taqsppaanJyJgXKIg3t0aWlqbGdqbG1ramxlXVxcW1tcWlhaXVtbXmBgXFhYWllYV1hXVFZWVVRVVVJSTlBYXFpbXFxcXVxfYmlqYj0rPUxugIeDh4iSk5uVlZqkpKakqKSnpKCWo6uik5ejraefm5ian56umZyqs5+lpp+jo6GUlJuWlpKpqa2anJ+hoJuUkIyZjYuRjZKNlpWQnaGgo52co5WboaOhmKKoo6Koq6Crr6OtuKWjpKKsraqoq6+0t7K9tbOrrpiFdXRpXFlZU1VSRlhMUVtYTVVPUExRUklPSUI9Pz9BPz03NTc5OTw8OTc3Ojc5Ojs8PT47Nzs6Oj02ODo7ODk3Njk4OTo2Oj05OTU3NzU3MTE0MS0rLzQzNDk4ODo6ODo6NzQ4PTg/OX6zraeztq6oqK+um6morLe2rLzKu7a/rMzGxbjAzs/Hs8S7t7vCyLGtuL+3vL67s7amqaCWmJmXiHp0gHZ3bm1obW1tcGdnaWZkXVpbW1tbXFtZWltcXF5fX1xYWFlYV1hXVlVUU1VWVVVTU05QUFhZWVlcW1pbXV5jbnNTRFBbYHyCfYmGjpCZmJSZpqSiqqilraGllpypnZOToqelnJePjpmdrZaYp6qYn52UpaCekpGSkZOVqKqlmpiZnp6XjoyLk4WIjYOPi5GVkaCeoaSZlp+VmqGinpSbpaWoqKigsLCmsb2nn6OstKqup6+0sLm1wLGusKuRf3N0YldUVU5SSkdWUFJSTExYTktMT1NHTktBQ0ZEQz5CNzU4ODk7OTo3Ojo3PD06O0A+Ojk7OTo/NzU5Ojk4NzY5NTg3Nzk7ODU1NzY2NjEzMjAtKi4xMDI4Nzc7OTk7ODk0ODs4QDh/tKymsbeqpaKxq52qp6mysKS2xrS5urPKxbm6wcvQyrG2uLy9wMOxsLG3rrS0u7O0o6OdnZiXlYSAdmtnbG5xbnFqb2tkZWdlXlpZWllaWlpaWlpaXFxdXFpYWFhZWVdYV1VVVFJTVVNWVFFNTk1SV1hZWFhXWltbYGppZm5fblxqf3iIf4qKkJORl6OWmqWjoqibpJWdopmQjJ2hmZaWhYSRmqOPlaOclZaVh6Kam5OMjoqQmqWnm5WVl5yRk4iUjouBi42AkIuSkpKhmqCilpSZmJWippqNmaWnqKehoLSyqLO4oZ2jtqyqraSysqa1vLSrrLGiinp0bl5OUVFNT0ROTk5QS0ZOTkpKTk5RSE1KQUhMSUhEPzk1ODg4OTo7Njk6Njg7OTk+PDg6Pjk7Pzg3ODk6ODg1ODU3Njg4OTc0NTc3ODIwMzAxKyktLzEyODc2Ojk5OTk4NDk4OEE3d7anpLawpKekqqWgqaaks6qissS1tbKzxsW3usPKzMazrLq9tLjAr62psJ6mrruvraCam56VlYh8hG5fX2ZycHVxaW5pZWdoal9YWFhYWFlZWVpaWVtbXFxZWFhXWVlYVVZSUlNQUVRRU1VRTk1LS1NXV1ZXV1dXWlxhZVlfXGxfXnhvg3qEgIuJi5abipWXn56glqOTnpmTioSXmYtzjIJ9jZaVhZKZkJOOjXuZj5yMgomAipigo56Qk5iWhY6ClH5+c4qOepCHk5CQnZuampKWkJ6OoqOOiZqgoaOkm6K0r6yvrZ+YprimpbChsa6csbuqqa+pmYR4dGRWTVJQUE1DU05MUE1CUFFISU5TTklKSkVLTUdLSz44NDk4ODg7OzY5Ozc6PDk6Ojs3OT85PkA3OTo8ODk3NjQ0NDU4NzQzMTI0ODUvMDEwMikoLC0wMjc2NDc4OTo6NjU6ODdBN3i3oaO0qKalqKOmpaamprKnprTBuK+0sMnEuLnAzsa+s627waytxK2noaaSnaa3raOgkZaXkpB+eH9mV1ZfZ2ZpZ2huY2lpZmJcWFdYWFhZWVlZWVlaW1tbWVlZVldXV1NUUE5PTk9PUFNUUU1NSkdOU1NTVFRTVVhaXGhYWldpbWVkRU9piHmNfoWVkIaOjJuVmpSVlJGMlIh+koheO1Zue4qTiYCMkYyPhoZyi4SWgXmBe4aUnZWDlo6Qj4OGfZN4cW+GjX6JgZCOkJiamZOLkIqdiJ+YiIiWnpqhoJenrqmtqamelq2zoqWtma2rmKi0o6mtopN/dG5gW05TUldMRFRKUExMRk5PSUVMUU1LUEpJTlBHSko9NzU5OTk5OTo3Ojs6Pj44Oj09Nzo/OD4/NTg5Ozc5Njc1MzMzNzYwLi0vMzQ0MTEwLy8oKSsrLTM4NTQ3Nzk8Ojc5Ozg2QTl5t6CiraGmpqqgp6mno6qwqKe0wrmwtbDHwrizvc+/ua+utcKnqsSqop2Yg5ScsaOamYeUkIuHfnN2XVBMUVVZWlddXmJnY19ZV1dXWFhYWVpZWFlYWVpaWllYWFZXV1VTUk5MS0hHYlxNTlFNS0hGSE5RUUxPUlRVV1lgYFRSYm5jRTg3eY2Jh3WAjYaAhYiWiZSViZGFg5KEd4d+X0lQbXeKkYN9hIyKhH9/bX5/k3d1dniEjZpwUY2IioZ8fnmUdmd3hoh+ioiVi46Rk5eMhIqJlYSbjYKEkpuWnp2UpKOoqaWlnpuwqqGkpJGmqpaiqpyhpqeKd25mXlxIUVFTTUlVTVNJTEtPSUhGSk5MTVVLUVJQR0pEPTc2OTo4Ojs7ODo7OD4/OTk+PTg7PDY7OzQ3ODs2Nzc1MzQ0Njk2LzMvLjEyNTIyMS8sJykrKiw0ODMzOTg5Ojk5Ojo6Oj85d7aboqedn6Guoaeopaenr6yqtby2uLezwbu2p7nIuLaoqLW2qrK8p56Vjn+KlKmWlYt/joSDfnhxb1hNS01OT0xNUVdbXFpYWlVVVlZWV1lZWFhZWFhZWVlaWFhWVldVU1BNSkVAQJtrc3NJTUtERENJTk9oWU5RU1NVWmZcVGBnV1hQSoh8jIBsd397d3+Hjn6PmYuOeIONfnN+d3FtdHB0jY2Aen6JqoR6e2h2e45wcm14gYuNknh7gHuAd3NyknhodYWEhIV8lYuIio2LgH+Ei42AlIR8gI+YlJyWkZ+dqZ6goZ2gqaWfnZiNp6SSoKCWnp6kgnNpYl1dSldQUkhLWFJPSk1MUkpKSkxQSExRTFJVTkZJQj03ODs5OT49Ojs8OThAPzo6Pj03PT03OTkzNzc4NTY3NTI1MTQ3Mi8yLiwvLzIwMC8tKygoKS4xMjcyMTk4Nzo4Nzc1Ojw7N3aumaOhmJyftKmvqqWtq7Cxqr20sru4trq0sZ+3urKqnZ2sqaiyr6KakY2UgY6cjpF/d4Z4fHZwb2pZS0hJSEdFSEhQVFRUV1dTVVVVVVZXWFdYWFhYWFhYWVlXV1VWVVNQS0Y+OTNOPH6eTUhKREA9QURqlH5MTlFRU1ZeYl5cYVVlfo2SiYpzYHJ5cHN5g4t4gJiSfm6EjXp0eW5qfa18dJCKfnqGkoB8f3RmdXyGbG9oc3yKjYiAbXpxfXFtdo9xaHGBfo5wRIuFgoOFf3d4eoyGfYx7dX2Oko+Yi5Kbm6OWmZ2bnZ6hnJaNi6Wbjp2XjpaYkHlvbmdjW1hYVVFKU1VUT1BOUFZLTktPT0pRT0lPUExGRD07Nzk7Ojo/PTk8Ojk5Pz87ODs9Nzw5OTk5MjY2ODU2NjMzNjExMjI0LiwsLS0uLTAtKyonJyouMTM2Mi84NzY5NjY1Mjc5OTV5ppegnpagprCsrqunqbCvsau7uKu6vrizrKebsKesm4+WnKWppKGYmo6EknqJj4uLdnF8bXVxam1qWEtGR0VBQENESExMTVFRT1FTVFRUVVZWV1dYV1hZWVlZWVlWVlRTUUtENzhmNzA/qGlOSEM9OzpEioV6WUpOT1FUWFxcW1dWd5ebu3prb1tzcGh2c4KLdXiIg2xpiY92cndoaH6BcZaRioB9lX9JkpluZ3d+gm1qZGx5hZCShmtzbHxucnyGaW1wf3ONiYWGe31+e3dwdXSGgnmBeXB8jouKk4OWlpiakJOWlpmWnZaMg4mfkouSjYaQloBvam9vb1lWWFRSUllPUlVUU1hVTU9ITUtNT0tDSU5HRkA6OTk7OTk6Pjw5PDs6Oj0+Ojg6PDk/ODY4NzI3NTY1NTQxNDMyLzAyNCorKiotListKigqKCcsLTEyNTAsNTU2NzQ4NUhBODk1d5mRm5ian6Ssr6Ktqqi1r66ss7+rvMK/pqKalaSYno2Ei5ShopiZkZOLc456gIaMhnVvdGxxbWVra1lOREZDQDw+PkJGRkdLS0tMT1JSUlRUVFRWVldXWFlaWVlaV1ZUU1BMRTFAmjMganNDmW87PDk1PICChl9KTU5PUlZaUVZSUJh6V5BfaG9ddmlneXSFhHF9g4FxapaPcnF6aGicjkx5hJGIhI1mMXaHcmt9fYN0ZmV1foSEhYBmaWx1a3CAfGhxcXxuk42Pe3R9fXFxb3Ztg393eXVqeYiCiImDlpKSkIuNkZSUjpeNgHmIl4iHioaAkIh4bGtwaGVYUltYWVlbTlBVVllYTklIRUpKSEdCQEdFQ0c9OTk4Ozk6OTw6OTs6OjpAPDk6PDk4Pjc4NzcxNTIzNDUzMzY0NTAzMS4qKispLCwrKykoKycpLCwyMjYsLDQ3NzU0NzhpTzg7NW2SiJqQmZakqK2esZ6nuq+rsrDCsbvDx5qWjpWZi46FeoSQmJWNkYyQh3GHgnSHjIZ6cHNxb3BkcGdfVEZJQz88Ozk6P0BBRENFR0lLT1FRUVFSU1RVVlZYWlpZWFZVVFNQS0U4MC9cYLNHOVhQOzk0NDGWuotITE1PT1FVS0FIUEZdpamXZnFuZHVma3x7f3x2f4KCdm+ckXF3fnFzkoY1cZynnI2goYSihXZwhnuGfHOMrY2JgWhnYmpucm1wg3Vpb1h1cI6bkXZtf3t9bnJucIB7c3ZuYnWDf4aAhZCQioqJkYuRi4uOg3V4io6AfoOAfY58dHJxbWBcXV5cWllhX1JOW1pYV0xISUZJSD9DQUJIP0NEPTs6Nz07Ojs7OTo5OTs6Pzw4OD06ODs2NjY1MDEyMTI1MzQ3NDUzMS4vLCwrKSopKSoqKikoKikrLzNETTIxNjY2NDM8dlI3PTdikYGSh5WRnaSnnq+VpbSprbGuwbK7wcWWj4yUj4CIfG6BkJKJg4qHj4V1g4NslYiIfHV4eG14bndkal5JUEc+Pzc0NDg7Ojs9PkBCRUhLTExMTlBRUlRVVldYWlhWVVRTUExFPDUqnUtbQC1nSTk0Lz+Sg6muX0dMTU1QTDdDTVBRQkZ7aXRycm12ZnCBgXZ4f357iHpznpZ3fIR/g5iDmpxghamenIuDkI56dod+iYiOc4qXj4R7XWRxdHp8d4ptaGpieW+FkIJ6b4F4dYV6cHR6eGtuaV12hn2HfIeGjn+KkpeDjYWMhn1xhH+EfXZ3e3yJeHF0dWdoYFtcXlNcZ15XUFRYW1VHSkpFTEc/RkBERD9BQT07OTc8Ozs9PDo6OTk7Oz0+Nzk+OTk4NTY1NDI0NDAwNDY0NTU1NC0sKSsoJycnJigoKSkoKCsrKy8wMFVxPTIzMzMxRX5XND05XIx4in+TjJGcnZ6mkaCroLGor8Cyu8W6lo6Rk4d6hnZrf4uRg32Kg46MeIOAc6CEin19gX9wgX56aHdrUlhMQEUyMTEyNzY2ODg6PD5BRUZGR0lLTU9RUlNUVVdWVlZUU1BNRkA6Mj0gI5ZjjFs1MzExaT9Hb0lGSUtNTlFLSlNaVk5GX3d9cX9xdGp1iIV1d4SCepGDdJ2WhoSMkJOkjKypSIasr66KgYCUioGKgYSRqYeBmJiKnHRtfIGGh36OaGdoeX9uhYeChXGEhkdtgHdyeXZobWtfdn2CiH+HhIt5lJybiYqIkX96dYp2fHhtb3d+gXV1c21cXl5cY2RYZ2ZcVVBQV1lQRExLRk9JQ0ZDQ0FAQ0E9OTc4Ojo6Ozs6ODg4Ojo/PjY7Pjc1ODU3NzMzNDQyMzY2NTY3Nzg7REZMTU1MQzcrIiUnKykrKywvMDArbnUyMjQyMEyBXDU9PF6EdHx9iYSHkY6Vl5KWoJ2soKa4r7O9s5eNkouYi310cH6Jkn59jIOSlH2Gfoakh4h/goiFeIeJfnOEeF9jV0tCNjAuLzIzMTI0NjY4Oj0+P0JFR0hKTE5RU1RVVFRWVVNRT0dDPzgwLCOHWz8/ODQuXZZwc6NVRklLTE1PV19WaVdYWmF/h3uKeHx5fYqMeYCEjHyVkn+dnpWSmZmkrJKZu7GmusfDp4uMoaWOk4mBkXxxg56fkZ1/d4WFio+HkGlocISBdIyGhIpyhoJ3h4B7doR8bXZ1Zn+UjoaIiIaHh6CqopaIjpd/eoGIenlvZ2t4fnyAdWxmXlpbXmpeYWdgWlBMTldSUUlQSkROR0NKRENARERCPDo4Nz08Ojw6ODg3Nzg6PT04PD02ODY1NjYyMzQ0NDU3Njg2NzxCQj88ODo+Q1FeZVxHMicmLCwtLS4xKD+LWy4zMTBPg180PztudW9md4J6f4x/gZCOipqapJyhrKaqrrCXkZGEoZSEeHd/jJR8f5KGkpV/ioCSm46EgIGMioKJjYN/in9scGpdQkE0Li0vLy4uMDIyMzQ3Nzg7PT9CREhJTlFSVFJTU1RSUE9IRUI8ODcvOUM+PDw2My5sk5dNUEhKTEtKTVVfXndjYmdsj4+Cj4iLg4aIk4ONi5mHnJyPn6aioamSp7Shp8HCrceveLmUmnyNoZ6YhJOFgo6hn5SZkYWKhY+akZZscHWKjIKVjI2Od4+EcW2FgYqWkYKFiHKIoJWGkYmNj5aktKibjJSigoeSg31/a2pqfIKDg3VjXmVgW2hsXW1sX1dLSE5SUE5MTEZJUENETkZCQ0VGQz46OTY9PDo7Ojk4Nzc2Nzs6Nj06Nzg1NDU2MzQ0NTY2NjY4NTU2MzEwLiosLCkoKS46UGFcQCwoLSsrMCwncog3MjQwT4RiM0A8dW5nWW+Cb3WGcHaRhn6XlpqUnp6cp6CplpOYnmdlpJp+hJKReYCSiJGSfYqEmJKQg4CAi4yJhpCHhImGeHh/Z01SPi8vLiwvLi0vMDAwMjEyNTY3Oj9DRU5PUlRQUFFTUU5QSUVEPjs8OkRGPz48NzUyPD9SNUhISExLTU5RXWmBd216dZKQjpybmZKZkJyQl5qkmqOmnKWop6izlqq9qrTGyLbI0M++m6Bwaaqpn4STkoWcoJqbmaaRkYiVo5uad3p+lJiToZOXl4GUnnt3lZKqsoiMlp58k52bjZGVmKOhpbWvnJGYp4aWj42AiGxzc32BfnNqYl5iYGJoZWBnZ1xSRUpLUE9JSkxGR01DSExGRkNCR0VCOzg1PDw4OTk5NzU2NTg+NzU9ODQ3NDU3NTQ1MzY5NTg6NjE2ODYzLzAuLSosLy4tJyMqO1hiQigqLDEtKEuXXjA2M1GFZjJBQGlhXlBwdGBtfGF3jX17k46Oip+Sl56Wm6qYnqpCRH2HiYeYjXiCjYuOjXyKho+QjoGCgImLioWShYOGiYGAh3ZeYlA1NjAtMS8sLjAvLi8uLjAwMTU+QUFNUFJTUVJTVFJOU0xFRUA8Pj1GR0BBQDg2NjI8OTtGSEdJSU1OUFlpfolyjIKVm52qtLCdp6Wno6Swp62yrq6quK+xvJuxw6q4ycu3w7+3paKws6ysqqOLlpiEpaago5eBppmNoqqopYiFlKShoaqgpKmPm7CLlaOmt7qboKKvkqKcoZ2PoqGrrquytKGUpKmHmYiSiZV5en6GgWliaV1mY19kZF9nZ19bT0NJSFNORkhLRkpHRkZIQUtGQ0ZGQjs4Nz08ODg6OTc0NjU4PDU0PDc2OjQ0NjQ0NzM5PDM4PDIwMjU1MS8xLi0qKi8sLSooKiYlNVhYLywwLCwwhIE4NzFQhWg1QUNbWFRMaGJXaW5YeYR2gZOFh4Kcg5GQjJLayJ2Wc1aXiI+InI98hoyOiop6h4KHkY6DhIGLhYaIkoaChYmHiIeHcW5hQEU2NDwyLzExMC0sKy0wLi40PkNBTVVQUlNVVVZVTltQR0hEPD4+RkhDREE3Ozw1Qzs9RktJRkhRTlBXfYuYf6WbpqCnt8C8pa7As6ivvK+0urK8sr+0ubmit8SntcjHtb24tKijs62wsZuZkpqfiKevq6WUdp+kl6GssrSZlqquqK+2urK6rK+1orGrsbW7trSttJ+mp6KmmaivrLG4t7enmrWoi6SNkJKehniChXhbY2ZXZ2NiZGFhZ2FbVEpERExUUEhJSURJR0VBQEBLREJNRz04Njc7PDk3Ojk4NjU1NTcxMTw4ODk1NDY2NDk3Pj0zODkxLjAxMjExMzAsKiwuLCsrKyooJyopRVowMCovK2iSTzYwUodqNkFGV1FKTFtZUWJiV3l1cYGTfYSGk3WFf4CMe7+7o7yCtJSTjZuPhIiPkomJeYaAjJOMh4SBjn+BiY+Gf4aIhoqHkXt4bl1XQEROPDY6NDZBQjc2NDAvNkNIQ1FbT1FVV1VcV1BfVUlLS0E/PkdLRkVEOz5AN0Q3P0JKSkVGVlNPXoqdp56rrLirr7jFxLG3wbqwsL60tb6xvK61c6+ypLnEo6/GuLCzsbOnpLW2qrCgopabopKlsK6mraunpJihrbS7oqiyurW8v8y/xcW9vbPBt7q3vra6t7irq7Ckr6isva+8usHBq5i5p5StjpeXqYh9g35tWGVjWWxma2ZXXGRZVlNJR0ZMUEdDSElBSEQ+P0JCTEA/TUQ5OTY2OTo/Njo5OTY2MjQ2LzE5NTk5MzY0NjI3Oz0/NjoxLi81ODo5NjUwKigsLS0tLCwqKCgrKyhFUy8qMDBKj2s1MlCHbTY/RlJMQUxRVlNZVVp2anB+jYSAjoVuenN4h2K5oZmjiZSUlpKUk42Pl5KHh3uGgY2VioCEgYp6fIqHhn2Kg4KLhJZ9eHp1ZlBcZEdFTDtRY2FbXlNHPztIUERaY1FRWVhaZ1lUYF9MUk9EQT9JSkhFRUFAQzxFNkI+SEdKTFNaVF2PqLGvtbLBt7O3xcm3ub+6tbO5uLW8sriwxF9zsKSxmp2qvKikqKuqo6KytaGqqJ+Vlp6YoK6lp6aln6SUo6ixtKiys722wr7TycnTxsLFzMLKw8C9vL67u7a0r7i2tsK5xb3Cx6+euKmhq42kp7WIgYF0YWRjX1ljYGpnU1hhVlJVSUVFTUpAPkdEPUtBPUJAPUY+O0hANzk2Mzc5PjQ4OTo1NzA0NS8yNjM4OTM3NDQyNj84QD5HS1JUU1FQT1FRUEpBOS8sLCwqKygoLC0rL1A+KC40OIB9PDJLiHE5PkNLRUBJTVBSS1FdZ2xrcI+NhZBza3Jyc4fVwLWZoI2VmJmRjpeRlpaOhod9hoOMlop+g4CCeHuLg4d7i3qBioKXfnR9emxlcHVZXlxQZWRiYGVkXVxYV1xNZG1VUm1tX25fWGdkVFlVSkRCS0tJRkhISEdCSTpEP0hLU1RVXFpbkLS7tLmxwbq1tcfIt7S4tLe4sbWzsq20tZhjdKecrXBeoqybl6Cim6SeqqWUn5+Qk46VmJionqafnpqZg6SdraWqsK24sL251NHP19DKzNLMz83Kxr++wcm8wLzAwMTExMm+x82yo7qwtK6aq7e7mIB8bl9iXltgY1pkY1FcYFNRSkNBRUZFPEBGP0FIQj9DPDpFPj1KPzQ3NTM1Oz00Njg5NzcwMjIvMjQxNjk3NzU1NTVEM0VMTT41MS8wMDY6NDc3QElPSTstJioqKC0uLyxATSsvNTRtiUkwSIl0Pz5CREBDREZLT0RRW1lpX2+WkpCUbmtvdHWHtKyhoZ+LmZyZjI2VkZuShYqKfoiGjJCLiHyBg3N8ioOFe4l0gYqGlX9ze3lsbXV7aHJlaWxpZmpqaWBmaWlsWm1zlq2kvIiGZ1xvZ11ZWVRIS05QSktQS1NRSUxBSkZKT19eYWZpYJazwq21r7e5sq/CxLOut6+vuaqxsKWqtquLtaecmqaaTZmdjI6flpGmmKWVipOTiZCJj5GRnZuhl5qVloefmqebrK+psKi0tNTU1NbTzNDT1c3Sz8zEwcnQvcnJysnRxszNws/Rt6/DvMO5pLW5waKEcWVeX19aYllaZ1pRXVhOUEFCSEVCSDtAQz5BRz8/QTc7Qz5ASD00NjY1NTs6Njg3NjU0LzEwMTQ2Mjc4ODc1MzY3QzVCOD8tMC0xMzQ5PTk3LC4sMTtGSz0pLCguMDAwN0s/LTQ2VIhXMESHd0M7Qj5FQkFDSk0/VVlSZVZyj5CYgmdxb3h5g6GqnqaXjJqbl4uNlZGajn2Ji4WNioqKkId8hIJwf4eBhnuHcoOSi459cXh2bHB4fnF6bXhzbWmBcW1jam1weGl3fH7LvsHfp21jeG5jW2FgSlBSVU5ZXk9dXE5QTlRQVFRcbm12gnGVrLWpsaSts6irur6vqbOlo7elqq2gq7OijbCtmZeYjI6RkYSOm4GNppGciYOLhIuJhIuElJaYl5SbkZyXmZqfn6uspaiirK3P0tXSzszT1NTP1NHOx8PU0cbN0tPT1szR0cTR1sXAzsfHwqi9ts6efHFoYGRfWGFUX1tQUVRRT0g+QEZBQkU8QEE+REM+Pz86PT08PEpBNDU0NjU8ODg4NjY0NDEyLzAzNTI2NzY4NTMzOz08RT1AMTErLzI0OT41OTAxMDIyLTJETjMpLzMuMzI9TjIzOEN9XzJBhnREOj09ST5AQ0ZIPFVRTU5adIaFindsd3B9fn+hnp6hjIyYk5OLjJOPlYV5hY+QjYuJiJCGfoJ7cX6AgYd6hHWFk5CIf292c2xzfXt3e3OCeHJrgXNyaXBxenlyer7Lmn2LsYR2coR2Z2FqXUNaWVtWZWNYY2pTWFxdYGNdY3d6fYuBl6ijo5+dn6akqa63qaWyoaGsoKKtoaaxnoimmpOSkYmOjYiBk4hqlaKMmYSBhn6Rg4OTl62LlY2UmY6GkpGel6iwoqGhpaSpyc3PyMPM0dXS1NLO083G1tLM1NjW1tjU19XJ1NrNyNfX0cqrwsLLjXVxZWJhWlZbVF1RS0dKSkpAOzo7REFEPEJDPkdCPkJCOjw5PDpHQjQ2NTQ0PDU2ODc1NDMyNTAvMjU0Njc0NTU0NDw+PUU/QTYyLy0xNjs9MDgxLzI1NC8tLTtSMDE3LzUzMkZEMjg+bmI1PYF0TTk5QEk8QUQ/QTtPTEZKWHCAdX1ocnhygoqAnZWdlIWLlYmOiYiNho5/eIOTmIqMiIiLiH6CeHN7fYKId396hpGVgINud3Btdn92eHx0hnx6bYd2dG99doR1eHudtYw7QYrFpX6MfGllV0lDZmNlY2dqY213W15maGtuaG2AgoeRipydn5yQlpedoqOksKOjsZ6hpJyfqJ+isZuFnZGRkpCKioqGg4+Dfpybi42ChIV5lH+CqZWjjZKKl5KMfpiLmpKrs5ibnKicp77Dxrm3x87S0dLQzNLLyNTO0NXa19fY1NnYzdjbzsnZ2tHVvsrLtXp5cGdfW1RXU1xYRkdLSUVFPTo3OkBAQjlHRD9EQ0FDQjs/Ozs3REM3NTY1NTswNjg5NDQzMzQxMDE0NTU4NzQ0NDQ5QD5EQkM8MzMuNkZUV09RSkFKRj8xKiguQlMzOTI1NC83Szc1PGBiQTxzdlY4N0FIOj9DPjw5UUVDSlRrbm5wYnBxdIaNfZeRnYt+h5KDiYaEiYGHfHiFlpaJjoKHhYd6hHlxenuDhXV5hY6NnHmLcHxwcHqAcXuAcYOHgW6OenV3fHyCdX58hoevc1ipwraNkYJwbWI9XmhycHFwbnh2gWVob3J1eHF5i4aNk5GalZ+UhouSmp+anKieoKuaoZmYnaSdn6uZipmLj5GNhHuHh4OEi42fmZOIg4d+bJl6hJmGiJOMjZSMhnyciZSQrqqUlpifmaevtr2prr7HzMnKzMvQycPSytTX2dfY19Xb19PZ29XQ2trR1sjUypZ8fmtrXVxRVVRhSkNGSkg+QT49Nzo9Pzs9Rzw/QUFBREE+Pzo4N0RCNzU1NDc5LjU1NjQzNTUzMjMyMzY0NzU1MzQ1OEVCRENFQjU2PEZOU01bbmZjbnNrYVY+LDRMRzg2NTQzNEJGND1XX2hMdXheODs/Rjw8Qjw5OUQ+Q0dSal5tZGJma3aAiHGRkJqAeoCNfoKBgYR+g3t8hJiNh4t9hYeAd4J5b3t7hoF0eZKejqB2j3WCdHWBfnSAg2+BkIJvkoR1fIGFenaGe4m3xaTBybmBlpuPd3BlT2ZjgXqBd4aikIp4eXZ7g397hHZtk5aTlI6XkIKJjpWZlpWkm5aelZ2SkZainZiqlZCQiYyRgouDiIiBhY+RnZqZiIWLgYWXeoiJn5eQiI2Ji4J9oYmRjLyhmJOYmZ2ppqaun6i2v8DBucjKzs7EzcrR1tXV2dXX29TX2drb19va2djO28aIfXxqbGhiVllXWE5MRU5DOz09PDg6Oz05PUA2PT8/PD49PTk4NjdDQTY0NTU9ODA2NjU1NDc3NDU2MTM5NTU1NjQ1NTdISD1ESkU3OTI1O0g+Ozk6N0lQXVtSVVhLOVQ+Ozk1MzI3STg9TllNSHh4ZDU9PkM9PUA6Njo+PkBFUV9YZWFdW2h0enlsio2Sd3Z6int+f36AfIR6fYGRiYSFeoSHe3V9dG18fYZ/c36SnpGegpB7hn54j355iopugpqAdJmGfYGJhXx+kHqPqY6Pw6G9jJyjnX2JhH2JcouKfnOmmpyYk4V7jpCIhGhHcaCknYyLkJGEiIqQkpSNnJmSk4+VjIuUnpuTn5SQjY2Pin6OjY2Kg4iSlpmenoiLlJGdkYGKf6WYiISNgYWEgaWGioy3mJ2RlZaip6Genp2kr7e6tazAxsrQyMfMz9PT0tjT1dfA19jZ29ja2tnZ19u4e3x7bmxoWmJdVFFPSURMQjw8Pjk5Ozo5OTs8Nj89Pjw9OTk7OzM3RD83Mzc4PjcwNjg4MzU3PDM3ODA0OTc2NzU1NTQ2RlA1RE5JODkzOEFLPTszQ0BJPDpEV048TVRITj85NjMzMz5DO1tYPjVZeXBaPDxBPD0+ODY4OT89Q1FTUlheVVhmbW1taYGOinFyeYp7en98f3uHenx7i4aCfXSDhXlyeXNtgH6EfneFnKGbnZSRf4yIgJiIgJySb4iohXqhi3yRjYOIhJx9mpCJjKOjoJCkr6CKkIuFi4GShldyrYufq5uPg5ibj4+OXIKikYKMn5OUi4aHi5KSi5OTk46LjomHlZmbjpSVkIqRk4V/ioeRjIqJnJaYoaGGkp2Vn4qJiI2bkIOHjn+Ch4akhYyRspidkpWXoaKfmZKcnaiyuK2mvcLHzcjGz83QzM/X0dHVrtbV2NrY2trX1tnZoHKAd2ppX2BaVVhZQ0BJQz8+Pjo0ODo7Nzo7OjM7Oz89Pjc7OjoxOkc9OjI3PUA1MDY3NzI1NT82NTs1NTg1ODo1NzczNUhSN0dPSzk5ND1FSkI+MUZDTEE5ODpHWEA1SFdJNjYyMjM6RUNlWD8mX3lpX3o+Pjk8Ozk4OjtAO0JRS0tTWVBUY2N6bWF+koNubXeLeHl+eoF8hnt7d4aEf3NwhYJ6dXZ2dISChH5/kqajn6WiloqdkJWXi4qnl3OKso2EqJKEmZOFmYyilZ+YkoianqOTqbCgkJSQjY6IloxujbeFmsTIspuhpZucmJaQsZFkpM3IlY6Gh4iPkoyMkZOIhImIhZWYmY6Pk5KGk5aDfo+LmYeNkKqWlqKhiJielpqIjoeXl4mEjoyBf4ePpYmOk6ial5OXmaGZn5mTnZujs7Wmo7zCvsjFxcnIycLL1M3N1KnS0dbV1tja1NLZzoV1g2tmYWBgUUtWXEJCR0M7QT04Mzc7PDo5PTY0OTo8OjgyPzk5MjpJOj42N0JDMzI6OTYyNjQ+PTQ7PjY5NDk7NTc5NDRKUTxKUUs5QTdCR0lANjRKRUxGPjw4OEVUQTc+XDg2MjE0OjtFYFhBRmF0aExjWj41Ozo6NTs6PTpFTUZIUldTUkJlg0d1go58fG19iHh6fnqBgYN+dnaAgntsbop+eXx3eHyEhot+i6O0qKSrs6GWp6CmpJaVr6KDkLiVkbOajKGgjKSbr6OknZiQqJepma6wpJeUlZSQi5ialqDAjqPJuKuao6WtmZGbnLKdhoWoopyXhYiIjZSLipKOhoCFhoiRl5OLipOShpOXhYOQj5tzkJiylZajoIebmpOPipCKlpqIipaNhn2MmJ6KkJCcmpmTmZiflKCdlJ6bobGuo6S4v7TEx8S9w8O/x87LydKnz8zT0tDW2NLP2Lx1fXpgY1hjWVJJS09GQkNENT47NzY6Pzs8Nz00MjY2OTc3ND01OzU8Szw+OzxCQTc1PDs1Mjc3P0A2P0A3ODQ5ODc7PDU1T01EUFJMOEA9RUFHQTU6SkVORUQ6NkFAQlM+OURPMzIzNTc1PXZcPFJcdGlaTV1TPD04OTU2Nz06SkZER01cXVlKaGE7SISLentthYZ5fIR4gISBfXB4fH18b3KMeX2Be3iGi4mGhJOovK2ps72wpa6ztKmjorCtipq1nqO5pZWso5eprbimpKOfmamYqqSwsaqZmJyUlZGXoJeau7utyqFptriqsJWYnqOrkpe9o16psoKJiYyUhpB8jo18g4WNj5OTiIaSlYuOlYyKjJaYkZuZs5aUqp2Km5SRjJCRi5iaiZGdj4qJlZ+hjpWNl5mdkpyYnpShoJScnaauqKKks7irwsjEtbq9u8bIyMLQocbJzc3E19bQytSjc31sX11WYlNRSEQ+PENBQTc/ODc0PkY8PDY8MzUzNTU0NTRCMzk6Qk06QTtBSEI7OkA8NzQ2PEI5P0BCODc0Ojo2Pjw0N1RLQ1VRSjc8OklBREA0QUpITkJBPzZEQTxKTkQvVD0yNTQ6RUpcWEpaUW1ncHBEaWBLSTY3NTc6PkpAQ0lQZ0hhYGJwSkCLiX6Ac4eHfIGJdYGKg35tfXx8fnB3h3eNgYd7jY+Mhoyaq8PAsL3GvLO0wb20rayzt4yosq6uvaubuqOorbm4q6emoqGjo6qvsrGrnZyjmZuYl56ipaWSo7muqL+7rK2yuaWjp32Ihp2tvLCCi4uKkIOPg5GOeoGGkIyNm4eHjZaMipSWk5CZlpunmbCZkKqcjpqPkY6VkI+Vlo6QoJCIlZujrJWWj5ScnpSgnZuYn6CUmp+op6Sio7CzpsDGw7Cwu7bFxcO/zafHw8fDvNbQzMTKind2ZV9dYl5PTENMQEVHP0E+Qjw6ND5BPT01PTY+MzMzMjQyQTE3QEJNPkdAQ05DQT1DPDs4NkNDNUJJQjo4Nzg7NUI+NzlWS0RXT0Y4PTRLQEM+NEVLSE4+QUE2QkI/QlNFNThQMTQ1Ozw4O0Q+OUxqal07V1JkS2daVU83OUdFP0NGXGlGX2lnW11ck4yMiHuHi4aDjHWFkIqBbn57gX5xfoF6lHqSlJWYkJOWqLTGycDCzMLDuci9urCrubuYsra5ssCupcCjq7C8vaquq6Ojnqesr7WxqpugqpyinJafr7OnjKO6urXBvKuonLKko6iUhI6qxMOkgouOhoeEhpWUjHqDjJCOkaCLi5OQjoeXn5eSmJSWpZ+unIupm42Wj5GRlJWNkJSRjqGThpefn7OflJuUn6GapJ+aoJuglJiep6Smp6SvraW/w8KuqLe1ycO+ts6yxL7Du7PRycjBtXh8cF9bX21UTklETExMSkBBPUJEPDVBRDs6Mz04QjMzMjI2MkExNUlFTT5JQEhSQEg+Q0A7Pj1GQTVBVUA7OTk4PDdFPjg+VkpDV09HOD80TEBCOzVKS0NMP0I/PEJGPUFITDkrRzwzNjc0NjRBPzdPYU9hRS89PjZrbGpgQDpIPj9FQmhdTWVcZlRjapqNloqLiJKPhol5hZOPgXKAe41/d4eCgY95jaGWqJqbmLq+ycjKwtLJy8LNvcGzrby/p7q/vbzEuKzBqayzvL6qsKqkpaOsrrWut7agn66fpqOYo7O8qZyovMGjtrevq5OwrKqsl4aaqqelkIKMkqSViYB1iZF5hI2Rj52fkY6Sio6Lk6KXlpqUk6GdqZ6QpJmLjo+PlZaIfI6VkpGimpSgopy2ppCfl6Wko6WfnqaYnpWXm6WjqKiisqyou7/Dr6Wzt8zAuq7Ds7u9wbmswsLBv5pxfGRcWV5dTE1OS0dFQ0hBQUFESzo0REg6OzQ8N0YuMTIzNTJBMjZTSE48SkJKUUVLQ0VFOkVMQjw3RVY9PD04OT88ST86RVVJQVdRRjdBOks6Qjc5Sk1CSUBDPjxERzxCQ089MjBIMzY2MTcwPUI6PWpqSks1UVMzU3BwZE47RD1ARj5sSl9YYVpkZViekJ2Nlo6ekomKf4iekoR3hX+Ufn+QiImQgJagmq6npJjEvsjEyMbSzc7Ny7zCuLC6vLS9y7vDwre2vK20v7q8rq+ooamotq6vqrK4mp6soqiinau3t6qlr77Esb25s6eqtLOtrpaVpa2poJGOkrHFp5SOfJGVfYeRmI+pmJeSko6SlJKknJKcmJOgoaGbmJ6XiouPjp6IWo+Wl5KWpJlmmaSfs6WWo5WrrKuonJ+ml5mWmJWipKimnrWrqbq8wrSmtLXLwbiqtqyzu7iuqLi6vLeEb3FdW1dYUEdLVE5LP0FHRERIRkY4NUZNOz43PkFLLjMyMDI1QjU1UFdOPExGS1JMT0dHST5JUT86OElTOzs/Nzk+RExCQEhTS0BXUEY6QT9HNkE3O0hNQ0U7Qz00RkU6QkFCRzkvOkEzNjAzPkdEOTQ9dGRNRztFKzpmfGhWPD5AQkZCc0ZpSVJmZE1GppSclaGXqJWMkIOGpZKIgYeCmoSDlZCQk46aoZ+vvq6hyL7FxcjHzs7P0sq+vLaxu7u8v8+2xL64ubezs7azuLSsp5yrrLmrqaivsJijrqWopKW1wLCrrLS+w7nAuLOnuLS3sq+VpK2wsKWLk5SgjXPBmXyWmYSOlpqLsJWZmZSRkZmYpKKUnpqVmaecmqCfmIqMj5WdX0qWnJqUmaWXVJawn6+dn6WVr6+tppuhppSTmZiOnaCmoZm0qaqzvLu7q7Cyx8C4paurrbGxo6GysrSlc3JoX11RU01GUVFQUTtISkhGR0FDPTlLVD9BOj1GTS83NTM0OkI0NE5XTjxKS09VTlFKUEhISk9CPD5NUjs+PTg6PENSPkRIUklCV05JQENBRjM+NThKS0NBPUM7NUZBOkE/PkhANSpCNTIsPmNdZzozNXRkZUBSNyYjM31pVzw6QkNAPVJFV1N0YlZGSKqXmZ+hqK6YkZeHiqeWjoiShJ+HhJ2Xjp2gmqOltcm1qce8w8TJy8nIzM7Hv7uzr7q5wMLNtci7wbm2urKvr7S1p6Scq7S1q6qmrqyapK2mpamsur+oq7e3vsHAvriyssKwt7yso661rbqmiJqWpZt1vp+EmJyOkpiai66WoJualpSZnp+onaafmJmpmaCmnZePjJCdgm11kqKalZyin5CusqKrlqqrmKuvpaWhpaqSkpmciZWcop6WsKapqrq2vrOyrr65tqCjpqilppycrampjWZpZGJUTU5ISU9KVkw9TERNSUpAQ0Q8UVU8QUFCRU8xOD03Nz9CNzVVWE4/SE5RWFJQUVRKUUpKRUFFTVE/Pz04PTtHUjxFRFFCR1lNS0FIREU6OjM5S0lCPkNDOjlDPjxAPjs7RzctMj4tMYJoTnpcLzBraGA8PUJCODZ7Zlc8Oj0uLlNhTFZIfmVeSEaslJuhn7uumJSei5Kqm5GSk4iqjYeinoyjrZSjpLbHvbTBu8LCyMnGws7Iwr66sq+5tcHDyrbGssG8tbusqa2tsaSjmaq1u6eqp6yqnaivqKSrq767qK29tLe+x7y2tbjAsL3As6q1tqy/po+ilpCgn7ueiZqfmZadnY+2nqibpKKam6CZp6SxoJqdpZynqZyXk46Um4qWiIykoZScop6hta+lpZOyrJqrrZ+fpaSrkpaVoISQnp+claikoaGztLq2rai1srKdnaOlmpeVmaqhnnhkYGJgTElHSE5RSU1FRkZCUUpIQERHQVZTREg8QUdRMTpCNzpCRjc5XVlLQUxQVFVTTVdSTlVKREBKSk5POUM/NT08TlFDPz9QP0VaTUpBS0RHQDUzPUlHPz1FQTk3QTs8QDw8M0A8Lyc7KkiRQjpTSjAsW29XNzE8Kh1CgGRUNDktMTpoXUZEQ5xwYkdEqJeknp7DrJuXpJeYqJuVmZqOqpaVqKaVrK2Zoau3xcG7v7jBwsDIxL/Nx7y+urKwuLS/w8i2wLC8trq3p6SrrK2hoZurq8Sipaispp6rr62iqqi+uKatv7C3t8e3tLm4v7G+wba0srWwvqSWo5WSmpOtn5ChoqSiop6QvqSonairnJygmqWfvKKXo56hqKqgnJSMlJ2TnYaOhI2TnqSgnbaspZyXs6easKmgm6ufoo6alqCFjqGanJKlpJqXq7G2squlqq2snJigoJKOkJapn5RpZlxjX1FKSEtPTUhFRElAPU9IQDtGSUhbUk9LPUhOVTRCRjg+SEc1Q2JbS0NOUlVXVlFYVFJVSEA4UVFQTTpHQDRDSFFTSUM7Qz5HVktDQE8+SzwwNjtHRj47RkE1Nj85Oj85OzE1RDAtLTBNdlw0S1o1LE1uVzwtPSkeI3piUTVDS1E5b1NGPEt4ZmNYTqKbo5uexaygnqudnK2fkaKelqSgpqqrl7exo6qztsXCvcC2v8G8ycK/ysi2uLa0sbS0t8LGt7+xuLW6tqCnrautn56fpaTBpaGqrqCkqa2woqaovbWlsby3trbEsrO3ur6yw8C3uK20tbWjnKSUkZOgrJ6YoZyoqKqimsKsqJ2rrZqanZiln72hnKSXqqurpaCYjZqfkp2Ijld/lp6loaC5q6eTmbejn7OioZyxmKGQm5aego+gl5eOoqOVkKWusqypoqKlpJWVnZiLj5KTpJ+JY2dcZWJOSktLT0ZFQUdLPj1JQTo4SkpOXVFRST1MVlw5Rkk9RU1JOEhjXEtDTFBTWVlWV09aXklBPVdRSUs/SD81SE1YU0hBOkBBRFBIPz5RPks3MDk5RkU7OEc/LjY+Nzg+NzcvMT85MSUxUVVtW0pPMTA9Z1dEMTc9LSt3YVM2U1prV3NIRTY9dWVcTFCen6GYnsOnpaKzoJuxppKpo5+jn62pq528samstbLIw8HDs8LDvcfEvcXKvbCxtq6xtbC/xbW6sbC6tq2bqbCqq5yepqGowa2crbGcqaKusaqkqL23pra7va+3xK2ztMK/ssazurertbatqqKllZSToqugn5+ap6qur6+7saWfqamYmJeSoaO4oKCjka6vq6SlnZGgnZSdjpCMlJ2aop+otaenjZm1nKOwm6CdsJGhlZmVm4GSopaQjqCgk4ulrLClpqKdoJ6SkpqThouSjZyfgGRoXWlnS0pNSlNBQ0BJRzs7Rj45OU5NVV9SU0o+T15ePUhQQk1NSThOZFxMRUxSVFlbU1VPXGJIQT9aUUFIQUtBN0ZFTEtOPjtCSEROQj07TkBBMy85N0NCOTdGOys2PDQ2PDM1LS80QDErJ1Z0U2VPPzEwNGJbTTIzPjA7dl1eP1tVX2dyQDg8SJZ3ZUE0n6Sem5/Cp6OpsaCjtKmUsaqmoqSyrK2pu7OtsLS0x7/Ew7W/xL7KxbbBycK2rLWpsbiswMS0uK+ttrqlmauyrKuZoaeYrbu0nKiwm6yfrrSyqKu6sqe5tLeyucGqt7PDvbTFp76urbe1qaisoZaVkaWjoqKXl6Sut62xtLafnqikmZSUk6OgtqKkpZWtsbGlqKSgnZqZmZWXqKCfmaKer7Oipo2Yr5qlrZiboKeTnpCWmpuGl6CUjZCdnpOLqKmroaegmp6WjY+ZkIKGlomVn3pla15ta05RTk5UPUNBTkM7Okk/NzdRTl1fUlZRQVdhXUJJU0hXS0g6VGRdTkZPTltXW1JQUVhdR0FCW1BCRz5OQzlIR0hOUD8/Q0lCTEI8MklBOTQxNzdCPjs3RTcrNjkxNDgwMi0vLjw2LSNCcWdzazIzLzFbY1ozMzkwNnBbYkgwNUpxaldEV0aMeWZDO6SknKClv6Worq6gqbWpnLevq6OqtLaxsLi3sLe3uMW8w8e9vMPCyMG6wsbCu6q2pa27rsHDuLirrrK8o5Wusa6zl6aokaq6qaGnsJ2qoK+0s6uqtrWsu6yzsrq3rLmwwrq+v6bDqrC3r6mrq6admJiqoKGgkZegsK6zqrC4mZuqn5mWkpemn7aopKKir7Czq7Gmqp+bn5+bnaWdoZido7SwnJ+RlKaboaqclqSimJuMl5qUlpeelImRm5mUjqmop5+jm5mbk4ePmYt9jJeGj5psaW5ibm9YUVJaVEFDRFVAOzpJQTc6WFBkXlBXV0VZX15NTFNOXkxKP1pkXk5JUU5bVVlQS1NXWkk/RFhQREY+Tj89SUdHUVBCPURGQk0/OjJEPzc3NTQ3Pz05NUU0Kzc1LzI1MS4tLiwxPionKz1ccD0+MS4xZVtlQDE3NDdnWWFGKEA4bX1pXFY7iXtjQz2on5yhqbyhqq+qorC3qKSzsquhrLW9rrO5vbu9t7bBwr/Jw7nEw8HBucW+wbmwtqist7K8v7+1qq+yuJ+XrK2pr5ipqY6nu56lrbOfq6KxsLOsqrWztbytr7G1rLC1ssC6xberva+xt6ytqaKxpZ6lqJ6jlo+Yn7Kpsqmpspmdp5ualIygpqS0rqeirKytsKeyqrCpopueqKOelKGZnKi3qZiak5Kfmp+ioJKtoZubiJeajJ6anZSLj5eXmpempaOgnZaWlpOAkJWEe4+ThIyXZ21yaHFzX0dZZlZEQ05YRFo5SEI1Pl1RaFxOWl1IW19eTk1TWGRKS0NdY2BQTE1OWFdYUEpWVldMPUVVSkVEQU0/QUZISFFQQTtHREZLPTg3Qj02ODcxOT48NjVEMCs4MC8wNS8qLC8tKj0sKyUyKyo1SzEuJ19fYVUxNTE9YFZfOClDM1lVXGhLNYx6ZkxApZqgpKy1o6yopa6ttaiusrimp7C3xbext7/Bwra1usW+y8S5w8G7wLrFuMG6s7Ssqrq3u7u+tauvsbeZmaisrKydrauPq72eq6+xo6mfsa2zr662sbm2qq2vsqi2sLS6vMqyqrW0sbSwr6ehs5+aqKyfpJWVmpmxoq2gpa+WoqSZmZKMoqWnsqmhprGrqbSlrq+zrqOYna2nm5eempqsuaOYlJGPmZ2hmZiVrqKgl4OWm4+enZmXkYqUk56apaKjoZmWk5KVe4yQhXqNi4OLk2xueW92fWFGYGpaSUhaXD17SkdFNkFjVGlbTVxhS1xdW1JSU2JhTEtFYGFgUUxJUFdWVU9HV1ZVTjpJVklIP0NLP0VESEhRTkE/SEhIRTw3PT46NzU2MDk/ODY2QiwtOCwvMDQsKCwvLSo3NikoOS4kOks1LiJUYFZhLjUoQ15RXC4rQS9KR1BbRzNjWFRMRZqWn7CosKmspKOurbWotrK3o6yzt8m7tbu8wL61tLfDwMzHvMO9uL/AwLjAvbK9rqi6uri3w7esrrK6lpenr62opLKqlK+7pKyysqeno7K0sbKxtbC3s6murLKnuK+2tMPFtqm1tauwraqno7aen6exn6OUm5iUsZ6nm5+pjamjnZyVl6WlpLenorGzq6ewp62vtKykmKCsqJycnZyVqrmclY+PjJmdopiRmamlopmGlJiRnpyYl5eJl5CXmqidpKCSlpKQlXaEkIZ7hoOEjIxucXh2fIBcTGVsXEtOY10+YntHSThHaFdlW0xeYk1ZWldUWFVqXVBQSGFeX1BLR1FWVVJLSFdVVk04TVpORUBGSz9IQkNLU00/P0xPSEA7Oj47NjswNDE8PTQ1OD8pMDcpMS4yKSksLC0rLTkkMDQyJTlCNy4jQU5JZzI3J0ZhTFYlLUIuPUVMUTwzcWpMRUSRmKStpKytqqWjsLGzqbavtZ+rtLnIuq7CvcO4s7K1wsPOxMDCvrW+wcC7v720xKmrurG3uMC8sK20tJ6hp7GupqaxpZ2xtaypsrCrqKm1uqy1srWrs6yqq6msqbmusrDHv7ikua+pra2mp62xpaSjrqOonJ2bmq6Zo6Kio5Csn6Ogn6GppqW4pKu0tKSqq6msrrauop2jqKqcoJqbk6S0mY+KjoiRo6GWj5Wfo5eWh5CVlZ6bmZaViJiTlZmnnaGfjZORjpB3fo+EfH1+h4qKcnRzf359XFNjbl9OWWdcRkSWW0c6TW5YYltOYWJPVldWV1RZaF5RU01jW1tVS0ZPVFNOR0lWU1xOO1BeSkJESEpBRT8/S1NPPjpOTUM8PD45OjU9KzMyPTYyNDk6KDQ1KS8sMSgpKywtKiY1Ki8mMCkzODoxJiozRGU7NipIZEhKKzpJPzNDSVMsPo9sQEhJkJqoqaGor6SmorOzsLO0r7Cgq629zLuuwb3HsbSutMLD0cTFv8Kzv8LDvL+4vcWorbestLm9wLGss66ipKeuqqilsKOpsKqtqrGurqyrs7untrCyqbOpq6alpK66rKqxw7m0q7mpqaitqaexpamko62pqKKem6KslaSdl56ZrJ2ip6ihrKajray3sbCgqaKgqq6wrJ2ep6ipmqOYmZChqJiHhI+Li5+hkI2PmJ+TkoiJk5ehnZaZloeXk5OXpZydnYySkI2Jf3+IhHt3gIeFh3R0col3bF9ZYG5jUXNyXEs7hHxGPld1WGFZT2RcTlZWVVdRXGJfU1BPaFlXV0tHTE5SSEVJVlJdYzxQXUQ8RkhIQkc/PUpQTDo+T0o9OT89Mzk4OyozNT4xMDQ4NSg1LyosLjMwOyksLCclMjM0JCwyLTg2MCkoMj1eSzAuSWdERjg8QjA1RUtYMUCUXUFORpWWrKegqbGcp6iwtay3tK2qpKuqvcm8sb+5w6+xrbPEw83Ow7/AtMDDxLrBtMnErK+3rrO6wL60r6+sp6iqsamnqLGls6yqr62tsa6yrbO7pbizrKuup6ugo56xuKuqrbq2pLW1pKqnrKyqraCop6ewsaOmpaGhrJaqoZOboKaepKKqo6yinqaxtqysoaWimqmqrqqcoaWkpJmgmZaQmJ6UgoOQiYWdoY2MkI6ckpSOhY+apZuTkpuMk5KSlKOanJqLj4uLfIaBgoF6dYGDgX91eIqihnhqXmBuZldlh2ROQGeSTERieldiWFJmVU1WVlZUT1xdYVVLT2lXVlZISkhJT0JHSVNRWW9BTVhAOkpHRkVHPj5FUUg4Q0tFODdDNzI6OjoqNDk/Li80NjMpNCsqLCsuIzQuLSsmKCs3OSomNis8LjIsJjA3WFouMEpnQUE8PEMrOkpPXjREh0NKSUSWkK+koaqvl6inrbWqtbCqpKuqqLzBwLm6tLy1prKvxMnL0b/Bu7i/wMO6wrrCxK6ytbK0vMG9s7Kvraytp7aqpq2vqretp7CwrrGrtaq2tqe1t6uspKmpnKSetLOpqKSztJ+1raGqqKqorKefq6ypuLWpqaqpoamgrZuRqqGdoKSjpqOqnZymtK6npKmio5ekpqeqnKKko6CamKCRj4+Zjn+IjYeEnp6JhoyMkZGTj4WJl6Oajo2bkZKQj5KgmJqXjYuEf3SGgn9+eHWDf3t4fn+HnI9wcWZncXhcYXSIak9dmFZIbXlVZVZTZFBNVlVVUU9YW2JWSVBqVVdUR09YVUk+SUhPUVB4TU5WPTxLRD9AQTxAQ1VDOUFLPTU7RTIzOzo3KjQ6PSstMzQxKjgqKisqLCkqKC8qJiklMzssJDIpMi8yMiUvM1JjMDI/Zj1OWD9DLD9MVF8vSWw4UkY7lYyvoKSqq5mpo62usrSvqaWvqai7v7zBsrC5raK2r8jHx9DAv727vMO+u8TCv7+vsrOytr68wrGytKu0qaW1qaWtsrK3rqKstLGvsbmruK6prresqp6qq6CjobatqaGfr7KhtKqfqKeqoqqhoaytqL2uq66toaenn6yZj7CimKKhqKeep5uZqbCpop6roaGSoaKjp5iZqaWYmJmdj4uHlYh9joaEhaSXhoOEjYiRkJKGh5ahl4iSnpKTkI2RnZWXj4uGh3h0gYB8dHd5gHt1dHtrgoekdmleZWyBdWeIjHxSVm9eS3hzVGRTUl9NTVNaZ05NV1llWUdTaVJSP0JOUWFROklITFNJcVFMUzs8ST87PD07QEBXPDw+SDczQ0IxNTo5My01OjopLTMxLS02KSgrLSw1MiMyKScsJS47LiYxLjAtMTQlLDBNaDozOF89YWQ/RjFDUFtbK0hPO1lEM4+NsaCkpamjpKKsprOysKiksKequL7BvLGpuaqnrrDJxsfQw77Avrm/wL3JvMG4sbC1srq8ucCztLysuayjtKamq7C1t7Glprm0rLO7r7ylra22q62cqa+kn6SsqqicnqqypLOomqunqqSonaKpp6q9qrSwrp2ppKCunJqzo5alnKWkn6WamqirpZ6aqKGbkZugpJ2Zl6mqkpmakpCLg4+Ffo+Cf4ifj4eBf42Ik5GRhoOVm5SFk6OOlJGLkZuTloeKf4Bxenl9fGh2fHp1cXJ+aoZ5hYhkX2djcoV7bWh5XV5VQVd7bVRhUFJZTExOcHRdSVpbaFpGVmZQQz5KT0RDQTlIR0tTP2phSVE4PUg8PDw+Ojw/VDY6P0M0NUg+Mjs1OTAyNzw1KC41Ly0xMSYvPktJMSUaOTAlLCwwOS8sLCs2JzE3Iy0vR2pJMTRYPWZiQUo3R1NgVSo9O0ZdQCqNkbCYnp+opKKhq6S2sbGkqbCmrbnBvbaxpLmsqKiwwsjIzMK3vb+1uMG5yLbCtbWztbK9ubq9tq+5tr+sorOmqqqutLazqJu5u6iwvrK6oK60tqmrn62xo5ylqKmjnZulsKavoJ+rqaehqZujqKCtvKeusK6hqqKkrp6eraaYn5qhopyfm5mjqqKamqKklZaUn6GWm5alrIyfkZCRjIKKgICPgHualY2KfYCNiJKRjYuGk5iRhpSji5KRiJCZkJSBiX15a312eHhienpxb3F0eGuCdWuCZ2NnYm5zjm1iam9gb0BceWxVXk5RUktKTVRZVk1cXm1XRVlgUF5PSE1ERjs3SEVLTzxyaEpLOUFFOzs9PTs7PUo0OUI8MztHPDQ/MTgtNzg7MigwOS8sNS4uPS0qTD4qHTQ5JicuMzQuMCsvNCYsOiQ0MEFoWjEzUz1lX0RMNktWZE4pPTNSXj4jkZasmJ6Xp6Kgn6ejt6+toa+vqKy4w7u0rqC5r6uotLrHyse/uMG9r7S/t8S3w7OwurGywLa7vrequbi+qqS1p6ipr6y4r6eYubujrb60tKCtt7Wnpqews6CepaanoKSZnqynqJ6gqq+noKaWoqifsbifpLGvoKuhrKScpqeompucn6OVnJuanammlpueqJGYk5mdk5mWoaqRm4qOkId9h3+Cjn18oY2NiXqEjoaMjo2GipOajoiVn4mRlYKMl42SfYV8c3B8cXN0X3h3aW5xcXBrgHRlemxnZWRiZoaAYFtyanJNTYBpWFpNUUxLSFBTUEdMW2BvVEZZWlJnT0hLRUY1NkhCTEk1WmVKQDZFQjk6Pj0+OjpDNTk+OjNARjwyQDIzLzo7ODMmMjwwLDg1QiopLUMqLDQ7Tk5AOzczLS4rLTcqKjwlNTM9ZmQyNE0/ZVxGTz1SWmdIKj8wXVw1KJWbppiblayenaGjoLaqr6O0s6mpucW3s66gt62trLC1xcfAt7/BubC1vbe/u76wrL6ws7+yvMK4qru6uKeotaenqq+qsa6kl7u1o6q6ta+esbivqaWnr7GboaSgpKOglpuvpaGeoqivoaChkqOkorewoaaxq5+ro66YnaqlqJ+Ym52kk5mbmp2lqZmbm6WVlJeVnI6TmKKpopGKi5CGeoR+hIt6jpeKjod7g4mEio6PhpCTmIyOlZmLj5d+hpeMkHqBe3Byd25vc153d2RsbGxraoVvZ3JpamVpXWRzgWBba3ZpWkp/XltZTk9LSEhTVkczOF5fbFBFWVZaZU1JSUVFMDdGP0tCNklKSDs2Rjk0OT49PDk4QDg7ODo3QEk+ODw0LTM8PDc1KDU+MSw7QTEoKzY8IjhSPSoxMTM+RDUsLSc0Mio7KzEzOWNtNzRHQWZbSFREVF1oRC48MmRXLDGUoaGWlJuqm6OhoqG2qa2gu7elrL3FtLCvo7awrKyutMPDvLO+uraws7m4ure6r67As7O5r7/At6y9urWlorKppqixqauwn5m/tKSntLWonrK8qailqa+rmaKnnKOllJegsaSZnqSpqJyhn5KkoKS4qaSnrqedpKGok6CpoqGhmZucn5KZm5afoqqbmpiglJGVl5qNk5OkqaSQiYqPhnqEe4SFfJ2NiouHe4KFiImKkYaXkpKLkJSUjY6UeoOXkIt3fnxsdHJsa3Ngd3RoaGpnZ3CHaGhoZGZpamBqY2poW2Z7YmBTdFRcW1JMSkdJUFRAISpoX2lNRVhVX2BMSkhFQy46QjxGPDZLUEQ4OkQzNTc9PTg5NT86OzQ+OEBLPT45Myk4Pjw6OSo2QDMuRTQoKyw/MC1OPy4rLTcsMTE5NSwmLjUtODA1NzZgdEEzQ0RoW0pXR1VgaEIzNzlnUCcynqKkkY6jp5mcnp2js6ynqrq2pqzDwbixrKO2rqetrra/v7yywbawrbK2tri2tq2qvbOusrG8vrevvLuxpZ+1qaSks6aorZ2cwKqnpK+zqay1u56pqaywpZidqZ2mpJGYpayhmJ2kqaGboZuWn52ntaawqq6goJ2doZWgpqCioJqbmZuSmJ2TpZ2soZeWnZSTjZWYi46Ym6mgkomKi4l5hXaBgoGdh4uDiX6AhomHh5GEl5SPjo+RkZGMk3qDlY+Gc35+ZnlvamprZXRza2JnZGR2gWNlZmZlampja3JbX1ldbGNhTmlYWmBWSkdIS01TVz45XmxoSERWVF1bSUpHRkEuPD85QTg5UkZANzpCMDM3PTc2OTI6PDk3OjlETT1CPDAqPEA7QT0tNUIzNz0rKiwwQipKSy4vKiszNzIyKDU3JCs3LjcyNjg1XXlOMj5IaVtMWkpWYmZAOjNCaEglNZqjoI+Mq6GWlqCWpLKxorK9tqGxxby6srGjt6yqram4vLq6rcCxrq6utq+yuLOpq7mxr66ztbq1sLi9rKaetKmfoLCiqK2bor+fsKOusa+3rrWera+traKZnaaopZ+Vmqeln5ikoqidmp+ak5yerK+muqiuoqGam56ZnqSapJ2XnpiblJifkqiVqqeak5qakoyVmY2UlJuqp46OioqPfIJzgYGKmIWHfYmKhoaLjYuThZWbk5KOj5GWjpB/gI2Og2+Bf2Z5bWdraWZwcmtcZ2NjdIJiZmdqbmxnamppbl1sbHJwYFRjaWNmWklGTU1PWFFQVWFlgFVBV1NZVEdJRkVALzw9Nz82PEZOYTg6PzI0OUAzNzgyOD83PTg+RkpARDkyLT1BPUE9MDVAOUExLSsuMzw7SzYwLissLTI0OzYjMyopNi41NTQ2NVp8XTE5S2pbTVtLWGRkQEExSmZDJjSRoZuNjq+dmZOhmqmxr564v7WgtMG7vrqxprewp62kt7i3tqy7rqyqq7eqs7euprK1sq6psLW1sLK1uaaon7SnnJ2ooKermqe9l6yjrrC1ta2toLGtsKihm5yjq6eblJumo52aqaKklZqfm5CbpKqrqrugp6SgmJqZnaGPa6KWmZxwgpWZo4B1kqmnnpSUnpCJmJqAloqikHmHlI2DbWp/d4NxbIaLhn6FjIdxX2RhZ4SYhWuKjZSSdHeLhH6DkIBnh4BndWhlV1xoc25NUGljZ3KFaF9lZm5tal1gYYqPg4RlTktEOUdUaF5KSFFRVVVMSFNhcHRlRltRVVBGSEVDPjE7PTY9NjwzZlw1Ojw3NTtENDg2MDpCNz86PkZMQ0IzNDM9QUBAPTI4QEU9MSwsMDg9RzcwMS4qLiovNTY4LCMxJzIxNDoyNzZYgWwxNk9rW05cS1tmYj5HMVFkPSoui6SZhpWwm5qToJuqrKqjvcWuqbfCt728rae3sKSqorezsbKwuayppqy0pa+0o6m3tbWop6u2sq20rbOhqJ+yqZ2ho5mkpZiruZOlpa+zt62vpaquqqykoZ6coKamm5agpaSbm6emnZOenpePnaippLawpKOinJaYl5ejiKGOkpqGoIeSnKB/pX+mqp6SkpqRiIRzeI2OhYihdomNaZeJZn5zeKBviIeEfo99f6GgoJmAfYeec4aOdZuKbIeBg21pZWN6bHJhU4VtYmxpmHFYaXFviFleaVtsbFuIcm56coVmhoRaX0dOP0dfTkZSVlZRUVJXVWddTVZJUlJPRkhHPjw0OT05PDc7MDw8Nzk5OjY9RjU4NjA8Qjs8OT1GUUc9LjU8O0A9QD41OUdBODIqLzE8STkvMDEuKi4oLTQ1NzMlJjIxMTU+MTw4WIN1MjVSa1tOXExcZ189SzFXYTcvKIqnloOdq52YmJ2fqqmnqr/DrrG6vLfAv6qlt7CorKWytK6us7aqqKSwraW0spyutba0pqensrCssqitnamgsKefo6KYn6GarbKTo6Wltb2mraerqqyopaCfmJ+mo5mYpaKjmJykqJaTopuTk6OlpqG4pKSgo5iVk5eTnIivkJeUiamLlqGchbGAo6ydk5mdlHmC1KiAh5XBnMZ5eLGlt5dlgMCcv3mEhXqShH2QkJHKcpe7nMV6crWmu5B7gG2XsauweWhsWLGubmVpvJK8bmd6bnKP2H5Ta2O2sn6Bc5RzmqGqkFdPV2JPVk5GVVtYUVBTjV1XW1FBXURQTkVISTw8NTc9Ozo5Oi49Ozg3ODs5PkY2Ojc0PkA+Njk/RVJJOi41PjpCPD9BODpKPjUyKjIyQkUvLjMyLisvKC0vMTg2LSAvNDE2QTE9OVeDdzIxVGtcT1tNXmdcPkwxW100MSGLp5OBp6mfl5ydpayxqLDCvbK1wLW2vsGrprOsrKimrrOprrazpqeltKWnt62cs7G1q6akp7CtrLCmqZymo6+ioJ+dlZmenK2rk52in7O6o6upoq2upaGbmpmhp5+XmqefnpeepqeRnKaZk52hpqKhsaOfn6OXlpKXkpmFr2tqio2qfmaDlYatZHCdnZSZppRwrqGkfni7fWyhkHaxX2q0W6WAZZyQYWeDe2eAa3lrqWW+cWemi3WxanuxeHSSlGNubaduW4ShRWhmh5ZFdZxgfmd8pKeCWmCMq2iAlXh5aqc3Sq9cWFNsZFtLT1hgXFdWO06LT1dXL0lUU0pERkY9PzQ2Pzs4OjkwPTg5OTk6PTxEODs6Nj1BQDY8QEhRRzkwNzxBQz5ARDhARz0wMy4zM0U0Li41My8rLyguMC46Ni8nJDIwM0IvPjtVgnYyLVZqXE9ZTF9nWTpNNV9YMzAbkKKVg62npZ6jpKqxt6y1vb6wtsSxt7rBpqiwqq6oqK+uo7C6r6OkrbKjqbennrKysKOloamsrquvpqadoqGvmqGblpSWmpuspJWaoZ6zs6KsnKOtraCdmZafoaicmJ6jn5uZoaakj5yimZagn6qep6ahmqChlZWRlpCahbWbtXiFqZm1mXaGs5u3fpOWlqmUf2uBpnuChoiTlJN3q2drsVyreo2GlHSJco+HgYGJkJd4goGLl4uDoI6DsHZ3n3FsbGx8i06kWEhiYpl+Y2imX3lydVOTh15RqW1jcX2GgGKcLlGhb1tTa2hgTEpcZVlcWkI+sntYWEEjTWhGQ0VBQEExOT44ODo4NDs5OTw5OkE6RTo6OzY6Q0I4PT9LTkc6NTpARkJAQUQ8RkQ7MDIwMTtGLTAuOTQwLC4oLzMsPjgzMR8vMi1EMT08U31uMytYalxPWE1fZ1g3SjhhVTUwG5SglYezpqahr6mosqypu7bCsLvBrbi3v6msra2tpayxqaCuu6qgp7Oto6q0o6aysqejop6mqrGnr6eknZ+frpWemZSUlJidrKCZmaSota+iqo+qqKqbnZSXoKWnmp6cop6bn6KkopWbnpeZnaKpm6aanJuioZeTkZKTnIPVk5m5cLDBfsWGfNaUm7t8mpWlj42djaR7joikg6WDeqx5j51Wr3qIfp9ruVu6d4eEfqaClHuXeqp4jZ2PerFujoR0kbyFb5RQr6fFilGgemNgqmJzcohtl4hgU7W0yIWAiXxjpDNCnXZdUGppY1BAWGhaZGFKSE1xUVxRT1lmWkNFP0U/MD08NTk7NzQ8Ozg9OjxDOkY6Oz42OkBDOzZAT0xIPDk7REhDQkNEPEVGODEyMTFEQi4vMDQ4MystKS4zMjM5NzEjJTUqPjM9PVF3ajYqWWlbS11PX2ZUN0g6YVA3MSWbopSYsqioprSqpbSppLy3wbC5v7C1tLqytKewr6KvsqWfrbWomqe4raKvsJ+ztLCgpJ6fpqmwqLOoo5ucnaqVmJeVlpOWoKmcmZanrbCpo5+PraKolp2Vm6CloJihoKGgmqGhp5qeoZ6UmJqmoJynlZubn6GYkJKUkJ2Ism5otXGrh26OpnK0c3K2e5qXpIuPnY2ifpGhpn+xd4OR0tJ2XK57hX+kb5uqpmuHhX2tfZiZjnuxcZKejnezZZd0hJ5vnmeUUciLWsJcoHliX6xgdXOHYpeIXlnKnW+/gXVNS7VTVcZkVFFqY2VYQVBrYGxoUFZHSjk9VVJaV1hJRD9KPDI/OzU9PDQ2Pjs3Pjw9QztHOTtANzs+RDsuQ1JKRz4/PElKRkNFRD5ISTkxNzQ2QT8vLjI0MjUyLSkuMjYsNzQyJh82MDs1Oj1QcWg5J1dpXEJPVF9lUDVHPWBMNjIwop2SpLGto6u8raa0pqe1uryyur62tbO5uLKktLKgsLGinquvo5emuK2ksbCctLepoKWeoamksaesqaOZm5mnnZWTl5eQkqGnn5WTpaqwpqKXk62gppKTn5ujpZ6VmqWmoJqin62ZoZ6dkJWboZ2cpZWdlZminpWYlZGbhax7d6h2o42IhqlvrYqCp4OYmKGKkpuLon+TmomuhICCs1xys1KufYKCo39y2H54hn6PnYaamXavhoeRnId2tGGaZZqCgpVtklqwWEuadZh5ZmCsXnV3iGiYiGtdr3eVno94bDV5yK6yX0JUb15nYEVQbWBwbVZWTS5mZWlTWVA7QkVATDo1PzkxPTwxNj85OEA9OkM6Rzs8Pzo+PkU5LUVVSkVAQzpNS0pCSEc+R0s5Njw0Njo+LzA0MzMzLjIuLjE4Ki4zMiUhMDM3Njc9UGtlPiZWZ1xAPlZfY042R0JfSDo5OaCelaC5sZe0wq6osqipsrq3s7e+uLextLq0pLeynrOsn5+oq56Up7WrqLCxqq2zo5upoJ+nobWmpamimJyUpKCTkpuXkZSipJqSkKatr6ahlpmpoKKOkKGZp6SflZmkqJ2cpJ6snKGcn4yTn5qdoZmZm5aXoqCTl4+mnYapfX2leKGOjYKqcK2LgaeGlp+hiZiYiKODkoiUq32Ai515b7FaqIKCiJ96dNmAd4h0qIGOm4ySpHuUj5+EerJenWSgfoOVbZJdq1tak4CRf2hnqmNxe4FrmIdzXataiaCOa29lT0pDoVxbTHRdYmdNW2FfcXNfS1c3SpyYWEdFPUhHQU0zNUE4Ljs+MDVBNzhAPDY9PEY/Ojw2Pz1CNy5IVkpFQUg2S0lOQElLQEVOOjpANS47PjEwMjE0NCsqMDUvNywmMjEoJCQ2NjcxPFBlZUEmVWZbPzJVX2JMN0ZIXkIyPzijnpmawauXtMKuq6ypprSwt7C1vrm4sbC1uqi6s5+vpJ2kpqaek6mvqK6otauprqGYoKCmpKO5oaKroJaakKGflJOemZOYnp+QjIypsLCnnpebqKagjJGjl6eqppSXqKeenqCiraShnqGMk6GYn6CSnpeclZ2hlZaNqpyPrm1ytHOpi3WKp3O0eHOzgJGko5Gdjomkh5B3uHCNe4uiamu2WqGFZZeXaaCip26UcrR0k5l+smqFkYetanWzYZ1mom+Hk2uXXa1gTaF8hpJSc6NreX9+b5iHcVyvVjycd2ZUb24uXKdPY1NrZWJtWWNdYXB7Y1RbUz49bnEzQ0JAP0w6ITdANi47QDM3QzU4Pz8zOzxDREJKRk1JRjYySlRLRUJJNklKUD9ITkNGUD08RTUwOzswMTAvNzUsKyw0MjYvIzAwLCwdMjg5LzlOYGVEJ1VkWT4vVV5hTDVGTV44MUM4ppybnryhnLLAr62rq6e3qbeutb+0uq+ut7aqwLWoqaCbpaOhnJGpqae0orKnramgl5ynn6SruJ2irJqVmI6jopWMnaCbmJyfkZOUq7axqJmVnKypl4yTpZikrKKRlaqxo5+epquxmaGjkJiilqCblpyWoZOcqZyUkKqZh9SSmrtzsMOAw4Z+1ZabuHiIkJiMmIuMp4h6pLZ1fnd2woKasmCDunnAfXa4Y7WBjIepfZWBq6lxe390vIinoGmdYaaOr6F+jHWHq32+b3O8dLKDdHiBim6aiHFujaR0vV53fVphebxrWlZcanleamBmZ2NteG9ZXFpDQEB0QENHKzRHIic7PzEwPD83OkI5OT1DNDxATlpeYGBgX19aUFBSS0VGSjRITFJASk5FRk9CPUU4ND05MDIwLjg3LSouLzE4MCItMSwzHiw8OjA4TFhhRidUY1g8L1ReYEs1O0xbLTdBOaibnqO9oZeyw7Ctqaqssaa3r7bDsLiwrbiurcCwq6OinaOhnJuQqKOqsqS0payknpWaqpimrLicoq2XlJ+QpJ+SjJyinpedmpGVk6+5sqyWmKSop5SQlqSco6ydkJ+oq56an6iis5+jpY6noZSim52YlaOYj6+fkZSpnoWQmLZ/j5GMt5V4gpOatXdta25zb3mQhY+KdJ/Bu72ae4GxqHCAc5G5g32Hho2HjXyKh42YfKS7ub2cdHm0o3R3l3Z0sHWZnmaHao22dHJxeLaMXn96fYlog3luemOLrHB1hX9YW6dqRWRaVGZgY15jUWdncGx1Q05RTEM6Wk0/SzI7LyA4PjsuMz1BOTk/PTs8QzZCVFlaWltbWlteYGJgXVNHR0g0RElUQktOR0VPRj9HPDc/NzA3MC85Oi4sLy0qOC8lJjIoNCQoPjcvN0xUX0cnU2JXOCpPXl09KzpWVSc+OzyonqGiwKWWtcS0rKqorKqpua6wxa2zsq21prS4rKmhoaWeoJ2Zk6qjrKqltaemn5uVoKOdrKS8paCplpObkKGbko+hp6GSnZeUmJWytbetmZ6kpKKLkpGlm6Sqm5WopKWbmaGopqekqqGSrZ6XpJ6Yl5edno+vqJObpaGNan1pmqV3hnJ9mo50eWSHe72+wLpvk4Nylohhc2taX5uKYWOIj5VrYICWZG6ed2OWbIGalZRlXmBicJmIaXKLfYaVZ2t/cnR4fX9iXHh0gWhQXW6DfXuLa1hreoJzSkpvhnBOdExFWF1nYUxbWGZjX09bbXVpcVJRREVNO0dJPU0/MiwyQT84LzU/Qzw5O0A7PUM+UlZWV1laW1tcXWBhYWFgXFVHNURGVUVKT0hGUElJSDs4PTUxOi4wOzouMC03Nj01JiIvKjIsJTs4LTdKUl9JJ1NfVjQpUF9MKDI9W08nPzI+qaCoosKjm7W7tqKspa6np7SxrMerr7Kqs6K9sLCln6KnnaObmZmrpq6jpLSppJuYlaCapq2ovaeopJSTmpWfmZKWpKmokJ6RkJidsLO/rJunnqeiiJORqZqno5uaqqCjmZqjp6yjoKyjm7GblKegl5Wdn52WsKSXoKeYmpCbm6Ghl6ShmZyZmZmPlYFnbX1xd5KYlJKGjLarjYeYlo6KjJiWh5SVi4STlJKJjpOUmZSYlpmfoZmak6CcjYJ6pYVta32QfYB1i4qBcYJ4eXZ1iX98iWpzgXSDdWV2fXdrb3ptX2RdcGhNWVpmal9XWm95bW1mVU9GUjlOWU1STygrOktCNjM1PUBBOjpDPjxFTlNTVFZXWFpaXFxgYmJhX15eW1RLQ1NHS05ER1BMT0k8OjszODksMjs4MTApNklSTzgiKSsvMiM0Oyo3Rk9bSiZSXlMxMFReOis9OFxKLDwtQLOhs6PAoaSysregqaWyp6WvtKrHqqyvpLOkwKezoJ2kpJyjlZWfqqasoqO2q5+YlpWfl62ppcCeqqOVkZqXnpiSk6GenqKnk5KaqaizxLCaq52rn4+Wlqidqpycn6uYoJqboqSvp6KmqKCvmJennZmZoJ6dnK+gnKCllJaRl5Oen5ShnZegjpaTioqNjpeukHyWnIOSgourqYWBmZeJhI+eiHqEkIiGmpKIh4qWj5uXjZCXnaOVmJKQnI1/jmehs6+FioV2e5KKfXd5em9meY+BgYlrdYF5iHNpc397doOGgmp1ZHpmYGplY2Rma1lre29pal1TTFBEXlRFQD8+LDRARjs0NTs+QTs8Pz4+SE5OT1BTVVZWWFpbX2JjYV9eXl1eXVhWSktMQklPTVJKOzw6Nzg2LzI5NjQuKCYkLTEuLykrKjclKzwoNkNNTUQvVFxRMDVOWzE3RTNbRzU8LEC0obmwv6yrr7KxoKqnsq2irLKvxK+pqqKxrbyis5ufpqKhnJiXp6WppaSlsrSelJOdmZmwpa2+oKuikJCdmZmUkZWhnJeonYSerKyjtMi0oKqkq5eVl5qmnaianqOqk56fnaCqr6qmpKyjr5ufoKCYpJ6cnpyuo5iep5KWlpuQopeWp5yalmWCknxlfo2akGN5jm1oa3uSpatqZZuYfWeGimVlaWh7jqKPbGiNmJGjd2tqipiinpdza216hI6IelhmXoaDXm2MioF2XGhzd3aRf4iCbXeBeH9zbnmEdHaJh46DfGqHWV5sdWVdc4lpa3twa2NfUk5XSWRYQUo0PkY3P0ZENzE8PT9BRDs7REdISElMTlBSUlVXW15gYWFgXV1dXV5fXVpVT0RIT0tTTj0+PT02NTM1NTU0KiYmJSwqJS8qKyc2KiQ7Jy9BSltKLzdaTzYpRVkvRE8yWUM7Py49paC6vLqvrLSxqqWora6wpq2ssLuwqKajrK2wnqyWn6OdopmZpqqcraOlp6iyrp6Uoo+ir6W1uKWtoo6NmaCZk5KboJmZpZZ8pa+jqLXFuKWip6+enJSeop6jm6KoqJGeoJ2hqrCrrKSroaqbp5+nn6uWoJulr6OWm6iVn5yakaKVnKmXnX29g4hytHKEnYataHi5xLhxlKOjeqaZmXKrgnzLwMC7cYyjiIOefJaYiZ3AvYGWnZ2MnMHBfIJ8k42aw8B+bKWyb4yBb8p6f5t2kIOOgXV5gIB5cXp/h3B3hYyTeW14lGJnYHhkX2WCYl5zZ2xkZFlMVklRWkhPRDJJRT9EQj4vPD8+QEE6OERDQkNFSElLTU5RU1ZZXl9fYF9eXl5eX19fXVxTTVBHVU5BPz89NjQ2ODI3NiomJSMpKiYuKyopMTAfOSojPklbTCojQlAuI0ZbM1BZL1VBQjsvOJajucO1sLDBqqiUo6+osK6tpbKzrqmkpaWvq56qmJqin5yaqqahnauipKikpLSknKKSpa2rt7OnraKRkJicpZKQoKGYnJ+diKetpayuwcCxoamuqZaSnp2hmaGiqaOSoKCdnqyvq66npKSooaalnayokaOaqKypmpynmqqflZajlJ+hlZt+zpR4eqSBeZWWm1+uj16OqIKjoXynlptzq4OAr15jjap7qIeFoHSXk4izY4KrhqCNjbNqhK91fZeIt2KDrVqjzW6Qdnvae3+ZcH2IknZ9ZXqHdnZrfIdufYWQkX5tg5BgcWxwaGBfeWVccWdqZGdgUlRSV11LT0Q1QUhERDg+NjtAP0E7PThAPj8/QkRERklKTE5QUk9TXF5fX15dXV9gYF9fXVpXT1VKPT8+PDU1NzgxNjQoJyQhJywmJi8oJiszHTYwJDc7U0wrLC1KMCc7XDtMLSFQQEY0LjGtwsC/tbSwuJedkaOqqK2zq6WyqquqoqumrqmfppuZpZicoq+foJ+op6OloJ6wq5qdlaatq7CqqKuflJGan6SSj5+ll56no5+vpq2xqcDHs6ipsa6Wkp2boZefqKmelKCfnZ2tsKmsq5yoqKWiq5KrspakoaqpnaKlpJ+un5GYpZeemZKTkJegcYWMl3WFqIZxsX2ecqx/op+BpZCfdquCfa1/nHOtf6yHhp92mZJ7fJd+qoihi5GLnX2re4mVkKCBe61XncV7j3CTwX2BlWx1cIxtZXZlhW9hd25yb4mKko6DbpOSZnB1dXFhZ21mX29oaW5nZFdUXWFaUlNDOUpJQEQ8PjxARkRDRUE9PDw8PkBAQUJFRkdFQENJU1dZWlxdXl5cXl9hX15eXVtaUkM+OzkxNDc4NDUyJiMfHCAxJyAxJyAnNB41LSY3PVdKLTwoPTEpM1dARiEcRzpDMS4rsNPGxrKzn5yijqOioqyutq6osaWoqaatqqqnoaOdmaKVn6Wrn6Gln6ioop6dsKyXmpapp66rqKannpeUmaOhkpShrZudp6OvraWutqu6zrGtpq6rlpWcnaKYnq2rnJagmZ2fqbOrq6ucraulo6yarrGhp6utpZekqaenr6CQlKKimJOQhKRqpHWJeql0erJwgqaKmYxxiaCahqRgYVKshX+ug5t2rYKohoWfe5mXhXpmgKOJpJiGgqN9qX6BloiuX3ypVp6jkoF6o5+Ae8OuxItyr7OzuXFiqa/CdGiMjJiOgW6clXFvenh5cGxmZmVycGZ9amNdV2BqWFlVTU1RTENDQUI7Q0BAQkk8PTo5Ojw9Pj4/QT04NjtETFBSVFZYW15eXVxeYGFgX15dXF1bU0lCNjc5OTY2NCwmJCIgKCciKy0iJC4hMy0mQERXSCxHKzU1KjJQS0wjIEE5RDQsJ8PJ1tS/oZmrp6Cuop6vtLCuqayip6WpqqqopKagm6Senaanp6Ocq5mirKGjn6+hnZqSq6S0rq6gp5qdlZOmopGboqigoKadsaamqbKtt8mytaqrqZaRnJyimJ+ls5yZoJSdn6esraWwm62ro6OqobKtoamysKGZqKesrbOhkZShpZaZkHupbJ6Eh3WreXywb4KljImflpaglYHSuLS3yYGBsl9glKmDpYiHoHqZlZp4qsl0maSUqamQkpuNgJ2KmsbGeWehgqV0gZ+Ogn2vXW+0YrB1S6OHbadHgpNkjpCeknxxmZWBcXt1fnxuXGZqc3FmgWtfYVlkblxfWUlNTUtFREFCPkE8Qj9JOzc5Nzk5Ojs7OzMuNjxBRklMTU9RU1daW1tbXV5fXl9fXlxcXFxcWE1CNzU2ODUvKSglJiUkJiksNEVOUFBNRktKVkYqTDAvPS01T1RRHRw7PEYyLCSnpMDGuK2osq2spKKbsrisqqClmqikqauqp5+mppiqo6Cvq56loKyanqmlnae1nqKXk6mqtbGsm6ScoJSPpayRmpyno6Gqp66ipqiqsbXDsrOqrKiTiZecpJqho66ll6GVmZylpq2csZ6uqaefq6K2rKCwuK6dmq2msLGwopKWpqGYno2CnU54moF/n3qEo32DpIWHpp+dn5SEuHt8ebmCf8zGwrZ4m6GRi55+mpaXinafl4qll6Spf7CFnYaghKx9mpVjpm2kcI+FkIF8loJyrGCjcnCAmmC8fVJVdI6So5Z7fpSTjHZ7c4eAcV1tbnhyaoJvW2Rfam9jZV1LTVFUQUlIRkk6OUs/QjEwODg2Njg3Ny0qNT09P0JER0lMTlBUVllZWltcX19eXV9fXFpaWllVU09IQDg4Mi4sKi4rKicnP1FUVldXV1lYWFdVT1VGPEUzOlBbVBwbNj9ILC0gi4eYqaukqriqrqCboKyys6WeoJWlra2tqqecpqebo6ihs6+jqaeyoJiopJSitaKilZeiqbS4o5uhnKOSj6GxmZ6cp6ahorCunaapo7azxbCtqaypkYeQnKecoqScpZaemJmapqWrnLGir6WmmK+ku62htbWsnJyzsLavsKSVnK6eopyFj9G1w7d5h46FkZOQgKZ5lKF3jKCShKWCinGqhoW1bnJpmqSclYqffZiZhoePc6+CppujjqaLk52LlZCbbnGyXaV0k3qcbJh/e5l8balhonFxfp9ic7K4aHePlKaYfY2OlY56fXmQg25qeWl6c2+BdV5lZW9uZmhgSltYWDxISEBVNEBGPjwqKTYzLjAxMykmNDo7PD0+QENFSUtOUFJUVldXWV1fX15eYF9dW1pbWFVSUlFGOjIyMy8vKysoQFFSVFVUU1RWV1dYWFdVVVVVUU9RW1UlITJBSCQpJZJzjIqtvb68ubSelqekrbWhoZiVo6emrausmaajn6ahobaoo6mnsKOUq6OOpa2jnZCZmqqzs6Sco5yokZSXrp+gnqeknaidtpqjq6S2rcSwqaupooyEjpyioKailZmZnJmbmaemqJmtqK+jpZuspr2slLyvrJ2hrrC3qbCkmKevoaaWeaiQfXywd4qApKWInG2ycKGHrXyhj4OolZiArImFroWglaqgopeGn4GalYB7kn6rgJ2al4uqd52gkoqUkoF6r16kgX2mp2Sdf3yXcmqvXaRqcIaZXWBbjKBtlZGmmYKVj5qOfHyEmoBrboBjf3RugHpgZ2Zxb2loZ0NaYVs9S1UzVThCQkM4JCQzKycnMywgLzY2NzQzNTlAQ0ZJS01OUVNTU1ZaXV9hYGFhYV1dW1pXU1BPTkk3MDQyLiosQVRWVlZUVFVUVVVUVFVUU1RWV1dYVlVVUUhGSUojKCi9kpqDqMXBtsCznpqsoK23paOOm6SioLCwq5+loJ6tmZ+5oaOroK+pmq2hkKuopJaJm5CtsKymnqWbrZeYj6yhoZ2loZqlna+Zoqmnt6rBr6WopJ6LgI2bmp+mnpKUmJqUm5qmpaabqqytpKSeqai+pZbBqqmhoKqwt6mrpJ6yraaol3WvfpCLnIWHfrqtipllsI1lla19oY+Dp5WagayKhLCFppqkoaKRhaFdbGuBs2B/rXt7g4GxbWdumZmNibFbfrVcpIRryKJkn4B7u1d2tVmyfVKugHqsV4ChbZePqJuMmJKamXx6kaB/ZHV/Y4Z4dYF9Ymtocm5nZmVQVWRcQVZgPkkoPjk9NCEiLCUfMi4gKjEvMDQ1Nzk6PEFDRkhKTE5QUVJUV1peYGBgYWJeX1xbWFVQTkpHQzU1My4vQFVZWFdYV1hYV1dXV1ZXV1ZXWFdXWFlaWltcWFdXR0I70p+ysba9urPBsqKcrKaktaigipqgnZyzs6qfpKGetpmhtKiqrJ6wrZ6rnJWvp6GOiJuPr6uopqGlma6SmI+omaKdpZ+apKOmmqGjqrOqva+kqJ6djn2Lm5WgoJmPkZmbkpqYqaCjmqmuqKWloqSoup6fxKWjp5+psrOqrKSduauqq5SAqZKjr46bgIekl5mQgoC4w7qDjpyThKeXnIKsioKviaecm6arkX7WvcKqYqS/vX1+o4KD17u4tYaWlISevb6EbaOCb6uEbJyAerKwx4Npq7C8rHd2ob68c4CWjqadkZySmqB7g5OefGN+e2WPZ3qDfGFsZm1rY1FhW1NqXEBVYkNOKT06NC8fHyQfJTIgHSQoMDQ5NjY3ODs+QUNFR0lLTU5OUVRXXWFcX19hXmBbXFlUUU1IQz89QT81PVNZWVhZWVpZWlpZWFdXWFlaWllZWFlbW11dXFpWWFRXWruVs7Owv7ixvLKinK2mpbKmnYuYpcCquLKoosCnqLOdn7Kduqifrq+lppWUsKuXjIKbka6loqygo5yqn5eKo5Onnqecm6GppJmgoqyuqrqtqKObl5J8iJmRpZuSjpCXmY+Yk6maoZmqqaGqp6CjqrqdqMOin6yhqbCyqK2nnrilrKyZc3aqpLiGZImgcGiukYuQbm53pJCZn4F1rpmUcI+LcZaopJuYr6RzbW1tZot4b26CmXCBempxaWeKmJaZcmlqhYhncYZkXYhiam9ZXGZ9dqZfYXCNkG5lZX+Mk4+hmZmak5mhfYmRmHdmiHhpj2x7gHplbWRobWNLZFhKa1o7UWZGUSdLOisjHCAbIywpGBsYLTIuNTo0NTc6PD9BQkRGSEtMTU9RU1ZcV1pcYGBhXV1bVFBMSEQ9OkFCN01YWlpZWVpZWFhZWFdXV1dZXV5eXVxcXF1eXV5dW1tVV16playzqLm4sbOqqaGtnqOyqpiSv7PFy763q5/Bra6koqmtoLqjpK6sraWNlq6pj4uFlpasnqaqoJ2ko6CRi6STp5mpmpekq6KXn6emqLC7q6yam5KSfISXjaWYjZGQmJSOmJWolaCZqaObsKadoqu5n6+/p6OxpKqur6irqaW1oqy2lYqhqaa3nYmWo5mIqpuRlZ2SqbOZmqKqoLKWoqGdn6KdoaWilaynjZOTjYeTnJyVkZmTmZGPloaBpZuZlo+MlJSMkIeEfmeJfnSCdXOHinCnbHqTj5ORgIGNjpCPnZWil5qZpYSJl5F0a5F3cox4eH16am1mZXBlVWBZQGpbSGRiUFkrRj0rJyE3NTAuHxwhJTIoKjY5OTQ2OTs+P0FCREVKS0tNUFBRWFVXWV5gYWNdXlRRS0VDPjk9QEFTWFtcWldYWFhYWFlYWFpaW1xeX19gXl5eX19gYGBfWVlgppapqaS0ta6uorCjrZ+gtbGQjazIvsa7uqujpp+dp5+yqqS3p52ptaenkZitoouHiY+bp5WspJ+ZqJ+ekpSjl6iaqJqVp6KkkZyomqG2u6eqmZqQjXyBlYuglIqVkZaQj5SXppGgm6mgnLWjnaaqtqeuwK2itaStra6qp6awtp+supiRpaOntqKSnqegjqqgjpOfo6uwmqCjsKiwl6OgnKOqn56enZesnpOaopyUkJarmo6ZmZeRl6CSiKGel5WHk42RjpWLgX5li4V1hnR3h4JznGqGjpKTj4l9i5WSkpiUo5SfmaSFiZuKfXSXdHyMgHN8gGpvZl9xamBbYFpuZFBhZlFaOkdHRT4yPT45LyomKykmHSYzMTY2NTg5PT0/QUFDSUpHSktMTVNTVFVaYGBpYWVWUEtBQ0I6OUVNVlteXltaXFtbW1xdXV5fXV5fYGFiYmFhYWBiYmJkYlxbY5eVo6air7GrrqOppqyfp7WqkJCdpLW9sK2to6SbfJ+ks6WmsamXm7imo5SZqpyOhoqJnKKPrp6ilaifoJKWmZuui6qWj6qaqY2aqZCfubakpZmcjYh5gZOLmpOKlJGTkI2Sl6ONn5+onp+4on+DrrWirq50oruhsJ52eJ6nr7iTdKujnol/q39kXGJ2oI6ln4SYfW2Ss52ipq2qo2Wdn5JzeZqXcYGZqZhtf6OoimWcpp2Sl5iWjJOdkYaem5GWhJOIkJCSiYV3ao6GdoVweoV/f2Boh4qTkYpadZSQZ2iPj3N8qJycZnubioV6mWqGjIRweoBrcWZgd3Bsa2lcZmZiY3FUWz5OTk5TRz5AVUQ6MS8eHyY0OjMwNjY3ODw7PkBBQUZIQkdGSUtNU1RVWVxgaGZnV1FKPERHPDhVUltgYWJgXl9fYGFhX1xdX19gYWFiY2RhYmFhZWRjaGReXWablaWioK6vq6uppaitoqatpZKVq7exs6ebrKitmHSNn7GgqKunlJe5oKCPnKSekX+JiJuejKuZopWnoZ2Ol5KdhXatj4mnnKqSmaSKnLuzp6CZmIuIdXeSjZaTiZORkJSMkJShj5yhp5mcsZWBjJu0nLOMko25pZ99p6J5oKy0f42NpZ6Di4aQsaqvjYuXpJt6gYushZyeoaaop4eVhZh3pZt6h5yBl6eDgnuds3qKhqGYmpWYloKRl5eEm5pjeoeRhY+QkouDbXCOh3l/cH+AhH2Fc4WDlJF3lmiSdKCadH2ZhKOgiZh/lY6HhpprkI6HbHl8cnFoZnlwamxrXGVsamd1XV5JVExSQEU2LltVVTcpITA5Pj43NDM0Njg7Oj0+PkBEST9JRUpMR1NYW1lcYmFoZllRSDlFTDs+YVZeYmRlZGBhYWBiYl9dYGFhYmJiY2ZnY2JhYGVkY2djYWFonJeinqWsrKunrKCnsKamqaaZk6/JwLKil6iqt5+RhZ+tnKeioI6Qvp6ajZ+aoJB9ho6Zl4ernKKWoKGRjZOKhYCSp42Ho56llZmeh6C6saeem5KOhXB2kImVkIqUj4+bi4+SoJKYoaSWnquHn7SJtJmtisqGqKyItoWMr4Guq4KojKaYjZ19qI9ze3ecj6eXaJWkebSLoJ2lp5KYwoB/q4iYoXKegJqlfpeFlbOBoX2hlKGQmJeBj5Sci5mSjH2Fk4eOlpKKg21zj4V+eXGGgIN7g3SEgJWAj8Vmf6mHj6NrnoWknYWagY+RiYyacZCVhmp5dnx4aGl2cWhobF5kcG1nbllnR11RTTNFNTdOYmQ3JjM8RUdEOjY0NjU4Ozg+PT0/Qk0/TkpKTENQWl1cV2Jeam1cUUU9S01ASWNYXWNmaGdiYmJiZGNgX2JhYmNjY2VpaWNiYmJlY2FmY2JiaZSWoZ6vpqeopaufpLewqaunmpWgo6WspZimrLmksIGiqZ2mnp2KlLyak42hkp6PeoSWlpGHq5mbm5qihY6Md5qcj5+QiJ+lnJiamYijua2kmZyNjH5ibY+Kk5CNkIyNl4yQkqCPlKCgmaGnfqGnh62dn5Wtj5ybnJCEf6CMqKyFo42pmYyaf6J1gZmUa4Ktdk2reIeNnJGap6aAqat9g6F7eqdqnn+SbGeYhpi3iZ5+bmBkWYOXgI18ZGiLcpl9eZZsXX2Xbl9ScINcX2t4gl9YZIB8g3+WcKeqa4OjbnKlcJ+FoGpnoG1ccI5+Z1pghIFjWFFwd2ZudnRsanBfa3FubGpZaU9dWEY5QTVIRV9sNSxJRFJNTj04NDg1OTs2QDs7PkJQPlFSTE1CSlxdX1ddXmN2YE1EOk1PTlRhXFxmZmlpYmJkYmRkYmFiYGNkY2FjamtkYmRkZ2RiZ2VhY2iXlZyfuJ+po6askaG1u6quo5mYoaKlra6hnrC2pKmToqGgp5yajpm0mpCLnoyVi3WBlJKNiqeVlZmen36ThYWspYebkIuaqpmbm5KJprGnoZWaiImAaW6Ih4uOjomLjZKLkJOjjJSfn5uhpH+TgY+ioJOgdpyUjqeBn6V+haeqgqV4iXyEmn6icHOUiJZ8n415bYabjJmPmqiZjoede4Kic3amZp5+d6RfmHp9lHSibpi3tLp0k4iDgLWoZIHGuHtwlbaMcoCao2NzrKtgfGmds35tfIaBjYKLmHF/o2xyo3SfhYGkYJ2atJdzfZifs3V0XJ6yg2tjcHV4cmlwWWttdHNnXWpeYkxFPUQ2UkJaczM9U0dgSlI9PDM5NTo6NkQ7O0BKUD9VTU9RQEVfX1taWGBgfGRIQzhNV1VXYmFaZWZra2JiZWFkZGBhYmBkY19gY2tuY2NkZGhkYmdmY2hok5aUoreYqpuTn42kt7StrKCaop2kpKavnZyzr62UmaKboaWam5Weq5uLiJJ5i4VxgZaOipCgj5KUnph9kYqOqKGHl46KkqSVnZuNjKmopZ6Pl4eEfmp7hn59j42Ci5CQiY+UoYOXnp+cn56LiXecmKGMn3Ghioaph5qjjZSlqHytjH56oJl6o5N4gXSWiI2cfZafhpuOmJqlhaJkoXyIlpCbjW2eaJuOb5qZe4CLp35zaXSrg5+DdKpolZpdm4V2hZ5nqmuAuGZcqG+BnGCVjF6ndnWHiH6dZ5p1hpOSl46An2+akW+oml6pf3m8bH+qXI6EXbRoXW9ye3hsalxxa3p6ZGBnWGJCUUZPN1dEUm81S1tbX05aREAxNTE8OzdIPzpDSFU+WVJZXT5EYl5WYFFhY31qRUI5TlxeWWRmWGZnbm1iYmVfYWFfX2BgZWJeYmRvcWBkZWVrZWNpaGdraZWbiKmzmqaIY5Sbq7qxsKyeppycqaCfr5yesqmun5ilnKGgmZeWoKOZhomNaomAcnuXiIuWloORlJmQeouElaScipWPho2fk56diZCpo6CajJKKgIBpgYZ4f5aMeoiOjoiPlpt/k6Ken6CTmHJon4mejotwkoyAqYaXnaCknqV7sK2joriXd6Ozo6SAiZR5nXurmX6ijpyaloiXcaF8hY2vtX1rmpGheX6ZtaOkq6iEmXybfZ6bf3SqWl1ve5aLeJ5iTH97eoVjeZdCTJ9Yomlxe45sgIiDmXWbeIaJsbN/gJuTp3eDnm50fpVwmnRrpF6VdkhlZGF0cn9/b2ZhbGl3fGVlYlFfV15VV0BaRlFoRVRXXWJYXklEPUI4QEE6SUY4TEVYQVdSW1dERmJcWmBLYG19ckVCPFVfYlplaVZnaG1vYmZnXmFhXF1eYGhiX2VkdmxdZWdma2RlbGlpa2mTnICvrJiDU16gprO5srKpmqOMnKycnaqVoq2lo6mQoJ+dm5qWmKGdloiHiXeGgm95lYWRm4t8kZOXiHKBiZGhm3ORkIGJmpahnIaPqpyblYuLinyDbISFcYGhi3iFjYiHk5mWfJOjn52iiK2GfbWEjZ2ce6WVeamAlJqOiJ6ae6dod21+mXShc3J8noaZcJODrn2jg6WdmICjb16oZ3WiY2+lYZzTkH17mXhzdGKihpF/o3SkkHZrj7OMYIKYiXOqsqi8f3eDbX6/pqm0XZxte3CWbX9yonFdpGdzpmBopm2b1Jp9hptwe3uYbJx9eJhzbqmkZ2FmenKBhWxoZmVvd3hpYWNTXGdSUmJIWEpVYVhUXGZrXGVRRUNLTUpLQktFOE9AUU5YU1lPU1FgZmVqUmR3eXdJRkVjXmZaaGpUaWhqb2NqZ2BjX11dXV9oYmFpZXxkXmRnZGtkamxmaGxol5p/r6tUW0p+qa+xs6+yo5uZhZmqoKKlj6apoZqri5uZmZSZk5OhmI6IhntwfYRofY+DlZuBd5GOj4lvf4aPk5Jsl5R8ipOUpZeDj6ublJKLhol5g3aIgG6Bn4Z3gJKGiJmjl3qUoqKZn4mzoaK2i3msp6SupW+of5mNhYCZj3qkf6GZhphynoSkrq+Kl4yAjaSNlYKtoJN2tba1yaFzlIuBn2Cel6ltepWHoZx1ooh3oH6TmIuBcE1mo5JwmodzpXt5dGGDgWt9oGtxZF+ccX1zlmh6abO1s8amcph9ep1rnJurdoWbbnh5mGqafHaZc1FFfbNfandseohna2hjdXZxb1dfVFlpUVNpSldNWVRWXmlsb1ZnV01LQUpNS0hLT0JRS1BlY2ptZXRyc395fG51iXt7VFFPbF5pXGtpUmpoaWxnbGZjZV9dXV1eaWJkaWt7X11kaGNqZm9tZWlsZaCbh66lg2Q/k6Gyqq6vtaKikICYqqKjpo2mqJ+ep4SbmJeOl5CQnJOOiIN6anmHZYONf5igeXWPiYyCaYSFkYOMhZ2Neo2Ml6eUhJiqmIyRi4KJeoB9i3hwkKGGeYKVh4mWoJV/lKSmm5WVg2ZueJxsomR7cKV3m5dwZaaAlIl6pHmfloOXc553gYqVl4+5bpGKomJ9mKCUiG1yaaprdaBtb6Zgm2mLkGmWh5uWdaKBfppgjIaNdW+IYmigZZ5+aZt1b2NmiIFtcaJZXlpioWxdiItten1zcWSlbXiiZGenaJlzjJlwonBViZBwoGBmqFWLXlSYbm50bHODbnFpa3l0a3BSWVdXZlpUbUpaUF1JWGlpc2pZa1ZRUkZWXUxYU2JVaWtfeHR7fXB8fHKDe4Bzdo2AhHZeUnJiZ2JwZ1BqaGhsbG5oZGdfXV5dYGpiaml2dF1cY2hjampzbGZrbWOco5eleWRzbIqmraOpsLGmn4yAmKyen6eNo6KcpKOBlpmUjpqQjJiQjop7h3GAiGiLi3yZm3N1iX6Qe2WDhpSKiZWagnyJiJiokoGjrZGGkIuCin6AgI5yaY+mhH2Hk42JmKCPh5OppZyIpniVm36liJaKsZedj4Kulp6kdpOFeKlzpY+Emm6kooyShI2Du259pa+DhoWGk5Wbn3ylenKolaCWZ55+b6xkloqWk3eobaqigYl2iYN4q5GmiGuRsGt2s4ypa4qFbW2fnpGUX32ri6p2fX6KpJ12n3yDpJWdoGqbiHisaJ+ujLZ1eL6NpJNag6eOq2F2c3VyfHVxY2t/b2htVFdbVmFiXWxNXVJeSl5tb3dgW3FZXGBbZ3Vlbm9yYnJ0YHh6fnlyeYNzhH6Be3uMgYOAdmJ4ZGRuc2RSa2dob2xyamZpYV9eXGFrYmxsem9cXGJpYmxqd21nbG5ilaSpm4B/naOWqamdqKatpJmKg5ism5+mipymnquehY2bkIeckYaSjYyNdId7iIRwjYV+mZN0dIZykYNuf4uRh4WUj318g4eZp4+Ap6ePgY6JhZV2goeSbmyLqYCDi5SOiZyfiYyTqaKfjn90k5eIfoF4k66ifoGacI+Fdo6Jgn17cqeMcX59epiWm4SQeXt/foeUlZOKdpCYnaCDe32Ja4yFW3l5cnpxaW5+kopygHWBj5SUcYeEg2WMf2CBgIt3dXOUdW95bm2HbIOGXnVnd45lf4CFjKeZfXR7lWqJiHCBdn2Hd25uaY10enyYeIVcbFh5j2lveHNzcHh4cF1sh29qaFdbYFddZmtkV2NVX1JgcHl5bWt3Z2pra3d9cnN1c2FvdmJ0e4J4dXmCdn+AgIF5i4WDfntuf2xkeW5eVm5naXVreGppaWVcYFpjaWVscXRuWltibGRsbHluaGxvYY6TtqemiqChmqajmKWcq6KhhISYrZKeooqbqJuqmIOCnIx/l5SHjoqJjXKDfI99fo+Ee5iPdHKEcZWFe3yRi4aGkIV5foCJm6WOfKihi4WPkIWVgoaOmHZyhKmGjpKdkImfnoiMmqaen6qDiI2Vmn5+iJasp46RpY93bpuOgXiQbn2ohXF+lXFrcH2CoI2Ak46LaGxcgouLm5qejnOVi4hxdGuCd3SBWXJuh5GCfn+MaV1qZXuGhIqAYGl5e5t7gouCdYGFgWd3ioZqYG9xgHVecYmAiI6lk4Rli42DbneLhHGGj3pxaGlmfYR7lltda2hudlx8enh2b3Rzg2hdbotsbGNaWl9aWW1yXGBiWl9eZnR/fHZwdWRra2t8fnN8eXVkbnVobXx+dnp8e3l6gIF+b4WJhHt9dH55c39pVFxxaWx2cHVna2dkXWFYamhra3FybldbZW5sZ3N5b2hqbWCLiqivoI+ioJmenZeemKijon6Dma6OoJWInaORppWAfJmGfZKZiomHh4tzfoGMdoWLgoSXinJvgHKYhoR+kYOEhoqBe4GFjZyhkYOoooh4jpeJlYqLnJeEg3mtgpGYmpWKnp2IiKCpnqGho4qHk5ucopmVqaCmpJ6RmoWTi3l2jI2Dp35/kpCTlJ2yppuVn5CNsZKXg6SLjJSan4mQm4KIkYprfI53eGWDh5GLfImehIeMkYmJgYWFkHd8enSaoImGip2JhJN+fYqAf3Ruc4SBfXaFhomOo4+ChIyGgoyQjH2HjIuRhHpuhYZ+eplrc2lhdItxfnt3d3B3dYJdXm+HaG5hX1pdXVNpcVZlXV1ibWh2fH10b3Bla2ppgH1ueYByanBxbWeBe3OCgXh/fX+Fem2CjIZ8enh7fXqEeU5kdmpzbnB6ZWtlY2JgW3RlcGdycW1WXmx0bWh5enFnaWtkjIecuJ6WoaCXlJiZlJikoJ58gJqsj5+OhqGdjJ6WfnmVhHyOmoqHhISHbnmBgXOBiH6JlIRta356l4eEg49+gIaEhn2IhY+cn5SIrKCEc4qQhpKRi5yRfY16qoSOk5iXj5yWh4abpJ6hmZyFgpKamZiPmaafpJybj5V+jod0eoWNg6V7fY+QkYaYq6GelJ2QjqmNkICdi4iTmZ6Cj5d+ho6DcHiGcnVgf4SQhnWNmYGDkIOHhX+GhZVueXZ0kqKKjIWahIOMc3+JfHtxcHqGgnp2iI2DkaSOhIKOgIOKiYp3homLjX5yboCCfW9pbG5oXnqAaH59d3Z3dXx4XWBxfm51YWRbXV9SZ25UZlxeYmtpd3t/cmxtZGtqaIF/bHSCbG11cHpwhnluh4B2goB9hXZxgo2Ifnt8fH98gotgaHtqdWlpgmRqY2BpXGR1aG9idW1sVWNxeWVwentzZWptbYuInrWZoKKekpGVmIqan5+fe3mfp5Gci4emlYyYmXp7jYZ9iZKDjYOCg258gHlzgIV+i5J9a2h9gpeJgYiNfH2GhYd9kIORnZ2TiqmdgXGLi4yShqChiYWMfKeRiZCTmJSWk3iMop6fnZWYfoCQmpiSi5qioKKYlZCZfIuCd3+Cjoagf36MjY98mKSiopOakZCmjI6BmpGJkpabfpOSfoeOgXV0gnF3YX6BjoZyi5d9iYxyjX+DhoePaXhyeIyYkY9/ln6HiXKBhnt7b3d6iYN5eI6LgZSjkoqEj3qGhoeEdoOEiYl8aHR+gXp8cm1saF9+c2l9dnZ1fnOBa19hdHdxeGVkWV9fUmtpVmZaYGFoand6gnJnbGRsaGaAgWtufmhvcmx/eYd7bIyBc4GBfoJ0doKNhn98e3+Bfn+PaXKDbnRpYYdobGJfcVZ0b2xuYHhobVdqdHZjdXp7cmJqb3qJjJ6wkaSknI6Pl4+GnKCbnnx3paGOmIGNo4uJmpZ5fIaIf4OKf4mDgX9ygHt0doKFfouReGdjfYaXioKKi3h9gI6EeZeDlpmYjpehnH9wi4GRk4Wlm4iNiYOmlYWTjJeYkpJ3kZ2foJeTlnl+jpeXjZaanKOcl5GTmXeNg4F2g5WNnX6CiY2Mc5ejn6KUmY+PoYyKgpaXg5KVmX6YjXyIjYF2cX5ue2SBfYuFcYiUgJKCbImEgoGKhWZ2b3uFkZiMfJJ4i4d7f4Z7enB9d4iEeIKOh4mWn5SBgop2iIODgnd8g4qHeGJ6en91f3hobWZif2preHR1d35yfWRkYXNudXNuYVphX1ttZVNkWWFhaWt2eodyY2tjbWZofYJsaXVpbnBpgH2Cem6QhnJ/g4N/dHyDjIF/fnqCg358kG12iXN1bWWKbGpiYnVWhGlwbmB4Z2xianZwZnl8enFgcmyGhY+brJamp56NjJeHhp+Tl5l+eKqdi5l7mJ6MjJmQeXyBjH59hHyBg4F4dHp6dH2AhICJi4BkX32LlId/hIZ0fX6LgH6ZhpeWmY6lo5mAc4d7k5KJpo+MjoqSoJGEkpCVl5GLgY6XnpqRj5Byf42Rk4icnJ6ll5aLk5Vxi4uJa4SXj5l6iIiPiW+XnpuklJWLjJ6LhYGRnH+SkpWGmYh7ioqBenF6bHVsfH+Mfm6Gk4SVeHCDhH5/i4Blcmp7f5aXg36NdI+HgniGfHR2fnyEf3uBioKKkqGPeIOBdImHfYB0dYKJhXFjfHZ7cn5wYnBkZXxjb3B3c3l4dHVid2BwbHZucF1cYF5ea15RXlljYWludHyKbGBqZWpjaHeHbmdtaWttaIF9e3hvkIhzgIOFfXSBhol7g316goR9fY5yeYp4eG1sh2toX2lyY4dncW9ld2dubGF6aWp9e3hwYXhti4CYmKmfo6idiYqShoqdi5WZfnivmY2Xfp+UkZeUiHd+fIp9fIB3eICAcHV0fHCGfIGBin98YVx+j5GGgIOCcnqAiHuQk4qTk56Up52Vgn2BfY2KkaOJjoqNmJqNhpKZlJWOiYeLkZuSjoyMbYSQj5GInpmhoJaUiJWPbIaXgmWEmI6TeomEkIpwlpuUo5OSiYuZjIF/kJ59ko6SjJmOe4qFh3RzdmxxbnZ9i3RvhpKPk3F1gXyCg4l9ZnFteXyZk3yDiHSQiYBzh3htfnx/hHuDioaBi5Omi3qGe32KhHd+cXCBh4RmaXp1dnF8Y19xYWt0X3Fre3p6bXNxZnpeb21zbXNYW19gYmxbUVhZZWNncXKAiGddamlnYmdxjW9kamhlaWmBend2b46FdIGCg3x1goiGeIV8eISFen+Jd36Le3tzeIJqa19waHSAa3JvbXJnb2xlfGNugHp2cWx3d4p+opehp6Gmm4aLi4GPnIeTnXaCrJaTjoehjZaUkIB0fHeFeHl/c3N7hmxzcHtuinaAgYdvcFtZfpGNh4B/f3Z1gYGBoYeSi5WemaKWmHmKf4CMiJydio+GkpiWhYmVmpCWi4uLjYubiY2Pgm2Ji5CQiZyWoZuWk4SWhmiCoYFlhJuJkH6Lg4uBd5OZk5+SkYmIlIx+fY6Xe5CMj46aknyKgIJvdnBsbW9xfIZqdISPmYtxd4B1gomDemdzbnWAmY56h4R5k5B5dYdzb4d6hIp4iYSAhoyZoYZ7g3WBin94eG5rgYSDX3R1dHJyeVtfcWFxa19wa358cW5ua253YXBwa3JtWVliYWJvWFFUW2ZnY3VwhYNjXWttZGJma5JuYGdnX2hrgXVyc3CLgHV/g4B5doCLgHiFf3iIhneDhXyGjH97d4p/anFjfGOGfG5xbXRqaG9sdnhgcX95fHR1dICDfqSVmayep5aEjYR/l5SDkKB2jKCVk4aLm42Wjot6cnh1gnByhXRyd4lscG52bYh2g36AbW1VUYGqlIaDd353coR7g6KElIOWlJmdk5t5knuDjJKjmZOOiZWZkoSHl5qMk4qIjY6GnIOPiXtyi4WKjoecmp+alJN+knxmg5qFZoWfh5GEkYKJcYOQl5Ccj4+Mi4+Md3qRkHqOioySlox8iHyAa3Zrb2tsbXt/YXp+kJiCd3uCeIONfXpodGxzhpWKfYeFe5KOcXmDb3aLeYeLeId8f4mOnJuDe3p2gYp8dnBqbIKEe2F5cW9tc3RWX3BjcmJgbW96cmlwZmd1dWlybGJ3ZV1XZmFhc1RRT11nZV55cIl9YF1pcmJiZmaRal9oZVtncH5wbHF0in12fYaAdXZ+jHl7hYF4iINzhoV/jIyDe3qUeGZxa4NgiH1vb2t6YGpudX91X3R9eYd4dHOFfXigj5mwnKWOgot/g5qIgI2fgIyalI+FiJiOj4+Ed3R3dIBxcIV0cHKEcGxqd26Dbn19bXRzUk2C38iS1pJ7cHWFd4WihJV4lpKanZGafJRzhZCeoZKTkImTnJSGf5eWiIyNh5CMh5t+jYB3eox+iYyJnJucmpSSeIx0ZYaQhWuHoYSRiJeDhmOMkZmPlouXjI2KinF6k4h7joiKk5GJeYV7f218ZXJva217elyBepGQgXt+gICHj3t7aXNqc4qOiICFhHyUimx+fm1/iX2KhnuDeH+MkpiYiXx1d4OPeHJtZ3GAhW5rdXBqa3ZuVF9wZXBaYG1zeWhsa2NneXNxcWRgeGFgVmxgX3dRTkxiZ2NdenGKdl1cZXZhYmZljmRhZ2JZaXNzbmtyd4x9dHqGgnV2fotzf4Z/e4l/comIgpCKh3x+mHZlc258ZYh+b3BsgFlsbnl5c2B2enuNd3N3ind5nouarpqfkIKFd4iVfn2LnoiGoJKPhYyYhJOPh4F1eHB5cW+FcG1vf3NlZXlxfW15fWpoa2OkmsHcrvCgcmx2hXeGpYeTb5iSl6KWnIKScoaLopeIjZWKkJ2Wg4GWkIWJj4CQiYiVfYZ6dH+Jd4eEjZuamJiNjnWJdWyEh4l8iaKEkYmchIVei5OYi4+JjouKhIlte5WBfYiFiZGPhnaFfX5rfWR4dmtveXNYiXuSiIZ6f4GBhox/emZyaX+JjYmBgn+KlYRrgHVtho+AjoJ8gXh9jZOQl490cneHjHVzcWd1eoRjdW5xY2t3aFNhcmhsVmBvdXphc2RgaX9xc29bZHNhYlduW155Tk1NZWdiXnd0im5cXWV5X2BlZYVgY2NfWWpza25rc3iMfnR3hIF4d3uJcYOEfX6Je3SLiYiWhot/fpdzaHVxeWyMe250cYFXcXp2eXJkd3mHjGl3gIpyf5yGmKeco5KEfXGMlHh5jJ6FhqGNj3yWjYCaiIR7c3hwdGpwgmxqbX11X2F5d3txdXtnYGR869q1ycPch3JsdIN3i52Lj2uakZGelpSCiXGEiJ+NhIuVioyYlHyNk4iDiJB7j4uFjoB/dXiDhHKIgZOblpSXhYt1hn1ug4CHhpehgpOMnoOJYYOUj4eKhoqNh4GHaXyTf32Dg4mOjYJxhn5/cXdodnNqdXhsWo19koSGfoKFgoWLg3dhcmuHgY6JgH5+kI98bYFrd4SNhJCBeoB7fY6QjpSHbXB5jIV0a3FrcnmCYXVqcF5sd2FSZXNpZlNgcXd1YXBhXWiEcnRrWGhpY2lZbldcdk1LTWZnXmJzdIZrXFxleV9eZGd7YWRfXVlrb2VuanR4in5zdIF+e3Z6iHOFgn1/iHd2ioaPmIGMgnuTdWx3dnl4k3RueHt9WHqGcX9vZ3h3koJkdoaGcImWhZmhmqKKh3Rvkoxxd4+dfouaiYp9oH+EmoCBeHJ0bm9kcn9pZ214eFxgeXt7cXGAaWFnYX/Vto+RpnducXh9cpSSjolsm5CKnZOMh3tph4uYhoGSkYaHmI58jY2BgYmNe46MfYiEenN6g3pwh4CVmY6TkoCHdIKEdIF+iJGbnoaVj59+iGJ/k4eFiYWLjX9/gmd8kIB+f4KMj5B+bYN8g3VsbXd1dHd2bGOOgpCBhn99hoCFiYBwX3FvhHuNioB7fpCHenCDZXmBiIWKgXqEfH2RjI+Rgm1ueYt+dW1uamx8f2RpbGtabndZU2pzaWJRY3N4bWNmXlprhW91Y1xoX2VtYG9VXHBPSU9nZlxob3KAbVpcY3NgW2Nsd2VlXV1abG1jbWp0d4d/cXB/fH10eIZ4hYJ9gIh1eYmBkpV8iIZ2iIBveHl7g5NvbnuBd16Df3SCbWl6dJRzZ3OIfHGRkIOan5ughoh2dpR/bXeUmH+IkYSLjpp9jJp3fXZxb2xqYXV9Z2JqdXpaYHh8emxwfmVjZ2dXnY9fcnSXvsWFeHKWi5GAdJmNh56UjYlzaoiPlYB7lIuBhJuMfIqGfXyIjH6Sh3SHhXZ2fYFxdYaBnpSGlI6CgnF+hnOCeoiWm5aFko2dgIhmfZOCgYaEiolygX1nfYt7eX9/h4uPfWmAfYR2ZnB5eHN4dGxrj4aLgoyAeoOChISAa15wdnp9i4eEe4COf35ygGh3gYaJhIF3gnp+lIqOi3xta3qIfHZ0b2hofnhlXXJjWXF0VFRvc2liTmh1eWdhXl1YcIFwdVplY15rbmFxUFpsU0RUaGJabG9ufHBaW15tY1pjb3dkZ1xdYGtqY2xpc3eCg3Fvfnt/dHWDeoOCfIKGdn6JgZaQeIOKdIGHcnl5fo2Qb297gXFqgnl6fm5tfHaVa2p4hHRrk4yFnpigmYWIb32Mdmp5mY+Ag4uDlpiKeY+Wb3lzcWxqZGB0e2lfZnJ7W2FzfXpmcHphZWSOsbJ3S2NapdvSmHN8k42SeoCXjYaako2Hb2yFkpF5eZOGgISZinyHgHl4iIqDlH9uiYZxc317anmGg6WQhJKMgn5ufYF0gXeEmZeTiZKPlIWIcHqShH6Eg4mDboF4aICFeHJ/f4OKh3xlfH6EdmNxc4BpenFvdpqNh4SMfXh5gYV7g2tcb3xyf4aDiHyEh3qIcYBtb4KFjYKCcYN3f5aKjIJ2bGx9hH52emVoan9yYVp4XFpybk9YcnRnYEtud3ViXlxbWXZ/dHBYZ15na3Jgb09YaVM/WmdfW3FrZ3pyXFtZbGVZZHF5X2hdXmVsaGZraXF3f4hvbH9+gXVwgnqAgX+DgHaBhYiXinGCjXF7hXx6eYSUjHVren9scH51f35vcnx7k3BvgX94Z5GKgqGYnZKDhmeHhHBnepeKf4CFgpqKgnyNjWl4cmxsZl9hb3puX2NweV1kbIN6YHB2X2Rl1eu+izM6PoyPgHN6h4uRj3iFmY6AlI+Nf25thYyLdXyPf4WClYl8g3hudoaFgpV2bYeEa3R7dWV5g4SnjIOOi4J8bX5ydIJ4hJqPio+Rko2Mh397koh5gIWOg2yAcmmAf3htfHyBioN3YXmEgnJkcWl/bnZydYOdjYKBh4B0dn6Ac4FwW2t8c3eIgYl6hn98iHh5cGqGgo6CiHCAd32TiIl9c21qdYCAdXVcaWl5cVlXflRbcmZNW3NyZlxKcnlxXlxbWl12gHZqWmJbaGZvZGpOWGdSPl9mXF52ZmB1cVtZVW9kWmVxeVtoXmBmbWhqa2hweH6ObWqBhH95boB7fYF/gnt2goKMk4VwgItueH2Ae3uIk4mAaXt+anR8coZ7c3d+f4x6eIR+fGuLjIObnZaMgoBtjX5saX+Pjnx+f4OUgn99iohrdXFnaWNbY2dzb2BibHVhaHCJemFzc15iZJugkG5dNluwtnVrgYt/lIh3iJmIdZCMindwbYWChnR5iXiJfZOIen9zZ3WHfXyWbm+FfWh2eW5leomFpIeAhoyJfW19dH1/e4qXhoCTkJiJi4WKfI+KcXx+hnxpfm1rgHt5anp3goeBcl93gn5yZHJodoNudXyGlpOCfoOBcHh6fHV/bVdtfXVziYCFdoZ1gYl6d3Jsh3+Of4NxfXt8kIaHeW1taGyCgXRuXGhmdXJSXHxPXXJdT1xzcGRWS3R5a1haWVphcoF2Yl5dYWdkaWpmT1ppTkFiZVxhd2FcdW5YWFN1Ylplb3NYal9iaGtnbWxpcHd8k2xphIp9fXB/fnyBf4J7d4CAioyEcXuHb3J3g397iY2PhGp+e254eXaLd314gIKHgIN+fnpthIyImKONhYR7dot5a22FipJ5fnyCkoCAfouDcHJwY2ZeWGdfcHBgYWhxZmpviXRhc29bYWNqdnt/v52opcq5coeGdJV+eomVhHWSjodyc3CDeoJzdYZ0iHeUiXl5cWN2hXh/kmhxg3ZmdnVjanyEiJ6Cf36OjXxxfXKCd32PjoJ2lY2UkIiCiHuJimx5eoB1aHtpbH95c2l6doCDfWdgd4d9a2p0aHyBanaBjZKWf3x/f3J9d3x1f2JVdXtxcoeBgXuCcIaJd3dvboGAi318d3x6c4yEgHRncGdriIFxb11oY3RvTGZ3TV9vVlVadG5iUVB1eWNTWFhdYnKDdF1iXGllZWRsZVFccUlEZWJcZHJfXXhoVVdWeF5bZm5pV2xeYWpnZW9uaXB3epNuaYiMeX5ze355goGCfHZ9g4iGg3B3g3Nud4KCfomLlH9xgHx4enqBi3WDeH+BgYKEeoB1bn2Ji5ueiH6Ge3eHfGh1h42Ren+AfIqGhHePgGdwbmBlXFhlWm5zYWFhcW1saIluYHNpWF5jbYB3qdqpyIeIs3OLenGPd32JkYJ7lIuAdXR1fXZ/b3B/boV0lIZ4dWxgeYB4h41kcYJuZ3VtW219gZCTgIB4kpF8d3pshXN9j4qDcpWKkY+IhoZ7f4ZudXd/bWh3ZW18dm1rd3d/f3xgYniGemh1dmN+fGh1h4+Ol312gXdygHt9boBaVnF8b3OBhX1/d2uIhnN4anN+goJ8eXt3enGJf3pyZnJkbIuDbHNaamB2Zklvb01dY1hXVnluYlBTdXdaUVZYXmFzhXBdYWNuZWReb2NVXnNHQ2dgXmdpXVp8Y1JWXXZbW2dsYldrYGFuZmZscGhwdniPdGuOjXZ/d3h9d4GEgXx1fYOIiINvcX91cXV+hYGJjYt7d394hHx9hYd4iHx9gX2EgHt+cnV4i46fjIl7ind1g3pefoeajXmHhHSGh4V3iXtibm1cYltbYVZqdGRhXGhvcGeHcWFxZldcY2t/fMrOh7qia25vjG5zhnN+hoyAe5KFenl0eXR0empsdmOEdpKCdnBnXnyAeIqHZHGAampxY1hte4aciIKBcpeTdn16bYZvf4iKhnCWjpCIhoyEe3l/cnJwfmdocmNueHFqbHJ4fXx5XWR5gHhpdXlngndodYiMj5Z+c4hrcH+AeW59XVdvfGxyfYh6gG1uiYBwdmZ2fn9+gHR6b3lyhXp3cGRxYG2MgWtyV2tfeV1JcGxOWFZfVFV8a2JPVHZzUlJUV15jdoZqXmFra2ZjWm9iWWRxSEFpXWFnX1xWfF5PVmZxWltqaF1YaGFfcmZqaHFncXN2h3lulIp1f3t4fnmDiIB1dH+GhY6DcG97eHd1eoaFhoyGenx/dYt/fYaEhId/fn59hn98eHZ5dpGUn36NfYtudYB6ZISImIZzkotwhYWCeoN1Y25qWWBaXV5UaHNlYVlkcnJngXJha2VXWl9pf3i+rnugt25jdYhpdn1ze4WIe36NgHd4c3duenZlam9gh3WOgXNqYl59dniKgmVwfWdra1pWb3iLo4GFf3CZknB/dnOAbH6Aj4ZylIiNiIWJhX15dXNwaXpham1hbXZqZ2treXd6d1pmfX14ZXJ+boV0ZnaGjYeXgHGMaGx7g3VtdWJbbXpqcnmJeoBldIZ9bXBndH12fX5wemp5eX93dm9ka2Bsin1sbVVqYHhWTGxtUFNQaE5ZfWhiT1V2bE1RVFVfaHeEZ15hcWlnYFdqXV1sakpFa1tjZVdZVnpaTldva1ldbGVcWmVjXnVmbGVxZ3NwdIF4cJmFdn9/eH98hod9dnSCiICVg25zeXt7c3OFhoiIhHmBfXaPf32FiY6EgYN6fouDe3d8dnaZnZh6ioOHanZ+fW2FhZWBco+CcYaCfoKAcGZsZ1hdWlxbVGVxZV9YY3N1aXZwZWVjV1tbaH9wb3KAc4plZnqAa3Z3dHWFhniChXp3dHZuanpwYWhrZ4Z0jYRuZl5ee215iHxnbHdmamRVV3NwjqZ8hHt2lo9ze3F6eGx5eY+DdZd8iIaEh4R9dXFzbWh1XW1pYGx1ZGdnaXpve3JZZ4F2dWhwgHiCdmJ3hYt9loJvjGxufIFxZnNlYGp4ZnB1iHl8YXSDdmlrcHN5b3l4cntlfX19dnVtYmRgbIZ8bGpVaWJyVExrbFBNT3BIXnxmYU5WdWVLT1NYYmx4f2ZeZ3NrZWBXZFhjcl5MTGxYZGJVVFZ0V01Zd2VaX2xhXFtkZV92Z21icGp0b3F+dXSZgXh/gHiAfoaEen12goN+mIVucnR8e3RxhYWPgoB6i3Z0kYB8gZWOgYWEfH6Mhnp+gHZ6o6aKeYmGhWx1fXx2hIONe2+Gc3qFfYKDdW9qaWVWXVtbWlNjb2VbWWF0e2pobWhgYVheWmmAaWxvgGhtYml7emt1dXVwh4J6gX53dm56aGp5al9lbmiBd5CEZ2VYYXZofYZ4bmlvZmZdVVhvaI+odoF6fJCNeHRufW1xdHiNfneUdIaDgIaJdmp0d2hpb1xtZV5uc19nYmp4aHttW22DcnRqb4F+enhid4WFeZGGdIlzcHp/cmNxaFttdWRvcYZ6d2Fyf3BnaXdzcWt3dnN1YoJ5fHV0b2NiYWx8fGtrVWliZ1RMbmlQSFNrRmJ5ZmJNVHJeSk5VWmZteHtmX25yamRdVmFWb29YS1RpWGdeWE5WbFRLXXpgXF9sXV1bYmZgemhsYW9vdm5vd3V6l313gIF5gICHhnp5eoN9gZOEcXN0fnp2dIWIkH6BfZFsc5WBfIOfhX+HfYF/hoKAint2hKuff3qIiIVscYJ7doGAgnVviG59gHSKgGpwbmVkWF9aWlpVYmtnXFpfdYJpXm1sXGFXW1xrgWVydH1qa15teHdpdnhzb4d8fn56dnJsemhpd2ddZHNoeneSgGNiVGNuZYGEdXZmaGlhV1ZZaGSQp25+d4CLjXlwbntld215inp2jnGEfn+Ah25kd3RlaGldbGJecG9baF9sdWV6aF10gG5ya3F7f3Z2Y3WGjHyJiIGAeXN2fnRhcGxYcHFhbm+CenNjcYBsYWx5bmloeXhzcGSEc3h4c29jYGNsc31pa1RoXl9VTHVkUUhWYkhjd2ZiTFRxWUtNWFlpbHd7ZWVucmdjWlheWXhnVUpdZFhpWVlJV2ZQSWN5W15fbVteXWJkXn9pamBvdHltb252g5d5coGAfX+JjIZ+dnaGeIaMfXN1dYJ5enqCjI59f4WJanSXgXuLnX5+hnqAe358holzcY+tjHt8h49+ZnGJe3R+fXdzcIZsfH5tkHpjcHBiZV5lVlpZV2RmbGBdXXSFaFhwbVteWFpcbHtjcXd2bmNcb3V1aXZ3cm+GeX+Bendub3RlaHRlW2d1ZnZ2kXlfXVJlZWmBgXN8YWJpXFRYXmNkkKRoeHSChZB3bG14ZnZse4N5dIdygXl9eYBpZndtYWdhX2pgXnVrWWZdb29iemVbd3xrbm9weHl0dWVzhJOAiYSJe3dwc31yYXhjWW5uYG5vf3pyZXGAZF5tdWhjZnd6cmxtgXNxe3FwYV1kbG58ZWlTZ1laVU56YFJLWllIY3VkYUpVblVLTVpXam1ze2RsbXRjYVlaXGJ4XVRMZF5ZalRXSFlhTkhrd1lfYW5cXF9iY1yFaWhibnh6bW9qdoGQeW2CfoCBkoiEgXd1iXSLhnRydnaBeH19foyPgX+TfnB4loN9mZN5gIF3eX5/c4iEc3CZoXt7f4mVeWV1iXpzeXdsdXB/bHl8cJJzXnBvYWhibFRbWldpZG5mXFxyiWVTcm5bWllXYGx2Y2p1a2tfW291cm51dXVrh31/gXx3b25sZGlwY1trcmR0do5zXFZTY19wfn1wgFxhY15TWmFcZJKeZXJxhYOQc2tpeGtubnl5enGAdn9ze3p7ZGZ2aF5iW2FoXF93aFdiX3BoYXdhW3x2ampybnh0dHVpcYKWhIiAhnZ0a3B8bGZ3V1tpbGFvcH53c2VvfVtgb3BiXmlwfWtqcn1wb3Zpbl9aZGtsemFmU2ZVWFNReF1TUFlSSGR0YmFHVmxRSVBaVmxsbHxlbW9yYVxaWFptcVhTUWdXV2pUVUZaXU9Jc3ZZYGNuY1lhYWFejGpjZW16eWxvaXZ5hntrg32AhJp8goR5fYhuj4ZxbnZ6fXSCgn2Lj4ODl3R4gpSFgZ+JdYGAgXN/gXCHg3Zvopdze4aMh3tmd4tvbnxwZ3lye2xzdnONa150b2JnZmtTXlxWaGJtbVtccYxkTm9tXVZYVWZpc2hjdWVlXltwd29xdnZ6bIh9f32Id49zY2Rrb2Fcbm1jc3iHa1pUVmFidnt7b4RcY15jU1pgWmOWlGNucIKFiXJpZnhtZHJ1cXpreXR1b3t/dl9nc2RbXldiZFlidWVVYGFtZGFxXVx+b2hpc3F0cXV3bG2FlYOKfYZyc2dvfG9xb1JaZWlkb3F+dHJibHVVYnFqWl5uZHtka3R7cHFxaGxeWGNpanheZVNkVVdRVm9YUldUUEhlc2BiRlhrT0lYVFduaWV8aWx5a2JXXVZcdWVUU1hpUlpnVVRJW1pQTnl3W19lbWlaYmFfXo9uYmdreXZub2l2dn9+bIOAfYaYe3+HgYp/a5OIcmdzgHt1gIN+iY5/jJNzfYqRhYefhnt/hoxzgIZzfYJ1bqSMc4KNjHd4bnqNYGV9cWd6dHltbXF3g2dkfG1jZ2dpVGBfVWdgbXBcXm6OaE1pbGBVVlNvZ3NrZnhlZl5acnZuc3x5dG6Je393nHp5a2FlbG1eYG9qZXF5fmdaVVdfa3Z6eW6CXmFdaFZZYFhknIhia3CBhnx2a2l1a1t1cGp5aXVybm98gXNZa25gWV5WYmRYZXFjVF9iaWFibFpgfmtmbHR1b214d2xoho2AinyIbnFmcHtscWxhWF9nZm1xf3JyXmlsU2VwZFVibWF4YW90enRpbmppXldgZmh1XGRVYVZUT1lnU09cT1BJZXBdY0daak5KYExZbWVgeGlvgGVgVV9VXnZcVVNhaE9eY1VUS11aUVp2dl1fZm1oWGNhW16OcWNoanhxc21ndnR5gnOCg3qIj398ioiOem6QinRsc4F0f3+IhYeShJWPen2Mj4iRm4SAe4yEcn+Bc3R3cW6Tk5OTk5OTk5OTkpKSkpKSkpKSkpKSk5OTkpKSkpKSkpKSkpKSkZGRkJCPj4+Pj4+Ojo6Pj46OjY2Njo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo2NjYyMjI2NjY2Njo6Ojo6OjY6OjY2Ojo6Oj4+Pjo2NjY2Oj4+Pj4+PjoKAfnp6fH5+fX1/fn59fn5+fn5+fn+Af4CAgIGAgIB/gIGBgYOHjI6Ojo6NjY2NjY2NjY2NjZKSkpOTkpKSkpKSkpKSkpGRkZGSkpKSkpKSkpKSkpKSkpKSkpGRkZCQkI+Pjo6Ojo6NjY6Ojo2NjY2Njo6Njo6OjY2NjY2Njo6Ojo6Ojo6NjYyMjY2MjIyNjY2Njo6Ojo6NjY2NjY2Njo6Ojo6OjY2NjY2Ojo6Ojo+Ogn99ent8fn59fX5+fn5+fn5+fn5+f4B/gICAgICAgH+BgYCBg4aMjY6NjY2NjY2NjIyMjIyMkpKSkpKSkpKSkpKSkpKSkZKSkpKSk5KSkpKRkZGRkZKSkpGRkZGQkJCQj4+Ojo6OjY2NjY2Njo6Ojo6OjY2NjY2NjY2NjY2Njo6Pj4+Pjo6NjIyMjIyMjIyNjY2NjY2NjY2NjY2NjY2Njo6Ojo2NjY2NjY2NjY6Ojo6Cf3x6fH19fn19fn19fX59fn5+fn5+gH9/gICBgYGAf4CAgICDhouOjo2NjY2NjIyMjIyMjIyTk5OTk5OTk5OSkpKSkZGSkpKSkpKSkpGRkZGRkZGRkJCQkJGRkZCQkJCPj46Pjo6Ojo6Ojo6Ojo6Ojo2NjY2NjY2Oj42MjY2Njo+Pjo6Ojo6MjIyMjIyMjIyMjY2NjY2NjY2NjY2NjY2Njo6NjY2MjIyNjY2Njo6OjoN/fHp8fH1+fH1+fXx9fn59fn5+fn5/f3+BgYGAgICAgYCAgIOGi42NjY2NjIyMjIyMjIyMjJA+LjExMTAvb4eEhISEiF0tMDAwMC1GoaGhoaGhoJqZmpqampqKg4SEhIOFd2VnZmZmaFxDRERERENHZGhnZ2dnZ2tvbm1ubnFKKy4uLi4rSIWDg4ODg4OLjIyMjIyMjY2NjYyMjY2NjY2NjY2NjIyMjIyNjY2NjY2OhX19e3t6fX58fH59fX1+fX1+fn5+fn9/f4GBgYCAgICBgICAgoWKjI2MjIyMjIyMjIyMjIyMji4aHR0dHBpohYKCgoKGUxgdHR0dGTekpKSkpKSjnJycnJycnImBgoKCgoNyXV9fX19hUjQ1NTU1NDlcYF9fX19fZWdnZ2dnajwYHBwcHBg7g4GBgYGAgYqLi4yMjIyMjIyMjIyMjIyMjY2NjY2MjIyMjIyMjY2NjY2GfH16enp8fXt8fn19fX59fX5+fn5/f3+AgYCBgYGAgIGBgYGChYqNjYyMjIyMjIyMjIuLi4uRiYiIiIiIh42QkJCQkJCMh4eHh4eHiZKTkpKSkpKRkZGRkZGRj46Ojo2NjYuJiYmJiYmIhYaFhYWFhoiJiImJiYmKioqKioqJhYODg4ODg4WKioqKioqKi4uLi4uLi4uLjIyLi4yMjIyMjI2NjIyMjIyMjIyMjY2Njoh8f3l7enx8e319fX18fX19fX5+fn9/f4CBgYGBgYGAgYCAgYKFioyMjIyMjIyMjIuLi4uLi5GTk5OTk46RkpGJh46KkJKTkYuQjY6OhYqRkZGRkJCQkJCPj4+Pj4+Ojo6Njo6Ojo2Njo2Njo6Ojo6NjY2Njo6Ojo6NjY2NjY2Ojo6NjY2NjIuLi4uLiouLi4uLi4uLi4uLi4uLjIyMjIyMjIyMjIyMjIyMjIyNjY2NiX59eHh5fH18fX19fHx9fX59fn5+f3+AgICBgYGBgYCBgIGCgoSKjIyMjIyMjIyLi4uLi4qLkJCRkZGPhI6QkIaKj4WNkJCLhYmJiY6IiZCQkJCQkJCQkI+Pj4+Ojo6NjY2NjYyMjIyMjIyMjIyMjIyMjIyMjI2NjIyMjIyMjIyMi4uLi4uLi4uLi4qKiouLi4uLi4uLi4uLi4uLi4yMjIyMjIyMjIyMjIyMjIyMjI2Lfnx3d3h7fXx7fX18fH19fn5+fn5/f4CAgIGBgYGBgIGAgIGChIqMjIyMjIuLi4uLioqKioqQkJCQkIqFjoiOhoaPiY2QkIiFh42JkImMkI+Pj4+Qj5CPj4+Ojo6OjY2MjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMi4uLi4uLi4uLi4uLi4qKioqKi4qKi4qKi4uKioqKi4uLi4uLjIyMjIyMjIyMjIyMjIyMjIt9e3d2d3t8fHx9fX19fX1+fn5/fn9/f3+AgIGAgYGAgYCBgYGEiYyMi4uLi4uLioqKioqKipCQkJCPhYOMjpCOiYyKjpCQiIWIjImPh46Pj4+Pj4+Pj4+Pjo6OjY2NjYyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIuLi4uLi4uLi4qKioqKioqKioqKioqKioqLi4uKioqKiouLi4uLi4yMjIyMjIyMjIyMjIyMin18dnZ4fHx7fH19fX19fn5+fn5+fn9/f4CAgYCBgYGBgIGAgYSJi4yLi4uLi4qKiomJiYmJkJCQkJCMhoyJjoeFjYmOi4yLhIqMiI6Hj4+Pjo+Pj4+Pjo6OjY2NjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyLi4uLi4qKioqKioqKioqKioqKioqKioqKi4uLioqKioqKioqLi4uLi4uLjIyMjIyMi4uMjIyKf313eHp7enp8fHx7fX1+fn5+fn9+fn9/gICAgICBgICAgYCBhIqMi4uLioqKioqJiYmJiYmPj4+Pj5CMjouPjIqPjI6MjY+Kjo2LjYyPj46Ojo6Ojo6Ojo6NjYyMjIyLi4uLi4uLjIyMjIyMjIyMjIyMjIyMjIyMjIyLi4uLioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi4uLi4uLi4uLi4uLjIiAfXh5enp6e318e3t9fn5+fn5/f35+f39/gICAgICAgIGBgIGEiouLioqKioqJiYmJiYmIiI+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Ojo6Ojo6Ojo6Ojo6Ojo2NjYyMjIyLi4uLi4uLi4uLjIyMjIyMjIyMjIyMjIyMjIyMjIuLi4uKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLi4uLioqKi4uLh4B8eHp6eXt8fHt8fH1+fn5+fn9/fn9/f39/gIB/gYGAgIB/gYSJi4qKioqJiYmJiYmJiIiIj4+Pj4+Pj4+Pj46Pj4+Oj4+Ojo6Ojo6Ojo6OjY2NjY2NjY2MjIyMjIuLi4uLi4uLi4uLi4uLi4uLjIyMjIyMjIyMjIyMi4uLi4qKioqKioqKioqKioqKioqKioqKioqKioqKiYmKioqKioqKioqKioqKioqKioqKi4uHgHt5eXh6fHx6e3t9fX5+fn5+f39+f39/f39/f3+BgYCAgH+BhIiLiomJiYmJiYmJiIiIiIiOjo6Ojo6Pj46MjI+Sj5COjo6Ojo6NjY2NjY2NjY2NjIyMjIyMjIuLi4uLioqKioqLi4uLi4uLi4uLi4uMjIyMjIyMjIyLi4uLi4qKioqKioqKioqKiomKiomJiYqKioqKioqJiYmJioqKioqKioqKioqKioqKioqKi4aAe3h5eHp8ent7fH19fn5+fn5/f35/f39+fn9/f4CAgYCAgIGEiIqJiYmJiYmJiIiIiIeHh46Ojo6Ojo6Ojo+MkJOQkI+Ojo6NjY2NjY2NjYyMjIyMjIyMjIuLi4uLi4qKioqKioqKi4uLi4uLi4uLi4uLi4uMjIyLi4uLi4uLioqKioqKioqKiYmJiYmJiYmJiYmKioqKiomJiYmJiYmJiYqKioqKiomJioqKioqKhYB6eHl5fHt6ent8fH1+fn1+fn9/fX9/f35/f39/gICBgICAgYSIiomJiYiIiIiIiIeHh4eHjY2Ojo6Ojo6Pj4+PjoyNkI2NjY2NjY2MjIyMjIyMjIyMi4uLi4uLioqKioqKioqKioqLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4qKioqKioqJiYmJiYmJiYmJiYmJiYmKioqJiYmJiYmJiYmJiYmKioqJiYmJiYmJioqFf3l6eXh7e3p7fHx7fn5+fX5+f39+f35/fn+Af3+AgICBgYCChIeKiYmIiIiIh4eHh4eHh4eNjY2Njo6Oi42Nj5WPiYyPjYyNjYyMjIyMjIyMjIuLi4uLi4uLi4qKioqKioqKioqKiouLi4uLi4uLi4uLi4uLi4uLi4uLi4uKioqJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYR+eXt5ent7ent9fHt+fn59fn1+f35/fn9+f3+AgICAf4CAgICEh4mIiIiHh4eHh4eHh4aGhoyNjY2NjY+MjImKj42IjJGPjY2NjIyMjIyMjIyLi4uLi4uKioqKioqKioqKioqKioqKiouLi4uLi4uLi4uLi4uLi4uLi4uKioqJiomJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJg355e3p8e3p7fX17fH9+fn5+fX5/fn9+f3+Af4CAgH+AgH9/f4OGiIiHh4eHh4aGhoaGhoaGjIyMjIyLiYyKiIeJhoyOjJCMjZGOjIyMi4uLi4uLi4uLi4qKioqKioqKioqKioqKioqKioqKiouLi4uLi4uLi4uLioqKioqKiomJiYmJiYmJiImJiYmJiYmJiYmJiYmJiYmJiYmIiImJiYmJiYmJiYmJiYiIiIiIiYmCf3h7e3t6enx9fHx9f39+fn19fn9/f39/f4F/gIB/gICAgICAg4aIh4eHhoaGhoaGhoaGhoWMjIyMi4yOjoyKioeEiIuKjIuNjo+Li4uLi4uLi4uLi4uLioqKiomJiYmKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiomJiYmJiYiIiIiIiIiIiImJiYmJiYmJiYmJiIiIiIiIiYmIiIiIiIiIiIiIiIiIiIJ/eHp7enp6e3x8fX1+f35+fX1+f39/fn+AgICAf3+Af4CAgYCDhYiHh4aGhoaGhoaFhYWFhYyMjI2NjJCSjI2Ii4mJi4uLi4mLjIqMi4uLi4uLioqLi4qKiomJiYmJiYmJiYqKioqKioqKioqKioqKioqKioqKioqKiYqJioqJiYmJiYmIiIiIiIiIiIiIiImJiYmJiYmJiYmIiIiIiIiIiIiIiIiIiIiIiIiIiIiHgXx4e3x5enp8fHx9fX9/fn59fX9/f39+fn+Af4B/f3+Af4CAgIKEh4eGhoaGhYWFhYWFhYWFjIyNkY+PjZGJjIaJjIuIiImMiYeNjo+NioqKioqKioqKiomJiYmJiYmJiYmJioqKioqKioqKioqKioqJioqKioqKiYmJiYmJiYmJiYmJiYiIiIiIiIiIiIiIiImJiYmJiYmJiIiIiIiIiIiIiIiIiIiHh4eHh4eHh4WAenl9e3t7enx8fHx9f39+fn19f39/f35+f4B/gH9/f4B/gH+AgoSHhoaGhYWFhYWFhYWFhISLi46PjoyLj4iHiYmMjYWFjo2KiYyNi46KioqKiomJiYmJiYmJiYmJiYmJiYmJiYmKioqKioqKiomJiYmJiYmJiYmJiYmJiYmJiYmJiYmIiIiIiIiIiIiHiIiIiIiIiIiIiIiIiIiIiIiHh4eHh4eHh4eHhoaHh4eHhH55eX16enp7fXt8fX5+f35+fX5/f39/fX5/f3+Af39/f39/f4CChIaFhoWFhYWFhYWFhISEhIuLjI6MjI2Lh4mIiomHgoiNjoiKi5GTj4uJiYmJiYmJiYmJiYmIiYmJiYmJiYmJiYmKioqKiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiIiIiIiIiIeHh4eHh4eIiIiIiIiIiIiIh4eHh4eHhoaGh4aGhoaGhoaGh4eDfXp5e3p5enx8e31+fn5/fn59fn9/fn9+fn+AgICAf35/f39/gIKEhoWFhYWFhISEhISEhISEioqOjYmIiIqKh4iHiomIioiIh4qGi5GPiomJiYmJiYiIiIiIiIiIiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmIiIiIiIiIiIiHh4iIh4eHh4eHh4eHh4eHh4eHh4eHh4eHhoaGhoaGhoaGhoaGhoaGh4J8eXl6eXp7e3t7fX5+fn5+fn59gH9/f39/f4CAgH9/fn9/gICAgoSGhYWFhISEhISEhISEhISKi5CPiYmJi4qHh4WHiYuKiYSLjYmOjYmJiYmJiIiIiIiIiIiIiIiIiYmJiYmJiYmJiYmJiYmJiYmJiIiIiImJiYmJiYiIiIiIiIiIiIiIiIeHh4eHh4eHh4eHh4eHh4eHh4eHh4eGhoaGhoaGhoaGhoaGhoaGhoaGgXt4enp4e3x7e3x+fn9+fn5+fX1/f39/f3+Af4B/f39/f3+Af4CChIaFhYSEhISEhISEhISEhI+Qj4+IiYuIhoeIiYuLjIuJioqNio6Oj4iJiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIh4eHh4eHh4eHh4eHh4eHh4aGhoaGhoaGhoaGhoaGhoaGhYWFhYWFhoaAe3h5eXh4enp8fX1+f35+fn59fn9/f39/gIB/gICAf39/gIB/gYKDhoiGiIaDhISEhIODg4ODkpKOioeKi4qLh4uNiYqJi4iHiouIio+SioiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIh4eHh4eHh4eHh4eHh4eGhoaGhoaGhoaGhoaGhoaGhoaGhoaFhYWFhYWGhn96eXh4eHl5eXx9fn5/fn5/fn1+f35/f3+Af39/f4CAgH+AgH+BgoOHjo+PjoiHhIWFhoaFhYWSkI6KiYmIiImKioiIh4aKi4eHiYmOkJGNh4iIiIiIiIiIiIiIiIiIiIiIh4iIiIiIiIiIiIiIiIiIiIiIiIiIh4eHh4eHh4eHh4eHh4eHh4eHh4aGh4eHh4aGhoaGhoaGhoaGhoaGhoaGhoaGhoWFhYWFhYWFhYWGf3l4d3d3eXp5e3x9fn9+f35+fn5+f35+fn+Af4CAgICAf3+Af4GBg4eOjo6Ojo6Mjo2OjY2MjZCQjomHhoiJiYeIiouIiYyJiYaKjY6PkYuIiIiIiIeHh4eIiIiIiIiHh4eHh4iIiIiIiIiIiIiIiIiIiIeHh4eHh4eHh4eHh4eHh4eHh4eHh4aGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaFhYWFhYWFhYWFhYZ+eXd5d3d6eXl8e31/fn5/fn5+fn5+fn9+f4B/fn+Af39/f39+gIGEiI6Ojo6Ojo6Ojo6Ojo2NkJGOi42JjIiIiYaHiYaIioiHi4yLjpCQiIeIiYmJiIeHh4iIiYmIh4eHh4iIiYiIiIiIh4iIiIiHh4eHh4eHh4eHh4eHh4eHh4aGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoWFhoaFhYaGhoWGhYSEhIWFhoaFhIWFhX55d3l2eHl4e3x7fn5+fn5+fn5+fn5+f39+f39+f39/f35/f3+AgYOGjY2Ojo6OjY6NjY6OjY2Qj42Ni46KhoiKhISLiYeDhYSDi4mLj42JjI6QkI+NjYyLjY6Pj42NjI2Nj4+Pjo6MjYyMjY2KiYiHiImHh4aHh4eHh4aGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoeHiYqKiIeJi4yNjo2LiImLi42OjYyJiImMgHl3d3Z6eXh7e3t+fn5+fn5+fn5+fn5/f39+fn5/f4B/f4B/f4CBg4aMjY2NjY2NjY2Qj4+Pj46NjI6KiYuMjIeFiY2Lh4aIh4aHh4uNjo6Pj4+Pjo+Pj4+Pj4+Pj4+Pj4+Ojo+Pj4+Pj4+Pj4+Oj46Oj46Mi4uJh4eHh4aIhoaGhoaGhoaGhoeLiYeHiIiLjY2Mi4yLjY2Ojo+Ojo6Pj46Ojo6Ojo6Ojo6Njo6NjY2AeHZ4eHp4enx6fH5+fn5+fn5+fn5+f39/fn59fn9/f39/gH9/gIGDhoyMjIyMjY+QkpOTk5KSjYyMjIqHioyKh4eJiYWCiouIiYWJjpCNjo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6NjI2NjI2LiYaHh4eHiYqLjY6NjYyNjY6OjY2OjY2NjY2NjY2NjY2NjY2OjIyNj4+OjY2MjIyLi313dXd5enp7e3p+fn5+fn5+f35+fn5/f39+fn1+f39/gICAf3+AgYOFj5KRkJGSk5OTk5OTkpKLi4uLiomMiouLiYuKhoeOjYiIjI6OjIuMjIyNj46Njo6Ojo2NjY2MjY2NjIyMjIyMjIyMjY2NjYyMjI2NjYyMjI2NjIyNjIyMi4yMi4yMjI2MjIyMjIyMjIyMjIyLi4uLi4yNjY6Sk5OSkpSRkJOVlZSTk5COjo6Oe3Z2d3h6ent7e31+fn5+fn5/fn5+fn5/f35+fn9+f39/gIB/f4CBgoSNkpKTkpOSkpOTkZKSkoqJioyJi4qJjIuKioiHiYqKi4mKjY2Mj46Nj5KUlJOUlJOTkpGSkI+Ojo2NjY2Pko+OkZGOjIuKioqLi4qKi5CPjoyMjIqKioqKioqKiouKioqKi4yLi4uMjIyKiouLi46RkpOTk5SUk5STk5SUlJOTk5KSkpKSk5F6dXZ2eHt7e3p6fX5+fn5+fn5+fn5+fX5/fn5+f39/f3+Af39/gIGChIuRkZGRkZKSkpGRkpGRiYmIiIqMiYiJiYuJhoSJhoyKh4ySkpKTk5OUlZWWlZWUk5OUlJSUlJSUlJSVlZWVlZWUlJOTkY+QkZKQjoyRlZWVk5KSjo+QjYqKi4qKi42OjY6RkpCRkpKSkpGRkpKSk5OTk5OTk5OTk5OTkpOSkpKSkpKSkpKSj3h1d3l6e3t7ent9fX19fn5/f35+fX5+fn5+f39/fn9/f4B/f3+AgYKEi5GQkJCSkpKRkZGRkZGIiIiIi4uJg4eLi4yMiIeHjYyNkpSSkpOTlJWWlpaVlZSSkpOTlJSUlJWVlZaXlpaWlpWUk5SUlJSVlJSUk5OVlZWUk5KTk5OTkJGSkZGSk5OTk5KSkpOSkpKSkpKSkpKSkpKSk5OTk5SUk5OSkpOTkpKSkpGRkZGPdnJ3enp7e3t8fX59fX1+fn9+fn9+fn5+fn6Af39/f3+Af3+Af4CBgoSKkJCRkZGRkZCQkJCQkIeHh4eIiIiFi4+KjI6Njo+OkJWUk5OTk5SUlZWVlJSUk5KSk5KTlZSUlZaWlpaWlpaWlpSTk5OTk5OUlJOSk5SVlZSTkpKSkpOTk5OTk5OTk5KSkpKSkpKSkpGSkpGRkZGRkZKTlJSUlJSTkpGRkZGRkZGRkZGRkYx0c3d6ent7e3x9fX1+fX5+f35+fn5+fn5+fn9/f39/fn9/f39/f4GDhIqQkJGRkJCQj4+Pj4+Ph4iKi4yNjYuOj42Mjo6RkpGSk5OSkpKSk5SUlJOSk5OTkpKSkpOTk5OTlJWVlZWUlZWUk5OTk5KSk5OUk5KTlJSUk5KSkpKSk5OTkpKSkpKRkZKSkpKSkpKSkpKSkZKRkZGSkpOTlJSUk5OSkZGRkZGQkJCQkZCRinN0dnp8fHp7fXx9fn59f35/f35+fn9+f31+f39+fn59f39/gH+AgYKDipCQkZGQj5CPjo+Pjo+Oj4+Pj4+Pj4+PkI2OjpCRkpKSkpKRkpKTk5OTkpGSkpKRkZGSk5KTk5OSk5STk5OTlJOSk5OTk5OTk5OSk5OTkpKSkpKSkpKSkpGRkZGSkZCRkZGRkpKRkZGRkpGRkZGRkpKSkpKSkpKSkpKRkJCQkJCQkJCQkJGGc3V2e3x8e3x9fX1+fn1/f35/fn5/gH9+fX5/fX5/fn5/f3+Af3+BgYGKkI+PkI+Pj4+Pj4+Pj4+Oj46Oj4+Pj5CQiI2PkJGRkpKSkpOTk5OTkpKSk5KSkZKRkZKSk4iFk5GRkpKSkZKSkpKSkpKTk5KRkZKTkpGRkpKSkpKRkJCQkJGRkZGQkJGSkZGRkZGSkZGRkZGRkZGSkpKSkpKSkZCRkZCPj4+Pj4+Pj4+PkX9ydHh8fHx7fHx9fX5+fn9+fn5/f3+AgH99fn5+f39+f39/f4CAf4GBgYqPj4+Pjo6Ojo+Pj46Ojo6Ojo+Pj4+Pj4+GjpCQkJCRkZGRkZGRkZGQkJCQkJKCgpKQkZGOdYaRkJCRkZCQkJGRkZGRkZGRkJCQkZGQkJGRkZGRkI+QkJCQkJGRkJCQkJCRkJCQkJCQkZCQkJCQkJCQkZCQkJCPj4+Pjo+Pj46Ojo+Pj4+PeHJ2eXx9fHp9fH19fn5+f35+f39/f4CAf39/fn5/f35/f39/gIB/gYGAio6Ojo6NjY2Ojo6Ojo6NjY2Oj4+Pj4+PjoiQkZCPj4+QkJCQkJCQkI+PkJCPkIhwhJCPkHx0iJCPj4+PkI+PkJCQkJCQj4+Oj4+QkI+PkJCQkJCPjo+QkJCPj4+Pj4+PkJCQkI+PkI+Qj4+PkI+PkJCQkI+OkI+Pj46OjoyMjY2NjIqDiYhzc3Z4fX58eX18fX1+fn5/fX5/fn9/f39/f4B/f39/f4CAgH+AgH+BgYCJjY2Ojo6Ojo6OjY2OjoyNjY6Ojo6Ojo2NiJCRkI6Njo6Ojo6Ojo6Pjo6Ojo6PjHNvio+KcniHj46OjY6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Pj46Oj4+Pj4+Pj4+Pjo+PjY2MjYyNjoyLi4mJiYiFhYSDgoKEgnR5fXp4dXJrZWltb2xmZmdncHNzd3l9fnl6e3x9fX5+fn59fn9/fn9/f39/gIB/f3+AgIGAgIB/f4CBgImNjY2NjY2MjYyMjIyMi4uLjYyMjIyMjIyGj5GRjIyMjIyMjIyMjIyMjIyMjIyNd217j4JzeIaNjY2MjIyNjY2NjYyMjI2MiomKi4uJh4KAh4iEgXt6gH57fXx8fXlzcnJycnV1cG1ramppZ2NkYV9bXF1eWFVXWFlTS0VJSkpLTE1PT0tgdHR3eX19eHp5e3x8fn5+fn1+f39+f35/f4CAgH+AgICBgYCAgICAgIGAf4OEhYWFiIuLjYyMjIuLi4yGiYqKioqKh4OOkJGNiouLi4uMiYmKioqKiouLi4dzbm+Ee3V2gIWDhIeJiYWCg397fHl6e3pzcHFxcW1samdsbWdlZmVmZGNlZGVkZWVlZWRkZGNhYV5dXFlYWFdUUFFSU1JTTU1KSUZESEpHR0hHR0xOSWdzdXh6fXp4d3l8fHx8fn5+fn9/fn9/f39+f4CAgIB/gICBgICAgICBgYFnXmBjYWNucX17ent/fXd8fHZ4ent4eHpvcXt4eXt8e3h3e394dXd0dHZ1dXZ3dGJeZF9ha3FmaGtsbm9tamlpaGhlZWRkZF9gYWJgYF5dWVhaWltdXV9gX2BfX19gYmFeXl5eWVldXF1bV1dWUlRSU1NOUUpISUZFRUhMTEhGR0lLSklNbXJ0eHp7end3eXt6e3x+fn1+f39+f35/f35+gIGAf3+AgIGAgICAgICCgWdYW1pZXFtcY1xaXF5ga3FtcHBvbm5vbmtpbmxrbG9qaWtraWpraWZmZ2dnaGhiXWpsXWVmZ2VjY2JhYmBgXVhbW1dYV1RWUVBUU1NNSkxLTExOTk9UWFhXVVVUUlBQTU1QT05LTE1QUU9MTEpHSUlHSEhJSEhIR0ZGSElKSEhISUlISVZwc3V5ent5dnZ5enp7fH59fX5/f35/fn5+f3+AgX9+f4B/gICAgICAgIGBbFtYVlZWWVlaWVlYVVZoamxubmxra2poaGloZGVkYlxiZl9fYWNfXF9dYF1eWlpqd2xibnJqYllZX1tYV1NOTUtLS0tMSUtNTktKS0tMSktQTEtLRkdHSUlGR0lISUZFSEdGRkVERUVEREVJSUlHSEdIRkZLTUtJSUlIR0hLTU1LTExMVXFzdnl6e3h2d3h3ent8fn1+fn9/f39+f3+AgIGAfn5/f4CAf4CAgIB/gYJoUlRVVlNVV1lZWVdXV1tbYWNfXlxbWFZWWVZSVFJRUVVUU1NUUE1KTU5QUk9NW2tya2FtdHJmUVFTUFBOTk9NSk1MS0xKSktLRklJSkxJR0pISUlFR0dGRkVFSElKR0ZHRkZHR0hKR0dISEpMSkpLSUlISktLSkhKS0pISUtMTU9QUEtUdHN1eHp6eHZ2d3d6enx+fX5+fn5/f35+fn+AgYB/f3+AgYB/gICAgH+AgmlQUlRXVVRWWVdYWFpbVFRTUlBRU1FRUU9OTlBQUU9MTlBPTk5NTEtNTk5QTU5dY29rWGlzdXBTTU9QUFBPTk5PTk5QTk1NS0lISEpJSUlJR0ZHR0dJSkhJSEhJSEhHSEdISElISUxLSklISkpJSkpIR0pMS0pJSUhKSktMTk1NTU9RTFVzcnN3enl3dnR2eHp7fX19fn5+fn9+fn5+gICBgICAf4GBgH+AgICAgICBbE9PTlRZVVVdW1lXV1hOTUpKSUZKT0xKSkdJSk1NS0pMTUpHSUlJSktLRkJGSFViZ2xvcG9tbFpMTE5NTk9NTk9MTk5OUFBPTE1MTk1MTEpJSEdJSElISElJS0xLS0pJS0pJSklJSUlJR0dKSUdJSUpKTk1OTEhJSklJSk1PT01MT1JOWXBwcnd4d3d0c3R3enx+fX5+fn5+fn5+fn9/gICAgICAgYCAf39/gICAgIFvS0pNTlFOTlVXVlZSU0lFQ0VFUkREQT5CP0RAQD5CREFAQURHRkVIRUNGR0hNWmdoZ3JubmhmZGBeXlhMSklKSUlLSkxQTk1MTU1MTU1NTElIREZGR0ZGRklKSUlLSkhMSklKSkpJSEhKS0tIRkdJSklLTU5OSktPTUxLTU1PUE5QT1BgcG9yd3h2dHJzdXd6fX19fn5+fn9+fn1/gICAgICAf4CAgIB/f3+AgICAgXNQUE5OUE1KS1BSUE5RQ0RCQUZRRT1DPT9FSDk6Oz0/PTxBRkA+Ojs+SVpdWlxlbG5qb21tbGtpaGtkU0dFRUZFR0dHR0pHSEpLR0NER0pHQ0RFQUFDR0hHSEdISktKSElMS0lISktLTU5MTUxMSkpMS0lLTU9PUFNRT1BQTk9QUlFNUGdwb3N2dXRycXR4eX19fX1+fn5+f4B+foCAgH9/gIB/f4CAgH+Af4B/gICCdlRVUVFQT0xNUFBOT09BQkFAQkE/Oz48Pj8/Ozg5ODs7OkA6Oz48Ozs7PUtbaW1ub2pvbWtqbG1mUUdFREdJSEM/QEBAQUFCQUE/Pjw9PkFAQD8+P0BFR0dHSUtMTk1OTUxNTUpLTVBVU05MTlFOTk1OTE1NTk9OTk1LS05OTk1OTkxUbnBwc3R0c3Fydnh5fX19fn1+fn5/gH5+gICAgICAgH9/gICAgH9/gH+BgIJ4UVFSVFJTUVNTUVFST0BAPT4/PD8+QEE/PT45Ozo7Ozk5Ojg4Ozw5Nzk7Oj1IY29zbW5sa2xoVUM+Q0ZEQ0NDPzs+PkBDQ0E/Pj9BPkBAQj9APD9CQEFDRUVFSktQT1BPTU1OTExMT1JRUFJOTExPTUtOT0xMTEtMS0tKS0tKTU1LS1xxcXF0c3RycXR4eHl9fn1+fn5+f39/fn5/gIGAgH+Af4CAgICAf4CAf4CAgXxSTU9RUFFSUlRSU1NOPDs8Ozs7P0BBQkA9PDk8PTw6Nzk6Ojk3OTo6Nzg6OTk9SmBzc3BoVD86Oz1AQUA9Ozs+PD08QEJDQT9BQkE9Pj09Oz0/Q0RCQD9BREJFR0pKSkpKTE1MTExNTExOVVNLTE1USVBKSU1KSUpLS0pJSEdKS0lKZnJxc3RzdXJydnl6e31+fn5+fX9+f39/f36AgICAf4CAgICAgIF/gIF/gYCBgFZMTlBQTlJRUFBRUU44PT88PDo9PkFAQT8+PkA/Pj48PT0/QD09PT9DOz09Pjw6Qmx9akA6Oz49Pj9AQEA/P0E/QEBBQEBAPT8/PTw6Oz09PD9AQEJCQUBCREZGRkdGR0dISUtMTExLTEtKS0lKSk1MTEpMS0lISUxMSklJSElLR01tcHF1dXR1c3V4eXl8fX5+fn5+fn5/gH9+gIB/f39/gH+AgYCAgYCBgICBgYCCYUtPT05OT1BPT1BQTzo8Pjw9Oz8+PkFBPz0/Q0NEQT89PkBBP0A7W25APkRFP0BBRF9kOz09Ozo9PkFBPz9AQD9BPz89PD48PTs7PD0+QUA/QD5AQ0NEQkRFSEVFR0hISEdGSUpJSUlJSUhKSkpKTEtKSklJSEhKSktMS0lLSktIVnBwcXNzdHR1eXp7fHx+f35+fn5+f39/f39/f3+Af4CAgICAf4GBgICAgIGBgIJtTFBRTk9QTk5PUFBPPjw8PT4/P0A+QEA/Pz9CRkQ+PDw9QD04Ojptd0g4Ozo9PkE7SGQ9PD08ODo7QD89PD08PEA9PTw8Pjs9PD0+QUBCQUBAQEJEQ0RFRkZGQ0VHSElJSEhJS0tMTUpKSUpNTUpLSktJSEhISEpJSktKSk5MSUlgcHBycnJ0dXZ5e319fH5+fn5+fn5/f35/f36AgIB/gICAgICAgYGAgICAgIGAgnZNTk5NTk5MTE5QT0w+QTw8PT8+QkM/PkFBQUJBQFlSPTw9SUxGRXV2Tjc4ODo7Pj9XakE7PDw6Ojs+Pj49PTc5Pz09Pj89Oz4/QEJDQkJDQ0FCQkFCQkRCQkRCRENGSUdGRkhJSUtNSklKSktMSkpJSkVESUlGRkhISUpKTEpGRmdwb3FxdHZ1d3t8fH18fn59fX1+fn9/foB+fn+AgH+AgICAgICBgYCAgICAgICBek5JS0tMTExFSUxOTTw/PDw9PkBAQUE7QkNCQ0BDcnpKO1x/g396fHdXPD0/PT0+RWh0TDo9Pj89PT5OU1VSTENAQD8+QT07P0JAQkNCQEJDQUNBPT0+QD0/QUFBQENFRUBAQ0JDR0dFRENGRUZGR0VFP0FHR0ZDRkRHSEpHQz5IbG9wcHF0dXZ5fHx8fHx+fn1+fn5+fn5+f36Af3+AgICAgICAgIGAf4CAf4CBgIF+UUhLTU1NS0pLTE9RQD8+PkFBQEBBR0FCRENFQUdyemtig4SDgoOAfV4+QENAQD1Kc3tZOj1BRUJBR2ZobGhhX09DQUE/Pj1AQT4+Pj88PkBER0VAPkBBP0BDRkVDQkNDQEJEREJERUFCPkFCQkFCQEA9QUJDRENDQUNFR0E/PVZwcHFwcnV1d3p8e3t7fX9+fX19fX1+fX5+fn9/foB/f4CAgICAgYCAgIB/gIGAgX5SSEtNTUxLS05OUlVEQkBDQ0FBQkBCQ0BAQUFARW50fYKCgYN+fYR2TUFDRUA/Pll7gF0/Q0VJSUlXampoaWhmZ09ER0VFRURFQ0E/QD4+QkZKSkdFRUdGRkpOTktKSUdHSEtMSUdHQ0REREVEQUJCQ0BDREVEREVERUZDQkFEZW9wcXF0dnV4e3x6fHt9f319fX19fn59f4B/f39/f39+gIGBf4CBgICAgH+AgICAfVJJSUpKSEpKTE9SU0dGRUdIREdIREA+PDs+QEVFaHN9gXx/hH55hXJDREVEQ1d1hoeHflhHSEpNTVNtd3BpbW9xZUtKSUhHR0hIRUNFRUVFRkhKSkZFR0lKTU9PTU1LSktKTU5LSUhHSEhIR0ZFRkZGREZIR0VFSEhGSEdIRlFubnBxcnV2eXt7e3p9fX5/fX19fX1+fn1/f39/fn5/gH+BgYGAgICAgICAf4GBgIB8UEhHSElGR0lKTU5OSkxJSUpLTE5KRkNBQkNGSkdge4B/d3+EhYOEiWxBQVZ0h4mHh4eIg1dITE5NVHJ4eHJub29sTUdJR0ZIRkhFQ0RERkVEREhIQ0NDRklLS0xMTExMTElKS0pKSElJSEpISEdISUhHR0hGRkZISklJSUlIXW9vcXJ0d3d6e3t6e319fn59fX19fX5+fYB/f39+fn+BgIGAgYCAgICAgIB/gYCAgHxNR0ZIRkVGR0dKS0pMTUxLTU5NT0tJSEhKS0tMTE5bfIKCg4OFhoaIhFZshYeGhoaHiIiHfFBMTUpbd3qCcW5tbWxLQ0NCQ0ZGRUJAPj5AQUJAQkQ/Pj9ERkhERkdJS0lKSEhIR0lJSkpJSEZKSkpKSUpJSkpKRklMTEpKS0tmb3BycnR2eHl7e3t8fH1+fn19fX19fn59f39/f35/f4CAgICAgYCAgIGAgICAgICAfU9GRkdGR0hHRUZHR01NTUtMS0lHQ0NDRElLS0xLSlSBg4SEgoKFhoaEgoWFhISGhoaHh4aKdUpKR1tnaGpmaXN6cUM9Ozo8QUFAPjw5OTg8PDw7Pjs4Oz9BQkBBQ0NCQEFBRERCQ0ZISUhISExNTEdJSk1NTk1KSktLSkxNU2xwcXRzc3d5e3t7fH19fn9+fX19fX1+fn5/foB/fn9/gICBgIGAgICAgYCAgIB/f39+UUZFRkdJSUdEQ0VGTk1MSklIRT85Oj5ARUhISklJZYWEhIR/gYKDgoODhIWFhoeIiIiIiYyPZ0VWZGpsYWVseIBlNzk2NDc5Ozw6ODU2Nzc4OTc4NzU4ODs7Oz1AOzk5OT08Pjs8PUFDRUhKTUxMR0lHT1JRUFBOTE1NT1Fdb3BydHN1eHp7e3x8fn5+f359fX59fX5+f39/gH9/f4CAgICAgYCAgICAgICAgIB/f39RR0ZHSEpIRkVGR0hMTEpJSUdDQjU2OjxDQENHSUlohoSEgX6Bg4ODgoOEhomKjIyLi4mKi42KZWJvcGxoa3FteFEzODczNTY4Ojg3NjU2NTY3Njc2Nzo2Nzg4OTo3NTc4OTc5ODY2OjxAR0ZJR0lGRUZPU1JTU1JPUFBSVGVwcXN0dHZ5e3t7fH1+fn5/fn19fX19f39/f3+Afn+AgICAgICBgICAgICAgICAgH9/flJISEhJS0lHSUpJSkpLREVIRUJANjc4OD06PUVDQmWFg4GAgoODg4ODhomLiomJioqKiouKi4uIcXV2cHB1cGpuSzQ4ODU1NzY5OTc3Njc2NTo5Ojo6Ozc5ODk4NzY2OTo5ODg3ODU4OTtBPT4+QkE/QUtMT1FQUU9PT1JXa3FydHR1dnl7e3t9fX5/fn9+fX19fX5/f4B+fn9/f4CAgH9/gICAgICAgICAgICAf39+VEhHSUlMTUtKS0tMSUg/QEFAPDo1Nzk4OTc7Qjo9cYSAgYOEhISEhYaJioqIh4eIiIqKjIuKi46Idnh3dnhybW1KODs8OTo7OTo7Ojo5Ozo5PT09Pjs7PDw6Pjs5Ozs8Ozw7OTo8ODo6Ojo5OTk8Pzw8QUJESUpNS0lLTFdvcnN1c3Z4e3t7fHt9f39+f359fX19fn9/f35/f39/f3+Bf4CAgICAgICAf4CAgH+Af35URkVGSUxOTkxKSk1CPzo7PDo4OTk4OTo6Ojs/Pkh+hIKChIWFhYaIiYiHhoaGiImIiYuMi4qMjY2CdXh7eHJxakhBQUI+QENBQD49Pj5APz8/QD9APT0/Qj5AQT9BPz1AQEA+P0E8Pjw7Ojs6OTs/PTs8PT1BQUNBQkNBWHBxdHR0dnp7e3x9e31/fn9/fn19fX5+f35+fn9+f4B/f4CAgIB/gIGAf39/gICAf39/flJFQ0FHSk5PTElHSzo4Ojs5Ojo8PDo6Oz09P0BCUoKCgoSFhIWEhomJiIiGhoaHiImKi4uLi4yNjIx/eHt6emtXTEhISEVGSEdFQ0FAQkVDQ0FCQ0I/QERIRUNFQ0VEQUZERkRFRkRAQj49QD49P0A+Pz4/Pj8+Pjo7PTxgcXJ0dHV3enp6fX19fn5+f39+fX19fX5/fn5+fn5/gH9/gICAgICAgICAf4CAgIB/f4B+UERAPUNIT01HRkJEOjc6Pjo8Oz4/Pz89QUBDREZXhIKDhIWGhoaIiYmIh4aGhoeJiYqLjI2MjIyMjIx+eXp3WU5TTUtLSUpKSklFRERHSEZEREVGREJISUtHSEdGSEdFS0lLSUpLSkNFQ0NEQkFBQ0JEQ0NERENBPTs9QGhwc3R0d3d5eHt8fH19fn5/f359fX1+fn9+fn59fn+Af3+AgH9/gICAgICAgICAgH+AgH9PQT49P0RMS0FCQkE5ODw+Ozw7PkA/QT5CQkdHSVmEgoOFhYaHiImJiIiHhoaGiIiIiYqMjY2NjYyMjol6enVdUVRPTE5LSktIS0dER0lJSUVGSUZGRUxMTUlKR0dISUpOTU9MTE5LR0ZHR0VFQ0ZFRkZERUhIRkNBP0BMbHB0dXZ4eXl5fHx8fX1+fn9+fn19fX1/f35+fn5+f39/f39/f3+AgICAgIB/gICAgICAf1FBPz4/RUdHPTxAQDg3PDs7PTo+QD4/QENGSUlQX4GDhYSFhoaHiIiIiIiIh4eIiIiJioyNjYyMjIyNjYR5enReUVBOTkxKSUZKSUVLSUdLSklKR0dHS0xOTExISElKTVFOT05MT0tJR0lKSElESUhIRkZHR0lHQ0JBQ1RucHV3d3l6eHl6e3x8fX5+f39+fn1+fX5+fn5/f36Af4B/f3+Af4CAgICAgICAgICAf39/VERBQUJHSEI/OD9AOTo8OD0+Oz1BPj9BREhKTFVxg4SFhISFhoeIiIiIiIeGiIiIiImJjIyLjIyMjIyMjXZ2eG1UU1BNTElHREhLSE1MR0tPTEtKSkxNTE9QTkhJS0xPUVFQUU9PSkhKSkxKS0ZHSEdGRklGRUVCQUJCXG9yd3h5enl5eXp6e3t+fn5/fn59fX19fn9+fn9+f4CAgIB/f39/gICAgICAgICAgH9/f39VRUNFRUdHRUQ7P0E7PTw5QD4+QEJHR0FHS0xQVnmFg4ODhISGiIiIiIiIh4eIiIiIiIqLi4qMjIyMjIyOf2RnbVlYVVFPTUxFRkdNUE9QV1VRUE9RU1JNU1RPTVNMUFNVVlJTUVBMSk1NTUtOSEdKRkVISkVERUVCRUNjcHV5eXp6ent6e3p6fH59fX9+fX19fXx9fn5/gH9/gICAf39/f3+BgYCAf39/gIB/f39/f1RGRkdHR0dIRj5AQj0/PT1CQEJCR1ZORk5QUFRYe4aDhYWEhYeIiIiIiIiIiIiIiIiJiouKioyMjI2PjIyMb2Fjb2RIVVNTUks7O1NUUmB1XVVWVFZZWVJYWFJaZlBVV1pdUlRXUU9NUlFQUFFMTEtISEpIRUZJSUlISWlydnl4eXl6e3t8ent8fXx9f359fX19fX1+f39/f3+AgIB/f39/f4GAgIB/f3+AgH9/f35+U0hKSUhHR0ZFPz9BQUVBQ0dFREVMWFJNVFVWWFp8hoWHhoWGh4iIiIiIiIiIiIiIiIiIlJyMioqMfmGKi4uIc2JqWT5bW1pVUj9AV1ZZXGRgVllicl1dV11aVkVRWVpbWV9UWWdSVlZYVVRWVE9PTUtMSklJTE1LT01Tb3R2eHl4eHp6ent6enx9fH5/fn1+fX19fn1/f39+f4CAgH9/f3+AgICAgH9/gH+Af39+fn5WSkpJSEdFRERCQT9ITUlNUEtJS1BUU1NYWlpcXHiFhIWFhYWGh4eHiIiIiIiIiIiIiImcnaCPiY5nO36MiYuMfXRzW15eXVRVU1dXVltbdYNZVX2QYVxYXV9XSVZdXVtbX1lIWVhZW11YWFlXUlFNUFFNTU9TUVFVUmFzc3Z3d3Z4eHh6e3p8fX19f39+fX59fX1+fn9/gH9/gIB/f3+Af3+AgICAf39/gIB/gHh5fVlOS0lJSEZCREBBOlBRUVdYUFFPUVNUVFhYWVpbboGCg4WEhYaHh4eHh4iIiIiIiIiIiJaanJeJioFuhomIh4SKgGpdXV5bVldVWFRTWFZjloBSZXJYWldfaFBgZltbWFxnYUdPWmhnXVtcXV1XUk9TUFBSVlZWVllabnJ0d3Z2dXh4eHt7fH19fX5/fn59fn18fn9/f3+Af39/gH+AgH9/gICBgYB/gH1yfX9/b3R8XVNQTk1LSkVDP0A7UFBaWltTU1FQUlJSVVNWVFdfdXiAhYSEhYaGhoaHh4eHiIiIh4eIh4ORjomJiIaFiIiGfoF9YFVZW1ZUV1RSUk1QTUxmeltdVFlVVl1aTFRaVVNUXlpYV1dXempYW1xcXlRRUVBJTk9XVlhbWmRwcnZ2dHR2eHl5e3t8fH1+fn99fX1+fX1+f39/gIB/f3+Afn56eHd2c3V7f3+AgHRrf35rcnleW1ZVU1JPS0ZDREFNXoNsVlJTTk9RT1FVUlNSUlVjZHaAgoKDhISEhIWFhISDhoaGhoeIhn6JiYiHhoOHh4h6cHNaTk9RUU1PTEpLRUZJRkM/VGRVf1JRUU5LUVRRTU9ZUk1OUVNWVU1RU1JQT01MSENJSFJUVVpcbHF1dXVzc3d6ent7fH17fX19fn19fX59fn9/f4B/f399fX5+f39/f4B+e3Zzd31+fmR1fWlxdF9kXV5bWVZRTElMSWFsknRQUVNOUVJRUltSU1JRUlVUYXN7fH+AgYKBgX99e3uAf4OChYaHgoaGhoGEgYaFhnZhYFBIQkVFREREQUVRQ0VBQz5DSUdWQEhOTEddaVBIRk5GREVGSUdIQkRIR0lLR0RCQURAT1FNU2RydHZ1c3R1enx7e3t7fHx9fHt+fX19fn5/f3+AgIB/f3x8fX+Af39/f4CBgH12dHt/bWh8Z25xZmllZGJcWFNRUFVSc1dlW09PTkxRU1BVWVNVUVFUUk9WX2tscnZ7e3h5dXJuc3RzeXh9f4OAg4OCgIKAg4GCbE9JQkM9PD5AQUBAP2tRS2BFRkhJRUI/R0xOR01SVUlCRT8+PD08PT0/PT9BQ0NAPz09Qj5KTkdVbnR0dXN0dnh6fHt8fHx9fX19fH59fXx+fn9/f4B/f39/enl3eHd2dnh7foB+fXt4dnx1YXhnbHBqbGppZmBbUVFaXFleSkpQUE5LTFFSUVRVVVdRUVdVUFhbYV1hZ21tbG9rZ2BucmptbHF1e3p9e3h6fHx4d3hlRUJCQz47Q0NCQkRCXF1Pe05PT05LTE1PT1FMS01XTUhHQEI8Ojc3NTk5PTs7Ozg6ODo/PEJIP1xzdHV2dXZ3eXx8fH18fH19fn18fX19fX9/f39/fn9/f314dXZ6e3p3eXh1d3t8eXh1eXdjcWhpcG1ubW1oZl5PUF9dWklIUFJRT01QUU5RUlRWWFNTWVRPWVpcV1ldXl5fZV9dXnF2a15gZ2t3b29sam9ubmxlYllIR0hIQ0JHSUZGRkRNUk9hV1NXUVBTU1JVW09PUVZQTUlDRj86OTY1ODc5Nzk6MzY1Nzk1PEM+ZXNzdnd3eXl7fX18fHt8fX5+fXt9fn19f39/fn5+fn9/e3d1eX18enh8fHx8dHd2d3Z1d2tuaWhxbm9vb2prYFZXXlpYTUtUVFNQUVVPTFJTVFdYVFRZUk1YWVpWWFhWWFldV1dYaHNrXVZhdGthYV9eZGFfXllVUU5PT01JSEpMSklGQ1FQU1pXVFROUVNZU1xlVU9TVFJOS0lIQz9BOTk5ODk3ODg1NzU3ODU5OkducXR3eHp7e3x+fX18e318fn5+en1+fH1/f359fn59f358dHR1e3hycW9vbnR4cXJzeHZ1cWZkZ3JucHBxbm1kXV9fWVdPUFhWVlNUVk9PVVZYWFlTVVRMS1RWVVVVV1BTVFdUVVJdbl9STlpgW1dZO0RWWFRbZkpMUFNST05NTk5OTEpGUVBVWVNUT0pPT1VTVFxWUlVTUk9NTElISEY/Pzw6Nzg3NjU5OTY3Njc1V3Bwc3d5ent8fX59fnx8fXx+fX15fX18fn5+fXx8fX1+fXxydnF4eHJ2dXFxbnBwb3B1dnRuamRkanBwcXJwbmZlZGNcXVJUWldYVVRXVFJYWFlZWVNVT0pHT1BPT01SSk9QT1BOTk9UTE1JUE9TVFUyPVhNSUBRPWNhUVNRUE5QUVBOTk1RTlRSUFNNSU1LT1JQUlJTVFFST0xNS0xMSENCQT06Ojg3NjtCNTU2Njpkb3F0d3h7fHx9fnx9fH19fX18e3h8ent9fX58e3l9fH18e3B1b3d1cHV0b3N2cHFxcHR1dmNqZ2VXaHRycnFuaGlocFZWVFVYVVdVUldWVVpZWFdVUVNGRUFGR0dIRkpESEpJR0VITEhKSEZMTVBNRy9FX1I+Mz8+am9hU1JRQEdUUVBRUFFOUU9RUExKTExPUE5OUFFRTlBPSkxNTUtHRUVDQTs9PDw6PUc2Njc3RG1wdHZ5e3t9fH18enx8fX5+fXt5dnh3eXl8fXp6dn17fHp6b3Fud3JwdnFtcHNwb3Bzc3N0ZmdgaFpXa3JzcmxtbWtuYWVQU1RSU1RPV1ZWWVlWUVFRT0A9Oz0/QUJBQ0BCRURBQEdIR0hFRkhKTUxFR0NPUkM4RU5TXWdUUVNBR1VQT1FRUE1NT01LTEtMTk9PUUxPT01ITEtJS0tMS0dGRkVEPEFBPjtARTs8ODlTcHJ0eHt7e317fHt5fHp7fn58e3V0dXJ2dnp7eHpyfHt8eXltcW94cnF1bm5xcm9vb3Rzc3J1dGtnZ15lam1wa29xbWltY0xPTkxRU0xUVVRXV1VMTEtJPDk4Nzs+QD48PUFAQj0+RUhGQ0VGSUdKSkBGQUFARkhFSk9IUVJiXFJQUk9TT09QTE1PTUxNTU5PTltXS01RT0dJSENJSkxMS0ZGRkU/QkM+PEJHP0I/QWRwc3Z6ent7fHt6end7d3l+fnx7cXN0cHJzd3N4eHN6e3l2d2xxb3ZxdHRsb3Fybm5vc3ZydHNycmtsZW5zaG1ubWxtbGprSUxISE9RSlFTUVRTT0tIQ0Q9OTc3OT9CPjs/QkBAPkBESkVDR0dJR0lFQkI/Pj1DQkFHSURNT2JlUU1PTldLTE5LTE5NTUxMT05TZE5KTFJJSUlFQUhKTE1OSkdJR0JBQkA/RUZFSERLbm92eXl5e3t6fHp3c3h0eHx8eXpucXJtbm9ycnZyc3h8eHZ2bXBtc3B1dGxwcHJvb29ydnVyVlZucWdseYRqbXFybm5qaG9ISkNHTU1KTVBNUE9ISkQ/QT05ODk6P0I/PEFCQUFERUdKRkRISEdHSENEP0I/P0BBPkNFQ0tOUlRMSklNVEZJSUpMSktMSUpNTU9QUlBKR0NMR0NCSklMTU9OSUpJR0NDQ0RISk1MSVlybXd5eHp7enl8dnJwdXJ0eHl2eGpxbmpsbG50dG10dXtzdHhyb21wb3ZzbnBvcnBvcHN0eWpOYGdzanR8eWdvc3FpcWhkcUhLREdISUdKS0lKS0RGQj0+PTo5OjtAQj89QUJDQ0dGSUtKRUlJRkdHQ0M7QUBCPkBAQ0VDSU1QSEhLR0hLREhKTE1ISkxISUpMS01dUkhIRE5GQUNKSk1MUE1LTEpLRkdHSk5OUU5MYm1pdnZ3enl7en1ybWxza3B0dHR1aHBtamlra3RwbnR0eXByeXRvcnFvd3NvcXB0cnBydXR5a05WbXVscXt2aW5vaWt0Z2RvRktDRkZHRUZGR0VHQkNAPjw9OTo6O0BDQD5BQ0VFSUVJSkxGSUlHRkZDQjtBQkM+QENEQ0RHTE5IS05IREhFSUxOTUdJTEdGR0lJTE5LSUdFTkhCRk1LTUxPTU1OTUtJSElPUlJTTlJmZmZyb3N4dnt6fGxoam5la3Fsc3BmbWxoaWtsdG1wdXR3cW94dG90c3J2c3BxcnRzcnR1dXZ2WFZ1dWtvdHJrb3ZsaG1lX3BHSURGRkVDQ0JFQERCPj8+Ojs7PTo8PkNBPkFDREZKRklITEhHR0dGRUNAPUREQj5BQ0NDRUdJSUdNUUpGRkdLTk9LRkhJRkVERUlKSEtJRkhPS0NJTEtPTU9OT09OSkpJTFJVVVNPV2RgYG1ncHJvcnl6Z2VoaGRpbGdxbGZsbWdpa2xzbHB2dXRwbnZyb3Nyc3V0cXNzdXRzdXZ2dnl2dXR3bGp1dW1ydnFsbmxlckxIRUVIQ0JBQkQ9QkE+QT06Oj0/Oj49QEI+QEFER0pGSUZJSEZGR0RDQkFBRkZDQkJDREVFR0dIRkxRTElPSkpNTElHSEVHRURDSUlIS0pHS1JNQk5OTE9OT09NTk9LS0tPVVdWVVNYX15caWFuam5ocnNiZGZlZGhoZm5qZm1taGtrbXJpcXZ0c3Ftdm5vcXJzd3Nyc3R1dnZ2dnd2d3d2dHd1anN1bnV0c3Fya2tyTUdHRkhCQkFERTxBQEBDPDg6PD45Pzw/QkBAQERGSEVIRkZIR0ZGRENFQ0RJRUNGRUJFR0VGR0dFSU1LSVFNSktISElFRkhIRUNJSklLTEtQU05EUVJPUFFOT01OUE1MTVNXVlhYVVhdWl1kYGljamlna19kZWZjZ2dna2dna21rbWxwcmh0dHVyc252b3FwcnR4cXNzdXZ1gpF5dnZ0eHV1d3htb3VvcnN1cXFpbnlNSEdISEJCQkZFPD9CQkQ8Nzs9Pjo+OkBCPj8/QkVGREdERUhFREZDREZFRkpFRUlHQ0dIRkhHRUNGS0pITktMS0hKTEZJSUtIRUtLTE1OT1JUT0hTVFJQUk9RTU5RTk1QV1pWWllWWl1ZWGFgYWBeaGVjYGRlaGdqaGhpZmhubGxubXFwaXV1eHJycHVwcHBydXZwdXN1d3V7fn14dnR3dnZ2eHBsdXBtc3RucHJyeE5ISEhJREJDSEU8QEVCRT04OT4+PTw8QUI8Pz5BQUZDRkNESURERUVGR0dHSUZHS0hESEhHSUdGREhLSUdLSU1LSktMSExLTEtKTktPTk9SVVZPS1VWU1BTUVJMT1FQT1RZWllcWllbXV5dYGNeXGFja2JgZGdocoVoZ2lmam1ucG9uc3JqdHV4cnNzdHJucHF2cnF1cnV1c355jn11dXZ2dnZ4cmh1cWtydGxxdnB0TElLSUtGQkVHRTxAR0NEQDo8PkA/Pj9CQjxAPkJBRkNFRUVJRkZFR0ZHSEZISElLSkZKSEhLSEZGTElIR0pHTExNTExJTUtNTU1QTFBQUVVWV09LVlVUUlNRUkxPUlJRVlpaXV5bXF5eXmBgYWRdY2BlZmBlaGpkc3Nmamdma29ycW9zc25zd3dxdXZ0c21vcnVvcnNwdXJ2cnSBdnV1dXd2dXd0Z3Rya3Fya3J2bnZKS0xKTEdDRURFPEBGRERDOz8/QUBAQENBP0I/QUNIQ0ZGR0lGSkZHRElIR0lISkxISEpKSUxKRkpLSElLSkdLS01NSkpNTE5OTlBLT1BSVVhWTU1UVVRSUVFQTU5UU1JXW11eX11dYF9gYWFgYWNlYmRoYmRpamd2i2xqaWdsb3NxcHFwcHJ5dnJ1dXRzbW1zc21xcm90dXRycHN3dHV1d3Z1dXRlcXNrcHFqcnVud0tMTExNR0RDQUU8P0VFRUM9QUFDQkJDREFDRUFBRUdDSEhJSEdKR0NHSUdISkZJTUhJSk1LTkxHS0lIS0tOUUtSUU1TTUtOTk9QUE9UT1dYWFtOUlBXXFpSV1BOVFVUVFhaX2JiX2RhXmBiXmBlYWFjaW5nY2hoaG54dmxoaW1vc3JwcXJycnZ0c3Vzc3Nua3NxbXByb3R2cnFxdXZ1c3d5d3V0dWNtdGtvcGpxdG93TE5MTExHRUFARD4+REVGQ0BEQkVEREZCQ0VHQ0NJRkNJSkpJSUtHREtKR0lKSUlMSEpKTkxPS0lMSEtMS1pmSmRcS2xTSE9OX25Va3NbcXBid2NTUGF2dWh1Y2F2YFhucWJkdmluemZbbHRgbGpUX3d2aWpnaGZnbG1qbW9qbW5zcnBycnFyc3Jzc3J0cm5sdG9ucHFxdXVxcXN0dnZ1dXl3dXR0YGt0a3Bwa3FycXlMTkpKSkZCP0BCPz1ERUZEQ0RDRUVERkJGRkdERUtGRkpNTEtMTEdHTUlHSktIS0tJS0tOTE1MTExJTE1MW3NiZHBebG1VTU5mc11mZnFsbnRncGlfYVlubmJwcGJrampmb3F0ZXRub1xvdWdwTUpxeXZrYWBrZWVteGxrdmxtcHNycHJxcHFycXJycnRybW1zbm5vcHN1dHFzc3R1dXV0d3h2dXRibXVrcHBscnJxektMSUhHRUQ/QUJAPkNGR0NGQ0ZFRkVEQ0hISERFS0hHTE5OTE1NRkpOSEpLSklMS0pKS0xNTk5NTUpNTU5bcm9vbnBwbGtNUFFsV01pYnRycGFtbnVcWWxQXG5tWnFta29teHh0c2lwXV9ya3FqVXV5eG9jXmtmYmdwb2pqbm9wcnNwcXBxcXJycXFycnRsbXJtbm5vcnV0cXRydHV1dHV1enZ1dGVudWtwb2xzcnJ5SUtHR0VFRUJCQj5AQEZIQ0dESUZFRUJGSUhIRUhMS0dNTU9MTU5HTE1JTEtJSk1JS0pKSk5QT05MTE5OTFxoZHVdbHFXbE5QUW1UWWtea2x2YWxkc1NlY05tWWxcdHBraWx4and1aHBdXnJraFdiY3d8b2NgZ2dhZGl0eGtubnFzc3BxcHFwcnFwcHBydWttcW1tbW9xc3Rxc3J0dnZzd3Z6dnV0aG91bHNvbXNydHZITEZJREVFQ0FCPUJBQ0ZESEdMSEVDQ0hLSUhGSkxMRk5MTFNSTEdMTEhOSkhITkhKSklITk9NTkxKTk1KWnNwcG9xcW1sT1FSbllya2dvb3Fxb210XW5YYXRfbm9wb3Fyb251c3R0altedGN3eHJqbnpoYWFjZmJiaW10dXBzdXZzcXBwcW9xdHt/fn13bGtxbmxtbnByc3F0dHN1dXR4eHl4dHVrb3VtdG9uc3N2c0hLSElCRURFQUE+RERCR0RISU1JRkNGSkxKR0ZLTkxGT0pLV1FLR0tKSk5KSEpMSUtKSEhLTU1NTUlLS0tTa2NbaV5faWNyclpfWWpuX2VlVWtfY1thYVFgbGhdalxuaWlkW29lZHBdWlxrW21xY3BzbGRnY2NnYGBqbXFwbnR5cnVxb3BxbnmFiIeHhoWAdnNua21tb25xcnR0cnR1dXZ5eHhzdW5xdW52cXF1dHdyR0dGSURFREZBQEJGRURHQkhKTEhGREdLTElFRkpPTElQSUxaUEpFSEhLTUlISkpLS0lISUZLS0tMR0hLS0xNTUxKS01OVFtcVFBUTFBPTk9PVlFPTlFOT1FKSk9QUWRxaVRZVlxbXFZZW11YXVxcY2ZhYWViY2ZfX2ZrbmltdHlydHJvcHB0hoeGhoaFhYaHg3pwbW1sa3FzdHRydHZ0dXl4eHV2cXJ1b3ZydHN1dXNHQ0RHRUVBRUNAREhERkdDSUtMSEZDR0tMSUVHSVBLTE9LTFdMSUVFSElKSElLSU1KSEZHR0lHSElFRkxJSkxPTUpQXFdeUFxbYF5NWFlTXFxiXk1YWk1YYVJLWWFaUl9kXGFYW2RkVlZYXFlaWFxWWVxdYl5kYWFfZWhrZ210dHFxdHBxcoGGhoaFhoWFhYaGhoR9cmtpb3Jzc3N0d3l5eHl4d3h0cnhyeHNxcnVydE9CQ0RMTUJEREJFSUVHR0ZLSktIRUVJSktGRUhIUEtNTUpNUklHRUBIRktJS0xKTEpIRkRJRkRGR0VGSkhDSk1MTFVfWWBYYGFbYFRYWVReXlpfUllcUF5cWU5eXF5TWl5jXlpdYGNgWV9jW2BeW1RYV1leXWNiY2FjZWhla3Jwb3Bwbm93hoaFhYaCe4CFhYaGhoaFf3VxcHJyc3Z5eXp5eXh4eHdyeXZ4cnF4dnR2YVJKSk1JRUNCQ0dIRkhHSUtKSklERktLS0VGSUpOS05LSExOR0dFPkdHS0lLTEpLS0lHRElEQ0RFQUZKRUFLTEpPW2NZX15hX1JUUldfYFxdWV5RWVxNVl9XS1FZW1BaX2FhXV5jYWBiYmJjY2VaUVlVVVxZXWNgX19jZGJob21ubGxsbHWFf4SDeXV8hIWFhYaGhYWGhoN9d3JydHh5eXl5f359eXV5dnZybnp3dnhZUUtGREdFQkVHSEZHSEhGR0lHSEdIS0lMRERLS05NTEtISkpISUY/R0dOS0tLTUtLS0lGR0NEQERBSElDQEpLSFBdYVpbZF1fVFFSWF1cXFxfWktXXExSXFlJTV5QT1xfYWNjY2NiXWRjYmRjZlhRVlRRWldaYF9eXmFhX2Rsa21qamxudn51gXp8hIWFhYWFhYaGhYaFhoaGgnpyc3V1e4WHh4eGhYSBfnhwend2eFxSTUNASUZERktKRkZGSEdHSUdGRklMSk5GREtLTU5KTElLSkhIRkJISFFNTEtPTUpLSUdHRUQ/RUNJSUNDSEdFVF1ZXlhfWV9bXVVYWFBdXVFLSlZeWF5bXVVZYVJRX19iYmBgYmJgY2JhZGRiWE9RUFFaUltdXV1dXl9fY2hnbGpubnB7e3x+e4CCg4SFhIWFhYWEhIWDhISHh4FzcneFh4eHh4eHh4eHh4WDgHx4XFNLQ0FIRkRHTVJIQ1FKRUdISEVGS0pNUEVGSUpLTkxMSUtLSUlHREhLUU9NTVBMTEtLSElDREFFRElHQ0NIRkRXVUVcVF1TVl9YT1RVTlpaTUlKVGBhW19YXl5hXU5YYVxgYF9iY2JdYWJXX19UUE9PT1dRXFtbXFxeX2FmZmVsZW9vd3x7gHt9f4CEhISEhISFhYODhYKDgoWFhnpvgYaGhoeHiIeGhoaFhYSFg35KTkZERkZIRElSYlBDVl5JR0dIREZNSlBQRUlJSktOTEtKTEtJSkdFSk5RUU5PT01OTE1IS0FEQkNER0RDQ0ZHQk1IQktLT09OTEZNRkdJSkhHTEtNT1BJTE9QT1NQS09TUlVaWVdZWFhkV09TVFBQTk1OVFJaWFhaXVxgYGRlY2dja2xwc3J5eX97en+EhISFhISEhIKEgH57gYOBfXuFhIaGhoeHhYWFhISEgoGAfUtJRUVIRkdES01dTEdHWExHSEpIR01MUVBIS0tLS05NVU5PSkpLR0dLUFNTTlBPTk9OTkdLRmBFRF9MRWdkRk5cSV5bcm1PTVVtWUxEUGBVa1dnSl1XVV5ETFFVTExTVlFSVFhXVFhVVFxVUGZaaGhkWFJqUlZVVFtcW2BfYWJhYl9maGZua2hyenx9foGEhISEg4ODgX18enJ7gXp7f4KAg4SEhYWBhIWBg4N/fnp7TElFR0ZIRUVLT1NJSkZgU0dKT0pJT01SUExNTExPUlVST09JS05HSE1RW1lPUFBOT09PSUpRf1FJfFlZcnRZUW1IcW5vYVZQcXFzUENrc21xc3BTb19ablhdVlxYVWtoVV1WY1pgWVtfVlZYf2p0dXVeX3ZeV2FbW2ZbXmBhYWFdX2FnbXBsX3B3dHiBgYKDg4J+fX+Adnh6bHZ+dHh9gHx+gIGChHyAg3p/gX9+d3dOSkVITU5CRExMRklLRVFVTEtOSUtSWFdRTk5PTVFUTk9RT0tLTkdNT1NbWlRRUk9QUFBKSFp4XVR4ZWhaU1VSdmd0bHBibmZqUXJPTXdtanJwc3Jxcm9vb4BdZXp1eHFxenF+c31rdX1iUmh8ZXNzb3Jye3xvfnhugHJfYGBiYVpgX2drbmtibGZnbHd+gYCCfXt4d4B0dnppcn5uc3x+d3h7foCDeHyAdXx/fHxzc05MR2BdR0FFTE1HSkpHSU9OTU1KTlZeWVVMUVNOWFpNU1NSTUtPSFFSVFlXV1BUUFBQUUtIZ3hsY3hybVtMTlZ5cHVtdWJvdlBlZUpmdnFtd2+AamZ4d2lXclFoem1panp6fWx4en9vaG9ZdnZqdnVwgF9yZn1pbHh8b15fX2JhWl1iZGdpaWRnYmNkbGxwcHN0c3NzenFyeGJsdWdyeXtycnZ5foFzdXpufH15eHJuTktTdU5DQkZQUEhKS0lLUE5OT01QWmBaV0tUV1BhXlJWUVlSTFBJU1RVWFdXUFVQT05SSktyb3V1cXVxZGlhV25McXBeRmh5V3ZUS2h5fXhgeXtzbmFdbW9jUmdxdW5teXB3bHZ0dHJsbl10fnprbXl8a3RsfGtwdnV4Xl9fYl5cX2RkaWdnZWVeYWJpaWlqa25va3FvbWpwYWNmY293eG9tcHN5f25xcGt7enRyb21MTFtWSEdFR1JQSUxNSktQUVBQUFBXXFlVTVVZVWVYUlJZXVNMTklUVFdXWVdPU05OTlFJUm1IaXdLYGR2d1ZYbE9ubHtzYWpnf3ZVTFdraH1sbWx4X1pwenteYHpzY3JveHFoZH1pcnxeVExsX3Z1a2l1e3ptfnhrfHBcXl5iW15hZGRmZWVlYlpjY2lra3JzcnZnbGloZGdhYWthZ3NybGdtbXJ9a21oa3t0bW1rbU9IS0tISkhIUVBMTk9MS1JSUk9TUldSVlRQV1pWVlRUVGFfUE5NSlRTVFFWVk5OTE1PUEtIUU5QVUxLTFNUU1NUUFZVUVFOUVFYWVJOUFVUWFhYW1tVUlNXW1dYV1pPU1VXWFhSXllXXldVUFlSV1dXV1heWmdyXltbWVxdX2NaX2NjZGZkY2NiWmNiZ2ZlbW5tdWVlZ2NhZl9dZ2BkbGhmZ2tocHpoZ2dqdWpoZ2lsUElLTExNS0pTUU1RUU9MVlVUUFRVWFVaVVFaXVVVVFdVWVdPT0tNVlRRTlVTTk9NTFFQTEpSUUtRTUtMUFJVU1FSU1NJSExOT1FSUVBRVFZSWFdcV1NSUFJUVVVTWlFOU1JYVlRZV1VaVlRSVlRUVVdYVlxZXWBdW1paXFxfY1tdYmNkZmRkZGFZYGFjYWJoaGltYmFkXl9jXFpkXGFtYV5mZWZtc2RpZ2prZWRjZmhQSktMT09MTVNQTlNRUE1YV1VUVVdXV1lVU1xgVldWWVVYUlBQSk5XU1BOVVBOUU5MU1BNT1VTTlJOTU9RVVFVUVJUVU5LTU9RVFRSUlFWV1VZWltZU1VSVFdWVllbVFBUVVhVVVpWWFpVU1JYVlVXW1hZXlxVWF5cXlxbXWBgXVtiYmNnZmVkYlhfYWJeYGdkZmVhXl9dXV5aWl9aX2dgXl1dYmhrYWdmZ2ZkYGJjYk9MTUxRUUxPVE9PU1FPUVtZV1dYWllYWVZdamRWWFlaV1ZTU09KTlZUUE9UUFBQTU1SUlBSWFRRUU9NUFRWT1hSVFVVT05NUVRVVVRUUlRXVltdXFpWVlFRVlhWW1tXUVRWVlZWWVRYWFZTU1lXVlpeWVxeXlVeXF5gXFtfX19eWmJiZGhnZGRiWGFgYl5eZmNjYGJdXFxcXFlaW1hbYVxfXVxfYl9fYmRlYmRfX2BcUE1OTlJRTVJST1NUUU9VXFpaV1tbXFlaW2RxbWhkX1tYVVVXUUxNVlNNTlJPUVJPTFBTUlVaVVNQUE1RWFdSV1NTU1hNT09RVFhWVVVTVVlYW15dW1tWUU5VVlVbW1dSU1dWV1hWVFlbVVRTWlhXXF5aXl9fVGFcYGFdYGJfXGBdY2BjZ2hkZmBZY2BhX19lZF9gYltaXFtcWlpZWFdcWlxbYF5fW15eYWBfYlxZYFtRTk9OVlFQVFFPVFRTUFdcXFxYXlxeVlteanF3eYBjXFtVVVdQTU9WU05RUU9SVFJMUlRUWVtXVU9ST1NYV1RTVVJSWk9QUlJWW1ZXV1NWWlhcXVtbXVZSTVRVVVtcVlJVVlZYWVNVWlxVU1NdWFpdXlxgYF9WYVtjYl1hZF5cYmFiXmNmaWRmXVtkYGFgYGNlX2JeWVpeW1xaWVhZV1daWlphXF1bXVxcWl1gV1tbWlBPT09ZUFVUUlFXUlRQW15eXVtgXGBVXF1oanJ9c2xnW1RXV1FOUlpTUlFUUlRVVEtSV1ZbWVpTT1NRVlZWVE9XUlJaUlRUVFhdV1hZU1hdWF5dWVpdVFROVVZXXltYUlVVWVlZVVdaXFZUV15aXV1gXWJiXVlfW2VhX2RkXl5jY2FdZWZpZGZdXWRhYGFhYmRgYl5YWl9aXFtYWFhXV1tZW2BcW1tcW1hZW15WXlldUU9PUlpQWlRVVlZTVFReXmBeXmJcYFVdXmJreXRsfWtaVFlUUFBTXFRVVFVUVllXTFJbV11bXVJPVVNYV1dUUFhSU1dTVlVVW11YW1lVWl5YX15ZXFlSVlFZWFlfW1pUVVZaWVpXWFpcV1VbXl1eYGFfY2NcXl1dZWFhZmReXmRjYFxnZGhlZGFfZGFgYWBiYl9gXldYXlpcXFpZWVdWXVpdXlpZW1xbV1lcXVZYV11TT1BWWVFdVVZZV1dVWF9fYWFgY11fVV1eYmVldYF6aFdYWVNVU1ZbWFdXVlZXXVhPVV1aXl1cVFJYU1dXVVNUWFJTVlRYV1hdXlhdW1ZdX1hfX1hcVlFYVFlaWmFaXFZXWFtaW1lZWltZV15fYF9jYmFkZFxiXGBmYWRmZF5fZGJhW2ZjaGVjZmBmX19hYWFhYF9eVlVdWVtcW1lbWVhdWltbWFhZW1laWl1fXVRZXVVOU1lWU1xUVldZVlZcYGFiY2BjXl9WW2BkYV96dW9oWVpZVFdUV1taWltZWFlgV1BVXlxgYFxUVFhQVVdWVFZXUlNVV1paW19eWl9cVl9fWV1eWV1VUlhXWVldYlpeV1hbXFtcW1taXFpaX19gYGRiY2RkYmRaYWViZmZlXmFiYGNdYmNpZGNnX2deYWFjYWFgXl9YVFtaWltbWFtYWFxbWltYVllYV1xbW2BdVl1dU09WWVZWWlVYVVhXWF1fYmFkYWRgXllZYWRiYGxmaF5cXFpWV1hZXFxdX1tZW2JWVVheXWFjXFJWWVBXV1dXV1ZTVVRYXFxeYGBdYFxXYV5bXltaXldVWFhbWl9gXF9ZWVxcXV5fXFtdWVtgYV5gZGNkZWVlYlhjZWRoZ2ReY2BgZWNcZWlkZWlfZl1jYmNhYWBfX1tYWVpZWlpYWVhXW1taW1dYWlRZXVxaYFxVXmJOU1dZVldZWFtcWFdZXmBiYWRhZGFdXllhY2JfYWBgXlxcXFdXW1tdXV9fXFpdY1laWF1gY2RfUlhZUFdXWFlZV1ZXVlxdXmBhYF9iXllhXV1eWVxeWVhVVltcYF5dX1taXl1eXmFdW1taXGBiX2JlY2VmZWZiWmRmZmlnYl9jXmFmZFloaGJmaWNlXmJiY2FgYF9dXFpYXFlZWFhaWFdaW1pZV1hVVVtdXV1gYGJieEtYV1tZVlxbXF1aV1xdX2BiZGFiYV1gWGJjYmFjYWJdW1xbWFdcXF9dYF9dW2BkXVxYW2JlY2FSXFpPWVhaW1taV1pZYF1gYmJgYWNfXGJdX11bXl1ZWFRXXV5fYF9gXFteXmBiY1xcWFxeYGJiY2VkZmRlZmRcZWZnaWZjYWJbY2dfXGloYmhpZWRgYmFjYV9gX1xdXFlcWVhXWFlYV1xaWldWWE9YWl1hY2Vmcmt/SllXXFpaX1xbXltYXVteX2FjYmFhXWJbYmRiYGJiYlxbW1pXWGlxYFxgX11cYWNfXllZY2VkYVNfWlJZWFxdXVtaW1tjYGJiY2BiZGFgY15gXF5eXllYVVtfXl1hYmBeW2BhYmZjX11UXWBgY2RkZmVnZWZmZV5lZmhoZ2RkYFplZ11hZ2hjaGhmY2BiYWNiX19fXV1bWltZWFhYVlpWXFtaVlZVTVhXXGhpa2h1eIF2dnZ2dnZ2dnZ2dnd3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d4eHh4eXl5enp6enp6e3p6ent7e3t7e3t7e3t7e3t7e3x7e3t7e3t7e3t7fHx8fHx8fHx8fHx8fHt7e3t8fHx8fHx8fHx8e3t7fHx8fHx7e3t7e3t7fYmIhoqHhIKCgoOCg4OCgoKCgoKCgoKCgoGAgYCBgICAgYCBgYGAfnx8fHx8fHx8fHx8fHx8fHZ2dnZ2dnZ2dnZ3dnd3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3h4eHh5eXl6enp6enp6ent7e3t7e3t7e3t7e3t7e3t7e3t7e3t6e3t7e3t7fHx8fHx8fHx8fHx7e3t7e3t7e3t7e3x7e3t7e3t7fHx8fHt7e3t7e3t8iYmHiYaFgoGCgoKCgoKCgYKCgoKCgoKBgYGAgICAgICAgIGBgYB9fHx8e3x8fHx8fHx8fHx8dnZ2dnZ2dnZ2dnZ3dnd3d3d3d3d3d3d3d3d3d3d3d3d3d3d4eHh4eHh5eXl5eXl5eXl5ent7e3t7e3t6enp6enp6ent7e3t6ent7e3t7e3t8fHx8fHx8fHx8fHx7e3t7e3t7fHx8e3t7e3t7e3t7fHx8fHx7fHt7e3uHiYiJhYSDgYKCgoODgoKCgoKCgoKCgYGBgICAgICAgICAgYKBgH58fHx8fHx8fHx8fHx8fHx2dnV2dnZ2dXZ2d3d3d3d3d3d3d3d3d3h4eHh4eHh4eHh4eHh4eHh4eHl5eXl5eXl5eXl5e3t7e3t7enp6enp6enp7e3t7e3p6e3x7e3x8fXx8fHx8fHx8fHx8fHx8fHx8e3x8fHx8e3t7e3t7e3x8fHx8fHt7e3t7e4aJiYiFhYOBgoKCgoOCgYKCgoKCgoKBgYGAgICAgICAgIGBgYCAfnx8fHx8fHx8fHx9fX18fHaIi4uLi4uLgX19fX19fYSMi4uLi454KSkqKiopKz0/Pj4+Pj5tgH5+f397pdfT09PT1ryGiYmJiYiQzNPS0tLT08S9vr++vsCiioyMjY2OiX9/f39/f359fHx8fHx8fHx8fHx8fHx8fHx7fHx8fHx8fHx8fHt7e3t7hIuHh4aHgoGDg4GCgoKCgoKCgoKCgoGBgYCAgICAgICAgYCBgIB+fHx8fHx8fHx9fXx8fH19doyQj4+Pj5CDfn9/f39+hpCPj4+Pk3kZGhoaGhocMTMzMzMzMmqCf4CAgHut6eTk5OToyomMjIyMipTd5uTk5eTl08zMzMzMz6qNj4+QkJCLf39/f39/f319fXx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx7e3uCjYeIh4eDgoSCgYKCgoKCgoOCgoKCgYGBgICAgICAgICAgICAgH58fHx8fHx8fXx8fH19fX12eHh4eHh4eHd3d3d3d3d4eXl5eXl6d29wcHBwcHBycnJycnJyd3p5eXp6en6Dg4ODg4SBfHx8fHx8fYOEhISEg4OCgoKCgoKCfnx9fX19fX18fX19fX19fX19fX18fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx7e4CMhomHh4SDhIKCgoKDgYKCg4KCgoGBgYGBgYCAf4CAgICAgICAfnx8fHx8fHx8fX19fX19fXZ2dnV1dXl2dnZ6e3h7eHd2d3p3eXl6fnx5eXh4eHh5eXl5enp5eXl5enp6eXh4eXl5eXl7e3t7e3t7eXl5eXl5eXl5eXl5eXp7e3t8fHx8fHx8fHx9fX19fX19fX18fH19fX18fHx8fHx8fHx8fHx8fHx8fHx8fHx8f4uHi4qIhIODgoKCg4KBgoKDgoKCgYGBgYGAgIGAf4CAgH+AgYF+fX18fHx8fHx9fX19fX19d3d3dnZ3fXh3d316eH14d3Z5fXx8e3l8e3h3d3d3eHh4eHh5eXl5eXp6ent7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7fHx8fHx8fHx8fHx8fHx9fX19fX19fX19fX19fX19fX19fHx8fHx8fHx7e3x8fHx8fHx8fHx+iomNjImFg4SEgoKDgoGCgoKCgoKBgYGBgYCAgICAgICAf4CAgH19fXx8fH19fX19fX19fX13d3d3d3p9eHt4fHx3e3h3dnp9fHp7eHx6eHh4eHh4eHh4eHh5eXl6enp6e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3x8fHx8fHx8fHx8fHx8fHx8fX19fXx9fX19fX19fX19fX19fHx8fHx8fHt7fHx8fHx8fHx8fH2Kio2NioWDg4SCgoKCgYGCgoKBgoGBgYKBgIGBgICAgIB/gIGAfXx9fX18fX19fX19fX19fXd3d3d3fX55d3d4e3p7eHd2e317eXt4fHl4eHh4eHh4eHh4eXl5enp6ent7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3x8fHt8fHx8fHx8fHx8fHx8fH19fX18fH18fH18fHx8fX19fX18fHx8fHx8fHx8fHx8fHx8fHx8foqJjo2JhISEg4KCgoKBgYKBgoKCgYGBgoGAgYKAgICAgH+BgIB8fH19fX18fX19fX19fn5+d3d3d3d5fHl7eHx9eXt5enl6fXp5e3l8eHh4eHh4eHh4eXl5eXp6enp7e3t7e3t7e3t7e3t7e3t7e3t7e3x8fHt7fHx7fHx8fHx8fHx8fXx8fX19fX19fXx8fHx8fHx8fXx9fX19fXx8fHx8fHx8fHx8fHx8fHx8fHx/iIeNioeFhoaDg4ODgoGBgoGCgoGBgYGCgYCAgoF/gICAf4CAgHx8fX19fX19fX19fX5+fn53d3d3d3Z4eHl3eXp4enh5eXh7eHl6eXl4eHh5eXh4eHh5eXl5enp7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t8fHx8fHx8fHx9fX19fX19fX19fX19fX18fH18fH19fX19fH19fX19fHx8fHx8fHx8fHx8fX+HiIyIhoeHhIKDhISCgYKBgYKCgoGBgYKBgIGBgYGAgIB/gIGAfHx9fX19fX19fX1+fn5+fnd3d3d3d3d3d3d3eHh4eHh4eHh4eHl5eXl5eXl5eXl5eXl6enp6ent7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7fHx8fHx8fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fHx8fHx8fX19fHx8gIeIi4eHiYaEg4SDg4KBgYGCgoGBgYKCgYGBgIGBgYCAgICBgX97fH19fX19fX19fn5+fn5+d3d3d3d3d3d4eHd4dnl5eHh4eHh5eXl5eXl5eXl5eXl5enp6enp6e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7fHx7fHx8fHx8fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fHx8fH19fXx9fXyBhoqKiYmIhIOFhISCgoGBgYGCgYGCgoGBgYCAgYGAgIGAgIGBf3x8fX19fX1+fn5+fn5+f394eHd4eHh4eHZxZGpeam15eXl4eHl5eXl5eXl5enp6enp6enp6enp7e3t8e3x8fHt7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3x8fHx9fHx8fH19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fIGFiYqJioeEhYWEg4KBgYGBgoKBgYKBgYGBgYCBgYCAgYCBgIF+fH1+fn5+fn5+fn5+fn9/f3h4eHh4eHh5bWRiZV9fXm95eXl5eXl5eXl5eXp6enp6enp6enp6e3t7e3t7fHx8fHx8fHt7e3t7e3t7e3t7e3t7e3t7e3t7e3t7fHx8fHx9fHx8fH19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18goWKiomJhISGhYSDg4KBgYKCgoGBgoGBgYKBgIGBgICAgICBgX58fX5+fn5+fn5+fn9/f39/eHh4eHh4eW5kZWdlZGJeZnh5eXl5enp6enp6enp6enp6enp6e3t7e3t7e3x8fHx8fHt8fHt7e3t7e3t7e3t7e3t7e3t7e3t7fHx8fHx8fHx8fHx9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXyChouJiIqEhYaEg4OEgoGBgYGCgYKCgYGBgYCAgYGBgIB/gIGBf3x8fn5+fn5+fn9/f39/f394eHh4eHl3Z2VkZWZkZWFfaXl6enp6enp6enp6enp6ent7e3t7e3t7e3t7e3t8fHx7e3t7e3t7e3t7e3t7e3t7e3t7e3t7fHt8fHx8fHx8fHx9fX19fX19fX19fX19fXx9fX19fX19fX19fX19fX19fX19fX19fX19fIKGi4eJh4SEhoSDg4WBgYGBgYKCgYGBgYKBgICAgYGAgYCAgYF+fHx/f35/f39/f39/f39/gHl5eXl5eWtlYWJlZWFlZV5ieHdze3p6enp6enp6enp6e3t7e3t7e3t7e3t7fHt7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t8fHx8fHx8fH18fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19g4aLhoiFhYaEgoOEhIKBgYGBgoKBgYKBgYGAgYGBgYGAgIGBgn98fH9/f39/f39/f3+AgICAeXl5eXl0Y2NlZGNmY2doZGZsZF5ze3p6enp6enp6enp6ent7e3t7e3t8fHx7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3x8fHx8fHx8fH19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX1+fn6DhouGhoaGhYODg4SDgYGBgYGCgoGBgYKBgYCAgYGBgYCAgYGBfnx8f39/f39/gICAgICAgIB5eXl6d2RhY2diYmRdW2VfYV1eYGFoeHp6enp6enp6enp6e3t7e3t7fHx8e3x7e3t7e3t7e3t7e3t7e3t7e3t7e3t8fHx8fHx8fHx8fH19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX1+fn5+fn5+foSFi4eGhoaGhIODg4KBgYGBgoKCgYKBgoGAgIGBgYGAgYGBgYF+fX1/gH+AgICAgICAgICAgHl5eW9vYmJiZF5jZ19dYWFgXF9kYlttfHp6enp6enp6enp7e3t7fHx8e3t7e3t7e3t7e3t7e3t7e3t7fHx7e3x7fHx8fHx8fHx8fH19fH19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX5+fn5+fn5+fn5/hIiLhoSHhoaEhIODgoGBgYGCgYGBgYKCgYCAgYGBgYGBgYGBgX5+fYCAgICAgICAgICAgICBeXpwXWJlZGJkXmZnZ2BZYmJhY2VfXF1ze3t6enp7e3t7e3t8fHx8fHx8fHt7e3t7e3t7e3t7e3t7fHx8fHx8e3x8fHx8fHx8fHx8fHx9fX19fX19fX19fX19fX19fX19fX19fX19fX19fn19fn5+fn5+fn5+fn5+foCFjIqEhYaGhYODg4SCgYGBgYKBgYGBgoKCgYCBgYGCgICAgIGBf35+gICAgICAgICAgIGBgYF5emxiZGdjYmdmYWBgZGFiZWRjZGNeXGJ1fHt7e3t7e3t7e3x8fHx7e3x8fHx7e3t7e3t7e3t7e3x8fHx8fHx8fHx8fHx8fHx8fHx8fH19fX19fX19fX19fX19fX19fX19fX19fX1+fn5+fn5+fn5+fn5+fn5+fn9/gYeMiYWGhoeFg4SDgoGBgYGBgYKBgoKCg4KBgIGBgYKBgYGCgoF/f36AgICAgICAgIGBgYGBgXp7dGdnZmZkZGZmYF5fYWNlaGRlXmJkYHR8e3t7e3t7fHx8fHx8fHx8fHt7fHt8fHt7e3t7fHx8fHx8fHx8fHx8fHx8fHx8fHx8fH19fH19fX19fX19fX19fX19fX19fX19fX19fX5+fn5+fn5+fn5+fn9/f39/f3+CiYqIhoaIhoWDhIOCgYGBgYGBgoGBgoKCgoGAgYGBgoKBgYKCgX9/f4GBgYGAgYGBgYGBgYGBenptaGNjZ2ZnZWdmZmdiZWRlYmdbYmVgdnx8e3x8fHx8fHx8fHx8e3t8fHx8e3x8fHt7fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx9fXx9fX19fX19fX19fX19fX19fX19fX19fn5+fn5+fn5+fn5+f39/f39/f39/f4SJioiGiYeFhYSEg4KBgYGBgYGCgYKCgYGBgYGBgYKBgoGBgICBgH9/gYGBgYGBgYGBgYGBgYF7emlpZGNqZmFgZmVjY2NnaWRjYmBiZGJ0fXx8fHx8fHt8fHx8fHx8e3x8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fH19fX19fX19fX19fn5+fn5+fn5+fn5+fn5+fn5/f39+fn9/f39/f39/f3+AhIqMiIeJhoSFhYOCgYGBgYGBgYKBgoGBgYGBgYGBgoKBgYGBgYGAgH+BgYGBgYGBgYGBgYGBgXZzZWRnY2RmZWJlZmdkZmhmZWNgYGNkYHF9fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fXx8fHx8fHx9fX19fX19fX19fX19fn5+fn5+fn5+fn5+fn5/fn5+f35+f39/f39/f3+AgICFioyJiIqIhoaDgoKCgYGBgYGBgoGBgoGBgYGBgIGBgYGBgYGCgX+Af35/foCCgoKCgoKCgoKCc3NnZWRkZWlqaGZnZ2NhZmZlZmdmZWVjdX18fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fX19fX19fH19fX19fX1+fn5+fn5+fn5+fn5+fn5+fn5+f39/f39/f39/f39/gICAgICAgIWLioqJioeHhoSCgoGBgYGBgYKCgYKBgYGBgIGBgoKBgYGBgYGAf4B+dHRzdX1/goCAfn5/gYB0cmdkZWNmaWppZWNlY2BmZGRnZ2JiZWFwfXx8fHx8fHx8fHx8fHx8fHx9fX18fHx8fHx8fHx8fHx8fHx9fX19fX19fX19fX19fX19fX19fX1+fn5+fn5+fn5+fn5+fn9/f39/f39/f39/f39/f39/f4CAgICAgIB/houLiouLh4eHhIOCgYGBgYGBgYKBgoKBgYGBgYKCgYCBgYGBgoCAgH5zc3NzdHV4dXV0dHV2dXVwZmNmZWhoaWdoZ2VmZWJfZGVmY2BiZ3d8fHx8fX19fX18fHx8fH19fX19fX19fXx9fXx8fX19fX19fX19fX19fX19fX19fX19fX19fn5+fn5+fn5+fn5+fn5+fn5+f39/f39/f39/f39/gIB/f3+AgICAgICAgICHjIyIi4qHh4eEhIKBgYGBgYGBgoGCgoGBgICBgoGBgYKBgoKCgYCAfnNzc3Nzc3NzdHR0dHNzdW9jY2FnZWhoZ2pmZGVnZmhmY2JlYl5ieX18e3t8fX19fX18fHx9fX19fX19e3x9fX19fX19fX19fX19fX19fX19fX5+fn5+fn5+fn5+fn5+fn9/fn5+fn5+fn5/f39/f4CAgH9/gICBgICAgICAgYCAf4CAgYGAgIeLi4iNiYiJhoSFgYGBgYGBgYKCgYKCgYGBgIGCgoGBgYKBgoKBgIB+dHNzc3Nzc3Nzc3Nzc3N1cmdlZWRlamhoZ2ZpaGdjZWViZGNoZGd7eHVzc3R2dnl4dnR0dHZ3d3d2dHR0dXV4d3h4d3d6e3x9fXx9fn5+fn5+fn5+fn5+fn5+fn5+fn5/f39/f39/f35/f39/gH9+fHt7fX58eXl2dnZ5fHx6end2d3l7fXt4hIyMioyHh4iEhYSBgYGBgYGBgoGBgoGBgYGAgYKCgYGBgoGBgoGAgH51c3Nzc3Nzc3Nzc3Nzc3VzaGVnaGVrbGhqZ2lqZ2dnZmRkYmVkbnV0dHNzdHNzc3Nzc3Nzc3Nzc3NzdHNzc3Nzc3Nzc3N0dHV1c3V3eHl7fn59fn98f39/f39/f39/f314fH5+fXx4dXZ3eXd4dnRzc3N0dXRzc3Nzc3NzdHNzc3R0c3R0dHODjI2KiYeIhoOGg4GBgYGBgYGBgYGCgYGAgYGDgoKCgYCBgYGBgYCAf3VzdHRzc3Nzc3Nyc3NzdnZpY2hqaGpsZWZpbGhgZmVkY2BkZGZ0dXV1dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHRzdHRzc3Nzc3R2dnV1d3V4fH9+fX9+fHp4dXN0dXV1dHNzc3Nzc3N0dHR0dHR0dHR1dXR0dHV1dHR1dXR1dXV1dIaMjYuIhoeEhIWCgYGBgYGBgYGCgoGAgYCBgYKCgoGBgIGBgYGAgIB/dnNzc3Nzc3Nzc3Nzc3N2dnNnZ2pmaGdmaGhmZGlnY2NnZWVmcHZ1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dHR1dHR0dHR0dHRzdHR0dnV1d3Z0c3R0dHR0dHR0dXV1dXV0dXV1dXV1dXV0dHNzc3N0dHNzdHR0dHR1dXR1iY6MjIqHh4SEhYKBgYGBgYGBgYKCgoGBgICAgoKBgoGBgYGBgYCAgH93c3Nzc3NycnJyc3NzcnZ2dW5kXWNnZWlraGVoZ2dqamlnZXB2dXV1dXV0dHRzdHR0dHR0dHV1dXV1dXV0dHV1dHR1dXV1dXV1dXV1dXR0dHV1dXV1dXV0dHV0dHV1dXV1dXV1dXV1dXV1dXV1dXV0dHNzc3Nzc3N0dHNzc3Nzc3R0dHR0dHWKjoyMiYaGhIeFgoGBgYGBgYGBgoKBgYGBgYGCgYKBgYGBgYKBgYCAf3hzc3Nzc3JycnJyc3NzdnZ3d2liaGhnamtpaGZkZGVmaWhwdXR0dHRzc3JxcnJ0dXV0dHR0dHR0c3NycXFxcXNzdHR0dHR0dHR0dHV0cnJyc3R0dHR0dXV1dXV1dXR0dXR0dHR0dHR0dHR0dHR0c3Nzc3Nzc3Nzc3Nzc3N0dHN0dHR0dHR0dYuOjImGhYWFh4SCgYGBgYGBgYGBgoKCgYGAgIKCgoGBgYGBgYGBgIB/eXNzc3NycXJycnJzc3N3d3d3bGpoZGhpa3Z6a2VmZWhnbXJzdHN0c3JwcHBxcnN1dXR0c3Nzc3JycXBvb29vcHFzc3NycnJyc3R0dHNxcXFyc3RzdHR0dHRzc3Rzc3N0dHR0dHRzdHR0dHR0dHRzdHR0c3NycnFxcnJzc3Nyc3NzdHR0dHN2jZCMh4eFhYSEgoGCgoGBgYGBgYGCgoKBgYGAgYGCgoGBgoKBgYGAf395c3NycnFxcnJycnNzc3d3d3dzc2pnaWloeX99cW51bG5wcXJycnFxcG9wcXFxc3R0c3NycXFxcG9ubm1ubW5ubnBxcnJycnJycnJzcXBvb3BxcnJzc3JxcnJycnJycnJycnJzc3Jzc3Nzc3Nzc3Nzc3Jxb29ubm9vcXJzc3Jyc3NycnNzcnaPj4uHhoWFhYOCgoKBgYGBgYGBgYGBgoGBgYGCgoKBgoGCgYGCgX9/f3hxcHBwcXFycnJyc3Nzd3d2dnd2cnF0c252f352c3hwcHBycnJycXFwcHFxcXJzc3Nzc3FwcXBwb25ubm5ub25vcHBxcXFxcXBwcXJvb25vcHFxcXFxcHBxcXFxcXJycnJycnJycnFxcnFxcnJycnFwb29ubm1ubW5vcXJycnJycnJyc3JxeI+OjYaDg4aEgoOCgoGCgYGBgYKBgYGCgYGBgYKCgoKCgoKBgYKBf4B/d29wb3BxcnJyc3Nzc3J2dnZ2dnZ3dnZ1c3l/fnd3d29wcXFxcXFxcHBwcXJycnNzc3JycHBwcHBwb29vb29vb29wb3Bvb29vcHBxb29vcHBwcHBvcG9wcHFycXFxcnJycnFxcXFxcXFxcHBwcHBxb29ubm5tbW5tbm9wcXFxcXFxcXFxcXB7j42NhoODhYOCgoKCgYKBgYGBgoGCgYGCgoGCg4KBg4KBgYGAgYF/f392bm9wcHBxcXFxcXBwcHZ2dnZ2dXR0c3NxfYB9fX9zb3BxcXFwcHBwcXFwcXFxc3FycnFwbnyCb3Bwb29wcG9vb29vb29vb3BxcXBub3Bwb29wb29wcnJycnFxcXBxcnFwcXFxcHBwcHBwcHBwb29ubm1ubm5ubm9ub3BwcHFxcXFxcXFxcIKRjoqEhIOFhIOCgoGBgoKBgYKBgYGBgYGCgoKCgoKCgYGBgYCBgX9/gHVvb29wcXFxcXBwcHBwdnZ2dXRzcnJycnGAgoCBeXBwcHBvcHBwcHFxcXFxcXCHhnBycW9ymIJucHBwb3BxcHBvb29wb29vcXFwcG9wcG9vb25vcHFxcHBwb3Bvb3BwcHBwcHBwcHBvb29vb29vbm5tbW1ubm5ub25vb3BvcHBwcHBwcHBwiZCMiISDhIaDg4KCgYGCgoKCgYGBgYCAgYGBgoKBgYGBgYGBgIGBgH+AdG5vb3BxcXFwcG9vcG92dnVzcnFxcXFxcICDg39ycHBwcHBwcHBwcHFxcHBxcX2hgnByb4uefG5wcHFwcHBwcHBwcHBvcHBxcXBwcHFxb29vbm9wcHBvb29vcHBvb3BwcHBwcHBwcHBvb29vbm5ubm5ubW5ubm1ubm9wcG9vb29vb3BzcXWPj4uJg4KFh4ODgoKBgoGCgoKBgYKBgYGBgYGBgYGBgYCAgYGAgYGAf4B0b29vbm9vb29vb29vb3Z1dHNxcXFxcXJygIKCgXRxcXFxcXFxcXFxcXFxcXFxdZ2hd3F3n5x9b3FxcXFwcHBwcHFxcXBxcHBwcXBwcHBwcHBwcHBwcHBwcHFxcXBxcXBwcHFwcHFxcXFxcXFxcXJxcnFwcnRycnR0dHR1dnRzdHR0dXd3gpCPi4iDgoaHhISCg4GBgYKCgoGBgoGBgYKBgYGBgYGAgICBgYCBgYB/gHVvb29vb29vb25vb29vdXRzcnJycnJycnKDg4OCdnFycnFxcXJxcnJxcXJycnJxmKiQb4KjnX5wcXFycXFxcXFxcXFxcXFwcXFxcXFxcnNzcnJyc3V1dHR0dHR0dHV2d3d3d3d3eHh4eHd3eHh3d3Z3dnV2dnZ2d3h6e3x7e3t6enp6enyGkI2LiIODiIeHhYODgoGCgYKBgYGBgYKCgoGBgYGAgYCAgYGAgIGBgH+Ad3FxcXFxcG5ucG9wcG92dHV1c3Nzc3NzdYiDgYN5cnNzcnJyc3Jyc3Nzc3JzdHKTqaR5iKCdfHJzc3Nyc3N0dHV1dXV1dHV3eHd3d3d4eHh3eHh4eXl5eXl4eHl5eXp6e3t7e3t6enp5eXh3d3d1dnV2dnd5enp7fn5+fX1+fn5/gH5+gIyQi4qHg4WIi4iEg4SDgYGCgYGBgoGBgoKCgoKAgYGBgYCBgYGAgIGAf4B8enp5eXx5eHh2dXZ2dHl2d3h3d3Z3dnZ6fnx+fXx2dnd3dnV4enh4eHh4d3h5eZ+0qaSoqJd9e3l5eXh4eXl6enl5eXh4enp5eXh4eHh3dnd3eHh3eHh5eXp7e3p8fH1+fX9/f359e3t7e3p5enl5e3t/foB/fn5/fn19fX5+f35+fn6AjpCNioeEhoqLiIaGhIOBgoKBgYGCgYGCgoKCgoCBgoKBgYGBgYCBgIF/f4B/fn19fX9/f318e3t7eXh4eHh5eXl4eXh5eXl4enp6enp6e3t7fH1+fHt8e3uJr6ahtauso357enp4eXh4ent6enp5eXp8fHt6enx8fHp6ent9fHx+fn+AgoGAgYKAgH9/gYGBgIB/f35+fn5/fX1+f4CAf35+f39+fn9/f39/gH+Af4OQjoyHhoWIi4yIh4aFg4GCgYGBgYKBgoKCgoKBgYKDgoGBgYGBgIGBgIB/goOCgoGBgX99f39/f4F6enh4d3h4eHh5eHh5enp5e358enx9fXt8fX19fX19fZillqGyoJmnk32Af319fYCDgoCAf318fXx9fXt9fXx8fH19fX1+gYGChISDgoB/gYGBgH9/f4B/f39/f39+fn9/f39/f35+f3+Af39/gICAf4CAgICAhJCPi4eGhoiLi4mKhYaDgoKCgYGBgoGCgYKBgYGBgoOCgYCAgYGAgIGBgH+ChIKCgICAgH9+fn+AgH9/fn18fX19fYB/fX+Af35/gH9/fn9/gICBgICBgIGBnJyOoK+gn6KfgICBgH5+f39+f4B/fn5+f39/gYB/f4CBgYCAgYOEgoGCgoGCgH+AgYCBgYGAgH+BgICAf39/gICAgYGBgIGBgYCAgICBgoGBgYCAgYGFjo6MiYeHiYyLi4qGhoOCgoKBgYGCgoOCgoKBgIGBgYKCgICBgYCAgYGAf4KFg4KBgYCAf39+fn+AfX5+fn19fX5/fn9/f35+fn+AgYCAgICAfn9/gICBgYCXmo6YsaGYlpyFfH5+foB+fn5/f35/gICBgoKDg4KCg4KBgYKDg4OCgYGBgYKBgoKCgYKBgoGBgYGBgoKCgYGCgYKCgoGBgoKBgYKCgoKCgYGBgoKCgoaPkY+KiImKjY6MiYaFgoKCgoKBgYKCg4KCgoGBgYGBgYF/gIGBgYCBgIF/gYWEg4KCgoGCgYCAgIB8fHx7fH18fH9+fn9+fn5+f35+f39/f39/gH5+gIF+fp+rpZakm5uWoJ+Gf359f4B/gIF/f39/f3+BgYGCgoCAgYKDg4SDg4ODgoKCgoKCgoKCgoKCgoGCgoKDg4OCg4ODgoKCgYKCgoODg4ODgoKCgoODg4KCh5KTkIqKiouPj42Lh4SCgoKCgYGBgoKDgoKBgYGBgIGBgICAgYGBgIGBgYCAg4SDg4OEg4ODgoKCgXx9fHx9gn1+f4GCiIGCgoSCgYGDg4GBgYKDgoODho2fsqiioJidnaaoraigmZCHgYCAgYCAgH9/f3+AgICAgH9/gYODhYSEg4SDgoKCg4OCgoOCgoODg4ODg4SDg4KEhYWDg4SEgoKDhIOCg4ODg4OCgoODgoCKlJOPioqMj5GPjYuGg4KCgoKBgYGBgoOCgYGBgIGBgoGBgICBgYGAgYCAgH+BgoODg4SEhIOCgoKCfXx8fn6AgYOAg4OChIaFhoaFhIWFg4ODg4ODho2grbGmm5qgm56cnJ2hpKOdlIeDg4KDg4ODgoGAgIKCgYOCgYKCg4OEhYWEg4OChISEhIOEhISDg4OEg4ODg4OEg4SDhIWEhISDg4ODgoKCgoKCgoKBgYKCgo+UlI+Njo6RkY6KiISCgoKCgYGBgYGCg4GBgIGBgYGBgYCBgIGBgYCBgICAgIKChIKChIOCg4ODgoJ9fX2AgH+AgoGDg4ODhIaEhIOEhYWDg4GBg4OBg4uXmZeWmKCbnZ2dmZqXkImGhoeGhoeHhoaEgoGCg4SDg4ODg4ODhISFhYWDhISFhISEg4KBg4OCg4SEg4KCg4SCg4ODg4OCgoKCgoKCg4ODhIOFhYWFhoaIk5OTkI+Pj5KRjIqIgoKCgoKBgYGBgYKDgoKBgIGBgYGBgICAgYGBgICAgICAhISEgoKCgoGBgoKBgX+AgYOCgICAf4CCgoGDg4KCgYODg4SDg4GDhYSCgYGGjpSTl5qcnJuUj4mHiIiHh4eIiIiFhIOBgIGBgoKCg4GCg4SEhYSDg4OEg4OEhIOBgYGCg4OEhISDg4ODg4OEhIODgoSDg4ODhIWFhoeHh4eIiIiJiY6Tk5KOj46Rko+LiYeCgoKCgoKBgYGBgoKCgoGBgIGBgYGAgICBgYGAgIGAgICDg4KCgYKCgYGAf4CBhYWFhoOCgYB+fn+BgoSCgYKDhIOCg4ODg4KChISDhIODiJCTj5WYkoeDgoWFhYOEhIWFg4KBgH9/gIB/gIGEg4OEhYWEgoKBgoOCg4OFhIKDhISEhYaGhoaGhoWFhoeHhYaIh4aHiIeGhoaIiYeHhYaGhoeIkZORkI6QjpGRjImIhYGBgoKCgoGBgYGBgoOBgYGBgYGBgICAgICBgYCAgICAgISEg4KBgoGAgYGAgYKIh4aHhYSCgH99fX6AgH+AgYGBgYGBgoGAgYKDgYKCgoGAh5uIi4eCgoKBgICAf4GAgICAgH9+gIGBgYKCg4OEg4OEg4OCgoGBgoODg4SEg4SEhIOFhYaFh4eIh4eHh4eHh4eGhoaGh4WFhYaGhISEhIWEhYaSk5GOj4+OkI6JiIeEgoKCgoKCgoGBgIGCgoKCgoKCgYGBgYGAgYGBgICAgYGAgoSDg4KDgoGCgYKDg4iIh4iHhYSCgX5+gICAfn5/f4CBgYGCgoCBhI2DgH+AgIB/g4iOgIGCg4OBf39/gYCAgICAgICDg4KDg4ODgoOBgYKCgoOCgYKCgoOCgoSDhISDg4SEhYWFhYaGhoaFhISEhYWEhIWFhYSEhISDhISEhISEipSTkZCQj46NiYaFhIOBgYKCgoKCgYGAgYKCgoKBgoKBgYCBgYCBgYGAgICAgYGAg4OCgoOCgoKBgoOCiImJiYiHhYSDgYKEhIOBgoKCg4SCgoSEgoOJloiEgoSCgn9/jJWCgoGChIOBgYGCgoODg4KDg4ODg4SEg4OCg4KDg4ODg4KCgoKCgoGDhISEhYSFhYWFhIWEhIWFhYWDg4OEhISEhYWFhISEhISEg4ODg4OOlZKQkZGPjYyHhYODg4GBgoKCgoKBgYCBgoOCgYCCgYGBgICAgIGBgYCAgICBgICDhYSEhIODg4SDhIOGh4mIhoWDhIODg4WDgYCDgoWFhISDg4OChI6Zi4OFhISEgoCRmYaCgoKEg4ODgoSEhYSDg4ODgoKDhISDg4ODg4SFhISDg4KCgoKCgoSEhYSFhYWFhYODhYWFhYaFhoWEhIWEhYWGhYWFhIWEhISDhIODhJGUk5KTkI2MioWEhIODgYGCg4KCgoKBgYGCg4KBgYKBgYGBgICBgIGBgH+AgIGAgYaGhoaGhoaHh4aGhYSDhYaCgIGBgYGHgoB+f4GBj4yDgX9+fXx9jJyOgIKBgYKChJSUjIGCgYKDg4GLnJqhmoqCgoKDg4OEgoKEhIOEhIWEg4OCgoKCgYKCg4ODg4SFhYWFhIOEhYWGhYWEhISEhIOEhIWFhYWFhIODhIOEg4KGlJSSk5KPjYyIg4SEg4KBgoODgoKDg4GBgoKBgoKCgYGCgYGBgYCAgYGAgICAgICAhYWFhYaGhoaGhoWGg4ODg4GAgoKCgYKAf35/f4GVl4mAfX19fXuBmIyAg4GBgYCOlIyQgYKBgoKBiZKQjJajo4+BgoKCg4OBg4SDg4ODg4OEhIKCgoKDgoKDg4ODhIWEhISEg4OEhIODg4OEhIODg4ODg4SDg4ODg4KDg4KDgouUk5KTko2NioaDhIOEgYGCg4ODg4ODgoGBgoGCgoKCgoKBgYGBgICBgYCAf4CAgICDhISFhYWFhYWEhIWCg4KDgoKDg4OBgICAgICAgJWfin5+gH2Hi36EhIOEgoODgo2JhYyCgoOCg4KTlJaYkpeenImBgoODgoKDg4KCg4KDg4WEg4ODg4SDg4SEhISEhYWEhIWEg4SEg4OEhISEhISEg4SEhYSDg4SEhIODgoKDkJSSkpKPi4yIhoSFg4OBgYKDg4ODg4OCgYGCgoKCgoKDgoCBgoGAgICAgIB/gICAgISDhYWEhYWFhYSFhYOEhIWDg4SEhIKCgoOCgoSBkaGKf4yFfYaJgH6FhYWEhYJ/fX19f4KEg4OEhIuZlJqZl5aVkoSEhISEg4SEhIOEg4OFhoWFhYSFhYWFhYSFhoaGhoWFhYWFhYWFhYWGhoWGhoaFhoaGh4aFhYWFg4SEhIeTk5OSkoyKiIWGhYWCgoGBgoODg4OCg4KBgYKDg4ODgoKBgIGAgICAgICAgH+AgICAhYWFhYWGh4eGhYWFhISFhYSEhISEg4ODg4OEhYOJkYOEi4WCgYF+fYGHhoOAfn5/f35/gIOEg4SEkZWDiZaYlpWUiISFhYWEhYSGhYWFhYaGhoWGhYWGhYWHhoaGhoaFhIWFhYWFhIWGhoaHhoaGhoaHh4iIiIaFhYWEhYWGjZSTkpGQi4qHhoeGhIGCgYKDg4ODg4KDgoGBgoODg4KAgYGBgICAgICAgICAf4CAgICHh4eGhoeHiIeHhoaEg4ODhIODg4OEg4ODg4OEhISEgYKCgYmBf359foWBf39/f39/f36AgISFhIWdk4GBmJmYmJaLhYaFhoWFhoeHh4iGh4eGhoaHh4eGhoeHhoaGhYODhIWFhoSFhYaGhoeHhoaGhoeHh4eIiIeGhoaHh4eRlJORkZCLiYiFhoWDgoKBgoODg4ODgoKDgoKCgoOCgYCBgICBgICAgIGAgIB/gICAf4aHiIeHh4eIiYmIiIODgoKDgoSEhIWEg4KCg4SEhIOBgICAhIR/fn1+gH9/f39/gIB/f4B/f4WFiKGgm5ufnpKNkIqHiIiIhoaHiImJiYmIh4aHh4eJiIaHh4eHhoaFg4OEhYaGhYWFhoaGh4eFhoeGh4aGh4eHh4eHh4eFh5OTkY+RkIuHhoWFhIKCgYGCg4ODg4ODgoKCgoGCg4KCgIGBgYCAgICAgICAf3+AgYB/hoiIiIiHh4iJiYmIg4KCg4ODhIWHh4aFg4OFhISDg4GAgIGMiYGAgYGCgYGBgYB/gH9/fnt6gIiaoJqao6KbjIGMioiKi4qIiIiJiYuLioqIh4eIiIiHh4iIh4eGh4aEg4OFh4eHhoWFhISDhYWEhYWGhISEhYWFhoWGhYOJlJKQj5GOioaFhoWDgYGCgoKDg4ODgoKCgoKCgoKCgYGBgYGBgYCAgICAgIB/gICBgH+GiYiIiYeIiImJiIiEgoKDg4KDhImKh4aEhIWEg4OCgICAhISCgoKDg4KCgH9+fX19fX5+fHt7lKGXlpmfn5uYi4uJiImLiomJiImIioqJi4mGhoaGh4WGiIiIiIaGh4SDgoSHiIiIh4WCgoKDg4KDg4SCgYKDgoGEg4SDgY6TkpCPj4uIhYWGhIKBgYGBgoODg4OCgoKCgoKCgoGBgYGBgIGAgICAgICAgH+AgIGAf4WIh4eHhoeIiIiHh4SCg4OCgoOFiYqJh4WHhYSFhYKAgYOEgoOCgoODgX59fX5+fn5+fn1+fX2BlZOQl5iTmJqXjYeHh4iHh4mHh4aIh4aJiYSDhIOFhISFhYaIiIaFg4KCg4WHhoeGhoSCg4OEgoODhIKBgoGBgYODhIOEkZKQjo+Oi4eFhoaEgoGBgYGDg4ODg4KCgoKCgoKCgYGBgIGBgYCAgIB/gIGAf39/gIB/hYaGhYaGhoeHiIeGgYKEhIOChYeIi4qGhIaEgoaGgoKEhIODg4OCg4F9fH1/gH9+fn59fH1+fHqAkY6PkI6TmJmKg4aFhYODhYSEhISEhIWEgoKCgYSEgYKDg4WGhYSCgoGCgoODhYSEhIWEhIaDg4OFg4KDgYKDg4SFhIeSkY+Nj4yJhYSFhIWCgYGBgYODg4ODgoKCgoKCgoKBgYGBgYGAgICAf4CAgYB/gICAgICDhIWEhYWFh4eHh4aAgYGFg4OEhYSHiIWCgICAgX9/gYSEg4ODgoKAfX1/gICBf31+fn18fX17enqFkI2Mj5SXlISAgoKBf36BgYGCgYOBgoGCgoKBg4SAf4CAgYKCgICAgYCBgoGDgYGChIODhISCg4SDgoKBgoSDhYWGi5ORj4+Pi4iFhYODhIGAgYGBgoODg4KCgoKCgoKCgoGBgYCBgYCBgH9/gIGBgICAgH+AgIKCg4OChIOEhYWGhn+BfoCBgICAgIGDgn9+fn5+fX+ChISCg4KDgn59fn+AgIGAfn19fX1+fXx6e3uIj42Nj4+Gf35/gIB+fYB/foCAgX+AgIF/f4CBgX59fX+AgX9/fn+AgH+AgICAf4CCgICCgYCCgYGAgYGBgYKEg4aPkpCOj42Kh4eGg4ODgYGBgYGCg4ODgoKCgoKCgoOCgYGCgYGBgICAgH+AgICAgICAf39/gYGDhIGCgoOCg4SFgIB/fHx9fn19foCAfn1/fn1+gIODg4KCgYF/fX1+f4CAgH99fX19fHt7e3p6enuLj42Qhn5+fn5/f35/gH9+f3+Af4CAf359fn9/fn18fn+Af35+f3+Af39/f4B/f39+f4CBf4B+f39/gH9+f4B/hZKSj46Pi4uHiYWEg4KBgYGBgYKDg4ODg4OCgoKDg4KAgYKBgYGAgICAf3+AgIB/gIF/f36BgYSEgYKBg4OCg4OBgH99fn9+fX5/f4B/foF/f4CBhIOCgYB/f359fn5/gICAfn19fX17e3x6enp6eX+OjpSKf39/fn9/f4CAf35/f4CAgoB/fH5+f35+fXx/f4B/fn5/foB/f35/f4CAfn5/f39+f35/f35+fn19fX2Fk5KOjIuKiImIhISEgoKCgYGBgoOCgoOCgoODg4ODgYCBgYGBgYCAf39/f4CAgICAgIB/foCBhIOCgYGDhISDhICBgICBgIGAgYKCgoGBgoCBg4ODgYGBgYCAfX19fn5+f359fX19fXx8fHt6enp6eYOQjZWMgYKAgIGAf4F/gICAgYGCgoB+gH5/fn5+foGAgYB/f39/gICAf4B/gYB+f3+Afn9/fn+Af31+fn17fIaTkYyLioeHioiGhoSEgoGBgYGCg4ODg4OCg4OCgoKBgICBgYGAgH9/f39/gICAgICAgH9+fn+BgYGAgISGh4aHgoSDhYKBg4ODhYSEhISEg4ODhIKCgoKCgX5+fX19fn6AfX19fX19fX19fHp6eXl5e4eIlJWEg4GCg4GAgoCCgYGDgoODgYGBgIGAf4CBg4GEgoCAgYCBgYGAgYCCgX+BgIF/gIB/gICAfn9/fnx8iZSQiomIiIiJiIaGhoSCgoGBgoKDg4ODg4KDg4KCgYCAgICAgYGAf39/f4CAgICAgIGBf359fn5/f39+g4aHh4iChYSFg4SFhIWGhYaGhoWGhYGBg4ODgoKAfX19fX19fn59fX19fX18fX18e3l5eXl5fIKHkYSDgoSDgoKDhYeCg4SDgYKCg4OCgoKCgYKFg4iFgoGCgYKDgYGBgYSDgoOCgYKCgIGBgIF/gIGAf36Ok4yHiIeIh4aGhYaGhIKDgoGCgoODg4ODg4OCgYGBgH+AgYGBgYB/gH9/gICBgH+AgYB/fn19fX5+f36Ag4SHh4SGhoaFhoaHh4aHh4iHh4eGf32AgICCgX59fX19fX19fX19fX18fH5+fnx7eXh4eXl6fYGHf4KKhIOEhISXl4ODhIF9foGBgoGBgYKBg4aIjIWDgoKBhIKDg4KDhYSEhYODg4OCg4OCgoKCg4OCgpGQi4iIh4mHhoaEhoWEhISDgYKCg4ODg4ODgoGBgYCAgICBgIGBgH9/fn+AgICAf4CAgH9/fn1+fn+Bf4CCgYWFhYeGh4eHh4eIhoeHh4eGh4V+fX18fX9+fX19fX19fX19fX19fXx7iJKCe3x6fIZ5eXp7fX98hZGDg4OEhJSTgIGBf39/fn6EjIB/gICEhpCJhYSCgoGFhYuCgYKFhYaGhISFhYOEhIODhIOEhISIko+MiYiIiYeHh4WGhYSEhIKBgoKDg4ODg4OCgYGBgYB/gIGAgICAf39/f4CAgICAgYGBf39/f4CAgIGBgYGBg4OGh4aGh4aGiIeGhoaFhIOFhH59fHx8fX18fH19fX19fX19fX18fH+RlZaDe3qElHx5enp6ent/goCBgYOCgH59f397iJF8fI6WgH1+f4KGioWDg4SDgoOMiX9+f4OEhYWDhYaFhIWFg4SFhYaEhI6Rj4yKioyJiImHhYWFg4ODgYGCgoKDhIODgoGBgICBgICAgYGAgIB/f3+AgIB/gICAgX5+f4GBgoKCgoODgoOCgoWGhISFhYSGhIOEg4KBgIKAfn19fHx9fXx8fH18fH18fX19fHx8e4uRl4x6e3yBenl6e3x5eHx9foB/gH99e3t/fn2ClZF/hIh9fH5/goR8fIGChIN/f4eDfYKBgIKCgIODg4SEhISChIOEhYGEkZGOi4yMjoqJiYWFhYODg4KBgoODgoKDg4KCgYGAgIGAgICAgICAgH+Af3+Af357gICBenyAgYKDhYODhYWFhYODg4SCgYKDgoOCgoGBgIB/gX5+fX19fHx8fHx8fHx8fHx8fHx9fHx8fn6Kgnt6e3p4ent7fH17fn5+f35+fn19fICBgH2Gj4F+fYJ+f36Agnx8gH+CgIGAfnx7ioJ9gH9+gYCAgYKBgoCAgIGAf4uUkIyLjo6NiIiHhYWFhIOCgoKCg4OCgoODgYGBgICAgICAgH9+fXx7fHx9f3+AgHx6gYF4e4CCgYOFhIOFhYaHhYSAhpSIgIKBgYGBgH9/f39/fn5+gHx8fHx8fHx8fHx8fHx9fHx8fHx9fHl6e3t4eHl7e3p8goCBf4CBfX9/gH99gIKCgICAgX+CkYF/f4CAfoB+fn9+gIGBfX19e319fXx9fHx9gH+AgH6Afn6ClJKNjY6Oj4qFhoaFhISFg4KDgoODg4OCgoGBgYGAgICBgICAf4CAf39/fXt6fICAgHh+gXd7gIF/goKCgoKEhoeGhn6IlYp+gIGAf4B/foB+f39/fn+Bfnx7fHx8fHx8fHx8fH19fHt9fHx8e3x8fHp6eXt8en2Fg4OBgYF+gH9/gH6FgoF+gH9+foCFhoKAfn6Dhn99fH5/gIGAf39+fX19fX57fH1/f3+AfX9+f4yRjo2Njo2Nh4SGhoWEhISDg4OCg4ODg4KBgYGBgYCAgYGAgYGBgYGAgH9/f397en9/e3mAd3p/f31/f3+Af4KEhoaFf3+FgX5/gIB/gH5+f31/gIB/gIB/f318fHx9fn18fX19fX19fH58fXx7fXx8ent6fH19f4aFg4GAgH1+fX5/fouEgYd+fXx8f36Cgn99fH19gXx7fXx+gYSDgYB+fn5+fXx+f4B9foB+f36Eko2NjI+NjIqGhIWEhISDg4OCg4KDgoOCgYGBgYGAgYGBgYB/fXx8fH1+f39/f397e399d352eH59fH18fX5+gYGCg4F6fn58fn6AgH5/f35/fn+AgH+AgH9/fn9+fn5+fn1+fn99fH59fn19fXt8fHx7e3p9foCAg4OCf35/fHx8fXx8gYN+jH58e3t9fn1+fX18e3t9fHt7e3uAhoSChIOBf4B+f4KCgn9/goJ/gIuQjY2MjYuKiISEhIOEg4ODgoKCgoKCgoKBgYGAgoGBgYKCf3+AgIB/fn18fH5/fn55fX52e3Z4fXx8fHt9fX6BgICAf31/f31+f39/f4B/f39/f3+Af4GBgH99gH9/fn9+fn5+f3yCfX59fX17e319fHp8fH2BgoGAgIB9fX18fHx8fH18fnt/fnt7e3x8fH18e3x7e3x8enp9en6CfoKEhIKBgoGFhoWFhoaHhYGEkY+Ni4qLh4eFgoOEhISEg4KCgYGCgoKBgoGBgYGBgoGBgoKAgYKBgYCAgH9+e3x+fnx6fnh5dnd8fHx7e317f4GAf35/foB/f35/f35/gH9/f39/f39/gYKAfn6BgIB/f39/f39+fYN8fH19fH99fX19e3x+fn5/fn5/fnx8fXx8fXx9fnt8e3x8fHx9fH18fXx9fHt7e3x5e3x7e316fX5+f4CAg4eJiYmKiYqJhYiSj42JioeFhYOCgoOEhIOCgoKBgYKBgYKBgYGBgYKCgoGCgoCAgX98e3p6eXt9enx+fnl8eXh4dHx8fHt8fHx+gH9+f39/gIB/fn5+fX+Af39/f4CAf4CDgoB/gIGAgIB/f4CAgH58eXx+fX59fX5+jIZ9fX57e4ODfX19fH18fX19fX19fH17fXx9fX59fn19fn18e3t7fHt8fHt6e3t6enp7fn2ChoiHiIqKi4uJjJGQjoqJhoWEgoKCgoODg4OBgYGBgYGBgYGBgYKCgoOCgYKBgIGBf3+Af356eHl5en5+e3l6eH5zfHx8e3x8fH5+fn5/gH+AgIB/fn9+gIF/f4B/gIGAgoODgYCAgYGAgX+AgYKBf39+f35+gH57foGRjHx9f4qAjYx+fn19fX59fX59fXx8fX19fXx9fX1+fX1+fnx7e3t8e318e3p7e3l6enl6e35/g4OEiImKiImOkI6MiYmFhISCgYKCgoKCgoGCgoKBgYGCgYKCgoGCgoKBgoKAgYGAfoCAf39+e3p5e319eHx6f3KBfXt7fXx8fn59fYGBf4GAgX9/gH+AgX+AgIGCgYGEg4SCgYGCgYKCgICBg4KAf4F/fX6Afnx+f4iCf36DkYSEg4F/fn18jYd9fX59fX1+fnx9fXx9fX5+fX5/fH18e3x9fnx8e3x9enp6eXl5ent+foCBg4eEiI+Oi4qHhYSEg4KBgoKCgoGBgYGCgoKBgoKCgoKCgoKCgoGCgn+AgIB+f39/fn5/ent5fX16enp9cX6Cent9fX19fXp4f4KAgYKCgICBgYGBgICBgoKCgoWFhIKBgYKBgoGAgIKEgX9+gX99foF+fX5/gIB9fn+EgH5+f31+fX2KhX1+f31+foB+fX18fH5+fn99f4B9fX18fX9/fHx7fH17e3t6enp6e3x9fn1/goCJjouMiIWFhYSDgoKCgoKCgYGBgoKBgoKCgoKCgoGAgYKBgYKCf4CAgH9/f39+fn59eXp6fXx5d3t0e4d8dHd9fn17e3Z2fYCBg4KBgYKCgoKBgYGDg4OChYaEg4CAgIGDgX+AgYSBfn6Af35+gH59fn6AgH6Bfn+Af39/gH99f39/fn+Afn9/gH58fX18fn5+foF/gH2CgHx9gIB9e31+fXx8e3x8e3t7fHt8fH19fIqKiYmGhoWFhISDgYKBg4KAgIGCg4KCgoOCgoKCgoGCgoGBg4J/gIGAf39/fn5+fn57enp8fHt2e3R3f352cnt+fnt4dnd8gIGCgoKBgoODg4OCgoSDhIOFhoOCgX9/gIKAf4CAg4F+foB/fX+AfX1+foCAf4J/gYCAgICBgH1/f3+AgICAgIB/fnx9fX19fn59g32AfoKAfX6AgX98fn59fX17fH58fXx8fHt8e3x+ioeHhYaIhYSFhIKCgoGDgYCAgoKDgoKCg4ODg4KBgYGBgYGCgH6AgYB/fn5+fn5+fn56e3p9goN9dXF6fHpxen59eXh0dICAgoKCg4KDhIOEg4KDhISEg4WEgYGAgH6Agn9+f36Bf35+f4B9foB9fX19gIB/gYCBgYCAgIGBfn6Af4GAgIGBgH9+fX19fn1+fn19gYR/gH9+f4GBf31/f319fn1+fn1+fHt8enx7eoCIg4SEhYSEhIWDgYKBgYKBgICCgoOBgoOEg4SDg4KBgYKBgYOAfoCBf35+fn5+fX5+fnt7en6Jh354cnl9f3F6eHt4eXV1fYKDgYODg4OFhIWDg4OEg4OEhYOBf3+Af4CBfn19fn9+fn5+gH19f3x9fX6Bf4CAgIKAgIGAg4KAf4B+gIF/gIF/gH9+fn1+fn5/fX6FhYGBgX+Ag4F/foGAf35/f4B/fn17ent6fHt6goWAg4KCgoKCg4GBgYCAgoGAgIKCg4KBg4SDhIKEgoGBgoGCgoB+gIF/fn1+fn5+fX59fXp7fIWEe3tzeXt8cHd1dnd5dXR6hISBhISDhIWFhoSDg4WEgoODgoCBf39/f4B9fX1+f31+f39/fn1+fH19foF/gIB/gIB/gICDgoGAf36AgH+AgYCBgH9/f39/f4B/gIGCgoKBf4CDgn9/g4J/f4B/gX+Afnx6e3p8e3yCgX+Cf3+BgIKCgYF/f3+CgH6BgoKDgYGDg4KEgoSCgYGBf4GCgH6AgH9/fX5+fX19fn19e3t6gH94fHZ5enxxdHh3dnh1cnmFhYKEhIKEhYWGhIOChIOBg4GAgIF/f39/gHx9fX6AfX5/f39/fX98fn5+gX+Bf39+f4B/gYOCg4B/f4GBgYKBgYGAgIGAgIB/gIGBgYKDgYF/gISAfYGDhICAgX+BgYKAfXp7e3x8fH99f4B8f399fYGAgH59fX9+foKAgYKBgIKCgoKBg4KCgYB/gYKAfn9/fn99fX1+fX19fX19ent7fHZ9eXh6enJ1eXl2d3dzdYaFg4WEgYSEhYSEhIGDgoGDgX+AgX5+gH6AfX19foB+f4B+fn99f31/f3+BgIF/f3x+gH6AgYKDgYCAgYOFgoGAgYB/gYCAgYGAgYGBg4OBgX+Ag4B+goOEgICCgYKChIJ+e3t8fHx9fX1+fXp+fX14fn9/fHx8fn5+gYCBgYCAgoGBgYGDgoGBf4CAgoB9fn19f319fX59fH19fX16e3p8dnx6d3t4cnZ5e3Z2dnN0hoSEhYSChISFhIODgoOBgYOBgIGBfX+BfoF9fX1/f39/gH5+f319fYB/gIGBgX9+fH5/fn5/gYJ/gYGCg4eFgX9/fn6Af4CBgICAgIGCgYCAfoCCf3+BgoOBgYOCg4OFgn99fX18e3x8eXp7en55e3l4f357fHt+fX1/f4F/gH6BgICBgoOCgYF/gIGBf31+fH1+fX19fX18fn58fXx5e3x4enx3endzeHd6c3Z2c3SFhISFg4KDhISDgoKCg4GCgoF/gYF9gIB+gH1+fX5/gIB/f39/fnx+gH+BgIGAf399f39+fn+BgH2AgIGDg4N/f359fn5/f4CAgIB/gYKBgH99f4F/f4CCgoCBg4KEhYaEgH59fH18fHt5dnl5enl2eXZ+fHt7e359e399gH99fX9/f3+BgoGBgX5/gYF+fX18fX19fX19fXx+jYF8fXl7e3p5fHd4eHR1dXhyd3d0dYaEhIWEg4ODg4OCgYKDgoGDgn+Bf35/fn+AfX19fX6AgIB/f39/fH9/f4GAgYCAf3yAf35+foB+fX5+gYGCgn5/fn1+fn5+f3+Af32AgYB+fn1/gX5+gIKCf4KDgoOEh4SAgH58fXx8e3x1eXl4eHh5d3t8e3t7foV9fn1/ent+fn59foGAgIGAfX6BgH59fXx9fX19fX18e32Dgnx8ent7e3p7d3Z4dXJzdnB4eXJ4hYWFhYOEhIOChIKBgYKCgYKBgIF/fn5+foB+fX58foCAgH+AgIB8gH6AgH+BgYB/fYB+fn5/f319fX6AgYGAfn9+fn59fX5/fn9+fH6Af35+fn+Cfn6AgIF+gYOCg4OGhICBfnx9fHx7fHh3e3h1eXd3eXx7e3t9kod9fH13en1+fn19f35+gH98foB/fn19fH19fX19fHt8ent9enp4e3x6ent4dHh1cXJ0cHh4cXmEhYWFg4SDgoODgoGBgoKAgoCAgIB9fn5/gH18fnx/gIGAgICAgHyAf4B/f4GAf399gX9+f39+fX18f4CAgIB+f35+fn18fn9/f358fYB/fn1+gIJ/f3+Af36ChIKCg4WFgoJ+fXx7e3t8eXd7eXd4d3d4e3t7e3yFiX17end6fH19fHx9fX1/fnx9fn59fX18fX1+fX18fHt6enx7e3p5enp7enhzd3VxcXNveHdxe4WGhYWDhYKBg4OBgYGBgoCCgICAgH5/fn9/fXx+foCBgoGAgIGBfX6Af35/gX+Af3+Bf39/f319fH1/gICAgH9/f35/fXx+f39/f319f39+fn6CgYF/gIB/foGDgoKEg4SCgn5+fHx6fHt7eXt6d3N2d3h5e3p7eXp/fnt7d3p8fXx8fH59fH19fH19fXx8fX19fX99fXx9e3l8fHx7enp6enp6eHN2dXBwcm93dnJ7hYaEhYOEgoGDgoKCgYGCgYKBgYGAf4B/f39+fX9+gICBgYJ/goF9foF/f4CBf4B/gIJ/gIB+fH58f3+BgICAf4B/f4B+fX5+f4B/f39/gH9/f4J/gICAgIB/gYGAgISBgoKAf39+f3x9fn56fYR+dHx9enp6enx5eXp6hoV3eXx8fHx8fXx8fHx8fX19fHx9fX19fn19fX16eX18fH16enp6enp5c3V1b29xb3d0c3yFhoOEgoOCgYKBgoKCgYGBgoGCgYCAgICAgH59gH+Af4GCgn+CgX+AgX5/gYB/f4CAgn+Bf319f35/f4KAgICAgIB/gIB+fn1/gH9/gIB/f39/gH+AgICAgH+AgYCBgYGCgYCAf39/fn1/fnuBko16fH18e315e3p6eHqBgXh5e3x8fXx8fHx8fHx9fX18fH18fn1+fn59fHp8fHt8fXt5enp6eXl0dXVvb3Fwd3N0fYWGg4OCg4KAgYCCg4KAgYGCgYKBgYCBgIGAfn6Af4GAgYKCgIKCgICCfoCBgX9/gX+BgIF/fH6Af3+AgoCAgICAf3+AgH9+fX6Afn2AgIB/f3+AgICAgYCAf4CAgYCBgYKBgICAf39/fX5+fIGGiXx8fnt7fnl6e3p7j393d3l7fHt9fHx8fHt9fH19fX18fXx+fn5/f358enx9e319e3l6e3p5eXN0dW5zcXB4cnV6hYaDg4KDgoCAgIKCgYCCgYKCgoGBgYKAgYF/fn9/gYGCgYKBg4OAgYJ/gYGBf4CAgIB/gX99f4F/gICBgICAf4B+gICAf359foB+fn+Af39/gH9/gICBf4CBgH+BgIGCgoGAgICAgIB9foB9gIOCe35+e3x9e3p8fHuHenh4eXx8fH17fHx9fX18fH19fn19fX5+f3+Af317fHx8fHx7enl7e3l5c3J1bnZycHhxdXaFhYOEg4KCgYCBgoF/gIKCgoKDgYGDgoCCgYB/f4CCgoKBg4KEhICBgX6BgoF/gICAgH+Cf36AgYCCf4CAgIB/gH+AgIB/fn2Af35/f4CAgH+AgH+AgYF/gICAgIGAgYGBgYGAgYCAgH9/gH5/fX59fn57fXx9e3x8d3h1eHh5e3x8fXx8fHx8fX5/f39/fn19fn9/gIGAf3x9fHx9e3p7eXp8eHpzcnVud3FxenF2d4WFg4SDg4KBgoKDgICCgYSDg4SBgYOBgoKCgYCAgIKDgoCCgoSDf4GAfoKDgICBgICAf4CAf4GBgYKAf4CBgH9/gICAgIB/f4CAgH+AgICAgIB/f4CBgYCAgICAgYGAgoOCgoCCgYGCgYB/f4B/gId+fnx7fXx7fX54d3Z5eXp7fXx8fXt8fH19fn5/gIGAfn1+gICAgoGAfH59fX58d3t6ent5eXNxdW53cHV6cXZ5hYWCg4KDg4KChISAgIOBhoODhIGChICEg4KCgICCgoSBgYKBg4J/gIB/gYOCgYCBgYCAf4GBgYGBg4B/gIOCf35/goGAgH9+gYCBf4CAgYCBgYCAgIKBgYKBgX+BgYGBgoOCgoOBg4OCgYCBgH9/hH19fXx/fXp9f3t6dnp4eXt7fH19e3x9fX19fn+AgYGAgH+AgICDg4B8f35+fn15eXt6enp5c3J0b3dxd3lzd3uFgoKCgoOEgoOEg4CBg4OGg4ODgoKEgYSDgYOAgIKBg4GCgoGCgX+AgICCgYKBgYKCgIGAgICCgoGEgH6Bg4J/f4CDgoCBf4CCg4KAgYKBg4KDgoGBg4KChIGAgYOBgYKEg4KEhIODhIODgYGBgoCCf4B/fYB8enx/fHt3fHl5eXt6fX59fHx8fH1+foCBgYCAgIGBgYSEgH2Af39/f357e3t6e3p0cHhxeXR2eHR2e4SCg4KDg4SChIODgYKChIaEgoOCg4SBhIOBg4CBg4KCgoKCgYKAf4GAgIKBgoGCgoKBgIGBgYKCgoOAfoGDgn9/gYSEgYN/goKBg4KCgoGEg4OEgIKDgoOCgoGCgoOBg4SDhISEhISFg4SCgYOCgYOBgYGAgH58fIB9fHh8eXp5enx9f3x7fHx9fX18fICAgICAgYGBgYKBf4CAgICAf3t7e3p6enVweHd5dnV8dXZ8gICDgoODg4OEhISBgoOFhYWDg4KDhIKEhYKCgYKDg4GCgYKAgYB+gYCBgYKDgoKCgoGAgYKCg4KCgoB/gYOCf4CChIODgoGCgoGDgoKDg4ODg4SAgoOCg4OBgX+Bg4KDhYKEhISEhISDhISChIOEhIKBgoCBgHt9gH58eXx6enp9fHyBfXp8fH19fHp7fn5+gIB/gYGBgICAgIKBgIB/fX18fX18dnJ3eHh2dH92dX2Hh4OChIWDg4SFhIGChIaEhIOCg4SEgYOFg4KCgoODgYOBgoCCgH2AgIGCg4KCgoKEgoCCgoODgoKBgX+Cg4KAgYOFhIOCg4CCgoOCg4ODg4OEg4CCg4KEg4KCf4OCgoSEgoODhISEhIOEhIOEg4WEg4ODgoKAe4CBf3x8fXp6e32AfX9/fHx6fH59fH19fn5/f39/gICAgH9+foCBgICAfnx9fX5/fn18fHh2f3Z3f4SHg4KDhYODhIaEgYKGhoWEhIODhISChIWEgoKDg4SCg4KDgoKBfoCAgoKDgoKDg4SDgYKCg4ODg4KCgYGDgn+Cg4SDg4KEf4KEg4ODgoSDg4SCgIOEg4SDg4KCg4KChIOCg4OEhISEhIWEg4OEhYSFhIOBgoB9gYKAfXx8e3x8gH19foB+fn1/fnx8fH19fn5/fn+BgYGBgH9+fX6BgYB+fn19fX59fX5+f3+AfH2AgYKCg4OGg4SDhoSBgoiGhYSDg4SEhYGFhYWDg4SDhIODgoOCg4F+gYGCg4SCg4OEhIOCg4KEg4OCgoKDgYOCf4KDg4ODgoOAgoWDg4ODhIODhIOBgoSEhYODgoODg4GEg4GDg4SEg4SEhYSEhIWFhYWEg4ODf36BhIB9fXx8fHx/gX5/f39/fX99e3x9fX19fX5+f4CBgIGBgH99fH6Cf39+fn5+fX1/f39/gICAf4CEhISDhIWDhIOFf36CiouFhYSDgoSFgYaGhoOEhISEhIODg4OEgn+BgYODhYSFhIWEg4KEhISFhIODgoSDhYKBhISFhYaEgoCDh4SDg4OFhIWFhIGEg4OHgoOCg4GCgYSDgoODhIODhIWEhYWHh4aHhYSEhYSBf4GDf35+fH5+fX+BgH9+fHx/f358enx9fX19fX5+fn9/gIGBf319fIB/gH5+fn5+f3+BgYGBgYKAgYWFhIOEhIKEg4aAgoSFi4iEhYSEhYWDh4aGhISEhIWEhISEg4SEgYKDg4OEhIaEhYSDg4SEg3yDhHuBhHd5g4F9hH5+cnWDgoF2foOEgH2BdYF5g39/f36EhIKDgoOBg4SDhISFg4SFhoSEhn2Den1+f4N7hYOBhIOAf31+f35+gYOBfXt/fX6Afn18fHx9fX19fH19foB/gYJ/fX18f4GBgICAgH+BgYGBgYKDg4KChoSEhIWEgYOEhYOEhYOKiIWFhYOGhYSGhoaDhISFhYWEhYWEhIWCgoOEhYWFhoSFhIOEhYWCaICEanx7cXF8gXOGc3R0fYKDdXNxg4ZzcHVyc3SDdnt9dYF/goOBgnZ5hYCDgIR/hYSChYSCaHpyc3N8gHKChH6Dg32BfX5+fX6Cg4J8f4F9f4B9fXx8fHx9fXx8fn1+gX+BgX99fX2AgYKBgYGBgIGBgYKBgoKCgoSHhIWEhYSCgoSGhoOFhIaIhoaFg4aGh4eGh4OFhYaFg4KFhoSFhYODg4WEhoaGhIaEg4SEhn1we4FweXZ+g3+CbnlwdXN8dnl5hnKEg3B2eHF2dHR1cnN0dml/gG5yb3R2bnVsd216c26Ah3ptfXJzdnN2bW53bHB5bHV9f398foGAgX2Af32Af4B/fX18fHx9fH1+f32Af4CAfnx/foCBgYCBgICAgYCAgIKDgoKDhYeFhoCChYODhYeGg4WFhYaHh4SDhoeIiYaHhIWGiIeEg4WGhYWEhIOFhIKFhoaFhoWEhoWHdnB0e3BydX+HhYNtdW92b3x1coR5eYd4cXR3bndod3pucHaCcoN+b3p5eW1vbnpvb2x3fXiGcHF6cHJ0ZoF1fm57eXNveX+Af31+gX9/e39+fYB+gIB+foCAgYB+fn9/foF/gH9+fYB9f4CBgIB+fn+BgH9+goOCgoSFh4eEfoeEg4OFh4aEhYWFhoaIhISGh4iIhoeEhoaLiYWEhoeHhYOFhIWEgoWFhYWGhYWGhYZxdXByc29zenl+hHSIdHV+iHZugnKEhXluanJ/cW1zd3x/dXR8hH54cXV3bnl1enF2eHV6eYRyaW95eHBreXN6b3p3dnZwgYF/fn5/f396fn18fn1/f359gIGDg4CCg4GChIKBf4GBgH1/f4F+f35+f4GAfn6BgoCAgoSHhoODh4SEhIWHhoWFhYWHhoiFhYaFh4eGhoSGhomIhYSJioiFhIWFhoWDhYWEhoaGhoaGg3iLeXKIentwcIWEeIV4eWtzfnl7a3KDh4N6fG16eXl0fYB2bm+AgG90fHV3cXl9fW1+dW+DhYZ6gHJye3x1cG96a3N8bnaCgYF+fn99fXt9e3x9fX9/fn1/f4KCf4GDgYGEgYB/gICAfn9+f31/fn1/gH58fYGAfn6Ag4iFhoOFhYWFhoeFhYWFhYeHiIaEhoWHhoaFhIWFhIWFhomJh4WFhoWGhoWGhoSGhoaGhoWGh4eHhoaDhoWGh4iHhYeGhoOHhoWFg4SFhoWGhIaEg4SEhoSEgYODhIOFhIWEhYSGg4WGhYWEhIWHhoSEhYaFhX13hYOEhIOBgX5/fnt8e357fH1+f399fH9+gYB9f4F/f4GAfn5+gH5+f35+fX99fX5/fHt8f358fH+BiYaFhIaGhoWGhoWFhYWGhoeIhoSGhYeGhYWDhIWGhYSGhoeGhYSGhIWGhoaGhIeGh4eGhYeIiIiIhoWHhYaGiIaFiIeHhYeGhoiFhYaHhYaGhYOChYWGhYWDhYOEhIaEhoaEhYWDhoaFhoWEhoeGhISFhoOFhIKEg4OFg4OBfYB/e3t8fnt8fH1+fnx8fn2Af31/gH5+gH99fXyAfX5/fn5+f3x8fX57fHx/fHt7fn+Ih4SEiIaGhYeGhYWEhoaGhoiHhIWGh4aFhIODhIaFhIaFhoaFhYaEhYaGh4eFh4aJiIaGiIeIiYiFhYiFhoeGh4aHhoeFh4eGh4WFhoeFhoaFgoOFhoaEhIOEhIOEhoSGhoSFhYOGhoWGhYSGh4WEhIWFg4SHhoSCg4SDhIJ+gYB8e31+e3x7fn59fHx+fX5+fX9+fX1+fn19fH98fn58fYF/fHx8fXx8fH56e3t8foiHgoWIh4eGhoaGhYSGhoeGiIaEhISHhoSFh4OEhYSFh4SFhoaFhoSGhoeHhoaHh4mIhoaIh4iKiIWGiIWGh4WHhoeGh4WIiIeHhYaGh4WGhoWChISFhoWFhISEg4SFhIaGhoWGhIaFhoaFhYaGhYSDhISDhIeDhIGChIWDgYCAgHt7fX18fHx+fXx8fH1+fH18fn18fH18fHx8fXx+fXt8gH99fH18fnx8fHp6fHx9iIeChoiHhoeGhoaEhYaFhoaGhYOEhIaFhIiJg4GEg4SGhIaGhoaGhIeHiIiHh4eIioiGh4iHiImIhYiHhIaGhYeHh4WHhoiIh4eGh4aHhYaHhIKEg4SGhYeFhISEhISFhoaGhoaFh4WFh4WGhYaFhIOEg4OEh4GDgIKDhIKCgn+Ae3x+fXx8fH59fHx9fH17fHx7fHx9fXt7e318e359e3x/fX18fX1+fXx6ent7fHyIh4KGh4aGh4aGhYSFhoWFhYWEg4WChoSDiId/enqChYaEhoaFh4aEh4eIiIeHhoiKh4aHh4eIiYeFiIeFh4eGhoeHhYeGiIiHhoWHhoiGhoiEg4SEg4aGh4WFhISEhYaGhoaGhYaHhoaIhoaEhoWDg4ODgoOGgYN+goKDgIOCfn98f35+fHx9f318fX18fnt7e3p7fHx8e3t7fnt7fXt7e358fHx8fX5/fXt6fHp8fImHg4aFhoWGhoaFhIWFhYWFhIOBhIGGhIKEhHyAhn+ChYWGhYWGhYSHh4iIiIaFiYqHhYeGh4eIh4WIhYaHiIaGh4eGh4aIiIeFhoeGh4WFiIOEhoSEhoaHhoWEg4WFhoaGhoaFhoeGhoeHhYOFhYOBgoKBg4WCg36BgoF/hIJ+fn6Afn98fH1/fXt9fXx+enp7eXt8fXt7e3t+fHx8fHp7fXx8fHx+fYF8e3t7e3x8iYeEhoSGhIaGhYSFhoWEhIOEgoCDgYaDgYJ/eoSMe4CEhYeGhoaEhIeIh4aHhYWHiYeEh4WGhoiGhYeEhoeJhoaIh4eHhoeIhoSGhoaHhYWIg4SFhIaGhYeFhYSDhYWGhoeGhoWGhoaFhoeEg4SFgoGCgYCEg4KCfYGBgH+DgX5/f4B9f3x9fX59e359fH15enp5e3x9enp7e318fXx8enp9fHx9fH5+gHt7e3x+fXyIh4WGhYaEhoWFhYWFhYODgYOBgIGBhYJ/gH9/fXx7gYSFhoaEhYSEh4eGhoaFhIaJhoKGhIaGhoWFh4aGiImGhYiHiYeGh4eFhIaFhYaFhIeEhIWEiIaGiIWFhIKFhYaFhoaHhIaGhoWFhoKDg4WAgIGAgISAg4B8gYB+foOAfX9/gX2AfH1+fX57fn18fHl6enl6fX15ent7fHt8e3t6e319fH18f35+fHt7fX59fIiGhYaGhoSFhYSFhYSDgoGAgoGAgICDgX5+f4B5en2Ag4OFh4WEg4OHhoOEhYSChYiFgoSDg4WFhYWHh4aIiIaFiIeJh4aFhYWDhoSFh4OEhoWEhYSHhoaGhYaEgoWFhoaGhoaEhYaGhIWFgoKDhH9+gICAgYCEgHyBf31+gn5+gH6Afn99fX59fnt/fXt6eXp6eXp8fXl6e3t7enx7e3t7fH19fXx/fn18fHx/fnx7h4WFhoaGhoSFhIWDhYKBgICAgYB+f4KCfX1/f3t/f4KDg4WGhYSDg4aDgYOEgoCFh4WCg4GBg4SEhYaGh4eHhYWIhomHhoSEhIKFg4OGgoOFhYSGhIeGhYaFhYODhYSFhoWGhISEhIWDhYSAgIKDf35/f39/gIR/fIB9fX+CfYCBfn6Bfn5+fX1/e398e3p5eXp5ent8eXp6ent7fHp7e3t8fX19fYB9fXx7fYB/fXyGg4aGhYaGg4SChYKFgYGAf3+AgH5/gYF8fn9/fn+AgoKChISDgoGChIGAg4KBgISFhIKBf4CCg4KEhYWHhoaEhYeFh4WGgoOCgoOCgoWBg4SEhYaEhoaGh4aFg4SEg4SFhYWDhIODhIKEhIB/goJ/fX5+fn5/hH57f3x8gIF+gYB9foN8fn59fX57fnt7enl6enl6ent5enp6e3t8enx8e3x+fn1/gHx9fHx9f4B+gIaEhYWEh4SEg4KGgoOAgYB+fn+Afn9/gnx9f35+f3+BgYKEg4KBgYKCf4CBgoCAgoWEgoB/gIGCgYKGhYeFhISGhoOFg4WBgoGBgoGCg4GChISEhYWGh4eFhYWEg4ODhIWFhIGDgYOChIODgH+AgX59fX5+fH6Dfnx+fHyBgX6Cf31/gnx/fn19fHx8e3t6enp6eXt5enp5enp6e3x5e317e35/f4GAfX59fn1/gICAhoOEhYSFgoSCgoSCgYCCgH59fn9+f36AfX2Af35+foGBgoODgoSHgYF+gICBf3+ChIOBf35/gIJ/goWDhYOCg4WFgoSBg4CBgIGAgYKBgIGEg4OGhYWHhoWFhIWCgoKDhYSCgYGBgYCFg4F/foB/fnx8fn18foN9e358fYB/gIN9fYCBf35/fXx8fX17e3p5enl5e3l6enl6ent7e3p7fXx8f3+BgoB+gH9/gH+AgIDKysrKysrKysrKysrLy8vLy8vLy8vLy8zMzMzNzc3Nzc3Nzc3NzczMzMvLy8vLy8vLy8vLy8vLzMvLy8vLy8vLy8vLy8vMzMzMzM3Nzc7Oz8/Pz9DQ0NHR0dLS0tLS0tLT09PT0tLS0tLS0tPT09TU1NTU09PT09PT09PT09PT09PT09PT09PT09PT09PT09PS0tLS0tLS0tLS0tPT09PT1NTV1dXV1dXV1dXV1dXV1dXV1NTU1NTT09PT09PT09PT09TU09PU1NTU1NTU1NTU09PT09PS0tLS0tPT09TU1NTU1NPT09LS0tLS0tLR0dHR0dPHhnNlYFtLWWdVTUZIQD03Nzg5Nzw8PDo8Oz42Oj04PDs6OTg3ODs7Oj87PTs8PD47P0E/QkJBQ0RFREE+PTw7QENDQUBDQ0FBR0hHSUtSwtXS09PT09TU1NTU1NTU1NTU1NXV1dXV1dXV1dXVysrKysrKysrKysrKy8vLy8vLy8vLy8vMzMzMzMzNzc3Nzc3Nzc3MzMzMy8vLy8vLy8vLy8vLzMzMy8vLy8vLy8vLy8vLzMzMzc3Nzc3Oz8/P0NDQ0NHR0tLS0tLS09PT09PT09PT09PS09PT09TU1NTU1NTU09PT09PT09PT09PT09PT1NTU1NTU1NTT09PT09LS0tLS0tLT09PT09PU1NTU1dXV1dXV1dXV1dXV1dXV1dXV1NTU1NPT09PT09PT09PU1NPT09TU1NTU1NTU1NPT09PS0tLS0tPT09PU1NTU1NTU09PT09PS0tLS0tLR0dHSzIxyZ2BcTVllUktHSz87Mzc4Ozg5Pj05PDpBOjs9Nzs8PDo6Nzg6Oz0/Oz88PTw/Pj9BPUFBPkNDREJAQT46Oz9DREFDRERCQklHSEhJTr7V0tPT09TU1NTU1NTU1NTU1NXV1dXV1dXV1dXV1crKy8vKysrKysrKy8vLy8vLy8vLy8vLy8zMzMzMzM3Nzc3Nzc3NzMzMzMzMy8vLy8vMzMzMzMzMzMzLy8zMzMzMzMvLzMzMzc3Nzc3Ozs/P0NDQ0NDR0dLS0tLS09PT09PT09PU09PT09PT09TU1NXV1dTU1NTT09PU1NPT09PT09PT1NTU1NTU1NTU1NPT09PS0tLS0tLS0tPT09PT1NTV1dXV1dXV1dXV1dXV1tbV1dXV1dTU1NTT09PT09PT09PU1NTU09TU1NTU1NTU1NTT09PT0tLS0tLT09PU1NTU1NTU1NTU09PT09PT0tLS0tHR0s+Sd2hfXk9XZ01LRks9ODc2NTk5OTw+OT88Qzk7PDc5PD07OTc5Ojw9QDs+PT47PD48PT5BQD5EQ0NDP0E9Ojs+QkNFQ0NEQT9FSEpJSky61dPT09TU1NTU1NTU1NTV1dXV1dXV1dXV1dXV1dXLy8vLy8vLy8rKysvLy8vLy8vLy8zLy8vMzMzMzMzNzc3Nzc3Nzc3MzMzMzMzMzMzMzMzMzMzMzczMzMzMzMzMzMzMzMzMzc3Nzc3Ozs/Pz9DQ0NDQ0dHS0tPT09PT09PT09TU1NTU09TU1NTU1NTV1dXU1NTU1NPU1NTU09PT09TU1NTU1dTU1NTV1dTU09PT09LS0tLS0tLS09PT09TU1dXV1dbW1dXV1dXV1tbW1tXV1dXV1NTU1NTT09PT09PT1NTU1NTU1NTU1NTU1NTU09PT09LS0tLT09PU1NTU1dXV1dTU1NTT09PT09PT0tLS0dHRmn5nYWJOVWpKSElLPzw6OTM3Njc2PTs+Oj06Ojo4ODo7Ozg4Ojs7PD46PT09Ojw/PD0/QkA/Q0RDRD5APT08QENEQ0JEQkQ+REhJSUtMttfT09TU1NTU1NXV1dXV1dXV1dXV1dXV1dXV1dXVy8vLy8vLy8vLy8vLy8vLy8vLy8zMzMzMzMzMzMzNzc3Nzc3Nzc3Nzc3MzMzMzMzMzMzMzMzNzc3NzczMzMzMzMzMzMzMzc3Nzc3Ozs7Pz8/Q0NDQ0NHS0tLT09PT09PT1NTU1NTU1NTU1NTU1NTV1dXV1NTU1NPT1NTU1NTU1NTU1NTU1dXV1NXV1dXV1NTU09PT09PS0tLT09PT09PU1NXV1dbW1tXV1dbW1tbW1tbW1dXV1dXU1NTU1NTU1NTU1NTU1NTU1NTU1NXU1NTU1NTT09PT09PT09PU1NTU1dXV1dXV1dTU1NTU09PT09PS0tLR0p+DaV9kU1hsSEhIS0A9Nzg0NzY6Oj87RDw8Ojw8OTg6OTo6Ojs8Ojo7OT48Pjk9QDs/QUFCP0JCQUM9Pz8+PEBCRUNDQkBBO0ZJR01MSbLY09TU1NTU1NXV1dXV1dXV1dXW1tbW1tbV1dXW1svLy8vLy8vLy8vLy8vLy8vLy8vMzMzMzMzMzM3Nzc3Nzc3Nzc3Ozc3NzczMzMzMzMzMzc3Nzc3Nzc3Nzc3Nzc3Nzc3Mzc3Nzs7Ozs7Pz8/P0NDQ0NHS0tLS09PT09PT09TU1NTU1NTU1NTU1NTV1NXV1dTU1NTU1NTU1NTU1NTV1NTU1dXV1dXV1dXV1dTU1NTU1NPT09PT09PT09PU1NXV1dbW1tbW1tbW1tbW1tbW1tbV1dXV1dTU1NTU1NTU1NTU1NTV1NTU1NXV1dXU1NTU1NTT09PT09PT1NTU1dXV1dXV1dXU1NTU1NTT09PT09LS0tSjiGxfZlJWakdIR0lBPTM2Njo7PDhDPEFBPjxBPDg5Ojw6Ojw8PDk8PTo7PD09PD89QD9AQT9AQUBCPD4+PzxCQ0NDRkBBQT1ISklOTUeu2NPU1NTV1dXV1dXV1dXV1dbW1tbW1tbW1tbW1tbLy8vLy8vLy8vLy8vLy8vLy8vMzMzNzc3Nzc3Nzc3Nzc3Nzc3Nzs7Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Ozs3Nzc3Nzc3Nzc3Nzs7Ozs7Oz8/P0NDQ0NHR0dLS0tPT09PT09TU1NTU1NTU1NTU1NTU1NTV1dXV1dTU1NTU1NTU1NTU1dXV1dXV1dXV1dXV1dXU1NTU1NTU1NTT09TU1NTU1NXV1dbW1tbW1tbW1tbW1tbX19bW1tXV1dXV1dXV1dXV1dTU1NTU1dXV1dXV1dXU1NTU1NTU09PT09PT1NTU1NXV1dXV1dXV1dXV1NTU1NPT09PT0tLWroprY2VSWGhMSkdJQjg0OTQ6Ozo5QDk+Q0U/PDs5OTk9Oj07PDw6PTw7OTw9Ozs/PUA9PT5AQD9CQT5APD05QERDQkFBQj48SEpLTU5HqNnU1NXV1dXV1dXV1dXW1tbW1tbW1tbW1tbW1tbWy8vR09PT09PT09PT09PT087Ky8vLzMzMzMzMzMzMzM3Nzc3Nzc7Ozs3Nzc3Nzc/Pz8/Pz8/Pz8/Pz9DQ0dHR0dHR0dHR0dHS0tHV2djY2NnZ2dra2tvb29vZ2dnZ2dna2tra2tra2tjW19fX19fX19jX2NfX19rb2tra2tra2tvc29vc2dfX19fX19fX1tbW1tbX2tva2tra2tra2trb3NzX1dXV1dXV1dXV1dXW1tbX1tbW1tbV1dXV1dXV1dXV1dTU1dXV1dXV1dXU1NTU1NTU1NTU09PU1NTU1NXV1dXW1dXV1dXV1dTU1NTT09PT09PS1bqKa2hoUlhkSUlMTkA5OTo0O0A8Nz05QUM9QD89ODo6Ozk9Oz4/Ojs8PDo7PDo7Pj1APT8/P0FAQUE/QTw8Oz5BRENBREA9PElJSk1NRqPa09TV1dXV1dXV1dXW1tbW1tbW1tbW1tbW1tbW1svMg21wcHBwcHBwcHBwcGqn493d3t7e3t7e3t7e3t3S0NDQ0NDQ0NDQ0NDQ0ci5ubm5ubm5ubm5ubq6t6WkpKSkpKSkpKSkpKSnhmBjY2NjY2NjY2NkZGRlhIuKioqKioqKioqKioemuri4uLi4uLi4uLi4ubSNi4uLi4uLi4uLioqKiKG/vb29vb29vLy8vLy9tIuKioqKioqKioqKiouHvebh4uLi4uLi4uLj4+Pi2NfX1tbW1tbW1tbV1dXV1dXV1dXV1dbW1dXV1dXV1dTU1NTU1NTU1NTV1dXV1dXW1dXV1dXV1dXV1NTU1NTT09PT09XDkXJsaU5SYkxMVk08Ojo3Nz5DPzg+Oj8/QTw/QDc7Ojs7PTs+Pjo7PD48Oz07PT8+QDw/Pz1AQEBBPj88PjxAQUVCQkZAQD9HSEpLUEae2tXV1dXV1dXW1tbW1tbW1tbW1tbW19fX19fX19fLzU4mKysrKysrKysrKysiivTr6+rq6urq6urq6uvp1dLS0tLS0tLS0tLS0tTEqaqqqqqqqqqqqqqqq6aGhIWFhYWFhYWFhYWFik4MEhISEhISEhISEhIRE0pUU1NTU1NTU1NTU1NPg6ejo6Ojo6Ojo6Ojo6ScWFJTU1NTU1NTU1NTU056rqqqqqqqqqqpqamprJtUU1NTU1NTU1NTU1NTS6ry6+vr6+vr6+vr6+vr6dnX19fX1tbW1tbW1tbW1dXV1dXV1dbW1tbV1dXV1dXV1dXV1dTU1NTV1dXV1dXW1tXV1dXV1dXV1dXU1NTU1NTU1NPUy5h3bGlKTl9NUlVNPjw8Nzs/Qz42Ojc+Pzs9QkA5PDk9Ozw6PD07PTs9Ozs9PD0+PT07QT08QUBBQT08Pzw7QEJDQURFPUFAQ0ZLS09GmNzV1dXV1dbW1tbW1tbW1tbW1tfX19fX19fX19fXy81SLDExMTExMTExMTExJ43z6enp6enp6enq6unq6dXS0tLS0tLS0tLS0tLUxaqrq6urq6urq6urq6yoiIeHh4eHh4eHh4eHh41SEhgYGBgYGBgYGBgYFxpOWVdXV1dXV1dXV1dXU4WopKSkpKSkpKSkpKSmnlxWV1dXV1dXV1dXV1dTfbCrq6urq6urq6qqqq2dWVhYV1dXV1dXV1dXV0+r8erq6urq6urq6urq6unZ19jX19fX19fX1tbW1tbW1tbW1tbW1tbW1tbV1dXV1dXV1dXV1dXV1dXV1dXW1tbW1tXV1dXV1dXV1dXU1NTU1NTU1NGcenFpSlRdT1JVTkQ+Pzs/QEA4Ojs4PDw8Oz46Ojs4Ozk5Ozw7Ojw5Ozs8Ozo9PT0+PUE/Pj8/Pj08PT88PEFBQ0FERTw+QEVGSktNRpPc1dXV1tbW1tbW1tbW1tbW1tfX19fX19fX19fX18zOXDk9PT09PT09PT09PTWT8Ofn5+fn5+fn5+fn5+bV0dLS0tLS0tLS0tLS08Wtrq6urq6urq6urq6vq46NjY2NjY2NjY2NjY2SXSInJycnJycoKCgoKCcpWmNiYWJhYmJiYmJiYl6MrKmpqampqampqampqqJmYWJiYmJiYmJiYmJiXoWzr6+vr6+vr6+vr6+xoWNiYmJiYmJiYmJiYmJbr+/p6enp6enp6enp6enn2djY2NjY19fX19fX19fX19fX19bW1tfX19fW1tbW1tbV1dXV1dXV1dXV1dXV1tbW1tbW1tbW1tbV1dXV1dXU1NTU1NTWo3txZElbYE5OVU9AQT89REI+Oz06OTo6PTw7PDs6OTg5OTs8Ozw8Ojo7PDo7QD08PTxAQTxBQTs7PEA/PD1CP0RDQ0U8PkJERkpMTEWN3NXV1tbW1tbW1tbW1tbX19fX19fX19fY2NjY2NjMzcTCw8PDw8PDw8PDw8PCydDPz8/Pz8/Pz9DQ0NDQz87Ozs7Ozs7Ozs7Ozs7Ny8zMzMzMzMzMzMzMzMvJycrKysrKysrKysrKysfCw8PExMTExcXFxsbGxsvMy8zLzMzNzMzMzMzLz9HR0tLS0tLS0tLS0tLRzczMzMzMzMzMzMvLy8vO0tLS0tLS0tLS0tLT09HMzc3Nzc3Nzc3Nzc3NzdTY2NnZ2dnZ2dnZ2dnZ2djY2NjY2NjY2NjY2NfX19fX19fX1tfX19fX19bW1tbW1tbW1tXV1dXV1dXV1dbV1dbW1tbW1tbW1tXV1dXV1dTU1NTU169/cF5GXmJQUVdOR0ZDQ0lBPz07PDo8N0BBPD04Ojs4OTg7Pzs8PDs7PDw8PD87PD46Pj44PkI8Pj1BPjw+QkBERUNAPD5APkNJSUtEh9zV1tbW1tbW1tbW1tbX19fX19fX19jY2NjY2NjYzc3P0NDPz8/Pz8/P0NTQ0M7MzczP09LSzs3P0s7Ozs7Ozs7O0tPPz9DU0s/Pz9PSz8/Pz8/Pz8/Pz8/Pz8/P0NDQ0NDR0dHR0dHS09PU1NTU1dXV1tbW1tfW1tbX1tfX19fX19fX19bW1tbW1tbW1tbW1tbW1tfX19fX19fX1tbW1tbW1dXW1tbW1dbW1tbW19bW19jY2NjZ2dnZ2dnZ2dnY19jY2NjY2NjY2NnZ2dnZ2dnZ2djY2NjY2NjY2NjY2NjX19fX19jY19fX1tbW1tbW1tbW1tbW1tbW1dbW1dbW1tbW1tbW1tbW1tXV1dXV1NTV1di4gm9XSl9jUlFaS0hBQTxCPT07Oj4+PD4/PT0/ODk6OTk3OD48PD47Ozw7PDs/PT0+OTs7OT0+P0A+QD07OkI/QkNCPz0+QD5CRUdKQoDc1tbW1tbW1tbW19fX19fX19fX2NjY2NjY2NjY2M7Ozs7Ozs7Nzc3Nzsqfys3Nzc3QuYOEi8fTwJrLz87Ozs7O0qucz9HIlKfS0ceSq9HOzs7Ozs7Ozs7Ozs7Oz8/Pz8/P0NDQ0NDQ0NDR0dHR0tLT09PU1NTU1NTV1dXV1dXV1dXV1dXV1dXV1dXW1tbV1dXV1dbW1tbV1dXV1dXV1NTU1NXV1dXV1dXV1dXW1tbW1tbW1tbX19fX19fX19fY2NjY2NjY2NjY2NnZ2dnZ2dnZ2dnZ2dnY2NjY2NjY2NjY2NjY2NjY2NfX19fX1tbW1tbW1tbW1tbW1tXV1tbW1tbW1tbW1tbW1tbW1dXV1dXV1dXYwIBuVU9gY1dZW0xMQkA9PTw9Ojw9Qj5CQkA8Ojg5ODo6Ojc7Pz4/PDw7PDo5Pzw8PTg5PD9BPj09PUFAPTtBQkBCQz47QD9BQUlHSkF629bW1tbW1tbX19fX19fX19jY2NjY2NnZ2djY2dnOzs7Ozs7Ozs7OzdKpj63Rzs7Ozpu3tqSiwJOerNPOzs7O0racpaTRmqycsNGZrJqy0s7Ozs7Ozs7Ozs7Pz8/Pz8/Pz9DQ0NHR0dHR0dHS0tLT09TU1NTU1dXV1dXV1dXV1dXV1dXV1dXV1dXW1tbW1tXV1dbW1tbW1tXV1dXV1dXU1dXV1dXV1dXW1tbW1tbW1tbW1tfX19fX19jX19fY2NjY2NjY2djY2dnZ2dnZ2dnZ2dnZ2dnZ2djY2NjY2NjY2dnY2NjZ2NjY19fX19fX19bW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tXV1dXV1dXV18h/b1pTYWVeXVxPSkQ9QD8+PDc6Pjk/RD5AOTg3ODk7Ozw4OT89PTw9PD47OkE7OTs5OzxDQDw7PT5AQT49QkQ/QkM9PT8+Pz5ISUg/ddrW1tbX19fX19fX19fX2NjY2NjZ2dnZ2dnZ2dnZzs7Ozs7Ozs7Ozs/Inrym0tDQzsqgl36Cw6abr6fUz8/Pz86dnJGevJWInJ7EkoadnM3Pzs7Ozs7Ozs7Oz8/Pz8/Pz8/Q0NDR0dHR0dLS0tPT09TU1dXV1dXV1dXV1dXV1dXV1dXV1dXV1tbW1tbW1tbV1dXV1dXW1tbV1dXV1dXV1dXV1dXW1tbW1tbW1tbW1tbW1tfX19fX19jY2NjY2NjY2NjY2NjZ2dnZ2dna2dnZ2dnZ2dnZ2dnZ2djY2NjY2NnZ2dnZ2dnY2NjY2NfX19fX19fX19bW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1dbV1dXV1dfNiHNdWGloXl9gT0lGOkFAPj48PDk2P0I/Qjo2NDg6Ozo8Ojk+PD49PTs/PTxBPjw8Ojw8PTw6PEA9QEI+PkFCPUNDPT0+Oz9BRUtIQHDZ1tbX19fX19fX19fY2NjY2NjZ2dnZ2dnZ2dnZ2c/Pz8/Pz87Ozs7SrKWnqdXAvNLHnY+ey9PJipmq1M/Pz9G/mKCbsq7ByZiYxbzJl5nF0M/Pz8/Pz8/Pz8/Pz8/Pz8/Q0NDQ0dHS0tLS09PT1NTU1dXV1dXV1dbW1tbW1dbW1tbW1tbV1tbW1tbW1tbW1dXV1dXV1dXW1dXV1dXV1dXV1dXW1tbW1tbW1tfX19fX19fX19fX19jY2NjY2NjY2NjY2NnZ2dnZ2dnZ2tnZ2dnZ2dnZ2dnZ2dnZ2dnY2dnZ2dnZ2dnZ2dnY2NjY19fX19fX19fX19bW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbV1dXW0JB1W1tqaWFeXVNOSTxDQEE+QD46OEVAP0I6NzQ5Ojo5Ozs4Oz0/Pj49QT08P0A9Pjw8PDw8Oj1AQD8/PT5CQD9AQkA8QD0+QUVLRz9r19fX19fX19fX2NjY2NjY2NjZ2dnZ2dnZ2dnZ2tnPz8/Pz8/Pz8/QzJ2Nl6zQmpfKxZ6ynpbN1q2ZqtTPz8/TtJmWqrik1pSWn87Rkpmhz9DQ0M/Pz8/Pz8/Pz8/Pz8/P0NDQ0dHS0tLT09PT1NTU1NXV1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbV1dXV1dXV1dXV1dXV1dXV1dXW1tbW1tbW19fX19fX19fX19fY19fY2NjY2NjY2NjY2NjZ2dnZ2dnZ2drZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2djY2NjY2NfX19fX19fW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1dXV1tKUcl5ea2tqZV1PTEc/RENDQDo9OzxCPD08OTY0Ojk4Ojo5Nzs/QDs8PUA8PEE+PD07PTw/PDo8Q0A+PTs9QD5CPkBBPkA9QD9GSUQ/ZtXX19fX19fY2NjY2NjY2NnZ2dna2tra2tra2traz8/Pz8/Pz8/P07GigJuvyqCjv8qcpYynrdiqmarUz8/P1KuafqOPpLOfw5varaO/ntXR0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NHR0tLT09PT1NTU1NXV1dbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1dXV1dXV1dbW1tXW1tbW1tbV1tbW1tbX19fX19fX19fX19fY2NjY2NjY2NjY2NjY2NjY2dnZ2dnZ2dna2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2djZ2djY2NjY2NfX19fX19bW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbSk3BgXnBoZmVaUUhHQkVDQEA3Ojo8Pjk8OTc2NTk6Njo8Ozc8QEA8Ojo9Ojw/Pj08OUA8PDo6OT9APT08PUBBQz9APz5BOz9ARkpCP2LS2NfX2NjY2NjY2NjY2dnZ2dnZ2tra29vb29vb28/Pz8/Pz8/P0M6fkGyclteqo9PSrqa1mJ/Vqpmq1M/Q0NSsm6eLlaHQipKex8uIlZ7I0tHR0NDQ0dHQ0NDQ0NDQ0NDQ0NHR0tLT09PT1NTU1dXV1dbW1tfX19bW1tbW1tbW1tbX1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tfW1tfX19jY2NfX19fX2NjY2NjY2NjY2NnZ2dnZ2dnZ2dnZ2dna2tnZ2dnZ2dnZ2dnZ2dnZ2dnZ2djY2dnZ2dnZ2dnZ2dnZ2NjY2NjY2NjX19fX1tbW1tbW1tbW1tbW1tbX19fX19fW1tbW1tbX0pNuYFxxZGdkWlVKQENHREFBODs/PD07PDw3NTU4OTY4Ozo5PDo+Pzw9PTk8Pz49Ojo+OTw6Ojg+Pzw9PTw+QEFDQT48PDpCRERKRkJd0NnX19jY2NjY2NjY2dnZ2dna2trb29vb29vb29vPz8/Pz8/Pz9G9n8O31pfA09HQ0srSzZeb1KqZq9XRz9DTtrKypZmq0dulmbPQ26OZtdXR0dHR0dHR0dHR0NDR0dHR0dHR0tLT09PU1NTV1dXV1tbW1tfX19fX19bW1tbW1tfX19fW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW19fX19fY2NjY2NjY2NjY2NjY2djZ2dnZ2dnZ2dnZ2dnZ2drZ2tnZ2dnZ2dnZ2dnZ2dnZ2djY2NjY2NjZ2dnZ2dnZ2dnZ2dnY2NjY2NjY2NfX19fX19fX19fW1tfX1tbX19fX19fX19fX19bW19GSbF1cb2doYl1PRj9ISEZFQDw8Pj48PT08NzU2Ojk2Ojs6Ojs4QD86PDw5PD49Ozs6Pzk/Ojs5PT49Pjw7PTxAQ0I/Pz47Q0ZGR0hEWc3a2NjY2NjZ2dnZ2dnZ2dna2trb29vb29vb29vb0NDQz8/Pz8/Pz5V+e6WS1KKa08ySl6ObodirmavV0pem1cSimZadq5KnmqCtkKeYnrvV0dHR0dHR0dHR0dHR0dHR0tLS0tLS09PU1NTV1dXV1tbW19fX19fX19fX19fX19fX19fX1tbW1tbW1tbW1tbX19bW1tbW1tbW1tbW1tbW1tbW1tbW1tfX19fY2NjY2NjY2NjY2NjY2dnZ2dnZ2dnZ2dnZ2dnZ2tra2tra2tnZ2dnZ2dnZ2dnZ2djY2NjY2NjZ2dnZ2tnZ2dnZ2dnZ2djY2NjY2NjY2NjX19fX19fX19fX19fX19fX19fX19fX19fX1tfPjGRWXnBrXGBgTkVITUlJT0M+OkI9PUBCOzU1Nzw6Nzo7Ojo7OT09OTo6OT0+Pz07OT47PDo8Ozk+PD47PD0+QENCPz5BPEFDR0ZGRVXJ29jY2NnZ2dnZ2dnZ2dra2tvb29vb29zc3Nzc3NDQ0NDQ0M/Pz9DR1aeZrcmjqL7KnbGdo7XZqZup2LiroMfVoquknbGkpaigr6eiqZ3Q09LS0tLS0tLS0tLR0dHS0tLT0tPT09PU1NTV1dbW1tbX19fX19fX19fX19fX19fX19fX19bW1tbW1tfX19fX19fW1tbW1tbW1tbX19fW1tbW1tbW1tbX19fX2NjY2NjY2NnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dra2tra2tra2trZ2dnZ2dnZ2dnZ2djY2NjY2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnY2dnY2NjY2NjX19fX19fX19fX19fX19fY2NfX19fX19fYzYZdV2JvZE9dVEtIRlNRS0tAPj1EPD9DRj01NTc7OTY6Ozo8PTo7Pzo6OTg6PT0/Pjs/Oz49Ojs5Pjs9PD0+QURCQD8+PzxAQUVHRURSxdvY2dnZ2dnZ2dnZ2tra2tvb29vb3Nzc3Nzc3NzQ0NDQ0NDQ0NDQ0NO5gL3Tm5bP1LWLkZ/T1LyBu9TOlKDT08iRjbTWnZKNutWako6+1tLS0tLS0tLS0tLS0tLS0tLT09PT09PU1NXV1dbW1tfX19fX19fY2NjY19fX19fX19fX19fX19fW1tbX19fX19fW1tbW1tbW1tbW19fX1tbW1tbW1tbX19fX19jY2NjY2NnZ2dnZ2dnZ2dnZ2tnZ2tra2tra2tra29ra2tra2tnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2NjY2NjX19fX19fX19fY2NjY2NjY2NjY2NfX2ct+WlVpaltMX01KTEpVTEZCPDw/RkVHS0g9NjY3Ojk3OTo7Ojw9OT45OTo4Oz0+PkE+PTk8PDo9Pj47PTk5Oj9FQUA+PT8/QkBHRURFUMHc2dnZ2dnZ2dna2trb29vb29vb3Nzc3Nzc3dzc0NDQ0NDQ0NDQ0NDQ0cHR0crI0tDUxLjS0tHSwtLQ08fM0tHUyMHV09O5x9XT07nI1dLS0tLS09PT09PT09LS0tPT09PU1NTU1NXV1dbW1tfX19fX19fX2NjY2NjX19fX2NfX19fX19fX19fX19fX19fX1tbW1tbW1tbW1tfX1tbW1tbW1tbW19fX19fY2NjY2NjY2dnZ2dnZ2dnZ2dra2tra2tra2tra29va2tra2tra2dnZ2dna2tnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dna2tnZ2dnZ2dnZ2djY2NjX19fX19fY2NjY2NjY2NjY2NjY19rHd1xSZ2laTlpOTFBRV0VKPz89P0FETExAPjc3NTo4ODk5Ojs8Pjw+ODo6OTs+P0A9Pj46NTo6Oz0/Ojs5Ojw+QkJAPz8/P0FCR0RDRE683dnZ2dnZ2dna2tvb29vb29vb3Nzc3Nzc3d3d3dDR0dDQ0NDQ0NDQ0NDS0NDR0dDQ0dPU0dHR0dPR0dHS0tHR0dPU0tLS1dTT09PW1NLS0tPT09PT09PT09PT09PT09PU1NTU1dXV1dbW1tfX19fX2NjY2NjY2NjY2NfX19jY19fX19fX19fX19fX19fX19fX1tbW1tbW1tbX19bW1tbW1tbW1tfX19fX2NjY2NjY2NnZ2dna2tra2tra2tra2tra2tra2tvb2tra2tra2trZ2tra2tra2tra2tra2tnZ2dnZ2dnZ2dnZ2trZ2tra29ra2trZ2dnZ2dnZ2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjbwXNYVWlrU0xSTlBSWVRGSTw+Qz9BQkVKPT03ODY5Nzc4OTk7Oz0/QDw9ODk7Ozs/Pjw8OTU6PT47OTk7PD8/P0JCQT1BPUBBQkZCQkJLtd7Z2dra2tra2tvb29vb29vc3Nzc3Nzd3d3d3d3R0dHR0dHR0dHR0dDQ0NDQ0NDQ0dHR0dHR0dHR0dHR0dHS0tLS0tLS0tPT09PT09PT09PT09PT09TU1NPT1NTU1NTU1NXV1dXV1dXW1tbX19fX2NjY2NjY2NjY2NjY19fY2NjX19fX19fX19fX19fX19fX19fX19fW1tbX19fX1tbW1tbW1tbX19fX19jY2NjY2NnZ2dna2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tnZ2dnZ2dnZ2NjY2NjY2NnZ2dnZ2dnZ2NjY2NjY3LxvVFRsbExLUkpUUlVLRkQ6PkdEREFERjw/ODk6OTU5OTo3PD07PkA9PTc5Ojs5Pjs5OTY2Oj1AQT47PDk6Pj9DQT4/Qj0+QkNFQkFCSrDe2dra2tvb29vb29vb29vc3Nzc3Nzd3d3d3d3d0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0tLS0tLS0tLS0tLS0tLS0tPT09PT09PT09PT09PT1NTU1NTU1NTU1NTU1dXV1dXV1tbW1tbW19fX19jY2NjY2NjY2NjY2NjY2NjY2NjY19fX19fX19fX19fX19fX19fX19fX19fX19fW1tbW1tfW19fX19jY2NjY2NjZ2dnZ2dra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2trZ2dnZ2dnZ2djZ2dnZ2dnZ2dnZ2dnZ2dnY2Ny2a1NbcGtLVVdSXFFXSEQ+PEJKRT1ISj89PDc4ODo1OTg5Njs+PD1APDw1OTk8Oj87OTk0ODw9PUFBPD47Ojw+QD89PkE9PUNGR0I/Qkmq39ra29vb29vb29vb3Nzc3Nzc3N3d3d3d3d3d3dHR0dHR0dHR0dHR0dHR0dHR0dHS0M/U0M7P0tLT0tLS0tLS0tLS0tPT09TU1NTU1NTU1NTU1NTU1NTU1NTU1NTV1dXV1dXV1dbW1tbW19fX19fY2NjY2NjY2NjY2NjY2NjY2NjY2NjX19fX19fX19jY2NfX19fX19fX19fX19fX19fX19fX19fX19jY2NjY2NjY2dnZ2dra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tvb29va2tra2tra2tra2tra2tra2tnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dndsGRTYXJfT1pUV19RUkdCPUVJS0FBTEQ/Pzs5ODg5Mzg2ODY5Pj0+Pz06Njo7Pjs9PTo5Njg6PTtAQDxAPz0/P0I+PD48PEJFSElCPkNJpODa29vb29vb3Nzc3Nzc3Nzc3N3d3d3d3d3d3t7S0tLS0tLS0tLS0dHR0dHR0dPT0bm7zLqbnLrQyNPT0tLS09PT09PT09PU1NTU1NTU1NTU1NTU1dXV1dXV1dXV1dXV1dbW1tbW1tbX19fX19fY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjX19fX19fX19fX19fX19fX19fX19jY2NjY2NjY2NjZ2dra2tra2tra2tra2tra2tra2tra2tra29va2tra29va2tvb2tra2tra2tra2tra2trb29vb29va2tra2tra2tra2tra2tra2tra2tnZ2dnZ2trZ2dnZ2dnZ2dnZ2dnZ3qpfVWBuW1VZUVpeT0xHQ0ZNSUZEQ0k7QUE7PDg4NjU4Njk4Nzw/QT89Ojc8Pz48Pz87OjY4OD09QEE9QD5BQD1AOjs6Pj1BRUdKQkBDR57h29vb29vc3Nzc3Nzc3Nzc3d3d3d3d3d7e3t7e0tLS0tLS0tLS0tLS0tLS0tO+wMqaoKKViJGeqpOpz9TT09PT09PT09PU1NTU1NTU1NTU1NTV1dXV1dXV1dXV1dXV1tbW1tbW1tbX19fX19fY2NjY2NnZ2dnZ2dnZ2dnZ2djY2djY2NjY2NjY2NjY2NjY2NjY2NjX19fX19fX19fX19fX19fX19fY2NjY2NjY2NjZ2dna2tra2tra2tra2tra2tra2tra29vb29vb29vb29vb29vb29vb29ra2tra2tra2tra2tvb29vb29va29vb29vb29va2tra2tra2tra2tra2tra2trZ2dnZ2dnZ2dnZ2d6iXFVeblheXU5aUFROQ0NMSUlJRklEPEFBPDs4NzY3OTc3OTk9P0E/PDo5QD88PkI/Ojg3NzY9P0BAPUBBPz88PTs7OD48P0VJSEE/Q0aX4dvb29zc3Nzc3Nzc3N3d3d3d3d3d3t7e3t7e3tPT09PT0tLS0tLS0tLS0tTIlZyum5m1iX2TjIKBhMTV09PT09PT09PU1NTU1dXV1dXV1dXV1dXV1dXV1dXV1tbW1tbW1tbW1tfX19fX19fX2NjY2NjY2dnZ2dnZ2dnZ2dnZ2dnZ2NjY2NjY2NjY2NjY2NjY2NjY2NfX19fX19fX19fX19fX19fX2NjY2NjY2NjY2dnZ2dnZ2dna2tra2tra2tra2tra29vb29vb29vb29vb29vb29vb29vb2tra2tra2tra2tvb29vb29vb2tvb29vb29vb2tra2tra2tra2tra2tra2tra2tra2tra2tnZ2dndmlpYYW5ZYVdPV01QRUJETElNS0ZJRT5CRDg4ODY3OTc1Njk4PT1BPjo4OT4+PD9APzw1Njc2PD4/PjtAQEA/Pj4/Pjs/PkFCRkdCQENIkeLb29zc3Nzc3d3d3d3d3d3d3d7e3t7e3t7f39/U09PT09PT09PT09LS0tLTz6h+kayPko6MhoCIiYSQo8rU09PT09PU1NTU1dXV1dXV1dXV1dXV1dbW1tbW1tbW1tbW1tbW19fX19fX19fX2NjY2NjY2dnZ2dnZ2dnZ2dnZ2dnZ2dnY2NjY2NjY19jY2NjY2NjY2NjY2NjX19fX19fX19fX19fY2NjY2NjY2NjY2NnZ2dnZ2dna2tra2tra2tra2tra29vb29vb29vb29vb29vb29vb29vb29ra2tra2tra2tvb29vb29vb29vb29vb29vb29va2tra2tra2tra2tra29vb29ra2tra2tra2tna3JJaWWNuWlpSVV5QTDxAR05IUklIRT48SEY4OTc1Nzg3NTg5ODs+Pj07ODlBPj1AP0E+NzU5Njs+QUI/P0BAQUI/Pj8+QUBEQUZIQj9FSozi3Nzc3Nzc3d3d3d3d3d3e3t7e3t7f39/f39/f1NTU09PT09PT09PT09PWtaWaiIuQhYCFi4iBg4qLf4bC1tTU1NTU1NTV1dXV1dXV1dXV1dXW1tbW1tbW1tbX19fX19fX19fX2NjY2NjY2NjY2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2djY2NjY2NjY2NjY2NjY2NjY2NjY2NjX19fX19fX19fY2NjY2NjY2NjY2dnZ2dna2dra2tra2tra2tra2tra2tvb29vb29vb29vb29vb29vb29vb29vb29ra2tra2trb29vb29vb29vb29vb29vb29vb29vb2tra2tra2tra29vb29vb29vb29vb2tra29uIWltnalxYTFpfVkg6TEhMSkpDREVDQUxINzo3Njc4ODU4Nzg5PDw7Ozk4QD89Pj8/PDY3PDQ3P0JCQUBAPz8/QT09P0A+QEBGRT09REuI4tzc3Nzd3d3d3d7e3t7e3t7e3t/f39/f39/f39TU1NTU1NPT09PT09PUxZKCg4WGfYGCfXx5foGCg36k29bU1NTU1NTV1dXV1dXV1tbV1tbW1tbW1tfX19fX19fX19fX19fX19jY2NjY2NjZ2dnZ2dnZ2dna2tnZ2dnZ2dnZ2dnY2NnY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjX19fX19fY2NjY2NjY2NjY2dnZ2dna2tra2tra2tra2tra29vb29vb29vb29vc3Nzc3Nvb29vb29vb29vb29vb2tra2tra29vb29zb29zb29vb29vb29vb29vb29vb29va2tvb29vb29vb29vb29vb29vb2tvZgFpebWhaU0ldW1hKRE1ISlNMR0ZBQD9KQjg7NjY5OTc1ODY4Ozo7Ojw5OD09O0A9Ozo2NTw3Oz1CQEFBPD49QEE9PEA/Pz5CREU+PERLg+Lc3d3d3d3d3t7e3t7e3t7f39/f39/f39/f39/V1dTU1NTU1NPT09PT2LKEkKh9g3l2hIh/e3d5gn5+i67A1dTU1NXV1dXV1tbW1tbW1tbW1tbW1tfX19fX19fY2NjY2NjY2NjY2NjY2NjZ2dnZ2dnZ2dna2trZ2dnZ2dnZ2dnY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2dnZ2dna2tra2tra2trb2tra2tvb29vb29vb29vc3Nzc3Nzc29vb29vb29vb29vb29va2trb29vb29zc3Nzc3Nvb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vc1nlcWmxmWFJPYFFSQUhHSkZYTEZAQENDSz87Ozc4ODc2NTc2ODo5PDw6PTs/PTs9Pjw7ODg8OT0/QkFCQzw8P0FCPj1BQkNCREVDQDtDTH3h3d3d3d3e3t7e3t7e39/f39/f39/f39/g4ODg1dXV1NXU1NTU1NPU0ruen3WKeXuIgICChYGDcnOAhYOMrNfV1NXV1dXW1tbW1tbW1tbW1tbW19fX19fX2NjY2NjY2NjY2NjZ2dnZ2dnZ2dnY2NnZ2dna2tra2trZ2dnZ2dnZ2djY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2dnZ2dna2tra2tra29vb29ra2trb3Nzc3Nzc29zc3Nzc3Nzc3Nzb29vb29vb29vb29rb29vb29vb29zc3Nzc3Nzc3Nvb29zc3Nzc3Nvb29vb29vb29vb29vc3Nzc3Nzc3Nvb29vb3dByXV9wZVdLUGNPS0JHQ0pIS0ZBPEE9SFFBOjo3Nzg3Njc4Nzw6OD09PD47QD88Pz07Ojs5Ojk8QEJAQkNAPUFAPz1AQkNDQUBAP0A7RU144N3d3d7e3t/f39/f39/f39/f3+Dg4ODg4ODg4NXV1dXV1dXV1NXU18h4i4V8goh6g4SBfoKCc2l0hYuGkJ3U1tXU1dbW1tbW1tbW1tbW19fX19fX19jY2NjY2NjY2NjZ2dnZ2dnZ2dnZ2dnZ2dnZ2dra2tra2tra2dnZ2dnZ2dnY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2dnZ2dna2tra2tra2tra2tvb2tvb3Nzc3Nzc3Nvc3Nzc3Nzc3Nzc29zb29vb29vb29vb29vb29vb29vc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc29vb297KalxjcWVST1heSz9HTElPS0VAPkFCP0lPPjk6NzY7NzY6Ozc7Ojg6PDw+Oz09Oz48Ojs4OTo4OUFCQkFAQDtAQj06PkFCQz8+PT4/PUZOdN/e3t7e3t7f39/f39/f4ODg4ODg4ODg4ODg4OHV1dXV1dXV1dXV1s6dhpl+f5OTin+CgXx9gnNxm4mAgoOJwNnat7TQ19bW1tbX19fX19fX19fX2NjY2NjY2NjY2NjZ2dnZ2dnZ2dnZ2tnZ2dnZ2dra2tra2tra2trZ2dnZ2dnZ2dnZ2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NnZ2dna2tra2tra2tra2tra29vb3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nvb29vb29vb29vb29vb29vc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3NvfwGNaW21gVlBTU0pETEhNSEk8PkFEQ0ZORDw8OTc5OjY4Ozk3PDk4OTw9OzlAPjpBPzw3NTc7ODpAQUVBPz45PUI/Oz1CQkI6Pj07PT5GTnHe3t7e3t/f39/f39/g4ODg4ODg4ODg4OHh4eHh1tbW1tbW1tbV1tjLioCHhYOXjHh7e3lvfYF1a3ebdHZ7eInHxpiMrdjZ19fX19fX19fY2NjY2NjY2NjY2NjY2NjY2dnZ2drZ2dna2tra2tra2tra2tra2tra2tra2dnZ2dnZ2dnZ2dnZ2dnZ2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NnZ2dnZ2dnZ2dna2tra2tra2tra2tra29vb3Nzc3dzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nvb29vb29zb29vb3Nzc3Nzc3Nzd3dzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3d3d3d3d3Nzc3Nzc4LdjV1lrYlJNVVFMSktGS0ZDQD5CQT9FTT4+PTg5OTo3OTo3NT03Nzo+PDs7Qjw5Pz05NjY4PTk6QEJGQD49PEBCREA9QD9DO0A9PD4/Rk9t3N/e3t/f3+Dg4ODg4ODg4ODg4OHh4eHh4eHh4dbW1tbW1tbW1tfVrYZ6d32rn3l4entzdH+Dfm9xe3l6c3t2k4qFgImkzdnY19fX2NjY2NjY2NjY2NjY2NjY2NjY2NnZ2dna2tna2tra2tra2tra2tra2tra2tra2tnZ2dnZ2dnZ2dnZ2dnZ2dnZ2djY2NjY2NjY2NjY2NjY2NjY2NjY2dnZ2dnZ2dnZ2dra2tra2tra2tra29vb29vc3Nzc3N3d3d3c3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc29vb29vc3Nzb3Nzc3Nzc3N3d3d3d3d3d3dzc3Nzc3Nzd3d3c3Nzc3Nzc3N3d3d3d3d3d3d3d3dzc3OGtYVtebGJSTVZMTUdLS0RGQkI7QT08RUxCQT44Ojk6Nzc5NjY6NTs+QDs9Oz89PD89Ojk5Ojw5PEVDRkA/PkBDQkQ9OT0/QT1CPz1APkdPadvf3t/f3+Dg4ODg4ODh4eHh4eHh4eHh4eHi4uLW1tbW1tbW1tfQmH+Qh4N9eoN2e3Vzenl6kKqmd3JyfoeHh4CAfoKEhJHJzNnX19jY2NjY2NjY2NjY2NjY2NjY2NnZ2dnZ2tra2tra2tra2tra29va2tra2tra2tra2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2djZ2dnZ2dnZ2djY2NnZ2dnZ2dnZ2dnZ2tra2tra2tra2tra29vb29vb3Nzc3N3d3d3d3d3d3d3d3d3d3d3c3Nzc3Nzc3Nzb29vb3Nzc3Nzc3Nzc3Nzd3d3d3d3d3d3d3dzc3N3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3NzhpV9UYm1iUE9TSUhHRkpJSUJBPkJCPEVFREA+ODo4Ozc3Ojc4ODY+Pz07PDk9PDo+PTs6Njc7NjpEQUY+Pz8/PkNBPzs9PT47REM/PjxIT2fZ4N/f3+Dg4ODg4eHh4eHh4eHh4eLi4uLi4uLi1tbW1tbW19jYyH52doN+fnR2eIaCenl1d5yhu6GEgoCAfoeKinx/gYaMnKjO2NjY2NjY2NjY2djY2NjZ2djY2NjY2dnZ2dra2tra2trb29rb29rb2tra2tra2tra2tnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dna2tra2tra2tra2tra2trb29vb29zc3Nzc3N3d3d3d3d3d3d3d3d3d3d3d3dzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3e3t7e3t7e3d3d3d3c35pbT2drXFBRUElDT0pLR0xHSkJAP0FHREBBPDg8ODg1ODk3Njc3QEA/Ozw5Pj04PTw8Ojc4PTk/RENGPkE/QkBDPzw6Pj0/PkVEPz07S1Fj1+Hf4ODg4ODh4eHh4eHh4uLi4uLi4uLi4uLj49bW1tbW19XB3LRueHJze3B6eXaFiIR7eH2AgZiljH98fnuRhZaLhoGDgY6Rvd3Z2NjY2NjZ2dnZ2dnZ2dnZ2dnY2dnZ2dna2tra2trb29va2tva2tra2trb29ra2tra2tnZ2dnZ2dnZ2dnZ2dna2trZ2dnZ2dra2tra2tnZ2dnZ2dna2tra2tra2tra2tra2tra2trb29vc3Nzc3Nzc3N3d3d3d3d3d3d3d3d3d3d3d3d3d3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3e3t7e3t7e3t7e3t7e3t7e3t3d3d6NWFdobllQUUtISlNJTUhNSUtBQz9DRkJBRDo6PDg2NDg4NzY2Nj8+Pjo8OTw7Oj09PDw4Ozw8RERERT4/PkI+Qj84PT8/Q0NCQEE+O0xUY9Xh3+Dg4OHh4eHh4eLi4uLi4uLi4uLi4uPj4+PW1tbW1teslLZ6eHJvd5V7dHuLgHh1bn6Fg3t/hYhyfH2bnI6JioJ+g32Hk5rH1NjY2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dna2tra2trb29vb29vb29vb2tra2tra2tra2tra2tnZ2dnZ2dnZ2dna2tra2tra2tra2tra2tra2tra2tra2tra2trb2tra2tra2tra2trb29vc3Nzc3Nzc3Nzd3d3d3d3d3d3d3d3d3d3d3d3d3d3c3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3N3d3d3d3d3d3d3d3d3d3d3d3d3e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3d7Zf1lgaGxcUUtHR09LTk5PTURGQkg/Q0hEREA6Ozs4NzU3Nzc4NThAPkA7PDk8Ozw+Ojk7OTk7OUZERUI8QD4/PEBDOz5AP0A/Qj8+OjtKVWPV4eDg4eHh4eHi4uLi4uLi4uLi4uPj4+Pj4+Pj1tbX19vKhYR3cXJubniVhHt4hH95dnB4c3eLkY6CdnN9ioaId3d1d4ODfIiIk8Pb2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dra2trb2tvb29vb29vb29vb29rb2tra2tra2tra2tra2tnZ2dnZ2dna2tra2tra2tra2trb2tra2tra2tra2tra2trb29vb2tra2trb29vb29vb3Nzc3Nzc3Nzd3d3d3d3d3d3d3d3d3d3d3d7e3d3d3d3c3Nzc3Nzc3Nzc3Nzc3Nzc3d3d3d3d3d3d3d3d3d3d3d3d3d7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7f0nVZaGlqVk5KSE1OR01EUElGSD9FPUZMREM+Ozs8OTc3OTY2OTU4Pj4/PTs8QDs9PDo3Ozc5OThHREVCPUE9Qj8+QDw/QUE/QEJAPjs8S1Ri1OLg4eHh4eLi4uLi4uLi4+Pj4+Pj4+Pj4+Pj49fX19fEknuJf29sbnV2foSBg4qGfnVybWVtiIaKjoR7c4OHint4e4OPj4GEioqxztrZ2dnZ2dnZ2dna2tra2tra2tra2trb29vb29zc3Nzb29vb29vb29va2tra2tra2tra2tra2tra2tra2tra2tra2tra2tvb29va2tra2tra2tvb2tvb29vb29vb29vb29vb29vb29zc3Nzc3Nzc3d3d3d3d3d3d3d3d3d3d3t7e3t3d3d3d3d3d3d3d3dzc3Nzc3Nzc3d3d3d3d3d3e3t7e3t7e3t7e3t7e3t7e3t7e3t7f39/f39/f39/f39/f3t7e4clsW2pqalNOR0hOT0VIRk1JSUA7RD5ISUA9PDo6Ojg2ODo3Nzk0OD08PT07ODw8PDw4Njc4OTo6RUJFQT9APEI/Q0M+PkNEQUBAP0A8PUtRYdPj4OHh4uLi4uLi4uPj4+Pj4+Pj4+Pj4+Pj5OTX19fZqXaFfnx3bHB3eXh8jH2KhYB3anN0d3p9bot7fnl6foR/gIGDfnh8foeGlrbT2tnZ2dra2tra2tra2tra2tra2tvb29vb3Nzc3Nzc3Nvb29vb29vb29ra2tra2tra2tra2tra2tra2tra2tra29ra29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb3Nzc3Nzc3Nzc3d3d3d3d3d3d3d3d3d3d3d7e3t7d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3t7e3t7e3t7e3t7e3t7e3t7e3t7e39/f39/f39/f39/f39/f39/e3uO9amFpa2lRTkZNTEtKWE1OR0FAQE9BRD9AOzw4ODk5Njg2NjY4NDs+PD07OTY6Ojk6OTU4OTg5OkJERj8+Pj5AQEBCPzxBQD88Pj9BOT5KT17S4+Hh4eLi4uLi4+Pj4+Pj4+Pj4+Pj4+Tk5OTk19fX2sqKhIB5c29tcXN1d4CUeHaAfHWHhXd1cnWgmXp7d3Z5doR0bWxue3iAmouTu9za2tra2tra2trb29vb29vb29vb29zc3Nzc3Nzc3Nzc3Nzc29vb29vb2tra2tra2tra2tra2tra2tra2tra29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vc3Nzc3Nzc3Nzc3d3d3d3d3d3d3d3d3d3d3d3e3t7e3t3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3t7e3t7e3t7e3t7e3t7e3t7e3t/f39/f39/f39/f39/f39/f39/f397js2lpbmloUFBPTExPUk9LU0Y/RURERD48PDg6ODc5OTU2ODY2NzM6Pjs+PTc6Pjk5OTk2Ojo4NzxDRUc/Pzs/PkA9PkE9Oz0+OUFAQDhBTlFc0OTh4eLi4uLj4+Pj4+Pj4+Pj4+Pk5OTk5OTk5NjY2NjauY6AenZ1bmpveHCBfWt0cnZ3hIV5h4d5lY55eXp1d3pza298gHx2fYh8gLLe2tra2tvb29vb29vb29vc3Nzc3Nzc3Nzc3dzc3Nzc3Nzc3Nzb29vb29rb29vb29ra2tra2tra2tra29va29vb29vb29vb29zc3Nzb29vb29vb29vb29vc3Nvb3Nzc3Nzc3Nzc3Nzc3Nzc3d3d3d3d3t7e3t7e3d7e3t3d3t7e3t7e3t7d3d3d3d3d3d3d3d3d3d3d3d3d3t7e3t7e3t7e3t7f39/f39/f39/f39/f39/f39/f4ODg4ODg4N/f39/f4qpqa2hrZFNQT0ZQVFJOSFJLPkREQ0I7Ozk5Ojg2Nzg1NjY4ODg0Oz88Pzw5PDw3Ozo6Nzo6Nzo9Q0JDPUE+Pzw5PT5BQDs8PDtFQD47Q05TXNDk4eLi4uLj4+Pj4+Pj4+Pj5OTk5OTk5OTk5OTY2NjZ1p5vdntveHh2cG50d3BwdHBzb36Jc3qGhY2EenNtcoB6hn1vg5OBdnx9g4a13drb29vc29vc3Nzc3Nzc3Nzc3Nzc3Nzc3d3d3Nzc3Nzc3Nzc3Nzb29vb29vb29vb29ra2tra2tvb29vb29vb3Nzc3Nzc3Nzc3Nzc3Nzc3Nvb29vb29vc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzd3d3d3d3d3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3d3d3d3d3d7e3t7e3t7e3t7e3t7f39/f39/f39/f39/f39/f39/g4ODg4ODg4ODg4ODg4N/f3+KgbWhma2ZVVlJHUFFOS0xMRUJIRUc9OD08Ojo3Nzg2Nzc2NTY3NDg+PD09Ojg6OD46Ozc4Nzc6Oj5DRDtDQj49OD1AQUM/Pjw+RTw+PUJNUF/S4+Hi4uLj4+Pj4+Pj4+Pk5OTk5OTk5OTk5OTk2NjY3MB2doCCfnp4eHBsdXlya399bHNvdGdoaYB/aWl4c2d+iYl4cIKGe3d9foWKvN3b3Nzc3Nzc3Nzc3Nzc3Nzc3d3c3Nzc3N3d3dzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nvb29vb29vb29vb3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzd3d3d3d3d3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7f39/f39/f39/f39/f39/f4ODg4ODg4ODg4ODg4ODg4ODg4ODflGttZm5mU1NJUFlUTEhGTkZGRUJGPTs+PDs5Nzc4NTc5NjQ1NzU4PDs9Pjo6OztAOTs7ODc6OTlAQkE8QUE/Pzk/QEJFQ0FAQEM7Oz1ES01g1uTi4uLi4+Pj4+Pj4+Pk5OTk5OTk5OTk5OTk5NnZ2tmYc3uqhJaCcnR1dn14aGx8d2h4d25rcXR5gIJ3dHyBhIJ9c3CAin94gn95g8je29zc3Nzc3Nzc3Nzc3d3d3d3d3d3d3d3d3N3d3dzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nvb29zc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3N3d3d3d3d3d3d3d3d3d3d3d3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e39/f39/f39/f4N/f39/f3+Dg4ODg4ODg4ODg4ODg4ODg4ODg4ODh24tubWdzY1lRTVVbV0hDSUZOS0dCRD8/Qjo7OjY2NzU2NzY0ODc2Ozw7Pj86PDk8Qjg3OTo6Ojk6QUFCQUJDQEE+PT9CQ0NEQUJGOTg9REpOYtjk4uLi4+Pj4+Pj5OTk5OTk5OTk5OTk5OTk5OXZ2drcqHGCtXiRfnNsem6EgXaCfWtoan+DeHV8dn2FhXRmcHl9d316gIqFe318foC03tzc3Nzc3N3d3d3d3d3d3d3d3d3d3d3d3dzd3d3d3dzc3N3c3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzd3Nzd3d3d3d3d3Nzc3Nzc3Nzc3Nzc3N3d3d3d3d3d3d3d3d3d3d3d3d3d3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e397e3t7e39/f39/f39/f39/g4ODg4ODg4ODg4ODg4ODg4ODg4ODg4eDg4ODg4ODg4tiFb3FrdWFWT1VVXE9ETUY+SkdKRUQ8P0I6PDk4Njg0NTY3NDc2NDk7Ozw7OD47PEE4ODo9OD04Oj09QEBAP0FCP0A+QENCQ0FBRTc2O0RMTmPa5OLi4+Pj4+Pj5OTk5OTk5OTk5OTk5OTk5OXl29ra3Z5sbnNxhY1ybXBuf391hH5rcnZ2enN4gXhzbnVwbWt2fHmFiIB/f392coODsd/c3Nzc3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3Nzd3d3c3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3N3d3d3d3d3d3d3d3d3d3d3d3d3c3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e39/f39/f39/f39/f39/f39/f39/f39/f39/f4ODg4ODg4ODg4ODg4ODg4ODg4OHh4eDg4eHh4eHh4eHh4OLXhW1xb3ZeUldTWlpRSkhDQFFAQkQ8OT9BOjw5NzU3NDU2NjQ3NTY9PDo9PTk+OjxAODo6PDY7OTs+PUJCQjtBQkBDQEBEREM8PUA3OjxFS01l3OPi4uPj4+Pj5OTk5OTk5OTk5OTk5OXl5eXl5dPOxsB+cWxveHt2b3VuanNzbZKGeG50dG5vdIZ/b2twboJ0bXZyfY2DdnF/d3mKgabf3Nzc3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3dzc3d3d3dzc3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3t7e3t7e3t7e3t7e3t/f3t7e3t7f39/f39/f39/f39/f39/f39/f39/f39/f39/f4ODg4ODg4ODg4ODg4ODg4ODg4ODg4eHh4eHh4eHh4eHh4eHh4eHi1oZucG1xYFJZUFdfWUpMTElSP0Q9OTtCRjs6OTc0NTY1NzU0NjY2Pj07Pz45PTk7Pjg9Ozo0ODtAQENCQ0FCRkE/Q0BBQkREOz0+OTs8QkxNZODl4+Pk5OTj4+Tk5OTk5OTk5OTk5eXl5eXl5eW5t7Woc3JscHd6dHd4bXFydXd/hHRyc2xsa3F8bnBudGuBf3GAd32Eg355gHNygYqg2d3c3d3d3d3d3d7e3t3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3e3t7e3t7e3t7d3d3d3t7e3t7e3t7e3t7f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f4ODg4ODg4ODg4ODg4ODg4ODg4OHh4eHh4eHh4eHh4eHh4eHh4eHh49WHcWxqbF5YWlVXYFZWUE9QTD1BOjs8RkE4Ojg3MzY1Njk2NTg1Nz89Oz8+OT04Ozw5PTs7NTo9Q0JCPENDREREQUE/PkJDQzw9Pjg5PENLS2PN0dnh1sjY4+Tk5OTk5OTk5OTk5eXl5eXl5eXltbW2q3J5cm59f3Z1d2hqaGlwb3Zta2tnZWZxdG15gG5teXd2iHhxa2podXV5dHV/wd/c3d3d3d3d3d3e3t7e3d3d3d7d3d3d3d3d3d3d3t7e3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3e3t7e3t7e3t3d3d3d3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f4ODg39/g4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4OHh4eHh4eHh4eHh4eHh4eHi4uHh4ePVhnFwY2lhV1NZV19MUk9STUtAPjg5O0E+ODc5NjQ3Njc6NjY2NDk+Pzo8Pzo/OTo6Nzo9PDk5PEFBPTtBQ0VDRkA+Pj5BRUQ+QEE3OD5GSEpesrW4wbm1u8jg5eXl5OTl5OXl5+fn5+fm5ebm5ra2tbWOfX5weoR1cnZnYmNlbGtyb2ZpbHZtd4Z9hXlsbHd4a3ZwfH14c3V5fHd2h7ng3d3d3d3d3d7e3t7e3t7d3t7e3t7d3d3d3d3d3t7e3t7d3t7e3t7e3t3d3d3d3d3d3d7e3t7e3t7e3t7d3d3d3d3d3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4OHh4eHh4eHh4eLi4uLi4uLi4uLi4eHj1Yd1bl5uY1pUU1hXS1NLSk1SR0E4Ozs+PDk4NzU2NTY2OTY4NjY5Pzw6PT07Pzo7Ozk8PDs5Oj4+Pjs8PUFEQkNBQEBBP0JDPDw9Nzs+REVKXrG1tLW2t7e2y9rJ3uXl3eDi3tXU1tPU4OPg39+2treuh3t/bnmNenJ1bWNobGxtaXR4enF5enqIh4N6aWh9cWRvcXyGgX55e318e4an2t7d3d3d3d7e3t7e3t7e3t7e3t7e3d3d3d3d3t7e3t7e3t7e3t7e3t7e3t3e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7f39/e3t7e3t7f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4OHh4eHh4eHh4eLi4uLi4uLi4uLi4uHh49aGdmxhb19dV1lcWlJQSEpXTEVHPUA9Ozs9OTY0NjU1NTg2NzY3OD87OT09PDw5OTw6Pjw6OTg+Qjs7Pj5AREBDRUFAQD0/QDw9PTU5PEJHRl2xtbW2uLm5ubq9uMPT0r3BwcC6u7y6u8TMxb/Dt7e3hGl1gX1ndYd5Z3Vxa2t5eHB3fH15bWl3e3h3bml1j4FwbHl4d3d9gXuGgnmAoNze3d3d3t7e3t7e3t7e3t7e3t7e3t3d3d3d3d7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t/f39/e3t7e3t/f39/f39/f39/f39/f39/f39/f39/f39/f39/f4ODg4ODg39/f39/f39/f3+Dg4N/f4ODg4ODg4ODg4ODg4ODg4ODg4ODh4OHh4eHh4eHh4eHh4eHh4eHh4uLi4uLi4uLi4uLi4uLi4ePXhXJrZ3RhW1hYX15TVVVRVUpMRj9JRDs5PTY2NDc3NTc4Nzc3ODk8PDo+PDg8Oj0+OTs8OTs5P0E8PT9DP0FARUJCQTw9Q0A6Pjw1NDlER0dasbW1tre5ubm5ubm3ubm4uLm5urq6urm5urm6u7e3uX9ucHN6b3B/eXNuc3Vsc3Z4cXFwb2tvcX6Bc2mHhIF9dHOHdW11hYmBgHJ2hafd3d3d3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7f39/f3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f4ODg4ODg4ODg39/f3+Dg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4eDg4eHh4eHh4eHh4eHh4eHh4eHh4eHh4uLi4uLi4uLi4uLi4uLi4uHj14lxa2xyW1dXXWBUUVVUUFJPSkNATUE9Ozk2NTM0NjQ2ODc3Nzk6Pjs8Pjs5PDo8PDk8PTw7PT0+PUNEREBDQkE/QD48PkE8OD06NjY6QkpIWLG1tLa2uLm5uLi5uLe3uLi5urq5ubi4uLi6uru3uKx7cnhxf3ZzfnBsbXpyZ29sbW50cHt3d3Jyd3pvhpJ2f3x8enZ5fH9zfYdyda3T393d3d7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e39/f39/f39/f39/e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f4ODg4ODg4ODg4ODg4ODg4ODf3+Dg4ODg4ODg4ODg4ODg4ODg4eHh4eDg4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4uLi4uLi4uLi4uLi4uLi4uLi49eHb2pxalVWV2FbT1FSUE5XSURESUo/Ojk6NzUzNDk1NzY2Nzg4Ojw7PD46PDo6PTw5PDw9Oz09PDs9REdEQ0E8PDw8Pj5AOzg8ODE1OkFGRVautbW1tre4uLm4uLi4uLe4ubq5uLi3t7i4ubq7t7mqcnB4d3x7e4J3aG5xam9qY2lyf21zcn54dHFsanaAeX2AgH91doB1a4qLgHaR1d/d3d7e39/f3t/f3t7e3t7e3t7e3t7e3t7e3t7e39/f39/f39/f39/f4N/e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t/f39/f39/f39/f39/f39/f39/f39/f3+Dg4ODg4ODf4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHi4uLi4uLi4uLi4uLi4uLi4uLi4uPYhm1sdGVWUFxnWE1YU1JRWUVDS1BOOzk4ODY1NDM5NTY2NzY4Nzk+OT0+OTw5OTw7Njg5OTo8QEA9PkBGQEJCQDo+PEE9Pzs7OzYxNjxCR0RQqLa1tba2tre4t7i4uLi4uLm6ubi4t7e3t7e5ure2tIlyd3h9iXxwem99c2hqbGdnbHRscXd0cWx2c3Fxd3FyfHl4g3Z7d2mLkYp9kM7f3d7e3tvY2drZ297f39/e3+De39/f3Nvc3N3e3uDg3+Dg4ODf3t7e39jS397f397e3t/f3t7f3t/f3t7e3t7e3t7e3t7e3t/f39/f39/f39/f39/f39/f39/f4ODf4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODh4eHh4eHh4eHh4eHh4eHh4eLi4eLi4uLi4uLi4uLi4uLj4+Lj4+Li4uPj4+Pi4uLi4+Lk14NoZ3VkVlVkZVdKWllXW1Q9RU1LSD04NzU3NjQzOTQ0Nzc1Njc5PTo9Pjw9PDk7PDk5Oj45PD4/PkFBQ0FFRUQ+OzxBPjw5PDs3Mzc+REhFSqG2tbW1tbW2tre4uLi4t7e4uLi3tra2tra3uLm2traLfXpsbHp/cGx5dm5qaGdlcXp4b2lvb3B1c21zd4Fnb32CgYNyf3lqcHJ6f6ng393Zy8a/vb6/vsLN0tDW3tnc4NfQzcPCw8PH1dfT2dzX1NjX0MfExce9vM/Kz87Y3djO3N3c2t3T0dze39/e397e3t7e4N/f39/f39/f39/f39/f39/f4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4OHh4eLi4uLi4uLf4uPi4eLg4d7W29/Sw8rJx9Hb3OLk4eHg2dre1sbExcTN2trf5OHi4trX3st9aWZxYVleZWFNTFRLUlpMO0hNSEZBPTc2NjUzNDY2NDg3NjU2OTw7Pj46Pjk5PDk3OTs7Oj49PEBAQ0RCR0ZCQT08Q0A9OTw7Nzc3P0RGRkaZtrS1tbW2tra4uLi4uLi3uLi3s7W2t7a3t7i5tba3opdxb29waW50dnFmZWNrbmdvcm1mZ2tygWVvdnyAeGRzj39zaHFyaWVlbm+w39HFv7u5ubm5ubq6uru6vc3Gw8e/urq6uru7u8HCvcHFvby/vry7urq5ubq6ubm6w8XDucDDwby/ube/z8/U3tjc3t/g3tLa4N/f4ODg39/f39/f39/f3+Dg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODh4eDg4ODg4ODg4ODh4eHh4uLi4eDh4uLi4uHa2t3RwsPCu8XT1uDdydPDrrnAsaqrq6uwtLbJ0sXRxLG4v7Srq6usr7S0vMzE1c60tLureGxtbWBdYl9ZS1NVVFFQREBRTUhEPzo3ODQ3MzE1NjQ5ODQ2Njo8Oz08ODw5Njo6ODg5NzU8PDw/QEFAQkRDQkE8PkI/Pz09PTc1OD5DRUNAj7a0tLW1t7i4uLi4uLm5uLe1sautr7Oxs7OztLS0tqaei2tue3ZxeXhnY2hfcXdha25vaG99b25ja2lseHdsa4Z+bHB6dm1scG95sca8uru7urm5ubq6urq6urq6urq6urq6urq7u7q7u7y7urq6ubq7u7q6urq6urq6ubi3t7i4t7e2tbW1tbi3u8e+w8XHzcS4wMnH0tzZ2d/e3uDf39/f4ODh4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODh3Nji4uLi4eHh4OHg3tfGxtHQztTe3tPO0t/SuLi8sq2trKysrrG+ua63rKipqamqq6urqqqqq6ysuKyqqqqrq6urra6urq6urryzrayrpHlub21fXl1dVE1SU1xUSkE/UElIPjg5NjgzNzMwNTczNzg1NzY2Ojw/PDg5Ozo6Ojg5OjY1OTs7Pj9EP0NFQkNCP0BAQT9APjw3ODc6QUVEP4W4tLS1tbe4uLm5uLi3t7SurKuqqq2urq6vsLGzs7WjcG5ucm1wg311aWFlaGZkY2Rxc21td25naW1tZXBzb29zcXN8h4F6dX11n7u6uru7urm5ubm6urq6urq6ubq6urq5uLm5ubm6urq6u7q5ubm5ubq6ubm6ubm4uLi3t7e4uLe3t7a2tbW2tra1tbW1tba1t7e3t7rBvrzGycrb3+Dg3tvd3d7h4tDW4uHg4ODg4ODg4ODg4ODg4OHg4OHi0768zNjd3OLg0dnbxL23sLCxsa+zu7uzsLS9s66urq2tra2sq6qqqqmpqKmpqampqqurqqqqqamoqampqampqaqqqqytrq6urq6urq6sraR4aWJxZmFZWlZRUk5cU0Y9QlJEQTc8OzY5NTY1NDU2NTg3NTY1Nzg7Pjw7OTk5Ojg3Nzk3Njg8Oz47RD8/Q0BBREE+P0M9Pjw+Ojo3Nz9DRj54srCztLW2t7i3trKurq2sq6uqqaqtraysrq+xs7S1t4xucnRqaIB5ZmpmZWxdaG5waGxxYmNmcoJ+dmhobGpueoaBhXx4cXF5gK+6ubq6urm5uLm5ubm5ubm5ubm5ubm4uLe3t7e3uLm5ubm5uLe3t7i5ubi4uLi3t7a2tre3t7e3tra2trW0tLW1tbW2trW1tre3t7e3t7e3tre4v8bP0MS+v8DE19e8ydra4OHg4ODh4eDg4ODh4eDb3t7Uzby3tre6wMDJxLfIvrKwsLCwr7Cvrq6ur7Cwr66urq6uraytrKurq6qpqampqampqampqKmpqKmpqampqKmpqKmpqqqrraytra2ur66trK2heWpjbWdiXFhRUFFLVEpCOklRP0E3PDk0OjU2NTQ1NTY4ODY4Njs6OTw9PTs6ODY2ODg6NzY3Pj09PT5BQUVCQkNBQUBBOj09Pz05Ojc9QUc8bKqmqKutsLGwrqupqKqrq6mpqamrrKytra2usLO0tbilgIdvaWdzdGZrcG1qZGxvcm5rbWNrcHyJhG5qbHx4Y3uKfnNqc25rcY+7ubm5ubm5ubi4ubm5ubm5ubq5uLi4t7e3t7e3t7i5ubi4uLe2tra3t7e3t7a2t7a2tra3tra2tbW1tba1tLS0tbW1tra2tra3t7e3t7i4uLe2t7a2uLm4uLe3uL6+uLq9vcfb4OHg2Nnd4eHg3dfKwcPCurm5uLe4uLi3tbS0tLKysbGxsLCvr6+vr6+vr6+vr66ura2srKyrq6yqqqmoqKmppqepqaehpaipqamoop+hoZyip6inqausrK2ur7Cwrq2unXdwbGphY2BZUU1RTFJGQzlNUEY+ODs3Mjc5Njc0NDM1ODg3OTc7OTo9PTw6Ojk3NDo5ODY2OD8/QEI9RENDQ0FDQEJBQDtAP0A/PDw6O0NIPWOopaWlpqioqKenp6ipqqmoqKipqqqsra6wsLCztLW1taWYdn5xZmt4cW9tZmVsaGNsZ2ZpaX11bWlvfXZ5hWZod294b3Fvcninu7m5ubm5ubm4uLm6ubm5ubq5ubi3t7a1tba2tre3t7e3t7a2tba2tre2tbW1tra3t7e2tbS0tLS0tLS1tLS0tLW1tba2tra2t7e3t7e3t7a2tre2tre3uLe2t7i4t7i4uLi4wMXTyry8w83PyMC9urm5ubq6ubi4uLi4t7W0tLSzs7KysrGwr6+vr66urq+vr6+uraysrKurrKysq6ehoJ6gn5udoaGdlpmkpKaon5mZmZmanZ+gn56fpKqtrq+ura2srJl1cGlrY2FeXVVOU0tSREQ4TktHQTo4NTI2OTY2NDczNzc3ODk3OTo7PT0+ODg4NzU6OTk1OD9AQEFEPkZBQkNAQkNCQT88QEJCQD0+OjpERj5cpqWmpqampqanqKenqKioqKenqaurrKytra2ttLS0tbekc311bnONf3JmanFjaW1jaGZobG51aV9jZ3VzdnpuZ3Bwcn56cYihu7m5ubm6urq6urm2s7W1uLm2trW1tra1tbW1tbW3tra3tra2tbW2tbW1tbS0tLa2t7e2tbS0s7O0tLW1tLS0tbW1tra2tra2t7e3t7e3tra2trW2tbW2tra2tra2tra3tra3uLi3uri4uLe3t7i5ubm5urq6urm4t7e3t7W1tLS0s7OysrKxsbCwr66urq6urq+vra2srKuppaSmpqScmZubmpmampmXl5eXl5aZm5iZmJmZm52en5+dnJ6gpKWko6OioqKQdG5jcGFeXltUU1RIVEo/PFFCRkM7ODYzNzo1NTQ4Mzg5OTc4OTc7OTs9Ozc6NzU2OTk4NTg+Pz9ART5CQD9DPzxBQUI/PT9EQT8+PTk9Q0Y/VaSlpqanqKeoqamop6ioqKioqKiqrKuqqaipq7W1tba5o3eKcXKHhnd0cGh5a2JjYWVsaW5zal9jZWNjZWprYmRqbHaXjX6ovbm3tre5u7u6uLWxrKurqq6wrKyrq62tq6yvsLGvr7CytbW2t7W1trW1tbW1tbW2trSvr7O0tLSvra6vsrW0tbW1tbW2t7e3t7e3t7e3t7e3t7Owsra1tLa2tre3tra2tbW1tra3t7e5uLi4t7e3uLi4ubq6urq5uLi3t7e1tbS0tLS0tLS0s7OysbCvr6+vr66vr62oo6KgnJqampqZmZqbm5qampqbmpmZmZiXl5aYmZmZmpycnZ+foJ+goKChoaCgoJ+fi3RuaXRdYGZeUlRLRFRJPUVTSEVCOzo0NDY5NDQ1NzM4ODg3ODk5Ojs7Pz04OjkzNTg5NjM5PT5AP0A6QEJCQkA/QEJCPz0+QUFCPz06PkVDQFGjpqWlp6inqauqqKaoqKipp6ioqKinp6ioqaq1tbe3t7KZtH99kIx1Z2lqbGZjYGNoZW94cGlicXx5cGpmZmRma3NqhYystrKwra2ttLeysLCtrKuqqamop6ipqampqKinqKipqaeoqqurra2sqqytraysrq6traunpaSnqqyopKOkpamwsbGztbW2t7i3t7W1tre4t7e3t7Kppaasq6ivtLa1s7W3t7a1tbW2tra3t7e4t7a2t7e3t7m6urq5uLi3t7Wxs7S0tLKxsK6sq6yurrCxsK2rqqmqqKijnJqZmJmYmJiYmZmZmZmZmpqZm5ubnJybmZeYmpqcnJydnJ2foKGhoqKioKGgoKCfnop1amtuWVxhVktPREdVRz5PV0hEPTw4MzQ0ODQ1NDgyODk4ODk6Ojw5OUA8Njk6MzY3OTE0PD8/QEFBOkNGRUJBREJDQTo7P0FCQz9APUBEQ0BPo6empaemqKqqqqakpqenqKioqKimpqaoq6uttba3t7e4rbJ1cHuDdmBiaWtiZWZhZGdmfYh5bHKAfXFvcXhjbW5xZo+srKurq6ysra6urK2trKyqp6WlpaWlpqioqKiopaeoqKeoqKeoqKmqp6Wko6KioqOioKKioaKhoKChoaKjpKOjpaWlqLC0s7OzsKuqqaqztLa3trGopaOioaGipKiqqairs7Sxrq6xs7W2tra3uLi3tre3t7e3t7a2uLe0sa6ppqerrKmnpqWkpKSkpKWnqaajoJ+enZycm5uampmZmJeXmZmZmJiZmpqampqampqbm5mYmpydnZ2dnZucoKGgoaOjoqCgoKCfnp2FdGtsaFdYU0pHTUVITUdAU1dGRz09OTM2Mzc0NjU3Mzg6Ojo6Ojw9OjpBPDY9ODM3ODgzNztAPz9AQDpCRUNAQkRDQT87O0BDQkNBQDxBQ0A9TqKnpqanp6mqq6mkpaWlpaaoqKippqanqKmpqrW2tre3t7izc2h7c2JnamtpaWJhZGloXV1tfHJma3J/fHR8bm1zc36gqamrq6uqq62trKusq6mpqKWjpKampqWmp6eqqaamp6enqKinp6iop6WkpKKhoaGhn56en5+fn56foKGho6Wko6OkpKSlp6enpqWkpaampqeqraumpKKhoaChpKWlpaempaeoqKalpaivtLa3trW1tra1tbOwrKupqa6rqKWlpqampaSkpaWlpqWkpKSkpaKhoaGgnp2bm5ucm5qamZiXmJiYmJiZmpmZmZmYmZmZmZqZmZydnJycnJybnJ+fn6ChoaKgoKCfnZ2cgHNrbmReU0pITUZETEtFRFFTQ0c9PDgzNjI4NDY0NjQ4OTg6Ozk7Pjw5PTs5PTczNTk2NTY8QD0/QD88P0JDPkJCQj89Pj5CQ0FFQD86PkVAO0+jpqWkpqeoqaelpKWlpKWnp6eoqKanp6alpqa1tba2trW2uYptcW1vfHxxZ2pmYGFsYFROW2hqbm9tgYJ9cWdxdn6aqKeoqqmpq6urrKqqqqimpaWkoqOlpqalpaWmqaqppqWjpKWmpqSko6Kio6KhoJ+fnp6cnJycnZ2dnJ2en6CioaKjo6OhoqKkpaSioqOjpKSjpKSko6Ggn6GipKanp6ipqaelpaSipKSlqK2wsKyrqqusqqmnpaWmpaWlpaalpqioqailpaWkpKSlpKOjpKOioaGhoqKgnp2cnJubm5qZmJiYmJmam5mXmJeWlpeXmJiZmpqcm5qampubm5ucnJ6goKGgnp6enpycm356bnJiXlNNSlBFRk5NQkBPRT5JOz01MzYzODM2Njc1Ojs4OTs5Oj49Ozo5OT03NjY5NjU2PkI+PkE/PT5DQT5DQ0BAO0A/QkJCRUA+Oz5FPzxQoKSjpKOjo6SkoqSlpaSlpqamp6empqalpqaltLW1tbS0tbiBaHx9ZXOCemxwdWFfY1ROT1FbaGxpbGxxbW5xbnScoqSnqKioqauqqqqqqaempaSjo6OjpKSlpqalp6ytqaShnp2epKShn56foKCdnJ2dnJycmpqam5ucnJubm5ydnp6foKChoJ+goaOioKGjpKSjoqSlpaWkop+go6SkpKapqainpaGdnJ+jpaipqainqKioqaempaWkpKSlpqampqampqenpaWko6Ojo6KioqGhoqKhoqOkop+enZ2cmpubmpqZmJeXmJaWlZSUlJWVl5iYmpubnJuampqam5ucm5ucnp+fnpucnJyam5p/fnF0YFtUTUdNSEZMSj8/TkM8QDs8NDM4Mzc0NzU3ODs9ODo6OTk7PTs7ODk+Njc4OTU4OD9APT9BPjs9RD89REA/PzpAQUE/QUVAPjw8Qz88Tp2ioaKioKCipaSkpKWlpqenp6empqampaampbW1tbS0tLS3jHalsXdmc3Jvc2xjZGlYT1JRT09dgG1kYFptkZGSoqKjpaampqenqKiop6alpaOioaGhoaKjpaempqesq6emoJ2cm6Ghnpubmp2cmZiam5qampmZmZubm5uampqampucnZ6goaCfnp+hoJ6foqOko6Omp6inqKWioKGhoaGkpaWlpKCcmZmbnqOmpqampqanpqempaOlpKWlpqiop6enpaWlpaWkpKOjo6KhoqKioqKhoaKjo6Kgn56enZybnJubmZaUlJSTk5OTkpSUlJWWl5qam5ubm5qZmZqanJ2dnZ2dnZuampqamZqXf3dvc11aTkhKTkdFRklERU5APD09PDQ1OzQ2NDY1Njc5Ozg5OTg5OTw7PDc6Ozc4ODg1ODg/Qj9BQTw+P0A8PEJAQT49QT4/Pz1CQUA6OkA8PE+doqGfoJ+dn6OkpKSlpqeoqKenp6ampqampqW1tLS0tLS0tbSXtqd1Znh2Y2xjY2VjW1JTU1JNXqCMeFhodpajnp6hoaOjo6OjpKSlpqalpKSioaGko6OjoqOlpqamp6enpp+bmpuioJqWl5Wam5qXl5iZmpqYmJqampqbm5qZmZmenZ2goqOjo6KkpKWinqGhoaKjpaampqSjoaCgn5+hoZ+goJ2amJiZmpygpKOjpKWmp6alpaOjpKSkpKWnp6ampqampaWmpKOjo6SjoqKjpKGfoKGhoKGgoaCfn56dnZyamJeVk5KSkpKSkpOTkpOUlZaZmpqbm5qampqbnZ6enp2cnJybm5qamZmZlH10bHReWk9IRUdGQkVORT9GOzo+Pzs0Njo2OTM2NDY4OTo4OTc4ODo8Ozw5Ozs6OjY3ODk5Pj9APjw9QD5AOjlAQT89QT8+QUE+QUE/Ojk9PjpQnaCfnJucnJufoqOlpaWlp6iop6ampqanpqantLS0tLOysrGwsK2rkHiGj36amn93Yl1TUlFRTGKgootaiKCgn52YmZycnZ2eoaGgpKenp6WkoqGjp6alpaOipaampaanpqagm5mboaCXkpOSl5qcmpeXl5iampmampqam5qYmJmaoKCgoKGfoaKipKamop6gn5+goaOko6Khn56enpyanZuZmpqZmJeZnqChoaKioqKkpaWmpKSkpKKioqKkpaWlpaWlpaalpaOko6KioqGgoKGgnp+fn5+fnp+foJ+cm5qZl5WUlJSTkZCRkpKSkpKSk5SVl5iZmpmZmpqam5+fnp2cnJycmpmZmpiXl5F8cmdxXl1QRj9BRD9KT0JCRjhDRT4+OTg7Nzc0ODQ1OTo6Ozk3OTo8Ozo8PT48PDo2NzY5OD4/QT47Pz49PDg6PkFAQUE/P0FCP0RBPjo4PkE8U5ycm5uampycnaGio6KjoqSmp6alpaampqSjo7KysK2rp6amp6alpqiln6iop6qnoXmEXFFST0xcnKCAYpmgnp2clZOVlpeZmp2dnqGmpqampKOioqanp6ajpKampaWmp6amop2cn6Gfl5GRkJSXmp2YlpeWmJuZmpqampqZl5iam6Ghn56fnpybnJ6goJ6dn56fn6Cio6SjoqCfnp2ZlpeXl5iYmZubnqKioqKioqGio6WlpKOio6SioaGhoqOkpKSko6SkpKSioqKhoqGgoJ+gnp2enp2dnZ2dnp6em5mYl5WTk5SUk5KQj5GSkZKSkZKTlJaXl5iYmZqampyenZ2dnJubmpiYmpmXlZaNempmamBiTkY+P0A9SkVAQ0A7QEE8Ozs5Ojc2NTg0Njc5OT04ODs6Oz87Ojs8Ojk6Nzc2ODs8Oz08Ojo8PTw3Oz5DQkRDPz1BQ0FEQT88OkBCO1eZmJqamZmam5ucnp2foqKhoqSlpKSlpqSioJ6op6alpqWlpaemp6ampqakpaanqKehqXJOUU1KVJahenKanJyenJeVlJWWmJiXl5qeoqKhoqOkpKOjpqalpKanpqWlpqalpaOgoKGhoJmSkI+Wm5menJaXl5eZm5ycnJqamZeZm5uen52cnZyZmZqcnZydnp6fn5+hoaCgoaKgn56bl5WVlZeanZ2fn6GhoqKio6OhoaCgoJ2cnaGioqOkpKOioaSlpKOko6SjoqKioqKhoKCfn52cnZ2cnJ2dnJ2enpqXlpaVlJOTkpKSkpCRkpKTkpGSlJWWl5iYmJiam5ycnJycnJ2cm5mYmZiWlJWXi3hsY2RiZFFHQT1DO0tIRDo7Ozw+OTo6OTo3Mzc5NTk5ODk8OTg7OT09Ozo7Ojk8PDc2NDc/PDo9Ozw/Pjw7ODxBQ0FDQkI+P0NAQkFAOj9APztZmZiampqam5ubm5ydoKGhoaGhoqKioqKhn5+dpKWmpqenpaWmp6ampqWkpKalpKSkpaaGUFJQT0+PmHB6mpubnJ6cnJycm5ubmZiYm56dnp6foKOkoqGhoqOio6SkpqalpKSjoqGhnpyblZKUmJyam56amJiYmJqcnpyam5iWmZybnJycnJydmpqbnJ2dnp6dnp6fn52cnJyhoaCblpWVlZacn6Ggn5+hoKKjoqOhnZuZlpaWlpicnqCip6ikoaCgoqOjoqKioKCgoJ+fnp+gnp2cm5ucnZydnJmanJuWk5KSkpKUk5KSkpKSkpOSkpKRkpSVlpeYmJiYmZqcm5qbm5ucnJqZmJiXlZWWl4d3ZGdoZGJNQ0U8RDlJSkU5Ojs9PTo6Nzg6NjQ3OTU8OTY4OTc5PDs7PDo6PDs6PDw4Nzg3Pj07Pj46Qj86Ojo/QURCQ0FBQD9EQUFAPjpAPj06W5qYmZqbmpubm5uen6CgoaKioKCgn5+enp2dnKWkpaanpqWlpqakoqKio6Oko6Kjo6KnllRYVVJOZ21rgZ6am5udn6Cgn56enp6dnJ2dnJ6enp+goaCfn5+goKGio6OkpKSkoqGhnpuamZehtZ6ZmZienpiYmZmam5qWlZeWlZicnJ2cm52dnpybnJ2cnZ6bmJqeoaGdm5udoKKhmpWVlpaZoKKfnZueoaKjop+em5eXlJKSlJeYmZ2goqenpaGgn56goaGioaCfnp2cnJubnJubmpqZmpydnJmXmZaVk5GQkJCPkZKSkpKSkZKTk5OTk5OTlJWWlpeXl5manJubnJucnJqamZeXlpaVlZSEcmZsYmRbREJMPT84RktCPEA+Pj05Ozk6PTg1ODg2Ozg2Njo4PDw7Ozw8Ozk8Oj09OTU4Nzw5PD88OkE/Ojo6QEBDQkRBQ0A/Q0FAPj08QD09Ol+al5mamZeYmpycn5+foaGhoJ+fn56foKCenZ2lpKSko6OioqOjoJ+foaGipKOio6SiradXXl1UV19ua42dmpqbnJ2dm5ucnZ+enZycnJydnZ+goKChoaGgoKCgoqShoqKhoaCenJubm5mfq5ucmpuZnJ6ZlpaWl5eTjo6QlJabnJuam5udn52cnJycnJ6dlpSZnJ+in5ycnZ+hoJuXl5mZmpycnJubnZ6fnZqXlpaWlJOTlJiampqfoKGmpqWgn56fnqChoaCenJubnJybm5ybm5qZmJmZmZmXl5iVlJKQkJCQj5CSkpKSkZGTk5aYl5STkpSVlJWWlZaZmZmam52cnJyampmXlpaWlpaQgG9vZV5gV0BKSDg/N0lFP0VBPD07Ojo8Ozs3NTs4Njo3NTY6Oj47Oj0+Pj07Ozs+Ozo4Ojk5NkBBPTo8PTo6OT9BQ0JERUM+P0FBPz8+Pj89PDtgl5WXl5aVl5mbnqGhoKGioqCenp6enqCgn52bpaWkpKSioKCfoJ+dnZ+hoqOjo6OkobCjXWVkYGFua4GenJubm5ubmZianJ2enJubm5ycnJ6ipKGeoKGioqKhoKWzrKCgn5+enJmZmpqbrmp2nZ2em5manJiXlZWWkY6Nj5KYnZycm5ycnqCdnJucnJyempWVm56foZ+dnJyenp2cmpqampqampqbm5qXl5aTkpWVlpWTlZaam5qanZ6foqWjnp6fn5+en5+enZ6fnZycm5qcm5qbmpiZmJiYmJiYlZSTkZCRkJCQkZKTk5CRk5SYmZiVk5SVlZWWlZaXmZmXmZqenpyamJiXl5aWl5eYjX1ubV9lVlRFSzw3PjdSRUM+QkE4Ozw7OTg6ODY7Nzc6Njc5Oj0+Ojw8PT49PD06Pz06ODw9OTtAPj4/PT45OTs/QkNAQ0VDPT9DQj5AQD5APTw8YZWSlJWWlpeanJ6goKCgoaCgnp6enp6gn56em6WlpKSioJ+fnp2dm5mbnJydnp+gn56rmGNpbW5pZm2enZybm5ybmpmZmZqam5ucm5uam5ygo6SgnZ+en6ChoJ+mkpurn6CgnpuamZqZqIREf5+enpyZmJqamJiYmJKOj5OXnJ2bnJ2cnJycnZycnp6dnpqVl5ygoaGfnp2eoJ+cnJuampqbmpqYmpmVk5OTkpOWl5eVlJiYmZucnJydoJ+gnp6enp+fn56en6KjpKKgnp6cm5qam5uamJmZmJeXlpWUlJORkZCQkZKTk5OSkpOUmJmYlpWUlZaWlpaWl5iYmJiXmZqamZeXl5aXlpeWl4l4dmddX1dURUU5OTs8WT5AOEI/OTw8Pjk4Ozg6Ozc5OjU4OTs9PDk9Oz0+PD0+Oz8/Ozk+PDw+Pz5AQUE9ODc7QkNFP0FFQz1AREJBQEQ7Oz47PGKWk5SUlpWUlpiYmZubnJycnZ2cnJ2en56dnJqkpKSkoJ+enpybm5qZmJiYmZucnZ6cpolla3R4bVuFop2dnJydnJqbmpqampydnZ2bmpuboKKinpucnZycnJ2eoJ5inKaenpyampucoaNRR4OgnZ6cm5qanZqam5yVkZOXm52dnJ2fnZycnJycnZ6fnp+cl5idn6GhoJ6cn6CfnJubm5qbmpmZmZmZl5WWlZaYl5eXlpaYmZuenp2dn6GhoJ+fnp6fn5+dn5+hoqKhoZ+fn5yZm5qcnZuampmXlpaYl5eXlpWTkpGTlJSTlJSUlJaZmJaVlZeZmJeYl5eXl5eYl5iXl5eXlpaYl5eVl5eDeHZfW11eUT1GOjk4P1VDQTtDQzo8Pz86Ojk3Ozg4ODc0ODk8Ozw4Ojs8PTo8Pjk/QT06PTw+PkA/PUBBPjk2PERDRUBBRUU9PkVERD9COzo8OTpkl5SVlZaUlJSUlJWXmJiamZqcnJydnp6dnZybo6Oko6CenJuamZqZmJiYmZiam5ubm6WJa3F2em9lmp+enp2dnJybnZ6dnJ2enp2dnJydm5ygoJuampubm5udm5qmZl2joJuamZudnK51SUyGoJycnZybmp+fm5ydm5mZmZudnZ2dn52dn5+dnJydn5+fn5uanZ+goJ+dnJ6gnpubm5ubm5yampuamZudnJqZmJeYmJiYmp2foKCgoJ+hoaGgoJ+en5+fnp6foaKhoJ+enp+enJqam5ubmpqZlpaXmZmYmJiWlJOUlJWVk5OVlZSVlpWVlZSYmZuamZaWl5WWmJiWl5OUlJGRk4yRkJOWfXhqYWJiXFE8QDw2OENWSERCOjg7Oj47Nzc5Nj06OTk2NDc6Ozw+OTo6Oz87PT08QD47Oz46PT89PkBBP0A8NztBQ0U/P0REPj9EREM+Qj07PDs6Z5aTk5OTk5OTlJSVlpeWl5aWl5mbm5ybm5uamaOjoqCfnpuamJeYl5eXmJmYmZybm5qkgGpqb3lzcZegnp2dnJydnp6enp+enp2cnJydnp2bnJuampqam5ubmZmYpIBSeKKZmZqdm6CkX1ZOh6GcnJ2cm5qdn5ucnJubnJubnZ2dnJydnp2enZydnZ2cnJ2dm5uenp6dnZybnpubnJycnJydnJubmpmbmpmYmZmYmpmZmpyfn5+jpaKfoaKioaGfnqCgn5+fnqCioaChn5+fn52ZmpucnZqZmJWWl5aVlZaTkpOUk5STkJCSk5GUkY+OkJGOlZabmJWYlJmXlJiRjJCPk5yTkoyFjIeDhndxZ2pkXFxRQT44NkJHYEJFR0A+Ozw7Ojg4NjU8ODo4MzQ6Njk9PTk5Ojs9Ozw6PD48Oj5AOj5APjw/QD8+PDg6Q0FEPz5CRD8+Q0VCPUJAPDw8OmeYk5KSk5OSk5SVlJWXl5aWlZaXmZmZmpqampqkoqCfn52bmpmYmJiXl5iZmJmcnZ2cqH1nZXN7enOJop+enp2dnp6enZ2enZ6enp2dnZ6cm5ybmpubm5ycm5iYmaCIW1+UmpmbnJyjj2RaTIGinp6dnZybm52bnJybnJ2dnZ2dnJ2dnp+fn52cnZ2dm5qbnJmZnJ2dnZ2dm5uanJ2dnJycnp2dnZybmZeVlZeXmJqam5ubnZ6foqOhoKGhnJucm5ubnZqcmZycn6CfnZiZmZmUkpKUl5SPj4+OkYyNiYuQi4mLjpGRj4mQmJiQkoyNi5KQj5iYoqiqpqWlrKOmoZqep6eyqKKVo6Cfl39wcWlsXFtbTEY8NzdHR1g+SE5URjk+Ojg5ODc1PTk4NzMzOTY6Pjw6Nzo8Ozo6Ojo8PDs/PjtAQD47PT5BPDw2N0A+QkA+QUY+PEFEQT1DQj49PDlmmJSTk5OTkpOUlZOVl5iYmJaXl5iZmZqampqaoqGfnp2cm5mYmJiYmJiYmZmZm5ybnKx/am16f3lxh6Genp2cnZ6enp6enp6dnp2dnZ6enJubnJubm5ubm5uZmJmfl11ddpeanJ2dooFkWU1+op6enp2dnp6dnJydnJ2dnZ6fnZ2fn56goJ+enZ2dnZybnJ2em5qbm52enZ6dm5uanJ2cnp2cnZqYl5SRjo+QkJGVmJSWlJiZmpudmJuYlY2Mjo6TkpKRj4mQjpGRjo+Ki42NjYiIi4+Lg42NkY+MkI2Qk5WVnJihoJySn6SipKmam5eanKOprb3Bwbq8uL26ucC8ubq3uru7tL2zwbV/bnVmZ1peWUxJRTo7TElTPFZSSUM6QTo7Ozc3NTo6OjgyNTY4Oz08OTk7Ozw5Nzk4Ojw6PT85PD8+PDw9QTs5NTg8O0A/QT9EPTxBQkA8REM9PT06YZOTkZCUlJOTk5OTlJeYlpeZmJmYmZqbmpqamp+gnp+fnJqZmpqampmYl5iZmZmZmZmphXB1e4B3b4mhnp6enp6fn56en56fn56dnp6fnp2dnJ2cm5ubm5ucmpiZmZpgYWCAlp2cnph0Y1VOgKKfn5+enZ6hoJ6dnp2enZ6fn56en6CenZ6enJydnZ2cm5qYnJuVmJqamJiYmJmSjJCXlKCXk4+MjYqKiImMiJORh5CPjYqKkJCLjoqMi4+IiImJjpGOjYaFiYaKhoWLiI+SkJCNkJKXlpKamJ2TlJ6kpqaqq7Gsr6+rpquqsbm5tbS0rqyvtMDIxcXBvsbDxMTDurW+t7a0s7C2tb6qcHRyXGZfXl1JRj8/RUtMVklcTEQ/PUI6Qzk5Nzc7OTk3MTc5ODo+ODg6PDw7OTc5OTs9Oj4/OT5BPDs+PD46OTY5PDpBPkNBQT08QkBAPkJEPj8+OVyHhIOHi42KiYaFgYqMkZOVmJiHlZaWkpiampmenZ+gn52ampubm5ycm5iWmJiXl5ibqo56dXZ7f3mCoJ+fnp+goKCfn5+foKCfnp2dnp+enp2dnJqbm5ybm5uYmZmfaV5bZX+cnJ6Mal9QUoaem52dnZycoaGfnZ6dnZ2dnp2dnJiWlpaYlZWSlpmWk5GKjI+PjI+NkIuLj4+WiYiEi5GZjn2Fi42PjYyHioyQm4yRj4+Lio6TjIyNjIiSi4yFiYyPhouIh42KhYyEj4qXkJOYmpWbnKOqoaKknKKrsbe0ubWxtK2vsrKlp7O6sbq6vLa3tsDDw729vLa/urq8wbW4wL60r66mqa+3mm58Z1tjWl1fSEU+QUtJU1hZXkFGOTk9OkY/Pzo3Ozs7NjM6Nzo5Pjg6Ojw9OTk4Ozk7PDo+PTtAQDs8QjxAOjg0Nzw7QkBBQj4+O0NEREBDQz0+PjlhmZWLkYWNj5aSiHl9e3+Fi4OKgoqJhmuAeJCLlpqRnZ2UlJGTlpeampiWk42Sk5KQm5uIdndzcX1/cpGgnZubm5yenZ2eoKGgm5uWlpucmpubnJuYmZqYmJmbmpqXk3NoYVR2k5ech1xWUFeKko6SkY+Uk5KXm5mYm5ePjpCLjo2Ch4uLi4qLiI2RjIeHhoqIiZGKh4yEhYqNi4qNhI+UkIyDkJOUmZWQi5OTkZWRlpWOj5GMlI2Oj4qIj4ePhoeJiYmNiomJioWNh46JmJKUmpuXmKChp6Cko5qqqbO2sbWwqKqiqK6tn6qvsK21ubi8wr/BxLixtbCutrOwuL68ury+urOzp7G3wpB1gGNiXlpXUk1IRkVQSVlXX1tDUDpCQz1HRj84Nzo6NzU1OTc8OTw5ODo9Pjo6Nzs7Pjs7PTs9P0E7Pz48Pzo4NDM3OkFBQEI+PjpDREM/QUM7PT45Z6mloqKZn6CippeUiI2CiIJ1h4iKiIp7e3Z7enmPeoiSfn18en6CkYWBgH1zfH99fISHfnRweHZzfHaBj4iIiYeIioyMkZicl4iOhIuNi4iNkZCPi5GPi4yPkJGRjpKanpJ9oKOWpJxuTE9jhoaCjYuGiYp/iYqGiJiRiIOIg4KFfIuLjIaJi4iKkIyIi42PjI+Wh4mLio6NjY2Wk5OdnJyalpycm56bmpuYnpeTkZWWkJKRi4+LlpSMjYqDi4SEiYyQkIqOio2LipGJjZOTk5SVk5KcmZ6Xn6CfpaKvsamupKSfmKStpqa4t6ysu729wsPAv7+vpa2wsLS3uLO0uLa0ta6stK+4tLaBeXpjZmBeVlFRQUVMT0lcXl9UR0dCS0xCREA9ODg7OTU3Nzk3Ozc9PDk9Pj05Ozg6O0A8Oj06PkJBOD88Oj84NjQyOTtCQD9CPj04QEI/PkBEO0A+N2CloJqXnaGaoaCPl5efl5WCjaCfo6GdmpKOjIxycXBvdnFucG1ucHZub29waHBxcHR+c3FycXd7cnl2d3Jyd3Z6e3l8fXt/iIGEi3+PkYaNi4yGiouLiYeEgYaDgISgnY5/bJallZ+AiX9fcn+AgpKQhoSEhY2DhIyPj4+IjY+Hi4iRkJWRjpCKk5eOj5WYp6SfnZWYlpaln5udq6aqt7W4srGnr6qnpqGfmp2WkpWVkYqPjImTjZuVjYuLhoaJjJWQkJCLmZKVlZSbkJiTlIyNkYyWl5WilZ6mqauno6OqsJucpp+mq6G0vb6zs7+5u7u6uby9rqiusa6wuLyztLGxqrCpqLGxsqild3J0X2hhYFRWUUlKSFZNXl5eVExKRVFKRUdDPTo5OTc0ODY5Mzg4PTo9PD47OTs4Ojs/PDw+OT9DPzg7Ojg8Nzc2Mzc5RT4/Qz89N0BAQT0/RDw+PThUj4yGh4eUjJWZl5yWmZaNlZyWlZydoKCdmpiWeHFubXJ4cXFsbnJwa3FvcG1yc3t1dnd5fnVxeHZ0d3tybn98gX15eH1/eYOGg4WCg5CLkIuLi46Pi4mJhYKCfn+Aoot8blJ1nIyMWnF9fH59fIaOjYuGjZSRi5CXj5SXkpihlp6WlZunpp+goKawq6GjpbW0sqqmqq+isba5vcK7ucO+vLi9uLWxrLCsppuSk5mfm5SPk5WOmp2doJqfn5edo6qsoZ+em62hp6qwqaampJiRkZWUo6SirKSss7Szs6i3tru4sLKvra2yt7a6srW6s7e5u7i8urayr6yxsbKztLOxsa2us7Gzs6yhl3Zxc19jXlJRVE1PSUdYT1pcZFROR1VPRURKRD44Ojg3NTg4ODU5Nzo6PTw/Ojg8ODk5PTs9PTpCPj84Ozo5Ojk4NjI1N0I+P0RAQDY+P0I/PEM8PT46Tn98go6MjJOTl5eaj5SWjZaRkZSXk5qanqGdnHJvcnFxcXFxcG5zcW91dHJxdneAdXd8eYV+d3t8eX1/fICJiYmDfXp/h4GIiYGAgIGGiIKGi4eIhYSIiIqFgIJ9mJp3WE9McJSGgkxgcHF3iIWKjouNkJmclJSUoJqan6Ktsa6ppKWtr6ysrLWuvrmtrqm1sLexq7G2rK+9wsLAvrq8trKutraxtK66u7OurKepp6unoqmtoKmooq+wuLSxvLq6urK0ta+8tLezt7e7t7mtrbCprLW5sbeytLe2sLu7vLu6ury1vLi0wbWsqqqrtLG3uLm1trSzsKymrrCqq7Cxq6yusLKxtK6qo5N4dnJlZ1tMUlBFTUlTV1JlXmdUUExcUUhMUkNBOTk3OTU4ODY2Ozc5Ojs6Pjk4Ozo6Ojw8Pj08RD45Njs7ODg+OTUxNTZCRkREP0A3Pj5DPjpBP0BAO0t/gomXmJSdlpabmIuSlo6XkZGVl5SZl5+bmZx8dHV2dXl1c3RudnJzdHV2d319gH56gXyDfoJ/fYB/hIKFj52RiYF/go+Xjo6HgoCBiIuFfoqRi3+IjYyLi4eRjaONVS8wPXeHd3ZBRV5rbYSQiYmQj42PlJSYkJWcmp2eqK6ysLC1tLOtsrW4sLy1tbGqsKqztbS7t7SztrS1r7i4t62noqassLCvtre3vrW5vLOysa61u7C0r6+yu7axuMC9tLS0s7izvLq2tLrAvbm6ubq+ubm5vrWysa+yr6q1tLGzsbSzrri4tb+vpKaoo6ussa+zrq6wsKytq6qroqKmqKKnrauqpaynoqeYeHlxZmVZT09NSVJNV01PX15cTlVUYlFEVE07Pzk8ODk1ODc1Nzk1Ojo6OTs4Ojw8Oj08Pj4/P0I9ODY6Ojk6QDs1MjY2QUZDQz4/Nz49Q0I5P0I/PjtLjpGTmJmVmZGTopiTkpKLk4uOkI+Vl5ablZSbhoJ9enh2dHRzdH53end2gIKDhouMhISFioaQiYeRk5aRjZaalY+IjI+emJaVkpCTl5qamZCeoZ2Tl5uhmp2boqacZ0FaSDt3eWtnRTA4WWxzkI+LmJqPj4yUmpecnZugnaSstLm6vK+2tLi0tLK3uLmzq6+qqKy1srK1rrGrrqa3s7OxpaGotbCvrayrtbqyu7q6tLK3ur67ubG4sLmtqLK4u66ttLS3tbu2trm5vLe0r7G0t7a5s7e1pq2pq6ior6yprq2up6KxtLG0q6aop6Cjq66oqq6orLKwr6+pqKGeoaGjpqOgopqlo56ol3J3bmdiVUpUT09KRFBLX2JYWlFcVF9NSFJJQUA5Ojg2Njc3NTg5NDs5Ozk8Nzs+Ojg8PD0/QkBBPTs2OTk5Oj87NjM3OD5GQkJAQjk+PUBDPkBGQj44R5OWkZWTkpSQkZ+ZnZmVkI+Sko6Mk5aWko6RlZGSkIaBeXJzdXuBhI6HhZGTkpicnJiVkJWYo5yaoaeqqZ+clpeVnaKioZyZnpmlqKyvramnqqqpp6KlqKmrqamvj0pvoXhBe3dkYVBRW0dgboqhoaSem5qkp6Spq66spaSoq6+xtK6qrK6zr6ystLO0ua6urayqrLKwsK2wqKqmsrS0uK6qtrqwr6qurLC3s7i0t7W0u7y4tbWxtauyrKiys7uvrbGytLa1sbG0s7OvrKuvs7a0sayutKqqpqWnrauoqKupqqifqbOwqqeppaOio7CtqaatpairrayppaSioKWipaOYmZyVnqKippdudWVnZFdPWUtLSktTVHBiWWRXX1tcUlpQTEM8ODk6Njk4NzQ3NzQ4Ojw6PDg6PTk3PDw7PkM/QT47OTo5Ojs+PTg0NThBREVEQkM5PjtAPkI/R0Q+N0KSm5SVlZaVj46Wl5qZlZGKk5SSjo+SkYqKiY2Ul5qTjYmCho6VkZSfmpuin5+jnqGhn5ijpKelpaapqa2rqaKmpKilpKGfnqOjra2srairrq6rq6ykoaKmqaeoo3hgwNamQ3uMgHVPbY52U2R/o6inoKKhrqyrqqetrqilpKmpqqmmo6iqqaekp66wr7Ovq7Crqq+yr7Czua+rqLCxrrCyubO0r62vtbCss7GurLW1tLSzs7CvrKyqrKusr7G0s7CwrrCwsKyqrauqq6alrrCysKumqbCvqaOkqaunqKaopquwq6mvqaaoqaalo6iwraqpqKKpo6WnpKGhoKKloZ2el5aYlJugpKmUbnNeamlfVlpOUk5RT1NlXGVjW11ZXFBZT0tAPDs5Ojc6ODczNTMzODo9OTo4OTo5Oj08PEBEPkA9OTo8PDw+Oz45NTo8QkFFQUNBOT47P0BEQENCQDdAkZ6YlJeZlpGHi5SSl5GIg4mLk4+OkI2Hh4SFlZmWmJeZlpqeop2ZnKKkoaCdn5qfoKGgpqGgoKCjo6KlqKmrramqpqOmpaCloKaop6aoqaepqaSnp5mdpKWjop1if73Ar3eeo5qUZUxheG1RdJWioqChn6GhqKCcn6GloaCmo6KfpKGspp6foaGkrKqnrKivq6e0sa6ur7WyrKqwq6mtrbWwrq6srreup6yqpKivsq+sq7Kvqqqpq6utqa6urrGxraqtqaunp6uoqauinaapqKilqKisqKilpKWop6iopqmsr6+oq6mhoqKlo6Opq6ymqKWjqKKhoKSdnZ+hoZ2bnZ+amZWcnKOqlG9zZm5yZF1dUFVPWE9eZWRsaGJiWlpSVE9NQTo9Ojo4Ozk1MTYzMjg4Ozk5OTk7OTk8Oz0/Qz5APTk7Ojs8QD0+PDk5PEFBRUFGQTo9Oz9BQUJBRUI4PYqWlJOYmpaPiISNjpGSjIiIiI+JiZCRjoqKiJubmZygpaKlnqKjoZqeoZyanZ6bnKOop6ugoKOYoJ2XnKGjo6WjoqKkrKilqaCepqmnq6mkoKKhoqehpq6mpp2eaoScuo+m0KGZsahYTKyTU2WPoJ6goJ6doKOZlpqYo6KipJ+ZnKGhoqCbmp6goaSgnaejqrGorqusqaSqqquorKalrKqws6+rq6mwq6appaWoq6ynpqevq6Wnq6upq6irqqqrrailqKOmpaesqayoopykoaOmo6qpqKano6SnqKanqKepqKupoaKoo5yepqWjqKino6WlpqmgpJ6inpeYnZ+doqKlnpiUlZ6go5d1d2t2eGJfXFVZUVVXW2Nfc19oX2NTUVlUSD48PTg7OTo4NTM3MzM0Nzo4OT05Ozo5PDxBQEM9PT44Ozw9PEA/Qj86ODo+P0NAREE6Oz49QD9DQ0VDOTyCmJmenZ2alZKKiZGRl5GQh4SJgoGNj4+Sj42cnZ+hpKmlqaeorK2moqKfmKSmo6Stsa6yp6asm56em5qjp6Cfo5+foq+rq6yoqKuvqaiqqKKgoaiqrbGyr6uiooZ3fn1yz8mxm6eva1WqsGJah6afpaKhnZ+imJWem5+fpKGblZigoZ2enJudnZuZmZWen6Oonp2iqKGaoaOmoqSoqaqoq7CxqKWlp6eopKWpqaqnoqWmqKadnqWloqClpaOlpqCjpaOjpaelqamqpKekpqKmp6SrqaenpKGlqKynpqWlo6OopJWdo5+bnaCjqaeopqGjo6mooKiioJyVkZqfn6GmopuXkpCamqCVfHdvfXlmW1tgX1pcVVxoZG9jbWlpYl5QUEA/Ozo4OTg8OzYzNDMzMzc5OTs8OTs7OT49QkBAPTs9ODw9QD08PENBPjo4PT9EP0M+Ojk/PEI/P0FEQjk6gJ6kp6Gem5+gmY+ZnaCWloqGj4iEi4qTl5SRo6Wnqq6trLOys7S4t62pqqevtLKxqq6usbKusa2lq7OssbGpq6+rq6y2sLSwq7GysaOgo6qqp6+3t7S1trOtrq2PhoNuj825lZGjl3RUb3pzbnuVpqqno5+eo5udoZqWnqScm5aZoqefoJ+joJuUlpmWl5qfoJmVnqGZmJ2dpZ2gpKeqqaiqraylqaSlqqeqqaqsp6SkpKOimZmhnpqaoaCfpaWYnqSmpKqooqelpaGqp6mnp6ejqKWmpaGkqKesoqekoaalpaOVl52Ym5mVo6elpaSfnZ2lo6Kqo5+amZiXnJyaoaGakJOTl5ibjX93cnZ4amJbX19cYllgZG5ta25hX2RgUE9BQDs7OTs4Ojk2MTQzNjQ3Nzc6PTo8Ozk9PUI/Pj89PDo/OTo7PD5CRUA9OTtAQT5DPDs5PzlAQEA/QkM7OXuao6OcoJ2dop2Zn6KioJibmJaYkpSQm5qWl7S0rrW4s7S4tre0uLm3tbm4ub28uKqLnLK4vLS9urW7uru4s7q/uLe5u7G3r6iusq2inaCrsre7u7u5ucG4tLWgiHlkWZ+3wKapnYh3a3FveHh6fYaOkpicoqWmq6WkmKGko52goaKooaOgpaGck5mYmJmco56cmpudl5uZlqWam5+hqKmpqKuvr66pqKirrKytq6irp6WjoJyfo6Ojn6Cipammmpyip6Spn6GjoqKgpaanpqSooJ+ipKGjoqiop6OloaGopqalo5mbmJuTj6GknqKfmJiVoJuhpaCfm5udnJuamZugmo2YmZiTkYaAdnh4eGNbUllUX19hbWh2a3FoaWliWlNMQDw6Ozg5Nzk3NTU2Mjg1Njc3Ojw7Ozs7QD4/QD0+Pjk6PDk2Nz47QkZCPDg7P0NDRDw+OT43PkFCP0ZDOzhwkpqblJ6bm52Vl52doqajopaXnpaXl6GblJi+t7G4uba3t7i7l5S2vbu9vcDFtaK7mKC3v7+6wcm0nbu2sra/xcGooLa0urGqrrSxsLK0tbfBxszPzszJvrOkkHNmUkSLl4mJiH54cW5nZmxpa3FycXFydHyMqcTEu6Knqqynq6mlpqCnoKGmoZOWmJ2foqSjnZ6coaChnZekmpmdoKaqqqqtrq2tsLGrrK2sqamrrqimpaalpqSkpqaeo6eppKGcoKKjpqCio5+jpJ2foqWgpJyboZ6fo6GhpaSlqaOkpaKkp6ehn52elpOcoJiZko+MjJeWn5uWnJqdnJqSlpSUmJOQmp2YiouHgIB8gnhhXllTYWlhZnRvdGl0ZGlkYltMSz46OTg5ODg5NzM0NTI1NDY2OTw8Oz08P0E/QEA9Pj44OTs4Njc/OUJFQzw7PD5DREM9QDs9Nz1DQ0BFQjw3Z4yRk4qalZiblZWYm6Knq6aVl5iQlZmhnpeXvrWztLu6ubi5woeYt6u4u8DCxbOjw6e4s72/tMTHvbS7uL62wMTErqCworW2tb2+wcTHw8XH2+Pj2su8r6SXiHRZWlFDaXpsb3Vua2VlWVdeWFxjaWloZWBoibTAwLmpr7Gwr6yqoqajrJ+fpquXmqifpaWfoJydoKuwsKyiq5yYm6Cor7Kys6uorre1sq2tqaalqKulpaStqaShn6Cnnp6mqKmmnp+anqGlpqmcnaObl6KmmpuanZ+cmqGcmZ2eoKijn6GfnaWioKOioZSZmpmTj4qLhI2Qk5uPjpiVm5eYkJORkomNl5iYk4uKi32AgIVwYGJfXmtjYm54dXdvbVtiUlZcTUc7PDk3OTc5Ojc0NDQxNDM3Njg8Ozs8PEBAPUA/Pj8+Ojo5Ojc6Pz5FRUU8PT1AQkJCQUE7PDhAQ0NARD87NV+MjIaFlouUlZeYl5ifpqellpWVkZebn5ual7mxtrO5vLy5urWqsryxvsG0vMe5uLuuv6fGw7/KxsnIxcXJvMLHx7+xsKe8vL7FxMbJx8XGvs3R1cq5p52UhnJeUVRLRFtmXmRrZWFgaFlUWFJWWFlcWFp0mba7q7SyrbOtqa6vp6awr7Ktqq+zpKu1qaeopKCgnqmyuL61tbWqqaausre4t7apq7i8ubexr66noqOop6SfqKOfnqCZoZydoqSnp6GelJuaoKGlnqChnpajnZSQlpiboZqflpORlpSin5qenJudoZ6kn56VnJiPkpOPjImTkJefiZCWkZuUmJGRlZaDjJWXlpKLjIh8f4R/amZoYWtsZ252cnJ2cmdeYFxSSUU/Ojo6Nzg0ODw3NjU0MjMzNjU3PDo7PDs9QD4/QD48PTk5OTs6PDw+QkRFPj49QENDQkREOzo4QUJCQUNAOTJbk4iEjZGKi5GRlZCSmp2fnJOSmJSdnZqXmpW2sbm1tb6+tri1uLO8vMTEusPHwb+0s8XFxr/CzcfLzsvLx8HDxsfIysXExcO7vLzBxcHFxL/CwcfLyLeUdWVVUE9USD5ea15fZWJgXWRhU1ZWVVNUV3Kbq7CqqKqtrKmlpZ6pr6uyu7q4u7e5t7O5uLOurLO0qrC1ub3Bur6+vL60urm4u7qysbS8u7q7s7Oyp6Smq6uioaCdmpudmpyXmpuenJygnZaclpuZnZ6io52UnJCNiY6OkZ6bnJWNh5KLmJiWmpybmJybnp6cmp6UjpiYmpSRmZeeoZWYmpKXlJWRlJqYk4+TnZaSi5F+enx/dWtsbmRvbWlxeG95amlhXWdhUUZEQTw5OTc2NDQ6ODQ2NTMzMjY1Nj05OTs7PT47Pj49Oz05OTs7Oz89QUNBQkFAPEBDQ0NFQjs4OUQ/P0BCPzsyV5uQkZCQh4WSjo2IjZCTlZGPjZSUm5STlpqRs7e4uLi+u7C1sri2tbbAw8G+w8LAvru+u7u8xMzEzNDLxsa/xcfLyNTLysjGv7u7vsS+xcjGxsTEw7m4w5thSURHS0Q9W2ViYWhjYFtjX1dRTk9PVX+0uqyupaSjp6SgoKWZqrSxvsG+urm6uLW0srG0tLO6wL7Av769u7u9vsDCt7a3tru7sru+ubi3u7a3tKyoqamrpqijnpOampyYkZKZl5GRmJqXnpiWk5acm5+dlJOJiX6GiIyWlJiZkYmVkZeWlZmbmpaYl5idnpyhmJWZmZyYl5ybn56jnJ6WmJeTl5yZmZyUlp2UlpOJdnl6e3dua2lodlpnc3hzemdnXmRbUlhJRj87Nzg4NzYxNjk3NDQzMzM2NDY7ODo8Oz08OD0+PDo7PDs9Ozs+PkRBQURCQEBBQkNDREM9OTlCQD8/QD89MkyWmpaSk4yKmJCKi4yOkpKKiIaNkJiKj5CUl7O7tba/vb2xtrjBvby0uL/Bsbi3vsHFvbu8wsbJv8jOyMHEwcfKysbKxczIzcbIxb/DwMvNz8rGxMTEwsTBrYNPRk1FO01bX2VrZV9bYFlYUk1Uf6KqubWyrKmjoa2qrKetn6y0tL/Dvrm4vbawrausr7W0ur7Fv7u8urO5u7i5ubWtsLS9u7G/vLiytrmzubu0ra2orKyqqaeXnpualY2MmJSTi5WWlJyZl5WWmZKYn5mQiop+iYqKkY6Vl5OUn5mWkJSZmJmWmJOUm6GeoZiYmp2ZmZaenpibopqdnJuYmpuZlpeXlpyZlJyYfoB4eXZ2ZWZqamhea3BueXhjYmFgXlhXRkU4Ojg6OTc5NDQ5NzY2NTEyMzM0Ozo9Pzs9PTo6PTs8Pjo7Pz48QkBDQkJFQj0/Q0NDQ0RFQDk6QkFBQj5CQTVCkJeUlZmSj5qQjpKRjZSVi4qHjI2UiImPkpq2u7S8xsHEwr3BxcLAtLO9v6ywr7rDysPCvs3IxbfByMW/wcLIy8rCwsTJzM3Oz8zDx8bIycjIycfFycfIx8LGlmpYRz8/R15jYmpgWlhXU1V2mba+u7y6vKytpqm7urm3v7O1uLLAxrq3t8Gzsa2tqau1s7u2w7a2vbWxt762s7e4sLW2v7uwvbq0q7CxsbO8urOzrqutq6yxnaOjoJqQjpiXlZCclpaYlpWSnJmTm5+clpGUjpWQiYyQlZOUm56YmZKSnJedlJmSk5aZmJ2VnJ6do5yVnZ+TnKKcnKCfnaOemJSVl5ebmpmgkH99cXRxb2NhaHZoamp1bnlsXmRbVmBZTEhENjw5OTg4OjUzOjY2NDQxMzUyNTs6PD47Ozw9PDs8PTw7PD49P0E/RUFCQ0M+QEFARUVERUE7Nz5DQkI+Q0I4O4+akZaalJKUjZCUlI6VlI6Pi4yJk4uIkJObt8C6xsXEw8zCwcS9vrWvt7uvr7O6wMfFxMHMy8W2ucDCwsTHytHLwsPExsnFzNDNx8zJwsLHwsvLyMfMyc7Fxsa9qXJQSzBYU1VmYVNOT3CpyMjCxMbAvL60sbCwwb6+wcbAvre2w8K6urbAvrWyrKmvsri+tMC0tLi0t7nEua+8vrm+v8K/tbq2q6qsrq+wt768trSura2vtaSlqKimmpycnZyeopydmZOQkp2VmKCdmJiVmZmZl46LlH2QkJefmZmYk5GToI6Nko+VjpCUlaKdnKSem56elpyjoKGipKOkop6amZubnJ2enIN9cn14cGdga2p3bWlmdm90Y11jVVdVU01HOjc7OTk3Nzo3NDg3ODQ1MjM0MjU7Ojk+Oj08Pz04Oz05OTk9PEBBQEVCQUJBQT9AP0RFREVAPDk+QkNCQENBOjSAoZeUmZiVkImUk5aTiZGMlJGOiJaKi5CXnMXLw8O8wMPHwbm9vbu4tre3rrK3uLzAwsDCx8bHurzAwsTHyMbSycHDw7+/vsTLyMrLyby8yMfJzcjDyMnJxcXCw8LBvJE/T3Z+iVZMb6TL1MW2v7/Av7q7vbWzs8C/ub/CucG3u8G8uri7ub27srCvsKy5wri9ube1t7q9xb24xsjCwcLGwr28tamurrCwr7O6t7m2sK+tr7OppquprqannqSlo6OjoqCblZiekZecl5GRlZeZlZmRlJiSlYyYo5qcnp2FiZ+TfJKWlZKUlJennaCipJ+en56foaGkoqKjoaOinJ2fnqOhppl5enmAc3BmZWdkbGVia25vb19ZXVdWTlBKRjk5Ozk3Njc3NjM3ODk1NjEzNTI3PDs8QDs/PDw6ODo8OTk4Pj1APz9GP0JBQz89QT5ARENDQTw5PENBQ0RBQDozbKKdlZedlo+PmJiZmIiSjZGVkI+Vjo6TlpbKy7u5urnBu7q3vsG8vLu5sa61uri4u8S6vsC+vru8wMXBxsK+xsK5u8O6uLm8vsHHwca7ucjIw8XEwMPBwcDEwcK9vMWnd2uDkJhvqcjIx9HBr729uLm7u763tLG6v7S8vrG5tbi7tryztbm2uba5t7GtusG6vMG/t77Ev8bDw8fHwrvAwr/Cv7iys7O1tLGut7S3tbSxrK2xp6Wlp7CtqJ+nq6ajqKWmpqCgn5SYmZSRkZWUl5OYl5qhnZ6hnKGdoaWglpSbkZeXmJqTnpmZqaSlpKWdoqCanqCkoqOcoqGjoJ6cnp6ppaiVfXqDeG5mYWViYWNkZGpjZ2RbWlpdWVFPRT07OTo7Nzc5OTY0OTk6NTMxNDUyNzo7OkA9Pzw8OTc3Ozo5Ojw+QD8+RDxCQURAPz49QkRCQkI+OjlCP0FCPT44NVmfnJiTmZaRlZiYmpeQkZCQk5GTlJKSkpSUxce4tbq5wrm5vMPFwri7ubGxtry6tbnAu7u5tre0tLW/u72/ub66urTAuLW3sq66u7fAt7zKz8C6v8C8u8W9usDEv72+r3NlfZGLidHFv7/Jv7DBv7q3u765tbi0uLy1vbi1tK+zvLG3tri/tr25vb65t7q+u7/Axb29y8PGw8TAw762ubq2v7i7v7y4trOyq7CwsrWzs66sq6emnqeurauiqKumpqqjp6iqo5+Ym52bmpicnJiXnJuhpZ2anqGhoKGmoJqbnJiboJ+dnJ+coKiho6SknaKfmqKgop+el6Shop+dmpieqKWhi3x5iH1xZGFjY2hrZ2dqZmpeVlZUWU9TTEY4PzY7Ojc3OTs2NTo7PDYzMTM0MTc7OTg/PT47PDs3Njk5ODo7PUA/PkA9PT9CPjxAQUNDQT9DPTo2PEBBQDw9ODdJlJibj5OUkZWYlZGWkpWRkJGUlZSTk5OYlcHCwLq8ub62uL7EwMKxvbqytLO4vLW3vMC8vbS0sbC1t7W7wbi+ub+8vLe0t6+ut7W5v7vB1o23v7vDtbrHtrW4ury4ubaqo5iOf4PJv7+7wb65xr3Cv7zFuLe3tLi2try7uba0t7q1s7i8vbm/ucPAwLu5vLu+vcjEvcfEw7rAvb62sra4srm0usLCureysaysq62yr7Kur6ijpJ6rrKyqpKakpKiqoqemraihoaGmn6Oiop6bnKKfoKOdnJuhn6KgpKCem5eZn6GdnZ6eoaWkoaKioZ6ho5yinqCZnZijn52eoJqZoKKmnYR6g4F5cW1lZWdvamVsaFlZT0tLS1JKTEhEOT44PTs2Ojs5Njc8ODk4NjA0MzE3OTk7Pz0+Ojw6ODg5PDg6Ozs7PD1BPj09Q0E8P0NDREA/Pzw6Nz5CREE/QDg4P4mYmoyMkI+Tl5WMkpCakpGXmJaUlJKQmZTDvsbBwby8uLi6v7a8scK2tLyxtLa4s7q9v768sq2vrLGwt7y3u73BxLm3t7a1ubm6u7+8z8R3p8y9x7e5t622tLe5s7WxvMnDlUt6yr6/vr28v8jDxcW+x7i2s7W9uLi4vru6uby7urS3u7q5v7zEwL+5uri/ubvFxr3Fw8Kyur27sa+2uLO3s7q+wLm2rLGrrqmqqa2qqq6mpKWnrq2ppaOio6GkpaWmoqato6Klo5+ho6Gcmpyhn6CloaCenZygnaWgnpeVmZ2fn52gn6KmpaCknpybn6Ofn5mcmZ2epJyWnKOcnqGcppZ+f4Z8a25xZ3FrdGZjbmBcVUhLSkRKQ0NHPzo7OD48Nzs7OTc4Ozc8PDYyNzUxNjk8PD08QTs8Ojs6OT45Ojs9PUA+RD89PkRAPz9BRkQ/Pzw9OTc/QUNCQEI5Ojl3nJiLh4uQkpOWjY+TmpOQnZiSkY2PjpiSvbfHvsO+vbu+vL22uri9ure9s7OwuLi1uby7wLeqraSusLi7sr2+u8S2tbi1t7++xLzCxNavdH+6yM/CwLiutLS7vbe5sb3Dyo9DdM3Dwr++vbzHzMfHxMe8tMDBwL27vMDDusDCv7y2t729vcHBwL+8ube8wru3v8W7wr++tbe8vK+vt7awtLO6ubq7r6mtq62rrKaqoqeuqKWqra2vp6Sgn6ajnqKjqKOjq6Oiop6dm5ublJaZnJyfpZ6fnpmYnpejoJyXmZqZmqOjop6jo6egpqCbnaCjnp2WoJmcoKCblJegn6WcmKKQgYaBcWZsam91b3hkaGNcY1FLVUhFRUNHQzw7OTg9Ojc6PTo4OTs3PD01MzY1MDY4OTo8O0A9PDo+PDk+OTk9Pjs/PkM8Pz5APz4/P0ZEQEE/Pjo3P0BDQz9APTo4ZqGYj4uNlZKVlY6PlpmVl5uVjoyMjY+bk7m2wbS/vLm8w8C+wLq1trKywLmvsry8sLe7tru8qqqjsLm9vLK8vrzFuLG4ubzGycrCxsnSmnFyq9LRzMrEtbq/xMi+vrS/wMB5Um3LxsK+wby/w8zKx8XGwbnCusW/wL/CyL3Hx8bFvLrEv7vBv7rAvLu7wMS9t7nCub69t7S2uLqur7WxsLCytre0t6yurKqsrKuoq6Gms6qlra+trKippaOkp5+io6Onoaeiop6cnZyamYyQlpeZnaKZnpuVkp2UoaCdmZ6fmJimpqKfoqKmoqeloqCko6GbnaCbnKKfl5WVnp6kmpafiYGDgXRwbW10bG1vYGNfYmJOSU0/RUA/REM7Ozo6Ozo4Ozw6OTw+Ojo+NDQ1NTE5OTo5PDtAPD89PTw4PDs6PDs7Pz5DPkI+QD89Pz9FRUJBQj87Nj9CRUQ9QUE6OlmfmJOSlZqVmpOQlpeclZuZlpSVkZKTnZm2uLaxuru6vsG5uca7trWypb69tLbBv66zvbS4wbGwsbS7xNDDur68xL63vMC/yc/HyMrKwodyc6PLzMvNysbCw8vOwby4vbqxcGNiu8jEwMC/xMDKycPDw8O7t7TBucC9wsbCyc7Hxr66xr26v7m3wLm5vsDCvrW0vLi2u7CvsrK1r7Cvrqyus7CzsrirsbKxqrCrq6yrrLatqKyusqarrKmpoaWgpaakrKSmoaChnqGgnaCMlJeTm5+mmZ6emZOYnZ+gnp2eopuYp62ooqSgoKKqpqmhqKGlm6CgnZ2jn5SYmKKdpqGfm4J7eoh7bW14fGBxZFxfYF9UST5DRUlCQz5DOz42OTo7Ozs7Ozs7PT05PTU2NjIxODo5Ozs6QTs/PDw+Nzs8Ozw9PTw9Pz5BQUE/P0FCQUVDQkRAPDY+Q0RFPkJEPztTmZuZmJ6dmqCalpyZn5KdlZ2boJWWlJqYur20sLu8wcTCv8XGura5sqO7vbS3xLuwtbq2ucS4tLy3u7ur2sO+tr7Avr66ppypsrbDv6V6dniaxMfLyMHDwMDJysG/u7mxoX1zaq3IxcS/wMG/y8fDwMjAvayrwLO7u8G+wMrOysS9tby7ub+5ubW1s7/Avre0s7S4rbeqr7CwsrGvq6+nr7ausrG5rra2uLSzsLGttrS6sa6srranrLKsraSjoaenqLKrqqWkp6elpaCml5ujn6SmraKeo6KanaWiop+foaWenrC0sKSlnp+kqaevp6mgq6CiopqipJ2anqGmp6+psZWCe32Bem5zeXRocF5cX11aUkZFRE1JQUQ9SDs7NTk7Ojw8Ojs7Oz0/Oj01NDUxMjc4ODs8O0I8Pz46OzY6PTo7Pj0/QD87QUFBPj4/QkBBQkJFPjo1OkFCST9AQkA7TJqdnZ6fnZienZmampySoJWbnp+blZGRl8W+urbDvMbCvr/Ixbe1uLe2ubu0r7e3srWzt7m8u7a7u8S5bazOvba5wLyrfm5obmxygZWYc3d8l72/xsC5wLy+xcS9vbixsJmQfoCbysLDvL2/v8PDvr/Ivb+llcO0trW9vr7OzMzCuLK4uLe9ubuxtrLIwLu2tLGwt6yzqbCtrbS3r6uuqrG1r7Gvt7O6usC/tre2sru6wLWyrbO3rLC6r7KloqWrrK+5s7KosK+xr6qiqKGkraitrLOun6inpqWmq6Sknqaqo6ayuLOrpZyfp6anrquqpbClpaWbpKOYn6exrLW4sLKOhHl/fHdtdXtxb2pcYGFaVFFBRklHS0BFQ0k8PTY7OTk8Ozo6Ozo9Pzw9NTU2MTM2OTg8QT5AOz1AOzs5PD04Oj08QD46Oj49Pj09PkBCQkJBRD03NDU9REc9Q0I/PEWUnqCgoJyXmpiYlZmdmZ2fm52bnJaRj5LDwMK9wrzEvLy7xbu3s7e2tru7s6CWtayvsbS0tLa4ucDNtHaAs722tcKlh2laXWBNUltabnN3gJ+4uMK6s7u3u72/uru7rqSbmYiRfsDEw768v7u7uLbBwrbCoIGntqqwvsK60snIw7GwtLS1vLm+urq7ysO7uravsL2xuK+ys7C3vbaur66wt7CsrLK2vbzEwrq9t7bAv8G3tbC2srGzurGxr6err6u2v7e1qbqztbmxp6uop7ausrG1uaisrK+qr7CqqKessayytry0saykqKuoqKusq6i2qaaonqadmKOuvLG7wbSmiYF7gnpzdnd4bnJhX2ddW1VKPT8/R0c9R0NDOTo1Ozk5Pjw8OTo8Pj4+Pjg4MzE1Nzg5Pj9BPzs6Pz08Oz09OTs8OTs6Nzs+PT1DQT8/QUJEQkE8ODU4PUNGPUREPzw/iZ2en52Xl5WUk5aZnpubmpuYlJ2Uio6Owb7Dwr6+vrm2usCxtbGzt7fCtbOrrbOoqa61r620trnCyaiEeImgr7Wea2VmVlhfSUlNUFNsd4WlsLe+ubK1sru5vLa5vrSVnKeWoXCuycTAvb+5s66yvbuuv59yeqONk5yfpcPCv72sqq+tsrq3ur67wMXBu7y3sLXEtb+0uLu0u8PCs7a2sbisqaWrsr23v7+7u7exvL28trGvq6uprbOvsLCrsLSpuMC2sqm0tbC3tq2spqu7s660uMKwsbG1sbK1saywsri4ubi+tLGzrqyxramvrqqyuK6trainoZ6ptr+4ur+wlol9gHxxdHd0d3JtYGRiXF5PSUI/PUlERk1EQDc3NTs6OT48PDk4PT47PT86ODMyNTc2OD8/Qj86OD4+PTw5PDk7Ozo8Ozs6PEA+QkI9QEE/QkI/PDs3OjxBRD5CQz8+QYqgm6GdlJiVlZKYmpyWm5WalY2bj4SIhru0vb+7vLm3s7y8rLOytLS2wLXAr7Kzqqqxt62pubO3v8WriHx2jKCZYFRDV1ZIYWtWT0ZJYI2gq6+2urW0sqy8ubi1uMG9i5myo6ZypcvCv7m6ta6lrLOwprSheYSnl5GPkI6OmbC0paiprsG1s7K6tbu7u7W4trC1xLK+vL+8ubrFybq9vraxp6SeoamxrrW5trKxq7S2trGopp6gmaWmpKynq6y2qa+6sa2kpq2lq7GrrKmtuLawsrjBtrGxtbGvu7ayt7W1sry1urKwsbKutLKqrq2nuLWyta2uqqiosrq9wLa0qY6Ce393cHxvdnNvZF5oWV1eU09OQj9KQ0FLSkA2NjU7Nzg+Ojs4Nz4+PDs/OjkzMjc1NzU8PD48PDg+Pjw8OTk5Ozs7Pjs7OTw+P0E9PEJAPz9CQD47Njc6QERBQ0E/QUKJoJ2loJSWmJiVnqCcl5uYmpGMmYmDhoS1r7S7u7S1sLG2uq6wtLOvtbq1urC1s7KttrqvrbyzuLi/tZGCeIiPb05KP2NaQU53gJRrTUFcgbC1s7WytK+su7q4trm/xnaEqp+bZae/uLWysa2tn6Snp52nqrrFy9PApJCUl4KDoKCkpbzErK6nsKuvsbGtsa6ur7mwtLy+uLm4x8W8vLu4qaKcmJufp6assq6zqaapqq6popqXl5GcmpijnqKir6ekrKaompqemqGnp6anqa+2squ0trCqsK+xqbm2sbWxrqy3s7avrquuq7S1ra+rq7GtsbKoraurs7W3ur2wq6GLeoJ5cnZ0bXZqbF1ca1VeXFBOSERHTUJHTkc4NjY1OjU6Pjg7OTc8PTo7PTo5MjM2Nzc3Pjs9Pjo6Pz48PDw6Ojs5Oz47PTk8Pj1CPDtAP0A/QT8+OjU1OkBFQkRBQEJBiJ+ipqGYm56dmqWpmJudmpmUjJmHhoeGrq2uuLmxsqiur7iyq7CwqrK1ubm+tbK4tLm6trm7tbWzt7aVjIiEe1hGQU6GWkpKWHaNgGNAUqK5s7SysLGtsLm4tru3ur2QorKspHOrsKmrraujqKCdnp2YmM7m4eHf1cankYl5bXGXoanBpqiooaanpaqtp6ynqKesq6yyu7SztLm6trK2ramgmpaWm52fq6yqr6Oko6GpoJuTjo+QlJKSmZaanaSloJ+ep5iVkpSZnqSjoaWqrK2iqaqppKmtrqW0sa6xrKqprq+wraWmqqSos66tq6impqmrpqqnq7Ksr7Oxq6mWgX+Bd3J5aXV0b2VVYmRYXVJPTUlASVJETkM9ODg3NTo3PD46Ozw4OTw7Ozw7ODI0ODk3ODs7PDs4PD0+Oz08Ojk8Ojs9PTw6OkA9PDw7QD5CQEE/Pjk1ODs8RkFDRD9BQYijpqKjnqCfp6Coqpufm5yZmI6Xi42PjKqpqLGvsK2lp6ayr6mmq6CvsLu1vby4wMG+vLy8ua6sr7G7qpmZlWlOQFJ4cVBJSUtnm4FZRVGtu7Gss6+urK22trK0ta6ppp+am52fpqieoKipn6GnlpuWlZvbz8bGzM/Mv5t9bGple6XGqpeiop+fpaCkrKWmqKSio6OrrLOuqa6urqeqraisoZyamJmYm6qoq6ufpqKbo5yVkIyPkJCTkJeVlpifnp6amaaXk4+Slp2ioKWipqSnoKKko6Ghq6uksq2qrKyno6yuraufoaKkpK+srKmmo6KqpKqppKmrpqmsq6ahiHmDfHZ/emN4bW5cUWlVUE9HUE1NQ1BSQD47PjQ6OjU7Oj07Ojk9OTk8Ozw8OzkzNjk5Njo7Pz06ODs6Pjw6PDs5Oz07PDw9PjxAPT88ODtAQEE/Pz45NDk8N0FDQkQ9QEOOqqSjoqGinaqlpqimoZ6dmZ2PmJWTkJWnpKGmqKmlpKChp6uhnKKbp6u1sry9wMLCwL7AuLSnpKyovMKrpL5pRVKcglFXSUlfS1OOYGNigK61qrK0rqqrr7Cys62lnZGXk4+YoJ+ioJyjpJ+dqJOZlJOunGNykLTGx8erfGlpbmaUtYubnp+hnKGfo6innKehoKSfrKisrKCpq6agpKimrKOenp6al5qrpqqxo6WonqCclpOPj5KRmZCWlZiXn5ibmpukmZeUlZqdoJ2nqKWgo6Kho5+coKmqpa6upqipoaKqrqqnoaCio6msq6eppqShqaKlqaalpKKmpKijkn59gHV2fW5se2RoVlNkTkpIR09TTktOSDxFQD0yQDg1OTs+Ozk5Ozg6PDs7Ozk5NDg7ODc7Oz48Ojk8Oj07Ozw9OTw8PD49PUE+QEJAPTc6P0FCQEA/ODU1PDpAQ0BEPkFGlq6koqWeo6KpqKipqqWmnp2imJiZmZWbop6bnqOioKOgoZqgmJeXlqGorK62trq5ure3u66ooKGpoarGv8qhUEFynnhPbktLYmV1c19aXnCPsa+us7Wqpqyso5uZlI2RlZeYmJyfoqKcnaSemqSWlpaXoUstSFqIs8LBq4Bxg4mDeH2Uop6fpp6dn6OmqJ6jpp+qnaqtqq6nqLClo6Smp6ymoaWim5mer6iusqumq6qgm5iYmJWTlpqTlZaalpuXmJihnpycl5uhm56ao6eln6GioqOdm6Gmp6aoraOppZ6kp6mkpaWhpaSsrKmmq6eioKSjpKenoZ+gpaKmoIl8gH53eXxleXlhYlNWYUlJS0xTVUpTUU05PkE2Nz02NTs6PDw5Ozs4Ojw9Ojs4NjU3OjY5Pj0+PDk5PTk9PTw+PTs7PDo+PTw/Pz9APT03Oj5AQEA/Pzg2NT08PkFCRkBAR6CupKaroaOqrK6tp6ypqKCipp6bm56aoJyalZmfn5uen56WlJOXk5KcnqSorq2sq6uvqq+pnpeepZ2jx8ePV1NJZKNcZX5vcl1Qa2NbZF9da4+0sLC4rKahnJ2alJiamZCOkZWRjI6Nk5minJeimJmVnIRSa39pYJSvrp6DgZ2eo5p/qqqlobCjmqOmpqqioaqiqaSosquxsqu5qKarp6urqKysp6Ggo7GusrG0qrKvo5mcnZ6hmJubmpiZm5WWm5aZnKWhoJqjoZqdmZ+kop6gn6KmnZulpqWkpaiip6OepqOinqaloqWlqKykpq2noJ2eoJ6gpaGenqWgppmBe4F8dnZzaYJtZVxTW1pNUktPT1ZNVE1CNz5DNzg9NzY6PDw9Ojw5ODo7PDo7OTc2Oj01OTw7QD03ODs3PTs9PT06Ozw4Pj09QD5BPj4+ODg8P0BAPT43NTg9Pj1BQEZAQUihqqCrq6GkqquwramtqaelpaWkoKGfnqWXl5SYmZ6YnJ2blo+VmZKRnJihnaqip6Cep6Gln5ySm6KanqukjXpVaHJ1dXFidnZYV2NgY2dZWFdlrK6sr6efnqKhl5GUnKCcmZiSk5+coaOanpqWnpmdlph8a5Cii15wmZiPi42eo6Wnp7e1sKazrKGtraOvpaSmoamorrWzsr22vrCssa6tqaq0sbCoq6iztbizuK2ytKSgnaWgrKGhoqGgmpmWlqCcm5iloaCeo6Ggn5ucpaCfnZyhqJ+fp6meoaOkoKagnqehn5ymo5+ipaOooKmrpZ+dnZudmqainpyjnqeQgYN/fHh2and2Xm1bUmFJUlZIRlZXS0NNSD1LSThGPDc3Oz49PDo8OTg6Ojs6PDk2Njo8Nzs+PT8+OTc9OT47PEA8OkA6OkA/O0A+QUA9PDk3Oj5APzo+NzU4PT0/QUBEQEJGnKueqamipamorqimqqWmp6aoqqGlpKOmkpOVmJacmpqcmpWTmZuNk5+ZqJ2un6eenKGdnpqZkpiem6KhoKSAboJwYGNYTFtTWk1MUFhSSE1NR5esqqmloJ+akZKUmJiWlpWMiIuOlZ2cnZyelp2YpZ+RgYCzysqTYoOFho+IlaCjoa68vristLSwt7CutKmmpKWsqbmztbvDvMPBt7u2q66xuLe8r7OwtcG8t76zs7WirKKpqbKpq6inqJqZnpqqp6CZqKCfn6iopaWfnaqiop6bn6igpKetmaCjnp6nnqCmnpycoqGbo6KhnZympaWkn6KZnJukn6CboJyjiYaFfnZybWl3bWhuXVhbQ1dOSkdNSENGTj0+TD40PDo2Oj0/PDs6Ojg4PDk6Ozs8NTQ6PDg5Pj4/Pjg4Pzk8Oz0/Oz1BPTo/PjxAPj8+Pz08Njs/QT07Pzg1ODw8QERCREFCQ5WqoKapo6mqqKmjoamgpqinrK6lqaWpqZSSl5mUmpqanJiYmZyamJmqoLGit6Swpp+enZ2XmJWZnpuco5+dimJXXmVgV01RRz4+P0NDPz5CUXioramqpqCen6Gjnp+em52clJOVlZ6emJSFnZmfmaqljX6BsNTSsXRhc3uDeI2WmZWlwMC+tbm7wMO5vbusrqexrbHCtrjCxsDIysDKv7C5ub24wr64tLvGxL3DvLi0qrOtqrO0r7Ouqq+jnqyot7Kto7CmoaOwsa6wpKWuo6GgmqGmoaSqqpmdoJmao6CmqKGcnqKemaSenpiYo6OhpJ6mmpuipJ6fm5ubnIeGgXx0cmtsdXJxaFdcUUZVSERKUEk/RUI0Rkg5Njw+Nzs8Pjw8Ojo4OTw4OTs4Ojo4Ozw3Oz49Pj02OEA5Ozs9QDw9QDk3PDw7Pj0+PUI+Pjc6QUA+PD45NTg9Oz1DQEFDQkGRqqGlqqelqqimn6KnnKasp7Gyq62jqayVkpWalJecoqGbnqCinJ+psqu7sr+rr6ylnqCgnJyYmp+gmp+flX1gXmVgUUdEPUM/RTw/OTZOf6qzp6SjoqCepaymn5idlZKanpmVjIqGiIZ4bIafoqGprZB9cKTVlHuHS1pwdHGCg3p4k73Iwr/EyM3QyMvDsre1vrK+xbu+zM3GzMzM0se+v8DCvcfHwrjEysnEwce/urS6u7W7t7C2squ7sq67t8C7uqu4rauquLu1vK6uuKOmo56mpaKjqaaZm5+Zmp2nqqegoaGkmJSjlZSZkZydn6Sep5+en6KdmJmUmJSIhX56cmtkaW94a2ZaXEZMTUVEVE1FQkU3Oj87NTQ5OTc5Pj87PDs7OD48Njo9OTw9OTw9Ojs9Pj4+NztBOj45PT45PT44Nzs6Ojs/Pz1CPj83OkFAPTw9ODY2PDo8QD9BQUE+kqugp66noqulpKKipaGlqquwsq2upKmmlJWWmpaUm6SmnaGqp6KrrLy8v8PBsrK4p6Ghq6qhnJ6hoZ2bmn1zamFXTkU+SVl8cGJCPVyOrqyhmZucnp6Zl5eYk42Pl5eUj42QjIKDgnZycGxvjaSrrq6OhWaDqH98dl9iYGRpaGNbUnbAysTEy9DS1c7Tyb3Av8O7xsXIxdHTzdPQ09PMysHGxsbKyM+/ydHNx8bJxsK9xMG/v7+1vrOtv8DDxMjFyMSvv7myuL3EwsG7vLy1rqenrqigoqmlmpagmpmdqKupo6SknpePm4uQmYmVmJugn6OdnZeempOTi5WPhYF5dXNlYmdyb2dfWlpET01DRlFJRENBNTU1ODlCPTY4OkE+Ozs+PDk+PTc6PTk6PDg8PDw7Pz8+PD0+Qzw7OkA9Ojs6Ojg4ODk7QT48QD8+OTtBQTs7Pjc4Njo7PkI+Q0FAPpOvn6ivpqiro6KloKampKuoq62qrqKqo5Kcl5ebmJuirJ2frqalsarFxszOzb+wwaikqKytqqCdo56bnZZrZl1USURAP0uFnqWahKCyraOenJ+amJeUk5SXkZCQjYiEhImHg4CBgYB5cXFuanaitrKXdH18enp+eXuShGVcUGxpWjxuzs/QxM3U1djR183Gx8nMw8XKz8rS19LX0tXW09TIzMfMzcrTzc7TzcbJysvCx8zHycnGv8Ozs8jFy8vMz8fKv76/vcHHxczMycnAw8CusLOonqKqo5qTnpyYnqaprKSlppaXipWFkZSHkpKSmZualpiQm5aQjIaRi4B7cnV2Z2Nnd2plV1hSRE5HQElRQz5CPToyMkE8RTw3ODxCPTs9Pzs7Pj05Oj48Oz44Ojk5Oj86Pj1APkA8Pjs+Ozk9PTw5Njk6Pj08PEA/Pjk6QEE6OT44Ojo6Oz4+PEE/QT6QrKKiqaanqKSfop2qqKOso6OnpqyiqZ+To5iWn56dpK6bn7CrqKyxyc3U18/Gu8esrbO3rK6jnqOinaGdY1NMSkRDP0JSrdG9sq+mnJycoKShnZqUlJWUin15cWxlYmhycHJ7hYqAdXBtcHJthKSZhmV8eHd/j5eckGloZmSopXU/pNjP0cLP09bY1dXSy8nO0MvGzdLK0tXX2dbY09bYzdLKztHMz9HN09DAycjLxMzNzM/PxsfItsDLwNLNzNDHysnAxMPIz83Q0c/NysjNuLe7qJ+lq6eemJ6jnp2qpa2pqKiSlYiQhIyRho2MiJOVmZCWjJiSj4aHjIR9eHN2cGNhZXNjXVJcSktHQUZJSj87QTg+NTU4Njs4Njo8QD07Pjw7OUA7OTo8Ozs8Nz09Ozo+Oz08Pjw/Ojo8Ozs5Oz89OTU7PD48PD0/Pz46O0BCOzk/OTg7PT0+PzxBQEQ8hqugnKegp6Oim6CbqaSlqaCfoaGmn6ifmKSimqmmoqarmqOwsamotdDU19rSx8bLtLXBxbG1qKGlpaCio1tJQEFEQUZQdbGvppqUl5+cmqCgnpudmpWJd2lkYV9gYF9eX19dYWx1c3BvbmtwbnKEkIZeX15ZV3GDfXxcU3FVireJY8/V0tDM0M3T19bT1dDP0tPRydPRyNDX19jS2NLX2dTWzM/Pyc3SzM/RwMfEycfPztLR0sjMzcDLzcbUz83PyMXLx8fJzMvU1NHVz9LM08K5xbGlqLWuqJuoq6Wdsqiws6ysk4+TjoiKjoOPi4SQjpmNk4+Zj4+ChYx8enFzdG1hY2ltX1ZRYEpKQ0ZDU04/PD40Mzo9NTI4NTU8PEA8Ozw6OTpAOjg7Oj46PTg+Ojo8QD08OTs9Pzk6Pz07PTw9PTo2PD0/QD08PT0+OjxAQjw6PDc0Oj48P0A9RkFEPYKknKClnqWlo5mcnaSeo6OfnZ+doJqnnpyhqZ+vraqqq52lrreoq7fX1NXZ2dHO0L+8zMm2vq6nqqiho6xnQzg9PkRYgqqon5eVl5manJ+dmJudk31xZWNiX19hX15hYF5hYF9gZW1wcG1qbW9zdIZ+T09SSlFve2x+bFNyWpKsgpHQ1dTQyc/M0tbS0dbNz9XV0cXR08rQ1NXWztPR2NfX18zIzsTKz83KzcDKwcnKzs/QzNDOzszP0MjM0dHLzsvDysjKzcvM0tPO1NLR0NDKvci5sK67ubWrtrCtqLits7+7sZqOoJSRjo2IjpCFkY2ZjJGRlY6RgIWJenZvcG9rYWRucGFYXFtJRkZFTVlFO0A9MzM8PDg3ODY1Oz5APTk8PDg8Pjk8QDtAOj04Pzk4Oj88PTg7PkI6Oj08OkE9PTw6Nj08P0A9PDs9Pjg7QEE9Ojw4ODs+PD4+OkVCRT6Bn5mlp6Cgo6eam5+cl56eoZqdmpyappufpKefuLa1taykrK6+tLDA2NLX2tzWzs3Kw9LPwcGxqaytqaSyfEhGQjtWjaGblZOWm56enpyTlpeUiGteXl5hZGJgYGFhYGBgXl9fXlxibXJubXFxcnJ2cVRPTk1cYXVmeoV2WWeDjHSezNLRzcbOzM3Uy87SzMrW1tDM0NPLzNDS08rO0dXS1dbKwMrCxs3DycrDzcTGycvLz8vOzdHO1MzHydDNycfLxsfCxsrMztHRx9DPzc3M0MXHwbi5vcPCvcO5srK+sLvDw7WqmKWhmJaRlZWSi5SNmpGUlI+PlYKJhnlxcmttaGBgcWhZWGhWTUdNSVFRQjtEPzs2ODo4Ojs1Nz09QTs6PD05PD05PT06Pjo8ODs9OTtAPD47Pj5BPDk9Pj1CPTs3NzU/PDw/PDw7PDw4O0FAPDo8OTs7Ozw9QTpFQUU+hJ6bqK2epKSqnJ6fmJKXm5+am56ZmaKVoamppcTCwb+7tbKxx8K4ytXW2drb2MzMz8jW1cTCta+0qKCtl3hsb292j5qNjJeVkJORkZWWlZCLe2ViYmJgXV5hY2JgX19gYWFgX11bXWdxcW9wcW1pbXJxXUpDTU5dW2BxYkhdb2dWkcbNzcbExs3K0cfKzc3F0NLPzczUysfKzs/Hxs7Sy9DPxbrEv8bKvcPHyc7Fw8jAx87IxM3LzdDJxcXQycbCxsnFv8HIzczMz8PKzMnHzNDExci7x8PJycLPwL28v7DByca5vaqwsqelnaKcmJCbkKOZl5mRlZiJj4J4b3Vka2BeZnFhW1dgR0lIR0lNVUc/Sj02NDM1NT09NDg9PT06Oz08OTo7OT89OTw7PDg6PDo6QD1APD09Pjw6Qz48Pz04ODk6QD4/Pjw7Ozs7ODo+Pzw7Ojc5PD49Oz49RkFDPYOgm6qupa6qq5qdoJeUjpedmpmgmpqcm6WysazJzcrIxL68uczMxtDV1dja29jQyc/P0dPIwre7u62ktn5ngoahqZONjZaPhYODg4F9hIR/c19bXl1eYF5gY2RjX11cXl9gYF9bWlxha3JwbW1oZ2lpd4NgRkRIR0I/TUxRVGdeTpe9x8TAwr/Cx8nIyMnHv8TLxcfKzMnEwcrJwcHLz8TLyL+5wbzGyL7Axs/LxMDDu8rHyLvJxsXKwb7Cy8bFxL7Gvr3BxMbMxsW8v8rDxcfSxcHJwMrKx8jG0MPDxsOuxMvHw8q3v7y6s6mspKWYn5iso6Gmm6Ogm5V8d3N1ZmpbYW5tWlxYUkRMR0NHRExERlM/NTQzMzVAPTM6PDw7OTw8PDg7PTtBPTo8Ojs3Oz05Oz07PTs6OD4+PEI+Oz88OTk7Pz07QD48Ozk5OTk6Oz06PDo2OTw+PDs+O0NCRD5/pZypsqm0rrCdnp6YnImUm5man6Kfmp2ovri8ys/RzMfCw8bNzs7M1c/V2djZz8vSzc3OyMG1w76ysLZtXnp7nZGKkpaGeoCEhX91eHVycF9aW1xgYGJjZGRlZGBbXF5dXl1fW1laXGFucW1pZmdraGx+cVtNSUc4Rj9DU0pUZFiUr7+4uLu5t8DBwcO9vbi8vrjDycTGwbzGv7e6w8i/wcm7tru7xcO/vMLOw8a+vrXBvsS7vce8w7q1vcbEwsO3wLa2v7+8zcS9trrIu7++zMTCxsPGycfJxtDGwszHssfJw87MwMXCv7yyt7Cyp6ioubClrbCqrayUend4a2VoYGhvZFZeWUpGSkZIS0FFQkZKQDk6NjU4ODUzOzo7PDk8PDs5Ozk6QD46Ojw6Nzo7Nzo7Oz88OjxAPUA/PT8/Oz07O0A8Pj4+Ojk5ODk3ODo8PDw7OTo8Pjs7PjpAQEU+fqygrLWrt7SyoZ6fl5qNlJaan52mop2et8XCxMjO0srKysfNzc7RyNDG1dTV183Kz8XJxcfBusW9rK6nYGN3gJKLiIuEeH+Ghn99g3t0dGNcXF1eX2BiY2JiZGViXVxbXF5cXl1aW1xdZ3Jva2RjaWlrdIFtWEtDTlc5Ok1GSFtUlaKzsLOysrKyurS7sLavs66xusG7wMS7v7q0sbq+wLjHuLS8tsHCvbi9xsHDu7Wvs7W7v7TFuLu1rLm9vsC9sbu2sLe6s8a9t6+8v7W3tcW9vsPFwMTGxsfMxb/FxrvHy7/PycfDxcHDt8O9vba5vse/rLW7tbe2jnl0eGdnZWJrbl5WXmBGS0hISkdCREFERj89OjU2NjYzMzs6Oz06Ozs6Oz44PEE9PDo7ODc5OTk7PDo+Ozk+Pz1APz5CQD1AOjo+Oz89PTk6Ojo4NTY7PT48PDo7OT49OT86PEBAPIi3pauzsby8sa2foJmUlJiXnqujr6qnpMbLzcjFyM3M0MvNyMnIysnKxNDN0s/NxcfBxcG/urjJt6uwmltnb4iOhYiJenh+hYZ2d4F8c2hdXV1dXmBfYGRhXmNlY19eXFteXF1eWltbXV9rb2xmY2ZoaGp3e19PUVlFOThGSURKYZ+XpKeuqqiqp7KstK+xp62mq7K7ubXCubm5r6q0ubuzwbqvwLG9vLu1u8e5w7etqqiwssC2uL2wsaiys7W7vKuutqeutq68srCquLCuu667uLvAwb66w7/Gw8XAvMbBx8q4xcfFv8fDwrnExsK7xsnMy7O5wr27s4l0dndraWBibGlZV1dbQUxMTUpFQUM/RkE6Ojo5OTY4NTQ6Ojk7PD07Ojs+ODtAPD05Ojc5Pjk7PDo4Ozs6Pj45QT0/QD87Pjo7PDo9PDw4OTg5NzY4PDw9Ozw6Ojs+PTs/Ozs+QDyKwKuouLe5w62zqZ2ZlJaZoZymsLWxt6bFzdLLw8XBxM/GzcHCxr/ExMPDysLJyr/AvMK6s7W1w6+qsZNbaX6SiI6Pe3h9iYV5e4SAd25eXVxcXV9gX19kY2JkY2JgX11aW1paXVpaWlpcY21tZmRkZGZnanpsT1pbREA7Njo9TYqakZSfpKqhpqGpqKupr6KlnqmstLWwvLivtq6nrbe0s7u3s7yvuLm1srvBssCvpamjq7Gzs6i9qquoq6yutbSmqK6hpbCps6enqK6mqLessbO3urq7sry+vr7Ev7XBwMfIt76/xbfFw7+7v8TCvsTIzMq/v8TAwKmHc3RzamlcYW9kV1ZYUEhaU1NLRkZFPj9AOjc4OTc3NjQzNzo5OTo8Ozs8PDc7PTs7Ozw4OT44PTs8Njo9Oz89N0E+P0A/Ojw8Oj05Ojs6Nzc3ODg3OTw7PDs5Ozo8OTc5Pjw+P0E7jMKvrry3ucSwtrCbmZWcmKqpsLGztb2vxdDPzMPHubnLwcu+u8m2vcO+usq4wcPCtba8trGvtbyuqKuTY22Ig4eLgHp9f354dH58c3dlX11cXF5fYF5fY2NhYmBhX11dXFpYWVtbWFdZXF9lamRiY2FkZGhtd11MSlZWUVE+QnqdkY6HmZyloKCeo6Olpayem5qjpKuxrra2pq+rpqmzq7O5sLW1rba5srC6urG2paCloKaxqKypuaqlp6eop7OtoKemn5ykpayfn6ekoaGxra2ssrWzs7C1vLa7wcCyur7DwbG5ucKzwL3Atbi7vb68wsfEw8S/v8SghHhxbGJmYGtvYFVZX0hOaE9USEZLRjw9QD06Ozs4MjY1MzY5OTk7OTo6PDo3PD88PDs8ODg8OTw6Ozc4Ojo8OTg+Oj89OTg8Ojs+OTc3NzY3ODg2NjY7Ojo7OTo7PDg1OTw6Pj5AO43Itba9uLrBur22oJ6VnaCmurars7O7s8TPycvCxbi3x8DMv7jKt7vFuLPFuLO/wKy2vLKspq+0raGjkmlyhoWGgHx4dXNvbWppaXBpX2BdXFxcXl9fYWNiYGBgYF5cW1xcWFlYWFhWWFpdXmNiYGNjY2JlZmtyV1BgZ29qWnyPloyLgpaanKKanJ2ho6GlnJmhmp2prqywtKKoqKmrq6S0uKy2r6yytK6zta+wqp+en6SisqSmqritoqamn6itqpmfn56ZnZ+lmpmjnJyesKmsqKqrrK2wsrivuLm7sLa8u7qrs7K5s720t7KxtbW/tb3AvcPCu7u9l4R7c2xfZV5kZFhUV15JV11LUEdKSkdBPD8/QTs/PDA1NjM1Ojs5Ozg5OTw8Nz4/Oz07Ozg4PDg5ODw3ODo7Ozo7Pzo9Ozc4PDo9PDc0Nzc2NzU3NDY2Ozc5Ojs6ODo5ODo7OTo8PzuJyba4vru4wcHBtKSkmZqkpsCyr7astLfFz8jIwMa7u8PDz765yLi4v7eywrSxu7usurqxop+pq6eYnpBtfoWGf3hybW9ta2JeYmZmXV1eXV1dXF1fYGFiY2NiYV9cW1taWllYV1dXV1dYV1pdYWJjY2JiY2Rkb2xldHxvSk+CkJSKjIWTmpujm5eZoqSgopqdn5mXrKusrbCgpKGsqqahtK+wsayor7KnurOmtaCin5yjoq2joqq2qqKjpp6mpqOWmJ2XmZqdoJqXnZydnK2hrKijpKatq7KzqrWwsquyubWvqq+ysrO3s66pra6xt7G6trq9v7ezsZSGenZmX2ZfW1lWU1pVS1tRTEpFSEtJQz0/QkJAQToyNDUyNDk5ODk7OTo9PDY9Pzs8Pjs3Ozs3Nzc+Njo+Ozo4Oj07PD06Ozw6PTs4Nzk3NDY1NTQ2Nzg1Ojo4Ojk5PDg3Ojg5PkA6gci9uL2/tr68v7KdpaOYpbHDtba9rbS4wszIxr/FtsHAx863wMO9s7m5ssC2sbm7rbK1r5+apKqglJuQeH+DhH94b3F0cWhlZGhkY1xcW1tdXVxbXmBhXl9fYF5cW1pcWllYVldXVlhXWFdVV2BiY2FhYmBgZGZxcXZ5YD5MYHKNiY6IjpiXm5mSnZ2moZydppuamKmkra6pmqGitqign62otammp62wpLewo7ego5yZmaqmoZqtua+joaScoqCfk5WhlJaWm5mYlpeclZ+pnqqkop2jqqqwrai0rKqmrbKwpauts7GwsK+vp6insq2xtLC8tLq3rqOUgnp3ZV9hV1lYU1JUS01eTFBMR0hNTEU9QD49Qjw7NzY1MzQ5ODg5OTo5Pjo4Pj47PTw8Nz49Njc2PTc7PTs5Nzk7Ozw+OTk6Ozo4Njc2NTQ1MzEwNDU2Nzk6ODo5Ojo3Ojs5OT1AOnbAvLS5wrG+t72tnaenoqq7wL3Aua60uMHMyMXCw73FuMjMssHCwa68u7W7vLW5ubCwsaqcmqGqlZGKi4CAfHdxaWxydHBoaGVkZmFcXFpZWlxcXF1eXVxbXF5cW1xZW1taWFZXV1ZXWFdXVlVaYmJgYGFfX2BiZ3BvdFIxLCk/eI6OiYyUmJaakZubpKKgpKSdm52knamtpJ6gobWmoKCip7Khpaelr6Wxrqu1nqCdlZWpoaKUrbGxn6Kjnp6Ym5OLoJORk5iYkpaYmJeep5unoqKapKWlq6SlsKeloqusraaprq+vq6iqqrOmpquvtLGuvLaxsK+fknt4c2ViXFtdWE5MUUhSYU1WUE9KTk9FQkQ/OT02OTo3NjQ1OTk7OTg4Nzs4OT0+Oz47PDY5Ojc7Njs3Ozs6ODU6Ozo7OzY8Ozg4NDc3NjMzMjEuLzI1NTY7Ojg7Nzg3Njw7Ojs7QTh4u7uxtb2wvLG3rJ6lpqy4u7zBxbqyubXEycnAwsbFx7bGxLPBv8Wrt7e9tr26u7WyrK2omZmgpIyKdImIfnZuY2FmaWhmZ2lmaWxgXVxbWlpaWlxdXFtcXl9cWllbWVlaW1dVWFdUVFZWUlRSVF9fXV5fXF1dYGFob25JKx8pRW+TjYeKjpuTm5KXm6GeqaKhoqGhoJqnqaKYnKKwqaCgnKSpnaeinqysqqmtraKhoZWYopqcj6uosJyfop+fl5mTip2RjZKTlpCYmJOcoaOcpaGilaCipKWbo6uloqSqpKqtpa2yqaalpqa1pqmorbO1tLm6r6usnoxzcXBhW1dWVlJHUU9IWlxPUkpUS1NMRUdKQzg7Oz08OTY2Nzo5Ozo5NzY5Nzc6Ozo9PDw2Ozw4PjU5ODo4ODY1OTo7PDk3Pzw5Njc4NDUyMTIxLi4xNDI2Ojg2OTg1OTg5ODk7OUA5e7W0rLS7srCrsa2dqKevubmzwMi6tcCvxcjMusHJzMi1yb2xvsPJrbG4wbW8wLy0taqsppaanJyJgXKIg3t0aWlqbGdqbG1ramxlXVxcW1tcWlhaXVtbXmBgXFhYWllYV1hXVFZWVVRVVVJSTlBYXFpbXFxcXVxfYmtqSjsvPUlch46FiYmTlJyWlpukpKakqaSnpKGWo6uik5ejraefm5ian56umZyqs5+lpp+jo6GUlJuWlpKpqa2anJ+hoJuUkIyZjYuRjZKNlpWQnaGgo52co5WboaOhmKKoo6Koq6Crr6SuuKWjpKKsraqoq6+0t7K9tbOrrpiFdXRpXFlZU1VSRlhMUVtYTVVPUExRUklPSUI9Pz9BPz03NTc5OTw8OTc3Ojc5Ojs8PT47Nzs7Oj02ODo7ODk3Njk4OTo2Oj05OTU3NzU3MTE0MS0rLzQzNDk4ODo6ODo6NzQ4PTg/OX6zraeztq6oqK+um6morLe2rLzKu7a/rMzGxbjAzs/Hs8S7t7vCyLGtuL+3vL67s7amqaCWmJmXiHp0gHZ3bm1obW1tcGdnaWZkXVpbW1tbXFtZWltcXF5fX1xYWFlYV1hXVlVUU1VWVVVTU05QUFhZWVlcW1pbXV5jcGxNQk90bGuEgIuHj5GamZWapqSiqqilraKllpypnZOToqelnJePjpmdrZaYp6qYn52UpaCekpGSkZOVqKqlmpiZnp6WjoyLk4WIjYOPi5GVkaCeoaSZlp+VmqGinpSbpaWoqKigsLCnsb2nn6OstKqup6+0sLm1wLGusKuRf3N0YldUVU5SSkdWUFJSTExYTktMT1NHTktBQ0ZEQz5CNzU4ODk7OTo3Ojo3PD06O0A+Ojk7OTo/NzU5Ojk4NzY5NTg3Nzk7ODU1NzY2NjEzMjAtKi4xMDI4Nzc7OTk7ODk0ODs4QDh/tKymsbeqpaKxq52qp6mysKS2xrS5urPKxbm6wcvQyrG2uLy9wMOxsLG3rrS0u7O0o6OdnZiXlYSAdmtnbG5xbnFqb2tkZWdlXlpZWllaWlpaWlpaXFxdXFpYWFhZWVdYV1VVVFJTVVNWVFFNTk1SV1hZWFhXWltbYGlqZmxkdXZhe3yLgYyLkJSSl6OWm6ajoqibpJWdopiQjJ2hmZaWhYSRmqOPlaOclZaVh6Kam5OMjoqQmqWnm5WVl5yRk4iUjouBi42AkIuSkpKhmqCilpSZmJWippqNmaWnqKehoLSyqLO4oZ2jtqyqraSysqa1u7SrrLGiinp0bl5OUVFNT0ROTk5QS0ZOTkpKTk5RSE1KQUhMSUhDPjk1ODg4OTo7Njk6Njg7OTk+PDg6Pjk7Pzg3ODk6ODg1ODU3Njg4OTc0NTc3ODIwMzAxKyktLzEyODc2Ojk5OTk4NDk4OEE3d7anpLawpKekqqWgqaaks6qissS1tbKzxsW3usPKzMazrLq9tLjAr62psJ6mrruvraCam56VlYh8hG5fX2ZycHVxaW5pZWdoal9YWFhYWFlZWVpaWVtbXFxZWFhXWVlYVVZSUlJQUVRRU1VRTk1LS1NXV1ZXV1dXWlxhZVpgW254ZXZyhXqFgYyJjJebipWXoJ6gl6OTnpmTi4WXmYtzjIJ9jZeVhZKZkJOOjXuZj5yMgomAipigo56Qk5iWhY6ClH5+c4qOepCHk5CQnZuampKWkJ6Oo6OOiZqgoaOkm6K0r6yvraCYprimpbChsa6csbyqqa+pmYR4dGRWTVJQUE1DU05MUE1CUFFISU5TTklKSkVLTUdLSz44NDk4ODg7OzY5Ozc6PDk6Ojs3OT85PkA3OTo8ODk3NjQ0NDU4NzQzMTI0ODUvMDEwMikoLC0wMjc2NDc4OTo6NjU6ODdBN3i3oaO0qKalqKOmpaamprKnprTBuK+0sMnEuLnAzsa+s627waytxK2ooaaSnaa3raOgkZaXkpB+eH9mV1ZfZ2ZpZ2huY2lpZ2JcWFdYWFhZWVlZWVlaW1tbWVlZVldXV1NUUE5QTk9PUFNUUU1NSkdOU1NTVFRTVVhaXGhYWlhpcWtmRlBpiXqOf4WWkYaOjJuVmpWVlJGMlIh+koheO1Zue4uTiYCMkYyPhoZyi4SWgXmBe4aUnZWDlo6Qj4OGfZN4cW+GjX6JgZCOkJeamZOLkIqdiJ+YiIiWnpqhoJenrqmtqaielq2zoqWtma2rmKi0o6mtopN/dG5gW05TUldMRFRKUExMRk5PSUVMUU1LUEpJTlBHSko9NzU5OTk5OTo3Ojs6Pj44Oj09Nzo/OD4/NTg5Ozc5Njc1MzMzNzYwLi0vMzQ0MTEwLy8oKSsrLTM4NTQ3Nzk8Ojc5Ozg2QTl5t6CiraGmpqqgp6mno6qwqKe0wrmwtbDHwrizvc+/ua+utcKnqsSqop2Yg5ScsaOamYeUkIuHfnN2XVBMUVVZWlddXmJnY19ZV1dXWFhYWVpZWFlYWVpaWllYWFZXV1VTUk5MS0hHYlxNTlFNS0hGSE5RUUxPUlRVV1lgYFVTZGxjRjk4eo6KiHaBjYd/hYiXipSViZGFg5KEd4d+X0lQbXeKkYN9hIyKhH9/bX5/k3d1dniEjZpwUY2IioZ8fnmUdmd3hoh+ioiVi46Rk5eMhIqIlYSbjYKEkpuWnp2UpKOoqaWknpuwqqGkpJGmqpaiqpyhpqeKd25mXlxIUVFTTUlVTVNJTEtPSUhGSk5NTVVLUVJQR0pEPTc2OTo4Ojs7ODo7OD4/OTk+PTg7PDY7OzQ3ODs2Nzc1MzQ0Njk2LzMvLjExNTIyMS8sJykrKiw0ODMzOTg5Ojk5Ojo6Oj85d7aboqedn6Guoaeopaenr6yqtby2uLezwbu2p7nIuLaoqLW2qrK8p56Vjn+JlKmWlYt/joSDfnhxb1hNS01OT0xNUVdbXFpYWlVVVlZWV1lZWFhZWFhZWVlaWFhWVldVU1BNSkVAQJtrc3NJTUtERENJTk9oWU5RU1NVWmZdVmFpWlpRS4h9jYBsd397d4CHj36QmYuOeYONfXN+d3FtdHB0jY2Aen6JqoR6e2h2e45wcm14gYuNknh7gHuAd3NyknhodYWEhIV8lYuIio2LgH+Ei42AlIR8gI+YlJyWkZ+dqZ6goZ2gqaWfnZiNp6SSoKCWnp6kgnNpYl1dSldQUkhLWFJPSk1MUkpKSkxQSUxRTVJVTkZJQj03ODs5OT49Ojs8OThAPzo6Pjw3PT03OTkzNzc4NTY3NTI1MTQ3Mi8yLiwuLzIwMC8tKygoKS4xMjcyMTk4Nzo4Nzc1Ojw7N3aumaOhmJyftKmvqqWtq7Cxqr20sru4trq0sZ+3urKqnZ2sqaiyr6KakY2UgY6cjpF/d4Z4fHZwb2pZS0hJSEdFSEhQVFRUV1dTVVVVVVZXWFdYWFhYWFhYWVlXV1VWVVNQS0Y+OTNOPH6eTUhKREA9QURqlH5MTlFRU1ZeYmFgY1ZogY6SiYt0YHJ6cHN6hIx5gZiSfm+EjXp1eW5qfa18dJCKfnqGkoB8f3RmdXyGbG9oc3yKjYeAbXpxfXFtdo9xaHGBfo5wRIuFgoOFf3d4eoyGfYx7dX2Oko+Yi5Kbm6OWmZ2bnZ6hnJaNi6Wbjp2XjpaYkHlvbmdjW1hYVVFKU1VUT1BOUFZLTktPT0pRT0lPUExGRD07Nzk7Ojo/PTk8Ojk5Pz87ODs9Nzw5OTk5MjY2ODU2NjMzNjExMjI0LiwsLS4uLTAtKyonJyouMTM2Mi84NzY5NjY1Mjc5OTV5ppegnpagprCsrqunqbCvsau7uKu6vrizrKebsKesm4+WnKWppKGYmo6EknmJj4uLdnF8bXVxam1qWEtGR0VBQENESExMTVFRT1FTVFRUVVZWV1dYV1hZWVlZWVlWVlRTUUtENzhmNzA/qGlOSEM9OzpEioV6WUpOT1FUWFxeYFxZeZmcvHttcFx0cWl2c4OMdnmJg21qiZB3cndoaX+BcZaRioB9lX9JkpluZ3d+gm1qZGx5hZCShmtzbHxucnyGaW1wf3ONiYWGe31+e3dwdXSGgnmBeXB8joyKk4OWlpiakJOWlpmWnZaMg4mfkouSjYaQloBvam9vb1lWWFRSUllPUlVUUlhVTU9ITUtNT0tDSU5HRkA6OTk7OTk6Pjw5PDs6Oj0+Ojg6PDk/ODY4NzI3NTY1NTQxNDMyLzAyNCorKiotListKigqKCcsLTEyNTAsNTU2NzQ4NUhBODk1d5mRm5ian6Ssr6Ktqqi1r66ss7+rvMK/pqKalaSYno2Ei5ShopiZkZOLc456gIaMhnVvdGxxbWVra1lOREZDQDw+PkJGRkdLS0tMT1JSUlRUVFRWVldXWFlaWVlaV1ZUU1BMRTFAmjMganNDmW87PDk1PICChl9KTU5PUlZaUVdVU5t7WJBganBed2poeXWGhXJ+hIFxapaPcnF6aWmcjkx5hJGIhI1mMXaHcmt9fYN0ZmV1foSEhYBmaWx1a3CAfGhxcXxuk42Pe3R9fXFxb3Ztg393eXVqeYiCiImDlpKSkIuNkZSUjpeNgHmIl4iHioaAkIh4bGtwaGVYUltYWVlbTlBVVllYTklIRUpKSEdCQEdFQ0c9OTk4Ozk6OTw6OTs6OjpAPDk6PDk4Pjc4NzcxNTIzNDUzMzY0NTAzMS4qKispLCwrKykoKycpLCwyMjYsLDQ3NzU0NzhpTzg7NW2SiJqQmZakqK2esZ6nuq+rsrDCsbvDx5qWjpWZi46FeoSQmJWNkIyQh3GHgnSHjIZ6cHNxb3BkcGdfVEZJQz88Ozk6P0BBRENFR0lLT1FRUVFSU1RVVlZYWlpZWFZVVFNQS0U4MC9cYLNHOVhQOzk0NDGWuotITE1PT1FVS0FIT0depqqYZ3JvZXZnbH18gH12gIKCdm+dknJ3fnFzkoY1cZynnI2goYSihXZwhnuGfHOMrY2JgWhmYmpucm1wg3Vpb1h1cI6bkXZtf3t9bnJucIB7c3ZuYnWDf4aAhZCQioqJkYuRi4uOg3V4io6AfoOAfY58dHJxbWBcXV5cWllhX1JOW1pYV0xISUZJSD9DQUJIP0NEPTs6Nz07Ojs7OTo5OTs6Pzw4OD06ODs2NjY1MDEyMTI1MzQ3NDUzMS4vLCwrKSopKSoqKikoKikrLzNETTIxNjY2NDM8dlI3PTdikYGTh5WRnaSnnq+VpbSprrCuwbK7wcWWj4yUj4CIfG6BkJKJg4qHj4V1g4NslYiIfHV4eG14bndkal5JUEc+Pzc0NDg7Ojs9PkBCRUhLTExMTlBRUlRVVldYWlhWVVRTUExFPDUqnUtbQC1nSTk0Lz+Sg6muX0dMTU1QTDdDTVBRQkZ8anVycm53Z3CBgnd5gH97iHtznpd4fIR+g5iDmpxghamenIuDkI56dod+iYiOc4qXj4R7XGRxdHp8d4ptaGpieW+FkIJ6b4F4dYV6cHR6eGtuaV12hn2HfIeGjn+KkpeDjYWMhn1xhH+EfXZ3e3yJeHF0dWdoYFtcXlNcZ15XUFRYW1VHSkpFTEc/RkBEQz9BQT07OTc8Ozs9PDo6OTk7Oz0+Nzk+OTk4NTY1NDI0NDAwNDY0NTU1NC0sKSsoJycnJigoKSkoKCsrKy8wMFVxPTIzMzMxRX5XND05XIx4in+TjJGcnZ6mkaCroLGor8Cyu8W6lo6Rk4d6hnZrf4uRg32Kg46MeIOAc6CEin19gX9wgX56aHdrUlhMQEUyMTEyNzY2ODg6PD5BRUZGR0lLTU9RUlNUVVdWVlZUU1BNRkA6Mj0gI5ZjjFs1MzExaT9Hb0lGSUtNTlFLSlNaVk9HYHh/coBydGt2iYZ1eISDepKDdZ2WhoSMkJOkjKypSIasr66KgYCUioGKgYWSqYeBmJiKnHRtfIGGh36OaGdoeX9uhYeChXGEhkdtgHdyeXZobWtfdn2CiH+HhIt5lJybiYqIkX96dYp2fHhtb3d+gXV1c21cXl5cY2RYZ2ZcVVBQV1lQRExLRk9JQ0ZDQ0E/Q0E9OTc4Ojo6Ozs6ODg4Ojo/PjY7Pjc1ODU3NzMzNDQyMzY2NTY3Nzg7REZMTU1MQzcrIiUnKykrKywvMDArbnUyMjQyMEyBXDU9PF6EdHx9iYWHkI6Vl5KWoJ2soKa4r7O8s5eNkouYi310cH6Jkn59jIOSlH2Gfoakh4h/goiFeIeJfnOEeF9jV0tCNjAuLzIzMTI0NjY4Oj0+P0JFR0hKTE5RU1RVVFRWVVNRT0dDPzgwLCOHWz8/ODQuXZZwc6NVRklLTE1PV19Wa1dZWmKBiXyLeXx6f4uMeoGEjH2WkX+dnpWSmZmkrJKZu7GmusfDp4uMoaWOk4mBkXxxg56fkZ1/d4WFio+HkGlocISBdIyGhIpyhoJ3h4B7doR8bXZ1Zn+UjoaIiIaHh6CqopaIjpd/eoGIenlvZ2t4fnyAdWxmXlpbXmpeYWdgWk9MTldSUUhQSkROR0NKRENBRENCPDo4Nz08Ojw6ODg3Nzg6PT04PD02ODY1NjYyMzQ0NDU3Njg2NzxCQj88ODo+Q1FeZVxHMicmLCwtLS4xKD+LWy4zMTBPg180PztudW9md4J6f4x/gZCOipqapJyhrKaqrrCXkZGEoZSEeHd/jJR8f5KGkpV/ioCSm46EgIGMioKJjYN/in9scGpdQkE0Li0vLy4uMDIyMzQ3Nzg7PT9CREhJTlFSVFJTU1RSUE9IRUI8ODcvOUM+PDw2My5sk5dNUEhKTEtKTlZfX3pkY2htkI+DkIqLhIeIlIOOi5mHnJyPoKeioamSp7Shp8HCrceveLmUmnyNoZ6YhJOFgo6hn5SZkYWKhY+akZZscHWKjIKVjI2Od4+EcW2FgYqWkYKFiHKIoJWGkYmNj5aktKibjJSigoeSg31/a2pqfIKDg3VjXmVgW2hsXW1sX1dLSE5SUE5MTEZJUENETkZCQ0VGQz46OTY9PDo7Ojk4Nzc2Nzs6Nj06Nzg1NDU2MzQ0NTY2NjY4NTU2MzEwLiosLCkoKS46UGFcQCwoLSsrMCwncog3MjQwT4RiM0A8dW5nWW+Cb3WGcHaRhn6XlpqUnp6cp6CplpOYnmdlpJp+hJKReYCSiJGSfYqEmJKQg4CAi4yJhpCHhImGeHh/Z01SPi8vLiwvLi0vMDAwMjEyNTY3Oz9DRU5PUlRQUFFTUU5QSUVEPjs8OkRGPz48NzUyPD9SNUhISExLTU5RXmqEeG97dpOSj56cmpObkJ2RmJqkmqSnnKapp6izlqq9qrXHyLbI0M++m6Bwaaqpn4STkoWcoJqbmaaRkYiVo5ubeHp+lJiToZOXl4GUnnt3lZKqsoiMlp58k52bjZGVmKOhpbWvnJGYp4aWj42AiGxzc32BfnNqYl5iYGJoZWBnZ1xSRUpLT05JSUxGR01DSE1GRkNCR0VCOzg1PDw4OTk5NzU2NTg+NzU9ODQ3NDU3NTQ1MzY5NTg6NjE2ODYzLzAuLSosLy4tJyMqO1hiQigqLDEtKEuXXjA2M1GFZjJBQGlhXlBwdGBtfGF3jn17k46Oip+Sl52Wm6qYnqpCRH2HiYeYjXiCjYuOjXyKho+QjoGCgImLioWShYOGiYGAh3ZeYlA1NjAtMS8sLjAvLi8uLjAwMTU+QUFNUFJTUVJTVFJOU0xFRUA8Pj1GR0BBQDg2NjI8OTtGSEdJSU1OUFlqgYpzjYOXnJ+rtbGeqKaoo6SwqK2zrq6quK+xvJuxw6q5ycu3w7+3paKws6ysqqOLlpiEpaago5eBppmNoqqopYiFlKShoaqgpKmPm7CLlaOmt7qboKKvkqKcoZ2PoqGrrquytKGUpKmHmYiSiZV5en6GgWliaV1mY19kZF9nZ19bT0NJSFNORkhLRkpHRkZIQUtGREZGQjs4Nz08ODg6OTc0NjU4PDU0PDc2OjQ0NjQ0NzM5PDM4PDIwMjU1MS8xLi0qKi8sLSooKiYlNVhYLywwLCwwhIE4NzFQhWg1QUNbWFRMaGJXaG9YeYR2gZOFh4Kcg5GQjJLayJ2Wc1aXiI+InI98hoyOiop6h4KHkY6DhIGLhYaIkoaChYmHiIeHcW5hQEU2NDwyLzExMC0sKy0wLi00P0NBTVVQUlNVVVZVTVtQR0hEPD4+RkhDREE3Ozw1Qzs9RktJRkhRTlBXfo6agKacqKCouMG9pa/Bs6mwvbC1urO8sr+0ubmit8SntcjHtb24tKijs62wsZuZkpqfiKevq6WUdp+kl6GssrSZlqquqK+2urK6rK+1orGrsbW7trSttJ+mp6KmmaivrLG4t7enmrWoi6SNkJKehniChXhbY2ZXZ2NiZGFhZ2FbVEpERExUUEhJSURJR0VBQEBLREJNRz04Njc7PDk3Ojk4NjU1NTcxMTw4ODk1NDY2NDk3Pj0zODkxLjAxMjExMzAsKiwuLCsrKyooJyopRVowMCovK2iSTzYwUodqNkFGV1FKTFtZUWFiV3l0cYGUfYSGk3WFf4CMe7+7o7yCtJSTjZuPhIiPkomJeYaAjJOMh4SBjn+BiY+Gf4aIhoqHkXt4bl1XQEROPDY6NDVBQjc2NDAvNkNIQ1FbT1FVV1VcV09fVUlLS0E/PkdLRkVEOz5AN0Q3P0JKSkVGVlNPXoueqJ+srbmssLnGxLK4wbuxsb60tb+yvK61c6+ypLnEo6/GuLCzsbOnpLW2qrCgopebopKlsK6mraunpJihrbS7oqiyurW8v8y/xcW9vbPBt7q3vra6t7irq7Ckr6isva+8usHBq5i5p5StjpeXqYh9g35tWGVjWWxma2ZXXGRZVlNJR0ZMUEdDSElBSEQ+P0JCTEA/TUQ5OTY2OTo/Njo5OTY2MjQ2LzE5NTk5MzY0NjI3Oz0/NjoxLi81ODo5NjUwKigsLS0tLCwqKCgrKyhFUy8qMDBKj2s1MlCHbTY/RlJMQUxRVlNZVVp2anB+joSAjoVuenN4h2K5oZmjiZSUlpKUk42Pl5KHh3uGgY2VioCEgYp6fIqHhnyKgoKLhJZ9eHp1ZVBcZEdFTDtRY2FbXlNHPztIUERaY1FRWVhaZ1lTYF9MU1BFQT9JSkhFRUFAQzxFNkI+SEdKTFNaVF2QqrKwtrLCt7S3xcq4ub+6trO5ubW8sriwxF9zsKSxmp6qvKikqKuqo6KytaGqqJ+Vlp6YoK6lp6aln6SUo6extKiys722wr7TycnTxsLFzMLKw8C9vL67u7a0r7i2tsK5xb3Cx6+euKmhq42kp7WIgYF0YWRkX1ljYGpnU1hhVlJVSUVFTUpBPkdEPUtBPUJAPUY+O0hANzk2Mzc5PjQ4OTo1NzA0NS8yNjM4OTM3NDQyNj84QD5HS1JUU1FQT1FRUEpBOS8sLCwqKygoLC0rL1A+KC40OIB9PDJLiHE5PkNLRUBJTVBSS1FdZ2xrcI+NhZBza3Jyc4fVwLWZoI2VmJmRjpeRlpaOhod9hoOMlop+g4CCeHuLg4d7i3mBioKXfnR9emtlcHVZXlxQZWRiYGVkXVxYV1xNZG1VUm1tX25fWGdkVFlVSkRCS0tJRkhISEdCSTpEP0hLU1RVXFpbkLS7tLqxwbq2tcfIt7S4tLe4sbWzsq20tZdjdKecrW9eoqybl6Cim6SeqqWUn5+Qk46VmJionqagnpqZg6SeraWqsK24sL251NHP19DKzNLMz87Kxr++wcm8wLzAwMTExMm+x82yo7qwtK6aq7e7mIB8bl9iXlpgY1pkZFFcYFNRSkNBRUZFPEBGPkFIQj9DPTpFPj1KPzQ3NTM1Oz00Njg5NzcwMjIvMjQxNjk3NzU1NTVEM0VMTT41MS8wMDY6NDc3QElPSTstJioqKC0uLyxATSsvNTRtiUkwSIl0Pz5CREBDREZLT0RRW1loX2+WkpCUbmtvdHWHtKyhoZ+LmZyZjI2VkZqShoqKfoiGi5CLiHyBg3N7ioOFe4l0goqGlX9ze3lsbXV7aHJlaWxpZmpqaGBmaWlsWm1zlq2kvIiGZ1xvZ11aWlRIS05QSktQS1NRSUxBSkZKT19eYWZpYJa0w661rri5sq/CxLOut6+vuqqxsKWqtquLtaecmqaaTZmdjI6flpGmmKWVipOTiZCJj5GRnZuhl5uVloefmqebrK+psKi0tNTU1NbTzNDT1c3Sz8zEwcnQvcnJysnRxszNws/Rt6/DvMO5pLW5waKEcWVeX19aYllaZlpRXVhOUEFCSEVCSDtBQz5BRz8/QTc7Qz5ASD00NjY1NTs6Njg3NjU0LzEwMTQ2Mjc4ODc1MzY3QzVCOD8tMC0xMzQ5PTk3LC4sMTtGSz0pLCguMDAwN0s/LTQ2VIhXMESHd0M7Qj5FQkFDSk0/VVlSZVZzkJCYgmdxb3h5g6GqnqaXjJqbl4uNlZGajn2Ji4WNiomKkId8hIJwf4eBhnuHcoOSi459cXh1bHB4fnF6bXhzbWmAcG1jam1weGh3fH7LvsHfp21jeG5jW2FgSlBSVU5ZXk9dXE5QTlRQVFRcbm12gnGVrLWqsaSts6irur6vqbOlo7elqq2gq7OijbCtmZeYjI6RkYSOm4GNppGciYOLhIuJhIuElJaYl5ObkZyXmZqfn6uspaiirK3P0tXSzszT1NTP1NHOx8PU0cbN0tPT18zR0cTR1sXAzsfHwqi9ts6efHFoYGRfWGJTX1tQUVRRT0g+QEZBQkU8QEE+REM+Pz86PT08PEpBNDU0NjU8ODg4NjY0NDEyLzAzNTI2NzY4NTMzOz08RT1AMTErLzI0OT41OTAxMDIyLTJETjMpLzMuMzI9TjIzOEN9XzJBhnREOj09ST5AQ0ZIPFVRTU5adYaFindsd3B9fn+hnp6hjIyYk5OLjJKPlYV5hZCQjYuJiJCGfoJ7cX6AgId6hHWFk5CIf292c2xzfXt3e3OCeHJrgHNyaXBxenlyer7Lmn2LsYR2coR2aGFqXUNaWVtWZWNYY2pTWFxdYGNdY3d6fYuBl6ijo5+en6akqa63qaWyoaGtoKKtoaaxnoimmpOSkYmOjYiBk4lqlKKMmYSBhn6Rg4OTl62LlY2UmY6Gk5Gel6iwoqGhpaSpyc3PyMPM0dTS1NLO083G1tLM1NjW1tjU19XJ1NrNyNfX0cqrwsLLjXVxZWJhWlZaVF1RS0dKSkpAOzo7REFEPEJDPkdCPkJCOjw5PDpHQjQ2NTQ0PDU2ODc1NDMyNTAvMjU0Njc0NTU0NDw+PUU/QTYyLy0xNjs9MDgxLzI1NC8tLTtSMDE3LzUzMkZEMjg+bmI1PYF0TTk5QEk8QUQ/QTtPTEZKWHCAdX1ocnhygomAnZWdlIWLlYmOiYiNho5/eIOTmIqMiIiLiH6CeHN7fYKHd396hpGVgINud3Btdn92eH10hXx6bYd2dW99doR1eHudtYw7QYrFpX6MfGllV0lDZmNlY2dqY213W15maGtuaG2AgoeRipydn5yQlpedoqOksKKjsZ6hpJyfqJ+isZuFnZGRkY+KioqGg4+Dfpybi42ChIV5lH+CqZWjjZKKl5KMfpiLm5Krs5ibnKicp77Dxrm3x87S0dLQzNLLyNTO0NXa19fY1NnYzdjbzsnZ2tHVvsrLtXp5cGdfW1RXUlxYRkdLSUVFPTo3OkBAQjpHRD9EQ0FDQjs/Ozs3REM3NTY1NTswNjg5NDQzMzQxMDE0NTU4NzQ0NDQ5QD5EQkM8MzMuNkZUV09RSkFKRj8xKiguQlMzOTI1NC83Szc1PGBiQTxzdlY4N0FIOj9DPjw5UUVDSlRrbm5wYnBxdIaNfJeRnYt+h5KDiYaEiYGHfHiFlpaIjoKHhYd6hHlxenuDhXV5hY6NnHmLb3xwcHqAcXuAcYOHgW6OenV3fHyCdX58hoevc1ipwraNkYJwbWI9XmhycHFwbnh2gWVob3J1eHF5i4aNk5GalZ+UhouSmp+anaieoKuboZmYnaSdnquZipmLj5GNhHuHh4OEi42fmZOIg4d+bJl6hJiGiJOMjZSMhnyciZSQrqqUlpifmaevtr2prr7HzMnJzMvQycPSytTX2dfY19Xb19PZ29XQ2trR1sjUypZ8fmtrXVxRVVRhSkNGSkg+QT49Nzo9Pzs9Rzw/QUFBREE+Pzo4N0RCNzU1NDc5LjU1NjQzNTUzMjMyMzY0NzU1MzQ1OEVCRENFQjU2PEZOU01bbmZjbnNrYVY+LDRMRzg2NTQzNEJGND1XX2hMdXheODs/Rjw8Qjw5OUQ+Q0dSal5tZGJma3aAiHGRkJqAeoCNfoKBgYR+g3t8hJiNh4t9hYeAd4J5b3t7hoF0eZKejqB2jnWCdHWBfnSAhG+BkIJvkoR1fIGFenaGe4m3xaTBybmBlpqPd3BlTmZjgXqBd4aikIp4eXZ7g397hHZtk5aTlI6XkIKJjpaZlpWkm5eelZ2SkZainZmqlZCQiYyRgouDiIiBhY+RnZuZiYWLgYWYeoiJn5eQiI2Ki4J9oYmRjLyhmJOYmZ2ppqaun6i2v8DBucjKzs7FzcnR1tXV2dXX29TX2drb19va2djO28aIfXxqbGhiVllXWE5MRU5DOz09PDg6Oz05PUA2PT8/PD49PTk4NjdDQTY0NTU9ODA2NjU1NDc3NDU2MTM4NTQ1NjQ1NTdISD1ESkU3OTI1O0g+Ozk6N0lQXVtSVVhLOVQ+Ozk1MzI3STg9TllNSHh4ZDU9PkM9PUA6Njo+PkBFUV9YZWFdW2h0enlsio2Sd3Z6int+f36AfIR6fYGRiYSFeoSHe3V9dG18fYZ+c36SnpGeg5F7hn54j355iopugpqAdJmGfYGJhXx+kHqPqY6Pw6G9jJyjnH2JhH2JcouKfnOmmpyYk4V7jpCIhGhHcaCknYyLkJGEiIqQkpONnJmSk4+VjIuUnpyTn5SQjY2Pin6OjY2Kg4iSlpqenoiLlJGdkYGLf6WYiISNgoWEgaWGioy3mJ2RlZaip6Genp2kr7e6tazAxsrQyMfMz9PT0tjT1dfA19jZ29ja2tnZ19u4e3x7bmxoWmJdVFFPSURMQjw8Pjk5Ojo5OTs8Nj89Pjw9OTk7OzM3RD83Mzc4PjcwNjg4MzU3PDM3ODA0OTc2NzU1NTQ2RlA1RE5JODkzOEFLPTszQ0BJPDpEV048TVRITj85NjMzMz5DO1tYPjVZeXBaPDxBPD0+ODY4OT89Q1FTUlheVVhmbW1taYGOinFyeYp7en98f3uHenx7i4aCfXSDhXlyeXNtgH6EfneFm6GbnZSSf4yIgJiIgJySboiohXqhi3yRjYOIhJx9mpCJjKOjoJCkr5+KkIuFi4GShldyrYufq5uPg5ibj4+OXIKikYKMn5OUi4aHi5KSi5OTk46LjomHlZqcjpSWkIqRk4V/ioeRjIqJnJaYoqKGkp2VoIqJiI2bkIOHjn+Dh4akhYyRspidkpSXoaKfmZKcnaizua2mvcLHzcjGz83QzM/X0dHVrtbV2NrY2trX1dnZoHKAd2ppX2BaVVhZQ0BJQz8+Pjo0ODo7Nzo7OjM7Oz89Pjc7OjoxOkc9OjI3PUA1MDY3NzI1NT82NTs1NTg1ODo1NzczNUhSN0dPSzk5ND1FSkI+MUZDTEE5ODpHWEA1SFdJNjYyMjM6RUNlWD8mX3lpX3o+Pjk8Ozk4OjtAO0JRS0tTWVBUY2J6bWF+koNvbXeLeHl+eoF9hnt7d4aEf3NwhYJ6dXZ2dISChH5/kqajn6WiloqdkJWXi4qnl3KKso2EqJKEmZOFmYyilZ+XkombnqOTqrCfkJSQjY6IloxujbeFmsTIspuhpZucmJaQsZFkpM3IlY6Gh4iPkoyMkZOIhImIhZWZmo6Pk5KGk5aDfo+LmYeNkKqXlqKiiJielpqIjoaXl4mEjoyBf4ePpIiOk6ial5OXmaGZn5mTnZujs7Wmo7zCvsfFxcnIycLL1M3N1KnS0dbV1tja1NLazoV1g2tnYWBgUUtWXEJCR0M7QT04Mzc7PDo5PTY0OTo8OjgyPzk5MjpJOj42N0JDMzI6OTYyNjQ+PTQ7PjY5NDk7NTc5NDRKUTxKUUs5QTdCR0lANjRKRUxGPjw4OEVUQTc+XDg2MjE0OjtFYFhBRmF0aExjWj41Ozo6NTs6PTpFTUZIUldTUkJlg0d1go58fG1+iHh6fnqBgYN+dnaAgntsbop+eXx3eHyEhot+i6O0qKSrs6GWp6CmpJaVr6KDkLiVkbOajKGgjKSbr6OlnZiQp5epma6wpJeUlZSQi5ialqDAjqPJuKuao6WtmZGbnLKdhoWoopyXhYiIjZSLipKPhoCFhoiSl5OLipOShpOXhYOQj5tzkJiylZajoYicmZOPipCKlpqIipaNhn2MmJ+KkJCcmpmTmZiglKCdlJ6bobGuo6S4v7TEx8S9w8O/x87LydKnz8zT0tDW2NLP2Lx1fXpgY1djWFJJS09GQkNENT47NzY6Pzs8Nz00MjY2OTc3ND01OzU8Szw+OzxCQTc1PDs1Mjc3P0A2P0A3ODQ5ODc7PDU1T01EUFJMOEA9RUFHQTU6SkVORUQ6NkFAQlM+OURPMzIzNTc1PXZcPFJcdGlaTV1TPD04OTU2Nz06SkZER01cXVlKaGE7SISLenpthYZ5fIR4gIWBfXB4fH18b3KMeX2Be3iGi4mGhJKovK2ps72wpa6ztKmjorCtipq1nqO5pZWspJeprbimpaOfmamYqqSwsaqZmJyUlZGXoJeau7utyqFptriqsJWYnqKrkpe9o16psoKJiYyUhpB8jo18g4WNj5OTiIaSlYuOlIyKjJaYkZuZtJaUqp2Lm5SRjZCSi5iaiZGdj4uKlp+ijZWNmJmdkpyYnpShoJScnaaup6Kks7irwsjEtbq9vMbIyMLQocbJzc3E19bQytOjc31sYF1WYlRRR0Q+PENBQTc/ODc0PkY8PDY8MzUzNTU0NTRCMzk6Qk06QTtBSEI7OkA8NzQ2PEI5P0BCODc0Ojo2Pjw0N1RLQ1VRSjc8OklBREA0QUpITkJBPzZEQTxKTkQvVD0yNTQ6RUpcWEpaUW1ncHBEaWBLSTY3NTc6PkpAQ0lQZ0hhYGJwSkCLiX6AcoeHfIGJdYKKg39tfXx8fnB3h3eNgYd7jY+Mhoyaq8PAsL3GvLO0wb20rayztoyosq2uvaubu6Oorbm4q6emoqGjo6qvsrGqnZyjmJuYl56ipqWSo7mvqL+8rK2yuaWjp32Ihp2tvLCCi4uKkIOPg5GOeYGGkIyNm4eHjZaMipSWk5CZlpunmrGZkKqcjpqPkY6VkI+Vlo6QoJCIlJujrJWWj5ScnpSgnpuYn6CUmp+op6Sio7CzpsDGw7Cwu7bFxMO+zKfHw8fDvNbQzMTKind2ZV9dYl5PTENMQEVHP0E+Qjw6ND5BPT01PTY+MzMzMjQyQTE3QEJNPkdAQ05DQT1DPDs4NkNDNUJJQjo4Nzg7NUI+NzlWS0RXT0Y4PTRLQEM+NEVLSE4+QUE2QkI/QlNFNThQMTQ1Ozw4O0Q+OUxqal07V1JkS2daVU83OUdFP0NGXGlGX2lnW11ck4yMiHuHi4aDjHWGkIqBb357gX5xfoF6lHqSlJWYkJOVqLTGycDCzMLDuci9urCrubuXsra5ssCupcCkq7C8vaquq6Ojnqesr7WxqZugqpyinJafsLSnjKO6urXBu6uonLKkpKiUhI6qxMOkgouOhoeEhpWUjHmDjJCOkaCLi5OQjoeXn5eSmJSWpaCunIypnI2Wj5GRlJWNkJSRjqGThpefn7OflJuUn6GZpJ+aoJuglJifpqSlp6SvraW/w8KuqLe1ycO+ts6yxL7Du7PRycjBtXh8cF9bX21UTklETExMSkBBPUJEPDVBRDs6Mz04QjMzMjI2MkExNUlFTT5JQEhSQEg+Q0A7Pj1GQTVBVUA7OTk4PDdFPjg+VkpDV09HOD80TEBCOzVKS0NMP0I/PEJGPUFITDkrRzwzNjc0NjRBPzdPYU9hRS89PjZrbGpgQDpIPj9FQmhdTWVcZlRjapqNloqLiJKPhol5hpOQgXKAe4x/d4eCgY95jaGWqJqbmLq+ycjKwtLJy8LNvcGzrby/p7rAvbzEuKzBqa2zvL6qsaqkpaOsrrSut7Wgn66fpqKYo7S8qZyovMGjtravq5OwrKqsl4aaqqelkIKMkqSViYB1iZF5hIyRkJ2fkY6Sio6Lk6KXlpqUk6GeqZ6QpJmLj4+PlZaIfI6VkpGimpSgopy2ppCfl6Sko6WfnqaYnpWXm6WjqKiisqyou8DEr6Wzt8zAuq7Ds7u9wbmswsLBv5pxfGRbWl5dTE1OS0dFQ0hBQUFESzo0REg6OzQ8N0YuMTIzNTJBMjZTSE48SkJKUUVLQ0VFOkVMQjw3RVY9PD04OT88ST86RVVJQVdRRjdBOks6Qjc5Sk1CSUBDPjxERzxCQ089MjBIMzY2MTcwPUI6PWpqSks1UVMzU3BwZE47RD1ARj5sSl9YYVpkZViej52Olo6ekomKf4mfkoR4hX+Ufn+QiImQgJagmq6npJjDvsjEyMbSzc7Ny7zCuLC6vbS9y7vEwra2vK20v7q8rq+ooaiotq6uqbK3mp6soqiinau3t6qlr77Esb25s6eqtLOtrZeVpa2poJGOkrHFp5SOfJGVfIaQmI+pmJeSko6SlJKknJKcmJOgoaGbmJ6XioyPj56IWo+Wl5KWpJlmmaOes6WWo5arraunnJ+ml5mWmJWhpKimnrWrqbq8wrSmtLXLwbiqtayzu7iuqLi6vLeEcHFdW1dYUEdLVE5LP0FHRERIRkY4NUZNOz43PkFLLjMyMDI1QjU1UFdOPExGS1JMT0dHST5JUT86OElTOzs/Nzk+RExCQEhTS0BXUEY6QT9HNkE3O0hNQ0U7Qz00RkU6QkFCRzkvOkEzNjAzPkdEOTQ9dGRNRztFKzpmfGhWPD5AQkZCc0ZpSVJmZE1GppSclaGXqJaMkIOGpZKIgYeCmoODlZCQk46aoZ+vvq6hx77FxcjHzs7O0sq+u7axu7u8v8+2xL63ubezsrWzuLSsp5yrrLmrqaiwsJijrqWopKW0wLCrrLS+wrnAubOnuLS3sq+VpK2wsKWLk5SgjXPBmX2WmYSOlpmLsJWZmZSRkZmYpKKUnpqVmaicmqGfmIqMj5WdX0qWnJqUmaSXVJawn6+dn6WVr7CtpZuhpZSTmZiOnZ+moZm0qaqzvLu7q7Cyx8C4pqurrbGxo6GysrSlc3JoX11RU01GUVFQUTtISkhGR0FDPTlLVD9BOj1FTS83NTM0OkI0NE5XTjxKS09VTlFKUEhISk9CPD5NUjs+PTg6PENSPkRIUklCV05JQENBRjM+NThKS0NBPUM7NUZBOkE/PkhANSpCNTIsPmNdZzozNXRkZUBSNyYjM31oWDw6QkNAPVJFV1N0YlZGSKuXmZ+hqK6YkZeHiqeWjYiShJ+HhJ2Xjp2gmqOltcm1qce8w8TJy8nIzc3Hv7uzr7q4wMLNtci7wbm2urKvr7S1p6Scq7S1q6qmrqyapK2mpamsur+oq7e3vsHAvreyssOwt72so661rbqmiJqWpZt1vp+EmZ2Okpiai66WoJualpSanp+onaafmZmpmaCmnZaPjJCdgm11kqKalZyin5CusqKrlqqqmKuvpaWhpaqSkpmciZWcop6WsKapqrq2vrOyrr65tqCjp6ilppycrampjWZpY2JUTU5ISU9KVUw9TERNSUpAQ0Q8UVU8QUFCRE8xOD03Nz9CNzVVWE4/SE5RWFJQUVRKUUpKRUFFTVE/Pz04PTtHUjxFRFFCR1lNS0FIREU6OjM5S0lCPkNDOjlDPjxAPjs7RzctMj4tMYJoTnpcLzBraGA8PUJCODZ6Zlc8Oj0uLlNhTFZIfmVeSEaslZyhn7uumJSei5Oqm5GRk4iqjYeinoyjrZSjpLbHvbTBu8LCyMnFws7Iwr66sq+5tcDCyrbGssG8tbusqa2tsaOjmaq1u6aqp6yqnaivqKSrqr27qKy9tLe+x7y2tbjAsL3As6q1t6y/po+ilpCgn7ueiZqgmJadnY62nqibpKKam6CZp6SxoJqdpZynqZyXk46Um4qWiIykoZScop6gtbCkpZOyq5qrrZ+fpaSqkpaVoISQnp+clamloaGztLq2rai1srKenKOlmpeVmaqhnnhkYGFgTElHSE5RSU1FRkZCUUpIQERHQVZTREg8QUdRMTpCNzpCRjc5XVlLQUxQVFVTTVdSTlVKREBKSk5POUM/NT08TlFDPz9QP0VaTUpBS0RHQDUzPUlHPz1FQTk3QTs8QDw8M0A8Lyc7KkiRQjpTSjAsW29XNzE8Kh1CgGRUNDktMTpoXUZEQ5xwYkdEqJeknp/DrJuXpJeZqJuVmZqOqpaVqKaVrK2Zoqu3xcK8v7jBwsDIxL/Nxry+ubKwubS/wsi2wLC8t7q3p6SrrK2hoZurq8Sipaispp6rr62iqqi+uKatvrC3t8e3tLm4v7C+wbe1srWwvqSWo5WSmpOtn5ChoqSiop6QvaSonairnJygmqWfvKKXo56hqKqgnJSMlJ2TnYaOhI2TnqSgnbasppyXs6easKignKufoo2alqCFjqGanJKlpZqXq7G2sqqlqq2snJigoJKOkJapn5RpZlxjX1FKSEtPTEdFRElAPU9IQDtGSUhbUlBLPUhOVTRCRjg+SEc1Q2JbS0NOUlVXVlFYVFJVSEA4UVFQTTpHQDRDSFFTSUM7Qz5HVktDQE8+SzwwNjtHRj47RkE1Nj85Oj85OzE1RDAtLTBNdlw0S1o1LE1uVzwtPSkeI3piUTVDS1E5b1NGPEt4ZmNYTqKbo5uexaugnqudnK2fkaKelqSfpqqrl7axo6qztsXDvcC2v8G8ycK/ysi2ubW0sbS0t8LGt7+xuLW6taCnrKusnp6fpaTBpaCqrqCkqa2woqaovbWlsby3trbDsrO3ur6yw8C3uK60tbWjnKSUkZOgrJ6YoZyoqKqimsGsqJ2rrZqanZiln72hnKSXqqqrpaCYjZqfkp2IjVd/lp6loaC5qqeTmbejn7OioZywmKGPm5Wego+gl5eOoqOVkKWusqypoqKlpJWVnJiLj5KTpJ+JY2dcZWJOSktLTkZFQUdLPj1JQTo4SkpOXVFRST1MVlw5Rkk9RE1JOEhjXEtDTFBTWVlWV09aXklBPVdRSUs/SD81SE1YU0hBOkBBRFBIPz5RPks3MDk5RkU7OEc/LjY+Nzg+NzcvMT85MSUxUVVtW0pPMTA9Z1dEMTc9LSt3YVM2U1prV3NIRTY9dWVcTFCeoKCYnsOnpKKzoJuxppKpo5+jnq2pq527samstbHIxMHDs8LDvcfEvcXKvbCxtq6xta+/xbW6sbG6tqybqbCqqpufpqGnwa2brLGcqaKusaqkqL23pra7va+3xK2ztMK/ssazurertbauq6KllZWToqugnp+ap6qurq+7saWfqKmZmJeSoqO3oKGjka2uq6SlnZGgnZSdjpCMlJ2aop+otaenjZm1nKOvm5+csJGhlZmVm4CSopaQjqChk4umrLClp6KdoJ6SkpqThYuSjZyfgGRoXWhmS0pMS1NBQ0BJRzs7Rj45OU5NVV9SU0o+T15ePUhQQk1MSThOZF1MRUxSVFlbU1VPXGJIQT9aUUFIQUtBN0ZFTEtOPjtCSEROQj07TkBBMy85N0NCOTdGOys2PDQ2PDM1LS80QDErJ1Z0U2VPPzEwNGJbTTIzPjA8d11eP1tVX2dyQDg8SJZ3ZUE0n6SemqDCp6OpsaCjtKmVsaumoqSyrK2pu7OtsLW0x7/Ew7W/xL7KxbbBycK1rLWpsLmsv8S0uK+ttrqmmauyrKuYoaeYrbu0nKiwm6yfrrSyp6q6sqe5tLiyucGqt7PDvbTFp76urbe1qaisoZaWkaWjoaGXl6Sut62xtLafnqikmZOUk6OgtqKkpZWtsbGlqKSgnZqZmpWXqKCfmaKer7Oipo2Yr5qlrJibn6eTnpCVmZuGl6CUjZCdnpOLqamroaegmp6WjY+ZkIKGlomVn3pla15sa05RTk5UPUNBTkM7Okk/NzdRTl1fUlZRQldgXUJKU0hXS0g6VGRdTkZPTltXW1JQUVhdR0FCW1BCRz5OQzlIR0hOUD8/Q0lCTEI8MklBOTQxNzdCPjs3RTcrNjkxNDgwMi0vLjw2LSNCcWdzazIzLzFcY1ozMzkwNnBbYkgwNUpxaldEV0aMeWZDO6SknKClvqWorq6gqbWqnbevq6OqtLaxsLi3sLe4uMW9w8e9vMPCyMG6wsbCuqq2pa27rcHDuLiqrbK8o5WusK6zl6aokaq6qqCmsJ2qoK+0s6qqtrWsu6yzsrq3rLmwwrq9v6bDqrC3r6mrq6admJiqoKGgkZegsK6zqrC4mZupn5mWkZemoLaopaKir7Czq7Gmqp+bn5+anaWdoZido7SwnJ+RlKaboamclqOimJqMl5qUlpeelImRm5mUjqmpp5+jnJmbk4ePmYt+jJeFj5tsaW5ibm9YUVFaVEFDRFVAOzpJQTc6WFBkXlFXV0VZX15NTFNPXkxKPlpkXk5JUU5bVVlQS1NXWkk/RFhQREY+Tj89SUdHUVBCPURGQk0/OjJEPzc3NTQ3Pz05NUU0Kzc1LzI1MS4tLiwxPionKz1ccD0+MS4xZVtkQDE3NDdnWWFGKEA4bX1pXFY7iXtjQz2on5yhqbygqq+qorC3qKSzsquhrbW9r7O5vbu9t7fBwr/Jw7nEw8HAucW+wbiwtqirt7K8v7+0qq+yuJ+Xq62prpipqY6nu5+lrbOfq6KxsLOsqrWztbytsLG1rLC1ssC6xbarva+xt6ytqqOxpZ6lqJ6jlo+Yn7Kpsqmpspmdp5ualIyfpqS0rqeirKytsKeyqrCpopuep6OelaGZnKi2qZiakpKfmZ6hoJKtoZuaiJeajJ6anZSLj5eXmpempqOgnpaWlpOAkJWEe4+Tg4yXZ21yaHFzX0dZZlZEQ01YRFo5SEI1Pl1RaFxPWl1HW19eTk1TWGNKS0NcY2BQTE1OWFdYUEpWVldMPUVVSkVEQU0/QUZISFFQQTtHREZLPTg3Qj02ODcxOT48NjVEMCs4MC8wNS8qLC8tKj0sKyUyKyo1SzEuJ19fYVYxNTE9YFZfOClDM1lVXGhLNYx6ZkxApZmfpKy1o6yopK6ttaius7imp7C3xrext7/Bwra1usW+zMW5w8G6wLrFuMG6s7Ssqrq3u7q+tauvsbeYmKisq6ycrquPq72dq66xo6mfsa2zrq61sbm2qq2vsqi2sLS6vMmyqrW0sbSwr6ehs5+aqKufpJWVmpmxoq2gpa+WoqSZmZKMoqWnsqmhprGrqbSlrq+zrqOYna2nm5eempqsuKKYk5GPmJyhmZiVrqGfl4OVmo6enZqXkYqUk56apaOjoZmWk5KVe4yQhXuNi4OLk2xueW92fWFGYGpaSUhaWz17SkdFNkFjVGlbTV1hS1xdW1JSU2JhTEtFYGFgUUxJUFdWVU9HV1ZVTjpJVklIP0NLP0VESEhRTkE/SEhIRTw3PT46NzU2MDk/ODY2QiwtOCwvMDQsKCwvLSo3NikoOS4kOks1LiJUYFZhLjUoQ15RXC4rQS9KR1BbRzNjWFRMRZqWn7CosKmspKOurbWotrO3o6yzt8m7tbu7v761tLfDwMzHvMO9t7+/wbjAvbK9rqi6uri3wresrrG6lpenrq2ppLKplK+7pKyysqanorK0sbKxtbC3s6murLKnuK+2tMPFtqm1tauwraqno7afn6ewn6OUm5iUsZ6nm5+pjaminZuVl6WlpLenorGzq6ewp62vtKykmKCsqJycnZyVqrmclY6PjJidopiRmaikoZmGlJiRnpyYl5eJl5CXm6idpaGSlpKQlXaEkIZ7hoKEjY1ucXh2fIBcTGVsXEtPZF0/YntHSThHaFdlXExeYk1ZWldUWFVqXU9QSGFeX1BLR1FWVVJLSFdVVk04TVpORUBGSz9IQkNLU00/P0xPSEA7Oj47NjswNDE8PTQ1OD8pMDcpMS4yKSksLC0rLTkkMDQyJTlCNy4jQU5JZzI3J0ZhTFYlLUIuPUVMUTwzcmpMRUSRmaStpKytqqWisLGyqbevtZ+rtLnIua7BvMO4s7K1wsPOxMDCvrW+wMC7v720xKmqubG2t8C8sKy0tJ6hp7GvpqexpZ2xtayqsrCrqKi1uqy1srWrs6yqq6msqbmusrHIv7ikubCpra2mqK2xpaSjrqOonJ2bmq6Zo6Kio5Csn6Ogn6GppqW4pKu0tKSqq6msrrWuop2jqKqcoJqbk6S1mo+JjoiRo6GWj5afo5eWh5GVlZ6bmZeViJiTlZmnnaGgjZORjpB3fo+EfXx9h4qKcnRzf359XFNjbl5OWmddRkSWW0c6TW5YYVtNYWJOVldWV1VZaF5RU01jW1tUS0ZPVFNOR0lWU1xOO1BeSkJESEpBRT8/S1NPPjpOTUM8PD45OjU9KzMyPTYyNDk6KDQ1KS8sMSgpKywtKiY1Ki8mMCkzODoxJiozRGU7NipIZEhKKzpJPzNDSVMsPo9rQEhJkJqoqaGor6Smo7OzsLO0sLCgq629zLuuwr3HsrSutMLD0cTFv8KzvsLDvL+4vcWorbess7m9wLGssq2ipKeuq6ilsKOqsKquqrGurqyrs7unt7CxqLKqq6Wlo6+6rKqxwrm0rLmpqaitqaexpamkoq2pqKKem6KslaWdl56ZrJ2hp6ihrKajray2sLGgqaKgqq2wrJ2ep6epmqSYmZChqJiGhI+Lip+hkI2PmJ6SkoiJkpahnZaZloeXk5OXpZ2dnYySkI2Jf3+IhHx3f4eFhnV0col3bF9ZX25iUXNxXEs7hHxGPld1V2FZT2RcTlZWVVdRXGJfU1BOaFlYV0tHTE5SSEVJVlJdYzxQXUQ8RkhIQkc/PUpQTDo+T0o9OT89Mzk4OyozNT4xMDQ4NSg1LyosLjMwOyksLCclMjM0JCwyLTg2MCkoMj1eSzAuSWdERjg8QjA1RUtYMUCUXUBORpWWrKegqbGcp6iwtay4ta2ppKuqvcm8sb+5w6+wrbPEw83Ow7/As8DDxLrBtMnErK+3rrO6wL60rq6sp6mqsamnqLGls62qr62tsK6yrbO7pbezrKyuqKufo56xt6uqrbq2pLW1pKqnq6yqraCopqawsaOnpaGhq5aqoZOboKaeo6Kqo6yinqaxtqysoqWimqmqrqmcoaWkpJmgmZaQmJ2TgYKQiYWdoI2LkI6ckZONhY+apZuTkpuMk5KRlKOanJqLj4uLfIaCgoF6dYGDgX51eIqihnhqXV9uZldlh2ROQGeSTERieldiWFJmVU1WVlZUT1xdYVZLT2lYVlZISkhJT0JHSVNRWW9BTVhAOkpHRkVHPj5FUUg4Q0tFODdDNzI6OjoqNDk/Li80NjMpNCsqLCsuIzQuLSsmKCs3OSomNis8LjIsJjA3WFouMEpnQUE8PEMrOkpPXjREh0JJSUSWkK6koaqvl6morbWqtbGqpKuqqbzBwLi6tLy1prOvxMnL0r/Bu7i/v8O6wrrBxK6xtbK0vMG+s7Kvraytp7eqpq2vqreup7CvrrGqtaq2tqe0t6uspKmqnKSetLOoqKSztJ+1raGqqKuoq6efq6youLWpqqmpoqifrZuRqqGdoKSipqKqnZymtK6npamio5ekpqeqnKKko6CamJ+Rj4+ZjX+HjIeEnp6JhoyMkZGTj4WIl6Oajo6bkpKQj5KgmJmXjYuEf3SGgn9+eHWDf3t4fn+HnY9wcWZmcHdcYXSIak9dmFZIbXlVZFZSY1BNVlRVUU9YW2JVSVFqVVdUR09YVUk+SUhPUVB4TU5WPTxLRD9AQTxAQ1VDOUFLPTU7RTIzOzo3KjQ6PSstMzQxKjgqKisqLCkqKC8qJiklMzssJDIpMi8yMiUvM1JjMDI/Zj1OWD9DLD9MVF8vSWs3UkY7lYyvoKSqrJmpo62usrSvqaSvqai7v7zBsrC5raK2r8jHyNDAv726vMO+u8TCv7+vsrOytb28wbKytKu0qaW1qaWts7K4rqGstLGvsbmrua6qrrerqp6qq6CjobatqaGfrrKgtKqfqKeqoqqhoaytqL2uq66toaenn6yZj7CimKKgqKeep5uZqbCoop+roqGSoaKip5mZqaWYmJmdj4uHlYh9joaEhaSXhoOEjYiRkJKGh5ahl4iRnpKTkI2RnZWYj4uGhnh0gX98dHd5gHt1dHtrg4ekdmleZWuAdWeIjHxSVm9eS3hzVGRTUV9NTVNaZ05NV1llWUdTalJSP0JOUWFROklITFNJcVFMUzs8ST87PD07QEBXPDw+SDczQ0IxNTo5My01OjopLTMxLS02KSgrLSw1MiMyKScsJS47LiYxLjAtMTQlLDBNaDozOF89YWQ/RjFDUFtbK0hQO1lDM4+NsaCjpaqjo6KsprOysaiksKequL7BvbGpuqqnrrDJxsjQw76/vbm/wL3JvMG4sbC1srq8ub+ztLysuayjtKamq7G1t7Glprm0rLO8r7ylra21q62cqa+kn6Ssqqicnaqyo7OomqunqaSonaKpp6m9qrSwrp2ppKCunJqzopaknKWkn6WamqiqpZ6aqaGbkZugpJ2ZlqipkZmakpCLgo+Ffo+Cf4ifj4eBf42Ik5GRhoOVm5SFk6KOlJGLkZuTloeKf4Bxenl9e2d2fHp1cXJ+aoZ5hYhkX2djcoV7bWh5XV5VQVd7bVRiUFJZS0xOcHRdSVpbaFpGVmZQQz5KT0RDQTlIR0tTP2phSVE4PUg8PDw+Ojw/VDY6P0M0NUg+Mjs1OTAyNzw1KC41Ly0xMSYvPktJMSUaOTAlLCwwOS8sLCs2JzE3Iy0vR2pJMTRYPWZiQUo3R1NgVSo9PEZcQCqOkbCYnp+opKGhq6S2sbGkqbCmrbnBvbexpLmsqKivw8nIzMK3vb+1uMG6yLbCtbSytbK9ubq9tq65tr+sorOmqqqutLazqJu5u6iwvrK6oK60tqmrn62wo5ylqamjnZuksKavoJ+qqaehqZujqKCtvKeusK6hqqKkrp6eraaYn5uhopyfm5mjqqKamaOjlZaUoKGWm5alrIyfkpCRjIKKgICPgHualY2KfYCNiJKRjYuGk5iRhpSkipOSiJCakJSBiX15a312eHhienpxb3F0eGqCdWuCZ2NnYW5zjm1iam9gb0BceWtWXk5RUktJTVRZVk1cXm1XRVlgUF5PSE1ERjs3SEVLTzxyaEpLOUFFOzs9PTs7PUo0OUI8MztHPDQ/MTgtNzg7MigwOS8sNS4uPS0qTD4qHTQ5JicuMzQuMCsvNCYsOiQ0MEFoWjEzUz1lX0RMNktWZE4pPTNSXj4jkZasmJ6Xp6Kgn6ejt6+toq+vqKy4w7u0rqC5r6uos7rHyse/uMG9r7S/t8S2w7KvurGywLa7vbequbi+qqS0pqipr624r6eXuLyjrb60tKCtuLWnpqews5+epaaooKWYnqynqJ6gqq+noKaXoqifsLifpLGvoKuhrKScpqeompubnqOVnJuanammlpueqJGYkpmdk5mWoaqRmoqNkId9h36Cjnx8oY2NiXqEjYaMj42GipOajoiUoIqRlYKMl42SfYV8c3B9cXNzX3h3aW5xcXBrgHNkemxnZWNhZoaAYFtyanJNTYBpWFpNUUxLSFBTUEdMW2BvVEZZWlJoT0hLRUY1NkhCTEk1WmVKQDZFQjk6Pj0+OjpDNTk+OjNARjwyQDIzLzo7ODMmMjwwLDg1QiopLUMqLDQ7Tk5AOzczLS4rLTcqKjwlNTM9ZmQyNE0/ZV1GTz1SWmdIKj8wXVw1KJWbpZiblayfnaGjoLarsKO0s6mpucW3s66huK2trK+1xcfAt7/BubC1vbe/u76wrL6ws7+yvMK4qru6uKentKenqq+rsq+kl7u1pKu6ta+esbmvqaWnr7GboaSgpKOglpuvpqGeoqivoaChkqSkobewoaaxq5+ro66YnaqlqJ+Ymp2kk5mbmp2lqZmbm6SVlJeVnI6Tl6KpopGKipCGeoR+hIt5j5eKjYd7g4mFio6PhpCTmIyOlZmLkJd+hpeMkHqBe3Byd25vc153dmRsbGxraoVuZnJpamVoXWRzgWBba3ZpWkp/XltYT09LSEhTVkczOV5fbFBFWVZZZk1JSUVFMDdGP0tCNklKSDs2Rjk0OT49PDk4QDg7ODo3QEk+ODw0LTM8PDc1KDU+MSw7QTEoKzY8IjhSPSoxMTM+RDUsLSc0Mio7KzEzOWNtNzRHQWZbSFREVF1oRC48MmRXLDGUoaGWlJuqm6OhoqG2qq2gu7elrL3FtLCvo7WvrKyvtMPDvLO+uraws7m4ure6r63As7O4r7/At6y9urWlorKpp6mxqauwn5m/tKSntLWonrK8qailqa+rmaKnnKOllJegsqSZnqSpqZyin5KkoKS4qaWnrqedpaGok6CpoqGhmZucn5GZm5afoaqbmpiglJGUl5qOk5OkqKSQiYqPhnqEe4SGfZ2NiouHe4KFiImKkoaXkpKLkJWUjo6Ue4OXkIt3fnxsdHJsa3Nhd3RoaGpoZ3CGaGhpZGZpaWBqY2poW2Z7YmBTdFRcW1JMSkdJUFRAISpoX2lNRFdVXmBMSkhFQy46QjxGPDZLUEQ4OkQzNTc9PTg5NT86OzQ+OEBLPT45Myk4Pjw6OSo2QDMuRTQoKyw/MC1OPy4rLTcsMTE5NSwmLjUtODA1NzZgdEEzQ0RnW0tXR1VgaEIzNzlnUCcynqKkkY6jp5mcnp2js6ynqrq2p6zDwbixrKO2rqetr7e/v7yywbawrrK2tri2tq2qvbOusrC8vrevu7uxpZ+1qaWks6aorZycwKqnpa+zqqy1u56pqaywpZidqZ2mpJGYpayimJ2kqaGboZuWn52ntaawqq6goJ2eoZWgpqCioJqbmZuSmJ2TpZ2soZeWnZSTjZWXi4+Ym6mgkomKi4l5hXaBgoGdh4uDiX6AhomHhpGEl5SPjo+RkZGMk3uDlY+Gc35+ZnlvamprZnRza2JnZGR2gWNlZmZlamlja3JbX1ldbGNhTmlYWmBWSkdJS01TWD45X2xoSENWVFxbSUpHRkEuPD85QTg5UkZANzpCMDM3PTc2OTI6PDk3OjlETT1CPDAqPEA7QT0tNUIzNz0rKiwwQipKSy4vKiszNzIyKDU3JCs3LjcyNjg1XXlOMj5IaVpMWkpWYmZAOjNCaEglNZqjoI+MrKGWlqCVpLKxorK9tqGxxby6srGjt6yqram4vLq6rcCxrq6utq+zuLOpq7mxr66ztbq1sLi8q6aetKmfn6+iqK2bob+fsKOusa+3rrWera+traKZnaaopZ+Vmqeln5ikoqidmp+ak5yerK+muqiuoqGam56ZnqSapJ2XnpiblJifkqiVqqeak5qakoyVmY2UlJuqp46OioqPe4JzgYGKmIWHfYmKhoaLjIqThZWbk5KOj5GXjpB/gI2Og2+Bf2Z5bWdraWZwcmtcZ2NjdIFiZmdqbmxnampobl1sbHJwYFRjaWNmWklGTE1PWFFRVWFlgFVBV1NZVEZJRkVALzw9Nz82PEZOYTg6PzI0OUAzNzgyOD83PTg+RkpARDkyLT1BPUE9MDVAOUExLSsuMzw7SzYwLissLTI0OzYjMyopNi41NTQ2NVp8XTE5S2pbTVtLWGRkQEExSmZDJjSRoZuNjq+dmJOhmqmxr564v7WgtMK7vrqxprevp62ktre3tqy7rqyqq7aqs7euprK1sa6psLW1sLO1uaaon7WnnJ2ooKermqe9l6yjrrC1ta2toLGtsKihm5yjq6eblJumo52aqaKklpqfm5CbpKqrqbugp6SgmJqZnaGPa6KWmZxwgpWZo391kamnnpSUnpCJmJqAloqikHmHlI2DbWl/d4NxbIaLhn6FjIdxX2RhZ4SYhWuKjZSSdHeLhH6DkIBnh4BndWhlV1xoc25NUGljZ3KFaF9lZm5tal1gYYqPg4RlTktEOUdUaF5KSFFQVVVMSFNhcHRlRltRVVBGSEVDPjE7PTY9NjwzZlw1Ojw3NTtENDg2MDpCNz86PkZMQ0IzNDM9QUBAPTI4QEU9MSwsMDg9RzcwMS4qLiovNTY4LCMxJzIxNDoxNzZYgWwxNk9rW05cS1tmYj5HMVFkPSoui6SZhpWwm5uToJuqrKqjvcWvqbfCt728raa3sKWqorazsrKwuayppqy0pa+0o6m3tbWop6u2sq20rbKhqJ6yqZ2ho5mkpZiruZOlpa+zt62vpaquqqykoZ6coKamm5agpaSbm6emnZOenpePnaeppLawpKKinZaYl5ejiKGOkpqGoIeSnKB/pX+lqp6SkpqRiIRzeI2OhYihdomNaZeIZn5zeKBviIeEfo99f6GgoJmAfYeec4aOdZuKbIeBg21pZWN6bHJhU4VtYmxpmHFYaXFwiFleaVtsbFuIcm56coVmhoRaX0dOP0dfTkZSVlZRUVJXVWddTVZJUlJPRkhHPjw0OT05PDc7MDw8Nzk5OjY9RjU4NjA8Qjs8OT1GUUc9LjU8O0A9QD41OUdBODIqLzE8STkvMDEuKi4oLTQ1ODMlJjIxMTU+MTw4WIN1MjVSa1tOXExcZ189SzFXYTcvKIqnl4Ocq52YmJ2eqqmnqr/Dr7G6vLbAvqqlt7CorKWytK6us7aqqKSwraW0spyutba0pqensrCssqetnamgsKefo6KYn6GarLOTo6Wltb2mraerqqyopKGgmJ+mo5mYpaKjmJykqJaTopuTkqOlpqG3pKSgo5iVk5eTnIivkJeUiamLlqGchbGAo6ydk5mdlHmC1KiAh5XBnMZ5eLGlt5dlgMCcv3mEhXqShH2QkJHKcpe7nMV6crWnupB7gG2XsauweWhsWLGubmVpvJK8bmd6bnKP2H5Ta2O2sn6BcpRzmqGqkFdPV2JPVk5GVVtYUVFTjV1XW1FBXURRTkVISTw8NTc9Ozo5Oi49Ozg3ODs5PkY2Ojc0PkA+Njk/RVJJOi41PjpCPD9BODpKPjUyKjIyQkUvLjMyLisvKC0vMTg2LSAvNDE2QTE9OVeDdzIxVGtcT1tNXmdcPkwxW100MSGMp5OBp6qfl5ydpayxqLDCvbK1wLW2vsGqprOsrKimrrOprrWzpqeltKWnuK2cs7G1q6akp7GtrbCmqpymo6+ioJ+dlZmenK2rk52in7O6o6upoq2upaGcmpmhp5+XmqefnpeepqeRnKaZk52hpqKhsaOfn6OWlpKXkpmFr2tqio2qfmaDlYatZHCdnZSZppRwrqGkfni7fWyhkHaxX2q0W6WAZZyQYWeDe2eAa3lrqWW+cWemi3WxanuxeHSSlGNubaduW4ShRWhmh5ZFdZxgfmd8pKeCWmCMq2iAlHh5aqc3Sq9cWFNsZFtLT1hfXFdWO06KT1dXL0lUU0pERkY9PzQ2Pzs4OjkwPTg5OTk6PTxEODs6Nj1BQDY8QEhRRzkwNzxBQz5ARDhARz0wMy4zM0UzLi41My8rLyguMC46NS8nJDIwM0IvPTtVgnYyLVZqXE9ZTF9nWTpNNV9YMzAbkKKVg62npZ6jpKqxt6y1vb6wtsSyt7rBpqiwqq6oqK+uo7C6r6OkrbKjqbinnrKysKOloamsrquvpqaeoqGvmqGblpSWmpqrpZWaoZ6zs6KsnKOtrKCdmZafoaicmJ6jn5uZoaakj5yimZagn6qep6ahmqChlpWRlpCahbWbtXiFqZm1mXaGs5u3fpOWlqmUf2uBpnuChoiTlJN3q2drsVyreo2GlHSJco+HgYGJkJd4goGLl4uDoI+EsHZ3n3FsbGx8i06kWEhiYpl+Y2imYHlydVOTh15RqW1jcX2GgGKcLlGhb1tTa2hgTEpbZFhcWkI+sntYWEEjTWhGQ0VBQEExOT44ODo4NDs5OTw5OkE6RTo6OzY6Q0I4PT9LTkc6NTpARkJAQUQ8RkQ7MDIwMTtGLDAuODQwLC4oLzMsPjgzMR8vMi1EMTw8U31uMytYalxPWE1fZ1g3SjhhVTUwG5SglYizpqahr6mos6ypu7bCsLvBrbi3v6msra2tpayxqaCuu6qgp7Oso6u0o6aysqejop6mqrGnr6eknZ+frpWemZSUlJedrKCZmaSota+iqo+qqKqbnZSXoKWnmp6cop6bn6KkopWbnpeZnKKpmqaanJuioZeTkZKTnYPVk5m5cLDBfsWGfNaUm7t8mpWlj42djaR7joikg6WDeqx5j51Wr3qIfp9ruVu6d4eEfqaClHuXeqp4jZ2PerFujoR0kbyFb5RQr6fFilGgemNgqmJzcohtl4hgU7W0yIWAiXxjpDNCnXZdUGppY1BAWGhaZGFKSE1xUFxRT1lmWkNFP0U/MD08NTk7NzQ8Ozg9OjxDOkY6Oz42OkBDOzZAT0xIPDk7REhDQkNEPEVGODEyMTFEQy4vMDQ4MystKS4zMjM5NzEjJTUqPjM9PVF3ajYqWWlbS11PX2ZUN0g6YVA3MSWbopSYsqioprSqpbSppLy3wbC5v7C1tLqytKewr6KvsqWfrbWnmqe4raKvsZ+ztLCgpJ6fpqmwqLOoo5ucnaqVmJeVlZOVoKmcmZanrbCpo5+PraKolp2Vm6CloJehoKGgmqGhp5ueoZ6UmJqmoJunlZubn6GYkJKUkJ2Ism5otXGrh26OpnK0c3K2e5qXpIuPnY2ifpGhpn+xd4OR0tJ2XK57hX+kb5uqpmuHhX2tfZiZjnuxcZKejnezZZd0hJ5vnmeUUciLWsJcoHliX6xgdXOHYpeIXlnKnW+/gXVNS7VTVcZkVFFqY2VYQVBrYGxoUFZHSjk9VVJaV1hJRD9KPDI/OzU9PDQ2Pjs3Pjw9QztHOTtANzs+RDsuQ1JKRz4/PElKRkNFRD5ISTkxNzQ2QT4vLjI0MjUyLSkuMjYsNzQyJh82MDs1Oj1QcWg5J1dpXEJPVF9lUDVHPWBMNjIwop2SpbGto6u8raa0pqe1uryxur62tbO5uLKktLKgsLGinquvo5emuK2ksbCctLepoKWeoamksaesqaOZm5mnnZWTl5eQkaGmn5WTpaqwpqKWk62gppKTn5ujpZ6VmqWmoJqin62ZoZ6dkJSboZ2cpZWdlZminpWYlZGahax7d6h2o42IhqlvrYqCp4OYmKGKkpuLon+TmomuhICCs1xys1KufYKCo39y2H54hn6PnYaamXavhoeRnId2tGGaZZqCgpVtklqwWEuadZh5ZmCsXnV3iGiYiGtdr3eVno94bDV5yK6yX0JUb15nYEVQbGBwbVZWTS5mZWlTWVA7QkVATDo1PzkxPTwxNj85OEA9OkM6Rzs8Pzo+PkU5LUVVSkVAQzpNS0pCSEc+R0s5Njw0Njo+LzA0MzMzLjIuLjE4Ki4zMiUhMDM3Njc9UGtlPiZWZ1xAPlZfY042R0JfSDo5OaCelaC5sJe0wq6os6ipsrq3s7e+uLextLq0pLeynrOsn5+oq56Up7WrqLCxqq2zo5upoJ+nobWmpamimJyUpKCTkpuXkZShpJqSkKatr6ahlZmqoKKOkKGZp6SflJmlqJycpJ6snKGcn4yTn5qdoZiZm5aXoqCTl4+mnYapfX2leKGOjYKqcK2LgaeGlp+hiZiYiKODkoiUq32Ai515b7FaqIKCiJ96dNmAd4h0qIGOm4ySpHuUj5+EerJenWSgfoOVbZJdq1tak4CRf2hnqmNxfIJrmIdzXataiaCOa29lT0pDoVxbTHRdYmdOW2FfcXNfS1c3SpyYWEdFPUhHQU0zNUE4Ljs+MDVBNzhAPDY9PEY/Ojw2Pz1CNy5IVkpFQUg2S0lOQElLQEVOOjpANS46PjEwMjE0NCsqMDUvNywmMjEoJCQ2NjcxPFBlZUEmVWZbPzJVX2JMN0ZIX0MyPziinpqawauXtMKuq62ppbSwt7C1vrm4sbC1uqi6s5+vpJ2kpqaek6mvqK6otKuprqGYoKCmpKO5oaKroJaakKGflJOemZOXnp+QjIyosLCnnpebqKagjJGjl6eqppSXqKednqCiraShnqGMlKGYn6CSnpeclZ2hlZaNqpyPrm1ytHOpi3WKp3O0eHOzgJGko5Gdjomkh5B3uHCNe4uiamu2WqGFZZeXaaCip26UcrR0k5l+smqFkYetanWzYZ1mom+Hk2uXXa1gTaF8hpJSc6NreH9+b5iHcVyvVjycd2ZUb24uXKdPY1NrZWJtWWNdYXB7Y1RbUj49bnEzQ0JAP0w6ITdANi47QDM3QzU4Pz8zOzxDREJKRk1JRjYySlRLRUJJNklKUD9ITkNGUD08RTUwOzswMTAvNzUsKyw0MjYvIzAwLCwdMjg5LzlOYGVEJ1VkWT4vVV5hTDVGTF44MUM4ppybnryhm7LAr62rq6e3qbeutb+0uq+ut7aqwLWoqaGbpaOhnJGpqae0orKnramgl5ynn6SruJ2jrJqVmI6jopWMnaCbmJyfkZOUqrawqJmVnKypl4yTpZikrKKRlaqxo5+epquxmaGjj5iilp+blpyWoZOcqZyUj6qZh9SSmrtzsMOAw4Z+1ZabuHiIkJiMmIuMp4h6pLZ1fnd2woKasmCDunnAfXa4Y7WBjIepfZWBq6lxe390vIinoGmdYaaOr6F+jHWHqn2+b3O8dLKDdHiBim6aiHFujaR0vV53fVphebxrWlZcanleamFmZ2Ntd29ZXFpDQEB0QENHKzRHIic7PzEwPD83OkI5OT1DNDxATlpeYGBgX19aUFBSS0VGSjRITFJASk5FRk9CPUU4ND05MDIwLjg3LSouLzE4MCItMSwzHiw8OjA4TFhhRidUY1g8L1ReYEs1O0xbLTdBOaebnqK9oZeyw7Ctqqqrsaa3r7bDr7iwrbiurcCwq6OinaOhnJuQqKOpsqS0payknpWaqpimrLicoa2YlJ+PpJ6SjJyinZedmZGVkq+5sqyWmKSop5SQlqSbo6ydkJ+oq5+an6ijtJ+jpY6noZSimpyYlaOYj6+fkpSpnoWQmLZ/j5GMt5V4gpOatXdta25zb3mQhY+KdJ/Bu72ae4GxqHCAc5G5g32Hho2HjXyKh42YfKS7ub2cdHm0o3R3l3Z0sHWZnmaHao21dHJxeLaMXn96fYlog3luemOLrHB1hX9YW6dqRWVaVGZgY15jUWdncGx1Q05RTUQ6W00/SjM7LyA4PjsuMz1BOTk/PTs8QzZCVFlaWltbWlteYGJgXVNHR0g0RElUQktOR0VPRj9HPDc/NzA3MC85Oi4sLy0qOC8lJjIoNCQoPjcvN0xUX0cnU2JXOCpPXl09KzpWVSc+OzynnqGiwKWWtcO0q6qorKqpua6wxa2zsq21prO3q6mhoaSeoJ2Zk6qjrKqltaemn5uVoKOdq6S9pqCplpObkKGakY6hp6GSnJeUmJSxtbeumZ6kpKKLkpGmmqWqm5WnpKWbmaGopaekqqGSrZ6XpJ6Xl5edno+vqJObpaGNan1pmqV3hnJ9mo50eWSHe72+wLpvk4Nylohhc2taX5uKYWOIj5VrYICWZG6ed2OWbICalZRlXmBicJmIaXKLfYaVZ2t/cnR4fX9iW3d0gWhQXW2DfXuLa1hreoJzSkpvhnBOdExFWF1nYUxbV2djX09bbXRpcVJRREVNO0dJPE0/MiwyQT84LzU/Qzw5O0A7PUM+UlZWV1laW1tcXWBhYWFgXFVHNURGVUVKT0hGUElJSDs4PTUxOi4wOzouMC03Nj01JiIvKjIsJTs4LTdKUl9JJ1NfVjQpUF9MKDI9W08nPzI+qaCoosKjm7W7tqOspa6np7SxrMirrrKqs6K9sLGln6KnnaObmZmrpq6jpLSopJuYlKCapa2nvqeopJSTmpWfmZKXpKmokJ6RkJicsLO/rZynnqeiiZORqZqoo5qaqqCjmZqjp6yjoKyjmrGblKeglpWdn52WsKSXoKeYmpCbm6Ghl6ShmZyZmZmPlYFnbX1xd5KYlJKGjLarjYaYlo6KjJiWh5SVi4STlJKJjpOUmJSYlpmfoZmak6CcjYJ6pYVta32QfYB1ioqBcYJ4eXZ1iX98impzgXSDdWV3fXdrb3ptX2RdcGhNWVpmamBXWm94bW1mVU9GUjlPWU1STygrOktCNjM1PUBBOTpDPjxFTlNTVFZXWFpaXFxgYmJhX15eW1RLQ1NHS05ER1BMT0k8OjszODksMjs4MjApNklSTzgiKSsvMiM0Oyo3Rk9bSiZSXlMxMFReOis9OFxKLDwtQLOgs6LAoaSysregqaWyp6WvtKrHqquvpbOkwKezoJ2jpJyjlZWfqqasoqK2q5+YlpWfl62ppMCeq6OUkZqWnZiSlKGenqKnk5GZqKezxLCaq52rn4+Wlqidqpucn6uYoZqcoqSvp6KmqJ+umJennZmZoJ6dm6+gnKGllJaRl5Oen5ShnZegjpaTioqNjpeukHyWnIOSgourqYWAmZeJhI+eiHqEkIiGmpKIh4qWj5uXjZCXnaOVmJKQnI1/jmehs6+FioV2e5KKfXd5em9meY+BgIlqdYF5iHNpc397doOGgmp1ZHpmYGplY2Rma1lse29pal1TTFBEXlRFQD8+LDRARjs0NTs+QTs8Pz4+SE5OT1BTVVZWWFpbX2JjYV9eXl1eXVhWSktMQklPTVJKOzw6Nzg2LzI5NjQuKCYkLTEuLykrKjclKzwoNkNNTUQvVFxRMDVOWzE3RTNbRzU8LEC0oLmwv6ysr7KxoKqnsqyirLKvxK+pqqKxrbyis5ufpqKhnJiXp6WppaSlsrSelJOdmZmvpa2+oKuikJCdmZmUkJWhnJeonISeq6yjtMi0oKqkqpaVl5qmnaianaOqlJ6fnaCqr6qmpKyjr5ufoKGXpJ6cnpyuo5iep5KWlpuQopeWp5yalmWCknxlfo2akGN5jm1oa3uSpatqZZuYfWeGimVlaWh7jqKPbGiNmJGjd2tqipiinpdza216hI6IelhmXoaDXm2MioF2XGhzd3aRgIiCbniCeH9zbnmEdHaJh46DfGqHWV5sdGRdc4lpa3xwa2NfUk5XSWRYQUo0PkY3P0ZENzE8PT9BRDs7REdISElMTlBSUlVXW15gYWFgXV1dXV5fXVpVT0RIT0tTTj0+PT02NTM1NTU0KiYmJSwqJS8qKyc2KiQ7Jy9BSltKLzdaTzYpRVkvRE8yWUM7Py49pqC6vLqvrLSxqqWora6wpq2ssLuwqKajra2wnquWn6OdoZmZpqqcraOlp6myrp6Uo4+ir6W1uaWtoo6NmaCYk5KaoJmZpZV8pq6jqLTFuKWip6+enJWeop6jm6KoqJGeoZ2hqrCsrKWroaqbp5+ooKyWoJulr6OWm6iUn5yakaKVnKmXnX29g4hytHKEnYataHi5xLhxlKOjeqaZmXKrgnzLwMC7cYyjiIOefJeZiZ3AvYGWnZ2MnMHBfIJ8k42aw8B9bKWyb4yBb8p6f5t3kIOOgXV5gH95cXp/h3B3hYyTeW14lGNnYHhkYGWCYl5zZ2xkZFlMVklRWkhPRDJJRT9EQj4vPD8+QEE6OERDQkNFSElLTU5RU1ZZXl9fYF9eXl5eX19fXVxTTVBHVU5BPz89NjQ2ODI3NiomJSMpKiYuKyopMTAfOSojPklbTCojQlAuI0ZbM1BZL1VBQjsvOJajucO1sLDBqqiUo6+psK6tpbKzrqmkpaWvqp+rmJqin5yaqqahnKuipKijpLSknKKSpa2qtrOnraGRkJmcpJKQn6GYm6CdiKetpayuwMCxoamvqZaSn52hmaKjqaOSoKGdnq2vq66opKSooaalnayokaOaqKypmpynmqqflZajlJ+hlZt+zpR4eqSBeZWWm1+uj16OqIKjoXynlptzq4OAr15jjap7qIeFoHSXk4izY4KrhqCNjbNqhK91fZeIt2KDrVqjzW6Qdnvae3+ZcH2IknZ9ZXuHdnZrfIdufYWQkX5tg5Bgcm1waGBfeWVccWdpZGdgUlRTV11LT0Q1QUhERDg+NjtAP0E7PThAPj8/QkRERklKTE5QUk9TXF5fX15dXV9gYF9fXVpXT1VKPT8+PDU1NzgxNjQoJyQhJywmJi8oJiszHTYwJDc7U0wrLC1KMCc7XDtMLSFQQEY0LjGtwsC/tbSwuJedkaOqqK20q6Wyq6uqoqumrqqfppuZpZecoq+foJ6op6KloJ+wq5qdlaauq7CqqKuflJGan6SSj56lmJ6no5+upqyxqL/Hs6ipsa6Wkp2coZefqaqelKCfnZ2usKmsq5ypqKWiq5KsspakoaqpnaKlpJ+un5GYpZeemZKTkJegcYWMl3WFqIZxsX2ecqx/op+BpZCfdquCfa1/nHOtf6yHhp92mZJ7fJd+qoihi5GMnX2re4mVkKCBe61XncV7j3CTwX2BlWx1cIxtZXZkhm5hd25yb4mKko+DbpKRZnB1dXFhZ21mX29oaW5nZFdUXWFaUlNDOUlJQEQ8Pj1ARkVDRUE9PDw8PkBAQUJFRkdFQENJU1dZWlxdXl5cXl9hX15eXVtaUkM+OzkxNDc4NDUyJiMfHCAxJyAxJyAnNB41LSY3PVdKLTwoPTEpM1dARiEcRzpDMS4rsNPGxrKzoJyijqKioqyutq6osaWoqaatq6umoaOdmKKVn6Wrn6Gln6ioop6dsKyXmpaop66rqKannpeUmaKhkpSgrZudp6OwraWttau6zbGtpq6rlpWcnaKYnq6snJagmZ6fqbOrq6ucraulo6yarrGhp6utpZekqaenr6CRlaKimJOQhKRqpHWJeql0erJwgqaKmYxxiaCahqRgYVKshX+ug5t2rYKohoWfe5mXhXpmgKOJpJiGgqN9qX6CloiuX3ypVp6jkoF6o5+Ae8OuxItyr7OzuXFiqa/CdGiMjJiOgW6clXFvenh5cGxmZmVycGZ9amNdV2BqWFlVTU1RTENDQUI7Q0BAQkk8PTo5Ojw9Pj4/QT04NjtETFBSVFZYW15eXVxeYGFgX15dXF1bU0lCNjc5OTY2NCwmJCIgKCciKy0iJC4hMy0mQERXSCxHKzU1KjJQS0wjIEE5RDQsJ8PJ1tS/oZmrp6Cuop6vtLCuqKyip6WoqquppKagm6SenaWnp6Ocq5mirKCjn6+hnJqSq6S0rq6gp5qdlZOmopGboqigoKadsaamqbKtt8iytaqrqZaRnZyimJ+ls52ZoZSdn6esraWwm62ro6OqobKtoamysKGZqKesrbOhkZShpZaZkHupbJ6Eh3WreXywb4KljImflpaglYHSuLS3yYGBsl9glKmDpYiHoHqZlZp4qsl0maSUqKmQkpuNgZ2KmsbGeWehgqV0gZ+Ogn2vXW+0YrB1S6OHbadHgpNkjpCdknxxmZWBcXt1fnxuXGZqc3FmgWtfYVlkblxfWUlNTUtFREFCPkE8Qj9JOzc5Nzk5Ojs7OzMuNjxBRklMTU9RU1daW1tbXV5fXl9fXlxcXFxcWE1CNzU2ODUvKSglJiUkJiksNEVOUFBNRktKVkYqTDAvPS01T1RRHRw7PEYyLCSnpMDGuK2psqyspaKbsrirqqGlmqekqauqpp+mppiqo5+uq52loKyanqmlnKe1nqKXk6mqtbGsm6WcoJSPpayRmpyno6Gqp66ipaeqsLXDsbOqrKiUipecpZqho66ll6GVmZympq2csZ6uqaefrKO2rKCxuK6dma2msLGwopKWpqGYno2CnU54moF/n3qEo32DpIWHpp+dn5SEuHt8ebmCf8zGwrZ4m6GRi55+mpaXinafl4qll6Spf7CFnYaghKx9mpVjpm2kcI+FkIF8loJyrGCjcnGAmmC8fVJVdI6So5d7fpSTjHZ7c4eAcV1tbnhyaoJvW2RgaW9jZF1LTFFUQUlIRkk6OUs/QjEwODg2Njg3Ny0qNT09P0JER0lMTlBUVllZWltcX19eXV9fXFpaWllVU09IQDg4Mi4sKi4rKicnP1FUVldXV1lYWFdVT1VGPEUzOlBbVBwbNj9ILC0gi4eYqaukq7iqrqCboKyzsqWeoJWlra2uqqecpqebo6ihs66iqaayoJippJSjtaKilZeiqbS4o5uhnKKSj6GxmZ6cp6ahorCunaapo7azxbGtqaypkYeQnKecoqScpZeemZqapqWrnLGir6WmmK+ku62htrWsnZyzsLavsKSWnK6eopyFj9G1w7d5h46FkZOQgKZ5lKF3jKCShKWCinGqhoW1bnJpmqSclYqffZiZhoePc6+CppujjqaLk52LlZCbbnGyXaV0k3qcbJh/e5l8balhonFxf59ic7K4aHePlKaYfY2OlY56fXmQg25qeWl6c2+BdV5lZW9uZmhgSltYWDxIR0BVNEBGPjwqKTYzLjAxMykmNDo7PD0+QENFSUtOUFJUVldXWV1fX15eYF9dW1pbWFVSUlFGOjIyMy8vKysoQFFSVFVUU1RWV1dYWFdVVVVVUU9RW1UlITJBSCQpJZJzjIqtvr68ubSelqekrbShoZmUoqemrqqrmKajn6WhoLano6insKOUq6OOpK2jnZCamqqzs6ScpJyokZSWrp+fnqeknaidtpujq6S2rMSwqauooYyEjpyioKailZmZnJmcmaemqJmtqK+jppuspr2slLyvrJ6hrrG3qbCkmaevoaaWeaiQfXywd4qApKWInG2ycKGHrXyhj4OolZiArImFroWglaqgopeGn4GalYB7kn6rgJ2al4uqd52gkoqUkoF6r16kgX2mp2Sdf3yXcmqvXaRrcIaZXWBbjKBtlZGmmYKVj5qOfHyEmYBrboBjf3RugHpgaGZxb2loZ0NZYVs9S1QzVThCQkM4JCQzKycnMywgLzY2NzQzNTlAQ0ZJS01OUVJTU1ZaXV9hYGFhYV1dW1pXU1BPTkk3MDQyLiosQVRWVlZUVFVUVVVUVFVUU1RWV1dYVlVVUUhGSUojKCi9kpqDqMXCtsCznpqsoK23paOOm6SioLCvqp+loJ6tmZ65oaOroK+pmq6hkKuopJaJmpCtr6ymnqWbrJeYj6yhoZ2loZqlna+Zoqmnt6rBr6Spo56LgI2bmp+mnpKUmZqUm5qmpaabqqytpKWfqai+pJbBqqmhoKqwt6mrpJ2yraaol3WvfpCLnIWHfrqtipllsI1lla19oY+Dp5WagayKhLCGp5qkoaKRhaFdbGuBs2B/rXt7g4GxbWdumZmNibFbfrVcpIRryKJkn4B7u1d2tVmyfFKugHqsV4ChbZePqJuMmJKamXx6kaB/ZHV/Y4Z4dYF9YmpncW5nZmVQVWRbQVZgPkkoPjk9NCEiLCUfMi4gKjEvMDQ1Nzk5PEFDRkhKTE5PUVJUV1peYGBgYWJeX1xbWFVQTkpGQzU1My4vQFVZWFdYV1hYV1dXV1ZXV1ZXWFdXWFlaWltcWFdXR0I70p+ysba9urPBsqKcrKaktaigipqgnZyzs6mfpKGetpmhtKiqrJ6vrZ6rm5Wvp6GOiJuOr6uopqGlma6SmI+omaGdpZ+apKOmmqGjqrOqva+kp56cjn2Lm5WgoJmPkZqbkpqYqaCjmqmuqKWmoqSou56fxaWjp5+psrOqrKSduauqq5SAqZKjr46bgIekl5mQgoC4w7qDjpyThKeXnIKsioKviaecm6arkX/WvcKqYqS/vX1+o4KD17u4tYaWlISevb6EbaOCb6uEbJyAerKwx4Npq7C8rHd2ob68c4CWjqadkZySmqB7g5OefGN+e2WPZ3qDfGFsZmtrY1FhW1NqXEBVYkNOKT06NC8fHyQfJTIgHSQoMDQ5NjY3Nzs+QUNGR0lLTU5OUVRXXWFcX19hXmBbXFlUUU1IQz89QT81PVNZWVhZWVpZWlpZWFdXWFlaWllZWFlbW11dXFpWWFRXWruVs7Owv7ixvLKinK2lpbKmnYuYpcCquLKoosCnqLOdn7Kduqifra+lppWUsKuXjIObka6loqygo5yqn5eKo5Kmnqebm6GppJmgoqyuqrqtqKOblpJ8iJmRpZuSj5GYmY+Yk6mboZmqqaGqp6CjqrqeqMOin6yhqbGyp62nnrilrKyZc3aqpLiGZImgcGiukYuQbm53pJCZn4F1rpmUcI+LcZaopJyYr6RzbW1tZot4b26CmXCBempxaWeKmJaZcmlqhYhncYZkXYhiam9ZXGZ9dqZfYXCNkG5lZX+Mk4+hmZmak5mhfYmRmHdmiHhpj2x6gHplbWRnbWNLZFhKa1o6UWZFUidLOisjHCAbIywpGBsYLTIuNTo0NTc6PD9BQkRFSEtMTU9RU1ZcV1pcYGBhXV1bVFBMSEQ9OkFCN01YWlpZWVpZWFhZWFdXV1dZXV5eXVxcXF1eXV5dW1tVV16playzqLm4sbOqqaGtnqOyqpiSv7PFyr63qp/Bra6koqisn7qjpK6sraWNlq6pj4uFlpasnaaqoJ2ko6CRi6STp5mpmpekq6KXnqemqLC7q6yam5KSfISXjaWXjZGQmJWOmJWplqCZqaObsaadoqu5n6/ApqOxpKuur6irqaW1oqy2lYqhqaa3nYmWo5mIqpuRlZ2SqbOZmqKqoLKWoqGdn6KdoaWilaynjZOTjYeTnJyVkZmTmZGPlYWBpZuZlo+MlJSMkIeEfmeJfnSCdXOHinCnbHqTj5ORgIGNjpCPnZWil5qZpYSJl5B0apF3cox4eH16am1lZHBlVWBZQGpcSGRiUFkrRj0rJyE3NTAuHxwhJTIoKjY5OTQ2OTs+P0FCREVKS0tNUFBRWFVXWV5gYWNdXlRRS0VDPjk9QEFTWFtcWVdYWFhYWFlYWFpaW1xeX19gXl5eX19gYGBfWVlgppapqaS0ta6uorCjrZ+ftbGQjazIvsa7uqujpp+dp5+xqaO2p52ptaenkZitoouHiY+bp5WspJ+ZqJ+ekpSjl6iaqJqVp6KkkZyomaK2uqiqmJqQjXyBlYuglIqVkZaRkJSXppGgm6mgnLajnaart6euwK2itaSura6qp6extp+supiRpaOntqKSnqegjqqgjpOfo6uwmqCjsKiwl6OgnKOqn56enZesnpOaopyUkJarmo6ZmZeQl6CSiKGel5WHk42RjpWLgX5li4V1hnR3h4JznGqFj5KTj4l9i5WSkpiUo5SfmaSFiZuKfXOXc3uMgHN8f2pvZV9xamBbYFpuZFFhZVFaOkdHRT4yPT45LyomKykmHSYzMTY2Njg6PT0/QUFDSUpHSktMTVNTVFVaYGBpYWVWUEtBQ0I6OUVNVlteXltaXFtbW1xdXV5fXV5fYGFiYmFhYWBiYmJkYlxbY5eVo6air7GrrqOppqyfp7WqkI+dpLW9sK2to6SbfJ+ksqSlsamXm7imo5SZqpyOhoqJnKKPrp6ilaifoJKWmZuui6mWj6maqo2aqZCfubekpZmcjYh5gZOMmpOKlJGUkI6Sl6OOn5+onp+4o3+Dr7Wirq50oruhsJ52eJ6nr7iTdKujnol/q39kXGJ2oI6ln4SYfW2Ss52ip62qo2Wen5JzeZqYcYGZqZhtf6KpimWcpp2Sl5iWjJOckYaem5GWhJOIj5CSiYV3ao6GdoVweoV/f2Boh4mTkYpadZSQZ2iPj3N8qJycZnubioV5mWqFjIRveoBrcWVgd3Bsa2lcZmViYnFUWz5OTk5TRz5AVUQ6MS8eHyY0OjMwNjY3ODw7PkBBQUZIQkdGSUtNU1RVWVxgaGZnV1FKPERHPDhVUltgYWJgXl9fYGFhX1xdX19gYWFiY2RhYmFhZWRjaGReXWablaWioK6vq6uppaitoqetpJKWq7axs6ebq6itmHSNn7GgqKunlJe5oKCPnKSekX+JiJuejKyZopWnoZ2Ol5KdhXatj4mnm6mSmKWKnLu0p6CZmIuJdXeTjZaTiZORkJSNkJShj5yhp5mcsZWAjJu0nLKMko25pZ99p6J5oKy1f42NpZ6Di4aQsKqvjYuXpJt6gYushZyeoaaop4eVhZh3pZt6iJyBl6eDgnucs3qKhqGYmpWYloKRl5eEm5ljeoiQhY+QkouDbXCOh3l/cH+AhH2Fc4WDlJF3lmiSdKCadH2ZhKOgiZh/lY2GhZprj46HbHl8cnFoZXlwamxrXGVsa2Z1XV5JVExSQEU2LltVVTcpITA5Pj43NDM1Njg7Oj0+PkBEST9JRUpMR1NYW1lbYmFoZllRSDlFTDs+YVZeYmRmZGBhYWBiYl9dYGFhYmJiY2ZnY2JhYGVkY2djYWFonJeinqWsrKunrKCnsKamqaWZlK/Iv7Gil6iqt5+RhZ6tnKeioI6Qvp6ajJ+aoJB9ho+Yl4esnKGWn6GRjZOJhYCSp42Ho56klZmfh5+6sqedm5KOhXF2kImVkIqUj4+bjI+SoJKYoaSWnquHn7SJtJmtisqGqKyItoWMr4Guq4KojKaYjZ19qI9ze3ecj6eXaJWkebSMoJ2lp5KYwoF/q4iYoXKegJqlfpeFlbOBoX2hk6GQmJeBj5Sci5mSjH2Fk4eNlpKJg21zj4V+eXGGgIN7g3SEgJWAj8Vmf6mHj6NrnoWknYSagY6QiYyacY+Uhml5dnx4aGl2cmhobF5kcG1nbllnR11STTNFNTdOYmQ3JjM8RUdEOjY0NjU4Ozg+PT0/Qk0/TkpKTENQWl1cV2FeaWxcUUU9S01ASWNYXWNmaGdiYmJiZGNgX2JhYmNjY2VpaWNiYmJlY2FmY2JiaZSWoZ6vpqeopaufpLewqaummpSgo6SspZimrLmksIGiqZ2mnp2JlLyZk42hkZ6PeoSXlpGHq5mbnJqihI+Md5qcj5+QiJ+lnJeamYejua2kmpyMjH5ibY+Kk5CNkIyNmIyQkqCPlaGhmaCnfqGnh62dn5atj5ybnJCEf6CMqKyFo42pmYyaf6J1gZmUa4Ktdk2reIeNnJGap6aAqat9g6F7eqdqnn+SbGeYhpi3iZ5+bmBkWYOXgI18ZGiLcpl9eZZsXX2XbV9ScINcX2t4gl9YZIB8g3+WcKeqa4OjbnKlcJ+FoGpnoG1ccI5+Z1pghIFjWFFwd2ZudXNranBea3FubGpZaU9dWUY5QTVIRV9sNSxJRFJNTj04NDg1OTs2QDs7PkJQPlFSTE1CSlxdX1ddXmJ1YE1EOk1PTlRhXFxmZmlpYmJkYmRkYmFiYGJkY2FjaWtkYmRkZ2RiZ2VhY2iXlZyfuJ+po6askaG1u6quopmYoaKlra+hnrC2pKmToqGgp5yajpm0mZCLn4yVi3WClJKMiqaVlZien36ThYWspIebkIuaq5mbm5KIprGnoZWaiImAaW6Ih4uOjomLjZKMkJOjjZSfn5yhpH+TgY+ioJOfdpyUjqeBn6V+haeqgqV4iXyEmn6icHOUiJZ8n415bYabjJmPmqiZjoede4Kic3amZp5+d6RfmHp9lHSibpi3tLp0k4iDgLWoZIHGuHtwlbaMcoCao2NzrKtgfGmds35tfIaBjYKLmHF/o2xyo3SfhYGkYZ2ZtJdzfZifs3V0XJ6yg2tjcHV3cmlwWWxtc3NnXWpeYkxFPUQ2UkJaczM9U0dgSlI9PDM5NTo6NkQ7O0BKUD9VTU9RQEVfX1taWGBgfGRIQzhNV1VXYmFaZWZra2JiZWFkZGBhYmBkZF9gY2tuY2NkZGhkYmdmY2hok5aUoreYqpuTn42kt7SsraCaop2ko6avnZyzr62UmaKaoaWZmpWfq5uLiJJ4i4VxgJaNiZChj5OUnZh9kYqNqKGHl46Jk6SVnJuNjKmopZ6Pl4eEfmp7h359kI2Ci5CQiZCUoYOXnqCdn56LiXecmKGMn3Ghioaph5qkjZSlqHytjH56oJl6o5N4gXSWiI2cfZafhpuOmJqlhaJkoXyIlpCbjW2eaJuOb5qZe4CLp31yaXSrg5+DdKpolZpdm4V2hZ5nqmuAuGZcqHCBnGCVjF6ndnWHiH6dZ5p1hpOSl46An2+akW6nml6pf3m7a36qXI6EXbRoXW5yenhsalxxa3l6ZGFnWGJCUkZPN1dEUm81S1tbX05aREEyNTE8OzdIPzpDSFU+WVJZXT5EYl5WYFFhY31qRUI5TlxeWWRmWGZnbm1iYmVfYWFfX2BgZWNeYmRvcWBkZWVrZWNpaGdraZWbiKmzmqaIY5Sbq7qxr6yeppycqaCfr5yesqmun5ikm6GgmZeWoKOZhomNaYiAcnuXiIuWloSRlZiQeouElaScipSPho2fk56diZGpo6CajJKKgIBpgYZ4f5aMeomOjoiQl5t/lKKen6CTmHJon4mejotwkoyAqYaYnaCknqV7sK2joriXd6Ozo6SAiZR5nXurmX6ijpyaloiXcaF8hY2vtX1rmpGheX6ZtaOkq6iEmXybfZ6bf3SqWl1ve5aLeJ5iTH97eoVjeZdCTJ9Yomlxe45sgIiDmXWbeIaJsbN/gJuTp3eDnm50fpVwmnRrpF6VdkhlZGF0cn5/b2ZhbGl3fGVlYlFfV11VV0BaRlFoRVRXXWJYXklEPUI4QEE6SUY4TEVYQVdSW1dERmJcWmBLYG19ckVCPFVfYlplaVZnaG1vYmZnXmFhXF1eYGhiX2VjdmxdZWdma2RlbGlpa2mTnICvrJiDU16gprO5sbKomqKMnKycnKqVoq2lo6mQn56em5qWmKGdloiHiXeGgW95lYWRm4t8kZOXiHKBiZGhm3ORkIGJmpahm4WPqpyblYuLinyDbISFcYGhi3iGjYiHk5mWfJOkoJ6iiK2GfbWEjZ2ce6WVeamAlJqOiJ6ae6dod21+mXShc3J8noaZcJODrn2jg6WdmICjb16oZ3WiY2+lYZzTkH17mXhzdGKihpB+o3SkkHZrj7OMYIKYiXOqsqi8f3eDbX6/pqm0XZxte3CWbX9yonFdpGdzpmBopm2b1Jp+hptwe3uYbJx8eJhzbqmkZ2FlenKAhWxoZmRvdnhoYWNTXGZRUmJIWEpVYVhUXGZrXGVRRkNLTUpLQktFOE9AUU5YU1lPU1FgZmZqUmR3eXdJRkVjXmZaaGpUaWhqb2NqZ2BjX11dXV9oYmFpZXxkXmRnZGtkamxmaGxol5p/r6tUW0p+qa+xs6+yo5uZhZmqoKKlj6apoZqri5uZmZSZk5OhmI6IhXtwfYRofY+DlZuBd5GOj4pvf4aPk5Jsl5R8ipOUpZeDj6ublJKLhol5g3aIgG2Bn4Z3gJOGiJmjmHuUoqOZn4mzoaK2i3msp6SupW+of5mNhYCZj3qkf6GZhphynoSkrq+Kl4yAjaSNlYKtoJN2tba1yaFzlIuBn2Cel6ltepWHoZx1ooh3oH6Sl4uBcE1mo5JwmodzpXt5dGGDgWt9oGtxZF+ccX1zlmh6abO1s8amcph9ep1rnJurdoWbbnd5mGqafHaYc1FFfbNfandseohna2hjdXZxb1dfVFlpUFNpSldNWVRWXmlsb1ZoV01LQUpNS0hKT0JRS1BlY2ptZXRyc395fG51iXt7VFFPbF5pXGtpUmpoaWxnbGZjZV9dXV1eaWJkaWt7X11kaGNqZm9tZWlsZaCbh66lg2Q/k6Gyqq6utKKikICYqqKjpo2mqJ+ep4SbmJeOl5CQnJOOiIN6anmHZYONf5igeXWOiYyBaYSFkYOMhZ2Neo2Ml6aUhJiqmIyRi4GJeoB9i3hwkKGGeYKVh4mWoJZ/lKWnm5WVg2ZueJxsomR7cKV3m5dwZaaAlIl6pHmfloOXc553gYqVl4+5bpGKomJ9mKCUiG1yaaprdaBtb6Zgm2mLkGmWh5uWdaKBfppgjIaNdXCIYmigZZ5+aZt1b2NmiIFtcaJZXlpioWxdiItten1zcWSlbXiiZGenaJlzjJlwonBViZBwoGBmqFWLXlSYbm50bHODbnFpa3l0a3BSWVdXZlpUbUpaUF1JWGlpc2pZbFdRUkZWXExYU2JVaWtfeHR7fXB8fHKDe4Bzdo2AhHZeUnJiZ2NwZ1BqaGhsbG5oZGdfXV5dYGpiaml2dF1cY2hjampzbGZrbWOco5eleWRzbIqmraOpsLGmn4uAmKyen6eNo6KcpKOBlpmUjpqQjJiQjop7h3GAiGiLi3yYm3N0iX6Qe2WDhpSKipaagnyJiJiokoGjrZGGkIuCiX6AgI5yaY+mhH2Hk42JmKCPiJOppZyIpniVm36liJaKsZedj4Kulp6kdZOFeKlzpY+Emm6kooyShI2Du259pa+DhoWGkpWcn3ylenKolaCWZ55+b6xkloqWk3eobaqigYl2iYN3q5GmiGuRsGt2s4ypa4qFbW2fnpGUX32ri6p2fX6KpJ12n3yDpJWdoGqbiHisaJ+ujbZ1eL6NpJNag6eOq2F1c3VyfHVxY2t/b2htVFdbVmFiXWxNXVJeSl5tb3dgW3FZW2BbZ3Rlbm9yYnJ0YHh6fnlyeYNzhH6Be3uMgYOAdmJ4ZGNucmRSa2dob2xyamZpYV9eXGFrYm1se29cXGJpYmxqd21nbG5ilaSpm4B/naOWqamdqKatpJmKgpism5+mipymnquehY2bkIeckYaSjYyNdId7iIRwjYV+mJN0dIZykYNuf4uRh4aUj318g4eZp4+Ap6ePgY6JhZR2goeSbmyLqYCDjJSOiZ2fiY2TqaKfjn90k5eIfoF4k66ifoGacI+Fdo6Jgn17cqeMcX59epiWm4SQeXt/foeUlZOKdpCYnqCDe36Ja4yFW3l5cnpxaW5+kopygHWBj5STcYeEg2WMf1+BgIt3dXOUdW95bm2HbIOGXnVnd45lf4CFjaiafXR7lWqJiHCBdn2Hd25uaI10enyYeIVcbFh5j2lveHNycHh4cF1sh29qaFdbYFddZ2tkV2NVX1JgcHl5bWt3Zmtra3d9cnJ1c2FvdmJ0e4J4dXqCdYCAgIF5i4WDfXtuf2xkeW5eVm5naHVreGppaWVcYFpjaWVscXVuWltibGRsbHluaGtvYY6TtqemiqChmqajmKWcq6KhhISYrZKeooqbqJuqmIOCnIx/l5SHjoqJjXKDfI99fo+Ee5iPdHOEcZWFe3yRi4aGkIV5foCJm6WPfKihi4WPkIWVgoaOmHZyhKmGjpKdkImfnoiMm6aen6qDiI2Vmn5+iJasp46RpY93bpuOgXiQbn2ohXF+lXFrcH2CoI2Ak46LaGxcgouLm5qejnOVi4hxdGuCd3SBWXJuh5GCfn+Mal1qZXuGhIqAYGl5e5t7gouCdYGFgWd3ioZqYG9xgHVecYmAiY6lk4Rli42DbneLhHGGj3pxaGlmfYV7lltda2hudlx8enh2b3Rzg2hdbotsbGNaWl9aWW1yXGBiWl9eZnR/fHZwdWRra2t8fXN8eXVkbnVobXx+dnp9e3l6gIF+b4WJhHt9dH55c39pVFxxaWx2cHVna2dkXWFYamhra3FybldbZW5sZ3N5b2hqbGCLiqivoI+ioJmenZeemKijon6Dma6OoJWInaORppWAfJmGfZKZiomHh4tzfoGMdoWLgoSXinJvgHKYhoR+kYODhoqBe4GFjZyhkYOoooh4jpeIlIqLnJeEg3msgpGYmpWKnp2IiKGpnqGho4qHk5ucopmVqaCmpJ6RmoWTi3p2jY2Dp35/kpCTlJ2yppuVn5CNsZKXg6WMjJWan4mRm4KIkYprfI53eGWDh5GLfImehIeMkImJgYWFkHd8enSaoImGip2JhJN+fYqAf3Ruc4SBfXaFhomOpI+ChIyGgoyQjH2Hi4qRhHpuhIZ+eplrc2lhdItxfnt4d3B4dYJdXm+HaW9gX1pdXVNpclZlXV1ibWh2fH10b3Bla2ppgH1ueYByanBxbWeBe3OCgXd/fn+Fem2CjIZ8enh7fXqEeU5kdmpzbnB6ZWtlY2JgW3RlcGZycW1WXmx0bWh5enFnaWtljIecuJ6WoaCXlJiZlJikoJ58f5qsj5+OhqGdjJ6WfnmVhHyOmoqHhISHbnmBgXOBiH6JlIRta356l4eEg49+gIaEhn2IhY+cn5SIrKCEcoqQhpKRi52RfY16qYSOk5iXj5yWh4abpJ6hmZyFgpKamZiPmKafpJybj5V+jod0eoaNg6V7fY+QkYaYq6GelJ2QjqmNkICdjIiTmZ6Cj5d+ho6DcHiGcnVgf4SQhnWNmYGDj4OHhX+GhZVueXZ0kqKKjIWahIOMc3+JfHxxcXqGgnp2iI2DkaSOhIKOgIOKiYp3homLjX5ybYCCfW9pbG5oXnqAaH59d3Z3dnt4XWBxfm51YWRbXV9SZ25VZlxeYmtpd3t/cmxtZGtqaIF/bHSCbGx1cHpwhnluh4F2goB9hXZxgo2Ifnt8fH97gopgaHtqdWhpgmRqY2BpXGR1aG9idW1sVWNxeWVwentzZWptbYuInrWZoKKfkpGVmIqan5+fe3ifp5Gci4emlYyYmXp7jYZ9iZKDjYOCg258gHlzgIV+i5J9a2h9gpeJgYiNfH2GhId9j4ORnZ2TiqmdgXCLi4yShp+hioWMfKeRiJCTmJSWk3iMop6fnZWYfoCQmpiSi5mioKOYlZCZfIuCd3+Cjoagf36MjY98mKSiopOakZCmjI6BmpCJkpabfpOSfoeOgXV0gnF3YX6BjoZyi5d9iYxyjICDhYaPaXhyeIyYkY9/ln6HiXKBhnt7b3d6iYN5eI6LgpSjkoqEj3qGhoeEdoKEiYl9aHN+gXp8cm1saF9+c2l9dnZ0fXSAa19gdHdxeGVkWV9fUmtpVmZaYGFpand6gnJnbGRsaGaAgWtufmhvcWx/eYd7bIyBc4CBfoJ0doKNhn98e3+BfX+PaXKDbnRpYYdobGJfcVZ0b2xuYHhobVdqdHZjdXp7cmJqb3qJjJ6wkaSknI6Pl4+GnKCbnnx3paGOmICNo4qJmpZ5fIaIf4OKf4mDgX9ygHt0doKFfouReGdjfYaXioKKi3h9gI6EeZeDlpmYjpehm39wi4KRk4Wlm4eMiYOmlYWTjJeYkpJ3kZyfoJeTlnl+jpeXjZaanKOcl5GTmXeNg4F2g5WNnX6CiY2Mc5ejn6KUmY+PoYyKgpaXg5KVmX6YjXyIjYF2cX5ue2SBfYuFcYeTgJGCbIiDgoCJhWZ2b3uFkZiLfJJ4i4d7f4Z7enB9d4iEeIKOh4qXn5SBgot2iIODgnd8g4qHeGF6en91f3hobWZif2preHR0d35yfWNkYXNudXNuYVphXlttZVNkWWFhaWx2eodyY2tjbWZofYJsaXVobnBqgH2Cem6QhnKAg4N/dHyDjIF/fnqCg358kG12iXN1bWWKbGpiYnVWhGlwbmB4Z2xianZwZnl8enFgcmyGhY+brJamp56NjJeHhp+Tl5l+eKqdi5l6mJ2MjJmQeXyBjH59hHyBg4F4dHp6dH2AhICJi4BkX32LlId/hIZ0fX6LgH6ZhpeVmI6lopiAc4d7k5GJpo+MjoqSoJGEkpCVl5GLgY+XnpqRj5Byf42Rk4icnJ6ll5aLk5Vxi4uJa4SXj5l6iIiPiW+XnpuklJWLjJ6LhYGRnH+SkpWGmYh7ioqBenF6bHVsfH+Mfm6Gk4OVd3CDhH5/i4Blcmp7f5aXg36NdI+HgniGfHR2fnyEf3uBioKLkqGPeIOBdImHfYB0dYKJhXFifHZ7cn5wYnBkZXxjb3B3c3l4dHVid2BwbHZucF1cYF5ea15RXlljYWludHyKbGBqZWtjaHeHbmdtaWttaYJ9e3hvkIh0gYSEfXSBhol7g316gYR9fY5yeYt4eG1sh2poX2lyY4dncW9ld2dubGF6aWp9e3hwYXhti4CYmKmfo6idiYqShoqdi5WZfnivmY2Xfp+UkZeUiHd+fIp9fIB3eICAcHV0fHCGfYGBin98YVx+j5GGgIOCcnqAiHuQk4qTk52Upp2Vgn2BfY2KkaOJjoqNmJqNhpKZlJWOiYiMkZuSjoyMbYSQj5GInpmioJaUiJWPbIaXgmWEmI6TeomEkIpwlpuVo5OSiYuZjIF/kJ59ko6SjJmOe4qFh3RzdmxxbnZ9i3Rvh5GPk3F1gXyCg4h8ZnFteXyZk3yDiHSQiYBzh3htfnx/hHuDioaBi5Smi3qGe36KhHd+cXCBhoRmaXp1dnF8Y19xYWt0X3Fre3p6bXNxZnpeb21zbXNYW19gYmxbUFhZZWNocnKAiGddamlnYmdxjW9kamhlaWmBend2cI6FdIGCg3x1goiFeIV8eISFen+Jd36Le3tzeINqa19waHSAa3JvbXJnb2xlfGNugHp2cWx3d4p+opehp6Cmm4aLi4GPnIeTnXaCq5WTjoehjZaUkIB0fHeFeHl/c3N7hmxzcHtui3aAgYdvcFtZfpGNh4B/f3Z1gYGBoYeSi5SemaKVmHmKf4GMiJydio+GkpiWhYmVmpCXjIuMjYubiY2Pgm2Ji5CQiZyWoZuXlISWhmiCoYFlhJuJkH6Lg4uBd5OZk5+TkYmIlIx+fY6Xe5GMj46aknyKgIJvdnBsbW9xfIZqdISPmYtxd4B1gomCeWdzbnWAmY57h4R5k5B5dYdybod6hIp4iYSAho2aoYZ7g3WBin94eG5rgYSDX3R1dHJyeVtfcWFwa19wa358cW5ua253YXBwa3JtWVliYWJvWFFUW2ZnY3VwhYNjXWttZGJma5JuYGdnX2hrgXVyc3GLgHV/g4F5doCLgHiFf3iIhneDhXyGi397d4p/anFjfGOGfG5xbXRqaG9sdnhgcX95fHR1dICDfqSVmayep5aEjYR/l5SDkKB2jKCUk4aLm42Wjot6cnh1gnByhXRyd4lscG52bYh2g36AbW1VUYGqlIaDd353coN6g6KDlIKWlJmdk5t5kXuDjJKjmZOOiZSZkoSHl5qMlIuJjo6GnIOPiXtyi4WKjoecmp+alZN+knxmg5qFZoWfh5GEkYKJcYOQl5Ccj5CNi4+Md3qRkHqOi4ySlox8iHyAa3Zrb2tsbXt/YXp+kJeCd3qCeIOMfHpodGxzhpWLfYeFe5KPcXmDb3WLeYiLeId8f4mOnZuDe3p2gop8d3BqbIKEfGF5cW9tc3RWX3BicmJgbW96cmlwZmd1dWlybGJ3ZV1XZmFgc1RRT11nZV55cIl9YFxpcmJiZmaRal9oZVtncH5wbHF0in12fYWAdXV+jHl7hYF4iINzhoV/jIyEfHqUeGZxa4NgiH1vb2t6YGpudH91X3R9eYd4dHOFfXigj5mwnKWOgot/g5qIgI2fgIyalI+FiJiOj4+Ed3R3dIBxcIV0cHKEcGxqd26Dbn19bXRyUk2C38iS1pJ7cHWEdoWhhJR4l5KZnZGafJRzhY+eoZOTkIqTnJSGf5eWiI2Nh5GMh5t+jYB3eox+iYyJnJucmpSSeIx0ZYaQhWuHooSRiJeDhmOMkZmPlouXjI2KinF6k4h7joiKk5GJeYV8f218ZXJva2x7elyBepCQgXt9gICGjnp6aXNqc4qPiYGFhHyUimx+fm1/in2KhXuDeH+Nk5mYinx1d4OPeHNtZ3CAhW5rdXBpa3VuVF9wZXBaYG1zeWhsa2NneXNwcWRgeGFgVmxfX3dRTkxiZ2NdenGKdl1cZXZhYmZljmRhZ2JZaXNzbmtyd4x9dHqGgnV2fYtzf4Z/e4l+comIgpCKiHx+mHZlc258ZYh+b3BsgFlsbnl5c2B2enuNdnJ3ind5nouarpqfkIKFd4iVfn2LnoiGoJKPhYyYhJOPh4F1eHB5cW+EcG1vf3NlZXlxfW15fWpna2OkmsHcrvCgcmx2hXeGpIaTb5iSlqGVnIKScYaKopeJjZWKkJ2Wg4GWkIWJj4CQiYiVfYZ6dH+Jd4eEjZyamJiNjnWJdWyEh4l8iaKEkYmchIVei5OYi5CJjouKhIhse5WBfYiFiZGPhnaFfX5rfWR4dmpueXNYiXuSiIZ6f4GBhox/emZyaX+JjYmCgX+KlYRrgXVth4+BjoJ9gXh9jpSRl490cneHjHVzcWd1eoRjdW5xY2t3aFJhcmhsVmBvdXphcmRgaX9xc29bZHJhYlduW115Tk1NZWdiXndzim5cXWR5XmBlZYVgY2NfWWpza25rc3iMfnR3hIF4d3uJcYOEfX6JenSLiYiVhox/fpdzaHVxeWyMe250cYFXcXp2eXJkd3mGjGl2gIlyf5yGmKebo5KEfXGMlHh5jJ6FhqGNj3yVjYCaiIR7c3hwc2pwgmxqbX11X2F4d3txdXtnYGR869q1ycPch3JsdIJ3i5yKj2uakZCelpSBiXGEiJ+NhIuVioyYlHyNk4iDiJB7j4uFjoB/dXiDhHKIgZOblpSXhYt1hn1ug4CHhpehgpOMnoOJYYOUj4eKhoqNh4GHaXyTf32DhImOjYJxhn5/cXdodnNqdXdsWo18koOGfoGEgYWKgnZhcmuHgY6JgX5+kZB9boFrd4SOhJCBeoB7fY+RjpSIbXB5jIV0a3BrcnmCYXVqcF1sd2FSZXNpZlNgcXd1YXBgXWiEcnRrWGhpY2lZbldcdk1LTWZnXmJzdIZrXFxleV5eZGd7YWRfXVlrb2VuanR4in5zdIF+e3Z6iHOFg3x/iHZ2ioaPmIGMgnuTdWx3dnl4k3RueHt9WHmGcX9vZ3h3koJkdoaFcImWhZmhmqKKh3Rvkoxxd4+dfouaiYp9oH+EmoCBeHJ0bm9kcn9pZm14eFxgeXt7cXGAamFnYX/Vto+RpnducXh9cZSSjohrm5CKnZOMh3toh4qZhoGSkYaHmI58jY2BgYmNe4+MfYiEenN6g3pwh4CVmY6Tk4CHdIKEdIF+iJGbnYaVj59+iGKAk4eFiIWLjX9/gmd8kIB+f4KMj5B+bYN8g3VsbXd1dHd2bGOOgo+Ahn99hoCFiX9wX3FvhHuOi4F8fpCIenCDZXmBiIWKgHqEfH2RjY+Rgm1ueYt+dW1ua2t7f2RpbGtabndaU2pzaWJRY3N4bWNmXlprhG50YlxoX2VtYG9VXHBPSU9nZlxob3KAbVpcY3NgXGNsd2VlXV1abG1jbWp0d4aAcnB/fH10eIZ4hYJ9gIh1eImBk5V8iIZ2iIBveHl7g5NvbnuBd16Df3SBbWl6dJRzZ3OIfHGRkIOan5ughoh2dpR/bXeUmH+IkYSKjpp9jJp3fXZxb2xqYXV9Z2JqdXpaYHh8emxwf2VjZ2dXnY9fcnOWvcWFd3KVi5GAdJmNh56UjYlzaoiOlYB7lIyBhJuMfIqGfXyIjH6Th3SHhXZ2fYFxdYaBnpSGlI6CgnF+hnOCeoiWm5aGk42dgIhmfpODgYaEiolygn5nfYt7eX9/h4uPfWmAfYR2ZnB5eHN4dGxrj4aLgouAeYOBhISAa15wdnp9i4eEe4COf35ygGh3gYWJhIF3gnp+lYqOi3xta3qJfHZ0b2hofndlXXJkWXF0VFRvc2liTmh1eWdhXl1ZcIFwdFplY15rbmFxUFpsU0RUaGJabG9ufHBaW15tY1pjb3dkZ1xdYGtqY2xqc3eCg3Fvfnt/dHWDeoOCfIKGdn6JgZaReIOKdIGHcnl5fo2Qb297gXFqgnl6fm5tfHaVa2p4hHRrk4yFnpigmYWIb36Mdmp5mY+AgouClpiKeY+Wb3lzcWxqZGB0e2lgZnJ7W2FyfXpmcHphZWSOsbJ3S2JapdvSmHN8ko2ReX+XjIWako2Hb2yFkpF6eZOGgISZinyHgHl4iYqDlX9uiYZxc317anmGg6WQhJKMgn5ufYF0gXeEmZeSipOPlIWIcHuThH6Eg4mDboF4aICFeHJ/f4OKh3xlfH6EdmNxc4BpenFvdpqNhoSLfXd5gYV7g2tcb3xyf4eDiHyEh3qIcYBtb4KFjIKCcYN3fpaKjIN3bWx9hH52emVoan5yYVp4W1pzbk9YcnRnYEtud3ViXlxbWXV+dG9YZ15ma3Ffb09YaVM/WmdfW3FrZ3pyXFtZbGVZZHF5X2hdXmVsaGZraXF3f4dvbH9+gXVwgnqAgX+DgHaBhYiXinGCjXF7hXx6eYSUjHVren9scH51f31vcnx7k3BvgX94ZpGKgqGZnZKDhmeHhHBnepeKf4CFgpqKgXyNjWl4cmxsZl9hb3puX2NweVxkbIN6YHB2X2Rl1eu+izM6PoyPgHN6hoqQjneFmY5/lI6Nf25thYyLdXyPf4WClYl8g3hudoaEgpV2bYeEa3V7dWV5g4SnjIOOi4J8bX5ydIJ4g5qPio+Rko2Mh397koh5gIWOg2yAcmmAf3htfHyBioN4YnmEgnJkcWl/bnZydYKdjIGAhn9zdn6Bc4FwW2t8c3iIgYp7hn98iHh5cGqGgo6CiHCAd32TiYp9c21qdoCAdXVcaWl5cVlXflRbcmZNW3NyZlxKcnlwXVxbWl12gHZqWmJbaGZvY2pOWGdSPl9mXV52ZmB1cVtZVW9kWmVxeVtoXmBmbWhqa2hweH6ObWqBhH95boF7fYF/gnp1gYGMk4VwgItueH2Ae3uIk4mAaXt+anR8coZ7c3Z+f4x6eIR+fGuLjIObnpeMgoFtjX5saX+Pjnx+gIOUgn99iohrdXFnaWNbY2dzb2BibHRhaHCJemFzc15iY5ugkG5dNluwtnVrgYp+lId3iJmHdZCMindwbYWChnR5iXiJfZOIen9zZ3WIfXyWbm+FfWh2eW5leomFpIeAhoyJfW19dH1/e4qXhoCTkJiJi4WKfJCKcXx+hnxpfm1rgHt5anp3goeBcmB3gn5yZHJndoNudXyGlZKCfoOAcHd6fHV/bVdtfXVziYCFdoZ0gol6d3Jsh3+Of4NxfXt8kIeHeW1taGyCgXRuXGhmdXJSXH1PXXJdT1xzcGRWS3R5a1haWlphcoF2Yl5dYWdkaWpmT1ppTkFiZVxhd2FcdW5YWFN1Yltlb3NYal9iaGtnbWxpcHd8k2xphIp9fHB/fnuBf4J7d4CAiYyEcnuHb3J3g397iY2PhGp+e254eXaKd314gIKHgIN+fnpthIyImKONhYR7dot5a22FiZJ5fnyCkoCAfoqEcHJwY2ZeWWdfcHBgYGhxZmpviXRhc29bYGRqdnt/v52opcq5coaFdJV+eomVhHSSjodyc3CDeoJzdYZ0iHeUiXl5cWN2hXl/kmhxg3VmdnVjanyEiJ6Cf36OjXxxfXKCd36QjoJ2lY2UkIiCiHuJimx5eoB1aHtpbH95c2l6doCDfWhgd4d9a2p0aHuBanaBjZKVf3x/f3J8d3x0f2JVdXtxcoeCgXuBcIaKd3hvboKBi318d3x6c4yEgHVncGdsiIFxb11oY3RvTGZ3TV9vVlRadG5jUVB1eWJSWFhdYnKDdF1iXGllZWNrZFJccUlEZWJcZHFeXXhoVldWeF5cZm5pV2xeYWpnZW9uaHB3epNuaYiMeX1ze355goGCfXZ9g4iGg3B2g3Nud4KCfoiLlH9xgHx4enqBi3WDeH+BgYKEeoB1bn2Ji5ueiH6Ge3eHfGh1ho2Ren+AfImGhHaQgGdvbmBlXFhmWW5zYWFhcWxsaIluYHNpWV5jbYB3qdqpyIeIs3OLenGPdn2JkYF7lIuAdXR1fXZ/b3B/bYV0lIZ4dWxgeYB4h41lcYJuZ3VtW219gZCTgIB4kpF8d3pshXN+j4qDcpWKkY+IhoZ7f4ZtdXd/bWh3ZW18dm1rd3d/f3xhYniGemh1dmN+fGh1h4+Oln12gXZygHp9bYBaVXF8b3OBhX1/d2uIhnN4anN/goJ8eXt3enGJf3tyZnNkbYuDbHNaamB2Zklvb01cY1hXVnluYlBTdXdZUVZYXmFzhXBdYWNtZWNeb2NVXnNHQ2dgXmdpXVp8Y1JWXXZbW2dsYldrYGFuZmZscGhwdniPdGuOjXZ/dnh9d4GEgXt0fYOIiINvcX91cXV+hYGIjYt7d394hHx9hYd4iHx9gX2EgHt+cnV4i46fjIl7ind1g3pefoeajXmHhHSGh4V3iXtibm1cYltbYVZqdGRhXGhvcGeHcWFwZldcY2t/fMrOh7qia25vjG5yhXN+hox/e5OFenl0eXR0empsdmOEdpKCdnBnXnyAeIqHZHGAampxY1hte4aciIKBcpeTdn16bYZvf4iKhnCWjpCIhoyEe3l/cnJwfmdocmNueHFqbHJ4fXx5XWV5gHhpdXlngndodYiMj5Z+c4hqcH6AeG59XVdvfGxzfoh6gG5uiX9wdmZ2fn9+gHV6b3lyhXp4cWVxYG2MgWtyV2tfeV1JcGxOWFZfVVZ8a2JPVHZzUlJUV15jdoZqXmFra2ZjWm9iWWNxSEFpXWFnX1xWfF5PVmZxWltqaF1YaGFfcmZqaHFncXN2h3lulYp1f3t4fnmDiIB1c3+FhY6DcG97eHd1eoaFhoyGenx/dYt/fYaDhId/fn59hn98eHZ5dpGUn36NfYtudYB6ZISImIZzkopvhYWCeoN1ZG5qWV9bXV1UaHNmYVlkcnJngXJha2RXWl9pf3i+rnugt25jdYhpdX1ze4WIe36NgHd4c3duenZlam9gh3WOgXNqYl59dniKgmVwfWdra1pWb3iLo4GFfnCZknF/dnOAbH6Aj4ZxlIiNiIWJhX15dXNwaXpham1hbXZqZ2treXd6d1pmfX14ZXJ+boV0ZnaGjYaXgHGMaGx7gnRtdWJbbXpqc3qJeoBldId9bXBndH12fX5wemp5eX94dm9ka2BtiX1sbVVqYHhWTGxtUFNQaU5ZfGhiT1V2bE1RVFVfZ3eEZ15hcWlnYVdpXV1sakpFa1tjZVdZVnpaTldva1ldbGVcWmVjXnVmbGVxZ3NwdIF4cJmFdn9/eH98hod9dnOCh3+Vg25zeXt7c3OFhoiJhHmBfXaPf32FiY6EgYN6fouDe3d8dnaZnZh6ioOHaXZ+fW2FhZWBco+CcYaCfoKAcGZsZ1hdW1xbU2VxZV9YY3N1aXZwZGViV1tbaH9wb3KAc4plZnqAa3Z3dHWFhniChXp3dHZuanpwYWhrZ4Z0jYRuZl5ee255iHxnbHdmamRWV3NwjqZ8hHt2lpBze3F6eGx5eo+DdZd8iIaEh4R9dXFzbWh1XW1pYG11ZGdnaXpve3JZZ4F3dWhwgHiCdmJ3hYt9lYJvjGtue4FxZXNlYGp4ZnB1iHl8YXWDdmprcHR5b3l4cntlfX19dnVtY2RgbIZ8bGpVamJyVExrbFBNT3FIXnxmYU5WdWVLTlRYYWt4f2ZeZ3NqZWBXZFhjcl5MTGxZZGJVVFV0V01Zd2VaX2xhXFtkZV93Z21ib2p0b3F+dXSZgXh/gHiAfoaEen12goN+l4VucnR8e3RxhYWPgoF6i3Z0kYB8gZWOgIWEfH6Mhnp+gHZ7o6aKeYmGhWx1fXx2hIONe2+Gc3qFfYKDdW5qaWVWXVtbWlNjb2VbWGF0e2pobWhgYVheWmmAaWtwgGhtYml7emt1dXVwh4J6gX53dm56aGp5al9lbmiBd5CEZ2VYYXZofYZ5bmlvZmZdVVhvaI+od4B6fJCNeHRufW1xdHiNfneUdIaDgIaJdmpzd2hpb1xtZV5uc19nYmp4aHttW22Dc3Rqb4F+enhid4WFeZGGc4hycHp/cmNxaFttdWRucYZ6d2FzgHBnaXdzcWt3dnN1YoJ5fXV0b2NiYmx9fGtrVWliZ1RMbmlQSFNsRmJ5ZmJNVHJeSk1VWmZteHtmX21xamRdVmBWb29YS1RpWGdeWE5WbFRLXXpgXF9sXV1bYmVgemhsYW9wdm5vd3V6mH13gIF5gICHhnp5eoN9gZOEcXR0fnp2dIWIkH6BfZFsc5WBe4KfhX+HfYB+hoKAint2hKyff3qIiIRscoN7doGAgnVviG59gHSKgGpvbmVkWF9aWlpVYmtnXFpfdoJpXm1sXGFXW1xrgWVydH1qal5teHdpdXhzb4d8fn56dnJsemhpd2ddZHNoeneSgGNiVGNuZYGEdXZmaGlhV1ZZaGSQqG9+d4CLjXlwbntmd215inp2jnGEfn+Ah25kd3RlaGldbGJecG9baF9tdWV6aF10gG5ya3F7f3Z2Y3WGjHyJiIGAeHJ2fnRhcGxYcHFhbm+CenNjcYBsYW16bmpoeXhzcGSEdHh4dG9jYGNtc31pa1RoXl9VTHVkUUhXYkhjd2ZiTFRxWUtMWFlpbHd7ZWVucmZjWlheWXdnVUpdZFhpWVlJV2VRSWN5W15fbVteXWJkXn9pamBudHhtb252g5d5coGAfX+JjIZ+dnaGeIaMfXR1dYJ5enqCi419f4WJanSXgXuKnX1+hXmAe358holzcY+ujHt7h5B+ZnGJe3R+fXdzcIZtfH5tkHpjcHBiZV1lVlpZV2RmbGBdXXSGaFlwbVteWFpcbHticXd2bWNcb3V1aXZ3cm+GeX+Bendub3RlaHRlW2d0ZnZ2kXlfXVJlZWmBgXN8YWJpXFRYXmNkkKVoeHSChZB3bG14Zndse4N5dIdygXl9eYBpZXdtYGdhX2pgXnVrWWZdb29iemVbd3xrbm9weHl0dWVzhJSAiYOJe3dwcn1yYXhjWm1uYG5vf3pzZXGAZF5udWhjZnd6cmttgXNxe3FwYV1kbW99ZGlTaFlaVU56YFJLWllIY3VkYUpVblVKTFpXam1ze2RsbHRjYVlaXGJ3XFRMZF5ZalRXSFlhTkhrd1lfYW5bW19iY12FaWhibnh5bW9qdoGQeW2CfoCBkoiEgXd1iXSMh3RydnaBd319foyPgX+TfnB4loN9mZJ5gIB4eX5/c4eEc3CZoXt7f4mWeWV1iXpzeXdsdHB/bHl8cJJzXnBvYWdibFRbWldpZG5mXFxyiWVTcm1bWVhXYGx2Y2p1ampfW291cm51dHVrh31/gXx3b25sZGlwY1trcmR0do5zXFZTY19wfn5wgFxhY15TWmFcZJKfZXJxhYOQc2tpeGtubnl5enGAdn9ze3p7ZGZ2aF5jW2FoXF93aFdiX3BoYXdhW3x2ampybnh0dHVpcYKWhIh/hXZza3B7bGZ3V1tpbGFvcX54c2VvfltgcHBhXmlwfWtqcn1wb3Zpb2BaZGtte2FmU2ZVWFNReF1TUFpSSGR0YmFHVmxRSVBaVmxsbHxlbW9yYVtaWFptcVhTUGdYV2pUVUZaXU9Jc3ZZYGNuY1hhYWFejGpjZW16eWxvaXZ5hntrg32AhJp8goR5fYhtj4Zxb3Z6fXSCgn2Lj4ODl3R4gpSGgZ+JdYGAgXR/gnCHg3Zvopdze4aMh3tmd4tvbnxwZ3hxe2xzdnONa150b2JnZmtTXlxWaGJtbVtccYxkTm9tXFZXVWZpc2hjdGVlXltwd29xdnZ6bIh9f32Id5BzY2Rrb2Fcbm1jc3iHa1pUVmFid3t8b4RcY15jU1pgWmOWlGNucIKFiXJpZnhtZHJ1cXpreXR1b3t/dl9nc2RcX1diZFlidWVVYGFtZGFxXV1+b2hpc3F0cXV3bG2FlIOKfIZycmdue29xb1JaZGlkb3F+dHNibXVVYnFqW15uZXxka3V8cHFxaGxeWGNpanheZlRkVVdRVm9YUldUUEhlc2BiRlhrT0lZVVduaWV8aWx5a2JXXFZcdWVUU1dpUlpnVVRJW1pQTnl3W19lbWpaYmFeXo9uYmdsenZub2l2dn9+bYOAfYaYe3+HgYp/a5OIcmd0gHt1gIN+iY5/jJNzfYqRhYefhnt/hoxzgIZzfYJ1bqSMc4KNjHd4bnqNYGV9cWd6dHltbXF3g2dkfG1jZ2doU2BfVWdgbXBcXm6OaE5qbGBVVlNvZ3NrZnhlZl5acnZuc3x5dG6Je4B3nHt6a2FlbG1eYG9qZXF5fmdaVVdfa3d6em6CXmFdaFZZYFhknIhia3CBhnx2a2l1a1t1cGp5aXVybm98gXNZa25gWV5WYmRYZXFjVF9iaWFibFpgfmtmbHR1b214d2xoho2AinuIbnFmcHtscWxhWF9nZ21xf3JyXmlsU2VxZFVibWF4YW90enRpbmppXldgZmh1XGRVYVZUT1lnU09dT1BJZXBdY0daak5KYExZbWVgeGlvgGVgVV5UXnZcVVNhZ09eY1VUS11aUVp2dl1fZm1oWGNhW16OcWNoanhyc21ndnR5gnOCg3qIj398ioiOem6QinRsc4F0f3+IhYeShJWPen2Mj4eRm4SAfI2Ecn+Bc3R3cW6Tk5OTk5OTk5OTkpKSkpKSkpKSkpKSk5OTkpKSkpKSkpKSkpKSkZGRkJCPj4+Pj4+Ojo6Pj46OjY2Njo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo2NjYyMjI2NjY2Njo6Ojo6OjY6OjY2Ojo6Oj4+Pjo2NjY2Oj4+Pj4+PjoKAfnp6fX5+fX1/fn59fn5+fn5+fn+Af4CAgIGAgIB/gIGBgYOHjI6Ojo6NjY2NjY2NjY2NjZKSkpOTkpKSkpKSkpKSkpGRkZGSkpKSkpKSkpKSkpKSkpKSkpGRkZCQkI+Pjo6Ojo6NjY6Ojo2NjY2Njo6Njo6OjY2NjY2Njo6Ojo6Ojo6NjYyMjY2MjIyNjY2Njo6Ojo6NjY2NjY2Njo6Ojo6OjY2NjY2Ojo6Ojo+Ogn99ent8fn59fX5+fn5+fn5+fn5+f4B/gICAgICAgH+BgYCBg4aMjY6NjY2NjY2NjIyMjIyMkpGRkZGRkZGSkpKSkpKSkZKSkpKSk5KSkpKRkZGRkZKSkpGRkZGQkJCQj4+Ojo6OjY2NjY2Njo6Ojo6OjY2NjY2NjY2NjY2NjY6Ojo6Ojo2NjIyMjIyMjIyNjY2NjY2NjY2NjY2NjY2Njo6Ojo2NjY2NjY2NjY6Ojo6Cf3x6fHx9fn19fn19fX59fn5+fn5+gH9/gICBgYGAf4CAgICDhouOjo2NjY2NjIyMjIyMjIySkZCQkJCQkJKSkpKSkZGSkpKSkpKSkpGRkZGRkZGRkJCQkJGRkZCQkJCPj46Pjo6Ojo6Ojo6Ojo6Ojo2NjY2NjY2NjY2NjY2NjY6Ojo6OjY2MjIyMjIyMjIyMjY2NjY2NjY2NjY2NjY2Njo6NjY2MjIyNjY2Njo6OjoN/fHp8e31+fH1+fXx9fn59fn5+fn5/f3+BgYGAgICAgYCAgIOGi42NjY2NjIyMjIyMjIyMjJTO2tjY2NjamoGEhISEiF0tMDAwMC1GoaGhoaGhoJqZmpqampqKg4SEhIOEd2VnZmZmaFxDRERERENHZGhnZ2dnZZCioKCgoKOAZGdnZ2dmb4SDg4ODg4OLjIyMjIyMjY2NjYyMjY2NjY2NjY2NjIyMjIyNjY2NjY2OhX19e3t6fX58fH59fX1+fX1+fn5+fn9/f4GBgYCAgICBgICAgoWKjI2MjIyMjIyMjIyMjIyMlNvp5+fn5+qcfoKCgoKGUxgdHR0dGTekpKSkpKSjnJycnJycnImBgoKBgYJyXV9fX19hUjQ1NTU1NDlcYF9fX19dkaakpKSkp3xdX19fX15qgoGBgYGAgYqLi4yMjIyMjIyMjIyMjIyMjY2NjY2MjIyMjIyMjY2NjY2GfH16enp8fXt8fn19fX59fX5+fn5/f3+AgYCBgYGAgIGBgYGChYqNjYyMjIyMjIyMjIuLi4uSl5iYmJiZmZKPkJCQkJCMh4eHh4eHiZOTkpKSkpKRkZGRkZGRj46Ojo2NjYuJiYmJiYmIhYaFhYWFhoiJiImJiYmNj4+Pj4+Pi4iIiIiIiImKioqKioqKi4uLi4uLi4uLjIyLi4yMjIyMjI2NjIyMjIyMjIyMjY2Njoh8f3l7enx8e319fX18fX19fX5+fn9/f4CBgYGBgYGAgYCAgYKFioyMjIyMjIyMjIuLi4uLi5GQkJCQkIuOkZGJh46KkJKTkYuQjI6Ph4+RkZGRkJCQkJCPj4+Pj4+Ojo6Njo6Ojo2Njo2Njo6Ojo6NjY2Njo6Ojo2MjIyMjIyMjY2MjIyMjIuLi4uLiouLi4uLi4uLi4uLi4uLjIyMjIyMjIyMjIyMjIyMjIyNjY2NiX59eHh5fH18fX19fHx9fX59fn5+f3+AgICBgYGBgYCBgIGCgoSKjIyMjIyMjIyLi4uLi4qLkJCRkZGPhI6QkIaKj4WNkJCLhYmKho2GiZCQkJCQkJCQkI+Pj4+Ojo6NjY2NjYyMjIyMjIyMjIyMjIyMjIyMjI2NjIyMjIyMjIyMi4uLi4uLi4uLi4qKiouLi4uLi4uLi4uLi4uLi4yMjIyMjIyMjIyMjIyMjIyMjI2Lfnx3dnh7fXx7fX18fH19fn5+fn5/f4CAgIGBgYGBgIGAgIGChIqMjIyMjIuLi4uLioqKioqQkJCQkIqFjoiOhoaPiY2QkIiFhoqFjoaLj4+Pj4+Qj5CPj4+Ojo6OjY2MjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMi4uLi4uLi4uLi4uLi4qKioqKi4qKi4qKi4uKioqKi4uLi4uLjIyMjIyMjIyMjIyMjIyMjIt9e3d2eHt8fHx9fX19fX1+fn5/fn9/f3+AgIGAgYGAgYCBgYGEiYyMi4uLi4uLioqKioqKipCQkJCPhYOMjpCOiYyKjpCQiIWIjIaMiIiPj4+Pj4+Pj4+Pjo6OjY2NjYyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIuLi4uLi4uLi4qKioqKioqKioqKioqKioqLi4uKioqKiouLi4uLi4yMjIyMjIyMjIyMjIyMin18dnZ4fHx7fH19fX19fn5+fn5+fn9/f4CAgYCBgYGBgIGAgYSJi4yLi4uLi4qKiomJiYmJkJCQkJCMhoyJjoeFjYmOi4yLhIiHhoiFiY+Pjo+Pj4+Pjo6OjY2NjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyLi4uLi4qKioqKioqKioqKioqKioqKioqKi4uLioqKioqKioqLi4uLi4uLjIyMjIyMi4uMjIyKf313eHp7enp8fHx7fX1+fn5+fn9+fn9/gICAgICBgICAgYCBhIqMi4uLioqKioqJiYmJiYmPj4+Pj5CMjouPjIqPjI6MjY+KjoqLjYqOj46Ojo6Ojo6Ojo6NjYyMjIyLi4uLi4uLjIyMjIyMjIyMjIyMjIyMjIyMjIyLi4uLioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi4uLi4uLi4uLi4uLjIiAfXh5enp6e318e3t9fn5+fn5/f35+f39/gICBgICAgIGBgIGEiouLioqKioqJiYmJiYmIiI+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj46Oj46Ojo6Ojo6Ojo2NjYyMjIyLi4uLi4uLi4uLjIyMjIyMjIyMjIyMjIyMjIyMjIuLi4uKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLi4uLioqKi4uLh4B8eHp6eXt8fHt8fH1+fn5+fn9/fn9/f39/gIB/gYGAgIB/gYSJi4qKioqJiYmJiYmJiIiIj4+Pj4+Pj4+Pj46Pj4+Oj4+Ojo6Ojo6Ojo6OjY2NjY2NjY2MjIyMjIuLi4uLi4uLi4uLi4uLi4uLjIyMjIyMjIyMjIyMi4uLi4qKioqKioqKioqKioqKioqKioqKioqKioqKiYmKioqKioqKioqKioqKioqKioqKi4uHgHt5eXh6fHx6e3t9fX5+fn5+f39+f39/f39/f3+BgYCAgH+BhIiLiomJiYmJiYmJiIiIiIiOjo6Ojo6Pj46MjI+Sj5COjo6Ojo6NjY2NjY2NjY2NjIyMjIyMjIuLi4uLioqKioqLi4uLi4uLi4uLi4uMjIyMjIyMjIyLi4uLi4qKioqKioqKioqKiomKiomJiYqKioqKioqJiYmJioqKioqKioqKioqKioqKioqKi4aAe3h5eHp8ent7fH19fn5+fn5/f35/f39+fn9/f4CAgYCAgIGEiIqJiYmJiYmJiIiIiIeHh46Ojo6Ojo6Ojo+MkJOQkI+Ojo6NjY2NjY2NjYyMjIyMjIyMjIuLi4uLi4qKioqKioqKi4uLi4uLi4uLi4uLi4uMjIyLi4uLi4uLioqKioqKioqKiYmJiYmJiYmJiYmKioqKiomJiYmJiYmJiYqKioqKiomJioqKioqKhYB6eHl5fHt6ent8fH1+fn1+fn9/fX9/f35/f39/gICBgICAgYSIiomJiYiIiIiIiIeHh4eHjY2Ojo6Ojo6Pj4+PjoyNkI2NjY2NjY2MjIyMjIyMjIyMi4uLi4uLioqKioqKioqKioqLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4qKioqKioqJiYmJiYmJiYmJiYmJiYmKioqJiYmJiYmJiYmJiYmKioqJiYmJiYmJioqFf3l6eXh7e3p7fHx7fn5+fX5+f39+f35/fn+Af3+AgICBgYCChIeKiYmIiIiIh4eHh4eHh4eNjY2Njo6Oi42Nj5WPiYyPjYyNjYyMjIyMjIyMjIuLi4uLi4uLi4qKioqKioqKioqKiouLi4uLi4uLi4uLi4uLi4uLi4uLi4uKioqJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYR+eXt5ent7ent9fHt+fn59fn1+f35/fn9+f3+AgICAf4CAgICEh4mIiIiHh4eHh4eHh4aGhoyNjY2NjY+MjImKj42IjJGPjY2NjIyMjIyMjIyLi4uLi4uKioqKioqKioqKioqKioqKiouLi4uLi4uLi4uLi4uLi4uLi4uKioqJiomJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJg355e3p8e3p7fX17fH9+fn5+fX5/fn9+f3+Af4CAgH+AgH9/f4OGiIiHh4eHh4aGhoaGhoaGjIyMjIyLiYyKiIeJhoyOjJCMjZGOjIyMi4uLi4uLi4uLi4qKioqKioqKioqKioqKioqKioqKiouLi4uLi4uLi4uLioqKioqKiomJiYmJiYmJiImJiYmJiYmJiYmJiYmJiYmJiYmIiImJiYmJiYmJiYmJiYiIiIiIiYmCf3h7e3t6enx9fHx9f39+fn19fn9/f39/f4F/gIB/gICAgICAg4aIh4eHhoaGhoaGhoaGhoWMjIyMi4yOjoyKioeEiIuKjIuNjo+Li4uLi4uLi4uLi4uLioqKiomJiYmKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiomJiYmJiYiIiIiIiIiIiImJiYmJiYmJiYmJiIiIiIiIiYmIiIiIiIiIiIiIiIiIiIJ/eHp7enp6e3x8fX1+f35+fX1+f39/fn+AgICAf3+Af4CAgYCDhYiHh4aGhoaGhoaFhYWFhYyMjI2NjJCSjI2Ii4mJi4uLi4mLjIqMi4uLi4uLioqLi4qKiomJiYmJiYmJiYqKioqKioqKioqKioqKioqKioqKioqKiYqJioqJiYmJiYmIiIiIiIiIiIiIiImJiYmJiYmJiYmIiIiIiIiIiIiIiIiIiIiIiIiIiIiHgXx4e3x5enp8fHx9fX9/fn59fX9/f39+fn+Af4B/f3+Af4CAgIKEh4eGhoaGhYWFhYWFhYWFjIyNkY+PjZGJjIaJjIuIiImMiYeNjo+NioqKioqKioqKiomJiYmJiYmJiYmJioqKioqKioqKioqKioqJioqKioqKiYmJiYmJiYmJiYmJiYiIiIiIiIiIiIiIiImJiYmJiYmJiIiIiIiIiIiIiIiIiIiHh4eHh4eHh4WAenl9e3t7enx8fHx9f39+fn19f39/f35+f4B/gH9/f4B/gH+AgoSHhoaGhYWFhYWFhYWFhISLi46PjoyLj4iHiYmMjYWFjo2KiYyNi46KioqKiomJiYmJiYmJiYmJiYmJiYmJiYmKioqKioqKiomJiYmJiYmJiYmJiYmJiYmJiYmJiYmIiIiIiIiIiIiHiIiIiIiIiIiIiIiIiIiIiIiHh4eHh4eHh4eHhoaHh4eHhH55eX16enp7fXt8fX5+f35+fX5/f39/fX5/f3+Af39/f39/f4CChIaFhoWFhYWFhYWFhISEhIuLjI6MjI2Lh4mIiomHgoiNjoiKi5GTj4uJiYmJiYmJiYmJiYmIiYmJiYmJiYmJiYmKioqKiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiIiIiIiIiIeHh4eHh4eIiIiIiIiIiIiIh4eHh4eHhoaGh4aGhoaGhoaGh4eDfXp5e3p5enx8e31+fn5/fn59fn9/fn9+fn+AgICAf35/f39/gIKEhoWFhYWFhISEhISEhISEioqOjYmIiIqKh4iHiomIioiIh4qGi5GPiomJiYmJiYiIiIiIiIiIiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmIiIiIiIiIiIiHh4iIh4eHh4eHh4eHh4eHh4eHh4eHh4eHhoaGhoaGhoaGhoaGhoaGh4J8eXl6eXp7e3t7fX5+fn5+fn59gH9/f39/f4CAgH9/fn9/gICAgoSGhYWFhISEhISEhISEhISKi5CPiYmJi4qHh4WHiYuKiYSLjYmOjYmJiYmJiIiIiIiIiIiIiIiIiYmJiYmJiYmJiYmJiYmJiYmJiIiIiImJiYmJiYiIiIiIiIiIiIiIiIeHh4eHh4eHh4eHh4eHh4eHh4eHh4eGhoaGhoaGhoaGhoaGhoaGhoaGgXt4enp4e3x7e3x+fn9+fn5+fX1/f39/f3+Af4B/f39/f3+Af4CChIaFhYSEhISEhISEhISEhI+Qj4+IiYuIhoeIiYuLjIuJioqNio6Oj4iJiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIh4eHh4eHh4eHh4eHh4eHh4aGhoaGhoaGhoaGhoaGhoaGhYWFhYWFhoaAe3h5eXh4enp8fX1+f35+fn59fn9/f39/gIB/gICAf39/gIB/gYKDhoiGiIaDhISEhIODg4ODkpKOioeKi4qLh4uNiYqJi4iHiouIio+SioiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIh4eHh4eHh4eHh4eHh4eGhoaGhoaGhoaGhoaGhoaGhoaGhoaFhYWFhYWGhn96eXh4eHl5eXx9fn5/fn5/fn1+f35/f3+Af39/f4CAgH+AgH+BgoOHjo+PjoiHhIWFhoaFhYWSkI6KiYmIiImKioiIh4aKjIiHiYmOkJGNh4iIiIiIiIiIiIiIiIiIiIiIh4iIiIiIiIiIiIiIiIiIiIiIiIiIh4eHh4eHh4eHh4eHh4eHh4eHh4aGh4eHh4aGhoaGhoaGhoaGhoaGhoaGhoaGhoWFhYWFhYWFhYWGf3l4d3d3eXp5e3x9fn9+f35+fn5+f35+fn+Af4CAgICAf3+Af4GBg4eOjo6Ojo6Mjo2OjY2MjZCQjomHhoiJiYeIiouIiYyJiYaKjY6PkYuIiIiIiIeHh4eIiIiIiIiHh4eHh4iIiIiIiIiIiIiIiIiIiIeHh4eHh4eHh4eHh4eHh4eHh4eHh4aGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaFhYWFhYWFhYWFhYZ+eXd5d3d6eXl8e31/fn5/fn5+fn5+fn9+f4B/fn+Af39/f39+gIGEiI6Ojo6Ojo6Ojo6Ojo2NkJGOi42JjIiIiYaHiYaIioiHi4yLjpCQiIeIiYmJiIeHh4iIiYmIh4eHh4iIiYiIiIiIh4iIiIiHh4eHh4eHh4eHh4eHh4eHh4aGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoWFhoaFhYaGhoWGhYSEhIWFhoaFhIWFhX55d3l2eHl4e3x7fn5+fn5+fn5+fn5+f39+f39+f39/f35/f3+AgYOGjY2Ojo6OjY6NjY6OjY2Qj42Ni46KhoiKhISLiYeDhYSDi4mLj42JjI6QkI+NjYyLjY6Pj42NjI2Nj4+Pjo6MjYyMjY2KiYiHiImHh4aHh4eHh4aGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoeHiYqKiIeJi4yNjo2LiImLi42OjYyJiImMgHl3d3Z6eXh7e3t+fn5+fn5+fn5+fn5/f39+fn5/f4B/f4B/f4CBg4aMjY2NjY2NjY2Qj4+Pj46NjI6KiYuMjIeFiY2Lh4aIh4aHh4uNjo6Pj4+Pjo+Pj4+Pj4+Pj4+Pj4+Ojo+Pj4+Pj4+Pj4+Oj46Oj46Mi4uJh4eHh4aIhoaGhoaGhoaGhoeLiYeHiIiLjY2Mi4yLjY2Ojo+Ojo6Pj46Ojo6Ojo6Ojo6Njo6NjY2AeHZ4eHp4enx6fH5+fn5+fn5+fn5+f39/fn59fn9/f39/gH9/gIGDhoyMjIyMjY+QkpOTk5KSjYyMjIqHioyKh4eJiYWCiouIiYWJjpCNjo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6NjI2NjI2LiYaHh4eHiYqLjY6NjYyNjY6OjY2OjY2NjY2NjY2NjY2NjY2OjIyNj4+OjY2MjIyLi313dXd5enp7e3p+fn5+fn5+f35+fn5/f39+fn1+f39/gICAf3+AgYOFj5KRkJGSk5OTk5OTkpKLi4uLiomMiouLiYuKhoeOjYiIjI6OjIuMjIyNj46Njo6Ojo2NjY2MjY2NjIyMjIyMjIyMjY2NjYyMjI2NjYyMjI2NjIyNjIyMi4yMi4yMjI2MjIyMjIyMjIyMjIyLi4uLi4yNjY6Sk5OSkpSRkJOVlZSTk5COjo6Oe3Z2d3h6ent7e31+fn5+fn5/fn5+fn5/f35+fn9+f39/gIB/f4CBgoSNkpKTkpOSkpOTkZKSkoqJioyJi4qJjIuKioiHiYqKi4mKjY2Mj46Nj5KUlJOUlJOTkpGSkI+Ojo2NjY2Pko+OkZGOjIuKioqLi4qKi5CPjoyMjIqKioqKioqKiouKioqKi4yLi4uMjIyKiouLi46RkpOTk5SUk5STk5SUlJOTk5KSkpKSk5F6dXZ2eHt7e3p6fX5+fn5+fn5+fn5+fX5/fn5+f39/f3+Af39/gIGChIuRkZGRkZKSkpGRkpGRiYmIiIqMiYiJiYuJhoSJhoyKh4ySkpKTk5OUlZWWlZWUk5OUlJSUlJSUlJSVlZWVlZWUlJOTkY+QkZKQjoyRlZWVk5KSjo+QjYqKi4qKi42OjY6RkpCRkpKSkpGRkpKSk5OTk5OTk5OTk5OTkpOSkpKSkpKSkpKSj3h1d3l6e3t7ent9fX19fn5/f35+fX5+fn5+f39/fn9/f4B/f3+AgYKEi5GQkJCSkpKRkZGRkZGIiIiIi4uJg4eLi4yMiIeHjYyNkpSSkpOTlJWWlpaVlZSSkpOTlJSUlJWVlZaXlpaWlpWUk5SUlJSVlJSUk5OVlZWUk5KTk5OTkJGSkZGSk5OTk5KSkpOSkpKSkpKSkpKSkpKSk5OTk5SUk5OSkpOTkpKSkpGRkZGPdnJ3enp7e3t8fX59fX1+fn9+fn9+fn5+fn6Af39/f3+Af3+Af4CBgoSKkJCRkZGRkZCQkJCQkIeHh4eIiIiFi4+KjI6Njo+OkJWUk5OTk5SUlZWVlJSUk5KSk5KTlZSUlZaWlpaWlpaWlpSTk5OTk5OUlJOSk5SVlZSTkpKSkpOTk5OTk5OTk5KSkpKSkpKSkpGSkpGRkZGRkZKTlJSUlJSTkpGRkZGRkZGRkZGRkYx0c3d6ent7e3x9fX1+fX5+f35+fn5+fn5+fn9/f39/fn9/f39/f4GDhIqQkJGRkJCQj4+Pj4+Ph4iKi4yNjYuOj42Mjo6RkpGSk5OSkpKSk5SUlJOSk5OTkpKSkpOTk5OTlJWVlZWUlZWUk5OTk5KSk5OUk5KTlJSUk5KSkpKSk5OTkpKSkpKRkZKSkpKSkpKSkpKSkZKRkZGSkpOTlJSUk5OSkZGRkZGQkJCQkZCRinN0dnp8fHp7fXx9fn59f35/f35+fn9+f31+f39+fn59f39/gH+AgYKDipCQkZGQj5CPjo+Pjo+Oj4+Pj4+Pj4+PkI2OjpCRkpKSkpKRkpKTk5OTkpGSkpKRkZGSk5KTk5OSk5STk5OTlJOSk5OTk5OTk5OSk5OTkpKSkpKSkpKSkpGRkZGSkZCRkZGRkpKRkZGRkpGRkZGRkpKSkpKSkpKSkpKRkJCQkJCQkJCQkJGGc3V2e3x8e3x9fX1+fn1/f35/fn5/gH9+fX5/fX5/fn5/f3+Af3+BgYGKkI+PkI+Pj4+Pj4+Pj4+Oj46Oj4+Pj5CQiI2PkJGRkpKSkpOTk5OTkpKSk5KSkZKRkZKSk4iFk5GRkpKSkZKSkpKSkpKTk5KRkZKTkpGRkpKSkpKRkJCQkJGRkZGQkJGSkZGRkZGSkZGRkZGRkZGSkpKSkpKSkZCRkZCPj4+Pj4+Pj4+PkX9ydHh8fHx7fHx9fX5+fn9+fn5/f3+AgH99fn5+f39+f39/f4CAf4GBgYqPj4+Pjo6Ojo+Pj46Ojo6Ojo+PkI+Pj4+GjpCQkJCRkZGRkZGRkZGQkJCQkJKCgpKQkZGOdYaRkJCRkZCQkJGRkZGRkZGRkJCQkZGQkJGRkZGRkI+PkJCQkJGRkJCQkJCRkJCQkJCQkZCQkJCQkJCQkZCQkJCPj4+Pjo+Pj46Ojo+Pj4+PeHJ2eXx9fHp9fH19fn5+f35+f39/f4CAf39/fn5/f35/f39/gIB/gYGAio6Ojo6NjY2Ojo6Ojo6NjY2Oj4+Pj4+PjoiQkZCPj4+QkJCQkJCQkI+PkJCPkIhwhJCPkHx0iJCPj4+PkI+PkJCQkJCQj4+Oj4+QkI+PkJCQkJCPjo+QkJCPj4+Pj4+PkJCQkI+PkI+Qj4+PkI+PkJCQkI+OkI+Pj46OjoyMjY2NjIqDiYhzc3Z4fX58eX18fX1+fn5/fX5/fn9/f39/f4B/f39/f4CAgH+AgH+BgYCJjY2Ojo6Ojo6OjY2OjoyNjY6Ojo6Ojo2NiJCRkI6Njo6Ojo6Ojo6Pjo6Ojo6PjHNvio+KcniHj46OjY6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Pj46Oj4+Pj4+Pj4+Pjo+PjY2MjYyNjoyLi4mJiYiFhYSDgoKEgnR5fXp4dXJrZWltb2xmZmdncHNzd3l9fnl6e3x9fX5+fn59fn9/fn9/f39/gIB/f3+AgIGAgIB/f4CBgImNjY2NjY2MjYyMjIyMi4uLjYyMjIyMjIyGj5GRjIyMjIyMjIyMjIyMjIyMjIyNd217j4JzeIaNjY2MjIyNjY2NjYyMjI2MiomKi4uJh4KAh4iEgXt6gH57fXx8fXlzcnJycnV1cG1ramppZ2NkYV9bXF1eWFVXWFlTS0VJSkpLTE1PT0tgdHR3eX19eHp5e3x8fn5+fn1+f39+f35/f4CAgH+AgICBgYCAgICAgIGAf4OEhYSFiIuLjYyMjIuLi4yGiYqKioqKh4OOkJGNiouLi4uMiYmKioqKiouLi4dzbm+Ee3V2gIWDhIeJiYWCg397fHl6e3pzcHFxcW1samdsbWdlZmVmZGNlZGVkZWVlZWRkZGNhYV5dXFlYWFdUUFFSU1JTTU1KSUZESEpHR0hHR0xOSWdzdXh6fXp4d3l8fHx8fn5+fn9/fn9/f39+f4CAgIB/gICBgICAgICBgYFnXmBjYWNucX17ent/fXd8fHZ4ent4eHpvcXt4eXt8e3h3e394dXd0dHZ1dXZ3dGJeZF9ha3FmaGtsbm9tamlpaGhlZWRkZF9gYWJgYF5dWVhaWltdXV9gX2BfX19gYmFeXl5eWVldXF1bV1dWUlRSU1NOUUpISUZERUhMTEhGR0lLSklNbXJ0eHp7end3eXt6e3x+fn1+f39+f35/f35+gIGAf3+AgIGAgICAgICCgWdYW1pZXFtcY1xaXF5ga3FtcHBvbm5vbmtpbmxrbG9qaWtraWpraWZmZ2dnaGhiXWpsXWVmZ2VjY2JhYmBgXVhbW1dYV1RWUVBUU1NNSkxLTExOTk9UWFhXVVVUUlBQTU1QT05LTE1QUU9MTEpHSUlHSEhJSEhIR0ZGSElKSEhISUlISVZwc3V5ent5dnZ5enp7fH59fX5/f35/fn5+f3+AgX9+f4B/gICAgICAgIGBbFtYVlZWWVlaWVlYVVZoamxubmxra2poaGloZGVkYlxiZl9fYWNfXF9dYF1eWlpqd2xibnJqYllZX1tYV1NOTUtLS0tMSUtNTktKS0tMSktQTEtLRkdHSUlGR0lISUZFSEdGRkVERUVEREVJSUlHSEdIRkZLTUtJSUlIR0hLTU1LTExMVXFzdnl6e3h2d3h3ent8fn1+fn9/f39+f3+AgIGAfn5/f4CAf4CAgIB/gYJoUlRVVlNVV1lZWVdXV1tbYWNfXlxbWFZWWVZSVFJRUVVUU1NUUE1KTU5QUk9NW2tya2FtdHJmUVFTUFBOTk9NSk1MS0xKSktLRklJSkxJR0pISUlFR0dGRkVFSElKR0ZHRkZHR0hKR0dISEpMSkpLSUlISktLSkhKS0pISUtMTU9QUEtUdHN1eHp6eHZ2d3d6enx+fX5+fn5/f35+fn+AgYB/f3+AgYB/gICAgH+AgmlQUlRXVVRWWVdYWFpbVFRTUlBRU1FRUU9OTlBQUU9MTlBPTk5NTEtNTk5QTU5dY29rWGlzdXBTTU9QUFBPTk5PTk5QTk1NS0lISEpJSUlJR0ZHR0dJSkhJSEhJSEhHSEdISElISUxLSklISkpJSkpIR0pMS0pJSUhKSktMTk1NTU9RTFVzcnN3enl3dnR2eHp7fX19fn5+fn9+fn5+gICBgICAf4GBgH+AgICAgICBbE9PTlRZVVVdW1lXV1hOTUpKSUZKT0xKSkdJSk1NS0pMTUpHSUlJSktLRkJGSFViZ2xvcG9tbFpMTE5NTk9NTk9MTk5OUFBPTE1MTk1MTEpJSEdJSElISElJS0xLS0pJS0pJSklJSUlJR0dKSUdJSUpKTk1OTEhJSklJSk1PT01MT1JOWXBwcnd4d3d0c3R3enx+fX5+fn5+fn5+fn9/gICAgICAgYCAf39/gICAgIFvS0pNTlFOTlVXVlZSU0lFQ0VFUkREQT5CP0RAQD5CREFAQURHRkVIRUNGR0hNWmdoZ3JubmhmZGBeXlhMSklKSUlLSkxQTk1MTU1MTU1NTElIREZGR0ZGRklKSUlLSkhMSklKSkpJSEhKS0tIRkdJSklLTU5OSktPTUxLTU1PUE5QT1BgcG9yd3h2dHJzdXd6fX19fn5+fn9+fn1/gICAgICAf4CAgIB/f3+AgICAgXNQUE5OUE1KS1BSUE5RQ0RCQUZRRT1DPT9FSDk6Oz0/PTxBRkA+Ojs+SVpdWlxlbG5qb21tbGtpaGtkU0dFRUZFR0dHR0pHSEpLR0NER0pHQ0RFQUFDR0hHSEdISktKSElMS0lISktLTU5MTUxMSkpMS0lLTU9PUFNRT1BQTk9QUlFNUGdwb3N2dXRycXR4eX19fX1+fn5+f4B+foCAgH9/gIB/f4CAgH+Af4B/gICCdlRVUVFQT0xNUFBOT09BQkFAQkE/Oz48Pj8/Ozg5ODs7OkA6Oz48Ozs7PUtbaW1ub2pvbWtqbG1mUUdFREdJSEM/QEBAQUFCQUE/Pjw9PkFAQD8+P0BFR0dHSUtMTk1OTUxNTUpLTVBVU05MTlFOTk1OTE1NTk9OTk1LS05OTk1OTkxUbnBwc3R0c3Fydnh5fX19fn1+fn5/gH5+gICAgICAgH9/gICAgH9/gH+BgIJ4UVFSVFJTUVNTUVFST0BAPT4/PD8+QEE/PT45Ozo7Ozk5Ojg4Ozw5Nzk7Oj1IY29zbW5sa2xoVUM+Q0ZEQ0NDPzs+PkBDQ0E/Pj9BPkBAQj9APD9CQEFDRUVFSktQT1BPTU1OTExMT1JRUFJOTExPTUtOT0xMTEtMS0tKS0tKTU1LS1xxcXF0c3RycXR4eHl9fn1+fn5+f39/fn5/gIGAgH+Af4CAgICAf4CAf4CAgXxSTU9RUFFSUlRSU1NOPDs8Ozs7P0BBQkA9PDk8PTw6Nzk6Ojk3OTo6Nzg6OTk9SmBzc3BoVD86Oz1AQUA9Ozs+PD08QEJDQT9BQkE9Pj09Oz0/Q0RCQD9BREJFR0pKSkpKTE1MTExNTExOVVNLTE1USVBKSU1KSUpLS0pJSEdKS0lKZnJxc3RzdXJydnl6e31+fn5+fX9+f39/f36AgICAf4CAgICAgIF/gIF/gYCBgFZMTlBQTlJRUFBRUU44PT88PDo9PkFAQT8+PkA/Pj48PT0/QD09PT9DOz09Pjw6Qmx9akA6Oz49Pj8/QUA/P0E/QEBBQEBAPT8/PTw6Oz09PD9AQUJCQUBCREZGRkdGR0dISUtMTExLTEtKS0lKSk1MTEpMS0lISUxMSklJSElLR01tcHF1dXR1c3V4eXl8fX5+fn5+fn5/gH9+gIB/f39/gH+AgYCAgYCBgICBgYCCYUtPT05OT1BPT1BQTzo8Pjw9Oz8+PkFBPz0/Q0NEQT89PkBBP0A7W25APkRFP0BBRF9kOz09Ozo9P0FBPz9AQD9BPz89PD48PTs7PD0+QUA/QD5AQ0NEQkRFSEVFR0hISEdGSUpJSUlJSUhKSkpKTEtKSklJSEhKSktMS0lLSktIVnBwcXNzdHR1eXp7fHx+f35+fn5+f39/f39/f3+Af4CAgICAf4GBgICAgIGBgIJtTFBRTk9QTk5PUFBPPjw8PT4/P0A+QEA/Pz9CRkQ+PDw9QD04Ojptd0g4Ozo9PkE7SGQ9PD08ODo7REQ8PD08PEA9PTw8Pjs9PD0+QUBCQUBAP0JEQ0RFRkZGQ0VHSElJSEhJS0tMTUpKSUpNTUpLSktJSEhISEpJSktKSk5MSUlgcHBycnJ0dXZ6e319fH5+fn5+fn5/f35/f36AgIB/gICAgICAgYGAgICAgIGAgnZNTk5NTk5MTE5QT0w+QTw8PT8+QkM/PkFBQUJBQFlSPTw9SUxGRXV2Tjc4ODo7Pj9XakE7PDw6OjtMUj09PTk6Pzw9Pj89Oz4/QEJDQkJDQ0FCQkFCQkRCQkRCRENGSUdGRkhJSUtNSklKSktMSkpJSkVESUlGRkhISUpKTEpGRmdwb3FxdHZ1d3t8fH18fn59fX1+fn9/foB+fn+AgH+AgICAgICBgYCAgICAgICBek5JS0tMTExFSUxOTTw/PDw9PkBAQUE7QkNCQ0BDcnpKO1x/g396fHdXPD0/PT0+RWh0TDo9Pj89PE9oS0A8ODxBPz4+QT07P0JAQkNCQEJDQUNBPT0+QD0/QUFBQENFRUBAQ0JDR0dFRENGRUZGR0VFP0FHR0ZDRkRHSEpHQz5IbG9wcHF0dXZ5fHx8fHx+fn1+fn5+fn5+f36Af3+AgICAgICAgIGAf4CAf4CBgIF+UUhLTU1NS0pLTE9RQD8+PkFBQEBBR0FCRENFQUdyemtig4SDgoOAfV4+QENAQD1Kc3tZOj1BRUJBUG5eVFBIQUNDQUE/Pj1AQT4+Pj88PkBER0VAPkBBP0BDRkVDQkNDQEJEREJERUFCPkFCQkFCQEA9QUJDRENDQUNFR0E/PVZwcHFwcnV1d3p8e3t7fX9+fX19fX1+fX5+fn9/foB/f4CAgICAgYCAgIB/gIGAgX5SSEtNTUxLS05OUlVEQkBDQ0FBQkBCQ0BAQUFARW50fYKCgYN+fYR2TUFDRUA/Pll7gF0/Q0VJSklUaGdlX2BYRk1NRkVFRURFQ0E/QD4+QkZKSkdFRUdGRkpOTktKSUdHSEtMSUdHQ0REREVEQUJCQ0BDREVEREVERUZDQkFEZW9wcXF0dnV4e3x6fHt9f319fX19fn59f4B/f39/f39+gIGBf4CBgICAgH+AgICAfVJJSUpKSEpKTE9SU0dGRUdIREdIREA+PDs+QEVFaHN9gXx/hH55hXJDREVEQ1d1hoeHflhHSEpNTVxpaGplYmdaYU5JSUhHR0hIRUNFRUVFRkhKSkZFR0lKTU9PTU1LSktKTU5LSUhHSEhIR0ZFRkZGREZIR0VFSEhGSEdIRlFubnBxcnV2eXt7e3p9fX5/fX19fX1+fn1/f39/fn5/gH+BgYGAgICAgICAf4GBgIB8UEhHSElGR0lKTU5OSkxJSUpLTE5KRkNBQkNGSkdge4B/d3+EhYOEiWxBQVZ0h4mHh4eIg1dITE5NZnZvaGtpbG5hR0hIR0ZIRkhFQ0RERkVEREhIQ0NDRklLS0xMTExMTElKS0pKSUlJSEpISEdISUhHR0hGRkZISklJSUlIXW9vcXJ0d3d6e3t6e319fn59fX19fX5+fYB/f39+fn+BgIGAgYCAgICAgIB/gYCAgHxNR0ZIRkVGR0dKS0pMTUxLTU5NT0tJSEhKS0tMTE5bfIKCg4OFhoaIhFZshYeGhoaHiIiHfFBMTU5seHZubW9xcFE/RENCQ0ZGRUJAPj5AQUJAQkQ/Pj9ERkhERkdJS0lKSEhIR0lJSkpJSEZKSkpKSUpJSkpKRklMTEpKS0tmb3BzcnR2eHl7e3t8fH1+fn19fX19fn59f39/f35/f4CAgICAgYCAgIGAgICAgICAfU9GRkdGR0hHRUZHR01NTUtMS0lHQ0NDRElLS0xLSlSBg4SEgoKFhoaEgoWFhISGhoaHh4aKdUpJUnR6g3dwbWxuVjs/Ozo8QUFAPjw5OTg8PD07Pjs4Oz9BQkBBQ0NCQEFBRERCQ0ZISUhISExNTEdJSk1NTk1KSktLSkxNU2xwcXRzc3d5e3t7fH19fn9+fX19fX1+fn5/foB/fn9/gICBgIGAgICAgYCAgIB/f39+UUZFRkdJSUdEQ0VGTk1MSklIRT85Oj5ARUhISklJZYWEhIR/gYKDgoODhIWFhoeIiIiIiYyPZ0VZa296bmxvcXNPNjk2NDc5Ozw6ODU2Nzc4OTc4NzU4ODs7Oz1AOzk5OT08Pjs8PUFDRUhKTUxMR0lHT1JRUFBOTE1NT1Fdb3BydHN1eHp7e3x8fn5+f359fX59fX5+f39/gH9/f4CAgICAgYCAgICAgICAgIB/f39RR0ZHSEpIRkVGR0hMTEpJSUdDQjU2OjxDQENHSUlohoSEgX6Bg4ODgoOEhomKjIyLi4mKi42KZ2RqbGNlaXWBczw0ODczNTY4Ojg3NjU2NTY3Njc2Nzo2Nzg4OTo3NTc4OTc5Nzc2OjxAR0ZJR0lGRUZPU1JTU1JPUFBSVGVwcXN0dHZ5e3t7fH1+fn5/fn19fX19f39/f3+Afn+AgICAgICBgICAgICAgICAgH9/flJISEhJS0lHSUpJSkpLREVIRUJANjc4OD06PUVDQmWFg4GAgoODg4ODhomLiomJioqKiouKi4uHc3FvZmdwcn1lNDY4ODU1NzY5OTc3Njc2NTo5Ojo6Ozc5ODk4NzY2OTo5ODg2ODU4OTtBPT4+QkE/QUtMT1FQUU9PT1JXa3FydHR1dnl7e3t9fX5/fn9+fX19fX5/f4B+fn9/f4CAgH9/gICAgICAgH+AgICAf39+VEhHSUlMTUtKS0tMSUg/QEFAPDo1Nzk4OTc7Qjo9cYSAgYOEhISEhYaJioqIh4eIiIqKjIuKi42HeHNub3NtcWE5Ojs8OTo7OTo7Ojo5Ozo5PT09Pjs7PDw6Pjs5Ozs8Ozw7OTo8ODo6Ojo5OTk8Pzw8QUJESUpNS0lLTFdvcnN1c3Z4e3t7fHt9f39+f359fX19fn9/f35/f39/f3+Bf4CAgICAgICAf4CAgH+Af35URkVGSUxOTkxKSk1CPzo7PDo4OTk4OTo6Ojs/Pkh+hIKChIWFhYaIiYiHhoaGiImIiYuMi4qMjY6Ed3V5cm9vXUJCQUI+QENBQD49Pj5APz8/QD9APT0/Qj5AQT9APz1AQEA+P0E8Pjw7Ojs6OTs/PTs8PT1BQUNBQkNBWHBxdHR0dnp7e3x9e31/fn9/fn19fX5+f35+fn9+f4B/f4CAgIB/gIGAf39/gICAf39/flJFQ0FHSk5PTElHSzo4Ojs5Ojo8PDo7Oz09P0BCUoKCgoSFhIWEhomJiIiGhoaHiImKi4uLi4yNjY2Be3t2c3FWS0hISEVGSEdFQ0FAQkVDQ0FCQ0I/QERIRUNFQ0VEQUZFRkRFRkRAQj48QD49P0A+Pz4/Pj8+Pjo7PTxgcXJ0dHV3enp6fX19fn5+f39+fX19fX5/fn5+fn5/gH9/gICAgICAgICAf4CAgIB/f4B+UERAPUNIT01HRkJEOTc6Pjo8Oz4/Pz89QUBDREZXhIKDhIWGhoaIiYmIh4aGhoeJiYqLjI2MjIyMjIx/ent0Xk9STEtLSUpKSklGRERHSEZEREVGREJISUtHSEdGSEdFS0lLSUpLSkNFQ0NEQkFCQ0JEQ0NERENBPTs9QGhwc3R0d3d5eHt8fH19fn5/f359fX1+fn9+fn59fn+Af3+AgH9/gICAgICAgICAgH+AgH9PQT49P0RMS0BCQkE5ODw+Ozw7PkA/QT5CQkdHSVmEgoOFhYaHiImJiIiHhoaGiIiIiYqMjY2NjY2Mjol7enBcUVJOTE5LSktJS0dER0lJSUVGSUZGRUxMTUlKR0dISUpOTU9MTE5LR0ZHR0VFQ0ZFRkZERUhIRkNBP0BMbHB0dXZ4eXl5fHx8fX1+fn9+fn19fX1/f35+fn5+f39/f39/f3+AgICAgIB/gICAgICAf1FBPz4/RUdHPTxAQDg3PDs7PTo+QD4/QENGSUlQX4GDhYSFhoaHiIiIiIiIh4eIiIiJioyNjYyMjYyNjYR6enhkUE9NTkxKSUZKSUVLSUdLSklKR0dHS0xOTExISElKTVFOT05MT0tJR0lKSElESUhIRkZHR0lHQ0JBQ1RucHV3d3l6eHl6e3x8fX5+f39+fn1+fX5+fn5/f36Af4B/f3+Af4CAgICAgICAgICAf39/VERBQUJHSEI/OD9AOTo8OD0+Oz1BPj9BREhKTFVxg4SFhISFhoeIiIiIiIeGiIiIiImJjIyLjIyMjIyMjHZ3dHFVUlBNTElHREhKSE1MR0tPTEtKSkxNTE9QTkhJS0xPUVFQUU9PSkhKSkxKS0ZHSEdGRklGRUVCQUJCXG9yd3h5enl5eXp6e3t+fn5/fn59fX19fn9+fn9+f4CAgIB/f39/gICAgICAgICAgH9/f39VRUNFRUdHRUQ7P0E7PTw5QD4+QEJHR0FHS0xQVnmFg4ODhISGiIiIiIiIh4eIiIiIiIqLi4qMjIyMjIyOfmRgaF1XVVFPTUxFRkdNUE9QV1VRUE9RU1JNU1RPTVNMUFNVVlJTUVBMSk1NTUtOSEdKRkVISkVERUVCRUNjcHV5eXp6ent6e3p6fH59fX9+fX19fXx9fn5/gH9/gICAf39/f3+BgYCAf39/gIB/f39/f1VGRkdHR0dIRj5AQj0/PT1CQEJCR1ZORk5QUFRYe4aDhYWEhYeIiIiIiIiIiIiIiIiJiouKioyMjI2PjIyMb19eb2RIVVNTUks7O1NUUmB1XVVWVFZZWVJYWFJaZlBVV1pdUlRXUU9NUlFQUFFMTEtISEpIRUZJSUlISWlydnl4eXl6e3t8ent8fXx9f359fX19fX1+f39/f3+AgIB/f39/f4CAgIB/f3+AgH9/f35+U0hKSUhHR0ZFPz9BQUVBQ0dFREVMWFJNVFVWWFp8hoWHhoWGh4iIiIiIiIiIiIiIiIiIlJyMioqMfmGKi4uIc2JpWT1bWllUUj9AV1ZZXGRgVllicl1dV11aVkVRWVpbWV9UWWdSVlZYVVRWVE9PTUtMSklJTE1LT01Tb3R2eHl4eHp6ent6enx9fH5/fn1+fX19fn1/f39+f4CAgH9/f3+AgICAgH9/gH+Af39+fn5WSkpJSEdFRERCQT9ITUlNUEtJS1BUU1NYWlpcXHiFhIWFhYWGh4eHiIiIiIiIiIiIiImcnaCPiY5nO36MiYuMfXNzW15dXFNVU1dXVVtadYNZVX2QYVxYXV9XSVZdXVtbX1lIWVhZW11YWFlXUlFNUFFNTU9TUVFVUmFzc3Z3d3Z4eHh6e3p8fX19f39+fX59fX1+fn9/gH9/gIB/f3+Af3+AgICAf39/gIB/gHh5fVlOS0lJSEZCREBBOlBRUVdYUFBPUVNUVFhYWVpbboGCg4WEhYaHh4eHh4iIiIiIiIiIiJaanJeJioFuhomIh4SLgGlcXF1bVldVWFRSWFZjloBSZXJYWldfaFBgZltbWFxnYUdPWmhnXVtcXV1XUk9TUFBSVlZWVllabnJ0d3Z2dXh4eHt7fH19fX5/fn59fn18fn9/f3+Af39/gH+AgH9/gICBgYB/gH1yfX9/b3R8XVNQT01LSkVDP0A7UFBaWltSU1FQUlJSVVNWVFdfdXiAhYSEhYaGhoaHh4eHiIiIh4eIh4ORjomJiIaFiIiGfoB9YFRYW1ZUVlNSUk1QTUxmeltdVFlVVl1aTFRaVVNUXlpYV1dXemtYW1xcXlRRUVBJTk9XVlhbWmRwcnZ2dHR2eHl5e3t8fH1+fn99fX1+fX1+f39/gIB/f3+Afn56eHd2c3V7f3+AgHRrfn5rcnleW1ZVU1JPS0ZDREFNXoNsVlJTTk9RT1FVUlNSUlVjZHaAgoKDhISEhIWFhISDhoaGhoeIhn6JiYiHhoOHh4h6b3NaTk5RUU1PTEpLRUZJRkM/VGRVf1JRUU5LUVRRTU9ZUk1OUVNVVU1RU1JQT01MSENJSFJUVVpcbHF1dXVzc3d6ent7fH17fX19fn19fX59fn9/f4B/f399fX5+f39/f4B+e3Zzd31+fmR1fWlxdF9kXV5cWVVRTElMSWFsknRQUVNOUVJRUltSU1JRUlVUYXN7fH+AgYKBgX99enuAf4OChYaHgoaGhoGEgYaFhnZhXk9HQUVFRERDQUVRQ0VBQz5DSUdWQEhOTEddaVBIRk5GREVGSUdIQkRIR0lLR0RCQURAT1FNU2RydHZ1c3R1enx7e3t7fHx9fHt+fX19fn5/f3+AgIB/f3x8fX+Af39/f4CBgH12dHt/bWh8Z25xZmllZGJcWFNRUFVSc1dlW09PTkxRU1BVWVNVUVFUUk9WX2tscnZ7e3h5dHJuc3RzeXh9f4OAg4OCgIKAg4GCbE9JQkI8PD5AQUBAP2tRS2BFRkhJRUI/R0xOR01SVUlCRT8+PD08PT0/PT9BQ0NAPz09Qj5KTkdVbnR0dXN0dnh6fHt8fHx9fX19fH59fXx+fn9/f4B/f39/enl3eHd2dnh7foB+fXt4dnx1YXhnbHBqbGppZmBbUVFaXFleSkpQUU5LTFFSUVRVVVdRUVdVUFhbYV1hZ21tbG9rZ2BucmptbHF1e3p9e3h6fHx4d3hlREJCQj47Q0NCQkRCXF1Pe05PT05LTE1PT1FMS01XTUhHQEI8Ojc3NTk5PTs7Ozg6ODo/PEJIP1xzdHV1dXZ3eXx8fH18fH19fn58fX19fX9/f39/fn9/f314dXZ6e3p3eXh1d3t8eXh1eXdjcWhpcG1ubW1oZl5PUF9dWklIUFJRT01QUU5RUlRWWFNTWVRPWVpcV1ldXl5fZV9dXnF2a15gZ2t3b29sam9ubmxlYllIR0hIQ0JHSUZGRkRNUk9hV1NXUVBTU1JVW09PUVZQTUlERj46OTY1ODc5Nzk6MzY1Nzk1PEM+ZXNzdnd3enl7fX18fHt8fX5+fnt9fn19f39/fn5+fn9/e3d1eX18enh8fHx8dHd2d3Z1d2tuaWhxbm9vb2prYFZXXlpYTUtUVFNQUVVPTFJTVFdYVFRZUk1YWVpWWFhWWFldV1dYaHNrXVZhdGthYV9eZGFfXllVUU5PT01JSEpMSklGQ1FQU1pXVFROUVNZU1xlVU9TVFJOS0lIQz9BOTk5ODk3ODg1NzU3ODU5OkducXR3eHp7e3x+fX18e318fn5+en1+fH1/f359fn59f358dHR1e3hycW9vbnR4cXJzeHZ1cWZkZ3JucHBxbm1kXV9fWVdPUFhWVlNUVk9PVVZYWFlTVVRMS1RWVVVVV1BTVFdUVVJdbl9STlpgW1dZO0RWWFRbZkpMUFNST05NTk5OTEpGUVBVWVNUT0pOT1VTVFxWUlVTUk9NTElISEY/Pz06Nzg3NjU5OTY3Njc1V3Bwc3d5ent8fX59fnx8fXx+fX15fX18fn5+fXx8fX1+fXxydnF4eHJ2dXFxbnBwb3B1dnRuamRkanBwcXJwbmZlZGNcXVJUWldYVVRXVFJYWFlZWVNVT0pHT1BPT01SSk9QT1BOTk9UTE1JUE9TVFUyPVhNSUBRPWNhUVNRUE5QUVBOTk1RTlRSUFNNSUxKT1JQUlJTVFFST0xNS0xMSENCQT06Ojg3NjtCNTU2Njpkb3F0d3h7fHx9fnx9fH19fX18e3h8ent9fX58e3l9fH18e3B1b3d1cHV0b3N2cHFxcHR1dmNqZ2VXaHRycnFuaGlocFZWVFVYVVdVUldWVVpZWFdVUVNGRUFGR0dIRkpESEpJR0VITEhKSEZMTVBNRy9FX1I+Mz8+am9hU1JRQEdUUVBRUFFOUU9RUExKTExPUE5OUFFRTlBPSkxNTUtHRUVEQjs9PDw5PUc2Njc3RG1wdHZ5e3t9fX18enx8fX5+fXt5dnh3eXl8fXp6dn17fHp6b3Fud3JwdnFtcHNwb3Bzc3N0ZmdgaFpXa3JzcmxtbWtuYWVQU1RSU1RPV1ZWWVlWUVFRT0A9Oz0/QUJBQ0BCRURBQEdIR0hFRkhKTUxFR0NPUkM4RU5TXWdUUVNBR1VQT1FRUE1NT01LTEtMTk9PUUxPT01ITExJS0tMS0dGRkVEPEFBPjtARTs8ODlTcHJ0eHt6e318fHt5fHp6fn58e3V0dXJ2dnp7eHpyfHt8eXltcW94cnF1bm5xcm9vb3Rzc3J1dGtnZ15lam1wa29xbWltY0xPTkxRU0xUVVRYV1VMTEtJPDk4Nzs+QD48PUFAQj0+RUhHQ0VGSUdKSkBGQUFARkhFSk9IUVJiXFFQUk9TT09QTE1PTkxNTU5PTltXS01RT0dJSENISkxMS0ZGRkU/QkM+PEJHP0I/QWRwdHZ6enp7fHt6end7d3l+fnx7cXN0cHJzd3N4eHN6e3l2d2xxb3ZxdHRsb3Fybm5vc3ZydHNycmtsZW5zaG1ubWxtbGprSUxISE9RSlFTUVRTT0tIQ0Q9OTc3OT9CPjs/QkBAPkFESkVDR0dJR0lFQkI/Pj1DQkFHSURNT2JlUU1PTldLTE5LTE5NTUxMT05TZE5KTFJJSUlFQUhKTE1OSkdJR0JBQkA/RUZFSERLbm92eXl5e3t6fHp3c3h0eHx8eXpucXJtbm9ycnZyc3h8eHZ2bXBtc3B1dGxwcHJvb29ydnVyVlZucWdseYRqbXFybm5qaG9ISkNHTU1KTVBNUE9ISkQ/QT05ODk6P0I/PEFCQUFERUdLRkNISEdHSENEP0I/P0BBPkNFQ0tOUlRMSklNVEdJSUpMSktMSUpNTU9QUlBKR0NMR0NCSklMTU9OSUpJR0NDQ0RISk1MSVlybXd5eHp7enl8dnJwdXJ0eHl2eGpxbmpsbG50dG10dXtzdHhyb21wb3ZzbnBvcnBvcHN0eWpOYGdzanR8eWdvc3FpcWhkcUdLREdISEdKS0lKS0RGQj0+PTo5OjtAQj89QUJDQ0dGSUtKRElJRkdHQ0M7QUBCPkBAQ0VDSU1QSEhLR0hLREhKTE1ISkxISUpMS01dUkhIRE5GQUNKSk1MUE1LTUpLRkdHSk5OUU5MYm1pdnZ3enl7en1ybWxza3B0dHR1aHBtamlra3RwbnR0eXByeXRvcnFvd3NvcXB0cnBydXR5a05WbXVscXt2aW5vaWt0Z2RvRktERkVHRUZGR0VHQkNAPjw9OTo6O0BDQD5BQ0RFSUVJSkxGSUlHRkZDQjtBQkM+QENEQ0RHTE5IS05IREhFSUxOTUdJTEdGR0lJTE5LSUdFTkhCRk1LTUxPTU1OTUtISElPUlJTTlJmZmZxb3N4dXt6fGxoam5la3Fsc3BmbWxoaWtsdG1wdXR3cW94dG90c3J2c3BxcnRzcnR1dXZ2WFZ1dWtvdHJrb3ZsaG1lX3BHSURGRkVDQ0JFQERCPj8+Ojs7PTo8PkNBPkFDREZKRklITEhHR0dGRUNAPUREQj5BQ0NDREdISUdNUUlGRkdLTk9LRkhJRkVERUlKSEtJRkhPS0NJTEtPTE5NT09OSkpJTFJVVVJPV2RgYW1ncXJvcnl6Z2VoaGRpbGdxbGZsbWdpa2xzbHB2dXRwbnZyb3Nyc3V0cXNzdXRzdXZ2dnl2dXR3bGp1dW1ydnFsbmxlckxIRUVIQ0JBQkQ8QkE+QT06Oj0/Oz4+QEI+QEFER0pFSUZJSEdGR0RDQkFBRkZDQkJCREVER0dIRkxRTElPSkpNTElHSEVHRURDSUlIS0pHS1JNQk5OTFBOT09NTk9LS0tPVVdWVVNYX15caWFtaW5ocnNiZGZlZGhoZm5qZm1taGtrbXJpcXZ0c3Ftdm5vcXJzd3Nyc3R1dnZ2dnd2d3d2dHd1anN1bnV0c3FyamtzTUdIRkhCQkFERTxBQEBDPDg6PD45Pzw/QkBAQERGSEVIRkZIR0ZGRENFQ0RJRUNGRUJFR0VGR0dFSU1LSFFNSktISElFRkhIRUNJSUlLTUtPU05EUVJPUFFOT01OUE1MTVNXVlhYVVhdWl1kYGliamlna19kZWZjZ2dna2dna21rbWxwcmh0dHVyc252b3FwcnR4cXNzdXZ1gpF5dnZ0eHV1d3htb3VvcnN1cXFpbnlNSEdISEJCQkZFPD9CQkQ8Nzs9Pjo+OkBCPj8/QkVGREdERUhFREVDREVGR0pFRUlHQ0dIRkhHRUNGSkpHTktMS0hKTEZJSUtIRUtLTE1OT1JUT0hTVFJQUk9RTU5RTk1QV1pWWllWWl1aWGFgYWBeaGVjYGRlaGdqaGhpZmhubGxubXFwaXV1eHJycHVwcHBydXZwdXN1d3V7fn14dnR3dnZ2eHBsdXBtc3RucHJyeE5ISEdJREJDSEU8QEVDRT04OT4+PTw8QUI8Pz5BQUZDRkNESURERUVGR0dHSUZHS0hESUhHSUdGREhLSUdLSE1LSktMSExLTEtJTUtPTk9SVVZPS1VWU1BTUVJMT1FQT1RZWllcWllbXl5dYGNeXGFja2JgZGdocoVoZ2lmam1ucG9uc3JqdHV4cnNzdHJucHF2cnF1cnV1c355jn11dXZ2dnZ4cmh1cWtydGxxdnB0TElLSUtGQkVHRTxAR0NEQDo8PkA/Pj9CQTxAPkJBRkNFRUVJRUZFR0ZISEZISElLSkZKSEhLSEZGTEhISEpHTExNTExJTUtNTU1PTFBQUVVWV09LVlVUUlJRUkxPUlJRVltbXV5bXF5eXmBgYWRdY2BlZmBlaGpkc3Nmamdna29ycW9zc25zd3dxdXZ0c21vcnVvcnNwdXJ2cnSBdnV1dXd2dXd0Z3Rya3Fya3J2bnZKS0xKTEdDRURFPEBGRERDOz8/QkBAQERBP0I/QUNIQ0ZGR0lGSkZHRElIR0lISkxISEpKSUxKRkpMSElLSkdLS01NSkpNTE5OTVBLT1BSVFhWTU1UVVRSUlFQTU5UU1JXW11eX11dYF9gYWFgYWNlYmRoYmRpamd2i2xqaWdtb3NxcHFwcHJ5dnJ1dXRzbW1zc21xcm90dXRycHN3dHV1d3Z1dXRlcXNrcHFqcnVud0tMTExNR0RDQUQ8P0VFRUM9QUFDQkJDREFDRUFBRUdDSEhJSEdKR0NHSkdISkZJTUhJSk1LTkxHS0lIS0tOUUtSUU1TTUtOTk9QUE9UT1dYWFtOUlBXXFpSV1BOVFVUVFhaX2JiX2RhXmBiXmBlYWFjaW5nYmloaG54dmxoaW1vc3JwcXJycnZ0c3Vzc3Nua3NxbXByb3R2cnFxdXZ1c3d5d3V0dWNtdGtvcGpxdG93TE5MTExHRUFARD4+REVGQ0BEQkVEREZCQ0VHQ0NJRkNJSkpJSUtHREtKR0lKSUlMSEpKTkxPS0lMSEpMS1pmSmRcS2xTSE9OX25Va3NbcXBid2NTUGF2dWh1Y2F2YFhucWJkdmluemZbbHRgbGpUX3d2aWpnaGZnbG1qbW9qbW5zcnBycnFyc3Jzc3J0cm5sdG9ucHFxdXVxcXN0dnZ1dXl3dXR0YGt0a3Bwa3FycXlMTkpKSkZDP0BCPz1ERUZEQ0RDRUVERkJGRkdERUtGRkpNTEtMTEdHTUlHSktIS0tJS0tOTE1MTExJTE1MW3NiZHBebG1VTU5mc11mZnFsbnRncGlfYVlubmJwcGJrampmb3F0ZXRub1xvdWdwTUpxeXZrYWBrZWVteGxrdmxtcHNycHJxcHFycXJycnRybW1zbm5vcHN1dHFzc3R1dXV0d3h2dXRibXVrcHBscnJxektMSUhHRUQ/QUJAPkNGR0NGQ0ZFRkVEQ0hISERFS0hHTE5OTE1NRkpOSEpLSklMS0pKS0xNTk5NTUpNTU5bcm9vbnBwbGtNUFFsV01pYnRycGFtbnVcWWxQXG5tWnFta29teHh0c2lwXV9ya3FqVXV5eG9jXmtmYmdwb2pqbm9wcnNwcXBxcXJycXFycnRsbXJtbm5vcnV0cXRydHV1dHV1enZ1dGVudWtwb2xzcnJ5SUtHR0VFRUJCQj5AQEZIQ0dESUZFRUJGSUhIRUhMS0dNTU9MTU5HTE1JTEtJSk1JS0pKS09QT05MTE5OTFxoZHVdbHFXbE5QUW1UWWtea2x2YWxkc1NlY05tWWxcdHBraWx4and1aHBdXnJraFdiY3d8b2NgZ2dhZGl0eGtubnFzc3BxcHFwcnFwcHBydWttcW1tbW9xc3Rxc3J0dnZzd3Z6dnV0aG91bHNvbXNydHZITEZJREVFQ0FCPUJBQ0ZESEdMSEVDQ0hLSUhGSkxMRk5MTFNSTEdMTEhOSklITkhKSklITk9NTkxKTk1KWnNwcG9xcW1sT1FSbllya2dvb3Fxb210XW5YYXRfbm9wb3Fyb251c3R0altedGN3eHJqbnpoYWFjZmJiaW10dXBzdXZzcXBwcW9xdHt/fn13bGtxbmxtbnByc3F0dHN1dXR4eHl4dHVrb3VtdG9uc3N2c0hLSElCRUVFQUE+RERCR0RISU1JRkNGSkxKR0ZLTkxGT0pLV1JLR0tKSk5JSEpMSUtKSEhLTU1NTUlLS0tTa2NbaV5faWNyclpfWWpuX2VlVWtfY1thYVFgbGhdalxuaWlkW3BmZHBdWlxrW21xY3BzbGRnY2RnYGBqbXFwbnR5cnVxb3BxbnmFiIeHhoWAdnNua21tb25xcnR0cnR1dXZ5eHhzdW5xdW52cXF2dHdyR0dGSURFQ0ZBQEJGRURHQkhKTEhGREdLTElFRkpPTElQSUxbUUpFSEhLTUlISkpLS0lISUZLS0tMR0hLS0xNTUxKS01OVFtcVFBUTFBPTk9PVlFPTlFOT1FKSk9QUWRxaVRZV1xbXFZZW11YXVxcY2ZhYWViY2ZfX2ZrbmltdHlydHJvcHB0hoeGhoaFhYaHg3pwbW1sa3FzdHRydHZ0dXl4eHV2cXJ1b3ZydHN1dXNHQ0VHRUVBRUNAREhERkdDSUtMSEZER0tMSUVHSVBLTE9LTFdMSUVFSElKSElLSU1KSEZHR0lHSElFRkxJSkxPTUpQXFdeUFxbYF5NWFlTXFxiXk1YWk1YYVJLWWFaUl9kXGFYW2RkVlZYXFlaWFxWWVxdYl5kYGFfZWhrZ210dHFxdHBxcoGGhoaFhoWFhYaGhoR9cmtpb3Jzc3N0d3l5eHl4d3h0cnhyeHNxcnVydE9CQ0RMTUJEREJFSUVHR0ZLSktIRUVJSktGRUhIUEtNTUpNUkhHRUFIRkpJS0xKTEpIRkRJRkRGR0VGS0hDSk1MTFVfWWBYYGFbYFRYWVReXlpfUllcUF5cWU5eXF5TWl5jXlpdYGNgWV9jW2BeW1RYV1leXWNiY2FjZWhla3Jwb3Bwbm93hoaFhYaCe4CFhYaGhoaFf3VxcHJyc3Z5eXp5eXh4eHdyeXZ4cnF4dnR2YVJKSk1JRUNCQ0dIRkhHSEtKSklERktLS0VGSUpOS05LSExOR0hFPkdHTElLTEtLS0lHREhEQ0RFQUZKRUFLTEpPW2NZX15hX1JUUldfYFxdWV5RWVxNVl9XS1FZW1BaX2FhXV5jYWBiYmJjY2VaUVlVVVxZXWNgX19jZGJob21ubGxsbHWFf4SDeXV8hIWFhYaGhYWGhoN9d3JydHh5eXl5f359eXV5dnZybnp3dnhZUUtGREdFQkVHSUZHSEhGRklHSEdIS0lMRERLS05NTEtIS0pISUY/R0dOS0tLTUtLS0lGR0NEQERBSElDQEpLSFBdYVpbZF1fVFFSWF1cXFxfWktXXExSXFlJTV5RT1xfYWNjY2NiXWRjYmRjZlhRVlRRWldaYF9eXmFhX2Rsa21qamxudn51gXp8hIWFhYWFhYaGhYaFhoaGgnpyc3V1e4WHh4eGhYSBfnhwend2eFxSTUNASUZERktKRkZGSEdHSUdGRklMSk5GREtLTU5KTElLSkhJRkJISFFNTEtPTUpLSUdHRUQ/RUNJSUNDSEdFVF1ZXlhfWV9bXVVYWFBdXVFLSlZeWF5bXVVZYVJRX19iYmBgYmJgY2JhZGRiWE9RUFFaUltdXV1dXl9fZGhnbGpubnB7e3x+e4CCg4SFhIWFhYWEhIWDhISHh4FzcneFh4eHh4eHh4eHh4WDgHx4XFNLQ0FIRkRHTVJIQ1FKRUdISEVGS0pNUEVGSUpLTkxMSUtMSUlIREhLUU9NTVBMTEtLSElDREFFRElHQ0NIRkRXVUVcVF1TVl9YT1RVTlpaTUlKVGBhW19YXl5hXU5YYVxgYF9iY2JdYWJXX19UUE9PT1dRXFtbXFxeX2JmZmVsZW9vd3x7gHt9f4CEhISEhISFhYODhYKDgoWFhnpvgYaGhoeHiIeGhoaFhYSFg35KTkZERkZIRElSYlBDVl5JR0dIREZNSlBQRUlJSktOTEtLTEtJSkdFSk5RUU5PT01NTE1IS0FEQUNER0RDQ0ZHQk1IQktLT09OTEZNRkdJSkhHTEtNT1BJTE9QT1NQS09TUlVaWVdZWFhkV09TVFBQTk1OVFJaWFhaXVxgYWRlY2dja2xwc3J5eX97en+EhISFhISEhIKEgH57gYOBfXuFhIaGhoeHhYWFhISEgoGAfUtJRUVIRkdES01dTEZHWExHSEpIR01MUVBIS0tLS01NVU5PSkpLR0dLUFNTTlBPTU5OTkdLRmBFRF9MRWdkRk5cSV5bcm1PTVVtWUxEUGBVa1dnSl1XVV5ETFFVTExTVlFSVFhXVFhVVFxVUGZaaGhkWFJqUlZVVFtcW2BgYWJhYl9maGZua2hyenx9foGEhISEg4ODgX18enJ7gXp7f4KAg4SEhYWBhIWBg4N/fnp7TElFR0ZIRUVLT1NJSkZgU0hKT0pJT01SUUxNTExPUlVST09JTE5HSE1RW1lPUFBOT09PSUpRf1FJfFlZcnRZUW1IcW5vYVZQcXFzUENrc21xc3BTb19ablhdVlxYVWtoVV1WY1pgWVtfVlZYf2p0dXVeX3ZeV2FbW2ZbX2BhYWFdX2FnbXBsX3B3dHiBgYKDg4J+fX+Adnh6bHZ+dHh9gHx+gIGChHyAg3p/gX9+d3dOSkVITU5CRExMRklLRVFVTEtOSUtSWFdRTk5PTVFUTk9RT0tLTkdNUFNbWlRRUk9QUFBKSFp4XVR4ZWhaU1VSdmd0bHBibmZqUXJPTXdtanJwc3Jxcm9vb4BdZXp1eHFxenF+c31rdX1iUmh8ZXNzb3Jye3xvfnhugHJfYGBiYVpgX2drbmtibGZnbXd+gYCCfXt4d4B0dnppcn5uc3x+d3h7foCDeHyAdXx/fHxzc05MR2BdR0FFTU1ISkpHSU9OTU1KTlZeWVVMUVNOWFpNU1NSTUtPSFFSVFlXV1FUUFBQUUtIZ3hsY3hybVtLTlZ5cHVtdWJvdlBlZUlmdnFtd2+AamZ4d2lXclFoem1panp6fWx4en9vaG9ZdnZqdnVwgF9yZn1pbHh8b15fX2JhWl1iZGdpaWRnYmNkbGxwcHN0c3NzenFyeGJsdWdyeXtzcnZ5foFzdXpufH15eHJuTktTdU5DQkZQUEhKS0lLUE5OT01QWmBaV0tUV1BhXlJWUVlSTFBJU1RVWFdXUFVQT05SSktyb3V1cXVxZGliV25McXBeRmh5V3ZUTGl5fXhgeXtzbmFdbW9jUmdxdW5teXB3bHZ0dHJsbl10fnprbXl8a3RsfGtwdnV4Xl9fYl5cX2RkaWdnZWVeYWJpaWlqa25va3FvbWpwYWNmY293eG9tcHN5f25xcGt7enRyb21MTFtWSEdFR1JQSUxNSktQUVBQUFBXXFlVTVVZVWVYUlJZXVNMTklUVFdXWVdPU05OTlFJUm1IaXdLYGR2dlZYbE9ubHtzYWpnf3ZVTFdraH1sbWx4X1pwenteYHpzY3JveHFoZH1pcnxeVExsX3Z1a2l1e3ptfnhrfHBcXl5iW15hZGRmZWVlYlpjY2lra3JzcnZnbGloZGdhYWthZ3NybGdtbXJ9a21oa3t0bW1rbU9IS0tISkhIUVBMTk9MS1JSUk9TUldSVlRQV1pWVlVUVGFfUE5NSlRTVFFWVk5OTE1PUEtIUU5QVUxLTFNUVFNUUFZVUVFOUVFYWVJOUFVUWFhYW1tVUlNXW1dYV1pPU1VXWFhSXllXXldVUFlSV1dXV1heWmdyXltbWVxdX2NaX2NjZGZkY2NiWmNiZ2ZlbW5tdWVlZ2NhZl9dZ2BkbGhmZ2tocHpoZ2dqdWpoZ2lsUElLTExNS0pTUU1RUU9MVlVUUFRVWFVaVVFaXVVVVFdVWVdPT0tNVlRRTlVTTk9NTFFQTEpSUUtRTUtMUFJVU1FSU1NJSExOT1FSUVBRVFZSWFdcV1NSUFJUVVVTWlFOU1JYVlRZV1VaVlRSVlRUVVdYVlxZXWBdW1paXFxfY1tdYmNkZmRkZGFZYGFjYWJoaGltYmFkXl9jXVpkXGJtYV5mZWZtc2RpZ2prZWRjZmhQSktMT09MTVNQTlNRUE1YV1VUVVdXV1lVU1xgVldWWVVYUlBQSk5XU1BOVVBOUU5MU1BNT1VTTlJOTU9RVVFVUVJUVU5LTU9RVFRSUlFWV1VZWltZU1VSVFdWVllbVFBUVVhVVVpWWFpVU1JYVlVXW1hZXlxVWF5cXlxbXWBgXVtiYmNnZmVkYlhfYWJeYGdkZmVhXl9dXV5aWl9aX2dgXl1dYmhrYWdmZ2ZkYGJjYk9MTUxRUUxPVE9PU1FPUVtZV1dYWllYWVZdamRWWFlaV1ZTU09KTlZUUE9UUFBQTU1SUlBSWFRRUU9NUFRWT1hSVFVVT05NUVRVVVRUUlRXVlpdXFpWVlFRVlhWW1tXUVRWVlZWWVRYWFZTUllXVlpeWVxeXlVeXF5gXFtfX19eWmJiZGhnZGRiWGFgYl5eZmNjYGJdXFxcXFlaW1hbYVxfXVxfYl9fYmRlYmRfX2BcUE1OTlJRTVJST1NUUU9VXFpaV1tbXFhaW2RxbWhkX1tYVVVXUUxNVlNNTlJPUVJPTFFTUlVaVVNQUE1RWFdSV1NTU1hNT09RVFhWVVVTVVlYW15dW1tWUU5VVlVbW1dSU1dWV1hWVFlbVVRSWlhXXF5aXl9fVGFcYGFdYGJfXGBdY2BjZ2hkZmBZY2BhX19lZF9gYltaXFtcWVpZWFdcWlxbYF5fW15eYWBfY1xZYFtRTk9OVlFQVFFPVFRTUFdcXFxYXlxeVlxeanF3eYBjXFtVVVdQTU9WU05RUU9SVFJMUlRUWVpXVU9ST1NYV1RTVVJSWk9QUlJWW1ZXV1NWWlhcXVtbXVZSTVRVVVtcVlJVVlZYWVNVWlxVU1NdWFpdXlxgYF9WYVtjYl1hZF5cYmFiXmNmaWRmXVtkYGFgYGNlX2JeWVpeW1xbWFhZV1daWlphXF1bXVxcWl1gV1tbWlBPT09ZUFVUUlFXUlRQW15eXVtgXGBVXF1oanJ9c2xnW1RXV1FOUlpTUlFUUlRVVEtSV1ZbWlpTT1NRVlZWVE9XUlNaUlRUVFhdV1hZU1hdWF5dWVpdVFROVVZXXltYUlVVWVlZVVdaXFZTV15aXV1gXWJiXVlfW2VhX2RkXl5jY2FdZWZpZGZdXWRhYGFhYmRgYl5YWl9aXFtYWFhXV1tZW2BcW1tcW1haW15WXlldUU9PUlpQWlRVVlZTVFReXmBeXmJcYFVdXmJreXRsfWtaVFlUUFBTXFRVVFVUVllXTFJbV11bXVJPVVNYV1dUUFhSU1dTVlVVW11YW1lVWl5YX15ZXFlSVlFZWFlfW1pUVVZaWVpXWFpcV1VbXl1eYGFfY2NcXl1dZWFhZmReXmRjYFxnZGhlZGFfZGFgYWBiYl9gXldYXlpcXFpZWVdWXVpdXlpZW1xbV1lcXVZYV11TT1BWWVFdVVZZV1dVWF9fYWFgY11fVV1eYmVldYF6aFdYWVNVU1ZcWFdXVlZXXVhPVV1aXl1cVFJYU1dXVVNUWFJTVlRYV1hdXlhdW1ZdX1hfX1hcVlFYVFlaWmFaXFZXWFtaW1lZWltZV15fYF9jYmFkZFxiXGBmYWRmZF5fZGJhW2ZjaGVjZmBmX19hYWFhYF9eVlVdWVtcW1lbWVhdWltbWFhZW1laWl1fXVRZXVVOU1lWU1xUVldZVlZcYGFiY2BjXl9WW2BkYV96dW9oWVpZVVdUV1taWlxZWFlgV1BVXlxgYFxUVFhQVVdWVFZXUlNVV1paW19eWl9cVl9fWl1eWV1VUlhXWVldYlpeV1hbXFtcXFtaXFpaX19gYGRiY2RlYmRaYWVjZmZlXWFiYGNdYmNpZGNnX2deYWFjYWFgXl9YVFtaWltbWFtYWFxbWltYVllYV1xbW2BdVl1dU09WWVZWWlVYVVhXWF1fYmFkYWRgXllZYWRiYGxmaF5cXFpWV1hZXFxdX1tZW2JWVFheXWFjXFJWWVBXV1dXV1ZTVVRYXFxeYGBdYFxXYV5bXltaXldVV1dbW19gXF9YWVxcXV5eXFtdWVtgYV5gZGNkZWVmYlhjZWRoZ2ReY2BgZWNcZWlkZWlfZl1jYmNhYWBfX1tYWVpZWlpYWVhXW1taW1dYWlRZXVxaYFxVXmJOU1dZVldZWFtcWFdZXmBiYWRhZGFdXllhY2JfYWBgXlxcXFdXW1tdXV9fXFpdY1laWF1gY2RfUlhZUFdXWFlZV1ZXVlxdXmBhYF9iXllhXV1eWVxeWVhVVltcYF5dX1paXl1eXmFdXFtaXGBiX2JlY2VmZWZiWmRmZmlnYl9jXmFmZFloaGJmaWNlXmJiY2FgYF9dXVpYXFlZWFhaWFdaW1pZV1hVVVtdXV1gYGJieEtYV1tZVlxbW11aV1xdX2BiZGFiYV1gWGJjYmFjYWJdW1xbWFdcXF9dYF9dW2BkXVxYW2JlY2FSXFpPWVhaW1taV1pZYF1gYmJgYWNfXGJdX11bXl1ZWFRYXV1fYF9gXFteXmBiY1xcWFxeYGJiY2VkZmRlZmRcZWZnaWZjYWJbY2dfXGloYmhpZWRgYmFjYV9gX1xdXFlcWVhXWFlYV1xaWldWWE9YWl1hY2Zmcmt/SllXXFpaX1xbXltYXVteX2FjYmFhXWJbYmRiYGJiYlxbW1pXWGlxYFxgX11cYWNfXllZY2VkYVNfWlJZWFxdXVtaW1tjYGJiY2BiZGFgY15gXF5eXllYVVtfXl1hYmBeW2BhYmZjX11UXWBhY2RkZmVnZWZmZV5lZmhoZ2RkYFplZ11hZ2hjaGhmY2BiYWNiX19fXF1bWltZWFhYVlpWXFtaVlZWTVhXXGdpa2h1eIF2dnZ2dnZ2dnZ2dnd3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d4eHh4eXl5enp6enp6e3p6ent7e3t7e3t7e3t7e3t7e3x7e3t7e3t7e3t7fHx8fHx8fHx8fHx8fHt7e3t8fHx8fHx8fHx8e3t7fHx8fHx7e3t7e3t7fYmIhoqHhIKCgoOCg4OCgoKCgoKCgoKCgoGAgYCBgICAgYCBgYGAfnx8fHx8fHx8fHx8fHx8fHZ2dnZ2dnZ2dnZ3dnd3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3h4eHh5eXl6enp6enp6ent7e3t7e3t7e3t7e3t7e3t7e3t7e3t6e3t7e3t7fHx8fHx8fHx8fHx7e3t7e3t7e3t7e3x7e3t7e3t7fHx8fHt7e3t7e3t8iYmHiYaFgoGCgoKCgoKCgYKCgoKCgoKBgYGAgICAgICAgIGBgYB9fHx8e3x8fHx8fHx8fHx8dnZ2dnZ2dnZ2dnZ3dnd3d3d3d3d3d3d3d3d3d3d3d3d3d3d4eHh4eHh5eXl5eXl5eXl5eXt7e3t7e3t6enp6enp6e3x8fHx7fHt6enp6ent7fHx8fHx8fHx8fHx7e3t7e3t7fHx8e3t7e3t7e3t7fHx8fHx7fHt7e3uHiYiJhYSDgYKCgoODgoKCgoKCgoKCgYGBgICAgICAgICAgYKBgH58fHx8fHx8fHx8fHx8fHx2dnZ2dnZ2d3d2d3d3d3d3d3d3d3d3d3h4eHh4eHh4eHh4eHh4eHh4eHl5eXl5eXl5eXl5ent7e3t7enp6enp6enp8fX18fHx9fHt6enp6e3t8fHx8fHx8fHx8fHx8fHx8e3x8fHx8e3t7e3t7e3x8fHx8fHt7e3t7e4aJiYiFhYOBgoKCgoOCgYKCgoKCgoKBgYGAgICAgICAgIGBgYCAfnx8fHx8fHx8fHx9fX18fHVwb29vb3Bwen59fX19fYSMi4uLi454KSkqKiopKz0/Pj4+Pj5tgH5+f397pdfT09PT1ryGiYmJiYiQzNPS0tLT2FolKioqKiKM29LS0tLWun1+f39/f359fHx8fHx8fHx8fHx8fHx8fHx7fHx8fHx8fHx8fHt7e3t7hIuHh4aHgoGDg4GCgoKCgoKCgoKCgoGBgYCAgICAgICAgYCBgIB+fHx8fHx8fHx9fXx8fH19dXBub29vb296gH9/f39+hpCPj4+Pk3kZGhoaGhocMTMzMzMzMmqCf4CAgHut6eTk5OToyomMjIyMipTd5uTk5eXrVBMaGhobEI/v5eXl5enHfX5/f39/f319fXx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx7e3uCjYeIh4eDgoSCgYKCgoKCgoOCgoKCgYGBgICAgICAgICAgICAgH58fHx8fHx8fXx8fH19fX12dXV1dXV1dXZ3d3d3d3d4eXl5eXl6eG9wcHBwcHBycnJycnJyd3p5eXp6en6Dg4ODg4SBfHx8fHx8fYOEhISEg4R4c3Nzc3NzfYSEhISEhYJ8fX19fX19fX19fX18fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx7e4CMhomHh4SDhIKCgoKDgYKCg4KCgoGBgYGBgYCAf4CAgICAgICAfnx8fHx8fHx8fX19fX19fXZ2dnZ2dnl3dnZ6e3h7eHd2d3p4enl5fXp5eXh4eHh5eXl5enp5eXl5enp6eXh4eXl5eXl7e3t7e3t7eXl5eXl5eXx9fX19fX17enp6enp6e3x8fHx9fX19fX19fX18fH19fX18fHx8fHx8fHx8fHx8fHx8fHx8fHx8f4uHi4qIhIODgoKCg4KBgoKDgoKCgYGBgYGAgIGAf4CAgH+AgYF+fX18fHx8fHx9fX19fX19d3d3dnZ3fXh3d316eH14d3Z5fXt7fXp8e3h3d3d3eHh4eHh5eXl5eXp6ent7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7fHx8fHx8fHx8fHx8fHx9fX19fX19fX19fX19fX19fX19fHx8fHx8fHx7e3x8fHx8fHx8fHx+iomNjImFg4SEgoKDgoGCgoKCgoKBgYGBgYCAgICAgICAf4CAgH19fXx8fH19fX19fX19fX13d3d3d3p9eHt4fHx3e3h3dnp9fHt+eXx6eHh4eHh4eHh4eHh5eXl6enp6e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3x8fHx8fHx8fHx8fHx8fHx8fX19fXx9fX19fX19fX19fX19fHx8fHx8fHt7fHx8fHx8fHx8fH2Kio2NioWDg4SCgoKCgYGCgoKBgoGBgYKBgIGBgICAgIB/gIGAfXx9fX18fX19fX19fX19fXd3d3d3fX55d3d4e3p7eHd2e318eXx6fHt3eHh4eHh4eHh4eXl5enp6ent7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3x8fHt8fHx8fHx8fHx8fHx8fH19fX18fH18fH18fHx8fX19fX18fHx8fHx8fHx8fHx8fHx8fHx8foqJjo2JhISEg4KCgoKBgYKBgoKCgYGBgoGAgYKAgICAgH+BgIB8fH19fX18fX19fX19fn5+d3d3d3d5fHl7eHx9eXt5enl6fXt7fHt9e3h4eHh4eHh4eXl5eXp6enp7e3t7e3t7e3t7e3t7e3t7e3t7e3x8fHt7fHx7fHx8fHx8fHx8fXx8fX19fX19fXx8fHx8fHx8fXx9fX19fXx8fHx8fHx8fHx8fHx8fHx8fHx/iIeNioeFhoaDg4ODgoGBgoGCgoGBgYGCgYCAgoF/gICAf4CAgHx8fX19fX19fX19fX5+fn53d3d3d3Z4eHl3eXp4enh5eXh7eHp6eXt5eHh5eXh4eHh5eXl5enp7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t8fHx8fHx8fHx9fX19fX19fX19fX19fX18fH18fH19fX19fH19fX19fHx8fHx8fHx8fHx8fX+HiIyIhoeHhIKDhISCgYKBgYKCgoGBgYKBgIGBgYGAgIB/gIGAfHx9fX19fX19fX1+fn5+fnd3d3d3d3d3d3d3eHh4eHh4eHh4eHl5eHl5eXl5eXl5eXl6enp6ent7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7fHx8fHx8fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fHx8fHx8fX19fHx8gIeIi4eHiYaEg4SDg4KBgYGCgoGBgYKCgYGBgIGBgYCAgICBgX97fH19fX19fX19fn5+fn5+d3d3d3d3d3d4eHd4dnl5eHh4eHh5eXl5eXl5eXl5eXl5enp6enp6e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7fHx7fHx8fHx8fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fHx8fH19fXx9fXyBhoqKiYmIhIOFhISCgoGBgYGCgYGCgoGBgYCAgYGAgIGAgIGBf3x8fX19fX1+fn5+fn5+f394eHd4eHh4eHZxZGpeam15eXl4eHl5eXl5eXl5enp6enp6enp6enp7e3t8e3x8fHt7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3x8fHx9fHx8fH19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fIGFiYqJioeEhYWEg4KBgYGBgoKBgYKBgYGBgYCBgYCAgYCBgIF+fH1+fn5+fn5+fn5+fn9/f3h4eHh4eHh5bWRiZV9fXm95eXl5eXl5eXl5eXp6enp6enp6enp6e3t7e3t7fHx8fHx8fHt7e3t7e3t7e3t7e3t7e3t7e3t7e3t7fHx8fHx9fHx8fH19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18goWKiomJhISGhYSDg4KBgYKCgoGBgoGBgYKBgIGBgICAgICBgH58fX5+fn5+fn5+fn9/f39/eHh4eHh4eW5kZWdlZGJeZnh5eXl5enp6enp6enp6enp6enp6e3t7e3t7e3x8fHx8fHt8fHt7e3t7e3t7e3t7e3t7e3t7e3t7fHx8fHx8fHx8fHx9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXyChouJiIqEhYaEg4OEgoGBgYGCgYKCgYGBgYCAgYGBgIB/gIGBf3x8fn5+fn5+fn9/f39/f394eHh4eHl3Z2VkZWZkZWFfaXl6enp6enp6enp6enp6ent7e3t7e3t7e3t7e3t8fHx7e3t7e3t7e3t7e3t7e3t7e3t7e3t7fHt8fHx8fHx8fHx9fX19fX19fX19fX19fXx9fX19fX19fX19fX19fX19fX19fX19fX19fIKGi4eJh4SEhoSDg4WBgYGBgYKCgYGBgYKBgICAgYGAgYCAgYF+fHx/f35/f39/f39/f39/gHl5eXl5eWtlYWJlZWFlZV5ieHdze3p6enp6enp6enp6e3t7e3t7e3t7e3t7fHt7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t8fHx8fHx8fH18fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19g4aLhoiFhYaEgoOEhIKBgYGBgoKBgYKBgYGAgYGBgYGAgIGBgn98fH9/f39/f39/f3+AgICAeXl5eXl0Y2NlZGNmY2doZGZsZF5ze3p6enp6enp6enp6ent7e3t7e3t8fHx7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3x8fHx8fHx8fH19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX1+fn6DhouGhoaGhYODg4SDgYGBgYGCgoGBgYKBgYCAgYGBgYCAgYGBfnx8f39/f39/gICAgICAgIB5eXl6d2RhY2diYmRdW2VfYV1eYGFoeHp6enp6enp6enp6e3t7e3t7fHx8e3x7e3t7e3t7e3t7e3t7e3t7e3t7e3t8fHx8fHx8fHx8fH19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX1+fn5+fn5+foSFi4eGhoaGhIODg4KBgYGBgoKCgYKBgoGAgIGBgYGAgYGBgYF+fX1/gH+AgICAgICAgICAgHl5eW9vYmJiZF5jZ19dYWFgXF9kYlttfHp6enp6enp6enp7e3t7fHx8e3t7e3t7e3t7e3t7e3t7e3t7fHx7e3x7fHx8fHx8fHx8fH19fH19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX5+fn5+fn5+fn5/hIiLhoSHhoaEhIODgoGBgYGCgYGBgYKCgYCAgYGBgYGBgYGBgX5+fYCAgICAgICAgICAgICBeXpwXWJlZGJkXmZnZ2BZYmJhY2VfXF1ze3t6enp7e3t7e3t8fHx8fHx8fHt7e3t7e3t7e3t7e3t7fHx8fHx8e3x8fHx8fHx8fHx8fHx9fX19fX19fX19fX19fX19fX19fX19fX19fX19fn19fn5+fn5+fn5+fn5+foCFjIqEhYaGhYODg4SCgYGBgYKBgYGBgoKCgYCBgYGCgICAgIGBf35+gICAgICAgICAgIGBgYF5emxiZGdjYmdmYWBgZGFiZWRjZGNeXGJ1fHt7e3t7e3t7e3x8fHx7e3x8fHx7e3t7e3t7e3t7e3x8fHx8fHx8fHx8fHx8fHx8fHx8fH19fX19fX19fX19fX19fX19fX19fX19fX1+fn5+fn5+fn5+fn5+fn5+fn9/gYeMiYWGhoeFg4SDgoGBgYGBgYKBgoKCg4KBgIGBgYKBgYGCgoF/f36AgICAgICAgIGBgYGBgXp7dGdnZmZkZGZmYF5fYWNlaGRlXmJkYHR8e3t7e3t7fHx8fHx8fHx8fHt7fHt8fHt7e3t7fHx8fHx8fHx8fHx8fHx8fHx8fHx8fH19fH19fX19fX19fX19fX19fX19fX19fX19fX5+fn5+fn5+fn5+fn9/f39/f3+CiYqIhoaIhoWDhIOCgYGBgYGBgoGBgoKCgoGAgYGBgoKBgYKCgX9/f4GBgYGAgYGBgYGBgYGBenptaGNjZ2ZnZWdmZmdiZWRlYmdbYmVgdnx8e3x8fHx8fHx8fHx8e3t8fHx8e3x8fHt7fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx9fXx9fX19fX19fX19fX19fX19fX19fX19fn5+fn5+fn5+fn5+f39/f39/f39/f4SJioiGiYeFhYSEg4KBgYGBgYGCgYKCgYGBgYGBgYKBgoGBgICBgH9/gYGBgYGBgYGBgYGBgYF7emlpZGNqZmFgZmVjY2NnaWRjYmBiZGJ0fXx8fHx8fHt8fHx8fHx8e3x8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fH19fX19fX19fX19fn5+fn5+fn5+fn5+fn5+fn5/f39+fn9/f39/f39/f3+AhIqMiIeJhoSFhYOCgYGBgYGBgYKBgoGBgYGBgYGBgoKBgYGBgYGAgH+BgYGBgYGBgYGBgYGBgXZzZWRnY2RmZWJlZmdkZmhmZWNgYGNkYHF9fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fXx8fHx8fHx9fX19fX19fX19fX19fn5+fn5+fn5+fn5+fn5/fn5+f35+f39/f39/f3+AgICFioyJiIqJhoaDgoKCgYGBgYGBgoGBgoGBgYGBgIGBgYGBgYGCgX+Af35/foCCgoKCgoKCgoKCc3NnZWRkZWlqaGZnZ2NhZmZlZmdmZWVjdX18fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fX19fX19fH19fX19fX1+fn5+fn5+fn5+fn5+fn5+fn5+f39/f39/f39/f39/gICAgICAgIWLioqJioeHhoSCgoGBgYGBgYKCgYKBgYGBgIGBgoKBgYGBgYGAf4B+dHRzdX1/goCAfn5/gYB0cmdkZWNmaWppZWNlY2BmZGRnZ2JiZWFwfXx8fHx8fHx8fHx8fHx8fHx9fX18fHx8fHx8fHx8fHx8fHx9fX19fX19fX19fX19fX19fX19fX1+fn5+fn5+fn5+fn5+fn9/f39/f39/f39/f39/f39/f4CAgICAgIB/houLiouLh4eHhIOCgYGBgYGBgYKBgoKBgYGBgYKCgYCBgYGBgoCAgH5zc3NzdHV4dXV0dHV2dXVwZmNmZWhoaWdoZ2VmZWJfZGVmY2BiZ3d8fHx8fX19fX18fHx8fH19fX19fX19fXx9fXx8fX19fX19fX19fX19fX19fX19fX19fX19fn5+fn5+fn5+fn5+fn5+fn5+f39/f39/f39/f39/gIB/f3+AgICAgICAgICHjIyIi4qHh4eEhIKBgYGBgYGBgoGCgoGBgICBgoGBgYKBgoKCgYCAfnNzc3Nzc3NzdHR0dHNzdW9jY2FnZWhoZ2pmZGVnZmhmY2JlYl5ieX18e3t8fX19fX18fHx9fX19fX19e3x9fX19fX19fX19fX19fX19fX19fX5+fn5+fn5+fn5+fn5+fn9/fn5+fn5+fn5/f39/f4CAgH9/gICBgICAgICAgYCAf4CAgYGAgIeLi4iNiYiJhoSFgYGBgYGBgYKCgYKCgYGBgIGCgoGBgYKBgoKBgIB+dHNzc3Nzc3Nzc3Nzc3N1cmdlZWRlamhoZ2ZpaGdjZWViZGNoZGd7eHVzc3R2dnl4dnR0dHZ3d3d2dHR0dXV4d3h4d3d6e3x9fXx9fn5+fn5+fn5+fn5+fn5+fn5+fn5/f39/f39/f35/f39/gH9+fHt7fX58eXl2dnZ5fHx6end2d3l7fXt4hIyMioyHh4iEhYSBgYGBgYGBgoGBgoGBgYGAgYKCgYGBgoGBgoGAgH51c3Nzc3Nzc3Nzc3Nzc3VzaGVnaGVrbGhqZ2lqZ2dnZmRkYmVkbnV0dHNzdHNzc3Nzc3Nzc3Nzc3NzdHNzc3Nzc3Nzc3N0dHV1c3V3eHl7fn59fn98f39/f39/f39/f314fH5+fXx4dXZ3eXd4dnRzc3N0dXRzc3Nzc3NzdHNzc3R0c3R0dHODjI2KiYeIhoOGg4GBgYGBgYGBgYGCgYGAgYGDgoKBgYCBgYGBgYCAf3VzdHRzc3Nzc3Nyc3NzdnZpY2hqaGpsZWZpbGhgZmVkY2BkZGZ0dXV1dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHRzdHRzc3Nzc3R2dnV1d3V4fH9+fX9+fHp4dXN0dXV1dHNzc3Nzc3N0dHR0dHR0dHR1dXR0dHV1dHR1dXR1dXV1dIaMjYuIhoeEhIWCgYGBgYGBgYGCgoGAgYCBgYKCgoGBgIGBgYGAgIB/dnNzc3Nzc3Nzc3Nzc3N2dnNnZ2pmaGdmaGhmZGlnY2NnZWVmcHZ1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dHR1dHR0dHR0dHRzdHR0dnV1d3Z0c3R0dHR0dHR0dXV1dXV0dXV1dXV1dXV0dHNzc3N0dHNzdHR0dHR1dXR1iY6MjIqHh4SEhYKBgYGBgYGBgYKCgoGBgICAgoKBgoGBgYGBgYCAgH93c3Nzc3NycnJyc3NzcnZ2dW5kXWNnZWlraGVoZ2dqamlnZXB2dXV1dXV0dHRzdHR0dHR0dHV1dXV1dXV0dHV1dHR1dXV1dXV1dXV1dXR0dHV1dXV1dXV0dHV0dHV1dXV1dXV1dXV1dXV1dXV1dXV0dHNzc3Nzc3N0dHNzc3Nzc3R0dHR0dHWKjoyMiYaGhIeFgoGBgYGBgYGBgoKBgYGBgYGCgYKBgYGBgYKBgYCAf3hzc3Nzc3JycnJyc3NzdnZ3d2liaGhnamtpaGZkZGVmaWhwdXR0dHRzc3JxcnJ0dXV0dHR0dHR0c3NycXFxcXNzdHR0dHR0dHR0dHV0cnJyc3R0dHR0dXV1dXV1dXR0dXR0dHR0dHR0dHR0dHR0c3Nzc3Nzc3Nzc3Nzc3N0dHN0dHR0dHR0dYuOjImGhYWFh4SCgYGBgYGBgYGBgoKCgYGAgIKCgoGBgYGBgYGBgIB/eXNzc3NycXJycnJzc3N3d3d3bGpoZGhpa3Z6a2VmZWhnbXJzdHN0c3JwcHBxcnN1dXR0c3Nzc3JycXBvb29vcHFzc3NycnJyc3R0dHNxcXFyc3R0dHR0dHRzc3Rzc3N0dHR0dHRzdHR0dHR0dHRzdHR0c3NycnFxcnJzc3Nyc3NzdHR0dHN2jZCMh4eFhYSEgoGCgoGBgYGBgYGCgoKBgYGAgYGCgoGBgoKBgYGAf395c3NycnFxcnJycnNzc3d3d3dzc2pnaWloeX99cW51bG5wcXJycnFxcG9wcXFxc3R0c3NycXFxcG9ubm1ubW5ubnBxcnJycnJycnJzcXBvb3BxcnJzc3JxcnJycnJycnJycnJzc3Jzc3Nzc3Nzc3Nzc3Jxb29ubm9vcXJzc3Jyc3NycnNzcnaPj4uHhoWFhYOCgoKBgYGBgYGBgYGBgoGBgYGCgoKBgoGCgYGCgX9/f3hxcHBwcXFycnJyc3Nzd3d2dnd2cnF0c252f352c3hwcHBycnJycXFwcHFxcXJzc3Nzc3JxcXBwb25ubm5ub25vcHBxcXFxcXBwcXJwb25vcHFxcXFxcHBxcXFxcXJycnJycnJycnFxcnFxcnJycnFwb29ubm1ubW5vcXJycnJycnJyc3JxeI+OjYaDg4aEgoOCgoGCgYGBgYKBgYGCgYGBgYKCgoKCgoKBgYKBf4B/d29wb3BxcnJyc3Nzc3J2dnZ2dnZ3dnZ1c3l/fnd3d29wcXFxcXFxcHBwcXJycnNzc3JycXFwcHBwb29vb29vb29wb3Bvb29vcHBxb29vcHBwcHBvcG9wcHFycXFxcnJycnFxcXFxcXFxcHBwcHBxb29ubm5tbW5tbm9wcXFxcXFxcXFxcXB7j42NhoODhYOCgoKCgYKBgYGBgoGCgYGCgoGCg4KBg4KBgYGAgYF/f392bm9wcHBxcXFxcXBwcHZ2dnZ2dXR0c3NxfYB9fX9zb3BxcXFwcHBwcXFwcXFxc3FycnFxb3yCb3Bwb29wcG9vb29vb29vb3BxcXBub3Bwb29wb29wcnJycnFxcXBxcnFwcXFxcHBwcHBwcHBwb29ubm1ubm5ubm9ub3BwcHFxcXFxcXFxcIKRjoqEhIOFhIOCgoGBgoKBgYKBgYGBgYGCgoKCgoKCgYGBgYCBgX9/gHVvb29wcXFxcXBwcHBwdnZ2dXRzcnJycnGAgoCBeXBwcHBvcHBwcHFxcXFxcXCHhnBycXBzmIJucHBwb3BxcHBvb29wb29vcXFwcG9wcG9vb25vcHFxcHBwb3Bvb3BwcHBwcHBwcHBvb29vb29vbm5tbW1ubm5ub25vb3BvcHBwcHBwcHBwiZCMiISDhIaDg4KCgYGCgoKCgYGBgYCAgYGBgoKBgYGBgYGBgIGBgH+AdG5vb3BxcXFwcG9vcG92dnVzcnFxcXFxcICDg39ycHBwcHBwcHBwcHFxcHBxcX2hgnByb4uefG5wcHFwcHBwcHBwcHBvcHBxcXBwcHFxb29vbm9wcHBvb29vcHBvb3BwcHBwcHBwcHBvb29vbm5ubm5ubW5ubm1ubm9wcG9vb29vb3BzcXWPj4uJg4KFh4ODgoKBgoGCgoKBgYKBgYGBgYGBgYGBgYCAgYGAgYGAf4B0b29vbm9vb29vb29vb3Z1dHNxcXFxcXJygIKCgXRxcXFxcXFxcXFxcXFxcXFxdZ2hd3F3n5x9b3FxcXFwcHBwcHFxcXBxcHBwcXBwcHBwcHBwcHBwcHBwcHFxcXBxcXBwcHFwcHFxcXFxcXFxcXJxcnFwcnRycnR0dHR1dnRzdHR0dXd3gpCPi4iDgoaHhISCg4GBgYKCgoGBgoGBgYKBgYGBgYGAgICBgYCBgYB/gHVvb29vb29vb25vb29vdXRzcnJycnJycnKDg4OCdnFycnFxcXJxcnJxcXJycnJxmKiQb4KjnX5wcXFycXFxcXFxcXFxcXFwcXFxcXFxcnNzcnJyc3V1dHR0dHR0dHV2d3d3d3d3eHh4eHd3eHh3d3Z3dnV2dnZ2d3h6e3x7e3t6enp6enyGkI2LiIODiIeHhYODgoGCgYKBgYGBgYKCgoGBgYGAgYCAgYGAgIGBgH+Ad3FxcXFxcG5ucG9wcG92dHV1c3Nzc3NzdYiDgYN5cnNzcnJyc3Jyc3Nzc3JzdHKTqaR5iKCdfHJzc3Nyc3N0dHV1dXV1dHV3eHd3d3d4eHh3eHh4eXl5eXl4eHl5eXp6e3t7e3t6enp5eXh3d3d1dnV2dnd5enp7fn5+fX1+fn5/gH5+gIyQi4qHg4WIi4iEg4SDgYGCgYGBgoGBgoKCgoKAgYGBgYCBgYGAgIGAf4B8enp5eXx5eHh2dXZ2dHl2d3h3d3Z3dnZ6fnx+fXx2dnd3dnV4enh4eHh4d3h5eZ+0qaSoqJd9e3l5eXh4eXl6enl5eXh4enp5eXh4eHh3dnd3eHh3eHh5eXp7e3p8fH1+fX9/f359e3t7e3p5enl5e3t/foB/fn5/fn19fX5+f35+fn6AjpCNioeEhoqLiIaGhIOBgoKBgYGCgYGCgoKCgoCBgoKBgYGCgYCBgIF/f4B/fn19fX9/f318e3t7eXh4eHh5eXl4eXh5eXl4enp6enp6e3t7fH1+fHt8e3uJr6ahtauso357enp4eXh4ent6enp5eXp8fHt6enx8fHp6ent9fHx+fn+AgoGAgYKAgH9/gYGBgIB/f35+fn5/fX1+f4CAf35+f39+fn9/f39/gH+Af4OQjoyHhoWIi4yIh4aFg4GCgYGBgYKBgoKCgoKBgYKDgoGBgYGBgIGBgIB/goOCgoGBgX99f39/f4F6enh4d3h4eHh5eHh5enp5e358enx9fXt8fX19fX19fZillqGyoJmnk32Af319fYCDgoCAf318fXx9fXt9fXx8fH19fX1+gYGChISDgoB/gYGBgH9/f4B/f39/f39+fn9/f39/f35+f3+Af39/gICAf4CAgICAhJCPi4eGhoiLi4mKhYaDgoKCgYGBgoGCgYKBgYGBgoOCgYCAgYGAgIGBgH+ChIKCgICAgH9+fn+AgH9/fn18fX19fYB/fX+Af35/gH9/fn9/gICBgICBgIGBnJyOoK+gn6KfgICBgH5+f39+f4B/fn5+f39/gYB/f4CBgYCAgYOEgoGCgoGCgH+AgYCBgYGAgH+BgICAf39/gICAgYGBgIGBgYCAgICBgoGBgYCAgYGFjo6MiYaHiYyLi4qGhoOCgoKBgYGCgoOCgoKBgIGBgYKCgICBgYCAgYGAf4KFg4KBgYCAf39+fn+AfX5+fn19fX5/fn9/f35+fn+AgYCAgICAfn9/gICBgYCXmo6YsaGYlpyFfH5+foB+fn5/f35/gIGBgoKDg4KCg4KBgYKDg4OCgYGBgYKBgoKCgYKBgoGBgYGBgoKCgYGCgYKCgoGBgoKBgYKCgoKCgYGBgoKCgoaPkY+KiImKjY6MiYaFgoKCgoKBgYKCg4KCgoGBgYGBgYF/gIGBgYCBgIF/gYWEg4KCgoGCgYCAgIB8fHx7fH18fH9+fn9+fn5+f35+f39/f39/gH5+gIF+fp+rpZakm5uWoJ+Gf359f4B/gIF/f39/f3+BgYGCgoCAgYKDg4SDg4ODgoKCgoKCgoKCgoKCgoGCgoKDg4OCg4ODgoKCgYKCgoODg4ODgoKCgoODg4KCh5KTkIuKi4uPj42Lh4SCgoKCgYGBgoKDgoKBgYGBgIGBgICAgYGBgIGBgYCAg4SDg4OEg4ODgoKCgXx9fHx9gn1+f4GCiIGCgoSCgYGDg4GBgYKDgoODho2fsqiioJidnaaoraigmZCHgYCAgYCAgH9/f3+AgICAgH9/gYODhYSEg4SDgoKCg4OCgoOCgoODg4ODg4SDg4KEhYWDg4SEgoKDhIOCg4ODg4OCgoODgoCKlJOPioqMj5GPjYuGg4KCgoKBgYGBgoOCgYGBgIGBgoGBgICBgYGAgYCAgH+BgoODg4SEhIOCgoKCfXx8fn6AgYOAg4OChIaFhoaFhIWFg4ODg4ODho2grbGmm5qgm56cnJ2hpKOdlIeDg4KDg4ODgoGAgIKCgYOCgYKCg4OEhYWEg4OChISEhIOEhISDg4OEg4ODg4OEg4SDhIWEhISDg4ODgoKCgoKCgoKBgYKCgo+UlI+Njo6RkY6KiISCgoKCgYGBgYGCg4GBgIGBgYGBgYCBgIGBgYCBgICAgIKChIKChIOCg4ODgoJ9fX2AgH+AgoGDg4ODhIaEhIOEhYWDg4GBg4OBg4uXmZeWmKCanZ2dmZqXkImGhoeGhoeHhoaEgoGCg4SDg4ODg4ODhISFhYWDhISFhISEg4KBg4OCg4SEg4KCg4SCg4ODg4OCgoKCgoKCg4OEhIOFhYWFhoaIk5OTkI+Pj5KRjIqIgoKCgoKBgYGBgYKDgoKBgIGBgYGBgICAgYGBgICAgICAhISEgoKCgoGBgoKBgX+AgYOCgICAf4CCgoGDg4KCgYODg4SDg4GDhYSCgYGGjpSTl5qcnJuUj4mHiIiHh4eIiIiFhIOBgIGBgoKCg4GCg4SEhYSDg4OEg4OEhIOBgYGCg4OEhISDg4ODg4OEhIODgoSDg4ODhIWFhoeHh4eIiIiJiY6Tk5KOj46Rko+LiYeCgoKCgoKBgYGBgoKCgoGBgIGBgYGAgICAgYGAgIGAgICDg4KCgYKCgYGAf4CBhYWFhoOCgYB+fn+BgoSCgYKDhIOCg4ODg4KChISDhIODiJCTjpSYkoeDgoWFhYOEhIWFg4KBgH9/gIB/gIGEg4OEhYWEgoKBgoOCg4OFhIKDhISEhYaGhoaGhoWFhoeHhYaIh4aHiIeGhoaIiYeGhYaGhoeIkZORkI6QjpGRjImHhYGBgoKCgoGBgYGBgoOBgYGBgYGBgICAgICBgYCAgICAgISEg4KBgoGAgYGAgYKIh4aHhYSCgH99fX6AgH+AgYGBgYGBgoGAgYKDgYKCgoGAh5uHi4eCgoKBgIGAf4GAgICAgH9+gIGBgYKCg4OEg4OEg4OCgoGBgoODg4SEg4SEhIOFhYaFh4eIh4eHh4eHh4eGhoaGh4WFhYaGhISEhIWEhYaSk5GOj4+OkI6JiYeEgoKCgoKCgoGBgIGCgoKCgoKCgYGBgYGAgYGBgICAgYGAgoSDg4KDgoGCgYKDg4iHh4iHhYSCgX5+gICAfn5/f4CBgYGCgoCBhI2DgH+AgIB/g4iOgIGCg4OBgIGAgYCAgICAgICDg4KDg4ODgoOBgYKCgoOCgYKCgoOCgoSDhISDg4SEhYWFhYaGhoaFhISEhYWEhIWFhYSEhISDhISEhISEipSTkZCQj46NiYaFhIOBgYKCgoKCgYGAgYKCgoKBgoKBgYCBgYCBgYGAgICAgYGAg4OCgoOCgoKBgoOCiImJiYiHhYSDgYKEhIOBgoKCg4SCgoSEgoOJloiEgoSCgn9/jJWCgoGChIOCh4iCgoSDg4KDg4ODg4SEg4OCg4KDg4ODg4KCgoKCgoGDhISEhYSFhYWFhIWEhIWFhYWDg4OEhISEhYWFhISEhISEg4ODg4OOlZKQkZGPjYyHhYODg4GBgoKCgoKBgYCBgoOCgYCCgYGBgICAgIGBgYCAgICBgICDhYSEhIODg4SDhIOGh4mIhoWDhIODg4WDgYCDgoWFhISDg4OChI6Zi4OFhISEgoCRmYaCgoKEg4KMkYGBhIWEg4SDgoKDhISDg4ODg4SFhISDg4KCgoKCgoSEhYSFhYWFhYODhYWFhYaFhoWEhIWEhYWGhYWFhIWEhISDhIODhJGUk5KTkI2MioWEhIODgYGCg4KCgoKBgYGCg4KBgYKBgYGBgICBgIGBgH+AgIGAgYaGhoaGhoaHh4aGhYSDhYaCgIGBgYGHgoB+f4GBj4yDgX9+fXx9jJyOgIKBgYKChJSUjIGCgYKDgY6biYODg4ODg4ODg4OEgoKEhIOEhIWEg4OCgoKCgYKCg4ODg4SFhYWFhIOEhYWGhYWEhISEhIOEhIWFhYWFhIODhIOEg4KGlJSSk5KPjYyIg4SEg4KBgoODgoKDg4GBgoKBgoKCgYGCgYGBgYCAgYGAgICAgICAhYWFhYaGh4aGhoWGg4ODg4GAgoKCgYKAf35/f4GVl4mAfX19fXuBmIyAg4GBgYCOlIyQgYKBgoKBjp2hpaCRhIKDhIKCg4OBg4SDg4ODg4OEhIKCgoKDgoKDg4ODhIWEhISEg4OEhIODg4OEhIODg4ODg4SDg4ODg4KDg4KDgouUk5KTko2NioaDhIOEgYGCg4ODg4ODgoGBgoGCgoKCgoKBgYGBgICBgYCAf4CAgICDhISFhYSFhYWEhIWCg4KDgoKDg4OBgICAgICAgJWfin5+gH2Hi36EhIOEgoODgo2JhYyCgoOCg4OLko+ZpqWXhIqIgoODgoKDg4KCg4KDg4WEg4ODg4SDg4SEhISEhYWEhIWEg4SEg4OEhISEhISEg4SEhYSDg4SEhIODgoKDkJSSkpKPi4yIhoSFg4OBgYKDg4ODg4OCgYGCgoKCgoKDgoCBgoGAgICAgIB/gICAgISDhYWEhYWFhYSFhYOEhIWDg4SEhIKCgoOCgoSBkaGKf4yFfYaJgH6FhYWEhYJ/fX19f4KEg4OEho+UlZKYoKCYlIaDhISEg4SEhIOEg4OFhoWFhYSFhYWFhYSFhoaGhoWFhYWFhYWFhYWGhoWGhoaFhoaGh4aFhYWFg4SEhIeTk5OSkoyKiIWGhYWCgoGBgoODg4OCg4KBgYKDg4ODgoKBgIGAgICAgICAgH+AgICAhYWFhYWGh4eGhYWFhISFhYSEhISEg4ODg4OEhYOJkYOEi4WCgYF+fYGHhoOAfn5/f35/gIOEg4SHmJebmJaZmJqThoSFhYWEhYSGhYWFhYaGhoWGhYWGhYWHhoaGhoaFhIWFhYWFhIWGhoaHhoaGhoaHh4iIiIaFhYWEhYWGjZSTkpGQi4qHhoeGhIGCgYKDg4ODg4KDgoGBgoODg4KAgYGBgICAgICAgICAf4CAgICHh4eGhoeHiIeHhoaEg4ODhIODg4OEg4ODg4OEhISEgYKCgYmBf359foWBf39/f39/f36AgISFg4ybiY2ZmZaUk42HhoaFhoWFhoeHh4iGh4eGhoaHh4eGhoeHhoaGhYODhIWFhoSFhYaGhoeHhoaGhoeHh4eIiIeGhoaHh4eRlJORkZCLiYiFhoWDgoKBgoODg4ODgoKDgoKCgoOCgYCBgICBgICAgIGAgIB/gICAf4aHiIeHh4eIiYmIiIODgoKDgoSEhIWEg4KCg4SEhIOBgICAhIR/fn1+gH9/f39/gIB/f4B/f4aElpmAfZGYmJeVj4iHiIiIhoaHiImJiYmIh4aHh4eJiIaHh4eHhoaFg4OEhYaGhYWFhoaGh4eFhoeGh4aGh4eHh4eHh4eFh5OTkY+RkIuHhoWFhIKCgYGCg4ODg4ODgoKCgoGCg4KCgIGBgYCAgICAgICAf3+AgYB/hoiIiIiHh4iJiYmIg4KCg4ODhIWHh4aFg4OFhISDg4GAgIGMiYGAgYGCgYGBgYB/gH9/fnt6gIufoZONmpuXlZKNiYiKi4qIiIiJiYuLioqIh4eIiIiHh4iIh4eGh4aEg4OFh4eHhoWFhISDhYWEhYWGhISEhYWFhoWGhYOJlJKQj5GOioaFhoWDgYGCgoKDg4ODgoKCgoKCgoKCgYGBgYGBgYCAgICAgIB/gICBgH+GiYiIiYeIiImJiIiEgoKDg4KDhImKh4aEhIWEg4OCgICAhISCgoKDg4KCgH9+fX19fX5+fHt7laOcm6Ghn5CCiouJiImLiomJiImIioqJi4mGhoaGh4WGiIiIiIaGh4SDgoSHiIiIh4WCgoGDg4KDg4SCgYKDgoGEg4SDgY6TkpCPj4uJhYWGhIKBgYGBgoODg4OCgoKCgoKCgoGBgYGBgIGAgICAgICAgH+AgIGAf4WIh4eHhoeIiIiHh4SCg4OCgoOFiYqJh4WHhYSFhYKAgYOEgoOCgoODgX59fX5+fn5+fn1+fX2Bk5WWoKGblIeJiIeHh4iHh4mHh4aIh4aJiYODhIOFhISFhYaIiIaFg4KCg4WHhoeGhoSCgoOEgoODhIKBgoGBgYODhIOEkZKQjo+Oi4eEhoaEgoGBgYGDg4ODg4KCgoKCgoKCgYGBgIGBgYCAgIB/gIGAf39/gIB/hYaGhYaGhoeHiIeGgYKEhIOChYeIi4qGhIaEgoaGgoKEhIODg4OCg4F9fH1/gH9+fn59fH1+fHp/j5SZm5qalY6DhIaFhYODhYSEhISEhIWEgoKCgYSEgYKDg4WGhYSCgoGCgoODhYSEhIWEhIaDg4OFg4KDgYKDg4SFhIeSkY+Nj4yJhYSFhIWCgYGBgYODg4ODgoKCgoKCgoKBgYGBgYGAgICAf4CAgYB/gICAgICDhIWEhYWFh4eHh4aAgYGFg4OEhYSHiIWCgICAgX9/gYSEg4ODgoKAfX1/gICBf31+fn18fX17enqDj5GOlZeYj4GBgoKBf36BgYGCgYOBgoGCgoKBg4SAf4CAgYKCgICAgYCBgoGDgYGChIODhISCg4SDgoKBgoSDhYWGi5ORj4+Pi4iFhYODhIGAgYGBgoODg4KCgoKCgoKCgoGBgYCBgYCBgH9/gIGBgICAgH+AgIKCg4OChIOEhYWGhn+BfoCBgICAgIGDgn9+fn5+fX+ChISCg4ODgn59fn+AgIGAfn19fX1+fXx6e3uGjI2RlJaFf39/gIB+fYB/foCAgX+AgIF/f4CBgX59fX+AgX9/fn+AgH+AgICAf4CCgICCgYCCgYGAgYGBgYKEg4aPkpCOj42Kh4eGg4ODgYGBgYGCg4ODgoKCgoKCgoOCgYGCgYGBgICAgH+AgICAgICAf39/gYGDhIGCgoOCg4SFgIB/fH19fn19foCAfn1/fn1+gIODg4KCgYF/fX1+f4CAgH99fX19fHt7e3p6enuJjY2SiX5/f35+f35/gH9+f3+Af4CAf359fn9/fn18fn+Af35+f3+Af39/f4B/f39+f4CBf4B+f39/gH9+f4B/hZKSj46Pi4uHiYWEg4KBgYGBgYKDg4ODg4OCgoKDg4KAgYKBgYGAgICAf3+AgIB/gIF/f36BgYSEgYKBg4OCg4OBgH98fn9+fX5/f4B/foF/f4CBhIOCgYB/f359fn5/gICAfn19fX17e3x6enp6eX+OjpSKgn9/fn9/f4CAf35/f4CAgoB/fH5+f35+fXx/f4B/fn5/foB/fn5/f4CAfn5/f39+f35/f35+fn19fX2Fk5KOjIuKiImIhISEgoKCgYGBgoOCgoOCgoODg4ODgYCBgYGBgYCAf39/f4CAgICAgIB/foCBhIOCgYGDhISDhICBgICBgIGAgYKCgoGBgoCBg4ODgYGBgYCAfX19fn5+f359fX19fXx8fHt6enp6eYOPi5SUgoKAgIGAf4F/gICAgYGCgoB+gH5/fn5+foGAgYB/f39/gICAf39/gYB+f3+Afn9/fn+Af31+fn17fIaTkYyLioeHioiGhoSEgoGBgYGCg4ODg4OCg4OCgoKBgICBgYGAgH9/f39/gICAgICAgH9+fn+BgYGAgISGh4aHgoSDhYKBg4ODhYSEhISEg4ODhIKCgoKCgX5+fX19fn6AfX19fX19fX19fHp6eXl5eoeIj5aHg4GCg4GAgoCCgYGDgoODgYGCgIGAf4CBg4GEgoCAgYCBgYGAgYCCgX+BgIF/gIB/gICAfn9/fnx8iZSQiomIiIiJiIaGhoSCgoGBgoKDg4ODg4KDg4KCgYCAgICAgYGAf39/f4CAgICAgIGBf359fn5/f39+g4aHh4iChYSFg4SFhIWGhYaGhoWGhYGBg4ODgoKAfX19fX19fn59fX19fX18fX18e3l5eXl5fIKEjYeCgoSDgoKDhYeCg4SDgYKCg4OCgoKCgYKFg4iFgoGCgYKDgYGBgYSDgoOCgYKCgIGBgIF/gIGAf36Ok4yHiIeIh4aGhYaGhIKDgoGCgoODg4ODg4OCgYGBgH+AgYGBgYB/gH9/gICBgH+AgYB/fn19fX5+f36Ag4SHh4SGhoaFhoaHh4aHh4iHh4eGf32AgICCgX59fX19fX19fX19fX18fH5+fnx7eXh4eXl6foGDf4KKhIOEhISXl4ODhIF9foGBgoGBgYKBg4aIjIWDgoKBhIKDg4KDhYSEhYODg4OCg4OCgoKCg4OCgpGQi4iIh4mHhoaEhoWEhISDgYKCg4ODg4ODgoGBgYCAgICBgIGBgH9/fn+AgICAf4CAgH9/fn1+fn+Bf4CCgYWFhYeGh4eHh4eIhoeHh4eGh4V+fX18fX9+fX19fX19fX19fX19fXx7iJKCe3x6fIZ5eXp7fX98hZGDg4OEhJSTgIGBf39/fn6Ei4B/gICEhpCJhYSCgoGFhYuCgYKFhYaGhISFhYOEhIODhIOEhISIko+MiYiIiYeHh4WGhYSEhIKBgoKDg4ODg4OCgYGBgYB/gIGAgICAf39/f4CAgICAgYGBf39/f4CAgIGBgYGBg4OGh4aGh4aGiIeGhoaFhIOFhH59fHx8fX18fH19fX19fX19fX18fH+RlZaDe3qElHx5enp6e3t/goCBgYOCgH59f397iJF8fI6Wf31/f4KGioWDg4SDgoONiX9+f4OEhYWDhIaFhIWFg4SFhYaEhI6Rj4yKioyJiImHhYWFg4ODgYGCgoKDhIODgoGBgICBgICAgYGAgIB/f3+AgIB/gICAgX5+f4GBgoKCgoODgoOCgoWGhISFhYSGhIOEg4KBgIKAfn19fHx9fXx8fH18fH18fX19fHx8e4uRl4x6e3yBenl6e3x5eHx9foB/gH99e3x/fn2ClZF/hIh9fH5/goR8fIGChIN/f4eDfYKBgIKCgIODhISEhISChIOEhYGEkZGOi4yMjoqJiYWFhYODg4KBgoODgoKDg4KCgYGAgIGAgICAgICAgH+Af3+Af357gICBenyAgYKDhYODhYWFhYODg4SCgYKDgoOCgoGBgIB/gX5+fX19fHx8fHx8fHx8fHx8fHx9fHx8fn6Kgnt6e3p4ent7fH17fn5+f35+fn19fICBgH2Gj4F+fYJ+f36Agnx8gH+CgIGAfnx7ioJ9gH9+gYCAgYKBgoCAgIGAf4uUkIyLjo6NiIiHhYWFhIOCgoKCg4OCgoODgYGBgICAgICAgH9+fXx7fHx9f3+AgHx6gYF4e4CCgYOFhIOFhYaHhYSAhpSIgIKBgYGBgH9/f39/fn5+gHx8fHx8fHx8fHx8fHx9fHx8fHx9fHl6e3t4eHl7e3p8goCBf4CBfX9/gH99gIKCgICAgX+CkYF/f4CAfoB+fn9+gIGBfX19e319fXx9fHx9gH+AgH6Afn6ClJKNjY6Oj4qFhoaFhISFg4KDgoODg4OCgoGBgYGAgICBgICAf4CAf39/fXt6fICAgHh+gXd7gIF/goKCgoKEhoeGhn6IlYp+gIGAgIB/foB+f39/fn+Bfnx7fHx8fHx8fHx8fH19fHt9fHx8e3x8fHp6eXt8en2Fg4OAgYF+gH9/gH6FgoF+gH9+foCFhoKAfn6Dhn99fH5/gIGAf39+fX19fX57fH1/f3+AfX9+f4yRjo2Njo2Nh4SGhoWEhIODg4OCg4ODg4KBgYGBgYCAgYGAgYGBgYGAgH9/f397en9/e3mAd3p/f31/f3+Af4KEhoaFf3+FgX5/gIB/gH5+f31/gIB/gIB/f318fHx9fn18fHx9fX19fH58fXx7fXx8ent6fH19f4aFg4CAgH1+fX5/fouEgYd+fXx8f36CgX99fX19gXx7fXx+gYSDgYB+fn5+fXx+f4B9foB+f36Eko2NjI+NjIqGhIWEhISDg4OCg4KDgoOCgYGBgYGAgYGBgYB/fXx8fH1+f39/f397e399d352eH59fH18fX5+gYGCg4F6fn58fn6AgH6Af35/fn+AgH+AgH9/fn9+fn5+fn1+fn99fH59fn19fXt8fHx7e3p9foCAg4OCf35/fHx8fXx8gYN+jH58e3t9fn1+fn17e3t9fHt7e3uAhoSChIOBf4B+f4KCgn9/goJ/gIuQjY2MjYuKiISEhIODg4ODgoKCgoKCgoKBgYGAgoGBgYKCf3+AgIB/fn18fH5/fn55fX52e3Z4fXx8fHt9fX6BgICAf31/f31+f39/f4B/f39/f3+Af4GBgH99gH9/fn9+fn5/f3yCfX59fX17e319fHp8fH2BgoGAgIB9fX18fHx8fH18fnt/fnt7e3x8fH18e3t7e3x8enp9en6CfoKEhIKAgoGFhoWFhoaHhYGEkY+Ni4qLh4eFgoOEhISEg4KCgYGCgoKBgoGBgYGBgoGBgoKAgYKBgYCAgH9+e3x+fnx6fnh5dnd8fHx7e317f4GAf35/foB/f35/f35/gH9/f39/f39/gYKAfn6BgIB/f39/f39+fYN8fH19fH99fX19e3x+fn5/fn5/fnx8fXx8fXx9fnt8e3x8fHx9fH18fXx9fHt7e3x5e3x7e316fX5+f4CAg4eJiYmKiYqJhYiSj42JioeFhYOCgoOEhIOCgoKBgYKBgYKBgYGBgYKCgoGCgoCAgX98e3p6eXt9enx+fnl8eXh4dHx8fHt8fHx+gH9+f39/gIB/fn5+fX+Af39/f4CAf4CDgoB/gIGAgIB/f4CAgH58eXx+fX59fX5+jIZ9fX57e4ODfX19fH18fX19fX19fH17fXx9fX59fn19fX18e3t7fHt8fHt6e3t6enp7fn6ChoiHiIuKi4uJjJGQjoqJhoWEgoKCgoODg4OBgYGBgYGBgYGBgYKCgoOCgYKBgIGBf3+Af356eHl5en5+e3l6eH5zfHx8e3x8fH5+fn5/gH+AgIB/fn9+gIF/f4B/gIGAgoSDgYCAgYGAgX+AgYKBf39+f35+gH57foGSjHx9f4qAjYx+fn19fX59fX59fXx8fX19fXx9fX1+fX1+fnx7e3t8fH18e3p7e3l6eXl5e35/g4OEh4mKiImOkI6MiYmFhISCgYKCgoKCgoGCgoKBgYGCgYKCgoGCgoKBgoKAgYGAfoCAf39+e3p5e319eHx6f3KBfXt7fXx8fn59fYGBf4GBgX9/gH+AgX+AgIGCgYGFg4SCgYGCgYKCgICBg4KAf4F/fX6Afnx/f4mCf36DkYSEg4F/fn18jYd9fX59fX1+fnx9fXx9fX5+fX5/fH18e3x9fnx8e3x9enp5eXl5ent+foCBg4eEiI+Oi4uHhYSEg4KBgoKCgoGBgYGCgoKBgoKCgoKCgoKCgoGCgn+AgIB+f39/fn5/ent5fX16enp9cX6Cent9fX19fXp4f4KAgYKCgICBgYGBgICBgoKCgoaFhIKBgYKBgoGAgIKEgX9+gYB9foF+fX5/gIB9foCEgH5+f31+fX2KhX1+f31+foB+fX18fH5+fn99f4B9fX18fX9/fHx7fH17e3t6enp6e3x9fn1/goCJjouMiIWFhYSDgoKCgoKCgYGBgoKBgoKCgoKCgoGAgYKBgYKCf4CAgH9/f39+fn59eXp6fXx5d3t0e4d8dHd9fn17e3Z2fYCBg4KBgYKCgoKBgYGDg4OChYaEg4CAgIGDgX+AgYSBfn6Af31+gH59fn6AgH+Bfn+Af39/gH99f39/f3+Afn9/gH58fX18fn5+foF/gH2CgHx9gIB9e31+fXx8e3x8e3t7fHt8fH19fIqKiYmGhoWFhISDgYKBg4KAgIGCg4KCgoOCgoKCgoGCgoGBg4J/gIGAf39/fn5+fn57enp8fHt2e3R3f352cnt+fnt4dnd8gIGCgoKBgoODg4OCgoSDhIOFhoOCgX9/gIKAf4CAg4F+foB/fX+AfX1+foCAf4J/gYCAgICBgH1/f3+AgICAgIB/fnx9fX19fn59g32AfoKAfX6AgX98fn59fX17fH58fXx8fHt8e3x+ioeHhYaIhYSFhIKCgoGDgYCAgoKDgoKCg4ODg4KBgYGBgYGCgH6AgYB/fn5+fn5+fn56e3p9goN9dXF6fHpxen59eXh0dICAgoKCg4KDhYOEg4KDhISEg4WEgYGAgH6Agn9+f36Bf35+f4B9foB9fX1+gH9/gYCBgICAgIGBfn6Af4GAf4CAgH9+fX19fn1+fn19gYR/gH9+f4GBf31/f319fn1+fn1+fHt8enx7eoCIg4SEhYSEhIWDgYKBgYKBgICCgoOBgoOEg4SDg4KBgYKBgYOAfoCBf35+fn5+fX5+fnt7en6Jh354cnl9f3F6eHt4eXV1fYKDgYODg4OFhIWDg4OEg4OEhYOBf3+Af4CBfn19fn9+fn5+gH19f3x9fX6Bf4CAgIKAgIGAg4KAf4B+gIF/gIGAgH9+fn1+fn5/fX6FhYGBgX+Ag4F/foGAf35/f4B/fn17ent6fHt6goWAg4KCgoKCg4GBgYCAgoGAgIKCg4KBg4SDhIKEgoGBgoGCgoB+gIF/fn1+fn5+fX59fXp7fIWEe3tzeXt8cHd1dnd5dXR6hISBhISDhIWFhoSDg4WEgoODgoCBf39/f4B9fX1+f31+f39/fn1+fH19foF/gIB/gIB/gICDgoGAf36AgH+AgYCBgH9/f39/f4B/gIGCgoKBf4CDgn9/g4J/f4B/gX+Af3x6fHp8e3yCgH+Cf3+BgIKCgYF/f3+BgH6BgoKDgYGDg4KEgoSCgYGBf4GCgH6AgH9/fX5+fX19fn19e3t6gH94fHZ5enxxdHh3dnh1cnmFhYKEhIKEhYWGhISChIOBg4GAgIF/f4B/gHx9fX6AfX5/f39+fX98fn5+gH+BgH9+f4B/gYOCg4B/f4GBgIKBgYGAgIGAgIB/gIGAgIKDgYF/gISAfYGDhICAgX+BgYKBfXp7e3x8fYB9f4B8f399fYGAgH59fX9/foKBgYKBgIKCgoKBg4KCgYB/gYKAfn9/fn99fX1+fX19fX19ent7fHZ9eXh6enJ1eXl2d3dzdYaFg4WFgoSEhYSEhIGDgoGDgX+AgX5+gH6AfX19foB+f4B+fn99f3x/f3+BgIF/f3x+gH6AgYKDgYCAgYOEgoGAgYB/gYCAgYGAgYGBg4OBgX+Ag4B+goOEgICCgYKChIJ+e3t8fHx9fn1+fXp+fX14fn9/fHx8fn5+gYCBgYCAgoGBgYGDgoGBf4CAgoB9fn19f319fX59fH19fX16e3p8dnx6d3t4cnZ5e3Z2dnN0hoSEhYWChISFhIODgoOBgYOBgIGBfX+BfoF9fX1/f39/gH5+f319fYB/gIGBgX9+fH5/fn5/gYJ/gYGCg4aFgX9/fn6Af4CBgICAgIKCgYCAfoCCf3+BgoOBgYOCg4OFg399fX18e3x8eXp7en55e3l4f357fHt+fX1/f4F/gH6BgICBgoOCgYF/gIGBf31+fH1+fX19fX18fn58fXx5e3x4enx3endzeHd6c3Z2c3SFhISGg4KEhISDgoKCg4GCgoGAgYF9gIB+gH1+fX5/gIB/f39/f3x+gH+BgIGAf359f39+fn+BgH2AgIGDg4N/f359fn5/f4CAgH9/gYKBgH99f4F+f4CCgoCBg4KEhIaEgH5+fHx8fHp5dnl5enl2eXZ+fHt7e359e399gH59fX9/f3+BgoGBgX5/gYF+fX18fX19fX19fXx+jYF8fXl7e3p5fHd4eHR1dXhyd3d0doaEhIWEg4ODg4OCgYKDgoGDgn+Bf35/fn+AfX19fX6AgIB/f39/fH9/f4GAgYCAf3yAf35+foB+fX5+gYGCgn5/fn1+fn5+f3+Af32AgIB+fn1/gX5+gIKCf4KDgoOEh4SAgH58fXx8e3x1eXl4eHh5d3t8e3t7f4V9fn1/ent+fn59foGAgIGAfX6BgH59fXx9fX19fX18e32Dgnx8ent7e3p7d3Z4dXJzdnB4eXJ4hYWFhYOEhIOChIKBgYKBgIKBgIF/fn5+foB+fX58foCAgH+AgIB8gH6AgH+BgYB/fYB+fn5/f359fX6AgYGAfn9+fn59fX5/fn9+fH6Af35+fn+Cfn6AgIF+gYOCg4OGhICBfnx9fHx7fHh3e3h1eXd3eXx6e3t9kod9fH13en1+fn19f35+gH98foB/fn19fH19fX19fHt8ent9enp4e3x6ent4dHh1cXJ0cHh4cXmEhYWFg4SDgoODgoGBgoKAgoCAgIB9fn5/gH18fnx/gIGAgICAgHx/f4B/f4GAf399gX9+f39+fX18f4CAgIB+f35+fn18fn9/f358fYB/fn1+gIJ/foCAf36ChIKCg4WFgoJ+fXx7e3t8eXd7eXd4d3d4e3t6e3yFiX17end6fH19fHx9fX1/fnx9fn59fX18fX5+fX18fHt6enx7e3p5enp7enhzd3VxcXNveHdxe4WGhYWDhYKBg4OBgYGBgoCCgICAgH5/fn9/fXx+foCBgoGAgIGBfX6Af35/gX+Af3+BgH9/f319fH1/gICAgH9/f35/fXx+f39/f319f39+fn6CgYF/gIB/foGDgoKEg4SCgn5+fHx6fHt7eXt6d3N2d3h5e3p7eXp/fnt7d3p8fXx8fH59fH19fH19fXx8fX19fX99fXx9e3l8fHx7enp6enp6eHN2dXBwcm93dnJ7hYaEhYOEgoGDgoKCgYGCgYKBgYGAf4B/f39+fX9+gICBgYJ/goF9foF/f4CBf4B/gIJ/gIB+fH58f3+BgICAf4B/f4B+fX5+f4B/f39/gH9/f4J/gICAgIB/gYGAgISBgoKAf39+f3x9fn56fYR+dHx9enp6enx5eXp6hoV3eXx8fHx8fXx8fHx8fX19fHx9fX19fn19fX16eX18fH16enp6enp5c3V1b29xb3d0c3yFhoOEgoOCgYKBgoKCgYKBgoGCgYCAgICAgH59gH+Af4GCgn+CgX+AgX5/gYB/f4CAgn+Bf319f35/f4KAgICAgIB/gIB+fn1/gH9/gIB/f39/gH+AgICAgH+AgYCBgYGCgYCAf39/fn1/fnuBko16fH18e315e3p6eHqBgXh5e3x8fXx8fHx8fHx9fX18fH18fn1+fn59fHp8fHt8fXt5enp6eXl0dXVvb3Fwd3N0fYWGg4OCg4KAgYCCg4KAgYGCgYKBgYCBgIGAfn6Af4GAgYKCgIKCgICCfoCBgX9/gX+BgIF/fH6Af3+AgoCAgICAf3+AgH9+fX6Afn2AgIB/f3+AgICAgYCAf4CAgYCBgYKBgICAf39/fX5+fIGGiXx8fnt7fnl6e3p7j393d3l7fHt9fHx8fHt9fH19fX18fXx+fn5/f358enx9e319e3l6e3p5eXN0dW5zcXB4cnV6hYaDg4KDgoCAgIKCgYCCgYKCgoGBgYKAgYF/fn9/gYGCgYKBg4OAgYJ/gYGBf4CAgIB/gX99f4F/gICBgICAf4B+gICAf359foB+fn+Af39/gH9/gICBf4CBgH+BgIGCgoGAgICAgIB9foB9gIOCe35+e3x9e3p8fHuHenh4eXx8fH17fHx9fX18fH19fn19fX5+f3+Af317fHx8fHx7enl7e3l5c3J1bnZycHhxdXaFhYOEg4KCgYCBgoF/gIKCgoKDgYGDgoCCgYB/gICCgoKBg4KEhICBgX6BgoF/gICAgH+Cf36AgYCCf4CAgIB/gH+AgIB/fn2Af35/f4CAgH+AgH+AgYF/gICAgIGAgYGBgYGAgYCAgH9/gH5/fX59fn57fXx9e3x8d3h1eHh5e3x8fXx8fHx8fX5/f39/fn19fn9/gIGAf3x9fHx9e3p7eXp8eHpzcnVud3FxenF2d4WFg4SDg4KBgoKDgICCgYSDg4SBgYOBgoKCgYCAgIKDgoCCgoSDf4GAfoKDgICBgICAf4CAf4GAgYKAf4CBgH9/gICAgIB/f4CAgH+AgICAgIB/f4CBgYCAgICAgYGAgoOCgoCCgYGCgYB/f4B/gId+fnx7fXx7fX54d3Z5eXp7fXx8fXt8fH19fn5/gIGAfn1+gICAgoGAfH59fX58d3t6ent5eXNxdW53cHV6cXZ5hYWCg4KDg4KChISAgIOBhoODhIGChICEg4KCgICCgoSBgYKBhIJ/gIB/gYOCgYCBgYCAf4GBgYGBg4B/gIOCf35/goGAgH9+gYCBf4CAgYCBgYCAgIKBgYKBgX+BgYGBgoOCgoOBg4OCgYCBgH9/hH19fXx/fXp9f3t6dnp4eXt7fH19e3x9fX19fn+AgYGAgH+AgICDg4B8f35+fn15eXt6enp5c3J0b3dxd3lzd3uFgoKCgoOEgoOEg4CAg4OGg4ODgoKEgYSDgYOAgIKBg4GCgoGCgX6AgICCgYKBgYKCgICAgICCgoGEgH6Bg4J/f4CDgoCBf4CCg4KAgYKBg4KDgoGBg4KChIGAgYOBgYKEg4KEhIODhIODgYGBgoCCf4B/fYB8enx/fHt3fHl5eXt6fX59fHx8fH1+foCBgYCAgIGBgYSEgH2Af39/f357e3t6e3p0cHhxeXR2eHR2e4SCg4KDg4SChIODgYKChIaEgoOCg4SBhIOBg4CBg4KCgoKCgIKAf4GAgIKBgoGCgoKBgIGBgYOCgoOAfoGDgn9/gYSEgYN/goKBg4KCgoGEg4OEgIKDgoOCgoGCgoOBg4SDhISEhISFg4SCgYOCgYOBgYGAgH58fIB9fHh8eXp5ent9f3x7fHx9fX18fICAgICAgYGBgYKBf4CAgICAf3t7e3p6enVweHd5dnV8dXZ8gICDgoODg4OEhISBgoOFhYWDg4KDhIKEhYKCgYKDg4GCgYKAgYB+gYCBgYKDgoKCgoGAgYKCg4KCg4B/gYOCgICChIODgoGCgoGDgoKDg4ODg4SAgoOCg4OBgX+Bg4KDhYKEhISEhISDhISChIOEhIKBgoCBgHt9gH58eXx6enp9fHyBfXp8fH19fHp7fn5+gIB/gYGBgICAgIKBgIB/fX18fH18dnJ3eHh2dH92dX2Hh4OChIWDg4SFhIGChIaEhIOCg4SEgYOFg4KCgoODgYOBgoCCgH2AgIGCg4KCgoKEgoCCgoODgoKBgICBg4KAgYOFhIOCg4CCgoOCg4ODg4OEg4CCg4KEg4KCf4OBgoSEgoODhISEhIOEhIOEg4WEg4ODgoKAe4CBf3x8fXp6e32AfX9/fHx6fH59fH19fn5/f39/gICAgH9+foCBgICAfnx9fn5/fn18fHh2f3Z3f4SHg4KDhYODhIaEgYKFhoWEhIODhISChIWEgoKDg4SCg4KDgoKBfoCAgoKDgoODg4SDgYKCg4OCg4KCgYGDgn+Cg4SDg4KEf4KEg4ODgoSDg4SCgIOEg4SDg4KCg4KChIOCg4OEhISEhIWEg4OEhYSFhIOBgoB9gYKAfXx8e3x8gH19foB+fn1/fnx8fH19fn5/fn+BgYGBgH9+fX6BgYB+fn1+fX59fX5+f3+AfH2AgYKCg4OGg4SDhoSBgoiGhYSDg4SEhYGFhYWDg4SDhIODgoOCg4F+gYGCg4SCg4OEhIOCg4KEg4ODgoKDgYOCf4KDg4ODgoOAgoWDg4ODhIODhIOBgoSEhYODgoODg4GEg4GDg4SEg4SEhYSEhIWFhYWEg4ODf36BhIB9fXx8fHx/gX5/f39/fX99e3x9fX19fX5+f4CBgIGBgH99fH6Cf39+fn5+fX1/f39/gICAf4CEhISDhIWDhIOFf36CiouFhYSDgoSFgYaGhoOEhISEhIODg4OEgn+BgYODhYSFhIWEg4KEhISFhIODgoSDhYKBhISFhYaEgoCDh4SDg4OFhIWFhIGEg4OHgoOCg4GCgYSDgoODhIODhIWEhYWHh4aHhYSEhYSBf4GDf35+fH5+fX+BgH9+fHx/f358enx9fX19fX5+fn9/gIGBf319fIB/gH5+fn5+f3+BgYGBgYKAgYWFhIOEhIKEg4aAgoSFi4mEhISEhYWDh4aGhISEhIWEhISEg4SEgYKDg4OEhIaEhYSDg4SEg3yDhHuBhHd5g4F9hH5+cnWDgoF2foOEgH2BdYF5g39/f36EhIKDgoOCg4SDhISFg4SFhoSFhn2Den1+f4N7hYOBhIOAf31+f35+gYOBfXt/fX6Afn18fHx9fX19fH19foB/gYJ/fX18f4GBgICAgH+BgYGBgYKDg4KChoSEhIWEgYOEhYOEhYOKiIWFhYOFhYSGhoaDhISFhYWEhYWEhIWCgoOEhYWFhoSFhIOEhYWCaICFanx7cXF8gXOGc3R0fYKDdXNxg4ZzcHVyc3SDdnt9dYF/goOBgnZ5hYCDgIR/hYSChYSCaHpyc3N8gHKChH6Dg32BfX5/fn+Cg4J8f4F9f4B9fXx8fHx9fXx8fn1+gX+BgX99fX2AgYKBgYGBgIGBgYKBgoKCgoSHhIWEhYSCgoSGhoOFhIaIhoaFg4aGhoeGh4OFhYaFg4KFhoSFhYODg4SEhoaGhIaEg4SEhn1we4FweXZ+g3+CbnlwdXN8dnl5hnKEg3B2eHF2dHR1cnN0dml/gG5yb3R2bnVsd216c26Ah3ptfXJzdnN2bW53bHB5bHV9f358foGAgX2Af32Af4B/fX18fHx9fH1+f32Af4CAfnx/foCBgYCBgICAgYCAgIKDgoKDhYeFhoCChYODhYeGg4WFhYaHh4SDhoaIiYaHhIWGiIeEg4WGhYWEhIOFhIKFhoaFhoWEhoWHdnB0e3BydX+HhYNtdW92b3x1coR5eYd4cXR3bndod3pucHaCcoN+b3p5eW1vbnpvb2x3fXiGcHF6cHJ0ZoF1fm57eXNveX+Af31+gYB/e39+fYB+gIB+foCAgYB+fn9/foF/gH9+fYB9f4CBgIB+fn+BgH9+goOCgoSFh4eEfoeEg4OFh4aEhYWFhoaIhISGh4iIhoeEhoaLioWEhoeHhYOFhIWEgoWFhYWGhYWGhYZxdXByc29zenl+hHSIdHV+iHZugnKEhnluanJ/cW1zd3x/dXR8hH54cXV3bnl1enF2eHV6eYRyaW95eHBreXN6b3p3dnZwgYB/fn5/f396fn19fn1/f359gIGDg4CCg4GChIKBf4GCgH1/f4F+f35+f4GAfn6BgoCAgoSHhoODh4SEhIWHhoWFhYWHhoiFhYaFh4eGhoSGhomIhYSJioiFhIWFhoWDhYWEhoaGhoaFg3iLeXKIentwcIWEeIV4eWtzfnl7a3KDh4N6fG16eXl0fYB2bm+AgG90fHV3cXl9fW1+dW+DhYZ6gHJye3x1cG96a3N8bnaCgYF+fn99fXt9e3x9fX9/fn1/f4KCf4GDgYGEgYB/gICAfn9+f31/fn1/gH58fYGAfn6Ag4iFhoOFhYWFhoeFhYWFhYeHiIaEhoWHhoaFhIWFhIWFhomJh4WFhoWGhoWGhoSGhoaGhoWGh4eHhoaDhoWGh4iHhYeGhoOHhoWFg4SFhoWGhIaEg4SEhoSEgYODhIOFhIWEhYSGg4WGhYWEhIWHhoSEhYaFhX13hYOEhIOCgX5/fnt8e357fH1+f399fH9+gIB9f4F/f4GAfn5+gH5+f35+fX99fX5/fHt8f358fH+BiYaFhIaGhoWGhoWFhYWGhoeIhoSGhYeFhYWDhIWGhYSGhoeGhYSGhIWGhoaGhIeGh4eGhYeIiIiIhoWHhYaGiIaFiIeHhYeGhoiFhYaHhYaGhYOChYWGhYWDhYOEhIaEhoaEhYWDhoaFhoWEhoeGhISFhoOFhIKEg4OFg4OBfYB/e3t8fnt8fH1+fnx8fn2Afn1/gH5+gH99fXyAfX5/fn5+f3x8fX57fHx/fHt7fn+Ih4SEiIaGhYeGhYWEhoaGhoiHhIWGh4aFhIODhIaFhIaFhoaFhYaEhYaGh4eFh4aJiIaGiIeIiYiFhYiFhoeGh4aHhoeFh4eGh4WFhoeFhoaFgoOFhoaEhIOEhIOEhoSGhoSFhYOGhoWGhYSGh4WEhIWFg4SHhoSCg4SDhIJ+gYB8e31+e3x7fn59fHx+fX5+fX9+fX1+fnx9fH98fn58fYF/fHx8fXx8fH56e3t8foiHgoWIh4eGhoaGhYSGhoeGiIaEhISHhoSFh4OEhYSFh4SFhoaFhoSGhoeHhoaHh4mIhoaIh4iKiIWGiIWGh4WHhoeGh4WIh4eHhYaGh4WGhoWChISFhoWFhISEg4SFhIaGhoWGhIaFhoaFhYaGhYSDhISDhIeDhIGChIWDgYCAgXt7fn18fHx+fXx8fH1+fH18fn18fH18fHx8fXx+fXt8gH99fH18fnx8fHp6fHx9iIeChoiHhoeGhoaEhYaFhoaGhYOFhIaFhIiJg4GEg4SGhIaGhoaGhIeHiIiHh4eIioiGh4iHiImIhYiHhIaGhYeHh4WHhoiIh4eGh4aHhYaHhIKEg4SGhYeFhISEhISFhoaGhoaFh4WFh4WGhYaFhIOEg4OEh4GDgIKDhIKCgn+Ae31/fXx8fH59fHx9fH17fHx7fHx9fXt7e318e359e3x/fX18fX1+fXx6ent7fHyIh4KGh4aGh4aGhYSFhoWFhYWEg4WChoSDiId/enqChYaEhoaFh4aEh4eIiIiHhoiKh4aHh4eIiYeFiIeFh4eGhoeHhYeGiIiHhoWHhoiGhoiEg4SEg4aGh4WFhISEhYaGhoaGhYaHhoaIhoaEhoWDg4ODgoOGgYN+goKDgIOCf398f39+fHx9f318fX18fnt7e3p7fHx8e3t7fnt7fXt6e358fHx8fX5/fXt6fHp8fImHg4aFhoWGhoaFhIWFhYWFhIOBhIGGhIKEhHyAhn+ChYWGhYWGhYSHh4iIiIaFiYqHhYeGh4eIh4WIhYaHiIaGh4eGh4aIiIeFhoeGh4WFiIOEhoWDhoaHhoWEg4WFhoaGhoaFhoaHhoeHhYOFhYOBgoKBg4WCg36BgoF/hIJ/fn5/fn98fH1/fXt9fXx+enp7eXt8fXt7e3t+fHx8fHp7fXx8fHx+fYF8e3t7e3x8iYeEhoSGhIaGhYSFhoWEhIOEgoCDgYaDgYJ/eoSMe4CEhYeGhoaEhIeIh4aHhYWHiYeEh4WGhoiGhYeEhoeIhoaIh4eHhoeIhoSGhoaHhYWIg4SFhIaGhoiFhYSDhYWGhoeGh4WGhoaFhoaEg4SFgoGCgYCEg4OCfYGBgH+DgX5/f4B8f3x9fX59e359fH15enp5e319enp7e318fXx8enp9fHx9fH5+gHt7e3x+fXyIh4WGhYaEhoSFhYWFhYODgYOBgIGBhYJ/gH9/fXx7gYSFhoaEhYSEh4eGhoaFhIaJhoKGhIaGhoWFh4aGiImGhYiHiYeGhoeFhIaFhYeFhIeDhIWEiIaGiIWFhIKFhYaFhoaHhIWGhoWFhoKDg4WAgIGAgISAg4B8gYB+foOAfX9/gX2AfH1+fX57fn18fHl6enl6fX15ent7fHt8e3t6e319fH18f35+fHt7fX59fIiGhYaGhoWFhYSFhYSDgoGAgoGAgICDgX5+foB5en2Ag4SFh4WEg4OHhoOEhYSChYiFgoSDg4WFhYWHh4aIiIaFiIeJh4aFhYWDhoSFh4ODhoSEhYSHhoaGhYaEgoWFhoaGhoaEhYaGhIWFgoKDhH9+gICAgYCDgHyBf31+gn5+gH6Af399fX59f3t/fXt6eXp6eXp8fXl6e3t7enx7e3t7fH19fXx/fn18fHx/fnx7h4WFhoaGhoSFhIWDhYKBgICAgYB+f4KCfX1/f3t/f4KDg4WGhYSDg4aDgYOEgoCFh4WCg4GBg4SEhYaGh4eHhYWIhomHhYSEhIKFg4SGgoOFhISGhIeGhYaFhYODhYSFhoWGhISEhIWDhYSAgIKDf35/f39/gIN/fIB9fX+CfYCBfn6Bfn5+fX1/e398e3p5eXp5ent8eXp6ent7fHp7e3t8fX19fYB9fXx8fYB/fXyGg4aGhYaGg4SChYKFgYGAf3+AgH5/gYF8fn9/fn+AgoKChISDgoGChIGAg4KBgISFhIKBf4CCg4KEhYWHhoaEhYeFh4WGgoOCgoOCgoWBg4SEhYaEhoaGhoaFg4SEg4SFhYWDhIODhIKEhIB/goJ/fX5+fn5/hH57f3x8gIF9gYB9foN9fn59fX57fnt7enl6enl6ent5enp6e3t8ent8e3x+fn1/gXx9fHx9f4B+gIaEhYWEh4SEg4KGgoOAgYB+fn+AfX9/gnx9f35+f3+BgYKEg4KBgYKCf4CBgoCAgoWEgoB/gIGCgYKGhYeFhISGhoOFg4WBgoGBgoGCg4GChISEhYWGh4eGhYWEg4ODhIWFhIGDgYOChIODgH+AgX59fX5+fH6Dfnx+fHyBgX6Cf35/gnx/fn19fHx8e3t6enp6eXt5e3p5enp6e3x5e317e35/f4GAfX99fX1/gICAhoSEhYSFgoSCgoSCgYCBgH59fn9+fn6AfX2Afn5+foGBgoODgoSHgYF+gICBf3+ChIOBf35/gIJ/goWDhYOCg4WFgoSBg4CBgIGAgYKBgIGEg4OGhYWHh4WEhIWCgoKDhYSCgYGBgYCFg4F/foB/fnx8fn18foN9e358fYB/gIN9fYCAf35/fXx8fX17e3p5enl5e3l6enl6ent7e3p7fX18f3+BgoB+gH+AgH+AgIDKysrKysrKysrKysrLy8vLy8vLy8vLy8zMzMzNzc3Nzc3Nzc3NzczMzMvLy8vLy8vLy8vLy8vLzMvLy8vLy8vLy8vLy8vMzMzMzM3Nzc7Oz8/Pz9DQ0NHR0dLS0tLS0tLT09PT0tLS0tLS0tPT09TU1NTU09PT09PT09PT09PT09PT09PT09PT09PT09PT09PS0tLS0tLS0tLS0tPT09PT1NTV1dXV1dXV1dXV1dXV1dXV1NTU1NTT09PT09PT09PT09TU09PU1NTU1NTU1NTU09PT09PS0tLS0tPT09TU1NTU1NPT09LS0tLS0tLR0dHR0dPHhnNlYFtLWWdVTUZIQD03Nzg5Nzw8PDo8Oz42Oj04PDs6OTg3ODs7Oj87PTs8PD47P0E/QkJBQ0RFREE+PTw7QENDQUBDQ0FBR0hHSUtSwtXS09PT09TU1NTU1NTU1NTU1NXV1dXV1dXV1dXVysrKysrKysrKysrKy8vLy8vLy8vLy8vMzMzMzMzNzc3Nzc3Nzc3MzMzMy8vLy8vLy8vLy8vLzMzMy8vLy8vLy8vLy8vLzMzMzc3Nzc3Oz8/P0NDQ0NHR0tLS0tLS09PT09PT09PT09PS09PT09TU1NTU1NTU09PT09PT09PT09PT09PT1NTU1NTU1NTT09PT09LS0tLS0tLT09PT09PU1NTU1dXV1dXV1dXV1dXV1dXV1dXV1NTU1NPT09PT09PT09PU1NPT09TU1NTU1NTU1NPT09PS0tLS0tPT09PU1NTU1NTU09PT09PS0tLS0tLR0dHSzIxyZ2BcTVllUktHSz87Mzc4Ozg5Pj05PDpBOjs9Nzs8PDo6Nzg6Oz0/Oz88PTw/Pj9BPUFBPkNDREJAQT46Oz9DREFDRERCQklHSEhJTr7V0tPT09TU1NTU1NTU1NTU1NXV1dXV1dXV1dXV1crKy8vKysrKysrKy8vLy8vLy8vLy8vLy8zMzMzMzM3Nzc3Nzc3NzMzMzMzMy8vLy8vMzMzMzMzMzMzLy8zMzMzMzMvLzMzMzc3Nzc3Ozs/P0NDQ0NDR0dLS0tLS09PT09PT09PU09PT09PT09TU1NXV1dTU1NTT09PU1NPT09PT09PT1NTU1NTU1NTU1NPT09PS0tLS0tLS0tPT09PT1NTV1dXV1dXV1dXV1dXV1tbV1dXV1dTU1NTT09PT09PT09PU1NTU09TU1NTU1NTU1NTT09PT0tLS0tLT09PU1NTU1NTU1NTU09PT09PT0tLS0tHR0s+Sd2hfXk9XZ01LRks9ODc2NTk5OTw+OT88Qzk7PDc5PD07OTc5Ojw9QDs+PT47PD48PT5BQD5EQ0NDP0E9Ojs+QkNFQ0NEQT9FSEpJSky61dPT09TU1NTU1NTU1NTV1dXV1dXV1dXV1dXV1dXLy8vLy8vLy8rKysvLy8vLy8vLy8zLy8vMzMzMzMzNzc3Nzc3Nzc3MzMzMzMzMzMzMzMzMzMzMzczMzMzMzMzMzMzMzMzMzc3Nzc3Ozs/Pz9DQ0NDQ0dHS0tPT09PT09PT09TU1NTT1NTU1NTU1NTV1dXU1NTU1NPU1NTU09PT09TU1NTU1dTU1NTV1dTU09PT09LS0tLS0tLS09PT09TU1dXV1dbW1dXV1dXV1tbW1tXV1dXV1NTU1NTT09PT09PT1NTU1NTU1NTU1NTU1NTU09PT09LS0tLT09PU1NTU1dXV1dTU1NTT09PT09PT0tLS0dHRmn5nYWJOVWpKSElLPzw6OTM3Njc2PTs+Oj06Ojo4ODo7Ozg4Ojs7PD46PT09Ojw/PD0/QkA/Q0RDRD5APT08QENEQ0JEQkQ+REhJSUtMttfT09TU1NTU1NXV1dXV1dXV1dXV1dXV1dXV1dXVy8vLy8vLy8vLy8vLy8vLy8vLy8zMzMzMzMzMzMzNzc3Nzc3Nzc3Nzc3MzMzMzMzMzMzMzMzNzc3NzczMzMzMzMzMzMzMzc3Nzc3Ozs7Pz8/Q0NDQ0NHS0tLT09PT09PT1NTU1NTU1NTU1NTU1NTV1dXV1NTU1NPT1NTU1NTU1NTU1NTU1dXV1NXV1dXV1NTU09PT09PS0tLT09PT09PU1NXV1dbW1tXV1dbW1tbW1tbW1dXV1dXU1NTU1NTU1NTU1NTU1NTU1NTU1NXU1NTU1NTT09PT09PT09PU1NTU1dXV1dXV1dTU1NTU09PT09PS0tLR0p+DaWBkU1hsSEhIS0A9Nzg0NzY6Oj87RDw8Ojw8OTg6OTo6Ojs8Ojo7OT48Pjk9QDs/QUFCP0JCQUM9Pz8+PEBCRUNDQkBBO0ZJR01MSbLY09TU1NTU1NXV1dXV1dXV1dXW1tbW1tbV1dXW1svLy8vLy8vLy8vLy8vLy8vLy8vMzMzMzMzMzM3Nzc3Nzc3Nzc3Ozc3NzczMzMzMzMzMzc3Nzc3Nzc3Nzc3Nzc3Nzc3Mzc3Nzs7Ozs7Pz8/P0NDQ0NHS0tLS09PT09PT09TU1NTU1NTU1NTU1NTV1NXV1dTU1NTU1NTU1NTU1NTV1NTU1dXV1dXV1dXV1dTU1NTU1NPT09PT09PT09PU1NXV1dbW1tbW1tbW1tbW1tbW1tbV1dXV1dTU1NTU1NTU1NTU1NTV1NTU1NXV1dXU1NTU1NTT09PT09PT1NTU1dXV1dXV1dXU1NTU1NTT09PT09LS0tSjiGxfZlJWakdIR0lBPTM2Njo7PDhDPEJBPjxBPDg5Ojw6Ojw8PDk8PTo7PD09PD89QD9AQT9AQUBCPD4+PzxCQ0NDRkBBQT1ISklOTUeu2NPU1NTV1dXV1dXV1dXV1dbW1tbW1tbW1tbW1tbLy8vLy8rKysvLy8vLy8vLy8vMzMzNzc3Nzc3Nzc3Nzc3Nzc3Nzs7Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Ozs3Nzc3Nzc3Nzc3Nzs7Ozs7Oz8/P0NDQ0NHR0dLS0tPT09PT09TU1NTU1NTU1NTU1NTU1NTV1dXV1dTU1NTU1NTU1NTU1dXV1dXV1dXV1dXV1dXU1NTU1NTT0tPT09PT1NTU1NTV1dbW1tbW1tbW1tbW1tbX19bW1tXV1dXV1dXV1dXV1dTU1NTU1dXV1dXV1dXU1NTU1NTU09PT09PT1NTU1NXV1dXV1dXV1dXV1NTU1NPT09PT0tLWroprY2VSWGhMSkdJQjg0OTQ6Ozo5QDk+Q0U/PDs5OTk9Oj07PDw6PTw7OTw9Ozs/PUA9PT5AQD9CQT5APD05QERDQkFBQj48SEpLTU5HqNnU1NXV1dXV1dXV1dXW1tbW1tbW1tbW1tbW1tbWy8vQ0dDQ0NDQ0dHR0dHR0c3Ky8vLzMzMzMzMzMzMzM3Nzc3Nzc7Ozs3Nzc3Nzc/Pz8/Pz8/Pz8/Pz9DQ0dHR0dHR0dHR0dHS0tHV2djY2NnZ2dra2tvb29vZ2dnZ2dna2tra2tra2tjW19fX19fX19jX2NfX19rb2tra2tra2tvc29vc2dfX19fX19fX1tbW1tbW09LS09PT09PT1NXU1NbV1dXV1dXV1dXV1dXW1tbX1tbW1tbV1dXV1dXV1dXV1dTU1dXV1dXV1dXU1NTU1NTU1NTU09PU1NTU1NXV1dXW1dXV1dXV1dTU1NTT09PT09PS1bqKa2hoUlhlSUlMTkA5OTo0O0A8Nz05QUM9QD89ODo6Ozk9Oz4/Ojs8PDo7PDo7Pj1APT8/P0FAQUE/QTw8Oz5BRENBREA9PElJSk1NRqPa09TV1dXV1dXV1dXW1tbW1tbW1tbW1tbW1tbW1svMlYWGhoaGhoeHh4eHh4Ky4t3d3t7e3t7e3t7e3t3S0NDQ0NDQ0NDQ0NDQ0ci5ubm5ubm5ubm5ubq6t6WkpKSkpKSkpKSkpKSnhmBjY2NjY2NjY2NkZGRlhIuKioqKioqKioqKioemuri4uLi4uLi4uLi4ubSNi4uLi4uLi4uLioqKiKG/vb29vb29vby8vLy7v9LS0tPT09PS0tPU09PT2+Lh4uLi4uLi4uLj4+Pi2NfX1tbW1tbW1tbV1dXV1dXV1dXV1dbW1dXV1dXV1dTU1NTU1NTU1NTV1dXV1dXW1dXV1dXV1dXV1NTU1NTT09PT09XDkXJsaU5TYkxMVk08Ojo3Nz5DPzg+Oj8/QTw/QDc7Ojs7PTs+Pjo7PD48Oz07PT8+QDw/Pz1AQEBBPj88PjxAQUVCQkZAQD9HSEpLUEae2tXV1dXV1dXW1tbW1tbW1tbW1tbW19fX19fX19fLzG5QU1NTU1NUVFRUVFRMoPPr6+rq6urq6urq6uvp1dLS0tLS0tLS0tLS0tTEqaqqqqqqqqqqqqqqq6aGhIWFhYWFhYWFhYWFik4MEhISEhISEhISEhIRE0pUU1NTU1NTU1NTU1NPg6ejo6Ojo6Ojo6Ojo6ScWFJTU1NTU1NTU1NTU056rqqqqqqqqqqpqampqLDS0tLT09PT0tLS0tLS0t/r6uvr6+vr6+vr6+vr6dnX19fX1tbW1tbW1tbW1dXV1dXV1dbW1tbV1dXV1dXV1dXV1dTU1NTV1dXV1dXW1tXV1dXV1dXV1dXU1NTU1NTU1NPUy5h3bGlKTl9NUlVNPjw8Nzs/Qz42Ojc+Pzs9QkA5PDk9Ozw6PD07PTs9Ozs9PD0+PT07QT08QUBBQT08Pzw7QEJDQURFPUFAQ0ZLS09GmNzV1dXV1dbW1tbW1tbW1tbW1tfX19fX19fX19fXy8xxVVhXV1dYWFhYWFhYUaHx6enp6enp6enq6unq6dXS0tLS0tLS0tLS0tLUxaqrq6urq6urq6urq6yoiIeHh4eHh4eHh4eHh41SEhgYGBgYGBgYGBgYFxpOWVdXV1dXV1dXV1dXU4WopKSkpKSkpKSkpKSmnlxWV1dXV1dXV1dXV1dTfbCrq6urq6urq6qqqqmy0tLS0tLS0tLS0tLS0tHf6urq6urq6urq6urq6unZ19jX19fX19fX1tbW1tbW1tbW1tbW1tbW1tbV1dXV1dXV1dXV1dXV1dXV1dXW1tbW1tXV1dXV1dXV1dXU1NTU1NTU1NGcenFpSlRdT1JVTkQ+Pzs/QEA4Ojs4PDw8Oz46Ojs4Ozk5Ozw7Ojw5Ozs8Ozo9PT0+PUE/Pj8/Pj08PT88PEFBQ0FERTw+QEVGSktNRpPc1dXV1tbW1tbW1tbW1tbW1tfX19fX19fX19fX18zNeF5hYGBgYGFhYWFhYVqk7ufn5+fn5+fn5+fn5+bV0dLS0tLS0tLS0tLS08Wtrq6urq6urq6urq6vq46NjY2NjY2NjY2NjY2SXSInJycnJycoKCgoKCcpWmNiYWJhYmJiYmJiYl6MrKmpqampqampqampqqJmYWJiYmJiYmJiYmJiXoWzr6+vr6+vr6+vr6+uttLS0tLS0tLS0tLS0tLR3+np6enp6enp6enp6enn2djY2NjY19fX19fX19fX19fX19bW1tfX19fW1tbW1tbV1dXV1dXV1dXV1dXV1tbW1tbW1tbW1tbV1dXV1dXU1NTU1NTWo3txZElbYE5OVU9AQT89REI+Oz06OTo6PTw7PDs6OTg5OTs8Ozw8Ojo7PDo7QD08PTxAQTxBQTs7PEA/PD1CP0RDQ0U8PkJERkpMTEWN3NXV1tbW1tbW1tbW1tbX19fX19fX19fY2NjY2NjMzMfFxcXFxcXFxcXFxcXFytDPz8/Pz8/Pz9DQ0NDQz87Ozs7Ozs7Ozs/Ozs7NzMzMzMzMzMzMzMzMzMvJycrKysrKysrKysrKysfCw8PExMTExcXFxsbGxsvMy8zLzMzNzMzMzMzLz9HR0tLS0tLS0tLS0tLRzczMzMzMzMzMzMvLy8vO0tLS0tLS0tLS0tLT09LV09TW1tbW1tbW1tbW1dfY2NnZ2dnZ2dnZ2dnZ2djY2NjY2NjY2NjY2NfX19fX19fX1tfX19fX19bW1tbW1tbW1tXV1dXV1dXV1dbV1dbW1tbW1tbW1tXV1dXV1dTU1NTU169/cF5GXmJQUVdOR0ZDQ0lBPz07PDo8N0BBPD04Ojs4OTg7Pzs8PDs7PDw8PD87PD46Pj44PkI8Pj1BPjw+QkBERUNAPD5APkNJSUtEh9zV1tbW1tbW1tbW1tbX19fX19fX19jY2NjY2NjYzc3Pz8/Pz8/Pz8/Pz9PPz87MzczP09LSzs3P0s7Ozs7Ozs7O0tPPztHU1NPOztPTz8/Pz8/Pz8/Pz8/Pz8/P0NDQ0NDR0dHR0dHS09PU1NTU1dXV1tbW1tfW1tbX1tfX19fX19fX19bW1tbW1tbW1tbW1tbW1tfX19fX19fX1tbW1tbW1dXW1tbW1tbW1tbW19bW1tbW1tbX19fX19fX19fX19jY2NjY2NjY2NnZ2dnZ2dnZ2djY2NjY2NjY2NjY2NjX19fX19jY19fX1tbW1tbW1tbW1tbW1tbW1dbW1dbW1tbW1tbW1tbW1tXV1dXV1NTV1di4gm9WSl9jUlFaS0hBQTxCPT07Oj4+PD4/PT0/ODk6OTk3OD48PD47Ozw7PDs/PT0+OTs7OT0+P0A+QD07OkI/QkNCPz0+QD5CRUdKQoDc1tbW1tbW1tbW19fX19fX19fX2NjY2NjY2NjY2M7Ozs7Ozs7Nzc3Nzsqfys3Nzc3QuYOEi8fTwJrLz87Ozs7O0qucz9Ktg4OVz9GlotDOzs7Ozs7Ozs7Ozs7Oz8/Pz8/P0NDQ0NDQ0NDR0dHR0tLT09PU1NTU1NTV1dXV1dXV1dXV1dXV1dXV1dXW1tbV1dXV1dbW1tbV1dXV1dXV1NTU1NXV1dXV1dXV1dXW1tbW1tbW1tbX19fX19fX19fY2NjY2NjY2NjY2NnZ2dnZ2dnZ2dnZ2dnY2NjY2NjY2NjY2NjY2NjY2NfX19fX1tbW1tbW1tbW1tbW1tXV1tbW1tbW1tbW1tbW1tbW1dXV1dXV1dXYwIBuVU9gY1dZW0xMQ0A9PTw9Ojw9Qj5CQkA8Ojg5ODo6Ojc7Pz4/PDw7PDo5Pzw8PTg5PD9BPj09PUFAPTtBQkBCQz47QD9BQUlHSkF629bW1tbW1tbX19fX19fX19jY2NjY2NnZ2djY2dnOzs7Ozs7Ozs7OzdKpj63Rzs7Ozpu3tqSiwJOerNPOzs7O0racpaTKm7y4mbWzoKKq0s7Ozs7Ozs7Ozs7Pz8/Pz8/Pz9DQ0NHR0dHR0dHS0tLT09TU1NTU1dXV1dXV1dXV1dXV1dXV1dXV1dXW1tbW1tXV1dbW1tbW1tXV1dXV1dXU1dXV1dXV1dXW1tbW1tbW1tbW1tfX19fX19jX19fY2NjY2NjY2djY2dnZ2dnZ2dnZ2dnZ2dnZ2djY2NjY2NjY2dnY2NjZ2NjY19fX19fX19bW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tXV1dXV1dXV18h/b1pTYWVeXVxPSkQ9QD8+PDc6Pjk/RD5AOTg3ODk7Ozw4OT89PTw9PD47OkE7OTs5OzxDQDw7PT5AQT49QkQ/QkM9PT8+Pz5ISUg/ddrW1tbX19fX19fX19fX2NjY2NjZ2dnZ2dnZ2dnZzs7Ozs7Ozs7Ozs/Inrym0tDQzsqgl36Cw6abr6fUz8/Pz86dnJGes6aNgY3GnpiWnMfPzs7Ozs7Ozs7Oz8/Pz8/Pz8/Q0NDR0dHR0dLS0tPT09TU1dXV1dXV1dXV1dXV1dbV1dXV1dXV1tbW1tbW1tbV1dXV1dXW1tbV1dXV1dXV1dXV1dXW1tbW1tbW1tbW1tbW1tfX19fX19jY2NjY2NjY2NjY2NjZ2dnZ2dna2dnZ2dnZ2dnZ2dnZ2djY2NjY2NnZ2dnZ2dnY2NjY2NfX19fX19fX19bW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1dbV1dXV1dfNiHNdWGloXl9gT0lGOkFAPj48PDk2P0I/Qjo2NDg6Ozo8Ojk+PD49PTs/PTxBPjw8Ojw8PTw6PEA9QEI+PkFCPUNDPT0+Oz9BRUtIQHDZ1tbX19fX19fX19fY2NjY2NjZ2dnZ2dnZ2dnZ2c/Pz8/Pz87Ozs7SrKWnqdXAvNLHnY+ey9PJipmq1M/Pz9G/mKCbtZijiqvWupiinq+x0s/Pz8/Pz8/Pz8/Pz8/Pz8/Q0NDQ0dHS0tLS09PT1NTU1dXV1dXV1dbW1tbW1dbW1tbW1tbV1tbW1tbW1tbW1dXV1dXV1dXW1dXV1dXV1dXV1dXW1tbW1tbW1tfX19fX19fX19fX19jY2NjY2NjY2NjY2NnZ2dnZ2dnZ2tnZ2dnZ2dnZ2dnZ2dnZ2dnY2dnZ2dnZ2dnZ2dnY2NjY19fX19fX19fX19bW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbV1dXW0JB1W1tqaWFeXVNOSTxDQEE+QD46OEVAP0I6NzQ6Ojo5Ozs4Oz0/PT49QT08P0A9Pjw8PDw8Oj1AQD8/PT5CQD9AQkA8QD0+QUVLRz9r19fX19fX19fX2NjY2NjY2NjZ2dnZ2dnZ2dnZ2tnPz8/Pz8/Pz8/QzJ2Nl6zQmpfKxZ6ynpbN1q2ZqtTPz8/TtJmWqruKraubpbGZlrCzqdTQ0M/Pz8/Pz8/Pz8/Pz8/P0NDQ0dHS0tLT09PT1NTU1NXV1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbV1dXV1dXV1dXV1dXV1dXV1dXW1tbW1tbW19fX19fX19fX19fY19fY2NjY2NjY2NjY2NjZ2dnZ2dnZ2drZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2djY2NjY2NfX19fX19fW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1dXV1tKUcl5ea2tqZV1PTEc/RENDQDo9OzxCPD08OTY0Ojk4Ojo5Nzs/QDw8PUA8PEE+PD07PTw/PDo8Q0A+PTs9QD5CPkBBPkA9QD9GSUQ/ZtXX19fX19fY2NjY2NjY2NnZ2dna2tra2tra2traz8/Pz8/Pz8/P07GigJuvyqCjv8qcpYynrdiqmarUz8/P1KuafqORjaWclqeQmYSdk6PV0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NHR0tLT09PT1NTU1NXV1dbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1dXV1dXV1dbW1tXW1tbW1tbV1tbW1tbX19fX19fX19fX19fY2NjY2NjY2NjY2NjY2NjY2dnZ2dnZ2dna2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2djZ2djY2NjY2NfX19fX19bW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbSk3BgXnBoZmVaUUhHQkVDQEA3Ojo8Pjk8OTc2NTk6Njo8Ozc8QEA8Ojo9Ojw/Pj08OUA8PDo6OT9APT08PUBBQz9APz5BOz9ARkpCP2LS2NfX2NjY2NjY2NjY2dnZ2dnZ2tra29vb29vb28/Pz8/Pz8/P0M6fkGyclteqo9PSrqa1mJ/Vqpmq1M/Q0NSsm6eLlqKotKqef6CphZml1dHR0NDQ0dHQ0NDQ0NDQ0NDQ0NHR0tLT09PT1NTU1dXV1dbW1tbX19bW1tbW1tbW1tbX1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tfW1tfX19jY2NfX19fX2NjY2NjY2NjY2NnZ2dnZ2dnZ2dnZ2dna2tnZ2dnZ2dnZ2dnZ2dnZ2dnZ2djY2dnZ2dnZ2dnZ2dnZ2NjY2NjY2NjX19fX1tbW1tbW1tbW1tbW1tbX19fX19fW1tbW1tbX0pNuYFxxZGdkWlVKQENHREFBODs/PD07PDw3NTU4OTY4Ozo5PDo+Pzw9PTk8Pz49Ojo+OTw6Ojg+Pzw9PTw+QEFDQT48PDpCRERKRkJd0NnX19jY2NjY2NjY2dnZ2dna2trb29vb29vb29vPz8/Pz8/Pz9G9n8O31pfA09HQ0srSzZeb1KqZq9XRz9DTtrKypZmrz9jBnIC8raaYr9bR0dHR0dHR0dHR0NDR0dHR0dHR0tLT09PU1NTV1dXV1tbW1tfX19fX19bW1tbW1tfX19fW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW19fX19fY2NjY2NjY2NjY2NjY2djZ2dnZ2dnZ2dnZ2dnZ2drZ2tnZ2dnZ2dnZ2dnZ2dnZ2djY2NjY2NjZ2dnZ2dnZ2dnZ2dnY2NjY2NjY2NfX19fX19fX19fW1tfX1tbX19fX19fX19fX19bW19GSbF1cb2doYl1PRj9ISEZFQDw8Pj48PT08NzU2Ojk2Ojs6Ojs4QD86PDw5PD49Ozs6Pzk/Ojs5PT49Pjw7PTxAQ0I/Pz47Q0ZGR0hEWc3a2NjY2NjZ2dnZ2dnZ2dna2trb29vb29vb29vb0NDQz8/Pz8/Pz5V+e6WS1KKa08ySl6ObodirmavV0pem1cSimZadp5Ghnp6ZqJaYmrrV0dHR0dHR0dHR0dHR0dHR0tLS0tLS09PU1NTV1dXV1tbW19fX19fX19fX19fX19fX19fX1tbW1tbW1tbW1tbX19bW1tbW1tbW1tbW1tbW1tbW1tbW1tfX19fY2NjY2NjY2NjY2NjY2dnZ2dnZ2dnZ2dnZ2dnZ2tra2tra2tnZ2dnZ2dnZ2dnZ2djY2NjY2NjZ2dnZ2tnZ2dnZ2dnZ2djY2NjY2NjY2NjX19fX19fX19fX19fX19fX19fX19fX19fX1tfPjGRWXnBrXGBgTkVITUlJT0M+OkI9PUBCOzU1Nzw6Nzo7Ojo7OT09Ojo6OT0+Pz07OT47PDo8Ozk+PD47PD0+QENCPz5BPEFDR0ZGRVXJ29jY2NnZ2dnZ2dnZ2dra2tvb29vb29zc3Nzc3NDQ0NDQ0M/Pz9DR1aeZrcmjqL7KnbGdo7XZqZup2LiroMfVoquknLikq6Oew6CrpJvQ0tLS0tLS0tLS0tLR0dHS0tLT0tPT09PU1NTV1dbW1tbX19fX19fX19fX19fX19fX19fX19bW1tbW1tfX19fX19fW1tbW1tbW1tbX19fW1tbW1tbW1tbX19fX2NjY2NjY2NnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dra2tra2tra2trZ2dnZ2dnZ2dnZ2djY2NjY2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnY2dnY2NjY2NjX19fX19fX19fX19fX19fY2NfX19fX19fYzYZdV2JvZE9dVEtIRlNRS0tAPj1EPD9DRj01NTc7OTY6Ozo8PTo7Pzo6OTg6PT0/Pjs/Oz49Ojs5Pjs9PD0+QURCQD8+PzxAQUVHRURSxdvY2dnZ2dnZ2dnZ2tra2tvb29vb3Nzc3Nzc3NzQ0NDQ0NDQ0NDQ0NO5gL3Tm5bP1LWLkZ/T1LyBu9TOlKDT08iSjbTZqY+QrNfCj4271NHS0tLS0tLS0tLS0tLS0tLT09PT09PU1NXV1dbW1tfX19fX19fY2NjY19fX19fX19fX19fX19fW1tbX19fX19fW1tbW1tbW1tbW19fX1tbW1tbW1tbX19fX19jY2NjY2NnZ2dnZ2dnZ2dnZ2tnZ2tra2tra2tra29ra2tra2tnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2NjY2NjX19fX19fX19fY2NjY2NjY2NjY2NfX2ct+WlVpaltMX01KTEpVTEZCPDw/RkVHS0k9NjY3Ojk3OTo7Ojw9OT45OTo4Oz0+PkE+PTk8PDo9Pj47PTk5Oj9FQUA+PT8/QkBHRURFUMHc2dnZ2dnZ2dna2trb29vb29vb3Nzc3Nzc3dzc0NDQ0NDQ0NDQ0NDQ0cHR0crI0tDUxLjS0tHSwtLQ08fM0tHUyMHV0tXAv9bS1cXE1dHS0tLS09PT09PT09LS0tPT09PU1NTU1NXV1dbW1tfX19fX19fX2NjY2NjX19fX2NfX19fX19fX19fX19fX19fX1tbW1tbW1tbW1tfX1tbW1tbW1tbW19fX19fY2NjY2NjY2dnZ2dnZ2dnZ2dra2tra2tra2tra29va2tra2tra2dnZ2dna2tnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dna2tnZ2dnZ2dnZ2djY2NjX19fX19fY2NjY2NjY2NjY2NjY19rHd1xSZ2laTlpOTFBRV0VKPz8+PkFETExBPjc3NTo4ODk5Ojs8Pjw+ODo6OTs+P0A9Pj46NTo6Oz0/Ojs5Ojw+QkJAPz8/P0FCR0RDRE683dnZ2dnZ2dna2tvb29vb29vb3Nzc3Nzc3d3d3dDR0dDQ0NDQ0NDQ0NDS0NDR0dDQ0dPU0dHR0dPR0dHS0tHR0dPU0tLS1NXT09PU1NLS0tPT09PT09PT09PT09PT09PU1NTU1dXV1dbW1tfX19fX2NjY2NjY2NjY2NfX19jY19fX19fX19fX19fX19fX19fX1tbW1tbW1tbX19bW1tbW1tbW1tfX19fX2NjY2NjY2NnZ2dna2tra2tra2tra2tra2tra2tvb2tra2tra2trZ2tra2tra2tra2tra2tnZ2dnZ2dnZ2dnZ2trZ2tra29ra2trZ2dnZ2dnZ2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjbwXNYVWlrU0xSTlBSWVRGSTw+Qz9BQkVKPT03ODY5Nzc4OTk7Oz0/QDw8ODk7Ozs/Pjw8OTU6PT47OTk7PD8/P0JCQT1BPUBBQkZCQkJLtd7Z2dra2tra2tvb29vb29vc3Nzc3Nzd3d3d3d3R0dHR0dHR0dHR0dDQ0NDQ0NDQ0dHR0dHR0dHR0dHR0dHS0tLS0tLS0tPT09PT09PT09PT09PT09TU1NPT1NTU1NTU1NXV1dXV1dXW1tbX19fX2NjY2NjY2NjY2NjY19fY2NjX19fX19fX19fX19fX19fX19fX19fW1tbX19fX1tbW1tbW1tbX19fX19jY2NjY2NnZ2dna2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tnZ2dnZ2dnZ2NjY2NjY2NnZ2dnZ2dnZ2NjY2NjY3LxvVFRsbExLUkpUUlVLRkQ6PkdEREFERjw/ODk6OTU5OTo3PD07PkA9PTc5Ojs5Pjs5OTY2Oj1AQT47PDk6Pj9DQT4/Qj0+QkNFQkFCSrDe2dra2tvb29vb29vb29vc3Nzc3Nzd3d3d3d3d0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0tLS0tLS0tLS0tLS0tLS0tPT09PT09PT09PT09PT1NTU1NTU1NTU1NTU1dXV1dXV1tbW1tbW19fX19jY2NjY2NjY2NjY2NjY2NjY2NjY19fX19fX19fX19fX19fX19fX19fX19fX19fW1tbW1tfW19fX19jY2NjY2NjZ2dnZ2dra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2trZ2dnZ2dnZ2djZ2dnZ2dnZ2dnZ2dnZ2dnY2Ny2a1NbcGtLVVdSXFFXSEQ+PEJKRT1ISj89PDc4ODo1OTg5Njs+PD1APDw1OTk8Oj87OTk0ODw9PUFBPD47Ojw+QD89PkE9PUNGR0I/Qkmq39ra29vb29vb29vb3Nzc3Nzc3N3d3d3d3d3d3dHR0dHR0dHR0dHR0dHR0dHR0dHS0M/U0M7P0tLT0tLS0tLS0tLS0tPT09TU1NTU1NPU1NTU1NTU1NTU1NTU1NTV1dXV1dXV1dbW1tbW19fX19fY2NjY2NjY2NjY2NjY2NjY2NjY2NjX19fX19fX19jY2NfX19fX19fX19fX19fX19fX19fX19fX19jY2NjY2NjY2dnZ2dra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tvb29va2tra2tra2tra2tra2tra2tnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dndsGRTYXJfT1pUV19RUkdCPUVJS0FBTEQ/Pzs5ODg5Mzg2ODY5Pj0+Pz06Njo7Pjs9PTo5Njg6PTtAQDxAPz0/P0I+PD48PEJFSElCPkNJpODa29vb29vb3Nzc3Nzc3Nzc3N3d3d3d3d3d3t7S0tLS0tLS0tLS0dHR0dHR0dPT0bm7zLqbnLrQyNPT0tLS09PT09PT09PU1NTU1NTU1NTU1NTU1dXV1dXV1dXV1dXV1dbW1tbW1tbX19fX19fY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjX19fX19fX19fX19fX19fX19fX19jY2NjY2NjY2NjZ2dra2tra2tra2tra2tra2tra2tra2tra29va2tra29va2tvb2tra2tra2tra2tra2trb29vb29va2tra2tra2tra2tra2tra2tra2tnZ2dnZ2trZ2dnZ2dnZ2dnZ2dnZ3qpfVWBuW1VZUVpeT0xHQ0ZNSUZEQ0k7QUE7PDg4NjU4Njk4Nzw/QT89Ojc8Pz48Pz87OjY4OD09QEE9QD5BQD1AOjs6Pj1BRUdKQkBDR57h29vb29vc3Nzc3Nzc3Nzc3d3d3d3d3d7e3t7e0tLS0tLS0tLS0tLS0tLS0tO+wMqaoKKViJGeqpOpz9TT09PT09PT09PU1NTU1NTU1NTU1NTV1dXV1dXV1dXV1dXV1tbW1tbW1tbX19fX19fY2NjY2NnZ2dnZ2dnZ2dnZ2djY2djY2NjY2NjY2NjY2NjY2NjY2NjX19fX19fX19fX19fX19fX19fY2NjY2NjY2NjZ2dna2tra2tra2tra2tra2tra2tra29vb29vb29vb29vb29vb29vb29ra2tra2tra2tra2tvb29vb29va29vb29vb29va2tra2tra2tra2tra2tra2trZ2dnZ2dnZ2dnZ2d6iXFVeblheXU5aUFROQ0NMSUlJRklEPEJBPDs4NzY3OTc3OTk9P0E/PDo5QD88PkI/Ojg3NzY9P0BAPUBBPz88PTs7OD48P0VJSEE/Q0aX4dvb29zc3Nzc3Nzc3N3d3d3d3d3d3t7e3t7e3tPT09PT0tLS0tLS0tLS0tTIlZyum5m1iX2TjIKBhMTV09PT09PT09PU1NTU1dXV1dXV1dXV1dXV1dXV1dXV1tbW1tbW1tbW1tfX19fX19fX2NjY2NjY2dnZ2dnZ2dnZ2dnZ2dnZ2NjY2NjY2NjY2NjY2NjY2NjY2NfX19fX19fX19fX19fX19fX2NjY2NjY2NjY2dnZ2dnZ2dna2tra2tra2tra2tra29vb29vb29vb29vb29vb29vb29vb2tra2tra2tra2tvb29vb29vb2tvb29vb29vb2tra2tra2tra2tra2tra2tra2tra2tra2tnZ2dndmlpYYW5ZYVdPV01QRUJETElNS0ZJRT5CRDg4ODY3OTc1Njk4PT1BPjo4OT4+PD9APzw1Njc2PD4/PjtAQEA/Pj4/Pjs/PkFCRkdCQENIkeLb29zc3Nzc3d3d3d3d3d3d3d7e3t7e3t7f39/U09PT09PT09PT09LS0tLTz6h+kayPko6MhoCIiYSQo8rU09PT09PU1NTU1dXV1dXV1dXV1dXV1dbW1tbW1tbW1tbW1tbW19fX19fX19fX2NjY2NjY2dnZ2dnZ2dnZ2dnZ2dnZ2dnY2NjY2NjY19jY2NjY2NjY2NjY2NjX19fX19fX19fX19fY2NjY2NjY2NjY2NnZ2dnZ2dna2tra2tra2tra2tra29vb29vb29vb29vb29vb29vb29vb29ra2tra2tra2tvb29vb29vb29vb29vb29vb29va2tra2tra2tra2tra29vb29ra2tra2tra2tna3JJaWWNuWlpSVV5QTDxAR05IUklIRT48SEY4OTc1Nzg3NTg5ODs+Pj07ODlBPj1AP0E+NzU5Njs+QUI/P0BAQUI/Pj8+QUBEQUZIQj9FSozi3Nzc3Nzc3d3d3d3d3d3e3t7e3t7f39/f39/f1NTU09PT09PT09PT09PWtaWaiIuQhYCFi4iBg4qLf4bC1tTU1NTU1NTV1dXV1dXV1dXV1dXW1tbW1tbW1tbX19fX19fX19fX2NjY2NjY2NjY2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2djY2NjY2NjY2NjY2NjY2NjY2NjY2NjX19fX19fX19fY2NjY2NjY2NjY2dnZ2dna2dra2tra2tra2tra2tra2tvb29vb29vb29vb29vb29vb29vb29vb29ra2tra2trb29vb29vb29vb29vb29vb29vb29vb2tra2tra2tra29vb29vb29vb29vb2tra29uIWltnalxYTFpfVkg6TEhMSkpDREVDQUxINzo3Njc4ODU4Nzg5PDw7Ozk4QD89Pj8/PDY3PDQ3P0JCQUBAPz8/QT09P0A+QEBGRT09REuI4tzc3Nzd3d3d3d7e3t7e3t7e3t/f39/f39/f39TU1NTU1NPT09PT09PUxZKCg4WGfYGCfXx5foGCg36k29bU1NTU1NTV1dXV1dXV1tbV1tbW1tbW1tfX19fX19fX19fX19fX19jY2NjY2NjZ2dnZ2dnZ2dna2tnZ2dnZ2dnZ2dnY2NnY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjX19fX19fY2NjY2NjY2NjY2dnZ2dna2tra2tra2tra2tra29vb29vb29vb29vc3Nzc3Nvb29vb29vb29vb29vb2tra2tra29vb29zb29zb29vb29vb29vb29vb29vb29va2tvb29vb29vb29vb29vb29vb2tvZgFpebWhaU0ldW1hKRE1ISlNMR0ZBQD9KQjg7NjY5OTc1ODY4Ozo7Ojw5OD09O0A9Ozo2NTw3Oz1CQEFBPD49QEE9PEA/Pz5CREU+PERLg+Lc3d3d3d3d3t7e3t7e3t7f39/f39/f39/f39/V1dTU1NTU1NPT09PT2LKEkKh9g3l2hIh/e3d5gn5+i67A1dTU1NXV1dXV1tbW1tbW1tbW1tbW1tfX19fX19fY2NjY2NjY2NjY2NjY2NjZ2dnZ2dnZ2dna2trZ2dnZ2dnZ2dnY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2dnZ2dna2tra2tra2trb2tra2tvb29vb29vb29vc3Nzc3Nzc29vb29vb29vb29vb29va2trb29vb29zc3Nzc3Nvb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vc1nlcWmxmWFJPYFFSQUhHSkZYTEZAQENDSz87Ozc4ODc2NTc2ODo5PDw6PTs/PTs9Pjw7ODg8OT0/QkFCQzw8P0FCPj1BQkNCREVDQDtDTH3h3d3d3d3e3t7e3t7e39/f39/f39/f39/g4ODg1dXV1NXU1NTU1NPU0ruen3WKeXuIgICChYGDcnOAhYOMrNfV1NXV1dXW1tbW1tbW1tbW1tbW19fX19fX2NjY2NjY2NjY2NjZ2dnZ2dnZ2dnY2NnZ2dna2tra2trZ2dnZ2dnZ2djY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2dnZ2dna2tra2tra29vb29ra2trb3Nzc3Nzc29zc3Nzc3Nzc3Nzb29vb29vb29vb29rb29vb29vb29zc3Nzc3Nzc3Nvb29zc3Nzc3Nvb29vb29vb29vb29vc3Nzc3Nzc3Nvb29vb3dByXV9wZVdLUGNPS0JHQ0pIS0ZBPEE9SFFBOjo3Nzg3Njc4Nzw6OD09PD47QD88Pz07Ojs5Ojk8QEJAQkNAPUFAPz1AQkNDQUBAP0A7RU144N3d3d7e3t/f39/f39/f39/f3+Dg4ODg4ODg4NXV1dXV1dXV1NXU18h4i4V8goh6g4SBfoKCc2l0hYuGkJ3U1tXU1dbW1tbW1tbW1tbW19fX19fX19jY2NjY2NjY2NnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dra2tra2tra2dnZ2dnZ2dnY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2dnZ2dna2tra2tra2tra2tvb2tvb3Nzc3Nzc3Nvc3Nzc3Nzc3Nzc29zb29vb29vb29vb29vb29vb29vc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc29vb297KalxjcWVST1heSz9HTElPS0VAPkFCP0lPPjk6NzY7NzY6Ozc7Ojg6PDw+Oz09Oz48Ojs4OTo4OUFCQkFAQDtAQj06PkFCQz8+PT4/PUZOdN/e3t7e3t7f39/f39/f4ODg4ODg4ODg4ODg4OHV1dXV1dXV1dXV1s6dhpl+f5OTin+CgXx9gnNxm4mAgoOJwNnat7TQ19bW1tbX19fX19fX19fX2NjY2NjY2NjY2NjZ2dnZ2dnZ2dnZ2tnZ2dnZ2dra2tra2tra2trZ2dnZ2dnZ2dnZ2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NnZ2dna2tra2tra2tra2tra29vb3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nvb29vb29vb29vb29vb29vc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3NvfwGNaW21gVlBTU0pETEhNSEk8PkFEQ0ZORDw8OTc5OjY4Ozk3PDk4OTw9OzlAPjpBPzw3NTc7ODpAQUVBPz45PUI/Oz1CQkI6Pj07PT5GTnHe3t7e3t/f39/f39/g4ODg4ODg4ODg4OHh4eHh1tbW1tbW1tbV1tjLioCHhYOXjHh7e3lvfYF1a3ebdHZ7eInHxpiMrdjZ19fX19fX19fY2NjY2NjY2NjY2NjY2NjY2dnZ2drZ2dna2tra2tra2tra2tra2tra2tra2dnZ2dnZ2dnZ2dnZ2dnZ2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NnZ2dnZ2dnZ2dna2tra2tra2tra2tra29vb3Nzc3dzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nvb29vb29zb29vb3Nzc3Nzc3Nzd3dzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3d3d3d3d3Nzc3Nzc4LdjV1lrYlJNVVFMSktGS0ZDQD5CQT9FTT4+PTg5OTo3OTo3NT03Nzo+PDs7Qjw5Pz05NjY4PTk6QEJGQD49PEBCREA9QD9DO0A9PD4/Rk9t3N/e3t/f3+Dg4ODg4ODg4ODg4OHh4eHh4eHh4dbW1tbW1tbW1tfVrYZ6d32rn3l4entzdH+Dfm9xe3l6c3t2k4qFgImkzdnY19fX2NjY2NjY2NjY2NjY2NjY2NjY2NnZ2dna2tna2tra2tra2tra2tra2tra2tra2tnZ2dnZ2dnZ2dnZ2dnZ2dnZ2djY2NjY2NjY2NjY2NjY2NjY2NjY2dnZ2dnZ2dnZ2dra2tra2tra2tra29vb29vc3Nzc3N3d3d3c3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc29vb29vc3Nzb3Nzc3Nzc3N3d3d3d3d3d3dzc3Nzc3Nzd3d3c3Nzc3Nzc3N3d3d3d3d3d3d3d3dzc3OGtYVtebGJSTVZMTUdLS0RGQkI7QT08RUxCQT44Ojk6Nzc5NjY6NTs+QDs9Oz89PD89Ojk5Ojw5PEVDRkA/PkBDQkQ9OT0/QT1CPz1APkdPadvf3t/f3+Dg4ODg4ODh4eHh4eHh4eHh4eHi4uLW1tbW1tbW1tfQmH+Qh4N9eoN2e3Vzenl6kKqmd3JyfoeHh4CAfoKEhJHJzNnX19jY2NjY2NjY2NjY2NjY2NjY2NnZ2dnZ2tra2tra2tra2tra29va2tra2tra2tra2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2djZ2dnZ2dnZ2djY2NnZ2dnZ2dnZ2dnZ2tra2tra2tra2tra29vb29vb3Nzc3N3d3d3d3d3d3d3d3d3d3d3c3Nzc3Nzc3Nzb29vb3Nzc3Nzc3Nzc3Nzd3d3d3d3d3d3d3dzc3N3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3NzhpV9UYm1iUE9TSUhHRkpJSUJBPkJCPEVFREA+ODo4Ozc3Ojc4ODY+Pz07PDk9PDo+PTs6Njc7NjpEQUY+Pz8/PkNBPzs9PT47REM/PjxIT2fZ4N/f3+Dg4ODg4eHh4eHh4eHh4eLi4uLi4uLi1tbW1tbW19jYyH52doN+fnR2eIaCenl1d5yhu6GEgoCAfoeKinx/gYaMnKjO2NjY2NjY2NjY2djY2NjZ2djY2NjY2dnZ2dra2tra2trb29rb29rb2tra2tra2tra2tnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dna2tra2tra2tra2tra2trb29vb29zc3Nzc3N3d3d3d3d3d3d3d3d3d3d3d3dzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3e3t7e3t7e3d3d3d3c35pbT2drXFBRUElDT0pLR0xHSkJAP0FHREBBPDg8ODg1ODk3Njc3QEA/Ozw5Pj04PTw8Ojc4PTk/RENGPkE/QkBDPzw6Pj0/PkVEPz07S1Fj1+Hf4ODg4ODh4eHh4eHh4uLi4uLi4uLi4uLj49bW1tbW19XB3LRueHJze3B6eXaFiIR7eH2AgZiljH98fnuRhZaLhoGDgY6Rvd3Z2NjY2NjZ2dnZ2dnZ2dnZ2dnY2dnZ2dna2tra2trb29va2tva2tra2trb29ra2tra2tnZ2dnZ2dnZ2dnZ2dna2trZ2dnZ2dra2tra2tnZ2dnZ2dna2tra2tra2tra2tra2tra2trb29vc3Nzc3Nzc3N3d3d3d3d3d3d3d3d3d3d3d3d3d3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3e3t7e3t7e3t7e3t7e3t7e3t3d3d6NWFdobllQUUtISlNJTUhNSUtBQz9DRkJBRDo6PDg2NDg4NzY2Nj8+Pjo8OTw7Oj09PDw4Ozw8RERERT4/PkI+Qj84PT8/Q0NCQEE+O0xUY9Xh3+Dg4OHh4eHh4eLi4uLi4uLi4uLi4uPj4+PW1tbW1teslLZ6eHJvd5V7dHuLgHh1bn6Fg3t/hYhyfH2bnI6JioJ+g32Hk5rH1NjY2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dna2tra2trb29vb29vb29vb2tra2tra2tra2tra2tnZ2dnZ2dnZ2dna2tra2tra2tra2tra2tra2tra2tra2tra2trb2tra2tra2tra2trb29vc3Nzc3Nzc3Nzd3d3d3d3d3d3d3d3d3d3d3d3d3d3c3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3N3d3d3d3d3d3d3d3d3d3d3d3d3e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3d7Zf1lgaGxcUUtHR09LTk5PTURGQkg/Q0hEREA6Ozs4NzU3Nzc4NThAPkA7PDk8Ozw+Ojk7OTk7OUZERUI8QD4/PEBDOz5AP0A/Qj8+OjtKVWPV4eDg4eHh4eHi4uLi4uLi4uLi4uPj4+Pj4+Pj1tbX19vKhYR3cXJubniVhHt4hH95dnB4c3eLkY6CdnN9ioaId3d1d4ODfIiIk8Pb2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dra2trb2tvb29vb29vb29vb29rb2tra2tra2tra2tra2tnZ2dnZ2dna2tra2tra2tra2trb2tra2tra2tra2tra2trb29vb2tra2trb29vb29vb3Nzc3Nzc3Nzd3d3d3d3d3d3d3d3d3d3d3d7e3d3d3d3c3Nzc3Nzc3Nzc3Nzc3Nzc3d3d3d3d3d3d3d3d3d3d3d3d3d7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7f0nVZaGlqVk5KSE1OR01EUElGSD9FPUZMREM+Ozs8OTc3OTY2OTU4Pj4/PTs8QDs9PDo3Ozc5OThHREVCPUE9Qj8+QDw/QUE/QEJAPjs8S1Ri1OLg4eHh4eLi4uLi4uLi4+Pj4+Pj4+Pj4+Pj49fX19fEknuJf29sbnV2foSBg4qGfnVybWVtiIaKjoR7c4OHint4e4OPj4GEioqxztrZ2dnZ2dnZ2dna2tra2tra2tra2trb29vb29zc3Nzb29vb29vb29va2tra2tra2tra2tra2tra2tra2tra2tra2tra2tvb29va2tra2tra2tvb2tvb29vb29vb29vb29vb29vb29zc3Nzc3Nzc3d3d3d3d3d3d3d3d3d3d3t7e3t3d3d3d3d3d3d3d3dzc3Nzc3Nzc3d3d3d3d3d3e3t7e3t7e3t7e3t7e3t7e3t7e3t7f39/f39/f39/f39/f3t7e4clsW2pqalNOR0hOT0VIRk1JSUA7RD5ISUA9PDo6Ojg2ODo3Nzk0OD08PT07ODw8PDw4Njc4OTo6RUJFQT9APEI/Q0M+PkNEQUBAP0A8PUtRYdPj4OHh4uLi4uLi4uPj4+Pj4+Pj4+Pj4+Pj5OTX19fZqXaFfnx3bHB3eXh8jH2KhYB3anN0d3p9bot7fnl6foR/gIGDfnh8foeGlrbT2tnZ2dra2tra2tra2tra2tra2tvb29vb3Nzc3Nzc3Nvb29vb29vb29ra2tra2tra2tra2tra2tra2tra2tra29ra29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb3Nzc3Nzc3Nzc3d3d3d3d3d3d3d3d3d3d3d7e3t7d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3t7e3t7e3t7e3t7e3t7e3t7e3t7e39/f39/f39/f39/f39/f39/e3uO9amFpa2lRTkZNTEtKWE1OR0FAQE9BRD9AOzw4OTk5Njg2NjY4NDs+PD07OTY6Ojk6OTU4OTg5OkJERj8+Pj5AQEBCPzxBQD88Pj9BOT5KT17S4+Hh4eLi4uLi4+Pj4+Pj4+Pj4+Pj4+Tk5OTk19fX2sqKhIB5c29tcXN1d4CUeHaAfHWHhXd1cnWgmXp7d3Z5doR0bWxue3iAmouTu9za2tra2tra2trb29vb29vb29vb29zc3Nzc3Nzc3Nzc3Nzc29vb29vb2tra2tra2tra2tra2tra2tra2tra29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vc3Nzc3Nzc3Nzc3d3d3d3d3d3d3d3d3d3d3d3e3t7e3t3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3t7e3t7e3t7e3t7e3t7e3t7e3t/f39/f39/f39/f39/f39/f39/f397js2lpbmloUFBPTExPUk9LU0Y/RURERD48PDg6ODc5OTU2ODY2NzM6Pjs+PTc6Pjk5OTk2Ojo4NzxDRUc/Pzs/PkA9PkE9Oz0+OUFAQDhBTlFc0OTh4eLi4uLj4+Pj4+Pj4+Pj4+Pk5OTk5OTk5NjY2NjauY6AenZ1bmpveHCBfWt0cnZ3hIV5h4d5lY55eXp1d3pza298gHx2fYh8gLLe2tra2tvb29vb29vb29vc3Nzc3Nzc3Nzc3dzc3Nzc3Nzc3Nzb29vb29rb29vb29ra2tra2tra2tra29va29vb29vb29vb29zc3Nzb29vb29vb29vb29vc3Nvb3Nzc3Nzc3Nzc3Nzc3Nzc3d3d3d3d3t7e3t7e3d7e3t3d3t7e3t7e3t7d3d3d3d3d3d3d3d3d3d3d3d3d3t7e3t7e3t7e3t7f39/f39/f39/f39/f39/f39/f4ODg4ODg4N/f39/f4qpqa2hrZFNQT0ZQVFJOSFJLPkREQ0I7Ozk6Ojg2Nzg1NjY4ODg0Oz88Pzw5PDw3Ozo6Nzo6Nzo9Q0JDPUE+Pzw5PT5BQDs8PDtFQD47Q05TXNDk4eLi4uLj4+Pj4+Pj4+Pj5OTk5OTk5OTk5OTY2NjZ1p5vdntveHh2cG50d3BwdHBzb36Jc3qGhY2EenNtcoB6hn1vg5OBdnx9g4a13drb29vc29vc3Nzc3Nzc3Nzc3Nzc3Nzc3d3d3Nzc3Nzc3Nzc3Nzb29vb29vb29vb29ra2tra2tvb29vb29vb3Nzc3Nzc3Nzc3Nzc3Nzc3Nvb29vb29vc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzd3d3d3d3d3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3d3d3d3d3d7e3t7e3t7e3t7e3t7f39/f39/f39/f39/f39/f39/g4ODg4ODg4ODg4ODg4N/f3+KgbWhma2ZVVlJHUFFOS0xMRUJIRUc9OD08Ojo3Nzg2Nzc2NTY3NDg+PD09Ojg6OD46Ozc4Nzc6Oj5DRDtDQj49OD1AQUM/Pjw+RTw+PUJNUF/S4+Hi4uLj4+Pj4+Pj4+Pk5OTk5OTk5OTk5OTk2NjY3MB2doCCfnp4eHBsdXlya399bHNvdGdoaYB/aWl4c2d+iYl4cIKGe3d9foWKvN3b3Nzc3Nzc3Nzc3Nzc3Nzc3d3c3Nzc3N3d3dzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nvb29vb29vb29vb3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzd3d3d3d3d3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7f39/f39/f39/f39/f39/f4ODg4ODg4ODg4ODg4ODg4ODg4ODflGttZm5mU1NJUFlUTEhGTkZGRUJGPTs+PDs5NzY4NTc5NjQ1NzU4PDs9Pjo6OztAOTs7ODc6OTlAQkE8QUE/Pzk/QEJFQ0FAQEM7Oz1ES01g1uTi4uLi4+Pj4+Pj4+Pk5OTk5OTk5OTk5OTk5NnZ2tmYc3uqhJaCcnR1dn14aGx8d2h4d25rcHR5gIJ3dHyBhIJ9c3CAin94gn95g8je29zc3Nzc3Nzc3Nzd3d3d3d3d3d3d3d3d3N3d3dzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nvb29zc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3N3d3d3d3d3d3d3d3d3d3d3d3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e39/f39/f39/f4N/f39/f3+Dg4ODg4ODg4ODg4ODg4ODg4ODg4ODh24tubWdzY1lRTVVbV0hDSUZOS0dCRD8/Qjo7OjY2NzU2NzY0ODc2Ozw7Pj86PDk8Qjg3OTo6Ojk6QUFCQUJDQEE+PT9CQ0NEQUJGOTg9REpOYtjk4uLi4+Pj4+Pj5OTk5OTk5OTk5OTk5OTk5OXZ2drcqHGCtXiRfnNsem6EgXaCfWtoan+DeHZ8dX2FhXRmcHl9d316gIqFe318foC03tzc3Nzc3N3d3d3d3d3d3d3d3d3d3d3d3dzd3d3d3dzc3N3c3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzd3Nzd3d3d3d3d3Nzc3Nzc3Nzc3Nzc3N3d3d3d3d3d3d3d3d3d3d3d3d3d3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e397e3t7e39/f39/f39/f39/g4ODg4ODg4ODg4ODg4ODg4ODg4ODg4eDg4ODg4ODg4tiFb3FrdWFWT1VVXE9ETUY+SkdKRUQ8P0I6PDk4Njg0NTY3NDc2NDk7Ozw7OD47PEE4ODo9OD04Oj09QEBAP0FCP0A+QENCQ0FBRTc2O0RMTmPa5OLi4+Pj4+Pj5OTk5OTk5OTk5OTk5OTk5OXl29ra3Z5sbnNxhY1ybXBuf391hH5rcnZ2enN4gXhzbnVwbWt2fHmFiIB/f392coODsd/c3Nzc3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3Nzd3d3c3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3N3d3d3d3d3d3d3d3d3d3d3d3d3c3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e39/f39/f39/f39/f39/f39/f39/f39/f39/f4ODg4ODg4ODg4ODg4ODg4ODg4OHh4eDg4eHh4eHh4eHh4OLXhW1xb3ZeUldTWlpRSkhDQFFAQkQ8OT9BOjw5NzU3NDU2NjQ3NTY9PDo9PTk+OjxAODo6PDY7OTs+PUJCQjtBQkBDQEBEREM8PUA3OjxFS01l3OPi4uPj4+Pj5OTk5OTk5OTk5OTk5OXl5eXl5dPOxsB+cWxveHt2b3VuanNzbZKGeG50dG5vdIZ/b2twboJ0bXZyfY2DdnF/d3mKgabf3Nzc3d3d3d3d3d3e3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3dzc3d3d3dzc3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3t7e3t7e3t7e3t7e3t/f3t7e3t7f39/f39/f39/f39/f39/f39/f39/f39/f39/f4ODg4ODg4ODg4ODg4ODg4ODg4ODg4eHh4eHh4eHh4eHh4eHh4eHi1oZucG1xYFJZUFdfWUpMTElSP0Q9OTtCRjs6OTc0NTY1NzU0NjY2Pj07Pz45PTk7Pjg9Ozo0ODtAQENCQ0FCRkE/Q0BBQkREOz0+OTs8QkxNZODl4+Pk5OTj4+Tk5OTk5OTk5OTk5eXl5eXl5eW5t7Woc3JscHd6dHd4bXFydXd/hHRyc2xsa3F8bnBudGuBf3GAd32Eg355gHNygYqg2d3c3d3d3d3d3d7e3t3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3e3t7e3t7e3t7d3d3d3t7e3t7e3t7e3t7f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f4ODg4ODg4ODg4ODg4ODg4ODg4OHh4eHh4eHh4eHh4eHh4eHh4eHh49WHcWxqbF5YWlVXYFZWUE9QTD1BOjs8RkE4Ojg3MzY1Njk2NTg1Nz89Oz8+OT04Ozw5PTs7NTo9Q0JCPENDREREQUE/PkJDQzw9Pjg5PENLS2PN0dnh1sjY4+Tk5OTk5OTk5OTk5eXl5eXl5eXltbW2q3J5cm59f3Z1d2hqaGlwb3Zta2tnZWZxdG15gG5teXd2iHhxa2podXV5dHV/wd/c3d3d3d3d3d3e3t7e3d3d3d7d3d3d3d3d3d3d3t7e3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3e3t7e3t7e3t3d3d3d3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f4ODg39/g4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4OHh4eHh4eHh4eHh4eHh4eHi4uHh4ePVhnFwY2lhV1NZV19MUk9STUtAPjg5O0E+ODc5NjQ3Njc6NjY2NDk+Pzo8Pzo/OTo6Nzo9PDk5PEFBPTtBQ0VDRkA+Pj5BRUQ+QEE3OD5GSEpesrW4wbm1u8jg5eXl5OTl5OXl5+fn5+fm5ebm5ra2tbWOfX5weoR1cnZnYmNlbGtyb2ZpbHZtd4Z9hXlsbHd4a3ZwfH14c3V5fHd2h7ng3d3d3d3d3d7e3t7e3t7d3t7e3t7d3d3d3d3d3t7e3t7d3t7e3t7e3t3d3d3d3d3d3d7e3t7e3t7e3t7d3d3d3d3d3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4OHh4eHh4eHh4eLi4uLi4uLi4uLi4eHj1Yd1bl5uY1pUU1hXS1NLSk1SR0E4Ozs+PDk4NzU2NTY2OTY4NjY5Pzw6PT07Pzo7Ozk8PDs5Oj4+Pjs8PUFEQkNBQEBBP0JDPDw9Nzs+REVKXrG1tLW2t7e2y9rJ3uXl3eDi3tXU1tPU4OPg39+2treuh3t/bnmNenJ1bWNobGxtaXR4enF5enqIh4N6aWh9cWRvcXyGgX55e318e4an2t7d3d3d3d7e3t7e3t7e3t7e3t7e3d3d3d3d3t7e3t7e3t7e3t7e3t7e3t3e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t/f39/e3t7e3t7f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4OHh4eHh4eHh4eLi4uLi4uLi4uLi4uHh49aGdmxhb19dV1lcWlJQSEpXTEVHPUA9Ozs9OTY0NjU1NTg2NzY3OD87OT09PDw5OTw6Pjw6OTg+Qjs7Pj5AREBDRUFAQD0/QDw9PTU5PEJHRl2xtbW2uLm5ubq9uMPT0r3BwcC6u7y6u8TMxb/Dt7e3hGl1gX1ndYd5Z3Vxa2t5eHB3fH15bWl3e3h3bml1j4FwbHl4d3d9gXuGgnmAoNze3d3d3t7e3t7e3t7e3t7e3t7e3t3d3d3d3d7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t/f39/f3t7e3t/f39/f39/f39/f39/f39/f39/f39/f39/f39/f4ODg4ODg39/f39/f39/f3+Dg4N/f4ODg4ODg4ODg4ODg4ODg4ODg4ODh4OHh4eHh4eHh4eHh4eHh4eHh4uLi4uLi4uLi4uLi4uLi4ePXhXJrZ3RhW1hYX15TVVVRVUpMRj9JRDs5PTY2NDc3NTc4Nzc3ODk8PDo+PDg8Oj0+OTs8OTs5P0E8PT9DP0FARUJCQTw9Q0A6Pjw1NDlER0dasbW1tre5ubm5ubm3ubm4uLm5urq6urm5urm6u7e3uX9ucHN6b3B/eXNuc3Vsc3Z4cXFwb2tvcX6Bc2mHhIF9dHOHdW11hYmBgHJ2hafd3d3d3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7f39/f3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f4ODg4ODg4ODg39/f3+Dg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4eDg4eHh4eHh4eHh4eHh4eHh4eHh4eHh4uLi4uLi4uLi4uLi4uLi4uHj14lxa2xyW1dXXWBUUVVUUFJPSkNATUE9Ozk2NTM0NjQ2ODc3Nzk6Pjs8Pjs5PDo8PDk8PTw7PT0+PUNEREBDQkE/QD48PkE8OD06NjY6QkpIWLG1tLa2uLm5uLi5uLe3uLi5urq5ubi4uLi6uru3uKx7cnhxf3ZzfnBsbXpyZ29sbW50cHt3d3Jyd3pvhpJ2f3x8enZ5fH9zfYdyda3T393d3d7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e39/f39/f39/f39/e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f4ODg4ODg4ODg4ODg4ODg4ODf3+Dg4ODg4ODg4ODg4ODg4ODg4eHh4eDg4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4uLi4uLi4uLi4uLi4uLi4uLi49eHb2pxalVWV2FbT1FSUE5XSURESUo/Ojk6NzUzNDk1NzY2Nzg4Ojw7PD46PDo6PTw5PDw9Oz09PDs9REdEQ0E8PDw8Pj5AOzg8ODE1OkFGRVautbW1tre4uLm4uLi4uLe4ubq5uLi3t7i4ubq7t7mqcnB4d3x7e4J3aG5xam9qY2lyf21zcn54dHFsanaAeX2AgH91doB1a4qLgHaR1d/d3d7e39/f3t/f3t7e3t7e3t7e3t7e3t7e3t7e39/f39/f39/f39/f4N/e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t/f39/f39/f39/f39/f39/f39/f39/f3+Dg4ODg4ODf4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHi4uLi4uLi4uLi4uLi4uLi4uLi4uPYhm1sdGVWUFxnWE1YU1JRWUVDS1BOOzk4ODY1NTM5NTY2NzY4Nzk+OT0+OTw5OTw7Njg5OTo8QEA9PkBGQEJCQDo+PEE9Pzs7OzYxNjxCR0RQqLa1tba2tre4t7i4uLi4uLm6ubi4t7e3t7e5ure2tIlyd3h9iXxwem99c2hqbGdnbHRscXd0cWx2c3Fxd3FyfHl4g3Z7d2mLkYp9kM7f3d7e3tvY2drZ297f39/e3+De39/f3Nvc3N3e3uDg3+Dg4ODf3t7e39jS397f397e3t/f3t7f3t/f3t7e3t7e3t7e3t7e3t/f39/f39/f39/f39/f39/f39/f4ODf4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODh4eHh4eHh4eHh4eHh4eHh4eLi4eLi4uLi4uLi4uLi4uLj4+Lj4+Li4uPj4+Pi4uLi4+Lk14NoZ3VkVlVkZVdKWllXW1Q9RU1LSD04NzU3NjQzOTQ0Nzc1Njc5PTo9Pjw9PDk7PDk5Oj45PD4/PkFBQ0FFRUQ+OzxBPjw5PDs3Mzc+REhFSqG2tbW1tbW2tre4uLi4t7e4uLi3tra2tra3uLm2traLfXpsbHp/cGx5dm5qaGdlcXp4b2lvb3B1c21zd4Fnb32CgYNyf3lqcHJ6f6ng393Zy8a/vb6/vsLN0tDW3tnc4NfQzcPCw8PH1dfT2dzX1NjX0MfExce9vM/Kz87Y3djO3N3c2t3T0dze39/e397e3t7e4N/f39/f39/f39/f39/f39/f4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4OHh4eLi4uLi4uLf4uPi4eLg4d7W29/Sw8rJx9Hb3OLk4eHg2dre1sbExcTN2trf5OHi4trX3st9aWZxYVleZWFNTFRLUlpMO0hNSEZBPTc2NjUzNDY2NDg3NjU2OTw7Pj46Pjk5PDk3OTs7Oj49PEBAQ0RCR0ZCQT08Q0A9OTw7Nzc3P0RGRkaZtrS1tbW2tra4uLi4uLi3uLi3s7W2t7a3t7i5tba3opdxb29waW50dnFmZWNrbmdvcm1mZ2tygWVvdnyAeGRzj39zaHFyaWVlbm+w39HFv7u5ubm5ubq6uru6vc3Gw8e/urq6uru7u8HCvcHFvby/vry7urq5ubq6ubm6w8XDucDDwby/ube/z8/U3tjc3t/g3tLa4N/f4ODg39/f39/f39/f3+Dg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODh4eDg4ODg4ODg4ODh4eHh4uLi4eDh4uLi4uHa2t3RwsPCu8XT1uDdydPDrrnAsaqrq6uwtLbJ0sXRxLG4v7Srq6usr7S0vMzE1c60tLureGxtbWBdYl9ZS1NVVFFQREBRTUhEPzo3ODU3MzE1NjQ5ODQ2Njo8Oz08ODw5Njo6ODg5NzU8PDw/QEFAQkRDQkE8PkI/Pz09PTc1OD5DRUNAj7a0tLW1t7i4uLi4uLm5uLe1sautr7Oxs7OztLS0tqaei2tue3ZxeXhnY2hfcXdha25vaG99b25ja2lseHdsa4Z+bHB6dm1scG95sca8uru7urm5ubq6urq6urq6urq6urq6urq7u7q7u7y7urq6ubq7u7q6urq6urq6ubi3t7i4t7e2tbW1tbi3u8e+w8XHzcS4wMnH0tzZ2d/e3uDf39/f4ODh4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODh3Nji4uLi4eHh4OHg3tfGxtHQztTe3tPO0t/SuLi8sq2trKysrrG+ua63rKipqamqq6urqqqqq6ysuKyqqqqrq6urra6urq6urryzrayrpHlub21fXl1dVE1SU1xUSkE/UElIPjg5NjgzNzMwNTczNzg1NzY2Ojw/PDg5Ozo6Ojg5OjY1OTs7Pj9EP0NFQkNCP0BAQT9APjw3ODc6QUVEP4W4tLS1tbe4uLm5uLi3t7SurKuqqq2urq6vsLGzs7WjcG5ucm1wg311aWFlaGZkY2Rxc21td25naW1tZXBzb29zcXN8h4F6dX11n7u6uru7urm5ubm6urq6urq6ubq6urq5uLm5ubm6urq6u7q5ubm5ubq6ubm6ubm4uLi3t7e4uLe3t7a2tbW2tra1tbW1tba1t7e3t7rBvrzGycrb3+Dg3tvd3d7h4tDW4uHg4ODg4ODg4ODg4ODg4OHg4OHi0768zNjd3OLg0dnbxL23sLCxsa+zu7uzsLS9s66urq2tra2sq6qqqqmpqKmpqampqqurqqqqqamoqampqampqaqqqqytrq6urq6urq6sraR4aWJxZmFZWlZRUk5cU0Y9QlJEQTc8OzY5NTY1NDU2NTk3NTY1Nzg7Pjw7OTk5Ojg3Nzk3Njg8Oz47RD8/Q0BBREE+P0M9Pjw+Ojo3Nz9DRj54srCztLW2t7i3trKurq2sq6uqqaqtraysrq+xs7S1t4xucnRqaIB5ZmpmZWxdaG5waGxxYmNmcoJ+dmhobGpueoaBhXx4cXF5gK+6ubq6urm5uLm5ubm5ubm5ubm5ubm4uLe3t7e3uLm5ubm5uLe3t7i5ubi4uLi3t7a2tre3t7e3tra2trW0tLW1tbW2trW1tre3t7e3t7e3tre4v8bP0MS+v8DE19e8ydra4OHg4ODh4eDg4ODh4eDb3t7Uzby3tre6wMDJxLfIvrKwsLCwr7Cvrq6ur7Cwr66urq6uraytrKurq6qpqampqampqampqKmpqKmpqampqKmpqKmpqqqrraytra2ur66trK2heWpjbWdiXFhRUFFLVEpCOklRP0E3PDk0OjU2NTQ1NTU4ODY4Njs6OTw9PTs6ODY2ODg6ODY3Pj09PT5BQUVCQkNBQUBBOj09Pz05Ojc9QUc8bKqmqKutsLGwrqupqKqrq6mpqamrrKytra2usLO0tbilgIdvaWdzdGZrcG1qZGxvcm5rbWNrcHyJhG5qbHx4Y3uKfnNqc25rcY+7ubm5ubm5ubi4ubm5ubm5ubq5uLi4t7e3t7e3t7i5ubi4uLe2tra3t7e3t7a2t7a2tra3tra2tbW1tba1tLS0tbW1tra2tra3t7e3t7i4uLe2t7a2uLm4uLe3uL6+uLq9vcfb4OHg2Nnd4eHg3dfKwcPCurm5uLe4uLi3tbS0tLKysbGxsLCvr6+vr6+vr6+vr66ura2srKyrq6yqqqmoqKmppqepqaehpaipqamoop+hoZyip6inqausrK2ur7Cwrq2unXdwbGphY2BZUU1RTFJGQzlNUEY+ODs3Mjc5Njc0NTM1ODg3OTc7OTo9PTw6Ojk3NDo5ODY1OD8/QEI9RENDQ0FDQEJBQDtAP0A/PDw6O0NIPWOopaWlpqioqKenp6ipqqmoqKipqqqsra6wsLCztLW1taWYdn5xZmt4cW9tZmVsaGNsZ2ZpaX11bWlvfXZ5hWZod294b3Fvcninu7m5ubm5ubm4uLm6ubm5ubm5ubi3t7W1tba2tre3t7e3t7a2tba2tre2tbW1tra3t7e2tbS0tLS0tLS1tLS0tLW1tba2tra2t7e3t7e3t7a2tre2tre3uLe2t7i4t7i4uLi4wMXTyry8w83PyMC9urm5ubq6ubi4uLi4t7W0tLSzs7KysrGwr6+vr66urq+vr6+uraysrKurrKysq6ehoJ6gn5udoaGdlpmkpKaon5mZmZmanZ+gn56fpKqtrq+ura2srJl1cGlrY2FeXVVOU0tSREQ4TktHQTo4NTI2OTY1NDczNzc3ODk3OTo7PT0+ODg4NzU6OTk1OD9AQEJEPkZBQkNAQkNCQT88QEJCQD0+OjpERj5cpqWmpqampqanqKenqKioqKenqaurrKytra2ttLS0tbekc311bnONf3JmanFjaW1jaGZobG51aV9jZ3VzdnpuZ3Bwcn56cYihu7m5ubm6urq6urm2s7W1uLm2trW1tra1tbW1tbW3tra3tra2tbW2tbW1tbS0tLa2t7e3tbS0s7O0tLW1tLS0tbW1tra2tra2t7e3t7e3tra2trW2tbW2tra2tra2tra3tra3uLi3uri4uLe3t7i5ubm5urq6urm4t7e3t7W1tLS0s7OysrKxsbCwr66urq6urq+vra2srKuppaSmpqScmZubmpmampmXl5eXl5aZm5iZmJmZm52en5+dnJ6gpKWko6OioqKQdG5jcGFeXltUU1RIVEo/PFFCRkM7ODYzNzo1NTQ4Mzg5OTc4OTc7OTs9Ozc6NzU2OTk4NTg+Pz9ART5CPz9DPzxBQUI/PT9EQT8+PTk9Q0Y/VaSlpqanqKeoqamop6ioqKioqKiqrKuqqaipq7W1tba5o3eKcXKHhnd0cGh5a2JjYWVsaW5zal9jZWNjZWprYmRqbHaXjX6ovbm3tre5u7u6uLWxrKurq6+wrKyrq62tq6uvsLGvr7CytbW2t7W1trW1tbW1tbW2trSvr7O0tLSvra6vsrW0tbW1tbW2t7e3t7e3t7e3t7e3t7Owsra1tLa2tre3tra2tbW1tra3t7e5uLi4t7e3uLi4ubq6urq5uLi3t7e1tbS0tLS0tLS0s7OysbCvr6+vr66vr62oo6KgnJqampqZmZqbm5qampqbmpmZmZiXl5aYmZmZmpycnZ+foJ+goKChoaCgoJ+fi3RuaXRdYGZeUlRLRFRJPUVTSEVCOzo0NDY5NDQ1NzM4ODg3ODk5Ojo7Pz04OjkzNTg5NjM5PT5AP0A6QEJCQkA/QEJCPz0+QUFCPz06PkVDQFGjpqWlp6inqauqqKaoqKipp6ioqKinp6ioqaq1tbe3t7KZtH99kIx1Z2lqbGZjYGNoZW94cGlicXx5cGpmZmRma3NqhYystrKwra2ttLeysLCtrKuqqamop6ipqampqKinqKipqaeoqqurra2sqqytraysrq6traunpaSnqqyopKOkpamwsbGztbW2t7i3t7W1tre4t7e3t7Kppaasq6ivtLa1s7W3t7a1tbW2tra3t7e4t7a2t7e3t7m6urq5uLi3t7Wxs7S0tLKxsK6sq6yurrCxsK2rqqmqqKijnJqZmJmYmJiYmZmZmZmZmpqZm5ubnJybmZeYmpqcnJydnJ2foKGhoqKioKGgoKCfnop1amtuWVxhVktPREdVRz5PV0hEPTw4MzQ0ODQ1NDgyODk4ODk6Ojw5OUA8Njk6MzY3OTE0PD8/QEBBOkNGRUJBREJDQTo7P0FCQz9APUBEQ0BPo6empaemqKqqqqakpqenqKioqKimpqaoq6uttba3t7e4rbJ1cHuDdmBiaWtiZWZhZGdmfYh5bHKAfXFvcXhjbW5xZo+srKurq6ysra6urK2trKyqp6WlpaWlpqioqKiopaeoqKeoqKeoqKmqp6Wko6KioqOioKKioaKhoKChoaKjpKOjpaWlqLC0s7OzsKuqqaqztLa3trGopaOioaGipKiqqairs7Sxrq6xs7W2tra3uLi3tre3t7e3t7a2uLe0sa6ppqerrKmnpqWkpKSkpKWnqaajoJ+enZycm5uampmZmJeXmZmZmJiZmpqampqampqbm5mYmpydnZ2dnZucoKGgoaOjoqCgoKCfnp2FdGtsaFdYU0pHTUVITUdAU1dGRz09OTM2Mzc0NTU3Mzg6Ojk6OTw+OjpBPDY9ODM3ODgzNztAPz9AQDpCRUNAQkRDQT87O0BDQkNBQDxBQ0A9TqKnpqanp6mqq6mkpaWlpaaoqKippqanqKmpqrW2tre3t7izc2h7c2JnamtpaWJhZGloXV1tfHJma3J/fHR8bm1zc36gqamrq6uqq62trKusq6mpqKWjpKampqWmp6eqqaamp6enqKinp6iop6WkpKKhoaGhn56en5+fn56foKGho6Wko6OkpKSlp6enpqWkpaampqeqraumpKKhoaChpKWlpaempaeoqKalpaivtLa3trW1tra1tbOwrKupqa6rqKWlpqampaSkpaWlpqWkpKSkpaKhoaGgnp2bm5ucm5qamZiXmJiYmJiZmpmZmZmYmZmZmZqZmZydnJycnJybnJ+fn6ChoaKgoKCfnZ2cgHNrbmReU0pITUZETEtFRFFTQ0c9PDgzNjI4NDY0NjQ4OTg6Ozk7Pjw5PTs5PTczNTk2NTY8QD0/QT88P0JDPkJCQj89Pj5CQ0FFQD86PkVAO0+jpqWkpqeoqaelpKWlpKWnp6eoqKanp6alpqa1tba2trW2uYptcW1vfHxxZ2pmYGFsYFROW2hqbm9tgYJ9cWdxdn6aqKeoqqmpq6urrKqqqqimpaWkoqOlpqalpaWmqaqppqWjpKWmpqSko6Kio6Khn5+fnp6cnJycnZ2dnJ2en6CioaKjo6OhoqKkpaSioqOjpKSjpKSko6Ggn6GipKanp6ipqaelpaSipKSlqK2wsKyrqqusqqmnpaWmpaWlpaalpqioqailpaWkpKSlpKOjpKOioaGhoqKgnp2cnJubm5qZmJiYmJmam5mXmJeWlpeXmJiZmpqcm5qampubm5ucnJ6goKGgnp6enpycm356bnJiXlNNSlBFRk5NQkBPRT5JOz01MzYzODM2Njc1Ojs4OTs5Oj49Ozo5OT03NjY5NjU2PkI+PkE/PT5DQT5DQ0BAO0A/QkJCRUA+Oz5FPzxQoKSjpKOjo6SkoqSlpaSlpqamp6empqalpqaltLW1tbS0tbiBaHx9ZXOCemxwdWFfY1ROT1FbaGxpbGxxbW5xbnScoqSnqKioqauqqqqqqaempaSjo6OjpKSlpqalp6ytqaShnp2epKShn56foKCdnJ2dnJycmpqam5ucnJubm5ydnp6foKChoJ+goaOioKGjpKSjoqSlpaWkop+go6SkpKapqainpaGdnJ+jpaipqainqKioqaempaWkpKSlpqampqampqenpaWko6Ojo6KioqGhoqKhoqOkop+enZ2cmpubmpqZmJeXmJaWlZSUlJWVl5iYmpubnJuampqam5ucm5ucnp+fnpucnJyam5p/fnF0YFtUTUdNSEZMSj8/TkM8QDs8NDM4Mzc0NzU3ODs9ODo6OTk7PTs7ODk+Njc4OTU4OD9APT9BPjs9RD89REA/PzpAQUE/QUVAPjw8Qz88Tp2ioaKioKCipaSkpKWlpqenp6empqampaampbW1tbS0tLS3jHalsXdmc3Jvc2xjZGlYT1JRT09dgG1kYFptkZGSoqKjpaampqenqKiop6alpaOioaGhoaKjpaempqesq6emoJ2cm6Ghnpubmp2cmZiam5qampmZmZubm5uampqampucnZ6goaCfnp+hoJ6foqOko6Omp6inqKWioKGhoaGkpaWlpKCcmZmbnqOmpqampqanpqempaOlpKWlpqiop6enpqWlpaWkpKOjo6KhoqKioqKhoaKjo6Kgn56enZybnJubmZaUlJSTk5OTkpSUlJWWl5qam5ubm5qZmZqanJ2dnZ2dnZuampqamZqXf3dvc11aTkhKTkdFRklERU5APD09PDQ1OzQ2NDY1Njc5Ozg5OTg5OTw7PDc6Ozc4ODg1ODg/Qj9BQTw+P0A8PEJAQT49QT4/Pz1CQUA6OkA8PE+doqGfoJ+dn6OkpKSlpqeoqKenp6ampqampqW1tLS0tLS0tbSXtqd1Znh2Y2xjY2VjW1JTU1JNXqCMeFhodpajnp6hoaOjo6OjpKSlpqalpKSioaGko6OjoqOlpqampqenpp+bmpuioJqWl5Wam5qXl5iZmpqYmJqampqbm5qZmZmenZ2goqOjo6KkpKWinqGhoaKjpaampqSjoaCgn5+hoZ+goJ2amJiZmpygpKOjpKWmp6alpaOjpKSkpKWnp6ampqampaWmpKOjo6SjoqKjpKGfoKGhoKGgoaCfn56dnZyamJeVk5KSkpKSkpOTkpOUlZaZmpqbm5qampqbnZ6enp2cnJybm5qamZmZlH10bHReWk9IRUdGQkVORT9GOzo+Pzs0Njo2OTM2NDY4OTo4OTc4ODo8Ozw5Ozs6OjY3ODk5Pj9APjw9QD5AOjlAQT89QT8+QUE+QUE/Ojk9PjpQnaCfnJucnJufoqOlpaWlp6iop6ampqanpqantLS0tLOysrGwsK2rkHiGj36amn93Yl1TUlFRTGKgootaiKCgn52YmZycnZ2eoaGgpKenpqWkoqGjp6alpaOipaampaanpqagm5mboaCXkpOSl5qcmpeXl5iampmampqam5qYmJmaoKCgoKGfoaKipKamop6gn5+goaOko6Khn56enpyanZuZmpqZmJeZnqChoaKioqKkpaWmpKSkpKKioqKkpaWlpaWlpaalpaOko6KioqGgoKGgnp+fn5+fnp+foJ+cm5qZl5WUlJSTkZCRkpKSkpKSk5SVl5iZmpmZmpqam5+fnp2cnJycmpmZmpiXl5F8cmdxXl1QRj9BRD9KT0JCRjhDRT4+OTg7Nzc0ODQ1OTo6Ozk4OTo8Ozo8PT48PDo2NzY5OD4/QT47Pz49PDg6PkFAQUE/P0FCP0RBPjo4PkE8U5ycm5uampycnaGio6KjoqSmp6alpaampqSjo7KysK2rp6amp6alpqiln6iop6qnoXmEXFFST0xcnKCAYpmgnp2clZOVlpeZmp2dnqGmpqampKOioqanp6ajpKampaWmp6amop2cn6Gfl5GRkJSXm52YlpeWmJuZmpqampqZl5iam6Ghn56fnpybnJ6goJ6dn56fn6Cio6SjoqCfnp2ZlpeXl5iYmZubnqKioqKioqGio6WlpKOio6SioaGhoqOkpKSko6SkpKSioqKhoqGgoJ+gnp2enp2dnZ2dnp6em5mYl5WTk5SUk5KQj5GSkZKSkZKTlJaXl5iYmZqampyenZ2dnJubmpiYmpmXlZaNempmamBiTkY+P0A9SkVAQ0A7QEE8Ozs5Ojc2NTg0Njc4OT04ODs6Oz87Ojs9Ojo7Nzc2ODs8Oz08Ojo8PTw3Oz5DQkRDPz1BQ0FEQT88OkBCO1eZmJqamZmam5ucnp2foqKhoqSlpKSlpqSioJ6op6alpqWlpaemp6ampqakpaanqKehqXJOUU1KVJahenKanJyenJeVlJWWmJiXl5qeoqKhoqOkpKOjpqalpKanpqWlpaalpaOgoKGhoJmSkI+Wm5menJaXl5eZm5ycnJqamZeZm5uen52cnZyZmZqcnZydnp6fn5+hoaCgoaKgn56bl5WVlZeanZ2fn6GhoqKio6OhoaCgoJ2cnaGioqOkpKOioaSlpKOko6SjoqKioqKhoKCfn52cnZ2cnJ2dnJ2enpqXlpaVlJOTkpKSkpCRkpKSkpGSlJWWl5iYmJiam5ycnJycnJ2cm5mYmZiWlJWXi3hsY2RiZFFHQT1DO0tIRDo7Ozw+OTo6OTo3Mzc5NTk4ODg8OTg7OT09Ozo7Ojk8PDc2NDc/PDo9Ozw/Pjw7ODxBQ0FDQkI+P0NAQkFAOj9APztZmZiampqam5ubm5ydoKGhoaGhoqKioqKhn5+dpKWmpqenpaWmp6ampqWkpKalpKSkpaaGUFJQT0+PmHB6mpubnJ6cnJycm5ubmZiYm56dnp6foKOkoqGhoqOio6SkpqalpKSjoqGhnpyblZKUmJyam56amJiYmJqcnpyam5iWmZybnJycnJydmpqbnJ2dnp6dnp6fn52cnJyhoaCblpWVlZacn6Ggn5+hoKKjoqOhnZuZlpaWlpicnqCip6ikoaCgoqOjoqKioKCgoJ+fnp+gnp2cm5ucnZydnJmanJuWk5KSkpKUk5KSkpKSkpOSkpKRkpSVlpeYmJiYmZqcm5qbm5ucnJqZmJiXlZWWl4d3ZGdoZGJNQ0U8RDlJSkU5Ojs9PTo6Nzg6NjQ3OTU8OTY4OTc5PDs7PDo6PDs6PDw4Njg3Pj07Pj46Qj86Ojo/QURCQ0FBQD9EQUFAPjpAPj06W5qYmZqbmpubm5uen6CgoaKioKCgn5+enp2dnKWkpaanpqWlpqakoqKio6Oko6Kjo6KnllRYVVJOZ21rgZ6am5udn6Cgn56enp6dnJ2dnJ6enp+goaCfn5+goKGio6OkpKSkoqGhnpuamZehtZ6ZmZienpiYmZmam5qWlZeWlZicnJ2cm52dnpybnJ2cnZ6bmJqeoaGdm5udoKKhmpWVlpaZoKKfnZueoaKjop+em5eXlJKSlJeYmZ2goqenpaGgn56goaGioaCfnp2cnJubnJubmpqZmpydnJmXmZaVk5GQkJCPkZKSkpKSkZKTk5OTk5OTlJWWlpeXl5manJubnJucnJqamZeXlpaVlZSEcmZsYmRbREJMPT84RktCPEA+Pj05Ozk6PTg1ODg2Ozg1Njo4PDw7Ozw8Ozk8Oj09OTU4Nzw5PD88OkE/Ojo6QEBDQkRBQ0A/Q0FAPj08QD09Ol+al5mamZeYmpycn5+foaGhoJ+fn56foKCenZ2lpKSko6OioqOjoZ+foKGipKOio6SiradXXl1UV19ua42dmpqbnJ2dm5ucnZ+enZycnJydnZ+goKChoaGgoKCgoqShoqKioaCenJubm5mfq5ucmpuZnJ6ZlpaWl5eTjo6QlJabnJuam5udn52cnJycnJ6dlpSZnJ+in5ycnZ+hoJuXl5mZmpycnJubnZ6fnZqXlpaWlJOTlJiampqfoKGmpqWgn56fnqChoaCenJubnJybm5ybm5qZmJmZmZmXl5iVlJKQkJCQj5CSkpKSkZGTk5aYl5STkpSVlJWWlZaZmZmam52cnJyampmXlpaWlpaQgG9vZV5gV0BKSDg/N0lFP0VBPD07Ojo8Ozs3NTs4Njs3NDY6Oj47Oj0+Pj07Ozs+Ozo4Ojk5NkBBPTo8PTo6OT9BQ0JERUM+P0FBPz8+Pj89PDtgl5WXl5aVl5mbnqGhoKGioqCenp6enqCgn52bpaWkpKSioKCfoJ+dnZ+hoqOjo6OkobCjXWVkYGFua4GenJubm5ubmZianJ2enJubm5ycnJ6ipKGeoKGioqKhoKWzrKCgn5+enJmZmpqbrmp2nZ2em5manJiXlZWWkY6Nj5KYnZycm5ycnqCdnJucnJyempWVm56foZ+dnJyenp2cmpqampqampqbm5qXl5aTkpWVlpWTlZaam5qanZ6foqWjnp6fn5+en5+enZ6fnZycm5qbm5qbmpiZmJiYmJiYlZSTkZCRkJCQkpKTk5CRk5SYmZiVk5SVlZWWlZaXmZmXmZqenpyamJiXl5aWl5eYjX1ubV9lVlRFSzw3PjdSRUM+QkE4Ozw7OTg6ODY7Nzc6Njc5Oj0+Ojw8PT49PD06Pz06ODw9OTtAPj4/PT45OTs/QkNAQ0VDPT9DQj5AQD5APTw8YZWSlJWWlpeanJ6goKCgoaCgnp6enp6gn56em6WlpKSioJ+fnp2dm5mbnJydnp+gn56rmGNpbW5pZm2enZybm5ybmpmZmZqam5ucm5uam5ygo6SgnZ+en6ChoJ+mkpurn6CgnpuampqZqIREgJ+fnpyZmJqamJiYmJKOj5OXnJ2bnJ2cnJycnZycnp6dnpqVl5ygoaGfnp2eoJ+cnJuampqbmpqYmpmVk5OTkpOWl5eVlJiYmZucnJydoJ+gnp6enp+fn56en6KjpKKgnp6cm5qam5uamJmZmJeXlpWUlJORkZCQkZKTk5OSkpOUmJmYlpWUlZaWlpaWl5iYmJiXmZqamZeXl5aXlpeWl4l4dmddX1dURUU5OTs8WT5AOEI/OTw8Pjk4Ozk6Ozc5OjU4OTs9PDk9Oz0+PD0+Oz8/Ozk+PDw+Pz5AQUE9ODc7QkNFP0FFQz1AREJBQEQ7Oz47PGKWk5SUlpWUlpiYmZubnJycnZ2cnJ2en56dnJqkpKSkoJ+enpybm5qZmJiYmZucnZ6cpolla3R4bVuFop2dnJydnJqbmpqampydnZ2bmpuboKKinpucnZycnJ2eoJ5inKaenpyampucoaNRSISgnZ6cm5qanZqam5yVkZOXm52dnJ2fnZycnJycnZ6fnp+cl5idn6GhoJ6cn6CfnJubm5qbmpmZmZmZl5WWlZaYl5eXlpaYmZuenp2dn6GhoJ+fnp6fn5+dn5+hoqKhoZ+fn5yZm5qcnZuampmXlpaYl5eXlpWTkpGTlJSTlJSUlJaZmJaVlZeZmJeYl5eXl5eYl5iXl5eXlpaYl5eVl5eDeHZfW11eUT1GOjk4P1VDQTtDQzo8Pz86Ojk3Ozg4ODc0ODk8Ozw4Ozs8PTo8Pjk/QT06PTw+PkA/PUBBPjk2PERDRUBBRUU9PkVERD9COzo8OTpkl5SVlZaUlJSUlJWXmJiamZqcnJydnp6dnZybo6Oko6CenJuamZqZmJiYmZiam5ubm6WJa3F2em9lmp+enp2dnJybnZ6dnJ2enp2dnJydm5ygoJuampubm5udm5qmZl2joJuamZudnK51SUyGoZydnZybmp+fm5ydm5mZmZudnZ2dn52dn5+dnJydn5+fn5uanZ+goJ+dnJ6gnpubm5ubm5yampuamZudnJqZmJeYmJiYmp2foKCgoJ+hoaGgoJ+en5+fnp6foaKhoJ+enp+enJqam5ubmpqZlpaXmZmYmJiWlJOUlJWVk5OVlZSVlpWVlZSYmZuamZaWl5WWmJiWl5OUlJGRk4yRkJOWfXhqYWJiXFE8QDw2OENWSERCOjg7Oj47Nzc5Nj06OTk2NDc6Ozw9OTo6Oz87PT08QD47Oz46PT89PkBBP0A8NztBQ0U/P0REPj9EREM+Qj07PDs6Z5aTk5OTk5OTlJSVlpeWl5aWl5mbm5ybm5uamaOjoqCfnpuamJeYl5eXmJmYmZybm5qkgGpqb3lzcZegnp2dnJydnp6enp+enp2cnJydnp2bnJuampqam5ubmZmYpIBSeKKZmZqdm6CkX1ZOh6GcnJ2cm5qdn5ucnJubnJubnZ2dnJydnp2enZydnZ2cnJ2dm5uenp6dnZybnpubnJycnJydnJubmpmbmpmYmZmYmpmZmpyfn5+jpaKfoaKioaGfnqCgn5+fnqCioaChn5+fn52ZmpucnZqZmJWWl5aVlZaTkpOUk5STkJCSk5GUkY+OkJGOlZabmJWYlJmXlJiRjJCPk5yTkoyFjIeDhndxZ2pkXFxRQT44NkJHYEJFR0A+Ozw7Ojg4NjU8ODo4MzQ6Njk9PTk5Ojs9Ozw6PD48Oj5AOj5APjw/QD8+PDg6Q0FEPz5CRD8+Q0VCPUJAPDw8OmeYk5KSk5OSk5SVlJWXl5aWlZaXmZmZmpqampqkoqCfn52bmpmYmJiXl5iZmJmcnZ2cqH1nZXN7enOJop+enp2dnp6enZ2enZ6enp2dnZ6cm5ybmpubm5ycm5iYmaCIW1+UmpmbnJyjj2RaTYGinp6dnZybm52bnJybnJ2dnZ2dnJ2dnp+fn52cnZ2dm5qbnJmZnJ2dnZ2dm5uanJ2dnJycnp2dnZybmZeVlZeXmJqam5ubnZ6foqOhoKGhnJucm5ubnZqcmZycn6CfnZiZmZmUkpKUl5SPj4+OkYyNiYuQi4mLjpGRj4mQmJiQkoyNi5KQj5iYoqiqpqWlrKOmoZqep6eyqKKVo6Cfl39wcWlsXFtbTEY8NzdHR1g+SE5URjk+Ojg5ODc1PTk4NzMzOTY6Pjw6Nzo8Ozo6Ojo8PDs/PjtAQD47PT5BPDw2N0A+QkA+QUY+PEFEQT1DQj49PDlmmJSTk5OTkpOUlZOVl5iYmJaXl5iZmZqampqaoqGfnp2cm5mYmJiYmJiYmZmZm5ybnKx/am16f3lxh6Genp2cnZ6enp6enp6dnp2dnZ6enJubnJubm5ubm5uZmJmfl11ddpeanJ2dooFkWU1/op6fnp2dnp6dnJydnJ2dnZ6fnZ2fn56goJ+enZ2dnZybnJ2em5qbm52enp6dm5uanJ2cnp2cnZqYl5SRjo+QkJGVmJSWlJiZmpudmJuYlY2Mjo6TkpKRj4mQjpGRjo+Ki42NjYiIi4+Lg42NkY+MkI2Qk5WVnJihoJySn6SipKmam5eanKOprb3Bwbq8uL26ucC8ubq3uru7tL2zwbV/bnVmZ1peWUxJRTo7TElTPFZSSUM6QTo7Ozc3NTo6OjgyNTY4Oz08OTk7Ozw5Nzo4Ojw6PT85PD8+PDw9QTs5NTg8O0A/QT9EPTxBQkA8REM9PT06YZOTkZCUlJOTk5OTlJeYlpeZmJmYmZqbmpqamp+gnp+fnJqZmpqampmYl5iZmZmZmZmphXB1e4B3b4mhnp6enp6fn56en56fn56dnp6fnp2dnJ2cm5ubm5ucmpiZmZpgYWCAlp2cnph0Y1VPgaKfn5+enZ6hoJ6dnp2enZ6fn56en6CenZ6enJydnZ2cm5qYnJuVmJqamJiYmJmSjJCXlKCXk4+MjYqKiImMiJORh5CPjYqKkJCLjoqMi4+IiImJjpGOjYaFiYaKhoWLiI+SkJCNkJKXlpKamJ2TlJ6kpqaqq7Gsr6+rpquqsbm5tbS0rqyvtMDIxcXBvsbDxMTDurW+t7a0s7C2tb6qcHRyXGZfXl1JRj8/RUtMVklcTEQ/PUI6Qzk5Nzc7OTk3MTc5ODo+ODg6PDw7OTc5Ojs9Oj4/OT5BPDs+PD46OTY5PDpBPkNBQT08QkBAPkJEPj8+OVyHhIOHi42KiYaFgYqMkZOVmJiHlZaWkpiampmenZ+gn52ampubm5ycm5iWmJiXl5ibqo56dXZ7f3mCoJ+fnp+goKCfn5+foKCfnp2dnp+enp2dnJqbm5ybm5uYmZmfaV5bZX+cnJ6Mal9QU4aem56dnZycoaGfnZ6dnZ2dnp2dnJiWlpaYlZWSlpmWk5GKjI+PjI+NkIuLj4+WiYiEi5GZjn2Fi42PjYyHioyQm4yRj4+Lio6TjIyNjIiSi4yFiYyPhouIh42KhYyEj4qXkJOYmpWbnKOqoaKknKKrsbe0ubWxtK2vsrKlp7O6sbq6vLa3tsDDw729vLa/urq8wbW4wL60r66mqa+3mm58Z1tjWl1fSEU+QUtJU1hZXkFGOTk9OkY/Pzo3Ozs7NjM5Nzo5Pjg6Ojw9OTk4Ozk7PDo+PTtAQDs8QjxAOjg0Nzw7QkBBQj4+O0NEREBDQz0+PjlhmZWLkYWNj5aSiHl9e3+Fi4OKgoqJhmuAeJCLlpqRnZ2UlJGTlpeampiWk42Sk5KQm5uIdndzcX1/cpGgnZubm5yenZ2eoKGgm5uWlpucmpubnJuYmZqYmJmbmpqXk3NoYVR2k5ech1xWUFeKko6SkY+Uk5KXm5mYm5ePjpCLjo2Ch4uLi4qLiI2RjIeHhoqIiZGKh4yEhYqNi4qNhI+UkIyDkJOUmZWQi5OTkZWRlpWOj5GMlI2Oj4qIj4ePhoeJiYmNiomJioWNh46JmJKUmpuXmKChp6Cko5qqqbO2sbWwqKqiqK6tn6qvsK21ubi8wr/BxLixtbCutrOwuL68ury+urOzp7G3wpB1gGNiXlpXUk1IRkVQSVlXX1tDUDpCQz1HRj84Nzo6NzU1OTc8OTw5ODo9Pjo6Nzs7Pjs7PTs9P0E7Pz48Pzo4NDM3OkFBQEI+PjpDREM/QUM7PT45Z6mlo6KZn6CippeUiI2CiIJ1h4iKiIp7e3Z7enmPeoiSfn18en6CkYWBgH1zfH99fISHfnRweHZzfHaBj4iIiYeIioyMkZicl4iOhIuNi4iNkZCPi5GPi4yPkJGRjpKanpJ9oKOWpJxuTE9jhoaCjYuGiYp/iYqGiJiRiIOIg4KFfIuLjIaJi4iKkIyIi42PjI+Wh4mLio6NjY2Wk5OdnJyalpycm56bmpuYnpeTkZWWkJKRi4+LlpSMjYqDi4SEiYyQkIqOio2LipGJjZOTk5SVk5KcmZ6Xn6CfpaKvsamupKSfmKStpqa4t6ysu729wsPAv7+vpa2wsLS3uLO0uLa0ta6stK+4tLaBeXpjZmBeVlFRQUVMT0lcXl9UR0dCS0xCREA9ODg7OTU3Nzk3Ozc9PDk9Pj05Ozg6O0A8Oj06PkJBOD88Oj84NjQyOTtCQD9CPj04QEI/PkBEO0A+N2CloJqXnaGaoaCPl5efl5WCjaCfo6GdmpKOjIxycXBvdnFucG1ucHZub29waHBxcHR+c3FycXd7cnl2d3Jyd3Z6e3l8fXt/iIGEi3+PkYaNi4yGiouLiYeEgYaDgISgnY5/a5allZ9/iX9fcn+AgpKQhoSEhY2DhIyPj4+IjY+Hi4iRkJWRjpCKk5eOj5WYp6SfnZWYlpaln5udq6aqt7W4srGnr6qnpqGfmp2WkpWVkYqPjImTjZuVjYuLhoaJjJWQkJCLmZKVlZSbkJiTlIyNkYyWl5WilZ6mqauno6OqsJucpp+mq6G0vb6zs7+5u7u6uby9rqiusa6wuLyztLGxqrCpqLGxsqild3J0X2hhYFRWUUlKSFZNXl5eVExKRVFKRUdDPTo5OTc0ODY5Mzg4PTo9PD47OTs4Ojs/PDw+OT9DPzg7Ojg8Nzc2Mzc5RT4/Qz89N0BAQT0/RDw+PThUj4yGh4eUjJWZl5yWmZaNlZyWlZydoKCdmpiWeHFubXJ4cXFsbnJwa3FvcG1yc3t1dnd5fnVxeHZ0d3tybn98gX15eH1/eYOGg4WCg5CLkIuLi46Pi4mJhYKCfn+Aoot8blJ1nIyMWXF9fH59fIaOjYuGjZSRi5CXj5SXkpihlp6WlZunpp+goKawq6GjpbW0sqqmqq+isba5vcK7ucO+vLi9uLWxrLCsppuSk5mfm5SPk5WOmp2doJqfn5edo6qsoZ+em62hp6qwqaampJiRkZWUo6SirKSss7Szs6i3tru4sLKvra2yt7a6srW6s7e5u7i8urayr6yxsbKztLOxsa2us7Gzs6yhl3Zxc19jXlJRVE1PSUdYT1pcZFROR1VPRURKRD44Ojg3NTg4ODU5Nzo6PTs/Ojg8OTk5PTs9PTpCPj84Ozo5Ojk4NjI1N0I+P0RAQDY+P0I/PEM8PT46Tn98go6MjJOTl5eaj5SWjZaRkZSXk5qanqGdnHJvcnFxcXFxcG5zcW91dHJxdneAdXd8eYV+d3t8eX1/fICJiYmDfXp/h4GIiYGAgIGGiIKGi4eIhYSIiIqFgIJ9mJp3WE9McZSGgktfcHF3iIWKjouNkJmclJSUoJqan6Ktsa6ppKWtr6ysrLWuvrmtrqm1sLexq7G2rK+9wsLAvrq8trKutraxtK66u7OurKepp6unoqmtoKmooq+wuLSxvLq6urK0ta+8tLezt7e7t7mtrbCprLW5sbeytLe2sLu7vLu6ury1vLi0wbWsqqqrtLG3uLm1trSzsKymrrCqq7Cxq6yusLKxtK6qo5N4dnJlZ1tMUlBFTUlTV1JlXmdUUExcUUhMUkNBOTk3OTU4ODY2Ozc5Ojs6Pjk4Ozo6Ojw8Pj08RD45Njs7ODg+OTUxNTZCRkREP0A3Pj5DPjpBP0BAO0t/gomXmJSdlpabmIuSlo6XkZGVl5SZl5+bmZx8dHV2dXl1c3RudnJzdHV2d319gH56gXyDfoJ/fYB/hIKFj52RiYF/go+Xjo6HgoCBiIuFfoqRi3+IjYyLi4eRjaONVC8wPXiHd3dARF1rbYSQiYmQj42PlJSYkJWcmp2eqK6ysLC1tLOtsrW4sLy1tbGqsKqztbS7t7SztrS1r7i4t62noqassLCvtre3vrW5vLOysa61u7C0r6+yu7axuMC9tLS0s7izvLq2tLrAvbm6ubq+ubm5vrWysa+yr6q1tLGzsbSzrri4tb+vpKaoo6ussa+zrq6wsKytq6qroqKmqKKnrauqpaynoqeYeHlxZmVZT09NSVJNV01PX15cTlVVYlFEVE07Pzk8ODk1ODc1Nzk1Ojo6OTs4Ojw8Oj08Pj4/P0I9ODY6Ojk6QDs1MjY2QUZDQz4/Nz49Q0I5P0I/PjtLjpGTmJmVmZGTopiTkpKLk4uOkI+Vl5ablZSbhoJ9enh2dHRzdH53end2gIKDhouMhISFioaQiYeRk5aRjZaalY+IjI+emJaVkpCTl5qamZCeoZ2Tl5uhmp2boqacZ0JbSDt4eWtnRTE4WmxzkI+LmJqPj4yUmpecnZugnaSstLm6vK+2tLi0tLK3uLmzq6+qqKy1srK1rrGrrqa3s7OxpaGotbCvrayrtbqyu7q6tLK3ur67ubG4sLmtqLK4u66ttLS3tbu2trm5vLe0r7G0t7a5s7e1pq2pq6ior6yprq2up6KxtLG0q6aop6Cjq66oqq6orLKwr6+pqKGeoaGjpqOgopqlo56ol3J3bmdiVUpUT09KRFBLX2JYWlFcVGBNSFJJQUA5Ojg2Njc3NTg5NDs5Ozk8Nzs+Ojg8PD0/QkBBPTs2OTk5Oj87NjM3OD5GQkJAQjk+PUBDPkBGQj44R5OWkZWTkpSQkZ+ZnZmVkI+Sko6Mk5aWko6RlZGSkIaBeXJzdXuBhI6HhZGTkpicnJiVkJWYo5yaoaeqqZ+clpeVnaKioZyZnpmlqKyvramnqqqpp6KlqKmrqamvj0pyonlBfHhkYlFTXUlgboqhoaSem5qkp6Spq66spaSoq6+xtK6qrK6zr6ystLO0ua6urayqrLKwsK2wqKqmsrS0uK6qtrqwr6qurLC3s7i0t7W0u7y4tbWxtauyrKiys7uvrbGytLa1sbG0s7OvrKuvs7a0sayutKqqpqWnrauoqKupqqifqbOwqqeppaOio7CtqaatpairrayppaSioKWipaOYmZyVnqKippdudWVnZFdPWUtLSktTVHBiWWRXX1tcUlpQTEM8ODk6Njk4NzQ3NzQ4Ojw6PDg6PTk3PDw7PkM/QT47OTo5Ojs+PTg0NThBREVEQkM5PjtAPkI/R0Q+N0KSm5SVlZaVj46Wl5qZlZGKk5SSjo+SkYqKiY2Ul5qTjYmCho6VkZSfmpuin5+jnqGhn5ijpKelpaapqa2rqaKmpKilpKGfnqOjra2srairrq6rq6ykoaKmqaeoo3hgwdalQ3yNgnVPbY52U2R/o6inoKKhrqyrqqetrqilpKmpqqmmo6iqqaekp66wr7Ovq7Crqq+yr7Czua+rqLCxrrCyubO0r62vtbCss7GurLW1tLSzs7CvrKyqrKusr7G0s7CwrrCwsKyqrauqq6alrrCysKumqbCvqaOkqaunqKaopquwq6mvqaaoqaalo6iwraqpqKKpo6WnpKGhoKKloZ2el5aYlJugpKmUbnNeamlfVlpOUk5RT1NlXGVjW11ZXFBZT0tAPDs5Ojc6ODczNTMzODo9OTo4OTo5Oj08PEBEPkA9OTo8PDw+Oz45NTo8QkFFQUNBOT47P0BEQERCQDdAkZ6YlJeZlpGHi5SSl5GIg4mLk4+OkI2Hh4SFlZmWmJeZlpqeop2ZnKKkoaCdn5qfoKGgpqGgoKCjo6KlqKmrramqpqOmpaCloKaop6aoqaepqaSnp5mdpKWjop1if73Arnigo5qVZUxheG1RdJWioqChn6GhqKCcn6GloaCmo6KfpKGspp6foaGkrKqnrKivq6e0sa6ur7WyrKqwq6mtrbWwrq6srreup6yqpKivsq+sq7Kvqqqpq6utqa6urrGxraqtqaunp6uoqauinaapqKilqKisqKilpKWop6iopqmsr6+oq6mhoqKlo6Opq6ymqKWjqKKhoKSdnZ+hoZ2bnZ+amZWcnKOqlG9zZm5yZF1dUFVPWE9eZWRsaGJiWlpSVE9NQTo9Ojo4Ozk1MTYzMjg4Ozk5OTk7OTk8Oz0/Qz5APTk7Ojs8QD0+PDk5PEFBRUFGQTo9Oz9BQUJBRUI4PYqWlJOYmpaPiISNjpGSjIiIiI+JiZCRjoqKiJubmZygpaKlnqKjoZqeoZyanZ6bnKOop6ugoKOYoJ2XnKGjo6WjoqKkrKilqaCepqmnq6mkoKKhoqehpq6mpp2eaoScuo+o0aKas6hYTKyTU2WPoJ6goJ6doKOZlpqYo6KipJ+ZnKGhoqCbmp6goaSgnaejqrGorqusqaSqqquorKalrKqws6+rq6mwq6appaWoq6ynpqevq6Wnq6upq6irqqqrrailqKOmpaesqayoopykoaOmo6qpqKano6SnqKanqKepqKupoaKoo5yepqWjqKino6WlpqmgpJ6inpeYnZ+doqKlnpiUlZ6go5d1d2t2eGJfXFVZUVVXW2Nfc19oX2NTUVlUSD48PTg7OTo4NTM3MzM0Nzo4OT05Ozo5PDxBQEM9PT44Ozw9PEA/Qj86ODo+P0NAREE6Oz49QD9DQ0VDOTyCmJmenZ2alZKKiZGRl5GQh4SJgoGNj4+Sj42cnZ+hpKmlqaeorK2moqKfmKSmo6Stsa6yp6asm56em5qjp6Cfo5+foq+rq6yoqKuvqaiqqKKgoaiqrbGyr6uiooZ3fn1yz8iwmqeva1WqsGNbh6WfpaKhnqCimJWem5+fpKGclZigoZ2enJudnZuZmZWen6Oonp2iqKGaoaOmoqSoqaqoq7CxqKWlp6eopKWpqaqnoqWmqKadnqWloqClpaOlpqCjpaOjpaelqamqpKekpqKmp6SrqaenpKGlqKynpqWlo6OopJWdo5+bnaCjqaeopqGjo6mooKiioJyVkZqfn6GmopuXkpCamqCVfHdvfXlmW1tgX1pcVVxoZG9jbWlpYl5QUEA/Ozo4OTg8OzYzNDMzMzc5OTs8OTs7OT49QkBAPTs9ODw9QD08PENBPjo4PT9EP0M+Ojk/PEI/P0FEQjk6gJ6kp6Gem5+gmY+ZnaCWloqGj4iEi4qTl5SRo6Wnqq6trLOys7S4t62pqqevtLKxqq6usbKusa2lq7OssbGpq6+rq6y2sLSwq7GysaOgo6qqp6+3t7S1trOtrq2PhoNukcy7lJOklnRUb3pzcH2WpqqnpKCfo5udoZqWnqScm5aZoqefoJ+joJuUlpmWl5qfoJmVnqGZmJ2dpZ2gpKeqqaiqraylqaSlqqeqqaqsp6SkpKOimZmhnpqaoaCfpaWYnqSmpKqooqelpaGqp6mnp6ejqKWmpaGkqKesoqekoaalpaOVl52Ym5mVo6elpaSfnZ2lo6Kqo5+amZiXnJyaoaGakJOTl5ibjX93cnZ4amJbX19cYllgZG5ta25hX2RgUE9BQDs7OTs4Ojk2MTQzNjQ3Nzc6PTo8Ozk9PUI/Pj89PDo/OTo7PD5CRUA9OTtAQT5DPDs5PzlAQEBAQ0M7OXuao6OcoJ2dop2Zn6KioJibmJaYkpSQm5qWl7S0rrW4s7S4tre0uLm3tbm4ub28uKqLnLK4vLS9urW7uru4s7q/uLe5u7G3r6iusq2inaCrsre7u7u5ucG4tLWgiHlkWJ+2vaanmoh3a3FveHl7foaOkpido6Wmq6WkmKGko52goaKooaOgpaGck5mYmJmco56cmpudl5uZlqWam5+hqKmpqKuvr66pqKirrKytq6irp6WjoJyfo6Ojn6Cipammmpyip6Spn6GjoqKgpaanpqSooJ+ipKGjoqiop6OloaGopqalo5mbmJuTj6GknqKfmJiVoJuhpaCfm5udnJuamZugmo2YmZiTkYaAdnh4eGNbUllUX19hbWh2a3FoaWliWlNMQDw6Ozg5Nzk3NTU2Mjg1Njc3Ojw7Ozs7QD4/QD0+Pjk6PDk2Nz47QkZCPDg7P0NDRDw+OT43PkFCP0ZDOzhwkpqblJ6bm52Vl52doqajopaXnpaXl6GblJi+t7G4uba3t7i7l5S2vbu9vcDFtaK7mKC3v7+6wcm0nbu2sra/xcGooLa0urGqrrSxsLK0tbfBxszPzszJvrOkkHNmUkSLlYaGhn14cW5nZmxpbHJycXJydX2NqcTEu6Knqqynq6mlpqCnoKGmoZOWmJ2foqSjnZ6coaChnZekmpmdoKaqqqqtrq2tsLGrrK2sqamrrqimpaalpqSkpqaeo6eppKGcoKKjpqCio5+jpJ2foqWgpJyboZ6fo6GhpaSlqaOkpaKkp6ehn52elpOcoJiZko+MjJeWn5uWnJqdnJqSlpSUmJOQmp2YiouHgIB8gnhhXllTYWlhZnRvdGl0ZGlkYltMSz46OTg5ODg5NzM0NTI1NDY2OTw8Oz08P0E/QEA9Pj44OTs4Njc/OUJFQzw7PD5DREM9QDs9Nz1DQ0BFQjw3Z4yRk4qalZiblZWYm6Knq6aVl5iQlZmhnpeXvrWztLu6ubi5woeYt6u4u8DCxbOjw6e4s72/tMTHvbS7uL62wMTErqCworW2tb2+wcTHw8XH2+Pj2su8r6SXiHRZWlFEaXhrbnRua2VlWVddWFxjamppZmFpirXBwLmpr7Gwr6yqoqajrJ+fpquXmqifpaWfoJydoKuwsKyiq5yYm6Cor7Kys6uorre1sq2tqaalqKulpaStqaShn6Cnnp6mqKmmnp+anqGlpqmcnaObl6KmmpuanZ+cmqGcmZ2eoKijn6GfnaWioKOioZSZmpmTj4qLhI2Qk5uPjpiVm5eYkJORkomNl5iYk4uKi32AgIVwYGJfXmtjYm54dXdvbVtiUlZcTUc7PDk3OTc5Ojc0NDQxNDM3Njg8Ozs8PEBAPUA/Pj8+Ojo5Ojc6Pz5FRUU8PT1AQkJCQUE7PDhAQ0NARD87NV+MjIaFlouUlZeYl5ifpqellpWVkZebn5ual7mxtrO5vLy5urWqsryxvsG0vMe5uLuuv6fGw7/KxsnIxcXJvMLHx7+xsKe8vL7FxMbJx8XGvs3S1cq5p52UhnJeUVRLRFtlXmNqZWFgaFlUWFNWWVpdWVt1mre8rLSyrbOtqa6vp6awr7Ktqq+zpKu1qaeopKCgnqmyuL61tbWqqaausre4t7apq7i8ubexr66noqOop6SfqKOfnqCZoZydoqSnp6GelJuaoKGlnqChnpajnZSQlpiboZqflpORlpSin5qenJudoZ6kn56VnJiPkpOPjImTkJefiZCWkZuUmJGRlZaDjJWXlpKLjIh8f4R/amZoYWtsZ252cnJ2cmdeYFxSSUU/Ojo6Nzg0ODw3NjU0MjMzNjU3PDo7PDs9QD4/QD48PTk5OTs6PDw+QkRFPj49QENDQkREOzo4QUJCQUNAOTJbk4iEjZGKi5GRlZCSmp2fnJOSmJSdnZqXmpW2sbm1tb6+tri1uLO8vMTEusPHwb+0s8XFxr/CzcfLzsvLx8HDxsfIysXExcO7vLzBxcHFxL/CwcfLyLeUdWVVUE9USD5ebF5fZWJgXWRhU1VXVlVVWHOcrbGqqKqtrKmlpZ6pr6uyu7q4u7e5t7O5uLOurLO0qrC1ub3Bur6+vL60urm4u7qysbS8u7q7s7Oyp6Smq6uioaCdmpudmpyXmpuenJygnZaclpuZnZ6io52UnJCNiY6OkZ6bnJWNh5KLmJiWmpybmJybnp6cmp6UjpiYmpSRmZeeoZWYmpKXlJWRlJqYk4+TnZaSi5F+enx/dWtsbmRvbWlxeG95amlhXWdhUUZEQTw5OTc2NDQ6ODQ2NTMzMjY1Nj05OTs7PT47Pj49Oz05OTs7Oz89QUNBQkFAPEBDQ0NFQjs4OUQ/P0BCPzsyV5uQkZCQh4WSjo2IjZCTlZGPjZSUm5STlpqRs7e4uLi+u7C1sri2tbbAw8G+w8LAvru+u7u8xMzEzNDLxsa/xcfLyNTLysjGv7u7vsS+xcjGxsTEw7m4w5thSURHS0Q9W2ViYmljYFtjX1dST1BQVoC0uqyupaSjqKSgoKWZqbSxvsG+urm6uLW0srG0tLO6wL7Av769u7u9vsDCt7a3tru7sru+ubi3u7a3tKyoqamrpqijnpOampyYkZKZl5GRmJqXnpiWk5acm5+dlJOJiX6GiIyWlJiZkYmVkZeWlZmbmpaYl5idnpyhmJWZmZyYl5ybn56jnJ6WmJeTl5yZmZyUlp2UlpOJdnl6e3dua2lodlpnc3hzemdnXmRbUlhJRj87Nzg4NzYxNjk3NDQzMzM2NDY7ODo8Oz08OD0+PDo7PDs9Ozs+PkRBQURCQEBBQkNDREM9OTlCQD8/QD89MkyWmpaSk4yKmJCKi4yOkpKKiIaNkJiKj5CUl7O7tba/vb2xtrjBvby0uL/Bsbi3vsHFvbu8wsbJv8jOyMHEwcfKysbKxczIzcbIxb/DwMvNz8rGxMTEwsTBrYNPRk1FO01bX2VrZV9bYFlZU05VgKOrubWyrKmjoa2prKetn6y0tL/Dvrm4vbawrausr7W0ur7Fv7u8urO5u7i5ubWtsLS9u7G/vLiytrmzubu0ra2orKyqqaeXnpualY2MmJSTi5WWlJyZl5WWmZKYn5mQiop+iYqKkY6Vl5OUn5mWkJSZmJmWmJOUm6GeoZiYmp2ZmZaenpibopqdnJuYmpuZlpeXlpyZlJyYfoB4eXZ2ZWZqamhea3BueXhjYmFgXlhXRkU4Ojg6OTc5NDQ5NzY2NTEyMzM0Ozo9Pzs9PTo6PTs8Pjo7Pz48QkBDQkJFQj0/Q0NDQ0RFQDk6QkFBQj5CQTVCkJeUlZmSj5qQjpKRjZSVi4qHjI2UiImPkpq2u7S8xsHEwr3BxcLAtLO9v6ywr7rDysPCvs3IxbfByMW/wcLIy8rCwsTJzM3Oz8zDx8bIycjIycfFycfIx8LGlmpYRz8/R15jYmpgWlhXVFZ3mrfAu7y6vKytpqm7urm3v7O1uLLBxrq3t8Gzsa2tqau1s7u2w7a2vbWxt762s7e4sLW2v7uwvbq0q7CxsbO8urOzrqutq6yxnaOjoJqQjpiXlZCclpaYlpWSnJmTm5+clpGUjpWQiYyQlZOUm56YmZKSnJedlJmSk5aZmJ2VnJ6do5yVnZ+TnKKcnKCfnaOemJSVl5ebmpmgkH99cXRxb2NhaHZoamp1bnlsXmRbVmBZTEhENjw5OTg4OjUzOjY2NDQxMzUyNTs6PD47Ozw9PDs8PTw7PD49P0E/RUFCQ0M+QEFARUVERUE7Nz5DQkI+Q0I4O4+akZaalJKUjZCUlI6VlI6Pi4yJk4uIkJObt8C6xsXEw8zCwcS9vrWvt7uvr7O6wMfFxMHMy8W2ucDCwsTHytHLwsPExsnFzNDNx8zJwsLHwsvLyMfMyc7Fxsa9qXJQSzBYU1VmYVNOUHGpyMjCxMfAvL60sLCwwr6+wcbAvre2w8K6urbAvrWyrKmvsri+tMC0tLi0t7nEua+8vrm+v8K/tbq2q6qsrq+wt768trSura2vtaSlqKimmpycnZyeopydmZOQkp2VmKCdmJiVmZmZl46LlH2QkJefmZmYk5GToI6Nko+VjpCUlaKdnKSem56elpyjoKGipKOkop6amZubnJ2enIN9cn14cGdga2p3bWlmdm90Y11jVVdVU01HOjc7OTk3Nzo3NDg3ODQ1MjM0MjU7Ojk+Oj08Pz04Oz05OTk9PEBBQEVCQUJBQT9AP0RFREVAPDk+QkNCQENBOjSAoZeUmZiVkImUk5aTiZGMlJGOiJaKi5CXnMXLw8O8wMPHwbm9vbu4tre3rrK3uLzAwsDCx8bHurzAwsTHyMbSycHDw7+/vsTLyMrLyby8yMfJzcjDyMnJxcXCw8LBvJE/T3Z+iVZMb6XL1MW2v7/Av7q7vbWzs8C/ub/DucC3u8G8uri7ub27srCvsKy5wri9ube1t7q9xb24xsjCwcLGwr28tamurrCwr7O6t7m2sK+tr7OppquprqannqSlo6OjoqCblZiekZecl5GRlZeZlZmRlJiSlYyYo5qcnp2FiZ+TfJKWlZKUlJennaCipJ+en56foaGkoqKjoaOinJ2fnqOhppl5enmAc3BmZWdkbGVia25vb19ZXVdWTlBKRjk5Ozk3Njc3NjM3ODk1NjEzNTI3PDs8QDs/PDw6ODo8OTk4Pj1APz9GP0JBQz89QT5ARENDQTw5PENBQ0RBQDozbKKdlZedlo+PmJiZmIiSjZGVkI+Vjo6TlpbKy7u5urnBu7q3vsG8vLu5sa61uri4u8S6vsC+vru8wMXBxsK+xsK5u8O6uLm8vsHHwca7ucjIw8XEwMPBwcDEwcK9vMWnd2uDkJdvqsnIx9HBr729uLm7u763tLC5vrO8vrG5tbi8tryztbm2uba5t7GtusG6vMG/t77Ev8bDw8fHwrvAwr/Cv7iys7O1tLGut7S3tbSxrK2xp6Wlp7CtqJ+nq6ajqKWmpqCgn5SYmZSRkZWUl5OYl5qhnZ6hnKGdoaWglpSbkZeXmJqTnpmZqaSlpKWdoqCanqCkoqOcoqGjoJ6cnp6ppaiVfXuDeG5mYWViYWNkZGpjZ2RbWlpdWVFPRT07OTo7Nzc5OTY0OTk6NTMxNDUyNzo7OkA9Pzw8OTc3Ozo5Ojw+QD8+RDxCQURAPz49QkRCQkI+OjlCP0FCPT44NVmfnJiTmZaRlZiYmpeQkZCQk5GTlJKSkpSUxce4tbq5wrm5vMPFwri7ubGxtry6tbnAu7u5tre0tLW/u72/ub66urTAuLW3sq66u7fAt7zKz8C6v8C8u8W9usDEv72+r3NlfZGKitHFv7/Jv7DBv7q3u765tbi0uLy0vbi1tLCzvLG3t7i/tr25vb65t7q+u7/Axb29y8PGw8TAw762ubq2v7i7v7y4trOyq7CwsrWzs66sq6emnqeurauiqKumpqqjp6iqo5+Ym52bmpicnJiXnJuhpZ2anqGhoKGmoJqbnJiboJ+dnJ+coKiho6SknaKfmqKgop+el6Shop+dmpieqKWhi3x5iH1xZGFjY2hrZ2dqZmpeVlZUWU9TTEY4PzY7Ojc3OTs2NTo7PDYzMTM0MTc7OTg/PT47PDs3Njk5ODo7PUA/PkA9PT9CPjxAQUNDQT9DPTk2PEBBQDw9ODdJlJibj5OUkZWYlZGWkpWRkJGUlZSTk5OYlcHCwLq8ub62uL7EwMKxvbqytLO4vLW3vMC8vbS0sbC1t7W7wbi+ub+8vLe0t6+ut7W5v7vB1Y24v7vDtbrHtrW4ury4ubaqpJiOfoTJv7+7wb65xr3Cv7zFuLa3tLi2tru7uLa0t7q1s7i8vbm/ucPAwLu5vLu+vcjEvcfEw7rAvb62sra4srm0usLCureysaysq62yr7Kur6ijpJ6rrKyqpKakpKiqoqemraihoaGmn6Oiop6bnKKfoKOdnJuhn6KgpKCem5eZn6GdnZ6eoaWkoaKioZ6ho5yinqCZnZijn52eoJqZoKKmnYR6g4F5cW1lZWdwamVsaFlZT0tLS1JKTEhEOT44PTs2Ojs5Njc8ODk4NjA0MzE3OTk7Pz0+Ojw6ODg5PDg6Ozs7PD1BPj09Q0E8P0NDREA/Pzw6Nz5CREE/QDg4P4mYmoyMkI+Tl5WMkpCakpGXmJaUlJKQmZTDvsbBwby8uLi6v7a8scK2tLyxtLa4s7q9v768sq2vrLGwt7y3u73BxLm3t7a1ubm6u7+8z8R3qMy9x7e5t622tLe5s7WxvcnElUp7yr6/vr28v8jDxcW+xri1srK9uLi4vrq6uby6urS3u7q5v7zEwL+5uri/ubvFxr3Fw8Kyur27sa+2uLO3s7q+wLm2rLGrrqmqqa2qqq6mpKWnrq2ppaOio6GkpaWmoqato6Klo5+ho6Gcmpyhn6CloaCenZygnaWgnpeVmZ2fn52gn6KmpaCknpybn6Ofn5mcmZ2epJyWnKOcnqGcppZ+f4d9a25xZ3FrdGZjbmBcVUhLS0RKQ0NHPzo7OD48Nzs7OTc4Ozc8PDYyNzUxNjk8PD08QTs8Ojs6OT45Ojs9PUA+RD89PkRAPz9BRkQ/Pzw9OTc/QUNCQEI5Ojl3nJiLh4uQkpOWjY+TmpOQnZiSkY2PjpiSvbfHvsO+vbu+vL22uri9ure9s7OwuLi1uby7wLeqraSusLi7sr2+u8S2tbi1t7++xLzCxNaudIC7yM/CwLiutLS7vbe5sb3Dyo5Ddc3Dwr++vbzHzMfHxMe9tbW2wb27u7/CusDCv7y2t729vcHBwL+8ube8wru3v8W7wr++tbe8vK+vt7awtLO6ubq7r6mtq62rrKaqoqeuqKWqra2vp6Sgn6ajnqKjqKOjq6Oiop6dm5ublJaZnJyfpZ6fnpmYnpejoJyXmZqZmqOjop6jo6egpqCbnaCjnp2WoJmcoKCblJegn6WcmKKQgYaBcmZsam91b3hkaGNcY1FLVUhFRUNHQzw7OTg9Ojc6PTo4OTs3PD01MzY1MDY4OTo8O0A9PDo+PDk+OTk9Pjs/PkM8Pz5APz4/P0ZEQEE/Pjo3P0BDQz9APTo4ZqGYj4uNlZKVlY6PlpmVl5uVjoyMjY+bk7m2wbS/vLm8w8C+wLq1trKywLmvsry8sLe7tru8qqqjsLm9vLK8vrzFuLG4ubzGycrCxsnSmXFyq9HRzMrEtbq/xMi+vrS/wMB5Um7LxsK+wby/w8zKx8XGwLm9vMS/v7/CyL3Hx8XFvLrEv7vBv7rAvLu7wMS9t7nCub69t7S2uLqur7WxsLCytre0t6yurKqsrKuoq6Gms6qlra+trKippaOkp5+io6Onoaeiop6cnZyamYyQlpeZnaKZnpuVkp2UoaCdmZ6fmJimpqKfoqKmoqeloqCko6GbnaCbnKKfl5WVnp6kmpafiYGDgXRwbW10bG1vYGNfYmJOSU0/RUA/REM7Ozo6Ozo4Ozw6OTw+Ojo+NDQ1NTE5OTo5PDtAPD89PTw4PDs6PDs7Pz5DPkI+QD89Pz9FRUJBQj87Nj9CRUQ9QUE6OlmfmJOSlZqVmpOQlpeclZuZlpSVkZKTnZm2uLaxuru6vsG5uca7trWypb69tLbBv66zvbS4wbGwsbS7xdDDur68xL63vMC/yc/HyMrKwoZyc6PMzMvNysbCw8vOwby4vbqycGNiu8jEwMC/xMDKycPDxMO5w769ub+8wsbCyc7Hxr66xr26v7m3wLm5vsDCvrW0vLi2u7CvsrK1r7Cvrqyus7CzsrirsbKxqrCrq6yrrLatqKyusqarrKmpoaWgpaakrKSmoaChnqGgnaCMlJeTm5+mmZ6emZOYnZ+gnp2eopuYp62ooqSgoKKqpqmhqKGlm6CgnZ2jn5SYmKKdp6Gfm4J7eoh7bW14fGBxZFxfYF9UST5DRUlCQz5DOz42OTo7Ozs7Ozs7PT05PTU2NjIxODo5Ozs6QTs/PDw+Nzs8Ozw9PTw9Pz5BQUE/P0FCQUVDQkRAPDY+Q0RFPkJEPztTmZuZmJ6dmqCalpyZn5KdlZ2boJWWlJqYur20sLu8wcTCv8XGura5sqO7vbS3xLuwtbq2ucS4tLy3u7ur2sO+tr7Avr66ppypsrbDv6V5dXiZxMfLyMHDwMDJysG/u7mxoX1za63IxcS/wMG/y8fDwMjAusG/w7O6usG+wMrOysS9tby8ub+5ubW1s7/Avre0s7S4rbeqr7CwsrGvq6+nr7ausrG5rra2uLSzsLGttrS6sa6srranrLKsraSjoaenqLKrqqWkp6elpaCml5ujn6SmraKeo6KanaWiop+foaWenrC0sKSlnp+kqaevp6mgq6CiopqipJ2anqGmp6+psZWCe32Bem5zeHRocF5cX11aUkZFRE1JQUQ9SDs7NTk7Ojw8Ojs7Oz0/Oj01NDUxMjc4ODs8O0I8Pz46OzY6PTo7Pj0/QD87QUFBPj4/QkBBQkJFPjo1OkFCST9AQkA7TJqdnZ6fnZienZmampySoJWbnp+blZGRl8W+urbDvMbCvr/Ixbe1uLe2ubu0r7e3srWzt7m8u7a7u8S5bazOvba5wLysfW5obm1ygZWYc3d8l72/xsC5wLy+xcS9vbixsJiQfYCbysLDvL2/v8PDv7/HvLzCtayutLS8vr/OzcvCt7K4t7e9ubuxtrLIwLu2tLGwt6yzqbCtrbS3r6uuqrG1r7Gvt7O6usC/tre2sru6wLWyrbO3rLC6r7KloqWrrK+5s7KosK+xr6qiqKGkraitrLOun6inpqWmq6Sknqaqo6ayuLOrpZyfp6anrquqpbClpaWbpKOYn6exrLW4sLKOhHl/fHdtdXtxb2pcYGFaVFFBRklHS0BFQ0k8PTY7OTk8Ozo6Ozo9Pzw9NTU2MTM2OTg8QT5AOz1AOzs5PD04Oj08QD46Oj49Pj09PkBCQkJBRD03NDU9REc9Q0I/PEWUnqCgoJyXmpiYlZmdmZ2fm52bnJaRj5LDwMK9wrzEvLy7xbu3s7e2tru7s6CWtayvsbS0tLa4ucDOtHaAs722tcKlh2laXmBNUltabnN3gJ+4uMK6s7u3u72/uru7rqSbmIeRfsDEw768v7u7uLbBwrXBuoCgsKyvvcC5z8rJw7GwtbS0vbq+urq7ysO7uravsL2xuK+ys7C3vbaur66wt7CsrLK2vbzEwrq9t7bAv8G3tbC2srGzurGxr6err6u2v7e1qbqztbmxp6uop7ausrG1uaisrK+qr7CqqKessayytry0saykqKuoqKusq6i2qaaonqadmKOuvLG7wbSmiYF7gnpzdnZ4bnJhX2ddW1VKPT8/R0c9R0NDOTo1Ozk5Pjw8OTo8Pj4+Pjg4MzE1Nzg5Pj9BPzs6Pz08Oz09OTs8OTs6Nzs+PT1DQT8/QUJEQkE8ODU4PUNGPUREPzw/iZ2en52Xl5WUk5aZnpubmpuYlJ2Uio6Owb7Dwr6+vrm2usCxtbGzt7fCtbOrrbOoqa61r620trnCyaiEeImgr7WdamVnVllgSUlNUFNsd4alsLe+ubK1sru5vLa5vrSVnKWWoXCuycTAvb+5s66yvLquwX5woqumrLq+uMvCv76sq7Cvs7q3ub67wMXBu7y3sLXEtb+0uLu0u8PCs7a2sbisqaWrsr23v7+7u7exvL28trGvq6uprbOvsLCrsLSpuMC2sqm0tbC3tq2spqu7s660uMKwsbG1sbK1saywsri4ubi+tLGzrqyxramvrqqyuK6trainoZ6ptr+4ur+wlol9gHxxdHd0d3JtYGRiXF5PSUI/PUlERk1EQDc3NTs6OT48PDk4PT47PT86ODMyNTc2OD8/Qj86OD4+PTw5PDk7Ozo8Ozs6PEA+QkI9QEE/QkI/PDs3OjxBRD5CQz8+QYqgm6GdlJiVlZKYmpyWm5WalY2bj4SIhru0vb+7vLm3s7y8rLOytLS2wLXAr7Kzqqqxt62pubO3v8WriHx2i6CZYFRDWFVHYWpWT0VKYI2grK+2urW0sqy8ubi1uMG9i5iwoqVypcvCv7m6ta6lrLOwqaRUgJahnqWttrTBtrWzpaeqqLC2s7K6tbu7u7W4trC1xLK+vL+8ubrFybq9vraxp6SeoamxrrW5trKxq7S2trGopp6gmaWmpKynq6y2qa+6sa2kpq2lq7GrrKmtuLawsrjBtrGxtbGvu7ayt7W1sry1urKwsbKutLKqrq2nuLWyta2uqqiosrq9wLa0qY6Ce393cHxwdnNvZF5oWV1eU09OQj9KQ0FLSkA2NjU7Nzg+Ojs4Nz4+PDs/OjkzMjc1NzU8PD48PDg+Pjw8OTk5Ozs7Pjs7OTw+P0E9PEJAPz9CQD47Njc6QERBQ0E/QUKJoJ2loJSWmJiVnqCcl5uYmpGMmYmDhoS1r7S7u7S1sLG2uq6wtLOvtbq1urC1s7KttrqvrbyzuLi/tZGCeIePb05KP2RZQk53gJRqTkFdgbC1s7WytK+su7q4trm/xnaDqp6aZKe/uLWysa2tn6Smp6WISYOPmZiZn6mtuKuqqp6kqaSrrq+nsKuvsbGtsa6ur7mwtLy+uLm4x8W8vLu4qaKcmJufp6assq6zqaapqq6popqXl5GcmpijnqKir6ekrKaompqemqGnp6anqa+2squ0trCqsK+xqbm2sbWxrqy3s7avrquuq7S1ra+rq7GtsbKoraurs7W3ur2wq6GLeoJ5cnZ0bXZqbF1ca1VeXFBOSERHTUJHTkc4NjY1OjU6Pjg7OTc8PTo7PTo5MjM2Nzc3Pjs9Pjo6Pz48PDw6Ojs5Oz47PTk8Pj1CPDtAP0A/QT8+OjU1OkBFQkRBQEJBiJ+ipqGYm56dmqWpmJudmpmUjJmHhoeGrq2uuLmxsqiur7iyq7CwqrK1ubm+tbK4tLm6trm7tbWzt7eVjIiEe1hGQU6HWUpKWHeNgWNBU6O5s7SysLGtsLm4tru3ur2QorKro3KrsKmrraujqKCdnp2kb0p7homIhY+bqK2joqOeq6+ho6mooaanpaqtp6ynqKesq6yyu7SztLm6trK2ramgmpaWm52fq6yqr6Oko6GpoJuTjo+QlJKSmZaanaSloJ+ep5iVkpSZnqSjoaWqrK2iqaqppKmtrqW0sa6xraqprq+wraWmqqSos66trKmmpqmrpqqnq7Ksr7Oxq6mWgX+Bd3J5aXV0b2VVYmRYXVJPTUlASVJETkM9ODg3NTo3PD46Ozw4OTw7Ozw7ODI0ODk3ODs7PDs4PD0+Oz08Ojk8Ojs9PTw6OkA9PDw7QD5CQEE/Pjk1ODs8RkFDRD9BQYijpqKjnqCfp6Coqpufm5yZmI6Xi42PjKqpqLGvsK2lp6ayr6mmq6CvsLu1vby4wMG+vLy8ua6sr7K8qpmZlWlOQFJ4cVBJSUtmm4FZRVKuu7Gss6+urK22trK0ta+ppp+am52epqieoKipn6GnlpuVp3pibmx7g36AiJuon56fobqkpZ2jo6CepaCkrKWmqKWio6OrrLOuqa6urqeqraisoZyamJmYm6qoq6ufpqKbo5yVkIyPkJCTkJaVlpifnp6amaaXk4+Slp2ioKWipqSnoKKko6Ghq6uksq2qrKyno6yuraufoaKkpK+srKmmo6KqpKqppKmrpqmsq6ahiHiDfHZ/emN4bW5dUWlVUE9HUE1NQ1BSQT87PjQ6OjU7Oj07Ojk9OTk8Ozw8OzkzNjk5Njo7Pz06ODs6Pjw6PDs5Oz07PDw9PjxAPT88ODtAQEE/Pz45NDk8N0FDQkQ9QEOOqqSjoqGinaqlpqimoZ6dmZ2PmJWTkJWnpKGmqKmlpKChp6uhnKKbp6u1sry9wMLCwL7AuLSnpKyovcKrpb5pRVKdglFXSUpfSVOOYGNigK61qrK0rqqrr7Cys62lnZGXk4+YoJ+ioJyjpJ+dqJSalaC1noN+jZGLg3p7jJmdnKeqkqqcn6ChnKGfo6innKehoKSfrKisrKCpq6agpKimrKOenp6al5qrpqqxo6WonqCclpOPj5KRmZCWlZiXn5icmZukmZeUlZqdoJ2nqKWgo6Kho5+doKmqpa6upqipoaKqrqqnoaCio6msq6eppqShqaKlqaalpKKmpKijkn58gHV2fW5sfGRpVlNkTkpIR09TTktOSDxFQD0yQDg1OTs+Ozk5Ozg6PDs7Ozk5NDg7ODc7Oz48Ojk8Oj07Ozw9OTw8PD49PUE+QEJAPTc6P0FCQEA/ODU1PDpAQ0BEPkFGlq6koqWeo6KpqKipqqWmnp2imJiZmZWbop6bnqOioKOgoZqgmJeXlqGorK62trq5ure3u66ooKGpoKrGv8uhUEFznnhPbktLYmV0c2BaXnCQsa+us7Wqpqyso5uZlI2RlZeYmJyfoqKcnaSemqSWlpXD2sO6tqGRjIyEc2t6mZ+xgZuroZ+gp5+dn6OmqJ6jpp+qnaqtqq6nqLClo6Smp6ymoqWim5mer6iusqumq6qgm5iYmJWTlpqTlZaalpuXmJihnpyclpuhm56ao6eln6GioqOdm6Gmp6aoraOppZ6kp6mkpaWhpaSsrKmmq6eioKSjpKenoaCgpaKmoIl8gH53eXxleXlhYlNWYUlJS0xTVUpTUU05P0E2Nz02NTs6PDw5Ozs4Ojw9Ojs4NjU3OjY5Pj0+PDk5PTk9PTw+PTs7PDo+PTw/Pz9APT03Oj5AQEA/Pzg2NT08PkFCRkBAR6CupKaroaOqrK6tp6ypqKCipp6bm56aoJyalZmfn5uen56WlJOXk5KcnqSorq2sq6uvqq+pnpeepZykx8ePV1NJZKRcZX5vcl1Qa2NbZF9da4+0sLC4rKahnJ2alJiamZCOkZWRjI6Nk5minJeimJaq4d3V1dG5oYqKi3VmYI68oXKqrqumorGjmqOmpqqioaqiqaSosquxsqu5qKarp6urqaysp6Ggo7GusrG0qrKuo5mcnZ6hmJubmpiZm5WWm5aZnKWhoJqjoZqdmZ+kop6gn6KmnZulpqWkpaijp6OepqOinqaloqWlqKykpq2noJ2eoJ6gpaGenqWgppmBe4F8dnZzaYJtZVxTW1pNUktPT1ZNVE1CNz5DNzg9NzY6PDw9Ojw5ODo7PDo7OTc2Oj01OTw7QD03ODs3PTs9PT06Ozw4Pj09QD5BPj4+ODg8P0BAPT43NTg9Pj1BQEZAQUihqqCrq6GkqquwramtqaelpaWkoKGfnqWXl5SYmZ6YnJ2blo+VmZKRnJihnaqip6Cep6Gln5ySm6KanqukjXpVaXJ2dXBjdnZYV2NgY2dZWFdmra6sr6efnqKglpCTm6CcmZeSk5+coaOanpuWnpmdvbWyvsPEwbGUgHhsaWGNtHGGt7i2sKe0rKKtraOvpaSmoamorrWzsr22vrCssa6tqaq0sbCoq6iztbizuK2ytKSgnaWgrKGhoqGgmpmWlp+bm5iloaCeo6Ggn5ucpaCfnZyhqJ+fp6meoaOkoKagnqehn5ymo5+ipaOooKmrpZ+dnZudmqainpyjnqeQgYJ/fHh2and1Xm1bUmFJUlZIRlZXS0NNSD1LSThGPDc3Oz49PDo8OTg6Ojs6PDk2Njo8Nzs+PT8+OTc9OT47PEA8OkA6OkA/O0A+QUA9PDk3Oj5APzo+NzU4PT0/QUBEQEJGnKueqamipamorqimqqWmp6aoqqGlpKOmkpOVmJacmpqcmpWTmZuNk5+ZqJ2un6eenKGdnpqZkpiem6KhoKSAboJwYGNYTFtTWk1MUFhSSE1NSJisqqmloJ+akpGUmJiWlpaMiIuOlJ2cnZ2elp2XrJdPWoOjt7y2on9uZWhpcoFfqrq9v7qttbSwt7CutKmmpKWsqbmztbvDvMPBt7u2q66xube8r7OwtcG8t76zs7WirKKpqbKpq6inqJqZnpqqp6CZp6Cfn6iopaWfnaqiop6bn6igpKetmZ+jnp6nnqCmnpycoqGbo6KhnZympaWkn6KZnJukn6CboJyjiYWFfnZybWl3bWhuXFhcQ1dOSkdNSENGTj0+TD40PDo2Oj0/PDs6Ojg4PDk6Ozs8NTQ6PDg5Pj4/Pjg4Pzk8Oz0/Oz1BPTo/PjxAPj8+Pz08Njs/QT07Pzg1ODw8QERCREFCQ5WqoKapo6mqqKmjoamgpqinrK6lqaWpqZSSl5mUmpqanJiYmZyamJmqoLGit6Swpp+enZ2XmJWZnpuco5+dimJXXmVgV01RRz4+P0NDPz5CUXipramqpqCen6KjnZ+em52blJOVlJ6emJSFnZmfmaxmQVJaeqOyt6iCaGFocXBggce+v8K/trq7wMO5vbusrqexrbHCtrjCxsDIysDKv7C5ub24wr64tLvGxL3DvLi0qrOtqrO0r7Ouqq+jnqyot7Kto7CmoaOwsa6wpKWvo6GgmqGmoaSqqpmdoJmaoqCmqKGcnqKemaSenpiYo6OhpJ6mmpuipJ6fm5ubnIeGgXx0cmtsdXJxaFdcUUZVSERKUEk/RUI0Rkg5Njw+Nzs8Pjw8Ojo4OTw4OTs4Ojo4Ozw3Oz49Pj02OEA5Ozs9QDw9QDk3PDw7Pj0+PUI+Pjc6QUA+PD45NTg9Oz1DQEFDQkGRqqGlqqelqqimn6KnnKasp7Gyq62jqayVkpWalJecoqGbnqCinJ+psqu7sr+rr6ylnqCgnJyYmp+gmp+flX1gXmVgUUdEPEM+RTw/OTZOfqqzp6SjoqCepaymn5idlZKanpmVjIqGiIZ4bIafoqSbbG97amGDpq6mf2ZoeYiMfrPHxMLHwcDFyM3QyMvDsre1vrK+xbu+zM3GzMzM0se+v8DDvsfHwrjEysnEwce/urS6u7W7t7C2squ7sq+8t8C7uqu4rauquLu1vK6uuKOmo56mpaKjqaaZm5+Zmp2nqqegoaGkmJSjlZSZkZydn6Sep5+en6KdmJmUmJSIhX56cmtkaW94a2VaXEZMTUVEVE1FQkU3Oj87NTQ5OTc5Pj87PDs7OD48Njo9OTw9OTw9Ojs9Pj4+NztBOj45PT45PT44Nzs6Ojs/Pz1CPj83OkFAPTw9ODY2PDo8QD9BQUE+kqugp66ooqulpKKipaGlqquwsq2upKmmlJWWmpaUm6SmnaGqp6KrrLy8v8PBsrK4p6Ghq6qhnJ6hoZ2bmn5zamFXTkU+SVl8b2JCPVyOrqygmZucnp6Zl5eYk42Pl5eUj42QjIKDgnZycGxvjaStjXR8opVlZpSemXlofJCdoqnBzcvGyMTFzNDS1c7Tyb3Av8O7xsXIxdHTzdPQ09PMysHGx8bKyM/AydHNx8bIxsK9xMG/v7+1vrOtv8DDw8fFyMSvv7myuL3EwsG7vLy1rqenrqigoqmlmpagmpmdqKupo6SknpePm4uQmYmVmJugn6OdnZeempOTi5WPhYF5dXNlYmdyb2deWlpET01DRlFJRENBNTU1ODlCPTY4OkE+Ozs+PDk+PTc6PTk6PDg8PDw7Pz8+PD0+Qzw7OkA9Ojs6Ojg4ODk7QT48QD8+OTtBQTs7Pjc4Njo7PkI+Q0FAPpOvn6ivpqiro6KloKampKuoq62qrqKqo5Kcl5ebmJuirJ2frqalsarFxszOzb+wwaikqKytqqCdo56bnZZrZl1USURAP0uGnqWahKCyraOenJ+amJeUk5SXkZCQjYiEhImHg4CBgYB5cXFuanaisYhyj7jFm2J7ioV0cYiUoaWluNHMzM3PxM3U1djR183Gx8nMw8XKz8rS19LX0tXW09TIzMfMzcrTzc7TzcbJysrCx8zHycnGv8Ozs8jFy8vLz8fKv76/vcHHxczMycnAw8CusLOonqKqo5qTnpyYnqaprKSlppaXipWFkZSHkpKSmZualpiQm5aQjIaRi4B7cnV2Z2NndmplVlhSRE5HQElRQz5CPToyMkE8RTw3ODxCPTs9Pzs7Pj05Oj48Oz44Ojk5Oj86Pj1APkA8Pjs+Ozk9PTw5Njo6Pj08PEA/Pjk6QEE6OT45Ojo6Oz4+PEE/QT6QrKKiqaanqKSfop2qqKOso6OnpqyiqZ+To5iWn56dpK6bn7CrqKyxyc3U18/Gu8esrbO3rK6jnqOinaGcY1NMSkRDP0NSrtG9sq+mnJycoKShnZqUlJWUin15cWxlYmhycHJ7hYqAdXBtcHJthZ+FaYS115dqbHZyeHeDkJubm7bU09LP0sPQ09bY1dXSy8nO0MvGzdLK0tXX2dbY09bYzdLKz9HMz9HN09DAycjLxMzNzM/PxsfItsDLwNLNzNDHysnAxMPIz83Q0c/NysjNuLe7qJ+lq6eemJ6jnp2qpa2pqKiSlYiQhIyRho2MiJOVmZCWjJiSj4aHjIR9eHN2cGNhZXJjXVJcSktHQUZJSj87QTg+NTU4Njs4Njo8QD07Pjw7OUA7OTo8Ozs8Nz09Ozo+Oz08Pjw/Ojo8Ozs5Oz89OTU7PD48PD0/Pz46O0BCOzk/OTg7PT0+PzxBQEQ8hqugnKegp6Oim6CbqaSlqaCfoaGmn6ifmKSimqmmoqarmqOwsamotdDU19rSx8bLtLXBxbG1qKGlpaCioltJQEFEQUZRdrKvppqUl5+cmqCgnpudmpWJd2lkYV9fX19eX19dYWx1c3BvbmtwbnOCiWZsp7VofGNfZXRweIiKiYqn1dPT0dHM0M3T19bT1dDP0tPRydPRyNDX19jS2NLX2dXWzM/Pyc3SzM7RwMfEycfPztHR0sjMzcDLzcbUz83PycXLx8fJzMvU1NHVz9LM08K5xbGlqLWuqJuoq6Wdsqiws6ysk4+TjoiKjoOPi4SQjpmNk4+Zj4+ChYx8enFzdG1hY2ltX1ZRYEpKQ0VDU04/PD40Mzo9NTI4NTU8PEA8Ozw6OTpAOjg7Oj46PTg+Ojo8QD08OTs9Pzk6Pz07PTw9PTo2PD0/QD08PT0+OjxAQjs5PDc0Oj48P0A9RkFEPYKknKClnqWlo5mcnaSeo6OfnZ+doJqnnpyhqZ+vraqqq52lrreoq7fX1NXZ2dHO0L+8zMm2vq6nqqiho6xnQzg9PkRYgqqon5eVl5manJ+dmJudk31xZWNiX19hX19hYF5gYF9gZW1wcG1qbW9zdYBoXoOYioNZTFpnYnF4cmpol9TM1dTRys/M09bS0dXNz9XV0cXR08rQ1NXWztPR2NjY18vIzsTKz83KzMDJwcnKzs/QzNDOzszP0MjM0NHLzsvDysjKzcvM0tPO1NLR0NDKvci5sK67ubWrtrCtqLits7+7sZqOoJSRjo2IjpCFkY2ZjJGRlY6RgIWJenZvcG9rYWRucGFYXFtJRkZETVlFO0A9MzM8PDg3ODU1Oz5APTk8PDg8Pjk8QDtAOj04Pzk4Oj88PTg7PkI6Oj08OkE9PTw6Nj09P0A9PDs9Pjg7QEE9Ojw4ODs+PD4+OkVCRT6Bn5mlp6Cgo6eam5+cl56eoZqdmpyappufpKefuLa1taykrK6+tLDA2NLX2tzWzs3Kw9LPwcGxqaytqaSyfEhGQjtWjaGblZOWm56enpyTlpeUiGteXl5hZGJgYGBgYGBgXmBfXlxibXJubXBwcnJ2c2dpcHFkWFBRV1hhYlxXS6fQydLSzsbOzM3Uy87SzMrW1tDM0NPLzNDR08rO0dXS1dbKv8rCxs3DyMrDzcTGycvLz8vOzdHO1MzHydDNycfLxsfCxsrMztHRx9DPzs7M0MXHwbi5vcPCvcO5srK+sLvDw7WqmKWhmJaRlZWSi5SNmpGUlI+PlYKJhnlxcmttaGBgcWhZWGhWTUdMSVFRQjtEPzs2ODo4Ojs1Nz09QTs6PD05PD05PT06Pjo8ODs9OTtAPD47Pj5BPDk9Pj1CPTs3NzY/PDw/PDw7PDw4O0FAPDo8OTs7Ozw9QTpFQUU+hJ6bqK2epKSqnJ6fmJKXm5+am56ZmaKVoamppcTCwb+7tbKxx8K4ytXW2drb2MzMz8jW1cTCta+0qKCtl3hsb3B3j5qNjJeVkJORkZWWlZCLfGViYmJgXV5hY2JgX19gYWFgX11bXWdxcW9wcW1pbXVuZXFzcnhwVk9OVHl3VW7BwMPOzsfFx83K0cfKzc3F0NLPzczUysfKzs/Hx8/Sy9DPxbrEv8bKvcPHyc7Fw8jAx87IxM3LzdDJxcXQycbCxsnFv8HIzczMz8PKzMnHzNDFxci7x8PJycLPwb28v7DByca5vaqwsqelnaKcmJCbkKOZl5mRlZiJj4J4b3Vka2BeZnFhW1dgR0lIR0lNVUc/Sj02NDM1NT09NDg9PT06Oz08OTo7OT89OTw7PDg6PDo6QD1APD09Pjw6Qz48Pz04ODk6QD4/Pjw7Ozs7ODo+Pzw7Ojc5PD49Oz49RkFDPYOgm6qupa6qq5qdoJeUjpedmpmgmpqcm6WysazJzcrIxL68uczMxtDV1dja29jQyc/P0dPIwre7u62ktn5ngoaiqpONjZaPhYODg4F9hIR+c19bXl1eYF5gY2RjX11cXl9gYF9bWlxha3JwbW1oZ2lqc19lfIaFaFdaTlaglmWbura7x8XBw8DDyMnIyMnHv8TLxcfKzMnEwcrJwcHLz8TLyL+5wbzGyL7Axs/LxMDDu8rHyLvJxsXKwb7Cy8bFxL7Gvr3BxMbMxsW8v8rDxcfSxcHJwMrKx8jG0MPDxsOuxMvHw8q3v7y6s6mspKWYn5iso6Gmm6Ogm5V8d3N1ZmpbYW5tWlxYUkRMR0NHRExERlM/NTQzMzVAPTM6PDw7OTw8PDg7PTtBPTo8Ojs3Oz05Oz07PTs6OD4+PEI+Oz88OTk7Pz07QD48Ozk5OTk6Oz06PDo2OTw+PDs+O0NCRD5/pZypsqm0rrCdnp6YnImUm5man6Kfmp2ovri8ys/RzMfCw8bNzs7M1c/V2djZz8vSzc3OyMG1w76ysLZtXnp8npGKkpaGeoCEhX91eHVycF9aW11gYGJjZGRlZGBbXF5dXl1fW1laXGFucW1pZmdraG5yW21wb1lLXV55oYltoLGurcC5ubu5uMDBwcO9vbi8vrjDycTGwr3GwLe7w8i/wcm7tru7xcO/vMLOw8a+vrXBvsS7vce8w7q1vcbEwsO3wLa2v7+8zcS9trrIu7++zMTCxsPGycfJxtDGwszIssfJw87MwMXDv7yyt7Cyp6ioubClrbCqrayUend4a2VoYGhvZFZeWUpGSkZIS0FFQkZKQTk6NjU4ODUzOzo7PDk8PDs5Ozk6QD46Ojw6Nzo7Nzo7Oz88OjxAPUA/PT8/Oz07O0A8Pj4+Ojk5ODk3ODo8PDw7OTo8Pjs7PjpAQEU+fqygrLWrt7SyoZ6fl5qNlJaan52mop2et8XCxMjO0srKysfNzc7RyNDG1dTV183Kz8XJxcfBusW9rK6nYGN2gZKLiIuEeH+Ghn99g3t0dGNcXF1eYGBiY2JiZGViXVxbXF5cXl1aW1xdZ3Jva2RjaWlrdndmYGhgRmZid4FvXpeqqKK0sbSzsrKzu7S7sLavs66xusG7wMS8v7q0srq+wLjHuLS8tsDCvbi9x8HDu7Wvs7W7v7TFuLu1rLm9vsC9sbu2sLe6s8a9t6+8v7W3tcW9vsPGwMTGxsfMxb/GxrvHy7/PycfDxsHDt8O9vba5vse/rLW7tbe2jnl0eGdnZWJrbl5WXmBGS0hISkdCREFFRj89OjU2NjYzMzs6Oz06Ozs6Oz44PEE9PDo7ODc5OTk7PDo+Ozk+Pz1APz5CQD1AOjo+Oz89PTk6Ojo4NTY7PT48PDo7OT49OT86PEBAPIi3pauzsby8sa2foJmUlJiXnqujr6qnpMXLzcjFyM3M0MvNyMnIysnKxNDN0s/NxcfBxcG/urjJt6uwmltnb4iOhoiJenh+hYZ2d4F8c2hdXV1dX2BfYGRhXmNlY19eXFteXF1eWltbXF9rb2xmY2ZoaGp4cFNlbmRdV2JdTFqZpqKYpqivq6mrqLKstK+xp62mq7K7ubXCubq5sKq0ubuzwbmvwLG9vLu1u8e5w7etqqiwssC2uL2wsaiys7W7vKuutqeutq68srCquLCuu667uLvAwb66w7/Gw8XAvMbBx8q4xcfFv8fDw7nExsK7xsnMy7O5wr27s4l0dndraWBibGlZV1dbQUxMTUpFQUM/RkE6Ojo5OTY4NTQ6Ojk7PD07Ojs+ODtAPD05Ojc5Pjk7PDo4Ozs6Pj45QT0/QD87Pjo7PDo9PDw4OTg5NzY4PDw9Ozw6Ojs+PTs/Ozs+QDyKwKuouLe5w62zqZ2ZlJaZoZymsLWxt6bFztLLw8XBxM/HzcHCxr/ExMPDysLJyr/AvMK6s7W1w66qsZNbaX6SiI6Pe3h9iYV5e4SAd25eXVxcXV9gX19kY2JkY2JgX11aW1paXVpaWlpcY21tZmRkZGZnbHlZUmhjRUtaUz5dmJ+ak5agpquipqGqqKuqr6KlnqmstLWwvLivt6+orbi0s7u3s7yvuLm1srzBssCupamjq7Gzs6i9qquoq6yutbSmqa6hpbCps6anqK6mqLessbO3uru7sry+vr7Ev7XBwMfIt76/xbfFw8C7v8TCvsTIzMq/v8TAwKmHc3RzamlcYW9kV1ZYUEhaU1NLRkZFPj9AOjc4OTc3NjQzNzo5OTo8Ozs8PDc7PTs7Ozw4OT44PTs8Njo9Oz89N0E+P0A/Ojw8Oj05Ojs6Nzc3ODg3OTw7PDs5Ozo8OTc5Pjw+P0E7jMKvrry3ucSwtrCbmZWcmKqpsLGztb2vxdDPzMPHubnLwsu+u8m2vcO+usq3wcPCtba8trGvtbytqauTY22Ig4eLgHp9f354dH58c3dlX11cXF5fYF5fY2NhYmBhX11dXFpYWVtbWFdZXF9lamRiY2FkZGhuckJGRURERlNJXpack5CKm56loaGepKSmpayfnJqjpayysLa2p7Crp6q0q7O5sLW1rba5srC6urG2pKCkoKaxqKypuaqlp6eop7OtoKenn5ylpqyfn6ekoaGxra2ssrWztLC1vLa7wcCyu77DwbG5ucKzwL3Atbi8vb68wsfEw8S/wMSghHlxbGJmYGtvYFVZX0hOaE9USEZLRjw9QD06Ozw4MjY1MzY5OTk7OTo6PDo3PD88PDs8ODg8OTw6Ozc4Ojo8OTg+Oj89OTg8Ojs+OTc3NzY3ODg2NjY7Ojo7OTo7PDg1OTw6Pj5AO43Itba9uLrBur22oJ6VnaCmurars7O7s8TPycvCxbi3x8DMv7jKt7vFuLPFuLO/wKy2vLKspq+0raGjkmlyhoWGgHx4dXNvbWppaXBpX2BdXFxcXl9fYWNiYGBgYF5cW1xcWFlYWFhWWFpdXmNiYGNjY2JlZW1mMzVCPTVHQ26Vmo+NhJecnaObnZ2ipKKmnZqhmp6qrqyxtKOoqamrrKS0uKy2r6yytK6zta+wqp+en6SisqWmqritoqamn6itq5mfoJ+ZnZ+lmpmjnJyesKmsqKqrrK2ws7mvuLm6sLa8u7qrs7K5s720t7KxtrW/tb3AvcPCu7u9l4R7c2xfZV5kZFhUV15JV11LUEdKSkdBPD8/QTs/PDA1NjM2Ojs5Ozg5OTw8Nz4/Oz07Ozg4PDg5ODw3ODo7Ozo7Pzo9Ozc4PDo9PDc0Nzc2NzU3NDY2Ozc5Ojs6ODo5ODo7OTo8PzuJyba4vru4wcHBtKSkmZqkpsCyr7astLfFz8jIwMa7u8PDz765yLi4v7eywrSxu7usurqxop+pq6eYnpBtfoWGf3hybW9ta2JeYmZmXV1eXV1dXF1fYGFiY2NiYV9cW1taWllYV1dXV1dYV1pdYWJjY2JiY2RlcVIxOjQvOEJeY4yWjYeVnJ2lnJibo6Who5uen5iYraytrrGgpKKtq6ehtbCxsayor7KnurOntqGin5yjoa2joqq2qqKjpp6mpqOWmZ2XmZqdoJqXnZydnK2hrKijpKatq7OzqrWwsquyubSvqq+ysrO3s66pra6yuLC6trq9v7ezsZSGenZmX2ZfW1lWU1pVS1tRTEpFSEtJQz0/QkJAQToyNDUyNDk5ODk7OTo9PDY9Pzs8Pjs3Ozs3Nzc+Njo+Ozo4Oj07PD06Ozw6PTs4Nzk3NDY1NTQ2Nzg1Ojo4Ojk5PDg3Ojg5PkA6gci9uL2/tr68v7KdpaOYpbHDtba9rbS4wszIxsDFtsHAx863wMO9s7m5sr+2sbm7rbK1r5+ao6qhlJqPeH+DhH94b3F0cWhmZGllY1xcW1tdXVxbXmBhXl9fYF5cW1pcWllYVldXVlhXWFdVV2BiY2FhYmBgZGdwUFE/LDErJDprpZWJkJqZnJqTnp6nopydppuamaqmrrCpm6Kit6mhoK6otaqmp62wpLewpLego5yZmaqmoZqtubCjoaScoqCgk5WhlJaWnJmYlpeclZ+pnqqkop6jqqqxrai0rKqnrbOwpauus7GvsK+vp6iosq6ytLC8tLq4rqOUgnp3ZV9hV1lYU1JUS01eTFBMR0hNTEU9QD49Qjw7NzY1MzQ5ODg5OTo5Pjo4Pj47PTw8Nz49Njc2PTc7PTs5Nzk7Ozw+OTk6Ozo4Njc2NTQ1MzEwNDU2Nzk6ODo5Ojo3Ojs5OT1AOnbAvLS5wrG+t72tnaenoqq7wL3Aua60uMHMx8XCw73FuMjMssHCwa68u7W7vLW5ubCwsaqcmqGplZGKi4CAfHdxaWxydHBoaGVkZmFcXFpZWlxcXF1eXVxbXF5cW1xZW1taWFZXV1ZXWFdXVlVaYmJhYGFfX2BiaHBoSjEiHCZKSX+Wi46VmpeckpycpKOhpKWdm56lnqqupZ+goranoaGiqLOipaelr6Wxrqu1n6GdlpWpoaKUrbGxn6Ojnp6YnJOMoJSRk5iYkpaYmJeep5unoqKapKWlq6SlsKelo6usraaprq+vq6iqqrOmpquvtLGuvLaxr6+fknt4c2ViXFtdWE5MUUhSYU1WUE9KTk9FQkQ/OT02OTo3NjQ1OTk7OTg4Nzs4OT0+Oz47PDY5Ojc7Njs3Ozs6ODU6Ozo7OzY8Ozg4NDc3NjMzMjEuLzI1NTY7Ojg7Nzg3Njw7Ojs7QTh4u7uxtb2wu7G3rJ6lpqy4u7zBxbqyubXEycnAwsbFx7bGxLPBv8Wrt7e9tr26u7WyrK2omZmfo4uKdImIfnZuY2FmaWhmZ2lmaWxgXVxbWlpaWlxdXFtcXl9cWllbWVlaW1dVWFdUVFZWUlRSVF9fXV5fXF1eX2FqaUc6NC86aXxwhIuMkJ2VnJOYnKKfqaOioqGioZuoqqOZnaOwqaGgnaSqnqiinqysqqmuraKiopWYopqckKupsJyfop+fl5mTip2RjZKUlpCYmJOcoaOcpaGilqCipKWbo6uloqSqpKutpa6yqaalp6a1pqqorbO1tLm6r6qsnoxzcXBgW1dWVlJHUU9IWlxPUkpUS1NMRUdKQzg7Oz08ODY2Nzo5Ozo5NzY5Nzc6Ozo9PDw3Ozw4PjU5ODo4ODY1OTo7PDk3Pzw5Njc4NDUyMTIxLi4xNDI2Ojg2OTg1OTg5ODk7OUA5e7W0rLS7srCrsa2dqKevubmzwMi6tcCvxcjMusHJzMi1ybyxvsPJrbG4wbW8wLy0taqsppaanJyJgXKIg3t0aWlpbGdqbG1ramxlXVxcW1tcWlhaXVtbXmBgXFhYWllYV1hXVFVWVVRVVVJTTlBZXFtbXFxcXVxfYmtLNUJCUn2Gd3uKi4uVlZ2Xl52kpaelqaWopaGXpKyilJikraifm5ian56umZyqs5+lpp+jo6GUlJuWlpKpqa2bnJ+hoJuUkIyZjYyRjZKNlpWQnaGgo52co5WboaOhmKKoo6Koq6CrsKSuuKWjpKOsraqoq6+0t7K9tbOrrpiFdXRpW1lZU1VSRlhMUVtYTVVPUExRUklPSkI9Pz9BPz03NTc5OTw8OTc3Ojc5Ojs8PT47Nzs7Oj02ODo7ODk3Njk4OTo2Oj05OTU3NzU3MTE0MS0rLzQzNDk4ODo6ODo6NzQ4PTg/OX6zraezt66oqK+um6morLe2rLzKu7a/rMzGxbjAzs/Hs8S7t7vCyLGtuL+3vL67s7amqaCWmJmXiHp0gHZ3bm1obW1tcGdnaWZkXVpbW1tbXFtZWltcXF5fX1xYWFlYV1hXVlVUU1VWVVVTU05PUVhZWVlcW1pbXV5mY1VYbG18gXqAgo2JkZOcm5abp6Wjq6mmrqOml52qnpSUo6elnJePjpmdrZaYp6qYn52UpaCekpGSkZOVqKqlmpiZnp6WjoyLk4aJjYOPi5KVkaCeoaSZlp+VmqGinpSbpaWnqaigsLCmsb2nn6OstKqup6+0sLm1wLGusKuRfnJ0Y1ZUVU5RSkdWUFJSTExYTktMT1NHTktBQ0ZFQz5CNzU4ODk7OTo3Ojo3PD06Oz8+Ojk7OTo/NzU5Ojk4NzY5NTg3Nzk7ODU1NzY2NjEzMjAtKi4xMDI4Nzc7OTk7ODk0ODs4QDh/tKymsbeqpaKxq52qp6mysKS2xrS5urPKxbm6wcvQyrG3uLy9wMOxsLG3rrS0u7O0o6OdnZiXlYSAdmtnbG5xbnFqb2tkZWdlXlpZWllaWlpaWlpaXFxdXFpYWFhZWVdYV1VVVFJTVVNWVFFNTk1SV1hZWFhXWltbYGpwanBld314g32Ngo6NkZaTmaSXnKekpKmcpZeeo5qRjZ6hmZaWhYSRmqOPlaKclZaVh6Kam5OMjoqQmqWnm5WVl5yRk4iUjouBjI2AkIuSkpKhmqCilpSZmJWippqNmaSnqaehoLSyqLO4oZ2jtqyqrqSysqa1u7SrrLGiinpzbl5OUVFNT0ROTk5QS0ZOTkpKTk5RSE1KQUhMSUhDPjk1ODg4OTo7Njk6Njg7OTk+PDg6Pjk7Pzg3ODk6ODg2ODU3Njg4OTc0NTc3ODIwMzAxKyktLzEyODc2Ojk5OTk4NDk4OEE3d7anpLawpKekqqWgqaaks6qissS1tbKzxsW3usPKzMazrbq9tLjAr66psJ6mrruvraCam56VlYh8hG5fX2ZycHVxaW5pZWdoal9YWFhYWFlZWVpaWVtbXFxZWFhXWVlYVVZSU1JQUVRRU1VRTk1LS1NXV1ZXV1dXWl1hZ19jXnJ4c3x0h32Hg46Ljpmdi5aZoZ+hl6SUn5qUjIaYmYtzjYJ9jZaWhpKakJOOjXuZj5yMgomAipigo56Qk5iWhY6ClH5+dIqOepCIk5CQnZuampKWkJ6Oo6OOiZqgoaSkm6K0r6ywrZ+YprimpbChsa6csbyqqa+pmYR4dGRWTVJQUE1DU05MUE1CUFFISU5TTklKSkVLTUdLSz44NDk4ODg7OzY5Ozc6PDk6Ojs3OT85PkA3OTo8ODk3NjQ0NDU4NzQzMTI0ODUvMDEwMikoLC0wMjc2NDc4OTo6NjY6ODdBN3i3oaO0qKalqKOlpaamprKnprTBuK+0sMnEuLnAzsa+s6y6waytxK2ooqaSnaa3raOgkZaXkpB+eH9mV1ZfZ2ZpZ2huY2lpZ2JcWFdYWFhZWVlZWVlaW1tbWVlZVldXV1NUUE5QTk9PUFNUUU1NSkdOU1NTVFRTVVlaXWhcXltsdW1pR1JrinyQgYeXkoeQjZ2Wm5WVlZKNlYh/k4lfO1dve4uTiYCMkoyPhoZyi4SWgXmBe4aUnZWDlo6Qj4OGfZN4cXCGjX2JgZCOkJeamZOLkIqdiJ+Yh4iWnpqhoJenrqmtqamelq2zoqWtma2rmKi0o6mto5N/dG5gW05TUldMRFRKUE1MRk5PSUVMUU1LUEpJTlBHSko9NzU5OTk5OTo3Ojs6Pj44Oj09Nzo/OD4/NTg5Ozc5Njc1MzMzNzYwLi0vMzQ0MTEwLy8oKSsrLTM4NTQ3Nzk8Ojc5Ozg2QTl5t6CiraGmpqqgpqmno6qwqKe0wrmwtbDHwrizvc+/ua+utcKnqsSqop2Yg5ScsaOamYeUkIuHfnN2XVBMUVVZWlddXmJnY19ZV1dXWFhYWVpZWFlYWVpaWllYWFZXV1VTUk5MS0hHYlxNTlFNS0hGSE5RUUxPUlRVWFlhY1pWaHBlSDs6e5CMiniCj4iAhomYi5WViZGGhJOFeIh/YEpRbneKkYN+hIyLhH9/bX5/k3d1dniEjZpwUY2IioZ8fnmUdmd3hoh+ioiVi46Rk5eMhIqIlYSbjYKFkpuWnp2UpKKoqaWknpuwqqGkpJGmqpaiqpyhpqeKd25mXlxIUVFTTUlVTVJJTEtPSUhGSk5NTVVLUVJQR0pEPTc2ODo4Ojs7ODo7OD4/OTk+PTg7PDY7OzQ3ODs3Nzc1MzQ0Njk2LzMvLjExNTIyMS8sJykrKiw0ODMzOTg5Ojk5Ojo6Oj85d7aboqedn6Guoaeopaeor6yqtby2uLezwbu2p7nIuLaoqLW2qrK8p56Vjn+JlKmWlYt/joSDfnhxb1hNS01OT0xNUVdbXFpYWlVVVlZWV1lZWFhZWFhZWVlaWFhWVldVU1BNSkVAQJtrc3NJTUtERENJTk9oWU9RU1NVWmhmXGRtXF1TTYqAj4JveYF8eIGJkH+QmYuPeoSNfnR/eHJudXB0jo6Ben6Kq4V6e2h2e45wcm14gYuNknh7gHuAd3NyknhodYWEhIV8lYqIio2LgH+Ei42AlIR8gY+YlJyWkZ+dqZ6goZ2gqaWfnZiNp6SSoKCWnp+kgXNpYl1dSldQUkhLWFJPSk1MUkpKSkxQSUxRTVJVTUZJQj03ODs5OT49Ojs8OThAPzo6Pjw3PT03OTk0Nzc4NTY3NTI1MTQ3Mi8yLiwuLzIwMC8tKygoKS4xMjcyMTk4Nzo4Nzc1Ojw7N3aumaOhmJ2ftKmvqqWtq7Cxqr20sru4trq0sZ+3urKqnZ2sqaiyr6KakY2UgY6cjpF/d4Z4fHZwb2pZS0hJSEdFSEhQVFRUV1ZTVVVVVVZXWFdYWFhYWFhYWVlXV1VWVVNQS0Y+OTNOPH6eTUhKREA9QURqlH5MTlFRU1ZeaG1paFlrg4+Ui4x2YnR7cnV7hY16gpiSf3CFjXp2em5rfq18dJCLf3qGkoB8f3RmdXyGbG9oc3yKjYeAbXpxfXFtdo9xaHGBfo5wRIuFgoOFf3d3eoyGfYx7dX2Oko+Yi5Kbm6OWmZ2bnZ6hnJaNi6Wbjp2XjpaYkHhvbmdjW1hYVVFKU1VUT1BOUFZLTktPT0pRT0lPUExGRD07Nzk7Ojo/PTk8Ojk5Pz87ODs9Nzw5OTk5MjY2ODU2NjMzNjExMjI0LiwsLS4uLTAtKyonJyouMTM2Mi84NzY5NjY1Mjc5OTV5ppegnpagprCsrqunqbCvsau7uKu7vrizrKebsKesm4+WnKWppaGYmo6EknmJj4uLdnF8bXVxam1qWEtGR0VBQENESExMTVFST1FTVFRUVVZWV1dYV1hZWVlZWVlWVlRTUUtENzhmNzA/qGlOSEM9OzpEioV6WUpOT1FUWF1hZ2NefJygvXxucl52c2p3dIWNd3qJhG5ripB3c3hpan+CcZaRjIF9lX9JkpluZ3d+gm1qZGx5hZCShmtzbHxucnyGaW1wf3ONiYWGe35/e3dwdHSGgnmBeXB8joyKk4OWlpiakJOWlpmWnZaMg4mfkouSjYaQl4Bwam9vb1lWWFRSUllPUlVUUlhVTU9ITUtNT0tDSU5HRkA6OTk7OTk6Pjw5PDs6Oj0+Ojg6PDk/ODY4NzI3NTY1NTQxNDMyLzAyNCorKiotListKigqKCcsLTEyNTAsNTU2NzQ4NUhBODk1d5mRm5ibn6Ssr6Ktqqi1r66ss7+rvMO/pqKalaSYno2Ei5ShoZiZkZOLc456gIaMhnVvdGxxbWVra1lOREZDQDw+PkFGRkdLS0tMT1JSUlRUVFRWVldXWFlaWVlaV1ZUU1BMRTFAmjMganNDmW87PDk1PICChl9JTU9PUlZaUVdYV51+W5NibHJgeWtpe3aHhXN/hYNya5ePcnJ7aWqdjkx5hZOJhI1mMXaHcmt9fYN0ZmV1f4SEhYBmaWx1a3CAfGhxcXxuk42Pe3R+fXFxb3Vtg393eXVqeYiCiImDlpKSkIuNkZSUjpeNgHmIl4iHioaAkIh4bGtwaGVYUltYWVlbTlBVVllYTklIRUpKSEdCQEdFQ0c9OTk4Ozk6OTw6OTs6OjpAPDk6PDk4Pjc4NzcxNTIzNDUzMzY0NTAzMS4qKispLCwrKykoKycpLCwyMjYsLDQ3NzU0NzhpTzg7NW2SiJqQmZakqK2esZ6nuq+rsrDCsbvDx5qWjpWZi46FeoSQmJWNkIyQh3GHgnSHjIZ6cHNxb3BkcGdfVEZJQz88Ozk6P0BBRENFR0lLT1FRUVFSU1RVVlZYWlpZWFZVVFNQS0U4MC9cYLNHOVhQOzk0NDGWuotITE1PT1FVS0FJUEhfqa2aanRxZ3hobX59gX53gYODd3CeknJ3gHJ0k4c1cJ2onY2goYSihXZwhnuGfHSMro2JgWhnYmpucm1wg3Vpb1h1cI6bkXZtf3t9bnJucIB7c3ZuYnWDf4aAhZCQioqJkYuRi4uOg3V4io6AfoOAfY58c3JxbWBcXV5cWllhX1JOW1pYV0xISUZJSD9DQUJIP0NEPTs6Nz07Ojs7OTo5OTs5Pzw4OD06ODs2NjY1MDEyMTI1MzQ3NDUzMS4vLCwrKSopKSoqKikoKikrLzNETTIxNjY2NDM8dlI3PTdikYGSiJWRnaSnnq+VpbSprrCuwbK7wcWWj4yUj4CIfG6BkJKJg4qHj4Z1goRslYiIfHV4eG14bndkal5JUEc+Pzc0NDg7Ojs9PkBCRUhMTExMTlBRU1RVVldYWlhWVVRTUExFPDUqnUtbQC1nSTk0Lz+Sg6muX0dMTU5QTDdDTVJSQ0h+bXh1dHB5aHKDhHh6gYB8iXt0n5d4fYWAhJmEmpxhhqqenIuDkI56d4h+iYiOdIuXj4R7XWRxdHp8d4ptaGpieW+FkIJ6b4F4dYV6cHR6eGtuaV12hn2HfIeGjn+KkpeDjYWMhn1xhH+EfXZ3e3yJeHF0dWdoYFtcXlNcZ15XUVRYW1VHSkpFTEc/RkBEQz5BQT07OTc8Ozs9PDo6OTk7Oz0+Nzk+OTk4NTY1NDI0NDAwNDY0NTU1NC0sKSsoJycnJigoKSkoKCsrKy8wMFVxPTIzMzMxRX5XND05XIx4in+TjJGcnZ6lkaCroLGor8Cyu8S6lo6Rk4d6hnZrf4uRg32Kg46MeIOBc6CEin19gX9wgX56aHdrUlhMQEUyMTEzNzY2ODg6PD5BRUZGR0lLTU9RUlNUVVdWVlZUU1BNRkA6Mj0gI5ZjjFs1MzExaT9Hb0lGSUtNT1FLSlRbV1BIYnuBdIJ0dm14i4d2eYWEe5OEdZ6XhoaNkZSljKypSIatr66KgYCUi4KLgoSSqYiBmJiKnHRtfIGGh36OaGdoeX9uhYeChXGEhkhsgHdyeXZobWtfdn2CiH+HhIt5lJybiYuIkX96dYp2fHhtb3d+gXV1c21cXl5cY2RYZ2VcVVBQV1lQRExLRk9JQ0ZDQ0FAQ0E9OTc4Ojo6Ozs6ODg4Ojo/PjY7Pjc1OTU3NzMzNDQyMzY2NTY3Nzg7REZMTU1MQzcrIiUnKykrKywvMDArbnUyMjQyMEyBXDU9PF6EdHx9iYWHkI6Vl5KWoJ2soKa4r7O9s5eNkouYi310cH6Jkn59jIOSlH2Gfoakh4h/goiFeIeJfnOEeF9jV0tCNjAuLzIzMTIzNjY4Oj0+P0JFR0hKTE5RU1RVVFRWVVNRT0dDPzgwLCOHWz8/OTQuXZZwc6NVRklLTE1PV2BXbFhaW2SEi36Ne358gIyOe4KFjX6XkoCen5aTmpmlrZKZu7GmusfDp4uMoaWOk4mBkXxxg56fkZ1/d4WFi5CHkGlocISBdIyHhIpyhoJ3iIB7doR8bXZ1Zn+UjoaIiIaHh6CqopaJjpd/eoGIeXlvZ2t4fnyAdWxlXltbXmpeYmdgWk9MTldSUUhQSkROR0NKRENARENBPDo4Nz08Ojw6ODg3Nzg6PT04PD02ODc1NjYyMzQ0NDU3Njg2NzxCQj88ODo+Q1FeZVxHMicmLCwtLS4xKD+LWy4zMTBPg180PztudXBmd4J6f4x/gZGOipqbpJ2hrKaqrrCXkZGEoZSEeHd/jJR8f5KGkpV/ioCSm46EgIGMioKJjYN/in9scGpdQkA0LS0vLy4vMDIyMzQ3Nzk7PT9CREhJTlFSVFJTU1RSUE9IRUI8ODcvOUM+PDw2My5sk5dNUEhKTEtKTVZfYXtlZGlvk5KGk4yNhomKlYSPjJqInZ2QoKijoqqTqLWhp8HCrceveLmUmnyNoZ6ZhJOFgo6hn5SZkYWKhY+akZZscHWKjIKVjI2Od4+EcW2FgYqWkYKFiHKIoJWGkYmNj5aktKibjJSig4eSg31/a2pqfIKDg3VjX2VgW2hsXmxsXldLSE5SUE5MTEZJUENETkZCQ0VGQz46OTY9PDo7Ojk4Nzc2Nzs6Nj06Nzg1NDU2MzQ0NTY2NjY4NTU2MzEwLiosLCkoKS46UGFcQCwoLSsrMCwncog3MjQwT4RiM0A8dW5nWW+Cb3WGcXaShn6XlpqUnp6cp6CplpOYnmdlpJp+hJKReYCSiJGSfYqEmJKQg4CAi4yJhpCHhImFeHh+Z01SPi8uLiwvLi0vMDAwMjEyNDY3Oz9DRU5PUlRQUFFTUU5QSUVEPjs8OkRGPz48ODUyPD9SNUhISExLTU5SXmuGeXB9eJaUkqCfnJWckp6RmZulm6WonaaqqKm0lqu+q7XHyLbI0M++m6Bwaaupn4STkoWcoJqbmaaSkYiVo5ubeHp+lJiToZOXl4GUnnt3lZKqsoiMlp58k52bjZGVmKOhpbWvnJCYp4eWj42AiGxzc32BfnNqYV5iYGJoZGBoZ1xSRUpLT05JSUxGR01DSExGRkNCR0VCOzg1PDw4OTk5NzU2NTg+NzU9ODQ3NDU3NTQ1MzY5NTg6NjE2ODYzLzAuLSosLy4tJyMqO1hiQigqLDEtKEuXXjA2M1GFZjJBQGlhXlBwdGBtfWF3jn17lI6Oip+Sl56Wm6qYnqpCRH2HiYeYjXiCjYuOjXyKho+QjoGCgImLioWShYOGiYGAh3deYlA0NjAtMi8sLjAvLi8uLjAwMTU+QUFNUVJTUVJTVVJOU0xFRUA8Pj1GR0BBQDg2NjI8OTtGSEdJSk1OUVlrgox0j4WZn6Gtt7OgqaippKaxqa60r6+rubCyvZuyw6u5ycu3w7+3paKws6ytqqOLlpiEpaago5eBppmNoqqopYiFlKShoaqgpKiPnLGLlaOmt7qboKKvkqKcoZ2PoqGrrquytKGUpKmImYiSiZV5en6GgWliaV1mY19lZF5nZ19bT0NJSFNORkhLRkpHRkZIQUtGREZGQjs4Nz08ODg6OTc0NjU4PDU0PDc2OjQ0NjQ0NzM5PDM4PDIwMjU1MS8xLi0qKi8sLSooKiYlNVhYLywwLCwwhIE4NzFQhWg1QUNbWFRMaGJXaW5YeoR2gZOFiIKbg5KRjJLayJ2Wc1aXiI+InI98hoyOiop6h4KHkY6DhIGLhYaIkoaChYmHiIeHcW5hQEU2NDwzLzExMC0sKy0wLi00P0NBTVVQUlNVVVZVTltQR0hEPD4+RkhDREE4Ozw1Qzs9RktJRkhRTlBXf4+bgaieqqOqusK/p7DCtKqxvrG2u7O9s8C1u7qiuMWotcjHtb24tKijtK2wsZuZkpqfiKevq6WUdp+kl6GssrSZlqquqK+2urK6rLC1orGssbW7trSttJ+mp6KmmaivrLG4t7immrWojKSOkJKfhniChXhbY2VXZ2NiZGFhZ2BbVEpERExUUEhJSURJR0VBQEBLREJNRz04Njc7PDk3Ojk4NjU1NTcxMTw4ODk1NDY2NDk3Pj0zODkxLjAxMjExMzAsKiwuLCsrKyooJyopRVowMCovK2iSTzYwUodqNkFGV1FKTFtZUWJiV3l1cYGUfYSGk3WFf4CMe7+7o7yCtJSTjZuPhIiPkomJeYaAjJOMh4SBjn+BiY+Gf4aIhoqHkHp4bl1XQEVOPDY6NDVBQjc2NC8vNkNIQlFbT1FVV1VcV1BfVUlLS0E/PkdLRkVEOz5AN0Q3P0JKSkVGVlNQXoygqqCurruvsrvIxbO5w7uysr+1tsCzva+2dLCzpbrEo6/GuLCzsbOnpLW2qrGgopebopKlsK6mraunpJihrbS7oqiyurW8v8y/xcW9vbPBt7q3vra6t7irq7Ckr6isva+8usHBq5i5p5StjpeXqYh+g35tWGRiWWxma2ZYXGNZVlNJR0ZMUEdDSElBSEQ+P0JCTEA/TUQ5OTY2OTo/Njo5OTY2MjQ2LzE5NTk5MzY0NjI3Oz0/NjoxLi81ODo5NjUwKigsLS0tLCwqKCgrKyhFUy8qMDBKj2s1MlCHbTY/RlJMQUxRVlNYVVp2anB+joOAjoRuenN4h2K5oZmjiZSUlpKUk42Pl5KHh3uGgY2VioCEgYp6fIqHhnyKgoGLg5V9d3p1ZVBcZEdFTDtRY2FbXlNGPztIUEVaY1FRWVhaZ1lUYF9MU1BFQT9JSkhFRUFARDxFNkI+SEdKTFNaVF2Rq7Oxt7PEuba5x8q5usC7trS6ubW8s7mxxWB0saSxmp6qvamlqKuqo6KytaGrqJ+Vlp+ZoK6lp6aln6SUo6extKiys722wr7TycnTxsPFzMLKw8C9vL67u7a0r7i2tsK5xb3Cx6+euKmhq42kp7WIgYF0YWNjX1hjYGpnU1hgVlJVSUVFTUpBPkdEPUtBPUJAPUc+O0hANzk2Mzc5PjQ4OTo1NzA0NS8yNjM4OTM3NDQyNj84QD5HS1JUU1FQT1FRUEpBOS8sLCwqKygoLC0rL1A+KC40OIB9PDJLiHE5PkNLRUBJTVBSS1FdZ2xrcI+NhY9zbHJyc4fVwLWZoI2VmJmRjpeRlpaOhod9hoOMlop+g4CCeHuLg4d7i3mBioKXfnN9emtmcHVZXlxQZWRiYGVkXVtYV1xNZG1VUm1tX25fWGdkVFlVSkRCS0tJRkhISEhCSTpEP0hLU1RVXFpbkra9tbuzwry3tsjJuLW6tbe4srazsq21tphkdaecrXBeoqycmKCim6SeqqWUn5+Qk46WmZion6agnpqZg6SeraWqsK24sL251NHP19DKzNLMz83Kxr++wcm8wLzAwMTExMm+x82yo7qwtK6aq7e7mIB8bV9iXlpgY1pkY1FbYFNQS0NBRUZFPEBGP0FIQj9DPTpFPj1KPzQ3NTM1Oz00Njg5NzcwMjIvMjQxNjk3NzU1NTVEM0VMTT41MS8wMDY6NDc3QElPSTstJioqKC0uLyxATSsvNTRtiUkwSIl0Pz5CREBDREZLT0RRW1loX2+WkpCUbmxvdHWHtKyhoZ+LmZyZjI2VkZqShoqKfoiGi5CLiHyBg3N7ioOFe4l0goqGlX9ze3lsbXV7aHJlaWxpZmpqaWBmaWlsWm1zlq2kvIiGZ1xvZ11aWlRIS05QSktQS1NRSUxBSkZKT19eYWZpYZe1xK62sLm6s6/CxbSuuLCwu6uysKWqt6uMtaedmqeaTZmdjI6flpGmmKWVipOTiZCJj5GRnZuhl5qVl4efmqebrK+osKi0tNTU1NbTzNDT1c3Sz8zEwcnQvcnJysnRxszNws/Rt6/DvMO5pLW5waKEcWVeX19aYllaZ1pRXVhPUEJCSEVCSDtAQz5BRz8/QTc7Qz5ASD00NjY1NTs6Njg3NjU0LzEwMTQ2Mjc4ODc1MzY3QzVCOD8tMC0xMzQ5PTk3LC4sMTtGSz0pLCguMDAwN0s/LTQ2VIhXMESHd0M7Qj5FQkFDSk0/VVlSZVZzkJCYgmdxb3l5g6GqnqaXjJqbl4uNlZGajn2Ji4WNiomKkId8hIJwf4eBhnuHcoOSi459cXh1bHF4fnF6bXhzbWmAcG1jaW1weGl3fH7LvsHfp21jeG5jW2JgSlBSVU5ZXk9dXE5QTlRQVFRcbm12gnGWrLarsqWvtKmru7+wqrSmpLimq62fq7SjjrCtmpeYjI+SkYSOm4GNppGciYOLhIqJhIuElJWYl5SbkZyXmZqfn6uspaiirK3P0tXSzszT1NTQ1NHOx8PU0cbN0tPT18zR0cTS1sXBzsfHwqi9t86efHFoYGVfWGJTX1tQUVRRT0g+QEZBQkU8QEE+REM+Pz86PT08PEpBNDU0NjU8ODg4NjY0NDEyLzAzNTI2NzY4NTMzOz08RT1AMTErLzI0OT41OTAxMDIyLTJETjMpLzMuMzI9TjIzOEN9XzJBhnREOj09ST5AQ0ZIPFVRTU5adYaFindsd3B9fn+hnp6hjIyYk5OLjJKPlYV5hZCQjYuJiJCGfoJ7cX6AgId6hHWFk5CIf292cmtzfXt3e3OCeHJrgHNyaW9xenlxer7Lmn2LsYR2coR2aGFrXUNaWltWZWNYZGpTWFxdYGNdY3d6fYuBmKmjpKCeoKelqq+4qqWzoqGtoaOtoaaxnoimmpOSkYmPjoiBk4lqlKKMmYSBhn6Rg4OTl62LlY2VmY6GkpGel6iwoqGhpaSpyc3PyMLM0dTS1NLO083G1tLM1NjW1tjU19XJ1NrNydfX0cqsw8LLjXVxZWJhWlZaVFxRS0dKSkpAOzo7REFEPEJDPkdCPkJCOjw5PDpHQjQ2NTQ0PDU2ODc1NDMyNTAvMjU0Njc0NTU0NDw+PUU/QTYyLy0xNjs9MDgxLzI1NC8tLTtSMDE3LzUzMkZEMjg+bmI1PYF0TTk5QEk8QUQ/QTtPTEZKWHCAdX1oc3hygomAnZWdlIWLlYmOiYiNho5/eIOTmIqMiIiLiH6CeHN7fYKHd396hpGVf4Nud3BtdX91eH10hXx5bYd2dG59doR0eHudtYw7QYrFpX6MfGllV0lDZmNlY2dqY213W15maGtuaG6AgoeRi5ydoJyQl5ieo6OlsaOksp+hpZ2gqJ+isZuFnpKRkY+KjIqGg4+Ef5ybjI2ChIV5lH+CqZWjjJGJl5KLfpiLm5Krs5ibnKicp77Dxrm2xs7S0dLQzNLLyNTO0NXa19fY1NnYzdjbzsnZ2tHVvsrLtXp5cGdfW1RXUlxXRkdKSUVFPTo3OkBAQjlHRD9EQ0FDQjs/Ozs3REM3NTY1NTswNjg5NDQzMzQxMDE0NTU4NzQ0NDQ5QD5EQkM8MzMuNkZUV09RSkFKRj8xKiguQlMzOTI1NC83Szc1PGBiQTxzdlY4N0FIOj9DPjw5UUVDSlRrbm5wYnBxdIaNfJeRnYt+h5KDiYaEiYGHfHiFl5aIjoKHhYd6hHlxenuDhXV5hY6NnHmLcHxvb3p/cXuAcYOHgW6OenV3fXyCdH58hoevc1ipwraNkYJwbWI9XmhycHFwbnh2gWVob3J1eHF6i4aNk5GalZ+Vh4uTm6CanameoKuboZqYnqSen6uZipqLkJGNhHyHh4OFi46fmZOIg4d+bJl6hJiGiJOMjZSMhnyciZSQrqqUlpifmaevtr2prb7HzMnJzMvQycPSytTX2NfY19Xb19Pa29XQ2trR1sjUy5Z8fmtrXVxRVVRhSUNGSUg+QT49Nzo9Pzs9Rzw/QUFBREE+Pzo4N0RCNzU1NDc5LzU1NjQzNTUzMjMyMzY0NzU1MzQ1OEVCRENFQjU2PEZOU01bbmZjbnNrYVY+LDRMRzg2NTQzNEJGND1XX2hMdXheODs/Rjw8Qjw5OUQ+Q0dSal5tZGJma3aAiHGRkJqAeoCNfoKCgYN+g3t8hJiNh4t+hYeAd4J5bnt7hoF0eZKejqB2jnWCc3WBfXOAhG+BkIJvkoR1fIGFenaGe4m3xaTBybiBlpuPd3BlTmZjgXqBd4aikIp4eXZ7g397hHZtk5aUlI6XkIKJjpaZlpWkm5eelZ2SkZainZmrlZCQiYyRgoyEiIiBhY+RnZuZiYWLgYWYeoiJn5eQiI2Ki4J9oYmRjLyhmJOYmZyppqaun6i2v8DBucjKzs7FzcnR1tXV2dXX29TW2drb19ra2djO28aIfXxqbGhiVllXV05MRU5DOz09PDg6Oz05PUA2PT8/PD49PTk4NjdDQTY0NTU9ODA2NjU1NDc3NDU2MTM4NTQ1NjQ1NTdISD1ESkU3OTI1O0g+Ozk6N0lQXVtTVVhLOVQ+Ozk1MzI3STg9TllNSHh4ZDU9PkM9PUA6Njo+PkBFUV9YZWFdW2h0enlsio2Sd3Z6int+gH5/fIR6foKRiYSFeYSHe3V9dG18fYZ+c36SnpGeg5F7hn54j354iopugpqAdJmGfoGJhHt+kHqPqY6Pw6G9i5yknX2JhH2JcouKfnOmmpyYk4V7jpCIhGhHcaCknYyLkJGEiIqQkpONnJmSk4+VjIuUnpyUoJSQjY2Pi36PjY2Kg4iSlpqenoiLlJGdkYGLf6WYiISNgoWEgaWGioy4mJ2RlZaip6Genp2kr7e6tazAxsrQyMfMz9PT0tjT1dfA19jZ29ja2tnZ19u4e3x7bmxoWmJdVFBPSURMQjw8Pjk5Ozo5OTs8Nj89Pjw9OTk7OzM3REA4Mzc4PjYwNjg4MzU3PDM3ODA0OTc2NzU1NTQ2RlA1RE5JODkzOEFLPTszQ0BJPDpEV048TVRITj85NjMzMz5DO1tYPjVZeXBaPDxBPD0+ODY4OT89Q1FTUlheVVhmbW1taYGOinFyeYp7en98f3uHenx7i4aCfXSDhXlzenNtgH6EfneFm6KbnZSSf4yIf5iHgJuSboiohXqhi3yRjYOIhJx9mpCKjKOioJCkr5+LkIuFi4GThldyrYufq5uPg5ibj4+OXIKikYKMn5OUi4aHi5KSi5OTk46LjomHlZqcj5SWkIqRk4aAi4iRjIqJnJaYoqKGkp2VoIqJiI2bkIOHjn+Dh4akhYyRs5idkpSXoaKfmpKcnqiyuK2mvcLHzcjGz83QzM/X0dHVrtbV2NrY2trX1dnZoHKAd2ppX2BaVVlZQ0FJQz8+Pjo0ODo7Nzo7OjM7Oz89Pjc7OjoxOkc9OjM3PUA1MDY3NzI1NT82NTs1NTg1ODo1NzczNUhSN0dPSzk5ND1FSkI+MUZDTEI6ODpHWEA1SFdJNjYyMjM6RUNlWD8mX3lpX3o+Pjk8Ozk4OjtAO0JRS0tTWVBUY2J6bWF+koNvbXeLeHl/eoF8hnx7d4aEf3NwhYJ6dXd2dISChH5/kqakn6Wil4qdkJSXi4qol3OKso2EqJKEmZOFmYyilZ+YkoibnqOSqbCfkJSQjY6IloxujbeFmsTIspuhpZucmJaQspFkpM3IlY6Gh4iPkoyMkZOIhImIhZWZmo+PlJKGk5aDf4+LmYeNkKqXlqKiiJielpqIjoaXl4mEjoyBf4ePpIiOk6ial5OXmaGZn5mUnZujs7Smo7zCvsfGxcnIycLL083N1KnS0dbW1tja1NLazoV1g2tnYWBgUUtWXEJCR0M7QT04Mzc7PDo5PTY0OTo8OjgyPzk5MjpJOj42N0JDMzI6OTYyNjQ+PTQ7PjY5NDk7NTc5NDRKUTxKUUs5QTdCR0lANjRKRUxGPjw4OEVUQTc+XDg2MjE0OjtFYFhBRmF0aExjWj41Ozo6NTs6PTpFTUZIUldTUkJlg0d1go58fG1+iHh6fnqBgYJ+dnaAgntsbot+eXx3eHyEhot+i6O0qKSrs6GWp6ClpJaVr6KDkLiVkrOajaGgjKSbr6KknZiQp5epma2wpJeUlZSQi5ialqDAjqPJuKuaoqWtmZGbnLKdhoWoopyXhYiIjZSLipKPhoCFhoiSmJSMipOShpOXhoSRkJxzkJiylZajoYicmZOPipCKlpqIipaNhn2MmJ+KkJCcmpmTmZiglKCdlZ+bobGto6S4v7TEx8S9w8O/xs7KydKnz8zT0dDW2NLP2Lx1fXlgY1djWFJJS09FQkNENT47NzY6Pzs8Nz00MjY2OTc3ND01OzU8TDw+OzxCQTc1PDs1Mjc3P0A2Pz83ODQ5ODc7PDU1T01EUFJMOEA9RUFHQTU6SUVORUQ6NkFAQlM+OURPMzIzNTc1PXZcPFJcdGlaTV1TPD04OTU2Nz06SkZER01cXFlKaGE7SISLenpthYZ5fIR4gIWBfXB4fH18b3KMen2Be3iGi4mGhJKovK2ps72wpa6zs6mjorCtipq1naO5pZWtpJeprbempKOfmamYqqSvsaqamZyUlZGYoJeau7utyqFptreqsJWYnqKrkpe9pF6psoKJiYyUhpB8jo18g4WNj5SUiIeSlouOlY2LjJeYkZuZtJaUqp2LnJSRjJCSi5iaiZGdj4uKlp+ijZWNl5mdk5yYnpShoJScnaauqKKks7irwsjEtrq9vMXIyMLQocbJzc3E19bQytOjc31sYF1WYlRRR0Q+PENBQTg/ODc0PkY8PDY8MzUzNTU0NTRCMzk6Qk06QTtBSEI7OkA8NzQ2PEI5P0BCODc0Ojo2Pjw0N1RLQ1VRSjc8OklBREA0QUpITkJBPzZEQTxKTkQvVD0yNTQ6RUpcWEpaUW1ncHBEaWBLSTY3NTc6PkpAQ0lQZkhhYGJwSkCLiX+AcoaHfIGJdYKKg35tfXx8fnB3h3eNgYd7jZCMhoyaq8PAsL3GvLO0wby0rKuztoyosq2uvaubu6Oorbm4q6amoqKko6qvsrGqnZyjmJuYmJ6ipqWTo7mvqL+8rK2yuaWjp32IhpytvbCCi4uKkIOPg5GOeYGGkIyNm4eHjZaMipSWk5CZlpunmrGZkKqcjpqPkY6VkI+Vlo6QoJCIlJujrJWWj5ScnpSgnZuYn6CVm5+np6SipLCzpsDGw7Cwu7bFxcO/zafHw8fDvNXQzMTKind2ZV9dYl5PTENMQEVHP0E/Qjw6ND5BPT01PTY+MzMzMjQxQTE3QEJOPkdAQ05DQT1DPTs4NkNDNUJJQjo4Nzg7NUI+NzlWS0RXT0Y4PTRLQEM+NEVKSE4+QUE2QkI/QlNFNThQMTQ1Ozw4O0Q+OUxqal07V1JkS2daVU83OUdFP0NGXGhGX2lnW11ck4yMiHuHi4aDjHWGkIqBb357gX5xfoF6lHqSlJSYkZOVqLTHycDCzMLDuce8uq+rubuXsra5ssGupcCkq7C8vKquq6Ojnqesr7WxqZugqpyinJafsLSnjKO6urXBu6uonLKkpKiUhI6pxMSkgouOh4iEhpWUjHmDjJCOkaCLi5OQjoeXn5eSmJSWpaCunIypnI6Wj5GQlJWNkJSRjqGThpefoLKflJuUoKGZpJ+aoJuglJmfp6Smp6SvraW/w8KuqLe1ycO+ts6yxL7Du7PRycjBtXh8cF9bX21UTklETExMSkBBPUJEPDVBRDs6Mz04QjMzMjI2M0ExNUlFTT5JQEhSQEg+Q0A7Pj1GQTVBVUA7OTk4PDdFPjg+VkpDV09HOD80TEBCOzVKS0NMP0I/PEJGPUFITDkrRzwzNjc0NjRBPzdPYU9hRS89PjZrbGpgQDpIPj9FQmdcTWVcZlRjapqNloqLiJKPhol5hpOQgXKAe4x/d4eCgY95jaGWqJqbmLq+ycjKwtLJy8LNvcGzrby/p7q/vbzEuKzBqa2zvL2qsKqkpaOsrrSut7Wgn66fpqKZo7S9qZyovMGjtravq5OwrKqsloaaqqelkYKMkqSViYB1iZF5hIyRkJ2fkY6Sio6Lk6KXlpqUk6GeqZ6QpJmMj46PlZaIfI6VkpGimpSgopy1ppCgl6Wko6WfnqaYnpWXnKWjqKiisq2ou8DEr6Wzt8zAuq7Ds7u9wbmtwsLBv5pxfGRbWl9eTE1OS0dFQ0hBQUFESzo0REg6OzQ8N0YuMTIzNTJBMjZTSE48SkJKUUVLQ0RFOkVMQjw3RVY9Oz04OT88ST86RVVJQVdRRjdBOks6Qjc5Sk1CSUBDPjxERzxCQ089MjBIMzY2MTcwPUI6PWpqSks1UVMzU3BwZE47RD1ARj5sSV9YYVpkZViej52Ol46ekomKf4ifkoR4hX+Ufn+QiImQgJahmq2npJjDvsnEyMbTzc7Ny7zCt7C6vbS9y7vEwra2vK20v7m8rq+ooamotq6uqbK3mp6soqiinau3t6qlr77Esb25s6eqtLOtrZaVpa2ooJGOkrHFp5WOfJGVfIaQmI+pmJeSko6SlJKknJKcmJOgoaGbmJ6XiouOjp2IWo+Wl5KWpJlmmaOes6WWopasraynnJ+ml5iWmJWho6imn7Wrqbq7w7SmtLXLwbiqtqyzu7iuqLi6vLeEcHFdW1ZXUEdLVE5LP0FHRERIRkY4NUZNOz43PkFLLjMyMDI1QjU1UFdOPExGS1JMT0dHST5JUT86OElTOzs/Nzk+RExCQEhTS0BXUEY6QT9HNkE3O0hNQ0U7Qz00RkU6QkFCRzkvOkEzNjAzPkdEOTQ9dGRNRztFKzpmfGhWPD5AQkZCc0ZpSVJmZE1GppSclqGXqJaMkIOHpZKIgYeCm4ODlZCQk46aop+vvq6hx77GxcjHzs7P0sq+u7axu7u8v8+2xL63ubezsrWzuLOsp5yrrLmrqaiwsJijrqWopKW1wbCrrbS+w7nAubOnuLS3sq+VpK2wr6WLk5SgjXPBmX2WmYSOlpmLsJWZmZSRkZmYpKKUnpqVmaicmqGfmImLjpScX0qWnJqUmaSXVJawn6+cn6WVr6+tppuhppSTmZiOnZ+moZm0qaqzvLy7q7Cyx8C4pqyrrbGxo6GysrSlc3JoX11RUkxGUVFQUTtISkhGR0FDPTlLVD9BOj1FTS83NTM0OkI0NE5XTjxKS09VTlFKUEhISk9CPD5NUjs+PTg6PENSPkRIUklCV05JQENBRjM+NThKS0NBPUM7NUVBOkE/PkhANSpCNTIsPmNdZzozNXRkZUBSNyYjM31oWDw6QkNAPVJFV1N0YlZGSKuXmZ+hqK6YkJeHiqeWjYiShZ+HhJ2Xjp2gmqOktcm1qce8xMTJy8nIzM7Hvrqzr7q4wMHNtci7wbm2urKvr7O0p6Scq7S1q6qmrqyapK2mpamsur+oq7e3vsHAvreyssOwt72so661rbqmiJuXpZt1vp+EmZ2Okpiai66WoJualpSanp+onaafmZmpmaCmnZaPjJCcgm11kqKalZyin5CusqKrlamqmKqvpqWhpaqSkpmciZWcop6WsKepqrq3vrOyrr65tqCjp6ilppycrampjWZpY2JUTU1HSU9KVUw9TERNSUpAQ0Q8UVU8QUFCRE8xOD03Nz9CNzVVWE4/SE5RWFJQUVRKUUpKRUFFTVE/Pz04PTtHUjxFRFFCR1lNS0FIREU6OjM5S0lCPkNDOjlDPjxAPjs7RzctMj4tMYJoTnpcLzBraGA8PUJCODZ6Zlc8Oj0uLlNhTVZIfmVeSEaslJyhn7uumJSei5Oqm5GRk4iqjYeinoyjrZSjpLbHvbTBu8LCyMnFws7Iwr25sq+5tcDDyrbGssG8tbusqa2tsaOjmaq1u6aqp6yqnaivqKSrqr67qK29tLe+x7y2tbjAsL2/s6m1t6y/pY+il5Chn7yeiZqgmJadnY62nqibpaKam6CZp6SxoJqdpZynqZyXk46Tm4qWiYykoZScop+gtbClppSxq5qrrZ+fpaSqkpaVoISQnp+clqmloaGztLu2rai1srKenKOlmpeVmaqhnnhkX2FgTElGSE5RSU5FRkZCUUpIQERHQVZTREg8QUdRMTtCNzpCRjc5XVlLQUxQVFVTTVdSTlVKREBKSk5POUM/NT08TlFDPz9QP0VaTUpBS0RHQDUzPUlHPz1FQTk3QTs8QDw8M0A8Lyc7KkiRQjpTSjAsW29XNzE8Kh1CgGRUNDktMTpoXUZEQ5xwYkdEqJeknp/DrJuXpJeZqJuVmpqOqpaVqKaVrayZoqu3xcK8v7jBwsDIxL/Nxru+ubKwubS+w8i2wLC8trq3p6SrrK2hoZurq8Sipaispp6rr62iqqi+uKatvrC3t8e3tLi4vrG+wLa0srWvvqOWo5WSmpOtn5ChoaSiop6QvqSonairnJygmqWfvKKXo56hqKqgnJWNlZ6TnoeOhI2TnqSgnbaspp2Xs6easKignKufoo2alZ+EjqGanJKlpZqXq7G2sqqlqq2snJigoJKPkJapn5RpZlxiXlBKSEtPTEhFRElAPU9IQDtGSUhbUlBLPUhOVTRCRjg+SEc1Q2JbS0NOUlVXVlFYVFJVSEA4UVFQTTpHQDRDSFFTSUM7Qz5HVktDQE8+SzwwNjtHRj47RkE1Nj85Oj85OzE1RDAtLTBNdlw0S1o1LE1uVzwtPSkeI3piUTVDS1E5b1JGPEt4ZmNYTqKbo5uexaugnqudnK2fkaKelqSfpqqrl7axo6qztsXDvcC2v8G8ycK/ysi2uLW0sbS0t8LGt7+xubW6tqCnrKusnp+gpaTBpaGqrqCkqa2woqaovbWlsby3trbDsrK3ur6yw8C4uK20tLWjnaSUkZOgrJ+YoZ2oqKqimsKsqJ2rrZqanZiln72hnKSXq6urpaCZjZqgkp6Ijlh/lp+moaC5qqeUmbejn7OioZywmKGPmpWego+gl5aOoqOVkKWusqypoqKlpJWVnJiLj5KTpJ+JY2dcZWFNSktLT0ZFQUdLPj1JQTk5SkpOXVFRST1MVl05Rkk9RE1JOEhjXEtDTFBTWVlWV09aXklBPVdRSUs/SEA1SE1YU0hBOkBBRFBIPz5RPks3MDk5RkU7OEc/LjY+Nzg+NzcvMT85MSUxUVVtW0pPMTA9Z1dEMTc9LSt3YVM2U1prV3NIRTY9dWVcTFCeoKCYnsOnpKKzoJuxp5Kqo5+jnq2prJ27samstbHIxMHDs8LDvcfEvcTKvbCxtq6xtbDAxbW6sbG6tq2aqbCqqpufpqGnwq2crbGcqaKusaqkqL23prW7va+3xK2zs8K/ssazurertLatqqKmlZWToquhn5+Zp6qurq+7saWfqamZmJeSoqO3oKGjka6uq6SlnpGhnpSdjpCNlJ2ao5+otaenjZm1nKOvm6CcsJGhlZiVm4CSopaPjqChk4umrLClp6KdoJ6SkpqThYuSjZyfgGRoXWhmS0pMS1NBQ0BJRzs7Rj44OU5NVV9SU0o+T15ePUhQQk1MSThOZF1MRUxSVFlbU1VPXGJIQT9aUUFIQUtCN0ZFTEtOPjtCSEROQj07TkBBMy85N0NCOTdGOys2PDQ2PDM1LS80QDErJ1Z0U2VPPzEwNGJbTTIzPjA8d11eP1tVX2dyQDg8SJZ3ZUE0n6SemqDCp6OpsaCjtKmVsaumoqSyrK2pu7KtsLW0x7/Ew7W/xL7KxbbAycK1rLWpsLmswMS0uK+ttrqlmauyrKuYoaeYrbu0nKiwm6yfrrSyp6q6sqa4s7iyucGqt7LDvbTFp76urbe1qaesoZaWkaWjoaGXl6Sut62xtLafnqikmZOUk6OgtqKkpZWtsbGlqKShnZmZmpWYqKCfmaKer7Oipo2Yr5qlrJibn6eTnpCVmZqGlqCVjJCdnpOLqamroaehmp6WjY+ZkIKGlYmVn3pla15sa05RTk5UPUNBTkM7Okk/NzdRTl1fUlZRQldgXUJKU0hWS0g6VGRdTkZPTltXW1JQUVhdR0FCW1BCRz5OQzlIR0hOUD8/Q0lCTEI8MklBOTQxNzdCPjs3RTcrNjkxNDgwMi0vLjw2LSNCcWdzazIzLzFcY1ozMzkwNnBbYkgwNUpxalZDV0aMeWZDO6SknKClv6aorq6gqbWqnbevq6OqtLawsLi3sLe4uMW9w8e9vMPCyMG6wcbBuqq2pa27rcHDuLiqrbK8o5WtsK6zl6aokaq5qqGnsJ2qoK+0s6qqtrWsuquzsrq3rLiwwbq9v6bDqrC2rqmrq6admJiqoKGgkZegsK6zqrC4mZupn5mWkZemoLaopaKir7Czq7Gnq5+an5+bnqWdoZido7SwnJ+RlKaaoamclqSimJqMlpmUlpedlImRm5mUjqmpp5+jnJmbk4ePmYt+jZeGj5psaW5ibm5YUVFaVEFDRFVAOztIQDc6WFBkXlFXV0VZX15OTFNPX0xKPlpkXk5JUU5bVVlQS1NXWkk/RFhQREY+Tj89SUdHUVBCPUNGQk0/OjJEPzc3NTQ3Pz05NUU0Kzc1LzI1MS4tLiwxPionKz1ccD0+MS4xZVtkQDE3NDdnWWFGKEA4bX1oXFY6iXtjQz2on5yhqbygqq+qorC3qaW0squhrbW9r7O4vLu9t7fBwr/Jw7nEw8HAucW9wbivtqirt7K8v7+0qq+yuJ+Xq62prpipqY6nu5+lrbOfq6KxsLOsqrWztbusr7G1rLC1ssC6xbarvK+xt6ytqqOxpZ6lqJ6jlo+Yn7Kpsqmpspmdp5ualIyfpqS0rqeirKytsKeyq7GpopueqKSelaGZnKi2qZiakpKfmZ+hoJKuoZuaiJeZjJ2anZSLj5eXmpempqOgnpeWlpSAkJWEe4+Tg4yXZ21yaHFzYEdZZlZEQ01YRFo5SEI2Pl1RaFxPWl1HW15eT01TWGRKS0NcY2BQTE1OWFdYUEpWVldMPUVVSkVEQU0/QUZISFFQQTtGREZLPTg3Qj02ODcxOT48NjVEMCs4MC8wNS8qLC8tKj0sKyUyKyo1SzEuJ19fYVYxNTE9YFZfOClDM1lVXGdLNYx6ZkxApZmfpKu2o6yopK6ttamvs7mmp7C3xrext7/Bwra1usW+zMW5w8G6wLrFuMG6s7Ssqrq4u7q+tauvsbeYmKirq6ycrquPq72dq66xo6qfsa2zrq61sbm3qq2vsqi2r7O6vMmzqrW1sbSwr6ehs5+aqKygpZWWmpmxoq2gpa+WoqSZmZKMoqWnsqmhprGrqbSlrq+zrqOZnq2nm5eempmsuKKYk5GPmJyhmZiVrqGfloKVmY6enZqXkYqUk56apaOjoJmXk5KWe4yRhXuNi4OLk2xueW92fWJGYGpaSUhaWz17SkdFNkFjVGlbTVxhS1xcWlJSUmJhTEtFYGFhUU1JUFdWVU9HV1ZVTjpJVklIP0NLP0VESEhRTkE/SEhIRTw3PT46NzU2MDk/ODY2QiwtOCwvMDQsKCwvLSo3NikoOS4kOks1LiJUYFZhLjUoQ15RXC4rQS9KR1BbRzNjWFRMRZqWn7CosamspKOurbWot7O3o6y0t8m7tbu7wL61tLfDwMzHvMO9t7+/wbjAvbK9rqi6ubi3wresrrG6lpenrqyopLKplK+7pKyysqano7K0sbKxtbC3s6murLKnuK+1s8TFtqm1tauwrqqno7afn6awoKOUm5mUsJ6nm5+pjaminZuVl6WlpLenorCzq6ewp62vtKykmKGsqJycnZyUqrmclY+PjJidopiRmaikoZiFlJeRnZyYl5eJl5CXm6idpaGSlpKQlneEkYZ8hoKEjY1ucXh2fIBdTGVsXEtPZF0/YntHSThHaFdlW01eYk1ZWVdVWFVqXU9QSGFeX1BLR1FWVVJLSFdVVk04TVpORUBGSz9IQkNLU00/P0xPSEA7Oj47NjswNDE8PTQ1OD8pMDcpMS4yKSksLC0rLTkkMDQyJTlCNy4jQU5IZzI3J0ZhTFYlLUIuPUVMUTwzcmpMRUSRmaStpKytqqaisLGyqrewtZ+rtbnJua7BvMO4s7K1wsPOxMDCvrW+wMC7v720xKmqubG2t8C8r6y0tJ6hp7GupaaxpZ6ytayqsrCrqKi1uqy1srWrtK2qq6msqbmtsrDHv7ilubCpra2mqK2xpaSjrqOonJ2bmq+ZoqKio5Csn6Ogn6GppqW4pKu0tKSqq6msrrWuopyjqKucoJmbkqS1mo+JjoiRo6GWj5afo5eVhpCVlJ6bmZeViJiTlZmnnKCgjZOSjpF4fo+FfXx9h4qKcnRzf35+XVNjbl5OWmddRkSWW0c6TW5YYVtOYWJOVlZWV1VZaF5RU01jWltUS0ZPVFNOR0lWU1xOO1BeSkJESEpBRT8/S1NPPjpOTUM8PD45OjU9KzMyPTYyNDk6KDQ1KS8sMSgpKywtKiY1Ki8mMCkzODoxJiozRGQ7NipIZEhKKzpJPzNDSVMsPo9rQEhJkJqoqaGpsKSno7OzsLS1sLCgq629zLuuwr3HsrSutMLD0cTFv8KzvsLDvL+4vcWorbestLi8wLGssq2ipKeuqqilsaOqsaquqrGurqyrs7unt7CyqbKqq6alpK66rKqwwrm0rLmpqaitqaexpamkoq6pqKKenKKslaWdmJ6ZrJ2hp6ihrKajray2sLGgqaKgqq2wrJ2ep6epmqOYmZCgqJiGhI+Li5+hkI2PmJ6SkoiIkpahnZaZloeXk5OXpZ2enYySkI6Kf3+IhXx3f4eFh3V0col3bF9ZX25iUXNxXEs7hHxGPld1V2FZT2NcTlVWVVdRXGJfU09PaFhYV0tHTE5SSEVJVlJdYzxQXUQ8RkhIQkc/PUpQTDo+T0o9OT89Mzk4OyozNT4xMDQ4NSg1LyosLjMwOyksLCclMjM0JCwyLTg2MCkoMTxeSzAuSmdERjg8QjA1RUtYMUCUXUBORpWWrKegqbGcp6iwtay4ta2qpKqqvcm8sb+5w6+wrbPEw83Ow7/As8DDxLrBtMnErK+3rrO6wL60rq6sp6mqsammqbGmtK2qr62tsa6yrbS7pbezrKyuqKugo56xt6uqrbm2pLW1pKqnrKyqraCopqexsaSnpaGhrJaqoZOboKaeo6Kqo6yinqaxtqysoqWimqmqrqmcoaWkpJmgmZaPmJ2TgYKQiYWdoI2LkI6ckZONhY6ZpZuTkpuMk5KRlKOanJqLj4uMfIaCgoF6dYGDgX51d4uih3hqXl9uZldlh2ROQGeSTEVieldiWFJmVU1WVlVUT1xdYVZMT2pYVlZISkhJT0JHSVNRWW9BTVhAOkpHRkVHPj5FUUg4Q0tFODdDNzI6OjoqNDk/Li80NjMpNCsqLCsuIzQuLSsmKCs3OSomNis8LTIsJjA2WFouMEpnQUE8PEMrOkpPXjREh0JJSUSWkK6koaqvmKiorbWqtbGqpauqqb3AwLi6tLy1prOvxMnL0r/Bu7i/v8O6wrrBxK6xtbK0vMG+s7Gvraytp7eqpa2wq7iup7CvrrGrtaq2tae0t6uspKqqnKSetLOoqKSztJ+1raGqqKuoq6efq6uoubapqqqqoqmfrZuRqqGdoKSipqKqnpymtK6npamio5ikpqeqnKKko6CZmJ+Rjo+ZjX+HjIeEnp6JhoyMkZGTj4WIlqOajo6bkpKQj5KfmJmXjYuEgHSHgn9+eHWDf3t4fn+InY9wcWZmcHdcYXSIak9dmFZIbXlVZFZTZFBNVVVVUU9YW2JWSVFqVVdUR09YVUk+SUhPUVB4TU5WPTxLRD9AQTxAQ1VDOUFLPTU7RTIzOzo3KjQ6PSstMzQxKjgqKisqLCkqKC8qJiklMzssJDIpMjAyMSUvMlJjMDJAZj1OWD9DLD9MVF8vSWs3UkY7lYyvoKSqrJmpo62usrSvqqSvqai7v7zBsrC5raK2r8jHx9DAv726vMO+u8TCwL+usrOztr28wbGytKu0qaW1qaWts7K4rqGstLGvsbmrua6qrrerqp6qq6CjobWtqKGfr7KhtKqfqKeqoqqhoaytqL2uq66toaeon6yZj7CimKKgqKeep5uZqbCpop+soqGSoaKip5mZqaaYmJmdj4uHlYh9joaEhaSXhoOEjYeQkJKFhpahl4iRnZGTkI2RnZWYj4uGhnh0gX99dHh6gHt1dHtrgoekdmleZWuAdWeIi3xSVnBfS3hzVGRTUV9NTVNaZk5NV1llWUdTalJSPkJOUWFROklITFNJcVFMUzs8ST87PD07QEBXPDw+SDczQ0IxNTo5My01OjopLTMxLS02KSgrLSw1MiMyKScsJS47LiYxLjAtMTQlLDBNaDozOF89YWQ/RjFDUFtbK0hQO1lDM4+NsaCkpaqjpKKsprOysaiksKequL/BvbGpuqqnrbDJxsfQw77Avbm/wL3JvMK4sbC1srq8ucCztbysuayjtKamq7G1t7Glprm0rbS8r7ylra22q62cqa+kn6SsqqicnaqypLOomqunqaSonaKpp6m9q7Swrp2ppKCvnJqzopakm6Wkn6WamqiqpZ6aqaGbkZugpJ2ZlqmqkZmak5CLgo+FfpCDgIifj4eBf42IkpCQhYKVm5SGk6GNlJGLkZuTloeKf4Byenl9e2d2fHt1cXJ+aoZ5hYhkX2djcoV7bWd5XV5WQld7bVRiUFJZS0xOcHRdSVpbaFlGVmdPQz5LT0RDQTlIR0tTP2phSVE4PUg8PDw+Ojw/VDY6P0M0NUg+Mjs1OTAyNzw1KC41Ly0xMSYvPktJMSUaOTAlLCwwOS8sLCs2JzE3Iy0vR2pJMTRYPWZiQUo3R1NgVSo9PEZcQCqOkbCYn5+ppKKhq6S2srGkqbCmrbnCvbexpLmsqaiwwsjIzMK3vb+1uMG6yLbDtbSztbK9ubq9tq65tr+sorOmqqqutLazqJu5u6ixvrK6oK60tqmrn62xo5ylqKmjnZulsKavoJ+qqaehqZujqKCtvKeusa6hqqKkrp6eraaYn5qhopufm5mjqqKamaOjlZaUoKGWm5amrIyfko+RjIKKgICPgXualY2KfYCMh5GQjYqFk5iRhpOjipKRh5CZkJSBiH16bH12eHhienpycHF0eGqCdWuCZ2NnYW5zjm1iam9fcEFdeWtWXk5RUUtJTVNZVk1cXmxXRVhhT15QSE1ERjs3SEVLTzxyaEpLOUFFOzs9PTs7PUo0OUI8MztHPDQ/MTgtNzg7MigwOS8sNS4uPS0qTD4qHTQ5JicuMzQuMCsvNCYsOiQ0MEFoWjEzUz1lX0RMNktWZE4pPTNSXT4jkZasmJ+Xp6Ohn6ejt6+toq+vqKy4w7u0rqC5r6uns7rHyse/uMK9r7S/t8S2w7KwurGywLa7vbequbi+qqS0pqipr624r6eXuLyjrb60tKGtuLWnpqiws6CepaWnoKWZnqynqJ6gqq+noKaXoqifsLifo7GvoauhrKScp6eompubn6KVnJyanammlpueqJGYkpmdk5mWoaqRm4qOkId9h36Cjnx8oY2NiXqEjYWLjo2FiZOajoiUn4mQlYKMl42RfIV8dHB8cXNzX3h4am9xcXBrgHNkemxnZWNhZoeAYFtyanJNToBpWFpNUUxLSFBSUEdNW19vVEVZWlJnT0hLRUY1NkhCTEk1WmVKQDZFQjk6Pj0+OjpDNTk+OjNARjwyQDIzLzo7ODMmMjwwLDg1QiopLUMqLDQ7Tk5AOzczLS4rLTcqKjwlNTM9ZmQyNE0/ZV1GTz1SWmdIKj8wXVs1KJWbpZiclayfnqGjoLarsKO0s6mpusW3s66huK2tq6+1xcfAt7/CubC1vbe/u76wrL6ws7+yvMK4qru6uKentKenqq+rsq+kl7u1pKu6ta+esbmvqaWnr7KcoaSgpKOglpuvpaGeoqivoaChkqOkorawoaaxq5+so66YnaqlqJ+Ymp2jk5qbmp2lqpqbm6WVlJeVnI6Tl6KpopGKi5CGeoR+hIt6j5eKjYd7g4iEiY2PhY+TmIyOlZmLj5Z+hpeMj3qBe3Bydm5vc154d2VsbGxraoVuZnJpamVoXWRzgWBba3ZpWkp/XltYT09LSEhSVUczOV1ebFBFWVVZZU1JSUVFMDdGP0tCNklKSDs2Rjk0OT49PDk4QDg7ODo3QEk+ODw0LTM8PDc1KDU+MSw7QTEoKzY8IjhSPSoxMTM+RDUsLSc0Mio7KzEzOWNtNzRHQWZbSFREVF1oRC48MmRXLDKUoaGWlJuqnKOhoqG2qa2gu7elrL7FtLCvo7WvrKyutMPDvLO/urexs7m4uri6r67As7O4r7/At629urWlorKpp6mxqauwn5m/tKSntLWonrK8qailqa+smaKnnKSllJegsaSZnqSpqZyin5KkoKS4qaSnrqaepaGok6CpoqGhmZudn5GZm5afoaqbmpiglJGUl5qOk5OkqKSQiYqPhnqEe4SGfZ2NiouHe4KFh4iKkoWWkpKLkJWUjo2Ue4OYj4t3fnxsdHJsa3Nhd3VoaGpoZ3CGaGhpZGZpaWBqY2poW2Z7Y2BTdFRcW1JMSkZJT1NAISpoXmlMRFdVXmBLSUhFQy46QjxGPDZLUEQ4OkQzNTc9PTg5NT86OzQ+OEBLPT45Myk4Pjw6OSo2QDMuRTQoKyw/MC1OPy4rLTcsMTE5NSwmLjUtODA1NzZgdEEzQ0RnW0tXR1VgaEIzNzlnUCcynqKkkY6kp5mcnp2jtKynqrq2p6zDwbixrKO2rqetrrfAv7yywrawrrK2trm2tq2qvbOusrG8v7evu7uxpZ+1qaWks6aorZycwKqnpa+zqqy1u56pqquxpZieqp2mpJGYpayhmJ2kqaGboZuWn52ntaawqq6hoZ2eoZWgpqCioJqbmZuSmJ2TpZ2soZeWnZSTjZWXi4+Ym6mgkomKi4l5hXeBgoGdh4uDiX6AhYiHhpGEl5SPjo+RkZGMk3uDlY+Gc35+ZnlvamprZnRza2NnZGR2gWNlZmZlamlja3JbX1ldbGRhTmlYWmBWSkdIS01SWD45X2xoSENVVF1bSUlHRkEuPD85QTg5UkdANzpCMDM3PTc2OTI6PDk3OjlETT1CPDAqPEA7QT0tNUIzNz0rKywwQipKSy4vKiszNzIyKDU3JCs3LjcyNjg1XXlOMj5IaVpMWkpWYmZAOjNCaEglNZqjoI+MrKGWlqCWpLOxorK9tqGxxby7srGjt6yqram4vLu6rcCxrq6utq+zuLOpq7mxr66ztrq2r7i9rKaetKmfn6+iqK2bob+fsKOusa+3rrWera+traKZnaeppZ+Vmqeln5ikoqidmp+ak5yerK+muqiuoqGam56ZnqSapJ2XnpiblJifkqiVqqeak5qakoyVmY2UlJuqp46OioqPe4JzgYGKmIWHfImKhoaKjImShZWbk5KOj5GXjpB/gI2Og2+Bf2Z5bWdraWZwcmtcZ2NjdIFiZmdqbmxnampobl1sbHJwYFRjaWNmWUlGTE1PWFJRVWFlgFVBV1NZVEdJRkVALzw9Nz82PEZOYTg6PzI0OUAzNzgyOD83PTg+RkpARDkyLT1BPUE9MDVAOUExLSsuMzw7SzYvLissLTI0OzYjMyopNi41NTQ2NVp8XTE5S2pbTVtLWGRkQEExSmZDJjSRoZuNjq+dmJOhmqmxr5+5v7WgtMK7vrqxprevp62kt7i3t6y7rqyqq7eqs7euprK1sq6psLa2sLO1uqapn7WnnJ2ooKermqe9l6ykrrC2taytn7GtsKmim5yjq6iblJumo52aqaKklpqfm5CbpKqrqryfp6SgmJqZnaGPa6KWmZxwgpWao391kamnnpSUnpCImJqAloqikHmHlI2DbWl/d4NxbIaLhn2FjIdxXmNhZ4SYhWuKjZSSdHeLhH6DkIBnh4BndWhlV1xoc25NUGljZ3OFaF9lZm5tal1gYYqPg4RlTktEOUdUaF5KR1BQVVVMSFNhcHRlRltRVVBGSEVDPjE7PTY9NjwzZlw1Ojw3NTtENDg2MDpCNz86PkZMQ0IzNDM9QUBAPTI4QEU9MSwsMDg9RzcwMS4qLiovNTY4LCMxJzIxNDoxNzVYgWwxNk9rW05cS1tmYj5HMVFkPSoui6SZhpWwm5qToJuqraqjvcWvqbfCt729raa3sKWqorezsrKwuayppqy0pq+0oqm3traop6y2sq60rbOhqZ+yqZ2ho5mkpZiruZOlpa+zt62upamuq6yloZ6coaemm5agpaSbm6emnZOenpePnaeppLawpKOinZaYl5ejiKGOkpqGoYeTnKB/pX+lqp6SkpqRiIRzeI2OhYihdoqNaZeIZn5zeKBviIeEfo99f6GgoJmAfYeec4aOdZuKbIeBg21pZWN6bHJhU4VtYmxpmHFYaXFwiFleaVtsbFuIcm56coVmhoRaX0dOP0dfTUVSVlZRUVJXVWddTVZIUlJPRkhHPjw0OT05PDc7MDw8Nzk5OjY9RjU4NjA8Qjs8OT1GUUc9LjU8O0A9QD41OUdBODIqLzE8STkvMDEuKi8oLTQ1ODMlJjIxMTU+MTw4WIN1MjVSa1tOXExcZ189SzFXYTcvKIqnl4Ocq52YmJ2fqqmnqr/Dr7G6vLbAv6qlt7CorKWytK6usrWpqKWwraW0sputtba1pqeosrCssqetnamgsKefo6KYn6GarLOTo6Wltr2mraerqqyopaGgmKCmo5mYpaKjmJykqJaTopuTkqOlpqG3pKSgo5iVk5eTnIivkJeUiamLlqGchbGAo6ydk5mdlHmC1KiAh5XBnMZ5eLGlt5dlgMCcv3mEhXqShHyQkJHKcpe7nMV6crWnupB7gG2WsauweWhsWLGubmVpvJK8bmd6b3KP2H5Ta2O2sn6BcpRzmqGqkFdPV2JPVk5GVVtYUVFTjV1XW1FBXERRTkVISTw8NTc9Ozo5Oi49Ozg3ODs5PkY2Ojc0PkA+Njk/RVJJOi41PjpCPD9BODpKPjUyKjIyQkUvLjMyLisvKC0vMTg2LSAvNDE2QTE9OleDdzIxVGtcT1tNXmdcPkwxW100MSGMp5OBp6qfl5yepayyqbDCvbK1wLW2vsGrp7SsrKimrrOpr7WypqeltKWnuK2cs7K2q6Wkp7GtrLCmqp2mo6+ioJ+dlZmenK2rk52in7O6o6qpoq2upaGcmpqip5+XmqefnpeepqeRnKaZk52hpqKhsaOfn6OWlpKXkpmFr2tqio2qfmaDlYatZHCdnZSZppRxrqGkfni7fWyhkHaxX2q0W6WAZZyRYGeDe2d/anhrqWW+cWemi3WxanuxeHSSlGNubaduW4ShRWhmh5ZFdZxgfmd8pKeCWmCMq2iAlXh5aqc3Sq9cWFNsZFtLTlhfXFdWO06KT1dXL0lUU0pERkY9PzQ2Pzs4OjkwPTg5OTk6PTxEODs6Nj1BQDY8QEhRRzkwNzxBQz5ARDhARz0wMy4zM0UzLi41My8rLyguMC46NS8nJDIwM0IvPTtVgnYyLVZqXE9ZTF9nWTpNNV9ZMzAbkKKVg62npZ6jpKqxt6y1vb+wtsSyt7rBpqmwqq6oqLCuo7C5rqOkrbKjqbinnrOzsKOloKmsr6uvpqeeo6GvmqGblpSWmpqrpJWaoZ+0s6KrnKOtraCemZagoqicmJ2jn5uZoaakj5yimZegn6qepqagmqChlpWRlpCahbWbtXiFqZm1mXaGs5u3fpOWlqmUfmuCpnuChoiTlJN3q2drsVyreo2GlHSJco+HgH+IkJd4goGLl4uDoI+EsHZ3n3FsbGx8i06kWEhiYpl+Y2imYHlydVOTh15RqW1jcX6HgGKcLlGhb1tTa2hgTEtbZFhcWkI+sntYWEEjTWhGQ0VBQEExOT44ODo4NDs5OTw5OkE6RTo6OzY6Q0I4PT9LTkc6NTpBRkJAQUQ8RkQ7MDIwMTtGLDAuODQwLC4oLzMsPjgzMR8vMi1EMT08U31uMytYalxPWE1fZ1c3SjhhVTUwG5SglYizpqahr6mnsqypu7bCsLvBrbi3v6msra2tpayxqaCuu6qgp7Oso6u0o6aysqejop6nqrGnsKelnZ6erpWemZSUlJedrKGZmaSota+iqo+qqKqbnZWXoKWnmZ6do5+bn6Olo5WbnpeZnKKpm6aanJuioJeTkZKTnYPVk5m5cLDBfsWGfNaUm7t8mpWlj42djaR7joikg6WCeqx5j51Wr3qIfp9quVq5doaEfqaClHuXeqp4jZ2PerFujoR0kbyFb5RQr6fFilGgemNgqmJzcohtl4hgU7W0yIWAiXxjpDNCnXZdUGppY1BAWGdaZGFKSE1xUFxRT1lmWUNEP0U/MD08NTk7NzQ8Ozg9OjxDOkY6Oz42OkBDOzZAT0xIPDo7REhDQkNEPEVGODEyMTFEQy4vMDQ4MystKS4zMjM5NzEjJTUqPjM9PVF3ajYqWWlbS11PX2ZUN0c6YVA3MSWbopSYsqioprSqpbSppLy3wbC5v7G1tLqytKewr6KvsqWfrbWomqe4raKvsJ+ztLCgpJ6fpqmwqLSoo5qcnaqVmJeVlZOVoKmcmZanrbCpo5+PraOolp2Wm6Gln5ehoaKhmqGip5ueoJ6UmJqmoJunlZubn6GYkJKUkJ2Ism5otXGrh26OpnK0c3K2e5qXpIuPnY2if5Ghpn+xdoOR0tJ2XK57hX+kb5uqpmuHhX2tfZiZjnuxcZKejnizZZd0hJ5vnmeUUciLWsJcn3liX61gdnOHYpeIXlnKnW+/gXVNS7VTVcZkVFFqY2VYQU9rYGxoUFZHSjk9VVJaV1hJQz9KPDI/OzU9PDQ2Pjs3Pjw9QztHOTtANzs+RDsuQ1JKRz4/PElKRkNFRD5ISTkxNzQ2QT4vLjI0MjUyLSkuMjYsNzQyJh82MDs1Oj1QcWg5J1dpXEJPVF9lUDVHPWFMNjIwop2SpbGto6u8raa0pqe2u7yyur62trS5uLKktLKgsLGinquvo5emuK2ksbCctLepoKWeoamksaesqaOZmpmnnZWTl5eQkaGmn5WTpaqwpqKWk62gppKUoJukpZ6UmqWnoZqjn62ZoJ6ekJWboZ2cpZWdlZqin5WYlZGahax7d6h2o42IhqlvrYqCp4OYmKGJkpqLon+TmomuhX+Cs1xys1KufYKCpH9x1314hX6PnYaamXavhoeRnId3tGGaZZqCgpVtklqwWEuadZh5ZmCtXnZ3iGiYiGxdr3eVno94bDV5yK6yX0JUb15nYEVQbGBwbVZWTS5mZWlTWVA7QURATDo1PzkxPTwxNj85OEA9OkM6Rzs8Pzo+PkU5LUVVSkVAQzpNS0pCSEc+R0s5Njw0Njo+LzA0MzMzLjIuLjE4Ki4zMiUhMDM3Njc9UGtlPiZWZ1xAPlZfY042R0NgSDo5OaCelaC5sJe0wq2os6ipsrq3s7e+ubextLq0pLeynrOsn5+oq56Up7WrqK+xqq2zo5upoJ+nobWmpqmimJ2UpKCTkpuXkZShpJqSkKatr6ahlZmqoKOPkaGYp6SglJqlqJ2cpJ6tnaGcn4yTnpqdoJeZm5aXoqCUl4+mnYapfX2leKGOjYKqcK2LgaeGlp+hiZeXiKOCkYiUqnyAi514b7FaqIKCiKB5dNh/doh0qIGOm4ySpHuUj5+Ee7JenWSgfoOVbZJdq1tak4CRf2hnqmRye4FrmIdzXqtaiaCOa29lT0pDoVxbTHRdYmdOW2FfcnNfS1c3SpuWWEhFPUdGQU0zNUE4Ljs+MDVBNzhAPDY9PEY/Ojw2Pz1CNy5IVkpFQUg2S0lOQElLQEVOOjpANS46PjEwMjE0NCsqMDUvNywmMjEoJCQ2NjcxPFBlZUEmVWZbPzJVX2JMN0ZJX0MyPziinpqawauXtMKuq62ppbSwt7C1vrm5sbC0uai6s5+vpJ2kpqaek6mwqa+ptKuprqGYoKCmpKO5oqKroJabkaGflJOemZOXnp+QjIyosLCnnpebqKagjJKklqaqp5SYqaednqCiraShnqCMlKGYn5+RnZeclZ6hlZaNqpyPrm1ytHOpi3WKp3O0eHOzgJGko5Kcjomkh5B3uHCNe4uiamu2WqGFZZeXaaGip22UcrR0k5l+smqFkYetanWzYZ1mom+Hk2uXXa1gTaF8h5FSc6NseX9+b5iHcl2vVjycd2ZUb24uXKdPY1NrZWJtWmNdYXB7Y1RbUj49bnAzQ0JAP006ITdANi47QDM3QzU4Pz8zOzxDREJKRk1JRjYySlRLRUJJNklKUD9ITkNGUD08RTUwOzswMTAvNzUsKyw0MjYvIzAwLCwdMjg5LzlOYGVEJ1VkWT4vVV5hTDVGTV44MUM4ppybnryhm7LArq2rrKe3qbevtb+0u6+utrWqwLWoqaGbpaOhnJGpqae1orKnramgl5ynn6SruJ2irJqVmY6jopWMnaCbmJyfkZOUqrawqJmVnKypl4yUpZejrKKRlquxo5+epquxmaGij5iilp+blZyWoZOdqZyUj6qZh9SSmrtzsMOAw4Z91ZabuHiIkJiMl4uMp4h6pLZ1fnd2woKasmCDunnAfHW4Y7WBjIepfZWBq6lxe390vIinoGmdYaaOr6F+jHWHqn2+b3O8dLKDdXiBim6aiHJujaR0vV53fVphebxrWlZcanleamFlZ2NteG9ZXFpDQEBzQENGKzVHIic7PzEwPD83OkI5OT1DNDxATlpeYGBfX19aUFBSS0VGSjRITFJASk5FRk9CPUU4ND05MDIwLjg3LSouLzE4MCItMSwzHiw8OjA4TFhhRidUY1g8L1ReYEs1O0xbLTdBOaebnqK9oZeyw7Ctqqussae3r7bDsLiwrbmurcCwq6OinqOhnJuQqKOqsqS0payknpWaqpimrLicoq2XlJ+PpJ+SjJyinZedmpGWkq+5sqyWmKSop5SQlqSbo62ekaCoq5+an6ijtJ+ipI6nopSimpyXlaOYkK+fkpSpnoSQmLZ/j5GMt5V4gpOatXdta25zb3mQhY+KdJ/Bu72ae4GxqHGAc5G5g32HhoyHjXyKh42YfKS7ub2cdHm0o3R3l3Z0sHWZnmaHao21dHJxd7aMXn96fYlog3luemOLrHB1hX9YW6dqRWVaVGZgY15jUWdncGx1Q05RTUQ6Wk0/SjM7MCA4PjsuMz1BOTk/PTs8QzZCU1laWltbWlteYGJgXVNHR0g0RElUQktOR0VPRj9HPDc/NzA3MC85Oi4sLy0qOC8lJjIoNCQoPjcvN0xUX0cnU2JXOSpPXl09KzpWVSc+OzynnqGiwKWWtcO0rKuorKupuq6wxa2zsq22prO3q6mhoaWeoJ2Zk6qjrKmltaenn5uVoKOdq6S9pqGplpObkKGbkY+hp6GSnJeUmJSxtbetmZ6kpKKLkpKmm6Wqm5WppaWbmaGopaekqqCRrZ6XpJ6Xl5edno+vqJObpaGNan1pm6V3hnJ9mo50eWSHe72+wLpvk4Nylohhc2taXpuJYGOIj5VrYICWZG6ed2OWbICalZRlXmBicJmIaXKLfYaVZ2t/cnR4fX9iW3d0gWhQXG2DfXuLa1hreoJzSkpvhnBOdExFWF1nYUxbV2djX09bbXRpcVJRREVNO0dJPU0/MiwyQT84LzU/Qzw5O0A7PUM+UlZWV1laW1xcXWBhYWFgXFVHNURGVUVKT0hGUElJSDs4PTUxOi4wOzouMC03Nj01JiIvKjIsJTs4LTdKUl9JJ1NfVjQpUF9MKDM+W08nPzI+qaCoosKjm7W6tqOspa6np7WxrMirr7Kqs6K9sLGln6KnnaObmZmrpq6jpLSopZuXlKCapa2ovaeopJSTm5WfmZKXpKmokJ6RkJicsLK/rJynnqeiiZORqZqoo5qaq6CjmZqjp6yjoKuimrGblKeglpSdn52WsKSXoKeYm5CcnKGhl6ShmZyZmZmPlYFnbX1xd5KYlJKGjLarjYaYlY6KjJiWh5SVi4STlJKJjpOUmJSYlpmfoZmak6CcjYJ6pYVta32QfYB1ioqBcYJ4eXZ1iX98impzgXSDdWV3fXdrb3ptX2RdcGhNWVpmamBXWm94bW1mVVBGUzlPWk1STygrOktCNjM1PUBBOTpDPjxFTlNTVFZXWFlaXF1gYmJhX15eW1RLQ1NHS05ER1BMT0k8OjszODksMjs4MjApNklSTzgiKSsvMiM0Oyo3Rk9bSiZSXlMxMFReOis9OFxKLDwtQLOhs6LAoaSysragqaWyp6WwtKrIqqyvpbSlwKezoJ2kpJyjlZWfqqasoqO2q5+YlpWfl62ppcCeq6OUkZuXnZeSlKGenqKnk5KZqKeyxLCbq52rn5CWlqidqpycn6yYoZucoqSvp6Klp5+umJennZmZoJ6dnK+gnKGllJaRl5Oen5ShnZegjpaTioqNjpeukHyWnIOSgourqYWAmZeJhJCeiHqEkIiGmpKIh4qWj5uXjZCXnaOVmJKQnI1/jmehs6+FioV2e5KKfXd5em9meY+BgIlqdYF5iHNpc397doOHgmp1ZHpmYGplY2Rma1lse29pa11TTFBEXlRGQD8+LDRARjs0NTs+QTs8Pz4+SE5OT1BTVVZWWFpcX2JjYV9eXl1eXVhWSktMQklPTVJKOzw6Nzg2LzI5NjQuKCYkLTEuLykrKjclKzwoNkNNTUQvVFxRMDVOWzE3RTRbRzU8LEC0oLmwv6ysr7KxoKqmsq2irLOvxK+pqqKxrbuis5ufpqKhnJiXp6WppaSlsrWelJOdmZmvpa2+oKuikJGdmZmUkZWhnJeonISfq6yjtMi0oKqkq5eWl5qmnambn6SrlJ6fnaCqr6mlo6uir5ufoKCYpJ6cnpyuo5iep5KWlZuRo5eWp5yalmWCknxlfo2akGN5jm1oa3uSpatqZZuYfWeGimVlaWh7jqKPbGiNmJGjd2tqipiinpdza216hI6IelhmXoaDXm2MioF2XGhzd3aRgIiCbXeBeH9zbXmEdHaJiI+DfGqHWV5sdGRec4lpa3xwa2RfUk5YSWRYQUo0PkY3P0ZENzE8PT9BRDs7REdISElMTlBSUlRXW15gYWFgXV1dXV5fXVpVT0RIT0tTTj0+PT02NTM1NTU0KiYmJSwqJS8qKyc2KiQ7Jy9BSltKLzdaTzYpRVkvRE8yWUM7Py49pqC6vbqvrLSxqqWora6wpq2tsLywqKajra6wnquWn6OdoZmZpqqcraOlp6myrZ6Uo4+ir6W2uaWuoo6OmqGZk5KaoJmZpZV8pq6jqLTEuKWip6+fnZWeop6jnKOpqJKfoZ2hqrCrq6SqoKqbp5+noKyWoJulr6OWm6mUn5uZkaOVnKmXnX29g4hytHKEnYataHi5xLhxlKOjeqaZmXKrgnzLwMC7cYyjiIOefJeZiZ3AvYGWnZ2MnMHBfIJ8k42aw8B9bKWyb4yBb8p6f5t2kIOOgXV5gIB5cXp/h3B3hYyTeW14lGNnYHhkYGWCYl5zZ2xkZFlMVklRWkhPRDJJRT9EQj4vPD8+QEE6OENDQkNFSElLTU5QU1ZZXl9fYV9eXl5eX19fXVxTTVBHVU5BPz89NjQ2ODI3NiomJSMpKiYuKyopMTAfOSojPklbTCojQlAuI0ZbM1BZL1ZBQjsvOJajucO1sLDAqaiUo6+osK6tprKzrqmkpaavqp6rmJqin5yaqqahnKuipKijpLSknKKSpa2rt7OnrqKRkJmcpZKRn6GYm6CdiKetpauuwMCxoamvqZaSn52imaKkqqOToKKdnq2vqq2no6OooaWlnayokaOaqKypmpynm6qflJajlJ+hlZt/zpR4eqSBeZWWm1+uj16OqIKjoXynlptzq4OAr15jjap7qIeFoHSXk4izY4KrhqCNjbNqhK91fZeIt2GDrVqjzW6Qdnvae3+ZcH2HknZ9ZXqHdnZrfIdufYaRkX5tg5Bgcm1waGBgemRccWdpZGdgUlRTV11LT0Q1QUhERDg+NjtAP0E7PTdAPj4/QkRERklKTE5QUk9TXF5fX15dXV9gYF9fXVpXT1VKPT8+PDU1NzgxNjQoJyQhJywmJi8oJiszHTYwJDc7U0wrLC1LMCc7XDtMLSFQQEY0LjGtwsC/tbSwuJedkaOqp62zq6ayq6uqoqumrqqfppuZpZecoq+foJ6op6KloJ+wq5qdlaaurLCqqKuflJGan6SSj56kl56no5+upqyxqL/Hs6ipsa6Wkp2coZefqaqflaGfnZ2usKmsqpyoqKWiq5KsspakoaqpnaKlpJ+un5GYpZeemZOTkZegcYWMl3WFqIZxsX2ecqx/op+BpY+edquCfa1/nHOtf6yHhp92mZJ7fJd+qoeijJKMnX6re4mUkJ+Ae61XncV7j3CTwX2BlW11b4xtZXZkhW5hd25yb4mKko+DbpKRZnB1dXFhZ21lX29paW9nZFhUXWFaUlNDOUlJQEM8PjxARkRDRUE9PDw8PkBAQUJFRkdFQENJU1dZWlxdXl5cXl9hX15eXFtaUkM+OzkyNDc4NDUyJiMfHCAxJyAxJyAnNB41LSY3PVdKLTwoPjEpM1dARiEcRzpDMS4rsNPGxrK0oJ2jjqOioqyvtq6osaWoqaatq6umoaOdmaKVn6Wrn6Gln6ioop6dsKyXmpaop66rp6annpeUmaKhkpSgrZudp6SwraWttau6zbGtpq6rlpWcnaKZnq6snJegmp6fqbOrq6ubrKulo6yarrGhp6utpZekqaenr6CRlaKimJOQhKRqpHWJeql0erJwgqaKmYxxiaCbh6RgYFKrhX+ug5t2rYKohoWfe5mXhXpmgKOJpJmGgqN9qX6CloeuX3ypVp6jkoF6o5+Ae8OvxYtyr7OzuXFiqa/CdGiMjJiOgm6clXFvenh5cG1nZWVycGZ9amNdV2BqWFlVTU1RTENDQUI7Q0FAQkk8PTo5Ojw9Pj4/QT04NjtETFBSVFZYW15eXVxeYWFgX15dXF1bU0lCNjc5OTY2NCwmJCIgKCciKy0iJC4hMy0mQERXSCxHKzU2KjJQS0wjIEE5RDQsJ8PJ1tS/oZmrp6Cvop6wtLCuqayip6WoqquppKagm6SenaWnp6Ocq5mirKCjn6+hnJqSq6S1r66gp5qdlZOmopGboqigoKadsaamqbKtt8iytaqrqZaRnZyimaCls52aoZSdn6esraSwm62ro6OqobKtoamysKGZqKesrbOhkZShpZaZkHuqbJ6Eh3WreXywb4KljImflpaglYHSuLS4yYGBsl9glKmDpYiHoHqZlZp4qsl0maSVqKmRk5qNgZyKmsbGeWehgqV0gZ+Ogn2vXXC0YrB1S6OHbadHgpNkj5CekXxxmZWBcXx1fnxuXGZqc3FmgWtfYVlkblxfWUlNTUtFREFCPkE8Qj9KOzc5Nzk5Ojs7OzMuNjxBRklMTU9RU1daW1tbXV5fXl9fXlxcXFxcWE1CNzU2ODUvKSglJiUkJiksNEVOUFBNRktKVkYqTDAvPS01T1RRHRw7PEYyLCSnpMDGuK2osq2spaKcsrisqqGlmqekqauqpp+mppiqo5+uq52loKyanqmlnKe2nqKXk6mqtbKsm6WcoJSPpayRmpyno6Gqp66ipaeqsLXDsbOqrKiUipecpZuho66ll6GVmZympq2csZ6uqaefrKO2rKCxuK6dmq2msLGwopKWpqGYno2CnU54moF/n3qEo32DpIWHpp+dn5SEuHt7ebmCf8zGwrZ4m6GRi59+mpaXinafl4qlmKSpf7CFnYaghKx9mpVjpm2kcI+FkIF9loJyrGCjc3GAmmC8fVJVdI6So5Z7fpSTjXd7c4Z/cVxubnhyaoJvW2RgaW9jZF1LTFFUQUlIRkk6OUs+QjEwODg2Njg3Ny0qNT09P0JER0lMTlBUVllZWltcX19eXV9fXVpaWlhVU09IQDg4Mi4sKi4rKicnP1FUVldXV1lYWFdVT1VGPEUzOlBbVBwbNj9ILC0gi4eYqaukq7mqrp+boayys6WeoJWlra2uqqecpqebo6ihs66iqaayoJippJSjtqKilZeiqbS4o5uhnKKSj6GxmZ6cp6ahorCunaapo7azxbGtqaypkYeQnKidoqScpZeemZqapqWrm7Cir6WmmK+ku62htrWsnJyzsLavsKSWnK6eopyFj9G1w7d5h46FkZOQgKZ5lKF3jKCShKWBinGqhoW0bnJqmqSclYqffZiZhoePc6+CppyjjqaLk52LlpCbbnGyXaV0k3qcbJl/e5l8balho3Fxf59ic7K4aHePlKaYfY2OlY56fnmQg25qeWl6c2+BdV5lZW9uZmhgSltYWDxISEBVNEBGPjwqKDYzLjAxMykmNDo7PD0+QENFSUtOUFJUVldXWV1fX15eX19dW1taWFVSUlFGOjIyMy8vKysoQFFSVFVUU1RWV1dYWFdVVVZUUU9RW1UlITJBSCQpJZJyjIqtvr+8urSelqekrbWhopmUoqemrqqrmKajn6Whobano6insKOUq6OOpK2inZCamqqzs6ScpJyokZSWrp+fnqeknaidtpujq6S2rMSwqauooYyEjpyioKajlpmanZmcmaemp5mtqK+jpZuspr2slLyvrJ6hrrG3qbCkmaevoaaWeaiRfXywd4qApKWInG2ycKGHrXyhj4OolZiArImFrYWglaqgopeGn4GalYB7kn6rgJ2bloureJ2hkoqUkoF6r16kgX2mp2SdgHyXc2qvXaVrcIWZXWBbjKBtlZGmmYOWjpqOfHyEmYBrbn9jf3RugHpgaGZxb2loZ0NZYVs+S1UzVThCQkM3JCQzKycnMywgLzY2NzQzNTlAQ0ZJS01OUVJTU1ZaXV9hYGBhYV5dW1pYU1BPTkk3MDQyLiosQVRWVlZVVFVVVVVUVFVUVFRWV1dYVlVVUUhGSUojKCi9k5qDqMXCtsCznpqsoK23paOOm6SioLCvqp+loJ6tmZ65oaOroK+pma6hkKuoo5aJmpCusKymnqWbrJeXj6yhoZ2loJqlna6Yoqmnt6rBr6Spo56LgY6bmp+mnpKUmZuVm5qmpaabqqytpKWfqai+pJbCq6mhoKqwt6mrpJ6yraaol3WvfpCLnIWHfrqtipllsI1lla19oY+Ep5WagayKhLCFppqkoaKRhaFcbGqBs2B/rXt7g4GxbWdvmZmMiLFbfrVcpIRryKJkn4B7vFh2tFmyfVKugHqsWIChbpiPqJyMmJKamnx6kaB/ZHV/Y4Z4dYF9YmpncW5nZmVQVWRcQVVgPkkoPjk9NCEiLCUfMi4gKjEvMDQ1Nzk5PEFDRkhKTE5QUVJUV1peYGBgYGJeX1xbWFVQTkpGQzU1My4vQFVZWFdYV1hYV1dYV1ZXV1ZXWFdXWFlaWltcWFdXR0I70p+ysbe9urPBsqKcrKaktamgipqgnpyzs6mfpKGetpmgtKiqrJ6vrZ2sm5Wvp6GOiJuOr6uopqGlma6SmI+pmaKdpJ6Zo6OlmaGjqrOqva+kp56dj36Lm5ahoJiPkZqckpqYqaCjmqmuqKamoqWou56fxaajp5+ps7OqrKOduquqq5SAqZKjr46bgIekl5mQgoC4w7qDjpyThKeXnIKsioKviKecm6arkX/WvcKqYqO/vX1+o4KD17q4tYWVk4Oevb6EbaOCb6uEbJx/erKwx4Npq7C9rHh3or68c4CWjqedkZySmqB7g5OefGN+e2WPZ3qDfGFsZmtrY1FhW1NqXEBVYkNOKT06NC8fHyQfJTIgHSQoMDQ5NjY3Nzs+QUNGR0lLTU5OUVRXXWFcX19hXmBbXFlUUU1IQz89QT81PVNZWFhZWVpZWlpZWFdXWFlaWllZWFlbW11dXFpWWFRXWryVs7Owv7ixvLKinK6mpbKmnYuYpcCquLKoosCnqLOdn7Kduqifra+lp5SUsKuXjIObka6loqygo5yqoJeLo5KmnqabmqGpo5mgoqyuqrqtqKObl5N9iJmRppuSj5GYmY+YlKmboZmqqaGrp6CjqrqeqMOin62iqbKyqK2nnrilrKyZc3aqpbiGZImgcGiukYuRbm53pJCZn4F1rpmUcI+LcZWopJyYr6RzbW1sZot4b26CmXGBempxaWeKl5aYcWlphohncYZkXYhiam9ZXGZ9dqZfYXGOkW5lZH+Nk4+imZmak5mhfYmRmHdmiHhpj2x7gHplbWRnbWNLZFhKa1o6UWZFUidLOisjHCAbIywpGBsYLTIuNTo0NTc6PD9BQkRFSEtMTU9RU1ZcV1pcYGBhXV1bVFBMSEQ9OkFCN01YWlpZWVpZWFhZWFdXV1dZXV5eXVxcXF1eXV5dW1tVV16plKyzqbm4srOqqaGunqOzqpiSv7PFyr+3qp/Bra6koqisn7qjpK6rraaOl66pj4uFlZatnqWpoJ2ko6CRi6WSp5momZejq6GXnaamqLC7q6yam5KSfISWjaWYjZGRmZWOmJaplqCZqqOcsaadoqu5n6/ApqOxpKuur6irqaW1oqy2lYqhqKa3nYmWo5mIqpuRlZ2SqbOZmqOqoLKWoqGdn6KcoaWilaynjZOTjIeTnJ2VkZmTmZGPlYWBpZuYlo6LlJSMkIeEfmeJfnSCdXOHinCnbHqTkJOSgIGNj5CPnZWil5qZpYSJl5B0apF3cox4eH16am1lZHBlVWBZQGpcSGRiUFkrRj0rJyE3NTAuHxwhJTIoKjY5OTQ2OTs+P0FCREVKS0tNUFBRWFVXWV5gYWNdXlRRS0VDPjk9QEFTWFtcWVdYWFhYWFlYWFpaW1xeX19gXl5eX19gYGBfWVlgppaoqqS0tq6uobCjrZ+gtrGQjqzIvsa8uqujpp+dp5+xqaO2p52ptKaokZisoouHiY+cp5Wro5+Yp56ekpSjl6iap5mUpqKlkZunmaK2uqiqmJqPjHyBlIuhlIqVkZaRkJSYppCgm6qgnbajnaart6euwK2itaWura6qp6extp+supiRpaSmtqKSnqegjqqgjpOfo6uwmqCjsKiwl6OgnKOqnp6enJasnpOaopuUkJarmo6ZmZeRlp+RiKGelpWGko2RjpWLgX5li4V1hnV4h4JznGqFj5KTkIl9i5WSkpiUo5SfmaSFiZuKfXOXdHyMgHN8f2pvZV9xamBbYFpuZFFhZVFaOkdHRT4yPT45LyomKykmHSY0MTY2Njg6PT0/QUFDSUpHSktMTVNTVFVaYGBpYWVWUEtBQ0I6OUVNVlteXltaXFtbW1xdXV5fXV5fYGFiY2FhYWBiYmJkYlxbY5eVo6eir7GrrqOppqyfp7WqkI+dpbW9sK6to6SbfJ+ksqSlsamXm7mmo5OZqpyOhoqJnKOPrZ2ilaifoJKWmZuui6iVj6iaqo2ZqZCfubekpZmcjIh5gpSMm5OKlZKUkY2Sl6ONn5+pnp+4o3+Dr7Wirq50oruhsZ52d56or7iTdKujnomAq39kXGJ2oI+ln4SYfW2Ss5yjp62qo2Wen5JzeZqYcICYqZhtf6KoimWcpp2SmJiWjZKckIaem5GXhJKHj5CSiYV3ao6GdoZwe4V/f2Boh4mTkYtadZSQZ2iQj3N8qJycZnubioV5mWqGjIRveoBrcmVgd3Bsa2lcZmViYnFUWz5OTk5TRz5AVUQ6MS8eHyY0OjMwNjY3ODw7PkBBQUZIQkdGSUtNU1VVWV1gaGZnWFFKPERHPDhVUltgYWJgXl9fYGFhX1xdX19gYWFiY2RhYmFhZWRjaGReXWablaajoK6vrKuppaitoqetpJKWq7axs6ebq6itmHSNn7GgqKunlJe5oKCPnKSdkX+JiJuejKuZopWnoZ2OlpKehXWtj4inm6qSmKWKnLu0p6CZmIuJdXeTjZaTipORkZSNkJShj5yhp5mcspWAjJu0nLKMko66pZ99p6F5oKy1f42NpZ6Di4aQsKqvjYuXpJt6gYushZydoaeop4eVhZh3pZt6iJyAl6eCgXucs3qKhqGYmpWYloKRl5eEm5lje4eQhY+QkouDbXCOh3mAcH+AhH6Fc4WDlJF4lmiSdKCadX2ZhKOgiZh/lY2GhZprj46HbHl8cnFoZXlwamxrXGVsa2Z1XV5JVExSQEU2LlpVVTcpITA5Pj43NDM1Njg7Oj0+PkBEST9JRUpMR1NYW1lcYmFoZlpRSDlFTDs+YVZeYmRmZGBhYWBiYl9dYGFhYmJiY2ZnY2JhYGVkY2djYWFonJein6asrauorKCnsKamqaWZlK/Iv7Gil6iqt5+RhZ6tnKeioI6Qvp6ajJ+aoJB8ho+Yl4esnKKWn6CRjJOJhYCSp42Ho56klZmfh5+6sqedm5KOhXF2kImVkIqUkI+bjJCSoJKYoaSWnquHn7SJtJmtisqHqayItoWMr4Guq4KojKaYjZ19qI9ze3ecj6eXaJWkebSMn56mp5KYwoF/q4iYoXKegJqlfZeFlbOBoX2hlKGQmJeBj5Sci5mSi32Fk4eNlpKJg21zj4V+eXGGgIN7g3SEgJaAj8Vmf6mHj6NrnoWknYSagY6QiYyacY+Uhml5dnx4aGl2cmhobF5kcG1nbllnR11STTNFNTdOYmQ3JjM8RUdEOjY0NjU4Ozg+PT0/Qk0/TklKTENQWl1cV2FeaWxcUUU9S01ASmNYXWNmaGdiYmJiZGNgX2JhYmNjY2VpaWNiYmJlY2FmY2JiaZSWop+vp6iopaufpLewqaummpSgo6SspZimrLmksIGiqZ2mnp2JlL2Zk42hkp6PeYSXlpGHq5mbm5mhhI6Md5qcj5+QiJ6lnJeamYejua2kmpyMjH5ibY+Lk5CNkI2NmIyRk6CPlaGhmaGnfqGnh62dn5atj52cnJCEf6CMqKyFo42pmYyaf6J1gZmUa4Ktdk2reIeNnJGaqKaAqat9g6F7eqdqnn+Sa2eXhpi3iZ5+bmBkWYOXgI18ZGiLcpl9eZZsXX2XbV9ScINcX2t4gl9YZIF8g3+XcKeqa4OjbnKlcJ+FoGpnoG1ccI5+Z1pghIFjWFFwd2ZudXNranBea3FubGpZaU9dWUY5QTVIRF9sNSxJRFJNTj04NDg1OTs2QDs7PkJQPlFSTE1CSlxdX1ddXmJ1YE1EOk1PTlRiXFxmZmlpYmJkYmRkYmFiYGJkY2FjaWtkYmRkZ2RiZ2VhY2iXlZ2guKCpo6askaG1u6quopmYoaKlra+hnrC2pKmToqGgp5yajpm0mZCLn4yVi3WBlJKMiqaVlZmenn6ShYWspIebkIqZqpmbm5KIprGnoZWaiImAaW6Ih4uOjoqLjZKMkZOjjZSfn5yipH+TgY+ioJOfdpyVj6eBn6V+haeqgqV4iXyEmn6icHOUiJZ8n415bYabjJmPm6iZjoede4Kic3amZp5+d6RfmHp9lHSibpi3tLp0k4iDgLWoZIHGuHtwlbaMcoCao2NzrKtgfGmds35tfIaBjYKLmHF/o2xyo3SfhYGkYZ2ZtJdzfZifs3V0XJ6yg2tjcHV3cmlwWWxtc3NnXWpeYkxFPUQ2UUJaczM9U0dgSlI9PDM5NTo5NkQ7O0BKUD9VTU9RQEVfX1taWGBgfGRIQzhNV1VXYmFaZWZra2JiZWFkZGBhYmBkZF9gY2tuY2NkZGhkYmdmY2hok5WUo7eYqpuTn42kt7StraCaop2ko6avnZyzr62UmaKaoaWZm5Wfq5uLiJJ4i4VxgJaNiZChj5KUnZh9kImNqKGHl46JkqSVnJuNjKmopZ6Pl4eEfmp7h359kI2Di5GRiZCUoYOXnqCdn56LiXecmKGMn3Ghioeph5qkjpWlqHytjH56oJl6o5N4gXSWiI2cfZafhpuOmJulhaJkoXyIlpCbjW2eaJuOb5qZeoCLp31yaXSrg5+DdKpolZpdm4V2hZ5nqmuAuGZcqHCBnGCVjF6ndnWHiH6eaJp1hpOSl46An2+akW6nml6pf3m7a36qXI6EXbRoXW5yenhsalxxa3l6ZGFnWGJCUkZPN1dDUm81TFtbX05aREEyNTE8OjdIPzpDSFU+WVJZXT5EYl5WYFFhY31qRUI5TlteWWRmWGZnbm1iYmVfYWFfX2BgZWNeYmRvcWBkZWVrZWNpaGdraZWbiam0mqeIY5Sbq7qxr6yeppycqaCfr5yesqmun5ilm6GgmZeXoKOZhomNaoiAcnuXiIuWloSRlZiQeoqElaScipSPhoyfk56diZGpo6CajJKKgIBpgYZ5f5eMe4mOjoiQl5t/lKKen6GTmHJon4mejotwkoyBqYaYnaGlnqV7sK2joriXd6Ozo6SAiZR5nXurmX6ijpyaloiXcaF8hY2vtX1rmpGheX6YtaKkq6iEmXybfZ6bf3SqWl1ve5aLeJ5iTH97eoVjeZdCTJ9Yompxe45sgIiEmXWbeIaJsbN/gJuTp3eDnm50fpVwmnRrpF6VdkhlZGF0cn9/b2ZhbGl3fGVlYlFfV11VV0BaRlFoRVRXXWJYXklEPUI4P0I6SUY4TEVYQVdSW1ZERmJcWmBLYG1+ckVCPFVfYlplaVZnaG1vYmZnXmFhXF1eYGhiX2VjdmxdZWdma2RlbGlpa2mTnICwrZmEU16gprO5srKpmqKMnKycnKqVoq2lo6mQoJ+em5qWmaGdloiHiXeGgW95lYWRm4t8kZOWiHKAiJGhm3OQkIGJmpahm4WPqpyblYuLinyDbISFcYKhjHiGjYiIk5mWfJOkoJ6iiK2GfbWEjZ2ce6WWeqmAlJqPiZ6ae6dod21+mXShc3J8noaZcJODrn2kg6WdmYCjb16pZ3WiY2+lYZzTkH17mXhzc2KihpB+o3SkkHZrj7OMYIKYiXOqsqi8f3eDbX6/pqm0XZttfHCWbX9yonJdpGdzpmBopm2b1Jp+hptwe3uYbJx8eJhzbqmkZ2FlenKAhWxoZmRvdnhoYWNTXGZRUmJIWUpVYVdUXGZrXGVRRkNLTUpLQktFOE9AUU5YU1lPU1FgZmZqUmN3eXdJRkVjXWVaaGpUaWhqb2NqZ2BjX11dXV9oYmFpZXxkXmRnZGtkamxmaGxol5p/r6pUXEt+qa+xs6+yo5uZhZmpoKKlj6apoZqri5uZmZSZk5KhmI6HhXtwfYRofY+DlZuAd5GOj4lvf4WOkpJsl5N8iZKUpZeDj6ublJKLhol5g3aIgG6Cn4Z3gJOGiJmjmHuUoqOZn4mzoaK2i3qsp6SupXCpgJmOhYCZj3qkgKGZhphynoSkrq+Kl4yAjaSNlYOtoJN2tba1yaFzlIuBn2Cel6lteZaHoJt0ooh3oH6Tl4uBcE1mo5Jwm4dzpXt5dGGDgWt+oGtxZF+ccX1zlmh5abO1tMamc5h9ep1rnJurdoWbbnd5mGqae3aYc1FFfbNfandseohna2hjdXZxb1dfVFlpUFNoSVdNWVRWXmlsb1ZoV05LQUpNS0hKT0FRS1BlY2ptZXRyc395fG51iXt7VFFPbF5pXGtpUmpoaWxnbGZjZV9cXV1eaWJkaWt7X11kZ2NqZm9tZWlsZaGbiK6lg2Q/k6Gyqq6vtaKikICXqqKjpo2mqJ+ep4SbmJeOl5CPnJOOiIN6anmHZYONf5igeXWPiYyBaYSFkYKMhZ2NeY2Ml6aUhJmqmI2Ri4GJeoB9i3hwkKGGeoGVh4mWoJZ/lKSmm5WVg2ZueJxsomR7caV3m5hwZqaAlIl6pHqfloOXc553gYqVl4+5bpGKomJ9mKCViG5yaaprdaBtb6Zgm2mLkGmWh5uWdaKBfppgjIaNdXCIYmigZZ5+aZt1b2NmiIFtcaJZXlpioWxdiItuen1zcmSlbXiiZGenaJlzjJlwonBViZBvoF9mqFWLXlSYbm50a3ODbnFpbHl0a3BSWVdXZlpUbUlaUF1JWGlpc2pZbFdRUkZWXExYU2FVaWtfd3R7fXB8fHKDe4Bzdo2AhHZeUnJiZ2NwZ1BqaGhrbG5oZGdfXV5dYGpiaml2dV1cY2hjampzbGZrbWOco5eleWRzbYumraOpsLGmn4uAmKudn6eNo6KcpKOBlpmUjpqQi5iQjop7h3GAiGmLi3yYm3N1iX6Qe2SDh5SJipWZgnyIh5iokoGjrZGGkIuCiX6AgI5yaZCmhH2Hk42ImaCPiJOppZyIpniVm36kiJaLsZidkIKvl5+kdZOFeKlzpY+Emm6kooyShI2Du259pa+Dh4WGk5Wcn3ylenKolaCWZ55+b6xkloqWk3eobaqigYl2iYN3q5GmiGuRsGt2s4ypa4qFbW2fnpGUX32ri6p2fn6LpZ52n3yDpJWdoGqbiHisaJ+ujLZ0d76NpJNag6eOq2F2c3VyfHVxY2t/b2htVFdbVmFiXWtNXVJeSl5tb3dgW3FZXGBbZ3Rlbm9yY3J0YHd6fnlyeYNzhH+Be3uMgYOAdmJ4ZGNucmRSa2dob2xyamZpYWBeXGFrYm1sem9cXGJpYmxqd21nbG5ilaSpnIF/naOWqamdqKaupJmKgpismp+mipymnquehY2bkIeckYWSjYyNdId7iIRvjYV+mJN0dIZzkoJtf4uRh4aTjn17goeZp4+Ap6ePgY6JhZR2goeSbmyLqYGDjJSOiZ2fiYyUqaKfjn90k5eIfoF5lK6if4GacY+Gd46Jgn17cqeMcn59epiWm4SQeXt/foeUlZOKdpCYnqCDe32Ja4yFW3l5cnpxaW5+kolxgHWBj5STcYeEgmWMf1+AgIt3dXOUdW95bm2HbIOGXnVnd45lf4CEjKiafXR7lWqJiHCBdn2Hd25uaI10enyYeIVcbFh5j2lveHNycHh4cF1sh29qaFdbYFddZmtkVmNVX1JgcHl5bWt3Zmtra3d9cnJ1dGFvdmJ0e4J4dXqCdYCAgIF5i4WDfXtuf2xkeW5eV25naHVreGppamVcYFpjamVtcXRuW1tibGRsbHluaGtvYY2Tt6imiaCimqajmKWcq6KhhISYrZKeooqbqJuqmIOCnIx/lpSHjoqJjXKDfI99fo+Ee5iPdHKEcZWFe32Si4aGj4R5foCIm6WPfKiijIaQkIWVgoaOmHZyhKmGjpKdkImfnoiMm6aen6qDiI2Vmn5+iZatp4+SpY93b5uOgXiQbn6ohXF+lXFrcH2CoI2Ak46LaGxcgouLm5qejnOVi4hxdGuCd3SBWXJuh5GBfn+Mal1qZXuGhImAYGl4ept7gouCdYGFgWd3ioZqYG9xgHVecYmAiI6mlIVli42DbneLhHGGj3pxaGlmfIR7lltda2hudlx8enh2b3Rzg2hdbotsbGNaWl9bWWxxXF9hWl9eZnR/fHZwdWRra2t8fXN8eXVlbnVobXx+d3p8e3l6gIB+b4WJhHt9dH55c39oVFxxaWx2cHVna2hkXWFYa2hra3FybldbZW5sZ3N5b2hqbGCLiqmwoY+ioZqenZeemKijon6Dma6OoJWJnaORppWAfJiGfZKZiYmGh4pzfoGMdoWLgoSXinJvgHKYhoN+koOEhomAeoGEjZyhkYOoooh5jpeIlIqLnJeEg3qtgpGYmpWKnp2HiKGpnqGho4qHk5uco5mVqqGnpp+SmoaUi3p2jY2Dp35/k5CSlJ2yppuVn5CNsZKXg6WMjJWan4mQm4KIkYprfI53eGWDhpGLfImehIeMkImJgYWEkHd8enSaoImGip2JhJN+fYqAf3RucoSBfXaFhYmOpZCChYyGgoyQjH2IjIqRhHpuhIV+eplrc2lhdItxfnt4d3B4dYJdXm+IaW9gX1pdXVNoclZkXV1ibWh2fH10b3Bla2ppf31ueYByanBxbGeBe3KCgHh/fX+Eem2CjIZ8enh7fXqDeE5jdmpzbnB6ZWtlY2JgW3RmcGdycW1VXWx0bWh5enFnaWtljIecuZ6WoaCYlJiZlJikoZ98f5qsj5+OhqCdjJ6WfXmVhHyOmYqGg4SHbnmBgXOBiH6JlIRta356l4eDg49+gIeEhXyHhY+cn5OIrKCEc4qQhpKRi52RfY17qoSOk5iWj5yXh4ebpJ6hmZyFgpKamZiPmaafpJybj5V/jod0eoaNhKV7fI6QkYaZq6KelJ2QjqmNkICdjIiTmZ6Cj5d+h46Db3iGcnVgf4SQhnSMmYGDj4OHhX+FhJVueXZ0kqKKjIWahISMc3+JfHtxcXqGgnp3iI2DkaaPhYOOgIOKiYp3homLjX5ybYCCfW9pbG5oXnqAaX59d3Z3dnt4XWBxfm51YGNbXV9SZ25VZlteYmtpdnp/cmxtZGtqaIF/bHSCbGx1cHpwhnluh4B2goB+hXZxgo2Ifnt8fH97gopgaHtqdWlpgmRqY2BpXGN1aG9idW1sVWNxeWVwentzZWptbYuJnraZoKOfkpGVmIuan5+fe3ifp5Gci4ellYyZmXp7jYZ9iZGEjIKCg258gHlzgYV+i5J9a2h9gpeJgYiNe32GhIZ8j4KQnZ2TiamdgXGLi4yShqChioWMfKiRiZCSl5OWk3iMop6fnZWYfoCQmpiSi5mioKOYlZCZfIuCd3+Cjoagf36MjI98mKWiopOakZCmjI+BmpCJkpabfpOSfoeOgXV0gnF3YX6BjoZxi5d9iYxyjH+ChYaPaHhyeIyYkY9/ln6IiXKBhnt7b3d6ioN5eI+LgpWkk4qFj3uGhoeEdoOEiYl9aHN+gXp8cm1saF9+dGl9dnZ0fXOBa19gdHZwd2RjWV9fUmtpVmZaYGFpanZ5gnJnbGRsaGaAgWtufmhvcWx/eYd6bIyBc4GBfoF0doKNhn98e3+BfX+PaXKDbnRpYYdobGJfcVZ0b2xtYHhobVdqdHZjdXp7cmJqb3qJjJ6xkaWknI6Pl4+GnKCbnnx3paGOmICNo4uJmpZ5fIaIf4OJf4mCgX9yf3t0doOFfouReGdjfYaXioKKi3h8gI2DeZaClpmYjpehm39wjIKRk4alm4eMiYOmloWTi5aXk5J2kZ2foJeTlnl+jpeXjZaanKOcl5GTmXeNg4F2g5aNnX6BiY2Mc5ejn6KUmY+PooyKgpaXg5KVmX6YjXyIjYF2cX5ue2SAfIuFcIeTgJGCbIiDgYCJhWZ1b3uFkZiLfJN4i4h7f4Z7enB9d4iFeIOPh4qXoZWBg4t2iISDgnd8g4qGeGF6en91gHlobWZif2preHR0d35yfWNkYXNudXJtYVphXlttZVNkWWFhaWt1eYZyY2tjbWZofYJsaXVobnBqgH2DeW2QhnKAg4N+dHyDjIF/fnqCg358kG12iXN1bWWKbGpiYnVWhGlwbmB4Z2xianZwZnl8enFgcmyGhY+brZemp56NjJeHhp+Tl5l+eKqdi5l6l52MjJmQeXyBjH58hHyBg4F4dHl6dH2AhICJi4BkX32LlId/hIZ0fH6Lf32YhpeVmI2kopiAc4d7k5GJpo+MjoqToJKEkpCUl5GLgY+XnpqRj5Byf42Rk4icnJ6ll5aLk5Vxi4uJa4SXj5l6h4iPiW+XnpuklJaLjJ6LhoGRnH+SkpWGmYh7ioqBeXJ6bHVsfH+Lfm2Fk4OVd3CDhH5+i4Blcml7f5aXg36NdJCHgniGfXR2fnyEgHuBi4KLk6OPeIOBdImHfYB0doKJhXFifHZ7cn5wY3BkZXxjb3B3c3l4dHVidmBwbHZub1xcYF5ea15RXlljYWludHuKbGBqZWtjaHeHbmdtaWttaYJ9e3dvkIhzgISEfXSBhol7g316gYR9fY5yeot4eG1sh2poX2lyY4dncW9ld2dubGF5aWt9e3hwYXhti4CYmKmfpKidioqShoqdi5WZfnivmY2XfZ+UkZeUiHd+fIp9fIB3eICAcHV0fG+GfYGBin98YVx+j5GGgIOCcnqAh3qPkomTkp2Tpp2Vgn2BfY6KkaOJjoqNmJqNhpKZlJaOioiMkZuSjoyMbYSQj5GInpmioJaUiJWPbIaXgmWEmI6TeomEkIpwlpuVo5STiYuZjIF/kJ59ko6SjJmOe4qFh3NzdmxxbnV8inRvh5GPk3F1gXyBgYh8ZXBseXyZk3yDiHSQiYBzh3huf3yAhXuEioaBi5SnjHqGe36LhXh+cXCBh4VmaXp1dnF8Y19xYWt0X3Fre3p5bHNxZXleb2xzbXJYW19gYmxbUFhZZWNocnJ/iGddamlnYmdxjW9kamhlaWmBend1b46FdIGCg3t1goiFeIV8eISFen+Jd3+Le3tyeINqa19waHSAa3JvbXJnb2xlfGNugHp2cWx3d4p+opehp6Cmm4eLi4GPnIeTnXaCq5WTjoehjZaUkIB0fHeFeHl/cnN7hmtzcHpui3aAgYdvcFtZfpGNh4B/f3V0gYCAoIeSi5SemKKVmHmKf4GNiJydio+GkpiWhYmVmpCXjIyNjYubiY2Pgm2Ji5CQiZyWoZuXlISWhmiCoYFlhJyJkH6Lg4uBd5OZk6CTkomJlI1+fY6Xe5GMj46aknyKgIJvdnBsbW9we4ZpdISPmYtxd4F1goiDeWZybnWAmY57h4R5k5B5dYdzb4h6hIp5ioSAho2bood7g3WCi394eW5sgYWDX3R1dHJyeVtfcWFwa19wa358cW5ua212YXBva3FtWVliYWJvWFFUW2ZnY3VwhYNjXWttZGJma5JuYGdnX2hrgXVyc3CLgHV/g4B5doCLgHiFf3iIhneDhXyGi397dop/anFjfGOGfG5xbXRqaG9sdnhfcX95fHR1dICDfqSVmq2ep5aFjYR/l5SDkKB2jKCUk4aLm42Wjot6cnl1gnByhXRxdohscG52bYh2g36AbW1VUYGqlIaCd392cYN6g6GDk4KVlJmdk5t4kXuDjJKjmZOOiZWZkoSHl5mMlIuJjo+GnIOPiXtyi4WKjoecmp+alJN+knxmg5qFZoWfh5GEkYKJcYORmJCcj5CNjI+Md3uRkHqOi4ySlox8iHyAa3dqbmtsbHt/YXp+j5eCd3uCeIOMfXlnc2xzhpWLfYeFepOPcXmDb3WLeYiKeYh7gIqOnZyEe3p2got8d3FqbIKEe2F5cW9uc3RWX3BicmJgbW96cWlwZmdzdWlybGJ3ZV1XZmFhc1RRT11nZV55cIl9YF1pcmJiZmaRal9oZVtncH5wbHF0in12fIaAdXZ+jHl7hYF4iINzhoV+jIyEfHmVeGZyaoNgiH5vb2t6YGpudH91X3R9eYd4dHOFfXigj5mxnKWOgot/g5qIgIyfgIualI+FiJiOj4+Ed3R3dIBxb4V0cHKEcGtpd26Dbn19bXRyUk2C38iS1pN7cHWEdoWhhJR4l5KZnZGZe5RzhZCeoZOUkYqTnJSGf5eWiI2Nh5GMh5t+jYB3eox+iYyKnJucmpOReIx0ZYaPhWuHooSRiJaDhmOMkZmPlouXjIyKinF6lIh7joiKk5GJeYV8f218ZXNva2x6eluBeZCQgXp+f4CGjnt7aXNqc4qPiYGFhHyUimt9fm1/in2KhXyEeICNk5mYiXx1d4OPeHJtZ3GAhW5sdXBpa3ZvU19wZXBaYG1zeWhsa2NneHJwcWRgeGFgVmxfX3dRTkxiZ2NdenKKdl5dZXZhYmVljmRhZ2JZaXNzbmtxdox8dHqGgnV2fYtzf4Z/e4l/comIgZGLiHx+mHZlc258ZYh+b3BsgFlsbnl5c2B2enuNdnJ3ind5noubrpqgkIKFd4iVfnyKnoiGoJKPhYyYhJOPh4F0eHB5cW+EcG1vf3NlZXlxfW15fWpna2OkmsHcrvChc2x2hXeGpIaTb5iSlqKWnIGScoaLopeIjpaLkJ2Wg4GWkIWJj4CQiYiVfYZ6dH+Jd4eEjpyamJiNjnWJdWyEh4l8iaKDkYmchIVei5OYi5CJj4uLhIlte5aBfYiFiZGPhnaFfX5rfWR4dmpueXNYiXuSiIV6foGBhox/eWZyaX+JjYmCgX6LlYRrgXVtho+BjoJ9gXh+jpSRl490cneHjHVzcWd2eoRjdW5xY2t4aFJhcmhsVmBvdXphcmRgaX1wc29bZHJhYlduW115T01MZWdiXnd0im5dXWR5Xl9lZYVgY2NfWWpza25rc3eMfXR3hIF4d3uJcYOEfX6Ie3SLiYiWhox/fpdzZ3VyeWyMe250cYFXcXp2eXJkd3mGjGl2gIlyf5yGmKebo5KEfXGMlHd5jJ6FhaGNj3yWjYCaiIR7c3dwdGpwgmxqbXx1X2F4d3txdXtnYGR869q1ycPch3NsdIJ3i5yKj2uakZCelpSBiXGFiJ+NhIuWi4yYlHyNk4iDiZB7j4uFjoB/dXiDhHKIgpOclpSXhIt1hn1ugoCHhpihgpOMnoOJYYOUj4eKhoqOh4GHaXyTf32DhImOjYJxhn5/cXdodnNqdHdsWo19k4OFfYCEgYSKgnZhcmuHgY6JgX5+kZB9bYFrd4WOhJCBe4B7fY+RjpSIbXB5jIV0a3Fsc3mCYXVqcF5teGFSZXNpZlNgcXd1YXBgXWiDcXRrWGhpY2lZbldcdk1LTGZnXmJzdIZrXFxleV5eZGd7YWRfXVlrb2ZvanR4in5zc4F+e3Z6iHSFg3x/h3Z3ioaPmYGMgnuTdWx3dnl4k3RueHt9WHmGcX9vZ3h3koJkdoaFcIqWhZmhmqKKiHRvkoxxd4+cfouaiYl9oH+EmoCBeHJ0bm9kcn9pZm14eFxgeXt7cXGAamFnYX/Vto6RpnhvcXh9cZSSjohrm5CKnZOMhntph4uZhoGSkYaHmI58jY2BgYmNe4+MfYiEenN6g3pwhoCWmo6Tk4CHdIKEdIF9iJCbnoaVj59+iGKAk4eFiYWLjYCAg2d8kIB+f4KMj5B+bYN8gnRsbXd1dHd2bGOOgY+AhX59hn+EiX9wX3FvhHuOi4F7fpCIeXCDZXmBiIWKgHqEfH6SjY+Rgm1ueYt+dW1ua2x7f2RpbGtab3haU2pzaWJRY3N4bWNmXlprhG50YlxoX2VtYG9VXHBPSE9nZlxob3GAbltcY3NgXGNsd2VlXV1abG1jbWpzd4Z/cnGAfH10eIZ4hYJ9gIh1eYmBk5V8iYZ2iIFweHl7hJNvbnuBd16DgHSBbWl6dJRzZ3OIfHGSkYOZn5ughoh2dpR/bXeUmH+IkISLjpp9jJp3fnZycGxqYXV9Z2JqdXpbYHh8emxwf2VjZ2dXnY9fcXOWvcWFd3KVi5GAdJmNh52UjYhza4iPlYB7lIuBhJuMfIqGfXyJjH6Th3SHhXZ2fYFxdYaBnpWGlI6BgXF+hnOCeYeVm5aGk42dgIhmfpODgYaEiolygX1nfYt7eX9/h4uPfWmAfIN2ZnB5eHN3dGxrj4aLgot/eYOBhISAa15wdnp9i4eEe4COf35ygGh4gYWJhIF3gnt/lYqOi3xta3qJfHZ0b2lofndlXXJkWXF1VFRvc2liTmh1eWdhXl1Zb4FwdFplY15rbmFxUFpsUkRUaGJabG9te3BaW15tY1pjb3dkZ1xdYGtqY2xpc3eBg3Jvfnt/dHWDeoOCfIKGdn6JgZaReIOKdIGIc3l5fo2Qb297gXFqgnl6fm5tfHaVa2p4hHRrk4yFnpigmYWIb36Mdmp5mY+AgoqClpiKeY+Wb3pzcWxqZGB0e2lgZnJ7W2FyfXpmcHphZWSOsbJ3S2JapdrSmHN8ko2Ren+XjIWako2Gb2yFkpF5eZOGgISZinyHgHl4iYqDlX9uiYZxc317anmGg6WRhJKMgn5ufYF0gXaDmZeSipOPlIWIcHuThH6Eg4mDb4F4aICFeHJ/f4OKh3xlfH6DdWNxc4BpeXFvdZmNhoSLfHd5gIR6gmtcb3xyf4eDiH2Fh3qIcYBtcIKFjIKCcYN3f5aKjIN3bWx+hH92emVoan5yYVp4W1pzb09YcnRnYEtud3ZiXlxbWXV+c3BYZ15ma3Jfb09YaVM/WWdfW3FrZ3lyXFtZbGVaY3B5X2hdXmVsaGZsaXJ4f4dwboB9gXZwgnuAgX+Df3aBhYmXinGCjXF7hnx6eYSUjHVren9scH51f31vcnx7k3BvgX95ZpKKgqGYnZGDhmeHhHBnepeKf4CFgpqKgXyNjWl4cmxsZl9hb3ltYGNveVxkbIN6YXF2X2Rl1eu+izM6PouPgHJ5hoqQjniGmY5/lI6Nf25thYyLdX2Pf4WClYl8g3hudoeEgpV2bYeEa3V7dWV5g4SnjIOOi4J8bH5ydIF4g5qPio+Rko2Mh397koh5gIWOg2yAcmmAf3htfHyBioN4YnmEgnJkcWl/bnVydYKcjIGAhn90dn6Ac4FwW2t8c3iIgYp7hn98iHd5cGuHg4+CiHCAd32TiYp9c21qdoCAdXVdaWl5cVpXflRbcmZNW3NyZlxKcnlxXVtbWl52gHZpWmJbaGZvY2pOWGdSPl5mXV52Zl91cVtZVW9kWmVxeVtoXmBnbWhqa2lweH6ObWqChIB5boF7fYF/gnp1goGMk4VwgItud32Ae3uIk4mAaXt9a3R8coZ7c3Z9fox6eIR+fGuMjISbnZaMgoFtjX5saX+Pjnx+f4OUgn99iohrdXFnaWNbY2dzb2BhbHRhaHCJemFzdF5iY5ugkG5dNluwtnVqgIl+lId4iJmHdZCMindwbYWChnR5iXiJfZOIen9zZ3aIfXyWbm+FfWh2eW5leomFpYeAhoyJfW19dH1/e4qXhoCTkJiJi4WKfJCKcXx+hnxpfm1rgHt5anp3goeBcmB3gn5yZHJndoNudXuGlZKCfYKAcHd6fHV/bVdtfXVziYCFdoZ0gol6d3JtiICOf4NxfXt8kIeHeW5taG2CgXVuXWhndXJSXH1PXXJdT1xzcGRWS3R5a1hZWVpicoF2YV5dYWdkaWpmT1ppTkFiZFxgd2FddW5YWFN1Yltlb3NYal9iaGtnbWxpcHd8k2xohIp9fHB/fnuBf4J6d4CAiYuEcnuHb3F3hH97iY2PhGp+e254eXaKd314f4GHf4R+fnpthIyImKONhYR8dot6a22FiZN6fXuCkoCAfoqEcHJwY2ZeWWdfcHBgYWhwZmpviXRhdG9bYGRqdnt/v52opcm4coWEdJV+eomVhHSSjodyc3CEeoJzdYZ0iHeUiXl5cWR3hnl/kmhxg3Vmd3ZkanyEiJ6Cf36OjXxxfXKCd36QjoJ2lY2UkIiCiHuJimx5eoB1aHtpbH95c2l6doCDfWhgd4h9a2p0aHuAanaBjZGVf3x+fnF8d3x0f2JVdXtxcoeCgXuBcIaJd3hvb4KCi318d3x6c4yEgHVocGdsiIFycF1oY3RvTGZ3TV9vVlRadG5iUU91eWJSWFhdYnGDdFxiXWllZWNrZFJccUlEZWJcZHFeXXhoVldWeF5cZm5pVmxeYWpnZW9uaHB3epNuaYiMeX1ze355goGCfHZ9g4iGg3B2g3Nud4KCfoiLlH9xgHx4enqBi3WDeH6AgYKEeoB1b32Ki5ueiH6Ge3eGfGh1h42Sen+AfImGhHaPgGdwbmBlXFhmWW1zYWFhcWxsaIluYHNpWF5jbYB3qdqpyIeIs3KKeXGPdn2JkYF7lIuAdXR1fnZ/b3B/bYV0lIZ4dWxgeYB4h41lcYJuZ3VuW219gZCTgIB4kpF8d3pshXN+j4qDcpWKkY+IhoZ7f4ZtdXd/bWh3ZW18dm1rd3d/f3xgYniGemh1dmN+e2h1ho+Oln11gHZygHt9bYBaVXF8b3OBhX1/d2uIhnN4anR/g4J8eXt3enGJf3tyZ3NkbYuEbHNbamB2Zklvb01cY1hXVnltYlBTdXdZUVZYXmFyhXBdYWNtZWNeb2NVXnNHQ2dgXmdpXVp7Y1JWXXZbW2dsYlZrYGBuZmZscGhwdniPdGuOjXZ/dnh9d4GDgXt0fYOIiINvcX91cXV9hYGJjYt7d394hHx9hYd4iHx9gX2EgHt+cnZ4i46fjIl7ind1g3pefoeajXqHhHSGh4V3iXtibm1cYltbYVVqdGRgW2hvcGeHcWFxZldcY2t/fMrOh7qia25vi25yhXN+hox/e5OFenl0enV0empsdmOEdpKCdm9nX3yAeIqHZHGAampxY1hte4aciYOBcpeTdn16bYZvf4iKhnCWjpCIhoyEe3l/cnJwfmdocmNueHFqbHJ4fXx5XWV6gHhpdXlngndodYeMjpV9c4dqb36AeG59XVdvfGxzfoh6gG5uin9wdmZ2f4B+gHV6b3lyhXp4cWVyYG2MgWtyWGtfeV1JcGxPWFZfVVZ8a2JPVHZzUlJUV15jdYZqXWFra2ZjWm9iWWNxSEFpXWFnX1xVe15PVmZxWltqaF1YaGFfcmZqaHFncXN2h3lulYp1f3t4fnmDh4B1c3+FhY6DcHB7eHd1eYaFh4yGenx/dYt/fYaDhId/fn59hn98eHZ5dpKUn36NfYtudYB6ZISImIZ0kopvhYaCeoN1Y25qWV9bXV1VaHNlYFlkcnJngXJha2RXWl9pf3i+rnugt25idIdpdX1ze4WIe36NgHd4c3dvenZlam9hh3WOgXNqYl59d3iKgmVwfWdra1tWb3iLpIGFf3CZknF/dnOAbH6Aj4ZylIiNiIWJhX15dXNwaXpham1hbXZqZ2treXd6d1tnfXx5ZnJ+boV0ZnWGjYaWgHCLZ2t7gnRtdWJbbXpqc3qJeoBldIZ8bXBndH53fX5wemp5eX94dm9kbGFsiX1sblZqYXhWTGxtUFNQaU5ZfWhiT1V2bE1RVFVfaHeEZ15hcWlnYVdpXV1sakpFbFtiZVdZVHlaTldva1ldbGVcWmVjXnRmbGVxZ3NwdIF4cJmFdn9/eH98hYd9dXOCh3+Vg25zeXt7c3KFhoiJhHmBfXaPf32FiY6EgYN6fouDe3d8d3aanZh6ioOHanZ+fW2FhZWBc4+CcYaCf4KAcGZsZ1ddW1xbU2VwZV9YY3J1aXZwZGViV1tbaH9wb3KAc4plZnp/anZ3dXWFhniChXp3dHZua3pwYWhrZ4Z0jYRuZ15ffG55iHxnbHdmamRWV3Nwjqd9hHt2lpB0e3F6eGx5eo+DdZd8iIaEh4R9dXFzbWh1XW1pYG11ZGdnaXpve3NZZ4F2dWhwgXiCdmJ3hYt9lYJvjGtte4FxZXNlYGp3ZnB1iHl8YXWDdmprcXR6cHl3cntlfX19dnVtY2VgbIZ8bWtWamNyVExrbFBNT3BHXnxmYU5WdWVLTlRYYWx4f2ZeZ3NqZWBXZFhjcl5MTGxYZGJVVFVzV01Zd2VaX2xhXFtkZV93Z21ib2p0b3F+dXSZgXh/gHiAfoaEen12goN+mIVucnR8e3VxhYWPgoF6i3V0kYB8gZWOgYWEfH6Mhnp+gXZ7o6aKeYmGhWx1fHx1hIONe2+GdHqFfYKDdW5qaWVWXVtbWlNjbmVcWWJ0e2pobWhgYVddWmmAaWtwgGhtYml7emt1dXVwh4J6gX53dm57aGp5al9lbmiBd5CEZ2VYYXZpfYZ5bmlvZmZdVVhvaI+od4F7fJCOeHRufW1xdHiNfneUdIaDgIaJdmp0d2hpb1xtZV5uc19nYmp4aHttW22Dc3Rqb4F+endhd4WFepGGc4hycHp/cmNxaFttdWRucYZ6d2FzgHBoanh0cWt3dnN1YoJ5fXV0b2NiYmx9fGtrVWliZ1RMbmlQSFJsRWF5ZmJOVHJeSk1VWmZteHtmX21xamRdVmBWcG9XSlRpWGdeWE5WbFRLXXpgXF9sXV1bYmVgemhsYW5wdm5vd3V6mH13gIF5gICHhnp5eoN9gZOEcXR0f3p2dIWIkH6BfZFsc5WBe4KfhX+HfYB+hoKAint1hKyff3qIiIRscoJ6doGAgnVviG99gHSKgGpvbmVkWF9aWlpVYmpnXFpfdYJpXm1sXGFWWltrgWVydH1qal5teHdodXhzb4d8fn56dnNsemhpd2ddZHNneneSgGNjVGRvZoGEdXZmaGlhV1ZZaGSQqG9/d3+Kjnpwbntmd215inp2jnGEfn+Ah25kd3RlaGldbGJecG9baF9tdWV6aF10gG5ya3F7f3Z1YnWGjHyJiIB/eHJ1fnRhcGxYcHFhbm+CenNjcYBsYW17cGpneXdzcGSEdHh4dG9jYGNtc31qbFRpXl9VTHVkUUhXYkdjd2ZiTFRxWUtMWFlpbHd7ZWVucmZjWlheWXdmVEldZFhpWVlJV2VRSWN5W15fbVteXWJkXn9pamBudHhtb252g5d5coGAfX+JjIZ+dXaGeIaMfXR1dYJ5enqCi419f4WJanSWgXuKnX1+hXmAe358holzcY+ujHx8h5B+ZnGIenR+fXdzcIZtfH5tkHpjcHBiZV1lVlpZV2Nma2BdXXSGaFlwbVteV1lbbHticXd2bWNcbnR1aHZ3cm+GeX+Bendvb3RlaHRlW2d1ZnZ2kXlfXVNlZWqBgXN8YWJpXFRYXmNkkKVpeXSChZB3bG14Zndse4N5dIdygXl9eYBpZndtYWdhX2tgXnVrWWZdb29iemVbd3xrbm9weHl0dWVzg5OAiYOJenZvcn1yYXhjWW5uYG9wf3pzZXGAZF9udmpjZnh6cmxtgXNxe3FwYV1kbW99ZWlUaFlaVU56YFJLWllIY3VkYUpVblVKTFpXam1ze2RsbHRjYVlaXGJ3XFRLZF5ZalRXSFlhTkhrd1lfYW5bW19iY12FaWhibnh5bW9qdoGQeW6DfoCCkoiEgXZ1iXSLhnRxdnaBd319foyPgX+TfnB4loN9mZJ5gIB4eX5/c4eEc3CZont7f4mWeWV1iHpzeXdsdHB/bHl8cJJzXnBvYWdibFRbWldpZG1mXFxyiWVTcm1bWVhXYGx2Y2p1ampfW250cm11dHVrh31/gXx3b25sZGlwY1trcmR0do5zXFdUZGBxfn5wgFxhY15TWmFcZJOfZXJxhYOQc2tpeGtubnl5enGAdn9ze3p7ZGZ2aF5jW2FoXF93aFdiX3BoYXdhW3x2ampybnh0dHRpcYKWhId/hXZzanB8bWZ3V1tpbGFvcX94c2VvflthcXFiX2lvfGtqcn1wb3ZqcGBaZGtte2FnVGdVWFNReF1TUFlSSGR0YmFHVmxRSVBaVmxsbHxlbW9yYVtaWFptcVhTUGdYV2pUVUZaXU9Jc3ZZYGNuY1hhYWFejGpjZW16eWxvaXZ5hntrhH2AhZl8goR5fYhtj4Zxb3Z6fXSCgn2Lj4ODl3R4gpSFgZ+JdYGAgXR/gnCHg3Zvopd0e4aMh3tmd4tvbnxwZ3hxe2xzdnONa150b2JnZmtTXlxWaGJsbFtccYxkTm9tXFZXVWZpc2hjdGVlXlpwdm9xdnZ6bIh9f32Id5BzY2Rrb2Fcbm1jc3iHa1pUVmJjd3t8b4RcY15jVFtgWmOXlWNucIKFiXJpZnhtZHJ1cXpreXR1b3t/dl9nc2RcX1diZFlidWVVYGFtZGFxXV1+b2hpc3F0cXV2bG2FlIOKfIVxcmdufG9xb1JaZWlkcHJ/dHNibXVVY3JrXF5uZHtka3V8cHFxaW1fWGNpanheZlVkVVdRVm9YUldUUEhlc2BiRlhrT0lZVVduaWV8aWx5a2JXXFZcdWVUU1dpUlpnVVRJW1pQTnl3W19lbWpaYmFeXo9uYmdsenZub2l2dn9+bYSAfoaXe3+HgYp/a5OIcmd0gHt2gIN+iY5/jJNzfYqRhYefhnt/hoxzgIZzfYJ1bqSMc4KNjHd4bnqNYGV9cWd6dHltbXF3g2dkfG1jZ2doU2BfVWdgbG9cXm6OaE5qbGBVVlNvZ3NrZnhlZl5acnZuc3x5dG6Je4B3nHt6a2FlbG1eYG5qZXF5fmdaVlhfbHh6em6CXmFdaFZYYFhknIhia3CBhnx2a2l1a1t1cGp5aXVybm98gXNZa25gWV5WY2RZZXFjVF9iaWFibFpgfmtmbHR1b214dmxoho2AinuIbXFmcHtscWxhWF9nZm5yf3JyXmlsU2ZxZVZibWF4YW90enRpbmtqX1dgZmh1XGRWYlZUT1lnU09dT1BIZXBdY0daak5KYExZbWVgeGlvgGVgVV5UXnZcVVNhZ09eY1VUS11aUVp2dl1fZm1oWGNhW16OcWNoanhyc21ndnN5g3OCg3uIjn58ioiOem6QinRsc4J0f3+IhYeShJWPen2Mj4iRm4SAfI2Ecn+Bc3R3cW6Tk5OTk5OTk5OTkpKSkpKSkpKSkpKSk5OTkpKSkpKSkpKSkpKSkZGRkJCPj4+Pj4+Ojo6Pj46OjY2Njo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo2NjYyMjI2NjY2Njo6Ojo6OjY6OjY2Ojo6Oj4+Pjo2NjY2Oj4+Pj4+PjoKAfnp6fX5+fX1/fn59fn5+fn5+fn+Af4CAgIGAgIB/gIGBgYOHjI6Ojo6NjY2NjY2NjY2NjZKSkpOTkpKSkpKSkpKSkpGRkZGSkpKSkpKSkpKSkpKSkpKSkpGRkZCQkI+Pjo6Ojo6NjY6Ojo2NjY2Njo6Njo6OjY2NjY2Njo6Ojo6Ojo6NjYyMjY2MjIyNjY2Njo6Ojo6NjY2NjY2Njo6Ojo6OjY2NjY2Ojo6Ojo+Ogn99ent8fn59fX5+fn5+fn5+fn5+f4B/gICAgICAgH+BgYCBg4aMjY6NjY2NjY2NjIyMjIyMkpKSkpKSkpKSkpKSkpKSkZKSkpKSk5KSkpKRkZGRkZKSkpGRkZGQkJCQj4+Ojo6OjY2NjY2Njo6Ojo6OjY2NjY2NjY2NjY2NjY6Pj4+Pjo6NjIyMjIyMjIyNjY2NjY2NjY2NjY2NjY2Njo6Ojo2NjY2NjY2NjY6Ojo6Cf3x6fHx9fn19fn19fX59fn5+fn5+gH9/gICBgYGAf4CAgICDhouOjo2NjY2NjIyMjIyMjIySk5OTk5KTk5KSkpKSkZGSkpKSkpKSkpGRkZGRkZGRkJCQkJGRkZCQkJCPj46Pjo6Ojo6Ojo6Ojo6Ojo2NjY2NjY2NjY2NjY2NjY6Pjo6Ojo6MjIyMjIyMjIyMjY2NjY2NjY2NjY2NjY2Njo6NjY2MjIyNjY2Njo6OjoN/fHp8e31+fH1+fXx9fn59fn5+fn5/f3+BgYGAgICAgYCAgIOGi42NjY2NjIyMjIyMjIyMjJFtZmdnZ2dnfYWEhISEiF0tMDAwMC1GoaGhoaGhoJqZmpqampqKg4SEhIOEd2VnZmZmaFxDRERERENHZGhnZ2dnZZCioKCgoKVeKi4uLi4rSIWDg4ODg4OLjIyMjIyMjY2NjYyMjY2NjY2NjY2NjIyMjIyNjY2NjY2OhX19e3t6fX58fH59fX1+fX1+fn5+fn9/f4GBgYCAgICBgICAgoWKjI2MjIyMjIyMjIyMjIyMkWdfYGBgX155g4KCgoKGUxgdHR0dGTekpKSkpKSjnJycnJycnImBgoKBgYJyXV9fX19hUjQ1NTU1NDlcYF9fX19dkaakpKSkqlYVHBwcHBg7g4GBgYGAgYqLi4yMjIyMjIyMjIyMjIyMjY2NjY2MjIyMjIyMjY2NjY2GfH16enp8fXt8fn1+fX59fX5+fn5/f3+AgYCBgYGAgIGBgYGChYqNjYyMjIyMjIyMjIuLi4uRjo2NjY2NjY+QkJCQkJCMh4eHh4eGiZOTkpKSkpKRkZGRkZGRj46Ojo2NjYuJiYmJiYmIhYaFhYWFhoiJiImJiYmNj4+Pj4+PiIKDg4KDgoWKioqKioqKi4uLi4uLi4uLjIyLi4yMjIyMjI2NjIyMjIyMjIyMjY2Njoh8f3l7enx8e319fX18fX19fX5+fn9/f4CBgYGBgYGAgYCAgYKFioyMjIyMjIyMjIuLi4uLi5GSkpKSko2QkpGJh46KkJKTkYuPioqQiY+RkZGRkJCQkJCPj4+Pj4+Ojo6Njo6Ojo2Njo2Njo6Ojo6NjY2Njo6Ojo2MjIyMjIyNjo6NjY2NjIuLi4uLiouLi4uLi4uLi4uLi4uLjIyMjIyMjIyMjIyMjIyMjIyNjY2NiX59eHh5fH18fX19fHx9fX59fn5+f3+AgICBgYGBgYCBgIGCgoSKjIyMjIyMjIyLi4uLi4qLkJCRkZGPhI6QkIaKj4WNkJCLhYeGi4qFiJCQkJCQkJCQkI+Pj4+Ojo6NjY2NjYyMjIyMjIyMjIyMjIyMjIyMjI2NjIyMjIyMjIyMi4uLi4uLi4uLi4qKiouLi4uLi4uLi4uLi4uLi4yMjIyMjIyMjIyMjIyMjIyMjI2Lfnx3dnh7fXx7fX18fH19fn5+fn5/f4CAgIGBgYGBgIGAgIGChIqMjIyMjIuLi4uLioqKioqQkJCQkIqFjoiOhoaPiY2QkIiFhYWIh4WHj4+Pj4+Qj5CPj4+Ojo6OjY2MjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMi4uLi4uLi4uLi4uLi4qKioqKi4qKi4qKi4uKioqKi4uLi4uLjIyMjIyMjIyMjIyMjIyMjIt+e3d2eHt8fHx9fX19fX1+fn5/fn9/f3+AgIGAgYGAgYCBgYGEiYyMi4uLi4uLioqKioqKipCQkJCPhYOMjpCOiYyKjpCQiIWIjYmEhomPj4+Pj4+Pj4+Pjo6OjY2NjYyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIuLi4uLi4uLi4qKioqKioqKioqKioqKioqLi4uKioqKiouLi4uLi4yMjIyMjIyMjIyMjIyMin58dnZ4fHx7fH19fX19fn5+fn5/fn9/f4CAgYCBgYGBgIGAgYSJi4yLi4uLi4qKiomJiYmJkJCQkJCMhoyJjoeFjYmOi4yLhImIh4iDio+Pjo+Pj4+Pjo6OjY2NjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyLi4uLi4qKioqKioqKioqKioqKioqKioqKi4uLioqKioqKioqLi4uLi4uLjIyMjIyMi4uMjIyKf353eHp8enp8fHx7fX1+fn5+fn9+fn9/gICAgICBgICAgYCBhIqMi4uLioqKioqJiYmJiYmPj4+Pj5CMjouPjIqPjI6MjY+KjoqLjomOj46Ojo6Ojo6Ojo6NjYyMjIyLi4uLi4uLjIyMjIyMjIyMjIyMjIyMjIyMjIyLi4uLioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi4uLi4uLi4uLi4uLjIiAfXh5enl6e318e3t9fn5+fn5/f35+f39/gICBgICAgIGBgIGEiouLioqKioqJiYmJiYmIiI+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pjo6Oj46Ojo6Ojo6Ojo2NjYyMjIyLi4uLi4uLi4uLjIyMjIyMjIyMjIyMjIyMjIyMjIuLi4uKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLi4uLioqKi4uLh4B8eHp6eXt8fHt8fH1+fn5+fn9/fn9/f39/gIB/gYGAgIB/gYSJi4qKioqJiYmJiYmJiIiIj4+Pj4+Pj4+Pj46Pj4+Oj4+Ojo6Ojo6Ojo6OjY2NjY2NjY2MjIyMjIuLi4uLi4uLi4uLi4uLi4uLjIyMjIyMjIyMjIyMi4uLi4qKioqKioqKioqKioqKioqKioqKioqKioqKiYmKioqKioqKioqKioqKioqKioqKi4uHgHt5eXh6fHx6e3t9fX5+fn5+f39+f39/f39/f3+BgYCAgH+BhIiLiomJiYmJiYmJiIiIiIiOjo6Ojo6Pj46MjI+Sj5COjo6Ojo6NjY2NjY2NjY2NjIyMjIyMjIuLi4uLioqKioqLi4uLi4uLi4uLi4uMjIyMjIyMjIyLi4uLi4qKioqKioqKioqKiomKiomJiYqKioqKioqJiYmJioqKioqKioqKioqKioqKioqKi4aBe3h5eHp8ent7fH19fn5+fn5/f35/f39+fn9/f4CAgYCAgIGEiIqJiYmJiYmJiIiIiIeHh46Ojo6Ojo6Ojo+MkJOQkI+Ojo6NjY2NjY2NjYyMjIyMjIyMjIuLi4uLi4qKioqKioqKi4uLi4uLi4uLi4uLi4uMjIyLi4uLi4uLioqKioqKioqKiYmJiYmJiYmJiYmKioqKiomJiYmJiYmJiYqKioqKiomJioqKioqKhYB6eHl5fHt6ent8fH1+fn1+fn9/fX9/f35/f39/gICBgICAgYSIiomJiYiIiIiIiIeHh4eHjY2Ojo6Ojo6Pj4+PjoyNkI2NjY2NjY2MjIyMjIyMjIyMi4uLi4uLioqKioqKioqKioqLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4qKioqKioqJiYmJiYmJiYmJiYmJiYmKioqJiYmJiYmJiYmJiYmKioqJiYmJiYmJioqFf3l6eXh7e3p7fHx7fn5+fX5+f39+f35/fn+Af3+AgICBgYCChIeKiYmIiIiIh4eHh4eHh4eNjY2Njo6Oi42Nj5WPiYyPjYyNjYyMjIyMjIyMjIuLi4uLi4uLi4qKioqKioqKioqKiouLi4uLi4uLi4uLi4uLi4uLi4uLi4uKioqJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYR+eXt5ent7ent9fHt+fn59fn1+f35/fn9+f3+AgICAf4CAgICEh4mIiIiHh4eHh4eHh4aGhoyNjY2NjY+MjImKj42IjJGPjY2NjIyMjIyMjIyLi4uLi4uKioqKioqKioqKioqKioqKiouLi4uLi4uLi4uLi4uLi4uLi4uKioqJiomJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJg355e3p8e3p7fX17fH9+fn5+fX5/fn9+f3+Af4CAgH+AgH9/f4OGiIiHh4eHh4aGhoaGhoaGjIyMjIyLiYyKiIeJhoyOjJCMjZGOjIyMi4uLi4uLi4uLi4qKioqKioqKioqKioqKioqKioqKiouLi4uLi4uLi4uLioqKioqKiomJiYmJiYmJiImJiYmJiYmJiYmJiYmJiYmJiYmIiImJiYmJiYmJiYmJiYiIiIiIiYmCf3h7e3t6enx9fHx9f39+fn19fn9/f39/f4F/gIB/gICAgICAg4aIh4eHhoaGhoaGhoaGhoWMjIyMi4yOjoyKioeEiIuKjIuNjo+Li4uLi4uLi4uLi4uLioqKiomJiYmKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiomJiYmJiYiIiIiIiIiIiImJiYmJiYmJiYmJiIiIiIiIiYmIiIiIiIiIiIiIiIiIiIJ/eHp7enp6e3x8fX1+f35+fX1+f39/fn+AgICAf3+Af4CAgYCDhYiHh4aGhoaGhoaFhYWFhYyMjI2NjJCSjI2Ii4mJi4uLi4mLjIqMi4uLi4uLioqLi4qKiomJiYmJiYmJiYqKioqKioqKioqKioqKioqKioqKioqKiYqJioqJiYmJiYmIiIiIiIiIiIiIiImJiYmJiYmJiYmIiIiIiIiIiIiIiIiIiIiIiIiIiIiHgXx4e3x5enp8fHx8fX9/fn59fX9/f39+fn+Af4B/f3+Af4CAgIKEh4eGhoaGhYWFhYWFhYWFjIyNkY+PjZGJjIaJjIuIiImMiYeNjo+NioqKioqKioqKiomJiYmJiYmJiYmJioqKioqKioqKioqKioqJioqKioqKiYmJiYmJiYmJiYmJiYiIiIiIiIiIiIiIiImJiYmJiYmJiIiIiIiIiIiIiIiIiIiHh4eHh4eHh4WAenl9e3t7enx8fHx+f39+fn19f39/f35+f4B/gH9/f4B/gH+AgoSHhoaGhYWFhYWFhYWFhISLi46PjoyLj4iHiYmMjYWFjo2KiYyNi46KioqKiomJiYmJiYmJiYmJiYmJiYmJiYmKioqKioqKiomJiYmJiYmJiYmJiYmJiYmJiYmJiYmIiIiIiIiIiIiHiIiIiIiIiIiIiIiIiIiIiIiHh4eHh4eHh4eHhoaHh4eHhH55eX16enp7fXt8fX5+f35+fX5/f39/fX5/f3+Af39/f39/f4CChIaFhoWFhYWFhYWFhISEhIuLjI6MjI2Lh4mIiomHgoiNjoiKi5GTj4uJiYmJiYmJiYmJiYmIiYmJiYmJiYmJiYmKioqKiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiIiIiIiIiIeHh4eHh4eIiIiIiIiIiIiIh4eHh4eHhoaGh4aGhoaGhoaGh4eDfXp5e3p5enx8e31+fn5/fn59fn9/fn9+fn+AgICAf35/f39/gIKEhoWFhYWFhYWEhISEhISEioqOjYmIiIqKh4iHiomIioiIh4qGi5GPiomJiYmJiYiIiIiIiIiIiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmIiIiIiIiIiIiHh4iIh4eHh4eHh4eHh4eHh4eHh4eHh4eHhoaGhoaGhoaGhoaGhoaGh4J8eXl6eXp7e3t7fX5+fn5+fn59gH9/f39/f4CAgH9/fn9/gICAgoSGhYWFhISEhISEhISEhISKi5CPiYmJi4qHh4WHiYuKiYSLjYmOjYmJiYmJiIiIiIiIiIiIiIiIiYmJiYmJiYmJiYmJiYmJiYmJiIiIiImJiYmJiYiIiIiIiIiIiIiIiIeHh4eHh4eHh4eHh4eHh4eHh4eHh4eGhoaGhoaGhoaGhoaGhoaGhoaGgXt4enp4e3x7e3x+fn9+fn5+fX1/f39/f3+Af4B/f39/f3+Af4CChIaFhYSEhISEhISEhISEhI+Qj4+IiYuIhoeIiYuLjIuJioqNio6Oj4iJiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIh4eHh4eHh4eHh4eHh4eHh4aGhoaGhoaGhoaGhoaGhoaGhYWFhYWFhoaAe3h5eXh4enp8fX1+f35+fn59fn9/f39/gIB/gICAf39/gIB/gYKDhoiGiIaDhISEhIODg4ODkpKOioeKi4qLh4uNiYqJi4iHiouIio+SioiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIh4eHh4eHh4eHh4eHh4eGhoaGhoaGhoaGhoaGhoaGhoaGhoaFhYWFhYWGhn96eXh4eHl5eXx9fn5/fn5/fn1+f35/f3+Af39/f4CAgH+AgH+BgoOHjo+PjoiHhIWFhoaFhYWSkI6KiYmIiImKioiIh4aKjIiHiYmOkJGNh4iIiIiIiIiIiIiIiIiIiIiIh4iIiIiIiIiIiIiIiIiIiIiIiIiIh4eHh4eHh4eHh4eHh4eHh4eHh4aGh4eHh4aGhoaGhoaGhoaGhoaGhoaGhoaGhoWFhYWFhYWFhYWGf3l4d3d3eXp5e3x9fn9+f35+fn5+f35+fn+Af4CAgICAf3+Af4GBg4eOjo6Ojo6Mjo2OjY2MjZCQjomHhoiJiYeIiouIiYyJiYaKjY6PkYuIiIiIiIeHh4eIiIiIiIiHh4eHh4iIiIiIiIiIiIiIiIiIiIeHh4eHh4eHh4eHh4eHh4eHh4eHh4aGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaFhYWFhYWFhYWFhYZ+eXd5d3d6eXl8e31/fn5/fn5+fn5+fn9+f4B/fn+Af39/f39+gIGEiI6Ojo6Ojo6Ojo6Ojo2NkJGOi42JjIiIiYaHiYaIioiHi4yLjpCQiIeIiYmJiIeHh4iIiYmIh4eHh4iIiYiIiIiIh4iIiIiHh4eHh4eHh4eHh4eHh4eHh4aGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoWFhoaFhYaGhoWGhYSEhIWFhoaFhIWFhX55d3l2eHl4e3x7fn5+fn5+fn5+fn5+f39+f39+f39/f35/f3+AgYOGjY2Ojo6OjY6NjY6OjY2Qj42Ni46KhoiKhISLiYeDhYSDi4mLj42JjI6QkI+NjYyLjY6Pj42NjI2Nj4+Pjo6MjYyMjY2KiYiHiImHh4aHh4eHh4aGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoeHiYqKiIeJi4yNjo2LiImLi42OjYyJiImMgHl3d3Z6eXh7e3t+fn5+fn5+fn5+fn5/f39+fn5/f4B/f4B/f4CBg4aMjY2NjY2NjY2Qj4+Pj46NjI6KiYuMjIeFiY2Lh4aIh4aHh4uNjo6Pj4+Pjo+Pj4+Pj4+Pj4+Pj4+Ojo+Pj4+Pj4+Pj4+Oj46Oj46Mi4uJh4eHh4aIhoaGhoaGhoaGhoeLiYeHiIiLjY2Mi4yLjY2Ojo+Ojo6Pj46Ojo6Ojo6Ojo6Njo6NjY2AeHZ4eHp4enx6fH5+fn5+fn5+fn5+f39/fn59fn9/f4B/gH9/gIGDhoyMjIyMjY+QkpOTk5KSjYyMjIqHioyKh4eJiYWCiouIiYWJjpCNjo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6NjI2NjI2LiYaHh4eHiYqLjY6NjYyNjY6OjY2OjY2NjY2NjY2NjY2NjY2OjIyNj4+OjY2MjIyLi313dXd5enp7e3p+fn5+fn5+f35+fn5/f39+fn1+f39/gICAf3+AgYOFj5KRkJGSk5OTk5OTkpKLi4uLiomMiouLiYuKhoeOjYiIjI6OjIuMjIyNj46Njo6Ojo2NjY2MjY2NjIyMjIyMjIyMjY2NjYyMjI2NjYyMjI2NjIyNjIyMi4yMi4yMjI2MjIyMjIyMjIyMjIyLi4uLi4yNjY6Sk5OSkpSRkJOVlZSTk5COjo6Oe3Z2d3h6ent7e31+fn5+fn5/fn5+fn5/f35+fn9/f3+AgIB/f4CBgoSNkpKTkpOSkpOTkZKSkoqJioyJi4qJjIuKioiHiYqKi4mKjY2Mj46Nj5KUlJOUlJOTkpGSkI+Ojo2NjY2Pko+OkZGOjIuKioqLi4qKi5CPjoyMjIqKioqKioqKiouKioqKi4yLi4uMjIyKiouLi46RkpOTk5SUk5STk5SUlJOTk5KSkpKSk5F6dXZ2eHt7e3p6fX5+fn5+fn5+fn5+fX5/fn5+f39/f4CAf39/gIGChIuRkZGRkZKSkpGRkpGRiYmIiIqMiYiJiYuJhoSJhoyKh4ySkpKTk5OUlZWWlZWUk5OUlJSUlJSUlJSVlZWVlZWUlJOTkY+QkZKQjoyRlZWVk5KSjo+QjYqKi4qKi42OjY6RkpCRkpKSkpGRkpKSk5OTk5OTk5OTk5OTkpOSkpKSkpKSkpKSj3h1d3l6e3t7ent9fX1+fn5/f35+fX5+fn5+f39/fn9/gH9/f3+AgYKEi5GQkJCSkpKRkZGRkZGIiIiIi4uJg4eLi4yMiIeHjYyNkpSSkpOTlJWWlpaVlZSSkpOTlJSUlJWVlZaXlpaWlpWUk5SUlJSVlJSUk5OVlZWUk5KTk5OTkJGSkZGSk5OTk5KSkpOSkpKSkpKSkpKSkpKSk5OTk5SUk5OSkpOTkpKSkpGRkZGPdnJ3enp7e3t8fX59fX1+fn9+fn9+fn5+fn6Af39/f3+Af3+Af4CBgoSKkJCRkZGRkZCQkJCQkIeHh4eIiIiFi4+KjI6Njo+OkJWUk5OTk5SUlZWVlJSUk5KSk5KTlZSUlZaWlpaWlpaWlpSTk5OTk5OUlJOSk5SVlZSTkpKSkpOTk5OTk5OTk5KSkpKSkpKSkpGSkpGRkZGRkZKTlJSUlJSTkpGRkZGRkZGRkZGRkYx0c3d6ent7e3x9fX1+fX5+f35+fn5+fn5+fn9/f39/fn9/f39/f4GDhIqQkJGRkJCQj4+Pj4+Ph4iKi4yNjYuOj42Mjo6RkpGSk5OSkpKSk5SUlJOSk5OTkpKSkpOUk5OTk5WVlZWUlZWUk5OTk5KSk5OUk5KTlJSUk5KSkpKSk5OTkpKSkpKRkZKSkpKSkpKSkpKSkZKRkZGSkpOTlJSUk5OSkZGRkZGQkJCQkZCRinN0dnp8fHp7fXx9fn59f35/f35+fn9+f31+f39+fn59f39/gH+AgYKDipCQkZGQj5CPjo+Pjo+Oj4+Pj4+Pj4+PkI2OjpCRkpKSkpKRkpKTk5OTkpGSkpKRkZGSk5KTk5OSk5STk5OTlJOSk5OTk5OTk5OSk5OTkpKSkpKSkpKSkpGRkZGSkZCRkZGRkpKRkZGRkpGRkZGRkpKSkpKSkpKSkpKRkJCQkJCQkJCQkJGGc3V2e3x8e3x9fX1+fn1/f35/fn5/gH9+fX5/fX5/fn5/f3+Af3+BgYGKkI+PkI+Pj4+Pj4+Pj4+Oj46Oj4+Pj5CQiI2PkJGRkpKSkpOTk5OTkpKSk5KSkZKRkZKSk4iFk5GRkpKSkZKSkpKSkpKTk5KRkZKTkpGRkpKSkpKRkJCQkJGRkZGQkJGSkZGRkZGSkZGRkZGRkZGSkpKSkpKSkZCRkZCPj4+Pj4+Pj4+PkX9ydHh8fHx7fHx9fX5+fn9+fn5/f3+AgH99fn5+f39+f39/f4CAf4GBgYqPj4+Pjo6Ojo+Pj46Ojo6Ojo+PkI+Pj4+GjpCQkJCRkZGRkZGRkZGQkJCQkJKCgpKQkZGOdYaRkJCRkZCQkJGRkZGRkZGRkJCQkZGQkJGRkZGRkI+PkJCQkJGRkJCQkJCRkJCQkJCQkZCQkJCQkJCQkZCQkJCPj4+Pjo+Pj46Ojo+Pj4+PeHJ2eXx9fHp9fH19fn5+f35+f39/f4CAf35/fn5/f35/f39/gIB/gYGAio6Ojo6NjY2Ojo6Ojo6NjY2Oj4+Pj4+PjoiQkZCPj4+QkJCQkJCQkI+PkJCPkIhwhZCPkHx1iJCPj4+PkI+PkJCQkJCQj4+Oj4+QkI+Pj5CQkJCPjo+QkJCPj4+Pj4+PkJCQkI+PkI+Qj4+PkI+PkJCQkI+OkI+Pj46OjoyMjY2NjIqDiYhzc3Z4fX58eX18fX1+fn5/fX5/fn9/f39/f4B/f39/f4CAgH+AgH+BgYCJjY2Ojo6Ojo6OjY2OjoyNjY6Ojo6Ojo2NiJCRkI6Njo6Ojo6Ojo6Pjo6Ojo6PjHNvio+KcniHj46OjY6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Pj46Oj4+Pj4+Pj4+Pjo+PjY2MjYyNjoyLi4mJiYiFhYSDgoKEgnR5fXp4dXJrZWltb2xmZmdncHNzd3l9fnl6e3x9fH5+fn59fn9/fn9/f39/gIB/f3+AgIGAgIB/f4CBgImNjY2NjY2MjYyMjIyMi4uLjYyMjIyMjIyGj5GRjIyMjIyMjIyMjIyMjIyMjIyNd217j4JzeIaNjY2MjIyNjY2NjYyMjI2MiomKi4uJh4KAh4iEgXt6gH57fXx8fXlzcnJycnV1cG1ramppZ2NkYV9bXF1eWFVXWFlTS0VJSkpLTE1PT0tgdHR3eX19eHp5e3x8fX5+fn1+f39+f35/f4CAgH+AgICBgYCAgICAgIGAf4OEhYSFiIuLjYyMjIuLi4yGiYqKioqKh4OOkJGNiouLi4uMiYmKioqKiouLi4dzbm+Ee3V2gIWDhIeJiYWCg397fHl6e3pzcHFxcW1samdsbWdlZmVmZGNlZGVkZWVlZWRkZGNhYV5dXFlYWFdUUFFSU1JTTU1KSUZFSEpHR0hHR0xOSWdzdXh6fXp4d3l8fHx8fn5+fn9/fn9/f35+f4CAgIB/gICBgICAgICBgYFnXmBjYWNucX17ent/fXd8fHZ4ent4eHpvcXt4eXt8e3h3e394dXd0dHZ1dXZ3dGJeZF9ha3FmaGtsbm9tamlpaGhlZWRkZF9gYWJgYF5dWVhaWltdXV9gX2BfX19gYmFeXl5eWVldXF1bV1dWUlRSU1NOUUpISUZERUhMTEhGR0lLSklNbXJ0eHp7end3eXt6e3x+fn1+f39+f35/fn5+gIGAf3+AgIGAgICAgICCgWdYW1pZXFtcY1xaXF5ga3FtcHBvbm5vbmtpbmxrbG9qaWtraWpraWZmZ2dnaGhiXWpsXWZmZ2VjY2JhYmBgXVhbW1dYV1RWUVBUU1NNSkxLTExOTk9UWFhXVVVUUlBQTU1QT05LTE1QUU9MTEpHSUlHSEhJSEhIR0ZHSElKSEhISUlISVZwc3V5ent5dnZ5enp7fH59fX5/f35/fn5+f3+AgX9+f4B/gICAgICAgIGBbFtYVlZWWVlaWVlYVVZoamxubmxra2poaGloZGVkYlxiZl9fYWNfXF9dYF1eWlpqd21ibnNqYVlZX1tYV1NOTUtLS0tMSUtNTktKS0tMSktQTEtLRkdHSUlGR0lISUZFSEdGRkVERUVEREVJSUlHSEdIRkZLTUtJSUlIR0hLTU1LTExMVXFzdnl6e3h2d3h3ent8fn1+fn9/f39+f3+AgIGAfn5/f4CAf4CAgIB/gYJoUlRVVlNVV1lZWVdXV1tbYWNfXlxbWFZWWVZSVFJRUVVUU1NUUE1KTU5QUk9NW2tybGFudXJmUVFTUFBOTk9NSk1MS0xKSktLRklJSkxJR0pISUlFR0dGRkVFSElKR0ZHRkZHR0hKR0dISEpMSkpLSUlISktLSkhKS0pISUtMTU9QUEtUdHN1eHp6eHZ2d3d6enx+fX5+fn5/f35+fn+AgYB/f3+AgYB/gICAgH+AgmlQUlRXVVRWWVdYWFpbVFRTUlBRU1FRUU9OTlBQUU9MTlBPTk5NTEtNTk5QTU5dY29rWWlzdXBTTU9QUFBPTk5PTk5QTk1NS0lISEpJSUlJR0ZHR0dJSkhJSEhJSEhHSEdISElISUxLSklISkpJSkpIR0pMS0pJSUhKSktMTk1NTU9RTFVzcnN3enl3dnR2eHp7fX19fn5+fn9+fn5+gICBgICAf4GBgH+AgICAgICBbE9PTlRZVVVdW1lXV1hOTUpKSUZKT0xKSkdJSk1NS0pMTUpHSUlJSktLRkJGSFViaGxvcG9tbFpMTE5NTk9NTk9MTk5OUFBPTE1MTk1MTEpJSEdJSElISElJS0xLS0pJS0pJSklJSUlJR0dKSUdJSUpKTk1OTEhJSklJSk1PT01MT1JOWXBwcnd4d3d0dHR3enx+fX5+fn5+fn5+fn9/gICAgICAgYCAf39/gICAgIJvS0pNTlFOTlVXVlZSU0lFQ0VFUkREQT5CP0RAQD5CREFAQURHRkVIRUNGR0hNWmdoZ3JubmhmZGBeXlhMSklKSUlLSkxQTk1MTU1MTU1NTElIREZGR0ZGRklKSUlLSkhMSklKSkpJSEhKS0tIRkdJSklLTU5OSktPTUxLTU1PUE5QT1BgcG9yd3h2dHJzdXd6fX19fn5+fn9+fn1/gICAgICAf4CAgIB/f3+AgICAgXNQUE5OUE1KS1BSUE5RQ0RCQUZRRT1DPT9FSDk6Oz0/PTxBRkA+Ojs+SVpdW1xlbG5rb21tbGtpaGtkU0dFRUZFR0dHR0pHSEpLR0NER0pHQ0RFQUFDR0hHSEdISktKSElMS0lISktLTU5MTUxMSkpMS0lLTU9PUFNRT1BQTk9QUlFNUGdwb3N2dXRycXR4en19fX1+fn5+f4B+foCAgH9/gIB/f4CAgH+Af4CAgICCdlRVUVFQT0xNUFBOT09BQkFAQkE/Oz48Pj8/Ozg5ODs7OkA6Oz48Ozs7PUtcaW1ub2pvbWtqbG1mUUdFREdJSEM/QEBAQUFCQUE/Pjw9PkFAQD8+P0BFR0dHSUtMTk1OTUxNTUpLTVBVU05MTlFOTk1OTE1NTk9OTk1LS05OTk1OTkxUbnBwc3R0c3Fydnh5fX19fn1+fn5/gH5+gICAgICAgH9/gICAgH9/gH+BgYJ4UVFSVFJTUVNTUVFST0BAPT4/PD8+QEE/PT45Ozo7Ozk5Ojg4Ozw5Nzk7Oj1IY29zbW5sa2xpVUM+Q0ZEQkNDPzs+PkBDQ0E/Pj9BPkBAQj9APD9CQEFDRUVFSktQT1BPTU1OTExMT1JRUFJOTExPTUtOT0xMTEtMS0tKS0tKTU1LS1xxcXF0c3RycXR4eHl9fn1+fn5+f39/fn5/gIGAgH+Af4CAgICAf4CAf4CAgXxSTU9RUFFSUlRSU1NOPDs8Ozs7P0BBQkA9PDk8PTw6Nzk6Ojk3OTo6Nzg6OTk9SmBzc3BoVD86Oz1AQUA9Ozs+PD08QEJDQT9BQkE9Pj09Oz0/Q0RCQD9BREJFR0pKSkpKTE1MTExNTExOVVNLTE1USVBKSU1KSUpLS0pJSEdKS0lKZnJxc3RzdXJydnl6e31+fn5+fX9+f39/f36AgICAf4CAgICAgIF/gIF/gYCBgFZMTlBQTlJRUFBRUU44PT88PDo9PkFAQT8+PkA/Pj48PT0/QD09PT9DOz09Pjw6Qmx9akA6Oz49Pj9AQUA/P0FAQEBBQEBAPT8/PTw6Oz09PD9AQUJCQUBCREZGRkdGR0dISUtMTExLTEtKS0lKSk1MTEpMS0lISUxMSklJSElLR01tcHF1dXR1c3V4eXl8fX5+fn5+fn5/gH9+gIB/f39/gH+AgYCAgYCBgICBgYCCYUtPT05OT1BPT1BQTzo8Pjw9Oz8+PkFBPz0/Q0NEQT89PkBBP0A7W25APkRFP0BBRF9kOz09Ozo9PkFBQD5AQD9BPz89PD48PTs7PD0+QUA/QD5AQ0NEQkRFSEVFR0hISEdGSUpJSUlJSUhKSkpKTEtKSklJSEhKSktMS0lLSkpHVnBwcXNzdHR1eXp7fHx+f35+fn5+f39/f39/f3+Af4CAgICAf4GBgICAgIGBgIJtTFBRTk9QTk5PUFBPPjw8PT4/P0A+QEA/Pz9CRkQ+PDw9QD04Ojptd0k4Ozo9PkE7SGQ9PD08ODo7Pz49PD07PEA9PTw8Pjs9PD0+QUBCQUBAP0JEQ0RFRkZGQ0VHSElJSEhJS0tMTUpKSUpNTUpLSktJSEhISEpJSktKSk5MSUlfcHBycnJ0dXZ6e319fH5+fn5+fn5/f35/f36AgIB/gICAgICAgYGAgICAgIGAgnZNTk5NTk5MTE5QT0w+QTw8PT8+QkM/PkFBQUJBQFlSPTw9SUxGRXV2Tjc4ODo7Pj9XakE7PDw6Ojs+Pz89PTk6Pjw9Pj89Oz4/QEJDQkJDQ0FCQkFCQkRCQkRCRENGSUdGRkhJSUtNSklKSktMSkpJSkVESUlGRkhISUpKTEpGRmdwb3FxdHZ1d3t8fH18fn59fX1+fn9/foB+fn+AgH+AgICAgICBgYCAgICAgICBek5JS0tMTExFSUxOTTw/PDw9PkBAQUE7QkNCQ0BDc3pKO1x/g396fHdXPD0/PT0+RWh0TDo9Pj89PEFTRD88OTtBPz4+QT07P0JAQkNCQENDQUNBPT0+QD0/QUFBQENFRUBAQ0JDR0dFRENGRUZGR0VEQEFHR0ZDRkRHSEpHQz5IbG9wb3F0dXZ5fHx8fHx+fn1+fn5+fn5+f36Af3+AgICAgICAgIGAf4CAf4CBgIF+UUhLTU1NS0pLTE9RQD8+PkFBQEBBR0FCRENFQUdyemtig4SDgoOAfV4+QENAQD1Kc3tZOj1BRUFAWWFHQz09QEREQUA/Pj1AQT4+Pj88PkBER0VAPkBBP0BDRkVDQkJDQEJEREJERUFCPkFCQkFCQEA9QUJDRENDQUNFR0E/PVZwcHFwcnV0d3p8e3t7fX9+fX19fX1+fX5+fn9/foB/f4CAgICAgYCAgIB/gIGAgX5SSEtNTUxLS05OUlVEQkBDQ0FBQkBCQ0BAQUFARW90fYKCgYN+fYR2TUFDRUA/Pll7gF0/Q0VJSklqZlFNRUNHRkdFR0VFRURFQ0E/QD4+QkZKSkdFRUdGRkpOTktKSUdHSEtMSUdHQ0REREVEQUJCQ0BDREVEREVERUZDQkFEZW9wcXF0dnV4e3x6fHx+f319fX19fn59f4B/f39/f39+gIGBf4CBgICAgH+AgICAfVJJSUpKSEpKTE9SU0dGRUdIREdIREA+PDs+QEVFaHN9gXx/hH55hXJDREVEQ1d1hoeHflhHSEpMTmlnW1tWTEhOTUhJSEhHR0hIRUNFRUVFRkhKSkZFR0lKTU9PTU1LSktKTU5LSUhHSEhIR0ZFRkZGREZIR0VFSEhGSEZIRlFubnBxcnV2eXt7e3p9fX5/fX19fX1+fn1/f39/fn5/gH+BgYGAgICAgICAf4GBgIB8UEhHSElGR0lKTU5OSkxJSUpLTE5KRkNBQkNGSkdge4B/d3+EhYOEiWxBQVZ0h4mHh4eIg1dITE1WZWRiYGVgTl9JR0dHR0ZIRkhFQ0RERkVEREhIQ0NDRklLS0xMTExMTElKS0pKSUlJSEpISEdISUhHR0hGRkZISklJSUlIXW9vcXJ0d3d6e3t6e319fn59fX19fX5+fYB/f39+fn+BgIGAgYCAgICAgIB/gYCAgHxNR0ZIRkVGR0dKS0pMTUxLTU5NT0tJSEhKS0tMTE5bfIKCg4OFhoaIhFZshYeGhoaHiIiHfFBMTWNqaWhjZmhnX0BAQ0NDQ0ZGRUJAPj5AQUFAQkQ/Pj9ERkhERkdJSklKSEhIR0lJSUpJSEZKSkpKSUpJSkpKRklMTEpKS0tmb3BzcnR2eHl7e3t8fH1+fn19fX19fn59f39/f35/f4CAgICAgYCAgIGAgICAgICAfU9GRkdGR0hHRUZHR01NTUtMS0lHQ0NDRElLS0xLSlSBg4SEgoKFhoaEgoaFhISGhoaHh4aKdUlNbXVtamlpaWtJOjw+Ozo8QUFAPjw5OTg8PD07Pjs4Oz9BQkBBQ0NCQEFBRERCQ0ZISUhISExNS0dJSk1NTk1KSktLSkxNU2xvcXRzc3d5e3t7fH19fn9+fX19fX1+fn5/foB/fn9/gICBgIGAgICAgYCAgIB/f39+UUZFRkdJSUdEQ0VGTk1MSklIRT85Oj5ARUhISklJZYWEhIR/gYKDgoODhIWFhoeIiIiIiYyPZlF1eHRtbW5vbEQ3ODk2NDc5Ozw6ODU2Nzc4OTc4NzU4ODs7Oz1AOzk5OT08Pjs8PUFDRUhKTUxMR0lHT1JRUFBOTE1NT1Fdb3BydHN1eHp7e3x8fn5+f359fX59fX5+f39/gH9/f4CAgICAgYCAgICAgICAgIB/f39RR0ZHSEpIRkVGR0hMTEpJSUdDQjU2OjxDQENHSUlohoSEgX6Bg4ODgoOEhomKjIyLi4mKi42KbXZ8hHFvcG9uSzI2ODczNTY4Ojg3NjU2NTY3Njc2Nzo2Nzg4OTo3NTc4OTc5Nzc2OjxAR0ZJRklGRUZPU1JTU1JPUFBSVGVwcXN0dHZ5e3x7fH1+fn5/fn19fX19f39/f3+Afn+AgICAgICBgICAgICAgICAgH9/flJISEhJS0lHSUpJSkpLREVIRUJANjc4OD06PUVDQmWFg4GAgoODg4ODhomLiomJioqKiouKi4uIcnN8cnFub25EMzY4ODU1NzY5OTc3Njc2NTo5Ojo6Ozc5ODk4NzY2OTo5ODg2ODY4OTtBPT4+QkE/QUtMT1FQUU9PT1JXa3FydHR1dnp7e3t9fX5/fn9+fX19fX5/f4B+fn9/f4CAgH9/gICAgICAgH+AgICAf39+VEhHSUlMTUtKS0tMSUg/QEFAPDo1Nzk4OTc7Qjo9cYSAgYODhISEhYaJioqIh4eIiIqKjIuKi42FbGhsb3l9Zj47Ozs8OTo7OTo7Ojo5Ozo5PT09Pjs7PDw6Pjs5Ozs8Ozw7OTo8ODo6Ojo5OTk8Pzw8QUJESUpNS0lLTFdvcnN1c3V4e3t7fHt9f39+f359fX19fn9/f35/f39/f3+Bf4CAgICAgICAf4CAgH+Af35URkVGSUxOTkxKSk1CPzo7PDo4OTk4OTo6Ojs/Pkh+hIKChIWFhYaIiYiHhoaGiImIiYuMi4qMjY9/ZmxveX5eRUNCQUI+QENBQD49Pj5APz8/QD9APT0/Qj5AQT9APz1AQEA+P0E8Pjw7Ojs6OTs/PTs7PT1BQUNBQkNBWHBxdHR0dnp7e3x9e31/fn9/fn19fX5+f35+fn9+f4B/f4CAgIB/gIGAf39/gICAf39/flJFQkFHSk5PTElHSzo4Ojs5Ojo8PTo7Oz09P0BCUoKCgoSFhIWEhomJiIiGhoaHiImKi4uLi4yNjY15cHJvdl1LTEhISEVGSEdFQ0FAQ0VEQ0FCQ0I/QERIRUNFQ0VEQUZFRkRFRkRAQj48QD49P0A+Pz4/Pj8+Pjo7PTxgcXJ0dHV3enp6fX19fn5+f39+fX19fX5/fn5+fn5/gH9/gICAgICAgICAf4CAgIB/f4B+UERAPUNIT01HRkJEOTc6Pjo8Oz4/Pz89QUBDREZXhIKDhIWFhoaHiYmIh4aGhoeJiYqLjI2MjIyMjI18c3JwWExSTEtLSUpKSklGRERHSEdEREVGREJISUtHSEdGSEdFS0lLSUpLSkNGQ0NEQkFBQ0JEQ0NERENAPTs9QGhwc3R0d3d5eHt8fH19fn5/f359fX1+fn9+fn59fn+Af3+AgH9/gICAgICAgICAgH+AgH9PQT49P0RMS0BCQkE5ODw+Ozw7PkA/QT5CQkdHSVmEgoOFhYaHiImJiIiHhoaGiIiIiYqMjY2NjY2MjYp5d3VvY1FOTE5LSktIS0dER0lJSUVGSUZGRUxMTUlKR0dISUpOTU9MTE5LSEZHR0VFQ0ZGRkZERUhIRkNBP0BMbHB0dXZ4eXl5fHx8fX1+fn9/fn19fX1/f35+fn5+f39/f39/f3+AgICAgIB/gICAgICAf1FBPz4/RUdHPTxAQDg4PDs7PTo+QD4/QENGSUlQX4GDhYWFhoaHiIiIiIiIh4eIiIiJioyNjYyMjYyMjoV5fHhyWU5NTkxKSUZKSUZLSUdLSklKR0dHS0xOTE1ISElKTVFOT05NT0tJR0lKSElESUhIRkZHR0lHQ0JBQ1RucHV3d3l6eHl6e3x8fX5+f39+fn1+fX5+fn5/f36Af4B/f3+Af4CAgICAgICAgICAf39/VERBQUJHSEI/OD9AOTo8OD0+Oz1BPj9BREhKTFVxg4SEhIWFhoeIiIiIiIeGiIiIiIiJjIyLjIyMjIyMjHlyYl1bUFBNTElHREhKSE1MR0tPTEtKSkxNTE9QTkhJS0xPUVBQUU9PSkhKSkxKTEZHSEdGRkhGRUVCQUJCXG9yd3h5enl5eXp6e3x+fn5/fn59fX19fn9+fn9+f4CAgIB/f39/gICAgICAgICAgH9/f39VRUNFRUdHRUQ7P0E7PTw5QD4+QEJHR0FHS0xQVnmFg4ODhISGiIiIiIiIh4eIiIiIiIqLi4qMjIyMjIyNf2BcV1dXVVFPTUxFRkdNUE9QV1VRUE9RU1JNU1RPTVNMUFNVVlJTUVBMSk1NTUxOR0dKRkZISkVERUVCRUNjcHV5eXp6ent6e3p6fH59fX9+fX19fXx9fn5/gH9/gICAf39/f3+BgYCAf39/gIB/f39/f1VGRkdHR0dIRj5AQj0/PT1CQEJCR1ZORk5QUFRYe4aDhYWEhYeIiIiIiIiIiIiIiIiJiouKioyMjI2PjIyLbl9bbWRIVVNTUks7O1NUU2B1XVVWVFZZWVJYWFJaZlBVV1pdUlRXUU9NUlFQUFFLTEtISEpIRUZJSUlISWlydnl4eXh6e3t8ent8fXx9f359fX19fX1+f39/f3+AgIB/f39/f4CAgIB/f3+AgH9/f35+U0hKSUhHR0ZFPz9BQUVBQ0dFREVMWFJNVFVWWFp8hoWHhoWGh4iIiIiIiIiIiIiIiIiIlJyMioqMfmGKi4uIcmFoWD1bWllUUj9AV1ZZXGRgVllicl1dV11aVkVRWVpbWV9UWWdSVlZYVVRWVE9PTUpMSklJTE1LT01Tb3N2eHl4eHp5ent6e3x9e35/fn1+fX19fn1/f39+f4CAgH9/f3+AgICAgH9/gH+Af39+fn5WSkpJSEdFRERCQT9ITUlNUEtJS1BUU1NYWlpcXHiFhIaFhYWGh4eHiIiIiIiIiIiIiImcnaCPiY5nO36MiYuMfHJzW15dXFNVU1dXVVtadYNZVX2QYVxYXV9XSVZdXVtbX1lIWVhZW11YWFlXUlFNUFFNTU9TUVFVUmFzc3Z3d3Z4eHh6e3p8fX19f39+fX59fX1+fn9/gH9/gIB/f3+Af3+AgICAf39/gIB/gHh5fVlOS0lJSEZCREBBOlBRUVdYUFBPUVNUVFhYWVpbboGCg4WEhYaHh4eHh4iIiIiIiIiIiJaanJeJioFuhomIh4SLgGlcXF1bVldVWFRSWFZjloBSZXJYWldfaFBgZltbWFxnYUdPWmhnXVtcXV1XUk9TUFBSVlZWVllabnJ0d3Z2dXh4eHt7fH19fX5/fn59fn19fX9/f3+Af39/gH+AgH9/gICBgYB/gH1yfX9/b3R8XVNQT01LSkVDP0A7UFBaWltSU1FQUlJSVlNWVFdfdXiAhYSEhYaGhoaHh4eHiIiIiIeIh4ORjomJiIaFiIiGfoB9YFRYW1ZUVlNSUk1QTUxmeltdVFlVVl1aTFRaVVNUXlpYV1dXemtYW1xcXlRRUVBJTk9XVlhbWmRwcnZ2dHR2eHl5e3t8fX19fn99fX1+fX1+f39/gIB/f3+Afn56eHd2c3V7f3+AgHRrf35rcnleW1ZVU1JPS0ZDREFNXoNsVlJTTk9RT1FVUlNSUlVjZHaAgoKDhISEhIWFhISDhoaGhoeIhn6JiYmHhoOHh4d6b3NaTU5RUU1PTEpLRUZJRkM/VGRVf1JRUU5LUVRRTU9ZUk1OUVNVVU1RU1JQT01MSENJSFJUVVpcbHF1dXVzc3d6ent7fH17fX19fn19fX59fn9/f4B/f399fX5+f39/f4B+e3Zzd31+fmR1fWlxdF9kXV5cWVVQTElMSWFsknRQUVNOUVJRUltSU1JRUlVUYnN7fH+AgYKBgX99e3uAf4OChYaHgoaGhoGEgYaFhnZhXk9GQUVFRERDQUVRQ0VBQz5DSUdWQEhOTEddaVBIRk5GREVGSUdIQkRIR0lLR0RCQURAT1FNU2RydHZ1c3R1enx7e3t7fH19fHt+fX19fn5/f3+AgIB/f3x8fX+Af39/f4CBgH12dHt/bWh8Z25xZmllZGJcWFNRUFVSc1dlW09PTkxRU1FVWVNVUVFUU09WYGtscnZ7e3h5dHJuc3RzeXh+f4OAg4OCgIKAgoGCbE9JQkI8PD5AQUBAP2tRS2BFRkhJRUI/R0xOR01RVUlBRT8/PD08PT0/PT9BQ0NAPz09Qj5KTkdVbnV0dXN0dnh7fHt8fHx8fX19fH59fXx+fn9/f4B/f39/enl3eHd2dnh7foB+fXt4dnx1YXhnbHBqbGpqZmBbUVJaXFleSkpQUU5LTFFSUVRWVVdRUVdVUFhbYl1hZ21tbG9rZ2BucmptbHF1e3p9e3h6fHx4d3hlREJCQj47Q0NCQkRCXF1Pe05PT05LTE1PT1FMS01XTUhHQEE8OTc3NTk5PTs7Ozg6ODo/PEJIP1xzdHV1dXZ3eXx8fH18fH19fX58fn19fX9/f39/fn9/f314dXZ6e3p3eXh1d3t8eXh1eXdjcWhpcG1ubW1oZl5PUF9dWklIUFJRT01QUU5RUlRWWFNTWVRPWVpbV1ldXl5fZWBdXnF2a15gZ2t3b29sam9ubmxmYllIR0hIQ0JHSUZGRkRNUlBhV1NYUVBTU1JVW09PUVZQTUlERj46OTY1ODc5Nzk6MzY1Nzk1PEM+ZXNzdnd3eXl7fX18fHt8fX5+fnt+fn19f39/fn5+fn9/e3d1eX18enh8fHx8dHd2d3Z1d2tuaWhxbm9vb2prYFZXXlpYTUtUVFNQUVVPTFJTVFdYVFRZUk1XWVpWWFhWWFldV1dYaHNrXVZhc2tiYV9eZGFfXllVUU5PT01JSEpMSklGQ1FQU1tXVFROUVNZU1xlVU9TVFJOS0lIQz9BOTk5ODk3ODg1NzU3ODU5OUdtcnR3eHl7e3x+fX18e318fn5+en1+fH1/f359fn59f358dHR1e3hycW9vbnR4cXJzeHZ1cWZkZ3JucHBxbm1kXV9fWVdPUFhWVlNUVk9PVVZYWFlTVVRMS1RWVVVVV1BTVVdUVVJdbl5STlpfW1ZZO0RWWFRbZkpMUFNST05NTk5OTEpGUVBVWVNUT0pOT1VTVFxWUlVTUk9NTElISEY/Pzw6Nzg3NjU5OTY3NjY1V3Bwc3d5ent8fX19fnx8fXx+fX15fX18fn5+fXx8fX1+fXxydnF4eHJ2dXFxbnBwb3B1dnRuamRkanBwcXJwb2ZlZGNcXVJUWlZXVVRXVFJYWFlZWVNVT0pHT1BPT01SSlBQT1BOTk9UTE1JUE9TVFUyPVhNSUBRPWNhUVNRUE5QUVBOTk1RTlRSUFNNSUxKT1JQUlJTVFFST0xNS0xMSENCQT06Ojg3NjtCNTU2Njpkb3F0d3h7fHx9fnx9fH19fX18e3h8ent9fX58e3l9fH18e3B1b3d1cHV0b3N2cHFxcHR1dmNqZ2VXaHRycnFuaGlocFZWVFVYVVdVUldWVVpZWFdVUVNGRUFGR0dIRkpESEpJR0VITEhLSEZMTVBNRy9FX1I+Mz8+am9hU1JRQEdUUVBRUFFOUU9RUExKTExPUE9OUFFRTlBPSkxNTUtHRUVEQjs9PTw5PUc2Njc3RG1wdHZ5e3t8fX18enx8fX5+fXt5dnh3eXl8fXp6dn17fHp6b3Fud3JwdnFtcHNwb3Bzc3N0ZmdgaFpXa3JzcmxtbWtuYWVQU1RSU1RPV1ZWWVlWUVFRT0A9Oz0/QUJBQ0BCRURBQEdIR0hFRkhKTUxFR0NPUkM4RU5TXWdUUVNBR1VQT1FRUE1NT01LTEtMTk9PUUxPT01ITExJS0tMS0dGRkVEPEFBPjtARTs8ODlTcHJ0eHt6e318fHt5fHp6fn58e3V0dXJ2dnp7eHpyfHt8eXltcW94cnF1bm5xcm9vb3Rzc3J1dGtnZ15lam1wa25xbWltY0xPT01RU0xUVVRYV1VMTEtJPDk4Nzs+QD48PUFAQj0+RUhHQ0VGSUdKSkBGQUFARkhFSk9IUVJiXFFQUk9TT09QTE1PTkxNTU5PTltXS01RT0dJSENISkxMS0ZGRkU/QkM+PEJHP0I/QWRwdHZ6enp7fHt6end7d3l+fnx7cXN0cHJzd3R4eHN6e3l2d2xxb3ZxdHRsb3Fybm5vc3ZydHNycmtsZW5zaG1ubWxtbGprSUxISE9RSlFTUVRTT0tIQ0Q9OTc3OT9CPjs/QkBAPkBESUVDR0dKR0lFQkI/Pj1DQkFHSURNT2JlUU1PTldLTE5LTE5NTUxMT05TZE5KTFJJSUlFQUhKTE1OSkdJR0JBQkA/RUZFSERLbm92eXl5e3t6e3p3dHh0eHx8eXpucXJtbm9ycnZyc3h8eHZ2bXBtc3B1dGxwcHJvb29ydnVyVlZucWdseYRqbXFybm5qaG9ISkNHTU1KTVBNUE9ISkQ/QT05ODo6P0I/PEFCQUFERUdLRkNISEdHSENDP0I/P0BBPkRFQ0tOUlRMSklNVEZJSUpMSktMSUpNTU9QUlBKR0NLR0NCSUlMTU9OSUpJR0NDQ0RISk1MSVlybXd5eHp7enl8dnJwdXJ0eHl2eGpxbmpsbG50dG10dXtzdHhyb25xb3ZzbnBvcnBvcHN0eWpOYGdzanR8eWdvc3FpcWhkcUdLREdISEdKS0lKS0RGQj0+PTo5OjtAQj89QUJDQ0dGSUtKRElJRkdHQ0M7QUBCPkBAQkVDSU1QSEhLR0hLREhKTE1ISkxISUpMS01dUkhIRE5GQUNKSk1MUE1LTUpLRkdHSk5OUU5MYm1pdnZ3enl7en1ybWxza3B0dHR1aHBtamlra3RwbnR0eXByeXRvcnFvd3NvcXB0cnBydXR5a05WbXVscXt2aW5vaWt0Z2RvRktERkVHRUZGR0RHQkNAPjw9OTo6OkBDQD5BQ0RFSUVJSkxGSEhHRkZDQjtBQkM+QENEQ0RHTE5IS05IREhFSU1OTUdJTEdGR0lJTE5LSUdFTkhCRk1LTUxPTU1OTUtISElPUlJTTlJmZmZxb3N4dXt5fGxoam5la3Fsc3BmbWxoaWtsdG1wdXR3cW94dG90c3J2c3BxcnRzcnR1dXZ2WFZ1dWtvdHJrb3ZsaG1lX3BHSURGRkVDQ0NFQERCPj8+Ojs7PTo8PkNBPkFDRUZKRklITEhHR0dGRUNAPUREQj5BQ0NDREdISUdNUEpGRkdLTk9LRkhJRkVERUlKSEpJRkhPS0RJTEtPTU9OT09OSkpJTFJVVVJPV2RgYW1ncXJvcnl6Z2VoaGRpbGdxbGZsbWdpa2xzbHB2dXRwbnZyb3Nyc3V0cXNzdXRzdXZ2dnl2dXR3bGp1dW1ydnFsbmxlckxIRUVIQ0JBQkQ8QkE+QT06Oj0/Oz0+QEI+QEJER0pFSUZJSEdGR0VDQkFBRkZDQkJCREVER0dJRkxRTElPSkpNTElHSEVHRURDSUlIS0pHS1JNQk5OTFBOT09NTk9LS0tPVVdWVVNYX15caWFtaW5ocnNiZWZmZGhoZm5qZm1taGtrbXJpcXZ0c3Ftdm5vcXJzd3Nyc3R1dnZ2dnd2d3d2dHd1anN1bnV0c3FyamtzTUdIRkhCQkFERTxBQEBDPDg6PD45Pzw/QkBAQERGSEVIRkZIR0ZGRENFQ0RJRUNHRUJFR0VGR0dFSk1LSFFNSktISElFRkhIRUNJSUlLTUtPU05EUVJPUFFOT01OUE1MTVNXVlhYVVhdWl1kYGliamlna19lZWZjZ2dna2dna21rbWxwcmh0dHVyc252b3FwcnR4cXNzdXZ1gpF5dnZ0eHV1d3htb3VvcnN1cXFpbnlNSEdISEJCQkZFPD9CQkQ8Nzs9PTo+OkBCPj8/Q0VGREZERUhFREVDREVGR0pFRUpHQ0dIRkhHRUNGSkpHTktMS0hKTEZJSUtIRUtLTE1OT1JUT0hTVFNQUk9RTU5RTk1QV1pWWllWWl1aWGFgYWBeaGVjYGRmaGdqaGhpZmhubGxubXFwaXV1eHJycHVwcHBydXZwdXN1d3V7fn14dnR3dnZ2eHBsdXBtc3RucHJyeE5ISEdJREJDSEU8QEVCRT04OT4+PTw8QUI8Pz5BQUZDRkNESURERUVGR0dHSUZHS0hESUhHSUdGREhLSUdLSE1LSktMSExLTUtJTUtPTk9SVVZPS1VWU1BTUVJMT1FQT1RZWllcWllbXl5dYGJeXGFja2JgZGZncoVoZ2lmam1ucG9uc3JqdHV4cnNzdHJucHF2cnF1cnV1c355jn11dXZ2dnZ4cmh1cWtydGxxdnB0TElLSUtGQkVHRTxAR0NEQDo8P0A/Pj9CQTxAPkJBRkNFRUVJRUZFR0ZISEZISElLSkZKSEhLSEZGTElISEpHTExNTExJTUtNTU1PTFBQUVVWV09LVlZVU1JRUkxPUlJQVltbXV5bXF5eXmBgYWRdY2BlZmBlaGpkc3Nmamdna29ycW9zc25zd3dxdXZ0c21vcnVvcnNwdXJ2cnSBdnV1dXd2dXd0Z3Rya3Fya3J2bnZKS0xKTEdCRURFPEBGRERDOz8/QUBAQENBP0I/QUNIQ0ZGR0lGSkZHRElIR0lISkxISEpKSUxKRkpLSElLSkdLS01NSkpNTE5OTVBLT1BSVFhWTU5UVVRSUlFQTU5UU1JXW11eX11dYF9gYWFgYWNlYmRoYmRpamd2i2xqaWdtb3NxcHFwcHJ5dnJ1dXRzbW1zc21xcm90dXRycHN3dHV1d3Z1dXRlcXNrcHFqcnZud0tNTExNR0NDQUQ8P0VFRUM9QUFDQkNDREFDREFBRUdDSEhJSEdKR0NISUdISkZJTUhJSk1LTkxHS0lIS0tOUUtSUU1TTUtOTk9QUE9UT1dYWFtOU1BXXFpSV1BOVFVUVFhaX2JiX2RhXmBiXmBlYWFjaW5nYmloaG54dmxoaW1vc3JwcXJycnZ0c3Vzc3Nua3NxbXByb3R2cnFxdXZ1c3d5d3V0dWNtdGtvcGpxdG93TE5MTExHRUFARD4+REVGQ0BEQkVEREZCQ0VHQ0NJRkNJSkpJSUtHREtKR0hKSUlMSEpKTkxPS0lMSEpMS1pmSmRcS2xTSE9OX25Va3NbcXBid2NTUGF2dWh1Y2F2YFhucWJkdmluemZbbHRgbGpUX3d2aWpnaWZnbG1qbW9qbW5zcnBycnFyc3Jzc3J0cm5sdG9ucHFxdXVxcXN0dnZ1dXl3dXR0YGt0a3Bwa3FycXlMTkpKSkZDP0BCPz1ERUZEQ0RDRUVERkJGRkdERUtGRkpNTEtMTEdHTUlHSktIS0tJS0tOTE1MTExJTE1MW3NiZHBebG1VTU5mc11mZnFsbnRncGlfYVlubmJwcGJrampmb3F0ZXRub1xvdWdwTUpxeXZrYWBrZWVteGxrdm1ucHNycHJxcHFycXJycnRybW1zbm5vcHN1dHFzc3R1dXV0d3h2dHRibXVrcHBscnJxektMSUhHRUQ/QUJAPkNGR0NGQ0ZFRkVEQ0hISERFS0hHTE5OTE1NRkpOSEpLSklMS0pKS0xNTk5NTUpNTU5bcm9vbnBwbGtNUFFsV01pYnRycGFtbnVcWWxQXG5tWnFta29teHh0c2lwXV9ya3FqVXV5eG9jXmtmYmdwb2pqb3BwcnNwcXBxcXJycXFycnRsbXJtbm5vcnV0cXRydHV1dHV1enZ1dGVudWtwb2xzcnJ5SUtHR0VFRUJCQj5AQEZIQ0dESUZFRUJGSUhIRUhMSkdNTU9MTU5HTE1JTEtJSk1JS0pKS09QT05MTE5OTFxoZHVdbHFXbE5QUW1UWWtea2x2YWxkc1NlY05tWWxcdHBraWx4and1aHBdXnJraFdiY3d8b2NgZ2dhZGl0eWtubnFzc3BxcHFwcnFwcHBydWttcW1tbW9xc3Rxc3J0dnZzd3Z6dnV0aG91bHNvbXNydHZITEZJREVFQ0FCPUJBQ0ZESEdMSEVDQ0hLSUhGSkxMRk5MTFNSTEdMTEhOSklITkhKSklITk9NTkxKTk1KWnNwcG9xcW1sT1FSbllya2dvb3Fxb210XW5YYXRfbm9wb3Fyb251c3R0altedGN3eHJqbnpoYWFjZmJiaW10dXBzdXZzcXBwcW9xdHt/fn13bGtxbmxtbnByc3F0dHN1dXR4eHl4dHVrb3VtdG9udHN2c0hLSElCRUVFQUE+RERCR0RISU1JRkNGSkxKR0ZLTkxGT0pLV1JLR0tKSk5JSEpMSUtKSEhLTU1NTUlLS0tTa2NbaV5faWNyclpfWWpuX2VlVWtfY1thYVFgbGhdalxuaWlkW3BmZHBdWlxrW21xY3BzbGRnY2RnYGBrbXFwbnR5cnVxb3BxbnmFiIeHhoWAdnNua21tb25xcnR0cnR1dXZ5eHhzdW5xdW52cXF2dHdyR0dGSURFQ0ZBQEJGRURHQkhKTEhGQ0dLTElFRkpPTElQSUxbUUpFSEhLTUlISkpLS0lISUZLS0tMR0hLS0xNTUxKS01OVFtcVFBUTFBPTk9PVlFPTlFOT1FKSk9QUWRxaVRZV1xbXFZZW11YXVxcY2ZhYWViY2ZfX2ZrbWhtdHlydHJvcHB0hoeGhoaFhYaHg3pwbW1sa3FzdHRydHZ0dXl4eHV2cXJ1b3ZydHN1dXNHQ0RHRUVBRUNAREhERkdDSUtMSEZER0tMSUVHSVBLTE9LTFdMSUVFSElKSElLSU1KSEZHR0lISElFRkxJSkxPTUpQXFdeUFxbYF5NWFlTXFxiXk1YWk1YYVJLWWFaUl9kXGFYW2RkVlZYXFlaWFxWWVxdYl5kYWFfZWhrZ210dHFxdHBxcoGGhoaFhoWFhYaGhoR9cmtpb3Jzc3N0d3l5eHl4d3h0cnhyeHNxcnVydE9CQ0RMTUJEREJFSUVIR0ZLSktIRUZJSktGRUhIUEtNTUpNUklHRUFIRkpJS0xKTUpIRkRJRkRGR0VGS0hDSk5MTFVfWWBYYGFbYFRYWVReXlpfUllcUF5cWU5eXF5TWl5jXlpdYGNgWV9jW2BeW1RYV1leXWNiY2FjZWhla3Jwb3Bwbm93hoaFhYaCe4CFhYaGhoaFf3VxcHJyc3Z5eXp5eXh4eHZyeXZ4cnF4dnV2YVNKSk1JRUNCQ0dIRkhHSEtKSklERktLS0VGSUpOS05LSExOR0hFPkdHTElLTEtLS0lHREhEQ0RFQUZKRUFLTEpPW2NZX15hX1JUUldfYFxdWV5RWVxNVl9XS1FZW1BaX2FhXV5jYWBiYmJjY2VaUVhVVVxZXWNgX19jZGJob21ubGxsbHWFf4SDeXV8hIWFhYaGhYWGhoN9d3JydHh5eXl5f359eXV5dnZybnp3dnhZUUtGQ0dFQkVISUZHSEhGRklHSEdJS0lMRERLS05NTEtIS0pISUY/R0dOS0tLTUtLS0lGR0NEQERBSElDQEpLSFBdYVpbZF1fVFFSWF1cXFxfWktXXExSXFlJTV5RT1xfYWNjY2NiXGRjYmRjZlhRVVRRW1daYF9dXmFhX2Rsa21qamxudn51gXp8hIWFhYWFhYaGhYaFhoaGgnpyc3V1e4WHh4eGhYSBfnhwend2eFxSTUNASUZDRktKRkZGSEdHSUdGRklMSk5GREtKTU5KTElLSkhJRkJISFFNTEtPTUpLSUdHRUQ/RUNJSUNDSEdFVF1ZXlhfWV9bXVVYWE9dXVFLSlZeWF5bXVVZYFJRX19iYmBgYmJgY2JhZGRiWE9RUVFaUlpdXV1dXl9fZGhnbGpubnB7e3x+e4CCg4SFhIWFhYWEhIWDhISHh4FzcneFh4eHh4eHh4eIh4WDgHx4XFNLQ0FIRkRHTVJIQ1FKRUdISEVGS0lNUEVGSUpLTkxMSUtMSUlIREhLUU9NTVBMTEpLSElDREFFRElHQ0NIRkRXVUVcVF1TVl9YT1RVTlpaTUlKVGBhW19YXl5hXU9ZYVxgYF9iY2JdYWJXYF9UUE9PT1dRXFtbXFxeX2JmZmVsZW9vd3x7gHt9f4CEhISEhISFhYODhYKDgoWFhnpvgYaGhoeHiIeGhoaFhYSFg35JTkZERkZIRElSYlBDVl5JR0dIREZNS1BQRUlJSktOTEtLTEtJSkdFSk5RUU5PT01OTE1IS0FEQUNER0VDQ0ZHQk1IQktLT09OTEZNRkdJSkhHTExNT1BJTE9QT1NPTFBTUlVaWVdZWFhkV09TVFBQTk1OVFJaWFhaXVxgYWRlY2dja2xwc3J5eX97en+EhISFhISEhIKEgH57gYOBfXuFhIaGhoeHhYWFhISEgoGAfUtJRUVIRkdES01dTEdHWExHSEpIR01MUVFITEtLS05NVU5PSkpLR0dLUFNTTlBPTk5OTkhLRmBFRF9MRWdkRk5cSV5bcm1PTVVtWUxEUGBVa1dnSl1XVV5ETFFVTExTVlFSVFhXVFhVVFxVUGZaaGhkWFJqUlZVVFtcW2BgYWJhYmBmaGZua2hyenx9foGEhISEg4ODgX18enJ7gXp7f4KAg4SEhYWBhIWBg4N/fnp7TElGR0ZIRUVLT1NJSkZgVEhJT0pJT01SUUtNTExPUlVST09JTE1HSE1RW1lPUFBOT09PSUpRf1FJfFlZcnRZUW1IcW5vYVZQcXFzUENrc21xc3BTb19ablhdVlxYVWtoVV1WY1pgWVtfVlZYf2p0dXVeX3ZeV2FbW2ZbX2BhYGFdYGFnbXBsYHB3dHiBgYKDhIJ/fX+Adnh6bHZ+dHh9gHx+gIGChHyAg3p/gX9+d3dOSkVITU5CRExMR0lLRVJWTEtOSUtSWFdRTU9PTFFUTk9RT0tLTkdNUFNbWlNRUk9QUFBKSFp4XVR4ZWhaU1VSdmd0bHBibmZqUXJPTXdtanJwc3Jxcm9vb4BdZXp1eHFxenF+c31rdX1iUmh8ZXNzb3Jye3xvfnhugHJfYGBiYVpgX2drbmtibGZnbXd+gYCCfnt4d4B0dnppcn5uc3x+d3h7foCDeHyAdXx/fHxzc05LR2BdR0FFTU1ISkpHSlBPTU1KTlZeWVVMUVNOWFpNU1NSTkxPSFFSVFlXVlBUUFBQUUtIZ3hsY3hybVtLTlZ5cHVtdWJvdlBlZUpmdnFtd2+AamZ4d2lXclFoem1panp6fmx4en9vaG9ZdnZqdnVwgF9yZn1pbHh8b15fX2JhW11iZGdpamRnYmNkbGxwcHN0c3NzeXFyeGJsdWdxeXtzcnV5foFzdXpufH15eHJuTktTdU5DQkZQT0hKS0lLUE9PT01QWmBaWEtUV1BhXlJWUVlSTE9JU1RVWFdXUFVQT05SSktyb3V1cXVxZGliV25McXBeRmh5V3ZUTGl5fXhgeXtzbmFdbW9jUmhxdW5teXB3bHZ0dHJsbl10fnprbXl8a3RsfGtwdnV4Xl9fYl5cX2RkaWdoZWVeYWJpaWlqa25va3FvbWpwYWNmY293eG9tcHN5fm5xcGt7enRyb21MTFtWSEdFR1JQSUxNSktQUVBQUFBXXFhVTVVZVWVYUlJZXlNMTklUVFdXWVdPU05OTlFJUm1IaXdLYGR2dlZYbE9ubHtzYWpnf3ZVTFdraH1sbWx4X1pwenteYHpzY3JveHFoZH1pcnxeVUxsYHZ1a2l1e3ptfnhrfHBcXl5iW15hZGRnZWVlYlpjY2lra3JzcnZnbGloZGdhYWthZ3NybGdsbXJ8a21oa3t0bW1rbU9IS0tISkhIUVBMTk9MS1JSUk9TUldSVlRQV1pWVlRUVGFfUE5NS1RTVFFWVk5OTE1PUEtIUU5QVUxLTFNUVFNUUFZVUVFOUVFYWVJOUFVUWFhYW1tVUlNXW1dYWFpPU1VXWFhSXllXXlZUUFlSV1dXV1heWmdyXltbWVxdX2NaX2NjZGZkY2NiWmNiZ2ZlbW5tdWVlZ2NhZl9dZ2BkbGhmZ2tocHpoZ2dqdWpoZ2lsUUlLTExNS0pTUU1RUE9MVlVUUFRVWFVZVVFaXVZVVFdVWVdPT0xNVlRRTlVTTk9NTFFQTEpSUUtRTUtMUFNVU1FSU1NJSExOT1FSUVBRVFZSWFdcV1NSUFJUVVZTWlFOU1JYVlRZVlVaVlRSVVNUVVdYVlxZXmBdXFpaXFxfY1tdYmNkZmRkZGFZYGFjYWJoaGltYmFkXl9jXVpkXGJtYV5mZWZtc2RpZ2prZWRjZmhQSktMT09MTVNQTlNRUU1YV1VUVVdXV1pVU1xgVldWWVVYU1BQSk5XU1BOVVBOUU5MU1BNT1VTTlJOTU9RVVFVUVJUVU5LTU9RVFRSUlFWV1VZWltZU1VSVFdWVllbVFBUVVhVVVpVV1pWU1JXVlVXW1haX1xVWF5cXl1bXWBgXVtiYmNnZmVkYlhfYWJeYGdkZmVhXl9dXV5aWl9aX2dgXl1dY2hrYWdmaGZkYGJjYk9MTUxRUUxPVE9PU1FPUVtZV1dYW1lYWFZdamRWWFlaV1ZTU09KTlZUUE9VUFBQTk1SUlBSWFRRUU9NUFRWT1hSVFVVT05NUVNWVVRUUlRXVlpdXFpWVlFRVlhWW1tXUVRWVlZWWVRYWFZTUllXVlpeWV1fXlVeXF5gXFtfX19eWmJiZGhnZGRiWGFgYl5eZmNkYGJdXFxcXFlaW1hbYVteXVxfYl9fYmRlYmRfX2BcUE1OTlJRTVJST1NUUU9VXFpaV1tbXFlaW2RxbWhkX1tYVlVXUUxNVlNNTlJPUVJPTFFTUlVaVVNQUE1RWFdSV1NTU1hNT09RVFhWVVVTVVhYW15dW1tWUU5VVlVbXFdSU1dWV1hWVFlbVVRSWlhXXF5aXl9gVWFcYWFdYGJfXGBdY2FjZ2hkZmBZY2BhX19lZF9gYltaXFtcWVpZWFdcWlxbYF5fW15eYWBeYlxZYFtRTk9OVlFQVFFPVFRTUFdcXFxYXlxeV1xeanF3eYBjXFtVVVdQTU9WU05RUU9SVFFMUlRUWVtXVU9ST1NYV1RTVVJSWk9QUlJWW1ZXV1RWWlhcXVtbXVZTTVRVVVtcVlJVVlZYWVNVWlxVU1NdWFpdXlxgYGBWYVtjYl1hZF5cYmFjX2NmaWRmXltkYGFgYGNlX2JeWVpeW1xbWVhZVldaWlphXF1bXVxcWl1gV1tbWlBPT09ZUFVUUlFXUlRQW15eXVtgXGBVXF1oanJ9c2xnXFRXV1FPUlpTUlFUUlRVVEtSV1ZbWVpTT1NRVlZXVE9XUlNaUlRUVFhdV1hZU1hcWF5dWVpdVFVOVVZXXltYUlVVWVlZVVdaXFZTV15aXV1gXWJiXVlfW2VhX2RkXl5jY2FeZWZpZGZeXWRhYGFhYmRgYl5YWl9bXFtYWFhXV1tZW2BcW1tcW1haW15WXlldUU9PUlpQWlRVVlZUVFReXmBeXmJcYFVdXmJreXRsfWtaVVlUUFBTXFRVVFVUVllXTFJbV11bXVJPVVNYV1dUUFhSU1dTVlVVW11YW1pVWl5YX15ZXFlRV1JZWVlfW1pUVVZaWVpXWFpdV1VbXl1eYGFfZGNcXl1dZWFhZmReXmRjYFxnZGhlZGJfZGFgYWBiYl9gXldYXlpcXFpZWVdWXVpdXlpZW1xbV1lcXVZYV11TTlBWWVFdVVZZV1dVWF9fYWFgY11fVF1fYmVldYF6aFdZWVNVU1ZcWFdXVlZXXVhPVV1aXl1cVFJYU1dXVVNUWFJTVlRYV1hdXlhdW1ZdX1hfX1hcVlFYVFlaWmFaXFZXWFtaW1lZWltZV15fYF9jYmFkZFxiXGBmYWRmZF5fZGJiW2ZjaGVjZmBmX19hYWFhYF9eVlVdWVtcW1lbWVldW1tbWFhZW1laWl1fXVRZXVVOU1lWU1xUVldZVlZcYGFiY2BjXl9WW2BkYV96dW9oWVtZVVdUV1taWlxZWFlgV1BVXlxgYFxUVFhQVVdWVFZXUlNVV1paW19eWl9cVl9fWl1eWV1VUllXWVldYlpeV1hbXFtcW1taXFpaX19gYGRiY2RkYmRZYWZjZmZlXmFiYGNeYmNpZGNnX2deYWFjYWFgXl9YVFtaWltbWFtYWFxbWltYV1lYV1xbW2BdVl1dU09WWVZWWlVYVVhXWF1fYmFkYWRgXllZYWRiYGxmaF5bXFpWV1hZXFxdX1tZW2JWVFheXWFjXFJWWVBXV1dXV1ZTVVRYXFxeYGBdYFxXYV5bXltaXlhVWFdbW19gXF9YWVxcXV5fXFtdWVtgYV5gZWNkZWVmYlhjZWRoZ2ReY2BgZWNcZWlkZWlfZl1jYmNhYWBfX1tYWVtZWlpYWVhXW1taW1dYWlRZXVxaYFxVXmJOU1dZVldZWFtcWFdZXmBiYWRhZGFdXllhY2JfYWBgXlxcXFdXW1tdXV9fXFpdY1laWF1gY2RfUlhZUFdXWFlZV1ZXVlxdXmBhYF9iXllhXV1eWVxeWVhVV1tcYF5dX1paXl1eXmFdXFtaXGBiX2JlY2VmZWZiWmRmZmlnYl9jXmFmZFpoaGJmaWNlXmJiY2FgYF9dXVpYW1lZWFhaWFdaW1pZV1hVVVtdXV1gYGJieEtYV1tZVlxbXF1aV1xdX2BiZGFiYV1gWGJjYmFjYWJdW1xbWFdbXF9dYF9dW2BkXVxYW2JlY2FSXFpPWVhaW1taV1pZYF1gYmJgYWNfXGJdX11bXl1ZWVRYXV1fYF9gXFteXmBiY11cWFxeYGJiY2VkZmRlZmRcZWZnaWZjYWJbY2dgXGloYmhpZWRgYmFjYV9gX1xdXFlcWVhXWFlYV1xaWldXWE9YWl1hY2Zmcmt/SllXXFpaX1xbXlxYXVteX2FjYmFhXWJbYmRiYGJiYlxbW1pXWGlxYFxgX11cYWNfXllZY2VkYVNfWlJZWFxdXVtaW1tjYGJiY2BiZGFgY15gXF5eXllYVVtfXl1hYmBeW2BhYmZjX11UXWBhY2RkZmVnZWZmZV5lZmhoZ2RkYFplZ15hZ2hjaGhmY2BiYWNiX19fXF1bWltZWFhYVlpWXFtaVlZWTVhXXGdpa2h1eIF2dnZ2dnZ2dnZ2dnd3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d4eHh4eXl5enp6enp6e3p6ent7e3t7e3t7e3t7e3t7e3x7e3t7e3t7e3t7fHx8fHx8fHx8fHx8fHt7e3t8fHx8fHx8fHx8e3t7fHx8fHx7e3t7e3t7fYmIhoqHhIKCgoOCg4OCgoKCgoKCgoKCgoGAgYCBgICAgYCBgYGAfnx8fHx8fHx8fHx8fHx8fHZ2dnZ2dnZ2dnZ3dnd3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3h4eHh5eXl6enp6enp6ent7e3t7e3t7e3t7e3t7e3t7e3t7e3t6e3t7e3t7fHx8fHx8fHx8fHx7e3t7e3t7e3t7e3x7e3t7e3t7fHx8fHt7e3t7e3t8iYmHiYaFgoGCgoKCgoKCgYKCgoKCgoKBgYGAgICAgICAgIGBgYB9fHx8e3x8fHx8fHx8fHx8dnV1dXV1dXV2dnZ3dnd3d3d3d3d3d3d3d3d3d3d3d3d3d3d4eHh4eHh5eXl5eXl5eXl5eXt7e3t7e3t6enp6enp6e3x8fHx8fHt7e3t7e3t8fHx8fHx8fHx8fHx7e3t7e3t7fHx8e3t7e3t7e3t7fHx8fHx7fHt7e3uHiYiJhYSDgYKCgoODgoKCgoKCgoKCgYGBgICAgICAgICAgYKBgH58fHx8fHx8fHx8fHx8fHx2dXR1dXV1dHV2d3d3d3d3d3d3d3d3d3h4eHh4eHh4eHh4eHh4eHh4eHl5eXl5eXl5eXl5e3t7e3t7enp6enp6enp8fX19fXx8fHt8fHt7fHx8fHx8fHx8fHx8fHx8fHx8e3x8fHx8e3t7e3t7e3x8fHx8fHt7e3t7e4aJiYiFhYOBgoKCgoOCgYKCgoKCgoKBgYGAgICAgICAgIGBgYCAfnx8fHx8fHx8fHx9fX18fHjF1NLS0tLUk3t9fX19fYSMi4uLi454KSkqKiopKz0/Pj4+Pj5tgH5+f397pdfT09PT1r2GiYmJiYiQzNPS0tLT2FolKysrKiVjko2NjIyNiX9/f39/f359fHx8fHx8fHx8fHx8fHx8fHx7fHx8fHx8fHx8fHt7e3t7hIuHh4aHgoGDg4GCgoKCgoKCgoKCgoGBgYCAgICAgICAgYCBgIB+fHx8fHx8fHx9fXx8fH19eNXn5OTk5OeZe39/f39+hpCPj4+Pk3kZGhoaGhocMTMzMzMzMmqCf4CAgHut6eTk5OToyomMjIyMipTd5uTk5eXrVBMbGxsbFF2WkZCQj5GMf39/f39/f319fXx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx7e3uCjYeIh4eDgoSCgYKCgoKCgoOCgoKCgYGBgICAgICAgICAgICAgH58fHx8fHx8fXx8fH19fX12fn9/f39/f3l3d3d3d3d4eXl5eXl7eHBvb29wcHBycnJycnJyd3p5eXp6en6Dg4ODg4SBfHx8fHx8fYSFhISEg4R4c3Nzc3NzeX18fH19fX18fX19fX19fX19fX18fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx7e4CMhomHh4SDhIKCgoKDgYKCg4KCgoGBgYGBgYCAf4CAgICAgICAfnx8fHx8fHx8fX19fX19fXZ0dHR0dHd0dnd6e3h7eHd2d3p4enp5fnl4eHl4eHh5eXl5enp5eXl5enp6eXh4eXl5eXl7e3t7e3t7eXl5eXl5eXx9fX19fX18e3t7fHx8fHx8fHx9fX19fX19fX18fH19fX18fHx8fHx8fHx8fHx8fHx8fHx8fHx8f4uHi4qIhIODgoKCg4KBgoKDgoKCgYGBgYGAgIGAf4CAgH+AgYF+fX18fHx8fHx9fX19fX19d3d3dnZ3fXh3d316eH14d3Z5fXx9ent+e3d3d3d3eHh4eHh5eXl5eXp6ent7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7fHx8fHx8fHx8fHx8fHx9fX19fX19fX19fX19fX19fX19fHx8fHx8fHx7e3x8fHx8fHx8fHx+iomNjImFg4SEgoKDgoGCgoKCgoKBgYGBgYCAgICAgICAf4CAgH19fXx8fH19fX19fX19fX13d3d3d3p9eHt4fHx3e3h3dnp9fXx9fH58d3h4eHh4eHh4eHh5eXl6enp6e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3x8fHx8fHx8fHx8fHx8fHx8fX19fXx9fX19fX19fX19fX19fHx8fHx8fHt7fHx8fHx8fHx8fH2Kio2NioWDhISCgoKCgYGCgoKCgoGBgYKBgIGBgICAgIB/gIGAfXx9fX18fX19fX19fX19fXd3d3d3fX55d3d4e3p7eHd2e318eXt9fnx4eHh4eHh4eHh4eXl5enp6ent7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3x8fHt8fHx8fHx8fHx8fHx8fH19fX18fH18fH18fHx8fX19fX18fHx8fHx8fHx8fHx8fHx8fHx8foqJjo2JhISEg4KCgoKBgYKBgoKCgYGBgoGAgYKAgICAgH+BgIB8fH19fX18fX19fX19fn5+d3d3d3d5fHl7eHx9eXt5enl6fXt8fXx+e3h4eHh4eHh4eXl5eXp6enp7e3t7e3t7e3t7e3t7e3t7e3t7e3x8fHt7fHx7fHx8fHx8fHx8fXx8fX19fX19fXx8fHx8fHx8fXx9fX19fXx8fHx8fHx8fHx8fHx8fHx8fHx/iIeNioeFhoaDg4ODgoGBgoGCgoGBgYGCgYCAgoF/gICAf4CAgHx8fX19fX19fX19fX5+fn53d3d3d3Z4eHl3eXp4enh5eXh7eHp7eXx4eHh5eXh4eHh5eXl5enp7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t8fHx8fHx8fHx9fX19fX19fX19fX19fX18fH18fH19fX19fH19fX19fHx8fHx8fHx8fHx8fX+HiIyIhoeHhIKDhISCgYKBgYKCgoKBgYKBgIGBgYGAgIB/gIGAfHx9fX19fX19fX1+fn5+fnd3d3d3d3d3d3d3eHh4eHh4eHh4eHl5eHl5eXl5eXl5eXl6enp6ent7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7fHx8fHx8fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fHx8fHx8fX19fHx8gIeIi4eHiYWEg4SDg4KBgYGCgoGBgYKCgYGBgIGBgYCAgICBgX97fH19fX19fX19fn5+fn5+d3d3d3d3d3d4eHd4dnl5eHh4eHh5eXl5eXl5eXl5eXl5enp6enp6e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7fHx7fHx8fHx8fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fHx8fH19fXx9fXyBhoqKiYmIhIOFhISCgoGBgYGCgYGCgoGBgYCAgYGAgIGAgIGBf3x8fX19fX1+fn5+fn5+f394eHd4eHh4eHZxZGpeam15eXl4eXl5eXl5eXl5enp6enp6enp6enp7e3t8e3x8fHt7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3x8fHx9fHx8fH19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fIGFiYqJioeEhYWEg4KBgYGBgoKBgYKBgYGBgYCBgYCAgYCBgIF+fH1+fn5+fn5+fn5+fn9/f3h4eHh4eHh5bWRiZV9fXm94eXl5eXl5eXl5eXp6enp6enp6enp6e3t7e3t7fHx8fHx8fHt7e3t7e3t7e3t7e3t7e3t7e3t7e3t7fHx8fHx9fHx8fH19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18goWKiomJhISGhYSDg4KBgYKCgoGBgoGBgYKBgIGBgICAgICBgH58fX5+fn5+fn5+fn9/f39/eHh4eHh4eW5kZWdlZGJeZnh5eXl5enp6enp6enp6enp6enp6e3t7e3t7e3x8fHx8fHt8fHt7e3t7e3t7e3t7e3t7e3t7e3t7fHx8fHx8fHx8fHx9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXyChouJiIqEhYaEg4OEgoGBgYGCgYKCgYGBgYCAgYGBgIB/gIGBf3x8fn5+fn5+fn9/f39/f394eHh4eHl3Z2VkZWZkZWFfaXl6enp6enp6enp6enp6ent7e3t7e3t7e3t7e3t8fHx7e3t7e3t7e3t7e3t7e3t7e3t7e3t7fHt8fHx8fHx8fHx9fX19fX19fX19fX19fXx9fX19fX19fX19fX19fX19fX19fX19fX19fIKGi4eJh4SEhoSDg4WBgYGBgYKCgYGBgYKBgICAgYGAgYCAgYF+fHx/f35/f39/f39/f39/gHl5eXl5eWtlYWJlZWFlZV5ieHdze3p6enp6enp6enp6e3t7e3t7e3t7e3t7fHt7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t8fHx8fHx8fH18fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19g4aLhoiFhYaEgoOEhIKBgYGBgoKBgYKBgYGAgYGBgYGAgIGBgn98fH9/f39/f39/f3+AgICAeXl5eXl0Y2NlZGNmY2doZGZsZF5ze3p6enp6enp6enp6ent7e3t7e3t8fHx7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3x8fHx8fHx8fH19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX1+fn6DhouGhoaGhYODg4SDgYGBgYGCgoGBgYKBgYCAgYGBgYCAgYGBfnx8f39/f39/gICAgICAgIB5eXl6d2RhY2diYmRdW2VfYV1eYGFoeHp6enp6enp6enp6e3t7e3t7fHx8e3x7e3t7e3t7e3t7e3t7e3t7e3t7e3t8fHx8fHx8fHx8fH19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX1+fn5+fn5+foSFi4eGhoaGhIODg4KBgYGBgoKCgYKBgoGAgIGBgYGAgYGBgYF+fX1/gH+AgICAgICAgICAgHl5eW9vYmJiZF5jZ19dYWFgXF9kYlttfHp6enp6enp6enp7e3t7fHx8e3t7e3t7e3t7e3t7e3t7e3t7fHx7e3x7fHx8fHx8fHx8fH19fH19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX5+fn5+fn5+fn5/hIiLhoSHhoaEhIODgoGBgYGCgYGBgYKCgYCAgYGBgYGBgYGBgX5+fYCAgICAgICAgICAgICBeXpwXWJlZGJkXmZnZ2BZYmJhY2VfXF1ze3t6enp7e3t7e3t8fHx8fHx8fHt7e3t7e3t7e3t7e3t7fHx8fHx8e3x8fHx8fHx8fHx8fHx9fX19fX19fX19fX19fX19fX19fX19fX19fX19fn19fn5+fn5+fn5+fn5+foCFjIqEhYaGhYODg4SCgYGBgYKBgYGBgoKCgYCBgYGCgICAgIGBf35+gICAgICAgICAgIGBgYF5emxiZGdjYmdmYWBgZGFiZWRjZGNeXGJ1fHt7e3t7e3t7e3x8fHx7e3x8fHx7e3t7e3t7e3t7e3x8fHx8fHx8fHx8fHx8fHx8fHx8fH19fX19fX19fX19fX19fX19fX19fX19fX1+fn5+fn5+fn5+fn5+fn5+fn9/gYeMiYWGhoeFg4SDg4GBgYGBgYKBgoKCg4KBgIGBgYKBgYGCgoF/f36AgICAgICAgIGBgYGBgXp7dGdnZmZkZGZmYF5fYWNlaGRlXmJkYHR8e3t7e3t7fHx8fHx8fHx8fHt7fHt8fHt7e3t7fHx8fHx8fHx8fHx8fHx8fHx8fHx8fH19fX19fX19fX19fX19fX19fX19fX19fX19fX5+fn5+fn5+fn5+fn9/f39/f3+CiYqIhoaIhoWDhIOCgYGBgYGBgoGBgoKCgoGAgYGBgoKBgYKCgX9/f4GBgYGAgYGBgYGBgYGBenptaGNjZ2ZnZWdmZmdiZWRlYmdbYmVgdnx8e3t7fHx8fHx8fHx8e3t8fHx8e3x8fHt7fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx9fXx9fX19fX19fX19fX19fX19fX19fX19fn5+fn5+fn5+fn5+f39/f39/f39/f4SJioiGiYeFhYSEg4KBgYGBgYGCgYKCgYGBgYGBgYKBgoGBgICBgH9/gYGBgYGBgYGBgYGBgYF7emlpZGNqZmFgZmVjY2NnaWRjYmBiZGJ0fXx8fHx8fHt8fHx8fHx8e3x8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fH19fX19fX19fX19fn5+fn5+fn5+fn5+fn5+fn5/f39+fn9/f39/f39/f3+AhIqMiIeJhoSFhYOCgYGBgYGBgYKBgoGBgYGBgYGBgoKBgYGBgYGAgH+BgYGBgYGBgYGBgYGBgXZzZWRnY2RmZWJlZmdkZmhmZWNgYGNkYHF9fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fXx9fX18fHx9fX19fX19fX19fX19fn5+fn5+fn5+fn5+fn5/fn5+f35+f39/f39/f3+AgICFioyJiIqJhoaDgoKCgYGBgYGBgoGBgoGBgYGBgIGBgYGBgYGCgX+Af35/foCCgoKCgoKCgoKCc3NnZWRkZWlqaGZnZ2NhZmZlZmdmZWVjdX18fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fX19fX19fX19fX19fX1+fn5+fn5+fn5+fn5+fn5+fn5+f39/f39/f39/f39/gICAgICAgIWLioqJioeHhoSCgoGBgYGBgYKCgYKBgYGBgIGBgoKBgYGBgYGAf4B+dHRzdX1/goCAfn5/gYB0cmdkZWNmaWppZWNlY2BmZGRnZ2JiZWFwfXx8fHx8fHx8fHx8fHx8fHx9fX18fHx8fHx8fHx8fHx8fHx9fX19fX19fX19fX19fX19fX19fX1+fn5+fn5+fn5+fn5+fn9/f39/f39/f39/f39/f39/f4CAgICAgIB/houLiouLh4eHhIOCgYGBgYGBgYKBgoKBgYGBgYKCgYCBgYGBgoCAgH5zc3NzdHV4dXV0dHV2dXVwZmNmZWhoaWdoZ2VmZWJfZGVmY2BiZ3d8fHx8fX19fX18fHx8fH19fX19fX19fXx9fXx8fX19fX19fX19fX19fX19fX19fX19fX19fn5+fn5+fn5+fn5+fn5+fn5+f39/f39/f39/f39/gIB/f3+AgICAgICAgICHjIyIi4qHh4eEhIKBgYGBgYGBgoGCgoGBgICBgoGBgYKBgoKCgYCAfnNzc3Nzc3NzdHR0dHNzdW9jY2FnZWhoZ2pmZGVnZmhmY2JlYl5ieX18e3t8fX19fX18fHx9fX19fX19e3x9fX19fX19fX19fX19fX19fX19fX5+fn5+fn5+fn5+fn5+fn9/fn5+fn5+fn5/f39/f4CAgH9/gICBgICAgICAgYCAf4CAgYGAgIeLi4iNiYiJhoSFgYGBgYGBgYKCgYKCgYGBgIGCgoGBgYKBgoKBgIB+dHNzc3Nzc3Nzc3Nzc3N1cmdlZWRlamhoZ2ZpaGdjZWViZGNoZGd7eHVzc3R2dnl4dnR0dHZ3d3d2dHR0dXV4d3h4d3d6e3x9fXx9fn5+fn5+fn5+fn5+fn5+fn5+fn5/f39/f39/f35/f39/gH9+fHt7fX58eXl2dnZ5fHx6end2d3l7fXt4hIyMioyHh4iEhYSBgYGBgYGBgoGBgoGBgYGAgYKCgYGBgoGBgoGAgH51c3Nzc3Nzc3Nzc3Nzc3VzaGVnaGVrbGhqZ2lqZ2dnZmRkYmVkbnV0dHNzdHNzc3Nzc3Nzc3Nzc3NzdHNzc3Nzc3Nzc3N0dHV1c3V3eHl7fn59fn98f39/f39/f39/f314fH5+fXx4dXZ3eXd4dnRzc3N0dXRzc3Nzc3NzdHNzc3R0c3R0dHODjI2KiYeIhoOGg4GBgYGBgYGBgYGCgYGAgYGDgoKBgYCBgYGBgYCAf3VzdHRzc3Nzc3Nyc3NzdnZpY2hqaGpsZWZpbGhgZmVkY2BkZGZ0dXV1dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHRzdHRzc3Nzc3R2dnV1d3V4fH9+fX9+fHp4dXN0dXV1dHNzc3Nzc3N0dHR0dHR0dHR1dXR0dHV1dHR1dXR1dXV1dIaMjYuIhoeEhIWCgYGBgYGBgYGCgoGAgYCBgYKCgoGBgIGBgYGAgIB/dnNzc3Nzc3Nzc3Nzc3N2dnNnZ2pmaGdmaGhmZGlnY2NnZWVmcHZ1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dHR1dHR0dHR0dHRzdHR0dnV1d3Z0c3R0dHR0dHR0dXV1dXV0dXV1dXV1dXV0dHNzc3N0dHNzdHR0dHR1dXR1iY6MjIqHh4SEhYKBgYGBgYGBgYKCgoGBgICAgoKCgoGBgYGBgYCAgH93c3Nzc3NycnJyc3NzcnZ2dW5kXWNnZWlraGVoZ2dqamlnZXB2dXV1dXV0dHRzdHR0dHR0dHV1dXV1dXV0dHV1dHR1dXV1dXV1dXV1dXR0dHV1dXV1dXV0dHV0dHV1dXV1dXV1dXV1dXV1dXV1dXV0dHNzc3Nzc3N0dHNzc3Nzc3R0dHR0dHWKjoyMiYaGhIeFgoGBgYGBgYGBgoKBgYGBgYGCgoKCgYGBgYKBgYCAf3hzc3Nzc3JycnJyc3NzdnZ3d2liaGhnamtpaGZkZGVmaWhwdXR0dHRzc3JxcnJ0dXV0dHR0dHR0c3NycXFxcXNzdHR0dHR0dHR0dHV0cnJyc3R0dHR0dXV1dXV1dXR0dXR0dHR0dHR0dHR0dHR0c3Nzc3Nzc3Nzc3Nzc3N0dHN0dHR0dHR0dYuOjImGhYWFh4SCgYGBgYGBgYGBgoKCgYGAgIKCgoGBgYGBgYGBgIB/eXNzc3NycXJycnJzc3N3d3d3bGpoZGhpa3Z6a2VmZWhnbXJzdHN0c3JwcHBxcnN1dXR0c3Nzc3JycXBvb29vcHFzc3NycnJyc3R0dHNxcXFyc3R0dHR0dHRzc3Rzc3N0dHR0dHRzdHR0dHR0dHRzdHR0c3NycnFxcnJzc3Nyc3NzdHR0dHN2jZCMh4eFhYSEgoGCgoGBgYGBgYGCgoKBgYGAgYGCgoGBgoKBgYGAf395c3NycnFxcnJycnNzc3d3d3dzc2pnaWloeX99cW51bG5wcXJycnFxcG9wcXFxc3R0c3NycXFxcG9ubm1ubW5ubnBxcnJycnJycnJzcXBvb3BxcnJzc3JxcnJycnJycnJycnJzc3Jzc3Nzc3Nzc3Nzc3Jxb29ubm9vcXJzc3Jyc3NycnNzcnaPj4uHhoWFhYOCgoKBgYGBgYGBgYGBgoGBgYGCgoKBgoGCgYGCgX9/f3hxcHBwcXFycnJyc3Nzd3d2dnd2cnF0c252f352c3hwcHBycnJycXFwcHFxcXJzc3Nzc3JxcXBwb25ubm5ub25vcHBxcXFxcXBwcXJwb25vcHFxcXFxcHBxcXFxcXJycnJycnJycnFxcnFxcnJycnFwb29ubm1ubm5vcXJycnJycnJyc3JxeI+OjYaDg4aEgoOCgoGCgYGBgYKBgYGCgoGBgYKCgoKCgoKBgYKBf4B/d29wb3BxcnJyc3Nzc3J2dnZ2dnZ3dnZ1c3l/fnd3d29wcXFxcXFxcHBwcXJycnNzc3JycXFwcHBwb29vb29vb29wb3Bvb29vcHBxb29vcHBwcHBvcG9wcHFycXFxcnJxcnFxcXFxcXFxcHBwcHBxb29ubm5tbW5ubm9wcXFxcXFxcXFxcXB7j42NhoODhYOCgoKCgYKBgYGBgoGCgIGCgoGCg4KBg4KBgYGAgYF/f392bm9wcHBxcXFxcXBwcHZ2dnZ2dXR0c3NxfYB9fX9zb3BxcXFwcHBwcXFwcXFxc3FycnFxb3yCb3Bwb29wcG9vb29vb29vb3BxcXBub3Bwb29wb29wcnJycnFxcXBxcnFwcXFxcHBwcHBwcHBwb29ubm1ubm5ubm9ub3BwcHFxcXFxcXFxcIKRjoqEhIOFhIOCgoGBgoGBgYKBgYGBgYGCgoKCgoKCgYGBgYCBgX9/gHVvb29wcXFxcXBwcHBwdnZ2dXRzcnJycnGAgoCBeXBwcHBvcHBwcHFxcXFxcXCHhnBycXBzmIJucHBwb3BxcHBvb29wb29vcXFwcG9wcG9vb25vcHFxcHBwb3Bvb3BwcHBwcHBwcHBvb29vb29vbm5tbW1ubm5ub25vb3BvcHBwcHBwcHBwiZCMiISDhIaDg4KCgYGCgoKCgYGBgYCAgYGBgoKBgYGBgYGBgIGBgH+AdG5vb3BxcXFwcG9vcG92dnVzcnFxcXFxcICDg39ycHBwcHBwcHBwcHFxcHBxcX2hgnByb4uefG9wcHFwcHBwcHBwcHBvcHBxcXBwcHFxb29vbm9wcHBvb29vcHBvb3BwcHBwcHBwcHBvb29vbm5ubm5ubW5ubm1ubm9wcG9vb29vb3BzcXWPj4uJg4KFh4ODgoKBgoGCgoKBgYKBgYGBgYGBgYGBgYCAgYGAgYGAf4B0b29vbm9vb29vb29vb3Z1dHNxcXFxcXJygIKCgXRxcXFxcXFxcXFxcXFxcXJxdJ2hdnF3n5x9b3FxcXFwcHBwcHFxcXBxcHBwcXBwcHBwcHBwcHBwcHBwcHFxcXBxcXBwcHFwcHFxcXFxcXFxcXJxcnFwcnRycnR0dHR1dnRzdHR0dXd3gpCPi4iDgoaHhISCg4GBgYKCgoGBgoGBgYKBgYGBgYGAgICBgYCBgYB/gHVvb29vb29vb25vb29vdXRzcnJycnJycnKDg4OCdnFycnFxcXJxcnJxcXJycnJxmKiQb4KjnX5wcXFycXFxcXFxcXFxcXFwcXFxcXFxcnNzcnJzc3V1dHR0dHR0dHV2d3d3d3d3eHh4eHd3eHh4d3Z3dnV2dnZ2d3h6e3x7e3t6enp6enyGkI2LiIODiIeHhYODgoGCgYKBgYGBgYKCgoGBgYGAgYCAgYGAgIGBgH+Ad3FxcXFxcG5ucG9wcG92dHV1c3Nzc3NzdYiDgYN5cnNzcnJyc3Jyc3Nzc3JzdHKTqaR5iKCdfHJzc3Nyc3N0dHV1dXV1dHV3eHd3d3d3eHh3eHh4eXl5eXl4eHl5eXp6e3t7e3t6enp5eXh3d3d1dnV2dnd5enp7fn5+fX1+fn5/gH5+gIyQi4qHg4WIi4iEg4SDgYGCgYGBgoGBgoKCgoKAgYGBgYCBgYGAgIGAf4B8enp5eXx5eHh2dXZ2dHl2d3h3d3Z3dnZ6fnx+fXx2dnd3dnV4enh4eHh4d3h5eZ+0qaSoqJd9e3l5eXh4eXl6enl5eXh4enp5eXh4eHh3dnd3eHh3eHh5eXp7e3p8fH1+fX9/f359e3t7e3p5enl5e3t/foB/fn5/fn19fX5+f35+fn6AjpCNioeEhoqLiIaGhIOBgoKBgYGCgYGCgoKCgoCBgoKBgYGCgYCBgIF/f4B/fn19fX9/f318e3t7eXh4eHh5eXl4eXh5eXl4enp6enp6e3t7fH1+fHt8e3uJr6ahtauso357enp4eXh4ent6enp5eXp8fHt6enx8fHp6ent9fHx+fn+AgoGAgYKAgH9/gYGBgIB/f35+fn5/fX1+f4CAf35+f39+fn9/f39/gH+Af4OQjoyHhoWIi4yIh4aFg4GCgYGBgYKBgoKCgoKBgYKDgoGBgYGBgIGBgIB/goOCgoGBgX99f39/f4F6enh4d3h4eHh5eHh5enp5e358enx9fXt8fX19fX19fZillqKyoJmnk32Af319fYCDgoCAf318fXx9fXt9fXx8fH19fX1+gYGChISDgoB/gYGBgH9/f4B/f39/f39+fn9/f39/f35+f3+Af39/gICAf4CAgICAhJCPi4eGhoiLi4mKhYaDgoKCgYGBgoGCgYKBgYGBgoOCgYCAgYGAgIGBgH+ChIKCgICAgH9+fn+AgH9/fn18fX19fYB/fX+Af36AgH9/fn9/gICBgICBgIGBnJyOoLCgn6KfgICBgH5+f39+f4B/fn5+f39/gYB/f4CBgYCAgYOEgoGCgoGCgH+AgYCBgYGAgH+BgICAf39/gICAgYGBgIGBgYCAgICBgoGBgYCAgYGFjo6MiYaHiYyLi4qGhoOCgoKBgYGCgoOCgoKBgIGBgYKCgICBgYCAgYGAf4KFg4KBgYCAf39+fn+AfX5+fn19fX5/fn9/f35+fn+AgYCAgICAfn9/gICBgYCXmo6YsqGYlpyFfH5+foB+fn5/f35/gIGBgoKDg4KCg4KBgYKDg4OCgYGBgYKBgoKCgYKBgoGBgYGBgoKCgYGCgYKCgoGBgoKBgYKCgoKCgYGBgoKCgoaPkY+KiImKjY6MiYaFgoKCgoKBgYKCg4KCgoGBgYGBgYF/gIGBgYCBgIF/gYWEg4KCgoGCgYCAgIB8fHx7fH18fH9+fn9+fn5+f35+f39/f39/gH5/gIF+fp+rpJakm5uWoJ+Gf35+f4B/gIF/f39/f3+BgYGCgoCAgYKDg4SDg4ODgoKCgoKCgoKCgoKCgoGCgoKDg4OCg4ODgoKCgYKCgoODg4ODgoKCgoODg4KCh5KTkIuKi4uPj42Kh4SCgoKCgYGBgoKDgoKBgYGBgIGBgICAgYGBgIGAgYCAg4SDg4OEg4ODgoKCgXx9fHx9gn1+f4GCiIGCgoSCgYGDg4GBgYKDgoODho2fsqiioJidnaaoraigmZGHgYCAgICAgH9/f3+AgICAgH9/gYODhYSEg4SDgoKCg4OCgoOCgoODg4ODg4SDg4KEhYWDg4SEgoKDhIOCg4ODg4OCgoODgoCKlJOPioqMjpGPjYuGg4KCgoKBgYGBgoOCgYGBgIGBgoGBgICBgYGAgYCAgH+BgoODg4SEhIOCgoKCfXx8fn6AgYOAg4OChIaFhoaFhIWFg4ODg4ODho2grbGmm5qgm56cnJ2hpKOdlIeDg4KDg4ODgoGAgIKCgYOCgYKCg4OEhYWEg4OChISEhIOEhISDg4OEg4ODg4OEg4SDhIWEhISDg4ODgoKCgoKCgoKBgYKCgo+UlI+Njo6RkY6KiISCgoKCgYGBgYGCg4GBgIGBgYGBgYCBgIGBgYCBgICAgIKChIKChIOCg4ODgoJ9fX2AgH+AgoGDg4ODhIaEhIOEhYWDg4GBg4OCg4uXmpeWmKCanZ2dmpqYkImGh4eGhoeHhoaEgoGCg4SDg4ODg4ODhISFhYWDhISFhISEg4KBg4OCg4SEg4KCg4SCg4ODg4OCgoKCgoKCg4OEhIOFhYWFhoaIk5OTkI+PkJKRjIqIgoKCgoKBgYGBgYKDgoKBgIGBgYGBgICAgYGBgICAgICAhISEgoKCgoGBgoKBgX+AgYOCgICAf4CCgoGDg4KCgYODg4SDg4GDhYSCgYGGjpSTl5qcnJuUj4mHiIiHh4eIiIiFhIOBgIGBgoKCg4GCg4SEhYSDg4OEg4OEhIOBgYGCg4OEhISDg4ODg4OEhIODgoSDg4ODhIWFhoeHh4eIiIiJiY6Tk5KOj46Rko+LiYeCgoKCgoKBgYGBgoKCgoGBgIGBgYGAgICAgYGAgIGAgICDg4KCgYKCgYGAf4CBhYWFhoOCgYB+fn+BgoSCgYKDhIOCg4ODg4KChISDhIODiJCTjpSYkoeDgoWFhYOEhIWFg4KBgH9/gIB/gIGEg4OEhYWEgoKBgoOCg4OFhIKDhISEhYaGhoaGhoWFhoeHhYaIh4aHiIeGhoaIiYeGhYaGhoeIkZOSkI6QjpGRjImHhYGBgoKCgoGBgYGBgoOBgYGBgYGBgICAgICBgYCAgICAgISEg4KBgoGAgYGAgYKIh4aHhYSCgH99fX6AgH+AgYGBgYGBgoGBgYKDgYKCgoGAh5uHi4eCg4KBgICAgIGAgICAgH9+gIGBgYKCg4OEg4OEg4OCgoGBgoODg4SEg4SEhIOFhYaFh4eIh4eHh4eHh4eGhoaGh4WFhYaGhISEhIWEhYaSk5GOjo+OkI6JiYeEgoKCgoKCgoGBgIGCgoKCgoKCgYGBgYGAgYGBgICAgYGAgoSDg4KDgoGCgYKDg4iHh4iHhYSCgX5+gICAfn5/f4CBgYGCgoCBhI2DgH+AgIB/g4iOgIGCg4OAf3+AgICAgICAgICDg4KDg4ODgoOBgYKCgoOCgYKCgoOCgoSDhISDg4SEhYWFhYaGhoaFhISEhYWEhIWFhYSEhISDhISEhISEipSTkZCQj46NiYaFhIOBgYKCgoKCgYGAgYKCgoKBgoKBgYCBgYCBgYGAgICAgYGAg4OCgoOCgoKBgoOCiImJiYiHhYSDgYKEhIOBgoKCg4SCgoSEgoOJloiEgoSCgn9/jJWCgoGChIOBgYCCgoODgoGDg4SDg4SEg4OCg4KDg4ODg4KCgoKCgoGDhISEhYSFhYWFhIWEhIWFhYWDg4OEhISEhYWFhISEhISEg4ODg4OOlZKRkZGPjYyHhYODg4GBgoKCgoKBgYCBgoOCgYCCgYGBgICAgIGBgYCAgICBgICDhYSEhIODg4SDhIOGh4mIhoWDhIODg4WDgYCDgoWFhISDg4OChI6Zi4OFhISEgoCRmYaCgoKEg4OChYKBhIWEg4ODgoODhISDg4ODg4SFhISDg4KCgoKCgoSEhYSFhYWFhYODhYWFhYaFhoWEhIWEhYWGhYWFhIWEhISDhIODhJGUk5OTkI2MioWEhIODgYGCg4KCgoKBgYGCg4KBgYKBgYGBgICBgIGBgH+AgIGAgYaGhoaGhoaHh4aGhYSDhYaCgIGBgYGHgoB+f4GBkIyDgX9+fXx9jJyOgIKBgYKChZSUjIGCgYKDgoWTg4GDhYODhIODg4OEgoKEhIOEhIWEg4OCgoKCgYKCg4ODg4SFhYWFhIOEhYWGhYWEhISEhIOEhIWFhYWFhIODhIOEg4KGlJSTk5KPjYyIg4SEg4KBgoODgoKDg4GBgoKBgoKCgYGCgYGBgYCAgYGAgICAgICAhYWFhYaGh4aGhoWGg4ODg4GAgoKCgYKAf35/f4GWl4mAfX19fXuBmIyAg4GBgYCOlIyQgYKBgoKCkZSBgYODgoODg4KCg4OBg4SDg4ODg4OEhIKCgoKDgoKDg4ODhIWEhISEg4OEhIODg4OEhIODg4ODg4SDg4ODg4KDg4KDgouUk5KTko2NioaDhIOEgYGCg4ODg4ODgoGBgoGCgoKCgoKBgYGBgICBgYCAf4CAgICDhISFhYSFhYWEhIWCg4KDgoKDg4OBgICAgICAgZWfin5+gH2Hi36EhIOEgoODgo2JhYyCgoOCg4aWlZCMgoKDhISDg4ODgoKDg4KCg4KDg4WEg4ODg4SDg4SEhISEhYWEhIWEg4SEg4OEhISEhISEg4SEhYSDhISEhIODgoKDkJSTkpKPi4yIhoSFg4OBgYKDg4ODg4OCgYGCgoKCgoKDgoCBgoGAgICAgIB/gICAgISDhYWEhYWFhYSFhYOEhIWDg4SEhIKCgoOCgoSBkaGKf4yEfYaJgH6FhYWEhYJ/fX19gIOEg4SEi5mgqqibioSOiYOEhISEg4SEhIOEg4OFhoWFhYSFhYWFhYSFhoaGhoWFhYWFhYWFhYWGhoWGhoaFhoaGh4aFhYWFg4SEhIeTk5ORko2KiIWGhYWCgoGBgoODg4OCg4KBgYKDg4ODgoKBgIGAgICAgICAgH+AgICAhYWFhYWGh4eGhYWFhISFhYSEhISEg4ODg4OEhYOJkYOEi4WCgYF+fYGHhoOAfn5/f39/f4OEhIWKk5igpaSbjZaHhYSFhYWEhYSGhYWFhYaGhoWGhYWGhYWGhoaHhoaFhIWFhYWFhIWGhoaHhoaGhoaHh4iIiIaFhYaFhYWGjZSTkpGQi4qHhoeGhIGCgYKDg4ODg4KDgoGBgoODg4KAgYGBgICAgICAgICAf4CAgICHh4eGhoeHiIeHhoaEg4ODhIODg4OEg4ODg4OEhISEgYKCgYmBf359foWCf39/f39/f36AgISEhpWXlZefn56dkoeIhoaFhoWFhoeHh4iGh4eGhoaHhoeGhoeHhoaGhYODhIWFhoSFhYaGh4eHhoaGhoeHh4eIiIeGhoaHh4eRlJORkZCLiIiFhoWDgoKBgoODg4ODgoKDgoKCgoOCgYCBgICBgICAgIGAgIB/gICAf4aHiIeHh4eIiYmIiIODgoKDgoSEhIWEg4KCg4SEhIOBgICAhIR/fn5/gH9/f39/gIB/f4B/f4WMnJual5qcm5mOh4iHiIiIhoaHiIiJiYmIh4aHh4eJiIaHh4eHhoeFg4OEhYaGhYWFhoaGh4eFhoeGh4aGh4eHh4eHh4eFh5OTkY+RkIuHhoWFhIKCgYGCg4ODg4ODgoKCgoGCg4KCgIGBgYCAgICAgICAf3+AgYB/hoiIiIiHh4iJiYmIg4KCg4ODhIWHh4aFg4OFhISEg4GAgIGMiYGAgYKCgYGBgYB/gH9/fnt6f5mXipSZmZiVlIyJiYmKi4qIiIiJiYuLioqIh4eIiIiHh4iIh4eGh4aEg4OFh4eHhoWFhISDhYWEhYWGhISEhYWFhoWGhYOJlJKQj5GOioaFhoWDgYGCgoKDg4ODgoKCgoKCgoKCgYGBgYGBgYCAgICAgIB/gICBgH+GiYiIiYeIiImJiIiEgoKDg4KDhImKh4aEhIWEg4OCgICAhISCgoKCgoKCgH9+fX19fX5+fHt8mpV/gZaYl5WTjYmJiImLiomJiImIioqJi4mGhoaGh4WGiIiIiIaGh4SDg4SHiIiIh4WCgoGDg4KDg4SCgYKDgoGEg4SDgY6TkpCPj4uJhYWGhIKBgYGBgoODg4OCgoKCgoKCgoGBgYGBgIGAgICAgICAgH+AgIGAf4WIh4eHhoeIiIiHh4SCg4OCgoOFiYqJh4WHhYSFhYKAgYOEgoOCgoKDgX59fX5+fn5+fn1+fX2Bl4+MmJaYl5OJh4eHh4iHh4mGh4aIh4eJiYODhIOFhISFhYaIiIaFg4KCg4WHhoeGhoSCgoOEgoODhIKBgoGBgYODhIOEkZKQjo+Oi4eEhoaEgoGBgYGDg4ODg4KCgoKCgoKCgYGBgIGBgYCAgIB/gIGAf39/gIB/hYaGhYaGhoeHiIeGgYKEhIOChYeIi4qGhIaEgoaGgoKEhIODg4OCg4F9fH1/gH9+fn59fH1+fHqCmp+cmI2Ki4OEhIaFhYODhYSEhISEhIWEgoKCgYSEgYKDg4WGhYSCgoGCgoODhYSEhIWEhIaEg4SFg4KDgYKDg4SFhIeSkY+NkIyJhoSFhIWCgYGBgYODg4ODgoKCgoKCgoKBgYGBgYGAgICAf4CAgYB/gICAgICDhIWEhYWFh4eHh4aAgYGFg4OEhYSHiIWCgICAgX9/gYSEg4ODgoKAfX1/gICBf31+fn18fX17enmHoJ6ajIeIgIKBgoKBf36BgYGCgYOBgoGCgoKBg4SAf4CAgYKCgICAgYCBgoGDgYGChIODhYSCg4SDgoKBgoSDhYWGi5ORj4+Pi4iFhYODhIGAgYGBgoODg4KCgoKCgoKCgoGBgYCBgYCBgH9/gIGBgICAgH+AgIKCg4OChIOEhYWGhn+BfoCBgICAf4GDgn9+fn5+fX+ChIOCg4ODgX59fn+AgIGAfn19fX1+fXx6e3qPm5eWkol+gH9/gIB+fYB/f4CAgX+AgIF/f4CBgX59fX+AgX9/fn+AgH+AgICAf4CCgICCgYCDgYGAgYGBgYKEg4aPkpCOj42Kh4eGg4ODgYGBgYGCg4ODgoKCgoKCgoOCgYGCgYGBgICAgH+AgICAgICAf39/gYGDhIGCgoOCg4SFgIB/fH19fn19fn+Af31/fn1+gIODgoKCgYF/fX1+f4CAgH9+fX19fHt7e3p6enuOl5WXhn5+f35+f35/gH9+f3+Af4CAf35+fn9/fn18fn+Af35+f3+Af39/f39/f4B/f4CBf4B+f39/gH9+f4B/hZKSj46Pi4uHiYWEhIKBgYGBgYKDg4ODg4OCgoKDg4KAgYKBgYGAgICAf3+AgIB/gIF/f36BgYSEgYKBg4OCg4OBgH98fn9+fX6Af4B/foF/f4CBhIOCgYB/f359fn5/gICAfn19fX17e3x6enp6eX+QkI+RkX9/fn9/f4CAf35/f4CAgoB/fH5+f35+fXx/f4B/fn5/f4B/fn5/f4CAfn6Af39+f35/f35+fn19fX2Fk5KOjIuKiImIhISEgoKCgYGBgoOCgoOCgoODg4ODgYCBgYGBgYCAf39/f4CAgICAgIB/foCBhIOCgYGDhISDhICBgICBgIGAgYKCgoGBgoCBg4ODgYGBgYCAfX19fn5+f359fX19fXx8fHt6enp6eYKNiY+Wh4GAgIGAf4F/gICAgYGCgoB+gH5/fn5/foGAgYB/f39/gICAf39/gYB+f3+Afn9/fn+Af31+fX17fIaTkYyLioeHioiGhoWEgoGBgYGCg4ODg4OCg4OCgoKBgICBgYGAgH9/f39/gICAgICAgH9+fn+BgYGAgISGh4aHgoSDhYKBg4ODhYSEhISEg4ODhIKBgoKCgH9+fX19fn6AfX19fX19fX19fHp6eXl5e4iJh4eIg4GCg4GAgoCCgYGDg4ODgYGBgIGAf4CBg4GEgoCAgYCBgYGAgYCCgX+BgIF/gIB/gICAfn9/fnx8iZSQiomIiIiJiIaGhoSCgoGBgoKDg4ODg4KDg4KCgYCAgICAgYGAf39/f4CAgICAgIGBf359fn5/f39+g4aHh4iChYSFhISFhIWGhoaGhoWGhYGBg4ODgoKAfX19fX19fn59fX19fX19fX18e3l5eXl5fIKChIWDgoSDgoKDhYeCg4SDgYKCg4OCgoKCgYKFg4iFgoGCgYKDgYGBgYSDgoOCgYKCgICBgIF/gIGAf36Ok4yHiIeIh4aGhYaGhIKDgoGCgoODg4ODg4OCgYGBgH+AgYGBgYB/gH9/gICBgH+AgYB/fn19fX5+f36Ag4SHh4SGhoaFhoaHh4aHh4iHh4eGf32AgICCgX59fX19fX19fX19fX18fH5+fnx7eXh4eXl6foGCf4KLhIOEhISXl4ODhIF9foGCgoGCgYKBg4aIjIWDgoKBhIKEg4KDhYSEhYODhIOCg4OCgoKCg4OCgpGQi4iJh4mHhoaEhoWEhISDgYKCg4ODg4ODgoGBgYCAgICBgIGBgH9/fn+AgICAf4CAgH9/fn1+fn+Bf4CCgYWFhYeGh4eHh4eIhoeHh4eGh4V+fX18fX9+fX19fX19fX19fX19fXx7iJKCe3x6fIZ5eXp8f4B9hpODg4OEhJSTgICBf39/fn6Ei4B/gYCEhpCJhYSCgoGFhYuDgYKFhYaGhISFhYOEhIODhIOEhYSIko+MiYiIiYeHh4WGhYSEhIKBgoKDg4ODg4OCgYGBgYB/gIGAgICAf39/f4CAgICAgYGBf39/f4CAgIGBgYGBg4OGh4aGh4aGiIeGhoaFhIOFhH59fHx8fX18fH19fX19fX19fX18fH+RlZaDe3qElHx5enp6e32AgoGCgYOCgH59f397iJF8fI6Wf31/f4KGioWDg4SDgoONiX99f4OEhYWDhIaFhIWFg4SFhYaEhI6Rj4yKioyJiImHhYWFg4SDgYKCgoKDhIODgoGBgICBgICAgYGAgIB/f3+AgIB/gICAgX5+f4GBgoKCgoODgoOCgoWGhISFhYSGhIOEg4KBgIKAfn19fHx9fXx8fH18fH18fX19fHx8e4uRl4x6e3yBenl6e3x5eX1+f4B/gX99e3x/fn2ClZF/hIh9fH5/goR8fIGChIN/f4eDfYKBgIKCgIODhISEhISChIOEhYGEkZGOi4yMjoqJiYWFhYODg4KBgoODgoKDg4KCgYGAgIGAgICAgICAgH+Af3+Af357gICBenyAgYKDhYODhIWFhYODg4SCgYKDgoOCgoGBgIB/gX5+fX59fHx8fHx8fHx8fHx8fHx9fHx8f36Kgnt6e3p4ent7fH17fn5/f35+fn59fICBgH6Gj4F+fYJ+f36Agnx8gH+CgIGAfnx7ioJ9gH9+gYCAgYKBgoCAgIGAf4uUkIyMjo6NiIiHhYWFhIOCgoKCg4OCgoODgoGBgICAgICAgH9+fXx7fHx9f3+AgHx6gYF4e4CCgYOFhIOFhYaGhISAhpSIgIKBgYGBgH9/f39/fn5+gHx8fHx8fHx8fHx8fHx9fHx8fHx9fHl6e3t4eHl7e3p8goCBf4CBfX9/gH99gIKCgICAgX+CkYF/f4CAfoB+fn9+gIGBfX19e319fXx9fHx9gH+AgH6Afn6ClJKNjI2Oj4qFhoaFhISFg4KDgoODg4OCgoGBgYGAgICBgICAf4CAf39/fXt6fICAgHh+gXd7gIF/goKCgoKEhoeGhn6IlYp+gIGAgIB/foB+f39/fn+Bfnx7fHx8fHx8fHx8fH19fHt9fHx8e3x8fHp6eXt8e32Fg4OAgYF+gH9/gH6FgoF+gH9+foCFhoKAfn6Dhn99fH5/gIGAf39+fX19fX57fH1/f3+AfX9+f4yRjo2Njo2Nh4SGhoWEhISDg4OCg4ODg4KBgYGBgYCAgYGAgYGBgYGAgH9/f397en9/e3mAd3p/f31/f3+Af4KEhoaFf3+FgX5/gIB/gH5+f35/gIB/f4B/f319fHx9fn18fX19fX19fH18fXx7fXx8ent6fH19f4aFg4CAgH1+fX5/fouEgYd+fXx8fn6Cgn99fX19gXx7fXx+gYSDgYB+fn5+fXx+f4B9foB+f36Eko2NjI+Ni4qGhIWEhISDg4OCg4KDgoOCgYGBgYGAgYGBgYB/fXx8fH1+f39/f397e399d352eH59fH19fX5+gYGCg4B6fn58fn6AgH6Af35/fn+AgH+AgH9/fn9+fn5+fn1+fn99fH59fn19fXt8fHx7e3p9foCAg4OCf35/fHx8fXx9gYN+jH58e3t9fn1+fn17e3t9fHt7e3uAhoSChIOBf4B+f4KCgn9/goJ/gIuQjY2MjYuKiISEhIOEg4ODgoKCgoKCgoKBgYGAgoGBgYKCf3+AgIB/fn18fH5/fn55fX52e3Z4fXx8fHt9fX6BgICAf31/f31+f39/f4B/f39/f3+Af4GBgH99gH9/fn9+fn5/f3yCfX59fX17e319fHp8fH2BgoGAgIB9fX18fHx8fH18fnt/fnt7e3x8fH18e3t7e3x8enp9en6CfoKEhIKBgoGFhoWFhoaHhYGEkY+Ni4qLh4eFgoOEhISEg4KCgYGCgoKBgoGBgYGBgoGBgoKAgYKBgYCAgH9+e3x+fnx6fnh5dnd8fHx7e317f4GAf35/foB/f35/f35/gH9/f39/f39/gYKAfn6BgIB/f39/f39+fYN8fH19fH99fX19e3x+fn9/fn5/fnx8fXx8fXx+fnt8e3x8fHx9fH18fnx9fHt7e3x5e3x7e316fX5+f4CAg4eJiYmKiYqJhYiRj42JioeFhYOCgoODhIOCgoKBgYKBgYKBgYGBgYKCgoGCgoCAgX98e3p6eXt9enx+fnl8eXh4dHx8fHt8fHx+gH9/f39/gIB/fn5+fX+Af39/f3+Af4CDgoB/gIGAgIB/f4CAgH58enx9fX59fX5+jIZ9fX57e4ODfX19fH18fX19fX1+fH18fXx9fX59fn19fX18e3t7fHt8fHt6e3t6enp7fn6DhYiHiIqLi4qJjJGQjoqJhoWEgoKCgoODg4OBgYGBgYGBgYGBgYKCgoOCgYKBgIGBf3+Af356eHl5en5+e3l6eH5zfHx8e3x8fH5+fn5/gH+AgIB/fn9+gIF/f4B/gIGAgoSEgYCAgYGAgX+AgYKBf39+f31+gH57foGSjHx9f4qAjYx+fn19fX59fX19fXx8fX19fXx9fX1+fX1+fnx7e3t8fH18e3p7e3l6eXh5e35/g4OEh4mKiImOkI6MiYmFhISCgYKCgoKCgoGCgoKBgYGCgYKCgoGCgoKBgoKAgYGAfoCAf39+e3p5e319eHx6f3KBfXt7fXx8fn59fYGBf4GBgX9/gH+AgX9/gIGCgYGFg4SCgYGCgYKBgICBg4KAf4F/fX6Afnx/f4mCf36CkYSEg4F/fn18jYd9fX59fXx/fnx9fXx9fX5+fX5/fH18e3x9fnx8e3x9enp5eXl5ent+foCBg4eEiI+Oi4uHhYSEg4KBgoKCgoGBgYGCgoKBgoKBgoKCgoKCgoGCgn+AgIB+f39/fn5/ent5fX16enp9cX6Cent9fX19fXp4f4KAgYKCgICBgYGBgICBgoKCgoaFhIKBgYKBg4GAgIKEgX9+gYB9foF+fX5/gIB9fn+EgH5+f31+fX2KhX1+f31+foB+fX18fH5+fn99f4B9fX18fX9/fHx7fH17e3t6enp7e3x9fn6Ag4CJjouMiIWFhYSDgoKCgoKCgYGBgoKBgoKCgoKCgoGBgoKBgYKCf4CAgH9/f39+fn59eXp6fXx5d3t0e4d8dHd9fn17e3Z2fYCBg4KBgYKCgoKBgYGDg4OChYaEg4CAgIGDgX+AgYSBfn6Af31+gH59fn6AgH+Bfn+Af39/gH99f39/f3+Afn9/gH58fX18fn5+foF/gH2CgHx9gIB9e319fXx8fHx9e3t7fHt8fH19fIqKiYmGhoWFhISDgYKBg4KAgIGCg4KCgoOCgoKCgoGCgoGBg4J/gIGAf39/fn5+fn57enp8fHt2e3R3f352cnt+fnt4dnd8gIGCgoKBgoODg4OCgoODhIOFhoOCgX9/gIKAf4CAg4B+foB/fX+AfX1+foCAf4J/gYCAgICBgH1/f3+AgIGAgIB/fnx9fX19fn59g32AfoKAfX6AgX98fn59fX17fX58fXx8fHt8e3x+ioeHhYaIhYSFhIKCgoGDgYCAgoKDgoKCg4ODg4KCgYGBgYGCgH6AgYB/fn5+fn5+fn56e3p9goN9dXF6fHpxen59eXh0dICAgoKCgoKDhYOEg4KDhISEg4WEgYGAgH6Agn9+f36Bf35+f4B9foB9fX1+gH9/gYCBgICAgIGBfn6Af4GAf4CAgH9+fX19fnx+fn19gYR/gH9+f4GBf31/f319fn1+fn1+fHt8enx7eoCIg4SEhYSEhISDgYKBgYKBgICCgoOBgoOEg4SDg4KBgYKBgYOAfoCBf35+fn5+fX5+fnt7en6Jh354cnl9f3F6eHt4eXV1fYKDgYODg4OFhIWDg4OEg4OEhYOBgICAf4CBfn19fn9+fn5+gH19f3x9fX6Bf4CAgIKAgIGAg4KAf4B+gIF/gIGAgH9+fn1+fn1/fn6FhYGBgX+Ag4F/foGAf35/foB/fn17ent6fHt6goWAg4KCgoKCg4GBgYCAgoGAgIKCg4KBg4SDhIKEgoGBgoGCgoB+gIF/fn1+fn5+fX59fXp7fIWEe3tzeXt8cHd1dnd5dXR6hISBhISDhIWFhoSDg4WEgoODgoCBf4B/f4B9fX1+f31+f39/fn1+fH19foF/gIB/gIB/gICDgoGAf36AgH+AgYCBgH9/f39/f39/gIGCgoKBf4CDgn9/g4J/f4B/gX+Af3x7e3p8e3yCgH+Cf3+BgIKCgYF/f3+CgH6BgoKDgYGDg4KEgoSCgYGBf4GCgH6AgH9/fX5+fX19fn1+e3t6gH94fHZ5enxxdHh3dnh1cnmFhYKEhIKEhYWFhISChIOBg4GAgIF/f4B/gHx9fX6AfX5/f39+fX98fn5+gX+BgH9+f4B/gIODg4F/f4GBgIKBgYGAgIGAgICAgIGAgIKDgYF/gISAfYGDhICAgX+BgYKBfXp7e3x8fYB+f4B9f399fYGAgH59fX9/foKBgYKBgIKCgoKBg4KCgYB/gYKAfn9/fn99fX1+fX19fX19ent7fHZ9eXh6enJ1eXl2d3dzdYaFg4WFgoSEhYSEg4GDgoGDgX+AgX5+gH6AfX19foB+f4B+fn99f3x/f3+BgIF/f3x+gH6AgYKDgYCAgoOEgoGAgYB/gYCAgYGAgYGBg4KBgX+Ag4B+goOEgICCgYKChIJ+e3t8fHx9fn1+fXp+fX14fn9/fHx8fn5+gYCBgYCAgoGBgYGDgoGBf4CAgoB9fn19f319fX59fH19fX16e3p8dnx6d3t4cnZ5e3Z3dnN0hoSEhYWChISFg4ODgYOBgYOBgIGBfX+BfoF9fX1/f39/gH5+f319fYB/gIGBgX9+fH5/fn5/gYJ/gYGCg4eFgX9/fn6Af4CAgICAgIKCgYCAfoCCf3+BgoOBgYOCg4OFg399fX18e3x8eXp7en55e3l4f357fHx+fX1/f4F/gH6BgICAgoOCgYF/gIGBf31+fH1+fX19fX18fn58fXx5e3x4enx3endzeHd6c3Z2c3SGhISGg4KDhISDgoKCg4GBgoGAgYF9gIB+gH1+fX5/gICAf39/f3x/gH+BgIGAf359f39+fn+BgH2AgIGDg4N/f359fn5/f4B/gH9/gYKBgH9+gIF+f4CCgoCBg4KEhYaEgH5+fHx8fHp5dnl5enl2eXZ+fHt7e359fH99gH59fX9/f3+BgoGBgX5/gYF+fX18fX19fX19fXx+jYF8fXl7e3p5fHd4eHR1dXhyd3d0doaEhIWEg4ODg4OCgYKDgYGDgn+Bf35/fn+AfX19fX6AgIB/f39/fIB/f4GAgYCAf3yAf35+foB/fX5+gYGCgn5/fn1+fn5+f3+Af32AgIB+fn1/gX5+gIKBf4KDgoOEh4SAgH58fXx8e3x1eHl4eHh5d3t8e3t7f4V9fn1/ent+fn59foGAgIGAfX6BgH59fXx9fX19fX18e32Dgnx8ent7e3p7d3Z4dXJzdnB4eXJ4hYWFhYOEhIOChIKBgYKBgIKBgIF/fn5+foB+fX58foCAgH+AgIB8gH6AgH+BgIB/fYB+fn5/f359fX6AgYGAfn9+fn59fX5/fn9+fH6Af35+fn+Cfn6AgIF+gYOCg4OGhICBfnx9fHx7fHh3e3h1eXd3eXx6e3t9kod9fH13en1+fn19f35+gH98foB/fn19fH19fX19fHt8ent9enp4e3x6ent4dHh1cXJ0cHh4cXmEhYWFg4SDgoODgoGBgoKAgYCAgIB9fn5/gH18fnx/gIGAgICAgHx/f4B+f4GAf39+gX9+f39+fX18f4CAgIB+f35+fn18fn9/f358fYB/fn1+gIJ/foCAf36ChIKCg4WFgoJ+fXx7e3t8eXd7eXd4d3d4e3t6e3yFiX17end6fH19fHx9fX1/fnx9fn59fX18fX5+fX18fHt6enx7e3p5enp7enhzd3VxcXNveHdxe4WGhYWDhYKBg4OBgoGBgoCCgICAgH5/fn9/fXx+foCBgoGAgIGBfX6Af35/gX+Af3+BgH9/f319fH1/gICAgH9/f35/fXx+f39/f319f39+fn6CgYF/gIB/foGDgoKEg4SCgn5+fHx6fHt7eXt6d3N2d3h5e3p7eXp/fnt7d3p8fXx8fH59fH19fH19fXx8fX19fX99fXx9e3l7fHx7enp6enp6eHN2dXBwcm93dnJ7hYaEhYOEgoGDgoKBgYGCgYKBgYGAf4B/f399fX9+gICBgYJ/goF9foF+fn+Bf4B/gIJ/gIB+fH58f3+BgICAf4B/f4B+fX5+f4B/f39/gH9/f4J/gICAgIB/gYGAgISBgoKAf39+f3x9fn56fYR+dHx9enp6enx5eXp6hoV3eXx8fHx8fXx8fHx8fX19fHx9fX19fn19fX16eX18fH16enp6enp5c3V1b29xb3d0c3yFhoOEgoOCgYKBgoKCgYKBgoGCgYCAgICAgH59gH+Af4GCgn+CgX+AgX5/gYB/f4CAgn+Bf319f35/f4KAgICAgIB/gIB+fn1/gH9/gIB/f39/gH+AgICAgH+AgYCBgYGCgYCAf39/fn1/fnuBko16fH18e315e3p6eHqBgXh5e3x8fXx8fHx8fHx9fX18fH18fn1+fn59fHp8fHt9fXt5enp6eXl0dXVvb3Fwd3N0fYWGg4OCg4KAgYCCg4KAgYGCgYKBgYCBgIGAfn6Af4GAgYKCgIKCgICCfoCBgX9/gX+BgIF/fH6Af3+AgoCAgICAf3+AgH9+fX6Afn2AgIB/f3+AgICAgYCAf4CAgYCBgYKBgICAf39/fX5+fIGGiXx8fnt7fnl6e3p7j393d3l8fHt9fHt8fHx9fH19fX18fXx+fn5/f358enx9e319e3l6e3p5eHN0dW5zcXB4cnV6hYaDg4KDgoCAgIKCgYCCgYKCgoGBgYKAgYF/fn9/gYGCgYKBg4OAgYJ/gYGBf4CAgIB/gX99f4F/gICBgICAf4B+gICAf359foB+fn+Af39/gH9/gICBf4CBgH+BgIGCgoGAgICAgIB9foB9gIOCe35+e3x9e3p8fHuHenh4eXx8fH17fHx9fH18fH19fn19fX5+f3+Af317fHx8fHx7enl7e3l5c3J1bnZycHhxdnaFhYOEg4KCgICBgoF/gIKCgoKDgYGDgoCCgYB/gICCgoKBg4KEhICBgX6BgoB/gICAgH+Cf36AgYCCf4CAgIB/gH+AgIB/fn2Af39/f4B/gH+AgH+AgYGAgICAgIGAgYGBgYGAgYCAgH9/gH5/fX59fn57fXx9fHx9eHh1eHh5e3x8fXt7fHx8fX5/f39/fn19foB/f4GAf3x9fHx9e3p7eXp8eHpzcnVud3FxenF2d4WFg4SDg4KBgoKDgICCgYSDg4SBgYOBgoKCgYCAgIKDgoCCgoSDf4GAfoKDgICBgICAf4CAf4GAgYKAf4CBgH9/gICAgIB/f4CAgH+AgICAgIB/f4CBgYCAgICAgYGAgoOCgoCCgYGCgYB/gIB/gId+fnx7fXx7fX94d3Z5eXp7fHx8fHt8fH19fn5/gIGAfn1+gICAgoGAfH59fX58d3t6ent5eXNxdW53cHV6cnZ5hYWCg4KDg4KChISAgIOAhoODhIGChICEg4KCgICCgoSBgYKBhIJ/gIB/gYOCgYCBgYCBgIGBgYGBg4B/gYOCf35/goGAgH9+gYCBf4CAgYCBgYCAgIKBgYKBgX+BgYGBgoOCgoOBg4OCgYCBgH9/hH19fXx/fXp9f3t5dnp4eXt7fH19e3x9fX19fn+AgYGAgH+AgICDg4B8f35+fn15eXt6enp5c3J0b3dxd3lzd3uFg4KDgoOEgoOEg4CBg4OGg4ODgoKEgYSDgYOAgIKBg4GCgoGCgX6AgICCgYKBgYKCgIGAgICCgoGEgH6Bg4J/foCDgoCBf4CCg4KAgYKBg4KDgYGBg4KChIGAgYOBgYKEg4KEhIODhIODgYGBgoCCf4B/fYB8enx/fHt3fHl5eXt6fX59fH18fH1+fn+BgYCAgIGBgYOEgH2Af39/f357e3t6e3p0cXhxeXR2eHR2e4SCg4KDg4SChIODgYKChIWEgoOCg4SBhIOBg4CBg4KCgoKCgYKAf4GAgIKBgoGCgoKBgIGBgYKCgoOAfoGDgX9/gYSEgYN/goKBg4GCgoGDg4OEgIKDgoOCgoGCgoOBg4SDhIOEhYSFg4SCgYOCgYOBgYGAgH58fIB9fHh8eXp5enx9f3x7fHx9fX18fICAgICAgYGBgYKBf4CAgICAf3t7e3p6enVweHd5dnV8dXZ8gICDgoODg4OEhISBgoOFhYWDg4KDhIKEhYKCgYKDg4GCgYKAgYB+gYCBgYKDgoKCgoGAgYKCg4KCgoB/gYKCgICChIODgoGCgoGDgoKDg4SDg4SAgoOCg4OBgX+Bg4KDhYKEhISEhISDhISChIOEhIKBgoCBgHt9gX58eXx6enp9fHyBfXp8fH19fHp7fn5+gIB/gYGBgICAgIGBgIB/fX18fH17dnJ2eHh2dH92dX2Hh4OChIWDg4SFhIGChIaEhIOCg4SEgYOFg4KCgoODgYOCgoCCgH2AgIGCg4KCgoKEgoCCgoODgoKBgICBg4KAgYOFhIOCg4CCgoOCg4ODg4OEg4CCg4KEg4KCf4OBgoSEgoSDhISEhIOEhIOEg4WEg4ODgoKAe4CBf3x8fXp6fH2AfX9/fHx6fH59fH19fn5/f39/gICAgH9+foCBgICAfnx9fn5/fn18fHh2f3Z3f4SHg4KDhoODhIaEgYKFhoWEhIODhISChIWFgoKDg4SCg4KDgoKBfoCAgoKDgoODg4SDgYKCg4OCg4KCgYGDgn+Cg4SDg4KEf4KEg4ODg4SDg4SCgIOEg4SDg4KCg4KChIOCg4OEhISEhIWEg4OEhYSFhIOBgoB9gYKAfXx8e3x8gH19foB+fn1/fnx8fH19fn5/fn+BgYGBgH9+fX6BgYB+fn1+fX5+fn5+f3+AfH2AgYKCg4OFg4SDhoSBgoiGhYSDg4SEhYGFhYWDg4SDhIODgoOCg4F+gYGCg4SCg4OEhIOCg4KEg4ODgoKDgYOCf4KDg4ODgoOAgoWDg4ODhIODhIOBgoSEhYODgoODgoGEg4GDg4SEg4SEhYSEhIWFhYWEg4ODf36Bg4B9fXx8fHx/gX5/f39/fX99e3x9fX19fX5+f4CBgIGBgH99fH6Cf39+fn5+fX1/f39/gYCAf4CEhIODg4WDhIOFf36CiouFhYSDgoSFgYaGhoOEhISEhIODg4OEgn+BgYODhYSFhIWEg4KEhISFhIODgoSDhYKBhISFhYaEgoCDh4SDg4OFhIWFhIGEg4OHgoOCg4GCgYSDgoODhIODhIWEhYWHh4aHhYSEhYSBf4GDf35+fH5+fX+BgH9+fHx/f358enx9fX19fX5+fn9/gIGBf319fIB/gH5+fn5+f3+BgYGBgYKAgYWFhIOEhIKEg4aAgoSFiomEhISEhYWCh4aGhISEhIWEhYSEg4SEgYKDg4OEhIaEhYSDg4SEg3yDhHuBhHd5g4J9hH5+cnWDgoF2foOFgH2BdYF6hH9/f3+EhIKDgoKBg4SDhISFg4SFhoSFhn2Een1+f4N7hYOBhIOBf31+f35+goOBfXt/fX6Afn18fHx9fX19fH19foB/gYJ/fX18f4GBgICAgH+BgYGBgYKDg4KChoSEhIaEgYOEhYOEhYSKiIWFhYOFhYSGhoaDhIWFhYWEhYWEhIWCgoOEhYWFhoSFhIOEhYWCaICFanx7cXF8gXOGc3R0fYKDdXNxg4ZzcHVyc3SDdnt9dYF/goOAgnZ5hYCDgIR/hYSChYWCaHpyc3N8gHKChH6Dg32BfX5/fn+Cg4J8f4F9f4B9fXx8fHx9fXx8fn1+gX+BgX99fX2AgYKBgYGBgIGBgYKBgoKCgoSHhIWEhYSCgoSGhoOFhIaIhoaFgoaGhoeGh4OFhYaFg4KFhoSFhYODg4SEhoaGhIaEg4SEhn1we4FweXZ+g3+CbnlwdXN8dnl5hnOEg3B2eHF2dHR1cnN0dml/gG5yb3R2bnVsd216c26Ah3ltfXJzdnN2bW53bHB5bHV9f358foGAgX2Af32Af4B/fX18fHx9fH1+f32Af4CAfnx/foCBgYCBgICAgYCAgIKDgoKDhYeGhoCChYODhYeGg4WFhYaHh4SDhoeIiYaHhIWGiIeEg4WGhYWEhIOFhIKFhoaFhoWEhoWHdnB0e3BydX+HhYNtdW92b3x1coR5eYd4cXR3bndod3pucHWCcoN+b3p5eW1vbnpvb2x3fXiGcHF6cHJ0ZoF1fm57eXNveX+Af31+gYB/e39+fYB+gIB+foCAgYB+fn9+foF/gIB+fYB9f4CBgIB+fn+BgH9+goOCgoSFh4eEfoeEhIOFh4aEhYWFhoaIhISGh4iIhoeEhoaLiYWEhoeHhYSFhIWEgoWFhYWGhYWGhYZxdXByc29zenl+hHSIdHV+iHZugnKEhnluanJ/cW1zd3x/dXR8hH54cXV3bnl1enF2eHV6eYRyaW95eHBreXN6b3p3dnZwgYB/fn5/f396fn19f31/f359gIGDg4CCg4GBhIKAf4GCgH1/f4F+f359foGAfn6BgoCAgoSHhoODhoSFhIWHhoWFhYWHhoiFhYaFh4eFhoSGhomIhYSJioiFhIaFhoWDhYWEhoaGhoaFg3iLeXKIentwcIWEeIV4eWtzfnl7a3KDh4N6fG16eXl0fYB2bm+AgG90fHV3cHl9fW1+dW+DhYZ6gHJye3x1cG96a3N8bnaCgYF+fn99fXt9e3x9fX9/fX1/f4KCf4GDgYGDgYB/gICAfn9+f31/fn1/gH58fYGAfn6Ag4iFhoOFhYWFhoeFhYWFhYeHiIaEhoWGhoaFhIWFhYWFhomKh4WFhoWGhoWGhoSGhoaGhoWGh4eHhoaEhoWGh4iHhYeGhoOHhoWFg4SGhoWGhIaEg4SEhoSDgYSDhIOFg4WEhYSGg4WGhYWEhIWHhoSEhYaFhX13hYSEhIOCgX5/fnt8e358fH1+f399fX9+gYB9f4F/f4GAfn5+gH5+f35+fX99fX5/fHt8f358fH+BiYaFhIaGhoWGhoWFhYWGhoeIhoSGhYeFhYWDhIWGhYSGhoaGhYWGhIWGhoaGhIeGh4eGhYeIiIiIhoWHhYaGiIaFiIeIhYeGhoiFhYaGhYaGhYOChYWGhYWDhISEhIaEhoaEhYWDhoaFhYWEhoaGhISFhoOFhIKEg4OFg4OBfYB/e3t8fnt8fH1+fnx8fn2Afn1/gH5+gH99fXyAfX5/fn5+fnx9fX57fHx/fHt7fn+Ih4SEiIaGhYeGhYWEhoaGhoiHhIWGh4aFhIODhIaFhIeFhoaFhYaEhYaGh4eFh4aJiIaGiIeIiYiFhYiFhoeGh4aHhoeFh4eGh4WFhoeFhoaFg4OFhoaEhIOEhIOEhoSGhoWFhYOGhoWGhYSGh4WEhIWFg4SIhoSDg4SDhIJ+gYB8e31+e3x7fn59fHx+fX5+fX9+fX1+fn19fH98fn58fYF/fHx8fXx8fH56e3t8foiHgoWIh4eGhoaGhISGhoeGiIaEhYSHhoSFh4OEhYSFh4SFhoaFhoSGhoeHhoaHh4mIhoaIh4iKiIWGiIWGh4WHhoeGh4WIiIeHhYaGh4WGhoWChISFhoWFhISEg4SFhIaGhoWGhIaFhoaFhYaHhYSDhISDhIeDhIGChIWDgYCAgHt7fn58fHx+fXx8fH1+fH18fn18fX18fHx8fXx+fXt8gX99fH18fnx8fHp6fHx9iIeChoiHhoeGhoaEhYaFhoWGhYOFhIaFhIiJg4GEg4SGhIaGhoaGhIeHiIiHh4eIioiGh4iHiImIhYiHhIaGhYeHh4WHhoiIh4eFh4eHhoaHhIKEg4SGhYeFhISEhISFhoaGhoWFh4WFh4WGhYaFhIOEg4OEh4GDgIKDhIKCgn+Ae31+fnx8fH59fHx9fH17fHx8fHx9fXt7e318e359e3x/fX18fX1+fXx6ent7fHyIh4KGh4aGh4aGhYSFhoWFhYWEg4WChoSDiId/enqChYaEhoaFh4aEh4eIiIiHhoiKh4aHh4eIiYeFiIaFh4eGhoeHhYeGiIiHhoWHh4iGhoeDg4SEg4aGh4WFhISEhYaGhoaGhYaHhoaIhoaEhoWDg4ODgoOGgYN+goKDgIOCf398f35+fHx9f318fX18fnt7e3p7fHx8e3t7fnt7fXt6e358fHx8fX5/fXt6fHp8fImHg4aFhoWGhoWFhIWFhYWFhIOBhIGGhIKEhHyAhn+ChYWGhYWGhYSHh4iIiIaFiYqHhYeGh4eIh4WIhYaHiIaGh4eGh4aIiIeFhoeGh4WFiIOEhoWDhoaHhoWEg4WFhoaGhoaFhoaHhoeHhYOFhYOBgoKBg4WCg36BgoF/hIJ/f35/fn58fH1/fXt9fXx+enp7eXt8fXt7e3t+fHx8fHp7fXx8fHx+fYF8e3t7e3x8iYeEhoSGhIaGhYSFhYWEhIOEgoCDgYaCgYJ/eoSMe4CEhYeGhoaFhIeIh4aHhYWHiYeEh4WGhoiGhYeEhoeJhoaIh4eHhoeIhoSGhoaHhYWHg4SFhIaGhoeFhYSDhYWGhoeGh4WGhoaFhoaEg4SFgoGCgYCEg4OCfYGBf36DgX5/f4B8f3x9fX59e359fH16enp5e319enp7e318fXx8enp9fHx9fH5+gHt7e3x+fXyIh4WGhYeEhoSFhYWFhIODgYOBgIKBhYKAgH9/fXx7gYSFhoaEhYSEh4eGhoaFhIaJhoKGhIaGhoWFh4aGiIiGhYiHiYeGhoeFhIaFhYeFhIeDhIWEiIaGh4WFhIKFhYaFhoaHhYWGhoWFhoKDg4WBgIGAgISAg4B8gYB+foKAfYB/gX2AfH1+fX57fn18fHl6enl6fX15ent7fHt8e3t6e319fH18f35+fHt7fX59fIiGhYaGhoWFhYSFhYSEgoKAgoGAgICDgX5+foB5en2Ag4SFh4WEg4OHhoOEhYSChYiFgoSDg4WFhYWHh4aIiIaFiIeJh4aFhYWDhoSFh4ODhoSEhYSHhoWGhYaEgoWFhoaGhoaEhYaGhIWFgoKDhH9+gICAgYCDgHyBf31+gn5+gH6Af399fX59f3t/fXt6eXp6eXp8fXl6e3t7enx7e3t7fH19fXx/fn18fH1/fnx7h4WFhoaGhoSFhIWDhYKBgICAgYB+f4KCfX1/f3t/f4KDg4WGhYSDg4aDgYOEgoCFh4WCg4GBg4SEhYaGh4eHhYWIhomHhYSEhIKFg4SGgoOGhISGhIeGhoWFhYODhYSFhoWGhISEhIWDhYSAgIKDf35/f39/gIN/fIB9fX+CfYCBfn6Bfn5+fX1/e398e3p5enp5ent8eXp6ent7fHp7e3t8fX59fYB9fXx8fYB/fXyGg4aGhYaGg4SDhoKFgYGAf3+AgH5/gYF8fn9/fn+AgoKChISDgoGChIGAg4KBgISFhIKBf4CCg4KEhYWHhoaEhYeFh4WGgoOCgoOCgoWBg4WEhYaEhoaGhoaFg4SEg4SFhYWDhIODhIKEhIB/goJ/fX5+fn5/hH57f3x8gIF9gYB9foN9fn59fX57fnt7enl6enl6ent5enp6e3t8enx8fHx+fn1/gXx9fHx9f4B+gIaEhYWEh4SEg4KGgoOAgYB+fn+AfX9/gnx9f35+f3+BgYKEg4KBgYKCf4CBgoCAgoWEgoB/gIGCgYKGhYeFhISGhoOFg4WBgoGBgoGCg4GChISEhYWGh4eGhYWEg4ODhIWFhIGDgYOChIODgH+AgX59fX5+fH6Dfnx+fHyBgX6Cf35/gnx/fn19fHx8e3t6enp6eXt5e3p5enp6e3x5e317e35/f4GAfX99fX1/gICAhoSEhYSFgoSCgoSCgoCBgH59fn9+fn6AfX2Afn5+foGBgoODgoSHgYF+gICBf3+ChIOBf35/gIJ/goWEhYOCg4WFgoSBg4CBgIGAgYKBgIGEg4OGhYWHh4WEhIWCgoKDhYSCgYGBgYCFg4F/foB/fnx8fn18foN9e358fYB/gIN9fYCBf35/fXx8fX17e3p5enl5e3l6enl6ent7e3p7fXx8f3+BgoB+gH+AgH+AgIDKysrKysrKysrKysrLy8vLy8vLy8vLy8zMzMzNzc3Nzc3Nzc3NzczMzMvLy8vLy8vLy8vLy8vLzMvLy8vLy8vLy8vLy8vMzMzMzM3Nzc7Oz8/Pz9DQ0NHR0dLS0tLS0tLT09PT0tLS0tLS0tPT09TU1NTU09PT09PT09PT09PT09PT09PT09PT09PT09PT09PS0tLS0tLS0tLS0tPT09PT1NTV1dXV1dXV1dXV1dXV1dXV1NTU1NTT09PT09PT09PT09TU09PU1NTU1NTU1NTU09PT09PS0tLS0tPT09TU1NTU1NPT09LS0tLS0tLR0dHR0dPHhnNlYFtLWWdVTUZIQD03Nzg5Nzw8PDo8Oz42Oj04PDs6OTg3ODs7Oj87PTs8PD47P0E/QkJBQ0RFREE+PTw7QENDQUBDQ0FBR0hHSUtSwtXS09PT09TU1NTU1NTU1NTU1NXV1dXV1dXV1dXVysrKysrKysrKysrKy8vLy8vLy8vLy8vMzMzMzMzNzc3Nzc3Nzc3MzMzMy8vLy8vLy8vLy8vLzMzMy8vLy8vLy8vLy8vLzMzMzc3Nzc3Oz8/P0NDQ0NHR0tLS0tLS09PT09PT09PT09PS09PT09TU1NTU1NTU09PT09PT09PT09PT09PT1NTU1NTU1NTT09PT09LS0tLS0tLT09PT09PU1NTU1dXV1dXV1dXV1dXV1dXV1dXV1NTU1NPT09PT09PT09PU1NPT09TU1NTU1NTU1NPT09PS0tLS0tPT09PU1NTU1NTU09PT09PS0tLS0tLR0dHSzIxyZ2BcTVllUktHSz87Mzc4Ozg5Pj05PDpBOjs9Nzs8PDo6Nzg6Oz0/Oz88PTw/Pj9BPUFBPkNDREJAQT46Oz9DREFDRERCQklHSEhJTr7V0tPT09TU1NTU1NTU1NTU1NXV1dXV1dXV1dXV1crKy8vKysrKysrKy8vLy8vLy8vLy8vLy8zMzMzMzM3Nzc3Nzc3NzMzMzMzMy8vLy8vMzMzMzMzMzMzLy8zMzMzMzMvLzMzMzc3Nzc3Ozs/P0NDQ0NDR0dLS0tLS09PT09PT09PU09PT09PT09TU1NXV1dTU1NTT09PU1NPT09PT09PT1NTU1NTU1NTU1NPT09PS0tLS0tLS0tPT09PT1NTV1dXV1dXV1dXV1dXV1tbV1dXV1dTU1NTT09PT09PT09PU1NTU09TU1NTU1NTU1NTT09PT0tLS0tLT09PU1NTU1NTU1NTU09PT09PT0tLS0tHR0s+Sd2hfXk9XZ01LRks9ODc2NTk5OTw+OT88Qzk7PDc5PD07OTc5Ojw9QDs+PT47PD48PT5BQD5EQ0NDP0E9Ojs+QkNFQ0NEQT9FSEpJSky61dPT09TU1NTU1NTU1NTV1dXV1dXV1dXV1dXV1dXLy8vLy8vLy8rKysvLy8vLy8vLy8zLy8vMzMzMzMzNzc3Nzc3Nzc3MzMzMzMzMzMzMzMzMzMzMzczMzMzMzMzMzMzMzMzMzc3Nzc3Ozs/Pz9DQ0NDQ0dHS0tPT09PT09PT09TU1NTT1NTU1NTU1NTV1dXU1NTU1NPU1NTU09PT09TU1NTU1dTU1NTV1dTU09PT09LS0tLS0tLS09PT09TU1dXV1dbW1dXV1dXV1tbW1tXV1dXV1NTU1NTT09PT09PT1NTU1NTU1NTU1NTU1NTU09PT09LS0tLT09PU1NTU1dXV1dTU1NTT09PT09PT0tLS0dHRmn5nYWJOVWpKSElLPzw6OTM3Njc2PTs+Oj06Ojo4ODo7Ozg4Ojs7PD46PT09Ojw/PD0/QkA/Q0RDRD5APT08QENEQ0JEQkQ+REhJSUtMttfT09TU1NTU1NXV1dXV1dXV1dXV1dXV1dXV1dXVy8vLy8vLy8vLy8vLy8vLy8vLy8zMzMzMzMzMzMzNzc3Nzc3Nzc3Nzc3MzMzMzMzMzMzMzMzNzc3NzczMzMzMzMzMzMzMzc3Nzc3Ozs7Pz8/Q0NDQ0NHS0tLT09PT09PT1NTU1NTU1NTU1NTU1NTV1dXV1NTU1NPT1NTU1NTU1NTU1NTU1dXV1NXV1dXV1NTU09PT09PS0tLT09PT09PU1NXV1dbW1tXV1dbW1tbW1tbW1dXV1dXU1NTU1NTU1NTU1NTU1NTU1NTU1NXU1NTU1NTT09PT09PT09PU1NTU1dXV1dXV1dTU1NTU09PT09PS0tLR0p+DaV9kU1hsSEhIS0A9Nzg0NzY6Oj87RDw8Ojw8OTg6OTo6Ojs8Ojo7OT48Pjk9QDs/QUFCP0JCQUM9Pz8+PEBCRUNDQkBBO0ZJR01MSbLY09TU1NTU1NXV1dXV1dXV1dXW1tbW1tbV1dXW1svLy8vLy8vLy8vLy8vLy8vLy8vMzMzMzMzMzM3Nzc3Nzc3Nzc3Ozc3NzczMzMzMzMzMzc3Nzc3Nzc3Nzc3Nzc3Nzc3Mzc3Nzs7Ozs7Pz8/P0NDQ0NHS0tLS09PT09PT09TU1NTU1NTU1NTU1NTV1NXV1dTU1NTU1NTU1NTU1NTV1NTU1dXV1dXV1dXV1dTU1NTU1NPT09PT09PT09PU1NXV1dbW1tbW1tbW1tbW1tbW1tbV1dXV1dTU1NTU1NTU1NTU1NTV1NTU1NXV1dXU1NTU1NTT09PT09PT1NTU1dXV1dXV1dXU1NTU1NTT09PT09LS0tSjiGxfZlJWakdIR0lBPTM2Njo7PDhDPEJBPjxBPDg5Ojw6Ojw8PDk8PTo7PD09PD89QD9AQT9AQUBCPD4+PzxCQ0NDRkBBQT1ISklOTUeu2NPU1NTV1dXV1dXV1dXV1dbW1tbW1tbW1tbW1tbLy8vMy8vLy8vLy8vLy8vLy8vMzMzNzc3Nzc3Nzc3Nzc3Nzc3Nzs7Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Ozs3Nzc3Nzc3Nzc3Nzs7Ozs7Oz8/P0NDQ0NHR0dLS0tPT09PT09TU1NTU1NTU1NTU1NTU1NTV1dXV1dTU1NTU1NTU1NTU1dXV1dXV1dXV1dXV1dXU1NTU1NTU1NPT09TU1NTU1NXV1dbW1tbW1tbW1tbW1tbX19bW1tXV1dXV1dXV1dXV1dTU1NTU1dXV1dXV1dXU1NTU1NTU09PT09PT1NTU1NXV1dXV1dXV1dXV1NTU1NPT09PT0tLWroprY2VSWGhMSkdJQjg0OTQ6Ozo5QDk+Q0U/PDs5OTk9Oj07PDw6PTw7OTw9Ozs/PUA9PT5AQD9CQT5APD05QERDQkFBQj48SEpLTU5HqNnU1NXV1dXV1dXV1dXW1tbW1tbW1tbW1tbW1tbWy8vMzMvLy8vLy8vLy8vLy8rKy8vLzMzMzMzMzMzMzM3Nzc3Nzc7Ozs3Nzc3Nzc/Pz8/Pz8/Pz8/Pz9DQ0dHR0dHR0dHR0dHS0tHV2djY2NnZ2dra2tvb29vZ2dnZ2dna2tra2tra2tjW19fX19fX19jX2NfX19rb2tra2tra2tvc29vb2dfX19fX19fX19fX19bX2tva2tra2tra2trb3NzX1dXV1dXV1dXV1dXW1tbX1tbW1tbV1dXV1dXV1dXV1dTU1dXV1dXV1dXU1NTU1NTU1NTU09PU1NTU1NXV1dXW1dXV1dXV1dTU1NTT09PT09PS1bqKa2hoUlhlSUlMTkA5OTo0O0A8Nz05QUM9QD89ODo6Ozk9Oz4/Ojs8PDo7PDo7Pj1APT8/P0FAQUE/QTw8Oz5BRENBREA9PElJSk1NRqPa09TV1dXV1dXV1dXW1tbW1tbW1tbW1tbW1tbW1szMz9DPz8/Pz8/Pz8/Pz8/W3t3d3t7e3t7e3t7e3t3S0NDQ0NDQ0NDQ0NDQ0ci5ubm5ubm5ubm5ubq6t6WkpKSkpKSkpKSkpKSnhmBjY2NjY2NjY2NkZGRlhIuKioqKioqKioqKioemuri4uLi4uLi4uLi4ubSNi4uLi4uLi4uLioqKiJ+7ubm5ubm5uLi4uLi5sIuLi4qKioqKioqKiouHvebh4uLi4uLi4uLj4+Pi2NfX1tbW1tbW1tbV1dXV1dXV1dXV1dbW1dXV1dXV1dTU1NTU1NTU1NTV1dXV1dXW1dXV1dXV1dXV1NTU1NTT09PT09XDkXJsaU5TYkxMVk08Ojo3Nz5DPzg+Oj8/QTw/QDc7Ojs7PTs+Pjo7PD48Oz07PT8+QDw/Pz1AQEBBPj88PjxAQUVCQkZAQD9HSEpLUEae2tXV1dXV1dXW1tbW1tbW1tbW1tbW19fX19fX19fMzNDS0tLS0tLS0tLS0tLR3uzr6+rq6urq6urq6uvp1dLS0tLS0tLS0tLS0tTEqaqqqqqqqqqqqqqqq6aGhIWFhYWFhYWFhYWFik4MEhISEhISEhISEhIRE0pUU1NTU1NTU1NTU1NPg6ejo6Ojo6Ojo6Ojo6ScWFJTU1NTU1NTU1NTU093qKSko6Ojo6Ojo6OjpZVTU1NTU1NTU1NTU1NTS6ry6+vr6+vr6+vr6+vr6dnX19fX1tbW1tbW1tbW1dXV1dXV1dbW1tbV1dXV1dXV1dXV1dTU1NTV1dXV1dXW1tXV1dXV1dXV1dXU1NTU1NTU1NPUy5h3bGlKTl9NUlVNPjw8Nzs/Qz42Ojc+Pzs9QkA5PDk9Ozw6PD07PTs9Ozs9PD0+PT07QT08QUBBQT08Pzw7QEJDQURFPUFAQ0ZLS09GmNzV1dXV1dbW1tbW1tbW1tbW1tfX19fX19fX19fXzMzQ0tLS0tLS0tLS0tLS0d3q6enp6enp6enq6unq6dXS0tLS0tLS0tLS0tLUxaqrq6urq6urq6urq6yoiIeHh4eHh4eHh4eHh41SEhgYGBgYGBgYGBgYFxpOWVdXV1dXV1dXV1dXU4WopKSkpKSkpKSkpKSmnlxWV1dXV1dXV1dXV1dTeqmlpaWkpKSkpKSkpKaXV1dXV1dXV1dXV1dXV0+r8erq6urq6urq6urq6unZ19jX19fX19fX1tbW1tbW1tbW1tbW1tbW1tbV1dXV1dXV1dXV1dXV1dXV1dXW1tbW1tXV1dXV1dXV1dXU1NTU1NTU1NGcenFpSlRdT1JVTkQ+Pzs/QEA4Ojs4PDw8Oz46Ojs4Ozk5Ozw7Ojw5Ozs8Ozo9PT0+PUE/Pj8/Pj08PT88PEFBQ0FERTw+QEVGSktNRpPc1dXV1tbW1tbW1tbW1tbW1tfX19fX19fX19fX183Nz9HR0tLS0tLS0dLR0dHc6Ofn5+fn5+fn5+fn5+bV0dLS0tLS0tLS0tLS08Wtrq6urq6urq6urq6vq46NjY2NjY2NjY2NjY2SXSInJycnJycoKCgoKCcpWmNiYWJhYmJiYmJiYl6MrKmpqampqampqampqqJmYWJiYmJiYmJiYmJiXoKtqampqampqampqamrnmNhYmJiYmJiYmJiYmJbr+/p6enp6enp6enp6enn2djY2NjY19fX19fX19fX19fX19bW1tfX19fW1tbW1tbV1dXV1dXV1dXV1dXV1tbW1tbW1tbW1tbV1dXV1dXU1NTU1NTWo3txZElbYE5OVU9AQT89REI+Oz06OTo6PTw7PDs6OTg5OTs8Ozw8Ojo7PDo7QD08PTxAQTxBQTs7PEA/PD1CP0RDQ0U8PkJERkpMTEWN3NXV1tbW1tbW1tbW1tbX19fX19fX19fY2NjY2NjNzc3Ozs7Ozs7Ozs7Ozc3Nzs/Pz8/Pz8/Pz9DQ0NDQz87Ozs7Ozs7Oz87Ozs7NzMzMzMzMzMzMzMzMzMvJycrKysrKysrKysrKysfCw8PExMTExcXFxsbGxsvMy8zLzMzNzMzMzMzLz9HR0tLS0tLS0tLS0tLRzczMzMzMzMzMzMvLy8vN0tLS0tLS0tLS0tLS0tHNzM3Nzc3Nzc3Nzc3NzdTY2NnZ2dnZ2dnZ2dnZ2djY2NjY2NjY2NjY2NfX19fX19fX1tfX19fX19bW1tbW1tbW1tXV1dXV1dXV1dbV1dbW1tbW1tbW1tXV1dXV1dTU1NTU169/cF5GXmJQUVdOR0ZDQ0lBPz07PDo8N0BBPD04Ojs4OTg7Pzs8PDs7PDw8PD87PD46Pj44PkI8Pj1BPjw+QkBERUNAPD5APkNJSUtEh9zV1tbW1tbW1tbW1tbX19fX19fX19jY2NjY2NjYzs3Nzc3Nzc3Nzc3NzdHNzc3NzczP09LSzs3P0s7Ozs7Ozs7O0tPPz87Q09DO0tTV1NDPz8/Pz8/Pz8/Pz8/P0NDQ0NDR0dHR0dHS09PU1NTU1dXV1tbW1tfW1tbX1tfX19fX19fX19bW1tbW1tbW1tbW1tbW1tfX19fX19fX1tbW1tbW1dbW1tbW1tbW1tbW19fW2NjY2NjZ2dnZ2dnZ2dnY19jY2NjY2NjY2NnZ2dnZ2dnZ2djY2NjY2NjY2NjY2NjX19fX19jY19fX1tbW1tbW1tbW1tbW1tbW1dbW1dbW1tbW1tbW1tbW1tXV1dXV1NTV1di4gm9WSl9jUlFaS0hBQTxCPT07Oj4+PD4/PT0/ODk6OTk3OD48PD47Ozw7PDs/PT0+OTs7OT0+P0A+QD07OkI/QkNCPz0+QD5CRUdKQoDc1tbW1tbW1tbW19fX19fX19fX2NjY2NjY2NjY2M7Ozs7Ozs7Nzc3Nzsqfys7Nzc3QuYOEi8fTwJrLz87Ozs7O0qucz8/SuY++1JyChIrGz87Ozs7Ozs7Ozs7Oz8/Pz8/P0NDQ0NDQ0NDR0dHR0tLT09PU1NTU1NTV1dXV1dXV1dXV1dXV1dXV1dXW1tbV1dXV1dbW1tbV1dXV1dXV1NTU1NXV1dXV1dXV1dXW1tbW1tbW1tbX19fX19fX19fY2NjY2NjY2NjY2NnZ2dnZ2dnZ2dnZ2dnY2NjY2NjY2NjY2NjY2NjY2NfX19fX1tbW1tbW1tbW1tbW1tXV1tbW1tbW1tbW1tbW1tbW1dXV1dXV1dXYwIBuVU9gY1dZW0xMQ0A9PTw9Ojw9Qj5CQkA8Ojg5ODo6Ojc7Pz4/PDw7PDo5Pzw8PTg5PD9BPj09PUFAPTtBQkBCQz47QD9BQUlHSkF629bW1tbW1tbX19fX19fX19jY2NjY2NnZ2djY2dnOzs7Ozs7Ozs7OzdKpj63Rzs7Ozpu3tqSiwJOerNPOzs7O0racpaPUwJSwnLGWuLmvodLOzs7Ozs7Ozs7Pz8/Pz8/Pz9DQ0NHR0dHR0dHS0tLT09TU1NTU1dXV1dXV1dXV1dXV1dXV1dXV1dXW1tbW1tXV1dbW1tbW1tXV1dXV1dXU1dXV1dXV1dXW1tbW1tbW1tbW1tfX19fX19jX19fY2NjY2NjY2djY2dnZ2dnZ2dnZ2dnZ2dnZ2djY2NjY2NjY2dnY2NjZ2NjY19fX19fX19bW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tXV1dXV1dXV18h/b1pTYWVeXVxPSkQ9QD8+PDc6Pjk/RD5AOTg3ODk7Ozw4OT89PTw9PD47OkE7OTs5OzxDQDw7PT5AQT49QkQ/QkM9PT8+Pz5ISUg/ddrW1tbX19fX19fX19fX2NjY2NjZ2dnZ2dnZ2dnZzs7Ozs7Ozs7Ozs/Inrym0tDQzsqgl36Cw6abr6fUz8/Pz86dnJGdxaSgi5HDk31+r7DRzs7Ozs7Ozs7Oz8/Pz8/Pz8/Q0NDR0dHR0dLS0tPT09TU1dXV1dXV1dXV1dXV1dbV1dXV1dXV1tbW1tbW1tbV1dXV1dXW1tbV1dXV1dXV1dXV1dXW1tbW1tbW1tbW1tbW1tfX19fX19jY2NjY2NjY2NjY2NjZ2dnZ2dna2dnZ2dnZ2dnZ2dnZ2djY2NjY2NnZ2dnZ2dnY2NjY2NfX19fX19fX19bW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1dbV1dXV1dfNiHNdWGloXl9gT0lGOkFAPj48PDk2P0I/Qjo2NDg6Ozo8Ojk+PD49PTs/PTxBPjw8Ojw8PTw6PEA9QEI+PkFCPUNDPT0+Oz9BRUtIQHDZ1tbX19fX19fX19fY2NjY2NjZ2dnZ2dnZ2dnZ2c/Pz8/Pz87Ozs7SrKWnqdXAvNLHnY+ey9PJipmq1M/Pz9G/mKCbs6edh5261NLNnp7D0M/Pz8/Pz8/Pz8/Pz8/Pz8/Q0NDQ0dHS0tLS09PT1NTU1dXV1dXV1dbW1tbW1dbW1tbW1tbV1tbW1tbW1tbW1dXV1dXV1dXW1dXV1dXV1dXV1dXW1tbW1tbW1tfX19fX19fX19fX19jY2NjY2NjY2NjY2NnZ2dnZ2dnZ2tnZ2dnZ2dnZ2dnZ2dnZ2dnY2dnZ2dnZ2dnZ2dnY2NjY19fX19fX19fX19bW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbV1dXW0JB1W1tqaWFeXVNOSTxDQEE+QD46OEVAP0I6NzQ6Ojo5Ozs4Oz0/PT49QT08P0A9Pjw8PDw8Oj1AQD8/PT5CQD9AQkA8QD0+QUVLRz9r19fX19fX19fX2NjY2NjY2NjZ2dnZ2dnZ2dnZ2tnPz8/Pz8/Pz8/QzJ2Nl6zQmpfKxZ6ynpbN1q2ZqtTPz8/TtJmWqrmXnJCfoNLTwKCg0M/Pz8/Pz8/Pz8/Pz8/Pz8/P0NDQ0dHS0tLT09PT1NTU1NXV1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbV1dXV1dXV1dXV1dXV1dXV1dXW1tbW1tbW19fX19fX19fX19fY19fY2NjY2NjY2NjY2NjZ2dnZ2dnZ2drZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2djY2NjY2NfX19fX19fW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1dXV1tKUcl5ea2tqZV1PTEc/RENDQDo9OzxCPD08OTY0Ojk4Ojo5Nzs/QDw8PUA8PEE+PD07PTw/PDo8Q0A+PTs9QD5CPkBBPkA9QD9GSUQ/ZtXX19fX19fY2NjY2NjY2NnZ2dna2tra2tra2traz8/Pz8/Pz8/P07GigJuvyaCjv8qcpYynrdiqmarUz8/P1KuafqOSiqyvkaG516+iqdTQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NHR0tLT09PT1NTU1NXV1dbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1dXV1dXV1dbW1tXW1tbW1tbV1tbW1tbX19fX19fX19fX19fY2NjY2NjY2NjY2NjY2NjY2dnZ2dnZ2dna2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2djZ2djY2NjY2NfX19fX19bW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbSk3BgXnBoZmVaUUhHQkVDQEA3Ojo8Pjk8OTc2NTk6Njo8Ozc8P0A8Ojo9Ojw/Pj08OUA8PDo6OT9APT08PUBBQz9APz5BOz9ARkpCP2LS2NfX2NjY2NjY2NjY2dnZ2dnZ2tra29vb29vb28/Pz8/Pz8/P0M6fkGyclteqo9PSrqa1mJ/Vqpmq1M/Q0NSsm6eLmIqhmq2bqdijobrU0dHR0NDQ0dHQ0NDQ0NDQ0NDQ0NHR0tLT09PT1NTU1dXV1dbW1tbX19bW1tbW1tbW1tbX1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tfW1tfX19jY2NfX19fX2NjY2NjY2NjY2NnZ2dnZ2dnZ2dnZ2dna2tnZ2dnZ2dnZ2dnZ2dnZ2dnZ2djY2dnZ2dnZ2dnZ2dnZ2NjY2NjY2NjX19fX1tbW1tbW1tbW1tbW1tbX19fX19fW1tbW1tbX0pNuYFxxZGdkWlVKQENHREFBODs/PD07PDw3NTU4OTY4Ozo5PDo+Pzw9PTk8Pz49Ojo+OTw6Ojg+Pzw9PTw+QEFDQT48PDpCRERKRkJd0NnX19jY2NjY2NjY2dnZ2dna2trb29vb29vb29vPz8/Pz8/Pz9G9n8O31pfA09HQ0srSzZeb1KqZq9XRz9DTtrKypZubmqbFmKLRnp/J0tHR0dHR0dHR0dHR0NDR0dHR0dHR0tLT09PU1NTV1dXV1tbW1tfX19fX19bW1tbW1tfX19fW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW19fX19fY2NjY2NjY2NjY2NjY2djZ2dnZ2dnZ2dnZ2dnZ2drZ2tnZ2dnZ2dnZ2dnZ2dnZ2djY2NjY2NjZ2dnZ2dnZ2dnZ2dnY2NjY2NjY2NfX19fX19fX19fW1tfX1tbX19fX19fX19fX19bW19GSbF1cb2doYl1PRj9ISEZFQDw8Pj48PT08NzU2Ojk2Ojs6Ojs4QD86PDw5PD49Ozs6Pzk/Ojs5PT49Pjw7PTxAQ0I/Pz47Q0ZGR0hEWc3a2NjY2NjZ2dnZ2dnZ2dna2trb29vb29vb29vb0NDQz8/Pz8/Pz5V+e6WS1KKa08ySl6ObodirmavV0pem1cSimZacr56cm5utx5+h0tHR0dHR0dHR0dHR0dHR0dHR0tLS0tLS09PU1NTV1dXV1tbW19fX19fX19fX19fX19fX19fX1tbW1tbW1tbW1tbX19bW1tbW1tbW1tbW1tbW1tbW1tbW1tfX19fY2NjY2NjY2NjY2NjY2dnZ2dnZ2dnZ2dnZ2dnZ2tra2tra2tnZ2dnZ2dnZ2dnZ2djY2NjY2NjZ2dnZ2tnZ2dnZ2dnZ2djY2NjY2NjY2NjX19fX19fX19fX19fX19fX19fX19fX19fX1tfPjGRWXnBrXGBgTkVITUlJT0M+OkI9PUBCOzU1Nzw6Nzo7Ojo7OT09Ojo6OT0+Pz07OT47PDo8Ozk+PD47PD0+QENCPz5BPEFDR0ZGRVXJ29jY2NnZ2dnZ2dnZ2dra2tvb29vb29zc3Nzc3NDQ0NDQ0M/Pz9DR1aeZrcmjqL7KnbGdo7XZqZup2LiroMfVoqukms+mq6SexbSkptbS0tLS0tLS0tLS0tLR0dHS0tLT0tPT09PU1NTV1dbW1tbX19fX19fX19fX19fX19fX19fX19bW1tbW1tfX19fX19fW1tbW1tbW1tbX19fW1tbW1tbW1tbX19fX2NjY2NjY2NnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dra2tra2tra2trZ2dnZ2dnZ2dnZ2djY2NjY2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnY2dnY2NjY2NjX19fX19fX19fX19fX19fY2NfX19fX19fYzYZdV2JvZE9dVEtIRlNRS0tAPj1EPD9DRj01NTc7OTY6Ozo8PTo7Pzo6OTg6PT0/Pjs/Oz49Ojs5Pjs9PD0+QURCQD8+PzxAQUVHRURSxdvY2dnZ2dnZ2dnZ2tra2tvb29vb3Nzc3Nzc3NzQ0NDQ0NDQ0NDQ0NO5gL3Tm5bP1LWLkZ/T1LyBu9TOlKDT08iSjbTWzJOQp9e5g7/V0tLS0tLS0tLS0tLS0tLS0tLT09PT09PU1NXV1dbW1tfX19fX19fY2NjY19fX19fX19fX19fX19fW1tbX19fX19fW1tbW1tbW1tbW19fX1tbW1tbW1tbX19fX19jY2NjY2NnZ2dnZ2dnZ2dnZ2tnZ2tra2tra2tra29ra2tra2tnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2NjY2NjX19fX19fX19fY2NjY2NjY2NjY2NfX2ct+WlVpaltMX01KTEpVTEZCPDw/RkVHS0k9NjY3Ojk3OTo7Ojw9OT45OTo4Oz0+PkE+PTk8PDo9Pj47PTk5Oj9FQUA+PT8/QkBHRURFUMHc2dnZ2dnZ2dna2trb29vb29vb3Nzc3Nzc3dzc0NDQ0NDQ0NDQ0NDQ0cHR0crI0tDUxLjS0tHSwtLQ08fM0tHUyMHV0dTKvdXS0cLT0tLS0tLS09PT09PT09LS0tPT09PU1NTU1NXV1dbW1tfX19fX19fX2NjY2NjX19fX2NfX19fX19fX19fX19fX19fX1tbW1tbW1tbW1tfX1tbW1tbW1tbW19fX19fY2NjY2NjY2dnZ2dnZ2dnZ2dra2tra2tra2tra29va2tra2tra2dnZ2dna2tnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dna2tnZ2dnZ2dnZ2djY2NjX19fX19fY2NjY2NjY2NjY2NjY19rHd1xSZ2laTlpOTFBRV0VKPz89P0FETExBPjc3NTo4ODk5Ojs8Pjw+ODo6OTs+P0A9Pj46NTo6Oz0/Ojs5Ojw+QkJAPz8/P0FCR0RDRE683dnZ2dnZ2dna2tvb29vb29vb3Nzc3Nzc3d3d3dDR0dDQ0NDQ0NDQ0NDS0NDR0dDQ0dPU0dHR0dPR0dHS0tHR0dPU0tLS09XT09PV0tLS0tPT09PT09PT09PT09PT09PU1NTU1dXV1dbW1tfX19fX2NjY2NjY2NjY2NfX19jY19fX19fX19fX19fX19fX19fX1tbW1tbW1tbX19bW1tbW1tbW1tfX19fX2NjY2NjY2NnZ2dna2tra2tra2tra2tra2tra2tvb2tra2tra2trZ2tra2tra2tra2tra2tnZ2dnZ2dnZ2dnZ2trZ2tra29ra2trZ2dnZ2dnZ2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjbwXNYVWlrU0xSTlBSWVRGSTw+Qz9BQkVKPT03ODY5Nzc4OTk7Oz0/QDw8ODk7Ozs/Pjw8OTU6PT47OTk7PD8/P0JCQT1BPUBBQkZCQkJLtd7Z2dra2tra2tvb29vb29vc3Nzc3Nzd3d3d3d3R0dHR0dHR0dHR0dDQ0NDQ0NDQ0dHR0dHR0dHR0dHR0dHS0tLS0tLS0tPT09PT09PT09PT09PT09TU1NPT1NTU1NTU1NXV1dXV1dXW1tbX19fX2NjY2NjY2NjY2NjY19fY2NjX19fX19fX19fX19fX19fX19fX19fW1tbX19fX1tbW1tbW1tbX19fX19jY2NjY2NnZ2dna2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tnZ2dnZ2dnZ2NjY2NjY2NnZ2dnZ2dnZ2NjY2NjY3LxvVFRsbExLUkpUUlVLRkQ6PkdEREFERjw/ODk6OTU5OTo3PD07PkA9PTc5Ojs5Pjs5OTY2Oj1AQT47PDk6Pj9DQT4/Qj0+QkNFQkFCSrDe2dra2tvb29vb29vb29vc3Nzc3Nzd3d3d3d3d0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0tLS0tLS0tLS0tLS0tLS0tPT09PT09PT09PT09PT1NTU1NTU1NTU1NTU1dXV1dXV1tbW1tbW19fX19jY2NjY2NjY2NjY2NjY2NjY2NjY19fX19fX19fX19fX19fX19fX19fX19fX19fW1tbW1tfW19fX19jY2NjY2NjZ2dnZ2dra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2trZ2dnZ2dnZ2djZ2dnZ2dnZ2dnZ2dnZ2dnY2Ny2a1NbcGtLVVdSXFFXSEQ+PEJKRT1ISj89PDc4ODo1OTg5Njs+PD1APDw1OTk8Oj87OTk0ODw9PUFBPD47Ojw+QD89PkE9PUNGR0I/Qkmq39ra29vb29vb29vb3Nzc3Nzc3N3d3d3d3d3d3dHR0dHR0dHR0dHR0dHR0dHR0dHS0M/U0M7P0tLT0tLS0tLS0tLS0tPT09TU1NTU1NPU1NTU1NTU1NTU1NTU1NTV1dXV1dXV1dbW1tbW19fX19fY2NjY2NjY2NjY2NjY2NjY2NjY2NjX19fX19fX19jY2NfX19fX19fX19fX19fX19fX19fX19fX19jY2NjY2NjY2dnZ2dra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tvb29va2tra2tra2tra2tra2tra2tnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dndsGRTYXJfT1pUV19RUkdCPUVJS0FBTEQ/Pzs5ODg5Mzg2ODY5Pj0+Pz06Njo7Pjs9PTo5Njg6PTtAQDxAPz0/P0I+PD48PEJFSElCPkNJpODa29vb29vb3Nzc3Nzc3Nzc3N3d3d3d3d3d3t7S0tLS0tLS0tLS0dHR0dHR0dPT0bm7zLqbnLrQyNPT0tLS09PT09PT09PU1NTU1NTU1NTU1NTU1dXV1dXV1dXV1dXV1dbW1tbW1tbX19fX19fY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjX19fX19fX19fX19fX19fX19fX19jY2NjY2NjY2NjZ2dra2tra2tra2tra2tra2tra2tra2tra29va2tra29va2tvb2tra2tra2tra2tra2trb29vb29va2tra2tra2tra2tra2tra2tra2tnZ2dnZ2trZ2dnZ2dnZ2dnZ2dnZ3qpfVWBuW1VZUVpeT0xHQ0ZNSUZEREk7QUE7PDg4NjU4Njk4Nzw/QT89Ojc8Pz48Pz87OjY4OD09QEE9QD5BQD1AOjs6Pj1BRUdKQkBDR57h29vb29vc3Nzc3Nzc3Nzc3d3d3d3d3d7e3t7e0tLS0tLS0tLS0tLS0tLS0tO+wMqaoKKViJGeqpOpz9TT09PT09PT09PU1NTU1NTU1NTU1NTV1dXV1dXV1dXV1dXV1tbW1tbW1tbX19fX19fY2NjY2NnZ2dnZ2dnZ2dnZ2djY2djY2NjY2NjY2NjY2NjY2NjY2NjX19fX19fX19fX19fX19fX19fY2NjY2NjY2NjZ2dna2tra2tra2tra2tra2tra2tra29vb29vb29vb29vb29vb29vb29ra2tra2tra2tra2tvb29vb29va29vb29vb29va2tra2tra2tra2tra2tra2trZ2dnZ2dnZ2dnZ2d6iXFVeblheXU5aUFROQ0NMSUlJRkpEPEFBPDs4NzY3OTc3OTk9P0E/PDo5QD88PkI/Ojg3NzY9P0BAPUBBPz88PTs7OD48P0VJSEE/Q0aX4dvb29zc3Nzc3Nzc3N3d3d3d3d3d3t7e3t7e3tPT09PT0tLS0tLS0tLS0tTIlZyum5m1iX2TjIKBhMTV09PT09PT09PU1NTU1dXV1dXV1dXV1dXV1dXV1dXV1tbW1tbW1tbW1tfX19fX19fX2NjY2NjY2dnZ2dnZ2dnZ2dnZ2dnZ2NjY2NjY2NjY2NjY2NjY2NjY2NfX19fX19fX19fX19fX19fX2NjY2NjY2NjY2dnZ2dnZ2dna2tra2tra2tra2tra29vb29vb29vb29vb29vb29vb29vb2tra2tra2tra2tvb29vb29vb2tvb29vb29vb2tra2tra2tra2tra2tra2tra2tra2tra2tnZ2dndmlpYYW5ZYVdPV01QRUJETElNS0ZJRT5CRDg4ODY3OTc1Njk4PT1BPjo4OT4+PD9APzw1Njc2PD4/PjtAQEA/Pj4/Pjs/PkFCRkdCQENIkeLb29zc3Nzc3d3d3d3d3d3d3d7e3t7e3t7f39/U09PT09PT09PT09LS0tLTz6h+kayPko6MhoCIiYSQo8rU09PT09PU1NTU1dXV1dXV1dXV1dXV1dbW1tbW1tbW1tbW1tbW19fX19fX19fX2NjY2NjY2dnZ2dnZ2dnZ2dnZ2dnZ2dnY2NjY2NjY19jY2NjY2NjY2NjY2NjX19fX19fX19fX19fY2NjY2NjY2NjY2NnZ2dnZ2dna2tra2tra2tra2tra29vb29vb29vb29vb29vb29vb29vb29ra2tra2tra2tvb29vb29vb29vb29vb29vb29va2tra2tra2tra2tra29vb29ra2tra2tra2tna3JJaWWNuWlpSVV5QTDxAR05IUklIRT48SEY4OTc1Nzg3NTg5ODs+Pj07ODlBPj1AP0E+NzU5Njs+QUI/P0BAQUI/Pj8+QUBEQUZIQj9FSozi3Nzc3Nzc3d3d3d3d3d3e3t7e3t7f39/f39/f1NTU09PT09PT09PT09PWtaWaiIuQhYCFi4iBg4qLf4bC1tTU1NTU1NTV1dXV1dXV1dXV1dXW1tbW1tbW1tbX19fX19fX19fX2NjY2NjY2NjY2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2djY2NjY2NjY2NjY2NjY2NjY2NjY2NjX19fX19fX19fY2NjY2NjY2NjY2dnZ2dna2dra2tra2tra2tra2tra2tvb29vb29vb29vb29vb29vb29vb29vb29ra2tra2trb29vb29vb29vb29vb29vb29vb29vb2tra2tra2tra29vb29vb29vb29vb2tra29uIWltnalxYTFpfVkg6TEhMSkpDREVDQUxINzo3Njc4ODU4Nzg5PDw7Ozk4QD89Pj8/PDY3PDQ3P0JCQUBAPz8/QT09P0A+QEBGRT09REuI4tzc3Nzd3d3d3d7e3t7e3t7e3t/f39/f39/f39TU1NTU1NPT09PT09PUxZKCg4WGfYGCfXx5foGCg36k29bU1NTU1NTV1dXV1dXV1tbV1tbW1tbW1tfX19fX19fX19fX19fX19jY2NjY2NjZ2dnZ2dnZ2dna2tnZ2dnZ2dnZ2dnY2NnY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjX19fX19fY2NjY2NjY2NjY2dnZ2dna2tra2tra2tra2tra29vb29vb29vb29vc3Nzc3Nvb29vb29vb29vb29vb2tra2tra29vb29zb29zb29vb29vb29vb29vb29vb29va2tvb29vb29vb29vb29vb29vb2tvZgFpebWhaU0ldW1hKRE1ISlNMR0ZBQD9KQjg7NjY5OTc1ODY4Ozo7Ojw5OD09O0A9Ozo2NTw3Oz1CQEFBPD49QEE9PEA/Pz5CREU+PERLg+Lc3d3d3d3d3t7e3t7e3t7f39/f39/f39/f39/V1dTU1NTU1NPT09PT2LKEkKh9g3l2hIh/e3d5gn5+i67A1dTU1NXV1dXV1tbW1tbW1tbW1tbW1tfX19fX19fY2NjY2NjY2NjY2NjY2NjZ2dnZ2dnZ2dna2trZ2dnZ2dnZ2dnY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2dnZ2dna2tra2tra2trb2tra2tvb29vb29vb29vc3Nzc3Nzc29vb29vb29vb29vb29va2trb29vb29zc3Nzc3Nvb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vc1nlcWmxmWFJPYFFSQUhHSkZYTEZAQENDSz87Ozc4ODc2NTc2ODo5PDw6PTs/PTs9Pjw7ODg8OT0/QkFCQzw8P0FCPj1BQkNCREVDQDtDTH3h3d3d3d3e3t7e3t7e39/f39/f39/f39/g4ODg1dXV1NXU1NTU1NPU0ruen3WKeXuIgICChYGDcnOAhYOMrNfV1NXV1dXW1tbW1tbW1tbW1tbW19fX19fX2NjY2NjY2NjY2NjZ2dnZ2dnZ2dnY2NnZ2dna2tra2trZ2dnZ2dnZ2djY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2dnZ2dna2tra2tra29vb29ra2trb3Nzc3Nzc29zc3Nzc3Nzc3Nzb29vb29vb29vb29rb29vb29vb29zc3Nzc3Nzc3Nvb29zc3Nzc3Nvb29vb29vb29vb29vc3Nzc3Nzc3Nvb29vb3dByXV9wZVdLUGNPS0JHQ0pIS0ZBPEE9SFFBOjo3Nzg3Njc4Nzw6OD09PD47QD88Pz07Ojs5Ojk8QEJAQkNAPUFAPz1AQkNDQUBAP0A7RU144N3d3d7e3t/f39/f39/f39/f3+Dg4ODg4ODg4NXV1dXV1dXV1NXU18h4i4V8goh6g4SBfoKCc2l0hYuGkJ3U1tXU1dbW1tbW1tbW1tbW19fX19fX19jY2NjY2NjY2NnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dra2tra2tra2dnZ2dnZ2dnY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2dnZ2dna2tra2tra2tra2tvb2tvb3Nzc3Nzc3Nvc3Nzc3Nzc3Nzc29zb29vb29vb29vb29vb29vb29vc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc29vb297KalxjcWVST1heSz9HTElPS0VAPkFCP0lPPjk6NzY7NzY6Ozc7Ojg6PDw+Oz09Oz48Ojs4OTo4OUFCQkFAQDtAQj06PkFCQz8+PT4/PUZOdN/e3t7e3t7f39/f39/f4ODg4ODg4ODg4ODg4OHV1dXV1dXV1dXV1s6dhpl+f5OTin+CgXx9gnNxm4mAgoOJwNnat7TQ19bW1tbX19fX19fX19fX2NjY2NjY2NjY2NjZ2dnZ2dnZ2dnZ2tnZ2dnZ2dra2tra2tra2trZ2dnZ2dnZ2dnZ2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NnZ2dna2tra2tra2tra2tra29vb3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nvb29vb29vb29vb29vb29vc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3NvfwGNaW21gVlBTU0pETEhNSEk8PkFEQ0ZORDw8OTc5OjY4Ozk3PDk4OTw9OzlAPjpBPzw3NTc7ODpAQUVBPz45PUI/Oz1CQkI6Pj07PT5GTnHe3t7e3t/f39/f39/g4ODg4ODg4ODg4OHh4eHh1tbW1tbW1tbV1tjLioCHhYOXjHh7e3lvfYF1a3ebdHZ7eInHxpiMrdjZ19fX19fX19fY2NjY2NjY2NjY2NjY2NjY2dnZ2drZ2dna2tra2tra2tra2tra2tra2tra2dnZ2dnZ2dnZ2dnZ2dnZ2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NnZ2dnZ2dnZ2dna2tra2tra2tra2tra29vb3Nzc3dzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nvb29vb29zb29vb3Nzc3Nzc3Nzd3dzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3d3d3d3d3Nzc3Nzc4LdjV1lrYlJNVVFMSktGS0ZDQD5CQT9FTT4+PTg5OTo3OTo3NT03Nzo+PDs7Qjw5Pz05NjY4PTk6QEJGQD49PEBCREA9QD9DO0A9PD4/Rk9t3N/e3t/f3+Dg4ODg4ODg4ODg4OHh4eHh4eHh4dbW1tbW1tbW1tfVrYZ6d32rn3l4entzdH+Dfm9xe3l6c3t2k4qFgImkzdnY19fX2NjY2NjY2NjY2NjY2NjY2NjY2NnZ2dna2tna2tra2tra2tra2tra2tra2tra2tnZ2dnZ2dnZ2dnZ2dnZ2dnZ2djY2NjY2NjY2NjY2NjY2NjY2NjY2dnZ2dnZ2dnZ2dra2tra2tra2tra29vb29vc3Nzc3N3d3d3c3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc29vb29vc3Nzb3Nzc3Nzc3N3d3d3d3d3d3dzc3Nzc3Nzd3d3c3Nzc3Nzc3N3d3d3d3d3d3d3d3dzc3OGtYVtebGJSTVZMTUdLS0RGQkI7QT08RUxCQT44Ojk6Nzc5NjY6NTs+QDs9Oz89PD89Ojk5Ojw5PEVDRkA/PkBDQkQ9OT0/QT1CPz1APkdPadvf3t/f3+Dg4ODg4ODh4eHh4eHh4eHh4eHi4uLW1tbW1tbW1tfQmH+Qh4N9eoN2e3Vzenl6kKqmd3JyfoeHh4CAfoKEhJHJzNnX19jY2NjY2NjY2NjY2NjY2NjY2NnZ2dnZ2tra2tra2tra2tra29va2tra2tra2tra2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2djZ2dnZ2dnZ2djY2NnZ2dnZ2dnZ2dnZ2tra2tra2tra2tra29vb29vb3Nzc3N3d3d3d3d3d3d3d3d3d3d3c3Nzc3Nzc3Nzb29vb3Nzc3Nzc3Nzc3Nzd3d3d3d3d3d3d3dzc3N3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3NzhpV9UYm1iUE9TSUhHRkpJSUJBPkJCPEVFREA+ODo4Ozc3Ojc4ODY+Pz07PDk9PDo+PTs6Njc7NjpEQUY+Pz8/PkNBPzs9PT47REM/PjxIT2fZ4N/f3+Dg4ODg4eHh4eHh4eHh4eLi4uLi4uLi1tbW1tbW19jYyH52doN+fnR2eIaCenl1d5yhu6GEgoCAfoeKinx/gYaMnKjO2NjY2NjY2NjY2djY2NjZ2djY2NjY2dnZ2dra2tra2trb29rb29rb2tra2tra2tra2tnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dna2tra2tra2tra2tra2trb29vb29zc3Nzc3N3d3d3d3d3d3d3d3d3d3d3d3dzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3e3t7e3t7e3d3d3d3c35pbT2drXFBRUElDT0pLR0xHSkJAP0FHREBBPDg8ODg1ODk3Njc3QEA/Ozw5Pj04PTw8Ojc4PTk/RENGPkE/QkBDPzw6Pj0/PkVEPz07S1Fj1+Hf4ODg4ODh4eHh4eHh4uLi4uLi4uLi4uLj49bW1tbW19XB3LRueHJze3B6eXaFiIR7eH2AgZiljH98fnuRhZaLhoGDgY6Rvd3Z2NjY2NjZ2dnZ2dnZ2dnZ2dnY2dnZ2dna2tra2trb29va2tva2tra2trb29ra2tra2tnZ2dnZ2dnZ2dnZ2dna2trZ2dnZ2dra2tra2tnZ2dnZ2dna2tra2tra2tra2tra2tra2trb29vc3Nzc3Nzc3N3d3d3d3d3d3d3d3d3d3d3d3d3d3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3e3t7e3t7e3t7e3t7e3t7e3t3d3d6NWFdobllQUUtISlNJTUhNSUtBQz9DRkJBRDo6PDg2NDg4NzY2Nj8+Pjo8OTw7Oj09PDw4Ozw8RERERT4/PkI+Qj84PT8/Q0NCQEE+O0xUY9Xh3+Dg4OHh4eHh4eLi4uLi4uLi4uLi4uPj4+PW1tbW1teslLZ6eHJvd5V7dHuLgHh1bn6Fg3t/hYhyfH2bnI6JioJ+g32Hk5rH1NjY2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dna2tra2trb29vb29vb29vb2tra2tra2tra2tra2tnZ2dnZ2dnZ2dna2tra2tra2tra2tra2tra2tra2tra2tra2trb2tra2tra2tra2trb29vc3Nzc3Nzc3Nzd3d3d3d3d3d3d3d3d3d3d3d3d3d3c3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3N3d3d3d3d3d3d3d3d3d3d3d3d3e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3d7Zf1lgaGxcUUtHR09LTk5PTURGQkg/Q0hEREA6Ozs4NzU3Nzc4NThAPkA7PDk8Ozw+Ojk7OTk7OUZERUI8QD4/PEBDOz5AP0A/Qj8+OjtKVWPV4eDg4eHh4eHi4uLi4uLi4uLi4uPj4+Pj4+Pj1tbX19vKhYR3cXJubniVhHt4hH95dnB4c3eLkY6CdnN9ioaId3d1d4ODfIiIk8Pb2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dra2trb2tvb29vb29vb29vb29rb2tra2tra2tra2tra2tnZ2dnZ2dna2tra2tra2tra2trb2tra2tra2tra2tra2trb29vb2tra2trb29vb29vb3Nzc3Nzc3Nzd3d3d3d3d3d3d3d3d3d3d3d7e3d3d3d3c3Nzc3Nzc3Nzc3Nzc3Nzc3d3d3d3d3d3d3d3d3d3d3d3d3d7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7f0nVZaGlqVk5KSE1OR01EUElGSD9FPUZMREM+Ozs8OTc3OTY2OTU4Pj4/PTs8QDs9PDo3Ozc5OThHREVCPUE9Qj8+QDw/QUE/QEJAPjs8S1Ri1OLg4eHh4eLi4uLi4uLi4+Pj4+Pj4+Pj4+Pj49fX19fEknuJf29sbnV2foSBg4qGfnVybWVtiIaKjoR7c4OHint4e4OPj4GEioqxztrZ2dnZ2dnZ2dna2tra2tra2tra2trb29vb29zc3Nzb29vb29vb29va2tra2tra2tra2tra2tra2tra2tra2tra2tra2tvb29va2tra2tra2tvb2tvb29vb29vb29vb29vb29vb29zc3Nzc3Nzc3d3d3d3d3d3d3d3d3d3d3t7e3t3d3d3d3d3d3d3d3dzc3Nzc3Nzc3d3d3d3d3d3e3t7e3t7e3t7e3t7e3t7e3t7e3t7f39/f39/f39/f39/f3t7e4clsW2pqalNOR0hOT0VIRk1JSUA7RD5ISUA9PDo6Ojg2ODo3Nzk0OD08PT07ODw8PDw4Njc4OTo6RUJFQT9APEI/Q0M+PkNEQUBAP0A8PUtRYdPj4OHh4uLi4uLi4uPj4+Pj4+Pj4+Pj4+Pj5OTX19fZqXaFfnx3bHB3eXh8jH2KhYB3anN0d3p9bot7fnl6foR/gIGDfnh8foeGlrbT2tnZ2dra2tra2tra2tra2tra2tvb29vb3Nzc3Nzc3Nvb29vb29vb29ra2tra2tra2tra2tra2tra2tra2tra29ra29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb3Nzc3Nzc3Nzc3d3d3d3d3d3d3d3d3d3d3d7e3t7d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3t7e3t7e3t7e3t7e3t7e3t7e3t7e39/f39/f39/f39/f39/f39/e3uO9amFpa2lRTkZNTEtKWE1OR0FAQE9BRD9AOzw4OTk5Njg2NjY4NDs+PD07OTY6Ojk6OTU4OTg5OkJERj8+Pj5AQEBCPzxBQD88Pj9BOT5KT17S4+Hh4eLi4uLi4+Pj4+Pj4+Pj4+Pj4+Tk5OTk19fX2sqKhIB5c29tcXN1d4CUeHaAfHWHhXd1cnWgmXp7d3Z5doR0bWxue3iAmouTu9za2tra2tra2trb29vb29vb29vb29zc3Nzc3Nzc3Nzc3Nzc29vb29vb2tra2tra2tra2tra2tra2tra2tra29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vc3Nzc3Nzc3Nzc3d3d3d3d3d3d3d3d3d3d3d3e3t7e3t3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3t7e3t7e3t7e3t7e3t7e3t7e3t/f39/f39/f39/f39/f39/f39/f397js2lpbmloUFBPTExPUk9LU0Y/RURERD48PDg6ODc5OTU2ODY2NzM6Pjs+PTc6Pjk5OTk2Ojo4NzxDRUc/Pzs/PkA9PkE9Oz0+OUFAQDhBTlFc0OTh4eLi4uLj4+Pj4+Pj4+Pj4+Pk5OTk5OTk5NjY2NjauY6AenZ1bmpveHCBfWt0cnZ3hIV5h4d5lY55eXp1d3pza298gHx2fYh8gLLe2tra2tvb29vb29vb29vc3Nzc3Nzc3Nzc3dzc3Nzc3Nzc3Nzb29vb29rb29vb29ra2tra2tra2tra29va29vb29vb29vb29zc3Nzb29vb29vb29vb29vc3Nvb3Nzc3Nzc3Nzc3Nzc3Nzc3d3d3d3d3t7e3t7e3d7e3t3d3t7e3t7e3t7d3d3d3d3d3d3d3d3d3d3d3d3d3t7e3t7e3t7e3t7f39/f39/f39/f39/f39/f39/f4ODg4ODg4N/f39/f4qpqa2hrZFNQT0ZQVFJOSFJLPkREQ0I7Ozk6Ojg2Nzg1NjY4ODg0Oz88Pzw5PDw3Ozo6Nzo6Nzo9Q0JDPUE+Pzw5PT5BQDs8PDtFQD47Q05TXNDk4eLi4uLj4+Pj4+Pj4+Pj5OTk5OTk5OTk5OTY2NjZ1p5vdntveHh2cG50d3BwdHBzb36Jc3qGhY2EenNtcoB6hn1vg5OBdnx9g4a13drb29vc29vc3Nzc3Nzc3Nzc3Nzc3Nzc3d3d3Nzc3Nzc3Nzc3Nzb29vb29vb29vb29ra2tra2tvb29vb29vb3Nzc3Nzc3Nzc3Nzc3Nzc3Nvb29vb29vc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzd3d3d3d3d3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3d3d3d3d3d7e3t7e3t7e3t7e3t7f39/f39/f39/f39/f39/f39/g4ODg4ODg4ODg4ODg4N/f3+KgbWhma2ZVVlJHUFFOS0xMRUJIRUc9OD08Ojo3Nzg2Nzc2NTY3NDg+PD09Ojg6OD46Ozc4Nzc6Oj5DRDtDQj49OD1AQUM/Pjw+RTw+PUJNUF/S4+Hi4uLj4+Pj4+Pj4+Pk5OTk5OTk5OTk5OTk2NjY3MB2doCCfnp4eHBsdXlya399bHNvdGdoaYB/aWl4c2d+iYl4cIKGe3d9foWKvN3b3Nzc3Nzc3Nzc3Nzc3Nzc3d3c3Nzc3N3d3dzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nvb29vb29vb29vb3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzd3d3d3d3d3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7f39/f39/f39/f39/f39/f4ODg4ODg4ODg4ODg4ODg4ODg4ODflGttZm5mU1NJUFlUTEhGTkZGRUJGPTs+PDs5NzY4NTc5NjQ1NzU4PDs9Pjo6OztAOTs7ODc6OTlAQkE8QUE/Pzk/QEJFQ0FAQEM7Oz1ES01g1uTi4uLi4+Pj4+Pj4+Pk5OTk5OTk5OTk5OTk5NnZ2tmYc3uqhJaCcnR1dn14aGx8d2h4d25rcHR5gIJ3dHyBhIJ9c3CAin94gn95g8je29zc3Nzc3Nzc3Nzd3d3d3d3d3d3d3d3d3N3d3dzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nvb29zc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3N3d3d3d3d3d3d3d3d3d3d3d3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e39/f39/f39/f4N/f39/f3+Dg4ODg4ODg4ODg4ODg4ODg4ODg4ODh24tubWdzY1lRTVVbV0hDSUZOS0dCRD8/Qjo7OjY2NzU2NzY0ODc2Ozw7Pj86PDk8Qjg3OTo6Ojk6QUFCQUJDQEE+PT9CQ0NEQUJGOTg9REpOYtjk4uLi4+Pj4+Pj5OTk5OTk5OTk5OTk5OTk5OXZ2drcqHGCtXiRfnNsem6EgXaCfWtoan+DeHZ8dX2FhXRmcHl9d316gIqFe318foC03tzc3Nzc3N3d3d3d3d3d3d3d3d3d3d3d3dzd3d3d3dzc3N3c3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzd3Nzd3d3d3d3d3Nzc3Nzc3Nzc3Nzc3N3d3d3d3d3d3d3d3d3d3d3d3d3d3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e397e3t7e39/f39/f39/f39/g4ODg4ODg4ODg4ODg4ODg4ODg4ODg4eDg4ODg4ODg4tiFb3FrdWFWT1VVXE9ETUY+SkdKRUQ8P0I6PDk4Njg0NTY3NDc2NDk7Ozw7OD47PEE4ODo9OD04Oj09QEBAP0FCP0A+QENCQ0FBRTc2O0RMTmPa5OLi4+Pj4+Pj5OTk5OTk5OTk5OTk5OTk5OXl29ra3Z5sbnNxhY1ybXBuf391hH5rcnZ2enN4gXhzbnVwbWt2fHmFiIB/f392coODsd/c3Nzc3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3Nzd3d3c3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3N3d3d3d3d3d3d3d3d3d3d3d3d3c3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e39/f39/f39/f39/f39/f39/f39/f39/f39/f4ODg4ODg4ODg4ODg4ODg4ODg4OHh4eDg4eHh4eHh4eHh4OLXhW1xb3ZeUldTWlpRSkhDQFFAQkQ8OT9BOjw5NzU3NDU2NjQ3NTY9PDo9PTk+OjxAODo6PDY7OTs+PUJCQjtBQkBDQEBEREM8PUA3OjxFS01l3OPi4uPj4+Pj5OTk5OTk5OTk5OTk5OXl5eXl5dPOxsB+cWxveHt2b3VuanNzbZKGeG50dG5vdIZ/b2twboJ0bXZyfY2DdnF/d3mKgabf3Nzc3d3d3d3d3d3e3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3dzc3d3d3dzc3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3t7e3t7e3t7e3t7e3t/f3t7e3t7f39/f39/f39/f39/f39/f39/f39/f39/f39/f4ODg4ODg4ODg4ODg4ODg4ODg4ODg4eHh4eHh4eHh4eHh4eHh4eHi1oZucG1xYFJZUFdfWUpMTElSP0Q9OTtCRjs6OTc0NTY1NzU0NjY2Pj07Pz45PTk7Pjg9Ozo0ODtAQENCQ0FCRkE/Q0BBQkREOz0+OTs8QkxNZODl4+Pk5OTj4+Tk5OTk5OTk5OTk5eXl5eXl5eW5t7Woc3JscHd6dHd4bXFydXd/hHRyc2xsa3F8bnBudGuBf3GAd32Eg355gHNygYqg2d3c3d3d3d3d3d7e3t3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3e3t7e3t7e3t7d3d3d3t7e3t7e3t7e3t7f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f4ODg4ODg4ODg4ODg4ODg4ODg4OHh4eHh4eHh4eHh4eHh4eHh4eHh49WHcWxqbF5YWlVXYFZWUE9QTD1BOjs8RkE4Ojg3MzY1Njk2NTg1Nz89Oz8+OT04Ozw5PTs7NTo9Q0JCPENDREREQUE/PkJDQzw9Pjg5PENLS2PN0dnh1sjY4+Tk5OTk5OTk5OTk5eXl5eXl5eXltbW2q3J5cm59f3Z1d2hqaGlwb3Zta2tnZWZxdG15gG5teXd2iHhxa2podXV5dHV/wd/c3d3d3d3d3d3e3t7e3d3d3d7d3d3d3d3d3d3d3t7e3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3e3t7e3t7e3t3d3d3d3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f4ODg39/g4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4OHh4eHh4eHh4eHh4eHh4eHi4uHh4ePVhnFwY2lhV1NZV19MUk9STUtAPjg5O0E+ODc5NjQ3Njc6NjY2NDk+Pzo8Pzo/OTo6Nzo9PDk5PEFBPTtBQ0VDRkA+Pj5BRUQ+QEE3OD5GSEpesrW4wbm1u8jg5eXl5OTl5OXl5+fn5+fm5ebm5ra2tbWOfX5weoR1cnZnYmNlbGtyb2ZpbHZtd4Z9hXlsbHd4a3ZwfH14c3V5fHd2h7ng3d3d3d3d3d7e3t7e3t7d3t7e3t7d3d3d3d3d3t7e3t7d3t7e3t7e3t3d3d3d3d3d3d7e3t7e3t7e3t7d3d3d3d3d3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4OHh4eHh4eHh4eLi4uLi4uLi4uLi4eHj1Yd1bl5uY1pUU1hXS1NLSk1SR0E4Ozs+PDk4NzU2NTY2OTY4NjY5Pzw6PT07Pzo7Ozk8PDs5Oj4+Pjs8PUFEQkNBQEBBP0JDPDw9Nzs+REVKXrG1tLW2t7e2y9rJ3uXl3eDi3tXU1tPU4OPg39+2treuh3t/bnmNenJ1bWNobGxtaXR4enF5enqIh4N6aWh9cWRvcXyGgX55e318e4an2t7d3d3d3d7e3t7e3t7e3t7e3t7e3d3d3d3d3t7e3t7e3t7e3t7e3t7e3t3e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t/f39/e3t7e3t7f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4OHh4eHh4eHh4eLi4uLi4uLi4uLi4uHh49aGdmxhb19dV1lcWlJQSEpXTEVHPUA9Ozs9OTY0NjU1NTg2NzY3OD87OT09PDw5OTw6Pjw6OTg+Qjs7Pj5AREBDRUFAQD0/QDw9PTU5PEJHRl2xtbW2uLm5ubq9uMPT0r3BwcC6u7y6u8TMxb/Dt7e3hGl1gX1ndYd5Z3Vxa2t5eHB3fH15bWl3e3h3bml1j4FwbHl4d3d9gXuGgnmAoNze3d3d3t7e3t7e3t7e3t7e3t7e3t3d3d3d3d7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t/f39/f3t7e3t/f39/f39/f39/f39/f39/f39/f39/f39/f39/f4ODg4ODg39/f39/f39/f3+Dg4N/f4ODg4ODg4ODg4ODg4ODg4ODg4ODh4OHh4eHh4eHh4eHh4eHh4eHh4uLi4uLi4uLi4uLi4uLi4ePXhXJrZ3RhW1hYX15TVVVRVUpMRj9JRDs5PTY2NDc3NTc4Nzc3ODk8PDo+PDg8Oj0+OTs8OTs5P0E8PT9DP0FARUJCQTw9Q0A6Pjw1NDlER0dasbW1tre5ubm5ubm3ubm4uLm5urq6urm5urm6u7e3uX9ucHN6b3B/eXNuc3Vsc3Z4cXFwb2tvcX6Bc2mHhIF9dHOHdW11hYmBgHJ2hafd3d3d3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7f39/f3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f4ODg4ODg4ODg39/f3+Dg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4eDg4eHh4eHh4eHh4eHh4eHh4eHh4eHh4uLi4uLi4uLi4uLi4uLi4uHj14lxa2xyW1dXXWBUUVVUUFJPSkNATUE9Ozk2NTM0NjQ2ODc3Nzk6Pjs8Pjs5PDo8PDk8PTw7PT0+PUNEREBDQkE/QD48PkE8OD06NjY6QkpIWLG1tLa2uLm5uLi5uLe3uLi5urq5ubi4uLi6uru3uKx7cnhxf3ZzfnBsbXpyZ29sbW50cHt3d3Jyd3pvhpJ2f3x8enZ5fH9zfYdyda3T393d3d7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e39/f39/f39/f39/e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f4ODg4ODg4ODg4ODg4ODg4ODf3+Dg4ODg4ODg4ODg4ODg4ODg4eHh4eDg4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4uLi4uLi4uLi4uLi4uLi4uLi49eHb2pxalVWV2FbT1FSUE5XSURESUo/Ojk6NzUzNDk1NzY2Nzg4Ojw7PD46PDo6PTw5PDw9Oz09PDs9REdEQ0E8PDw8Pj5AOzg8ODE1OkFGRVautbW1tre4uLm4uLi4uLe4ubq5uLi3t7i4ubq7t7mqcnB4d3x7e4J3aG5xam9qY2lyf21zcn54dHFsanaAeX2AgH91doB1a4qLgHaR1d/d3d7e39/f3t/f3t7e3t7e3t7e3t7e3t7e3t7e39/f39/f39/f39/f4N/e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t/f39/f39/f39/f39/f39/f39/f39/f3+Dg4ODg4ODf4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHi4uLi4uLi4uLi4uLi4uLi4uLi4uPYhm1sdGVWUFxnWE1YU1JRWUVDS1BOOzk4ODY1NTM5NTY2NzY4Nzk+OT0+OTw5OTw7Njg5OTo8QEA9PkBGQEJCQDo+PEE9Pzs7OzYxNjxCR0RQqLa1tba2tre4t7i4uLi4uLm6ubi4t7e3t7e5ure2tIlyd3h9iXxwem99c2hqbGdnbHRscXd0cWx2c3Fxd3FyfHl4g3Z7d2mLkYp9kM7f3d7e3tvY2drZ297f39/e3+De39/f3Nvc3N3e3uDg3+Dg4ODf3t7e39jS397f397e3t/f3t7f3t/f3t7e3t7e3t7e3t7e3t/f39/f39/f39/f39/f39/f39/f4ODf4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODh4eHh4eHh4eHh4eHh4eHh4eLi4eLi4uLi4uLi4uLi4uLj4+Lj4+Li4uPj4+Pi4uLi4+Lk14NoZ3VkVlVkZVdKWllXW1Q9RU1LSD04NzU3NjQzOTQ0Nzc1Njc5PTo9Pjw9PDk7PDk5Oj45PD4/PkFBQ0FFRUQ+OzxBPjw5PDs3Mzc+REhFSqG2tbW1tbW2tre4uLi4t7e4uLi3tra2tra3uLm2traLfXpsbHp/cGx5dm5qaGdlcXp4b2lvb3B1c21zd4Fnb32CgYNyf3lqcHJ6f6ng393Zy8a/vb6/vsLN0tDW3tnc4NfQzcPCw8PH1dfT2dzX1NjX0MfExce9vM/Kz87Y3djO3N3c2t3T0dze39/e397e3t7e4N/f39/f39/f39/f39/f39/f4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4OHh4eLi4uLi4uLf4uPi4eLg4d7W29/Sw8rJx9Hb3OLk4eHg2dre1sbExcTN2trf5OHi4trX3st9aWZxYVleZWFNTFRLUlpMO0hNSEZBPTc2NjUzNDY2NDg3NjU2OTw7Pj46Pjk5PDk3OTs7Oj49PEBAQ0RCR0ZCQT08Q0A9OTw7Nzc3P0RGRkaZtrS1tbW2tra4uLi4uLi3uLi3s7W2t7a3t7i5tba3opdxb29waW50dnFmZWNrbmdvcm1mZ2tygWVvdnyAeGRzj39zaHFyaWVlbm+w39HFv7u5ubm5ubq6uru6vc3Gw8e/urq6uru7u8HCvcHFvby/vry7urq5ubq6ubm6w8XDucDDwby/ube/z8/U3tjc3t/g3tLa4N/f4ODg39/f39/f39/f3+Dg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODh4eDg4ODg4ODg4ODh4eHh4uLi4eDh4uLi4uHa2t3RwsPCu8XT1uDdydPDrrnAsaqrq6uwtLbJ0sXRxLG4v7Srq6usr7S0vMzE1c60tLureGxtbWBdYl9ZS1NVVFFQREBRTUhEPzo3ODU3MzE1NjQ5ODQ2Njo8Oz08ODw5Njo6ODg5NzU8PDw/QEFAQkRDQkE8PkI/Pz09PTc1OD5DRUNAj7a0tLW1t7i4uLi4uLm5uLe1sautr7Oxs7OztLS0tqaei2tue3ZxeXhnY2hfcXdha25vaG99b25ja2lseHdsa4Z+bHB6dm1scG95sca8uru7urm5ubq6urq6urq6urq6urq6urq7u7q7u7y7urq6ubq7u7q6urq6urq6ubi3t7i4t7e2tbW1tbi3u8e+w8XHzcS4wMnH0tzZ2d/e3uDf39/f4ODh4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODh3Nji4uLi4eHh4OHg3tfGxtHQztTe3tPO0t/SuLi8sq2trKysrrG+ua63rKipqamqq6urqqqqq6ysuKyqqqqrq6urra6urq6urryzrayrpHlub21fXl1dVE1SU1xUSkE/UElIPjg5NjgzNzMwNTczNzg1NzY2Ojw/PDg5Ozo6Ojg5OjY1OTs7Pj9EP0NFQkNCP0BAQT9APjw3ODc6QUVEP4W4tLS1tbe4uLm5uLi3t7SurKuqqq2urq6vsLGzs7WjcG5ucm1wg311aWFlaGZkY2Rxc21td25naW1tZXBzb29zcXN8h4F6dX11n7u6uru7urm5ubm6urq6urq6ubq6urq5uLm5ubm6urq6u7q5ubm5ubq6ubm6ubm4uLi3t7e4uLe3t7a2tbW2tra1tbW1tba1t7e3t7rBvrzGycrb3+Dg3tvd3d7h4tDW4uHg4ODg4ODg4ODg4ODg4OHg4OHi0768zNjd3OLg0dnbxL23sLCxsa+zu7uzsLS9s66urq2tra2sq6qqqqmpqKmpqampqqurqqqqqamoqampqampqaqqqqytrq6urq6urq6sraR4aWJxZmFZWlZRUk5cU0Y9QlJEQTc8OzY5NTY1NDU2NTg3NTY1Nzg7Pjw7OTk5Ojg3Nzk3Njg8Oz47RD8/Q0BBREE+P0M9Pjw+Ojo3Nz9DRj54srCztLW2t7i3trKurq2sq6uqqaqtraysrq+xs7S1t4xucnRqaIB5ZmpmZWxdaG5waGxxYmNmcoJ+dmhobGpueoaBhXx4cXF5gK+6ubq6urm5uLm5ubm5ubm5ubm5ubm4uLe3t7e3uLm5ubm5uLe3t7i5ubi4uLi3t7a2tre3t7e3tra2trW0tLW1tbW2trW1tre3t7e3t7e3tre4v8bP0MS+v8DE19e8ydra4OHg4ODh4eDg4ODh4eDb3t7Uzby3tre6wMDJxLfIvrKwsLCwr7Cvrq6ur7Cwr66urq6uraytrKurq6qpqampqampqampqKmpqKmpqampqKmpqKmpqqqrraytra2ur66trK2heWpjbWdiXFhRUFFLVEpCOklRP0E3PDk0OjU2NTQ1NTY4ODY4Njs6OTw9PTs6ODY2ODg6ODY3Pj08PT5BQUVCQkNBQUBBOj09Pz05Ojc9QUc8bKqmqKutsLGwrqupqKqrq6mpqamrrKytra2usLO0tbilgIdvaWdzdGZrcG1qZGxvcm5rbWNrcHyJhG5qbHx4Y3uKfnNqc25rcY+7ubm5ubm5ubi4ubm5ubm5ubq5uLi4t7e3t7e3t7i5ubi4uLe2tra3t7e3t7a2t7a2tra3tra2tbW1tba1tLS0tbW1tra2tra3t7e3t7i4uLe2t7a2uLm4uLe3uL6+uLq9vcfb4OHg2Nnd4eHg3dfKwcPCurm5uLe4uLi3tbS0tLKysbGxsLCvr6+vr6+vr6+vr66ura2srKyrq6yqqqmoqKmppqepqaehpaipqamoop+hoZyip6inqausrK2ur7Cwrq2unXdwbGphY2BZUU1RTFJGQzlNUEY+ODs3Mjc5Njc0NTM1ODg3OTc7OTo9PTw6Ojk3NDo5ODY1OD8/QEI9RENDQ0FDQEJBQDtAP0A/PDw6O0NIPWOopaWlpqioqKenp6ipqqmoqKipqqqsra6wsLCztLW1taWYdn5xZmt4cW9tZmVsaGNsZ2ZpaX11bWlvfXZ5hWZod294b3Fvcninu7m5ubm5ubm4uLm6ubm5ubm5ubi3t7W1tba2tre3t7e3t7a2tba2tre2tbW1tra3t7e2tbS0tLS0tLS1tLS0tLW1tba2tra2t7e3t7e3t7a2tre2tre3uLe2t7i4t7i4uLi4wMXTyry8w83PyMC9urm5ubq6ubi4uLi4t7W0tLSzs7KysrGwr6+vr66urq+vr6+uraysrKurrKysq6ehoJ6gn5udoaGdlpmkpKaon5mZmZmanZ+gn56fpKqtrq+ura2srJl1cGlrY2FeXVVOU0tSREQ4TktHQTo4NTI2OTY1NDczNzc3ODk3OTo7PT0+ODg4NzU6OTk1OD9AQEFEPkZBQkNAQkNCQT88QEJCQD0+OjpERj5cpqWmpqampqanqKenqKioqKenqaurrKytra2ttLS0tbekc311bnONf3JmanFjaW1jaGZobG51aV9jZ3VzdnpuZ3Bwcn56cYihu7m5ubm6urq6urm2s7W1uLm2trW1tra1tbW1tbW3tra3tra2tbW2tbW1tbS0tLa2t7e3tbS0s7O0tLW1tLS0tbW1tra2tra2t7e3t7e3tra2trW2tbW2tra2tra2tra3tra3uLi3uri4uLe3t7i5ubm5urq6urm4t7e3t7W1tLS0s7OysrKxsbCwr66urq6urq+vra2srKuppaSmpqScmZubmpmampmXl5eXl5aZm5iZmJmZm52en5+dnJ6gpKWko6OioqKQdG5jcGFeXltUU1RIVEo/PFFCRkM7ODYzNzo1NTQ4Mzg5OTc4OTc7OTs9Ozc6NzU2OTk4NTg+Pz9ART5CPz9DPzxBQUI/PT9EQT8+PTk9Q0Y/VaSlpqanqKeoqamop6ioqKioqKiqrKuqqaipq7W1tba5o3eKcXKHhnd0cGh5a2JjYWVsaW5zal9jZWNjZWprYmRqbHaXjX6ovbm3tre5u7u6uLWxrKurq6+wrKyrq62tq6uvsLGvr7CytbW2t7W1trW1tbW1tbW2trSvr7O0tLSvra6vsrW0tbW1tbW2t7e3t7e3t7e3t7e3t7Owsra1tLa2tre3tra2tbW1tra3t7e5uLi4t7e3uLi4ubq6urq5uLi3t7e1tbS0tLS0tLS0s7OysbCvr6+vr66vr62oo6KgnJqampqZmZqbm5qampqbmpmZmZiXl5aYmZmZmpycnZ+foJ+goKChoaCgoJ+fi3RuaXRdYGZeUlRLRFRJPUVTSEVCOzo0NDY5NDQ1NzM4ODg3ODk5Ojo7Pz04OjkzNTg5NjM5PT5AP0A6QEJCQkA/QEJCPz0+QUFCPz06PkVDQFGjpqWlp6inqauqqKaoqKipp6ioqKinp6ioqaq1tbe3t7KZtH99kIx1Z2lqbGZjYGNoZW94cGlicXx5cGpmZmRma3NqhYystrKwra2ttLeysLCtrKuqqamop6ipqampqKinqKipqaeoqqurra2sqqytraysrq6traunpaSnqqyopKOkpamwsbGztbW2t7i3t7W1tre4t7e3t7Kppaasq6ivtLa1s7W3t7a1tbW2tra3t7e4t7a2t7e3t7m6urq5uLi3t7Wxs7S0tLKxsK6sq6yurrCxsK2rqqmqqKijnJqZmJmYmJiYmZmZmZmampqZm5ubnJybmZeYmpqcnJydnJ2foKGhoqKioKGgoKCfnop1amtuWVxhVktPREdVRz5PV0hEPTw4MzQ0ODQ1NDgyODk4ODk6Ojw5OUA8Njk6MzY3OTE0PD8/QEBBOkNGRUJBREJDQTo7P0FCQz9APUBEQ0BPo6empaemqKqqqqakpqenqKioqKimpqaoq6uttba3t7e4rbJ1cHuDdmBiaWtiZWZhZGdmfYh5bHKAfXFvcXhjbW5xZo+srKurq6ysra6urK2trKyqp6WlpaWlpqioqKiopaeoqKeoqKeoqKmqp6Wko6KioqOioKKioaKhoKChoaKjpKOjpaWlqLC0s7OzsKuqqaqztLa3trGopaOioaGipKiqqairs7Sxrq6xs7W2tra3uLi3tre3t7e3t7a2uLe0sa6ppqerrKmnpqWkpKSkpKWnqaajoJ+enZycm5uampmZmJeXmZmZmJiZmpqampqampqbm5mYmpydnZ2dnZucoKGgoaOjoqCgoKCfnp2FdGtsaFdYU0pHTUVITUdAU1dGRz09OTM2Mzc0NTU3Mzg6Ojk6OTw9OjpBPDY9ODM3ODgzNztAPz9AQDpCRUNAQkRDQT87O0BDQkNBQDxBQ0A9TqKnpqanp6mqq6mkpaWlpaaoqKippqanqKmpqrW2tre3t7izc2h7c2JnamtpaWJhZGloXV1tfHJma3J/fHR8bm1zc36gqamrq6uqq62trKusq6mpqKWjpKampqWmp6eqqaamp6enqKinp6iop6WkpKKhoaGhn56en5+fn56foKGho6Wko6OkpKSlp6enpqWkpaampqeqraumpKKhoaChpKWlpaempaeoqKalpaivtLa3trW1tra1tbOwrKupqa6rqKWlpqampaSkpaWlpqWkpKSkpaKhoaGgnp2bm5ucm5qamZiXmJiYmJiZmpmZmZmYmZmZmZqZmZydnJycnJybnJ+fn6ChoaKgoKCfnZ2cgHNrbmReU0pITUZETEtFRFFTQ0c9PDgzNjI4NDY0NjQ4OTg6Ozk7Pjw5PTs5PTczNTk2NTY8QD0/QT88P0JDPkJCQj89Pj5CQ0FFQD86PkVAO0+jpqWkpqeoqaelpKWlpKWnp6eoqKanp6alpqa1tba2trW2uYptcW1vfHxxZ2pmYGFsYFROW2hqbm9tgYJ9cWdxdn6aqKeoqqmpq6urrKqqqqimpaWkoqOlpqalpaWmqaqppqWjpKWmpqSko6Kio6KhoJ+fnp6cnJycnZ2dnJ2en6CioaKjo6OhoqKkpaSioqOjpKSjpKSko6Ggn6GipKanp6ipqaelpaSipKSlqK2wsKyrqqusqqmnpaWmpaWlpaalpqioqailpaWkpKSlpKOjpKOioaGhoqKgnp2cnJubm5qZmJiYmJmam5mXmJeWlpeXmJiZmpqcm5qampubm5ucnJ6goKGgnp6enpycm356bnJiXlNNSlBFRk5NQkBPRT5JOz01MzYzODM2Njc1Ojs4OTs5Oj49Ozo5OT03NjY5NjU2PkI+PkE/PT5DQT5DQ0BAO0A/QkJCRUA+Oz5FPzxQoKSjpKOjo6SkoqSlpaSlpqamp6empqalpqaltLW1tbS0tbiBaHx9ZXOCemxwdWFfY1ROT1FbaGxpbGxxbW5xbnScoqSnqKioqauqqqqqqaempaSjo6OjpKSlpqalp6ytqaShnp2epKShn56foKCdnJ2dnJycmpqam5ucnJubm5ydnp6foKChoJ+goaOioKGjpKSjoqSlpaWkop+go6SkpKapqainpaGdnJ+jpaipqainqKioqaempaWkpKSlpqampqampqenpaWko6Ojo6KioqGhoqKhoqOkop+enZ2cmpubmpqZmJeXmJaWlZSUlJWVl5iYmpubnJuampqam5ucm5ucnp+fnpucnJyam5p/fnF0YFtUTUdNSEZMSj8/TkM8QDs8NDM4Mzc0NzU3ODs9ODo6OTk7PTs7ODk+Njc4OTU4OD9APT9BPjs9RD89REA/PzpAQUE/QUVAPjw8Qz88Tp2ioaKioKCipaSkpKWlpqenp6empqampaampbW1tbS0tLS3jHalsXdmc3Jvc2xjZGlYT1JRT09dgG1kYFptkZGSoqKjpaampqenqKiop6alpaOioaGhoaKjpaempqesq6emoJ2cm6Ghnpubmp2cmZiam5qampmZmZubm5uampqampucnZ6goaCfnp+hoJ6foqOko6Omp6inqKWioKGhoaGkpaWlpKCcmZmbnqOmpqampqanpqempaOlpKWlpqiop6enpaWlpaWkpKOjo6KhoqKioqKhoaKjo6Kgn56enZybnJubmZaUlJSTk5OTkpSUlJWWl5qam5ubm5qZmZqanJ2dnZ2dnZuampqamZqXf3dvc11aTkhKTkdFRklERU5APD09PDQ1OzQ2NDY1Njc5Ozg5OTg5OTw7PDc6Ozc4ODg1ODg/Qj9BQTw+P0A8PEJAQT49QT4/Pz1CQUA6OkA8PE+doqGfoJ+dn6OkpKSlpqeoqKenp6ampqampqW1tLS0tLS0tbSXtqd1Znh2Y2xjY2VjW1JTU1JNXqCMeFhodpajnp6hoaOjo6OjpKSlpqalpKSioaGko6OjoqOlpqampqenpp+bmpuioJqWl5Wam5qXl5iZmpqYmJqampqbm5qZmZmenZ2goqOjo6KkpKWinqGhoaKjpaampqSjoaCgn5+hoZ+goJ2amJiZmpygpKOjpKWmp6alpaOjpKSkpKWnp6ampqampaWmpKOjo6SjoqKjpKGfoKGhoKGgoaCfn56dnZyamJeVk5KSkpKSkpOTkpOUlZaZmpqbm5qampqbnZ6enp2cnJybm5qamZmZlH10bHReWk9IRUdGQkVORT9GOzo+Pzs0Njo2OTM2NDY4OTo4OTc4ODo8Ozw5Ozs6OjY3ODk5Pj9APjw9QD5AOjlAQT89QT8+QUE+QUE/Ojk9PjpQnaCfnJucnJufoqOlpaWlp6iop6ampqanpqantLS0tLOysrGwsK2rkHiGj36amn93Yl1TUlFRTGKgootaiKCgn52YmZycnZ2eoaGgpKenpqWkoqGjp6alpaOipaampaanpqagm5mboaCXkpOSl5qcmpaXl5iampmampqam5qYmJmaoKCgoKGfoaKipKamop6gn5+goaOko6Khn56enpyanZuZmpqZmJeZnqChoaKioqKkpaWmpKSkpKKioqKkpaWlpaWlpaalpaOko6KioqGgoKGgnp+fn5+fnp+foJ+cm5qZl5WUlJSTkZCRkpKSkpKSk5SVl5iZmpmZmpqam5+fnp2cnJycmpmZmpiXl5F8cmdxXl1QRj9BRD9KT0JCRjhDRT4+OTg7Nzc0ODQ1OTo6Ozk3OTo8Ozo8PT48PDo2NzY5OD4/QT47Pz49PDg6PkFAQUE/P0FCP0RBPjo4PkE8U5ycm5uampycnaGio6KjoqSmp6alpaampqSjo7KysK2rp6amp6alpqiln6iop6qnoXmEXFFST0xcnKCAYpmgnp2clZOVlpeZmp2dnqGmpqampKOioqanp6ajpKampaWmp6amop2cn6Gfl5GRkJSXm52YlpeWmJuZmpqampqZl5iam6Ghn56fnpybnJ6goJ6dn56fn6Cio6SjoqCfnp2ZlpeXl5iYmZubnqKioqKioqGio6WlpKOio6SioaGhoqOkpKSko6SkpKSioqKhoqGgoJ+gnp2enp2dnZ2dnp6em5mYl5WTk5SUk5KQj5GSkZKSkZKTlJaXl5iYmZqampyenZ2dnJubmpiYmpmXlZaNempmamBiTkY+P0A9SkVAQ0A7QEE8Ozs5Ojc2NTg0Njc4OT04ODs6Oz87Ojs8Ojk6Nzc2ODs8Oz08Ojo8PTw3Oz5DQkRDPz1BQ0FEQT88OkBCO1eZmJqamZmam5ucnp2foqKhoqSlpKSlpqSioJ6op6alpqWlpaemp6ampqakpaanqKehqXJOUU1KVJahenKanJyenJeVlJWWmJiXl5qeoqKhoqOkpKOjpqalpKanpqWlpaalpaOgoKGhoJmSkI+Wm5menJaXl5eZm5ycnJqamZeZm5uen52cnZyZmZqcnZydnp6fn5+hoaCgoaKgn56bl5WVlZeanZ2fn6GhoqKio6OhoaCgoJ2cnaGioqOkpKOioaSlpKOko6SjoqKioqKhoKCfn52cnZ2cnJ2dnJ2enpqXlpaVlJOTkpKSkpCRkpKSkpGSlJWWl5iYmJiam5ycnJycnJ2cm5mYmZiWlJWXi3hsY2RiZFFHQT1DO0tIRDo7Ozw+OTo6OTo3Mzc5NTk4ODg8OTg7OT09Ozo7Ojk8PDc2NDc/PDo9Ozw/Pjw7ODxBQ0FDQkI+P0NAQkFAOj9APztZmZiampqam5ubm5ydoKGhoaGhoqKioqKhn5+dpKWmpqenpaWmp6ampqWkpKalpKSkpaaGUFJQT0+PmHB6mpubnJ6cnJycm5ubmZiYm56dnp6foKOkoqGhoqOio6SkpqalpKSjoqGhnpyblZKUmJyam56amJiYmJqcnpyam5iWmZybnJycnJydmpqbnJ2dnp6dnp6fn52cnJyhoaCblpWVlZacn6Ggn5+hoKKjoqOhnZuZlpaWlpicnqCip6ikoaCgoqOjoqKioKCgoJ+fnp+gnp2cm5ucnZydnJmanJuWk5KSkpKUk5KSkpKSkpOSkpKRkpSVlpeYmJiYmZqcm5qbm5ucnJqZmJiXlZWWl4d3ZGdoZGJNQ0U8RDlJSkU5Ojs9PTo6Nzg6NjQ3OTU8OTY4OTc5PDs7PDo6PDs6PDw4Njg3Pj07Pj46Qj86Ojo/QURCQ0FBQD9EQUFAPjpAPj06W5qYmZqbmpubm5uen6CgoaKioKCgn5+enp2dnKWkpaanpqWlpqakoqKio6Oko6Kjo6KnllRYVVJOZ21rgZ6am5udn6Cgn56enp6dnJ2dnJ6enp+goaCfn5+goKGio6OkpKSkoqGhnpuamZehtZ6ZmZienpiYmZmam5qWlZeWlZicnJ2cm52dnpybnJ2cnZ6bmJqeoaGdm5udoKKhmpWVlpaZoKKfnZueoaKjop+em5eXlJKSlJeYmZ2goqenpaGgn56goaGioaCfnp2cnJubnJubmpqZmpydnJmXmZaVk5GQkJCPkZKSkpKSkZKTk5OTk5OTlJWWlpeXl5manJubnJucnJqamZeXlpaVlZSEcmZsYmRbREJMPT84RktCPEA+Pj05Ozk6PTg1ODg2Ozg1Njo4PDw7Ozw8Ozk8Oj09OTU4Nzw5PD88OkE/Ojo6QEBDQkRBQ0A/Q0FAPj08QD09Ol+al5mamZeYmpycn5+foaGhoJ+fn56foKCenZ2lpKSko6OioqOjoZ+foKGipKOio6SiradXXl1UV19ua42dmpqbnJ2dm5ucnZ+enZycnJydnZ+goKChoaGgoKCgoqShoqKioaCenJubm5mfq5ucmpuZnJ6ZlpaWl5eTjo6QlJabnJuam5udn52cnJycnJ6dlpSZnJ+in5ycnZ+hoJuXl5mZmpycnJubnZ6fnZqXlpaWlJOTlJiampqfoKGmpqWgn56fnqChoaCenJubnJybm5ybm5qZmJmZmZmXl5iVlJKQkJCQj5CSkpKSkZGTk5aYl5STkpSVlJWWlZaZmZmam52cnJyampmXlpaWlpaQgG9vZV5gV0BKSDg/N0lFP0VBPD07Ojo8Ozs3NTs4Njo3NDY6Oj47Oj0+Pj07Ozs+Ozo4Ojk5NkBBPTo8PTo6OT9BQ0JERUM+P0FBPz8+Pj89PDtgl5WXl5aVl5mbnqGhoKGioqCenp6enqCgn52bpaWkpKSioKCfoJ+dnZ+hoqOjo6OkobCjXWVkYGFua4GenJubm5ubmZianJ2enJubm5ycnJ6ipKGeoKGioqKhoKWzrKCgn5+enJmZmpqbrmp2nZ2em5manJiXlZWWkY6Nj5KYnZycm5ycnqCdnJucnJyempWVm56foZ+dnJyenp2cmpqampqampqbm5qXl5aTkpWVlpWTlZaam5qanZ6foqWjnp6fn5+en5+enZ6fnZycm5qbm5qbmpiZmJiYmJiYlZSTkZCRkJCQkZKTk5CRk5SYmZiVk5SVlZWWlZaXmZmXmZqenpyamJiXl5aWl5eYjX1ubV9lVlRFSzw3PjdSRUM+QkE4Ozw7OTg6ODY7Nzc6Njc5Oj0+Ojw8PT49PD06Pz06ODw9OTtAPj4/PT45OTs/QkNAQ0VDPT9DQj5AQD5APTw8YZWSlJWWlpeanJ6goKCgoaCgnp6enp6gn56em6WlpKSioJ+fnp2dm5mbnJydnp+gn56rmGNpbW5pZm2enZybm5ybmpmZmZqam5ucm5uam5ygo6SgnZ+en6ChoJ+mkpurn6CgnpuamZqZqIREgJ+fnpyZmJqamJiYmJKOj5OXnJ2bnJ2cnJycnZycnp6dnpqVl5ygoaGfnp2eoJ+cnJuampqbmpqYmpmVk5OTkpOWl5eVlJiYmZucnJydoJ+gnp6enp+fn56en6KjpKKgnp6cm5qam5uamJmZmJeXl5WUlJORkZCQkZKTk5OSkpOUmJmYlpWUlZaWlpaWl5iYmJiXmZqamZeXl5aXlpeWl4l4dmddX1dURUU5OTs8WT5AOEI/OTw8Pjk4Ozg6Ozc5OjU4OTs9PDk9Oz0+PD0+Oz8/Ozk+PDw+Pz5AQUE9ODc7QkNFP0FFQz1AREJBQEQ7Oz47PGKWk5SUlpWUlpiYmZubnJycnZ2cnJ2en56dnJqkpKSkoJ+enpybm5qZmJiYmZucnZ6cpolla3R4bVuFop2dnJydnJqbmpqampydnZ2bmpuboKKinpucnZycnJ2eoJ5inKaenpyampucoaNRSISgnZ6cm5qanZqam5yVkZOXm52dnJ2fnZycnJycnZ6fnp+cl5idn6GhoJ6cn6CfnJubm5qbmpmZmZmZl5WWlZaYl5eXlpaYmZuenp2dn6GhoJ+fnp6fn5+dn5+hoqKhoZ+fn5yZm5qcnZuampmXlpaYl5eXlpWTkpGTlJSTlJSUlJaZmJaVlZeZmJeYl5eXl5eYl5iXl5eXlpaYl5eVl5eDeHZfW11eUT1GOjk4P1VDQTtDQzo8Pz86Ojk3Ozg4ODc0ODk8Ozw4Ozs8PTo8Pjk/QT06PTw+PkA/PUBBPjk2PERDRUBBRUU9PkVERD9COzo8OTpkl5SVlZaUlJSUlJWXmJiamZqcnJydnp6dnZybo6Oko6CenJuamZqZmJiYmZiam5ubm6WJa3F2em9lmp+enp2dnJybnZ6dnJ2enp2dnJydm5ygoJuampubm5udm5qmZl2joJuamZudnK51SUyGoZydnZybmp+fm5ydm5mZmZudnZ2dn52dn5+dnJydn5+fn5uanZ+goJ+dnJ6gnpubm5ubm5yampuamZudnJqZmJeYmJiYmp2foKCgoJ+hoaGgoJ+en5+fnp6foaKhoJ+enp+enJqam5ubmpqZlpaXmZmYmJiWlJOUlJWVk5OVlZSVlpWVlZSYmZuamZaWl5WWmJiWl5OUlJGRk4yRkJOWfXhqYWJiXFE8QDw2OENWSERCOjg7Oj47Nzc5Nj06OTk2NDc6Ozw9OTo6Oz87PT08QD47Oz46PT89PkBBP0A8NztBQ0U/P0REPj9EREM+Qj07PDs6Z5aTk5OTk5OTlJSVlpeWl5aWl5mbm5ybm5uamaOjoqCfnpuamJeYl5eXmJmYmZybm5qkgGpqb3lzcZegnp2dnJydnp6enp+enp2cnJydnp2bnJuampqam5ubmZmYpIBSeKKZmZqdm6CkX1ZOh6GcnJ2cm5qdn5ucnJubnJubnZ2dnJydnp2enZydnZ2cnJ2dm5uenp6dnZybnpubnJycnJydnJubmpmbmpmYmZmYmpmZmpyfn5+jpaKfoaKioaGfnqCgn5+fnqCioaChn5+fn52ZmpucnZqZmJWWl5aVlZaTkpOUk5STkJCSk5GUkY+OkJGOlZabmJWYlJmXlJiRjJCPk5yTkoyFjIeDhndxZ2pkXFxRQT44NkJHYEJFR0A+Ozw7Ojg4NjU8ODo4MzQ6Njk9PTk5Ojs9Ozw6PD48Oj5AOj5APjw/QD8+PDg6Q0FEPz5CRD8+Q0VCPUJAPDw8OmeYk5KSk5OSk5SVlJWXl5aWlZaXmZmZmpqampqkoqCfn52bmpmYmJiXl5iZmJmcnZ2cqH1nZXN7enOJop+enp2dnp6enZ2enZ6enp2dnZ6cm5ybmpubm5ycm5iYmaCIW1+UmpmbnJyjj2RaTYGinp6dnZybm52bnJybnJ2dnZ2dnJ2dnp+fn52cnZ2dm5qbnJmZnJ2dnZ2dm5uanJ2dnJycnp2dnZybmZeVlZeXmJqam5ubnZ6foqOhoKGhnJucm5ubnZqcmZycn6CfnZiZmZmUkpKUl5SPj4+OkYyNiYuQi4mLjpGRj4mQmJiQkoyNi5KQj5iYoqiqpqWlrKOmoZqep6eyqKKVo6Cfl39wcWlsXFtbTEY8NzdHR1g+SE5URjk+Ojg5ODc1PTk4NzMzOTY6Pjw6Nzo8Ozo6Ojo8PDs/PjtAQD47PT5BPDw2N0A+QkA+QUY+PEFEQT1DQj49PDlmmJSTk5OTkpOUlZOVl5iYmJaXl5iZmZqampqaoqGfnp2cm5mYmJiYmJiYmZmZm5ybnKx/am16f3lxh6Genp2cnZ6enp6enp6dnp2dnZ6enJubnJubm5ubm5uZmJmfl11ddpeanJ2dooFkWU1/op6fnp2dnp6dnJydnJ2dnZ6fnZ2fn56goJ+enZ2dnZybnJ2em5qbm52enZ6dm5uanJ2cnp2cnZqYl5SRjo+QkJGVmJSWlJiZmpudmJuYlY2Mjo6TkpKRj4mQjpGRjo+Ki42NjYiIi4+Lg42NkY+MkI2Qk5WVnJihoJySn6SipKmam5eanKOprb3Bwbq8uL26ucC8ubq3uru7tL2zwbV/bnVmZ1peWUxJRTo7TElTPFZSSUM6QTo7Ozc3NTo6OjgyNTY4Oz08OTk7Ozw5Nzo4Ojw6PT85PD8+PDw9QTs5NTg8O0A/QT9EPTxBQkA8REM9PT06YZOTkZCUlJOTk5OTlJeYlpeZmJmYmZqbmpqamp+gnp+fnJqZmpqampmYl5iZmZmZmZmphXB1e4B3b4mhnp6enp6fn56en56fn56dnp6fnp2dnJ2cm5ubm5ucmpiZmZpgYWCAlp2cnph0Y1VPgaKfn5+enZ6hoJ6dnp2enZ6fn56en6CenZ6enJydnZ2cm5qYnJuVmJqamJiYmJmSjJCXlKCXk4+MjYqKiImMiJORh5CPjYqKkJCLjoqMi4+IiImJjpGOjYaFiYaKhoWLiI+SkJCNkJKXlpKamJ2TlJ6kpqaqq7Gsr6+rpquqsbm5tbS0rqyvtMDIxcXBvsbDxMTDurW+t7a0s7C2tb6qcHRyXGZfXl1JRj8/RUtMVklcTEQ/PUI6Qzk5Nzc7OTk3MTc5ODo+ODg6PDw7ODc5Ojs9Oj4/OT5BPDs+PD46OTY5PDpBPkNBQT08QkBAPkJEPj8+OVyHhIOHi42KiYaFgYqMkZOVmJiHlZaWkpiampmenZ+gn52ampubm5ycm5iWmJiXl5ibqo56dXZ7f3mCoJ+fnp+goKCfn5+foKCfnp2dnp+enp2dnJqbm5ybm5uYmZmfaV5bZX+cnJ6Mal9RU4aem56dnZycoaGfnZ6dnZ2dnp2dnJiWlpaYlZWSlpmWk5GKjI+PjI+NkIuLj4+WiYiEi5GZjn2Fi42PjYyHioyQm4yRj4+Lio6TjIyNjIiSi4yFiYyPhouIh42KhYyEj4qXkJOYmpWbnKOqoaKknKKrsbe0ubWxtK2vsrKlp7O6sbq6vLa3tsDDw729vLa/urq8wbW4wL60r66mqa+3mm58Z1tjWl1fSEU+QUtJU1hZXkFGOTk9OkY/Pzo3Ozs7NjM6Nzo5Pjg6Ojw9OTk4Ozk7PDo+PTtAQDs8QjxAOjg0Nzw7QkBBQj4+O0NEREBDQz0+PjlhmZWLkYWNj5aSiHl9e3+Fi4OKgoqJhmuAeJCLlpqRnZ2UlJGTlpeampiWk42Sk5KQm5uIdndzcX1/cpGgnZubm5yenZ2eoKGgm5uWlpucmpubnJuYmZqYmJmbmpqXk3NoYVR2k5ech1xXUFeKko6SkY+Uk5KXm5mYm5ePjpCLjo2Ch4uLi4qLiI2RjIeHhoqIiZGKh4yEhYqNi4qNhI+UkIyDkJOUmZWQi5OTkZWRlpWOj5GMlI2Oj4qIj4ePhoeJiYmNiomJioWNh46JmJKUmpuXmKChp6Cko5qqqbO2sbWwqKqiqK6tn6qvsK21ubi8wr/BxLixtbCutrOwuL68ury+urOzp7G3wpB1gGNiXlpXUk1IRkVQSVlXX1tDUDpCQz1HRj84Nzo6NzU1OTc8OTw5ODo9Pjo6Nzs7Pjs7PTs9P0E7Pz48Pzo4NDM3OkFBQEI+PjpDREM/QUM7PT45Z6mlo6KZn6CippeUiI2CiIJ1h4iKiIp7e3Z7enmPeoiSfn18en6CkYWBgH1zfH99fISHfnRweHZzfHaBj4iIiYeIioyMkZicl4iOhIuNi4iNkZCPi5GPi4yPkJGRjpKanpJ9oKOWpJxuTVBjhoaCjYuGiYp/iYqGiJiRiIOIg4KFfIuLjIaJi4iKkIyIi42PjI+Wh4mLio6NjY2Wk5OdnJyalpycm56bmpuYnpeTkZWWkJKRi4+LlpSMjYqDi4SEiYyQkIqOio2LipGJjZOTk5SVk5KcmZ6Xn6CfpaKvsamupKSfmKStpqa4t6ysu729wsPAv7+vpa2wsLS3uLO0uLa0ta6stK+4tLaBeXpjZmBeVlFRQUVMT0lcXl9UR0dCS0xCREA9ODg7OTU3Nzk3Ozc9PDk9Pj05Ozg6O0A8Oj06PkJBOD88Oj84NjQyOTtCQD9CPj04QEI/PkBEO0A+N2CloJqXnaGaoaCPl5efl5WCjaCfo6GdmpKOjIxycXBvdnFucG1ucHZub29waHBxcHR+c3FycXd7cnl2d3Jyd3Z6e3l8fXt/iIGEi3+PkYaNi4yGiouLiYeEgYaDgISgnY5+apSllZ19iIBfcn+AgpKQhoSEhY2DhIyPj4+IjY+Hi4iRkJWRjpCKk5eOj5WYp6SfnZWYlpaln5udq6aqt7W4srGnr6qnpqGfmp2WkpWVkYqPjImTjZuVjYuLhoaJjJWQkJCLmZKVlZSbkJiTlIyNkYyWl5WilZ6mqauno6OqsJucpp+mq6G0vb6zs7+5u7u6uby9rqiusa6wuLyztLGxqrCpqLGxsqild3J0X2hhYFRWUUlKSFZNXl5eVExKRVFKRUdDPTo5OTc0ODY5Mzg4PTo9PD47OTs4Ojs/PDw+OT9DPzg7Ojg8Nzc2Mzc5RT4/Qz89N0BAQT0/RDw+PThUj4yGh4eUjJWZl5yWmZaNlZyWlZydoKCdmpiWeHFubXJ4cXFsbnJwa3FvcG1yc3t1dnd5fnVxeHZ0d3tybn98gX15eH1/eYOGg4WCg5CLkIuLi46Pi4mJhYKCfn+Aoot7bVF1nIyMWnF9fH59fIaOjYuGjZSRi5CXj5SXkpihlp6WlZunpp+goKawq6GjpbW0sqqmqq+isba5vcK7ucO+vLi9uLWxrLCsppuSk5mfm5SPk5WOmp2doJqfn5edo6qsoZ+em62hp6qwqaampJiRkZWUo6SirKSss7Szs6i3tru4sLKvra2yt7a6srW6s7e5u7i8urayr6yxsbKztLOxsa2us7Gzs6yhl3Zxc19jXlJRVE1PSUdYT1pcZFROR1VPRURKRD44Ojg3NTg4ODU5Nzo6PTw/Ojg8ODk5PTs9PTpCPj84Ozo5Ojk4NjI1N0I+P0RAQDY+P0I/PEM8PT46Tn98go6MjJOTl5eaj5SWjZaRkZSXk5qanqGdnHJvcnFxcXFxcG5zcW91dHJxdneAdXd8eYV+d3t8eX1/fICJiYmDfXp/h4GIiYGAgIGGiIKGi4eIhYSIiIqFgIJ9mJp3V05LcpOGg01fb3F3iIWKjouNkJmclJSUoJqan6Ktsa6ppKWtr6ysrLWuvrmtrqm1sLexq7G2rK+9wsLAvrq8trKutraxtK66u7OurKepp6unoqmtoKmooq+wuLSxvLq6urK0ta+8tLezt7e7t7mtrbCprLW5sbeytLe2sLu7vLu6ury1vLi0wbWsqqqrtLG3uLm1trSzsKymrrCqq7Cxq6yusLKxtK6qo5N4dnJlZ1tMUlBFTUlTV1JlXmdUUExcUUhMUkNBOTk3OTU4ODY2Ozc5Ojs6Pjk4Ozo6Ojw8Pj08RD45Njs7ODg+OTUxNTZCRkREP0A3Pj5DPjpBP0BAO0t/gomXmJSdlpabmIuSlo6XkZGVl5SZl5+bmZx8dHV2dXl1c3RudnJzdHV2d319gH56gXyDfoJ/fYB/hIKFj52RiYF/go+Xjo6HgoCBiIuFfoqRi3+IjYyLi4eRjaONVC8vPXiHd3ZBRF1rbYSQiYmQj42PlJSYkJWcmp2eqK6ysLC1tLOtsrW4sLy1tbGqsKqztbS7t7SztrS1r7i4t62noqassLCvtre3vrW5vLOysa61u7C0r6+yu7axuMC9tLS0s7izvLq2tLrAvbm6ubq+ubm5vrWysa+yr6q1tLGzsbSzrri4tb+vpKaoo6ussa+zrq6wsKytq6qroqKmqKKnrauqpaynoqeYeHlxZmVZT09NSVJNV01PX15cTlVVYlFEVE07Pzk8ODk1ODc1Nzk1Ojo6OTs4Ojw8Oj08Pj4/P0I9ODY6Ojk6QDs1MjY2QUZDQz4/Nz49Q0I5P0I/PjtLjpGTmJmVmZGTopiTkpKLk4uOkI+Vl5ablZSbhoJ9enh2dHRzdH53end2gIKDhouMhISFioaQiYeRk5aRjZaalY+IjI+emJaVkpCTl5qamZCeoZ2Tl5uhmp2boqacZ0JbSDt4eWtnRTE4WmxzkI+LmJqPj4yUmpecnZugnaSstLm6vK+2tLi0tLK3uLmzq6+qqKy1srK1rrGrrqa3s7OxpaGotbCvrayrtbqyu7q6tLK3ur67ubG4sLmtqLK4u66ttLS3tbu2trm5vLe0r7G0t7a5s7e1pq2pq6ior6yprq2up6KxtLG0q6aop6Cjq66oqq6orLKwr6+pqKGeoaGjpqOgopqlo56ol3J3bmdiVUpUT09KRFBLX2JYWlFcVGBNSFJJQUA5Ojg2Njc3NTg5NDs5Ozk8Nzs+Ojg8PD0/QkBBPTs2OTk5Oj87NjM3OD5GQkJAQjk+PUBDPkBGQj44R5OWkZWTkpSQkZ+ZnZmVkI+Sko6Mk5aWko6RlZGSkIaBeXJzdXuBhI6HhZGTkpicnJiVkJWYo5yaoaeqqZ+clpeVnaKioZyZnpmlqKyvramnqqqpp6KlqKmrqamvj0pyonlBfHhkYlFUXklgboqhoaSem5qkp6Spq66spaSoq6+xtK6qrK6zr6ystLO0ua6urayqrLKwsK2wqKqmsrS0uK6qtrqwr6qurLC3s7i0t7W0u7y4tbWxtauyrKiys7uvrbGytLa1sbG0s7OvrKuvs7a0sayutKqqpqWnrauoqKupqqifqbOwqqeppaOio7CtqaatpairrayppaSioKWipaOYmZyVnqKippdudWVnZFdPWUtLSktTVHBiWWRXX1tcUlpQTEM8ODk6Njk4NzQ3NzQ4Ojw6PDg6PTk3PDw7PkM/QT47OTo5Ojs+PTg0NThBREVEQkM5PjtAPkI/R0Q+N0KSm5SVlZaVj46Wl5qZlZGKk5SSjo+SkYqKiY2Ul5qTjYmCho6VkZSfmpuin5+jnqGhn5ijpKelpaapqa2rqaKmpKilpKGfnqOjra2srairrq6rq6ykoaKmqaeoo3hgwdalQ3yOg3VPbo52U2R/o6inoKKhrqyrqqetrqilpKmpqqmmo6iqqaekp66wr7Ovq7Crqq+yr7Czua+rqLCxrrCyubO0r62vtbCss7GurLW1tLSzs7CvrKyqrKusr7G0s7CwrrCwsKyqrauqq6alrrCysKumqbCvqaOkqaunqKaopquwq6mvqaaoqaalo6iwraqpqKKpo6WnpKGhoKKloZ2el5aYlJugpKmUbnNeamlfVlpOUk5RT1NlXGVjW11ZXFBZT0tAPDs5Ojc6ODczNTMzODo9OTo4OTo5Oj08PEBEPkA9OTo8PDw+Oz45NTo8QkFFQUNBOT47P0BEQENCQDdAkZ6YlJeZlpGHi5SSl5GIg4mLk4+OkI2Hh4SFlZmWmJeZlpqeop2ZnKKkoaCdn5qfoKGgpqGgoKCjo6KlqKmrramqpqOmpaCloKaop6aoqaepqaSnp5mdpKWjop1if73ArnmhpJqVZUxfeG1RdJWioqChn6GhqKCcn6GloaCmo6KfpKGspp6foaGkrKqnrKivq6e0sa6ur7WyrKqwq6mtrbWwrq6srreup6yqpKivsq+sq7Kvqqqpq6utqa6urrGxraqtqaunp6uoqauinaapqKilqKisqKilpKWop6iopqmsr6+oq6mhoqKlo6Opq6ymqKWjqKKhoKSdnZ+hoZ2bnZ+amZWcnKOqlG9zZm5yZF1dUFVPWE9eZWRsaGJiWlpSVE9NQTo9Ojo4Ozk1MTYzMjg4Ozk5OTk7OTk8Oz0/Qz5APTk7Ojs8QD0+PDk5PEFBRUFGQTo9Oz9BQUJBRUI4PYqWlJOYmpaPiISNjpGSjIiIiI+JiZCRjoqKiJubmZygpaKlnqKjoZqeoZyanZ6bnKOop6ugoKOYoJ2XnKGjo6WjoqKkrKilqaCepqmnq6mkoKKhoqehpq6mpp2eaoScuo6p0aKas6hYTK2TU2WPoJ6goJ6doKOZlpqYo6KipJ+ZnKGhoqCbmp6goaSgnaejqrGorqusqaSqqquorKalrKqws6+rq6mwq6appaWoq6ynpqevq6Wnq6upq6irqqqrrailqKOmpaesqayoopykoaOmo6qpqKano6SnqKanqKepqKupoaKoo5yepqWjqKino6WlpqmgpJ6inpeYnZ+doqKlnpiUlZ6go5d1d2t2eGJfXFVZUVVXW2Nfc19oX2NTUVlUSD48PTg7OTo4NTM3MzM0Nzo4OT05Ozo5PDxBQEM9PT44Ozw9PEA/Qj86ODo+P0NAREE6Oz49QD9DQ0VDOTyCmJmenZ2alZKKiZGRl5GQh4SJgoGNj4+Sj42cnZ+hpKmlqaeorK2moqKfmKSmo6Stsa6yp6asm56em5qjp6Cfo5+foq+rq6yoqKuvqaiqqKKgoaiqrbGyr6uiooV3fn1yzsavmaava1WqsGNbh6WfpaKhnqCimJWem5+fpKGblZigoZ2enJudnZuZmZWen6Oonp2iqKGaoaOmoqSoqaqoq7CxqKWlp6eopKWpqaqnoqWmqKadnqWloqClpaOlpqCjpaOjpaelqamqpKekpqKmp6SrqaenpKGlqKynpqWlo6OopJWdo5+bnaCjqaeopqGjo6mooKiioJyVkZqfn6GmopuXkpCamqCVfHdvfXlmW1tgX1pcVVxoZG9jbWlpYl5QUEA/Ozo4OTg8OzYzNDMzMzc5OTs8OTs7OT49QkBAPTs9ODw9QD08PENBPjo4PT9EP0M+Ojk/PEI/P0FEQjk6gJ6kp6Gem5+gmY+ZnaCWloqGj4iEi4qTl5SRo6Wnqq6trLOys7S4t62pqqevtLKxqq6usbKusa2lq7OssbGpq6+rq6y2sLSwq7GysaOgo6qqp6+3t7S1trOtrqyOhoNukcy8lJSllnRUb3pzcH2WpqqnpKCfo5udoZqWnqScm5aZoqefoJ+joJuUlpmWl5qfoJmVnqGZmJ2dpZ2gpKeqqaiqraylqaSlqqeqqaqsp6SkpKOimZmhnpqaoaCfpaWYnqSmpKqooqelpaGqp6mnp6ejqKWmpaGkqKesoqekoaalpaOVl52Ym5mVo6elpaSfnZ2lo6Kqo5+amZiXnJyaoaGakJOTl5ibjX93cnZ4amJbX19cYllgZG5ta25hX2RgUE9BQDs7OTs4Ojk2MTQzNjQ3Nzc6PTo8Ozk9PUI/Pj89PDo/OTo7PD5CRUA9OTtAQT5DPDs5PzlAQEBAQkM7OXuao6OcoJ2dop2Zn6KioJibmJaYkpSQm5qWl7S0rrW4s7S4tre0uLm3tbm4ub28uKqLnLK4vLS9urW7uru4s7q/uLe5u7G3r6iusq2inaCrsre7u7u5ucG4tLWfh3lkWJ+1u6anmYh3a3FveHl7foWOkpido6Wmq6WkmKGko52goaKooaOgpaGck5mYmJmco56cmpudl5uZlqWam5+hqKmpqKuvr66pqKirrKytq6irp6WjoJyfo6Ojn6Cipammmpyip6Spn6GjoqKgpaanpqSooJ+ipKGjoqiop6OloaGopqalo5mbmJuTj6GknqKfmJiVoJuhpaCfm5udnJuamZugmo2YmZiTkYaAdnh4eGNbUllUX19hbWh2a3FoaWliWlNMQDw6Ozg5Nzk3NTU2Mjg1Njc3Ojw7Ozs7QD4/QD0+Pjk6PDk2Nz47QkZCPDg7P0NDRDw+OT43PkFCP0ZDOzhwkpqblJ6bm52Vl52doqajopaXnpaXl6GblJi+t7G4uba3t7i7l5S2vbu9vcDFtaK7mKC3v7+6wcm0nbu2sra/xcGooLa0urGqrrSxsLK0tbfBxszPzszJvrOkj3JmUkSLlYWFhX14cW5nZmxpbHJycXJydX2NqcTEu6Knqqynq6mlpqCnoKGmoZOWmJ2foqSjnZ6coaChnZekmpmdoKaqqqqtrq2tsLGrrK2sqamrrqimpaalpqSkpqaeo6eppKGcoKKjpqCio5+jpJ2foqWgpJyboZ6fo6GhpaSlqaOkpaKkp6ehn52elpOcoJiZko+MjJeWn5uWnJqdnJqSlpSUmJOQmp2YiouHgIB8gnhhXllTYWlhZnRvdGl0ZGlkYltMSz46OTg5ODg5NzM0NTI1NDY2OTw8Oz08P0E/QEA9Pj44OTs4Njc/OUJFQzw7PD5DREM9QDs9Nz1DQ0BFQjw3Z4yRk4qalZiblZWYm6Knq6aVl5iQlZmhnpeXvrWztLu6ubi5woeYt6u4u8DCxbOjw6e4s72/tMTHvbS7uL62wMTErqCworW2tb2+wcTHw8XH2+Pj2su8rqOViHRZWlFEaXdqbnRua2VlWVddWFxjamppZmFpi7bBwLmpr7Gwr6yqoqajrJ+fpquXmqifpaWfoJydoKuwsKyiq5yYm6Cor7Kys6uorre1sq2tqaalqKulpaStqaShn6Cnnp6mqKmmnp+anqGlpqmcnaObl6KmmpuanZ+cmqGcmZ2eoKijn6GfnaWioKOioZSZmpmTj4qLhI2Qk5uPjpiVm5eYkJORkomNl5iYk4uKi32AgIVwYGJfXmtjYm54dXdvbVtiUlZcTUc7PDk3OTc5Ojc0NDQxNDM3Njg8Ozs8PEBAPUA/Pj8+Ojo5Ojc6Pz5FRUU8PT1AQkJCQUE7PDhAQ0NARD87NV+MjIaFlouUlZeYl5ifpqellpWVkZebn5ual7mxtrO5vLy5urWqsryxvsG0vMe5uLuuv6fGw7/KxsnIxcXJvMLHx7+xsKe8vL7FxMbJx8XGvs3S1cq5ppyThXJeUVRLRFtlXmNqZWFgaFlUWFNXWVpdWVt1mre8rLSyrbOtqa6vp6awr7Ktqq+zpKu1qaeopKCgnqmyuL61tbWqqaausre4t7apq7i8ubexr66noqOop6SfqKOfnqCZoZydoqSnp6GelJuaoKGlnqChnpajnZSQlpiboZqflpORlpSin5qenJudoZ6kn56VnJiPkpOPjImTkJefiZCWkZuUmJGRlZaDjJWXlpKLjIh8f4R/amZoYWtsZ252cnJ2cmdeYFxSSUU/Ojo6Nzg0ODw3NjU0MjMzNjU3PDo7PDs9QD4/QD48PTk5OTs6PDw+QkRFPj49QENDQkREOzo4QUJCQUNAOTJbk4iEjZGKi5GRlZCSmp2fnJOSmJSdnZqXmpW2sbm1tb6+tri1uLO8vMTEusPHwb+0s8XFxr/CzcfLzsvLx8HDxsfIysXExcO7vLzBxcHFxL/CwcfLyLaTdGNVUE9USD5ebF9fZWJgXWRhU1VXVlVVWHOcrbGqqKqtrKmlpZ6pr6uyu7q4u7e5t7O5uLOurLO0qrC1ub3Bur6+vL60urm4u7qysbS8u7q7s7Oyp6Smq6uioaCdmpudmpyXmpuenJygnZaclpuZnZ6io52UnJCNiY6OkZ6bnJWNh5KLmJiWmpybmJybnp6cmp6UjpiYmpSRmZeeoZWYmpKXlJWRlJqYk4+TnZaSi5F+enx/dWtsbmRvbWlxeG95amlhXWdhUUZEQTw5OTc2NDQ6ODQ2NTMzMjY1Nj05OTs7PT47Pj49Oz05OTs7Oz89QUNBQkFAPEBDQ0NFQjs4OUQ/P0BCPzsyV5uQkZCQh4WSjo2IjZCTlZGPjZSUm5STlpqRs7e4uLi+u7C1sri2tbbAw8G+w8LAvru+u7u8xMzEzNDLxsa/xcfLyNTLysjGv7u7vsS+xcjGxsTEw7m4w5thSURHS0Q9W2VhYmljYFtjX1dST1BQV4G0uqyupaSjqKSgoKWZqbSxvsG+urm6uLW0srG0tLO6wL7Av769u7u9vsDCt7a3tru7sru+ubi3u7a3tKyoqamrpqijnpOampyYkZKZl5GRmJqXnpiWk5acm5+dlJOJiX6GiIyWlJiZkYmVkZeWlZmbmpaYl5idnpyhmJWZmZyYl5ybn56jnJ6WmJeTl5yZmZyUlp2UlpOJdnl6e3dua2lodlpnc3hzemdnXmRbUlhJRj87Nzg4NzYxNjk3NDQzMzM2NDY7ODo8Oz08OD0+PDo7PDs9Ozs+PkRBQURCQEBBQkNDREM9OTlCQD8/QD89MkyWmpaSk4yKmJCKi4yOkpKKiIaNkJiKj5CUl7O7tba/vb2xtrjBvby0uL/Bsbi3vsHFvbu8wsbJv8jOyMHEwcfKysbKxczIzcbIxb/DwMvNz8rGxMTEwsTBrYNPRk1FO01aXWVsZV9bYFlZU05VgKOrubWyrKmjoa2prKetn6y0tL/Dvrm4vbawrausr7W0ur7Fv7u8urO5u7i5ubWtsLS9u7G/vLiytrmzubu0ra2orKyqqaeXnpualY2MmJSTi5WWlJyZl5WWmZKYn5mQiop+iYqKkY6Vl5OUn5mWkJSZmJmWmJOUm6GeoZiYmp2ZmZaenpibopqdnJuYmpuZlpeXlpyZlJyYfoB4eXZ2ZWZqamhea3BueXhjYmFgXlhXRkU4Ojg6OTc5NDQ5NzY2NTEyMzM0Ozo9Pzs9PTo6PTs8Pjo7Pz48QkBDQkJFQj0/Q0NDQ0RFQDk6QkFBQj5CQTVCkJeUlZmSj5qQjpKRjZSVi4qHjI2UiImPkpq2u7S8xsHEwr3BxcLAtLO9v6ywr7rDysPCvs3IxbfByMW/wcLIy8rCwsTJzM3Oz8zDx8bIycjIycfFycfIx8LGlmpYRz8/Rl1iYWpgWlhXVFZ3mre/u7y6vKytpqm7urm3v7O1uLLBxrq3t8Gzsa2tqau1s7u2w7a2vbWxt762s7e4sLW2v7uwvbq0q7CxsbO8urOzrqutq6yxnaOjoJqQjpiXlZCclpaYlpWSnJmTm5+clpGUjpWQiYyQlZOUm56YmZKSnJedlJmSk5aZmJ2VnJ6do5yVnZ+TnKKcnKCfnaOemJSVl5ebmpmgkH99cXRxb2NhaHZoamp1bnlsXmRbVmBZTEhENjw5OTg4OjUzOjY2NDQxMzUyNTs6PD47Ozw9PDs8PTw7PD49P0E/RUFCQ0M+QEFARUVERUE7Nz5DQkI+Q0I4O4+akZaalJKUjZCUlI6VlI6Pi4yJk4uIkJObt8C6xsXEw8zCwcS9vrWvt7uvr7O6wMfFxMHMy8W2ucDCwsTHytHLwsPExsnFzNDNx8zJwsLHwsvLyMfMyc7Fxsa9qXJQSzBYU1ZlYVNOUHGpyMjCxMfAvL60sLCwwr6+wcbAvre2w8K6urbAvrWyrKmvsri+tMC0tLi0t7nEua+8vrm+v8K/tbq2q6qsrq+wt768trSura2vtaSlqKimmpycnZyeopydmZOQkp2VmKCdmJiVmZmZl46LlH2QkJefmZmYk5GToI6Nko+VjpCUlaKdnKSem56elpyjoKGipKOkop6amZubnJ2enIN9cn14cGdga2p3bWlmdm90Y11jVVdVU01HOjc7OTk3Nzo3NDg3ODQ1MjM0MjU7Ojk+Oj08Pz04Oz05OTk9PEBBQEVCQUJBQT9AP0RFREVAPDk+QkNCQENBOjSAoZeUmZiVkImUk5aTiZGMlJGOiJaKi5CXnMXLw8O8wMPHwbm9vbu4tre3rrK3uLzAwsDCx8bHurzAwsTHyMbSycHDw7+/vsTLyMrLyby8yMfJzcjDyMnJxcXCw8LBvJE/T3eAilZMb6XL1MW2v7/Av7q7vbWzs8C/ub/DucC3u8G8uri7ub27srCvsKy5wri9ube1t7q9xb24xsjCwcLGwr28tamurrCwr7O6t7m2sK+tr7OppquprqannqSlo6OjoqCblZiekZecl5GRlZeZlZmRlJiSlYyYo5qcnp2FiZ+TfJKWlZKUlJennaCipJ+en56foaGkoqKjoaOinJ2fnqOhppl5enmAc3BmZWdkbGVia25vb19ZXVdWTlBKRjk5Ozk3Njc3NjM3ODk1NjEzNTI3PDs8QDs/PDw6ODo8OTk4Pj1APz9GP0JBQz89QT5ARENDQTw5PENBQ0RBQDozbKKdlZedlo+PmJiZmIiSjZGVkI+Vjo6TlpbKy7u5urnBu7q3vsG8vLu5sa61uri4u8S6vsC+vru8wMXBxsK+xsK5u8O6uLm8vsHHwca7ucjIw8XEwMPBwcDEwcK9vMWnd2uCkJdvq8jIx9HBr729uLm7u763tLC5vrO8vrG5tbi7tryztbm2uba5t7GtusG6vMG/t77Ev8bDw8fHwrvAwr/Cv7iys7O1tLGut7S3tbSxrK2xp6Wlp7CtqJ+nq6ajqKWmpqCgn5SYmZSRkZWUl5OYl5qhnZ6hnKGdoaWglpSbkZeXmJqTnpmZqaSlpKWdoqCanqCkoqOcoqGjoJ6cnp6ppaiVfXuDeG5mYWViYWNkZGpjZ2RbWlpdWVFPRT07OTo7Nzc5OTY0OTk6NTMxNDUyNzo7OkA9Pzw8OTc3Ozo5Ojw+QD8+RDxCQURAPz49QkRCQkI+OjlCP0FCPT44NVmfnJiTmZaRlZiYmpeQkZCQk5GTlJKSkpSUxce4tbq5wrm5vMPFwri7ubGxtry6tbnAu7u5tre0tLW/u72/ub66urTAuLW3sq66u7fAt7zKz8C6v8C8u8W9usDEv72+r3NkfZGKitHFv7/Jv7DBv7q3u765tbi0uLy0vbi1tLCzvLG3t7i/tr25vb65t7q+u7/Axb29y8PGw8TAw762ubq2v7i7v7y4trOyq7CwsrWzs66sq6emnqeurauiqKumpqqjp6iqo5+Ym52bmpicnJiXnJuhpZ2anqGhoKGmoJqbnJiboJ+dnJ+coKiho6SknaKfmqKgop+el6Shop+dmpieqKWhi3x5iH1xZGFjY2hrZ2dqZmpeVlZUWU9TTEY4PzY7Ojc3OTs2NTo7PDYzMTM0MTc7OTg/PT47PDs3Njk5ODo7PUA/PkA9PT9CPjxAQUNDQT9DPTo2PEBBQDw9ODdJlJibj5OUkZWYlZGWkpWRkJGUlZSTk5OYlcHCwLq8ub62uL7EwMKxvbqytLO4vLW3vMC8vbS0sbC1t7W7wbi+ub+8vLe0t6+ut7W5v7vB1Y24v7vDtbrHtrW4ury4ubaqpJiNfoTJv7+7wb65xr3Cv7zFuLa3tLi2tru7uLa0t7q1s7i8vbm/ucPAwLu5vLu+vcjEvcfEw7rAvb62sra4srm0usLCureysaysq62yr7Kur6ijpJ6rrKyqpKakpKiqoqemraihoaGmn6Oiop6bnKKfoKOdnJuhn6KgpKCem5eZn6GdnZ6eoaWkoaKioZ6ho5yinqCZnZijn52eoJqZoKKmnYR6g4F5cW1lZWdwamVsaFlZT0tLS1JKTEhEOT44PTs2Ojs5Njc8ODk4NjA0MzE3OTk7Pz0+Ojw6ODg5PDg6Ozs7PD1BPj09Q0E8P0NDREA/Pzw6Nz5CREE/QDg4P4mYmoyMkI+Tl5WMkpCakpGXmJaUlJKQmZTDvsbBwby8uLi6v7a8scK2tLyxtLa4s7q9v768sq2vrLGwt7y3u73BxLm3t7a1ubm6u7+8z8R3qMy9x7e5t622tLe5s7WxvcnElEl7yr6/vr28v8jDxcW+xri1srK9uLi4vrq6uby6urS3u7q5v7zEwL+5uri/ubvFxr3Fw8Kyur27sa+2uLO3s7q+wLm2rLGrrqmqqa2qqq6mpKWnrq2ppaOio6GkpaWmoqato6Klo5+ho6Gcmpyhn6CloaCenZygnaWgnpeVmZ2fn52gn6KmpaCknpybn6Ofn5mcmZ2epJyWnKOcnqGcppZ+f4d9a25xZ3FrdGZjbmBcVUhLS0RKQ0NHPzo7OD48Nzs7OTc4Ozc8PDYyNzUxNjk8PD08QTs8Ojs6OT45Ojs9PUA+RD89PkRAPz9BRkQ/Pzw9OTc/QUNCQEI5Ojl3nJiLh4uQkpOWjY+TmpOQnZiSkY2PjpiSvbfHvsO+vbu+vL22uri9ure9s7OwuLi1uby7wLeqraSusLi7sr2+u8S2tbi1t7++xLzCxNaudIC7yM/CwLiutLS7vbe5sb3Dyo1Ddc3Dwr++vbzHzMfHxMe9tbW2wb27u7/CusDCv7y2t729vcHBwL+8ube8wru3v8W7wr++tbe8vK+vt7awtLO6ubq7r6mtq62rrKaqoqeuqKWqra2vp6Sgn6ajnqKjqKOjq6Oiop6dm5ublJaZnJyfpZ6fnpmYnpejoJyXmZqZmqOjop6jo6egpqCbnaCjnp2WoJmcoKCblJegn6WcmKKQgYaBcmZsam91b3lkaGNcY1FLVUhFRUNHQzw7OTg9Ojc6PTo4OTs3PD01MzY1MDY4OTo8O0A9PDo+PDk+OTk9Pjs/PkM8Pz5APz4/P0ZEQEE/Pjo3P0BDQz9APTo4ZqGYj4uNlZKVlY6PlpmVl5uVjoyMjY+bk7m2wbS/vLm8w8C+wLq1trKywLmvsry8sLe7tru8qqqjsLm9vLK8vrzFuLG4ubzGycrCxsnSmXFyq9HRzMrEtbq/xMi+vrS/wMF4Um7LxsK+wby/w8zKx8XGwLm9vMS/v7/CyL3Hx8XFvLrEv7vBv7rAvLu7wMS9t7nCub69t7S2uLqur7WxsLCytre0t6yurKqsrKuoq6Gms6qlra+trKippaOkp5+io6Onoaeiop6cnZyamYyQlpeZnaKZnpuVkp2UoaCdmZ6fmJimpqKfoqKmoqeloqCko6GbnaCbnKKfl5WVnp6kmpafiYGDgXRwbW10bG1vYGNfYmJOSU0/RUA/REM7Ozo6Ozo4Ozw6OTw+Ojo+NDQ1NTE5OTo5PDtAPD89PTw4PDs6PDs7Pz5DPkI+QD89Pz9FRUJBQj87Nj9CRUQ9QUE6OlmfmJOSlZqVmpOQlpeclZuZlpSVkZKTnZm2uLaxuru6vsG5uca7trWypb69tLbBv66zvbS4wbGwsbS7xdDDur68xL63vMC/yc/HyMrKwoZyc6PMzMvNysbCw8vOwby4vbqxb2Niu8jEwMC/xMDKycPDxMO5w769ub+8wsbCyc7Hxr66xr26v7m3wLm5vsDCvrW0vLi2u7CvsrK1r7Cvrqyus7CzsrirsbKxqrCrq6yrrLatqKyusqarrKmpoaWgpaakrKSmoaChnqGgnaCMlJeTm5+mmZ6emZOYnZ+gnp2eopuYp62ooqSgoKKqpqmhqKGlm6CgnZ2jn5SYmKKdp6Gfm4J7eoh7bW14fGBxZFxfYF9UST5DRUlCQz5DOz42OTo7Ozs7Ozs7PT05PTU2NjIxODo5Ozs6QTs/PDw+Nzs8Ozw9PTw9Pz5BQUE/P0FCQUVDQkRAPDY+Q0RFPkJEPztTmZuZmJ6dmqCalpyZn5KdlZ2boJWWlJqYur20sLu8wcTCv8XGura5sqO7vbS3xLuwtbq2ucS4tLy3u7ur28O+tr7Avr66ppypsrbDv6V5dXiZxMfLyMHDwMDJysG/u7mxoHxybK3IxcS/wMG/y8fDwMjAusK7ubO6usG+wMrOysS9tby8ub+5ubW1s7/Avre0s7S4rbeqr7CwsrGvq6+nr7ausrG5rra2uLSzsLGttrS6sa6srranrLKsraSjoaenqLKrqqWkp6elpaCml5ujn6SmraKeo6KanaWiop+foaWenrC0sKSlnp+kqaevp6mgq6CiopqipJ2anqGmp6+psZWCe32Bem5zeHRocF5cX11aUkZFRE1JQUQ9SDs7NTk7Ojw8Ojs7Oz0/Oj01NDUxMjc4ODs8O0I8Pz46OzY6PTo7Pj0/QD87QUFBPj4/QkBBQkJFPjo1OkFCST9AQkA7TJqdnZ6fnZienZmampySoJWbnp+blZGRl8W+urbDvMbCvr/Ixbe1uLe2ubu0r7e3srWzt7m8u7a7u8S4ba3Ovba5wLysfW5obm1ygZWYc3d8l72/xsC5wLy+xcS9vbixsJiQfYCbysLDvL2/v8PDv7/HvLzAtLOutLS8vr/OzcvCt7K4t7e9ubuxtrLIwLu2tLGwt6yzqbCtrbS3r6uuqrG1r7Gvt7O6usC/tre2sru6wLWyrbO3rLC6r7KloqWrrK+5s7KosK+xr6qiqKGkraitrLOun6inpqWmq6Sknqaqo6ayuLOrpZyfp6anrquqpbClpaWbpKOYn6exrLW4sLKOhHl/fHdtdXtxb2pcYGFaVFFBRklHS0BFQ0k8PTY7OTk8Ozo6Ozo9Pzw9NTU2MTM2OTg8QT5AOz1AOzs5PD04Oj08QD46Oj49Pj09PkBCQkJBRD03NDU9REc9Q0I/PEWUnqCgoJyXmpiYlZmdmZ2fm52bnJaRj5LDwMK9wrzEvLy7xbu3s7e2tru7s6CWtayvsbS0tLa4ucDNs3aBs722tcKlh2laXmBNUltabnN3gJ+4uMK6s7u3u72/uru7rqSbmIeQfsDEw768v7u7uLbBwrW/urStrqyvvcC5z8rJw7GwtbS0vbq+urq7ysO7uravsL2xuK+ys7C3vbaur66wt7CsrLK2vbzEwrq9t7bAv8G3tbC2srGzurGxr6err6u2v7e1qbqztbmxp6uop7ausrG1uaisrK+qr7CqqKessayytry0saykqKuoqKusq6i2qaaonqadmKOuvLG7wbSmiYF7gnpzdnZ4bnJhX2ddW1VKPT8/R0c9R0NDOTo1Ozk5Pjw8OTo8Pj4+Pjg4MzE1Nzg5Pj9BPzs6Pz08Oz09OTs8OTs6Nzs+PT1DQT8/QUJEQkE8ODU4PUNGPUREPzw/iZ2en52Xl5WUk5aZnpubmpuYlJ2Uio6Owb7Dwr6+vrm2usCxtbGzt7fCtbOrrbOoqa61r620trnCyaiEeIqgr7WdamVnVllgSUlNUFNsd4alsLe+ubK1sru5vLa5vrSWnKWVoXGuycTAvb+5s66yvLquu7SzpaqmrLq+uMvCv76sq7Cvs7q3ub67wMXBu7y3sLXEtb+0uLu0u8PCs7a2sbisqaWrsr23v7+7u7exvL28trGvq6uprbOvsLCrsLSpuMC2sqm0tbC3tq2spqu7s660uMKwsbG1sbK1saywsri4ubi+tLGzrqyxramvrqqyuK6trainoZ6ptr+4ur+wlol9gHxxdHd0d3JtYGRiXF5PSUI/PUlERk1EQDc3NTs6OT48PDk4PT47PT86ODMyNTc2OD8/Qj86OD4+PTw5PDk7Ozo8Ozs6PEA+QkI9QEE/QkI/PDs3OjxBRD5CQz8+QYqgm6GdlJiVlZKYmpyWm5WalY2bj4SIhru0vb+7vLm3s7y8rLOytLS2wLXAr7Kzqqqxt62pubO3v8WqiHx1jKCZYFRDWFVHYWpWT0VKYI2grK+2urW0sqy8ubi1uMG9i5iwoaVypcvCv7m6ta6lrLOxprKwqJ2gnqSttrTBtrWzpaeqqLC2s7K6tbu7u7W4trC1xLK+vL+8ubrFybq9vraxp6SeoamxrrW5trKxq7S2trGopp6gmaWmpKynq6y2qa+6sa2kpq2lq7GrrKmtuLawsrjBtrGxtbGvu7ayt7W1sry1urKwsbKutLKqrq2nuLWyta2uqqiosrq9wLa0qY6Ce393cHxwdnNvZF5oWV1eU09OQj9KQ0FLSkA2NjU7Nzg+Ojs4Nz4+PDs/OjkzMjc1NzU8PD48PDg+Pjw8OTk5Ozs7Pjs7OTw+P0E9PEJAPz9CQD47Njc6QERBQ0E/QUKJoJ2loJSWmJiVnqCcl5uYmpGMmYmDhoS1r7S7u7S1sLG2uq6wtLOvtbq1urC1s7KttrqvrbyzuLi/tZGCeIiPb05KP2RZQk53gJRqTkFdgbC1s7WytK+su7q4trm/xXWDqp6ZY6m/uLWysa2tn6SnpqKuppyVmJeZnqituKuqqp6kqKSrrq+nsKuvsbGtsa6ur7mwtLy+uLm4x8W8vLu4qaKcmJufp6assq6zqaapqq6popqXl5GcmpijnqKir6ekrKaompqemqGnp6anqa+2squ0trCqsK+xqbm2sbWxrqy3s7avrquuq7S1ra+rq7GtsbKoraurs7W3ur2wq6GLeoJ5cnZ0bXZqbF1ca1VeXFBOSERHTUJHTkc4NjY1OjU6Pjg7OTc8PTo7PTo5MjM2Nzc3Pjs9Pjo6Pz48PDw6Ojs5Oz47PTk8Pj1CPDtAP0A/QT8+OjU1OkBFQkRBQEJBiJ+ipqGYm56dmqWpmJudmpmUjJmHhoeGrq2uuLmxsqiur7iyq7CwqrK1ubm+tbK4tLm6trm7tbWzt7aVjIiEe1hGQU6HWUpKWHeNgWNBU6O5s7SysLGtsLm4tru3uryPobKro3KssKmrraujqKCdnaWahZ+UkJSWjpadp62joqOfoaaio6mpoaanpaqtp6ynqKesq6yyu7SztLm6trK2ramgmpaWm52fq6yqr6Oko6GpoJuTjo+QlJKSmZaanaSloJ+ep5iVkpSZnqSjoaWqrK2iqaqppKmtrqW0sa6xraqprq+wraWmqqSos66trKmmpqmrpqqnq7Ksr7Oxq6mWgX+Bd3J5aXV0b2VVYmRYXVJPTUlASVJETkM9ODg3NTo3PD46Ozw4OTw7Ozw7ODI0ODk3ODs7PDs4PD0+Oz08Ojk8Ojs9PTw6OkA9PDw7QD5CQEE/Pjk1ODs8RkFDRD9BQYijpqKjnqCfp6Coqpufm5yZmI6Xi42PjKqpqLGvsK2lp6ayr6mmq6CvsLu1vby4wMG+vLy8ua6sr7K8qZmZlWlOQFJ4cVBJSUtnnIFZRVKuu7Gss6+urK22trK0ta6opp+am52epqieoKipn6Gnlp+RVYGekYyOlIuVmaKnn5+hoqGlpZyjo6CepaCkrKWmqKWio6OrrLOuqa6urqeqraisoZyamJmYm6qoq6ufpqKbo5yVkIyPkJCTkJeVlpifnp6amaaXk4+Slp2ioKWipqSnoKKko6Ghq6uksq2qrKyno6yuraufoaKkpK+srKmmo6KqpKqppKmrpqmsq6ahiHiDfHZ/emN4bW5dUWlVUE9HUE1NQ1BSQT87PjQ6OjU7Oj07Ojk9OTk8Ozw8OzkzNjk5Njo7Pz06ODs6Pjw6PDs5Oz07PDw9PjxAPT88ODtAQEE/Pz45NDk8N0FDQkQ9QEOOqqSjoqGinaqlpqimoZ6dmZ2PmJWTkJWnpKGmqKmlpKChp6uhnKKbp6u1sry9wMLCwL7AuLSnpKyovcKrpb5pRVKdglFXSUpgSlSOYGNigK61qrK0rqqrr7Cys62lnZGXk4+XoJ+hoJyjpJ+eqJSjVVaHlY+LjJSQlpqgp56fn6Cjpaicn6ChnKGfo6innKehoKSfrKisrKCpq6agpKimrKOenp6al5qrpqqxo6WonqCclpOPj5KRmZCWlZiXn5icmZukmZeUlZqdoJ2nqKWgo6Kho5+doKmqpa6upqipoaKqrqqnoaCio6msq6eppqShqaKlqaalpKKmpKijkn58gHV2fW5se2RpVlNkTkpIR09TTktOSDxFQD0yQDg1OTs+Ozk5Ozg6PDs7Ozk5NDg7ODc7Oz48Ojk8Oj07Ozw9OTw8PD49PUE+QEJAPTc6P0FCQEA/ODU1PDpAQ0BEPkFGlq6koqWeo6KpqKipqqWmnp2imJiZmZWbop6bnqOioKOgoZqgmJeXlqGorK62trq5ure3u66ooKGpoKrGv8uhUEFynndPbktLY2Z1c2BaXnCQsa+us7Wqpqyso5uZlI2RlZeYmJyfoqKcnaSemqSakzpkhI2Mi46XlJmeoqmdoaCcpqerop+gp5+dn6OmqJ6jpp+qnaqtqq6nqLClo6Smp6ymoqWim5mer6iusqumq6qgm5iYmJWTlpqTlZaalpuXmJihnpyclpuhm56ao6eln6GioqOdm6Gmp6aoraOppZ6kp6mkpaWhpaSsrKmmq6eioKSjpKenoaCgpaKmoIl8gH53eXxleXlhYlNWYUlJS0xTVUpTUU05P0E2Nz02NTs6PDw5Ozs4Ojw9Ojs4NjU3OjY5Pj0+PDk5PTk9PTw+PTs7PDo+PTw/Pz9APT03Oj5AQEA/Pzg2NT08PkFCRkBAR6CupKaroaOqrK6tp6ypqKCipp6bm56aoJyalZmfn5uen56WlJOXk5KcnqSorq2sq6uvqq+pnpeepZykx8eOV1NJZaNbZX5vcl1Ra2NbZF9da4+0sLC4rKahnJ2alJeamZCOkZWRjI6Nk5minJeio4A9ZICBe3l/lJido6Onnqarn6eurqqmorGjmqOmpqqioaqiqaSosquxsqu5qKarp6urqaysp6Ggo7GusrG0qrKuo5mcnZ6hmJubmpiZm5WWm5aZnKWhoJqjoZqdmZ+kop6gn6KmnZulpqWkpaijp6OepqOinqaloqWlqKykpq2noJ2eoJ6gpaGenqWgppmBe4F8dnZzaYJtZVxTW1pNUktPT1ZNVE1CNz5DNzg9NzY6PDw9Ojw5ODo7PDo7OTc2Oj01OTw7QD03ODs3PTs9PT06Ozw4Pj09QD5BPj4+ODg8P0BAPT43NTg9Pj1BQEZAQUihqqCrq6GkqquwramtqaelpaWkoKGfnqWXl5SYmZ6YnJ2blo+VmZKRnJihnaqip6Cep6Gln5ySm6KanqukjXpVaXJ2dXBjdnZYV2NgY2dZWFdmra6sr6efnqKglpCTm6CcmZeSk5+coaOanpuWnqCDamNmcHp4dX6Mm6apq6W1sp+ttLe2sKe0rKKtraOvpaSmoamorrWzsr22vrCssa6tqaq0sbCoq6iztbizuK2ytKSgnaWgrKGhoqGgmpmWlp+bm5iloaCeo6Ggn5ucpaCfnZyhqJ+fp6meoaOkoKagnqehn5ymo5+ipaOooKmrpZ+dnZudmqainpyjnqeQgYJ/fHh2and1Xm1bUmFJUlZIRlZXS0NNSD1LSThGPDc3Oz49PDo8OTg6Ojs6PDk2Njo8Nzs+PT8+OTc9OT47PEA8OkA6OkA/O0A+QUA9PDk3Oj5APzo+NzU4PT0/QUBEQEJGnKueqamipamorqimqqWmp6aoqqGlpKOmkpOVmJacmpqcmpWTmZuNk5+ZqJ2un6eenKGdnpqZkpiem6KhoKSAboJwYGNYTFtTWk1MUFhSSE1NSJisqqmloJ+akpGUmJiWlpaMiIuOlJ2cnZyelp2etqt/Z3+GfXV5e4GdtK6zwZipt7i9v7qttbSwt7CutKmmpKWsqbmztbvDvMPBt7u2q66xube8r7OwtcG8t76zs7WirKKpqbKpq6inqJqZnpqqp6CZp6Cfn6iopaWfnaqiop6bn6igpKetmZ+jnp6nnqCmnpycoqGbo6KhnZympaWkn6KZnJukn6CboJyjiYWFfnZybWl3bWhuXFhcQ1dOSkdNSENGTj0+TD40PDo2Oj0/PDs6Ojg4PDk6Ozs8NTQ6PDg5Pj4/Pjg4Pzk8Oz0/Oz1BPTo/PjxAPj8+Pz08Njs/QT07Pzg1ODw8QERCREFCQ5WqoKapo6mqqKmjoamgpqinrK6lqaWpqZSSl5mUmpqanJiYmZyamJmqoLGit6Swpp+enZ2XmJWZnpuco5+dimJXXmVgV01RRz4+P0NDPz5CUXipramqpqCen6KjnZ+em52blJOVlJ6emJSFnZmgvNW5lYWIjIV6cXBsgKm7xJyQucO+v8K/trq7wMO5vbusrqexrbHCtrjCxsDIysDKv7C5ub24wr64tLvGxL3DvLi0qrOtqrO0r7Ouqq+jnqyot7Kto7CmoaOwsa6wpKWvo6GgmqGmoaSqqpmdoJmao6CmqKGcnqKemaSenpiYo6OhpJ6mmpuipJ6fm5ubnIeGgXx0cmtsdXJxaFdcUUZVSERKUEk/RUI0Rkg5Njw+Nzs8Pjw8Ojo4OTw4OTs4Ojo4Ozw3Oz49Pj02OEA5Ozs9QDw9QDk3PD07Pj0+PUI+Pjc6QUA+PD45NTg9Oz1DQEFDQkGRqqGlqqelqqimn6KnnKasp7Gyq62jqayVkpWalJecoqGbnqCinJ+psqu7sr+rr6ylnqCgnJyYmp+gmp+flX1gXmVgUUdEPEM+RTw/OTZOfqqzp6SjoqCepaymn5idlZKanpmVjIqGiIZ4bYefs9vUvKuciYaLgnJoXV2QzrZzrcfFxcPIwsDFyM3QyMvDsre1vrK+xbu+zM3GzMzM0se+v8DDvsfHwrjEysnEwce/urS6u7W7t7C2squ7sq+8t8C7uqu4rauquLu1vK6uuKOmo56mpaKjqaaZm5+Zmp2nqqegoaGkmJSjlZSZkZydn6Sep5+en6KdmJmUmJSIhX56cmtkaW94a2VaXEZMTUVEVE1FQkU3Oj87NTQ5OTc5Pj87PDs7OD48Njo9OTw9OTw9Ojs9Pj4+NztBOj45PT45PT44Nzs6Ojs/Pz1CPj83OkFAPTw9ODY2PDo8QD9BQUE+kqugp66ooqulpKKipaGlqquwsq2upKmmlJWWmpaUm6SmnaGqp6KrrLy8v8PBsrK4p6Ghq6qhnJ6hoZ2bmn5zamFXTkU+SVl8b2JCPVyOrqygmZucnp6Zl5eYk42Pl5eUj42QjIKDgnZycG1wkbvDx8TAt5aDgoSEcmBXhbmAgNDMzMzHysXFzNDS1c7Tyb3Av8O7xsXIxdHTzdPQ09PMysHGx8bKyM/AydHNx8bIxsK9xMG/v7+1vrOtv8DDw8fFyMSvv7myuL3EwsG7vLy1rqenrqigoqmlmpagmpmdqKupo6SknpePm4uQmYmVmJugn6OdnZeempOTi5WPhYF5dXNlYmdyb2deWlpET01DRlFJRENBNTU1ODlCPTY4OkE+Ozs+PDk+PTc6PTk6PDg8PDw7Pz8+PD0+Qzw7OkA9Ojs6Ojg4ODk7QT48QD8+OTtBQTs7Pjc4Njo7PkI+Q0FAPpOvn6ivpqiro6KloKampKuoq62qrqKqo5Kcl5ebmJuirJ2frqalsarFxszOzb+wwaikqKytqqCdo56bnZZrZl1USURAP0uGnqWahKCyraOenJ+amJeUk5SXkZCQjYiEhImHg4CBgYB5cXJvbHuIZ46ttrWhjn16emtoZXGEX7rU0dHNzc7QxM3U1djR183Gx8nMw8XKz8rS19LX0tXW09TIzMfMzcrTzc7TzcbJysrCx8zHycnGv8Ozs8jFy8vLz8fKv76/vcHHxczMycnAw8CusLOonqKqo5qTnpyYnqaprKSlppaXipWFkZSHkpKSmZualpiQm5aQjIaRi4B7cnV2Z2NndmplVlhSRE5HQElRQz5CPToyMkE8RTw3ODxCPTs9Pzs7Pj05Oj48Oz44Ojk5Oj86Pj1APkA8Pjs+Ozk9PTw5Njo6Pj08PEA/Pjk6QEE6OT44Ojo6Oz4+PEE/QT6QrKKiqaanqKSfop2qqKOso6OnpqyiqZ+To5iWn56dpK6bn7CrqKyxyc3U18/Gu8esrbO3rK6jnqOinaGcY1NMSkRDP0NSrtG9sq+mnJycoKShnZqUlJWUin15cWxlYmhycHJ7hYqAdXBtcXFweVFZfJiko5Z+b2pjZmpmXZPY0dLT1NLP0cPQ09bY1dXSy8nO0MvGzdLK0tXX2dbY09bYzdLKz9HMz9HN09DAycjLxMzNzM/PxsfItsDLwNLNzNDHysnAxMPIz83Q0c/NysjNuLe7qJ+lq6eemJ6jnp2qpa2pqKiSlYiQhIyRho2MiJOVmZCWjJiSj4aHjIR9eHN2cGNhZXJjXVJcSktHQUZJSj87QTg+NTU4Njs4Njo8QD07Pjw7OUA7OTo8Ozs8Nz09Ozo+Oz08Pjw/Ojo8Ozs5Oz89OTU7PD48PD0/Pz46O0BCOzk/OTg7PT0+PzxBQEQ8hqugnKegp6Oim6CbqaSlqaCfoaGmn6ifmKSimqmmoqarmqOwsamotdDU19rSx8bLtLXBxbG1qKGlpaCioltJQEFEQUZRdrKvppqUl5+cmqCgnpudmpWJd2lkYV9fX19eX19dYWx1c3Bwbmxxb3WAY1p3kpuZhWlhX2NpY3nM1M3P1dTU0dHM0M3T19bT1dDP0tPRydPRyNDX19jS2NLX2dXWzM/Pyc3SzM7RwMfEycfPztHR0sjMzcDLzcbUz8zPycXLx8fJzMvU1NHVz9LM08K5xbGlqLWuqJuoq6Wdsqiws6ysk4+TjoiKjoOPi4SQjpmNk4+Zj4+ChYx8enFzdG1hY2ltX1ZRYEpKQ0VDU04/PD40Mzo9NTI4NTU8PEA8Ozw6OTpAOjg7Oj46PTg+Ojo8QD08OTs9Pzk6Pz07PTw9PTo2PD0/QD08PT0+OjxAQjs5PDc0Oj48P0A9RkFEPYKknKClnqWlo5mcnaSeo6OfnZ+doJqnnpyhqZ+vraqqq52lrreoq7fX1NXZ2dHO0L+8zMm2vq6nqqiho6xnQzg9PkRYgqqon5eVl5manJ+dmJudk31xZWNiX19hX15hYF5hYF9gZW1wcG1rbnFydnxgXYCUmIpnWVlebXWXx9TOy9LN1dTRys/M09bS0dbNz9XV0cXR08rQ1NXWztPR2NjY18vIzsTKz83KzMDJwcnKzs/QzNDOzszP0MjM0NHLzsvDysjKzcvM0tPO1NLR0NDKvci5sK67ubWrtrCtqLits7+7sZqOoJSRjo2IjpCFkY2ZjJGRlY6RgIWJenZvcG9rYWRucGFYXFtJRkZETVlFO0A9MzM8PDg3ODU1Oz5APTk8PDg8Pjk8QDtAOj04Pzk4Oj88PTg7PkI6Oj08OkE9PTw6Nj08P0A9PDs9Pjg7QEE9Ojw4ODs+PD4+OkVCRT6Bn5mlp6Cgo6eam5+cl56eoZqdmpyappufpKefuLa1taykrK6+tLDA2NLX2tzWzs3Kw9LPwcGxqaytqaSyfEhGQjtWjaGblZOWm56enpyTlpeUiGteXl5hZGJgYGFhYGBgXl9fXlxibXFubnFxcnF3d1tnh4+KYlVZaoKRnbPNzsTNytLSzsbOzM3Uy87SzcvX1tDM0dTLzNDR08rO0dXS1dbKwMrCxs3DyMrDzcTGycvLz8vOzdHO1MzHydDNycfLxsfCxsrMztHRx9DPzs7M0MXHwbi5vcPCvcO5srK+sLvDxLWqmKWhmJaRlZWSi5SNmpGUlI+PlYKJhnlxcmttaGBgcWhZWGhWTUdMSVFRQjtEPzs2ODo4Ojo1Nz09QTs6PD05PD05PT06Pjo8ODs9OTtAPD47Pj5BPDk9Pj1CPTs3NzU/PDw/PDw7PDw4O0FAPDo8OTs7Ozw9QTpFQUU+hJ6bqK2epKSqnJ6fmJKXm5+am56ZmaKVoamppcTCwb+7tbKxx8K4ytXW2drb2MzMz8jW1cTCta+0qKCtl3hsb3B3j5qNjJeVkJORkZWWlZCLfGViYmJgXV5hY2JgX19gYWFgX11bXWdxcXBxcW1pbXhoVXiDfFtUaX+Sm5+uxca/wcTOzsfFx83K0cfKzc3G0dLPzczUysfKzs/Hx8/Sy9DPxbrEv8bKvcPHyc7Fw8jAx87IxM3LzdDJxcXQycbCxsnFv8HIzczMz8PKzMnHzNDFxci7x8PJycLPwb28v7DByce5vaqxsqelnaKcmJCbkKOZl5mRlZiJj4J4b3Vka2BeZnFhW1dgR0lIR0lNVUc/Sj02NDM1NT09NDg9PT06Oz08OTo7OT89OTw7PDg6PDo6QD1APD09Pjw6Qz48Pz04ODk6QD4/Pjw7Ozs7ODo+Pzw7Ojc5PD49Oz49RkFDPYOgm6qupa6qq5qdoJeUjpedmpmgmpqcm6WysazJzcrIxL68uczMxtDV1dja29jQyc/P0dPIwre7u62ktn5ngoWiqpONjZaPhYODg4F9hIR+c19bXl1eYF5gY2RjX11cXl9gYF9bWlxha3JwbW1oZ2lrcV9lb2pYXHeCkZeXore6uri7yMXBw8DDyMnIyMnHwcXLxcfKzcnEwcrJwcHLz8TLyL+5wbzGyL7Axs/LxMDDu8rHyLvJxsXKwb7Cy8bFxL7Gvr3BxMbMxsW8v8rDxcfSxcHJwMrKxsjG0MPDxsOuxMvHw8q3v7y6s6mspKWYn5iso6Gmm6Ogm5V8d3N1ZmpbYW5tWlxYUkRMR0NHRExERlM/NTQzMzVAPTM6PDw7OTw8PDg7PTtBPTo8Ojs3Oz05Oz07PTs6OD4+PEI+Oz88OTk7Pz07QD48Ozk5OTk6Oz06PDo2OTw+PDs+O0NCRD5/pZypsqm0rrCdnp6YnImUm5man6Kfmp2ovri8ys/RzMfCw8bNzs7M1c/V2djZz8vSzc3OyMG1w76ysLZtXnp8npGKkpaGeoCEhX91eHVycF9aW11gYGJjZGRlZGBbXF5dXl1fW1laXGJucW5pZmdraW52XFpaXGBzfoaGgpKur7GvrsC5uru5uMDBwcO9vbm8v7nEycXGwr3GwLe7w8i/wcm7tru7xcO/vMLOw8a+vrXBvsS7vce8w7q1vcbEwsO3wLa2v7+8zcS9trrIu7++zMTCxsPGycfJxtDGwszIssfJw87MwMXDv7yyt7Cyp6ioubClrbCqrayUend4a2VoYGhvZFZeWUpGSkZIS0FFQkZKQTk6NjU4ODUzOzo7PDk8PDs5Ozk6QD46Ojw6Nzo7Nzo7Oz88OjxAPUA/PT8/Oz07O0A8Pj4+Ojk5ODk3ODo8PDw7OTo8Pjs7PjpAQEU+fqygrLWrt7SyoZ6fl5qNlJaan52mop2et8XCxMjO0srKysfNzc7RyNDG1dTV183Kz8XJxcfBusW9rK6nYGN2gZKLiIuEeH+Ghn99g3t0dGNcXF1eYGBiY2JiZGViXVxbXF5cXl1aW1xdZ3Jwa2RjaWpqdXBIT1xZaHNvaWSTpaaqqKO1sbWzsrKzu7W8sLavs6+yu8K7wcS8v7q0srq+wLjIuLS8tsDCvbi9x8HDu7Wvs7W7v7TFuLu1rLm9vsC9sbu2sLe6s8a9t6+8v7W3tcW9vsPGwMTGxsfMxb/GxrvHy7/PycfDxsHDt8O9vba5vse/rLW7tbe2jnl0eGdnZWJrbl5WXmBGS0hISkdCREFFRj89OjU2NjYzMzs6Oz06Ozs6Oz44PEE9PDo7ODc5OTk7PDo+Ozk+Pz1APz5CQD1AOjo+Oz89PTk6Ojo4NTY7PT48PDo7OT49OT86PEBAPIi3pauzsby8sa2foJmUlJiXnqujr6qnpMXLzcjFyM3M0MvNyMnIysnKxNDN0s/NxcfBxcG/urjJt6uwmltnb4iOhoiJenh+hYZ2d4F8c2hdXV1dX2BfYGRhXmNlY19eXFteXF1eWltbXF9rb2xmY2ZoZ2p5X0NQTFxcVlJzoZqepqKap6mvq6mrqLOtta+xp62mrLO7urbDubq5sKq0ubuzwrmvwLG9vLu1u8e5w7etqqiwssC2uL2wsaiys7W7vKuutqeutq68srCquLCuu667uLvAwb66w7/Gw8XAvMbBx8q4xcfFv8fDw7nExsK7xsnMy7O5wr27s4l0dndraWBibGlZV1dbQUxMTUpFQUM/RkE6Ojo5OTY4NTQ6Ojk7PD07Ojs+ODtAPD05Ojc5Pjk7PDo4Ozs6Pj45QT0/QD87Pjo7PDo9PDw4OTg5NzY4PDw9Ozw6Ojs+PTs/Ozs+QDyKwKuouLe5w62zqZ2ZlJaZoZymsLWxt6bFztLLw8XBxM/HzcHCxr/ExMPDysLJyr/AvMK6s7W1w66qsZNbaX6SiI6Pe3h9iYV5e4SAd25eXVxcXV9gX19kY2JkY2JgX11aW1paXVpaWlpdY21tZmRkZGVnbHhRPUVMWF9al6WWnZ+blZehp6uipqGqqauqr6Klnqqttbaxvbivt6+orbi0s7y3s7ywuLm1srzBssCupamjq7Gzs6i9qquoq6yutbSmqa6hpbCps6anqK6mqLessbO3uru7sry+vr7Ev7XBwMfIt76/xbfFw8C7v8TCvsTIzMq/v8TAwKmHc3RzamlcYW9kV1ZYUEhaU1NLRkZFPj9AOjc4OTc3NjQzNzo5OTo8Ozs8PDc7PTs7Ozw4OT44PTs8Njo9Oz89N0E+P0A/Ojw8Oj05Ojs6Nzc3ODg3OTw7PDs5Ozo8OTc5Pjw+P0E7jMKvrry3ucSwtrCbmZWcmKqpsLGztb2vxdDPzMPHubnLwsu+u8m2vcO+usq3wcPCtba8trGvtbytqauTZG2Ig4eLgHp9f354dH58c3dlX11cXF5fYF5fY2NhYmBhX11dXFpYWVtbWFdZXF9lamRiY2FkZGhuc0ZEZIFwXZSZh5yulpKMnJ6moaGfpKWmpayfnJukpayysLa2p7Crp6q0q7O5sLW1rra5s7C6urG2pKCkoKaxqKypuaqlp6eop7OtoKenn5ylpqyfn6ekoaGxra2ssrWztLC1vLa7wcCyu77DwbG5ucKzwL3Atbi8vb68wsfEw8S/wMSghHlxbGJmYGtvYFVZX0hOaE9USEZLRjw9QD06Ozw4MjY1MzY5OTk7OTo6PDo3PD88PDs8ODg8OTw6Ozc4Ojo8OTg+Oj89OTg8Ojs+OTc3NzY3ODg2NjY7Ojo7OTo7PDg1OTw6Pj5AO43Itba9uLrBur22oJ6VnaCmurars7O7s8TPycvCxbi3x8DMv7jKt7vFuLPFuLO/wKy2vLKspq+0raGjkmlyhoWGgHx4dXNvbWppaXBpX2BdXFxcXl9fYWNiYGBgYF5cW1xcWFlYWFhWWFpdXmNiYGNjY2JlZWxrWXt5X1RcRF5ik6SRh5idnqSbnZ6ipKKmnZqim56qrqyxtKOoqamrrKS0uKy2r62zta+zta+wqp+en6SisqWmqritoqamn6itq5mfoJ+ZnZ+lmpmjnJyesKmsqKqrrK2ws7mvuLm6sLa8u7qrs7K5s720t7KxtrW/tb3AvcPCu7u9l4R7c2xfZV5kZFhUV15JV11LUEdKSkdBPD8/QTs/PDA1NjM2Ojs5Ozg5OTw8Nz4/Oz07Ozg4PDg5ODw3ODo7Ozo7Pzo9Ozc4PDo9PDc0Nzc2NzU3NDY2Ozc5Ojs6ODo5ODo7OTo8PzuJyba4vru4wcHBtKSkmZqkpsCyr7astLfFz8jIwMa7u8PDz765yLi4v7eywrSxu7usurqxop+pq6eYnpBtfoWGf3hybW9ta2JeYmZmXV1eXV1dXF1fYGFiY2NiYV9cW1taWllYV1dXV1dYV1pdYWJjY2JiY2Rlb2ZZWEgyISJcWF+OlImWnZ6lnJmbo6WhpJueoJqYra2trrGgpKKtq6ehtbCxsaypr7OourOntqGin5yjoa2joqq2qqKjpp6mpqOWmZ2XmZqdoJqXnZydnK2hrKijpKatq7OzqrWwsquyubSvqq+ysrO3s66pra6yuLC6trq9v7ezsZSGenZmX2ZfW1lWU1pVS1tRTEpFSEtJQz0/QkJAQToyNDUyNDk5ODk7OTo9PDY9Pzs8Pjs3Ozs3Nzc+Njo+Ozo4Oj07PD06Ozw6PTs4Nzk3NDY1NTQ2Nzg1Ojo4Ojk5PDg3Ojg5PkA6gci9uL2/tr68v7KdpaOYpbHDtba9rbS4wszIxsDFtsHAx863wMO9s7m5sr+2sbm7rbK1r5+ao6qhlJqPeH+DhH94b3F0cWhlZGllY1xcW1tdXVxbXmBhXl9fYF5cW1pcWllYVldXVlhXWFdVV2BiY2FhYmBgZGZxUTozIRoraJSPeJGMkZuZnZqUn5+oop2ep5yamaqmrrCqm6Kjt6mhoK6otaqmp66xpLiwpLego5yZmaqmoZqtubCjoaScoqCgk5WhlJaWnJmYlpeclZ+pnqqkop6jqqqxrai0rKqnrbOwpauus7GvsK+vp6iosq6ytLC8tLq4rqOUgnp3ZV9hV1lYU1JUS01eTFBMR0hNTEU9QD49Qjw7NzY1MzQ5ODg5OTo5Pjo4Pj47PTw8Nz49Njc2PTc7PTs5Nzk7Ozw+OTk6Ozo4Njc2NTQ1MzEwNDU2Nzk6ODo5Ojo3Ojs5OT1AOnbAvLS6wrG+t72tnaenoqq7wL3Aua60uMHMx8XCw73FuMjMssHCwa68u7W7vLW5ubCwsaqcmqGplZGKi4CAfHdxaWxydHBoaGVkZmFcXFpZWlxcXF1eXVxbXF5cW1xZW1taWFZXV1ZXWFdXVlVaYmJgYGFfX2BiaWk9My0yTn+Nk4yTjo+Wm5ick52dpaSipaaenJ6ln6qupZ+ho7anoaGiqbOipailsKaxrqu1n6GdlpWpoaKUrbGxn6Ojnp6YnJOMoJSRk5iYkpeYmJeep5unoqKapKWlq6SlsKelo6usraaprq+vq6iqqrOmpquvtLGuvLaxr6+fknt4c2ViXFtdWE5MUUhSYU1WUE9KTk9FQkQ/OT02OTo3NjQ1OTk7OTg4Nzs4OT0+Oz47PDY5Ojc7Njs3Ozs6ODU6Ozo7OzY8Ozg4NDc3NjMzMjEuLzI1NTY7Ojg7Nzg3Njw7Ojs7QTh4u7uxtr2wu7G3rJ6lpqy4u7zBxbqyubXEycnAwsbFx7bGxLPBv8Wrt7e9tr26u7WyrK2omZmfo4uKdImIfnZuY2FmaWhmZ2lmaWxgXVxbWlpaWlxdXFtcXl9cWllbWVlaW1dVWFdUVFZWUlRSVF9fXV5fXF1dYGFrWDQ/TXSEiomMkoyOkZ6VnZSZnaOgq6Sjo6KjoZupqqOZnaSxqaGgnaWqnqiin62sqqmuraKiopWYopqckKypsJyfop+fl5mTip2RjZKUlpCYmJOcoaOcpaGilaCipKWbo6uloqSqpKutpa6yqaalpqa1pqqorbO1tLm6r6qsnoxzcXBhW1dWVlJHUU9IWlxPUkpUS1NMRUdKQzg7Oz08OTY2Nzo5Ozo5NzY5Nzc6Ozo9PDw2Ozw4PjU5ODo4ODY1OTo7PDk3Pzw5Njc4NDUyMTIxLi4xNDI2Ojg2OTg1OTg5ODk7OUA5e7W0rLS7srCrsa2dqKevubmzwMi6tcCvxcjMusHJzMi1ybyxvsPJrbG4wbW8wLy0taqsppaanJyJgXKIg3t0aWlqbGdqbG1ramxlXVxcW1tcWlhaXVtbXmBgXFhYWllYV1hXVFVWVVRVVVJTTlBZXVtbXFxcXVxfY2hAUnGHe4WGhY+KjIyXlp6YmJ6lpqmmqqaopaKYpK2jlJikrqmgnJmboJ+umZyqs5+lpp+jo6GUlJuWlpKpqa2bnJ+hoJuUkIyYjYyRjZKNlpWQnaGgo52co5WboaOhmKKoo6Koq6CrsKSuuKWjpKOsraqoq6+0t7K9tbOrrpiFdXRpW1lZU1VSRlhMUVtYTVVPUExRUklPSUI9Pz9BPz03NTc5OTw8OTc3Ojc5Ojs8PT47Nzs7Oj02ODo7ODk3Njk4OTo2Oj05OTU3NzU3MTE0MS0rLzQzNDk4ODo6ODo6NzQ4PTg/OX6zraezt66oqK+um6morLe2rLzKu7a/rMzGxbjAzs/Hs8S7t7vCyLGtuL+3vL67s7amqaCWmJmXiHp0gHZ3bm1obW1tcGdnaWZkXVpbW1tbXFtZWltcXF5fX1xYWFlYV1hXVlVUU1VWVVVTU05PUVhZWVlcW1pbXV5lcXl2f3OAhYGJhI+LkpSdm5ecqKekrKqnr6OmmJ6rn5SUo6imnZeRj5qerpaYp6qYn52UpaCekpGSkZOVqKqlmpiZnp6WjoyLk4aJjYOPi5KVkaCeoaSZlp+VmqGinpSbpaWnqaigsLCmsb2nn6OstKqup6+0sLm1wLGusKuRfnJ0Y1ZUVU5SSkdWUFJSTExYTktMT1NHTktBQ0ZFQz5BNzU4ODk7OTo3Ojo3PD06O0A+Ojk7OTo/NzU5Ojk4NzY5NTg3Nzk7ODU1NzY2NjEzMjAtKi4xMDI4Nzc7OTk7ODk0ODs4QDh/tKymsbeqpaKxq52qp6mysKS2xrS5urPKxbm6wcvQyrG3uLy9wMOxsLG3rrS0u7O0o6OdnZiXlYSAdmtnbG5xbnFqb2tkZWdlXlpZWllaWlpaWlpaXFxdXFpYWFhZWVdYV1VVVFJTVVNWVFFNTk1SV1hZWFhXWltbYGp0bHJpe4J8hn+PhI+Ok5eVmqWYnailpKqdppeepJqRjp6impeXhoWSm6SPlaKclZaVh6Kam5OMjoqQmqWnm5WVl5yRk4iUjouBjI2AkIuSkpKhmqCilpSZmJWippqNmaSnqaehoLSyqLO4oZ2jtqyqrqSysqa1u7SrrLGiinpzbl5OUVFNT0ROTk5QS0ZOTkpKTk5RSE1KQUhMSUhDPjk1ODg4OTo7Njk6Njg7OTk+PDg6Pjk7Pzg3ODk6ODg2ODU3Njg4OTc0NTc3ODIwMzAxKyktLzEyODc2Ojk5OTk4NDk4OEE3d7anpLawpKekqqWgqaaks6qissS1tbKzxsW3usPKzMazrbq9tLjAr66psJ6mrruvraCam56VlYh8hG5fX2ZycHVxaW5pZWdoal9YWFhYWFlZWVpaWVtbXFxZWFhXWVlYVVZSU1JQUVRRU1VRTk1LS1NXV1ZXV1dWWl1haWRoY3Z8dn53iX6IhY+Nj5qdjJeaoqCimKSVoJqUjIaYmotzjYN+jpeWhpKakJOOjXuZj5yMgomAipigo56Qk5iWhY6ClH5+dIqOepCIk5CQnZuampKWkJ2Oo6OOiZqgoaSkm6K0r6ywrZ+YprimpbChsa6csLuqqa+pmYR4dGRWTVJQUE1DU05MUE1CUFFISU5TTklKSkVLTUdLSz03NDk4ODg7OzY5Ozc6PDk6Ojs3OT85PkA3OTo8ODk3NjQ0NDU4NzQzMTI0ODUvMDEwMikoLC0wMjc2NDc4OTo6NjY6ODdBN3i3oaO0qKalqKOlpaamprKnprTBuK+0sMnEuLnAzsa+s6y6waytxK2ooqaSnaa3raOgkZaXkpB+eH9mV1ZfZ2ZpZ2huY2lpZ2JcWFdYWFhZWVlZWVlaW1tbWVlZVldXV1NUUE5QTk9PUFNUUU1NSkdOU1NTVFRTVVlaXWhfY2BxeHFrSVNti32RgoiYk4iRjp6XnJWVlZONlYl/k4lfO1ZvfIyUioCMkoyPhoZyi4SWgXmBe4aUnZWDlo6Qj4OGfZN4cXCGjX2JgZCOkJeamZOLkIqdiJ+Yh4iWnpqhoJenrqmtqamelq2zoqWtma2smKezo6mto5N/dG5gW05TUldMRFRKUE1MRk5PSUVMUU1LUEpJTlBHSko9NzU5OTk5OTo3Ojs6Pj44Oj09Nzo/OD4/NTg5Ozc5Njc1MzMzNzYwLi0vMzQ0MTEwLy8oKSsrLTM4NTQ3Nzk8Ojc5Ozg2QTl5t6CiraGmpqqgpqmno6qwqKe0wrmwtbDHwrizvc+/ua+utcKnqsSqop2Yg5ScsaOamYeUkIuHfnN2XVBMUVVZWlddXmJnY19ZV1dXWFhYWVpZWFlYWVpaWllYWFZXV1VTUk5MS0hHYlxNTlFNS0hGSE5RUUxPUlRVWFlgZV5bbXVpSj07fJKNi3mEkImCh4qZjJWUiZGGhJSFeIh/YEpRbniLkoR+hIyLhH9/bX5/k3d1dniEjZpwUY2IioZ8fnmUdmd3hoh+ioiVi46Rk5eMhIqIlIWbjYKFkpuWnp2UpKKoqaWknpuwqqGkpJGmqpahqZyhpqeKd25mXlxIUVFTTUlVTVNJTEtPSUhGSk5MTVVLUVJQR0pEPTc2OTo4Ojs7ODo7OD4/OTk+PTg7PDY7OzQ3ODs2Nzc1MzQ0Njk2LzMvLjExNTIyMS8sJykrKiw0ODMzOTg5Ojk5Ojo6Oj85d7aboqedn6Guoaeopaeor6yqtby2uLezwbu2p7nIuLaoqLW2qrK8p56Vjn+JlKmWlYt/joSDfnhxb1hNS01NTkxNUVdbXFpYWlVVVlZWV1lZWFhZWFhZWVlaWFhWVldVU1BNSkVAQJtrc3NJTUtERENJTk9oWU5RU1NVWmt0ZGhxYF9VT4yDkIRweoJ9eYKKkYCRmYuPeoWOf3R/eHJudXB0jo6Ben6Kq4V6e2h2e45wcm14gYuNknh7gHuAd3NyknhodYWEhIV8lYqIio2LgH+Ei42AlIR8gY+YlJyWkZ+dqZ6goZ2gqaWfnZiNp6SSoJ+Wnp+kgXNpYl1dSldQUkhLWFJPSk1MUkpKSkxQSExRTVJVTUZJQjw3ODs5OT49Ojs8OThAPzo6Pjw3PT03OTkzNzc4NTY3NTI1MTQ3Mi8yLiwuLzIwMC8tKygoKS4xMjcyMTk4Nzo4Nzc1Ojw7N3aumaOhmJ2ftKmvqqWtq7Cxqr20sru4trq0sZ+3urKqnZ2sqaiyr6KakY2UgY6cjpF/d4Z4fHZwb2pZS0hJSEdFSEhQVFRUV1dTVVVVVVZXWFdYWFhYWFhYWVlXV1VWVVNQS0Y+OTNOPH6eTUhKREA9QURqlH5MTlFRU1ZecXpwa1xuhpGVjIx3Y3V9c3V8ho57gpiSf3CGjnt2em5rfq18dJCLf3qGkoB8f3RmdXyGbG9oc3yKjYeAbXpxfXFtdo9xaHGBfo5wRIuFgoOFf3d3eoyGfYx7dX2Oko+Yi5Kbm6OWmZ2bnZ6hnJaNi6Wbjp2XjpaYkHhvbmdjW1hYVVFKU1VUT1BOUFZLTktPT0tST0lPUExGRD07Nzk7Ojo/PTk8Ojk5Pz87ODs9Nzw5OTk5MjY2ODU2NjMzNjExMjI0LiwsLS4uLTAtKyonJyouMTM2Mi84NzY5NjY1Mjc5OTV5ppegnpagprCsrquoqbGvsau8uKu7vrizrKebsKesm4+WnKWppaGYmo6EknmJj4uLdnF8bXVxam1qWEtGR0VBQENESExMTVFRT1FTVFRUVVZWV1dYV1hZWVlZWVlWVlRTUUtENzhmNzA/qGlOSEM9OzpEioV6WUpOT1FUWF1kbWlif5+jvnxwdF93dGt4dYaOeHqKhG5ri5F4c3hpan+CcZaRjIF9lX9JkpluZ3d+gm1qZGx5hZCShmtzbHxucnyGaW1wf3ONiYWGe35/e3dwdHSGgnmBeXB8jouKk4OWlpiakJOWlpmXnZaMg4mfkouSjYaQl4Bwam9vb1lWWFRSUllPUlVUUlhVTU5ITUtNT0tDSU5HRkA6OTk7OTk6Pjw5PDs6Oj0+Ojg6PDk/ODY4NzI3NTY1NTQxNDMyLzAyNCorKiotListKigqKCcsLTEyNTAsNTU2NzQ4NUhBODk1d5mRm5ibn6Ssr6Ktqqi1r66stL+rvMO/pqKalaSYno2Ei5ShoZiZkZOLc456gIaMhnVvdGxxbWVra1lOREZDQDw+PkFGRkdLS0tMT1JSUlRUVFRWVldXWFlaWVlaV1ZUU1BMRTFAmjMganNDmW87PDk1PICChl9JTU9PUlZaUVhaWqCBXZVjbXRhemxqfHeIhnSAhYRza5iQc3J7aWqdjkx5hZOJhI1mMXaHcmt9fYN0ZmV1f4SEhYBmaWx1a3CAfGhxcXxuk42Pe3R+fXFxb3Vtg393eXVqeYiCiImDlpKSkIuNkZSUjpeNgHmIl4iHioaAkIh4bGtwaGVYUltYWVlbTlBVVllYTklIRUpKSEdCQEdFQ0c9OTk4Ozk6OTw6OTs6OjpAPDk6PDk4Pjc4NzcxNTIzNDUzMzY0NTAzMS4qKispLCwrKykoKycpLCwyMjYsLDQ3NzU0NzhpTzg7NW2SiJqQmZakqK2esZ6nuq+rsrDCsbvDx5qWjpWZi46FeoSQmJWNkIyQh3GHgnSHjIZ6cHNxb3BkcGdfVEZJQz48Ozk6P0BBRENFR0lLT1FRUVFSU1RVVlZYWlpZWFZVVFNQS0U4MC9cYLNHOVhQOzk0NDGWuotITE1PT1FVS0FJUUhgqq6cbHVyaHlpbn9+gn94goSEeHGfk3N3gHJ0k4c1cJ2onY2goYSihXZwhnuGfHSMro2JgWhnYmpucm1wg3Vpb1h1cI6bkXZtf3t9bnJucIB7c3ZuYnWDf4aAhZCQioqJkYuRi4uOg3V4io6AfoOAfY58c3JxbWBcXV5cWllhX1JOW1pYV0xISkZJSD9DQUJIP0NEPTs6Nz07Ojs7OTo5OTs6Pzw4OD06ODs2NjY1MDEyMTI1MzQ3NDUzMS4vLCwrKSopKSoqKikoKikrLzNETTIxNjY2NDM8dlI3PTdikYGSiJWRnaSnnq+VpbSprrCuwbK7wcWWj4yUj4CIfG6BkJKJg4qHj4Z1goRslYiIfHV4eG14bndkal5JUEc9Pzc0NDk7Ojs9PkBCRUhMTExMTlBRUlRVVldYWlhWVVRTUExFPDUqnUtbQC1nSTk0Lz+Sg6muX0dMTU5QTDdDTVFSQ0iAb3p3dnF6aXOEhXl7goF9inx0oJh5fYWAhJmEmpxhhqqenIuDkI56d4h+iYiOdIuXj4R7XWRxdHp8d4ptaGpieW+FkIJ6b4F4dYV6cHR6eGtuaV12hn2HfIeGjn+KkpeDjYWMhn1xhH+EfXZ3e3yJeHF0dWdoYFtcXlNcZ15XUVRYW1VHSkpES0c/RkBEQz5BQT07OTc8Ozs9PDo6OTk7Oz0+Nzk+OTk4NTY1NDI0NDAwNDY0NTU1NC0sKSsoJycnJigoKSkoKCsrKy8wMFVxPTIzMzMxRX5XND05XIx4in+TjJGcnZ6mkaCqoLGor8Cyu8S6lo6Rk4d6hnZrf4uRg32Kg46MeIOAc6CEin19gX9wgX56aHdrUlhMQEUyMTEzNzY2ODg6PD5BRUZGR0pLTU9RUlNUVVdWVlZUU1BNRkA6Mj0gI5ZjjFs1MzExaT9Hb0lGSUtNT1FLSlRbV1FJZH2DdoR1d255i4h3eoaEfZSFdp+Yh4aNkZSljKypSIatr66KgYCUi4KLgoSSqYiBmJiKnHRtfIGGh36OaGdoeX9uhYeChXGEhkhsgHdyeXZobWtfdn2DiH+HhYt5lJybiYuIkX96dYp2fHhtb3d+gXV1c21cXl5cY2RYZ2VcVVBQV1lQRExLRk9JQ0ZDQ0FAQ0E9OTc4Ojo6Ozs6ODg4Ojo/PjY7Pjc1ODU3NzMzNDQyMzY2NTY3Nzg7REZMTU1MQzcrIiUnKykrKywvMDArbnUyMjQyMEyBXDU9PF6EdHx9iYWHkI6Vl5KWoJ2soKa4r7O9s5eNkouYi310cH6Jkn59jIOSlH2Gfoakh4h/goiFeIeJfnOEeF9jV0tCNjAuLzIzMTIzNjY4Oj0+P0JFR0hKTU5RU1RVVFRWVVNRT0ZDPzgwLCOHWz8/ODQuXZZwc6NVRklLTE1PV2BYbVhaXGWGjYCPfIB9gY2PfIOGjn+Yk4CfoJeUmpmlrZKZu7Gnu8fDp4uMoaWOk4mBkXxxg56fkZ1/d4WFi5CHkGlocISBdIyHhIpyhoJ3iIB7doR8bXV1Zn+UjoaIiIeIh6CqopaJjpd/eoGIenlvZ2t4fnyAdWxlXltbXmpeYmdgWk9MTlhSUUhQSkROR0NKRENBRERCPDo4Nz08Ojw6ODg3Nzg6PT04PD02ODc1NjYyMzQ0NDU3Njg2NzxCQj88ODo+Q1FeZVxHMicmLCwtLS4xKD+LWy4zMTBPg180PztudXBmd4J6f4x/gZGOipqbpJ2hrKaqrrCXkZGEoZSEeHd/jJR8f5KGkpV/ioCSm46EgIGMioKJjYN/in9scGpdQkA0LS0vLy4uMDIyMzQ3Nzg7PT9CREhJTlFSVFJTU1RSUE9IREI8ODcvOUM+PDw2My5sk5dNUEhKTEtKTVZfYXxlZWpxlZSIlY6Ph4qLloWQjZuJnp6QoamkoqqTqLWhp8HCrceveLmUmnyNoZ6ZhJOFgo6hn5SZkYWKhY+akZZscHWKjIKVjI2Od4+EcW2FgYqWkYKFiHGIoJaGkYmNj5aktKibjJSig4eSg31/a2pqfIKDg3VjX2VgW2hsXmxsXldLSE5SUU5MTEZJUENETkZCQ0VGQz06OTY9PDo7Ojk4Nzc2Nzs6Nj06Nzg1NDU2MzQ0NTY2NjY4NTU2MzEwLiosLCkoKS46UGFcQCwoLSsrMCwncog3MjQwT4RiM0A8dW5nWW+Cb3WGcXaShn6XlpqUnp6cp6CplpOYnmdlpJp+hJKReYCSiJGSfYqEmJKQg4CAi4yJhpCHhImFeHh+Z01SPi8uLiwvLi0vMDAwMjEyNDY3Oz9DRU5PUlRQUFFTUU5QSUVEPjs8OkRGPz48NzUyPD9SNUhISExLTU5SXmyHenF+eZiWlaKgnZadk5+SmpymnKapnaerqKm0lqu+q7bHyLfI0M++m6Bwaaupn4STkoWcoJqbmaaSkYiVo5ubeHp+lJiTopKXl4GUnnt3lZKqsoiMl598lJ2bjZGVmKOhpbWvnJCYp4eWj42AiGxzc32BfnNqYV5iYGJoZGBoZ1xSRUpLUE9JSUxGRk1DSExGRkNCR0RBOjg1PDw4OTk5NzU2NTg+NzU9ODQ3NDU3NTQ1MzY5NTg6NjE2ODYzLzAuLSosLy4tJyMqO1hiQigqLDEtKEuXXjA2M1GFZjJBQGlhXlBwdGBtfWF3jn17lI6Oip+Sl56Wm6qYnqpCRH2HiYeYjXiCjYuOjXyKho+QjoGCgImLioWShYOGiYGAh3deYlA0NjAtMi8sLjAvLi8uLjAwMTU+QUFNUVJTUVJTVVJOU0xFRUA8Pj1GR0BBQDg2NjI8OTtGSEdJSU1PUVlsg411kIacoKOvubSgqqmqpaayqa60sLCsurCyvZuyw6u6ycu4w7+3paKws6ytqqOLlpiEpaago5eBppmNoqqopYiFlKShoKuhpKiPnLGLlaOmt7qboKKvkqKcoZ2Po6GrrquytKGUpKmImYiSiZV5en6GgWliaV1mY19lZF5nZ19bT0NJSFNORkhMRkpHRkZIQUtGQ0ZGQTs4Nz08ODg6OTc0NjU4PDU0PDc2OjQ0NjQ0NzM5PDM4PDIwMjU1MS8xLi0qKi8sLSooKiYlNVhYLywwLCwwhIE4NzFQhWg1QUNbWFRMaGJXaW5YeoR2gZOFiIKbg5KRjJLayJ2Wc1aXiI+InI98hoyOiop6h4KHkY6DhIGLhYaIkoaChYmHiIeHcW5hQEU2NDwzLzExMC0sKy0wLi00P0NBTVVQUlNVVVZVTltQR0dEPD4+RkhDRUE3Ozw1Qzs9RktJRkhRTlBXgJCdgqqfraWsvMTAp7DDtaqxvrG2vLS9s8C1u7qiuMWotcnHtb24tKijtK2wsZuZkpqfiKevq6WUdp+kl6GssrSZlqquqK62u7K6rLC1orGssbW7trSutJ+mp6GmmqmvrLG4t7immrWojKSOkJKfhniChXhbY2VXZ2NiZGFhZ2BbVEpERExVUUhJSkRJR0VBQEBLREJNRzw4Njc7PDk3Ojk4NjU1NTcxMTw4ODk1NDY2NDk3Pj0zODkxLjAxMjExMzAsKiwuLCsrKyooJyopRVowMCovK2iSTzYwUodqNkFGV1FKTFtZUWJiV3l1cYGUfYSGk3WFf4CMe7+7o7yCtJSTjZuPhIiPkomJeYaAjJOMh4SBjn+BiY+Gf4aIhoqHkHp4bl1XQEVOPDY6NDVBQjc2NC8vNkNIQlFbT1FVV1VcV1BfVUlLSkE/PkdLRkVEOz5AN0Q3P0JKSkVGVlNQXo2hqqGusL2ws7zJxrS5w7yysr+1tsCzvq+2dLCzpbrEpK/GubCzsbOnpLW2qrGgopebopKlsK6mraunpJihrbS7oqiyurW8v8y/xcW9vbPBt7q3vra6t7msq7Ckr6mtvbC8usHBq5i5p5StjpeXqYh+g35tWGRiWWxma2ZYXGNZVlNJR0ZMUUdDSElBSEQ+P0JCTEBATUQ5OTY2OTo/Njo5OTY2MjQ2LzE5NTk5MzY0NjI3Oz0/NjoxLi81ODo5NjUwKigsLS0tLCwqKCgrKyhFUy8qMDBKj2s1MlCHbTY/RlJMQUxRVlNZVVp2anB+joOAjoRuenN4h2K5oZmjiZSUlpKUk42PlpGHhnuGgY2VioCEgYp6fIqHhnyKgoGLg5V9d3p1ZVBcZEdFTDtRY2FbXlNGPztIUEVaY1FSWVhaZ1lUYF9MU1BFQT9JSkhFRUFARDxFNkI+SEdKTFNaVF2SrLSyuLXFu7a6x8u5usC7trS6uba9s7mxxWB0saSxmp6qvamlqKuqo6KytaCrqJ+Vlp+ZoK6lp6aln6SUo6extKiys722wb7TycnTxsPFzMLKw8C+vb67vLe0r7i3tsO5xb3Cx6+euKmhq42kp7WIgYF0YWNjX1ljYGpnU1hgVlJVSUVFTktBPkdEPUtBPUJAPUY+O0hANzk2Mzc5PjQ4OTo1NzA0NS8yNjM4OTM3NDQyNj84QD5HS1JUU1FQT1FRUEpBOS8sLCwqKygoKy0sL1A+KC40OIB9PDJLiHE5PkNLRUBJTVBSS1FdZ2xrcI+NhY9zbHJyc4fVwLWZoI2VmJmRjpeRlpaOhod9hoOMlop+g3+CeHuLg4d7i3mBioKXfnR9emtmcHVZXlxQZWRiYGVkXVtYV1xNZG1VUm1tX25fWGdkVFlVSkRCS0tJRkhISEhCSTpEP0hLU1RVXFpbkra+tru0w7y4t8jJubW5tbe4sra0s661tZhkdaecrXBeoqycmKCim6SeqqWUn5+Qk46WmZion6agnpqZg6SeraWqsK24sL251NHP19DKzNLMz87Kxr++wsm9wbzBwMTExcq+x82yo7qwtK6aq7e7mIB8bV9iXlpfY1pkY1FbYFNQS0NBRUZFPEBGPkFIQkBDPTpFPj1KPzQ3NTM1Oz00Njg5NzcwMjIvMjQxNjk3NzU1NTVEM0VMTT41MS8wMDY6NDc3QElPSTstJioqKC0uLyxATSsvNTRtiUkwSIl0Pz5CREBDREZLT0RRW1loX2+WkpCUbmxvdHWHtKyhoZ+LmZyZjI2VkZqRhYqKfoiGjJCLiHyBg3N7ioOFe4l0goqGlX9ze3lsbXV7aHJlaWxpZ2pqaWBmaWlsWm1zlq2kvIiGZ1tvZ11aWlRIS05QSktQS1NRSUxBSkZKT19eYWZpYZe1xa+3sbm7s7DDxbSvuLCwu6uysKaqt6uMtaedmqeaTZmdjI6flpGmmKWVipOTiZCJj5GRnZuhl5qVl4efmqebrK+osKi0tNTU1NbTzNDT1c3Sz8zFwsnQvsnJysnRx8zNws/Rt6/DvMO5pLW5waKEcWVeX19aYllaZ1pRXVhPUEJCSEVCSDtBQz5BRz8/QTc7RD5ASD00NjY1NTs6Njg3NjU0LzEwMTQ2Mjc4ODc1MzY3QzVCOD8tMC0xMzQ5PTk3LC4sMTtGSz0pLCguMDAwN0s/LTQ2VIhXMESHd0M7Qj5FQkFDSk0/VVlSZVZzkJCYgmdxb3l5g6GqnqaXjJqbl4uNlZGajn2Ji4SNioqKkId8hIJwf4eBhnuHcoOSi459cXh1bHF4fnF6bXhzbWmBcG1jaW1weGl3fH7Lv8Hfp21jeG5jW2JgSlBSVU5ZXk9dXE5QTlRQVFRcbm12gnGWrbersqWvtKmru7+wqrSmpLimq66gq7SjjrCtmpeYjI+SkYSOm4GNppGciYOLhIqJhIuElJWYl5SbkZyXmZqfn6uspaiirK3P0tXSzszT1NTP1NHOx8PU0cfN0tPT18zR0cTS1sXBzsfHwqi9t86efHFoYGVfWGJTX1tQUVRRT0g+QEZBQkU8QEE+RUQ+Pz86PT08PEpBNDU0NjU8ODg4NjY0NDEyLzAzNTI2NzY4NTMzOz08RT1AMTErLzI0OT41OTAxMDIyLTJETjMpLzMuMzI9TjIzOEN9XzJBhnREOj09ST5AQ0ZIPFVRTU5adYaFindsd3B9fn+hnp6hjIyYk5OLjJKPlYV5hY+QjYqKiJCGfoJ7cn6AgId6hHWFk5CIf292cmtzfXt3e3OCeHJrgHNyaW9xenlxer7Lmn6MsoR2coR2aGFrXUNaWltWZWNYZGpTWFxdYGNdY3d6fYuBmKmjpKCeoKelqq+4qqWzoqGtoaOtoaexn4immpOSkYmQjoiBk4lqlKKMmYSBhn6Rg4OTl62LlY2VmY6GkpGel6iwoqGhpaSpyc3PyMLM0dTS1NLO083G1tLM1NjW1tjU19XJ1NrNydfX0cqsw8LLjXVxZWJhWlZaVVxRS0dKSkpAOzo7REFEPEJDPkdCPkJCOzw5PDpHQjQ2NTQ0PDU2ODc1NDMyNTAvMjU0Njc0NTU0NDw+PUU/QTYyLy0xNjs9MDgxLzI1NC8tLTtSMDE3LzUzMkZEMjg+bmI1PYF0TTk5QEk8QUQ/QTtPTEZKWHCAdX1oc3hygomAnZWdlIWLlYmOiYiNho5/eIOTmIqMh4iLiH6Cd3N7fYKHd396hpGVf4Nud3BtdX91eH10hXx5bId2dG59doR0eHudtYw7QYvFpX6MfGllV0lDZmNlY2dqY213W15maGtuaG6AgoeRi5ydoJyQl5ieo6OlsaOksp+hpZ2gqKCjsZyFnpKRkY+KjIqGg4+Ef5ybjI2ChIV5lH+CqZWjjJGJl5KLfpiLm5Krs5ibnKicp77Dxrm2xs7S0dLQzNLLyNTO0NXa19fY1NnYzdjbzsnZ2tHVvsrLtXp5cGdfXFRXUl1XRkdKSUVFPTo3OkBAQjpGRD9EQ0FEQjs/Ozs3REM3NTY1NTswNjc5NDQzMzQxMDE0NTU4NzQ0NDQ5QD5EQkM8MzMuNkZUV09RSkFKRj8xKiguQlMzOTI1NC83Szc1PGBiQTxzdlY4N0FIOj9DPjw5UUVDSlRrbm5wYnBxdIaNfJeRnYt+h5KDiYaEiYGHfHiFl5aIjoOHhYd6hHhxenuDhXV5hY6NnHmLcHxvb3p/cXuAcYOHgW6OenV3fXyCdH58hoevc1ipwraNkYJwbWI9XmhycHFwbnh2gWVob3J1eHF6i4aNk5GalZ+Vh4uTm6CanameoayboZqYnqWen6uZi5qLkJGNhHyHh4OFi46fmZOIhId+bJl6hJiGiJOMjZSMhnyciZSQrqqUlpifmaevtr2prb7HzMnJzMvQycPSytTX2dfY19Xb19PZ29XQ2trR1sjUy5Z8fWtqXVxRVVRhSUNGSUg+QT49Nzo9Pzs9Rz0/QUFBREE+Pjo4N0RCNzU1NDc5LjU1NjQzNTUzMjMyMzY0NzU1MzQ1OEVCRENFQjU2PEZOU01bbmZjbnNrYVY+LDRMRzg2NTQzNEJGND1XX2hMdXheODs/Rjw8Qjw5OUQ+Q0dSal5tZGJma3aAiHGRkJqAeoCNfoKCgYN+g3t8hJiNh4t+hYaAd4J5bnt7hoF0eZKejqB2jnWCc3WBfXOAhG+BkIJvkoR1fIGFenaGe4m3xaTBybiBlpuPd3BlTmZjgXqBd4aikIp4eXZ7g397hHZtk5aUlI6XkIOJj5aZlpWlnJeflZ6TkZeinZmrlZCQioyRgoyEiIiBhY+RnZuZiYaMgYWYeoiJn5eQiI2Ki4J9oYmRjLyhmJOYmZ2ppqaun6i2v8DBucfKzs7FzcnR1tXV2dXX29TX2drb19va2djO28aIfXxpa2dhVllXV05MRU5DOz09PDg6Oz05PUA2PT9APD89PDk4NjdDQTY0NTU9ODA2NjU1NDc3NDU2MTM4NTQ1NjQ1NTdISD1ESkU3OTI1O0g+Ozo6N0lQXVtTVVhLOVQ+Ozk1MzI3STg9TllNSHh4ZDU9PkM9PUA6Njo+PkBFUV9YZWFdW2h0enlsio2Sd3Z6int+gH5/fIR6foKRiYSFeoSHe3V9dG18fYZ+c36SnpGeg5F7hn54j354iopugpqAdJmGfoGJhHt+kHqPqY6Pw6G9i5yknX2JhH2JcouKfnOmmpyYk4V7jpCIhGhHcaCknYyLkJKFiIqQkpONnJmSk5CWjYuVn5yUoJSRjY2Pi36Pjo2Kg4iSlpqenoiMlZKdkYGLf6WZiISNgoWEgaWGioy4mJ2RlZaiqKGenp2kr7e6tazAxsrQyMfMz9PT0tjT1dfA19jZ29ja2tnZ19u4e3x6bmtoWWJdVFBPSURMQjw8Pjk5Ojo5OTs9Nj8+Pjw9OTo7OzM3REA4Mzc4PjcwNjg4MzU3PDM3ODA0OTc2NzU1NTQ2RlA1RE5JODkzOEFLPTszQ0BJPDpEV048TVRITj85NjMzMz5DO1tYPjVZeXBaPDxBPD0+ODY4OT89Q1FTUlheVVhmbW1taYGOinFyeYp7en98f3uHenx7i4aCfXSDhXlzenNtgH6EfneFm6KbnZSSf4yIf5iHgJuSboiohXqhi3yRjYOIhJx9mpCKjKOioJCkr5+LkIuFi4GThldyrYufq5uPg5ibj4+OXIKikYKMn5OUjIaIi5KSi5OTk46Lj4qHlpqcj5SWkIqRk4aAi4iRjIqJnJaYoqKGk52WoIqJiI2bkIOIjn+Dh4akhYyRs5idkpSXoaGempKcnqiyuK2mvcLHzcjGz83QzM/X0dHVrtbV2NrY2trX1dnZoHKAd2poX19aVVlZQ0FJQz8+Pjo0OTo7Nzo7OjM7Oz89Pjc7OToxOkc9OjM3PUA1MDY3NzI1NT82NTs1NTg1ODo1NzczNUhSN0dPSzk5ND1FSkI+MUZDTEI6ODpHWEA1SFdJNjYyMjM6RUNlWD8mX3lpX3o+Pjk8Ozk4OjtAO0JRS0tTWVBUY2J6bWF+koNvbXeLeHl/eoF8hnx7d4aEf3NwhYJ6dXd2dISChH5/kqakn6Wil4qdkJSXi4qol3OKso2EqJKEmZOFmYyilZ+YkoibnqOSqbCfkJSQjY6IloxujbeFmsTIspuhpZucmJaQspFkpM3IlY6Gh4iPkoyMkpOJhYqJhZaZmo+PlJOGlJeDf4+LmYeNkKqXlqKiiJmelpqIjoaXl4mEjoyBf4ePpIiOk6ial5OXmaGZn5mTnZujs7Smo7zBvsfFxcnIycLL083N1KnS0dbW1tja1NLazoV1g2tmYGBfUUtWXEJCR0M7QT04Mzc7PDo4PTY0OTo8OjgyPzk5MjpJOj42N0JDMzI6OTYyNjQ+PTQ7PjY5NDk7NTc5NDRKUTxKUUs5QTdCR0lANjRKRUxGPjw4OEVUQTc+XDg2MjE0OjtFYFhBRmF0aExjWj41Ozo6NTs6PTpFTUZIUldTUkJlg0d1go58fG1+iHh6fnqBgYJ+dnaAgntsbot+eXx3eHyEhot+i6O0qKSrs6GWp6ClpJaVr6KDkLiVkrOajaGgjKSbr6KknZiQp5epma2wpJeUlZSQi5ialqDAjqPJuKuaoqWtmZGbnLKdhoWoopyYhYiIjZSLi5OPh4CGh4iSmJSMipOThpSYhoSRkJxzkJiylZajoYicmZOPipCKlpqJipaNhn2MmJ+KkJCcmpmTmZiglKGdlZ+bobGto6S3vrPFx8S9w8O/xs7KydKnz8zT0dDW2NLP2Lx1fXlgYldiWFJJS09FQkNENT47NzY6Pzs8Nz00MjY2OTc3ND01OzU8TDw+OzxCQTc1PDs0Mjc3P0A2Pz83ODQ5ODc7PDU1T01EUFJMOEA9RUFHQTU6SUVORUQ6NkFAQlM+OURPMzIzNTc1PXZcPFJcdGlaTV1TPD04OTU2Nz06SkZER01cXFlKaGE7SISLenpthYZ5fIR4gIWBfXB4fH18b3ONen2Be3iGi4mGhJKovK2ps72wpa6zs6mjorCtipq1naO5pZWtpJeprbempKOfmamYqqSvsaqamZyUlZGYoJeau7utyqFptreqsJWYnqKrkpe9pF6qsoKJiYyUhpB8jo59g4aOj5SUiIeSlouPlY2LjJeYkZuZtJaVqp2LnJSSjZCSi5iaipKdj4uKlp+ijZWNl5mdk5yYnpShoJScnaauqKKks7irwsjEtrq9vMXIyMLQocbJzc3E19bQytOjc31sX1xVYVNRSEQ+PENBQTg/ODc0PkY8PDY8MzUzNTU0NTRCMzk6Qk06QTtBSEI7OkA8NzQ2PEI5P0BCODc0Ojo2Pjw0N1RLQ1VRSjc8OklBREA0QUpITkJBPzZEQTxKTkQvVD0yNTQ6RUpcWEpaUW1ncHBEaWBLSTY3NTc6PkpAQ0lQZkhhYGJwSkCLiX+AcoaHfIGJdYKKg35tfXx8fnB3h3eNgYd7jZCMhoyaq8LAsL3GvLO0wby0rKuztoyosq2tvaubu6Oorbm4q6amoqKko6qvsrGqnZykmJuYmJ6ipqWTo7mvqL+8rK2yuaWjp32IhpytvbCCi4uKkIOPg5GOeoGHkI2OnIiIj5eNipSXlJCalpunmrGakaudjpqPko6VkI+Vlo6QoJCIlZykrJSWj5ScnpSgnZuYn6CVm5+op6SipLCzpsDGw7Cwu7bFxcO/zafHw8fDvNXQzMTKinZ1ZF9dYl1PTENMQEVHPkE/Qjw6ND5BPT01PTY+MzMzMjQxQTE3QEJOPkdAQ05DQT1DPTs4NkNCNUJJQjo4Nzg7NUI+NzlWS0RXT0Y4PTRLQEM+NEVKSE4+QUE2QkI/QlNFNThQMTQ1Ozw4O0Q+OUxqal07V1JkS2daVU83OUdFP0NGXGhGX2lnW11ck4yMiHuHi4aDjHWGkIqBbn57gX5xfoF6lHqSlJSYkZOVqLTHycDCzMLDuce8uq+rubuXsra6ssCvpcCjq7C8vKquq6Ojnqesr7WxqZugqpyinJafsLSnjKO6urXBu6uonLKkpKiUhI6pxMSkgouOh4iEhpWUjHqDjJGOkaGMjJSRjoeXoJiTmZWWpaCunYyqnI6Wj5KRlZWNkJSRjqGThpefoLKflJuUoKGZpJ+aoJuglJmfp6Smp6SvraW/w8KuqLe1ycO+ts6yxL7Du7PRycfBtXd7b15bX21UTklETUtLSkBBPUJEPDVBRDs6Mz04QjMzMjI2M0ExNUlFTT5JQEhSQEg+Q0A7Pj1GQTVBVUA7OTk4PDdFPjg+VkpDV09HOD80TEBCOzVKS0NMP0I/PEJGPUFITDkrRzwzNjc0NjRBPzdPYU9hRS89PjZrbGpgQDpIPj9FQmdcTWVcZlRjapqNloqLiJKPhol5hpOQgXKAe4x/d4eCgY95jaGWqJqamLu+ycjKwtLJysLNvcGzrby/p7q/vbzEuK3BqayzvL2qsKqkpaOsrrSutrWgn66fpqKZo7S9qZyovMGjtravq5OwrKqsloaaqqelkYKMkqSViYB1iZF5hY2RkJ6fko+Ui4+Lk6OZl5uUk6GeqZ+RpZqMj4+QlZaIfI6VkpGimpWgopy1ppCgl6Wko6WfnqaYnpWXnKWjqKiisq2ou8DEr6Wzt8zAuq7Ds7u9wbmtwsLCv5lwe2NbWV9eTE1OS0dEQ0hCQUFESzo0REg6OzQ8N0YuMTIzNTJBMjZTSE48SkJKUUVLQ0RFOkVMQjw3RVY9Oz04OT88ST86RVVJQVdRRjdBOks6Qjc5Sk1CSUBDPjxERzxCQ089MjBIMzY2MTcwPUI6PWpqSks1UVMzU3BwZE47RD1ARj5sSV9YYVpkZViej52Ol46ekomKf4ifkoR4hX+Ufn+QiImQgJahmq6no5jDvsnEyMbTzc7Ny7zCt7C6vbS9y7vDwba3vK20wLm8rq+ooamotq6uqbK3mp6soqiinau3t6qlr77Esb25s6eqtLOtrZaVpa2ooJGOkrHFp5WNfZGVfYeRmI+qmZeTk4+TlJKlnZOdmZOgoaGcmJ+Yi4yPkJ6IWo+Wl5KWpJlmmaOes6WWopasraynnJ+ml5iWmJWho6imn7Wrqbq7w7SmtLXLwbiqtqyzu7iuqLi6vLeEb3BcWlZXUEdMVE5LP0FIRERIRkY4NUZNOz43PkFLLjMyMDI1QjU1UFdOPExGS1JMT0dHST5JUT86OElTOzs/Nzk+RExCQEhTS0BXUEY6QT9HNkE3O0hNQ0U7Qz00RkU6QkFCRzkvOkEzNjAzPkdEOTQ9dGRNRztFKzpmfGhWPD5AQkZCc0ZpSVJmZE1GppSclqGXqJaMkIOHpZKIgYeCm4ODlZCQlI6aop+vvq6hx77GxcjHzs7P0sq+u7axu7u8v8+1xL23ubezsrazuLOsp5yrrLmrqaivr5ejrqWopKW1wbCrrbS+wrnAubOnuLS3sq+VpK2wr6WLk5SgjXPBmX2XmYSOlpqLsZWamZWSkpmYpaOVn5qVmaicm6GgmYqMj5adYEqWnJqUmaSXVJawn6+cn6WVr6+tppuhppSTmZiOnZ+moZm0qaqzvLy7q7Cyx8C4pqyrrbGxo6GysrSlc3FnXlxQUk1GUVFQUTtIS0hGR0FDPTlLVD9BOj1FTS83NTM0OkI0NE5XTjxKS09VTlFKUEhISk9CPD5NUjs+PTg6PENSPkRIUklCV05JQENBRjM+NThKS0NBPUM7NUVBOkE/PkhANSpCNTIsPmNdZzozNXRkZUBSNyYjM31oWDw6QkNAPVJFV1N0YlZGSKuXmZ+hqK6YkJeHiqeWjYiShZ+HhJ2Xjp6gmqOktcm0qce8w8TJy8nIzM7Gvrqzr7q4wMHNtci6wbm1urKvr7O0p6Scq7S1q6qnrayZpK6mpamsur+oq7e3vsHAvreyssOwt72so660rbqmiJuXpZp1vp+EmJ2Okpiai66WoZybl5SanqCpnqegmJmpmaGnnZeQjZGdg211k6KalZyin5CusqKrlamqmKqvpqWhpaqSkpmciZWcop6WsKepqrq3vrOyrr65tqCjp6ilppycrampjWZoY2BTTU1HSU9KVUw9TEVNSUpAQ0Q8UVU8QUFCRE8xOD03Nz9CNzVVWE4/SE5RWFJQUVRKUUpKRUFFTVE/Pz04PTtHUjxFRFFCR1lNS0FIREU6OjM5S0lCPkNDOjlDPjxAPjs7RzctMj4tMYJoTnpcLzBraGA8PUJCODZ6Zlc8Oj0uLlNhTVZIfmVeSEaslJyhn7uumJSei5Oqm5GRk4iqjYeinoyjrJSjpLbHvbTCu8PCyMnFws7Iwr25sq+5tcDDyrbGssG8tbusqa2ssKOjmaq1u6aqp6yqnaivqKSrq768qK28tLe+xry2tbjAsL2/s6m1t6y/pY+il5Chn7yeiZqgmZednY+3nqicpaOam6Cap6WyoZqdpZynqZ2YlI+Um4uWiYykoZScop+gtbClppSxq5qrrZ+fpaSqkpaVoISQnp+clqmloaG0tLq2rai1srKenKOlmpeVmaqhnnhjX2FfTElGSE5RSU5FRkZCUUpIQERHQVZTREg8QUdRMTtCNzpCRjc5XVlLQUxQVFVTTVdSTlVKREBKSk5POUM/NT08TlFDPz9QP0VaTUpBS0RHQDUzPUlHPz1FQTk3QTs8QDw8M0A8Lyc7KkiRQjpTSjAsW29XNzE8Kh1CgGRUNDktMTpoXUZEQ5xwYkdFqJeknp/DrJuXpJeZqJuVmpqOqpaVqKaVrayZoqu3xcK8v7fBwsDIxL/Nxru+ubKwubS+w8i1wLC8trq3p6Srq62hoZurq8Sipaispp6rr6yiqqi+uKatvrC3t8a3tLi4vrG+wLa0srWwvqOWo5WTmpOtn5ChoaSio56QvqSonairnJygm6afvaKYpJ6iqaugnZWNlZ6TnoeOhI2TnqSgnbaspp2Xs6easKignKufoo2alZ+EjqGanJKlpJqYq7G1saqlqq2snJigoJKPkJapn5RpZVxiXlBKSEtPTEhFRElAPU9IQDtGSUhbUlBLPUhOVTRCRjg+SEc1Q2JbS0NOUlVXVlFYVFJVSEA4UVFQTTpHQDRDSFFTSUM7Qz5HVktDQE8+SzwwNjtHRj47RkE1Nj85Oj85OzE1RDAtLTBNdlw0S1o1LE1uVzwtPSkeI3piUTVDS1E5b1JGPEt4ZmNYTqKbo5uexaugnqudnK2fkaKelqSfpqqrl7axo6mztsXCvcC2wMK8ycK/ysi2uLW0sbS0t8LGt7+xubW6tqCnrKusnp+gpaTBpaGqraCkqa2woqeovbWlsbu3trXDsrK3ur6yw8C4uK20tbWjnaSUkZOgrZ+YoZ2oqKqimsKsqJ2rrZqanZimoL2hnaSYq6uspqGZjZqfkp6Ijlh/lp+moaC5qqeUmbejn7OioZywmKGPmpWego+gl5eOoqOVkKWus6upoqKlpJWVnJiLj5KTpJ+JY2dcZWFNSktLT0ZFQUdLPj1JQTk5SkpOXVFRST1MVl05Rkk9RE1JOEhjXEtDTFBTWVlWV09aXklBPVdRSUs/SEA1SE1YU0hBOkBBRFBIPz5RPks3MDk5RkU7OEc/LjY+Nzg+NzcvMT85MSUxUVVtW0pPMTA9Z1dEMTc9LSt3YVM2U1prV3NIRTY9dWVcTFCeoKCYnsOnpKKzoJyyp5Kqo5+jnq2prJ27samstbHIw8HDs8LDvsfEvcTKvbCxtq6xtbDAxbW6sbG6tq2aqbCpqpufpqGnwq2crbGcqqKusaqkqL23pra7va+3w62zs8K/ssazurertbauqqKmlZWUoquhn5+Zp6uvr6+7saWfqamZmJeToqS4oKGjkq6vq6SlnpGhnpSdjpCNlJ2ao5+otaenjZm1nKOvm6CcsJGhlZiVm4CSopaQjp+gk4umrLClp6KdoJ6SkpqThYuSjZyfgGRoXWhmS0pMS1NBQ0BJRzs7Rj44OU5NVV9SU0o+T15ePUhQQk1MSThOZF1MRUxSVFlbU1VPXGJIQT9aUUFIQUtCN0ZFTEtOPjtCSEROQj07TkBBMy85N0NCOTdGOys2PDQ2PDM1LS80QDErJ1Z0U2VPPzEwNGJbTTIzPjA8d11eP1tVX2dyQDg8SJZ3ZUE0n6SemqDCp6OpsaCjtKmVsaumoqSyrK2pu7KtsLW0xr/ExLa/xL7KxbbAycK1rLWpsLmswMS0uK+ttrqlmauyrKqYoaeYrbu0nKiwm62frrWyp6q7s6e5s7iyuMCqt7LDvbTFp76urbe1qaesoZaWkaWkoaGXl6Sut62xtLafnqikmZOUk6Ogt6OkpZWusbGlqaWhnpuZmpWYqKCfmaKer7Oipo2Yr5qlrJibn6eTnpCVmZqGl6CVjZCdnpSLqamqoqehmp6WjY+ZkIKGlYmVn3plal1sa05RTk5UPUNBTkM7Okk/NzdRTl1fUlZRQldgXUJKU0hWS0g6VGRdTkZPTltXW1JQUVhdR0FCW1BCRz5OQzlIR0hOUD8/Q0lCTEI8MklBOTQxNzdCPjs3RTcrNjkxNDgwMi0vLjw2LSNCcWdzazIzLzFcY1ozMzkwNnBbYkgwNUpxalZDV0aMeWZDO6SknKClv6aorq6gqbWqnbevq6OqtLawsLi3sLe4t8S9w8e9vMPCx8G6wcbBuqq2pa27rcHDuLiqrbK8o5Wtsa2yl6aokaq5qqGnsJ2roK+0s6qqt7Wsu6yzsrm3rLiwwbq9v6bDqrC2rqmrq6admJiqoaGgkZegsK+zq7C4mZupn5mWkpemoLeppaKir7Gzq7Gnq6CcoJ+bnqWdoZido7SwnJ+RlKaaoamclqSimJqMlpmUlpeelImSm5mUjqmpp6CjnJmbk4ePmYt+jZeGj5tsaW1ibm5YUVFaVEFDRFVAOztIQDc6WFBkXlFXV0VZX15OTFNPX0xKPlpkXk5JUU5bVVlQS1NXWkk/RFhQREY+Tj89SUdHUVBCPUNGQk0/OjJEPzc3NTQ3Pz05NUU0Kzc1LzI1MS4tLiwxPionKz1ccD0+MS4xZVtkQDE3NDdnWWFGKEA4bX1oXFY6iXtjQz2on5yhqbygqq+qo7G3qaW0squhrbW9r7O4vLu9t7bAwr/JxLnEw8DAucW9wbivtqirt7K8v7+0qq+yuJ+XrK2orpipqY6nu5+lrbOeq6KxsLOsqraztbytsLG1rLC1ssC6xbarvK+xt6ytqqOxpZ6lqJ6jlo+Yn7Kqs6mqspmdp5ualIygpqS0rqehrKytsaezq7Gpo5ueqKSelaGanKi2qZiakpKfmZ+hoJKtoZuaiJeZjJ2anpSLj5eXmpenpaOgnpeWlpSAkJWEe4+ThI2XZ21yaHFzYEdZZlZEQ01YRFo5SEI1Pl1RaFxPWl1HW15eT01TWGRKS0NcY2BQTE1OWFdYUEpWVldMPUVVSkVEQU0/QUZISFFQQTtGREZLPTg3Qj02ODcxOT48NjVEMCs4MC8wNS8qLC8tKj0sKyUyKyo1SzEuJ19fYVYxNTE9YFZfOClDM1lVXGdLNYx6ZkxApZmfpKu2o6yopa6ttamvs7mmp7C3xrext7/Cwra1usW+zMW5w8G6wLrFuMG6s7Ssqrq4u7q+tauvsbeZmKirq6ycrquPq76eq6+xo6qfsa2zrq61sbm3qq2usae1sLO6vMmyqrW1sbSwrqags6CaqKygpZWWmpmxoq2gpa+WoaSamZKNoqWnsqmhprGsqrWlrrC0r6OZna2nm5eem5qsuKKYk5GPmJyhmZiVrqGfl4OWm46enJqXkYuUk56ZpaOjoZmXk5KWe4yRhXuNi4OMk2xueW92fWJGYGpaSUhaWz17SkdFNkFiVWlbTVxhS1xcWlJTU2JhTEtFYGFgUE1JUFdWVU9HV1ZVTjpJVklIP0NLP0VESEhRTkE/SEhIRTw3PT46NzU2MDk/ODY2QiwtOCwvMDQsKCwvLSo3NikoOS4kOks1LiJUYFZhLjUoQ15RXC4rQS9KR1BbRzNjWVRMRZqWn7CosamspKOurbWot7O3o6y0t8m7tbu7wL61tLfDwMzHu8S9t7+/wbjAvbK9rqi6ubi3wresrrK6lpenr6yopLKplK+7pKyysqano7K0sbKxtbC3s6muq7KmuK+1s8TFtqm1tauwrqmnoraen6awoKOUm5mUsJ6nm5+pjaminpuVl6WlpLenorCzq6ewp62vtKykmaGsqJycnZ2VqrmclY+PjJido5iRmKikoZmGlZiRnZyYl5aIl4+Xm6idpaGSlpKQlneEkYZ8hoKEjY1ucXh2fIBdTGVsXEpPZF0/YntHSThHZ1dmW01eYk1ZWVdVWFVpXU9QSGFeX1BKSFFWVVJLSFdVVk04TVpORUBGSz9IQkNLU00/P0xPSEA7Oj47NjswNDE8PTQ1OD8pMDcpMS4yKSksLC0rLTkkMDQyJTlCNy4jQU5IZzI3J0ZhTFYlLUIuPUVMUTwzcmtMRUSRmaStpKytqqajsLKyqrewtZ+rtbnJua7BvMO4s7K1wsPPxMDCvrW+wMC7v720xKmqubG2t8C8r6y0tJ6hp7GupaaxpZ6yta2qsrGrqKi1uqy1srWrtK2qq6isqbmtsrDHv7ilubCpra2mp62wpaSjrqOonJ2bmq+ZoqKio5Csn6Ogn6GppqW4pKu0tKSqq6msrrauop2jqKucoJmbk6S1mo+JjoiRo6GWj5afo5eWh5GWlJ6bmZaVh5iSlZmnnKCgjZOSjpF4fo+FfX19h4qKcnRzf35+XVNjbl5OWmddRkSWW0c6Tm1YYltOYWJOVlZWV1VZaF5RU01jWltUS0dPVFNOR0lWU1xOO1BeSkJESEpBRT8/S1NPPjpOTUM8PD45OjU9KzMyPTYyNDk6KDQ1KS8sMSgpKywtKiY1Ki8mMCkzODoxJiozRGQ7NipIZEhKKzpJPzNDSVMsPo9sQEhJkJqoqaGpsKSno7O0sLS0sLCgq629zLuuwr3HsrSutMHD0cTGv8GyvsLDvL+4vcWorbestLi8wLGssq6ho6euqqilsaOqsKquq7Gurqyrs7unt7CyqbKqq6alo626rauwwrm0rLmpqaitqaexpamkoq6pqKKenKKslaWdmJ6ZrJ6ip6ihrKajray2sLGgqaOgqq2wrJ2ep6epmqOYmZCgqJiGhI+Li5+gkIyOl56SkoiJkpahnZaZloaXk5SXpZyenYySkI6Kf3+IhHx3gIeFh3V0col3bF9ZYG5jUXNxXEs7hHxGPld1WGBZT2NcTlVWVVdRXGJfU09PaFlXVktHTE5SSEVJVlJdYzxQXUQ8RkhIQkc/PUpQTDo+T0o9OT89Mzk3OyozNT4xMDQ4NSg1LyosLjMwOyksLCclMjM0JCwyLTg2MCkoMTxeSzAuSmdERjg8QjA1RUtYMUCUXUBORpWWrKegqbGcp6iwtay4ta2qpKqqvcm8sb+5w6+wrbPDxM7Ow7/AtMDDxLrBtMnErK+3rrO6wL60rq6spqiqsammqbKmtK2qr62tsa6yrbS7pbezrKyuqKugo56wt6yqrbm2pLW1pKqnrKyqraCopqexsaSnpaGhq5aqoZOboKaepKOqo6yinqaxtqysoqWjmqmrrqmdoaWkpJmgmZaPmJ2TgYKQiYWdoI2LkI2ckZONhY6ZpZuTkZuMk5KSlKOanJqLj4uMfIaCgoF6dYGEgX51d4uih3hqXmBuZldmh2ROQGeSTEVieldiWFJmVU1WVlVUT1xdYVZMT2pXVlZJSkhJT0JHSVNRWW9BTVhAOkpHRkVHPj5FUUg4Q0tFODdDNzI7OjoqNDk/Li80NjMpNCsqLCsuIzQuLSsmKCs3OSomNis8LTIsJjA2WFouMEpnQUE8PEMrOkpPXjREh0JJSUSWkK6koaqvmKmorbWqtbGqpauqqbzAwLm6tLy1prOvw8nL0b/Bu7m/v8O6wrrBxK6xtbK0vMG+s7Gvraysp7eqpa2wq7iuqLCvrrGrtaq2tae0t6uspKqqnKSes7OpqKSztJ+1raGqqKuoq6efq6uoubapqqqpoqmfrZuRqqGdoKSjpqKqnpymtK6npamipJilpqeqnKKko6CZmJ+Rjo+ZjX+HjIeEnp6JhoyMkJCTj4WIlqOajo2bkZKQj5KfmJmXjYuEgHSHgn9+eHWDgHp4fn+InY9wcWZncXhcYXSIak9dmFZIbXlVZFZTY1BNVVVVUU9YW2JWSVFqVFZUR1BZVUk+SUhPUVB4TU5WPTxLRD9AQTxAQ1VDOUFLPTU7RTIzOzk3KjQ6PSstMzQxKjgqKisqLCkqKC8qJiklMzssJDIpMjAyMSUvMlJjMDJAZj1OWD9DLD9MVF8vSWs3UkY7lY2voKWqrJmqo62usrSvqqSvqai7v7zBsrC5raK2r8jHyNHAv726vMO+u8TCwL+vsrOztr28wbGytKu0qaW2qaWts7K4r6KttLGvsbmrua6qrrerqp6qq6CjobWtqaGfrrKhtKqeqKero6qhoaytqL2uq66toaeon6yZj7ChmKKgqKaep5uZqbCpop+soqGSoqKjp5maqaaYmJmdj4uHlYh9joaEhaSWhoOEjYiRkJKGh5ahl4mRnpGTkI2RnJWYj4uGhnh0gYB9dHh6gHt0dHtqgoikdmleZWuBdWeIi3xSVnBfS3hzVGRTUV9NTVNaZk5NV1llWUdTalJRPkJOUWFROklITFNJcVFMUzs8ST87PD07QEBXPDw+SDczQ0IxNTo5My01OjopLTMxLS02KSgrLSw1MiMyKScsJS47LiYxLjAtMTQlLDBNaDozOF89YWQ/RjFDUFtbK0hQO1lDM4+OsKCkpaqjpKOsprSzsaiksKequL/BvbGpuqqnrbDJxsjQw77Avbm/wL3JvMK4sbC1srq8ucCztbysuayjtaenrLG2uLKlp7m1rbS8r7ylra22q62cqa+kn6SsqqicnaqypLOomqqnqqSpnaKpp6m9q7Swrp2ppKCvnJqzopalm6Wkn6WamqiqpZ6aqaGbkZugpJ6Zl6mqkZmakpCLgo+FfpCDgIifj4eBf42Jk5CRhoOVm5SGk6KOlJGLkZuTloeKf4Byenl+fGh2fHt1cXF+aoZ6hYhkX2djcoV7bWd5XV5WQld7bVRhUFJZS0xOcHRdSVpbaFlGVmdPQz5LTkRDQTlIR0tTP2phSVE4PUg8PDw+Ojw/VDY6P0M0NUg+Mjs1OTAyNzw1KC41Ly0xMSYvPktJMSUaOTAlLCwwOS8sLCs2JzE3Iy0vR2pJMTRYPWZiQUo3R1NgVSo9PEZcQCqOkrCZn5+ppKKhq6S2srGkqbCmrbnCvbewpLmsqaiwwsjJzMK3vb+1uMG6yLbDtbSztbK9ubq9tq65tr+sorSmqquutbe0qZy5u6ixvrK6oK60tqmrn62xo5ylqKmjnZuksKavoZ+qqaeiqpyjqKCtvKeusa6hqqKkrp6erKaYn5qhopufm5mjqqKamaOjlZaUn6GWnJamrIyfko+RjIKKgICPgXualYyJfYCNiJKQjYuHk5iRh5SkipKRh5CZkJSBiH16bH12eXhienpycHFzeGqCdWuCZ2NnYW5zjm1iam9fcEFdeWtWXk5RUUtJTVNZVk1cXmxXRVhhT15QSE1ERjs3SEVLTzxyaEpLOUFFOzs9PTs7PUo0OUI8MztHPDQ/MTgtNzg7MigwOS8sNS4uPS0qTD4qHTQ5JicuMzQuMCsvNCYsOiQ0MEFoWjEzUz1lX0RMNktWZE4pPTNSXT4jkZarmJ+Xp6Khn6ikt6+toq+vqKy4w7q0rqC5r6uns7rHyse/uMK9r7S/t8S2w7KwurGywLa7vbequbi+qqS1p6iqr624r6iYuLykrb60tKGtuLWnpqiws6CepaWnoaWZnqynqJ6gqq+noKaXoqifsLifo7GvoauhrKScp6aompubn6KVnJyanammlpueqJGYkpmdk5mWoaqRm4qOkId9h36Cjnx8oY2MiXqEjYaMjo2GipOaj4mVoImQlYKMl42RfIV8dHB8cXN0YHh4am9xcXBrf3NkemxoZWNhZoeAYFtyanJNToBpWFpNUUxLSFBSUEdNW19vVEVZWlJnT0hLRUY1NkhCTEk1WmVKQDZFQjk6Pj0+OjpDNTk+OjNARjwyQDIzLzo7ODMmMjwwLDg1QiopLUMqLDQ7Tk5AOzczLS4rLTcqKjwlNTM9ZmQyNE0/ZV1GTz1SWmdIKj8wXVs1KJWbpZiclayfnqGkobersKO0s6mpusW3s66huK2tq6+1xcfAt7/CubC1vbe/u76wrL6ws7+yvMK4qru6uKeotainq6+rsq+kmLu2pKu6ta+esbmvqaWnr7KcoaSgpKOglpuvpqGfoqivoaCik6Okorawoaaxq5+so66YnaqlqJ+Ymp2jk5qbmp2lqpqbm6WVlJeVnI6Tl6KpopGKi5CGeoR+hIt6j5eKjYd6goiFio2PhpCTmIyOlpmLj5Z+hpeMj3qBe3Bydm5vc194d2VsbGxqaoVuZnJpa2VoXWRzgWBba3ZpWkp/XlxYT09LSEhSVUczOV1ebFBFWVVZZU1JSUVFMDdGP0tCNklKSDs2Rjk0OT49PDk4QDg7ODo3QEk+ODw0LTM8PDc1KDU+MSw7QTEoKzY8IjhSPSoxMTM+RDUsLSc0Mio7KzEzOWNtNzRHQWZbSFREVF1oRC48MmRXLDKUoaGXlJuqnKOhoqG3qq2gu7elrL3FtLGvo7WvrKyutMPDvLO/urexs7m4uri6r67As7O4r7/At629urWlorKpp6mxqq2xn5m/taSntLWonrK8qailqa+smaKnnKSllJegsqSZnqOoqZyin5KkoKS4qaSnrqaepaGok6CpoqGhmZudn5GZm5afoaqbmpiglJGUl5qNlJOkqKSQiYqPhnqEe4SGfZ2NiouHeoGFiImKkoaXkpKLkJWUjo2Ue4OYj4t3fnxsdHJsbHNhd3VoaGpnZ3CHaGhpZGZpaWBqY2poW2Z7Y2BTdFRcW1JMSkZJT1NAISpoXmlMRFdVXmBLSUhFQy46QjxGPDZLUEQ4OkQzNTc9PTg5NT86OzQ+OEBLPT45Myk4Pjw6OSo2QDMuRTQoKyw/MC1OPy4rLTcsMTE5NSwmLjUtODA1NzZgdEEzQ0RnW0tXR1VgaEIzNzlnUCcynqKkkY6kppqdnp2jtK2nqrq2p6zEwbixrKO2rqetrrfAv7yywrewrrK2trm2tq2qvbOusrG8v7euu7uxpZ+2qqWls6eprZ2cwKunpa+zqqy1u56pqquxpZieqp2mpJGYpayimJ6kqaGcoZuWn52ntaawqq6hoZ2eoZWgpp+hoJqbmZuSmJ2TpZ2soZeWnZSTjZWXi4+Ym6mfkomKi4l5hXeBgoGdh4uCin2AhYiHhpGEl5SQjo+RkZGMk3uDlY+Gc35+ZnlvamprZnRza2NnZGR2gWJlZmZmamlja3JbX1lebWRhTmlYWmBWSkdIS01SWD45X2xoSENVVF1bSUlHRUEuPD85QTg5UkZANzpCMDM3PTc2OTI6PDk3OjlETT1CPDAqPEA7QT0tNUIzNz0rKiwwQipKSy4vKiszNzIyKDU3JCs3LjcyNjg1XXlOMj5IaVpMWUpWYmZAOjNCaEglNZqjoI+MraGXl6CWpLOxorK9tqGxxry6srGjt6yqram4vLu6rcCyrq6utq+zuLOpq7mxr66ztrq2r7i9rKaetaqfoK+jqa6bob+gsKOusa+3rrWera+traKZnaeppZ+Vmqeln5mkoqidmp+ak5yerK+muqiuoqGam56ZnqSapJ2XnpiblJifkqiVqqeak5qakoyVmY6UlJqppo6OioqPe4JzgYGKmIWHfImKhoaKjImShZWbk5KPkJGXjpB/gI2Og2+Bf2Z5bWdraWZxcmtcaGNjdIFiZmdqbmxnampobl1sbHNwYFRjaWNmWUlGTE1PWFJRVWFlgFVBV1NZVEdJRkVALzw9Nz82PEZOYTg6PzI0OUAzNzgyOD83PTg+RkpARDkyLT1BPUE9MDVAOUAxLSsuMzw7SzYvLissLTI0OzYjMyopNi41NTQ2NVp8XTE5S2pbTVtLWGRkQEExSmZDJjSRoZuNj7CdmZOhmqmxr5+5v7WgtMK7vrqxprevp62kt7i3t627rq2qq7eqs7euprK1sq6psLa2sLO1uqapn7WonJ2ooKismqe9mKykrq+2taytn7GtsKmim5yjq6iclJyno52aqaKklpqfm5CbpKqrqryfp6SgmJqZnaGPa6KWmZxwgpWao391kamnnpSUnpCImJqAloqhkHmHlI2DbWl/d4NxbIaLhn2FjIdxXmNhZ4SYhmuLjpSSdHeLhH6DkIBnh4BndWhlV1xoc21OUGpjZ3OFaF9lZm5tal1gYYqPg4RlTktEOUdUaF5KR1BQVVVMSFJgb3RlRltRVVBGSEVDPjE7PTY9NjwzZlw1Ojw3NTtENDg2MDpCNz86PkZMQ0IzNDM9QUBAPTI4QEU9MSwrMDg9RzcwMS4qLiovNTY4LCMxJzIxNDoxNzVYgWwxNk9rW05cS1tmYj5HMVFkPSoui6SZhpWwm5uToJuqraqjvcWvqbfCt729raa3sKWqorezsrKxuayppqy0pq+0oqm3traop6y2sq60rbOhqZ+zqZ2ho5ulppiruZSlpa+zt62upamuq6yloZ6coaemm5egpaWbm6emnZOenpePnaeppLawpKOinZaYl5ejiKGOkpqGoYeTnKB/pX+lqp6SkpqRiIRzeI2OhYihdomNaZeIZn5zeKBviIeEfo99f6GgoJmAfYiedIeOdZuKbIeBg21pZWN6bHJhU4VtYmxpmHFYaXFwiFheaVtsbFuIcm56coVnhoRaX0dOP0dfTUVSVlZRUVNXVGddTVZIUlJPRkhHPjw0OT05PDc7MDw8Nzk5OjY9RjU4NjA8Qjs8OT1GUUc9LjU8O0A9QD41OUdBODIpLjE8STkvMDEuKi8oLTQ1ODMlJjIxMTU+MTw4WIN1MjVSa1tOXExcZ189SzFXYTcvKIqnl4Ocq5yYmJ2fqqmnqr/Dr7G6vLfAv6qlt7CprKSytK6us7eqqKWwraW0sputtba1pqeosrCssqetnamgsaefo6KZn6GarLOUo6Wltr2mraerqqyopaGgmKCmo5mZpaOkmJykqZaUopuTkqOlpqG3pKSgo5iVk5eSnIivkJeUiamLlqGchbGAo6ydk5mdlHmC1KiAh5XBm8d5eLGlt5dlgMCcv3mEhXqShHyQkJHKcpe8nMV6crWmu5B7gG2WsauweWhsWLGubmVpvZK8bmd6b3KP2H5Ta2O2sn6BcpRzmqGqkFdPV2JPVk5GVVtYUVFTjFxXW1BBXERRTkVISTw8NTc9Ozo5Oi49Ozg3ODs5PkY2Ojc0PkA+Njk/RVJJOi41PjpCPD9BODpKPjUyKjIyQkUvLjMyLisvKC0vMTg2LSAvNDE2QTE9OleDdzIxVGtcT1tNXmdcPkwxW100MSGMp5OBp6qfl5yepayyqbDCvrK1v7W2vsGrp7SsrKmmrrOpr7azp6emtKWnuK2cs7K2q6Wkp7GtrLCmqp2mpLCioZ+dlpqenK2rk52in7O6o6qpoq2upaGcmpqip5+Xm6egn5iep6eRnKaak52hpqKhsaOfn6OWlpKXkpmFr2tqio2qfmaDlYatZHCdnZSZppRxrqGkfni7fWuhkHaxX2q0W6WAZZyRYGeDe2d/anhrqWW+cmemjHWxanyxeHSSlGNubaduW4ShRWhmh5ZFdZxgfmd8pKeCWl+Mq2iAlXh5aqc3Sq9cWFNsZFtLTlhfXFdWO06JT1dXL0lUU0pDRkY9PzQ2Pzs4OjkwPTg5OTk6PTxEODs6Nj1BQDY8QEhRRzkwNzxBQz5ARDhARz0xMy0zM0UzLi41My8rLyguMC46NS8nJDIwM0IvPTtVgnYyLVZqXE9ZTF9nWTpNNV9ZMzAbkKKVg62npZ6jpKqxt6y1vb+wtsSyt7rBpqmwqq6oqK+uo7C6r6OkrbKjqbinnrOzsKOloKmsr6uvpqeeo6Gvm6KblpWWmpqrpZWaoZ+0s6KrnKOtraCemZagoqicmJ2jn5uZoaakj5yimZegn6qepqagmqChlpWRlpCahbWbtXiFqZm1mXaGs5u3fpOWlqmUfmuCpnuChoiTlJN3q2drsVyreo2GlHSJco+HgH+IkJd4goGLmIuDoI+EsHZ3n3FsbGx8i06kWEhiYpl+Y2imYHlydVOTh15QqW1jcX6HgGKcLlGhb1tTa2hgTEtbZFhcWkI+sXlXWEEjTWhGQ0VBQEExOT44ODo4NDs6OTw4OkE6RTo6OzY6Q0I4PT9LTkc6NTpBRkJAQUQ8RkQ7MDIwMTtGLDAuODQwLC4oLzMsPjgzMR8vMi1EMT08U31uMytYalxPWE1fZ1c3SjhhVTUwG5SglYizpqahr6mns6ypu7bCsLvBrbi3v6msra2tpq2xqaCuu6qgp7Sso6u0pKays6ejop6nqrGnsKelnZ+frpWemZSUlZidrKCZmaSota+iqo+qqKqbnZWXoKWomp6cop6bn6Olo5WbnpeZnKKpm6aZnJuioJeTkZOTnIPVk5m5cLDBfsWGfNaUm7t8mpWlj42djaR7joikg6WCeqx5j51Wr3qIfp9quVq5doaEfqaClHuYeqp4jZ2PerFujoR0kbyFb5RQr6fFilGgemNgqmJzcohtl4hgU7W0yIWAiXxjpDNCnXZdUGppY1BAWGdaZGFKSE1uTlxRT1lmWUNEP0U/MD08NTk7NzQ8Ozg9OjxDOkY6Oz42OkBDOzZAT0xIPDo7REhDQkNEPEVGODEyMTFEQi4vMDQ4MystKS4zMjM5NzEjJTUqPjM9PVF3ajYqWWlbS11PX2ZUN0c6YVA3MSWbopSYsqioprSqpbSppLy3wbC5v7G1tLqytKexr6KwsqafrbWnmqe5raKvsJ+ztLChpJ6fpqmwqLSoo5udnaqVmJeVlZSWoKmcmZanrbCpo5+PraOolp2Wm6GloZihoaGhmqGip5ueoJ6UmJqmoJunlZubn6GYkJKUkJ2Ism5otXGrh26OpnK0c3K2e5qXpIuPnY2if5Ghpn+xdoOR0tJ2XK57hX+kb5uqpmuHhX2tfZiZjnuxcZKejnizZZd0hJ5vnmaUUciLWsJcn3liX61gdnOHYpeIXlnKnW+/gXVNS7VTVcZkVFFqY2VYQU9rYGxoUFZHSTk9VVJaV1hJQz9KPDI/OzU9PDQ2Pjs3Pjw9QztHOTtANzs+RDsuQ1JKRz4/PElKRkNFRD5ISTkxNzQ2QT4vLjI0MjUyLSkuMjYsNzQyJh82MDs1Oj1QcWg5J1dpXEJPVF9lUDVHPWFMNjIwop2SpbCso6u8raa0pqe2u7yyur62trS5uLKltLOgsbGinquvpJemua2ksbCbtLiqoKWeoamksaesqaOZnJmnnZWTl5eRkqGmn5WTpaqwpqKWk62gppKUoJukpp+VmqWmoZqjn62ZoJ6ekJWboZ2cpZWdlZqin5WYlZGbhax7d6h2o42IhqlvrYqCp4OYmKGJkpqLon+TmomuhX+Cs1xys1KufYKCpH9x1314hX6PnYaamXavhoeRnId3tGGaZZqCgpVtklqwWEuadZh5ZmCtXnZ3iGiYiGxdr3eVno94bDV5yK6yX0JUb15nYEVQbGBwbVZWTS5mZGlTWVA7QURATDo1PzkxPTwxNj85OEA9OkM6Rzs8Pzo+PkU5LUVVSkVAQzpNS0pCSEc+R0s5Njw0Njo+LzA0MzMzLjIuLjE4Ki4zMiUhMDM3Njc9UGtlPiZWZ1xAPlZfY042R0NgSDo5OaCelaC5sJe0wq2os6ipsrq3s7e+ubextLq0pLeyn7Osn56oq5+Up7WrqK+xqq20pJupoJ+nobWmpqmimJ2UpKCTkpuXkZShpJqSkKatr6ahlZmqoKOPkaGZqKSglZmlqJ2cpJ6tnaGdoI2TnpqdoZiZm5aXoqCUl5CmnYapfX2leKGOjYKqcK2LgaeGlp+hiZeXiKOCkYiUqnyAi514b7FaqIKCiKB5dNh/doh0qIGOm4ySpHuUj5+Ee7JenWSgfoOVbZJcq1tak4CRf2hnqmRye4FrmIdzXqtaiaCOa29lT0pDoVxbTHRdYmdOW2FfcnNfS1Y3SpuVWUdFPUdGQU0zNUE4Ljs+MDVBNzhAPDY9PEY/Ojw2Pz1CNy5IVkpFQUg2S0lOQElLQEVOOjpANS47PjEwMjE0NCsqMDUvNywmMjEoJCQ2NjcxPFBlZUEmVWZbPzJVX2JMN0ZJX0MyPziinpqawKuYtMKuq62ppbSwt7C1vrm5sbC1uqi6tJ+vpJ2kp6eek6mwqa+ptKuqrqGYoKCmpKO5oqKroJabkaGflJOemZOXnp+QjIyosLCnnpebqKagjJKkl6iqp5SXqaeenqCiraShnqKMlKGYn6CSnpeclZ6hlZaOq5yPrm1ytHOpi3WKp3O0eHOzgJGko5Kcjomkh5B3uHCNe4uiamu2WqGFZZeXaaGip22UcrR0k5l+smqFkYetanWzYZ1mom+Hk2uXXK1fTaF8h5FSc6NseX9+b5iHcl2vVjycd2ZUb24uXKdPY1NrZWJtWmNdYXB7Y1RaUj4/bnAzQ0JAP006ITdANi47QDM3QzU4Pz8zOzxDREJKRk1JRjYySlRLRUJJNklKUD9ITkNGUD08RTUwOzswMTAvNzUsKyw0MjYvIzAwLCwdMjg5LzlOYGVEJ1VkWT4vVV5hTDVGTV44MUM4ppybnryhm7LArq2rrKe3qbevtb+0u6+ut7aqwLWoqaCapaOhnJGqqae1orKnrqmgl5ynn6SruJ2irJqVmY6jopWMnaCbmJyfkZOUqrawqJmVnKypl4yUpZmlrKKRlqqyo5+epquxmaGjj5iilp+blpyWoZOdqZyUkKuZh9SSmrtzsMOAw4Z+1ZabuHiIkJiMl4uMp4h6pLZ1fnd2woKasmCDunnAfHW4Y7WCjIepfZWBq6lxe390vIinoGmdYaaOr6F+jHSHqn2+b3O8dLKDdXiBim6aiHJujaR0vV53fVphebxrWlZcanleamFlZ2NteG9aXFlDQUFzQENGKzVHIic7PzEwPD83OkI5OT1DNDxATlpeYGBfX19aUFBSS0VGSjRITFJASk5FRk9CPUU4ND05MDIwLjg3LSouLzE4MCItMSwzHiw8OjA4TFhhRidUY1g8L1ReYEs1O0xbLTdBOaebnqK9oZeyw7Ctqqussae3r7bEsLiwrbmurcCwq6OhnqOhnJuQqKOqsqS0paylnpWaqpimrLicoq2XlJ+PpJ+SjJyinZedmpGWkq+5sqyWmKSop5SQlqScpKyekKCoq5+an6ijs5+jpY6nopSimpyYlaOYkK+gkpSpnoSQmLZ/j5GMt5V4gpOatXdta25zb3mQhY+KdJ/Bu72ae4GxqHGAc5G5g3yGhoyHjXyKh42YfKS7ub2cdHq0o3R3l3Z0sHWZnmaGao21dHJxd7aMXn96fYlog3luemOLrHB1hX9YW6dqRWVaVGZgY15jUWdncGx1Q05QTUQ7Wk0/SjM7MCA4PjsuMz1BOTk/PTs8QzZCVFlaWltbWlteYGJgXVNHR0g0RElUQUtOR0VPRj9HPDc+NzA3MC85Oi4sLy0qOC8lJjIoNCQoPjcvN0xUX0cnU2JXOCpPXV09KzpWVSc+OzynnqGiv6WWtMO0rKuorKupuq6wxa2zsq22prO4q6mhoaWeoJ2Zk6qjrKmltaenn5uVoKOdq6S9pqGplpObkKGbkY+hp6GTnJeUmJSxtbetmZ6kpKKLkpKmm6Wqm5WppaWbmaGopaekqaGRrZ+WpJ6Xl5edno+vqJSbpqGNan1pm6Z3h3J9mY50eWSHe72+wLpvk4NylohgcmpaXpuJYGOIj5VrYICVY22dd2KVbICalZRlXmBjcJqKaXKLfYaVZ2t/cnV4fX5iW3d0gWhQXG2DfXuLa1hreoJzSkpvhnBOdE1FWF1nYUxbV2djX09bbXVpcVJRREVNO0dJPU0/MiwyQT84LzU/Qzw5O0A7PUM+UlZWV1laW1xcXWBhYWFgXFVHNURGVUVLT0hGUElJSDs4PTUxOi4wOzouMC03Nj01JiIvKjIsJTs4LTdKUl9JJ1NgVjQpUF9MKDM+W08nPzI+qaCoosKjm7W6tqOspa6np7WxrMirr7Kqs6K9sLGmn6KnnaObmZmrpq6jpLSopZuXlKCbpq2ovaeopJSTm5WfmZKXpKiokJ2RkJicsLK/rJynnqeiiZORqZqoo5qaq6CjmZqjp6yjoKujmrCblaeglpSdn52XsKWYoaeZm5CcnKKimKWhmZuZmZmPlYFnbX1xd5KYlJKFi7WqjYaYlY6KjJiWh5SVioSTlJGJjpOUmJSYlpqgoZqblKCcjYJ6pYVta32RfIB1ioqBcYJ4eXZ1iX98impzgXSDdWV3fXdrb3ptYGNdcGhNWVpmamBXWm95bW1mVFBGUzlPWk1RTygrOktCNjM1PUBBOTpDPjxFTlNTVFZXWFlaXF1gYmJhX15eW1RLQ1NHS05ER1BMT0k8OjszODksMjs4MjApNklSTzgiKSsvMiM0Oyo3Rk9bSiZSXlMxMFReOis9OFxKLDwtQLOhs6LAoaSysragqaWyp6WwtKrIqqyvpbSlwKazoJ2kpJyjlZWfqqasoqO2q5+YlpWflq2ppcCeq6OUkZuXnZeSlKGenqKnk5KZqKeyxLCbq52rn5CWlqidqpycn6yYoZucoqSvp6KlqJ+umJennZmZoJ6dnK+gnKGmlZeSl5OfoJSinZegjpaTioqNjpeukHyWnIOSgouqqYWAmZeJhJCeiHqEkIeGmpKIhoqWj5uXjZGYnaSWmZOQnI1/jmehs6+FioR2e5KKfXd5em9meY+BgIlqdYF5iHNpc397doOHgmt1ZHlmYGplY2Rma1lse29pa11TTFBEXlRFQD8+LDRARjs0NTs+QTs8Pz4+SE5OT1BTVVZWWFpcX2JjYV9dXl1eXVhWSktMQklPTVJKOzw6Nzg2LzI5NjQuKCYkLTEuLykrKjclKzwoNkNNTUQvVF1RMDVNWzE3RTRbRzU8LEC0oLmwv6yrrrKxoKqmsq2irLOvxK+pqqKxrbyis5ufpqKhnJiXp6WppaSlsrWelJOdmZmvpa2+oKuikJGdmZmUkZWhnJeonISfq6yjtMi0oKqkq5eWl5qmnambn6SrlJ6fnaCqr6qmpKuirpufoKCYpJ6cn5yvo5iep5KXlpyRo5iXp5yal2WCknxlfo2akGN5jm1oa3uSpKpqZZuYfWeGimVlaWh7jqGPa2eNmJGjd2tqi5mjn5hzbG16hI6IelhmXoaDXm2MioF2XGhzd3aRgIiCbXeBeH9zbXmEdHaJiI+DfGuHWV5sdGRec4lpa3xxa2RfUk5YSWRYQUo0Pkc3P0ZENzE8PT9BRDs7REdISElMTlBSUlRXW15gYWFgXV1dXV5fXVpVT0RIT0tTTj0+PT02NTM1NTU0KiYmJSwqJS8qKyc2KiQ7Jy9BSltKLzdaTzYpRVkvRE8yWUM7Py49pqC6vbqvrLSxqqWora6wpq2tsLywqKajra6wnqyWn6OdoZmZpqqcraOlp6myrZ6Uo4+ir6W2uaWuoo6OmqGZk5KaoJmZpJV8pq6jqLTEuKWip6+fnZWeop6jnKOpqJKfoZ2hqrCrq6SroKqcp5+noKyWoZulsKSXm6mVoJ2akaOWnamXnX29g4hytHKEnYataHi5xLhxk6KjeqaZmXKrgnzLwMC7cYyjiIKffZeZiZ3AvYKXnZ6NncLBfIJ8k42aw8B9bKWyb4yBb8p6f5t2kIOOgXV5gIB5cXp/h3B3hYyTeW54lGNnYHhkYGWCY150Z2xkZFlMVklRWkhPRDJJRT9EQj4vPD8+QEE6OENDQkNFSElLTU5QU1ZZXl9fYF9eXl5eX19fXVxTTVBHVU5BPz89NjQ2ODI3NiomJSMpKiYuKyopMTAfOSojPklbTCojQlAuI0ZbM1BZL1ZBQjsvOJajucO1sLDAqaiUo6+osK6tprKzrqmkpaavq5+qmJqin5yaqqahnKuipKikpLSknKKSpq2rt7OnrqKRkJmcpZKRn6GYm5+diKetpayuwMCxoamvqZaSn52imqKkqqOToKKdnq2vqq2npKSooaalnayokaOaqK2pmpyom6uglZaklZ+ilpx+zpR4eqSBeZWWm1+uj16Op4GioHynlptzq4OAr15jjap7qIeFoHWXk4izY4KrhqGOjbNqhK90fZeIt2GDrVqjzW6Qdnvae3+ZcH2HknZ9ZXqHdnZrfIdufYaRkX5tg5Bhcm1waGBgemRccWhqZGdgUlRTV11LT0M1QUhERDg+NjtAP0E7PThAPj8/QkRERklKTE5QUk9TXF5fX15dXV9gYF9fXVpXT1VKPT8+PDU1NzgxNjQoJyQhJywmJi8oJiszHTYwJDc7U0wrLC1LMCc7XDtMLSFQQEY0LjGtwsC/tbSwuJedkaOqp62zq6ayq6uqo6qmr6mfppuZpZecoq+foJ+op6KloJ+wq5qdlaeurLCqqKuflJGan6SSj56lmJ6no5+upqyxqcDHs6ipsa6Wkp2copefqaqflaGfnZ2usKmsqpyoqKWiq5KsspaloqqqnaKlpKCun5GYppifmZOTkZegcYWMl3WFqIZxsX2ecqx+op+BpY+edquCfa1/nHOtf6yHhp92mZJ7fJd+qoiijJKMnX6re4mUkJ+Ae61XncV7j3CTwX2BlW11b4xtZXZlhm9hd25yb4mKko+DbpKRZnB1dXFhZ21lX29paW9nZFhUXWFaUlNEOUlJQEQ8PjxARkRDRUE9PDw8PkBAQUJFRkdFQENJU1dZWlxdXl5cXl9hX15eXFtaUkM+OzkxNDc4NDUyJiMfHCAxJyAxJyAnNB41LSY3PVdKLTwnPjEpM1dARiEcRzpDMS4rsNPGxrK0oJ2jjqOioqyvtq6osaaoqqatq6umoaOdmaKVn6Wrn6Gln6ioop6dsKyXmpaop66rp6annpeUmaOhkZSgrZudp6OwraWttqu6zrKtpq6sl5WcnaKZnq6snJegmp6fqbOrq6ubraulo6uarrGhp6utpZikqaior6GRlaKjmZORhKRqpHWJeql0erJwgqaKmYxxiaCbh6RgYFKrhX+ug5t2rYKohoWfepmXhntmgKOJpJmGgqN9qX6CloeuX3ypVp6jkoF6o5+Ae8OvxYtyr7OzuXJiqa/CdGiMjJiOgm6clXFvenh5cG1nZWVycGZ9amNdV2BqWFlVTU1RTENDQUI7Q0BAQkk8PTo5Ojw9Pj4/QT04NjtETFBSVFZYW15eXVxeYGFgX15dXF1bU0lCNjc5OTY2NCwmJCIgKCciKy0iJC4hMy0mQERXSCxHKzU2KjJQS0wjIEE5RDQsJ8LJ1dS/oZmrp6Cvop6wtLCuqayip6aoqquppKagm6SenaWnp6Ocq5qirKGjn6+hnJqSq6S1r66gp5qdlZOmopCaoqigoKacsaamqbKut8iytaqsqZaRnZyimaCls52aoZSdn6esraSwm62ro6OqobOtoaqzsaGaqKetrrShkZSippeakXuqbJ6Eh3WreXywb4KljImflpaglYHSuLS4yYGBsl9glKmDpYiHoHqYlpp4qsl0mqSVqKmRk5qNgZyKmsbGeWehgqV0gZ+Ogn2vXXC0YrB1S6OHbadHgpNkj5CekXxxmZWBcXx1fnxuXGZqc3FmgWtfYVlkblxfWUlOTUtFREFCPkE8Qj9KOzc5Nzk5Ojs7OzMuNjxBRklMTU9RU1daW1tbXV5fXl9fXlxcXFxcWE1CNzU2ODUvKSglJiUkJiksNEVOUFBNRktKVkYqTDAvPS01T1RRHRw7PEYyLCSnpMDGuK2osq2spaKcsrisqqGlmqikqquqpp+mppiqo5+uq52loKyanqmlnKe2nqKXk6mrtbKsm6WcoJSPpayRmZyoo6Gqp66ipaepsLXDsrOqraiTipecpZuho66ll6GVmZympq2csZ6vqaefrKO3rKGxuK+dmq6msbKxo5OWpqKYno6CnU54moF/n3qEo32DpIWHpp+dn5SEuHt7ebmCf8zGwrZ4m6GRi59+mpaXinaemIqkl6Opf7CFnYaghKx9mpVjpm2kcI+FkIF9loJyrGCjc3GAmmC8fVJVdI6So5Z7fpSTjXd7c4Z/cVxubnhyaoJwW2RgaW9jZF1MTVFUQUlIRkk6OUs+QjEwODg2Njg3Ny0qNT09P0JER0lMTlBUVllZWltcX19eXV9fXVpaWlhVU09IQDg4Mi4sKi4rKicnP1FUVldXV1lYWFdVT1VGPEUzOlBbVBwbNj9ILC0gi4eZqaukq7mqrp+boayys6WeoJWlra2uqqecpqebo6ihs66iqaayoJippJSjtqKilZeiqbS4o5uhnKKSj6GxmZ6bp6ahorCunaaporayxbGtqa2pkYeQnKidoqScpZeemZqapqWrm7Cir6WnmK+ku6yhtratnZy0sbevsaWXnK6fop2Fj9G1w7d5h46FkZOQgKZ5lKF3jKCShKWBinGqhoW0bnJpmqSclYqffJiZhoePc6+CpZuijqaLk52LlpCbbnGyXaV0k3qcbJl/e5l8balho3Fxf59ic7K4aHePlKaYfY2OlY56fnmQg25qeWl6c2+BdV5lZW9uZmhgS1tYWDxISEBVNEBGPjwqKDYzLjAxMykmNDo7PD0+QENFSUtOUFJUVldXWV1fX15eX19dW1taWFVSUlFGOjIyMy8vKysoQFFSVFVUU1RWV1dYWFdVVVZUUU9RW1UlITJBSCQpJZJzjIqtvr+8urSelqekrbWhopmUoqimrqurmKajn6Whobano6insKOUrKOOpK2inZCamqqzs6ScpJyokZSXrp+fnqeknaidtpujq6S2rMSwqaupooyEjpyioKailpmanZmcmaemp5mtqK+kpputpr2slL2vrJ+hr7K3qbKlmqiwoqeXeaiRfXywd4qApKWInG2ycKGHrXyhj4OnlZiArImFrYWglaqgopeGn4CZlYB7kn6rgJ2aloureJ2hkoqUkoF6r16kgX2mp2SdgHyXc2qvXaVrcIWZXWBbjKBtlZGmmYOWjpqOfHyEmYBrbn9jf3RugHpgaGZxb2loaENaYVs+S1UzVThCQkM3JCQzKycnMywgLzY2NzQzNTlAQ0ZJS01OUVJTU1ZaXV9hYGFhYV5dW1pYU1BPTkk3MDQyLiosQVRWVlZVVFVVVVVUVFVUVFRWV1dYVlVVUUhGSUojKCi9k5qDqMXCtsCznpqsoK23paOOm6Sin7Cwqp+loJ6tmZ65oaOroK+pma6hkKuoo5aJmpCusKymnqWbrJeXj6yhoZ2moZqlna6Yoaint6nBr6SppJ6LgY6bmp+nn5KUmZuVm5qmpaabqqytpKWfqai+pJbCrKqioKqxt6ispZ6yraeol3WvfpCLnIWHfrqtipllsI1lla19oY+EppWagayKhLCFppqkoaGRhaFcbGqBs2B/rXt7g4GxbWdvmZmMiLFbfrVcpIRryKJkn4B7vFh2tFmyfVKugHqsWIChbZiPqJuMmJKamnx6kZ9/ZXV/Y4Z4dIF9YmpncW5nZmZQVWRcQVVgPkkoPjk9NCEiLCUfMi4gKjEvMDQ1Nzk5PEFDRkhKTE5QUVJUV1peYF9gYWJeX1xbWFVQTkpGQzU1My4vQFVZWFdYV1dYV1dXV1ZXV1ZXWFdXWFlaWltcWFdXR0I70p+ysbe9urPBsqKcrKaktamgipqgnpyzs6mfpKGetpmgtKiqrJ6vrZ2sm5Wvp6GOiJuOr6uopqGlma6SmI+pmaKepZ+ao6OlmaCiqrOpva+kqJ6dj36Lm5ahoZqQkZqckpqYqaCimqmuqKamoqSpu56gxqakqKCps7OqraWeuqyrq5SAqZKjr46bgIekl5mQgoC4w7qDjpyThKeXnIKsioKviKecm6aqkH7VvcKqYqO/vX1+o4KE17q4tYWVk4Oevb6EbaOCb6uEbJx/erKwx4Npq7C9rHh3or68c4CWjqedkZuSmqB7g5Ode2R+e2WPZ3mCfGFsZmtrY1FiW1NqXD9VYkNNKT06NC8fHyQfJTIgHSQoMDQ5NjY3Nzs+QUNGR0lLTU5OUVRXXWFcX19hXmBbXFlUUU1IQz89QT81PVNZWFhZWVpZWlpZWFdXWFlaWllZWFlbW11dXFpWWFRXWryVs7Owv7ixvLKinK6mpbKmnYuYpcCquLKoosCnqLOdn7Kduqifra+lp5SUsKuXjIObka6loqygo5yqoJeLo5KmnqecmqGpo5mfoayuqrqtp6Oal5N9iJmRppyTj5GYmY+YlKmboZmqqaGrp6CjqrueqMSin62iqLKyp66pn7mmra2Zc3aqpbiGZImgcGiukYuQbm53pJCZn4F1rpiUcI+LcZWoo5qXrqRybGxsZot4b26CmXGBempxaWeKl5aYcWlphohncYZkXYhiam9ZXGZ9dqZfYXGOkW5lZH+Nk4+imZmZk5qifomRmHdniXhpj2t5gHplbWRnbWNLZVhKa1o6UWZGUSdLOisjHCAbIywpGBsYLTIuNTo0NTc6PD9BQkRFSEtMTU9RU1ZcV1pcYF9hXV1bVFBMSEQ9OkFCN01YWlpZWVpZWFhZWFdXV1dZXV5eXVxcXF1eXV5dW1tVV16plKyzqbm4srOqqaGunqOzqpiSv7PFyr+3qp/Bra6koqisn7qjpK6rraaOl66pj4uFlZatnqaqoJ2ko6CRi6WSp5mpmpejqqGWnqanqLC7q6uam5OTfISWjqaZjpKRmZWOmJaplqCZqaOcsaadoqu5n6/Bp6OypaqusKmrqaW1oqy2lYqhqKa3nYmWo5mIqpuRlZ2SqbOZmqOqoLKWoqGdn6KcoaWilaunjZKSjIeTnJ2VkZmTmZGPlYWBpZuYlo6LlJSMkIeFfmeJfnSCdXOHinCnbHqTkJOSgIGNj5CPnZWil5qapYSJl5Bza5F3cYx4d316am1lZHBlVWFZQGpcSGNiUFkrRj0rJyE3NTAuHxwhJTIoKjY5OTQ2OTs+P0FCREVKS0tNUFBRWFRWWV5gYWNdXlRRS0VDPjk9QEFTWFtcWVdYWFhYWFlYWFpaW1xeX19gXl5eX19gYGBfWVlgppaoqqS0tq6uobCjrZ+gtrGQjqzIvsa8uqujpp+dp5+xqaO2p52ptKaokZisoouHiY+cp5WspJ+Yp56ekpSjl6iaqJqUpqGkkZypmqK2u6eqmJqQjX2BlYyilYuVkZaRkJSYppCgm6qgnbajnaart6euwK2itqWurq+rp6extp+tu5iRpaSmtqKSnqegjqqgjpOfo6uwmqCjsKivmKOgnKOqnp6enZesnZOZoZuUkJarmo6ZmZeRlp+RiKGelpWFko2RjpWLgX5mi4V1hnV4h4JznGqFj5KTkIl9i5WSkpiUo5OfmaSFipuKfXSXdHuMgHN8f2pvZV9xamBbYFpuZFBhZlFaOkdHRT4yPT45LyomKykmHSY0MTY2Njg6PT0/QUFDSUpHSktMTVNTU1VaYGBpYWVWUEtBQ0I6OUVNVlteXltaXFtbW1xdXV5fXV5fYGFiYmFhYWBiYmJkYlxbY5eVo6eir7GrrqOppqyfp7WqkI+dpbW9sK6to6SbfJ+ksqSlsamXm7mmo5OZqpyOhoqJnKKPrp6ilaifoJKWmZuui6mWj6iZqI2aqpCfurekpJicjYl6gpSNnJSLlZKUkY2Sl6ONn5+pnp+4o3+Dr7Wir650o7yisJ53eJ6nr7iUdayjnomAq39kXGJ2oI+ln4SYfW2Ss5yjp62qomWen5JzeZqXcYGZqJhtf6KoimWcpp2SmJiWjZKckIaem5CWhJKHj5CSiYV3ao6HdoZwe4V/f2Boh4mTkYtadZSQZ2iQj3N7qJycZnubioV6mWqFjIRveoBrcmVgd3Bsa2lcZmZiYnFUWz5OTk5TRz5AVUQ6MS8eHyY0OjMwNjY3ODw7PkBBQUZIQkdGSUtNU1RVWV1gaGZnWFFKPERHPDhVUltgYWJgXl9fYGFhX1xdX19gYWFiY2RhYmFhZWRjaGReXWablaajoK6vrKuppaitoqetpJKWq7exs6ebq6itmHSNnrGgqKunlJe5oKCPnKSdkX+JiJqejKuZoZSnoZ2OlpKehHatj4inm6mSmaWKnbu0qKCZmIuJdXeTjZeTipSRkZSNkJShj5yhp5mcspWAjJu1nbOMko66pp99p6J5oKy0f46NpZ6Di4aQsKqvjYuXpJt6gYushZydoaeop4eVhZh3pZt6h5yBl6eCgnucsnqKhqGYmpWYloKRl5eEm5lieoeQhY+QkouDbXCNh3mAcH+AhH6Fc4WDlJF4lmiSdKCadX2ZhaOgiZh/lIyFhZprj46GbHl8cXFoZXhwamxrXGVsamZ1XV5JVExSQEU2LlpVVTcpITA5Pj43NDM1Njg7Oj0+PkBEST9KRUpLR1NYW1lcYmFoZlpRSDlFTDs+YVZeYmRmZGBhYWBiYl9dYGFhYmJiY2ZnY2JhYGVkY2djYWFonJein6asrauorKCnr6amqaWZlK/JwLGil6iqt5+RhZ6tnKeioI6Qvp6ajJ+aoJB8hY6Yl4eqm6CVn6CRjJOJhoCRp42Ho56klZmfiJ+6sqiempKOhXF2kImVkIqUkI+bjJCSoJKYoaSWnquHn7SJtJqtisqHqayItoWNsIGvrIKojKaYjZ19qI9ze3edj6eXaJWkebSMn56mp5KYwoF/q4iYoXKegJqlfZeFlbKBoX2hlKGQmJeBj5Sci5mSi32Fk4eNlpKJg21yj4V+eXGGgIN7g3SEgJaAj8Vmf6mHj6NrnoWknYWagY6Ph4uacZCUhml5dXx4aGl2cmhobF5kcG1nbllnR11STTNFNDdOYmQ3JjM8RUdEOjY0NjU4Ozg+PT0/Qk0/TklKTENQWl1cV2FeaWxcUUU9S01ASmNYXWNmaGdiYmJiY2NgX2JhYmNjY2VpaWNiYmJlY2FmY2JiaZSWop+vp6iopaufo7ewqaummpSgpKWspZimrLmksIGiqZ2mnp2JlL2Zk42hkp6PeYSWlZGHqpiampmhhI6Ld5ucj5+QiJ6lnJeamYikua6lmpyMjH5ibY+Lk5CNkI2NmIyRk6CPlaGhmaGnfqGnh62doJatj52cnJCFgKCMqayFo42pmYyaf6J1gZmUbIKtdk2reIeNnJGaqKaAqat9g6F7eqdqnn+Sa2eXhpe3iZ5+bmBkWYOXgI17ZGiLcpl9eZZsXX2XbV9ScINcX2t4gl9YZIF8g3+XcKeqa4OjbnKlcJ+FoGpnoG1bb4x9Z1pghIFjWFFwd2ZudXNram9danFubGpZaU9dWUY5QTVIRF9sNSxJRFJNTj04NDg1OTs2QDs7PkJQPlFSTE1CSlxdX1ddXmJ1YE1EOk1PTlRiXFxmZmlpYmJkYmRkYmFiYGJkY2FjaWtkYmRkZ2RiZ2VhY2iXlZ2guKCpo6askaC2u6quopmYoaOmra+hnrC2pKmToqGgp5yajpm0mZCLn4yVi3WBk5KMiqaUlJidnn6ShYWspIebkIqZqpmbm5KJp7GnopaaiImAaW6Ih4uOjoqLjZKMkZOjjZSfn5yipH+TgY+ioZSgdpyVj6eCoKZ/haerg6V4iXyEmn6icHOUiJZ8n415bYabjJmPm6iZjoede4Kic3amZp5+d6RfmHp9k3Sibpi3tLp0k4iDgLWoZIHGuHtwlbaMcoCao2JzrKtgfGmds35tfIaBjYKLmHF/o2xyo3SfhYGkYZ2Zs5ZyfZifs3V0XJ6yg2tjcHV3cmlvWGttc3NnXWleYkxFPUQ2UUJaczM9U0dgSlI9PDM5NTo5NkQ7O0BKUD9VTU9RQERfX1taWGBgfGRIQzhNV1VXYmFaZWZra2JiZWFkY2BhYmBkZF9gY2tuY2NkZGhkYmdmY2hok5WUo7eYqpuTn42ktrStraCaop2ko6avnZyzr62UmaKaoaWZm5Wfq5uLiJJ4i4VxgZaNio+gjpKUnZh9kImNqKCHl46JkqSVnJuNi6mopZ6Ql4eFfmp7h359kI2Di5GRiZCUoYOXnqCdn56LiXecmKKNn3Ghioeph5uljpSmqX2tjH56oJl6o5N4gXSWiI2cfZafhpuOmJulhaJkoXyIlpCbjW2eaJuOb5qZeoCLp31yaXSrg5+DdKpolZpdm4V2hZ5nqmuAuGZcqHCBnGCVjF6ndnWHiH6eaJp1hpOSl46An2+akW6nml2pf3m7a36qXI6EXbRoXW5yenhraVxxa3l6ZGBmWGJCUUZPN1dDUm81TFtbX05aREEyNTE8OzdIPzpDSFU+WVJZXT5EYl5WYFFhY31qRUI5TlteWWRmWGZnbm1iYmVfYWFfX2BgZWNeYmRvcWBkZWVrZWNpaGdraZWbiam0mqeIY5Sbq7mxr6yeppycqaCfr5yesqmun5ilm6GgmZeXoKOZhomNaoiAcnuXiIuWlYORlZiQeoqElaScipSPhoyfk56diZCpo6CajJKKgYBpgYZ5f5eMe4mOjoiQl5t/lKKen6GTmHJon4mfj4xwkoyBqYeYnqGlnqZ7sK2joriXd6Ozo6SAiZR5nXurmX6ijpyaloiXcaF8hY2vtX1rmpGheX6YtaKkq6iEmXybfZ6bf3SqWl1ve5aLeJ5iTH97eoVjeZdCTJ9Yompxe45sgIiEmXWbeIaJsbN/gJuTp3eDnm5zfZVwmnRrpF6VdkhlZGF0cn9/b2ZgbGl3fGVlYVFfV11UV0BaRlFoRVRXXWJYXklEPUI4P0I6SUY4TEVYQVdSW1ZERmJcWmBLYG1+ckVCPFVfYlplaVZnaG1vYmZnXmFhXF1eYGhiX2Vjdm1dZWdma2RlbGlpa2mTnICwrZmEU16gprO5srKpmqKMnKycnKqVoq2lo6mQoJ+dm5qWmaGdloiHiXeGgW95lYWRm4p7kZOWiHKAiJKhnHORkIGJmpahnIWPqZyblYuLi32DbISFcYKhjHiGjYiIk5mWfJOjoJ6iiK2GfbWEjp6de6WWeqmAlZuPiZ+bfKdod21+mXShc3J8noaZcJODrn2kg6WdmYCjb16oZ3WiY2+lYZzTkH17mXhzc2KihpB+o3SkkHZrj7OMYIKYiXOqsqi8f3eDbX6/pqm0XZttfHCWbX9yonJdpGdzpmBopm2b1Jp+hptwenuXbJx8eJdzbqmkZ2FlenKAhWxoZmRvdnhoYGNTXGZRUWJIWUpVYVdUXGZrXGVRRkNLTUpLQktFOE9AUU5YU1lPU1FgZmZqUmN3eXdJRkVjXWVaaGpUaWhqb2NqZ2BjYFxdXV9oYmFpZXxkXmRnZGtkamxnaGxol5p/r6pUXEt+qa+xs6+yo5uZhZmqoaKlj6apoZqri5uZmZSZk5OhmI6HhXtwfYRofY+DlJqAd5GOj4lvf4WOkpJsl5N8ipOUpZeDj6ublJOLhol5g3aIgW6Cn4Z4gZKGiJmjmHuUoqOZn4mzoaK2i3qsp6SupXCpgJqOhYCakHukgKGZhphynoSkrq+Kl4yAjaSNlYOtoJN2tba1yaFzlIuBn2Cel6lteZaHoJt0ooh3oH6Tl4uBcE1mo5Jwm4dzpHt5dGGDgWt+oGtxZF+ccX1zlmh5aLK1tMamc5h9ep1rnJurdoWbbnd5mGqae3WYclFFfbNfandseohna2hjdXVxbldfVFlpUFNoSVdNWVRWXmlsb1ZoV05LQUpNS0hKT0FRS1BlY2ptZXRyc395fG51iXt7VFFPbF5pXGtpUmpoaWxobGZjZV9cXV1eaWJkaWt7X11kZ2NqZm9tZWlsZaGbiK6lg2Q/k6Gyqq6vtaKikICYq6Ojpo2mqJ+ep4SbmJeOl5CQnJOOiIN6anmHZYONf5igeXWPiYyBaYSFkYKMhZ2Neo6Ml6aUhJmqmI2Si4GJeoB9jHlwkKGGeoKVh4mWoJZ/lKWonJWVg2ZueJxsomR7caV3m5hwZ6aAlYp6pHqfloOXc553gYqVl4+5bpGKomJ9maCViG5yaaprdaBtb6Zgm2mLkGmWh5uWdaKBfppgjIaNdXCIYmigZZ5+aZt1b2NmiIFtcaJaXltioWxdiItuen1xcWSlbXiiZGenaJlzjJlwonBViZBvoF9mqFSLXlSYbm50a3ODbnFpbHl0a3BSWVdXZlpUbUlaUF1JWGlpc2pZbFdRUkZWXExYU2FVaWtfd3R7fXB8fHKDe4Bzdo2AhHZeUnJiZ2NwZ1BqaGhrbG5oZGdfXV5dYGpiaml2dV1cY2hjampzbWZrbWOco5eleWRzbYumraOpsLGmn4uAmKyen6eNo6KcpKOBlpmUjpqQjJiQjop7h3GAiGmLi3yYm3N1iX6Qe2SDh5SJipWZgnyJiJiokoGjrZGGkIuCin6AgI90aZCmhH2HlI2ImaCPiJOppp2IpniVm36kiJaLsZidkIKvl5+ldpSGeKlzpY+Emm6kooyShI2Du259pa+DhoWGk5Wcn3ylenKolaCWZ55+b6xkloqWk3eobaqigYl2iYN3q5GmiGuRsGt2s4ypa4qFbW2fnpKVYH6ri6p2fn6KpJ53n3yDpJWdoGqbiHisaJ+ujLZ0d76NpJNag6eOq2F2c3VyfHVxY2t/b2ltU1dbVmFiXWtNXVJeSl5tb3dgW3FZXGBbZ3Rlbm9yY3J0YHd6fnlyeYNzhH+Be3uMgYOAdmJ4ZGNucmRSa2dob2xyamZpYWBeXGFrYm1sem9cXGJpYmxqeG1nbG5ilaSpnIF/naOWqamdqKaupJmKgpism5+mipymnquehY2bkIeckYaSjYyMc4Z6iIRvjIR9mZN0dIZzkoJtf4uRh4aTjn17goeZp4+Ap6ePgY6JhZV2goeSb2yLqYGDjJSOiZ2fiYyUqqKfj4B1lJeIfoF5lK6if4GacY+Gd46Jgn17cqeMcn59epiWm4SQeXt/foeUlZOKdpCYnqCDe32Ja4yFW3l5cnpxaW5+kolxgHWBj5STcYeEgmWMf1+Bf4t3dHKUdW95bm2HbIOFXXVnd45lf4CEjKeZfXR7lWqJiHCBdn2Hd25uaI10enyYeIVcbFh5j2lveHNycHh4cF1sh25qZ1ZbYFddZmtkVmNVX1JgcHl5bWt3Zmtra3d9cnJ1dGFvdmJ0e4J4dXqCdYCAgIF4i4WDfXtuf2xkeW5eV25naHVreGppamVcYFpjamVtcXRuW1tibGRsbHluaGxvYY2Tt6imiaCimqajmKScq6KhhISYrZKeooqbqJuqmYOCnIx/l5SHjoqJjXGCfI99fo6Ee5iPdHKEcZWFe32Si4aGj4R5foCIm6WPfKiijIaQkIWVg4aOmHZyhKmGjpKdkImfnoiMm6efn6qDiY6Vmn5+iZatp4+RpY93b5uPgXiQbn6ohXF+lXFrcH2CoI2Ak46LaGxcgouLm5qejnOVi4hxdGuCd3SBWXJuh5GBfn+Mal1qZXuGhImAYGl4epp7goqBdYGFgWd3ioZqX29xgXVecYmAiI2klIVli42DbneLhHGGj3pxaGlmfIR7lltca2hudlt8eXh2b3Rzg2hdbotra2JaWl9bWWxxXF9hWl9eZnR/fHZwdWRra2t8fXN8eXVkbnVobXx+d3p8e3l6gIB+b4aKhHt9dH55c39oVFxxaWx2cHVna2hkXWFYa2hra3FybldbZW5sZ3N6b2hqbWCLiqmwoY+ioZqenZeemKijon6Dma6OoJWJnaORppWAfJiGfZKZiomHh4pyfYGMdoWLgYSXinJvgHKYhoN+koOEhomAeoGEjZyhkYOoooh5jpeJlYuLnJeEg3qtgpGYmpWKnp2HiKGqn6GipIuIk5uco5mVqqGnpp+SmoaUjHp2jY2Dp35/kpCSlJ2yppuVn5CNsZKXg6WMjJWan4mQm4KIkYprfI53eGWDh5GLfImehIeMkImJgYWEkHd8enSZoIiGiZ2JhJN+fYqAf3RucoSBfXaFhYmOpI+ChYyGgoyQjH2IjIqRhHpuhIV+eplrc2lhdIpxfnt4d3B4dYJdXm+HaG5fXlpdXVNoclZkXV1ibWh2fH10b3Bla2ppgH1ueYByanBxbGeBe3KCgHh/fX+Ee22CjIZ8enh7fXqDeE5jdmpzbnB6ZWtlY2JgW3RmcGdycW1VXWx0bWl5enFnaWtkjIecuZ6WoaCYlJiZlJikoZ58f5qsj5+Oh6CdjJ6WfXmVhHyOmYqGhISGbnmBgXOBh32JlIRta356l4eDg49+gIeEhXyIhY+cn5OIrKCEc4uQhpKRi52RfY17qoSOk5iWj5yXh4ebpZ+imZyFgpKamZiPmqefpZ2cj5V/j4h1e4aNhKV7fI6QkYaZq6KelJ2QjqmNkICdjIiTmZ6Cj5d+ho6Db3iGcnVgf4SQhnWNmYGDkIOHhX+FhJVueXZ0kqGKi4WahISMc3+Je3xxcXqHgnp3iI2DkaWOhYOOgIOKiYp3homLjX5ybYCCfW9pbG5oXnp/aX59d3Z3dnt4XWBxfm50YGNbXV9SZ25UZlteYmtpdnp/cmxtZGtqaIF/bHSCbGx1b3pwhnpuh4B2goB+hXZxgo2Ifnt8fH97gopgaHtqdWlpgmRqY2BpXGN1aG9idW1sVWNxeWVwentzZWptbYuJnraZoKOfkpGVmIuanp+ee3ifp5Gci4ellYyZmXp6jYZ9iZGEjIKCg258gHlzgYR9i5J9a2h9gpeJgYiNe32GhIZ8kIORnZ2TiamdgXGMi4yShqChioWMfKiRiZCSl5OWk3iNo5+gnZWYfoCQmpiSjJujoaOZlpCafYyDd3+Cjoagf36MjI98mKWiopOakZCmjI+BmpGJkpebfpOSfoeOgXV0gnF3YX6AjoZyi5Z9iIxyjH+ChYaPaHhyeIuYkY9/ln6IiXKBhnt8cHd6ioN5eI+LgpWkk4qFj3uGhoeEdoOEiYl9aHN+gXp8cm1saF9+dGl9dnZ0fXOBa19gdHZwd2RjWV9fUmtpVmZaYGFoanZ5gnFna2RsaGaAgGtufmhvcWx+eId7bIyBc4GBfoF0doKNhn98e4CBfX+PaXKDbnRpYYdobGJfcVZ0b2xtYHhobVdqdHZjdXp7cmJqb3qJjJ6xkaWknI6Pl4+GnKCbnX13paGOmICNo4uJmpZ5fIaIf4OJf4mCgX9yf3t0doOFfYqRd2djfoaXioKKi3h8gI2DeZeDlpmYjZehnH9wjIKRk4alm4eMiYOmloWTi5aXk5J2kZ2goZeTlXh+jpeXjZabnaSdmJKUmniNhIJ3g5WNnX6BiY2Mc5ejn6KUmY+PooyKgpaXg5KWmX6YjXyIjYF2cX5ue2SAfIuFcYeTgJGCbIeDgYCJhWZ1b3uGkZeLfJN4i4h7f4Z7enF9d4iFeIOPh4qXoZWBg4t2iISDgnd8g4qGeGF6en91gHlobWZif2preHR0d35yfWNkYXNudXJtYVphXltsZVNkWWFhaGt2eYZxY2tjbWZofINtaXVobnBpgH2Dem6QhnKAg4N+dHyDjIGAfnuCg358kG12iXN1bWWKbGpiYnVWhGlwbmB4Z2xianZwZnl8enFgcmyGhY+brZemp56NjJeHhp+Tl5l+eKqdi5p7l52MjJmQeXyBjH58hHyBg4F4dHl6dH2AhH+Ji4BkX32LlId/hIZ0fX6Lf32ZhpeVmI2kopmAc4d7k5GJpo+MjoqToJKEkpCUl5GLgY+Xn5qRj49yf42Rk4mdnZ6ml5eMlJVyi4yJa4SXj5l6h4iPiW+XnpuklJWLjJ6LhoGRnH+SkpWGmYh7ioqBeXF6bHVsfH+Lfm6Gk4OVeHGChH5+i4Blcml7f5WWg36NdJCHgniGfXV3f3yEgHuCi4KLk6OPeIOBdImHfYB0doKJhXFifHZ7cn5wY3BkZXxjb3B3c3l4dHVid2BwbHZub1xcX15ea15QXlljYWhudHuJbGBpZWtjaXeHbmdtaWttaIF9e3hvkIhzgISEfXSBhol7g316gYR9fY5yeot4eG1sh2poX2lyY4dncW9ld2dubGF5aWt9e3hwYXhti4CYmKmfpKidioqShoqdi5WYfnivmY2Yfp+UkZeUiHd+fIp9fIB3eICAcHV0fG+GfYGBin98YVx+j5GGgIOCc3uAh3qPkomTkp2VppyWgn2BfY6KkaOJjoqNmJqNhpKZlJaOioiMkpySj4uLbYSQj5GInpmioJaViJaQbYeYg2WFmI6TeomEkIpwlpuVo5OSiYuZjIF/kJ19ko6SjJmOe4qFh3NzdmxxbnV8inRuhpGPk3F1gXyBgYh8ZXBseXuYk3yDiHSQiYBzh3huf3yAhXuEi4eCi5SnjHqGe36LhXh+cXCBh4VmaXp1dnF8Y19xYWt0X3Fre3p5bHNxZnpeb2xzbXJYW19gYWxcUFdYZWNncXF/iGddaWlnYmdxjW9kamhlaWmBend1b46FdIGCg3t1goiFeIV8eISFen+Jd3+Le3tyeINqa19waHSAa3JvbXJnb2xlfGNugHp3cWx3d4p+opehp6Cmm4eLi4GPnIeTnXaCq5WTj4ihjZaUkIB0fHeFeHl/cnN7hmtzcHpui3aAgYdvcFtZfpGNh4B/f3Z1gICAoIeSi5SemqKVmHiKf4GNiJydio+GkpiWhYmVmpCXjIyNjYyciY6QgmyJi5GRip2WoZuXlISXhmmDooFlhJyJkH6Lg4uBd5OZk5+SkYmJlI1+fY6Xe5GMj46aknyKgIJvdnBsbW9we4ZpdIOPmYtxd4B1goiDeWZybnV/mI57h4R5k5B5dYdzb4h6hIp5ioWBho2bood7g3WCi394eW5sgYWDX3R1dHJyeVtfcWFwa19wa358cW5ua253YXBva3FtWVliYWJvWVFUWmZnY3VwhINjXWtuZGNma5JuYGdnX2hrgXVyc3CLgHV/g4B5doCLgHmFf3iIhneDhXyGi397dop/anFjfGOGfG5xbXRqaG9sdnhfcX95fHR1dICDfqSVmqyep5aFjYR/l5SDkKB2jKCUk4eMm42Wjot6cnl1gnByhXRxdohscG52bYh2g36AbW1VUYGrlIaCd393coN6g6GDk4KVlJqdk5t4knuDjJKjmZOOiZWZkoSHl5mMlIuJj4+HnYSQintyi4WKjoicmp+blZN/k31nhJuGZ4Wfh5GEkYKJcYORmJCcj4+MjI+Md3uRkHqOi4ySlox8iHyAa3dqbmtsbHt/Ynp+j5eBdnuBeIOMfXlnc2xzhpSLfoeFepKPcXmDb3WLeYiKeYh8gIqOnZyEe3p2got8d3FqbIKEe2F5cW9tc3RWX3BicmJgbW96cWlwZmd1dWlybGJ3ZV1XZmFgc1RRT1xmZV15cIh9YFxpcmJiZWaRal9oZVtncH5wa3F0in12fIaAdXZ+jHl7hYF4iINzhoV+jIyEfHmVeGZyaoNgiH5vb2t6YGpudH91X3R9eYd4dHOFfXigj5mwnKWOgot/g5qHgIyfgIualI+FiJiOj4+Ed3R3dIBxcIV0cHKEcGtpd26Dbn19bXRzUk2C38iS1pN7cHWEdoWhhJR3lpGZnZGZe5RzhZCeoZKTkYuTnJSGf5eWiI2Nh5GNh5t+jYB3eo1+iYyKnJucmpSSeYx1ZoeQhWuHooSRiJaDhmOMkZmPlYuXjIyKinF6lIh7joiKk5GJeoZ8f218ZXNva2x6eluBeZCQgXp+f4CGjnt7aXNqc4qPiYGFhHyUimt9fm1/in2KhXyEeYCNk5mYiXx1d4OPeHNtZ3GAhW5sdXBpanVuU19wZXBaYG1zeWhsa2NneXNwcWRgeGFgVmxfX3ZQTkxiZ2NdenGJdV1cZXZhYmVljmRhZ2JZaXNzbmtxdox8dHqGgnV2fYtzgIZ/e4l/comIgZGLiHx+mHZlc258ZYh+bnBsgFlsbnl5c2B2enuNdnJ3ind5noubrpqgkIKFd4iVfnyKnoiGoJKPhYyYhJOPh4F0eHB5cW+EcG1vf3NlZXlxfW15fWpoa2OkmsHcrvChc2x2hXeGpIaTcJeRlqGVnIGScoaLopeJjZaLkJ2Wg4GWkIWJj4CRi4mVfYZ6dX+JeIeEjpyamJiOj3aJdW2FiIl8iaKDkYmchIVei5OXi4+Jj4uLhIlte5aBfYiFiZGPhnaGfn5rfWR4dmpueXNYiXuSiIV6foGBhox/eWZyaX+JjYmCgX6LlYRrgXVtho+BjoJ9gXh+jpSRl490cneHjHVzcWd2eoRjdW5xY2p2aFJhcmhsVmBvdXphcmRgaX9xc29bZHJhYlduW114Tk1MZWdiXndziW5cXGR5Xl9lZYVgY2NfWWpza25rc3eMfXR3hIF4d3uJcYOEfX6Ie3SLiYiWhox/fpdzZ3VyeWyMe250cYFXcXp2eXJkd3mGjGl2gIlyf5yGmKebo5KEfXGMlHd5jJ6FhaGNj3yWjYCaiIR7c3dwdGpwgmxqbXx1X2F4d3txdXtnYGR869q1ycPch3NsdIJ3i5yKj2qZkZCelpSBiXGFiJ+NhIuWi4yYlHyNk4iDiZB7kIuFjoB/dXiDhHKIgpOclpSXhYx1hn1vg4GHhpihgpOMnoOJYYOUj4eKhoqOh4GHaXyTf32DhImOjYJyh39/cXdodnNqdHdsWo19k4OFfYCEgYSKgnZhcmuIgY6JgX5+kZB9bYFrd4WOhJCBe4B8fY+RjpSIbXB5jIV0a3Bsc3mCYXVqcF5sd2FSZXNpZlNgcXd1YXBgXWiEcnRrWGhoY2lZbVdcdUxLTGZnXmJzc4VqXFxleV5eZGd7YWRfXVlrb2ZvanR4in5zc4F+e3Z6iHOFg3x/h3Z3ioaPmYGMgnuTdWx3dnl4k3RueHt9WHmGcX9vZ3h3koJkdoaFcIqWhZmhmqKKiHRvkoxxd4+cfouaiYl9oH+EmoCBeHJ0bm9kcn9pZm14eFxgeXt7cXGAaWFnYX/Vto6RpnhvcXh9cZSSjohrmo+JnZOMhntph4uZhoGSkYaHmI58jY2BgYmNe46MfYiEenN6g3txhoCWmo6Tk4GIdIKFdYJ/iZGcnYaVj59+iGJ/k4eFiIWLjYCAg2d8kIB+f4KMj5B+bYN8g3VsbXd1dXh2bGOOgY+AhX59hn+EiX9wX3FwhHuOi4F7fpCIeXCDZXmBiIWKgHqEfH6SjY+Rgm1ueYt+dW1ua2x7f2RpbGtabndaU2pzaWJRY3N4bWNmXlprhG50YlxoX2VtYG9VXHBPSE9nZlxob3KAbltcY3NgXGNsd2VlXV1abG1jbWpzd4Z/cXB/fH10eIZ4hYJ8gId1eYmBk5V8iYZ2iIFweHl7hJNvbnuBd16DgHSBbWl6dJRzZ3OIfHGSkYOZn5ughoh2dpR/bXeUmH+IkISLjpp9jJp3fnZycGxqYXV9Z2JqdXpbYHh8emxwfmVjZ2dXnY9fcXOWvcWFd3KVi5GAdJiMh52UjYhza4iPlYB7lIuBhJuMfIqGfXyJjH6Th3SHhXZ2fYJxdYaBnpWGlI+CgnF+h3ODeoiWm5aGk42dgIhmfZOCgIaEiolygX1nfYt7eX9/h4uPfWmAfYR2ZnB5eHR4dGxrj4aLgot/eYOBhISAa15wdnp9i4eEe4COf35ygGh4gYWJhIF3gnt/lYqOi3xta3qJfHZ0b2hofndlXXJkWXB0U1Rvc2liTmh1eWdhXl1Zb4FwdFplY11rbmFxUFpsUkRUaGJabG9ufHBaW15tY1pjb3dkZ1xdYGtqY2xpc3eBg3Fufnt/dHWDeoSCfIKFdn6JgZaReIOKdIGIc3l5fo2Qb297gXFqgnl6fm5tfHaVa2p4hHRrk4yFnpigmYWIb36Mdmp5mY+AgoqClpiKeY+Wb3pzcWxqZGB0e2lgZnJ7W2FyfXpmcHphZWSOsbJ3S2JapdrSmHN8ko2Ren+WjIWako2Gb2yFkpF5eZOGgISZinyHgHl4iYqDlX9uiYZxc317anmGg6WRhJOMgn9ufoJ1gneEmpeSipOPlIWIcHqShH6DhImDb4F4aICFeHJ/f4OKh3xlfH6EdmNxc4BqenFvdZmNhoSLfHd5gIR6gmtccHxyf4eDiH2Fh3qIcYBtcIKFjYKCcYN3f5aKjIN3bWx9hH52emVoan5yYVp4W1pybk5YcnRnYEtud3ZiXlxbWXV+c3BYZ15ma3Ffb09YaVM/WWdfW3FraHpyXFtZa2VZY3B5X2hdXmVsaGZsaXF4f4dvbX99gXVwgnuAgX+Df3aBhYmXinGCjXF7hnx6eYSUjHVren9scH50f31vcnx7k3BvgX95ZpKKgqGYnZGDhmeHhHBnepeKf4CFgpqKgXyNjWl4cmxsZl9hb3ltX2JveVxkbIN6YXF2X2Rl1eu+izM6PouPgHJ5hoqQjniFmY5/lI6Nf25thYyLdX2Pf4WClYl8g3hudoeEgpV2bYeEa3V7dWV5g4SnjIOPjIN9bX9zdYJ4hJqPi4+RkoyMh397koh5gIWOg2yAcmmAfnhtfHuBioN4YnmEgnJkcWl/bnZydYKcjIGAhn90dn6Ac4FvW2t9c3iIgYp7hn98iHd5cGuHgo6CiHCAd32TiYp9c21qdoCAdXVdaWl5cVpXflRbcmZNW3NyZlxKcnlxXVtbWl52gHZpWmJbZ2ZvY2pOWGZRPV5mXV52Zl91cVtZVW9kWmRxelxoXmBnbWdqa2lweH2ObWqChIB5boF7fYF/gnp1goGMk4VwgItud32Ae3uIk4mAaXt9a3R8coZ7c3Z9f4x6eIR+fGuMjISbnZaMgoFtjX5saX+Pjnx+f4OUgn99iohrdXFnaWNbY2dzb2BhbHRhaHCJemFzdF5iY5ugkG5dNluwtnVqgIl+lId3iJmHdZCMindwbYWChnR5iXiJfZOIen9zZ3aIfXyWbm+FfWh2eW5leomFpYeAh42JfW19dH5/e4qXhoGSkJiJi4WKfJCKcXx+hnxpfm1rgHt5anp2goeBcmB3gn5yZHJndoNudXyGlZKCfYKAcHd6fHV+bVdtfXVziYCFdoZ0gol6d3JtiH+Of4NxfXt8kIeHeW1taGyCgXVuXWhndXJSXH1PXXJdT1xzcGRWS3R5a1hZWVpicoF2YV5dYWdkaWpmT1poTkFhZFxgd2FcdW1YWFN1Ylplb3NYal9iaGtnbWxpcHd8k2xphIp9fHB/fnuBf4J6d4CAiYuEcnuHb3F3hH97iY2PhGp+e254eXeKd314gIKHf4R+fnpthIyImKONhYR8dot6a22FiZN6fXuCkoCAfoqEcHJwY2ZeWWdfcHBgYWhwZmpviXRhdG9bYGRqdnt/v52opcm4coWEdJV+eomVhHSSjodyc3CEeoJzdYZ0iHeUiXl5cWR3hnl/kmhxg3Vmd3ZkanyEiJ6CgH+Ojn1xfnKDeH6QjoJ3lYyUkIiCiHuJimx5eoB1aHtpbH95c2l6doCDfWhgd4h9a2p0aHuBanaCjZGVf3x+fnF8dnx0fmJVdXtxcoeCgXuBcIaJd3hvb4KBi318d3x6c4yEgHVncGdsiIFycF1oY3RvTGZ3TV9vVlRadG5iUU91eWJSWFhdYnGDdFxiXWllZWNrZFJccUlEZGJcZHFeXHhoVVdWeF5cZm5pV2xeYWpnZW5uaHB3epNuaYiMeX5ze355goGCfHZ9g4iGg3B2g3Nud4KCfoiLlH9xgHx4enqBi3WDeH+BgYKEeoB1b32Ki5ueiH6Ge3eGfGh1h42Sen+AfImGhHaPgGdwbmBlXFhmWW1zYWFhcWxsaIluYHNpWF5jbYB3qdqpyIeIs3KKeXGPdn2JkYF7lIuAdXR1fnZ/b3B/bYV0lIZ4dWxgeYF5iI1lcYJuZ3VuW219gZCTgIF5kpJ9d3pshXR/j4qDcpWJkY+IhoZ7f4ZtdXd/bWh3ZW18dm1qd3Z/f3xgYniGemh1dmN+fGh1h4+Oln11gHZygHp9bYBZVnJ9b3OBhX1/d2uIhnN4anR/goJ8eXt3enGJf3tyZnNkbYuEbHNbamB2Zklvb01cY1hXVnltYlBTdXdZUVZYXmFyhXBdYWNtZWNeb2NVXnJHQmZfXmdpXVp7Y1JWXXZbW2drYVdrYGBuZmZscWhwdniPdGuOjXZ/d3h9d4GDgXt0fYOIiINvcX91cXV9hYGJjYt7d394hHx9hYd4iHx9gX2EgHt+cnZ4i46fjIl7ind1g3pefoeajXqHhHSGh4V3iXtibm1cYltbYVVqdGRgW2hvcGeHcWFxZldcY2t/fMrOh7qia25vi25yhXN+hox/e5OFenl0enV0empsdmOEdpKCdm9nX3yBeYuIZHGAampxY1hte4aciYOCcpeTd317bYZvgImKhnCWjpCIhoyEe3l/cnJwfmdocmNueHFqbHF3fXx5XWV6gHhpdXlngndodYiMjpV9c4dqb36AeG59XVdwfW1zfoh6gG5uin9wdmZ2fn9+gHV6b3lyhXp4cWVxYG2MgWtyWGtfeV1JcGxPWFZfVVZ8a2JPVHZzUlJUV15jdYZqXWFra2ZjWm9iWWNwR0FoXWFnX1xWfF5PVmZxWltqaF1YaGFfcmZqaHFncXN2h3lulYp1gHt3fnmDh4B1c3+FhY6DcHB7eHd1eYaFh4yGenx/dYt+fYaDhId/fn59hn98eHZ5dpKUn36NfYtudYB6ZISImIZ0kopvhYaCeoN1Y25qWV9bXV1VaHNlYFlkcnJngXJha2RXWl9pf3i+rnufuG5idIdpdX1ze4WIe36NgHd4c3dvenZlam9hh3WOgXNqYl59d3mLgmVwfWdra1tWb3iLpIGFf3CZknF/d3SAbH+Aj4Zyk4eMiIWJhX15dXNwaXpham1hbXZqZ2treXd6d1tnfXx5ZnJ+boV0ZnaGjYaWgHCLZ2t7g3RsdWJbbnpqc3qJeoBldIZ8bXBndH12fH5wemp5eX94dm9ka2BtiX1sblZqYXhWTGxtUFNQaU5ZfWhiT1V2bE1RVFVfaHeEZ15hcWlnYVdpXV1saUpEalpiZVdZVXlaTldva1ldbGVdWmVjXnRmbGVxZnNwdIF4cJmFdoB/eH98hYd9dXOCh3+Vg25zeXt7c3KFhoiJhHmBfXaPf32EiY6EgYN6fouDe3d8d3aanZh6ioOHanZ+fW2FhZWBc4+CcYaCf4KAcGZsZ1hdW1xbVGVwZV9YY3J1aXZwZGViV1tbaH9wb3KAc4plZnp/anZ3dHSFhniChXp3dHZua3pwYWhrZ4Z0jYNtZ15ffG96iXxobHdmamRWV3Nwjqd9hHx2lpBze3F7eGx5eo+DdZd7iIaEh4R9dXFzbWh1XW1pYGx1ZGdmaXpve3JZZ4F2dWhwgXiCd2N4hYt9lYJvjGtte4FxZnNlYGt4ZnB1iHl8YXWDdWlrcXR5b3h3cntlfX19dnVtY2RgbIZ8bWtWamNyVExrbFBNT3BHXnxmYU5WdWVLTlRYYWx4f2ZeZ3NqZWBXZFhjcl5MS2tZZGJWVFVzVk1Zd2VaX2xgXFtkZV93Z21ib2l0b3F+dXSZgXiAgXiAf4aEen12goN+mIVucnR8e3VxhYWOgoF6i3V0kIB9gZWOgIWEfH6Mhnp+gXZ7o6aKeYmGhWx1fHx1hIONe2+GdHqFfYKDdW5qaWVWXVtbWlNjbmVcWWJ0e2pobWhgYVdeWmmAaWtwgGhtYml7emt1dXVwh4J6gX53dm57aGp5al9lbmiBd5CEZ2VYYXZpfYZ5bmlvZmZdVVhvaI+od4F6fJCOeHRufW1xdHiNfneUdIaDgIaJdmpzd2hpb1xtZV5uc19nYmp4aHttW22Dc3Rqb4F+enhid4WFepGGc4hycHp/cmNxaFttdWRucYZ6d2FygG9naXhzcWt3dnN1YoJ5fXV0b2NiYmx9fGtrVWliZ1RMbmhQSFJsRWF5ZmJNVHJeSk1VWmZteXtmX21xamRdVmBWb29YS1RpWGdfWU5VbFRLXXpfXF9sXV1bYmVgemhsYW5wdm5vd3V6mH13gIF5gICHhnp5eoN9gZOEcXR0f3p2dIWIkH6BfZFsc5WBe4KfhX+HfYB+hoKAint1hKyff3qIiIRscoJ6doGAgnVviG99gHSKgGpvbmVkWF9aWlpVYmpnXFpfdYJpXm1sXGFXW1xrgWVydH1qal5teHdodXhzb4d8fn56dnNsemhpd2ddZHNneneSgGNjVGRvZoGEdnZmaGlhV1ZZaGSQqG9/d3+Kjnpwb3tmd215inp2jnGEfn+Ah25kd3RlaGldbGJecHBbZ19tdWV6aF10gG5ya3F7f3Z2ZHWGjHyJiIB/eHJ1fnRhcGxYcHFhbm+CenNjcYBrYGx6bmloeXdzcGSEdHh4dG9jYGNtc31qbFRpXl9VTHVjUUdXYkdjd2ZhTFRxWUtMWFlpbXd7ZWVucmZjWlheWXdmVUtdZFhpWFpJV2VRSWN4W11fbVteXGJkXn9pamBudHhtb252g5d5coGAfX+JjIZ+dXaGeIaMfXR1dYJ5enqCjI59f4WJanSWgXuKnX1+hXmAe358holzcY+ujHx8h5B+ZnGIenR+fXdzcIZtfH5tkHpjcHBiZV1lVlpZV2Nma2BdXXSGaFhwbVteWFpcbHticXd2bWNcbnR1aXZ3cm6GeX+Bendvb3RlaHRlW2d1ZnZ2kXlfXVNlZWqCgXN8YWJpXFRYXmNkkKVpeXSChZB4bG15Zndse4N5dIdygXl9eYBpZXdtYGdhX2tgXnVrWWZdb29iemVbd3xrbm9weHl0dWZzg5OAiYOJenZvcn1yYXhjWW5uYG9wgHpzZXGAZF5tdWhjZnh6cmxtgXNxe3FwYV1kbW99ZWlUaFlaVU55X1JKWllIY3VkYUpVblVKTFtXam1ze2RsbHVjYVlaXGJ3XFRMZF5ZalRXSFlhTkhqdlhfYW5bW19iY12FaWhibnh5bW9qdoGQeW6DfoCCkoiEgXZ1iXSMhnRxdnaBd319foyPgX+TfnB4loN9mZJ5gIB4eX5/c4eEc3CZont7f4mWeWV1iHpzeXdsdHB/bHl8cJJzXnBvYWdibFRbWldpZG1mXFxyiWVTcm5bWVhXYGx2Y2p1ampfW251c251dHVrh31/gXx3b25sZGlwY1trcmR0do5zXFdUZGBxf35xgVxhY15TWmFcZJOfZXJxhYOQc2tqeGxubnl5enGAdn9ze3p7ZGZ2aF5jW2FoXF93aFdiXnBoYXdhW3x2ampybnh0dHVqcoKWhId/hXZzanB8bWZ3V1tpbGFvcX95c2VvflpgcHBhXmlvfGtqcn1wb3ZqcGBaZGtte2FnVGdVWFNRd1xSUFlSSGRzYmBHVmxRSVBaVWtsa3xlbW9yYVtaWFptcVhTUGdYV2lUVUdaXE9Jc3VYYGNuY1hhYWFejGpjZW16eWxvaXZ5hntrhH2AhZl8goR5fYhtj4Zxb3Z6fXSCgn2Lj4ODl3R4gpSFgZ+JdYGAgXR/gnCHg3Zvopd0e4aMh3tmd4tvbnxwZ3hxe2xzdnONa150b2JnZmtTXlxWaGJsbFtccYxkTm9tXFZXVWdpc2hjdGVlXlpwdnBydnZ6bIh9f32Id5BzY2Rrb2Fcbm1jc3iHa1pUVmJjd3x8cIRcY15jVFtgWmOXlWNucIKFiXJpZnluZHJ1cXpreXR1b3t/dl9nc2RcX1diZFlidWVVX2BtZGFxXV1+b2hpc3F0cXV3bW2FlIOKfIVxcmdufG9xb1JaZWlkcHJ/dXNibHVVYnFqW15uZHtka3V8cHFxaW1fWGNpanheZlVkVVdRVm9YUVdUUEhlcl9hRlhrT0lZVFZuaWR8aWx5a2JXXFZcdWVUUlZpUllnVVRJWltQTnl3W19lbWpaYmFeXo9uYmdsenZub2l2dn9+bYSAfoaXe3+HgYp/a5OIcmd0gHt1gIN+iY5/jJNzfYqRhYefhnt/hoxzgIZzfYJ1bqSMc4KNjHd4bnqNYGV9cWd6dHltbXF3g2dkfG1kZ2doU2BfVWdgbG9cXm6OaE1pbGBVVlNvZ3NrZnhlZl5acnZvdHx5dG6Ke393nHt6a2FlbG1eYG5qZXF5fmdaVlhfbHh7em+DXmFdaFZYYFhknIhia3CBhnx2a2p2bFt1cGp5aXVybm98gXNZa25gWV5WY2RZZXFjVF9iaWFibFpgfmtmbHR1b214d21pho2AinuIbXFmcHtscWxhWF9nZm5ygHNyXmlsU2VwZFVibWF4YW90enRpbmtqX1dgZmh1XGRWYlZUT1lnU09dT1BIZXBdY0daak5KYEtYbWVfeGlvf2VgVV5UXnZcVVJgZ1BeYlVUS1xaUVp2dl1fZm1oWGNhW16OcWNoanhyc21ndnN5g3OCg3uIjn58ioiOeW6PinRsc4J0f3+IhYeShJWPen2Mj4iRm4SAfI2Ecn+Bc3R3cW6Tk5OTk5OTk5OTkpKSkpKSkpKSkpKSk5OTkpKSkpKSkpKSkpKSkZGRkJCPj4+Pj4+Ojo6Pj46OjY2Njo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo2NjYyMjI2NjY2Njo6Ojo6OjY6OjY2Ojo6Oj4+Pjo2NjY2Oj4+Pj4+PjoKAfnp6fX5+fX1/fn59fn5+fn5+fn+Af4CAgIGAgIB/gIGBgYOHjI6Ojo6NjY2NjY2NjY2NjZKSkpOTkpKSkpKSkpKSkpGRkZGSkpKSkpKSkpKSkpKSkpKSkpGRkZCQkI+Pjo6Ojo6NjY6Ojo2NjY2Njo6Njo6OjY2NjY2Njo6Ojo6Ojo6NjYyMjY2MjIyNjY2Njo6Ojo6NjY2NjY2Njo6Ojo6OjY2NjY2Ojo6Ojo+Ogn99ent8fn59fX5+fn5+fn5+fn5+f4B/gICAgICAgH+BgYCBg4aMjY6NjY2NjY2NjIyMjIyMkpKSkpKSkpKSkpKSkpKSkZKSkpKSk5KSkpKRkZGRkZKSkpGRkZGQkJCQj4+Ojo6OjY2NjY2Njo6Ojo6OjY2NjY2Njo6Ojo6Ojo6Ojo6Ojo2NjIyMjIyMjIyNjY2NjY2NjY2NjY2NjY2Njo6Ojo2NjY2NjY2NjY6Ojo6Cf3x6fHx9fn19fn19fX59fn5+fn5+gH9/gICBgYGAf4CAgICDhouOjo2NjY2NjIyMjIyMjIySlJOTk5OTk5OSkpKSkZGSkpKSkpKSkpGRkZGRkZGRkJCQkJGRkZCQkJCPj46Pjo6Ojo6Ojo6Ojo6Ojo2NjY2NjY2Ojo6Ojo6OjY2Ojo6OjY2MjIyMjIyMjIyMjY2NjY2NjY2NjY2NjY2Njo6NjY2MjIyNjY2Njo6OjoN/fHp8e31+fH1+fXx9fn59fn5+fn5/f3+BgYGAgICAgYCAgIOGi42NjY2NjIyMjIyMjIyMjJA/LzExMTAvb4eEhISEiF0tMDAwMC1GoaGhoaGhoJqZmpqampqKg4SEhIOEd2VnZmZmaFxDRERERENHZGhnZ2dnaE1CQ0NERENYaGZnZ2dmb4SDg4ODg4OLjIyMjIyMjY2NjYyMjY2NjY2NjY2NjIyMjIyNjY2NjY2OhX19e3t6fX58fH59fX1+fX1+fn5+fn9/f4GBgYCAgICBgICAgoWKjI2MjIyMjIyMjIyMjIyMjy0aHR0dHBpohoKCgoKGUxgdHR0dGTekpKSkpKSjnJycnJycnImBgoKBgYJyXV9fX19hUjQ1NTU1NDlcYF9fX2BhQTU2NTU1NE1hX19fX15qgoGBgYGAgYqLi4yMjIyMjIyMjIyMjIyMjY2NjY2MjIyMjIyMjY2NjY2GfH16enp8fXt8fn1+fX59fX5+fn5/f3+AgYCBgYGAgIGBgYGChYqNjYyMjIyMjIyMjIuLi4uRiYeHiIiIh46QkJCQkJCMh4eHh4eGiZKTkpKSkpKRkZGRkZGRj46Ojo2NjYuJiYmJiYmIhYaFhYWFhoiJiImJiYmHhYWFhYWFh4mIiIiIiImKioqKioqKi4uLi4uLi4uLjIyLi4yMjIyMjI2NjIyMjIyMjIyMjY2Njoh8f3l7enx8e319fX18fX19fX5+fn9/f4CBgYGBgYGAgYCAgYKFioyMjIyMjIyMjIuLi4uLi5GTk5OTk46RkpGJh46KkJKTkYuQjouNhYqRkZGRkJCQkJCPj4+Pj4+Ojo6Njo6Ojo2Njo2Njo6Ojo6NjY2Njo6Ojo6Ojo6Ojo6NjY2MjIyMjIuLi4uLiouLi4uLi4uLi4uLi4uLjIyMjIyMjIyMjIyMjIyMjIyNjY2NiX59eHh5fH18fX19fHx9fX59fn5+f3+AgICBgYGBgYCBgIGCgoSKjIyMjIyMjIyLi4uLi4qLkJCRkZGPhI6QkIaKj4WNkJCLhYiHio6IiZCQkJCQkJCQkI+Pj4+Ojo6NjY2NjYyMjIyMjIyMjIyMjIyMjIyMjI2NjIyMjIyMjIyMi4uLi4uLi4uLi4qKiouLi4uLi4uLi4uLi4uLi4yMjIyMjIyMjIyMjIyMjIyMjI2Lfnx3dnh7fXx7fX18fH19fn5+fn5/f4CAgIGBgYGBgIGAgIGChIqMjIyMjIuLi4uLioqKioqQkJCQkIqFjoiOhoaPiY2QkIiFhYWIj4mMkI+Pj4+Qj5CPj4+Ojo6OjY2MjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMi4uLi4uLi4uLi4uLi4qKioqKi4qKi4qKi4uKioqKi4uLi4uLjIyMjIyMjIyMjIyMjIyMjIt+e3d2eHt8fHx9fX19fX1+fn5/fn9/f3+AgIGAgYGAgYCBgYGEiYyMi4uLi4uLioqKioqKipCQkJCPhYOMjpCOiYyKjpCQiIWHh4iMiI6Pj4+Pj4+Pj4+Pjo6OjY2NjYyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIuLi4uLi4uLi4qKioqKioqKioqKioqKioqLi4uKioqKiouLi4uLi4yMjIyMjIyMjIyMjIyMin58dnZ4fHx7fH19fX19fn5+fn5/fn9/f4CAgYCBgYGBgIGAgYSJi4yLi4uLi4qKiomJiYmJkJCQkJCMhoyJjoeFjYmOi4yLhImIhYyIj4+Pjo+Pj4+Pjo6OjY2NjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyLi4uLi4qKioqKioqKioqKioqKioqKioqKi4uLioqKioqKioqLi4uLi4uLjIyMjIyMi4uMjIyKf353eHp7enp8fHx7fX1+fn5+fn9+fn9/gICAgICBgICAgYCBhIqMi4uLioqKioqJiYmJiYmPj4+Pj5CMjouPjIqPjI6MjY+KjoyLjYyOj46Ojo6Ojo6Ojo6NjYyMjIyLi4uLi4uLjIyMjIyMjIyMjIyMjIyMjIyMjIyLi4uLioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi4uLi4uLi4uLi4uLjIiAfXh5enl5e318e3t9fn5+fn5/f35+f39/gICBgICAgIGBgIGEiouLioqKioqJiYmJiYmIiI+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Ojo+Ojo6Ojo6Ojo6Ojo2NjYyMjIyLi4uLi4uLi4uLjIyMjIyMjIyMjIyMjIyMjIyMjIuLi4uKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLi4uLioqKi4uLh4B8eHp6eXt8fHt8fH1+fn5+fn9/fn9/f39/gIB/gYGAgIB/gYSJi4qKioqJiYmJiYmJiIiIj4+Pj4+Pj4+Pj46Pj4+Oj4+Ojo6Ojo6Ojo6OjY2NjY2NjY2MjIyMjIuLi4uLi4uLi4uLi4uLi4uLjIyMjIyMjIyMjIyMi4uLi4qKioqKioqKioqKioqKioqKioqKioqKioqKiYmKioqKioqKioqKioqKioqKioqKi4uHgHt5eXh6fHx6e3t9fX5+fn5+f39+f39/f39/f3+BgYCAgH+BhIiLiomJiYmJiYmJiIiIiIiOjo6Ojo6Pj46MjI+Sj5COjo6Ojo6NjY2NjY2NjY2NjIyMjIyMjIuLi4uLioqKioqLi4uLi4uLi4uLi4uMjIyMjIyMjIyLi4uLi4qKioqKioqKioqKiomKiomJiYqKioqKioqJiYmJioqKioqKioqKioqKioqKioqKi4aBe3h5eHp8ent7fH19fn5+fn5/f35/f39+fn9/f4CAgYCAgIGEiIqJiYmJiYmJiIiIiIeHh46Ojo6Ojo6Ojo+MkJOQkI+Ojo6NjY2NjY2NjYyMjIyMjIyMjIuLi4uLi4qKioqKioqKi4uLi4uLi4uLi4uLi4uMjIyLi4uLi4uLioqKioqKioqKiYmJiYmJiYmJiYmKioqKiomJiYmJiYmJiYqKioqKiomJioqKioqKhYB6eHl5fHt6ent8fH1+fn1+fn9/fX9/f35/f39/gICBgICAgYSIiomJiYiIiIiIiIeHh4eHjY2Ojo6Ojo6Pj4+PjoyNkI2NjY2NjY2MjIyMjIyMjIyMi4uLi4uLioqKioqKioqKioqLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4qKioqKioqJiYmJiYmJiYmJiYmJiYmKioqJiYmJiYmJiYmJiYmKioqJiYmJiYmJioqFf3l6eXh7e3p7fHx7fn5+fX5+f39+f35/fn+Af3+AgICBgYCChIeKiYmIiIiIh4eHh4eHh4eNjY2Njo6Oi42Nj5WPiYyPjYyNjYyMjIyMjIyMjIuLi4uLi4uLi4qKioqKioqKioqKiouLi4uLi4uLi4uLi4uLi4uLi4uLi4uKioqJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYR+eXt5ent7ent9fHt+fn59fn1+f35/fn9+f3+AgICAf4CAgICEh4mIiIiHh4eHh4eHh4aGhoyNjY2NjY+MjImKj42IjJGPjY2NjIyMjIyMjIyLi4uLi4uKioqKioqKioqKioqKioqKiouLi4uLi4uLi4uLi4uLi4uLi4uKioqJiomJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJg355e3p8e3p7fX17fH9+fn5+fX5/fn9+f3+Af4CAgH+AgH9/f4OGiIiHh4eHh4aGhoaGhoaGjIyMjIyLiYyKiIeJhoyOjJCMjZGOjIyMi4uLi4uLi4uLi4qKioqKioqKioqKioqKioqKioqKiouLi4uLi4uLi4uLioqKioqKiomJiYmJiYmJiImJiYmJiYmJiYmJiYmJiYmJiYmIiImJiYmJiYmJiYmJiYiIiIiIiYmCf3h7e3t6enx9fHx9f39+fn19fn9/f39/f4F/gIB/gICAgICAg4aIh4eHhoaGhoaGhoaGhoWMjIyMi4yOjoyKioeEiIuKjIuNjo+Li4uLi4uLi4uLi4uLioqKiomJiYmKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiomJiYmJiYiIiIiIiIiIiImJiYmJiYmJiYmJiIiIiIiIiYmIiIiIiIiIiIiIiIiIiIJ/eHp7enp6e3x8fX1+f35+fX1+f39/fn+AgICAf3+Af4CAgYCDhYiHh4aGhoaGhoaFhYWFhYyMjI2NjJCSjI2Ii4mJi4uLi4mLjIqMi4uLi4uLioqLi4qKiomJiYmJiYmJiYqKioqKioqKioqKioqKioqKioqKioqKiYqJioqJiYmJiYmIiIiIiIiIiIiIiImJiYmJiYmJiYmIiIiIiIiIiIiIiIiIiIiIiIiIiIiHgXx4e3x5enp8fHx8fX9/fn59fX9/f39+fn+Af4B/f3+Af4CAgIKEh4eGhoaGhYWFhYWFhYWFjIyNkY+PjZGJjIaJjIuIiImMiYeNjo+NioqKioqKioqKiomJiYmJiYmJiYmJioqKioqKioqKioqKioqJioqKioqKiYmJiYmJiYmJiYmJiYiIiIiIiIiIiIiIiImJiYmJiYmJiIiIiIiIiIiIiIiIiIiHh4eHh4eHh4WAenl9e3t7enx8fHx+f39+fn19f39/f35+f4B/gH9/f4B/gH+AgoSHhoaGhYWFhYWFhYWFhISLi46PjoyLj4iHiYmMjYWFjo2KiYyNi46KioqKiomJiYmJiYmJiYmJiYmJiYmJiYmKioqKioqKiomJiYmJiYmJiYmJiYmJiYmJiYmJiYmIiIiIiIiIiIiHiIiIiIiIiIiIiIiIiIiIiIiHh4eHh4eHh4eHhoaHh4eHhH55eX16enp7fXt8fX5+f35+fX5/f39/fX5/f3+Af39/f39/f4CChIaFhoWFhYWFhYWFhISEhIuLjI6MjI2Lh4mIiomHgoiNjoiKi5GTj4uJiYmJiYmJiYmJiYmIiYmJiYmJiYmJiYmKioqKiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiIiIiIiIiIeHh4eHh4eIiIiIiIiIiIiIh4eHh4eHhoaGh4aGhoaGhoaGh4eDfXp5e3p5enx8e31+fn5/fn59fn9/fn9+fn+AgICAf35/f39/gIKEhoWFhYWFhYSEhISEhISEioqOjYmIiIqKh4iHiomIioiIh4qGi5GPiomJiYmJiYiIiIiIiIiIiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmIiIiIiIiIiIiHh4iIh4eHh4eHh4eHh4eHh4eHh4eHh4eHhoaGhoaGhoaGhoaGhoaGh4J8eXl6eXp7e3t7fX5+fn5+fn59gH9/f39/f4CAgH9/fn9/gICAgoSGhYWFhISEhISEhISEhISKi5CPiYmJi4qHh4WHiYuKiYSLjYmOjYmJiYmJiIiIiIiIiIiIiIiIiYmJiYmJiYmJiYmJiYmJiYmJiIiIiImJiYmJiYiIiIiIiIiIiIiIiIeHh4eHh4eHh4eHh4eHh4eHh4eHh4eGhoaGhoaGhoaGhoaGhoaGhoaGgXt4enp4e3x7e3x+fn9+fn5+fX1/f39/f3+Af4B/f39/f3+Af4CChIaFhYSEhISEhISEhISEhI+Qj4+IiYuIhoeIiYuLjIuJioqNio6Oj4iJiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIh4eHh4eHh4eHh4eHh4eHh4aGhoaGhoaGhoaGhoaGhoaGhYWFhYWFhoaAe3h5eXh4enp8fX1+f35+fn59fn9/f39/gIB/gICAf39/gIB/gYKDhoiGiIaDhISEhIODg4ODkpKOioeKi4qLh4uNiYqJi4iHiouIio+SioiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIh4eHh4eHh4eHh4eHh4eGhoaGhoaGhoaGhoaGhoaGhoaGhoaFhYWFhYWGhn96eXh4eHl5eXx9fn5/fn5/fn1+f35/f3+Af39/f4CAgH+AgH+BgoOHjo+PjoiHhIWFhoaFhYWSkI6KiYmIiImKioiIh4aKjIiHiYmOkJGNh4iIiIiIiIiIiIiIiIiIiIiIh4iIiIiIiIiIiIiIiIiIiIiIiIiIh4eHh4eHh4eHh4eHh4eHh4eHh4aGh4eHh4aGhoaGhoaGhoaGhoaGhoaGhoaGhoWFhYWFhYWFhYWGf3l4d3d3eXp5e3x9fn9+f35+fn5+f35+fn+Af4CAgICAf3+Af4GBg4eOjo6Ojo6Mjo2OjY2MjZCQjomHhoiJiYeIiouIiYyJiYaKjY6PkYuIiIiIiIeHh4eIiIiIiIiHh4eHh4iIiIiIiIiIiIiIiIiIiIeHh4eHh4eHh4eHh4eHh4eHh4eHh4aGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaFhYWFhYWFhYWFhYZ+eXd5d3d6eXl8e31/fn5/fn5+fn5+fn9+f4B/fn+Af39/f39+gIGEiI6Ojo6Ojo6Ojo6Ojo2NkJGOi42JjIiIiYaHiYaIioiHi4yLjpCQiIeIiYmJiIeHh4iIiYmIh4eHh4iIiYiIiIiIh4iIiIiHh4eHh4eHh4eHh4eHh4eHh4aGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoWFhoaFhYaGhoWGhYSEhIWFhoaFhIWFhX55d3l2eHl4e3x7fn5+fn5+fn5+fn5+f39+f39+f39/f35/f3+AgYOGjY2Ojo6OjY6NjY6OjY2Qj42Ni46KhoiKhISLiYeDhYSDi4mLj42JjI6QkI+NjYyLjY6Pj42NjI2Nj4+Pjo6MjYyMjY2KiYiHiImHh4aHh4eHh4aGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoeHiYqKiIeJi4yNjo2LiImLi42OjYyJiImMgHl3d3Z6eXh7e3t+fn5+fn5+fn5+fn5/f39+fn5/f4B/f4B/f4CBg4aMjY2NjY2NjY2Qj4+Pj46NjI6KiYuMjIeFiY2Lh4aIh4aHh4uNjo6Pj4+Pjo+Pj4+Pj4+Pj4+Pj4+Ojo+Pj4+Pj4+Pj4+Oj46Oj46Mi4uJh4eHh4aIhoaGhoaGhoaGhoeLiYeHiIiLjY2Mi4yLjY2Ojo+Ojo6Pj46Ojo6Ojo6Ojo6Njo6NjY2AeHZ4eHp4enx6fH5+fn5+fn5+fn5+f39/fn59fn9/f39/gH9/gIGDhoyMjIyMjY+QkpOTk5KSjYyMjIqHioyKh4eJiYWCiouIiYWJjpCNjo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6NjI2NjI2LiYaHh4eHiYqLjY6NjYyNjY6OjY2OjY2NjY2NjY2NjY2NjY2OjIyNj4+OjY2MjIyLi313dXd5enp7e3p+fn5+fn5+f35+fn5/f39+fn1+f39/gICAf3+AgYOFj5KRkJGSk5OTk5OTkpKLi4uLiomMiouLiYuKhoeOjYiIjI6OjIuMjIyNj46Njo6Ojo2NjY2MjY2NjIyMjIyMjIyMjY2NjYyMjI2NjYyMjI2NjIyNjIyMi4yMi4yMjI2MjIyMjIyMjIyMjIyLi4uLi4yNjY6Sk5OSkpSRkJOVlZSTk5COjo6Oe3Z2d3h6ent7e31+fn5+fn5/fn5+fn5/f35+fn9/f39/gIB/f4CBgoSNkpKTkpOSkpOTkZKSkoqJioyJi4qJjIuKioiHiYqKi4mKjY2Mj46Nj5KUlJOUlJOTkpGSkI+Ojo2NjY2Pko+OkZGOjIuKioqLi4qKi5CPjoyMjIqKioqKioqKiouKioqKi4yLi4uMjIyKiouLi46RkpOTk5SUk5STk5SUlJOTk5KSkpKSk5F6dXZ2eHt7e3p6fX5+fn5+fn5+fn5+fX5/fn5+f39/f3+Af39/gIGChIuRkZGRkZKSkpGRkpGRiYmIiIqMiYiJiYuJhoSJhoyKh4ySkpKTk5OUlZWWlZWUk5OUlJSUlJSUlJSVlZWVlZWUlJOTkY+QkZKQjoyRlZWVk5KSjo+QjYqKi4qKi42OjY6RkpCRkpKSkpGRkpKSk5OTk5OTk5OTk5OTkpOSkpKSkpKSkpKSj3h1d3l6e3t7ent9fX1+fn5/f35+fX5+fn5+f39/fn9/f4B/f3+AgYKEi5GQkJCSkpKRkZGRkZGIiIiIi4uJg4eLi4yMiIeHjYyNkpSSkpOTlJWWlpaVlZSSkpOTlJSUlJWVlZaXlpaWlpWUk5SUlJSVlJSUk5OVlZWUk5KTk5OTkJGSkZGSk5OTk5KSkpOSkpKSkpKSkpKSkpKSk5OTk5SUk5OSkpOTkpKSkpGRkZGPdnJ3enp7e3t8fX59fX1+fn9+fn9+fn5+fn6Af39/f3+Af3+Af4CBgoSKkJCRkZGRkZCQkJCQkIeHh4eIiIiFi4+KjI6Njo+OkJWUk5OTk5SUlZWVlJSUk5KSk5KTlZSUlZaWlpaWlpaWlpSTk5OTk5OUlJOSk5SVlZSTkpKSkpOTk5OTk5OTk5KSkpKSkpKSkpGSkpGRkZGRkZKTlJSUlJSTkpGRkZGRkZGRkZGRkYx0c3d6ent7e3x9fX1+fX5+f35+fn5+fn5+fn9/f39/fn9/f39/f4GDhIqQkJGRkJCQj4+Pj4+Ph4iKi4yNjYuOj42Mjo6RkpGSk5OSkpKSk5SUlJOSk5OTkpKSkpOTkpOTlJWVlZWUlZWUk5OTk5KSk5OUk5KTlJSUk5KSkpKSk5OTkpKSkpKRkZKSkpKSkpKSkpKSkZKRkZGSkpOTlJSUk5OSkZGRkZGQkJCQkZCRinN0dnp8fHp7fXx9fn59f35/f35+fn9+f31+f39+fn59f39/gH+AgYKDipCQkZGQj5CPjo+Pjo+Oj4+Pj4+Pj4+PkI2OjpCRkpKSkpKRkpKTk5OTkpGSkpKRkZGSk5KTk5OSk5STk5OTlJOSk5OTk5OTk5OSk5OTkpKSkpKSkpKSkpGRkZGSkZCRkZGRkpKRkZGRkpGRkZGRkpKSkpKSkpKSkpKRkJCQkJCQkJCQkJGGc3V2e3x8e3x9fX1+fn1/f35/fn5/gH9+fX5/fX5/fn5/f3+Af3+BgYGKkI+PkI+Pj4+Pj4+Pj4+Oj46Oj4+Pj5CQiI2PkJGRkpKSkpOTk5OTkpKSk5KSkZKRkZKSk4iFk5GRkpKSkZKSkpKSkpKTk5KRkZKTkpGRkpKSkpKRkJCQkJGRkZGQkJGSkZGRkZGSkZGRkZGRkZGSkpKSkpKSkZCRkZCPj4+Pj4+Pj4+PkX9ydHh8fHx7fHx9fX5+fn9+fn5/f3+AgH99fn5+f39+f39/f4CAf4GBgYqPj4+Pjo6Ojo+Pj46Ojo6Ojo+PkI+Pj4+GjpCQkJCRkZGRkZGRkZGQkJCQkJKCgpKQkZGOdYaRkJCRkZCQkJGRkZGRkZGRkJCQkZGQkJGRkZGRkI+PkJCQkJGRkJCQkJCRkJCQkJCQkZCQkJCQkJCQkZCQkJCPj4+Pjo+Pj46Ojo+Pj4+PeHJ2eXx9fHp9fH19fn5+f35+f39/f4CAf35/fn5/f35/f39/gIB/gYGAio6Ojo6NjY2Ojo6Ojo6NjY2Oj4+Pj4+PjoiQkZCPj4+QkJCQkJCQkI+PkJCPkIhwhZCPkHx1iJCPj4+PkI+PkJCQkJCQj4+Oj4+QkI+PkJCQkJCPjo+QkJCPj4+Pj4+PkJCQkI+PkI+Qj4+PkI+PkJCQkI+OkI+Pj46OjoyMjY2NjIqDiYhzc3Z4fX58eX18fX1+fn5/fX5/fn9/f39/f4B/f39/f4CAgH+AgH+BgYCJjY2Ojo6Ojo6OjY2OjoyNjY6Ojo6Ojo2NiJCRkI6Njo6Ojo6Ojo6Pjo6Ojo6PjHNvio+KcniHj46OjY6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Pj46Oj4+Pj4+Pj4+Pjo+PjY2MjYyNjoyLi4mJiYiFhYSDgoKEgnR5fXp4dXJrZWltb2xmZmdncHNzd3l9fnl6e3x9fX1+fn59fn9/fn9/f39/gIB/f3+AgIGAgIB/f4CBgImNjY2NjY2MjYyMjIyMi4uLjYyMjIyMjIyGj5GRjIyMjIyMjIyMjIyMjIyMjIyNd217j4JzeIaNjY2MjIyNjY2NjYyMjI2MiomKi4uJh4KAh4iEgXt6gH57fXx8fXlzcnJycnV1cG1ramppZ2NkYV9bXF1eWFVXWFlTS0VJSkpLTE1PT0tgdHR3eX19eHp5e3x8fX5+fn1+f39/f35/f4CAgH+AgICBgYCAgICAgIGAf4OEhYSFiIuLjYyMjIuLi4yGiYqKioqKh4OOkJGNiouLi4uMiYmKioqKiouLi4dzbm+Ee3V2gIWDhIeJiYWCg397fHl6e3pzcHFxcW1samdsbWdlZmVmZGNlZGVkZWVlZWRkZGNhYV5dXFlYWFdUUFFSU1JTTU1KSUZFSEpHR0hHR0xOSWdzdXh6fXp4d3l8fHx8fn5+fn9/fn9/f39+f4CAgIB/gICBgICAgICBgYFnXmBjYWNucX17ent/fXd8fHZ4ent4eHpvcXt4eXt8e3h3e394dXd0dHZ1dXZ3dGJeZF9ibHFmaGtsbm9tamlpaGhlZWRkZF9gYWJgYF5dWVhaWltdXV9gX2BfX19gYmFeXl5eWVldXF1bV1dWUlRSU1NOUUpISUZERUhMTEhGR0lLSklNbXJ0eHp7end3eXt6e3x+fn1+f39+f35/f35+gIGAf3+AgIGAgICAgICCgWdYW1pZXFtcY1xaXF5ga3FtcHBvbm5vbmtpbmxrbG9qaWtraWpraWZmZ2dnaGhiXWpsXWZmZ2VjY2JhYmBgXVhbW1dYV1RWUVBUU1NNSkxLTExOTk9UWFhXVVVUUlBQTU1QT05LTE1QUU9MTEpHSUlHSEhJSEhIR0ZHSElKSEhISUlISVZwc3V5ent5dnZ5enp7fH59fX5/f35/fn5+f3+AgX9+f4B/gICAgICAgIGBbFtYVlZWWVlaWVlYVVZoamxubmxra2poaGloZGVkYlxiZl9fYWNfXF9dYF1eWlpqd21ibnJqYVlZX1tYV1NOTUtLS0tMSUtNTktKS0tMSktQTEtLRkdHSUlGR0lISUZFSEdGRkVERUVEREVJSUlHSEdIRkZLTUtJSUlIR0hLTU1LTExMVXFzdnl6e3h2d3h3ent8fn1+fn9/f39+f3+AgIGAfn5/f4CAf4CAgIB/gYJoUlRVVlNVV1lZWVdXV1tbYWNfXlxbWFZWWVZSVFJRUVVUU1NUUE1KTU5QUk9NW2tybGFtdXJmUVFTUFBOTk9NSk1MS0xKSktLRklJSkxJR0pISUlFR0dGRkVFSElKR0ZHRkZHR0hKR0dISEpMSkpLSUlISktLSkhKS0pISUtMTU9QUEtUdHN1eHp6eHZ2d3d6enx+fX5+fn5/f35+fn+AgYB/f3+AgYB/gICAgH+AgmlQUlRXVVRWWVdYWFpbVFRTUlBRU1FRUU9OTlBQUU9MTlBPTk5NTEtNTk5QTU5dY29rWWlzdXBTTU9QUFBPTk5PTk5QTk1NS0lISEpJSUlJR0ZHR0dJSkhJSEhJSEhHSEdISElISUxLSklISkpJSkpIR0pMS0pJSUhKSktMTk1NTU9RTFVzcnN3enl3dnR2eHp7fX19fn5+fn9+fn5+gICBgICAf4GBgH+AgICAgICBbE9PTlRZVVVdW1lXV1hOTUpKSUZKT0xKSkdJSk1NS0pMTUpHSUlJSktLRkJGSFViaGtvcG9tbFpMTE5NTk9NTk9MTk5OUFBPTE1MTk1MTEpJSEdJSElISElJS0xLS0pJS0pJSklJSUlJR0dKSUdJSUpKTk1OTEhJSklJSk1PT01MT1JOWXBwcnd4d3d0c3R3enx+fX5+fn5+fn5+fn9/gICAgICAgYCAf39/gICAgIFvS0pNTlFOTlVXVlZSU0lFQ0VFUkREQT5CP0RAQD5CREFAQURHRkVIRUNGR0hNWmdoZ3JubmhmZGBeXlhMSklKSUlLSkxQTk1MTU1MTU1NTElIREZGR0ZGRklKSUlLSkhMSklKSkpJSEhKS0tIRkdJSklLTU5OSktPTUxLTU1PUE5QT1BgcG9yd3h2dHJzdXd6fX19fn5+fn9+fn1/gICAgICAf4CAgIB/f3+Af4CAgXNQUE5OUE1KS1BSUE5RQ0RCQUZRRT1DPT9FSDk6Oz0/PTxBRkA+Ojs+SVpdWlxlbG5rb21tbGtpaGtkU0dFRUZFR0dHR0pHSEpLR0NER0pHQ0RFQUFDR0hHSEdISktKSElMS0lISktLTU5MTUxMSkpMS0lLTU9PUFNRT1BQTk9QUlFNUGdwb3N2dXRycXR4eX19fX1+fn5+f4B+foCAgH9/gIB/f4CAgH+Af4B/gICCdlRVUVFQT0xNUFBOT09BQkFAQkE/Oz48Pj8/Ozg5ODs7OkA6Oz48Ozs7PUtbaW1ub2pvbWtpbG1mUUdFREdJSEM/QEBAQUFCQUE/Pjw9PkFAQD8+P0BFR0dHSUtMTk1OTUxNTUpLTVBVU05MTlFOTk1OTE1NTk9OTk1LS05OTk1OTkxUbnBwc3R0c3Fydnh5fX19fn1+fn5/gH5+gICAgICAgH9/gICAgH9/gH+BgYJ4UVFSVFJTUVNTUVFST0BAPT4/PD8+QEE/PT45Ozo7Ozk5Ojg4Ozw5Nzk7Oj1IY29zbW5samtoVUM+Q0ZEQkNDPzs+PkBDQ0E/Pj9BPkBAQj9APD9CQEFDRUVFSktQT1BPTU1OTExMT1JRUFJOTExPTUtOT0xMTEtMS0tKS0tKTU1LS1xxcXF0c3RycXR4eHl9fn1+fn5+f39/fn5/gIGAgH+Af4CAgICAf4CAf4CAgXxSTU9RUFFSUlRSU1NOPDs8Ozs7P0BBQkA9PDk8PTw6Nzk6Ojk3OTo6Nzg6OTk9SmBzdHBnVD86Oz1AQUA9Ozs+PD08QEJDQT9BQkE9Pj09Oz0/Q0RCQD9BREJFR0pKSkpKTE1MTExNTExOVVNLTE1USVBKSU1KSUpLS0pJSEdKS0lKZnJxc3RzdXJydnl6e31+fn5+fX9+f39/f36AgICAf4CAgICAgIF/gIF/gYCBgFZMTlBQTlJRUFBRUU44PT88PDo9PkFAQT8+PkA/Pj48PT0/QD09PT9DOz09Pjw6Qmx8aj85Oz49Pj9AQEA+P0E/QEBBQEBAPT8/PTw6Oz09PD9AQUJCQUBCREZGRkdGR0dISUtMTExLTEtKS0lKSk1MTEpMS0lISUxMSklJSElLR01tcHF1dXR1c3V4eXl8fX5+fn5+fn5/gH9+gIB/f39/gH+AgYCAgYCBgICBgYCCYUtPT05OT1BPT1BQTzo8Pjw9Oz8+PkFBPz0/Q0NEQT89PkBBP0A7W25APkRFP0BBRF9kOz09Ozo9PkFBQD5AQD9BPz89PD48PTs7PD0+QUA/QD5AQ0NEQkRFSEVFR0hISEdGSUpJSUlJSUhKSkpKTEtKSklJSEhKSktMS0lLSkpHVnBwcXNzdHR1eXp7fHx+f35+fn5+f39/f39/f3+Af4CAgICAf4GBgICAgIGBgIJtTFBRTk9QTk5PUFBPPjw8PT4/P0A+QEA/Pz9CRkQ+PDw9QD04Ojptd0k4Ozo9PkE7SGQ9PD08ODo7Pz89PD07PEA9PTw8Pjs9PD0+QUBCQUBAP0JEQ0RFRkZGQ0VHSElJSEhJS0tMTUpKSUpNTUpLSktJSEhISEpJSktKSk5MSUlfcHBycnJ0dXZ6e319fH5+fn5+fn5/f35/f36AgIB/gICAgICAgYGAgICAgIGAgnZNTk5NTk5MTE5QT0w+QTw8PT8+QkM/PkFBQUJBQFlSPD09SUxGRXV2Tjc4ODo7Pj9XakE7PDw6Ojs+Pz89PTk6Pjw9Pj89Oz4/QEJDQkJDQ0FCQkFCQkRCQkRCRENGSUdGRkhJSUtNSklKSktMSkpJSkVESUlGRkhISUpKTEpGRmdwb3FxdHZ1d3t8fH18fn59fX1+fn9/foB+fn+AgH+AgICAgICBgYCAgICAgICBek5JS0tMTExFSUxOTTw/PDw9PkBAQUE7QkNCQ0BDc3lJO1x/g396fHdXPD0/PT0+RWh0TDo9Pj89PT5BQ0A8OTtBPz4+QT07P0JAQkNCQENDQUNBPT0+QD0/QUFBQENFRUBAQ0JDR0dFRENGRUZGR0VEQEFHR0ZDRkRHSEpHQz5IbG9wcHF0dXZ5fHx8fHx+fn1+fn5+fn5+f36Af3+AgICAgICAgIGAf4CAf4CBgIF+UUhLTU1NS0pLTE9RQD8+PkFBQEBBR0FCRENFQUdyeWtig4SDgoOAfV4+QENAQD1Kc3tZOj1BRUFCQkZIQz08QEREQUA/Pj1AQT4+Pj88PkBER0VAPkBBP0BDRkVDQkNDQEJEREJERUFCPkFCQkFCQEA9QUJDRENDQUNFR0E/PVZwcHFwcnV1d3p8e3t7fX9+fX19fX1+fX5+fn9/foB/f4CAgICAgYCAgIB/gIGAgX5SSEtNTUxLS05OUlVEQkBDQ0FBQkBCQ0BAQUFARW90fYKCgYN+fYR2TUFDRUA/Pll7gF0/Q0VJSUxRTU1LRUNGR0dFR0VFRURFQ0E/QD4+QkZKSkdFRUdGRkpOTktKSUdHSEtMSUdHQ0REREVEQUJCQ0BDREVEREVERUZDQkFEZW9wcXF0dnV4e3x6fHx+f319fX19fn59f4B/f39/f39+gIGBf4CBgICAgH+AgICAfVJJSUpKSEpKTE9SU0dGRUdIREdIREA+PDs+QEVFaHN9gXx/hH55hXJDREVEQ1d1hoeHflhHSEpOaVpPUE5JR0lISElJSEhHR0hIRUNFRUVGRkhKSkZFR0lKTU9PTU1LSktKTU5LSUhHSEhIR0ZFRkZGREZIR0VFSEhGSEdIRlFubnBxcnV2eXt7e3p9fX5/fX19fX1+fn1/f39/fn5/gH+BgYGAgICAgICAf4GBgIB8UEhHSElGR0lKTU5OSkxJSUpLTE5KRkNBQkNGSkdge4B/d3+EhYOEiWxBQVZ0h4mHh4eIg1dIS1ZzXlZRS0hISEhER0dHR0ZIRkhFQ0RERkVEREhIQ0NDRklLS0xMTExMTElKS0pKSUlJSEpISEdISUhHR0hGRkZISklJSUlIXW9vcXJ0d3d6e3t6e319fn59fX19fX5+fYB/f39+fn+BgIGAgYCAgICAgIB/gYCAgHxNR0ZIRkVGR0dKS0pMTUxLTU5NT0tJSEhKS0tMTE5bfIKCg4OFhoaIhFZshIeGhoaHiIiHfFBKWW5lXl1UR0NNRkBAQ0NDQ0ZGRUJAPj5AQUFAQkQ/Pj9ERkhERkdJSklKSEhIR0lJSkpJSEZKSkpKSUpJSkpKRklMTEpKS0tmb3BzcnR2eHl7e3t8fH1+fn19fX19fn59f39/f35/f4CAgICAgYCAgIGAgICAgICAfU9GRkdGR0hHRUZHR01NTUtMS0lHQ0NDRElLS0xLSlSBg4SEgoKFhoaEgoaFhISGhoaHh4aKdUpgYmFhY2VTTlg8PDw+Ozo8QUFAPjw5OTg8PD07Pjs4Oz9BQkBBQ0NCQEFBRERCQ0ZISUhISExNTEdJSk1NTk1KSktLSkxNU2xwcXRzc3d5e3t7fH19fn9+fX19fX1+fn5/foB/fn9/gICBgIGAgICAgYCAgIB/f39+UUZFRkdJSUdEQ0VGTk1MSklIRT85Oj5ARUhISklJZYWEhIR/gYKDgoODhIWFhoeIiIiIiYyOcWhoZ2VnaWZoRjY4ODk2NDc5Ozw6ODU2Nzc4OTc4NzU4ODs7Oz1AOzk5OT08Pjs8PUFDRUhKTUxMR0lHT1JRUFBOTE1NT1Fdb3BydHN1eHp7e3x8fn5+f359fX59fX5+f39/gH9/f4CAgICAgYCAgICAgICAgIB/f39RR0ZHSEpIRkVGR0hMTEpJSUdDQjU2OjxDQENHSUlohoSEgX6Bg4ODgoOEhomKjIyLi4mKi4yMeG1saWhpalk1NjU1ODczNTY4Ojg3NjU2NTY3Njc2Nzo2Nzg4OTo3NTc4OTc5Nzc2OjxAR0ZJRklGRUZPU1JTU1JPUFBSVGVwcXN0dHZ5e3t7fH1+fn5/fn19fX19f39/f3+Afn+AgICAgICBgICAgICAgICAgH9/flJISEhJS0lHSUpJSkpLREVIRUJANjc4OD06PUVDQmWFg4GAgoODg4ODhomLiomJioqKiouKiouJdm1tbWxsVTc4NTY4ODU1NzY5OTc3Njc2NTo5Ojo6Ozc5ODk4NzY2OTo5ODg2ODU4OTtBPT4+QkE/QUtMT1FQUU9PT1JXa3FydHR1dnp7e3t9fX5/fn9+fX19fX5/f4B+fn9/f4CAgH9/gICAgICAgH+AgICAf39+VEhHSUlMTUtKS0tMSUg/QEFAPDo1Nzk4OTc7Qjo9cYSAgYOEhISEhYaJioqIh4eIiIqKjIuKi42Icm5vb3BlQD46Ozs8OTo7OTo7Ojo5Ozo5PT09Pjs7PDw6Pjs5Ozs8Ozw7OTo8ODo6Ojo5OTk8Pzw8QUJESUpNS0lLTFdvcnN1c3Z4e3t7fHt9f39+f359fX19fn9/f35/f39/f3+Bf4CAgICAgICAf4CAgH+Af35URkVGSUxOTkxKSk1CPzo7PDo4OTk4OTo6Ojs/Pkh+hIKChIWFhYaIiYiHhoaGiImIiYuMi4qMjY6CcnJxcWNHRkNCQUI+QENBQD49Pj5APz8/QD9APT0/Qj5AQT9APz1AQEA+P0E8Pjw7Ojs6OTs/PTs8PT1BQUNBQkNBWHBxdHR0dnp7e3x9e31/fn9/fn19fX5+f35+fn9+f4B/f4CAgIB/gIGAf39/gICAf39/flJFQ0FHSk5PTElHSzo4Ojs5Ojo8PTo7Oz09P0BCUoKCgoSFhIWEhomJiIiGhoaHiImKi4uLi4yNjY1+cnNyU0tKS0hISEVGSEdFQ0FAQkVDQ0FCQ0I/QERIRUNFQ0VEQUZFRkRFRkRAQj48QD49P0A+Pz4/Pj8+Pjo7PTxgcXJ0dHV3enp6fX19fn5+f39+fX19fX5/fn5+fn5/gH9/gICAgICAgICAf4CAgIB/f4B+UERAPUNIT01HRkJEOTc6Pjo8Oz4/Pz89QUBDREZXhIKDhIWFhoaIiYmIh4aGhoeJiYqLjI2MjIyMjIt7enReZ11QS0tLSUpKSklGRERHSEdEQ0VGREJISUtHSEdGSEdFS0lLSUpLSkNGQ0NEQkFBQ0JEQ0NERENBPTs9QGhwc3R0d3d5eHt8fH19fn5/f359fX1+fn9+fn59fn+Af3+AgH9/gICAgICAgICAgH+AgH9PQT49P0RMS0BCQkE5ODw+Ozw7PkA/QT5CQkdHSVmEgoOFhYaHiImJiIiHhoaGiIiIiYqMjY2NjY2Mjol7eHtvZ1VNTE1KSktIS0dER0lISUVFSEZGRUxMTUlKR0dISUpOTU9MTE5LSEZHR0VFQ0ZGRkZERUhIRkNBP0BMbHB0dXZ4eXl5fHx8fX1+fn9+fn19fX1/f35+fn5+f39/f39/f3+AgICAgIB/gICAgICAf1FBPz4/RUdHPTxAQDg4PDs7PTo+QD4/QENGSUlQX4GDhYSFhoaHiIiIiIiIh4eIiIiJioyNjYyMjYyNjoJ4clVSUk9NTktJSUZKSUVLSUdLSklKR0dHS0xOTExISElKTVFOUE5NT0tJR0lKSElESUhIRkZHR0lHQ0JBQ1RucHV3d3l6eHl6e3x8fX5+f39+fn1+fX5+fn5/f36Af4B/f3+Af4CAgICAgICAgICAf39/VERBQUJHSEI/OD9AOTo8OD0+Oz1BPj9BREhKTFVxg4SEhISFhoeIiIiIiIeGiIiIiImJjIyLjIyMjIyMjHNbVlRRUU9MS0hHQ0hKSE1MR0tPTEtKSkxNTE9QTkhJS0xPUVFQUU9PSkhKSkxKTEZHSEdGRklGRUVCQUJCXG9yd3h5enl5eXp6e3t+fn5/fn59fX19fn9+fn9+f4CAgIB/f39/gICAgICAgICAgH9/f39VRUNFRUdHRUQ7P0E7PTw5QD4+QEJHR0FHS0xQVnmFg4ODhISGiIiIiIiIh4eIiIiIiIqLi4qMjIyMjIyNfFxbV1ZXVVFOTEtFRkdNUE9QV1VRUE9RU1JNU1RPTVNMUFNVVlJTUlBMSk1NTUtOR0dKRkZISkVERUVCRUNjcHV5eXp6ent6e3p6fH59fX9+fX19fXx9fn5/gH9/gICAf39/f3+BgYCAf39/gIB/f39/f1VGRkdHR0dIRj5AQj0/PT1CQEJCR1ZORk5QUFRYe4aDhYWEhYeIiIiIiIiIiIiIiIiJiouKioyMjI2PjIuLbF1abWJHVVNSUUs7O1NUU2B1XVVWVFZZWVJYWFJaZlBVV1pdUlRXUU9NUlFQUFFLS0tISEpIRUZJSUlISWlydnl4eXh6e3t8ent8fXx9gH59fX19fX1+f39/f3+AgIB/f39/f4CAgIB/f3+AgH9/f35+U0hKSUhHR0ZFPz9BQUVBQ0dFREVMWFJNVFVWWFp8hoWHhoWGh4iIiIiIiIiIiIiIiIiIlJyMioqMfmGKi4uHb19nWDxZWllUUT9AV1ZZXGRgVllicl1dV11aVkVRWVpbWV9UWWdSVlZYVVRWVE9PTUpMSklJTE1LT01Tb3N2eHl4d3l5ent6e3x9e35/fn1+fX19fn1/f39+f4CAgH9/f3+AgICAgH9/gH+Af39+fn5WSkpJSEdFRERCQT9ITUlNUEtJS1BUU1NYWlpcXHiFhIWFhYWGh4eHiIiIiIiIiIiIiImcnaCPiY5nO36LiYuMe3FyWl1dXFNVU1dXVVtadYNZVX2QYVxYXV9XSVZdXVtbX1lIWVhZW11YWFlXUlFNUFFNTU9TUVFVUmFzc3Z3d3Z4eHh6e3p8fX19f39+fX59fX1+fn9/gH9/gIB/f3+Af3+AgICAf39/gIB/gHh5fVlOS0lJSEZCREBBOlBRUVdYUFBPUVNUVFhYWVpbboGCg4WEhYaHh4eHh4iIiIiIiIiIiJaanJeIioFuhomIh4SLgGhbXF1aVVdVWFNSWFZjloBSZXJYWldfaFBgZltbWFxnYUdPWmhnXVtcXV1XUk9TUFBSVlZWVllabnJ0d3Z2dXh4eHt7fH19fX5/fn59fn18fn9/f3+Af39/gH+AgH9/gICBgYB/gH1yfX9/b3R8XVNQT01LSkVDP0A7UFBaWltSU1FQUlJSVVNWVFdfdXiAhYSEhYaGhoaHh4eHiIiIh4eIh4ORjomJiIaFiIiGfoB9X1NXWlZTVlRSUk1QTUxmeltdVFlVVl1aTFRaVVNUXlpYV1dXemtYW1xcXlRRUVBJTk9XVlhbWmRwcnZ2dHR2eHl5e3t8fX19fn99fX1+fX1+f39/gIB/f3+Afn56eHd2c3V7f3+AgHRrf35rcnleW1ZVU1JPS0ZDREFNXoNsVlJTTk9RT1FVUlNSUlVjZHaAgoKDhISEhIWFhISDhoaGhoeIhn6JiYiHhoOHh4d6b3JZTE1QUE1PTEpLRUZJRkM/VGRVf1JRUU5LUVRRTU9ZUk1OUVNVVU1RU1JQT01MSENJSFJUVVpcbHF1dXVzc3d6ent7fH17fX19fn19fX59fn9/f39/f399fX5+f39/f4B+e3Zzd31+fmR1fWlxdF9kXV5cWVVQTElMSWFsknRQUVNOUVJRUltSU1JRUlVUYnN7fH+AgYKBgX99e3uAf4OChYaHgoaGhoGEgYaFhnZgXk5FQERERERDQUVRQ0VBQz5DSUdWQEhOTEddaVBIRk5GREVGSUdIQkRIR0lLR0RCQURAT1FNUmRydHZ1c3R1enx7e3t7fHx9fHt+fX19fn5/f3+AgIB/f3x8fX+Af39/f4CBgH12dHt/bWh8Z25xZmllZGJcWFNRUFVSc1dlW09PTkxRU1FVWVNVUVFUU09WYGtscnZ7e3h5dHJuc3RzeXh+f4OAg4OCgIKAgoGCbE5IQUE8PD5AQUBAP2tRS2BFRkhJRUI/R0xOR01RVUlBRT8/PD08PT0/PT9BQ0NAPz09Qj5KTkdVbnV0dXN0dnh7fHt8fHx8fX19fH59fXx+fn9/f4B/f39/enl3eHd2dnh7foB+fXt4dnx1YXhnbHBqbGppZmBbUVJaXFleSkpQUU5LTFFSUVRWVVdRUVdVUFhbYl1hZ21tbG9rZ2BucmptbHF1e3p9e3h6fHx4d3hlREJBQj07Q0NCQkRCXF1Pe05PT05LTE1PT1FMS01XTUhHQEE8OTc3NTk5PTs7Ozg6ODo/PEJIP1xzdHV1dXZ3eXx8fH18fH19fX58fX19fX9/f39/fn9/f314dXZ6e3p3eXh1d3t8eXh1eXdjcWhpcG1ubW1oZl5PUF9cWklIUFJRT01QUU5RUlRWWFNTWVRPWVpbV1ldXl5fZWBdXnF2a15gZ2t3b29sam9ubmxmYllIR0hIQ0JHSUZGRURNUlBhV1NYUVBTU1JVW09PUVZQTUlERj46OTY1ODc5Nzk6MzY1Nzk1PEM+ZXNzdnd3eXl7fX18fHt8fX5+fnt9fn19f39/fn5+fn9/e3d1eX18enh8fHx8dHd2d3Z1d2tuaWhxbm9vb2prYFZXXlpYTUtUVFNQUVVPTFJTVFhYVFRZUk1XWVpWWFhWWFldV1dYaHNrXVZhc2tiYV9eZGFfXllVUU5PT01JSEpMSklGQ1FQU1tXVFROUVNZU1xlVU9TVFJOS0lIQz9BOTk5ODk3ODg1NzU3ODU5OkdtcnR3eHl7e3x+fX18e318fn5+en1+fH1/f359fn59f358dHR1e3hycW9vbnR4cXJzeHZ1cWZkZ3JucHBxbm1kXV9fWVdPUFhWVlNUVk9PVVZYWFlTVVRMS1RWVVVVV1BTVVdUVVJdbl5STlpfW1ZZO0RWWFRbZkpMUFNST05NTk5OTEpGUVBVWVNUT0pPT1VTVFxWUlVTUk9NTElISEY/Pjw6Nzg3NjU5OTY3Njc1V29wc3d5ent8fX19fXx9fXx+fX15fX18fn5+fXx8fX1+fXxydnF4eHJ2dXFxbnBwb3B1dnRuamRkanBwcXJwb2ZlZGNcXVJUWlZXVVRXVFJYWFlZWVNVT0pHT1BPT01SSlBQT1BOTk9UTE1JUE9TVFUyPVhNSUBRPWNhUVNRUE5QUVBOTk1RTlRSUFNNSUxLT1JQUlJTVFFST0xNS0xMSENCQT06Ojg3NjtCNTU2Njpkb3F0d3h7fHx9fnx9fH19fX18e3h8ent9fX58e3l9fH18e3B1b3d1cHV0b3N2cHFxcHR1dmNqZ2VXaHRycnFuaWlocFZWVFVYVVdVUldWVVpZWFdVUVNGRUFGR0dIRkpESEpJR0VITEhLSEZMTVBNRy9FX1I+Mz8+am9hU1JRQEdUUVBRUFFOUU9RUExKTExPUE5OUFFRTlBPSkxNTUtHRUVEQjs9PDw5PUc2Njc3RG1wdHV5e3t8fX18enx8fX5+fXt5dnh3eXl8fXp6dn17fHp6b3Fud3JwdnFtcHNwb3Bzc3N0ZmdgaFpXa3JzcmxtbWtuYWVQU1RSU1RPV1ZWWVlWUVFRT0A9Oz0/QUJBQ0BCRURBQEdIR0hFRkhKTUxFR0NPUkM4RU5TXWdUUVNBR1VQT1FRUE5NTk1LTEtMTk9PUUxPT01ITExJS0tMS0dGRkVEPEFBPjtARTs8ODlTcHJ0eHt6e317fHt5fHp6fn58e3V0dXJ2dnp6eHpyfHt8eXltcW94cnF1bm5xcm9vb3Rzc3J1dGtnZ15lam1wa29xbWltY0xPT01RU0xUVVRYV1VMTEtJPDk4Nzs+QD48PUFAQj0+RUhHQ0VGSUdKSkBGQUFARkhFSk9IUVJiXFFQUk9TT09QTExPTUxNTU5PTltXS01RT0dJSENISkxMS0ZGRkU/QkM+PEJHP0I/QWRwc3d6enp7fHt6end7d3l+fnx7cXN0cHJzd3R4eHN6e3l2d2xxb3ZxdHRsb3Fybm5vc3ZydHNycmtsZW5zaG1ubWxtbGprSUxISE9RSlFTUVRTT0tIQ0Q9OTc3OT9CPjs/QkBAPkBESUVDR0dJR0lFQkI/Pj1DQkFHSURNT2JlUU1PTldLTE5LTE1NTUxMT05TZE5KTFJISUlFQUhKTE1OSkdJR0JBQkA/RUZFSERLbm92eXl5e3t6fHp3c3h0eHx8eXpucXJtbm9ycnZyc3h8eHZ2bXBtc3B1dGxwcHJvb29ydnVyVlZucWdseYRqbXFybm5qaG9ISkNHTU1KTVBNUE9ISkQ/QT05ODo6P0I/PEFCQUFERUdLRkNISUdHSENDP0I/P0BBPkRFQ0tOUlRMSklNVEZJSUpMSktMSUpNTU9QUlBKR0NMR0NCSklMTU9OSUpJR0NDQ0RISk1MSVlybXd5eHp7enl8dnJwdXJ0eHl2eGpxbmpsbG50dG10dXtzdHhyb25xb3ZzbnBvcnBvcHN0eWpOYGdzanR8eWdvc3FpcWhkcUdLREdISEdKS0lKS0RGQj0+PTk5OjtAQj89QUJDQ0dGSUtKRElJRkdHQ0M7QUBCPkBAQkVDSU1QSEhLR0hLREhKTE1ISkxISUpMS01dUkhIRE5GQUNKSk1MUE1LTUpLRkdHSk5OUU5MYm1pdnZ3enl7en1ybWxza3B0dHR1aHBtamlra3RwbnR0eXByeXRvcnFvd3NvcXB0cnBydXR5a05WbXVscXt2aW5vaWt0Z2RvRktERkVHRUZGR0VHQkNAPjw9OTo6OkBDQD5BQ0RFSUVJSkxGSUlHRkZEQjtBQ0M+QENEQ0RHTE5IS05IREhFSUxOTUhJTEdGR0lJTE5LSUdFTkhCRk1LTUxPTU1OTUtISElPUlJTTlJmZmZxb3N4dXt6fGxoam5la3Fsc3BmbWxoaWtsdG1wdXR3cW94dG90c3J2c3BxcnRzcnR1dXZ2WFZ1dWtvdHJrb3ZsaG1lX3BHSURGRkVDQ0NFQERCPj8+Ojs7PTo9PkNBPkFDRUZKRklITEhHR0dGRUNAPURFQj5BQ0NDREdISUdNUEpGRkdLTk9LRkhJRkVERUlKSEpJRkhPS0NJTUtPTU9OT1BOSkpJTFJVVVJPV2RgYW1ncHJvcnl6Z2VoaGRpbGdxbGZsbWdpa2xzbHB2dXRwbnZyb3Nyc3V0cXNzdXRzdXZ2dnl2dXR3bGp1dW1ydnFsbmxlckxIRUVIQ0JBQkQ9QkE+QT06Oj0/Oz0+QEI+QEJER0pFSUZJSEdGR0VDQkFBRkZDQkJCREVER0dJRkxRTElPSkpNTElHSEVHRkRDSUlIS0pHS1JNQk5OTVBOT09NTk9LS0tPVVdWVVNYX15caWFtaW5ocnNiZWZmZGhoZm5qZm1taGtrbXJpcXZ0c3Ftdm5vcXJzd3Nyc3R1dnZ2dnd2d3d2dHd1anN1bnV0c3FyamtzTUdIRkhCQkFERTxBQEBDPDg6PT45Pzw/QkBAQERGSEVIRkZIR0ZGRENFQ0RJRUNHRUJFR0VGR0dFSk1LSFFNSktISElFRkhIRUNJSUlLTUtPU05EUVJQUFFOT01OUE1MTVNXVlhYVVhdWl1kYGhiamlna19lZWZjZ2dna2dna21rbWxwcmh0dHVyc252b3FwcnR4cXNzdXZ1gpF5dnZ0eHV1d3htb3VvcnN1cXFpbnlNSEdISEJCQkZFPD9CQkQ8Nzo+PTo+OkBCPj8/Q0VGREZERUhGREVDREVGR0pFRUpHQ0dIRkhHRUNGSkpHTktMS0hKTEZJSUtIRUtLTE1OT1JUT0hTVVNQUk9RTU5RTk1QV1pWWllWWl1ZWGFgYWBeaGVjYGRmaGdqaGhpZmhubGxubXFwaXV1eHJycHVwcHBydXZwdXN1d3V7fn14dnR3dnZ2eHBsdXBtc3RucHJyeE5ISEdJREJDSEU8QEVCRT04OT4+PTw8QUI8Pz5BQUZDRkNESUVERUVGR0dHSUZHS0hESUhHSUdGREhLSUdLSE1LSktMSExLTUtKTktPTk9SVVZPS1VXU1BTUVJMT1FQT1RZWllcWllbXl5dYGNeXGFja2JgZGdncoVoZ2lmam1ucG9uc3JqdHV4cnNzdHJucHF2cnF1cnV1c355jn11dXZ2dnZ4cmh1cWtydGxxdnB0TElLSUtGQkVHRTxAR0NEQDo8P0A/Pj9CQTxAPkFBRkNFRUVJRUZFR0ZISEZISElLSkZKSEhLSEZGTElISEpHTExNTExJTUtOTU1QTFBQUVVWV09LVlZVU1NRUkxPUlJQVltbXV5bXF5fX2FgYWRdY2BlZmBlaGpkc3Nmamdna29ycW9zc25zd3dxdXZ0c21vcnVvcnNwdXJ2cnSBdnV1dXd2dXd0Z3Rya3Fya3J2bnZKS0xKTEdDRURFPEBGRERDOz8/QkBAQENBP0I/QUNIQ0ZGR0lGSUZHRElIR0lISkxISEpKSUxKRkpLSElLSkdLS01NSkpNTU5OTlBLT1FSVFhWTU5UVlRSUlFQTU5UU1JXW11eX11dYF9gYWFgYWNlYmRoYmRpamd2i2xqaWdtb3NxcHFwcHJ5dnJ1dXRzbW1zc21xcm90dXRycHN3dHV1d3Z1dXRlcXNrcHFqcnZud0tMTExNR0RDQUQ8P0VFRUM9QUFDQkJDREFDREFBRUdDSEhJSEdKR0NISUdISkZJTEhJSk1LTkxHS0lIS0tOUUtSUU1TTUtOTk9QUE9UT1dYWFtOU1BXXFpSV1BOVFVUVFhaX2JiX2RhXmBiXmBlYWFjaW5nYmloaG54dmxoaW1vc3JwcXJycnZ0c3Vzc3Nua3NxbXByb3R2cnFxdXZ1c3d5d3V0dWNtdGtvcGpxdG93TE5MTExHRUFARD4+REVGQ0BEQkVEREZCQ0VHQ0NJRkNISktJSUtHREtKR0hKSUlLSEpKTkxPS0lMSEpMS1pmSmRcS2xTSE9OX25Va3NbcXBid2NTUGF2dWh1Y2F2YFhucWJkdmluemZbbHRgbGpUX3d2aWpnaWZnbG1qbW9qbW5zcnBycnFyc3Jzc3J0cm5sdG9ucHFxdXVxcXN0dnZ1dXl3dXR0YGt0a3Bwa3FycXlMTkpKSkZDP0BCPz1ERUZEQ0RDRkVERkJGRkdERUtGRkpNTEtMTEdHTUlHSktIS0tJS0tOTE1MTExJTE1MW3NiZHBebG1VTU5mc11mZnFsbnRncGlfYVlubmJwcGJrampmb3F0ZXRub1xvdWdwTUpxeXZrYWBrZWVteGxrdm1ucHNycHJxcHFycXJycnRybW1zbm5vcHJ1dHFzc3R1dXV0d3h2dXRibXVrcHBscnJxektMSUhHRUQ/QUJAPkNGR0JGQ0ZFRkVEQ0hISERFS0hHTE5OTE1NRkpOSEpLSklMSkpKS0xNTk5NTUpNTU5bcm9vbnBwbGtNUFFsV01pYnRycGFtbnVcWWxQXG5tWnFta29teHh0c2lwXV9ya3FqVXV5eG9jXmtmYmdwcGpqb3BwcnNwcXBxcXJycXFycnRsbXJtbm5vcnV0cXRydHV1dHV1enZ1dGVudWtwb2xzcnJ5SUtHR0VFRUJCQj5AQEZHQkdESUZFRUJGSUhJRUhMSkdNTU9MTU5HTE1JTEtJSk1JS0pKS09QT05NTE5OTFxoZHVdbHFXbE5QUW1UWWtea2x2YWxkc1NlY05tWWxcdHBraWx4and1aHBdXnJraFdiY3d8b2NgZ2dhZGl1eWtubnFzc3BxcHFwcnFwcHBydWttcW1tbW9xc3Rxc3J0dnZzd3Z6dnV0aG91bHNvbXNydHZITEZJREVFQ0FCPUJBQ0dESEdMSEVDQ0hKSUhGSkxMRk5MTFNSTEdMTEhOSklITkhKSklITk9NTkxKTk1KWnNwcG9xcW1sT1FSbllya2dvb3Fxb210XW5YYXRfbm9wb3Fyb251c3R0altedGN3eHJqbnpoYWFjZmJiaW10dXBzdXZzcXBwcW9ydHt/fn13bGtxbmxtbnByc3F0dHN1dXR4eHl4dHVrb3VtdG9uc3N2c0hLSElCRUVFQUE+RERCR0RISU1JRkNGSkxKR0ZLTkxGT0pLV1JLR0tKSk5JSEpMSUtKSEhLTU1NTUlLS0tTa2NbaV5faWNyclpfWWpuX2VlVWtfY1thYVFgbGhdalxuaWlkW3BmZHBdWlxrW21xY3BzbGRnY2RnYGBrbXBwb3R5cnVxb3BxbnmFiIeHhoWAdnNua21tb25xcnR0cnR1dXZ5eHhzdW5xdW53cXJ2dHdyR0dGSURFQ0ZBQEJGRURHQkhKTEhGREdLTElFRkpPTElQSUxbUUpFSEhLTUlISkpLS0lISUdLS0tMR0hLS0xNTUxKS01OVFtcVFBUTFBPTk9PVlFPT1FOT1FKSk9QUWRxaVRZV1xbXFZZW11YXVxcY2ZhYWViY2ZfX2ZrbWhtdHlydHJvcHB0hoeGhoaFhYaHg3pwbW1sa3FzdHRydHZ0dXl4eHV2cXJ1b3ZydHN1dXNHQ0VHRkVBRUNAREhERkdDSUtMSEZER0tMSUVHSVBLTE9LTFdMSUVFSElKSElLSU1KSEZHR0lHSElFRkxJSkxPTUpQXFdeUFxbYF5NWFlTXFxiXk1YWk1YYVJLWWFaUl9kXGFYW2RkVlZYXFlaWFxWWVxdYl5kYGFfZWhrZ210dHFxdHBxcoGGhoaFhoWFhYaGhoR9cmtpb3Jzc3N0d3l5eHl4d3h0cXhyeHNxcnVydE9CQ0RMTUJEQ0JFSUVHR0ZLSktIRUVJSktGRUhIUEtNTUpNUklHRUFIRkpJS0xKTEpIRkRJRkRGR0VGS0hDSk5MTFVfWWBYYGFbYFRYWVReXlpfUllcUF5cWU5fXF5TWl5jXlpdYGNgWV9jW2BeW1RYV1leXWNiY2FjZWhla3Jwb3Bwbm93hoaFhYaCe4CFhYaGhoaFf3VxcHJyc3Z5eXp5eXh4eHdyeXZ4cnF4dnR2YVNKSk1JRUNCQ0dIRkhHSEtKSklERktLS0VGSUpOS05LSExOR0hFPkdHTElLTEtLS0lHREhEQ0RFQUZKRUBKTEpPW2NZX15hX1JUUldfYFxdWV5RWVxNVl9XS1FZW1BaX2FhXV5jYWBiYmJjY2VaUVhVVVxZXWNgX19jZGJob21ubGxsbHWFf4SDeXV8hIWFhYaGhYWGhoN9d3JydHh5eXl5f359eXV5dnZybnp3dnhYUUtGQ0dFQkVHSUZHSEhGRklHSEdIS0lMRERLS05NTEtIS0pISUY/R0dOS0tLTUtLS0lGR0NEQERBSElDQElKSFBdYVpbZF1fVFFSWF1cXFxfWktXXExSXFlJTV5RT1xfYWNjY2NiXGRjYmRjZlhRVVRRW1daYF9eXmFhX2Rsa21qamxudn51gXp8hIWFhYWFhYaGhYaFhoaGgnpyc3V1e4WHh4eGhYSBfnhwend2eFxSTUNASUZERktKRkZGSEdHSUdGRklMSk5GREtLTU5KTElLSkhIRkJISFFNS0tPTUpLSUdHRUQ/RUNJSUJCR0ZFVF1ZXlhfWV9bXVVYWE9dXVFLSlZeWF5bXVVZYFJRX19iYmBgYmJgY2JhZGRiWE9RUVFaUltdXV1dXl9fZGhnbGpubnB7e3x+e4CCg4SFhIWFhYWEhIWDhISHh4FzcneFh4eHh4eHh4eHh4WDgHx4XFNLQ0FIRkRHTVJIQ1FKRUdISEVGS0pNUEVGSUpLTkxMSUtMSUhHREhLUU9NTVBMTEpLSElDREFFRElHQ0JHRkRXVUVcVF1TVl9YT1RVTlpaTUlKVGBhW19YXl5hXU9ZYVxgYF9iY2JdYWJXYF9UUE9PT1dRXFtbXFxeX2JmZmVsZW9vd3x7gHt9f4CEhISEhIWFhYODhYKDgoWFhnpvgYaGhoeHiIeGhoaFhYSFg35JTkZERkZIRElSYlBDVl5JR0dIREZNS1BQRUlJSktOTEtLTEtJSkdFSk5RUU5PT01OTE1IS0FEQUNER0VDQkVHQk1IQktLT09OTEZNRkdJSkhHTEtNT1BJTE9QT1NPTFBTUlVaWVdZWFhkV09TVFBQTk1PVFNaWFhaXVxgYWRlY2dja2xwc3J5eX97en+EhISFhISEhIKEgH57gYOBfXuFhIaGh4eHhYWFhISEgoGAfUtJRUVHRkdES01dTEdHWExHSEpIR01MUVFIS0tLS05NVU5PSkpLR0dLUFNTTlBPTk5OTkdLRmBFRF9MRWZkRU5cSV5bcm1PTVVtWUxEUGBVa1dnSl1XVV5ETFFVTExTVlFSVFhXVFhVVFxVUGZaaGhkWFJqUlZVVFtcW2BgYWJhYmBmaGZua2hyenx9foGEhISEg4ODgX18enJ7gXp7f4KAg4SEhYWBhIWAg4N/fnp7TElGR0ZIRUVLT1NJSkZgVEhJT0pJT01SUUxNTExPUlVST09JS01HSE1RW1lPUFBOT09PSUpRf1FJfFlZcnRZUW1IcW5vYVZQcXFzUENrc21xc3BTb19bblhdVlxYVWtoVV1WY1pgWVtfVlZYf2p0dXVeX3ZeV2FbW2ZbX2BhYGFdYGFnbXBsYHB3dHiBgYKDg4J/fX+Adnh6bHZ+dHh9gHx+gIGChHyAg3p/gX9+d3dOSkVITU5CRExMRklLRVJWTEtOSUtSWFdRTU9PTVFUTk9RT0tLTkdNUFNbWlNRUk9QUFBKSFp4XVR4ZWhaU1VSdmd0bHBibmZqUXJPTXdtanJwc3JxcnBvb4BdZXp1eHFxenF+c31rdX1iUmh8ZXNzb3Jye3xvfnhugHJfYGBiYVpgX2drbmtibGZnbXd+gYCCfnt4d4B0dnppcn5uc3x+d3h7foCDeHyAdXx/fHxzc05LR2BdR0FFTU1ISkpHSlBPTU1KTlZeWVVMUVNOWFpNU1NSTktPSFFSVFlXVlBUUFBQUUtIZ3hsY3hybVtLTlZ5cHVtdWJvdlBlZUpmdnFtd2+AamZ4eGlXclFoem1panp6fWx4en9vaG9ZdnZqdnVwgF9yZn1pbHh8b15fX2JhW11iZGdpaWRnYmNkbGxwcHN0c3NzeXFyeGJsdWdxeXtzcnZ5foFzdXpufH15eHJvTktTdU5DQkZQUEhKS0lLUE9PT01QWmBaV0tUV1BhXlJWUVlSTFBJU1RWWFdXT1VQT05SSktyb3V1cXVxZGliV25McXBeRmh5V3ZUTGl5fXhgeXtzbmFdbW9jUmhxdW5teXB3bHZ0dHJsbl10fnprbXl8a3RsfGtwdnV4Xl9fYl5dX2RkaWdnZWVeYWJpaWlqa25va3FvbWpwYWNmY293eG9tcHN5fm5xcGt7enRzb21MTFtWSEdFR1JQSUxNSktQUVBQUFBXXFhVTVVZVWVYUlJZXlNMTklUVFZXWVdPU05OTlJJUm1IaXdLYGR2dlZYbE9ubHtzYWpnf3ZVTFdraH1sbWx4X1pwenteYHpzY3JveHFoZH1pcnxeVExsYHZ1a2l1e3ptfnhrfHBcXl5iW15iZGRnZWVlYlpjY2lra3JzcnZnbGloZGdgYWthZ3NybGdtbXJ8a21oa3t0bW5rbU9IS0tISkhIUVBMTk9MS1JSUk9TUldSVlRQV1pWVlRUVGFfUE5NS1RTVFFWVk5OTE1PUEtIUU5QVUxLTFNUVFNUUFZVUVFOUVFYWVJOUFVUWFhYW1tVUlNXW1dYWFpPU1VXWFhSXllXXlZUUFlSV1dXV1heWmdyXltbWVxdX2NaX2NjZGZkY2NiWmNiZ2ZlbW5tdWVlZ2NhZl9dZ2BkbGhmZ2tocHpoZ2dqdWpoZ2lsUUlLTExNS0pTUU1RUE9MVlVUUFRVWFVZVVFaXVZVVFdVWVdPT0xNVlRRTlVTTk9NTFFQTEpRUUtRTUtMUFJVU1FSU1NJSExOT1FSUVFRVFZSWFdcV1NSUFJUVVZTWlFOU1JYVlRZVlVaVlRSVVRUVVdYVlxZXmBdXFpaXFxfY1tdYmNkZmRkZGFZYGFjYWJoaGltYmFkXl9jXVpkXGJtYV5mZWZtc2RpZ2prZWRjZmhQSktMT09MTVNQTlNRUU1YV1VUVVdXV1pVU1xgVldWWVVYU1BQSk5XU1BOVVBOUU5MU1BNT1VTTlJOTU9RVVFVUVJUVU5LTU9RVFRSUlFWV1VZWltZU1VSVFdWVllbVFBUVVhVVVpVV1pWU1JXVlVXW1haX1xVWF5cXl1bXWFhXltiYmNnZmVkYlhfYWJdYGdkZmVhXl9dXV5aWmBaX2dgXl1dYmhrYWdmaGZkYGJjYk9MTUxRUUxPVE9PU1FPUVtZV1dYW1lYWVZdamRWWFlaV1ZTU09KTlZUUE9VUFBQTU1SUlBSWFRRUU9NUFRWT1hSVFVVT05NUVRWVVRUUlRXVlpdXFpWVlFRVlhWW1tXUVRWVlZWWVRYWFZTUllXVlpeWV1fXlVeXF5gXFtfX19fWmJiZGhnZGRiWGFgYl5eZmNjYGJdXFxcXFlaW1hbYVteXVxfYl9fYmRlYmRfX2BcUE1OTlJRTVJST1NUUU9VXFpaV1tbXFhaW2RxbWhkX1tYVlVXUUxNVlNNTlJPUVJPTFFTUlVaVVNQUE1RWFdSV1NTU1hNT09RVFhWVVVTVVlYW15dW1tWUU5VVlVbXFdSU1dWV1hWVFlbVVRSWlhXXF5aXl9gVWFcYWFdYGJfXGBdY2FjZ2hkZmBZY2BhX19lZF9gYltaXFtcWVpZWFdcWlxbYF5fW15eYWBeYlxZYFtRTk9OVlFQVFFPVFRTUFdcXFxYXlxeVlxeanF3eYBjXFtVVVdRTU9WU05RUU9SVFJMUlRUWVpXVU9ST1NYV1RTVVJSWk9QU1JWW1ZXV1NWWlhcXVtbXVZTTVRVVVxcV1JVVlZYWVNVWlxVU1NdWFpdXlxgYGBWYVtjYl1hZF5cYmFjX2NmaWRmXltkYGFgYGNlX2JeWVpeW1xbWVhZV1daWlphXF1bXVxcWl1gV1tbWlBPT09ZUFVUUlFXUlRQW15eXVtgXGBVXF1oanJ9c2xnXFRXV1FOUlpTUlFUUlRVVEtSV1ZbWlpTT1NRVlZWVE9XUlNaUlRUVFhdV1hZU1hdWF5dWVpdVFVOVVZXXltZUlVVWVlZVVdaXFZTV15aXV1gXGJiXVlfW2VhX2RkXl5jY2FeZWZpZGZeXWRhYGFhYmRgYl5YWl9bXFtYWFhXV1tZW2BcW1tcW1haW15WXlldUU9PUlpQWlRVVlZTVFReXmBeXmJcYFVdXmJreXRsfWtaVVlUUFBTXFRVVFVUVllXTFJbV11bXVJPVVNYV1dUUFhSU1dTVlVVW11YW1lVWl5YX15ZXFlRV1JZWFlfW1pUVVZaWVpXWFpdV1VbXl1eYGFfZGNcXl1dZWFiZmReXmRjYFxnZGhlZGJfZGFgYWBiYl9gXldYXlpcXFpZWVdWXVpdXlpZW1xbV1lcXVZYV11TTlBWWVFdVVZZV1dVWF9fYWFgY11fVF1fYmVldYF6aFdZWVNVU1ZcWFdXVlZXXVhPVV1aXl1cVFJXU1dXVVNUWFJTVlRYV1hdXlhdW1ZdX1hfX1hcVlFYVFlaWmFZXFZXWFtaW1lZWltZV15fYF9jYmFkZFxiXGBmYWRmZF5fZGJiW2ZjaGVjZmBmX19hYWFhYF9eVlVdWVtcW1lbWVldW1tbWFhZW1laWl1fXVRZXVVOU1lWU1xUVldZVlZcYGFiY2BjXl9WW2BkYV96dW9oWVtZVVdUV1taWlxZWFlgV1BVXlxgYFxUVFhQVVdWVFZXUlNVV1paW19eWl9cVl9fWl1eWV1VUllXWVldYlpeV1hbXFtcW1taXFpaX19gYGRiY2RkYmRZYWZjZmZlXmFiYGNeYmNpZGNnX2deYWJjYWFgXl9YVFtaWltbWFtYWFxbWltYV1lYV1xbW2BdVl1dU09WWVZWWlVYVVhXWF1fYmFkYWRgXllZYWRiYGxmaF5bXFpWV1hZXFxdX1tZW2JWVFheXWFjXFJWWVBXV1dXV1ZTVVRYXFxeYGBdYFxXYV5bXltaXlhVWFdbW19gXF9YWVxcXV5fXFtdWVtgYV5gZWNkZWVmYlhjZWRoZ2ReY2BgZWNcZWlkZWlfZl1jYmNhYWBfX1tYWVtZWlpYWVhXW1taW1dYWlRZXVxaYFxVXmJOU1dZVldZWFtcWFdZXmBiYWRhZGFdXllhY2JfYWBgXlxcXFdXW1tdXV9fXFpdY1laWF1gY2RfUlhZUFdXWFlZV1ZXVl1dXmBhYF9iXllhXV1eWVxeWVhVV1tcYF5dX1paXl1eXmFdXFtaXGBiX2JlY2VmZWZiWmRmZmlnYl9jXmFmZFppaGJmaWNlXmJiY2FgYF9dXVpYXFlZWFhaWFdaW1pZV1hVVVtdXV1gYGJieEtYV1tZVlxbXF1aV1xdX2BiZGFiYV1gWGJjYmFjYWJdW1xbWFdbXF9dYF9dW2BkXVxYW2JlY2FSXFpPWVhaW1taV1pZYF1gYmJgYWNfXGJdX11bXl1ZWVRYXV1fYF9gXFteXmBiY11cWFxeYGJiY2VkZmRlZmRcZWZnaWZjYWJcY2dgXGloYmhpZWRgYmFjYV9gX1xdXFlcWVhXWFlYV1xaWldXWE9YWl1hY2Zmcmt/SllXXFpaX1xbXlxYXVteX2FjYmFhXWJbYmRiYGJiYlxbW1pXWGlxYFxgX11cYWNfXllZY2VkYVNfWlJZWFxdXVtaW1tjYGJiY2BiZGFgY15gXF5eXllYVVtfXl1hYmBeW2BhYmZjX11UXWBhY2RkZmVnZWZmZV5lZmhoZ2RkYFtmZ15haGhiaGhmY2BiYGNiX19fXF1bWltZWFhYVlpWXFtaVlZVTVhXXGdpa2h1eIF2dnZ2dnZ2dnZ2dnd3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d4eHh4eXl5enp6enp6e3p6ent7e3t7e3t7e3t7e3t7e3x7e3t7e3t7e3t7fHx8fHx8fHx8fHx8fHt7e3t8fHx8fHx8fHx8e3t7fHx8fHx7e3t7e3t7fYmIhoqHhIKCgoOCg4OCgoKCgoKCgoKCgoGAgYCBgICAgYCBgYGAfnx8fHx8fHx8fHx8fHx8fHZ2dnZ2dnZ2dnZ3dnd3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3h4eHh5eXl6enp6enp6ent7e3t7e3t7e3t7e3t7e3t7e3t7e3t6e3t7e3t7fHx8fHx8fHx8fHx7e3t7e3t7e3t7e3x7e3t7e3t7fHx8fHt7e3t7e3t8iYmHiYaFgoGCgoKCgoKCgYKCgoKCgoKBgYGAgICAgICAgIGBgYB9fHx8e3x8fHx8fHx8fHx8dnZ2dnZ2dnZ2dnZ3dnd3d3d3d3d3d3d3d3d3d3d3d3d3d3d4eHh4eHh5eXl5eXl5eXl5eXt7e3t7e3t6enp6enp6e3t7fHt7e3t6enp6ent7fHx8fHx8fHx8fHx7e3t7e3t7fHx8e3t7e3t7e3t7fHx8fHx7fHt7e3uHiYiJhYSDgYKCgoODgoKCgoKCgoKCgYGBgICAgICAgICAgYKBgH58fHx8fHx8fHx8fHx8fHx2dnV2dnZ2dXZ2d3d3d3d3d3d3d3d3d3h4eHh4eHh4eHh4eHh4eHh4eHl5eXl5eXl5eXl5e3t7e3t7enp6enp6enp7e3t7e3t7e3p6enp6e3t8fHx8fHx8fHx8fHx8fHx8e3x8fHx8e3t7e3t7e3x8fHx8fHt7e3t7e4aJiYiFhYOBgoKCgoOCgYKCgoKCgoKBgYGAgICAgICAgIGBgYCAfnx8fHx8fHx8fHx9fX18fHaIi4uLi4uLgX19fX19fYSMi4uLi454KSkqKiopKz0/Pj4+Pj5tgH5+f397pdfT09PT1r2GiYmJiYiQzNPS0tLT1Z6GiYmJiYaz1tLS0tLWun1+f39/f359fHx8fHx8fHx8fHx8fHx8fHx7fHx8fHx8fHx8fHt7e3t7hIuHh4aHgoGDg4GCgoKCgoKCgoKCgoGBgYCAgICAgICAgYCBgIB+fHx8fHx8fHx9fXx8fH19doyQj4+Pj5CDfn9/f39+hpCPj4+Pk3kZGhoaGhocMTMzMzMzMmqCf4CAgHut6eTk5OToyomMjIyMipTd5uTk5eTnpYmMjIyMiL/p5eXl5enHfX5/f39/f319fXx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx7e3uCjYeIh4eDgoSCgYKCgoKCgoOCgoKCgYGBgICAgICAgICAgICAgH58fHx8fHx8fXx8fH19fX12eHh4eHh4eHd3d3d3d3d4eXl5eXl5d29wcHBwcHBycnJycnJyd3p5eXp6en6Dg4ODg4SBfHx8fHx8fYSFhISEhIR+fHx8fHx7gYSEhISEhYJ8fX19fX19fX19fX18fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx7e4CMhomHh4SDhIKCgoKDgYKCg4KCgoGBgYGBgYCAf4CAgICAgICAfnx8fHx8fHx8fX19fX19fXZ2dnV1dXl2dnZ6e3h7eHd2d3p3eXp6fnx5eXh4eHh5eXl5enp5eXl5enp6eXh4eXl5eXl7e3t7e3t7eXl5eXl5eXp7e3p7e3t6enp6enp6e3x8fHx9fX19fX19fX18fH19fX18fHx8fHx8fHx8fHx8fHx8fHx8fHx8f4uHi4qIhIODgoKCg4KBgoKDgoKCgYGBgYGAgIGAf4CAgH+AgYF+fX18fHx8fHx9fX19fX19d3d3dnZ3fXh3d316eH14d3Z5fXx8enl8e3h3d3d3eHh4eHh5eXl5eXp6ent7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7fHx8fHx8fHx8fHx8fHx9fX19fX19fX19fX19fX19fX19fHx8fHx8fHx7e3x8fHx8fHx8fHx+iomNjImFg4SEgoKDgoGCgoKCgoKBgYGBgYCAgICAgICAf4CAgH19fXx8fH19fX19fX19fX13d3d3d3p9eHt4fHx3e3h3dnp9fX59eXt6eHh4eHh4eHh4eHh5eXl6enp6e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3x8fHx8fHx8fHx8fHx8fHx8fX19fXx9fX19fX19fX19fX19fHx8fHx8fHt7fHx8fHx8fHx8fH2Kio2NioWDhISCgoKCgYGCgoKCgoGBgYKBgIGBgICAgIB/gIGAfXx9fX18fX19fX19fX19fXd3d3d3fX55d3d4e3p7eHd2e318fHx6fHl4eHh4eHh4eHh4eXl5enp6ent7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3x8fHt8fHx8fHx8fHx8fHx8fH19fX18fH18fH18fHx8fX19fX18fHx8fHx8fHx8fHx8fHx8fHx8foqJjo2JhISEg4KCgoKBgYKBgoKCgYGBgoGAgYKAgICAgH+BgIB8fH19fX18fX19fX19fn5+d3d3d3d5fHl7eHx9eXt5enl6fXt8fXp8eHh4eHh4eHh4eXl5eXp6enp7e3t7e3t7e3t7e3t7e3t7e3t7e3x8fHt7fHx7fHx8fHx8fHx8fXx8fX19fX19fXx8fHx8fHx8fXx9fX19fXx8fHx8fHx8fHx8fHx8fHx8fHx/iIeNioeFhoaDg4ODgoGBgoGCgoGBgYGCgYCAgoF/gICAf4CAgHx8fX19fX19fX19fX5+fn53d3d3d3Z4eHl3eXp4enh5eXh7eHp7eXl4eHh5eXh4eHh5eXl5enp7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t8fHx8fHx8fHx9fX19fX19fX19fX19fX18fH18fH19fX19fH19fX19fHx8fHx8fHx8fHx8fX+HiIyIhoeHhIKDhISCgYKBgYKCgoKBgYKBgIGBgYGAgIB/gIGAfHx9fX19fX19fX1+fn5+fnd3d3d3d3d3d3d3eHh4eHh4eHh4eHl5eXl5eXl5eXl5eXl6enp6ent7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7fHx8fHx8fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fHx8fHx8fX19fHx8gIeIi4eHiYWEg4SDg4KBgYGCgoGBgYKCgYGBgIGBgYCAgICBgX97fH19fX19fX19fn5+fn5+d3d3d3d3d3d4eHd4dnl5eHh4eHh5eXl5eXl5eXl5eXl5enp6enp6e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7fHx7fHx8fHx8fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fHx8fH19fXx9fXyBhoqKiYmIhIOFhISCgoGBgYGCgYGCgoGBgYCAgYGAgIGAgIGBf3x8fX19fX1+fn5+fn5+f394eHd4eHh4eHZxZGpeam15eXl4eHl5eXl5eXl5enp6enp6enp6enp7e3t8e3x8fHt7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3x8fHx9fHx8fH19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fIGFiYqJioeEhYWEg4KBgYGBgoKBgYKBgYGBgYCBgYCAgYCBgIF+fH1+fn5+fn5+fn5+fn9/f3h4eHh4eHh5bWRiZV9fXm95eXl5eXl5eXl5eXp6enp6enp6enp6e3t7e3t7fHx8fHx8fHt7e3t7e3t7e3t7e3t7e3t7e3t7e3t7fHx8fHx9fHx8fH19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18goWKiomJhISGhYSDg4KBgYKCgoGBgoGBgYKBgIGBgICAgICBgH58fX5+fn5+fn5+fn9/f39/eHh4eHh4eW5kZWdlZGJeZnh5eXl5enp6enp6enp6enp6enp6e3t7e3t7e3x8fHx8fHt8fHt7e3t7e3t7e3t7e3t7e3t7e3t7fHx8fHx8fHx8fHx9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXyChouJiIqEhYaEg4OEgoGBgYGCgYKCgYGBgYCAgYGBgIB/gIGBf3x8fn5+fn5+fn9/f39/f394eHh4eHl3Z2VkZWZkZWFfaXl6enp6enp6enp6enp6ent7e3t7e3t7e3t7e3t8fHx7e3t7e3t7e3t7e3t7e3t7e3t7e3t7fHt8fHx8fHx8fHx9fX19fX19fX19fX19fXx9fX19fX19fX19fX19fX19fX19fX19fX19fIKGi4eJh4SEhoSDg4WBgYGBgYKCgYGBgYKBgICAgYGAgYCAgYF+fHx/f35/f39/f39/f39/gHl5eXl5eWtlYWJlZWFlZV5ieHdze3p6enp6enp6enp6e3t7e3t7e3t7e3t7fHt7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t8fHx8fHx8fH18fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19g4aLhoiFhYaEgoOEhIKBgYGBgoKBgYKBgYGAgYGBgYGAgIGBgn98fH9/f39/f39/f3+AgICAeXl5eXl0Y2NlZGNmY2doZGZsZF5ze3p6enp6enp6enp6ent7e3t7e3t8fHx7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3x8fHx8fHx8fH19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX1+fn6DhouGhoaGhYODg4SDgYGBgYGCgoGBgYKBgYCAgYGBgYCAgYGBfnx8f39/f39/gICAgICAgIB5eXl6d2RhY2diYmRdW2VfYV1eYGFoeHp6enp6enp6enp6e3t7e3t7fHx8e3x7e3t7e3t7e3t7e3t7e3t7e3t7e3t8fHx8fHx8fHx8fH19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX1+fn5+fn5+foSFi4eGhoaGhIODg4KBgYGBgoKCgYKBgoGAgIGBgYGAgYGBgYF+fX1/gH+AgICAgICAgICAgHl5eW9vYmJiZF5jZ19dYWFgXF9kYlttfHp6enp6enp6enp7e3t7fHx8e3t7e3t7e3t7e3t7e3t7e3t7fHx7e3x7fHx8fHx8fHx8fH19fH19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX5+fn5+fn5+fn5/hIiLhoSHhoaEhIODgoGBgYGCgYGBgYKCgYCAgYGBgYGBgYGBgX5+fYCAgICAgICAgICAgICBeXpwXWJlZGJkXmZnZ2BZYmJhY2VfXF1ze3t6enp7e3t7e3t8fHx8fHx8fHt7e3t7e3t7e3t7e3t7fHx8fHx8e3x8fHx8fHx8fHx8fHx9fX19fX19fX19fX19fX19fX19fX19fX19fX19fn19fn5+fn5+fn5+fn5+foCFjIqEhYaGhYODg4SCgYGBgYKBgYGBgoKCgYCBgYGCgICAgIGBf35+gICAgICAgICAgIGBgYF5emxiZGdjYmdmYWBgZGFiZWRjZGNeXGJ1fHt7e3t7e3t7e3x8fHx7e3x8fHx7e3t7e3t7e3t7e3x8fHx8fHx8fHx8fHx8fHx8fHx8fH19fX19fX19fX19fX19fX19fX19fX19fX1+fn5+fn5+fn5+fn5+fn5+fn9/gYeMiYWGhoeFg4SDg4GBgYGBgYKBgoKCg4KBgIGBgYKBgYGCgoF/f36AgICAgICAgIGBgYGBgXp7dGdnZmZkZGZmYF5fYWNlaGRlXmJkYHR8e3t7e3t7fHx8fHx8fHx8fHt7fHt8fHt7e3t7fHx8fHx8fHx8fHx8fHx8fHx8fHx8fH19fH19fX19fX19fX19fX19fX19fX19fX19fX5+fn5+fn5+fn5+fn9/f39/f3+CiYqIhoaIhoWDhIOCgYGBgYGBgoGBgoKCgoGAgYGBgoKBgYKCgX9/f4GBgYGAgYGBgYGBgYGBenptaGNjZ2ZnZWdmZmdiZWRlYmdbYmVgdnx8e3t7fHx8fHx8fHx8e3t8fHx8e3x8fHt7fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx9fXx9fX19fX19fX19fX19fX19fX19fX19fn5+fn5+fn5+fn5+f39/f39/f39/f4SJioiGiYeFhYSEg4KBgYGBgYGCgYKCgYGBgYGBgYKBgoGBgICBgH9/gYGBgYGBgYGBgYGBgYF7emlpZGNqZmFgZmVjY2NnaWRjYmBiZGJ0fXx8fHx8fHt8fHx8fHx8e3x8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fH19fX19fX19fX19fn5+fn5+fn5+fn5+fn5+fn5/f39+fn9/f39/f39/f3+AhIqMiIeJhoSFhYOCgYGBgYGBgYKBgoGBgYGBgYGBgoKBgYGBgYGAgH+BgYGBgYGBgYGBgYGBgXZzZWRnY2RmZWJlZmdkZmhmZWNgYGNkYHF9fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fXx8fX18fHx9fX19fX19fX19fX19fn5+fn5+fn5+fn5+fn5/fn5+f35+f39/f39/f3+AgICFioyJiIqJhoaDgoKCgYGBgYGBgoGBgoGBgYGBgIGBgYGBgYGCgX+Af35/foCCgoKCgoKCgoKCc3NnZWRkZWlqaGZnZ2NhZmZlZmdmZWVjdX18fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fX19fX19fH19fX19fX1+fn5+fn5+fn5+fn5+fn5+fn5+f39/f39/f39/f39/gICAgICAgIWLioqJioeHhoSCgoGBgYGBgYKCgYKBgYGBgIGBgoKBgYGBgYGAf4B+dHRzdX1/goCAfn5/gYB0cmdkZWNmaWppZWNlY2BmZGRnZ2JiZWFwfXx8fHx8fHx8fHx8fHx8fHx9fX18fHx8fHx8fHx8fHx8fHx9fX19fX19fX19fX19fX19fX19fX1+fn5+fn5+fn5+fn5+fn9/f39/f39/f39/f39/f39/f4CAgICAgIB/houLiouLh4eHhIOCgYGBgYGBgYKBgoKBgYGBgYKCgYCBgYGBgoCAgH5zc3NzdHV4dXV0dHV2dXVwZmNmZWhoaWdoZ2VmZWJfZGVmY2BiZ3d8fHx8fX19fX18fHx8fH19fX19fX19fXx9fXx8fX19fX19fX19fX19fX19fX19fX19fX19fn5+fn5+fn5+fn5+fn5+fn5+f39/f39/f39/f39/gIB/f3+AgICAgICAgICHjIyIi4qHh4eEhIKBgYGBgYGBgoGCgoGBgICBgoGBgYKBgoKCgYCAfnNzc3Nzc3NzdHR0dHNzdW9jY2FnZWhoZ2pmZGVnZmhmY2JlYl5ieX18e3t8fX19fX18fHx9fX19fX19e3x9fX19fX19fX19fX19fX19fX19fX5+fn5+fn5+fn5+fn5+fn9/fn5+fn5+fn5/f39/f4CAgH9/gICBgICAgICAgYCAf4CAgYGAgIeLi4iNiYiJhoSFgYGBgYGBgYKCgYKCgYGBgIGCgoGBgYKBgoKBgIB+dHNzc3Nzc3Nzc3Nzc3N1cmdlZWRlamhoZ2ZpaGdjZWViZGNoZGd7eHVzc3R2dnl4dnR0dHZ3d3d2dHR0dXV4d3h4d3d6e3x9fXx9fn5+fn5+fn5+fn5+fn5+fn5+fn5/f39/f39/f35/f39/gH9+fHt7fX58eXl2dnZ5fHx6end2d3l7fXt4hIyMioyHh4iEhYSBgYGBgYGBgoGBgoGBgYGAgYKCgYGBgoGBgoGAgH51c3Nzc3Nzc3Nzc3Nzc3VzaGVnaGVrbGhqZ2lqZ2dnZmRkYmVkbnV0dHNzdHNzc3Nzc3Nzc3Nzc3NzdHNzc3Nzc3Nzc3N0dHV1c3V3eHl7fn59fn98f39/f39/f39/f314fH5+fXx4dXZ3eXd4dnRzc3N0dXRzc3Nzc3NzdHNzc3R0c3R0dHODjI2KiYeIhoOGg4GBgYGBgYGBgYGCgYGAgYGDgoKBgYCBgYGBgYCAf3VzdHRzc3Nzc3Nyc3NzdnZpY2hqaGpsZWZpbGhgZmVkY2BkZGZ0dXV1dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHRzdHRzc3Nzc3R2dnV1d3V4fH9+fX9+fHp4dXN0dXV1dHNzc3Nzc3N0dHR0dHR0dHR1dXR0dHV1dHR1dXR1dXV1dIaMjYuIhoeEhIWCgYGBgYGBgYGCgoGAgYCBgYKCgoGBgIGBgYGAgIB/dnNzc3Nzc3Nzc3Nzc3N2dnNnZ2pmaGdmaGhmZGlnY2NnZWVmcHZ1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dHR1dHR0dHR0dHRzdHR0dnV1d3Z0c3R0dHR0dHR0dXV1dXV0dXV1dXV1dXV0dHNzc3N0dHNzdHR0dHR1dXR1iY6MjIqHh4SEhYKBgYGBgYGBgYKCgoGBgICAgoKCgoGBgYGBgYCAgH93c3Nzc3NycnJyc3NzcnZ2dW5kXWNnZWlraGVoZ2dqamlnZXB2dXV1dXV0dHRzdHR0dHR0dHV1dXV1dXV0dHV1dHR1dXV1dXV1dXV1dXR0dHV1dXV1dXV0dHV0dHV1dXV1dXV1dXV1dXV1dXV1dXV0dHNzc3Nzc3N0dHNzc3Nzc3R0dHR0dHWKjoyMiYaGhIeFgoGBgYGBgYGBgoKBgYGBgYGCgoKCgYGBgYKBgYCAf3hzc3Nzc3JycnJyc3NzdnZ3d2liaGhnamtpaGZkZGVmaWhwdXR0dHRzc3JxcnJ0dXV0dHR0dHR0c3NycXFxcXNzdHR0dHR0dHR0dHV0cnJyc3R0dHR0dXV1dXV1dXR0dXR0dHR0dHR0dHR0dHR0c3Nzc3Nzc3Nzc3Nzc3N0dHN0dHR0dHR0dYuOjImGhYWFh4SCgYGBgYGBgYGBgoKCgYGAgIKCgoGBgYGBgYGBgIB/eXNzc3NycXJycnJzc3N3d3d3bGpoZGhpa3Z6a2VmZWhnbXJzdHN0c3JwcHBxcnN1dXR0c3Nzc3JycXBvb29vcHFzc3NycnJyc3R0dHNxcXFyc3R0dHR0dHRzc3Rzc3N0dHR0dHRzdHR0dHR0dHRzdHR0c3NycnFxcnJzc3Nyc3NzdHR0dHN2jZCMh4eFhYSEgoGCgoGBgYGBgYGCgoKBgYGAgYGCgoGBgoKBgYGAf395c3NycnFxcnJycnNzc3d3d3dzc2pnaWloeX99cW51bG5wcXJycnFxcG9wcXFxc3R0c3NycXFxcG9ubm1ubW5ubnBxcnJycnJycnJzcXBvb3BxcnJzc3JxcnJycnJycnJycnJzc3Jzc3Nzc3Nzc3Nzc3Jxb29ubm9vcXJzc3Jyc3NycnNzcnaPj4uHhoWFhYOCgoKBgYGBgYGBgYGBgoGBgYGCgoKBgoGCgYGCgX9/f3hxcHBwcXFycnJyc3Nzd3d2dnd2cnF0c252f352c3hwcHBycnJycXFwcHFxcXJzc3Nzc3JxcXBwb25ubm5ub25vcHBxcXFxcXBwcXJwb25vcHFxcXFxcHBxcXFxcXJycnJycnJycnFxcnFxcnJycnFwb29ubm1ubm5vcXJycnJycnJyc3JxeI+OjYaDg4aEgoOCgoGCgYGBgYKBgYGCgoGBgYKCgoKCgoKBgYKBf4B/d29wb3BxcnJyc3Nzc3J2dnZ2dnZ3dnZ1c3l/fnd3d29wcXFxcXFxcHBwcXJycnNzc3JycXFwcHBwb29vb29vb29wb3Bvb29vcHBxb29vcHBwcHBvcG9wcHFycXFxcnJycnFxcXFxcXFxcHBwcHBxb29ubm5tbW5ubm9wcXFxcXFxcXFxcXB7j42NhoODhYOCgoKCgYKBgYGBgoGCgYGBgoGCg4KBg4KBgYGAgYF/f392bm9wcHBxcXFxcXBwcHZ2dnZ2dXR0c3NxfYB9fX9zb3BxcXFwcHBwcXFwcXFxc3FycnFxb3yCb3Bwb29wcG9vb29vb29vb3BxcXBub3Bwb29wb29wcnJycnFxcXBxcnFwcXFxcHBwcHBwcHBwb29ubm1ubm5ubm9ub3BwcHFxcXFxcXFxcIKRjoqEhIOFhIOCgoGBgoGBgYKBgYGBgYGCgoKCgoKCgYGBgYCBgX9/gHVvb29wcXFxcXBwcHBwdnZ2dXRzcnJycnGAgoCBeXBwcHBvcHBwcHFxcXFxcXCHhnBycXBzmIJucHBwb3BxcHBvb29wb29vcXFwcG9wcG9vb25vcHFxcHBwb3Bvb3BwcHBwcHBwcHBvb29vb29vbm5tbW1ubm5ub25vb3BvcHBwcHBwcHBwiZCMiISDhIaDg4KCgYGCgoKCgYGBgYGBgYGBgoKBgYGBgYGBgIGBgH+AdG5vb3BxcXFwcG9vcG92dnVzcnFxcXFxcICDg39ycHBwcHBwcHBwcHFxcHBxcX2hgm9yb4uefG9wcHFwcHBwcHBwcHBvcHBxcXBwcHFxb29vbm9wcHBvb29vcHBvb3BwcHBwcHBwcHBvb29vbm5ubm5ubW5ubm1ubm9wcG9vb29vb3BzcXWPj4uJg4KFh4ODgoKBgoGCgoGBgYKBgYGBgYGBgYGBgYCAgYGAgYGAf4B0b29vbm9vb29vb29vb3Z1dHNxcXFxcXJygIKCgXRxcXFxcXFxcXFxcXFxcXJxdZ2hdnF3n5x9b3FxcXFwcHBwcHFxcXBxcHBwcXBwcHBwcHBwcHBwcHBwcHFxcXBxcXBwcHFwcHFxcXFxcXFxcXJxcnFwcnRycnR0dHR1dnRzdHR0dXd3gpCPi4iDgoaHhISCg4GBgYKCgoGCgoGBgYKBgYGBgYGAgICBgYCBgYB/gHVvb29vb29vb25vb29vdXRzcnJycnJycnKDg4OCdnFycnFxcXJxcnJxcXJycnJxmKiQb4KjnX5wcXFycXFxcXFxcXFxcXFwcXFxcXFxcnNzcnJyc3V1dHR0dHR0dHV2d3d3d3d3eHh4eHd3eHh4d3Z3dnV2dnZ2d3h6e3x7e3t6enp6enyGkI2LiIODiIeHhYODgoGCgYKBgYGBgYKCgoGBgYGAgYCAgYGAgIGBgH+Ad3FxcXFxcG5ucG9wcG92dHV1c3Nzc3NzdYiDgYN5cnNzcnJyc3Jyc3Nzc3JzdHKTqaR5iKGefHJzc3Nyc3N0dHV1dXV1dHV3eHd3d3d4eHh3eHh4eXl5eXl4eHl5eXp6e3t7e3t6enp5eXh3d3d1dnV2dnd5enp7fn5+fX1+fn5/gH5+gIyQi4qHg4WIi4iEg4SDgYGCgYGBgoGBgoKCgoKAgYGBgYCBgYGAgIGAf4B8enp5eXx5eHh2dXZ2dHl2d3h3d3Z3dnZ6fnx+fXx2dnd3dnV4enh4eHh4d3h5eZ+0qaSnqZd9e3l5eXh4eXl6enl5eXh4enp5eXh4eHh3dnd3eHh3eHh5eXp7e3p8fH1+fX9/f359e3t7e3p5enl5e3t/foB/fn5/fn19fX5+f35+fn6AjpCNioeEhoqLiIaGhIOBgoKBgYGCgYGCgoKCgoCBgoKBgYGCgYCBgIF/f4B/fn19fX9/f318e3t7eXh4eHh5eXl4eXh5eXl4enp6enp6e3t7fH1+fHt8e3uJr6ahtaqso357enp4eXh4ent6enp5eXp8fHt6enx8fHp6ent9fHx+fn+AgoGAgYKAgH9/gYGBgIB/f35+fn5/fX1+f4CAf35+f39+fn9/f39/gH+Af4OQjoyHhoWIi4yIh4aFg4GCgYGBgYKBgoKCgoKBgYKDgoGBgYGBgIGBgIB/goOCgoGBgX99f39/f4F6enh4d3h4eHh5eHh5enp5e358enx9fXt8fX19fX19fZillqKyoJmnk32Af319fYCDgoCAf318fXx9fXt9fXx8fH19fX1+gYGChISDgoB/gYGBgH9/f4B/f39/f39+fn9/f39/f35+f3+Af39/gICAf4CAgICAhJCPi4eGhoiLi4mKhYaDgoKCgYGBgoGCgYKBgYGBgoOCgYCAgYGAgIGBgH+ChIKCgICAgH9+fn+AgH9/fn18fX19fYB/fX+Af36AgH9/fn9/gICBgICBgIGBnJyOoLCgn6KfgICBgH5+f39+f4B/fn5+f39/gYB/f4CBgYCAgYOEgoGCgoGCgH+AgYCBgYGAgH+BgICAf39/gICAgYGBgIGBgYCAgICBgoGBgYCAgYGFjo6MiYaHiYyLi4qGhoOCgoKBgYGCgoOCgoKBgIGBgYKCgICBgYCAgYGAf4KFg4KBgYCAf39+fn+AfX5+fn19fX5/fn9/f35+fn+AgYCAgICAfn9/gICBgYCXmo6YsaGYlZyFfH5+fn9+fn5/f35/gIGBgoKDg4KCg4KBgYKDg4OCgYGBgYKBgoKCgYKBgoGBgYGBgoKCgYGCgYKCgoGBgoKBgYKCgoKCgYGBgoKCgoaPkY+KiImKjY6MiYaFgoKCgoKBgYKCg4KCgoGBgYGBgYF/gIGBgYCBgIF/gYWEg4KCgoGCgYCAgIB8fHx7fH18fH9+fn9+fn5+f35+f39/f39/gH5+gIF+fp+rpJekm5uWoZ+Gf319f4B/gIF/f39/f3+BgYGCgoCAgYKDg4SDg4ODgoKCgoKCgoKCgoKCgoGCgoKDg4OCg4ODgoKCgYKCgoODg4ODgoKCgoODg4KCh5KTkIuKi4uPj42Kh4SCgoKCgYGBgoKDgoKBgYGBgIGBgICAgYGBgIGBgYCAg4SDg4OEg4ODgoKCgXx9fHx9gn1+f4GCiIGCgoSCgYGDg4GBgYKDgoODho6fsqiioJmdnaaorKigmZGHgYCAgYCAgH9/f3+AgICAgH9/gYODhYSEg4SDgoKCg4OCgoOCgoODg4ODg4SDg4KEhYWDg4SEgoKDhIOCg4ODg4OCgoODgoCKlJOPioqMjpGPjYuGg4KCgoKBgYGBgoOCgYGBgIGBgoGBgICBgYGAgYCAgH+BgoODg4SEhIOCgoKCfXx8fn6AgYOAg4OChIaFhoaFhIWFg4ODg4ODho2grbGmm5qgm56cnJ2hpKOdlIeDg4KDg4ODgoGAgIKCgYOCgYKCg4OEhYWEg4OChISEhIOEhISDg4OEg4ODg4OEg4SDhIWEhISDg4ODgoKCgoKCgoKBgYKCgo+UlI+Njo6RkY6KiISCgoKCgYGBgYGCg4GBgIGBgYGBgYCBgIGBgYCBgICAgIKChIKChIOCg4ODgoJ9fX2AgH+AgoGDg4ODhIaEhIOEhYWDg4GBg4OBg4uXmpeWmKCbnZ2dmZqXkImGh4eGhoeHhoaEgoGCg4SDg4ODg4ODhISFhYWDhISFhISEg4KBg4OCg4SEg4KCg4SCg4ODg4OCgoKCgoKCg4OEhIOFhYWFhoaIk5OTkI+PkJKRjIqIgoKCgoKBgYGBgYKDgoKBgIGBgYGBgICAgYGBgICAgICAhISEgoKCgoGBgoKBgX+AgYOCgICAf4CCgoGDg4KCgYODg4SDg4GDhYSCgYGGjpSTl5qcnJuUj4mHiIiHh4eIiIiFhIOBgIGBgoKCg4GCg4SEhYSDg4OEg4OEhIOBgYGCg4OEhISDg4ODg4OEhIODgoSDg4ODhIWFhoeHh4eIiIiJiY6Tk5KOj46Rko+LiYeCgoKCgoKBgYGBgoKCgoGBgIGBgYGAgICAgYGAgIGAgICDg4KCgYKCgYGAf4CBhYWFhoOCgYB+fn+BgoSCgYKDhIOCg4ODg4KChISDhIOEiJCTj5SYkoeDgoWFhYOEhIWFg4KBgH9/gIB/gIGEg4OEhYWEgoKBgoOCg4OFhIKDhISEhYaGhoaGhoWFhoeHhYaIh4aHiIeGhoaIiYeGhYaGhoeIkZOSkI6QjpGRjImHhYGBgoKCgoGBgYGBgoOBgYGBgYGBgICAgICBgYCAgICAgISEg4KBgoGAgYGAgYKIh4aHhYSCgH99fX6AgH+AgYGBgYGBgoGAgYKDgYKCgoGAh5uIi4eCgoKBgICAf4GAgICAgH9+gIGBgYKCg4OEg4OEg4OCgoGBgoODg4SEg4SEhIOFhYaFh4eIh4eHh4eHh4eGhoaGh4WFhYaGhISEhIWEhYaSk5GOjo+OkI6JiIeEgoKCgoKCgoGBgIGCgoKCgoKCgYGBgYGAgYGBgICAgYGAgoSDg4KDgoGCgYKDg4iHh4iHhYSCgX5+gICAfn5/f4CBgYGCgoCBhI2DgH+AgIB/g4iOgIGCg4OAf39/gICAgICAgICDg4KDg4ODgoOBgYKCgoOCgYKCgoOCgoSDhISDg4SEhYWFhYaGhoaFhISEhYWEhIWFhYSEhISDhISEhISEipSTkZCQj46NiYaFhIOBgYKCgoKCgYGAgYKCgoKBgoKBgYCBgYCBgYGAgICAgYGAg4OCgoOCgoKBgoOCiImJiYiHhYSDgYKEhIOBgoKCg4SCgoSEgoOJloiEgoSCgn9/jJWCgoGChIKBgYGCgoODgoGDg4SDg4SEg4OCg4KDg4ODg4KCgoKCgoGDhISEhYSFhYWFhIWEhIWFhYWDg4OEhISEhYWFhISEhISEg4ODg4OOlZKRkZGPjYyHhYODg4GBgoKCgoKBgYCBgoOCgYCCgYGBgICAgIGBgYCAgICBgICDhYSEhIODg4SDhIOGh4mIhoWDhIODg4WDgYCDgoWFhISDg4OChI6Zi4OFhISEgoCRmYaCgoKEg4OCgoGBhIWEg4ODgoKDhISDg4ODg4SFhISDg4KCgoKCgoSEhYSFhYWFhYODhYWFhYaFhoWEhIWEhYWGhYWFhIWEhISDhIODhJGUk5KTkI2MioWEhIODgYGCg4KCgoKBgYGCg4KBgYKBgYGBgICBgIGBgH+AgIGAgYaGhoaGhoaHh4aGhYSDhYaCgIGBgYGHgoB+f4GBkIyDgX9+fXx9jJyOgIKBgYKChJSUjIGCgYKDgoGBgYKDhYODg4KDg4OEgoKEhIOEhIWEg4OCgoKCgYKCg4ODg4SFhYWFhIOEhYWGhYWEhISEhIOEhIWFhIWFhIODhIOEg4KGlJSSk5KPjYyIg4SEg4KBgoODgoKDg4GBgoKBgoKCgYGCgYGBgYCAgYGAgICAgICAhYWFhYaGh4aGhoWGg4ODg4GAgoKCgYKAf35/f4GWl4mAfX19fXuBmIyAg4GBgYCOlIyQgYKBgoKBg4KDgoODgoOCgoKCg4OBg4SDg4ODg4OEhIKCgoKDgoKDg4ODhIWEhISEg4OEhIODg4OEhIODg4ODg4SDg4ODg4KDg4KDgouUk5KTko2NioaDhIOEgYGCg4ODg4ODgoGBgoGCgoKCgoKBgYGBgICBgYCAf4CAgICDhISFhYSFhYWEhIWCg4KDgoKDg4OBgICAgICAgZWfin5+gH2Hi36EhIOEgoODgo2JhYyCgoODgoqPgoODgoODg4KCgoODgoKDg4KCg4KDg4WEg4ODg4SDg4SEhISEhYWEhIWEg4SEg4OEhISEhISEg4SEhYSDg4SEhIODgoKDkJSSkpKPi4yIhoSFg4OBgYKDg4ODg4OCgYGCgoKCgoKDgoCBgoGAgICAgIB/gICAgISDhYWEhYWFhYSFhYOEhIWDg4SEhIKCgoOCgoSBkaGKf4yEfYaJgH6FhYWEhYJ/fX19gIOEg4OGmI+Cg4SEhISFg4OEhISEg4SEhIOEg4OFhoWFhYSFhYWFhYSFhoaGhoWFhYWFhYWFhYWGhoWGhoaFhoaGh4aFhYWFg4SEhIeTk5OSkoyKiIWGhYWCgoGBgoODg4OCg4KBgYKDg4ODgoKBgIGAgICAgICAgH+AgICAhYWFhYWGh4eGhYWFhISFhYSEhISEg4ODg4OEhYOJkYOEi4WCgYF+fYGHhoOAfn5/f39/f4OEg42ZlZKIhIWEhYWEhISFhYWEhYSGhYWFhYaGhoWGhYWGhYWHhoaGhoaFhIWFhYWFhIWGhoaHhoaGhoaHh4iIiIaFhYaEhYWGjZSTkpGQi4qHhoeGhIGCgYKDg4ODg4KDgoGBgoODg4KAgYGBgICAgICAgICAf4CAgICHh4eGhoeHiIeHhoaEg4ODhIODg4OEg4ODg4OEhISEgYKCgYmBf359foWBf39/f39/f36AgISFlJujq6KTh4WQh4aHhoaFhoWFhoeHh4iGh4eGhoaHh4eGhoeHhoaGhYODhIWFhoSFhYaGhoeHhoaGhoeHh4eIiIeGhoaHh4eRlJORkZCLiYiFhoWDgoKBgoODg4ODgoKDgoKCgoOCgYCBgICBgICAgIGAgIB/gICAf4aHiIeHh4eIiYmIiIODgoKDgoSEhIWEg4KCg4SEhIOBgICAhIR/fn5/gH9/f39/gIB/f4B/f4mSnaWmpqKTkJKIh4iHiIiIhoaHiImJiYmIh4aHh4eJiIaHh4eHhoeFg4OEhYaGhYWFhoaGh4eFhoeGh4aGh4eHh4eHh4eFh5OTkY+RkIuHhoWFhIKCgYGCg4ODg4ODgoKCgoGCg4KCgIGBgYCAgICAgICAf3+AgYB/hoiIiIiHh4iJiYmIg4KCg4ODhIWHh4aFg4OFhISDg4GAgIGMiYGAgYKCgYGBgYB/gH9/fnt5iZiXnKGgnZ2ajIiJiYmKi4qIiIiJiYuLioqIh4eIiIiHh4iIh4eGh4aEg4OFh4eHhoWFhISDhYWEhYWGhISEhYWFhoWGhYOJlJKQj5GOioaFhoWDgYGCgoKDg4ODgoKCgoKCgoKCgYGBgYGBgYCAgICAgIB/gICBgH+GiYiIiYeIiImJiIiEgoKDg4KDhImKh4aEhIWEg4OCgICAhISCgoKCgoKCgH9+fX19fX59fHt+kpuZnZ6cnZOHiImJiImLiomJiImIioqJi4mGhoaGh4WGiIiIiIaGh4SDg4SHiIiIh4WCgoGDg4KDg4SCgYKDgoGEg4SDgY6TkpCPj4uJhYWGhIKBgYGBgoODg4OCgoKCgoKCgoGBgYGBgIGAgICAgICAgH+AgIGAf4WIh4eHhoeIiIiHh4SCg4OCgoOFiYqJh4WHhYSFhYKAgYOEgoOCgoKDgX59fX5+fn5+fn1+fX2AlZqZm5qZkoWGh4eHh4iHh4mHh4aIh4aJiYODhIOFhISFhYaIiIaFg4KCg4WHhoeGhoSCgoOEgoODhIKBgoGBgYODhIOEkZKQjo+Oi4eEhoaEgoGBgYGDg4ODg4KCgoKCgoKCgYGBgIGBgYCAgIB/gIGAf39/gIB/hYaGhYaGhoeHiIeGgYKEhIOChYeIi4qGhIaEgoaGgoKEhIODg4OCg4F9fH1/gH9+fn59fH1+fHqAlpmZmJWSgoKEhIaFhYODhYSEhISEhIWEgoKCgYSEgYKDg4WGhYSCgoGCgoODhYSEhIWEhIaEg4SFg4KDgYKDg4SFhIeSkY+Nj4yJhYSFhIWCgYGBgYODg4ODgoKCgoKCgoKBgYGBgYGAgICAf4CAgYB/gICAgICDhIWEhYWFh4eHh4aAgYGFg4OEhYSHiIWCgICAgX9/gYSEg4ODgoKAfX1/gICBf31+fn18fX17e3qGl5eVlo+BgYKBgoKBf36BgYGCgYOBgoGCgoKBg4SAf4CAgYKCgICAgYCBgoGDgYGChIODhYSCg4SDgoKBgoSDhYWGi5ORj4+Pi4iFhYODhIGAgYGBgoODg4KCgoKCgoKCgoGBgYCBgYCBgH9/gIGBgICAgH+AgIKCg4OChIOEhYWGhn+BfoCBgICAf4GDgn9+fn5+fX+ChISCg4KDgn59fn+AgIGAfn19fX1+fXx6fHuKlpaThIB/gH9/gIB+fYB/foCAgX+AgIF/f4CBgX59fX+AgX9/fn+AgH+AgICAf4CCgICCgYGDgYGAgYGBgYKEg4aPkpCOj42Kh4eGg4ODgYGBgYGCg4ODgoKCgoKCgoOCgYGCgYGBgICAgH+AgICAgICAf39/gYGDhIGCgoOCg4SFgIB/fH19fn19foCAf31/fn1+gIODg4KCgYF/fX1+f4CAgH9+fX19fHt7e3p7e3yNjIqLl4x9f35+f35/gH9+f3+Af4CAf359fn9/fn18fn+Af35+f3+Af39/f4B/f4B/f4CBf4B+f39/gH9+f4B/hZKSj46Pi4uHiYWEhIKBgYGBgYKDg4ODg4OCgoKDg4KAgYKBgYGAgICAf3+AgIB/gIF/f36BgYSEgYKBg4OCg4OBgH98fn9+fX6Af4B/foF/f4CBhIOCgYB/f359fn5/gICAfn19fX17e3x6enp6eX6MjYqRj4F/fn9/f4CAf35/f4CAgoB/fH5+f35+fXx/f4B/fn5/foB/f35/f4CAfn6Af39+f35/f35+fn19fX2Fk5KOjIuKiImIhISEgoKCgYGBgoOCgoOCgoODg4ODgYCBgYGBgYCAf39/f4CAgICAgIB/foCBhIOCgYGDhISDhICBgICBgIGAgYKCgoGBgoCBg4ODgYGBgYCAfX19fn5+f359fX19fXx8fHt6enp6eYaOh4KCg4KAgIGAf4F/gICAgYGCgoB+gH5/fn5+foGAgYB/f39/gICAf39/gYB+f3+Afn9/fn+Af31+fn17fIaTkYyLioeHioiGhoSEgoGBgYGCg4ODg4OCg4OCgoKBgICBgYGAgH9/f39/gICAgICAgH9+fn+BgYGAgISGh4aHgoSDhYKBg4ODhYSEhISEg4ODhIKCgoKCgX5+fX19fn6AfX19fX19fX19fHp6eXl5e4WEgoKEg4GCg4GAgoCCgYGDg4ODgYGCgIGAf4CBg4GEgoCAgYCBgYGAgYCCgn+BgIF/gIB/gICAfn9/fnx8iZSQiomIiIiJiIaGhoSCgoGBgoKDg4ODg4KDg4KCgYCAgICAgYGAf39/f4CAgICAgIGBf359fn5/f39+g4aHh4iChYSFhISFhIWGhYaGhoWGhYGBg4ODgoKAfX19fX19fn59fX19fX18fX18e3l5eXl4fIKDhIWDgYSDgoKDhYeCg4SDgYKCg4OCgoKCgYKFg4iFgoGCgYKDgYGBgYSDgoOCgYKCgICBgIF/gIGAf36Ok4yHiIeIh4aGhYaGhIKDgoGCgoODg4ODg4OCgYGBgH+AgYGBgYB/gH9/gICBgH+AgYB/fn19fX5+f36Ag4SHh4SGhoaFhoaHh4aHh4iHh4eGf32AgICCgX59fX19fX19fX19fX18fH5+fnx7eXh4eXl6f4KCf4OLhIOEhISXl4ODhIF9foGBgoGCgYKBg4aIjIWDgoKBhIKEg4KDhYSEhYODhIOCg4OCgoKCg4OCgpGQi4iIh4mHhoaEhoWEhISDgYKCg4ODg4ODgoGBgYCAgICBgIGBgH9/fn+AgICAf4CAgH9/fn1+fn+Bf4CCgYWFhYeGh4eHh4eIhoeHh4eGh4V+fX18fX9+fX19fX19fX19fX19fXx7iJKCe3x6fIZ5eXl8gIB9h5SDg4OEhJSTgIGBf39/fn6Ei4B/gICEhpCJhYSCgoGFhYuDgYKFhYaGhIOFhYOEhIODhIOEhISIko+MiYiIiYeHh4WGhYSEhIKBgoKDg4ODg4OCgYGBgYB/gIGAgICAf39/f4CAgICAgYGBf39/f4CAgIGBgYGBg4OGh4aGh4aGiIeGhoaFhIOFhH59fHx8fX18fH19fX19fX19fX18fH+RlZaDe3qElHx5enp7fH2BgoGCgYOCgH59f397iJF8fI6Wf31/f4KGioWDg4SDgoONiX99f4OEhYWDhYaGhIWFg4SFhYaEhI6Rj4yKioyJiImHhYWFg4SDgYGCgoKDhIODgoGBgICBgICAgYGAgIB/f3+AgIB/gICAgX5+f4GBgoKCgoODgoOCgoWGhISFhYSGhIOEg4KBgIKAfn19fHx9fXx8fH18fH18fX19fHx8e4uRl4x6e3yBenl6e3x5eX1+f4B/gX99e3x/fn2ClZF/hIh9fH5/goR8fIGChIN/f4eDfYKBgIKCgIODhISEhISChIOEhYGEkZGOi4yMjoqJiYWFhYODg4KBgoODgoKDg4KCgYGAgIGAgICAgICAgH+Af3+Af357gICBenyAgYKDhYODhYWFhYODg4SCgYKDgoOCgoGBgIB/gX5+fX19fHx8fHx8fHx8fHx8fHx9fHx8fn6Kgnt6e3p4ent7fH17fn5/f35+fn59fICBgH6Gj4F+fYJ+f36Agnx8gH+CgIGAfnx7ioJ9gH9+gYCAgYKAgoCAgIGAf4uUkIyMjo6NiIiHhYWFhIOCgoKCg4OCgoODgYGBgICAgICAgH9+fXx7fHx9f3+AgHx6gYF4e4CCgYOFhIOFhIaGhYSAhpSIgIKBgYGBgH9/f39/fn5+gHx8fHx8fHx8fHx8fHx9fHx8fHx9fHl6e3t4eHl7e3p8goCBf4CBfX9/gH99gIKCgICAgX+CkYF/f4CAfoB+fn9+gIGBfX19e319fXx9fHx9gH+AgH6Afn6BlJKNjI2Oj4qFhoaFhISFg4KDgoODg4OCgoGBgYGAgICBgICAf4CAf39/fXt6fICAgHh+gXd7gIF/goKCgoKEhoeGhn6IlYp+gIGAgIB/foB+f39/fn+Bfnx7fHx8fHx8fHx8fH19fHt8fHx8e3x8fHp6eXt8en2Fg4OAgYF+gH9/gH6FgoF+gH9+foCFhoKAfn6Dhn99fH5/gIGAf39+fX19fX57fH1/f3+AfX9+f4yRjo2Njo2Nh4SGhoWEhIODg4OCg4ODg4KBgYGBgYCAgYGAgYGBgYGAgH9/f397en9/e3mAd3p/f31/f3+Af4KEhoaFf3+FgX5/gIB/gH5+f31/gIB/f4B/f319fHx9fn18fH19fX19fH58fXx7fXx8ent6fH19f4aFg4CAgH1+fX5/fouEgYd+fXx8f36Cgn99fX19gXx7fXx+gYSDgYB+fn5+fXx+f4B9foB+f36Eko2NjI+NjIqGhIWEhIODg4OCg4KDgoOCgYGBgYGAgYGBgYB/fXx8fH1+f39/f397e399d352eH59fH18fX5+gYGCg4B6fn58fn6Af35/f35/fn+AgH+AgH9/fn9+fn5+fn1+fn99fH59fn19fXt8fHx7e3p9foCAg4OCf35/fHx8fXx8gYN+jH58e3t9fn1+fn17e3t9fHt7e3uAhoSChIOCf4B+f4KCgn9/goJ/gIuQjY2MjYuKiISEhIODg4ODgoKCgoKCgoKBgYGAgoGBgYKCf3+AgIB/fn18fH5/fn55fX52e3Z4fXx8fHt9fX6BgICAf31/f31+f39/foB/f39/f3+Af4GBgH99gH9/fn9+fn5/f3yCfX59fX17e319fHp8fH2BgoGAgIB9fX18fHx8fH18fnt/fnt7e3x8fH18e3t7e3x8enp9en6CfoKEhIOBgoGFhoWFhoaHhYGEkY+Ni4qLh4eFgoOEhISEg4KCgYGCgoKBgoGBgYGBgoGBgoKAgYKBgYCAgH9+e3x+fnx6fnh5dnd8fHx7e317f4GAf35/foB/f35/f35/gH9/f39/f39/gYKAfn6BgIB/f39/f39+fYN8fH19fH99fX19e3x+fn9/fn5/fnx8fXx8fXx+fnt8e3x8fHx9fH18fnx9fHt7e3x5e3x7e316fX5+f4CAg4eJiYmKiIqJhYiSj42JioeFhYOCgoODhIOCgoKBgYKBgYKBgYGBgYKCgoGCgoCAgX98e3p6eXt9enx+fnl8eXh4dHx8fHt8fHx+gH9/f39/gIB/fn5+fn+AgH9/f3+Af4CDgoB/gIGAgIB/f4CAgH58enx9fX59fX5+jIZ9fX57e4ODfX19fH18fX19fX1+fH17fXx9fX59fn19fX18e3t6fHt8fHt6e3t6enp7fn6DhYiHiIqLi4uJjJGQjoqJhoWEgoKCgoODg4OBgYGBgYGBgYGBgYKCgoOCgYKBgIGBf3+Af356eHl5en5+e3l6eH5zfHx8e3x8fH5+fn5/gH+AgIB/fn9+gIF/f4B/gIGAgoSEgYCAgYGAgX+AgYKBf39+f31+gH57foGSjHx9f4qAjYx+fn19fX5+fX59fHx8fn19fXx9fX1+fX1+fnx7e3t8fH18e3p7e3l6enl5e35/g4OEh4mKiImOkI6MiYmFhISCgYKCgoKCgoGCgoKBgYGCgYKCgoGCgoKBgoKAgYGAf4CAf39+e3p5e319eHx6f3KBfXt7fXx8fn59fYGBf4GBgX9/gH+AgX9/gIGCgYGFg4SCgYGCgYKCgICBg4KAf4F/fX6Afnx/f4mCf36DkYSEg4F/fn18jYd9fX59fXx+f3x9fXx9fX5+fX5/fH18e3x9fnx8e3x9enp5eXl5ent+foCBg4eEiI+Oi4qHhYSEg4KBgoKCgoGBgYGCgoKBgoKCgoKCgoKCgoGCgn+AgIB+f39/fn5/ent5fX16enp9cX6Cent9fX19fXp4f4KAgYKCgICBgYGBgICBgoKCgoWFhIKBgYKBgoF/gIKEgX9+gYB9foF+fX5/gIB9foCEgH5+f31+fX2KhX1+f31+foB+fX18fH5+fn99f4B9fX18fX9/fHx7fH17e3t6enp7e3x9fn6Ag4CJjouMiIWFhYSDgoKCgoKCgYGBgoKBgoKCgoKCgoGBgoKBgYKCf4CAgH9/f39+fn59eXp6fXx5d3t0e4d8dHd9fn17e3Z2fYCBg4KBgYKCgoKBgYGDg4OChYaEg4CAgIGDgX+AgYSBfn6Af31+gH59fn6AgH+Bfn+Af39/gH99f39/f3+Afn9/gH58fX18fn5+foF/gH2CgHx9gIB9e319fXx8fHx9e3t7fHt8fH19fIqKiYmGhoWFhISDgYKBg4KAgIGCg4KCgoOCgoKCgoGCgoGBg4J/gIGAf39/fn5+fn57enp8fHt2e3R3f352cnt+fnt4dnd8gIGCgoKBgoODg4OCgoSDhIOFhoOCgX9/gIKBgICAg4B+foB/fX+AfX1+foCAf4J/gYCAgICBgH1/f3+AgICAgIB/fnx9fX19fn59g32AfoKAfX6AgX98fn59fX17fX58fXx8fHt8e3x+ioeHhYaIhYSFhIKCgoGDgYCAgoKDgoKCg4ODg4KBgYGBgYGCgH6AgYB/fn5+fn5+fn56e3p9goN9dXF6fHpxen59eXh0dICAgoKCg4KDhYOEg4KDhISEhIWEgYGAgH6Agn9+f36Bf35+f4B9foB9fX1+gH9/gYCBgICAgIGBfn6Af4GAf4GAgH9+fX19fn1+fn19gYR/gH9+f4GBf31/f319fn1+fn1+fHt8enx7eoCIg4SEhYSEhIWDgYKBgYKBgICCgoOBgoOEg4SDg4KBgYKBgYOAfoCBf35+fn5+fX5+fnt7en6Jh354cnl9f3F6eHt4eXV1fYKDgYODg4OFhIWDg4OEg4OEhIOBgICAf4CBfn19fn9+fn5+gH19f3x9fX6Af4CAgIKAgIGAg4KAf4B+gIF/gIGAgH9+fn5+fn1/fn6FhYGBgX+Ag4F/foGAf35/f4B/fn17ent6fHt6goWAg4KCgoKCg4GBgYCAgoGAgIKCg4KBg4SDhIKEgoGBgoGCgoB+gIF/fn1+fn5+fX59fXp7fIWEe3tzeXt8cHd1dnd5dXR6hISBhISDhIWFhoSDg4WEgoODgoCBf39/f4B9fX1+f31+f39/fn1+fH19foF/f4B/gIB/gICDgoGAf36AgH+AgYCBgH9/f39/f4B/gIGCgoKBf4CDgn9/g4J/f4B/gX+Af3x6fHp8e3yCgH+Cf3+BgIKCgYF/f3+BgH6BgoKDgYGDg4KEgoSCgYGBf4GCgH6AgH9/fX5+fX19fn19e3t6gH94fHZ5enxxdHh3dnh1cnmFhYKEhIKEhYWGhISChIOBg4GAgIF/f4B/gHx9fX6AfX5/f39+fX98fn5+gX+BgH9+f4B/gYOCg4B/f4GBgIKBgYGAgIGAgIB/gIGAgIKDgYF/gISAfYGDhICAgX+BgYKBfXp7e3x8fYB9f4B8f399fYGAgH59fX9/foKBgYKBgIKCgoKBg4KCgYB/gYKAfn9/fn99fX1+fX19fX19ent7fHZ9eXh6enJ1eXl2d3dzdYaFg4WFgoSEhYSEhIGDgoGDgX+AgX5+gH6AfX19foB+f4B+fn99f3x/f4CBgIF/f3x+gH6AgYKDgYCAgYOEgoGAgYB/gYCAgYGAgYGBg4OBgX+Ag4B+goOEgICCgYKChIJ+e3t8fHx9fn1+fXp+fX14fn9/fHx8fn5+gYCBgYCAgoGBgYGDgoGBf4CAgoB9fn19f319fX59fH19fX16e3p8dnx6d3t4cnZ5e3Z2dnN0hoSEhYWChISFg4ODgYOBgYOBgIGBfX+BfoF9fX1/f39/gH5+f359fYB/gIGBgX9+fH5/fn5/gYJ/gYGCg4eFgX9/fn6Af4CAgICAgIKCgYCAfoCCf3+BgoOBgYOCg4OFg399fX18e3x8eXp7en15e3l4f357fHt+fX1/f4F/gH6BgICAgoOCgYF/gIGBf31+fH1+fX19fX18fn58fXx5e3x4enx3endzeHd6c3Z2c3SFhISGg4KDhISDgoKCg4GCgoGAgYF9gIB+gH1+fX5/gIB/f39/f3x/gH+BgIGAf359f39+fn+BgH2AgIGDg4N/f359fn5/f4CAgH9/gYKBgH9+gIF+f4CCgoCBg4KEhIaEgH5+fHx8fHp5dnl5enl2eXZ+fHt7e359e399gH59fX9/f3+BgoGBgX5/gYF+fX18fX19fX19fXx+jYF8fXl7e3p5fHd4eHR1dXhyd3d0doaEhIWEg4ODg4OCgYKDgoGDgn+Bf35/fn+AfX19fX6AgIB/f39/fIB/f4GAgYCAf3yAf35/fn9/fX5+gYGCgn5/fn1+fn5+f3+Af32AgIB+fn1/gX5+gIKCf4KDgoOEh4SAgH58fXx8e3x1eXl4eHh5d3t8e3t7f4V9fn1/ent+fn59foGAgIGAfX6BgH59fXx9fX19fX18e32Dgnx8ent7e3p7d3Z4dXJzdnB4eXJ4hYWFhYOEhIOChIKBgYKBgIKBgIF/fn5+foB+fX58foCAgH+AgIB8gH6AgH+BgIB/fYB+fn9/f359fX6AgYGAfn9+fn59fX5/fn9+fH6Af35+fn+Cfn6AgIF+gYOCg4OGhICBfnx9fHx7fHh3e3h1eXd3eXx6e3t9kod9fH13en1+fn19f35+gH98foB/fn19fH19fX19fHt8ent9enp4e3x6ent4dHh1cXJ0cHh4cXmEhYWFg4SDgoODgoGBgoKAgoCAgIB9fn5/gH18fnx/gIGAgICAgHyAf4B+f4GAf399gX9+f39+fX18gICAgIB+f35+fn18fn9/f358fYB/fn1+gIJ/foCAf36ChIKCg4WFgoJ+fXx7e3x8eXd7eXd4d3d4e3t6e3yFiX17end6fH19fHx9fX1/fnx9fn59fX18fX5+fX18fHt6enx7e3p5enp7enhzd3VxcXNveHdxe4WGhYWDhYKBg4OBgoGBgoCCgICBgH5/fn9/fXx+foCBgoGAgIGBfX6Af35/gX+Af3+BgH9/f319fH1/gICAgH9/f35/fXx+f39/f319f39+fn6CgYF/gIB/foGDgoKEg4SCgn5+fHx6fHt7eXt6d3N2d3h5e3p7eXp/fnt7d3p8fXx8fH59fH19fH19fXx8fX19fX99fXx9e3l7fHx7enp6enp6eHN2dXBwcm93dnJ7hYaEhYOEgoGDgoKBgYGCgYKBgYGAf4B/f399fX9+gICBgYJ/goF9foF+fn+Bf4B/gIJ/gIB+fH58f3+BgICAf4B/f4B+fX5+f4B/f39/gH9/f4J/gICAgIB/gYGAgISBgoKAf39+f3x9fn56fYR+dHx9enp6enx5eXp6hoV3eXx8fHx8fXx8fHx8fX19fHx9fX19fn19fX16eX18fH16enp6enp5c3V1b29xb3d0c3yFhoOEgoOCgYKBgoKCgYKBgoGCgYCAgICAgH59gH+Af4GCgn+CgX+AgX5/gYB/f4CAgn+Bf319f35/f4KAgICAgIB/gIB+fn1/gH9/gIB/f39/gH+AgICAgH+AgYCBgYGCgYCAf39/fn1/fnuBko16fH18e315e3p6eHqBgXh5fHx8fXx8fHx8fHx9fX18fH18fn1+fn59fHp8fHt8fXt5enp6eXl0dXVvb3Fwd3N0fYWGg4OCg4KAgYCCg4KAgYGCgYKBgYCBgIGAfn6Af4GAgYKCgIKCgICCfoCBgX9/gX+BgIF/fH6Af3+AgoCAgICAf3+AgH9+fX6Afn2AgIB/f3+AgICAgYCAf4CAgYCBgYKCgICAf39/fX5+fIGGiXx8fnt7fnl6e3p7j393d3l7fHt9fHx8fHt9fH19fX18fXx+fn5/f358enx9e3x9e3l6e3p5eXN0dW5zcXB4cnV6hYaDg4KDgoCAgIKCgYCCgYKBgoGBgYKAgYF/fn9/gYGCgYKBg4OAgYJ/gYGBf4CAgIB/gX99f4F/gICBgICAf4B+gICAf359foB+fn+Af39/gH9/gICBf4CBgH+BgIGCgoKAgICAgIB9foB9gIOCe35+e3x9e3p8fHuHenh4eXx8fH17fHx9fX18fH19fn19fX5+f3+Af317fH18fHx7enl7e3l5c3J1bnZycHhxdXaFhYOEg4KCgICBgoF/gIKCgoKDgYGDgoCCgYB/gICCgoKBg4KEhICBgX6BgoF/gICAgH+Cf36AgYCCf4B/gIB/gH+AgIB/fn2Af35/f4CAgH+AgH+AgYF/gICAgIGAgYGBgYGAgYCAgH9/gH5/fX59fn57fXx9e3x9eHh1eHh5e3x8fXt8fHx8fX5/f39/fn19fn9/gIGAf3x9fHx9e3p7eXp8eHpzcnVud3FxenF2d4WFg4SDg4KBgoKDgICCgYSDg4SBgYOBgoKCgYCAgIKDgoCCgoSDf4GAfoKDgICBgICAf4CAf4GAgYKAf4CBgH9/gICAgIB/f4CAgH+AgICAgIB/f4CBgYCAgICAgYGAgoOCgoCCgYGCgYB/f4B/gId+fnx7fXx7fX94d3Z5eXp8fHx8fHt8fH19fn5/gIGAfn1+gICAgoGAfH59fX58d3t6ent5eXNxdW53cHV6cXZ5hYWCg4KDg4KChISAgIOBhoODhIGChICEg4KCgICCgoSBgYKBhIJ/gIB/gYOCgYCBgYCAf4GBgYGBg4B/gIOCf35/goGAgH9+gYCBf4CAgYCBgYCAgIKBgYKBgX+BgYGBgoOCgoOBg4OCgYCBgH9/hH19fXx/fXp9f3t6dnp4eXt7fH19e3x9fX19fn+AgYGAgH+AgICDg4B8f35+fn15eXt6enp5c3J0b3dxd3lzd3uFgoKCgoOEgoOEg4CAg4OGg4ODgoKEgYSDgYOAgIKBg4GCgoGCgX6AgICCgYKCgYKCgIGAgICCgoGEgH6Bg4F/f4CDgoCBf4CCg4KAgYKBg4KDgoGBg4KChIGAgYOBgYKEg4KEhIODhIODgYGBgoCCf4B/fYB8enx/e3t3fHl5eXt6fX59fHx8fH1+foCBgYCAgIGBgYSEgH2Af39/f357e3t6e3p0cHhxeXR2eHR2e4SCg4KDg4SChIODgYKChIaEgoOCg4SBhIOBg4CBg4KCgoKCgYKAf4GAgIKBgoGCgoKBgIGBgYOCgoOAfoGDgX9/gYSEgYN/goKBg4KCgoGEg4OEgIKEgoOCgoGCgoOBg4SDhIOEhISFg4SCgYOCgYOBgYGAgH58fIB9fHh8eXp5enx9f3x7fHx9fX18fICAgICAgYGBgYKBf4CAgICAf3t7e3p6enVweHd5dnV8dXZ8gICDgoODg4OEhISBgoOFhYWDg4KDhIKEhYKCgYKDg4GCgYKAgYB+gYCBgYKDgoKCgoGAgYKCg4KCg4B/gYOCgICChIODgoGCgoGDgoKDg4ODg4SAgoSDg4OBgX+Bg4KDhYKEhISEhISDhISChIOEhIKBgoCBgHt9gX58eXx6enp9fHyBfnp8fH19fHp7fn5+gIB/gYGBgICAgIKBgIB/fX18fH18dnJ2eHh2dH92dX2Hh4OChIWDg4SFhIGChIaEhIOCg4SEgYOFg4KCgoODgYOBgoCCgH2AgIGCg4KCgoKEgoCCgoODgoKBgICCg4KAgYOFhIOCg4CCgoOCg4ODg4OEg4CCg4KEg4KCf4OBgoSEgoODhISEhIOEhIOEg4WEg4ODgoKAe4CBf3x8fXp6fH2AfX9/fHx6fH59fH19fn5/f39/gICAgH9+foCBgICAfnx9fn5/fn18fHh2f3Z3f4SHg4KDhoODhIaEgYKFhoWEhIODhISChIWFgoKDg4SCg4KDgoKBfoCAgoKDgoODg4SDgYKCg4OCg4KCgYGDgn+Cg4SDg4KEf4KEg4ODgoSDg4SCgIOEg4SDg4KCg4KChIOCg4OEhISEhIWEg4OEhYSFhIOBgoB9gYKAfXx8e3x8gH19foB+fn1/fnx8fH19fn5/fn+BgYGBgH9+fX6BgYB+fn1+fX59fX5+f3+AfH2AgYKCg4OGg4SDhoSBgoiGhYSDg4SEhYGFhYWDg4SDhIODgoOCg4F+gYGCg4SCg4OEhIOCg4KEg4ODgoKDgYOCf4KDg4ODgoOAgoWDg4ODhIODhIOBgoSEhYODgoODgoGEg4GDg4SEg4SEhYSEhIWFhYWEg4ODf36BhIB9fXx8fHx/gX5+f39/fX99e3x9fX19fX5+f4CBgIGBgH99fH6Cf39+fn5+fX1/f39/gICAf4CEhIODg4WDhIOFf36CiouFhYSDgoSFgYaGhoOEhISEhIODg4OEgn+BgYODhYSFhIWEg4KEhISFhIODgoSDhYKBhISFhYaEgoCDh4SDg4OFhIWFhIGEg4OHgoOCg4GCgYSDgoODhIOEhIWEhYWHh4aHhYSEhYSBf4GDf35+fH5+fX+BgH9+fHx/f358enx9fX19fX5+fn9/gIGBf319fIB/gH5+fn5+f3+BgYGBgYKAgYWFhIOEhIKEg4aAgoSFi4mEhISEhYWCh4aGhISEhIWEhISEg4SDgYKDg4OEhIaEhYSDg4SEg3yDhHuBhHd5g4F9hH5+cnWDgoF2foOEgH2BdYF6hH9/f36EhIKDgoKBg4SDhISFg4SFhoSFhn2EeX1+f4N7hYOAhIOAf31+f35+gYOBfXt/fX6Afn18fHx9fX19fH19foB/gYJ/fX18f4GBgICAgH+BgYGBgYKDg4KChoSEhIWEgYOEhYOEhYSKiIWFhYOFhYSGhoaDhISFhYWEhYWEhIWCgoOEhYWFhoSFhIOEhYWCaICFanx7cXF8gXOGc3R0fYKDdXNxg4ZzcHVyc3SDdnt9dYF/goOAgnZ5hYCDgIR/hYSChYWCaHpyc3N8gHKBhH6Dg32BfX5/fn+Cg4J8f4F9f4B9fXx8fHx9fHx8fn1+gX+BgX99fX2AgYKBgYGBgIGBgYKBgoKCgoSHhIWEhYSBgoSGhoOFhIaIhoaFg4aGhoeGh4OFhYaFg4KFhoSFhYODg4SEhoaGhIaEg4SEhn1we4FweXZ+g3+CbnlwdXN8dnl5hnKEg3B2eHF2dHR1cnN0dml/gG5yb3R2bnVsd216c26Ah3ltfXJzdnN2bW53bHB5bHV9f358foGAgX2Af32Af4B/fX18fH19fH1+f32Af4CAfnx/foCBgYCBgICAgYGAgIKDgoKDhYeGhoCChYODhYeGg4WFhYaHh4SDhoaIiYaHhIWGiIeEg4WGhYWEhIOFhIKFhoaFhoWEhoWHdnB0e3BydX+HhYNtdW92b3x1coR5eYd4cXR3bndod3pucHaCcoN+b3p5eW1vbnpvb2x3fXiGcHF6cHJ0ZoF1fm57eXNveX+Af31+gYB/e39+fYF+gIB+foCAgYB+fn9+foF/gH9+fYB9f4CBgIB+fn+BgH9+goOCgoSFh4eEfoeEg4OFh4aEhYWFhoaIhISGh4iIhoeEhoaLioWEhoeHhYSFhIWEgoWFhYWGhYWGhYZxdXByc29zenl+hHSIdHV+iHZugnKEhnluanJ/cW1zd3x/dXR8hH54cXV3bnl1enF2eHV6eYRyaW95eHBreXN6b3p3dnZwgYB/fn5/f396fn19f31/f359gIGDg4CCg4GBhIKBf4GCgH1/f4F+f359foGAfn6BgoCAgoSHhoODhoSEhIWHhoWFhYWHhoiFhYaFh4eFhoSGhomIhYSJi4iFhIaFhoWDhYWEhoaGhoaFg3iLeXKIentwcIWEeIV4eWtzfnl7a3KDh4N6fG16eXl0fYB2bm+AgG90fHV3cHl9fW19dW+DhYZ6gHJye3x1cG96a3N8bnaCgYF+fn99fXt9e3x9fX9/fn1/f4KCf4GDgYGDgYB/gICAfn9+f31/fn1/gH58fYGAfn6Ag4iFhoOFhYWFhoeFhYWFhYeHiIaEhoWHhoaFhIWFhIWFhomKh4WFhoWGhoWGhoSGhoaGhoWGh4eHhoaEhoWGh4iHhYeGhoOHhoWFg4SFhoWGhIaEg4SEhoSDgYODhIOFg4WEhYSGg4WGhYWEhIWHhoSEhYaFhX13hYOEhIOCgX5/fnt8e357fH1+f399fH9+gYB9f4F/f4GAfn5+gH5+f35+fX99fX5/fHt8f358fH+BiYaFhIaGhoWGh4WFhYWGhoeIhoSGhYeFhYWDhIWGhYSGhoeGhYSGhIWGhoaGhIeGh4eGhoeIiIiIhoWHhYaGiIaFiIeIhYeGhoiFhYaHhYaGhYOChYWGhYWDhYSEhIaEhoWEhYWDhoaFhYWEhoeGhISFhoOFhIKEg4OFg4OBfYB/e3t8fnt8fH1+fnx8fn2Afn1/gH5+gH99fXyAfX5/fn5+f3x8fX57fHx/fHt7fn+Ih4SEiIaGhYeGhYWEhoaGhoiHhIWGh4aFhIODhIaFhIeFhoaFhYaEhYaGh4eFh4aJiIaGiIeIiYiFhYiFhoeGh4aHhoeFh4eGh4WFhoeFhoaFg4OFhoaEhIOEhIOEhoSGhoWFhYOGhoWGhYSGh4WEhIWFg4SIhoSDg4SDhIJ+gYB8e31+e3x7fn59fHx+fX5+fX9+fX1+fnx9fH98fn58fYF/fHx8fXx8fH56e3t8foiHgoWIh4eGhoaGhISGhoeGiIaEhYSHhoSFh4OEhYSFh4SFhoaFhoSGhoeHhoaHh4mIhoaIh4iKiIWGiIWGh4aHhoeGh4WIiIeHhYaGh4WGhoWChISFhoWFhISEg4SFhIaGhoWGhIaFhoaFhYaGhYSDhISDhIeDhIGChIWDgYCAgXt7fn18fHx+fXx8fH1+fH18fn18fX18fHx8fXx+fXt8gX99fH18fnx8fHp6fHx9iIeChoiHhoeGhoaEhYaFhoaGhYOFhIaFhIiJg4GEg4SGhIaGhoaGhIeHiIiHh4eIioiGh4iHiImIhYiHhIaGhoeHh4WHhoiIh4eFh4eHhYaHhIKEg4SGhYeFhISEhISFhoaGhoaFh4WFh4WGhYaFhIOEg4OEh4GDgIKDhIKCgn+Ae31/fXx8fH59fH19fH17fHx7fHx9fXt7e318e359e3x/fX18fX1+fXx6ent7fHyIh4KGh4aGh4aGhYSFhoWFhYWEg4WChoSDiId/enqChYaEhoaFh4aEh4eIiIiHhoiKh4aHh4eIiYeFiIeFh4eGhoeHhYeGiIiHhoWHhoiGhoiEg4SEg4aGh4WFhISEhYaGhoaGhYaHhoaIhoaEhoWDg4ODgoOGgYN+goKDgIOCf398f39+fHx9f318fX18fnt7e3p7fHx8e3t7fnt7fXt6e358fHx8fX5/fXt6fHp8fImHg4aFhoWGhoWFhIWFhYWFhIOBhIGGhIKEhHyAhn+ChYWGhYWGhYSHh4iIiIaFiYqHhYeGh4iIh4WIhYaHiIaGh4eGh4aIiIeFhoeGh4WFiIOEhoWDhoaHhoWEg4WFhoaGhoaFhoaHhoeHhYOFhYOBgoKBg4WCg36BgoF/hIJ/f35/fn98fH1/fXt9fXx+enp7eXt8fXt7e3t+fHx8fHp7fXx8fHx+fYF8e3t7e3x8iYeEhoSGhIaGhYSFhYWEhIOEgoCDgYaDgYJ/eoSMe4CEhYeGhoaEhIeIh4aHhYWHiYeEh4WGhoiGhYeEhoeIhoaIh4eHhoeIhoSGhoaHhYWIg4SFhIaGhoeFhYSDhYWGhoeGh4WGhoaFhoaEg4SFgoGCgYCEg4KCfYGBf36DgX5/f4B8f3x9fX59e359fH15enp5e3x9enp7e318fXx8enp9fHx9fH5+gHt7e3x+fXyIh4WGhYeEhoSFhYWFhIODgYOBgIKBhYJ/gH9/fXx7gYSFhoaEhYSEh4eGhoaFhIaJhoKGhIaGhoWFh4WHiIiGhYiHiYeGhoeFhIaFhYeFhIeDhIWEiIaGh4WFhIKFhYaFhoaHhYWGhoWFhoKDg4WBgIGAgISAg4B8gYB+foKAfYB/gX2AfH1+fX57fn18e3l6enl6fX15enp7fHt8e3t6e319fH18f35+fHt7fX59fIiGhYaGhoWFhYSFhYSDgoKAgoGAgICDgX5+foB5en2Ag4SFh4WEg4OHhoOEhYSChYiFgoSDg4WFhYWGh4aIiIaFiIeJh4aFhYWDhoSFh4ODhoSEhYSHhoWGhYaEgoWFhoaGhoaEhYaGhIWFgoKDhH9+gICAgYCDgHyBf31+gn5+gH6Af399fX59f3t/fXt6eXp6eXp8fXl6ent7enx7e3t7fH19fXx/fn18fHx/fnx7h4WFhoaGhoSFhIWDhYKBgICAgYB+f4KCfX1/f3t/f4KDg4WGhYSDg4aDgYOEgoCFh4WCg4GBg4SEhYaGh4eHhYWIhomHhYSEhIKFg4SGgoOGhISGhIeGhoWFhYOEhYSFhoWGhISEhIWDhYSAgIKDf35/f39/gIN/fIB9fX+CfYCBfn6Bfn5+fX1/e398e3p5enp5ent8eXp6e3t7fHp7e3t8fX19fYB9fXx8fYB/fXyGg4aGhYaGg4SDhoKFgYGAf3+AgH5/gYF8fn9/fn+AgoKChIWDgoGChIGAg4KBgISFhIKBf4CCg4KEhYWHhoaEhYeFh4WGgoOCgoOCgoWBg4WEhYaEhoaGhoaFg4SEg4SFhYWDhIODhIKEhIB/goJ/fX5+fn5/hH57f3x8gIF9gYB9foN9fn59fX57fnt7enl7enl6ent5enp6e3t8enx8fHx+fn1/gXx9fHx9f4B+gIaEhYWEh4SEg4KGgoOAgYB+fn+AfX9/gnx9f35+f3+BgYKEg4KBgYKCf4CBgoCAgoWEgoB/gIGCgYKGhYeFhISGhoOFg4WBgoGBgoGCg4GChISEhYWGh4eGhYWEg4ODhIWFhIGDgYOChIODgH+AgX59fX5+fH6Dfnx+fHyBgX6Cf35/gnx/fn19fHx8e3t6enp6eXt5e3p5enp6e3x5e317e35/f4GAfX99fX1/gICAhoSEhYSFgoSCgoSCgoCBgH59fn9+fn6AfX2Afn5+foGBgoODgoSHgYF+gICBf3+ChIOBf35/gIJ/goWEhYOCg4WFgoSBg4CBgIGAgYKBgIGEg4OGhYWHh4WEhIWCgoKDhYSCgYGBgYCFg4F/foB/fnx8fn18foN9e358fYB/gIN9fYCBf35/fXx8fH17e3p5enl5e3l6enl6ent7e3p7fXx8f3+BgoB+gH+AgH+AgIDKysrKysrKysrKysrLy8vLy8vLy8vLy8zMzMzNzc3Nzc3Nzc3NzczMzMvLy8vLy8vLy8vLy8vLzMvLy8vLy8vLy8vLy8vMzMzMzM3Nzc7Oz8/Pz9DQ0NHR0dLS0tLS0tLT09PT0tLS0tLS0tPT09TU1NTU09PT09PT09PT09PT09PT09PT09PT09PT09PT09PS0tLS0tLS0tLS0tPT09PT1NTV1dXV1dXV1dXV1dXV1dXV1NTU1NTT09PT09PT09PT09TU09PU1NTU1NTU1NTU09PT09PS0tLS0tPT09TU1NTU1NPT09LS0tLS0tLR0dHR0dPHhnNlYFtLWWdVTUZIQD03Nzg5Nzw8PDo8Oz42Oj04PDs6OTg3ODs7Oj87PTs8PD47P0E/QkJBQ0RFREE+PTw7QENDQUBDQ0FBR0hHSUtSwtXS09PT09TU1NTU1NTU1NTU1NXV1dXV1dXV1dXVysrKysrKysrKysrKy8vLy8vLy8vLy8vMzMzMzMzNzc3Nzc3Nzc3MzMzMy8vLy8vLy8vLy8vLzMzMy8vLy8vLy8vLy8vLzMzMzc3Nzc3Oz8/P0NDQ0NHR0tLS0tLS09PT09PT09PT09PS09PT09TU1NTU1NTU09PT09PT09PT09PT09PT1NTU1NTU1NTT09PT09LS0tLS0tLT09PT09PU1NTU1dXV1dXV1dXV1dXV1dXV1dXV1NTU1NPT09PT09PT09PU1NPT09TU1NTU1NTU1NPT09PS0tLS0tPT09PU1NTU1NTU09PT09PS0tLS0tLR0dHSzIxyZ2BcTVllUktHSz87Mzc4Ozg5Pj05PDpBOjs9Nzs8PDo6Nzg6Oz0/Oz88PTw/Pj9BPUFBPkNDREJAQT46Oz9DREFDRERCQklHSEhJTr7V0tPT09TU1NTU1NTU1NTU1NXV1dXV1dXV1dXV1crKy8vKysrKysrKy8vLy8vLy8vLy8vLy8zMzMzMzM3Nzc3Nzc3NzMzMzMzMy8vLy8vMzMzMzMzMzMzLy8zMzMzMzMvLzMzMzc3Nzc3Ozs/P0NDQ0NDR0dLS0tLS09PT09PT09PU09PT09PT09TU1NXV1dTU1NTT09PU1NPT09PT09PT1NTU1NTU1NTU1NPT09PS0tLS0tLS0tPT09PT1NTV1dXV1dXV1dXV1dXV1tbV1dXV1dTU1NTT09PT09PT09PU1NTU09TU1NTU1NTU1NTT09PT0tLS0tLT09PU1NTU1NTU1NTU09PT09PT0tLS0tHR0s+Sd2hfXk9XZ01LRks9ODc2NTk5OTw+OT88Qzk7PDc5PD07OTc5Ojw9QDs+PT47PD48PT5BQD5EQ0NDP0E9Ojs+QkNFQ0NEQT9FSEpJSky61dPT09TU1NTU1NTU1NTV1dXV1dXV1dXV1dXV1dXLy8vLy8vLy8rKysvLy8vLy8vLy8zLy8vMzMzMzMzNzc3Nzc3Nzc3MzMzMzMzMzMzMzMzMzMzMzczMzMzMzMzMzMzMzMzMzc3Nzc3Ozs/Pz9DQ0NDQ0dHS0tPT09PT09PT09TU1NTT1NTU1NTU1NTV1dXU1NTU1NPU1NTU09PT09TU1NTU1dTU1NTV1dTU09PT09LS0tLS0tLS09PT09TU1dXV1dbW1dXV1dXV1tbW1tXV1dXV1NTU1NTT09PT09PT1NTU1NTU1NTU1NTU1NTU09PT09LS0tLT09PU1NTU1dXV1dTU1NTT09PT09PT0tLS0dHRmn5nYWJOVWpKSElLPzw6OTM3Njc2PTw+Oj06Ojo4ODo7Ozg4Ojs7PD46PT09Ojw/PD0/QkA/Q0RDRD5APT08QENEQ0JEQkQ+REhJSUtMttfT09TU1NTU1NXV1dXV1dXV1dXV1dXV1dXV1dXVy8vLy8vLy8vLy8vLy8vLy8vLy8zMzMzMzMzMzMzNzc3Nzc3Nzc3Nzc3MzMzMzMzMzMzMzMzNzc3NzczMzMzMzMzMzMzMzc3Nzc3Ozs7Pz8/Q0NDQ0NHS0tLT09PT09PT1NTU1NTU1NTU1NTU1NTV1dXV1NTU1NPT1NTU1NTU1NTU1NTU1dXV1NXV1dXV1NTU09PT09PS0tLT09PT09PU1NXV1dbW1tXV1dbW1tbW1tbW1dXV1dXU1NTU1NTU1NTU1NTU1NTU1NTU1NXU1NTU1NTT09PT09PT09PU1NTU1dXV1dXV1dTU1NTU09PT09PS0tLR0p+DaV9kU1hsSEhIS0A9Nzg0NzY6Oj87RDw8Ojw8OTg6OTo6Ojs8Ojo7OT48Pjk9QDs/QUFCP0JCQUM9Pz8+PEBCRUNDQkBBO0ZJR01MSbLY09TU1NTU1NXV1dXV1dXV1dXW1tbW1tbV1dXW1svLy8vLy8vLy8vLy8vLy8vLy8vMzMzMzMzMzM3Nzc3Nzc3Nzc3Ozc3NzczMzMzMzMzMzc3Nzc3Nzc3Nzc3Nzc3Nzc3Mzc3Nzs7Ozs7Pz8/P0NDQ0NHS0tLS09PT09PT09TU1NTU1NTU1NTU1NTV1NXV1dTU1NTU1NTU1NTU1NTV1NTU1dXV1dXV1dXV1dTU1NTU1NPT09PT09PT09PU1NXV1dbW1tbW1tbW1tbW1tbW1tbV1dXV1dTU1NTU1NTU1NTU1NTV1NTU1NXV1dXU1NTU1NTT09PT09PT1NTU1dXV1dXV1dXU1NTU1NTT09PT09LS0tSjiGxfZlJWakdIR0lBPTM2Njo7PDhDPEJBPjxBPDg5Ojw6Ojw8PDk8PTo7PD09PD89QD9AQT9AQUBCPD4+PzxCQ0NDRkBBQT1ISklOTUeu2NPU1NTV1dXV1dXV1dXV1dbW1tbW1tbW1tbW1tbLy8vLy8vLy8vLy8vLy8vLy8vMzMzNzc3Nzc3Nzc3Nzc3Nzc3Nzs7Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Ozs3Nzc3Nzc3Nzc3Nzs7Ozs7Oz8/P0NDQ0NHR0dLS0tPT09PT09TU1NTU1NTU1NTU1NTU1NTV1dXV1dTU1NTU1NTU1NTU1dXV1dXV1dXV1dXV1dXU1NTU1NTT09PT09PT1NTU1NTV1dbW1tbW1tbW1tbW1tbX19bW1tXV1dXV1dXV1dXV1dTU1NTU1dXV1dXV1dXU1NTU1NTU09PT09PT1NTU1NXV1dXV1dXV1dXV1NTU1NPT09PT0tLWroprY2VSWGhMSkdJQjg0OTQ6Ozo5QDk+Q0U/PDs5OTk9Oj07PDw6PTw7OTw9Ozs/PUA9PT5AQD9CQT5APD05QERDQkFBQj48SEpLTU5HqNnU1NXV1dXV1dXV1dXW1tbW1tbW1tbW1tbW1tbWy8vR09PT09PT09PT09PT087Ky8vLzMzMzMzMzMzMzM3Nzc3Nzc7Ozs3Nzc3Nzc/Pz8/Pz8/Pz8/Pz9DQ0dHR0dHR0dHR0dHS0tHV2djY2NnZ2dra2tvb29vZ2dnZ2dna2tra2tra2tjW19fX19fX19jX2NfX19rb2tra2tra2tvc29vb2dfX19fX19fX19fX19fW1NPT09PT09PT09PU1NbV1dXV1dXV1dXV1dXW1tbX1tbW1tbV1dXV1dXV1dXV1dTU1dXV1dXV1dXU1NTU1NTU1NTU09PU1NTU1NXV1dXW1dXV1dXV1dTU1NTT09PT09PS1bqKa2hoUlhlSUlMTkA5OTo0O0A8Nz05QUM+QD89ODo6Ozk9Oz4/Ojs8PDo7PDo7Pj1APT8/P0FAQUE/QTw8Oz5BRENBREA9PElJSk1NRqPa09TV1dXV1dXV1dXW1tbW1tbW1tbW1tbW1tbW1svMg21wcHBwcHBwcHBwcGqn493d3t7e3t7e3t7e3t3S0NDQ0NDQ0NDQ0NDQ0ci5ubm5ubm5ubm5ubq6t6WkpKSkpKSkpKSkpKSnhmBjY2NjY2NjY2NkZGRlhIuKioqKioqKioqKioemuri4uLi4uLi4uLi4ubSNi4uLi4uLi4uLioqKiJ+7ubm5ubm5uLi4uLi3vdPT09PT09PS0tLS09PT2+Lh4uLi4uLi4uLj4+Pi2NfX1tbW1tbW1tbV1dXV1dXV1dXV1dbW1dXV1dXV1dTU1NTU1NTU1NTV1dXV1dXW1dXV1dXV1dXV1NTU1NTT09PT09XDkXJsaU5TYkxMVk08Ojo3Nz5DPzg+Oj8/QTw/QDc7Ojs7PTs+Pjo7PD48Oz07PT8+QDw/Pz1AQEBBPj88PjxAQUVCQkZAQD9HSEpLUEae2tXV1dXV1dXW1tbW1tbW1tbW1tbW19fX19fX19fLzU4mKysrKysrKysrKysiivTr6+rq6urq6urq6uvp1dLS0tLS0tLS0tLS0tTEqaqqqqqqqqqqqqqqq6aGhIWFhYWFhYWFhYWFik4MEhISEhISEhISEhIRE0pUU1NTU1NTU1NTU1NPg6ejo6Ojo6Ojo6Ojo6ScWFJTU1NTU1NTU1NTU093qKSko6Ojo6Ojo6OjoqvT0tLT09PT0tLS0tLS0t/r6uvr6+vr6+vr6+vr6dnX19fX1tbW1tbW1tbW1dXV1dXV1dbW1tbV1dXV1dXV1dXV1dTU1NTV1dXV1dXW1tXV1dXV1dXV1dXU1NTU1NTU1NPUy5h3bGlKTl9NUlVNPjw8Nzs/Qz42Ojc+Pzs9QkA5PDk9Ozw6PD07PTs9Ozs9PD0+PT07QT08QUBBQT08Pzw7QEJDQURFPUFAQ0ZLS09GmNzV1dXV1dbW1tbW1tbW1tbW1tfX19fX19fX19fXy81SLDExMTExMTExMTExJ43z6enp6enp6enq6unq6dXS0tLS0tLS0tLS0tLUxaqrq6urq6urq6urq6yoiIeHh4eHh4eHh4eHh41SEhgYGBgYGBgYGBgYFxpOWVdXV1dXV1dXV1dXU4WopKSkpKSkpKSkpKSmnlxWV1dXV1dXV1dXV1dTeqmlpaWkpKSkpKSkpKOs0tLS0tLS0tLS0tLS0tHf6urq6urq6urq6urq6unZ19jX19fX19fX1tbW1tbW1tbW1tbW1tbW1tbV1dXV1dXV1dXV1dXV1dXV1dXW1tbW1tXV1dXV1dXV1dXU1NTU1NTU1NGcenFpSlRdT1JVTkQ+Pzs/QEA4Ojs4PDw8Oz46Ojs4Ozk5Ozw7Ojw5Ozs8Ozo9PT0+PUE/Pj8/Pj08PT88PEFBQ0FERTw+QEVGSktNRpPc1dXV1tbW1tbW1tbW1tbW1tfX19fX19fX19fX18zOXDk9PT09PT09PT09PTWT8Ofn5+fn5+fn5+fn5+bV0dLS0tLS0tLS0tLS08Wtrq6urq6urq6urq6vq46NjY2NjY2NjY2NjY2SXSInJycnJycoKCgoKCcpWmNiYWJhYmJiYmJiYl6MrKmpqampqampqampqqJmYWJiYmJiYmJiYmJiXoKtqampqampqampqamosNLS0tLS0tLS0tLS0tLR3+np6enp6enp6enp6enn2djY2NjY19fX19fX19fX19fX19bW1tfX19fW1tbW1tbV1dXV1dXV1dXV1dXV1tbW1tbW1tbW1tbV1dXV1dXU1NTU1NTWo3txZElbYE5OVU9AQT89REI+Oz06OTo6PTw7PDs6OTg5OTs8Ozw8Ojo7PDo7QD08PTxAQTxBQTs7PEA/PD1CP0RDQ0U8PkJERkpMTEWN3NXV1tbW1tbW1tbW1tbX19fX19fX19fY2NjY2NjMzcTCw8PDw8PDw8PDw8PCydDPz8/Pz8/Pz9DQ0NDQz87Ozs7Ozs7Ozs7Ozs7NzMzMzMzMzMzMzMzMzMvJycrKysrKysrKysrKysfCw8PExMTExcXFxsbGxsvMy8zLzMzNzMzMzMzLz9HR0tLS0tLS0tLS0tLRzczMzMzMzMzMzMvLy8vN0tLS0tLS0tLS0tLS0tLU09TW1tbW1tbW1tbW1dfY2NnZ2dnZ2dnZ2dnZ2djY2NjY2NjY2NjY2NfX19fX19fX1tfX19fX19bW1tbW1tbW1tXV1dXV1dXV1dbV1dbW1tbW1tbW1tXV1dXV1dTU1NTU169/cF5GXmJQUVdOR0ZDQ0lBPz07PDo8N0BBPD04Ojs4OTg7Pzs8PDs7PDw8PD87PD46Pj44PkI8Pj1BPjw+QkBERUNAPD5APkNJSUtEh9zV1tbW1tbW1tbW1tbX19fX19fX19jY2NjY2NjYzc3P0NDPz8/Pz8/P0NTQ0M7MzczP09LSzs3P0s7Ozs7Ozs7O0tPPz8/T08/P0NPSz8/Pz8/Pz8/Pz8/Pz8/P0NDQ0NDR0dHR0dHS09PU1NTU1dXV1tbW1tfW1tbX1tfX19fX19fX19bW1tbW1tbW1tbW1tbW1tfX19fX19fX1tbW1tbW1dbW1tbW1tbW1tbW19fW1tbW1tbX19fX19fX19fX19jY2NjY2NjY2NnZ2dnZ2dnZ2djY2NjY2NjY2NjY2NjX19fX19jY19fX1tbW1tbW1tbW1tbW1tbW1dbW1dbW1tbW1tbW1tbW1tXV1dXV1NTV1di4gm9WSl9jUlFaS0hBQTxCPT07Oj4+PD4/PT0/ODk6OTk3OD48PD47Ozw7PDs/PT0+OTs7OT0+P0A+QD07OkI/QkNCPz0+QD5CRUdKQoDc1tbW1tbW1tbW19fX19fX19fX2NjY2NjY2NjY2M7Ozs7Ozs7Nzc3Nzsqfys3Nzc3QuYOEi8fTwJrLz87Ozs7O0qucz9DQoZbL08eSq9HOzs7Ozs7Ozs7Ozs7Oz8/Pz8/P0NDQ0NDQ0NDR0dHR0tLT09PU1NTU1NTV1dXV1dXV1dXV1dXV1dXV1dXW1tbV1dXV1dbW1tbV1dXV1dXV1NTU1NXV1dXV1dXV1dXW1tbW1tbW1tbX19fX19fX19fY2NjY2NjY2NjY2NnZ2dnZ2dnZ2dnZ2dnY2NjY2NjY2NjY2NjY2NjY2NfX19fX1tbW1tbW1tbW1tbW1tXV1tbW1tbW1tbW1tbW1tbW1dXV1dXV1dXYwIBuVU9gY1dZW0xMQ0A9PTw9Ojw9Qj5CQkA8Ojg5ODo6Ojc7Pz4/PDw7PDo5Pzw8PTg5PD9BPj09PUFAPTtBQkBCQz47QD9BQUlHSkF629bW1tbW1tbX19fX19fX19jY2NjY2NnZ2djY2dnOzs7Ozs7Ozs7OzdKpj63Rzs7Ozpu3tqSiwJOerNPOzs7O0racpaPWp6Crn8+ZrJqy0s7Ozs7Ozs7Ozs7Pz8/Pz8/Pz9DQ0NHR0dHR0dHS0tLT09TU1NTU1dXV1dXV1dXV1dXV1dXV1dXV1dXW1tbW1tXV1dbW1tbW1tXV1dXV1dXU1dXV1dXV1dXW1tbW1tbW1tbW1tfX19fX19jX19fY2NjY2NjY2djY2dnZ2dnZ2dnZ2dnZ2dnZ2djY2NjY2NjY2dnY2NjZ2NjY19fX19fX19bW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tXV1dXV1dXV18h/b1pTYWVeXVxPSkQ9QD8+PDc6Pjk/RD5AOTg3ODk7Ozw4OT89PTw9PD47OkE7OTs5OzxDQDw7PT5AQT49QkQ/QkM9PT8+Pz5ISUg/ddrW1tbX19fX19fX19fX2NjY2NjZ2dnZ2dnZ2dnZzs7Ozs7Ozs7Ozs/Inrym0tDQzsqgl36Cw6abr6fUz8/Pz86dnJGeuZ6WkKG0lYadnM3Pzs7Ozs7Ozs7Oz8/Pz8/Pz8/Q0NDR0dHR0dLS0tPT09TU1dXV1dXV1dXV1dXV1dbV1dXV1dXV1tbW1tbW1tbV1dXV1dXW1tbV1dXV1dXV1dXV1dXW1tbW1tbW1tbW1tbW1tfX19fX19jY2NjY2NjY2NjY2NjZ2dnZ2dna2dnZ2dnZ2dnZ2dnZ2djY2NjY2NnZ2dnZ2dnY2NjY2NfX19fX19fX19bW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1dbV1dXV1dfNiHNdWGloXl9gT0lGOkFAPj48PDk2P0I/Qjo2NDg6Ozo8Ojk+PD49PTs/PTxBPjw8Ojw8PTw6PEA9QEI+PkFCPUNDPT0+Oz9BRUtIQHDZ1tbX19fX19fX19fY2NjY2NjZ2dnZ2dnZ2dnZ2c/Pz8/Pz87Ozs7SrKWnqdXAvNLHnY+ey9PJipmq1M/Pz9G/mKCbtZefoKiZtb/Jl5nF0M/Pz8/Pz8/Pz8/Pz8/Pz8/Q0NDQ0dHS0tLS09PT1NTU1dXV1dXV1dbW1tbW1dbW1tbW1tbV1tbW1tbW1tbW1dXV1dXV1dXW1dXV1dXV1dXV1dXW1tbW1tbW1tfX19fX19fX19fX19jY2NjY2NjY2NjY2NnZ2dnZ2dnZ2tnZ2dnZ2dnZ2dnZ2dnZ2dnY2dnZ2dnZ2dnZ2dnY2NjY19fX19fX19fX19bW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbV1dXW0JB1W1tqaWFeXVNOSTxDQEE+QD46OEVAP0I6NzQ6Ojo5Ozs4Oz0/Pj49QT08P0A9Pjw8PDw8Oj1AQD8/PT5CQD9AQkA8QD0+QUVLRz9r19fX19fX19fX2NjY2NjY2NjZ2dnZ2dnZ2dnZ2tnPz8/Pz8/Pz8/QzJ2Nl6zQmpfKxZ6ynpbN1q2ZqtTPz8/TtJmWqrmcpqCLn8TTkZmhz9DQ0M/Pz8/Pz8/Pz8/Pz8/P0NDQ0dHS0tLT09PT1NTU1NXV1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbV1dXV1dXV1dXV1dXV1dXV1dXW1tbW1tbW19fX19fX19fX19fY19fY2NjY2NjY2NjY2NjZ2dnZ2dnZ2drZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2djY2NjY2NfX19fX19fW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1dXV1tKUcl5ea2tqZV1PTEc/RENDQDo9OzxCPD08OTY0Ojk4Ojo5Nzs/QDs8PUA8PEE+PD07PTw/PDo8Q0A+PTs9QD5CPkBBPkA9QD9GSUQ/ZtXX19fX19fY2NjY2NjY2NnZ2dna2tra2tra2traz8/Pz8/Pz8/P07GigJuvyqCjv8qcpYynrdiqmarUz8/P1KuafqOPpZvHyZTYraO/ntXR0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NHR0tLT09PT1NTU1NXV1dbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1dXV1dXV1dbW1tXW1tbW1tbV1tbW1tbX19fX19fX19fX19fX2NjY2NjY2NjY2NjY2NjY2dnZ2dnZ2dna2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2djZ2djY2NjY2NfX19fX19bW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbSk3BgXnBoZmVaUUhHQkVDQEA3Ojo8Pjk8OTc2NTk6Njo8Ozc8QEA8Ojo9Ojw/Pj08OUA8PDo6OT9APT08PUBBQz9APz5BOz9ARkpCP2LS2NfX2NjY2NjY2NjY2dnZ2dnZ2tra29vb29vb28/Pz8/Pz8/P0M6fkGyclteqo9PSrqa1mJ/Vqpmq1M/Q0NSsm6eLl5SflZWku82IlZ7I0tHR0NDQ0dHQ0NDQ0NDQ0NDQ0NHR0tLT09PT1NTU1dXV1dbW1tbX19bW1tbW1tbW1tbX1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tfW1tfX19jY2NfX19fX2NjY2NjY2NjY2NnZ2dnZ2dnZ2dnZ2dna2tnZ2dnZ2dnZ2dnZ2dnZ2dnZ2djY2dnZ2dnZ2dnZ2dnZ2NjY2NjY2NjX19fX1tbW1tbW1tbW1tbW1tbX19fX19fW1tbW1tbX0pNuYFxxZGdkWlVKQENHREFBODs/PD07PDw3NTU4OTY4Ozo5PDo+Pzw8PTk8Pz49Ojo+OTw6Ojg+Pzw9PTw+QEFDQT48PDpCRERKRkJd0NnX19jY2NjY2NjY2dnZ2dna2trb29vb29vb29vPz8/Pz8/Pz9G9n8O31pfA09HQ0srSzZeb1KqZq9XRz9DTtrKypZ2Gnq+znaXQ26OZtdXR0dHR0dHR0dHR0NDR0dHR0dHR0tLT09PU1NTV1dXV1tbW1tfX19fX19bW1tbW1tfX19fW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW19fX19fY2NjY2NjY2NjY2NjY2djZ2dnZ2dnZ2dnZ2dnZ2drZ2tnZ2dnZ2dnZ2dnZ2dnZ2djY2NjY2NjZ2dnZ2dnZ2dnZ2dnY2NjY2NjY2NfX19fX19fX19fW1tfX1tbX19fX19fX19fX19bW19GSbF1cb2doYl1PRj9ISEZFQDw8Pj48PT08NzU2Ojk2Ojs6Ojs4QD86PDw5PD49Ozs6Pzk/Ojs5PT49Pjw7PTxAQ0I/Pz47Q0ZGR0hEWc3a2NjY2NjZ2dnZ2dnZ2dna2trb29vb29vb29vb0NDQz8/Pz8/Pz5V+e6WS1KKa08ySl6ObodirmavV0pem1cSimZagj6ObopyckaeYnrvV0dHR0dHR0dHR0dHR0dHR0tLS0tLS09PU1NTV1dXV1tbW19fX19fX19fX19fX19fX19fX1tbW1tbW1tbW1tbX19bW1tbW1tbW1tbW1tbW1tbW1tbW1tfX19fY2NjY2NjY2NjY2NjY2dnZ2dnZ2dnZ2dnZ2dnZ2tra2tra2tnZ2dnZ2dnZ2dnZ2djY2NjY2NjZ2dnZ2tnZ2dnZ2dnZ2djY2NjY2NjY2NjX19fX19fX19fX19fX19fX19fX19fX19fX1tfPjGRWXnBrXGBgTkVITUlJT0M+OkI9PUBCOzU1Nzw6Nzo7Ojo7OT09Ojo6OT0+Pz07OT47PDo8Ozk+PD47PD0+QENCPz5BPEFDR0ZGRVXJ29jY2NnZ2dnZ2dnZ2dra2tvb29vb29zc3Nzc3NDQ0NDQ0M/Pz9DR1aeZrcmjqL7KnbGdo7XZqZup2LiroMfVoquknL6eqKGjnqiiqZ3Q09LS0tLS0tLS0tLR0dHS0tLT0tPT09PU1NTV1dbW1tbX19fX19fX19fX19fX19fX19fX19bW1tbW1tfX19fX19fW1tbW1tbW1tbX19fW1tbW1tbW1tbX19fX2NjY2NjY2NnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dra2tra2tra2trZ2dnZ2dnZ2dnZ2djY2NjY2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnY2dnY2NjY2NjX19fX19fX19fX19fX19fY2NfX19fX19fYzYZdV2JvZE9dVEtIRlJRS0tAPj1EPD9DRj01NTc7OTY6Ozo7PTo7Pzo6OTg6PT0/Pjs/Oz49Ojs5Pjs9PD0+QURCQD8+PzxAQUVHRURSxdvY2dnZ2dnZ2dnZ2tra2tvb29vb3Nzc3Nzc3NzQ0NDQ0NDQ0NDQ0NO5gL3Tm5bP1LWLkZ/T1LyBu9TOlKDT08iRjbTZr42RpdSako6+1tLS0tLS0tLS0tLS0tLS0tLT09PT09PU1NXV1dbW1tfX19fX19fY2NjY19fX19fX19fX19fX19fW1tbX19fX19fW1tbW1tbW1tbW19fX1tbW1tbW1tbX19fX19jY2NjY2NnZ2dnZ2dnZ2dnZ2tnZ2tra2tra2tra29ra2tra2tnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2NjY2NjX19fX19fX19fY2NjY2NjY2NjY2NfX2ct+WlVpaltMX01KTEpUTEZCPDw/RkVHS0k9NjY3Ojk3OTo7Ojs9OT45ODo4Oz0+PkE+PTk8PDo9Pj47PTk5Oj9FQUA+PT8/QkBHRURFUMHc2dnZ2dnZ2dna2trb29vb29vb3Nzc3Nzc3dzc0NDQ0NDQ0NDQ0NDQ0cHR0crI0tDUxLjS0tHSwtLQ08fM0tHUyMHV0tXAvdbU07nI1dLS0tLS09PT09PT09LS0tPT09PU1NTU1NXV1dbW1tfX19fX19fX2NjY2NjX19fX2NfX19fX19fX19fX19fX19fX1tbW1tbW1tbW1tfX1tbW1tbW1tbW19fX19fY2NjY2NjY2dnZ2dnZ2dnZ2dra2tra2tra2tra29va2tra2tra2dnZ2dna2tnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dna2tnZ2dnZ2dnZ2djY2NjX19fX19fY2NjY2NjY2NjY2NjY19rHd1xSZ2laTlpOTFBRV0VKPz89P0FETExBPjc3NTo4ODg5OTo8Pjw+Nzo6OTs+P0A9Pj46NTo6Oz0/Ojs5Ojw+QkJAPz8/P0FCR0RDRE683dnZ2dnZ2dna2tvb29vb29vb3Nzc3Nzc3d3d3dDR0dDQ0NDQ0NDQ0NDS0NDR0dDQ0dPU0dHR0dPR0dHS0tHR0dPU0tLS1NXT09PW1NLS0tPT09PT09PT09PT09PT09PU1NTU1dXV1dbW1tfX19fX2NjY2NjY2NjY2NfX19jY19fX19fX19fX19fX19fX19fX1tbW1tbW1tbX19bW1tbW1tbW1tfX19fX2NjY2NjY2NnZ2dna2tra2tra2tra2tra2tra2tvb2tra2tra2trZ2tra2tra2tra2tra2tnZ2dnZ2dnZ2dnZ2trZ2tra29ra2trZ2dnZ2dnZ2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjbwXNYVWlrU0xSTlBSWVRGSTw+Qz9BQkVKPT03ODY5Nzc4OTk7Oz0/QDw8ODk7Ozs/Pjw8OTU6PT47OTk7PD8/P0JCQT1BPUBBQkZCQkJLtd7Z2dra2tra2tvb29vb29vc3Nzc3Nzd3d3d3d3R0dHR0dHR0dHR0dDQ0NDQ0NDQ0dHR0dHR0dHR0dHR0dHS0tLS0tLS0tPT09PT09PT09PT09PT09TU1NPT1NTU1NTU1NXV1dXV1dXW1tbX19fX2NjY2NjY2NjY2NjY19fY2NjX19fX19fX19fX19fX19fX19fX19fW1tbX19fX1tbW1tbW1tbX19fX19jY2NjY2NnZ2dna2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tnZ2dnZ2dnZ2NjY2NjY2NnZ2dnZ2dnZ2NjY2NjY3LxvVFRsbExLUkpUUlVLRkQ6PkdEREFERjw/ODk6OTU5OTo3PD07PkA9PTc5Ojs5Pjs5OTY2Oj1AQT47PDk6Pj9DQT4/Qj0+QkNFQkFCSrDe2dra2tvb29vb29vb29vc3Nzc3Nzd3d3d3d3d0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0tLS0tLS0tLS0tLS0tLS0tPT09PT09PT09PT09PT1NTU1NTU1NTU1NTU1dXV1dXV1tbW1tbW19fX19jY2NjY2NjY2NjY2NjY2NjY2NjY19fX19fX19fX19fX19fX19fX19fX19fX19fW1tbW1tfW19fX19jY2NjY2NjZ2dnZ2dra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2trZ2dnZ2dnZ2djZ2dnZ2dnZ2dnZ2dnZ2dnY2Ny2a1NbcGtLVVdSXFFXSEQ+PEJKRT1ISj89PDc4ODo1OTg5Njs+PD1APDw1OTk8Oj87OTk0ODw9PUFBPD47Ojw+QD89PkE9PUNGR0I/Qkmq39ra29vb29vb29vb3Nzc3Nzc3N3d3d3d3d3d3dHR0dHR0dHR0dHR0dHR0dHR0dHS0M/U0M7P0tLT0tLS0tLS0tLS0tPT09TU1NTU1NPU1NTU1NTU1NTU1NTU1NTV1dXV1dXV1dbW1tbW19fX19fY2NjY2NjY2NjY2NjY2NjY2NjY2NjX19fX19fX19jY2NfX19fX19fX19fX19fX19fX19fX19fX19jY2NjY2NjY2dnZ2dra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tvb29va2tra2tra2tra2tra2tra2tnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dndsGRTYXJfT1pUV19RUkdCPUVJS0FBTEQ/Pzs5ODg5Mzg2ODY5Pj0+Pz06Njo7Pjs9PTo5Njg6PTtAQDxAPz0/P0I+PD48PEJFSElCPkNJpODa29vb29vb3Nzc3Nzc3Nzc3N3d3d3d3d3d3t7S0tLS0tLS0tLS0dHR0dHR0dPT0bm7zLqbnLrQyNPT0tLS09PT09PT09PU1NTU1NTU1NTU1NTU1dXV1dXV1dXV1dXV1dbW1tbW1tbX19fX19fY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjX19fX19fX19fX19fX19fX19fX19jY2NjY2NjY2NjZ2dra2tra2tra2tra2tra2tra2tra2tra29va2tra29va2tvb2tra2tra2tra2tra2trb29vb29va2tra2tra2tra2tra2tra2tra2tnZ2dnZ2trZ2dnZ2dnZ2dnZ2dnZ3qpfVWBuW1VZUVpeT0xHQ0ZNSUZEREk7QUE7PDg4NjU4Njk4Nzw/QT89Ojc8Pz48Pz87OjY4OD09QEE9QD5BQD1AOjs6Pj1BRUdKQkBDR57h29vb29vc3Nzc3Nzc3Nzc3d3d3d3d3d7e3t7e0tLS0tLS0tLS0tLS0tLS0tO+wMqaoKKViJGeqpOpz9TT09PT09PT09PU1NTU1NTU1NTU1NTV1dXV1dXV1dXV1dXV1tbW1tbW1tbX19fX19fY2NjY2NnZ2dnZ2dnZ2dnZ2djY2djY2NjY2NjY2NjY2NjY2NjY2NjX19fX19fX19fX19fX19fX19fY2NjY2NjY2NjZ2dna2tra2tra2tra2tra2tra2tra29vb29vb29vb29vb29vb29vb29ra2tra2tra2tra2tvb29vb29va29vb29vb29va2tra2tra2tra2tra2tra2tnZ2dnZ2dnZ2dnZ2d6iXFVeblheXU5aUFROQ0NMSUlJRkpEPEFBPDs4NzY3OTc3OTk9P0E/PDo5QD88PkI/Ojg3NzY9P0BAPUBBPz88PTs7OD48P0VJSEE/Q0aX4dvb29zc3Nzc3Nzc3N3d3d3d3d3d3t7e3t7e3tPT09PS0tLS0tLS0tLS0tTIlZyum5m1iX2TjIKBhMTV09PT09PT09PU1NTU1dXV1dXV1dXV1dXV1dXV1dXV1tbW1tbW1tbW1tfX19fX19fX2NjY2NjY2dnZ2dnZ2dnZ2dnZ2dnZ2NjY2NjY2NjY2NjY2NjY2NjY2NfX19fX19fX19fX19fX19fX2NjY2NjY2NjY2dnZ2dnZ2dna2tra2tra2tra2tra29vb29vb29vb29vb29vb29vb29vb2tra2tra2tra2tvb29vb29vb2tvb29vb29vb2tra2tra2tra2tra2tra2tra2tra2tra2tnZ2dndmlpYYW5ZYVdPV01QRUJES0lNS0ZJRT5CRDg4ODY3OTc1Njk4PT1BPjo4OT4+PD9APzw1Njc2PD4/PjtAQEA/Pj4/Pjs/PkFCRkdCQENIkeLb29zc3Nzc3d3d3d3d3d3d3d7e3t7e3t7f39/U09PT09PT09PT09LS0tLTz6h+kayPko6MhoCIiYSQo8rU09PT09PU1NTU1dXV1dXV1dXV1dXV1dbW1tbW1tbW1tbW1tbW19fX19fX19fX2NjY2NjY2dnZ2dnZ2dnZ2dnZ2dnZ2dnY2NjY2NjY19jY2NjY2NjY2NjY2NjX19fX19fX19fX19fY2NjY2NjY2NjY2NnZ2dnZ2dna2tra2tra2tra2tra29vb29vb29vb29vb29vb29vb29vb29ra2tra2tra2tvb29vb29vb29vb29vb29vb29va2tra2tra2tra2tra29vb29ra2tra2tra2tna3JJaWWNuWlpSVV5QTDxAR05IUklIRT48SEY4OTc1Nzg3NTg5ODs+Pj07ODlBPj1AP0E+NzU5Njs+QUI/P0BAQUI/Pj8+QUBEQUZIQj9FSozi3Nzc3Nzc3d3d3d3d3d3e3t7e3t7f39/f39/f1NTU09PT09PT09PT09PWtaWaiIuQhYCFi4iBg4qLf4bC1tTU1NTU1NTV1dXV1dXV1dXV1dXW1tbW1tbW1tbX19fX19fX19fX2NjY2NjY2NjY2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2djY2NjY2NjY2NjY2NjY2NjY2NjY2NjX19fX19fX19fY2NjY2NjY2NjY2dnZ2dna2dra2tra2tra2tra2tra2tvb29vb29vb29vb29vb29vb29vb29vb29ra2tra2trb29vb29vb29vb29vb29vb29vb29vb2tra2tra2tra29vb29vb29vb29vb2tra29uIWltnalxYTFpfVkg6TEhMSkpDREVDQUxINzo3Njc4ODU4Nzg5PDw7Ozk4QD89Pj8/PDY3PDQ3P0JCQUBAPz8/QT09P0A+QEBGRT09REuI4tzc3Nzd3d3d3d7e3t7e3t7e3t/f39/f39/f39TU1NTU1NPT09PT09PUxZKCg4WGfYGCfXx5foGCg36k29bU1NTU1NTV1dXV1dXV1tbV1tbW1tbW1tfX19fX19fX19fX19fX19jY2NjY2NjZ2dnZ2dnZ2dna2tnZ2dnZ2dnZ2dnY2NnY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjX19fX19fY2NjY2NjY2NjY2dnZ2dna2tra2tra2tra2tra29vb29vb29vb29vc3Nzc3Nvb29vb29vb29vb29vb2tra2tra29vb29zb29zb29vb29vb29vb29vb29vb29va2tvb29vb29vb29vb29vb29vb2tvZgFpebWhaU0ldW1hKRE1ISlNMR0ZBQD9KQjg7NjY5OTc1ODY4Ozo7Ojw5OD09O0A9Ozo2NTw3Oz1CQEFBPD49QEE9PEA/Pz5CREU+PERLg+Lc3d3d3d3d3t7e3t7e3t7f39/f39/f39/f39/V1dTU1NTU1NPT09PT2LKEkKh9g3l2hIh/e3d5gn5+i67A1dTU1NXV1dXV1tbW1tbW1tbW1tbW1tfX19fX19fY2NjY2NjY2NjY2NjY2NjZ2dnZ2dnZ2dna2trZ2dnZ2dnZ2dnY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2dnZ2dna2tra2tra2trb2tra2tvb29vb29vb29vc3Nzc3Nzc29vb29vb29vb29vb29va2trb29vb29zc3Nzc3Nvb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vc1nlcWmxmWFJPYFFSQUhHSkZYTEZAQENDSz87Ozc4ODc2NTc2ODo5PDw6PTs/PTs9Pjw7ODg8OT0/QkFCQzw8P0FCPj1BQkNCREVDQDtDTH3h3d3d3d3e3t7e3t7e39/f39/f39/f39/g4ODg1dXV1NTU1NTU1NPU0ruen3WKeXuIgICChYGDcnOAhYOMrNfV1NXV1dXW1tbW1tbW1tbW1tbW19fX19fX2NjY2NjY2NjY2NjZ2dnZ2dnZ2dnY2NnZ2dna2tra2trZ2dnZ2dnZ2djY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2dnZ2dna2tra2tra29vb29ra2trb3Nzc3Nzc29zc3Nzc3Nzc3Nzb29vb29vb29vb29rb29vb29vb29zc3Nzc3Nzc3Nvb29zc3Nzc3Nvb29vb29vb29vb29vc3Nzc3Nzc3Nvb29vb3dByXV9wZVdLUGNPS0JHQ0pIS0ZBPEE9SFFBOjo3Nzg3Njc4Nzw6OD09PD47QD88Pz07Ojs5Ojk8QEJAQkNAPUFAPz1AQkNDQUBAP0A7RU144N3d3d7e3t/f39/f39/f39/f3+Dg4ODg4ODg4NXV1dXV1dXV1NXU18h4i4V8goh6g4SBfoKCc2l0hYuGkJ3U1tXU1dbW1tbW1tbW1tbW19fX19fX19jY2NjY2NjY2NnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dra2tra2tra2dnZ2dnZ2dnY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2dnZ2dna2tra2tra2tra2tvb2tvb3Nzc3Nzc3Nvc3Nzc3Nzc3Nzc29zb29vb29vb29vb29vb29vb29vc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc29vb297KalxjcWVST1heSz9HTElPS0VAPkFCP0lPPjk6NzY7NzY6Ozc7Ojg6PDw+Oz09Oz48Ojs4OTo4OUFCQkFAQDtAQj06PkFCQz8+PT4/PUZOdN/e3t7e3t7f39/f39/f4ODg4ODg4ODg4ODg4OHV1dXV1dXV1dXV1s6dhpl+f5OTin+CgXx9gnNxm4mAgoOJwNnat7TQ19bW1tbX19fX19fX19fX2NjY2NjY2NjY2NjZ2dnZ2dnZ2dnZ2tnZ2dnZ2dra2tra2tra2trZ2dnZ2dnZ2dnZ2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NnZ2dna2tra2tra2tra2tra29vb3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nvb29vb29vb29vb29vb29vc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3NvfwGNaW21gVlBTU0pETEhNSEk8PkFEQ0ZORDw8OTc5OjY4Ozk3PDk4OTw9OzlAPjpBPzw3NTc7ODpAQUVBPz45PUI/Oz1CQkI6Pj07PT5GTnHe3t7e3t/f39/f39/g4ODg4ODg4ODg4OHh4eHh1tbW1tbW1tbV1tjLioCHhYOXjHh7e3lvfYF1a3ebdHZ7eInHxpiMrdjZ19fX19fX19fY2NjY2NjY2NjY2NjY2NjY2dnZ2drZ2dna2tra2tra2tra2tra2tra2tra2dnZ2dnZ2dnZ2dnZ2dnZ2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NnZ2dnZ2dnZ2dna2tra2tra2tra2tra29vb3Nzc3dzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nvb29vb29zb29vb3Nzc3Nzc3Nzd3dzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3d3d3d3d3Nzc3Nzc4LdjV1lrYlJNVVFMSktGS0ZDQD5CQT9FTT4+PTg5OTo3OTo3NT03Nzo+PDs7Qjw5Pz05NjY4PTk6QEJGQD49PEBCREA9QD9DO0A9PD4/Rk9t3N/e3t/f3+Dg4ODg4ODg4ODg4OHh4eHh4eHh4dbW1tbW1tbW1tfVrYZ6d32rn3l4entzdH+Dfm9xe3l6c3t2k4qFgImkzdnY19fX2NjY2NjY2NjY2NjY2NjY2NjY2NnZ2dna2tna2tra2tra2tra2tra2tra2tra2tnZ2dnZ2dnZ2dnZ2dnZ2dnZ2djY2NjY2NjY2NjY2NjY2NjY2NjY2dnZ2dnZ2dnZ2dra2tra2tra2tra29vb29vc3Nzc3N3d3d3c3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc29vb29vc3Nzb3Nzc3Nzc3N3d3d3d3d3d3dzc3Nzc3Nzd3d3c3Nzc3Nzc3N3d3d3d3d3d3d3d3dzc3OGtYVtebGJSTVZMTUdLS0RGQkI7QT08RUxCQT44Ojk6Nzc5NjY6NTs+QDs9Oz89PD89Ojk5Ojw5PEVDRkA/PkBDQkQ9OT0/QT1CPz1APkdPadvf3t/f3+Dg4ODg4ODh4eHh4eHh4eHh4eHi4uLW1tbW1tbW1tfQmH+Qh4N9eoN2e3Vzenl6kKqmd3JyfoeHh4CAfoKEhJHJzNnX19jY2NjY2NjY2NjY2NjY2NjY2NnZ2dnZ2tra2tra2tra2tra29va2tra2tra2tra2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2djZ2dnZ2dnZ2djY2NnZ2dnZ2dnZ2dnZ2tra2tra2tra2tra29vb29vb3Nzc3N3d3d3d3d3d3d3d3d3d3d3c3Nzc3Nzc3Nzb29vb3Nzc3Nzc3Nzc3Nzd3d3d3d3d3d3d3dzc3N3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3NzhpV9UYm1iUE9TSUhHRkpJSUJBPkJCPEVFREA+ODo4Ozc3Ojc4ODY+Pz07PDk9PDo+PTs6Njc7NjpEQUY+Pz8/PkNBPzs9PT47REM/PjxIT2fZ4N/f3+Dg4ODg4eHh4eHh4eHh4eLi4uLi4uLi1tbW1tbW19jYyH52doN+fnR2eIaCenl1d5yhu6GEgoCAfoeKinx/gYaMnKjO2NjY2NjY2NjY2djY2NjZ2djY2NjY2dnZ2dra2tra2trb29rb29rb2tra2tra2tra2tnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dna2tra2tra2tra2tra2trb29vb29zc3Nzc3N3d3d3d3d3d3d3d3d3d3d3d3dzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3e3t7e3t7e3d3d3d3c35pbT2drXFBRUElDT0pLR0xHSkJAP0FHREBBPDg8ODg1ODk3Njc3QEA/Ozw5Pj04PTw8Ojc4PTk/RENGPkE/QkBDPzw6Pj0/PkVEPz07S1Fj1+Hf4ODg4ODh4eHh4eHh4uLi4uLi4uLi4uLj49bW1tbW19XB3LRueHJze3B6eXaFiIR7eH2AgZiljH98fnuRhZaLhoGDgY6Rvd3Z2NjY2NjZ2dnZ2dnZ2dnZ2dnY2dnZ2dna2tra2trb29va2tva2tra2trb29ra2tra2tnZ2dnZ2dnZ2dnZ2dna2trZ2dnZ2dra2tra2tnZ2dnZ2dna2tra2tra2tra2tra2tra2trb29vc3Nzc3Nzc3N3d3d3d3d3d3d3d3d3d3d3d3d3d3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3e3t7e3t7e3t7e3t7e3t7e3t3d3d6NWFdobllQUUtISlNJTUhNSUtBQz9DRkJBRDs6PDg2NDg4NzY2Nj8+Pjo8OTw7Oj09PDw4Ozw8RERERT4/PkI+Qj84PT8/Q0NCQEE+O0xUY9Xh3+Dg4OHh4eHh4eLi4uLi4uLi4uLi4uPj4+PW1tbW1teslLZ6eHJvd5V7dHuLgHh1bn6Fg3t/hYhyfH2bnI6JioJ+g32Hk5rH1NjY2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dna2tra2trb29vb29vb29vb2tra2tra2tra2tra2tnZ2dnZ2dnZ2dna2tra2tra2tra2tra2tra2tra2tra2tra2trb2tra2tra2tra2trb29vc3Nzc3Nzc3Nzd3d3d3d3d3d3d3d3d3d3d3d3d3d3c3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3N3d3d3d3d3d3d3d3d3d3d3d3d3e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3d7Zf1lgaGxcUUtHR09LTk5PTURGQkg/Q0hERUA6Ozs4NzU3Nzc4NThAPkA7PDk8Ozw+Ojk7OTk7OUZERUI8QD4/PEBDOz5AP0A/Qj8+OjtKVWPV4eDg4eHh4eHi4uLi4uLi4uLi4uPj4+Pj4+Pj1tbX19vKhYR3cXJubniVhHt4hH95dnB4c3eLkY6CdnN9ioaId3d1d4ODfIiIk8Pb2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dra2trb2tvb29vb29vb29vb29rb2tra2tra2tra2tra2tnZ2dnZ2dna2tra2tra2tra2trb2tra2tra2tra2tra2trb29vb2tra2trb29vb29vb3Nzc3Nzc3Nzd3d3d3d3d3d3d3d3d3d3d3d7e3d3d3d3c3Nzc3Nzc3Nzc3Nzc3Nzc3d3d3d3d3d3d3d3d3d3d3d3d3d7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7f0nVZaGlqVk5KSE1OR01EUElGSD9FPUZMREM+Ozs8ODc3OTY2OTU4Pj4/PTs8QDs9PDo3Ozc5OThHREVCPUE9Qj8+QDw/QUE/QEJAPjs8S1Ri1OLg4eHh4eLi4uLi4uLi4+Pj4+Pj4+Pj4+Pj49fX19fEknuJf29sbnV2foSBg4qGfnVybWVtiIaKjoR7c4OHint4e4OPj4GEioqxztrZ2dnZ2dnZ2dna2tra2tra2tra2trb29vb29zc3Nzb29vb29vb29va2tra2tra2tra2tra2tra2tra2tra2tra2tra2tvb29va2tra2tra2tvb2tvb29vb29vb29vb29vb29vb29zc3Nzc3Nzc3d3d3d3d3d3d3d3d3d3d3t7e3t3d3d3d3d3d3d3d3dzc3Nzc3Nzc3d3d3d3d3d3e3t7e3t7e3t7e3t7e3t7e3t7e3t7f39/f39/f39/f39/f3t7e4clsW2pqalNOR0hOT0VIRk1JSUA7RD5ISUA9PDo6Ozg2ODo3Nzk0OD08PT07ODw8PDw4Njc4OTo6RUJFQT9APEI/Q0M+PkNEQUBAP0A8PUtRYdPj4OHh4uLi4uLi4uPj4+Pj4+Pj4+Pj4+Pj5OTX19fZqXaFfnx3bHB3eXh8jH2KhYB3anN0d3p9bot7fnl6foR/gIGDfnh8foeGlrbT2tnZ2dra2tra2tra2tra2tra2tvb29vb3Nzc3Nzc3Nvb29vb29vb29ra2tra2tra2tra2tra2tra2tra2tra29ra29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb3Nzc3Nzc3Nzc3d3d3d3d3d3d3d3d3d3d3d7e3t7d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3t7e3t7e3t7e3t7e3t7e3t7e3t7e39/f39/f39/f39/f39/f39/e3uO9amFpa2lRTkZNTEtKWE1OR0FAQE9BRD9AOzw4OTk5Njg2NjY4NDs+PD07OTY6Ojk6OTU4OTg5OkJERj8+Pj5AQEBCPzxBQD88Pj9BOT5KT17S4+Hh4eLi4uLi4+Pj4+Pj4+Pj4+Pj4+Tk5OTk19fX2sqKhIB5c29tcXN1d4CUeHaAfHWHhXd1cnWgmXp7d3Z5doR0bWxue3iAmouTu9za2tra2tra2trb29vb29vb29vb29zc3Nzc3Nzc3Nzc3Nzc29vb29vb2tra2tra2tra2tra2tra2tra2tra29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vc3Nzc3Nzc3Nzc3d3d3d3d3d3d3d3d3d3d3d3e3t7e3t3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3t7e3t7e3t7e3t7e3t7e3t7e3t/f39/f39/f39/f39/f39/f39/f397js2lpbmloUFBPTExPUk9LU0Y/RURERD48PDg6ODc5OTU2ODY2NzM6Pjs+PTc6Pjk5OTk2Ojo4NzxDRUc/Pzs/PkA9PkE9Oz0+OUFAQDhBTlFc0OTh4eLi4uLj4+Pj4+Pj4+Pj4+Pk5OTk5OTk5NjY2NjauY6AenZ1bmpveHCBfWt0cnZ3hIV5h4d5lY55eXp1d3pza298gHx2fYh8gLLe2tra2tvb29vb29vb29vc3Nzc3Nzc3Nzc3dzc3Nzc3Nzc3Nzb29vb29rb29vb29ra2tra2tra2tra29va29vb29vb29vb29zc3Nzb29vb29vb29vb29vc3Nvb3Nzc3Nzc3Nzc3Nzc3Nzc3d3d3d3d3t7e3t7e3d7e3t3d3t7e3t7e3t7d3d3d3d3d3d3d3d3d3d3d3d3d3t7e3t7e3t7e3t7f39/f39/f39/f39/f39/f39/f4ODg4ODg4N/f39/f4qpqa2hrZFNQT0ZQVFJOSFJLPkREQ0I7Ozk5Ojg2ODg1NjY4ODg0Oz88Pzw5PDw3Ozo6Nzo6Nzo9Q0JDPUE+Pzw5PT5BQDs8PDtFQD47Q05TXNDk4eLi4uLj4+Pj4+Pj4+Pj5OTk5OTk5OTk5OTY2NjZ1p5vdntveHh2cG50d3BwdHBzb36Jc3qGhY2EenNtcoB6hn1vg5OBdnx9g4a13drb29vc29vc3Nzc3Nzc3Nzc3Nzc3Nzc3d3d3Nzc3Nzc3Nzc3Nzb29vb29vb29vb29ra2tra2tvb29vb29vb3Nzc3Nzc3Nzc3Nzc3Nzc3Nvb29vb29vc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzd3d3d3d3d3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3d3d3d3d3d7e3t7e3t7e3t7e3t7f39/f39/f39/f39/f39/f39/g4ODg4ODg4ODg4ODg4N/f3+GgbWhma2ZVVlJHUFFOS0xMRUJIRUc9OD08Ojo3Nzg2Nzc2NTY3NDg+PD09Ojg6OD46Ozc4Nzc6Oj5DRDtDQj49OD1AQUM/Pjw+RTw+PUJNUF/S4+Hi4uLj4+Pj4+Pj4+Pk5OTk5OTk5OTk5OTk2NjY3MB2doCCfnp4eHBsdXlya399bHNvdGdoaYB/aWl4c2d+iYl4cIKGe3d9foWKvN3b3Nzc3Nzc3Nzc3Nzc3Nzc3d3c3Nzc3N3d3dzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nvb29vb29vb29vb3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzd3d3d3d3d3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7f39/f39/f39/f39/f39/f4ODg4ODg4ODg4ODg4ODg4ODg4ODflGttZm5mU1NJUFlUTEhGTkZGRUJGPTs+PDs5NzY4NTc5NjQ1NzU4PDs9Pjo6OztAOTs7ODc6OTlAQkE8QUE/Pzk/QEJFQ0FAQEM7Oz1ES01g1uTi4uLi4+Pj4+Pj4+Pk5OTk5OTk5OTk5OTk5NnZ2tmYc3uqhJaCcnR1dn14aGx8d2h4d25rcHR5gIJ3dHyBhIJ9c3CAin94gn95g8je29zc3Nzc3Nzc3Nzd3d3d3d3d3d3d3d3d3N3d3dzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nvb29zc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3N3d3d3d3d3d3d3d3d3d3d3d3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e39/f39/f39/f4N/f39/f3+Dg4ODg4ODg4ODg4ODg4ODg4ODg4ODh24tubWdzY1lRTVVbV0hDSUZOS0dCRD8/Qjo7OjY2NzU2NzY0ODc2Ozw7Pj86PDk8Qjg3OTo6Ojk6QUFCQUJDQEE+PT9CQ0NEQUJGOTg9REpOYtjk4uLi4+Pj4+Pj5OTk5OTk5OTk5OTk5OTk5OXZ2drcqHGCtXiRfnNsem6EgXaCfWtoan+DeHZ8dX2FhXRmcHl9d316gIqFe318foC03tzc3Nzc3N3d3d3d3d3d3d3d3d3d3d3d3dzd3d3d3dzc3N3c3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzd3Nzd3d3d3d3d3Nzc3Nzc3Nzc3Nzc3N3d3d3d3d3d3d3d3d3d3d3d3d3d3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e397e3t7e39/f39/f39/f39/g4ODg4ODg4ODg4ODg4ODg4ODg4ODg4eDg4ODg4ODg4tiFb3FrdWFWT1VVXE9ETUY+SkdKRUQ8P0I6PDk4Njg0NTY3NDc2NDk7Ozw7OD47PEE4ODo9OD04Oj09QEBAP0FCP0A+QENCQ0FBRTc2O0RMTmPa5OLi4+Pj4+Pj5OTk5OTk5OTk5OTk5OTk5OXl29ra3Z5sbnNxhY1ybXBuf391hH5rcnZ2enN4gXhzbnVwbWt2fHmFiIB/f392coODsd/c3Nzc3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3Nzd3d3c3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3N3d3d3d3d3d3d3d3d3d3d3d3d3c3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e39/f39/f39/f39/f39/f39/f39/f39/f39/f4ODg4ODg4ODg4ODg4ODg4ODg4OHh4eDg4eHh4eHh4eHh4OLXhW1xb3ZeUldTWlpRSkhDQFFAQkQ8OT9BOjw5NzU3NDU2NjQ3NTY9PDo9PTk+OjxAODo6PDY7OTs+PUJCQjtBQkBDQEBEREM8PUA3OjxFS01l3OPi4uPj4+Pj5OTk5OTk5OTk5OTk5OXl5eXl5dPOxsB+cWxveHt2b3VuanNzbZKGeG50dG5vdIZ/b2twboJ0bXZyfY2DdnF/d3mKgabf3Nzc3d3d3d3d3d3e3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3dzc3d3d3dzc3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3t7e3t7e3t7e3t7e3t/f3t7e3t7f39/f39/f39/f39/f39/f39/f39/f39/f39/f4ODg4ODg4ODg4ODg4ODg4ODg4ODg4eHh4eHh4eHh4eHh4eHh4eHi1oZucG1xYFJZUFdfWUpMTElSP0Q9OTtCRjs6OTc0NTY1NzU0NjY2Pj07Pz45PTk7Pjg9Ozo0ODtAQENCQ0FCRkE/Q0BBQkREOz0+OTs8QkxNZODl4+Pk5OTj4+Tk5OTk5OTk5OTk5eXl5eXl5eW5t7Woc3JscHd6dHd4bXFydXd/hHRyc2xsa3F8bnBudGuBf3GAd32Eg355gHNygYqg2d3c3d3d3d3d3d7e3t3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3e3t7e3t7e3t7d3d3d3t7e3t7e3t7e3t7f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f4ODg4ODg4ODg4ODg4ODg4ODg4OHh4eHh4eHh4eHh4eHh4eHh4eHh49WHcWxqbF5YWlVXYFZWUE9QTD1BOjs8RkE4Ojg3MzY1Njk2NTg1Nz89Oz8+OT04Ozw5PTs7NTo9Q0JCPENDREREQUE/PkJDQzw9Pjg5PENLS2PN0dnh1sjY4+Tk5OTk5OTk5OTk5eXl5eXl5eXltbW2q3J5cm59f3Z1d2hqaGlwb3Zta2tnZWZxdG15gG5teXd2iHhxa2podXV5dHV/wd/c3d3d3d3d3d3e3t7e3d3d3d7d3d3d3d3d3d3d3t7e3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3e3t7e3t7e3t3d3d3d3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f4ODg39/g4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4OHh4eHh4eHh4eHh4eHh4eHi4uHh4ePVhnFwY2lhV1NZV19MUk9STUtAPjg5O0E+ODc5NjQ3Njc6NjY2NDk+Pzo8Pzo/OTo6Nzo9PDk5PEFBPTtBQ0VDRkA+Pj5BRUQ+QEE3OD5GSEpesrW4wbm1u8jg5eXl5OTl5OXl5+fn5+fm5ebm5ra2tbWOfX5weoR1cnZnYmNlbGtyb2ZpbHZtd4Z9hXlsbHd4a3ZwfH14c3V5fHd2h7ng3d3d3d3d3d7e3t7e3t7d3t7e3t7d3d3d3d3d3t7e3t7d3t7e3t7e3t3d3d3d3d3d3d7e3t7e3t7e3t7d3d3d3d3d3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4OHh4eHh4eHh4eLi4uLi4uLi4uLi4eHj1Yd1bl5uY1pUU1hXS1NLSk1SR0E4Ozs+PDk4NzU2NTY2OTY4NjY5Pzw6PT07Pzo7Ozk8PDs5Oj4+Pjs8PUFEQkNBQEBBP0JDPDw9Nzs+REVKXrG1tLW2t7e2y9rJ3uXl3eDi3tXU1tPU4OPg39+2treuh3t/bnmNenJ1bWNobGxtaXR4enF5enqIh4N6aWh9cWRvcXyGgX55e318e4an2t7d3d3d3d7e3t7e3t7e3t7e3t7e3d3d3d3d3t7e3t7e3t7e3t7e3t7e3t3e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t/f39/e3t7e3t7f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4OHh4eHh4eHh4eLi4uLi4uLi4uLi4uHh49aGdmxhb19dV1lcWlJQSEpXTEVHPUA9Ozs9OTY0NjU1NTg2NzY3OD87OT09PDw5OTw6Pjw6OTg+Qjs7Pj5AREBDRUFAQD0/QDw9PTU5PEJHRl2xtbW2uLm5ubq9uMPT0r3BwcC6u7y6u8TMxb/Dt7e3hGl1gX1ndYd5Z3Vxa2t5eHB3fH15bWl3e3h3bml1j4FwbHl4d3d9gXuGgnmAoNze3d3d3t7e3t7e3t7e3t7e3t7e3t3d3d3d3d7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t/f39/f3t7e3t/f39/f39/f39/f39/f39/f39/f39/f39/f39/f4ODg4ODg39/f39/f39/f3+Dg4N/f4ODg4ODg4ODg4ODg4ODg4ODg4ODh4OHh4eHh4eHh4eHh4eHh4eHh4uLi4uLi4uLi4uLi4uLi4ePXhXJrZ3RhW1hYX15TVVVRVUpMRj9JRDs5PTY2NDc3NTc4Nzc3ODk8PDo+PDg8Oj0+OTs8OTs5P0E8PT9DP0FARUJCQTw9Q0A6Pjw1NDlER0dasbW1tre5ubm5ubm3ubm4uLm5urq6urm5urm6u7e3uX9ucHN6b3B/eXNuc3Vsc3Z4cXFwb2tvcX6Bc2mHhIF9dHOHdW11hYmBgHJ2hafd3d3d3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7f39/f3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f4ODg4ODg4ODg39/f3+Dg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4eDg4eHh4eHh4eHh4eHh4eHh4eHh4eHh4uLi4uLi4uLi4uLi4uLi4uHj14lxa2xyW1dXXWBUUVVUUFJPSkNATUE9Ozk2NTM0NjQ2ODc3Nzk6Pjs8Pjs5PDo8PDk8PTw7PT0+PUNEREBDQkE/QD48PkE8OD06NjY6QkpIWLG1tLa2uLm5uLi5uLe3uLi5urq5ubi4uLi6uru3uKx7cnhxf3ZzfnBsbXpyZ29sbW50cHt3d3Jyd3pvhpJ2f3x8enZ5fH9zfYdyda3T393d3d7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e39/f39/f39/f39/e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f4ODg4ODg4ODg4ODg4ODg4ODf3+Dg4ODg4ODg4ODg4ODg4ODg4eHh4eDg4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4uLi4uLi4uLi4uLi4uLi4uLi49eHb2pxalVWV2FbT1FSUE5XSURESUo/Ojk6NzUzNDk1NzY2Nzg4Ojw7PD46PDo6PTw5PDw9Oz09PDs9REdEQ0E8PDw8Pj5AOzg8ODE1OkFGRVautbW1tre4uLm4uLi4uLe4ubq5uLi3t7i4ubq7t7mqcnB4d3x7e4J3aG5xam9qY2lyf21zcn54dHFsanaAeX2AgH91doB1a4qLgHaR1d/d3d7e39/f3t/f3t7e3t7e3t7e3t7e3t7e3t7e39/f39/f39/f39/f4N/e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t/f39/f39/f39/f39/f39/f39/f39/f3+Dg4ODg4ODf4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHi4uLi4uLi4uLi4uLi4uLi4uLi4uPYhm1sdGVWUFxnWE1YU1JRWUVDS1BOOzk4ODY1NTM5NTY2NzY4Nzk+OT0+OTw5OTw7Njg5OTo8QEA9PkBGQEJCQDo+PEE9Pzs7OzYxNjxCR0RQqLa1tba2tre4t7i4uLi4uLm6ubi4t7e3t7e5ure2tIlyd3h9iXxwem99c2hqbGdnbHRscXd0cWx2c3Fxd3FyfHl4g3Z7d2mLkYp9kM7f3d7e3tvY2drZ297f39/e3+De39/f3Nvc3N3e3uDg3+Dg4ODf3t7e39jS397f397e3t/f3t7f3t/f3t7e3t7e3t7e3t7e3t/f39/f39/f39/f39/f39/f39/f4ODf4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODh4eHh4eHh4eHh4eHh4eHh4eLi4eLi4uLi4uLi4uLi4uLj4+Lj4+Li4uPj4+Pi4uLi4+Lk14NoZ3VkVlVkZVdKWllXW1Q9RU1LSD04NzU3NjQzOTQ0Nzc1Njc5PTo9Pjw9PDk7PDk5Oj45PD4/PkFBQ0FFRUQ+OzxBPjw5PDs3Mzc+REhFSqG2tbW1tbW2tre4uLi4t7e4uLi3tra2tra3uLm2traLfXpsbHp/cGx5dm5qaGdlcXp4b2lvb3B1c21zd4Fnb32CgYNyf3lqcHJ6f6ng393Zy8a/vb6/vsLN0tDW3tnc4NfQzcPCw8PH1dfT2dzX1NjX0MfExce9vM/Kz87Y3djO3N3c2t3T0dze39/e397e3t7e4N/f39/f39/f39/f39/f39/f4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4OHh4eLi4uLi4uLf4uPi4eLg4d7W29/Sw8rJx9Hb3OLk4eHg2dre1sbExcTN2trf5OHi4trX3st9aWZxYVleZWFNTFRLUlpMO0hNSEZBPTc2NjUzNDY2NDg3NjU2OTw7Pj46Pjk5PDk3OTs7Oj49PEBAQ0RCR0ZCQT08Q0A9OTw7Nzc3P0RGRkaZtrS1tbW2tra4uLi4uLi3uLi3s7W2t7a3t7i5tba3opdxb29waW50dnFmZWNrbmdvcm1mZ2tygWVvdnyAeGRzj39zaHFyaWVlbm+w39HFv7u5ubm5ubq6uru6vc3Gw8e/urq6uru7u8HCvcHFvby/vry7urq5ubq6ubm6w8XDucDDwby/ube/z8/U3tjc3t/g3tLa4N/f4ODg39/f39/f39/f3+Dg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODh4eDg4ODg4ODg4ODh4eHh4uLi4eDh4uLi4uHa2t3RwsPCu8XT1uDdydPDrrnAsaqrq6uwtLbJ0sXRxLG4v7Srq6usr7S0vMzE1c60tLureGxtbWBdYl9ZS1NVVFFQREBRTUhEPzo3ODU3MzE1NjQ5ODQ2Njo8Oz08ODw5Njo6ODg5NzU8PDw/QEFAQkRDQkE8PkI/Pz09PTc1OD5DRUNAj7a0tLW1t7i4uLi4uLm5uLe1sautr7Oxs7OztLS0tqaei2tue3ZxeXhnY2hfcXdha25vaG99b25ja2lseHdsa4Z+bHB6dm1scG95sca8uru7urm5ubq6urq6urq6urq6urq6urq7u7q7u7y7urq6ubq7u7q6urq6urq6ubi3t7i4t7e2tbW1tbi3u8e+w8XHzcS4wMnH0tzZ2d/e3uDf39/f4ODh4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODh3Nji4uLi4eHh4OHg3tfGxtHQztTe3tPO0t/SuLi8sq2trKysrrG+ua63rKipqamqq6urqqqqq6ysuKyqqqqrq6urra6urq6urryzrayrpHlub21fXl1dVE1SU1xUSkE/UElIPjg5NjgzNzMwNTczNzg1NzY2Ojw/PDg5Ozo6Ojg5OjY1OTs8Pj9EP0NFQkNCP0BAQT9APjw3ODc6QUVEP4W4tLS1tbe4uLm5uLi3t7SurKuqqq2urq6vsLGzs7WjcG5ucm1wg311aWFlaGZkY2Rxc21td25naW1tZXBzb29zcXN8h4F6dX11n7u6uru7urm5ubm6urq6urq6ubq6urq5uLm5ubm6urq6u7q5ubm5ubq6ubm6ubm4uLi3t7e4uLe3t7a2tbW2tra1tbW1tba1t7e3t7rBvrzGycrb3+Dg3tvd3d7h4tDW4uHg4ODg4ODg4ODg4ODg4OHg4OHi0768zNjd3OLg0dnbxL23sLCxsa+zu7uzsLS9s66urq2tra2sq6qqqqmpqKmpqampqqurqqqqqamoqampqampqaqqqqytrq6urq6urq6sraR4aWJxZmFZWlZRUk5cU0Y9QlJEQTc8OzY5NTY1MzU2NTg3NTY1Nzg7Pjw7OTk5Ojg3Nzk3Njk9Oz47RD8/Q0BBREE+P0M9Pjw+Ojo3Nz9DRj54srCztLW2t7i3trKurq2sq6uqqaqtraysrq+xs7S1t4xucnRqaIB5ZmpmZWxdaG5waGxxYmNmcoJ+dmhobGpueoaBhXx4cXF5gK+6ubq6urm5uLm5ubm5ubm5ubm5ubm5uLe3t7e3uLm5ubm5uLe3t7i5ubi4uLi3t7a2tre3t7e3tra2trW0tLW1tbW2trW1tre3t7e3t7e3tre4v8bP0MS+v8DE19e8ydra4OHg4ODh4eDg4ODh4eDb3t7Uzby3tre6wMDJxLfIvrKwsLCwr7Cvrq6ur7Cwr66urq6uraytrKurq6qpqampqampqampqKmpqKmpqampqKmpqKmpqqqrraytra2ur66trK2heWpjbWdiXFhRUFFLVEpCOklRP0E3PDk0OjU2NTQ1NTU4ODY4Njw6OTw9PTs6ODY2ODg6NzY3Pj09PT5BQUVCQkNBQUBBOj09Pz05Ojc9QUc8bKqmqKutsLGwrqupqKqrq6mpqamrrKytra2usLO0tbilgIdvaWdzdGZrcG1qZGxvcm5rbWNrcHyJhG5qbHx4Y3uKfnNqc25rcY+7ubm5ubm5ubi4ubm5ubm5ubq5uLi4t7e3t7e3t7i5ubi4uLe2tra3t7e3t7a2t7a2tra3tra2tbW1tba1tLS0tbW1tra2tra3t7e3t7i4uLe2t7a2uLm4uLe3uL6+uLq9vcfb4OHg2Nnd4eHg3dfKwcPCurm5uLe4uLi3tbS0tLKysbGxsLCvr6+vr6+vr6+vr66ura2srKyrq6yqqqmoqKmppqepqaehpaipqamoop+hoZyip6inqausrK2ur7Cwrq2unXdwbGphY2BZUU1RTFJGQzlNUEY+ODs3Mjg5Njc0NDM1ODg3OTc7OTo9PTw6Ojk3NDo5ODY2OD8+QEI9RENDQ0FDQEJBQDtAP0A/PDw6O0NIPWOopaWlpqioqKenp6ipqqmoqKipqqqsra6wsLCztLW1taWYdn5xZmt4cW9tZmVsaGNsZ2ZpaX11bWlvfXZ5hWZod294b3Fvcninu7m5ubm5ubm4uLm6ubm5ubm5ubi3t7W1tba2tre3t7e3t7a2tba2tre2tbW1tra3t7e2tbS0tLS0tLS1tLS0tLW1tba2tra2t7e3t7e3t7a2tre2tre3uLe2t7i4t7i4uLi4wMXTyry8w83PyMC9urm5ubq6ubi4uLi4t7W0tLSzs7KysrGwr6+vr66urq+vr6+uraysrKurrKysq6ehoJ6gn5udoaGdlpmkpKaon5mZmZmanZ+gn56fpKqtrq+ura2srJl1cGlrY2FeXVVOU0tSREQ4TktHQTo4NTI2OTY2NDczNzc3ODk3OTo7PT0+ODg4NzU6OTk1OD9AQEFEPkZBQkNAQkNCQT88QEJCQD0+OjpERj5cpqWmpqampqanqKenqKioqKenqaurrKytra2ttLS0tbekc311bnONf3JmanFjaW1jaGZobG51aV9jZ3VzdnpuZ3Bwcn56cYihu7m5ubm6urq6urm2s7W1uLm2trW1tra1tbW1tbW3tra3tra2tbW2tbW1tbS0tLa2t7e3tbS0s7O0tLW1tLS0tbW1tra2tra2t7e3t7e3tra2trW2tbW2tra2tra2tra3tra3uLi3uri4uLe3t7i5ubm5urq6urm4t7e3t7W1tLS0s7OysrKxsbCwr66urq6urq+vra2srKuppaSmpqScmZubmpmampmXl5eXl5aZm5iZmJmZm52en5+dnJ6gpKWko6OioqKQdG5jcGFeXltUU1RIVEo/PFFCRkM7ODYzNzo1NTQ4Mzg5OTc4OTc7OTs9Ozc6NzU2OTk4NTg+Pz9ART5CPz9DPzxBQUI/PT9EQT8+PTk9Q0Y/VaSlpqanqKeoqamop6ioqKioqKiqrKuqqaipq7W1tba5o3eKcXKHhnd0cGh5a2JjYWVsaW5zal9jZWNjZWprYmRqbHaXjX6ovbm3tre5u7u6uLWxrKurq6+wrKyrq62tq6uvsLGvr7CytbW2t7W1trW1tbW1tbW2trSvr7O0tLSvra6vsrW0tbW1tbW2t7e3t7e3t7e3t7e3t7Owsra1tLa2tre3tra2tbW1tra3t7e5uLi4t7e3uLi4ubq6urq5uLi3t7e1tbS0tLS0tLS0s7OysbCvr6+vr66vr62oo6KgnJqampqZmZqbm5qampqbmpmZmZiXl5aYmZmZmpycnZ+foJ+goKChoaCgoJ+fi3RuaXRdYGZeUlRLRFRJPUVTSEVCOzo0NDY5NDQ1NzM4ODg3ODk5Ojs7Pz04OjkzNTg5NjM6PT5AP0A6QEJCQj8/QEJCPz0+QUFCPz06PkVDQFGjpqWlp6inqauqqKaoqKipp6ioqKinp6ioqaq1tbe3t7KZtH99kIx1Z2lqbGZjYGNoZW94cGlicXx5cGpmZmRma3NqhYystrKwra2ttLezsLCtrKuqqamop6ipqamoqKinqKipqaeoqqurra2sqqytraysrq6traunpaSnqqyopKOkpamwsbGztbW2t7i3t7W1tre4t7e3t7Kppaasq6ivtLa1s7W3t7a1tbW2tra3t7e4t7a2t7e3t7m6urq5uLi3t7Wxs7S0tLKxsK6sq6yurrCxsK2rqqmqqKijnJqZmJmYmJiYmJmZmZmampqZm5ubnJybmZeYmpqcnJydnJ2foKGhoqKioKGgoKCfnop1amtuWVxhVktPREdVRz5PV0hEPTw4MzQ0ODQ1NDgyODk4ODk6Ojw5OUA8Njk5MzY3OTE0PD8/QEBBOkNGRUJBREJDQTo7P0FCQz9APUBEQ0BPo6empaemqKqqqqakpqenqKioqKimpqaoq6uttba3t7e4rbJ1cHuDdmBiaWtiZWZhZGdmfYh5bHKAfXFvcXhjbW5xZo+srKurq6ysra6urK2trKyqp6WlpaWlpqiop6iopaaoqKeoqKeoqKmqp6Wko6KioqOioKKioaKhoKChoaKjpKOjpaWlqLC0s7OzsKuqqaqztLa3trGopaOioaGipKiqqairs7Sxrq6xs7W2tra3uLi3tre3t7e3t7a2uLe0sa6ppqerrKmnpqWkpKSkpKWnqaajoJ+enZycm5uampmZmJeXmZmYmJiZmpqampqampqbm5mYmpydnZ2dnZucoKGgoaOjoqCgoKCfnp2FdGtsaFdYU0pHTUVITUdAU1dGRz09OTM2Mzc0NTU3Mzg6Ojo6OTw+OjpBPDc8ODM3ODgzNztAPz9AQDpCRUNAQkRDQT87O0BDQkNBQDxBQ0A9TqKnpqanp6mqq6mkpaWlpaaoqKippqanqKmpqrW2tre3t7izc2h7c2JnamtpaWJhZGloXV1tfHJma3J/fHR8bm1zc36gqamrq6uqq62trKysq6qpqKWjpKWmpqWmp6eqqKamp6enqKinp6iop6WkpKKhoaGgn56en5+fn56foKGho6Wko6OkpKSlp6enpqWkpaampqeqraumpKKhoaChpKWlpaempaeoqKalpaivtLa3trW1tra1tbOwraupqa6rqKWlpqanpaSkpaWlpqWkpKSkpaKhoaGgnp2bm5ucm5qamZiXmJiYmJmampmZmZmYmZmZmZqZmZydnJycnJybnJ+fn6ChoaKgoKCfnZ2cgHNrbmReU0pITUZETEtFRFFTQ0c9PDgzNjI4NDY0NjQ4OTg6Ozk7Pjw5PTs5PTczNTk2NTY8Pz0/QT88P0JDP0JCQj89Pj5CQ0FFQD86PkVAO0+jpqWkpqeoqaelpKWlpKWnp6eoqKanp6alpqa1tba2trW2uYptcW1vfHxxZ2pmYGFsYFROW2hqbm9tgYJ9cWdxdn6aqKeoqqmpq6urrKqqqqimpaWjoqOlpqalpaWmqaqppqWjpKWmpqSjo6Kio6Khn5+fnp6cnJycnZ2dnJ2en6CioaKjo6OhoqKkpaSioqOjpKSjpKSko6Ggn6GipKanp6ipqaelpaSipKSlqK2wsKyrqqusqqmnpaWmpaWlpaalpqioqailpaWkpKSlpKOjpKOioaGhoqKgnp2cnJubm5qZmJiYmJmam5mYl5eWlpeXmJiZmpqcm5qampubm5ucnJ6goKGgnp6enpycm356bnJiXlNNSlBFRk5NQkBPRT5JOz01MzYzODM2Njc1Ojs4OTs5Oj4+Ozo5OT03NjY5NjU2PkI+PkE/PT5DQT5DQ0BAO0A/QkJCRUA+Oz5FPzxQoKSjpKOjo6SkoqSlpaSlpqamp6empqalpqaltLW1tbS0tbiBaHx9ZXOCemxwdWFfY1ROT1FbaGxpbGxxbW5xbnScoqSnqKioqauqqqqqqaempaSjo6OjpKSlpqalp6ytqaShnp2eo6Shn56foKCdnJ2dnJycmpqam5ucnJubm5ydnp6foKChoJ+goaOioKGjpKSjoqSlpaWkop+go6SkpKapqainpaGdnJ+jpaipqainqKioqaempaSkpKSlpqampqampqenpaWko6Ojo6KioqGhoqKhoqOkop+enZ2cmpubmpqZmJeXmJaWlZSUlJWVl5iYmpubnJuampqam5ucm5ucnp+fnpucnJyam5p/fnF0YFtUTUdNSEZMSj8/TkM8QDs8NDM4Mzc0NzU3ODs9ODo6OTk7PTs7ODk+Njc4OTU4OD9APT9BPjs9RD89REA/PzpAQUE/QUVAPjw8Qz88Tp2ioaKioKCipaSkpKWlpqenp6empqampaampbW1tbS0tLS3jHalsXdmc3Jvc2xjZGlYT1JRT09dgG1kYFptkZGSoqKjpaampqenqKiop6alpaOioaGhoaKjpaempqesq6emoJ2cm6Ghnpubmp2cmZiam5qampmZmZubm5uampqampucnZ6goaCfnp+hoJ6foqOko6Omp6inqKWioKGhoaGkpaWlpKCcmZmbnqOmpqampqanpqempaOlpKWlpqiop6enpaWlpaWkpKOjo6KhoqKioqKhoaKjo6Kgn56enZybnJubmZaUlJSTk5OTkpSUlJWWl5qam5ubm5qZmZqanJ2dnZ2dnZuampqamZqXf3dvc11aTkhKTkdFRklERU5APD09PDQ1OzQ2NDY1Njc5Ozg5OTg5OD07PDc6Ozc4ODg1ODg/Qj9BQTw+P0A8PEJAQT49QT4/Pz1CQUA6OkA8PE+doqGfoJ+dn6OkpKSlpqeoqKenp6ampqampqW1tLS0tLS0tbSXtqd1Znh2Y2xjY2VjW1JTU1JNXqCMeFhodpajnp6hoaOjoqOjpKSlpqalpKSioaGjo6OjoqOlpqampqenpp+bmpuioJqWl5Wam5qXl5iZmpqYmJqampqbm5qZmZmenZ2goqOjo6KkpKWinqGhoaKjpaampqSjoaCgn5+hoZ+goJ2amJiZmpygpKOjpKWmp6alpaOjpKSkpKWnp6ampqampaWmpKOjo6SjoqKjpKGfoKGhoKGgoaCfn56dnZyamJeVk5KSkpKSkpOTkpOUlZaZmpqbm5qampqbnZ6enp2cnJybm5qamZmZlH10bHReWk9IRUdGQkVORT9GOzo+Pzs0Njo2OTM2NDY4OTo4OTc4ODo9Ozw5Ozs6OjY3ODk5Pj9APjw9QD5AOjlAQT89QT8+QUE+QUE/Ojk9PjpQnaCfnJucnJufoqOlpaWlp6iop6ampqanpqantLS0tLOysrGwsK2rkHiGj36amn93Yl1TUlFRTGKgootaiKCgn52YmZycnZ2eoKGgpKenpqWjoqGjp6ampaOjpqampqanpqagm5mboaCXkpOSl5qcmpeXl5iampmampqam5qYmJmaoKCgoKGfoaKipKamop6gn5+goaOko6Khn56enpyanZuZmpqZmJeZnqChoaKioqKkpaWmpKSkpKKioqKjpaSlpaWlpaWlpKOko6KioqGgoKGgnp+fn5+fnp6foJ+cm5qZl5WUlJSTkZCQkZKSkpKSk5SVl5iZmpmZmpqam5+fnp2cnJycmpmZmpiXl5F8cmdxXl1QRj9BRD9KT0JCRjhDRT4+OTg7Nzc0ODQ1OTo6Ozk3OTo8Ozo8PT48PDo2NzY5OD4/QT47Pz49PDg6PkFAQUE/P0FCP0RBPjo4PkE8U5ycm5uampycnaGio6KjoqSmp6alpaampqSjo7KysK2rp6amp6alpqiln6iop6qnoXmEXFFST0xcnKCAYpmgnp2clZOVlpeZmpydnqGmpqalpKOioqanp6ajpKampaWmp6amop2cn6Gfl5GRkJSXm52YlpeXmJuZmpqampqZl5iam6Ghn56fnpybnJ6goJ6dn56fn6Cio6SjoqCfnp2ZlpeXl5iYmZubnqKioqKioqGio6WlpKOio6SioaGhoqOjpKWko6SkpKSioqKhoqGgoJ+gnp2enp2dnZ2dnZ+em5mYl5WTk5SUk5KQj5GSkZKSkZKTlJaXl5iYmZqampyenZ2dnJubmpiYmpmXlZaNempmamBiTkY+P0A9SkVAQ0A7QEE8Ozs5Ojg2NTg0Njc4OT04ODs6Oz87Ojs8Ojo6Nzc2ODs8Oz08Ojo8PTw3Oz5DQkRDPz1BQ0FEQT88OkBCO1eZmJqamZmam5ucnp2foqKhoqSlpKSlpqSioJ6op6alpqWlpaemp6ampqakpaanqKehqXJOUU1KVJahenKanJyenJeVlJWWl5iXl5qeoqKhoqOkpKOjpqalpKanpqWlpaalpaOgoKGhoJmSkI+Wm5qenJaXl5eZm5ycnJqamZeZm5uen52cnZyZmZqcnZydnp6fn5+hoaCgoaKgn56bl5WVlZeanZ2fn6GhoqKio6OhoaCgoJ2cnaGioqOkpKOioaSlpKOko6SjoqKioqKhoKCfn52cnZ2cnJ2dnJ2enpqXlpaVlJOTkpKSkZCRkpKSkpGSlJWWl5iYmJiam5ycnJycnJ2cm5mYmZiWlJWXi3hsY2RiZFFHQT1DO0tIRDo7Ozw+OTo6OTo3Mzc5NTo4ODg8OTg7OT09Ozo7Ojk8PDc2NDc/PDo9Ozw/Pjw7ODxBQ0FDQkI+P0NAQkFAOj9APztZmZiampqam5ubm5ydoKGhoaGhoqKioqKhn5+dpKWmpqenpaWmp6ampaWkpKalpKSkpaaGUFJQT0+PmHB6mpubnJ6cnJycm5ubmZiYm56dnp+foKOkoqGhoqOio6SkpqalpKSjoqGhnpyblZOVmZyam56amJiYmJqcnpyam5iWmZybnJycnJydmpqbnJ2dnp6dnp6fn52cnJyhoaCblpWVlZacn6Ggn5+hoKKjoqOhnZuZlpaWlpicnqCip6ikoaCgoqOjoqKioKCgoJ+fnp+gnp2cm5ucnZydnJmanJuWk5KSkpKUk5KSkpKSkpOSkpKRkpSVlpeYmJiYmZqcm5qbm5ucnJqZmJiXlZWWl4d3ZGdoZGJNQ0U8RDlJSkU5Ojs9PTo6Nzg6NjQ3OTU8OTY4OTc5PDs7PDo6PDs6PDw4Njg3Pj07Pj46Qj86Ojo/QURCQ0FBQD9EQUFAPjpAPj06W5qYmZqbmpubm5uen6CgoaKioKCgn5+enp2dnKWkpaanpqWlpqakoqKio6Oko6Kjo6KnllRYVVJOZ21rgZ6am5udn6Cgn56enp6dnJydnJ6enp+goaCfn6CgoKGio6OkpKSkoqGhnpyamZejt5+ZmZienpiYmZmam5qWlZeWlZicnJ2cm52dnpybnJ2cnZ6bmJqeoaGdm5udoKKhmpWVlpaZoKKfnZueoaKjop+em5eXlJKSlJeYmZ2goqenpaGgn56goaGioaCfnp2cnJubnJubmpqZmpydnJmYmZaVk5GQkJCPkZKSkpKSkZKTk5OTk5OTlJWWlpeXl5manJubnJucnJqamZeXlpaVlZSEcmZsYmRbREJMPT84RktCPEA+Pj05Ozk6PTg1ODg2Ozg1Njo4PDw7Ozw8Ozk8Oj09OTU4Nzw5PD88OkE/Ojo6QEBDQkRBQ0A/Q0FAPj08QD09Ol+al5mamZeYmpycn5+foaGhoJ+fn56foKCenZ2lpKSko6OioqOjoJ+foKGipKOio6SiradXXl1UV19ua42dmpqbnJ2dm5ucnZ+enZycnJydnZ+goKGgoaGgoKGhoqahoqKioaCenJubm5mhqZacm5uZnJ6alpaWl5eTjo6QlJabnJuam5udn52cnJycnJ6dlpSZnJ+in5ycnZ+hoJuXl5mZmpycnJubnZ6fnZqXlpaWlJOTlJiampqfoKGmpqWgn56fnqChoaCenJubnJybm5ybm5qZmJmZmZmXl5iVlJKQkJCQj5CRkpKSkZGTk5aYl5STkpSVlJWWlZaZmZmam52cnJyampmXlpaWlpaQgG9vZV5gV0BKSDg/N0lFP0VBPT07Ojo7Ozs3NTs4Njs3NDY6Oj47Oj0+Pj07Ozs+PDo4Ojk5NkBBPTo8PTo6OT9BQ0JERUM+P0FBPz8+Pj89PDtgl5WXl5aVl5mbnqGhoKGioqCenp6enqCgn52bpaWkpKSioKCfoJ+dnZ+hoqOjo6OkobCjXWVkYGFua4GenJubm5ubmZianJ2enJubm5ycnJ6ipaGeoKGioqKhoKWyraCgn5+enJmZmpqcrmZ4nZ2em5manJmXlZWWkY6Nj5KYnZycm5ycnqCdnJucnJyempWVm56foZ+dnJyenp2cmpqampqampqbm5qXl5aTkpWVlpWTlZaam5qanZ6foqWjnp6fn5+en5+enZ6fnZycm5qbmpqbmpiZmJiYmJiYlZSTkZCRkJCQkZKTkpCRk5SYmZiVk5SVlZWWlZaXmZmXmZqenpyamJiXl5aWl5eYjX1ubV9lVlRFSzw3PjdSRUM+QkE4Ozw7OTg6ODY7Nzc6Njc5Oj0+Ojw8PT49PD06Pz06ODw9OTtAPj4/PT45OTs/QkNAQ0VDPT9DQj5AQD5APTw8YZWSlJWWlpeanJ6goKCgoaCgnp6enp6gn56em6WlpKSioJ+fnp2dm5mbnJydnp+gn56rmGNpbW5pZm2enZybm5ybmpmZmZqam5ucm5uam5ygo6SgnZ6en6CgoJ+mk5isn6CfnZuampqZqoBEgZ+enpyZmJqamJiYmJKOj5OXnJ2bnJ2cnJycnZycnp6dnpqVl5ygoaGfnp2eoJ+cnJuampqbmpqYmpmVk5OTkpOWl5eVlJiYmZucnJydoJ+gnp6enp+fn56en6KjpKKgn56dm5qampuamJmZmJeXlpWUlJORkZCQkZKSk5OSk5OUl5mYlpWUlZaWlpaWl5iYmJiXmZqamZeXl5aXlpeWl4l4dmddX1dURUU5OTs8WT5AOEI/OTw8PTk4Ozg6Ozc5OjU4OTs9PDk9Oz0+PD0+Oz8/Ojk+PDw+Pz5AQUE9ODc7QkNFP0FFQz1AREJBQEQ7Oz47PGKWk5SUlpWUlpiYmZubnJycnZ2cnJ2en56dnJqkpKSkoJ+enpybm5qZmJiYmZucnZ6cpolla3R4bVuFop2dnJydnJqbmpqampydnZ2bmpubn6KinpucnZycnJ2eoJ9hmaifnpyampuco6FPSISgnZ6cm5qanZqam5yVkZOXm52dnJ2fnZycnJycnZ6fnp+cl5idn6ChoJ2cn6CfnJubm5qbmpmZmZmZl5WWlZaYl5eXlpaYmZuenp2dn6GhoJ+fnp6fn5+dn5+hoqKhoZ+fnpyZm5qcnJuampmWlpaYl5eXlpWTkpGTlJSTlJSUlJaZmJaVlZeZmJeYl5eXl5eYl5iXl5eXlpaYl5eVl5eDeHZfW11eUT1GOjk4P1VDQTtCQzk8Pz87Ojk3Ozg4ODc0ODk8Ozw4Ozs8PTo8Pjk/QTw6PTw+PkA/PUBBPjk2PERDRUBBRUU9PkVERD9COzo8OTpkl5SVlZaUlJSUlJWXmJiamZqcnJydnp6dnZybo6Oko6CenJuamZqZmJeYmZiam5ubm6WJa3F2em9lmp+enp2dnJybnZ6dnJ2enp2dnJydm5ygoJuampubm5udm5qnalyioJuZmZudnK9ySkyGoZycnZybmp+fm5ydm5mZmZudnZ2dn52dn5+dnJydn5+fn5uanZ+goJ+dnJ6gnpubm5ubm5yampuamZudnJqZmJeYmJiYmp2foKCgoJ+hoaGgoJ+en5+fnp6foaKhoJ+enp+enJqam5ubmpqZlpaXmZiYmJiWlJOUlJWVk5OVlZSVlpWVlZSYmZuamZaWl5WWmJiWl5OUlJGRk4yRkJOWfXhqYWJiXFE8QDw2OENWSERCOjg7Oj47Nzc5Nj06OTk2NDc6Ozw9OTo6Oz87PT08QD47Oz46PT89PkBBP0A8NztBQ0U/P0REPj9EREM+Qj07PDs6Z5aTk5OTk5OTlJSVlpeWl5aWl5mbm5ybm5uamaOjoqCfnpuamJeYl5eXmJmYmZybm5qkgGpqb3lzcZegnp2dnJydnp6enp+enp2cnJydnp2bnJuampqam5ubmZmYpYJTd6KZmZqdm6CjX1dOh6GcnJ2cm5qdn5ucnJubnJubnZ2dnJydnp2enZydnZ2cnJ2dm5uenp6dnZybnpuanJycnJydnJubmpmbmpmYmZmYmpmZmpyfn5+jpaKfoaKioaGfnqCgn5+fnqCioaChn5+fn52ZmpucnZqZmJWWl5aVlpaTkpOUk5STkJCSk5GUkY+OkJGOlZabmJWYlJmXlJiRjJCPk5yTkoyFjIeDhndxZ2pkXFxRQT44NkJHYEJFR0A+Ozw7Ojg4NjU8ODo4MzQ6Njk9PTk5Ojs9Ozw6PD48Oj5AOj5APjw/QD8+PDg6Q0FEPz5CRD8+Q0VCPUJAPDw8OmeYk5KSk5OSk5SVlJWXl5aWlZaXmZmZmpqampqkoqCfn52bmpmYmJiXl5iZmJmcnZ2cqH1nZXN7enOJop+enp2dnp6enZ2enZ6enp2dnZ6cm5ybmpubm5ycm5iYmaCKXGCTm5qbnZyjj2VaTYGinp6dnZybm52bnJybnJ2dnZ2dnJ2dnp+fn52cnZ2dm5qbnJmZnJ2dnZ2dm5uanJ2dnJycnp2dnZybmZeVlZeXmJqam5ubnZ6foqOhoKGhnJucm5ubnZqcmZycn6CfnZiZmZmUkpKUl5SPj5COkYyNiYuQi4mLjpGRj4mQmJiQkoyNi5KQj5iYoqiqpqWlrKOmoZqep6eyqKKVo6Cfl39wcWlsXFtbTEY8NzdHR1g+SE5URjk+Ojg5ODc1PTk4NzMzOTY6Pjw6Nzo8Ozo6Ojo8PDs/PjtAQD47PT5BPDw2N0A+QkA+QUY+PEFEQT1DQj49PDlmmJSTk5OTkpOUlZOVl5iYmJaXl5iZmZqampqaoqGfnp2cm5mYmJiYmJiYmZmZm5ybnKx/am16f3lxh6Genp2cnZ6enp6enp6dnp2dnZ6enJubnJubm5ubm5yZmJmemV1edZaanJ2dooFlWk1/op6fnp2dnp6dnJydnJ2dnZ6fnZ2fn56goJ+enZ2dnZybnJ2em5ubm52enZ6dm5ubnJ2cnp2cnZqYl5SRjo+QkJGVmJSWlJiZmpudmJuYlY2Mjo6TkpKRj4mQjpGRjo+Ki42NjYiIi4+Lg42NkY+MkI2Qk5WVnJihoJySn6SipKmam5eanKOprb3Bwbq8uL26ucC8ubq3uru7tL2zwbV/bnVmZ1peWUxJRTo7TElTPFZSSUM6QTo7Ozc3NTo6OjgyNTY4Oz08OTk7Ozw5Nzo4Ojw5PT85PD8+PDw9QTs5NTg8O0A/QT9EPTxBQkA8REM9PT06YZOTkZCUlJOTk5OTlJeYlpeZmJmYmZqbmpqamp+gnp+fnJqZmpqampmYl5iZmZmZmZmphXB1e4B3b4mhnp6enp6fn56en56fn56dnp6fnp2cnJ2cm5ubm5ucmpiZmZthYmB+lZ6cnpd0Y1VPgaKen5+enZ6hoJ6dnp2enZ6fn56en6CenZ6enJydnZ2cm5qYnJuVmJmamJiYmJmSjJCXlKCXk4+MjYqKiImMiJORh5CPjYqKkJCLjoqMi4+IiImJjpGOjYaFiYaKhoWLiI+SkJCNkJKXlpKZmJ2TlJ6kpqaqq7Gsr6+rpquqsbm5tbS0rqyvtMDIxcXBvsbDxMTDurW+t7a0s7C2tb6qcHRyXGZfXl1JRj8/RUtMVklcTEQ/PUI6Qzk5Nzc7OTk3MTc5ODo+ODg6PDw7OTc5OTo9Oj4/OT5BPDs+PD46OTY5PDpBPkNBQT08QkBAPkJEPj8+OVyHhIOHi42KiYaFgYqMkZOVmJiHlZaWkpiampmenZ+gn52ampubm5ycm5iWmJiXl5ibqo56dXZ7f3mCoJ+fnp+goKCfn5+foKCfnp2dnp+enZ2dnJqbm5ybm5uYmZmfaV1bY32cnJ6LaV5QU4efm56dnZycoaGfnZ6dnZ2dnp2dnJiWlpaYlZWSlpmWk5GKjI+PjJCOkIuLj4+WiIiEi5GZjn2Fi42PjYyHioyQm4yRj4+Lio6TjIyNjIiSi4yFiYyPhouIh42KhYyEj4qXkJOYmpWbnKOqoaKknKKqsbe0ubWxtK2vsrKlp7O6sbq6vLa3tsDDw729vLa/urq8wbW4wL60r66mqa+3mm58Z1tjWl1fSEU+QUtJU1hZXkFGOTk9OkY/Pzo3Ozs7NjM6Nzo5Pjg6Ojw9OTk4Ojk7PDo+PTtAQDs8QjxAOjg0Nzw7QkBBQj4+O0NEREBDQz0+PjlhmZWLkYaNj5aSiHl9e3+Fi4OKgoqJhmuAeJCLlpqRnZ2UlJGTlpeampiWk42Sk5KQm5uIdndzcX1/cpGgnZubm5yenZ2eoKGgm5uWlpucmpybnJuYmZqYmJmbmpqXk3ZuZlZ5lJidiVtUUFmLko6SkY+Uk5KXm5mYm5ePjpCLjo2Ch4uLi4qLiI2RjIeHhoqIiZGKh4yEhYqNi4qNhI+UkIyDkJOUmZWQi5OTkZWRlpWOj5GMlI2Oj4qIj4ePhoeJiYmNiomJioWNh46JmJKUmpuXmKChp6Cko5qqqbO2sbWwqKqiqK6tn6qvsK21ubi8wr/BxLixtbCutrOwuL68ury+urOzp7G3wpB1gGNiXlpXUk1IRkVQSVlXX1tDUDpCQz1HRj84Nzo6NzU1OTc8OTw5ODo9Pjo6ODs7Pjs7PTs9P0E7Pz48Pzo4NDM3OkFBQEI+PjpDREM/QUM7PT45Z6mloqKZn6CippeUiI2CiIJ1h4iKiIp7e3Z7enmPeoiSfn18en6CkYWBgH1zfH99fISHfnRweHZzfHaBj4iIiYeIioyMkZicl4iOhIuNi4iNkZCPjJGPi4yPkJGRjpOdn5J/oqWYpp10T1Bkh4eCjYuGiYp/iYqGiJiRiIOIg4KFfIuLjIaJi4iKkIyIi42PjI+Wh4mLio6NjY2Wk5OdnJyalpycm56bmpuYnpeTkZWWkJKRi4+LlpSMjYqDi4SEiYyQkIqOio2LipGJjZOTk5SVk5KcmZ6Xn6CfpaKvsamupKSfmKStpqa4t6ysu729wsPAv7+vpa2wsLS3uLO0uLa0ta6stK+4tLaBeXpjZmBeVlFRQUVMT0lcXl9UR0dCS0xCREA9ODg7OTU3Nzk3Ozc9PDk9Pj05Ozg6OkA8Oj06PkJBOD88Oj84NjQyOTtCQD9CPj04QEI/PkBEO0A+N2CloJqXnaGaoaCPl5efl5WCjaCfo6GdmpKOjIxycXBvdnFucG1ucHZub29waHBxcHR+c3FycXd7cnl2d3Jyd3Z6e3l8fXt/iIGEi3+PkYaNi4yGiouLiYeEgYaDgIWim4x8ZpKlk5x7iINjdICAgpKQhoSEhY2DhIyPj4+IjY+Hi4iRkJWRjpCKk5eOj5WYp6SfnZWYlpaln5udq6aqt7W4srGnr6qnpqGfmp2WkpWVkYqPjImTjZuVjYuLhoaJjJWQkJCLmZKVlZSbkJiTlIyNkYyWl5WilZ6mqauno6OqsJucpp+mq6G0vb6zs7+5u7u6uby9rqiusa6wuLyztLGxqrCpqLGxsqild3J0X2hhYFRWUUlKSFZNXl5eVExKRVFKRUdDPTo5OTc0ODY5Mzg4PTo9PD47OTs4Ojs/PDw+OT9DPzg7Ojg8Nzc2Mzc5RT4/Qz89N0BAQT0/RDw+PThUj4yGh4eUjJWZl5yWmZaNlZyWlZydoKCdmpiWeHFubXJ4cXFsbnJwa3FvcG1yc3t1dnd5fnVxeHZ0d3tybn98gX15eH1/eYOGg4WCg5CLkIuLi46Pi4mJhYKCfn6Co4l5bFFznI2LWHB7fH9+fIWOjYuGjZSRi5CXj5SXkpihlp6WlZunpp+goKawq6GjpbW0sqqmqq+isba5vcK7ucO+vLi9uLWxrLCsppuSk5mfm5SPk5WOmp2doJqfn5edo6qsoZ+em62hp6qwqaampJiRkZWUo6SirKSss7Szs6i3tru4sLKvra2yt7a6srW6s7e5u7i8urayr6yxsbKztLOxsa2us7Gzs6yhl3Zxc19jXlJRVE1PSUdYT1pcZFROR1VPRURKRD44Ojg3NTg4ODU5Nzk6PTw/Ojg8ODk5PTs9PTpCPj84Ozo5Ojk4NjI1N0I+P0RAQDY+P0I/PEM8PT46Tn98go6MjJOTl5eaj5SWjZaRkZSXk5qanqGdnHJvcnFxcXFxcG5zcW91dHJxdneAdXd8eYV+d3t8eX1/fICJiYmDfXp/h4GIiYGAgIGGiIKGi4eIhYSIiIqFgIJ9mZl1U0tLc5OFgkxeb3F3iYWKjouNkJmclJSUoJqan6Ktsa6ppKWtr6ysrLWuvrmtrqm1sLexq7G2rK+9wsLAvrq8trKutraxtK66u7OurKepp6unoqmtoKmooq+wuLSxvLq6urK0ta+8tLezt7e7t7mtrbCprLW5sbeytLe2sLu7vLu6ury1vLi0wbWsqqqrtLG3uLm1trSzsKymrrCqq7Cxq6yusLKxtK6qo5N4dnJlZ1tMUlBFTUlTV1JlXmdUUExcUUhMUkNBOTk3OTU4ODY2Ozc5Ojs6PTg4Ozo5Ojw8Pj08RD45Njs7ODg+OTUxNTZCRkREP0A3Pj5DPjpBP0BAO0uAgomXmJSdlpabmIuSlo6XkZGVl5SZl5+bmZx8dHV2dXl1c3RudnJzdHV2d319gH56gXyDfoJ/fYB/g4KFj52RiYF/go+Xjo6HgoCBiIuFfoqRi3+IjYyLi4eRjqOLUDAvO3iGdnVAQltqboKQiYmQj42PlJSYkJWcmp2eqK6ysLC1tLOtsrW4sLy1tbGqsKqztbS7t7SztrS1r7i4t62noqassLCvtre3vrW5vLOysa61u7C0r6+yu7axuMC9tLS0s7izvLq2tLrAvbm6ubq+ubm5vrWysa+yr6q1tLGzsbSzrri4tb+vpKaoo6ussa+zrq6wsKytq6qroqKmqKKnrauqpaynoqeYeHlxZmVZT09NSVJNV01PX15cTlVVYlFEVE07Pzo8ODk1ODc1Nzk1Ojo6OTw4Ojw9Oj08Pj4/P0I9ODY6Ojk6QDs1MjY2QUZDQz4/Nz49Q0I5P0I/PjtLjpGTmJmVmZGTopiTkpKLk4uOkI+Vl5ablZSbhoJ9enh2dHRzdH53end2gIKDhouMhISFioaQiYeRk5aRjZaalY+IjI+emJaVkpCTl5qamZCeoZ2Tl5uhmp2boqecY0NfSzx4eGlmRzE2V21ykI+LmJqPj4yUmpecnZugnaSstLm6vK+2tLi0tLK3uLmzq6+qqKy1srK1rrGrrqa3s7OxpaGotbCvrayrtbqyu7q6tLK3ur67ubG4sLmtqLK4u66ttLS3tbu2trm5vLe0r7G0t7a5s7e1pq2pq6ior6yprq2up6KxtLG0q6aop6Cjq66oqq6orLKwr6+pqKGeoaGjpqOgopqlo56ol3J3bmdiVUpUT09KRFBLX2JYWlFcVGBNSFJJQUA5Ojg2Njc3NTg5NDs5Ozk8Nzs+Ojg8PD0/QkBBPTs2OTk5Oj87NjM3OD5GQkJAQjk+PUBDPkBGQz44R5OWkZWTkpSQkZ+ZnZmVkI+Sko6Mk5aWko6RlZGSkIaBeXJzdXuBhI6HhZGTkpicnJiVkJWYo5yaoaeqqZ+clpeVnaKioZyZnpmlqKyvramnqqqpp6KlqKmrqaqujkl4qn5AfHhlYlFWY0peb4qhoaSem5qkp6Spq66spaSoq6+xtK6qrK6zr6ystLO0ua6urayqrLKwsK2wqKqmsrS0uK6qtrqwr6qurLC3s7i0t7W0u7y4tbWxtauyrKiys7uvrbGytLa1sbG0s7OvrKuvs7a0sayutKqqpqWnrauoqKupqqifqbOwqqeppaOio7CtqaatpairrayppaSioKWipaOYmZyVnqKippdudWVnZFdPWUtLSktTVHBiWWRXX1tcUlpQTEM8ODk6Njk4NzQ3NzQ4Ojw6PDg6PTk3PDw7PkM/QT47OTo5Ojs+PTg0NThBREVEQkM5PjtAPkI/R0U+N0KSm5SVlZaVj46Wl5qZlZGKk5SSjo+SkYqKiY2Ul5qTjYmCho6VkZSfmpuin5+jnqGhn5ijpKelpaapqa2rqaKmpKilpKGfnqOjra2srairrq6rq6ykoaKmqaeoonZjwtSlRX2QhHhPbY14VmKAo6inoKKhrqyrqqetrqilpKmpqqmmo6iqqaekp66wr7Ovq7Crqq+yr7Czua+rqLCxrrCyubO0r62vtbCss7GurLW1tLSzs7CvrKyqrKusr7G0s7CwrrCwsKyqrauqq6alrrCysKumqbCvqaOkqaunqKaopquwq6mvqaaoqaalo6iwraqpqKKpo6WnpKGhoKKloZ2el5aYlJugpKmUbnNeamlfVlpOUk5RT1NlXGVjW11ZXFBZT0tAPDs5Ojc6ODczNTMzODo9OTo4OTo5Oj08PEBEPkA9OTo8PDw+Oz45NTo8QkFFQUNBOT47P0BEQERCQDdAkZ6YlJeZlpGHi5SSl5GIg4mLk4+OkI2Hh4SFlZmWmJeZlpqeop2ZnKKkoaCdn5qfoKGgpqGgoKCjo6KlqKmrramqpqOmpaCloKaop6aoqaeqqaSnp5mdpKWjop5jgbvArnyko5qXbElce3BSdJWjoqChn6GhqKCcn6GloaCmo6KfpKGspp6foaGkrKqnrKivq6e0sa6ur7WyrKqwq6mtrbWwrq6srreup6yqpKivsq+sq7Kvqqqpq6utqa6urrGxraqtqaunp6uoqauinaapqKilqKisqKilpKWop6iopqmsr6+oq6mhoqKlo6Opq6ymqKWjqKKhoKSdnZ+hoZ2bnZ+amZWcnKOqlG9zZm5yZF1dUFVPWE9eZWRsaGJiWlpSVE9NQTo9Ojo4Ozk1MTYzMjg4Ozk5OTk7OTk8Oz0/Qz5APTk7Ojs8QD0+PDk5PEFBRUFGQTo9O0BBQUJBRUI4PYqWlJOYmpaPiISNjpGSjIiIiI+JiZCRjoqKiJubmZygpaKlnqKjoZqeoZyanZ6bnKOop6ugoKOYoJ2XnKGjo6WjoqKkrKilqaCepqmnq6mkoKKgoqehpq6mppyfbIOYuYus06ObtKxcTa+aVWWQoZ6goJ6doKOZlpqYo6KipJ+ZnKGhoqCbmp6goaSgnaejqrGorqusqaSqqquorKalrKqws6+rq6mwq6appaWoq6ynpqevq6Wnq6upq6irqqqrrailqKOmpaesqayoopykoaOmo6qpqKano6SnqKanqKepqKupoaKoo5yepqWjqKino6WlpqmgpJ6inpeYnZ+doqKlnpiUlZ6go5d1d2t2eGJfXFVZUVVXW2Nfc19oX2NTUVlUSD48PTg7OTo4NTM3MzM0Nzo4OT05Ozo5PDxBQEM9PT44Ozw9PEA/Qj86ODo+P0NAREE6Oz49QD9DQ0VDOTyCmJmenZ2alZKKiZGRl5GQh4SJgoGNj4+Sj42cnZ+hpKmlqaeorK2moqKfmKSmo6Stsa6yp6asm56em5qjp6Cfo5+foq+rq6yoqKuvqaiqqKKgoaiqrbGyr6ujo4d3fnpz0cSwmaOtbFanrmZdh6agpaKhnZ+imJWem5+fpKGclZigoZ2enJudnZuZmZWen6Oonp2iqKGaoaOmoqSoqaqoq7CxqKWlp6eopKWpqaqnoqWmqKadnqWloqClpaOlpqCjpaOjpaelqamqpKekpqKmp6SrqaenpKGlqKynpqWlo6OopJWdo5+bnaCjqaeopqGjo6mooKiioJyVkZqfn6GmopuXkpCamqCVfHdvfXlmW1tgX1pcVVxoZG9jbWlpYl5QUEA/Ozo4OTg8OzYzNDMzMzc5OTs8OTs7OT49QkBAPTs9ODw9QD08PENBPjo4PT9EP0M+Ojk/PEI/P0FEQjk6gJ6kp6Gem5+gmY+ZnaCWloqGj4iEi4qTl5SRo6Wnqq6trLOys7S4t62pqqevtLKxqq6usbKusa2lq7OssbGpq6+rq6y2sLSwq7GysaOgo6qqp6+3t7W1trKtsK2Ph4Ftksu9lZWmlXRWbXd1c3+VpqqnpKGfo5udoZqWnqScm5aZoqefoJ+joJuUlpmWl5qfoJmVnqGZmJ2dpZ2gpKeqqaiqraylqaSlqqeqqaqsp6SkpKOimZmhnpqaoaCfpaWYnqSmpKqooqelpaGqp6mnp6ejqKWmpaGkqKesoqekoaalpaOVl52Ym5mVo6elpaSfnZ2lo6Kqo5+amZiXnJyaoaGakJOTl5ibjX93cnZ4amJbX19cYllgZG5ta25hX2RgUE9BQDs7OTs4Ojk2MTQzNjQ3Nzc6PTo8Ozk9PUI/Pj89PDo/OTo7PD5CRUA9OTtAQT5DPDs5PzlAQEBAQkM7OXuao6OcoJ2dop2Zn6KioJibmJaYkpSQm5qWl7S0rrW4s7S4tre0uLm3tbm4ub28uKqLnLK4vLS9urW7uru4s7q/uLe5u7G3r6iusq2inaCrsri7vLy6usK5tbSehnZhVp61u6anmYd4bXJweHl6fYSMkZaboaanrKalmKGko52goaKooaOgpaGck5mYmJmco56cmpudl5uZlqWam5+hqKmpqKuvr66pqKirrKytq6irp6WjoJyfo6Ojn6Cipammmpyip6Spn6GjoqKgpaanpqSooJ+ipKGjoqiop6OloaGopqalo5mbmJuTj6GknqKfmJiVoJuhpaCfm5udnJuamZugmo2YmZiTkYaAdnh4eGNbUllUX19hbWh2a3FoaWliWlNMQDw6Ozg5Nzk3NTU2Mjg1Njc3Ojw7Ozs7QD4/QD0+Pjk6PDk2Nz47QkZCPDg7P0NDRDw+OT43PkFCP0ZDOzhwkpqblJ6bm52Vl52doqajopaXnpaXl6GblJi+t7G4uba3t7i7l5S2vbu9vcDFtaK7mKC3v7+6wcm0nbu2sra/xcGooLa0urGqrrSxsLK0tbjCyM7S0MzIvbGjjXBlUkSIlIWFhX14cm9mZWtoa3FzcXFydHuLqcbGu6Knqqynq6mlpqCnoKGmoZOWmJ2foqSjnZ6coaChnZekmpmdoKaqqqqtrq2tsLGrrK2sqamrrqimpaalpqSkpqaeo6eppKGcoKKjpqCio5+jpJ2foqWgpJyboZ6fo6GhpaSlqaOkpaKkp6ehn52elpOcoJiZko+MjJeWn5uWnJqdnJqSlpSUmJOQmp2YiouHgIB8gnhhXllTYWlhZnRvdGl0ZGlkYltMSz46OTg5ODg5NzM0NTI1NDY2OTw8Oz08P0E/QEA9Pj44OTs4Njc/OUJFQzw7PD5DREM9QDs9Nz1DQ0BFQjw3Z4yRk4qalZiblZWYm6Knq6aVl5iQlZmhnpeXvrWztLu6ubi5woeYt6u4u8DCxbOjw6e4s72/tMTHvbS7uL62wMTErqCworW2tb2+wcTHw8XH2+Tj2cm7rqOVhnJZWlFEZndqbnRua2VlWVhdWFxiaWpoZWFrj7jBwLmpr7Gwr6yqoqajrJ+fpquXmqifpaWfoJydoKuwsKyiq5yYm6Cor7Kys6uorre1sq2tqaalqKulpaStqaShn6Cnnp6mqKmmnp+anqGlpqmcnaObl6KmmpuanZ+cmqGcmZ2eoKijn6GfnaWioKOioZSZmpmTj4qLhI2Qk5uPjpiVm5eYkJORkomNl5iYk4uKi32AgIVwYGJfXmtjYm54dXdubVtiUlZcTUc7PDk3OTc5Ojc0NDQxNDM3Njg8Ozs8PEBAPUA/Pj8+Ojo5Ojc6Pz5FRUU8PT1AQkJCQUE7PDhAQ0NARD87NV+MjIaFlouUlZeYl5ifpqellpWVkZebn5ual7mxtrO5vLy5urWqsryxvsG0vMe5uLuuv6fGw7/KxsnIxcXJvMLHx7+xsKe8vL7FxMbJx8XGvszQ1Mq5ppqRhHBcUVRLRFtmXmNqZWJhaFtVWVRXWVpcWV15nri6q7SyrbOtqa6vp6awr7Ktqq+zpKu1qaeopKCgnqmyuL61tbWqqaausre4t7apq7i8ubexr66noqOop6SfqKOfnqCZoZydoqSnp6GelJuaoKGlnqChnpajnZSQlpiboZqflpORlpSin5qenJudoZ6kn56VnJiPkpOPjImTkJefiZCWkZuUmJGRlZaDjJWXlpKLjIh8f4R/amZoYWtsZ252cnJ1cmdeYFxSSUU/Ojo6Nzg0ODw3NjU0MjMzNjU3PDo7PDs9QD4/QD48PTk5OTs6PDw+QkRFPj49QENDQkREOzo4QUJCQUNAOTJbk4iEjZGKi5GRlZCSmp2fnJOSmJSdnZqXmpW2sbm1tb6+tri1uLO8vMTEusPHwb+0s8XFxr/CzcfLzsvLx8HDxsfIysXExcO7vLzBxcHFxL7DwcfLybiVdGFUT09TSD5fbF9fZWNiX2RiVFZXVlRVW3mirrCqqKutrKmlpZ6pr6uyu7q4u7e5t7O5uLOurLO0qrC1ub3Bur6+vL60urm4u7qysbS8u7q7s7Oyp6Smq6uioaCdmpudmpyXmpuenJygnZaclpuZnZ6io52UnJCNiY6OkZ6bnJWNh5KLmJiWmpybmJybnp6cmp6UjpiYmpSRmZeeoZWYmpKXlJWRlJqYk4+TnZaSi5F+enx/dWtsbmRvbWlxeG95amlhXWdhUUZEQTw5OTc2NDQ6ODQ2NTMzMjY1Nj05OTs7PT47Pj49Oz05OTs7Oz89QUNBQkFAPEBDQ0NFQjs4OUQ/P0BCPzsyV5uQkZCQh4WSjo2IjZCTlZGPjZSUm5STlpqRs7e4uLi+u7C1sri2tbbAw8G+w8LAvru+u7u8xMzEzNDLxsa/xcfLyNTLysjGv7u7vsS+xcjGxsTEw7m4w59mS0RHS0Q9WmRiYmpkYVxkX1hTUFBSXIe2uqyupaSjqKSgoKWZqbSxvsG+urm6uLW0srG0tLO6wL7Av769u7u9vsDCt7a3tru7sru+ubi3u7a3tKyoqamrpqijnpOampyYkZKZl5GRmJqXnpiWk5acm5+dlJOJiX6GiIyWlJiZkYmVkZeWlZmbmpaYl5idnpyhmJWZmZyYl5ybn56jnJ6WmJeTl5yZmZyUlp2UlpOJdnl6e3dua2lodlpncnhzemdnXmRbUlhJRj87Nzg4NzYxNjk3NDQzMzM2NDY7ODo8Oz08OD0+PDo7PDs9Ozs+PkRBQURCQEBBQkNDREM9OTlCQD8/QD89MkyWmpaSk4yKmJCKi4yOkpKKiIaNkJiKj5CUl7O7tba/vb2xtrjBvby0uL/Bsbi3vsHFvbu8wsbJv8jOyMHEwcfKysbKxczIzcbIxb/DwMvNz8rGxMTEwsTBsIpTR01FO0taX2ZsZ19cYFlaVE9Zh6esuLWyrKmjoa2prKetn6y0tL/Dvrm4vbawrausr7W0ur7Fv7u8urO5u7i5ubWtsLS9u7G/vLiytrmzubu0ra2orKyqqaeXnpualY2MmJSTi5WWlJyZl5WWmZKYn5mQiop+iYqKkY6Vl5OUn5mWkJSZmJmWmJOUm6GeoZiYmp2ZmZaenpibopqdnJuYmpuZlpeXlpyZlJyYfoB4eXZ2ZWZqamhea29ueXhjYmFgXlhXRkU4Ojg6OTc5NDQ5NzY2NTEyMzM0Ozo9Pzs9PTo6PTs8Pjo7Pz48QkBDQkJFQj0/Q0NDQ0RFQDk6QkFBQj5CQTVCkJeUlZmSj5qQjpKRjZSVi4qHjI2UiImPkpq2u7S8xsHEwr3BxcLAtLO9v6ywr7rDysPCvs3IxbfByMW/wcLIy8rCwsTJzM3Oz8zDx8bIycjIycfFycfIx8LHnXFcSD8/RF5iYWtiW1hXU1mAobm/u7y6vKytpqm7urm3v7O1uLLBxrq3t8Gzsa2tqau1s7u2w7a2vbWxt762s7e4sLW2v7uwvbq0q7CxsbO8urOzrqutq62xnaOjoJqQjpiXlZCclpaYlpWSnJmTm5+clpGUjpWQiYyQlZOUm56YmZKSnJedlJmSk5aZmJ2VnJ6do5yVnZ+TnKKcnKCfnaOemJSVl5ebmpmgkH99cXRxb2NhaHZoamp0bnlsXmRbVWBZTEhENjw5OTg4OjUzOjY2NDQxMzUyNTs6PD47Ozw9PDs8PTw7PD49P0E/RUFCQ0M+QEFARUVERUE7Nz5DQkI+Q0I4O4+akZaalJKUjZCUlI6VlI6Pi4yJk4uIkJObt8C6xsXEw8zCwcS9vrWvt7uvr7O6wMfFxMHMy8W2ucDCwsTHytHLwsPExsnFzNDNx8zJwsLHwsvLyMfMyc7GxsbAr3pVTi9WVFdoYVJOVHqyycjCxMfAvL60sLCwwr6+wcbAvre2w8K6urbAvrWyrKmvsri+tMC0tLi0t7nEua+8vrm+v8K/tbq2q6qsrq+wt768trSura2utaSlqKimmpycnZyeopydmZOQkp2VmKCdmJiVmZmZl46LlH2QkJefmZmYk5GToI6Nko+VjpCUlaKdnKSem56elpyjoKGipKOkop6amZubnJ2enIN9cn14cGdga2p3bWlmdm90Y11jVVdVU01HOjc7OTk3Nzo3NDg3ODQ1MjM0MjU7Ojk+Oj08Pz04Oz05OTk9PEBBQEVCQUJBQT9AP0RFREVAPDk+QkNCQENBOjSAoZeUmZiVkImUk5aTiZGMlJGOiJaKi5CXnMXLw8O8wMPHwbm9vbu4tre3rrK3uLzAwsDCx8bHurzAwsTHyMbSycHDw7+/vsTLyMrLyby8yMfJzcjDyMnJxcXCwsLDwZVDTnmDjlZQea3N08W2v7/Av7q7vbWzs8C/ub/DucC3u8G8uri7ub27srCvsKy5wri9ube1t7q9xb24xsjCwcLGwr28tamurrCwr7O6t7m2sK+tr7OppquprqannqSlo6OjoqCblZiekZecl5GRlZeZlZmRlJiSlYyYo5qcnp2FiZ+TfJKWlZKUlJennaCipJ+en56foaGkoqKjoaOinJ2fnqOhppl5enmAc3BmZWdkbGVia25vb19ZXVdWTlBKRjk5Ozk3Njc3NjM3ODk1NjEzNTI3PDs8QDs/PDw6ODo8OTk4Pj1APz9GP0JBQz89QT5ARENDQTw5PENBQ0RBQDozbKKdlZedlo+PmJiZmIiSjZGVkI+Vjo6TlpbKy7u5urnBu7q3vsG8vLu5sa61uri4u8S6vsC+vru8wMXBxsK+xsK5u8O6uLm8vsHHwca7ucjIw8XEwMPBwcDEwcK+vMemeW2CkZZytMzIx9HBr729uLm7u763tLC5vrO8vrG5tbi8tryztbm2uba5t7GtusG6vMG/t77Ev8bDw8fHwrvAwr/Cv7iys7O1tLGut7S3tbSxrK2xp6Wlp7CtqJ+nq6ajqKWmpqCgn5SYmZSRkZWUl5OYl5qhnZ6hnKGdoaWglpSbkZeXmJqTnpmZqaSlpKWdoqCanqCkoqOcoqGjoJ6cnp6ppaiVfXqDeG5mYWViYWNkZGpjZ2RbWlpdWVFPRT07OTo7Nzc5OTY0OTk6NTMxNDUyNzo7OkA9Pzw8OTc3Ozo5Ojw+QD8+RDxCQURAPz49QkRCQkI+OjlCP0FCPT44NVmfnJiTmZaRlZiYmpeQkZCQk5GTlJKSkpSUxce4tbq5wrm5vMPFwri7ubGxtry6tbnAu7u5tre0tLW/u72/ub66urTAuLW3sq66u7fAt7zJz8C6v8C8u8W9usDEv72/rnBhfJGKi9HFv7/Jv7DBv7q3u765tbi0uLy0vbi1tLCzvLG3t7i/tr25vb65t7q+u7/Axb29y8PGw8TAw762ubq2v7i7v7y4trOyq7CwsrWzs66srKemnqeurauiqKumpqqjp6iqo5+Ym52bmpicnJiXnJuhpZ2anqGhoKGmoJqbnJiboJ+dnJ+coKeho6SknaKfmqKgop+el6Shop+dmpieqKWhi3x5iH1xZGFjY2hrZ2dqZmpeVlZUWU9TTEY4PzY7Ojc3OTs2NTo7PDYzMTM0MTc7OTg/PT47PDs3Njk5ODo7PUA/PkA9PT9CPjxAQUNDQT9DPTk2PEBBQDw9ODdJlJibj5OUkZWYlZGWkpWRkJGUlZSTk5OYlcHCwLq8ub62uL7EwMKxvbqytLO4vLW3vMC8vbS0sbC1t7W7wbi+ub+8vLe0t6+ut7W5v7vB1Iy4v7vDtbrHtrW4ury4ubarpZiNfITJv7+7wb65xr3Cv7zFuLa3tLi2tru7uLa0t7q1s7i8vbm/ucPAwLu5vLu+vcjEvcfEw7rAvb62sra4srm0usLCureysaysq62yr7Kur6ijpJ6rrKyqpKakpKiqoqemraihoaGmn6Oiop6bnKKfoKOdnJuhn6KgpKCem5eZn6GdnZ6eoaWkoaGioZ6ho5yinqCZnZijn52eoJqZoKKmnYR6g4F5cW1lZWdwamVsaFlZT0tLS1JKTEhEOT44PTs2Ojs5Njc8ODk4NjA0MzE3OTk7Pz0+Ojw6ODg5PDg6Ozs7PD1BPj09Q0E8P0NDREA/Pzw6Nz5CREE/QDg4P4mYmoyMkI+Tl5WMkpCakpGXmJaUlJKQmZTDvsbBwby8uLi6v7a8scK2tLyxtLa4s7q9v768sq2vrLGwt7y3u73BxLm3t7a1ubm6u7+8z8N2qMy9x7e5t622tLe5s7WxvcnFlUh8yr6/vr28v8jDxcW+xri1srK9uLi4vrq6uby6urS3u7q5v7zEwL+5uri/ubvFxr3Fw8Kyur27sa+2uLO3s7q+wLm2rLGrrqmqqa2qqq6mpKWnrq2ppaOio6GkpaWmoqato6Klo5+ho6Gcmpyhn6CloaCenZygnaWgnpeVmZ2fn52gn6KmpaCknpybn6Ofn5mcmZ2epJyWnKOcnqGcppZ+f4d9a25xZ3FrdGZjbmBcVUhLS0RKQ0NHPzo7OD48Nzs7OTc4Ozc8PDYyNzUxNjk8PD08QTs8Ojs6OT45Ojs9PUA+RD89PkRAPz9BRkQ/Pzw9OTc/QUNCQEI5Ojl3nJiLh4uQkpOWjY+TmpOQnZiSkY2PjpiSvbfHvsO+vbu+vL22uri9ure9s7OwuLi1uby7wLeqraSusLi7sr2+u8S2tbi1t7++xLzCxNetc4C7yM/CwLiutLS7vbe5sb3Dyo1Eds3Dwr++vbzHzMfHxMe9tbW2wb27u7/CusDCv7y2t729vcHBwL+8ube8wru3v8W7wr++tbe8vK+vt7awtLO6ubq7r6mtq62rrKaqoqeuqKWqra2vp6Sgn6ajnqKjqKOjq6Oiop6dm5ublJaZnJyfpZ6fnpmYnpejoJyXmZqZmqOjop6jo6egpqCbnaCjnp2WoJmcoKCblJegn6WcmKKQgYaBcmZsam51b3lkaGNcY1FLVUhFRUNHQzw7OTg9Ojc6PTo4OTs3PD01MzY1MDY4OTo8O0A9PDo+PDk+OTk9Pjs/PkM8Pz5APz4/P0ZEQEE/Pjo3P0BDQz9APTo4ZqGYj4uNlZKVlY6PlpmVl5uVjoyMjY+bk7m2wbS/vLm8w8C+wLq1trKywLmvsry8sLe7tru8qqqjsLm9vLK8vrzFuLG4ubzGycrCxsnRmHBzrNHRzMrEtbq/xMi+vrS/wMB3UW/LxsK+wby/w8zKx8XGwLm9vMS/v7/CyL3Hx8XFvLrEv7vBv7rAvLu7wMS9t7nCub69t7S2uLqur7WxsLCytre0t6yurKqsrKuoq6Gms6qlra+trKippaOkp5+io6Onoaeiop6cnZyamYyQlpeZnaKZnpuVkp2UoaCdmZ6fmJimpqKfoqKmoqeloqCko6GbnaCbnKKfl5WVnp6kmpafiYGDgXRwbWx0bG1vYGNfYmJOSE4/RUA/REM7Ozo6Ozo4Ozw6OTw+Ojo+NDQ1NTE5OTo5PDtAPD89PTw4PDs6PDs7Pz5DPkI+QD89Pz9FRUJBQj87Nj9CRUQ9QUE6OlmfmJOSlZqVmpOQlpeclZuZlpSVkZKTnZm2uLaxuru6vsG5uca7trWypb69tLbBv66zvbS4wbGwsbS7xdHDur68xL63vMC/yc/HyMrJwYVxc6XMzMvNysbCw8vOwby4vbqwbmNjvMjEwMC/xMDKycPDxMO5w769ub+8wsbCyc7Hxr66xr26v7m3wLm5vsDCvrW0vLi2u7CvsrK1r7Cvrqyus7CzsrirsbKxqrCrq6yrrLatqKyusqarrKmpoaWgpaakrKSmoaChnqGgnaCMlJeTm5+mmZ6emZOYnZ+gnp2eopuYp62ooqSgoKKqpqmhqKGlm6CgnZ2jn5SYmKKdp6Gfm4J7eoh7bW14fGBxZFxfYF9UST5DRUlCQz5DOz42OTo7Ozs7Ozs7PT05PTU2NjIxODo5Ozs6QTs/PDw+Nzs8Ozw9PTw9Pz5BQUE/P0FCQUVDQkRAPDY+Q0RFPkJEPztTmZuZmJ6dmqCalpyZn5KdlZ2boJWWlJqYur20sLu8wcTCv8XGura5sqO7vbS3xLuwtbq2ucS4tLy3u7ur28O+tr7Avr66ppypsrbDv6V4dXibxMbLyMHDwL/JysG/u7mxoHxya67IxcS/wMG/y8fDwMjAusK7urO6usG+wMrOysS9tby8ub+5ubW1s7/Avre0s7S4rbeqr7CwsrGvq6+nr7ausrG5rra2uLSzsLGttrS6sa6srranrLKsraSjoaenqLKrqqWkp6elpaCml5ujn6SmraKeo6KanaWiop+foaWenrC0sKSknp+kqaevp6mgq6CiopqipJ2anqGmp6+psZWCe32Bem5zeHRocF5cX11aUkZFRE1JQUQ9SDs7NTk7Ojw8Ojs7Oz0/Oj01NDUxMjc4ODs8O0I8Pz46OzY6PTo7Pj0/QD87QUFBPj4/QkBBQkJFPjo1OkFCST9AQkA7TJqdnZ6fnZienZmampySoJWbnp+blZGRl8W+urbDvMbCvr/Ixbe1uLe2ubu0r7e3srWzt7m8u7a7u8S3ba3Ovba5wLysfW5obm1ygZWYc3d8l72/xsC5wLy+xcS9vbixsJiPfICbysLDvL2/v8PDv7/HvLy/tLSutbW8vr/OzcvCt7K4t7e9ubuxtrLIwLu2tLGwt6yzqbCtrbS3r6uuqrG1r7Gvt7O6usC/tre2sru6wLWyrbO3rLC6r7KloqWrrK+5s7KosK+xr6qiqKGkraitrLOun6inpqWmq6Sknqaqo6ayuLOrpZyfp6anrquqpbClpaWbpKOYn6exrLW4sLKOhHl/fHdtdXtwb2pcYGFaVFFBRklHS0BFQ0k8PTY7OTk8Ozo6Ozo9Pzw9NTU2MTM2OTg8QT5AOz1AOzs5PD04Oj08QD46Oj49Pj09PkBCQkJBRD03NDU9REc9Q0I/PEWUnqCgoJyXmpiYlZmdmZ2fm52bnJaRj5LDwMK9wrzEvLy7xbu3s7e2tru7s6CWtayvsbS0tLa4ucDNsnaBs722tcKlh2laXmBNUltabnN3gZ+4uMK6s7u3u72/uru7rqSal4aQfsDEw768v7u7uLbBwrW/urWur62wvcC5z8rJw7GwtbS0vbq+urq7ysO7uravsL2xuK+ys7C3vbaur66wt7CsrLK2vbzEwrq9t7bAv8G3tbC2srGzurGxr6err6u2v7e1qbqztbmxp6uop7ausrG1uaisrK+qr7CqqKessayytry0sayjqKuoqKusq6i2qaaonqadmKOuvLG7wbSmiYF7gnpzdnZ3bnJhX2ZdW1VKPT8/R0c9R0NDOTo1Ozk5Pjw8OTo8Pj4+Pjg4MzE1Nzg5Pj9BPzs6Pz08Oz09OTs8OTs6Nzs+PT1DQT8/QUJEQkE8ODU4PUNGPUREPzw/iZ2en52Xl5WUk5aZnpubmpuYlJ2Uio6Owb7Dwr6+vrm2usCxtbGzt7fCtbOrrbOoqa61r620trnCyaeFeIqgr7WdamVnVllgSUlNUFNsd4alsLe+ubK1sru5vLa5vrSWm6WVoHGuycTAvb+5s66yvLquu7Szpquorbq+uMvCv76sq7Cvs7q3ub67wMXBu7y3sLXEtb+0uLu0u8PCs7a2sbisqaWrsr23v7+7u7exvL28trGvq6uprbOvsLCrsLSpuMC2sqm0tbC3tq2spqu7s660uMKwsbG1sbK1saywsri4ubi+tLGzrqyxramvrqqyuK6trainoZ6ptr+4ur+wlol9gHxxdHd0d3JsX2NhXF5PSUI/PUlERk1EQDc3NTs6OT48PDk4PT47PT86ODMyNTc2OD8/Qj86OD4+PTw5PDk7Ozo8Ozs6PEA+QkI9QEE/QkI/PDs3OjxBRD5CQz8+QYqgm6GdlJiVlZKYmpyWm5WalY2bj4SIhru0vb+7vLm3s7y8rLOytLS2wLXAr7Kzqqqxt62pubO3v8WqiHx1jKCYYFRDWFVHYWpWT0VKYY2grK+2urW0sqy8ubi1uMG9i5evoaVypcvCv7m6ta6lrLOwpq+tqJ2gn6WttrXCt7a0paiqqLC2s7K6tbu7u7W4trC1xLK+vL+8ubrFybq9vraxp6SeoamxrrW5trKxq7S2trGopp6gmaWmpKynq6y2qa+6sa2kpq2lq7GrrKmtuLawsrjBtrGxtbGvu7ayt7W1sry1urKwsbKutLKqrq2nuLWyta2uqqiosrq9wLa0qY6Ce393cHxvdnNuY15nWV1eU09OQj9KQ0FLSkA2NjU7Nzg+Ojs4Nz4+PDs/OjkzMjc1NzU8PD48PDg+Pjw8OTk5Ozs7Pjs7OTw+P0E9PEJAPz9CQD47Njc6QERBQ0E/QUKJoJ2loJSWmJiVnqCcl5uYmpGMmYmDhoS1r7S7u7S1sLG2uq6wtLOvtbq1urC1s7KttrqvrbyzuLi+tJCCeIiPb05KP2RZQk53gJRqTkFdgbC1s7WytK+su7q4trm/xXWCqJ2ZY6m/uLWysa2tn6SmppyjpZyWmZman6muuayrq5+lqKSrrq+nsKuvsbGtsa6ur7mwtLy+uLm4x8W8vLu4qaKcmJufp6assq6zqaapqq6popqXl5GcmpijnqKir6ekrKaompqemqGnp6anqa+2squ0trCqsK+xqbm2sbWxrqy3s7avrquuq7S1ra+rq7GtsbKoraurs7W3ur2wq6GLeoJ5cnZzbXVqbF1ca1ReXFBOSERHTUJHTkc4NjY1OjU6Pjg7OTc8PTo7PTo5MjM2Nzc3Pjs9Pjo6Pz48PDw6Ojs5Oz47PTk8Pj1CPDtAP0A/QT8+OjU1OkBFQkRBQEJBiJ+ipqGYm56dmqWpmJudmpmUjJmHhoeGrq2uuLmxsqiur7iyq7CwqrK1ubm+tbK4tLm6trm7tbWzt7aVjIiEe1hGQU6HWUpKWHeNgWNBU6O4s7SysLGtsLm4tru3uryPobGqo3KssKmrraujqKCdnp2Wl6GVkZWXj5eeqK6ko6Sgoqaio6mpoaanpaqtp6ynqKesq6yyu7SztLm6trK2ramgmpaWm52fq6yqr6Oko6GpoJuTjo+QlJKSmZaanaSloJ+ep5iVkpSZnqSjoaWqrK2iqaqppKmtrqW0sa6xraqprq+wraWmqqSos66trKmmpqmrpqqnq7Ksr7Oxq6mWgX+Bd3J5aHV0b2VVYWRXXVJPTUlASVJETkM9ODg3NTo3PD46Ozw4OTw7Ozw7ODI0ODk3ODs7PDs4PD0+Oz08Ojk8Ojs9PTw6OkA9PDw7QD5CQEE/Pjk1ODs8RkFDRD9BQYijpqKjnqCfp6Coqpufm5yZmI6Xi42PjKqpqLGvsK2lp6ayr6mmq6CvsLu1vby4wMG+vLy8ua6sr7K8qpmZlWlNQFJ4cVBJSUtnnIFZRFKuu7Gss6+urK22trK0ta6opp6am52epqieoKipn6GnlpqWl42bkoyOlIyWmqOooJ+hoqGmpZyjo6CepaCkrKWmqKWio6OrrLOuqa6urqeqraisoZyamJmYm6qoq6ufpqKbo5yVkIyPkJCTkJeVlpifnp6amaaXk4+Slp2ioKWipqSnoKKko6Ghq6uksq2qrKyno6yuraufoaKkpK+srKmmo6KqpKqppKmrpqmsq6ahiHiDfHZ/emN4bW5dUWlVUE9HUE1NQ1BSQT87PjQ6OjU7Oj07Ojk9OTk8Ozw8OzkzNjk5Njo7Pz06ODs6Pjw6PDs5Oz07PDw9PjxAPT88ODtAQEE/Pz45NDk8N0FDQkQ9QEOOqqSjoqGinaqlpqimoZ6dmZ2PmJWTkJWnpKGmqKmlpKChp6uhnKKbp6u1sry9wMLCwL7AuLSnpKyovcKrpb5pRVKdglFXSUpgS1SOYWNiga61qrK0rqqrr7Cys62lnZGXk4+XoJ+hoJyjpJ+eqJSZlJWKlI6KjZWRl5uhqZ6en6Cjpaicn6ChnKGfo6innKehoKSfrKisrKCpq6agpKimrKOenp6al5qrpqqxo6WonqCclpOPj5KRmZCWlZiXn5icmZukmZeUlZqdoJ2nqKWgo6Kho5+doKmqpa6upqipoaKqrqqnoaCio6msq6eppqShqaKlqaalpKKmpKijkn58gHV2fW5se2RpVlJkTklIR09TTktOSDxFQD0yQDg1OTs+Ozk5Ozg6PDs7Ozk5NDg7ODc7Oz48Ojk8Oj07Ozw9OTw8PD49PUE+QEJAPTc6P0FCQEA/ODU1PDpAQ0BEPkFGlq6koqWeo6KpqKipqqWmnp2imJiZmZWbop6bnqOioKOgoZqgmJeXlqGorK62trq5ure3u66ooKGpoKrGv8uhUEFznXdQbktMY2Z1c2BaXnCQsa+us7Wqpqyso5uZlI2RlZeYmJyfoqKcnaSemqSVnZqUjY+Pj5CXlpqeo6mdoKCepqerop+gp5+dn6OmqJ6jpp+qnaqtqq6nqLClo6Smp6ymoqWim5mer6iusqumq6qgm5iYmJWTlpqTlZaalpuXmJihnpyclpuhm56ao6eln6GioqOdm6Gmp6aoraOppZ6kp6mkpaWhpaSsrKmmq6eioKSjpKenoaCgpaKmoIl8gH53eXxleXlhYlNWYUhJS0xTVUpTUU05P0E2Nz02NTs6PDw5Ozs4Ojw9Ojs4NjU3OjY5Pj0+PDk5PTk9PTw+PTs7PDo+PTw/Pz9APT03Oj5AQEA/Pzg2NT08PkFCRkBAR6CupKaroaOqrK6tp6ypqKCipp6bm56aoJyalZmfn5uen56WlJOXk5KcnqSorq2sq6uvqq+pnpeepZykx8eOV1NKZaNaZX5vcl1Ra2NbZF9ca4+0sLC4rKahnJ2alJeamZCOkZWRjI6Nk5minJanpaGVlZaRlpaUm5mdo6Son6WjnqeurqqmorGjmqOmpqqioaqiqaSosquxsqu5qKarp6urqaysp6Ggo7GusrG0qrKuo5mcnZ6hmJubmpiZm5WWm5aZnKWhoJqjoZqdmZ+kop6gn6KmnZulpqWkpaijp6OepqOinqaloqWlqKykpq2noJ2eoJ6gpaGenqWgppmBe4F8dnZzaYJtZVxTW1pNUUtPT1ZNVE1CNz5DNzg9NzY6PDw9Ojw5ODo7PDo7OTc2Oj01OTw7QD03ODs3PTs9PT06Ozw4Pj09QD5BPj4+ODg8P0BAPT43NTg9Pj1BQEZAQUihqqCrq6GkqquwramtqaelpaWkoKGfnqWXl5SYmZ6YnJ2blo+VmZKRnJihnaqip6Cep6Gln5ySm6KanqukjXpVaXJ2dXBjdnZYV2NgY2dZWFdnra6sr6efnqKglpCTm6CcmZeSk5+coaOanpqYo259l5mgm6KenKKcoqarraerqKSstLe2sKe0rKKtraOvpaSmoamorrWzsr22vrCssa6tqaq0sbCoq6iztbizuK2ytKSgnaWgrKGhoqGgmpmWlp+bm5iloaCeo6Ggn5ucpaCfnZyhqJ+fp6meoaOkoKagnqehn5ymo5+ipaOooKmrpZ+dnZudmqainpyjnqeQgYJ/fHh2and1Xm1bUmFJUlZIRlZXS0NNSD1LSThGPDc3Oz49PDo8OTg6Ojs6PDk2Njo8Nzs+PT8+OTc9OT47PEA8OkA6OkA/O0A+QUA9PDk3Oj5APzo+NzU4PT0/QUBEQEJGnKueqamipamorqimqqWmp6aoqqGlpKOmkpOVmJacmpqcmpWTmZuNk5+ZqJ2un6eenKGdnpqZkpiem6KhoKSAboJwYGNYTFtTWk1MUFhSSE1NSJisqqmloJ+akpGUmJiWlpaMiIuOlJ2cnZyfmUhHj5+fpqOup6SsoKirtbC0sLCttri9v7qttbSwt7CutKmmpKWsqbmztbvDvMPBt7u2q66xube8r7OwtcG8t76zs7WirKKpqbKpq6inqJqZnpqqp6CZp6Cfn6iopaWfnaqiop6bn6igpKetmZ+jnp6nnqCmnpycoqGbo6KhnZympaWkn6KZnJukn6CboJyjiYWFfnZybWl3bWhuXFhcQ1dOSkdNSENGTj0+TD40PDo2Oj0/PDs6Ojg4PDk6Ozs8NTQ6PDg5Pj4/Pjg4Pzk8Oz0/Oz1BPTo/PjxAPj8+Pz08Njs/QT07Pzg1ODw8QERCREFCQ5WqoKapo6mqqKmjoamgpqinrK6lqaWpqZSSl5mUmpqanJiYmZyamJmqoLGit6Swpp+enZ2XmJWZnpuco5+diWFXXmVgV01RRz4+P0NDPz5CUXipramqpqCen6KjnZ+em52blJOVlJ6emJSFpnYqYJKeo6uuuK+vrq+vuLy7u7i1uMO+v8K/trq7wMO5vbusrqexrbHCtrjCxsDIysDKv7C5ub24wr64tLvGxL3DvLi0qrOtqrO0r7Ouqq+jnqyot7Kto7CmoaOwsa6wpKWvo6GgmqGmoaSqqpmdoJmao6CmqKGcnqKemaSenpiYo6OhpJ6mmpuipJ6fm5ubnIeGgXx0cmtsdXJxaFdcUUZVSERKUEk/RUI0Rkg5Njw+Nzs8Pjw8Ojo4OTw4OTs4Ojo4Ozw3Oz49Pj02OEA5Ozs9QDw9QDk3PD07Pj0+PUI+Pjc6QUA+PD45NTg9Oz1DQEFDQkGRqqGlqqelqqimn6KnnKasp7Gyq62jqayVkpWalJecoqGbnqCinJ+psqu7sr+rr6ylnqCgnJyYmp+gmp+flXxfXmVgUUdEPEM+RTw/OTZOfqqzp6SjoqCepaymn5idlZKanpmVjIqGiIZ4bItXNWaFfHmAlry8vLC5wcPCxr++wsbGxcPIwsDFyM3QyMvDsre1vrK+xbu+zM3GzMzM0se+v8DDvsfGwrjEysnEwce/urS6u7W7t7C2squ7sq+8t8C7uqu4rauquLu1vK6uuKOmo56mpaKjqaaZm5+Zmp2nqqegoaGkmJSjlZSZkZydn6Sep5+en6KdmJmUmJSIhX56cmtkaW94a2VaXEZMTUVEVE1FQkU3Oj87NTQ5OTc5Pj87PDs7OD48Njo9OTw9OTw9Ojs9Pj4+NztBOj45PT45PT44Nzs6Ojs/Pz1CPj83OkFAPTw9ODY2PDo8QD9BQUE+kqugp66ooqulpKKipaGlqquwsq2upKmmlJWWmpaUm6SmnaGqp6KrrLy8v8PBsrK4p6Ghq6qhnJ6hoZ2bmn1zamFXTkU+SVl8b2JCPVyOrqygmZucnp6Zl5eYk42Pl5eUj42QjIKDgnZycGxwbFRga3BybnOPrsS+wczN0MjEyNDMzMzHysXFzNDS1c7Tyb3Av8O7xsXIxdHTzdPQ09PMysHGx8bKyM/AydHNx8bIxsK9xMG/v7+1vrOtv8DDw8fFyMSvv7myuL3EwsG7vLy1rqenrqigoqmlmpagmpmdqKupo6SknpePm4uQmYmVmJugn6OdnZeempOTi5WPhYF5dXNlYmdyb2deWlpET01DRlFJRENBNTU1ODlCPTY4OkE+Ozs+PDk+PTc6PTk6PDg8PDw7Pz8+PD0+Qzw7OkA9Ojs6Ojg4ODk7QT48QD8+OTtBQTs7Pjc4Njo7PkI+Q0FAPpOvn6ivpqiro6KloKampKuoq62qrqKqo5Kcl5ebmJuirJ2frqalsarFxszOzb+wwaikqKytqqCdo56bnZZrZl1USURAP0uGnqWahKCyraOenJ+amJeUk5SXkZCQjYiEhImHg4CBgYB5cXFuanuAZFh3d3Jucn+dvs/N08qz0dDQ0dHNzc7QxM3U1djR183Gx8nMw8XKz8rS19LX0tXW09TIzMfMzcnTzc7TzcbJysrCx8zHycnGv8Ozs8jFy8vLz8fKv76/vcHHxczMycnAw8CusLOonqKqo5qTnpyYnqaprKSlppaXipWFkZSHkpKSmZualpiQm5aQjIaRi4B7cnV2Z2NndmplVlhSRE5HQElRQz5CPToyMkE8RTw3ODxCPTs9Pzs7Pj05Oj48Oz44Ojk5Oj86Pj1APkA8Pjs+Ozk9PTw5Njo6Pj08PEA/Pjk6QEE6OT44Ojo6Oz4+PEE/QT6QrKKiqaanqKSfop2qqKOso6OnpqyiqZ+To5iWn56dpK6bn7CrqKyxyc3U18/Gu8esrbO3rK6jnqOinaGcY1RMSkRDP0NSrtG9sq+mnJycoKShnZqUlJWUin15cWxlYmhycHJ7hYqAdXBtcHJvhHt2gH10cnVvdJ7P0NOZttfT0dLU1NLP0cPQ09bY1dXSy8nO0MvGzdLK0tXX2dbY09bYzdLKz9HMz9HN09DAycjLxMzNzM/PxsfItsDLwNLNzNDHysnAxMPIz83Q0c/NysjNuLe7qJ+lq6eemJ6jnp2qpa2pqKiSlYiQhIyRho2MiJOVmZCWjJiSj4aHjIR9eHN2cGNhZXJjXVJcSktHQUZJSj87QTg+NTU4Njs4Njo8QD07Pjw7OUA7OTo8Ozs8Nz09Ozo+Oz08Pjw/Ojo8Ozs5Oz89OTU7PD48PD0/Pz46O0BCOzk/OTg7PT0+PzxBQEQ8hqugnKegp6Oim6CbqaSlqaCfoaGmn6ifmKSimqmmoqarmqOwsamotdDU19rSx8bLtLXBxbG1qKGlpaCioltJQEFEQUZRdrKvppqUl5+cmqCgnpudmpWJd2lkYV9fX19eX19dYWx1c3Bvbmtwb3ODgHuBeW1paF5tvtOjf9LW1M7P1dTU0dHM0M3T19bT1dDP0tPRydPRyNDX19jS2NLX2dXWzM/Pyc3SzM7RwMfEycfPztHR0sjMzcDLzcbUz8zPycXLx8fJzMvU1NHVz9LM08K5xbGlqLWuqJuoq6Wdsqiws6ysk4+TjoiKjoOPi4SQjpmNk4+Zj4+ChYx8enFzdG1hY2ltX1ZRYEpKQ0VDU04/PD40Mzo9NTI4NTU8PEA8Ozw6OTpAOjg7Oj46PTg+Ojo8QD08OTs9Pzk6Pz07PTw9PTo2PD0/QD08PT0+OjxAQjs5PDc0Oj48P0A9RkFEPYKknKClnqWlo5mcnaSeo6OfnZ+doJqnnpyhqZ+vraqqq52lrreoq7fX1NXZ2dHO0L+8zMm2vq6nqqiho6xmQzg9PkRYgqqon5eVl5manJ+dmJudk31xZWNiX19hX15hYF5hYF9gZW1wcG1qbG9zdn1yeYByYlxTWaOtcqvaz9POy9LN1dTRys/M09bS0dbNz9XV0cXR08rQ1NXWztPR2NjY18vIzsTJz83KzMDJwcnKzs/QzNDOzszP0MjM0NHLzsvDysjKzcvM0tPO1NLR0NDKvci5sK67ubWrtrCtqLits7+7sZqOoJSRjo2IjpCFkY2ZjJGRlY6RgIWJenZvcG9rYWRucGFYXFtJRkZETVlFO0A9MzM8PDg3ODU1Oz5APTk8PDg8Pjk8QDtAOj04Pzk4Oj88PTg7PkI6Oj08OkE9PTw6Nj08P0A9PDs9Pjg7QEE9Ojw4ODs+PD4+OkVCRT6Bn5mlp6Cgo6eam5+cl56eoZqdmpyappufpKefuLa1taykrK6+tLDA2NLX2tzWzs3Kw9LPwcGxqaytqaSye0hGQjtXjaGblZOWm56enpyTlpeUiGteXl5hZGJgYGFhYGBgXl9fXlxibXJubnBxcnF2dG93eXRjW1x7d4jR1MnMzcTNytLSzsbOzM3Uy87SzcvX1tDM0dTLzNDS08rO0dXS1dbKwMrCxs3DyMrDzcTGycvLz8vOzdHO1MzHydDNycfLxsfCxsrMztHRx9DPzs7M0MXHwbi5vcPCvcO5srK+sLvDxLWqmKWhmJaRlZWSi5SNmpGUlI+PlYKJhnlxcmttaGBgcWhZWGhWTUdMSVFRQjtEPzs2ODo4Ojs1Nz09QTs6PD05PD05PT06Pjo8ODs9OTtAPD47Pj5BPDk9Pj1CPTs3NzU/PDw/PDw7PDw4O0FAPDo8OTs7Ozw9QTpFQUU+hJ6bqK2epKSqnJ6fmJKXm5+am56ZmaKVoamppcTCwb+7tbKxx8K4ytXW2drb2MzMz8jW1cTCta+0qKCtl3hsb3B3j5qNjJeVkJORkZWWlZCLfGViYmJgXV5hY2JgX19gYWFgX11bXWdxcW9wcW1pbXNwaHJ0Z2ZjXXfCxcfHxMS9wcXOzsfFxs3K0cjLzc3G0dLPzczUysfKzs/Hx8/Sy9DPxbrEv8bKvcPHyc7Fw8jAx87IxM3LzdDJxcXQycbCxsnFv8HIzczMz8PKzMnHzNDFxci7x8PJycLPwb28v7DByce5vaqxsqelnaKcmJCbkKOZl5mRlZiJj4J4b3Vka2BeZnFhW1dgR0lIR0lNVUc/Sj02NDM1NT09NDg9PT06Oz08OTo7OT89OTw7PDg6PDo6QD1APD09Pjw6Qz48Pz04ODk6QD4/Pjw7Ozs7ODo+Pzw6Ojc5PD49Oz49RkFDPYOgm6qupa6qq5qdoJeUjpedmpmgmpqcm6WysazJzcrIxL68uczMxtDV1dja29jQyc/P0dPIwre7u62ktn5ngoWiqpONjZaPhYODg4F9hIR+c19bXl1eYF5gY2RjX11cXl9gYF9bWlxha3JwbW1oZ2lqdWpjYl5iZV2oxri/wbm5uLi9yMXBw8DDx8rIyMnIwcXMxsjKzcnEwcrJwcHLz8TLyL+5wbzGyL7Axs/LxMDDu8rHyLvJxsXKwb7Cy8bFxL7Gvr3BxMbMxsa8v8rDxcfSxcHJwMrKxsjG0MPDxsOuxMvHw8q3v7y6s6mspKWYn5iso6Gmm6Ogm5V8d3N1ZmpbYW5tWlxYUkRMR0NHRExERlM/NTQzMzVAPTM6PDw7OTw8PDg7PTtBPTo8Ojs3Oz05Oz07PTs6OD4+PEI+Oz88OTk7Pz07QD48Ozk5OTk6Oz06PDo2OTw+PDs+O0NCRD5/pZypsqm0rrCdnp6YnImUm5man6Kfmp2ovri8ys/RzMfCw8bNzs7M1c/V2djZz8vSzc3OyMG1w76ysLZsXnl8n5GKkpaGeoCEhX91eHVycF9aW11gYGJjZGRlZGBbXF5dXl1gW1laXGFucW1pZmdraW53XFhWXWFpqsGttbiwsLGvr8G6uru6uMDBwcS+vbm9wLnEysXGwr3GwLe7w8i/wcm7tru7xcO/vMLOw8a+vrXBvsS7vce8w7q1vcbEwsO3wLa2v7+8zcS9trrIu7++zMTCxsPGycfJxtDGwszIssfJw87MwMXDv7yyt7Cyp6ioubClrbCqrayUend4a2VoYGhvZFZeWUpGSkZIS0FFQkZKQTk6NjU4ODUzOzo7PDk8PDs5Ozk6QD46Ojw6Nzo7Nzo7Oz88OjxAPUA/PT8/Oz07O0A8Pj4+Ojk5ODk3ODo8PDw7OTo8Pjs7PjpAQEU+fqygrLWrt7SyoZ6fl5qNlJaan52mop2et8XCxMjO0srKysfNzc7RyNDG1dTV183Kz8XJxcfBusW9rK6mYGN2gZKLiIuEeH+Ghn99g3t0dGNcXF1eYGBiY2JiZGViXVxbXF5cXl1aW1xdZ3Jva2RjaWprd3JPUVdicZq0q66upKerqaS1srWzsrO0u7W9sbewta+yu8K7wcS8v7q0srq+wLjIuLS8tsDCvbi9x8HDu7Wvs7W7v7TFuLu1rLm9vsC9sbu2sLe6s8a9t6+8v7W3tcW9vsPGwMTGxsfMxb/GxrvHy7/PycfDxsHDt8O9vba5vse/rLW7tbe2jnl0eGdnZWJrbl5WXmBGS0hISkdCREFFRj89OjU2NjYzMzs6Oz06Ozs6Oz44PEE9PDo7ODc5OTk7PDo+Ozk+Pz1APz5CQD1AOjo+Oz89PTk6Ojo4NTY7PT48PDo7OT49OT86PEBAPIi3pauzsby8sa2foJmUlJiXnqujr6qnpMXLzcjFyM3M0MvNyMnIysnKxNDN0s/NxcfBxcG/urjJt6uwmVtnb4iPhoiJenh+hYZ2d4F8c2hdXV1dX2BfYGRhXmNlY19eXFteXF1eWltbXV9rb2xmY2ZoaGx7ZUlcdYeUqKioo5ufp6SbqKmwrKmrqbOttbCyqK2nrLO7urbDubq5sKq0ubuzwrmvwLG9vLu1u8e5w7etqqiwssC2uL2wsaiys7W7vKuutqeutq68srGquLCuu667uLvAwb66w7/Gw8XAvMbBx8q4xcfFv8fDw7nExsK7xsnMy7O5wr27s4l0dndraWBibGlZV1dbQUxMTUpFQUM/RkE6Ojo5OTY4NTQ6Ojk7PD07Ojs+ODtAPD05Ojc5Pjk7PDo4Ozs6Pj45QT0/QD87Pjo7PDo9PDw4OTg5NzY4PDw9Ozw6Ojs+PTs/Ozs+QDyKwKuouLe5w62zqZ2ZlJaZoZymsLWxt6bFztLLw8XBxM/HzcHCxr/ExMPDysLJyr/AvMK6s7W1w66qsJJbaX6SiI6Pe3h9iYV5e4SAd25eXVxcXV9gX19kY2JkY2JgX11aW1paXVpaWlpcY21tZmRkZGZobXlkbYSQk5uipa6am6GdlpmiqKyjp6GrqaursKOmn6mttbaxvbivt6+orbi0s7y3s72wuLm1srzBssCvpamjq7Gzs6i9qquoq6yutbSmqa6hpa+ps6aoqK6mqLessbO3uru7sry+vr7Ev7XBwMfIt7+/xbfFw8C7v8TCvsTIzMq/v8TAwKmHc3RzamlcYW9kV1ZYUEhaU1NLRkZFPj9AOjc4OTc3NjQzNzo5OTo8Ozs8PDc7PTs7Ozw4OT44PTs8Njo9Oz89N0E+P0A/Ojw8Oj05Ojs6Nzc3ODg3OTw7PDs5Ozo8OTc5Pjw+P0E7jMKvrry3ucSwtrCbmZWcmKqpsLGztb2vxdDPzMPHubnLwsu+u8m2vcO+usq3wcTBtLa8trGvtbytqauTZG2Ig4eLgHp9f354dH58c3dlX11cXF5fYF5fY2NhYmBhX11dXFpYWVtbWFdZXF9lamRiY2FkZGhteXmAh4aTmJGVraagmJSOnqCnoqKfpKSmpa2fnJujpayysLa3p7CsqKq0q7O5sLa2rra6s7C6urG2pKCkoKaxqKypuaqlp6eop7OtoKenn5ykpqyfn6ekoaGxra2ssrWztLC1vLa7wcCyu77DwbG5ucKzwL3Atbi8vb68wsfEw8S/wMSghHlxbGJmYGtvYFVZX0hOaE9USEZLRjw9QD06Ozs4MjY1MzY5OTk7OTo6PDo3PD88PDs8ODg8OTw6Ozc4Ojo8OTg+Oj89OTg8Ojs+OTc3NzY3ODg2NjY7Ojo7OTo7PDg1OTw6Pj5AO43Itba9uLrBur22oJ6VnaCmurars7O7s8TPycvCxbi3x8DMv7jKt7vFuLPFuLO/wKy2vLKspq+0raGjkmlyhoWGgHx4dXNvbWppaXBpX2BdXFxcXl9fYWNiYGBgYF5cW1xcWFlYWFhWWFpdXmNiYGNjY2JlZmx5c3FqWFtvRXugn5SSiZqen6Wbnp6ipKKnnZuim56qrqyxtaSoqqmsrKS0uKy3sKyzta+zta+wqp+en6SisqWmqritoqamn6itq5mfoJ6ZnZ+lmpmjnJyesKmsqKqrrK2ws7mvuLm6sLa8u7qrs7K5s720t7KxtrW/tb3AvcPCu7u9l4R7c2xfZV5kZFhUV15JV11LUEdKSkdBPD8/QTs/PDA1NjM2Ojs5Ozg5OTw8Nz4/Oz07Ozg4PDg5ODw3ODo7Ozo7Pzo9Ozc4PDo9PDc0Nzc2NzU3NDY2Ozc5Ojs6ODo5ODo7OTo8PzuJyba4vru4wcHBtKSkmZqkpsCyr7astLfFz8jIwMa7u8PDz765yLi4v7eywrSxu7usubqxop+pq6eYnpBtfoWGf3hybW9ta2JeYmZmXV1eXV1dXF1fYGFiY2NiYV9cW1taWllYWFdXV1dYV1pdYWJjY2JiY2RlcGpYQSI6cWhph5ySkoyXnp6mnZqbo6WhpJufoJmYrq2tr7KgpKKtq6ehtbCxsqypsLOourOntqGin5yjoa2joqq2q6Kjpp6mpqOWmZ2XmZqdn5qXnZydnK2hrKijpKatq7OzqrWwsquyubSvqq+ysrO3s66pra6yuLC6trq9v7ezsZSGenZmX2ZfW1lWU1pVS1tRTEpFSEtJQz0/QUFAQToyNDUyNDk5ODk7OTo9PDY9Pzs8Pjs3Ozs3Nzc+Njo+Ozo4Oj07PD06Ozw6PTs4Nzk3NDY1NTQ2Nzg1Ojo4Ojk5PDg3Ojg5PkA6gci9uL2/tr68v7KdpaOYpbHDtba9rbS4wszIxsDFtsHAx863wMO9s7m5sr+2sbm7rbK1r5+ao6qhlJqPeH+DhH94b3F0cWhlZGllY1xcW1tdXVxbXmBhXl9fYF5cW1pcWllYVldWVlhXWFdVV2BiY2FhYmBgZGZyRBkcSIqUkI6ZkZSOk5yanpuVn5+nop2dp5uamqunr7CqnKOjt6mhoK6otaqnp66xpLiwpLego5yZmaqmoZqtubCjoaScoqCgk5WhlJaWnJmYlpeclZ+pnqqkop6jqqqxrai0rKqnrbOwpauus7GvsK+vp6iosq6ytLC8tLq4rqOUgnp3ZV9hV1lYU1JUS01eTFBMR0hNTEU9QD49Qjw6NzY1MzQ5ODg5OTo5Pjo4Pj47PTw8Nz49Njc2PTc7PTs5Nzk7Ozw+OTk6Ozo4Njc2NTQ1MzEwNDU2Nzk6ODo5Ojo3Ojs5OT1AOnbAvLS6wrG+t72tnaenoqq7wL3Aua60uMHMx8XCw73FuMjMssHCwa68u7W7vLW5ubCvsKqcmqGplZGKi4CAfHdxaWxydHBoaGVkZmFcXFpZWlxcXF1eXVxbXF5cW1xZW1taWFZXV1ZXWFdXVlVaYmJgYGFfX2Bial8lN26Hi46OlJKWkJGYnJmdlJ6dpaSipaaenJ+moKuvpp+ho7anoaGiqbOipailsKaxrqu1n6GdlpWpoaKUrbGxn6Ojnp6YnJOMoJSRk5iYkpeYmJeep5unoqKapKWlq6SlsKelo6usraaprq+vq6iqqrOmpquvtLGuvLaxr6+fknt4c2ViXFtdWE5MUUhSYU1WUE9KTk9FQkQ/OT02OTo3NjQ1OTk7OTg4Nzs4OT0+Oz47PDY5Ojc7Njs3Ozs6ODU6Ozo7OzY8Ozg4NDc3NjMzMjEuLzI1NTY7Ojg7Nzg3Njw7Ojs7QTh4u7uxtr2wu7G3rJ6lpqy4u7zBxbqyubXEycnAwsbFx7bGxLPBv8Wrt7e9tr26u7WyrK2omZmfo4uKdImIfnZuY2FmaWhmZ2lmaWxgXVxbWlpaWlxdXFtcXl9cWllbWVlaW1dVWFdVVFZWUlRSVF9fXV5fXF1dYGFsV1yHg4mHjYuNlY6Qk6CXnpWanqOgq6Sjo6Kkopyqq6SanqWxqqGhnqWqnqiin62sqqmuraKiopWYopqckKupsJyfop+fl5mTip2RjZKUlpCYmJOcoaOcpaGilaCipKWbo6uloqSqpKutpa6yqaalpqa1pqqorbO1tLm6r6qsnoxzcXBgW1dWVlJHUU9IWlxPUkpUS1NMRUdKQzg7Oz08OTY2Njo5Ozo5NzY5Nzc6Ozo9PDw2Ozw4PjU5ODo4ODY1OTo7PDk3Pzw5Njc4NDUyMTIxLi4xNDI2Ojg2OTg1OTg5ODk7OUA5e7W0rLS7srCrsa2dqKevubmzwMi6tcCvxcjMusHJzMi1ybyxvsPJrbG4wbW8wLy0taqsppaanJyJgXKIg3t0aWlqbGdqbG1ramxlXVxcW1tcWlhaXVtbXmBgXFhYWllYV1hXVFZWVVRVVVJTTlBZXVtbXFxcXVxfYmuDiX2Kf4iIh5KMj46YmKCZmZ+mp6qnq6eppaKYpK6klZikr6mgnJmboJ+umZyqs5+mpp+jo6GVlJuWlpKpqa2bnJ+hoZuUkIyYjYyRjZKNlpWQnaGgo52co5WboaOhmKKoo6Koq6CrsKSuuKWjpKOsraqoq6+0t7K9tbOrrpiFdXRpW1lZU1VSRlhMUVtYTVVPUExRUklPSUI9Pz9BPz03NTc5OTw8OTc3Ojc5Ojs8PT47Nzs7Oj02Nzo7ODk3Njk4OTo2Oj05OTU3NzU3MTE0MS0rLzQzNDk4ODo6ODo6NzQ4PTg/OX6zraezt66oqK+um6morLe2rLzKu7a/rMzGxbjAzs/Hs8S7t7vCyLGtuL+3vL67s7amqaCWmJmXiHp0gHZ3bm1obW1tcGdnaGZkXVpbW1tbXFtZWltcXF5fX1xYWFlYV1hXVlVUU1VWVVVTU05PUVhZWVlcW1pbXV5keoR6g3eEiIOLh5GMk5aenZieqailraupsKOnmZ6soJSUo6innZiQj5qerpaYp6qYn52UpaCekpGSkZOVqKqlmpiZnp6XjoyLk4aJjYOPi5KVkaCeoaSZlp+VmqGinpSbpaWnqaigsLCmsb2nn6OstKqup6+0sLm1wLGusKuRfnJ0Y1ZUVU5RSkdWUFJSTExYTktMT1NHTktBQ0ZFQz5BNzU4ODk7OTo3Ojo3PD06O0A+Ojk7OTo/NzU5Ojk4NzY5NTg3Nzk7ODU1NzY2NjEzMjAtKi4xMDI4Nzc7OTk7ODk0ODs4QDh/tKymsbeqpaKxq52qp6mysKS2xrS5urPKxbm6wcvQyrG3uLy9wMOxsLG3rrS0u7O0o6OdnZiXlYSAdmtnbG5xbnFqb2tkZWdlXlpZWllaWlpaWlpaXFxdXFpYWFhZWVdYV1VVVFJTVVNWVFJNTk1SV1hZWFhXWltbYGl3cHZtf4V/iIKRhpCQlJiWm6aZnqmmpaudppiepZuSjp6impeXhoWSm6SPlaKclpaVh6Kam5OMjoqQmqWnnJWVl5yRk4iUjouBjI2AkIuSkpKhmqCilpSZmJWippqNmaSnqaehoLSyqLO4oZ2jtqyqrqSysqa1u7WrrLGiinpzbl5OUVFNT0ROTk5QS0ZOTkpKTk5RSE1KQUhMSUhDPjk1ODg4OTo7Njk6Njg7OTk+PDg6Pjk7Pzg3ODk6ODg2ODU3Njg4OTc0NTc3ODIwMzAxKyktLzEyODc2Ojk5OTk4NDk4OEE3d7anpLawpKekqqWgqaaks6qissO1tbKzxsW3usPKzMazrbq9tLjAr66psJ6mrruvraCam56VlYh8hG5fX2ZycHVxaW5pZWdoal9YWFhYWFlZWVpaWVtbXFxZWFhXWVlYVVZSU1JQUVRRU1VRTk1LS1NXV1ZXV1dWWl1hbGltZ3t/eoF6jICKhpGNkJufjZibo6GjmKSWoZuUjYeZmoxzjYN+jpeWhpKakJSOjXuZj52MgomAipigo56Qk5iWhY6ClH5+dIqOepCIk5CQnZuampKWkJ2Oo6OOiZqgoaSkm6K0r6ywrZ+YprimpbChsa6csbyqqa+pmYR4dGRWTVJQUE1DU05MUE1CUFFISU5TTklKSkVLTUdLSz03NDk4ODg7OzY5Ozc6PDk6Ojs3OT85PkA3OTo8ODk3NjQ0NDU4NzQzMTI0ODUvMDEwMikoLC0wMjc2NDc4OTo6NjY6ODdBN3i3oaO0qKalqKOlpaamprKnprTBuK+0sMnEuLnAzsa+s6y6waytxK2ooqaSnaa3raOgkZaXkpB+eH9mV1ZfZ2ZpZ2huY2lpZ2JcWFdYWFhZWVlZWVlaW1tbWVlZVldXV1NUUE5QTk9PUFNUUU1NSkdOU1NTVFRTVVhbXWlkZ2R1fHRtS1VujH+Tg4qalYmSkJ6YnZWUlpONlYmAlIlfO1ZvfIyUioCMkoyPhoZyi4SWgXmBe4aUnZWDlo6Qj4OGfZN4cXCGjX2JgZCOkJeamZOLkIqdiJ+Yh4iWnpqhoJenrqmtqamelq2zoqWtma2rmKi0o6mto5N/dG5gW05TUldMRFRKUE1MRk5PSUVMUU1LUEpJTlBHSko9NzU5OTk5OTo3Ojs6Pj44Oj09Nzo/OD4/NTg5Ozc5Njc1MzMzNzYwLi0vMzQ0MTEwLy8oKSsrLTM4NTQ3Nzk8Ojc5Ozg2QTl5t6CiraGmpqqgpqmno6qwqKe0wbmwtbDHwrizvc+/ua+utcKnqsSqop2Yg5ScsaOamYeUkIuHfnN2XVBMUVVZWlddXmJnY19ZV1dXWFhYWVpZWFlYWVpaWllYWFZXV1VTUk5MS0hHYlxNTlFNS0hGSE5RUUxPUlRVWFlgaWRecXlsTD89fZOPjXqFkoqDiIuajZaUiZGGhJOFeYl/YEpRbniLkoR+hIyLhH9/bX5/k3d1dniEjZpwUY2IioZ8fnmUdmd3hoh+ioiVi46Rk5eMhIqIlIWbjYKFkpuWnp2UpKKoqaWknpuwqqGkpJGmqpaiqpyhpqeKd25mXlxIUVFTTUlVTVJJTEtPSUhGSk5MTVVLUVJQR0pEPTc2ODo4Ojs7ODo7OD4/OTk+PTg7PDY7OzQ3ODs2Nzc1MzQ0Njk2LzMvLjExNTIyMS8sJykrKiw0ODMzOTg5Ojk5Ojo6Oj85d7aboqedn6Guoaeopaeor6yqtry2uLezwbu2p7nIuLaoqLW2qrK8p56Vjn+JlKmWlYt/joOCfnhxb1hNS01NTktNUVdbXFpYWlVVVlZWV1lZWFhZWFhZWVlaWFhWVldVU1BNSkVAQJtrc3NJTUtERENJTk9oWU5RU1RVWm19am12Y2NYUo6GkoVxfIR+eoOLkoGSmYuOeoWPf3V/eHNvdXB0jo6Ben6Kq4V6e2h2e45wcm14gYuNknh7gHuAd3NyknhodYWEhIV8lYqIio2LgH+Ei42AlIR8gY+YlJyWkZ+dqZ6goZ2gqaWfnZiNp6OToJ+Wnp+kgXNpYl1dSldQUkhLWFJPSk1MUkpKSkxQSExRTVJVTUZJQj03ODs5OT49Ojs8OThAPzo6Pj03PT03OTk0Nzc4NTY3NTI1MTQ3Mi8yLiwuLzIwMC8tKygoKS4xMjcyMTk4Nzo4Nzc1Ojw7N3aumaOhmJ2ftKmvqqWtq7Cxqr20sru4trq0sZ+3urKqnZ2sqaiyr6KakY2UgY6cjpF+d4Z3fHdwb2pZS0hJSEdFSEhQVFRUV1dTVFVVVVZXWFdYWFhYWFhYWVlXV1VWVVNQS0Y+OTNOPH6eTUhKREA9QURqlH5MTlFRU1Zec352cmFxiZSXjY15ZHd+dHZ9h498g5iRf3CGj3t2e29rfq18dJCLf3qGkoB8f3RmdXyGbG9oc3yKjYeAbXlxfXFtdo9xaHGBfo5wRIuFgoOFf3d3eoyGfYx7dX2Oko+Yi5Kam6OWmZ2bnZ6hnJaNi6Wajp2XjpaYkHhvbmdjW1hYVVFKU1VUT1BOUFZLTktPT0pST0lPUExGRD07Nzk7Ojo/PTk8Ojk5Pz87ODs9Nzw5OTk5MjY2ODU2NjMzNTExMjI0LiwsLS4uLTAtKyonJyouMTM2Mi84NzY5NjY1Mjc5OTV5ppegnpagprCsrquoqbGvsau8uKu7vrizrKebsKesm4+WnKWppaGYmo6EknmJj4uLdnF8bXVwam1qWEtGR0VBQENESExMTVFSUFFTVFRUVVZWV1dYV1hZWVlZWVlWVlRTUUtENzhmNzA/qGlOSEM9OzpEioV6WUpOT1FUWF1lb29ng6WpwH1xdmB5dmx5d4aPeXuLhW5ri5J4c3hpaoCCcZaRjIF9lX9JkpluZ3d+gm1qZGx5hZCShmtybHxucnyGaW1wf3ONiYWGe35/e3dwdHSGgnmBeXB8jouKk4OWl5iakJOWlpmXnZaMg4mfkouSjYaQl4Bwam9vb1lWWFRSUllPUlVUUlhVTU5ITUtNT0tDSU5HRkA6OTk7OTk6Pjw5PDs6Oj0+Ojg6PDk/ODY4NzI3NTY1NTQxNDMyLzAyNCorKiotListKigqKCcsLTEyNTAsNTU2NzQ4NUhBODk1d5mRm5ibn6Ssr6Ktqqi1r66stL+rvMO/pqKalaSYno2Ei5ShoZiZkZOLc456gIaMhnVvdGxwbWVra1lOREZDQDw+PkFGRkdLS0tNUFJSUlRUVFRWVldXWFlaWVlaV1ZUU1BMRTFAmjMganNDmW87PDk1PICChl9JTU9PUlZaUVhbXqWGYZhlb3VifG1rfXiJh3WBh4Vza5mRdHN8aWqdjkx5hZOJhI5mMXaHcmt9fYN0ZmV1f4SEhYBmaWx1a3CAfGhxcXxuk42Pe3R+fXFxb3Vtg393eXVqeYiCiImDlpKSkIuNkZSUjpeNgHmIl4iHioaAkIh4bGtwaGVYUltYWVlbTlBVVllYTklIRUpKSEdCQEdFQ0c9OTk4Ozk6OTw6OTs6OjpAPDk6PDk4Pjc4NzcxNTIzMzUzMzY0NTAzMS4qKispLCwrKykoKycpLCwyMjYsLDQ3NzU0NzhpTzg7NW2SiJqQmZakqK2esZ6nuq+rsrDCsbvDx5qWjpWZi46FeoSQmJWNkIyQh3GHgnSIjIZ6cHNxb3BkcGdfVEZJQz48Ozk6P0BBRENFR0pMT1FRUVFSU1RVVlZYWlpZWFZVVFNQS0U4MC9cYLNHOVhQOzk0NDGWuotITE1PT1FVTEJJUUlirrKebnd0aXpqb4B/g4B5g4WFeXKglHR4gHN0lIc1cJ2onY+hoYSihXZwhnuGfHSMro2JgWhnYmpucm1wg3Vpb1h1cI6bkXZtf3t9bnJucIB7c3ZuYnWDf4aAhZCQioqJkYuRi4uOg3V4io6AfoOAfY58c3JxbWBcXV5cWllhX1JOW1pYV0xISkZJRz9DQUJIP0NEPTs6Nz07Ojs7OTo5OTs6Pzw4OD06ODs2NjY1MTExMTI1MzQ3NDUzMS4vLCwrKSopKSoqKikoKikrLzNETTIxNjY2NDM8dlI3PTdikYGSiJWRnaSnnq+VpbSprrCuwbK7wcWWj4yUj4CIfG6BkJKJg4qHj4Z1goRslYiIe3V4eGx3bndkal5JUEc9Pzc0NDg7Ojs9PkBCRUhMTExMTlBRU1RVVldYWlhWVVRTUExFPDUqnUtbQC1nSTk0Lz+Sg6muX0dMTU5QTDhETlJTREqEc3x5eXN7anSFhnp8g4J+i311oZl5foWAhJmEmpxhhqqfnYqDkI56d4h+iYiOc4uXj4R7XWRxdHp8d4ptaGpieW+FkIJ6b4F4dYV6cHR6eGtuaV12hn2HfIeGjn+KkpeDjYWMhn1xhH+EfXZ3e3yJeHF0dWdoYFtcXlNcZ15XUVRYW1VHSkpES0c/RkBEQz5BQT07OTc8Ozs9PDo6OTk7Oz0+Nzk+OTk4NTY1MzI0NDAwNDY0NTU1NC0sKSsoJycnJigoKSkoKCsrKy8wMFVxPTIzMzMxRX5XND05XIx4in+TjJGcnZ6mkaCqoLGor8Cyu8S6lo6Rk4d6hnZrf4uRg32Kg46MeIOAc6GEin19gX9wgX56aHdrUlhMQEUyMTEzNzY2ODg6PD5BRUZGR0pLTU9RUlNUVVdWVlZUU1BNRkA6Mj0gI5ZjjFs1MzExaT9Hb0lGSUxNT1FMS1RcWFJLZ4GFeIZ3eW96jYl4e4eFfpaHdqCZh4aOkpSljaypSIausK6LgYCUi4KLgoSSqYeAmJiKnHRtfIGGh36OaGdoeX9uhYeChXGEhkhsgHdyeXZobWtfdn2DiH+HhYt5lJybiYuIkX96dYp2fHhtb3d+gXV1c21cXl5cY2RYZ2ZcVVBQV1lQRExLRk9JQ0ZDQ0FAQ0E9OTc4Ojo6Ozs6ODg4Ojo/PjY7Pjc1ODU3NzMzNDQyMzY2NTY3Nzg7REZMTU1MQzcrIiUnKykrKywvMDArbnUyMjQyMEyBXDU9PF6EdHx9iYWHkI6Vl5KWoJ2soKa4r7O9s5eNkouYi310cH6Jkn59jIOSlH2Gfoakh4iAgoiFeIeJfnOEeF9jV0tCNjAuLzIzMTIzNjY4Oj0+P0JFR0hKTU5RU1RVVFRWVVNRT0dDPzgwLCOHWz8/OTQuXZZwc6NVRklLTU1QV2BYb1lbXWeJj4ORfoF/g4+PfISHj4CZlIGfoJeUm5qmrZOZu7Gnu8fDqIuMoaWOk4mBkXxxg56fkZ1/d4WFi5CHkGlocISBdIyHhIpyhoJ3iIB7doR8bXV1Zn+UjoaIiIeIh6CqopaJjpd/eoGIeXlvZ2t4fnyAdWxlXltbXmpeYmdgWk9MTlhSUUlQSkROR0NKRENBRERCPDo4Nz08Ojw6ODg3Nzg6PT04PD02ODY1NjYyMzQ0NDU3Njg2NzxCQj88ODo+Q1FeZVxHMicmLCwtLS4xKD+LWy4zMTBPg180PztudXBmd4J6f4x/gZCOipqbpJ2hrKaqrrCXkZGEoZSEeHd/jJR8fpKGkpV/ioCSm46EgIGMioKJjYN/in9scGpdQkA0LS0vLy4uMDIyMzQ3Nzg7PT9CREhJTlFSVFJTU1RSUE9IREI8ODcvOUM+PDw2My5sk5dNUEhKTExLTlZfYn5mZmtymJaLl5CQiIuMl4aRjpyKn5+Roqmko6uTqbaiqMHCrceveLqUmnyNoZ6ZhJOFgo6hn5SZkYWKhY+ZkZZscHWKjIKVjI2Od4+EcW2FgYqWkYKFiHGIoJaGkYmNj5aktKibjJSig4eSg31/a2pqfIKDg3VjX2VgW2hsXmxsXldLSE5SUU1MTEZJUENETkZCQ0VGQz06OTY9PDo7Ojk4Nzc2Nzs6Nj06Nzg1NDU2MzQ0NTY2NjY4NTU2MzEwLiosLCkoKS46UGFcQCwoLSsrMCwncog3MjQwT4RiM0A8dW5nWW+Cb3WGcXaShn6XlpqUnp6cp6CplpOYnmdlpJp+hJKReX+SiJGSfYqEmJKQg4CAi4yJhpCHhImFeHh+Z01SPi8uLiwvLi0vMDAwMjEyNDY3Oz9DRU5PUlRQUFFTUU5QSUVEPjs8OkRGPz48ODUyPD9SNUhISExMTU5SXm2Je3J/e5uZl6Sin5eelKCTm52nnaeqnqerqaq1l6u/q7bHyLfI0M++m6Bwaaupn4STkoWcoJqbmaaSkYiVopubeHp+lJiTopKXl4GUnnt3lZKqsoiMl598lJ2bjZGVmKOhpbWvnJCYp4eWj42AiGxzc32BfnNqYV5iYGJoZGBoZ1xSRUpLUE9JSUxGRk1DSExGRkNCR0RBOjg1PDw4OTk5NzU2NTg+NzU9ODQ3NDU3NTQ1MzY5NTg6NjE2ODYzLzAuLSosLy4tJyMqO1hiQigqLDEtKEuXXjA2M1GFZjJBQGlhXlBwdGBtfWF3jn17lI6Oip+Sl56Wm6qYnqpCRH2HiYeYjXiCjYqOjHyKho+QjoGCgImLioWShYOGiYGAh3deYlA0NjAtMS8sLjAvLi8uLjAwMTU+QUFNUVJTUVJTVVJOU0xFRUA8Pj1GR0BBQDg2NjI8OTtGSEdJSk5PUVlshI52koieoqaxu7airKqrpqezqq+1sbGturGzvZuyw6u6ycu3w7+4paKws6ytqqOLlpiEpaago5eBppmNoquopYiFlKShoKuhpKiPnLGLlaOmt7qboKKvkqOdop2Po6GrrquytKGUpKmImYiSiZV5en6GgWliaV1mY19lZF5nZ19bT0NJSFNORkhMRkpHRkZIQUtGQ0ZGQTs4Nz08ODg6OTc0NjU4PDU0PDc2OjQ0NjQ0NzM5PDM4PDIwMjU1MS8xLi0qKi8sLSooKiYlNVhYLywwLCwwhIE4NzFQhWg1QUNbWFRMaGJXaW5YeoR2gZOFiIKbg5KRjJLayJ2Wc1aXiI+InI98hoyOiop6h4KHkY6DhIGLhYaIkoaChYmHiIeHcW5hQEU2NDwyLzExMC0sKy0wLi00P0NBTVVQUlNVVVZVTltQR0dEPD4+RkhDRUE4Ozw1Qzs9RktJR0hRT1FXgJGeg6uhr6euvsXBqLHEtauyv7K3vbW+tMG2u7qjuMWotcjHtb25tKijtK2wsZuZkpqfiKevq6WUdp+kl6GssrSZlqquqK62u7K6rLC1orGssbW7trSutKCnqKOnmqmvrLG4t7immrWojKSOkJKfhniChXhbY2VXZ2NiZGFhZ2BbVEpERExVUUhJSkRJR0VBQEBLREJNRzw5Njc7PDk3Ojk4NjU1NTcxMTw4ODk1NDY2NDk3Pj0zODkxLjAxMjExMzAsKiwuLCsrKyooJyopRVowMCovK2iSTzYwUodqNkFGV1FKTFtZUWJiV3l1cIGUfYSGk3WFf4CMe7+7o7yCtJSTjZuPhIiPkomIeYaAjJOMh4SBjn+BiY+Gf4aIhoqHkHp4bl1WQEVOPDY6NDVBQjc2NC8vNkNIQlFbT1FVV1VcV1BfVUlLSkE/PkdLRkZEOz5AN0Q3P0JKSkVGVlRQXo6jrKKwsb+ytb7Kx7W6xL2ys8C2t8G0vrC3dLGzprrEpLDGubCysbSopLW2qrGgopebopKlsK6mraunpJigrLS7oqiyurW8v8y/xcW9vbPBt7q3vra6t7msrLGlsKmtvbC8usHBq5i5p5StjpeXqYh+g35tWGRiWWxma2ZYXGNZVlNJR0ZMUUdDSElBSEQ+P0JCTEBATUQ5OTY2OTo/Njo5OTY2MjQ2LzE5NTk5MzY0NjI3Oz0/NjoxLi81ODo5NjUwKigsLS0tLCwqKCgrKyhFUy8qMDBKj2s1MlCHbTY/RlJMQUxRVlNZVVp2am9+joOAjoRuenN4h2K5oZmjiZSUlpKUk42PlpGHhnuGgY2VioCEgYp6fIqHhnyKgoGLg5V9d3p1ZVBcZEdFTDtRY2FbXlNGPztIUEVaY1FSWFhaZ1lUYF9MU1BFQT9JSkhFRUFARDxFNkI+SEdKTFNZVF2SrbazubbHvLi7ycy6u8C7t7W7ura9s7mxxWB1sqSxmp6qvamlqKuqpKKytaCrqJ+Vlp+ZoK6lp6aln6OTo6extKiys722wb7TycnTxsPFzMLKw8C9vL67vLe0r7i3tsO5xb3Cx6+euKmhq42kp7WIgYF0YWNjX1ljYGpnU1hgVlJVSUVFTktAPkdEPUtBPUJAPUY+O0hANzk2Mzc5PjQ4OTo1NzA0NS8yNjM4OTM3NDQyNj84QD5HS1JUU1FQT1FRUEpBOS8sLCwqKygoLC0sL1A+KC40OIB9PDJLiHE5PkNLRUFJTVBSS1FdZ2xrcI+NhY9zbHJyc4fVwLWZoI2VmJmRjpeRlpaOhod9hoOMlop+g3+CeHuLg4d7i3mBioKXfnR9emtmcHVZXlxQZWRiYGVkXVtYV1xNZG1VUm1tX25fWGdkVFlVSkRCS0tJRkhISEhCSTpEP0hLU1RVXFpbkre+t7y1xL65uMnKura5tbe5sre0s661tphkdaecrXBeoqycmKCim6SeqqWUn5+Qk46WmZion6agnpqZg6SerKWqsK24sL251NHP19DKzNLMz87Kxr++wsq9wbzBwMTExcq+x82yo7qwtK6aq7i7mIB8bV9iXlpfY1pkY1FbYFNQS0NBRUZFPEBFPkFIQkBDPTpFPj1KPzQ3NTM1Oz00Njg5NzcwMjIvMjQxNjk3NzU1NTVEM0VMTT41MS8wMDY6NDc3QElPSTstJioqKC0uLyxATSsvNTRtiUkwSIl0Pz5CREBDREZLT0RRW1loX2+WkpCUbmxvdHWHtKyhoZ+LmZyZjI2VkZqRhYqKfoiGjJCLiHyBg3N7ioOFe4l0goqGlX9ze3lsbXV7aHJlaWxpZ2pqaWBmaWlsWm1zlq2kvIiGZ1tvZ11aWlRIS05QSktQS1NRSUxBSkZKT19eYWZpYZa1xbC4srq7s7DExrWvuLCwu6uysaaqt6uMtaedmqeaTpmdjI6flpGmmKWVipOTiZCJj5GRnZuhl5qVloeemqebrK+osKi0tNTU1NbTzNDT1c3Sz8zEwsnQvsnJysnRx8zNws/Rt6/DvMO5pLW5waKEcWVeX19aYllaZ1pRXVhPUEJCSEVCSDtBQz5BRz8/QTc7RD5ASD00NjY1NTs6Njg3NjU0LzEwMTQ2Mjc4ODc1MzY3QzVCOD8tMC0xMzQ5PTk3LC4sMTtGSz0pLCguMDAwN0s/LTQ2VIhXMESHd0M7Qj5FQkFDSk0/VVlSZVZzkJCYgmdxb3l5g6GqnqaXjJqbl4uNlZGajn2Ji4SNioqKkId8hIJwf4eBhnuHcoOSi459cXh1bHF4fnF6bXhzbWmBcG1jaW1weGl3fH7Lv8Hfp21jeG5jW2JgSlBSVU5ZXk9dXE5QTlRQVFRcbm12gnGWrLers6avtamru7+wqrSlpLimq66gq7SjjrCtmpeYjJCTkYSOm4GNppGciYOLhIqJhIuElJWYl5SbkZyXmZqfn6uspaiirK3P0tXSzszT1NTP1NHOx8PU0cfN0tPT18zR0cTS1sXBzsfHwqi9t86efHFoYGVfWGJTX1tQUVRRT0g+QEZBQkU8QEE+RUQ+Pz86PT08PEpBNDU0NjU8ODg4NjY0NDEyLzAzNTI2NzY4NTMzOz08RT1AMTErLzI0OT41OTAxMDIyLTJETjMpLzMuMzI9TjIzOEN9XzJBhnREOj09ST5AQ0ZIPFVRTU5adYaFindsd3B9fn+hnp6hjIyYk5OLjJKPlYV5hY+QjYqKiJCGfoJ7cn6AgId6hHWFk5CIf292cmtzfXt3e3OCeHJrgHNyaW9xenlxer7Lmn6MsoR2coR2aGFrXUNaWltWZWNYZGpTWFxdYGNdY3d6fYuBmKmkpKGfoKelqq+4qqWyoaGtoaOtoaexn4immpOSkYmRjoiBk4lqlKKMmYSBhn6Rg4OTl62LlY2VmY6GkpGel6iwoqGhpaSpyc3PyMLM0dTS1NLO083G1tLM1NjW1tjU19XJ1NrNydfX0cqsw8LLjXVxZWJhWlZaVVxRS0dKSkpAOzo7REFEPEJDPkdCPkJCOzw5PDpHQjQ2NTQ0PDU2ODc1NDMyNTAvMjU0Njc0NTU0NDw+PUU/QTYyLy0xNjs9MDgxLzI1NC8tLTtSMDE3LzUzMkZEMjg+bmI1PYF0TTk5QEk8QUQ/QTtPTEZKWHCAdX1oc3hygomAnZWdlIWLlYmOiYiNho5/eIOTmIqMh4eLiH6Cd3N7fYKHd396hpGVf4Nud3BtdX91eH10hXx5bId2dG59doR0eHudtYw7QYvFpX6MfGllV0lDZmNlY2dqY213W15maGtuaG6AgoeRi5ydoJ2Ql5ieo6OlsaOjsZ6hpZ2gqKCjsZyFnpKRkY+LjYuGg4+Ef5ybjI2ChIV5lH+CqZWjjJGJl5KLfpiLmpKrs5ibnKicp77Dxrm2xs7S0dLQzNLLyNTO0NXa19fY1NnYzdjbzsnZ2tHVvsrLtXp5cGdfXFRXUl1XRkdKSUVFPTo3OkBAQjpGRD9EQ0FEQjs/Ozs3REM3NTY1NTswNjc5NDQzMzQxMDE0NTU4NzQ0NDQ5QD5EQkM8MzMuNkZUV09RSkFKRj8xKiguQlMzOTI1NC83Szc1PGBiQTxzdlY4N0FIOj9DPjw5UUVDSlRrbm5wYnBxdIaNfJeRnYt+h5KDiYaEiYGHfHiFlpaIjoKHhYd6hHhxenuDhXV5hY6NnHmLcHxvb3p/cXuAcYOHgG6OenV3fXyCdH58hoevc1ipwraNkYJwbWI9XmhycHFwbnh2gWVob3J1eHF6i4aNk5GalZ+Vh4yTmqCanqmfoKyboZqYn6Wen6uZi5qLkJKNhX2Ih4OFi46gmZOIg4d+bJl6hJiGiJOMjZSMhnyciZSQrqqUlpifmaevtr2prb7HzMnJzMvQycPSytTX2dfY19Xb19PZ29XQ2trR1sjUy5Z7fWtqXVxRVFVgSUNGSUg+QT49Nzo9Pzs9Rz0/QUFBREE+Pjo4N0RCNzU1NDc5LjU2NjQzNTU0MjMyMzY0NzU1MzQ1OEVCRENFQjU2PEZOU01bbmZjbnNrYVY+LDRMRzg2NTQzNEJGND1XX2hMdXheODs/Rjw8Qjw5OUQ+Q0dSal5tZGJma3aAiHGRkJqAeoCNfoKCgYN+g3t8hJiNh4t+hYaAd4J5bnt7hoF0eZKejqB2jnWCc3WBfXOAhG+BkIJvkoR1fIGFenaGe4m3xaTBybiBlpuPd3BlTmZjgXqBd4aikIp4eXZ7g397hHZtk5aUlI6XkYOJj5aalpalnJeflp6SkZeinZmrlZCQioyRgoyFiIiBhpCRnpuZiIaMgYWXeoiJn5eQiI2Ki4J9oYmRjLyhmJOYmZ2ppqaun6i2v8DBucfKzs7FzcnR1tXV2dXX29TW2drb19va2djO28aIfXtpa2dhVVlWV05MRU5DOz09PDg6Oz05PUA2PT9APD89PDk4NjdDQTY0NTU9ODA2NjU1NDc3NDU2MTM4NTQ1NjQ1NTdISD1ESkU3OTI1O0g+Ozo6N0lQXVpSVVhLOVQ+Ozk1MzI3STg9TllNSHh4ZDU9PkM9PUA6Njo+PkBFUV9YZWFdW2h0enlsio2Sd3Z6int+gH5/fIR6fYKRiYSFeoSHe3V9dG18fYZ+dH+SnpGeg5F7hn54j354iopugpqAdJmGfoGJhHt+kHqPqY6Pw6G9i5yknX2JhH2JcouKfnOmmpyYk4V7jpCIhGhHcaCknYyLkJKFiIqQk5SOnJmSlJCWjYyVn5yUoJSRjY2Pi36Qjo6KhImSlpqen4mMlJKdkYKLgKWZiISNgoWEgaWGioy4mJ2RlZaiqKGenp2kr7e6tazAxsrQyMfMz9PT0tjT1dfA19jZ29ja2tnZ19u5e3t6bmtoWWJdVFBPSURMQjw8Pjk5Ojo5OTs9Nj8+Pjw9OTo7OzM3RD83Mzc4PjcwNjg4MzU3PDM3ODA0OTc2NzU1NTQ2RlA1RE5JODkzOEFLPTszQ0BJPDlEV048TVRITj85NjMzMz5DO1tYPjVZeXBaPDxBPD0+ODY4OT89Q1FTUlheVVhmbW1taYGOinFyeYp7en98f3uHenx7i4aCfXSDhXlzenNtgH6EfneFm6KbnZSSf4yIf5iHgJuSboiohXqgi3yRjYOIhJx9mpCKjKOioJCkr5+LkIuFi4GThldyrYufq5uPg5ibj4+OXIKikYKMn5OVjIeIjJKSi5SUk46Lj4qHlpqcj5SWkIqRk4aAi4iSjYqKnJaYoqKGk52WoIqJiI2bkIOIjoCDh4akhYyRs5idkpSXoaGempKcnqiyuK2mvcLHzcjGz83QzM/X0dHVrtbV2NrY2trX1dnZoHJ/d2poX15ZVVlZQ0FJQz8+Pjo0OTo7Nzo7OjM7Oz89Pjc7OTowOkc9OjM3PUA1MDY3NzI1NT82NTs1NTg1ODo1NzczNUhSN0dPSzk5ND1FSkI+MUZDTEI5ODpHWEA1SFdJNjYyMjM6RUNlWD8mX3lpX3o+Pjk8Ozk4OjtAO0JRS0tTWVBUY2J6bWF+koNvbXeLeHl/eoF8hXt7doWEf3NwhYJ6dXd2dISChH5/kqakn6Wil4qdkJSXi4qol3OKsY2Ep5KEmZOFmYyilZ+Yk4ianqOSqbCfkJSQjY6IloxujbeFmsTIspuhpZucmJaQspFkpM3Ilo+Gh4iQko2NkpOJhYqJhZaZmo+PlJOGlJeDf4+LmYiNkKqWl6OjiJmelpqIjoaWl4mEjoyBf4ePpIiOk6ial5OXmaGZn5mTnZujs7Smo7zBvsfFxcnIycLL083N1KnS0dbW1tja1NLazoR1gmtmYGBfUEtWXEJCR0M7QT04Mzc7PDo4PTY0OTo8OjgyPzk5MjlJOj42N0JDMzI6OTYyNjQ+PTQ7PjY5NDk7NTc5NDRKUTxKUUs5QTdCR0lANjRKRUxGPjw4OEVUQTc+XDg2MjE0OjtFYFhBRmF0aExjWj41Ozo6NTs6PTpFTUZIUldTUkJlg0d1go58fG1+iHh6fnqBgYJ+dnaAgntsbot+eXx3eHyEhop+i6O0qKSqs6GWp6ClpJaVr6KDkLiVkrOajaGgjKSbr6KknZiQp5epma2wpJeUlZSQi5ialqDAjqPJuKuaoqWtmZGbnLKdhoWoopyYhYiIjpSMipOPh4CGh4iTmJSMipOThpSYhoSRkJx0kJiylZakoYicmZOPipCKlpqJipaNhn2MmJ+KkJCcmpmTmZiglKGdlZ+bobGto6S3vrPFx8S9w8O/xs7KydKnzszT0dDW2NLP2Lx1fHhfYldiWFJJS09FQkNENT47NzY6Pzs8Nz00MjY2OTc3ND01OzU8TDw+OzxCQTc1PDs0Mjc3P0A2Pz83ODQ5ODc7PDU1T01EUFJMOEA9RUFHQTU6SUVORUQ6NkFAQlM+OURPMzIzNTc1PXZcPFJcdGlaTV1TPD04OTU2Nz06SkZER01cXFlKaGE7SISLenpthYZ5fIR4gIWBfXB4fH18b3ONen2Be3iGi4mGhJKovK2psr2wpa6zs6mjorCtipq1naK4pZWtpJeprbempKOfmamYqqSvsaqamZyUlZGYoJeau7utyqFptreqsJWYnqKrkpe9pF6qsoKJioyUh5B8jo59g4aOkJSUiIeSlouPlY2LjJeZkpyZtJaVq56LnJSSjZCSi5iaipKdj4uJlqCijZWNl5mdk5yYnpShoJScnaauqKKks7irwsjEtrq9vMXIyMLQocbJzc3E19bQytOjc31rX1tVYVNRR0Q+PENBQjg/ODc0PkY8PDY8MzUzNTU0NTRCMzk6Qk06QTtBSEI7OkA8NzQ2PEI5P0BCODc0Ojo2Pjw0N1RLQ1VRSjc8OklBRUA0QUpITkJBPzZEQTxKTkQvVD0yNTQ6RUpcWEpaUW1ncHBEaWBLSTY3NTc6PkpAQ0lQZkhhYGJwSkCLiX+AcoaHfIGJdYKKg35tfXx8fnB3h3eNgYd7jZCMhoyaq8LAsL3GvLO0wby0rKuztoyosq2tvaubu6Oorbm4q6amoqKko6qvsrGqnZykmJuYmJ6ipqWTo7mvqL+8rK2yuaWjp32IhpytvbCCi4uKkIOPg5GOeoGHkI2OnIiIj5eNipSXlJCalpynmrCakaudjpqPko6WkY+Vl46RoJCIlJukrJSWj5ScnpShnpuYoKCVmp6np6SipLCzpsDGw7Cwu7bFxcO/zafHw8fDvNXQzMTKinZ2ZF9cYl1PTENMQEVHPkE/Qjw6ND5BPT01PTY+MzMzMjQxQTE3QEJOPkdAQ05DQT1DPTs4NkNCNUJJQjo4Nzg7NUI+NzlWS0RXT0Y4PTRLQEM+NEVKSE4+QUE2QkI/QlNFNThQMTQ1Ozw4O0Q+OUxqal07V1JkS2daVU83OUdFP0NGXGhGX2lnW11ck4yMiHuHi4aDjHWGkIqBbn57gX5xfoF6lHqSlJSYkZOVqLTHycDCzMLDuce8uq+rubuXsra6ssCvpcCjq7C8vKquq6Oinqesr7WxqZugqpyinJafsLSnjKO6urXBu6uonLKkpKiUhI6pxMSkgouOhoiEhpWUjHqDjJGPkaGMjJSRj4iXoJiTmZSWpaCunIyqnI6Wj5KRlZWNkJSRj6GThpefoLKflJuUoKGZpKCaoJuglJiep6Smp6SvraW/w8KuqLe1ycO+ts6yxL7Du7PRycfBtXd7b15bXmxUTklETUtLSkBBPUJEPDVBRDs6Mz04QjMzMjI2M0EwNUlFTT5JQEhSQEg+Q0A7Pj1GQTVBVUA7OTk4PDdFPjg+VkpDV09HOD80TEBCOzVKS0NMP0I/PEJGPUFITDkrRzwzNjc0NjRBPzdPYU9hRS89PjZrbGpgQDpIPj9FQmdcTWVcZlRjapqNloqLiJKPhol5hpOQgXKAe4x/d4eCgo95jaGWqJqamLu+ycjKwtLJysLNvcGzrby/p7q/vbzEuK3BqayzvL2qsKqkpaOsrrSutrWgn66fpqKZo7S9qZyovMGjtravq5OwrKqsloaaqqelkYKMkqSViYB1iZF5hY2RkJ6fko+Ui4+MlKOZl5uUk6KeqZ+RpZqMj4+QlZaIfI6VkpKjmpWgopy1ppCgl6Wko6WfnqaYnpWXnKWjqKiisqyou8DEr6Wzt8zAuq7Ds7u9wbmtwsLCv5lwe2NbWV5dTU1OS0dEQ0hCQUFESzo0REg6OzQ8N0YuMTIzNTJCMjZTSE48SkJKUUVLQ0RFOkVMQjw3RVY9Oz04OT88ST86RVVJQVdRRjdBOks6Qjc5Sk1CSUBDPjxERzxCQ089MjBIMzY2MTcwPUI6PWpqSks1UVMzU3BwZE47RD1ARj5sSV9YYVpkZViej52Ol46ekomKf4ifkoR4hX+Ufn+QiImQgJahmq6no5jDvsnEyMbTzc7Ny7zCt7C6vbS9y7vDwba3vK20wLm8rq+ooamotq6uqbK3mp6soqiinau3t6qlr77Esb25s6eqtLOtrZaVpa2ooJGOkrHFp5WNfZGVfYeRmI+qmZeTk46TlZOlnZOdmZOgoqGcmJ+Yi4yPkJ6IWpCWl5KWpJlmmaOes6WWopasraynnJ+nl5iWmJaho6imn7Wrqbq7w7SmtLXLwbiqtqyzu7iuqLi6vLeEb3BcWlZXUEdMVE5LP0FIRERIRkY4NUZNOz43PkFLLjMyMDI1QjU1UFdOPExGS1JMT0dHST5JUT86OElTOzs/Nzk+RExCQEhTS0BXUEY6QT9HNkE3O0hNQ0U7Qz00RkU6QkFCRzkvOkEzNjAzPkdEOTQ9dGRNRztFKzpmfGhWPD5AQkZCc0ZpSVJmZE1GppSclqGXqJaMkIOHpZKIgYeCm4ODlZCQlI6aop+vvq6hx77GxcjHzs7P0sq+u7axu7u8v8+1xL23ubezsrazuLOsp5yrq7mrqaivr5ejrqWopKW1wbCrrbS+wrnAubOnuLS3sq+VpK2wr6WLk5SgjXPBmX2XmYSOlpmLsZWamZWSkpmZpaOVn5uWmqicm6GgmYqMj5adYEqWnJqVmaWXVJawn6+cn6WVr6+tppuhppSTmZmOnZ+moZm0qaqzvLy7q7Cyx8C4pqyrrbGxo6GysrSlc3FnXlxQU01GUVFQUTtIS0hGR0FDPTlLVD9BOj1FTS83NTM0OkIzNE5XTjxKS09VTlFKUEhISk9CPD5NUjs+PTg6PENSPkRIUklCV05JQENBRjM+NThKS0NBPUM7NUVBOkE/PkhANSpCNTIsPmNdZzozNXRkZUBSNyYjM31oWDw6QkNAPVJFV1N0YlZGSKuXmZ+hqK6YkJeHiqeWjYiShZ+HhJyXjp6gmqOktcm0qce8w8TJy8nIzM7Gvrqzr7q4wMHNtci6wbm1urKvr7O0p6ScqrS1q6qnrayZpK6mpamsusCoq7e3vsHAvreyssOwt72so661rbqmiJuXpZp1vp+EmJ2Okpiai66WoZybl5San6CpnqegmZqqmaGnnpeQjZGdg211k6KalZyin5CtsqKrlamqmKqvpqWhpaqTkpmciZWcop6WsKepqrq3vrOyrr65tqCjp6ilppycrampjWZoY2BTTU1HSU9KVUw9TUVNSUpAQ0Q8UVU8QUFCRE8xOD03Nz9CNzVVWE4/SE5RWFJQUVRKUUpKRUFFTVE/Pz04PTtHUjxFRFFCR1lNS0FIREU6OjM5S0lCPkNDOjlDPjxAPjs7RzctMj4tMYJoTnpcLzBraGA8PUJCODZ6Zlc8Oj0uLlNhTVZIfmVeSEaslJyhn7uumJSei5Oqm5GRk4iqjIahnoyjrJSjpLbHvbTCu8PCyMnFws7Iwr25sq+5tcDDyrbGscG8tbusqa2ssKOjmaq0u6aqp6yqnaivqKSrq768qK28tLe+xry2tbjAsL2/s6m1t6y/pY+il5Chn7yeiZqgmZednY+3n6mcpaOanKGap6SzoZudpZynqZ2YlI+Um4uWiYykopSco5+gtbClppOxq5qrrZ+fpaSqkpaVoISQnp+clqmkoaG0tbq2rai1srKenKKmmpeVmauhnnhjX2FfTElGSE5RSU5FRkdCUUpIQERHQVZTREg8QUdRMTtCNzpCRjc5XVlLQUxQVFVTTVdSTlVKREBKSk5POUM/NT08TlFDPz9QP0VaTUpBS0RHQDUzPUlHPz1FQTk3QTs8QDw8M0A8Lyc7KkiRQjpTSjAsW29XNzE8Kh1CgGRUNDktMTpoXUZEQ5xwYkdFqJeknp/DrJuXpJeZqJuVmpqOqpaVqKaVrayZoqu3xcK8v7fBwsDIxL/Nxru+ubKwubS+w8i1v7C8trq3p6Srq62hoZurqsSipaispp6rr6yiqqi+uKatvrC3t8a3tLi4vrG+wLa0srWvvqOWo5WTmpOtn5ChoaSio56QvqSpnamsnZ2hm6afvaKYo56iqaugnZWNlZ6TnoeOhI2TnqSgnbasppyWsqaZsKignKufoY2alZ+EjqGanJKlpJqYq7G1saqlqq2sm5igoZKOkJapn5RpZVxiXlBKSEtPTEhFRElAPU9IQDtGSUhbUk9LPUhOVTRCRjg+SEc1Q2JbS0NOUlVXVlFYVFJVSEA4UVFQTTpHQDRDSFFTSUM7Qz5HVktDQE8+SzwwNjtHRj47RkE1Nj85Oj85OzE1RDAtLTBNdlw0S1o1LE1uVzwtPSkeI3piUTVDS1E5b1JGPEt4ZmNYTqObo5uexaugnqudnK2fkaKelqSfpqqrl7axo6mztsXCvcC2wMK8ycK/ysi2uLW0sbS0t8LGt76xuLS6tqCnrKqrnp6fpaTBpaGqraCkqa2woqeovbWlsbu3trXDsrK3ur6yw8C4uK20tLWjnaSUkZOgrJ+YoZ2oqKqimsKsqJ2srZubnpimoL2hnaSYq6uspqGZjZqfkp6Ijlh/lp+moaC5qqeUmLajnrOioZyxmKCPmpWego+gl5aOoqOVkKWus6upoqKlpJWVnJmLj5KTpJ+JY2dcZWFNSktLT0ZFQUdLPj1JQTk5SkpOXVFRST1MVlw4Rkk9RE1JOEhjXEtDTFBTWVlWV09aXklBPVdRSUs/SEA1SE1YU0hBOkBBRFBIPz5RPks3MDk5RkU7OEc/LjY+Nzg+NzcvMT85MSUxUVVtW0pPMTA9Z1dEMTc9LSt3YVM2U1prV3NIRTY9dWVcTFCfoKCYnsOnpKKzoJyyp5Kqo5+jnq2prJ27samstbHIw8HDs8LDvsfEvcTKvbCxtq6xtbDAxbW6sbC6tq2aqbCpqZuepqGnwq2crbGcqqKusaqkqL23pra7va+3w62zs8K/ssazurertLatqqKmlZWUoquhn5+Zp6uvr6+7sqWfqamZmZeToqS4oKGjkq6vq6SlnpGhnpSdjpCNlJ2ao5+otaenjZi0nKOvm6CcsJGhlJiVm4CSopaPjqCgk4umrLClp6KdoJ6SkpqUhYuSjZyfgGRoXWhmS0pMS1NBQ0BJRzs7Rj44OU5NVV9SU0o+T15dPUhQQk1MSThOZF1MRUxSVFlbU1VPXGJIQT9aUUFIQUtCN0ZFTEtOPjtCSEROQj07TkBBMy85N0NCOTdGOys2PDQ2PDM1LS80QDErJ1Z0U2VPPzEwNGJbTTIzPjA8d11eP1tVX2dyQDg8SJZ3ZUE0n6Sfm6DCp6OpsaCjtKmVsaumoqSyrK2pu7KtsLW0xr/ExLa/xL7KxbbAycK1rLWpsLmswMS0t6+ttrqlmauyrKqYoaeYrbu0nKiwm62frrWyp6q7s6e5s7iyuMCqt7LDvbTFp76urbe1qaesoZaWkaWkoaGXl6Sut62xtLafn6mkmZOUk6Ogt6OkpZWusbGlqaWhnpuZmpWXqKCfmaKfr7OjpoyXr5qlq5ebn6eTnY+VmZqGlqCVjJCdnpSLqamqoqehmp6WjI+ZkIGGlYiVn3plal1sa05RTk5UPUNBTkM7Okk/NzdRTl1fUlZRQVdgXEJKU0hWS0g6VGRdTkZPTltXW1JQUVhdR0FCW1BCRz5OQzlIR0hOUD8/Q0lCTEI8MklBOTQxNzdCPjs3RTcrNjkxNDgwMi0vLjw2LSNCcWdzazIzLzFcY1ozMzkwNnBbYkgwNUpxaVZDV0aMeWZDO6SknKGlv6aorq6gqbWqnbevq6OqtLaxsLi3sLe4t8S9w8e9vMPCx8G6wcbBuqq2pa27rcHDt7eqrbK8o5Wtsa2yl6aokaq5qqGnsJ2roK+0s6qqt7Wsu6yzsrm3rLiwwbq9v6bDqrC2rqmrq6admJiqoaGgkZegsK+zq7C5mZupn5mWkpemoLeppaKir7Gzq7Gnq6CcoJ+bnqWdoZidpLSwnJ+Qk6aaoamblqOhmJqLlpmUlpedlImSm5mUjqmpp6CjnJmbk4ePmYt+jJeGj5tsaW1ibm5YUVFaVEFDRFVAOztIQDc6WFBkXlBXV0RZXl5OTFNOX0xKPlpkXk5JUU5bVVlQS1NXWkk/RFhQREY+Tj89SUdHUVBCPUNGQk0/OjJEPzc3NTQ3Pz05NUU0Kzc1LzI1MS4tLiwxPionKz1ccD0+MS4xZVtkQDE3NDdnWWFGKEA4bH1oXFY6iXtjQz2on5yhqbygqq+qo7G3qaW0squhrbW9r7O4vLu9t7bAwr/JxLnEw8DAucW9wbivtqirt7K8v7+0qq6yuJ+XrK2orpioqY6nu5+lrbOeq6KxsLOsqraztbytsLG1rLC1ssC6xbarvK+xt6ytqqOxpZ6kqJ6jlo+Yn7Kqs6mqs5mdp5ualI2gpqS0rqehrKytsaezq7Gpo5ueqKSelaGZnKi2qZiakpGemZ6hn5KtoJqah5eZjJ2anZSLj5eXmpenpqOgnpeWlpSBkJWFe4+Tg4yXZ21yaHFzYEdZZlZEQ01YRFo5SEI1Pl1RaFxOWl1HW15dT01TWGRKS0NcY2BQTE1OWFdYUEpWVldMPUVVSkVEQU0/QUZISFFQQTtGREZLPTg3Qj02ODcxOT48NjVEMCs4MC8wNS8qLC8tKj0sKyUyKyo1SzEuJ19fYVYxNTE9YFZfOClDM1lVXGdLNYx6ZkxApZmfpKu2o6uopa6ttamus7imp7C3xrawt7/Bwra0usW+zMW5w8G6wLrEuMG6s7Wsqrq4u7q+tauvsbeZmKirq6ycrquPq76eq6+xo6qfsa2zrq62sbi2qq2usae1sLO6vMmyqrW1sbSwrqags6CaqKygpJWVmpmxoq2gpa+WoqSamZKMoqWnsqmhprGsqrWkrrC0r6OZna2nm5eempmsuKKXk5GPmJyhmZiVrqGfloKVmY6enJqXkYuUk56ZpaOjoZmXk5KWe4yRhXuNi4OMk2xueW92fWJGYGpaSUhaWz17SkdFNkFiVWlbTVxhSlxcWlJTU2JhTEtFYGFgUE1JUFdWVU9HV1ZVTjpJVklIP0NLP0VESEhRTkE/SEhIRTw3PT46NzU2MDk/ODY2QiwtOCwvMDQsKCwvLSo3NikoOS4kOks1LiJUYFZhLjUoQ15RXC4rQS9KR1BbRzNjWVRMRZqWn7CosamspKOurbWot7O3o6y0t8m6tLu7wL60s7fDwMzHu8S9t7/AwLjAvbK9rqi6ubi3wresrrK6lpenr6yopLOplK+7pKyysqano7K0sbKxtbC3sqmuq7KmuK+1s8TFtqm1tauwrqmnoraen6awoKOUm5mUsJ6nm5+pjaminZuVl6WlpLenorCzq6exp62vtaykmaCsqJycnZyUqrmclY+PjJido5iRmKikoJiFk5eRnZyYl5aIl4+Xm6idpaGSlpKQlneEkYZ8hoKEjY1ucXh2fIBcTGVsXEpPZF0/YntHSThHZ1dmW0xeYkxZWVdVWFVpXU9QSGFeX1BKSFFWVVJLSFdVVk04TVpORUBGSz9IQkNLU00/P0xPSEA7Oj47NjswNDE8PTQ1OD8pMDcpMS4yKSksLC0rLTkkMDQyJTlCNy4jQU5IZzI3J0ZhTFYlLUIuPUVMUTwzcmtMRUSRmaStpKytqqajsLKyqrewtZ+rtbnJuK7BvMO3s7G1wsPPxMDCvrW+wcC7v7y0xKiqubG2t8C8r6y0tJ6hp7GupaaxpZ6ytayqsrGrqKi1uqy1srWrs6yqq6isqbmtsrDHv7ilubCpra2mp62wpaSjrqOom52bmq+ZoqKio5Csn6Ogn6GppqW4pKu0tKSqq6isrrauop2jqKucoJmbkqS1mo+JjoiRo6GWj5afopaVhpCVlJ6bmZaVh5iSlZmnnKCgjZOSjpF4fo6EfX19h4qKcnRzf35+XFNjbl5OWmddRkSWW0c6Tm1YYlpNYWJOVlZWV1VZaF5RU01jWltUS0dPVFNOR0lWU1xOO1BeSkJESEpBRT8/S1NPPjpOTUM8PD45OjU9KzMyPTYyNDk6KDQ1KS8sMSgpKywtKiY1Ki8mMCkzODoxJiozRGQ7NipIZEhKKzpJPzNDSVMsPo9sQEhJkJqoqaGpr6Sno7O0sLS0sLCgq629zLquwbzHsbSts8HD0cTGv8GyvsPCvL+4vcWorbestLi8wLGssq6ho6euqqilsaOqsKquq7Gurqyrs7unt7CyqbKpqqalo626rauwwrm0rLmpqaitqaexpamkoq6qqKGem6OslaWdmJ6Zq52hp6ihrKajray2sLGgqaKfqq2wq52ep6epmqOYmZCgqJiGg4+Li5+gkIyOl56SkYiIkpahnZaZloaXk5SXpZyenYySkI6Kf3+IhH13gIeFh3V0col3bF9ZYG5jUXNxXEs7hHxGP1d1WGBZT2NcTVVWVVdRXGJfU09PaFlXVktHTE5SSEVJVlJdYzxQXUQ8RkhIQkc/PUpQTDo+T0o9OT89Mzk3OyozNT4xMDQ4NSg1LyosLjMwOyksLCclMjM0JCwyLTg2MCkoMTxeSzAuSmdERjg8QjA1RUtYMUCUXUBORpWWrKegqbGbqKiwtay4ta2ppKuqvcm8sb64w6+wrLPDxM7Ow7/AtMDExLrBtcnErK+3rrO6wL60rq6spqiqsammqbKmtK2qr62tsa6yrbS7pbizrKytp6ugo56wt6yqrbm2pLW1pKqnrKyqraCopqexsaSmpaGhq5aqoZOboKWeo6Oqo6yinqaxtqysoqWjmqmrramdoaWkpJmgmZaPmJ2TgYKQiYWdoI2LkI2bkJKNhY6ZpZuTkZuMk5KSlKOanJqLj4uMfIeBgoJ7dYGEgX51d4ujh3hqXmBuZldmh2ROQGeSTEVieldiWFJlVU1WVlVUT1xdYVZMT2pXVlZJSkhJT0JHSVNRWW9BTVhAOkpHRkVHPj5FUUg4Q0tFODdDNzI7OjoqNDk/Li80NjMpNCsqLCsuIzQuLSsmKCs3OSomNis8LTIsJjA2WFouMEpnQUE8PEMrOkpPXjREh0JJSUSWkK6koamvmKmorbWqtbCqpKuqqbzAwLm5tLy1prKvw8nL0b/Bu7nAwMK6wbrCxK6xtbK0vMG+s7Gvraysp7eqpa2wq7iuqLCvrrGrtaq2tae1t6yspKmqnKSes7OpqKSztJ+1raGqqKuoq6efq6uoubapqqqpoamfrZuRqqGdoKOjpqKqnpymtK6npamipJekpqeqnKKko6CZmJ+Rjo+ZjX6HjIeFnp6JhYyLkI+SjoWIl6Oajo2bkZKQj5KfmJmXjYuEgHSHgX9+eHWDgHp4fn+InY9wcWZncXhcYXSIak9dmFZIbXlVZFZSYk9MVVVVUU9YW2JWSVFqVFZUR1BZVUk+SUhPUVB4TU5WPTxLRD9AQTxAQ1VDOUFLPTU7RTIzOzk3KjQ6PSstMzQxKjgqKisqLCkqKC8qJiklMzssJDIpMjAyMSUvMlJjMDJAZj1OWD9DLD9MVF8vSWs3UkY7lY2voKWprJmqo62usrSvqqSvqai7v7zBsrC5raK2r8jHyNHAv726vMO+u8TBwL+vsrOztr28wbKytKu0qaW2qaWts7K4r6KttbGvsbmrua6qrrerqp6qq6CjobWtqaGfrrKhtKqeqKero6qhoaytqL2uq66toaeon6yZj7ChmKKgqKeep5uYqbCpop+soqGSoaKjp5iaqaaYmJmdj4uHlYh8jYaEhaSWhoODjIeQkJKFh5WglomRnZGTkI2RnJWYj4uGhnh0gX99dHh6gHt0dHtqgoikdmleZWyBdWeIi3xSVnBeS3hzVGRTUV9NTVNaZk5NV1llWUdTalJRPkJOUWFROklITFNJcVFMUzs8ST87PD07QEBXPDw+SDczQ0IxNTo5My01OjopLTMxLS02KSgrLSw1MiMyKScsJS47LiYxLjAtMTQlLDBNaDozOF89YWQ/RjFDUFtbK0hQO1lDM4+OsKCkpaqipaOsprSzsaiksKequL/BvbGpuqqnrbDJxsjQw77Avbm/wL3JvMK4sbC1srq8ucCztbytuayjtaanrLG2uLKmp7m1rbS8r7ylra21q62cqa+kn6SsqqicnaqypLOomqqnqqSpnaKpp6m9q7Owrp2ppKCvnJqzopalm6Wkn6WamaiqpZ6aqaGbkZugpJ2Zl6mqkZmakpCLgo+FfY+DgIiej4eAfoyIkpCRhYKUmpOGk6KNlJGLkZuTloeKf4Byenl+fGh2fHt1cXF+aoZ6hYhkX2hjcoV7bWd5XV5WQld7bVRhUFJZS0xOcHRdSVpbaFlGVmdPQz5LTkRDQTlIR0tTP2phSVE4PUg8PDw+Ojw/VDY6P0M0NUg+Mjs1OTAyNzw1KC41Ly0xMSYvPktJMSUaOTAlLCwwOS8sLCs2JzE3Iy0vR2pJMTRYPWZiQUo3R1NgVSo9PEZcQCqOkrCZn5+ppKKhq6S2srGkqbCmrbnCvbewpLmsqaiwwsjJzMK3vb+1uMG6yLbDtbSztbK9ubq9tq65tr+torOmqquutLe0qZy5u6ixvrK6oK60tqmrnq2xo5ylqKmjnZuksKavoZ+qqaeiqpyjqKCtvKeusa6hqqKkrp6erKaYn5qhopufm5mjqqKamaOjlZaUn6GWnJamrIyfko+RjIKKgICPgXualIyJfX+Mh5GQjYqGkpeRh5SjipKRh5CZkJSBiH16bH12eXhienpycHFzeGqCdWuCZ2NnYW5zjm1iam9fcEFdeWtWXk5RUUtJTVNZVk1cXmxXRVhhT15QSE1ERjs3SEVLTzxyaEpLOUFFOzs9PTs7PUo0OUI8MztHPDQ/MTgtNzg7MigwOS8sNS4uPS0qTD4qHTQ5JicuMzQuMCsvNCYsOiQ0MEFoWjEzUz1lX0RMNktWZE4pPTNSXT4jkZarmJ+Xp6Khn6ikt6+toq+vqKy4w7q0rqC5r6uns7rHyse/uMK9r7S/t8S2w7KwurGywLa7vbequri+qqS1p6iqr624sKiYuLyjrb60tKGtt7Wmpqiws6CepaWnoaSZnqynqJ6gqq+noKaXoqifsLifo7GvoauhrKScp6aompubn6KVnJuanammlpueqJGYkpmdk5mWoaqRm4qOkId9h3+Cjnx8oYyMiXqEjYWLjo2FiZOajomVn4mQlYKMl42RfIV8dHB8cXN0YHh4am9xcXBrf3NkemxoZWRhZoeAYFtyanJNToBpWFpNUUxLSFBSUEdNW19vVEVZWlJnT0hLRUY1NkhCTEk1WmVKQDZFQjk6Pj0+OjpDNTk+OjNARjwyQDIzLzo7ODMmMjwwLDg1QiopLUMqLDQ7Tk5AOzczLS4rLTcqKjwlNTM9ZmQyNE0/ZV1GTz1SWmdIKj8wXVs1KJWbpZiclayfnqGkobersKO0s6mpusW3s66huK2tq6+1xcfAt7/CubC1vbe/u76wrL6ws7+yvMK4qru6uKeotainq6+rsq+kmLu2pKu6ta+esbivqaWnr7KcoaSgpKOglpuvpqGfoqivoaCik6Okorawoaaxq5+so66YnaqlqJ+Ymp2jk5qbmp2lqpqbm6WVlJeVnI6Tl6KpopGKi5CGeoN+hIt5j5eKjYd6goiEiY2PhY+TmIyOlpmLj5Z+hpeMj3qBe3Bydm5vc194d2VsbGxqaoVvZnJpa2ZoXmRzgWBba3ZpWkp/XlxYT09LSEhSVUczOV1ebFBFWVVZZU1JSUVFMDdGP0tCNklKSDs2Rjk0OT49PDk4QDg7ODo3QEk+ODw0LTM8PDc1KDU+MSw7QTEoKzY8IjhSPSoxMTM+RDUsLSc0Mio7KzEzOWNtNzRHQWZbSFREVV1oRC48MmRXLDKUoaGXlJuqnKOhoqG3qq2gu7elrL3FtLGvo7WvrKyutMPDvLO/urexs7m4uri6r67As7O4r7/At629urWmorKpp6mxqq2xoJm/taSntLWonrK8qailqbCsmaKnnKSllJegsqSZnqOoqZyin5KkoKS4qaSnrqaepaGok6CpoqGhmZudn5GZm5afoaqbmpiglJGUlpmNlJOkqKSQiYqPhnmEe4SGfZ2NiYqHeoGEh4iKkoWWk5OLkJaUjo2Ue4OYj4t3fnxsdHJsbHNhd3VoaGpnZ3CHaGhpY2ZqamBrY2poW2Z7Y2BTdFRcW1JMSkZJT1NAISpoXmlMRFdVXmBLSUhFQy46QjxGPDZLUEQ4OkQzNTc9PTg5NT86OzQ+OEBLPT45Myk4Pjw6OSo2QDMuRTQoKyw/MC1OPy4rLTcsMTE5NSwmLjUtODA1NzZgdEEzQ0RnW0tXR1VgaEIzNzlnUCcynqKkkY6kppqdnp2jtK2nqrq2p6zEwbiwrKO2rqetrrbAv7yywrawrrK2tbi2tq2qvbOusrG8v7evvLuxpZ+2qqWls6eprZ2cwKunpa+zqqy1u56oqquxpZieqp2mpJGYpayimJ6kqaGcopyWn52ntaawqq6hoZ2eoZWgpp+hoJqbmZuSmJ2TpZ2soZeWnZSTjZWXi4+Ym6mfkoiKi4h4hXaBgoGdh4qCin1/hYiHhpGElpSQjo+RkZGMk3uDlY+Gc35+Znlva2prZnVza2NnZGR2gWJlZmZmampja3JbX1lebWRhTmlYWmBWSkdIS01SWD45X2xoSENVVF1bSUlHRUEuPD85QTg5UkZANzpCMDM3PTc2OTI6PDk3OjlETT1CPDAqPEA7QT0tNUIzNz0rKywwQipKSy4vKiszNzIyKDU3JCs3LjcyNjg1XXlOMj5IaVpMWUpWYmZAOjNCaEglNZqjoI+MraGXl6CWpLOxorK9tqGxxry6sbGjt6yqram4vLu6rcCyrq6utq6yuLOpq7mxr66ztrq2r7i9rKaetamfn6+jqa6cob+gsKOusa+3rrWera+trqKZnaeppZ+Vmqeln5mkoqidmp+alJyerK+muqiuoqGam56ZnqSapJ2Xnpebk5ifkqiVqqeak5qakoyVmY6UlJqppo6NiomOe4FzgYGKmIWHfImJhYWKjImShJSbk5KPkJGXjpB/gI2Og2+Bf2Z5bWhraWZxcmtcaGNjdIFiZmdqbmxna2pobl1sbHNwYFRjaWNmWUlGTE1PWFFRVWFlgFVBV1NZVEZIRkVALzw9Nz82PEZOYTg6PzI0OUAzNzgyOD83PTg+RkpARDkyLT1BPUE9MDVAOUAxLSsuMzw7SzYvLissLTI0OzYjMyopNi41NTQ2NVp8XTE5S2pbTVtLWGRkQEExSmZDJjSRoZuNj7CdmZOhmqmxr5+5v7WgtMK7vbqxprevp62kt7e2t627rqyqq7aps7euprK1sq6psLa2sLO2uqapn7WonJ2ooKismqe9mKykrq+2taytn7GtsKmim5yjq6iclJynpJ2aqaKklpqfm5CbpKqrqryfp6SgmJqZnaGPa6KWmZxwgpWao391kamnnpSUnpCImJqAloqhkHmHlIyDbWl+doNxbIaLhn2FjIdwXmNhZ4SYhWuLjpSSdHeLhH6DkIBnh4BndWhlV1xoc21OUGpjZ3OFaF9lZm5tal5fYYqPg4RlTktEOUdUaF5KR1FQVFVMSFJgb3RlRltRVVBGSEVDPjE7PTY9NjwzZlw1Ojw3NTtENDg2MDpCNz86PkZMQ0IzNDM9QUBAPTI4QEU9MSwrMDg9RzcwMS4qLiovNTY4LCMxJzIxNDoxNzVYgWwxNk9rW05cS1tmYj5HMVFkPSoui6SZhpWwm5uToJuqraqjvcWvqbfCt729raa3sKWqorazsbKxuayppqy0pa+0oqm3traop6y2sq60rbOhqZ+zqp6go5ulpperuZSlpa+zt62upamuq6yloZ6coaemm5egpaWbm6emnZOen5iQnqippLawpKOinZaYl5ejiKGOkpqGoIeTnKB/pX+lqp6SkpqRiIRzeI2OhYihdoiMaZeIZn1zeKBviIeDfo58f6GgoJmAfIeedIeOdZuKbIeBg21pZWN6bHJhU4VtYmxpmHFYaXFwiFheaVtsbFuIcm56coVnhoRaX0dOP0dfTUVSVlZRUVNXVGddTVZIUlJPRkdHPjw0OT05PDc7MDw8Nzk5OjY9RjU4NjA8Qjs8OT1GUUc9LjU8O0A9QD41OUdBODIpLjE8STkvMDEuKi8oLTQ1ODMlJjIxMTU+MTw4WIN1MjVSa1tOXExcZ189SzFXYTcvKIqnl4Ocq5yYmJ2fqamnqr/Dr7G6vLbAv6qlt6+prKSytK6us7aqqKWwraW0sputtba1pqeosrCssqetnaqgsaefoqKZoKGarLOUo6Wltr2mraerqqyopqGgmKCmo5mZpaOkmJykqZaUopyTk6OlpqG3pKSgo5iVk5eSnIivkJeUiamLlqGchbGAo6ydk5mdlHmC1KiAh5XBm8d5eLGlt5dkgMCcv3mEhHmRhHyQkJHKcpe8nMV6crWmu5B7gG2WsauweWhsWLGubmVpvZK8bmd6b3KP2H5Ta2O2sn+BcpRzmqGqkFdPV2JPVk5GVVtYUVBSjFxXW1BBXERRTkVHSTw8NTc9Ozo5Oi49Ozg3ODs5PkY2Ojc0PkA+Njk/RVJJOi41PjpCPD9BODpKPjUyKjIyQkUvLjMyLisvKC0vMTg2LSAvNDE2QTE9OleDdzIxVGtcT1tNXmdcPkwxW100MSGMp5OBp6qfl5yepayyqLDCvrK1v7W2vsGrp7OsrKmmrrOprrazp6emtKWnt62cs7K2q6Wkp7GtrLCmqp2mo7CioZ+dlpqenK2rk52in7S6o6qpoq2upaGdmpqip5+Xm6egn5iep6eRnKaak52hpqKhsaOfn6OWlpKXkpmFr2tqio2qfmaDlYatZHCdnZSZppRxrqGkfni7fWuhj3axX2q0W6WAZZyRYGaCe2Z/anhrqWW+cmemjHWxanyxeHSSlGNubaduW4ShRWhmh5ZFdZxgfmd8pKeCWl+Mq2iAlXh5aqc3Sq9cWFNsZFtLTlhfXFdWO06JT1dXL0lUU0pDRkY9PzQ2Pzs4OjkwPTg5OTk6PTxEODs6Nj1BQDY8QEhRRzkwNzxBQz5ARDhARz0xMy0zM0UzLi41My8rLyguMC46NS8nJDIwM0IvPTtVgnYyLVZqXE9ZTF9nWTpNNV9ZMzAbkKKVg62npZ6jpKqxt6y1vb+wtsSyt7rBpqmwqq6oqK+uorC6r6OkrbKjqLinnrOzsKOloKmsr6uvpqeeo6Gvm6KalpWWmZqrpZWaoZ+0s6KrnKOtraCempagoqicmJ2jn5uZoaakj5yimZegn6qepqagmp+hlpWRlpCahbWbtXiFqZm1mXaGs5u3fpOWlqmUfmuCpnuChoiSlJJ3q2drsVyreo2GlHSJco+GgH+IkJd4goKLmIuDoI+EsHZ3n3FsbGx8i06kWEhiYpl+Y2imYHlydVOTh15QqW1jcX6HgGKcLlGhb1tTa2hgTEtbZFhcWkI+sXlXWEEjTWhGQ0VBQEExOT44ODo4NDs6OTw5OkE6RTo6OzY6Q0I4PT9LTkc6NTpBRkJAQUQ8RkQ7MDIwMTtGLDAuODQwLC4oLzMsPjgzMR8vMi1EMTw8U31uMytYalxPWE1fZ1g3SjlhVTUwG5WglYizpqahr6mns6ypu7bCsLvBrbi3v6msra2tpq2xqaCuu6qgp7Sso6u0pKays6ejop6nqrGnsKelnp+frpWemZSVlZedq6CZmaSota+iqY+pqKqbnZWXoKWomp6cop6bn6Olo5WbnpeZnKKpm6aZnJuioJeTkZOTnIPVk5m5cLDBfsWGfNaUm7t8mpWlj42djaR7joekgqWCeqx5j51Wr3qIfp9quVq5doaDfaaCk3yYeqp4jZ2PerFujoR0kbyFb5RQr6fFilGgemNgqWJzcohtl4hgU7W0yIaAiXxjpDNCnXZdUGppY1BAWGdaZGFKSE1uTlxRT1lmWUNEP0U/MD08NTk7NzQ8PDg9OjxDOkY6Oj82OkBDOzZAT0xIPDo7REhDQkNEPEVGODEyMTFEQy4vMDQ4MystKS4zMjM5NzEjJTUqPjM9PVF3ajYqWWlbS11PX2ZUN0c6YVA3MSWbopSZsqioprSqpbSppLy3wbC5v7G1tLqytKexr6KwsqafrbWnmqe5raKvsJ+ztLChpJ6fpqmwqLSoo5udnaqVmJaVlpSWoKicmZaorbCpo56PraKolp2Xm6CloZihoaGhmqGip5ueoJ6UmJqmoJunlZubn6GYkJKUkJ2Ism5otXGrh26OpnK0c3K2e5qXpIuPnY2if5GhpX6wdoOR0tJ2XK57hX+kb5uqpmuGhHytfZeZjnuwcpKdjnizZZd0hJ5vnmaUUciLWsJcn3liX61gdnOHYpeIXlnKnW+/gXVNS7VTVcZkVFFqY2VYQU9rYGxoUFZHSTk9VVJaV1hJQz9KPDI/OzU9PDQ2Pjs3Pjw9QztHOTtANzs+RDsuQ1JKRz4/PElKRkNFRD5ISTkxNzQ2QT4vLjI0MjUyLSkuMjYsNzQyJh82MDs1Oj1QcWg5J1dpXEJPVF9lUDVHPWFMNjIwop2TpbCso6u8raa0pqe2u7yyur62trS5uLKltLOgsbGinquvpJemua2ksbCbtLiqoKWdoamksaesqaOZnJmnnZWTl5eRkaGmn5WSpauwpqKWk62gpZKUoJukpp+VmqWmoZqjn62ZoJ6ekJWboZ2cpZWdlZqin5WYlZGbhax7d6h2o42IhqlvrYqCp4OYmKGJkpqLon+TmomuhX+Cs1xys1KufYKCpH9x1314hX6OnYWamnavhomRnId3tGGaZZqCgpVtklqwWEuadZh5ZmCtXnZ3iGiYiGxdr3eVno94bDV5yK6yX0JUb15nYEVQbGBwbVZWTS5mZGlTWVA7QURATDo1PzkxPTwxNj85OEA9OkM6Rzs8Pzo+PkU5LUVVSkVAQzpNS0pCSEc+R0s5Njw0Njo+LzA0MzMzLjIuLjE4Ki4zMiUhMDM3Njc9UGtlPiZWZ1xAPlZfY042R0NgSDo5OaCelaC5sJe0wq2os6ipsrq3s7e+ubextLq0pLeyn7Osn56oq5+Up7WrqK+xqq20pJupoJ+nobWmpqmimJ2UpKCTkpuYkZShpJqSkKatr6aglZmpoKKPkaGZqKSglZmlqJ2cpJ6tnaGdoI2TnpqdoZiZm5aXoqCUl5CmnYapfX2leKGOjYKqcK2LgaeGlp+hiZeXiKOCkYiUqnyAi514b7FaqIKCiKB5dNh/dodzqIGOm42SpHyWkJ+Ee7JenWSgfoOVbZJcq1tak4CRf2hnqmRye4FrmIdzXqtaiaCOa29lT0pDoVxbTHRdYmdOW2FfcnNfS1Y3SpuUWEdFPUdGQU0zNUE4Ljs+MDVBNzhAPDY9PEY/Ojw2Pz1CNy5IVkpFQUg2S0lOQElLQEVOOjpANS47PjEwMjE0NCsqMDUvNywmMjEoJCQ2NjcxPFBlZUEmVWZbPzJVX2JMN0ZJX0MyPziinpqawKuYtMKuq62ppbSwt7C1vrm5sbC1uqi6tJ+vpJ2kp6eek6mwqa+ptauqrqGYoJ+mpKO5oqOroJabkKGflJOemZOXnp+PjIuosLCnnZebqKafjJKkl6iqp5SXqaeenqCiraShnqKMlKGYn6CSnpeclZ6hlZaOq5yPrm1ytHOpi3WKp3O0eHOzgJGko5Kcjomkh5B3uG+Me4uiamu2WqGFZZeXaaGip22TcrR0k5h/smqFkoitanWzYZ1mom+Hk2uXXK1fTaF8h5FSc6NseX9+b5iHcl2vVjycd2ZUb24uXKdPY1NrZWJtWmNdYXB7Y1RaUj4+bW8zQ0JAP006ITdANi47QDM3QzU4Pz8zOzxDREJKRk1JRjYySlRLRUJJNklKUD9ITkNGUD08RTUwOzswMTAvNzUsKyw0MjYvIzAwLCwdMjg5LzlOYGVEJ1VkWT4vVV5hTDVGTV44MUM4ppybn7yhm7LArq2rrKe3qbevtb+0u6+ut7aqwLWoqaCapaOhnJGqqae1orKnrqmgl5unn6SruJ2irJqVmY6jopWMnKCbmJyfkZOUqrawqJmUm6yql4yUpZilrKKRlqqyo5+epquxmaGjj5iilp+blpyWoZOdqZyUkKuZh9SSmrtzsMOAw4Z+1ZabuHiIkJiMl4uMp4h6pLZ1fXd2woKasmCDunnAfHW4Y7WCjIepfJWBrKlxe390vIinoGmdYaaOr6F+jHSHqn2+b3O8dLKDdXiBim6aiHJujaR0vV53fVphebxrWlZcanleamFlZ2NteG9aXFlDQUBzQENGKzVHIic7PzEwPD83OkI5OT1DNDxATlpeYGBfX19aUFBSS0VGSjRITFJASk5FRk9CPEU4ND05MDIwLjg3LSouLzE4MCItMSwzHiw8OjA4TFhhRidUY1g8L1ReYEs1O0xbLTdBOaebnqK9oZeyw7Ctqqussae3r7bEsLiwrbmurcCwq6OhnqOhnJuQqaOqsqS0paylnpWZqpimrLicoq2XlJ+PpJ+SjJyinZedmpGVkq+5sqyWmKSop5SQlqScpK2ekaCoq5+bn6ijs5+jpY6nopSimpyYlaOYkK+gkpSpnoSQmLZ/j5GMt5V4gpOatXdta25zb3mQhY+KdJ/Bu72ae4GxqHGAc5G5g3yGhoyHjXyKh4yXfKS7ub2cdXq0o3R3l3Z0sHWZnmaGao21dHJxd7aMXn96fYlog3luemOLrHB1hX9YW6dqRWVaVGZgY15jUWdncGx1Q05QTUQ6Wk0/SjM7MCA4PjsuMz1BOTk/PTs8QzZCU1laWltbWlteYGJgXVNHR0g0RElUQUtOR0VPRj9HPDc/NzA3MC85Oi4sLy0qOC8lJjIoNCQoPjcvN0xUX0cnU2JXOCpPXl09KzpWVSc+OzynnqCiv6WWtMO0rKuorKupuq6wxa2zsq21prO4q6mhoaWeoJ2Zk6ukrKmltaenn5uVoKOdq6S9pqGplpObkKGakY+hp6GTnJeTl5SxtbetmZ6kpKKLkpKmm6Wqm5WppKWcmqGopaekqaGRrZ+WpJ6Xl5edno+vqJSbpqGNan1pm6Z4h3J9mY50eWSHe72+wLpvk4NylohgcmpaXpuJYGOIj5VrYICVY22dd2KVbICalZRlXmBjcZqKaXKLfYaVZ2t/cnV4fX5iW3d0gWhQXG6DfXuLa1hreoJzSkpvhnBOdE1FWF1nYUxbWGdjX09bbXVpcVJRREVNO0dJPU0/MiwyQT84LzU/Qzw5O0A7PUM+UlZWV1laW1xcXWBhYWFgXFVHNURGVUVKT0hGUElJSDs4PTUxOi4wOzouMC03Nj01JiIvKjIsJTs4LTdKUl9JJ1NgVjQpUF9MKDM+W08nPzI+qaCoosKjm7W6tqOspa6np7WxrMirr7Kqs6K9sLGmn6KnnaObmZmrpq6jpLSopJuXlKCbpq2ovaeopJSTmpWfmZKXpKiokJ2RkJicsLK/rJynnqeiiZORqZqoo5uaq6CjmZujp6yjoKujmrCblaeglpSdn52XsKWYoaeZm5CcnKKjmKWhmZuZmZmPlYFnbX1xd5KYlJKFi7WqjYaYlY6KjJiWh5SVioSTlJGJjpOUmJSYlpqgoZqclKGdjoJ6pYVta32RfIB1ioqBcYJ4eXZ2ioB8imtzgXSDdWV3fXdrb3ptYGNdcGhNWVpmamBXWm95bW1mVFBGUzlPWk1RTygrOktCNjM1PUBBOTpDPjxFTlNTVFZXWFlaXF1gYmJhX15eW1RLQ1NHS05ER1BMT0k8OjszODksMjs4MjApNklSTzgiKSsvMiM0Oyo3Rk9bSiZSXlMxMFReOis9OFxKLDwtQLOgs6LAoaSysragqaWyp6WwtKrIqqyvpLSlwKazoJ2kpJyjlZWfqqasoqO2q5+YlpWflq2ppcCeq6OUkZuXnZeSk6GenqKnkpKZqKeyxLCbq52rn5CWlqedqpucn6yYoZucoqSvp6KlqJ+umJennZmZoJ6dnK+gnKGmlZeSl5OfoJWinZegjpaTioqNjpeukHyWnIOSgouqqYWAmZeJhJCeiHqEkIeGmpKIhoqWj5uXjZGYnaSWmpORnY1/jmehs6+FioR2e5KKfXd5em9meZCBgIlrdYF6iHNpc397doOHgmt1ZHlmYGpmY2Rma1lse29pa11TTFBEXlRFQD8+LDRARjs0NTs+QTs8Pz4+SE5OT1BTVVZWWFpcX2JjYV9dXl1eXVhWSktMQklPTVJKOzw6Nzg2LzI5NjQuKCYkLTEuLykrKjclKzwoNkNNTUQvVF1RMDVNWzE3RTRbRzU8LEC0oLmvv6yrrrKxoKqmsq2irLOvxK+pqqKxrbyis5ufpqKhnJiXp6WppaSlsrWdlJOdmZmvpa2+oKuikJGdmZiUkJShnJeonISeqqujtMi0oKqkq5eWl5mlnamanqOrlJ6fnqCpr6qmpKuirpufoKCYpJ6cn5yvo5iep5KXlpyRo5iXp5yal2WCknxlfo2akGN5jm1oa3uSpKpqZZuYfWeGimVlaWh7jqGPa2eNmJGjd2tqi5mjn5hzbG56hI6IelhmXoaDXm2LiYF2XGhzd3aSgIiCbniCeIBzbXmEdHaJiI+DfGuHWV5sdGRec4lpa3xxa2RfUk5YSWRYQUo0Pkc3P0ZENzE8PT9BRDs7REdISElMTlBSUlRXW15gYWFgXV1dXV5fXVpVT0RIT0tTTj0+PT02NTM1NTU0KiYmJSwqJS8qKyc2KiQ7Jy9BSltKLzdaTzYpRVkvRE8yWUM7Py49pZ+6vLqvrLSxqqWora6wpq2tsLywqKajra6wnqyWn6OdoZmZpqqcrKOlp6iyrZ6Uo4+ir6W2uaWuoo6OmqGZk5KaoJmZpJV7pa2iqLTEuKWip6+fnZSdoZ6jm6KpqJKfoZ6gqbCrq6SroKqcp5+noKyWoZulsKSXm6mVoJ2akaOWnamXnX29g4hytHKEnYataHi5xLhxk6KjeqaZmXKrgnzLwMC7cYyjiIKffZeZiZ3AvYKXnZ6NncLBfIJ8k42aw8B9bKWyb4yBb8p6f5t3kYOOgXZ5gYB5cXp/h3B3hYyTeW54lGNnYHhkYGWCY150Z2xkZFlMVklRWkhPRDJJRT9EQj4vPD8+QEE6OERDQkNFSElLTU5QU1ZZXl9fYV9eXl5eX19fXlxTTVBHVU5BPz89NjQ2ODI3NiomJSMpKiYuKyopMTAfOSojPklbTCojQlAuI0ZbM1BZL1ZBQjsvOJajucO1sLDAqaiUo6+osK6tprKzrqmkpaavq5+qmJqin5yaqqeinauipKikpLSjnKKSpq2rt7OnrqKRkZmcpZKRn6GXm5+diKaspKytwMCxoamvqZeRnpyimaGjqqOToaKdnayuqq2npKSnoaalnayokaOaqK2pmpyom6uglZWklaCilpx+zpR4eqSBeZWWm1+uj16Op4GioHynlptzq4OAr15jjKp7qIeFoHWYk4izY4KrhqGOjbNqhK91fZeIt2GDrVqjzW6Qdnvae3+ZcH6HknZ+ZXuIdnZrfIdufYaRkX5tg5Bhcm1waGBgeWRccWhqZGdgUlRTV11LT0M1QUhERDg+NjtAP0E7PThAPj4/QkRERklKTE5QUk9TXF5fX15dXV9gYF9fXVpXT1VKPT8+PDU1NzgxNjQoJyQhJywmJi8oJiszHTYwJDc7U0wrLC1LMCc7XDtMLSFQQEY0LjGtwsC/tbSwuJedkaOqp62zq6ayq6uqo6qmr6mfppuZpJecoq+foJ+op6KloJ+wrJqdlaeurLCqqKuflJGan6SSj56kl52no5+tpauwqMDHs6ipsa6WkpyaoZefqamflaGfnZysrqisqpyoqKSiq5KsspaloqqqnaKlpKCun5GYppmfmZOTkJegcYWMl3WFqIZxsX2ecqx+op+BpY+edquCfa1/nHKtfquHhp92mZJ7fJd+qoiijJKMnX6re4mUkJ+Ae61XncV7j3CTwX2BlW11b4xtZXZlhm9hd25yb4mKko+DbpORZnB1dXFhZ21lX29paW5nZFhTXWFZUlNDOUlJQEQ8PjxARkRDRUE9PDw8PkBAQUJFRkdFQENJU1dZWlxdXl5cXl9hX15eXVtaUkM+OzkxNDc4NDUyJiMfHCAxJyAxJyAnNB41LSY3PVdKLTwnPjEpM1dARiEcRzpDMS4rsNPGxrK0oJ2jjqOioqyvtq6osaaoqqatq6umoaOdmaGVn6Wrn6Gln6ioop6dsKyXmpaop66rp6annpeUmaOhkZSgrJqdpqOvrKSstaq6zrKtpq6sl5SbnKKZnq6snJegmp6fqLGqq6ubraulo6uarrGhqKuupZikqaior6GRlaKjmZORhKRqpHWJeql0erJwgqaKmYxxiaCbh6RgYFKrhX+ug5t2rYGnhoWfepmXhntmgKOJpJmGgqN9qX6CloeuX3ypVp6jkoF6o5+Ae8OvxYtyr7OzuXJiqa/CdGiMjJiOgm6clXFvenh5cG1nZWVycGZ8aWNdV2BqWFlVTExRTENDQUI7Q0BAQkk8PTo5Ojw9Pj4/QT04NjtETFBSVFZYW15eXVxeYWFgX15dXF1bU0lCNjc5OTY2NCwmJCIgKCciKy0iJC4hMy0mQERXSCxHKzU2KjFQS0wjIEE5RDQsJ8LJ1dS/oZmrp6Cvop6wtLCuqayip6aoqquppKWfm6SenaWnp6Ocq5qirKGjn6+hnJqSq6O1r66gp5qdlZOmopCaoqefn6WcsaWkqLGtt8iytaqsqZaSnJuimZ+ls52aoZSdn6asraSwm62qo6OqobOtoaqzsaGaqKetrrShkZSippeakXypbJ6Eh3WreXywb4KljImflpaglYHSuLS4yYGBsl9glKmDpImHoHqYlpp4qsl0mqSVqKmRk5qNgZyKmsbGeWehgqV0gZ+Ogn2vXXC0YrB1S6OHbadHgpNkj5CekXxxmZWBcXx1fnxuXGZqc3FmgWteYVlkbVxfWUlNTEtFREFCPkE8Qj9KOzc5Nzk5Ojs7OzMuNjxBRklMTU9RU1daW1tbXV5fXl9fXlxcXFxcWE1CNzU2ODUvKSglJiUkJiksNEVOUFBNRktKVkYqTDAvPS01T1RRHRw7PEYyLCSnpMDGuK2osq2spaKcsrisqqGlmqikqquqpp+mpZiqo5+uq52loKyanqmlnKe2nqKXk6iqtbKsm6WcoJSPpayRmZyno5+pp66hpaepsLXDsrOqraiTipecpZuho6+ll6GVmZylpq2csZ6uqKafrKO3rKGyuK+dmq6msbKxo5OWpqKZno6CnU54moF/n3qEo32DpIWHpp+dn5SEuHt7ebmCf8zGwrZ4m6GQi59+mpaXinaemIqlmKSpf7CFnYaghKx9mpVjpm2kcI+FkIF9loJyrGCjc3GAmmC8fVJVdI6So5Z7fpSTjHZ7c4aAcVxubnhyaoFvW2RfaW5iZF5MTFFUQUlIRkk6OUs+QjEwODg2Njg3Ny0qNT09P0JER0lMTlBUVlhZWltcX19eXV9fXVpaWlhVU09IQDg4Mi4sKi4rKicnP1FUVldXV1lYWFdVT1VGPEUzOlBbVBwbNj9ILC0gi4eZqaukq7mqrp+boayys6WeoJWlra2uqqecpqaao6ehs66iqaayoJippJSjtqKilZehqbS4o5uhnKKSj6GxmZ6bpqWgoa+unKWoorayxbGtqa2pkYeQnKicoqScpZeemJqapqSrm7CirqSmmK+ku6yhtratnZy0sbevsaWXnK6go5yFj9G1w7d5h46FkZOQgKZ5lKF3jKCShKWBinGqhoW0bnJqmaOclYqefJiZhoePc6+CppyjjqaLk52LlpCbbnGyXaV0k3qcbJl/e5l8balho3Fxf59ic7K4aHePlKaYfY2OlY55fnmQg25qeWl6c2+AdV5lZW9tZmdgSltYWDxISEBVNEBGPjwqKDYzLjAxMykmNDo7PD0+QENFSUtOUFJUVldXWV1fX15eX19dW1taWFVSUlFGOjIyMy8vKysoQFFSVFVUU1RWV1dYWFdVVVZUUU9RW1UlITJBSCQpJZJzjIqtvr+8urSelqekrbWhopmUoqimrqurmKain6agoLano6insKOUrKOOpK2inZCamqqzs6ScpJyokZSXrp+fnqainKedtZqiqqS2rMSwqaupoYyEjpyioKailZmanZmbmaalqJmtqK6jpZutpr2slL2vrJ+hr7K4qbKlmqiwoqeXeaiRfXywd4qApKWInG2ycKGHrXyhj4OnlZiArImFroWflKqgoZeGn4CZlYB7kn6rgJ2bloureJ2hkoqUkoF6r16kgX2mp2SdgH2Xc2qvXaVrcIWZXWBbjKBtlZGmmYOWjpmOfHyEmYBrbn9jf3RugHpgZ2ZxbmhnaENZYVs+S1UzVThCQkM3JCQzKycnMywgLzY2NzQzNTlAQ0ZJS01OUVJTU1ZaXV9hYGFhYV5dW1pYU1BPTkk3MDQyLiosQVRWVlZUVFVUVVVUVFVUU1RWV1dYVlVVUUhGSUojKCi9k5qDqMXCtsCznpqsoK24paOOm6Sin7Cwqp+kn52tmZ65oKOroK+pma6hkKuoo5aJmpCusKymnqWbrJeXj6yhoJ2moZqkna6Yoaint6nBr6WppJ6LgI6bmp+mnpKUmZuUm5qmpaabqqyspKWfqai+pJbCrKqioKuyuKmspZ6yraeol3WvfpCLnIWHfrqtipllsI1lla19oI+DppWagayKhLCFppqkoaGQhKBcbGqBs2B/rXt7g4GxbWdvmZmMiLFbfrVcpIRryKJkn4B7vFh2tVmyfVKugHqsWIChbZiQqJuMmJKamnx6kZ9/ZXV+Y4Z4dIF8YWpncG1nZWZPVWRcQVVfPkkoPjk9NCEiLCUfMi4gKjEvMDQ1Nzk5PEFDRkhKTE5QUVJUV1peYF9gYWFeX1xbWFVQTkpGQzU1My4vQFVZWFdYV1dYV1dYV1ZXV1dXWFdXWFlaWltcWFdXR0I70p+ysbe9urPBsqKcrKaktaigipqgnpyzs6mfo6CetZmgtKiqrJ6vrZ2sm5Wvp6GOiJuOr6uopqGlma6SmI+omaGdpZ+ao6OlmaCiqrOpvbClqJ6cjn2Lm5ahoJiPkZqckpqYqaCimqmuqKamoqWpu56gxqakqKCqtLSrraWeuqyrq5SAqZKjr46bgIekl5mQgoC4w7qDjpyShKeXnIKsioKviKecm6aqkH7VvcKqYqO/vX1+o4KD17q4tYWVk4Oevb6EbaOCb6uEbJx/erKwx4Npq7C9rHh3or68c4CWjqadkZuSmqB7g5Oce2R+e2WPZ3mCe2FsZWtqY1BiW1NqXD9UYUNOKT06NC8fHyQfJTIgHSQoMDQ5NjY3Nzs+QUNGR0lLTU5OUVRXXWFcX19hXmBbXFlUUU1IQz89QT81PVNZWVhZWVpZWlpZWFdXWFlaWllZWFlbW11dXFpWWFRXWryVs7Owv7ixvLKinK6mpLKmnYuYpcCquLKoob+mp7KcnrGcuqifra+lp5SUsKuXjIObka6loqygo5yqoJeLo5KmnaecmqGpo5mfoaytqrquqKOalpJ8iJmRppuSj5GYmY+YlKmboZmqqaGrp6CjqrueqMSin62iqbOzqa6on7mmra2Zc3aqpbiGZImgcGiukYqQbm53pJCZn4F1rpiUcI+LcZWoo5uXrqRybGxsZot4b26CmXGBempxaWeKl5aYcWlphYhncYZkXYhiam9ZXGZ9dqZfYXGOkW5lZH+Nk4+hmJmZk5qifomRlnZniHhpj2t5gHllbWNmbGJLZVhKbFo6UGVFUidLOisjHCAbIywpGBsYLTIuNTo0NTc6PD9BQkRFSEtMTU9RU1ZcV1pcYGBhXV1bVFBMSEQ9OkFCN01YWlpZWVpZWFhZWFdXVldZXF5eXVxcXF1eXV5dW1tVV16plKyzqbm4srOqqaGunaOyqZeSv7PFyr+3q57ArK2koqesn7qjpK6rraaOl66pj4uFlZatnqaqoJ2ko6CRi6SSppipmpejqqGWnaamp6+6rKyam5KRe4SWjaWYjZGRmZWOmJaplqCYqaObsaadoqu5n6/Bp6OypauvsKmsqqa1oqy2lYqhqKa3nYmWo5mHqpuRlZ2SqbKZmqOqoLKWoqGdn6KcoaWhlaunjZKSjIeTnJ2VkZmTmZGPloaBpZuYlo6LlJSMkIaEfWeJfnSCdXOHinCnbHqUkZOSgYGNj5CPnZWil5qapYSJl49zapF3cYx4d316am1kY29kVWFZQGpcSGNhT1krRj0rJyE3NTAuHxwhJTIoKjY5OTQ2OTs+P0FCREVKS0tNUFBRWFVWWV5gYWNdXlRRSkVEPjk9QEFTWFtcWVdYWFhYWFlYWFpaXFxeX19gXl5eX19gYGBfWVlgppaoqqS0tq6uobCjrZ+gtbGQjqzIvsa8uqujpZ6cp5+xqaO2p52ptKaokZisoouHiY+cp5WspJ+Yp56ekpSjlqeZqJqUpqGkkJuomaG1uqirmZqPjHyBlIuhlIqVkZaRkJSYppCgm6qfnLajnaart6euwK2itqWur6+rqKixt6Ctu5iRpaSmtqKSnqegjqqgjpKfo6uvmqCjr6ivmKOgnKOqnp6enJarnZOZoZuUkJarmo6ZmZeRlp+SiaGelpWFko2RjpWLgH1mi4V1hnV4h4JznGqFj5STkIl9i5WSkpiUo5OfmaSFipqJfHOXc3uMgHN8f2pvZF5wamBbYFpuZFBgZVBaOkdHRT4yPT45LyomKykmHSY0MTY2Njg6PT0/QUFDSUpHSktMTVNTU1VaYGBpYWVWUEpBQ0I6OUVNVlteXltaXFtbW1xdXV5fXV5fX2FhYmFhYWBiYmJkYlxbY5eVo6eir7GrrqOppqyfp7WqkI+dpbW9sK6toqOaep6jsqSlsamXm7mmo5OZqpyOhoqJnKKPrp6ilaifoJKWmZutiqmWj6iZqY2ZqY+eubakpZmcjIh5gpSMm5OKlZKUkY2Sl6ONn5+pnp+4o3+Dr7Wir650o7yisZ93eJ+osLmUdayjnomAq39kXGJ2oI+ln4SXfW2Ss5yjp62qomWen5JzeZqXcICYqJhtf6KoimWcpp2SmJiWjZKckoaem5CWhJKHj4+SiYV3ao6GdoZwe4V/f2Boh4qUkotadZSQZ2iQj3N7qJycZnubiYR5mWqFjIRveoBrcmVfdnFsa2hcZmZiYnBTWz5OTk5TRz5AVUQ6MS8eHyY0OjMwNjY3ODw7PkBBQUZIQkdGSUtNU1RVWV1gaGZoWFBKPERHPDhVUltgYWJgXl9fYGFhX1xdX19gYWFiY2RhYmFhZWRjaGReXWablaajoK6wrKuppaitoqetpJKWq7axs6ebq6esl3OMnbCgqKunlJe5oKCPnKSdkX+JiJuejKyaopWnoZ2OlpKehHWtj4inm6mRl6SJnLqzqKCZmIuJdXeTjZaTipSRkZSNkJShj5yhp5mcspWAjJu1nbOMko66pqB+p6J6oa21gI6NpZ6Di4aQsaqvjIqXpJt6gIushpudoaeop4eVhZh3pZt6h5yBl6eCgnucsnqKhqGYmpWYloORl5eFm5lieoeQhY+QkouDbXCOh3mAcH+AhH6Fc4WElZF4lmiSdKCadX2ZhaOgiZh/lIyFhZprj46GbHh7cXFnZHdvamxrXGVramZ0XF5JVExSQEU2LlpVVTcpITA5Pj43NDM1Njg7Oj0+PkBEST9JRUpMR1NYW1lcYmFoZlpRSDlETDs+YVZeYmRmZGBhYWBiYl9dYGFhYmJiY2ZnY2JhYGVkY2djYWFonJein6asrauorKCnr6amqaWZlK/Iv7Gil6iptp6QhJ2snKeioI6Qvp6ajJ+aoJB8ho+Zl4esnKGWn6CRjJOJhoCRp42Ho52klJiehp66sqiempKOhXF2kImVkIqUkI+bjJCSn5KXoaWWnquHn7SJtJqtisqHqayItoWNsIGvrIKojKaYjZ19qI9ye3ecj6eXaJWkebSMn56mp5KYwoF/q4iYoXKegJqlfZeFlbKBoX2hlKGQmZeBj5Sci5mSi32Fk4eOlpKJg21yj4V+eXGGgIN7g3SEgJaAj8Vmf6mHj6NrnoWknYWagY6Ph4uacY+UhWh4dXx4aGh2cGhobF5kcGxnbllnR11STTNFNDdOYmQ3JjM8RUdEOjY0NjU4Ozg+PT0/Qk0/TklKTENQWl1cV2FeaWxcUUU9S01ASmNYXWNmaGdiYmJiY2NgX2JhYmNjY2VpaWNiYmJlY2FmY2JiaZSWop+vp6iopaufo7ewqaummpSgo6SrpJemq7ijr4ChqJ2mnp2JlL2Zk42hkp6PeYSWlpGHq5mbnJmhhI6Ld5ucj5+QiJ6knJaamIejua6lmpyMjH5ibY+Lk5CNkI2NmIyRkqCPlKGhmaGnfqGnh62doJatj52cnJCFgKCMqa2Fo42pmYyaf6J1gJmUa4Ktdk2reIeNnJGaqKaAqat9g6F7eqdqnn+Sa2eXhpe3iZ5+bmBkWYOXgI17ZGiLcpl9eZZsXX2XbV9ScINcX2t4gl9YZIF8g3+WcKeqa4OjbnKlcJ+FoGpnoG1bb4x9Z1pghIBiWFBvd2ZtdHJram9danBsbGpZaU9dWUY5QTVIRF9sNSxJRFJNTj04NDg1OTs2QDs7PkJPPlFSTE1CSlxdX1ddXmJ1YE1EOk1PTlRiXFxmZmlpYmJkYmRkYmFiYGJkY2FjaWtkYmRkZ2RiZ2VhY2iXlZ2guKCpo6askaC2u6quopmYoaKlra6hnq+1o6iSoaCgp5yajpm0mZCLn4yVi3WBlJKMiqaVlZmenn6ShYWspIebkIqZqZmam5KIprGnopaaiImAaW6Ih4uOjoqLjZKMkZOjjZSfoJyhpH+TgY+ioZSgdpyVj6eCoKZ/haerg6V4iXyEmn6icHOUiJZ8n415bYabjJmPm6iZjoede4Kic3amZp5+d6RfmHp9k3Sibpi3tLp0k4iDgLWoZIHGuHtwlbaMcoCao2JzrKtgfGmds35tfIaBjYKLmHF/o2xyo3SfhYGkYZ2Zs5ZyfZifs3VzW56yg2pib3R2cWlvWGtscnNnXWleYkxFPUQ2UUJaczM9U0dgSlI9PDM5NTo5NkQ7O0BKUD9VTU9RQEVfX1taWGBgfGRIQzhNV1VXYmFaZWZra2JiZWFkY2BhYmBkZF9gY2tuY2NkZGhkYmdmY2hok5WUo7eYqpuTn42ktrStraCaop2ko6aunZyyrqyTmKKaoaSZm5Wfq5uLiJJ4i4VxgJaOipChj5KUnZh9kImNqKCHl46JkqSUnJuNi6mopZ6Ql4eFfmp7h359kI2Di5GRiZCUoYOXnqCdoJ6LiXecmKKNn3Ghioeph5uljpSmqX2tjH56oJl6o5N4gXSWiI2cfZafhpuOmJulhaJkoXyIlpCbjW2eaJuOb5qZeoCLp31yaXSrg5+DdKpolZpdm4V2hZ5nqmuAuGZcqHCBnGCVjF6ndnWHiH6eaJp1hpOSl46An2+akW6nml2pf3m7a36qXI6EXbRnXG5yenhraVxxanh5ZGBmWGJCUUZPN1dDUm81TFtbX05aREEyNTE8OzZIPzpDSFU+WVJZXT5EYl5WYFFhY31qRUI5TlteWWRmWGZnbm1iYmVfYWFfX2BgZWNeYmRvcWBkZWVrZWNpaGdraZWbiam0mqeIY5Sbq7mxsKyeppycqaCfr5yesamtnpekm6GgmZeXoKOZhomNaoiAcnuXiIyWloSRlZiQeoqElaOcipSPhoyfkp2diZCpo6CajJKKgYBpgYZ5f5eMe4mOjoiQl5t/lKOfoKGTmHJon4mfj4xwkoyBqYeYnqGlnqZ7sK2joriXd6Ozo6SAiJR5nXurmX6ijpyaloiXcaF8hY2vtX1rmpGheX6YtaKkq6iEmXybfZ6bf3SqWl1ve5aLeJ5iTH97eoVjeZdCTJ9Yompxe45sgIiEmXWbeIaJsbN/gJuTp3eDnm5zfZVwmnRrpF2VdkhlZGB0cX5+b2ZgbGl2fGVlYVFfV11UV0BaRlFoRVRXXWJYXklEPUI4P0I6SUY4TEVYQVdSW1ZERmJcWmBLYG1+ckVCPFVfYlplaVZnaG1vYmZnXmFhXF1eYGhiX2Vjdm1dZWdma2RmbGloa2mTnICwrZmEU16gprO5srKpmqKMnKycnKqUoqyko6iPoJ6dm5qWmaGdloiHiXeGgW95lYWRm4t8kZOWiHKAiJKhnHORkIGJmpWhm4WPqZyblYuLi3yDbISFcYKhjHiGjYiIk5mWfJOkoJ6iiK2GfbWEjp6de6WWeqmBlZuPiZ+bfKdod21+mXShc3J8nYaZcJODrn2kg6WdmYCjb16pZ3WiY2+lYZzTkH17mXhzc2KihpB+o3SkkHZrj7OMYIKYiXOqsqi8f3eDbX6/pqm0XZtufHCWbX9yonJdpGdzpmBopm2b1Jp+hptwenuYbJx8eJdzbqmkZ2BlenGAhWxoZmRudXhoYGNTXGZRUWJIWUpVYVdUXGZrXGVRRkNLTUpLQktFOE9AUU5YU1lPU1FgZmZqUmN3eXdJRkVjXWVaaGpUaWhqb2NqZ2BjYFxdXV9oYmFpZXxkXmRnZGtkam1naGxol5p/r6pUXEt+qa+xs6+yo5uZhZmpoKGkjqapoZmqi5uZmZSZk5KhmI6HhXtwfYRofY+DlJqAd5GOj4lvf4aPk5Jsl5N8iZKTpZeDj6ublJOLhol5g3aHgG6Cn4Z3gJKGiJmjmHuUo6SZn4mzoaK2i3qsp6SupXCpgJqOhYCakHukgKGZhphynoSkrq+Kl4yAjaSNlYOtoJN2tba1yaFzlIuBn2Cel6lteZaHoJt0ooh3oH6Tl4uBcE1mo5Jwm4dzpHt5dGGDgWt+oGtxZF+ccX1zlmh5abO1tMamc5h9ep1rnJurdoWbbXZ4mGqae3WYclFFfbNfanZreohma2hjdXVxbldfVFlpUFNoSVdNWVRWXmlsb1ZoV05LQUpNS0hKT0FRS1BlY2ptZXRyc395fG51iXt7VFFPbF5pXGtpUmpoaWxobGZjZV9cXV1eaWJkaWt7X11kaGNqZm9tZWlsZaGbiK6lg2Q/k6Gyqq6vtaKikICXqqKjpYylp56dpoObmJeOl5CPnJOOiIN6anmHZYONf5igeXWPiYyBaYSFkoOMhZ2NeY2LlqaThJmqmI2Si4GJeoB9i3lwkKGGeYCVh4mWoJZ/lKWonJWVg2ZueJxsomR7caV3m5hwZ6aAlYp6pHqfloOXc553gYqVl4+5bpGKomJ9maCViG5yaaprdaBtb6Zgm2mLkGmWh5uWdaKBfppgjIaNdXCIYmigZZ5+aZt1b2NmiIFtcaJaXltioW1diItuen1zcmSlbXiiZGenaJlzjJlwom9ViZBvoF9mqFSLXlSYbm1za3KCbXBpbHl0a3BSWVdXZlpUbUlZT11JWGlpc2tZbFdRUkZWXExYU2FVaWtfd3R7fXB8fHKDe4Bzdo2AhHZeUnJiZ2NwZ1BqaGhrbG5oZGdfXV5dYGpiaml2dV1cY2hjampzbWZrbWOco5eleWRzbYumraOpsLGmn4uAmKudn6aMo6Kbo6KBlpmUjpqQi5iQjop7h3GAiGmLi3yYm3N1iX6Qe2SDh5WKipWZgnyIh5eokYGjrZGGkIuCin6AgI5zaZCmhH2Gk42ImaCPiJOppp2IpniVm36kiJaLsZidkIKvl5+ldpSGeKlzpY+Emm6kooyShI2Du259pa+DhoWGk5Wcn3ylenKolaCWZ55+b6xkloqWk3eobaqigYl2iYN3q5GmiGuRsGt2s4ypa4qFbW2fnpKVYH6ri6p2fn6LpZ52n3yDpJWdoGqbiHisaJ6tjLZ0d76NpJNag6eOq2F1cnRwfHVxY2t/b2ltU1dbVmFiXWtNXVJdSl5tb3dgW3FZXGBbZ3Rlbm9yY3J0YHd6fnlyeYNzhH+Be3uMgYKAdmJ4ZGNucmRSa2dob2xyamZpYWBeXGFrYm1sem9cXGJpYmxqeG1nbG5ilaSpnIF/naOWqamdqKaupJmKgpismp+lipumnamdhY2bkIeckYWSjYyNdId7iIRvjYV+mJN0dIZzkoJtf4uRh4aTjn17goaYpo5/p6ePgY6JhZV2goeSb2yLqYGDjJSOiZ2fiYyUqqKfj4B1lJeIfoF5lK6if4GbcY+Gd46Jgn17cqeMcn59epiWm4SQeXt/foeUlZOKdpCYnqCDe32Ja4yFW3l5cnpxaW5+kolxgHWBj5STcYeEgmWMf1+Bf4t3dHKUdW95bm2HbISFXnVnd45lgICFjaiafXR7lWqJiHCBdn2Hd25uaIxzenyYeIVcbFh5j2lveHJxb3h4cF1rh25qZ1ZbYFddZmtkVmNVX1FfcHl5bWt3Zmtra3d9cnJ1dGFvdmJ0e4J4dXqCdYCAgIF4i4WDfXtuf2xkeW5eV25naHVreGppamVcYFpjamVtcXRuW1tibGRsbHluaGxvYY2Tt6imiaCimqajmKScq6KhhISYrZKeoYmbp5upmIOCnIx/lpSHjoqJjXKDfI99fo+Fe5iPdHKEcZWFe32Si4aGj4R5foCHmqWOfKiijIaQkIWVg4aOmHdyhKmGjpKdkImfnoiMm6efn6qEiY6Vmn5+iZatp4+Rpo93b5uPgXiQbn6ohXF+lXFrcH2CoI2Ak46LaGxcgouLm5qejnOVi4hxdGuCd3SBWXJuh5GBfn+Mal1qZHuGhImAYGl4epp7goqBdYGFgWd3ioZqYXBxgXRecYqBiI6llIVli42DbneLhHGGj3pxaGhlfIR7lltca2hudlt8eXh1bnNzg2dcbYtra2JaWl9bWWxxXF9hWl9dZXR/fHZwdWRra2t8fXN8eXVkbnVobXx+d3p8e3l6gIB+b4aKhHt9dH55c39oVFxxaWx2cHVna2hkXWFYa2hra3FybldbZW5sZ3N6b2hqbWCLiqmwoY+ioZqenZeemKijon6Dma6OoJWInKKRpZV/fJiGfZKZiYmGh4pzfoGMdoWMgoSXinJvgHKYhoN+koOEhomAeoGEjJyhkYOnooh5jpeJlYuLnJeEg3qtgpGYmpWKnp2HiKGqn6Gio4uIk5uco5mVqqGnpp+SmoeVjHp2jY2Dp35/kpCTlJ2yppuVn5CNsZKXg6WMjJWan4mQm4KIkYprfI53eGWDh5GLfImehIeMkImIgYWEkHd8enSZoIiGiZ2JhJN+fYqAgHVvcoSCfneFhoqPpZCChYyGgoyQjH2IjIqRhHptg4V+eplrc2lhdIpxfnp3d293dIJdXm+HaG5fXlpdXVNoclZkXV1ibGh2fH10b3Bla2ppgH1ueYByanBxbGeBe3KCgHh/fX+Ee22CjIZ8enh7fXqDeE5jdmpzbnB6ZWtlY2JgW3RmcGdycW1VXWx0bWl5enFnaWtkjIecuZ6WoaCYlJiZlJikoJ58f5qsj5+OhqCdi56WfXmVhHyOmYqGg4SHbnmBgXOBiH6JlIRta356l4eEg5B/gIeEhXyHhY+cn5OIrKCEc4uQhpKRi52RfY17qoSOk5iWj5yWh4ebpZ+imp2FgpKampiPmaafpZ2cj5V/j4h1e4aNhKV7fI6QkYaZq6KelJ2QjqmNkICdjIiTmZ6Cj5d+h46Db3iGcnVgf4SQhnWNmYGDkIOHhX+FhJVueXZ0kqGKi4Wag4SMc3+Je3xycXqHgnp3iY2DkaaPhYOOgIOKiYp3homLjH5xbX+CfG9obG1oX3p/aH58dnV2dXt4XF9xfm50YGNbXV9SZ25UZVteYmtpdnp/cmxtZGtqaIF/bHSBbGx1b3pwhnluh4B2goB+hXZygo2Ifnt8fH97gopgaHtqdWlpgmRqY2BpXGN1aG9idW1sVWNxeWVwentzZWptbYuJnraZoKOfkpGVmIuanp+ee3ifp5Gci4ellYuYmXl6jYV8iZGEjIKCg258gHlzgYV+i5F9a2h9gpeJgYiOfH6GhIZ8j4KQnZ2TiamdgXGMi4yShqChioWMfKiRiJCSl5OWk3iNo5+gnZaZf4CQm5mSjJqioKOZl5CafYyDd3+Cjoagf36MjI98mKShopOakZCmjI+BmpGJkpebfpOSfoeOgXV0gnF3YX6AjoZyi5Z9iIxyjH+ChYaPaHhyeIuYkY9/ln2IinKBhnt8cHd6ioJ4eI+LgZSlkouFj3uFhoeEdoOEiYl8Z3N9gHl7cW1rZ19+c2h8dXZ0fHOAal5gdHZwd2RjWV9fUmtpVWVZYGFoanZ5gnFna2RsaGaAgGtufmhvcWx+eYd6bIyBc4GBfoF0doKNhn98e4CBfX+PaXKDbnRpYYdobGJfcVZ0b21tYHhobVdqdHZjdXp7cmJqb3qJjJ6xkaWknI6Pl4+GnKCbnX13paGOmICNo4uImpZ5e4aHfoOJf4mCgX9yf3t0doOFfoqReGdjfoaXioKKjHl9gI2DeZaClpmYjZehnH9wjIKRk4alm4eMiYOmlYWTi5aYk5J3kZ2goZeUlnl+jpiYjpaanKOdmJKUmniNhIJ3g5WNnX6BiY2Mc5ejn6KUmY+PooyKgpaXg5KWmX6YjXyIjYF2cX5ue2SAfIuFcYeTgJGCbIeDgYCJhWZ1b3uFkZeLfJJ3i4h7f4Z7enF9d4iDeIOPh4mXoZWBg4t2iISDgnd8g4qHeGB6eX50f3hnbWVhf2pqd3N0dn5xfGNjYHNudXJtYVphXltsZVJjWWFhaGt2eYZxY2tjbWZofINtaXVobnBpgH2CeW2QhnKAg4N+dHyDjIGAfnuCg358kG12iXN1bWWKbGpiYnZWhGlwbmB4Z2xianZwZnl8enFgcmyGhY+brZemp56NjJeHhp+Tl5l+eKqdi5l6l52LjJiQeXyBjH58hHyBg4F4dHl6dH2AhICJi4BkX32LlYd/hYZ1fX6Lf32YhpeVmI2kopmAc4d7k5GJpo+MjoqToJGDkpCVl5GLgY+Xn5qRkJBzf42SlImdnZ6ml5eMlJVyi4yJa4SXj5l6h4iPiW+XnZqklJWLjJ6MhoGRnH+SkpWGmYh7ioqBeXF6bHVsfH+Lfm6Gk4OVeHGChH5+i4Blcml7f5aXg36Nc4+HgniGfXV3f3yEf3uCi4OKk6OPeIOBdImHfYB0doKJhXBifHZ7cn1wYm9jZHxjbnB2c3h3c3RidmBvbHZub1xcX15eal5QXVljYWhudHuJbGBpZWtjaXeHbmdsaWttaIF9e3dvkIhzgISEfXSBhol7g316gYR9fY5yeot4eG1sh2poX2lyY4dncW9ld2dubGF5aWt9e3hwYXhti4CYmKmfpKidioqShoqdi5WYfnivmY2XfZ+UkZeTiHd+e4p9fIB3eICAcHV0fG+GfYGBin98YVx+j5GGgIODc3uAh3qPkomTkp2VppyWgn2BfY6KkaOIjoqNmJqNhpKZlJaOioiMkpySj4yMboSQj5GInpmioJaViZaQbYeYg2WFmI6TeomEkIpwlpqUo5OSiYuZjIF/kJ19ko6SjJmOe4qFh3NzdmxxbnV8inRuhpGPk3F1gXyBgYh8ZXBseXyZk3yDiHSQiYBzh3huf3yAhXuEi4eCi5SnjHqGe36KhXd+cXCBh4VmaXp1dnF8Yl9wYWt0X3Fqe3l5bHNwZXlebmxzbXJYW19gYWtbUFdYZWNncXF/iGddaWlnYmdxjW9kaWhlaWmBend1b46FdIGCg3t1goiFeIV8eISFen+Jd3+Le3tyeINqa19waHSAa3JvbXJnb2xlfGNugHp3cWx3d4p+opehp6Cmm4eLi4GPnIeTnXaCq5WTjoehjZaUj39zfHaFeHl/c3N7hmtzcHpui3aAgYhvcVtZfpGNh4B/f3Z1gICAoIeSi5SemqKVmHiKf4GNiJydio+GkpiWhYmVmpCXi4uNjYyciY2Qg22Ji5CRip2WoZuXlIWXh2mDooFlhJyJkH6Lg4uBd5OYkp+TkYmJlI1+fY6Xe5GMj46aknyKgIJvdnBsbW9we4ZpdIOPmYtxd4B1goiDeWZybnWAmY57h4N5k5B5dYdzb4d6hIp5ioWBh42aooZ7g3WCi393eW5sgYWDX3R1c3FxeVpfcWFwa15wan17cW1tam12YG9va3FtWVliYWJuWFFUWmZnY3VwhINjXWtuZGNma5JuYGdnX2hrgXVyc3CLgHV/g4B5doCLgHmFf3iIhneDhXyGi397dop/anFjfGOGfG5xbXRqaG9sdnhfcX95fHV1dICDfqSVmqyep5aFjYR/l5SDkKB2jKCUk4eLm42Wjot5cXh0gnByhXRxdohscG52bYh2g36Abm5VUYGrlYeDeH93coN6g6CCk4KVlJqdk5t4knuDjJKjmZOOiZWZkoSHl5mMlIuJj4+HnYSQinxzi4WKjoicmp+blZN/k31ohJuGZ4Wfh5GEkYKJcYORmJCcj4+MjI+Md3uRkHqOi4yRlox8iHyAa3dqbmtsbHt/Ynp+j5eBdnuBeIOMfXlnc2xzhpWLfoeFepOPcXmDb3aLeYiKeYh8gYqPnZ2Ee3p2got8d3FqbIKEe2F5cW5tcnRWX3BicmFgbW96cWhvZmZzdGlxa2J3ZV1XZmBgclNRT1xmZV15cIh9YFxpcmJiZWaRal9oZVtncH5wa3F0in12fIaAdXZ+jHl7hYF4iINzhoV+jIyEfHmVeGZya4NgiH5vb2t6YGpudH91X3R9eYZ4dHOFfXigj5mwm6WOgot/g5qIgIyfgIualI+FiJiOj4+EdnR3dIBxcIV0cHKEcGtpd26Dbn19bXVzUk2C38iS1pN7cHWEdoSgg5R3lpGZnZGZe5RzhZCeoZOTkImTnJSGf5eWiI2NiJGMh5t/joB3eo1+iYyKnJucmpSSeYx1ZoeQhWuHooSRiJeDhmOMkZmPlYuXjIyKinF6lIh7joiKkpGJeoZ8f218ZXNva2x6eluBeZCQgXp+f4CGjnt6aHJqc4qPiYGFhHyUimt9fm1/i32KhXyDeICOlJmZinx1d4OPeHJtZ3GAhW5rdXBoanVuU19vZXBaYGxyeGdramJmeHJwcWNfd2BgVmtfXnZQTkxhZ2NdenGJdV1cZXZhYmVljmRhZ2JZaXNzbmtxdox8dHqGgnV2fotzgIZ/e4l/comIgZGLiHx+mHZlc258ZYh+bnBsgFlsbnl5c2B2enuNdnJ3ind5noubrpqgkIKFd4iVfnyKnoiGoJKPhYyYhJOOh4F0eHB5cW+Eb21vf3NlZXlxfW16fWpoa2OkmsHcrvChc2x2hHaFo4aTcJeRlqGVnIGScoaLopeJjZWKkJ2Wg4GWkIWJj4CRiYmWfod6dX+JeIeEjpyamJiOj3aJdW2FiIl8iaKDkYmchIVei5OXi4+Jj4uLhIlte5aBfYiFiZGPhnaGfn5rfWR4dmpueXNYiXuSiIV6foGBhox/eWVyaX+JjYmCgX6LlYRrgXVth4+BjoN9gXh+j5SSmI90cneHjHVzcWd2eoRjdW5xY2p2aFJhcWdsVl9vdHphcmRgaX1wc29bY3JgYlZuWVx4Tk1MZGZiXndziW5cXGR5Xl9lZYVgY2NfWWpza25rc3eMfXR3hIF4d3uJcYOEfX6Ie3SLiYiWhox/fpdzZ3VyeWyMe250cYFXcXp2eXJld3mHjWl2gIlyf5yGmKabo5KEfXGMlHd5jJ6FhaGNj3yWjYCZiIR7c3dwdGpwgWxpbXx1X2F4d3xxdXxoYGR869q1ycPch3NsdIJ3i5uJj2qZkZCelpSBiXGFiJ+NhIuVioyYlHyNk4iDiY97j4qFj4F/dniDhHKIgpOclpSXhYx1hn5vg4GHhpihgpOMnoOJYYOUj4eKhoqOh4GHaXyTf32DhImOjYJyh39/cXdodnNqdHdsWo19k4OFfYCEgYSKgnZhcmuIgY6JgX5+kZB9bYFrd4SOhJCCe4B8fo+Rj5WIbnB5jIV0a3Fsc3mCYXVqb11sd2FSZXJpZlNgcHZ1YXBgXWiDcXNrV2doYmlYbVZbdUxLTGVnXmJzc4VqXFxleV5eZGd7YWRfXVlrb2ZvanR4in5zc4F+e3Z6iHOFg3x/h3Z3ioaPmYGMgnuTdWx3dnl4k3RueHt9WHmGcYBvZ3l3koNkdoaFcIqWhZmgmqKKh3Rvkoxxd4+cfouaiYl9oH+DmYCBeHJ0bm9kcn9pZm14eFxgeXt7cXGAamFnYX/Vto6RpnhucXd8cZORjYhrmo+JnZOMhntph4uZhoGSkYaHmI58jY2BgYqNfI+MfYmEenR6g3txhoCWmo6Tk4GIdYKFdIJ/iZGcnYaUj59+iGJ/k4eFiIWLjYCAg2d8kIB+f4KMj5B+bYN8g3VsbXd1dXh2bGOOgY+AhX59hn+EiX9wX3FvhHuOi4F7fpCIeXCDZXmBiYWKgXqEfH6SjY+Rg21ueYt+dW1ua2x7f2RpbGpZbndaU2pzaWJRY3J4bWNmXlpqg250YlxoX2RsX25VW3BPSE9nZVxnb3GAbVpcY3NgXGNsd2VlXV1aa2xjbWpzd4Z/cXB/fH10eIZ4hYJ8gId1eYmBkpV8iYZ2iIFweHl7hJNvbnuBd16DgHSCbWl6dJRzZ3OIfHGSkYOZnpughoh2dpR/bXeUmH+IkISLjpp8i5p3fnZxcGxqYXV8Z2JqdXpbYHh8em1xf2VjaGdXnY9fcXOWvMSEd3GUipCAdJiMh52UjYhza4iPlYB7lIuBhJuMfIqGfXyJjH+Th3SIhXZ2fYJxdYaBnpWGlI+CgnF+h3ODeoiWm5aGko2cgIhmfZOCgIaEiolygX1nfYt7eX9/h4uPfWmAfYR2ZnB5eHR4dGxrj4aLgot/eYOBhISAa15wd3p9i4eFe4COf35ygGh4gYaJhIJ3gnp/louOi3xta3qIfHZ0b2lofndlXXFjWHB0U1Rvc2liTmh1eWdhXl1Yb4BvdFllY11qbWBwT1lsUkRUaGJabG9te29ZW15tY1pjb3dkZ1xdYGtqY2xpc3eBg3Fufnt/dHWDeoSCfIKFdn6JgZaReIOKdIGIc3l5fo2Qb297gXFqgnl6fm5tfHaWa2p4hHRrk4yFnpigmYWIb36Mdmp5mY+AgoqClpiKeY6Wb3pzcWxqZGB0e2lgZnJ7W2FzfXpncHphZWSOsbJ3S2JapdrRl3J7koyReX+WjIWako2Gb2yFkpF5eZOGgISZinyHgHl4iYqElYBviodxdH17anmGg6WRhJOMgn9ufoJ1gneEmpeSipOPlIWHcHqShH6DhIqDb4F4aICFeHJ/f4OKh3xlfH6EdmNxc4BqenFvdZmNhoSLfHd5gIR6gmtcb3xyf4aDiH2Fh3qIcYBtcIKFjYKDcYN3f5eLjYN3bW1+g392emVoan5yYVp4Wllybk5YcnRmYEttd3ViXlxbWXV9cnBXZ15manFfb05XaVM/WWdfW3BrZ3lxW1tZa2VZY3B5X2hdXmVsaGZsaXF4f4dvbX99gXZwgnuAgX+Df3aBhYmXinGCjXF7hnx6eYSUjHVren9scH50f31vcnx7lHBvgH95ZpKKgqGYnZGDhmeHhHBnepeKfoCFgpmKgXyNjWl4cmxsZl9hb3ltX2JveVxkbIN6YXF2X2Rl1eu+izI6PouOgHJ5homPjXeFmY5/lI6Nf25thYyLdX2Pf4WClYl8g3hudoeFgpZ3boeEa3V7dGV5g4SnjIOPjIN9bX9zdYJ4hJqPi4+RkoyLh397kod4gIWNg2yAc2mAfnhtfHuBioN4YnmEgnJkcWl/bnZydYKcjIGAhn90dn6Ac4FvWmt9c3iIgYp7hn98iHd5cGuHgo6CiXGAd32UiYp9dG1qdoCAdXVcaWl5cVpXfVNacmZNW3NyZlxKcXhwXVtbWl11f3VpWWJbZ2VuYmlNV2ZRPV5mXV52Zl91cVtZVW9kWmRweVtoXmBnbWdqa2lweH2ObWqChIB5boF7fYF/gnp1goGMk4VwgItud32Ae3uIk4mAaXt+a3R8coZ7c3d9f4x6eIR+fGuMjISbnZaMgoFsjX5raH+Pjnx+f4OUgn99iohrdXFnaWNbY2dzb2BhbHRhaHCJemFzdF5iY5ugkG5cNVqvtXVqgIp+k4d3iJiHdZCMindwbYWChnR5iXiJfZOIen9zZ3WIfn2Xb3GFfWh2eW5leomFpYeAh42JfW19dH5/e4qXhoGSkJiJi4WKfI+Jcnx+hXxpfm1rgXt5anp2goeBcmB3gn5yZHJndoNudXyGlZKCfYKAcHd6fHV+bVhtfXVzin+GdoZ0gol6d3JtiH+Of4NxfXt8kYeIem1taG2CgXVuXWhmdHJSXHxOXHFdT1xzcGRWS3R5a1hZWVphcYF1YV1dYGZkaGhmTlpoTkFhZFxgdmFcdW1YWFN0YVtlb3JXal9iaGtnbWxpcHd8k2xphIp9fHB/fnuBf4J6d4CAiYuEcnuHb3F3hH97iY2PhGp+e254eXeKd314gIKHf4R+fnpthIyImKONhYR7dot6a22FiZJ5fXuCkoCAfYqEcHJwY2ZeWWdfcHBgYWhwZmpviXRhdG9bYGRqdnt/vpynpMm4coWEc5R9eYiUhHSSjodyc3CEeoJzdYZ0iHeUiXl5cWR3hnqAkmhxhHVmd3ZkanyEiJ6CgH+Ojn1xfnKDeH6QjoJ3lYyUkIiCiHqJiWx5en91aHppbH95c2l6doCDfWhgeIh9a2p0aHuBanaCjZGVf3x+fnF8dnx0fmJVdXtxcoiCgnuBcIaJd3hvb4KBi318d3x7dI2EgXVocGdsiIJycF1oY3RvTGZ2TF5vVlRadG5iUU90eWJSWFhdYXCCc1thXWhlZWNqZFFbcUlEZGJcZHFeXHhoVVdWd15cZm5oVmxeYWpnZW5uaHB3epNuaYiMeX1ze355goGCfHZ9g4iGg3B2g3Nud4KCfoiLlH9xgHx4enqBi3SDeH+BgYKEeoB1b32Ki5ueiH6Ge3eGe2d1h42Ren+AfImGhHaPgGdwbmBlXFhmWW1zYWFhcWxsaIluYHNpWF5jbYB3qdqpx4aIs3KKeXCOdn2IkIF7lIuAdXR1fnZ/b3B/bYV0lIZ4dWxgeYF5iI5lcYNvZ3VuW219gZCTgIF5kpJ9d3pshXR/j4qDcpWJkY+IhoZ7f4ZtdXZ/bWh3Zm18dm1qd3Z/f3xgYniGemh1dmN+fGh1h4+Oln11gHZygHp9bYBZVnJ9b3OChn5/d2uIhnN4anR/goJ8eXt3eXGKf3tyZ3NkbYuEbHNbal92Zklvb0xbY1hXVnltYlBTdXZZUVZYXmByhG9cYGNtZGNdb2NUXXJHQmZfXmZpXVp7Y1JWXHVbW2drYVZrYGBuZmZscWhwdniPdGuOjXZ/dnh9d4GDgXt0foOIiINvcX91cXV9hYGJjYt7d394hHx9hYd4h3x9gX2EgHt+cnZ4i46fjIl7ind1g3pefoeajXmHhHSGh4R3iXtibm1cYltbYVVqdGRgW2hvcGeHcWFxZldcY2t/fMrOh7qia25vi21yhHJ+hot/e5KFenl0enV0empsdmOEdpKCdm9nX3yBeYuIZXGAampxY1hte4aciYOCcpeTd317bYZvgImKhnCWjpCIhoyEe3l/cnJwfmdocmNueHFqbHF3fXx5XWV6gHhpdXlngndodYiMjpV9c4dqb36AeG59XVdwfW1zfol7gG1uin9wdmZ2fn9+gHV7cHhyhXt4cWVyYG2LgWtyWGtfeF1JcGxOV1ZfVFV8a2JPVHZyUVJUV15idIZpXWBramZiWW5hWGNwR0FoXWFmX1xWfF5PVmVxWVtqaF1YaGFfcmZqaHFncXN3h3lulYp1f3t3fnmDh4B1c3+FhY6DcHB7eHd1eYaFh4yGenx/dYt+fYaEhId/fn59hn98eHZ5dpKUn36NfYtudYB6ZISImIZ0kopvhYWCeoN1Y25qWV9bXV1VaHNlYFlkcnJngXJha2RXWl9pf3i+rnqfuG5idIdpdXxyeoSHe36NgHd4c3dvenZlam9hh3WOgXNqYl59d3iKgmVwfWhra1pWb3iLpIGFf3CZknF/d3SAbH+Aj4Zyk4eMiIWJhX15dXNvaXlham1hbXZqZ2treXd6d1tnfXx5ZnJ+boV0ZnaGjYaWgHCLZ2t7g3RsdWJbbnpqc3qKe4BldId8bXBndH12fH5wemp4eX94d29lbGFsiX1sblZqYXhWS2tsT1JPaU5ZfWhiT1V1a01RVFVeZnaEZ11hcWhnYVdpXFxraUpFalpiZVdYVXlaTldualldbGVcWmVjXnRmbGVxZnNwdIF4cJmFdn9/eH98hYd9dXSCh3+Vg25zeXt7c3KFhoiIhHmBfXaPf32EiY6EgYN6fouDe3d8d3aanZh6ioOHanZ+fWyEhpWBco+CcYaCfoKAb2ZsZ1hdW1xbVGVwZV9YY3J1aXZwZGViV1tbaH9wb3KAc4plZnp/anV3dHSEhniChXp3dHZua3pwYWhrZ4Z0jYRuZl5ffG96iX1obXdmamRWV3Nwjqd9hHx2lpBze3F7eGx5eo+DdZd8iIaDh4R9dXFzbWh1XW1pYG11ZGdmaXpve3NZZ4F2dWhwgXiCdmJ3hYt9lYJvjGtte4FxZnNlX2t4ZnF1iXp9YXWDdWlrcXR5b3h3cntlfH1+d3VuY2VgbIZ8bWtWamNyVExqa1BMT3BIXnxmYU5WdGRLT1RYYWt3fmZdZ3NpZV9XY1djcV1LS2tYZGJVVFVzVk1ZdmVaX2xgXFtkZV93Z21icGl0b3F+dXSZgXh/gHiAf4aEen12goN+mIVucnR8e3RxhYWOgYF6i3V0kIB9gZSOgIWEfH6Mhnp+gXZ7o6aKeYmGhWx1fHx1hIONe2+Fc3qFfYKDdW5qaWVWXVtbWlNjbmVbWGJ0e2ppbWhgYVdeWmmAaWxvgGdtYml7emt0dXVvhoJ6gX53dm57aGp5al9lbmiBd5CEZ2VYYXZpfYZ5bmlvZmZdVVhvaY+od4F6fJCOeHRufW1xdHiNfneUdIaDgIWJdmpzdmhpb1xtZV5uc19nYmp4aHttW22Dc3Rqb4F+endhd4WFepGGc4hycHp/cmNxaFttdmRvcod6d2FygG9naXhzcWt3dnN1YoJ6fXZ1b2NiYm18fGtrVWliZ1RMbmhQSFJsRWF5ZmJNVHJfSk1VWWVseHtmX21wamNdVmBWcG9XSlNoWGdeWE1VbFRLXXpfXF9sXV1bYmVgemhsYW9vdm5vd3V6mH13gIF5gICHhnp5eoN9gZOEcXR0fnp2dIWIkH6BfZFsc5WBe4KfhX+HfYB+hoKAint1hKyff3qIiIRscoJ6doGBgnVuh299gHSKgGpvbmVkWF9aWlpVYmpnXFpfdYJpXm1sXGFXW1xrgWVxdX1pal5teHdodXhzbod8fn56dnNsemhpd2ddZHNneneSgWNjVGRvZoGEdnZmaGphV1ZZaGOQqG9/d3+Kjnpwb3tmd215inp2jnGEfX9/h25kd3RlaGldbGJecHBbZ19tdWV6aF10gG5ya3F7f3Z1YnWGjHyJiIB/eHJ1fnRhcGxYcHJhb3CDenRjcYBrYGx6bmloeXdzcGSDdHh4dHBkYGNtcn1qbFRpXl9VTHVjUUdXYkdjd2ZhTFRxWUtMWFhobHZ6ZWRtcWZjWlhdWHdnVEpcY1hpWFhIV2VRSWN4W11fbVteXGJkXn9pamBvdHhtb252g5d5coGAfX+JjIZ+dXaGeIaMfXR1dYJ5enqCjI59f4WJanSWgXuKnX1+hXmAe358holzcY+ujHx8h5B+ZnGIenR+fXZyb4ZsfH5tkHpjcHBiZV1lVlpZV2Nma2BdXXOGaVlxblteWFpcbHticXd2bGNcbnR1aHV3cW6GeX+Bendvb3RlaHRlW2d1ZnZ2knpfXVNlZWqCgXN8YWNpXFRXXmJkkKVpeXSChZB4bG15Zndse4N5dIdygXh8eYBpZXdtYGdhX2tgXnVrWWZdb29iemVbd3xrbm9weHl0dWVzg5OAiYOJenZvcn1yYXhjWm5vYG9wgHpzZXGAZF5tdWhjZnh6cmttgHNye3FxYV5lbW59ZGlUaFlaVU55X1JKWllIY3VkYUpVblVKTFpXaWxye2RsbHNiYVlaW2F3XVRLY11ZalNWR1lhTkhqdlhfYW5bW19iY12FaWhibnh5bW9qdoGQeW6DfoCCkoiEgXZ1iXSMhnRxdnaBd319foyPgX+TfnB4loN9mZJ5gIB4eX5/c4eEc3CZont7f4mWeWV1iHpzeXdsdHB/bHl8cJJzXnBvYWdibFRbWldpZG1mXFxxiWVTcm5bWVhXYGt1ZGp1ampfW250cm10dHVrh31/gX13b25sZGlwY1trcmR0do5zXFdUY19wf35xgVxiY15TWmFcZJOfZXJxhYOQc2tqeGxubnl5enGAdn9ze3p7ZGZ2aF5jW2FoXF53aFdiXnBoYXdhW3x2ampybnh0dHRpcYKWhId/hXZzanB8bWZ3V1tpbGFwcX94c2VvflpgcHBhXmlvfGtqcn1xb3Zpb2BbZGtse2FmVGdVWFNRd1xSUFlSSGRzYmBHVmxRSVBaVWtsa3xlbW9yYVtaWFlscFdTUGZXV2lTVEZaXE9Jc3VYYGNuY1hhYWFejGpjZW16eWxuaXZ5hntrhH2AhZl8goR5fYhtj4Zxb3Z6fXSCgn2Lj4ODl3R4gpSFgZ+JdYF/gXR/gnCHg3Zvopd0e4aMh3tmd4tvbnxwZ3hxe2xzdnONa150b2JnZmtTXlxWaGJsbFtccY1kT29tXFZXVWZoc2hjdGVlXlpwdm9xdnZ6bIh9gH2Id5BzY2Rrb2Fcbm1jc3iHa1pUVmJidnx8cIRcY19jVFpgWmOXlWNucIKFiXJpZnluZHJ1cXpreXR1b3t/dl9nc2RcX1diZFlhdWVVX2BtZGFxXV1+b2hpc3F0cXV2bG2FlIOKfIVxcmdufG9xb1JaZWlkcHJ/dXNibHVVYnFqW15uZHtka3R8cXFxaWxfWGRpanheZlVkVVdRVm9YUVdUUEhlcl9hRlhrT0lZVFZuaWR8aWt4a2FXXFVbdGRTUlZoUVlnVFNIWltQTnl3W19lbWpaYmFeXo9uYmdseXZubml2dn9+bYSAfoaXe3+HgYp/a5OIcmd0gHt1gIN+iY5/jJNzfYqRhYefhnt/hoxzgIZzfYJ1bqSMc4KNjHd4bnqNYGV9cWd6dHlsbXF3g2dkfG1kZ2doU2BfVWdgbG9cXm6OaE1pbGBVVlNvZXJrZnhlZV1acnZuc3t5c26Ke4B3nHt6a2FlbG1eYG5qZXB5fmdaVlhfand7em+DX2JeZ1ZZYFhknIhia3CBhnx3a2p2bFt1cGp5aXVybm97gXNYa29gWV5WY2RYZXFjVF9iaWFibFpgfmtmbHR1b214dmxoho2AinuIbXFmcHtscWxhWF9nZ25yf3NyXmlsU2VwZFVibWF4YW90enRpbmtqXldgZmh1XGRWYlZUT1lnU09dT1BIZXBdY0daak5KYEtYbWVfeGhufmRgVV5UXXVbVFJgZ05eYlVTSlxaUVp2dl1fZm1oWGNhW16OcWNoanhyc21odnN5g3OCg3uIjn58ioiOeW6PinRsc4Jzf3+IhYeShJWPen2Mj4iRm4SAfIyEcn+Bc3R3cW6Tk5OTk5OTk5OTkpKSkpKSkpKSkpKSk5OTkpKSkpKSkpKSkpKSkZGRkJCPj4+Pj4+Ojo6Pj46OjY2Njo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo2NjYyMjI2NjY2Njo6Ojo6OjY6OjY2Ojo6Oj4+Pjo2NjY2Oj4+Pj4+PjoKAfnp6fX5+fX1/fn59fn5+fn5+fn+Af4CAgIGAgIB/gIGBgYOHjI6Ojo6NjY2NjY2NjY2NjZKSkpOTkpKSkpKSkpKSkpGRkZGSkpKSkpKSkpKSkpKSkpKSkpGRkZCQkI+Pjo6Ojo6NjY6Ojo2NjY2Njo6Njo6OjY2NjY2Njo6Ojo6Ojo6NjYyMjY2MjIyNjY2Njo6Ojo6NjY2NjY2Njo6Ojo6OjY2NjY2Ojo6Ojo+Ogn99ent8fn59fX5+fn5+fn5+fn5+f4B/gICAgICAgH+BgYCBg4aMjY6NjY2NjY2NjIyMjIyMkpGRkZGRkZGSkpKSkpKSkZKSkpKSk5KSkpKRkZGRkZKSkpGRkZGQkJCQj4+Ojo6OjY2NjY2Njo6Ojo6OjY2NjY2Njo6Ojo6Ojo6Pj4+Pjo6NjIyMjIyMjIyNjY2NjY2NjY2NjY2NjY2Njo6Ojo2NjY2NjY2NjY6Ojo6Cf3x6fHx9fn19fn19fX59fn5+fn5+gH9/gICBgYGAf4CAgICDhouOjo2NjY2NjIyMjIyMjIySkZCQkJCQkJKSkpKSkZGSkpKSkpKSkpGRkZGRkZGRkJCQkJGRkZCQkJCPj46Pjo6Ojo6Ojo6Ojo6Ojo2NjY2NjY2Ojo6Ojo6Ojo6Pjo6Ojo6MjIyMjIyMjIyMjY2NjY2NjY2NjY2NjY2Njo6NjY2MjIyNjY2Njo6OjoN/fHp8e31+fH1+fXx9fn59fn5+fn5/f3+BgYGAgICAgYCAgIOGi42NjY2NjIyMjIyMjIyMjJTO2tjY2NjamoGEhISEiF0tMDAwMC1GoaGhoaGhoJqZmpqampqKg4SEhIOEd2VnZmZmaFxDRERERENHZGhnZ2dnaE1CQ0NEREU5Li4uLi4rSIWDg4ODg4OLjIyMjIyMjY2NjYyMjY2NjY2NjY2NjIyMjIyNjY2NjY2OhX19e3t6fX58fH59fX1+fX1+fn5+fn9/f4GBgYCAgICBgICAgoWKjI2MjIyMjIyMjIyMjIyMlNvp5+fn5+qcfoKCgoKGUxgdHR0dGTekpKSkpKSjnJycnJycnImBgoKBgYJyXV9fX19hUjQ1NTU1NDlcYF9fX2BhQTU2NTU1NycbHBwcHBg7g4GBgYGAgYqLi4yMjIyMjIyMjIyMjIyMjY2NjY2MjIyMjIyMjY2NjY2GfH16enp8fXt8fn1+fX59fX5+fn5/f3+AgYCBgYGAgIGBgYGChYqNjYyMjIyMjIyMjIuLi4uSl5iYmJiZmZKPkJCQkJCMh4eHh4eHiZOTkpKSkpKRkZGRkZGRj46Ojo2NjYuJiYmJiYmIhYaFhYWFhoiJiImJiYmHhYWFhYWFhIODg4KDgoWKioqKioqKi4uLi4uLi4uLjIyLi4yMjIyMjI2NjIyMjIyMjIyMjY2Njoh8f3l7enx8e319fX18fX19fX5+fn9/f4CBgYGBgYGAgYCAgYKFioyMjIyMjIyMjIuLi4uLi5GQkJCQkIuOkZGJh46KkJKTkYuQjYyPh4+RkZGRkJCQkJCPj4+Pj4+Ojo6Njo6Ojo2Njo2Njo6Ojo6NjY2Njo6Ojo6Ojo6Ojo6Ojo6NjY2NjIuLi4uLiouLi4uLi4uLi4uLi4uLjIyMjIyMjIyMjIyMjIyMjIyNjY2NiX59eHh5fH18fX19fHx9fX59fn5+f3+AgICBgYGBgYCBgIGCgoSKjIyMjIyMjIyLi4uLi4qLkJCRkZGPhI6QkIaKj4WNkJCLhYeHh4yGiZCQkJCQkJCQkI+Pj4+Ojo6NjY2NjYyMjIyMjIyMjIyMjIyMjIyMjI2NjIyMjIyMjIyMi4uLi4uLi4uLi4qKiouLi4uLi4uLi4uLi4uLi4yMjIyMjIyMjIyMjIyMjIyMjI2Lfnx3dnh7fXx7fX18fH19fn5+fn5/f4CAgIGBgYGBgIGAgIGChIqMjIyMjIuLi4uLioqKioqQkJCQkIqFjoiOhoaPiY2QkIiFhYaFjoaLj4+Pj4+Qj5CPj4+Ojo6OjY2MjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMi4uLi4uLi4uLi4uLi4qKioqKi4qKi4qKi4uKioqKi4uLi4uLjIyMjIyMjIyMjIyMjIyMjIt+e3d2eHt8fHx9fX19fX1+fn5/fn9/f3+AgIGAgYGAgYCBgYGEiYyMi4uLi4uLioqKioqKipCQkJCPhYOMjpCOiYyKjpCQiIWGhoeMiIiPj4+Pj4+Pj4+Pjo6OjY2NjYyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIuLi4uLi4uLi4qKioqKioqKioqKioqKioqLi4uKioqKiouLi4uLi4yMjIyMjIyMjIyMjIyMin58dnZ4fHx7fH19fX19fn5+fn5/fn9/f4CAgYCBgYGBgIGAgYSJi4yLi4uLi4qKiomJiYmJkJCQkJCMhoyJjoeFjYmOi4yLhIiGhoiFiY+Pjo+Pj4+Pjo6OjY2NjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyLi4uLi4qKioqKioqKioqKioqKioqKioqKi4uLioqKioqKioqLi4uLi4uLjIyMjIyMi4uMjIyKf353eHp8enp8fHx7fX1+fn5+fn9+fn9/gICAgICBgICAgYCBhIqMi4uLioqKioqJiYmJiYmPj4+Pj5CMjouPjIqPjI6MjY+KjoqKjIqOj46Ojo6Ojo6Ojo6NjYyMjIyLi4uLi4uLjIyMjIyMjIyMjIyMjIyMjIyMjIyLi4uLioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi4uLi4uLi4uLi4uLjIiAfXh5enl6e318e3t9fn5+fn5/f35+f39/gICBgICAgIGBgIGEiouLioqKioqJiYmJiYmIiI+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pjo+Oj46Ojo6Ojo6Ojo2NjYyMjIyLi4uLi4uLi4uLjIyMjIyMjIyMjIyMjIyMjIyMjIuLi4uKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLi4uLioqKi4uLh4B8eHp6eXt8fHt8fH1+fn5+fn9/fn9/f39/gIB/gYGAgIB/gYSJi4qKioqJiYmJiYmJiIiIj4+Pj4+Pj4+Pj46Pj4+Oj4+Ojo6Ojo6Ojo6OjY2NjY2NjY2MjIyMjIuLi4uLi4uLi4uLi4uLi4uLjIyMjIyMjIyMjIyMi4uLi4qKioqKioqKioqKioqKioqKioqKioqKioqKiYmKioqKioqKioqKioqKioqKioqKi4uHgHt5eXh6fHx6e3t9fX5+fn5+f39+f39/f39/f3+BgYCAgH+BhIiLiomJiYmJiYmJiIiIiIiOjo6Ojo6Pj46MjI+Sj5COjo6Ojo6NjY2NjY2NjY2NjIyMjIyMjIuLi4uLioqKioqLi4uLi4uLi4uLi4uMjIyMjIyMjIyLi4uLi4qKioqKioqKioqKiomKiomJiYqKioqKioqJiYmJioqKioqKioqKioqKioqKioqKi4aBe3h5eHp8ent7fH19fn5+fn5/f35/f39+fn9/f4CAgYCAgIGEiIqJiYmJiYmJiIiIiIeHh46Ojo6Ojo6Ojo+MkJOQkI+Ojo6NjY2NjY2NjYyMjIyMjIyMjIuLi4uLi4qKioqKioqKi4uLi4uLi4uLi4uLi4uMjIyLi4uLi4uLioqKioqKioqKiYmJiYmJiYmJiYmKioqKiomJiYmJiYmJiYqKioqKiomJioqKioqKhYB6eHl5fHt6ent8fH1+fn1+fn9/fX9/f35/f39/gICBgICAgYSIiomJiYiIiIiIiIeHh4eHjY2Ojo6Ojo6Pj4+PjoyNkI2NjY2NjY2MjIyMjIyMjIyMi4uLi4uLioqKioqKioqKioqLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4qKioqKioqJiYmJiYmJiYmJiYmJiYmKioqJiYmJiYmJiYmJiYmKioqJiYmJiYmJioqFf3l6eXh7e3p7fHx7fn5+fX5+f39+f35/fn+Af3+AgICBgYCChIeKiYmIiIiIh4eHh4eHh4eNjY2Njo6Oi42Nj5WPiYyPjYyNjYyMjIyMjIyMjIuLi4uLi4uLi4qKioqKioqKioqKiouLi4uLi4uLi4uLi4uLi4uLi4uLi4uKioqJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYR+eXt5ent7ent9fHt+fn59fn1+f35/fn9+f3+AgICAf4CAgICEh4mIiIiHh4eHh4eHh4aGhoyNjY2NjY+MjImKj42IjJGPjY2NjIyMjIyMjIyLi4uLi4uKioqKioqKioqKioqKioqKiouLi4uLi4uLi4uLi4uLi4uLi4uKioqJiomJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJg355e3p8e3p7fX17fH9+fn5+fX5/fn9+f3+Af4CAgH+AgH9/f4OGiIiHh4eHh4aGhoaGhoaGjIyMjIyLiYyKiIeJhoyOjJCMjZGOjIyMi4uLi4uLi4uLi4qKioqKioqKioqKioqKioqKioqKiouLi4uLi4uLi4uLioqKioqKiomJiYmJiYmJiImJiYmJiYmJiYmJiYmJiYmJiYmIiImJiYmJiYmJiYmJiYiIiIiIiYmCf3h7e3t6enx9fHx9f39+fn19fn9/f39/f4F/gIB/gICAgICAg4aIh4eHhoaGhoaGhoaGhoWMjIyMi4yOjoyKioeEiIuKjIuNjo+Li4uLi4uLi4uLi4uLioqKiomJiYmKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiomJiYmJiYiIiIiIiIiIiImJiYmJiYmJiYmJiIiIiIiIiYmIiIiIiIiIiIiIiIiIiIJ/eHp7enp6e3x8fX1+f35+fX1+f39/fn+AgICAf3+Af4CAgYCDhYiHh4aGhoaGhoaFhYWFhYyMjI2NjJCSjI2Ii4mJi4uLi4mLjIqMi4uLi4uLioqLi4qKiomJiYmJiYmJiYqKioqKioqKioqKioqKioqKioqKioqKiYqJioqJiYmJiYmIiIiIiIiIiIiIiImJiYmJiYmJiYmIiIiIiIiIiIiIiIiIiIiIiIiIiIiHgXx4e3x5enp8fHx8fX9/fn59fX9/f39+fn+Af4B/f3+Af4CAgIKEh4eGhoaGhYWFhYWFhYWFjIyNkY+PjZGJjIaJjIuIiImMiYeNjo+NioqKioqKioqKiomJiYmJiYmJiYmJioqKioqKioqKioqKioqJioqKioqKiYmJiYmJiYmJiYmJiYiIiIiIiIiIiIiIiImJiYmJiYmJiIiIiIiIiIiIiIiIiIiHh4eHh4eHh4WAenl9e3t7enx8fHx+f39+fn19f39/f35+f4B/gH9/f4B/gH+AgoSHhoaGhYWFhYWFhYWFhISLi46PjoyLj4iHiYmMjYWFjo2KiYyNi46KioqKiomJiYmJiYmJiYmJiYmJiYmJiYmKioqKioqKiomJiYmJiYmJiYmJiYmJiYmJiYmJiYmIiIiIiIiIiIiHiIiIiIiIiIiIiIiIiIiIiIiHh4eHh4eHh4eHhoaHh4eHhH55eX16enp7fXt8fX5+f35+fX5/f39/fX5/f3+Af39/f39/f4CChIaFhoWFhYWFhYWFhISEhIuLjI6MjI2Lh4mIiomHgoiNjoiKi5GTj4uJiYmJiYmJiYmJiYmIiYmJiYmJiYmJiYmKioqKiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiIiIiIiIiIeHh4eHh4eIiIiIiIiIiIiIh4eHh4eHhoaGh4aGhoaGhoaGh4eDfXp5e3p5enx8e31+fn5/fn59fn9/fn9+fn+AgICAf35/f39/gIKEhoWFhYWFhYWEhISEhISEioqOjYmIiIqKh4iHiomIioiIh4qGi5GPiomJiYmJiYiIiIiIiIiIiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmIiIiIiIiIiIiHh4iIh4eHh4eHh4eHh4eHh4eHh4eHh4eHhoaGhoaGhoaGhoaGhoaGh4J8eXl6eXp7e3t7fX5+fn5+fn59gH9/f39/f4CAgH9/fn9/gICAgoSGhYWFhISEhISEhISEhISKi5CPiYmJi4qHh4WHiYuKiYSLjYmOjYmJiYmJiIiIiIiIiIiIiIiIiYmJiYmJiYmJiYmJiYmJiYmJiIiIiImJiYmJiYiIiIiIiIiIiIiIiIeHh4eHh4eHh4eHh4eHh4eHh4eHh4eGhoaGhoaGhoaGhoaGhoaGhoaGgXt4enp4e3x7e3x+fn9+fn5+fX1/f39/f3+Af4B/f39/f3+Af4CChIaFhYSEhISEhISEhISEhI+Qj4+IiYuIhoeIiYuLjIuJioqNio6Oj4iJiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIh4eHh4eHh4eHh4eHh4eHh4aGhoaGhoaGhoaGhoaGhoaGhYWFhYWFhoaAe3h5eXh4enp8fX1+f35+fn59fn9/f39/gIB/gICAf39/gIB/gYKDhoiGiIaDhISEhIODg4ODkpKOioeKi4qLh4uNiYqJi4iHiouIio+SioiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIh4eHh4eHh4eHh4eHh4eGhoaGhoaGhoaGhoaGhoaGhoaGhoaFhYWFhYWGhn96eXh4eHl5eXx9fn5/fn5/fn1+f35/f3+Af39/f4CAgH+AgH+BgoOHjo+PjoiHhIWFhoaFhYWSkI6KiYmIiImKioiIh4aKjIiHiYmOkJGNh4iIiIiIiIiIiIiIiIiIiIiIh4iIiIiIiIiIiIiIiIiIiIiIiIiIh4eHh4eHh4eHh4eHh4eHh4eHh4aGh4eHh4aGhoaGhoaGhoaGhoaGhoaGhoaGhoWFhYWFhYWFhYWGf3l4d3d3eXp5e3x9fn9+f35+fn5+f35+fn+Af4CAgICAf3+Af4GBg4eOjo6Ojo6Mjo2OjY2MjZCQjomHhoiJiYeIiouIiYyJiYaKjY6PkYuIiIiIiIeHh4eIiIiIiIiHh4eHh4iIiIiIiIiIiIiIiIiIiIeHh4eHh4eHh4eHh4eHh4eHh4eHh4aGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaFhYWFhYWFhYWFhYZ+eXd5d3d6eXl8e31/fn5/fn5+fn5+fn9+f4B/fn+Af39/f39+gIGEiI6Ojo6Ojo6Ojo6Ojo2NkJGOi42JjIiIiYaHiYaIioiHi4yLjpCQiIeIiYmJiIeHh4iIiYmIh4eHh4iIiYiIiIiIh4iIiIiHh4eHh4eHh4eHh4eHh4eHh4aGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoWFhoaFhYaGhoWGhYSEhIWFhoaFhIWFhX55d3l2eHl4e3x7fn5+fn5+fn5+fn5+f39+f39+f39/f35/f3+AgYOGjY2Ojo6OjY6NjY6OjY2Qj42Ni46KhoiKhISLiYeDhYSDi4mLj42JjI6QkI+NjYyLjY6Pj42NjI2Nj4+Pjo6MjYyMjY2KiYiHiImHh4aHh4eHh4aGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoeHiYqKiIeJi4yNjo2LiImLi42OjYyJiImMgHl3d3Z6eXh7e3t+fn5+fn5+fn5+fn5/f39+fn5/f4B/f4B/f4CBg4aMjY2NjY2NjY2Qj4+Pj46NjI6KiYuMjIeFiY2Lh4aIh4aHh4uNjo6Pj4+Pjo+Pj4+Pj4+Pj4+Pj4+Ojo+Pj4+Pj4+Pj4+Oj46Oj46Mi4uJh4eHh4aIhoaGhoaGhoaGhoeLiYeHiIiLjY2Mi4yLjY2Ojo+Ojo6Pj46Ojo6Ojo6Ojo6Njo6NjY2AeHZ4eHp4enx6fH5+fn5+fn5+fn5+f39/fn59fn9/f4B/gH9/gIGDhoyMjIyMjY+QkpOTk5KSjYyMjIqHioyKh4eJiYWCiouIiYWJjpCNjo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6NjI2NjI2LiYaHh4eHiYqLjY6NjYyNjY6OjY2OjY2NjY2NjY2NjY2NjY2OjIyNj4+OjY2MjIyLi313dXd5enp7e3p+fn5+fn5+f35+fn5/f39+fn1+f39/gICAf3+AgYOFj5KRkJGSk5OTk5OTkpKLi4uLiomMiouLiYuKhoeOjYiIjI6OjIuMjIyNj46Njo6Ojo2NjY2MjY2NjIyMjIyMjIyMjY2NjYyMjI2NjYyMjI2NjIyNjIyMi4yMi4yMjI2MjIyMjIyMjIyMjIyLi4uLi4yNjY6Sk5OSkpSRkJOVlZSTk5COjo6Oe3Z2d3h6ent7e31+fn5+fn5/fn5+fn5/f35+fn9/f3+AgIB/f4CBgoSNkpKTkpOSkpOTkZKSkoqJioyJi4qJjIuKioiHiYqKi4mKjY2Mj46Nj5KUlJOUlJOTkpGSkI+Ojo2NjY2Pko+OkZGOjIuKioqLi4qKi5CPjoyMjIqKioqKioqKiouKioqKi4yLi4uMjIyKiouLi46RkpOTk5SUk5STk5SUlJOTk5KSkpKSk5F6dXZ2eHt7e3p6fX5+fn5+fn5+fn5+fX5/fn5+f39/f4CAf39/gIGChIuRkZGRkZKSkpGRkpGRiYmIiIqMiYiJiYuJhoSJhoyKh4ySkpKTk5OUlZWWlZWUk5OUlJSUlJSUlJSVlZWVlZWUlJOTkY+QkZKQjoyRlZWVk5KSjo+QjYqKi4qKi42OjY6RkpCRkpKSkpGRkpKSk5OTk5OTk5OTk5OTkpOSkpKSkpKSkpKSj3h1d3l6e3t7ent9fX19fn5/f35+fX5+fn5+f39/fn9/gH9/f3+AgYKEi5GQkJCSkpKRkZGRkZGIiIiIi4uJg4eLi4yMiIeHjYyNkpSSkpOTlJWWlpaVlZSSkpOTlJSUlZWVlZaXlpaWlpWUk5SUlJSVlJSUk5OVlZWUk5KTk5OTkJGSkZGSk5OTk5KSkpOSkpKSkpKSkpKSkpKSk5OTk5SUk5OSkpOTkpKSkpGRkZGPdnJ3enp7e3t8fX59fX1+fn9+fn9+fn5+fn6Af39/f3+Af3+Af4CBgoSKkJCRkZGRkZCQkJCQkIeHh4eIiIiFi4+KjI6Njo+OkJWUk5OTk5SUlZWVlJSUk5KSk5KTlZSUlZaWlpaWlpaWlpSTk5OTk5OUlJOSk5SVlZSTkpKSkpOTk5OTk5OTk5KSkpKSkpKSkpGSkpGRkZGRkZKTlJSUlJSTkpGRkZGRkZGRkZGRkYx0c3d6ent7e3x9fX1+fX5+f35+fn5+fn5+fn9/f39/fn9/f39/f4GDhIqQkJGRkJCQj4+Pj4+Ph4iKi4yNjYuOj42Mjo6RkpGSk5OSkpKSk5SUlJKSk5OTkpKSkpOUk5OTk5WVlZWUlZWUk5OTk5KSk5OUk5KTlJSUk5KSkpKSk5OTkpKSkpKRkZKSkpKSkpKSkpKSkZKRkZGSkpOTlJSUk5OSkZGRkZGQkJCQkZCRinN0dnp8fHp7fXx9fX59f35/f35+fn9+f31+f39+fn59f39/gH+AgYKDipCQkZGQj5CPjo+Pjo+Oj4+Pj4+Pj4+PkI2OjpCRkpKSkpKRkpKTk5OTkpGSkpKRkZGSk5KTk5OSk5STk5OTlJOSk5OTk5OTk5OSk5OTkpKSkpKSkpKSkpGRkZGSkZCRkZGRkpKRkZGRkpGRkZGRkpKSkpKSkpKSkpKRkJCQkJCQkJCQkJGGc3V2e3x8e3x9fX1+fn1/f35/fn5/gH9+fX5/fX5/fn5/f3+Af3+BgYGKkI+PkI+Pj4+Pj4+Pj4+Oj46Oj4+Pj5CQiI2PkJGRkpKSkpOTk5OTkpKSk5KSkJKRkZKSk4eFk5GRkpKSkZKSkpKSkpKTk5KRkZKTkpGRkpKSkpKRkJCQkJGRkZGQkJGSkZGRkZGSkZGRkZGRkZGSkpKSkpKSkZCRkZCPj4+Pj4+Pj4+PkX9ydHh8fHx7fHx9fX5+fn9+fn5/f3+AgH99fn5+f39+f39/f4CAf4GBgYqPj4+Pjo6Ojo+Pj46Ojo6Ojo+PkI+Pj4+GjpCQkJCRkZGRkZGRkZGQkJCQkJKCgZKRkZKOdYaRkJCRkZCQkJGRkZGRkZGRkJCQkZGQkJGRkZGRkI+PkJCQkJGRkJCQkJCRkJCQkJCQkZCQkJCQkJCQkZCQkJCPj4+Pjo+Pj46Ojo+Pj4+PeHJ2eXx9fHp9fH19fn5+f35+f39/f4CAf35/fn5/f35/f39/gIB/gYGAio6Ojo6NjY2Ojo6Ojo6NjY2Oj4+Pj4+PjoiQkZCPj4+QkJCQkJCQkI+PkJCPkIhwhJGPkHx1iJCPj4+PkI+PkJCQkJCQj4+Oj4+QkI+Pj5CQkJCPjo+QkJCPj4+Pj4+PkJCQkI+PkI+Qj4+PkI+PkJCQkI+OkI+Pj46OjoyMjY2NjIqDiYhzc3Z4fX58eX19fX1+fn5/fX5/fn9/f39/f4B/f39/f4CAgH+AgH+BgYCJjY2Ojo6Ojo6OjY2OjoyNjY6Ojo6Ojo2NiJCRkI6Njo6Ojo6Ojo6Pjo6Ojo6PjHNvio+JcniHj46OjY6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Pj46Oj4+Pj4+Pj4+Pjo+PjY2MjYyNjoyLi4mJiYiFhYSDgoKEgnR5fXp4dXJrZWltb2xmZmdncHNzd3l9fnl6e3x9fX1+fn59fn9/fn9/f39/gIB/f3+AgIGAgIB/f4CBgImNjY2NjY2MjYyMjIyMi4uLjYyMjIyMjIyGj5GRjIyMjIyMjIyMjIyMjIyMjIyNdm57j4JzeIaNjY2MjIyNjY2NjYyMjI2MiomKi4uJh4KAh4iEgXt6gH57fXx8fXlzcnJycnV1cG1ramppZ2NkYV9bXF1eWFVXWFlTS0VJSkpLTE1PT0tgdHR3eX19eHp5e3x8fX5+fn1+f39+f35/f4CAgH+AgICBgYCAgICAgIGAf4OEhYSFiIuLjYyMjIuLi4yGiYqKioqKh4OOkJGNiouLi4uMiYmKioqKiouLi4dzbW6DenR2gIWDhIeJiYWCg397fHl6e3pzcHFxcW1samdsbWdlZmVmZGNlZGVkZWVlZWRkZGNhYV5dXFlYWFdUUFFSU1JTTU1KSUZFSEpHR0hHR0xOSWdzdXh6fXp4d3l8fHx8fn5+fn9/fn9/f35+f4CAgIB/gICBgICAgICBgYFnXmBjYWNucX17ent/fXd8fHZ4ent4eHpvcXt4eXt8e3h3e394dXd0dHZ1dXZ3dGJeZF9ia3FmaGtsbm9tamlpaGhlZWRkZF9gYWJgYF5dWVhaWltdXV9gX2BfX19gYmFeXl5eWVldXF1bV1dWUlRSU1NOUUpISUZERUhMTEhGR0lLSklNbXJ0eHp7end3eXt6e3x+fn1+f39+f35/fn5+gIGAf3+AgIGAgICAgICCgWdYW1pZXFtcY1xaXF5ga3FtcHBvbm5vbmtpbmxrbG9qaWtraWpraWZmZ2dnaGhiXmxsXWZnZ2ViY2JhYmBgXVhbW1dYV1RWUVBUU1NNSkxLTExOTk9UWFhXVVVUUlBQTU1QT05LTE1QUU9MTEpHSUlHSEhJSEhIR0ZHSElKSEhISUlISVZwc3V5ent5dnZ5enp7fX59fX5/f35/fn5+f3+AgX9+f4B/gICAgICAgIGBbFtZVlZWWVlaWVlYVVZoamxubmxra2poaGloZGVkYlxiZl9fYWNfXF9dYF1eWlprd21ibnNqYlpZX1tYV1NOTUtLS0tMSUtNTktKS0tMSktQTEtLRkdHSUlGR0lISUZFSEdGRkVERUVEREVJSUlHSEdIRkZLTUtJSUlIR0hLTU1LTExMVXFzdnl6e3l2d3h3ent9fn1+fn9/f39+f3+AgIGAfn5/f4CAf4CAgIB/gYJoUlRVVlNVV1lZWVdXV1tbYWNfXlxbWFZWWVZSVFJRUVVUU1NUUE1KTU5QUk9NW2tybGFtdHJnUVFTUFBOTk9NSk1MS0xKSktLRklJSkxJR0pISUlFR0dGRkVFSElKR0ZHRkZHR0hKR0dISEpMSkpLSUlISktLSkhKS0pISUtMTU9QUEtUdHN1eHp6eHZ2d3d6enx+fX5+fn5/f35+fn+AgYB/f3+AgYB/gICAgH+AgmlQUlRXVVRWWVdYWFpbVFRTUlBRU1FRUU9OTlBQUU9MTlBPTk5NTEtNTk5QTU5cZG9rWWlzdXBTTU9QUFBPTk5PTk5QTk1NS0lISEpJSUlJR0ZHR0dJSkhJSEhJSEhHSEdISElISUxLSklISkpJSkpIR0pMS0pJSUhKSktMTk1NTU9RTFVzcnN3enl3dnR2eHp7fX19fn5+fn9+fn5+gICBgICAf4GBgH+AgICAgH+BbE9PTlRZVVVdW1lXV1hOTUpKSUZKT0xKSkdJSk1NS0pMTUpHSUlJSktLRkJFSVZjZ2tvcG5tbFpNTE5NTk9NTk9MTk5OUFBPTE1MTk1MTEpJSEdJSElISElJS0xLS0pJS0pJSklJSUlJR0dKSUdJSUpKTk1OTEhJSklJSk1PT01MT1JOWXBwcnd4d3d0c3R3enx+fX5+fn5+fn5+fn9/gICAgICAgYCAf39/gICAgIJvS0pNTlFOTlVXVlZSU0lFQ0VFUkREQT5CP0RAQD5CREFAQURHRkVIRUNHSElOW2dpZ3JubmlmZGBfX1hMSklKSUlLSkxQTk1MTU1MTU1NTElIREZGR0ZGRklKSUlLSkhMSklKSkpJSEhKS0tIRkdJSklLTU5OSktPTUxLTU1PUE5QT1BgcG9yd3h2dHJzdXd6fX19fn5+fn9+fn1/gICAgICAf4CAgIB/f3+AgICAgXNQUE5OUE1KS1BSUE5RQ0RCQUZRRT1DPT9FSDk6Oz0/PTxBRkA+Ojs+SVpdW11mbG5rb21tbGtpaWtjUkdFRUZFR0dHR0pHSEpLR0NER0pHQ0RFQUFDR0hHSEdISktKSElMS0lISktLTU5MTUxMSkpMS0lLTU9PUFNRT1BQTk9QUlFNUGdwb3N2dXRycXR4eX19fX1+fn5+f4B+foCAgH9/gIB/f4CAgH+Af4CAgICCdlRVUVFQT0xNUFBOT09BQkFAQkE/Oz48Pj8/Ozg5ODs7OkA6Oz48Ozs7PUpbaW5ub2pvbWtqbGxlUEdFREdJSEM/QEBAQUFCQUE/Pjw9PkFAQD8+P0BFR0dHSUtMTk1OTUxNTUpLTVBVU05MTlFOTk1OTE1NTk9OTk1LS05OTk1OTkxUbnBwc3R0c3Fydnh5fX19fn1+fn5/gH5+gICAgICAgH9/gICAgH9/gH+BgYJ4UVFSVFJTUVNTUVFST0BAPT4/PD8+QEE/PT45Ozo7Ozk5Ojg4Ozw5Nzk6Oj1HYm5zbm5sa2xnVEI/Q0ZEQkNDPzs+PkBDQ0E/Pj9BPkBAQj9APD9CQEFDRUZFSktQT1BPTU1OTExMT1JRUFJOTExPTUtOT0xMTEtMS0tKS0tKTU1LS1xxcXF0c3RycXR4eHl9fn1+fn5+f39/fn5/gIGAgH+Af4CAgICAf4CAf4CAgXxSTU9RUFFSUlRSU1NOPDs8Ozs7P0BBQkA9PDk8PTw6Nzk6Ojk3OTo6Nzg6OTk8SV9zdHFmUj86Oz1AQUA9Ozs+PD08QEJDQT9BQkE9Pj09Oz0/Q0RCQD9BREJFR0pKSkpKTE1MTExNTExOVVNLTE1USVBKSU1KSUpLS0pJSEdKS0lKZnJxc3RzdXJydnl6e31+fn5+fX9+f39/f36AgICAf4CAgICAgIF/gIF/gYCBgFZMTlBQTlJRUFBRUU44PT88PDo9PkFAQT8+PkA/Pj48PT0/QD09PT9DOz09Pjw6Qmx9aT46Oz49Pj9AQEA+P0FAQEBBQEBAPT8/PTw6Oz09PD9AQUJCQUBBREZGRkdGR0dISUtMTExLTEtKS0lKSk1MTEpMS0lISUxMSklJSElLR01tcHF1dXR1c3V4eXl8fX5+fn5+fn5/gH9+gIB/f39/gH+AgYCAgYCBgICBgYCCYUtPT05OT1BPT1BQTzo8Pjw9Oz8+PkFBPz0/Q0NEQT89PkBBP0A8XG5APkRFPz9BRF9kPD09Ozs9PkFBQD5AQD9BPz89PD48PTs7PD0+QUA/QD5AQ0NEQkNFSEVFR0hISEdGSUpJSUlJSUhKSkpKTEtKSklJSEhKSktMS0lLSkpIVnBwcXNzdHR1eXp7fHx+f35+fn5+f39/f39/f3+Af4CAgICAf4GBgICAgIGBgIJtTFBRTk9QTk5PUFBPPjw8PT4/P0A+QEA/Pz9CRkQ+PDw9QD04Ojttd0g4Ozo9PkE6SWU9PD08ODo7Pz89PD07PEA9PTw9PTs9PD0+QUBCQUBAP0JEQ0RFRkZGQ0VHSElJSEhJS0tMTUpKSUpNTUpLSktJR0hISEpJSktKSk5MSUlfcHBycnJ0dXZ6e319fH5+fn5+fn5/f35/f36AgIB/gICAgICAgYGAgICAgIGAgnZNTk5NTk5MTE5QT0w+QTw8PT8+QkM/PkFBQUJBQFlSPDw9SUxGRnV3TTc4ODo7Pj9XakE7PDw6Ozs+Pz89PTg6Pjw9Pj89Oz4/QEJDQkJDQ0FCQkFCQkRCQkRCRENGSUdGRkhJSUtNSklKSktMSkpJSkVESUlGRkhISUpKTEpGRmdwb3FxdHZ1d3t8fH18fn59fX1+fn9/foB+fn+AgH+AgICAgICBgYCAgICAgICBek5JS0tMTExFSUxOTTw/PDw9PkBAQUE7QkNCQ0BDcnlJO1x/g396fHdXPD0/PT0+RWh0TDo9Pj89PT9BQ0A8OTtBPz4+QT07P0FAQkNCQENDQUNBPT0+QD0/QUFBQENFRUBAQ0JDR0dFRENGRUZGR0VEQEFHR0ZDRkRHSEpHQz5IbG9wcHF0dXZ5fHx9fHx+fn1+fn5+fn5+f36Af3+AgICAgICAgIGAf4CAf4CBgIF+UUhLTU1NS0pLTE9RQD8+PkFBQEBBR0FCRENFQUdyeWtig4SDgoOAfV4+QENAQD1Kc3tZOj1BRUFCQkZIQz08QEREQUA/Pj1AQT4+Pj88PkBER0VAPkBBP0BDRkVDQkNDQEJEREJERUFCPkFCQkFCQEA9QUJDRENDQUNFR0E/PVZwcHFwcnV1d3p8e3t7fX9+fX19fX1+fX5+fn9/foB/f4CAgICAgYCAgIB/gIGAgX5SSEtNTUxLS05OUlVEQkBDQ0FBQkBCQ0BAQUFARW50fYKCgYN+fYR2TUFDRUA/Pll7gF0/Q0VJSkpJTU1LRUNGRkdFR0VFRURFQ0E/QD4+QkZKSkdFRUdGRkpOTktKSUdHSEtMSUdHQ0REREVEQUJCQ0BDREVEREVERUZDQkFEZW9wcXF0dnV4e3x6fHx+f319fX19fn59f4B/f39/f39+gIGBf4CBgICAgH+AgICAfVJJSUpKSEpKTE9SU0dGRUdIREdIREA+PDs+QEVFaHN9gXx/hH55hXJDREVEQ1d1hoeHflhHSEpMTk9QUE1JR0lHSElJSEhHR0hIRUNFRUVGRkhKSkZFR0lKTU9PTU1LSktKTU5LSUhHSEhIR0ZFRkZGREZIR0VFSEhGSEdIRlFubnBxcnV2eXt7e3p9fX5/fX19fX1+fn1/f39/fn5/gH+BgYGAgICAgICAf4GBgIB8UEhHSElGR0lKTU5OSkxJSUpLTE5KRkNBQkNGSkdge4B/d3+EhYOEiWxBQVZ0h4mHh4eIg1dISk9OT09NS0dHR0dER0dHR0ZIRkhFQ0RERkVEREhIQ0NDRklLS0xMTExMTElKS0pKSUlJSEpISEdISUhHR0hGRkZISklJSUlIXW9vcXJ0d3d6e3t6e319fn59fX19fX5+fYB/f39+fn+BgIGAgYCAgICAgIB/gYCAgHxNR0ZIRkVGR0dKS0pMTUxLTU5NT0tJSEhKS0tMTE5bfIKCg4OFhoaIhFZshIeGhoaHiIiHfE9YZExJSUdHRERDQ0BAQ0NDQ0ZGRUJAPj5AQUFAQkQ/Pj9ERkhERkdJSklKSEhIR0lJSkpJSEZKSkpKSUpJSkpKRklMTEpKS0tmb3BzcnR2eHl7e3t8fH1+fn19fX19fn59f39/f35/f4CAgICAgYCAgIGAgICAgICAfU9GRkdGR0hHRUZHR01NTUtMS0lHQ0NDRElLS0xLSlSBg4SEgoKFhoaEgoaFhISGhoaHh4aKdm9pU01APkE/Pz88PDw+Ozo8QUFAPjw5OTg8PD07Pjs4Oz9BQkBBQ0NCQEFBRERCQ0ZISUhISExNTEdJSk1NTk1KSktLSkxNU2xwcXRzc3d5e3t7fH19fn9+fX19fX1+fn5/foB/fn9/gICBgIGAgICAgYCAgIB/f39+UUZFRkdJSUdEQ0VGTk1MSklIRT85Oj5ARUhISklJZYWEhIR/gYKDgoODhIWFhoeIiIiIiYyOfmxiYVI+OD9ANzc4ODk2NDc5Ozw6ODU2Nzc4OTc4NzU4ODs7Oz1AOzk5OT08Pjs8PUFDRUhKTUxMR0lHT1JRUFBOTE1NT1Fdb3BydHN1eHp7e3x8fn5+f359fX59fX5+f39/gH9/f4CAgICAgYCAgICAgICAgIB/f39RR0ZHSEpIRkVGR0hMTEpJSUdDQjU2OjxDQENHSUlohoSEgX6Bg4ODgoOEhomKjIyLi4mKi42Mb2BkZVlBVz01NjU1ODczNTY4Ojg3NjU2NTY3Njc3Nzo2Nzg4OTo3NTc4OTc5Nzc2OjxAR0ZJRklGRUZPU1JTU1JPUFBSVGVwcXN0dHZ5e3x7fH1+fn5/fn19fX19f39/f3+Afn+AgICAgICBgICAgICAgICAgH9/flJISEhJS0lHSUpJSkpLREVIRUJANjc4OD06PUVDQmWFg4GAgoODg4ODhomKiomJioqKiouKi4yGamZraWZRNzg4NTU4ODU1NzY5OTc3Njc2NTo5Ojo6Ozc5ODk4NzY2OTo5ODg2ODU4OTtBPT4+QkE/QUtMT1FQUU9PT1JXa3FydHR1dnp7e3t9fX5/fn9+fX19fX5/f4B+fn9/f4CAgH9/gICAgICAgH+AgICAf39+VEhHSUlMTUtKS0tMSUg/QEFAPDo1Nzk4OTc7Qjo9cYSAgYOEhISEhYaJioqIh4eIiIqKjIuKi46Ea2xrYj88Pj85OTs8OTo7OTo7Ojo5Ozo5PT09Pjs7PDw6Pjs5Ozs8Ozw7OTo8ODo6Ojo5OTk8Pzw8QUJESUpNS0lLTFdvcnN1c3Z4e3t7fHt9f39+f359fX19fn9/f35/f39/f3+Bf4CAgICAgICAf4CAgH+Af35URkVGSUxOTkxKSk1CPzo7PDo4OTk4OTo6Ojs/Pkh+hIKChIWFhYaIiYiHhoaGiImIiYuMi4qMjY6AbWxgRURGRkJBQUI/QENBQD49Pj5APz8/QD9APT0/Qj5AQT9APz1AQEA+P0E8Pjw7Ojs6OTs/PTs8PT1BQUNBQkNBWHBxdHR0dnp7e319e31/fn9/fn19fX5+f35+fn9+f4B/f4CAgIB/gIGAf39/gICAf39/flJFQ0FHSk5PTElHSzo4Ojs5Ojo8PTo7Oz09P0BCUoOCgoSFhIWEhomJiIiGhoaHiImKi4uLi4yNjI17bWtPS01LSkdISEVGSEdFQ0FAQkVDQ0FCQ0I/QERIRUNFQ0VEQUZFRkRFRkRAQj49QD49P0A+Pz4/Pj8+Pjo7PTxgcXJ0dHV3enp6fX19fn5+f39+fX19fX5/fn5+fn5/gH9/gICAgICAgICAf4CAgIB/f4B+UERAPUNIT01HRkJEOTc6Pjo8Oz4/Pz89QUBDREZXhIKDhIWFhoaIiYmIh4aGhoeJiYqLjI2MjIyMjYt4bWFtZE1PS0tLSUlKSklGRERHSEdEQ0VGREJISUtHSEdGSEdFS0lLSUpLSkNGQ0NEQkFBQ0JEQ0NERENBPTs9QGhwc3R0d3d5eHt8fH19fn5/f359fX1+fn9+fn59fn+Af3+AgH9/gICAgICAgICAgH+AgH9PQT49P0RMS0BCQkE5ODw+Ozw7PkA/QT5CQkdHSVmEgoOFhYaHiImJiIiHhoaGiIiIiYqMjY2NjYyMjId5eWVhT09NTE1KSUpIS0dER0lISUVFSEZGRUxMTUlKR0dISUpOTU5MTE5LSEZHR0VFQ0ZGRkZERUhIRkNBP0BMbHB0dXZ4eXl5fHx8fX1+fn9+fn19fX1/f35+fn5+f39/f39/f3+AgICAgIB/gICAgICAf1FBPz4/RUdHPTxAQDg4PDs7PTo+QD4/QENGSUlQX4GDhYSFhoaHiIiIiIiIh4eIiIiJioyNjYyMjIuMjYZpUlJPTk5NTkpISEVKSUVLSUdLSklKR0dHS0xOTE1ISElKTVFOUE5NT0tJR0lKSElESUhIRkZHR0lHQ0JBQ1RucHV3d3l6eHl6e3x8fX5+f39+fn1+fX5+fn5/f36Af4B/f3+Af4CAgICAgICAgICAf39/VERBQUJHSEI/OD9AOTo8OD0+Oz1BPj9BREhKTFVxg4SEhISFhoeIiIiIiIeGiIiIiIiJjIyLjIyMjIyMjGFUVVNQUE9MS0hHQ0hKR0xLR0tPTEtKSkxNTE9QTkhJS0xPUVFQUU9PSkhKSkxKTEZHSEdGRklGRUVCQUJCXG9yd3h5enl5eXp6e3t+fn5/fn59fX19fn9+fn9+f4CAgIB/f39/gICAgICAgICAgH9/f39VRUNFRUdHRUQ7P0E7PTw5QD4+QEJHR0FHS0xQVnmFg4ODhISGiIiIiIiIh4eIiIiIiIqLi4qMjIyMjIyOfVpYVVVWVVBOTEtFRkZMT05QV1VRUE9RU1JNU1RPTVNMUFNVVlJTUlBMSk1NTUtOR0dKRkZISkVERUVCRUNjcHV5eXp6ent6e3p6fH59fX9+fX19fXx9fn5/gH9/gICAf39/f3+BgYCAf39/gIB/f39/f1VGRkdHR0dIRj5AQj0/PT1CQEJCR1ZORk5QUFRYe4aDhYWEhIeIiIiIiIiIiIiIiIiJiouKioyMjI2PjIyMalpYbGNHVFJSUUs7O1JTUmB1XVVWVFZZWVJYWFJaZlBVV1pdUlRXUU9NUlFQUFFLS0tISEpIRUZJSUlISWlydnl4eXh6e3t8ent8fXx9f359fX19fX1+f39/f3+AgIB/f39/f4CAgIB/f3+AgH9/f35+U0hKSUhHR0ZFPz9BQUVBQ0dFREVMWFJNVFVWWFp8hoWHhoWGh4iIiIiIiIiIiIiIiIiIlJyMiouMfmGKi4uHbl1lVjtZWllUUT9AVlVYXGRgVllicl1dV11aVkVRWVpbWV9UWWdSVlZYVVRWVE9PTUpMSklJTE1LT01Tb3N2eHl4d3p6ent6e3x9e35/fn1+fX19fn5/f39+f4CAgH9/f3+AgICAgH9/gH+Af39+fn5WSkpJSEdFRERCQT9ITUlNUEtJS1BUU1NYWlpcXHiFhIWFhYWGh4eHiIiIiIiIiIiIiImcnaCPiY5nO36LiYqMem9wWlxdXFNVU1ZWVVtadYNZVX2QYVxYXV5XSVZdXVtbX1lIWVhZW11YWFlXUlFNUFFNTU9TUVFVUmFzc3Z3d3Z4eHh6e3p8fX19f39+fX59fX1+fn9/gH9/f4B/f3+Af3+AgICAf39/gIB/gHh5fVlOS0lJSEZCREBBOlBRUVdYUFBPUVNUVFhYWVpbboGCg4WEhYaHh4eHh4iIiIiIiIiIiJaanJeIioFuhomIh4SLfmdaWlxaVVdVV1JRV1ZjloBSZXJYWldfaFBgZltbWFxnYUdPWmhnXVtcXV1XUk9TUFBSVlZWVllabnJ0d3Z2dXh4eHt7fH19fX5/fn59fn18fn9/f3+Af39/gH+AgH9/gICBgYB/gH1yfX9/b3R8XVNQT01LSkVDP0A7UFBaWltTU1FPUlJSVVNWVFdfdXiAhYSEhYaGhoaHh4eHiIiIh4eIh4ORjomJiIaFiIiGfoB8XlJXWVZTVlNSUUxPTUtmeVtdVFlVVl1aTFRaVVNUXlpYV1dXemtYW1xcXlRRUVBJTk9XVlhbWmRwcnZ2dHR2eHl5e3t8fH1+fn99fX1+fX1+f39/gIB/f39/fn56eHd2c3V7f3+AgHRrf35rcnleW1ZVU1JPS0ZDREFOXoNsVlJTTk9RT1FVUlNSUlVjZHaAgoKDhISEhIWFhISDhoaGhoeIhn6JiYmHhoOHh4d5b3JYS01PUE1PTEpLREVJRUM+VGRVf1JRUU5LUVRRTU9ZUk1OUVNVVU1RU1JQT01MSENJSFJUVVpcbHF1dXVzc3d6ent7fH17fX19fn19fX59fn9/f4B/f399fX5+f39/f4B+e3Zzd31+fmR1fWlxdF9kXV5cWVVQTElMSWFsknRQUVNOUVJRUltSU1JRUlVUYnN7fH+AgYKBgX99e3uAf4OChYaHgoaGhoGEgYaFhnZgXk1FQERERERDQUVQQkNBQz1DSUdWQEhOTEddaVBIRk5GREVGSUdIQkRIR0lLR0RCQURAT1FNUmRydHZ1c3R1enx7e3t7fHx9fHt+fX19fn5/f3+AgIB/f3x8fX+Af39/f4CBgH12dHt/bWh8Z25xZmllZGJcWFNRUFVSc1dlW09PTkxRU1FVWVNVUVFUU09WYGtscnZ7e3h5dHJuc3RzeXh+f4OAg4OCgIKAgoGCbE5IQEE7PD5AQD9AP2tQSmBFRkhJRUI/R0xOR01RVUlBRT4/PD08PT0/PT9BQ0NAPz09Qj5KTkdVbnV0dXN0dnh7fHt8fHx9fX19fH59fXx+fn9/f4CAf39/enl3eHd2dnh7foB+fXt4dnx1YXhnbHBqbGppZmBbUVJaXFleSkpQUU5LTFFSUVRWVVdRUVdVUFhbYl1hZ21tbG9rZ2BucmptbHF1e3p9e3h6fHx4d3hlREJBQj06QkNBQURCXF1Pe05PT05LTE1PT1FMS01XTUhHQEE8OTc3NTk5PTs7Ozg6ODo/PEJIP1xzdHV1dXZ3eXx8fH18fH19fn58fn19fX9/f39/fn9/f314dXZ6e3p3eXh1d3t8eXh1eXdjcWhpcG1ubW1oZl5PUF9dWklIUFJRT01QUU5RUlRWWFNTWVRPWVpbV1ldXl5fZWBdXnF2a15gZ2t3b29sam9ubmxmYllIR0hIQkFHSUVFRkRNUlBhV1JXUVBTU1JVW09PUVZQTUlERj46OTY1ODc5Nzk6MzY1Nzk1PEM+ZXNzdnd3eXl7fX18fHt8fX5+fnt+fn19f39/fn5+fn9/e3d1eX18enh8fHx8dHd2d3Z1d2tuaWhxbm9vb2prYFZXXlpYTUxUVFNQUVVPTFJTVFhYVFRZUk1XWVpWWFhWWFldV1dYaHNrXVZhc2tiYV9eZGFfXllUUU5PTkxJSEpMSUlGQ1FQU1tXVFROUVNZU1xlVU9TVFFOS0lIQz9BOTk5ODk3ODg1NzU3ODU5OUdtcnR3eHl7e3x+fX18e318fn5+en1+fH1/f359fn59f358dHR1e3hycW9vbnR4cXJzeHZ1cWZkZ3JucHBxbm1kXV9fWVdPUFhWVlNUVk9PVVZYWFlTVVRMS1RWVVVVV1BTVVdUVVJdbl5STlpfW1ZZO0RWWFRbZkpMUFNST01NTk5OTEpGUVBVWVNUT0pOT1VTVFxWUlVTUk9NTElISEY/Pjw6Nzg3NjU5OTY3NjY1V3Bwc3d5ent8fX59fnx8fXx+fX15fX18fn5+fXx8fX1+fXxydnF4eHJ2dXFxbnBwb3B1dnRuamRkanBwcXJwb2ZlZGNcXVJUWlZXVVRXVFJYWFlZWVNVT0pHT1BPT01SSlBQT1BOTk9UTE1JUE9TVFUyPVhNSUBRPWNhUVNRUE5QUVBOTk1RTlRSUFNNSUxKT1JQUlJTVFFST0xNS0xMSENCQT06Ojg3NjtCNTU2Njpkb3F0d3h7fHx9fnx9fH19fX18e3h8ent9fX58e3l9fH18e3B1b3d1cHV0b3N2cHFxcHR1dmNqZ2VXaHRycnFuaWlocFZWVFVYVVdVUldWVVpZWFdVUVNGRUFGR0dIRkpESEpJR0VITEhLSEZMTVBNRy9FX1I+Mz8+am9hU1JRQEdVUVBRUFFOUU9RUExKTExPUE9OUFFRTlBPSkxNTUtHRUVEQjs9PDw5PUc2Njc3RG1wdHV5e3t8fX18enx8fX5+fXt5dnh3eXl8fXp6dn17fHp6b3Fud3JwdnFtcHNwb3Bzc3N0ZmdgaFpXa3JzcmxtbWtuYWVQU1RSU1RPV1ZWWVlWUVFRT0A9Oz0/QUJBQ0BCRURBQEdIR0hFRkhKTUxFR0NPUkM4RU5TXWdUUVNBR1VQT1FRUE5NTk1LTEtLTk9PUUxPT01ITExJS0tMS0dGRkVEPEFBPjtARTs8ODlTcHJ0eHt6e318fHt5fHp6fn58e3V0dXJ2dnp6eHpyfHt8eXltcW94cnF1bm5xcm9vb3Rzc3J1dGtnZ15lam1wa25xbWltY0xPT01RU0xUVVRYV1VMTEtJPDk4Nzs+QD48PUFAQj0+RUhHQ0VGSUdKSkBGQUFARkhFSk9IUVJiXFFQUk9TT09QTExPTUxNTE1PTltXS01RT0dJSENISkxMSkZGRkU/QkM+PEJHP0I/QWRwc3d6ent7fHt6end7d3l+fnx7cXN0cHJzd3R4eHN6e3l2d2xxb3ZxdHRsb3Fybm5vc3ZydHNycmtsZW5zaG1ubWxtbGprSUxISE9RSlFTUVRTT0tIQ0Q9OTc3OT9CPjs/QUBAPkBESUVDR0dJR0lFQkI/Pj1DQkFHSURNT2JlUU1PTldLTE1LTE1NTUxMT05TZE5LTFJJSUlFQUhKTE1OSkdJR0JBQkA/RUZFSERLbm92eXl5e3t6fHp3dHh1eHx8eXpucXJtbm9ycnZyc3h8eHZ2bXBtc3B1dGxwcHJvb29ydnVyVlZucWdseYRqbXFybm5qaG9ISkNHTU1KTVBNUE9ISkQ/QT05ODo6P0I/PEBCQUFERUdLRkNISUdHSENDP0I/P0BBPkRFQ0tOUlRMSklNVEdJSUpMSUtMSUpNTU9QUlBLR0NLR0NCSUlMTU9OSUpJR0NDQ0RJSk1MSVlybXd5eHp7enl8dnJwdXJ0eHl2eGpxbmpsbG50dG10dXtzdHhyb25xb3ZzbnBvcnBvcHN0eWpOYGdzanR8eWdvc3FpcWhkcUhLREdISEdKS0lKS0RGQj0+PTk5OjtAQj89QkJDQ0dGSUtKRElJRkdHQ0M7QUBCPkBAQkVDSU1QSEhLR0hLREhJTE1ISkxISUpMS01dUkhIRE5GQUNKSk1MUE1LTUpLRkdHSk1OUU5MYm1pdnZ3enl7en1ybWxza3B0dHR1aHBtamlra3RwbnR0eXByeXRvcnFvd3NvcXB0cnBydXR5a05WbXVscXt2aW5vaWt0Z2RvRktERkVHRUZGR0VHQkNAPjw9OTo6OkBDQD5CQ0RFSUVJSkxGSUlHRkZEQjtBQ0M+QENEQ0RHTE5IS05IREhFSUxOTUdJTEdGR0lJTE5LSUdFTkhCRk1LTUxPTU1OTUtISElPUlFSTlJmZmZxb3N4dXt6fGxoam5la3Fsc3BmbWxoaWtsdG1wdXR3cW94dG90c3J2c3BxcnRzcnR1dXZ2WFZ1dWtvdHJrb3ZsaG1lX3BHSURGRkVDQ0JFQERBPj8+Ojs7PTo8PkNBPkFDRUZKRklITEhHR0dGRUNAPURFQj5BQ0NDREdISUdNUEpGRkdLTk9LRkhJRkVERUlKSEpJRkhPS0NJTUtPTU9OT09OSkpJTFJVVVJPV2RgYW1ncHJvcnl6Z2VoaGRpbGdxbGZsbWdpa2xzbHB2dXRwbnZyb3Nyc3V0cXNzdXRzdXZ2dnl2dXR3bGp1dW1ydnFsbmxlckxIRUVIQ0JBQkQ9QkE+QT06Oj0/Oj0+QEI+QEJER0pFSUZJSEZGR0VDQkFBRkZDQkJCREVER0dJRkxRTElPSkpMTElHSEVHRkRDSUlIS0pHS1JNQk5OTVBOT09NTk9LS0tPVVdWVVNYX15caWFtaW5ocnNiZWZmZGhoZm5qZm1taGtrbXJpcXZ0c3Ftdm5vcXJzd3Nyc3R1dXZ2dnd2d3d2dHd1anN1bnV0c3FyamtzTUdIRkhCQkFERTxBQEBDPDg6PT45Pzw/QkBAQERGSEVIRkZIR0ZGRENFQ0RJRUNHRUJFR0VGR0dFSk1LSFFNSktISElFRkhIRUNJSUlLTUtPU05EUVJQUFFOT01OUE1MTVNXVlhYVVhdWl1kYGhiamlna19lZWZjZ2dna2dna21rbWxwcmh0dHVyc252b3FwcnR4cXNzdXZ1gpF5dnZ0eHV1d3htb3VvcnN1cXFpbnlNSEdISEJCQkZFPD9CQkQ8Nzo+Pjo+OkBCPj8/Q0VGREZERUhFREVDREVGR0pFRUpHQ0dIRkhHRUNGSkpHTktMS0hKTEZJSUtIRUtLTE1OT1JUT0hTVVNQUk9RTU5RTk1QV1pWWllWWl1ZWGFgYWBeaGVjYGRmaGdqaGhpZmhubGxubXFwaXV1eHJycHVwcHBydXZwdXN1d3V7fn14dnR3dnZ2eHBsdXBtc3Rub3JyeE5ISEdJREJDSEU8QEVCRT04OT4+PTw8QUI8Pz5BQUZDRUNDSURERUVGR0dHSUZHS0hESUhHSUdGREhLSUdLSE1LSktMSExLTUtKTktPTk9SVVZPS1VXU1BTUVJMT1FQT1RZWllcWllbXl5dYGNeXGFja2JgZGZncoVoZ2lmam1ucG9uc3JqdHV4cnNzdHJucHF2cnF1cnV1c355jn11dXZ2dnZ4cmh1cWtydGxxdnB0TElLSUtGQkVHRTxAR0NEQDo8P0A/Pj9CQTxAPkFBRkNFRURJRUZFR0ZISEZISElLSkZKSEhLSEZGTElISEpHTExNTExJTUtOTU1PTFBQUVVWV09LVlZVU1JRUUxPUlJQVltbXV5bXF5fX2FgYWRdY2BlZmBlaGpjc3Nmamdna29ycW9zc25zd3dxdXZ0c21vcnVvcnNwdXJ2cnSBdnV1dXd2dXd0Z3Rya3Fya3J2bnZKS0xKTEdCRURFPEBGRERDOz8/QUBAQENBP0I/QUNIQ0ZFRklGSUZHRElJR0lISkxISEpKSUxKRkpLSElLSkdLS01NSkpNTU5OTlBLT1BSVFhWTU5UVlRSUlFQTE5UU1JXW11eX11dYF9gYWFgYWNlYmRoYmRpamd2i2xqaWdtbnNxcHFwcHJ5dnJ1dXRzbW1zc21xcm90dXRycHN3dHV1d3Z1dXRlcXNrcHFqcnZud0tMTExNR0NDQUQ8P0VFRUM9QUFDQkJDREFDREFBRUdDSEdISEdKR0NISUdISkZJTEhJSk1LTkxHS0lIS0tOUUtSUU1TTUtOTk9QUE9UT1dYWFtOU1BXXFpSV1BOVFVUVFhaX2JiX2RhXmBiXmBlYWFjaW5nYmloaG54dmxoaW1uc3JwcXJycnZ0c3Vzc3Nua3NxbXByb3R2cnFxdXZ1c3d5d3V0dWNtdGtvcGpxdG93TE5MTExHRUFARD4+REVGQ0BDQUVEREZCQ0VHQ0NJRkNJSkpJSUtHREtKR0hKSUlLSEpKTkxPS0lMSEpMS1pmSmRcS2xTSE9OX25Va3NbcXBid2NTUGF2dWh1Y2F2YFhucWJkdmluemZbbHRgbGpUX3d2aWpnaWZnbG1qbW9qbW5zcnBycnFyc3Jzc3J0cm5sdG9ucHFxdXVxcXN0dnZ1dXl3dXR0YGt0a3Bwa3FycXlMTkpKSkZDP0BCPz1ERUZEQ0RCRUVERkJGRkdERUtGRUpNTEtMTEdHTUlHSktIS0tJS0tOTE5MTExJTExMW3NiZHBebG1VTU5mc11mZnFsbnRncGlfYVlubmJwcGJrampmb3F0ZXRub1xvdWdwTUpxeXZrYWBrZWVteGxrdm1ucHNycHJxcHFycXJycnRybW1zbm5vcHJ1dHFzc3R1dXV0d3h2dHRibXVrcHBscnJxektMSUhHRUQ/QUJAPkNGR0JGQ0ZFRkVEQ0hIR0RFS0hHTE5OTE1MRkpOSEpLSklMSkpKS0xNTk5NTUpNTU5bcm9vbnBwbGtNUFFsV01pYnRycGFtbnVcWWxRXG1tWnFta29teHh0c2lwXV9ya3FqVXV5eG9jXmtmYmdwcGppb3BwcnNwcXBxcHJycXFycnRsbXJtbm5vcnV0cXRydHV1dHV1enZ1dGVudWtwb2xzcnJ5SUtHR0VFRUJCQj5AQEZHQkdESUZFRUJGSUhIRUhMSkdNTU5LTU5HTE5JTEtJSk1JS0pKS09QT05NTE5OTFxoZHVdbHFXbE5QUW1UWWtea2x2YWxkc1NlY05tWWxcdHBraWx4and1aHBdXnJraFdiY3d8b2NgZ2dhZGl1eWtubnFzc3BxcHFwcnFwcHBydWttcW1tbW9xc3Rxc3J0dnZzd3Z6dnV0aG91bHNvbXNydHZITEZJREVFQ0FCPUJBQ0dESEdMSEVDQ0hLSUhGSkxMRk5MTFNSTEdMTEhOSklITkhKSklITk9NTkxKTk1KWnNwcG9xcW1sT1FSbllya2dvb3Fxb210XW5YYXRfbm9wb3Fyb251c3R0altedGN3eHJqbnpoYWFjZmJiaW10dXBzdXZzcXBwcW9ydHt/fn13bGtxbmxtbnByc3F0dHN1dXR4eHl4dHVrb3VtdG9uc3N2c0hLSElCRUVFQUE+RERCR0RISU1JRkNGSkxKR0ZLTkxFT0pLV1JLR0tKSk5JSEpMSUtKSEhLTU1NTUlLS0tTa2NbaV5faWNyclpfWWpuX2VlVWtfY1thYVFgbGhdalxuaWlkW3BmZHBdWlxrW21xY3BzbGRnY2RnYGBrbXBwb3R5cnVxb3BxbnmFiIeHhoWAdnNua21tb25xcnR0cnR1dXZ5eHhzdW5xdW53cXJ2dHdyR0dGSURFQ0ZBQEJGRURHQkhKTEhGREdLTElFRkpPTElQSUxbUUpFSEhLTUlISkpLS0lISUdLS0tMR0hLS0xNTUxKS01OVFtcVFBUTFBPTk9PVlFPT1FOT1FKSk9QUWRxaVRZV1xbXFZZW11YXVxcY2ZhYWViY2ZfX2ZrbWhtdHlydHJvcHB0hoeGhoaFhYaHg3pwbW1sa3FzdHRydHZ0dXl4eHV2cXJ1b3ZydHN1dXNHQ0VHRkVBRUNAREhERkdDSUtMSEZER0tMSUVHSVBLTE9LTFdMSUVFSElKSElLSU1KSEZHR0lHSElFRkxJSkxPTUpQXFdeUFxbYF5NWFlTXFxiXk1YWk1YYVJLWWFaUl9kXGFYW2RkVlZYXFlaWFxWWVxdYl5kYWFfZWhrZ210dHFxdHBxcoGGhoaFhoWFhYaGhoR9cmtpb3Jzc3N0d3l5eHl4d3h0cXhyeHNxcnVydE9CQ0RMTUJEQ0JFSUVHR0ZLSktIRUZJSktGRUhIUEtNTUpNUklHRUFIRkpJS0xKTEpIRkRJRkRGR0VGSkhDSk5LTFVfWWBYYGFbYFRYWVReXlpfUllcUF5cWU5fXF5TWl5jXlpdYGNgWV9jW2BeW1RYV1leXWNiY2FjZWhla3Jwb3Bwbm93hoaFhYaCe4CFhYaGhYaFf3VxcHJyc3Z5eXp5eXh4eHdyeXZ4cnF4dnR2YVNKSk1JRUNCQ0dIRkhHSEtKSklERktLS0VGSUpOS05LSExOR0hFPkdHTElLTEtLS0lHREhEQ0RFQUZKREBKTEpPW2NZX15hX1JUUldfYFxdWV5RWVxNVl9XS1FZW1BaX2FhXV5jYWBiYmJjY2VaUVhVVVxZXWNgX19jZGJob21ubGxsbHWFf4SDeXV8hIWFhYaGhYWGhoN9d3JydHh5eXl5f359eXV5dnZybnp3dnhYUUtGQ0dFQkVHSUZHSEhGRklHSEdIS0lMRERLS05NTEtIS0pISUY/R0dOS0tLTUtLS0lGR0NEQERBSElCP0lKSE9dYVpbZF1fVFFSWF1cXFxfWktXXExSXFlJTV5RT1xfYWNjY2NiXGRjYmRjZlhRVVRRW1daYF9eXmFhX2Rsa21qamxudn51gXp8hIWFhYWFhYaGhYaFhYaGgnpyc3V1e4WHh4eGhYSBfnhwend2eFxSTUNASUZDRktKRkZGSEdHSUdGRklMSk5GREtLTU5KTElLSkhIRkJISFFNS0tPTEpLSUdHRUQ/RUNJSUJCR0ZFVF1ZXlhfWV9bXVVYWE9dXVFLSlZeWF5bXVVZYFJRX19iYmBgYmJgY2JhZGRiWE9RUVFaUltdXV1dXl9fZGhnbGpubnB7e3x+e4CCg4SFhIWFhYWEhIWDhISHh4FzcneFh4eHh4eHh4eIh4WDgHx4XFNLQ0FIRkRHTVJIQ1FKRUdISEVGS0pNUEVGSUpLTkxMSUtMSUhHREhLUU9NTVBMTEpLSElDREFFRElHQ0JHRkRXVUVcVF1TVl9YT1RVTlpaTUlKVGBhW19YXl5hXU9ZYVxgYF9iY2JdYWJXYF9UUE9PT1hRXFtbXFxeX2JmZmVsZW9vd3x7gHt9f4CEhISEhIWFhYODhYKDgoWFhnpvgYaGhoeHiIeGhoaFhYSFg35JTkZERkZIRElSYlBDVl5JR0dIREZNS1BQRUlJSktOTExLTEtJSkdFSk5RUU5PT01OTE1IS0FEQUNER0VDQkVHQk1IQktLT09OTEZNRkdJSkhHTEtNT1BJTE9QT1NPTFBTUlVaWVdZWFhkV09TVFBQTk1PVFNaWFhaXVxgYWRlY2dja2xwc3J5eX97en+EhISFhISEhIKEgH57gYOBfXuFhIaGh4eHhYWFhISEgoGAfUtJRUVHRkdES01dTEdHWExHSEpIR01MUVFITEtLS05NVU5PSkpLR0dLUFNTTlBPTk5OTkdLRmBFRF9MRWZkRU5cSV5bcm1PTVVtWUxEUWBVa1dnSl1XVV5ETFFVTExTVlFSVFhXVFhVVFxVUGZaaGhkWFJqUlZVVFtcW2BgYWJhYmBmaGZua2hyenx9foGEhISEg4ODgX18enJ7gXp7f4KAg4SEhYWBhIWBg4N/fnp7TElGR0ZIRUVLT1NJSkZgVEhJT0pJT01SUUxNTExPUlVST09JTE1HSE1RW1lPUFBOT09PSUpRf1FJfFlZcnRZUW1IcW5vYVZQcXFzUENrc21xc3BTb19bblhdVlxYVWtoVV1WY1pgWVtfVlZYf2p0dXVeX3ZeV2FbW2ZbX2BhYGFdYGFnbXBsYHB3dHiBgYKDg4J/fX+Adnh6bHZ+dHh9gHx+gIGChHyAg3p/gX9+d3dOSkVITU5CRExMRklLRVFWTEtOSUtSWFdRTk9PTVFUTk9RT0tLTkdNUFNbWlNRUk9QUFBKSFp4XVR4ZWhaU1VSdmd0bHBibmZqUXJPTXdtanJwc3JxcnBvb4BdZXp1eHFxenF+c31rdX1iUmh8ZXNzb3Jye3xvfnhugHJfYGBiYVpgX2drbmtibGZnbXd+gYCDfnt4d4B0dnppcn5uc3x+d3h7foCDeHyAdXx/fHxzc05LR2BdR0FFTU1ISkpHSlBPTU1KTlZeWVVMUVNOWFpNU1NSTktPSFFSVFlXVlBUUFBQUUtIZ3hsY3hybVtLTlZ5cHVtdWJvdlBlZUpmdnFtd2+AamZ4eGlXclFoem1panp6fmx4en9vaG9ZdnZqdnVwgF9yZn1pbHh8b15fX2JhW11iZGdpamRnYmNkbGxwcHN0c3NzeXFyeGJsdWdxeXtzcnZ5foFzdXpufH15eHJuTktTdU5DQkZQUEhKS0lLUE9PT01QWmBaV0tUV1BhXlJWUVlSTFBJU1RWWFdXT1VQT05SSktyb3V1cXVxZGliV25McXBeRmh5V3ZUTGl5fXhgeXtzbmFdbW9jUmhxdW5teXB3bHZ0dHJsbl10fnprbXl8a3RsfGtwdnV4Xl9fYl5dX2RkaWdoZWVeYWJpaWlqa25va3FvbWpwYWNmY293eG9tcHN5f25xcGt7enRzb21MTFtWSEdFR1JQSUxNSktQUVBQUFBXXFhVTVVZVWVYUlJZXlNMTklUVFZXWVdPU05OTlFIUm1IaXdLYGR2dlZYbE9ubHtzYWpnf3ZVTFdraH1sbWx4X1pwenteYHpzY3JveHFoZH1pcnxeVExsYHZ1a2l1e3ptfnhrfHBcXl5iW15iZGRnZWVlYlpjY2lra3JzcnZnbGloZGdgYWthZ3NybGdtbXJ8a21oa3t0bW5rbU9IS0tISkhIUVBMTk9MS1JSUk9TUldSVlRQV1pWVlRUVGFfUE5NS1RTVFFWVk5OTE1PUEpIUU5QVUxLTFNUVFNUUFZVUVFOUVFYWVJOUFVUWFhYW1tVUlNXW1dYWFpPU1VXWFhSXllXXlZUUFlSV1dXV1heWmdyXltbWVxdX2NaX2NjZGZkY2NiWmNiZ2ZlbW5tdWVlZ2NhZl9dZ2BkbGhmZ2tocHpoZ2dqdWpoZ2lsUUlLTExNS0pTUU1RUE9MVlVUUFRVWFVZVVFaXVZVVFdVWVdPT0xNVlRRTlVTTk9NTFFQTEpRUUtRTUtLUFNVU1FRU1NJSExOT1FSUVFRVFZSWFdcV1NSUFJUVVZTWlFOU1JXVlRZVlVaVlRSVVRUVFdYVlxZXmBdXFpaXFxfY1tdYmNkZmRkZGFZYGFjYWJoaGltYmFkXl9jXVpkXGJtYV5mZWZtc2RpZ2prZWRjZmhQSktMT09MTVNQTlNRUU1YV1VUVVdXV1pVU1xgVldWWVVYU1BQSk5XU1BOVVBOUU5MU1BNT1VTTlFOTU5RVVFVUVJUVU5LTU9RVFRSUlFWV1VZWltZU1VSVFdWVllbVFBUVVhVVVpVV1pWU1JXVlVXW1haX1xVWF5cXl1bXWBhXltiYmNnZmVkYlhfYWJdYGdkZmVhXl9dXV5aWmBaX2dgXl1dYmhrYWdmaGZkYGJjYU9MTUxRUUxPVE9PU1FPUVtZV1dYW1lYWFZcamRWWFlaV1ZTU09KTlZUUE9UUFBQTU1SUlBSWFRRUU9NT1NWT1hSVFVVT05NUVRWVVRUUlRXVlpdXFpWVlFRVlhWW1tXUVRXVlZWWVRYWFZTUllXVVpeWV1fXlVeXF5gXFtfX19fWmJiZGhnZGRhWGFgYl5eZmNjYGJdXFxcXFlaW1hbYVteXVxfYl9fYmRlYmRfX2BcUE1OTlJRTVJST1NUUU9VXFpaV1tbXFlaW2RxbWhkX1tYVlVXUUxNVlNNTlJPUVJPTFFTUlVaVVNQUE1RV1dSV1NTU1hNT09RVFhWVVVTVVlYW15dW1tWUU5VVlVbXFdSVFdWV1hWVFhbVVRSWlhXXF5aXl9gVWFcYWFdYGJfXGBdY2BjZ2hkZmBZY2BhX19lZF9gYltaXFtcWVpZWFdcWlxbYF5fW15eYWBeY1xZYFpRTk9OVlFQVFFPVFRTUFdcXFxYXlxeV1xeanF3eYBjXFtVVVdRTU9WU05RUU9SVFJMUlRUWVpXVU9ST1NYV1RTVVJSWk9QU1JWW1ZXV1RWW1hcXVtbXVZTTVRVVVxcVlJVVlZYWVNVWlxVU1NdWFpdXlxgYGBWYVtjYl1hZF5cYmFiX2NmaWRmXltkYGFgYGNlX2JeWVpeW1xbWVhZV1daWlphXF1bXVxcWl1gV1tbWlBPT09ZUFVUUlFXUlRQW15eXVtgXGBVXF1oanJ9c2xnXFRXV1FOUlpTUlFUUlRVVEtSV1ZbWlpTT1NRVlZWVE9XUlNaUlRUVFhdV1hZU1hdWF5dWVpdVFVOVVZXXltYUlVVWVlZVVdaXFZUV15aXV1gXWJiXVlfW2VhX2RkXl5jY2FeZWZpZGZeXWRhYGFhYmRgYl5YWl9bXFtYWFhXV1tZW2BcW1tcW1haW15WXlldUU9PUlpQWlRVVlZTVFReXmBeXmJcYFVdXmJreXRsfWtaVVlUUFBTXFRVVFVUVllXTFJbV11bXVJPVVNYV1dUUFhSU1dTVlVVW11YW1lVWl5YX15ZXFlRV1JZWFlfW1pUVVZaWVpXWFpcV1VbXlxeYGFfZGNcXl1dZWFhZmReXmRjYFxnZGhlZGJfZGFgYWBiYl9gXldYXlpcXFpZWVdWXVpdXlpZW1xbV1lcXVZYV11TTlBWWVFdVVZZV1dVWF9fYWFgY11fVF1fYmVldYF6aFdZWVNVU1ZcWFdXVlZXXVhPVV1aXl1cVFJXU1dXVVNUWFJTVlRYV1hdXlhdW1ZdX1hfX1hcVlFYVFlaWmFZXFZXWFtaW1lZWltZV15fYF9jYmFkZFxiXGBmYWRmZF5fZGJiW2ZjaGVjZmBmX19hYWFhYF9eVlVdWVtcW1lbWVldW1tbWFhZW1laWl1fXVRZXVVOU1lWU1xUVldZVlZcYGFiY2BjXl9WW2BkYV96dW9oWVtZVVdUV1taWlxaWFlgV1BVXlxgYFxUVFhQVVdWVFZXUlNVV1paW19eWl9cVl9fWl1eWV1VUllXWVldYlpeVldbXFtcXFtaXFpaX19gYGRiY2RkYmRZYWZiZmZlXmFiYGNeYmNpZGNnX2deYWJjYWFgXl9YVFtaWltbWFtYWFxbWltXV1lYV1xbXGBdVl1dU09WWVZWWlVYVVhXWF1fYmFkYWRgXllZYWRiYGxmaF5bXFpWV1hZXFxdX1tZW2JWVFheXWFjXFJWWVBXV1dXV1ZTVVRYXFxeYGBdYFxXYV5bXltaXlhVWFdbW19gXF9YWVxcXV5fXFtdWVxgYV5gZWNkZWVmYlhjZWRoZ2ReY2BgZWNcZWlkZWlfZl1jYmNhYWBfX1tYWVtZWlpYWVhXW1taW1dYWlRZXVxaYFxVXmJOU1dZVldZWFtcWFdZXmBiYWRhZGFdXllhY2JfYWBgXlxcXFdXW1tdXV9fXFpdY1laWF1gY2RfUlhZUFdXWFlZV1ZXVlxdXmBhYF9iXllhXV1eWVxeWVhVV1tcYF5dX1paXl1eXmFdXFtaXGBiX2JlY2VmZWZiWmRmZmlnYl9jXmFmZFppaGJmaWNlXmJiY2FgYF9dXFpYW1lZWFhaWFdaW1pZV1hVVVtdXV1gYGJieEtYV1tZVlxbXF1aV1xdX2BiZGFiYV1gWGJjYmBjYWJdW1xbWFdbXF9dYF9dW2BkXVxYW2JlY2FSXFpPWVhaW1taV1pZYF1gYmJgYWNfXGJdX11bXl1ZWVRYXV1fYF9gXFteXmBiY11cWFxeYGJiY2VkZmRlZmRcZWZnaWZjYWJcY2dgXGloYmhpZWRgYmFjYV9gX11dXFlcWVhXWFlYV1xaWldXWE9YWl1hY2Zmcmt/SllXXFpaX1xbXlxYXVteX2FjYmFhXWJbYmRiYGJiYlxbW1pXWGlxYFxgX11cYWNfXllZY2VkYVNfWlJZWFxdXVtaW1tjYGJiY2BiZGFgY15gXF5eXllYVVtfXl1hYWBeW2BhYmZjX11UXWBgY2RkZmVnZWZmZV5lZmhoZ2RkYFpmZ15haGhiaGhmY2BiYGNiX19fXF1bWltZWFhYVlpWXFtaVlZVTVhXXGdpa2h1eIF2dnZ2dnZ2dnZ2dnd3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d4eHh4eXl5enp6enp6e3p6ent7e3t7e3t7e3t7e3t7e3x7e3t7e3t7e3t7fHx8fHx8fHx8fHx8fHt7e3t8fHx8fHx8fHx8e3t7fHx8fHx7e3t7e3t7fYmIhoqHhIKCgoOCg4OCgoKCgoKCgoKCgoGAgYCBgICAgYCBgYGAfnx8fHx8fHx8fHx8fHx8fHZ2dnZ2dnZ2dnZ3dnd3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3h4eHh5eXl6enp6enp6ent7e3t7e3t7e3t7e3t7e3t7e3t7e3t6e3t7e3t7fHx8fHx8fHx8fHx7e3t7e3t7e3t7e3x7e3t7e3t7fHx8fHt7e3t7e3t8iYmHiYaFgoGCgoKCgoKCgYKCgoKCgoKBgYGAgICAgICAgIGBgYB9fHx8e3x8fHx8fHx8fHx8dnZ2dnZ2dnZ2dnZ3dnd3d3d3d3d3d3d3d3d3d3d3d3d3d3d4eHh4eHh5eXl5eXl5eXl5eXt7e3t7e3t6enp6enp6e3t7fHt7e3t7e3t7e3t8fHx8fHx8fHx8fHx7e3t7e3t7fHx8e3t7e3t7e3t7fHx8fHx7fHt7e3uHiYiJhYSDgYKCgoODgoKCgoKCgoKCgYGBgICAgICAgICAgYKBgH58fHx8fHx8fHx8fHx8fHx2dnZ2dnZ2d3d2d3d3d3d3d3d3d3d3d3h4eHh4eHh4eHh4eHh4eHh4eHl5eXl5eXl5eXl5e3t7e3t7enp6enp6enp7e3t7e3t7e3t7e3t7fXx8fHx8fHx8fHx8fHx8fHx8e3x8fHx8e3t7e3t7e3x8fHx8fHt7e3t7e4aJiYiFhYOBgoKCgoOCgYKCgoKCgoKBgYGAgICAgICAgIGBgYCAfnx8fHx8fHx8fHx9fX18fHVwb29vb3Bwen59fX19fYSMi4uLi454KSkqKiopKz0/Pj4+Pj5tgH5+f397pdfT09PT1r2GiYmJiYiQzNPS0tLT1Z6GiYmJiYmLjYyMjIyOiX9/f39/f359fHx8fHx8fHx8fHx8fHx8fHx7fHx8fHx8fHx8fHt7e3t7hIuHh4aHgoGDg4GCgoKCgoKCgoKCgoGBgYCAgICAgICAgYCBgIB+fHx8fHx8fHx9fXx8fH19dXBub29vb296gH9/f39+hpCPj4+Pk3kZGhoaGhocMTMzMzMzMmqCf4CAgHut6eTk5OToyomMjIyMipTd5uTk5eTnpYmMjIyMjI+Qj4+Pj5CLf39/f39/f319fXx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx7e3uCjYeIh4eDgoSCgYKCgoKCgoOCgoKCgYGBgICAgICAgICAgICAgH58fHx8fHx8fXx8fH19fX12dXV1dXV1dXZ3d3d3d3d4eXl5eXl6eG9vb29wcHBycnJycnJyd3p5eXp6en6Dg4ODg4SBfHx8fHx8fYOEhISEhIR+fHx8fHx8fH18fH19fX18fX19fX19fX19fX18fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx7e4CMhomHh4SDhIKCgoKDgYKCg4KCgoGBgYGBgYCAf4CAgICAgICAfnx8fHx8fHx8fX19fX19fXZ2dnZ2dnl3dnZ6e3h7eHd2d3p4enp5fXl4eHl4eHh5eXl5enp5eXl5enp6eXh4eXl5eXl7e3t7e3t7eXl5eXl5eXp7e3p7e3t7e3t7fHx8fHx8fHx9fX19fX19fX18fH19fX18fHx8fHx8fHx8fHx8fHx8fHx8fHx8f4uHi4qIhIODgoKCg4KBgoKDgoKCgYGBgYGAgIGAf4CAgH+AgYF+fX18fHx8fHx9fX19fX19d3d3dnZ3fXh3d316eH14d3Z5fXx9fXp8e3d3d3d3eHh4eHh5eXl5eXp6ent7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7fHx8fHx8fHx8fHx8fHx9fX19fX19fX19fX19fX19fX19fHx8fHx8fHx7e3x8fHx8fHx8fHx+iomNjImFg4SEgoKDgoGCgoKCgoKBgYGBgYCAgICAgICAf4CAgH19fXx8fH19fX19fX19fX13d3d3d3p9eHt4fHx3e3h3dnp9fX19eXx6d3h4eHh4eHh4eHh5eXl6enp6e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3x8fHx8fHx8fHx8fHx8fHx8fX19fXx9fX19fX19fX19fX19fHx8fHx8fHt7fHx8fHx8fHx8fH2Kio2NioWDhISCgoKCgYGCgoKBgoGBgYKBgIGBgICAgIB/gIGAfXx9fX18fX19fX19fX19fXd3d3d3fX55d3d4e3p7eHd2e3x9fHt6fHt3eHh4eHh4eHh4eXl5enp6ent7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3x8fHt8fHx8fHx8fHx8fHx8fH19fX18fH18fH18fHx8fX19fX18fHx8fHx8fHx8fHx8fHx8fHx8foqJjo2JhISEg4KCgoKBgYKBgoKCgYGBgoGAgYKAgICAgH+BgIB8fH19fX18fX19fX19fn5+d3d3d3d5fHl7eHx9eXt5enl6fXx9fHt9e3h4eHh4eHh4eXl5eXp6enp7e3t7e3t7e3t7e3t7e3t7e3t7e3x8fHt7fHx7fHx8fHx8fHx8fXx8fX19fX19fXx8fHx8fHx8fXx9fX19fXx8fHx8fHx8fHx8fHx8fHx8fHx/iIeNioeFhoaDg4ODgoGBgoGCgoGBgYGCgYCAgoF/gICAf4CAgHx8fX19fX19fX19fX5+fn53d3d3d3Z4eHl3eXp4enh5eXh7eHp7eXt5eHh5eXh4eHh5eXl5enp7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t8fHx8fHx8fHx9fX19fX19fX19fX19fX18fH18fH19fX19fH19fX19fHx8fHx8fHx8fHx8fX+HiIyIhoeHhIKDhISCgYKCgYKCgoKBgYKBgIGBgYGAgIB/gIGAfHx9fX19fX19fX1+fn5+fnd3d3d3d3d3d3d3eHh4eHh4eHh4eHl5eHl5eXl5eXl5eXl6enp6ent7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7fHx8fHx8fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fHx8fHx8fX19fHx8gIeIi4eHiYWEg4SDg4KBgYGBgoGBgYKCgYGBgIGBgYCAgICBgX97fH19fX19fX19fn5+fn5+d3d3d3d3d3d4eHd4dnl5eHh4eHh5eXl5eXl5eXl5eXl5enp6enp6e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7fHx7fHx8fHx8fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fHx8fH19fXx9fXyBhoqKiYmIhIOFhISCgoGBgYGCgYGCgoGBgYCAgYGAgIGAgIGBf3x8fX19fX1+fn5+fn5+f394eHd4eHh4eHZxZGpeam15eXl4eXl5eXl5eXl5enp6enp6enp6enp7e3t8e3x8fHt7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3x8fHx9fHx8fH19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fIGFiYqJioeEhYWEg4KBgYGBgoKBgYKBgYGBgYCBgYCAgYCBgIF+fH1+fn5+fn5+fn5+fn9/f3h4eHh4eHh5bWRiZV9fXm94eXl5eXl5eXl5eXp6enp6enp6enp6e3t7e3t7fHx8fHx8fHt7e3t7e3t7e3t7e3t7e3t7e3t7e3t7fHx8fHx9fHx8fH19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18goWKiomJhISGhYSDg4KBgYKCgoGBgoGBgYKBgIGBgICAgICBgH58fX5+fn5+fn5+fn9/f39/eHh4eHh4eW5kZWdlZGJeZnh5eXl5enp6enp6enp6enp6enp6e3t7e3t7e3x8fHx8fHt8fHt7e3t7e3t7e3t7e3t7e3t7e3t7fHx8fHx8fHx8fHx9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXyChouJiIqEhYaEg4OEgoGBgYGCgYKCgYGBgYCAgYGBgIB/gIGBf3x8fn5+fn5+fn9/f39/f394eHh4eHl3Z2VkZWZkZWFfaXl6enp6enp6enp6enp6ent7e3t7e3t7e3t7e3t8fHx7e3t7e3t7e3t7e3t7e3t7e3t7e3t7fHt8fHx8fHx8fHx9fX19fX19fX19fX19fXx9fX19fX19fX19fX19fX19fX19fX19fX19fIKGi4eJh4SEhoSCg4WBgYGBgYKCgYGBgYKBgICAgYGAgYCAgYF+fHx/f35/f39/f39/f39/gHl5eXl5eWtlYWJlZWFlZV5ieHdze3p6enp6enp6enp6e3t7e3t7e3t7e3t7fHt7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t8fHx8fHx8fH18fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19g4aLhoiFhYaEgoOEhIKBgYGBgoKBgYKBgYGAgYGBgYGAgIGBgn98fH9/f39/f39/f3+AgICAeXl5eXl0Y2NlZGNmY2doZGZsZF5ze3p6enp6enp6enp6ent7e3t7e3t8fHx7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3x8fHx8fHx8fH19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX1+fn6DhouGhoaGhYODg4SDgYGBgYGCgoGBgYKBgYCAgYGBgYCAgYGBfnx8f39/f39/gICAgICAgIB5eXl6d2RhY2diYmRdW2VfYV1eYGFoeHp6enp6enp6enp6e3t7e3t7fHx8e3x7e3t7e3t7e3t7e3t7e3t7e3t7e3t8fHx8fHx8fHx8fH19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX1+fn5+fn5+foSFi4eGhoaGhIODg4KBgYGBgoKCgYKBgoGAgIGBgYGAgYGBgYF+fX1/gH+AgICAgICAgICAgHl5eW9vYmJiZF5jZ19dYWFgXF9kYlttfHp6enp6enp6enp7e3t7fHx8e3t7e3t7e3t7e3t7e3t7e3t7fHx7e3x7fHx8fHx8fHx8fH19fH19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX5+fn5+fn5+fn5/hIiLhoSHhoaEhIODgoGBgYGCgYGBgYKCgYCAgYGBgYGBgYGBgX5+fYCAgICAgICAgICAgICBeXpwXWJlZGJkXmZnZ2BZYmJhY2VfXF1ze3t6enp7e3t7e3t8fHx8fHx8fHt7e3t7e3t7e3t7e3t7fHx8fHx8e3x8fHx8fHx8fHx8fHx9fX19fX19fX19fX19fX19fX19fX19fX19fX19fn19fn5+fn5+fn5+fn5+foCFjIqEhYaGhYODg4SCgYGBgYKBgYGBgoKCgYCBgYGCgICAgIGBf35+gICAgICAgICAgIGBgYF5emxiZGdjYmdmYWBgZGFiZWRjZGNeXGJ1fHt7e3t7e3t7e3x8fHx7e3x8fHx7e3t7e3t7e3t7e3x8fHx8fHx8fHx8fHx8fHx8fHx8fH19fX19fX19fX19fX19fX19fX19fX19fX1+fn5+fn5+fn5+fn5+fn5+fn9/gYeMiYWGhoeFg4SDg4GBgYGBgYKBgoKCg4KBgIGBgYKBgYGCgoF/f36AgICAgICAgIGBgYGBgXp7dGdnZmZkZGZmYF5fYWNlaGRlXmJkYHR8e3t7e3t7fHx8fHx8fHx8fHt7fHt8fHt7e3t7fHx8fHx8fHx8fHx8fHx8fHx8fHx8fH19fX19fX19fX19fX19fX19fX19fX19fX19fX5+fn5+fn5+fn5+fn9/f39/f3+CiYqIhoaIhoWDhIOCgYGBgYGBgoGBgoKCgoGAgYGBgoKBgYKCgX9/f4GBgYGAgYGBgYGBgYGBenptaGNjZ2ZnZWdmZmdiZWRlYmdbYmVgdnx8e3t8fHx8fHx8fHx8e3t8fHx8e3x8fHt7fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx9fXx9fX19fX19fX19fX19fX19fX19fX19fn5+fn5+fn5+fn5+f39/f39/f39/f4SJioiGiYeFhYSEg4KBgYGBgYGCgYKCgYGBgYGBgYKBgoGBgICBgH9/gYGBgYGBgYGBgYGBgYF7emlpZGNqZmFgZmVjY2NnaWRjYmBiZGJ0fXx8fHx8fHt8fHx8fHx8e3x8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fH19fX19fX19fX19fn5+fn5+fn5+fn5+fn5+fn5/f39+fn9/f39/f39/f3+AhIqMiIeJhoSFhYOCgYGBgYGBgYKBgoGBgYGBgYGBgoKBgYGBgYGAgH+BgYGBgYGBgYGBgYGBgXZzZWRnY2RmZWJlZmdkZmhmZWNgYGNkYHF9fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fXx9fX18fHx9fX19fX19fX19fX19fn5+fn5+fn5+fn5+fn5/fn5+f35+f39/f39/f3+AgICFioyJiIqJhoaDgoKCgYGBgYGBgoGBgoGBgYGBgIGBgYGBgYGCgX+Af35/foCCgoKCgoKCgoKCc3NnZWRkZWlqaGZnZ2NhZmZlZmdmZWVjdX18fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fX19fX19fX19fX19fX1+fn5+fn5+fn5+fn5+fn5+fn5+f39/f39/f39/f39/gICAgICAgIWLioqJioeHhoSCgoGBgYGBgYKCgYKBgYGBgIGBgoKBgYGBgYGAf4B+dHRzdX1/goCAfn5/gYB0cmdkZWNmaWppZWNlY2BmZGRnZ2JiZWFwfXx8fHx8fHx8fHx8fHx8fHx9fX18fHx8fHx8fHx8fHx8fHx9fX19fX19fX19fX19fX19fX19fX1+fn5+fn5+fn5+fn5+fn9/f39/f39/f39/f39/f39/f4CAgICAgIB/houLiouLh4eHhIOCgYGBgYGBgYKBgoKBgYGBgYKCgYCBgYGBgoCAgH5zc3NzdHV4dXV0dHV2dXVwZmNmZWhoaWdoZ2VmZWJfZGVmY2BiZ3d8fHx8fX19fX18fHx8fH19fX19fX19fXx9fXx8fX19fX19fX19fX19fX19fX19fX19fX19fn5+fn5+fn5+fn5+fn5+fn5+f39/f39/f39/f39/gIB/f3+AgICAgICAgICHjIyIi4qHh4eEhIKBgYGBgYGBgoGCgoGBgICBgoGBgYKBgoKCgYCAfnNzc3Nzc3NzdHR0dHNzdW9jY2FnZWhoZ2pmZGVnZmhmY2JlYl5ieX18e3t8fX19fX18fHx9fX19fX19e3x9fX19fX19fX19fX19fX19fX19fX5+fn5+fn5+fn5+fn5+fn9/fn5+fn5+fn5/f39/f4CAgH9/gICBgICAgICAgYCAf4CAgYGAgIeLi4iNiYiJhoSFgYGBgYGBgYKCgYKCgYGBgIGCgoGBgYKBgoKBgIB+dHNzc3Nzc3Nzc3Nzc3N1cmdlZWRlamhoZ2ZpaGdjZWViZGNoZGd7eHVzc3R2dnl4dnR0dHZ3d3d2dHR0dXV4d3h4d3d6e3x9fXx9fn5+fn5+fn5+fn5+fn5+fn5+fn5/f39/f39/f35/f39/gH9+fHt7fX58eXl2dnZ5fHx6end2d3l7fXt4hIyMioyHh4iEhYSBgYGBgYGBgoGBgoGBgYGAgYKCgYGBgoGBgoGAgH51c3Nzc3Nzc3Nzc3Nzc3VzaGVnaGVrbGhqZ2lqZ2dnZmRkYmVkbnV0dHNzdHNzc3Nzc3Nzc3Nzc3NzdHNzc3Nzc3Nzc3N0dHV1c3V3eHl7fn59fn98f39/f39/f39/f314fH5+fXx4dXZ3eXd4dnRzc3N0dXRzc3Nzc3NzdHNzc3R0c3R0dHODjI2KiYeIhoOGg4GBgYGBgYGBgYGCgYGAgYGDgoKBgYCBgYGBgYCAf3VzdHRzc3Nzc3Nyc3NzdnZpY2hqaGpsZWZpbGhgZmVkY2BkZGZ0dXV1dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHRzdHRzc3Nzc3R2dnV1d3V4fH9+fX9+fHp4dXN0dXV1dHNzc3Nzc3N0dHR0dHR0dHR1dXR0dHV1dHR1dXR1dXV1dIaMjYuIhoeEhIWCgYGBgYGBgYGCgoGAgYCBgYKCgoGBgIGBgYGAgIB/dnNzc3Nzc3Nzc3Nzc3N2dnNnZ2pmaGdmaGhmZGlnY2NnZWVmcHZ1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dHR1dHR0dHR0dHRzdHR0dnV1d3Z0c3R0dHR0dHR0dXV1dXV0dXV1dXV1dXV0dHNzc3N0dHNzdHR0dHR1dXR1iY6MjIqHh4SEhYKBgYGBgYGBgYKCgoGBgICAgoKCgoGBgYGBgYCAgH93c3Nzc3NycnJyc3NzcnZ2dW5kXWNnZWlraGVoZ2dqamlnZXB2dXV1dXV0dHRzdHR0dHR0dHV1dXV1dXV0dHV1dHR1dXV1dXV1dXV1dXR0dHV1dXV1dXV0dHV0dHV1dXV1dXV1dXV1dXV1dXV1dXV0dHNzc3Nzc3N0dHNzc3Nzc3R0dHR0dHWKjoyMiYaGhIeFgoGBgYGBgYGBgoKBgYGBgYGCgYKCgYGBgYKBgYCAf3hzc3Nzc3JycnJyc3NzdnZ3d2liaGhnamtpaGZkZGVmaWhwdXR0dHRzc3JxcnJ0dXV0dHR0dHR0c3NycXFxcXNzdHR0dHR0dHR0dHV0cnJyc3R0dHR0dXV1dXV1dXR0dXR0dHR0dHR0dHR0dHR0c3Nzc3Nzc3Nzc3Nzc3N0dHN0dHR0dHR0dYuOjImGhYWFh4SCgYGBgYGBgYGBgoKCgYGAgIKCgoGBgYGBgYGBgIB/eXNzc3NycXJycnJzc3N3d3d3bGpoZGhpa3Z6a2VmZWhnbXJzdHN0c3JwcHBxcnN1dXR0c3Nzc3JycXBvb29vcHFzc3NycnJyc3R0dHNxcXFyc3R0dHR0dHRzc3Rzc3N0dHR0dHRzdHR0dHR0dHRzdHR0c3NycnFxcnJzc3Nyc3NzdHR0dHN2jZCMh4eFhYSEgoGCgoGBgYGBgYGCgoKBgYGAgYGCgoGBgoKBgYGAf395c3NycnFxcnJycnNzc3d3d3dzc2pnaWloeX99cW51bG5wcXJycnFxcG9wcXFxc3R0c3NycXFxcG9ubm1ubW5ubnBxcnJycnJycnJzcXBvb3BxcnJzc3JxcnJycnJycnJycnJzc3Jzc3Nzc3Nzc3Nzc3Jxb29ubm9vcXJzc3Jyc3NycnNzcnaPj4uHhoWFhYOCgoKBgYGBgYGBgYGBgoGBgYGCgoKBgoGCgYGCgX9/f3hxcHBwcXFycnJyc3Nzd3d2dnd2cnF0c252f352c3hwcHBycnJycXFwcHFxcXJzc3Nzc3JxcXBwb25ubm5ub25vcHBxcXFxcXBwcXJwb25vcHFxcXFxcHBxcXFxcXJycnJycnJycnFxcnFxcnJycnFwb29ubm1ubm5vcXJycnJycnJyc3JxeI+OjYaDg4aEgoOCgoGCgYGBgYKBgYGCgoGBgYKCgoKCgoKBgYKBf4B/d29wb3BxcnJyc3Nzc3J2dnZ2dnZ3dnZ1c3l/fnd3d29wcXFxcXFxcHBwcXJycnNzc3JycXFwcHBwb29vb29vb29wb3Bvb29vcHBxb29vcHBwcHBvcG9wcHFycXFxcnJxcnFxcXFxcXFxcHBwcHBxb29ubm5tbW5ubm9wcXFxcXFxcXFxcXB7j42NhoODhYOCgoKCgYKBgYGBgoGCgIGCgoGCg4KBg4KBgYGAgYF/f392bm9wcHBxcXFxcXBwcHZ2dnZ2dXR0c3NxfYB9fX9zb3BxcXFwcHBwcXFwcXFxdHFycnFxb36CbnBwb29wcG9vb29vb29vb3BxcXBub3Bwb29wb29wcnJycnFxcXBxcnFwcXFxcHBwcHBwcHBwb29ubm1ubm5ubm9ub3BwcHFxcXFxcXFxcIKRjoqEhIOFhIOCgoGBgoKBgYKBgYGBgYGCgoKCgoKCgYGBgYCBgX9/gHVvb29wcXFxcXBwcHBwdnZ2dXRzcnJycnGAgoCBeXBwcHBvcHBwcHFxcXFxcXCHiHBycXB0moFucHBwb3BxcHBvb29wb29vcXFwcG9wcG9vb25vcHFxcHBwb3Bvb3BwcHBwcHBwcHBvb29vb29vbm5tbW1ubm5ub25vb3BvcHBwcHBwcHBwiZCMiISDhIaDg4KCgYGCgoKCgYGBgYCAgYGBgoKBgYGBgYGBgIGBgH+AdG5vb3BxcXFwcG9vcG92dnVzcnFxcXFxcICDg39ycHBwcHBwcHBwcHFxcHBxcX2ig29yb42ffG9wcHFwcHBwcHBwcHBvcHBxcXBwcHFxb29vbm9wcHBvb29vcHBvb3BwcHBwcHBwcHBvb29vbm5ubm5ubW5ubm1ubm9wcG9vb29vb3BzcXWPj4uJg4KFh4ODgoKBgoGCgoKBgYKBgYGBgYGBgYGBgYCAgYGAgYGAf4B0b29vbm9vb29vb29vb3Z1dHNxcXFxcXJygIKCgXRxcXFxcXFxcXFxcXFxcXJxdZ6id3F3oJx9b3FxcXFwcHBwcHFxcXBxcHBwcXBwcHBwcHBwcHBwcHBwcHFxcXBxcXBwcHFwcHFxcXFxcXFxcXJxcnFwcnRycnR0dHR1dnRzdHR0dXd3gpCPi4iDgoaHhISCg4GBgYKCgoGBgoGBgYKBgYGBgYGAgICBgYCBgYB/gHVvb29vb29vb25vb29vdXRzcnJycnJycnKDg4OCdnFycnFxcXJxcnJxcXJycnJxmKmQb4KjnX5wcXFycXFxcXFxcXFxcXFwcXFxcXFxcnNzcnJyc3V1dHR0dHR0dHV2d3d3d3d3eHh4eHd3eHh4d3Z3dnV2dnZ2d3h6e3x7e3t6enp6enyGkI2LiIODiIeHhYODgoGCgYKBgYGBgYKCgoGBgYGAgYCAgYGAgIGBgH+Ad3FxcXFxcG5ucG9wcG92dHV1c3Nzc3NzdYiDgYN5cnNzcnJyc3Jyc3Nzc3JzdHKTqaR7iaGdfHJzc3Nyc3N0dHV1dXV1dHV3eHd3d3d3eHh3eHh4eXl5eXl4eHl5eXp6e3t7e3t6enp5eXh3d3d1dnV2dnd5enp7fn5+fX1+fn5/gH5+gIyQi4qHg4WIi4iEg4SDgYGCgYGBgoGBgoKCgoKAgYGBgYCBgYGAgIGAf4B8enp5eXx5eHh2dXZ2dHl2d3h3d3Z3dnZ6fnx+fXx2dnd3dnV4enh4eHh4d3h5eaC0qaapqZd9e3l5eXh4eXl6enl5eXh4enp5eXh4eHh3dnd3eHh3eHh5eXp7e3p8fH1+fX9/f359e3t7e3p5enl5e3t/foB/fn5/fn19fX5+f35+fn6AjpCNioeEhoqLiIaGhIOBgoKBgYGCgYGCgoKCgoCBgoKBgYGCgYCBgIF/f39/fn19fX9/f318e3t7eXh4eHh5eXl4eXh5eXl4enp6enp6e3t7fH1+fHt8e3uKr6Shtaqso397enp4eXh4ent6enp5eXp8fHt6enx8fHp6ent9fHx+fn+AgoGAgYKAgH9/gYGBgIB/f35+fn5/fX1+f4CAf35+f39+fn9/f39/gH+Af4OQjoyHhoWIi4yIh4aFg4GCgYGBgYKBgoKCgoKBgYKDgoGBgYGBgIGBgIB/goOCgoGBgX99f39/f4F6enh4d3h4eHh5eHh5enp5e358enx9fXt8fX19fX19fZmllqKxoJmnlH2Af319fYCDgoCAf318fXx9fXt9fXx8fH19fX1+gYGChISDgoB/gYGBgH9/f4B/f39/f39+fn9/f39/f35+f3+Af39/gICAf4CAgICAhJCPi4eGhoiLi4mKhYaDgoKCgYGBgoGCgYKBgYGBgoOCgYCAgYGAgIGBgH+ChIKCgICAgH9+fn+AgH9/fn18fX19fYB/fX+Af35/gH9/fn9/gICBgICBgIGBnJyNoLCgn6KfgICBgH5+f39+f4B/fn5+f39/gYB/f4CBgYCAgYOEgoGCgoGCgH+AgYCBgYGAgH+BgICAf39/gICAgYGBgIGBgYCAgICBgoGBgYCAgYGFjo6MiYaHiYyLi4qGhoOCgoKBgYGCgoOCgoKBgIGBgYKCgICBgYCAgYGAf4KFg4KBgYCAf39+fn+AfX5+fn19fX5/fn9/f35+fn+AgYCAgICAfn9/gICBgYCXm5CYsaGYlZ2FfX5+foB+fn5/f35/gIGBgoKDg4KCg4KBgYKDg4OCgYGBgYKBgoKCgYKBgoGBgYGBgoKCgYGCgYKCgoGBgoKBgYKCgoKCgYGBgoKCgoaPkY+KiImKjI6MiYaFgoKCgoKBgYKCg4KCgoGBgYGBgYF/gIGBgYCBgIF/gYWEg4KCgoGCgYCAgIB8fHx7fH18fH9+fn9+fn5+f35/f39/f39/gH5+gIF+f6GrpZakm5uYoqCHf35+f4B/gIF/f39/f3+BgYGCgoCAgYKDg4SDg4ODgoKCgoKCgoKCgoKCgoGCgoKDg4OCg4ODgoKCgYKCgoODg4ODgoKCgoODg4KCh5KTkIuKi4uPj42Lh4SCgoKCgYGBgoKDgoKBgYGBgIGBgICAgYGBgIGAgYCAg4SDg4OEg4ODgoKCgXx9fHx9gn1+f4GCiIGCgoSBgYGDg4GBgYKDgoSEh4+hsqehoJmdnaaorKmhmpGHgYCAgICAgH9/f3+AgICAgH9/gYODhYSEg4SDgoKCg4OCgoOCgoODg4ODg4SDg4KEhYWDg4SEgoKDhIOCg4ODg4OCgoODgoCKlJOPioqMj5GPjYuGg4KCgoKBgYGBgoOCgYGBgIGBgoGBgICBgYGAgYCAgH+BgoODg4SEhIOCgoKCfXx8fn6AgYOAg4OChIaFhoaFhIWFg4ODg4ODho2frbGmm5qgm56cnJ6hpKOdlIiDg4KDg4ODgoGAgIKCgYOCgYKCg4OEhYWEg4OChISEhIOEhISDg4OEg4ODg4OEg4SDhIWEhISDg4ODgoKCgoKCgoKBgYKCgo+UlI+Njo6RkY6KiISCgoKCgYGBgYGCg4GBgIGBgYGBgYCBgIGBgYCBgICAgIKChIKChIOCg4ODgoJ9fX2AgH+AgoGDg4ODhIaEhIOEhYWDg4GBg4OCg4qXmZeWmKCbnZ6dmpqXkImGh4eGhoeHhoaEgoGCg4SDg4ODg4ODhISFhYWDhISFhISEg4KBg4OCg4SEg4KCg4SCg4ODg4OCgoKCgoKCg4OEhIOFhYWFhoaIk5OTkI+PkJKRjIqIgoKCgoKBgYGBgYKDgoKBgIGBgYGBgICAgYGBgICAgICAhISEgoKCgoGBgoKBgX+AgYOCgICAf4CCgoGDg4KCgYODg4SDg4GDhYSCgYGGjpSTl5qcnZyVj4mHiIiHh4eIiIiFhIOBgIGBgoKCg4GCg4SEhYSDg4OEg4OEhIOBgYGCg4OEhISDg4ODg4OEhIODgoSDg4ODhIWFhoeHh4eIiIiJiY6Tk5KOj46Rko+LiYeCgoKCgoKBgYGBgoKCgoGBgIGBgYGAgICAgYGAgIGAgICDg4KCgYKCgYGAf4CBhYWFhoOCgYB+fn+BgoSCgYKDhIOCg4ODg4KChISDhIODiJCUjpSYkYeCgoWFhYOEhIWFg4KBgH9/gIB/gIGEg4OEhYWEgoKBgoOCg4OFhIKDhISEhYaGhoaGhoWFhoeHhYaIh4aHiIeGhoaIiYeGhYaGhoeIkZOSkI6QjpGRjImHhYGBgoKCgoGBgYGBgoOBgYGBgYGBgICAgICBgYCAgICAgISEg4KBgoGAgYGAgYKIh4aHhYSCgH99fX6AgH+AgYGBgYGBgoGBgYKDgYKCgoGAh5uIjIeCg4KBgICAf4GAgICAgH9/gIGBgYKCg4OEg4OEg4OCgoGBgoODg4SEg4SEhIOFhYaFh4eIh4eHh4eHh4eGhoaGh4WFhYaGhISEhIWEhYaSk5GOjo+OkI6JiIeEgoKCgoKCgoGBgIGCgoKCgoKCgYGBgYGAgYGBgICAgYGAgoSDg4KDgoGCgYKDg4iHh4iHhYSCgX5+gICAfn5/f4CBgYGCgoCBhI2DgH+AgYB/g4mOgIGCg4OAf39/gICAgICAgICCg4KDg4ODgoOBgYKCgoOCgYKCgoOCgoSDhISDg4SEhYWFhYaGhoaFhISEhYWEhIWFhYSEhISDhISEhISEipSTkZCQj46NiYaFhIOBgYKCgoKCgYGAgYKCgoKBgoKBgYCBgYCBgYGAgICAgYGAg4OCgoOCgoKBgoOCiImJiYiHhYSDgYKEhIOBgoKCg4SCgoSEgoOKloiEgoSCgX9/jJWCgoGChIOBgYGCgoODgoGDg4SDg4SEg4OCg4KDg4ODg4KCgoKCgoGDhISEhYSFhYWFhIWEhIWFhYWDg4OEhISEhYWFhISEhISEg4ODg4OOlZKQkZGPjYyHhYODg4GBgoKCgoKBgYCBgoOCgYCCgYGBgICAgIGBgYCAgICBgICDhYSEhIODg4SDhIOGh4mIhoWDhIODg4WDgYCDgoWGhISDg4OChI6Zi4OFhISEgoCRmYaCgoKEg4OCg4GBhIWEg4ODgoKDhISDhIODg4SFhISDg4KCgoKCgoSEhYSFhYWFhYODhYWFhYaFhoWEhIWEhYWGhYWFhIWEhISDhIODhJGUk5KSkI2MioWEhIODgYGCg4KCgoKBgYGCg4KBgYKBgYGBgICBgIGBgH+AgIGAgYaGhoaGhoaHh4aGhYSDhYaCgIGBgYGHgoB+f4GBkIyDgX9+fXx9jJyOgIKBgYKChZSUjIGCgYKDgoKCgYKDhYODg4KDg4OEgoKEhIOEhIWEg4OCgoKCgYKCg4ODg4SFhYWFhIOEhYWGhYWEhISEhIOEhIWFhIWFhIODhIOEg4KGlJSSlJKPjYyIg4SEg4KBgoODgoKDg4GBgoKBgoKCgYGCgYGBgYCAgYGAgICAgICAhYWFhYaGh4aGhoWGg4ODg4GAgoKCgYKAf35/f4GWl4mAfX19fXuBmIyAg4GBgYCOlIyQgYKBgoKCgYKDgoODgoOCgoKCg4OBg4SDg4ODg4OEhIKCgoKDgoKDg4ODhIWEhISEg4OEhIODg4OEhIODg4ODg4SDg4ODg4KDg4KDgouUk5KTko2NioaDhIOEgYGCg4ODg4ODgoGBgoGCgoKCgoKBgYGBgICBgYCAf4CAgICDhISFhYSFhYWEhIWCg4KDgoKDg4OBgICAgICAgZWfin5+gH2Hi36EhIOEgoODgo2JhYyCgoODg4KCg4ODgoODg4KCgoODgoKDg4KCg4KDg4WEg4ODg4SDg4SEhISEhYWEhIWEg4SEg4OEhISEhISEg4SEhYSDg4SEhIODgoKDkJSSkpKPi4yIhoSFg4OBgYKDg4ODg4OCgYGCgoKCgoKDgoCBgoGAgICAgIB/gICAgISDhYWEhYWFhYSFhYOEhIWDg4SEhIKCgoOCgoSBkaGKf4yFfYaJgH6FhYWEhYJ/fX19gIOEg4KDhIOEg4OEhISEg4OEhISEg4SEhIOEg4OFhoWFhYSFhYWFhYSFhoaGhoWFhYWFhYWFhYWGhoWGhoaFhoaGh4aFhYWFg4SEhIeTk5OSko2KiIWGhYWCgoGBgoODg4OCg4KBgYKDg4ODgoKBgIGAgICAgICAgH+AgICAhYWFhYWGh4eGhYWFhISFhYSEhISEg4ODg4OEhYOJkYOEi4WCgYF+fYGHhoOAfn5/f39/f4ODhIuGhISEhIWFhISEhISFhYWEhYSGhYWFhYaGhoWGhYWGhYWHhoaGhoaFhIWFhYWFhIWGhoaHhoaGhoaHh4iIiIaFhYaEhYWGjZSTkpGQi4qHhoeGhIGCgYKDg4ODg4KDgoGBgoODg4KAgYGBgICAgICAgICAf4CAgICHh4eGhoeHiIeHhoaEg4ODhIODg4OEg4ODg4OEhISEgYKCgYmBf359foWBf39/f39/f36AgIOPl4aFhoWFhYWFhoeHhoaFhoWFhoeHh4iGh4eGhoaHh4eGhoeHhoaGhYODhIWFhoSFhYaGhoeHhoaGhoeHh4eIiIeGhoaHh4eRlJORkZCLiIiFhoWDgoKBgoODg4ODgoKDgoKCgoOCgYCBgICBgICAgIGAgIB/gICAf4aHiIeHh4eIiYmIiIODgoKDgoSEhIWEg4KCg4SEhIOBgICAhIR/fn5/gH9/f39/gIB/f4B/gZWWko+IiIeHhoeIh4iHiIiIhoaHiImJiYmIh4aHh4eJiIaHh4eHhoeFg4OEhYaGhYWFhoaGh4eFhoeGh4aGh4eHh4eHh4eFh5OTkY+RkIuHhoWFhIKCgYGCg4ODg4ODgoKCgoGCg4KCgIGBgYCAgICAgICAf3+AgYB/hoiIiIiHh4iJiYmIg4KCg4ODhIWHh4aFg4OFhISEg4GAgIGMiYGAgYKCgYGBgYB/gH9/fnt6ip2npJiMiYuLiImJiYmKi4qIiIiJiYuLioqIh4eIiIiHh4iIh4eGh4aEg4OFh4eHhoWFhISDhYWEhYWGhISEhYWFhoWGhYOJlJKQj5GOioaFhoWDgYGCgoKDg4ODgoKCgoKCgoKCgYGBgYGBgYCAgICAgIB/gICBgH+GiYiIiYeIiImJiIiEgoKDg4KDhImKh4aEhIWEg4OCgICAhISCgoKCgoKCgH9+fX19fX5+fHt9maekopiPlYuIiIqJiImLiomJiImIioqJi4mGhoaGh4WGiIiIiIaGh4SDg4SHiIiIh4WCgoGDg4KDg4SCgYKDgoGEg4SDgY6TkpCPj4uJhYWGhIKBgYGBgoODg4OCgoKCgoKCgoGBgYGBgIGAgICAgICAgH+AgIGAf4WIh4eHhoeIiIiHh4SCg4OCgoOFiYqJh4WHhYSFhYKAgYOEgoOCgoKDgX59fX5+fn5+fn1+fXyBnKCdnZyPhoWGh4eHh4iHh4mHh4aIh4aJiYODhIOFhISFhYaIiIaFg4KCg4WHhoeGhoSCgoOEgoODhIKBgoGBgYODhIOEkZKQjo+Oi4eEhoaEgoGBgYGDg4ODg4KCgoKCgoKCgYGBgIGBgYCAgIB/gIGAf39/gIB/hYaGhYaGhoeHiIeGgYKEhIOChYeIi4qGhIaEgoaGgoKEhIODg4OCg4F9fH1/gH9+fn59fH1+fHqDnJuclYSDgoODhIaFhYODhYSEhISEhIWEgoKCgoSEgYKDg4WGhYSCgoGCgoODhYSEhIWEhIaEg4SFg4KDgYKDg4SFhIeSkY+Nj4yJhYSFhIWCgYGBgYODg4ODgoKCgoKCgoKBgYGBgYGAgICAf4CAgYB/gICAgICDhIWEhYWFh4eHh4aAgYGFg4OEhYSHiIWCgICAgX9/gYSEg4ODgoKAfX1/gICBf31+fn18fX17enmJm5uXhYCBgYGBgoKBf36BgYGCgYOBgoGCgoKBg4SAf4CAgYKCgICAgYCBgoGDgYGChIODhYSCg4SDgoKBgoSDhYWGi5ORj4+Pi4iFhYODhIGBgYGBgoODg4KCgoKCgoKCgoGBgYCBgYCBgH9/gIGBgICAgH+AgIKCg4OChIOEhYWGhn+BfoCBgICAf4GDgn9+fn5+fX+ChISCg4KDgn59fn+AgIGAfn19fX1+fXx6enuNmpWFgoB/f39/gIB+fYB/f4CAgX+AgIF/f4CBgX59fX+AgX9/fn+AgH+AgICAf4CCgICCgYGDgYGAgYGBgYKEg4aPkpCOj42Kh4eGg4ODgYGBgYGCg4ODgoKCgoKCgoOCgYGCgYGBgICAgH+AgICAgICAf39/gYGDhIGCgoOCg4SFgIB/fH19fn19foCAf31/fn1+gIODg4KCgYF/fX1+f4CAgH9+fX19fHt7e3p6enuPk5Gaj35+f35+f35/gH9+f3+Af4CAf359fn9/fn18fn+Af35+f3+Af39/f4B/f4B/f4CBf4B+f39/gH9+f4B/hZKSj46Pi4uHiYWEhIKBgYGBgYKDg4ODg4OCgoKDg4KAgYKBgYGAgICAf3+AgIB/gIF/f36BgYSEgYKBg4OCg4OBgH98fn9+fX6Af4B/foF/f4CBhIOCgYB/f359fn5/gICAfn19fXx7e3x6enp6eYCMjIyLgX9/fn9/foCAf35/f4CAgoB/fH5+f35+fXx/f4B/fn5/foB/f35/f4CAfn6Af39+f35/f35+fn19fX2Fk5KOjIuKiImIhISEgoKCgYGBgoOCgoOCgoODg4ODgYCBgYGBgYCAf39/f4CAgICAgIB/foCBhIOCgYGDhISDhICBgICBgIGAgYKCgoGBgoCBg4ODgYGBgYCAfX19fn5+f359fX19fXx8fHt6enp6eX+FgICBgYKAgIB/f4F/gICAgYGCgoB+gH5/fn5+foGAgYB/f39/gICAf39/gYB+f3+Afn9/fn+Af31+fX17fIaTkYyLioeHioiGhoSDgoGBgYGCg4ODg4OCg4OCgoKBgICBgYGAgH9/f39/gICAgICAgH9+fn+BgYGAgISGh4aHgoSDhYKBg4ODhYSEhISEg4ODhIKCgoKCgX9+fX19fn6AfX19fX19fX18fHp6eXl5eoGCgoKFg4GCg4GAgoCCgYGDg4ODgYGCgIGAf4CBg4GEgoCAgYCBgYGAgYCCgn+BgIF/gIB/gICAfn9/fnx8iZSQiomIiIiJiIaGhoSCgoGBgoKDg4ODg4KDg4KCgYCAgICAgYGAf39/f4CAgICAgIGBf359fn5/f39+g4aHh4iChYSFhISFhIWGhYaGhoWGhYGBg4ODgoKAfX19fX19fn59fX19fX18fX18e3l5eXl5fIKDhIWCgYSDgoKDhYeCg4SDgYKCg4OCgoKCgYKFg4iFgoGCgYKDgYGBgYSDgoOCgYKCgICBgIF/gIGAf36Ok4yHiIeIh4aGhYaGhIKDgoGCgoODg4ODg4OCgYGBgH+AgYGBgYB/gH9/gICBgH+AgYB/fn19fX5+f36Ag4SHh4SGhoaFhoaHh4aHh4iHh4eGf32AgICCgX59fX19fX19fX19fX18fH5+fnx7eXh4eXl5gIKDf4OMhIOEhISXl4ODhIF9foGBgoGCgYKBhIaIjIWDgoKBhIKEg4KDhYSEhYODhIOCg4OCgoKCg4OCgpGQi4iIh4mHhoaEhoWEhISDgYKCg4ODg4ODgoGBgYCAgICBgIGBgH9/fn+AgICAf4CAgH9/fn1+fn+Bf4CCgYWFhYeGh4eHh4eIhoeHh4eGh4V+fX18fX9+fX19fX19fX19fX19fXx7iJKCe3x6fIZ5eXl8gYF+iJWDg4OEhJSTgICBf39/fn6Ei4B/gYCEhpCJhYSCgoGFhYuDgYKFhYaGhIOFhYOEhIODhIOEhISIko+MiYiIiYeHh4WGhYSEhIKBgoKDg4ODg4OCgYGBgYB/gICAgICAf39/f4CAgICAgYGBf39/f4CAgIGBgYGBg4OGh4aGh4aGiIeGhoaFhIOFhH59fHx8fX18fH19fX19fX19fX18fH+RlZaDe3qElHx5enp7fH6Bg4GCgYOCgH59f397iJF8fI6Wf31/f4KGioWDg4SDgoONiX99f4OEhYWDhYaFhIWFg4SFhYaEhI6Rj4yKioyJiImHhYWFg4SDgYGCgoKDhIODg4GBgICBgICAgYGAgIB/f3+AgIB/gICAgX5+f4GBgoKCgoODgoOCgoWGhISFhYSGhIOEg4KBgIKAfn19fHx9fXx8fH18fH18fX19fHx8e4uRl4x6e3yBenl6e3x5eX19f4B/gX99e3t/fn2ClZF/hIh9fH5/goR8fIGChIN/f4eDfYOBgIKCgIODhISEhISChIOEhYGEkZGOi4yMjoqJiYWFhYODg4KBgoODgoKDg4KCgYGAgIGAgICAgICAgH+Af3+Af357gICBenyAgYKDhYODhIWFhYODg4SCgYKDgoOCgoGBgIB/gX5+fX19fHx8fHx8fHx8fHx8fHx9fHx8f36Kgnt6e3p4ent7fH18fn5/f35+fn59fICBgH2Gj4F+fYJ+f36Agnx8gH+CgIGAfn17ioJ9gH9+gYCAgYKAgoCAgIGAf4uUj4yMjo6NiIiHhYWFhIOCgoKCg4OCgoODgYGBgICAgICAgH9+fXx7fHx9f3+AgHx6gYF4e4CCgYOFhIOFhYaHhYSAhpSIgIKBgYGBgH9/f3+Afn5+gHx8fHx8fHx8fHx8fHx9fHx8fHx9fHl6e3t4eHl7e3p8goCBf4CBfX9/gH99gIKCgICAgX+CkYF/f4CAfoB+fn9+gIGBfXx9e319fXx9fHx9gH+AgH6Afn6ClJKNjI2Oj4qFhoaFhISFg4KDgoODg4OCgoGBgYGAgICBgICAf4CAf39/fXt6fICAgHh+gXd7gIF/goKCgoKEhoeGhn6IlYp+gIGAgIB/foB+f39/fn+Bfnx7e3x8fHx8fHx8fH19fHt9fHx8e3x8fHp6eXt8e32Fg4OAgYF+gH9/gH+FgoF+gH9+foCFhoKAfn6Dhn99fH5/gIGAf39+fX19fX57fH1/f3+AfX9+f4yRjo2Njo2Nh4SGhoWEhIODg4OCg4ODg4KBgYGBgICBgYGAgYGBgYGAgH9/f397en9/e3mAd3p/f31/f3+Af4KEhoaFf3+FgX5/gIB/gH5+f35/gIB/gIB/f319fHx9fn18fH19fX19fH58fXx7fXx8ent6fH19f4aFg4CAgH1+fX5/foyEgYd+fXx8f36Cgn99fX19gXx7fXx+gYSDgYB+fn5+fXx+f4B9foB+f36Eko2OjI+NjIqGhIWEhIODg4OCg4KDgoOCgYGBgYGAgYGBgYB/fXx8fH1+f39/f397e399d352eH59fH18fX5+gYGCg4F6fn58fn6Af35/f35/fn+AgH+AgH9/fn9+fn5+fn1+fn99fH59fn19fXt8fHx7e3p9foCAg4OCf35/fHx8fXx9gYN+jH58e3t9fn1+fn17e3t9fHt7e3uAhoSChIOBf4B+f4KCgn9/goJ/gIuQjY2MjYuKiISEhIODg4ODgoKCgoKCgoKBgYGAgoGBgYKCf3+AgIB/fn18fH5/fn55fX52e3Z4fXx8fHt9fX6BgICAf31/f31+f39/foB/f39/f3+Af4GBgH99gH9/fn9+fn5/f3yCfX59fX17e319fHp8fH2BgoGAgIB9fX18fHx8fH18fnt/fnt7e3x8fH18e3t7e3x8enp9en6CfoKEhIKAgoGFhoWFhoaHhYGEkY+Ni4qLh4eFgoOEhISEg4KCgYGCgoKBgoGBgYGBgoGBgoKAgYKBgYCAgH9+e3x+fnx6fnh5dnd8fHx7e317f4GAf35/foB/f35/f35/gH9/f39/f39/gYKAfn6BgIB/f39/f39+fYN8fH19fH99fX19e3x+fn5/fn5/fnx8fXx8fXx+fnt8e3x8fHx9fH18fnx9fHt7e3x6e3x7fH16fX5+f4CAg4eJiYmKiYqJhYiSj42JioeFhYOCgoOEhIOCgoKBgYKBgYKBgYGBgYKCgoGCgoCAgX98e3p6eXt9enx+fnl8eXh4dHx8fHt8fHx+gH9/f39/gIB/fn5+fX+AgH9/f3+Af4CDgoB/gIGAgIB/f4CAgH58enx9fX59fX5+jIZ9fX57e4ODfX19fX18fX19fX1+fH18fXx9fX58fn19fX18e3t6fHt8fHt6e3t6enp7fn6ChYiHiIqLi4uJjJGQjoqJhoWEgoKCgoODg4OBgYGBgYGBgYGBgYKCgoOCgYKBgIGBf3+Af356eHl5en5+e3l6eH5zfHx8e3x8fH5+fn5/gH+AgIB/fn9+gIF/f4B/gIGAgoSEgYCAgYGAgX+AgYKBf39+f31+gH57foGSjHx9f4qAjYx+fn19fX5+fX59fHx8fn18fXx9fX1+fX1+fnx7e3t8fH18e3t7e3l6eXl5e35/g4OEh4mKiImOkI6MiYmFhISCgYKCgoKCgoGCgoKBgYGCgYKCgoGCgoKBgoKAgYGAfoCAf39+e3p5e319eHx6f3KBfXt7fXx8fn59fYGBf4GBgX9/gH+AgX+AgIGCgYGFg4SCgYGCgYKBgICBg4KAf4F/fX6Afnx/f4mCf36DkYSEg4F/fn18jYd9fX59fXx+fnx9fXx9fX5+fX5/fH19e3x9fnx8e3x9enp5eXl5ent+foCBg4eEiI+Oi4qHhYSEhIKBgoKCgoGBgYGCgoKBgoKCgoKCgoKCgoGCgn+AgIB+f39/fn5/ent5fX16enp9cX6Cent9fX19fXp4f4KAgYKCgICBgYGBgICBgoKCgoWFhIKBgYKBgoF/gIKEgX9+gYB9foF+fX5/gIB9foCEgH5+f31+fX2KhX1+f31+foB+fH18fH5+fn99f4B9fX18fX9/fHx7fH17e3t6enp7e3x9fn6Ag4CJjouMiIWFhYSEgoKCgoKCgYGBgoKBgoKCgoKCgoGBgoKBgYKCf4CAgH9/f39+fn59eXp6fXx5d3t0e4d8dHd9fn17e3Z2fYCBg4KBgYKCgoKBgYGDg4OChYaEg4CAgIGDgX+AgYSBfn6Af31+gH59fn6AgH+Bf3+Af39/gH99f39/f3+Afn9/gH58fX18fn5+foF/gH2CgHx9gIB9e319fXx8e3x9e3t7fHt8fH19fIqKiYmGhoWFhISDgYKBg4KAgIGCg4KCgoOCgoKCgoGCgoGBg4J/gIGAf39/fn5+fn57enp8fHt2e3R3f352cnt+fnt4dnd8gIGCgoKBgoODg4OCgoSDhIOFhoOCgX9/gIKBgICAg4B+foB/fX+AfX1+foCAf4J/gYCAgICBgH1/f3+AgICAgIB/fnx9fX19fn59gn2AfoKAfX6AgX98fn59fX17fX58fXx8fHt8e3x+ioeHhYaIhYSFhIKCgoGDgYCAgoKDgoKCg4ODg4KBgYGBgYGCgH6AgYB/fn5+fn5+fn56e3p9goN9dXF6fHpxen59eXh0dICAgoKCg4KDhYOEg4KDhISEhIWEgYGAgH6Agn9+f36Bf35+f4B9foB9fX1+gH9/gYCBgICAgIGBfn6Af4GAf4CAgH9+fX19fnx+fn19gYR/gH9+f4GBf31/f319fn1+fn1+fHt8enx7eoCIg4SEhYSEhISDgYKBgYKBgICCgoOBgoOEg4SDg4KBgYKBgYOAfoCBf35+fn5+fX1+fnt7en6Jh354cnl9f3F6eHt4eXV1fYKDgYODg4OFhIWDg4OEg4OEhIOBgICAf4CBfn19fn9+fn5+gH19f3x9fX6Af4CAgIKAgIGAg4KAf4B+gIF+gIGAgH9+fn5+fn1/fn6FhYGBgX+Ag4F/foGAf35/foB/fn17ent6fHt6goWAg4KCgoKCg4GBgYCAgoGAgIKCg4KBg4SDhIKEgoGBgoGCgoB+gIF/fn1+fn5+fX59fXp7fIWEe3tzeXt8cHd1dnd5dXR6hISBhISDhIWFhoSDg4WEgoODgoCBf4B/f4B9fX1+f31+f39/fn1+fH19foF/f4B/gIB/gICDgoGAf36AgH+AgYCBgH9/f39/f4CAgIGCgoKBf4CDgn9/g4J/f4B/gX+Af3x6fHp8e3yCgH+Cf3+BgIKCgYF/f3+BgH6BgoKDgYGDg4KEgoSCgYGBf4GCgH6AgH9/fX5+fX19fn19e3t6gH94fHZ5enxxdHh3dnh1cnmFhYKEhIKEhYWGhISChIOBg4GAgIF/f4B/gHx9fX6AfX5/f39+fX98fn5+gX+BgH9+f4B/gIOCg4F/f4GBgYKBgYGBgIGAgICAgIGAgIKDgYF/gISAfYGDhICAgX+BgYKBfXp7e3x8fYB+f4B8f399fYGAgH59fX9/foKBgYKBgIKCgoKBg4KCgYB/gYKAfn9/fn99fX1+fX19fX19ent7fHZ9eXh6enJ1eXl2d3dzdYaFg4WFgoSEhYSEg4GDgoGDgX+AgX5+gH6AfX19foB+f4B+fn99f3x/f3+BgIF/f3x+gH6AgYKDgYCAgoOEgoGAgYB/gYCAgYGAgYGBg4OBgX+Ag4B+goOEgICCgYKChIJ+e3t8fHx9fn1+fXp+fX14fn9/fHx8fn5+gYCBgYCAgoGBgYGDgoGBf4CAgoB9fn19f319fX59fH19fX16e3p8dnx6d3t4cnZ5e3Z2dnN0hoSEhYWChISFg4ODgYOBgYOBgIGBfX+BfoF9fX1/f39/gH5+f359fYB/gIGBgX9+fH5/fn5/gYJ/gYGCg4eFgX9/fn6Af4CAgICAgIKCgYCAfoCCf3+BgoOBgYOCg4OFg399fX18e3x8eXp7en15e3l4f357fHx+fX1/f4F/gH6BgICAgoOCgYF/gIGBf31+fH1+fX19fX18fn58fXx5e3x4enx3endzeHd6c3d2c3SGhISGg4KDhISDgoKCg4GCgoGAgYF9gIB+gH1+fX5/gIB/f39/f3x/gH+BgIGAf359f39+fn+BgH2AgIGDg4N/f359fn5/f4B/gIB/gYKBgH9+f4F+f4CCgoCBhIKEhIaEgH5+fHx8fHp5dnl5enl2eXZ+fHt7e359e399gH59fX9/f3+BgoGBgX5/gYF+fX18fX19fX19fXx+jYF8fXl7e3p5fHd4eHR1dXhyd3d0doaEhIWEg4ODg4OCgYKDgoGDgn+Bf35/fn+AfX19fX6AgIB/f39/fIB/f4GAgYCAf3yAf35/fn9/fX5+gYGCgn5/fn1+fn5+f3+Af32AgIB+fn5/gX5+gIKCf4KDgoOEh4SAgH58fXx8e3x1eXl4eHh5d3t8e3t7f4V9fn1/ent+fn59foGAgIGAfX6BgH59fXx9fX19fX18e32Dgnx8ent7e3p7d3Z4dXJzdnB4eXJ4hYWFhYOEhIOChIKBgYKBgIKBgIF/fn5+foB+fX58foCAgH+AgIB8gH6AgH+BgIB/fYB+fn9/f359fX6AgYGAfn9+fn59fX5/fn9+fH6Af35+fn+Cfn6AgIF+gYOCg4OGhICBfnx9fHx7fHh3e3h1eXd3eXx6e3t9kod9fH13en1+fn19f35+gH98foB/fn19fH19fX19fHt8ent9enp4e3x6ent4dHh1cXJ0cHh4cXmEhYWFg4SDgoODgoGBgoKAgoCAgIB9fn5/gH18fnx/gIGAgICAgHx/f4B+f4GAf399gX9+f39+fX18f4CAgIB+f35+fn18fn9/f358fYB/fn1+gIJ/foCAf36BhIKCg4WFgoJ+fX17e3x8eXd7eXd4d3d4e3t7e3yFiX17end6fH19fHx9fX1/fnx9fn59fX18fX5+fX18fHt6enx7e3p5enp7enhzd3VxcXNveHdxe4WGhYWDhYKBg4OBgoGBgoCCgICAgH5/fn9/fXx+foCBgoGAgIGBfX6Af35/gX+Af3+BgH9/f319fH1/gICAgH9/f35+fXx+f39/f319f39+fn6CgYF/gIB/foGDgoKEg4SCgn5+fHx6fHt7eXt6d3N2d3h5e3p7eXp/fnt7d3p8fXx8fH59fH19fH19fXx8fX19fX99fXx9e3l7fHx7enp6enp6eHN2dXBwcm93dnJ7hYaEhYOEgoGDgoKBgYGCgYKAgYGAf4B/f399fX9+gICBgYJ/goF9foF+fn+Bf4B/gIJ/gIB+fH58f3+BgICAf4B/f4B+fX5+f4B/f39/gH9/f4J/gICAgIB/gYGAgISBgoKAf39+f3x9fn56fYV+dHx9enp6enx5eXp6hoV3eXx8fHx8fXx8fHx8fX19fHx9fX19fn19fX16eX18fH16enp6enp5c3V1b29xb3d0c3yFhoOEgoOCgYKBgoKCgYKBgoGBgYCAgICAgH59gH+Af4GCgn+CgX+AgX5/gYB/f4CAgn+Bf319f35/f4KAgICAgIB/gIB+fn1/gH9+gIB/f39/gH+AgICAgH+BgYCBgYGCgYCAf39/fn1/fnuBk416fH18e315e3p6eHqBgXh5fHx8fXx8fHx8fHx9fX18fH18fn1+fn59fHp8fHt9fXt5enp6eXl0dXVvb3Fwd3N0fYWGg4OCg4KAgYCCgoGAgYGCgYKBgYCBgIGAfn6Af4GAgYKCgIKCgICCfoCBgX9/gX+BgIF/fH6Af3+AgoCAgICAf3+AgH9+fX6Afn2AgIB/f3+AgICAgYCAf4CAgYCBgYKCgICAf39/fX5/fIGGiXx8fnt7fnl6e3p7j393d3l7fHt9fHx8fHt9fH19fX18fXx+fn5/f358enx9e3x9e3l6e3p5eHN0dW5zcXB4cnV6hYaDg4KDgoCAgIKCgYCCgYKBgoGBgYKAgYF/fn9/gYGCgYKBg4OAgYJ/gYGBf4CAgIB/gX99f4F/gICBgICAf4B+gICAf359foB+fn+Af39/gH9/gICBf4CBgH+BgIGCgoKAgICAgIB9foB9gIOCe35+e3x9e3p8fHuHenh4eXx8fH17fHx9fX18fX19fn19fX5+f3+Af317fH18fHx7enl7e3l5c3J1bnZycHhxdXaFhYOEg4KCgICBgoF/gIKCgoKDgYGDgoCCgYB/gICCgoKBg4KEhICBgX6BgoF/gICAgH+Cf36AgYCCf4B/gIB/gH+AgIB/fn2Af35/f4CAgH+AgH+AgYGAgICAgIGAgYGBgYGAgYCAgH9/gH5/fX59fn57fXx9e3x9eHh1eHh5e3x8fXt8fHx8fX5/f39/fn19fn9/gIGAf3x9fHx9e3p7eXp8eHpzcnVud3FxenF2d4WFg4SDg4KBgoKDgICCgYSDg4SBgYOBgoKCgYCAgIKDgoCCgoSDf4GAfoKDgICBgICAf4CAf4GAgYKAf4CBgH9/gICAgIB/f4CAgH+AgICAgIB/f4CBgYCAgICAgYGAgoOCgoCCgYGCgYB/gIB/gId+fnx7fXx7fX94d3Z5eXp7fXx8fXt8fH19fn5/gIGAfn1+gICAgoGAfH59fX58d3t6ent5eXNxdW53cHV6cXZ5hYWCg4KDg4KChISAgIOAhoODhIGChICEg4KCgICCgoSBgYKBhIJ/gIB/gYOCgYCBgYCAf4GBgYGBg4B/gIOCf35/goGAgH9+gYCBf4CAgYCBgYCAgIKBgYKBgX+BgYGBgoOCgoOBg4OCgYCBgH9/hH19fXx/fXt9f3t6dnp4eXt7fH19e3x9fX19fn+AgYCAgH+AgICDg4B8f35+fn15eXt6enp5c3J0b3dxd3lzd3uFgoKCgoOEgoOEg4CBg4OGg4ODgoKEgYSDgYOAgIKBg4GCgoGCgX6AgICCgYKBgYKCgIGAgICCgoGEgH6Bg4F/f4CDgoCBf4CCg4KAgYKBg4KDgoGBg4KChIGAgYOBgYKEg4KEhIODhIODgYGBgoCCf4B/fYB8enx/e3t3fHl5eXt6fX59fHx8fH1+foCBgYCAgIGBgYSEgH2Af39/f357e3t6e3p0cHhxeXR2eHR2e4SCg4KDg4SChIODgYKChIWEgoODg4SBhIOAg4CBg4KCgoKCgYKAf4GAgIKBgoGCgoKBgIGBgYKCgoOAfoGDgX9/gYSEgYN/goKBg4KCgoGEg4OEgIKEgoOCgoGCgoOBg4SDhIOEhISFg4SCgYOCgYOBgYGAgH58fIB9fHh8eXp5enx9f3x7fHx9fX18fICAgICAgYGBgYKBf4CAgICAf3t7e3p6enVweHd5dnV8dXZ8gICDgoODg4OEhISBgoOFhYWDg4KDhIKEhYKCgYKDg4GCgYKAgYB+gYCBgYKDgoKCgoGAgYKCg4KCg4B/gYOCgICChIODgoGCgoGDgoKDg4ODg4SAgoSDhIOBgX+Bg4KDhYKEhISEhISDhISChIOEhIKBgoCBgHt9gX58eXx6enp9fHyBfXp8fH19fHp7fn5+gH9/gYGAgICAgIKBgIB/fX18fH18dnJ2eHh2dH92dX2Hh4OChIWDg4SFhIGChIaEhIOCg4SEgYOFg4KCgoODgYOCgoCCgH2AgIGCg4KCgoKEgoCCgoODgoKBgICBg4KAgYOFhIOCg4CCgoOCg4ODg4OEg4CCg4KEg4KCf4OBgoSEgoODhISEhIOEhIOEg4WEg4ODgoKAe4CBf3x8fXp6fH2AfX9/fHx6fH59fH19fn5/f39/gICAgH9+foCBgICAfnx9fn5/fn18fHh2f3Z3f4SHg4KDhoODhIaEgYKFhoWEhIODhISChIWFgoKDg4SCg4KDgoKBfoCAgoKDgoODg4SCgYKCg4OCg4KCgYGDgn+Cg4SDg4KEf4KEg4ODgoSDg4SCgIOEg4SDg4KCg4KChIOCg4OEhISEhIWEg4OEhYSFhIOBgoB9gYKAfXx8e3x8gH19foB+fn1/fnx8fH19fn5/fn+BgYGBgH99fX6BgYB+fn1+fX5+fn5+f3+AfH2AgYKCg4OFg4SDhoSBgoiGhYSDg4SEhYGFhYWDg4SDhIODgoOCg4F+gYGCg4SCg4OEhIOCg4KEg4ODgoKDgYOCf4KDg4ODgoOAgoWDg4ODhIODhIOBgoSEhYODgoODg4GEg4GDg4SEg4SEhYSEhIWFhYWEg4ODf36BhIB9fXx8fHx/gX5/fn9/fX99e3x9fX19fX5+f4CBgIGBgH59fH6Cf39+fn5+fX1/f39/gICAf4CEhIODg4WDhIOFf36CiouFhYSDgoSFgYaGhoOEhISEhIODg4OEgn+BgYODhYSFhIWEg4KEhISFhIODgoSDhYKBhISFhYaEgoCDh4SDg4OFhIWFhIGEg4OHgoOCg4GCgYSDgoODhIODhIWEhYWHh4aHhYSEhYSBf4GDf35+fH5+fX+BgH9+fHx/f358enx9fX19fX5+fn9/gIGBf319fIB/gH5+fn5+f3+BgYGBgYKAgYWFhIOEhIKEg4aAgoSFi4mEhISEhYWCh4aGhISEhIWEhYSEg4SEgYKDg4OEhIaEhYSDg4SEg3yDhHuBhHd5g4F9hH5+cnWDgoF2foOFgH2BdYF6hH9/f36FhIKDg4KBg4SDhISFg4SFhoSFhn2EeXx+f4N7hYOBhIOAf31+f35+gYOBfXt/fX6Afn18fHx9fX19fH19foB/gYJ/fX18f4GBgICAgH+BgYGBgYKDg4KChoSEhIWEgYOEhYOEhYSKiIWFhYOFhYSGhoaDhISFhYWEhYWEhIWCgoOEhYWFhoSFhIOEhYWCaICFanx7cXF8gXOGc3R0fYKDdXNxg4ZzcHVyc3SDdnt9dYF/goOBgnZ5hYCDgIR/hYSChYWCaHpyc3N8gHKBg3+Dg32BfX5/fn+Cg4J8f4F9f4B9fXx8fHx9fHx8fn1+gX+BgX99fX2AgYKBgYGBgIGBgYKBgoKCgoSHhIWEhYSBgoSGhoOFhIaIhoaFgoaGhoeGh4OFhYaFg4KFhoSFhYODg4SEhoaGhIaEg4SFhn1we4FweXZ+g3+CbnlwdXN8dnl5hnKEg3B2eHF2dHR1cnN0dml/gG5yb3R2bnVsd216c26Ah3ltfXJzdnN2bW53bHB5bHV9f358foGAgX2Af32Af4B/fX18fHx9fH1+f32Af4CAfnx/foCBgYCBgICAgYCAgIKDgoKEhYeGhoCChYODhYeGg4WFhYaHh4SDhoaIiYaHhIWGiIeEg4WGhYWEhIOFhIKFhoaFhoWEhoWHdnB0e3BydX+HhYNtdW92b3x1coR5eYd4cXR3bndod3pucHaCcoN+b3p5eW1vbnpvb2x3fXiGcHF6cHJ1ZoF1fm57eXNveX+Af31+gYB/e39+fIB+gIB+foCAgYB+fn9+foF/gH9+fYB9f4CBgIB+fn+BgH9+goOCgoSFh4eEfoeEg4OFh4aEhYWFhoaIhISGh4iIhoeEhoaLiYWEhoeHhYSFhYWEgoWFhYWGhYWGhYZxdXByc29zenl+g3SIdHV+iHZugnKEhnluanJ/cW1zd3x/dXR8hH54cXV3bnl1enF2eHV6eYRyaW95eHBreXN6b3p3dnZwgYB/fn5/f396fn18f31/f359gIGDg4CCg4GBhIKBf4GCgH1/f4F+f359foGAfn6BgoCAgoSHhoODhoSEhIWHhoWFhYWHhoiFhYaFh4eFhoSGhomIhYSJi4iFhIaFhoWDhYWEhoaGhoaFg3iLeXKIentwcIWFeIV4eWtzfnl7a3KDh4N6fG16eXl0fYB2bm+AgG90fHV3cHl9fW19dW+DhYZ6gHJye3x1cG96a3N8bnaCgYF+fn99fXt9e3x9fH9/fX1/f4KCf4GDgYGDgYB/gICAfn9+f31/fn1/gH58fYGAfn6Ag4iFhoOFhYWFhoeFhYWFhYeHiIaEhoWHhoaFhIWFhYWFhomKh4WFhoWGhoWGhoSGhoaGhoWGh4eHhoaEhoWGh4iHhYeGhoOHhoWFg4SFhoWGhIaEg4SEhoSEgYSDhIOFg4WEhYSGg4WGhYWEhIWHhoSEhYaFhX13hYOEhIOCgX5/fnt8e358fHx9f399fX9+gYB9f4F/f4GAfn5+gH5+f35+fX99fX5/fHt8f358fH+BiYaFhIaGhoWGhoWFhYWGhoeJhoSGhYeFhYWDhIWGhYSGhoeGhYSGhIWGhoaGhIeGh4eGhYeIiIiIhYWHhYaGiIaFiIeIhYeGhoiFhYaHhYaGhYOChYWGhYWDhISEhIaEhoWEhYWDhoaFhYWEhoeGhISFhoOFhIKEg4OFg4OBfYB/e3t8fnt8fH1+fnx8fn2Afn1/gH5+gH99fXyAfX1/fn5+f3x8fX57fHx/fHt7fn+Ih4SEiIaGhYeGhYWEhoaGhoiHhIWGh4aFhIODhIaFhIeFhoaFhYaEhYaGh4eFh4aJiIaGiIeIiYiFhYiFhoeGh4aHhoeFh4eGh4WFhoeFhoaFg4OFhoaEhIOEhIOEhoSGhYWFhYOGhoWGhYSGh4WEhIWFg4SHhoOCg4SDhIJ+gYB8e31+e3x7fn59fHx+fX5+fX9+fX1+fnx9fH98fn58fYF/fHx8fXx8fH56e3t8foiHgoWIh4eGhoaGhISGhoeGiIaEhYSHhoSFh4OEhYSFh4SFhoaFhoSGhoeHhoaHh4mIhoaIh4iJiIWGiIWGh4aHhoeGh4WIiIeHhYaGh4WGhoWChISFhoWFhISEg4SFhYaGhoWGhIaFhoaFhYaHhYSDhISDhIeDhIGChIWDgYCAgHt7fn58fHx+fXx8fH1+fH18fn18fX18fHx8fXx+fXt8gX99fH18fnx8fHp6fHx9iIeChoiHhoeGhoaEhYaFhoWGhYOFhIaFhIiJg4GEg4SGhIaGhoaGhIeHiIiHh4eIioiGh4iHiImIhYiHhIaGhoeGh4WHhoiIh4eFh4eHhoaHhIKEg4SGhYeFhISEhISFhoaGhoaFh4WFh4WGhYaFhIOEg4OEh4GDgIKDhIKCgn+Ae31+fnx8fH59fH19fH17fHx7fHx9fXt7e318e359e3x/fX18fX1+fXx6ent7fHyIh4KGh4aGh4aGhYSFhoWFhYWEg4WChoSDiId/enqChYaEhoaFh4aEh4eIiIiHhoiKh4aHh4eIiYeFiIeFh4eGhoeHhYeGiIiHhoWHh4iGhoiEg4SEg4aGh4WFhISEhYaGhoaGhYaHhoaHhoaEhoWDg4ODgoOGgYN+goKDgIOCf398f35+fHx9f318fX18fnt7e3p7fHx8e3t7fnt8fXt6e358fHx8fX5/fXt6fHp8fImHg4aFhoWGhoWFhIWFhYWFhIOBhIGGhIKEhHyAhn+ChYWGhYWGhYSHh4iIiIaFiYqHhYeGh4iIh4WIhYaHiIaGh4eGh4aIiIeFhoeGh4WFiIOEhoSDhoaHhoWEg4WFhoaGhoaFhoaHhoeHhYOFhYOBgoKBg4WCg36BgoF/hIJ/fn5/fn58fH1/fXt9fXx+enp7eXt8fXt7e3t+fHx8fHp7fXx8fHx+fYF8e3t7e3x8iYeEhoSGhIaGhYSFhYWEhIOEgoCDgYaCgYJ/eoSMe4CEhYeGhoaEhIeIh4aHhYWHiYeEh4WGhoiGhYeEhoeIhoaIiIeHhoeIhoSGhoaHhYWIg4SFhIaGhoeFhYSDhYWGhoeGhoWGhoaFhoaEg4SFgoGCgYCEg4KCfYGBf36DgX5/f4B8f3x9fX59e359fH15enp5e319enp7e318fXx8enp9fHx9fH5+gHt7e3x+fXyIh4WGhYeEhoSFhYWFhYODgYOBgIKBhYKAgH9/fXx7gYSFhoaEhYSEh4eGhoaFhIaJhoKGhIaGhoWFh4WHiIiGhYiHiIeGhoeFhIaFhYeFhIeDhIWEiIaGh4WFhIKFhYaFhoaHhIWGhoWFhoKDg4WAgIGAgIOAg4B8gYB+foKAfYB/gX2AfH1+fX57fn18e3l6enl6fX15ent7fHt8e3t6e319fH18f35+fHt7fX59fIiGhYaGhoSFhYSFhYSDgoKAgoGAgICDgX5+foB5en2Ag4SFh4WEg4OHhoOEhYSChYiFgoSDg4WFhYWGh4aIiIaFiIeJh4aFhYWDhoSFh4ODhoSEhYSHhoWGhYaEgoWFhoaGhoaEhYaGhIWFgoKDhH9+gICAgYCDgHyAf31+gn5+gH6Af399fX59f3t/fXt6eXp6eXp8fXl6ent7enx7e3t7fH19fXx/fn18fHx/fnx7h4WFhoaGhoSFhIWDhYKBgICAgYB+f4KCfX1/f3t/f4KDg4WGhYSDg4aDgYOEgoCFh4WCg4GBg4SEhYaGh4eHhYWIhomHhYSEhIKFg4SGgoOGhISGhIeGhoWFhYOEhYSFhoWGhISFhIWDhYSAgIKDf35/f39/gIN/fIB+fX+CfYCBfn6Bfn5+fX1/e398e3p5enp5ent8eXp6ent7fHp7e3t8fX59fYB9fXx8fYB/fXyGg4aGhYaGg4SDhYKFgYGAf3+AgH5/gYF8fn9/foCAgoKChISDgoGChIGAg4KBgIOFhIKBf4CCg4KEhYWHhoaEhYeFh4WGgoOCgoOCgoWBg4WEhYaEhoaGhoaFg4SEg4SFhYWDhIODhIKEhIB/goJ/fX5+fn5/hH57f3x8gIF9gYB9foN8fn59fX57fnt7enl6enl6ent5enp6e3t8enx8fHx+fn1/gXx9fHx9f4B+gIaEhYWEh4SEg4KGgoOAgYB+fn+AfX9/gnx9f35+fn+BgYKEg4KBgYKCf4CBgoCAgoWEgoB/gIGCgYKGhYeFhISGhoOFg4WBgoGBgoGCg4GChISEhYWGh4eGhYWEg4ODhIWFhIGDgYOChIODgH+AgX59fX5+fH6Dfnx+fHyBgX6Cf35/gnx/fn19fHx8e3t6enp6eXt5enp5enp6e3x5e317e35/f4GAfX99fX1/gICAhoSEhYSFgoSCgoSCgoCBgH59fn9+fn6AfX2Afn5+foGBgoODgoSHgYF+gICBf3+ChIOBf35/gIJ/goWEhYOCg4WFgoSBg4CBgIGAgYKBgIGEg4OGhYWHh4WEhIWCgoKDhYSCgYGBgYCFg4F/foB/fnx8fn18foN9e358fYB/gIN9fYCBf35/fXx8fH17e3p5enl5e3l6enl6ent7e3p7fXx8f3+BgoB+gH+AgH+AgIDKysrKysrKysrKysrLy8vLy8vLy8vLy8zMzMzNzc3Nzc3Nzc3NzczMzMvLy8vLy8vLy8vLy8vLzMvLy8vLy8vLy8vLy8vMzMzMzM3Nzc7Oz8/Pz9DQ0NHR0dLS0tLS0tLT09PT0tLS0tLS0tPT09TU1NTU09PT09PT09PT09PT09PT09PT09PT09PT09PT09PS0tLS0tLS0tLS0tPT09PT1NTV1dXV1dXV1dXV1dXV1dXV1NTU1NTT09PT09PT09PT09TU09PU1NTU1NTU1NTU09PT09PS0tLS0tPT09TU1NTU1NPT09LS0tLS0tLR0dHR0dPHhnNlYFtLWWdVTUZIQD03Nzg5Nzw8PDo8Oz42Oj04PDs6OTg3ODs7Oj87PTs8PD47P0E/QkJBQ0RFREE+PTw7QENDQUBDQ0FBR0hHSUtSwtXS09PT09TU1NTU1NTU1NTU1NXV1dXV1dXV1dXVysrKysrKysrKysrKy8vLy8vLy8vLy8vMzMzMzMzNzc3Nzc3Nzc3MzMzMy8vLy8vLy8vLy8vLzMzMy8vLy8vLy8vLy8vLzMzMzc3Nzc3Oz8/P0NDQ0NHR0tLS0tLS09PT09PT09PT09PS09PT09TU1NTU1NTU09PT09PT09PT09PT09PT1NTU1NTU1NTT09PT09LS0tLS0tLT09PT09PU1NTU1dXV1dXV1dXV1dXV1dXV1dXV1NTU1NPT09PT09PT09PU1NPT09TU1NTU1NTU1NPT09PS0tLS0tPT09PU1NTU1NTU09PT09PS0tLS0tLR0dHSzIxyZ2BcTVllUktHSz87Mzc4Ozg5Pj05PDpBOjs9Nzs8PDo6Nzg6Oz0/Oz88PTw/Pj9BPUFBPkNDREJAQT46Oz9DREFDRERCQklHSEhJTr7V0tPT09TU1NTU1NTU1NTU1NXV1dXV1dXV1dXV1crKy8vKysrKysrKy8vLy8vLy8vLy8vLy8zMzMzMzM3Nzc3Nzc3NzMzMzMzMy8vLy8vMzMzMzMzMzMzLy8zMzMzMzMvLzMzMzc3Nzc3Ozs/P0NDQ0NDR0dLS0tLS09PT09PT09PU09PT09PT09TU1NXV1dTU1NTT09PU1NPT09PT09PT1NTU1NTU1NTU1NPT09PS0tLS0tLS0tPT09PT1NTV1dXV1dXV1dXV1dXV1tbV1dXV1dTU1NTT09PT09PT09PU1NTU09TU1NTU1NTU1NTT09PT0tLS0tLT09PU1NTU1NTU1NTU09PT09PT0tLS0tHR0s+Sd2hfXk9XZ01LRks9ODc2NTk5OTw+OT88Qzk7PDc5PD07OTc5Ojw9QDs+PT47PD48PT5BQD5EQ0NDP0E9Ojs+QkNFQ0NEQT9FSEpJSky61dPT09TU1NTU1NTU1NTV1dXV1dXV1dXV1dXV1dXLy8vLy8vLy8rKysvLy8vLy8vLy8zLy8vMzMzMzMzNzc3Nzc3Nzc3MzMzMzMzMzMzMzMzMzMzMzczMzMzMzMzMzMzMzMzMzc3Nzc3Ozs/Pz9DQ0NDQ0dHS0tPT09PT09PT09TU1NTU09TU1NTU1NTV1dXU1NTU1NPU1NTU09PT09TU1NTU1dTU1NTV1dTU09PT09LS0tLS0tLS09PT09TU1dXV1dbW1dXV1dXV1tbW1tXV1dXV1NTU1NTT09PT09PT1NTU1NTU1NTU1NTU1NTU09PT09LS0tLT09PU1NTU1dXV1dTU1NTT09PT09PT0tLS0dHRmn5nYWJOVWpKSElLPzw6OTM3Njc2PTs+Oj06Ojo4ODo7Ozg4Ojs7PD46PT09Ojw/PD0/QkA/Q0RDRD5APT08QENEQ0JEQkQ+REhJSUtMttfT09TU1NTU1NXV1dXV1dXV1dXV1dXV1dXV1dXVy8vLy8vLy8vLy8vLy8vLy8vLy8zMzMzMzMzMzMzNzc3Nzc3Nzc3Nzc3MzMzMzMzMzMzMzMzNzc3NzczMzMzMzMzMzMzMzc3Nzc3Ozs7Pz8/Q0NDQ0NHS0tLT09PT09PT1NTU1NTU1NTU1NTU1NTV1dXV1NTU1NPT1NTU1NTU1NTU1NTU1dXV1NXV1dXV1NTU09PT09PS0tLT09PT09PU1NXV1dbW1tXV1dbW1tbW1tbW1dXV1dXU1NTU1NTU1NTU1NTU1NTU1NTU1NXU1NTU1NTT09PT09PT09PU1NTU1dXV1dXV1dTU1NTU09PT09PS0tLR0p+DaV9kU1hsSEhIS0A9Nzg0NzY6Oj87RDw8Ojw8OTg6OTo6Ojs8Ojo7OT48Pjk9QDs/QUFCP0JCQUM9Pz8+PEBCRUNDQkBBO0ZJR01MSbLY09TU1NTU1NXV1dXV1dXV1dXW1tbW1tbV1dXW1svLy8vLy8vLy8vLy8vLy8vLy8vMzMzMzMzMzM3Nzc3Nzc3Nzc3Ozc3NzczMzMzMzMzMzc3Nzc3Nzc3Nzc3Nzc3Nzc3Mzc3Nzs7Ozs7Pz8/P0NDQ0NHS0tLS09PT09PT09TU1NTU1NTU1NTU1NTV1NXV1dTU1NTU1NTU1NTU1NTV1NTU1dXV1dXV1dXV1dTU1NTU1NPT09PT09PT09PU1NXV1dbW1tbW1tbW1tbW1tbW1tbV1dXV1dTU1NTU1NTU1NTU1NTV1NTU1NXV1dXU1NTU1NTT09PT09PT1NTU1dXV1dXV1dXU1NTU1NTT09PT09LS0tSjiGxfZlJWakdIR0lBPTM2Njo7PDhDPEJBPjtBPDg5Ojw6Ojw8PDk8PTo7PD09PD89QD9AQT9AQUBCPD4+PzxCQ0NDRkBBQT1ISklOTUeu2NPU1NTV1dXV1dXV1dXV1dbW1tbW1tbW1tbW1tbLy8vLy8rKysvLy8vLy8vLy8vMzMzNzc3Nzc3Nzc3Nzc3Nzc3Nzs7Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Ozs3Nzc3Nzc3Nzc3Nzs7Ozs7Oz8/P0NDQ0NHR0dLS0tPT09PT09TU1NTU1NTU1NTU1NTU1NTV1dXV1dTU1NTU1NTU1NTU1dXV1dXV1dXV1dXV1dXU1NTU1NTU09PT09TU1NTU1NXV1dbW1tbW1tbW1tbW1tbX19bW1tXV1dXV1dXV1dXV1dTU1NTU1dXV1dXV1dXU1NTU1NTU09PT09PT1NTU1NXV1dXV1dXV1dXV1NTU1NPT09PT0tLWroprY2VSWGhMSkdJQjg0OTQ6Ozo5QDk+Q0U/PDs5OTk9Oj07PDw6PTw7OTw9Ozs/PUA9PT5AQD9CQT5APD05QERDQkFBQj48SEpLTU5HqNnU1NXV1dXV1dXV1dXW1tbW1tbW1tbW1tbW1tbWy8vQ0dDQ0NDQ0dHR0dHR0c3Ky8vLzMzMzMzMzMzMzM3Nzc3Nzc7Ozs3Nzc3Nzc/Pz8/Pz8/Pz8/Pz9DQ0dHR0dHR0dHR0dHS0tHV2djY2NnZ2dra2tvb29vZ2dnZ2dna2tra2tra2tjW19fX19fX19jX19fX19jZ2NjY2NjY2NjZ2dnZ29zc3Nzc3Nzd3Nvb29vb2tra2tra2tra2trb3NzX1dXV1dXV1dXV1dXW1tbX1tbW1tbV1dXV1dXV1dXV1dTU1dXV1dXV1dXU1NTU1NTU1NTU09PU1NTU1NXV1dXW1dXV1dXV1dTU1NTT09PT09PS1bqKa2hoUlhlSUlMTkA5OTo0O0A8Nz05QUM9QD89ODo6Ozk9Oz4/Ojs8PDo7PDo7Pj1APT8/P0FAQUE/QTw8Oz5BRENBREA9PElJSk1NRqPa09TV1dXV1dXV1dXW1tbW1tbW1tbW1tbW1tbW1svMlYWGhoaGhoeHh4eHh4Ky4t3d3t7e3t7e3t7e3t3S0NDQ0NDQ0NDQ0NDQ0ci5ubm5ubm5ubm5ubq6t6WkpKSkpKSkpKSkpKSnhmBjY2NjY2NjY2NkZGRlhIuKioqKioqKioqKioemuri4uLi4uLi4uLi4uLepp6enp6enp6enp6enqZeAgoKCgoKCgoGBgYGBg4uKioqKioqKioqKiouHvebh4uLi4uLi4uLj4+Pi2NfX1tbW1tbW1tbV1dXV1dXV1dXV1dbW1dXV1dXV1dTU1NTU1NTU1NTV1dXV1dXW1dXV1dXV1dXV1NTU1NTT09PT09XDkXJsaU5TYkxMVk08Ojo3Nz5DPzg+Oj8/QTw/QDc7Ojs7PTs+Pjo7PD48Oz07PT8+QDw/Pz1AQEBBPj88PjxAQUVCQkZAQD9HSEpLUEae2tXV1dXV1dXW1tbW1tbW1tbW1tbW19fX19fX19fLzG5QU1NTU1NUVFRUVFRMoPPr6+rq6urq6urq6uvp1dLS0tLS0tLS0tLS0tTEqaqqqqqqqqqqqqqqq6aGhIWFhYWFhYWFhYWFik4MEhISEhISEhISEhIRE0pUU1NTU1NTU1NTU1NPg6ejo6Ojo6Ojo6Ojo6Ogh4SEhISEhISEhISEhIhnQERERERERENDQ0REQ0ZTU1NTU1NTU1NTU1NTS6ry6+vr6+vr6+vr6+vr6dnX19fX1tbW1tbW1tbW1dXV1dXV1dbW1tbV1dXV1dXV1dXV1dTU1NTV1dXV1dXW1tXV1dXV1dXV1dXU1NTU1NTU1NPUy5h3bGlKTl9NUlVNPjw8Nzs/Qz42Ojc+Pzs9QkA5PDk9Ozw6PD07PTs9Ozs9PD0+PT07QT08QUBBQT08Pzw7QEJDQURFPUFAQ0ZLS09GmNzV1dXV1dbW1tbW1tbW1tbW1tfX19fX19fX19fXy8xxVVhXV1dYWFhYWFhYUaHx6enp6enp6enq6unq6dXS0tLS0tLS0tLS0tLUxaqrq6urq6urq6urq6yoiIeHh4eHh4eHh4eHh41SEhgYGBgYGBgYGBgYFxpOWVdXV1dXV1dXV1dXU4WopKSkpKSkpKSkpKSlooqGh4eHh4eHh4eHh4eKakZJSUlJSUlJSEhISEdKV1dXV1dXV1dXV1dXV0+r8erq6urq6urq6urq6unZ19jX19fX19fX1tbW1tbW1tbW1tbW1tbW1tbV1dXV1dXV1dXV1dXV1dXV1dXW1tbW1tXV1dXV1dXV1dXU1NTU1NTU1NGcenFpSlRdT1JVTkQ+Pzs/QEA4Ojs4PDw8Oz46Ojs4Ozk5Ozw7Ojw5Ozs8Ozo9PT0+PUE/Pj8/Pj08PT88PEFBQ0FERTw+QEVGSktNRpPc1dXV1tbW1tbW1tbW1tbW1tfX19fX19fX19fX18zNeF5hYGBgYGFhYWFhYVqk7ufn5+fn5+fn5+fn5+bV0dLS0tLS0tLS0tLS08Wtrq6urq6urq6urq6vq46NjY2NjY2NjY2NjY2SXSInJycnJycoKCgoKCcpWmNiYWJhYmJiYmJiYl6MrKmpqampqampqampqaeQjo6Ojo6NjY2NjY2NkHNRVFRUVFRUVFRUVFVUVmBiYmJiYmJiYmJiYmJbr+/p6enp6enp6enp6enn2djY2NjY19fX19fX19fX19fX19bW1tfX19fW1tbW1tbV1dXV1dXV1dXV1dXV1tbW1tbW1tbW1tbV1dXV1dXU1NTU1NTWo3txZElbYE5OVU9AQT89REI+Oz06OTo6PTw7PDs6OTg5OTs8Ozw8Ojo7PDo7QD08PTxAQTxBQTs7PEA/PD1CP0RDQ0U8PkJERkpMTEWN3NXV1tbW1tbW1tbW1tbX19fX19fX19fY2NjY2NjMzMfFxcXFxcXFxcXFxcXFytDPz8/Pz8/Pz9DQ0NDQz87Ozs7Ozs7Ozs/Ozs/NzMzMzMzMzMzMzMzMzMvJycrKysrKysrKysrKysfCw8PExMTExcXFxsbGxsvMy8zLzMzNzMzMzMzLz9HR0tLS0tLS0tLS0tLS0NDQ0NDPz8/Pz8/Pz8/NysrKysrKysvLysvLy8vNzc3Nzc3Nzc3Nzc3NzdTY2NnZ2dnZ2dnZ2dnZ2djY2NjY2NjY2NjY2NfX19fX19fX1tfX19fX19bW1tbW1tbW1tXV1dXV1dXV1dbV1dbW1tbW1tbW1tXV1dXV1dTU1NTU169/cF5GXmJQUVdOR0ZDQ0lBPz07PDo8N0BBPD04Ojs4OTg7Pzs8PDs7PDw8PD87PD46Pj44PkI8Pj1BPjw+QkBERUNAPD5APkNJSUtEh9zV1tbW1tbW1tbW1tbX19fX19fX19jY2NjY2NjYzc3Pz8/Pz8/Pz8/Pz9PPz87MzczP09LSzs3P0s7Ozs7Ozs7O0dTPz87S0s/OztPTz8/Pz8/Pz8/Pz8/Pz8/P0NDQ0NDR0dHR0dHS09PU1NTU1dXV1tbW1tfW1tbX1tfX19fX19fX19bW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tXV1dXV1tfX19fX19fX19fX2NjX2NjY2NjZ2dnZ2dnZ2dnY19jY2NjY2NjY2NnZ2dnZ2dnZ2djY2NjY2NjY2NjY2NjX19fX19jY19fX1tbW1tbW1tbW1tbW1tbW1dbW1dbW1tbW1tbW1tbW1tXV1dXV1NTV1di4gm9XSl9jUlFaS0hBQTxCPT07Oj4+PD4/PT0/ODk6OTk3OD48PD47Ozw7PDs/PT0+OTs7OT0+P0A+QD07OkI/QkNCPz0+QD5CRUdKQoDc1tbW1tbW1tbW19fX19fX19fX2NjY2NjY2NjY2M7Ozs7Ozs7Nzc3Nzsqfys3Nzc3QuYOEi8fTwJrLz87Ozs7O07udz8/Sp57Qz9GlotDOzs7Ozs7Ozs7Ozs7Oz8/Pz8/P0NDQ0NDQ0NDR0dHR0tLT09PU1NTU1NTV1dXV1dXV1dXV1dXV1dXV1dXW1tbV1dXV1dbW1tbV1dXV1dXV1NTU1NXV1dXV1dXV1dXW1tbW1tbW1tbX19fX19fX19fY2NjY2NjY2NjY2NnZ2dnZ2dnZ2dnZ2dnY2NjY2NjY2NjY2NjY2NjY2NfX19fX1tbW1tbW1tbW1tbW1tXV1tbW1tbW1tbW1tbW1tbW1dXV1dXV1dXYwIBuVU9gY1dZW0xMQ0A9PTs9Ojw9Qj5CQkA8Ojg5ODo6Ojc7Pz4/PDw7PDo5Pzw8PTg5PD9BPj09PUFAPTtBQkBCQz47QD9BQUlHSkF629bW1tbW1tbX19fX19fX19jY2NjY2NnZ2djY2dnOzs7Ozs7Ozs7OzdKpj63Rzs7Ozpu3tqSiwJOerNPOzs7O0rWVm7PWs56jptawoKKq0s7Ozs7Ozs7Ozs7Pz8/Pz8/Pz9DQ0NHR0dHR0dHS0tLT09TU1NTU1dXV1dXV1dXV1dXV1dXV1dXV1dXW1tbW1tXV1dbW1tbW1tXV1dXV1dXU1dXV1dXV1dXW1tbW1tbW1tbW1tfX19fX19jX19fY2NjY2NjY2djY2dnZ2dnZ2dnZ2dnZ2dnZ2djY2NjY2NjY2dnY2NjZ2NjY19fX19fX19bW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tXV1dXV1dXV18h/b1pTYWVeXVxPSkQ9QD8+PDc6Pjk/RD5AOTg3ODk7Ozw4OT89PTw9PD47OkE7OTs5OzxDQDw7PT5AQT49QkQ/QkM9PT8+Pz5ISUg/ddrW1tbX19fX19fX19fX2NjY2NjZ2dnZ2dnZ2dnZzs7Ozs7Ozs7Ozs/Inrym0tDQzsqgl36Cw6abr6fUz8/Pz9GfoKqu0J2ak53AnpiWnMfPzs7Ozs7Ozs7Oz8/Pz8/Pz8/Q0NDR0dHR0dLS0tPT09TU1dXV1dXV1dXV1dXV1dXV1dXV1dXV1tbW1tbW1tbV1dXV1dXW1tbV1dXV1dXV1dXV1dXW1tbW1tbW1tbW1tbW1tfX19fX19jY2NjY2NjY2NjY2NjZ2dnZ2dna2dnZ2dnZ2dnZ2dnZ2djY2NjY2NnZ2dnZ2dnY2NjY2NfX19fX19fX19bW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1dbV1dXV1dfNiHNdWGloXl9gT0lGOkFAPj48PDk2P0I/Qjo2NDg6Ozo8Ojk+PD49PTs/PTxBPjw8Ojw8PTw6PEA9QEI+PkFCPUNDPT0+Oz9BRUtIQHDZ1tbX19fX19fX19fY2NjY2NjZ2dnZ2dnZ2dnZ2c/Pz8/Pz87Ozs7SrKWnqdXAvNLHnY+ey9PJipmq1M/Pz8/RxYeatMCYoZy0mJyinq+x0s/Pz8/Pz8/Pz8/Pz8/Pz8/Q0NDQ0dHS0tLS09PT1NTU1dXV1dXV1dbW1tbW1dbW1tbW1tbV1tbW1tbW1tbW1dXV1dXV1dXW1dXV1dXV1dXV1dXW1tbW1tbW1tfX19fX19fX19fX19jY2NjY2NjY2NjY2NnZ2dnZ2dnZ2tnZ2dnZ2dnZ2dnZ2dnZ2dnY2dnZ2dnZ2dnZ2dnY2NjY19fX19fX19fX19bW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbV1dXW0JB1W1tqaWFeXVNOSTxDQEE+QD46OEVAP0I6NzQ6Ojo5Ozs4Oz0/Pj49QT08P0A9Pjw8PDw8Oj1AQD8/PT5CQD9AQkA8QD0+QUVLRz9r19fX19fX19fX2NjY2NjY2NjZ2dnZ2dnZ2dnZ2tnPz8/Pz8/Pz8/QzJ2Nl6zQmpfKxZ6ynpbN1q2ZqtTPz8/Pz9anmbW2mZatuYaelrCzqdTQ0M/Pz8/Pz8/Pz8/Pz8/P0NDQ0dHS0tLT09PT1NTU1NXV1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbV1dXV1dXV1dXV1dXV1dXV1dXW1tbW1tbW19fX19fX19fX19fY19fY2NjY2NjY2NjY2NjZ2dnZ2dnZ2drZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2djY2NjY2NfX19fX19fW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1dXV1tKUcl5ea2tqZV1PTEc/RENDQDo9OzxCPD08OTY0Ojk4Ojo5Nzs/QDs8PUA8PEE+PD07PTw/PDo8Q0A+PTs9QD5CPkBBPkA9QD9GSUQ/ZtXX19fX19fY2NjY2NjY2NnZ2dna2tra2tra2traz8/Pz8/Pz8/P07GigJuvyqCjv8qcpYynrdiqmarUz8/Pz8/VpZm2rZiBoJZ4m4Sek6PV0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NHR0tLT09PT1NTU1NXV1dbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1dXV1dXV1dbW1tXW1tbW1tbV1tbW1tbX19fX19fX19fX19fY2NjY2NjY2NjY2NjY2NjY2dnZ2dnZ2dna2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2djZ2djY2NjY2NfX19fX19bW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbSk3BgXnBoZmVaUUhHQkVDQEA3Ojo8Pjk8OTc2NTk6Njo8Ozc8QEA8Ojo9Ojw/Pj08OUA8PDo6OT9APT08PUBBQz9APz5BOz9ARkpCP2LS2NfX2NjY2NjY2NjY2dnZ2dnZ2tra29vb29vb28/Pz8/Pz8/P0M6fkGyclteqo9PSrqa1mJ/Vqpmq1M/Q0NDQ1qWZtq6bqIiceZ+phZml1dHR0NDQ0dHQ0NDQ0NDQ0NDQ0NHR0tLT09PT1NTU1dXV1dbW1tbX19bW1tbW1tbW1tbX1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tfW1tfX19jY2NfX19fX2NjY2NjY2NjY2NnZ2dnZ2dnZ2dnZ2dna2tnZ2dnZ2dnZ2dnZ2dnZ2dnZ2djY2dnZ2dnZ2dnZ2dnZ2NjY2NjY2NjX19fX1tbW1tbW1tbW1tbW1tbX19fX19fW1tbW1tbX0pNuYFxxZGdkWlVKQENHREFBODs/PD07PDw3NTU4OTY4Ozo5PDo+Pzw9PTk8Pz49Ojo+OTw6Ojg+Pzw9PTw+QEFDQT48PDpCRERKRkJd0NnX19jY2NjY2NjY2dnZ2dna2trb29vb29vb29vPz8/Pz8/Pz9G9n8O31pfA09HQ0srSzZeb1KqZq9XRz9DQ0NWlmra3ta+mnIq9raaYr9bR0dHR0dHR0dHR0NDR0dHR0dHR0tLT09PU1NTV1dXV1tbW1tfX19fX19bW1tbW1tfX19fW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW19fX19fY2NjY2NjY2NjY2NjY2djZ2dnZ2dnZ2dnZ2dnZ2drZ2tnZ2dnZ2dnZ2dnZ2dnZ2djY2NjY2NjZ2dnZ2dnZ2dnZ2dnY2NjY2NjY2NfX19fX19fX19fW1tfX1tbX19fX19fX19fX19bW19GSbF1cb2doYl1PRj9ISEZFQDw8Pj48PT08NzU2OTk2Ojs6Ojs4QD86PDw5PD49Ozs6Pzk/Ojs5PT49Pjw7PTxAQ0I/Pz47Q0ZGR0hEWc3a2NjY2NjZ2dnZ2dnZ2dna2trb29vb29vb29vb0NDQz8/Pz8/Pz5V+e6WS1KKa08ySl6ObodirmavV0pem09DWppq0xqOXl52lp5aYmrrV0dHR0dHR0dHR0dHR0dHR0tLS0tLS09PU1NTV1dXV1tbW19fX19fX19fX19fX19fX19fX1tbW1tbW1tbW1tbX19bW1tbW1tbW1tbW1tbW1tbW1tbW1tfX19fY2NjY2NjY2NjY2NjY2dnZ2dnZ2dnZ2dnZ2dnZ2tra2tra2tnZ2dnZ2dnZ2dnZ2djY2NjY2NjZ2dnZ2tnZ2dnZ2dnZ2djY2NjY2NjY2NjX19fX19fX19fX19fX19fX19fX19fX19fX1tfPjGRWXnBrXGBgTkVITUlJT0M+OkI9PUBCOzU1Nzw6Nzo7Ojo7OT09OTo6OT0+Pz07OT47PDo8Ozk+PD47PD0+QENCPz5BPEFDR0ZGRVXJ29jY2NnZ2dnZ2dnZ2dra2tvb29vb29zc3Nzc3NDQ0NDQ0M/Pz9DR1aeZrcmjqL7KnbGdo7XZqZup2LirocfS16Wbsdifq6Sb0J+rpJvQ0tLS0tLS0tLS0tLR0dHS0tLT0tPT09PU1NTV1dbW1tbX19fX19fX19fX19fX19fX19fX19bW1tbW1tfX19fX19fW1tbW1tbW1tbX19fW1tbW1tbW1tbX19fX2NjY2NjY2NnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dra2tra2tra2trZ2dnZ2dnZ2dnZ2djY2NjY2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnY2dnY2NjY2NjX19fX19fX19fX19fX19fY2NfX19fX19fYzYZdV2JvZE9dVEtIRlNRS0tAPj1EPD9DRj01NTc7OTY6Ozo8PTo7Pzo6OTg6PT0/Pjs/Oz49Ojs5Pjs9PD0+QURCQD8+PzxAQUVHRURSxdvY2dnZ2dnZ2dnZ2tra2tvb29vb3Nzc3Nzc3NzQ0NDQ0NDQ0NDQ0NO5gL3Tm5bP1LWLkZ/T1LyBu9TOlKDT0dS1gsPVxZCNt9fCj4271NHS0tLS0tLS0tLS0tLS0tLT09PT09PU1NXV1dbW1tfX19fX19fY2NjY19fX19fX19fX19fX19fW1tbX19fX19fW1tbW1tbW1tbW19fX1tbW1tbW1tbX19fX19jY2NjY2NnZ2dnZ2dnZ2dnZ2tnZ2tra2tra2tra29ra2tra2tnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2NjY2NjX19fX19fX19fY2NjY2NjY2NjY2NfX2ct+WlVpaltMX01KTEpVTEZCPDw/RkVHS0k9NjY3Ojk3OTo7Ojw9OT45OTo4Oz0+PkE+PTk8PDo9Pj47PTk5Oj9FQUA+PT8/QkBHRURFUMHc2dnZ2dnZ2dna2trb29vb29vb3Nzc3Nzc3dzc0NDQ0NDQ0NDQ0NDQ0cHR0crI0tDUxLjS0tHSwtLQ08fM0tHR0cPU0dTHw9XR1cXE1dHS0tLS09PT09PT09LS0tPT09PU1NTU1NXV1dbW1tfX19fX19fX2NjY2NjX19fX2NfX19fX19fX19fX19fX19fX1tbW1tbW1tbW1tfX1tbW1tbW1tbW19fX19fY2NjY2NjY2dnZ2dnZ2dnZ2dra2tra2tra2tra29va2tra2tra2dnZ2dna2tnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dna2tnZ2dnZ2dnZ2djY2NjX19fX19fY2NjY2NjY2NjY2NjY19rHd1xSZ2laTlpOTFBRV0VKPz89P0FETExBPTc3NTo4ODk5Ojs8Pjw+ODo6OTs+P0A9Pj46NTo6Oz0/Ojs5Ojw+QkJAPz8/P0FCR0RDRE683dnZ2dnZ2dna2tvb29vb29vb3Nzc3Nzc3d3d3dDR0dDQ0NDQ0NDQ0NDS0NDR0dDQ0dPU0dHR0dPR0dHS0tHR0tLU0tLS1NXT09PU1NLS0tPT09PT09PT09PT09PT09PU1NTU1dXV1dbW1tfX19fX2NjY2NjY2NjY2NfX19jY19fX19fX19fX19fX19fX19fX1tbW1tbW1tbX19bW1tbW1tbW1tfX19fX2NjY2NjY2NnZ2dna2tra2tra2tra2tra2tra2tvb2tra2tra2trZ2tra2tra2tra2tra2tnZ2dnZ2dnZ2dnZ2trZ2tra29ra2trZ2dnZ2dnZ2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjbwXNYVWlrU0xSTlBSWVRGSTw+Qz9BQkVKPT03ODY5Nzc4OTk7Oz0/QDw9ODk7Ozs/Pjw8OTU6PT47OTk7PD8/P0JCQT1BPUBBQkZCQkJLtd7Z2dra2tra2tvb29vb29vc3Nzc3Nzd3d3d3d3R0dHR0dHR0dHR0dDQ0NDQ0NDQ0dHR0dHR0dHR0dHR0dHS0tLS0tLS0tPT09PT09PT09PT09PT09TU1NPT1NTU1NTU1NXV1dXV1dXW1tbX19fX2NjY2NjY2NjY2NjY19fY2NjX19fX19fX19fX19fX19fX19fX19fW1tbX19fX1tbW1tbW1tbX19fX19jY2NjY2NnZ2dna2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tnZ2dnZ2dnZ2NjY2NjY2NnZ2dnZ2dnZ2NjY2NjY3LxvVFRsbExLUkpUUlVLRkQ6PkdEREFERjw/ODk6OTU5OTo3PD07PkA9PTc5Ojs5Pjs5OTY2Oj1AQT47PDk6Pj9DQT4/Qj0+QkNFQkFCSrDe2dra2tvb29vb29vb29vc3Nzc3Nzd3d3d3d3d0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0tLS0tLS0tLS0tLS0tLS0tPT09PT09PT09PT09PT1NTU1NTU1NTU1NTU1dXV1dXV1tbW1tbW19fX19jY2NjY2NjY2NjY2NjY2NjY2NjY19fX19fX19fX19fX19fX19fX19fX19fX19fW1tbW1tfW19fX19jY2NjY2NjZ2dnZ2dra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2trZ2dnZ2dnZ2djZ2dnZ2dnZ2dnZ2dnZ2dnY2Ny2a1NbcGtLVVdSXFFXSEQ+PEJKRT1ISj89PDc4ODo1OTg5Njs+PD1APDw1OTk8Oj87OTk0ODw9PUFBPD47Ojw+QD89PkE9PUNGR0I/Qkmq39ra29vb29vb29vb3Nzc3Nzc3N3d3d3d3d3d3dHR0dHR0dHR0dHR0dHR0dHR0dHS0M/U0M7P0tLT0tLS0tLS0tLS0tPT09TU1NTU1NTU1NTU1NTU1NTU1NTU1NTV1dXV1dXV1dbW1tbW19fX19fY2NjY2NjY2NjY2NjY2NjY2NjY2NjX19fX19fX19jY2NfX19fX19fX19fX19fX19fX19fX19fX19jY2NjY2NjY2dnZ2dra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tvb29va2tra2tra2tra2tra2tra2tnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dndsGRTYXJfT1pUV19RUkdCPUVJS0FBTEQ/Pzs5ODg5Mzg2ODY5Pj0+Pz06Njo7Pjs9PTo5Njg6PTtAQDxAPz0/P0I+PD48PEJFSElCPkNJpODa29vb29vb3Nzc3Nzc3Nzc3N3d3d3d3d3d3t7S0tLS0tLS0tLS0dHR0dHR0dPT0bm7zLqbnLrQyNPT0tLS09PT09PT09PU1NTU1NTU1NTU1NTU1dXV1dXV1dXV1dXV1dbW1tbW1tbX19fX19fY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjX19fX19fX19fX19fX19fX19fX19jY2NjY2NjY2NjZ2dra2tra2tra2tra2tra2tra2tra2tra29va2tra29va2tvb2tra2tra2tra2tra2trb29vb29va2tra2tra2tra2tra2tra2tra2tnZ2dnZ2trZ2dnZ2dnZ2dnZ2dnZ3qpfVWBuW1VZUVpeT0xHQ0ZNSUZEREk7QUE7PDg4NjU4Njk4Nzw/QT89Ojc8Pz48Pz87OjY4OD09QEE9QD5BQD1AOjs6Pj1BRUdKQkBDR57h29vb29vc3Nzc3Nzc3Nzc3d3d3d3d3d7e3t7e0tLS0tLS0tLS0tLS0tLS0tO+wMqaoKKViJGeqpOpz9TT09PT09PT09PU1NTU1NTU1NTU1NTV1dXV1dXV1dXV1dXV1tbW1tbW1tbX19fX19fY2NjY2NnZ2dnZ2dnZ2dnZ2djY2djY2NjY2NjY2NjY2NjY2NjY2NjX19fX19fX19fX19fX19fX19fY2NjY2NjY2NjZ2dna2tra2tra2tra2tra2tra2tra29vb29vb29vb29vb29vb29vb29ra2tra2tra2tra2tvb29vb29va29vb29vb29va2tra2tra2tra2tra2tra2trZ2dnZ2dnZ2dnZ2d6iXFVeblheXU5aUFROQ0NMSUlJRklEPEFBPDs4NzY3OTc3OTk9P0E/PDo5QD88PkI/Ojg3NzY9P0BAPUBBPz88PTs7OD48P0VJSEE/Q0aX4dvb29zc3Nzc3Nzc3N3d3d3d3d3d3t7e3t7e3tPT09PT0tLS0tLS0tLS0tTIlZyum5m1iX2TjIKBhMTV09PT09PT09PU1NTU1dXV1dXV1dXV1dXV1dXV1dXV1tbW1tbW1tbW1tfX19fX19fX2NjY2NjY2dnZ2dnZ2dnZ2dnZ2dnZ2NjY2NjY2NjY2NjY2NjY2NjY2NfX19fX19fX19fX19fX19fX2NjY2NjY2NjY2dnZ2dnZ2dna2tra2tra2tra2tra29vb29vb29vb29vb29vb29vb29vb2tra2tra2tra2tvb29vb29vb2tvb29vb29vb2tra2tra2tra2tra2tra2tra2tra2tra2tnZ2dndmlpYYW5ZYVdPV01QRUJETElNS0ZJRT5CRDg4ODY3OTc1Njk4PT1BPjo4OT4+PD9APzw1Njc2PD4/PjtAQEA/Pj4/Pjs/PkFCRkdCQENIkeLb29zc3Nzc3d3d3d3d3d3d3d7e3t7e3t7f39/U09PT09PT09PT09LS0tLTz6h+kayPko6MhoCIiYSQo8rU09PT09PU1NTU1dXV1dXV1dXV1dXV1dbW1tbW1tbW1tbW1tbW19fX19fX19fX2NjY2NjY2dnZ2dnZ2dnZ2dnZ2dnZ2dnY2NjY2NjY19jY2NjY2NjY2NjY2NjX19fX19fX19fX19fY2NjY2NjY2NjY2NnZ2dnZ2dna2tra2tra2tra2tra29vb29vb29vb29vb29vb29vb29vb29ra2tra2tra2tvb29vb29vb29vb29vb29vb29va2tra2tra2tra2tra29vb29ra2tra2tra2tna3JJaWWNuWlpSVV5QTDxAR05IUklIRT48SEY4OTc1Nzg3NTg5ODs+Pj07ODlBPj1AP0E+NzU5Njs+QUI/P0BAQUI/Pj8+QUBEQUZIQj9FSozi3Nzc3Nzc3d3d3d3d3d3e3t7e3t7f39/f39/f1NTU09PT09PT09PT09PWtaWaiIuQhYCFi4iBg4qLf4bC1tTU1NTU1NTV1dXV1dXV1dXV1dXW1tbW1tbW1tbX19fX19fX19fX2NjY2NjY2NjY2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2djY2NjY2NjY2NjY2NjY2NjY2NjY2NjX19fX19fX19fY2NjY2NjY2NjY2dnZ2dna2dra2tra2tra2tra2tra2tvb29vb29vb29vb29vb29vb29vb29vb29ra2tra2trb29vb29vb29vb29vb29vb29vb29vb2tra2tra2tra29vb29vb29vb29vb2tra29uIWltnalxYTFpfVkg6TEhMSkpDREVDQUxINzo3Njc4ODU4Nzg5PDw7Ozk4QD89Pj8/PDY3PDQ3P0JCQUBAPz8/QT09P0A+QEBGRT09REuI4tzc3Nzd3d3d3d7e3t7e3t7e3t/f39/f39/f39TU1NTU1NPT09PT09PUxZKCg4WGfYGCfXx5foGCg36k29bU1NTU1NTV1dXV1dXV1tbV1tbW1tbW1tfX19fX19fX19fX19fX19jY2NjY2NjZ2dnZ2dnZ2dna2tnZ2dnZ2dnZ2dnY2NnY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjX19fX19fY2NjY2NjY2NjY2dnZ2dna2tra2tra2tra2tra29vb29vb29vb29vc3Nzc3Nvb29vb29vb29vb29vb2tra2tra29vb29zb29zb29vb29vb29vb29vb29vb29va2tvb29vb29vb29vb29vb29vb2tvZgFpebWhaU0ldW1hKRE1ISlNMR0ZBQD9KQjg7NjY5OTc1ODY4Ozo7Ojw5OD09O0A9Ozo2NTw3Oz1CQEFBPD49QEE9PEA/Pz5CREU+PERLg+Lc3d3d3d3d3t7e3t7e3t7f39/f39/f39/f39/V1dTU1NTU1NPT09PT2LKEkKh9g3l2hIh/e3d5gn5+i67A1dTU1NXV1dXV1tbW1tbW1tbW1tbW1tfX19fX19fY2NjY2NjY2NjY2NjY2NjZ2dnZ2dnZ2dna2trZ2dnZ2dnZ2dnY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2dnZ2dna2tra2tra2trb2tra2tvb29vb29vb29vc3Nzc3Nzc29vb29vb29vb29vb29va2trb29vb29zc3Nzc3Nvb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vc1nlcWmxmWFJPYFFSQUhHSkZYTEZAQENDSz87Ozc4ODc2NTc2ODo5PDw6PTs/PTs9Pjw7ODg8OT0/QkFCQzw8P0FCPj1BQkNCREVDQDtDTH3h3d3d3d3e3t7e3t7e39/f39/f39/f39/g4ODg1dXV1NXU1NTU1NPU0ruen3WKeXuIgICChYGDcnOAhYOMrNfV1NXV1dXW1tbW1tbW1tbW1tbW19fX19fX2NjY2NjY2NjY2NjZ2dnZ2dnZ2dnY2NnZ2dna2tra2trZ2dnZ2dnZ2djY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2dnZ2dna2tra2tra29vb29ra2trb3Nzc3Nzc29zc3Nzc3Nzc3Nzb29vb29vb29vb29rb29vb29vb29zc3Nzc3Nzc3Nvb29zc3Nzc3Nvb29vb29vb29vb29vc3Nzc3Nzc3Nvb29vb3dByXV9wZVdLUGNPS0JHQ0pIS0ZBPEE9SFFBOjo3Nzg3Njc4Nzw6OD09PD47QD88Pz07Ojs5Ojk8QEJAQkNAPUFAPz1AQkNDQUBAP0A7RU144N3d3d7e3t/f39/f39/f39/f3+Dg4ODg4ODg4NXV1dXV1dXV1NXU18h4i4V8goh6g4SBfoKCc2l0hYuGkJ3U1tXU1dbW1tbW1tbW1tbW19fX19fX19jY2NjY2NjY2NjZ2dnZ2dnZ2dnZ2dnZ2dnZ2dra2tra2tra2dnZ2dnZ2dnY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2dnZ2dna2tra2tra2tra2tvb2tvb3Nzc3Nzc3Nvc3Nzc3Nzc3Nzc29zb29vb29vb29vb29vb29vb29vc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc29vb297KalxjcWVST1heSz9HTElPS0VAPkFCP0lPPjk6NzY7NzY6Ozc7Ojg6PDw+Oz09Oz48Ojs4OTo4OUFCQkFAQDtAQj06PkFCQz8+PT4/PUZOdN/e3t7e3t7f39/f39/f4ODg4ODg4ODg4ODg4OHV1dXV1dXV1dXV1s6dhpl+f5OTin+CgXx9gnNxm4mAgoOJwNnat7TQ19bW1tbX19fX19fX19fX2NjY2NjY2NjY2NjZ2dnZ2dnZ2dnZ2tnZ2dnZ2dra2tra2tra2trZ2dnZ2dnZ2dnZ2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NnZ2dna2tra2tra2tra2tra29vb3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nvb29vb29vb29vb29vb29vc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3NvfwGNaW21gVlBTU0pETEhNSEk8PkFEQ0ZORDw8OTc5OjY4Ozk3PDk4OTw9OzlAPjpBPzw3NTc7ODpAQUVBPz45PUI/Oz1CQkI6Pj07PT5GTnHe3t7e3t/f39/f39/g4ODg4ODg4ODg4OHh4eHh1tbW1tbW1tbV1tjLioCHhYOXjHh7e3lvfYF1a3ebdHZ7eInHxpiMrdjZ19fX19fX19fY2NjY2NjY2NjY2NjY2NjY2dnZ2drZ2dna2tra2tra2tra2tra2tra2tra2dnZ2dnZ2dnZ2dnZ2dnZ2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NnZ2dnZ2dnZ2dna2tra2tra2tra2tra29vb3Nzc3dzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nvb29vb29zb29vb3Nzc3Nzc3Nzd3dzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3d3d3d3d3Nzc3Nzc4LdjV1lrYlJNVVFMSktGS0ZDQD5CQT9FTT4+PTg5OTo3OTo3NT03Nzo+PDs7Qjw5Pz05NjY4PTk6QEJGQD49PEBCREA9QD9DO0A9PD4/Rk9t3N/e3t/f3+Dg4ODg4ODg4ODg4OHh4eHh4eHh4dbW1tbW1tbW1tfVrYZ6d32rn3l4entzdH+Dfm9xe3l6c3t2k4qFgImkzdnY19fX2NjY2NjY2NjY2NjY2NjY2NjY2NnZ2dna2tna2tra2tra2tra2tra2tra2tra2tnZ2dnZ2dnZ2dnZ2dnZ2dnZ2djY2NjY2NjY2NjY2NjY2NjY2NjY2dnZ2dnZ2dnZ2dra2tra2tra2tra29vb29vc3Nzc3N3d3d3c3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc29vb29vc3Nzb3Nzc3Nzc3N3d3d3d3d3d3dzc3Nzc3Nzd3d3c3Nzc3Nzc3N3d3d3d3d3d3d3d3dzc3OGtYVtebGJSTVZMTUdLS0RGQkI7QT08RUxCQT44Ojk6Nzc5NjY6NTs+QDs9Oz89PD89Ojk5Ojw5PEVDRkA/PkBDQkQ9OT0/QT1CPz1APkdPadvf3t/f3+Dg4ODg4ODh4eHh4eHh4eHh4eHi4uLW1tbW1tbW1tfQmH+Qh4N9eoN2e3Vzenl6kKqmd3JyfoeHh4CAfoKEhJHJzNnX19jY2NjY2NjY2NjY2NjY2NjY2NnZ2dnZ2tra2tra2tra2tra29va2tra2tra2tra2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2djZ2dnZ2dnZ2djY2NnZ2dnZ2dnZ2dnZ2tra2tra2tra2tra29vb29vb3Nzc3N3d3d3d3d3d3d3d3d3d3d3c3Nzc3Nzc3Nzb29vb3Nzc3Nzc3Nzc3Nzd3d3d3d3d3d3d3dzc3N3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3NzhpV9UYm1iUE9TSUhHRkpJSUJBPkJCPEVFREA+ODo4Ozc3Ojc4ODY+Pz07PDk9PDo+PTs6Njc7NjpEQUY+Pz8/PkNBPzs9PT47REM/PjxIT2fZ4N/f3+Dg4ODg4eHh4eHh4eHh4eLi4uLi4uLi1tbW1tbW19jYyH52doN+fnR2eIaCenl1d5yhu6GEgoCAfoeKinx/gYaMnKjO2NjY2NjY2NjY2djY2NjZ2djY2NjY2dnZ2dra2tra2trb29rb29rb2tra2tra2tra2tnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dna2tra2tra2tra2tra2trb29vb29zc3Nzc3N3d3d3d3d3d3d3d3d3d3d3d3dzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3e3t7e3t7e3d3d3d3c35pbT2drXFBRUElDT0pLR0xHSkJAP0FHREBBPDg8ODg1ODk3Njc3QEA/Ozw5Pj04PTw8Ojc4PTk/RENGPkE/QkBDPzw6Pj0/PkVEPz07S1Fj1+Hf4ODg4ODh4eHh4eHh4uLi4uLi4uLi4uLj49bW1tbW19XB3LRueHJze3B6eXaFiIR7eH2AgZiljH98fnuRhZaLhoGDgY6Rvd3Z2NjY2NjZ2dnZ2dnZ2dnZ2dnY2dnZ2dna2tra2trb29va2tva2tra2trb29ra2tra2tnZ2dnZ2dnZ2dnZ2dna2trZ2dnZ2dra2tra2tnZ2dnZ2dna2tra2tra2tra2tra2tra2trb29vc3Nzc3Nzc3N3d3d3d3d3d3d3d3d3d3d3d3d3d3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3e3t7e3t7e3t7e3t7e3t7e3t3d3d6NWFdobllQUUtISlNJTUhNSUtBQz9DRkJBRDo6PDg2NDg4NzY2Nj8+Pjo8OTw7Oj09PDw4Ozw8RERERT4/PkI+Qj84PT8/Q0NCQEE+O0xUY9Xh3+Dg4OHh4eHh4eLi4uLi4uLi4uLi4uPj4+PW1tbW1teslLZ6eHJvd5V7dHuLgHh1bn6Fg3t/hYhyfH2bnI6JioJ+g32Hk5rH1NjY2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dna2tra2trb29vb29vb29vb2tra2tra2tra2tra2tnZ2dnZ2dnZ2dna2tra2tra2tra2tra2tra2tra2tra2tra2trb2tra2tra2tra2trb29vc3Nzc3Nzc3Nzd3d3d3d3d3d3d3d3d3d3d3d3d3d3c3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3N3d3d3d3d3d3d3d3d3d3d3d3d3e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3d7Zf1lgaGxcUUtHR09LTk5PTURGQkg/Q0hEREA6Ozs4NzU3Nzc4NThAPkA7PDk8Ozw+Ojk7OTk7OUZERUI8QD4/PEBDOz5AP0A/Qj8+OjtKVWPV4eDg4eHh4eHi4uLi4uLi4uLi4uPj4+Pj4+Pj1tbX19vKhYR3cXJubniVhHt4hH95dnB4c3eLkY6CdnN9ioaId3d1d4ODfIiIk8Pb2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dra2trb2tvb29vb29vb29vb29rb2tra2tra2tra2tra2tnZ2dnZ2dna2tra2tra2tra2trb2tra2tra2tra2tra2trb29vb2tra2trb29vb29vb3Nzc3Nzc3Nzd3d3d3d3d3d3d3d3d3d3d3d7e3d3d3d3c3Nzc3Nzc3Nzc3Nzc3Nzc3d3d3d3d3d3d3d3d3d3d3d3d3d7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7f0nVZaGlqVk5KSE1OR01EUElGSD9FPUZMREM+Ozs8OTc3OTY2OTU4Pj4/PTs8QDs9PDo3Ozc5OThHREVCPUE9Qj8+QDw/QUE/QEJAPjs8S1Ri1OLg4eHh4eLi4uLi4uLi4+Pj4+Pj4+Pj4+Pj49fX19fEknuJf29sbnV2foSBg4qGfnVybWVtiIaKjoR7c4OHint4e4OPj4GEioqxztrZ2dnZ2dnZ2dna2tra2tra2tra2trb29vb29zc3Nzb29vb29vb29va2tra2tra2tra2tra2tra2tra2tra2tra2tra2tvb29va2tra2tra2tvb2tvb29vb29vb29vb29vb29vb29zc3Nzc3Nzc3d3d3d3d3d3d3d3d3d3d3t7e3t3d3d3d3d3d3d3d3dzc3Nzc3Nzc3d3d3d3d3d3e3t7e3t7e3t7e3t7e3t7e3t7e3t7f39/f39/f39/f39/f3t7e4clsW2pqalNOR0hOT0VIRk1JSUA7RD5ISUA9PDo6Ojg2ODo3Nzk0OD08PT07ODw8PDw4Njc4OTo6RUJFQT9APEI/Q0M+PkNEQUBAP0A8PUtRYdPj4OHh4uLi4uLi4uPj4+Pj4+Pj4+Pj4+Pj5OTX19fZqXaFfnx3bHB3eXh8jH2KhYB3anN0d3p9bot7fnl6foR/gIGDfnh8foeGlrbT2tnZ2dra2tra2tra2tra2tra2tvb29vb3Nzc3Nzc3Nvb29vb29vb29ra2tra2tra2tra2tra2tra2tra2tra29ra29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb3Nzc3Nzc3Nzc3d3d3d3d3d3d3d3d3d3d3d7e3t7d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3t7e3t7e3t7e3t7e3t7e3t7e3t7e39/f39/f39/f39/f39/f39/e3uO9amFpa2lRTkZNTEtKWE1OR0FAQE9BRD9AOzw4OTk5Njg2NjY4NDs+PD07OTY6Ojk6OTU4OTg5OkJERj8+Pj5AQEBCPzxBQD88Pj9BOT5KT17S4+Hh4eLi4uLi4+Pj4+Pj4+Pj4+Pj4+Tk5OTk19fX2sqKhIB5c29tcXN1d4CUeHaAfHWHhXd1cnWgmXp7d3Z5doR0bWxue3iAmouTu9za2tra2tra2trb29vb29vb29vb29zc3Nzc3Nzc3Nzc3Nzc29vb29vb2tra2tra2tra2tra2tra2tra2tra29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vc3Nzc3Nzc3Nzc3d3d3d3d3d3d3d3d3d3d3d3e3t7e3t3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3t7e3t7e3t7e3t7e3t7e3t7e3t/f39/f39/f39/f39/f39/f39/f397js2lpbmloUFBPTExPUk9LU0Y/RURERD48PDg7ODc5OTU2ODY2NzM6Pjs+PTc6Pjk5OTk2Ojo4NzxDRUc/Pzs/PkA9PkE9Oz0+OUFAQDhBTlFc0OTh4eLi4uLj4+Pj4+Pj4+Pj4+Pk5OTk5OTk5NjY2NjauY6AenZ1bmpveHCBfWt0cnZ3hIV5h4d5lY55eXp1d3pza298gHx2fYh8gLLe2tra2tvb29vb29vb29vc3Nzc3Nzc3Nzc3dzc3Nzc3Nzc3Nzb29vb29rb29vb29ra2tra2tra2tra29va29vb29vb29vb29zc3Nzb29vb29vb29vb29vc3Nvb3Nzc3Nzc3Nzc3Nzc3Nzc3d3d3d3d3t7e3t7e3d7e3t3d3t7e3t7e3t7d3d3d3d3d3d3d3d3d3d3d3d3d3t7e3t7e3t7e3t7f39/f39/f39/f39/f39/f39/f4ODg4ODg4N/f39/f4qpqa2hrZFNQT0ZQVFJOSFJLPkREQ0I7Ozk6Ojg2Nzg1NjY4ODg0Oz88Pzw5PDw3Ozo6Nzo6Nzo9Q0JDPUE+Pzw5PT5BQDs8PDtFQD47Q05TXNDk4eLi4uLj4+Pj4+Pj4+Pj5OTk5OTk5OTk5OTY2NjZ1p5vdntveHh2cG50d3BwdHBzb36Jc3qGhY2EenNtcoB6hn1vg5OBdnx9g4a13drb29vc29vc3Nzc3Nzc3Nzc3Nzc3Nzc3d3d3Nzc3Nzc3Nzc3Nzb29vb29vb29vb29ra2tra2tvb29vb29vb3Nzc3Nzc3Nzc3Nzc3Nzc3Nvb29vb29vc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzd3d3d3d3d3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3d3d3d3d3d7e3t7e3t7e3t7e3t7f39/f39/f39/f39/f39/f39/g4ODg4ODg4ODg4ODg4N/f3+KgbWhma2ZVVlJHUFFOS0xMRUJIRUc9OD08Ojo3Nzg2Nzc2NTY3NDg+PD09Ojg6OD46Ozc4Nzc6Oj5DRDtDQj49OD1AQUM/Pjw+RTw+PUJNUF/S4+Hi4uLj4+Pj4+Pj4+Pk5OTk5OTk5OTk5OTk2NjY3MB2doCCfnp4eHBsdXlya399bHNvdGdoaYB/aWl4c2d+iYl4cIKGe3d9foWKvN3b3Nzc3Nzc3Nzc3Nzc3Nzc3d3c3Nzc3N3d3dzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nvb29vb29vb29vb3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzd3d3d3d3d3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7f39/f39/f39/f39/f39/f4ODg4ODg4ODg4ODg4ODg4ODg4ODflGttZm5mU1NJUFlUTEhGTkZGRUJGPTs+PDs5Nzc4NTc5NjQ1NzU4PDs9Pjo6OztAOTs7ODc6OTlAQkE8QUE/Pzk/QEJFQ0FAQEM7Oz1ES01g1uTi4uLi4+Pj4+Pj4+Pk5OTk5OTk5OTk5OTk5NnZ2tmYc3uqhJaCcnR1dn14aGx8d2h4d25rcHR5gIJ3dHyBhIJ9c3CAin94gn95g8je29zc3Nzc3Nzc3Nzc3d3d3d3d3d3d3d3d3N3d3dzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nvb29zc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3N3d3d3d3d3d3d3d3d3d3d3d3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e39/f39/f39/f4N/f39/f3+Dg4ODg4ODg4ODg4ODg4ODg4ODg4ODh24tubWdzY1lRTVVbV0hDSUZOS0dCRD8/Qjo7OjY2NzU2NzY0ODc2Ozw7Pj86PDk8Qjg3OTo6Ojk6QUFCQUJDQEE+PT9CQ0NEQUJGOTg9REpOYtjk4uLi4+Pj4+Pj5OTk5OTk5OTk5OTk5OTk5OXZ2drcqHGCtXiRfnNsem6EgXaCfWtoan+DeHZ8dX2FhXRmcHl9d316gIqFe318foC03tzc3Nzc3N3d3d3d3d3d3d3d3d3d3d3d3dzd3d3d3dzc3N3c3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzd3Nzd3d3d3d3d3Nzc3Nzc3Nzc3Nzc3N3d3d3d3d3d3d3d3d3d3d3d3d3d3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e397e3t7e39/f39/f39/f39/g4ODg4ODg4ODg4ODg4ODg4ODg4ODg4eDg4ODg4ODg4tiFb3FrdWFWT1VVXE9ETUY+SkdKRUQ8P0I6PDk4Njg0NTY3NDc2NDk7Ozw7OD47PEE4ODo9OD04Oj09QEBAP0FCP0A+QENCQ0FBRTc2O0RMTmPa5OLi4+Pj4+Pj5OTk5OTk5OTk5OTk5OTk5OXl29ra3Z5sbnNxhY1ybXBuf391hH5rcnZ2enN4gXhzbnVwbWt2fHmFiIB/f392coODsd/c3Nzc3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3Nzd3d3c3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3N3d3d3d3d3d3d3d3d3d3d3d3d3c3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e39/f39/f39/f39/f39/f39/f39/f39/f39/f4ODg4ODg4ODg4ODg4ODg4ODg4OHh4eDg4eHh4eHh4eHh4OLXhW1xb3ZeUldTWlpRSkhDQFFAQkQ8OT9BOjw5NzU3NDU2NjQ3NTY9PDo9PTk+OjxAODo6PDY7OTs+PUJCQjtBQkBDQEBEREM8PUA3OjxFS01l3OPi4uPj4+Pj5OTk5OTk5OTk5OTk5OXl5eXl5dPOxsB+cWxveHt2b3VuanNzbZKGeG50dG5vdIZ/b2twboJ0bXZyfY2DdnF/d3mKgabf3Nzc3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3dzc3d3d3dzc3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3t7e3t7e3t7e3t7e3t/f3t7e3t7f39/f39/f39/f39/f39/f39/f39/f39/f39/f4ODg4ODg4ODg4ODg4ODg4ODg4ODg4eHh4eHh4eHh4eHh4eHh4eHi1oZucG1xYFJZUFdfWUpMTElSP0Q9OTtCRjs6OTc0NTY1NzU0NjY2Pj07Pz45PTk7Pjg9Ozo0ODtAQENCQ0FCRkE/Q0BBQkREOz0+OTs8QkxNZODl4+Pk5OTj4+Tk5OTk5OTk5OTk5eXl5eXl5eW5t7Woc3JscHd6dHd4bXFydXd/hHRyc2xsa3F8bnBudGuBf3GAd32Eg355gHNygYqg2d3c3d3d3d3d3d7e3t3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3e3t7e3t7e3t7d3d3d3t7e3t7e3t7e3t7f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f4ODg4ODg4ODg4ODg4ODg4ODg4OHh4eHh4eHh4eHh4eHh4eHh4eHh49WHcWxqbF5YWlVXYFZWUE9QTD1BOjs8RkE4Ojg3MzY1Njk2NTg1Nz89Oz8+OT04Ozw5PTs7NTo9Q0JCPENDREREQUE/PkJDQzw9Pjg5PENLS2PN0dnh1sjY4+Tk5OTk5OTk5OTk5eXl5eXl5eXltbW2q3J5cm59f3Z1d2hqaGlwb3Zta2tnZWZxdG15gG5teXd2iHhxa2podXV5dHV/wd/c3d3d3d3d3d3e3t7e3d3d3d7d3d3d3d3d3d3d3t7e3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3e3t7e3t7e3t3d3d3d3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f4ODg39/g4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4OHh4eHh4eHh4eHh4eHh4eHi4uHh4ePVhnFwY2lhV1NZV19MUk9STUtAPjg5O0E+ODc5NjQ3Njc6NjY2NDk+Pzo8Pzo/OTo6Nzo9PDk5PEFBPTtBQ0VDRkA+Pj5BRUQ+QEE3OD5GSEpesrW4wbm1u8jg5eXl5OTl5OXl5+fn5+fm5ebm5ra2tbWOfX5weoR1cnZnYmNlbGtyb2ZpbHZtd4Z9hXlsbHd4a3ZwfH14c3V5fHd2h7ng3d3d3d3d3d7e3t7e3t7d3t7e3t7d3d3d3d3d3t7e3t7d3t7e3t7e3t3d3d3d3d3d3d7e3t7e3t7e3t7d3d3d3d3d3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4OHh4eHh4eHh4eLi4uLi4uLi4uLi4eHj1Yd1bl5uY1pUU1hXS1NLSk1SR0E4Ozs+PDk4NzU2NTY2OTY4NjY5Pzw6PT07Pzo7Ozk8PDs5Oj4+Pjs8PUFEQkNBQEBBP0JDPDw9Nzs+REVKXrG1tLW2t7e2y9rJ3uXl3eDi3tXU1tPU4OPg39+2treuh3t/bnmNenJ1bWNobGxtaXR4enF5enqIh4N6aWh9cWRvcXyGgX55e318e4an2t7d3d3d3d7e3t7e3t7e3t7e3t7e3d3d3d3d3t7e3t7e3t7e3t7e3t7e3t3e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7f39/e3t7e3t7f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4OHh4eHh4eHh4eLi4uLi4uLi4uLi4uHh49aGdmxhb19dV1lcWlJQSEpXTEVHPUA9Ozs9OTY0NjU1NTg2NzY3OD87OT09PDw5OTw6Pjw6OTg+Qjs7Pj5AREBDRUFAQD0/QDw9PTU5PEJHRl2xtbW2uLm5ubq9uMPT0r3BwcC6u7y6u8TMxb/Dt7e3hGl1gX1ndYd5Z3Vxa2t5eHB3fH15bWl3e3h3bml1j4FwbHl4d3d9gXuGgnmAoNze3d3d3t7e3t7e3t7e3t7e3t7e3t3d3d3d3d7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t/f39/e3t7e3t/f39/f39/f39/f39/f39/f39/f39/f39/f39/f4ODg4ODg39/f39/f39/f3+Dg4N/f4ODg4ODg4ODg4ODg4ODg4ODg4ODh4OHh4eHh4eHh4eHh4eHh4eHh4uLi4uLi4uLi4uLi4uLi4ePXhXJrZ3RhW1hYX15TVVVRVUpMRj9JRDs5PTY2NDc3NTc4Nzc3ODk8PDo+PDg8Oj0+OTs8OTs5P0E8PT9DP0FARUJCQTw9Q0A6Pjw1NDlER0dasbW1tre5ubm5ubm3ubm4uLm5urq6urm5urm6u7e3uX9ucHN6b3B/eXNuc3Vsc3Z4cXFwb2tvcX6Bc2mHhIF9dHOHdW11hYmBgHJ2hafd3d3d3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7f39/f3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f4ODg4ODg4ODg39/f3+Dg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4eDg4eHh4eHh4eHh4eHh4eHh4eHh4eHh4uLi4uLi4uLi4uLi4uLi4uHj14lxa2xyW1dXXWBUUVVUUFJPSkNATUE9Ozk2NTM0NjQ2ODc3Nzk6Pjs8Pjs5PDo8PDk8PTw7PT0+PUNEREBDQkE/QD48PkE8OD06NjY6QkpIWLG1tLa2uLm5uLi5uLe3uLi5urq5ubi4uLi6uru3uKx7cnhxf3ZzfnBsbXpyZ29sbW50cHt3d3Jyd3pvhpJ2f3x8enZ5fH9zfYdyda3T393d3d7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e39/f39/f39/f39/e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f4ODg4ODg4ODg4ODg4ODg4ODf3+Dg4ODg4ODg4ODg4ODg4ODg4eHh4eDg4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4uLi4uLi4uLi4uLi4uLi4uLi49eHb2pxalVWV2FbT1FSUE5XSURESUo/Ojk6NzUzNDk1NzY2Nzg4Ojw7PD46PDo6PTw5PDw9Oz09PDs9REdEQ0E8PDw8Pj5AOzg8ODE1OkFGRVautbW1tre4uLm4uLi4uLe4ubq5uLi3t7i4ubq7t7mqcnB4d3x7e4J3aG5xam9qY2lyf21zcn54dHFsanaAeX2AgH91doB1a4qLgHaR1d/d3d7e39/f3t/f3t7e3t7e3t7e3t7e3t7e3t7e39/f39/f39/f39/f4N/e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t/f39/f39/f39/f39/f39/f39/f39/f3+Dg4ODg4ODf4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHi4uLi4uLi4uLi4uLi4uLi4uLi4uPYhm1sdGVWUFxnWE1YU1JRWUVDS1BOOzk4ODY1NTM5NTY2NzY4Nzk+OT0+OTw5OTw7Njg5OTo8QEA9PkBGQEJCQDo+PEE9Pzs7OzYxNjxCR0RQqLa1tba2tre4t7i4uLi4uLm6ubi4t7e3t7e5ure2tIlyd3h9iXxwem99c2hqbGdnbHRscXd0cWx2c3Fxd3FyfHl4g3Z7d2mLkYp9kM7f3d7e3tvY2drZ297f39/e3+De39/f3Nvc3N3e3uDg3+Dg4ODf3t7e39jS397f397e3t/f3t7f3t/f3t7e3t7e3t7e3t7e3t/f39/f39/f39/f39/f39/f39/f4ODf4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODh4eHh4eHh4eHh4eHh4eHh4eLi4eLi4uLi4uLi4uLi4uLj4+Lj4+Li4uPj4+Pi4uLi4+Lk14NoZ3VkVlVkZVdKWllXW1Q9RU1LSD04NzU3NjQzOTQ0Nzc1Njc5PTo9Pjw9PDk7PDk5Oj45PD4/PkFBQ0FFRUQ+OzxBPjw5PDs3Mzc+REhFSqG2tbW1tbW2tre4uLi4t7e4uLi3tra2tra3uLm2traLfXpsbHp/cGx5dm5qaGdlcXp4b2lvb3B1c21zd4Fnb32CgYNyf3lqcHJ6f6ng393Zy8a/vb6/vsLN0tDW3tnc4NfQzcPCw8PH1dfT2dzX1NjX0MfExce9vM/Kz87Y3djO3N3c2t3T0dze39/e397e3t7e4N/f39/f39/f39/f39/f39/f4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4OHh4eLi4uLi4uLf4uPi4eLg4d7W29/Sw8rJx9Hb3OLk4eHg2dre1sbExcTN2trf5OHi4trX3st9aWZxYVleZWFNTFRLUlpMO0hNSEZBPTc2NjUzNDY2NDg3NjU2OTw7Pj46Pjk5PDk3OTs7Oj49PEBAQ0RCR0ZCQT08Q0A9OTw7Nzc3P0RGRkaZtrS1tbW2tra4uLi4uLi3uLi3s7W2t7a3t7i5tba3opdxb29waW50dnFmZWNrbmdvcm1mZ2tygWVvdnyAeGRzj39zaHFyaWVlbm+w39HFv7u5ubm5ubq6uru6vc3Gw8e/urq6uru7u8HCvcHFvby/vry7urq5ubq6ubm6w8XDucDDwby/ube/z8/U3tjc3t/g3tLa4N/f4ODg39/f39/f39/f3+Dg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODh4eDg4ODg4ODg4ODh4eHh4uLi4eDh4uLi4uHa2t3RwsPCu8XT1uDdydPDrrnAsaqrq6uwtLbJ0sXRxLG4v7Srq6usr7S0vMzE1c60tLureGxtbWBdYl9ZS1NVVFFQREBRTUhEPzo3ODU3MzE1NjQ5ODQ2Njo8Oz08ODw5Njo6ODg5NzU8PDw/QEFAQkRDQkE8PkI/Pz09PTc1OD5DRUNAj7a0tLW1t7i4uLi4uLm5uLe1sautr7Oxs7OztLS0tqaei2tue3ZxeXhnY2hfcXdha25vaG99b25ja2lseHdsa4Z+bHB6dm1scG95sca8uru7urm5ubq6urq6urq6urq6urq6urq7u7q7u7y7urq6ubq7u7q6urq6urq6ubi3t7i4t7e2tbW1tbi3u8e+w8XHzcS4wMnH0tzZ2d/e3uDf39/f4ODh4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODh3Nji4uLi4eHh4OHg3tfGxtHQztTe3tPO0t/SuLi8sq2trKysrrG+ua63rKipqamqq6urqqqqq6ysuKyqqqqrq6urra6urq6urryzrayrpHlub21fXl1dVE1SU1xUSkE/UElIPjg5NjgzNzMwNTczNzg1NzY2Ojw/PDg5Ozo6Ojg5OjY1OTs7Pj9EP0NFQkNCP0BAQT9APjw3ODc6QUVEP4W4tLS1tbe4uLm5uLi3t7SurKuqqq2urq6vsLGzs7WjcG5ucm1wg311aWFlaGZkY2Rxc21td25naW1tZXBzb29zcXN8h4F6dX11n7u6uru7urm5ubm6urq6urq6ubq6urq5uLm5ubm6urq6u7q5ubm5ubq6ubm6ubm4uLi3t7e4uLe3t7a2tbW2tra1tbW1tba1t7e3t7rBvrzGycrb3+Dg3tvd3d7h4tDW4uHg4ODg4ODg4ODg4ODg4OHg4OHi0768zNjd3OLg0dnbxL23sLCxsa+zu7uzsLS9s66urq2tra2sq6qqqqmpqKmpqampqqurqqqqqamoqampqampqaqqqqytrq6urq6urq6sraR4aWJxZmFZWlZRUk5cU0Y9QlJEQTc8OzY5NTY1NDU2NTg3NTY1Nzg7Pjw7OTk5Ojg3Nzk3Njg8Oz47RD8/Q0BBREE+P0M9Pjw+Ojo3Nz9DRj54srCztLW2t7i3trKurq2sq6uqqaqtraysrq+xs7S1t4xucnRqaIB5ZmpmZWxdaG5waGxxYmNmcoJ+dmhobGpueoaBhXx4cXF5gK+6ubq6urm5uLm5ubm5ubm5ubm5ubm4uLe3t7e3uLm5ubm5uLe3t7i5ubi4uLi3t7a2tre3t7e3tra2trW0tLW1tbW2trW1tre3t7e3t7e3tre4v8bP0MS+v8DE19e8ydra4OHg4ODh4eDg4ODh4eDb3t7Uzby3tre6wMDJxLfIvrKwsLCwr7Cvrq6ur7Cwr66urq6uraytrKurq6qpqampqampqampqKmpqKmpqampqKmpqKmpqqqrraytra2ur66trK2heWpjbWdiXFhRUFFLVEpCOklRP0E3PDk0OjU2NTQ1NTY4ODY4Njs6OTw9PTs6ODY2ODg6ODY3Pj09PT5BQUVCQkNBQUBBOj09Pz05Ojc9QUc8bKqmqKutsLGwrqupqKqrq6mpqamrrKytra2usLO0tbilgIdvaWdzdGZrcG1qZGxvcm5rbWNrcHyJhG5qbHx4Y3uKfnNqc25rcY+7ubm5ubm5ubi4ubm5ubm5ubq5uLi4t7e3t7e3t7i5ubi4uLe2tra3t7e3t7a2t7a2tra3tra2tbW1tba1tLS0tbW1tra2tra3t7e3t7i4uLe2t7a2uLm4uLe3uL6+uLq9vcfb4OHg2Nnd4eHg3dfKwcPCurm5uLe4uLi3tbS0tLKysbGxsLCvr6+vr6+vr6+vr66ura2srKyrq6yqqqmoqKmppqepqaehpaipqamoop+hoZyip6inqausrK2ur7Cwrq2unXdwbGphY2BZUU1RTFJGQzlNUEU+ODs3Mjc5Njc0NDM1ODg3OTc7OTo9PTw6Ojk3NDo5ODY1OD8/QEI9RENDQ0FDQEJBQDtAP0A/PDw6O0NIPWOopaWlpqioqKenp6ipqqmoqKipqqqsra6wsLCztLW1taWYdn5xZmt4cW9tZmVsaGNsZ2ZpaX11bWlvfXZ5hWZod294b3Fvcninu7m5ubm5ubm4uLm6ubm5ubm5ubi3t7W1tba2tre3t7e3t7a2tba2tre2tbW1tra3t7e2tbS0tLS0tLS1tLS0tLW1tba2tra2t7e3t7e3t7a2tre2tre3uLe2t7i4t7i4uLi4wMXTyry8w83PyMC9urm5ubq6ubi4uLi4t7W0tLSzs7KysrGwr6+vr66urq+vr6+uraysrKurrKysq6ehoJ6gn5udoaGdlpmkpKaon5mZmZmanZ+gn56fpKqtrq+ura2srJl1cGlrY2FeXVVOU0tSREQ4TktHQTo4NTI2OTY1NDczNzc3ODk3OTo7PT0+ODg4NzU6OTk1OD9AQEFEPkZBQkNAQkNCQT88QEJCQD0+OjpERj5cpqWmpqampqanqKenqKioqKenqaurrKytra2ttLS0tbekc311bnONf3JmanFjaW1jaGZobG51aV9jZ3VzdnpuZ3Bwcn56cYihu7m5ubm6urq6urm2s7a1uLm2trW1tra1tbW1tbW3tra3tra2tbW2tbW1tbS0tLa2t7e3tbS0s7O0tLW1tLS0tbW1tra2tra2t7e3t7e3tra2trW2tbW2tra2tra2tra3tra3uLi3uri4uLe3t7i5ubm5urq6urm4t7e3t7W1tLS0s7OysrKxsbCwr66urq6urq+vra2srKuppaSmpqScmZubmpmampmXl5eXl5aZm5iZmJmZm52en5+dnJ6gpKWko6OioqKQdG5jcGFeXltUU1RIVEo/PFFCRkM7ODYzNzo1NTQ4Mzg5OTc4OTc7OTs9Ozc6NzU2OTk4NTg+Pz9ART5CPz9DPzxBQUI/PT9EQT8+PTk9Q0Y/VaSlpqanqKeoqamop6ioqKioqKiqrKuqqaipq7W1tba5o3eKcXKHhnd0cGh5a2JjYWVsaW5zal9jZWNjZWprYmRqbHaXjX6ovbm3tre5u7u6uLWxrKurqq6wrKyrq62tq6uvsLGvr7CytbW2t7W1trW1tbW1tbW2trSvr7O0tLSvra6vsrW0tbW1tbW2t7e3t7e3t7e3t7e3t7Owsra1tLa2tre3tra2tbW1tra3t7e5uLi4t7e3uLi4ubq6urq5uLi3t7e1tbS0tLS0tLS0s7OysbCvr6+vr66vr62oo6KgnJqampqZmZqbm5qampqbmpmZmZiXl5aYmZmZmpycnZ+foJ+goKChoaCgoJ+fi3RuaXRdYGZeUlRLRFRJPUVTSEVCOzo0NDY5NDQ1NzM4ODg3ODk5Ojs7Pz04OjkzNTg5NjM5PT5AP0A6QEJCQkA/QEJCPz0+QUFCPz06PkVDQFGjpqWlp6inqauqqKaoqKipp6ioqKinp6ioqaq1tbe3t7KZtH99kIx1Z2lqbGZjYGNoZW94cGlicXx5cGpmZmRma3NqhYystrKwra2ttLeysLCtrKuqqaiop6ipqampqKinqKipqaeoqqurra2sqqytraysrq6traunpaSnqqyopKOkpamwsbGztbW2t7i3t7W1tre4t7e3t7Kppaasq6ivtLa1s7W3t7a1tbW2tra3t7e4t7a2t7e3t7m6urq5uLi3t7Wxs7S0tLKxsK6sq6yurrCxsK2rqqmqqKijnJqZmJmYmJiYmZmZmZmZmpqZm5ubnJybmZeYmpqcnJydnJ2foKGhoqKioKGgoKCfnop1amtuWVxhVktPREdVRz5PV0hEPTw4MzQ0ODQ1NDgyODk4ODk6Ojw5OUA8Njk6MzY3OTE0PD8/QEBBOkNGRUJBREJDQTo7P0FCQz9APUBEQ0BPo6empaemqKqqqqakpqenqKioqKimpqaoq6uttba3t7e4rbJ1cHuDdmBiaWtiZWZhZGdmfYh5bHKAfXFvcXhjbW5xZo+srKurq6ysra6urK2trKyqp6WmpaWlpqioqKiopaeoqKeoqKeoqKmqp6Wko6KioqOioKKioaKhoKChoaKjpKOjpaWlqLC0s7OzsKuqqaqztLa3trGopaOioaGipKiqqairs7Sxrq6xs7W2tra3uLi3tre3t7e3t7a2uLe0sa6ppqerrKmnpqWkpKSkpKWnqaajoJ+enZycm5uampmZmJeXmZmZmJiZmpqampqampqbm5mYmpydnZ2dnZucoKGgoaOjoqCgoKCfnp2FdGtsaFdYU0pHTUVITUdAU1dGRz09OTM2Mzc0NTU3Mzg6Ojo6OTw9OjpBPDY9ODM3ODgzNztAPz9AQDpCRUNAQkRDQT87O0BDQkNBQDxBQ0A9TqKnpqanp6mqq6mkpaWlpaaoqKippqanqKmpqrW2tre3t7izc2h7c2JnamtpaWJhZGloXV1tfHJma3J/fHR8bm1zc36gqamrq6uqq62trKusq6mpqKWjpKampqWmp6eqqaamp6enqKinp6iop6WkpKKhoaGhn56en5+fn56foKGho6Wko6OkpKSlp6enpqWkpaampqeqraumpKKhoaChpKWlpaempaeoqKalpaivtLa3trW1tra1tbOwrKupqa6rqKWlpqampaSkpaWlpqWkpKSkpaKhoaGgnp2bm5ucm5qamZiXmJiYmJiZmpmZmZmYmZmZmZqZmZydnJycnJybnJ+fn6ChoaKgoKCfnZ2cgHNrbmReU0pITUZETEtFRFFTQ0c9PDgzNjI4NDY0NjQ4OTg6Ozk7Pjw5PTs5PTczNTk2NTY8QD0/QD88P0JDPkJCQj89Pj5CQ0FFQD86PkVAO0+jpqWkpqeoqaelpKWlpKWnp6eoqKanp6alpqa1tba2trW2uYptcW1vfHxxZ2pmYGFsYFROW2hqbm9tgYJ9cWdxdn6aqKeoqqmpq6urrKqqqqimpaWkoqOlpqalpaWmqaqppqWjpKWmpqSko6Kio6Khn5+fnp6cnJycnZ2dnJ2en6CioaKjo6KhoqKkpaSioqOjpKSjpKSko6Ggn6GipKanp6ipqaelpaSipKSlqK2wsKyrqqusqqmnpaWmpaWlpaalpqioqailpaWkpKSlpKOjpKOioaGhoqKgnp2cnJubm5qZmJiYmJmam5mXl5eWlpeXmJiZmpqcm5qampubm5ucnJ6goKGgnp6enpycm356bnJiXlNNSlBFRk5NQkBPRT5JOz01MzYzODM2Njc1Ojs4OTs5Oj49Ozo5OT03NjY5NjU2PkI+PkE/PT5DQT5DQ0BAO0A/QkJCRUA+Oz5FPzxQoKSjpKOjo6SkoqSlpaSlpqamp6empqalpqaltLW1tbS0tbiBaHx9ZXOCemxwdWFfY1ROT1FbaGxpbGxxbW5xbnScoqSnqKioqauqqqqqqaempaSjo6OjpKSlpqalp6ytqaShnp2epKShn56foKCdnJ2dnJycmpqam5ucnJubm5ydnp6foKChoJ+goaOioKGjpKSjoqSlpaWkop+go6SkpKapqainpaGdnJ+jpaipqainqKioqaempaWkpKSlpqampqampqenpaWko6Ojo6KioqGhoqKhoqOkop+enZ2cmpubmpqZmJeXmJaWlZSUlJWVl5iYmpubnJuampqam5ucm5ucnp+fnpucnJyam5p/fnF0YFtUTUdNSEZMSj8/TkM8QDs8NDM4Mzc0NzU3ODs9ODo6OTk7PTs7ODk+Njc4OTU4OD9APT9BPjs9RD89REA/PzpAQUE/QUVAPjw8Qz88Tp2ioaKioKCipaSkpKWlpqenp6empqampaampbW1tbS0tLS3jHalsXdmc3Jvc2xjZGlYT1JRT09dgG1kYFptkZGSoqKjpaampqenqKiop6alpaOioaGhoaKjpaempqesq6emoJ2cm6Ghnpubmp2cmZiam5qampmZmZubm5uampqampucnZ6goaCfnp+hoJ6foqOko6Omp6inqKWioKGhoaGkpaWlpKCcmZmbnqOmpqampqanpqempaOlpKWlpqiop6enpaWlpaWkpKOjo6KhoqKioqKhoaKjo6Kgn56enZybnJubmZaUlJSTk5OTkpSUlJWWl5qam5ubm5qZmZqanJ2dnZ2dnZuampqamZqXf3dvc11aTkhKTkdFRklERU5APD09PDQ1OzQ2NDY1Njc5Ozg5OTg5OTw7PDc6Ozc4ODg1ODg/Qj9BQTw+P0A8PEJAQT49QT4/Pz1CQUA6OkA8PE+doqGfoJ+dn6OkpKSlpqeoqKenp6ampqampqW1tLS0tLS0tbSXtqd1Znh2Y2xjY2VjW1JTU1JNXqCMeFhodpajnp6hoaOjo6OjpKSlpqalpKSioaGko6OjoqOlpqamp6enpp+bmpuioJqWl5Wam5qXl5iZmpqYmJqampqbm5qZmZmenZ2goqOjo6KkpKWinqGhoaKjpaampqSjoaCgn5+hoZ+goJ2amJiZmpygpKOjpKWmp6alpaOjpKSkpKWnp6ampqampaWmpKOjo6SjoqKjpKGfoKGhoKGgoaCfn56dnZyamJeVk5KSkpKSkpOTkpOUlZaZmpqbm5qampqbnZ6enp2cnJybm5qamZmZlH10bHReWk9IRUdGQkVORT9GOzo+Pzs0Njo2OTM2NDY4OTo4OTc4ODo8Ozw5Ozs6OjY3ODk5Pj9APjw9QD5AOjlAQT89QT8+QUE+QUE/Ojk9PjpQnaCfnJucnJufoqOlpaWlp6iop6ampqanpqantLS0tLOysrGwsK2rkHiGj36amn93Yl1TUlFRTGKgootaiKCgn52YmZycnZ2eoaGgpKenpqWkoqGjp6alpaOipaampaanpqagm5mboaCXkpOSl5qcmpeXl5iampmampqam5qYmJmaoKCgoKGfoaKipKamop6gn5+goaOko6Khn56enpyanZuZmpqZmJeZnqChoaKioqKkpaWmpKSkpKKioqKkpaWlpaWlpaalpaOko6KioqGgoKGgnp+fn5+fnp+foJ+cm5qZl5WUlJSTkZCRkpKSkpKSk5SVl5iZmpmZmpqam5+fnp2cnJycmpmZmpiXl5F8cmdxXl1QRj9BRD9KT0JCRjhDRT4+OTg7Nzc0ODQ1OTo6Ozk3OTo8Ozo8PT48PDo2NzY5OD4/QT47Pz49PDg6PkFAQUE/P0FCP0RBPjo4PkE8U5ycm5uampycnaGio6KjoqSmp6alpaampqSjo7KysK2rp6amp6alpqiln6iop6qnoXmEXFFST0xcnKCAYpmgnp2clZOVlpeZmp2dnqGmpqampKOioqanp6ajpaampaWmp6amop2cn6Gfl5GRkJSXm52YlpeWmJuZmpqampqZl5iam6Ghn56fnpybnJ6goJ6dn56fn6Cio6SjoqCfnp2ZlpeXl5iYmZubnqKioqKioqGio6WlpKOio6SioaGhoqOkpKSko6SkpKSioqKhoqGgoJ+gnp2enp2dnZ2dnp6em5mYl5WTk5SUk5KQj5GSkZKSkZKTlJaXl5iYmZqampyenZ2dnJubmpiYmpmXlZaNempmamBiTkY+P0A9SkVAQ0A7QEE8Ozs5Ojc2NTg0Njc4OT04ODs6Oz87Ojs8Ojk6Nzc2ODs8Oz08Ojo8PTw3Oz5DQkRDPz1BQ0FEQT88OkBCO1eZmJqamZmam5ucnp2foqKhoqSlpKSlpqSioJ6op6alpqWlpaemp6ampqakpaanqKehqXJOUU1KVJahenKanJyenJeVlJWWmJiXl5qeoqKhoqOkpKOjpqalpKanpqWlpqalpaOgoKGhoJmSkI+Wm5menJaXl5eZm5ycnJqamZeZm5uen52cnZyZmZqcnZydnp6fn5+hoaCgoaKgn56bl5WVlZeanZ2fn6GhoqKio6OhoaCgoJ2cnaGioqOkpKOioaSlpKOko6SjoqKioqKhoKCfn52cnZ2cnJ2dnJ2enpqXlpaVlJOTkpKSkpCRkpKSkpGSlJWWl5iYmJiam5ycnJycnJ2cm5mYmZiWlJWXi3hsY2RiZFFHQT1DO0tIRDo7Ozw+OTo6OTo3Mzc5NTo4ODg8OTg7OT09Ozo7Ojk8PDc2NDc/PDo9Ozw/Pjw7ODxBQ0FDQkI+P0NAQkFAOj9APztZmZiampqam5ubm5ydoKGhoaGhoqKioqKhn5+dpKWmpqenpaWmp6ampqWkpKalpKSkpaaGUFJQT0+PmHB6mpubnJ6cnJycm5ubmZiYm56dnp6foKOkoqGhoqOio6SkpqalpKSjoqGhnpyblZOVmZyam56amJiYmJqcnpyam5iWmZybnJycnJydmpqbnJ2dnp6dnp6fn52cnJyhoaCblpWVlZacn6Ggn5+hoKKjoqOhnZuZlpaWlpicnqCip6ikoaCgoqOjoqKioKCgoJ+fnp+gnp2cm5ucnZydnJmanJuWk5KSkpKUk5KSkpKSkpOSkpKRkpSVlpeYmJiYmZqcm5qbm5ucnJqZmJiXlZWWl4d3ZGdoZGJNQ0U8RDlJSkU5Ojs9PTo6Nzg6NjQ3OTU8OTY4OTc5PDs7PDo6PDs6PDw4Nzg3Pj07Pj46Qj86Ojo/QURCQ0FBQD9EQUFAPjpAPj06W5qYmZqbmpubm5uen6CgoaKioKCgn5+enp2dnKWkpaanpqWlpqakoqKio6Oko6Kjo6KnllRYVVJOZ21rgZ6am5udn6Cgn56enp6dnJ2dnJ6enp+goaCfn5+goKGioqOkpKSkoqGhnpuamZamuZ+ZmZienpiYmZmam5qWlZeWlZicnJ2cm52dnpybnJ2cnZ6bmJqeoaGdm5udoKKhmpWVlpaZoKKfnZueoaKjop+em5eXlJKSlJeYmZ2goqenpaGgn56goaGioaCfnp2cnJubnJubmpqZmpydnJmXmZaVk5GQkJCPkZKSkpKSkZKTk5OTk5OTlJWWlpeXl5manJubnJucnJqamZeXlpaVlZSEcmZsYmRbREJMPT84RktCPEA+Pj05Ozk6PTg1ODg2Ozg1Njo4PDw7Ozw8Ozk8Oj09OTU4Nzw5PD88OkE/Ojo6QEBDQkRBQ0A/Q0FAPj08QD09Ol+al5mamJeYmpycn5+foaGhoJ+fn56foKCenZ2lpKSko6OioqOjoZ+foaGipKOio6SiradXXl1UV19ua42dmpqbnJ2dm5ucnZ+enZycnJydnZ+goKChoaGgoKGgo6ahoqGioaCenJubm5mjppGcm5yZnJ6ZlpaWl5eTjo6QlJabnJuam5udn52cnJycnJ6dlpSZnJ+in5ycnZ+hoJuXl5mZmpycnJubnZ6fnZqXlpaWlJOTlJiampqfoKGmpqWgn56fnqChoaCenJubnJybm5ybm5qZmJmZmZmXl5iVlJKQkJCQj5CSkpKSkZGTk5aYl5STkpSVlJWWlZaZmZmam52cnJyampmXlpaWlpaQgG9vZV5gV0BKSDg/N0lFP0VBPD07Ojo8Ozs3NTs4Njs3NDY6Oj47Oj0+Pj07Ozs+Ozo4Ojk5NkBBPTo8PTo6OT9BQ0JERUM+P0FBPz8+Pj89PDtgl5WXl5aVl5mbnqGhoKGioqCenp6enqCgn52bpaWkpKSioKCfoJ+dnZ+hoqOjo6OkobCjXWVkYGFua4GenJubm5ubmZianJ2enJubm5ycnJ6ipKGeoKGioqKhoKaxrqCgn5+enJmZmpqdrWF5nZ2em5manJiXlZWWkY6Nj5KYnZycm5ycnqCdnJucnJyempWVm56foZ+dnJyenp2cmpqampqampqbm5qXl5aTkpWVlpWTlZaam5qanZ6foqWjnp6fn5+en5+enZ6fnZycm5qcm5qbmpiZmJiYmJiYlZSTkZCRkJCQkZKTk5CRk5SYmZiVk5SVlZWWlZaXmZmXmZqenpyamJiXl5aWl5eYjX1ubV9lVlRFSzw3PjdSRUM+QkE4Ozw7OTg6ODY7Nzc6Njc5Oj0+Ojw8PT49PD06Pz06ODw9OTtAPj4/PT45OTs/QkNAQ0VDPT9DQj5AQD5APTw8YZWSlJWWlpeanJ6goKCgoaCgnp6enp6gn56em6WlpKSioJ+fnp2dm5mbnJydnp+gn56rmGNpbW5pZm2enZybm5ybmpmZmZqam5ucm5uam5ygo6SgnZ+en6CgoJ+mkpWtn6CgnpuamZqZq3tDgZ+enpyZmJqamJiYmJKOj5OXnJ2bnJ2cnJycnZycnp6dnpqVl5ygoaGfnp2eoJ+cnJuampqbmpqYmpmVk5OTkpOWl5eVlJiYmZucnJydoJ+gnp6enp+fn56en6KjpKKgnp6cm5qam5uamJmZmJeXlpWUlJORkZCQkZKTk5OSkpOUmJmYlpWUlZaWlpaWl5iYmJiXmZqamZeXl5aXlpeWl4l4dmddX1dURUU5OTs8WT5AOEI/OTw8Pjk4Ozg6Ozc5OjU4OTs9PDk9Oz0+PD0+Oz8/Ozk+PDw+Pz5AQUE9ODc7QkNFP0FFQz1AREJBQEQ7Oz47PGKWk5SUlpWUlpiYmZubnJycnZ2cnJ2en56dnJqkpKSkoJ+enpybm5qZmJiYmZucnZ6cpolla3R4bVuFop2dnJydnJqbmpqampydnZ2bmpuboKKinpucnZycnJ2en6FhlqienpyampubpJ9NSYSgnZ6cm5qanZqam5yVkZOXm52dnJ2fnZycnJycnZ6fnp+cl5idn6GhoJ6cn6CfnJubm5qbmpmZmZmZl5WWlZaYl5eXlpaYmZuenp2dn6GhoJ+fnp6fn5+dn5+hoqKhoZ+fn5yZm5qcnZuampmXlpaYl5eXlpWTkpGTlJSTlJSUlJaZmJaVlZeZmJeYl5eXl5eYl5iXl5eXlpaYl5eVl5eDeHZfW11eUT1GOjk4P1VDQTtDQzo8Pz86Ojk3Ozg4ODc0ODk8Ozw4Ozs8PTo8Pjk/QT06PTw+PkA/PUBBPjk2PERDRUBBRUU9PkVERD9COzo8OTpkl5SVlZaUlJSUlJWXmJiamZqcnJydnp6dnZybo6Oko6CenJuamZqZmJiYmZiam5ubm6WJa3F2em9lmp+enp2dnJybnZ6dnJ2enp2dnJydm5ygoJuampubm5udm5mnbFqgoJuampudnK9uS0yGoZydnpybmp+fm5ydm5mZmZudnZ2dn52dn5+dnJydn5+fn5uanZ+goJ+dnJ6gnpubm5ubm5yampuamZudnJqZmJeYmJiYmp2foKCgoJ+hoaGgoJ+en5+fnp6foaKhoJ+enp+enJqam5ubmpqZlpaXmZmYmJiWlJOUlJWVk5OVlZSVlpWVlZSYmZuamZaWl5WWmJiWl5OUlJGRk4yRkJOWfXhqYWJiXFE8QDw2OENWSERCOjg7Oj47Nzc5Nj06OTk2NDc6Ozw9OTo6Oz87PT08QD47Oz46PT89PkBBP0A8NztBQ0U/P0REPj9EREM+Qj07PDs6Z5aTk5OTk5OTlJSVlpeWl5aWl5mbm5ybm5uamaOjoqCfnpuamJeYl5eXmJmYmZybm5qkgGpqb3lzcZegnp2dnJydnp6enp+enp2cnJydnp2bnJuampqam5ubmZmYpYRUdKKamZqdm6GhYFhOh6GcnJ2cm5qdn5ucnJubnJubnZ2dnJydnp2enZydnZ2cnJ2dm5uenp6dnZybnpubnJycnJydnJubmpmbmpmYmZmYmpmZmpyfn5+jpaKfoaKioaGfnqCgn5+fnqCioaChn5+fn52ZmpucnZqZmJWWl5aVlZaTkpOUk5STkJCSk5GUkY+OkJGOlZabmJWYlJmXlJiRjJCPk5yTkoyFjIeDhndxZ2pkXFxRQT44NkJHYEJFR0A+Ozw7Ojg4NjU8ODo4MzQ6Njk9PTk5Ojs9Ozw6PD48Oj5AOj5APjw/QD8+PDg6Q0FEPz5CRD8+Q0VCPUJAPDw8OmeYk5KSk5OSk5SVlJWXl5aWlZaXmZmZmpqampqkoqCfn52bmpmYmJiXl5iZmJmcnZ2cqH1nZXN7enOJop+enp2dnp6enZ2enZ6enp2dnZ6cm5ybmpubm5ycm5iYmaCLXWCRmpmbnZyjjmVaTICinp6dnZybm52bnJybnJ2dnZ2dnJ2dnp+fn52cnZ2dm5qbnJmZnJ2dnZ2dm5uanJ2dnJycnp2dnZybmZeVlZeXmJqam5ubnZ6foqOhoKGhnJucm5ubnZqcmZycn6CfnZiZmZmUkpKUl5SPj4+OkYyNiYuQi4mLjpGRj4mQmJiQkoyNi5KQj5iYoqiqpqWlrKOmoZqep6eyqKKVo6Cfl39wcWlsXFtbTEY8NzdHR1g+SE5URjk+Ojg5ODc1PTk4NzMzOTY6Pjw6Nzo8Ozo6Ojo8PDs/PjtAQD47PT5BPDw2N0A+QkA+QUY+PEFEQT1DQj49PDlmmJSTk5OTkpOUlZOVl5iYmJaXl5iZmZqampqaoqGfnp2cm5mYmJiYmJiYmZmZm5ybnKx/am16f3lxh6Genp2cnZ6enp6enp6dnp2dnZ6enJubnJubm5ubm5uZmJmemV5fc5WanJ2doYBlWk1/op6fnp2dnp6dnJydnJ2dnZ6fnZ2fn56goJ+enZ2dnZybnJ2em5qbm52enZ6dm5ubnJ2cnp2cnZqYl5SRjo+QkJGVmJSWlJiZmpudmJuYlY2Mjo6TkpKRj4mQjpGRjo+Ki42NjYiIi4+Lg42NkY+MkI2Qk5WVnJihoJySn6SipKmam5eanKOprb3Bwbq8uL26ucC8ubq3uru7tL2zwbV/bnVmZ1peWUxJRTo7TElTPFZSSUM6QTo7Ozc3NTo6OjgyNTY4Oz08OTk7Ozw5Nzo4Ojw6PT85PD8+PDw9QTs5NTg8O0A/QT9EPTxBQkA8REM9PT06YZOTkZCUlJOTk5OTlJeYlpeZmJmYmZqbmpqamp+gnp+fnJqZmpqampmYl5iZmZmZmZmphXB1e4B3b4mhnp6enp6fn56en56fn56dnp6fnp2dnJ2cm5ubm5ucmpiZmJthYmB8lJ6cnpZzY1VPgaGen5+enZ6hoJ6dnp2enZ6fn56en6CenZ6enJydnZ2cm5qYnJuVmJqamJiYmJmSjJCXlKCXk4+MjYqKiImMiJORh5CPjYqKkJCLjoqMi4+IiImJjpGOjYaFiYaKhoWLiI+SkJCNkJKXlpKamJ2TlJ6kpqaqq7Gsr6+rpquqsbm5tbS0rqyvtMDIxcXBvsbDxMTDurW+t7a0s7C2tb6qcHRyXGZfXl1JRj8/RUtMVklcTEQ/PUI6Qzk5Nzc7OTk3MTc5ODo+ODg6PDw7OTc5OTs9Oj4/OT5BPDs+PD46OTY5PDpBPkNBQT08QkBAPkJEPj8+OVyHhIOHi42KiYaFgYqMkZOVmJiHlZaWkpiampmenZ+gn52ampubm5ycm5iWmJiXl5ibqo56dXZ7f3mCoJ+fnp+goKCfn5+foKCfnp2dnp+enp2dnJqbm5ybm5uYmZigalxaYXubnJ6JaV5QVIiem56dnZycoaGfnZ6dnZ2dnp2dnJiWlpaYlZWSlpmWk5GKjI+PjI+NkIuLj4+WiYiEi5GZjn2Fi42PjYyHioyQm4yRj4+Lio6TjIyNjIiSi4yFiYyPhouIh42KhYyEj4qXkJOYmpWbnKOqoaKknKKrsbe0ubWxtK2vsrKlp7O6sbq6vLa3tsDDw729vLa/urq8wbW4wL60r66mqa+3mm58Z1tjWl1fSEU+QUtJU1hZXkFGOTk9OkY/Pzo3Ozs7NjM6Nzo5Pjg6Ojw9OTk4Ozk7PDo+PTtAQDs8QjxAOjg0Nzw7QkBBQj4+O0NEREBDQz0+PjlhmZWLkYWNj5aSiHl9e3+Fi4OKgoqJhmuAeJCLlpqRnZ2UlJGTlpeampiWk42Sk5KQm5uIdndzcX1/cpGgnZubm5yenZ2eoKGgm5uWlpucmpubnJuYmZqYmJmbmpqWknhza1h8lZieiltUUFmLko6SkY+Uk5KXm5mYm5ePjpCLjo2Ch4uLi4qLiI2RjIeHhoqIiZGKh4yEhYqNi4qNhI+UkIyDkJOUmZWQi5OTkZWRlpWOj5GMlI2Oj4qIj4ePhoeJiYmNiomJioWNh46JmJKUmpuXmKChp6Cko5qqqbO2sbWwqKqiqK6tn6qvsK21ubi8wr/BxLixtbCutrOwuL68ury+urOzp7G3wpB1gGNiXlpXUk1IRkVQSVlXX1tDUDpCQz1HRj84Nzo6NzU1OTc8OTw5ODo9Pjo6Nzs7Pjs7PTs9P0E7Pz48Pzo4NDM3OkFBQEI+PjpDREM/QUM7PT45Z6mloqKZn6CippeUiI2CiIJ1h4iKiIp7e3Z7enmPeoiSfn18en6CkYWBgH1zfH99fISHfnRweHZzfHaBj4iIiYeIioyMkZicl4iOhIuNi4iNkZCPi5GPi4yPkJGRjpWfn5KApKeZppp5VU9kh4eCjYuGiYp/iYqGiJiRiIOIg4KFfIuLjIaJi4iKkIyIi42PjI+Wh4mLio6NjY2Wk5OdnJyalpycm56bmpuYnpeTkZWWkJKRi4+LlpSMjYqDi4SEiYyQkIqOio2LipGJjZOTk5SVk5KcmZ6Xn6CfpaKvsamupKSfmKStpqa4t6ysu729wsPAv7+vpa2wsLS3uLO0uLa0ta6stK+4tLaBeXpjZmBeVlFRQUVMT0lcXl9UR0dCS0xCREA9ODg7OTU3Nzk3Ozc9PDk9Pj05Ozg6O0A8Oj06PkJBOD88Oj84NjQyOTtCQD9CPj04QEI/PkBEO0A+N2CloJqXnaGaoaCPl5efl5WCjaCfo6GdmpKOjIxycXBvdnFucG1ucHZub29waHBxcHR+c3FycXd7cnl2d3Jyd3Z6e3l8fXt/iIGEi3+PkYaNi4yGiouLiYeEgYaDgIWkmYt6Yo6jkphzhYVodX+AgpKQhoSEhY2DhIyPj4+IjY+Hi4iRkJWRjpCKk5eOj5WYp6SfnZWYlpaln5udq6aqt7W4srGnr6qnpqGfmp2WkpWVkYqPjImTjZuVjYuLhoaJjJWQkJCLmZKVlZSbkJiTlIyNkYyWl5WilZ6mqauno6OqsJucpp+mq6G0vb6zs7+5u7u6uby9rqiusa6wuLyztLGxqrCpqLGxsqild3J0X2hhYFRWUUlKSFZNXl5eVExKRVFKRUdDPTo5OTc0ODY5Mzg4PTo9PD47OTs4Ojs/PDw+OT9DPzg7Ojg8Nzc2Mzc5RT4/Qz89N0BAQT0/RDw+PThUj4yGh4eUjJWZl5yWmZaNlZyWlZydoKCdmpiWeHFubXJ4cXFsbnJwa3FvcG1yc3t1dnd5fnVxeHZ0d3tybn98gX15eH1/eYOGg4WCg5CLkIuLi46Pi4mJhYKCfn6Eood2alBxm42KV255e39+fIWOjYuGjZSRi5CXj5SXkpihlp6WlZunpp+goKawq6GjpbW0sqqmqq+isba5vcK7ucO+vLi9uLWxrLCsppuSk5mfm5SPk5WOmp2doJqfn5edo6qsoZ+em62hp6qwqaampJiRkZWUo6SirKSss7Szs6i3tru4sLKvra2yt7a6srW6s7e5u7i8urayr6yxsbKztLOxsa2us7Gzs6yhl3Zxc19jXlJRVE1PSUdYT1pcZFROR1VPRURKRD44Ojg3NTg4ODU5Nzo6PTw/Ojg8ODk5PTs9PTpCPj84Ozo5Ojk4NjI1N0I+P0RAQDY+P0I/PEM8PT46Tn98go6MjJOTl5eaj5SWjZaRkZSXk5qanqGdnHJvcnFxcXFxcG5zcW91dHJxdneAdXd8eYV+d3t8eX1/fICJiYmDfXp/h4GIiYGAgIGGiIKGi4eIhYSIiIqFgIJ9mZhyTkdJc5KDgEpcbm92iYWKjouNkJmclJSUoJqan6Ktsa6ppKWtr6ysrLWuvrmtrqm1sLexq7G2rK+9wsLAvrq8trKutraxtK66u7OurKepp6unoqmtoKmooq+wuLSxvLq6urK0ta+8tLezt7e7t7mtrbCprLW5sbeytLe2sLu7vLu6ury1vLi0wbWsqqqrtLG3uLm1trSzsKymrrCqq7Cxq6yusLKxtK6qo5N4dnJlZ1tMUlBFTUlTV1JlXmdUUExcUUhMUkNBOTk3OTU4ODY2Ozc5Ojs6Pjk4Ozo6Ojw8Pj08RD45Njs7ODg+OTUxNTZCRkREP0A3Pj5DPjpBP0BAO0t/gomXmJSdlpabmIuSlo6XkZGVl5SZl5+bmZx8dHV2dXl1c3RudnJzdHV2d319gH56gXyDfoJ/fYB/hIKFj52RiYF/go+Xjo6HgoCBiIuFfoqRi3+IjYyLi4eRj6OITDMyO3mEdXI/PVZqbYGQiYmQj42PlJSYkJWcmp2eqK6ysLC1tLOtsrW4sLy1tbGqsKqztbS7t7SztrS1r7i4t62noqassLCvtre3vrW5vLOysa61u7C0r6+yu7axuMC9tLS0s7izvLq2tLrAvbm6ubq+ubm5vrWysa+yr6q1tLGzsbSzrri4tb+vpKaoo6ussa+zrq6wsKytq6qroqKmqKKnrauqpaynoqeYeHlxZmVZT09NSVJNV01PX15cTlVVYlFEVE07Pzk8ODk1ODc1Nzk1Ojo6OTs4Ojw8Oj08Pj4/P0I9ODY6Ojk6QDs1MjY2QUZDQz4/Nz49Q0I5P0I/PjtLjpGTmJmVmZGTopiTkpKLk4uOkI+Vl5ablZSbhoJ9enh2dHRzdH53end2gIKDhouMhISFioaQiYeRk5aRjZaalY+IjI+emJaVkpCTl5qamZCeoZ2Tl5uhmp2boqebX0VkTj15d2dkSDU2VG5xj4+LmJqPj4yUmpecnZugnaSstLm6vK+2tLi0tLK3uLmzq6+qqKy1srK1rrGrrqa3s7OxpaGotbCvrayrtbqyu7q6tLK3ur67ubG4sLmtqLK4u66ttLS3tbu2trm5vLe0r7G0t7a5s7e1pq2pq6ior6yprq2up6KxtLG0q6aop6Cjq66oqq6orLKwr6+pqKGeoaGjpqOgopqlo56ol3J3bmdiVUpUT09KRFBLX2JYWlFcVGBNSFJJQUA5Ojg2Njc3NTg5NDs5Ozk8Nzs+Ojg8PD0/QkBBPTs2OTk5Oj87NjM3OD5GQkJAQjk+PUBDPkBGQj44R5OWkZWTkpSQkZ+ZnZmVkI+Sko6Mk5aWko6RlZGSkIaBeXJzdXuBhI6HhZGTkpicnJiVkJWYo5yaoaeqqZ+clpeVnaKioZyZnpmlqKyvramnqqqpp6KlqKmrqamujEuCtoZAe3toY1JfcVFbb4qhoaSem5qkp6Spq66spaSoq6+xtK6qrK6zr6ystLO0ua6urayqrLKwsK2wqKqmsrS0uK6qtrqwr6qurLC3s7i0t7W0u7y4tbWxtauyrKiys7uvrbGytLa1sbG0s7OvrKuvs7a0sayutKqqpqWnrauoqKupqqifqbOwqqeppaOio7CtqaatpairrayppaSioKWipaOYmZyVnqKippdudWVnZFdPWUtLSktTVHBiWWRXX1tcUlpQTEM8ODk6Njk4NzQ3NzQ4Ojw6PDg6PTk3PDw7PkM/QT47OTo5Ojs+PTg0NThBREVEQkM5PjtAPkI/R0Q+N0KSm5SVlZaVj46Wl5qZlZGKk5SSjo+SkYqKiY2Ul5qTjYmCho6VkZSfmpuin5+jnqGhn5ijpKelpaapqa2rqaKmpKilpKGfnqOjra2srairrq6rq6ykoaKmqaeoonRoxdKoSYCVjH1PbIp7WmCAo6inoKKhrqyrqqetrqilpKmpqqmmo6iqqaekp66wr7Ovq7Crqq+yr7Czua+rqLCxrrCyubO0r62vtbCss7GurLW1tLSzs7CvrKyqrKusr7G0s7CwrrCwsKyqrauqq6alrrCysKumqbCvqaOkqaunqKaopquwq6mvqaaoqaalo6iwraqpqKKpo6WnpKGhoKKloZ2el5aYlJugpKmUbnNeamlfVlpOUk5RT1NlXGVjW11ZXFBZT0tAPDs5Ojc6ODczNTMzODo9OTo4OTo5Oj08PEBEPkA9OTo8PDw+Oz45NTo8QkFFQUNBOT47P0BEQENCQDdAkZ6YlJeZlpGHi5SSl5GIg4mLk4+OkI2Hh4SFlZmWmJeZlpqeop2ZnKKkoaCdn5qfoKGgpqGgoKCjo6KlqKmrramqpqOmpaCloKaop6aoqaepqaSnp5mdpKWjop5igri/qoWvo5qdd0dXgXJSc5SioqChn6GhqKCcn6GloaCmo6KfpKGspp6foaGkrKqnrKivq6e0sa6ur7WyrKqwq6mtrbWwrq6srreup6yqpKivsq+sq7Kvqqqpq6utqa6urrGxraqtqaunp6uoqauinaapqKilqKisqKilpKWop6iopqmsr6+oq6mhoqKlo6Opq6ymqKWjqKKhoKSdnZ+hoZ2bnZ+amZWcnKOqlG9zZm5yZF1dUFVPWE9eZWRsaGJiWlpSVE9NQTo9Ojo4Ozk1MTYzMjg4Ozk5OTk7OTk8Oz0/Qz5APTk7Ojs8QD0+PDk5PEFBRUFGQTo9Oz9BQUJBRUI4PYqWlJOYmpaPiISNjpGSjIiIiI+JiZCRjoqKiJubmZygpaKlnqKjoZqeoZyanZ6bnKOop6ugoKOYoJ2XnKGjo6WjoqKkrKilqaCepqmnq6mkoKKhoqehpq6mppyeb4KUs4i21qacuLFiULSjVmSQoZ6goJ6doKOZlpqYo6KipJ+ZnKGhoqCbmp6goaSgnaejqrGorqusqaSqqquorKalrKqws6+rq6mwq6appaWoq6ynpqevq6Wnq6upq6irqqqrrailqKOmpaesqayoopykoaOmo6qpqKano6SnqKanqKepqKupoaKoo5yepqWjqKino6WlpqmgpJ6inpeYnZ+doqKlnpiUlZ6go5d1d2t2eGJfXFVZUVVXW2Nfc19oX2NTUVlUSD48PTg7OTo4NTM3MzM0Nzo4OT05Ozo5PDxBQEM9PT44Ozw9PEA/Qj86ODo+P0NAREE6Oz49QD9DQ0VDOTyCmJmenZ2alZKKiZGRl5GQh4SJgoGNj4+Sj42cnZ+hpKmlqaeorK2moqKfmKSmo6Stsa6yp6asm56em5qjp6Cfo5+foq+rq6yoqKuvqaiqqKKgoaiqrbGyr6ujo4l3f3V407upk56obFWhqmhfh6egpaKhnZ+imJWem5+fpKGblZigoZ2enJudnZuZmZWen6Oonp2iqKGaoaOmoqSoqaqoq7CxqKWlp6eopKWpqaqnoqWmqKadnqWloqClpaOlpqCjpaOjpaelqamqpKekpqKmp6SrqaenpKGlqKynpqWlo6OopJWdo5+bnaCjqaeopqGjo6mooKiioJyVkZqfn6GmopuXkpCamqCVfHdvfXlmW1tgX1pcVVxoZG9jbWlpYl5QUEA/Ozo4OTg8OzYzNDMzMzc5OTs8OTs7OT49QkBAPTs9ODw9QD08PENBPjo4PT9EP0M+Ojk/PEI/P0FEQjk6gJ6kp6Gem5+gmY+ZnaCWloqGj4iEi4qTl5SRo6Wnqq6trLOys7S4t62pqqevtLKxqq6usbKusa2lq7OssbGpq6+rq6y2sLSwq7GysaOgo6qqp6+3t7W0trKssK2QiH9smMfEl5yqknZaaXN1dX+SpamnpKCfo5udoZqWnqScm5aZoqefoJ+joJuUlpmWl5qfoJmVnqGZmJ2dpZ2gpKeqqaiqraylqaSlqqeqqaqsp6SkpKOimZmhnpqaoaCfpaWYnqSmpKqooqelpaGqp6mnp6ejqKWmpaGkqKesoqekoaalpaOVl52Ym5mVo6elpaSfnZ2lo6Kqo5+amZiXnJyaoaGakJOTl5ibjX93cnZ4amJbX19cYllgZG5ta25hX2RgUE9BQDs7OTs4Ojk2MTQzNjQ3Nzc6PTo8Ozk9PUI/Pj89PDo/OTo7PD5CRUA9OTtAQT5DPDs5PzlAQEBAQkM7OXuao6OcoJ2dop2Zn6KioJibmJaYkpSQm5qWl7S0rrW4s7S4tre0uLm3tbm4ub28uKqLnLK4vLS9urW7uru4s7q/uLe5u7G3r6iusq2inaCqsre7vLy6usK5tLOdhHReUZ2wr6SikYR3bnNxd3h5fIKJjpSZoKWnrKalmKGko52goaKooaOgpaGck5mYmJmco56cmpudl5uZlqWam5+hqKmpqKuvr66pqKirrKytq6irp6WjoJyfo6Ojn6Cipammmpyip6Spn6GjoqKgpaanpqSooJ+ipKGjoqiop6OloaGopqalo5mbmJuTj6GknqKfmJiVoJuhpaCfm5udnJuamZugmo2YmZiTkYaAdnh4eGNbUllUX19hbWh2a3BoaWliWlNMQDw6Ozg5Nzk3NTU2Mjg1Njc3Ojw7Ozs7QD4/QD0+Pjk6PDk2Nz47QkZCPDg7P0NDRDw+OT43PkFCP0ZDOzhwkpqblJ6bm52Vl52doqajopaXnpaXl6GblJi+t7G4uba3t7i7l5S2vbu9vcDFtaK7mKC3v7+6wcm0nbu2sra/xcGooLa0urGqrrSxsLK0tbjDydDU0czHvK+hjG1jUkODjX5+gHl1b21kZGlnanFycXFxcnmJqcfHvKKnqqynq6mlpqCnoKGmoZOWmJ2foqSjnZ6coaChnZekmpmdoKaqqqqtrq2tsLGrrK2sqamrrqimpaalpqSkpqaeo6eppKGcoKKjpqCio5+jpJ2foqWgpJyboZ6fo6GhpaSlqaOkpaKkp6ehn52elpOcoJiZko+MjJeWn5uWnJqdnJqSlpSUmJOQmp2YiouHgIB8gnhhXllTYWlgZnRvdGl0ZGlkYltMSz46OTg5ODg5NzM0NTI1NDY2OTw8Oz08P0E/QEA9Pj44OTs4Njc/OUJFQzw7PD5DREM9QDs9Nz1DQ0BFQjw3Z4yRk4qalZiblZWYm6Knq6aVl5iQlZmhnpeXvrWztLu6ubi5woeYt6u4u8DCxbOjw6e4s72/tMTHvbS7uL62wMTErqCworW2tb2+wcTHw8TH2+Tj18e5raKUhG9XWFBEYXJna3JraGNlWFdcV1tgaGlnZGBskrrAv7mpr7Gwr6yqoqajrJ+fpquXmqifpaWfoJydoKuwsKyiq5yYm6Cor7Kys6uorre1sq2tqaalqKulpaStqaShn6Cnnp6mqKmmnp+anqGlpqmcnaObl6KmmpuanZ+cmqGcmZ2eoKijn6GfnaWioKOioZSZmpmTj4qLhI2Qk5uPjpiVm5eYkJORkomNl5iYk4uKi32AgIVwYGJfXmtjYm54dXdubVtiUlZcTUc7PDk3OTc5Ojc0NDQxNDM3Njg8Ozs8PEBAPUA/Pj8+Ojo5Ojc6Pz5FRUU8PT1AQkJCQUE7PDhAQ0NARD87NV+MjIaFlouUlZeYl5ifpqellpWVkZebn5ual7mxtrO5vLy5urWqsryxvsG0vMe5uLuuv6fGw7/KxsnIxcXJvMLHx7+xsKe8vL7FxMbJx8XGvsvP1Mu5pZiPgm5aUFRKQ1xmXWFoZGFhaVxUWFVXWFlbWF99obi5q7SyrbOtqa6vp6awr7Ktqq+zpKu1qaeopKCgnqmyuL61tbWqqaausre4t7apq7i8ubexr66noqOop6SfqKOfnqCZoZydoqSnp6GelJuaoKGlnqChnpajnZSQlpiboZqflpORlpSin5qenJudoZ6kn56VnJiPkpOPjImTkJefiZCWkZuUmJGRlZaDjJWXlpKLjIh8f4R/amZoYWtsZ251cnJ1cmdeYFxSSUU/Ojo6Nzg0ODw3NjU0MjMzNjU3PDo7PDs9QD4/QD48PTk5OTs6PDw+QkRFPj49QENDQkREOzo4QUJCQUNAOTJbk4iEjZGKi5GRlZCSmp2fnJOSmJSdnZqXmpW2sbm1tb6+tri1uLO8vMTEusPHwb+0s8XFxr/CzcfLzsvLx8HDxsfIysXExcO7vLzBxcHFxL7DwcfLybqXdF9STk9SRz1ebGBfZWNhXmRjVFVXVlRVXX+nrq+qqKutrKmlpZ6pr6uyu7q4u7e5t7O5uLOurLO0qrC1ub3Bur6+vL60urm4u7qysbS8u7q7s7Oyp6Smq6uioaCdmpudmpyXmpuenJygnZaclpuZnZ6io52UnJCNiY6OkZ6bnJWNh5KLmJiWmpybmJybnp6cmp6UjpiYmpSRmZeeoZWYmpKXlJWRlJqYk4+TnZaSi5F+enx/dWtsbmRvbWlxeG95amlhXWdhUUZEQTw5OTc2NDQ6ODQ2NTMzMjY1Nj05OTs7PT47Pj49Oz05OTs7Oz89QUNBQkFAPEBDQ0NFQjs4OUQ/P0BCPzsyV5uQkZCQh4WSjo2IjZCTlZGPjZSUm5STlpqRs7e4uLi+u7C1sri2tbbAw8G+w8LAvru+u7u8xMzEzNDLxsa/xcfLyNTLysjGv7u7vsS+xcjGxsTEw7m3xKNqTENFSkQ9WWFhZGxkYVxlX1lTUFBVYYu3uayupaSjp6SgoKWZqbSxvsG+urm6uLW0srG0tLO6wL7Av769u7u9vsDCt7a3tru7sru+ubi3u7a3tKyoqamrpqijnpOampyYkZKZl5GRmJqXnpiWk5acm5+dlJOJiX6GiIyWlJiZkYmVkZeWlZmbmpaYl5idnpyhmJWZmZyYl5ybn56jnJ6WmJeTl5yZmZyUlp2UlpOJdnl6e3dua2lodlpncnhzemdnXmRbUlhJRj87Nzg4NzYxNjk3NDQzMzM2NDY7ODo8Oz08OD0+PDo7PDs9Ozs+PkRBQURCQEBBQkNDREM9OTlCQD8/QD89MkyWmpaSk4yKmJCKi4yOkpKKiIaNkJiKj5CUl7O7tba/vb2xtrjBvby0uL/Bsbi3vsHFvbu8wsbJv8jOyMHEwcfKysbKxczIzcbIxb/DwMvNz8rGxMTEwsTBs5BWSE1GO0lYX2htaF9cX1laVFBdjaqsuLWyrKmjoa2prKetn6y0tL/Cvrm4vbawrausr7W0ur7Fv7u8urO5u7i5ubWtsLS9u7G/vLiytrmzubu0ra2orKyqqaeXnpualY2MmJSTi5WWlJyZl5WWmZKYn5mQiop+iYqKkY6Vl5OUn5mWkJSZmJmWmJOUm6GeoZiYmp2ZmZaenpibopqdnJuYmpuZlpeXlpyZlJyYfoB4eXZ1ZWZqamhea29ueXhjYmFgXlhXRkU4Ojg6OTc5NDQ5NzY2NTEyMzM0Ozo9Pzs9PTo6PTs8Pjo7Pz48QkBDQkJFQj0/Q0NDQ0RFQDk6QkFBQj5CQTVCkJeUlZmSj5qQjpKRjZSVi4qHjI2UiImPkpq2u7S8xsHEwr3BxcLAtLO9v6ywr7rDysPCvs3IxbfByMW/wcLIy8rCwsTJzM3Oz8zDx8bIycjIycfFycfIx8LIo3dgSD8/QV5dXGtkW1hWUl2IqLq+ury6vKytpqm7urm3v7O1uLLBxrq3t8Gzsa2tqau1s7u2w7a2vbWxt762s7e4sLW2v7uwvbq0q7CxsbO8urOzrqutq62xnaOjoJqQjpiXlZCclpaYlpWSnJmTm5+clpGUjpWQiYyQlZOUm56YmZKSnJedlJmSk5aZmJ2VnJ6do5yVnZ+TnKKcnKCfnaOemJSVl5ebmpmgkH99cXRxb2NhaHZoamp0bnlsXmRbVWBZTEhDNjw5OTg4OjUzOjY2NDQxMzUyNTs6PD47Ozw9PDs8PTw7PD49P0E/RUFCQ0M+QEFARUVERUE7Nz5DQkI+Q0I4O4+akZaalJKUjZCUlI6VlI6Pi4yJk4uIkJObt8C6xsXEw8zCwcS9vrWvt7uvr7O6wMfFxMHMy8W2ucDCwsTHytHLwsPExsnFzNDNx8zJwsLHwsvLyMfMyc3GxsfCtYFdVC9VWV1sX1FNV4S5ysfCxMbAvL60sLCwwr6+wcbAvre2w8K6urbAvrWyrKmvsri+tMC0tLi0t7nEua+8vrm+v8K/tbq2q6qsrq+wt768trSura2utaSlqKimmpycnZyeopydmZOQkp2VmKCdmJiVmZmZl46LlH2QkJefmZmYk5GToI6Nko+VjpCUlaKdnKSem56elpyjoKGipKOkop6amZubnJ2enIN9cn14cGdga2p3bWlmdm90Y11jVVdVU01HOjc7OTk3Nzo3NDg3ODQ1MjM0MjU7Ojk+Oj08Pz04Oz05OTk9PEBBQEVCQUJBQT9AP0RFREVAPDk+QkNCQENBOjSAoZeUmZiVkImUk5aTiZGMlJGOiJaKi5CXnMXLw8O8wMPHwbm9vbu4tre3rrK3uLzAwsDCx8bHurzAwsTHyMbSycHDw7+/vsTLyMrLyby8yMfJzcjDyMnJxcXBwsLFxpxOUoCJlVVUg7XO0sW2v7/Av7q7vbWzs8C/ub/DucC3u8G8uri7ub27srCvsKy5wri9ube1t7q9xb24xsjCwcLGwr28tamurrCwr7O6t7m2sK+tr7OppquprqannqSlo6OjoqCblZiekZecl5GRlZeZlZmRlJiSlYyYo5qcnp2FiZ+TfJKWlZKUlJennaCipJ+en56foaGkoqKjoaOinJ2fnqOhppl5enmAc3BmZWdkbGVia25vb19ZXVdWTlBKRjk5Ozk3Njc3NjM3ODk1NjEzNTI3PDs8QDs/PDw6ODo8OTk4Pj1APz9GP0JBQz89QT5ARENDQTw5PENBQ0RBQDozbKKdlZedlo+PmJiZmIiSjZGVkI+Vjo6TlpbKy7u5urnBu7q3vsG8vLu5sa61uri4u8S6vsC+vru8wMXBxsK+xsK5u8O6uLm8vsHHwca7ucjIw8XEwMPBwcDEwcK+vMWnfHSAkZR1vM7Hx9DAr729uLm7u763tLC5vrO8vrG5tbi7tryztbm2uba5t7GtusG6vMG/t77Ev8bDw8fHwrvAwr/Cv7iys7O1tLGut7S3tbSxrK2xp6Wlp7CtqJ+nq6ajqKWmpqCgn5SYmZSRkZWUl5OYl5qhnZ6hnKGdoaWglpSbkZeXmJqTnpmZqaSlpKWdoqCanqCkoqOcoqGjoJ6cnp6ppaiVfXuDeG5mYWViYWNkZGpjZ2NbWlpdWVFPRT07OTo7Nzc5OTY0OTk6NTMxNDUyNzo7OkA9Pzw8OTc3Ozo5Ojw+QD8+RDxCQURAPz49QkRCQkI+OjlCP0FCPT44NVmfnJiTmZaRlZiYmpeQkZCQk5GTlJKSkpSUxce4tbq5wrm5vMPFwri7ubGxtry6tbnAu7u5tre0tLW/u72/ub66urTAuLW3sq66u7fAt7zJz8C6v8C8u8W9usDEv72+sXNhgJGJis/Ev8DJvrDBv7q3u765tbi0uLy0vbi1tLCzvLG3tri/tr25vb65t7q+u7/Axb29y8PGw8TAw762ubq2v7i7v7y4trOyq7CwsrWzs66sq6emnqeurauiqKumpqqjp6iqo5+Ym52bmpicnJiXnJuhpZ2anqGhoKGmoJqbnJiboJ+dnJ+coKiho6SknaKfmqKgop+el6Shop+dmpieqKWhi3x5iH1xZGFiY2dqZ2dqZmpeVlZUWU9TTEY4PzY7Ojc3OTs2NTo7PDYzMTM0MTc7OTg/PT47PDs3Njk5ODo7PUA/PkA9PT9CPjxAQUNDQT9DPTo2PEBBQDw9ODdJlJibj5OUkZWYlZGWkpWRkJGUlZSTk5OYlcHCwLq8ub62uL7EwMKxvbqytLO4vLW3vMC8vbS0sbC1t7W7wbi+ub+8vLe0t6+ut7W5v7vB1Iy4v7vDtbrHtrW4ury4ubaztp6NdITJv7+7wb65xr3Cv7zFuLa3tLi2tru7uLa0t7q1s7i8vbm/ucPAwLu5vLu+vcjEvcfEw7rAvb62sra4srm0usLCureysaysq62yr7Kur6ijpJ6rrKyqpKakpKiqoqemraihoaGmn6Oiop6bnKKfoKOdnJuhn6KgpKCem5eZn6GdnZ6eoaWkoaKioZ6ho5yinqCZnZijn52eoJqZoKKmnYR6g4F5cW1lZWZwamVsaFlZT0tLS1JKTEhEOT44PTs2Ojs5Njc8ODk4NjA0MzE3OTk7Pz0+Ojw6ODg5PDg6Ozs7PD1BPj09Q0E8P0NDREA/Pzw6Nz5CREE/QDg4P4mYmoyMkI+Tl5WMkpCakpGXmJaUlJKQmZTDvsbBwby8uLi6v7a8scK2tLyxtLa4s7q9v768sq2vrLGwt7y3u73BxLm3t7a1ubm6u7+8z8N2qMy9x7e5t622tLe5s7Wxu8bHlkJ8yr6/vr28v8jDxcW+xri1srK9uLi4vrq6uby6urS3u7q5v7zEwL+5uri/ubvFxr3Fw8Kyur27sa+2uLO3s7q+wLm2rLGrrqmqqa2qqq6mpKWnrq2ppaOio6GkpaWmoqato6Klo5+ho6Gcmpyhn6CloaCenZygnaWgnpeVmZ2fn52gn6KmpaCknpybn6Ofn5mcmZ2epJyWnKOcnqGcppZ+f4Z8a25xZ3FrdGZjbmBcVUhLS0RKQ0NHPzo7OD48Nzs7OTc4Ozc8PDYyNzUxNjk8PD08QTs8Ojs6OT45Ojs9PUA+RD89PkRAPz9BRkQ/Pzw9OTc/QUNCQEI5Ojl3nJiLh4uQkpOWjY+TmpOQnZiSkY2PjpiSvbfHvsO+vbu+vL22uri9ure9s7OwuLi1uby7wLeqraSusLi7sr2+u8S2tbi1t7++xLzCxNetc4C7yM/CwLiutLS7vbe5sL3DyIxGds3Dwr++vbzHzMfHxMe9tbW2wb27u7/CusDCv7y2t729vcHBwL+8ube8wru3v8W7wr++tbe8vK+vt7awtLO6ubq7r6mtq62rrKaqoqeuqKWqra2vp6Sgn6ajnqKjqKOjq6Oiop6dm5ublJaZnJyfpZ6fnpmYnpejoJyXmZqZmqOjop6jo6egpqCbnaCjnp2WoJmcoKCblJegn6WcmKKQgYaAcmZsam51b3hjaGNcY1FLVUhFRUNHQzw7OTg9Ojc6PTo4OTs3PD01MzY1MDY4OTo8O0A9PDo+PDk+OTk9Pjs/PkM8Pz5APz4/P0ZEQEE/Pjo3P0BDQz9APTo4ZqGYj4uNlZKVlY6PlpmVl5uVjoyMjY+bk7m2wbS/vLm8w8C+wLq1trKywLmvsry8sLe7tru8qqqjsLm9vLK8vrzFuLG4ubzGycrCxsnRmHBzrNHRzMrEtbq/xMi+vrS/wL93U2/LxsK+wby/w8zKx8XGwLm9vMS/v7/CyL3Hx8XFvLrEv7vBv7rAvLu7wMS9t7nCub69t7S2uLqur7WxsLCytre0t6yurKqsrKuoq6Gms6qlra+trKippaOkp5+io6Onoaeiop6cnZyamYyQlpeZnaKZnpuVkp2UoaCdmZ6fmJimpqKfoqKmoqeloqCko6GbnaCbnKKfl5WVnp6kmpafiYGDgXRwbWx0bGxuX2NfYmJOSE4/RUA/REM7Ozo6Ozo4Ozw6OTw+Ojo+NDQ1NTE5OTo5PDtAPD89PTw4PDs6PDs7Pz5DPkI+QD89Pz9FRUJBQj87Nj9CRUQ9QUE6OlmfmJOSlZqVmpOQlpeclZuZlpSVkZKTnZm2uLaxuru6vsG5uca7trWypb69tLbBv66zvbS4wbGwsbS7xdDCur68xL63vMC/yc/HyMrJwYZxc6XMzMvNysbCw8vOwby4vbqwb2Rju8jEwMC/xMDKycPDxMO5w769ub+8wsbCyc7Hxr66xr26v7m3wLm5vsDCvrW0vLi2u7CvsrK1r7Cvrqyus7CzsrirsbKxqrCrq6yrrLatqKyusqarrKmpoaWgpaakrKSmoaChnqGgnaCMlJeTm5+mmZ6emZOYnZ+gnp2eopuYp62ooqSgoKKqpqmhqKGlm6CgnZ2jn5SYmKKdp6Gfm4J7eoh7bW14fGBxY1tfYF9UST5DRUlCQz5DOz42OTo7Ozs7Ozs7PT05PTU2NjIxODo5Ozs6QTs/PDw+Nzs8Ozw9PTw9Pz5BQUE/P0FCQUVDQkRAPDY+Q0RFPkJEPztTmZuZmJ6dmqCalpyZn5KdlZ2boJWWlJqYur20sLu8wcTCv8XGura5sqO7vbS3xLuwtbq2ucS4tLy3u7ur2sO+tr7Avr66ppypsrbDv6V4dXibxMbLyMHDwMDJysG/u7mxoH5zbK3IxcS/wMG/y8fDwMjAusK7urO6usG+wMrOysS9tby8ub+5ubW1s7/Avre0s7W4rbeqr7CwsrGvq6+nr7ausrG5rra2uLSzsLGttrS6sa6srranrLKsraSjoaenqLKrqqWkp6elpaCml5ujn6SmraKeo6KanaWiop+foaWenrC0sKSlnp+kqaevp6mgq6CiopqipJ2anqGmp6+psZWCe32Bem5zeHRocF5cX11aUkZFRE1JQUQ9SDs7NTk7Ojw8Ojs7Oz0/Oj01NDUxMjc4ODs8O0I8Pz46OzY6PTo7Pj0/QD87QUFBPj4/QkBBQkJFPjo1OkFCST9AQkA7TJqdnZ6fnZienZmampySoJWbnp+blZGRl8W+urbDvMbCvr/Ixbe1uLe2ubu0r7e3srWzt7m8u7a7u8S3ba3Ovba5wLysfW5obm1ygZWYcnd8l72/xsC5wLy+xcS9vbixsJmPfoKcysLDvL2/v8PDv7/HvLy/tLSutbW8vr/OzcvCt7K4t7e9ubuxtrLIwLu2tLGxt6yzqbCtrbS3r6uuqrG1r7Gvt7O6usC/tre2sru6wLWyrbO3rLC6r7KloqWrrK+5s7KosK+xr6qiqKGkraitrLOun6inpqWmq6Sknqaqo6ayuLOrpZyfp6anrquqpbClpaWbpKOYn6exrLW4sLKOhHl/fHdtdXtwb2pcYGFaU1FBRklHS0BFQ0k8PTY7OTk8Ozo6Ozo9Pzw9NTU2MTM2OTg8QT5AOz1AOzs5PD04Oj08QD46Oj49Pj09PkBCQkJBRD03NDU9REc9Q0I/PEWUnqCgoJyXmpiYlZmdmZ2fm52bnJaRj5LDwMK9wrzEvLy7xbu3s7e2tru7s6CWtayvsbS0tLa4ucDNsnWBs722tcKlh2laXmBNUltabnN2gZ+4uMK6s7u3u72/uru7r6Sal4iSfsDEw768v7u7uLbBwrW/urWur62wvcC5z8rJw7GwtbS0vbq+urq7ysO7uravsL2xuK+ys7C3vbaur66wt7CsrLK2vbzEwrq9t7bAv8G3tbC2srGzurGxr6err6u2v7e1qbqztbmxp6uop7ausrG1uaisrK+qr7CqqKessayytry0saykqKuoqKusq6i2qaaonqadmKOuvLG7wbSmiYF7gnpzdnZ3bnJhX2ZdW1VKPT8/R0c9R0NDOTo1Ozk5Pjw8OTo8Pj4+Pjg4MzE1Nzg5Pj9BPzs6Pz08Oz09OTs8OTs6Nzs+PT1DQT8/QUJEQkE8ODU4PUNGPUREPzw/iZ2en52Xl5WUk5aZnpubmpuYlJ2Uio6Owb7Dwr6+vrm2usCxtbGzt7fCtbOrrbOoqa61r620trnCyaeEeIqgr7WdamVnVllgSUlNUFNsdoalsLe+ubK1sru5vLa5vrSVnKaXoXKuycTAvb+5s66yvLquu7Szpquorbq+uMvCv76sq7Cvs7q3ub67wMXBu7y3sLXEtb+0uLu0u8PCs7a2sbisqaWrsr23v7+7u7exvL28trGvq6uprbOvsLCrsLSpuMC2sqm0tbC3tq2spqu7s660uMKwsbG1sbK1saywsri4ubi+tLGzrqyxramvrqqyuK6trainoZ6ptr+4ur+wlol9gHxxdHd0d3JsX2NhXF5PSUI/PUlERk1EQDc3NTs6OT48PDk4PT47PT86ODMyNTc2OD8/Qj86OD4+PTw5PDk7Ozo8Ozs6PEA+QkI9QEE/QkI/PDs3OjxBRD5CQz8+QYqgm6GdlJiVlZKYmpyWm5WalY2bj4SIhru0vb+7vLm3s7y8rLOytLS2wLXAr7Kzqqqxt62pubO3v8WqiHx1jKCYYFRDWFVHYWpWT0VKYI2grK+2urW0sqy8ubi1uMG9ipewoaZzpcvCv7m6ta6lrLOxprCtqJ2gn6WttrXCt7a0paiqqLC2s7K6tbu7u7W4trC2xLK+vL+8ubrFybq9vraxp6SeoamxrrW5trKxq7S2trGopp6gmaWmpKynq6y2qa+6sa2kpq2lq7GrrKmtuLawsrjBtrGxtbGvu7ayt7W1sry1urKwsbKutLKqrq2nuLWyta2uqqiosrq9wLa0qY6Ce393cHxvdnNuY15nWV1eU09OQT9KQ0FLSkA2NjU7Nzg+Ojs4Nz4+PDs/OjkzMjc1NzU8PD48PDg+Pjw8OTk5Ozs7Pjs7OTw+P0E9PEJAPz9CQD47Njc6QERBQ0E/QUKJoJ2loJSWmJiVnqCcl5uYmpGMmYmDhoS1r7S7u7S1sLG2uq6wtLOvtbq1urC1s7KttrqvrbyzuLi+tJCCeIiPb05KP2RZQk53gJRqTkBcga+1s7WytK+su7q4trm/xXWBqZ2aZKe/uLWysa2tn6Smp52kpZyWmZmZn6muuayrq5+lqKSrrq+nsKuvsbGtsa6usLmwtLy+uLm4x8W8vLu4qaKcmJufp6assq6zqaapqq6popqXl5GcmpijnqKir6ekrKaompqemqGnp6anqa+2squ0trCqsK+xqbm2sbWxrqy3s7avrquuq7S1ra+rq7GtsbKoraurs7W3ur2wq6GLeoJ5cndzbXVqbF1ca1ReXFBOSERHTUJHTkc4NjY1OjU6Pjg7OTc8PTo7PTo5MjM2Nzc3Pjs9Pjo6Pz48PDw6Ojs5Oz47PTk8Pj1CPDtAP0A/QT8+OjU1OkBFQkRBQEJBiJ+ipqGYm56dmqWpmJudmpmUjJmHhoeGrq2uuLmxsqiur7iyq7CwqrK1ubm+tbK4tLm6trm7tbWzt7aVjIiEe1hGQU6HWUpKWHeNgWNAU6O5s7SysLGtsLm4tru3uryPobGrpHOrsKmrraujqKCdnp6Xl6CVkpaXj5ifqK6ko6Sgoqaio6mpoaanpaqtp6ynqKesq6yyu7SztLm6trK2ramgmpaWm52fq6yqr6Oko6GpoJuTjo+QlJKSmZaanaSloJ+ep5iVkpSZnqSjoaWqrK2iqaqppKmtrqW0sa6xraqprq+wraWmqqSos66trKmmpqmrpqqnq7Ksr7Oxq6mWgX+Bd3J5aHV0b2VVYWRXXVJPTUlASVJETkM9ODg3NTo3PD46Ozw4OTw7Ozw7ODI0ODk3ODs7PDs4PD0+Oz08Ojk8Ojs9PTw6OkA9PDw7QD5CQEE/Pjk1ODs8RkFDRD9BQYijpqKjnqCfp6Coqpufm5yZmI6Xi42PjKqpqLGvsK2lp6ayr6mmq6CvsLu1vby4wMG+vLy8ua6sr7K8qpmZlWhOQFJ4cFBJSUtnnIBZRFKuu7Gss6+urK22trK0ta6opp6am52fpqieoKipn6GnlpqWl46dk46Qlo2Xm6SooKCioqGlpZyjo6CepaCkrKWmqKSio6OrrLOuqa6urqeqraisoZyamJmYm6qoq6ufpqKbo5yVkIyPkJCTkJeVlpifnp6amaaXk4+Slp2ioKWipqSnoKKko6Ghq6uksq2qrKyno6yuraufoaKkpK+srKmmo6KqpKqppKmrpqmsq6ahiHiDfHZ/emN3bW5dUWlVUE9HUE1NQ1BSQD47PjQ5OjU7OT07Ojk9OTk8Ozw8OzkzNjk5Njo7Pz06ODs6Pjw6PDs5Oz07PDw9PjxAPT88ODtAQEE/Pz45NDk8N0FDQkQ9QEOOqqSjoqGinaqlpqimoZ6dmZ2PmJWTkJWnpKGmqKmlpKChp6uhnKKbp6u1sry9wMLCwL7AuLSnpKyovcKrpb1oRVKdglFXSUpgSlSNYGNiga61qrK0rqqrr7Cys62lnZGXk4+XoJ+ioJyjpJ+eqJSalZaLlpGNj5eSmJ2iqp+fn6Cjpaicn6ChnKGfo6innKehoKSfrKisrKCpq6agpKimrKOenp6al5qrpqqxo6WonqCclpOPj5KRmZCWlZiXn5icmZukmZeUlZqdoJ2nqKWgo6Kho56doKmqpa6upqipoaKqrqqnoaCio6msq6eppqShqaKlqaalpKKmpKijkn58gHV2fW5re2RpVlJkTklIR09TTktOSDxFQD0yQDg1OTs+Ozk5Ozg6PDs7Ozk5NDg7ODc7Oz48Ojk8Oj07Ozw9OTw8PD49PUE+QEJAPTc6P0FCQEA/ODU1PDpAQ0BEPkFGlq6koqWeo6KpqKipqqWmnp2imJiZmZWbop6bnqOioKOgoZqgmJeXlqGorK62trq5ure3u66ooKGpoKrGv8ugUEFznXdQbktLY2Z0c19aXnCQsa+us7Wqpqyso5uZlI2RlZeYmJyfoqKcnaSemqSWl5eVj5GRkZKal5ugpKqeoaGepqerop+gp5+dn6OmqJ6jpp+qnaqtqq6nqLClo6Smp6ymoqWimpmer6iusqumq6qgm5iYmJWTlpqTlZaalpuXmJihnpyclpuhm56ao6eln6GioqOdm6Gmp6aoraOppZ6kp6mkpaWhpaSsrKmmq6eioKSjpKenoaCgpaKmoIl8gH53eXxleXpgYlNWYUhJS0tTVEpTUU05P0E2Nz02NTs6PDw5Ozs4Ojw9Ojs4NjU3OjY5Pj0+PDk5PTk9PTw+PTs7PDo+PTw/Pz9APT03Oj5AQEA/Pzg2NT08PkFCRkBAR6CupKaroaOqrK6tp6ypqKCipp6bm56aoJyalZmfn5uen56WlJOXk5KcnqSorq2sq6uvqq+pnpeepZykx8eOV1NKZaNaZX5vclxRa2NbZF9cao+0sLC4rKahnJ2alJeamZCOkZWRjI6Nk5minJeimJmXl5iUmZiWnZufpaWpoKaknqeurqqmorGjmqOmpqqioaqiqaSosquxsqu5qKarp6urqaysp6Ggo7GusrG0qrKuo5mcnZ6hmJubmpiZm5WWm5aZnKWhoJqjoZqdmZ+kop6gn6KmnZulpqWkpaijp6OepqOinqaloqWlqKykpq2noJ2eoJ6gpaGenqWgppmBe4F8dnZzaYJsZltTW1pNUUtPT1ZNU01CNz5DNzg9NzY6PDw9Ojw5ODo7PDo7OTc2Oj01OTw7QD03ODs3PTs9PT06Ozw4Pj09QD5BPj4+ODg8P0BAPT43NTg9Pj1BQEZAQUihqqCrq6GkqquwramtqaelpaWkoKGfnqWXl5SYmZ6YnJ2blo+VmZKRnJihnaqip6Cep6Gln5ySm6KanqukjHlVaXJ2dXBjdnZYV2NgY2dYV1Znra6sr6efnqKglpCTm6CcmZeSk5+coaOanpuWnpqel5qinaSgnqOepKisraisqKSstLe2sKe0rKKtraOvpaSmoamorrWzsr22vrCssa6tqaq0sbCoq6iztbizuK2ytKSgnaWgrKGhoqGgmpmWlp+bm5iloaCeo6Ggn5ucpaCfnZyhqJ+fp6meoaOkoKagnqehn5ymo5+ipaOooKmrpZ+dnZudmqainpyjnqeQgYJ/fHh2anh1Xm1bUmFJUlZIRlZXSkNNSD1LSThGPDc3Oz49PDo8OTg6Ojs6PDk2Njo8Nzs+PT8+OTc9OT47PEA8OkA6OkA/O0A+QUA9PDk3Oj5APzo+NzU4PT0/QUBEQEJGnKueqamipamorqimqqWmp6aoqqGlpKOmkpOVmJacmpqcmpWTmZuNk5+ZqJ2un6eenKGdnpqZkpiem6KhoKOAboJwYGNYTFtTWk1MUFhSR0xMR5isqqmloJ+akpGUmJiWlpaMiIuOlJ2cnZyelp2Zpp+gp6WwqaatoqqttrC1srCttri9v7qttbSwt7CutKmmpKWsqbmztbvDvMPBtrq2q66xube8r7OwtcG8t76zs7WirKKpqbKpq6inqJqZnpqqp6CZp6Cfn6iopaSenaqiop6bn6igpKetmZ+jnp6nnqCmnpycoqGbo6KhnZympaWkn6KZnJukn6CboJyjiYWFfnZybWl3bWhuXFhcQ1dOSkdNSENGTj0+TD40PDo2Oj0/PDs6Ojg4PDk6Ozs8NTQ6PDg5Pj4/Pjg4Pzk8Oz0/Oz1BPTo/PjxAPj8+Pz08Njs/QT07Pzg1ODw8QERCREFCQ5WqoKapo6mqqKmjoamgpqinrK6lqaWpqZSSl5mUmpqanJiYmZyamJmqoLGit6Swpp+enZ2XmJWZnpuco5+dimFXXmVgV01RRz4+P0NDPz5CUXipramqpqCen6KjnZ6emp2blJOVlJ6emJSFnp2gmaujq7GvubGxsLGwur28vLm2uMO+v8K/trq7wMO5vbusrqexrbHCtrjCxsDIysDJv7C5ub24wr64tLvGxL3DvLi0qrOtqrO0r7Ouqq6jnqyotrKto7CmoaOwsa6wpKWvo6GgmqGmoaSqqpmdoJmao6CmqKGcnqKemaSenpiYo6OhpJ6mmpuipJ6fm5ubnIeGgXx0cmtsdXJxaFdcUUZVSEVKUEk/RUI0Rkg5Njw+Nzs8Pjw8Ojo4OTw4OTs4Ojo4Ozw3Oz49Pj02OEA5Ozs9QDw9QDk3PD07Pj0+PUI+Pjc6QUA+PD45NTg9Oz1DQEFDQkGRqqGlqqelqqimn6KnnKasp7Gyq62jqayVkpWalJecoqGbnqCinJ+psqu7sr+rr6ylnqCgnJyYmp+gmp+flXxfXmVgUUdEPEM+RTw/OTZOfqqzp6SjoqCepaymnpeclJGanpmVjIqGiIZ4bIqloqKrq7K8tsO9vrK7wcPCxb+/wsbGxcPIwsDFyM3QyMvDsre1vrK+xbu+zM3GzMzM0se+v8DDvsfGwrjEysnEwce/urS6u7W7t7C2squ7sq+8t7+7uqu4rauquLu1vK6uuKOmo56mpaKjqaaZm5+Zmp2nqqegoaGkmJSjlZSZkZydn6Sep5+en6KdmJmUmJSIhX56cmtkaW94a2VaXEZMTUVEVE1FQkU3Oj87NTQ5OTc5Pj87PDs7OD48Njo9OTw9OTw9Ojs9Pj4+NztBOj45PT45PT44Nzs6Ojs/Pz1CPj83OkFAPTw9ODY2PDo8QD9BQUE+kqugp66ooqulpKKipaGlqquwsq2upKmmlJWWmpaUm6SmnaGqp6KrrLy8v8PBsrK4p6Ghq6qhnJ6hoZ2bmn1zamFXTkU+SVl8b2JCPVyOrqygmZucnp6Zl5eYko2Pl5eUj42QjIKDgnZycG1wh6WsrbS4xLrNx8u+wszNzczHyNDMzMzHysXFzNDS1c7Tyb3Av8O7xsXIxdHTzdPQ09PMysHGx8bKyM/AydHNx8bIxsK8w8G/v7+1vrOtv8DDw8fFx8Svv7myuL3EwsK6vLy1rqenrqigoqmlmpagmpmdqKupo6SknpePm4uQmYmVmJugn6OdnZeempOTi5WPhYF5dXNlYmdyb2deWlpET01DRVBJRENBNTU1ODlCPTY4OkE+Ozs+PDk+PTc6PTk6PDg8PDw7Pz8+PD0+Qzw7OkA9Ojs6Ojg4ODk7QT48QD8+OTtBQTs7Pjc4Njo7PkI+Q0FAPpOvn6ivpqiro6KloKampKuoq62qrqKqo5Kcl5ebmJuirJ2frqalsarFxszOzb+wwaikqKytqqCdo56bnZZrZl1USURAP0uGnqWahKCyraOenJ+amJeUk5SXkZCPjIeEhIiGg4CBgYB5cXJva3iitru5vMrB09LSyM3O0dPR0dDQ0dHNzc7QxM3U1djR183Gx8nMw8XKz8rS19LX0tXW09TIzMfMzcnTzc7TzcbJysrCxszHycnGv8Ozs8jFy8vLz8fKv76/vcHHxczMycnAw8CusLOonqKqo5qTnpyYnqaprKSlppaXipWFkZSHkpKSmZualpiQm5aQjIaRi4B7cnV2Z2NndmplVlhSRE5HQElRQz5CPToyMkE8RTw3ODxCPTs9Pzs7Pj05Oj48Oz44Ojk5Oj86Pj1APkA8Pjs+Ozk9PTw5Njo6Pj08PEA/Pjk6QEE6OT44Ojo6Oz4+PEE/QT6QrKKiqaanqKSfop2qqKOso6OnpqyiqZ+To5iWn56dpK6bn7CrqKyxyc3U18/Gu8esrbO3rK6jnqOinaGcY1RMSkRDP0NSrtG9sq+mnJycoKShnZqUlJWUin14cWtlYmhycHJ7hYqAdXBtcXJvhJytvMfR0dfW1dHWzdTW1tPT0dLU1NLP0cPQ09bY1dXSy8nO0MvGzdLK0tXX2dbY09bYzdLKz9HMz9HN09DAycjLxMzNzM/PxsfItsDLwNLNzNDHysjAxMPIz83Q0c/NysjNuLe7qJ+lq6eemJ6jnp2qpa2pqKiSlYiQhIyRho2MiJOVmZCWjJiSj4aHjIR9eHN2cGNhZXJjXVJcSktHQUZJSj87QTg+NTU4Njs4Njo8QD07Pjw7OUA7OTo8Ozs8Nz09Ozo+Oz08Pjw/Ojo8Ozs5Oz89OTU7PD48PD0/Pz46O0BCOzk/OTg7PT0+PzxBQEQ8hqugnKegp6Oim6CbqaSlqaCfoaGmn6ifmKSimqmmoqarmqOwsamotdDU19rSx8bLtLXBxbG1qKGlpaCioltJQEFEQUZRdrKvppqUl5+cmqCgnpucmpWJd2ljYV9fX19eX19dYWx1c3Bwbmxwb3WAd5i41dfW19bT18/V1NnU1M7P1dTU0dHM0M3T19bT1dDP0tPRydPRyNDX19jS2NLX2dXWzM/Pyc3SzM7RwMfEycfPztLR0sjMzcDLzcbUz8zOycXLx8fJzMvU1NHVz9LM08K5xbGlqLWuqJuoq6Wdsqiws6ysk4+TjoiKjoOPi4SQjpmNk4+Zj4+ChYx8enFzdG1hY2ltX1ZRYEpKQ0VDU01APD40Mzo9NTI4NTU8PEA8Ozw6OTpAOjg7Oj46PTg+Ojo8QD08OTs9Pzk6Pz07PTw9PTo2PD0/QD08PT0+OjxAQjs5PDc0Oj48P0A9RkFEPYKknKClnaWlo5mcnaSeo6OfnZ+doJqnnpyhqZ+vraqqq52lrreoq7fX1NXZ2dHO0L+8zMm2vq6nqqiho6xmQzg9PkRYgqqon5eVl5manJ+dmJuck31xZWNiX19hX15hYF5hYF9gZW1wcG1rbnB0eXZpfKnN1NjY2NHF09LXz9POy9LN1dTRys/M09bS0dbNz9XV0cXR08rQ1NXWztPR2NjY18vIzsTJz83KzMDJwcnKzs7QzNDOzszPz8jM0NHLzsvDycfKzcvM0tPO09LR0NDKvci5sK67ubWrtrCtqLits7+7sZqOoJSRjo2IjpCFkY2ZjJGRlY6RgIWJenZvcG9rYWRucGFYXFtJRkZETVlFO0A9MzM8PDg3ODU1Oz5APTk8PDg8Pjk8QDtAOj04Pzk4Oj88PTg7PkI6Oj08OkE9PTw6Nj08P0A9PDs9Pjg7QEE9Ojw4ODs+PD4+OkVCRT6Bn5mlp6Cfo6eam5+cl56eoZqdmpyappufpKefuLa1taykrK6+tLDA2NLX2tzWzs3Kw9LPwcGxqaytqaSye0hGQjtXjaGblZOWm56enpyTlpeUiGteXl5hZGJgYGFhYGBgXl9fXlxibXFubnJydHV6cWJtnsfV1NCkys/O08rNzsTNytLSzsbOzM3Uy87SzcrW1tDM0dTLzNDR08rO0dXS1dbKwMrBxs3DyMrDzcTGycvLz8vOzdDO1MzGydDNycfLxsfCxsrMztHRx9DPzs7M0MXHwbi5vcPCvcO5srK+sLvDxLWqmKWhmJaRlZWSi5SNmpGUlI+PlYKJhnlxcmttaGBgcWhZWGhWTUdMSVFRQjtEPzs2ODo4Ojs1Nz09QTs6PD05PD05PT06Pjo8ODs9OTtAPD47Pj5BPDk9Pj1CPTs3NzU/PDw/PDw7PDw4O0FAPDo8OTs7Ozw9QTpFQUU+hJ6bqK2epKSqnJ6fmJKXm5+am56ZmaKVoamppcTCwb+7tbKxx8K4ytXW2drb2MzMz8jW1cTCta+0qKCtl3hsb3B3j5qNjJeVkJORkZWWlZCLfGViYmJgXV5hY2JgX19gYWFgX11bXWdxcXBxcm9rcXl0ZW6fz82bl9bJw8jIxca+wsXOzsfFxs3K0cjLzc3F0NLPzczUysfKzs/Hx8/Sy9DPxbrEv8bKvcPHyc7Fw8jAx87IxM3KzNDIxcXQycbCxsnFv8HIzczMz8PKzMnHzNDFxci7x8PJycLPwb28v7DByce5vaqxsqelnaKcmJCbkKOZl5mRlZiJj4J4b3Vka2BeZnFhW1dgR0lIR0lNVEc/Sj02NDM1NT09NDg9PT06Oz08OTo7OT89OTw7PDg6PDo6QD1APD09Pjw6Qz48Pz04ODk6QD4/Pjw7Ozs7ODo+Pzw7Ojc5PD49Oz49RkFDPYOgm6qupa6qq5qdoJeUjpedmpmgmpqcm6WysazJzcrIxL68uczMxtDV1dja29jQyc/P0dPIwre7u62ktn5ngoWiqpONjZaPhYODg4F9hIR+c19bXl1eYF5gY2RjX11cXl9gYF9bWlxha3Jwbm5pam1uemdVgMCiebvPw7i/wrq6uri9yMXBw8DDx8rIyMnHwMXLxsjKzcnEwcrJwcHLz8TLyL+5wbzGyL7Axs/LxMDDu8rHyLvJxsXKwb7Cy8bFxL7Gvr3BxMbMxsa8v8rDxcfSxcHJwMrKxsjG0MPDxsOuxMvHw8q3v7y6s6mspKWYn5iso6Gmm6Ogm5V8d3N1ZmpbYW5tWlxYUkRMR0JHRExERlJANTQzMzVAPTM6PDw7OTw8PDg7PTtBPTo8Ojs3Oz05Oz07PTs6OD4+PEI+Oz88OTk7Pz07QD48Ozk5OTk6Oz06PDo2OTw+PDs+O0NCRD5/pZypsqm0rrCdnp6YnImUm5man6Kfmp2ovri8ys/RzMfCw8bNzs7M1c/V2djZz8vSzc3OyMG1w76ysLZsXnl8n5GKkpaGeoCEhX91eHVycF9aW11gYGJjZGRlZGBbXF5dXl5gW1laXGJucW5qaGlubXN5VmqUe6vDxcCutbiwsbKwsMG7u7u5uMDBwcS+vbm9v7nEycXGwr3GwLe7w8i/wcm7tru7xcO/vMLOw8a+vrXBvsS7vce8w7q1vcbEwsO3wLa2v7+8zcS9trrIu7++zMTCxsPGycfJxtDGwszIssfJw87MwMXDv7yyt7Cyp6ioubClrbCqrayUend4a2VoYGhvZFZeWUpGSkZIS0FFQkZKQTk6NjU4ODUzOzo7PDk8PDs5Ozk6QD46Ojw6Nzo7Nzo7Oz88OjxAPUA/PT8/Oz07O0A8Pj4+Ojk5ODk3ODo8PDw7OTo8Pjs7PjpAQEU+fqygrLWrt7SyoZ6fl5qNlJaan52mop2et8XCxMjO0srKysfNzc7RyNDG1dTV183Kz8XJxcfBusW9rK6mYGN2gZKLiIuEeH+Ghn99g3t0dGNcXF1eYGBiY2JiZGViXVxbXF5cXl1aW1xdZ3JwbGZlbG1ve3heZpLHub+3rK+upaisqqW3s7WzsrO0u7W9sbewta6yu8K7wcS8v7q0srq+wLjIuLS8tsDCvbi9x8HDu7Wvs7W7v7TFuLu1rLm9vsC9sbu2sLe6s8a9t6+8v7W3tcW9vsPGwMTGxsfLxb/GxrvHy7/PycfDxsHDt8O9vba5vse/rLW7tbe2jnl0eGdnZWJrbl5WXmBGS0hISkdCREFFRj89OjU2NjYzMzs6Oz06Ozs6Oz44PEE9PDo7ODc5OTk7PDo+Ozk+Pz1APz5CQD1AOjo+Oz89PTk6Ojo4NTY7PT48PDo7OT49OT86PEBAPIi3pauzsby8sa2foJmUlJiXnqujr6qnpMbLzcjFyM3M0MvNyMnIysnKxNDN0s/NxcfBxcG/urjJt6uwmVtnb4iOhoiJenh+hYZ2d4F8c2hdXV1dX2BfYGRhXmNlY19eXFteXF1eWltbXF9rb21nZWhrbG9+bWi6uLazrqirpZygp6WcqaqxrKmrqbOttbCyqK2mrLO7urbDubq5sKq0ubuzwrmvwLG9vLu1u8e5w7etqqiwssC2uL2wsaiys7W7vKuutqeutq68srGquLCuu667uLvAwb66w7/Gw8XAvMbBx8q4xcfFv8fDw7nExsK7xsnMy7O5wr27s4l0dndraWBibGlZV1dbQUxMTUpFQUM/RkE6Ojo5OTY4NTQ6Ojk7PD07Ojs+ODtAPD05Ojc5Pjk7PDo4Ozs6Pj45QT0/QD87Pjo7PDo9PDw4OTg5NzY4PDw9Ozw6Ojs+PTs/Ozs+QDyKwKuouLe5w62zqZ2ZlJaZoZymsLWxt6bFztLLw8XBxM/HzcHCxr/ExMPDysLJyr/AvMK6s7W1w66qsJJbaX6SiI6Pe3h9iYV5e4SAd25eXVxcXV9gX19kY2JkY2JgX11aW1paXVpaWlpcZG1uZmVmZ2lrcHqJt6+0rKOipKSYnqKemJqjqayjp6GrqayrsKOmn6qttLaxvbivt6+orbi0s7y3s72wuLm1srzBssCvpamjq7Gzs6i9qquoq6yutbSmqa6hpa+ps6aoqK6mqLessbO3urq7sry+v77Ev7XBwMfIt7+/xbfFw8C7v8TCvsTIzMq/v8TAwKmHc3RzamlcYW9kV1ZYUEhaU1NLRkZFPj9AOjc4OTc3NjQzNzo5OTo8Ozs8PDc7PTs7Ozw4OT44PTs8Njo9Oz89N0E+P0A/Ojw8Oj05Ojs6Nzc3ODg3OTw7PDs5Ozo8OTc5Pjw+P0E7jMKvrry3ucSwtrCbmZWcmKqpsLGztb2vxdDPzMPHubnLwsu+u8m2vcO+usq3wcTBtLa8trGvtbytqauSY22Ig4eLgHp9f354dH58c3dlX11cXF5fYF5fY2NhYmBhX11dXFpYWVtbWFdZXF9ma2VjZWRmaGxxgqWkqqKamZ6hkZqimJWPn6CnoqKfpaWnpa2fnJukpqyysLa3p7CsqKq0q7O5sLa2rra6s7C6urG2pKCkoKaxqKypuaqlp6eop7OtoKenn5ykpqyfn6ekoaGxra2ssrWzs7C1vLa7wcCyu77DwbG5ucKzwL3Atbi8vb68wsfEw8S/wMSghHlxbGJmYGtvYFVZX0hOaE9USEZLRjw9QD06Ozs4MjY1MzY5OTk7OTo6PDo3PD88PDs8ODg8OTw6Ozc4Ojo8OTg+Oj89OTg8Ojs+OTc3NzY3ODg2NjY7Ojo7OTo7PDg1OTw6Pj5AO43Itba9uLrBur22oJ6VnaCmurars7O7s8TPycvCxbi3x8DMv7jKt7vFuLPFuLO/wKy2vLKspq+0raGjkmlyhoWGgHx4dXNvbWppaXBpX2BdXFxcXl9fYWNiYGBgYF5cW1xcWFlYWFhWWFtdXmRiYWRlZWRoamyGnKelopaXnZOYn5WTiZufoKWbnp+jpaKnnZqim5+qr62xtaSoqqmsrKS0uKy3sKyzta+zta+wqp+en6SisqWmqritoqamoKitq5mfoJ6ZnZ+lmpmjnJyesKmsqKqrrK2wsrmvuLm6sLa8u7qrs7K5s720t7KxtrW/tb3AvcPCu7u9l4R7c2xfZV5kZFhUV15JV11LUEdKSkdBPD8/QTs/PDA1NjM1Ojs5Ozg5OTw8Nz4/Oz07Ozg4PDg5ODw3ODo7Ozo7Pzo9Ozc4PDo9PDc0Nzc2NzU3NDY2Ozc5Ojs6ODo5ODo7OTo8PzuJyba4vru4wcHBtKSkmZqkpsCyr7astLfFz8jIwMa7u8PDz765x7i4v7eywrSxu7usubqxop+pq6eYnpBtfoWGf3hybW9ta2JeYmZmXV1eXV1dXF1fYGFiY2NiYV9cW1taWllYWFdXV1dYV1pdYWNjZGRlZmdpcYmQgpOrl5aTl52Sk42Zn5+mnZucpKahpJufoZuYrq2trrKgpKKtq6ehtbCxsqypsLOourOntqGin5yjoa2joqq2q6Kjpp2mpqOWmZ2XmZqdn5qXnZydnK2hrKijpKatq7OzqrWwsquyubSvqq+ysrO3s66pra6yuLC6trq9v7ezsZSGenVmX2ZfW1lWU1pVS1tRTEpFSEtJQz0/QUFAQToyNDUyNDk5ODk7OTo9PDY9Pzs8Pjs3Ozs3Nzc+Njo+Ozo4Oj07PD06Ozw6PTs4Nzk3NDY1NTQ2Nzg1Ojo4Ojk5PDg3Ojg5PkA6gci9uL2/tr68v7KdpaOYpbHDtba9rbS4wczIxr/FtsHAx862wMO9s7m5sr+2sbm7rbK1r5+ao6qhlJqPeH+DhH94b3F0cWhlZGllY1xcW1tdXVxbXmBhXl9fYF5cW1pcWllYVldWVlhXWFdVV2FjZGJiY2NjZmlzc0dNfZCQkpOak5aRlJ2bn5uWoKCoo56eqJybmqunrrCqnKOjt6mhoK6otaqnp66xpLiwpLego5yZmaqmoZqtubCjoaSco6Cgk5WhlJaWnJmYlpeclZ+pnqqkop2jqqqxrai0rKqnrbOwpauus7GvsK+vp6iosq6ytLC8tLq4rqOUgnp2ZV9hV1lYU1JUS01eTFBMR0hMS0U9QD49Qjw6NzY1MzQ5ODg5OTo5Pjo4Pj47PTw8Nz49Njc2PTc7PTs5Nzk7Ozw+OTk6Ozo4Njc2NTQ1MzEwNDU2Nzk6ODo5Ojo3Ojs5OT1AOnbAvLS6wrG+t72tnaenoqq7wL3Aua60uMHMx8XCw73FuMjMssHCwa68u7W7vLW5ubCvsKqcmqGplZGKi4CAfHdxaWxydHBoaGVkZmFcXFpZWlxcXF1eXVxbXF5cW1xZW1taWFZXV1ZXWFdXVlVaYmJhYWJgYWNka3JlZ26Ijo+PlpSYkpKYnZqdlZ+epqWjpqefnZ+moKqvpp+ho7anoaGiqbOipailsKaxrqu1n6GdlpWpoaKUrbGxn6KjnZ6YnJOMoJSRk5iYkpeYmJeep5unoaKapKWlq6SlsKelo6usraaorq+vq6iqqrOmpquvtLGuvLaxr6+fknt4c2ViXFtdWE5MUUhSYU1WUE9KTU9FQkQ/OT02OTo3NjQ1OTk7OTg4Nzs4OT0+Oz47PDY5Ojc7Njs3Ozs6ODU6Ozo7OzY8Ozg4NDc3NjMzMjEuLzI1NTY7Ojg7Nzg3Njw7Ojs7QTh4u7uxtr2wu7G3rJ6lpqy4u7zBxbqyubXEycnAwsbFx7bFxLPBv8Wrt7e9tr26u7WyrK2omZmfo4uKdImIfnZuY2FmaWhmZ2lmaWxgXVxbWlpaWlxdXFtcXl9cWllbWVlaW1dVWFdUVFZWUlRSVF9fXl9gXV9fYWNpgY+FhYuJj42Ol5CRk6GXnpWbnqShrKWkpKOjopyqq6SanqWxqqGhnqWqnqiin62sqqmuraKiopWYopqckKupsJufop+fl5mTip2RjZKUlpCYmJOcoaOcpKCilaCipKWbo6uloqSqpKutpa6yqaalpqa0pqqorbO1tLm6r6qsnoxzcXBgW1dWVlJHUU9IWlxPUkpUS1NMRUdJQzg7Oz08OTY2Nzo5Ozo5NzY5Nzc6Ozo9PDw2Ozw4PjU5ODo4ODY1OTo7PDk3Pzw5Njc4NDUyMTIxLi4xNDI2Ojg2OTg1OTg5ODk7OUA5e7W0rLS7srCrsa2dqKevubmzwMi6tcCvxcjMusHJzMi1ybyxvsPJrbG4wbW8wLy0taqsppaanJyJgXKIg3t0aWlqbGdqbG1ramxlXVxcW1tcWlhaXVtbXmBgXFhYWllYV1hXVFZWVVRVVVJTTlBZXVtcXV1dXl5hY2yIin6LgYqLiZSPkI+ZmaGamp+nqKqoq6eppqOZpa+klZmlr6mgnJmboJ+umZyqs5+mpp+jo6GUlJuWlpKpqa2bnJ+hoZuUkIyYjYyRjZKNlpWQnaGgo52co5WboaOhmKKoo6Koq6CrsKSuuKWjpKOsraqoq6+0t7K9tbOrrpiFdXRpW1hZU1VSRlhMUVtYTVVPUExRUklPSUI9Pz9BPz03NTc5OTw8OTc3Ojc5Ojs8PT47Nzs7Oj02Nzo7ODk3Njk4OTo2Oj05OTU3NzU3MTE0MS0rLzQzNDk4ODo6ODo6NzQ4PTg/OX6zraezt66oqK+um6morLe2rLzKu7a/rMzGxbjAzs/Hs8S7t7vCyLGtuL+3vL67s7amqaCWmJmXiHp0gHZ3bm1obW1tcGdnaWZkXVpbW1tbXFtZWltcXF5fX1xYWFlYV1hXVlVUU1VWVVVTU05PUVlZWVlcXFxdXl9keoZ8hHmGi4WNiZONlJefnpmeqqimrqypsKSomp+soJWVpKinnZiQj5qerpaYp6qYn52UpaCekpGSkZOVqKqlmpiZnp6XjoyLk4aJjYOPi5KVkaCeoaSZlp+VmqGinpSbpaWnqaigsLCmsb2nn6OstKuup6+0sLm1wLGusKuRfnJ0Y1ZUVU5RSkdWUFJSTExYTktNT1JHTktBQ0ZEQz5BNzU4ODk7OTo3Ojo3PD06O0A+Ojk7OTo/NzU5Ojk4NzY5NTg3Nzk7ODU1NzY2NjEzMjAtKi4xMDI4Nzc7OTk7ODk0ODs4QDh/tKymsbeqpaKxq52qp6mysKS2xrS5urPKxbm6wcvQyrG3uLy9wMOxsLG3rrS0u7O0o6OdnZiXlYSAdmtnbG5xbnFqb2tkZWdlXlpZWllaWlpaWlpaXFxdXFpYWFhZWVdYV1VVVFJTVVNWVFFNTk1SV1hZWFlYW1tcYGl6dHlvgoeCi4WTh5GRlZiXnKean6qmpqudp5mgpZuSj5+jmpeXhoWSm6SPlaKclpaVh6Kam5OMjoqQmqWnnJWVl5yRk4iUjouBjI2AkIuSkpKhmqCilpSZmJWippqNmaSnqaehoLSyqLO4oZ2jt6yqrqSysqa1u7WrrLGiinpzbl5OUVFNT0ROTk5QS0ZOTkpKTk5RSU1KQUhMSUhDPjk1ODg4OTo7Njk6Njg7OTk+PDg6Pjk7Pzg3ODk6ODg2ODU3Njg4OTc0NTc3ODIwMzAxKyktLzEyODc2Ojk5OTk4NDk4OEE3d7anpLawpKekqqWgqaaks6qissO1tbKzxsW3usPKzMazrbq9tLjAr66psJ6mrruvraCam56VlYh8hG5fX2ZycHVxaW5pZWdoal9YWFhYWFlZWVpaWVtbXFxZWFhXWVlYVVZSU1JQUVRRU1VRTk1LTFNXV1ZXWFhXWl1hbGxwan6CfYN8jYGLh5KOkZygjpmco6GjmKSXoZyVjYeZmoxzjYN+jpeWhpKakJSOjXuZj52MgomAipigo56Qk5iWhY6ClH5+dIqOepCIk5CQnZuampKWkJ2Oo6OOiZqgoaSkm6K0r6ywrZ+YprimpbChsa6csbyqqa+pmYR4dGRWTVJQUE1DU05MUE1CUFFISU5TTUhKSkRLTUZLSz03NDk4ODg7OzY5Ozc6PDk6Ojs3OT85PkA3OTo8ODk3NjQ0NDU4NzQzMTI0ODUvMDEwMikoLC0wMjc2NDc4OTo6NjY6ODdBN3i3oaO0qKalqKOlpaamprKnprTBuK+0sMnEuLnAzsa+s6y6waytxK2ooqaSnaa3raOgkZaXkpB+eH9mV1ZfZ2ZpZ2huY2lpZ2JcWFdYWFhZWVlZWVlaW1tbWVlZVldXV1NUUE5QTk9PUFNUUU1NSkdOU1NTVFVUVlhaXWlma2d5f3dwTFZvjYCUhIualomSkJ6YnZWUlpSPloqAlIlfO1ZvfIyUioCMkoyPhoZyi4SWgXmBe4aUnZWDlo6Qj4OGfZN4cXCGjX2JgZCOkJeamZOLkIqdiJ+Yh4iWnpqhoJenrqmtqamelq2zoqatma2rmKi0o6mtopN/dG5gW05TUldMRFRKUE1MRk5PSUVMUU1LT0pJTVBGSUo9NzU5OTk5OTo3Ojs6Pj44Oj09Nzo/OD4/NTg5Ozc5Njc1MzMzNzYwLi0vMzQ0MTEwLy8oKSsrLTM4NTQ3Nzk8Ojc5Ozg2QTl5t6CiraGmpqqgpqmno6qwqKe0wbmwtbDHwrizvc+/ua+utcKnqsSqop2Yg5ScsaOamYeUkIuHfnN2XVBMUVVZWlddXmJnY19ZV1dXWFhYWVpZWFlYWVpaWllYWFZXV1VTUk5MS0hHYlxNTlFNS0hGSE5RUU1PUlRVWFlgamhidXxvTUA+fpWQjnuGk4uDiYyajZaUiZKHhZWGeYl/YEpRbniLkoR+hIyLhH9/bX5/k3d1dniEjZpwUY2IioZ8fnmUdmd3hoh+ioiVi46Rk5eMhIqIlIWbjYKFkpuWnp2UpKKoqaWknpuwqqGkpJGmqpaiqpyhpqeKd25mXlxIUVFTTUlVTVNJTEtPSUhGSk5MTVRLUVFPRkpEPTc2OTo4Ojs7ODo7OD4/OTk+PTg7PDY7OzQ3ODs2Nzc1MzQ0Njk2LzMvLjExNTIyMS8sJykrKiw0ODMzOTg5Ojk5Ojo6Oj85d7aboqadn6Guoaeopaeor6yqtry2uLezwbu2p7nIuLaoqLW2qrK8p56Vjn+JlKmWlYt/joOCfnhxb1hNS01NTkxNUVdbXFpYWlVVVlZWV1lZWFhZWFhZWVlaWFhWVldVU1BNSkVAQJtrc3NJTUtERENJTk9oWU5RU1RVWm6BbnB4ZWVZUo6Ik4ZyfYV/e4SLk4GSmYuPe4aPgHV/eHNvdXB0jo6Ben6Kq4V6e2h2e45wcm14gYuNknh7gHuAd3NyknhodYWEhIV8lYqIio2LgH+Ei42AlIR8gY+YlJyWkZ+dqZ6goZ2gqaWfnZiNp6OToJ+Wnp+kgXNpYl1dSldQUkhLWFJPSk1MUkpKSkxQSExRTVJUTUZJQj03ODs5OT49Ojs8OThAPzo6Pj03PT03OTkzNzc4NTY3NTI1MTQ3Mi8yLiwuLzIwMC8tKygoKS4xMjcyMTk4Nzo4Nzc1Ojw7N3aumaOhmJ2ftKmvqqWtq7Cxqr20sru4trq0sZ+3urKqnZ2sqaiyr6KakY2UgY6cjpF+d4Z3fHdwb2pZS0hJSEdFSEhQVFRUV1dTVFVVVVZXV1dYWFhYWFhYWVlXV1VWVVNQS0Y+OTNOPH6eTUhKREA9QURqlH5MTlFRU1ZedYF5dGJzipSXjY16ZXh/dXd+iJB8g5iSgHGGj3t2e29rfq18dJCLf3qGkoB8f3RmdXyGbG9oc3yKjYeAbXlxfXFtdo9xaHGBfo5wRIuFgoOFf3d3eoyGfYx7dX2Oko+Yi5Kam6OWmZ2bnZ6hnJaNi6Wajp2XjpaYkHhvbmdjW1hYVVFKU1VUT1BOUFZLTktPT0pST0lPUExGRD07Nzk7Ojo/PTk8Ojk5Pz87ODs9Nzw5OTk5MjY2ODU2NjMzNjExMjI0LiwsLS4uLTAtKyonJyouMTM2Mi84NzY5NjY1Mjc5OTV5ppegnpagprCsrquoqbGvsau8uKu7vrizrKebsKesm4+WnKWppKGYmY6EknmJj4uLdnF8bXVwam1qWEtGR0VBQENESExMTVFSUFFTVFRUVVZWV1dYV1hZWVlZWVlWVlRTUUtENzhmNzA/qGlOSEM9OzpEioV6WUpOT1FUWF1mcHBphaWpwH1yd2F6d216d4ePeXuLhW9sjJJ4c3hpaoCCcZaRjIF9lX9JkpluZ3d+gm1qZGx5hZCShmtybHxucnyGaW1wf3ONiYWGe35/e3dwdHSGgnmBeXB8jouKk4OWl5iakJOWlpmXnZaMg4mfkouSjYaQl4Bwam9vb1lWWFRSUllPUlVUUlhVTU5ITUtNT0tDSU5HRkA6OTk7OTk6Pjw5PDs6Oj0+Ojg6PDk/ODY4NzI3NTY1NTQxNDMyLzAyNCorKiotListKigqKCcsLTEyNTAsNTU2NzQ4NUhBODk1d5mRm5ibn6Ssr6Ktqqi1r66stL+rvMO/paKZlaSYno2Ei5ShoZiZkZOLc456gIaMhnVvdGxwbGVsallOREZDQDw+PkFGRkdLS0tNUFJSUlRUVFRWVldXWFlaWVlaV1ZUU1BMRTFAmjMganNDmW87PDk1PICChl9JTU9PUlZaUVlbX6aGYZhmcHdjfG5sfnmKiHWBh4V0bJmRdHN8aWqdjkx5hZOJhI5mMXaHcmt9fYN0ZmV1f4SEhYBmaWx1a3CAfGhxcXxuk42Pe3R+fXFxb3Vtgn93eXVqeYiCiImDlpKSkIuNkZSUjpeNgHmIl4iHioaAkIh4bGtwaGVYUltYWVlbTlBVVllYTklIRUpKSEdCQEdFQ0c9OTk4Ozk6OTw6OTs6OjpAPDk6PDk4Pjc4NzcxNTIzNDUzMzY0NTAzMS4qKispLCwrKykoKycpLCwyMjYsLDQ3NzU0NzhpTzg7NW2SiJqQmZakqK2esZ6nuq+rsrDCsbvDx5qWj5WZi46FeoSQmJWNkIyQh3GHgnSIjIZ6cHNxb3BkcGdfVEZJQz48Ozk6P0BBRENFR0pMT1FRUVFSU1RVVlZYWlpZWFZVVFNQS0U4MC9cYLNHOVhQOzk0NDGWuotITE1PT1FVTEJJUUlirrKecHl1antrcIKAhIB6hIWFeXKglHR4gHN0lIc1cJ2onY+hoYSihXZwhnuGfHSMro2JgWhnYmpucm1wg3Vpb1h1cI6bkXZtf3t9bnJucIB7c3ZuYnWDf4aAhZCQioqJkYuRi4uOg3V4io6AfoOAfY58c3JxbWBcXV5cWllhX1JOW1pYV0xISkZJRz9DQUJIP0NEPTs6Nz07Ojs7OTo5OTs6Pzw4OD06ODs2NjY1MTEyMTI1MzQ3NDUzMS4vLCwrKSopKSoqKikoKikrLzNETTIxNjY2NDM8dlI3PTdikYGSiJWRnaSnnq+VpbSprrCuwbK7wcWWkIyUj4CIfG6BkJKJg4qHj4Z1goRslYiIe3V4eGx3bndjal5JUEc9Pzc0NDk7Ojs9PkBCRUhMTExMTlBRUlRVVldYWlhWVVRTUExFPDUqnUtbQC1nSTk0Lz+Sg6muX0dMTU5QTDhETlJTREqEc356enR9a3WGh3t8hIN+i311oZl5foWAhJmEmpxhhqqfnYqDkI56d4h+iYiOc4uXj4R7XWRxdHp8d4ptaGpieW+FkIJ6b4F4dYV6cHR6eGtuaV12hn2HfIeGjn+KkpeDjYWMhn1xhH+EfXZ3e3yJeHF0dWdoYFtcXlNcZ15XUVRYW1VHSkpES0c/RkBEQz5BQT07OTc8Ozs9PDo6OTk7Oz0+Nzk+OTk4NTY1MzI0NDAwNDY0NTU1NC0sKSsoJycnJigoKSkoKCsrKy8wMFVxPTIzMzMxRX5XND05XIx4in+TjJGcnZ6mkaCqoLGor8Cyu8W6lo6Rk4d6hnZrf4uRg32Kg46MeIOAc6CEin19gX9wgX56aHZrUlhMQEUyMTEzNzY2ODg6PD5BRUdGR0pLTU9RUlNUVVdWVlZUU1BNRkA6Mj0gI5ZjjFs1MzExaT9Hb0lGSUxNT1FMS1RcWFJLZ4GHeoh4enB7jop5e4iGfpaHdqGZh4aOkpSljaypSIausK6LgYCUi4KLgoSSqYeAmJiKnHRtfIGGh36OaGdoeX9uhYeChXGEhkhsgHdyeXZobWtfdn2DiH+HhYt5lJybiYuIkX96dYp2fHhtb3d+gXV1c21cXl5cY2RYZ2ZcVVBQV1lQRExLRk9JQ0ZDQ0FAQ0E9OTc4Ojo6Ozs6ODg4Ojo/PjY7Pjc1ODU3NzMzNDQyMzY2NTY3Nzg7REZMTU1MQzcrIiUnKykrKywvMDArbnUyMjQyMEyBXDU9PF6EdHx9iYWHkI6Vl5KWoJ2soKa4r7O9s5eNkouYi310cH6Jkn59jIOSlH2Gfoakh4h/goiFeIeJfnOEeF9jV0tCNjAuLzIzMTI0NjY4Oj0+P0JFR0hKTU5RU1RVVFRWVVNRT0dDPzgwLCOHWz8/ODQuXZZwc6NVRklLTU1QV2BYb1lbXWiLkYWTf4KAg5CRfYWIkICZlIGgoZiUm5qmrZOZu7Gnu8fDqIuMoaWOk4mBkXxxg56fkZ1/d4WFi5CHkGlocISBdIyHhIpyhoJ3iIB7doR8bXV1Zn+UjoaIiIeIh6CqopaJjpd/eoGIenlvZ2t4fnyAdWxlXltbXmpeYmdgWk9MTlhSUUlQSkROR0NKRENBRERCPDo4Nz08Ojw6ODg3Nzg6PT04PD02ODY1NjYyMzQ0NDU3Njg2NzxCQj88ODo+Q1FeZVxHMicmLCwtLS4xKD+LWy4zMTBPg180PztudXBmd4J6f4x/gZCOipqbpJ2hrKaqrrCXkZGEoZSEeHd/jJR8fpKGkpV/ioCSm46DgIGMioKJjYN/in9scGpdQkA0LS0vLy4uMDIyMzQ3Nzg7PT9CREhJTlFSVFJTU1RSUE9IREI8ODcvOUM+PDw2My5sk5dNUEhJTExLTlZgY39mZmx0mpiNmJGRiYyNmIeSj52LoJ+Ro6qlo6uTqbaiqMHCrceveLqUmnyNoZ6ZhJOFgo6hn5SZkYWKhY+ZkZZscHWKjIKVjI2Od4+EcW2FgYqWkYKFiHGIoJaGkYmNj5aktKibjJSig4eSg31/a2pqfIGCg3VjX2VgW2hsXmxsXldLSE5SUU1MTEZJUENETkZCQ0VGQz06OTY9PDo7Ojk4Nzc2Nzs6Nj06Nzg1NDU2MzQ0NTY2NjY4NTU2MzEwLiosLCkoKS46UGFcQCwoLSsrMCwncog3MjQwT4RiM0A8dW5nWW+Cb3WGcXaShn6XlpqUnp6cp6CplpOYnmdlpJp+hJKReX+SiJGSfYqEmJKQgoCAi4yJhpCHhImFeHh+Z01SPi8uLiwvLi0vMDAwMjEyNDY3Oz9DRU5PUlRQUFFTUU5QSUVEPjs8OkRGPz48NzUyPD9SNUhISExMTU5SXm6Ke3KAfJ2amqWkoJiflqGUnJ6nnaiqn6isqaq1l6u/q7bHyLfI0M++m6Bwaaupn4STkoWcoJqbmaaSkYiVopubeHp+lJiTopKXl4GUnnt3lZKqsoiMl598lJ2bjZGVmKOhpbWvnJCYp4eWj42AiGxzc32BfnNqYV5iYGJoZGBoZ1xSRUpLUE9JSUxGRk1DSExGRkNCR0RBOjg1PDw4OTk5NzU2NTg+NzU9ODQ3NDU3NTQ1MzY5NTg6NjE2ODYzLzAuLSosLy4tJyMqO1hiQigqLDEtKEuXXjA2M1GFZjJBQGlhXlBwdGBtfWF3jn17lI6Oip+Sl56Wm6qYnqpCRH2HiYeYjXiCjYqOjHyKho+QjoGCgImLioWShYOGiYGAh3deYlA0NjAtMS8sLjAvLi8uLjAwMTU+QUFNUVJTUVJTVVJOU0xFRUA8Pj1GR0BBQDg2NjI8OTtGSEdJSk5PUVlthY92lImgpKeyvLejraurpqizq6+1sbGtu7GzvZuyw6u6ycu3w7+4paKws6ytqqOLlpiEpaago5eBppmNoquopYiFlKShoKuhpKiPnLGLlaOmt7qboKKvkqGdop2Po6GrrquytKGUpKmImYiSiZV5en6GgGliaV1mY19lZF5nZ19bT0NJSFNORkhMRkpHRkZIQUtGQ0ZGQTs4Nz08ODg6OTc0NjU4PDU0PDc2OjQ0NjQ0NzM5PDM4PDIwMjU1MS8xLi0qKi8sLSooKiYlNVhYLywwLCwwhIE4NzFQhWg1QUNbWFRMaGJXaW5YeoR2gZOFiIKbg5KRjJLayJ2Wc1aXiI+InI98hoyOiop6h4KHkI6DhIGLhYaIkoaChYmHiIeHcW5hQEU2NDwyLzExMC0sKy0wLi00P0NBTVVQUlNVVVZVTltQR0dEPD4+RkhDRUE3Ozw1Qzs9RktJR0hRT1BXgJKfg6yisamwv8bCqbLFtauyv7K3vbW/tMG2u7qjuMWotcjHtb25tKijtK2wsZuZkpqfiKevq6WUdp+kl6GssrSZlqquqK62u7K6rLC1orGssbW7trSutJ+mp6OnmqmvrLG4t7immrWojKSOkJKfhniBhXdbY2VXZ2NiZGFhZ2BbVEpERExVUUhJSkRJR0VBQEBLREJNRz04Njc7PDk3Ojk4NjU1NTcxMTw4ODk1NDY2NDk3Pj0zODkxLjAxMjExMzAsKiwuLCsrKyooJyopRVowMCovK2iSTzYwUodqNkFGV1FKTFtZUWJiV3l1cIGUfYSGk3WFf4CMe7+7o7yCtJSTjZuPhIiPkomIeYaAjJKMh4SBjn+BiY+Gf4aIhoqHkHp4bl1WQEVOPDY6NDVBQjc2NC8vNkNIQlFbT1FVV1VcV1BfVUlLSkE/PkdLRkZEOz5AN0Q3P0JKSkVGVlRQXo6jrKKxs8G0tsDLyLW7xL2ys7+2t8G0v7C3dLGzprrEpLDGubCysbSopLW2qrGgopebopKlsK6mraunpJigrLS7oqiyurW8v8y/xcW9vbPBt7q3vra6t7msq7ClsKmtvbC8usHBq5i5p5StjpeXqYh+g35sWGRiWWxma2ZYXGNZVlNJR0ZMUUdDSElBSEQ+P0JCTEBATUQ5OTY2OTo/Njo5OTY2MjQ2LzE5NTk5MzY0NjI3Oz0/NjoxLi81ODo5NjUwKigsLS0tLCwqKCgrKyhFUy8qMDBKj2s1MlCHbTY/RlJMQUxRVlNZVVp2am9+joOAjoRuenN4h2K5oZmjiZSUlpKUk42PlpGHhnuGgY2VioCEgYp6fIqHhn2KgoGLg5V9d3p1ZVBcZEdFSztRY2FbXlNGPztIUEVaY1FSWVhaZ1lUYF9MU1BFQT9JSkhFRUFARDxFNkI+SEdKTFNZVF2Trre0ubfIvri8ycy6u8C7t7W7ura9s7mxxWB1saSxmp6qvamlqKuqpKKytaCrqJ+Vlp+ZoK6lp6aln6OTo6extKiys722wb7TycnTxsPFzMLKw8C+vb67vLe0r7i3tsO5xb3Cx6+euKmhq42kp7WIgYFzYWNjX1ljYGpnU1hgVlJVSUVFTktAPkdEPUtBPUJAPUY+O0hANzk2Mzc5PjQ4OTo1NzA0NS8yNjM4OTM3NDQyNj84QD5HS1JUU1FQT1FRUEpBOS8sLCwqKygoLC0sL1A+KC40OIB9PDJLiHE5PkNLRUBJTVBSS1FdZ2xrcI+NhY9zbHJyc4fVwLWZoI2VmJmRjpeRlpaOhod9hoOMlop+g3+CeHuKg4d7i3mBioKXfnR9emtmcHVZXVxQZWRiYGVkXVtYV1xNZG1VUm1tX25fWGdkVFlVSkRCS0tJRkhISEhCSTpEP0hLU1RVXFpbk7i/uL22xb+6uMnKura5tbe5sre0s661tphkdaecrXBeoqycmKCim6SeqqWUn5+Qk46WmZion6agnpqZg6SerKWqsK24sL251NHP19DKzNLMz87Kxr++wsq9wbzBwMTExcq+x82yo7qwtK6aq7i6mIB7bV9hXVpfYlpkY1FbYFNQS0NBRUZFPEBFPkFIQkBDPTpFPj1KPzQ3NTM1Oz00Njg5NzcwMjIvMjQxNjk3NzU1NTVEM0VMTT41MS8wMDY6NDc3QElPSTstJioqKC0uLyxATSsvNTRtiUkwSIl0Pz5CREBDREZLT0RRW1loX2+WkpCUbmxvdHWHs6ugoZ+LmZyZjIyVkZqRhYqKfoiGjJCLiHyBg3N7ioKFe4l0goqGlX9ze3lsbXV7aHJlaWxpZ2pqaWBmaWlsWm1zlq2kvIiGZ1tvZ11ZWlRIS05QSktQS1NRSUxBSkZKT19eYWZpYZe2xrC4srq8tLDExrWvuLCwu6uysaaqt6uMtaedmqeaTpmdjI6flpGmmKWVipOTiZCJj5GRnZuhl5qVloeemqebrK+osKi0tNTU1NbTzNDT1c3Sz8zFwsnQvsnJysnRx8zNws/Rt6/DvMO5pLW5waKDcGVeX19aYVhaZ1pRXVhPUEJCSEVCSDtBQz5BRz8/QTc7RD5ASD00NjY1NTs6Njg3NjU0LzEwMTQ2Mjc4ODc1MzY3QzVCOD8tMC0xMzQ5PTk3LC4sMTtGSz0pLCguMDAwN0s/LTQ2VIhXMESHd0M7Qj5FQkFDSk0/VVlSZVZzkJCYgmdxb3l5g6CpnqaXjJqbl4uNlZGajn2Ji4SNioqKkId8hIJwf4eBhnuHcoOSi459cXh1bHF4fnF6bnhzbWmBcG1jaW1weGl3fH7Lv8Hfp21jeG5jW2JgSlBSVU5ZXk9dXE5QTlRQVFRcbm12gnGWrbers6avtamsu7+wqrSmpLimq66gq7SjjrCtmpeYjJGTkYSOm4GNppGciYOLhIqJhIuElJWYl5SbkZyXmZqfn6uspaiirK3P0tXSzszT1NTP1NHOx8PU0cfN0tPT18zR0cTS1sXBzsfHwqi9t86efHBnX2RfV2FTX1tQUVRRT0g+QEZBQkU8QEE+RUQ+Pz86PT08PEpBNDU0NjU8ODg4NjY0NDEyLzAzNTI2NzY4NTMzOz08RT1AMTErLzI0OT41OTAxMDIyLTJETjMpLzMuMzI9TjIzOEN9XzJBhnREOj09ST5AQ0ZIPFVRTU5adYaFindsd3B9fn+hnp6hjIyYk5OLjJKPlYV5hY+QjYqKiJCGfoJ7cn6AgYd6hHWFk5CIf292cmtzfXt3e3OBeHJrgHNyaW9xenlxer7Lmn6LsYR2coR2aGFrXUNaWltWZWNYZGpTWFxdYGNdY3d6fYuBmKmkpKGfoKelqq+4qqWzoqGtoaOtoaexn4immpOSkYmSj4iBk4lqlKKMmYSBhn6Rg4OTl62LlY2VmY6GkpGel6iwoqGhpaSpyc3PyMLM0dTS1NLO083G1tLM1NjW1tjU19XJ1NrNydfX0cqsw8LLjXVwZWJhWVVaVFxRS0dKSkpAOzo7REFEPEJDPkdCPkJCOzw5PDpHQjQ2NTQ0PDU2ODc1NDMyNTAvMjU0Njc0NTU0NDw+PUU/QTYyLy0xNjs9MDgxLzI1NC8tLTtSMDE3LzUzMkZEMjg+bmI1PYF0TTk5QEk8QUQ/QTtPTEZKWHCAdX1oc3hygomAnJSdlIWLlYmOiYiNho5/eIOTmIqMh4iLiH6Cd3N7fYKHd396hpGVf4Nud3BtdX91eH10hXx5bId2dG59doR0eHudtYw7QIvFpX6MfGllV0lDZmNlY2dqY213W15maGtuaG6AgoeRi5ydoJ2Ql5ieo6OlsaOksp+hpZ2gqKCjsZyFnpKRkY+LjouGg4+Ef5ybjI2ChIV5lH+CqZWjjJGJl5KLfpiLmpKrs5ibnKicp77Dxrm2xs7S0dLQzNLLyNTO0NXa19fY1NnYzdjbzsnZ2tHVvsrLtXp5cGZfW1NXUlxXRkdKSUVFPTo3OkBAQjpGRD9EQ0FEQjs/Ozs3REM3NTY1NTswNjg5NDQzMzQxMDE0NTU4NzQ0NDQ5QD5EQkM8MzMuNkZUV09RSkFKRj8xKiguQlMzOTI1NC83Szc1PGBiQTxzdlY4N0FIOj9DPjw5UUVDSlRrbm5wYnBxdIaNfJeQnYt+h5KDiYaEiYGHfHiFlpaIjoOHhYZ6hHhxenuDhnV5hY6NnHmLcHxvb3p/cXuAcYOHgG6OenV3fXyCdH58hoevc1iqwraNkYJwbWI9XmhycHFwbnh2gWVob3J1eHF6i4aNk5GalZ+Vh4yTmqCanqmfoayboZqYn6Wen6uZi5qLkJGNhX2Ih4OFi46gmZOIg4d+bJl6hJiGiJOMjZSMhnyciZSPrqqUlpifmaevtr2prb7HzMnJzMvQycPSytTX2dfY19Xb19PZ29XQ2trR1sjUy5Z7fWpqXVxRVFRgSUNGSUg+QT49Nzo9Pzs9Rz0/QUFBREE+Pjo4N0RCNzU1NDc5LjU1NjQzNTUzMjMyMzY0NzU1MzQ1OEVCRENFQjU2PEZOU01bbmZjbnNrYVY+LDRMRzg2NTQzNEJGND1XX2hMdXheODs/Rjw8Qjw5OUQ+Q0dSal5tZGJma3aAiHGRkJqAeoCNfoKCgYN+g3t8hJiNh4t+hYaAdoJ5bnt7hoF0eZKejqB2jnWCc3WBfXOAhG+BkIJvkoR1fIGFenaGe4m3xaTBybiBlpuPd3BlTmZjgXqBd4aikIp4eXZ7g397hHZtk5aTlI6XkYOJj5aalpalnJeflp6SkZeinZmrlZCQioyRgoyFiIiBhpCRnpuZiIaMgYWXeoiJn5eQiI2Ki4J9oYmRi7yhmJOYmZ2ppqaun6i2v8DBucfKzs7FzcnR1tXV2dXX29TX2drb19va2djO28aIfXtpa2dhVVlWV05MRU5DOz09PDg6Oz05PUA2PT9APD89PDk4NjdDQTY0NTU9ODA2NjU1NDc3NDU2MTM4NTQ1NjQ1NTdISD1ESkU3OTI1O0g+Ozo6N0lQXVpSVVhLOVQ+Ozk1MzI3STg9TllNSHh4ZDU9PkM9PUA6Njo+PkBFUV9YZWFdW2h0enlsio2Sd3Z6int+gH5/fIR6fYKRiYSFeoSHenV9dG18fYZ+dH+SnpGeg5F7hn54j354iopugpqAdJmGfoGJhHt+kHqPqY6Pw6G9i5yknH2JhH2JcouKfnOmmpyYk4V7jpCIhGhHcaCknYuLkJKFiIqQk5SOnJmSlJCWjYyVn5yUoJSRjY2Pi36Qjo6LhImSlpqen4mMlJKdkYKLgKWZiISNgoWEgaSHi4u4mJ2RlZaiqKGenp2kr7e6tazAxsrQyMfMz9PT0tjT1dfA19jZ29ja2tnZ19u5e3t6bmtoWWJdVFBPSURMQjw8Pjk5Ojo5OTs9Nj8+Pjw9OTo7OzM3RD83Mzc4PjcwNjg4MzU3PDM3ODA0OTc2NzU1NTQ2RlA1RE5JODkzOEFLPTszQ0BJPDlEV048TVRITj85NjMzMz5DO1tYPjVZeXBaPDxBPD0+ODY4OT89Q1FTUlheVVhmbW1taYGOinFyeYp7en98f3uHenx7i4aCfXSDhXlyenNtgH6EfneFm6KbnZSSf4yIf5iHgJuSboeohXqgi3yRjYOIhJx9mpCKjKOioJCkr5+LkIuFi4GThldyrYufq5uPg5ibj4+OXIKikYKMn5OVjIeIjJKSi5SUk46Lj4qHlpqcj5SWkIqRk4aAi4iSjYqKnJaYoqKGk52WoIqJiI2bkIOIjoCDh4WkhoyQs5idkpSXoaGemZKcnqiyuK2mvcLHzcjGz83QzM/X0dHVrtbV2NrY2trX1dnZoHJ/d2poX15ZVVlZQ0FJQz8+Pjo0OTo7Nzo7OjM7Oz89Pjc7OTowOkc9OjM3PUA1MDY3NzI1NT82NTs1NTg1ODo1NzczNUhSN0dPSzk5ND1FSkI+MUZDTEI5ODpHWEA1SFdJNjYyMjM6RUNlWD8mX3lpX3o+Pjk8Ozk4OjtAO0JRS0tTWVBUY2J6bWF+koNvbXeLeHl/eoF8hXt7doWEf3NwhYF6dXZ2dISChH5/kqakn6Wil4qdkJSXi4qol3KKsY2Ep5KEmZOFmYyilZ+Yk4ianqOSqbCfkJSQjY6IloxujbeFmsTIspuhpZucmJaQspFkpM3HlY+Gh4iQko2NkpOJhYqJhZaZmo+PlJOGlJeDf4+LmYiNkKqWl6OjiJmelpqIjoaWl4mEjoyBf4ePpImOlKial5OXmaGZn5mTnZujs7Smo7zBvsfFxcnIycLL083N1KnS0dbW1tja1NLazoR1gmtmYGBfUEtWXEJCR0M7QT04Mzc7PDo4PTY0OTo8OjgyPzk5MjlJOj42N0JDMzI6OTYyNjQ+PTQ7PjY5NDk7NTc5NDRKUTxKUUs5QTdCR0lANjRKRUxGPjw4OEVUQTc+XDg2MjE0OjtFYFhBRmF0aExjWj41Ozo6NTs6PTpFTUZIUldTUkJlg0d1go58fG1+iHh6fnqBgYJ+dnaAgntsb4p+eXx3eHyEhop+i6O0qKSqs6GWp6ClpJaVr6KDkLiVkrOajaGgjKSbr6KknZiQp5epma2wpJeUlZSQi5ialqDAjqPJuKuaoqWtmZGbnLKdhoWoopyYhYiIjpSMipOPh4CGh4iTmJSMipOThpSYhoSRkJx0kZiylZakoYicmZOPipCKlpqJipaNhn2MmJ+KkJCcmpmTmZiglKGdlZ+bobGto6S3vrPFx8S9w8O/xs7KydKnzszT0dDW2NLP2Lx1fHhfYldiWFJJS09FQkNENT46NzY6Pzs8Nz00MjY2OTc3ND01OzU8TDw+OzxCQTc1PDs0Mjc3P0A2P0A3ODQ5ODc7PDU1T01EUFJMOEA9RUFHQTU6SkVORUQ6NkFAQlM+OURPMzIzNTc1PXZcPFJcdGlaTV1TPD04OTU2Nz06SkZER01cXFlKaGE7SISLenpthYZ5fIR4gIWBfXB4fH18b3OMeX2Be3iGi4mGhJKovK2psr2wpa6zs6mjorCsipq1naK4pZWtpJeprbempKOfmamYqqSvsamZmJuUlZGYoJeZu7utyqFptreqsJWYnqOrkpe9pF6qs4KJioyUh5B8jo59g4aOkJSUiIeSlouPlY2LjJeZk5yZtJaVq56LnJSSjZCSi5iaipKdj4uJlaCijZWNl5mdk5yYnpShoJScnaWuqKKks7irwsjEtrq9vMXIyMLQocbJzc3E19bQytOjc31rX1tVYVNRR0Q+PENBQjg/ODc0PkY8PDY8MzUzNTU0NTRCMzk6Qk06QTtBSEI7OkA8NzQ2PEI5P0BCODc0Ojo2Pjw0N1RLQ1VRSjc8OklBREA0QUpITkJBPzZEQTxKTkQvVD0yNTQ6RUpcWEpaUW1ncHBEaWBLSTY3NTc6PkpAQ0lQZkhhYGJwSkCLin6AcoaHfIGJdYKKg35tfXx8fnB3h3eNgYd7jZCMhoyaq8PAsL3GvLO0wby0rKuztoyosq2tvaubu6Oorbm4q6amoqKko6qvsrGqnZyjmJuYmJ6ipaWTo7mvqMC7rK2yuaWjp32IhpytvbCCi4uKkIOPg5GOeoGHkI2OnIiIj5eNipSXlJCal52nmrCakaudjpqPko6VkY+Vl46RoJCIlJukrJSWj5ScnpShnpuYn6CVmp6np6SipLCzpsDGw7Cwu7bFxcO/zafHw8fDvNXQzMTKinZ2ZF9cYl1PTENMQEVHPkE/Qjw6ND5BPT01PTY+MzMzMjQyQTE3QEJOPkdAQ05DQT1DPTs4NkNDNUJJQjo4Nzg7NUI+NzlWS0RXT0Y4PTRLQEM+NEVLSE4+QUE2QkI/QlNFNThQMTQ1Ozw4O0Q+OUxqal07V1JkS2daVU83OUdFP0NGXGhGX2lnW11ck4yMiHuHi4aDjHWGkIqBbn57gX5xfoF6lHqSlJSYkZOVqLTHycDCzMLDuce8uq+rubuXsra6ssCvpcCjq7C8vKquq6Oinqesr7WxqZugqpyinJafsLOnjKK6urXBu6uonLKko6iUhI6pxMSkgouOhoiEhpWUjHqDjJGPkaGMjJSRj4iXoJiTmZWXpaCunIyqnI6Wj5KRlZWNkJSRj6GThpefoLKflJuUoKGZpKCaoJuglJiep6Smp6SvraW/w8KuqLe1ycO+ts6yxL7Du7PRycjBtXd7b15bXmxUTklETUtLSUBBPUJEPDVBRDs6Mz04QjMzMjI2M0EwNUlFTT5JQEhSQEg+Q0A7Pj1GQTVBVUA7OTk4PDdFPjg+VkpDV09HOD80TEBCOzVKS0NMP0I/PEJGPUFITDkrRzwzNjc0NjRBPzdPYU9hRS89PjZrbGpgQDpIPj9FQmdcTWVcZlRjapmNlomLiJKPhol5hpOQgXKAe4x/d4aBgo95jaGWqJqamLu+ycjKwtLJysLNvcGzrby/p7q/vbzEuK3BqayzvL2qsKqkpaOsrrSutrWgn66fpqKZo7S8qZupvMGjtravq5Ovq6qsloaaqqelkYKMkqSViYB1iZF5hY2RkJ6fko+Ui4+MlKOZl5uVlKKeqZ+RpZqMj4+QlZaIfI6VkpKjmpWgopy1ppCgl6Wko6WfnqaYnpWXnKWjqKiisqyou8DEr6Wzt8zAuq7Ds7u9wbmtwsLCv5lwe2NbWV5dTU1OS0dEQ0hCQUFDSzo0REg6OzQ8N0YuMTIzNTJCMjZTSE48SkJKUUVLQ0RFOkVMQjw3RVY9Oz04OT88ST86RVVJQVdRRjdBOks6Qjc5Sk1CSUBDPjxERzxCQ089MjBIMzY2MTcwPUI6PWpqSks1UVMzU3BwZE47RD1ARj5sSV9YYVpkZVeekJ2Ol46ekomKf4ifkoR4hX+Ufn+QiImQgJahmq6no5jDvsnEyMbTzc7Ny7zCt7C6vbS9y7vDwba3vK20wLm8rq+ooamotq6uqbK3mp6soqiinau3t6mlr77Esb24s6eqtLOtrpaVpa2ooJGOkrHFp5WNfZGVfYeRmI+qmZeTk46TlZOlnZOdmZSgoqGcmJ+Yi4yPkJ6IWo+Wl5KWpJlmmaOes6WWopasraynnJ+nl5iWmJaho6imn7Wrqbq7w7SmtLXLwbiqtqyzu7iuqLi6vLeEb3BcWlZXUEdMVE5LP0FIRERIRkY4NUZNOz43PkFLLjMyMDI1QjU1UFdOPExGS1JMT0dHST5JUT86OElTOzs/Nzk+RExCQEhTS0BXUEY6QT9HNkE3O0hNQ0U7Qz00RkU6QkFCRzkvOkEzNjAzPkdEOTQ9dGRNRztFKzpmfGhWPD5AQkZCc0ZpSVJmY01GppSclqGXqJaMkIOHpZKIgYeCm4ODlZCQlI6aop+vvq6hx77GxcjHzs7P0sq+u7axu7u8v8+1xL23ubezsrazuLOsp5yrq7mrqaivr5ejrqWopKW1wbCrrLS+w7nAuLOnuLS3sq+VpK2wr6SLk5SgjXPBmX2XmYSOlpmLsZWamZWSkpmZpaOVn5uWmqicm6GgmYqMj5adYEqWnJqVmaWXVJawn6+cn6WVr6+tppuhppSTmZmOnZ+moZm0qaqzvLy7q7Cyx8C4pqyrrbGxo6GysrSlc3FnXlxQU01GUVFQUTtIS0hGR0FDPTlLVD9BOj1FTS83NTQ0OkIzNE5XTjxKS05VTlFKUEhISk9CPD5NUjs+PTg6PENSPkRIUklCV05JQENBRjM+NThKS0NBPUM7NUVBOkE/PkhANSpCNTIsPmNdZzozNXRkZUBSNyYjM31oWDw6QkNAPVJFV1NzYlZGSKuXmZ+hqK6YkJeHiqeWjYiShZ+HhJyXjp2gmqOktcm0qce8w8TJy8nIzM7Hvrqzr7q4wMHNtci6wbm1urKvr7O0p6ScqrS1q6qnrayZpK6mpamsusCoq7e2vsHAvreyssOwt7yso661rbqliJuXpZp1vp+EmJ2Okpiai66WoZybl5San6CpnqegmZqqmaGnnpeQjZGdg211k6KalJyjn5CtsqKrlamqmKqvpqWhpaqTkpmciZWcop6WsKepqrq3vrOyrr65tqCjp6ilppycrKmpjWZoY2BTTU1HSU9KVUw9TUVNSUpAQ0Q8UVU8QUFCRE8xOD03Nz9CNzVVWE4/SE5RWFJQUVRKUUpKRUFFTVE/Pz04PTtHUjxFRFFCR1lNS0FIREU6OjM5S0lCPkNDOjlDPjxAPjs7RzctMj4tMYJoTnpcLzBraGA8PUJCODZ6Zlc8Oj0uLlNhTVZIfmVeSEaslJyhn7uumJSei5Oqm5GRk4iqjIahnoyjrJSjpLbHvbTCu8PCyMnFws7Iwr25sq+5tcDDyrbGscG8tbusqa2ssKOjmaq0u6aqp6yqnaivqKSrqr68qK28tLe+xry2tbjAsL2/s6m1t6y/pY+il5Chn7yeiZqgmZednY+2n6mcpaOam6Cap6WzoZudpZyoqp2YlI+Um4uWiYykoZScop+gtbClppOxq5qrrZ+fpaSqkpaVoISQnp+clqmkoaG0tbq2rai1srKenKKmmpeVmaqhnnhjX2FfTElGSE5RSU5FRkdCUUpIQERHQVZTREg8QUdRMTtCNzpCRjc5XVlLQUxQVFVTTVdSTlVKREBKSk5POUM/NT08TlFDPz9QP0VaTUpBS0RHQDUzPUlHPz1FQTk3QTs8QDw8M0A8Lyc7KkiRQjpTSjAsW29XNzE8Kh1CgGRUNDktMTpoXUZEQ5xwYkdFqJeknp/DrJuXpJeZqJuVmpqOqpaVqKaVrayZoqu3xcK8v7fBwsDIxL/Nxru+ubKwubS+w8i1v7C8trq3p6Srq62hoZurqsSipaispp6rr6yiqqi+uKatvrC3t8a3tLi4vrG+wLa0srWvvqOWo5WTmpOtn5ChoaSio56QvqSonamsnJygm6afvaKYo56iqaugnZWNlZ6TnoeOhI2TnqSgnbasppyWsqaZsKignKufoY2alZ+EjqGanJKlpJqYq7G1saqlqq2sm5igoZKOkJapn5RpZVxiXlBKSEtPTEhFRElAPU9IQDtGSUhbUk9LPUhOVTRCRjg+SEc1Q2JbS0NOUlVXVlFYVFJVSEA4UVFQTTpHQDRDSFFTSUM7Qz5HVktDQE8+SzwwNjtHRj47RkE1Nj85Oj85OzE1RDAtLTBNdlw0S1o1LE1uVzwtPSkeI3piUTVDS1E5b1JGPEt4ZmNYTqObo5uexaugnqudnK2fkaKelqSfpqqrl7axo6mztsXCvcC2wMK8ycK/ysi2uLW0sbS0t8LGt76xuLS6tqCnrKqrnp6fpaTBpaGqraCkqa2woqaovbWlsbu3trXDsrK3ur6yw8C4uK20tLWjnaSUkZOgrJ+YoZ2oqKqimsKsqJ2srZqanZimoL2hnaSYq6urpqCZjZqfkp6Ijlh/lp+moaC5qqaUmLajnrOioZyxmKCPmpWego+gl5aOoqOVkKWus6upoqKlpJWVnJmLj5KTpJ+JY2dcZWFNSktLT0ZFQUdLPj1JQTk5SkpOXVFRST1MVlw4Rkk9RE1JOEhjXEtDTFBTWVlWV09aXklBPVdRSUs/SEA1SE1YU0hBOkBBRFBIPz5RPks3MDk5RkU7OEc/LjY+Nzg+NzcvMT85MSUxUVVtW0pPMTA9Z1dEMTc9LSt3YVM2U1prV3NIRTY9dWVcTFCfn6CYnsOnpKKzoJyyp5Kpo5+jnq2prJ27samstbHIw8HDs8LDvsfEvcTKvbCxtq6xtbDAxbW6sbC6tq2aqbCpqZuepqGnwq2crbGcqqKusamkp723pra7va+3w62zs8K/ssazurertLatqqKmlZWUoquhn5+Zp6uvr6+7sqWfqamZmJeSoqS4oKGjkq6vq6SlnpGhnpSdjpCNlJ2ao5+otaenjZi0nKOvm6CcsJGhlJiVm4CSopaPjqCgk4umrLClp6KdoJ6SkpqUhYuSjZyfgGRoXWhmS0pMS1NBQ0BIRzs7Rj44OU5NVV9SU0o+T15dPUhQQk1MSThOZF1MRUxSVFlbU1VPXGJIQT9aUUFIQUtCN0ZFTEtOPjtCSEROQj07TkBBMy85N0NCOTdGOys2PDQ2PDM1LS80QDErJ1Z0U2VPPzEwNGJbTTIzPjA8d11eP1tVX2dyQDg8SJZ3ZUE0n6Sem6DCp6OpsaCjtKmVsaumoqSyrK2pu7KtsLW0xr/ExLa/xL7KxbbAycK1rLWpsLmswMS0t6+ttrqlmauyrKqYoaeYrbu0nKiwm62frrSxp6q6s6e5s7iyuMCqt7LDvbTFp76urbe1qaeroJaWkaWkoaGXl6Sut62xtLafn6mkmZOUk6Ogt6OkpZWusbKlqaWhnpuZmpWXqJ+emaKfr7Oipo2Yr5qlq5ebn6eTnY+VmZqGlqCVjJCdnpSLqamqoqehmZ6WjI+ZkIGGlYiVn3plal1sa05RTk5UPUNBTkM7Okk/NzdRTl1fUlZRQVdgXEJKU0hWS0g6VGRdTkZPTltXW1JQUVhdR0FCW1BCRz5OQzlIR0hOUD8/Q0lCTEI8MklBOTQxNzdCPjs3RTcrNjkxNDgwMi0vLjw2LSNCcWdzazIzLzFcY1ozMzkwNnBbYkgwNUpxaVZDV0aMeWZDO6SknKClv6aorq6gqbWqnbevq6OqtLaxsLi3sLe4t8S9w8e9vMPCx8G6wcbBuqq2pa27rcHDt7eqrbK8o5Wtsa2yl6aokaq5qqGnsJ2roK+0s6qqt7Wsu6yzsrm3rLiwwbq9v6bDqrC2rqmrq6admJiqoaGgkZegsK+zq7C5mZupn5mWkpemoLeppaKir7Gzq7Gnq6CcoJ+bnqWdoZido7Swm5+RlKaaoamblqOhmJqLlpmUlpedlImSm5mUjqmpp6CjnJibk4ePmYt+jJeGj5tsaW1ibm5YUVFaVEFDRFRAOztIQDc6WFBkXlBXV0RZXl5OTFNOX0xKPlpkXk5JUU5bVVlQS1NXWkk/RFhQREY+Tj89SUdHUVBCPUNGQk0/OjJEPzc3NTQ3Pz05NUU0Kzc1LzI1MS4tLiwxPionKz1ccD0+MS4xZVtkQDE3NDdnWWFGKEA4bH1oXFY6iXtjQz2on5yhqLygqa+qorG3qKS0saqhrbW9r7O4vLu9t7bAwr/JxLnEw8DAucW9wbivtqirt7K8v7+0qq6yuJ+XrK2orpioqY6nu5+lrbOeq6KxsLOsqraztbytsLG1rLC0ssC6xbarvK+xt6ytqaOxpZ6kqJ6jlo+Yn7Kqs6mqs5mdp5ualI2gpqS0rqehrKytsaeyq7Gpo5ueqKSelKCZnKi2qZeak5KfmZ6hn5KtoJqah5eZjJ2anZSLj5eXmpenpqOgnpaWlpSBkJWFe4+Tg4yXZ21yaHFzYEdZZlZEQ01YRFo5SEI1Pl1RaFxOWl1HW15dT01TWGRKS0NcY2BQTE1OWFdYUEpWVldMPUVVSkVEQU0/QUZISFFQQTtGREZLPTg3Qj02ODcxOT48NjVEMCs4MC8wNS8qLC8tKj0sKyUyKyo1SzEuJ19fYVYxNTE9YFZfOClDM1lVXGdLNYx6ZkxApJqgpKu2o6uopK6ttamus7imp7C3xrawt7/Bwra0usW+zMW5w8G6wLrEuMG6s7Wsqrq4u7q+tauvsbaZmKirq6ycrquPq76eq6+xo6qfsa2zrq62sbi2qq2usae1sLO6vMmyqrW0sLSwrqags6CaqKygpJWVmpmxoq2gpa+WoqSamZKMoqWnsqmhprGsqrWkrrC0r6OZna2nm5eempmsuKKXk5GPmJyhmZiVrqGfloKVmY6enJqXkYuUk56ZpaOjoZmXk5KWe4yRhXuNi4OMk2xueW92fWJGYGpaSUhaWz17SkdFNkFiVWlbTVxhSlxcWlJTU2JhTEtFYGFgUE1JUFdWVU9HV1ZVTjpJVklIP0NLP0VESEhRTkE/SEhIRTw3PT46NzU2MDk/ODY2QiwtOCwvMDQsKCwvLSo3NikoOS4kOks1LiJUYFZhLjUoQ15RXC4rQS9KR1BbRzNjWFRLRZqWoLCnsamspKOurbSot7O3o6y0t8m6tLu7wL60s7fDwMzHu8S9t7/AwLjAvbK9rqi6ubi3wresrrG5lZenr6yopLOplK+7pKyysqano7K0sLKxtLC3sqmuq7KmuK+1s8TFtqm1tauwramnoraen6awoKOUm5mUsJ6nm5+pjaminZuVl6WlpLenorCzq6exp62vtaykmaCsqJycnZyUqrmclY+PjJido5iRmKikoJiFk5eRnZyYl5aIl4+Xm6idpaGSlpKQlneEkYZ8hoKEjY1ucXh2fIBcTGVsXEpPZF0/YntHSThHZ1dmW0xeYkxZWVdVWFVpXU9QSGFeX1BKSFFWVVJLSFdVVk04TVpORUBGSz9IQkNLU00/P0xPSEA7Oj47NjswNDE8PTQ1OD8pMDcpMS4yKSksLC0rLTkkMDQyJTlCNy4jQU5IZzI3J0ZhTFYlLUIuPUVMUTwzcmtMRESRmaSto6ytqqajsLKyqrewtZ+rtbnJuK7BvMO3s7G1wsPPxMDCvrW+wcC7v7y0xKiqubG2t8C8r6y0tJ6hp7GupaaxpZ6ytayqsrGrqKi0uqy0srSrs6yqq6isqbmtsrDHv7ikubCpra2mp62wpaSjrqOom52bmq+ZoqKio5Csn6Ogn6GppqW4pKu0tKSqq6isrrauop2jqKucoJmbkqS1mo+JjoiRo6GWj5afopaVhpCVlJ6bmZaVh5iSlZmnnKCgjZOSjpF4fo6EfX19h4qKcnRzf35+XFNjbl5OWmddRkSWW0c6Tm1YYlpNYWJOVlZWV1VZaF5RU01jWltUS0dPVFNOR0lWU1xOO1BeSkJESEpBRT8/S1NPPjpOTUM8PD45OjU9KzMyPTYyNDk6KDQ1KS8sMSgpKywtKiY1Ki8mMCkzODoxJiozRGQ7NipIZEhKKzpJPzNDSVMsPo9rP0hJkJupqaGpr6Sno7OzsLS0sLCgq629zLquwbzHsbSts8HD0cTGv8GyvsPCvL+4vcWorbestLi8wLGssq2ho6euqqilsaOqsKquq7Gurqyrs7qmt7CyqbKpqqalo626rKqwwrm0rLmoqKitqaexpamkoq6qqKGem6OslaWdmJ6Zq52hp6ihrKajray2sLGgqaKfqq2wq52ep6epmqOYmZCgqJiGg4+Li5+gkIyOl56SkYiIkpahnZaZloaXk5SXpZyenYySkI6Kf3+IhH13gIeFh3V0col3bF9ZYG5jUXNxXEs7hHtGP1d1WGBZT2NcTVVWVVdRXGJfU09PaFlXVktHTE5SSEVJVlJdYzxQXUQ8RkhIQkc/PUpQTDo+T0o9OT89Mjo3OyozNT4xMDQ4NSg1LyosLjMwOyksLCclMjM0JCwyLTg2MCkoMTxeSzAuSWdERjg8QjA1RUtYMUCUXUBORpWWrKegqbGbqKiwtay4ta2ppKuqvcm8sb64w6+wrLPDxM7Ow7/AtMDExLrBtcnErK+3rrO6wL60rq6spqipsammqbKmtK2qr62tsa6yrbO6pLizrKytp6ugo56wt6uqrbm2pLW1o6mnrKyqraCopqexsaSmpaGhq5aqoZOboKWeo6Oqo6yinqaxtqysoqWjmqmrramdoaWkpJmgmZaPmJ2TgYKQiYWdoI2LkI2bkJKNhY6ZpZuTkZuMk5KSlKOanJqLj4uMfIeBgoJ7dYGEgX51d4ujh3hqXmBuZldmh2ROQGeSTERieldiWFJlVU1WVlVUT1xdYVZMT2pXVlZJSkhJT0JHSVNRWW9BTVhAOkpHRkVHPj5FUUg4Q0tFODdDNzI6OjoqNDk/Li80NjMpNCsqLCsuIzQuLSsmKCs3OSomNis8LTIsJjA2WFouMEpnQUE8PEMrOkpPXjREhkJJSUSWka+koqmvmKmorbWqtbCqpKuqqbzAwLm5tLy1prKvw8nL0b/Bu7nAwMK6wbrCxK6xtbK0vMG+s7Guraysp7eqpa2wq7iuqLCvrrGrtaq2taa0t6yspKmqnKSes7OoqKSztJ+1raGpqKuoq6efq6uoubapqqqpoamfrZuRqqGdoKOjpqKqnpymtK6npamipJekpqeqnKKko6CZmJ+Rjo+ZjX6HjIeFnp6JhYyLkI+SjoWIlqOajo2bkZKQj5KfmJmXjYuEgHSHgX9+eHWDgHp4fn+InY9wcWZncXhcYXSIak9dmFZIbXlVZFZSYk9MVVVVUU9YW2JWSVFqVFZUR1BZVUk+SUhPUVB4TU5WPTxLRD9AQTxAQ1VDOUFLPTU7RTEzOzk3KjQ6PSstMzQxKjgqKisqLCkqKC8qJiklMzssJDIpMjAyMSUvMlJjMDI/Zj1OWD9DLD9MVF8vSWs3UkY7lY2voKWprJmqo6yusrSvqqSvqai7v7zCsq+5raK2r8jHyNHAv726vMO9u8PBv7+vsbOytr28wbKytKu0qaW2qaWts7K4r6KttbGvsbmquK6qrrerqp6qq6CjobWtqaGfrrKhtKqeqKero6qhoaytqL2uq66toaenn6uZj7CimKKgqKeep5uYqbCpop+soaGSoaKjp5iaqKWYmJicj4uHlYh8jYaEhaSWhoODjIeQkJKFh5WhlomRnpGTkI2RnJWYj4uGhnh0gX99dHh5gHt0dHtqgoikdmleZWyBdWeIi3xSVnBeSnhzVGRTUV9NTVNaZk5NV1llWUdTalJRPkJOUWFROklITFNJcVFMUzs8ST87PD07QEBXPDw+SDczQ0IxNTo5My01OjopLTMxLS02KSgrLSw1MiMyKScsJS47LiYxLjAtMTQlLDBNaDozOF89YWQ/RjFDUFtbK0hQO1lDM4+OsKCkpaqipaOsprSzsaiksKequL7BvbCouaqnrbDJxsjQwr2/vbm/v73JvMK4sbC1sbq8ucCztLytuayjtaanrLG2uLKmp7m1rbS8r7ulra21q62cqa+kn6SsqqicnaqypLOomqqnqqSpnaKpp6m9q7Owrp2po6Cum5qzopalm6Wkn6WamaiqpZ6aqaCbkZqgpJ2Zl6mpkZmakpCLgo+FfY+DgIiej4eAfoyIkpCRhYKUm5SGk6KNlJGLkZuTloeKf4Byenl+fGh2fHt1cHJ+aoZ6hYhkX2hjcoV7bWd5XV5WQld7bVRhUFJZS0xOcHRdSVpbaFlGVmdPQz5LTkRDQTlIR0tTP2phSVE4PUg8PDw+Ojw/VDY6P0M0NUg+Mjs1OTAyNzw1KC41Ly0xMSYvPktJMSUaOTAlLCwwOS8sLCs2JzE3Iy0vR2pJMTRYPWZiQUo3R1NgVSo9PEZcQCqOkrCZn5+ppKKhq6S2srGkqbCmrbnCvbewpLmsqaiwwsjJzMG3vb+1uMG6yLXDtbSztbK9ubq9tq65tr+torOmqquutLe0qZy5u6ixvrK6oK60tqmrnq2xo5ylqKmjnZuksKavoZ+qqaeiqpyjqKCtvKeusa6hqqKjrp6erKaYn5qhopufm5mjqqKamqOjlZaTn6GWnJamrIufkY+RjIKLgICPgXualIyJfX+Mh5GQjYqGk5iRh5SjipKRh5CZkJSBiH16bH12eXhienpycHBzeGqCdWuCZ2NnYW5zjm1iam9fcEFdeWtWXk5RUUtJTVNZVk1cXmxXRVhhT15QSE1ERjs3SEVLTzxyaEpLOUFFOzs9PTs7PUo0OUI8MztHPDQ/MTgtNzg7MigwOS8sNS4uPS0qTD4qHTQ5JicuMzQuMCsvNCYsOiQ0MEFoWjEzUz1lX0RMNktWZE4pPTNSXT4jkZarmJ+Xp6Khn6ejt6+toq+vqKu4wrqzraC5r6uns7rHyse/t8K9r7S+t8S2wrKwubGywLa7vbequbi+qqS1p6iqr624sKiYuLyjrb60tKGtt7Wmpqiws6CepaWnoaSZnqynqJ6gqq+noKaXoqifsLifo7GvoauhrKScpqaompubn6KVnJuanammlpueqJGYkpidk5mWoaqQmomNkId9h3+Cjnx8oYyMiXqEjYWLjo2FiZOajomVn4mQlYKMl42RfIV8dHB8cXN0YHh4aW9wcXBrf3NkemxoZWRhZoeAYFtyanJNToBpWFpNUUxLSFBSUEdNW19vVEVZWlJnT0hLRUY1NkhCTEk1WmVKQDZFQjk6Pj0+OjpDNTk+OjNARjwyQDIzLzo7ODMmMjwwLDg1QiopLUMqLDQ7Tk5AOzczLS4rLTcqKjwlNTM9ZmQyNE0/ZV1GTz1SWmdIKj8wXVs1KJWbpZiclayfnqGkobersKO0s6mpusS3sq6huK2tq6+1xcfAt7/BubC0vbe/u76wrL6ws7+xvMK4qbu6uKeotainq6+rsq+kmLu2pKu6ta+esbivqaWnr7KcoaSgpKOglpuvpqGfoqivoaCik6Okorawoaaxq5+so66XnKqlqJ+Ymp2jk5qbmp2lqpqbm6WUlJeVnI6Tl6KooZCJio+GeoN+hIt5j5eKjYd6goiEiY2PhY+TmIyOlpmLj5Z+hpeMj3qBe3Bydm5vc194d2RsbGxqaoVvZnJpa2ZoXmRzgWBba3ZpWkp/XlxYT09LSEhSVUczOV1ebFBFWVVZZU1JSUVFMDdGP0tCNklKSDs2Rjk0OT49PDk4QDg7ODo3QEk+ODw0LTM8PDc1KDU+MSw7QTEoKzY8IjhSPSoxMTM+RDUsLSc0Mio7KzEzOWNtNzRHQWZbSFREVV1oRC48MmRXLDKUoaGXlJuqnKOhoqG3qq2gu7elrL3FtLGvo7WvrKyutMPDvLO/urexs7m4ure6r67As7S5r7/At6y9urWmorKpp6mxqq2xoJm/taSntLWonrK8qailqbCsmaKnnKSllJegsqSZnqOoqZyin5KkoKS4qaSnrqaepaGokp+poqGhmZudn5GZm5afoaqbmpihlJGUlpmNlJOkqKSQiYmOhnmEe4SGfZ2NiYqHeoGEh4iKkoWWk5OLkJaUjo2Ue4OYj4t3fnxsdHJsbHNhd3RoaGpnZ3CHaGhpY2ZpaWBqY2poW2Z7Y2BTdFRcW1JMSkZJT1NAISpoXmlMRFdVXmBLSUhFQy46QjxGPDZLUEQ4OkQzNTc9PTg5NT86OzQ+OEBLPT45Myk4Pjw6OSo2QDMuRTQoKyw/MC1OPy4rLTcsMTE5NSwmLjUtODA1NzZgdEEzQ0RnW0tXR1VgaEIzNzlnUCcynqKjkI2kppqdnp2jtK2nqrq2p6zEwbexrKO2rqetrrbAv7yywrawrrK2tbi2tq2qvbOusrG8v7euvLuxpZ+2qqWls6eprZ2cwKunpK+yqay1u56oqquxpZieqp2mpJGYpayimJ6kqaGcopuWn52ntaawqq6hoZ2eoZSgpp+hoJqbmZuSmJ2TpZ2soZeWnZOTjZWXi4+Ym6ifkYiJi4h4hXaBgoGdh4qCin1/hYiHhpGElpSQjo+RkZGMk3uDlY+Gc35+Znlva2prZnRza2NnZGR2gWJlZmZmampja3JbX1lebWRhTmlYWmBWSkdIS01SWD45X2xoSENVVF1bSUlHRkEuPD85QTg5UkZANzpCMDM3PTc2OTI6PDk3OjlETT1CPDAqPEA7QT0tNUIzNz0rKiwwQipKSy4vKiszNzIyKDU3JCs3LjcyNjg1XXlOMj5IaVpMWkpWYmZAOjNCaEglNZqjoI+MraGXl6CWpLOxorK9tqGxxry6sbGjt6yqram4vLu6rcCyrq6utq6yuLOpq7mxr66ztrq2sLi9rKadtamfn6+jqa6cob+gsKOusK63rrWera+trqKZnaeppZ+Vmqeln5mkoqidmp+alJyerK+muqiuoqGam56ZnqSapJ2Xnpebk5ifkqiVqqeak5qakoyVmY2UlJqppo6NiomOe4FzgYGKmIWHfImJhYWKjImShJSbk5KPkJGXjpB/gI2Og2+Bf2Z5bWhraWZxcmtcaGNjdIFiZmdqbmxna2pobl1sbHNwYFRjaWNmWUlGTE1PWFFRVWFlgFVBV1NZVEZIRkVALzw9Nz82PEZOYTg6PzI0OUAzNzgyOD83PTg+RkpARDkyLT1BPUE9MDVAOUAxLSsuMzw7SzYvLissLTI0OzYjMyopNi41NTQ2NVp8XTE5S2pbTVtLWGRkQEExSmZDJjSRoZuNj7CdmZOhmqmxr5+5v7WgtMK7vbqxprevp62kt7e2t627rqyqq7aps7euprK1sq6psLa2sLO2uqeon7WonJ2ooKismqe9mKyjrq+1ta2tn7GtsKmim5yjq6iclJympJ2aqaKklpqfm5Cbo6qrqryfp6SgmJqZnaGPa6KWmZxwgpWao391kamnnpSUnpCIl5mAloqhkHmHlIyDbWl+doNxbIaLhn2FjIdwXmNhZ4SYhWuLjpSSdHeLhH6DkIBnh4BndWhlV1xoc21OUGpjZ3OFaF9lZm5tal5fYYqPg4RlTktEOUdUaF5KR1FQVFVMSFJgb3RlRltRVVBGSEVDPjE7PTY9NjwzZlw1Ojw3NTtENDg2MDpCNz86PkZMQ0IzNDM9QUBAPTI4QEU9MSwrMDg9RzcwMS4qLiovNTY4LCMxJzIxNDoxNzVYgWwxNk9rW05cS1tmYj5HMVFkPSouiqOZhZWwm5uToJuqraqjvcWvqbfCt729raa3sKWqorazsbKxuayppqy0pa+0oqm3traop6y2sq60rbOhqZ6zqp6go5ulpperuZSlpa+zt62upamuq6yloZ6coaemm5egpaWam6emnZOen5eQnaippLawpKOinZaYl5ejiKGOkpqGoIeTnKB/pX+lqp6SkpqRiIRyeI2OhYihdoiMaZeIZn1zeKBviIeDfo58f6GgoJmAfIeedIeOdZuKbIeBg21pZWN6bHJhU4VtYmxpmHFYaXFwiFheaVtsbFuIcm56coVnhoRaX0dOP0dfTUVSVlZRUVNXVGddTVZIUlJPRkdHPjw0OT05PDc7MDw8Nzk5OjY9RjU4NjA8Qjs8OT1GUUc9LjU8O0A9QD41OUdBODIpLjE8STkvMDEuKi8oLTQ1ODMlJjIxMTU+MTw4WIN1MjVSa1tOXExcZ189SzFXYTcvKIqmloKcq5yYmJ2fqamnqr/DrrG6vLbAv6qlt6+prKSytK6us7aqqKWwraW0sputtba1pqeosrCssqetnamfsaefoqKZoKGarLOUo6SltbymraerqqyopqGgmKCmo5mZpaOkmJykqZaTopyTkqOlpqG3pKSgo5iVk5eSnIivkJeUiamLlqGchbGAo6ydk5mdlHmC1KiAh5XBm8d5eLGlt5dkgMCcv3mEhHmRhHyQkJHKcpe8nMV6crWmu5B7gG2WsauweWhsWLGubmVpvZK8bmd6b3KP2H5Ta2O2sn+BcpRzmqGqkFdPV2JPVk5GVVtYUVBSjFxXW1BBXERRTkVHSTw8NTc9Ozo5Oi49Ozg3ODs5PkY2Ojc0PkA+Njk/RVJJOi41PjpCPD9BODpKPjUyKjIyQkUvLjMyLisvKC0vMTg2LSAvNDE2QTE9OleDdzIxVGtcT1tNXmdcPkwxW100MSGMppKAp6qfl5yepayyqLDCvbG1v7W2vsGrp7OsrKmmrrOprrazp6emtKWnt62cs7K2q6Wkp7GtrLCmqp2mo7CioZ+dlpqenK2rk52in7S6o6qpoq2upaGdmpqip5+Xm6egn5iep6eRnKaak52hpqKhsaOfn6OWlpKXkpmFr2tqio2qfmaDlYatZHCdnZSZppRxrqGkfni7fWuhj3axX2q0W6WAZZyRYGaCe2Z/anhrqWW+cmemjHWxanyxeHSSlGNubaduW4SgRWhmh5ZFdZxgfmd8pKeCWl+Mq2iAlXh5aqc3Sq9cWFNsZFtLTlhfXFdWO06JT1dXL0lUU0pDRkY9PzQ2Pzs4OjkwPTg5OTk6PTxEODs6Nj1BQDY8QEhRRzkwNzxBQz5ARDhARz0xMy0zM0UzLi41My8rLyguMC46NS8nJDIwM0IvPTtVgnYyLVZqXE9ZTF9nWTpNNV9ZMzAbkKKVgq2npZ6jpKqxt6y0vb+vtsSyt7rBpqmwqq6oqK+uorC6r6OkrbKjqLinnrOzsKOloKmsr6uvpqeeo6Gvm6KalpWWmZqrpZWaoZ60s6KrnKOtraCemZagoqicmJ2jn5uZoaakj5yimZagn6qepqagmp+hlpWRlpCahbWbtXiFqZm1mXaGs5u3fpOWlqmUfmuBpnuChoiSlJJ3q2drsVyreo2GlHSJco+GgH+IkJd4goKLmIuDoI+EsHZ3n3FsbGx8i06kWEhiYpl+Y2imYHlydVOTh15QqW1jcX6HgGKcLlGhb1tTa2hgTEtbZFhcWkI+sXlXWEEjTWhGQ0VBQEExOT44ODo4NDs6OTw5OkE6RTo6OzY6Q0I4PT9LTkc6NTpBRkJAQUQ8RkQ7MDIwMTtGLDAuODQwLC4oLzMsPjgzMR8vMi1EMTw8U31uMytYalxPWE1fZ1g3SjhhVDUwG5WglYizpqahr6mns6ypu7bCsLvBrbi3v6msra2tpq2xqaCuu6qgp7Sso6u0pKays6ejop6nqrGnsKeknp+frpWemZSVlZedq6CZmaSotK+iqY+pqKqbnZWXoKWomp6cop6bn6Olo5WbnpeZnKKpm6aZnJuioJeTkZOTnIPVk5m5cLDBfsWGfNaUm7t8mpWlj42djaR7joejgqWCeqx5j51Wr3qIfp9quVq5doaDfaaCk3yYeqp4jZ2PerFujoR0kbyFb5RQr6fFilGgemNgqWJzcohtl4hgU7W0yIaAiXxjpDNCnXZdUGppY1BAWGdaZGFKSE1uTlxRT1lmWUNEP0U/MD08NTk7NzQ8Ozg9OjxDOkY6Oz42OkBDOzZAT0xIPDo7REhDQkNEPEVGODEyMTFEQy4vMDQ4MystKS4zMjM5NzEjJTUqPjM9PVF3ajYqWWlbS11PX2ZUN0c6YVA3MSWbopSZsqioprSqpbSppLy3wbC5v7G1tLqytKexr6KwsqafrbWnmqe5raKvsJ+ztLChpJ6fpqmwqLSoo5udnaqVmJaVlpSWoKicmZanrbCpo56PraKolp2Xm6CloZihoaGhmqGip5ueoJ6UmJqmoJunlZubn6GYkJKUkJ2Ism5otXGrh26OpnK0c3K2e5qXpIuPnY2jf5GhpX6wdoOR0tJ2XK57hX+kb5uqpmuGhHytfZeZjnuwcpKdjnizZZd0hJ5vnmaUUciLWsJcn3liX61gdnOHYpeIXlnKnW+/gXVNS7VTVcZkVFFqY2VYQU9rYGxoUFZHSTk9VVJaV1hJQz9KPDI/OzU9PDQ2Pjs3Pjw9QztHOTtANzs+RDsuQ1JKRz4/PElKRkNFRD5ISTkxNzQ2QT4vLjI0MjUyLSkuMjYsNzQyJh82MDs1Oj1QcWg5J1dpXEJPVF9lUDVHPWFMNjIwoZ2SpbCso6u8raa0pqe2u7yyur62trS5uLKltLOgsbGinquvpJemua2ksbCbtLiqoKWdoamksaesqaOZnJmnnZWTl5eRkaGmn5WSpaqwpqKWk62gpZKUoJukpp+VmqWmoZqin6yZoJ6ekJWboZ2cpZWdlZqin5WYlZGbhax7d6h2o42IhqlvrYqCp4OYmKGJkpqLon+TmomuhX+Cs1xys1KufYKCpH9x1314hX6OnYWamnavhomRnId3tGGaZZqCgpVtklqwWEuadZh5ZmCtXnZ3iGiYiGxdr3eVno94bDV5yK6yX0JUb15nYEVQbF9wbVZWTS5mZGlTWVA7QURATDo1PzkxPTwxNj85OEA9OkM6Rzs8Pzo+PkU5LUVVSkVAQzpNS0pCSEc+R0s5Njw0Njo+LzA0MzMzLjIuLjE4Ki4zMiUhMDM3Njc9UGtlPiZWZ1xAPlZfY042R0NgSDo5OaCelaC5sJe0wq2os6ipsrq3s7e+uLextLq0pLeyn7Osn56oq56Up7WrqK+xqq20pJupoJ+nobWmpqmimJ2UpKCTkpuYkZShpJqSkKatr6aglZmpoKKPkaGZqKSglZmlqJ2cpJ6snKGdoI2TnpqdoZiZm5aXoqCUl5CmnYapfX2leKGOjYKqcK2LgaeGlp+hiZeXiKOCkYiUqnyAi514b7FaqIKCiKB5dNh/dodzqIGOm42SpHyWkJ+Ee7JenWSgfoOVbZJcq1tak4CRf2hnqmRye4FrmIdzXqtaiaCOa29lT0pDoVxbTHRdYmdOW2FfcnNfS1Y3SpuUWEdFPUdGQU0zNUE4Ljs+MDVBNzhAPDY9PEY/Ojw2Pz1CNy5IVkpFQUg2S0lOQElLQEVOOjpANS47PjEwMjE0NCsqMDUvNywmMjEoJCQ2NjcxPFBlZUEmVWZbPzJVX2JMN0ZJX0MyPziinpqav6uYtMKuq62ppbSwt7C1vri4sbC1uqi6tJ+vpJ2kp6edk6mwqa+ptKuqrqGYoJ+mpKO5oqOroJabkKGflJOemZOXnp+PjIuosK+nnZebqKafjJKkl6iqp5SXqaeenqCiraShnqKMlKGYn6CSnpeclZ6hlZaOq5yPrm1ytHOpi3WKp3O0eHOzgJGko5Kcjomkh5B3uG+Me4uiamu2WqGFZZeXaaGip22TcrR0k5h/smqFkoitanWzYZ1mom+Hk2uXXK1fTaF8h5FSc6NseX9+b5iHcl2vVjycd2ZUb24uXKdPY1NrZWJtWmNdYHB7Y1RaUj4+bW8zQ0JAP006ITdANi47QDM3QzU4Pz8zOzxDREJKRk1JRjYySlRLRUJJNklKUD9ITkNGUD08RTUwOzswMTAvNzUsKyw0MjYvIzAwLCwdMjg5LzlOYGVEJ1VkWT4vVV5hTDVGTV44MUM4ppybnruhm7LArq2rrKe3qbevtb+0uq+ut7aqwLWoqaCapaOhnJGqqae1orKnrqmgl5unn6SruJ2irJqVmY6jopWMnKCbmJyfkZOUqrawqJmUnKyql4yUpZilrKKRlqqyo5+dpquxmaGjj5iilp+blpyWoZOdqZyUkKuZh9SSmrtzsMOAw4Z+1ZabuHiIkJiMl4uMp4h6pLZ1fXd2woKasmCDunnAfHW4Y7WCjIepfJWBrKlxe390vIinoGmdYaaOr6F+jHSHqn2+b3O8dLKDdXiBim6aiHJujaR0vV53fVphebxrWlZcanleamFlZ2JteG9aXFlDQUBzQENGKzVHIic7PzEwPD83OkI5OT1DNDxATlpeYGBfX19aUFBSS0VGSjRITFJASk5FRk9CPEU4ND05MDIwLjg3LSouLzE4MCItMSwzHiw8OjA4TFhhRidUY1g8L1ReYEs1O0xbLTdBOaebnqK9oZeyw7Ctqqussae3r7bDsLiwrbmurcCwq6OhnaKhm5uQqaOqsqS0paylnpWZqpimrLicoq2Xk5+PpJ+SjJyinZedmpGVkq+5sqyVl6Onp5SQlqScpKyekKCoq5+bn6ijs5+jpY6nopSimpyYlaOYkK+gkpSpnoSQmLZ/j5GMt5V4gpOatXdta25zb3mQhY+KdJ/Bu72ae4GxqHCAc5G5g3yGhoyHjXyKh4yXfKS7ub2cdXq0o3R3l3Z0sHWZnmaGao21dHJxd7aMXn96fYlog3luemOLrHB1hX9YW6dqRWVaVGZgY15jUWdmcGx1Q05QTUQ6Wk0/SjM7MCA4PjsuMz1BOTk/PTs8QzZCVFlaWltbWlteYGJgXVNHR0g0RElUQktOR0VPRj9HPDc/NzA3MC85Oi4sLy0qOC8lJjIoNCQoPjcvN0xUX0cnU2JXOCpPXl09KzpWVSc+OzynnqCiv6WWtMO0rKuorKupuq6wxa2zsq21prO4q6mioaWeoJ2Zk6ujrKmltaenn5uVoKOdq6S9pqGplpObkKGakY+hp6GTnJeTl5SxtbetmZ6kpKKLkpKmm6Wqm5WppKWcmqGopaekqaGRrZ+WpJ6Xl5edno+vqJSbpqGNan1pm6Z4h3J9mY50eWSHe72+wLpvk4NylYdgcmpaXpuJYGOIjpVrYICVY22dd2KVa4CalZRlXmBjcJqKaHKLfYaVZ2t/cnV4fX5iW3d0gWhQXG6DfXuLa1hreoJzSkpvhnBOdE1FWF1nYUxaWGdjX09bbXVpcVJQREVNO0dJPU0/MiwyQT84LzU/Qzw5O0A7PUM+UlZWV1laW1xcXWBhYWFgXFVHNURGVUVKT0hGUElJSDs4PTUxOi4wOzouMC03Nj01JiIvKjIsJTs4LTdKUl9JJ1NgVjQpUF9MKDM+W08nPzI+qaCoosKjm7W6tqOspa6np7WxrMirr7Kqs6K9sLGmn6KnnKObmZmrpq6jpLSopJuXlKCbpq2ovaeopJSTmpWfmZKXpKiokJ2RkJicsLK/rJunnqeiiZORqZqoo5uaq6CjmZujp6yjoKujmrCblaeglpSdn52XsKWYoaeZm5CcnKKjmKWhmZuZmZmPlYFnbX1xd5KXlJKFi7WqjYaYlY6KjJiWh5SVioSTlJGJjpKUmJOYlpqgoZqclKCdjoJ6pYVta32RfIB1ioqBcYJ4eXZ2ioB8impzgXSDdWV3fXdrb3ptYGNdcGhNWFpmamBXWm95bW1mVE9GUzlPWk1RTygrOktCNjM1PUBBOTpDPjxFTlNTVFZXWFlaXF1gYmJhX15eW1RLQ1NHS05ER1BMT0k8OjszODksMjs4MjApNklSTzgiKSsvMiM0Oyo3Rk9bSiZSXlMxMFReOis9OFxKLDwtQLOgs6LAoaSysragqaWyp6WwtKrIqqyvpLSlwKazoJ2kpJyjlZWfqqasoqO2q5+YlpWflq2ppcCeq6OUkZuXnZeSk6GenqKnkpKZqKeyxLCaq52qn5CWlqidqpucn6yYoZucoqSvp6KlqJ+umJennZmZoJ6dnK+gnKGmlZeSl5OfoJWinZegjpaTioqNjpeukHyWm4OSgouqqYWAmZeJg4+eiHqEkIeGmpKIhoqWjpuXjZGYnaSWmpORnY1/jmehs6+FioR2e5KKfXd5em9meZCBgIlrdYF6iHNpc397doOHgmt1ZHlmYGplY2Rma1lse29pa1xTTFBEXlRFQD8+LDRARjs0NTs+QTs8Pz4+SE5OT1BTVVZWWFpcX2JjYV9eXl1eXVhWSktMQklPTVJKOzw6Nzg2LzI5NjQuKCYkLTEuLykrKjclKzwoNkNNTUQvVF1RMDVNWzE3RTRbRzU8LEC0oLmvv6yrrrKxoKqmsq2irLOvxK+pqqKxrbyis5ufpqKhnJiXp6WppaSlsrWdlJOdmZmvpa2+oKuikJGdmZiUkJShnJeonISeqqujtMi0n6qkqpaWl5qmnamanqOrlJ6fnqCpr6qmpKuirpufoKCYpJ6cn5yvo5iep5KXlpyRo5iXp5yal2WCknxlfo2akGN5jm1pa3uSpKpqZZuYfWeGimVlaWh7jqGPa2eNmJGjd2tqi5mjn5hzbG56hI6IelhmXoaDXm2LiYF2XGhzd3aSgIeCbneCeIBzbXmEdHaIiI+DfGuHWV5sdGRec4lpa3xxa2RfUk5YSWRYQUo0Pkc3P0ZENzE8PT9BRDs7REdISElMTlBSUlRXW15gYWFgXV1dXV5fXVpVT0RIT0tTTj0+PT02NTM1NTU0KiYmJSwqJS8qKyc2KiQ7Jy9BSltKLzdaTzYpRVkvRE8yWUM7Py49pZ+6vLqvrLSxqqWora6wpq2tsLywqKajra6wnqyWn6OdoZmZpqqcrKOlp6iyrZ6Uo4+ir6W2uaWuoo6OmaGZk5KaoJmZpJV7pa2iqLTEuKWip6+fnZSeop6jm6KpqJKfoZ6gqbCrq6SroKqcp5+noKyWoZulsKSXm6mVoJ2akaOWnamXnX29g4hytHKEnYataHi5xLhxk6KjeqaZmXKrgnzLwMC7cYyjiIKffZaYiZ3AvYKXnZ6NncLBfIJ8k42aw8B9bKWyb4yBb8p6f5t3kYOOgXZ5gIB5cXp/h3B3hYyTeW54lGNnYHhkYGWCY150Z2xkY1hMVklRWkhPRDJJRT9EQj4vPD8+QEE6OERDQkNFSElLTU5QU1ZZXl9fYF9eXl5eX19fXVxTTVBHVU5BPz89NjQ2ODI3NiomJSMpKiYuKyopMTAfOSojPklbTCojQlAuI0ZbM1BZL1ZBQjsvOJajucO1sLDAqaiUo6+osK6tprKzrqmkpaavq5+qmJqin5yaqqeinKuipKikpLSjnKKSpq2rt7OnrqGRkZmcpZKQn6GYm5+diKaspKytwMCxoamvqZeRn52imaGjqqOToaKdnqyvqq2npKSnoaalnayokaOaqK2pmpyom6uglZaklaCilpx+zpR4eqSBeZWWm1+uj16Op4GioHynlptzq4OAr15jjKp7qIeFoHSXk4izY4KrhqGOjbNqhK91fZeIt2GDrVqjzW6Qdnvae3+ZcH6HknZ+ZXuIdnZrfIdufYaRkX5tg5Bhcm1waGBgeWRccWhqZGdgUlRTV11LT0M1QUhERDg+NjtAP0E7PThAPj8/QkRERklKTE5QUk9TXF5fX15dXV9gYF9fXVpXT1VKPT8+PDU1NzgxNjQoJyQhJywmJi8oJiszHTYwJDc7U0wrLC1LMCc7XDtMLSFQQEY0LjGtwsC/tbSwuJedkaOqp62zq6ayq6uqo6qmr6mfppuZpJecoq+foJ6op6KloJ+wrJqdlaeurLCqqKuflJGan6SSj56lmJ6no5+tpauwqMDHs6ipsa6Wkp2bopefqamflaGfnZ2tr6msqpyoqKWiq5KsspaloqqqnaKlpKCun5GYppmfmZOTkJegcYWMl3WFqIZxsX2ecqx+oZ6BpY+edquCfa1/nHKtfquHhp92mZJ7fJd+qoiijJKMnX6re4mUkJ+Ae61XncV7j3CTwX2BlW11b4xtZXZlhm9hd25ybomKko+DbpORZnB1dXFhZ21lX29paW5nZFhTXWFZUlNDOUlJQEQ8PjxARkRDRUE9PDw8PkBAQUJFRkdFQENJU1dZWlxdXl5cXl9hX15eXVtaUkM+OzkxNDc4NDUyJiMfHCAxJyAxJyAnNB41LSY3PVdKLTwnPjEpM1ZARiEcRzpDMS4rsNPGxrK0oJ2jjqOioqyvtq6osaaoqqatq6umoaOdmaGVn6Wrn6Gln6ioop6dsKyXmpaop66rp6annpeUmaOhkZSgrZudpqOvrKSstaq6zrKtpq6sl5WcnaKZnq6snJegmp6fqbKrq6ubraulo6uarrGhqKuupZikqaior6GRlaKjmZORhKRqpHWJeql0erJwgqaKmYxxiKCah6RgYFKshX+ug5t2rYGnhoWfepmXhntmgKOJpJmGgqN9qX6CloeuX3ypVp6jkoF6o5+Ae8OvxYtyr7OzuXFiqa/CdGiMjJiOgm6clXFvenh5cG1nZWVycGZ8aWNdV2BqWFlVTExRTENDQUI7Q0BAQkk8PTo5Ojw9Pj4/QT04NjtETFBSVFZYW15eXVxeYGFgX15dXF1bU0lCNjc5OTY2NCwmJCIgKCciKy0iJC4hMy0mQERXSCxHKzU2KjFQS0wjIEE5RDQsJ8LJ1dS/oZmrp6Cvop6wtLCuqayip6aoqquppKWfm6SenaWnp6Ocq5qirKGjn6+hnJqSq6O1r66gp5qdlZOmopCaoqign6WcsaWkqLGtt8iytaqsqZaRnZyimZ+ls52aoZSdn6esraSwm62qo6OqobOtoaqzsaGaqKetrrShkZSippeakXypbJ6Eh3WreXywb4KljImflpaflIHSuLS4yYGBsl9glKmDpImHoHqYlpp4qsl0mqSVqKmRkpqNgZyKmsbGeWehgqV0gZ+Ogn2vXXC0YrB1S6OGbadHgpNkj5CekXxxmZWBcXx1fnxuXGZqc3FmgWteYVlkbVxfWUlNTEtFREFCPkE8Qj9KOzc5Nzk5Ojs7OzMuNjxBRklMTU9RU1daW1tbXV5fXl9fXlxcXFxcWE1CNzU2ODUvKSglJiUkJiksNEVOUFBNRktKVkYqTDAvPS01T1RRHRw7PEYyLCSnpMDGuK2osq2spaKcsrisqqGlmqikqquqpp+mpZiqo5+uq52loKyanqmlnKe2nqKXk6iqtbKsm6WcoJSPpayRmZyoo6Cqp66hpaepsLXDsrOqraiTipecpZuho6+ll6GVmZylpq2csZ6vqaefrKO3rKGxuK+dmq6msbKxo5OWpqKZno6CnU54moF/n3qEo32DpIWHpp+cnpOEuHt7ebmCf8zGwrZ4m6GQi59+mpaXinaemIqlmKSpf7CFnYaghKx9mpVjpm2kcI+FkIF9loJyrGCjc3GAmmC8fVJVdI6So5Z7fpSTjHZ7c4aAcVxubnhyaoFvW2RfaW5iZF5MTFFUQUlIRkk6OUs+QjEwODg2Njg3Ny0qNT09P0JER0lMTlBUVlhZWltcX19eXV9fXVpaWlhVU09IQDg4Mi4sKi4rKicnP1FUVldXV1lYWFdVT1VGPEUzOlBbVBwbNj9ILC0gi4eZqaukq7mqrp+boayys6WeoJWlra2uqqecpqaao6ehs66iqaayoJippJSjtqKilZehqbS4o5uhnKKSj6GxmZ6bp6ahorCunKWoorayxbGtqa2pkYeQnKicoqScpZeemJqapqSrm7Cir6WnmK+ku6yhtrWtnZy0sbevsaWXnK6go5yFj9G1w7d5h46FkZOQgKZ5lKF3jKCRhKWBinGqhoW0bnJqmaOclYqefJiZhoePc6+CppyjjqaLk52LlpCbbnGyXaV0k3qcbJl/e5l8balho3Fxf59ic7K4aHePlKaYfY2OlY55fnmQg25qeWl6c2+AdV5lZW9tZmdgSltYWDxISEBVNEBGPjwqKDYzLjAxMykmNDo7PD0+QENFSUtOUFJUVldXWV1fX15eX19dW1taWFVSUlFGOjIyMy8vKysoQFFSVFVUU1RWV1dYWFdVVVZUUU9RW1UlITJBSCQpJZJzjIqtvr+8urSelqekrbWhopmUoqimrqurmKain6agoLano6insKOUrKOOpK2inZCamqqzs6ScpJyokZSXrp+fnqeknaidtZqiqqS2rMSwqaupoYyEjpyioKailZmanZmbmaalqJmtqK+kpputpr2slL2vrJ6hr7K4qbKlmqiwoqeXeaiRfXywd4qApKWInG2ycKGHrXyhj4OnlZiArImFroWflKqgoZeGn4CZlYB7kn6rgJ2bloureJ2hkoqUkoF6r16kgX2mp2SdgHyXc2qvXaVrcIWZXWBbjKBtlZGmmYOWjpmOfHyEmYBrbn9jf3RugHpgZ2ZxbmhnaENZYVs+S1UzVThCQkM3JCQzKycnMywgLzY2NzQzNTlAQ0ZJS01OUVJTU1ZaXV9hYGFhYV5dW1pXU1BPTkk3MDQyLiosQVRWVlZUVFVUVVVUVFVUU1RWV1dYVlVVUUhGSUojKCi9k5qDqMXCtsCznpqsoK24paOOm6Sin6+wqp+kn52tmZ65oKOroK+pma6hkKuoo5aJmpCusKymnqWbrJeXj6yhoJ2moZqlna6Yoaint6nBr6WppJ6LgI6bmp+mnpKUmZuUm5qmpaabqqytpKWfqai+pJbDrKmioKuyuKmspZ6yraeol3WvfpCLnIWHfbqtipllsI1lla19oI+DppWagayKhLCFppqkoaGQhKBcbGqBs2B/rXt7g4GxbWdvmZmMiLFbfrVcpIRryKJkn4B7vFh2tVmyfVKugHqsWIChbZiQqJuMmJKZmXx6kJ9/ZXV+Y4Z4dIF8YWpncG1nZWZPVWRcQVVfPkkoPjk9NCEiLCUfMi4gKjEvMDQ1Nzk5PEFDRkhKTE5QUVJUV1peYGBgYWJeX1xbWFVQTkpGQzU1My4vQFVZWFdYV1hYV1dYV1ZXV1dXWFdXWFlaWltcWFdXR0I70p+ysbe9urPBsqKcrKaktaigipqgnpyzs6mfo6CetZmgtKiqrJ6vrZ2sm5Wvp6GOiJuOr6uopqGlma6SmI+omaGdpZ+ao6OlmaCiqrOpvbClqJ6cjn2Lm5ahoJiPkZqckpqYqaCimqmuqKamoqSpu56gxqakqKCqtLSrraWeuqyrq5SAqZKjr46bf4ekl5mQgoC4w7qDjpyShKeXnIKsioKviKecm6aqkH7VvcKqYqO/vX1+o4KD17q4tYWVk4Oevb6EbaOCb6uEbJx/erKwx4Npq7C9rHh3or68c4CWjqadkZuSmp97gpKce2R+e2WPZ3mCe2FsZWtqY1BiW1NqXD9UYUNOKT06NC8fHyQfJTIgHSQoMDQ5NjY3Nzs+QUNGR0lLTU5OUVRXXWFcX19hXmBbXFlUUU1IQz89QT81PVNZWVhZWVpZWlpZWFdXWFlaWllZWFlbW11dXFpWWFRXWryVs7Owv7ixvLKinK6mpLKmnYuYpcCquLKoob+mp7KcnrGcuqifra+lp5SUsKuXjIObka6loqygo5yqoJeLo5KmnaecmqGpo5mfoaytqrquqKOalpJ8iJmRppuSj5GYmY+YlKmboZmqqaGrp6CjqrueqMSin62iqbOzqa6on7mmra2Zc3aqpbiGZImgcGiukYqQbm53pJCZn4F1rpiUcI+LcZWoo5uXrqRybGxsZot4b26CmXGBempxaWeKl5aYcWlphYhncYZkXYhiam9ZXGZ9dqZfYXGOkW5lZX+Nk4+hmJmZk5mhfoiRlndniHhpj2t5gHllbWNmbGJLZVhKbFo6UGVFUidLOisjHCAbIywpGBsYLTIuNTo0NTc6PD9BQkRFSEtMTU9RU1ZcV1pcYGBhXV1bVFBMSEQ9OkFCN01YWlpZWVpZWFhZWFdXVldZXF5eXVxcXF1eXV5dW1tVV16plKyzqbm4srOqqaGunaOyqZeSv7PFyr+3qp7ArK2koqesn7qjpK6rraaOl66pj4uFlZatnqaqoJ2ko6CRi6SSp5ipmpejqqGWnaamp7C7rKyam5KRe4SWjaWYjZGRmZWOmJaplqCYqaObsaadoqu5n6/Bp6OypauvsKmsqqa1oqy2lYqhqKa3nYmWo5mHqpuRlZ2SqbKZmqOqoLKWoqGdn6KcoaWhlaunjZKSjIeTnJ2VkZmTmZGPlYaBpZuYlo6LlJSMkIaEfWeJfnSCdXOHinCnbHqUkZOSgYGNj5CPnZWil5qapISJlo9zapF3cYx4d316am1kY29kVWFZQGpcSGNhT1krRj0rJyE3NTAuHxwhJTIoKjY5OTQ2OTs+P0FCREVKS0tNUFBRWFVWWV5gYWNdXlVRSkVEPjk9QEFTWFtcWVdYWFhYWFlYWFpaXFxeX19gXl5eX19gYGBfWVlgppaoqqS0tq6uobCjrZ+gtbGQjqzIvsW7uauipZ6cp5+xqaO2p52ptKaokZisoouHiY+cp5WspJ+Yp56ekpSjlqiaqJqUpqGkkJuomaG2u6irmZqPjHyBlIuhlIqVkZaRkJSYppCgm6qfnLajnaart6euwK2itqWur6+rqKixt6Ctu5iRpaSmtqKSnqegjqqgjpKfo6uvmqCjr6ivmKOgnKOqnp6enJarnZOZoZuUkJarmo6ZmZeRlp+SiaGelpWFko2RjpWLgH1mi4V1hnV4h4JznGqFj5STkIl8i5WSkpiUo5OfmaSFipqJfHOXc3uMgHN8f2pvZF5wamBbYFpuZFBgZVBaOkdHRT4yPT45LyomKykmHSY0MTY2Njg6PT0/QUFDSUpHSktMTVNTU1VaYGBpYGVWUEpBQ0I6OUVNVlteXltaXFtbW1xdXV5fXV5fX2FhYmFhYWBiYmJkYlxbY5eVo6eir7GrrqOppqyfp7WqkI+dpbW8sK2toqOaep6jsqSlsamXm7mmo5OZqpyOhoqJnKKPrp6ilaifoJKWmZuui6qWj6iZqY2ZqY+furekpZmcjIh5gpSMm5OKlZKUkY2Sl6ONn5+pnp+4o3+Dr7Wir650o7yisZ93eJ+osLmUdayjnomAq39kXGJ2oI+ln4SXfW2Ss5yjp62qomWen5JzeZqXcICYqJhtf6KoimWcpp2SmJiWjZKckoaem5CWhJKHj4+SiYV3ao6GdoZwe4V/f2Boh4qUkotadZSQZ2iQj3N7qJybZnqaiYR5mWqFjIRveoBrcmVfdnFsa2hcZmZiYnBTWz5OTk5TRz5AVUQ6MS8eHyY0OjMwNjY3ODw7PkBBQUZIQkdGSUtNU1RVWV1gaGZnWFBKPERHPDhVUltgYWJgXl9fYGFhX1xdX19gYWFiY2RhYmFhZWRjaGReXWablaajoK6vrKuppaitoqetpJKWq7axs6ebq6esl3OMnbCgqKunlJe5oKCPnKSdkX+JiJuejKyaopWnoZ2OlpKehHWtj4inm6mRl6SJnLu0qKCZmIuJdXeTjZaTipSRkZSNkJShj5yhp5mcspWAjJu1nbOMko66pqB+p6J6oa21gI6NpZ6Di4aQsaqvjIqXpJt6gIushpudoaeop4eVhZh3pZt6h5yBl6eCgnucsnqKhqGYmpWYloORl5eFm5lieoeQhY+QkouDbXCOhnmAcH+AhH6Fc4WElZF4lmeSdKCadX2ZhaOgiJh/lIyFhZprj46GbHh7cXFnZHdvamxrXGVramV0XF5JVExSQEU2LlpVVTcpITA5Pj43NDM1Njg7Oj0+PkBEST9JRUpMR1NYW1lbYWFoZlpRSDlETDs+YVZeYmRmZGBhYWBiYl9dYGFhYmJiY2ZnY2JhYGVkY2djYWFonJein6WsrKuorKCnr6amqaWZlK/Iv7Gil6iptp6QhJ2snKeioI2Qvp6ajJ+aoJB8ho+Zl4esnKGWn6CRjJOJhoCRp42Ho52klJiehp66sqiempKOhXF2kImVkIqUkI+bjJCSn5KXoaWWnquHn7SJtJqtisqHqayItoWNsIGvrIKojKaYjZ19qI9ye3ecj6eXaJWkebSMn56mp5KYwoF/q4iYoXKegJqlfZeFlbKBoX2hlKGQmJeBj5Sci5mSi32Fk4eOlpKJg21yj4V+eXGGgIN7g3SEgJaAj8Vmf6mHj6NrnoWknYSagY6Ph4uacY+UhWh4dXx4aGh2cGhobF5kcGxmbFhnR11STTNFNDZOYmQ3JjM8RUdEOjY0NjU4Ozg+PT0/Qk0/TklKTENQWl1cV2FeaWxcUUU9S01ASmNYXWNmaGdiYmJiY2NgX2JhYmNjY2VpaWNiYmJlY2FmY2JiaZSWop+vp6iopaufo7ewqaummpSgo6SrpJemq7ijr4ChqJ2mnp2JlL2Zk42hkp6PeYSWlpGHq5mbnJmhhI6Ld5ucj5+QiJ6knJaamIejua6lmpyMjH5ibY+Lk5CNkI2NmIyRkqCPlKGhmaGnfqGnh62doJatj52cnJCFgKCMqa2Fo42pmYyaf6J1gJmUa4Ktdk2reIeNnJGaqKaAqat9g6F7eqdqnn+Sa2eXhpe3iZ5+bmBkWYOXgI17ZGiLcpl9eZZsXX2XbV9ScINcX2t4gl9YZIF8g3+XcKeqa4OjbnKlcJ+FoGpnoG1bb4x9Z1pghIBiWFBvd2ZtdHJram9danFta2lYaU9dWUY5QTVIRF9sNSxJQ1JNTj04NDg1OTs2QDs7PkJPPlFSTE1CSlxdX1ddXmJ1YE1EOk1PTlRiXFxmZmlpYmJkYmRkYmFiYGJkY2FjaWtkYmRkZ2RiZ2VhY2iXlZ2guKCpo6askaC2u6quopmYoaKlra6hnq+1o6iSoaCgp5yajpm0mZCLn4yVi3WBlJKMiqaVlZmenn6ShYWspIebkIqZqZmam5KIprGnopaaiImAaW6Ih4uOjoqLjZKMkZOjjZSfoJyhpH+TgY+ioZSgdpyVj6eCoKZ/haerg6V4iXyEmn6icHOUiJZ8n415bYabjJmPm6iZjoede4Kic3amZp5+d6RfmHp9k3Sibpi3tLp0k4iDgLWoZIHGuHtwlbaMcoCao2JzrKtgfGmds35tfIaBjYKLmHF/o2xyo3SfhYGkYZ2Zs5ZyfZifs3VzW56yg2pib3R2cWlvWGttc3JmXWleYkxFPUQ2UUJaczM9U0dfSlI9PDM5NTo6NkQ7O0BKUD9VTU9RQEVfX1taWGBgfGRIQzhNV1VXYmFaZWZra2JiZWFkY2BhYmBkZF9gY2tuY2NkZGhkYmdmY2hok5WUo7eYqpuTn42ktrSsraCaop2ko6aunZyyrqyTmKKaoaSZmpSeq5uLiJJ4i4VxgJaOipChj5KUnZh9kImNqKCHl46JkqSUnJuNi6mopZ6QloeFfmp7h359kI2Di5GRiZCUoYOXnqCdoJ6LiXecmKKNn3Ghioeph5uljpSmqX2tjH56oJl6o5N4gXSWiI2cfZafhpuOmJulhaJkoXyIlpCbjW2eaJuOb5qZeoCLp31yaXSrg5+DdKpolZpdm4V2hZ5nqmuAuGZcqHCBnGCVjF6ndnWHiH6eaJp1hpOSl46An2+akW6nml2pf3m7a36qXI6EXbRnXG5yenhraVxxa3l5Y2BmWGJCUUZPN1dDUm81S1taX05aREEyNTE7OzZIPzpDSFU+WVJZXT5EYl5WYFFhY31qRUI5TlteWWRmWGZnbm1iYmVfYWFfX2BgZWNeYmRvcWBkZWVrZWNpaGdraZWbiam0mqeIY5Sbq7mxr6yeppycqaCfr5yesamtnpekm6GgmZaWoKOZhomNaoiAcnuXiIyWloSRlZiQeoqElaOcipSPhoyfkp2diZCpo6CajJKKgYBpgYZ5f5eMe4mOjoiQl5t/lKOfoKGTmHJon4mfj4twkoyAqYeYnqGlnqZ7sK2joriXd6Ozo6SAiJR5nXurmX6ijpyaloiXcaF8hY2vtX1rmpGheX6YtaKkq6iEmXybfZ6bf3SqWl1ve5aLeJ5iTH97eoVjeZdCTJ9Yompxe45sgIiEmXWbeIaJsbN/gJuTp3eDnm5zfZVwmnRrpF2VdkhlZGB0cX5+b2ZgbGl2fGRlYlFfV11UV0BaRlFoRFNXXGJYXklEPUI4P0I6SUY4TEVYQVdSW1ZERmJcWmBLYG1+ckVCPFVfYlplaVZnaG1vYmZnXmFhXF1eYGhiX2Vjdm1dZWdma2RmbGloa2mTnICwrZmEU16gprO5srKomqKMnKycnKqUoqyko6iPoJ6dm5mWmKGdloiHiXeGgW95lYWRm4t8kZOWiHKAiJKhnHORkIGJmpWhm4WPqZyblYuLi3yDbISFcYKhjHiGjYiIk5mWfJOkoJ6iiK2GfbWEjp6ce6WWeqmBlZuPiZ+bfKdod21+mXShc3J8nYaZcJODrn2kg6WdmYCjb16oZ3WiY2+lYZzTkH17mXhzc2KihpB+o3SkkHZrj7OMYIKYiXOqsqi8f3eDbX6/pqm0XZxtfHCWbX9yonJdpGdzpmBopm2b1Jp+hptweXuXbJx8eJdzbqmkZ2BlenGAhWxoZmRudnhnYGNTXGZRUWJIWEpVYVdUW2VqXGVRRkNLTUpLQktFOE9AUU5YU1lPU1FgZmZqUmN3eXdJRkVjXWVaaGpUaWhqb2NqZ2BjYFxdXV9oYmFpZXxkXmRnZGtkam1naGxol5p/r6pUXEt+qa+xs6+yo5uZhZmpoKGkjqapoZmqipqYmJOZk5KhmI6HhXtwfYRofY+DlJqBd5GOj4lvf4aPk5Jsl5N8iZKTpZeDj6ublJOLhol5g3aHgG6Cn4Z4gZKGiJmjmHuUo6SZn4mzoaK2i3qsp6SupXCpgJqOhYCakHukgKGZhphynoSkrq+Kl4yAjaSNlYKtoJN2tba1yaFzlIuBn2Cdl6ltepWHoJt0ooh3oH6Tl4uBcE1mo5JwmodzpHt5dGGDgWt9oGtxZF+ccX1zlmh5abO1tMamc5h9ep1rnJurdoWbbXZ4mGqae3WYclFFfbNfanZreohma2hjdXVxbldfVFlpUFNoSVZNWVRWXWhrblZnV05LQUpNS0hKT0FRS1BlY2ptZXRyc395fG51iXt7VFBObF5pXGtpUmpoaWxobGZjZWBcXV1eaWJkaWt7X11kaGNqZm5tZWlsZaGbiK6lg2Q/k6Gyqq6vtaKikICXqqKjpYylp56dpoOal5aOl5CPnJOOiIN6anmHZYONf5igeXWPiYyBaYSFkoOMhZ2NeY2LlqaTg5iqmI2Si4GJeoB9i3lwkKGGeoKVh4mWoJZ/lKWonJWVg2ZueJxsomR7caV3m5hwZ6aAlYp6pHqfloOXcp53gYqVl4+5bpGKomJ9mKCViG1yaaprdaBtb6ZfmmmLkGmWh5uWdaKBfppgjIaNdXCIYmigZZ5+aZt1b2NmiIFtcaJaXltioW1diItuen1zcmSlbXiiZGenaJlzjJlwom9ViZBvoF9mqFSLXlSYbm1za3KCbXBpbHl0a3BSWVdXZlpUbUlZT11JWGlpc2pZa1ZRUkZWXExYU2FVaWtfd3R7fXB8fHKDe4Bzdo2AhHZeUXJiZ2NwZ1BqaGhrbG5oZGdfXV5dYGpiaml2dV1cY2hjampzbWZrbWOco5eleWRzbYumraOpsLGmn4uAmKudn6aMo6Kbo6KBlpiTjpqQi5iQjop7h3GAiGmLi3yYm3N1iX2Qe2SDh5WKipWZgnyIh5eokYGjrJCGkYuCin6AgI5zaZCmhH2HlI2ImaCPiJOppp2IpniVm36kiJaLsZidkIKvl56ldpSGeKlzpY+Emm6kooyShI2Du259pa+ChoWGk5Wcn3ylenKolaCWZp5+b6xkloqWk3eobaqigYl2iYN3q5GmiGuRsGt2s4ypa4qFbW2fnpKVYH6ri6p2fn6LpZ52n3yDpJWdoGqbiHisaJ6tjLZ0d76NpJNag6eOq2F1cnRwfHVxY2t/b2ltU1dbVmFiXWtNXVJdSl5tbndfW3FZXGBbZ3Rlbm9yY3J0YHd6fnlyeYNzhH+Be3uMgYKAdmJ4ZGNucmRSa2dob2xyamZpYWBeXGFrYm1sem9cXGJpYm1qeG1nbG5ilaSpnIF/naOWqamdqKaupJmKgpismp+lipumnamdhYyaj4ackYWSjYyNdId7iIRvjYV+mJN0dIZykYJtf4uRh4aTjn17goaYpo5/pqeOgY6JhZV2goeSb2yLqYGDjJSOiZ2fiYyUqqKfj4B1lJeIfoF5lK6if4GbcY+Gd46Jgn17cqeMcX19epiWm4SPeXt/foeUlZOKdpCYnqCDe32Ja4yFW3l5cnpxaW5+kolxgHWBj5STcYeEgmWMf1+Bf4t3dHKUdW95bm2HbISFXnVnd45lgICFjaiafXR7lWqJiHCBdn2Hd25uaIxzenyYeIVcbFh5j2lveHJxb3h4cF1rh25qZ1ZbYFddZmtkVmNVX1FfcHh5bGt2Zmtra3d9cnJ1dGFvdmJ0e4J4dXqCdYCAgIF4i4WDfXtuf2xkeW5eV25naHVreGppamVcYFpjamVtcXRuW1tibGRsbHluaGxvYY2Tt6imiaCimqajmKScq6KhhISYrZKeoYmbp5upmIOBm4t/lpSHjoqJjXKDfI99fo+Fe5iPdHKEcJWFe32Si4aGj4R5foCHmqWOfKihi4aQkIWVg4aOmHdyhKmGjpKdkImfnoiMm6efn6qDiI6Vmn5+iZatp4+Rpo93b5uPgXiQbn6ohXB9lXFrcH2BoI2Ak46LaGxcgouLm5qejnOVi4hxdGuBdnSBWXJuh5GBfn+Mal1qZHuGhImAYGl4epp7goqBdYGFgWd3ioZqYXBxgXRecYqBiI6llIVli42DbneLhHGGj3pxaGhlfIR7lltca2hudlt8eXh1bnNzg2dcbYtra2JaWl9bWWxxXF9hWl9dZXR/e3VwdGRra2t8fXN8eXVkbnVobXx+d3p8e3l6gIB+b4aKhHt9dH55c39oVFxxaWx2cHVna2hkXWFYa2hra3FybldbZW5sZ3N6b2hqbWCLiqmwoY+ioZqenZeemKijon6Dma6OoJWInKKRpZV/e5iFfZKZiYmGh4pzfoGMdoWMgoSXinJvgHKYhoN+koOEhomAeoGEjJyhkYOnooh5jpeJlYuLnJeEg3qtgpGYmpWKnp2HiKGqn6Gio4uHk5uco5mVqqGnpp+SmoeVjHp2jY2Dp35/kpCTlJ2yppuVn5CNsZKXg6WMjJWan4mQm4KIkYprfI53eGWDh5GLfImehIeMkImIgYWEkHd8enSZoIiGiZ2JhJN+fYqAgHVvcoSCfneGhoqPpZCChYyGgoyQjH2IjIqRhHptg4V+eplrc2lhdIpxfnp3d293dIJdXm+HaG5fXlpdXVNoclZkXV1ibGh1fHxzb3Bka2ppgH1ueYByanBxbGeBe3KCgHh/fX+Ee22CjIZ8enl7fXqDeE5jdmpzbnB6ZWtlY2JgW3RmcGdycW1VXWx0bWh5enFnaWtkjIecuZ6WoaCYlJiZlJikoJ58f5qsj5+OhqCdi56WfXmUg3uOmYqGg4SHbnmBgXOBiH6JlIRta356l4eEg5B/gIeEhXyHhY+cn5OHq6CEc4uQhpKRi52RfY17qoSOk5iWj5yWh4ecpZ+imp2FgpKamZiPmaafpZ2cj5V/j4h1e4aNhKV7fI6QkYaZq6GelJ2QjqmNkICdjIiTmZ6Cj5d+ho6Db3iGcXVgf4SQhnWNmYGDkIOHhX+FhJVueXZ0kqGKi4Wag4SMc3+Je3xycXqHg3p3iY6DkaaPhYOOgIOKiYp3homLjH5xbX+CfG9obG1oX3p/aH58dnV2dXt4XF9xfm50YGNbXV9SZ25UZVteYmtpdnl/cWxtZGtqaIF/bHSBbGx1b3pwhnluh4B2goB+hXZxgo2Ifnt7fH97gopgaHtqdWhpgmRqY2BpXGN1aG9idW1sVWNxeWVwentzZWptbYuJnraZoKOfkpGVmIuanp+ee3ifp5Gci4ellYuYmXl6jYV8iZGEjIKCg258gHlzgYV+i5F9a2h9gpeJgYiOfH6GhIZ8j4KQnZ2TiaidgHCMi4yShqChioWMfKiRiJCSl5OWk3iNo5+gnZaZf4CQmpiSjJqioKOZl5CafYyDd3+Cjoagf36MjI98mKShopOakZCmjI+BmpGJkpebfpOSfoeOgXVzgnB3YX6AjoZyi5Z9iIxyjH+ChYaPaHhyeIuYkY9/ln2IinGBhnt8cHd6ioN5eY+MgpSkkouFj3uFhoeEdoOEiYl8Z3N9gHl7cW1rZ19+c2h8dXZ0fHOAal5gdHZwd2RjWV9fUmtpVWVZYGFoanZ5gnFna2RsaGaAgGtufmhvcWx+eYd6bIyBc4GBfoF0doKNhn98en+BfX+PaXKDbnRpYYdobGJfcVZ0b21tYHhobVdqdHZjdXp7cmJqb3qJjJ6xkaWknI6Pl4+GnKCbnX13paGOmICNo4uImpZ5e4aHfoOJf4mCgX9yf3t0doOFfoqReGdjfoaXioKKjHl9gI2DeZaClpmYjpehnH5wjIKRk4alm4eMiYOmlYWTi5aYk5J3kZ2goZeUlnl+jpeXjZaanKOdmJKUmniNhIJ3g5WNnX6BiY2Mc5ejn6KUmY+PooyKgpaXg5KWmX6YjXyIjYF2cX1ue2SAfIuFcYeTgJGCbIeDgYCJhWZ1b3uFkZeLfJJ3i4h7f4V7enF9d4iEeYOPiIqXoZWBg4t2iISDgnd8g4qHeGB6eX50f3hnbWVhf2pqd3N0dn5xfGNjYHNudXJtYVphXltsZVJjWWFhaGt2eYZxY2tjbWZofINtaXVobnBpgH2CeW2QhnKAg4N/dHyDjIGAfXqCg358kG12iXN1bWWKbGpiYnZWhGlwbmB4Z2xianZwZnl8enFgcmyGhY+brZemp56NjJeHhp+Tl5l+eKqdi5l6l52LjJiQeXyBjH58hHyBg4F4dHl6dH2AhICJi4BkX32LlYd+hIZ1fX6Lf32YhpeVmI2kopl/cod7k5GJpo+MjoqToJGDkpCVl5GLgY+Yn5qRkJBzf42Rk4mdnZ6ml5eMlJVyi4yJa4SXj5l6h4iPiW+XnZqklJWLjJ6LhoGRnH+SkpWGmYh7ioqBeXF5a3VsfH+Lfm6Gk4OVeHGChH5+i4Blcml7f5aXg36Nc4+Hg3iGfHV3f3yEf3uCi4OLk6OPeIOBdImHfYB0doKJhXBhfHZ7cn1wYm9jZHxjbnB2c3h3c3RidmBvbHZub1xcX15eal5QXVljYWhudHuJa2BpZWtjaXeHbmdsaWttaIF9e3dvkIhzgISEfXSBhol7g316gYR9fY5yeot4eG1sh2poX2lyY4dncW9ld2dubGF5aWt9e3hwYXhti4CYmKmfo6idioqShYqdi5WYfnivmY2XfZ+UkZeTiHd+e4p9fIB3eICAcHV0fG+GfYGBin98YVx+j5GGf4ODc3uAh3qPkomTkp2TppyWgn2BfY6KkaOIjoqNmJqNhpKZlJaOioiMkpySj4yMboSQj5GInpmioJaViZaQbYeYg2WFmI6TeomEkIpwlpqUo5OSiYuZjIF/kJ19ko6SjJmOe4qFh3NzdmtwbnV8inRuhpGPk3F1gXyBgYh8ZXBseXyZk3yDiHSQiYBzh3huf3yAhXuEi4eCi5SnjHqGe36KhXd+cXCBh4RlaHl1dnF8Yl9wYWt0X3Fqe3l5bHNwZXlebmxzbXJYW19gYWtbUFdYZWNncXF/h2ZdaWlnYmdxjW9kaWhlaWmBend1b46FdIGCg3t1goiFeIV8eISFen+Jd3+Le3tyeINqa19waHSAa3JvbXJnb2xlfGNugHp3cWx3d4p+opehp6Cmm4eLi4GPnIeTnXaCq5WTjoehjZaUj39zfHaFeHl/c3N7hmtzcHpui3aAgYhvcVtZfpGNh4B/f3Z1gICAoIeSi5SemKKVmHiKf4GNiJydio+GkpiWhYmVmpCXi4uMjYyciY6Qg22Ji5CRip2WoZuXlIWXh2mDooFlhJyJkH6Lg4uBd5OYkp+TkYmJlI1+fY6Xe5GMj46aknyKgIJvdnBsbW9we4ZpdIOPmYtxd4B1goiDeWZybnWAmY57h4N5k5B5dYdzb4d6hIp5ioWCh42aooZ7g3WCi393eW5sgYWDXnN1c3FxeVpfcWFwa15wan17cW1tam12YHBva3FtWVliYWJuWFFUWmZnY3VwhIJiXWtuZGNma5JuYGdnX2hrgXVyc3CLgHV/g4B4dYCLgHmFf3iHhneDhXyGi397dop/anFjfGOGfG5xbXRqaG9sdnhfcX95fHV1dICDfqSVmqyep5aFjYR/l5SDkKB2jKCUk4aLm42Wjot5cXh0gnByhXRxdohscG52bYh2g36Abm5VUYGrlIeDeH93coN6g6CCk4KVlJmck5t4knuDjJKjmZOOiZWZkoSHl5mMlIuJj4+HnYSQinxzi4WKjoicmp+blZN/k31ohJuGZ4Wfh5GEkYKJcYORmJCbj4+MjI+Md3uRkHqOi4yRlox8iHyAa3ZqbmtsbHt/Ynp+j5eBdnuBeIOMfXlnc2xzhpWLfYeFepOPcHmDb3aLeYiKeYh8gYuPnZ2Ee3p2got8d3FqbIKEe2B4cW5tcnRWX3BicmFgbW96cWhvZmZzdGlxa2J3ZV1XZmBgclNRT1xmZV15cIh8YFxpcmJiZWaRal9oZVtncH5wa3F0in12fIaAdXV+jHl7hYF4iINzhoV+jIyEfHmVeGZya4NgiH1vb2t6YGpudX91X3R9eYZ4dHOFfXigj5mwm6WOgot/g5mHgIyfgIualI+FiJiPj4+EdnR3dIBxcIV0cHKEcGtpd26Dbn19bXVzUk2C38iS1pN7cHWEdoSgg5R3lpGZnZGZe5RzhZCeoZOTkImTnJSGf5eWiI2NiJKNiJt/joB3eo1+iYyKnJucmpSSeYx1ZoeQhWuHooSRiJeDhmOMkZmPlYuXjIyKi3F6lIh7joiKkpGJeYV8f2x7ZXNwa2x6eluBeZCQgXp+f4CGjnt6aHJqc4qOiYGEhHyUimt9fm1/i32KhXyDeICOlJmZinx1d4OPeHJtZ3GAhW5rdXBoanVuU19vZXBaYGxyeGdramJmeHJwcGNgd2BgVmtfXnZQTkxhZ2JdenGJdV1cZXZhYmVljmRhZ2JZaXNzbmtxdox8dHqGgnV2fotzgIZ/e4l/comIgZGLiHx+mHZlc258ZYh+b3BsgFlsbnl5c2B2enuNdnJ3ind5noubrpqgkIKFd4iVfnyKnoiGoJKPhYyYhJOOh4F0eHB5cW+Eb21vf3NlZXlxfW16fWpoa2OkmsHcrvChc2x2hHaFo4aTcJeRlqGVnIGScoaLopeJjZWKkJ2Wg4GWkIWJj4CRiomWfod6dX+JeIeEjpyamJiOj3aJdG2FiIl8iaKDkYmchIVei5OXi4+Jj4uLhIlte5aBfYiFiZGPhnaFfX5rfWR4dWpueXNYiXuSiIV6foGBhox/eWVyaX+JjYmBgn6LlYRrgXVtho+BjoN9gXh+j5SSmI90cneHjHVzcWd2eoRjdW5xY2p2aFJhcWdsVl9vdHphcmRgaX1wcm5bY3JgYlZuWVx4Tk1MZGZiXndziW5cXGR5Xl9lZYVgY2NfWWpza25rc3eMfXR3hIF4d3uJcYOEfX6Ie3SLiYiWhox/fpdzZ3VyeWyMe250cYFXcXp2eXJld3mHjWl2gIlyf5yGmKabo5KEfXGMlHd5jJ6FhaGNj3yWjYCZiIR7c3dwdGpwgWxpbXx1X2F4d3xxdXxoYGR869q1ycPch3NsdIJ3i5uJj2qZkZCelpSBiXGFiJ+NhIuVioyYlHyNk4iDiY97kIuFj4F/dniDhHKIgpOclpSXhYx1hn5vg4GHhpihgpOMnoOJYYOUj4eKhomNh4GHaXyTf32DhImOjYJxhn5/cXdodnJpdHdsWo19k4OFfYCEgYSKgnZhcmuIgI6JgX5+kZB9bYFrd4SNhJCCe4B8fo+Rj5WIbnB5jIV0a3Fsc3mCYXVqb11sd2FSZXJpZlNgcHZ1YXBgXWiDcXNqV2doYmlYbVZbdUxLTGVnXmJzc4VqXFxleV5eZGd7YWRfXVlrb2ZvanR4in5zc4F+e3Z6iHOFg3x/h3Z3ioaPmYGMgnuTdWx3dnl4k3RueHt9WHqGcYBvZ3l3koNkdoaFcIqWhZmgmqKKh3Rvkoxxd4+cfouaiYl8oH+EmYCBeHJ0bm9kcn9pZm14eFxgeXt7cXGAamFnYX/Vto6RpnhucXd8cZORjYhrmo+JnZOMhntph4uZhoGSkYaHmI58jY2BgYqNfI+MfYmEenR6g3txhoCWmo6Tk4GIdIKFdIJ/iZGcnYaUj59+iGJ/k4eFiISKjYCAg2d8kIB+f4KMj5B+bYN8gnRrbXd1dHd2bGOOgY+AhX59hn+EiX9wX3FvhHuOi4F7fpCIeXCDZXmBiYWKgXqEfH6SjY+Rg21ueYt+dW1ua2x7f2RpbGpZbndaU2pzaWJRY3J4bWNmXlpqg25zYltnX2RsX25VW3BPSE9nZVxnb3GAbVpcY3NgXGNsd2VlXV1aa2xjbWpzd4Z/cXB/fH10eIZ4hYJ8gId1eYmBkpV8iYZ2iIFweHl7hJNvbnuBd16DgHSCbWl6dJRzZ3OIfHGSkYOZnpughoh2dpR/bXeUmH+IkISLjpp9jJp2fnZxcGxqYXV8Z2JqdXpbYHh8em1xf2VjaGdXnY9fcXOWvMSEd3GUipCAdJiMh52UjYhza4iPlYB7lIuBhJuMfIqGfXyJjH+Th3SJhXZ2fYJxdYaBnpWGlI+CgnF+h3ODeoiWm5aGko2cgIhmfZOCgIaDiYlygX1nfYt7eX9/h4uPfWmAfIN2Zm95eHN3dGxrj4aLgot/eYOBhISAa15wd3p9i4eEe4COf35ygGh4gYaJhIJ3gnp/louOi3xta3qIfHZ0b2lofndlXXFjWHB0U1Rvc2liTmh1eWdhXl1Yb4BvdFlkYV1qbWBwT1lsUkRUaGJabG9te29ZW15tY1pjb3dkZ1xdYGtqY2xpc3eBg3Fufnt/dHWDeoSCfIKFdn6JgZaReIOKdIGIc3l5fo2Qb297gXFpgnl6fm5tfHaWa2p4hHRrk4yFnpigmYWIb36Mdmp5mY+AgoqClpiKeo+Wb3pzcWxqZGB0e2lgZnJ7W2FzfXpncHphZWSOsbJ3S2JapdrRl3J7koyReX+WjIWako2Gb2yFkpF5eZOGgISZinyHgHl4iYqElYBviodxdH17anmGg6WRhJOMgn5ufoJ1gneEmpeSipOPlIWHcHqShH6Dg4mDb4F4aICFeHJ/f4OKh3xlfH6DdmNwc4BpeXFvdZmNhoSLfHd5gIR6gmtcb3xyf4eDiH2Fh3qIcYBtcIKFjYKDcYN3f5iLjYN3bW1+g392emVoan5yYVp4Wllybk5YcnRmYEttd3ViXlxbWXV9cnBXZl1manFfb05XaVM/WWdfW3BrZ3lxW1tZa2VZY3B5X2hdXmVsaGZsaXF4f4dvbX99gXVwgnuAgX+Df3aBhYmXinGCjXF7hnx6eYSUjHVren9rb350f31vcnx7lHBvgH95ZpKJgqGYnZGDhmeHhHBnepeKfoCFgpmKgXyNjWl4cmxsZl9hb3ltYGJveVxkbIN6YXF2X2Rl1eu+izI6PouOgHJ5homPjXeFmY5/lI+Nf25thYyLdX2Pf4WClYl8g3hudoeFgpZ3boeEa3V7dGV5g4SnjIOPjIN9bX9zdYJ4hJqPi4+RkoyLhn57kod4gIWNg2yAcml/fnhtfHuBioN4YnmEgnFkcWh+bnVydYKcjIGAhn90dn6Ac4FvW2t9c3iIgYp7hn98iHd5cGuHgo6CiXGAd32UiYp9dG1qdoCAdXVcaWl5cVpXfVNacmZNW3NyZlxKcXhwXVtbWl11f3VpWWJbZ2VuYmlNV2ZRPV5mXV52Zl91cVtZVW9kWmRweVtoXmBnbWdqa2hweH2ObWqBhH95boF7fYF/gnp1goGMk4VwgItud32Ae3uIk4mAaXt+anR8coZ7c3d9f4x6eIR+fGuMjIObnZaMgoFsjX5raH+Pjnx+f4OUgn99iohrdXFnaWNbY2dzb2BhbHRhaHCJemFzdF5iY5ugkG5cNVqvtXVqgIp+k4d3iJiHdZCMindwbYWChnR5iXiJfZOIen5zZ3WIfn2Xb3GGfWh2eW5leomFpYeAh42JfW19dH5/e4qXhoGSkJiIi4SJfI+Jcnx+hXxpfm1rgHt5anp2goeAcmB3gX5xZHJndYJudXuGlZKCfYKAcHd6fHV+bVdtfXVzin+GdoZ0gol6d3JtiH+Of4NxfXt8kYeIem1taG2CgXVuXWhmdHJSXHxOXHFdT1xzcGRWS3N5alhZWVphcYF1YV1dYGZkaGhmTlpoTkFhZFxgdmFcdW1YWFN0YVtlb3JXal9iaGtnbWxpcHd8k2xohIl9fHB/fnuBf4J6d4CAiYuEcnuHb3F3hH97iY2PhGp+e254eXeKd314gIKHf4R+fnpthIyImKONhYR7dot6a22FiZJ5fXuCkoCAfYqEcHJwY2ZeWWdfcHBgYWhwZmpviXRhdG9bYGRqdnt/vpynpMm4coWEc5R9eYiUhHSSjYdyc3CEeoJzdYZ0iHeUiXl5cWR3hnqAkmhxhHVmd3ZkanyEiJ6CgH+Ojn1xfnKDeH6QjoJ3lYyUj4iCiHqJiWx5en91aHppbH95c2l6doCDfWhgeId9amp0aHuAanaBjZGVf3x+fnF8dnx0fmJVdXtxcoiCgnuBcIaJd3hvb4KBi318d3x7c42EgXVocGdsiIJycF1oY3RvTGZ2TF5vVlRadG5iUU90eWJSWFhdYXCCc1thXWhlZWNqZFFbcUlEZGJcZHFeXHhoVVdWd15cZm5oVmxeYWpnZW5uaHB3epNuaYiMeX1ze355goGCfHZ9g4iGg3B2g3Nud4KCfoiLlH9xgHx4enqBi3SDeH+BgYKEeoB1b32Ji5ueiH6Ge3eGe2d1h42Ren+AfImGhHaPgGdwbmBlXFhmWW1zYWFhcWxsaIluYHNpWF5jbYB3qdqpx4aIs3KKeXCOdn2IkIF7lIuAdXR1fnZ/b3B/bYV0lIZ4dGxgeYF5iI5lcYNvZ3VuW219gZCTgIF5kpJ9d3pshXR/j4qDcpWJkY+HhYV7f4ZtdXZ/bWh3Zm18dm1qd3Z/f3xgYniGemh1dmN+e2h1ho+Oln11gHZygHp9bYBZVnJ9b3OChn5/d2uIhnN4anR/goJ8eXt3enGKf3tyZ3NkbYuEbHNbal92Zklvb0xbY1hXVnltYlBTdXdZUVZYXmByhG9cYGNtZGNdb2NUXXJHQmZfXmZpXVp7Y1JWXHVbW2drYVZrYGBuZmZscWhwdniOdGuOjHV/dnh9d4GDgXt0foOIiINvcX91cXV9hYGJjYt7d394hHx9hYd4h3x9gX6FgHt+cnZ4i46fjIl7ind1g3pefoeajXmHhHSGh4R3iXtibm1cYltbYVVqdGRgW2hvcGeHcWFxZldcY2t/fMrOh7qia25vi21yhHJ+hot/e5KFenl0eXV0empsdmOEdpKCdm9nX3yBeYuIZXGAampxY1hte4aciYOCcpeTd317bYZvgImKhnCWjpCIhoyEe3l/cnJwfmdocmNteHFqbHF3fXx5XWV5gHdpdXhmgndodYeMjpV9c4dqb36AeG59XVdwfW1zfol7gG1uin9wdmZ2fn9+gHV7cHlzhXt4cWVyYG2LgWtyWGtfeF1JcGxOV1ZfVFV8a2JPVHZzUlJVV15idIZpXWBramZiWW5hWGNwR0FoXWFmX1xWfF5PVmVxWVtqaF1YaGFfcmZqaHFncXN2hnlulYp0f3t3fnmDh4B1c3+FhY6DcHB7eHd1eYaFh4yGenx/dYt+fYaEhId/fn99h398eHZ5dpGTn36NfYtudYB6ZISImIZ0kopvhYWCeoN1Y25qWV9bXV1VaHNlYFlkcnJngXJha2RXWl9pf3i+rnqfuG5idIdpdXxyeoSHe36NgHd4cndvenZlam9hh3WOgXNqYl59d3iKgmVwfWhra1pWb3iLpIGFf3CZknF/d3SAbH+Aj4Zyk4eMiIWJhX15dXNvaXlham1hbXZqZ2treXd6d1tnfXx4ZXJ9boR0ZnWGjYaWgHCLZ2t7g3RsdWJbbnpqc3qKe4BldId8bXBndH12fH5wemp5eoB4dm9lbGFsiX1sblZqYXhWS2tsT1JPaU5ZfWhiT1V2bE1RVFVeZnaEZ11hcWhnYVdpXFxraUpFa1piZVdYVXlaTldualldbGVdWmVjXnRmbGVxZnNwdIF4cJmFdn9/eH98hYd9dXOCh3+Vg25zeXt7c3KFhoiIhHmBfXaPf32EiY6EgYN7fouDe3d8d3aanZd6ioOHanZ+fWyEhpWBco+CcYWCfoKAb2ZsZ1hdW1xbVGVwZV9YY3J1aXZwZGViV1tbaH9wb3KAc4plZnp/anV3dHSEhXiBhXp3dHVua3pwYWhrZ4Z0jYRuZl5ffG96iX1obXdmamRWV3Nwjqd9hHx2lpBze3F7eGx5eo+DdZd8h4aDh4R9dXFzbWh1XW1pYG11ZGdmaXpve3JZZ4F2dWhwgHiCdmJ3hYt8lYJvjGtte4FxZnNlYGt4ZnF1iXp9YXWDdWlrcXR5b3h3cntlfX1+d3VuYmVgbIZ8bWtWamNyVExqa1BMT3BIXnxmYU5WdWVKT1NYYWt3fmZdZ3NpZV9XY1dicV1LS2tYZGJVVFVzVk1ZdmVaX2xgXFtjZV93Z21icGl0b3F+dXSZgXd/gHiAf4aEen12goN+mIVucnR8e3RxhYWOgYB6i3V0kIB9gZSOgIWEfX6Mhnp+gXZ7o6WKeYmGhWx1fHx1hIONe2+Fc3qFfYKDdW5qaWVWXVtbWlNjbmVbWGJ0e2ppbWhgYVdeWmmAaWxvgGdtYml7emt0dXVvhoJ6gX52dW56aGp5al9lbmiBd5CEaGVYYXZpfYZ5bmlvZmddVVhvaY+od4F6fJCOeHRufW1xdHiNfneUdIWDgIWJdmpzdmhpb1xtZV5uc19nYmp4aHttW22DcnRqb4B+eXdhd4WEeJCGc4hycHp/cmNxaFttdmRvcod6d2FygG9naXhzcWt3dnN1YoJ6fXZ1b2NiYm18fGtrVWliZ1RMbmhQSFJsRWF5ZmJNVHJeSk1VWWVseHtmX21wamNdVmBVb25XSlNoWGdeWE1VbFRLXXpfXF9sXV1bYmVgemhsYW9vdm5vd3V6mH13gIF5gICHhnp5eoN9gZOEcXR0fnp2dIWIkH6BfZBsc5WBe4KfhX+HfYB+hoKAint1hKyff3qIiIRscoJ6doGBgnVuh299gHSKgGpvbmVkWF9aWlpVYmpnXFpfdYJpXm1sXGFXW1xrgWVxdX1pal5teHdodXhzbod8fn56dnNsemdpd2ddZHNneneSgWNjVGRvZoGEdnZmaGphV1ZZaGOQqG9/d3+Kjnpwb3tmd215inp2jnGDfX9/h25kd3RlaGldbGJecHBbZ19tdWV6aF10gG5ya3F7fnV1YnWGjHuIiIB/eHJ1fnRhcGxYcHJhb3CDenRjcYBrYGx6bmloeXdzcGSDdHh4dHBkYGNtcn1qbFRpXl9VTHVjUUdXYkdjd2ZhTFRwWUtMWFhobHZ6ZWRtcWZjWlhdWHZmVEpcY1hpWFhIV2VRSWN4W11fbVteXGJjXn9pamBudHhtb252g5d5coGAfX+JjIZ+dXaGeIaMfXR1dYJ5enqCjI59foWJanSWgXuKnX1+hXmAe358holzcY+ujHt7h5B+ZnGIenR+fXZyb4ZsfH5tkHpjcHBiZV1lVlpZV2Nma2BdXXOGaFlxblteWFpcbHticXd2bGNcbnR1aHV3cW6FeX+Bendvb3RlaHRlW2d1ZnZ2knpfXVNlZWqCgXN8YWNpXFRXXmJkkKVpeXSChZB4bG15Zndse4N5dIdygHh8eYBpZXdtYGdhX2tgXnVrWWZdb29iemVbd3xrbm5weHl0dWVzg5N/iIOJenZvcn1yYXhjWm5vYG9wgHpzZXGAZF5tdWhjZnh6cmttgHNye3FxYV5lbW59ZGlUaFlaVU55X1JKWllIY3VkYUpUbVVKTFpXaWxye2RsbHNiYVlaW2F2XFRLY11ZalNWR1lhTkhqdlhfYW5bW19iY12FaWhibnd5bW9qdoGQeG2DfoCCkoiEgXZ1iXSMhnRxdnaBd319foyPgX+TfnB4loN9mZJ5gIB4eX5/c4eEc3CZonp7gImVeWV1iHpzeXdsdHB/bHl8cJJzXnBvYWdibFRbWldpZG1mXFxxiWVTcm5bWVhXYGx2ZGp1ampfW250cm10dHVrhn1/gH13b25sZGlwY1trcmR0do5zXFdUZGBxf35xgVxiY15TWmFcZJOfZXJxhYOQc2tqeGxubnl5enGAdn9ze3p7ZGZ2aF5jW2FoXF53aFdiXnBoYXdhW3x2ampyb3h0c3RpcYKVg4d/hXZzanB8bWZ3V1tpbGFwcX94c2VvflpgcHBhXmlvfGtqcn1xb3Zpb2BbZGtse2FmVGdVWFNRd1xSUFlSSGRzYmBHVmtRSVBaVWtsa3xlbW9yYVtaWFlscFdTUGZXV2lTVEZaXE9Jc3VYYGNuY1hhYWJdjGpjZW16eWxuaXZ5hnprhH2AhZl8goR5fYhtj4Zxb3Z6fXSCgn2Lj4OCl3R4gpSFgZ+JdYF/gXR/gnCHg3Zvopdze4aLh3tmd4tvbnxwZ3hxe2xzdnONa150b2JnZWtTXlxWaGJsbFtccY1kTm9tXFZXVWdpdGhjdGVlXlpwdm9xdnZ6bIh9gH2Id5BzY2Rrb2Fcbm1jc3iHa1pUVmJjd3x8cIRcY19jVFpgWmOXlWNucIKFiXJpZnluZHJ1cXpreXR1b3t/dl9nc2RcX1diZFlhdWVVX2BtZGFxXV1+b2hpc3F0cHV2bG2FlIKJfIVxcmdufG9xb1JaZWlkcHJ/dXNibHVVYnFqW15uZHtka3R8cXFxaWxfWGRpanheZlVkVVdRVm9YUVdUUEhlcl9hRlhrT0lYVFZuaWR8aWt4a2FXXFVbdGRTUlZoUVlnVFNIWltQTnl3W19lbWpaYmBfXo9uYWdreXZubml2dn9+bYSAfoaXe3+HgYp/a5OIcmd0gHt1gIN+iY5/i5NzfYqRhYefhnt/hoxzgIZzfYJ1bqSMc4GNi3d4bnqNYGV9cWd6dHlsbXF3g2dkfG1jZ2doU2BfVWdgbG9cXm6OaE1pbGBVVlNvZnNrZnhlZV1acnZuc3t5c26Je4B3nHt6a2FlbG1eYG5qZXB5fmdaVlhfbHh7em+DX2JeZ1ZZYFhknIhia3CBhnx3a2p2bFt1cGp5aXVybm98gXNYa29gWV5WY2RYZXFjVF9iaWFibFpgfmtmbHN1b214dmxohox/iXuIbXFmcHtscWxhWF9nZ25yf3NyXmlsU2VwZFVibWF4YW90enRpbmtqXldgZmh1XGRWYlZUT1lnU09dT1BIZXBdY0daak5KYEtYbWVfeGhufmRgVV5UXXVbVFJgZ05eYlVTSlxaUVp2dl1fZm1oWGNhW16OcGNoandyc21odnR5gnOCg3qIjn58ioiOeW6PinRsc4Jzf3+IhYeShJWPen2Mj4iRm4SAfIyEcn+Bc3R3cW6Tk5OTk5OTk5OTkpKSkpKSkpKSkpKSk5OTkpKSkpKSkpKSkpKSkZGRkJCPj4+Pj4+Ojo6Pj46OjY2Njo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo2NjYyMjI2NjY2Njo6Ojo6OjY6OjY2Ojo6Oj4+Pjo2NjY2Oj4+Pj4+PjoKAfnp6fX5+fX1/fn59fn5+fn5+fn+Af4CAgIGAgIB/gIGBgYOHjI6Ojo6NjY2NjY2NjY2NjZKSkpOTkpKSkpKSkpKSkpGRkZGSkpKSkpKSkpKSkpKSkpKSkpGRkZCQkI+Pjo6Ojo6NjY6Ojo2NjY2Njo6Njo6OjY2NjY2Njo6Ojo6Ojo6NjYyMjY2MjIyNjY2Njo6Ojo6NjY2NjY2Njo6Ojo6OjY2NjY2Ojo6Ojo+Ogn99ent8fn59fX5+fn5+fn5+fn5+f4B/gICAgICAgH+BgYCBg4aMjY6NjY2NjY2NjIyMjIyMkpKSkpKSkpKSkpKSkpKSkZKSkpKSk5KSkpKRkZGRkZKSkpGRkZGQkJCQj4+Ojo6OjY2NjY2Njo6Ojo6NjY2NjY2NjY2NjY2Njo6Ojo6Ojo2NjIyMjIyMjIyNjY2NjY2NjY2NjY2NjY2Njo6Ojo2NjY2NjY2NjY6Ojo6Cf3x6fHx9fn19fn19fX59fn5+fn5+gH9/gICBgYGAf4CAgICDhouOjo2NjY2NjIyMjIyMjIySk5OTk5KTk5KSkpKSkZGSkpKSkpKSkpGRkZGRkZGRkJCQkJGRkZCQkJCPj46Pjo6Ojo6Ojo6Ojo6NjY2NjY2NjY2Njo2MjY2Ojo6Ojo6OjY2MjIyMjIyMjIyMjY2NjY2NjY2NjY2NjY2Njo6NjY2MjIyNjY2Njo6OjoN/fHp8e31+fH1+fXx9fn59fn5+fn5/f3+BgYGAgICAgYCAgIOGi42NjY2NjIyMjIyMjIyMjJFtZmdnZ2dnfYWEhISEiF0tMDAwMC1GoaGhoaGhoJqZmpqampqKg4SEhIOEd2VnZmZmaFxDREREREJLkpqZmZmZmnpsbm1ubm9qZmdnZ2dmb4SDg4ODg4OLjIyMjIyMjY2NjYyMjY2NjY2NjY2NjIyMjIyNjY2NjY2OhX19e3t6fX58fH59fX1+fX1+fn5+fn9/f4GBgYCAgICBgICAgoWKjI2MjIyMjIyMjIyMjIyMkWdfYGBgX155g4KCgoKGUxgdHR0dGTekpKSkpKSjnJycnJycnImBgoKBgYJyXV9fX19hUjQ1NTU1Mz+TnpycnJydd2VnZ2dnaGNfX19fX15qgoGBgYGAgYqLi4yMjIyMjIyMjIyMjIyMjY2NjY2MjIyMjIyMjY2NjY2GfH16enp8fXt8fn19fX59fX5+fn5/f3+AgYCBgYGAgIGBgYGChYqNjYyMjIyMjIyMjIuLi4uRjo2NjY2NjY+QkJCQkJCMh4eHh4eHiZOTkpKSkpKRkZGRkZGRj46Ojo2NjYuJiYmJiYmIhYaFhYWFho2Ojo6Ojo6LioqKiomKiYiIiIiIiImKioqKioqKi4uLi4uLi4uLjIyLi4yMjIyMjI2NjIyMjIyMjIyMjY2Njoh8f3l7enx8e319fX18fX19fX5+fn9/f4CBgYGBgYGAgYCAgYKFioyMjIyMjIyMjIuLi4uLi5GSkpKSko2QkpGJh46KkJKTkYuSjo2RiI+RkZGRkJCQkJCPj4+Pj4+Ojo6Njo6Ojo2Njo2Njo6Ojo6NjIyMjY2NjY2NjY2NjY2NjY2MjIyMjIuLi4uLiouLi4uLi4uLi4uLi4uLjIyMjIyMjIyMjIyMjIyMjIyNjY2NiX59eHh5fH18fX19fHx9fX59fn5+f3+AgICBgYGBgYCBgIGCgoSKjIyMjIyMjIyLi4uLi4qLkJCRkZGPhI6QkIaKj4WNkJCOhY2HhomGiJCQkJCQkJCQkI+Pj4+Ojo6NjY2NjYyMjIyMjIyMjIyMjIyMjIyMjI2NjIyMjIyMjIyMi4uLi4uLi4uLi4qKiouLi4uLi4uLi4uLi4uLi4yMjIyMjIyMjIyMjIyMjIyMjI2Lfnx3dnh7fXx7fX18fH19fn5+fn5/f4CAgIGBgYGBgIGAgIGChIqMjIyMjIuLi4uLioqKioqQkJCQkIqFjoiOhoaPiY2QkJCIi4aFhIWHj4+Pj4+Qj5CPj4+Ojo6OjY2MjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMi4uLi4uLi4uLi4uLi4qKioqKi4qKi4qKi4uKioqKi4uLi4uLjIyMjIyMjIyMjIyMjIyMjIt+e3d2eHt8fHx9fX19fX1+fn5/fn9/f3+AgIGAgYGAgYCBgYGEiYyMi4uLi4uLioqKioqKipCQkJCPhYOMjpCOiYyKjpCQkIiLhIeEhomPj4+Pj4+Pj4+Pjo6OjY2NjYyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIuLi4uLi4uLi4qKioqKioqKioqKioqKioqLi4uKioqKiouLi4uLi4yMjIyMjIyMjIyMjIyMin18dnZ4fHx7fH19fX19fn5+fn5+fn9/f4CAgYCBgYGBgIGAgYSJi4yLi4uLi4qKiomJiYmJkJCQkJCMhoyJjoeFjYmOi4yQiIyGhoiDio+Pjo+Pj4+Pjo6OjY2NjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyLi4uLi4qKioqKioqKioqKioqKioqKioqKi4uLioqKioqKioqLi4uLi4uLjIyMjIyMi4uMjIyKf353eHp8enp8fHx7fX1+fn5+fn9+fn9/gICAgICBgICAgYCBhIqMi4uLioqKioqJiYmJiYmPj4+Pj5CMjouPjIqPjI6MjY+LjoyLjomOj46Ojo6Ojo6Ojo6NjYyMjIyLi4uLi4uLjIyMjIyMjIyMjIyMjIyMjIyMjIyLi4uLioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi4uLi4uLi4uLi4uLjIiAfXh5enl6e318e3t9fn5+fn5/f35+f39/gICBgICAgIGBgIGEiouLioqKioqJiYmJiYmIiI+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Ojo6Oj46Ojo6Ojo6Ojo2NjYyMjIyLi4uLi4uLi4uLjIyMjIyMjIyMjIyMjIyMjIyMjIuLi4uKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLi4uLioqKi4uLh4B8eHp6eXt8fHt8fH1+fn5+fn9/fn9/f39/gIB/gYGAgIB/gYSJi4qKioqJiYmJiYmJiIiIj4+Pj4+Pj4+Pj46Pj4+Oj4+Ojo6Ojo6Ojo6OjY2NjY2NjY2MjIyMjIuLi4uLi4uLi4uLi4uLi4uLjIyMjIyMjIyMjIyMi4uLi4qKioqKioqKioqKioqKioqKioqKioqKioqKiYmKioqKioqKioqKioqKioqKioqKi4uHgHt5eXh6fHx6e3t9fX5+fn5+f39+f39/f39/f3+BgYCAgH+BhIiLiomJiYmJiYmJiIiIiIiOjo6Ojo6Pj46MjI+Sj5COjo6Ojo6NjY2NjY2NjY2NjIyMjIyMjIuLi4uLioqKioqLi4uLi4uLi4uLi4uMjIyMjIyMjIyLi4uLi4qKioqKioqKioqKiomKiomJiYqKioqKioqJiYmJioqKioqKioqKioqKioqKioqKi4aBe3h5eHp8ent7fH19fn5+fn5/f35/f39+fn9/f4CAgYCAgIGEiIqJiYmJiYmJiIiIiIeHh46Ojo6Ojo6Ojo+MkJOQkI+Ojo6NjY2NjY2NjYyMjIyMjIyMjIuLi4uLi4qKioqKioqKi4uLi4uLi4uLi4uLi4uMjIyLi4uLi4uLioqKioqKioqKiYmJiYmJiYmJiYmKioqKiomJiYmJiYmJiYqKioqKiomJioqKioqKhYB6eHl5fHt6ent8fH1+fn1+fn9/fX9/f35/f39/gICBgICAgYSIiomJiYiIiIiIiIeHh4eHjY2Ojo6Ojo6Pj4+PjoyNkI2NjY2NjY2MjIyMjIyMjIyMi4uLi4uLioqKioqKioqKioqLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4qKioqKioqJiYmJiYmJiYmJiYmJiYmKioqJiYmJiYmJiYmJiYmKioqJiYmJiYmJioqFf3l6eXh7e3p7fHx7fn5+fX5+f39+f35/fn+Af3+AgICBgYCChIeKiYmIiIiIh4eHh4eHh4eNjY2Njo6Oi42Nj5WPiYyPjYyNjYyMjIyMjIyMjIuLi4uLi4uLi4qKioqKioqKioqKiouLi4uLi4uLi4uLi4uLi4uLi4uLi4uKioqJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYR+eXt5ent7ent9fHt+fn59fn1+f35/fn9+f3+AgICAf4CAgICEh4mIiIiHh4eHh4eHh4aGhoyNjY2NjY+MjImKj42IjJGPjY2NjIyMjIyMjIyLi4uLi4uKioqKioqKioqKioqKioqKiouLi4uLi4uLi4uLi4uLi4uLi4uKioqJiomJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJg355e3p8e3p7fX17fH9+fn5+fX5/fn9+f3+Af4CAgH+AgH9/f4OGiIiHh4eHh4aGhoaGhoaGjIyMjIyLiYyKiIeJhoyOjJCMjZGOjIyMi4uLi4uLi4uLi4qKioqKioqKioqKioqKioqKioqKiouLi4uLi4uLi4uLioqKioqKiomJiYmJiYmJiImJiYmJiYmJiYmJiYmJiYmJiYmIiImJiYmJiYmJiYmJiYiIiIiIiYmCf3h7e3t6enx9fHx9f39+fn19fn9/f39/f4F/gIB/gICAgICAg4aIh4eHhoaGhoaGhoaGhoWMjIyMi4yOjoyKioeEiIuKjIuNjo+Li4uLi4uLi4uLi4uLioqKiomJiYmKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiomJiYmJiYiIiIiIiIiIiImJiYmJiYmJiYmJiIiIiIiIiYmIiIiIiIiIiIiIiIiIiIJ/eHp7enp6e3x8fX1+f35+fX1+f39/fn+AgICAf3+Af4CAgYCDhYiHh4aGhoaGhoaFhYWFhYyMjI2NjJCSjI2Ii4mJi4uLi4mLjIqMi4uLi4uLioqLi4qKiomJiYmJiYmJiYqKioqKioqKioqKioqKioqKioqKioqKiYqJioqJiYmJiYmIiIiIiIiIiIiIiImJiYmJiYmJiYmIiIiIiIiIiIiIiIiIiIiIiIiIiIiHgXx4e3x5enp8fHx9fX9/fn59fX9/f39+fn+Af4B/f3+Af4CAgIKEh4eGhoaGhYWFhYWFhYWFjIyNkY+PjZGJjIaJjIuIiImMiYeNjo+NioqKioqKioqKiomJiYmJiYmJiYmJioqKioqKioqKioqKioqJioqKioqKiYmJiYmJiYmJiYmJiYiIiIiIiIiIiIiIiImJiYmJiYmJiIiIiIiIiIiIiIiIiIiHh4eHh4eHh4WAenl9e3t7enx8fHx9f39+fn19f39/f35+f4B/gH9/f4B/gH+AgoSHhoaGhYWFhYWFhYWFhISLi46PjoyLj4iHiYmMjYWFjo2KiYyNi46KioqKiomJiYmJiYmJiYmJiYmJiYmJiYmKioqKioqKiomJiYmJiYmJiYmJiYmJiYmJiYmJiYmIiIiIiIiIiIiHiIiIiIiIiIiIiIiIiIiIiIiHh4eHh4eHh4eHhoaHh4eHhH55eX16enp7fXt8fX5+f35+fX5/f39/fX5/f3+Af39/f39/f4CChIaFhoWFhYWFhYWFhISEhIuLjI6MjI2Lh4mIiomGgoiNjoiKi5GTj4uJiYmJiYmJiYmJiYmIiYmJiYmJiYmJiYmKioqKiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiIiIiIiIiIeHh4eHh4eIiIiIiIiIiIiIh4eHh4eHhoaGh4aGhoaGhoaGh4eDfXp5e3p5enx8e31+fn5/fn59fn9/fn9+fn+AgICAf35/f39/gIKEhoWFhYWFhISEhISEhISEioqOjYmIiIqKh4iHiomIioiIh4qGi5GPiomJiYmJiYiIiIiIiIiIiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmIiIiIiIiIiIiHh4iIh4eHh4eHh4eHh4eHh4eHh4eHh4eHhoaGhoaGhoaGhoaGhoaGh4J8eXl6eXp7e3t7fX5+fn5+fn59gH9/f39/f4CAgH9/fn9/gICAgoSGhYWFhISEhISEhISEhISKi5CPiYmJi4qHh4WHiYuKiYSLjYmOjYmJiYmJiIiIiIiIiIiIiIiIiYmJiYmJiYmJiYmJiYmJiYmJiIiIiImJiYmJiYiIiIiIiIiIiIiIiIeHh4eHh4eHh4eHh4eHh4eHh4eHh4eGhoaGhoaGhoaGhoaGhoaGhoaGgXt4enp4e3x7e3x+fn9+fn5+fX1/f39/f3+Af4B/f39/f3+Af4CChIaFhYSEhISEhISEhISEhI+Qj4+IiYuIhoeIiYuLjIuJioqNio6Oj4iJiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIh4eHh4eHh4eHh4eHh4eHh4aGhoaGhoaGhoaGhoaGhoaGhYWFhYWFhoaAe3h5eXh4enp8fX1+f35+fn59fn9/f39/gIB/gICAf39/gIB/gYKDhoiGiIaDhISEhIODg4ODkpKOioeKi4qLh4uNiYqJi4iHiouIio+SioiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIh4eHh4eHh4eHh4eHh4eGhoaGhoaGhoaGhoaGhoaGhoaGhoaFhYWFhYWGhn96eXh4eHl5eXx9fn5/fn5/fn1+f35/f3+Af39/f4CAgH+AgH+BgoOHjo+PjoiHhIWFhoaFhYWSkI6KiYmIiImKioiIh4aKjIiHiYmOkJGNh4iIiIiIiIiIiIiIiIiIiIiIh4iIiIiIiIiIiIiIiIiIiIiIiIiIh4eHh4eHh4eHh4eHh4eHh4eHh4aGh4eHh4aGhoaGhoaGhoaGhoaGhoaGhoaGhoWFhYWFhYWFhYWGf3l4d3d3eXp5e3x9fn9+f35+fn5+f35+fn+Af4CAgICAf3+Af4GBg4eOjo6Ojo6Mjo2OjY2MjZCQjomHhoiJiYeIiouIiYyJiYaKjY6PkYuIiIiIiIeHh4eIiIiIiIiHh4eHh4iIiIiIiIiIiIiIiIiIiIeHh4eHh4eHh4eHh4eHh4eHh4eHh4aGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaFhYWFhYWFhYWFhYZ+eXd5d3d6eXl8e31/fn5/fn5+fn5+fn9+f4B/fn+Af39/f39+gIGEiI6Ojo6Ojo6Ojo6Ojo2NkJGOi42JjIiIiYaHiYaIioiHi4yLjpCQiIeIiYmJiIeHh4iIiYmIh4eHh4iIiYiIiIiIh4iIiIiHh4eHh4eHh4eHh4eHh4eHh4aGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoWFhoaFhYaGhoWGhYSEhIWFhoaFhIWFhX55d3l2eHl4e3x7fn5+fn5+fn5+fn5+f39+f39+f39/f35/f3+AgYOGjY2Ojo6OjY6NjY6OjY2Qj42Ni46KhoiKhISLiYeDhYSDi4mLj42JjI6QkI+NjYyLjY6Pj42NjI2Nj4+Pjo6MjYyMjY2KiYiHiImHh4aHh4eHh4aGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoeHiYqKiIeJi4yNjo2LiImLi42OjYyJiImMgHl3d3Z6eXh7e3t+fn5+fn5+fn5+fn5/f39+fn5/f4B/f4B/f4CBg4aMjY2NjY2NjY2Qj4+Pj46NjI6KiYuMjIeFiY2Lh4aIh4aHh4uNjo6Pj4+Pjo+Pj4+Pj4+Pj4+Pj4+Ojo+Pj4+Pj4+Pj4+Oj46Oj46Mi4uJh4eHh4aIhoaGhoaGhoaGhoeLiYeHiIiLjY2Mi4yLjY2Ojo+Ojo6Pj46Ojo6Ojo6Ojo6Njo6NjY2AeHZ4eHp4enx6fH5+fn5+fn5+fn5+f39/fn59fn9/f39/gH9/gIGDhoyMjIyMjY+QkpOTk5KSjYyMjIqHioyKh4eJiYWCiouIiYWJjpCNjo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6NjI2NjI2LiYaHh4eHiYqLjY6NjYyNjY6OjY2OjY2NjY2NjY2NjY2NjY2OjIyNj4+OjY2MjIyLi313dXd5enp7e3p+fn5+fn5+f35+fn5/f39+fn1+f39/gICAf3+AgYOFj5KRkJGSk5OTk5OTkpKLi4uLiomMiouLiYuKhoeOjYiIjI6OjIuMjIyNj46Njo6Ojo2NjY2MjY2NjIyMjIyMjIyMjY2NjYyMjI2NjYyMjI2NjIyNjIyMi4yMi4yMjI2MjIyMjIyMjIyMjIyLi4uLi4yNjY6Sk5OSkpSRkJOVlZSTk5COjo6Oe3Z2d3h6ent7e31+fn5+fn5/fn5+fn5/f35+fn9/f39/gIB/f4CBgoSNkpKTkpOSkpOTkZKSkoqJioyJi4qJjIuKioiHiYqKi4mKjY2Mj46Nj5KUlJOUlJOTkpGSkI+Ojo2NjY2Pko+OkZGOjIuKioqLi4qKi5CPjoyMjIqKioqKioqKiouKioqKi4yLi4uMjIyKiouLi46RkpOTk5SUk5STk5SUlJOTk5KSkpKSk5F6dXZ2eHt7e3p6fX5+fn5+fn5+fn5+fX5/fn5+f39/f3+Af39/gIGChIuRkZGRkZKSkpGRkpGRiYmIiIqMiYiJiYuJhoSJhoyKh4ySkpKTk5OUlZWWlZWUk5OUlJSUlJSUlJSVlZWVlZWUlJOTkY+QkZKQjoyRlZWVk5KSjo+QjYqKi4qKi42OjY6RkpCRkpKSkpGRkpKSk5OTk5OTk5OTk5OTkpOSkpKSkpKSkpKSj3h1d3l6e3t7ent9fX19fn5/f35+fX5+fn5+f39/fn9/f4B/f3+AgYKEi5GQkJCSkpKRkZGRkZGIiIiIi4uJg4eLi4yMiIeHjYyNkpSSkpOTlJWWlpaVlZSSkpOTlJSUlJWVlZaXlpaWlpWUk5SUlJSVlJSUk5OVlZWUk5KTk5OTkJGSkZGSk5OTk5KSkpOSkpKSkpKSkpKSkpKSk5OTk5SUk5OSkpOTkpKSkpGRkZGPdnJ3enp7e3t8fX59fX1+fn9+fn9+fn5+fn6Af39/f3+Af3+Af4CBgoSKkJCRkZGRkZCQkJCQkIeHh4eIiIiFi4+KjI6Njo+OkJWUk5OTk5SUlZWVlJSUk5KSk5KTlZSUlZaWlpaWlpaWlpSTk5OTk5OUlJOSk5SVlZSTkpKSkpOTk5OTk5OTk5KSkpKSkpKSkpGSkpGRkZGRkZKTlJSUlJSTkpGRkZGRkZGRkZGRkYx0c3d6ent7e3x9fX1+fX5+f35+fn5+fn5+fn9/f39/fn9/f39/f4GDhIqQkJGRkJCQj4+Pj4+Ph4iKi4yNjYuOj42Mjo6RkpGSk5OSkpKSk5SUlJOSk5OSkpKSkpOTk5OTk5WVlZWUlZWUk5OTk5KSk5OUk5KTlJSUk5KSkpKSk5OTkpKSkpKRkZKSkpKSkpKSkpKSkZKRkZGSkpOTlJSUk5OSkZGRkZGQkJCQkZCRinN0dnp8fHp7fXx9fn59f35/f35+fn9+f31+f39+fn59f39/gH+AgYKDipCQkZGQj5CPjo+Pjo+Oj4+Pj4+Pj4+PkI2OjpCRkpKSkpKRkpKTk5OTkpGSkpGRkZGSk5KSkpOSk5STk5OTlJOSk5OTk5OTk5OSk5OTkpKSkpKSkpKSkpGRkZGSkZCRkZGRkpKRkZGRkpGRkZGRkpKSkpKSkpKSkpKRkJCQkJCQkJCQkJGGc3V2e3x8e3x9fX1+fn1/f35/fn5/gH9+fX5/fX5/fn5/f3+Af3+BgYGKkI+PkI+Pj4+Pj4+Pj4+Oj46Oj4+Pj5CQiI2PkJGRkpKSkpOTk5OTkpKSk5KSj5KRkZKSk4aFk5GRkpKSkZKSkpKSkpKTk5KRkZKTkpGRkpKSkpKRkJCQkJGRkZGQkJGSkZGRkZGSkZGRkZGRkZGSkpKSkpKSkZCRkZCPj4+Pj4+Pj4+PkX9ydHh8fHx7fHx9fX5+fn9+fn5/f3+AgH99fn5+f39+f39/f4CAf4GBgYqPj4+Pjo6Ojo+Pj46Ojo6Ojo+PkI+Pj4+GjpCQkJCRkZGRkZGRkZGQkJCQkJGCgJKQkZKNdYeRkJCRkZCQkJGRkZGRkZGRkJCQkZGQkJGRkZGRkI+PkJCQkJGRkJCQkJCRkJCQkJCQkZCQkJCQkJCQkZCQkJCPj4+Pjo+Pj46Ojo+Pj4+PeHJ2eXx9fHp9fH19fn5+f35+f39/f4CAf39/fn5/f35/f39/gIB/gYGAio6Ojo6NjY2Ojo6Ojo6NjY2Oj4+Pj4+PjoiQkZCPj4+QkJCQkJCQkI+PkJCPkIhwgpCPkHt1iJCPj4+PkI+PkJCQkJCQj4+Oj4+QkI+PkJCQkJCPjo+QkJCPj4+Pj4+PkJCQkI+PkI+Qj4+PkI+PkJCQkI+OkI+Pj46OjoyMjY2NjIqDiYhzc3Z4fX58eX18fX1+fn5/fX5/fn9/f39/f4B/f39/f4CAgH+AgH+BgYCJjY2Ojo6Ojo6OjY2OjoyNjY6Ojo6Ojo2NiJCRkI6Njo6Ojo6Ojo6Pjo6Ojo6PjHNuiY+JcniHj46OjY6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Pj46Oj4+Pj4+Pj4+Pjo+PjY2MjYyNjoyLi4mJiYiFhYSDgoKEgnR5fXp4dXJrZWltb2xmZmdncHNzd3l9fnl6e3x9fX1+fn59fn9/fn9/f39/gIB/f3+AgIGAgIB/f4CBgImNjY2NjY2MjYyMjIyMi4uLjYyMjIyMjIyGj5GRjIyMjIyMjIyMjIyMjIyMjIyMdm16j4JzeIaNjY2MjIyNjY2NjYyMjI2MiomKi4uJh4KAh4iEgXt6gH57fXx8fXlzcnJycnV1cG1ramppZ2NkYV9bXF1eWFVXWFlTS0VJSkpLTE1PT0tgdHR3eX19eHp5e3x8fX5+fn1+f39+f35/f4CAgH+AgICBgYCAgICAgIGAf4OEhYSFiIuLjYyMjIuLi4yGiYqKioqKh4OOkJGNiouLi4uMiYmKioqKiouLi4dzbW2CeXR1gIWDhIeJiYWCg397fHl6e3pzcHFxcW1samdsbWdlZmVmZGNlZGVkZWVlZWRkZGNhYV5dXFlYWFdUUFFSU1JTTU1KSUZESEpHR0hHR0xOSWdzdXh6fXp4d3l8fHx8fn5+fn9/fn9/f39+f4CAgIB/gICBgICAgICBgYFnXmBjYWNucX17ent/fXd8fHZ4ent4eHpvcXt4eXt8e3h3e394dXd0dHZ1dXZ3dGFeZF9ianBmaGtsbm9tamlpaGhlZWRkZF9gYWJgYF5dWVhaWltdXV9gX2BfX19gYmFeXl5eWVldXF1bV1dWUlRSU1NOUUpISUZERUhMTEhGR0lLSklNbXJ0eHp7end3eXt6e3x+fn1+f39+f35/f35+gIGAf3+AgIGAgICAgICCgWdYW1pZXFtcY1xaXF5ga3FtcHBvbm5vbmtpbmxrbG9qaWtraWpraWZmZ2dnaGhhX21sXWZnZ2ViY2JhYmBgXVhbW1dYV1RWUVBUU1NNSkxLTExOTk9UWFhXVVVUUlBQTU1QT05LTE1QUU9MTEpHSUlHSEhJSEhIR0ZHSEpKSEhISUlISVZwc3V5ent5dnZ5enp7fH59fX5/f35/fn5+f3+AgX9+f4B/gICAgICAgIGBbFtYVlZWWVlaWVlYVVZoamxubmxra2poaGloZGVkYlxiZl9fYWNfXF9dYF1eWlprd2xib3NqYlpZX1tYV1NOTUtLS0tMSUtNTktKS0tMSktQTEtLRkdHSUlGR0lISUZFSEdGRkVERUVEREVJSUlHSEdIRkZLTUtJSUlIR0hLTU1LTExMVXFzdnl6e3h2d3h3ent8fn1+fn9/f39+f3+AgIGAfn5/f4CAf4CAgIB/gYJoUlRVVlNVV1lZWVdXV1tbYWNfXlxbWFZWWVZSVFJRUVVUU1NUUE1KTU5QUk9NW2pya19sdHNnUVFTUFBOTk9NSk1MS0xKSktLRklJSkxJR0pISUlFR0dGRkVFSElKR0ZHRkZHR0hKR0dISEpMSkpLSUlISktLSkhKS0pISUtMTU9QUEtUdHN1eHp6eHZ2d3d6enx+fX5+fn5/f35+fn+AgYB/f3+AgYB/gICAgH+AgmlQUlRXVVRWWVdYWFpbVFRTUlBRU1FRUU9OTlBQUU9MTlBPTk5NTEtNTk5QTU5cY25rWmlzdXBTTU9QUFBPTk5PTk5QTk1NS0lISEpJSUlJR0ZHR0dJSkhJSEhJSEhHSEdISElISUxLSklISkpJSkpIR0pMS0pJSUhKSktMTk1NTU9RTFVzcnN3enl3dnR2eHp7fX19fn5+fn9+fn5+gICBgICAf4GBgH+AgICAgICBbE9PTlRZVVVdW1lXV1hOTUpKSUZKT0xKSkdJSk1NS0pMTUpHSUlJSktLRUNFSVZiZmtxcG5tbFpNTE5NTk9NTk9MTk5OUFBPTE1MTk1MTEpJSEdJSElISElJS0xLS0pJS0pJSklJSUlJR0dKSUdJSUpKTk1OTEhJSklJSk1PT01MT1JOWXBwcnd4d3d0c3R3enx+fX5+fn5+fn5+fn9/gICAgICAgYCAf39/gICAgIFvS0pNTlFOTlVXVlZSU0lFQ0VFUkREQT5CP0RAQD5CREFAQURHRkVIRUNHSElOW2doZ3FubmlmZGBfX1hMSklKSUlLSkxQTk1MTU1MTU1NTElIREZGR0ZGRklKSUlLSkhMSklKSkpJSEhKS0tIRkdJSklLTU5OSktPTUxLTU1PUE5QT1BgcG9yd3h2dHJzdXd6fX19fn5+fn9+fn1/gICAgICAf4CAgIB/f3+AgICAgXNQUE5OUE1KS1BSUE5RQ0RCQUZRRT1DPT9FSDk6Oz0/PTxBRkA+Ojw9SFlcW15mbG5rb21tbGtpaWpiUUdFRUZFR0dHR0pHSEpLR0NER0pHQ0RFQUFDR0hHSEdISktKSElMS0lISktLTU5MTUxMSkpMS0lLTU9PUFNRT1BQTk9QUlFNUGdwb3N2dXRycXR4eX19fX1+fn5+f4B+foCAgH9/gIB/f4CAgH+Af4B/gICCdlRVUVFQT0xNUFBOT09BQkFAQkE/Oz48Pj8/Ozg5ODs7OkA6Oz48Ozs7PUpaaG5ucGpubWtqbGxkT0dFREdJSEM/QEBAQUFCQUE/Pjw9PkFAQD8+P0BFR0dHSUtMTk1OTUxNTUpLTVBVU05MTlFOTk1OTE1NTk9OTk1LS05OTk1OTkxUbnBwc3R0c3Fydnh5fX19fn1+fn5/gH5+gICAgICAgH9/gICAgH9/gH+BgIJ4UVFSVFJTUVNTUVFST0BAPT4/PD8+QEE/PT45Ozo7Ozk5Ojg4Ozw5Nzk7Oj1FYG5zbm5sbGxmUUI/Q0ZEQ0NDPzs+PkBDQ0E/Pj9BPkBAQj9APD9CQEFDRUVFSktQT1BPTU1OTExMT1JRUFJOTExPTUtOT0xMTEtMS0tKS0tKTU1LS1xxcXF0c3RycXR4eHl9fn1+fn5+f39/fn5/gIGAgH+Af4CAgICAf4CAf4CAgXxSTU9RUFFSUlRSU1NOPDs8Ozs7P0BBQkA9PDk8PTw6Nzk6Ojk3OTo6Nzg6OTk8SFx0dXFlUD46Oz1AQUA9Ozs+PD08QEJDQT9BQkE9Pj09Oz0/Q0RCQD9BREJFR0pKSkpKTE1MTExNTExOVVNLTE1USVBKSU1KSUpLS0pJSEdKS0lKZnJxc3RzdXJydnl6e31+fn5+fX9+f39/f36AgICAf4CAgICAgIF/gIF/gYCBgFZMTlBQTlJRUFBRUU44PT88PDo9PkFAQT8+PkA/Pj48PT0/QD09PT9DOz09Pjw6QWp8aT05Oz49Pj9AQEA+P0E/QEBBQEBAPT8/PTw6Oz09PD9AQUJCQUBCREZGRkdGR0dISUtMTExLTEtKS0lKSk1MTEpMS0lISUxMSklJSElLR01tcHF1dXR1c3V4eXl8fX5+fn5+fn5/gH9+gIB/f39/gH+AgYCAgYCBgICBgYCCYUtPT05OT1BPT1BQTzo8Pjw9Oz8+PkFBPz0/Q0NEQT89PkBBP0A8XG5APkRFP0BBQVtjPD09Ozo9PkFBQD5AQD9BPz89PD48PTs7PD0+QUA/QD5AQ0NEQkRFSEVFR0hISEdGSUpJSUlJSUhKSkpKTEtKSklJSEhKSktMS0lLSkpIVnBwcXNzdHR1eXp7fHx+f35+fn5+f39/f39/f3+Af4CAgICAf4GBgICAgIGBgIJtTFBRTk9QTk5PUFBPPjw8PT4/P0A+QEA/Pz9CRkQ+PDw9QD04Ojttd0g4Ozo9PkE6SWQ9PD08ODo7Pz89PD07PEA9PTw8Pjs9PD0+QUBCQUBAP0JEQ0RFRkZGQ0VHSElJSEhJS0tMTUpKSUpNTUpLSktJSEhISEpJSktKSk5MSUlfcHBycnJ0dXZ6e319fH5+fn5+fn5/f35/f36AgIB/gICAgICAgYGAgICAgIGAgnZNTk5NTk5MTE5QT0w+QTw8PT8+QkM/PkFBQUJBQFlSPD09SUxGRnV3TTc4ODo7Pj5WakE7PDw6Ojs+Pz89PTk6Pjw9Pj89Oz4/QEJDQkJDQ0FCQkFCQkRCQkRCRENGSUdGRkhJSUtNSklKSktMSkpJSkVESUlGRkhISUpKTEpGRmdwb3FxdHZ1d3t8fH18fn59fX1+fn9/foB+fn+AgH+AgICAgICBgYCAgICAgICBek5JS0tMTExFSUxOTTw/PDw9PkBAQUE7QkNCQ0BDcnlJO1x/g396fHdXPD0/PT0+RWh0TDo9Pj89PT9BQ0A8OTtBPz4+QT07P0JAQkNCQENDQUNBPT0+QD0/QUFBQENFRUBAQ0JDR0dFRENGRUZGR0VEQEFHR0ZDRkRHSEpHQz5IbG9wcHF0dXZ5fHx8fHx+fn1+fn5+fn5+f36Af3+AgICAgICAgIGAf4CAf4CBgIF+UUhLTU1NS0pLTE9RQD8+PkFBQEBBR0FCRENFQUdyeWtig4SDgoOAfV4+QENAQD1Kc3tZOj1BRUFCQkZIQz08QEREQUA/Pj1AQT4+Pj88PkBER0VAPkBBP0BDRkVDQkNDQEJEREJERUFCPkFCQkFCQEA9QUJDRENDQUNFR0E/PVZwcHFwcnV1d3p8e3x7fX9+fX19fX1+fX5+fn9/foB/f4CAgICAgYCAgIB/gIGAgX5SSEtNTUxLS05OUlVEQkBDQ0FBQkBCQ0BAQUFARW50fYKCgYN+fYR2TUFDRUA/Pll7gF0/Q0VJSklJTU1LRUNGR0dFR0VFRUREQ0E/QD4+QkZKSkdFRUdGRkpOTktKSUdHSEtMSUdHQ0REREVEQUJCQ0BDREVEREVERUZDQkFEZW9wcXF0dnV4e3x6e3t+f319fX19fn59f4B/f39/f39+gIGBf4CBgICAgH+AgICAfVJJSUpKSEpKTE9SU0dGRUdIREdIREA+PDs+QEVFaHN9gXx/hH55hXJDREVEQ1d1hoeHflhHSEpNTE5PT0xIR0hHSElJSEhHR0hIRUNFRUVGRkhKSkZFR0lKTU9PTU1LSktKTU5LSUhHSEhIR0ZFRkZGREZIR0VFSEhGSEdIRlFubnBxcnV2eXt7e3p8fX5/fX19fX1+fn1/f39/fn5/gH+BgYGAgICAgICAf4GBgIB8UEhHSElGR0lKTU5OSkxJSUpLTE5KRkNBQkNGSkdge4B/d3+EhYOEiWxBQVZ0h4mHh4eIg1dITE1MTU5MSUZHR0dER0dHR0ZIRkhFQ0RERkVEREhIQ0NDRklLS0xMTExMTElKS0pKSUlJSEpISEdISUhHR0hGRkZISklJSUlIXW9vcXJ0d3d6e3t6e319fn59fX19fX5+fYB/f39+fn+BgIGAgYCAgICAgIB/gYCAgHxNR0ZIRkVGR0dKS0pMTUxLTU5NT0tJSEhKS0tMTE5bfIKCg4OFhoaIg1ZshIeGhoaHiIiHfFBLTEtISEZGRERDQ0BAQ0NDQ0ZGRUJAPj5AQUFAQkQ/Pj9ERkhERUdJSklKSEhIR0lJSkpJSEZKSkpKSUpJSkpKRklMTEpKS0tmb3BzcnR2eHl7e3t8fH1+fn19fX19fn59f39/f35/f4CAgICAgYCAgIGAgICAgICAfU9GRkdGR0hHRUZHR01NTUtMS0lHQ0NDRElLS0xLSlSBg4SEgoKFhoaDgoaFhISGhoaHh4aKdUtKRkI/P0A/Pz88PDw+Ozo8QUFAPjw5OTg8PD07Pjs4Oz9BQkBBQ0NCQEFBRERCQ0ZISUhISExNTEdJSk1NTk1KSktLSkxNU2xwcXRzc3d5e3t7fH19fn9+fX19fX1+fn5/foB/fn9/gICBgIGAgICAgYCAgIB/f39+UUZFRkdJSUdEQ0VGTk1MSklIRT85Oj5ARUhISklJZYWEhIR/gYKDgoODhIWFhoeIiIiIiYyPaENBPTg4Ojo5ODc4ODk2NDc5Ozw6ODU2Nzc4OTc4NzU4ODs7Oz1AOzk5OT08Pjs8PUFDRUhKTUxMR0lHT1JRUFBOTE1NT1Fdb3BydHN1eHp7e3x8fn5+f359fX59fX5+f39/gH9/f4CAgICAgYCAgICAgICAgIB/f39RR0ZHSEpIRkVGR0hMTEpJSUdDQjU2OjxDQENHSUlohoSEgX6Bg4ODgoOEhomKjIyLi4mKi4yJYEM3NTU1NzY2NjU1ODczNTY4Ojg3NjU2NTY3Njc2Nzo2Nzg4OTo3NTc4OTc5Nzc2OjxAR0ZJR0lGRUZPU1JTU1JPUFBSVGVwcXN0dHZ5e3t7fH1+fn5/fn19fX19f39/f3+Afn+AgICAgICBgICAgICAgICAgH9/flJISEhJS0lHSUpJSkpLREVIRUJANjc4OD06PUVDQmWFg4GAgoODg4ODhomLiomJioqKiouJioqHZkk1OUA1ODg3NDU3ODU1NzY5OTc3Njc2NTo5Ojo6Ozc5ODk4NzY2OTo5ODg2ODU4OTtBPT4+QkE/QUtMT1FQUU9PT1JXa3FydHR1dnp7e3t9fX5/fn9+fX19fX5/f4B+fn9/f4CAgH9/gICAgICAgH+AgICAf39+VEhHSUlMTUtKS0tMSUg/QEFAPDo1Nzk4OTc7Qjo9cYSAgYOEhISEhYaJioqIh4eIiIqKjIuKioyDZVBaQzo8PT45OTo7ODo7OTo7Ojo5Ozo5PT09Pjs7PDw6Pjs5Ozs8Ozw7OTo8ODo6Ojo5OTk8Pzw8QUJESElNS0lLTFdvcnN1c3Z4e3t8fHt9f39+f359fX19fn9/f35/f39/f3+Bf4CAgICAgICAf4CAgH+Af35URkVGSUxOTkxKSk1CPzo7PDo4OTk4OTo6Ojs/Pkh+hIKChIWFhYaIiYiHhoaGiImIiYuMi4qLi4x9alM9QkRFRUJBQEI/QENBQD49Pj5APz8/QD4/PT0/Qj5AQT9APz1AQEA+P0E8Pjw7Ojs6OTs/PTs8PT1BQUNBQkNBWHBxdHR0dnp7e3x9e31/fn9/fn19fX5+f35+fn9+f4B/f4CAgIB/gIGAf39/gICAf39/flJFQ0FHSk5PTElHSzo4Ojs5Ojo8PTo7Oz09P0BCUoKCgoSFhIWEhomJiIiGhoaHiImKi4uLi4uMiot0RUNHSkxKSkdHSEVGSEdFQkFAQ0VEQ0FCQkI/QERIRUNFQ0VEQUZFRkRFRkRAQj48QD49P0A+Pz4/Pj8+Pjo7PTxgcXJ0dHV3enp7fX19fn5+f39+fX19fX5/fn5+fn5/gH9/gICAgICAgICAf4CAgIB/f4B+UERAPUNIT01HRkJEOTc6Pjo8Oz4/Pz89QUBDREZXhIKDhIWFhoaIiYmIh4aGhoeJiYqLjI2MjIyLi4laSlBOTkxPSkpLSUlKSklFQ0RGR0ZEQ0VGREJISUtHSEdGSEdFS0lLSUpLSkNGQ0NEQkFBQ0JEQ0NERENBPTs9QGhwc3R0d3d5eHt8fH19fn5/f359fX1+fn9+fn59fn+Af3+AgH9/gICAgICAgICAgH+AgH9PQT49P0RMS0BCQkE5ODw+Ozw7PkA/QT5CQkdHSVmEgoOFhYaHiImJiIiHhoaGiIiIiYqMjY2NjIyLjIFsbVVOTU9MSkxKSUpISkZER0lISUVFSEZGRUxMTUlKR0dISUpOTU5MTE5LSEZHR0VFQ0ZGRkZERUhIRkNBP0BMbHB0dXZ4eXl5fHx8fX1+fn9+fn19fX1/f35+fn5+f39/f39/f3+AgICAgIB/gICAgICAf1FBPz4/RUdHPTxAQDg3PDs7PTo+QD4/QENGSUlQX4GDhYSFhoaHiIiIiIiIh4eIiIiJioyNjYyMjIuLjn1gWFBPTk1MTUpISEVJSUVLSUdKSklKR0dHS0xOTExISElKTVFOUE5NT0tJR0lKSElESUhIRkZHR0lHQ0JBQ1RucHV3d3l6eHl6e3x8fX5+f39+fn1+fX5+fn5/f36Af4B/f3+Af4CAgICAgICAgICAf39/VERBQUJHSEI/OD9AOTo8OD0+Oz1BPj9BREhKTFVxg4SEhISFhoeIiIiIiIeGiIiIiImJjIyLjIyMjIuLil9UVFJPT05LSkdGQkdKR0xLRktPTEtKSkxNTE9QTkhJS0xPUVFQUU9PSkhKSkxKS0ZHSEdGRkhGRUVCQUJCXG9yd3h5enl5eXp6e3t+fn5/fn59fX19fn9+fn9+f4CAgIB/f39/gICAgICAgICAgH9/f39VRUNFRUdHRUQ7P0E7PTw5QD4+QEJHR0FHS0xQVnmFg4ODhISGiIiIiIiIh4eIiIiIiIqLi4qMjIyMi4uOfVpYVFRWVE9NS0pERUdMT05PV1VRUE9RU1JNU1RPTVNMUFNVVlJTUVBMSk1NTUtOR0dKRkZISkRERUVCRUNjcHV5eXp6ent6e3p6fH59fX9+fX19fXx9fn5/gH9/gICAf39/f3+BgYCAf39/gIB/f39/f1VGRkdHR0dIRj5AQj0/PT1CQEJCR1ZORk5QUFRYe4aDhYWEhIeIiIiIiIiIiIiIiIiJiouKioyMjI2PjIyMaVlYa2JGVFFRUEo7O1JTUmB1XVVWVFZZWVJYWFJaZlBVV1pdUlRXUU9NUlFQUFFLS0tISEpIRUZJSUlISWlydnl4eXl6e3t8ent8fXx9gH59fX19fX1+f39/f3+AgIB/f39/f4CAgIB/f3+AgH9/f35+U0hKSUhHRkZFPz9BQUVBQ0dFREVMWFJNVFVWWFp8hoWHhoWGh4iIiIiIiIiIiIiIiIiIlJyMioqMfmGKi4uHbVxlVjpZWVhTUT9AVlVYXGRgVllicl1dV11aVkVRWVpbWV9UWWdSVlZYVFRWVE9PTUpMSklJTE1LT01Tb3R2eHl4d3p5ent6enx9e35/fn1+fX19fn1/f39+f4CAgH9/f3+AgICAgH9/gH+Af39+fn5WSkpJSEdFRERCQT9ITUlNUEtJS1BUU1NYWlpcXHiFhIWFhYWGh4eHiIiIiIiIiIiIiImcnaCPiY5nO36LiYqMem9wWVtcW1JUUlZWVVtadYNZVX2QYVxYXV5XSVZdXVtbX1lIWVhZW11YWFlXUlFNUFFNTU9TUVFVUmFzc3Z3d3Z4eHh6e3p8fX19f39+fX59fX1+fn9/gH9/gIB/f3+Af3+AgICAf39/gIB/gHh5fVlOS0lJSEZCREBBOlBRUVdYUFBPUVNUVFhYWVpbboGCg4WEhYaHh4eHh4iIiIiIiIiIiJaanJeIioFuhomIh4SLfmdZWVxZVFZUV1JRV1ZjloBRZXJYWldfaFBgZltbWFxnYUdPWmhnXVtcXV1XUk9TUFBSVlZWVllabnJ0d3Z2dXh4eHt7fH19fX5/fn59fn18fn9/f3+Af39/gH+AgH9/gICBgYB/gH1yfX9/b3R8XVNQT01LSkVDP0A7UFBaWltSU1FPUlJSVVNWVFdfdXiAhYSEhYaGhoaHh4eHiIiIh4eIh4ORjomJiIaFiIiGfoB8XVFWWFVSVVNRUUxPTUtmeVtdVFlVVl1aTFRaVVNUXlpYV1dXemtYW1xcXlRRUVBJTk9XVlhbWmRwcnZ2dHR2eHl5e3t8fH1+fn99fX1+fX1+f39/gIB/f3+Afn56eHd2c3V7f3+AgHRrfn5rcnleW1ZVU1JPS0ZDREFNXoNsVlJTTk9RT1FVUlNSUlVjZHaAgoKDhISEhIWFhISDhoaGhoeIhn6JiYiHhoOHh4d5bXFXSkxOT0tOS0lKREVJRUM+VGRVf1JRUU5LUVRRTU9ZUk1OUVNVVU1RU1JQT01MSENJSFJUVVpcbHF1dXVzc3d6ent7fH17fX19fn19fX59fn9/f4B/f399fX5+f39/f4B+e3Zzd31+fmR1fWlxdF9kXV5cWVVQTElMSWFsknRQUVNOUVJRUltSU1JRUlVUYnN7fH+AgYKBgX99e3uAf4OChYaHgoaGhoGEgYaFhnVfXUxEP0NDQ0NCQERQQkNBQz1DSUdWQEhOTEddaVBIRk5GREVGSUdIQkRIR0lLR0RCQURAT1FNUmRydHZ1c3R1enx7e3t7fHx9fHt+fX19fn5/f3+AgIB/f3x8fX+Af39/f4CBgH12dHt/bWh8Z25xZmllZGJcWFNRUFVSc1dlW09PTkxRU1FVWVNVUVFUU09WYGtscnZ7e3h5dHJuc3RzeXh9f4OAg4OCgIKAgoGCa01HP0A7Oz4/Pz8/PmtQSmBFRkhJRUI/R0xOR01SVUlCRT8/PD08PT0/PT9BQ0NAPz09Qj5KTkdVbnR0dXN0dnh6fHt8fHx9fX19fH59fXx+fn9/f4B/f39/enl3eHd2dnh7foB+fXt4dnx1YXhnbHBqbGppZmBbUVJaXFleSkpQUU5LTFFSUVRVVVdRUVdVUFhbYl1hZ21tbG9rZ2BucmptbHF1e3p9e3h6fHx4d3hlQ0BAQj06QkNBQURCXF1Pe05PTk5LTE1PT1FMS01XTUhHQEI8OTc3NTk5PTs7Ozg5ODo/PEJIP1xzdHV1dXZ3eXx8fH18fH19fn58fX19fX9/f39/fn9/f314dXZ6e3p3eXh1d3t8eXh1eXdjcWhpcG1ubW1oZl5PUF9dWklIUFJRT01QUU5RUlRWWFNSWVRPWVpbV1ldXl5fZWBdXnF2a15gZ2t3b29sam9ubmxmYllIRkZIQkFHSUVFRkRNUlBhV1JXUVBTU1JVW09PUVZQTUlERj46OTY1ODc5Nzk6MzY1Nzk1PEM+ZXNzdnd3eXl7fX18fHt8fX5+fnt9fn19f39/fn5+fn9/e3d1eX18enh8fHx8dHd2d3Z1d2tuaWhxbm9vb2prYFZXXlpYTUtUVFNQUVVPTFJTVFhYVFRZUk1XWVpWWFhWWFldV1dYaHNrXVZhc2thYV9eZGFfXllUUU5PTkxJSEpMSUlGQ1FQU1tXVFROUVNZU1xlVU9TU1FOS0lIQz9BOTk5ODk3ODg1NzU3ODU5OkducXR3eHl7e3x+fX18e318fn5+en1+fH1/f359fn59f358dHR1e3hycW9vbnR4cXJzeHZ1cWZkZ3JucHBxbm1kXV9fWVdPUFhWVlNUVk9PVFZYWFlTVVRMS1RWVVVVV1BTVVdUVVJdbl5STllfW1ZZO0RWWFRbZkpMUFNTT01NTk5OTEpGUVBVWVNUT0pOT1VTVFxWUlVTUk9NTElISEY/Pj06Nzg3NjU5OTY3Njc1V3Bwc3d5ent8fX59fnx8fXx+fX15fX18fn5+fXx8fX1+fXxydnF4eHJ2dXFxbnBwb3B1dnRuamRkanBwcXJwbmZlZGNcXVJUWlZXVVRXVFJYWFlZWVNVT0pHT1BPT01SSlBQT1BOTk9UTE1JUE9TVFUyPVhNSUBRPWNhUVNRUE5QUVBOTk1RTlRSUFJNSUxKT1JQUlJTVFFST0xNS0xMSENCQT06Ojg3NjtCNTU2Njpkb3F0d3h7fHx9fnx9fH19fX18e3h8ent9fX58e3l9fH18e3B1b3d1cHV0b3N2cHFxcHR1dmNqZ2VXaHRycnFuaWlocFZWVFVYVVdVUldWVVpZWFdVUVNGRUFGR0dIRkpESEpJR0VITEhLSEZMTVBNRy9FX1I+Mz8+am9hU1JRQEdVUVBRUFFOUU9QT0xKTExPUE5OUFFRTlBPSkxNTUtHRUVEQjs9PDw5PUc2Njc3RG1wdHV5e3t8fX18enx8fX5+fXt5dnh3eXl8fXp6dn17fHp6b3Fud3JwdnFtcHNwb3Bzc3N0ZmdgaFpXa3JzcmxtbWtuYWVQU1RSU1RPV1ZWWVlWUVFRT0A9Oz0/QUJBQ0BCRURBQEdIR0hFRkhKTUxFR0NPUkM4RU5TXWdTUVNBR1VQT1FRUE5NTk1LTEtLTk9PUU1PT01ITExJS0tMS0dGRkVEPEFBPjtARTs8ODlTcHJ0eHt6e318fHt5fHp6fn58e3V0dXJ2dnp6eHpyfHt8eXltcW94cnF1bm5xcm9vb3Rzc3J1dGtnZ15lam1wa29xbWltY0xPT01RU0xUVVRYV1VMTEtJPDk4Nzs+QD48PUFAQj0+RUhHQ0VGSUdKSkBGQUFARkhFSk9IUVJhXFFQUk9TT09QTExPTUxNTE1PTltXS01RT0dJSENISkxMSkZGRkU/QkM+PEJHP0I/QWRwc3d6enp7fHt6end7d3l+fnt7cXN0cHJzd3R4eHN6e3l2d2xxb3ZxdHRsb3Fybm5vc3ZydHNycmtsZW5zaG1ubWxtbGprSUxISE9RSlFTUVRTT0tIQ0Q9OTc3OT9CPjs/QkBAPkBESUVDR0dJR0lFQkI/Pj1DQkFHSURNT2JlUU1PTldLTE1LTE1NTUxMT05TZE5KTFJJSUlFQUhKTE1OSkdJR0JBQkA/RUZFSERLbm92eXl5e3t6fHp3c3h0eHx8eXpucXJtbm9ycnZyc3h8eHZ2bXBtc3B1dGxwcHJvb29ydnVyVlZucWdseYRqbXFybm5qaG9ISkNHTU1KTVBNUE9ISkQ/QT05ODo6P0I/PEBCQUFERUdLRkNISUdHSENDP0I/P0BBPkRFQ0tOUlRMSklNVEdJSUpMSktMSUpNTU9QUlBLR0NMR0NCSkpMTU9OSUpJR0NDQ0RJSk1MSVlybXd5eHp7enl8dnJwdXJ0eHl2eGpxbmpsbG50dG10dXtzdHhyb25xb3ZzbnBvcnBvcHN0eWpOYGdzanR8eWdvc3FpcWhkcUhLREdISEdKS0lKS0RGQj0+PTk5OjtAQj89QkJDQ0dGSUtKRElJRkdHQ0M7QUBCPkBAQkVDSU1QSEhLR0hLREhJTE1ISkxISUpMS01dUkhIRE5GQUNKSk1MUE1LTUpLRkdHSk1OUU5MYm1pdnZ3enl7en1ybWxza3B0dHR1aHBtamlra3RwbnR0eXByeXRvcnFvd3NvcXB0cnBydXR5a05WbXVscXt2aW5vaWt0Z2RvRktERkVHRUZGR0VHQkNAPjw9OTo6OkBDQD5CQ0RFSUVJSkxGSUlHRkZEQjtBQ0M+QENEQ0RHTE5IS05IREhFSUxOTUdJTEdGR0lJTE5LSUdFTkhCRk1LTUxPTU1OTUtISElPUlFSTlJmZmZxb3N4dXt6fGxoam5la3Fsc3BmbWxoaWtsdG1wdXR3cW94dG90c3J2c3BxcnRzcnR1dXZ2WFZ1dWtvdHJrb3ZsaG1lX3BHSURGRkVDQ0JFQERCPj8+Ojs7PTo9PkNBPkFDRUZKRklITEhHR0dGRUNAPURFQj5BQ0NDREdISUdNUEpGRkdLTk9LRkhJRkVERUlKSEpJRkhPS0NJTUtPTU9OT1BOSkpJTFJVVVJPV2RgYW1ncHJvcnl6Z2VoaGRpbGdxbGZsbWdpa2xzbHB2dXRwbnZyb3Nyc3V0cXNzdXRzdXZ2dnl2dXR3bGp1dW1ydnFsbmxlckxIRUVHQ0JBQkQ9QkE+QT06Oj0/Oj0+QEI+QEJERkpFSUZJSEZGR0VDQkFBRkZDQkJCREVER0dJRkxRTElPSkpMTElHSEVHRkRDSUlIS0pHS1JNQk5OTVBOT09NTk9LS0tPVVdWVVNYX15caWFtaW5ocnNiZWZmZGhoZm5qZm1taGtrbXJpcXZ0c3Ftdm5vcXJzd3Nyc3R1dnZ2dnd2d3Z2dHd1anN1bnV0c3FyamtzTUdIRkhCQkFERTxBQEBDPDg6PT45Pzw/QkBAQERGSEVIRkZIR0ZGRENFQ0RJRUNHRUJFR0VGR0dFSk1LSFFNSktISElFRkhIRUNJSUlLTUtPU05EUVJQUFFOT01OUE1MTVNXVlhYVVhdWl1kYGhiamlna19lZWZjZ2dna2dna21rbWxwcmh0dHVyc252b3FwcnR4cXNzdXZ1gpF5dnZ0eHV1d3htb3VvcnN1cXFpbnlNSEdISEJCQkZFPD9CQkQ8Nzo+PTo+OkBCPj8/Q0VGREZERUhFREVDREVGR0pFRUpHQ0dIRkhHRUNGSkpHTktMS0hKTEZJSUtIRUtLTE1OT1JUT0hTVVNQUk9RTU5RTk1QV1pWWllWWl1ZWGFgYGBeaGVjYGRmaGdqaGhpZmhubGxubXFwaXV1eHJycHVwcHBydXZwdXN1d3V7fn14dnR3dnZ2eHBsdXBtc3RucHJyeE5ISEdJREJDSEU8QEVCRT04OT4+PTw8QUI9Pz5BQkZDRUNDSURDRUVGR0dHSUZHS0hESUhHSUdGREhLSUdLSE1LSktMSExLTUtKTktPTk9SVVZPS1VXU1BTUVJMT1FQT1RZWllcWllbXl5dYGNeXGFja2JgZGdncoVoZ2lmam1ucG9uc3JqdHV4cnNzdHJucHF2cnF1cnV1c355jn11dXZ2dnZ4cmh1cWtydGxxdnB0TElLSUtGQkVHRTxAR0NEQDo8P0A/Pj9CQTxAPkFBRkNFRURJRUZFR0ZISEZISElLSkZKSEhLSEZGTElIR0pHTExNTExJTUtNTU1PTFBQUVVWV09LVlZVU1NRUUxPUlJQVltbXV5bXF5fX2FgYWRdY2BlZmBlaGpkc3Nmamdna29ycW9zc25zd3dxdXZ0c21vcnVvcnNwdXJ2cnSBdnV1dXd2dXd0Z3Rya3Fya3J2bnZKS0xKTEdDRURFPEBGRERDOz8/QkBAQENBP0I/QUNIQ0ZFRklGSUZHRElJR0lISkxISEpKSUxKRkpLSElLSkdLS01NSkpNTE5OTlBLT1FSVFhWTU5UVlRSUlFQTE5UU1JXW11eX11dYF9gYWFgYWNlYmRoYmRpamd2i2xqaWdtb3NxcHFwcHJ5dnJ1dXRzbW1zc21xcm90dXRycHN3dHV1d3Z1dXRlcXNrcHFqcnZud0tMTExNR0RDQUQ8P0VFRUM9QUFDQkJDREFDREFBRUdDSEdISEdKR0NISUdISkZJTEhJSk1LTUxHS0lIS0tOUUtSUU1TTUtOTk9QUE9UT1dYWFtOU1BXXFpSV1BOVFVUVFhaX2JiX2RhXmBiXmBlYWFjaW5nYmloaG54dmxoaW1vc3JwcXJycnZ0c3Vzc3Nua3NxbXByb3R2cnFxdXZ1c3d5d3V0dWNtdGtvcGpxdG93TE5MTExHRUFARD4+REVGQ0BDQUVEREZCQ0VHQ0NJRkNJSkpJSUtHREtKR0hKSUlLSEpKTkxOS0lMSEpMS1pmSmRcS2xTSE9OX25Va3NbcXBid2NTUGF2dWh1Y2F2YFhucWJkdmluemZbbHRgbGpUX3d2aWpnaWZnbG1qbW9qbW5zcnBycnFyc3Jzc3J0cm5sdG9ucHFxdXVxcXN0dnZ1dXl3dXR0YGt0a3Bwa3FycXlMTkpKSkZDP0BCPz1ERUZEQ0RCRUVERkJGRkdERUtGRUpNTEtMTEdHTUlHSktIS0tJS0tOTE5MTExJTE1MW3NiZHBebG1VTU5mc11mZnFsbnRncGlfYVlubmJwcGJrampmb3F0ZXRub1xvdWdwTUpxeXZrYWBrZWVteGxrdm1ucHNycHJxcHFycXJycnRybW1zbm5vcHJ1dHFzc3R1dXV0d3h2dXRibXVrcHBscnJxektMSUhHRUQ/QUJAPkNGR0JGQ0ZFRkVEQ0hIR0RFS0hHTE5OS01NRkpOSEpLSklMS0pKS0xNTk5NTUpNTU5bcm9vbnBwbGtNUFFsV01pYnRycGFtbnVcWWxRXG1tWnFta29teHh0c2lwXV9ya3FqVXV5eG9jXmtmYmdwcGpqb3BwcnNwcXBxcXJycXFycnRsbXJtbm5vcnV0cXRydHV1dHV1enZ1dGVudWtwb2xzcnJ5SUtHR0VFRUJCQj5AQEZHQkdESUVFRUJGSUhIRUhMSkdNTU5LTU5HTE1JTEtJSk1JS0lKS09QT05NTE5OTFxoZHVdbHFXbE5QUW1UWWtea2x2YWxkc1NlY05tWWxcdHBraWx4and1aHBdXnJraFdiY3d8b2NgZ2dhZGl1eWtubnFzc3BxcHFwcnFwcHBydWttcW1tbW9xc3Rxc3J0dnZzd3Z6dnV0aG91bHNvbXNydHZITEZJREVFQ0FCPUJBQ0dESEdMSEVDQ0hLSUhGSkxMRk5MTFNSTEdMTEhOSklITkhKSklITk9NTkxKTk1KWnNwcG9xcW1sT1FSbllya2dvb3Fxb210XW5YYXRfbm9wb3Fyb251c3R0altedGN3eHJqbnpoYWFjZmJiaW10dXBzdXZzcXBwcW9ydHt/fn13bGtxbmxtbnByc3F0dHN1dXR4eHl4dHVrb3VtdG9uc3N2c0hLSElCRUVFQUE+RERCR0RISU1JRkNGSkxKR0ZLTkxFT0pLV1JLR0tKSk5JSEpMSUtKSEhLTU1NTUlLS0tTa2NbaV5faWNyclpfWWpuX2VlVWtfY1thYVFgbGhdalxuaWlkW3BmZHBdWlxrW21xY3BzbGRnY2RnYGBrbXBwb3R5cnVxb3BxbnmFiIeHhoWAdnNua21tb25xcnR0cnR1dXZ5eHhzdW5xdW53cXJ2dHdyR0dGSURFQ0ZBQEJGRURHQkhKTEhGREdLTElFRkpPTElQSUxbUUpFSEhLTUlISkpLS0lISUdLS0tMR0hLS0xNTUxKS01OVFtcVFBUTFBPTk9PVlFPT1FOT1FKSU5QUWRxaVRZV1xbXFZZW11YXVxcY2ZhYWViY2ZfX2ZrbWhtdHlydHJvcHB0hoeGhoaFhYaHg3pwbW1sa3FzdHRydHZ0dXl4eHV2cXJ1b3ZydHN1dXNHQ0VHRkVBRUNAREhERkdDSUtMSEZER0tMSUVHSVBLTE9LTFdMSUVFSElKSElLSU1KSEZHR0lHSElFRkxJSkxPTElQXFdeUFxbYF5NWFlTXFxiXk1YWk1YYVJKWWFaUl9kXGFYW2RkVlZYXFlaWFxWWVxdYl5kYGFfZWhrZ210dHFxdHBxcoGGhoaFhoWFhYaGhoR9cmtpb3Jzc3N0d3l5eHl4d3h0cXhyeHNxcnVydE9CQ0RMTUJEQ0JFSUVHR0ZLSktIRUVJSktGRUhIUEtNTUpNUklHRUFIRkpJS0xKTEpIRkRJRkRGR0VGSkhDSk1LTFVfWWBYYGFbYFRYWVReXlpfUllcUF5cWU5eXF5TWl5jXlpdYGNgWV9jW2BeW1RYV1leXWNiY2FjZWhla3Jwb3Bwbm93hoaFhYaCe4CFhYaGhYaFf3VxcHJyc3Z5eXp5eXh4eHdyeXZ4cnF4dnR2YVNKSk1JRUNCQ0dIRkhHSEtKSklERktLS0VGSUpOS05LSExOR0hFPkdHTElLTEtLS0lHREhEQ0RFQUZKREBKTEpPW2NZX15hX1JUUldfYFxdWV5RWVxNVl9XS1FZW1BaX2FhXV5jYWBiYmJjY2VaUVhVVVxZXWNgX19jZGJob21ubGxsbHWFf4SDeXV8hIWFhYaGhYWGhoN9d3JydHh5eXl5f359eXV5dnZybnp3dnhYUUtGQ0dFQkVHSUZHSEhGRklHSEdIS0lMRERLS05NTEtIS0pISUY/R0dOS0tLTUtLS0lGR0NEQERBSElCP0lKSE9dYVpbZF1fVFFSWF1cXFxfWktXXExSXFlJTV5RT1xfYWNjY2NiXGRjYmRjZlhRVVRRW1daYF9eXmFhX2Rsa21qamxudn51gXp8hIWFhYWFhYaGhYaFhoaGgnpyc3V1e4WHh4eGhYSBfnhwend2eFxSTUNASUZDRktKRkZGSEdHSUdGRklMSk5GREtLTU5KTElLSkhIRkJISFFNS0tPTEpLSUdHRUQ/RUNJSUJCR0ZFVF1ZXlhfWV9bXVVYWE9dXVFLSlZeWF5bXVVZYFJRX19iYmBgYmJgY2JhZGRiWE9RUVFaUltdXV1dXl9fZGhnbGpubnB7e3x+e4CCg4SFhIWFhYWEhIWDhISHh4FzcneFh4eHh4eHh4eHh4WDgHx4XFNLQ0FIRkRHTVJIQ1FKRUdISEVGS0pNUEVGSUpLTkxMSUtMSUhHREhLUU9NTVBMTEpLSElDREFFRElHQ0JHRkRXVUVcVF1TVl9YT1RVTlpaTUlKVGBhW19YXl5hXU9ZYVxgYF9iY2JdYWJXX19UUE9PT1dRXFtbXFxeX2JmZmVsZW9vd3x7gHt9f4CEhISEhIWFhYODhYKDgoWFhnpvgYaGhoeHiIeGhoaFhYSFg35JTkZERkZIRElSYlBDVl5JR0dIREZNS1BQRUlJSktOTEtLTEtJSkdFSk5RUU5PT01OTE1IS0FEQUNER0VDQkVHQk1IQktLT09OTEZNRkdJSkhHTEtNT1BJTE9QT1NPTFBTUlVaWVdZWFhkV09TVFBQTk1PVFNaWFhaXVxgYWRlY2dja2xwc3J5eX97en+EhISFhISEhIKEgH57gYOBfXuFhIaGh4eHhYWFhISEgoGAfUtJRUVIRkdES01dTEdHWExHSEpIR01MUVFITEtLS05NVU5PSkpLR0dLT1NTTlBPTk5OTkdLRmBFRF9MRWZkRU5bSV5bcm1PTVVtWUxEUGBVa1dnSl1XVV5ETFFVTExTVlFSVFhXVFhVVFxVUGZaaGhkWFJqUlZVVFtcW2BgYWJhYmBmaGZua2hyenx9foGEhISEg4ODgX18enJ7gXp7f4KAg4SEhYWBhIWBg4N/fnp7TElGR0ZIRUVLT1NJSkZgVEhJT0pJT01SUUtNTExPUlVST09JTE1HSExQW1lPUFBOT09PSUpRf1FJfFlZcXRZUW1IcW5vYVZQcXFzUENrc21xc3BTb19bblhdVlxYVWtoVV1WY1pgWVtfVlZYf2p0dXVeX3ZeV2FbW2ZbX2BhYWFdYGFnbXBsYHB3dHiBgYKDg4J/fX+Adnh6bHZ+dHh9gHx+gIGChHyAg3p/gX9+d3dOSkVITU5CRExMRklLRVFWTEtOSUtSWFdRTU9PTVFUTk9RT0tLTkdNT1JbWlNRUk9QUFBKSFp4XVR4ZWhaU1VSdmd0bHBibmZqUXJPTXdtanJwc3JxcnBvb4BdZXp1eHFxenF+c31rdX1iUmh8ZXNzb3Jye3xvfnhugHJfYGBiYVpgX2drbmtibGZnbXd+gYCDfnt4d4B0dnppcn5uc3x+d3h7foCDeHyAdXx/fHxzc05LRmBdR0FFTU1ISkpHSlBPTU1KTlZeWVVMUVNOWFpNU1NSTktPSFFSVFlXVlBUUFBQUUtIZ3hsY3hybVtLTlZ5cHVtdWJvdlBlZUlmdnFtd2+AamZ4eGlXclFoem1panp6fWx4en9vaG9ZdnZqdXVwgF9yZn1pbHh8b15fX2JhW11iZGdpaWRnYmNkbGxwcHN0c3NzeXFyeGJsdWdxeXtzcnZ5foFzdXpufH15eHJuTkpTdU5DQkZQUEhKS0lLUE9PT01QWmBaV0tUV1BhXlJWUVlSTE9JU1RVWFdXUFVQT05SSktyb3V1cXVxZGliV25McXBeRmh5V3ZUTGl5fXhgeXtzbmFdbW9jUmhxdW5teXB3bHZ0dHJsbl10fnprbXl8a3RsfGtwdnV4Xl9fYl5dX2RkaWdoZWVeYWJpaWlqa25va3FvbWpwYWNmY293eG9tcHN5fm5xcGt7enRzb21MTFtWSEdFR1JQSUxNSktQUVBQUFBXXFhVTVVZVWVYUlJZXlNNTUlUVFZXWVdPU05OTlFIUm1IaXdLYGR2dlZYbE9ubHtzYWpnf3ZVTFdraH1sbWx4X1pwenteYHpzY3JveHFoZH1pcnxeVExsYHZ1a2l1e3ptfnhrfHBcXl5iW15iZGRnZWVlYlpjY2lra3JzcnZnbGloZGdgYWthZ3NybGdtbXJ8a21oa3t0bW1rbU9IS0tISkhIUVBMTk9MS1JSUk9TUldSVlRQV1pWVlRUVGFfUE5NSlRTVFFWVk5OTE1PUEpIUU5QVUxLTFNUU1NUUFZVUVFOUVFYWVJOUFVUWFhYW1tVUlNXW1dYWFpPU1VXWFhSXllXXlZUUFlSV1dXV1heWmdyXltbWVxdX2NaX2NjZGZkY2NiWmNiZ2ZlbW5tdWVlZ2NhZl9dZ2BkbGhmZ2tocHpoZ2dqdWpoZ2lsUUlLTExNS0pTUU1RUE9MVlVUUFRVWFVZVVFaXVZVVFdVWVdPT0xNVlRRTlVTTk9NTFFQS0pRUUtRTUtLUFJVU1FSU1NJSExOT1FSUVFRVFZSWFdcV1NSUFJUVVZTWlFOU1JXVlRZVlRaVlRSVVRUVFdYVlxZXmBdXFpaXFxfY1tdYmNkZmRkZGFZYGFjYWJoaGltYmFkXl9jXVpkXGJtYV5mZWZtc2RpZ2prZWRjZmhQSktMT09MTVNQTlNRUU1YV1VUVVdXV1pVU1xgVldWWVVYU1BQSk5XU1BOVVBOUU5MU1BNT1VTTlFOTU5RVVFVUVJUVU5LTU9RVFRSUlFWV1VZWltZU1VSVFdWVllbVFBUVVhVVVpVV1pWU1JXVlVXW1haX1xVWF5cXl1bXWBhXltiYmNnZmVkYlhfYWJdYGdkZmVhXl9dXV5aWl9aX2dgXl1dYmhrYWdmaGZkYGJjYU9MTUxRUUxPVE9PU1FPUVtZV1dYW1lYWVZcamRWWFlaV1ZTU09KTlZUUE9UUFBQTU1SUlBSWFRRUU9NT1NWT1hSVFVVT05NUVNWVVRUUlRXVlpdXFpWVlFRVlhWW1tXUVRXVlZWWVRYWFVTUllXVVpeWV1fXlVeXF5gXFtfX19fWmJiZGhnZGRiWGFgYl5eZmNjYGJdXFxcXFlaW1hbYVteXVxfYl9fYmRlYmRfX2BcUE1OTlJRTVJST1NUUU9VXFpaV1tbXFhaW2RxbWhkX1tYVlVXUUxNVlNNTlJPUVJPTFFTUlVaVVNQUE1RWFdSV1NTU1hNT09RVFhWVVVTVVhYW15dW1tWUU5VVlVbXFdSVFdWV1hWVFhbVFNSWlhXXF5aXl9gVWFcYWFdYGJfXGBdY2BjZ2hkZmBZY2BhX19lZF9gYltaXFtcWVpZWFdcWlxbYF5fW15eYWBeYlxZYFpRTk9OVlFQVFFPVFRTUFdcXFxYXlxeVlxeanF3eYBjXFtVVVdRTU9WU05RUU9SVFJMUlRUWVpXVU9ST1NYV1RTVVJSWk9QU1JWW1ZXV1RWWlhcXVtbXVZTTVRVVVxcVlJUVlZYWVNVWlxVU1NdWFpdXlxgYGBWYVtjYl1hZF5cYmFiX2NmaWRmXltkYGFgYGNlX2JeWVpeW1xbWVhZV1daWlphXF1bXVxcWl1gV1tbWlBPT09ZUFVUUlFXUlRQW15eXVtgXGBVXF1oanJ9c2xnXFRXV1FOUlpTUlFUUlRVVEtSV1ZbWlpTT1NRVlZWVE9XUlNaUlRUVFhdV1hZU1hcWF5dWVpdVFVOVVZXXltYUlVVWVlZVVdaXFZUV15aXV1gXWJiXVlfW2VhX2RkXl5jY2FeZWZpZGZeXWRhYGFhYmRgYl5YWl9bXFtYWFhXV1tZW2BcW1tcW1haW15WXlldUE9PUlpQWlRVVlZTVFReXmBeXmJcYFVdXmJreXRsfWtaVVlUUFBTXFRVVFVUVllXTFJbV11bXVJPVVNYV1dUUFhSU1dTVlVVW11YW1lVWl5YX15ZXFlRV1JZWFlfW1pUVVZaWVpXWFpcVlVbXlxeYGFeZGNcXl1dZWFhZmReXmRjYFxnZGhlZGJfZGFgYWBiYl9gXldYXlpcXFpZWVdWXVpdXlpZW1xbV1lcXVZYV11TTlBWWVFdVVZZV1dVWF9fYWFgY11fVF1fYmVldYF6aFdZWVNVU1ZcWFdXVlZXXVhPVV1aXl1cVFJXU1dXVVNUWFJTVlRYV1hdXlhdW1ZdX1hfX1hcVlFYVFlaWmFZXFZXWFtaW1lZWltYV15fYF9jYmFkZFxiXGBmYWRmZF5fZGJiW2ZjaGVjZmBmX19hYWFhYF9eVlVdWVtcW1lbWVldW1tbWFhZW1laWl1fXVRZXVVOU1lWU1xUVldZVlZcYGFiY2BjXl9WW2BkYV96dW9oWVtZVVdUV1taWlxZWFlgV1BWXlxgYFxUVFhQVVdWVFZXUlNVV1paW19eWl9cVl9fWl1eWV1VUllXWVldYlpeVldbXFtcW1taXFlaX19gYGRiY2RkYmRZYWZjZmZlXmFiYGNeYmNpZGNnX2deYWJjYWFgXl9YVFtaWltbWFtYWFxbWltXV1lYV1xbXGBdVl1dU09WWVZWWlVYVVhXWF1fYmFkYWRgXllZYWRiYGxmaF5bXFpWV1hZXFxdX1tZW2JWVFheXWFjXFJWWVBXV1dXV1ZTVVRYXFxeYGBdYFxXYV5bXltaXlhVWFdbW19gXF9YWVxcXV5fXFtdWFtgYV5gZWNkZWVmYlhjZWRoZ2ReY2BgZWNcZWlkZWlfZl1jYmNhYWBfX1tYWVtZWlpYWVhXW1taW1dYWlRZXVxaYFxVXmJOU1dZVldZWFtcWFdZXmBiYWRhZGFdXllhY2JfYWBgXlxcXFdXW1tdXV9fXFpdY1laWF1gY2RfUlhZUFdXWFlZV1ZXVl1dXmBhYF9iXllhXV1eWVxeWVhVV1tcYF5dX1paXl1eXmFdXFtaXGBiX2JlY2VmZWZiWmRmZmlnYl9jXmFmZFppaGJmaWNlXmJiY2FgYF9dXFpYXFlZWFhaWFdaW1pZV1hVVVtdXV1gYGJieEtYV1tZVlxbXF1aV1xdX2BiZGFiYV1gWGJjYmFjYWJdW1xbWFdbXF9dYF9dW2BkXVxYW2JlY2FSXFpPWVhaW1taV1pZYF1gYmJgYWNfXGJdX11bXl1ZWVRYXV1fYF9gXFteXmBiY11cWFxeYGJiY2VkZmRlZmRcZWZnaWZjYWJcY2dgXGloYmhpZWRgYmFjYV9gX1xdXFlcWVhXWFlYV1xaWldXWE9YWl1hY2Zmcmt/SllXXFpaX1xbXlxYXVteX2FjYmFhXWJbYmRiYGJiYlxbW1pXWGlxYFxgX11cYWNfXllZY2VkYVNfWlJZWFxdXVtaW1tjYGJiY2BiZGFgY15gXF5eXllYVVtfXl1hYWBeW2BhYmZjX11UXWBgY2RkZmVnZWZmZV5lZmhoZ2RkYFpmZ15haGhiaGhmY2BiYGNiX19fXF1bWltZWFhYVlpWXFtaVlZVTVhXXGdpa2h1eIF2dnZ2dnZ2dnZ2dnd3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d4eHh4eXl5enp6enp6e3p6ent7e3t7e3t7e3t7e3t7e3x7e3t7e3t7e3t7fHx8fHx8fHx8fHx8fHt7e3t8fHx8fHx8fHx8e3t7fHx8fHx7e3t7e3t7fYmIhoqHhIKCgoOCg4OCgoKCgoKCgoKCgoGAgYCBgICAgYCBgYGAfnx8fHx8fHx8fHx8fHx8fHZ2dnZ2dnZ2dnZ3dnd3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3h4eHh5eXl6enp6enp6ent7e3t7e3t7e3t7e3t7e3t7e3t7e3t6e3t7e3t7fHx8fHx8fHx8fHx7e3t7e3t7e3t7e3x7e3t7e3t7fHx8fHt7e3t7e3t8iYmHiYaFgoGCgoKCgoKCgYKCgoKCgoKBgYGAgICAgICAgIGBgYB9fHx8e3x8fHx8fHx8fHx8dnV1dXV1dXV2dnZ3dnd3d3d3d3d3d3d3d3d3d3d3d3d3d3d4eHh4eHh5eXl5eXl5eXl5ent7e3t7e3t7e3t7e3t7e3t7e3t7enp6enp6ent7fHx8fHx8fHx8fHx7e3t7e3t7fHx8e3t7e3t7e3t7fHx8fHx7fHt7e3uHiYiJhYSDgYKCgoODgoKCgoKCgoKCgYGBgICAgICAgICAgYKBgH58fHx8fHx8fHx8fHx8fHx2dXR1dXV1dHV2d3d3d3d3d3d3d3d3d3h4eHh4eHh4eHh4eHh4eHh4eHl5eXl5eXl5eXl5e3t7e3t7e3x8fHx8fHx6e3t7e3p7e3t6enp6e3t8fHx8fHx8fHx8fHx8fHx8e3x8fHx8e3t7e3t7e3x8fHx8fHt7e3t7e4aJiYiFhYOBgoKCgoOCgYKCgoKCgoKBgYGAgICAgICAgIGBgYCAfnx8fHx8fHx8fHx9fX18fHjF1NLS0tLUk3t9fX19fYSMi4uLi454KSkqKiopKz0/Pj4+Pj5tgH5+f397pdfT09PT1ryGiYmJiYqCRT4/Pz8/O5vDvr++vr3K1NLS0tLWun1+f39/f359fHx8fHx8fHx8fHx8fHx8fHx7fHx8fHx8fHx8fHt7e3t7hIuHh4aHgoGDg4GCgoKCgoKCgoKCgoGBgYCAgICAgICAgYCBgIB+fHx8fHx8fHx9fXx8fH19eNXn5OTk5OeZe39/f39+hpCPj4+Pk3kZGhoaGhocMTMzMzMzMmqCf4CAgHut6eTk5OToyomMjIyMjYM6MjMzMzMuodLMzMzMy9nl5eXl5enHfX5/f39/f319fXx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx7e3uCjYeIh4eDgoSCgYKCgoKCgoOCgoKCgYGBgICAgICAgICAgICAgH58fHx8fHx8fXx8fH19fX12fn9/f39/f3l3d3d3d3d4eXl5enp6eG9wcHBwcHBycnJycnJyd3p5eXp6en6Dg4ODg4SBfHx8fHx8fHZ1dXV1dXV+g4KCgoKCg4SEhISEhYJ8fX19fX19fX19fX18fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx7e4CMhomHh4SDhIKCgoKDgYKCg4KCgoGBgYGBgYCAf4CAgICAgICAfnx8fHx8fHx8fX19fX19fXZ0dHR0dHd0dnd6e3h7eHd2d3p4enp5fnp5eXh4eHh5eXl5enp5eXl5enp6eXh4eXl5eXl7e3t7e3t7fHx8fHx8fHp5eXl5eXp6enp6enp6e3x8fHx9fX19fX19fX18fH19fX18fHx8fHx8fHx8fHx8fHx8fHx8fHx8f4uHi4qIhIODgoKCg4KBgoKDgoKCgYGBgYGAgIGAf4CAgH+AgYF+fX18fHx8fHx9fX19fX19d3d3dnZ3fXh3d316eH14d3d4fXl9fXx9e3h3d3d3eHh4eHh5eXl5eXp6ent7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7fHx8fHx8fHx8fHx8fHx9fX19fX19fX19fX19fX19fX19fHx8fHx8fHx7e3x8fHx8fHx8fHx+iomMjImFg4SEgoKDgoGCgoKCgoKBgYGBgYCAgICAgICAf4CAgH19fXx8fH19fX19fX19fX13d3d3d3p9eHt4fHx3e3h3d3d8en19fH19eHh4eHh4eHh4eHh5eXl6enp6e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3x8fHx8fHx8fHx8fHx8fHx8fX19fXx9fX19fX19fX19fX19fHx8fHx8fHt7fHx8fHx8fHx8fH2Kio2NioWDg4SCgoKCgYGCgoKBgoGBgYKBgIGBgICAgIB/gIGAfXx9fX18fX19fX19fX19fXd3d3d3fX55d3d4e3p7eHd3d3x6fXt8fXx4eHh4eHh4eHh4eXl5enp6ent7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3x8fHt8fHx8fHx8fHx8fHx8fH19fX18fH18fH18fHx8fX19fX18fHx8fHx8fHx8fHx8fHx8fHx8foqJjo2JhISEg4KCgoKBgYKBgoKCgYGBgoGAgYKAgICAgH+BgIB8fH19fX18fX19fX19fn5+d3d3d3d5fHl7eHx9eXt5enp4fHp9fHt9e3h4eHh4eHh4eXl5eXp6enp7e3t7e3t7e3t7e3t7e3t7e3t7e3x8fHt7fHx7fHx8fHx8fHx8fXx8fX19fX19fXx8fHx8fHx8fXx9fX19fXx8fHx8fHx8fHx8fHx8fHx8fHx/iIeNioeFhoaDg4ODgoGBgoGCgoGBgYGCgYCAgoF/gICAf4CAgHx8fX19fX19fX19fX5+fn53d3d3d3Z4eHl3eXp4enh5eXh6eXp6eHt4eHh5eXh4eHh5eXl5enp7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t8fHx8fHx8fHx9fX19fX19fX19fX19fX18fH18fH19fX19fH19fX19fHx8fHx8fHx8fHx8fX+HiIyIhoeHhIKDhISCgYKBgYKCgoGBgYKBgIGBgYGAgIB/gIGAfHx9fX19fX19fX1+fn5+fnd3d3d3d3d3d3d3eHh4eHh4eHh4eHl5eHl5eXl5eXl5eXl6enp6ent7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7fHx8fHx8fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fHx8fHx8fX19fHx8gIeIi4eHiYaEg4SDg4KBgYGCgoGBgYKCgYGBgIGBgYCAgICBgX97fH19fX19fX19fn5+fn5+d3d3d3d3d3d4eHd4dnl5eHh4eHh5eXl5eXl5eXl5eXl5enp6enp6e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7fHx7fHx8fHx8fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fHx8fH19fXx9fXyBhoqKiYmIhIOFhISCgoGBgYGCgYGCgoGBgYCAgYGAgIGAgIGBf3x8fX19fX1+fn5+fn5+f394eHd4eHh4eHZxZGpeam15eXl4eHl5eXl5eXl5enp6enp6enp6enp7e3t8e3x8fHt7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3x8fHx9fHx8fH19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fIGFiYqJioeEhYWEg4KBgYGBgoKBgYKBgYGBgYCBgYCAgYCBgIF+fH1+fn5+fn5+fn5+fn9/f3h4eHh4eHh5bWRiZV9fXm95eXl5eXl5eXl5eXp6enp6enp6enp6e3t7e3t7fHx8fHx8fHt7e3t7e3t7e3t7e3t7e3t7e3t7e3t7fHx8fHx9fHx8fH19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18goWKiomJhISGhYSDg4KBgYKCgoGBgoGBgYKBgIGBgICAgICBgH58fX5+fn5+fn5+fn9/f39/eHh4eHh4eW5kZWdlZGJeZnh5eXl5enp6enp6enp6enp6enp6e3t7e3t7e3x8fHx8fHt8fHt7e3t7e3t7e3t7e3t7e3t7e3t7fHx8fHx8fHx8fHx9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXyChouJiIqEhYaEg4OEgoGBgYGCgYKCgYGBgYCAgYGBgIB/gIGBf3x8fn5+fn5+fn9/f39/f394eHh4eHl3Z2VkZWZkZWFfaXl6enp6enp6enp6enp6ent7e3t7e3t7e3t7e3t8fHx7e3t7e3t7e3t7e3t7e3t7e3t7e3t7fHt8fHx8fHx8fHx9fX19fX19fX19fX19fXx9fX19fX19fX19fX19fX19fX19fX19fX19fIKGi4eJh4SEhoSDg4WBgYGBgYKCgYGBgYKBgICAgYGAgYCAgYF+fHx/f35/f39/f39/f39/gHl5eXl5eWtlYWJlZWFlZV5ieHdze3p6enp6enp6enp6e3t7e3t7e3t7e3t7fHt7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t8fHx8fHx8fH18fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19g4aLhoiFhYaEgoOEhIKBgYGBgoKBgYKBgYGAgYGBgYGAgIGBgn98fH9/f39/f39/f3+AgICAeXl5eXl0Y2NlZGNmY2doZGZsZF5ze3p6enp6enp6enp6ent7e3t7e3t8fHx7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3x8fHx8fHx8fH19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX1+fn6DhouGhoaGhYODg4SDgYGBgYGCgoGBgYKBgYCAgYGBgYCAgYGBfnx8f39/f39/gICAgICAgIB5eXl6d2RhY2diYmRdW2VfYV1eYGFoeHp6enp6enp6enp6e3t7e3t7fHx8e3x7e3t7e3t7e3t7e3t7e3t7e3t7e3t8fHx8fHx8fHx8fH19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX1+fn5+fn5+foSFi4eGhoaGhIODg4KBgYGBgoKCgYKBgoGAgIGBgYGAgYGBgYF+fX1/gH+AgICAgICAgICAgHl5eW9vYmJiZF5jZ19dYWFgXF9kYlttfHp6enp6enp6enp7e3t7fHx8e3t7e3t7e3t7e3t7e3t7e3t7fHx7e3x7fHx8fHx8fHx8fH19fH19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX5+fn5+fn5+fn5/hIiLhoSHhoaEhIODgoGBgYGCgYGBgYKCgYCAgYGBgYGBgYGBgX5+fYCAgICAgICAgICAgICBeXpwXWJlZGJkXmZnZ2BZYmJhY2VfXF1ze3t6enp7e3t7e3t8fHx8fHx8fHt7e3t7e3t7e3t7e3t7fHx8fHx8e3x8fHx8fHx8fHx8fHx9fX19fX19fX19fX19fX19fX19fX19fX19fX19fn19fn5+fn5+fn5+fn5+foCFjIqEhYaGhYODg4SCgYGBgYKBgYGBgoKCgYCBgYGCgICAgIGBf35+gICAgICAgICAgIGBgYF5emxiZGdjYmdmYWBgZGFiZWRjZGNeXGJ1fHt7e3t7e3t7e3x8fHx7e3x8fHx7e3t7e3t7e3t7e3x8fHx8fHx8fHx8fHx8fHx8fHx8fH19fX19fX19fX19fX19fX19fX19fX19fX1+fn5+fn5+fn5+fn5+fn5+fn9/gYeMiYWGhoeFg4SDgoGBgYGBgYKBgoKCg4KBgIGBgYKBgYGCgoF/f36AgICAgICAgIGBgYGBgXp7dGdnZmZkZGZmYF5fYWNlaGRlXmJkYHR8e3t7e3t7fHx8fHx8fHx8fHt7fHt8fHt7e3t7fHx8fHx8fHx8fHx8fHx8fHx8fHx8fH19fH19fX19fX19fX19fX19fX19fX19fX19fX5+fn5+fn5+fn5+fn9/f39/f3+CiYqIhoaIhoWDhIOCgYGBgYGBgoGBgoKCgoGAgYGBgoKBgYKCgX9/f4GBgYGAgYGBgYGBgYGBenptaGNjZ2ZnZWdmZmdiZWRlYmdbYmVgdnx8e3x8fHx8fHx8fHx8e3t8fHx8e3x8fHt7fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx9fXx9fX19fX19fX19fX19fX19fX19fX19fn5+fn5+fn5+fn5+f39/f39/f39/f4SJioiGiYeFhYSEg4KBgYGBgYGCgYKCgYGBgYGBgYKBgoGBgICBgH9/gYGBgYGBgYGBgYGBgYF7emlpZGNqZmFgZmVjY2NnaWRjYmBiZGJ0fXx8fHx8fHt8fHx8fHx8e3x8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fH19fX19fX19fX19fn5+fn5+fn5+fn5+fn5+fn5/f39+fn9/f39/f39/f3+AhIqMiIeJhoSFhYOCgYGBgYGBgYKBgoGBgYGBgYGBgoKBgYGBgYGAgH+BgYGBgYGBgYGBgYGBgXZzZWRnY2RmZWJlZmdkZmhmZWNgYGNkYHF9fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fXx8fHx8fHx9fX19fX19fX19fX19fn5+fn5+fn5+fn5+fn5/fn5+f35+f39/f39/f3+AgICFioyJiIqJhoaDgoKCgYGBgYGBgoGBgoGBgYGBgIGBgYGBgYGCgX+Af35/foCCgoKCgoKCgoKCc3NnZWRkZWlqaGZnZ2NhZmZlZmdmZWVjdX18fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fX19fX19fH19fX19fX1+fn5+fn5+fn5+fn5+fn5+fn5+f39/f39/f39/f39/gICAgICAgIWLioqJioeHhoSCgoGBgYGBgYKCgYKBgYGBgIGBgoKBgYGBgYGAf4B+dHRzdX1/goCAfn5/gYB0cmdkZWNmaWppZWNlY2BmZGRnZ2JiZWFwfXx8fHx8fHx8fHx8fHx8fHx9fX18fHx8fHx8fHx8fHx8fHx9fX19fX19fX19fX19fX19fX19fX1+fn5+fn5+fn5+fn5+fn9/f39/f39/f39/f39/f39/f4CAgICAgIB/houLiouLh4eHhIOCgYGBgYGBgYKBgoKBgYGBgYKCgYCBgYGBgoCAgH5zc3NzdHV4dXV0dHV2dXVwZmNmZWhoaWdoZ2VmZWJfZGVmY2BiZ3d8fHx8fX19fX18fHx8fH19fX19fX19fXx9fXx8fX19fX19fX19fX19fX19fX19fX19fX19fn5+fn5+fn5+fn5+fn5+fn5+f39/f39/f39/f39/gIB/f3+AgICAgICAgICHjIyIi4qHh4eEhIKBgYGBgYGBgoGCgoGBgICBgoGBgYKBgoKCgYCAfnNzc3Nzc3NzdHR0dHNzdW9jY2FnZWhoZ2pmZGVnZmhmY2JlYl5ieX18e3t8fX19fX18fHx9fX19fX19e3x9fX19fX19fX19fX19fX19fX19fX5+fn5+fn5+fn5+fn5+fn9/fn5+fn5+fn5/f39/f4CAgH9/gICBgICAgICAgYCAf4CAgYGAgIeLi4iNiYiJhoSFgYGBgYGBgYKCgYKCgYGBgIGCgoGBgYKBgoKBgIB+dHNzc3Nzc3Nzc3Nzc3N1cmdlZWRlamhoZ2ZpaGdjZWViZGNoZGd7eHVzc3R2dnl4dnR0dHZ3d3d2dHR0dXV4d3h4d3d6e3x9fXx9fn5+fn5+fn5+fn5+fn5+fn5+fn5/f39/f39/f35/f39/gH9+fHt7fX58eXl2dnZ5fHx6end2d3l7fXt4hIyMioyHh4iEhYSBgYGBgYGBgoGBgoGBgYGAgYKCgYGBgoGBgoGAgH51c3Nzc3Nzc3Nzc3Nzc3VzaGVnaGVrbGhqZ2lqZ2dnZmRkYmVkbnV0dHNzdHNzc3Nzc3Nzc3Nzc3NzdHNzc3Nzc3Nzc3N0dHV1c3V3eHl7fn59fn98f39/f39/f39/f314fH5+fXx4dXZ3eXd4dnRzc3N0dXRzc3Nzc3NzdHNzc3R0c3R0dHODjI2KiYeIhoOGg4GBgYGBgYGBgYGCgYGAgYGDgoKBgYCBgYGBgICAf3VzdHRzc3Nzc3Nyc3NzdnZpY2hqaGpsZWZpbGhgZmVkY2BkZGZ0dXV1dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHRzdHRzc3Nzc3R2dnV1d3V4fH9+fX9+fHp4dXN0dXV1dHNzc3Nzc3N0dHR0dHR0dHR1dXR0dHV1dHR1dXR1dXV1dIaMjYuIhoeEhIWCgYGBgYGBgYGCgoGAgYCBgYKCgoGBgIGBgYGAgIB/dnNzc3Nzc3Nzc3Nzc3N2dnNnZ2pmaGdmaGhmZGlnY2NnZWVmcHZ1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dHR1dHR0dHR0dHRzdHR0dnV1d3Z0c3R0dHR0dHR0dXV1dXV0dXV1dXV1dXV0dHNzc3N0dHNzdHR0dHR1dXR1iY6MjIqHh4SEhYKBgYGBgYGBgYKCgoGBgICAgoKCgoGBgYGBgYCAgH93c3Nzc3NycnJyc3NzcnZ2dW5kXWNnZWlraGVoZ2dqamlnZXB2dXV1dXV0dHRzdHR0dHR0dHV1dXV1dXV0dHV1dHR1dXV1dXV1dXV1dXR0dHV1dXV1dXV0dHV0dHV1dXV1dXV1dXV1dXV1dXV1dXV0dHNzc3Nzc3N0dHNzc3Nzc3R0dHR0dHWKjoyMiYaGhIeFgoGBgYGBgYGBgoKBgYGBgYGCgYKBgYGBgYKBgYCAf3hzc3Nzc3JycnJyc3NzdnZ3d2liaGhnamtpaGZkZGVmaWhwdXR0dHRzc3JxcnJ0dXV0dHR0dHR0c3NycXFxcXNzdHR0dHR0dHR0dHV0cnJyc3R0dHR0dXV1dXV1dXR0dXR0dHR0dHR0dHR0dHR0c3Nzc3Nzc3Nzc3Nzc3N0dHN0dHR0dHR0dYuOjImGhYWFh4SCgYGBgYGBgYGBgoKCgYGAgIKCgoGBgYGBgYGBgIB/eXNzc3NycXJycnJzc3N3d3d3bGpoZGhpa3Z6a2VmZWhnbXJzdHN0c3JwcHBxcnN1dXR0c3Nzc3JycXBvb29vcHFzc3NycnJyc3R0dHNxcXFyc3R0dHR0dHRzc3Rzc3N0dHR0dHRzdHR0dHR0dHRzdHR0c3NycnFxcnJzc3Nyc3NzdHR0dHN2jZCMh4eFhYSEgoGCgoGBgYGBgYGCgoKBgYGAgYGCgoGBgoKBgYGAf395c3NycnFxcnJycnNzc3d3d3dzc2pnaWloeX99cW51bG5wcXJycnFxcG9wcXFxc3R0c3NycXFxcG9ubm1ubW5ubnBxcnJycnJycnJzcXBvb3BxcnJzc3JxcnJycnJycnJycnJzc3Jzc3Nzc3Nzc3Nzc3Jxb29ubm9vcXJzc3Jyc3NycnNzcnaPj4uHhoWFhYOCgoKBgYGBgYGBgYGBgoGBgYGCgoKBgoGCgYGCgX9/f3hxcHBwcXFycnJyc3Nzd3d2dnd2cnF0c252f352c3hwcHBycnJycXFwcHFxcXJzc3Nzc3JxcXBwb25ubm5ub25vcHBxcXFxcXBwcXJwb25vcHFxcXFxcHBxcXFxcXJycnJycnJycnFxcnFxcnJycnFwb29ubm1ubW5vcXJycnJycnJyc3JxeI+OjYaDg4aEgoOCgoGCgYGBgYKBgYGCgYGBgYKCgoKCgoKBgYKBf4B/d29wb3BxcnJyc3Nzc3J2dnZ2dnZ3dnZ1c3l/fnd3d29wcXFxcXFxcHBwcXJycnJzc3JycXFwcHBwb29vb29vb29wb3Bvb29vcHBxb29vcHBwcHBvcG9wcHFycXFxcnJycnFxcXFxcXFxcHBwcHBxb29ubm5tbW5tbm9wcXFxcXFxcXFxcXB7j42NhoODhYOCgoKCgYKBgYGBgoGCgYGCgoGCg4KBg4KBgYGAgYF/f392bm9wcHBxcXFxcXBwcHZ2dnZ2dXR0c3NxfYB9fX9zb3BxcXFwcHBwcXFwcXFxdHFycnFxbn+DbnBwb29wcG9vb29vb29vb3BxcXBub3Bwb29wb29wcnJycnFxcXBxcnFwcXFxcHBwcHBwcHBwb29ubm1ubm5ubm9ub3BwcHFxcXFxcXFxcIKRjoqEhIOFhIOCgoGBgoKBgYKBgYGBgYGCgoKCgoKCgYGBgYCBgX9/gHVvb29wcXFxcXBwcHBwdnZ2dXRzcnJycnGAgoCBeXBwcHBvcHBwcHFxcXFxcXCIiHBxcXB0moBucHBwb3BxcHBvb29wb29vcXFwcG9wcG9vb25vcHFxcHBwb3Bvb3BwcHBwcHBwcHBvb29vb29vbm5tbW1ubm5ub25vb3BvcHBwcHBwcHBwiZCMiISDhIaDg4KCgYGCgoKCgYGBgYCAgYGBgoKBgYGBgYGBgIGBgH+AdG5vb3BxcXFwcG9vcG92dnVzcnFxcXFxcICDg39ycHBwcHBwcHBwcHFxcHBxcXyihHBycI6efG5wcHFwcHBwcHBwcHBvcHBxcXBwcHFxb29vbm9wcHBvb29vcHBvb3BwcHBwcHBwcHBvb29vbm5ubm5ubW5ubm1ubm9wcG9vb29vb3BzcXWPj4uJg4KFh4ODgoKBgoGCgoKBgYKBgYGBgYGBgYGBgYCAgYGAgYGAf4B0b29vbm9vb29vb29vb3Z1dHNxcXFxcXJygIKCgXRxcXFxcXFxcXFxcXFxcXFxdZ6jeHB4oJx9b3FxcXFwcHBwcHFxcXBxcHBwcXBwcHBwcHBwcHBwcHBwcHFxcXBxcXBwcHFwcHFxcXFxcXFxcXJxcnFwcnRycnR0dHR1dnRzdHR0dXd3gpCPi4iDgoaHhISCg4GBgYKCgoGBgoGBgYKBgYGBgYGAgICBgYCBgYB/gHVvb29vb29vb25vb29vdXRzcnJycnJycnKDg4OCdnFycnFxcXJxcnJxcXJycnJxmKmRb4KjnX5wcXFycXFxcXFxcXFxcXFwcXFxcXFxcnNzcnJyc3V1dHR0dHR0dHV2d3d3d3d3eHh4eHd3eHh4d3Z3dnV2dnZ2d3h6e3x7e3t6enp6enyGkI2LiIODiIeHhYODgoGCgYKBgYGBgYKCgoGBgYGAgYCAgYGAgIGBgH+Ad3FxcXFxcG5ucG9wcG92dHV1c3Nzc3NzdYiDgYN5cnNzcnJyc3Jyc3Nzc3Nzc3KTqqV8iqGdfHJzc3Nyc3N0dHV1dXV1dHV3eHd3d3d4eHh3eHh4eXl5eXl4eHl5eXp6e3t7e3t6enp5eXh3d3d1dnV2dnd5enp7fn5+fX1+fn5/f35+gIyQi4qHg4WIi4iEg4SDgYGCgYGBgoGBgoKCgoKAgYGBgYCBgYGAgIGAf4B8enp5eXx5eHh2dXZ2dHl2d3h3d3Z3dnZ6fnx+fXx2dnd3dnV4enh4eHh4d3h4eaGzqaepqpd9e3l5eXh4eXl6enl5eXh4enp5eXh4eHh3dnd3eHh3eHh5eXp7e3p8fH1+fX9/f359e3t7e3p5enl5e3t/foB/fn5/fn19fX5+f35+fn6AjpCNioeEhoqLiIaGhIOBgoKBgYGCgYGCgoKCgoCBgoKBgYGCgYCBgIF/f4B/fn19fX9/f318e3t7eXh4eHh5eXl4eXh5eXl4enp6enp6e3t7fH1+fHt8e3uKr6KhtamrpH97enp4eXh4ent6enp5eXp8fHt6enx8fHp6ent9fHx+fn+AgoGAgYKAgH9/gYGBgIB/f35+fn5/fX1+f4CAf35+f39+fn9/f39/gH+Af4OQjoyHhoWIi4yIh4aFg4GCgYGBgYKBgoKCgoKBgYKDgoGBgYGBgIGBgIB/goOCgoGBgX99f39/f4F6enh4d3h4eHh5eHh5enp5e358enx9fXt8fX19fX19fZmklqGxn5imlX2Af319fYCDgoCAf318fXx9fXt9fXx8fH19fX1+gYGChISDgoB/gYGBgH9/f4B/f39/f39+fn9/f39/f35+f3+Af39/gICAf4CAgICAhJCPi4eGhoiLi4mKhYaDgoKCgYGBgoGCgYKBgYGBgoOCgYCAgYGAgIGBgH+ChIKCgICAgH9+fn+AgH9/fn18fX19fYB/fX+Af35/gH9/fn9/gICBgICBgIGBnJuMn7ChoKKegICBgH5+f39+f4B/fn5+f39/gYB/f4CBgYCAgYOEgoGCgoGCgH+AgYCBgYGAgH+BgICAf39/gICAgYGBgIGBgYCAgICBgoGBgYCAgYGFjo6MiYaHiYyLi4qGhoOCgoKBgYGCgoOCgoKBgIGBgYKCgICBgYCAgYGAf4KFg4KBgYCAf39+fn+AfX5+fn19fX5/fn9/f35+fn+AgYCAgICAfn9/gICBgYCXm5CXsKCYlJyGfH5+foB+fn5/f35/gIGBgoKDg4KCg4KBgYKDg4OCgYGBgYKBgoKCgYKBgoGBgYGBgoKCgYGCgYKCgoGBgoKBgYKCgoKCgYGBgoKCgoaPkY+KiImKjY6MiYaFgoKCgoKBgYKCg4KCgoGBgYGBgYF/gIGBgYCBgIF/gYWEg4KCgoGCgYCAgIB8fHx7fH18fH9+fn9+fn5+f35+f39/f39/gH5/f4B+gKGspZeimpyZoqGIgH5+f4B/gIF/f39/f3+BgYGCgoCAgYKDg4SDg4ODgoKCgoKCgoKCgoKCgoGCgoKDg4OCg4ODgoKCgYKCgoODg4ODgoKCgoODg4KCh5KTkIuKi4uPj42Lh4SCgoKCgYGBgoKDgoKBgYGBgIGBgICAgYGBgIGAgYCAg4SDg4OEg4ODgoKCgXx9fHx9gn1+f4GCiIGCgoSCgYGDg4GBgYKDgoSEiJCisqagoZmdnaanrKmhm5KHgYCAgICAgH9/f3+AgICAgH9/gYODhYSEg4SDgoKCg4OCgoOCgoODg4ODg4SDg4KEhYWDg4SEgoKDhIOCg4ODg4OCgoODgoCKlJOPioqMj5GPjYuGg4KCgoKBgYGBgoOCgYGBgIGBgoGBgICBgYGAgYCAgH+BgoODg4SEhIOCgoKCfXx8fn6AgYOAg4OChIaFhoaFhIWFg4ODg4ODho2fra+kmpqgm52cnZ2gpKKck4eDg4KDg4ODgoGAgIKCgYOCgYKCg4OEhYWEg4OChISEhIOEhISDg4OEg4ODg4OEg4SDhIWEhISDg4ODgoKCgoKCgoKBgYKCgo+UlI+Njo6RkY6KiISCgoKCgYGBgYGCg4GBgIGBgYGBgYCBgIGBgYCBgICAgIKChIKChIOCg4ODgoJ9fX2AgH+AgoGDg4ODhIaEhIOEhYWDg4GBg4OBg4mVmJaVmJ+bnZ6dmpmXj4iGh4eGhoeHhoaEgoGCg4SDg4ODg4ODhISFhYWDhISFhISEg4KBg4OCg4SEg4KCg4SCg4ODg4OCgoKCgoKCg4OEhIOFhYWFhoaIk5OTkI+Pj5KRjIqIgoKCgoKBgYGBgYKDgoKBgIGBgYGBgICAgYGBgICAgICAhISEgoKCgoGBgoKBgX+AgYOCgICAf4CCgoGDg4KCgYODg4SDg4GDhYSCgYGFjZSTlpmcnZyVj4mHiIiHh4eIiIiFhIOBgIGBgoKCg4GCg4SEhYSDg4OEg4OEhIOBgYGCg4OEhISDg4ODg4OEhIODgoSDg4ODhIWFhoeHh4eIiIiJiY6TkpKOj46Rko+LiYeCgoKCgoKBgYGBgoKCgoGBgIGBgYGAgICAgYGAgIGAgICDg4KCgYKCgYGAf4CBhYWFhoOCgYB+fn+BgoSCgYKDhIOCg4ODg4KChISDhIODh4+VjZSYkIaDgoWFhYOEhIWFg4KBgH9/gIB/gIGEg4OEhYWEgoKBgoOCg4OFhIKDhISEhYaGhoaGhoWFhoeHhYaIh4aHiIeGhoaIiYeGhYaGhoeIkZKSj46QjpGRjImHhYGBgoKCgoGBgYGBgoOBgYGBgYGBgICAgICBgYCAgICAgISEg4KBgoGAgYGAgYKIh4aHhYSCgH99fX6AgH+AgYGBgYGBgoGAgYKDgYKCgoGAhpmIjIaCgoKBgICAf4GAgH+AgH9+gIGBgYKCg4OEg4OEg4OCgoGBgoODg4SEg4SEhIOFhYaFh4eIh4eHh4eHh4eGhoaGh4WFhYaGhISEhIWEhYaSk5GOjo+OkI6JiIeEgoKCgoKCgoGBgIGCgoKCgoKCgYGBgYGAgYGBgICAgYGAgoSDg4KDgoGCgYKDg4iHh4iHhYSCgX5+gICAfn5/f4CBgYGCgoCBhI2DgH+AgIB/gomOgIGCg4OAf39/gICAgICAgICDg4KDg4ODgoOBgYKCgoOCgYKCgoOCgoSDhISDg4SEhYWFhYaGhoaFhISEhYWEhIWFhYSEhISDhISEhISEipSTkZCQj46NiIaFhIOBgYKCgoKCgYGAgYKCgoKBgoKBgYCBgYCBgYGAgICAgYGAg4OCgoOCgoKBgoOCiImJiYiHhYSDgYKEhIOBgoKCg4SCgoSEgoOJloiEgoSCgn9/jJWCgoGChIOBgYGCgoODgoGDg4SDg4SEg4OCg4KDg4ODg4KCgoKCgoGDhISEhYSFhYWFhIWEhIWFhYWDg4OEhISEhYWFhISEhISEg4ODg4OOlZKQkZGPjYyHhYODg4GBgoKCgoKBgYCBgoOCgYCCgYGBgICAgIGBgYCAgICBgICDhYSEhIODg4SDhIOGh4mIhoWDhIODg4WDgYCDgoWFhISDg4OChI6Zi4OFhISEgoCRmYaCgoKEg4OCg4GBhIWEg4ODgoKDhISDg4ODg4SFhISDg4KCgoKCgoSEhYSFhYWFhYODhYWFhYaFhoWEhIWEhYWGhYWFhIWEhISDhIODhJGUk5KSj4yMioWEhIODgYGCg4KCgoKBgYGCg4KBgYKBgYGBgICBgIGBgH+AgIGAgYaGhoaGhoaHh4aGhYSDhYaCgIGBgYGHgoB+f4GBkIyDgX9+fXx9jJyOgIKBgYKChJSUjIGCgYKDgoKBgYKDhYODg4KDg4OEgoKEhIOEhIWEg4OCgoKCgYKCg4ODg4SFhYWFhIOEhYWGhYWEhISEhIOEhIWFhYWFhIODhIOEg4KGlJSSlJKPjYyIg4SEg4KBgoODgoKDg4GBgoKBgoKCgYGCgYGBgYCAgYGAgICAgICAhYWFhYaGh4aGhoWGg4ODg4GAgoKCgYKAf35/f4GWl4mAfX19fXuBmIyAg4GBgYCOlIyQgYKBgoKCgYKDgoODgoOCgoKCg4OBg4SDg4ODg4OEhIKCgoKDgoKDg4ODhIWEhISEg4OEhIODg4OEhIODg4ODg4SDg4ODg4KDg4KDgouUk5KTko2NioaDhIOEgYGCg4ODg4ODgoGBgoGCgoKCgoKBgYGBgICBgYCAf4CAgICDhISFhYSFhYWEhIWCg4KDgoKDg4OBgICAgICAgZWfin5+gH2Hi36EhIOEgoODgo2JhYyCgoOCg4KCg4ODgoODg4KCgoODgoKDg4KCg4KDg4WEg4ODg4SDg4SEhISEhYWEhIWEg4SEg4OEhISEhISEg4SEhYSDg4SEhIODgoKDkJSSkpKPi4yIhoSFg4OBgYKDg4ODg4OCgYGCgoKCgoKDgoCBgoGAgICAgIB/gICAgISDhYWEhYWFhYSFhYOEhIWDg4SEhIKCgoOCgoSBkaGKf4yFfYaJgH6FhYWEhYJ/fX19gIOEg4OEg4OEg4ODhISEg4OEhISEg4SEhIOEg4OFhoWFhYSFhYWFhYSFhoWGhoWFhYWFhYWFhYWGhoWGhoaFhoaGh4aFhYWFg4SEhIeTk5ORkoyKiIWGhYWCgoGBgoODg4OCg4KBgYKDg4ODgoKBgIGAgICAgICAgH+AgICAhYWFhYWGh4eGhYWFhISFhYSEhISEg4ODg4OEhYOJkYOEi4WCgYF+fYGHhoOAfn5/f39/f4OEg4SEhISEhISEhISEhISFhYWEhYSGhYWFhYaGhoWGhYWGhYWHhoaGhoaFhIWFhYWFhIWGhoaHhoaGhoaHh4iIiIaFhYaEhYWGjZSTkpGQi4qHhoeGhIGCgYKDg4ODg4KDgoGBgoODg4KAgYGBgICAgICAgICAf4CAgICHh4eGhoeHiIeHhoaEg4ODhIODg4OEg4ODg4OEhISEgYKCgYmBf359foWBf39/f39/f36AgISEhIWGhoaFhYWGhoeHhoaFhoWFhoeHh4iGh4eGhoaHh4eGhoeHhoaGhYODhIWFhoSFhYaGhoeHhoaGhoeHh4eIiIeGhoaHh4eRlJORkZCLiYiFhoWDgoKBgoODg4ODgoKDgoKCgoOCgYCBgICBgICAgIGAgIB/gICAf4aHiIeHh4eIiYmIiIODgoKDgoSEhIWEg4KCg4SEhIOBgICAhIR/fn5/gH9/f39/gIB/f4B/gImFhoiIiIeHhoaIh4iHiIiIhoaHiImJiYmIh4aHh4eJiIaHh4eHhoeFg4OEhYaGhYWFhoaGh4eFhoeGh4aGh4eHh4eHh4eFh5OTkY+RkIuHhoWFhIKCgYGCg4ODg4ODgoKCgoGCg4KCgIGBgYCAgICAgICAf3+AgYB/hoiIiIiHh4iJiYmIg4KCg4ODhIWHh4aFg4OFhISDg4GAgIGMiYGAgYKCgYGBgYB/gH9/fnt7goaHiYqKiYmJiImJiYmKi4qIiIiJiYuLioqIh4eIiIiHh4iIh4eGh4aEg4OFh4eHhoWFhISDhYWEhYWGhISEhYWFhoWGhYOJlJKQj5GOioaFhoWDgYGCgoKDg4ODgoKCgoKCgoKCgYGBgYGBgYCAgICAgIB/gICBgH+GiYiIiYeIiImJiIiEgoKDg4KDhImKh4aEhIWEg4OCgICAhISCgoKCgoKCgH9+fX19fX5+fHt7i4yIi4qLiomIiImJiImLiomJiImIioqJi4mGhoaGh4WGiIiIiIaGh4SDgoSHiIiIh4WCgoGDg4KDg4SCgYKDgoGEg4SDgY6TkpCPj4uJhYWGhIKBgYGBgoODg4OCgoKCgoKCgoGBgYGBgIGAgICAgICAgH+AgIGAf4WIh4eHhoeIiIiHh4SCg4OCgoOFiYqJh4WHhYSFhYKAgYOEgoOCgoKDgX59fX5+fn5+fn1+fX2Bl5CIjI6Hh4WGh4eHh4iHh4mHh4aIh4aJiYODhIOFhISFhYaIiIaFg4KCg4WHhoeGhoSCgoOEgoODhIKBgoGBgYODhIOEkZKQjo+Oi4eEhoaEgoGBgYGDg4ODg4KCgoKCgoKCgYGBgIGBgYCAgIB/gIGAf39/gIB/hYaGhYaGhoeHiIeGgYKEhIOChYeIi4qGhIaEgoaGgoKEhIODg4OCg4F9fH1/gH9+fn59fH1+fHqEmpOWioODgYKDhIaFhYODhYSEhISEhIWEgoKCgYSEgYKDg4WGhYSCgoGCgoODhYSEhIWEhIaEg4SFg4KDgYKDg4SFhIeSkY+Nj4yJhYSFhIWCgYGBgYODg4ODgoKCgoKCgoKBgYGBgYGAgICAf4CAgYB/gICAgICDhIWEhYWFh4eHh4aAgYGFg4OEhYSHiIWCgICAgX9/gIODg4ODgoKAfX1/gICBf31+fn18fX17enqInY2DgoGBgIGBgoKBf36BgYGCgYOBgoGCgoKBg4SAf4CAgYKCgICAgYCBgoGDgYGChIODhYSBg4SDgoKBgoSDhYWGi5ORj4+Pi4iFhYODhIGAgYGBgoODg4KCgoKCgoKCgoGBgYCBgYCBgH9/gIGBgICAgH+AgIKCg4OChIOEhYWGhn+BfoCBgICAf4GDgn9+fn5+fX+Cg4OCg4KDgn59fn+AgIGAfn19fX1+fXx6e3uKhYKAf39/f35/gIB+fYB/foCAgX+AgIF/f4CBgX59fX+AgX9+fn+AgH+AgICAf4CCgICCgYGDgYGAgYGBgYKEg4aPkpCOj42Kh4eGg4ODgYGBgYGCg4ODgoKCgoKCgoOCgYGCgYGBgICAgH+AgICAgICAf39/gYGDhIGCgoOCg4SFgIB/fH19fn19foCAf31/fn1+gIODg4KCgYF/fX1+f4CAgH9+fX19fHt7e3p6enuDhIN+gH9+fn1/f35/gH9+f3+Af4CAf359fn9/fn18fn+Afn5+f3+Af39/f4B/f4B+f4CBf4B+f39/gH9+f4B/hZKSj46Pi4uHiYWEhIKBgYGBgYKDg4ODg4OCgoKDg4KAgYKBgYGAgICAf3+AgIB/gIF/f36BgYSEgYKBg4OCg4OBgH98fn9+fX6Af4B/foF/f4CBhIOCgYB/f359fn5/gICAfn19fXx7e3x6enp6eX6Wk4N/gH9/fn9/foCAf35/f4B/goB/fH5+f35+fXx/f4B/fn5/foB/f35/f4CAfn5/f39+f35/f35+fn19fX2Fk5KOjIuKiImIhISEgoKCgYGBgoOCgoOCgoODg4ODgYCBgYGBgYCAf39/f4CAgICAgIB/foCBhIOCgYGDhISDhICBgICBgIGAgYKCgoGBgoCBg4ODgYGBgYCAfn19fn5+f359fX19fXx8fHt6enp5eYKLhICBgYGAgIB/f4F/gICAgYGCgoB+gH5/fn5+foGAgYF/f39/gICAf39/gYB+f3+Afn9/fn+Af31+fn17fIaTkYyLioeHioiGhoSDgoGBgYGCg4ODg4OCg4OCgoKBgICBgYGAgH9/f39/gICAgICAgH9+fn+BgYGAgISGh4aHgoSDhYKBg4ODhYSEhISEg4ODhIKCgoKCgX9+fX19fn6AfX19fX19fX19fHp6eXl5eoCCgoKFg4GCg4GAgoCCgYGDgoODgYGCgIGAf4CBg4GEgoCAgYCBgYCAgYCCgn+BgIF/gIB/gICAfn9/fnx8iZSQiomIiIiJiIaGhoSCgoGBgoKDg4ODg4KDg4KCgYCAgICAgYGAf39/f4CAgICAgIGBf359fn5/f39+g4aHh4iChYSFhISFhIWGhYaGhoWGhYGBg4ODgoKAfX19fX19fn59fX19fX18fX18e3l5eXl4fYKDhIWCgYSDgoKDhYeCg4SDgYKCg4OCgoKCgYKFg4iFgoGCgYKDgYGBgYSDgoOCgYKCgICBgIF/gIGAf36Ok4yHiIaIh4aGhYaGhIKDgoGCgoODg4ODg4OCgYGBgH+AgYGBgYB/gH9/gICBgH+AgYB/fn19fX5+f36Ag4SHh4SGhoaFhoaHh4aHh4iHh4eGf32AgICCgX59fX19fX19fX19fX18fH5+fnx7eXh4eXl5gIODf4OMhIOEhISXl4ODhIF9foGBgoGBgYKBg4aIjIWDgoKBhIKEg4KDhYSEhYODg4OCg4OCgoKCg4OCgpGQi4iIh4mHhoaEhoWEhISDgYKCg4ODg4ODgoGBgYCAgICBgIGBgH9/fn+AgICAf4CAgH9/fn1+fn+Bf4CCgYWFhYeGh4eHh4eIhoeHh4eGh4V+fX18fX9+fX19fX19fX19fX19fXx7iJKCe3x6fIZ5eXl8gYF+iJaDg4OEhJSTgIGBf39/fn6Ei4B/gICEhpCJhYSCgoGFhYuDgYKFhYaGhIOFhYOEhIODhIOEhISIko+MiYiIiYeHh4WGhYSEhIKBgoKDg4ODg4OCgYGBgYB/gIGAgICAf39/f4CAgICAgYGBf39/f4CAgIGBgYGBg4OGh4aGh4aGiIeGhoaFhIOFhH59fHx8fX18fH19fX19fX19fX18fH+RlZaDe3qElHx5enp7fH6Bg4GCgYOCgH59f397iJF8fI6Wf31/f4KGioWDg4SDgoONiX9+f4OEhYWDhYaFhIWFg4SFhYaEhI6Rj4yKioyJiImHhYWFg4SDgYGCgoKDhIODgoGBgICBgICAgYGAgIB/f3+AgIB/gICAgX5+f4GBgoKCgoODgoOCgoWFhISFhYSGhIOEg4KBgIKAfn19fHx9fXx8fH18fH18fX19fHx8e4uRl4x6e3yBenl6e3x5eX19f4B/gH98e3t+fn2ClZF/hIh9fH5/goR8fIGChIN/f4eDfYKBgIKCgIODhISEhISChIOEhYGEkZGOi4yMjoqJiYWFhYODg4KBgoODgoKDg4KCgYGAgIGAgICAgICAgH+Af3+Af357gICBenyAgYKDhYODhYWFhYODg4OCgYKDgoOCgoGBgIB/gX5+fX19fHx8fHx8fHx8fHx8fHx9fHx8fn6Kgnt6e3p4ent7fH18fn5+f35+fX19fH+BgH2Gj4F+fYJ+f36Agnx8gH+CgIGAfnx7ioJ9gH9+gYCAgYKBgoCAgIGAf4uUkIyLjo6NiIiHhYWFhIOCgoKCg4OCgoODgYGBgICAgICAgH9+fXx7fHx9f3+AgHx6gYF4e4CCgYOFhIOFhIaHhYSAhpSIgIKBgYGBgH9/f39/fn5+gHx8fHx8fHx8fHx8fHx9fHx8fHx9fHl6e3t4eHl7e3p8goCBf3+AfX9+f359gIKCgICAgX+CkYF/f4CAfoB+fn9+gIGBfX19e319fXx9fHx9gH+AgH6Afn6ClJKNjI2Oj4qFhoaFhISFg4KDgoODg4OCgoGBgYGAgICBgICAf4CAf39/fXt6fICAgHh+gXd7gIF/goKCgoKEhoeGhn6IlYp+gIGAgIB/foB+f39/fn+Bfnx7e3x8fHx8fHx8fH19fHt9fHx8e3x8fHp6eXt8en2Fg4OAgYF+gH5/gH6FgoF+gH9+foCFhoKAfn6Dhn99fH5/gIGAf39+fX19fX57fH1/f3+AfX9+f4yRjo2Njo2Nh4SGhoWEhIODg4OCg4ODg4KBgYGBgYCAgYGAgYGBgYGAgH9/f397en9/e3mAd3p/f31/f3+Af4KEhoaFf3+FgX5/gIB/gH5+f31/gIB/gIB/f319fHx9fn18fH19fX19fH58fXx7fXx8ent6fH19f4aFg4CAgH1+fX5/fouEgYd+fXx8f36CgX99fX19gXx7fXx+gYSDgYB+fn5+fXx+f4B9foB+f36Eko2NjI+NjIqGhIWEhIODg4OCg4KDgoOCgYGBgYGAgYGBgYB/fXx8fH1+f39/f397e399d352eH59fH18fX5+gYGCg4F6fn58fn6Af35/f35/fn+AgH+AgH9/fn9+fn5+fn1+fn99fH59fn19fXt8fHx7e3p9foCAg4OCf35/fHx8fXx8gYN+jH58e3t9fn1+fn17e3t9fHt7e3uAhoSChIOCf4B+f4KCgn9/goJ/gIuQjY2MjYuKiISEhIODg4ODgoKCgoKCgoKBgYGAgoGBgYKCf3+AgIB/fn18fH5/fn55fX52e3Z4fXx8fHt9fX6BgICAf31/f31+f39/foB/f39/f3+Af4GBgH99gH9/fn9+fn5/f3yCfX59fX17e319fHp8fH2BgoGAgIB9fX18fHx8fH18fnt/fnt7e3x8fH18e3t7e3x8enp9en6CfoKEhIOBgoGFhoWFhoaHhYGEkY+Ni4qLh4eFgoOEhISEg4KCgYGCgoKBgoGBgYGBgoGBgoKAgYKBgYCAgH9+e3x+fnx6fnh5dnd8fHx7e317f4GAf35/foB/f35/f35/gH9/f39/f39/gYKAfn6BgIB/f39/f39+fYN8fH19fH99fX19e3x+fn5/fn5/fnx8fXx8fXx9fnt8e3x8fHx9fH18fnx9fHt7e3x5e3x7e316fX5+f4CAg4eJiYmKiYqJhYiSj4yJioeFhYOCgoOEhIOCgoKBgYKBgYKBgYGBgYKCgoGCgoCAgX98e3p6eXt9enx+fnl8eXh4dHx8fHt8fHx+gH9/f39/gIB/fn5+fYCAgH9/f3+Af4CDgoB/gIGAgIB/f4CAgH58enx9fX59fX5+jIZ9fX57e4ODfX19fH18fX19fX19fH18fXx9fX58fn19fX18e3t6fHt8fHt6e3t6enp7fn6ChYiHiIqLi4uJjJGQjoqJhoWEgoKCgoODg4OBgYGBgYGBgYGBgYKCgoOCgYKBgIGBf3+Af356eHl5en5+e3l6eH5zfHx8e3x8fH5+fn5/gH+AgIB/fn9+gIF/f4B/gIGAgoSEgYCAgYGAgX+AgYKBf39+f31+gH57foGSjHx9f4qAjYx+fn19fX59fX59fHx8fn18fXx9fX1+fX1+fnx7e3t8fH18e3p7e3l6eXl5e35/g4OEh4mKiImOkI6MiYmFhISCgYKCgoKCgoGCgoKBgYGCgYKCgoGCgoKBgoKAgYGAfoCAf39+e3p5e319eHx6f3KBfXt7fXx8fn59fYGBf4GBgX9/gH+AgX+AgIGCgYGFg4SCgYGCgYKCgICBg4KAf4F/fX6Afnx/f4mCf36DkYSEg4F/fn18jYd9fX59fXx+fnx9fXx9fX5+fX5/fH19e3x9fnx8e3x9enp5eXl5ent+foCBg4eEiI+Oi4qHhYSEg4KBgoKCgoGBgYGCgoKBgoKCgoKCgoKCgoGCgn+AgIB+f39/fn5/ent5fX16enp9cX6Cent9fX19fXp4f4KAgYKCgICBgYGBgICBgoKCgoaFhIKBgYKBgoF/gIKEgX9+gYB9foF+fX5/gIB9foCEgH5+f31+fXyKhX1+f31+foB+fX18fH5+fn99f4B9fX18fX9/fHx7fH17e3t6enp7e3x9fX2Ag4CJjouMiIWFhYSDgoKCgoKCgYGBgoKBgoKCgoKCgoGBgoKBgYKCf4CAgH9/f39+fn59eXp6fXx5d3t0e4d8dHd9fn17e3Z2fYCBg4KBgYKCgoKBgYGDg4OChYaEg4CAgIGDgX+AgYSBfn6Af31+gH59fn6AgH+Bfn+Af39/gH99fn5/f3+Afn9/gH58fX18fn5+foF/gH2CgHx9gIB9e31+fXx8e3x9e3t7fHt8fHx9fIqKiYmGhoWFhISDgYKBg4KAgIGCg4KCgoOCgoKCgoGCgoGBg4J/gIGAf39/fn5+fn57enp8fHt2e3R3f352cnt+fnt4dnd8gIGCgoKBgoODg4OCgoSDhIOFhoOCgX9/gIKBgICAg4B+foB/fX+AfX1+foCAf4J/gYCAgICBgH1/f3+AgICAgIB/fnx9fX19fn59g32AfoKAfX6AgX98fn59fX17fX58fXx8fHt8e3x+ioeHhYaIhYSFhIKCgoGDgYCAgoKDgoKCg4ODg4KBgYGBgYGCgH6AgYB/fn5+fn5+fn56e3p9goN9dXF6fHpxen59eXh0dICAgoKCg4KDhYOEg4KDhISEhIWEgYGAgH6Agn9+f36Bf35+f4B9foB9fX1+gH9/gYCBgICAgIGBfn6Af4GAf4CAgH9+fX19fn1+fn19gYR/gH9+f4GBf31/f319fn1+fn1+fHt8enx7eoCIg4SEhYSEhIWDgYKBgYKBgICCgoOBgoOEg4SDg4KBgYKBgYOAfoCBf35+fn5+fX5+fnt7en6Jh354cnl9f3F6eHt4eXV1fYKDgYODg4OFhIWDg4OEg4OEhIOBgICAf4CBfn19fn9+fn5+gH19f3x9fX6Af4CAgIKAgIGAg4KAf4B+gIF+gIGAgH9+fn5+fn1/fn6FhYGBgX+Ag4F/foGAf35/f4B/fn17ent6fHt6goWAg4KCgoKCg4GBgYCAgoGAgIKCg4KBg4SDhIKEgoGBgoGCgoB+gIF/fn1+fn5+fX59fXp7fIWEe3tzeXt8cHd1dnd5dXR6hISBhISDhIWFhoSDg4WEgoODgoCBf39/f4B9fX1+f31+f39/fn1+fH19foF/f4B/gIB/gICDgoGAf36AgH+AgYCBgH9/f39/f4B/gIGCgoKBf4CDgn9/g4J/f4B/gX+Af3x6fHp8e3yCgH+Cf3+BgIKCgYF/f3+BgH6BgoKDgYGDg4KEgoSCgYGBf4GCgH6AgH9/fX5+fX19fn19e3t6gH94fHZ5enxxdHh3dnh1cnmFhYKEhIKEhYWGhISChIOBg4GAgIF/f4B/gHx9fX6AfX5/f39+fX98fn5+gX+BgH9+f4B/gYOCg4B/f4GBgIKBgYGBgIGAgIB/gIGAgIKDgYF/gISAfYGDhICAgX+BgYKBfXp7e3x8fYB9f4B8f399fYGAgH59fX9/foKBgYKBgIKCgoKBg4KCgYB/gYKAfn9/fn99fX1+fX19fX19ent7fHZ9eXh6enJ1eXl2d3dzdYaFg4WEgoSEhYSEhIGDgoGDgX+AgX5+gH6AfX19foB+f4B+fn99f3x/f3+BgIF/f3x+gH6AgYKDgYCAgYOEgoGAgYB/goCAgYGAgYGBg4OBgX+Ag4B+goOEgICCgYKChIJ+e3t8fHx9fn1+fXp+fX14fn9/fHx8fn5+gYCBgYCAgoGBgYGDgoGBf4CAgoB9fn19f319fX59fH19fX16e3p8dnx6d3t4cnZ5e3Z2dnN0hoSEhYSChISFg4ODgYOBgYOBgIGBfX+BfoF9fX1/f39/gH5+f359fYB/gIGBgX9+fH5/fn5/gYJ/gYGCg4eFgX9/fn6Af4CAgICAgIKCgYCAfoCCf3+BgoOBgYOCg4OFg399fX18e3x8eXp7en15e3l4f357fHt+fX1/f4F/gH6BgICAgoOCgYF/gIGBf31+fH1+fX19fX18fn58fXx5e3x4enx3endzeHd6c3Z2c3SFhISGg4KDhISDgoKCg4GCgoGAgYF9gIB+gH1+fX5/gIB/f39/f3x/f3+BgIGAf359f39+fn+BgH2AgIGDg4N/f359fn5/f4CAgIB/gYKBgH9+f4F+f4CCgoCBg4KEhIaEgH5+fHx8fHp5dnl5enl2eXZ+fHt7e359e399gH59fX9/f3+BgoGBgX5/gYF+fX18fX19fX19fXx+jYF8fXl7e3p5fHd4eHR1dXhyd3d0doaEhIWEg4ODg4OCgYKDgoGDgn+Bf35/fn+AfX19fX6AgIB/f39/fIB/f4GAgYCAf3yAf35/fn9/fX5+gYGCgn5/fn1+fn5+f3+Af32AgIB+fn5/gX5+gIKCf4KDgoOEh4SAgH58fXx8e3x1eXl4eHh5d3t8e3t7f4V9fn1/ent+fn59foGAgIGAfX6BgH59fXx9fX19fX18e32Dgnx8ent7e3p7d3Z4dXJzdnB4eXJ4hYWFhYOEhIOChIKBgYKBgIKBgIF/fn5+foB+fX58foCAgH+AgIB8gH6AgH+BgIB/fYB+fn9/f359fX6AgYGAfn9+fn59fX5/fn9+fH6Af35+fn+Cfn6AgIF+gYOCg4OGhICBfnx9fHx7fHh3e3h1eXd3eXx6e3t9kod9fH13en1+fn19f35+gH98foB/fn19fH19fX19fHt8ent9enp4e3x6ent4dHh1cXJ0cHh4cXmEhYWFg4SDgoODgoGBgoKAgoCAgIB9fn5/gH18fnx/gIGAgICAgHx/f4B+f4GAf399gX9+f39+fX18f4CAgIB+f35+fn18fn9/f358fYB/fn1+gIJ/foCAf36ChIKCg4WFgoJ+fXx7e3x8eXd7eXd4d3d4e3t6e3yFiX17end6fH19fHx9fX1/fnx9fn59fXx8fX5+fX18fHt6enx7e3p5enp7enhzd3VxcXNveHdxe4WGhYWDhYKBg4OBgoGBgoCCgICAgH5/fn9/fXx+foCBgoGAgIGBfX6Af35/gX+Af3+BgH9/f319fH1/gICAgH9/f35/fXx+f39/f319f39+fn6CgYF/gIB/foGDgoKEg4SCgn5+fHx6fHt7eXt6d3N2d3h5e3p7eXp/fnt7d3p8fXx8fH59fH19fH19fXx8fX19fX99fXx9e3l7fHx7enp6enp6eHN2dXBwcm93dnJ7hYaEhYOEgoGDgoKBgYGCgYKAgYGAf4B/f399fX9+gICBgYJ/goF9foF+fn+Bf4B/gIJ/gIB+fH58f3+BgICAf4B/f4B+fX5+f4B/f39/gH9/f4J/gICAgIB/gYGAgISBgoKAf39+f3x9fn56fYV+dHx9enp6enx5eXp6hoV3eXx8fHx8fXx8fHx8fX19fHx9fX19fn19fX16eX18fH16enp6enp5c3V1b29xb3d0c3yFhoOEgoOCgYKBgoKCgYKBgoGBgYCAgICAgH59gH+Af4GCgn+CgX+AgX5/gYB/f4CAgn+Bf319f35/f4KAgICAgIB/gIB+fn1/gH9/gIB/f39/gH+AgICAgH+AgYCBgYGCgYCAf39/fn1/fnuBk416fH18e315e3p6eHqBgXh5e3x8fXx8fHx8fHx9fX18fH18fn1+fn59fHp8fHt8fXt5enp6eXl0dXVvb3Fwd3N0fYWGg4OCg4KAgYCCg4KAgYGCgYKBgYCBgIGAfn6Af4GAgYKCgIKCgICCfoCBgX9/gX+BgIF/fH6Af3+AgoCAgICAf3+AgH9+fX6Afn2AgIB/f3+AgICAgYCAf4CAgYCBgYKCgICAf39/fX5+fIGGiXx8fnt7fnl6e3p7j393d3l7fHt9fHx8fHt9fH19fX18fXx+fn5/f358enx9e3x9e3l6e3p5eXN0dW5zcXB4cnV6hYaDg4KDgoCAgIKCgYCCgYKBgoGBgYKAgYF/fn9/gYGCgYKBg4OAgYJ/gYGBf4CAgIB/gX99f4F/gICBgICAf4B+gICAf359foB+fn+Af39/gH9/gICBf4CBgH+BgIGCgoKAgICAgIB9foB9gIOCe35+e3x9e3p8fHuHenh4eXx8fH17fHx9fX18fH19fn19fX5+f3+Af317fH18fHx7enl7e3l5c3J1bnZycHhxdXaFhYOEg4KCgICBgoF/gIKCgoKDgYGDgoCCgYB/gICCgoKBg4KEhICBgX6BgoF/gICAgH+Cf36AgYCCf4B/gIB/gH+AgIB/fn2Af35/f4CAgH+AgH+AgYF/gICAgIGAgYGBgYGAgYCAgH9/gH5/fX59fn57fXx9e3x8d3h1eHh5e3x8fXx8fHx8fX5/f39/fn19fn9/gIGAf3x9fHx9e3p7eXp8eHpzcnVud3FxenF2d4WFg4SDg4KBgoKDgICCgYSDg4SBgYOBgoKCgYCAgIKDgoCCgoSDf4GAfoKDgICBgICAf4CAf4GAgYKAf4CBgH9/gICAgIB/f4CAgH+AgICAgIB/f4CBgYCAgICAgYGAgoOCgoCCgYGCgYB/f4B/gId+fnx7fXx7fX94d3Z5eXp8fHx8fXt8fH19fn5/gIGAfn1+gICAgoGAfH59fX58d3t6ent5eXNxdW53cHV6cXZ5hYWCg4KDg4KChISAgIOBhoODg4GChICEg4KCgICCgoSBgYKBhIJ/gIB/gYOCgYCBgYCAf4GBgYGBg4B/gIOCf35/goGAgH9+gYCBf4CAgYCBgYCAgIKBgYKBgX+BgYGBgoOCgoOBg4OCgYCBgH9/hH19fXx/fXp9f3t6dnp4eXt7fH19e3x9fX19fn+AgYGAgH+AgICDg4B8f35+fn15eXt6enp5c3J0b3dxd3lzd3uFgoKCgoOEgoOEg4CAg4OGg4ODgoKEgYSDgYOAgIKBg4GCgoGCgX6AgICCgYKBgYKCgIGAgICCgoGEgH6Bg4F/f4CDgoCBf4CCg4KAgYKBg4KDgoGBg4KChIGAgYOBgYKEg4KEhIODhIODgYGBgoCCf4B/fYB8enx/e3t3fHl5eXt6fX59fHx8fH1+foCBgYCAgIGBgYSEgH2Af39/f357e3t6e3p0cHhxeXR2eHR2e4SCg4KDg4SChIODgYKChIaEgoODg4SBhIOAg4CBg4KCgoKCgIKAf4GAgIKBgoGCgoKBgIGBgYOCgoOAfoGDgX9/gYSEgYN/goKBg4KCgoGEg4OEgIKEgoOCgoGCgoOBg4SDhISEhISFg4SCgYOCgYOBgYGAgH58fIB9fHh8eXp5enx9f3x7fHx9fX18fICAgICAgYGBgYKBf4CAgICAf3t7e3p6enVweHd5dnV8dXZ8gICDgoODg4OEhISBgoOFhYWDg4KDhIKEhYKCgYKDg4GCgYKAgYB+gYCBgYKDgoKCgoGAgYKCg4KCg4B/gYOCgICChIODgoGCgoGDgoKDg4ODg4SAgoSDg4OBgX+Bg4KDhYKEhISEhISDhISChIOEhIKBgoCBgHt9gX58eXx6enp9fHyBfXp8fH19fHp7fn5+gIB/gYGAgICAgIKBgIB/fX18fH18dnJ2eHh2dH92dX2Hh4OChIWDg4SFhIGChIaEhIOCg4SEgYSFg4KCgoODgYOBgoCCgH2AgIGCg4KCgoKEgoCCgoODgoKBgICBg4KAgYOFhIOCg4CCgoOCg4ODg4OEg4CCg4KEg4KCf4OBgoSEgoODhISEhIOEhIOEg4WEg4ODgoKAe4CBf3x8fXp6fH2AfX9/fHx6fH59fH19fn5/f39/gICAgH9+foCBgICAfnx9fn5/fn18fHh2f3Z3f4SHg4KDhoODhIaEgYKFhoWEhIODhISChIWFgoKDg4SCg4KDgoKBfoCAgoKDgoODg4SDgYKCg4OCg4KCgYGDgn+Cg4SDg4KEf4KEg4ODgoSDg4SCgIOEg4SDg4KCg4KChIOCg4OEhISEhIWEg4OEhYSFhIOBgoB9gYKAfXx8e3x8gH19foB+fn1/fnx8fH19fn5/fn+BgYGBgH99fX6BgYB+fn1+fX59fX5+f3+AfH2AgYKCg4OGg4SDhoSBgoiGhYSDg4SEhYGFhYWDg4SDhIODgoOCg4F+gYGCg4SCg4OEhIOCg4KEg4ODgoKDgYOCf4KDg4ODgoOAgoWDg4ODhIODhIOBgoSEhYODgoODg4GEg4GDg4SEg4SEhYSEhIWFhYWEg4ODf36BhIB9fXx8fHx/gX5/f39/fX99e3x9fX19fX5+f4CBgIGBgH59fH6Cf39+fn5+fX1/f39/gICAf4CEhIODg4WDhIOFf36CiouFhYSDgoSFgYaGhoOEhISEhIODg4OEgn+BgYODhYSFhIWEg4KEhISFhIODgoSDhYKBhISFhYaEgoCDh4SDg4OFhIWFhIGEg4OHgoOCg4GCgYSDgoODhIODhIWEhYWHh4aHhYSEhYSBf4GDf35+fH5+fX+BgH9+fHx/f358enx9fX19fX5+fn9/gIGBf319fIB/gH5+fn5+f3+BgYGBgYKAgYWFhIOEhIKEg4aAgoSFi4mEhISEhYWCh4aGhISEhIWEhISEg4SDgYKDg4OEhIaEhYSDg4SEg3yDhHuBhHd5g4F9hH5+cnWDgoF2foOEgH2BdYF5g39/f36EhIKDgoOBg4SDhISFg4SFhoSFhn2EeXx+f4N7hYOBhIOAf31+f35+gYOBfXt/fX6Afn18fHx9fX19fH19foB/gYJ/fX18f4GBgICAgH+BgYGBgYKDg4KChoSEhIWEgYOEhYOEhYSKiIWFhYOFhYSGhoaDhISFhYWEhYWEhIWCgoOEhYWFhoSFhIOEhYWCaICFanx7cXF8gXOGc3R0fYKDdXNxg4ZzcHVyc3SDdnt9dYF/goOBgnZ5hYCDgIR/hYSChYWCaHpyc3N8gHKChH6Dg32BfX5/fn+Cg4J8f4F9f4B9fXx8fHx9fHx8fn1+gX+BgX99fX2AgYKBgYGBgIGBgYKBgoKCgoSHhIWEhYSBgoSGhoOFhIaIhoaFg4aGhoeGh4OFhYaFg4KFhoSFhYODg4SEhoaGhIaEg4SFhn1we4FweXZ+g3+CbnlwdXN8dnl5hnKEg3B2eHF2dHR1cnN0dml/gG5yb3R2bnVsd216c26Ah3ltfXJzdnN2bW53bHB5bHV9f358foGAgX2Af32Af4B/fX18fHx9fH1+f32Af4CAfnx/foCBgYCBgICAgYCAgIKDgoKEhYeGhoCChYODhYeGg4WFhYaHh4SDhoaIiYaHhIWGiIeEg4WGhYWEhIOFhIKFhoaFhoWEhoWHdnB0e3BydX+HhYNtdW92b3x1coR5eYd4cXR3bndod3pucHaCcoN+b3p5eW1vbnpvb2x3fXiGcHF6cHJ0ZoF1fm57eXNveX+Af31+gYB/e39+fIB+gIB+foCAgYB+fn9/foF/gH9+fYB9f4CBgIB+fn+BgH9+goOCgoSFh4eEfoeEg4OFh4aEhYWFhoaIhISGh4iIhoeEhoaLioWEhoeHhYOFhIWEgoWFhYWGhYWGhYZxdXByc29zenl+hHSIdHV+iHZugnKEhnluanJ/cW1zd3x/dXR8hH54cXV3bnl1enF2eHV6eYRyaW95eHBreXN6b3p3dnZwgYB/fn5/f396fn18f31/f359gIGDg4CCg4GBhIKBf4GCgH1/f4F+f35+f4GAfn6BgoCAgoSHhoODh4SEhIWHhoWFhYWHhoiFhYaFh4eFhoSGhomIhYSJi4iFhIWFhoWDhYWEhoaGhoaFg3iLeXKIentwcIWEeIV4eWtzfnl7a3KDh4N6fG16eXl0fYB2bm+AgG90fHV3cXl9fW1+dW+DhYZ6gHJye3x1cG96a3N8bnaCgYF+fn99fXt9e3x9fH9/fn1/f4KCf4GDgYGDgYB/gICAfn9+f31/fn1/gH58fYGAfn6Ag4iFhoOFhYWFhoeFhYWFhYeHiIaEhoWHhoaFhIWFhIWFhomKh4WFhoWGhoWGhoSGhoaGhoWGh4eHhoaDhoWGh4iHhYeGhoOHhoWFg4SFhoWGhIaEg4SEhoSEgYODhIOFhIWEhYSGg4WGhYWEhIWHhoSEhYaFhX13hYOEhIOCgX5/fnt8e357fHx9f399fH9+gYB9f4F/f4GAfn5+gH5+f35+fX99fX5/fHt8gH58fH+BiYaFhIaGhoWGhoWFhYWGhoeIhoSGhYeFhYWDhIWGhYSGhoeGhYSGhIWGhoaGhIeGh4eGhYeIiIiIhoWHhYaGiIaFiIeIhYeGhoiFhYaHhYaGhYOChYWGhYWDhYSEhIaEhoWEhYWDhoaFhoWEhoeGhISFhoOFhIKEg4OFg4OBfYB/e3t8fnt8fH1+fnx8fn2Afn1/gH5+gH99fXyAfX5/fn5+f3x8fX57fHx/fHt7fn+Ih4SEiIaGhYeGhYWEhoaGhoiHhIWGh4aFhIODhIaFhIeFhoaFhYaEhYaGh4eFh4aJiIaGiIeIiYiFhYiFhoeGh4aHhoeFh4eGh4WFhoeFhoaFgoOFhoaEhIOEhIOEhoSGhYWFhYOGhoWGhYSGh4WEhIWFg4SHhoOCg4SDhIJ+gYB8e31+e3x7fn59fHx+fX5+fX9+fX1+fnx9fH98fn58fYF/fHx8fXx8fH56e3t8foiHgoWIh4eGhoaGhISGhoeGiIaEhYSHhoSFh4OEhYSFh4SFhoaFhoSGhoeHhoaHh4mIhoaIh4iKiIWGiIWGh4WHhoeGh4WIiIeHhYaGh4WGhoSChISFhoWFhISEg4SFhIaGhoWGhIaFhoaFhYaGhYSDhISDhIeDhIGChIWDgYCAgXt7fn18fHx+fXx8fH1+fH18fn18fX18fHx8fXx+fXt8gX99fH18fnx8fHp6fHx9iIeChoiHhoeGhoaEhYaFhoaGhYOFhIaFhIiJg4GEg4SGhIaGhoaGhIeHiIiHh4eIioiGh4iHiImIhYiHhIaGhoeHh4WHhoiIh4eFh4eHhYaHhIKEg4SGhYeFhISEhISFhoaGhoaFh4WFh4WGhYaFhIOEg4OEh4GDgIKDhIKCgn+Ae31/fXx8fH59fH19fH17fHx7fHx9fXt7e318e359e3x/fX18fX1+fXx6ent7fHyIh4KGh4aGh4aGhYSFhoWFhYWEg4WChoSDiId/enqChYaEhoaFh4aEh4eIiIiHhoiKh4aHh4eIiYeFiIeFh4eGhoeHhYeGiIiHhoWHhoiGhoeEg4SEg4aGh4WFhISEhYaGhoaGhYaHhoaIhoaEhoWDg4ODgoOGgYN+goKDgIOCf398f39+fHx9f318fX18fnt7e3p7fHx8e3t7fnt7fXt6e358fHx8fX5/fXt6fHp8fImHg4aFhoWGhoWFhIWFhYWFhIOBhIGGhIKEhHyAhn+ChYWGhYWGhYSHh4iIiIaFiYqHhYeGh4eIh4WIhYaHiIaGh4eGh4aIiIeFhoeGh4WFiIOEhoWDhoaHhoWEg4WFhoaGhoaFhoaHhoeHhYOFhYOBgoKBg4WCg36BgoF/hIJ/fn5/fn98fH1/fXt9fXx+enp7eXt8fXt7e3t+fHx8fHp7fXx8fHx+fYF8e3t7e3x8iYeEhoSGhIaGhYSFhoWEhIOEgoCDgYaDgYJ/eoSMe4CEhYeGhoaEhIeIh4aHhYWHiYeEh4WGhoiGhYeEhoeIhoaIh4eHhoeIhoSGhoaHhYWIg4SFhIaGhoeFhYSDhYWGhoeGhoWGhoaFhoaEg4SFgoGCgYCEg4KCfYGBf36DgX5/f4B8f3x9fX59e359fH15enp5e3x9enp7e318fXx8enp9fHx9fH5+gHt7e3x+fXyIh4WGhYeEhoSFhYWFhYODgYOBgIKBhYJ/gH9/fXx7gYSFhoaEhYSEh4eGhoaFhIaJhoKGhIaGhoWFh4WHiIiGhYiHiYeGhoeFhIaFhYeFhIeDhIWEiIaGh4WFhIKFhYaFhoaHhIWGhoWFhoKDg4WAgIGAgIOAg4B8gYB+foKAfYB/gX2AfH1+fX57fn18e3l6enl6fX15enp7fHt8e3t6e319fH18f35+fHt7fX59fIiGhYaGhoSFhYSFhYSDgoGAgoGAgICDgX5+foB5en2Ag4SFh4WEg4OHhoOEhYSChYiFgoSDg4WFhYWGh4aIiIaFiIeJh4aFhYWDhoSFh4ODhoSEhYSHhoWGhYaEgoWFhoaGhoaEhYaGhIWFgoKDhH9+gICAgYCDgHyBf31+gn5+gH6Af399fX59f3t/fXt6eXp6eXp8fXl6ent7enx7e3t7fH19fXx/fn18fHx/fnx7h4WFhoaGhoSFhIWDhYKBgICAgYB+f4KCfX1/f3t/f4KDg4WGhYSDg4aDgYOEgoCFh4WCg4GBg4SEhYaGh4eHhYWIhomHhYSEhIKFg4SGgoOGhISGhIeGhoWFhoOEhYSFhoWGhISFhIWDhYSAgIKDf35/f39/gIN/fIB9fX+CfYCBfn6Bfn5+fX1/e398e3p5enp5ent8eXp6e3t7fHp7e3t8fX19fYB9fXx8fYB/fXyGg4aGhYaGg4SDhoKFgYGAf3+AgH5/gYF8fn9/foCAgoKChISDgoGChIGAg4KBgISFhIKBf4CCg4KEhYWHhoaEhYeFh4WGgoOCgoOCgoWBg4WEhYaEhoaGhoaFg4SEg4SFhYWDhIODhIKEhIB/goJ/fX5+fn5/hH57f3x8gIF9gYB9foN9fn59fX57fnt7enl7enl6ent5enp6e3t8enx8fHx+fn1/gXx9fHx9f4B+gIaEhYWEh4SEg4KGgoOAgYB+fn+AfX9/gnx9f35+fn+BgYKEg4KBgYKCf4CBgoCAgoWEgoB/gIGCgYKFhYeFhISGhoOFg4WBgoGBgoGCg4GChISEhYWGh4eGhYWDg4ODhIWFhIGDgYOChIODgH+AgX59fX5+fH6Dfnx+fHyBgX6Cf35/gnx/fn19fHx8e3t6enp6eXt5enp5enp6e3x5e317e35/f4GAfX99fX1/gICAhoSEhYSFgoSCgoSCgoCBgH59fn9+fn6AfX2Afn5+foGBgoODgoSHgYF+gICBf3+ChIOBf35/gIJ/goWEhYOCg4WFgoSBg4CBgIGAgYKBgIGEg4OGhYWHh4WEhIWCgoKDhYSCgYGBgYCFg4F/foB/fnx8fn18foN9e358fYB/gIN9fYCBf35/fXx8fH17e3p5enl5e3l6enl6ent7e3p7fXx8f3+BgoB+gH+AgH+AgIDKysrKysrKysrKysrLy8vLy8vLy8vLy8zMzMzNzc3Nzc3Nzc3NzczMzMvLy8vLy8vLy8vLy8vLzMvLy8vLy8vLy8vLy8vMzMzMzM3Nzc7Oz8/Pz9DQ0NHR0dLS0tLS0tLT09PT0tLS0tLS0tPT09TU1NTU09PT09PT09PT09PT09PT09PT09PT09PT09PT09PS0tLS0tLS0tLS0tPT09PT1NTV1dXV1dXV1dXV1dXV1dXV1NTU1NTT09PT09PT09PT09TU09PU1NTU1NTU1NTU09PT09PS0tLS0tPT09TU1NTU1NPT09LS0tLS0tLR0dHR0dPHhnNlYFtLWWdVTUZIQD03Nzg5Nzw8PDo8Oz42Oj04PDs6OTg3ODs7Oj87PTs8PD47P0E/QkJBQ0RFREE+PTw7QENDQUBDQ0FBR0hHSUtSwtXS09PT09TU1NTU1NTU1NTU1NXV1dXV1dXV1dXVysrKysrKysrKysrKy8vLy8vLy8vLy8vMzMzMzMzNzc3Nzc3Nzc3MzMzMy8vLy8vLy8vLy8vLzMzMy8vLy8vLy8vLy8vLzMzMzc3Nzc3Oz8/P0NDQ0NHR0tLS0tLS09PT09PT09PT09PS09PT09TU1NTU1NTU09PT09PT09PT09PT09PT1NTU1NTU1NTT09PT09LS0tLS0tLT09PT09PU1NTU1dXV1dXV1dXV1dXV1dXV1dXV1NTU1NPT09PT09PT09PU1NPT09TU1NTU1NTU1NPT09PS0tLS0tPT09PU1NTU1NTU09PT09PS0tLS0tLR0dHSzIxyZ2BcTVllUktHSz87Mzc4Ozg5Pj05PDpBOjs9Nzs8PDo6Nzg6Oz0/Oz88PTw/Pj9BPUFBPkNDREJAQT46Oz9DREFDRERCQklHSEhJTr7V0tPT09TU1NTU1NTU1NTU1NXV1dXV1dXV1dXV1crKy8vKysrKysrKy8vLy8vLy8vLy8vLy8zMzMzMzM3Nzc3Nzc3NzMzMzMzMy8vLy8vMzMzMzMzMzMzLy8zMzMzMzMvLzMzMzc3Nzc3Ozs/P0NDQ0NDR0dLS0tLS09PT09PT09PU09PT09PT09TU1NXV1dTU1NTT09PU1NPT09PT09PT1NTU1NTU1NTU1NPT09PS0tLS0tLS0tPT09PT1NTV1dXV1dXV1dXV1dXV1tbV1dXV1dTU1NTT09PT09PT09PU1NTU09TU1NTU1NTU1NTT09PT0tLS0tLT09PU1NTU1NTU1NTU09PT09PT0tLS0tHR0s+Sd2hfXk9XZ01LRks9ODc2NTk5OTw+OT88Qzk7PDc5PD07OTc5Ojw9QDs+PT47PD48PT5BQD5EQ0NDP0E9Ojs+QkNFQ0NEQT9FSEpJSky61dPT09TU1NTU1NTU1NTV1dXV1dXV1dXV1dXV1dXLy8vLy8vLy8rKysvLy8vLy8vLy8zLy8vMzMzMzMzNzc3Nzc3Nzc3MzMzMzMzMzMzMzMzMzMzMzczMzMzMzMzMzMzMzMzMzc3Nzc3Ozs/Pz9DQ0NDQ0dHS0tPT09PT09PT09TU1NTT1NTU1NTU1NTV1dXU1NTU1NPU1NTU09PT09TU1NTU1dTU1NTV1dTU09PT09LS0tLS0tLS09PT09TU1dXV1dbW1dXV1dXV1tbW1tXV1dXV1NTU1NTT09PT09PT1NTU1NTU1NTU1NTU1NTU09PT09LS0tLT09PU1NTU1dXV1dTU1NTT09PT09PT0tLS0dHRmn5nYWJOVWpKSElLPzw6OTM3Njc2PTs+Oj06Ojo4ODo7Ozg4Ojs7PD46PT09Ojw/PD0/QkA/Q0RDRD5APT08QENEQ0JEQkQ+REhJSUtMttfT09TU1NTU1NXV1dXV1dXV1dXV1dXV1dXV1dXVy8vLy8vLy8vLy8vLy8vLy8vLy8zMzMzMzMzMzMzNzc3Nzc3Nzc3Nzc3MzMzMzMzMzMzMzMzNzc3NzczMzMzMzMzMzMzMzc3Nzc3Ozs7Pz8/Q0NDQ0NHS0tLT09PT09PT1NTU1NTU1NTU1NTU1NTV1dXV1NTU1NPT1NTU1NTU1NTU1NTU1dXV1NXV1dXV1NTU09PT09PS0tLT09PT09PU1NXV1dbW1tXV1dbW1tbW1tbW1dXV1dXU1NTU1NTU1NTU1NTU1NTU1NTU1NXU1NTU1NTT09PT09PT09PU1NTU1dXV1dXV1dTU1NTU09PT09PS0tLR0p+DaV9kU1hsSEhIS0E9Nzg0NzY6Oj87RDw8Ojw8OTg6OTo6Ojs8Ojo7OT49Pjk9QDs/QUFCP0JCQUM9Pz8+PEBCRUNDQkBBO0ZJR01MSbLY09TU1NTU1NXV1dXV1dXV1dXW1tbW1tbV1dXW1svLy8vLy8vLy8vLy8vLy8vLy8vMzMzMzMzMzM3Nzc3Nzc3Nzc3Ozc3NzczMzMzMzMzMzc3Nzc3Nzc3Nzc3Nzc3Nzc3Mzc3Nzs7Ozs7Pz8/P0NDQ0NHS0tLS09PT09PT09TU1NTU1NTU1NTU1NTV1NXV1dTU1NTU1NTU1NTU1NTV1NTU1dXV1dXV1dXV1dTU1NTU1NPT09PT09PT09PU1NXV1dbW1tbW1tbW1tbW1tbW1tbV1dXV1dTU1NTU1NTU1NTU1NTV1NTU1NXV1dXU1NTU1NTT09PT09PT1NTU1dXV1dXV1dXU1NTU1NTT09PT09LS0tSjiGxfZlJWakdIR0lBPjM2Njo7PDhDPEJBPjtBPDg5Ojw6Ojw8PDk8PTo7PD09PD89QD9AQT9AQUBCPD4+PzxCQ0NDRkBBQT1ISklOTUeu2NPU1NTV1dXV1dXV1dXV1dbW1tbW1tbW1tbW1tbMzMvLy8vLy8vLy8vLy8vLy8vMzMzNzc3Nzc3Nzc3Nzc3Nzc3Nzs7Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Ozs3Nzc3Nzc3Nzc3Nzs7Ozs7Oz8/P0NDQ0NHR0dLS0tPT09PT09TU1NTU1NTU1NTU1NTU1NTV1dXV1dTU1NTU1NTU1NTU1dXV1dXV1dXV1dXV1dXU1NTU1dXU0tPU1NTU1NTU1NTV1dbW1tbW1tbW1tbW1tbX19bW1tXV1dXV1dXV1dXV1dTU1NTU1dXV1dXV1dXU1NTU1NTU09PT09PT1NTU1NXV1dXV1dXV1dXV1NTU1NPT09PT0tLWroprY2VSWGhMSkdJQjg0OTQ6Ozo5QDk+Q0U/PDw5OTk9Oj07PDw6PTw7OTw9Ozs/PUA9PT5AQD9CQT5APD05QERDQkFBQj48SEpLTU9IqNnU1NXV1dXV1dXV1dXW1tbW1tbW1tbW1tbW1tbWzMzLy8vLy8vLy8vLy8vLy8rKy8vLzMzMzMzMzMzMzM3Nzc3Nzc7Ozs3Nzc3Nzc/Pz8/Pz8/Pz8/Pz9DQ0dHR0dHR0dHR0dHS0tHV2djY2NnZ2dra2tvb29vZ2dnZ2dna2tra2tra2tjW19fX19fX19jX19fX19jZ2NjY2NjY2NjZ2dnZ29zc3Nzc3Nzd3Nvb29za09LT09PT09TU1NTU1NbW1dXV1dXV1dXV1dXW1tbX1tbW1tbV1dXV1dXV1dXV1dTU1dXV1dXV1dXU1NTU1NTU1NTU09PU1NTU1NXV1dXW1dXV1dXV1dTU1NTT09PT09PS1bqKa2hoUlhlSUlMTkA5OTo0O0A8Nz05QUM9QD89ODo6Ozk9Oz4/Ojs8PDo7PDo7Pj1APT8/P0FAQUE/QTw8Oz5BRENBREA9PElJSk1ORqPa09TV1dXV1dXV1dXW1tbW1tbW1tbW1tbW1tbW1szMz9DPz8/Pz8/Pz8/Pz8/W3t3d3t7e3t7e3t7e3t3S0NDQ0NDQ0NDQ0NDQ0ci5ubm5ubm5ubm5ubq6t6WkpKSkpKSkpKSkpKSnhmBjY2NjY2NjY2NkZGRlhIuKioqKioqKioqKioemuri4uLi4uLi4uLi4uLepp6enp6enp6enp6enqZeAgoKCgoKCgoGBgYGAj9LS0tLS0tLT09PS09PT3OPi4uLi4uLi4uLj4+Pi2NfX1tbW1tbW1tbV1dXV1dXV1dXV1dbW1dXV1dXV1dTU1NTU1NTU1NTV1dXV1dXW1dXV1dXV1dXV1NTU1NTT09PT09XDkXJsaU5TYkxMVk08Ojo3Nz5DPzg+Oj8/QTw/QDc7Ojs7PTs+Pjo7PD48Oz07PT8+QDw/Pz1AQEBBPj88PjxAQUVCQkZAQD9HSEpLUEae2tXV1dXV1dXW1tbW1tbW1tbW1tbW19fX19fX19fMzNDS0tLS0tLS0tLS0tLR3uzr6+rq6urq6urq6uvp1dLS0tLS0tLS0tLS0tTEqaqqqqqqqqqqqqqqq6aGhIWFhYWFhYWFhYWFik4MEhISEhISEhISEhIRE0pUU1NTU1NTU1NTU1NPg6ejo6Ojo6Ojo6Ojo6OghoSEhISEhISEhISEhIhnQERERERERENDQ0RDP1zT09LS0tLS0tLS0tLS0eDs6+vr6+vr6+vr6+vr6dnX19fX1tbW1tbW1tbW1dXV1dXV1dbW1tbV1dXV1dXV1dXV1dTU1NTV1dXV1dXW1tXV1dXV1dXV1dXU1NTU1NTU1NPUy5h3bGlKTl9NUlVNPjw8Nzs/Qz42Ojc+Pzs9QkA4PDo9Ozw6PD07PTs9Ozs9PD0+PT07QT08QUBBQT08Pzw7QEJDQURFPUFAQ0ZLS09GmNzV1dXV1dbW1tbW1tbW1tbW1tfX19fX19fX19fXzMzR0tLS0tLS0tLS0tLS0d3q6enp6enp6enq6unq6dXS0tLS0tLS0tLS0tLUxaqrq6urq6urq6urq6yoiIeHh4eHh4eHh4eHh41SEhgYGBgYGBgYGBgYFxpOWVdXV1dXV1dXV1dXU4WopKSkpKSkpKSkpKSloomHh4eHh4eHh4eHh4eKakZJSUlJSUlJSEhISENg0tPS0tLS0tLS0tLS0tHf6+rq6urq6urq6urq6unZ19jX19fX19fX1tbW1tbW1tbW1tbW1tbW1tbV1dXV1dXV1dXV1dXV1dXV1dXW1tbW1tXV1dXV1dXV1dXU1NTU1NTU1NGcenFpSlRdT1JVTkQ+Pzs/QEA4Ojs4PDw8PD46Ojs4Ozk5Ozw7Ojw5Ozs8Ozo9PT0+PUE/Pj8/Pj08PT88PEFBQ0FERTw+QEVGSktNRpPc1dXV1tbW1tbW1tbW1tbW1tfX19fX19fX19fX183N0NLS0tLS0tLS0dHR0dDc6Ofn5+fn5+fn5+fn5+bV0dLS0tLS0tLS0tLS08Wtrq6urq6urq6urq6vq46NjY2NjY2NjY2NjY2SXSInJycnJycoKCgoKCcpWmNiYWJhYmJiYmJiYl6MrKmpqampqampqampqaeQjo6Ojo6NjY2NjY2NkHNRVFRUVFRUVFRUVFVRatLT0tLS0tLS0tLS0tLS3+np6enp6enp6enp6enn2djY2NjY19fX19fX19fX19fX19bW1tfX19fW1tbW1tbV1dXV1dXV1dXV1dXV1tbW1tbW1tbW1tbV1dXV1dXU1NTU1NTWo3txZElbYE5OVU9AQT89REI+Oz06OTs6PTw7PDs6OTg5OTs8Ozw8Ojo7PDo7QD08PTxAQTxBQTs7PEA/PD1CP0RDQ0U8PkJERkpMTEWN3NXV1tbW1tbW1tbW1tbX19fX19fX19fY2NjY2NjNzc7Ozs7Ozs7Ozc3Nzc3Nzs/Pz8/Pz8/Pz9DQ0NDQz87Ozs7Ozs7Ozs7Ozs7NzMzMzMzMzMzMzMzMzMvJycrKysrKysrKysrKysfCw8PExMTExcXFxsbGxsvMy8zLzMzNzMzMzMzLz9HR0tLS0tLS0tLS0tLS0NDQ0NDPz8/Pz8/Pz8/NysrKysrKysvLysvMzMzT1NTV1dXV1dXW1dbW1tjY2NnZ2dnZ2dnZ2dnZ2djY2NjY2NjY2NjY2NfX19fX19fX1tfX19fX19bW1tbW1tbW1tXV1dXV1dXV1dbV1dbW1tbW1tbW1tXV1dXV1dTU1NTU169/cF5GXmJQUVdOR0ZDQ0lBPz07PDo8N0BBPD04Ojo4OTg7Pzs8PDs7PDw8PD87PD46Pj44PkI8Pj1BPjw+QkBERUNAPD5APkNJSUtEh9zV1tbW1tbW1tbW1tbX19fX19fX19jY2NjY2NjYzs3Nzc3Nzc3Nzc3NzdHNzc3NzczP09LSzs3P0s7Ozs7Ozs7O0dTPz87R0s7P0tTV1NDPz8/Pz8/Pz8/Pz8/P0NDQ0NDR0dHR0dHS09PU1NTU1dXV1tbW1tfW1tbX1tfX19fX19fX19bW1tbW1tbW1tbW1tbW1tfW1tbW1tbW1tXV1dXV1tfX19fX19fX19fX2NjX1tbW1tbX19fX19fX19fX19jY2NjY2NjY2NnZ2dnZ2dnZ2djY2NjY2NjY2NjY2NjX19fX19jY19fX1tbW1tbW1tbW1tbW1tbW1dbW1dbW1tbW1tbW1tbW1tXV1dXV1NTV1di4gm9XSl9jUlFaS0hBQTxCPT07Oj4+PD4/PT0/ODk6OTk3OD48PD47Ozw7PDs/PT0+OTs7OT0+P0A+QD07OkI/QkNCPz0+QD5CRUdKQoDc1tbW1tbW1tbW19fX19fX19fX2NjY2NjY2NjY2M7Ozs7Ozs7Nzc3Nzsqfys3Nzc3QuYOEi8fTwJrLz87Ozs7O07udz8/TuJ7P0ZyChIrGz87Ozs7Ozs7Ozs7Oz8/Pz8/P0NDQ0NDQ0NDR0dHR0tLT09PU1NTU1NTV1dXV1dXV1dXV1dXV1dXV1dXW1tbV1dXV1dbW1tbV1dXV1dXV1NTU1NXV1dXV1dXV1dXW1tbW1tbW1tbX19fX19fX19fY2NjY2NjY2NjY2NnZ2dnZ2dnZ2dnZ2dnY2NjY2NjY2NjY2NjY2NjY2NfX19fX1tbW1tbW1tbW1tbW1tXV1tbW1tbW1tbW1tbW1tbW1dXV1dXV1dXYwIBuVU9gY1dZW0xMQ0A9PTs9Ojw9Qj5CQkA8Ojg5ODo6Ojc7Pz4/PDw7PDo5Pzw8PTg5PD9BPj09PUFAPTtBQkBCQz47QD9BQUlHSkF629bW1tbW1tbX19fX19fX19jY2NjY2NnZ2djY2dnOzs7Ozs7Ozs7OzdKpj63Rzs7Ozpu3tqSiwJOerNPOzs7O0rWVm7PVspeZubqVuLmvodLOzs7Ozs7Ozs7Pz8/Pz8/Pz9DQ0NHR0dHR0dHS0tLT09TU1NTU1dXV1dXV1dXV1dXV1dXV1dXV1dXW1tbW1tXV1dbW1tbW1tXV1dXV1dXU1dXV1dXV1dXW1tbW1tbW1tbW1tfX19fX19jX19fY2NjY2NjY2djY2dnZ2dnZ2dnZ2dnZ2dnZ2djY2NjY2NjY2dnY2NjZ2NjY19fX19fX19bW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tXV1dXV1dXV18h/b1pTYWVeXVxPSkQ9QD8+PDc6Pjk/RD5AOTg3ODk7Ozw4OT89PTw9PD47OkE7OTs5OzxDQDw7PT5AQT49QkQ/QkM9PT8+Pz5ISUg/ddrW1tbX19fX19fX19fX2NjY2NjZ2dnZ2dnZ2dnZzs7Ozs7Ozs7Ozs/Inrym0tDQzsqgl36Cw6abr6fUz8/Pz9GfoKqu1JyjqLLRkn1+r7DRzs7Ozs7Ozs7Oz8/Pz8/Pz8/Q0NDR0dHR0dLS0tPT09TU1dXV1dXV1dXV1dXV1dbV1dXV1dXV1tbW1tbW1tbV1dXV1dXW1tbV1dXV1dXV1dXV1dXW1tbW1tbW1tbW1tbW1tfX19fX19jY2NjY2NjY2NjY2NjZ2dnZ2dna2dnZ2dnZ2dnZ2dnZ2djY2NjY2NnZ2dnZ2dnY2NjY2NfX19fX19fX19bW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1dbV1dXV1dfNiHNdWGloXl9gT0lGOkFAPj88PDk2P0I/Qjo2NDc6Ozo8Ojk+PD49PTs/PTxBPjw8Ojw8PTw6PEA9QEI+PkFCPUNDPT0+Oz9BRUtIQHDZ1tbX19fX19fX19fY2NjY2NjZ2dnZ2dnZ2dnZ2c/Pz8/Pz87Ozs7SrKWnqdXAvNLHnY+ey9PJipmq1M/Pz8/RxYeasdXDhpq11dPNnp7D0M/Pz8/Pz8/Pz8/Pz8/Pz8/Q0NDQ0dHS0tLS09PT1NTU1dXV1dXV1dbW1tbW1dbW1tbW1tbV1tbW1tbW1tbW1dXV1dXV1dXW1dXV1dXV1dXV1dXW1tbW1tbW1tfX19fX19fX19fX19jY2NjY2NjY2NjY2NnZ2dnZ2dnZ2tnZ2dnZ2dnZ2dnZ2dnZ2dnY2dnZ2dnZ2dnZ2dnY2NjY19fX19fX19fX19bW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbV1dXW0JB1W1tqaWFeXVNOSTxDQEE+QD46OEVAP0M6NzQ5Ojo5Ozs4Oz0/Pj49QT08P0A9Pjw8PDw8Oj1AQD8/PT5CQD9AQkA8QD0+QUVLRz9r19fX19fX19fX2NjY2NjY2NjZ2dnZ2dnZ2dnZ2tnPz8/Pz8/Pz8/QzJ2Nl6zQmpfKxZ6ynpbN1q2ZqtTPz8/Pz9anmbHU1qOYtNTTwKCg0M/Pz8/Pz8/Pz8/Pz8/Pz8/P0NDQ0dHS0tLT09PT1NTU1NXV1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbV1dXV1dXV1dXV1dXV1dXV1dXW1tbW1tbW19fX19fX19fX19fY19fY2NjY2NjY2NjY2NjZ2dnZ2dnZ2drZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2djY2NjY2NfX19fX19fW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1dXV1tKUcl5ea2tqZV1PTEc/RENDQDo9OzxCPD09OTY0Ojk5Ojo5Nzs/QDs8PUA8PEE+PD07PTw/PDo8Q0A+PTs9QD5CPkBBPkA9QD9GSUQ/ZtXX19fX19fY2NjY2NjY2NnZ2dna2tra2tra2traz8/Pz8/Pz8/P07GigJuvyaCjv8qcpYynrdiqmarUz8/Pz8/UpJmx1NWimbTU1bCiqdTQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NHR0tLT09PT1NTU1NXV1dbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1dXV1dXV1dbW1tXW1tbW1tbV1tbW1tbX19fX19fX19fX19fY2NjY2NjY2NjY2NjY2NjY2dnZ2dnZ2dna2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2djZ2djY2NjY2NfX19fX19bW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbSk3BgXnBoZmVaUUhHQkVDQEA3Ojo8Pjo8OTc2NTk6Njo8Ozc8QEA8Ojo9Ojw/Pj08OUA8PDo6OT9APT08PUBBQz9APz5BOz9ARkpCP2LS2NfX2NjY2NjY2NjY2dnZ2dnZ2tra29vb29vb28/Pz8/Pz8/P0M6fkGyclteqo9PSrqa1mJ/Vqpmq1M/Q0NDQ1KSZstXVopm11NSjobrU0dHR0NDQ0dHQ0NDQ0NDQ0NDQ0NHR0tLT09PT1NTU1dXV1dbW1tbX19bW1tbW1tbW1tbX1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tfW1tfX19jY2NfX19fX2NjY2NjY2NjY2NnZ2dnZ2dnZ2dnZ2dna2tnZ2dnZ2dnZ2dnZ2dnZ2dnZ2djY2dnZ2dnZ2dnZ2dnZ2NjY2NjY2NjX19fX1tbW1tbW1tbW1tbW1tbX19fX19fW1tbW1tbX0pNuYFxxZGdkWlVKQENHREFBODs/PD07PDw3NTU4OTY4Ozo5PDo+Pzw9PTk8Pz49Ojo+OTw6Ojg+Pzw9PTw+QEFDQT48PDpCRERKRkJd0NnX19jY2NjY2NjY2dnZ2dna2trb29vb29vb29vPz8/Pz8/Pz9G9n8O31pfA09HQ0srSzZeb1KqZq9XRz9DQ0NWkmrPV1aKattTNnp/J0tHR0dHR0dHR0dHR0NDR0dHR0dHR0tLT09PU1NTV1dXV1tbW1tfX19fX19bW1tbW1tfX19fW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW19fX19fY2NjY2NjY2NjY2NjY2djZ2dnZ2dnZ2dnZ2dnZ2drZ2tnZ2dnZ2dnZ2dnZ2dnZ2djY2NjY2NjZ2dnZ2dnZ2dnZ2dnY2NjY2NjY2NfX19fX19fX19fW1tfX1tbX19fX19fX19fX19bW19GSbF1cb2doYl1PRj9ISEZFQDw8Pj48PT08NzU2OTk2OTs6Ojs4QD86PDw5PD49Ozs6Pzk/Ojs5PT49Pjw7PTxAQ0I/Pz47Q0ZGR0hEWc3a2NjY2NjZ2dnZ2dnZ2dna2trb29vb29vb29vb0NDQz8/Pz8/Pz5V+e6WS1KKa08ySl6ObodirmavV0pem09DVpJqz1dajmrbXw5+g0tHR0dHR0dHR0dHR0dHR0dHR0tLS0tLS09PU1NTV1dXV1tbW19fX19fX19fX19fX19fX19fX1tbW1tbW1tbW1tbX19bW1tbW1tbW1tbW1tbW1tbW1tbW1tfX19fY2NjY2NjY2NjY2NjY2dnZ2dnZ2dnZ2dnZ2dnZ2tra2tra2tnZ2dnZ2dnZ2dnZ2djY2NjY2NjZ2dnZ2tnZ2dnZ2dnZ2djY2NjY2NjY2NjX19fX19fX19fX19fX19fX19fX19fX19fX1tfPjGRWXnBrXGBgTkVITUlJT0M+OkI9PUBCOzU1Nzw6Nzo7Ojo7OT09OTo6OT0+Pz07OT47PDo8Ozk+PD47PD0+QENCPz5BPEFDR0ZGRVXJ29jY2NnZ2dnZ2dnZ2dra2tvb29vb29zc3Nzc3NDQ0NDQ0M/Pz9DR1aeZrcmjqL7KnbGdo7XZqZup2LirocfS1qObsdbXopu02rKkptbS0tLS0tLS0tLS0tLR0dHS0tLT0tPT09PU1NTV1dbW1tbX19fX19fX19fX19fX19fX19fX19bW1tbW1tfX19fX19fW1tbW1tbW1tbX19fW1tbW1tbW1tbX19fX2NjY2NjY2NnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dra2tra2tra2trZ2dnZ2dnZ2dnZ2djY2NjY2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnY2dnY2NjY2NjX19fX19fX19fX19fX19fY2NfX19fX19fYzYZdV2JvZE9dVEtIRlNRS0xAPj1EPD9DRj01NTc7OTY6Ozo8PTo7Pzo6OTg6PT0/Pjs/Oz49Ojs5Pjs9PD0+QURCQD8+PzxAQUVHRURSxdvY2dnZ2dnZ2dnZ2tra2tvb29vb3Nzc3Nzc3NzQ0NDQ0NDQ0NDQ0NO5gL3Tm5bP1LWLkZ/T1LyBu9TOlKDT0dW1gsPT1bGDxta5g7/V0tLS0tLS0tLS0tLS0tLS0tLT09PT09PU1NXV1dbW1tfX19fX19fY2NjY19fX19fX19fX19fX19fW1tbX19fX19fW1tbW1tbW1tbW19fX1tbW1tbW1tbX19fX19jY2NjY2NnZ2dnZ2dnZ2dnZ2tnZ2tra2tra2tra29ra2tra2tnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2NjY2NjX19fX19fX19fY2NjY2NjY2NjY2NfX2ct+WlVqaltMX01KTEpVTEZCPDw/R0VHS0k9NjY3Ojk3OTo7Ojw9OT45OTo4Oz0+PkE+PTk8PDo9Pj47PTk5Oj9FQUA+PT8/QkBHRURFUMHc2dnZ2dnZ2dna2trb29vb29vb3Nzc3Nzc3dzc0NDQ0NDQ0NDQ0NDQ0cHR0crI0tDUxLjS0tHSwtLQ08fM0tHR0cPU0tLQw9XR0cLT0tLS0tLS09PT09PT09LS0tPT09PU1NTU1NXV1dbW1tfX19fX19fX2NjY2NjX19fX2NfX19fX19fX19fX19fX19fX1tbW1tbW1tbW1tfX1tbW1tbW1tbW19fX19fY2NjY2NjY2dnZ2dnZ2dnZ2dra2tra2tra2tra29va2tra2tra2dnZ2dna2tnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dna2tnZ2dnZ2dnZ2djY2NjX19fX19fY2NjY2NjY2NjY2NjY19rHd1xSZ2laTlpOTFBRV0VKPz8+PkFFTExBPjc3NTs4ODk5Ojs8Pjw+ODo6OTs+P0A9Pj46NTo6Oz0/Ojs5Ojw+QkJAPz8/P0FCR0RDRE683dnZ2dnZ2dna2tvb29vb29vb3Nzc3Nzc3d3d3dDR0dDQ0NDQ0NDQ0NDS0NDR0dDQ0dPU0dHR0dPR0dHS0tHR0tLU0tLS0tXT09PV0tLS0tPT09PT09PT09PT09PT09PU1NTU1dXV1dbW1tfX19fX2NjY2NjY2NjY2NfX19jY19fX19fX19fX19fX19fX19fX1tbW1tbW1tbX19bW1tbW1tbW1tfX19fX2NjY2NjY2NnZ2dna2tra2tra2tra2tra2tra2tvb2tra2tra2trZ2tra2tra2tra2tra2tnZ2dnZ2dnZ2dnZ2trZ2tra29ra2trZ2dnZ2dnZ2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjbwXNYVWlrU0xSTlBSWVRGSTw+Qz9BQkVLPj43ODY5Nzc4OTk7Oz0/QDw9ODk7Ozs/Pjw8OTU6PT47OTk7PD8/P0JCQT1BPUBBQkZCQkJLtd7Z2dra2tra2tvb29vb29vc3Nzc3Nzd3d3d3d3R0dHR0dHR0dHR0dDQ0NDQ0NDQ0dHR0dHR0dHR0dHR0dHS0tLS0tLS0tPT09PT09PT09PT09PT09TU1NPT1NTU1NTU1NXV1dXV1dXW1tbX19fX2NjY2NjY2NjY2NjY19fY2NjX19fX19fX19fX19fX19fX19fX19fW1tbX19fX1tbW1tbW1tbX19fX19jY2NjY2NnZ2dna2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tnZ2dnZ2dnZ2NjY2NjY2NnZ2dnZ2dnZ2NjY2NjY3LxvVFRsbExLUkpUUlVLRkQ6PkdEREFERjw/ODk6OTY5OTo3PD07PkA9PTc5Ojs5Pjs5OTY2Oj1AQT47PDk6Pj9DQT4/Qj0+QkNFQkFCSrDe2dra2tvb29vb29vb29vc3Nzc3Nzd3d3d3d3d0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0tLS0tLS0tLS0tLS0tLS0tPT09PT09PT09PT09PT1NTU1NTU1NTU1NTU1dXV1dXV1tbW1tbW19fX19jY2NjY2NjY2NjY2NjY2NjY2NjY19fX19fX19fX19fX19fX19fX19fX19fX19fW1tbW1tfW19fX19jY2NjY2NjZ2dnZ2dra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2trZ2dnZ2dnZ2djZ2dnZ2dnZ2dnZ2dnZ2dnY2Ny2a1NbcGtLVVdSXFFXSEQ+PEJKRT1ISj89PDc4ODo2OTg5Njs+PD1APDw1OTk8Oj87OTk0ODw9PUFBPD47Ojw+QD89PkE9PUNGR0I/Qkmq39ra29vb29vb29vb3Nzc3Nzc3N3d3d3d3d3d3dHR0dHR0dHR0dHR0dHR0dHR0dHS0M/U0M7P0tLT0tLS0tLS0tLS0tPT09TU1NTU1NTU1NTU1NTU1NTU1NTU1NTV1dXV1dXV1dbW1tbW19fX19fY2NjY2NjY2NjY2NjY2NjY2NjY2NjX19fX19fX19jY2NfX19fX19fX19fX19fX19fX19fX19fX19jY2NjY2NjY2dnZ2dra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tvb29va2tra2tra2tra2tra2tra2tnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dndsGRTYXJfT1pUV19RUkdCPUVJS0FBTEQ/Pzs5ODg5Mzg2ODY5Pj0+Pz06Njo7Pjs9PTo5Njg6PTtAQDxAPz0/P0I+PD48PEJFSElCPkNJpODa29vb29vb3Nzc3Nzc3Nzc3N3d3d3d3d3d3t7S0tLS0tLS0tLS0dHR0dHR0dPT0bm7zLqbnLrQyNPT0tLS09PT09PT09PU1NTU1NTU1NTU1NTU1dXV1dXV1dXV1dXV1dbW1tbW1tbX19fX19fY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjX19fX19fX19fX19fX19fX19fX19jY2NjY2NjY2NjZ2dra2tra2tra2tra2tra2tra2tra2tra29va2tra29va2tvb2tra2tra2tra2tra2trb29vb29va2tra2tra2tra2tra2tra2tra2tnZ2dnZ2trZ2dnZ2dnZ2dnZ2dnZ3qpfVWBuW1VZUVpeT0xHQ0ZNSUZEREk7QUE7PDg4NjU4Njk4Nzw/QT89Ojc8Pz48Pz87OjY4OD09QEE9QD5BQD1AOjs6Pj1BRUdKQkBDR57h29vb29vc3Nzc3Nzc3Nzc3d3d3d3d3d7e3t7e0tLS0tLS0tLS0tLS0tLS0tO+wMqaoKKViJGeqpOpz9TT09PT09PT09PU1NTU1NTU1NTU1NTV1dXV1dXV1dXV1dXV1tbW1tbW1tbX19fX19fY2NjY2NnZ2dnZ2dnZ2dnZ2djY2djY2NjY2NjY2NjY2NjY2NjY2NjX19fX19fX19fX19fX19fX19fY2NjY2NjY2NjZ2dna2tra2tra2tra2tra2tra2tra29vb29vb29vb29vb29vb29vb29ra2tra2tra2tra2tvb29vb29va29vb29vb29va2tra2tra2tra2tra2tra2trZ2dnZ2dnZ2dnZ2d6iXFVeblheXU5aUFROQ0NMSUlJRkpEPEFBPDs4NzY3OTc3OTk9P0E/PDo5QD88PkI/Ojg3NzY9P0BAPUBBPz88PTs7OD48P0VJSEE/Q0aX4dvb29zc3Nzc3Nzc3N3d3d3d3d3d3t7e3t7e3tPT09PT0tLS0tLS0tLS0tTIlZyum5m1iX2TjIKBhMTV09PT09PT09PU1NTU1dXV1dXV1dXV1dXV1dXV1dXV1tbW1tbW1tbW1tfX19fX19fX2NjY2NjY2dnZ2dnZ2dnZ2dnZ2dnZ2NjY2NjY2NjY2NjY2NjY2NjY2NfX19fX19fX19fX19fX19fX2NjY2NjY2NjY2dnZ2dnZ2dna2tra2tra2tra2tra29vb29vb29vb29vb29vb29vb29vb2tra2tra2tra2tvb29vb29vb2tvb29vb29vb2tra2tra2tra2tra2tra2tra2tra2tra2tnZ2dndmlpYYW5ZYVdPV01QRUJETElNS0ZJRT5CRDk4ODY3OTc1Njk4PT1BPjo4OT4+PD9APzw1Njc2PD4/PjtAQEA/Pj4/Pjs/PkFCRkdCQENIkeLb29zc3Nzc3d3d3d3d3d3d3d7e3t7e3t7f39/U09PT09PT09PT09LS0tLTz6h+kayPko6MhoCIiYSQo8rU09PT09PU1NTU1dXV1dXV1dXV1dXV1dbW1tbW1tbW1tbW1tbW19fX19fX19fX2NjY2NjY2dnZ2dnZ2dnZ2dnZ2dnZ2dnY2NjY2NjY19jY2NjY2NjY2NjY2NjX19fX19fX19fX19fY2NjY2NjY2NjY2NnZ2dnZ2dna2tra2tra2tra2tra29vb29vb29vb29vb29vb29vb29vb29ra2tra2tra2tvb29vb29vb29vb29vb29vb29va2tra2tra2tra2tra29vb29ra2tra2tra2tna3JJaWWNuWlpSVV5QTDxAR05IUklIRT48SEY4OTc1Nzg3NTg5ODs+Pj07ODlBPj1AP0E+NzU5Njs+QUI/P0BAQUI/Pj8+QUBEQUZIQj9FSozi3Nzc3Nzc3d3d3d3d3d3e3t7e3t7f39/f39/f1NTU09PT09PT09PT09PWtaWaiIuQhYCFi4iBg4qLf4bC1tTU1NTU1NTV1dXV1dXV1dXV1dXW1tbW1tbW1tbX19fX19fX19fX2NjY2NjY2NjY2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2djY2NjY2NjY2NjY2NjY2NjY2NjY2NjX19fX19fX19fY2NjY2NjY2NjY2dnZ2dna2dra2tra2tra2tra2tra2tvb29vb29vb29vb29vb29vb29vb29vb29ra2tra2trb29vb29vb29vb29vb29vb29vb29vb2tra2tra2tra29vb29vb29vb29vb2tra29uIWltnalxYTFpfVkg6TEhMSkpDREVDQExINzo3Njc4ODU4Nzg5PDw7Ozk4QD89Pj8/PDY3PDQ3P0JCQUBAPz8/QT09P0A+QEBGRT09REuI4tzc3Nzd3d3d3d7e3t7e3t7e3t/f39/f39/f39TU1NTU1NPT09PT09PUxZKCg4WGfYGCfXx5foGCg36k29bU1NTU1NTV1dXV1dXV1tbV1tbW1tbW1tfX19fX19fX19fX19fX19jY2NjY2NjZ2dnZ2dnZ2dna2tnZ2dnZ2dnZ2dnY2NnY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjX19fX19fY2NjY2NjY2NjY2dnZ2dna2tra2tra2tra2tra29vb29vb29vb29vc3Nzc3Nvb29vb29vb29vb29vb2tra2tra29vb29zb29zb29vb29vb29vb29vb29vb29va2tvb29vb29vb29vb29vb29vb2tvZgFpebWhaU0ldW1hKRE1ISlNMR0ZBQD9KQjg7NjY5OTc1ODY4Ozo7Ojw5OD09O0A9Ozo2NTw3Oz1CQEFBPD49QEE9PEA/Pz5CREU+PERLg+Lc3d3d3d3d3t7e3t7e3t7f39/f39/f39/f39/V1dTU1NTU1NPT09PT2LKEkKh9g3l2hIh/e3d5gn5+i67A1dTU1NXV1dXV1tbW1tbW1tbW1tbW1tfX19fX19fY2NjY2NjY2NjY2NjY2NjZ2dnZ2dnZ2dna2trZ2dnZ2dnZ2dnY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2dnZ2dna2tra2tra2trb2tra2tvb29vb29vb29vc3Nzc3Nzc29vb29vb29vb29vb29va2trb29vb29zc3Nzc3Nvb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vc1nlcWmxmWFJPYFFSQUhHSkZYTEZAQENDSz87Ozc4ODc2NTc2ODo5PDw6PTs/PTs9Pjw7ODg8OT0/QkFCQzw8P0FCPj1BQkNCREVDQDtDTH3h3d3d3d3e3t7e3t7e39/f39/f39/f39/g4ODg1dXV1NXU1NTU1NPU0ruen3WKeXuIgICChYGDcnOAhYOMrNfV1NXV1dXW1tbW1tbW1tbW1tbW19fX19fX2NjY2NjY2NjY2NjZ2dnZ2dnZ2dnY2NnZ2dna2tra2trZ2dnZ2dnZ2djY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2dnZ2dna2tra2tra29vb29ra2trb3Nzc3Nzc29zc3Nzc3Nzc3Nzb29vb29vb29vb29rb29vb29vb29zc3Nzc3Nzc3Nvb29zc3Nzc3Nvb29vb29vb29vb29vc3Nzc3Nzc3Nvb29vb3dByXV9wZVdLUGNPS0JHQ0pIS0ZBPEE9SFBBOjo3Nzg3Njc4Nzw6OD09PD47QD88Pz07Ojs5Ojk8QEJAQkNAPUFAPz1AQkNDQUBAP0A7RU144N3d3d7e3t/f39/f39/f39/f3+Dg4ODg4ODg4NXV1dXV1dXV1NXU18h4i4V8goh6g4SBfoKCc2l0hYuGkJ3U1tXU1dbW1tbW1tbW1tbW19fX19fX19jY2NjY2NjY2NnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dra2tra2tra2dnZ2dnZ2dnY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2dnZ2dna2tra2tra2tra2tvb2tvb3Nzc3Nzc3Nvc3Nzc3Nzc3Nzc29zb29vb29vb29vb29vb29vb29vc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc29vb297KalxjcWVST1heSz9HTElPS0VAPkFCP0lPPjk6NzY7NzY6Ozc7Ojg6PDw+Oz09Oz48Ojs4OTo4OUFCQkFAQDtAQj06PkFCQz8+PT4/PUZOdN/e3t7e3t7f39/f39/f4ODg4ODg4ODg4ODg4OHV1dXV1dXV1dXV1s6dhpl+f5OTin+CgXx9gnNxm4mAgoOJwNnat7TQ19bW1tbX19fX19fX19fX2NjY2NjY2NjY2NjZ2dnZ2dnZ2dnZ2tnZ2dnZ2dra2tra2tra2trZ2dnZ2dnZ2dnZ2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NnZ2dna2tra2tra2tra2tra29vb3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nvb29vb29vb29vb29vb29vc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3NvfwGNaW21gVlBTU0pETEhNSEk8PkFEQ0ZORDw7OTc5OjY4Ozk3PDk4OTw9OzlAPjpBPzw3NTc7ODpAQUVBPz45PUI/Oz1CQkI6Pj07PT5GTnHe3t7e3t/f39/f39/g4ODg4ODg4ODg4OHh4eHh1tbW1tbW1tbV1tjLioCHhYOXjHh7e3lvfYF1a3ebdHZ7eInHxpiMrdjZ19fX19fX19fY2NjY2NjY2NjY2NjY2NjY2dnZ2drZ2dna2tra2tra2tra2tra2tra2tra2dnZ2dnZ2dnZ2dnZ2dnZ2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NnZ2dnZ2dnZ2dna2tra2tra2tra2tra29vb3Nzc3dzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nvb29vb29zb29vb3Nzc3Nzc3Nzd3dzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3d3d3d3d3Nzc3Nzc4LdjV1lrYlJNVVFMSktGS0ZDQD5CQT9FTT4+PTg5OTo3OTo3NT03Nzo+PDs7Qjw5Pz05NjY4PTk6QEJGQD49PEBCREA9QD9DO0A9PD4/Rk9t3N/e3t/f3+Dg4ODg4ODg4ODg4OHh4eHh4eHh4dbW1tbW1tbW1tfVrYZ6d32rn3l4entzdH+Dfm9xe3l6c3t2k4qFgImkzdnY19fX2NjY2NjY2NjY2NjY2NjY2NjY2NnZ2dna2tna2tra2tra2tra2tra2tra2tra2tnZ2dnZ2dnZ2dnZ2dnZ2dnZ2djY2NjY2NjY2NjY2NjY2NjY2NjY2dnZ2dnZ2dnZ2dra2tra2tra2tra29vb29vc3Nzc3N3d3d3c3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc29vb29vc3Nzb3Nzc3Nzc3N3d3d3d3d3d3dzc3Nzc3Nzd3d3c3Nzc3Nzc3N3d3d3d3d3d3d3d3dzc3OGtYVtebGJSTVZMTUdLS0RGQkI7QT08RUxCQT44Ojk6Nzc5NjY6NTs+QDs9Oz89PD89Ojk5Ojw5PEVDRkA/PkBDQkQ9OT0/QT1CPz1APkdPadvf3t/f3+Dg4ODg4ODh4eHh4eHh4eHh4eHi4uLW1tbW1tbW1tfQmH+Qh4N9eoN2e3Vzenl6kKqmd3JyfoeHh4CAfoKEhJHJzNnX19jY2NjY2NjY2NjY2NjY2NjY2NnZ2dnZ2tra2tra2tra2tra29va2tra2tra2tra2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2djZ2dnZ2dnZ2djY2NnZ2dnZ2dnZ2dnZ2tra2tra2tra2tra29vb29vb3Nzc3N3d3d3d3d3d3d3d3d3d3d3c3Nzc3Nzc3Nzb29vb3Nzc3Nzc3Nzc3Nzd3d3d3d3d3d3d3dzc3N3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3NzhpV9UYm1iUE9TSUhHRkpJSUJBPkJCPEVFREA+ODo5Ozc3Ojc4ODY+Pz07PDk9PDo+PTs6Njc7NjpEQUY+Pz8/PkNBPzs9PT47REM/PjxIT2fZ4N/f3+Dg4ODg4eHh4eHh4eHh4eLi4uLi4uLi1tbW1tbW19jYyH52doN+fnR2eIaCenl1d5yhu6GEgoCAfoeKinx/gYaMnKjO2NjY2NjY2NjY2djY2NjZ2djY2NjY2dnZ2dra2tra2trb29rb29rb2tra2tra2tra2tnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dna2tra2tra2tra2tra2trb29vb29zc3Nzc3N3d3d3d3d3d3d3d3d3d3d3d3dzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3e3t7e3t7e3d3d3d3c35pbT2drXFBRUElDT0pLR0xHSkJAP0FHREBBPDg8ODg1ODk3Njc3QEA/Ozw5Pj04PTw8Ojc4PTk/RENGPkE/QkBDPzw6Pj0/PkVEPz07S1Fj1+Hf4ODg4ODh4eHh4eHh4uLi4uLi4uLi4uLj49bW1tbW19XB3LRueHJze3B6eXaFiIR7eH2AgZiljH98fnuRhZaLhoGDgY6Rvd3Z2NjY2NjZ2dnZ2dnZ2dnZ2dnY2dnZ2dna2tra2trb29va2tva2tra2trb29ra2tra2tnZ2dnZ2dnZ2dnZ2dna2trZ2dnZ2dra2tra2tnZ2dnZ2dna2tra2tra2tra2tra2tra2trb29vc3Nzc3Nzc3N3d3d3d3d3d3d3d3d3d3d3d3d3d3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3e3t7e3t7e3t7e3t7e3t7e3t3d3d6NWFdobllQUUtISlNJTUhNSUtBQz9DRkJBRDo6PDg2NDg4NzY2Nj8+Pjo8OTw7Oj09PDw4Ozw8RERERT4/PkI+Qj84PT8/Q0NCQEE+O0xUY9Xh3+Dg4OHh4eHh4eLi4uLi4uLi4uLi4uPj4+PW1tbW1teslLZ6eHJvd5V7dHuLgHh1bn6Fg3t/hYhyfH2bnI6JioJ+g32Hk5rH1NjY2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dna2tra2trb29vb29vb29vb2tra2tra2tra2tra2tnZ2dnZ2dnZ2dna2tra2tra2tra2tra2tra2tra2tra2tra2trb2tra2tra2tra2trb29vc3Nzc3Nzc3Nzd3d3d3d3d3d3d3d3d3d3d3d3d3d3c3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3N3d3d3d3d3d3d3d3d3d3d3d3d3e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3d7Zf1lgaGxcUUtHR09LTk5PTURGQkg/Q0hEREA6Ozs4NzU3Nzc4NThAPkA7PDk8Ozw+Ojk7OTk7OUZERUI8QD4/PEBDOz5AP0A/Qj8+OjtKVWPV4eDg4eHh4eHi4uLi4uLi4uLi4uPj4+Pj4+Pj1tbX19vKhYR3cXJubniVhHt4hH95dnB4c3eLkY6CdnN9ioaId3d1d4ODfIiIk8Pb2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dra2trb2tvb29vb29vb29vb29rb2tra2tra2tra2tra2tnZ2dnZ2dna2tra2tra2tra2trb2tra2tra2tra2tra2trb29vb29ra2trb29vb29vb3Nzc3Nzc3Nzd3d3d3d3d3d3d3d3d3d3d3d7e3d3d3d3c3Nzc3Nzc3Nzc3Nzc3Nzc3d3d3d3d3d3d3d3d3d3d3d3d3d7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7f0nVZaGlqVk5KSE1OR01EUElGSD9FPUZMREM+Ozs8OTc3OTY2OTU4Pj4/PTs8QDs9PDo3Ozc5OThHREVCPUE9Qj8+QDw/QUE/QEJAPjs8S1Ri1OLg4eHh4eLi4uLi4uLi4+Pj4+Pj4+Pj4+Pj49fX19fEknuJf29sbnV2foSBg4qGfnVybWVtiIaKjoR7c4OHint4e4OPj4GEioqxztrZ2dnZ2dnZ2dna2tra2tra2tra2trb29vb29zc3Nzb29vb29vb29va2tra2tra2tra2tra2tra2tra2tra2tra2tra2tvb29va2tra2tra2tvb2tvb29vb29vb29vb29vb29vb29zc3Nzc3Nzc3d3d3d3d3d3d3d3d3d3d3t7e3t3d3d3d3d3d3d3d3dzc3Nzc3Nzc3d3d3d3d3d3e3t7e3t7e3t7e3t7e3t7e3t7e3t7f39/f39/f39/f39/f3t7e4clsW2pqalNOR0hOT0VIRk1JSUA7RD5ISUA9PDo6Ojg2ODo3Nzk0OD08PT07ODw8PDw4Njc4OTo6RUJFQT9APEI/Q0M+PkNEQUBAP0A8PUtRYdPj4OHh4uLi4uLi4uPj4+Pj4+Pj4+Pj4+Pj5OTX19fZqXaFfnx3bHB3eXh8jH2KhYB3anN0d3p9bot7fnl6foR/gIGDfnh8foeGlrbT2tnZ2dra2tra2tra2tra2tra2tvb29vb3Nzc3Nzc3Nvb29vb29vb29ra2tra2tra2tra2tra2tra2tra2tra29ra29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb3Nzc3Nzc3Nzc3d3d3d3d3d3d3d3d3d3d3d7e3t7d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3t7e3t7e3t7e3t7e3t7e3t7e3t7e39/f39/f39/f39/f39/f39/e3uO9amFpa2lRTkZNTEtKWE1OR0FAQE9BRD9AOzw4OTk5Njg2NjY4NDs+PD07OTY6Ojk6OTU4OTg5OkJERj8+Pj5AQEBCPzxBQD88Pj9BOT5KT17S4+Hh4eLi4uLi4+Pj4+Pj4+Pj4+Pj4+Tk5OTk19fX2sqKhIB5c29tcXN1d4CUeHaAfHWHhXd1cnWgmXp7d3Z5doR0bWxue3iAmouTu9za2tra2tra2trb29vb29vb29vb29zc3Nzc3Nzc3Nzc3Nzc29vb29vb2tra2tra2tra2tra2tra2tra2tra29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vc3Nzc3Nzc3Nzc3d3d3d3d3d3d3d3d3d3d3d3e3t7e3t3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3t7e3t7e3t7e3t7e3t7e3t7e3t/f39/f39/f39/f39/f39/f39/f397js2lpbmloUFBPTExPUk9LU0Y/RURERD48PDg7ODc5OTU2ODY2NzM6Pjs+PTc6Pjk5OTk2Ojo4NzxDRUc/Pzs/PkA9PkE9Oz0+OUFAQDhBTlFc0OTh4eLi4uLj4+Pj4+Pj4+Pj4+Pk5OTk5OTk5NjY2NjauY6AenZ1bmpveHCBfWt0cnZ3hIV5h4d5lY55eXp1d3pza298gHx2fYh8gLLe2tra2tvb29vb29vb29vc3Nzc3Nzc3Nzc3dzc3Nzc3Nzc3Nzb29vb29rb29vb29ra2tra2tra2tra29va29vb29vb29vb29zc3Nzb29vb29vb29vb29vc3Nvb3Nzc3Nzc3Nzc3Nzc3Nzc3d3d3d3d3t7e3t7e3d7e3t3d3t7e3t7e3t7d3d3d3d3d3d3d3d3d3d3d3d3d3t7e3t7e3t7e3t7f39/f39/f39/f39/f39/f39/f4ODg4ODg4N/f39/f4qpqa2hrZFNQT0ZQVFJOSFJLPkREQ0I7Ozk6Ojg2Nzg1NjY4ODg0Oz88Pzw5PDw3Ozo6Nzo6Nzo9Q0JDPUE+Pzw5PT5BQDs8PDtFQD47Q05TXNDk4eLi4uLj4+Pj4+Pj4+Pj5OTk5OTk5OTk5OTY2NjZ1p5vdntveHh2cG50d3BwdHBzb36Jc3qGhY2EenNtcoB6hn1vg5OBdnx9g4a13drb29vc29vc3Nzc3Nzc3Nzc3Nzc3Nzc3d3d3Nzc3Nzc3Nzc3Nzb29vb29vb29vb29ra2tra2tvb29vb29vb3Nzc3Nzc3Nzc3Nzc3Nzc3Nvb29vb29vc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzd3d3d3d3d3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3d3d3d3d3d7e3t7e3t7e3t7e3t7f39/f39/f39/f39/f39/f39/g4ODg4ODg4ODg4ODg4N/f3+KgbWhma2ZVVlJHUFFOS0xMRUJIRUc9OD08Ojo3Nzg2Nzc2NTY3NDg+PD09Ojg6OD46Ozc4Nzc6Oj5DRDtDQj49OD1AQUM/Pjw+RTw+PUJNUF/S4+Hi4uLj4+Pj4+Pj4+Pk5OTk5OTk5OTk5OTk2NjY3MB2doCCfnp4eHBsdXlya399bHNvdGdoaYB/aWl4c2d+iYl4cIKGe3d9foWKvN3b3Nzc3Nzc3Nzc3Nzc3Nzc3d3c3Nzc3N3d3dzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nvb29vb29vb29vb3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzd3d3d3d3d3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7f39/f39/f39/f39/f39/f4ODg4ODg4ODg4ODg4ODg4ODg4ODflGttZm5mU1NJUFlUTEhGTkZGRUJGPTs+PDs5Nzc4NTc5NjQ1NzU4PDs9Pjo6OztAOTs7ODc6OTlAQkE8QUE/Pzk/QEJFQ0FAQEM7Oz1ES01g1uTi4uLi4+Pj4+Pj4+Pk5OTk5OTk5OTk5OTk5NnZ2tmYc3uqhJaCcnR1dn14aGx8d2h4d25rcHR5gIJ3dHyBhIJ9c3CAin94gn95g8je29zc3Nzc3Nzc3Nzd3d3d3d3d3d3d3d3d3N3d3dzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nvb29zc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3N3d3d3d3d3d3d3d3d3d3d3d3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e39/f39/f39/f4N/f39/f3+Dg4ODg4ODg4ODg4ODg4ODg4ODg4ODh24tubWdzY1lRTVVbV0hDSUZOS0dCRD8/Qjo7OjY2NzU2NzY0ODc2Ozw7Pj86PDk8Qjg3OTo6Ojk6QUFCQUJDQEE+PT9CQ0NEQUJGOTg9REpOYtjk4uLi4+Pj4+Pj5OTk5OTk5OTk5OTk5OTk5OXZ2drcqHGCtXiRfnNsem6EgXaCfWtoan+DeHZ8dX2FhXRmcHl9d316gIqFe318foC03tzc3Nzc3N3d3d3d3d3d3d3d3d3d3d3d3dzd3d3d3dzc3N3c3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzd3Nzd3d3d3d3d3Nzc3Nzc3Nzc3Nzc3N3d3d3d3d3d3d3d3d3d3d3d3d3d3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e397e3t7e39/f39/f39/f39/g4ODg4ODg4ODg4ODg4ODg4ODg4ODg4eDg4ODg4ODg4tiFb3FrdWFWT1VVXE9ETUY+SkdKRUQ8P0I6PDk4Njg0NTY3NDc2NDk7Ozw7OD47PEE4ODo9OD04Oj09QEBAP0FCP0A+QENCQ0FBRTc2O0RMTmPa5OLi4+Pj4+Pj5OTk5OTk5OTk5OTk5OTk5OXl29ra3Z5sbnNxhY1ybXBuf391hH5rcnZ2enN4gXhzbnVwbWt2fHmFiIB/f392coODsd/c3Nzc3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3Nzd3d3c3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3N3d3d3d3d3d3d3d3d3d3d3d3d3c3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e39/f39/f39/f39/f39/f39/f39/f39/f39/f4ODg4ODg4ODg4ODg4ODg4ODg4OHh4eDg4eHh4eHh4eHh4OLXhW1xb3ZeUldTWlpRSkhDQFFAQkQ8OT9BOjw5NzU3NDU2NjQ3NTY9PDo9PTk+OjxAODo6PDY7OTs+PUJCQjtBQkBDQEBEREM8PUA3OjxFS01l3OPi4uPj4+Pj5OTk5OTk5OTk5OTk5OXl5eXl5dPOxsB+cWxveHt2b3VuanNzbZKGeG50dG5vdIZ/b2twboJ0bXZyfY2DdnF/d3mKgabf3Nzc3d3d3d3d3d3e3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3dzc3d3d3dzc3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3t7e3t7e3t7e3t7e3t/f3t7e3t7f39/f39/f39/f39/f39/f39/f39/f39/f39/f4ODg4ODg4ODg4ODg4ODg4ODg4ODg4eHh4eHh4eHh4eHh4eHh4eHi1oZucG1xYFJZUFdfWUpMTElSP0Q9OTtCRjs6OTc0NTY1NzU0NjY2Pj07Pz45PTk7Pjg9Ozo0ODtAQENCQ0FCRkE/Q0BBQkREOz0+OTs8QkxNZODl4+Pk5OTj4+Tk5OTk5OTk5OTk5eXl5eXl5eW5t7Woc3JscHd6dHd4bXFydXd/hHRyc2xsa3F8bnBudGuBf3GAd32Eg355gHNygYqg2d3c3d3d3d3d3d7e3t3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3e3t7e3t7e3t7d3d3d3t7e3t7e3t7e3t7f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f4ODg4ODg4ODg4ODg4ODg4ODg4OHh4eHh4eHh4eHh4eHh4eHh4eHh49WHcWxqbF5YWlVXYFZWUE9QTD1BOjs8RkE4Ojg3MzY1Njk2NTg1Nz89Oz8+OT04Ozw5PTs7NTo9Q0JCPENDREREQUE/PkJDQzw9Pjg5PENLS2PN0dnh1sjY4+Tk5OTk5OTk5OTk5eXl5eXl5eXltbW2q3J5cm59f3Z1d2hqaGlwb3Zta2tnZWZxdG15gG5teXd2iHhxa2podXV5dHV/wd/c3d3d3d3d3d3e3t7e3d3d3d7d3d3d3d3d3d3d3t7e3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3e3t7e3t7e3t3d3d3d3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f4ODg39/g4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4OHh4eHh4eHh4eHh4eHh4eHi4uHh4ePVhnFwY2lhV1NZV19MUk9STUtAPjg5O0E+ODc5NjQ3Njc6NjY2NDk+Pzo8Pzo/OTo6Nzo9PDk5PEFBPTtBQ0VDRkA+Pj5BRUQ+QEE3OD5GSEpesrW4wbm1u8jg5eXl5OTl5OXl5+fn5+fm5ebm5ra2tbWOfX5weoR1cnZnYmNlbGtyb2ZpbHZtd4Z9hXlsbHd4a3ZwfH14c3V5fHd2h7ng3d3d3d3d3d7e3t7e3t7d3t7e3t7d3d3d3d3d3t7e3t7d3t7e3t7e3t3d3d3d3d3d3d7e3t7e3t7e3t7d3d3d3d3d3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4OHh4eHh4eHh4eLi4uLi4uLi4uLi4eHj1Yd1bl5uY1pUU1hXS1NLSk1SR0E4Ozs+PDk4NzU2NTY2OTY4NjY5Pzw6PT07Pzo7Ozk8PDs5Oj4+Pjs8PUFEQkNBQEBBP0JDPDw9Nzs+REVKXrG1tLW2t7e2y9rJ3uXl3eDi3tXU1tPU4OPg39+2treuh3t/bnmNenJ1bWNobGxtaXR4enF5enqIh4N6aWh9cWRvcXyGgX55e318e4an2t7d3d3d3d7e3t7e3t7e3t7e3t7e3d3d3d3d3t7e3t7e3t7e3t7e3t7e3t3e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t/f39/e3t7e3t7f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4OHh4eHh4eHh4eLi4uLi4uLi4uLi4uHh49aGdmxhb19dV1lcWlJQSEpXTEVHPUA9Ozs9OTY0NjU1NTg2NzY3OD87OT09PDw5OTw6Pjw6OTg+Qjs7Pj5AREBDRUFAQD0/QDw9PTU5PEJHRl2xtbW2uLm5ubq9uMPT0r3BwcC6u7y6u8TMxb/Dt7e3hGl1gX1ndYd5Z3Vxa2t5eHB3fH15bWl3e3h3bml1j4FwbHl4d3d9gXuGgnmAoNze3d3d3t7e3t7e3t7e3t7e3t7e3t3d3d3d3d7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t/f39/f3t7e3t/f39/f39/f39/f39/f39/f39/f39/f39/f39/f4ODg4ODg39/f39/f39/f3+Dg4N/f4ODg4ODg4ODg4ODg4ODg4ODg4ODh4OHh4eHh4eHh4eHh4eHh4eHh4uLi4uLi4uLi4uLi4uLi4ePXhXJrZ3RhW1hYX15TVVVRVUpMRj9JRDs5PTY2NDc3NTc4Nzc3ODk8PDo+PDg8Oj0+OTs8OTs5P0E8PT9DP0FARUJCQTw9Q0A6Pjw1NDlER0dasbW1tre5ubm5ubm3ubm4uLm5urq6urm5urm6u7e3uX9ucHN6b3B/eXNuc3Vsc3Z4cXFwb2tvcX6Bc2mHhIF9dHOHdW11hYmBgHJ2hafd3d3d3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7f39/f3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f4ODg4ODg4ODg39/f3+Dg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4eDg4eHh4eHh4eHh4eHh4eHh4eHh4eHh4uLi4uLi4uLi4uLi4uLi4uHj14lxa2xyW1dXXWBUUVVUUFJPSkNATUE9Ozk2NTM0NjQ2ODc3Nzk6Pjs8Pjs5PDo8PDk8PTw7PT0+PUNEREBDQkE/QD48PkE8OD06NjY6QkpIWLG1tLa2uLm5uLi5uLe3uLi5urq5ubi4uLi6uru3uKx7cnhxf3ZzfnBsbXpyZ29sbW50cHt3d3Jyd3pvhpJ2f3x8enZ5fH9zfYdyda3T393d3d7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e39/f39/f39/f39/e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f4ODg4ODg4ODg4ODg4ODg4ODf3+Dg4ODg4ODg4ODg4ODg4ODg4eHh4eDg4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4uLi4uLi4uLi4uLi4uLi4uLi49eHb2pxalVWV2FbT1FSUE5XSURESUo/Ojk6NzUzNDk1NzY2Nzg4Ojw7PD46PDo6PTw5PDw9Oz09PDs9REdEQ0E8PDw8Pj5AOzg8ODE1OkFGRVautbW1tre4uLm4uLi4uLe4ubq5uLi3t7i4ubq7t7mqcnB4d3x7e4J3aG5xam9qY2lyf21zcn54dHFsanaAeX2AgH91doB1a4qLgHaR1d/d3d7e39/f3t/f3t7e3t7e3t7e3t7e3t7e3t7e39/f39/f39/f39/f4N/e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t/f39/f39/f39/f39/f39/f39/f39/f3+Dg4ODg4ODf4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHi4uLi4uLi4uLi4uLi4uLi4uLi4uPYhm1sdGVWUFxnWE1YU1JRWUVDS1BOOzk4ODc1NTM5NTY2NzY4Nzk+OT0+OTw5OTw7Njg5OTo8QEA9PkBGQEJCQDo+PEE9Pzs7OzYxNjxCR0RQqLa1tba2tre4t7i4uLi4uLm6ubi4t7e3t7e5ure2tIlyd3h9iXxwem99c2hqbGdnbHRscXd0cWx2c3Fxd3FyfHl4g3Z7d2mLkYp9kM7f3d7e3tvY2drZ297f39/e3+De39/f3Nvc3N3e3uDg3+Dg4ODf3t7e39jS397f397e3t/f3t7f3t/f3t7e3t7e3t7e3t7e3t/f39/f39/f39/f39/f39/f39/f4ODf4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODh4eHh4eHh4eHh4eHh4eHh4eLi4eLi4uLi4uLi4uLi4uLj4+Lj4+Li4uPj4+Pi4uLi4+Lk14NoZ3VkVlVkZVdKWllXW1Q9RU1LSD04NzU3NjQzOTQ0Nzc1Njc5PTo9Pjw9PDk7PDk5Oj45PD4/PkFBQ0FFRUQ+OzxBPjw5PDs3Mzc+REhFSqG2tbW1tbW2tre4uLi4t7e4uLi3tra2tra3uLm2traLfXpsbHp/cGx5dm5qaGdlcXp4b2lvb3B1c21zd4Fnb32CgYNyf3lqcHJ6f6ng393Zy8a/vb6/vsLN0tDW3tnc4NfQzcPCw8PH1dfT2dzX1NjX0MfExce9vM/Kz87Y3djO3N3c2t3T0dze39/e397e3t7e4N/f39/f39/f39/f39/f39/f4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4OHh4eLi4uLi4uLf4uPi4eLg4d7W29/Sw8rJx9Hb3OLk4eHg2dre1sbExcTN2trf5OHi4trX3st9aWZxYVleZWFNTFRLUlpMO0hNSEZBPTc2NjUzNDY2NDg3NjU2OTw7Pj46Pjk5PDk3OTs7Oj49PEBAQ0RCR0ZCQT08Q0A9OTw7Nzc3P0RGRkaZtrS1tbW2tra4uLi4uLi3uLi3s7W2t7a3t7i5tba3opdxb29waW50dnFmZWNrbmdvcm1mZ2tygWVvdnyAeGRzj39zaHFyaWVlbm+w39HFv7u5ubm5ubq6uru6vc3Gw8e/urq6uru7u8HCvcHFvby/vry7urq5ubq6ubm6w8XDucDDwby/ube/z8/U3tjc3t/g3tLa4N/f4ODg39/f39/f39/f3+Dg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODh4eDg4ODg4ODg4ODh4eHh4uLi4eDh4uLi4uHa2t3RwsPCu8XT1uDdydPDrrnAsaqrq6uwtLbJ0sXRxLG4v7Srq6usr7S0vMzE1c60tLureGxtbWBdYl9ZS1NVVFFQREBRTUhEPzo3ODU3MzE1NjQ5ODQ2Njo8Oz08ODw5Njo6ODg5NzU8PDw/QEFAQkRDQkE8PkI/Pz09PTc1OD5DRUNAj7a0tLW1t7i4uLi4uLm5uLe1sautr7Oxs7OztLS0tqaei2tue3ZxeXhnY2hfcXdha25vaG99b25ja2lseHdsa4Z+bHB6dm1scG95sca8uru7urm5ubq6urq6urq6urm6urq6urq7u7q7u7y7urq6ubq7u7q6urq6urq6ubi3t7i4t7e2tbW1tbi3u8e+w8XHzcS4wMnH0tzZ2d/e3uDf39/f4ODh4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODh3Nji4uLi4eHh4OHg3tfGxtHQztTe3tPO0t/SuLi8sq2trKysrrG+ua63rKipqamqq6urqqqqq6ysuKyqqqqrq6urra6urq6urryzrayrpHlub21fXl1dVE1SU1xUSkE/UElIPjg5NjgzNzMwNTczNzg1NzY2Ojw/PDg5Ozo6Ojg5OjY1OTs8Pj9EP0NFQkNCP0BAQT9APjw3ODc6QUVEP4W4tLS1tbe4uLm5uLi3t7SurKuqqq2urq6vsLGzs7WjcG5ucm1wg311aWFlaGZkY2Rxc21td25naW1tZXBzb29zcXN8h4F6dX11n7u6uru7urm5ubm6urq6urq6ubq6urq5uLm5ubm6urq6u7q5ubm5ubq6ubm6ubm4uLi3t7e4uLe3t7a2tbW2tra1tbW1tba1t7e3t7rBvrzGycrb3+Dg3tvd3d7h4tDW4uHg4ODg4ODg4ODg4ODg4OHg4OHi0768zNjd3OLg0dnbxL23sLCxsa+zu7uzsLS9s66urq2tra2sq6qqqqmpqKmpqampqqurqqqqqamoqampqampqaqqqqytrq6urq6urq6sraR4aWJxZmFZWlZRUk5cU0Y9QlJEQTc8OzY5NTY1NDU2NTg3NTY1Nzg7Pjw7OTk5Ojg3Nzk3Njg8Oz47RD8/Q0BBREE+P0M9Pjw+Ojo3Nz9DRj54srCztLW2t7i3trKurq2sq6uqqaqtraysrq+xs7S1t4xucnRqaIB5ZmpmZWxdaG5waGxxYmNmcoJ+dmhobGpueoaBhXx4cXF5gK+6ubq6urm5uLm5ubm5ubm5ubm5ubm4uLe3t7e3uLm5ubm5uLe3t7i5ubi4uLi3t7a2tre3t7e3tra2trW0tLW1tbW2trW1tre3t7e3t7e3tre4v8bP0MS+v8DE19e8ydra4OHg4ODh4eDg4ODh4eDb3t7Uzby3tre6wMDJxLfIvrKwsLCwr7Cvrq6ur7Cwr66urq6uraytrKurq6qpqampqampqampqKmpqKmpqampqKmpqKmpqqqrraytra2ur66trK2heWpjbWdiXFhRUFFLVEpCOklRP0E3PDk0OjU2NTQ1NTY4ODY4Njs6OTw9PTs6ODY2ODg6ODY3Pj09PT5BQUVCQkNBQUBBOj09Pz05Ojc9QUc8bKqmqKutsLGwrqupqKqrq6mpqamrrKytra2usLO0tbilgIdvaWdzdGZrcG1qZGxvcm5rbWNrcHyJhG5qbHx4Y3uKfnNqc25rcY+7ubm5ubm5ubi4ubm5ubm5ubq5uLi4t7e3t7e3t7i5ubi4uLe2tra3t7e3t7a2t7a2tra3tra2tbW1tba1tLS0tbW1tra2tra3t7e3t7i4uLe2t7a2uLm4uLe3uL6+uLq9vcfb4OHg2Nnd4eHg3dfKwcPCurm5uLe4uLi3tbS0tLKysbGxsLCvr6+vr6+vr6+vr66ura2srKyrq6yqqqmoqKmppqepqaehpaipqamoop+hoZyip6inqausrK2ur7Cwrq2unXdwbGphY2BZUU1RTFJGQzlNUEU+ODs3Mjc5Njc0NDM1ODg3OTc7OTo9PTw6Ojk3NDo5ODY1OD8/QEI9RENDQ0FDQEJBQDtAP0A/PDw6O0NIPWOopaWlpqioqKenp6ipqqmoqKipqqqsra6wsLCztLW1taWYdn5xZmt4cW9tZmVsaGNsZ2ZpaX11bWlvfXZ5hWZod294b3Fvcninu7m5ubm5ubm4uLm6ubm5ubm5ubi3t7W1tba2tre3t7e3t7a2tba2tre2tbW1tra3t7e2tbS0tLS0tLS1tLS0tLW1tba2tra2t7e3t7e3t7a2tre2tre3uLe2t7i4t7i4uLi4wMXTyry8w83PyMC9urm5ubq6ubi4uLi4t7W0tLSzs7KysrGwr6+vr66urq+vr6+uraysrKurrKysq6ehoJ6gn5udoaGdlpmkpKaon5mZmZmanZ+gn56fpKqtrq+ura2srJl1cGlrY2FeXVVOU0tSREQ4TktHQTo4NTI2OTY1NDczNzc3ODk3OTo7PT0+ODg4NzU6OTk1OD9AQEFEPkZBQkNAQkNCQT88QEJCQD0+OjpERj5cpqWmpqampqanqKenqKioqKenqaurrKytra2ttLS0tbekc311bnONf3JmanFjaW1jaGZobG51aV9jZ3VzdnpuZ3Bwcn56cYihu7m5ubm6urq6urm2s7a1uLm2trW1tra1tbW1tbW3tra3tra2tbW2tbW1tbS0tLa2t7e3tbS0s7O0tLW1tLS0tbW1tra2tra2t7e3uLe3tra2trW2tbW2tra2tra2tra3tra3uLi3uri4uLe3t7i5ubm5urq6urm4t7e3t7W1tLS0s7OysrKxsbCwr66urq6urq+vra2srKuppaSmpqScmZubmpmampmXl5eXl5aZm5iZmJmZm52en5+dnJ6gpKWko6OioqKQdG5jcGFeXltUU1RIVEo/PFFCRkM7ODYzNzo1NTQ4Mzg5OTc4OTc7OTs9Ozc6NzU2OTk4NTg+Pz9ART5CPz9DPzxBQUI/PT9EQT8+PTk9Q0Y/VaSlpqanqKeoqamop6ioqKioqKiqrKuqqaipq7W1tba5o3eKcXKHhnd0cGh5a2JjYWVsaW5zal9jZWNjZWprYmRqbHaXjX6ovbm3tre5u7u6uLWxrKurqq6wrKyrq62tq6uvsLGvr7CytbW2t7W1trW1tbW1tbW2trSvr7O0tLSvra6vsrW0tbW1tbW2t7e3t7e3t7e3t7e3t7Owsra1tLa2tre3tra2tbW1tra3t7e5uLi4t7e3uLi4ubq6urq5uLi3t7e1tbS0tLS0tLS0s7OysbCvr6+vr66vr62oo6KgnJqampqZmZqbm5qampqbmpmZmZiXl5aYmZmZmpycnZ+foJ+goKChoaCgoJ+fi3RuaXRdYGZeUlRLRFRJPUVTSEVCOzo0NDY5NDQ1NzM4ODg3ODk5Ojs7Pz04OjkzNTg5NjM5PT5AP0A6QEJCQkA/QEJCPz0+QUFCPz06PkVDQFGjpqWlp6inqauqqKaoqKipp6ioqKinp6ioqaq1tbe3t7KZtH99kIx1Z2lqbGZjYGNoZW94cGlicXx5cGpmZmRma3NqhYystrKwra2ttLeysLCtrKuqqaiop6ipqampqKinqKipqaeoqqurra2sqqytraysrq6traunpaSnqqyopKOkpamwsbGztbW2t7i3t7W1tre4t7e3t7Kppaasq6ivtLa1s7W3t7a1tbW2tra3t7e4t7a2t7e3t7m6urq5uLi3t7Wxs7S0tLKxsK6sq6yurrCxsK2rqqmqqKijnJqZmJmYmJiYmZmZmZmZmpqZm5ubnJybmZeYmpqcnJydnJ2foKGhoqKioKGgoKCfnop1amtuWVxhVktPREdVRz5PV0hEPTw4MzQ0ODQ1NDgyODk4ODk6Ojw5OUA8Njk6MzY3OTE0PD8/QEBBOkNGRUJBREJDQTo7P0FCQz9APUBEQ0BPo6empaemqKqqqqakpqenqKioqKimpqaoq6uttba3t7e4rbJ1cHuDdmBiaWtiZWZhZGdmfYh5bHKAfXFvcXhjbW5xZo+srKurq6ysra6urK2trKyqp6WmpaWlpqioqKiopaeoqKioqKeoqKmqp6Wko6KioqOioKKioaGhoKChoaKjpKOjpaWmqLC0s7OzsKuqqaqztLa3trGopaOioaGipKiqqairs7Sxrq6xs7W2tra3uLi3tre3t7e3t7a2uLe0sa6ppqerrKmnpqWkpKSkpKWnqaajoJ+enZycm5uampmZmJeXmZmZmJiZmpqampqampqbm5mYmpydnZ2dnZucoKGgoaOjoqCgoKCfnp2FdGtsaFdYU0pHTUVITUdAU1dGRz09OTM2Mzc0NTU3Mzg6Ojo6OTw9OjpBPDY9ODM3ODgzNztAPz9AQDpCRUNAQkRDQT87PEBDQkNBQDxBQ0A9TqKnpqanp6mqq6mkpaWlpaaoqKippqanqKmpqrW2tre3t7izc2h7c2JnamtpaWJhZGloXV1tfHJma3J/fHR8bm1zc36gqamrq6uqq62trKusq6mpqKWjpKampqWmp6eqqaamp6enqKinp6iop6WkpKKhoaGhn56en5+fn56foKGho6Wko6OkpKSmp6enpqWkpaampqeqraumpKKhoaChpKalpaempaeoqKalpaivtLa3trW1tra1tbOwrKupqa6rqKWlpqampaSkpaWlpqWkpKSkpaKhoaGgnp2bm5ucm5qamZiXmJiYmJiZmpmZmZmYmZmZmZqZmZydnJycnJybnJ+fn6ChoaKgoKCfnZ2cgHNrbmReU0pITUZETEtFRFFTQ0c9PDgzNjI4NDY0NjQ4OTg6Ozk7Pjw5PTs5PTczNTk2NTY8QD0/QD88P0JDPkJCQj89Pj5CQ0FFQD86PkVAO0+jpqWkpqeoqaelpKWlpKWnp6eoqKanp6alpqa1tba2trW2uYptcW1vfHxxZ2pmYGFsYFROW2hqbm9tgYJ9cWdxdn6aqKeoqqmpq6urrKqqqqimpaWkoqOlpqalpaWmqaqppqWjpKWmpqSko6Kio6Khn5+fnp6cnJycnJ2dnJ2en6CioaKjo6KhoqKkpaSioqOjpKSjpKSko6Ggn6GipKanp6ipqaelpaSipKSlqK2wsKyrqqusqqmnpaWmpaWlpaalpqioqailpaWkpKSlpKOjpKOioaGhoqKgnp2cnJubm5qZmJiYmJmam5mXl5eWlpeXmJiZmpqcm5qampubm5ucnJ6goKGgnp6enpycm356bnJiXlNNSlBFRk5NQkBPRT5JOz01MzYzODM2Njc1Ojs4OTs5Oj49Ozo5OT43NjY5NjU2PkI+PkE/PT5DQT5DQ0BAO0BAQkJCRUA+Oz5FPzxQoKSjpKOjo6SkoqSlpaSlpqamp6empqalpqaltLW1tbS0tbiBaHx9ZXOCemxwdWFfY1ROT1FbaGxpbGxxbW5xbnScoqSnqKioqauqqqqqqaempaSjo6OjpKSlpqalp6ytqaShnp2epKShn56foKCdnJ2dnJycmpqam5ucnJubm5ydnp6foKCgoJ+goaOioKGjpKSjoqSlpaWkop+go6SkpKapqainpaGdnJ+jpaipqainqKioqaempaWkpKSlpqampqampqenpaWko6Ojo6KioqGhoqKhoqOkop+enZ2cmpubmpqZmJeXmJaWlZSUlJWVl5iYmpubnJuampqam5ucm5ucnp+fnpucnJyam5p/fnF0YFtUTUdNSEZMSj8/TkM8QDs8NDM4Mzc0NzY3ODs9ODo6OTk7PTs7ODk+Njc4OTU4OD9APT9BPjs9RD89REA/PzpAQUE/QUVAPjw8Qz88Tp2ioaKioKCipaSkpKWlpqenp6empqampaampbW1tbS0tLS3jHalsXdmc3Jvc2xjZGlYT1JRT09dgG1kYFptkZGSoqKjpaampqenqKiop6alpaOioaGhoaKjpaempqesq6emoJ2cm6Ghnpubmp2cmZiam5qampmZmZubm5uampqampucnZ6goaCfnp+hoJ6foqOko6Omp6inqKWioKGhoaGkpaWlpKCcmZmbnqOmpqampqanpqempaOlpKWlpqiop6enpaWlpaWkpKOjo6KhoqKioqKhoaKjo6Kgn56enZybnJubmZaUlJSTk5OTk5SUlJWWl5qam5ubm5qZmZqanJ2dnZ2dnZuampqamZqXf3dvc11aTkhKTkdFRklERU5APD09PDQ1OzQ2NDY1Njc5Ozg5OTg5OTw7PDc6Ozc4ODg1ODg/Qj9BQTw+P0A8PEJAQT49QT4/Pz1CQUA6OkA8PE+doqGfoJ+dn6OkpKSlpqeoqKenp6ampqampqW1tLS0tLS0tbSXtqd1Znh2Y2xjY2VjW1JTU1JNXqCMeFhodpajnp6hoaOjo6OjpKSlpqalpKSioaGko6OjoqOlpqamp6enp5+bmpuioJqWl5Wam5qXl5iZmpqYmJqampqbm5qZmZmenZ2goqOjo6KkpKWinqGhoaKjpaampaSjoaCgn5+hoZ+goJ2amJiZmpygpKOjpKWmp6alpaOjpKSkpKWnp6ampqampaWmpKOjo6SjoqKjpKGfoKGhoKGgoaCfn56dnZyamJeVk5KSkpKSkpOTkpOUlZaZmpqbm5qampqbnZ6enp2cnJybm5qamZmZlH10bHReWk9IRUdGQkVORT9GOzo+Pzs0Njo2OTM2NDY4ODo4OTc4ODo8Ozw5Ozs6OjY3ODk5Pj9APjw9QD5AOjlAQT89QT8/QUE+QUE/Ojk9PjpQnaCfnJucnJufoqOlpaWlp6iop6ampqanpqantLS0tLOysrGwsK2rkHiGj36bmn93Yl1TUlFRTGKgootaiKCgn52YmZycnZ2eoaGgpKenpqWkoqGjp6alpaOipaampqanpqagm5mboaCXkpOSl5qcmpeXl5iampmampqam5qYmJmaoKCgoKGfoaKipKamop6gn5+goaOko6Khn56enpyanZuZmpqZmJeZnqChoaKioqKkpaWmpKSkpKKioqKkpaWlpaWlpaalpaOko6KioqGgoKGgnp+fn5+fnp+foJ+cm5qZl5WUlJSTkZCRkpKSkpKSk5SVl5iZmpmZmpqam5+fnp2cnJycmpmZmpiXl5F8cmdxXl1QRj9BRD9KT0JCRjhDRT4+OTg7Nzc0ODQ1OTo6Ozk3OTo8Ozo8PT48PDo2NzY5OD4/QT47Pz49PDg6PkFAQUE/P0FCP0RBPjo4PkE8U5ycm5uampycnaGio6KjoqSmp6alpaampqSjo7KysK2rp6amp6alpqiln6iop6qnoXmEXFFST0xcnKCAYpmgnp2clZOVlpeZmp2dnqGmpqampKOioqanp6ajpaampaWnp6amop6cn6Gfl5GQkJSXm52YlpeWmJuZmpqampqZl5iam6Ghn56fnZybnJ6goJ6dn56fn6Cio6SjoqCfnp2ZlpeXl5iYmZubnqKioqKioqGio6WlpKOio6SioaGhoqOkpKSko6SkpKSioqKhoqGgoJ+gnp2enp2dnZ2dnp6em5mYl5WTk5SUk5KQj5GSkZKSkZKTlJaXl5iYmZqampyenZ2dnJubmpiYmpmXlZaNempmamBiTkY+P0A9SkVAQ0A7QEE8Ozs5Ojc2Njg0Njc4OT04ODs6Oz87Ojs8Ojk6Nzc2ODs8Oz08Ojo8PTw3Oz5DQkRDPz1BQ0BEQT88OkBCO1eZmJqamZmam5ucnp2foqKhoqSlpKSlpqSioJ6op6alpqWlpaemp6ampqakpaanqKehqXJOUU1KVJahenKanJyenJeVlJWWmJiXl5qeoqKhoqOkpKOjpqalpKanpqWlpqalpaOgoKGhoJmSj46Wm5menJaXl5eZm5ycnJqamZeZm5uen52cnZyZmZqcnZydnp6fn5+hoaCgoaKgn56bmJWVlZeanZ2fn6GhoqKio6OhoaCgoJ2cnaGioqOkpKOioaSlpKOko6SjoqKioqKhoaGfn52cnZ2cnJ2dnJ2enpqXlpaVlJOTkpKSkpCRkpKSkpGSlJWWl5iYmJiam5ycnJycnJ2cm5mYmZiWlJWXi3hsY2RiZFFHQT1DO0tIRDo7Ozw+OTo6OTo3Mzc5NTo4ODg8OTg7OT09Ozo7Ojk8PDc2NDc/PDo9Ozw/Pjw7ODxBQ0FDQkI+P0JAQkFAOj9APztZmZiampqam5ubm5ydoKGhoaGhoqKioqKhn5+dpKWmpqenpaWmp6ampqWkpKalpKSkpaaGUFJQT0+PmHB6mpubnJ6cnJycm5ubmZiYm56dnp6foKOkoqGhoqOio6SkpqalpKSjoqGhnpyblJmqnJuam56amJiYmJqcnpyam5iWmZybnJycnJydmpqbnJ2dnp6dnp6fn52cnJyhoaCblpWVlZacn6Ggn5+hoKKjoqOhnZuZlpaWlpicnqCip6ikoaCgoqOjoqKioKCgoJ+fnp+gnp2cm5ucnZydnJmanJuWk5KSkpKUk5KSkpKSkpOSkpKRkpSVlpeYmJiYmZqcm5qbm5ucnJqZmJiXlZWWl4d3ZGdoZGJNQ0U8RDlJSkU5Ojs9PTo6Nzg6NjQ3OTU8OTY4OTc5PDs7PDo6PDs6PDw4Nzg3Pj07Pj46Qj86Ojo/QURCQ0FBQD9EQUFAPjpAPj06W5qYmZqbmpubm5uen6CgoaKioKCgn5+enp2dnKWkpaanpqWlpqakoqKio6Oko6Kjo6KnllRYVVJOZ21rgZ6am5udn6Cgn56enp6dnJ2dnJ6enp+goaCfn5+goKGioqOkpKSkoqGhnpuamZqtqp6ZmZienpiYmZmam5qWlZeWlZicnJ2cm52dnpybnJ2cnZ6bmJqeoaGdm5udoKKhmpWVlpaZoKKfnZueoaKjop+em5eXlJKSlJeYmZ2goqenpaGgn56goaGioaCfnp2cnJubnJubmpqZmpydnJmXmZaVk5GQkJCPkZKSkpKSkZKTk5OTk5OTlJWWlpeXl5manJubnJucnJqamZeXlpaVlZSEcmZsYmRbREJMPT84RktCPEA+Pj05Ozk6PTg1ODg2Ozg1Njo4PDw7Ozw8Ozk8Oj09OTU4Nzw5PD88OkE/Ojo6QEBDQkRBQ0A/Q0FAPj08QD09Ol+al5mamJeYmpycn5+foaGhoJ+fn56foKCenZ2lpKSko6OioqOjoZ+foKGipKOio6SiradXXl1UV19ua42dmpqbnJ2dm5ucnZ+enZycnJydnZ+goKChoaGgoKGgorCnoaKioqCenJubm5queXqbm5yZnJ6ZlpaWl5eTjo6QlJabnJuam5udn52cnJycnJ6dlpSZnJ+in5ycnZ+hoJuXl5mZmpycnJubnZ6fnZqXlpaWlJOTlJiampqfoKGmpqWgn56fnqChoaCenJubnJybm5ybm5qZmJmZmZmXl5iVlJKQkJCQj5CSkpKSkZGTk5aYl5STkpSVlJWWlZaZmZmam52cnJyampmXlpaWlpaQgG9vZV5gV0BKSDg/N0lFP0VBPD07Ojo8Ozs3NTs4Njs3NDY6Oj47Oj0+Pj07Ozs+Ozo4Ojk5NkBBPTo8PTo6OT9BQ0JERUM+P0FBPz8+Pj89PDtgl5WXl5aVl5mbnqGhoKGioqCenp6enqCgn52bpaWkpKSioKCfoJ+dnZ+hoqOjo6OkobCjXWVkYGFua4GenJubm5ubmZianJ2enJubm5ycnJ6ipKGeoKGioqKhoKSlraefoKCenJmZmpmmk0uBnZ2em5manJiXlZWWkY6Nj5KYnZycm5ycnqCdnJucnJyempWVm56foZ+dnJyenp2cmpqampqampqbm5qXl5aTkpWVlpWTlZaam5qanZ6foqWjnp6fn5+en5+enZ6fnZycm5qbmpqbmpiZmJiYmJiYlZSTkZCRkJCQkZKTk5CRk5SYmZiVk5SVlZWWlZaXmZmXmZqenpyamJiXl5aWl5eYjX1ubV9lVlRFSzw3PjdSRUM+QkE4Ozw7OTg6ODY7Nzc6Njc5Oj0+Ojw8PT49PD06Pz06ODw9OTtAPj4/PT45OTs/QkNAQ0VDPT9DQj5AQD5APTw8YZWSlJWWlpeanJ6goKCgoaCgnp6enp6gn56em6WlpKSioJ+fnp2dm5mbnJydnp+gn56rmGNpbW5pZm2enZybm5ybmpmZmZqam5ucm5uam5ygo6SgnZ+en6ChoJ+jonmqpKCgnpuampudqFpJhJ+enpyZmJqamJiYmJKOj5OXnJ2bnJ2cnJycnZycnp6dnpqVl5ygoaGfnp2eoJ+cnJuampqbmpqYmpmVk5OTkpOWl5eVlJiYmZucnJydoJ+gnp6enp+fn56en6KkpKKgnp6cm5qam5uamJmZmJeXlpWUlJORkZCQkZKTk5OSkpOUmJmYlpWUlZaWlpaWl5iYmJiXmZqamZeXl5aXlpeWl4l4dmddX1dURUU5OTs8WT5AOEI/OTw8Pjk4Ozg6Ozc5OjU4OTs9PDk9Oz0+PD0+Oz8/Ozk+PDw+Pz5AQUE9ODc7QkNFP0FFQz1AREJBQEQ7Oz47PGKWk5SUlpWUlpiYmZubnJycnZ2cnJ2en56dnJqkpKSkoJ+enpybm5qZmJiYmZucnZ6cpolla3R4bVuFop2dnJydnJqbmpqampydnZ2bmpuboKKinpucnZycnJ2enqhtb6uin5yampycrIJLT4efnp6cm5qanZqam5yVkZOXm52dnJ2fnZycnJycnZ6fnp+cl5idn6GhoJ6cn6CfnJubm5qbmpmZmZmZl5WWlZaYl5eXlpaYmZuenp2dn6GhoJ+fnp6fn5+dn5+hoqKhoZ+fn5yZm5qcnZuampmXlpaYl5eXlpWTkpGTlJSTlJSUlJaZmJaVlZeZmJeYl5eXl5eYl5iXl5eXlpaYl5eVl5eDeHZfW11eUT1GOjk4P1VDQTtDQzo8Pz86Ojk3Ozg4ODc0ODk8Ozw4Ozs8PTo8Pjk/QT06PTw+PkA/PUBBPjk2PERDRUBBRUU9PkVERD9COzo8OTpkl5SVlZaUlJSUlJWXmJiamZqcnJydnp6dnZybo6Oko6CenJuamZqZmJiYmZiam5ubm6WJa3F2em9lmp+enp2dnJybnZ6dnJ2enp2dnJydm5ygoJuampubm5udnJqkiFSEqJuamZucnqpkVFGIoJ2dnZybmp+fm5ydm5mZmZudnZ2dn52dn5+dnJydn5+fn5uanZ+goJ+dnJ6gnpubm5ubm5yampuamZudnJqZmJeYmJiYmp2foKCgoJ+hoaGgoJ+en5+fnp6foaKhoJ+enp+enJqam5ucmpqZlpaXmZmYmJiWlJOUlJWVk5OVlZSVlpWVlZSYmZuamZaWl5WWmJiWl5OUlJGRk4yRkJOWfXhqYWJiXFE8QDw2OENWSERCOjg7Oj47Nzc5Nj06OTk2NDc6Ozw9OTo6Oz87PT08QD47Oz46PT89PkBBP0A8NztBQ0U/P0REPj9EREM+Qj07PDs6Z5aTk5OTk5OTlJSVlpeWl5aWl5mbm5ybm5uamaOjoqCfnpuamJeYl5eXmJmYmZybm5qkgGpqb3lzcZegnp2dnJydnp6enp+enp2cnJydnp2bnJuampqam5ubmZmZoJNiYpudmJudm6KWZl1Rh6GdnZ2cm5qdn5ucnJubnJubnZ2dnJydnp2enZydnZ2cnJ2dm5uenp6dnZybnpubnJycnJydnJubmpmbmpmYmZmYmpmZmpyfn5+jpaKfoaKioaGfnqCgn5+fnqCioaGhn5+fn52ZmpucnZqZmJWWl5aVlZaTkpOUk5STkJCSk5GUkY+OkJGOlZabmJWYlJmXlJiRjJCPk5yTkoyFjIeDhndxZ2pkW1xRQT44NkJHYEJFR0A+Ozw7Ojg4NjU8ODo4MzQ6Njk9PTk5Ojs9Ozw6PD48Oj5AOj5APjw/QD8+PDg6Q0FEPz5CRD8+Q0VCPUJAPDw8OmeYk5KSk5OSk5SVlJWXl5aWlZaXmZmZmpqampqkoqCfn52bmpmYmJiXl5iZmJmcnZ2cqH1nZXN7enOJop+enp2dnp6enZ2enZ6enp2dnZ6cm5ybmpubm5ycnJmYmZyZZWN9nJibnZykh2dcUYKinZ6dnZybm52bnJybnJ2dnZ2dnJ2dnp+fn52cnZ2dm5qbnJmZnJ2dnZ2dm5uanJ2dnJycnp2dnZybmZeVlZeXmJqam5ubnZ6foqOhoKGhnJucm5ubnZqcmZycn6CfnZiZmZmUkpKUl5SPj4+OkYyNiYuQi4mLjpGRj4mQmJiQkoyNi5KQj5iYoqiqpqWlrKOmoZqep6eyqKKVo6Cfl39wcWlsXFtcTEY8NzdHR1g+SE5URjk+Ojg5ODc1PTk4NzMzOTY6Pjw6Nzo8Ozo6Ojo8PDs/PjtAQD47PT5BPDw2N0A+QkA+QUY+PEFEQT1DQj49PDlmmJSTk5OTkpOUlZOVl5iYmJaXl5iZmZqampqaoqGfnp2cm5mYmJiYmJiYmZmZm5ybnKx/am16f3lxh6Genp2cnZ6enp6enp6dnp2dnZ6enJubnJubm5ubm5yZmZmapGhnZoiXnJyenHlmWlSDop6fnp2dnp6dnJydnJ2dnZ6fnZ2fn56goJ+enZ2dnZybnJ2em5qbm52enZ6dm5ubnJ2cnp2cnZqYl5SRjo+QkJGVmJSWlJiZmpudmJuYlY2Mjo6TkpKRj4mQjpGRjo+Ki42NjYiIi4+Lg42NkY+MkI2Qk5WVnJihoJySn6SipKmam5eanKOprb3Bwbq8uL26ucC8ubq3uru7tL2zwbV/bnVmZ1peWUxJRTo7TElTPFZSSUM6QTo7Ozc3NTo6OjgyNTY4Oz08OTk7Ozw5Nzo4Ojw6PT85PD8+PDw9QTs5NTg8O0A/QT9EPTxBQkA8REM9PT06YZOTkZCUlJOTk5OTlJeYlpeZmJmYmZqbmpqamp+gnp+fnJqZmpqampmYl5iZmZmZmZmphXB1e4B3b4mhnp6enp6fn56en56fn56dnp6fnp2dnJ2cm5ubm5ucmpiZmJ9uZWJshp2dn5BvY1ZXh6GfoJ+enZ6hoJ6dnp2enZ6fn56en6CenZ6enJydnZ2cm5qYnJuVmJqamJiYmJmSjJCXlKCXk4+MjYqKiImMiJORh5CPjYqKkJCLjoqMi4+IiImJjpGOjYaFiYaKhoWLiI+SkJCNkJKXlpKamJ2TlJ6kpqaqq7Gsr6+rpquqsbm5tbS0rqyvtMDIxcXBvsbDxMTDurW+t7a0s7C2tb6qcHRyXGZfXl1JRj8/RUtMVklcTEQ/PUI6Qzk5Nzc7OTk3MTc5ODo+ODg6PDw7OTc5OTs9Oj4/OT5BPDs+PD46OTY5PDpBPkNBQT08QkBAPkJEPj8+OVyHhIOHi42KiYaFgYqMkZOVmJiHlZaWkpiampmenZ+gn52ampubm5ycm5iWmJiXl5ibqo56dXZ7f3mCoJ+fnp+goKCfn5+foKCfnp2dnp+enp2dnJqbm5ybm5uYmZmfeXNyXniZnKGOYVlTWo6dm56dnZycoaGfnZ6dnZ2dnp2dnJiWlpaYlZWSlpmWk5GKjI+PjI+NkIuLj4+WiYiEi5GZjn2Fi42PjYyHioyQm4yRj4+Lio6TjIyNjIiSi4yFiYyPhouIh42KhYyEj4qXkJOYmpWbnKOqoaKknKKrsbe0ubWxtK2vsrKlp7O6sbq6vLa3tsDDw729vLa/urq8wbW4wL60r66mqa+3mm58Z1tjWl1fSEU+QUtJU1hZXkFGOTk9OkY/Pzo3Ozs7NjM5Nzo5Pjg6Ojw9OTk4Ozk7PDo+PTtAQDs8QjxAOjg0Nzw7QkBBQj4+O0NEREBDQz0+PjlhmZWLkYWNj5aSiHl9e3+Fi4OKgoqJhmuAeJCLlpqRnZ2UlJGTlpeampiWk42Sk5KQm5uIdndzcX1/cpGgnZubm5yenZ2eoKGgm5uWlpucmpubnJuYmZqYmJmbmpqWkpuflHmaqKGqlHxiUmCQko6SkY+Uk5KXm5mYm5ePjpCLjo2Ch4uLi4qLiI2RjIeHhoqIiZGKh4yEhYqNi4qNhI+UkIyDkJOUmZWQi5OTkZWRlpWOj5GMlI2Oj4qIj4ePhoeJiYmNiomJioWNh46JmJKUmpuXmKChp6Cko5qqqbO2sbWwqKqiqK6tn6qvsK21ubi8wr/BxLixtbCutrOwuL68ury+urOzp7G3wpB1gGNiXlpXUk1IRkVQSVlXX1tDUDpCQz1HRj84Nzo6NzU1OTc8OTw5ODo9Pjo6Nzs7Pjs7PTs9P0E7Pz48Pzo4NDM3OkFBQEI+PjpDREM/QUM7PT45Z6mloqKZn6CippeUiI2CiIJ1h4iKiIp7e3Z7enmPeoiSfn18en6CkYWBgH1zfH99fISHfnRweHZzfHaBj4iIiYeIioyMkZicl4iOhIuNi4iNkZCPi5GPi4yPkJGRjqCfjn1iiamYmm6Dh2twiIeCjYuGiYp/iYqGiJiRiIOIg4KFfIuLjIaJi4iKkIyIi42PjI+Wh4mLio6NjY2Wk5OdnJyalpycm56bmpuYnpeTkZWWkJKRi4+LlpSMjYqDi4SEiYyQkIqOio2LipGJjZOTk5SVk5KcmZ6Xn6CfpaKvsamupKSfmKStpqa4t6ysu729wsPAv7+vpa2wsLS3uLO0uLa0ta6stK+4tLaBeXpjZmBeVlFRQUVMT0lcXl9UR0dCS0xCREA9ODg7OTU3Nzk3Ozc9PDk9Pj05Ozg6O0A8Oj06PkJBOD88Oj84NjQyOTtCQD9CPj04QEI/PkBEO0A+N2CloJqXnaGaoaCPl5efl5WCjaCfo6GdmpKOjIxycXBvdnFucG1ucHZub29waHBxcHR+c3FycXd7cnl2d3Jyd3Z6e3l8fXt/iIGEi3+PkYaNi4yGiouLiYeEgYaDf4yojXhpUnCdj4xWbXl7gn5/gpKQhoSEhY2DhIyPj4+IjY+Hi4iRkJWRjpCKk5eOj5WYp6SfnZWYlpaln5udq6aqt7W4srGnr6qnpqGfmp2WkpWVkYqPjImTjZuVjYuLhoaJjJWQkJCLmZKVlZSbkJiTlIyNkYyWl5WilZ6mqauno6OqsJucpp+mq6G0vb6zs7+5u7u6uby9rqiusa6wuLyztLGxqrCpqLGxsqild3J0X2hhYFRWUUlKSFZNXl5eVExKRVFKRUdDPTo5OTc0ODY4Mzg4PTo9PD47OTs4Ojs/PDw+OT9DPzg7Ojg8Nzc2Mzc5RT4/Qz89N0BAQT0/RDw+PThUj4yGh4eUjJWZl5yWmZaNlZyWlZydoKCdmpiWeHFubXJ4cXFsbnJwa3FvcG1yc3t1dnd5fnVxeHZ0d3tybn98gX15eH1/eYOGg4WCg5CLkIuLi46Pi4mJhYKCfn6QoHpPQ0l2lIODSVdvc3eCe4aOjYuGjZSRi5CXj5SXkpihlp6WlZunpp+goKawq6GjpbW0sqqmqq+isba5vcK7ucO+vLi9uLWxrLCsppuSk5mfm5SPk5WOmp2doJqfn5edo6qsoZ+em62hp6qwqaampJiRkZWUo6SirKSss7Szs6i3tru4sLKvra2yt7a6srW6s7e5u7i8urayr6yxsbKztLOxsa2us7Gzs6yhl3Zxc19jXlJRVE1PSUdYT1pcZFROR1VPRURKRD44Ojg3NTg4ODU5Nzo6PTw/Ojg8ODk5PTs9PTpCPj84Ozo5Ojk4NjI1N0I+P0RAQDY+P0I/PEM8PT46Tn98go6MjJOTl5eaj5SWjZaRkZSXk5qanqGdnHJvcnFxcXFxcG5zcW91dHJxdneAdXd8eYV+d3t8eX1/fICJiYmDfXp/h4GIiYGAgIGGiIKGi4eIhYSIiIqFgIGAoJRTNDQ7eYV1ckM4TmtvgIeKjouNkJmclJSUoJqan6Ktsa6ppKWtr6ysrLWuvrmtrqm1sLexq7G2rK+9wsLAvrq8trKutraxtK66u7OurKepp6unoqmtoKmooq+wuLSxvLq6urK0ta+8tLezt7e7t7mtrbCprLW5sbeytLe2sLu7vLu6ury1vLi0wbWsqqqrtLG3uLm1trSzsKymrrCqq7Cxq6yusLKxtK6qo5N4dnJlZ1tMUlBFTUlTV1JlXmdUUExcUUhMUkNBOTk3OTU4ODY2Ozc5Ojs6Pjk4Ozo6Ojw8Pj08RD45Njs7ODg+OTUxNTZCRkREP0A3Pj5DPjpBP0BAO0t/gomXmJSdlpabmIuSlo6XkZGVl5SZl5+bmZx8dHV2dXl1c3RudnJzdHV2d319gH56gXyDfoJ/fYB/hIKFj52RiYF/go+Xjo6HgoCBiIuFfoqRi3+IjYyLi4eRj6FuRmRVP3p6Z2RMPDlNbnWNiomQj42PlJSYkJWcmp2eqK6ysLC1tLOtsrW4sLy1tbGqsKqztbS7t7SztrS1r7i4t62noqassLCvtre3vrW5vLOysa61u7C0r6+yu7axuMC9tLS0s7izvLq2tLrAvbm6ubq+ubm5vrWysa+yr6q1tLGzsbSzrri4tb+vpKaoo6ussa+zrq6wsKytq6qroqKmqKKnrauqpaynoqeYeHlxZmVZT09NSVJNV01PX15cTlVVYlFEVE07Pzk8ODk1ODc1Nzk1Ojo6OTs4Ojw8Oj08Pj4/P0I9ODY6Ojk6QDs1MjY2QUZDQz4/Nz49Q0I5P0I/PjtLjpGTmJmVmZGTopiTkpKLk4uOkI+Vl5ablZSbhoJ9enh2dHRzdH53end2gIKDhouMhISFioaQiYeRk5aRjZaalY+IjI+emJaVkpCTl5qamZCeoZ2Tl5uhmp2boqSYUXSwkUh7h3htUml/WVdxiJCMmJqPj4yUmpecnZugnaSstLm6vK+2tLi0tLK3uLmzq6+qqKy1srK1rrGrrqa3s7OxpaGotbCvrayrtbqyu7q6tLK3ur67ubG4sLmtqLK4u66ttLS3tbu2trm5vLe0r7G0t7a5s7e1pq2pq6ior6yprq2up6KxtLG0q6aop6Cjq66oqq6orLKwr6+pqKGeoaGjpqOgopqlo56ol3J3bmdiVUpUT09KRFBLX2JYWlFcVGBNSFJJQUA5Ojg2Njc3NTg5NDs5Ozk8Nzs+Ojg8PD0/QkBBPTs2OTk5Oj87NjM3OD5GQkJAQjk+PUBDPkBGQj44R5OWkZWTkpSQkZ+ZnZmVkI+Sko6Mk5aWko6RlZGSkIaBeXJzdXuBhI6HhZGTkpicnJiVkJWYo5yaoaeqqZ+clpeVnaKioZyZnpmlqKyvramnqqqpp6KlqKmrqamshF+/2KxGkqOakF1rgnteXoOioaSem5qkp6Spq66spaSoq6+xtK6qrK6zr6ystLO0ua6urayqrLKwsK2wqKqmsrS0uK6qtrqwr6qurLC3s7i0t7W0u7y4tbWxtauyrKiys7uvrbGytLa1sbG0s7OvrKuvs7a0sayutKqqpqWnrauoqKupqqifqbOwqqeppaOio7CtqaatpairrayppaSioKWipaOYmZyVnqKippdudWVnZFdPWUtLSktTVHBiWWRXX1tcUlpQTEM8ODk6Njk4NzQ3NzQ4Ojw6PDg6PTk3PDw7PkM/QT47OTo5Ojs+PTg0NThBREVEQkM5PjtAPkI/R0Q+N0KSm5SVlZaVj46Wl5qZlZGKk5SSjo+SkYqKiY2Ul5qTjYmCho6VkZSfmpuin5+jnqGhn5ijpKelpaapqa2rqaKmpKilpKGfnqOjra2srairrq6rq6ykoaKmqaeopm96vcCqmsyonrOaSFaEcFJ4n6mnoKKhrqyrqqetrqilpKmpqqmmo6iqqaekp66wr7Ovq7Crqq+yr7Czua+rqLCxrrCyubO0r62vtbCss7GurLW1tLSzs7CvrKyqrKusr7G0s7CwrrCwsKyqrauqq6alrrCysKumqbCvqaOkqaunqKaopquwq6mvqaaoqaalo6iwraqpqKKpo6WnpKGhoKKloZ2el5aYlJugpKmUbnNeamlfVlpOUk5RT1NlXGVjW11ZXFBZT0tAPDs5Ojc6ODczNTMzODo9OTo4OTo5Oj08PEBEPkA9OTo8PDw+Oz45NTo8QkFFQUNBOT47P0BEQENCQDdAkZ6YlJeZlpGHi5SSl5GIg4mLk4+OkI2Hh4SFlZmWmJeZlpqeop2ZnKKkoaCdn5qfoKGgpqGgoKCjo6KlqKmrramqpqOmpaCloKaop6aoqaepqaSop5qdpKWjoqJygZmujsnOsp6wsm5TvqBUbJSjoqChn6GhqKCcn6GloaCmo6KfpKGspp6foaGkrKqnrKivq6e0sa6ur7WyrKqwq6mtrbWwrq6srreup6yqpKivsq+sq7Kvqqqpq6utqa6urrGxraqtqaunp6uoqauinaapqKilqKisqKilpKWop6iopqmsr6+oq6mhoqKlo6Opq6ymqKWjqKKhoKSdnZ+hoZ2bnZ+amZWcnKOqlG9zZm5yZF1dUFVPWE9eZWRsaGJiWlpSVE9NQTo9Ojo4Ozk1MTYzMjg4Ozk5OTk7OTk8Oz0/Qz5APTk7Ojs8QD0+PDk5PEFBRUFGQTo9Oz9BQUJBRUI4PYqWlJOYmpaPiISNjpGSjIiIiI+JiZCRjoqKiJubmZygpaKlnqKjoZqeoZyanZ6bnKOop6ugoKOYoJ2XnKGjo6WjoqKkrKilqaCepqmnq6mkoKKgo6ehpq6mppygjX2Fe4bQvZiXqJxyUpqsZ2OOo52goJ6doKOalpqYo6KipJ+ZnKGhoqCbmp6goaSgnaejqrGorqusqaSqqquorKalrKqws6+rq6mwq6appaWoq6ynpqevq6Wnq6upq6irqqqrrailqKOmpaesqayoopykoaOmo6qpqKano6SnqKanqKepqKupoaKoo5yepqWjqKino6WlpqmgpJ6inpeYnZ+doqKlnpiUlZ6go5d1d2t2eGJfXFVZUVVXW2Nfc19oX2NTUVlUSD48PTg7OTo4NTM3MzM0Nzo4OT05Ozo5PDxBQEM9PT44Ozw9PEA/Qj86ODo+P0NAREE6Oz49QD9DQ0VDOTyCmJmenZ2alZKKiZGRl5GQh4SJgoGNj4+Sj42cnZ+hpKmlqaeorK2moqKfmKSmo6Stsa6yp6asm56em5qjp6Cfo5+foq+rq6yoqKuvqaiqqaKgoqiqrrGyrqukqZiIe2qdvcOrrp6JdmRweHp2h6Okp6OhnaCimZWem5+fpKGblZigoZ2enJudnZuZmZWen6Oonp2iqKGaoaOmoqSoqaqoq7CxqKWlp6eopKWpqaqnoqWmqKadnqWloqClpaOlpqCjpaOjpaelqamqpKekpqKmp6SrqaenpKGlqKynpqWlo6OopJWdo5+bnaCjqaeopqGjo6mooKiioJyVkZqfn6GmopuXkpCamqCVfHdvfXlmW1tgX1pcVVxoZG9jbWlpYl5QUEA/Ozo4OTg8OzYzNDMzMzc5OTs8OTs7OT49QkBAPTs9ODw9QD08PENBPjo4PT9EP0M+Ojk/PEI/P0FEQjk6gJ6kp6Gem5+gmY+ZnaCWloqGj4iEi4qTl5SRo6Wnqq6trLOys7S4t62pqqevtLKxqq6usbKusa2lq7OssbGpq6+rq6y2sLSwq7GysaOgo6qqp6+3trSztrKwsqeJdV5Olp+Qj42Ae3Nwc3F4fH6Fkp2hpKOipJudoZqWnqScm5aZoqefoJ+joJuUlpmWl5qfoJmVnqGZmJ2dpZ2gpKeqqaiqraylqaSlqqeqqaqsp6SkpKOimZmhnpqaoaCfpaWYnqSmpKqooqelpaGqp6mnp6ejqKWmpaGkqKesoqekoaalpaOVl52Ym5mVo6elpaSfnZ2lo6Kqo5+amZiXnJyaoaGakJOTl5ibjX93cnZ4amJbX19cYllgZG5ta25hX2RgUE9BQDs7OTs4Ojk2MTQzNjQ3Nzc6PTo8Ozk9PUI/Pj89PDo/OTo7PD5CRUA9OTtAQT5DPDs5PzlAQEBAQkM7OXuao6OcoJ2dop2Zn6KioJibmJaYkpSQm5qWl7S0rrW4s7S4tre0uLm3tbm4ub28uKqLnLK4vLS9urW7uru4s7q/uLe5u7G3r6iusq2inaCrsra7vr/Av8W/tauTcGZYR3eAc3V6cW5paGJiaWlvdnd4fYONmKOorKakmaGko52goaKooaOgpaGck5mYmJmco56cmpudl5uZlqWam5+hqKmpqKuvr66pqKirrKytq6irp6WjoJyfo6Ojn6Cipammmpyip6Spn6GjoqKgpaanpqSooJ+ipKGjoqiop6OloaGopqalo5mbmJuTj6GknqKfmJiVoJuhpaCfm5udnJuamZugmo2YmZiTkYaAdnh4eGNbUllUX19hbWh2a3FoaWliWlNMQDw6Ozg5Nzk3NTU2Mjg1Njc3Ojw7Ozs7QD4/QD0+Pjk6PDk2Nz47QkZCPDg7P0NDRDw+OT43PkFCP0ZDOzhwkpqblJ6bm52Vl52doqajopaXnpaXl6GblJi+t7G4uba3t7i7l5S2vbu9vcDFtaK7mKC3v7+6wcm0nbu2sra/xcGooLa0urGqrrSxsLK0tbrI0tnc1ce6rZ+QeFxbT0Vea2VqcGhkYmdZV11ZXmZubm1tbG6BqMjGu6Knqqynq6mlpqCnoKGmoZOWmJ2foqSjnZ6coaChnZekmpmdoKaqqqqtrq2tsLGrrK2sqamrrqimpaalpqSkpqaeo6eppKGcoKKjpqCio5+jpJ2foqWgpJyboZ6fo6GhpaSlqaOkpaKkp6ehn52elpOcoJiZko+MjJeWn5uWnJqdnJqSlpSUmJOQmp2YiouHgIB8gnhhXllTYWlgZnRvdGl0ZGlkYltMSz46OTg5ODg5NzM0NTI1NDY2OTw8Oz08P0E/QEA9Pj44OTs4Njc/OUJFQzw7PD5DREM9QDs9Nz1DQ0BFQjw3Z4yRk4qalZiblZWYm6Knq6aVl5iQlZmhnpeXvrWztLu6ubi5woeYt6u4u8DCxbOjw6e4s72/tMTHvbS7uL62wMTErqCworW2tb2+wcTHw8TF2eLfz72wqJyNeGJVV01FXmxhY2plYWJpXVVcV1laXmNhXGOAqcXAvbipr7Gwr6yqoqajrJ+fpquXmqifpaWfoJydoKuwsKyiq5yYm6Cor7Kys6uorre1sq2tqaalqKulpaStqaShn6Cnnp6mqKmmnp+anqGlpqmcnaObl6KmmpuanZ+cmqGcmZ2eoKijn6GfnaWioKOioZSZmpmTj4qLhI2Qk5uPjpiVm5eYkJORkomNl5iYk4uKi32AgIVwYGJfXmtjYm54dXdubVtiUlZcTUc7PDk3OTc5Ojc0NDQxNDM3Njg8Ozs8PEBAPUA/Pj8+Ojo5Ojc6Pz5FRUU8PT1AQkJCQUE7PDhAQ0NARD87NV+MjIaFlouUlZeYl5ifpqellpWVkZebn5ual7mxtrO5vLy5urWqsryxvsG0vMe5uLuuv6fGw7/KxsnIxcXJvMLHx7+xsKe8vL7FxMbJx8XGvMfHztDEq417b1xTVFZLQF5sZWZuZWJeZmFVWFpYVldXYoOltru5q7SyrbOtqa6vp6awr7Ktqq+zpKu1qaeopKCgnqmyuL61tbWqqaausre4t7apq7i8ubexr66noqOop6SfqKOfnqCZoZydoqSnp6GelJuaoKGlnqChnpajnZSQlpiboZqflpORlpSin5qenJudoZ6kn56VnJiPkpOPjImTkJefiZCWkZuUmJGRlZaDjJWXlpKLjIh8f4R/amZoYWtsZ251cnJ1cWdeYFxSSUU/Ojo6Nzg0ODw3NjU0MjMzNjU3PDo7PDs9QD4/QD48PTk5OTs6PDw+QkRFPj49QENDQkREOzo4QUJCQUNAOTJbk4iEjZGKi5GRlZCSmp2fnJOSmJSdnZqXmpW2sbm1tb6+tri1uLO8vMTEusPHwb+0s8XFxr/CzcfLzsvLx8HDxsfIysXExcO7vLzBxcHFxL/EwsbJycCkiFpMSEpOSD5aYGJscWhhX2VcWFVTVFFWgLbDr6yqqqqtrKmlpZ6pr6uyu7q4u7e5t7O5uLOurLO0qrC1ub3Bur6+vL60urm4u7qysbS8u7q7s7Oyp6Smq6uioaCdmpudmpyXmpuenJygnZaclpuZnZ6io52UnJCNiY6OkZ6bnJWNh5KLmJiWmpybmJybnp6cmp6UjpiYmpSRmZeeoZWYmpKXlJWRlJqYk4+TnZaSi5F+enx/dWtsbmRvbWlxeG95amlhXWdhUUZEQTw5OTc2NDQ6ODQ2NTMzMjY1Nj05OTs7PT47Pj49Oz05OTs7Oz89QUNBQkFAPEBDQ0NFQjs4OUQ/P0BCPzsyV5uQkZCQh4WSjo2IjZCTlZGPjZSUm5STlpqRs7e4uLi+u7C1sri2tbbAw8G+w8LAvru+u7u8xMzEzNDLxsa/xcfLyNTLysjGv7u7vsS+xcjHxsTEw7izwbqgd0xKUUk9TVRiamluY19fWlxVU1p/mq23tKuupaSjp6SgoKWZqrSxvsG+urm6uLW0srG0tLO6wL7Av769u7u9vsDCt7a3tru7sru+ubi3u7a3tKyoqamrpqijnpOampyYkZKZl5GRmJqXnpiWk5acm5+elJOJiX6GiIyWlJiZkYmVkZeWlZmbmpaYl5idnpyhmJWZmZyYl5ybn56jnJ6WmJeTl5yZmZyUlp2UlpOJdnl6e3dua2lodlpmcnhzemdnXmRbUlhJRj87Nzg4NzYxNjk3NDQzMzM2NDY7ODo8Oz08OD0+PDo7PDs9Ozs+PkRBQURCQEBBQkNDREM9OTlCQD8/QD89MkyWmpaSk4yKmJCKi4yOkpKKiIaNkJiKj5CUl7O7tba/vb2xtrjBvby0uL/Bsbi3vsHFvbu8wsbJv8jOyMHEwcfKysbKxczIzcbIxb/DwMvNz8rGxMPEwsW9u76RZVZLQko9XlZYa2dbWllYVnCQsLGruLWzrKmjoa2prKetoKy1tL/Cvrm4vbawrausr7W0ur7Fv7u8urO5u7i5ubWtsLS9u7G/vLiytrmzubu0ra2orKyqqaeXnpualY2MmJSTi5WWlJyZl5WWmZKYn5mQiop+iYqKkY6Vl5OUn5mWkJSZmJmWmJOUm6GeoZiYmp2ZmZaenpibopqdnJuYmpuZlpeXlpyZlJyYfoB4eXZ1ZWZpamheam9ueXhjYmFgXlhXRkU4Ojg6OTc5NDQ5NzY2NTEyMzM0Ozo9Pzs9PTo6PTs8Pjo7Pz48QkBDQkJFQj0/Q0NDQ0RFQDk6QkFBQj5CQTVCkJeUlZmSj5qQjpKRjZSVi4qHjI2UiImPkpq2u7S8xsHEwr3BxcLAtLO9v6ywr7rDysPCvs3IxbfByMW/wcLIy8rCwsTJzM3Oz8zDx8bIycjIycfFycfIyL/GxragbEtZQVJye4BaUlBTa5++wLq9u7y6vKytpqm7urm3wLO1uLLAxrq3t8Gzsa2tqau1s7u2w7a2vbWxt762s7e4sLW2v7uwvbq0q7CxsbO8urOzrqutq62xnaOjoJqQjpiXlZCclpaYlpWSnJmTm5+clpGUjpWQiYyQlZOUm56YmZKSnJedlJmSk5aZmJ2VnJ6do5yVnZ+TnKKcnKCfnaOemJSVl5ebmpmgkH99cXRxb2NhZ3Zpamp0bnlsXmRbVWBZTEhDNjw5OTg4OjUzOjY2NDQxMzUyNTs6PD47Ozw9PDs8PTw7PD49P0E/RUFCQ0M+QEFARUVERUE7Nz5DQkI+Q0I4O4+akZaalJKUjZCUlI6VlI6Pi4yJk4uIkJObt8C6xsXEw8zCwcS9vrWvt7uvr7O6wMfFxMHMy8W2ucDCwsTHytHLwsPExsnFzNDNx8zJwsLHwsvLyMfMyc3FxcXEycCqjXhvjJmdU09xn8LSx8TBxMfBvL60sbCwwr6+wcbAv7i2w8K6urbAvrWyrKmvsri+tMC0tLi0t7nEua+8vrm+v8K/tbq2q6qsrq+wt768trSura2utaSlqKimmpycnZyeopydmZOQkp2VmKCdmJiVmZmZl46MlH2QkJefmZmYk5GToI6Nko+VjpCUlaKdnKSem56elpyjoKGipKOkop6amZubnJ2enIN9cn14cGdga2p3bGlmdW90Y11jVVdVU01HOjc7OTk3Nzo3NDg3ODQ1MjM0MjU7Ojk+Oj08Pz04Oz05OTk9PEBBQEVCQUJBQT9AP0RFREVAPDk+QkNCQENBOjSAoZeUmZiVkImUk5aTiZGMlJGOiJaKi5CXnMXLw8O8wMPHwbm9vbu4tre3rrK3uLzAwsDCx8bHurzAwsTHyMbSycHDw7+/vsTLyMrLyby8yMfJzcjDyMnJxcXBwcDCzrxzaoWZl1qRy8vNz8W2v7/AwLq7vbWzs8C/ub/DucC3u8G8uri7ub27srCvsKy5wri9ube1t7q9xb24xsjCwcLGwr28tamurrCwr7O6t7m2sK+tr7OppquprqannqSlo6OjoqCblZiekZecl5GRlZeZlZmRlJiSlYyYo5qcnp2FiZ+TfJKWlZKUlJennaCipJ+en56foaGkoqKjoaOinJ2fnqOhppl5enmAc3BmZWZja2Ria21vb19ZXVdWTlBKRjk5Ozk3Njc3NjM3ODk1NjEzNTI3PDs8QDs/PDw6ODo8OTk4Pj1APz9GP0JBQz89QT5ARENDQTw5PENBQ0RBQDozbKKdlZedlo+PmJiZmIiSjZGVkI+Vjo6TlpbKy7u5urnBu7q3vsG8vLu5sa61uri4u8S6vsC+vru8wMXBxsK+xsK5u8O6uLm8vsHHwca7ucjIw8XEwMPBwcDEwcK9vMLBmYCOmYh/0svEyNHBr729uLm7u763tLC5vrO8vrG5tbi7tryztbm2uba5t7GtusG6vMG/t77Ev8bDw8fHwrvAwr/Cv7iys7O1tLGut7S3tbSxrK2xp6Wlp7CtqJ+nq6ajqKWmpqCgn5SYmZSRkZWUl5OYl5qhnZ6hnKGdoaWglpSbkZeXmJqTnpmZqaSlpKWdoqCanqCkoqOcoqGjoJ6cnp6ppaiVfXuDeG5mYWViYWNjZGpjZ2NbWlpdWVFPRT07OTo7Nzc5OTY0OTk6NTMxNDUyNzo7OkA9Pzw8OTc3Ozo5Ojw+QD8+RDxCQURAPz49QkRCQkI+OjlCP0FCPT44NVmfnJiTmZaRlZiYmpeQkZCQk5GTlJKSkpSUxce4tbq5wrm5vMPFwri7ubGxtry6tbnAu7u5tre0tLW/u72/ub66urTAuLW3sq66u7fAt7zKz8C7v8C8u8S9usDEv729tr7IpJRmj83Ev8DJv7DBv7q3u765tbi0uLy0vbi1tLCzvLG3tri/tr25vb65t7q+u7/Axb29y8PGw8TAw762ubq2v7i7v7y4trOyq7CwsrWzs66sq6emnqeurauiqKumpqqjp6iqo5+Ym52bmpicnJiXnJuhpZ2anqGhoKGmoJqbnJiboJ+dnJ+coKiho6SknaKfmqKgop+el6Shop+dmpieqKWhi3x5iH1xZGFiY2hqZ2dqZWpeVlZUWU9TTEY4PzY7Ojc3OTs2NTo7PDYzMTM0MTc7OTg/PT47PDs3Njk5ODo7PUA/PkA9PT9CPjxAQUNDQT9DPTo2PEBBQDw9ODdJlJibj5OUkZWYlZGWkpWRkJGUlZSTk5OYlcHCwLq8ub62uL7EwMKxvbqytLO4vLW3vMC8vbS0sbC1t7W7wbi+ub+8vLe0t6+ut7W5v7vB1Y26v7vDtbrHt7a5u7y4ubW6xMmmQovJv7+7wb65xr3Cv7zFuLa3tLi2tru7uLa0t7q1s7i8vbm/ucPAwLu5vLu+vcjEvcfEw7rAvb62sra4srm0usLCureysaysq62yr7Kur6ijpJ6rrKyqpKakpKiqoqemraihoaGmn6Oiop6bnKKfoKOdnJuhn6KgpKCem5eZn6GdnZ6eoaWkoaKioZ6ho5yinqCZnZijn52eoJqZoKKmnYR6g4F5cW1lZWZwamVsaFhZT0tLS1JKTEhEOT44PTs2Ojs5Njc8ODk4NjA0MzE3OTk7Pz0+Ojw6ODg5PDg6Ozs7PD1BPj09Q0E8P0NDREA/Pzw6Nz5CREE/QDg4P4mYmoyMkI+Tl5WMkpCakpGXmJaUlJKQmZTDvsbBwby8uLi6v7a8scK2tLyxtLa4s7q9v768sq2vrLGwt7y3u73BxLm3t7a1ubm6u7+8z8R4qcy9x7e5uK22tLe5s7WyusXKmkaAyr+/vr28v8jDxcW+xri1srK9uLi4vrq6uby6urS3u7q5v7zEwL+5uri/ubvFxr3Fw8Kyur27sa+2uLO3s7q+wLm2rLGrrqmqqa2qqq6mpKWnrq2ppaOio6GkpaWmoqato6Klo5+ho6Gcmpyhn6CloaCenZygnaWgnpeVmZ2fn52gn6KmpaCknpybn6Ofn5mcmZ2epJyWnKOcnqGcppZ+f4Z8a25xZ3FrdGZibmBcVEhLS0RKQ0NHPzo7OD48Nzs7OTc4Ozc8PDYyNzUxNjk8PD08QTs8Ojs6OT45Ojs9PUA+RD89PkRAPz9BRkQ/Pzw9OTc/QUNCQEI5Ojl3nJiLh4uQkpOWjY+TmpOQnZiSkY2PjpiSvbfHvsO+vbu+vL22uri9ure9s7OwuLi1uby7wLeqraSusLi7sr2+u8S2tbi1t7++xLzCxNeudIG7yM/CwLiutbW7vbe5sb7Dx45Me83Dwr++vbzHzMfHxMe9tbW2wb27u7/CusDCv7y2t729vcHBwL+8ube8wru3v8W7wr++tbe8vK+vt7awtLO6ubq7r6mtq62rrKaqoqeuqKWqra2vp6Sgn6ajnqKjqKOjq6Oiop6dm5ublJaZnJyfpZ6fnpmYnpejoJyXmZqZmqOjop6jo6egpqCbnaCjnp2WoJmcoKCblJegn6WcmKKQgYaAcmZsam51b3hjaGJcY1FLVUhFRUNHQzw7OTg9Ojc6PTo4OTs3PD01MzY1MDY4OTo8O0A9PDo+PDk+OTk9Pjs/PkM8Pz5APz4/P0ZEQEE/Pjo3P0BDQz9APTo4ZqGYj4uNlZKVlY6PlpmVl5uVjoyMjY+bk7m2wbS/vLm8w8C+wLq1trKywLmvsry8sLe7tru8qqqjsLm9vLK8vrzFuLG4ubzGycrCx8nSmXF0rtHRzMrEtbq/xMi+vrS+wMB7WXPLxsK+wby/w8zKx8XGwLm9vMS/v7/CyL3Hx8XFvLrEv7vBv7rAvLu7wMS9t7nCub69t7S2uLqur7WxsLCytre0t6yurKqsrKuoq6Gms6qlra+trKippaOkp5+io6Onoaeiop6cnZyamYyQlpeZnaKZnpuVkp2UoaCdmZ6fmJimpqKfoqKmoqeloqCko6GbnaCbnKKfl5WVnp6kmpafiYGDgXRvbGx0bGxuX2NfYWJOSE4/RUA/REM7Ozo6Ozo4Ozw6OTw+Ojo+NDQ1NTE5OTo5PDtAPD89PTw4PDs6PDs7Pz5DPkI+QD89Pz9FRUJBQj87Nj9CRUQ9QUE6OlmfmJOSlZqVmpOQlpeclZuZlpSVkZKTnZm2uLaxuru6vsG5uca7trWypb69tLbBv66zvbS4wbGwsbS7xdDCur68xL63vMC/yc/HyMrKwYZydKbMzMvNysbCw8vOwby4vLqxcmlmu8jEwMC/xMDKycPDxMO5w769ub+8wsbCyc7Hxr66xr26v7m3wLm5vsDCvrW0vLi2u7CvsrK1r7Cvrqyus7CzsrirsbKxqrCrq6yrrLatqKyusqarrKmpoaWgpaakrKSmoaChnqGgnaCMlJeTm5+mmZ6emZOYnZ+gnp2eopuYp62ooqSgoKKqpqmhqKGlm6CgnZ2jn5SYmKKdp6Gfm4J7eoh7bW14fGBxY1tfYF9UST5DRUlCQz5DOz42OTo7Ozs7Ozs7PT05PTU2NjIxODo5Ozs6QTs/PDw+Nzs8Ozw9PTw9Pz5BQUE/P0FCQUVDQkRAPDY+Q0RFPkJEPztTmZuZmJ6dmqCalpyZn5KdlZ2boJWWlJqYur20sLu8wcTCv8XGura5sqO7vbS3xLuwtbq2ucS4tLy3u7ur2sO+tr7Avr66ppypsrbDwKV5dnmcxMbLyMHDwMDJysG/u7mxoYF4ca7IxcS/wMG/y8fCwMjAusK7urO6usG+wMrOysS9tby8ub+5ubW1s7/Avre0s7W4rbeqr7CwsrGvq6+nr7ausrG5rra2uLSzsLGttrS6sa6srranrLKsraSjoaenqLKrqqWkp6elpaCml5ujn6SmraKeo6KanaWiop+foaWenrC0sKSlnp+kqaevp6mgq6CiopqipJ2anqGmp6+psZWCe32Bem5zeHRocF5cX11aUkZFRE1JQUQ9SDs7NTk7Ojw8Ojs7Oz0/Oj01NDUxMjc4ODs8O0I8Pz46OzY6PTo7Pj0/QD87QUFBPj4/QkBBQkJFPjo1OkFCST9AQkA7TJqdnZ6fnZienZmampySoJWbnp+blZGRl8W+urbDvMbCvr/Ixbe1uLe2ubu0r7e3srWzt7m8u7a7u8S3ba3Ovba5wL2rfW5obm1ygZWYc3h9mL2/xsC5wLy+xcS9vbixr5yVg4icysLDvL2/v8PDvr/HvLy/tLSutbW8vr/OzcvCt7K4t7e9ubuxtrLIwLu2tLGxt6yzqbCtrbS3r6uuqrG1r7Gvt7O6usC/tre2sru6wLWyrbO3rLC6r7KloqWrrK+5s7KosK+xr6qiqKGkraitrLOun6inpqWmq6Sknqaqo6ayuLOrpZyfp6anrquqpbClpaWbpKOYn6exrLW4sLKOhHl/fHdtdXtxb2pcYGBaU1BBRklHS0BFQ0k8PTY7OTk8Ozo6Ozo9Pzw9NTU2MTM2OTg8QT5AOz1AOzs5PD04Oj08QD46Oj49Pj09PkBCQkJBRD03NDU9REc9Q0I/PEWUnqCgoJyXmpiYlZmdmZ2fm52bnJaRj5LDwMK9wrzEvLy7xbu3s7e2tru7s6CWtayvsbS0tLa4ucDNsnaBs722tcKlh2laXmBNUltbbnR3gqG4uMK6s7u3u72/uru7rqOenY6Zf7/Ew768v7u7uLbBwrW/urWur62wvcC5z8rJw7GwtbS0vbq+urq7ysO7uravsL2xuK+ys7C3vbaur66wt7CsrLK2vbzEwrq9t7bAv8G3tbC2srGzurGxr6err6u2v7e1qbqztbmxp6uop7ausrG1uaisrK+qr7CqqKessayytr20saykqKuoqKusq6i2qaaonqadmKOuvLG7wbSmiYF7gnpzdnZ3b3FhX2ZdW1VKPT8/R0c9R0NDOTo1Ozk5Pjw8OTo8Pj4+Pjg4MzE1Nzg5Pj9BPzs6Pz08Oz09OTs8OTs6Nzs+PT1DQT8/QUJEQkE8ODU4PUNGPUREPzw/iZ2en52Xl5WUk5aZnpubmpuYlJ2Uio6Owb7Dwr6+vrm2usCxtbGzt7fCtbOrrbOoqa61r620trnCyaeFeIqgr7WdamZnVllgSUlNUFRsd4emsLe+ubK1sry5vLa5vrWVoKudqHSuycTAvb+5s66yvLquu7Szpquorbq+uMvCv76sq7Cvs7q3ub67wMXBu7y3sLXEtb+0uLu0u8PCs7a2sbisqaWrsr23v7+7u7exvL28trGvq6uprbOvsLCrsLSpuMC2sqm0tbC3tq2spqu7s660uMKwsbG1sbK1saywsri4ubi+tLGzrqyxramvrqqyuK6trainoZ6ptr+4ur+wlol9gHxxdHd0d3JsX2NhXF5PSUI/PUlERk1EQDc3NTs6OT48PDk4PT47PT86ODMyNTc2OD8/Qj86OD4+PTw5PDk7Ozo8Ozs6PEA+QkI9QEE/QkI/PDs3OjxBRD5CQz8+QYqgm6GdlJiVlZKYmpyWm5WblY2bj4SIhru0vb+7vLm3s7y8rLOytLS2wLXAr7Kzqqqxt62pubO3v8WqiHx2jKGYYFRDWFVHYWpWT0VKYY6hrK+2urW0sqy8ubi1uMG9i5qzpqp0psvCv7m6ta6lrLOxprCtqJ2gn6WttrXCt7a0paiqqLC2s7K6tbu7u7W4trC2xLK+vL+8ubrFybq9vraxp6SeoamxrrW5trKxq7S2trGopp6gmaWmpKynq6y2qa+6sa2kpq2lq7GrrKmtuLawsrjBtrGxtbGvu7ayt7W1sry1urKwsbKutLKqrq2nuLWyta2uqqiosrq9wLa0qY6Ce393cHxvdnNuY15nWV1dU09OQT9KQ0FKSkA2NjU7Nzg+Ojs4Nz4+PDs/OjkzMjc1NzU8PD48PDg+Pjw8OTk5Ozs7Pjs7OTw+P0E9PEJAPz9CQD47Njc6QERBQ0E/QUKJoJ2loJSWmJiVnqCcl5uYmpGMmYmDhoS1r7S7u7S1sLG2uq6wtLOvtbq1urC1s7KttrqvrbyzuLi/tJCCeYiQb09KP2RZQk53gJRqTkFcgrC1s7WytK+su7q4trm/xnaErKCcZam/uLWysa2tn6Smp52kpZyWmZmZn6muuayrq5+lqKSrrq+nsKuvsbGtsa6usLmwtLy+uLm4x8W8vLu4qaKcmJufp6assq6zqaapqq6popqXl5GcmpijnqKir6ekrKaompqemqGnp6anqa+2squ0trCqsK+xqbm2sbWxrqy3s7avrquuq7S1ra+rq7GtsbKoraurs7W3ur2wq6GLeoJ5cndzbXVqbF1ca1VeXFBOSERHTUJHTkY4NjY1OjU6Pjg7OTc8PTo7PTo5MjM2Nzc3Pjs9Pjo6Pz48PDw6Ojs5Oz47PTk8Pj1CPDtAP0A/QT8+OjU1OkBFQkRBQEJBiJ+ipqGYm56dmqWpmJudmpmUjJmHhoeGrq2uuLmxsqiur7iyq7CwqrK1ubm+tbK4tLm6trm7tbWzt7aVjIiEfFhGQU+HWUpKWHeNgWNBU6O5s7SysLGtsLm4tru3u7yQorGrpHOssKmrraujqKGdnZ6Xl6CVkpaXj5ifqK6ko6Sgoqaio6mpoaanpaqtp6ynqKesq6yyu7SztLm6trK2ramgmpaWm52fq6yqr6Oko6GpoJuTjo+QlJKSmZaanaSloJ+ep5iVkpSZnqSjoaWqrK2iqaqppKmtrqW0sa6xraqprq+wraWmqqSos66trKmmpqmrpqqnq7Ksr7Oxq6mWgX+Bd3J5aHV0bmVVYWRXXVJPTUlASVNFTkM9ODg3NTo3PD46Ozw4OTw7Ozw7ODI0ODk3ODs7PDs4PD0+Oz08Ojk8Ojs9PTw6OkA9PDw7QD5CQEE/Pjk1ODs8RkFDRD9BQYijpqKjnqCfp6Coqpufm5yZmI6Xi42PjKqpqLGvsK2lp6ayr6mmq6CvsLu1vby4wMG+vLy8ua6sr7K8qZiZlGhNP1J4cVBJSUtnnIBaRVOvu7Gss6+urK22trK0ta6ppp6am52fpqieoKipn6GnlpuWl46dk4+Qlo2Xm6SooKCioqGlpZyjo6CepaCkrKWmqKSio6OrrLOuqa6urqeqraisoZyamJmYm6qoq6ufpqKbo5yVkIyPkJCTkJaVlpifnp6amaaXk4+Slp2ioKWipqSnoKKko6Ghq6uksq2qrKyno6yuraufoaKkpK+srKmmo6KqpKqqpKmrpqmsq6ahiHiDfHZ/emN3bW5dUWlVUE9HUE1NQ1BSQD47PjQ5OjU7OT07Ojk9OTk8Ozw8OzkzNjk5Njo7Pz06ODs6Pjw6PDs5Oz07PDw9PjxAPT88ODtAQEE/Pz45NDk8N0FDQkQ9QEOOqqSjoqGinaulpqimoZ6dmZ2PmJWTkJWnpKGmqKmlpKChp6uhnKKbp6u1sry9wMLCwL7AuLSnpKyovcKqpb1oRFKdglFXSUpgSlWNYWRjga61qrK0rqqrr7Cys62lnZGXk4+XoJ+ioJyjpJ+eqJSblpaMl5GNkJeTmJ2jqp+fn6Cjpaicn6ChnKKfo6ionKehoKSfrKisrKCpq6agpKimrKOenp6al5qrpqqxo6WonqCclZOQj5GRmZCWlZiXn5icmZukmZeUlZqdoJ2nqKWgo6Kho56doKmqpa6upqipoaKqrqqnoaCio6msq6eppqShqaKlqaalpKKmpKijkn58f3V2fW5se2RpVlJkTkpIR09TTktOSDxFQDwyQDg1OTs+Ozk5Ozg6PDs7Ozk5NDg7ODc7Oz48Ojk8Oj07Ozw9OTw8PD49PUE+QEJAPTc6P0FCQEA/ODU1PDpAQ0BEPkFGlq6koqWeo6KpqKipqqWmnp2imJiZmZWbop6bnqOioKOgoZqgmJeXlqGorK62t7q5ure3u66ooKGpoKrGv8qgUEFznXZPbUpLY2Z0c2BbYHGQsa+us7Wqpqyso5uZlI2RlZaYmJyfoqKcnaSemqSXl5eWkJKRkpOal5ugpKqeoaGepqerop+gp5+dn6SnqZ6jpp+qnaqtqq6nqLClo6Smp6ymoqWimpmer6iusqumq6qgm5iYmJWTlpqTlZWalpuXl5ihnpyclpuhm56ao6eln6GioqOdm6Gmp6aoraOppZ6kp6mkpaWhpaSsrKmmq6eioKSjpKenoaCgpaKmoIl7gH13eXxleXpgYlNVYUhJSktTVEpTUU05P0E2Nz02NTs6PDw5Ozs4Ojw9Ojs4NjU3OjY5Pj0+PDk5PTk9PTw+PTs7PDo+PTw/Pz9APT03Oj5AQEA/Pzg2NT08PkFCRkBAR6CupKaroaOqrK6tp6ypqKCipp6bm56aoJyalZmfn5uen56WlJOXk5KcnqSorq2sq6uvqq+pnpeepZykxsaMV1NKZaRaZX1vclxRa2NbZWBea4+0sLC4rKahnJ2alJeamZCOkZWRjI6Nk5minJejmZqXmJmUmZiWnZufpaapoKaknqeurqumorGjmqSmpqqioaqiqaSosquxsqu5qKarp6urqaysp6Ggo7GusrG0qrKuo5mcnZ6hmJubmpeZm5SWm5aZnKWhoJqjoZqdmZ+kop6gn6KmnZulpqWkpaijp6OepqOinqaloqWlqKykpq2noJ2eoJ6gpaGenqWgppmBe4F8dnZzaYJsZlxTWlpNUUtPT1ZNU01CNz5DNzg9NzY6PDw9Ojw5ODo7PDo7OTc2Oj01OTw7QD03ODs3PTs9PT06Ozw4Pj09QD5BPj4+ODg8P0BAPT43NTg9Pj1BQEZAQUihqqCrq6GkqquwramtqaelpaWkoKGfnqWXl5SYmZ6YnJ2blo+VmZKRnJihnaqip6Cep6Gln5ySm6Kan6qjjHlVaXF2dXBjdnZYWGNgY2haWVdnra6sr6efnqKglpCTm6CbmZeSk5+coaObnpuWn5qfl5uinqWhnqSfpKitramsqaSstLe2sKe0rKKtraOvpaSmoamorrWzsr22vrCssa6tqaq0sbCoq6iztrizuK2ytKSgnaWgrKGhoqGgmpiWlZ+bm5iloaCeo6Ggn5ucpaCfnZyhqJ+fp6meoaOkoKagnqehn5ymo5+ipaOooKmrpZ+dnZudmqainpyjnqeQgYKAfXh2anh1Xm1bUmFJUlVIRlVXSkNNRz1LSThFPDc3Oz49PDo8OTg6Ojs6PDk2Njo8Nzs+PT8+OTc9OT47PEA8OkA6OkA/O0A+QUA9PDk3Oj5APzo+NzU4PT0/QUBEQEJGnKueqamipamprqimqqWmp6aoqqGlpKOmkpOVmJacmpqcmpWTmZuNk5+ZqJ2un6eenKGdnpqZkpiem6GhoKOAb4JwYGNYTFtSWk1MUFhSSE1NR5isqqmloJ+akpGUmJiWlpaMiIuOlZ2dnZyel56Zpp+gqKWxqqeuo6uutrC1srGutri9v7qttbSwt7CutKmmpKWsqbmztbvDvMPBtrq2q66xubi8r7OwtcK8t76zs7WirKKpqbKpq6inqJqZnpqqp6CZp6Cfn6iopaSenaqiop6bn6igpKetmZ+jnp6nnqCmnpycoqGbo6KhnZympaWkn6KZnJukn6CboJyjiYWFfnZybWl3bWluXFhcQ1dOSkdNSENGTj0+TD40PDk2Oj0/PDs6Ojg4PDk6Ozs8NTQ6PDg5Pj4/Pjg4Pzk8Oz0/Oz1BPTo/PjxAPj8+Pz08Njs/QT07Pzg1ODw8QERCREFCQ5WqoKapo6mqqKmjoamgpqinrK6lqaWpqpSSl5mUmpqanJiYmZyamJmqoLGit6Swpp+enZ2XmJWZnpuco56dimJXXmVgV01RRz0/QENDPz5CUXipramqpp+en6KjnZ6dmp2blJOVlJ6emJSFnZqgmqukq7KwubKysbKxur28vLm2uMO+v8K/trq7wMS5vbusr6exrbHCtrjCxsDIysDJv7C5ub25wr64tLvGxL3DvLezqrOtqrO0r7Ouqq+jnayotrGto7CmoaOwsa6wpKWvo6GgmqGmoaSqqpmdoJmao6CmqKGcnqKemaSenpiYo6OhpJ6mmpuipJ6fm5ubnIeGgXx0cmtsdXJxaFdcUUZVSERKUEk/RUI0Rkg5NTw+Nzs8Pjw8Ojo4OTw4OTs4Ojo4Ozw3Oz49Pj02OEA5Ozs9QDw9QDk3PDw7Pj0+PUI+Pjc6QUA+PD45NTg9Oz1DQEFDQkGRqqGlqqelqqimn6KnnKasp7Gyq62jqayVkpWalJecoqGbnqCinJ+psqu7sr+rr6ylnqCgnJyYmp+gmqCflXxfXmVgUUdFPEM+Rjw+OTZOfqqzp6OjoqCepaumnpeclJGanpmVjIqGiIZ4bYigpKKrrLS8tsO9vrO7wcPCxcC/wsbFxcPIwsDFx83QyMvDsre1vrK+xbu+zM3FzMzM0se+v8DDvsfGwrfDysnDwce/urS6u7W7t7C2sqq6sq68uL+7uqu4rauquLu1vK6uuKOmo56mpaKjqaaZm5+Zmp2nqqegoaGkmJSjlpSZkZydn6Sep5+en6KdmJmUmJSIhX56cmtkaW94a2VaXEZMTUVEVE1FQ0U3Oj87NTQ5OTc5Pj87PDs7OD48Njo9OTw9OTw9Ojs9Pj4+NztBOj45PT45PT44Nzs6Ojs/Pj1CPj83OkFAPTw9ODY2PDo8QT9BQUE+kqugp66ooqulpKKipaGlqquwsq2upKmmlJWWmpaUm6SmnaGqp6KrrLy8v8PBsrK4p6Ghq6qhnJ6hoZ2bmn1zamFXT0U+SVp8b2JCPVyOrqygmZubnp6Zl5eXko2Pl5eUj42QjIKDgndycW1wj6atrrS5xbvNx8u+wczNzczIyNDMzMzHysXGzNDS1c7Tyb3Av8O7xsXIxdHTzdPQ09PMysHGxsbKyM/AydHNx8bIxsK8xMG+v7+2vrOtv8DDw8fEx8Svv7myuL3EwsK6vLy1rqenraigoqmlmpagmpmdqKupo6SknpePm4uQmYmVmJugn6OdnZeempOTi5WPhYF5dHNlYmdyb2deWlpET01ERVBJRENBNTU1ODlCPTY4OkE+Ozs+PDk+PTc6PTk6PDg8PDw7Pz8+PD0+Qzw7OkA9Ojs6Ojg4ODk7QT88QD8+OTtBQTs7Pjc4Njo8PkI+Q0FAPpOvn6ivpqiro6KloKampKuoq62qrqKqo5Kcl5ebmJuirJ2frqalsarFxszOzb+wwaikqKytqqCdo56cnZVqZl1USURBP0uGnqWZhKCyraOenJ+amJeUkpSWkZCPjIeEhIiGg4CBgYB5cXJvbHmktrq5vsvB09HTyM3O0dPR0tDQ0dHNzs/Qxc3U1djR183Gx8nMw8XKz8rT19HX0tXW09TIzMbMzcnTzc7TzcbJysrCxszHycnGv8Ozs8jFy8vLz8fKv76/vcHHxczMycnAw8Cur7OonqKqo5qTnpyYnqaprKSlppaXipWFkZSHkpKSmZualpiQm5aQjIaRi4B7cnV2Z2NndmplVlhSRE5GQElRQz5CPToyMkE8RTw3OTxCPTs9Pzs7Pj05Oj48Oz44Ojk5Oj86Pj1APkA8Pjs+Ozk9PTw5Njo6Pj08PEA/Pjk6QEE6OT44Ojo6Oz4+PEE/QT6QrKKiqaanqKSfop2qqKOso6OnpqyiqZ+To5iWn56dpK6bn7CrqKyxyc3U18/Gu8esrbO3rK6jnqOinaGcYlRMSkRDP0NSr9G9sq+mnJycoKShnZqUk5WUiX14cWtlYmhycHJ7hYqAdXBucXNwhbPDvsXR0NfW1dLWzdTW1tTT0dLT1NLP0sPQ09bY1dXSy8rO0cvGzdLK0tXW2dbY09bYzdLKz9HMz9HM09DAycjLxMzNzM/PxcfItsDLwNLNzNDGysnAxMPIzs3Q0c/NysjNuLe7qJ+lq6efmJ6jnp2qpa2pqKiSlYiQhIyRho2MiJOVmZCWjJiSj4aHjIR9eHN2cGNgZXJjXVJcSktHQUVJSj47QTg+NTU4Njs4Njo8QD07Pjw7OUA7OTo8Ozs8Nz09Ozo+Oz08Pjw/Ojo8Ozs5Oz89OTU7PD48PD0/Pz46O0BCOzk/OTg7PT0+PzxBQEQ8hqugnKegp6Oim6CbqaSlqaCfoaGmn6ifmKSimqmmoqarmqOwsamotdDU19rSx8bLtLXBxbG1qKGkpaCioVpJQEFEQUZRdrKvppqUl5+cmqCgnpucmpWJd2ljYV9fX19eX19dYWx1c3Bwb2xxcXWSxMjH1NbX19bT1tDV1NnU1M7P1dTU0dHM0c3T19bT1dDP0tPRydPRyNDY19jR2NLX2dTWzM/Pyc3Sy87RwMbEycfPztHR0sjMzcDLzcbUz8zPyMTLx8fIzMvU1NHVz9LM08K5xbGlqLWup5uoq6Wdsqiws62sk4+TjoiLjoOPi4SQjpmNk4+Zj4+ChYx8enFzdG1iY2ltX1ZRYEpKQ0VDUk1APD40Mzo9NTI4NTU8PEA8Ozw6OTpAOjg7Oj46PTg+Ojo8QD08OTs9Pzk6Pz07PTw9PTo2PD0/QD08PT0+OjxAQjs5PDc0Oj48P0A9RkFEPYKknKClnaWlo5mcnaSeo6OfnZ+doJqnnpyhqZ+vraqqq52lrreoq7fY1NXZ2dHO0L+8zMm2vq6mqqiho6xmQzg9PkRYgqqon5eVl5manJ+dmJyckn1xZWNiX19hX15hYF9gYF9gZW1wcG5rb3J2d5zMwdPV09jY1tnR0tLXz9POy9LN1dTRys/M09bS0dXNz9XV0cXR1MrQ1NXWztPR2NfX18vIzsTJz8zKzMDJwcnKzs7Py9DOzszPz8jM0NDLzsvDysfJzcvM0tPO1NLR0NDKvci5sK67ubWrtrCtqLits767sZqOoJSRjo2IjpCFkY2ZjJGRlY6RgIWJenZvcG9rYWRucGFYXFtKRkZETVhFO0A9MzM8PDg3ODU1Oz5APTk8PDg8Pjk8QDtAOj04Pjk4Oj88PTg7PkI6Oj08OkE9PTw6Nj09P0A9PDs9Pjg7QEE9Ojw4ODs+PD4+OkVCRT6Bn5mlp6Cfo6eam5+cl56eoZqdmpyappufo6efuLa1taykrK6+tLDA2NLX2tzWzs3Kw9LPwcGxqaytqaSxekhGQjtXjaGblZOWm56enpyTlpeUiGteXl5hZGJgYGFhYGBgXmBfXlxibXJvb3N0dXZ5pL/M1dHW09PY1s7O08vOzsXOytLSz8fOzc3Uy87SzcvX1tDM0dTLy9DS08rO0dXS1dXKwMrBxs3CycrDzcTGycvLz8rOzdDO1MzGydDNycfLxcfCxsrMzdDSx9DPzs7M0MXHwbi5vcPDvcO5s7K+sbvDxLaqmKWhmJaSlZWSi5SNmpGUlI+PlYKJhnlxcmttaGBgcWhZWGhWTUdMSVBRQjtEPzs2ODo4Ojs1Nz09QDs6PD05PD05PT06Pjo8Nzs9OTtAPD47Pj5BPDk9Pj1CPTs3NzY/PDw/PDw7PDw4O0FAPDo8OTs7Ozw9QTpFQUU+hJ6bqK2epKSqnJ6fmJKXm5+am56ZmaKVoamppcTCwb+7tbKxx8K4ytXW2drb2MzMz8jW1cTCta+0qKCtl3hsb3B3j5qNjJeVkJORkZWWlZCLe2ViYmJgXV5hY2JgX2BgYWFfX11bXWdycnByc3Btcnmlx9POzNDP09TJxMjIxca/w8XPzsfFx83K0cjLzs3G0dLQzszUysfKzs/Hx8/Sy9DPxbrEv8bKvcPIys7Fw8fAx83IxMzKzM/IxMTQycbCxsnFv8HHzMvMz8LLzMnHy9DFxce7x8PJycLPwb28v7DByce6vaqxsqelnaKcmJCbkKOZl5mRlZiJj4J4b3Vka2BeZnFhW1dgR0hIR0lNVEc/Sj02NDM1NT09NDg9PT06Oz08OTo7OT89OTw7PDg6PDo6QD1APD09Pjw6Qz48Pz04ODk6QD4/Pjw7Ozs7ODo+Pzw7Ojc5PD49Oz49RkFDPYOgm6qupa6qq5qdoJeUjpedmpmgmpqcm6WysazJzcrIxL68uczMxtDV1dja29jQyc/P0dPIwre7u62ktn5ngoWiqpONjZaPhYODg4F9hIR+c2BbXl1eYF5gY2RjX11dXl9gYF9bWlxgbHJxbm9rbG9vfbnRy8LCz8vNxLq/w7q7urm+yMbCw8DDyMrJyMrIwcXMxsjKzcnEwcrJwcHL0MXLyL+5wbzGx77Axs/LxMDDu8nHybzJx8XKwb7Cy8bFxL7Gvb3Bw8XMxca8wMnDxcfSxMHJv8rKxsjG0cPDxsOuxMvHw8q3v7y6tKmspKWYn5iso6Gmm6Ogm5V8d3N1ZmpbYW5tWlxYUkRMR0JHRUxERlNANTQzMzVAPTM6PDw7OTw8PDg7PTtBPTo8Ojs3Oz05Oz07PTs6OD4+PEI+Oz88OTk7Pz07QD48Ozk5OTk6Oz06PDo2OTw+PDs+O0NCRD5/pZypsqm0rrCdnp6YnImUm5man6Kfmp2ov7i8ys/RzMfCw8bNzs7M1c/V2djZz8vSzc3OyMG1w76ysLZsXnl8n5GKkpaGeoCFhX91eHVycF9bW11gYGJkZGRlZGBcXF5dXl5gW1laXGJvcm5raWtwb3OPyLuYwMzAxsGwtrmxsbOxsMG7u7y6uMHBwcS+vbm9v7nEysXGwr3GwLe7w8m/wcm7tru6xsO/vMLOw8a+vrXBvcO7vce8w7q0vcbEwsO3wLa2vr+7zMO9trrIu7++y8PBxsPGycfJxtDGwszHssfJw87NwcXDv72yt7Cyp6ioubClrbCqrayUend4a2VoYGhvZFZeWUpGSkZIS0FGQkZKQTk6NjU4ODUzOzo7PDk8PDs5Ozk6QD46Ojw6Nzo7Nzo7Oz88OjxAPUA/PT8/Oz07O0A8Pj4+Ojk5ODk3ODo8PDw7OTo8Pjs7PjpAQEU+fqygrLWqt7SyoZ6fl5qNlJaan52mop2et8XCxMjO0srKysfNzc7RyNDG1dTV183KzsXJxcfBusW9rK6mYGN1gZKLiIuEeH+Ghn99g3t0dGNcXF1eYGBiY2JiZGViXVxbXF5cXl1aW1xeaHNxbWdnbm9yeZuOn8TDusC4rbCwpqmtq6W3s7W0s7O0u7a9srewtK6yu8K8wcS8v7q0srq+wLjIuLS8tsHCvbi9x8HEu7WvsrW6v7TFuLu1rLm9vsC9sbu2sLe6s8a8t6+7v7W3tcW8v8PGwMTFxsfMxcDGxrvHy8DPycfDxsHDt8O9vba5vse/rLW7tbe2jnl0eGdnZWJrbl5WXmBGS0hISkZCREFFRj89OjU2NjYzMzs6Oz06Ozs6Oz44PEE9PDo7ODc5OTk7PDo+Ozk+Pz1APz5CQD1AOjo+Oz89PTk6Ojo4NTY7PT48PDo7OT49OT86PEBAPIi3pauzsby8sa2foJmUlJiXnqujr6qnpMbLzcjFyM3M0MvNyMnIysnKxNDN0s/NxcfBxcG/urjJt6uwmVtnb4mOhoiJenh+hoZ2d4F8c2hdXV1dX2BfYGRhXmNlY19eXFteXF1eWltbXV9scG5pZmptbnN7ir+/uLi0r6qrpp2hqKadqaqxraqsqbSttrCzqa6nrLO7urbDubq5sKu0ubu0wrmvwLG+vLu2vMi5w7etqqiwssC2uL2wsaixs7W7vKyutqautq67srGqubCuu668uLzAwL66w7/Gw8XAvMbCyMu4xcfFv8fEw7rExsK7xsnMy7O5wr27s4l0dndraWBibGlZV1dbQUxLTUpFQUNAR0E7Ojo5OTY4NTQ6Ojk7PD07Ojs+ODtAPD05Ojc5Pjk7PDo4Ozs6Pj45QT0/QD87Pjo7PDo9PDw4OTg5NzY4PDw9Ozw6Ojs+PTs/Ozs+QDyKwKuouLe5w62zqZ2ZlJaZoZymsLWxt6bFztLLw8XBxM/HzcHCxr/ExMPDysLJyr/AvMG6s7W1w66qsJJbaX6SiI6Pe3h9iYV6e4SAd25eXVxcXV9gX19kY2JjZGJgX15aW1paXVpaWlpcZW5vaGZnaWtucoStubC1raSjpaWZn6OfmJqkqq2kqKKrqqyrsKOmn6qttbaxvbivt6+orri0tLy4s7ywuLm2srzBssGvpqmjq7GztKi9qquoq62utbSmqK2hpK+psqaoqK6lqLessbO3urq7sry+vr/Fv7XCwcfIt7/AxbfEw8C7v8TCvsTIzMq/v8TAwKmHc3RzamlcYW9kV1ZYUEhaUlNLRkZFPj9AOjc4OTc3NjQzNzo5OTo8Ozs8PDc7PTs7Ozw4OT44PTs8Njo9Oz89N0E+P0A/Ojw8Oj05Ojs6Nzc3ODg3OTw7PDs5Ozo8OTc5Pjw+P0E7jMKvrry3ucSwtrCbmZWcmKqpsLGztb2vxdDPzcPHubnLwsu+u8m2vcO+usq3wcPBtLa8trGvtbytqauSY22Ig4eLgHp9f354dH58c3dlX11cXF5fYF5fY2NhYmBgX15dXFpYWVtbWVhaXF9ma2ZkZmVoa29yhamlq6Ocmp+jk5ujmZaPoKGoo6OfpaWnpq6gnZukpqyysLe3p7CsqKq0q7S6sba2rra6s7C7urG3paCkoKexqKypuqqlpqeop7OtoKinn5ykpqyfn6ekoKGxra2ssrWztLG1vba7wcCyu77DwbK5ucKzwL3Atbi8vb68wsfEw8S/wMSghHhxbGJmYGtvYFVZX0hOaE9USEZLRjw9QD06Ozs4MjY1MzY5OTk7OTo6PDo3PD88PDs8ODg8OTw6Ozc4Ojo8OTg+Oj89OTg8Ojs+OTc3NzY3ODg2NjY7Ojo7OTo7PDg1OTw6Pj5AO43Itba9uLrAur21oJ6UnaGmurars7O7s8TPycvCxri3x8DMv7jKt7vFuLPFuLO/wKy1vLKspq+0raGjkmlyhoWGgHx4dXNvbWppaXBpX2BdXFxcXl9fYWNiYGBgYF5cW1xcWFlYWFhWWFtdX2RjY2ZnZ2drbW6Hnaidk5OXnpSZoJaUi5ygoaacn5+jpaOnnpuinJ+rsK2xtaSpqqqsrKW0uK23sKyzta+ztq+xqp+en6SisqWmqrmtoqamoKitq5mgoJ6ZnZ+lmpqjnJyesKmsqKqrrK2ws7mvuLm6sLa8u7qss7O5s720t7GxtrW/tb3AvcPCu7u9l4R7c2xfZV5kZFhUV15JV11LUEdKSkdBPD8/QTs/PDA1NTM2Ojs5Ozg5OTw8Nz4/Oz07Ozg4PDg5ODw3ODo7Ozo7Pzo9Ozc4PDo9PDc0Nzc2NzU3NDY2Ozc5Ojs6ODo5ODo7OTo8PzuJyba4vru4wcHBtKSkmZqkpsCyr7astbfFz8jIwMa7u8PDz765x7i4v7eywrSxu7usubqxop+pq6eYnpBtfoWGf3hybW9ta2JeYmZmXV1eXV1dXF1fYGFiY2NiYV9cW1taWllYWFdXV1hYWFpdYmRkZmZmaGlrcoynmpCRkZiUmJ6TlI6aoKCnnpudpaaipZufoZqZr66ur7KhpaOuq6iitbCysqypsLOou7OntqGjn5yjoq6joqq2q6Ojpp6mpqOWmZ2XmZudoJqXnZydnK2hrKijpKatq7O0qrWwsquzubSvqrCysrO3s66pra6yt7C6trq9wLizsZSGeXVmX2ZfW1pWU1pVS1tRTEpFSEtJQz0/QUFAQToyNDUyNDk5ODk7OTo9PDY9Pzs8Pjs3Ozs3Nzc+Njo+Ozo4Oj07PD06Ozw6PTs4Nzk3NDY1NTQ2Nzg1Ojo4Ojk5PDg3Ojg5PkA6gci9uL2/tr68v7OdpaOYpbHDtba9rbS5wczIxr/FtsHAx862wMO9s7m5sr+2sbm7rbK0r5+ao6qhlJqPeH+DhH94b3F0cWhlZGllY1xcW1tdXVxbXmBhXl9fYF5cW1pcWllYVldXVlhXWFdWV2FkZWNkZWRkaGp2oJmQkI2Rk5SclJeSlZ6coJyWoaGpo56eqJyamqunr7CrnKOkuKqhoK+ot6unp66xpLiwpLego5yZmaumoZqtubCjoaScoqCfk5ShlJaWm5mYlpeclZ+pnqqkop2jqqqxrai0rKqnrbOwpauus7GvsK+vp6iosq6xtLC8tLq4r6OVgnp2ZV9hV1lYU1JUS01eTFBMR0hMS0U9QD49Qjw6NzY1MzQ5ODg5OTo5Pjo4Pj47PTw8Nz49Njc2PTc7PTs5Nzk7Ozw+OTk6Ozo4Njc2NTQ1MzEwNDU2Nzk6ODo5Ojo3Ojs5OT1AOnbAvLS6wrG+t72unaenoqq7wL3Aua60uMHMx8XCw73FuMjMssHCwa68u7W7vLW5ubCvsKqcmqGplZGKi4CAfHdxaWxydHBoaGVkZmFcXFpZWlxcXF1eXVxbXF5cW1xZW1taWFZXV1ZXWFdXV1ZbYmNjYmNiYmNmaYCSjpGJjpCRl5WZk5SZnpuelaCfpqWjpqefnJ+moKuvpqCio7eooaGiqbOipailsKaxrqy1n6GdlpWpoaKUrbGxn6Ojnp6Ym5OLoZSRk5iYk5eYmJeep5unoaKapKWlq6SlsKelo6usraaprrCvq6iqqrOmpquvtLGuvLaxsK+gk3t4c2ViXFtdWE5MUUhSYU1WUE9KTU9FQkQ/OT02OTo3NjQ1OTk7OTg4Nzs4OT0+Oz47PDY5Ojc7Njs3Ozs6ODU6Ozo7OzY8Ozg4NDc3NjMzMjEuLzI1NTY7Ojg7Nzg3Njw7Ojs7QTh4u7uxtr2wu7G3rJ6lpqy3u7zBxbqyubXEycnAw8bFx7bGxLPBv8Wrt7e9tr26u7WyrK2omZmfo4uKdImIfnZuY2FmaWhmZ2lmaWxgXVxbWlpaWlxdXFtcXl9cWllbWVlaW1dVWFdVVFZWUlRSVWBhX2BhX2BgYmRpfo6Oho2LkI6QmZGTlaKYn5acoKWhrKWkpKOko52rq6Wan6WxqqGhnqWqnqiin66sqqmuraKiopWYopuckKupsJyfop+fl5iTiZ6RjZKTlpCYmJOcoaOcpKCilaCipKWbo6uloqOrpKutpa6yqqalpqa0pqqorbO1tLm6sKusnoxzcXBgW1dWVlJHUU9IWlxPUkpUS1NMRUdKRDg7Oz48OTY2Nzo5Ozo5NzY5Nzc6Ozo9PDw2Ozw4PjU5ODo4ODY1OTo7PDk3Pzw5Njc4NDUyMTIxLi4xNDI2Ojg2OTg1OTg5ODk7OUA5e7W0rLS7srCrsq2dqKevubmzwMi6tsCvxcjMusHJzMi1ybyxvcPJrbG4wbW8wLy0taqsppaanJyJgXKIg3t0aWlqbGdqbG1ramxlXVxcW1tcWlhaXVtbXmBgXFhYWllYV1hXVFVWVVRVVVJSTlFZXVxdXV5eX19iZG2Ji3+NgouNi5aQkZCbmqGbm6CoqauorKeppqSZpa+klZmlr6mgnJmboJ+umpyrs6Cmpp+ipKGUlJuWlpKpqq2bnZ+hoZuUkIyZjoyRjJKNlpWQnaGgo52co5WboaOhmKKoo6Koq6CrsKSuuKajpKOsramoq6+0t7K9tbOrr5iFdXRpW1hZUlVSRlhMUVtYTVVPUUxRUklOSkI9Pz9BPz03NTc5OTw8OTc3Ojc5Ojs8PT47Nzs7Oj02Nzo7ODk3Njk4OTo2Oj05OTU3NzU3MTE0MS0rLzQzNDk4ODo6ODo6NzQ4PTg/OX6zraeztq6oqK+um6morLe2rLzKu7a/rMvGxbjBzs/Hs8S6t7vCyLGtuL+3vL67s7amqaCWmJmXiHp0gHZ3bm1obW1tcGdnaWZkXVpbW1tbXFtZWltcXF5fX1xYWFlYV1hXVlVUU1VWVVVTU05PUVlaWlpdXFxdX2Bke4h9hnqIjIaPipSPlZegn5qfq6mmr6yosKWpmp+toZWWpKinnZiQj5qer5eZp6qZoJ2UpaGfkpGSkZOVqKulmpmZnp6XjoyLk4aJjYOPi5KVkaCeoaSZlp+VmqGinpSbpaWnqaigsLCmsb2ooKOstKqup7C0sLm1wLGusauQfnJ0Y1ZUVk5SSkdWUFJSTExYTktNT1JITktBQ0ZERD5BNzU4ODk7OTo3Ojo3PD06O0A+Ojk7OTo/NzU5Ojk4NzY5NTg3Nzk7ODU1NzY2NjEzMjAtKi4xMDI4Nzc7OTk7ODk0ODs4QDh/tKymsbeqpaKxq52qp6mysKS2xrS5urPKxbm6wcvQyrK2uLy9wMOxsLG3rrS0u7O0o6OdnZiXlYSAdmtnbG5xbnJqb2tkZWdlXlpZWllaWlpaWlpaXFxdXFpYWFhZWVdYV1VVVFJTVVNWVFJOTk5SV1haWVlYXFxdYWp8dntxhImDjYaViJKSlpqYnaiboKumpqyeqJmgppyTj5+jmpeXhoWSm6SQlaOdlpaWiKKbm5SMjoqQmqWnnJWVl5uRk4iUjouBjI2AkIuSkpKhmqCilpSZmJWippqNmaSnqaehoLSyqLO4oZ2jt6ypraSzsqa1u7WrrLGjinpzbl5OUVFNT0ROTk5QS0ZOTkpKTk5RSU1KQUhMSEhDPjk1ODg4OTo7Njk6Njg7OTk+PDg6Pjk7Pzg3ODk6ODg2ODU3Njg4OTc0NTc3ODIwMzAxKyktLzEyODc2Ojk5OTk4NDk4OEE3d7ampLexpaekqqWgqaaks6qissO1tbKzxsa3usPKzMazrLm9tLjAr66psJ6mrruvraCam56VlYh8hG5fX2ZycHZxam5pZWdoal9YWFhYWFlZWVpaWVtbXFxZWFhXWVlYVVZSU1JQUVRRU1VRTU1LTFNXV1ZYWFhYWl1hbm5ybICEf4V9j4KNiJKQkp2hjpqdo6KkmKWWopyVjYiZmoxzjYN+jpeWhpKakJSOjnuZj52NgomAipigo56Qk5iWhY6DlH5+dIqOepCIk5CQnZuampKWkJ2Oo6OOiZqgoaSkm6K0r6ywrZ+YprimpbChsa6csbyqqa+qmYN4dGRWTVJQUE1DU05MUE1CUFFISU5TTUhKSkRLTUZLSz03NDk4ODg7OzY5Ozc6PDk6Ojs3OT85PkA3OTo8ODk3NjQ0NDU4NzQzMTI1ODUvMDEwMikoLC0wMjc2NDc4OTo6NjY6ODdBN3i3oaO0qKalqKOlpaamprKnprTBuK+0sMnEuLnAzsa+s6y6waytxK2ooqaSnaa3raOgkJaXkpB+eH9mV1ZfZ2ZpZ2hvY2lpZ2JcWFdYWFhZWVlZWVlaW1tbWVlZVldXV1NUUE5QTk9PUFNUUU1NSkhOVFNTVFVVV1lbXWlobWh7gXlxTVZwjoGVhYybl4qTkZ+YnZWUlpSPloqAlIlfO1ZvfIyUioCMkoyQhoZzi4WXgXmBe4aUnZWDlo6RkIOGfZN4cXCGjX2JgZCOkJeamZOLkIqdiJ+YiIiWnpqhoJenrqmtqamelq2zoqaumaysmKi0o6mto5N/dG5gW05TUldMRFRKUE1MRk5PSUVMUU1LT0pJTVBGSUo9NzU5OTk5OTo3Ojs6Pj44Oj09Nzo/OD4/NTg5Ozc5Njc1MzMzNzYwLi0vMzQ0MTEwLy8oKSsrLTM4NTQ3Nzk8Ojc5Ozg2QTl5t6CjraGmpqmgpqmno6qwqKe0wbmwtbDHwrizvc+/ua+utcKnqsSqop2Yg5ScsaOamIeUkIuHfnN2XVBMUVVZWlddXmJnY19ZV1dXWFhYWVpZWFlYWVpaWllYWFZXV1VTUk5MS0hHYlxNTlFNS0lGSE5RUU1PUlRWWFpga2pkdn5xTkE/f5WRkHyHlIyEio2bjpaViZKIhpWHeYl/YEpRbniLkoR+hI2LhYB/bX9/lHh2dniEjZpwUY2IioZ8fniUdmh3hoh+ioiVi46Rk5eMhIqIlYSbjYOEkpuWnp2UpKKoqaWknpuwqqGkpJKmqpaiqpyhpqiJdm5nXlxIUVFTTUlVTVJJTEtPSUhGSk5MTVRLUVFPR0pEPTc2OTo4Ojs7ODo7OD4/OTk+PTg7PDY7OzQ3ODs2Nzc1MzQ0Njk2LzMvLjEyNTIyMS8sJykrKiw0ODMzOTg5Ojk5Ojo6Oj85d7aco6edn6Guoaeopaeor6yqtry2uLezwbu2qLnIuLaoqLW2qrK8p56VjX+JlKmWlYt/joOCfnhxb1hNS01OT0xNUVdbXFpYWlVVVlZWV1lZWFhZWVhZWVlaWFhWVldVU1BNSkVAQJtrc3NJTUtFRENJTk9oWU9RU1RVWm6BcHN6Z2ZaU4+JlIdzfoaAfIWMk4KSmYuPe4aPgHaAeHNvdXF0jo6Ben6Kq4V6e2l2e45wcm14gYuNknh7gHuAd3NzknhndYWEhIV8lYqIio2LgH+Ei42AlIR8gI+YlJyWkZ+dqZ6goZ2gqaWenZiNp6SToJ+Wnp+kgXNpYl1dSldQUkdLWFJPSk1MUkpKSkxQSExRTFJUTUZJQj03ODs5OT49Ojs8OThAPzo6Pj03PT03OTkzNzc4NTY3NTI1MTQ3Mi8yLiwvLzIwMC8tKygoKS4xMjcyMTk4Nzo4Nzc1Ojw7N3aumaOhmJ2ftKmvqqWtq7Cxqr20sru4trq0sZ+3urKqnZ2sqaiyr6KakY2UgY6cjpF/doZ3fHZvb2pZS0hISEdFSEhQVFRUV1dTVFVVVVZXV1dYWFhYWFhYWVlXV1VWVVNQS0Y+OTNOPH6eTUhKREA9QURqlH5MT1FRU1ZedYJ6dmR0i5WYjY57ZnmAdnh/iJB8g5iSgHGHj3x3e29rfq19dJCLf3qGkoF9f3RmdnyGbG9oc3yKjYeAbXlxfXFtdo9xaHGBfo5wRIuFgoOFf3d3eoyGfYx7dX2Oko+Yi5Kam6OWmZ2anZ6hnJaNi6Wbjp2XjpaYkHhvbmdjW1hYVVFKU1VUT1BOUFZLTktPT0pST0hOUExGRDw7Nzk7Ojo/PTk8Ojk5Pz87ODs9Nzw5OTk5MjY2ODU2NjMzNTExMjI0LiwsLS4uLTAtKyonJyouMTM2Mi84NzY5NjY1Mjc5OTV5ppegnpagprCsrquoqbGvsau8uKy7vrizrKebsKesm4+WnaWppKGYmY+FknmJj4uLdnF8bXVwam1qWEtGR0VBQENESExMTVFSUFFTVFRUVVZWV1dYV1hZWVlZWVlWVlRTUUtENzhmNzA/qGlOSEM9OzpEioV6WkpOUFFUWF1lb3BqhqWqwH5zeGJ7d257eIePeXuLhm9tjJJ5dHlqaoCCcZaRjIF9lYBKk5luaHd+gm1qZGx5hZCShmtybHxucnyGaW1wf3ONiYWHe35/e3dwdHSGgnmBeXB8jouKk4OWl5iakJOWlpmXnZaMg4mfkouSjYaQl4Bvam9vb1lWWFRSUVlPUlRUUlhVTU5ITUtNT0tDSU5HRkA6OTk7OTk6Pjw5PDs6Oj0+Ojg6PDk/ODY4NzI3NTY1NTQxNDMyLzAyNCorKiotListKigqKCcsLTEyNTAsNTU2NzQ4NUhBODk1d5mRm5ibn6Wtr6Ktqqi1r66stL+rvMO/paKalaSYno2Ei5ShoZiZkZOLc456gIaMhnVvdGtwbGRsallOREZDQDw+PkFGRkdLS0tNUFJSUlRUVFRWVldXWFlaWVlaV1ZUU1BMRTFAmjMganNDmW87PDk1PICChl9JTU9PUlZaUVhbX6aHYZlncnhkfW9sf3mKiHWBh4V0bJqSdHR8amqdjk15hZOJhI5nMXaHc2x+foN0ZmV1f4SEhYBmaWx1a3CAfGhxcXxuk42PfHR+fXFxbnVtgn93eXVqeYiCiImDlpKSkIuNkZSUjpeNgHmIl4iHioaAkIh4bGtwaGVYUltYWVlbTVBVVllYTklIRUpKSEdDQEdFQ0c9OTk4Ozk6OTw6OTs6OjpAPDk6PDk4Pjc4NzcxNTIzNDUzMzY0NTAzMS8qKispLCwrKykoKycpLCwyMjYsLDQ3NzU0NzhpTzg7NW2SiJqQmZakqK2esZ6nuq+rsrDCsbvDx5qWj5SZi46FeoSQmJSNkIyPhnGHgnSIjIZ6cHJwb29kcWdfVEZJQz48Ozk6P0BBRENFR0lMT1FRUVFSU1RVVlZYWlpZWFZVVFNQS0U4MC9cYLNHOVhQOzk0NDGWuotITE1PT1FVTEFJUUlir7KfcHp2a3xscYKBhIB6hIWFeXKglXR4gHN1lIc1cZ2onY6hoYSjhXZwh3yHfHSMro2JgWhnYmpucm1wg3VpcFh1cI6bkXZtf3t9bXJucIB7c3ZuYnWDf4aAhZCQioqJkYuRi4uOg3V4io6AfoOAfY57c3FxbWBbXV5cWllhX1JOW1pYV0xISkZJRz9DQUJHP0NEPTs5Nz07Ojs7OTo5OTs6Pzw4OD06ODs2NjY1MTEyMTI1MzQ3NDUzMS4vLCwrKSopKSoqKikoKikrLzNETTIxNjY2NDM8dlI3PTdikoGSiJWRnaSnnq+VpbSprrCuwbK7wcWWkIyUj4CIfG6BkJKJg4qHj4Z1goRslYiIe3V4eG13bndkal5JUEc9Pzc0NDk7Ozs9PkBCRUhMTExMTlBRUlRVVldYWlhWVVRTUExFPDUqnUtbQC1nSTk0Lz+Sg6muX0hMTU5QTDdDTVFTREuFdH97e3V+bHaHh3t8hIN+i311opp6foaBhJmEmpxhhqqfnYqDkI56d4l+iYiOc4uXj4R7XWRxdHp8d4ptaGpieW+FkIJ6b4F4dYR6cHR6eGtuaV12hn2HfIeGjn+KkpeDjYWMhn1xhH+EfXZ3e3yJeHF0dWZnYFtbXlNcZ15XUFRYW1VHSkpFS0c/RkBEQz5BQT07OTc8Ozs9PDo6OTk7Oz0+Nzk+OTk4NTY1MzI0NDAwNDY0NTU1NC0sKSsoJicnJigoKSkoKCsrKy8wMFVxPTIzMzMxRX5XND05XI14in+TjJGcnZ+mkaCqoLGor8Cyu8W6lo6RlId7hnZrf4yRgn2Kg46MeIOAc6CEin19gX9wgX56aHZsUlhMQEUyMTEzNzY2ODg6PD5BRUdGR0pLTU9QUVNUVVdWVlZUU1BNRkA6Mj0gI5ZjjFs1MzExaT9Hb0lGSUxNT1FMS1RdWVJLaIKHeol5e3F8j4t5fIiGfpaHdqGaiIePkpSlja2pSIaur66LgYCUi4KLgoSSqYeAmJiKnHRtfIGGh36OaGdoeX9uhYeChXGEhkhsgHdyeXZobWtfdn2DiH+IhIt5lZybiYuIkX96dYp2fHhtb3d+gXV1c21cXl5bY2RYZ2VcVFBQVllQRExLRk9JQ0ZDQ0BAQ0E9OTc4Ojo6Ozs6ODg4Ojo/PjY7Pjc1OTU3NzMzNDQyMzY2NTY3Njg7REZMTU1MQzcrIiUnKykrKywvMDArbnUyMjQyMEyBXDU9PF6EdHx9iYWHkY6Wl5KWoJ6soKa4r7O9s5eNkouYi310cH6Jkn59jIOSlH2Gfoakh4h/goiFeIeJfnOEeF9jV0tCNjAuLzMzMTIzNjY4Oj0+P0JFR0hKTU5RU1RVVFRWVVNRT0dDPzgwLCOHWz8/ODQuXZZwc6NVRklLTU1QV2BZb1lcXmmMkoaUgIOBhJGSfoWIkYGalYKhoZiVm5qmrZOZu7Gnu8fDqIuMoaWOlImBkXxxg56fkZ1/d4WFi5CHkGlocISBdIyHhIpyhoJ3iIB7doR8bnZ1Zn+UjoeIiYeIh6GropaJjpd/eoGIeXlwZ2t4f3x/dWxlXltbXmpeYmdgWk9MTldSUUlQSkROR0NKRENBRERBPDo4Nz08Ojw6ODg3Nzg6PT04PD02ODc1NjYyMzQ0NDU3Njg2NzxCQj88ODo+Q1FeZVxHMicmLCwtLS4xKD+LWy4zMTBPg180PztudXBmd4N6f4x/gZCOipqbpJ2hrKarr7CXkZGEoZSEeHd/jJR8fpKGkpV/ioCSm46DgIGMioKJjYN/ioBtcGpdQkA0LS0vLy4uMDIyMzQ3Nzk7PT9CREhJTlFSVFJTU1RSUE9IREI8ODcvOUM+PDw2My5sk5dNUElJTExLTlZgY39mZ210m5mOmZKSio2OmYiSj52LoKCSo6qlpKyTqbaiqMHCrseveLqUmnyNoZ6ZhJOFgo6hn5SZkYWKhY+ZkZZscHWKjIKWjI2Od4+EcW2FgYqWkYOFiHGIoJaGkomNj5aktKmbjJSig4eSg31/a2pqfIGCg3VjXmRgW2dsXWxsXldLSE5SUU1MTEZJUENETUZCQ0VGQj05OTc9PDo7Ojk4Nzc2Nzs6Nj06Nzg1NDU2MzQ0NTY2NjY4NTU2MzEwLiosLCkoKS46UGFcQCwoLSsrMCwncog3MjQwT4RiM0A8dW5nWW+Cb3WGcXaShn6XlpqUnp6cp6CplpOYnmdlpJp+hJKReX+SiJGSfYqEmJKQgoCAi4yJhpGHhYmFeHh+Z01SPi8uLiwvLi0vMDAwMjEyNDY3Oz9DRU5PUlRQUFFTUU5QSUVEPjs8OkRGPz48NzUyPD9SNUhISExMTU5SXm6KfHOBfJ6cm6eloZmglqKUnJ6onqirn6isqaq2l6u/q7bIyLfI0M++m6Bwaaupn4STkoWcoJqbmaaSkYiVopubeHp+lJiTopOXl4GUnnt3lZKrsomNl598lJ2bjZKVmKOhprWvnJCYqIeWj42AiGxzc32BfnNpYF5iYGJoZGBnZlxSRUpLUE9JSUxGRk1DSExGR0NCR0VBOjg1PDw4OTk5NzU2NTg+NzU9ODQ3NDU3NTQ1MzY5NTg6NjE2ODYzLzAuLSosLy4tJyMqO1hiQigqLDEtKEuXXjA2M1GFZjJBQGlhXlBwdGBtfGF3jn17lI6Oip+Sl56Wm6qYnqpCRH2HiYeYjXiCjYqOjHyKho+QjoGCgImLioSShYOHiYGAh3ZeYlA0NjAtMS8sLjAvLy8uLjAwMTU+QUFNUVJTUVJTVFJOU0xFRUA8Pj1GR0BBQDg2NjI8OTtGSEdJSk5PUVlthY93lImhpaizvLekrqurpqi0q7C2srGtu7Gzvpyzw6u6ycq3w7+4paKws6ytqqOLlpiFpqago5eBppmNoquopYiFlKShoKuhpKiPnLGLlaOmt7qboKKwkqKdop2Qo6Grr6yytaKUpKqImYiSiZV5en6GgGliaV1mY15kZF5nZ19bT0NJSFNORkhMRkpHRkZIQUtGQ0ZGQTs4Nz08ODg6OTc0NjU4PDU0PDc2OjQ0NjQ0NzM5PDM4PDIwMjU1MS8xLi0qKi8sLSooKiYlNVhYLywwLCwwhIE4NzFQhWg1QUNbWFRMaGJXaW9YeoV2gZOFiIKbg5KQjJLayJ2Wc1aXiI+InI98hoyOiop6h4KHkI6DhIGLhYaIkoaDhYmHiIeHcW5hQEU2NDwzLzExMC0sKy0xLi00P0NBTVVRUlNVVVZVTltQR0hFPD4+RkhDRUE3Ozw1Qzs9RktJR0hRT1BXgZKfhK2isamxwMbCqrPFtquzv7O4vra/tMG2u7qjuMWotsnHtb65tKijtK2wsZuZkpqfiKevq6WUdp+kl6GssrSZlqquqa62u7K6rLC1orGssbW7t7WutKCnqKOnmqmvrLK5t7imm7apjKSOkZOfhniBhXdbY2VXZ2NiZGBhZ2BbVEpERExVUUhJSkRJR0VBQEBLREJNRzw4Njc7PDk3Ojk4NjU1NTcxMTw4ODk1NDY2NDk3Pj0zODkxLjAxMjExMzAsKiwuLCsrKyooJyopRVowMCovK2iSTzYwUodqNkFGV1FKTFtZUWJjV3l1cIGUfYSGk3WFf4CMe7+7o7yCtJSTjZuPhIiPkomIeYaAjJKMh4SBjn+BiY+HgIaIhYqHkXp4bl1WQEVNPDY6NTZBQjc2NC8vNkNIQlFcUFFVV1VcVlBfVUlMS0E/PkdLRkZEOz5AN0Q3P0JKSkVGVlNQXo+kraOxs8G1t8HMyLW7xL2zs8C2uMG1v6+3dLGzpbrEpLDGubGzsbSopLW2qrGgopebopKlsK6mraunpJigrLS7oqiyurW8v8y/xcW9vbPBt7q3vre6t7msrLClsKmtvbC8usHBq5i5p5StjpeXqoh+g35sWGRiWWtmamZXXGNZVlNJR0ZMUUdDSElBSEQ+P0JCTEBATUQ5OTY2OTo/Njo5OTY2MjQ2LzE5NTk5MzY0NjI3Oz0/NjoxLi81ODo5NjUwKigsLS0tLCwqKCgrKyhFUy8qMDBKj2s1MlCHbTY/RlJMQUxRVlNZVVp2am9+joSAjYRuenN4h2K5oZmjiZSUlpKUk42PlpKHhnuGgY2VioCEgYp6fIuHhn2KgoGLhJV9d3p1ZVBcZEdFTDtRY2FbXlNGPztIUEVaY1FSWFhaZ1lUYGBMU1BFQT9JSkhFRUFARDxFNkI+SEdKTFNaVF2Trri0urjIv7m9ycy7vMG7t7W7ura9tLqxxmB1sqSxmp6rvamlqKuqpKKytaCrqJ+Vlp+ZoK6lp6aln6SToqextKeysr22wb7TycnTxsPFzMLKw8C+vb67vLe0r7i3tsO5xb3Cx6+euamhq46kqLWIgYFzYGNjX1hjYGpnUlhgVlJVSUVFTktAPkdEPUpBPUJAPUY+O0hBNzk2Mzc5PjQ4OTo1NzA0NS8yNjM4OTM3NDQyNj84QD5HS1JUU1FQT1FRUEpBOS8sLCwqKygoLC0sL1A+KC40OIB9PDJLiHE5PkNLRUBJTVBSS1FdZ2xrcI+MhI9zbHJyc4fVwLWZoI2VmJmRjpeSlpaOhod9hoONlop+g3+DeHuLg4d8i3mBioKXfnR9emtmcHVZXVxQZWRiYGVkXVtYV1xNZG1VUm1tX25fWGdkVVlVSkRCS0tJRkhISEhCSTpEP0hLVFRWXFpbkrnAuL22xb+6uMnKura5tbe5sre1s662tphkdaicrXBeoqycmKCim6SeqqWUn6CQk46WmZion6agnpqZg6SerKWqsK24sL251NHP1tDKzNLMz87Kxr++wsq9wbzBwMTExcq+yM6zpLuwtK+aq7i7mH97bV5hXVpfYlpkY1BbYFNQS0NBRUZFPEBFPkFIQUBEPTpFPj1KPzM3NTM1Oz00Njg5NzcwMjIvMjQxNjk3NzU1NTVEM0VMTT41MS8wMDY6NDc3QElPSTstJioqKC0uLyxATSsvNTRtiUkwSIl0Pz5CREBDREZLT0RRXFloX2+WkZCUbmxvdHWHs6ugoZ+LmZyZjIyVkZuShYqKfoiHjJCLiXyBg3N7ioOFe4l0goqGlX9ze3lsbXV7aHJlaWxpZ2ppaGBmaWlsWm1zlq2kvIiGZ1tvaF1aWlRIS05QSktQS1NRSExBSkZKT19eYmdpYZe3x7C5srq9tbHExrWvuLGwu6uysaert6uMtqedmqeaTpqdjI6flpGmmKWVipOTiZCJj5GRnZuhl5qVloeemqebrK+osKi0tNTV1dbTy9DU1c3Tz83FwsnQvsnJysnRx8zNwtDRt6/DvMS5pbW6wqKDcGVeXl9ZYVhaZlpRXVhPUEJCSEVCSDtBQz5BRz8/QTc7RD5ASD00NjY1NTs6Njg3NjU0LzEwMTQ2Mjc4ODc1MzY3QzVCOD8tMC0xMzQ5PTk3LC4sMTtGSz0pLCguMDAwN0s/LTQ2VIhXMESHd0M7Qj5FQkFDSk0/VVlSZVZzkJCYgmhxb3l5g6CpnqaXjJqbl4uNlZGajn2Ji4SNioqLkIh8hIJwf4eBhnuHcoOSi459cXh1bHF4fnF6bnhzbGmBcG1jam1weGl3fH7Lv8Hfp21jeG5jW2FgSlBSVU5ZXlBdXE5QTlRRVVRcbm12gnGWrbistKawtaqsvL+wqrSmpLimq66gq7SjjrGumpeYjJGTkYSOm4GNppGciYOLhIqJhIuElJWYl5ObkJyYmZqfnquspaiirK3P0tXSzszT1NTQ1NHOyMPU0cfN0tPT18zR0cXS1sXAzsfHwqi+t86ee3BnX2ReWGFTXlpQUVRRT0g+QEZBQkU8QEE+RUQ+Pz86PT08PEpBNDU0NjU8ODg4NjY0NDEyLzAzNTI2NzY4NTMzOz08RT1AMTErLzI0OT41OTAxMDIyLTJETjMpLzMuMzI9TjIzOEN9XzJBhnREOj09ST5AQ0ZIPFZSTU5adYaFindsd299fn+hnp6hjIyYk5OLjJKPloR5hY+QjYqJiJGGf4J7cn6AgYd6hHWFk5CIf292cmtzfXt3e3OBeHJqgHNyaW9xenlxer7Lmn6MsoR2coR2aGFrXUNaWltWZWNZZGpUWFxdYGReY3d6fouBmKmjpaGfoKilqrC4qqWzo6GtoqOtoaexn4immpOSkYmRjoiBk4lqlKKMmYSBhn6Rg4OTl62LlY2Umo6Gk5Gel6ewoaGhpaSpyM3PyMLM0dTS1NLO083G1tLM1NjW1tjU19XJ1NrNydfX0cqsw8LLjHRwZWJhWVVaVFxQS0dJSkpAOzo7REFEPEJDPkdCPkJCOzw5PDpHQjQ2NTQ0PDU2ODc1NDMyNTAvMjU0Njc0NTU0NDw+PUU/QTYyLy0xNjs9MDgxLzI1NC8tLTtSMDE3LzUzMkZEMjg+bmI1PYF0TTk5QEk8QUQ/QTtQTEZLWXCAdX1oc3hygomAnJSdlIWLlYmPioiNh45/eIOTmIqMiIiLiX6DeHN7fYOHd396hpGVf4Nud3BtdX92eH10hXx5bId2dG59doR0eHudtYw7QYvFpX6MfGllV0lDZmNlY2dqZG53W15maGtuaW6Ag4iQi5ydoJ2Ql5ieo6OlsaOks5+hpZ2gqKCjsZyFnpKSkpCKjouGg4+EfpybjI2ChIV6lH+CqZWjjJGKl5KLfpiLmpKrs5ibnKicp73Dxrm2xs7S0dLQzNLLydTO0NXa19fY1NnYzdjbzsnZ2tHWvsvLtXp4cGZeW1NXUltWRkdKSUVFPTo3OkBAQjpGRD9EQ0FEQjs/Ozs3REM3NTY1NTswNjg5NDQzMzQxMDE0NTU4NzQ0NDQ5QD5EQkM8MzMuNkZUV09RSkFKRj8xKiguQlMzOTI1NC83Szc1PGBiQTxzdlY4N0FIOj9DPjw5UUVDSlRrbm5wYnBxc4WNfJeQnYt/h5KDiYaFiYGHfHiFlpaIjoKHhYZ6hHlxe3uDhnV6hY6NnHmLcHxvb3p/cXuBcYOHgG6OenR3fXyCdX57hoevc1ipwraNkYJwbmI9XmhycHFwbnh2gWVob3J1eHF6i4aOk5GblZ+Vh4yTm6CanqmfoayboZqZn6Wen6uZi5qMkJGNhH2Ih4OFi46gmZOIg4d+bJl6hJmGiJOMjZSMhnyciZSPrqqUlpifmaevtr2prb7HzMnJzMvQycPSytTX2NfY19Xb19PZ29XQ29rR1sjUy5Z7fWpqXFtRVFRfSENGSUg+QT49Nzo9Pzs9Rz0/QUFBREE+Pzo4N0VCNzU1NDc5LzU2NjQzNTU0MjMyMzY0NzU1MzQ1OEVCRENFQjU2PEZOU01bbmZjbnNrYVY+LDRMRzg2NTQzNEJGND1XX2hMdXheODs/Rjw8Qjw5OUQ/Q0dSal5tZGJma3aAiHGRj5qAeoCNfoKCgYN+g3t8hJiNh4t+hYaAdoJ5b3t7hoF0epKejqB2jnWCdHWBfXOAhG+BkIJvkoR1fIGFenaGe4i3xaTBybiBlpuPd3BlTmZjgXqBd4aikIp4eXZ7g397hHZtk5aUlY+XkYSJj5aZl5alnJiflp6TkpejnZmrlZCQiYyRgoyFiIiBhpCRnpuZiIaMgYWXeoiJn5eQiI2Ki4J9oYqRi7yhmJSYmZyppqaun6i2v8DAucfKzs7FzcrR1tXV2dXX29TW2drb19va2tjO28aIfXtpa2diVVhWVk5MRU5DOz09PDg6PD44PUA2PT9APT8+PDk4NjdEQTY0NTU9ODA2NjU1NDc3NDU2MTM4NTQ1NjQ1NTdISD1ESkU3OTI1O0g+Ozo6N0lQXVpSVVhLOVQ+Ozk1MzI3STg9TllNSHh4ZDU9PkM9PUA6Njo+PkBFUV9YZWFdW2h0enlsiYySd3Z6int+gH5/fIR6fYKRiYSFeoSHenV9dG18fYZ+dH+TnpGeg5F8hn54j354iopugpqAdJmGfoGJhXx9kHqPqY6Pw6G9jJyjnH2JhH2JcouKfnOmmpyYk4V7jpCIhGhHcaCknYyLkJKFiYuQkpSOnZqSlJCWjYyVn5yUoJSRjY2Pi36Qjo6LhImSlpqen4mMlJKdkYKLgKaZiISNgoWEgKWHiou4mJ2RlZaiqKGenp2kr7e6tazAxsrQyMfMz9PT0tjT1dfA19jZ29ja2tnZ19u5e3t6bWtnWWJcVFBPSURMQjw8Pjk5Ojo5OTs9Nj8+Pjw9OTo7OzM3REA4Mzc4PjYwNjg4MzU3PDM3ODA0OTc2NzU1NTQ2RlA1RE5JODkzOEFLPTszQ0BJPDlEV048TVRITj85NjMzMz5DO1tYPjVZeXBaPDxBPD0+ODY4OT89RFJTUlheVVhmbW1taYGOinFzeYp7en98f3uHenx7i4aCfXSDhXlyenNtgH6EfneFnKKbnZSSgIyIf5iHgJyRboeohXqgi3yRjYOIhJt9mpCKjKOioJCkr5+LkIuFi4GThldyrYufq5uPg5ibj4+OXIKikYKMn5OVjIeIjJKTi5SUk46Lj4qHlpucj5SWkIqSk4aAi4iSjYqKnZaZoqKGk52WoIqJiI2ckIOIjn+Dh4WkhoyQs5idkpWXoaKfmZKcnaiyuaymvcLHzcjGz83QzM/X0dHVrtbV2NrY2trX1dnZoHJ/d2loX15ZVFhZQ0FIQz8+Pjo0OTo7Nzo7OzM7Oz89Pjc7OToxOkg+OjM3PUA1MTY3NzI1NT82NTs1NTg1ODo1NzczNUhSN0dPSzk5ND1FSkI+MUZDTEI5ODpHWEA1SFdJNjYyMjM6RUNlWD8mX3lpX3o+Pjk8Ozk4OjtAO0JRS0tTWVBUY2N6bWF+kYNvbXeLeHl/eoF8hXt7doWEf3NwhYF6dXZ2dISDhX5/kqakn6ailoqdkJSXi4qol3OKsY2Ep5KEmZOFmYyilZ+Yk4ianqOSqbCgkJSQjY6IloxujbeFmsTIspuhpZucmJaQspFkpM3Ilo+Gh4iPko2NkpOJhYqJhZaZm4+PlJOGlJeDf4+LmYiNkKqWl6OjiJmflpqIjoaWl4qEjo2Bf4iPpImNk6ial5OXmaGZn5mTnZujs7Smo7zBvsfFxcnIycLL083N1KnS0dbW1tja1NPazoR1gmtmYGBfUEtWXEJCR0M7QT04Mzc7PDo4PTY0OTo8OjgyPzk5MjpJOj02N0JDMzI6OTYyNjQ+PTQ7PjY5NDk7NTc5NDRKUTxKUUs5QTdCR0lANjRKRUxGPjw4OEVUQTc+XDg2MjE0OjtFYFhBRmF0aExjWj41Ozo6NTs6PTpFTUZIUldTUkJlg0d1go59fG19iHh6fnqBgYJ+dnaAgntsb4t+eXx3eHyEh4t+i6O0qKSrs6GWp6ClpJaVr6KDkLiVkrOZjaGgjKSbr6KknZiQp5epma2wpJeUlZSQi5ialqDAjqPJuauaoqWtmZGbnLKdhoWoop2YhYiIjpWMi5OPh4GGh4iTmJSMipOThpSYhoSRkJx0kZmylZakoYicmpOPipCKl5qJi5aNhn2MmZ6KkI+cmpmTmZiglaGdlZ+bobGuo6S3vrPFx8S9w8O/xs7KydKnz83T0dDW2NLP2Lx1fHhfYldiWFJJS09FQkNENT46NzY6Pzs8Nz00MjY2OTc3ND01OzU8TDw+OzxCQTc1PDs0Mjc3P0A2P0A3ODQ5ODc7PDU1T01EUFJMOEA9RUFHQTU6SkVORUQ6NkFAQlM+OURPMzIzNTc1PXZcPFJcdGlaTV1TPD04OTU2Nz06SkZER01bXFlJaGE7SISKentthYZ5fIR4gIWBfXB4fH18b3OMen2Ce3iFi4mGg5KovK2ps72vpa6zs6mjorCsipq1naK4pZWtpJeprbempKOfmamYqqSvsaqamJuUlZGYoJeZu7utyqFptreqsJWYnqKrkpe9pF6psoKJioyUh5F8j459g4aOkJSUiIeSlouPlY2LjZaZk52atJaVq56LnJSSjZCSi5ibipKdj4uJlaChjZWNl5mdk5yZnpWioJScnaWvqKGls7irwsjEtru9vMXIyMLQocbJzc3E19bQy9Ojc31rX1xVYVNRR0Q+PENBQjg/ODc0PkY8PDY8MzUzNTU0NTRCMzk6Qk06QTtBSEI7OkA8NzQ2PEI5P0BCODc0Ojo2Pjw0N1RLQ1VRSjc8OklBREA0QUpITkJBPzZEQTxKTkQvVD0yNTQ6RUpcWEpaUW1ncHBEaWBLSTY3NTc6PkpAQ0lQZkhhYGJwSUCLiX+AcoaHfIGJdYKKg35tfX18fnB3h3eNgYd7jY+Mhoyaq8PAsL3Gu7O0wby0rKuzt4yosq2tvaubuqSorbm3qqamoqKko6qvsrGqnZyjmJuYl56ipaWSo7muqMC7rK2yuaWkp32Ihpytva+Ci4uKkIOOg5GOeYGHkI2OnIiIj5eNipSXlJCal52nmrCakaudjpqPko6VkI+Vl46RoJCIlJujrJWWj5ScnpSgnpuYoKGUmp6np6SipLCzpsHGw7Cwu7bFxMO/zafHw8fDvNbQzMTKinZ1ZF9cYl1PS0NMQEVHPkE/Qjw6ND5BPT01PTY+MzMzMjQyQTE3QEJOP0dAQ05DQT1DPTs4NkNCNUJJQjo4Nzg7NUI+NzlWS0RXT0Y4PTRLQEM+NEVLSE4+QUE2QkI/QlNFNThQMTQ1Ozw4O0Q+OUxqal07V1JkS2daVU83OUdFP0NGXGhGX2lnWl1ck4yMiHuHi4aDjHWGkIqBbn57gX5xfoF6lXqSlJSYkZOVqLTHycDCzMHDuse8uq+rubuXsra6s8CupcCkq7C8vKquq6Ojnqisr7WwqpugqpyinJafsLSni6K6urXBu6uonLKkpKiUhI6pxMOkgouOh4iEhpWUjHmDjJGPkqGMjJSRj4iXoJeSmZWXpqCunIyqnI6Wj5KRlZWOkJWRj6GThpefoLKflJuUoKGZpKCaoJyglJiep6Smp6SvraW/xMKuqbe1ycO+ts+yxb7DvLPRycfBtXd7b19aXmxUTklETUtLSUBBPUJEPDVBRDs6Mz04QjMzMjI2M0EwNUlFTj5JQEhSQEg+Q0A7Pj1GQTVBVUA7OTk4PDdFPjg+VkpDV09HOD80TEBCOzVKS0NMP0I/PEJGPUFITDkrRzwzNjc0NjRBPzdPYU9hRS89PjZrbGpgQDpIPj9FQmdcTWVcZlRjapmNl4mLiJKPhol5hpOQgXKAe41/d4aBgpB6jaGWqJqamLu+ycjKwtLJysLNvMGzrby/p7q/vrzEuKzBqayzu72qsKqkpaOsrrSttrWgoK6fpaKYo7S8qZuovMGjtbavq5KvrKqrloaaqqelkYKMk6SVioB1iZJ5hY2RkJ6gko6Ui4+MlKOZlpuUlKOeqZ+RpZqMj4+QlZaIfY+VkpKjmpWgopy1ppCfl6Wko6WfnqaYnpWXnKWjqKiisq2ou8DEr6Wzt8zAua7Ds7u9wbmtwsLCv5lwe2NbWF5cTU1OSkdEQ0hCQkFDSzo0REg6OzQ8N0UuMTIzNTJCMjZTSE48SkJKUUVLQ0RFOkVMQjw3RVY9Oz04OT88ST86RVVJQVdRRjdBOks6Qjc5Sk1CSUBDPjxERzxCQ089MjBIMzY2MTcwPUI6PWpqSks1UVMzU3BwZE47RD1ARj5sSV9YYVpkZFeekJ2Nl46ekomKf4ifkoR4hX+Vfn+QiIqQgJWgma6no5jDvsnEyMbSzc7Ny7zCt7C6vbS9y7vDwba3vK2zwLm8rq+ooamotq2uqbK3mp6soqehnau3t6mlr77Esb25s6eps7OtrpaVpa2ooJGOkrHFp5WNfZGVfYeRmI+qmZiTk46TlZOlnpOdmZOhoqGcmJ+Yi4yPj56IWpCWl5KWpZllmKOes6WWoparraunnJ+nl5iWmJWhpKmnn7asqbq8w7WmtLXLwbiqtqyzu7iuqLi6vLeEbnBcWlZXUEdLU01LP0FIRURIRkY4NUZNOz43PkFKLjMyMDI1QjU1UFdOPExGS1JMT0dHST5JUT86OElTOzs/Nzk+RExCQEhTS0BXUEY6QT9HNkE3O0hNQ0U7Qz00RkU6QkFCRzkvOkEzNjAzPkdEOTQ9dGRNRztFKzpmfGhWPD5AQkZCc0ZpSVJlY0xGpZSclaGXqJaMkIOHpZKIgYeCm4SDlZCRlI6aop+vvq6hx77GxcjHzs7O0sq+u7axuru8v8+1xL23ubeysrazt7Osppyrq7mrqaivsJejrqSnpKW0wbCrrLO+wrnAubOnuLS3s6+VpK2wr6WLk5WhjXPBmX2WmYSOlpmLsZWampWSkpmZpqOVoJuWmqmcm6GgmYqMj5adYEqWnJqVmaWXVJawn6+cn6WUr6+tppuhppSTmZmOnaCnoZm0qaqzvby7q7Cyx8C4pqyrrbGxo6GysrSlc3FnXlxQUk1FUVFQUTtIS0lGR0FDPTlLVD9BOj1FTTA3NTQ0OkIzNE5XTzxKS05VTlFKUEhISk9CPD5NUjs+PTg6PENSPkRIUklCV05JQENBRjM+NThKS0NBPUM7NEVBOkE/PkhANSpCNTIsPmNdZzozNXRkZUBSNyYjM31oWDw6QkNAPVJFV1NzYlZGSKuXmZ+hqK6YkJeHiqeWjoiThaCIhJyXj56gm6Oltcm0qca8w8TIy8nIzM7Hvrqzrrm5wcHNtci7wbm1urGvr7K0p6ScqrS1q6mmrayZpK6lpaisusCoq7a2v8HAv7iyssOwt72ro661rbqliJuXppt2vp+EmJyOkpiai66WoZybl5San6GpnqigmpuqmaGnnpeQjZGdg211k6KalZ2jn5CusqOrlamqmKuvpaWhpaqTkpmciZWcop6Wsaapq7q3vbOyrr65tqCjp6mlppycrKmpjWZoYmBTTE1HSE5KVUw9TUVNSUpAQ0Q8UVU8QUFCRE8xOD03Nz9CNzVVWE4/SE5RWFJQUVRKUUpKRUFFTVE/Pz04PTtHUjxFRFFCR1lNS0FIREU6OjM5S0lCPkNCOTlDPjxAPjs7RzctMj4tMYJoTnpcLzBraGA8PUJCODZ6Zlc8Oj0uLlNhTVZIfmVeSEaslZyhn7uumZSei5Oqm5GSk4mqjYahnoyjrJSkpLbHvbTBu8LCx8nFws7Iwr25sq+5tcDCyrbGscG8tburqa2ssKOjmaq0uqaqp6yqnaivp6Srqr68qK28tLi+xry2tbjAsL3As6m1tqu/pY+jl5Ghn7ueiZqgmZednY+2nqmcpaObnKGap6WzopuepZyoqp2YlY+Um4uWiYykoZScop+hta+lppOxq5qrrZ+fpaSqkZaVoISQnp+clqmkoaG0tLq1rai1srKenKOmmpeVmaqhnnhjX2FfTElGSE5RSU1ERkZCUUtIQURHQVZSREg8QUdRMTtBNzpCRjc5XVlLQUxQVFVTTVdSTlVKREBKSk5POUM/NT08TlFDPz9QP0VaTUpBS0RHQDUzPUlHPz1FQTk3QTs8QDw8M0A8Lyc7KkiRQjpTSjAsW29XNzE8Kh1CgGRUNDktMTpoXUZEQ5xwYkdFp5eknp7DrJuXpJeZqJuVmpqPqpaVqKaVrayZoqq2xcK8v7jAwsDIxL/Nxru+ubKwuLS/w8i1v7C8t7q3p6Srq6yhoZurqsSipamspp6rr6yiqqi/uKatvrC3t8a2tLm4vrK/wba0srSvvaOWo5WSm5Otn5ChoaSio56QvqSpnamsnZ2gm6afvaKYo56iqaugnZaNlZ6TnoeOhI2TnqShnbWsppyWsqaZsKmgm6ufoY2alZ+EjqGam5KlpJqYq7G1saqlqq2snJigoZKOkJWon5RqZVxiXlBKSEtPTUhFQ0lAPU9IQDtHSUhbUk9LPUhOVTRCRTg+SEc1Q2JbS0NOUlVXVlFYVFJVSEA4UVFQTTpHQDRDSFFTSUM7Qz5HVktDQE8+SzwwNjtHRj47RkE1Nj85Oj85OzE1RDAtLDBNdlw0S1o1LE1uVzwtPSkeI3piUTVDS1E5b1JGPEt4ZmNYTqKbpJuexayhn6ydnK2fkqKelqWgpqmsl7axo6qztsXCvcC2v8G7ycK/ysi2uLW1sbS0t8LGt76xuLW6tqCnraqrnZ6fpaTBpaCprqCkqa2woqaovbWmsry3trXDsrO3ur6zxMC4uK60tLSjnaSUkZOgrJ+YoZ2oqKqimsKtqZ2srZubnpimoL2hnaSYq6urpqCZjZmfkp6Ijlh/lp6moaC4qqaUmLajnrKioZywmKCPmpSego+gl5aOoqOVkKWus6upoqKlpZWVnJmLj5GTpJ+JY2dcZWFNSktLT0ZFQUZLPj1JQTk5SkpOXVFRST1MVlw4Rkk9RE1JOEhjXEtDTFBTWVlWV09aXklBPVdRSUs/SEA1SE1YU0hBOkBBRFBIPz5RPks3MDk5RkU7OEc/LjY+Nzg+NzcvMT85MSUxUVVtW0pPMTA9Z1dEMTc9LSt3YVM2U1prV3NIRTY9dWVcTE+eoKGYnsOnpaKzoJyyp5Oqo5+jn6yprJ27samstbHIw8HDs8LDvsfEvcTKvbCwtq6xtbDAxbW6sbC6tq2aqbCpqZuepqGowq2brLGcqqKusaqkp723pre7va+3w62zs8K/ssezurertLatqqKmlZWUoquhn5+Zp6uvr6+7sqafqamZmZeToqS4oaGjkq6vq6SlnpKhnpSdjpCNlJ2ao5+ntKenjZi0nKOvm5+cr5GglJiUmoCSopaPjqCgk4umrLClp6KdoJ6SkpqUhYuSjZyfgGRoXWhmS0pMS1NCQ0BJRzs7Rj44OU5NVV9SU0o+T15dPUhQQk1MSThOZF1MRUxSVFlbU1VPXGJIQT9aUUFIQUtCN0ZFTEtOPjtCSEROQj07TkBBMy85N0NCOTdGOys2PDQ2PDM1LS80QDErJ1Z0U2VPPzEwNGJbTTIzPjA8d11eP1tVX2ZyQDg8SJZ3ZUE0n6Sfm5/CqKOqsaCjtKmVsqumoqSyrK2pu7KtsLS0xr/ExLXAxL7KxbbAycK1q7WpsbmswMW0uK6ttrqlmauyq6qYoaeXrbu1m6iwm62frrSyp6q6s6e5sriyuMCquLLCvbTFp76urbe1qaesoZaWkaWkoaGXl6Sut62ytbafnqikmZSUk6Ogt6OkpZWusbKlqaShnpqZmpWYqJ+emKKfr7Kip42Xr5ilq5ibn6aSnY+VmJqGlqCVjJCdnpSLqamqoqehmZ2WjI+ZkIGGlomVn3pmal1sa09RTk5UPUJBTkM7Okk/NzdRTl1fUlZRQVdgXEJKU0hWS0g6VGRdTkZPTltXW1JQUVhdR0FCW1BCRz5OQzlIR0hOUD8/Q0lCTEI8MklBOTQxNzdCPjs3RTcrNjkxNDgwMi0vLjw2LSNCcWdzazIzLzFcY1ozMzkwNnBbYkgwNUpxalZDV0aMeWZDO6SknKGlv6aorq6gqbWqnbivq6SqtLexsLi3sLe4t8W9w8e9vMTCx8G5wcbBuqq2pa27rcHDt7iqrbK8o5WtsK2yl6aokaq5qqGnsJ2roK+0s6qqt7Wsu6yzsrm3rLiwwbq9v6bDqrC2rqmqq6admJiqoaGgkZegsK6zq7C5mZupn5mWkpemoLeppaKir7Gzq7Gnq6CcoJ+bnqWdoJedpLSwm5+QlKaaoKmblqOgl5mLlpmUlpedlImSm5mUjqmpp6CjnJibk4ePmYt+jJeGj5psam1ibm5YUVFaVEFDRVVAOztIQDc6WFBkXlBXV0RZXl5OTFNPX0xKPlpkXk5JUU5bVVlQS1NXWkk/RFhQREY+Tj89SUdHUVBCPUNGQk0/OjJEPzc3NTQ3Pz05NUU0Kzc1LzI1MS4tLiwxPionKz1ccD0+MS4xZVtkQDE3NDdnWWFGKEA4bX1oXFY6iXtjQz2on5yhqbyhqq+qorG3qaW0squhrbW9r7O4vbu9t7bBw7/JxLnFw8DAucW+wbivtqirt7K8v7+0qq6yuJ+XrK2orpioqY6nu5+lrbOfq6KxsLOsqraztbytsLG1rLC1scC6xbarvK+xt6ysqaKxpZ6kqJ+jlo+Yn7Kqs6mqs5mdp5ualI2gpqS0rqehrKytsaeyq7Gpo5ueqKSelKCZm6m2qZeakpKfmZ6hn5KtoJqZh5eYjJ2anZSLj5aXmpempqOgnpaWl5SBkJWFe4+Tg4yXZ21zaHBzX0dZZlZEQ05YRFo5SEI1Pl1RaFxOWl1HW15dT01SWGRLS0NdY2BQTE1OWFdYUEpWVldMPUVVSkVEQU0/QUZISFFQQTtGREZLPTg3Qj02ODcxOT48NjVEMCs4MC8wNS8qLC8tKj0sKyUyKyo1SzEuJ19fYVYxNTE9YFZfOClDM1lVXGdLNYx6ZkxApJqfpKy2o6yopK6ttamus7imprC4xrawt7/Bwra0usW+zMW5w8G6wLrEuMG5srWsqrq4u7q+tauvsbeZmKirq6ucrquPq76eq6+xo6qfsa2yrq62sri2qq2usae1r7S6vMmyqrW0sbSvrqags5+aqKygpJWVmpmxoq2gpa+WoaSZmZKNoqWmsqmhprGsqrWkrrC0r6OZna2nm5edmZmsuKKXk5GPmZyhmJiUraGfloKVmY6enZqWkYqUk56apaOjoZmXk5KWe4yRhXuNi4OLk2xueW91fGFGYGpaSUhaWz17SkdFNkFiVWlbTVxhSltcWlNTU2JhTEtFYGFgUExJUFdWVU9HV1ZVTjpJVklIP0NLP0VESEhRTkE/SEhIRTw3PT46NzU2MDk/ODY2QiwtOCwvMDQsKCwvLSo3NikoOS4kOks1LiJUYFZhLjUoQ15RXC4rQS9KR1BbRzNjWFRLRZqWn6+osamspaOurrWpt7O3o6y0t8q6tLu7wL60s7fEwMzHvMS9t7/AwLjAvbK9rqi6ubi3wresrrK5lZenrqynpLKqlK+7pKyysqanorGzsLKxtbC3sqmuq7KmuK+1s8TFtqm1tauwramnorafn6axoKSUm5iUsJ6nm5+pjaminZuVl6WlpLanorCzq6exp62wtaykmaGsqJycnZuUqrmclY+PjJidopiRmKikoJiFk5eRnZyYl5eIlo+Xm6icpKGSlpKQlneEkYZ8hoKEjI1ucXh2fH9dS2VsXEpPZFw/YntHSThHZ1dmW0xeYk1YWVdVWFVpXU9PSGFdX1BKSFFWVVJLSFdVVk04TVpORUBGSz9IQkNLU00/P0xPSEA7Oj47NjswNDE8PTQ1OD8pMDcpMS4yKSksLC0rLTkkMDQyJTlCNy4jQU5IZzI3J0ZhTFYlLUIuPUVMUTwzcmtMRESRmaStpKytq6ajsLKyqrewtZ+rtbrJuK7BvMO3s7G1wsPPxMDCvrS9wcC7v7y0xKiqubG2t8C8r6y0tJ2hp7GtpaaxpZ6ytayqsrGrqKi0uay0srWss6yqq6isqbmtsrDHv7ikubCpra2mp6ywpaSjrqOpnJ2bmq+ZoqKio5Csn6Ogn6GppqW4pKu0tKSqq6isrrauop2jqKqcoJmakqS0mY+JjoiRo6CWjpWfopaVhpCVlJ6bmZaVh5eSlZmnnKCgjZOSjpF4fo6EfX19h4qKcnRzf35+XFNkbl5OWmddRkSWW0c6Tm1YYlpNYWJOVlZWV1RZaF5RUkxkWltUS0dPVFNOR0lWU1xOO1BeSkJESEpBRT8/S1NPPjpOTUM8PD45OjU9KzMyPTYyNDk6KDQ1KS8sMSgpKywtKiY1Ki8mMCkzODoxJiozRGQ7NipIZEhKKzpJPzNDSVMsPo9rP0hJkJupqqGpr6Sno7O0sLS1sbCgq629zLquwbzHsbSttMLD0cTFv8GyvsPCvL+4vcWorbestLi8wLGssq6ho6euqqelsaOrsaquq7Gurqyrsrqnt7GyqbKpqqalo626rKqwwrm0rLmoqaitqaewpamkoq6qqKKenKKslaWdl56Yq52hp6ihrKairKy2sLGgqaKfqq2wrJ2epqepmqOXmJCgqJiGg4+Li5+gkIyOl56SkYiIkpahnZaYloaWk5OXpZydnYySkI2Kf3+IhH13gIeFh3V0col2bF9ZYG5jUXNyXEs8hHxGP1d1WGBZT2NcTVVWVVdRXGJfU09PaFhXVktHTE5SSEVJVlJdYzxQXUQ8RkhIQkc/PUpQTDo+T0o9OT89Mjo3OyozNT4xMDQ4NSg1LyosLjMwOyksLCclMjM0JCwyLTg2MCkoMTxeSzAuSWdERjg8QjA1RUtYMUCUXUBORpWXrKehqbGcqKivtay4ta6ppKurvcm7sL64w6+wrLLExM7Ow7+/tMHExLrBtMnErK+3rrO6wL60rq6spqepsammqLKmtK2qsK2tsa+yrLO6pLizrKytp6ugo56wt6uqrbm2pLW1o6morKyqrKCopqexsaOmpaGhq5aqoZSboKWeo6Kqo6yinqaxtqysoqWjmqmrrqmdoaWkpJmfmZWPmJ2TgYKQiYWdoI2Lj42bkJONhY6ZpZuSkZuLk5GRlKOam5qLj4uLfIeBgoJ7dYGEgX51eIujh3hrXmBuZ1dmh2ROQGeSTERieldiWFJlVU1WVVVUT1xdYVZLTmlXVlZJSkhJT0JHSVNRWW9BTVhAOkpHRkVHPj5FUUg4Q0tFODdDNzI6OjoqNDk/Li80NjMpNCsqLCsuIzQuLSsmKCs3OSomNis8LTIsJjA2WFouMEpnQUE8PEMrOkpPXjREhkJJSUSXka+koqmvmKmorbWqtrCqpKupqbzBwLi5tLy1prKvxMrL0b/Bu7jAwMK6wbrCxK6xtbK0vMG+s7GvraysqLeqpq2wq7iuqLGwrrGrtaq1tqe1t6uspKmqnKSes7OoqKSztJ+1raGpqKuoq6afq6uoubapqqmpoamfrZuRqaGdoKOipqKqnZumtK6npamipJelpqeqnKKjo5+ZmJ+Rjo+YjX6HjIeFnp6IhYuLkJCSjoWIlqOajo2akZKQjpKfl5mWjYuEf3SHgX9+eHWDgHp4foCInY9wcmdncXhcYXSIaU9dmFZIbXlVZFZSYk9MVlRVUU9YW2JWSFBqVFZUR1BZVUk+SUhPUVB4TU5WPTxLRD9AQTxAQ1VDOUFLPTU7RTEzOzk3KjQ6PSstMzQxKjgqKisqLCkqKC8qJiklMzssJDIpMjAyMSUvMlJjMDI/Zj1OWD9DLD9MVF8vSWs3UkY7lY2vn6WqrJmqpK2usrSvqqWvqam7vrvBsbC5raK2r8nHyNHAv726vMO9u8PBv7+vsrOytr28wbGys6uzqaW1qKSss7K4r6KttbGvsbmquK6qr7erqp6qq6CjobWtqaGfr7KhtaqeqKeqo6qhoaytqL2vq66toaenn6uZj6+imKKgqKaep5uYqbCpop+soqGSoaKjp5iaqKWYmJidj4uHlIh8jYaEhaSWhoOCjIeQj5KFh5WhlomSnZGTkI2RnJSXj4qGhnh0gX99dHh6gXt0dHtqgoijdmleZWyBdWeIi3xSV3BeS3hzVGRTUV9NTVNaZ05NV1llWUdTalJRPkJOUWFROklITFNJcVFMUzs8ST87PD07QEBXPDw+SDczQ0IxNTo5My01OjopLTMxLS02KSgrLSw1MiMyKScsJS47LiYxLjAtMTQlLDBNaDozOF89YWQ/RjFDUFtbK0hQO1lDNI+OsJ6kpaqipaOsprSzsamksKequL7BvLCouaqnrrDJx8jRwr3Avrm/v73JvMK4sbC1srq8ucCztLytuayjtaanrLG2uLKmp7m1rbS8r7ulra22qq2cqa+kn6Wsq6icnaqypLSpmqqnqaSpnaOpqKm9q7Owrp2po6Cum5qyopakm6Wkn6WamaeqpZ6aqaGbkZugpJ2ZlqipkZmakpCLgo+FfY+Cf4iej4eAfoyIkpCRhYKUm5SGk6KNk5GLkZqSlYeKf4Byenh+fGh3fHt1cXJ+aYZ6hIhkYGhjcoV7bWh5XV5WQ1h7bVRhUFJZS0tNcHRdSVpbZ1pGVmdPQz5LTkRDQTlIR0tTP2phSVE4PUg8PDw+Ojw/VDY6P0M0NUg+Mjs1OTAyNzw1KC41Ly0xMSYvPktJMSUaOTAlLCwwOS8sLCs2JzE3Iy0vR2pJMTRYPWZiQUo3R1NgVSo9PEZcQCqOkq+Yn56ppKOhqqS3srGkqbGnrbnBvbWwpLmsqKiww8nJzMG3vb+1uMG6yLXDtbSztbK9ubq9tq65tr+torOmqquutbe0qZy6u6ixv7K6oK+0tqmsnq2xo5ylp6mjnZykr6avoZ+rqaeiqpyjqaCtu6eusa6hqqKjrp6erKaXn5qhopufmpmiqqKamqOjlZaTn6GWnJalrIufkY+RjIKKf3+PgHqalIyJfX+Mh5GQjYqGk5iRh5SjipGRh5CZkJOBiH15bH12eXhie3pycHFzeGqCdWqDZ2NoYW5zjm1ianBgb0JdeWtWXk5RUUtJTVNZVk1cXm1XRVhhT15QSE1ERjs3SEVLTzxyaEpLOUFFOzs9PTs7PUo0OUI8MztHPDQ/MTgtNzg7MigwOS8sNS4uPS0qTD4qHTQ5JicuMzQuMCsvNCYsOiQ0MEFoWjEzUz1lX0RMNktWZE4pPTNSXT0jkZermJ+Xp6Ohn6ejt6+uoq+wqau5wrqzraC5r6uns7rHysi/t8G+r7S+t8S2wrKwurGywLa7vrequbi9qqS0pqiqr625sKiYuLyjrb60s6GuuLWnpqiws6CepKWooaSZnqyoqJ6gqq+noKaXoqigsLifo7GvoauhrKScpqapmpqbn6KVnJuZnammlpueqJCXkpidk5mWoamQmomNkId9h36CjXx7oYyNiHmEjYaLjo2GiZOajomVn4mQlYOMlo2RfYV8dHB8cXN0YHl4am9wcXBqf3NkemxoZWRiZoeAYFtyanFNToBpWFpNUUxLSFBSUUhNXF9vVEVZWlJnT0hLRUY1NkhCTEk1WmVKQDZFQjk6Pj0+OjpDNTk+OjNARjwyQDIzLzo7ODMmMjwwLDg1QiopLUMqLDQ7Tk5AOzczLS4rLTcqKjwlNTM9ZmQyNE0/ZV1GTz1SWmdIKj8wXVs1KJWbpZiclayfnqGkobersKO0tKmpusW3s66guK2urLC1xcfAtr/CubC0vbe/u76wrL6ws7+yvcK5qru6uKeotainq6+rs7ClmLu2pKu6ta6esbivqaWnr7KcoaSgpKShlpuvpqGfo6ivoaCik6Skorewoaaxq5+so6+XnKqlqJ+Ymp2jk5qbmZylqpqbm6SUlJeVnI6Tl6KooZCJio+GeoN9g4p5jpeKjYd6goiEiY2PhY+TmIyOlpmLjpZ/hpeMj3mBe3Bydm5vdF94d2VtbGxqaoRvZnJpa2ZoXmR0gWBba3ZpWkp/XlxYT09LSEhSVUczOV1ebFFFWVVZZU1ISUVFMDdGP0tCNklKSDs2Rjk0OT49PDk4QDg7ODo3QEk+ODw0LTM8PDc1KDU+MSw7QTEoKzY8IjhSPSoxMTM+RDUsLSc0Mio7KzEzOWNtNzRHQWZbSFREVV1oRC48MmRXLDKUoaGXlJyqnKShoqC3qq6gu7ilrL3FtLGvo7WwrKyutcPDvLO/urexs7m4ure6r67As7S5sL/AuK29urWlorKpp6mxq62xoJm/taSntbWonrK8qailqbCsmaOnnKSllJihsaWZn6OoqZyin5OloKS4qKSnrqaepaGokp+ooqGhmZudn5Gam5afoaqbmpiglJCTlpmNlJOjp6SQiYmOhnmEeoSFfJ2NiYqHeoGEh4mKkoWWk5OLkJaUjY2UfIOXjot3fnxsdHJsbHNhd3VpaWpnZ2+GaGhpY2ZpaWBqY2poXGZ7Y2BTdFRcW1NMSkdJT1NAISpoXmpNRFdVXmBLSUdFQy46QjxGPDZLUEQ4OkQzNTc9PTg5NT86OzQ+OEBLPT45Myk4Pjw6OSo2QDMuRTQoKyw/MC1OPy4rLTcsMTE5NSwmLjUtODA1NzZgdEEzQ0RnW0tXR1VgaEIzNzlnUCcynaKkkI2kppqdnp2jtK2nqrq2p6zEwbexrKO2rqeurra/vryywbewrrK2tri2tq2qvbOusrG9v7euvLuxpJ+2qqWls6iqrZ2cwKunpa+yqay1u56oqauxpZieqZ2mpJGZpqyimJ6kqaGboZyWn52ntaawqq6hoZ2eoZSgpp+hoJqbmZuSmJyTpZ2soZeWnJSSjZWXi4+Ym6mfkYiJi4h4hXaBgoGdh4qCiX1/hYiHhpGElpSQjpCRkZGMknuDlY6Gc319Znhva2prZnVza2NnZGR2gWNlZmZmampja3NbX1pdbWRhTmlYWmBWSkdIS01TWD45X2xpSENVVF1bSUhGRkEuPD85QTg5UkZANzpCMDM3PTc2OTI6PDk3OjlETT1CPDAqPEA7QT0tNUIzNz0rKiwwQipKSy4vKiszNzIyKDU3JCs3LjcyNjg1XXlOMj5IaVpMWkpWYmZAOjNCaEglNZqjoI+LrKGYl6CWpLOxorK9tqGxxry6sbGktqyqrqi4u7q5rcCyrq6utq6yuLOprLmxr66ztrq2sLi9rKaetamfn6+jqa6cosCgsaOusK63rbWera6traKanaappZ+Vmqeln5mloqidmp+blJyerK+muqiuoqGam56ZnqSapJ2Xnpebk5ifkqiVqqeak5qakoyVmY2UlJqppo6NiomOe4F0gYGKmIWHfImJhYWKjIqShJSbk5KPkJCWjpB/gIyOgnCAfmZ5bWhraWZxcmtcaGNjdIFiZmdqbmxnampobl1sbHRwYVRjaWRmWklGTE1PWVFQVmFlgVVBV1NZVEZIRkVALzw9Nz82PEZOYTg6PzI0OUAzNzgyOD83PTg+RkpARDkyLT1BPUE9MDVAOUAxLSsuMzw7SzYvLissLTI0OzYjMyopNi41NTQ2NVp8XTE5S2pbTVtLWGRkQEExSmZDJzSRoZuNjrCempOhmqmxr5+5v7WgtMK7vbqxpravqK2ktre2tqy8r6yqq7aqs7iuprO1sq6psLa2sbO1uqapn7WonJ2ooaismqe9mKyjrq+1taysn7Gtr6mim5yiq6iclJympJ2aqqKklpqfnJCbpKqqqryfp6SgmJqZnaGPa6KWmZxwgpWao391kamnnpSUnpCJl5mAloqhkHmHlIyDbWl+doNxbIaLhn2FjIdwXmNhZ4SYhWuLj5SSdHeLhH6Dj39nhoBndWhlV1xoc25OUGpjZ3OFaF9lZm5tal1gYYqPhIRmTktEOUdUZ15KR1BQVVVMSFNhcHRmRltRVVBGSEVDPjE7PTY9NjwzZlw1Ojw3NTtENDg2MDpCNz86PkZMQ0IzNDM9QUBAPTI4QEU9MSwrMDg9RzYwMS4qLiovNTY4LCMxJzIxNDoxNzVYgWwxNk9rW05cS1tmYj5HMVFkPSoui6OZhZWwm5uToJuqraqjvcWvqbjCuL28rae2sKWro7aysbKwua2ppqy0pq+1o6m4traop6y2sq60rbOhqZ+zqp6go5ulppiruZSlpa+zt62upamtqqyloZ6coKemm5egpaWbm6emnZOfn5iQnqippLawpKOinZaYl5ejiKCOkpmGoIeTnKB/pH+lqp6SkpqSiIRyeI2OhYihdoiMaZeIZn1zeKBviIeDfo58f6GgoJmAfIeedIeOdZuKbIeBg2xoZWN6bHFhU4VtYmxpmHFYaXFwiFheaVtsbFuIcW56coVnhoRaXkdOP0dfTUVSVlZRUVJXVWdeTVdJUlJQRkdHPjw0OT05PDc7MDw8Nzk5OjY9RjU4NjA8Qjs8OT1GUUc9LjU8O0A9QD41OUdBODIpLjE8STkvMDEuKi8oLTQ1ODMlJjIxMTU+MTw4WIN1MjVSa1tOXExcZ189SzFXYTcwKIqmloOcq5yZmJ2fqqqnqr/DrrG6vbfAvqqlt7CprKWytK6vsraqqaWwraW0s5yttba1pqeos7CtsqeunaqfsaefoqKZoaGarbOUo6Wltb2mrKerqqyopaGgmJ+mo5mZpaOkmJykqZaUo5yUk6OkpqG3pKSgo5iVk5eSnIivkJeUiamLlqGchbGAo6ydk5mdlHmC1KiAh5XBm8d5eLGlt5dkgMCcv3mEhHmRhHyQkJHKcpe8nMV6crWmu5B7gGyWsauweGhrWLGubmVpvJK8bmd6b3KP2H5Ta2O2sn+BcpV0mqGqkFdPV2JQVk5GVVtYUVBSjVxXW1FBXURRTkVHSTw8NTc9Ozo5Oi49Ozg3ODs5PkY2Ojc0PkA+Njk/RVJJOi41PjtCPD9BODpKPjUyKjIyQkUvLjMyLisvKS0vMTg2LSAvNDE2QTE9OleDdzIxVGtcT1tNXmdcPkwxW100MSGMppKAp6qfl5ydpayyqLDCvbG1v7W3vsGqp7OsrKmnrrOpr7WzpqemtKWnuK+cs7K2q6Wkp7GurrCmqp2no7CioZ+dlpqenK2rk56in7S6oqqpoa2upaGdmpqhp5+Xm6egn5iep6eRnKealJ2hpqKhsaOfn6OWlpKXkpmFr2tqio2qfmaDlYatZHCdnZSZppRxrqGkfni7fWuhj3axX2q0W6WAZZyRYGaCe2Z/anhrqWW+cmemjHWxanyxeHSSk2NtbaduW4SgRWhmh5ZFdZxgfmd8pKeCWl+Lq2mAlXh5aqc3Sq9cWFNsZFtLTlhfXFdWO06JUFdXL0lUU0pERUY9PzQ2Pzs4OjkwPTg5OTk6PTxEODs6Nj1BQDY8QEhRRzkwNzxBQz5ARDhARz0xMy0zM0UzLi41My8rLyguMC46NS8nJDIwM0IvPTtVgnYyLVZqXE9ZTF9nWTpNNV9ZMzAbkKKVgqyopZ6jpKqxt6y0vb+vtsSyt7rBpqmwq66oqa+uo7C6rqOkrbKjqLionrOzsKOloKqtr6yvpqefo6Gvm6KalpWWmpqspZaboZ+0s6KrnKKtraCdmpegoaicmJ2jn5yZoaakj52imZehn6qepqagmp+hlpWRlpCahbWbtXiFqZm1mXaGs5u3fpOWlqmUf2uBpnuChoiSlJJ3q2drsVyreo2GlHSJco+GgH+IkJd4goKLmIuDoI+EsHZ3n3Fra2x8i06kWEhiYpl+Y2imYHlydVOTh15QqW1jcX6HgGKcLlGhb1tTa2hgTEtbZFhcWkI/snlYWEEjTWhGQ0RBQEExOT44ODo4NDs6OTw5OkE6RTo6OzY6Q0I4PT9LTkc6NTpBRkJAQUQ8RkQ7MDIwMTtGLDAuOTQwLC4oLzMsPjgzMR8vMi1EMTw8U31uMytYalxPWE1fZ1g3SjhhVTUwG5WflYizpqahr6mns6ypu7bCsLvCrbi2v6qsra2tpq2xqaCuvKqgp7Sso6u1pKays6ekop6nqrKosKelnp+frZWfmJSVlZedq6CZmaSotK6iqY+pqKqbnZWYoKSnmp6cop+boKOko5WbnpeZnaKpm6aZnJyioJeTkZOTnYPVk5m5cLDBfsaGfNaUm7t8mpWlj42djaR7joekgqWCeqx5j51Wr3qIfp9quVu6d4eEfaaCk3yYeql4jZ2Pe7FujoR0kbyFb5RQr6fFilGgemNgqmJzcohtl4hgU7W0yIaAiXxjpDNCnXZdUGppZFBAWGdaZGFKSE5uTlxST1lmWUNEP0U/MD08NTk7NzQ8Ozg9OjxDOkY6Oz42OkBDOzZAT0xIPDo7REhDQkNEPEVGODEyMTFEQy4vMDQ4MystKC4zMjM5NzEjJTUqPjM9PVF3ajYqWWlbS11PX2ZUN0c6YVE3MSWbopSZsqioprSqpbSppLy3wbC5wLG1tLqztaexr6Kwsqafrbaomqe5raOvsaCztLGhpJ6fp6mwqLSopJudnamVmJeVl5WWoKicmZanrbCpo5+PraKolp6Xm6GloZihoaGhmqGippueoZ6UmZumn5unlZucn6GYkJGUkZ2Ism5otXGrh26OpnK0c3K2e5qXpIuPnY2jf5GhpX6wdoOR0tJ2XK57hX+kb5uqpmuHhX2tfZeZjnuwcpKdjnizZZZ0hJ5vnmaUUsiLWsJcn3liX61gdnOHYpeIXlnKnW+/gXVNS7VTVcZkVFFqY2ZYQU9rYGxoUFVISTk9VlJaV1hJQz9KPDI/OzU9PDQ2Pjs3Pjw9QztHOTtANzs+RDsuQ1JKRz4/PElKRkNFRD5ISTkxNzQ2QT4vLjI0MjUyLSkuMjYsNzQyJh82MDs1Oj1QcWg5J1dpXEJPVF9lUDVHPWFNNjIwoZ2SpbCso6u8raa0pqe2u7yyur+3trO5ubKktLOgsbGinquwpJemua2ksbCctLiqoKadoamksaisqaSZm5mmnZWTl5iSkqGmn5WSpaqwpqKWk62gpZKUoJukpp+Vm6amoZqin62ZoJ6ekJWboZ2cppWdlpqin5WYlZGbhax7d6h2o42IhqlvrYqCp4OYmKGJkpqLon+TmYmuhX+Cs1xys1KufYKCpH9y2H54hn6PnYWamnavhomRnId3tGGaZZqCgpRsklqwWEuadZh5ZmCtXnZ3iGiYiGtdr3eVno94bDV5yK6yX0JUb15nYEVQbV9wbVZWTS5mZGlTWFE7QURATDo1PzkxPTwxNj85OEA9OkM6Rzs8Pzo+PkU5LUVVSkVAQzpNS0pCSEc+R0s5Nzw0Njo+LzA0MzMzLjIuLjE4Ki4zMiUhMDM3Njc9UGtlPiZWZ1xAPlZfY042R0NgSTo5OZ+elKC5sJe0wq2os6ipsrq3s7i+ubextLu1pLeyn7Osn56orJ+Up7WrqLCxq620pJupoJ+oobWmpqmimZ2Uo6GTkpuYkZShpJqSkKatr6ahlZmpn6KOkaGZqKWhlZmlqZ2cpJ6snaGdoI2TnpqdoZiZm5aXoqCTl5CmnoapfX2leKGOjYKqcK2LgaeGlp+hiZeXiKOCkYiUqnyAi514b7FaqIKCiKB5dNmAd4h0qIGOm42SpHyWkJ+Ee7JenGSgfoOVbJJcq1tak4CRf2hnqmRye4FrmIdzXataiaCOa29lT0pDoVxbTHRdYmdNW2FfcnRfS1Y3SpuUWEdFPUdGQU0zNUE4Ljs+MDVBNzhAPDY9PEY/Ojw2Pz1CNy5IVkpFQUg2S0lOQElLQEVOOjpANC47PjEwMjE0NCsqMDUvNywmMjEoJCQ2NjcxPFBlZUEmVWZbPzJVX2JMN0ZJX0MyPziinpqav6uYtMKuq62ppbSwt7G1vrm5srC2uqi6tJ+vpJ2kp6eek6qwqa+ptayqr6GYoaCmpKS5oqOroJabkKGflJOemZOXnp6PjIuosK+nnZebqKafjJKjl6irp5WXqaeenqCjraShnqKNlKGYn6CSnpeclZ6hlZaOq5yPrm1ytHOpi3WKp3O0eHOzgJGko5Kcjomkh5B3uG+Me4uiamu2WqGFZZeXaaCip26UcrR0k5h/smqFkoita3WzYZ1mom+Hk2qXXK1fTaF8h5FSc6NseX9+b5iHcVyvVjycd2ZUb24uXKdPY1NrZWJtWmNdYXB7Y1RaUj4+bW8zQ0JAP0w5ITdANi47QDM3QzU4Pz8zOzxDREJKRk1JRjYySlRLRUJJNklKUD9ITkNGUD08RTUwOzswMTAvNzUsKyw0MjYvIzAwLCwdMjg5LzlOYGVEJ1VkWT4vVV5hTDVGTV44MUM4ppubnbuhm7LAr62rrKe3qbevtcC0u6+ut7aqwLWoqaCapaOhnJGqqae1o7Korqqgl5ynoKWruZ2jrZuWmY6kopWMnaCbmJyfkZOUqrawqJmUnKypl4yTpZmlraORlqqypJ+epquxmaGjkJmilqCblpyXoZOdqZyUkKuZh9SSmrtzsMOAw4Z+1ZabuHiIkJiMl4uMp4h6o7Z1fXd2woKasmCDunnAfHW4Y7WBjIepfZWBrKlxe390vIinoGmdYaaOr6J+jHSHqn2+b3O8dLKDdXiBim6aiHFujaR0vV53fVphebxrWlZcanleamFlZ2NteG9aXFpEQUBzQENGKzVHIic7PzEwPD83OkI5OT1DNDxATlpeYGBfX19aUFBSS0VGSjRITFJASk5FRk9CPEU4ND05MDIwLjg3LSouLzE4MCItMSwzHiw8OjA4TFhhRidUY1g8L1ReYEs1O0xbLTdBOaeanqK8oZeyw7Ctqqursae4r7bEsLmwrLmurcCxq6OinqOhm5uQqaSqsqO0pq2ln5aaqpmnrLmdo62YlKCQpZ+SjJyinZidmpGVkq+5sqyVl6Onp5SQlqScpK2ekaCoq5+bn6ijs5+jpY6ooZSimpyYlaOYkK+gkpSpnoSQmLZ/j5GMt5V4gpOatXdta25zb3mQhY+KdJ7Bu72ZeoGxqHCAc5G5g3yGhoyHjXyKh42XfKS7ub2cdXq0o3R2l3Z0sHWZnmaGao21dHJxd7aMXn96fYlog3lueWKLrHB1hX9YW6dqRWVaVGZgY15jUWhncW11Qk5QTUQ7Wk0/SjM7MCA4PjsuMz1BOTk/PTs8QzZCVFlaWltbWlteYGJgXVNHR0g0RElUQktOR0VPRj9HPDc/NzA3MC85Oi4sLy0qOC8lJjIoNCQoPjcwN0xUX0cnU2JXOCpPXl09KzpWVic+OzynnqChv6WWtMO0rKuorKupuq6wxa60say2prS4rKmhoaWeoJ2Zk6ukramltKenn5uWoKOdrKS+pqGqlpOckKGakY+hp6GTnJeTl5SxtbetmZ6kpKKLkpKmm6Wqm5appaWcmqGopaekqaGSrZ6Wo56Xl5edno+vqJSbpqGNan1pm6Z4h3J9mY50eWSHe72+wLpvk4NylYdhc2paXZqJYWOIjpVrYICVY22dd2KVa4CalZRlXmBjcJqKaHKLfYWVZ2p+cnV4fX5iW3d0gWhQXG6DfXyLa1hre4JySkpvhnBOdE1FWF1nYUxaWGdjX09bbnVpclJQREVOO0hJPU0/MiwyQT84LzU/Qzw5O0A7PUM+UlZWV1laW1xcXWBhYWFgXFVHNURGVUVKT0hGUElJSDs4PTUxOi4wOzouMC03Nj01JiIvKjIsJTs4LTdKUl9JJ1NgVjQpUF9MKDM+W08nPzI+qaCoosKjm7W6taOspa6np7WxrMirr7Gps6K9sbGmoKKonKKbmZmspq+jo7SppZuXlaGbpq2ovqeopZSTm5WfmZKXpKiokJ6RkJicsLK/rJunnqeiiZORqZqoo5qarKCjmZujp6yjoKujmrGblKeglpSdn52XsKWXoaeZm5CcnKKjmKWhmZuZmZmPlYFnbX1xd5KXlJKFi7WqjIWXlY6KjJiWh5SVioSTlJGJjpKUmJSYlpqgoZqclKCdjYJ6pYZsanyRfIB1ioqBcYJ4eXZ2ioB8impzgXWDdWV3fXdrb3ptYGNdcGhNWFpmamBXWnB6bm1mVE9GUzlPWk1STygrOktCNjM1PUBBOTpDPjxFTlNTVFZXWFlaXF1gYmJhX15eW1RLQ1NHS05ER1BMT0k8OjszODksMjs4MjApNklSTzgiKSsvMiM0Oyo3Rk9bSiZSXlMxMFReOis9OFxLLDwtQLOhs6LAoaSysragqqayp6WwtKrIqqyvpLSlwKezoJ2kpJyjlZWgqqeso6K2q5+Zlpafl62qpcGeq6OVkZuXnZeSk6GenaGnk5KZqKeyxLCaq52rn5CXlqidqpucn62ZoZudoqSvp6KlqJ+umJennJmaoJ6dnK+gnKGmlZeSl5OfoJWinZegjpaTioqNjpeukHyWm4OSgouqqYWAmJeJg4+eiHqEkIeGmpKIhoqWj5uXjZGYnaOWmpORnY1/jmahs6+FioR2e5KKfXZ5em9meZCBgIlrdYF6iHJpc397doOHgmt1ZHlmYGplY2Rma1lse3BpalxTTFBEXlRGQD8+LDRARjs0NTs+QTs8Pz4+SE5OT1BTVVZWWFpcX2JjYV9eXl1eXVhWSktMQklPTVJKOzw6Nzg2LzI5NjQuKCYkLTEuLykrKjclKzwoNkNNTUQvVF1RMDVNWzE3RTRbRzU8LEC0oLqvv6yrrrKxoKumsa2irLOvxK+qq6Kyrbyjs5ufpqKhnJmXqKWppqSlsrSelZSdmZmwpa6+oKyikJGdmZmUkZShnJeonISfqqujtMi0n6qkq5aWl5qmnamanqOslJ6fnqCpr6qmpKyirpufoKCYpJ6cn5yvo5iep5KXlpyRo5iXp5yal2WCknxlfo2akGN5jm1pa3uSpKpqZJqXfWeGimVlaWh7jqGPbGiNmJGjd2tqi5mjnplzbG56g42HelhlXoaDXm2LiYF2XGhzd3eSgIeCbniCeIBzbXmEdHaIiI+DfGuHWV5sdWRec4lpa3xxa2NeUk5YSWRYQUo0Pkc3P0ZENzE8PT9BRDs7REdISElMTlBSUlRXW15gYWFgXV1dXV5fXVpVT0RIT0tTTj0+PT02NTM1NTU0KiYmJSwqJS8qKyc2KiQ7Jy9BSltKLzdaTzYpRVkvRE8yWUM7Py49pZ+6vLmvrLSxqqWora2wpq2tsLywqaajra6wnqyWoKOdopmZpqqcraOlqKmyrZ6Vo4+ir6W2uaauo46OmqGZk5Kan5mZpJV7pa2iqLTEuKWip6+fnpSeop6jm6KpqZKfoZ6gqrCrrKSroKqbp5+noKuVoZulsKSXm6qVoJyakaOWnamXnX29g4hytHKEnYataHi5xLhxk6KjeqWZmHOrgnzLwMC7cYyiiIOffZaYiZ3AvYKXnZ2NncLBfIJ7ko2aw8B+bKWyboyBb8p6f5t3kYOOgXZ5gYB5cXp/h3B3hYyTeW54lGNmX3lkYGWCY150aGxkY1hMV0lRWkhPRDJJRT9EQj4vPD8+QEE6OERDQkNFSElLTU5QU1ZZXl9fYF9eXl5eX19fXVxTTVBHVU5BPz89NjQ2ODI3NiomJSMpKiYuKyopMTAfOSojPklbTCojQlAuI0ZbM1BZL1ZBQjsvOJajucO0sLDAqaiUo6+psK6tprO0r6mlpaawq5+rmJqin5yaqqeinayipaikpLSknaKSpq2rt7OnrqKRkZmcpZKRn6CYm5+dh6aspKutwMCxoamvqZeRn52imqGjqqOToKKenq2vqq2npKSnoaalna2okaSaqK2pmpypm6uglZWklaCilpx+zpR4eqSBeZWWm1+uj16Op4GioHynlptzq4OAr15jjap7p4eFoHWXk4izY4KrhqGNjbNqhK50fZeIt2GCrVqjzW2QdXvae3+ZcH6IknZ+ZXuIdnZrfIhufYaRkX9tg5BhcmxwaGBgeWRccWhqZGdgUlRTV11LT0M1QUhERDg+NjtAP0E7PThAPj8/QkRERklKTE5QUk9TXF5fX15dXV9gYF9fXVpXT1VKPT8+PDU0NzcxNjQoJyQhJywmJi8oJiszHTYwJDc7U0wrLC1LMCc7XDtMLSFQQEY0LjGtwsC/tbSwuJedkaOqp62zq6ayrKyqoqqnr6mgp5uZpZecoq+foJ6op6OmoZ+wrJqdlaeurLCqqKyflJKbn6STj56kl52no56upauwqL/Hs6ipsa6Wkp2bopefqaqflaCfnZ2tr6msqp2oqKSiq5KsspaloqqqnaOmpKGvn5GYppifmZOTkZegcYWMl3WFqIZxsX2ecqx+oZ6BpY+ed6qCfa1/nHOtfquHhp92mZJ7fJd+qoiijJGMnX6reoiUkJ+Ae61WnMR6j2+SwX2BlW11b4xtZXZlhm9hd25yb4mKko+EbpKRZnB1dXFhZ21lX29paW5nZFhTXWFaUlNDOUlJQEQ8PjxARkRDRUE9PDw8PkBAQUJFRkdFQENJU1dZWlxdXl5cXl9hX15eXVtaUkM+OzkyNDc4NDUyJiMfHCAxJyAxJyAnNB41LSY3PVdKLTwoPjEpM1ZARiEcRzpDMS4rsNPGxrK0oJ2jjqOioqyvtq6osKaoqqatq6umoaSdmaGVoKWrn6KloKioo5+dsKyXmpapp66sqKeonpeUmqOhkpSgrZudpqKvrKSstaq5zbKtpq6sl5WcnaKYnq2snZegmZ6fqbKrq6ucrKuko6ybr7GiqKuupZilqqipsKGRlaKkmZORhKRqpHWJeql0erJwgqaKmYxxiKCah6RgYFKrhH+ug5t2rYGnhoafepmXhntmgKOJpJmGgqN9qX6BloeuX32pVZ2ikoF6op+Ae8OvxYtyr7OzuXFiqa/CdGiMjJiOgm6clXFuenh5cG1nZWVycGZ8aWNdV2BqWFlVTExRTENDQUI7Q0BAQkk8PTo5Ojw9Pj4/QT04NjtETFBSVFZYW15eXVxeYGFgX15dXF1bU0lCNjc5OTY2NCwmJCIgKCciKy0iJC4hMy0mQERXSCxHKzU2KjFQS0wjIEE5RDQsJ8PJ1dW/oZmrp6Cvop6wtLCuqayip6aoqquppKafm6Senaanp6OcrJqirKGjn6+inJuTq6S1r66gqJqdlpSmo5CaoqifoKWcsKakqLGstsiytaqsqZaRnZyhmJ+ks52aoZSdn6esraWwm62qo6KqobOtoaqzsKGaqKeurrSikpWippiakXuqbJ6Eh3WreXywb4Kki4mflpaflIHSuLS4yYCBsl9glKmDpImHoHqYlpp4qsl0mqSVqKmRk5qMgJyKmsbHeGahgqVzgZ+Ogn2vXXC0YrB1S6OGbadHgpNkjpCeknxxmZWBcXx1fnxuXGZqc3FmgWteYVlkbVxfWUlOTEtFREFCPkE8Qj9KOzc5Nzk5Ojs7OzMuNjxBRklMTU9RU1daW1tbXV5fXl9fXlxcXFxcWE1CNzU2ODUvKSglJiUkJiksNEVOUFBNRktKVkYqTDAvPS01T1RRHRw7PEYyLCSnpMDGuK2osq2spaKcsrisqqClmqilqquppp+mppiqo6Cuq52moKyanqmlnae2n6KXk6mqtrKtm6WcoJSPpayRmZynoqCppq6hpKepsLXDsrOqraiTiZedpZqho66ll6GVmZylpq2csZ6vqaeerKO3rKGxuK+dmq6msrKyo5OWp6KZno6CnU54moF/n3qEo32DpISHpp6cnpOEuHt7ebmCf8zGwrZ4m6GQi59+mpaXinaemIqlmKSof7CFnYaghKx9mpRipWykcI+EkIF9loJyrGCjc3GAmmC8fVJVdI6So5Z7fpSTjHZ8c4aAcVxubnhyaoFvW2RfaW5iZF5MTFFUQUlIRkk6OUs+QjEwODg2Njg3Ny0qNT09P0JER0lMTlBUVlhZWltcX19eXV9fXVpaWllVU09IQDg4Mi4sKi4rKicmP1FUVldXV1lYWFdVT1VGPEUzOlBbVBwbNj9ILC0gi4eZqaukq7mqrp+boayys6WeoJWlrq2uq6ecpqaao6ehs6+iqaeyoJmqpZSitaKilZehqbS4pJuinaOSj6GxmZ6bpqShoq+unKWoorayxLGtqa2pkYeQnKecoqScpZeemJqapqSrm7Cir6WmmK+ku6yhtratnZy0sbewsaWXnK6fo5yFj9G1w7d5h46FkZOQgKZ4lKF3jKCRhKWBinGqhoW0bnJqmaOclYqefJiZhoePc6+CpZuijaaLk52LlpCbbXGyXaVzk3qba5l/e5l8balho3Fxf59ic7K4aHePlKaYfY2OlY15fnmQg25qeWl5cm+AdV5lZW9tZmdgSltYWDxISEBVNEBGPjwqKDYzLjAxMykmNDo7PD0+QENFSUtOUFJUVldXWV1fX15eX19dW1paWFVSUlFGOjIyMzAvKysoQFFSVFVUU1RWV1dYWFdVVVZUUU9RW1UlITJBSCQpJZNzjYqtv7+8urSelqelrbWhopmVo6imrqusmaain6agobano6mnsaOUrKOOpa2jnZCamqqzs6ScpJypkZSXrp+fnqajnKectZmiqqS2q8OwqaupoYyEjpyioKajlZqanJmbmaelqJmtqa+jpZutpr2slL2wrJ6hr7K5qrKlmqiwoqeXeaiQfXywd4qApKWInG2yb6CHrXyhj4OnlZiArImFroWflKqgoZeGn4CZlYB7kn6rgJ2aloureJ2gkoqUkoF6r16jgX2mp2OdgHyXc2qvXaVrcIWZXWBbjKBtlZGmmYOWjpmNfHyEmIBrbn9jf3RugHphZ2ZxbmhnaENaYVs+S1UzVThCQkM3JCQzKycnMywgLzY2NzQzNTlAQ0ZJS01OUVNTU1ZaXV9hYGBhYV1dW1pYU1BPTkk4MDUyLiosQVRWVlZVVFVVVVVUVFVUVFRWV1dYVlVVUUhGSUojKCi9k5qDqcbCtsGzn5qsoK24paOOm6Sjn7Cwqp+kn52tmZ+5oKOroK+pmq6hkKuopJaJm5CusKymnqabrJeXj6yhoJ2loZmknK6Yoaint6nBr6WppJ6LgI6bmp+mnpKVmpuUm5qmpaWbqqytpKWfqqi+pJbCq6mioKuyuKmtpZ+yraeol3avfpCLnIWHfbqtipllsY1lla19oI+DppWagayKhLCFppqkoaGRhaBbbGqBs2B/rXt7g4GxbWdvmZiMiLFbfrVdpIRryKJkn4B7vFh2tVmyfVKugHqsWIChbZiQqJuMmJKZmHx6kJ5/ZXV/Y4V4dIB8YmpncW1nZWZPVmRcQVVfPkkoPjo9NCEiLCUfMi4gKjEvMDQ1Nzk6PEFDRkhKTE5QUVJUV1peYF9gYWJeX1xbWFVQTkpHQzU1My4vQFVaWFdYV1hYV1dYV1ZXV1dXWFdXWFlaWltcWFdXR0I70p+zsbe9urPBs6OcrKaktqigipqgn52zs6mfo6CetZmgtKiqrJ6vrZ6sm5WvqKKOiJuOr6yop6Gmma6SmI+omaGdpJ+Zo6OmmaCiqrOpva+kqJ6dj32Lm5ahoJmQkpqckpqYqaCimqmuqKamoqWpu56gxqakqKCqtLSrraWeuqyrq5SAqZKjr46bf4ekl5mQgoC4w7qDjpyShKeXnIKsioKviKecm6aqkH7VvcKqYqO/vX1+o4KD17q4tYWVk4Oevb6EbKOCb6uEbJx/erKwx4Npq7C9rHh3or68c4CWjqadkZuSmp97gpKce2R+fGWOZ3mCe2FsZWtqY1BhW1NqXD9VYkNOKT06NC8fHyQfJTIgHSQoMDQ5NjY3ODs+QURGR0pLTU5OUVRXXWFcX19hXmBbXFlUUU1IQz89QT81PVNZWVhZWVpZWlpZWFdXWFlaWllZWFlbW11dXFpWWFRXWryVs7Oxv7myvbKhnK6mpbKmnYyYpb+quLKoor+np7KcnrGcuqifra+mp5SUsKyXjIObka6loqygo5yqoJeKopKmnaecmqGoopmfoayuqrqtqKOal5N8h5mRppuSj5GYmI+YlKmboZmqqaGqp6CjqrudqMWioK6jqbOzqa6on7mmra2Zc3WqpLeGZImgcGiukYqQbm53pJCZn4F1rpiUcI+LcZWoo5uXrqRybWxsZot4b26CmXGBempxaWeKl5aYcWlphYhncYZkXYhiam9ZXGZ9dqZfYXGOkW5lZX+Nk4+hmJmZk5mhfomRlndniHhpjmt6f3llbGNmbGJLZFhKbFo6UGVFUidLOisjHCAbIiwpGBsYLTIuNTo0NTc6PD9BQkRFSEtMTU9RU1ZcV1pcYGBhXV1bVFBMSEQ9OkFCN01YWlpZWVpZWFhZWVdXVldZXF5eXVxcXF1eXV5dW1tVV16plKyzqbm4srOqqaGunqOyqZeSvrLEyr+3qp/ArK2koaesoLqjpK6srqeOl66pj4uFlpetnaaqoJ2jo6CRi6SSppmomZajqqCWnaamp7C7rKyam5OSe4SWjaWYjZGRmZSOmJaplqCYqaObsaadoqu5n6/Bp6OypauvsKmsqqa2oqy2lYqgqKW2nYmWo5mHqpuRlZ2SqbKZmqOqoLKWoqGdn6KcoaWhlaunjZKSjIeTnJ2VkZmTmZGOlYaBpZuYlo6LlJSLkIaEfWeJfnSCdXOGinCnbHqUkZOSgYGNj5CPnZWil5qZpISJlo9zapF3cYx4d3x6am1kY29kVWFZQGpcSGNhT1krRj0rJyE3NTAuHxwhJTIoKjY5OTQ2OTs+P0FCREVKS0tNUFBRWFRWWV5gYWNdXlVRSkVEPjk9QEFTWFtcWVdYWFhYWFlYWFpbXFxeX19gXl5eX19gYGBfWVlgppaoqqW0tq6uorCjrZ+gtbGQjqzHvsa7uaujpZ6cpp+xqaS3p52ptaeokZitoouHiY+cp5WspJ+Yp56ekpSjlqeaqJmUpqGkkJuomaG2u6irmZqQjHyBlIuhlIqVkZaQkJSYppCfm6qfnLajnqert6euwa2jtqWur6+rqKiyt6Ctu5iRpaSmtqKSnqegjqqgjpKfo6yvmqCjr6ivmKOgnKOqnp6dnJarnZOZoZuUkJarmo6ZmZaQlp+SiaGelZWFko2RjpWLgH1mi4V1hnV4h4JznGqFj5STkIl8i5WSkpiUo5OfmaSFipqJfHOXc3qLgHN8f2pvZF5wamBbYFluZFBgZVBaOkdHRT4yPT45LyomKykmHSY0MTY2Njg6PT0/QUFDSUpHSktMTVNTU1VaYGBpYGVWUEpBQ0I6OUVNVlteXltaXFtbW1xdXV9fXV5fYGFhYmFhYWBiYmJkYlxbY5eVo6ejr7KsrqOppq2fp7WqkJCdpbW8sK2toqOae56jsqSlsamXm7mno5OZqpyOhoqJnKKPrp6ilaifoJKWmJqti6mWj6iZqY2ZqY+eurekpZmbjYh5gZSMm5OKlZKUkY2Sl6ONnp+pnp+4o4CEr7Wir690o72jsZ93eZ+psLmUdayjnomAqn9kXGJ2oI+ln4SXfW2Ss5yjp62qomWen5JzeZqXcICYqJdtf6KoimWcpp2SmJiWjJKckoaempCWhJKHj4+SiYV3ao6GdoZwe4V/f2Boh4qUkotadZSQZ2iQj3N7qJybZnqaiYR5mWqEi4RveYBrcmVfdnBsa2hbZ2ZiYnBTXD5OTk5TRz5AVUQ5MS8eHyY0OjMwNjY3ODw7PkBBQUZIQkdGSUtNU1RVWV1gaGZnV1FKPERHPDhVUltgYWJgXl9fYGFhX1xdX19gYWFiY2RhYmFhZWRjaGReXWablaajoK6wrKuppaiuoqatpJKWq7axs6ebq6esl3SMnbCgqKunlJe5oKCPnKSdkX+JiJuejayaopWnoZ2OlpGehHWtj4imm6mRl6SJnLu0qKCZmIuJdXeTjZaTipORkZSMkJShj5uhp5mcspaAjJu1nLOMko67pqB+p6J6oa21gI6NpZ6Di4aQsaqvjIqXpJt6gIushpydoaeop4eVhZh3pZt6h5uBmKeCgnucsnqKhqGYmpWYloKRl5eFm5ljeoeQhY+QkouDbXCOhnmAcH+AhH6Fc4WElZF4lmeSdKCadX2ZhaOfiJh/lIyFhZprjo6GbHh7cXFnZHhvamxrW2VsamV0XF5JVExSQEU1LlpVVTYpITA5PT43NDM1Njg7Oj0+PkBEST9JRUpMR1NYW1lbYWFoZllRSDlFTDw+YlZeYmRmZGBhYWBiYl9dYGFhYmJiY2ZnY2JhYGVkY2djYWFonJein6WsrKuorJ+osKamqaWZlK/Iv7Gil6iptZ6QhZ2snKeioI2Qvp6ajZ+aoJB8ho+ZmIisnKKWn6GRjJOJhoCRp42Hop2klJieh5+6sqiempKOhXF2kImVkIqUkI+bjJCSn5KXoaWWnquHn7SJtJqtisqHqa2It4WNsIGurIKojKaYjZ19qI9ye3ecj6eXaJWkebSMn56mp5KYwoF/q4iYoXKegJqlfZeFlbKBoX2hk6CQmJeBjpOci5mSjH2Fk4eOlpKJg21yj4V+eXGGgIN7g3SEgJaAj8Vmf6mHj6NrnoSknYSagY6Ph4uacZCUhWh4dXx4aGh2cWhobF5kcG1nbVhnR11STTJENDZOYmU3JjM8RUdEOjY0NjU4Ozg+PT0/Qk0/TklKTENQWl1cV2FeaWxcUUU9TE1ASmRYXWNmaGdiYmJiY2NgX2JhYmNjY2VpaWNiYmJlY2FmY2JiaZSWop+vp6iopaufo7ewqaqmmpSgo6SrpJemq7ijsIGhqJ2mnp2JlL2ak42hkp6PeYSWlpGIq5mbm5mihY6Ld5ucj5+QiJ6lnJaamIejua6lmpyMjH5ibY+Lk5CNkI2NmIyRkqCPlKChmaGnfqGnh62doJatj56cnZGFgKCMqa2Fo42pmYyaf6N1gJmUa4Ktdk2reIeNnJGaqKeAqat9g6F7eqdqnn+Sa2eXhpe3iZ5+bmBkWYOXf4x7ZGiLc5l9eZZsXX2XbV9TcINcX2t4gl9YZIF8g3+XcKeqa4OjbnKlcJ+FoGpmoG1bb4x9Z1pghIBiWFBvd2ZtdHNram9ea3Fta2lYaU9eWUY5QTRIRF9sNSxJQ1JNTj04NDg1OTs2QDs7PkJPPlFSTE1CSlxdX1deXmJ1YE1EOk1PTlRiXFxmZmlpYmJkYmRkYmFiYGJkY2FjaWtkYmRkZ2RiZ2VhY2iXlZ2guKCpo6askaC2u6utopmYoaKlra6hnq+1o6iToaCgp5yajpm0mpCLn4yVi3WBlJKNiqeWlZien3+ShYWspIeakIqZqZmam5KIprGnopaaiImAaW6Ih4uOjoqLjZKMkZOjjZSfoJyhpH+TgY+joZSgd5yVj6eDoaZ/haerg6V4iXyEmn6icHOUiJZ8n415bYebjJmPm6iaj4ede4Kic3amZp5+d6RfmHp9k3Sibpi3tLp0k4eCf7WoZIHGuHtwlbaMcoCapGNzrKtgfGmds35tfIaBjYKLmHF/o2xyo3SfhYGkYJ2Zs5ZxfZifs3VzW56yg2pjb3R2cWhvWGttc3JmXWleY0xFPUQ2UkJaczM9U0dfSlI9PDM5NTo6NkQ7O0BKUD9VTU9RQEVfXltaWGBgfGRIQzhMV1VXY2FaZmZra2JiZWFkY2BhYmBkZF9gY2tuY2NkZGhkYmdmY2hok5WUo7eYqpuToI2kt7StraCaop2ko6aunZyyrqyTmKGaoaSZmpSfq5uLiJJ4i4VxgJaOipChj5KUnZh9kImNqKCHl46JkqOUnJuNi6mopZ6Ql4eFfmp7h359kI2Di5CRiZCUoYOXn6CdoJ6LiXecmKKMn3Khi4epiJuljpSmqX2tjH56oJl6o5N4gXSWiI2cfZafhpuOmJulhqJkoXyIlpCbjW2eaJuOb5qZe4CLp31yaHSrg56DdKpolZpdm4V2hZ1nqmuAuGZcqHCBnGCVjF6ndnWHiH6eaJp0hZOSl46An2+akG6nml2ofni7a36qXI6EXbRnXG5yenhraVxxa3l5Y2BmWGJCUUZPN1dEU281S1taX09aREAxNTE7OzZIPzpDSFU+WVJZXT5EYl5WYFFhY31qRUI5TlteWWVnWGZnbm1iYmVfYWFfX2BgZWNeYmRvcWBkZWVrZWNpaGdraZWbiam0mqeIY5Sbq7qxr6yeppycqaCfr5yesamtnZekm6GgmZaWoaSZhomNaoiAcnuXiIuWloSRlZiQeoqElaScipSPhoyekp2diZCpo6CajJKKgYBpgYZ5f5eMe4mOjoiQl5t/lKOfoKGTmHJon4qfj4xwkoyBqYeYnqGlnqZ7sK2joriXd6Ozo6SAiJR5nXuqmn+ijpyaloiXcaF8hY2vtX1rmpGheX6ZtaOkq6iEmXybfZ2af3SqWl1ve5aLeJ5iTH97eoVjeZdCTJ9Yompxe45sgIiEmXWbeIaJsbN/gJuTp3eDnW5zfZVwmnRrpF2VdkhlZGB0cX5+bmZgbGl2e2RkYlFfWF1VV0BaRlFoRVNXXGJYXklEPUI4P0E6SUY4TEVYQVdSW1ZERmJcWmBLYG1+ckVDPFVfYlpmalZnaG1vYmZnXmFhXF1eYWhiX2Vjdm1dZWdma2RmbGloa2mTnICwrZmEU16gprO5srKpmqKMnKycnKqUoqykoqiPoJ6dm5mWmKGdloiHiXeGgW95lYWRm4t8kZOWiHKAiJKhm3OQkIGJmpWhm4WPqZyblYuLi32DbISFcYKhjHiGjYiIk5mWfJSkoZ6iiK2GfbWEjp6ce6WWeqmBlZuPiZ+bfKdod21+mXShc3J8nYaZcJODrn2kg6admYGkb16oZ3WiY2+lYZzTkH17mXhzdGKihpB+o3Okj3Vrj7OMYIKYiXOqsqi8f3eDbX6/pqm0XZtufHCWbX9yonJdpGdzpmBopm2b1Jp9hptwenuYbJx8eJdzbqmkZ2BlenGAhGxnZmRvdXdnYWNTXGZRUWJJWEpVYVdTW2VqW2VRRkRLTUpLQktFOE9AUU5YU1lPU1FhZWVqUmN3eXdJRkVjXWVaaGpUaWhqb2NqZ2BjYFxdXV9oYmFoZXxkXmRnZGtkam1naGxol5qAsKtUXEt+qa+xtK+zo5uZhZmpoKGkjqWpoZmqipqYmJOZk5KhmI+IhntwfYVofY+DlJqBd5CNj4lvf4WPk5Jsl5N8iZKTpZaDj6ublJOLhop5g3aIgG6Cn4Z3gJKGiJqjmHuUo6San4mzoaK2i3qsp6SupXCpgJqOhYCakHukgKGZhphynoSjrq+Kl4yAjaSNlYOtoJR2tbW1yaFzlIuBn2Cdl6lteZWHoJt0ood3oH6Tl4uBb01mo5JwmodzpHt6dGGDgWt9oGtxZF+ccX1zlmh5abO1tMamc5h9ep1rnJurdoWbbXZ4mGqae3WYclBFfbNfanZreYdma2hjdXVwbldfVFlpUVNoSVZNWVRWXWhrblZnV05LQkpNS0hKT0FRS1BlY2ptZXRzc355fG51iXt7VFBPbF5pXGtpUmpoaWxnbGZjZWBcXV1eaWJkaWt7X11kaGNqZm5tZWlsZaGbiK6mhGU/k6Gyqq6vtaKikICXqqKjpYylp56dpoObl5aOl5CPnJOOiIN6anmHZYONf5igeXWPiIyBaYSFkYOMhZ2Neo2LlqaTg5mqmI2Si4GJen99i3lwkKGGeoGVh4mWoJZ/lKWonJaWhGZueJxsomR8caV3m5hwZ6aAlYp6pHqfloOXcp93gYqVl4+5bpGKomJ9maCViG1yaaprdaBtb6ZfmmmLkGmWh5uVdKKAfZpgjIaNdW+IYmigZZ5+aZt1b2NmiIJtcaJaXltjoW1diItuen1zcmSlbXiiZGenaJlzjJlwom9ViZBvoF9mqFSLXlSYbm1za3KCbXBpbHlza29SWVdXZlpUbUlZT11JWGlpc2pZa1ZRUkZWXE1YU2FVaWtfd3R7fXB9fHKDe4Bzdo2AhHZeUXJiZ2NwZ1BqaGhrbG5oZGdfXV5dYGpjaml2dV1cY2ljampzbWZrbWOcpJilemR0bYunrqOpsLGmn4yAmKudn6aMo6Kbo6KBlpiTjpqQi5iQjop8h3GAiWmLi3yYnHN0iX2QfGSCh5SJiZWZgnyIh5eokYGjrJCGkYuCin6AgI9zaZCmhH2GlI2ImaCPiJOppp2IpniVm36liJaMspiekIKvl5+ldpSGeKlzpY+Emm6looyShI2Du259pa+DhoWGk5Wcn3ylenKolaCWZp5+b6xjlYqWk3eobaqigYl2iIN3q5GmiGuRsGt2s4ypa4qGbW2fnpKVYH6ri6p2fn6LpZ52n3yDpJWdoGqbiHisaJ6tjLZ0d76NpJNZg6eOq2F1cnRxfHVxY2t/b2hsU1dbVmFiXWtNXVJdSl5tbndfW3FZXGBbZ3Rlbm9yYnF0YHd6fnlyeYNzg3+Be3uMgYKAdmJ4ZGNucmRSa2dob2xyamZpYWBeXGJrYm1sem9cXGJpYmxqeG1nbG5ilaWqnIB/naOWqaqdqKaupJmKgpismp+lipumnamdhYyaj4eckYWSjYyNdId7iYRwjYV+mJR0dIVykoNtf4uRh4aTjn17goaYpo5/pqeOgY6JhZV2goeTb2yLqYGDjJSOiZ2fioyUq6Ogj4B1lJeIfoF5lK6jf4GbcY+Gd46Jgn17cqeMcX19epiWm4SPeXt/foeTlZOKdpCYnqCDe32Ja4yFW3l5cnpxaW5+kolxgHWBj5STcYaEgmWMf1+Af4t3dHKUdW95bm6HbISFXnVnd45lgICFjaiafXR7lWqJiHCBdn2Hd25tZ4xzenyYeIVca1h5j2lveHJyb3h4cF1rh25qZ1ZbYFddZmtkVmJVX1FfcHh5bGt2ZmprbHd9cnJ1c2FvdWJ0e4F4dXqDdX+Af4B4ioWDfXttf2xkeW5fV25naHVreGppamVcYFpjamVtcXRuW1tibGRsbHluaGxvYY2UuKimiaCimqakmKWcq6KhhISYrZKeoYmbp5upmIOBm4t/lpSHjoqJjXKDfI99fo+Fe5iPdHKDcJWFe3ySi4aGj4V5foCHmqWOfKihi4aQkIWVg4aOmHdyhKmGjpKdkImfnoiMm6ifoKqDiI6Vmn5+iZatqI+Rpo93b5uPgXiQbn6ohXB9lXFrcH2BoI2Ak46MaG1dg4uLm5qejnOVi4hxdGuBdnSBWXJuhpGBfn6Mal1qZHuFhImAYGl4epp7goqBdYGFgmd3ioZqYXBxgXVecYqAiI6llIVli42DbneLhHGGkHpxZ2hlfIR7lltcamdudlt8eXh1bnNzg2dcbYtra2JaWl9bWmxxXF9hWl9dZnR+e3VwdGNra2t8fnN8eHVkbXVobXx+dnp8e3l6gIB+b4aKhHt9c355c39oVVxxaWx1b3Vna2hkXWFYa2hsa3FybVdbZW5sZ3N6b2hqbWCLi6qwoI+ioZqenZeemKijon6Dma6OoJWInKKRpZV/e5iFfZKZiYmGh4pzfoGMdoWMgoWXinFvgHKYhoN+koOEhoqBeoGFjJyhkYOnooh5jpeJlYuLnJiEg3qtgpGXmpWKnp2IiKGqn6Gio4uHk5uco5mWqqGnpp+SmoaUjHp2jY2Dp35/kpCSk5yyppuVn5CNspOXg6WMjJWan4mQm4KIkYprfI53eGWChpCLfImdhIeMkIiIgISEkHd8enSZoIiGiZ2JhJN+fYqAgHVvcoSBfXeGhoqPpZCChYyGgoyQjH2HjIqRhHltg4V+eplrcmhhdIpxfnp3d3B3dIJdXm+HaG5fXlpdXVNoclZkXF1ibGh1e3xzb3Bka2tqgH1ueYByanBwbGeBe3KCgHh/fX+Ee22CjYZ8eXh7fXqDeE5kdmpybXB6ZWtlY2JgW3RmcGZycW1VXWx0bWl5enFnaWtkjIecuZ6WoqCYlJiYlJikoJ58f5qsj5+OhqCdi56WfXiUg3yOmYqGg4SHbnmBgXOBiH6JlIRta356l4aDgo9/gIeEhn2HhY6cnpOHq6CEc4uQhpKRi52SfY17qoSOk5iWj5yWh4ecpZ+imp2FgpKamZmQmqafpZ2dj5V/j4h1e4aNhKV7fI6QkYaYq6GelJ2QjqqNkICdjIiTmZ6Cj5d+ho6Db3eGcXVgfoOPhnWMmICDj4KGhX6FhJRueXV0kaGKi4WahISMc3+JfHxycXqHgnp3io6DkaaPhYOOgIOKiYp3homLjX5wbH+CfG5obG1oX3p/aX58dnV2dXt4XF9wfm51YGNbXV9SZ25UZVteYmtpdnp+cWxtZGtqaIGAbHOBbGx1b3lvhnluh4B2goB+hXZxgo2Ifnt6fH97gopgaXxqdWhpgmRqY2BpXGN1aG9idW1sVWNxeWVwentzZWptbYuJnreaoaOfkZGVl4uanp+ee3ifp5Gci4ellIuYmXl6jYV8iZGEjIKCg258gHlzgYV+i5F9amh9gpeIf4eNfX6GhIZ9j4KQnJ2SiaidgHCMi4ySh6ChioWMfaiRiZCSl5OWk3iMo6CgnZaZf4CQmpiSjJujoaSZl5GafYyDd3+Cjoaff36MjI98mKWhopOakZCmjI+BmpGJkpebfpOSfoeOgXV0gnB3YX2AjYZxi5V8iIxxjH+ChYaPaHdxeIuYkY9/ln2HinGBhnt8cHd6ioN5eY+MgpSlkouFj3uGhoeEdoOEiYl8Z3N9gHl7cWxrZ19+c2h8dXZ0fXOAal5gdHZwd2RjWV9fUmtpVWVZX2FoanZ5gnFna2RtaGaAgWtufWhvcmx+eYd6bIyBc4GBfoF0doKNhn98en+BfX+PaXKDbnNpYYdobGJfcVZ0b21tYHhobVdqdHZjdXp7cmJqb3qJjJ6ykqWlnI6Pl4+GnKCbnXx2paGOmICNo4uImpZ5e4aHfoOJf4mCgX9yf3t0doOFfoqReGdjfYaXiYCJi3l9gI2DeZeClpmXjZehnH5wjIKRlIamm4iMiYOmlYWTi5aXk5J3kZ2goZeTlnl/jpiXjpaanKSdmJKUmniOhIJ3g5WNnX6BiY2Mc5ejn6KTmY+PooyLg5aYg5KWmX6YjHyIjYF2cX1ue2SAfIqFcIeTf5GCbIeDgoCJhWV1bnuFkZeLfJN3i4h7f4V8enF9d4iEeISPiIqXoZWBg4t2iISDgnd8g4qHeGF6eX50f3hnbWVhf2pqd3N0dX1xfGJjYHRudXJtYVphXltsZVJjWWBhaGt2eYZxY2pjbWVofYNsaHRobnBpgH2CeW2QhnGAhIN/dHyDjIGAfXqCg358kG12iXR0bWWKbGpiYnZWhGlwbmB4Z2xianZwZnl8enFgcmyGhY+crZemqJ6NjJeHhp+Tl5l+eKqdi5l6l52Li5iQeXyBjH58g3yBg4F4dHl7dH2BhICJi4BkX32LlIZ+hIZ1fX6Kf32ZhZeVmI2ko5l/c4d7lJKKpo+MjoqToZKDkZCVl5GLgY+Xn5qSj5Bzf42SlImdnZ6ml5eMlJVyi42Ja4SXj5l6h4iPiW+XnZqklJWLjJ+MhoKSnH+SkpWHmYh8ioqBenF5a3Vse36Lfm2FkoKUeHCBg35+i4BkcWl7f5aXhH6Mc4+Hg3iGfHV3f3yEf3uCi4SLk6OPeIOBdImHfYB0doKJhXBhfHZ6cX1vYm9jZHxjbm92c3h3c3RhdmBvbHVtb1xcX15eal5QXVljYWhtdHuJbGBpZmpjaXeIbmZsaWptaIF9e3dvkIhzgISEfXSBhol7g316gYR9fY5yeot4eG5sh2poX2lyY4dncW9ld2dubGF5aWt9e3hwYXhti4CYmaqgo6idioqRhoqdi5WYfnivmY2XfZ+UkZaTiHd+fIp9fIB3eICAcHV0fG+GfYGBin98YVx+j5KGf4ODc3uAh3uPkomTkp2TppyWgn2BfY6KkqSJjoqNmJuNhpGYlJaPioiMkpySj4uMbYOPj5GJnpmioZeViJaQbYeYg2aFmI6TeoiEkIpwlpqUo5OSiYuZjIJ/kJ19ko+SjJmOe4qFh3NydWtwbnV8inRuhpCOknF1gHyBgoh8ZHBseXyZk32DiHOQiYBzh3huf3x/hXuEi4eDi5SnjHuHe36LhXd+cXCBh4RlaHl1dXB8Yl9wYWt0XnFqe3l5bHNwZXhdbmxzbXJYW19gYWtbUFdYZWNncXF/h2ZdamlnYmdxjW9kaWdlaWmBend1b46FdIGCg3t1goiFeIV8eISFen+Jd3+Le3tyeINqa2BwaHSAa3JvbXJnb2xlfGNugHp3cWx3d4p+opehqKCmm4eMioGQnIeTnXaCq5WTjoehjZaTj390fHeFeHl/c3N7hmtzcHpui3eAgYhvcVtZfpGNiIB/f3d1gYGAoIaRi5OdmKGVmHiKf4GNiZydio+GkpiWhYmVmZCXi4uMjYyciY2Pgm2Ji5CRip2WoZyXlIWXh2mDooJlhJyJkH6Lg4uBd5OYkp+TkYmJlY1/fo+XfJGNj46akXyKgINvdXBsbW9we4Vpc4OOmItxd4B1gomDeWZybnWAmo57h4N5k5B5dodzb4h6hIt5ioWCh42aood7g3WCi393eW5sgoWDXnN1c3FweVpfcWFwa15wan17cW1tamx2YG9vanFtWVliYWJuWFFUWmZnY3ZwhIJiXWtuZGJma5JuYGdmYGhrgXVyc3CLgHV/g4B4dYCLgHmFf3eHhneDhXyHjH97d4p/anFjfGOGfG5xbXRqaG9sdnhfcX95fHV1dICDfqSVmq2eppaFjYN/l5SDkKB2jKCUk4aLm42Wjot6cnh0gnByhXRxdohscG52bYl3g36Abm5VUYGrlIeCeIB3coN6gqGCk4KVlJmck5t4knuDjJKkmpOOiZWZkoSHl5mMlIuJj4+HnYSQinxyi4WJjoicmp+blZR/k31ohJuGZ4Wfh5KEkYKJcYORmJCcj5CMjI+Nd3uSkXqOi4yRlox8iHyAa3ZqbmtsbHt/YXp+jpaCdnqAeIOMfHlmc2tzhpWLfoeFepOOcHmEb3aLeYiLeYd8gYuPnZ2EfHt2got9d3BqbIKEe2F5cW5tc3RWX3BicmFgbG56cWhwZmZzdGhxa2F3ZV1XZmFgclNRT1xmZV15cIh8YFxpcmJiZWaRal9oZVtncH5wbHF0in12fIWAdXV+jHl7hYF4iINzhoV+jI2EfHmVeGZya4NgiH5vb2t6YGpudH91X3R9eYZ4dHOFfXigj5mwnKWOgop/g5qIgIyegIualI+FiJiPj4+Ed3R3dIBxcIV0cHKEcGtpd26Dbn19bnVzUk2C38iS1pN7cHWDdYSgg5R3lpKZnJGZe5RzhZCfoZOTkYmTnJSGf5eWiY6NiJKNiJx/joF3eox+iYyKnJucm5WSeYx1ZoeQhmuHooSRiJeDhmOMkZmPlYuXjIyKi3F6lIh7joiKkpGJeYV8fmx7ZXNwa2t6eVuAeY+PgXp9fn+Gjnt6Z3JqcoqOiYGFhHyUimt9fm1/i36KhXyDeYCOlJmZiXx1d4OQeHJtZ3GAhW5rdXBoanVuVF9vZXBaYGxyeGdra2JmeHJwcGNfd2BgVmtfXnZQTkthZ2NdenGKdV1cZXZhYmVlj2RhZmJZaXNzbmtyd4x9dHqGgnV2fotzgIZ/e4l/comIgZGLiHx+mHZlc259ZYh+bnBsgFlsbnl5dGF2e3uNdnJ3ind5n4ubrpufkIKFd4iVfn2KnYiGoJGPhYyYhJOOh4F0eHB5cW+Eb21vf3NlZXlxfW16fWpoa2OkmsHcrvChcmx2hHaFo4aSb5eRlqGWnIGScoaLo5eJjpWKkZ2Wg4GWkIaKkICRiomWfod6dX+JeIeEjpyamJmOj3aJdW2FiIp8iaKDkYmchIVei5OXi4+Jj4uLhYlte5aBfYiFiZGPhnaFfX1rfWR4dWpueXNXiHqSh4V5foCBhox/eWVyaX+JjomBgn6LloRrgXVth5CBjoN9gXh+j5SSmI90cneHjHVzcWd2eoRjdW5xY2p3aFJhcWdsVl9vdHphcmRfaH5wcm5aY3JgYlZuWVx4Tk1MZGdiXndziW5cXGR5XmBkZYVgY2NfWWpya25rc3eMfnR3hIF4d3uJcYOEfX6Ie3SLiYiWhox/fpdzZ3VyeWyLe250cYFXcXp2eXJld3mHjGl2gIlyf5yHmKeco5KFfXGMlHh5jJ6EhaGNjnyWjYCZh4R7cndwdGpwgWxpbXx1X2F4d3txdXxoYGR869q1ycPch3JsdIF2i5uJjmqZkJCdlpSBiXGFiaCOhYuVioyYlHyNk4iDiZB7kIuFj4F/dniDhHKIgpOclpSXhox1hn1ug4GIhpihgpOMnoOJYYOUj4eKhomNh4GHan2UgH2DhImOjYJxhn5/cXdodnJpdHdrWox8koKFfX+DgISKgnVhcmqHgI+KgX5+kZB8bYFrd4WOhZGCe4B8fo+Rj5WIbnB5jIZ1a3Fsc3mCYHVqb11rd2BSZXJpZlNgcHZ0YXBgXWiDcXNqV2doYmlYbVZbdUxLTGVnX2Jzc4VqXFxleV5eZGd7YWRfXVlrbmVvanR4in5zc4F+e3Z6h3OFg3x/h3Z3ioaPmYGMgnuTdWx3dnl4k3RueHp9WHqGcYBvZ3l3koJkdoaFcIqWhZmhmqKKh3Rvk4tyd4+cfouaiYl8oH+EmX+BeHJ0bm9kcn9pZm14eFxfeXt7cXGAamFmYX/Vto6RpnhucXd8cZORjYdrmo+JnJOMhntph4uZh4GSkYaHmI58jY2BgYqNfI+MfYmEenR6g3txhoCWmo6TlIGIdYOFdYJ/iZGcnoaUj59+iGJ/k4eFiISKjYCAg2d9kYB+f4KMj5B+bYJ8gnRrbXd1dHd2a2ONgY6AhX58hX+EiX9wX3FvhHuOi4F7fpCHeXCDZXmBiYaLgnqDfH6SjY+Rg25ueYt+dW1ua2x7fmRpbGpZbndaUmpzaWJRY3N4bGJlXlpqg25zYlxoX2RsYG5VW3BOSE9nZVxnb3GAbVpcY3NgXGNsd2RlXV1abGxjbWpzd4d/cXCAe310eIZ4hYJ8gIh1eYmBkpZ8iYZ2iYFweHl7hJNvbnyBd16Df3SCbWl6c5RzZ3OIfHKSkYOan5ughoh2dpV/bXeVmH6IkISKjZp9jJp2fnZxcGxqYXV8Z2JqdXpbYHh8em1xf2VjZ2dXnY9fcXOWvMSEd3GUipB/c5iMh52UjYh0a4iPlYB7lIyBhJuMfIqGfXyJjH+TiHWJhXZ2fYFxdYaBnpWGlI+CgnF/h3ODeoiWm5eGk42cgIhmfZOCgIaDiYlygn5nfYt7eX9/h4uPfWmAfYN2Zm95eHN3c2xqjoWKgYp/eIKBhISAa11wd3p9i4iFe4COf31xgGh4gYaKhYN3gnp/louOi3xta3qJfHZ0b2lofXdlXXFjWHB0U1Rvc2liTmh0eGZhXl1Yb4BvdFllY11qbWBwT1lsUkRUaGJabG9te29ZW15tY1pjcHZkZ1xdYGxqY2xpc3eBgnFufnt/dHWDeoSCfIKGdn6JgZaReIOKdIGIc3l5fo2Qb297gXFpgXl6fm5tfHaWa2p4hHRrlI2FnpigmYWIb36Mdmp5mY9/goqClZeKeo+Wb3pzcGxqZGB0e2lgZnJ7W2FzfXpncHphZWSOsbJ3S2JapdrRl3J7koyReX+WjIWZko2Gb2yGkpF6eZOHgYSZinyHf3l4iYqElYBviodxdH17anmGg6WRhZONg39ufoJ1gneFmZeTipOPlIWHcHuShH6Dg4mDb4F4aICFeHJ/f4OKh3xlfH6EdmNwc4BoeXFvdZmMhoOKe3Z4gIR6gmtbb3xyf4eDiH2FiHqIcYBtcIKFjYOEcYN3f5iLjYN3bW19g392emVoan5yYVp4W1lybk5YcnNmYEttd3ViXltbWXV9cnBYaF5manFfb05XaVI/WWdfW3BrZ3lxW1tZa2VZY3F5X2hdXmVsaGZsaXF4f4dvbX99gXVwgXuAgX+Df3aBhYmXinGCjXF7hnx6eYSUjHVren9sb350gH1vcnx7lHBvgH95ZpKKgqGYnZKDhWeHg3BnepeKfoCFgpqKgXyNjWl4cmtrZl9hb3ltX2JveV1kbIN6YXF2X2Rl1eu+izI6PouOgHJ5homPjXeFmI1/k4+Nf25thYyMdX2Pf4WClYl8g3hudoeFg5Z3boeEa3V7dWV5g4SnjIOPjIN9bX9zdYJ4hJqPi4+RkoyLhn57kod4gIWNg2yAcmmAfnhtfHuBioN4YnmEgXFkcWh+bXVxdYGbi4F/hX5zdX2AcoBvWmt8c3iIgYp7hn98h3d5cGuGgo6CiXGAd36Viop+dG1qdoCAdXVcaWl4cVpXflNacmVMW3NyZltKcXhwXltaWVx1f3VpWWJbZ2VuYmlNWGZRPV5mXV52Zl91cVtZVW9kWmVxeVtoXmBnbWdpa2lweH2ObWqBhH95boB7fYF/gnp1goGMk4VwgItud36Be3uIk4l/aXt9a3R8coZ7c3d9f4x6eIR+fGuMjISbnZaMgoBsjX5raH+Pjnt+f4OVgn99iohrdXFnaWNbY2dzb2BhbHRhaHCJemFzdF5iY5ugkG5cNVqvtXVqgIp+k4Z3h5iHdY+MinhwbYWDh3R5iXiJfZOIen5yZ3aIfn2Xb3GGfWh2eW5leomFpYeAh42JfW19dX5/e4qXhoGTkJeIi4SJfI+JcXx+hXxpfm1rgXt5anp2goeAcmB3gn5xZHJndYJtdXuGlJGBfYF/b3d5e3R9bFdtfXVzioCGd4Z1gYl6d3JtiH+Of4NxfXt8kYeIem5taW2CgnVuXWhmdHJSXHxOXHFcT1xzb2RWS3N5a1hZWFlgcYB1YV1dYGdkaGhmTlpoTkFhZFxgdmFcdW1YWFN0YVtlb3NXal9iaGtnbWxpcHd8k2xohIl9fHB+fnyBf4J6d4CAiYuEcnuHb3F3hH97iY2Pg2p+e254eXeKd314gIKHf4R+fnpthIyImKONhYR7dot5a22FiZJ5fXuCkoCAfYqDcHJwYmZeWWdfcHBgYWhwZmpviXRhdG9bYGRqdnt/vpynpMm4coWEc5N9eYiUhHSRjYhyc3CEe4NzdYZ0iHeUiXl5cGN3hnmAkmlyhHVmd3ZjanyEiJ6CgH+Oj31xfnODeH6QjoJ3lY2Uj4iCiHuJiWx5en92aHppbH95c2l6doCDfWhgeIh9ampzaHuAanaBjJGUfnp9fnF7dntzfWFVdXtxc4iCgXuCcIaJd3dvb4KBi318d3x7dI2EgXVocWhsiIJycF1oY3RvTGZ2TF5vVVRZc25iUU90eWJTV1dcYXCCc1thXWhlZWNqZFFbcUlEZGJcZHFeXHhoVVdWd15cZm5pVmxeYWpnZW5uaHB3epNuaYiMeX1ye355goGCfHZ9g4iGg3B2g3Ntd4KCfomLlH9xgHx4enqBi3SDeH+BgYKEeoB1b32Ji5ueiH6Ge3eHfGh1ho2Ren+AfImGhHaPgGdwbl9kXFhmWW1zYWFhcWxsaIluYHNpWF5jbYB3qdmpx4aIs3KKeXCOdn2IkIF6lIuAdXR1fnd/cHB/boV0lIZ4dGxgeoF5iI5lcYNvZ3VuW219gZCTgIF5kZJ9d3pshXR+j4qDcpWKkI6HhYV7f4ZtdXZ/bmh3ZW18dm1qd3Z/f3xgYniGemh1dWN+e2d1ho6NlXx0f3VxgHp8bH5ZVnJ8b3SChn5/d2uIhnN4anR/goJ8eXt3enGKf3xyZ3RkbYuEbXRba2B2Zklvb0xbY1hXVnhtYlBTdXZZUVVXXWByhG9cYGNtZGNdb2NUXXJHQmZfXmZpXVp7Y1JWXHVbW2drYVZrYGBuZmZscWhwdniPdGuOjHV/dnh9d4GDgXt0foOIiINvcYB1cXV+hoKJjYt7d394hHx9hYd4h3x9gX6FgHt+c3Z4i46fjYl7ind1g3pefoeajXmHhHSGh4R3iXpibmxbYltbYVVqdGRgW2hvcGeHcWFxZldcY2t/fMrOhrmia25ui21yhXJ+hYt/e5KGenl0enV1e2psdmOEdpKCdm9nX3yBeYuIZXGAampxY1hse4aciYOCcpeUdn17bYdwgImKhnCWjpCIhYuEe3l/cnJwfmdocmNueHFqbHF3fX16XWV6gHdpdXlmgnZndIeLjZR9coZqb36AeG17XFhwfWxzfol7gW1uiX9wdmZ2foB+gHV6cHlzhXt4cWVyYG2LgWtzWGtfeV1JcGxOV1ZfVFV8a2JPVHZzUVJUVl1idIZpXGBramZiWW5hWGNwR0FoXWFmX1xWfF5PVmVxWVtqaF1YZ2FfcmZqaHFncXN3h3lulYp0f3t3fnmDh4B1c3+GhY6DcHB8eHd1eYeGh4yGenx/dYt+fYaEhId/fn59h398eHZ5dpGTn36NfYtudYB6ZISIl4ZzkopvhYWCeoN1ZG5qWV9bXV1VaHNlYFlkcnJngXJha2RXWl9pf3i+rnqft25idIdpdHxyeoSHe36NgHh4c3dve3dlam9gh3WOgXNqYl5+eHiKgmVwfWhra1pWb3eLpIGFf3GZknF/d3SBbH+Bj4Zyk4eMh4SJhX15dXNvaXlham1hbXZqZ2treXd6d1tnfnx4ZXN+boR0ZnaGjYaVf2+LZmt6gnRsdGJbbnpqc3qKeoFldIZ9bXBndH53fH5wemp5eoB4d29lbGFsiX1sblZrYXhWTGtsT1JPaU5ZfWdiT1V2bE1RVFVeZnaEZ15hcWhnYVdpXVxraUpFa1piZVdYVXlaTldualldbGVdWmVjXnVmbGVxZnNwdIF4cJmFdn9/eH98hYd9dnSCh4CVg25zeXt7c3OFh4iIhHmBfXaPf32EiY6DgYN7fouDe3d8d3aanZd6ioOHanZ+fWyEhpSAco+CcYaCfoKAcGZsZ1ddW1xbU2VwZV9YY3J1aXZwZGViV1tbaH9wb3J/c4llZnp/anV2dHSEhXiBhXp3dHVua3pxYmhrZ4Z0jYNtZl5ffG96iX1obXdmamRWV3Nwjqd9hHx2lpBze3J7eWx6eo+Ddpd8h4aDh4R9dXFzbWh1XW1pX2x1ZGdmaXpve3JZZ4F3dWhwgHiCdmJ3hYt8lIFui2pte4BwZXJlX2t4ZnF1iXp9YXWDdmlrcXR6b3h4cntlfX5+d3VuY2VhbIZ8bWtWamNyVExrbFBMT3BIXntlYU5WdWVLT1NXYGt3fmZdZ3NpZV9XY1dicV1MS2tYZGJVVFVzV01ZdmVaX2xgXFtjZV93Z21icGl0b3F+dXSZgXd/gHiAf4aEen12goN+mIVucnR8e3RxhYWPgoB6i3V0kIB9gZSOgIWEfH6Mhnp+gXZ7o6WKeYmGhWx1fXt1hIONem+Fc3qFfYKEdW5qaWVWXVtbWlNjbmVbWGJ0e2pobWhgYVdfWmmAaWtvf2dsYml7emt0dXVvhoJ7gX12dm56aGp5al9lbmmBd5CEZ2VYYndpfoZ5bmlvZmZdVVlwaY+od4F6fJCOeHVvfW5ydHiOfneUdIWCgIaIdmpzdmhpb1xtZV5uc19nYmp4aHttW22Dc3Rqb4B+eXdhdoWEeZCGc4hxb3l/cWJwaFttdmNwcod6d2FygG9naXhzcWt3dnR1YoJ6fXZ1b2NjYm18fGtrVWliZ1RMbmhQSFJsRWF4ZWFNVHNeSk1VWWVseHtmX21wamRdVmBVb29XSlNoWGdeWE1VbFRLXHpfXF9rXV1bYmVgemhsYW9vdm5vd3V6l313gIF5gICHhnp5eoN9gZOEcXR0fnp2dIWIkH2BfJBsc5WBe4KfhX+HfYB+hoKAint2hKyff3qIiIRscoJ6doGBgnRuh299gHSKgGpvbmRkWF9aWlpVYmpnXFpfdYJpXm1sXGFWW1xrgWVxdHxpal1teHdodXhzboZ8fn56dnNsemhpeGddZHNoeneSgWNjVGRvZ4GEdnZmaGlhV1ZZaGSQqG9/eICLjnpwb3tmeG55inp2jnGDfX9/hm5kd3NkaWldbGJecG9bZ19tdWV6aF10gG9ya3F7fnV2YnWFi3uIiIB/d3J1fnNgcGxYcHJhcHCDe3NjcYBrYGx6b2lneXd0cGSDdHl5dHFkYWRtcn5qa1RpXl9VTHVjUUdXYkdjdmVhTFRxWUtMWFhnbHZ6ZWVtcWZjWlhdWHdmVEpcY1hpWFhIV2VRSWJ4W11fbVteXWJjXoBpa2BvdHhtb252g5d5coGAfX+JjIZ+dXaGeIaMfXR1dYJ5enqCjI59f4SJanSWgXuKnX1+hXmAe358holzcY+ujHt7h5B+ZnGIenR+fXZyb4Zse35tkHpjcG9iZV1lVlpZV2Nma2BdXXOGaVhwbVteV1pcbHticXd1bGJbbnR1aHV3cm6GeX+Bendvb3RlaHRlW2d1ZnZ2knpgXVNlZmqCgXN8YWNpXFRYXmJkkKVpeXSChZB4bG54Zndse4N5dIhygHh8eIBpZndtYGhhX2tgXnVrWWZdb29iemVbd3xrbm5weHl0dGVzg5J/iIOIenZvcXxxYXdjWm5vYG9wgHtyZXGAZF5tdWljZnh6cmxtgHRyfHJxYV5lbW59ZWlUaFlaVU55YFJLWllIYnRjYEpVblVKTFpWaWxye2NsbHNjYVpaW2F3XFRLY11ZalNWR1lhTkhqdlhfYW1bW19iY12FaWhibnh5bG9qdoGQeG2CfoCBkoiEgXZ1iXSLhnRxdnaCd319foyPgX+TfnB4loN9mZJ5gIB4eX5/c4iEc3CZont7f4mWeGR1iXlzeXZrdHB/bHl8cJFyXnBvYGdibFRbWldpZG1mXFxyiWZScm1bWVhXYGx2ZGp1amlfW251cm10dXVrhn1/gHx3b25sZWlxY1trcmR0do5zXFdUZGBxf35xgVxiY15TWmFcZJOfZXJxhIOQc2tqeGxub3l5enGAdn9zenp7ZGZ2aF5jW2FoXF53aVdiXnBoYXdhW3x2ampyb3h0c3RocYKVg4d/hHVyanB7bGV2V1tpbGFwcX95c2Vvflpgb3FiXmlvfGtqcn1xb3Zpb2BbZGtse2FnVGdVWFJRd1xTUFlSSGNzYmBHVmxRSVBaVmtsa3xlbW9yYVtaWFlscFdTUGZXV2lTVEZaXE9Jc3VYYGRtY1hgYWJdjGpkZW16eGtvaXV5hXtrhH2AhJl9goR5fYhtj4Zxb3Z6fXSCgn2Lj4OCl3R4gpOGgZ+JdYF/gXR/gnCHgnVvopdze4aMh3tmd4tvbnxwZ3hxe2xzdnONa150bmFnZmtTXlxWaGJsbFtccYxkTm9tXFZXVWZpdGhjdGVlXVpwdm9xdnZ6bIh9gH2Id5BzY2Vrb2Fdbm1kc3iIa1pUVmJjd3x8cIRcY19jVFpgWmOXlWNucIOEiXJqZ3luZXJ1cXpreXR1b3p+dl9nc2RcX1diZFlhdWZWX2BtZGFxXV1+cGhpc3F0cXV2a22Fk4KJfIVxcWZue29wblJaZWlkcHJ/dXNibHVVYnFrW15uZHtka3R8cXFxaWxfWGRpanheZlVlVVZQVW9YUldUUEhlcl9hRlhrT0lYVFZuaWR8aWt4a2FXXFZbdGRTUldoUVlnVFNIWltQTnh3W19mbWpaYmBfXo9uYmdreXZubml2dn5+bYSAfoaXe3+HgYp+a5OIcmd0gHt1gIN+iY5/i5NzfYqRhYefhnt/hoxzgIZzfYJ1bqSMc4GNjHd4bnqNYGV9cWd6dHlsbXF3g2dkfG1jZmdoU2BfVWdgbG9cXm6OaE1pbGBVVlNuZnNrZnhkZV1acnZuc3t5dG6Je4F3nHt6bGJlbG1eYG9qZXF5f2daVlhfbHh7em+DX2JeaFZZYFhknIhia3GBhnx3a2p2bFt1cGp5aXVybm97gHNYa29fWV5XY2RYZXFjVF9iaWFibFpgfmtmbHN1b214dmtohYx/iXqIbXBlb3tscWxiWF9nZ25yf3NyXmlsU2VwZFVibWF4Ym91enRqbmtqX1hgZmh1XWRXYlZTT1lnU09dT09IZW9dY0daak5KX0tYbWVfeGhufmRgVV5UXXVbVFNgZ05eYlVTSlxaUVp2dl1fZm1oWGNhW16OcWNoanhyc21ndnN5g3OCg3uIjn58ioiOeW6QinRsc4J0f3+IhYeRhJWPen2Mj4iRm4SAfIyEcn+Bc3R3cW6Tk5OTk5OTk5OTkpKSkpKSkpKSkpKSk5OTkpKSkpKSkpKSkpKSkZGRkJCPj4+Pj4+Ojo6Pj46OjY2Njo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo2NjYyMjI2NjY2Njo6Ojo6OjY6OjY2Ojo6Oj4+Pjo2NjY2Oj4+Pj4+PjoKAfnp6fX5+fX1/fn59fn5+fn5+fn+Af4CAgIGAgIB/gIGBgYOHjI6Ojo6NjY2NjY2NjY2NjZKSkpOTkpKSkpKSkpKSkpGRkZGSkpKSkpKSkpKSkpKSkpKSkpGRkZCQkI+Pjo6Ojo6NjY6Ojo2NjY2Njo6Njo6OjY2NjY2Njo6Ojo6Ojo6NjYyMjY2MjIyNjY2Njo6Ojo6NjY2NjY2Njo6Ojo6OjY2NjY2Ojo6Ojo+Ogn99ent8fn59fX5+fn5+fn5+fn5+f4B/gICAgICAgH+BgYCBg4aMjY6NjY2NjY2NjIyMjIyMkpKSkpKSkpKSkpKSkpKSkZKSkpKSk5KSkpKRkZGRkZKSkpGRkZGQkJCQj4+Ojo6OjY2NjY2Njo6Ojo6NjY2NjY2NjY2NjY2Njo6Pj4+Pjo6NjIyMjIyMjIyNjY2NjY2NjY2NjY2NjY2Njo6Ojo2NjY2NjY2NjY6Ojo6Cf3x6fHx9fn19fn19fX59fn5+fn5+gH9/gICBgYGAf4CAgICDhouOjo2NjY2NjIyMjIyMjIySk5OTk5OTk5OSkpKSkZGSkpKSkpKSkpGRkZGRkZGRkJCQkJGRkZCQkJCPj46Pjo6Ojo6Ojo6Ojo6NjY2NjY2NjY2Njo2MjY2Njo+Pj46Ojo2MjIyMjIyMjIyMjY2NjY2NjY2NjY2NjY2Njo6NjY2MjIyNjY2Njo6OjoN/fHp8e31+fH1+fXx9fn59fn5+fn5/f3+BgYGAgICAgYCAgIOGi42NjY2NjIyMjIyMjIyMjJA+LjExMTEvb4eEhISEiF0tMDAwMC1GoaGhoaGhoJqZmpqampqKg4SEhIOEd2VnZmZmaFxDREREREJLkpqZmZmZmnpsbm1ubnFJLDAwLy8sSYWDg4ODg4OLjIyMjIyMjY2NjYyMjY2NjY2NjY2NjIyMjIyNjY2NjY2OhX19e3t6fX58fH59fX1+fX1+fn5+fn9/f4GBgYCAgICBgICAgoWKjI2MjIyMjIyMjIyMjIyMjy0aHR0dHBpohoKCgoKGUxgdHR0dGTekpKSkpKSjnJycnJycnImBgoKBgYJyXV9fX19hUjQ1NTU1Mz+TnpycnJydd2VnZ2dnazwYHBwdHRg7g4GBgYGAgYqLi4yMjIyMjIyMjIyMjIyMjY2NjY2MjIyMjIyMjY2NjY2GfH16enp8fXt8fn19fX59fX5+fn5/f3+AgYCBgYGAgIGBgYGChYqNjYyMjIyMjIyMjIuLi4uRiYeIiIiIho2QkJCQkJCMh4eHh4eHiZKTkpKSkpKRkZGRkZGRj46Ojo2NjYuJiYmJiYmIhYaFhYWFho2Ojo6Ojo6LioqKiomJhoKCgoKCgoSKioqKioqKi4uLi4uLi4uLjIyLi4yMjIyMjI2NjIyMjIyMjIyMjY2Njoh8f3l7enx8e319fX18fX19fX5+fn9/f4CBgYGBgYGAgYCAgYKFioyMjIyMjIyMjIuLi4uLi5GTk5OTk46SkpGJh46KkJKTkYuSjo6OhYqRkZGRkJCQkJCPj4+Pj4+Ojo6Njo6Ojo2Njo2Njo6Ojo6NjIyMjY2NjY2NjY2NjY2Njo6NjY2NjIuLi4uLiouLi4uLi4uLi4uLi4uLjIyMjIyMjIyMjIyMjIyMjIyNjY2NiX59eHh5fH18fX19fHx9fX59fn5+f3+AgICBgYGBgYCBgIGCgoSKjIyMjIyMjIyLi4uLi4qLkJCRkZGPhI6QkIaKj4WNkJCOhY6JiY6IiZCQkJCQkJCQkI+Pj4+Ojo6NjY2NjYyMjIyMjIyMjIyMjIyMjIyMjI2NjIyMjIyMjIyMi4uLi4uLi4uLi4qKiouLi4uLi4uLi4uLi4uLi4yMjIyMjIyMjIyMjIyMjIyMjI2Lfnx3dnh7fXx7fX18fH19fn5+fn5/f4CAgIGBgYGBgIGAgIGChIqMjIyMjIuLi4uLioqKioqQkJCQkIqFjoiOhoaPiY2QkJCIjo2JkYmMkI+Pj4+Qj5CPj4+Ojo6OjY2MjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMi4uLi4uLi4uLi4uLi4qKioqKi4qKi4qKi4uKioqKi4uLi4uLjIyMjIyMjIyMjIyMjIyMjIt+e3d2eHt8fHx9fX19fX1+fn5/fn9/f3+AgIGAgYGAgYCBgYGEiYyMi4uLi4uLioqKioqKipCQkJCPhYOMjpCOiYyKjpCQkImOjImQiI6Pj4+Pj4+Pj4+Pjo6OjY2NjYyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIuLi4uLi4uLi4qKioqKioqKioqKioqKioqLi4uKioqKiouLi4uLi4yMjIyMjIyMjIyMjIyMin18dnZ4fHx7fHx9fX19fn5+fn5+fn9/f4CAgYCBgYGBgIGAgYSJi4yLi4uLi4qKiomJiYmJkJCQkJCMhoyJjoeFjYmOi4uQiI2MiY6Hj4+Pjo+Pj4+Pjo6OjY2NjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyLi4uLi4qKioqKioqKioqKioqKioqKioqKi4uLioqKioqKioqLi4uLi4uLjIyMjIyMi4uMjIyKf353eHp7enp8fHx7fX1+fn5+fn9+fn9/gICAgICBgICAgYCBhIqMi4uLioqKioqJiYmJiYmPj4+Pj5CMjouPjIqPjI6MjY+Mjo2LjYyOj46Ojo6Ojo6Ojo6NjYyMjIyLi4uLi4uLjIyMjIyMjIyMjIyMjIyMjIyMjIyLi4uLioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi4uLi4uLi4uLi4uLjIiAfXh5enl5e318e3t9fn5+fn5/f35+f39/gICBgICAgIGBgIGEiouLioqKioqJiYmJiYmIiI+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Ojo6Ojo6Ojo6Ojo6Ojo2NjYyMjIyLi4uLi4uLi4uLjIyMjIyMjIyMjIyMjIyMjIyMjIuLi4uKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLi4uLioqKi4uLh4B8eHp6eXt8fHt8fH1+fn5+fn9/fn9/f39/gIB/gYGAgIB/gYSJi4qKioqJiYmJiYmJiIiIj4+Pj4+Pj4+Pj46Pj4+Oj4+Ojo6Ojo6Ojo6OjY2NjY2NjY2MjIyMjIuLi4uLi4uLi4uLi4uLi4uLjIyMjIyMjIyMjIyMi4uLi4qKioqKioqKioqKioqKioqKioqKioqKioqKiYmKioqKioqKioqKioqKioqKioqKi4uHgHt5eXh6fHx6e3t9fX5+fn5+f39+f39/f39/f3+BgYCAgH+BhIiLiomJiYmJiYmJiIiIiIiOjo6Ojo6Pj46MjI+Sj5COjo6Ojo6NjY2NjY2NjY2NjIyMjIyMjIuLi4uLioqKioqLi4uLi4uLi4uLi4uMjIyMjIyMjIyLi4uLi4qKioqKioqKioqKiomKiomJiYqKioqKioqJiYmJioqKioqKioqKioqKioqKioqKi4aBe3h5eHp8e3t7fH19fn5+fn5/f35/f39+fn9/f4CAgYCAgIGEiIqJiYmJiYmJiIiIiIeHh46Ojo6Ojo6Ojo+MkJOQkI+Ojo6NjY2NjY2NjYyMjIyMjIyMjIuLi4uLi4qKioqKioqKi4uLi4uLi4uLi4uLi4uMjIyLi4uLi4uLioqKioqKioqKiYmJiYmJiYmJiYmKioqKiomJiYmJiYmJiYqKioqKiomJioqKioqKhYB6eHl5fHt6ent8fH1+fn1+fn9/fX9/f35/f39/gICBgICAgYSIiomJiYiIiIiIiIeHh4eHjY2Ojo6Ojo6Pj4+PjoyNkI2NjY2NjY2MjIyMjIyMjIyMi4uLi4uLioqKioqKioqKioqLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4qKioqKioqJiYmJiYmJiYmJiYmJiYmKioqJiYmJiYmJiYmJiYmKioqJiYmJiYmJioqFf3l6eXh7e3p7fHx7fn5+fX5+f39+f35/fn+Af3+AgICBgYCChIeKiYmIiIiIh4eHh4eHh4eNjY2Njo6Oi42Nj5WPiYyPjYyNjYyMjIyMjIyMjIuLi4uLi4uLi4qKioqKioqKioqKiouLi4uLi4uLi4uLi4uLi4uLi4uLi4uKioqJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYR+eXt5ent7ent9fHt+fn59fn1+f35/fn9+f3+AgICAf4CAgICEh4mIiIiHh4eHh4eHh4aGhoyNjY2NjY+MjImKj42IjJGPjY2NjIyMjIyMjIyLi4uLi4uKioqKioqKioqKioqKioqKiouLi4uLi4uLi4uLi4uLi4uLi4uKioqJiomJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJg355e3p8e3p7fX17fH9+fn5+fX5/fn9+f3+Af4CAgH+AgH9/f4OGiIiHh4eHh4aGhoaGhoaGjIyMjIyLiYyKiIeJhoyOjJCMjZGOjIyMi4uLi4uLi4uLi4qKioqKioqKioqKioqKioqKioqKiouLi4uLi4uLi4uLioqKioqKiomJiYmJiYmJiImJiYmJiYmJiYmJiYmJiYmJiYmIiImJiYmJiYmJiYmJiYiIiIiIiYmCf3h7e3t6enx9fHt9f39+fn19fn9/f39/f4F/gIB/gICAgICAg4aIh4eHhoaGhoaGhoaGhoWMjIyMi4yOjoyKioeEiIuKjIuNjo+Li4uLi4uLi4uLi4uLioqKiomJiYmKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiomJiYmJiYiIiIiIiIiIiImJiYmJiYmJiYmJiIiIiIiIiYmIiIiIiIiIiIiIiIiIiIJ/eHp7enp6e3x8fX1+f35+fX1+f39/fn+AgICAf3+Af4CAgYCDhYiHh4aGhoaGhoaFhYWFhYyMjI2NjJCSjI2Ii4mJi4uLi4mLjIqMi4uLi4uLioqLi4qKiomJiYmJiYmJiYqKioqKioqKioqKioqKioqKioqKioqKiYqJioqJiYmJiYmIiIiIiIiIiIiIiImJiYmJiYmJiYmIiIiIiIiIiIiIiIiIiIiIiIiIiIiHgXx4e3x5enp8fHx8fX9/fn59fX9/f39+fn+Af4B/f3+Af4CAgIKEh4eGhoaGhYWFhYWFhYWFjIyNkY+PjZGJjIaJjIuIiImMiYeNjo+NioqKioqKioqKiomJiYmJiYmJiYmJioqKioqKioqKioqKioqJioqKioqKiYmJiYmJiYmJiYmJiYiIiIiIiIiIiIiIiImJiYmJiYmJiIiIiIiIiIiIiIiIiIiHh4eHh4eHh4WAenl9e3t7enx8fHx9f39+fn19f39/f35+f4B/gH9/f4B/gH+AgoSHhoaGhYWFhYWFhYWFhISLi46PjoyLj4iHiYmMjYWFjo2KiYyNi46KioqKiomJiYmJiYmJiYmJiYmJiYmJiYmKioqKioqKiomJiYmJiYmJiYmJiYmJiYmJiYmJiYmIiIiIiIiIiIiHiIiIiIiIiIiIiIiIiIiIiIiHh4eHh4eHh4eHhoaHh4eHhH55eX16enp7fXt8fX5+f35+fX5/f39/fX5/f3+Af39/f39/f4CChIaFhoWFhYWFhYWFhISEhIuLjI6MjI2Lh4mIiomGgoiNjoiKi5GTj4uJiYmJiYmJiYmJiYmIiYmJiYmJiYmJiYmKioqKiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiIiIiIiIiIeHh4eHh4eIiIiIiIiIiIiIh4eHh4eHhoaGh4aGhoaGhoaGh4eDfXp5e3p5enx8e31+fn5/fn59fn9/fn9+fn+AgICAf35/f39/gIKEhoWFhYWFhYSEhISEhISEioqOjYmIiIqKh4iHiomIioiIh4qGi5GPiomJiYmJiYiIiIiIiIiIiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmIiIiIiIiIiIiHh4iIh4eHh4eHh4eHh4eHh4eHh4eHh4eHhoaGhoaGhoaGhoaGhoaGh4J8eXl6eXp7e3t7fX5+fn5+fn59gH9/f39/f4CAgH9/fn9/gICAgoSGhYWFhISEhISEhISEhISKi5CPiYmJi4qHh4WHiYuKiYSLjYmOjYmJiYmJiIiIiIiIiIiIiIiIiYmJiYmJiYmJiYmJiYmJiYmJiIiIiImJiYmJiYiIiIiIiIiIiIiIiIeHh4eHh4eHh4eHh4eHh4eHh4eHh4eGhoaGhoaGhoaGhoaGhoaGhoaGgXt4enp4e3x7e3x+fn9+fn5+fX1/f39/f3+Af4B/f39/f3+Af4CChIaFhYSEhISEhISEhISEhI+Qj4+IiYuIhoeIiYuLjIuJioqNio6Oj4iJiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIh4eHh4eHh4eHh4eHh4eHh4aGhoaGhoaGhoaGhoaGhoaGhYWFhYWFhoaAe3h5eXh4enp8fX1+f35+fn59fn9/f39/gIB/gICAf39/gIB/gYKDhoiGiIaDhISEhIODg4ODkpKOioeKi4qLh4uNiYqJi4iHiouIio+SioiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIh4eHh4eHh4eHh4eHh4eGhoaGhoaGhoaGhoaGhoaGhoaGhoaFhYWFhYWGhn96eXh4eHl5eXx9fn5/fn5/fn1+f35/f3+Af39/f4CAgH+AgH+BgoOHjo+PjoiHhIWFhoaFhYWSkI6KiYmIiImKioiIh4aKjIiHiYmOkJGNh4iIiIiIiIiIiIiIiIiIiIiIh4iIiIiIiIiIiIiIiIiIiIiIiIiIh4eHh4eHh4eHh4eHh4eHh4eHh4aGh4eHh4aGhoaGhoaGhoaGhoaGhoaGhoaGhoWFhYWFhYWFhYWGf3l4d3d3eXp5e3x9fn9+f35+fn5+f35+fn+Af4CAgICAf3+Af4GBg4eOjo6Ojo6Mjo2OjY2MjZCQjomHhoiJiYeIiouIiYyJiYaKjY6PkYuIiIiIiIeHh4eIiIiIiIiHh4eHh4iIiIiIiIiIiIiIiIiIiIeHh4eHh4eHh4eHh4eHh4eHh4eHh4aGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaFhYWFhYWFhYWFhYZ+eXd5d3d6eXl8e31/fn5/fn5+fn5+fn9+f4B/fn+Af39/f39+gIGEiI6Ojo6Ojo6Ojo6Ojo2NkJGOi42JjIiIiYaHiYaIioiHi4yLjpCQiIeIiYmJiIeHh4eIiYmIh4eHh4iIiYiIiIiIh4iIiIiHh4eHh4eHh4eHh4eHh4eHh4aGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoWFhoaFhYaGhoWGhYSEhIWFhoaFhIWFhX55d3l2eHl4e3x7fn5+fn5+fn5+fn5+f39+f39+f39/f35/f3+AgYOGjY2Ojo6OjY6NjY6OjY2Qj42Ni46KhoiKhISLiYeDhYSDi4mLj42JjI6QkI+NjYyLjY6Pj42NjI2Nj4+Pjo6MjYyMjY2KiYiHiImHh4aHh4eHh4aGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoeHiYqKiIeJi4yNjo2LiImLi42OjYyJiImMgHl3d3Z6eXh7e3t+fn5+fn5+fn5+fn5/f39+fn5/f4B/f4B/f4CBg4aMjY2NjY2NjY2Qj4+Pj46NjI6KiYuMjIeFiY2Lh4aIh4aHh4uNjo6Pj4+Pjo+Pj4+Pj4+Pj4+Pj4+Ojo+Pj4+Pj4+Pj4+Oj46Oj46Mi4uJh4eHh4aIhoaGhoaGhoaGhoeLiYeHiIiLjY2Mi4yLjY2Ojo+Ojo6Pj46Ojo6Ojo6Ojo6Njo6NjY2AeHZ4eHp4enx6fH5+fn5+fn5+fn5+f39/fn59fn9/f39/gH9/gIGDhoyMjIyMjY+QkpOTk5KSjYyMjIqHioyKh4eJiYWCiouIiYWJjpCNjo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6NjI2NjI2LiYaHh4eHiYqLjY6NjYyNjY6OjY2OjY2NjY2NjY2NjY2NjY2OjIyNj4+OjY2MjIyLi313dXd5enp7e3p+fn5+fn5+f35+fn5/f39+fn1+f39/gICAf3+AgYOFj5KRkJGSk5OTk5OTkpKLi4uLiomMiouLiYuKhoeOjYiIjI6OjIuMjIyNj46Njo6Ojo2NjY2MjY2NjIyMjIyMjIyMjY2NjYyMjI2NjYyMjI2NjIyNjIyMi4yMi4yMjI2MjIyMjIyMjIyMjIyLi4uLi4yNjY6Sk5OSkpSRkJOVlZSTk5COjo6Oe3Z2d3h6ent7e31+fn5+fn5/fn5+fn5/f35+fn9/f39/gIB/f4CBgoSNkpKTkpOSkpOTkZKSkoqJioyJi4qJjIuKioiHiYqKi4mKjY2Mj46Nj5KUlJOUlJOTkpGSkI+Ojo2NjY2Pko+OkZGOjIuKioqLi4qKi5CPjoyMjIqKioqKioqKiouKioqKi4yLi4uMjIyKiouLi46RkpOTk5SUk5STk5SUlJOTk5KSkpKSk5F6dXZ2eHt7e3p6fX5+fn5+fn5+fn5+fX5/fn5+f39/f3+Af39/gIGChIuRkZGRkZKSkpGRkpGRiYmIiIqMiYiJiYuJhoSJhoyKh4ySkpKTk5OUlZWWlZWUk5OUlJSUlJSUlJSVlZWVlZWUlJOTkY+QkZKQjoyRlZWVk5KSjo+QjYqKi4qKi42OjY6RkpCRkpKSkpGRkpKSk5OTk5OTk5OTk5OTkpOSkpKSkpKSkpKSj3h1d3l6e3t7ent9fX1+fn5/f35+fX5+fn5+f39/fn9/f4B/f3+AgYKEi5GQkJCSkpKRkZGRkZGIiIiIi4uJg4eLi4yMiIeHjYyNkpSSkpOTlJWWlpaVlZSSkpOTlJSUlJWVlZaXlpaWlpWUk5SUlJSVlJSUk5OVlZWUk5KTk5OTkJGSkZGSk5OTk5KSkpOSkpKSkpKSkpKSkpKSk5OTk5SUk5OSkpOTkpKSkpGRkZGPdnJ3enp7e3t8fX59fX1+fn9+fn9+fn5+fn6Af39/f3+Af3+Af4CBgoSKkJCRkZGRkZCQkJCQkIeHh4eIiIiFi4+KjI6Njo+OkJWUk5OTk5SUlZWVlJSUk5KSk5KTlZSUlZaWlpaWlpaWlpSTk5OTk5OUlJOSk5SVlZSTkpKSkpOTk5OTk5OTk5KSkpKSkpKSkpGSkpGRkZGRkZKTlJSUlJSTkpGRkZGRkZGRkZGRkYx0c3d6ent7e3x9fX1+fX5+f35+fn5+fn5+fn9/f39/fn9/f39/f4GDhIqQkJGRkJCQj4+Pj4+Ph4iKi4yNjYuOj42Mjo6RkpGSk5OSkpKSk5SUlJOSk5OTkpKSkpOTk5STk5WVlZWUlZWUk5OTk5KSk5OUk5KTlJSUk5KSkpKSk5OTkpKSkpKRkZKSkpKSkpKSkpKSkZKRkZGSkpOTlJSUk5OSkZGRkZGQkJCQkZCRinN0dnp8fHp7fXx9fn59f35/f35+fn9+f31+f39+fn59f39/gH+AgYKDipCQkZGQj5CPjo+Pjo+Oj4+Pj4+Pj4+PkI2OjpCRkpKSkpKRkpKTk5OTkpGSkpKRkZGSk5ORj5OSk5STk5OTlJOSk5OTk5OTk5OSk5OTkpKSkpKSkpKSkpGRkZGSkZCRkZGRkZKRkZGRkpGRkZGRkpKSkpKSkpKSkpKRkJCQkJCQkJCQkJGGc3V2e3x8e3x9fX1+fn1/f35/fn5/gH9+fX5/fX5/fn5/f3+Af3+BgYGKkI+PkI+Pj4+Pj4+Pj4+Oj46Oj4+Pj5CQiI2PkJGRkpKSkpOTk5OTkpKSk5KSjpCRkZGSk3+Ek5GRkpKSkZKSkpKSkpKTk5KRkZKTkpGRkpKSkpKRkJCQkJGRkZGQkJGSkZGRkZGSkZGRkZGRkZGSkpKSkpKSkZCRkZCPj4+Pj4+Pj4+PkX9ydHh8fHx7fHx9fX5+fn9+fn5/f3+AgH99fn5+f39+f39/f4CAf4GBgYqPj4+Pjo6Ojo+Pj46Ojo6Ojo+PkI+Pj4+GjpCQkJCRkZGRkZGRkZGQkJCQkJKEeZCRkJKIc4mRkJCRkZCQkJGRkZGRkZGRkJCQkZGQkJGRkZGRkI+PkJCQkJGRkJCQkJCRkJCQkJCQkZCQkJCQkJCQkZCQkJCPj4+Pjo+Pj46Ojo+Pj4+PeHJ2eXx9fHp9fH19fn5+f35+f39/f4CAf39/fn5/f35/f39/gIB/gYGAio6Ojo6NjY2Ojo6Ojo6NjY2Oj4+Pj4+PjoiQkZCPj4+QkJCQkJCQkI+PkJCPkI1we5CPj3d2iJCPj4+PkI+PkJCQkJCQj4+Oj4+QkI+PkJCQkJCPjo+QkJCPj4+Pj4+PkJCQkI+PkI+Qj4+PkI+PkJCQkI+OkI+Pj46OjoyMjY2NjIqDiYhzc3Z4fX58eX18fX1+fn5/fX5/fn9/f39/f4B/f39/f4CAgH+AgH+BgYCJjY2Ojo6Ojo6OjY2OjoyNjY6Ojo6Ojo2NiJCRkI6Njo6Ojo6Ojo6Pjo6Ojo6OjnVshZCHcniHj46OjY6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Pj46Oj4+Pj4+Pj4+Pjo+PjY2MjYyNjoyLi4mJiYiFhYSDgoKEgnR5fXp4dXJrZWltb2xmZmdncHNzd3l9fnl6e3x9fX1+fn59fn9/fn9/f39/gIB/f3+AgIGAgIB/f4CBgImNjY2NjY2MjYyMjIyMi4uLjYyMjIyMjIyGj5GRjIyMjIyMjIyMjIyMjIyMjIyNeG11joF0doaNjY2MjIyNjY2NjYyMjI2MiomKi4uJh4KAh4iEgXt6gH57fXx8fXlzcnJycnV1cG1ramppZ2NkYV9bXF1eWFVXWFlTS0VJSkpLTE1PT0tgdHR3eX19eHp5e3x8fX5+fn1+f39+f35/f4CAgH+AgICBgYCAgICAgIGAf4OEhYSFiIuLjYyMjIuLi4yGiYqKioqKh4OOkJGNiouLi4uMiYmKioqKiouLi4hwYmd4c291goWDhIeJiYWCg397fHl6e3pzcHFxcW1samdsbWdlZmVmZGNlZGVkZWVlZWRkZGNhYV5dXFpYWFdUUFFSU1JTTU1KSUZESEpHR0hHR0xOSWdzdXh6fXp4d3l8fHx8fn5+fn9/fn9/f39+f4CAgIB/gICBgICAgICBgYFnXmBjYWNucX17ent/fXd8fHZ4ent4eHpvcXt4eXt8e3h3e394dXd0dHZ1dXZ3clxiaVxiZGtnaGtsbm9tamlpaGhlZWRkZF9gYWJgYF5dWVhaWltdXV9gX2BfX19gYmFeXl5eWVldXF1bV1dWUlRSU1NOUUpISUZERUhMTEhGR0lLSklNbXJ0eHp7end3eXt6e3x+fn1+f39+f35/f35+gIGAf3+AgIGAgICAgICCgWdYW1pZXFtcY1xaXF5ga3FtcHBvbm5vbmtpbmxrbG9qaWtraWpraWZmZ2dnaGhgY3RsXmpuZ2RiY2JhYmBgXVhbW1dYV1RWUVBUU1NNSkxLTExOTk9UWFhXVVVUUlBQTU1QT05LTE1QUU9MTEpHSUlHSEhJSEhIR0ZHSEpKSEhISUlISVZwc3V5ent5dnZ5enp7fH59fX5/f35/fn5+f3+AgX9+f4B/gICAgICAgIGBbFtYVlZWWVlaWVlYVVZoamxubmxra2poaGloZGVkYlxiZl9fYWNfXF9dYF1eWltrc2thbXRuZVlZX1tYV1NOTUtLS0tMSUtNTktKS0tMSktQTEtLRkdHSUlGR0lISUZFSEdGRkVERUVEREVJSUlHSEdIRkZLTUtJSUlIR0hLTU1LTExMVXFzdnl6e3h2d3h3ent8fn1+fn9/f39+f3+AgIGAfn5/f4CAf4CAgIB/gYJoUlRVVlNVV1lZWVdXV1tbYWNfXlxbWFZWWVZSVFJRUVVUU1NUUE1KTU5QUk9NW2Vva1ppc3RrUlFTUFBOTk9NSk1MS0xKSktLRklJSkxJR0pISUlFR0dGRkVFSElKR0ZHRkZHR0hKR0dISEpMSkpLSUlISktLSkhKS0pISUtMTU9QUEtUdHN1eHp6eHZ2d3d6enx+fX5+fn5/f35+fn+AgYB/f3+AgYB/gICAgH+AgmlQUlRXVVRWWVdYWFpbVFRTUlBRU1FRUU9OTlBQUU9MTlBPTk5NTEtNTk5QTU5YYmhtbm9wcW5TTE9QUFBPTk5PTk5QTk1NS0lISEpJSUlJR0ZHR0dJSkhJSEhJSEhHSEdISElISUxLSklISkpJSkpIR0pMS0pJSUhKSktMTk1NTU9RTFVzcnN3enl3dnR2eHp7fX19fn5+fn9+fn5+gICBgICAf4GBgH+AgICAgICBbE9PTlRZVVVdW1lXV1hOTUpKSUZKT0xKSkdJSk1NS0pMTUpHSUlJSktLRUNGSVZjZmdxbm1oZ11RTk5OT09NTk9MTk5OUFBPTE1MTk1MTEpJSEdJSElISElJS0xLS0pJS0pJSklJSUlJR0dKSUdJSUpKTk1OTEhJSklJSk1PT01MT1JOWXBwcnd4d3d0c3R3enx+fX5+fn5+fn5+fn9/gICAgICAgYCAf39/gICAgIFvS0pNTlFOTlVXVlZSU0lFQ0VFUkREQT5CP0RAQD5CREFAQURHRkVIRUVLTU1SX2ptaG5tbWpoZmNjY1pMSklKSUlLSkxQTk1MTU1MTU1NTElIREZGR0ZGRklKSUlLSkhMSklKSkpJSEhKS0tIRkdJSklLTU5OSktPTUxLTU1PUE5QT1BgcG9yd3h2dHJzdXd6fX19fn5+fn9+fn1/gICAgICAf4CAgIB/f3+AgICAgXNQUE5OUE1KS1BSUE5RQ0RCQUZRRT1DPT9FSDk6Oz0/PTxBRkA+Ojw+RVRdX2NpbG5pbWxsampramdeT0dFRUZFR0dHR0pHSEpLR0NER0pHQ0RFQUFDR0hHSEdISktKSElMS0lISktLTU5MTUxMSkpMS0lLTU9PUFNRT1BQTk9QUlFNUGdwb3N2dXRycXR4eX19fX1+fn5+f4B+foCAgH9/gIB/f4CAgH+Af4B/gICCdlRVUVFQT0xNUFBOT09BQkFAQkE/Oz48Pj8/Ozg5ODs7OkA6Oz48Ozs7O0dWX25wcWtta2ppbWdYSUVFREdJSEM/QEBAQUFCQUE/Pjw9PkFAQD8+P0BFR0dHSUtMTk1OTUxNTUpLTVBVU05MTlFOTk1OTE1NTk9OTk1LS05OTk1OTkxUbnBwc3R0c3Fydnh5fX19fn1+fn5/gH5+gICAgICAgH9/gICAgH9/gH+BgIJ4UVFSVFJTUVNTUVFST0BAPT4/PD8+QEE/PT45Ozo7Ozk5Ojg4Ozw5Nzk7Ozw9UWVxcnNvbGhYRUA/Q0ZEQ0NDPzs+PkBDQ0E/Pj9BPkBAQj9APD9CQEFDRUVFSktQT1BPTU1OTExMT1JRUFJOTExPTUtOT0xMTEtMS0tKS0tKTU1LS1xxcXF0c3VycXR4eHp9fn1+fn5+f39/fn5/gIGAgH+Af4CAgICAf4CAf4CAgXxSTU9RUFFSUlRSU1NOPDs8Ozs7P0BBQkA9PDk8PTw6Nzk6Ojk3OTo6Nzg6OTk5PEtue3FWQTg6PD1AQUA9Ozs+PD08QEJDQT9BQkE9Pj09Oz0/Q0RCQD9BREJFR0pKSkpKTE1MTExNTExOVVNLTE1USVBKSU1KSUpLS0pJSEdKS0lKZnJxc3RzdXJydnl6e31+fn5+fX9+f39/f36AgICAf4CAgICAgIF/gIF/gYCBgFZMTlBQTlJRUFBRUU44PT88PDo9PkFAQT8+PkA/Pj48PT0/QD09PT9DOz09PT08O0psZTk6Oz09Pj9AQUA/P0E/QEBBQEBAPT8/PTw6Oz09PD9AQUJCQUBCREZGRkdGR0dISUtMTExLTEtKS0lKSk1MTEpMS0lISUxMSklJSElLR01tcHF1dXR1c3V4eXl8fX5+fn5+fn5/gH9+gIB/f39/gH+AgYCAgYCBgICBgYCCYUtPT05OT1BPT1BQTzo8Pjw9Oz8+PkFBPz0/Q0NEQT89PkBBP0A8XG5APkRFPz9BOkZfPj49Ozo9PkFBPz5AQD9BPz89PD48PTs7PD0+QUA/QD5AQ0NEQkRFSEVFR0hISEdGSUpJSUlJSUhKSkpKTEtKSklJSEhKSktMS0lLSkpIVnBwcXNzdHR1eXp7fHx+f35+fn5+f39/f39/f3+Af4CAgICAf4GBgICAgIGBgIJtTFBRTk9QTk5PUFBPPjw8PT4/P0A+QEA/Pz9CRkQ+PDw9QD04Ojttd0g4Ozo9PUE8S2Q9PD08ODo7Pz49PD07PEA9PTw8Pjs9PD0+QUBCQUBAP0JEQ0RFRkZGQ0VHSElJSEhJS0tMTUpKSUpNTUpLSktJSEhISEpJSktKSk5MSUlfcHBycnJ0dXZ6e319fH5+fn5+fn5/f35/f36AgIB/gICAgICAgYGAgICAgIGAgnZNTk5NTk5MTE5QT0w+QTw8PT8+QkM/PkFBQUJBQFlSPDw9SU1GRnV3TTc4ODo7Pj5XakE7PDw6Ojs+Pz89PTk6Pjw9Pj89Oz4/QEJDQkJDQ0FCQkFCQkRCQkRCRENGSUdGRkhJSUtNSklKSktMSkpJSkVESUlGRkhISUpKTEpGRmdwb3FxdHZ1d3t8fH18fn59fX1+fn9/foB+fn+AgH+AgICAgICBgYCAgICAgICBek5JS0tMTExFSUxOTTw/PDw9PkBAQUE7QkNCQ0BDc3lJO11/g396fHdXPD0/PT0+Rmh0TDo9Pj89PT9BQ0A8OTtBPz4+QT07P0JAQkNCQENDQUNBPT0+QD0/QUFBQENFRUBAQ0JDR0dFRENGRUZGR0VEQEFHR0ZDRkRHSEpHQz5IbG9wcHF0dXZ5fHx9fHx+fn1+fn5+fn5+f36Af3+AgICAgICAgIGAf4CAf4CBgIF+UUhLTU1NS0pLTE9RQD8+PkFBQEBBR0FCRENFQUhyeWtig4SDg4OAfV4+QENAQT1KcntZOj1BRUFCQkZIQz08QEREQUA/Pj1AQT4+Pj88PkBER0VAPkBBP0BDRkVDQkJDQEJEREJERUFCPkFCQkFCQEA9QUJDRENDQUNFR0E/PVZwcHFwcnV1d3p8e3t7fX9+fX19fX1+fX5+fn9/foB/f4CAgICAgYCAgIB/gIGAgX5SSEtNTUxLS05OUlVEQkBDQ0FBQkBCQ0BAQUFARm90fYKCgYN+fYV2TUFDRUA/Pll7gF0/Q0VJSklJTU1LRUNGR0dFR0VFRUREQ0E/QD4+QkZKSkdFRUdGRkpOTktKSUdHSEtMSUdHQ0REREVEQUJCQ0BDREVEREVERUZDQkFEZW9wcXF0dnV4e3x6fHx+f319fX19fn59f4B/f39/f39+gIGBf4CBgICAgH+AgICAfVJJSUpKSEpKTE9SU0dGRUdIREdIREA+PDs+QEVFaHN9gXx/hH55hXJDREVEQ1d1hoeHflhHSEpNTE5PT0xIR0hHSElJSEhHR0hIRUNFRUVFRkhKSkZFR0lKTU9PTU1LSktKTU5LSUhHSEhIR0ZFRkZGREZIR0VFSEhGSEZIRlFubnBxcnV2eXt7e3p8fX5/fX19fX1+fn1/f39/fn5/gH+BgYGAgICAgICAf4GBgIB8UEhHSElGR0lKTU5OSkxJSUpLTE5KRkNBQkNGSkdge4B/d3+EhYOEimxBQVZ0h4mHh4eIg1dITE1MTU5MSUdHR0dER0dHR0ZIRkhFQ0RERkVEREhIQ0NDRklLS0xMTExMTElKS0pKSUlJSEpISEdISUhHR0hGRkZISklJSUlIXW9vcXJ0d3d6e3t6e319fn59fX19fX5+fYB/f39+fn+BgIGAgYCAgICAgIB/gYCAgHxNR0ZIRkVGR0dKS0pMTUxLTU5NT0tJSEhKS0tMTE5bfIKCg4OFhoaIg1ZshIeGhoaHiIiHfFBLTEtIR0ZGREVDQ0BAQ0NDQ0ZGRUJAPj5AQUFAQkQ/Pj9ERkhERUdJSklKSEhIR0lJSkpJSEZKSkpKSUpJSkpKRklMTEpKS0tmb3BzcnR2eHl7e3t8fH1+fn19fX19fn59f39/f35/f4CAgICAgYCAgIGAgICAgICAfU9GRkdGR0hHRUZHR01NTUtMS0lHQ0NDRElLS0xMSlSBg4SEgoKFhoaEgoaFhISGhoaHh4aKdUlJRkI/P0A/Pz88PDw+Ozo8QUFAPjw5OTg8PD07Pjs4Oz9BQkBBQ0NCQEFBRERCQ0ZISUhISEtNTEdJSk1NTk1KSktLSkxMU2xwcXRzc3d5e3t7fH19fn9+fX19fX1+fn5/foB/fn9/gICBgIGBgICAgYCAgIB/f39+UUZFRkdJSUdEQ0VGTk1MSklIRT85Oj5ARUhISkpJZYWEhIR/gYKDgoODhIWFhoeIiIiIiYyOZkJCPTg4Ojo5ODc4ODk2NDc5Ozw6ODU1Nzc4OTc4NzU4ODs7Oz1AOzk5OT08Pjs8PUFDRUhKTUxMR0lIT1JRUFBOTE1NT1Fdb3BydHN1eHp7e3x8fn5+f359fX59fX5+f39/gH9/f4CAgICAgYCAgICAgICAgIB/f39RR0ZHSEpIRkVGR0hMTEpJSUdDQjU2OjxDQENHSUlohoSEgX6Bg4ODgoOEhomKjIyLi4mKi4yJVDo4NjU2NzY2NjU2NzczNTY4Ojg3NjU2NTY3Njc2ODo2Nzg4OTs3NTc4OTc5ODc2OjxAR0ZJRklGRUZQU1JTU1JPUFBSVGVxcXN0dHZ5e3t7fH1+fn5/fn19fX19f39/f39/fn+AgICAgICBgICAgICAgICAgH9/flJISEhJS0lHSUpJSkpLREVIRUJANTc4OD06PUVDQmWFg4GAgYODg4ODhYmLiomJioqKiouJioqBRzU2NjQ2ODg3NDU3ODU2NzY5OTc3Njc2NTo5Ojo6Ozc5ODk4Nzc3OTo5ODg3ODY4OTtBPT4+QkE/QUtMT1FQUU9PT1JXa3FydHR1dnp7e3t9fX5/fn9+fX19fX5/f4B+f39/f4CAgH9/gICAgICAgH+AgICAf39+VEhHSUlMTUtKS0tMSUg/QEFAPDo1Nzk4OTc7Qjo9cYSAgYODhISEhYaJioqIh4iIiIqKjIqJiYx6Pjw6ODs8PT45Ojo7ODo7OTo7Ojo5Ozo5PT09Pjs7PD06PTs5Ozs8Ozw8OTo8ODo6Ojo5OTk8Pzw8QUJESUpMS0lLTFdvcnN1c3V4e3t8fHt9f39+f359fX19fn9/f35/f39/f3+Bf4CAgICAgICAf4CAgH+Af35URkVGSUxOTkxKSk1CPzo7PDo4OTk4OTo6Ojs/Pkh+hIKChIWFhYaIiYiHhoaGiImIiYuMi4mKioxvTz4+QkRFRUJBQEI/QEJBQD49Pj5APz8/QD8/PT0/Qj9BQT9APz1AQEA+P0E9Pjw7Ojs5OTs/PTs8PT1BQUNBQkNBWHBxdHR0dnp7e319e31/fn9/fn19fX5+f35+fn9+f4B/f4CAgIB/gIGAf39/gICAf39/flJFQkFHSk5PTElHSzo4Ojs5Ojo8PTo7Oz09P0BCUoKCgoSFhIWEhomJiIiGhoaHiImKi4uLioqLiYxjPkRGSkxKSkZHSEVGR0dFQkFAQ0VDQ0FCQ0I/QERIRENFQ0VFQUZFRkRFRkRAQj48QD49P0A+Pz4/Pj8+Pjo7PTxgcXJ0dHV3enp7fX19fn5+f39+fX19fX5/fn5+fn5/gH9/gICAgICAgICAf4CAgIB/f4B+UERAPUNIT01HRkJEOTc6Pjo8Oz4/Pz89QUBDQ0ZXhIKDhIWFhoaIiYmIh4aGhoeJiYqLjI2MjIuKiodWSE1NTkxPSkpLSUlKSklFQ0RGR0ZEQ0VGREJISUtISEdGSEdFSklLSUpLSkNGQ0NEQkFBQ0JEQ0NERENBPTs9QGhwc3R0d3d5eHt8fH19fn5/f359fX1+fn9+fn59fn+Af3+AgH9/gICAgICAgICAgH+AgH9PQT49P0RMS0FCQkE5ODw+Ozw7PkA/QT5CQkdHSlmEgoOFhYaHiImJiIiHhoaGiIiIiYqMjY2NjIuKjH9QTlBPTU9MSkxKSUlISkZERkhISUVFSEZGRUxMTUlKR0ZISUpOTU5MTE5LSEZHR0VFQ0ZGRkZERUhIRkNBP0BMbHB0dXZ4eXl5fHx8fX1+fn9+fn19fX1/f35+fn5+f39/f39/f3+AgICAgIB/gICAgICAf1FBPz4/RUdHPTxAQDg3PDs8PTo+QD4/QENGSUpRX4GDhYSFhoaHiIiIiIiIh4eIiIiJioyNjYyMi4uKjXJOU1FPTk1MTUpIR0VJSUVKSEdKSklKR0dHS0xOTE1ISElKTVBOUE5NT0tJR0lKSElESUhIRkZHR0lHQ0JBQ1VucHV3d3l6eHl6e3x8fX5+f39+fn1+fX5+fn5/f36Af4B/f3+Af4CAgICAgICAgICAf39/VERBQUJHSEI/OD9AODo8OD0+Oz1BPj9BREhKTFVxg4SEhISFhoeIiIiIiIeGiIiIiIiJjIyLjIyMi4uLi2BUVFJPT05LSkhGQkdKR0xKRktPTEtKSktNTE9QTkhJS0xPUVFQUU9PSkhKSkxKS0ZHSEdGRkhGRUVCQUJCXG9yd3h5enl5eXp6e3t+fn5/fn59fX19fn9+fn9+f4CAgIB/f39/gICAgICAgICAgH9/f39VRUNFRUdHRUQ7P0E7PTw5QD4+QEJHR0FHS0xQVnmFg4ODhISGiIiIiIiIh4eIiIiIiIqLi4qMjIyMi4uOfVlYVFRVVE9NS0pERUZLT05PV1VRUE9RU1JNU1RPTVNMUFNVVlJTUVBMSk1NTUtOR0dKRkZISkRERUVCRUNjcHV5eXp6ent6e3p6fH59fX9+fX19fXx9fn5/gH9/gICAf39/f3+BgYCAf39/gIB/f39/f1VGRkdHR0dIRj5AQj0/PT1CP0JCR1ZORk5QUFRYe4aDhYWEhIeIiIiIiIiIiIiIiIiJiouKioyMjIyOi4uMaVlXa2FGVFFRUEk7O1JTUmB1XVVWVFZZWVJYWFJaZlBVV1pdUlRXUU9NUlFQUFFLS0tISEpIRUZJSUlISWlydnl4eXh6e3t8ent8fXx9gH59fX19fX1+f39/f3+AgIB/f39/f4CAgIB/f3+AgH9/f35+U0hKSUhHRkZFPz9BQUVBQ0dFREVMWFJNVFVWWFt8hoWHhoWGh4iIiIiIiIiIiIiIiIiIlJyMioqMfWGKi4uHbVxlVTpZWVhTUT9AVlVZXGRgVllicl1dV11aVkVRWVpbWV9UWWdSVlZYVFRWVE9PTUpMSklJTE1LT01Tb3N2eHl4d3l5ent6e3x9e35/fn1+fX19fn1/f39+f4CAgH9/f3+AgICAgH9/gH+Af39+fn5WSkpJSEdFRERCQT9ITUlNUEtJS1BUU1NYWlpcXHiFhIWFhYWGh4eHiIiIiIiIiIiIiImcnaCPiY5nO36LiYqLeW9wWVtcW1JUUlZWVFtadYNZVX2QYV1YXV5XSVZdXVtbX1lIWVhZW11YWFlXUlFNUFFNTU9TUVFVUmFzc3Z3d3Z4eHh6e3p8fX19f39+fX59fX1+fn9/gH9/gIB/f3+Af3+AgICAf39/gIB/gHh5fVlOS0lJSEZCREBBOlBRUVdYUFBPUVNUVFhYWVpbboGCg4WEhYaHh4eHh4iIiIiIiIiIiJaanJeIioFuhomIh4SKfmdZWVxZVFZUV1JRV1ZjloBRZXJYWldfaFBgZltbWFxnYUdPWmhnXFtcXV1XUk9TUFBRVlZWVllabnJ0d3Z2dXh4eHt7fH19fX5/fn59fn18fn9/f3+Af39/gH+AgH9/gICBgYB/gH1yfX9/b3R8XVNQT01LSkVDP0A7UFBaWltTU1FPUlJSVVNWVFdfdXiAhYSEhYaGhoaHh4eHiIiIh4eIh4ORjomJiIaFiIiGfYB8XFFWWFVSVVJRUUxPTUtmeVtdVFlVVl1aTFRaVVNUXlpYV1dXemtYW1tcXlRRUVBJTk9XVlhbWmRwcnZ2dHR2eHl5e3t8fX19fn99fX1+fX1+f39/gIB/f3+Afn56eHd2c3V7f3+AgHRrfn5rcnleW1ZVVFJPS0ZDREFNXoNsVlJTTk9RT1FVUlNSUlVjZHaAgoKDhISEhIWFhISDhoaGhoeIhn6JiYiHhoOHh4d5bnFWSkxOT0tNS0hKREVJRUM+VGRVf1JRUU5LUVRRTU9ZUk1OUVNVVU1RU1JQT01MSENJSFJUVVpcbHF1dXVzc3d6ent7e317fX19fn19fX59fn9/f39/f399fX5+f39/f4B+e3Zzd31+fmR1fWlxdF9kXV5bWVZQTElMSWFsknRQUVNOUVJRUltSU1JRUlVUYnN7fH+AgYKBgX99e3uAf4OChYaHgoaGhoGEgYaFhnVfXUxEP0NDQ0NCP0RQQkNAQz1DSUdWQEhOTEddaVBIRk5GREVGSUdIQ0RIR0hLR0RCQURAT1FNUmRydHZ1c3R1enx7e3t7fH19fHt+fX19fn5/f3+AgIB/f3x8fX+Af39/f4CBgH12dHt/bWh8Z25xZmllZGJcWFNRUFVSc1dlW09PT0xRU1FVWVNVUVFUU09WYGtscnZ7e3h5dHJuc3RzeXh+f4OAg4OCgIKAgoGCa01HP0A7Oz5AQD8/PmtQS2FFRkhJRUI/R0xOR01RVUlBRT8/PD08PT0/PT9BQ0NAPzw9Qj5KTkdVbnR0dXN0dnh6fHt9fHx9fX19fH59fXx+fn9/f4B/f39/enl3eHd2dnh7foB+fXt4dnx1YXhnbHBqbGppZmBbUVJaXFleSkpQUU5MTFFSUVRWVFdSUVdWUFhbYl1hZ21tbG9rZ2BucmptbHF1e3p9e3h6fHx4d3hlQ0BAQj06QkNCQkRCXF1Pe05PTk5LTE1PT1FMS01XTUhHQEE8OTc3NTk5PTs7Ozg5ODk/PEJIP1xzdHV2dXZ3eXx8fH18fH19fn58fX19fX9/f39/fn9/f314dXZ6e3p3eXh1d3t8eXh1eXdjcWhpcG1ubW1oZl5PUF5cWklIUFJRT01QUU5RUlRWWFNSWVROWVpbV1ldXl5fZWBdXnF2a15gZ2t3b29sam9ubmxmYllIRkZIQkFHSUVFRkRNUlBhV1JXUVBTU1JVW09PUVZQTUlERj46OTY1ODc5Nzk6MzY1Nzk1PEM+ZXNzdnd3eXl7fX18fHt8fX5+fnt9fn19f39/fn5+fn9/e3d1eX18enh8fHx8dHd2d3Z1d2tuaWhxbm9vb2prYFVXXlpYTUxUVFNQUVVPTFJTVFdYVFRYUUxXWVpWWFhWWFldV1hYaHNrXVZhc2tiYV9eZGFfXllUUU5OTkxJSEpMSUlGQ1FQU1tXVFROUVNZU1xlVU9TU1FOS0lIQz9BOTk5ODk3ODg1NzU3ODU5OUdtcXR3eHl7e3x9fX18e318fn5+en1+fH1/f359fn59f358dHR1e3hycW9vbnR4cXJzeHZ1cWZkZ3JucHBwbm1kXV9fWVdPUFhWVlNUVk9PVFZYWFlTVVRMS1RWVVVVV1BTVVdUVVJdbl5STllfW1ZZO0RWWFRbZkpMT1JST01NTk5OTUpGUVBVWVNUT0pOT1VTVFxWUlVTUk9NTElISEY/Pj06Nzg3NjU5OTY3NjY1V3Bwc3d5ent8fX59fnx9fXx9fX15fX18fn5+fXx8fX1+fXxydnF4eHJ2dXFxbnBwb3B1dnRuamRkanBwcXJwb2ZlZGNcXVJUWlZXVVRXVFJYWFlZWVJVT0pHT1BPT01SSlBQT1BOTk9UTE1JUE9TVFUyPVhNSUBRPWNhUVNRUE5QUVBOTk1RTlRSUFJNSUxLT1JQUlJTVFFST0xNS0xMSENCQT06Ojg3NjtCNTU2Njpkb3F0d3h7fHx9fnx9fH19fX18e3h8ent9fX58e3l9fH18e3B1b3d1cHV0b3N2cHFxcHR1dmNqZ2VXaHRycnFuaWlocFZWVFVYVVdVUldWVVpZWFdVUVNGRUFGR0dIRkpESEpJR0VITEhLSUZMTVBNRy9FX1I+Mz8+am9hUlJRQEdVUVBRUFFOUU9QT0xKTExPUE5OUFFRTlBPSkxNTUtHRUVEQjs9PDw5PUc2Njc3RG1wdHV5e3t8fX18enx8fX5+fXt5dnh3eXl8fXp6dn17fHp6b3Fud3JwdnFtcHNwb3Bzc3N0ZmdgaFpXa3JzcmxtbWtuYWVQU1RSU1RPV1ZWWVlWUVFRT0A9Oz0/QUJBQ0BCRURBQEdIR0hGRkhKTUxFR0NPUkM4RU5TXWdTUFNBR1VQT1FRUE1NTk1LTEtMTk9PUU1PT01ITExJS0tMS0dGRkVEPEFBPjtARTs8ODlTcHJ0eHt6e318fHt5fHp6fn58e3V0dXJ2dnp6eHpyfHt8eXltcW94cnF1bm5xcm9vb3Rzc3J1dGtnZ15lam1wa29xbWltY0xPT01RU0xUVVRYV1VNTEtJPDk4Nzs+QD48PUFAQj0+RUhHQ0ZGSUdKSkBGQUFARkhFSk9IUVJhXFFQUk9TT09QTExPTUxNTE1PTltXS01RT0dJSENISkxMSkZGRkU/QkM+PEJHP0I/QWRwc3d6ent7fHt6end7d3l+fnt7cXN0cHJzd3R4eHN6e3l2d2xxb3ZxdHRsb3Fybm5vc3ZydHNycmtsZW5zaG1ubWxtbGprSUxISE9RSlFTUVRTT0tIREQ9OTc3OT9CPjs/QkBAPkFESkVDR0dJRklFQkI/Pj1DQkFHSUVOT2JlUU1PTldLTE1LTE1NTUxLT05TZE5KTFJJSUlFQUhKTE1OSkdJRkJBQkA/RUZFSERLbm92eXl5e3t6e3p3dHh1eHx8eXpucXJtbm9ycnZyc3h8eHZ2bXBtc3B1dGxwcHJvb29ydnZyVlZucWdseYRqbXFybm5qaG9ISkNHTU1KTVBNUE9ISkQ/QT05ODo6P0I/PEBCQUFERUdKRkNISUdHSENDP0I/P0BBPkRFQ0xOUlRMSklNVEdJSUpMSktMSUpMTU9QUlBLR0NMR0NCSklMTU9OSUpJR0NDQ0RJSk1MSVlybXd5eHp7e3l8dnJwdXJ0eHl2eGpxbmpsbG50dG10dXtzdHhyb25xb3ZzbnBvcnBvcHN0eWpOYGdzanR8eWdvc3FpcWhkcUdLREdISEdKS0lKS0RHQj0+PTo5OjtBQj89QkJDQ0dGSUtKRElJRkdHQ0M7QUBCPkBAQ0VESU1QSEhLR0hLREhJTE1ISkxISUpMS01dUkhIRE5GQURKSk1NUE1LTUpLRkdHSk1OUU5MYm1pdnZ3enl8en1ybWxza3B0dHR1aHBtamlra3RwbnR0eXByeXRvcnFvd3NvcXB0cnBydXR5a05WbXVscXt2aW5vaWt0Z2RvRktERkVHRUZGR0VHQkNAPjw9OTo6O0BDQD5CQ0VFSUVJSkxGSUlHRkZEQjtBQ0M+QENDQ0RHTE5IS05IREhFSUxOTUdJTEdGR0lJTE5LSUdFTkhDR01LTUxPTU1OTUtISElPUlFSTlJmZmZxb3N4dXt6fGxoam9la3Fsc3BmbWxoaWtsdG1wdXR3cW94dG90c3J2c3BxcnRzcnR1dXZ2WFZ1dWtvdHJrb3ZsaG1lX3BHSkRGRkVDQ0JFQERBPj8+Ojs7PTo9PkNBPkFDRUZKRklITEhHR0dGRUNAPURFQj5BQ0NDREdISUdNUEpGRkdLTk9LRkhJRkVERUlKSEpJRkhQS0RJTUtPTU9OT1BOSkpJTFJVVVJPV2RgYW1ncHJvcnl6Z2VoaGRpbGdxbGZsbWdpa2xzbHB2dXRwbnZyb3Nyc3V0cXNzdXRzdXZ2dnl2dXR3bGp1dW1ydnFsbmxlckxIRUVIQ0JBQkQ9QkE+QT06Oj0/Oj0+QEI+QEJER0pFSUZJSEZGR0VDQkFBRkZDQkJCREVFR0dJRkxRTElPSkpMTElHSEVHRkRDSUlIS0pHS1JNQk5PTVFOT09NTk9LS0tPVVdWVVNYX15caWFtaW5ocnNiZWZmZGloZm5pZm1taGtrbXJpcXZ1c3Ftdm5vcXJzd3Nyc3R1dnZ2dnd2d3Z2dHd1anN1bnV0c3FyamtzTUdIRkhCQkFERDxBQEBDPDg5PT45Pzw/QkBAQERGSEVJRkZIR0ZGRENFQ0RJRUNHRUJFR0VGR0dFSk1LSFFNSktISElFRkhIRUNJSUlLTUtPU05EUVJQUVFOUE1OUE1MTVNXVlhXVVhdWl1kYGhiamlna19lZWZjZ2dna2dna21rbWxwcmh0dHVyc252b3FwcnR4cXNzdXZ1gpF5dnZ0eHV1d3htb3VvcnN1cXFpbnlNSEdISEJCQkZEPD9CQkQ8Nzo+Pjo+OkBCPj8/QkVGREdERUhGREVEREVGR0pFRUpHQ0dIRkhHRUNGSkpHTUtMS0hKTEZJSUtIRUtLTExOT1JUUEhTVVNQU09RTU5RTk1QV1pWWllWWl1aWGFgYGBeaGVjYGRmaGdqaGhpZmhubGxubXFwaXV1eHJycHVwcHBydXZwdXN1dnV7fn14dnR3dnZ2eHBsdXBtc3RucHJyeE5JSEdJQ0FDSEU8QEVCRT05Oj4+PTw8QUI8Pz5BQkZDRUNDSEVDRUVGR0dHSUZHS0hESEhHSUdGREhLSUdLSE1LSktMSExLTUtKTkxPT09SVVZPS1VXU1FTUVJMT1FQT1RZWllcWllbXl5eYGNeXGFja2JgZGdocoVoZ2lmam1ucG9uc3JqdHV4cnNzdHJucHF2cnF1cnV1c355jn11dXZ2dnZ4cmh1cWtydGxxdnB0TUlLSEpGQkVHRTxAR0NEQDo8PkA/Pj9CQTxAPkFBRkNFRURJRUZFR0ZISEZISElLSkZKSEhLSEZGTElISEpHTExNTExJTUtNTU1PTFBQUVVWV09LVlZVU1NRUUxPUlJQVltbXV5bXF5fX2FgYWRdY2BlZmBlaGpjc3NmamdnbHBycW9zc25zd3dxdXZ0c21vcnVvcnNwdXJ2cnSBdnV1dXd2dXd0Z3Rya3Fya3J2bnZKSkxKTEdDRURFPEBGRERDOz8/QUBAQENBP0I/QUNIQ0ZFRklGSUZGRUlJR0lISkxISEpKSUxKRkpLSElKSkdLS01NSkpNTE5OTlBMT1BSVFhWTU5UVlRSUlFQTE5UU1JXW15eX11dYF9gYWFgYWNlYmRoYmRpamd2i2xqaWdtb3NxcHFwcHJ5dnJ1dXRzbW1zc21xcm90dXRycHN3dHV1d3Z1dXRlcXNrcHFqcnZud0tNTEtNR0RDQUQ8P0VFRUM9QUFDQkJDREFDREFBRUdDSEdISEdKR0RISUdISkZJTEhJSk1LTUxHS0lIS0tOUUtSUU1TTUtOTk9QUE9UT1dYWFtOU1BXXFpSV1BOVFVUVFhaX2JiX2RhXmBiXmBlYWFjaW5oY2loaG54dmxoaW1vc3JwcXJycnZ0c3Vzc3Nua3NxbXByb3R2cnFxdXZ1c3d5d3V0dWNtdGtvcGpxdG93TE5MTExHRUFARD4+REVGQ0BDQUVEREZCQ0VHQ0NJRUNJSkpJSUtHRUtKR0hKSUlLSEpKTkxOS0lMSEpMS1pmSmRcS2xTSE9OX25Va3NbcXBid2NTUGF2dWh1Y2F2YFhucWJkdmluemZbbHRgbGpUX3d2aWpnaWZnbG1qbW9qbW5zcnBycnFyc3Jzc3J0cm5sdG9ucHFxdXVxcXN0dnZ1dXl3dXR0YGt0a3Bwa3FycXlMTkpKSkZDP0BCPz1ERUZEQ0RCRUVERkJGRkdERUpFRUpNTUtMTEdHTUlHSktIS0tJS0tOTE5MTExJTE1MW3NiZHBebG1VTU5mc11nZnFsbnRncGlfYVlubmJwcGJrampnb3F0ZXRub1xvdWdwTUpxeXZrYmBrZWVteGxrdm1ucHNycHJxcHFycXJycnRybW1zbm5vcHJ2dHFzc3R1dXV0d3h2dXRibXVrcHBscnJxektMSUhHRUQ/QUJAPkNGR0JGQ0ZFRkVEQ0hIR0RFS0hHTE1OTE1NRkpOSEpLSklMSkpKS0xNTk5NTUpOTU1bcm9vbnBwbGtNUFFsV05pYnRycGFtbnVcWWxRXG1tWnFta29teHh0c2lwXV9ya3FqVXV5eHBjXmtmYmdwcGpqb3BwcnNwcXBxcXJycXFycnRsbXJtbm5vcnV0cXRydHV1dHV1enZ1dGVudWtwb2xzcnJ5SUtHR0VFRUJCQj5AQEZHQkdESUVFRUJGSUhIRUdLSkdNTU5LTU5HTE5JTEtJSk1JS0lKS09QT05NTE5OTFxoZHVdbHFXbE5QUW1VWmtea2x2YWxkc1NlY05tWWxcdHBraWx4and1aHBdXnJraFdiY3d8b2NgZ2dhZGp1eWtubnFzc3BxcHFwcnFwcHBydWttcW1tbW9xc3Rxc3J0dnZzd3Z6dnV0aG91bHNvbXNydHZITEZJREVFQ0FCPUJBQ0dESEdMSEVDQ0hLSEhGSkxMRk5MTFNSTEdMTUhOSkhITkhKSklITk9NTkxKTk1KWnNwcG9xcW1sT1FSbllxa2dvb3Fxb210XW5YYXRfbm9wb3Fyb251c3R0altddGN3eHJqbnpoYWFjZmJiam10dXBzdXZzcXBwcW9ydHt/fn13bGtxbmxtbnByc3F0dHN1dXR4eHl4dHVrb3VtdG9udHN2c0hLSElCRUVFQUA+RERCR0RISU1JRkNGSkxJR0ZKTUxFT0pLV1JLR0tLSk5JSUpMSUtKSUhKTU1NTUlLS0tTa2NbaV5faWNyclpfWWpvX2VlVWtfY1thYVFgbGhdalxuaWlkW3BmZHBdWlxrW21xY3BzbGRnY2RnYGBrbXBwb3R5cnVxb3BxbnmFiIeHhoWAdnNua21tb25xcnR0cnR1dXZ5eHh0dW5xdW53cXJ2dHdyR0dGSURFREZBQEJGRURHQkhKTEhGREdLTElFRkpPTElQSUxbUUpFSEhLTUlIS0pLS0lISUdLS0tMR0hLS0xNTUxKS01OVFtcVFBUTFBPTk9PVlFPT1FOT1FKSU5QUWRxaVRZV1xbXFVZW11YXVxcY2ZhYWViY2VfX2ZrbWhtdHlydHJvcHB0hoeGhoaFhYaHg3pwbW1sa3FzdHRydHZ0dXl4eHV2cXJ1b3ZydHN1dXNHQ0VHRkZBRUNAREhERkdDSUtMSEZER0tMSERHSVBLTE9LTFdMSUVFSElKSElLSU1KSEZHR0lHSElFRkxJSkxPTElQXFdeUFxbYF5NWFlTXFxiXk1YWk1YYVJKWWFaUl9kXGFYW2RkVlZYXFlaWFxWWVxdYl5kYGFfZWhrZ210dHFxdHBxcoGGhoaFhoWFhYaGhoR9cmtpb3Jzc3N0eHl5eHl4d3h0cXhyeHNxcnVydE9CQ0VMTUJEQ0JFSUVHR0ZLSktIRUZJSktGRUhIUEpNTUpNUklIRUFIRkpJS0xKTUpIRkRJRkRGR0VFSkhDSk1LTFVfWWBYYGFbYFRYWVReXlpfUllcUF5cWU5eXF5TWl5jXlpdYGNgWV9jW2BeW1RYV1leXWNiYmFjZWhla3Jwb3Bwbm93hoaFhYaCe4CFhYaGhYaFf3VxcHJyc3Z5eXp5eXh4eHdyeXZ4cnF4dnR2YVNKSk1JREJCQ0dIRkhHSEtJSUlER0tLS0VGSUpOS05MSExOR0hFPkdHTElLTEtLS0lHRElEQ0RFQkZKREBKTEpPW2NZX15hX1JUUldfYFxdWV5RWVxNVl9XS1FZWlBaX2FhXV5jYWBiYmJjY2VaUVlWVVxZXWNgX19jZGJob21ubGxsbHWFf4SDeXV8hIWFhYaGhYWGhoN9d3JydHd5eXl5f359eXV5dnZybnp3dnhYUUtGQ0dFQkVHSUZHSEhGRkpHSEdJS0lMRERLSk1NTExISkpISkY/R0dOS0tLTUtLS0lGR0NEQERBSElCP0lKSFBdYVpbZF1fVFFSWF1cXFxfWktXXExSXFlJTV5RT1xfYWNjY2NiXGRjYmRjZlhRVVRSW1daYF9eXmFhX2Rsa21qamxudn51gXp8hIWFhYWFhYaGhYaFhYaGgnpyc3V1e4WHh4eGhYSBfnhwend2eFxSTUNASUZDRktKRkZGSEdGSUZGRklMSk5GREtLTE5KTElLSkhJRkJISVFNTEtPTEpLSUdHRUQ/RUNISEFCR0dFVF1ZXlhfWV9bXVVYWE9dXVFLSlZeWF5bXVVZYFJRX19iYmBgYmJgY2JhZGRhWE9RUVFaUltdXV1dXl9fZGhnbGpubnB7e3x+e4CCg4SEhIWFhYWEhIWDhIWHh4FzcneFh4eHh4eHh4eHh4WDgHx4XFNLQ0FIRkRHTVJIQ1FKRkhISEVGS0pNUEVGSUpLTkxMSUxMSElHREhLUU5NTFBMTEpLSElDREFFREhHQkFHRURXVUVcVF1TVl9YT1RVTlpaTUlKVGBhW19YXl5hXU9ZYVxgYF9iY2JdYWJXX19UUE9PT1dRXFtbXFxeYGJmZmVsZm9vd3x7gHt9f4CEhISEhIWFhYODhYKDgoWFhnpvgYaGhoeHiIeGhoaFhYSFg35JTkZERkZIRElSYlBDVl5JR0dIREZNS1BQRUlJSktOTExMTUtKSkdFSk5RUU5PT01OTE1IS0FEQUNERkRDQkVGQk1IQktLT09OTEZNRkdJSkhHTEtNT1BJTE9QT1NPTFBTUlVaWVdZWFhkV09TVFBQTk1PVFJaWFhaXVxgYWRlY2dja2xwc3J6eX97en+EhISEhISEhIKEgH57gYOBfXuFhIaGh4eHhYWFhISEgoGAfUtJRUVIRkdES01dTEdHWE1ISEpIR01MUVFITEtLS05NVU5PS0tLR0dLUFNTTlBPTk9OTkdLRmBFRF9MRWZkRU1bSV5bcm1PTVVtWUxEUGBVa1dnSl1YVV5ETFFVTExTVlFSVFhXVFhVVFxVUGZaaGhkWFJqUlZVVFtcW2BgYWJiYmBmaGZua2hyenx9foGEhISEg4ODgX18enJ7gXp7f4KBg4SEhYWBhIWBg4N/fnp7TElGR0ZIRUVLT1NJSkZgVEhJT0pJT01SUUtNTExPUlVST09JS01HSE1RW1lPUFBOT09PSUpRf1FJfFlZcXRZUW1IcW5vYVZQcXFzUENrc21xc3BTb19bblhdVlxYVWtoVV1WY1pgWVtgVlZYf2p0dXVfX3ZfWGFbW2ZbX2BhYWFdYGJnbXBsYHB3dHiBgYKDg4J/fX+Adnh6bHZ+dHh9gHx+gIGChHyAg3p/gX9+d3dOSkVITU5CRExMR0lMRVFWTEtOSUtSWFdRTU9PTVFUTk9RUEtLTkdNUFNbWlNRUk9QUFBKSFp4XVR4ZWhaU1VSdmd0bHBibmZqUXJPTXdtanJwc3JxcnBvb4BdZXp1eHFxenF+c31rdX1iUmh8ZXNzb3Nye3xvfnhugHJfYGBiYVpgYGdrbmtibGZnbXd+gYCDfnt4d4B0dnppcn5uc3x+d3h7foCDeHyAdXx/fHxzc05LRmBdR0FFTU1ISktHSlBPTU1KTlZeWVVMUVNOWVpNU1NSTktPSFFSU1lXVlBUUFBQUUtIZ3hsY3hybVtLTlZ5cHVtdWJudlBkZUpmdnFtd2+AamZ4eGlXclFoem1panp6fWx4en9vaG9ZdnZqdXVwgWByZn1pbHh8b15fX2JhW11jZGdpaWRnYmNkbGxwcHN0c3NzeXFyeGJsdWdxeXtzcnZ5foFzdXpufH15d3JuTkpTdU5DQkZQUEhKS0lLUE9PT01QWmBaV0tUV1BhXlJWUVlSTE9JU1RVWFdXUFVQT05SSkxyb3V1cXVxZGliV25McXBeRmh5V3ZUTGl5fXhgeXtzbmFdbW9jUmhxdW5teXB3bHZ0dHJsbl10fnprbXl8a3RsfGtwdnV4Xl9fYl5dX2RkaWdoZWVeYWJpaWlqa25va3FubWpwYWNmY293eG9tcHN5fm5xcGp7enRzb21MTFtWSEdFR1JQSUxNSktQUVBQUFBXXFhVTVVZVWVYUlJZXlNMTklUVFZXWVdPU05OTlFIUm1IaXdLYGR2dlZYbE9ubHtzYWpnf3ZVTFdraH1sbWx4X1twenteYHpzY3JveHFoZH1pcnxeVExsYHZ1a2l1e3ttfnhrfHBcXl9iW15iZGRnZWVlYlpjY2lra3JzcndnbGloZGdgYWthZ3NybGdtbXJ8a21oa3t0bW1rbU9HS0tJSkhIUVBMTk9MS1JSUk9TUldSVlRQV1tWVlRUVGFfUE5NS1RTVFFVVk5OTE1PUEpIUU5QVUxLTFNUU1NUUFZVUVFOUVFYWVJOUFVUWFhYW1pVUlNXW1dYV1pPU1VXWFhSXllXXlZUUFlSV1dXV1heW2dyXltbWVxdX2NaX2NjZGZkY2NiWmNjZmZlbW5tdWVlZ2NhZl9dZ2BkbGhmZ2tocHpoZ2drdWpoZ2lsUUlLTE1NS0pTUU1RUE9MVlVUUFRVWFVZVVFaXVZVVFdVWVdPT0tNVlRRTlVTTk9NTFFQS0pSUUtRTUtLUFJVU1FSU1NJSExOT1FSUVFRVFZSWFdcV1NTUFJUVVZTWlFOU1JYVlRZVlRaVlRSVVRUVVdYVl1ZXmBdXFpaXFxfY1tdYmNkZmRkZGFZYGFjYWJoaGltYmFkXl9jXVpkXGJtYV5mZWZtc2RpaGtrZWRjZmhQSktLT09MTVNQTlNRUU1YV1VUVVdXV1pVU1xgVldWWVVYU1BQSk5XU1BOVVBOUU5MU1BMT1VTTlFOTU5RVVFVUVJUVU5LTU9RVFRSUlFWV1VZWltZU1VSVFdXV1lbVFBUVVhVVVpVV1pWU1JXVlVXW1haX1xVWF5cXl1bXWBhXltiYmNnZmVkYlhfYWJdYGdkZmVhXl9dXV5aWl9aX2dgXl1dYmhrYWdmaGZkYGJjYVBMTUxQUUxPVE9PU1FPUVtaWFdYW1lYWVZcamRWWFlaV1ZTU09KTlZUUE9UUFBQTkxRUVBSWFRRUU9NT1NWT1dSVFVVT05NUVNWVVRUUlRXVlpdXFpWVlFRVlhWW1tXUVRXVlZWWVRYWFZTUllXVlpeWV1fXlVeXF5gXFtfX19fWmJiZGhnZGRiWGFgYl5eZmNjYGJdXFxcXFlaW1hbYVteXVxfYl9fYmRlYmRfX2BcUE1OTlJRTVJST1NUUU9VXFpaV1tbXFhaW2RxbWhkX1tZVlVXUUxNVlNNTlJPUVJPTFBTUlVaVVNQUE1RWFdSV1NTU1hNT09RVFhWVVVTVVlYW15dW1tWUk9VVlZbW1dSVFdWV1hWVFhbVFNSWlhXXF5aXl9gVWFcYWFdYGJfXWBdY2BjZ2hkZmBZY2BhX19lZF9gY1taXFtcWVpZWFdcWVxbYF5fW15eYWBeYlxZYFpRTk9OVlFQVFJPVVRTUFdcXFxYXlxeVlxeanF3eYBjXFtVVVhRTU9WU05RUVBSVFJLUVRUWVpXVU9ST1NYV1RTVVJSWk9QU1JWW1ZWV1NWWlhdXltbXlZTTlRVVlxcVlJUVlZYWVNUWVxVU1NdWFpdXlxgYGBWYVtjYl1hY19cYmFiX2NmaWRmXltkYGFgYWNkX2JfWVpeW1xbWVhZV1daWlphXF1bXVxcWl1gV1tbWlBPT09ZUFVUUlFXUlRQW15eXVtgXGBVXF1oanJ9c2xnXFRXV1FOUlpTUlFUUlRVVEtSVlZbWlpTT1NRVlZWVE9XUlNaUlRUVFhdV1hYU1hcWF5dWVpdVFVOVldXXltYUlVVWVlZVVdZXFVUV15ZXV1gXWJiXllfW2VhX2RkXl5jY2FeZWZpZGZdXWRhYGBhYmRgYl5YWl9bXFtYWFhXV1taXGBcW1tcW1haW15WXlldUE9PUlpQW1RVVlZUVFReXmBeXmJcYFVdXmJreXRsfWtaVVlVUVFTXFRVVFVUVllXTFJbV11bXVJPVVNYV1dUUFhSU1dTVlVVW11YW1lVWl5YX15ZXFlSV1JZWVlfW1pUVVZaWVpXWFpcVlVaXlxeYGFfZGNcXl1dZWFhZmReXmRjYFxnZGhlZGJfZGFfYWBiYl9gXldYXlpcXFpZWVdWXVpdXlpZW1xbV1lcXVZYV11TT1BXWVFcVVZZV1dVWF9fYWFgY11fVF1fYmVldYF6aFhZWVNVU1ZcWFdXVlZXXVhPVV1aXl1cVFJXU1dWVVNUWFJTVlRYV1hdXlhdW1ZdX1hfX1hcVlFZVFlaWmFZXFZXWFtaW1lZWltYVl1fYF9jYmFkZF1iXGBmYWRmZF5fZGJiW2ZjaGVjZmFmX19hYWFhYF9eVlVdWVtcW1lbWVldW1tbWFhZW1laWl1fXVRZXVVOVFlWU1xUVldZVlZcYGFiY2FjXl9WW2BkYV96dW9oWVxaVVdUV1taWVxZWFlgV1BWXlxgYFxUVFhQVVdWVFZXUlNVV1paW19eWl9cVl9fWV1eWV5VU1lXWVldYlpeVldbXFtcW1taW1lZX19gYGRjY2RlYmRZYWZjZmZlXmFiYGNeYmNpZGNnX2deYWJjYWFgXl9YVFtaWltbWFtYWFxbWltXV1lYV1xbXGBdVl1dU09WWlZWWlVYVVhXWF1fYmFkYWRgXllZYWRiYGxmaF5bXVtWV1hZXFxcX1tZW2JWVFheXWFjXFJWWVBXVldXV1ZTVVRYXFxeYGBdYFxXYV5bXlxbXlhWWFhbW19gXF9YWVxcXV5eXFtdWFtgYV5gZWNkZWVmYlhjZWRoZ2ReY2BgZWNdZWlkZWlfZl1jYmNhYWBfX1tYWVtZWlpYWVhXW1taW1dYWlRZXVxaYFxVXmJOU1dZVldaWFtcWFdZXmBiYWRhZGFdXllhY2JfYWBgXlxcXFdXW1tdXV9fXFpdY1laWF1gY2RfUlhZUFdXWFlZV1ZXVl1dXmBhYF9iXllhXV1eWV1eWVhVV1tcYF5dX1paXl1eXmFdXFtaXGBiX2JlY2VmZWZiWmRmZmlnY19jXmFmZFppaWNmaWNlXmJiY2FgYF9dXVpYXFlZWFhaWFdaW1pZV1hVVVtdXV1gYGJieEtYV1tZV11bXF1aV1xdX2BiZGFiYV1gWGJjYmFjYWJdW1xbWFdbXV9dYF9dW2BkXVxYWmJlY2FSXFpPWFhaW1taV1pZYF1gYmJgYWNfXGJdX11bXl5ZWVRYXV5fYF9gXFteXmBiY11cWFxeYGJiY2VkZmRlZmRcZWZnaWZjYWJcY2dgXGlpYmhpZWRgYmFjYV9gX11dXFlcWVhXWFlYV1xaWldXWE9YWl1hY2Zmcmt/SllXXFpaX1xbXlxYXVteX2FjYmFhXWJbYmRiYGJjYlxbW1pXWGlxYFxgX11cYWNfXllZY2VkYVNfWlJZWFxdXVxaW1tjYGJiY2BiZGFgY15gXF5eXlpYVltfXl1hYWBeW2BhYmVjX11UXWBgY2RkZmVnZWZmZV5lZmhoZ2RkYFtlZ15haGhiaGhmY2BiYGNiX19fXV1bWltZWFhYVlpWXFtbVlZVTVhXXGdpa2h1eIF2dnZ2dnZ2dnZ2dnd3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d4eHh4eXl5enp6enp6e3p6ent7e3t7e3t7e3t7e3t7e3x7e3t7e3t7e3t7fHx8fHx8fHx8fHx8fHt7e3t8fHx8fHx8fHx8e3t7fHx8fHx7e3t7e3t7fYmIhoqHhYOCgoOCg4OCgoKCgoKCgoKCgoGAgYCBgICAgYCBgYGAfnx8fHx8fHx8fHx8fHx8fHZ2dnZ2dnZ2dnZ3dnd3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3h4eHh5eXl6enp6enp6ent7e3t7e3t7e3t7e3t7e3t7e3t7e3t6e3t7e3t7fHx8fHx8fHx8fHx7e3t7e3t7e3t7e3x7e3t7e3t7fHx8fHt7e3t7e3t8iYmHiYaFgoGCgoKCgoKCgYKCgoKCgoKBgYGAgICAgICAgIGBgYB9fHx8e3x8fHx8fHx8fHx8dnZ2dnZ2dnZ2dnZ3dnd3d3d3d3d3d3d3d3d3d3d3d3d3d3d4eHh4eHh5eXl5eXl5eXl5eXt7e3t7e3t7e3t7e3t7e3t7e3t7ent7e3t7e3t8fHx8fHx8fHx8fHx7e3t7e3t7fHx8e3t7e3t7e3t7fHx8fHx7fHt7e3uHiYiJhYSDgYKCgoODgoKCgoKCgoKCgYGBgICAgICAgICAgYKBgH58fHx8fHx8fHx8fHx8fHx2dnV2dnZ2dXZ2d3d3d3d3d3d3d3d3d3h4eHh4eHh4eHh4eHh4eHh4eHl5eXl5eXl5eXl5e3t7e3t7e3x8fHx8fHx6e3t7e3p6ent7e3t7fHx8fHx8fHx8fHx8fHx8fHx8e3x8fHx8e3t7e3t7e3x8fHx8fHt7e3t7e4aJiYiFhYOBgoKCgoOCgYKCgoKCgoKBgYGAgICAgICAgIGBgYCAfnx8fHx8fHx8fHx9fX18fHaIi4uLi4uLgX19fX19fYSMi4uLi454KSkqKiopKz0/Pj4+Pj5tgH5+f397pdfT09PT1r2GiYmJiYqCRT4/Pz8/O5vDvr++vsGiioyMjIyNiX5/f39/f359fHx8fHx8fHx8fHx8fHx8fHx7fHx8fHx8fHx8fHt7e3t7hIuHh4aHgoGDg4GCgoKCgoKCgoKCgoGBgYCAgICAgICAgYCBgIB+fHx8fHx8fHx9fXx8fH19doyQj4+Pj5CDfn9/f39+hpCPj4+Pk3kZGhoaGhocMTMzMzMzMmqCf4CAgHut6eTk5OToyomMjIyMjYM6MjMzMzMuodLMzMzMz6qNkJCQkJKLf39/f39/f319fXx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx7e3uCjYeIh4eDgoSCgYKCgoKCgoOCgoKCgYGBgICAgICAgICAgICAgH58fHx8fHx8fXx8fH19fX12eHh5eHh4eHd3d3d3d3d4eXl5enl5d29wcHBwcHBycnJycnJyd3p5eXp6en6Dg4ODg4SBfHx8fHx8fHZ1dXV1dXV+g4KCgoKCgHx8fX19fX18fX19fX19fX19fX18fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx7e4CMhomHh4SDhIKCgoKDgYKCg4KCgoGBgYGBgYCAf4CAgICAgICAfnx8fHx8fHx8fX19fX19fXZ2dnZ1dXl2dnZ6e3h7eHd2d3p3eXl6fnx5eXh4eHh5eXl5enp5eXl5enp6eXh4eXl5eXl7e3t7e3t7fHx8fHx8fHp5eXl5eXp6fHt7fHx7fHx8fHx9fX19fX19fX18fH19fX18fHx8fHx8fHx8fHx8fHx8fHx8fHx8f4uHi4qIhIODgoKCg4KBgoKDgoKCgYGBgYGAgIGAf4CAgH+AgYF+fX18fHx8fHx9fX19fX19d3d3dnZ3fXh3d316eH14d3d4fXl7e3l8e3h3d3d3eHh4eHh5eXl5eXp6ent7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7fHx8fHx8fHx8fHx8fHx9fX19fX19fX19fX19fX19fX19fHx8fHx8fHx7e3x8fHx8fHx8fHx+iomMjImFg4SEgoKDgoGBgoKCgoKBgYGBgYCAgICAgICAf4CAgH19fXx8fH19fX19fX19fX13d3d3d3p9eHt4fHx3e3h3d3d7eXl7eHx6eHh4eHh4eHh4eHh5eXl6enp6e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3x8fHx8fHx8fHx8fHx8fHx8fX19fXx9fX19fX19fX19fX19fHx8fHx8fHt7fHx8fHx8fHx8fH2Kio2NioWDg4SCgoKCgYGCgoKBgoGBgYKBgIGBgICAgIB/gIGAfXx9fX18fX19fX19fX19fXd3d3d3fX55d3d4e3p7eHd3d3t5ent3fHl4eHh4eHh4eHh4eXl5enp6ent7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3x8fHt8fHx8fHx8fHx8fHx8fH19fX18fH18fH18fHx8fX19fX18fHx8fHx8fHx8fHx8fHx8fHx8foqJjo2JhISEg4KDgoKBgYKBgoKCgYGBgoGAgYKAgICAgH+BgIB8fH19fX18fX19fX19fn5+d3d3d3d5fHl7eHx9eXt5enp3e3l6fHl8eHh4eHh4eHh4eXl5eXp6enp7e3t7e3t7e3t7e3t7e3t7e3t7e3x8fHt7fHx7fHx8fHx8fHx8fXx8fX19fX19fXx8fHx8fHx8fXx9fX19fXx8fHx8fHx8fHx8fHx8fHx8fHx/iIeNioeFhoaDg4ODgoGBgoGCgoGBgYGCgYCAgoF/gICAf4CAgHx8fX19fX19fX19fX5+fn53d3d3d3Z4eHl3eXp4enh5eXh6eXl6eXl4eHh5eXh4eHh5eXl5enp7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t8fHx8fHx8fHx9fX19fX19fX19fX19fX18fH18fH19fX19fH19fX19fHx8fHx8fHx8fHx8fX+HiIyIhoeHhIKDhISCgYKBgYKCgoGBgYKBgIGBgYGAgIB/gIGAfHx9fX19fX19fX1+fn5+fnd3d3d3d3d3d3d3eHh4eHh4eHh4eHl5eXl5eXl5eXl5eXl6enp6ent7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7fHx8fHx8fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fHx8fHx8fX19fHx8gIeIi4eHiYWDg4SDg4KBgYGCgoGBgYKCgYGBgIGBgYCAgICBgX97fH19fX19fX19fn5+fn5+d3d3d3d3d3d4eHd4dnl5eHh4eHh5eXl5eXl5eXl5eXl5enp6enp6e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7fHx7fHx8fHx8fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fHx8fH19fXx9fXyBhoqKiYmIhIOFhISCgoGBgYGCgYGCgoGBgYCAgYGAgIGAgIGBf3x8fX19fX1+fn5+fn5+f394eHd4eHh4eHZxZGpeam15eXl4eHl5eXl5eXl5enp6enp6enp6enp7e3t8e3x8fHt7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3x8fHx9fHx8fH19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fIGFiYqJioeEhYWEg4KBgYGBgoKBgYKBgYGBgYCBgYCAgYCBgIF+fH1+fn5+fn5+fn5+fn9/f3h4eHh4eHh5bWRiZV9fXm95eXl5eXl5eXl5eXp6enp6enp6enp6e3t7e3t7fHx8fHx8fHt7e3t7e3t7e3t7e3t7e3t7e3t7e3t7fHx8fHx9fHx8fH19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18goWKiomJhISFhYSDg4KBgYKCgoGBgoGBgYKBgIGBgICAgICBgH58fX5+fn5+fn5+fn9/f39/eHh4eHh4eW5kZWdlZGJeZnh5eXl5enp6enp6enp6enp6enp6e3t7e3t7e3x8fHx8fHt8fHt7e3t7e3t7e3t7e3t7e3t7e3t7fHx8fHx8fHx8fHx9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXyChouJiIqEhYaEg4OEgoGBgYGCgYKCgYGBgYCAgYGBgIB/gIGBf3x8fn5+fn5+fn9/f39/f394eHh4eHl3Z2VkZWZkZWFfaXl6enp6enp6enp6enp6ent7e3t7e3t7e3t7e3t8fHx7e3t7e3t7e3t7e3t7e3t7e3t7e3t7fHt8fHx8fHx8fHx9fX19fX19fX19fX19fXx9fX19fX19fX19fX19fX19fX19fX19fX19fIKGi4eJh4SEhoSCg4WBgYGBgYKCgYGBgYKBgICAgYGAgYCAgYF+fHx/f35/f39/f39/f39/gHl5eXl5eWtlYWJlZWFlZV5ieHdze3p6enp6enp6enp6e3t7e3t7e3t7e3t7fHt7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t8fHx8fHx8fH18fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19g4aLhoiFhYaEgoOEhIKBgYGBgoKBgYKBgYGAgYGBgYGAgIGBgn98fH9/f39/f39/f3+AgICAeXl5eXl0Y2NlZGNmY2doZGZsZF5ze3p6enp6enp6enp6ent7e3t7e3t8fHx7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7fHx8fHx8fHx8fH19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX1+fn6DhouGhoaGhYODg4SDgYGBgYGCgoGBgYKBgYCAgYGBgYCAgYGBfnx8f39/f39/gICAgICAgIB5eXl6d2RhY2diYmRdW2VfYV1eYGFoeHp6enp6enp6enp6e3t7e3t7fHx8e3x7e3t7e3t7e3t7e3t7e3t7e3t7e3t8fHx8fHx8fHx8fH19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX1+fn5+fn5+foSFi4eGhoaGhIODg4KBgYGBgoKCgYKBgoGAgIGBgYGAgYGBgYF+fX1/gH+AgICAgICAgICAgHl5eW9vYmJiZF5jZ19dYWFgXF9kYlttfHp6enp6enp6enp7e3t7fHx8e3t7e3t7e3t7e3t7e3t7e3t7fHx7e3x7fHx8fHx8fHx8fH19fH19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX5+fn5+fn5+fn5/hIiLhoSHhoaEhIODgoGBgYGCgYGBgYKCgYCAgYGBgYGBgYGBgX5+fYCAgICAgICAgICAgICBeXpwXWJlZGJkXmZnZ2BZYmJhY2VfXF1ze3t6enp7e3t7e3t8fHx8fHx8fHt7e3t7e3t7e3t7e3t7fHx8fHx8e3x8fHx8fHx8fHx8fHx9fX19fX19fX19fX19fX19fX19fX19fX19fX19fn19fn5+fn5+fn5+fn5+foCFjIqEhYaGhYODg4SCgYGBgYKBgYGBgoKCgYCBgYGCgICAgIGBf35+gICAgICAgICAgIGBgYF5emxiZGdjYmdmYWBgZGFiZWRjZGNeXGJ1fHt7e3t7e3t7e3x8fHx7e3x8fHx7e3t7e3t7e3t7e3x8fHx8fHx8fHx8fHx8fHx8fHx8fH19fX19fX19fX19fX19fX19fX19fX19fX1+fn5+fn5+fn5+fn5+fn5+fn9/gYeMiYWGhoeFg4SDgoGBgYGBgYKBgoKCg4KBgIGBgYKBgYGCgoF/f36AgICAgICAgIGBgYGBgXp7dGdnZmZkZGZmYF5fYWNlaGRlXmJkYHR8e3t7e3t7fHx8fHx8fHx8fHt7fHt8fHt7e3t7fHx8fHx8fHx8fHx8fHx8fHx8fHx8fH19fX19fX19fX19fX19fX19fX19fX19fX19fX5+fn5+fn5+fn5+fn9/f39/f3+CiYqIhoaIhoWDhIOCgYGBgYGBgoGBgoKCgoGAgYGBgoKBgYKCgX9/f4GBgYGAgYGBgYGBgYGBenptaGNjZ2ZnZWdmZmdiZWRlYmdbYmVgdnx8e3t8fHx8fHx8fHx8e3t8fHx8e3x8fHt7fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx9fXx9fX19fX19fX19fX19fX19fX19fX19fn5+fn5+fn5+fn5+f39/f39/f39/f4SJioiGiYeFhYSEg4KBgYGBgYGCgYKCgYGBgYGBgYKBgoGBgICBgH9/gYGBgYGBgYGBgYGBgYF7emlpZGNqZmFgZmVjY2NnaWRjYmBiZGJ0fXx8fHx8fHt8fHx8fHx8e3x8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fH19fX19fX19fX19fn5+fn5+fn5+fn5+fn5+fn5/f39+fn9/f39/f39/f3+AhIqMiIeJhoSFhYOCgYGBgYGBgYKBgoGBgYGBgYGBgoKBgYGBgYGAgH+BgYGBgYGBgYGBgYGBgXZzZWRnY2RmZWJlZmdkZmhmZWNgYGNkYHF9fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fXx8fX18fHx9fX19fX19fX19fX19fn5+fn5+fn5+fn5+fn5/fn5+f35+f39/f39/f3+AgICFioyJiIqJhoaDgoKCgYGBgYGBgoGBgoGBgYGBgIGBgYGBgYGCgX+Af35/foCCgoKCgoKCgoKCc3NnZWRkZWlqaGZnZ2NhZmZlZmdmZWVjdX18fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fX19fX19fH19fX19fX1+fn5+fn5+fn5+fn5+fn5+fn5+f39/f39/f39/f39/gICAgICAgIWLioqJioeHhoSCgoGBgYGBgYKCgYKBgYGBgIGBgoKBgYGBgYGAf4B+dHRzdX1/goCAfn5/gYB0cmdkZWNmaWppZWNlY2BmZGRnZ2JiZWFwfXx8fHx8fHx8fHx8fHx8fHx9fX18fHx8fHx8fHx8fHx8fHx9fX19fX19fX19fX19fX19fX19fX1+fn5+fn5+fn5+fn5+fn9/f39/f39/f39/f39/f39/f4CAgICAgIB/houLiouLh4eHhIOCgYGBgYGBgYKBgoKBgYGBgYKCgYCBgYGBgoCAgH5zc3NzdHV4dXV0dHV2dXVwZmNmZWhoaWdoZ2VmZWJfZGVmY2BiZ3d8fHx8fX19fX18fHx8fH19fX19fX19fXx9fXx8fX19fX19fX19fX19fX19fX19fX19fX19fn5+fn5+fn5+fn5+fn5+fn5+f39/f39/f39/f39/gIB/f3+AgICAgICAgICHjIyIi4qHh4eEhIKBgYGBgYGBgoGCgoGBgICBgoGBgYKBgoKCgYCAfnNzc3Nzc3NzdHR0dHNzdW9jY2FnZWhoZ2pmZGVnZmhmY2JlYl5ieX18e3t8fX19fX18fHx9fX19fX19e3x9fX19fX19fX19fX19fX19fX19fX5+fn5+fn5+fn5+fn5+fn9/fn5+fn5+fn5/f39/f4CAgH9/gICBgICAgICAgYCAf4CAgYGAgIeLi4iNiYiJhoSFgYGBgYGBgYKCgYKCgYGBgIGCgoGBgYKBgoKBgIB+dHNzc3Nzc3Nzc3Nzc3N1cmdlZWRlamhoZ2ZpaGdjZWViZGNoZGd7eHVzc3R2dnl4dnR0dHZ3d3d2dHR0dXV4d3h4d3d6e3x9fXx9fn5+fn5+fn5+fn5+fn5+fn5+fn5/f39/f39/f35/f39/gH9+fHt7fX58eXl2dnZ5fHx6end2d3l7fXt4hIyMioyHh4iEhYSBgYGBgYGBgoGBgoGBgYGAgYKCgYGBgoGBgoGAgH51c3Nzc3Nzc3Nzc3Nzc3VzaGVnaGVrbGhqZ2lqZ2dnZmRkYmVkbnV0dHNzdHNzc3Nzc3Nzc3Nzc3NzdHNzc3Nzc3Nzc3N0dHV1c3V3eHl7fn59fn98f39/f39/f39/f314fH5+fXx4dXZ3eXd4dnRzc3N0dXRzc3Nzc3NzdHNzc3R0c3R0dHODjI2KiYeIhoOGg4GBgYGBgYGBgYGCgYGAgYGDgoKBgYCBgYGBgICAf3VzdHRzc3Nzc3Nyc3NzdnZpY2hqaGpsZWZpbGhgZmVkY2BkZGZ0dXV1dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHRzdHRzc3Nzc3R2dnV1d3V4fH9+fX9+fHp4dXN0dXV1dHNzc3Nzc3N0dHR0dHR0dHR1dXR0dHV1dHR1dXR1dXV1dIaMjYuIhoeEhIWCgYGBgYGBgYGCgoGAgYCBgYKCgoGBgIGBgYGAgIB/dnNzc3Nzc3Nzc3Nzc3N2dnNnZ2pmaGdmaGhmZGlnY2NnZWVmcHZ1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dHR1dHR0dHR0dHRzdHR0dnV1d3Z0c3R0dHR0dHR0dXV1dXV0dXV1dXV1dXV0dHNzc3N0dHNzdHR0dHR1dXR1iY6MjIqHh4SEhYKBgYGBgYGBgYKCgoGBgICAgoKCgoGBgYGBgYCAgH93c3Nzc3NycnJyc3NzcnZ2dW5kXWNnZWlraGVoZ2dqamlnZXB2dXV1dXV0dHRzdHR0dHR0dHV1dXV1dXV0dHV1dHR1dXV1dXV1dXV1dXR0dHV1dXV1dXV0dHV0dHV1dXV1dXV1dXV1dXV1dXV1dXV0dHNzc3Nzc3N0dHNzc3Nzc3R0dHR0dHWKjoyMiYaGhIeFgoGBgYGBgYGBgoKBgYGBgYGCgYKBgYGBgYKBgYCAf3hzc3Nzc3JycnJyc3NzdnZ3d2liaGhnamtpaGZkZGVmaWhwdXR0dHRzc3JxcnJ0dXV0dHR0dHR0c3NycXFxcXNzdHR0dHR0dHR0dHV0cnJyc3R0dHR0dXV1dXV1dXR0dXR0dHR0dHR0dHR0dHR0c3Nzc3Nzc3Nzc3Nzc3N0dHN0dHR0dHR0dYuOjImGhYWFh4SCgYGBgYGBgYGBgoKCgYGAgIKCgoGBgYGBgYGBgIB/eXNzc3NycXJycnJzc3N3d3d3bGpoZGhpa3Z6a2VmZWhnbXJzdHN0c3JwcHBxcnN1dXR0c3Nzc3JycXBvb29vcHFzc3NycnJyc3R0dHNxcHFyc3R0dHR0dHRzc3Rzc3NzdHR0dHRzdHR0dHR0dHRzdHR0c3NycnFxcnJzc3Nyc3NzdHR0dHN2jZCMh4eFhYSEgoGCgoGBgYGBgYGCgoKBgYGAgYGCgoGBgoKBgYGAf395c3NycnFxcnJycnNzc3d3d3dzc2pnaWloeX99cW51bG5wcXJycnFxcG9wcXFxc3R0c3NycXFxcG9ubm1tbW5ubnBxcnJycnJycnJzcXBvb3BxcnJzc3JxcnJycnJycnJycnJzc3Jzc3Nzc3Nzc3Nzc3Jxb29ubm9vcXJzc3Jyc3NycnNzcnaPj4uHhoWFhYOCgoKBgYGBgYGBgYGBgoGBgYGCgoKBgoGCgoGCgX9/f3hxcHBwcXFycnJyc3Nzd3d2dnd2cnF0c252f352c3hwcHBycnJycXFwcHFxcXJzc3Nzc3JxcXBwb25ubm5ub25vcHBxcXFxcXBwcXJwb25vcHFxcXFxcHBxcXFxcXJycnJycnJycnFxcnFxcnJycnFwb29ubm1ubW5vcXJycnJycnJyc3JxeI+OjYaDg4aEgoOCgoGCgYGBgYKBgYGCgYGBgYKCgoKCgoKBgYKBf4B/d3Bwb3BxcnJyc3Nzc3J2dnZ2dnZ3dnZ1c3l/fnd3d29wcXFxcXFxcHBwcXJycnJzc3JycXBydXBwb29vb29vb29wb3Bvb29vcHBxb29vcHBwcHBvcG9wcHFycXFxcnJycnFxcXFxcXFxcHBwcHBxb29ubm5tbW5tbm9wcXFxcXFxcXFxcXB7j42NhoODhYOCgoKCgYKBgYGBgoGCgYGCgoGCg4KBg4KBgYGAgYF/f392bm9wcHBxcXFxcXBwcHZ2dnZ2dXR0c3NxfYB9fX9zb3BxcXFwcHBwcXFwcXFyd3RxcnJxbomGbnBwb29wcG9vb29vb29vb3BxcXBub3Bwb29wb29wcnJycnFxcXBxcnFwcXFxcHBwcHBwcHBwb29ubm1ubm5ubm9ub3BwcHFxcXFxcXFxcIKRjoqEhIOFhIOCgoGBgoKBgYKBgYGBgYGCgoKCgoKCgYGBgYCBgX9/gHVvb29wcXFxcXBwcHBwdnZ2dXRzcnJycnGAgoCBeXBwcHBvcHBwcHFxcXFwcnCFk3JxcW97nn5ucHBwb3BxcHBvb29wb29vcXFwcG9wcG9vb25vcHFxcHBwb3Bvb3BwcHBwcHBwcHBvb29vb29vbm5tbW1ubm5ub25vb3BvcHBwcHBwcHBwiZCMiISDhIaDg4KCgYGCgoKCgYGBgYCAgYGBgoKBgYGBgYGBgIGBgH+AdG5vb3BxcXFwcG9vcG92dnVzcnFxcXFxcICDg39ycHBwcHBwcHBwcHFxcHBxcXejkHBxcZWffW9wcHFwcHBwcHBwcHBvcHBxcXBwcHFxb29vbm9wcHBvb29vcHBvb3BwcHBwcHBwcHBvb29vbm5ubm5ubW5ubm1ubm9wcG9vb29vb3BzcXWPj4uJg4KFh4ODgoKBgoGCgoKBgYKBgYGBgYGBgYGBgYCAgYGAgYGAf4B0b29vbm9vb29vb29vb3Z1dHNxcXFxcXJygIKCgXRxcXFxcXFxcXFxcXFxcXFyc5yogW97op5+cHFxcXFwcHBwcHFxcXBxcHBwcXBwcHBwcHBwcHBwcHBwcHFxcXBxcXBwcHFwcHFxcHFxcXFxcXJxcnFwcnRycnR0dHR1dnRzdHR0dXd3gpCPi4iDgoaHhISCg4GBgYKCgoGBgoGBgYKBgYGBgYGAgICBgYCBgYB/gHVvb29vb29vb25vb29vdXRzcnJycnJycnKDg4OCdnFycnFxcXJxcnJxcXJycnJxlKubcIOjn35wcXFycXFxcXFxcXFxcXFwcXFxcXFxcnNzcnJyc3V1dHR0dHR0dHV2d3d3d3d3eHd4eHd3eHh4d3Z3dnV2dnZ2d3h6e3x7e3t6enp6enyGkI2LiIODiIeHhYODgoGCgYKBgYGBgYKCgoGBgYGAgYCAgYGAgIGBgH+Ad3FxcXFxcG5ucG9wcG92dHV1c3Nzc3NzdYiDgoN5cnNzcnJyc3Jyc3Nzc3Nzc3KTsaqLlaade3Nzc3Nyc3N0dHV1dXV1dHV3eHd3d3d4eHh3eHh4eXl5eXl4eHl5eXp6e3t7e3t6enp5eXh3d3d1dnV2dnd5enp7fn5+fX1+fn5/f35+gIyQi4qHg4WIi4iEg4SDgYGCgYGBgoGBgoKCgoKAgYGBgYCBgYGAgIGAf4B8enp5eXx5eHh2dXZ2dHl2d3h3d3Z3dnZ6fnx+fnx2dnd3dnV4enh4eHh4eHh4fKmvo7Gtr598e3l5eXh4eXl6enl5eXh4enp5eXh4eHh3dnd3eHh3eHh5eXp7e3p8fH1+fX9/f359e3t7e3p5enl5e3t/foB/fn5/fn19fX5+f35+fn6AjpCNioeEhoqLiIaGhIOBgoKBgYGCgYGCgoKCgoCBgoKBgYGCgYCBgIF/f4B/fn19fX9/f318e3t7eXh4eHh5eXl4eXh5eXl4enp6enp6e3t7fH1+fHx8fHuPq5mhtKSfqYh6e3p4eXh4ent6enp5eXp8fHt6enx8fHp6ent9fHx+fn+AgoGAgYKAgH9/gYGBgIB/f35+fn5/fX1+f4CAf35+f39+fn9/f39/gH+Af4OQjoyHhoWIi4yIh4aFg4GCgYGBgYKBgoKCgoKBgYKDgoGBgYGBgIGBgIB/goOCgoGBgX99f39/f4F6enh4d3h4eHh5eHh5enp5e358enx9fXt8fX19fX19fZmhlaOvn5yjmn5/f319fYCDgoCAf318fXx9fXt9fXx8fH19fX1+gYGChISDgoB/gYGBgH9/f4B/f39/f39+fn9/f39/f35+f3+Af39/gICAf4CAgICAhJCPi4eGhoiLi4mKhYaDgoKCgYGBgoGCgYKBgYGBgoOCgYCAgYGAgIGBgH+ChIKCgICAgH9+fn+AgH9/fn18fX19fYB/fX+Af35/gH9/fn9/gICBgICBgIGBmZuJmLChnZ2dg4CBgH9/f39+f4B/fn5+f39/gYB/f4CBgYCAgYOEgoGCgoGCgH+AgYCBgYGAgH+BgICAf39/gICAgYGBgIGBgYCAgICBgoGBgYCAgYGFjo6MiYaHiYyLi4qGhoOCgoKBgYGCgoOCgoKBgIGBgYKCgICBgYCAgYGAf4KFg4KBgYCAf39+fn+AfX5+fn19fX5/fn9/f35+fn+AgYCAgICAfn9/gICBgX+XpJ2Uo5uZkZ2Ie31+foB+fn5/f35/gIGBgoKDg4KCg4KBgYKDg4OCgYGBgYKBgoKCgYKBgoGBgYGBgoKCgYGCgYKCgoGBgoKBgYKCgoKCgYGBgoKCgoaPkY+KiImKjY6NiYaFgoKCgoKBgYKCg4KCgoGBgYGBgYF/gIGBgYCBgIF/gYWEg4KCgoGCgYCAgIB8fHx7fH18fH9+fn9+fn5+f35+f39/f39/gH5/f4B+hqivpp6ZnZ+mqaaPhYF/f4B/gIF/f39/f3+BgYGCgoCAgYKDg4SDg4ODgoKCgoKCgoKCgoKCgoGCgoKDg4OCg4ODgoKCgYKCgoODg4ODgoKCgoODg4KCh5KTkIuKi4uPj42Lh4SCgoKCgYGBgoKDgoKBgYGBgIGBgICAgYGBgIGAgYCAg4SDg4OEg4ODgoKCgXx9fHx9gn1+f4GCiIGCgoSCgYGDg4GBgYKDgoWGjZqrr6Cbo52fnqKkqquln5SHgYCAgICAgH9/f3+AgICAgH9/gYODhYSEg4SDgoKCg4OCgoOCgoODg4ODg4SDg4KEhYWDg4SEgoKDhIOCg4ODg4OCgoODgoCKlJOPioqMj5GPjYuGg4KCgoKBgYGBgoOCgYGBgIGBgoGBgICBgYGAgYCAgH+BgoODg4SEhIOCgoKCfXx8fn6AgYOAg4OChIaFhoaFhIWFg4ODg4SDhoyfq6mgmZminZ6en52eoaCakIaDg4KDg4ODgoGAgIKCgYOCgYKCg4OEhYWEg4OChISEhIOEhISDg4OEg4ODg4OEg4SDhIWEhISDg4ODgoKCgoKCgoKBgYKCgo+UlI+Njo6RkY6KiISCgoKCgYGBgYGCg4GBgIGBgYGBgYCBgIGBgYCBgICAgIKChIKChIOCg4ODgoJ9fX2AgH+AgoGDg4ODhIaEhIOEhYWDg4GBg4OCgoaPkpSVl5ycnp+emZiTjYiGh4eGhoeHhoaEgoGCg4SDg4ODg4ODhISFhYWDhISFhISEg4KBg4OCg4SEg4KCg4SCg4ODg4OCgoKCgoKCg4OEhIOFhYWFhoaIk5OTkY+Pj5KRjIqIgoKCgoKBgYGBgYKDgoKBgIGBgYGBgICAgYGBgICAgICAhISEgoKCgoGBgoKBgX+AgYOCgICAf4CCgoGDg4KCgYODg4SDg4GDhYSCgYCDiJCVlJCXnZqRioaHiIiHh4eIiIiFhIOBgIGBgoKCg4GCg4SEhYSDg4OEg4OEhIOBgYGCg4OEhISDg4ODg4OEhIODgoSDg4ODhIWFhoeHh4eIiIiJiY6TkpKOj46Rko+LiYeCgoKCgoKBgYGBgoKCgoGBgIGBgYGAgICAgYGAgIGAgICDg4KCgYKCgYGAf4CBhYWFhoOCgYB+fn+BgoSCgYKDhIOCg4ODg4KChISDhIOCg4ybh5CUioSCg4WFhYOEhIWFg4KBgH9/gIB/gIGEg4OEhYWEgoKCgoOCg4OFhIKDhISEhYaGhoaGhoWFhoeHhYaIh4aHiIeGhoaIiYeGhYaGhoeIkZKSkI6QjpGRjImHhYGBgoKCgoGBgYGBgoOBgYGBgYGBgICAgICBgYCAgICAgISEg4KBgoGAgYGAgYKIh4aHhYSCgH99fX6AgH+AgYGBgYGBgoGAgYKDgYKCgoKBgYiHjYOCg4KBgICAf4GAgH+AgH9+gIGBgYKCg4OEg4OEg4OCgoGBgoODg4SEg4SEhIOFhYaFh4eIh4eHh4eHh4eGhoaGh4WFhYaGhISEhIWEhYaSk5GOjo+OkI6JiIeEgoKCgoKCgoGBgIGCgoKCgoKCgYGBgYGAgYGBgICAgYGAgoSDg4KDgoGCgYKDg4iHh4iHhYSCgX5+gICAfn5/f4CBgYGCgoCBhI2DgH+AgIB/f4mRgIGCg4OAf39/gICAgICAgICDg4KDg4ODgoOBgYKCgoOCgYKCgoOCgoSDhISDg4SEhYWFhYaGhoaFhISEhYWEhIWFhYSEhISDhISEhISEipSTkZCQj46NiIaFhIOBgYKCgoKCgYGAgYKCgoKBgoKBgYCBgYCBgYGAgICAgYGAg4OCgoOCgoKBgoOCiImJiYiHhYSDgYKEhIOBgoKCg4SCgoSEgoOJloiEgoSCgn+AjJWCgoGChIKBgYGCgoODgoGDg4SDg4SEg4OCg4KDg4ODg4KCgoKCgoGDhISEhYSFhYWFhIWEhIWFhYWDg4OEhISEhYWFhISEhISEg4ODg4OOlZKQkZGPjYyHhYODg4GBgoKCgoKBgYCBgoOCgYCCgYGBgICAgIGBgYCAgICBgICDhYSEhIODg4SDhIOGh4mIhoWDhIODg4WDgYCDgoWFhISDg4OChI6Zi4OFhISEgoCRmYaCgoKEhIOCgoGBhIWEg4ODgoKDhISDg4ODg4SFhISDg4KCgoKCgoSEhYSFhYWFhYODhYWFhYaFhoWEhIWEhYWGhYWFhIWEhISDhIODhJGUk5KSj4yMioWEhIODgYGCg4KCgoKBgYGCg4KBgYKBgYGBgICBgIGBgH+AgIGAgYaGhoaGhoaHh4aGhYSDhYaCgIGBgYGHgoB+f4GBkIyDgX9+fXx9jJyOgIKBgYKChZSUjIGCgYKDg4KCgYKDhYODg4KDg4OEgoKEhIOEhIWEg4OCgoKCgYKCg4ODg4SFhYWFhIOEhYWGhYWEhISEhIOEhIWFhYWFhIODhIOEg4KGlJSSlJKPjYyIg4SEg4KBgoODgoKDg4GBgoKBgoKCgYGCgYGBgYCAgYGAgICAgICAhYWFhYaGh4aGhoWGg4ODg4GAgoKCgYKAf35/f4GWl4mAfX19fXuBmIyAg4GBgYCPlIyQgYKBgoKCgYKDgoODgoOCgoKCg4OBg4SDg4ODg4OEhIKCgoKDgoKDg4ODhIWEhISEg4OEhIODg4OEhIODg4ODg4SDg4ODg4KDg4KDgouUk5KTko2NioaDhIOEgYGCg4ODg4ODgoGBgoGCgoKCgoKBgYGBgICBgYCAf4CAgICDhISFhYSFhYWEhIWCg4KDgoKDg4OBgICAgICAgZWfin5+gH2Hi36EhIOEgoODgo6JhYyCgoOCgoKCg4ODgoODg4KCgoODg4KDg4KCg4KDg4WEg4ODg4SDg4SEhISEhYWEhIWEg4SEg4OEhISEhISEg4SEhYSDg4SEhIODgoKDkJSSkpKPi4yIhoSFg4OBgYKDg4ODg4OCgYGCgoKCgoKDgoCBgoGAgICAgIB/gICAgISDhYWEhYWFhYSFhYOEhIWDg4SEhIKCgoOCgoSBkaGKf4yFfYaJgH6FhYWEhYJ/fn19gIKEg4ODg4OEg4ODhISEg4OEhISEg4SEhIOEg4OFhoWFhYSFhYWFhYSFhoWGhoWFhYWFhYWFhYWGhoWGhoaFhoaGh4aFhYWFg4SEhIeTk5OSkoyLiIWGhYWCgoGBgoODg4OCg4KBgYKDg4ODgoKBgIGAgICAgICAgH+AgICAhYWFhYWGh4eGhYWFhISFhYSEhISEg4ODg4OEhYOJkYOEi4WCgYF+fYGHhoOAfn5/f39/f4OEg4OEhISEhISEhISEhISFhYWEhYSGhYWFhYaGhoWGhYWGhYWHhoaGhoaFhIWFhYWFhIWGhoaHhoaGhoaHh4iIiIaFhYaFhYWGjZSTkpGQi4qHhoeGhIGCgYKDg4ODg4KDgoGBgoODg4KAgYGBgICAgICAgICAf4CAgICHh4eGhoeHiIeHhoaEg4ODhIODg4OEg4ODg4OEhISEgYKCgYmBf359foWBf39/f39/f36AgISFhIWGhoaFhYWGhoeHhoaFhoWFhoeHh4iGh4eGhoaHhoeGhoeHh4aGhYSDhIWFhoWFhYaGhoeHhoaGhoeHh4eIiIeGhoaHh4eRlJORkZCLiYiFhoSDgoKBgoODg4ODgoKDgoKCgoOCgYCBgICBgICAgIGAgIB/gICAf4aHiIeHh4eIiYmIiIODgoKDgoSEhIWEg4KCg4OEhIOBgICAhIR/fn5/gH9/f39/gIB/f4B/f4WFhoiIiIeHh4eIh4iHiIiIhoaHiImJiYmIh4aHh4eJiIaHh4eHhoeFhIOEhYaGhYWFhoaGh4eFhoeGh4aHh4eHh4eHh4eFh5OTkY+RkIuHhoWFhIKCgYGCg4ODg4ODgoKCgoGCg4KCgIGBgYCAgICAgICAf3+AgYB/hoiIiIiHh4iJiYmIg4KCg4ODhIWHh4aFg4OFhISEg4GAgIGMiYGAgYKCgYGBgYB/gH9/fnt6gIaHiIqKiYmJiImJiYmKi4qIiIiJiYuLioqIh4eIiImHh4iIh4iGh4aEg4OFh4eHhoWFhISEhYWEhYWGhISEhYWFhoWGhYOJlJOQj5COioaFhoWDgYGCgoKDg4ODgoKCgoKCgoKCgYGBgYGBgYCAgICAgIB/gICBgH+GiYiIiYeIiImJiIiEgoKDg4KDhImKh4aEhIWEg4OCgICAhYSCgoKCgoKCgH9+fX19fX5+fHt8g4eJi4uKiomIiIqJiImLiomJiImIioqJi4mHhoaGh4WGiIiJiIaGh4SDgoSIiIiIh4WCgoGDg4KDg4SCgYKDgoGEg4SDgY6TkpCPj4uJhYWGhIKBgYGBgoODg4OCgoKCgoKCgoGBgYGBgIGAgICAgICAgH+AgIGAf4WIh4eHhoeIiIiHh4SCg4OCgoOFiYqJh4WHhYSFhYKAgYOEgoOCgoKDgX59fX5+fn5+fn1+fX19g4eJioqHh4WGh4eHh4iHh4mHh4aIh4eJiYODhIOFhISFhYeIiIaFg4OCg4WHhoeGhoSCgoOEgoOEhIKBgoGBgYODhIOEkZKQjo+Oi4eEhoaEgoGAgYGDg4ODg4KCgoKCgoKCgYGBgIGBgYCAgIB/gIGAf39/gIB/hYaGhYaGhoeHiIeGgoKEhIOChYeIi4qGhIaEgoaGgoKEhIODg4OCgoF9fH1/gH9+fn59fH19fHl8g4iIhoSDgoKDhIaFhYODhYSEhISEhIWEgoKCgoSEgYKDg4WGhYSCgYGCgoODhYSEhIWEhIaEg4SFg4KDgYKDg4SFhIeSkY+NkIyJhoSFhIWCgYCBgYODg4ODgoKCgoKCgoKBgYGBgYGAgICAf4CAgYB/gICAgICDhIWEhIWFhoeHh4aAgYGFg4OEhYSHiIWCgICAgX9/gYODg4ODgoKAfX1/gICBf31+fn18fX17enqBkISEgoGBgIGAgoKBf36BgYGCgYOBgoGCgoKBg4SAf4CAgYKCgICAgICBgYGDgYGChIODhYSCg4SDgoKBgoSDhYWGi5ORj4+Pi4iFhYODhIGAgYGBgoODg4KCgoKCgoKCgoGBgYCBgYCBgH9/gIGBgICAgH+AgIKCg4OChIOEhYWGhn+BfoCBgICAf4GDgn9+fn5+fX+Cg4OCg4KDgn59fn+AgIGAfn19fX1+fXx6eXyDgoKBf39/f35/gIB+fYB/foCAgX+AgIF/f4CBgX59fX+AgYB/foCAgICAgICAf4CCgICCgYGDgYGAgYGBgYKEg4aPkpCOj42Kh4eGg4ODgYGBgYGCg4ODgoKCgoKCgoOCgYGCgYGBgICAgH+AgICAgICAf39/gYKDhIGCgoOCg4SFgIB/fH19fn19foCAf31/fn1+gIODgoKCgYF/fX1+f4CAgH9+fX19fHt7e3p6enqAgIB/f39+fn1/f35/gH9+f3+Af4CAf35+fn9/fn18fn+Af35+f3+Af39/f4B/f39+f4CBf4B+f39/gH9+f4B/hZKSj46PjIuHiYWEg4KBgYGBgYKDg4ODg4OCgoKDg4KAgYKBgYGAgICAf3+AgIB/gIF/f36BgYSEgYKBg4OCg4OBgH98fn9+fX6Af4B/foF/f4CBhIOCgYB/f359fn5/gICAfn19fXx7e3x6enl5eXuAgH+AgH9/fn9/foCAf35/f4CAgoB/fH5+f35+fXx/f4B/fn5/f4B/f35/f4CAfn2Af39+f35/f35+fn19fX2Fk5KOjIuKiImIhISEgoKCgYGBgoOCgoOCgoODg4ODgYCBgYGBgYCAf39/f4CAgICAgIB/foCBhIOCgYGDhISDhICBgICBgIGAgYKCgoGBgoCBg4ODgYGBgYCAfn19fn5+f359fX19fXx8fHt6eXl5eH2BgICBgYGAgIB/f4F/gICAgYGCgoB+gH5/fn5+foGAgYF/f39/gICAf39/gYB+f3+Afn9/fn+Af31+fn17fIaTkYyLioeHioiGhoSDgoGBgYGCg4ODg4OCg4OCgoKBgICBgYGAgH9/f39/gICAgICAgH9+fn+BgYGAgISGh4aHgoSDhYOBg4ODhYSEhISEg4ODhIKCgoKCgX9+fX19fn6AfX19fX19fX19e3p6eXl5eoGCgoKFg4GCg4GAgoCCgYGDgoODgYGCgIGAf4CBg4GEgoCAgYCBgYCAgYCCgn+BgIF/gIB/gICAfn9/fnx8ipSQiomIiIiJiIaGhoSCgoGBgoKDg4ODg4KDg4KCgYCAgICBgYGAf39/f4CAgICAgIGBf359fn5/f39+g4aHh4iChoSFg4SFhIWGhYaGhoWGhYGBg4ODgoKAfX19fX19fn59fX19fX18fX18e3l5eXh4fYODhIWCgYSDgoKDhYeCg4SDgYKCg4OCgoKCgYKFg4iFgoGCgYKDgYGBgYSDgoOCgYKCgICBgIF/gIGAf36Ok4yHiIaIh4aGhYaGhIKDgoGCgoODg4ODg4OCgYGBgH+AgYCBgYB/gH9/gICBgH+AgYB/fn19fX5+f36Ag4SHh4SGhoaFhoaHh4aHh4iHh4eGf32AgICCgX59fX19fX19fX19fX18fH5+fnx7eXh3eHl5gIODf4ONhIOEhISXl4ODhIF9f4GCgoGCgYKBg4aIjIWDgoKBhIKEg4KDhYSEhYODg4OCg4OCgoKCg4OCgpGQi4iJh4mHhoaEhoaFhISDgYKCg4ODg4ODgoGBgYCAgICBgIGBgH9/fn+AgICAf4CAgH9/fn1+fn+Bf4CCgYWFhYeGh4eGh4eIhoeHh4eGh4V+fX18fX9+fX19fX19fX19fX19fXx7iJKCe3x6fIZ5eXl8gYF+iJaEg4OEhJSTgIGBf39/fn6Fi4B/gICEhpCJhYSCgoGFhYuDgYKFhYaGhIOFhIOEhIODhIOEhISIko+MiYiIiYeHh4WGhYSFhIKBgoKDg4ODg4OCgYGBgYB/gICAgICAf39/f4CAgICAgYGBf39/f4CAgIGBgYGBg4OGh4aGh4aGiIeGhoaFhIOFhH59fHx8fX18fH19fX19fX19fX18fH+RlZaDe3qElHx5enp7fH+Bg4GCgYOCgH59fn57iJF8fI6Wf31/f4KGioWDg4SDgYONiX99f4OEhYWDhYWFhIWFg4SFhYaEhI6Rj4yKioyJiImHhYWFg4ODgYGCgoKDhIODgoGBgICBgICAgYGAgIB/f3+AgIB/gICAgX5+f4GBgoKCgoODgoOCgoWGhISFhYSGhIOEg4KBgIKAfn19fHx9fXx8fH18fH18fX19fHx8e4uRl4x6e3yAenl6e3x5eX19f4B/gH98e3t+fn2ClZF/hIh9fH5/goR8fIGChIKAf4eDfYKBf4KCgIODhISEhISChIOEhYGEkZGOi4yMjoqJiYWFhYODg4KBgoODgoKDg4KCgYGAgIGAgICAgICAgH+Af3+Af357gICBenyAgoKDhYODhYWFhYODg4SCgYKDgoODgoGBgIB/gX5+fX19fHx8fHx8fHx8fHx8fHx9fHx8fn6Kgnt6e3p4ent7fH18fn5+f35+fX19fH+BgH2Gj4F9fYJ+f36Agnx8gH+CgIKAfnx7ioJ9gH9+gYCAgYKBgoCAgIGAf4uUkIyMjo6NiIiHhYWFhIOCgoKCg4OCgoODgYGBgICAgICAgH9+fXx7fHx9f3+AgHx6gYF4e4CCgYOFhIOFhIaGhISAhpSIgIKBgYGBgH9/f39/fn5+gHx8fHx8fHx8fHx8fHx9fHx8fHx9fHl6e3t4eHl7enp8goCBf3+BfX9+f359gIKCgICAgX+CkYF/f4CAfoB+fn9+gIGBfX19e319fXx9fHx9gH+AgH6Afn6ClJKNjI2Oj4qFhoaFhISFg4KDgoODg4OCgoGBgYGAgICBgICAf4CAf39/fXt6fICAgHh+gXd7gIF/goKCgoKEhoeGhn6IlYp+gIGAgIB/foB+f39/fn+Bfnx7e3x8fHx8fHx8fH59fHt8fHx8e3x8fHp6eXt8en2Fg4OAgYF+gH5/gH6FgoF+gH9+foCFhoKAfn6Dhn99fH5/gIGAf39+fX19fX57fH1/f3+AfX9+f4yRjo2Njo2Nh4SGhoWEhIODg4OCg4ODg4KBgYGBgYCAgYGAgYGBgYGAgH9/f397en9/e3mAd3p/f31/f3+Af4KEhoaFf3+FgX5/gIB/gH5+f35/gIB/f4B/f319fHx9fn18fH19fX19fH58fXx7fXx8ent6fH19f4aFg4CAgH1+fX5/foyEgYd+fXx8f36CgX99fX19gXx7fXx+gYSDgYB+fn5+fXx+f399foB+f36Eko2NjI+NjIqGhIWEhISDg4OCg4KDgoOCgYGBgYGAgYGBgYB/fXx8fH1+f39/f397e399d352eH59fH18fX5+gYGCg4B6fn58fn6Af35/f35/fn+AgH+AgH9/fn9+fn5+fn1+fn99fH59fn19fXt8fHx6e3p9f4CAg4OCf35/fHx8fXx8gYN+jH58e3t9fn1+fn17e3t9fHt7e3uAhoSChIOCf4B+f4KCgn9/goJ/gIuQjY2MjYuKiISEhIODg4ODgoKCgoKCgoKBgYGAgoGBgYKCf3+AgIB/fn18fH5/fn55fX52e3Z4fXx8fHt9fX6BgICAf31/f31+f39/foB/f39/f3+Af4GBgH99gH9/fn9+fn5/f3yCfX59fX17e319fHp8fH6AgoGAgIB9fX18fHx8fH18fnt/fnt7e3x8fH18e3t7e3x8enp9en6CfoKEhIOBgoGFhoWFhoaHhYGEkY+Ni4qLh4eFgoOEhISEg4KCgYGCgoKBgoGBgYGBgoGBgoKAgYKBgYCAgH9+e3x+fnx6fnh5dnd8fHx7e318f4GAf35/foB/f35/f35/gH9/f3+Af39/gYKAfn6BgIB/f39/f39+fYN8fH19fH99fX19e3x+fn9/fn5/fnx8fXx8fXx9fnt8e3x8fHx9fH18fXx9fHt7e3x5e3x7e316fX5+f4CAg4eJiYmKiYqJhYiSj4yJioeFhYOCgoOEhIOCgoKBgYKBgYKBgYGBgYKCgoGCgoCAgX98e3p6eXt9enx+fnl8eXh4dHx8fHx8fHx+gH9/f39/gIB/fn5+fX+AgH9/f3+Af4CDgoB/gIGAgIB/f4CBf358enx9fX59fX5+jIZ9fX57e4ODfX5+fX18fX19fX19fH17fXx9fX58fn19fX18e3t6fHt8fHt6e3t6enp7fn6DhYiHiIqLi4uJjJGQjoqIhoWEgoKCgoODg4OBgYGBgYGBgYGBgYGCgoOCgYKBgIGBf3+Af356eHl5en5+e3l6eH5zfHx8e3x8fH5+fn5/gH+AgIB/fn9+gIF/f4B/gIGAgoSEgYCAgYGAgX+AgYKBf39+f31+gH57foGSjHx9f4qAjYx+fn19fX5+fX59fHx8fn18fXx9fX1+fX1+fnx7e3t8fH18e3p7e3l6enh5e35/g4OEh4mKiImOkI6MiYmFhISCgYKCgoKCgoGCgoKBgYGCgYKCgoGCgoKBgoKAgYGAfoCAf39+e3p5e319eHx6f3KBfXt7fXx8fn59fYGCf4GBgX9/gH+AgX+AgIGCgYGFg4SCgYGCgYKCgICBg4KAf4F/fX6Afnx/f4mCf36CkYSEg4F/fn18jYd9fX59fXx+fnx9fXx9fX5+fX5/fH19e3x9fnx8e3x9enp5eXl5e3t+foCBg4eEiI+Oi4uHhYSEhIKBgoKCgoGBgYGCgoKBgoKBgoKCgoKCgoGCgn+AgIB+f39/fn5/ent5fX16enp9cX6Cent9fX19fXp4f4KAgYKCgICBgYGBgICBgoKCgoaFhIKBgYGBg4F/gIKEgX9+gYB9foF+fX5/gIB9fn+EgH5+f31+fX2KhX1+f31+foB+fH18fH5+fn99f4B9fX18fX9/fHx7fH17e3t6enp7e3x9fn6Ag4CJjouMiIWFhYSEgoKCgoKCgYGBgoKBgoKCgoKCgoGBgoKBgYKCf4CAgH9/f39+fn59eXp6fXx5d3t0e4d8dHd9fn17e3Z2fYCBg4KBgYKCgoKBgYGDg4OChYaEg4GAgIGDgX+AgYSBfn6Af35+gH59fn6AgX+Bf3+Af39/gH99f39/f3+Afn9/gH58fX18fn5+foF/gH2CgHx9gIB9e319fXx8fHt8e3t7fHt8fH19fIqLiYiGhoWFhISDgYKBg4KAgIGCg4KCgoOCgoKCgoGCgoGBg4J/gIGAf39/fn5+fn57enp8fHt2e3R3f352cnt+fnt4dnd8gIGCgoKBgoODg4OCgoODhIOFhoOCgX9/gIOBgICAg4F+foB/fX+AfX1+foCAf4J/gYGAgICBgH1/f3+AgICAgIB/fnx9fX19fn5+gn2AfoKAfX6AgX98fn59fX17fH58fXx8fHt8e3x+ioeHhYaIhYSFhIKCgoGDgYCAgoKDgoKCg4ODg4KBgYGBgYGCgH6AgYB/fn5+fn5+fn56e3p9goN9dXF6fHpxen59eXh0dICAgoKCg4KDhYOEg4KDhISEhIWEgYGAgH6AgoB+f36Bf35+f4B9foB9fX1+gH9/gYCBgYCAgIGBfn6Af4GAf4CAgH9+fX19fnx+fn19gYR/gH9+f4GBf31/f319fn1+fn1+fHt8enx7eoCIg4SEhYSEhIWDgYKBgYKBgICCgoOBgoOEg4SDg4KBgYKBgYOAf4CBf35+fn5+fX5+fnt7en6Jh354cnl9f3F6eHt4eXV1fYKDgYODg4OFhIWDg4OEg4OEhIOBgH+Af4CBfn19fn9+fn5+gH19f3x9fX6Af4CAgIKAgIGAg4KAf4B+gIF+gIGAgH9+fn5+fn1/fn6FhYGBgH+Ag4F/foGAf35/f4B/fn17ent6fHt6goWAg4KCgoKCg4GBgYCAgoGAgIKCg4KBg4SDhIKEgoGBgoGCgoB+gIF/fn1+fn5+fX59fXp7fIWEe3tzeXt8cHd1dnd5dXR6hISBhISDhIWFhoSDg4SEgoODgoCBf39/f4B9fX1+f31+f39/fn1+fH19foF/f4B/gIB/gICDgoGAf36AgH+AgYCBgH9/f39/f4B/gIGCgoKBf4CDgn9/g4J/f4B/gX+Af3x6fHp8e3yCgH+Cf3+BgIKCgYF/f3+BgH6BgoKDgYGDg4KEgoSCgYGBf4GCgH6AgH9/fX5+fX19fn19e3t6gH94fHZ5enxxdHh3dnh1cnmFhYKEhIKEhYWGhISChIOBg4GAgIF/f4B/gHx9fX6AfX5/f39+fX98fn5+gX+BgH9+f4B/gYOCg4B/f4GBgIKBgYGAgIGAgIB/gIGAgIKDgYF/gISAfYGDhICAgX+BgYKBfXp7e3x8fH9+f4B8f399fYGAgH59fX9/foKBgYKBgIKCgoKBg4KCgYB/gYKAfn9/fn99fX1+fX19fX19ent7fHZ9eXh6enJ1eXl2d3dzdYaFg4WEgoSEhYSEg4GDgoGDgX+AgX5/gH6AfX19foB+f4B+fn99f3x/f3+BgIF/f3x+gH6AgYKDgYCAgYOEgoGAgYB/gYCAgYGAgYGBg4OBgX+Ag4B+goOEgICCgYKChIJ+e3t8fHx8fX1+fXp+fX14fn9/fHx8fn5+gYCBgYCAgoGBgYGDgoGBf4CAgoB9fn19f319fX59fH19fX16e3p8dnx6d3t4cnZ5e3Z2dnN0hoSEhYSChISFg4ODgYOBgYOBgIGBfX+BfoF9fX1/f39/gH5+f359fYB/gIGBgX9+fH5/fn5/gYJ/gYGCg4eFgX9/fn6Af4CAgYGAgIKCgYCAfoCCf3+BgoOBgYOCg4OFg399fX18e3x8eXp7en55e3l4f357fHt+fX1/f4F/gH6BgICAgoOCgYF/gIGBf31+fH1+fX19fX18fn58fXx5e3x4enx3endzeHd6c3Z2c3SGhISGg4KDhISDgoKCg4GCgoGAgYF9gIB+gH1+fX5/gICAf39/f3x/f3+BgIGAf359f39+fn+BgH2AgIGDg4N/f359fn5/f4CAgX9/gYKBgH9+f4F+f4CCgoCBg4KEhIaEgH5+fHx8fHp5dnl5enl2eXZ+fHt7e359e399gH99fX9/f3+BgoGBgX5/gYF+fX18fX19fX19fXx+jYF8fXl7e3p5fHd4eHR1dXhyd3d0doaEhIWEg4ODg4OCgYKDgoGDgn+Bf35/fn+AfX19fH6AgIB/f39/fIB/f4GAgYCAf3yAf35/foB/fX5+gYGCgn5/fn1+fn5+f3+Af32AgIB+fn5/gX5+gIKCf4KDgoOEh4SAgH58fXx8e3x1eXl4eHh5d3t8e3t7foV9fn1/ent+fn59foGAgIGAfX6BgH59fXx9fX19fX18e32Dgnx8ent7e3p7d3Z4dXJzdnB4eXJ4hYWFhYOEhIOChIKBgYKBgIKBgIF/fn5+foB+fX58foCAgICAgIB8gH6AgH+BgIB/fYF/fn9/f359fX6AgYKBfn9+fn59fX5/fn9+fH6Af35+fn+Cfn6AgIF+gYODg4OGhICBfnx9fHx7fHh3e3h1eXd3eXx6e3t9kod9fH13en1+fn19f35+gH98foB/fn19fH19fX19fHt8ent9enp4e3x6ent4dHh1cXJ0cHh4cXmEhYWFg4SDgoODgoGBgoKAgYGAgIB9fn5/gH18fn1/gIGAgICAgHx/f4B+f4GAf39+gX9+f39+fX18f4CAgIB+f35+f318fn9/f358fYB/fn1+gIJ/foCAf36ChIKCg4WFgoJ+fXx7e3x8eXd8eXd4d3d4e3t7e3yFiX17end6fH19fHx9fX1/fnx9fn59fXx8fX5+fX18fHt6enx7e3p5enp7enhzd3VxcXNveHdxe4WGhYWDhYKBg4OBgoGBgoCBgICBgH5/fn9/fXx+fYCBgoGAgIGBfX6Af35/gX+Af3+BgH9/f319fH1/gICAgH9/f35/fXx+f39/f319f39+fn6CgYF/gIB/foGDgoKEg4SCgn5+fHx6fHt7eXt6d3N2d3h5e3p7eXp/fnt7d3p8fXx8fH59fH19fH19fXx8fX19fX99fXx9e3l7fHx7enp6enp6eHN2dXBwcm93dnJ7hYaEhYOEgoGDgoKBgYGCgYKBgYGAf4B/f399fX9+gICBgYJ/goF9foF+fn+Bf4B/gIJ/gIB+fH58f3+BgICAf4B/f4B+fX5+f4B/f39/gH9/f4J/gICAgIB/gYGAgISBgoKAf39+f3x9fn56fYV+dHx9enp6enx5eXp6hoV3eXx8fHx8fXx8fHx8fX19fHx9fX19fn19fX16eX18fH16enp6enp5c3V1b29xb3d0c3yFhoOEgoOCgYKBgoKCgYKBgoCCgYCAgICAgH59gH+Af4GCgn+CgX+AgX5/gYB/f4CAgn+Bf319f35/f4KAgICAgIB/gIB+fn1/gH9/gIB/f39/gH+AgICAgH+AgYCBgYGCgYCAf39/fn1/fnuBk416fH18e315e3p6eHqBgXh5e3x8fXx8fHx8fHx9fX18fH18fn1+fn59fHp8fHt8fXt5enp6eXl0dXVvb3Fwd3N0fYWGg4OCg4KAgYCCg4KAgYGBgYKBgYCAgIGAfn6Af4GAgYKCgIKCgICCfoCBgX9/gX+BgIF/fH6Af3+AgoCAgICAf3+AgH9+fX6Afn2AgIB/f3+AgICAgYCAf4CAgYCBgYKCgICAf39/fX5+fIGGiXx8fnt7fnl6e3p7j393d3l7fHt9fHx8fHt9fH19fX18fXx+fn5/f358enx9e3x9e3l6e3p5eXN0dW5zcXB4cnV6hYaDg4KDgoCAgIKCgYCCgYKBgoGBgYKAgYF/fn9/gYGCgYKBg4OAgYJ/gYGBf4CAgIB/gX99f4F/gICBgICAf4B+gICAf359foB+fn+Af39/gH9/gICBf4CBgH+BgIGCgoKAgICAgIB9foB9gIOCe35+e3x9e3p8fHuHenh4eXx8fH17fHx9fX18fH19fn19fX5+f3+Af317fH18fHx7enl7e3l5c3J1bnZycHhxdXaFhYOEg4KCgICBgoF/gIKCgoKDgYGDgoCCgYB/gICCgoKBg4KEhICBgX6BgoF/gICAgH+Cf36AgYCCf4B/gIB/gH+AgIB/fn2Af35/f4B/gH+AgH+AgYGAgICAgIGAgYGBgYGAgYCAgH9/gH5/fX59fn57fXx9fHx8eHh1eHh5e3x8fXx8fHx8fX5/f39/fn19fn9/gIGAf3x9fHx9e3p7eXp8eHpzcnVud3FxenF2d4WFg4SDg4KBgoKDgICCgYSDg4SBgYOBgoOCgYCAgIKDgoCCgoSDf4GAfoKDgICBgICAf4CAf4GBgIKAf4CBgH9/gICAgIB/f4CAgH+AgICAgIB/f4CBgYCAgICAgYGAgoOCgoCCgYGBgYB/gIB/gId+fnx7fXx7fX94d3Z5eXp7fXx8fXt8fH19fn5/gIGAfn1+gICAgoGAfH59fX58d3t6ent5eXNxdW53cHV6cXZ5hYWCg4KDg4KChISAgIOBhoODg4GChICEg4KCgICCgoSBgYKBhIJ/gIB/gYOCgYGBgYCAf4GBgYGAg4B/gIOCf35/goGAgH9+gYCBf4CAgYCBgYCAgIKBgYKBgX+BgYGBgoOCgoOBg4OCgYCBgH9/hH19fXx/fXt9f3p5dnp4eXt7fH19e3x9fX19fn+AgYGAgH+AgICDg4B9f35+fn15eXt6enp5c3J0b3dxd3lzd3uFgoKCgoOEgoOEg4CAg4OGg4ODgoKEgYSDgYOAgIKBhIGCgoGCgX6AgICCgYKBgYKCgIGAgICCgoGEgH6Bg4J/f4CDgoCBf4CCg4KAgYKBg4KDgoGBg4KChIGAgYOBgYKEg4KEhIODhIODgYGBgoCCf4B/fYB8enx/e3t3fHl5eXt6fX59fHx8fH1+foCBgYCAgIGBgYSEgH2Af39/f357e3t6e3p0cHhxeXR2eHR3e4SCg4KDg4SChIODgYKDhIaEgoOCg4SBhIOBg4CBg4KCgoKCgYKAf4GAgIKBgoGBgoKBgIGBgYKCgoOAfoGDgX+AgYSEgYN/goKBg4GCgoGDg4OEgIKEgoOCgoGCgoOBg4SDhISEhISFg4SCgYOCgYOBgYGAgH58fIB9fHh8eXp5enx9f3x7fHx9fX18fICAgICAgYGBgYKBfoGAgICAf3t7e3p6enVweHd5dnV8dXZ8gICDgoODg4OEhISAgoOGhYWDg4KDhIKEhYKCgYKDg4GCgYJ/gYB+gYCBgYKDgoKCgoGAgYKCg4KCg4B/gYOCgICChIODgoGCgoGDgoKDg4SDg4SAgoSDg4OBgX+Bg4KDhYKEhISEhISDhISChIOEhIKBgoGBgHt9gX58eXx6enp9fHyBfXp8fH19fHp7fn5+gIB/gYGAgICAgIKBgIB/fX18fH18dnJ2eHh2dH92dX2Hh4OChIWDg4SFhICChYWEhIOCg4SEgYSFg4KCgoODgYOCgoCCgH2AgIGCg4KCgoKEgoCCgoOEgoKBgICBg4KAgYOFhIOCg4CCgoOCg4ODhIOEg4CCg4KEg4KCf4OBgoSEgoSDhISEhIOEhIOEg4WEg4ODgoKAe4CBf3x8fXp6fH1/fX9/fHx6fH59fH19fn5/f39/gICAgH9+foCBgICAfnx9fn5/fn18fHh2f3Z3f4SHg4KDhoODhIaEgYKFhoWEhIODhISChIWFgoKDg4SCg4KDgoKBfoCAgoKDgoODg4SDgYKCg4OCg4GCgYGDgn+ChISDg4KEf4KEg4ODgoSEg4OCgIOEg4SDg4KCg4KChIOCg4OEhISEhIWEg4OEhYSFhIOBgoB9gYKAfXx8e3x8gH19foB+fn1/fnx8fH19fn5/fn+BgYGBgH99fX6BgYB+fn1+fX59fX5+f3+AfH2AgYKCg4OFg4SDhoSBgoiHhYSDgoSEhYGFhYWDg4SDhIODgoOCg4F+gYGDg4SCg4OEhIOCg4KEg4ODgoKDgYOCf4KDg4ODgoOAgoWDg4ODhIODhIOBgoSEhYOCgoODgoGEg4GDg4SEg4SEhYSEhIWFhYWEg4ODf36BhIB9fXx8fHx/gX5/fn9/fX99e3x9fX19fX5+f4CBgIGBgH59fH6Cf39+fn5+fX1/f39/gICAf4CEhIODg4WDhIOFf36CiouFhYSDgoSFgYaGhoOEhISEhIODg4OEgn+BgYODhYSFhIWEg4KEhISFhIODgoSDhYKBhISFhYaEgoCDh4SDg4OFhIWFhIGEg4OHgoOCg4GCgYSDgoODhIODhIWEhYWHh4aHhYSEhYSBf4GDf35+fH5+fX+BgH9+fHx/f358enx9fX19fX5+fn9/gIGBf319fIB/gH5+fn5+f3+BgYGBgYKAgYWFhIOEhIKEg4aAgoWFiomEhISEhYWCh4aGhIWEhIWEhYSEg4SDgYKCg4OEhIaEhYSDg4SEg3yDhHuBhHd5g4F9hH5+cnWDgoF2foOEgH2BdYF6hH9/f36EhIKDgoKBg4SDhISFg4SFhoSFhn2EeXx+f4N7hYOBhIOAf31+f31+gYOBfXt/fX6Afn18fHx9fX19fH19f4B/gYJ/fX18f4GBgICAgH+BgYGBgYKDg4KChoSEhIWEgYOEhYOEhYSKiIWFhYOFhYSGhoaDhIWFhYWEhYWEhIWCgoOEhYWFhoSFhIOEhYWCaICFanx7cXF8gXOGc3R0fYKDdXNxg4ZzcHVyc3SDdnt9dYF/goOBgnZ5hYCDgIR/hYSChYWCaHpyc3N8gHKBhH6Dg32BfX5/fX6Cg4J8f4F9f4B9fXx8fHx9fHx8fn1+gX+BgX99fX2AgYKBgYGBgIGBgYKBgoKCgoSHhIWEhYSBgoSGhoOFg4aIhoaFg4aGhoeGh4OFhYaFg4KFhoSFhYODg4SEhoaGhIaEg4SFhn1xe4FweXZ+g3+CbnlwdXN8dnl5hnKEg3B2eHF2dHR1cnN0dml/gG5yb3R2bnVsd216c26Ah3ltfXJzdnN2bW53bHB5bHV+f398foGAgX2Af32Af4B/fX18fHx9fH1+f32Af4CAfnx/foCBgYCBgICAgYCAgIKDgoKEhYeGhoCChYODhYeGg4WFhYaHh4SDhoaIiYaHhIWGiIeEg4WGhYWEhIOFhIKFhoaFhoWEhoWHdnB0e3BydX+HhYNtdW92b3x1coR5eYd4cXR3bndod3pucHaCcoN+b3p5eW1vbnpvb2x3fXiGcHF6cHJ0ZoF1fm57eXNveX+Af31+gYB/e39+fIB+gIB+foCAgYB+fn9/foF/gH9+fYB9f4CBgIB+fn+BgH9+goOCgoSFh4eEfoeEg4OFh4aEhoWFhoaIhISGh4iIhoeEhoaLiYWEhoeHhYOFhIWEgoWFhYWGhYWGhYZxdXByc29zenl+hHSIdHV+iHZugnKEhnluanJ/cW1zd3x/dXR8hH54cXV3bnl1enF2eHV6eYRyaW95eHBreXN6b3p3dnZwgYB/fn5/f396fn18f31/f359gIGDg4CCg4GBhIKBf4GCgH1/f4F+f35+f4GAfn6BgoCAgoSHhoODhoSFhYaHhoWFhYWHhoiFhYaFh4eFhoSGhomIhYSJi4iGhIaFhoWDhYWEhoaGhoaFg3iLeXKIentwcIWEeIV4eWtzfnl7a3KDh4N6fG16eXl0fYB2bm+AgG90fHV3cXl9fW1+dW+DhYZ6gHJye3x1cG96a3N8bnaCgYF+fn99fXt9e3x9fH9/fn1/f4KCf4GDgYGDgYB/gICAfn9+f31/fn1/gH58fYGAfn6Ag4iFhoOFhYWFhoeFhYWFhYeHiIaEhoWHhoaFhIWFhIWFhomKh4WEhoWGhoWGhoSGhoaGhoWGh4eHhoaEhoWGh4iHhYeGhoOHhoWFg4SFhoWGhIaEg4SEhoSEgYODhIOFhIWEhYSGg4WGhYWEhIWHhoSEhYaFhX14hYOEhIOCgX5/fnt8e357fHx9f399fH9+gYB9f4F/f4GAfn5+gH5+f35+fX99fX5/fHt8f358fH+BiYaFhIaGhoWGhoWFhYWGhoeIhoSGhYeFhYWDhIWGhYSGhoaGhYSGhIWGhoaGhIeGh4eGhYeIiIiIhoSHhYaGiIaFiIeIhYeGhoiFhYaHhYaGhYOChYWGhYWDhYSEhIaEhoaEhYWDhoaFhoWEhoeGhISFhoOFhIKEg4OFg4OBfYB/e3t8fnt8fH1+fnx8fn2Afn1/gH5+gH99fXyAfX5/fn5+f3x8fX57fHx/fHt7fn+Ih4SEiIaGhYeGhYWEhoaGhoiHhIWGh4aFhIODhIaFhIeFhoaFhYaEhYaGh4eFh4aJiIaGiIeIiYiFhYiFhoeGh4aHhoeFh4eGh4WFhoeFhoaFgoOFhoaEhIOEhIOEhoSGhYWFhYOGhoWGhYSGh4WEhIWFg4SHhoOCg4SDhIJ+gYB8e31+e3x7fn59fHx+fX5+fX9+fX1+fnx9fH98fn58fYF/fHx8fXx8fH56e3t8foiHgoWIh4eGhoaGhISGhoeGiIaEhYSHhoSFh4OEhYSFh4SFhoaFhoSGhoeHhoaHh4mIhoaIh4iKiIWHiIWGh4WHhoeGh4WIiIeHhYaGh4WGhoSBhISFhoWFhISEg4SFhIaGhoWGhIaFhoaFhYaGhYSDhISDhIeDhIGChIWDgYCAgHt7fn18fHx+fXx8fH19fH18fn18fX18fHx8fXx+fXt8gX99fH18fnx8fHp6fHx9iIeChoiHhoeGhoaDhYaFhoaGhYOFhIaFhIiJg4GEg4SGhIaGhoaGhIeHiIiHh4eIioiGh4iHiImIhYiHhIaGhoeHh4WHhoiIh4eFh4eHhYaHhIKEg4SGhYeFhISEhISFhoaGhoaFh4WFh4WGhYaFhIOEg4OEh4GDgIKDhIKCgn+Ae31/fXx8fH59fH19fH17fHx7fHx9fXt7e318e359e3x/fX18fX1+fXx6ent7fHyIh4KGhoaGh4aGhYOFhoWFhYWEg4WChoSDiId/enqChYaEhoaFh4aEh4eIiIiHhoiKh4aHh4eIiYeFiIeFh4eGhoeHhYeGiIiHhoWHhoiGhoeDg4SEg4aGh4WFhISEhYaGhoaGhYaHhoaIhoaEhoWDg4ODgoOGgYN+goKDgIOCf398f39+fHx9f318fX18fnt7e3p7fHx8e3t7fnt7fXt6e358fHx8fX5/fXt6fHp8fImHg4aFhoWGhoWEhIWFhYWFhIOBhIGGhIKEhHyAhn+ChYWGhYWGhYSHh4iHiIaFiYqHhYeGh4eIh4WIhYaHiIaGh4eGh4aIiIeFhoeGh4WFiIOEhoWDhoaHhoWEg4WFhoaGhoaFhoaHhoeHhYOFhYOBgoKBg4WCg36BgoF/hIJ/fn5/fn98fH1/fXt9fXx+enp7eXt8fXt7e3t+fHx8fHp7fXx8fHx+fYF8e3t7e3x8iYeEhoSGhIaGhYSFhoWEhIOEgoCDgYaDgYJ/eoSMe4CEhYeGhoaEhIeIh4eHhYWHiYeEh4WGhoiGhYeEhoeIhoaIh4eHhoeIhoSGhoaHhYWHg4SFhIaGhoeFhYSDhYWGhoeGhoWGhoaFhoaEg4SFgoGCgYCEg4OCfYGBf36DgX5/f4B9f3x9fX59e359fH15enp5e3x9enp7e318fXx8enp9fHx9fH5+gHt7e3x+fXyIh4WGhYeEhoSFhYWFhYODgYOBgIKBhYJ/gH9/fXx7gYSFhoaEhYSEh4eGhoaFhIaJhoKGhIaGhoWFh4WHiImGhYiHiYeGhoeFhIaFhYeFhIeDhIWEiIaGh4WFhIKFhYaFhoaHhIWGhoWFhoKDg4WAgIGAgIOAg4B8gYB+foKAfYB/gn2AfH1+fX57fn18fHl6enl6fX15enp7fHt8e3t6e319fH18f35+fHt7fX59fIiGhYaGhoSFhYSFhYSDgoKAgoGAgICDgX5+foB5en2Ag4OFh4WEg4OHhoOEhYSChYiFgoSDg4WFhYWHh4aIiIaFiIeJh4aFhYWDhoSFh4OEhoSEhYSHhoWGhYaEgoWFhoaGhoaEhYaGhIWFgoKDhH9+gICAgYCDgHuBf31+gn5+gH6Af399fX59f3t/fXt6eXp6eXp8fXl6ent7enx7e3t7fH19fXx/fn18fHx/fnx7h4WFhoaGhoSFhIWDhYKBgICAgYB+f4KCfX1/f3t/f4KDg4WGhYSDg4aDgYOEgoCFh4WCg4GBg4SEhYaGh4eHhYWIhomHhYSEhIKFg4SGgoOFhISGhIeGhYWFhoOEhYSFhoWGhISFhIWDhYSAgIKDf35/f39/gIN/fIB9fX+CfYCBfn6Bfn5+fX1/e398e3p5enp5ent8eXp6e3t7fHp7e3t8fX19fYB9fXx8fYB/fXyGg4aGhYaGg4SDhoKFgYGAf3+AgH5/gYJ8fn9/foCAgoKChISDgoGChIGAg4KBgISFhIKBf4CCg4OEhYWHhoaEhYeFh4WGgoOCgoOCgoWBg4WEhYaEhoaHhoaFgoSEg4SGhYWDhIODhIKEhIB/goJ/fX5/fn5/hH57f3x8gIF9gYB9foN9fn59fX57fnt7enl7enl6ent5enp6e3t8enx8fHx+fn1/gXx9fHx9f4B+gIaEhYWEh4SEg4KGgoOAgYB+fn+AfX5/gnx9f35+fn+BgYKEg4KBgYKCf4CBgoCAgoWEgoB/gIGCgYOFhYeFhISGhoOFg4WBgoGBgoGCg4GChISEhYWGh4eGhYWDg4ODhIWFhIGDgYOChIODgH+AgX59fX5+fH6Dfnx+fHyBgH6Cf35/gnx/fn19fHx8e3t6enp6eXt5enp5enp6e3x5e317e35/f4GAfX59fX1/gICAhoSEhYSFgoSCgoSCgoCBgH59fn9+fn6AfX2Afn5+foGBgoODgoSHgYF+gICBf3+ChIOBf35/gIJ/goWEhYOCg4WFgoSBg4CBgIGBgYKBgIGEg4OGhYWHh4WEhIWCgoKDhYSCgYGBgYCFg4F/foB/fnx9fn18foN9e358fYF/gIN9fYCBf35/fXx8fH17e3p5enl5e3l6enl6ent7e3p7fXx8f3+BgoB+gH+AgH+AgIDKysrKysrKysrKysrLy8vLy8vLy8vLy8zMzMzNzc3Nzc3Nzc3NzczMzMvLy8vLy8vLy8vLy8vLzMvLy8vLy8vLy8vLy8vMzMzMzM3Nzc7Oz8/Pz9DQ0NHR0dLS0tLS0tLT09PT0tLS0tLS0tPT09TU1NTU09PT09PT09PT09PT09PT09PT09PT09PT09PT09PS0tLS0tLS0tLS0tPT09PT1NTV1dXV1dXV1dXV1dXV1dXV1NTU1NTT09PT09PT09PT09TU09PU1NTU1NTU1NTU09PT09PS0tLS0tPT09TU1NTU1NPT09LS0tLS0tLR0dHR0dPHhnNlYFtLWWdVTUZIQD03Nzg5Nzw8PDo8Oz42Oj04PDs6OTg3ODs7Oj87PTs8PD47P0E/QkJBQ0RFREE+PTw7QENDQUBDQ0FBR0hHSUtSwtXS09PT09TU1NTU1NTU1NTU1NXV1dXV1dXV1dXVysrKysrKysrKysrKy8vLy8vLy8vLy8vMzMzMzMzNzc3Nzc3Nzc3MzMzMy8vLy8vLy8vLy8vLzMzMy8vLy8vLy8vLy8vLzMzMzc3Nzc3Oz8/P0NDQ0NHR0tLS0tLS09PT09PT09PT09PS09PT09TU1NTU1NTU09PT09PT09PT09PT09PT1NTU1NTU1NTT09PT09LS0tLS0tLT09PT09PU1NTU1dXV1dXV1dXV1dXV1dXV1dXV1NTU1NPT09PT09PT09PU1NPT09TU1NTU1NTU1NPT09PS0tLS0tPT09PU1NTU1NTU09PT09PS0tLS0tLR0dHSzIxyZ2BcTVllUktHSz87Mzc4Ozg5Pj05PDpBOjs9Nzs8PDo6Nzg6Oz0/Oz88PTw/Pj9BPUFBPkNDREJAQT46Oz9DREFDRERCQklHSEhJTr7V0tPT09TU1NTU1NTU1NTU1NXV1dXV1dXV1dXV1crKy8vKysrKysrKy8vLy8vLy8vLy8vLy8zMzMzMzM3Nzc3Nzc3NzMzMzMzMy8vLy8vMzMzMzMzMzMzLy8zMzMzMzMvLzMzMzc3Nzc3Ozs/P0NDQ0NDR0dLS0tLS09PT09PT09PU09PT09PT09TU1NXV1dTU1NTT09PU1NPT09PT09PT1NTU1NTU1NTU1NPT09PS0tLS0tLS0tPT09PT1NTV1dXV1dXV1dXV1dXV1tbV1dXV1dTU1NTT09PT09PT09PU1NTU09TU1NTU1NTU1NTT09PT0tLS0tLT09PU1NTU1NTU1NTU09PT09PT0tLS0tHR0s+Sd2hfXk9XZ01LRks9ODc2NTk5OTw+OT88Qzk7PDc5PD07OTc5Ojw9QDs+PT47PD48PT5BQD5EQ0NDP0E9Ojs9QkNFQ0NEQT9FSEpJSky61dPT09TU1NTU1NTU1NTV1dXV1dXV1dXV1dXV1dXLy8vLy8vLy8rKysvLy8vLy8vLy8zLy8vMzMzMzMzNzc3Nzc3Nzc3MzMzMzMzMzMzMzMzMzMzMzczMzMzMzMzMzMzMzMzMzc3Nzc3Ozs/Pz9DQ0NDQ0dHS0tPT09PT09PT09TU1NTU09TU1NTU1NTV1dXU1NTU1NPU1NTU09PT09TU1NTU1dTU1NTV1dTU09PT09LS0tLS0tLS09PT09TU1dXV1dbW1dXV1dXV1tbW1tXV1dXV1NTU1NTT09PT09PT1NTU1NTU1NTU1NTU1NTU09PT09LS0tLT09PU1NTU1dXV1dTU1NTT09PT09PT0tLS0dHRmn5nYWJOVWpKSElLPzw6OTM3Njc2PTs+Oj06Ojo4ODo7Ozg4Ojs7PD46PT09Ojw/PD0/QkA/Q0RDRD5APT08QENEQ0JEQkQ+REhJSUtMttfT09TU1NTU1NXV1dXV1dXV1dXV1dXV1dXV1dXVy8vLy8vLy8vLy8vLy8vLy8vLy8zMzMzMzMzMzMzNzc3Nzc3Nzc3Nzc3MzMzMzMzMzMzMzMzNzc3NzczMzMzMzMzMzMzMzc3Nzc3Ozs7Pz8/Q0NDQ0NHS0tLT09PT09PT1NTU1NTU1NTU1NTU1NTV1dXV1NTU1NPT1NTU1NTU1NTU1NTU1dXV1NXV1dXV1NTU09PT09PS0tLT09PT09PU1NXV1dbW1tXV1dbW1tbW1tbW1dXV1dXU1NTU1NTU1NTU1NTU1NTU1NTU1NXU1NTU1NTT09PT09PT09PU1NTU1dXV1dXV1dTU1NTU09PT09PS0tLR0p+DaV9kU1hsSEhIS0A9Nzg0NzY6Oj87RDw8Ojw8OTg6OTo6Ojs8Ojo7OT49Pjk9QDs/QUFCP0JCQUM9Pz8+PEBCRUNDQkBBO0ZJR01MSbLY09TU1NTU1NXV1dXV1dXV1dXW1tbW1tbV1dXW1svLy8vLy8vLy8vLy8vLy8vLy8vMzMzMzMzMzM3Nzc3Nzc3Nzc3Ozc3NzczMzMzMzMzMzc3Nzc3Nzc3Nzc3Nzc3Nzc3Mzc3Nzs7Ozs7Pz8/P0NDQ0NHS0tLS09PT09PT09TU1NTU1NTU1NTU1NTV1NXV1dTU1NTU1NTU1NTU1NTV1NTU1dXV1dXV1dXV1dTU1NTU1NPT09PT09PT09PU1NXV1dbW1tbW1tbW1tbW1tbW1tbV1dXV1dTU1NTU1NTU1NTU1NTV1NTU1NXV1dXU1NTU1NTT09PT09PT1NTU1dXV1dXV1dXU1NTU1NTT09PT09LS0tSjiGxfZlJWakdIR0lBPjM2Njo7PDhDPEJBPjtBPDg5Ojw6Ojw8PDk8PTo7PD09PD89QD9AQT9AQUBCPD4+PzxCQ0NDRkBBQT1ISklOTUeu2NPU1NTV1dXV1dXV1dXV1dbW1tbW1tbW1tbW1tbMzMvLy8vLy8vLy8vLy8vLy8vMzMzNzc3Nzc3Nzc3Nzc3Nzc3Nzs7Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Ozs3Nzc3Nzc3Nzc3Nzs7Ozs7Oz8/P0NDQ0NHR0dLS0tPT09PT09TU1NTU1NTU1NTU1NTU1NTV1dXV1dTU1NTU1NTU1NTU1dXV1dXV1dXV1dXV1dXU1NTU1NTU1NTT09TU1NTU1NXV1dbW1tbW1tbW1tbW1tbX19bW1tXV1dXV1dXV1dXV1dTU1NTU1dXV1dXV1dXU1NTU1NTU09PT09PT1NTU1NXV1dXV1dXV1dXV1NTU1NPT09PT0tLWroprY2VSWGhMSkdJQjg0OTQ6Ozo5QDk+Q0U/PDw5OTk9Oj07PDw6PTw7OTw9Ozs/PUA9PT5AQD9CQT5APD05QERDQkFBQj48SEpLTU5IqNnU1NXV1dXV1dXV1dXW1tbW1tbW1tbW1tbW1tbWzMzR09PT09PT09PT09PT087Ky8vLzMzMzMzMzMzMzM3Nzc3Nzc7Ozs3Nzc3Nzc/Pz8/Pz8/Pz8/Pz9DQ0dHR0dHR0dHR0dHS0tHV2djY2NnZ2dra2tvb29vZ2dnZ2dna2tra2tra2tjW19fX19fX19jX19fX19jZ2NjY2NjY2NjZ2dnZ2NfX19fX19fX1tbW1tbX2tva2tra2tra2trb3NzX1dXV1dXV1dXV1dXW1tbX1tbW1tbV1dXV1dXV1dXV1dTU1dXV1dXV1dXU1NTU1NTU1NTU09PU1NTU1NXV1dXW1dXV1dXV1dTU1NTT09PT09PS1bqKa2hoUlhlSUlMTkA5OTo0O0A8Nz05QUM9QD89ODo6Ozk9Oz4/Ojs8PDo7PDo7Pj1APT8/P0FAQUE/QTw8Oz5BRENBREA9PElJSk1ORqPa09TV1dXV1dXV1dXW1tbW1tbW1tbW1tbW1tbW1szNhG1wcHBwcHBwcHBwcGqn493d3t7e3t7e3t7e3t3S0NDQ0NDQ0NDQ0NDQ0ci5ubm5ubm5ubm5ubq6t6WkpKSkpKSkpKSkpKSnhmBjY2NjY2NjY2NkZGRlhIuKioqKioqKioqKioemuri4uLi4uLi4uLi4uLepp6enp6enp6enp6enprG+vb29vb29vby8vLy9tIuKioqKioqKioqKiouHvebh4uLi4uLi4uLj4+Pi2NfX1tbW1tbW1tbV1dXV1dXV1dXV1dbW1dXV1dXV1dTU1NTU1NTU1NTV1dXV1dXW1dXV1dXV1dXV1NTU1NTT09PT09XDkXFrak5TYkxMVk08Ojo3Nz5DPzg+Oj8/QTw/QDc7Ojs7PTs+Pjo7PD48Oz07PT8+QDw/Pz1AQEBBPj88PjxAQUVCQkZAQD9HSEpLT0ae2tXV1dXV1dXW1tbW1tbW1tbW1tbW19fX19fX19fMzk4mKysrKysrKysrKysiivTr6+rq6urq6urq6uvp1dLS0tLS0tLS0tLS0tTEqaqqqqqqqqqqqqqqq6aGhIWFhYWFhYWFhYWFik4MEhISEhISEhISEhIRE0pUU1NTU1NTU1NTU1NPg6ejo6Ojo6Ojo6Ojo6OghoSEhISEhISEhISEhIKVrKqqqqqqqqqpqamprJtUU1NTU1NTU1NTU1NTS6ry6+vr6+vr6+vr6+vr6dnX19fX1tbW1tbW1tbW1dXV1dXV1dbW1tbV1dXV1dXV1dXV1dTU1NTV1dXV1dXW1tXV1dXV1dXV1dXU1NTU1NTU1NPUy5h2bGlKTl9NUlVNPjw8Nzs/Qz42Ojc+Pzs8QkA4PDk9Ozw6PD07PTs9Ozs9PD0+PT07QT08QUBBQT08Pzw7QEJDQURFPUFAQ0ZLS09GmNzV1dXV1dbW1tbW1tbW1tbW1tfX19fX19fX19fXzc5SKzExMTExMTExMTExJ43z6enp6enp6enq6unq6dXS0tLS0tLS0tLS0tLUxaqrq6urq6urq6urq6yoiIeHh4eHh4eHh4eHh41SEhgYGBgYGBgYGBgYFxpOWVdXV1dXV1dXV1dXU4WopKSkpKSkpKSkpKSloomHh4eHh4eHh4eHh4eFl62rq6urq6urq6qqqq2dWVhYV1dXV1dXV1dXV0+r8erq6urq6urq6urq6unZ19jX19fX19fX1tbW1tbW1tbW1tbW1tbW1tbV1dXV1dXV1dXV1dXV1dXV1dXW1tbW1tXV1dXV1dXV1dXU1NTU1NTU1NGcenFpSlRdT1JVTkQ+Pzs/QEA4Ojs4PDw8PD46Ojs4Ozk5Ozw7Ojw5Ozs8Ozo9PT0+PUE/Pj8/Pj08PT88PEFBQ0FERTw+QEVGSktNRpPc1dXV1tbW1tbW1tbW1tbW1tfX19fX19fX19fX183PXDk9PT09PT09PT09PTWT8Ofn5+fn5+fn5+fn5+bV0dLS0tLS0tLS0tLS08Wtrq6urq6urq6urq6vq46NjY2NjY2NjY2NjY2SXSInJycnJycoKCgoKCcpWmNiYWJhYmJiYmJiYl6MrKmpqampqampqampqaeQjo6Ojo6NjY2NjY2Ni5yxr6+vr6+vr6+vr6+xoWNiYmJiYmJiYmJiYmJbr+/p6enp6enp6enp6enn2djY2NjY19fX19fX19fX19fX19bW1tfX19fW1tbW1tbV1dXV1dXV1dXV1dXV1tbW1tbW1tbW1tbV1dXV1dXU1NTU1NTWo3txZElbYE5OVU9AQT89REI+Oz06OTs6PTw7PDs6OTg5OTs8Ozw8Ojo7PDo7QD08PTxAQTxBQTs7PEA/PD1CP0RDQ0U8PkJERkpMTEWN3NXV1tbW1tbW1tbW1tbX19fX19fX19fY2NjY2NjNzcXCw8PDw8PDw8PDw8PCydDPz8/Pz8/Pz9DQ0NDQz87Ozs7Ozs7Ozs7Ozs7NzMzMzMzMzMzMzMzMzMvJycrKysrKysrKysrKysfCw8PExMTExcXFxsbGxsvMy8zLzMzNzMzMzMzLz9HR0tLS0tLS0tLS0tLS0NDQ0NDPz8/Pz8/Pz87Q09LS0tLS0tLS0tLT09HMzc3Nzc3Nzc3Nzc3NzdTY2NnZ2dnZ2dnZ2dnZ2djY2NjY2NjY2NjY2NfX19fX19fX1tfX19fX19bW1tbW1tbW1tXV1dXV1dXV1dbV1dbW1tbW1tbW1tXV1dXV1dTU1NTU169/cF5GXmJQUVdOR0ZDQ0lBPz07PDo8N0BBPD04Ojo4OTg7Pzs8PDs7PDw8PD87PD46Pj44PkI8Pj1BPjw+QkBERUNAPD5APkNJSUtEh9zV1tbW1tbW1tbW1tbX19fX19fX19jY2NjY2NjYzs3P0NDPz8/Pz8/P0NTQ0M7MzczP09LSzs3P0s7Ozs7Ozs7O0dTPz9DU0s/Pz9PSz8/Pz8/Pz8/Pz8/Pz8/P0NDQ0NDR0dHR0dHS09PU1NTU1dXV1tbW1tfW1tbX1tfX19fX19fX19bW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tXV1dXV1dXW1tbW1tbW1tbW19bW2NjY2NjZ2dnZ2dnZ2dnY19jY2NjY2NjY2NnZ2dnZ2dnZ2djY2NjY2NjY2NjY2NjX19fX19jY19fX1tbW1tbW1tbW1tbW1tbW1dbW1dbW1tbW1tbW1tbW1tXV1dXV1NTV1di4gm9XSl9jUlFaS0hBQTxCPT07Oj4+PD4/PT0/ODk6OTk3OD48PD47Ozw7PDs/PT0+OTs7OT0+P0A+QD07OkI/QkNCPz0+QD5CRUdKQoDc1tbW1tbW1tbW19fX19fX19fX2NjY2NjY2NjY2M7Ozs7Ozs7Nzc3Nzsqfys3Nzc3QuYOEi8fTwJrLz87Ozs7O07udz9HIlKfS0ceSq9HOzs7Ozs7Ozs7Ozs7Oz8/Pz8/P0NDQ0NDQ0NDR0dHR0tLT09PU1NTU1NTV1dXV1dXV1dXV1dXV1dXV1dXW1tbV1dXV1dbW1tbV1dXV1dXV1NTU1NXV1dXV1dXV1dXW1tbW1tbW1tbX19fX19fX19fY2NjY2NjY2NjY2NnZ2dnZ2dnZ2dnZ2dnY2NjY2NjY2NjY2NjY2NjY2NfX19fX1tbW1tbW1tbW1tbW1tXV1tbW1tbW1tbW1tbW1tbW1dXV1dXV1dXYwIBuVU9gY1dZW0xMQ0A9PTs9Ojw9Qj5CQkA8Ojg5ODo6Ojc7Pz4/PDw7PDo5Pzw8PTg5PD9BPj09PUFAPTtBQkBCQz47QD9BQUlHSkF629bW1tbW1tbX19fX19fX19jY2NjY2NnZ2djY2dnOzs7Ozs7Ozs7OzdKpj63Rzs7Ozpu3tqSiwJOerNPOzs7O0rWVm7TRmqycsNGZrJqy0s7Ozs7Ozs7Ozs7Pz8/Pz8/Pz9DQ0NHR0dHR0dHS0tLT09TU1NTU1dXV1dXV1dXV1dXV1dXV1dXV1dXW1tbW1tXV1dbW1tbW1tXV1dXV1dXU1dXV1dXV1dXW1tbW1tbW1tbW1tfX19fX19jX19fY2NjY2NjY2djY2dnZ2dnZ2dnZ2dnZ2dnZ2djY2NjY2NjY2dnY2NjZ2NjY19fX19fX19bW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tXV1dXV1dXV18h/b1pTYWVeXVxPSkQ9QD8+PDc6Pjk/RD5AOTg3ODk7Ozw4OT89PTw9PD47OkE7OTs5OzxDQDw7PT5AQT49QkQ/QkM9PT8+Pz5ISUg/ddrW1tbX19fX19fX19fX2NjY2NjZ2dnZ2dnZ2dnZzs7Ozs7Ozs7Ozs/Inrym0tDQzsqgl36Cw6abr6fUz8/Pz9GfoKqvzZOInJ7EkoadnM3Pzs7Ozs7Ozs7Oz8/Pz8/Pz8/Q0NDR0dHR0dLS0tPT09TU1dXV1dXV1dXV1dXV1dXV1dXV1dXV1tbW1tbW1tbV1dXV1dXW1tbV1dXV1dXV1dXV1dXW1tbW1tbW1tbW1tbW1tfX19fX19jY2NjY2NjY2NjY2NjZ2dnZ2dna2dnZ2dnZ2dnZ2dnZ2djY2NjY2NnZ2dnZ2dnY2NjY2NfX19fX19fX19bW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1dbV1dXV1dfNiHNdWGloXl9gT0lGOkFAPj88PDk2P0I/Qjo2NDc6Ozo8Ojk+PD49PTs/PTxBPjw8Ojw8PTw6PEA9QEI+PkFCPUNDPT0+Oz9BRUtIQHDZ1tbX19fX19fX19fY2NjY2NjZ2dnZ2dnZ2dnZ2c/Pz8/Pz87Ozs7SrKWnqdXAvNLHnY+ey9PJipmq1M/Pz8/RxYeasde9yZiYxbzJl5nF0M/Pz8/Pz8/Pz8/Pz8/Pz8/Q0NDQ0dHS0tLS09PT1NTU1dXV1dXV1dbW1tbW1dbW1tbW1tbV1tbW1tbW1tbW1dXV1dXV1dXW1dXV1dXV1dXV1dXW1tbW1tbW1tfX19fX19fX19fX19jY2NjY2NjY2NjY2NnZ2dnZ2dnZ2tnZ2dnZ2dnZ2dnZ2dnZ2dnY2dnZ2dnZ2dnZ2dnY2NjY19fX19fX19fX19bW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbV1dXW0JB1W1tqaWFeXVNOSTxDQEE+QD46OEVAP0M6NzQ5Ojo5Ozs4Oz0/Pj49QT08P0A9Pjw8PDw8Oj1AQD8/PT5CQD9AQkA8QD0+QUVLRz9r19fX19fX19fX2NjY2NjY2NjZ2dnZ2dnZ2dnZ2tnPz8/Pz8/Pz8/QzJ2Nl6zQmpfKxZ6ynpbN1q2ZqtTPz8/Pz9anmbHV0pSWn87Rkpmhz9DQ0M/Pz8/Pz8/Pz8/Pz8/P0NDQ0dHS0tLT09PT1NTU1NXV1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbV1dXV1dXV1dXV1dXV1dXV1dXW1tbW1tbW19fX19fX19fX19fY19fY2NjY2NjY2NjY2NjZ2dnZ2dnZ2drZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2djY2NjY2NfX19fX19fW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1dXV1tKUcl5ea2tqZV1PTEc/RENDQDo9OzxCPD09OTY0Ojk5Ojo5Nzs/QDs8PUA8PEE+PD07PTw/PDo8Q0A+PTs9QD5CPkBBPkA9QD9GSUQ/ZtXX19fX19fY2NjY2NjY2NnZ2dna2tra2tra2traz8/Pz8/Pz8/P07GigJuvyaCjv8qcpYynrdiqmarUz8/Pz8/VpZmx2bCfw5varaO/ntXR0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NHR0tLT09PT1NTU1NXV1dbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1dXV1dXV1dbW1tXW1tbW1tbV1tbW1tbX19fX19fX19fX19fY2NjY2NjY2NjY2NjY2NjY2dnZ2dnZ2dna2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2djZ2djY2NjY2NfX19fX19bW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbSk3BgXnBoZmVaUUhHQkVDQEA3Ojo8Pjo8OTc2NTk6Njo8Ozc8QEA8Ojo9Ojw/Pj08OUA8PDo6OT9APT08PUBBQz9APz5BOz9ARkpCP2LS2NfX2NjY2NjY2NjY2dnZ2dnZ2tra29vb29vb28/Pz8/Pz8/P0M6fkGyclteqo9PSrqa1mJ/Vqpmq1M/Q0NDQ1qWZstbNipKex8uIlZ7I0tHR0NDQ0dHQ0NDQ0NDQ0NDQ0NHR0tLT09PT1NTU1dXV1dbW1tbX19bW1tbW1tbW1tbX1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tfW1tfX19jY2NfX19fX2NjY2NjY2NjY2NnZ2dnZ2dnZ2dnZ2dna2tnZ2dnZ2dnZ2dnZ2dnZ2dnZ2djY2dnZ2dnZ2dnZ2dnZ2NjY2NjY2NjX19fX1tbW1tbW1tbW1tbW1tbX19fX19fW1tbW1tbX0pNuYFxxZGdkWlVKQENGQ0FBODs/PD07PDw3NTU4OTY4Ozo5PDo+Pzw9PTk8Pz49Ojo+OTw6Ojg+Pzw9PTw+QEFDQT48PDpCRERKRkJd0NnX19jY2NjY2NjY2dnZ2dna2trb29vb29vb29vPz8/Pz8/Pz9G9n8O31pfA09HQ0srSzZeb1KqZq9XRz9DQ0NWlmrPWzdulmbPQ26OZtdXR0dHR0dHR0dHR0NDR0dHR0dHR0tLT09PU1NTV1dXV1tbW1tfX19fX19bW1tbW1tfX19fW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW19fX19fY2NjY2NjY2NjY2NjY2djZ2dnZ2dnZ2dnZ2dnZ2drZ2tnZ2dnZ2dnZ2dnZ2dnZ2djY2NjY2NjZ2dnZ2dnZ2dnZ2dnY2NjY2NjY2NfX19fX19fX19fW1tfX1tbX19fX19fX19fX19bW19GRbF1cb2doYl1PRj9ISEdFQDw8Pj48PT08NzU2OTk2OTs6Ojs4QD86PDw5PD49Ozs6Pzk/Ojs5PT49Pjw7PTxAQ0I/Pz47Q0ZGR0hEWc3a2NjY2NjZ2dnZ2dnZ2dna2trb29vb29vb29vb0NDQz8/Pz8/Pz5V+e6WS1KKa08ySl6ObodirmavV0pem09DWppq0zY6nmqCtkKeYnrvV0dHR0dHR0dHR0dHR0dHR0tLS0tLS09PU1NTV1dXV1tbW19fX19fX19fX19fX19fX19fX1tbW1tbW1tbW1tbX19bW1tbW1tbW1tbW1tbW1tbW1tbW1tfX19fY2NjY2NjY2NjY2NjY2dnZ2dnZ2dnZ2dnZ2dnZ2tra2tra2tnZ2dnZ2dnZ2dnZ2djY2NjY2NjZ2dnZ2tnZ2dnZ2dnZ2djY2NjY2NjY2NjX19fX19fX19fX19fX19fX19fX19fX19fX1tfPjGRWXnBrXGBgTkVITUlJT0M+OkI9PUBDOzU1Nzw6Nzo7Ojo7OT09OTo6OT0+Pz07OT47PDo8Ozk+PD47PD0+QENCPz5BPEFDR0ZGRVXJ29jY2NnZ2dnZ2dnZ2dra2tvb29vb29zc3Nzc3NDQ0NDQ0M/Pz9DR1aeZrcmjqL7KnbGdo7XZqZup2LirocfS16WbtLyjpaigr6eiqZ3Q09LS0tLS0tLS0tLR0dHS0tLT0tPT09PU1NTV1dbW1tbX19fX19fX19fX19fX19fX19fX19bW1tbW1tfX19fX19fW1tbW1tbW1tbX19fW1tbW1tbW1tbX19fX2NjY2NjY2NnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dra2tra2tra2trZ2dnZ2dnZ2dnZ2djY2NjY2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnY2dnY2NjY2NjX19fX19fX19fX19fX19fY2NfX19fX19fYzYZdV2JvZE9dVEtIRlNRS0xAPj1EPD9DRj01NTc7OTY6Ozo8PTo7Pzo6OTg6PT0/Pjs/Oz49Ojs5Pjs9PD0+QURCQD8+PzxAQUVHRURSxdvY2dnZ2dnZ2dnZ2tra2tvb29vb3Nzc3Nzc3NzQ0NDQ0NDQ0NDQ0NO5gL3Tm5bP1LWLkZ/T1LyBu9TOlKDT0dS1gsTVnZKNutWako6+1tLS0tLS0tLS0tLS0tLS0tLT09PT09PU1NXV1dbW1tfX19fX19fY2NjY19fX19fX19fX19fX19fW1tbX19fX19fW1tbW1tbW1tbW19fX1tbW1tbW1tbX19fX19jY2NjY2NnZ2dnZ2dnZ2dnZ2tnZ2tra2tra2tra29ra2tra2tnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2NjY2NjX19fX19fX19fY2NjY2NjY2NjY2NfX2ct+WlVqaltMX01KTEpVTEZCPDw/R0VHS0g9NjU3Ojk3OTo7Ojw9OT45OTo4Oz0+PkE+PTk8PDo9Pj46PTk5Oj9FQUA+PT8/QkBHRURFUMHc2dnZ2dnZ2dna2trb29vb29vb3Nzc3Nzc3dzc0NDQ0NDQ0NDQ0NDQ0cHR0crI0tDUxLjS0tHSwtLQ08fM0tHR0cPU09O5x9XT07nI1dLS0tLS09PT09PT09LS0tPT09PU1NTU1NXV1dbW1tfX19fX19fX2NjY2NjX19fX2NfX19fX19fX19fX19fX19fX1tbW1tbW1tbW1tfX1tbW1tbW1tbW19fX19fY2NjY2NjY2dnZ2dnZ2dnZ2dra2tra2tra2tra29va2tra2tra2dnZ2dna2tnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dna2tnZ2dnZ2dnZ2djY2NjX19fX19fY2NjY2NjY2NjY2NjY19rHd1xSZ2laTlpOTFBRV0VKPz89P0FFTExBPTc3NTs4ODk5Ojs8Pjw+ODo6OTs+P0A9Pj46NTo6Oz0/Ojs5Ojw+QkJAPz8/P0FCR0RDRE683dnZ2dnZ2dna2tvb29vb29vb3Nzc3Nzc3d3d3dDR0dDQ0NDQ0NDQ0NDS0NDR0dDQ0dPU0dHR0dPR0dHS0tHR0tLU0tLS1dTT09PW1NLS0tPT09PT09PT09PT09PT09PU1NTU1dXV1dbW1tfX19fX2NjY2NjY2NjY2NfX19jY19fX19fX19fX19fX19fX19fX1tbW1tbW1tbX19bW1tbW1tbW1tfX19fX2NjY2NjY2NnZ2dna2tra2tra2tra2tra2tra2tvb2tra2tra2trZ2tra2tra2tra2tra2tnZ2dnZ2dnZ2dnZ2trZ2tra29ra2trZ2dnZ2dnZ2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjbwXNYVWlrU0xSTlBSWVRGSTw+Qz9BQkVLPj43ODY5Nzc4OTk7Oz0/QDw9ODk7Ozs/Pjw8OTU6PT47OTk7PD8/P0JCQT1BPUBBQkZCQkJLtd7Z2dra2tra2tvb29vb29vc3Nzc3Nzd3d3d3d3R0dHR0dHR0dHR0dDQ0NDQ0NDQ0dHR0dHR0dHR0dHR0dHS0tLS0tLS0tPT09PT09PT09PT09PT09TU1NPT1NTU1NTU1NXV1dXV1dXW1tbX19fX2NjY2NjY2NjY2NjY19fY2NjX19fX19fX19fX19fX19fX19fX19fW1tbX19fX1tbW1tbW1tbX19fX19jY2NjY2NnZ2dna2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tnZ2dnZ2dnZ2NjY2NjY2NnZ2dnZ2dnZ2NjY2NjY3LxvVFRsbExLUkpUUlVLRkQ6PkdEREFERjw/ODk6OTY5OTo3PD07PkA9PTc5Ojs5Pjs5OTY2Oj1AQT47PDk6Pj9DQT4/Qj0+QkNFQkFCSrDe2dra2tvb29vb29vb29vc3Nzc3Nzd3d3d3d3d0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0tLS0tLS0tLS0tLS0tLS0tPT09PT09PT09PT09PT1NTU1NTU1NTU1NTU1dXV1dXV1tbW1tbW19fX19jY2NjY2NjY2NjY2NjY2NjY2NjY19fX19fX19fX19fX19fX19fX19fX19fX19fW1tbW1tfW19fX19jY2NjY2NjZ2dnZ2dra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2trZ2dnZ2dnZ2djZ2dnZ2dnZ2dnZ2dnZ2dnY2Ny2a1NbcGtLVVdSXFFXSEQ+PEJKRT1ISj89PDc4ODo2OTg5Njs+PD1APDw1OTk8Oj87OTk0ODw9PUFBPD47Ojw+QD89PkE9PUNGR0I/Qkmq39ra29vb29vb29vb3Nzc3Nzc3N3d3d3d3d3d3dHR0dHR0dHR0dHR0dHR0dHR0dHS0M/U0M7P0tLT0tLS0tLS0tLS0tPT09TU1NTU1NTU1NTU1NTU1NTU1NTU1NTV1dXV1dXV1dbW1tbW19fX19fY2NjY2NjY2NjY2NjY2NjY2NjY2NjX19fX19fX19jY2NfX19fX19fX19fX19fX19fX19fX19fX19jY2NjY2NjY2dnZ2dra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tvb29va2tra2tra2tra2tra2tra2tnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dndsGRTYXJfT1pUV19RUkdCPUVJS0FBTEQ/Pzs5ODg5Mzg2ODY5Pj0+Pz06Njo7Pjs9PTo5Njg6PTtAQDxAPz0/P0I+PD48PEJFSElCPkNJpODa29vb29vb3Nzc3Nzc3Nzc3N3d3d3d3d3d3t7S0tLS0tLS0tLS0dHR0dHR0dPT0bm7zLqbnLrQyNPT0tLS09PT09PT09PU1NTU1NTU1NTU1NTU1dXV1dXV1dXV1dXV1dbW1tbW1tbX19fX19fY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjX19fX19fX19fX19fX19fX19fX19jY2NjY2NjY2NjZ2dra2tra2tra2tra2tra2tra2tra2tra29va2tra29va2tvb2tra2tra2tra2tra2trb29vb29va2tra2tra2tra2tra2tra2tra2tnZ2dnZ2trZ2dnZ2dnZ2dnZ2dnZ3qpfVWBuW1VZUVpeT0xHQ0ZNSUZEREk7QUE7PDg4NjU4Njk4Nzw/QT89Ojc8Pz48Pz87OjY4OD09QEE9QD5BQD1AOjs6Pj1BRUdKQkBDR57h29vb29vc3Nzc3Nzc3Nzc3d3d3d3d3d7e3t7e0tLS0tLS0tLS0tLS0tLS0tO+wMqaoKKViJGeqpOpz9TT09PT09PT09PU1NTU1NTU1NTU1NTV1dXV1dXV1dXV1dXV1tbW1tbW1tbX19fX19fY2NjY2NnZ2dnZ2dnZ2dnZ2djY2djY2NjY2NjY2NjY2NjY2NjY2NjX19fX19fX19fX19fX19fX19fY2NjY2NjY2NjZ2dna2tra2tra2tra2tra2tra2tra29vb29vb29vb29vb29vb29vb29ra2tra2tra2tra2tvb29vb29va29vb29vb29va2tra2tra2tra2tra2tra2trZ2dnZ2dnZ2dnZ2d6iXFVeblheXU5aUFROQ0NMSUlJRkpEPEFBPDs4NzY3OTc3OTk9P0E/PDo5QD88PkI/Ojg3NzY9P0BAPUBBPz88PTs7OD48P0VJSEE/Q0aX4dvb29zc3Nzc3Nzc3N3d3d3d3d3d3t7e3t7e3tPT09PT0tLS0tLS0tLS0tTIlZyum5m1iX2TjIKBhMTV09PT09PT09PU1NTU1dXV1dXV1dXV1dXV1dXV1dXV1tbW1tbW1tbW1tfX19fX19fX2NjY2NjY2dnZ2dnZ2dnZ2dnZ2dnZ2NjY2NjY2NjY2NjY2NjY2NjY2NfX19fX19fX19fX19fX19fX2NjY2NjY2NjY2dnZ2dnZ2dna2tra2tra2tra2tra29vb29vb29vb29vb29vb29vb29vb2tra2tra2tra2tvb29vb29vb2tvb29vb29vb2tra2tra2tra2tra2tra2tra2tra2tra2tnZ2dndmlpYYW5ZYVdPV01QRUJETElNS0ZJRT5CRDk4ODY3OTc1Njk4PT1BPjo4OT4+PD9APzw1Njc2PD4/PjtAQEA/Pj4/Pjs/PkFCRkdCQENIkeLb29zc3Nzc3d3d3d3d3d3d3d7e3t7e3t7f39/U09PT09PT09PT09LS0tLTz6h+kayPko6MhoCIiYSQo8rU09PT09PU1NTU1dXV1dXV1dXV1dXV1dbW1tbW1tbW1tbW1tbW19fX19fX19fX2NjY2NjY2dnZ2dnZ2dnZ2dnZ2dnZ2dnY2NjY2NjY19jY2NjY2NjY2NjY2NjX19fX19fX19fX19fY2NjY2NjY2NjY2NnZ2dnZ2dna2tra2tra2tra2tra29vb29vb29vb29vb29vb29vb29vb29ra2tra2tra2tvb29vb29vb29vb29vb29vb29va2tra2tra2tra2tra29vb29ra2tra2tra2tna3JJaWWNuWlpSVV5QTDxAR05IUklIRT47SEY4OTc1Nzg3NTg5ODs+Pj07ODlBPj1AP0E+NzU5Njs+QUI/P0BAQUI/Pj8+QUBEQUZIQj9FSozi3Nzc3Nzc3d3d3d3d3d3e3t7e3t7f39/f39/f1NTU09PT09PT09PT09PWtaWaiIuQhYCFi4iBg4qLf4bC1tTU1NTU1NTV1dXV1dXV1dXV1dXW1tbW1tbW1tbX19fX19fX19fX2NjY2NjY2NjY2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2djY2NjY2NjY2NjY2NjY2NjY2NjY2NjX19fX19fX19fY2NjY2NjY2NjY2dnZ2dna2dra2tra2tra2tra2tra2tvb29vb29vb29vb29vb29vb29vb29vb29ra2tra2trb29vb29vb29vb29vb29vb29vb29vb2tra2tra2tra29vb29vb29vb29vb2tra29uIWltnalxYTFpfVkg6TEhMSkpDREVDQExINzo3Njc4ODU4Nzg5PDw7Ozk4QD89Pj8/PDY3PDQ3P0JCQUBAPz8/QT09P0A+QEBGRT09REuI4tzc3Nzd3d3d3d7e3t7e3t7e3t/f39/f39/f39TU1NTU1NPT09PT09PUxZKCg4WGfYGCfXx5foGCg36k29bU1NTU1NTV1dXV1dXV1tbV1tbW1tbW1tfX19fX19fX19fX19fX19jY2NjY2NjZ2dnZ2dnZ2dna2tnZ2dnZ2dnZ2dnY2NnY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjX19fX19fY2NjY2NjY2NjY2dnZ2dna2tra2tra2tra2tra29vb29vb29vb29vc3Nzc3Nvb29vb29vb29vb29vb2tra2tra29vb29zb29zb29vb29vb29vb29vb29vb29va2tvb29vb29vb29vb29vb29vb2tvZgFpebWhaU0ldW1hKRE1ISlNMR0ZBQD9KQjg7NjY5OTc1ODY4Ozo7Ojw5OD09O0A9Ozo2NTw3Oz1CQEFBPD49QEE9PEA/Pz5CREU+PERLg+Lc3d3d3d3d3t7e3t7e3t7f39/f39/f39/f39/V1dTU1NTU1NPT09PT2LKEkKh9g3l2hIh/e3d5gn5+i67A1dTU1NXV1dXV1tbW1tbW1tbW1tbW1tfX19fX19fY2NjY2NjY2NjY2NjY2NjZ2dnZ2dnZ2dna2trZ2dnZ2dnZ2dnY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2dnZ2dna2tra2tra2trb2tra2tvb29vb29vb29vc3Nzc3Nzc29vb29vb29vb29vb29va2trb29vb29zc3Nzc3Nvb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vc1nlcWmxmWFJPYFFSQUhHSkZYTEZAQENDSz87Ozc4ODc2NTc2ODo5PDw6PTs/PTs9Pjw7ODg8OT0/QkFCQzw8P0FCPj1BQkNCREVDQDtDTH3h3d3d3d3e3t7e3t7e39/f39/f39/f39/g4ODg1dXV1NXU1NTU1NPU0ruen3WKeXuIgICChYGDcnOAhYOMrNfV1NXV1dXW1tbW1tbW1tbW1tbW19fX19fX2NjY2NjY2NjY2NjZ2dnZ2dnZ2dnY2NnZ2dna2tra2trZ2dnZ2dnZ2djY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2dnZ2dna2tra2tra29vb29ra2trb3Nzc3Nzc29zc3Nzc3Nzc3Nzb29vb29vb29vb29rb29vb29vb29zc3Nzc3Nzc3Nvb29zc3Nzc3Nvb29vb29vb29vb29vc3Nzc3Nzc3Nvb29vb3dByXV9wZVdLUGNPS0JHQ0pIS0ZBPEE9SFBBOjo3Nzg3Njc4Nzw6OD09PD47QD88Pz07Ojs5Ojk8QEJAQkNAPUFAPz1AQkNDQUBAP0A7RU144N3d3d7e3t/f39/f39/f39/f3+Dg4ODg4ODg4NXV1dXV1dXV1NXU18h4i4V8goh6g4SBfoKCc2l0hYuGkJ3U1tXU1dbW1tbW1tbW1tbW19fX19fX19jY2NjY2NjY2NjZ2dnZ2dnZ2dnZ2dnZ2dnZ2dra2tra2tra2dnZ2dnZ2dnY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2dnZ2dna2tra2tra2tra2tvb2tvb3Nzc3Nzc3Nvc3Nzc3Nzc3Nzc29zb29vb29vb29vb29vb29vb29vc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc29vb297KalxjcWVST1heSz9HTElPS0VAPkFCP0lPPjk6NzY7NzY6Ozc7Ojg6PDw+Oz09Oz48Ojs4OTo4OUFCQkFAQDtAQj06PkFCQz8+PT4/PUZOdN/e3t7e3t7f39/f39/f4ODg4ODg4ODg4ODg4OHV1dXV1dXV1dXV1s6dhpl+f5OTin+CgXx9gnNxm4mAgoOJwNnat7TQ19bW1tbX19fX19fX19fX2NjY2NjY2NjY2NjZ2dnZ2dnZ2dnZ2tnZ2dnZ2dra2tra2tra2trZ2dnZ2dnZ2dnZ2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NnZ2dna2tra2tra2tra2tra29vb3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nvb29vb29vb29vb29vb29vc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3NvfwGNaW21gVlBTU0pETEhNSEk8PkFEQ0ZORDw8OTc5OjY4Ozk3PDk4OTw9OzlAPjpBPzw3NTc7ODpAQUVBPz45PUI/Oz1CQkI6Pj07PT5GTnHe3t7e3t/f39/f39/g4ODg4ODg4ODg4OHh4eHh1tbW1tbW1tbV1tjLioCHhYOXjHh7e3lvfYF1a3ebdHZ7eInHxpiMrdjZ19fX19fX19fY2NjY2NjY2NjY2NjY2NjY2dnZ2drZ2dna2tra2tra2tra2tra2tra2tra2dnZ2dnZ2dnZ2dnZ2dnZ2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NnZ2dnZ2dnZ2dna2tra2tra2tra2tra29vb3Nzc3dzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nvb29vb29zb29vb3Nzc3Nzc3Nzd3dzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3d3d3d3d3Nzc3Nzc4LdjV1lrYlJNVVFMSktGS0ZDQD5CQT9FTT4+PTg5OTo3OTo3NT03Nzo+PDs7Qjw5Pz05NjY4PTk6QEJGQD49PEBCREA9QD9DO0A9PD4/Rk9t3N/e3t/f3+Dg4ODg4ODg4ODg4OHh4eHh4eHh4dbW1tbW1tbW1tfVrYZ6d32rn3l4entzdH+Dfm9xe3l6c3t2k4qFgImkzdnY19fX2NjY2NjY2NjY2NjY2NjY2NjY2NnZ2dna2tna2tra2tra2tra2tra2tra2tra2tnZ2dnZ2dnZ2dnZ2dnZ2dnZ2djY2NjY2NjY2NjY2NjY2NjY2NjY2dnZ2dnZ2dnZ2dra2tra2tra2tra29vb29vc3Nzc3N3d3d3c3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc29vb29vc3Nzb3Nzc3Nzc3N3d3d3d3d3d3dzc3Nzc3Nzd3d3c3Nzc3Nzc3N3d3d3d3d3d3d3d3dzc3OGtYVtebGJSTVZMTUdLS0RGQkI7QT08RUxCQT44Ojk6Nzc5NjY6NTs+QDs9Oz89PD89Ojk5Ojw5PEVDRkA/PkBDQkQ9OT0/QT1CPz1APkdPadvf3t/f3+Dg4ODg4ODh4eHh4eHh4eHh4eHi4uLW1tbW1tbW1tfQmH+Qh4N9eoN2e3Vzenl6kKqmd3JyfoeHh4CAfoKEhJHJzNnX19jY2NjY2NjY2NjY2NjY2NjY2NnZ2dnZ2tra2tra2tra2tra29va2tra2tra2tra2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2djZ2dnZ2dnZ2djY2NnZ2dnZ2dnZ2dnZ2tra2tra2tra2tra29vb29vb3Nzc3N3d3d3d3d3d3d3d3d3d3d3c3Nzc3Nzc3Nzb29vb3Nzc3Nzc3Nzc3Nzd3d3d3d3d3d3d3dzc3N3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3NzhpV9UYm1iUE9TSUhHRkpJSUJBPkJCPEVFREA+ODo4Ozc3Ojc4ODY+Pz07PDk9PDo+PTs6Njc7NjpEQUY+Pz8/PkNBPzs9PT47REM/PjxIT2fZ4N/f3+Dg4ODg4eHh4eHh4eHh4eLi4uLi4uLi1tbW1tbW19jYyH52doN+fnR2eIaCenl1d5yhu6GEgoCAfoeKinx/gYaMnKjO2NjY2NjY2NjY2djY2NjZ2djY2NjY2dnZ2dra2tra2trb29rb29rb2tra2tra2tra2tnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dna2tra2tra2tra2tra2trb29vb29zc3Nzc3N3d3d3d3d3d3d3d3d3d3d3d3dzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3e3t7e3t7e3d3d3d3c35pbT2drXFBRUElDT0pLR0xHSkJAP0FHREBBPDg8ODg1ODk3Njc3QEA/Ozw5Pj04PTw8Ojc4PTk/RENGPkE/QkBDPzw6Pj0/PkVEPz07S1Fj1+Hf4ODg4ODh4eHh4eHh4uLi4uLi4uLi4uLj49bW1tbW19XB3LRueHJze3B6eXaFiIR7eH2AgZiljH98fnuRhZaLhoGDgY6Rvd3Z2NjY2NjZ2dnZ2dnZ2dnZ2dnY2dnZ2dna2tra2trb29va2tva2tra2trb29ra2tra2tnZ2dnZ2dnZ2dnZ2dna2trZ2dnZ2dra2tra2tnZ2dnZ2dna2tra2tra2tra2tra2tra2trb29vc3Nzc3Nzc3N3d3d3d3d3d3d3d3d3d3d3d3d3d3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3e3t7e3t7e3t7e3t7e3t7e3t3d3d6NWFdobllQUUtISlNJTUhNSUtBQz9DRkJBRDo6PDg2NDg4NzY2Nj8+Pjo8OTw7Oj09PDw4Ozw8RERERT4/PkI+Qj84PT8/Q0NCQEE+O0xUY9Xh3+Dg4OHh4eHh4eLi4uLi4uLi4uLi4uPj4+PW1tbW1teslLZ6eHJvd5V7dHuLgHh1bn6Fg3t/hYhyfH2bnI6JioJ+g32Hk5rH1NjY2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dna2tra2trb29vb29vb29vb2tra2tra2tra2tra2tnZ2dnZ2dnZ2dna2tra2tra2tra2tra2tra2tra2tra2tra2trb2tra2tra2tra2trb29vc3Nzc3Nzc3Nzd3d3d3d3d3d3d3d3d3d3d3d3d3d3c3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3N3d3d3d3d3d3d3d3d3d3d3d3d3e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3d7Zf1lgaGxcUUtHR09LTk5PTURGQkg/Q0hEREA6Ozs4NzU3Nzc4NThAPkA7PDk8Ozw+Ojk7OTk7OUZERUI8QD4/PEBDOz5AP0A/Qj8+OjtKVWPV4eDg4eHh4eHi4uLi4uLi4uLi4uPj4+Pj4+Pj1tbX19vKhYR3cXJubniVhHt4hH95dnB4c3eLkY6CdnN9ioaId3d1d4ODfIiIk8Pb2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dra2trb2tvb29vb29vb29vb29rb2tra2tra2tra2tra2tnZ2dnZ2dna2tra2tra2tra2trb2tra2tra2tra2tra2trb29vb29ra2trb29vb29vb3Nzc3Nzc3Nzd3d3d3d3d3d3d3d3d3d3d3d7e3d3d3d3c3Nzc3Nzc3Nzc3Nzc3Nzc3d3d3d3d3d3d3d3d3d3d3d3d3d7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7f0nVZaGlqVk5KSE1OR01EUElGSD9FPUZMREM+Ozs8OTc3OTY2OTU4Pj4/PTs8QDs9PDo3Ozc5OThHREVCPUE9Qj8+QDw/QUE/QEJAPjs8S1Ri1OLg4eHh4eLi4uLi4uLi4+Pj4+Pj4+Pj4+Pj49fX19fEknuJf29sbnV2foSBg4qGfnVybWVtiIaKjoR7c4OHint4e4OPj4GEioqxztrZ2dnZ2dnZ2dna2tra2tra2tra2trb29vb29zc3Nzb29vb29vb29va2tra2tra2tra2tra2tra2tra2tra2tra2tra2tvb29va2tra2tra2tvb2tvb29vb29vb29vb29vb29vb29zc3Nzc3Nzc3d3d3d3d3d3d3d3d3d3d3t7e3t3d3d3d3d3d3d3d3dzc3Nzc3Nzc3d3d3d3d3d3e3t7e3t7e3t7e3t7e3t7e3t7e3t7f39/f39/f39/f39/f3t7e4clsW2pqalNOR0hOT0VIRk1JSUA7RD5ISUA9PDo6Ojg2ODo3Nzk0OD08PT07ODw8PDw4Njc4OTo6RUJFQT9APEI/Q0M+PkNEQUBAP0A8PUtRYdPj4OHh4uLi4uLi4uPj4+Pj4+Pj4+Pj4+Pj5OTX19fZqXaFfnx3bHB3eXh8jH2KhYB3anN0d3p9bot7fnl6foR/gIGDfnh8foeGlrbT2tnZ2dra2tra2tra2tra2tra2tvb29vb3Nzc3Nzc3Nvb29vb29vb29ra2tra2tra2tra2tra2tra2tra2tra29ra29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb3Nzc3Nzc3Nzc3d3d3d3d3d3d3d3d3d3d3d7e3t7d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3t7e3t7e3t7e3t7e3t7e3t7e3t7e39/f39/f39/f39/f39/f39/e3uO9amFpa2lRTkZNTEtKWE1OR0FAQE9BRD9AOzw4OTk5Njg2NjY4NDs+PD07OTY6Ojk6OTU4OTg5OkJERj8+Pj5AQEBCPzxBQD88Pj9BOT5KT17S4+Hh4eLi4uLi4+Pj4+Pj4+Pj4+Pj4+Tk5OTk19fX2sqKhIB5c29tcXN1d4CUeHaAfHWHhXd1cnWgmXp7d3Z5doR0bWxue3iAmouTu9za2tra2tra2trb29vb29vb29vb29zc3Nzc3Nzc3Nzc3Nzc29vb29vb2tra2tra2tra2tra2tra2tra2tra29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vc3Nzc3Nzc3Nzc3d3d3d3d3d3d3d3d3d3d3d3e3t7e3t3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3t7e3t7e3t7e3t7e3t7e3t7e3t/f39/f39/f39/f39/f39/f39/f397js2lpbmloUFBPTExPUk9LU0Y/RURERD48PDg7ODc5OTU2ODY2NzM6Pjs+PTc6Pjk5OTk2Ojo4NzxDRUc/Pzs/PkA9PkE9Oz0+OUFAQDhBTlFc0OTh4eLi4uLj4+Pj4+Pj4+Pj4+Pk5OTk5OTk5NjY2NjauY6AenZ1bmpveHCBfWt0cnZ3hIV5h4d5lY55eXp1d3pza298gHx2fYh8gLLe2tra2tvb29vb29vb29vc3Nzc3Nzc3Nzc3dzc3Nzc3Nzc3Nzb29vb29rb29vb29ra2tra2tra2tra29va29vb29vb29vb29zc3Nzb29vb29vb29vb29vc3Nvb3Nzc3Nzc3Nzc3Nzc3Nzc3d3d3d3d3t7e3t7e3d7e3t3d3t7e3t7e3t7d3d3d3d3d3d3d3d3d3d3d3d3d3t7e3t7e3t7e3t7f39/f39/f39/f39/f39/f39/f4ODg4ODg4N/f39/f4qpqa2hrZFNQT0ZQVFJOSFJLPkREQ0I7Ozk6Ojg2Nzg1NjY4ODg0Oz88Pzw5PDw3Ozo6Nzo6Nzo9Q0JDPUE+Pzw5PT5BQDs8PDtFQD47Q05TXNDk4eLi4uLj4+Pj4+Pj4+Pj5OTk5OTk5OTk5OTY2NjZ1p5vdntveHh2cG50d3BwdHBzb36Jc3qGhY2EenNtcoB6hn1vg5OBdnx9g4a13drb29vc29vc3Nzc3Nzc3Nzc3Nzc3Nzc3d3d3Nzc3Nzc3Nzc3Nzb29vb29vb29vb29ra2tra2tvb29vb29vb3Nzc3Nzc3Nzc3Nzc3Nzc3Nvb29vb29vc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzd3d3d3d3d3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3d3d3d3d3d7e3t7e3t7e3t7e3t7f39/f39/f39/f39/f39/f39/g4ODg4ODg4ODg4ODg4N/f3+KgbWhma2ZVVlJHUFFOS0xMRUJIRUc9OD08Ojo3Nzg2Nzc2NTY3NDg+PD09Ojg6OD46Ozc4Nzc6Oj5DRDtDQj49OD1AQUM/Pjw+RTw+PUJNUF/S4+Hi4uLj4+Pj4+Pj4+Pk5OTk5OTk5OTk5OTk2NjY3MB2doCCfnp4eHBsdXlya399bHNvdGdoaYB/aWl4c2d+iYl4cIKGe3d9foWKvN3b3Nzc3Nzc3Nzc3Nzc3Nzc3d3c3Nzc3N3d3dzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nvb29vb29vb29vb3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzd3d3d3d3d3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7f39/f39/f39/f39/f39/f4ODg4ODg4ODg4ODg4ODg4ODg4ODflGttZm5mU1NJUFlUTEhGTkZGRUJGPTs+PDs5Nzc4NTc5NjQ1NzU4PDs9Pjo6OztAOTs7ODc6OTlAQkE8QUE/Pzk/QEJFQ0FAQEM7Oz1ES01g1uTi4uLi4+Pj4+Pj4+Pk5OTk5OTk5OTk5OTk5NnZ2tmYc3uqhJaCcnR1dn14aGx8d2h4d25rcHR5gIJ3dHyBhIJ9c3CAin94gn95g8je29zc3Nzc3Nzc3Nzc3d3d3d3d3d3d3d3d3N3d3dzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nvb29zc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3N3d3d3d3d3d3d3d3d3d3d3d3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e39/f39/f39/f4N/f39/f3+Dg4ODg4ODg4ODg4ODg4ODg4ODg4ODh24tubWdzY1lRTVVbV0hDSUZOS0dCRD8/Qjo7OjY2NzU2NzY0ODc2Ozw7Pj86PDk8Qjg3OTo6Ojk6QUFCQUJDQEE+PT9CQ0NEQUJGOTg9REpOYtjk4uLi4+Pj4+Pj5OTk5OTk5OTk5OTk5OTk5OXZ2drcqHGCtXiRfnNsem6EgXaCfWtoan+DeHZ8dX2FhXRmcHl9d316gIqFe318foC03tzc3Nzc3N3d3d3d3d3d3d3d3d3d3d3d3dzd3d3d3dzc3N3c3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzd3Nzd3d3d3d3d3Nzc3Nzc3Nzc3Nzc3N3d3d3d3d3d3d3d3d3d3d3d3d3d3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e397e3t7e39/f39/f39/f39/g4ODg4ODg4ODg4ODg4ODg4ODg4ODg4eDg4ODg4ODg4tiFb3FrdWFWT1VVXE9ETUY+SkdKRUQ8P0I6PDk4Njg0NTY3NDc2NDk7Ozw7OD47PEE4ODo9OD04Oj09QEBAP0FCP0A+QENCQ0FBRTc2O0RMTmPa5OLi4+Pj4+Pj5OTk5OTk5OTk5OTk5OTk5OXl29ra3Z5sbnNxhY1ybXBuf391hH5rcnZ2enN4gXhzbnVwbWt2fHmFiIB/f392coODsd/c3Nzc3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3Nzd3d3c3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3N3d3d3d3d3d3d3d3d3d3d3d3d3c3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e39/f39/f39/f39/f39/f39/f39/f39/f39/f4ODg4ODg4ODg4ODg4ODg4ODg4OHh4eDg4eHh4eHh4eHh4OLXhW1xb3ZeUldTWlpRSkhDQFFAQkQ8OT9BOjw5NzU3NDU2NjQ3NTY9PDo9PTk+OjxAODo6PDY7OTs+PUJCQjtBQkBDQEBEREM8PUA3OjxFS01l3OPi4uPj4+Pj5OTk5OTk5OTk5OTk5OXl5eXl5dPOxsB+cWxveHt2b3VuanNzbZKGeG50dG5vdIZ/b2twboJ0bXZyfY2DdnF/d3mKgabf3Nzc3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3dzc3d3d3dzc3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3t7e3t7e3t7e3t7e3t/f3t7e3t7f39/f39/f39/f39/f39/f39/f39/f39/f39/f4ODg4ODg4ODg4ODg4ODg4ODg4ODg4eHh4eHh4eHh4eHh4eHh4eHi1oZucG1xYFJZUFdfWUpMTElSP0Q9OTtCRjs6OTc0NTY1NzU0NjY2Pj07Pz45PTk7Pjg9Ozo0ODtAQENCQ0FCRkE/Q0BBQkREOz0+OTs8QkxNZODl4+Pk5OTj4+Tk5OTk5OTk5OTk5eXl5eXl5eW5t7Woc3JscHd6dHd4bXFydXd/hHRyc2xsa3F8bnBudGuBf3GAd32Eg355gHNygYqg2d3c3d3d3d3d3d7e3t3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3e3t7e3t7e3t7d3d3d3t7e3t7e3t7e3t7f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f4ODg4ODg4ODg4ODg4ODg4ODg4OHh4eHh4eHh4eHh4eHh4eHh4eHh49WHcWxqbF5YWlVXYFZWUE9QTD1BOjs8RkE4Ojg3MzY1Njk2NTg1Nz89Oz8+OT04Ozw5PTs7NTo9Q0JCPENDREREQUE/PkJDQzw9Pjg5PENLS2PN0dnh1sjY4+Tk5OTk5OTk5OTk5eXl5eXl5eXltbW2q3J5cm59f3Z1d2hqaGlwb3Zta2tnZWZxdG15gG5teXd2iHhxa2podXV5dHV/wd/c3d3d3d3d3d3e3t7e3d3d3d7d3d3d3d3d3d3d3t7e3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3e3t7e3t7e3t3d3d3d3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f4ODg39/g4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4OHh4eHh4eHh4eHh4eHh4eHi4uHh4ePVhnFwY2lhV1NZV19MUk9STUtAPjg5O0E+ODc5NjQ3Njc6NjY2NDk+Pzo8Pzo/OTo6Nzo9PDk5PEFBPTtBQ0VDRkA+Pj5BRUQ+QEE3OD5GSEpesrW4wbm1u8jg5eXl5OTl5OXl5+fn5+fm5ebm5ra2tbWOfX5weoR1cnZnYmNlbGtyb2ZpbHZtd4Z9hXlsbHd4a3ZwfH14c3V5fHd2h7ng3d3d3d3d3d7e3t7e3t7d3t7e3t7d3d3d3d3d3t7e3t7d3t7e3t7e3t3d3d3d3d3d3d7e3t7e3t7e3t7d3d3d3d3d3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4OHh4eHh4eHh4eLi4uLi4uLi4uLi4eHj1Yd1bl5uY1pUU1hXS1NLSk1SR0E4Ozs+PDk4NzU2NTY2OTY4NjY5Pzw6PT07Pzo7Ozk8PDs5Oj4+Pjs8PUFEQkNBQEBBP0JDPDw9Nzs+REVKXrG1tLW2t7e2y9rJ3uXl3eDi3tXU1tPU4OPg39+2treuh3t/bnmNenJ1bWNobGxtaXR4enF5enqIh4N6aWh9cWRvcXyGgX55e318e4an2t7d3d3d3d7e3t7e3t7e3t7e3t7e3d3d3d3d3t7e3t7e3t7e3t7e3t7e3t3e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7f39/e3t7e3t7f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4OHh4eHh4eHh4eLi4uLi4uLi4uLi4uHh49aGdmxhb19dV1lcWlJQSEpXTEVHPUA9Ozs9OTY0NjU1NTg2NzY3OD87OT09PDw5OTw6Pjw6OTg+Qjs7Pj5AREBDRUFAQD0/QDw9PTU5PEJHRl2xtbW2uLm5ubq9uMPT0r3BwcC6u7y6u8TMxb/Dt7e3hGl1gX1ndYd5Z3Vxa2t5eHB3fH15bWl3e3h3bml1j4FwbHl4d3d9gXuGgnmAoNze3d3d3t7e3t7e3t7e3t7e3t7e3t3d3d3d3d7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t/f39/e3t7e3t/f39/f39/f39/f39/f39/f39/f39/f39/f39/f4ODg4ODg39/f39/f39/f3+Dg4N/f4ODg4ODg4ODg4ODg4ODg4ODg4ODh4OHh4eHh4eHh4eHh4eHh4eHh4uLi4uLi4uLi4uLi4uLi4ePXhXJrZ3RhW1hYX15TVVVRVUpMRj9JRDs5PTY2NDc3NTc4Nzc3ODk8PDo+PDg8Oj0+OTs8OTs5P0E8PT9DP0FARUJCQTw9Q0A6Pjw1NDlER0dasbW1tre5ubm5ubm3ubm4uLm5urq6urm5urm6u7e3uX9ucHN6b3B/eXNuc3Vsc3Z4cXFwb2tvcX6Bc2mHhIF9dHOHdW11hYmBgHJ2hafd3d3d3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7f39/f3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f4ODg4ODg4ODg39/f3+Dg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4eDg4eHh4eHh4eHh4eHh4eHh4eHh4eHh4uLi4uLi4uLi4uLi4uLi4uHj14lxa2xyW1dXXWBUUVVUUFJPSkNATUE9Ozk2NTM0NjQ2ODc3Nzk6Pjs8Pjs5PDo8PDk8PTw7PT0+PUNEREBDQkE/QD48PkE8OD06NjY6QkpIWLG1tLa2uLm5uLi5uLe3uLi5urq5ubi4uLi6uru3uKx7cnhxf3ZzfnBsbXpyZ29sbW50cHt3d3Jyd3pvhpJ2f3x8enZ5fH9zfYdyda3T393d3d7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e39/f39/f39/f39/e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f4ODg4ODg4ODg4ODg4ODg4ODf3+Dg4ODg4ODg4ODg4ODg4ODg4eHh4eDg4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4uLi4uLi4uLi4uLi4uLi4uLi49eHb2pxalVWV2FbT1FSUE5XSURESUo/Ojk6NzUzNDk1NzY2Nzg4Ojw7PD46PDo6PTw5PDw9Oz09PDs9REdEQ0E8PDw8Pj5AOzg8ODE1OkFGRVautbW1tre4uLm4uLi4uLe4ubq5uLi3t7i4ubq7t7mqcnB4d3x7e4J3aG5xam9qY2lyf21zcn54dHFsanaAeX2AgH91doB1a4qLgHaR1d/d3d7e39/f3t/f3t7e3t7e3t7e3t7e3t7e3t7e39/f39/f39/f39/f4N/e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t/f39/f39/f39/f39/f39/f39/f39/f3+Dg4ODg4ODf4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHi4uLi4uLi4uLi4uLi4uLi4uLi4uPYhm1sdGVWUFxnWE1YU1JRWUVDS1BOOzk4ODc1NTM5NTY2NzY4Nzk+OT0+OTw5OTw7Njg5OTo8QEA9PkBGQEJCQDo+PEE9Pzs7OzYxNjxCR0RQqLa1tba2tre4t7i4uLi4uLm6ubi4t7e3t7e5ure2tIlyd3h9iXxwem99c2hqbGdnbHRscXd0cWx2c3Fxd3FyfHl4g3Z7d2mLkYp9kM7f3d7e3tvY2drZ297f39/e3+De39/f3Nvc3N3e3uDg3+Dg4ODf3t7e39jS397f397e3t/f3t7f3t/f3t7e3t7e3t7e3t7e3t/f39/f39/f39/f39/f39/f39/f4ODf4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODh4eHh4eHh4eHh4eHh4eHh4eLi4eLi4uLi4uLi4uLi4uLj4+Lj4+Li4uPj4+Pi4uLi4+Lk14NoZ3VkVlVkZVdKWllXW1Q9RU1LSD04NzU3NjQzOTQ0Nzc1Njc5PTo9Pjw9PDk7PDk5Oj45PD4/PkFBQ0FFRUQ+OzxBPjw5PDs3Mzc+REhFSqG2tbW1tbW2tre4uLi4t7e4uLi3tra2tra3uLm2traLfXpsbHp/cGx5dm5qaGdlcXp4b2lvb3B1c21zd4Fnb32CgYNyf3lqcHJ6f6ng393Zy8a/vb6/vsLN0tDW3tnc4NfQzcPCw8PH1dfT2dzX1NjX0MfExce9vM/Kz87Y3djO3N3c2t3T0dze39/e397e3t7e4N/f39/f39/f39/f39/f39/f4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4OHh4eLi4uLi4uLf4uPi4eLg4d7W29/Sw8rJx9Hb3OLk4eHg2dre1sbExcTN2trf5OHi4trX3st9aWZxYVleZWFNTFRLUlpMO0hNSEZBPTc2NjUzNDY2NDg3NjU2OTw7Pj46Pjk5PDk3OTs7Oj49PEBAQ0RCR0ZCQT08Q0A9OTw7Nzc3P0RGRkaZtrS1tbW2tra4uLi4uLi3uLi3s7W2t7a3t7i5tba3opdxb29waW50dnFmZWNrbmdvcm1mZ2tygWVvdnyAeGRzj39zaHFyaWVlbm+w39HFv7u5ubm5ubq6uru6vc3Gw8e/urq6uru7u8HCvcHFvby/vry7urq5ubq6ubm6w8XDucDDwby/ube/z8/U3tjc3t/g3tLa4N/f4ODg39/f39/f39/f3+Dg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODh4eDg4ODg4ODg4ODh4eHh4uLi4eDh4uLi4uHa2t3RwsPCu8XT1uDdydPDrrnAsaqrq6uwtLbJ0sXRxLG4v7Srq6usr7S0vMzE1c60tLureGxtbWBdYl9ZS1NVVFFQREBRTUhEPzo3ODU3MzE1NjQ5ODQ2Njo8Oz08ODw5Njo6ODg5NzU8PDw/QEFAQkRDQkE8PkI/Pz09PTc1OD5DRUNAj7a0tLW1t7i4uLi4uLm5uLe1sautr7Oxs7OztLS0tqaei2tue3ZxeXhnY2hfcXdha25vaG99b25ja2lseHdsa4Z+bHB6dm1scG95sca8uru7urm5ubq6urq6urq6urq6urq6urq7u7q7u7y7urq6ubq7u7q6urq6urq6ubi3t7i4t7e2tbW1tbi3u8e+w8XHzcS4wMnH0tzZ2d/e3uDf39/f4ODh4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODh3Nji4uLi4eHh4OHg3tfGxtHQztTe3tPO0t/SuLi8sq2trKysrrG+ua63rKipqamqq6urqqqqq6ysuKyqqqqrq6urra6urq6urryzrayrpHlub21fXl1dVE1SU1xUSkE/UElIPjg5NjgzNzMwNTczNzg1NzY2Ojw/PDg5Ozo6Ojg5OjY1OTs8Pj9EP0NFQkNCP0BAQT9APjw3ODc6QUVEP4W4tLS1tbe4uLm5uLi3t7SurKuqqq2urq6vsLGzs7WjcG5ucm1wg311aWFlaGZkY2Rxc21td25naW1tZXBzb29zcXN8h4F6dX11n7u6uru7urm5ubm6urq6urq6ubq6urq5uLm5ubm6urq6u7q5ubm5ubq6ubm6ubm4uLi3t7e4uLe3t7a2tbW2tra1tbW1tba1t7e3t7rBvrzGycrb3+Dg3tvd3d7h4tDW4uHg4ODg4ODg4ODg4ODg4OHg4OHi0768zNjd3OLg0dnbxL23sLCxsa+zu7uzsLS9s66urq2tra2sq6qqqqmpqKmpqampqqurqqqqqamoqampqampqaqqqqytrq6urq6urq6sraR4aWJxZmFZWlZRUk5cU0Y9QlJEQTc8OzY5NTY1NDU2NTg3NTY1Nzg7Pjw7OTk5Ojg3Nzk3Njg8Oz47RD8/Q0BBREE+P0M9Pjw+Ojo3Nz9DRj54srCztLW2t7i3trKurq2sq6uqqaqtraysrq+xs7S1t4xucnRqaIB5ZmpmZWxdaG5waGxxYmNmcoJ+dmhobGpueoaBhXx4cXF5gK+6ubq6urm5uLm5ubm5ubm5ubm5ubm4uLe3t7e3uLm5ubm5uLe3t7i5ubi4uLi3t7a2tre3t7e3tra2trW0tLW1tbW2trW1tre3t7e3t7e3tre4v8bP0MS+v8DE19e8ydra4OHg4ODh4eDg4ODh4eDb3t7Uzby3tre6wMDJxLfIvrKwsLCwr7Cvrq6ur7Cwr66urq6uraytrKurq6qpqampqampqampqKmpqKmpqampqKmpqKmpqqqrraytra2ur66trK2heWpjbWdiXFhRUFFLVEpCOklRP0E3PDk0OjU2NTQ1NTY4ODY4Njs6OTw9PTs6ODY2ODg6ODY3Pj09PT5BQUVCQkNBQUBBOj09Pz05Ojc9QUc8bKqmqKutsLGwrqupqKqrq6mpqamrrKytra2usLO0tbilgIdvaWdzdGZrcG1qZGxvcm5rbWNrcHyJhG5qbHx4Y3uKfnNqc25rcY+7ubm5ubm5ubi4ubm5ubm5ubq5uLi4t7e3t7e3t7i5ubi4uLe2tra3t7e3t7a2t7a2tra3tra2tbW1tba1tLS0tbW1tra2tra3t7e3t7i4uLe2t7a2uLm4uLe3uL6+uLq9vcfb4OHg2Nnd4eHg3dfKwcPCurm5uLe4uLi3tbS0tLKysbGxsLCvr6+vr6+vr6+vr66ura2srKyrq6yqqqmoqKmppqepqaehpaipqamoop+hoZyip6inqausrK2ur7Cwrq2unXdwbGphY2BZUU1RTFJGQzlNUEU+ODs3Mjc5Njc0NDM1ODg3OTc7OTo9PTw6Ojk3NDo5ODY1OD8/QEI9RENDQ0FDQEJBQDtAP0A/PDw6O0NIPWOopaWlpqioqKenp6ipqqmoqKipqqqsra6wsLCztLW1taWYdn5xZmt4cW9tZmVsaGNsZ2ZpaX11bWlvfXZ5hWZod294b3Fvcninu7m5ubm5ubm4uLm6ubm5ubm5ubi3t7W1tba2tre3t7e3t7a2tba2tre2tbW1tra3t7e2tbS0tLS0tLS1tLS0tLW1tba2tra2t7e3t7e3t7a2tre2tre3uLe2t7i4t7i4uLi4wMXTyry8w83PyMC9urm5ubq6ubi4uLi4t7W0tLSzs7KysrGwr6+vr66urq+vr6+uraysrKurrKysq6ehoJ6gn5udoaGdlpmkpKaon5mZmZmanZ+gn56fpKqtrq+ura2srJl1cGlrY2FeXVVOU0tSREQ4TktHQTo4NTI2OTY1NDczNzc3ODk3OTo7PT0+ODg4NzU6OTk1OD9AQEFEPkZBQkNAQkNCQT88QEJCQD0+OjpERj5cpqWmpqampqanqKenqKioqKenqaurrKytra2ttLS0tbekc311bnONf3JmanFjaW1jaGZobG51aV9jZ3VzdnpuZ3Bwcn56cYihu7m5ubm6urq6urm2s7a1uLm2trW1tra1tbW1tbW3tra3tra2tbW2tbW1tbS0tLa2t7e3tbS0s7O0tLW1tLS0tbW1tra2tra2t7e3uLe3tra2trW2tbW2tra2tra2tra3tra3uLi3uri4uLe3t7i5ubm5urq6urm4t7e3t7W1tLS0s7OysrKxsbCwr66urq6urq+vra2srKuppaSmpqScmZubmpmampmXl5eXl5aZm5iZmJmZm52en5+dnJ6gpKWko6OioqKQdG5jcGFeXltUU1RIVEo/PFFCRkM7ODYzNzo1NTQ4Mzg5OTc4OTc7OTs9Ozc6NzU2OTk4NTg+Pz9ART5CPz9DPzxBQUI/PT9EQT8+PTk9Q0Y/VaSlpqanqKeoqamop6ioqKioqKiqrKuqqaipq7W1tba5o3eKcXKHhnd0cGh5a2JjYWVsaW5zal9jZWNjZWprYmRqbHaXjX6ovbm3tre5u7u6uLWxrKurqq6wrKyrq62tq6uvsLGvr7CytbW2t7W1trW1tbW1tbW2trSvr7O0tLSvra6vsrW0tbW1tbW2t7e3t7e3t7e3t7e3t7Owsra1tLa2tre3tra2tbW1tra3t7e5uLi4t7e3uLi4ubq6urq5uLi3t7e1tbS0tLS0tLS0s7OysbCvr6+vr66vr62oo6KgnJqampqZmZqbm5qampqbmpmZmZiXl5aYmZmZmpycnZ+foJ+goKChoaCgoJ+fi3RuaXRdYGZeUlRLRFRJPUVTSEVCOzo0NDY5NDQ1NzM4ODg3ODk5Ojs7Pz04OjkzNTg5NjM5PT5AP0A6QEJCQkA/QEJCPz0+QUFCPz06PkVDQFGjpqWlp6inqauqqKaoqKipp6ioqKinp6ioqaq1tbe3t7KZtH99kIx1Z2lqbGZjYGNoZW94cGlicXx5cGpmZmRma3NqhYystrKwra2ttLeysLCtrKuqqaiop6ipqampqKinqKipqaeoqqurra2sqqytraysrq6traunpaSnqqyopKOkpamwsbGztbW2t7i3t7W1tre4t7e3t7Kppaasq6ivtLa1s7W3t7a1tbW2tra3t7e4t7a2t7e3t7m6urq5uLi3t7Wxs7S0tLKxsK6sq6yurrCxsK2rqqmqqKijnJqZmJmYmJiYmZmZmZmZmpqZm5ubnJybmZeYmpqcnJydnJ2foKGhoqKioKGgoKCfnop1amtuWVxhVktPREdVRz5PV0hEPTw4MzQ0ODQ1NDgyODk4ODk6Ojw5OUA8Njk6MzY3OTE0PD8/QEBBOkNGRUJBREJDQTo7P0FCQz9APUBEQ0BPo6empaemqKqqqqakpqenqKioqKimpqaoq6uttba3t7e4rbJ1cHuDdmBiaWtiZWZhZGdmfYh5bHKAfXFvcXhjbW5xZo+srKurq6ysra6urK2trKyqp6WmpaWlpqioqKiopaeoqKeoqKeoqKmqp6Wko6KioqOioKKioaKhoKChoaKjpKOjpaWlqLC0s7OzsKuqqaqztLa3trGopaOioaGipKiqqairs7Sxrq6xs7W2tra3uLi3tre3t7e3t7a2uLe0sa6ppqerrKmnpqWkpKSkpKWnqaajoJ+enZycm5uampmZmJeXmZmZmJiZmpqampqampqbm5mYmpydnZ2dnZucoKGgoaOjoqCgoKCfnp2FdGtsaFdYU0pHTUVITUdAU1dGRz09OTM2Mzc0NTU3Mzg6Ojo6OTw9OjpBPDY9ODM3ODgzNztAPz9AQDpCRUNAQkRDQT87PEBDQkNBQDxBQ0A9TqKnpqanp6mqq6mkpaWlpaaoqKippqanqKmpqrW2tre3t7izc2h7c2JnamtpaWJhZGloXV1tfHJma3J/fHR8bm1zc36gqamrq6uqq62trKusq6mpqKWjpKampqWmp6eqqaamp6enqKinp6iop6WkpKKhoaGhn56en5+fn56foKGho6Wko6OkpKSmp6enpqWkpaampqeqraumpKKhoaChpKWlpaempaeoqKalpaivtLa3trW1tra1tbOwrKupqa6rqKWlpqampaSkpaWlpqWkpKSkpaKhoaGgnp2bm5ucm5qamZiXmJiYmJiZmpmZmZmYmZmZmZqZmZydnJycnJybnJ+fn6ChoaKgoKCfnZ2cgHNrbmReU0pITUZETEtFRFFTQ0c9PDgzNjI4NDY0NjQ4OTg6Ozk7Pjw5PTs5PTczNTk2NTY8QD0/QD88P0JDPkJCQj89Pj5CQ0FFQD86PkVAO0+jpqWkpqeoqaelpKWlpKWnp6eoqKanp6alpqa1tba2trW2uYptcW1vfHxxZ2pmYGFsYFROW2hqbm9tgYJ9cWdxdn6aqKeoqqmpq6urrKqqqqimpaWkoqOlpqalpaWmqaqppqWjpKWmpqSko6Kio6Khn5+fnp6cnJycnJ2dnJ2en6CioaKjo6KhoqKkpaSioqOjpKSjpKSko6Ggn6GipKanp6ipqaelpaSipKSlqK2wsKyrqqusqqmnpaWmpaWlpaalpqioqailpaWkpKSlpKOjpKOioaGhoqKgnp2cnJubm5qZmJiYmJmam5mXl5eWlpeXmJiZmpqcm5qampubm5ucnJ6goKGgnp6enpycm356bnJiXlNNSlBFRk5NQkBPRT5JOz01MzYzODM2Njc1Ojs4OTs5Oj49Ozo5OT03NjY5NjU2PkI+PkE/PT5DQT5DQ0BAO0BAQkJCRUA+Oz5FPzxQoKSjpKOjo6SkoqSlpaSlpqamp6empqalpqaltLW1tbS0tbiBaHx9ZXOCemxwdWFfY1ROT1FbaGxpbGxxbW5xbnScoqSnqKioqauqqqqqqaempaSjo6OjpKSlpqalp6ytqaShnp2epKShn56foKCdnJ2dnJycmpqam5ucnJubm5ydnp6foKChoJ+goaOioKGjpKSjoqSlpaWkop+go6SkpKapqainpaGdnJ+jpaipqainqKioqaempaWkpKSlpqampqampqenpaWko6Ojo6KioqGhoqKhoqOkop+enZ2cmpubmpqZmJeXmJaWlZSUlJWVl5iYmpubnJuampqam5ucm5ucnp+fnpucnJyam5p/fnF0YFtUTUdNSEZMSj8/TkM8QDs8NDM4Mzc0NzY3ODs9ODo6OTk7PTs7ODk9Njc4OTU4OD9APT9BPjs9RD89REA/PzpAQUE/QUVAPjw8Qz88Tp2ioaKioKCipaSkpKWlpqenp6empqampaampbW1tbS0tLS3jHalsXdmc3Jvc2xjZGlYT1JRT09dgG1kYFptkZGSoqKjpaampqenqKiop6alpaOioaGhoaKjpaempqesq6emoJ2cm6Ghnpubmp2cmZiam5qampmZmZubm5uampqampucnZ6goaCfnp+hoJ6foqOko6Omp6inqKWioKGhoaGkpaWlpKCcmZmbnqOmpqampqanpqempaOlpKWlpqiop6enpaWlpaWkpKOjo6KhoqKioqKhoaKjo6Kgn56enZybnJubmZaUlJSTk5OTk5SUlJWWl5qam5ubm5qZmZqanJ2dnZ2dnZuampqamZqXf3dvc11aTkhKTkdFRklERU5APD09PDQ1OzQ2NDY1Njc5Ozg5OTg5OTw7PDc6Ozc4ODg1ODg/Qj9BQTw+P0A8PEJAQT49QT4/Pz1CQUA6OkA8PE+doqGfoJ+dn6OkpKSlpqeoqKenp6ampqampqW1tLS0tLS0tbSXtqd1Znh2Y2xjY2VjW1JTU1JNXqCMeFhodpajnp6hoaOjo6OjpKSlpqalpKSioaGko6OjoqOlpqamp6enp5+bmpuioJqWl5Wam5qXl5iZmpqYmJqampqbm5qZmZmenZ2goqOjo6KkpKWinqGhoaKjpaampaSjoaCgn5+hoZ+goJ2amJiZmpygpKOjpKWmp6alpaOjpKSkpKWnp6ampqampaWmpKOjo6SjoqKjpKGfoKGhoKGgoaCfn56dnZyamJeVk5KSkpKSkpOTkpOUlZaZmpqbm5qampqbnZ6enp2cnJybm5qamZmZlH10bHReWk9IRUdGQkVORT9GOzo+Pzs0Njo2OTM2NDY4ODo4OTc4ODo8Ozw5Ozs6OjY3ODk5Pj9APjw9QD5AOjlAQT89QT8/QUE+QUE/Ojk9PjpQnaCfnJucnJufoqOlpaWlp6iop6ampqanpqantLS0tLOysrGwsK2rkHiGj36bmn93Yl1TUlFRTGKgootaiKCgn52YmZycnZ2eoaGgpKenpqWkoqGjp6alpaOipaampaanpqagm5mboaCXkpOSl5qcmpeXl5iampmampqam5qYmJmaoKCgoKGfoaKipKamop6gn5+goaOko6Khn56enpyanZuZmpqZmJeZnqChoaKioqKkpaWmpKSkpKKioqKkpaWlpaWlpaalpaOko6KioqGgoKGgnp+fn5+fnp+foJ+cm5qZl5WUlJSTkZCRkpKSkpKSk5SVl5iZmpmZmpqam5+fnp2cnJycmpmZmpiXl5F8cmdxXl1QRj9BRD9KT0JCRjhDRT4+OTg7Nzc0ODQ1OTo6Ozk3OTo8Ozo8PT48PDo2NzY5OD4/QT47Pz49PDg6PkFAQUE/P0FCP0RBPjo4PkE8U5ycm5uampycnaGio6KjoqSmp6alpaampqSjo7KysK2rp6amp6alpqiln6iop6qnoXmEXFFST0xcnKCAYpmgnp2clZOVlpeZmp2dnqGmpqampKOioqanp6ajpaampaWmp6amop6cn6GgmJKRj5SXm52YlpeWmJuZmpqampqZl5iam6Ghn56fnpybnJ6goJ6dn56fn6Cio6SjoqCfnp2ZlpeXl5iYmZubnqKioqKioqGio6WlpKOio6SioaGhoqOkpKSko6SkpKSioqKhoqGgn5+gnp2enp2dnZ2dnp6em5mYl5WTk5SUk5KQj5GSkZKSkZKTlJaXl5iYmZqampyenZ2dnJubmpiYmpmXlZaNempmamBiTkY+P0A9SkVAQ0A7QEE8Ozs5Ojc2NTg0Njc4OT04ODs6Oz87Ojs8Ojk6Nzc2ODs8Oz08Ojo8PTw3Oz5DQkRDPz1BQ0FEQT88OkBCO1eZmJqamZmam5ucnp2foqKhoqSlpKSlpqSioJ6op6alpqWlpaemp6ampqakpaanqKehqXJOUU1KVJahenKanJyenJeVlJWWmJiXl5qeoqKhoqOkpKOjpqalpKanpqWlpqempaOgoKGhn5mSlaSampmenJaXl5eZm5ycnJqamZeZm5uen52cnZyZmZqcnZydnp6fn5+hoaCgoaKgn56bl5WVlZeanZ2fn6GhoqKio6OhoaCgoJ2cnaGioqOkpKOioaSlpKOko6SjoqKioqKhoaGfn52cnZ2cnJ2dnJ2enpqXlpaVlJOTkpKSkpCRkpKSkpGSlJWWl5iYmJiam5ycnJycnJ2cm5mYmZiWlJWXi3hsY2RiZFFHQT1DO0tIRDo7Ozw+OTo6OTo3Mzc5NTo4ODg8OTg7OT09Ozo7Ojk8PDc2NDc/PDo9Ozw/Pjw7ODxBQ0FDQkI+P0NAQkFAOj9APztZmZiampqam5ubm5ydoKGhoaGhoqKioqKhn5+dpKWmpqenpaWmp6ampqWkpKalpKSkpaaGUFJQT0+PmHB6mpubnJ6cnJycm5ubmZiYm56dnp6foKOkoqGhoqOio6WkpaWlpKSjoqGhnZyalqmqnZuam56amJiYmJqcnpyam5iWmZybnJycnJydmpqbnJ2dnp6dnp6fn52cnJyhoaCblpWVlZacn6Ggn5+hoKKjoqOhnZuZlpaWlpicnqCip6ikoaCgoqOjoqKioKCgoJ+fnp+gnp2cm5ucnZydnJmanJuWk5KSkpKUk5KSkpKSkpOSkpKRkpSVlpeYmJiYmZqcm5qbm5ucnJqZmJiXlZWWl4d3ZGdoZGJNQ0U8RDlJSkU5Ojs9PTo6Nzg6NjQ3OTU8OTY4OTc5PDs7PDo6PDs6PDw4Nzg3Pj07Pj46Qj86Ojo/QURCQ0FBQD9EQUFAPjpAPj06W5qYmZqbmpubm5uen6CgoaKioKCgn5+enp2dnKWkpaanpqWlpqakoqKio6Oko6Kjo6KnllRYVVJOZ21rgZ6am5udn6Cgn56enp6dnJ2dnJ6enp+goaCfn5+goKGipqSjpKSkoqGhnpuamap9fpyZmZienpiYmZmam5qWlZeWlZicnJ2cm52dnpybnJ2cnZ6bmJqeoaGdm5udoKKhmpWVlpaZoKKfnZueoaKjop+em5eXlJKSlJeYmZ2goqenpaGgn56goaGioaCfnp2cnJubnJubmpqZmpydnJmXmZaVk5GQkJCPkZKSkpKSkZKTk5OTk5OTlJWWlpeXl5manJubnJucnJqamZeXlpaVlZSEcmZsYmRbREJMPT84RktCPEA+Pj05Ozk6PTg1ODg2Ozg1Njo4PDw7Ozw8Ozk8Oj09OTU4Nzw5PD88OkE/Ojo6QEBDQkRBQ0A/Q0FAPj08QD09Ol+al5mamJeYmpycn5+foaGhoJ+fn56foKCenZ2lpKSko6OioqOjoZ+foaGipKOio6SiradXXl1UV19ua42dmpqbnJ2dm5ucnZ+enZycnJydnZ+goKChoaGgoKGgoLG1pKCioaCenJuamqKXUIOcm5yZnJ6ZlpaWl5eTjo6QlJabnJuam5udn52cnJycnJ6dlpSZnJ+in5ycnZ+hoJuXl5mZmpycnJubnZ6fnZqXlpaWlJOTlJiampqfoKGmpqWgn56fnqChoaCenJubnJybm5ybm5qZmJmZmZmXl5iVlJKQkJCQj5CSkpKSkZGTk5aYl5STkpSVlJWWlZaZmZmam52cnJyampmXlpaWlpaQgG9vZV5gV0BKSDg/N0lFP0VBPD07Ojo8Ozs3NTs4Njs3NDY6Oj47Oj0+Pj07Ozs+Ozo4Ojk5NkBBPTo8PTo6OT9BQ0JERUM+P0FBPz8+Pj89PDtgl5WXl5aVl5mbnqGhoKGioqCenp6enqCgn52bpaWkpKSioKCfoJ+dnZ+hoqOjo6OkobCjXWVkYGFua4GenJubm5ubmZianJ2enJubm5ycnJ6ipKGeoKGioqKhoKGnkrGin5+enJmZmpuqYkyHnZ2em5manJiXlZWWkY6Nj5KYnZycm5ycnqCdnJucnJyempWVm56foZ+dnJyenp2cmpqampqampqbm5qXl5aTkpWVlpWTlZaam5qanZ6foqWjnp6fn5+en5+enZ6fnZycm5qbmpqbmpiZmJiYmJiYlZSTkZCRkJCQkZKTk5CRk5SYmZiVk5SVlZWWlZaXmZmXmZqenpyamJiXl5aWl5eYjX1ubV9lVlRFSzw3PjdSRUM+QkE4Ozw7OTg6ODY7Nzc6Njc5Oj0+Ojw8PT49PD06Pz06ODw9OTtAPj4/PT45OTs/QkNAQ0VDPT9DQj5AQD5APTw8YZWSlJWWlpeanJ6goKCgoaCgnp6enp6gn56em6WlpKSioJ+fnp2dm5mbnJydnp+gn56rmGNpbW5pZm2enZybm5ybmpmZmZqam5ucm5uam5ygo6SgnZ+en6ChoKCfqoF9rqKgnpuZmpqnjE5Tip+enpyZmJqamJiYmJKOj5OXnJ2bnJ2cnJycnZycnp6dnpqVl5ygoaGfnp2eoJ+cnJuampqbmpqYmpmVk5OTkpOWl5eVlJiYmZucnJydoJ+gnp6enp+fn56en6KjpKKgnp6cm5qam5uamJmZmJeXlpWUlJORkZCQkZKTk5OSkpOUmJmYlpWUlZaWlpaWl5iYmJiXmZqamZeXl5aXlpeWl4l4dmddX1dURUU5OTs8WT5AOEI/OTw8Pjk4Ozg6Ozc5OjU4OTs9PDk9Oz0+PD0+Oz8/Ozk+PDw+Pz5AQUE9ODc7QkNFP0FFQz1AREJBQEQ7Oz47PGKWk5SUlpWUlpiYmZubnJycnZ2cnJ2en56dnJqkpKSkoJ+enpybm5qZmJiYmZucnZ6cpolla3R4bVuFop2dnJydnJqbmpqampydnZ2bmpuboKKinpucnZycnJ2enqKXWYmtnpyZm5ydq2pVVYqenZ6cm5qanZqam5yVkZOXm52dnJ2fnZycnJycnZ6fnp+cl5idn6GhoJ6cn6CfnJubm5qbmpmZmZmZl5WWlZaYl5eXlpaYmZuenp2dn6GhoJ+fnp6fn5+dn5+hoqKhoZ+fn5yZm5qcnZuampmXlpaYl5eXlpWTkpGTlJSTlJSUlJaZmJaVlZeZmJeYl5eXl5eYl5iXl5eXlpaYl5eVl5eDeHZfW11eUT1GOjk4P1VDQTtDQzo8Pz86Ojk3Ozg4ODc0ODk8Ozw4Ozs8PTo8Pjk/QT06PTw+PkA/PUBBPjk2PERDRUBBRUU9PkVERD9COzo8OTpkl5SVlZaUlJSUlJWXmJiamZqcnJydnp6dnZybo6Oko6CenJuamZqZmJiYmZiam5ubm6WJa3F2em9lmp+enp2dnJybnZ6dnJ2enp2dnJydm5ygoJuampubm5udnJudom1jnqCZmZydoZppYFiMoJydnpybmp+fm5ydm5mZmZudnZ2dn52dn5+dnJydn5+fn5uanZ+goJ+dnJ6gnpubm5ubm5yampuamZudnJqZmJeYmJiYmp2foKCgoJ+hoaGgoJ+en5+fnp6foaKhoJ+enp+enJqam5ubmpqZlpaXmZmYmJiWlJOUlJWVk5OVlZSVlpWVlZSYmZuamZaWl5WWmJiWl5OUlJGRk4yRkJOWfXhqYWJiXFA8QDw2OENWSERCOjg7Oj47Nzc5Nj06OTk2NDc6Ozw9OTo6Oz87PT08QD47Oz46PT89PkBBP0A8NztBQ0U/P0REPj9EREM+Qj07PDs6Z5aTk5OTk5OTlJSVlpeWl5aWl5mbm5ybm5uamaOjoqCfnpuamJeYl5eXmJmYmZybm5qkgGpqb3lzcZegnp2dnJydnp6enp+enp2cnJydnp2bnJuampqam5ubmZmZm6JzaX+imJucnKOLal9YhqCcnJ2cm5qdn5ucnJubnJubnZ2dnJydnp2enZydnZ2cnJ2dm5uenp6dnZybnpubnJycnJydnJubmpmbmpmYmZmYmpmZmpyfn5+jpaKfoaKioaGfnqCgn5+fnqCioaGhn5+fn52ZmpucnZqZmJWWl5aVlZaTkpOUk5STkJCSk5GUkY+OkJGOlZabmJWYlJmXlJiRjJCPk5yTkoyFjIeDhndxZ2pkW1xRQT44NkJHYEJFR0A+Ozw7Ojg4NjU8ODo4MzQ6Njk9PTk5Ojs9Ozw6PD48Oj5AOj5APjw/QD8+PDg6Q0FEPz5CRD8+Q0VCPUJAPDw8OmeYk5KSk5OSk5SVlJWXl5aWlZaXmZmZmpqampqkoqCfn52bmpmYmJiXl5iZmJmcnZ2cqH1nZXN7enOJop+enp2dnp6enZ2enZ6enp2dnZ6cm5ybmpubm5ycnJmYmZmpdXBqi5ecnZ2bfGhfXIehnZ6dnZybm52bnJybnJ2dnZ2dnJ2dnp+fn52cnZ2dm5qbnJmZnJ2dnZ2dm5uanJ2dnJycnp2dnZybmZeVlZeXmJqam5ubnZ6foqOhoKGhnJucm5ubnZqcmZycn6CfnZiZmZmUkpKUl5SPj4+OkYyNiYuQi4mLjpGRj4mQmJiQkoyNi5KQj5iYoqiqpqWlrKOmoZqep6eyqKKVo6Cfl39wcWlsXFtcTUY8NzdHR1g+SE5URjk+Ojg5ODc1PTk4NzMzOTY6Pjw6Nzo8Ozo6Ojo8PDs/PjtAQD47PT5BPDw2N0A+QkA+QUY+PEFEQT1DQj49PDlmmJSTk5OTkpOUlZOVl5iYmJaXl5iZmZqampqaoqGfnp2cm5mYmJiYmJiYmZmZm5ybnKx/am16f3lxh6Genp2cnZ6enp6enp6dnp2dnZ6enJubnJubm5ubm5yZmJmYo3tsa2+HnJyelHBlW1+KoZ6fnp2dnp6dnJydnJ2dnZ6fnZ2fn56goJ+enZ2dnZybnJ2em5qbm52enZ6dm5ubnJ2cnp2cnZqYl5SRjo+QkJGVmJSWlJiZmpudmJuYlY2Mjo6TkpKRj4mQjpGRjo+Ki42NjYiIi4+Lg42NkY+MkI2Qk5WVnJihoJySn6SipKmam5eanKOprb3Bwbq8uL26ucC8ubq3uru7tL2zwbV/bnVmZ1peWUxJRTo7TElTPFZSSUM6QTo7Ozc3NTo6OjgyNTY4Oz08OTk7Ozw5Nzo4Ojw6PT85PD8+PDw9QTs5NTg8O0A/QT9EPTxBQkA8REM9PT06YZOTkZCUlJOTk5OTlJeYlpeZmJmYmZqbmpqamp+gnp+fnJqZmpqampmYl5iZmZmZmZmphXB1e4B3b4mhnp6enp6fn56en56fn56dnp6fnp2dnJ2cm5ubm5ucmpiZmZ+Ji5J0fpygo5F4ZVVgkKGfoJ+enZ6hoJ6dnp2enZ6fn56en6CenZ6enJydnZ2cm5qYnJuVmJqamJiYmJmSjJCXlKCXk4+MjYqKiImMiJORh5CPjYqKkJCLjoqMi4+IiImJjpGOjYaFiYaKhoWLiI+SkJCNkJKXlpKamJ2TlJ6kpqaqq7Gsr6+rpquqsbm5tbS0rqyvtMDIxcXBvsbDxMTDurW+t7a0s7C2tb6qcHRyXGZfXl1JRj8/RUtMVklcTEQ/PUI6Qzk5Nzc7OTk3MTc5ODo+ODg6PDw7OTc5OTs9Oj4/OT5BPDs+PD46OTY5PDpBPkNBQT08QkBAPkJEPj8+OVyHhIOHi42KiYaFgYqMkZOVmJiHlZaWkpiampmenZ+gn52ampubm5ycm5iWmJiXl5ibqo56dXZ7f3mCoJ+fnp+goKCfn5+foKCfnp2dnp+enp2dnJqbm5ybm5uYmZqgppyNbIixp6R4ioZjYZecm56dnZycoaGfnZ6dnZ2dnp2dnJiWlpaYlZWSlpmWk5GKjI+PjI+NkIuLj4+WiYiEi5GZjn2Fi42PjYyHioyQm4yRj4+Lio6TjIyNjIiSi4yFiYyPhouIh42KhYyEj4qXkJOYmpWbnKOqoaKknKKrsbe0ubWxtK2vsrKlp7O6sbq6vLa3tsDDw729vLa/urq8wbW4wL60r66mqa+3mm58Z1tjWl1fSEU+QUtJU1hZXkFGOTk9OkY/Pzo3Ozs7NjM6Nzo5Pjg6Ojw9OTk4Ozk7PDo+PTtAQDs8QjxAOjg0Nzw7Qj9BQj4+O0NEREBDQz0+PjlhmZWLkYWNj5aSiHl9e3+Fi4OKgoqJhmuAeJCLlpqRnZ2UlJGTlpeampiWk42Sk5KQm5uIdndzcX1/cpGgnZubm5yenZ2eoKGgm5uWlpucmpubnJuYmZqYmJmbmpqWpaCIeFtrp5aWW3SBfHaUko2SkY+Uk5KXm5mYm5ePjpCLjo2Ch4uLi4qLiI2RjIeHhoqIiZGKh4yEhYqNi4qNhI+UkIyDkJOUmZWQi5OTkZWRlpWOj5GMlI2Oj4qIj4ePhoeJiYmNiomJioWNh46JmJKUmpuXmKChp6Cko5qqqbO2sbWwqKqiqK6tn6qvsK21ubi8wr/BxLixtbCutrOwuL68ury+urOzp7G3wpB1gGNiXlpXUk1IRkVQSVlXX1tDUDpCQz1HRj84Nzo6NzU1OTc8OTw5ODo9Pjo6Nzs7Pjs7PTs9P0E7Pz48Pzo4NDM3OkFBQEI+PjpDREM/QUM7PT45Z6mloqKZn6CippeUiI2CiIJ1h4iKiIp7e3Z7enmPeoiSfn18en6CkYWBgH1zfH99fISHfnRweHZzfHaBj4iIiYeIioyMkZicl4iOhIuNi4iNkZCPi5GPi4yPkJGQkqiPa1RQcpyKi05ddHiAiIeCjYuGiYp/iYqGiJiRiIOIg4KFfIuLjIaJi4iKkIyIi42PjI+Wh4mLio6NjY2Wk5OdnJyalpycm56bmpuYnpeTkZWWkJKRi4+LlpSMjYqDi4SEiYyQkIqOio2LipGJjZOTk5SVk5KcmZ6Xn6CfpaKvsamupKSfmKStpqa4t6ysu729wsPAv7+vpa2wsLS3uLO0uLa0ta6stK+4tLaBeXpjZmBeVlFRQUVMT0lcXl9UR0dCS0xCREA9ODg7OTU3Nzk3Ozc9PDk9Pj05Ozg6O0A8Oj06PkJBOD88Oj84NjQyOTtCQD9CPj04QEI/PkBEO0A+N2CloJqXnaGaoaCPl5efl5WCjaCfo6GdmpKOjIxycXBvdnFucG1ucHZub29waHBxcHR+c3FycXd7cnl2d3Jyd3Z6e3l8fXt/iIGEi3+PkYaNi4yGiouLiYeEgYaDf5OoejsvPHiPenlHOlNvdYGAgpKQhoSEhY2DhIyPj4+IjY+Hi4iRkJWRjpCKk5eOj5WYp6SfnZWYlpaln5udq6aqt7W4srGnr6qnpqGfmp2WkpWVkYqPjImTjZuVjYuLhoaJjJWQkJCLmZKVlZSbkJiTlIyNkYyWl5WilZ6mqauno6OqsJucpp+mq6G0vb6zs7+5u7u6uby9rqiusa6wuLyztLGxqrCpqLGxsqild3J0X2hhYFRWUUlKSFZNXl5eVExKRVFKRUdDPTo5OTc0ODY4Mzg4PTo9PD47OTs4Ojs/PDw+OT9DPzg7Ojg8Nzc2Mzc5RT4/Qz89N0BAQT0/RDw+PThUj4yGh4eUjJWZl5yWmZaNlZyWlZydoKCdmpiWeHFubXJ4cXFsbnJwa3FvcG1yc3t1dnd5fnVxeHZ0d3tybn98gX15eH1/eYOGg4WCg5CLkIuLi46Pi4mJhYKCfn+emU9PVD97hG5mTjs1UHB6foWOjYuGjZSRi5CXj5SXkpihlp6WlZunpp+goKawq6GjpbW0sqqmqq+isba5vcK7ucO+vLi9uLWxrLCsppuSk5mfm5SPk5WOmp2doJqfn5edo6qsoZ+em62hp6qwqaampJiRkZWUo6SirKSss7Szs6i3tru4sLKvra2yt7a6srW6s7e5u7i8urayr6yxsbKztLOxsa2us7Gzs6yhl3Zxc19jXlJRVE1PSUdYT1pcZFROR1VPRURKRD44Ojg3NTg4ODU5Nzo6PTw/Ojg8ODk5PTs9PTpCPj84Ozo5Ojk4NjI1N0I+P0RAQDY+P0I/PEM8PT46Tn98go6MjJOTl5eaj5SWjZaRkZSXk5qanqGdnHJvcnFxcXFxcG5zcW91dHJxdneAdXd8eYV+d3t8eX1/fICJiYmDfXp/h4GIiYGAgIGGiIKGi4eIhYSIiIqFgIGApHVTgXhQfJWJeVJofFJcdYSKjouNkJmclJSUoJqan6Ktsa6ppKWtr6ysrLWuvrmtrqm1sLexq7G2rK+9wsLAvrq8trKutraxtK66u7OurKepp6unoqmtoKmooq+wuLSxvLq6urK0ta+8tLezt7e7t7mtrbCprLW5sbeytLe2sLu7vLu6ury1vLi0wbWsqqqrtLG3uLm1trSzsKymrrCqq7Cxq6yusLKxtK6qo5N4dnJlZ1tMUlBFTUlTV1JlXmdUUExcUUhMUkNBOTk3OTU4ODY2Ozc5Ojs6Pjk4Ozo6Ojw8Pj08RD45Njs7ODg+OTUxNTZCRkREP0A3Pj5DPjpBP0BAO0t/gomXmJSdlpabmIuSlo6XkZGVl5SZl5+bmZx8dHV2dXl1c3RudnJzdHV2d319gH56gXyDfoJ/fYB/hIKFj52RiYF/go+Xjo6HgoCBiIuFfoqRi3+IjYyLi4eRjZ9hjdbAX6avpKZwcYp/VmiGi4mQj42PlJSYkJWcmp2eqK6ysLC1tLOtsrW4sLy1tbGqsKqztbS7t7SztrS1r7i4t62noqassLCvtre3vrW5vLOysa61u7C0r6+yu7axuMC9tLS0s7izvLq2tLrAvbm6ubq+ubm5vrWysa+yr6q1tLGzsbSzrri4tb+vpKaoo6ussa+zrq6wsKytq6qroqKmqKKnrauqpaynoqeYeHlxZmVZT09NSVJNV01PX15cTlVVYlFEVE07Pzk8ODk1ODc1Nzk1Ojo6OTs4Ojw8Oj08Pj4/P0I9ODY6Ojk6QDs1MjY2QUZDQz4/Nz49Q0I5P0I/PjtLjpGTmJmVmZGTopiTkpKLk4uOkI+Vl5ablZSbhoJ9enh2dHRzdH53end2gIKDhouMhISFioaQiYeRk5aRjZaalY+IjI+emJaVkpCTl5qamZCeoZ2Tl5uhmp2boqORZb/QrZXbt6bAsVRed2lVhJCLmJqPj4yUmpecnZugnaSstLm6vK+2tLi0tLK3uLmzq6+qqKy1srK1rrGrrqa3s7OxpaGotbCvrayrtbqyu7q6tLK3ur67ubG4sLmtqLK4u66ttLS3tbu2trm5vLe0r7G0t7a5s7e1pq2pq6ior6yprq2up6KxtLG0q6aop6Cjq66oqq6orLKwr6+pqKGeoaGjpqOgopqlo56ol3J3bmdiVUpUT09KRFBLX2JYWlFcVGBNSFJJQUA5Ojg2Njc3NTg5NDs5Ozk8Nzs+Ojg8PD0/QkBBPTs2OTk5Oj87NjM3OD5GQkJAQjk+PUBDPkBGQj44R5OWkZWTkpSQkZ+ZnZmVkI+Sko6Mk5aWko6RlZGSkIaBeXJzdXuBhI6HhZGTkpicnJiVkJWYo5yaoaeqqZ+clpeVnaKioZyZnpmlqKyvramnqqqpp6KlqKmrqaqygXOzr53RxaKYrK1xasWHUHufoqSem5qkp6Spq66spaSoq6+xtK6qrK6zr6ystLO0ua6urayqrLKwsK2wqKqmsrS0uK6qtrqwr6qurLC3s7i0t7W0u7y4tbWxtauyrKiys7uvrbGytLa1sbG0s7OvrKuvs7a0sayutKqqpqWnrauoqKupqqifqbOwqqeppaOio7CtqaatpairrayppaSioKWipaOYmZyVnqKippdudWVnZFdPWUtLSktTVHBiWWRXX1tcUlpQTEM8ODk6Njk4NzQ3NzQ4Ojw6PDg6PTk3PDw7PkM/QT47OTo5Ojs+PTg0NThBREVEQkM5PjtAPkI/R0Q+N0KSm5SVlZaVj46Wl5qZlZGKk5SSjo+SkYqKiY2Ul5qTjYmCho6VkZSfmpuin5+jnqGhn5ijpKelpaapqa2rqaKmpKilpKGfnqOjra2srairrq6rq6ykoaKmqaeorI1+k4SKyM6ws6qSdEausVtwnamnoKKhrqyrqqetrqilpKmpqqmmo6iqqaekp66wr7Ovq7Crqq+yr7Czua+rqLCxrrCyubO0r62vtbCss7GurLW1tLSzs7CvrKyqrKusr7G0s7CwrrCwsKyqrauqq6alrrCysKumqbCvqaOkqaunqKaopquwq6mvqaaoqaalo6iwraqpqKKpo6WnpKGhoKKloZ2el5aYlJugpKmUbnNeamlfVlpOUk5RT1NlXGRjW11ZXFBZT0tAPDs5Ojc6ODczNTMzODo9OTo4OTo5Oj08PEBEPkA9OTo8PDw+Oz45NTo8QkFFQUNBOT47P0BEQENCQDdAkZ6YlJeZlpGHi5SSl5GIg4mLk4+OkI2Hh4SFlZmWmJeZlpqeop2ZnKKkoaCdn5qfoKGgpqGgoKCjo6KlqKmrramqpqOmpaCloKaop6aoqaepqaSoppqdpKWjoqWhjINvmLGjnpyHgXRjeox1bZSkoqChn6GhqKCcn6GloaCmo6KfpKGspp6foaGkrKqnrKivq6e0sa6ur7WyrKqwq6mtrbWwrq6srreup6yqpKivsq+sq7Kvqqqpq6utqa6urrGxraqtqaunp6uoqauinaapqKilqKisqKilpKWop6iopqmsr6+oq6mhoqKlo6Opq6ymqKWjqKKhoKSdnZ+hoZ2bnZ+amZWcnKOqlG9zZm5yZF1dUFVPWE9eZWRsaGJiWlpSVE9NQTo9Ojo4Ozk1MTYzMjg4Ozk5OTk7OTk8Oz0/Qz5APTk7Ojs8QD0+PDk5PEFBRUFGQTo9Oz9BQUJBRUI4PYqWlJOYmpaPiISNjpGSjIiIiI+JiZCRjoqKiJubmZygpaKlnqKjoZqeoZyanZ6bnKOop6ugoKOYoJ2XnKGjo6WjoqKkrKilqaCepqmnq6mkoKKgo6ehpq6mppyonYFrUYySgH6CdnRvcHN0foCQo6Ghn56doKOalpqYo6KipJ+ZnKGhoqCbmp6goaSgnaejqrGorqusqaSqqquorKalrKqws6+rq6mwq6appaWoq6ynpqevq6Wnq6upq6irqqqrrailqKOmpaesqayoopykoaOmo6qpqKano6SnqKanqKepqKupoaKoo5yepqWjqKino6WlpqmgpJ6inpeYnZ+doqKlnpiUlZ6go5d1d2t2eGJfXFVZUVVXW2Nec19oX2NTUVlUSD48PTg7OTo4NTM3MzM0Nzo4OT05Ozo5PDxBQEM9PT44Ozw9PEA/Qj86ODo+P0NAREE6Oz49QD9DQ0VDOTyCmJmenZ2alZKKiZGRl5GQh4SJgoGNj4+Sj42cnZ+hpKmlqaeorK2moqKfmKSmo6Stsa6yp6asm56em5qjp6Cfo5+foq+rq6yoqKuvqaiqqKKgoaiqrbGyrqyrqYNwX0hvdW5xdmtpZWhmZ3F2foqWoaSln6CimZWem5+fpKGblZigoZ2enJudnZuZmZWen6Oonp2iqKGaoaOmoqSoqaqoq7CxqKWlp6eopKWpqaqnoqWmqKadnqWloqClpaOlpqCjpaOjpaelqamqpKekpqKmp6SrqaenpKGlqKynpqWlo6OopJWdo5+bnaCjqaeopqGjo6mooKiioJyVkZqfn6GmopuXkpCamqCVfHdvfXlmW1tgX1pcVVxoZG9jbWlpYl5QUEA/Ozo4OTg8OzYzNDMzMzc5OTs8OTs7OT49QkBAPTs9ODw9QD08PENBPjo4PT9EP0M+Ojk/PEI/P0FEQjk6gJ6kp6Gem5+gmY+ZnaCWloqGj4iEi4qTl5SRo6Wnqq6trLOys7S4t62pqqevtLKxqq6usbKusa2lq7OssbGpq6+rq6y2sLSwq7GysaOgo6qqp6+3tbO2ur27r5RqY1dIXGtmanFnY2NlWlphYmt1en6IlJ2jppydoJqWnqScm5aZoqefoJ+joJuUlpmWl5qfoJmVnqGZmJ2dpZ2gpKeqqaiqraylqaSlqqeqqaqsp6SkpKOimZmhnpqaoaCfpaWYnqSmpKqooqelpaGqp6mnp6ejqKWmpaGkqKesoqekoaalpaOVl52Ym5mVo6elpaSfnZ2lo6Kqo5+amZiXnJyaoaGakJOTl5ibjX93cnZ4amJbX19cYllgZG5ta25hX2RgUE9BQDs7OTs4Ojk2MTQzNjQ3Nzc6PTo8Ozk9PUI/Pj89PDo/OTo7PD5CRUA9OTtAQT5DPDs5PzlAQEBAQkM7OXuao6OcoJ2dop2Zn6KioJibmJaYkpSQm5qWl7S0rrW4s7S4tre0uLm3tbm4ub28uKqLnLK4vLS9urW7uru4s7q/uLe5u7G3r6iusq2inaCrsre+xc3Qx8C1ppN3Xl1TR1x0a2pxZWBjaVpYXlleZW5wcXR4hZimrqelmKGko52goaKooaOgpaGck5mYmJmco56cmpudl5uZlqWam5+hqKmpqKuvr66pqKirrKytq6irp6WjoJyfo6Ojn6Cipammmpyip6Spn6GjoqKgpaanpqSooJ+ipKGjoqiop6OloaGopqalo5mbmJuTj6GknqKfmJiVoJuhpaCfm5udnJuamZugmo2YmZiTkYaAdnh4eGNbUllUX19hbWh2a3FoaWliWlNMQDw6Ozg5Nzk3NTU2Mjg1Njc3Ojw7Ozs7QD4/QD0+Pjk6PDk2Nz47QkZCPDg7P0NDRDw+OT43PkFCP0ZDOzhwkpqblJ6bm52Vl52doqajopaXnpaXl6GblJi+t7G4uba3t7i7l5S2vbu9vcDFtaK7mKC3v7+6wcm0nbu2sra/xcGooLa0urGqrrSxsLK0tbzQ3ODZyruvoJF5Y1xeU0FfbGpxd2diXmdeVVxcW1teZWRiY26JssnCuaGnqqynq6mlpqCnoKGmoZOWmJ2foqSjnZ6coaChnZekmpmdoKaqqqqtrq2tsLGrrK2sqamrrqimpaalpqSkpqaeo6eppKGcoKKjpqCio5+jpJ2foqWgpJyboZ6fo6GhpaSlqaOkpaKkp6ehn52elpOcoJiZko+MjJeWn5uWnJqdnJqSlpSUmJOQmp2YiouHgIB8gnhhXllTYWlgZnRvdGl0ZGlkYltMSz46OTg5ODg5NzM0NTI1NDY2OTw8Oz08P0E/QEA9Pj44OTs4Njc/OUJFQzw7PD5DREM9QDs9Nz1DQ0BFQjw3Z4yRk4qalZiblZWYm6Knq6aVl5iQlZmhnpeXvrWztLu6ubi5woeYt6u4u8DCxbOjw6e4s72/tMTHvbS7uL62wMTErqCworW2tb2+wcTHw8TAztfYzrqjj3xvXVZYWEw9XmJodHJtYmFmW1dXWFhWWFhdcZKwxcu6uLepr7Gwr6yqoqajrJ+fpquXmqifpaWfoJydoKuwsKyiq5yYm6Cor7Kys6uorre1sq2tqaalqKulpaStqaShn6Cnnp6mqKmmnp+anqGlpqmcnaObl6KmmpuanZ+cmqGcmZ2eoKijn6GfnaWioKOioZSZmpmTj4qLhI2Qk5uPjpiVm5eYkJORkomNl5iYk4uKi32AgIVwYGJfXmtjYm54dXdubVtiUlZcTUc7PDk3OTc5Ojc0NDQxNDM3Njg8Ozs8PEBAPUA/Pj8+Ojo5Ojc6Pz5FRUU8PT1AQkJCQUE7PDhAQ0NARD87NV+MjIaFlouUlZeYl5ifpqellpWVkZebn5ual7mxtrO5vLy5urWqsryxvsG0vMe5uLuuv6fGw7/KxsnIxcXJvMLHx7+xsKe8vL7FxMbJx8XGusTAx8/Sx6aFXU9LT1NMPVZXaGJgcWhhX1haV1hWVF6HscS9s7S2qrWyrbOtqa6vp6awr7Ktqq+zpKu1qaeopKCgnqmyuL61tbWqqaausre4t7apq7i8ubexr66noqOop6SfqKOfnqCZoZydoqSnp6GelJuaoKGlnqChnpajnZSQlpiboZqflpORlpSin5qenJudoZ6kn56VnJiPkpOPjImTkJefiZCWkZuUmJGRlZaDjJWXlpKLjIh8f4R/amZoYWtsZ251cnJ1cWdeYFxSSUU/Ojo6Nzg0ODw3NjU0MjMzNjU3PDo7PDs9QD4/QD48PTk5OTs6PDw+QkRFPj49QENDQkREOzo4QUJCQUNAOTJbk4iEjZGKi5GRlZCSmp2fnJOSmJSdnZqXmpW2sbm1tb6+tri1uLO8vMTEusPHwb+0s8XFxr/CzcfLzsvLx8HDxsfIysXExcO7vLzBxcHFxL/Dw8bGwbadx7OMXFNWUENWU1xhZnBlWFtaXlhZZ5Cvv7q2pqmpqaqtrKmlpZ6pr6uyu7q4u7e5t7O5uLOurLO0qrC1ub3Bur6+vL60urm4u7qysbS8u7q7s7Oyp6Smq6uioaCdmpudmpyXmpuenJygnZaclpuZnZ6io52UnJCNiY6OkZ6bnJWNh5KLmJiWmpybmJybnp6cmp6UjpiYmpSRmZeeoZWYmpKXlJWRlJqYk4+TnZaSi5F+enx/dWtsbmRvbWlxeG95amlhXWdhUUZEQTw5OTc2NDQ6ODQ2NTMzMjY1Nj05OTs7PT47Pj49Oz05OTs7Oz89QUNBQkFAPEBDQ0NFQjs4OUQ/P0BCPzsyV5uQkZCQh4WSjo2IjZCTlZGPjZSUm5STlpqRs7e4uLi+u7C1sri2tbbAw8G+w8LAvru+u7u8xMzEzNDLxsa/xcfLyNTLysjGv7u7vsS+xcjGxsPExLm0v7m7yq55XVBOV3x0kJeWVVRYV1lhgbC3qauytKyupaWjp6SgoKWZqrSxvsG+urm6uLW0srG0tLO6wL7Av769u7u9vsDCt7a3tru7sru+ubi3u7a3tKyoqamrpqijnpOampyYkZKZl5GRmJqXnpiWk5acm5+elJOJiX6GiIuWlJiZkYmVkZeWlZmbmpaYl5idnpyhmJWZmZyYl5ybn56jnJ6WmJeTl5yZmZyUlp2UlpOJdnl5e3dua2lodlpmcnhzeWZmXmRbUlhJRj87Nzg4NzYxNjk3NDQzMzM2NDY7ODo8Oz08OD0+PDo7PDs9Ozs+PkRBQURCQEBBQkNDREM9OTlCQD8/QD89MkyWmpaSk4yKmJCKi4yOkpKKiIaNkJiKj5CUl7O7tba/vb2xtrjBvby0uL/Bsbi3vsHFvbu8wsbJv8jOyMHEwcfKysbKxczIzcbIxb/DwMvNz8rGxMPEwsW+t73Dw7J9Vkxwd5elnU5RU1t0oLW3sq2suLWzrKmjoa2prKetn6y1tL/Cvrm4vbawrausr7W0ur7Fv7u8urO5u7i5ubWtsLS9u7G/vLiytrmzubu0ra2orKyqqaeXnpualY2MmJSTi5WWlJyZl5WWmZKYn5mQiop+iYqKkY6Vl5OUn5mWkJSZmJmWmJOUm6GeoZiYmp2ZmZaenpibopqdnJuYmpuZlpeXlpyZlJyYfoB4eXV1ZWZpamheam9ueXhjYmFgXlhXRkU4Ojg6OTc5NDQ5NzY2NTEyMzM0Ozo9Pzs9PTo6PTs8Pjo7Pz48QkBDQkJFQj0/Q0NDQ0RFQDk6QkFBQj5CQTVCkJeUlZmSj5qQjpKRjZSVi4qHjI2UiImPkpq2u7S8xsHEwr3BxcLAtLO9v6ywr7rDysPCvs3IxbfByMW/wcLIy8rCwsTJzM3Oz8zDx8bIycjIycfFycfIx7/Ex8PHyLCAYFiRppJITG2Xs8K8vrm8ury6vKytpqm7urm3v7K1uLLAxrq3t8Gzsa2tqau1s7u2w7a2vbWxt762s7e4sLW2v7uwvbq0q7CxsbO8urOzrqutq62xnaOjoJqQjpiXlZCclpaYlpWSnJmTm5+clpGUjpWQiYyQlZOUm56YmZKSnJedlJmSk5aZmJ2VnJ6do5yVnZ+TnKKcnKCfnaOemJSVl5ebmpmgkH99cXRxb2NhZ3Zpamp0bnlsXWRbVWBZTEhDNjw5OTg4OjUzOjY2NDQxMzUyNTs6PD47Ozw9PDs8PTw7PD49P0E/RUFCQ0M+QEFARUVERUE7Nz5DQkI+Q0I4O4+akZaalJKUjZCUlI6VlI6Pi4yJk4uIkJObt8C6xsXEw8zCwcS9vrWvt7uvr7O6wMfFxMHMy8W2ucDCwsTHytHLwsPExsnFzNDNx8zJwsLHwsvLyMfMyc3FxcXCxcXN0MeTi6iLRW25xcnNxsXBxMfBvL60sbCwwr6+wca/vri2w8K6urbAvrWyrKmvsri+tMC0tLi0t7nEua+8vrm+v8K/tbq2q6qsrq+wt768trSura2utaSlqKimmpycnZyeopydmZOQkp2VmKCdmJiVmZmZl46MlH2QkJefmZmYk5GToI6Nko+VjpCUlaKdnKSem56elpyjoKGipKOkop6amZubnJ2enIN9cnx4cGdga2p3bGlmdW90Y11iVFdVU01HOjc7OTk3Nzo3NDg3ODQ1MjM0MjU7Ojk+Oj08Pz04Oz05OTk9PEBBQEVCQUJBQT9AP0RFREVAPDk+QkNCQENBOjSAoZeUmZiVkImUk5aTiZGMlJGOiJaKi5CXnMXLw8O8wMPHwbm9vbu4tre3rrK3uLzAwsDCx8bHurzAwsTHyMbSycHDw7+/vsTLyMrLyby8yMfJzcjDyMnJxcXBwcDBxcbJzrGMXmnE0MfLz8W2v7/AwLq7vbWzs8C/ub/DucC3u8G8uri7ub27srCvsKy5wri9ube1t7q9xb24xsjCwcLGwr28tamurrCwr7O6t7m2sK+tr7OppquprqannqSlo6OjoqCblZiekZecl5GRlZeZlZmRlJiSlYyYo5qcnp2FiZ+TfJKWlZKUlJennaCipJ+en56foaGkoqKjoaOinJ2fnqOhppl5enl/cnBmZWZja2Ria21ub15ZXVZWTlBKRjk5Ozk3Njc3NjM3ODk1NjEzNTI3PDs8QDs/PDw6ODo8OTk4Pj1APz9GP0JBQz89QT5ARENDQTw5PENBQ0RBQDozbKKdlZedlo+PmJiZmIiSjZGVkI+Vjo6TlpbKy7u5urnBu7q3vsG8vLu5sa61uri4u8S6vsC+vru8wMXBxsK+xsK5u8O6uLm8vsHHwca7ucjIw8XEwMPBwcDEwcK9vMHBv8DJkz+U0szFyNHBr729uLm7u763tLC5vrO8vrG5tbi7tryztbm2uba5t7GtusG6vMG/t77Ev8bDw8fHwrvAwr/Cv7iys7O1tLGut7S3tbSxrK2xp6Wlp7CtqJ+nq6ajqKWmpqCgn5SYmZSRkZWUl5OYl5qhnZ6hnKGdoaWglpSbkZeXmJqTnpmZqaSlpKWdoqCanqCkoqOcoqGjoJ6cnp6ppaiVfXuDeG5mYWViYWNjZGpjZ2NbWlpdWVFPRT07OTo7Nzc5OTY0OTk6NTMxNDUyNzo7OkA9Pzw8OTc3Ozo5Ojw+QD8+RDxCQURAPz49QkRCQkI+OjlCP0FCPT44NVmfnJiTmZaRlZiYmpeQkZCQk5GTlJKSkpSUxce4tbq5wrm5vMPFwri7ubGxtry6tbnAu7u5tre0tLW/u72/ub66urTAuLW3sq66u7fAt7zJzsG7v8C8u8S9usDEv728uLvAxatIlczEwMDJv7DBv7q3u765tbi0uLy0vbi1tLCzvLG3tri/tr25vb65t7q+u7/Axb29y8PGw8TAw762ubq2v7i7v7y4trOyq7CwsrWzs66sq6emnqeurauiqKumpqqjp6iqo5+Ym52bmpicnJiXnJuhpZ2anqGhoKGmoJqbnJiboJ+dnJ+coKiho6SknaKfmqKgop+el6Shop+dmpieqKWhi3x5iH1xZGFiY2hqZ2dqZWpeVlZUWU9TTEY4PzY7Ojc3OTs2NTo7PDYzMTM0MTc7OTg/PT47PDs3Njk5ODo7PUA/PkA9PT9CPjxAQUNDQT9DPTo2PEBBQDw9ODdJlJibj5OUkZWYlZGWkpWRkJGUlZSTk5OYlcHCwLq8ub62uL7EwMKxvbqytLO4vLW3vMC8vbS0sbC1t7W7wbi+ub+8vLe0t6+ut7W5v7vB1I26v7vDtbrHt7a5u7y4ubW6w8mpTI/Jv7+7wb65xr3Cv7zFuLa3tLi2tru7uLa0t7q1s7i8vbm/ucPAwLu5vLu+vcjEvcfEw7rAvb62sra4srm0usLCureysaysq62yr7Kur6ijpJ6rrKyqpKakpKiqoqemraihoaGmn6Oiop6bnKKfoKOdnJuhn6KgpKCem5eZn6GdnZ6eoaWkoaKioZ6ho5yinqCZnZijn52eoJqZoKKmnYR6g4F5cW1lZWZwamVsaFhZT0tLS1JKTEhEOT44PTs2Ojs5Njc8ODk4NjA0MzE3OTk7Pz0+Ojw6ODg5PDg6Ozs7PD1BPj09Q0E8P0NDREA/Pzw6Nz5CREE/QDg4P4mYmoyMkI+Tl5WMkpCakpGXmJaUlJKQmZTDvsbBwby8uLi6v7a8scK2tLyxtLa4s7q9v768sq2vrLGwt7y3u73BxLm3t7a1ubm6u7+8z8R4qsu9x7e5uK22tLe5s7WyusXJnE2Eyr+/vr28v8jDxcW+xri1srK9uLi4vrq6uby6urS3u7q5v7zEwL+5uri/ubvFxr3Fw8Kyur27sa+2uLO3s7q+wLm2rLGrrqmqqa2qqq6mpKWnrq2ppaOio6GkpaWmoqato6Klo5+ho6Gcmpyhn6CloaCenZygnaWgnpeVmZ2fn52gn6KmpaCknpybn6Ofn5mcmZ2epJyWnKOcnqGcppZ+f4Z8a25xZ3FrdGZibmBcVEhLS0RKQ0NHPzo7OD48Nzs7OTc4Ozc8PDYyNzUxNjk8PD08QTs8Ojs6OT45Ojs9PUA+RD89PkRAPz9BRkQ/Pzw9OTc/QUNCQEI5Ojl3nJiLh4uQkpOWjY+TmpOQnZiSkY2PjpiSvbfHvsO+vbu+vL22uri9ure9s7OwuLi1uby7wLeqraSusLi7sr2+u8S2tbi1t7++xLzCxNeudYK8yM/CwLiutbW7vbe5sb7Dx5FUf83Dwr++vbzHzMfHxMe9tbW2wb27u7/CusDCv7y2t729vcHBwL+8ube8wru3v8W7wr++tbe8vK+vt7awtLO6ubq7r6mtq62rrKaqoqeuqKWqra2vp6Sgn6ajnqKjqKOjq6Oiop6dm5ublJaZnJyfpZ6fnpmYnpejoJyXmZqZmqOjop6jo6egpqCbnaCjnp2WoJmcoKCblJegn6WcmKKQgYaAcmZsam51b3hjaGJcY1FLVUhFRUNHQzw7OTg9Ojc6PTo4OTs3PD01MzY1MDY4OTo8O0A9PDo+PDk+OTk9Pjs/PkM8Pz5APz4/P0ZEQEE/Pjo3P0BDQz9APTo4ZqGYj4uNlZKVlY6PlpmVl5uVjoyMjY+bk7m2wbS/vLm8w8C+wLq1trKywLmvsry8sLe7tru8qqqjsLm9vLK8vrzFuLG4ubzGycrCx8nSmXJ0rtHRzMrEtbq/xMi+vrS+wL9/YXbLxsK+wby/w8zKx8XGwLm9vMS/v7/CyL3Hx8XFvLrEv7vBv7rAvLu7wMS9t7nCub69t7S2uLqur7WxsLCytre0t6yurKqsrKuoq6Gms6qlra+trKippaOkp5+io6Onoaeiop6cnZyamYyQlpeZnaKZnpuVkp2UoaCdmZ6fmJimpqKfoqKmoqeloqCko6GbnaCbnKKfl5WVnp6kmpafiYGDgXRvbGx0bGxuX2NfYWJOSE4/RUA/REM7Ozo6Ozo4Ozw6OTw+Ojo+NDQ1NTE5OTo5PDtAPD89PTw4PDs6PDs7Pz5DPkI+QD89Pz9FRUJBQj87Nj9CRUQ9QUE6OlmfmJOSlZqVmpOQlpeclZuZlpSVkZKTnZm2uLaxuru6vsG5uca7trWypb69tLbBv66zvbS4wbGwsbS7xdDCur68xL63vMC/yc/HyMrKwYZzdKbMzMvNysbCw8vOwby4vLqweHFpu8jEwMC/xMDKycPDxMO5w769ub+8wsbCyc7Hxr66xr26v7m3wLm5vsDCvrW0vLi2u7CvsrK1r7Cvrqyus7CzsrirsbKxqrCrq6yrrLatqKyusqarrKmpoaWgpaakrKSmoaChnqGgnaCMlJeTm5+mmZ6emZOYnZ+gnp2eopuYp62ooqSgoKKqpqmhqKGlm6CgnZ2jn5SYmKKdp6Gfm4J7eoh7bW14fGBxY1tfYF9UST5DRUlCQz5DOz42OTo7Ozs7Ozs7PT05PTU2NjIxODo5Ozs6QTs/PDw+Nzs8Ozw9PTw9Pz5BQUE/P0FCQUVDQkRAPDY+Q0RFPkJEPztTmZuZmJ6dmqCalpyZn5KdlZ2boJWWlJqYur20sLu8wcTCv8XGura5sqO7vbS3xLuwtbq2ucS4tLy3u7ur2sO+tr7Avr66ppyqsrbDwKV5d3qcxMbLyMHDwMDJysG/u7myoop/da7IxcS/wMG/y8fCwMjAusK7urO6usG+wMrOysS9tby8ub+5ubW1s7/Avre0s7S4rbeqr7CwsrGvq6+nr7ausrG5rra2uLSzsLGttrS6sa6srranrLKsraSjoaenqLKrqqWkp6elpaCml5ujn6SmraKeo6KanaWiop+foaWenrC0sKSlnp+kqaevp6mgq6CiopqipJ2anqGmp6+psZWCe32Cem5zeHRocF5cX11aUkZFRE1JQUQ9SDs7NTk7Ojw8Ojs7Oz0/Oj01NDUxMjc4ODs8O0I8Pz46OzY6PTo7Pj0/QD87QUFBPj4/QkBBQkJFPjo1OkFCST9AQkA7TJqdnZ6fnZienZmampySoJWbnp+blZGRl8W+urbDvMbCvr/Ixbe1uLe2ubu0r7e3srWzt7m8u7a7u8S3ba3Ovba5wLyqfW5obm1ygZaYdHh9mb2/xsC5wLy+xcS9vbixrqCfjI6dysLDvL2/v8PDvr/HvLy/tLSutbW8vr/OzcvCt7K4t7e9ubuxtrLIwLu2tLGwt6yzqbCtrbS3r6uuqrG1r7Gvt7O6usC/tre2sru6wLWyrbO3rLC6r7KloqWrrK+5s7KosK+xr6qiqKGkraitrLOun6inpqWmq6Sknqaqo6ayuLOrpZyfp6anrquqpbClpaWbpKOYn6exrLW4sLKOhHl/fHdtdXtxb2pcYGBaU1BBRklHS0BFQ0k8PTY7OTk8Ozo6Ozo9Pzw9NTU2MTM2OTg8QT5AOz1AOzs5PD04Oj08QD46Oj49Pj09PkBCQkJBRD03NDU9REc9Q0I/PEWUnqCgoJyXmpiYlZmdmZ2fmp2bnJaRj5LDwMK9wrzEvLy7xbu3s7e2tru7s6CWtayvsbS0tLa4ucDNsnWBs722tcGkhmlaXmBNUltbb3R4g6K4uMK6s7u3u72/uru7rqKippefgL7Ew768v7u7uLbBwrW/urWur62wvcC5z8rJw7GwtbS0vbq+urq7ysO7uravsL2xuK+ys7C3vbaur66wt7CsrLK2vbzEwrq9t7bAv8G3tbC2srGzurGxr6err6u2v7e1qbqztbmxp6uop7ausrG1uaisrK+qr7CqqKessayytr20saykqKuoqKusq6i2qaaonqadmKOuvLG7wbSmiYF7gnpzdnZ3b3FhX2ZdW1VKPT8/R0c9R0NDOTo1Ozk5Pjw8OTo8Pj4+Pjg4MzE1Nzg5Pj9BPzs6Pz08Oz09OTs8OTs6Nzs+PT1DQT8/QUJEQkE8ODU4PUNGPUREPzw/iZ2en52Xl5WUk5aZnpubmpuYlJ2Uio6Owb7Dwr6+vrm2usCxtbGzt7fCtbOrrbOoqa61r620trnCyaaEeIqgr7WcamZnVllgSUlNUFRteIinsLe+ubK1sry5vLa5vrWVpbWlrXatycTAvb+5s66yvLquu7Szpquorbq+uMvCv76sq7Cvs7q3ub67wMXBu7y3sLXEtb+0uLu0u8PCs7a2sbisqaWrsr23v7+7u7exvL28trGvq6uprbOvsLCrsLSpuMC2sqm0tbC3tq2spqu7s660uMKwsbG1sbK1saywsri4ubi+tLGzrqyxramvrqqyuK6trainoZ6ptr+4ur+wlol9gHxxdHd0d3JsX2NhXF5PSUI/PUlERk1EQDc3NTs6OT48PDk4PT47PT86ODMyNTc2OD8/Qj86OD4+PTw5PDk7Ozo8Ozs6PEA+QkI9QEE/QkI/PDs3OjxBRD5CQz8+QYqgm6GdlJiVlZKYmpyWm5WalY2bj4SIhru0vb+7vLm3s7y8rLOytLS2wLXAr7Kzqqqxt62pubO3v8apiHx2jKGYX1NDWFVHYWpWT0VKYY6ira+2urW0sqy8ubi1uMG9i565q651psvCv7m6ta6lrLOxprCtqJ2gn6WttrXCt7a0paiqqLC2s7K6tbu7u7W4trC1xLK+vL+8ubrFybq9vraxp6SeoamxrrW5trKxq7S2trGopp6gmaWmpKynq6y2qa+6sa2kpq2lq7GrrKmtuLawsrjBtrGxtbGvu7ayt7W1sry1urKwsbKutLKqrq2nuLWyta2uqqiosrq9wLa0qY6Ce393cHxvdnNuY15nWV1dU09OQT5KQkBKSkA2NjU7Nzg+Ojs4Nz4+PDs/OjkzMjc1NzU8PD48PDg+Pjw8OTk5Ozs7Pjs7OTw+P0E9PEJAPz9CQD47Njc6QERBQ0E/QUKJoJ2loJSWmJiVnqCcl5uYmZGMmYmDhoS1r7S7u7S1sLG2uq6wtLOvtbq1urC1s7KttrqvrbyzuLi/tJCCeYiQbk5LP2RZQk53gJRpTUFdg7C1s7WytK+su7q4trm/xnaHsKScZqm/uLWysa2tn6Smp52kpZyWmZmZn6muuayrq5+lqKSrrq+nsKuvsbGtsa6usLmwtLy+uLm4x8W8vLu4qaKcmJufp6assq6zqaapqq6popqXl5GcmpijnqKir6ekrKaompqemqGnp6anqa+2squ0trCqsK+xqbm2sbWxrqy3s7avrquuq7S1ra+rq7GtsbKoraurs7W3ur2wq6GLeoJ5cnZzbXVqbF1ca1VeXFBOSERHTUJGTkY4NjY1OjU6Pjg7OTc8PTo7PTo5MjM2Nzc3Pjs9Pjo6Pz48PDw6Ojs5Oz47PTk8Pj1CPDtAP0A/QT8+OjU1OkBFQkRBQEJBiJ+ipqGYm56dmqWpmJudmpmUjJmHhoeGrq2uuLmxsqiur7iyq7CwqrK1ubm+tbK4tLm6trm7tbWzt7aVjIiEfFhGQU+HWUpKWHeNgWJAU6O5s7SysLGtsLm4tru3u7yRo7OtpHSssKmrraujqKGdnZ6Xl6CVkpaXj5ifqK6ko6Sgoqaio6mpoaanpaqtp6ynqKesq6yyu7SztLm6trK2ramgmpaWm52fq6yqr6Oko6GpoJuTjo+QlJKSmZaanaSloJ+ep5iVkpSZnqSjoaWqrK2iqaqppKmtrqW0sa6xraqprq+wraWmqqSos66trKmmpqmrpqqnq7Ksr7Oxq6mWgX+Bd3J5aHV0bmVVYWRXXVJPTUlASVJETkM9ODg3NTo3PD46Ozw4OTw7Ozw7ODI0ODk3ODs7PDs4PD0+Oz08Ojk8Ojs9PTw6OkA9PDw7QD5CQEE/Pjk1ODs8RkFDRD9BQYijpqKjnqCfp6Coqpufm5yZmI6Xi42PjKqpqLGvsK2lp6ayr6mmq6CvsLu1vby4wMG+vLy8ua6sr7K8qZiZlGhNP1J4cVBJSUtonIBaRVKuu7Gss6+urK22trK0ta6pp5+am52fpqieoKipn6GnlpuWl46dlI+Qlo2Xm6SooKCioqGlpZyjo6CepaCkrKWmqKSio6OrrLOuqa6urqeqraisoZyamJmYm6qoq6ufpqKbo5yVkIyPkJCTkJeVlpifnp6amaaXk4+Slp2ioKWipqSnoKKko6Ghq6uksq2qrKyno6yuraufoaKkpK+srKmmo6KqpKqqpKmrpqmsq6ahiHiDfHZ/emN4bW5dUWlVUE9HUE1NQ1BRQD47PjQ5OjU7OT07Ojk9OTk8Ozw8OzkzNjk5Njo7Pz06ODs6Pjw6PDs5Oz07PDw9PjxAPT88ODtAQEE/Pz45NDk8N0FDQkQ9QEOOqqSjoqGinaulpqimoZ6dmZ2PmJWTkJWnpKGmqKmlpKChp6uhnKKbp6u1sry9wMLCwL7AuLSnpKyovcKqpb1oRFKdglFXSUpgSlWNYWRjga61qrK0rqqrr7Cys62lnZGXk4+XoJ+ioJyjpJ+eqJSblpaMl5GNkJeTmJ2iqp+fn6Cjpaicn6ChnKKfo6ionKehoKSfrKisrKCpq6agpKimrKOenp6al5qrpqqxo6WonqCclZOQj5GRmZCWlZiXn5icmZukmZeUlZqdoJ2nqKWgo6Kho56doKmqpa6upqipoaKqrqqnoaCio6msq6eppqShqaKlqaalpKKmpKijkn58f3V2fW1re2RoVlJkTkpIR09TTktOSDxFQDwyPzg1OTs+Ozk5Ozg6PDs7Ozk5NDg7ODc7Oz48Ojk8Oj07Ozw9OTw8PD49PUE+QEJAPTc6P0FCQEA/ODU1PDpAQ0BEPkFGlq6koqWeo6KpqKipqqWmnp2imJiZmZWbop6bnqOioKOgoZqgmJeXlqGorK62t7q5ure3u66ooKGpoKrGv8qgUEFznXZPbUpLY2Z0c2BcYHKQsa+us7WqpqyropuZlI2RlZaYmJyfoqKcnaSemqSXl5eWkJKRkZOal5ugpKqeoaGepqerop+gp5+dn6SnqZ6jpp+qnaqtqq6nqLClo6Smp6ymoqWimpmer6iusqumq6qgm5iYmJWTlpqTlZWalpuXl5ihnpyclpuhm56ao6eln6GioqOdm6Gmp6aoraOppZ6kp6mkpaWhpaSsrKmmq6eioKSjpKenoaCgpaKmoIl7gH13eXxleXpgYlNVYUhJSktTVEpTUU05P0E2Nz02NTs6PDw5Ozs4Ojw9Ojs4NjU3OjY5Pj0+PDk5PTk9PTw+PTs7PDo+PTw/Pz9APT03Oj5AQEA/Pzg2NT08PkFCRkBAR6CupKaroaOqrK6tp6ypqKCipp6bm56aoJyalZmfn5uen56WlJOXk5KcnqSorq2sq6uvqq+pnpeepZykxsaMV1NKZaRaZX1vcltRa2NbZWFea4+0sLC4rKahnJ2alJeamZCOkZWRjI6Nk5minJejmZqXmJmUmZiWnZufpaapoKajnqeurqumorGjmqSmpqqioaqiqaSosquxsqu5qKarp6urqaysp6Ggo7GusrG0qrKuo5mcnZ6hmJubmpeZm5SWm5aZnKWhoJqjoZqcmZ+kop6gn6KmnZulpqWkpaijp6OepqOinqaloqWlqKykpq2noJ2eoJ6gpaGenqWgppmBe4F8dnZzaYJsZltTWlpNUUtPT1ZNU01CNz5DNzg9NzY6PDw9Ojw5ODo7PDo7OTc2Oj01OTw7QD03ODs3PTs9PT06Ozw4Pj09QD5BPj4+ODg8P0BAPT43NTg9Pj1BQEZAQUihqqCrq6GkqquwramtqaelpaWkoKGfnqWXl5SYmZ6YnJ2blo+VmZKRnJihnaqip6Cep6Gln5ySm6Kan6qjjHlVaXF2dXBjdnZYV2NgY2haWVdnra6sr6efnqKglpCTm6CbmZeSk5+coaObnpuWn5qfl5uinqWhnqSfpKitraisqaSstLe2sKe0rKKtraOvpaSmoamorrWzsr22vrCssa6tqaq0sbCoq6iztrizuK2ytKSgnaWgrKGhoqGgmpiWlZ+bm5iloaCeo6GgnpucpaCfnZyhqJ+fp6meoaOkoKagnqehn5ymo5+ipaOooKmrpZ+dnZudmqainpyjnqeQgYKAfXh2anh1XW1bUmFJUlVIRlVXSkNNRz1LSThFPDc3Oz49PDo8OTg6Ojs6PDk2Njo8Nzs+PT8+OTc9OT47PEA8OkA6OkA/O0A+QUA9PDk3Oj5APzo+NzU4PT0/QUBEQEJGnKueqamipamprqimqqWmp6aoqqGlpKOmkpOVmJacmpqcmpWTmZuNk5+ZqJ2un6eenKGdnpqZkpiem6GhoKOAb4JwYGNYTFtSWkxLUFhSSE1NR5isqqmkn5+ZkpKUmJiWlpaMiIuOlZ2cnZ2el56Zpp+gqKWxqqeuo6uutrC1srGutri9v7qttbSwt7CutKmmpKWsqbmztbvDvMPBtrq2q66xubi8r7OwtcK8t76zs7WirKKpqbKpq6inqJqZnpqqp6CZp6Cfn6iopaSenaqiop6bn6igpKetmZ+jnp6nnqCmnpycoqGbo6KhnZympaWkn6KZnJukn6CboJyjiYWFfnZybWl3bWltXFhcQ1dOSkdNSENGTj0+TD40PDk2Oj0/PDs6Ojg4PDk6Ozs8NTQ6PDg5Pj4/Pjg4Pzk8Oz0/Oz1BPTo/PjxAPj8+Pz08Njs/QT07Pzg1ODw8QERCREFCQ5WqoKapo6mqqKmjoamgpqinrK6lqaWpqpSSl5mUmpqanJiYmZyamJmqoLGit6Swpp+enZ2XmJWZnpqco56dimJXXmVgV01RRz0+P0NDPz5CUXipramqpZ+en6KjnZ6dmp2blJOVlJ6dmJSFnZqgmqukq7KwubKysbKxur28vLm2uMO+v8K/trq7wMS5vbusr6exrbHCtrjCxsDIysDJv7C5ub25wr64tLvGxL3DvLezqrOtqrO0r7Ouqq+jnayotrGto7CmoaOwsa6wpKWvo6GgmqGnoaSqqpmdoJmao6CmqKGcnqKemaSenpiYo6OhpJ6mmpuipJ6fm5ubnIeGgXx0cmtsdXJxaFdcUUZVSERKUEk/RUI0Rkg5NTw+Nzs8Pjw8Ojo4OTw4OTs4Ojo4Ozw3Oz49Pj02OEA5Ozs9QDw9QDk3PD07Pj0+PUI+Pjc6QUA+PD45NTg9Oz1DQEFDQkGRqqGlqqelqqimn6KnnKasp7Gyq62jqayVkpWalJecoqGbnqCinJ+psqu7sr+rr6ylnqCgnJyYmp+gmqCflXxfXmVgUUZEO0M+Rjw/OTZOfqqzp6OjoqCepaumnpeclJGanpmVjIqGiIZ4bYigpKKrrLS8tsO9vrO7wcPCxcC/wsbFxcPIwsDFx83QyMvDsre1vrK+xbu+zM3FzMzM0se+v8DDvsfGwrfDysnDwce/urS6u7W7t7C2sqq6sq68uL+7uqu4rauquLu1vK6uuKOmo56mpaKjqaaZm5+Zmp2nqqegoaGkmJSjlpSZkZydn6Sep5+en6KdmJmUmJSIhX56cmtkaW94amVaW0ZMTUVEVE1FQ0U3Oj87NTQ5OTc5Pj87PDs7OD48Njo9OTw9OTw9Ojs9Pj4+NztBOj45PT45PT44Nzs6Ojs/Pz1CPj83OkFAPTw9ODY2PDo8QT9BQUE+kqugp66ooqulpKKipaGlqquwsq2upKmmlJWWmpaUm6SmnaGqp6KrrLy8v8PBsrK4p6Ghq6qhnJ6hoZ2bmn1zamFXTkU+SVl8b2FCPVyOrqygmZubnp6Zl5eXko2Pl5eUj42QjIKDgndycW1wj6atrrS5xbvNx8u+wczNzczIyNDMzMzHysXGzNDS1c7Tyb3Av8O7xsXIxdHTzdPQ09PMysHGxsbKyM/AydHNx8bIxsK8xMG+v7+2vrOtv8DDw8fEx8Svv7myuL3EwsK6vLy1rqenraigoqmlmpagmpmdqKupo6SknpePm4uQmYmVmJugn6OdnZeempOTi5WPhYF5dHNlYmdyb2ZeWlpET01ERVBJRENBNTU1ODlCPTY4OkE+Ozs+PDk+PTc6PTk6PDg8PDw7Pz8+PD0+Qzw7OkA9Ojs6Ojg4ODk7QT48QD8+OTtBQTs7Pjc4Njo8PkI+Q0FAPpOvn6ivpqiro6KloKampKuoq62qrqKqo5Kcl5ebmJuirJ2frqalsarFxszOzb+wwaikqKytqqCdo56cnZVqZl1USURAP0qFnqSZg6CyraOenJ+amJeUkpSWkZCPjIeEhIiGg4CBgYB5cXJvbHmktrq5vsvB09HTyM3O0dPR0tDQ0dHNzs/Qxc3U1djR183Gx8nMw8XKz8rT19HX0tXW09TIzMbMzcnTzc7TzcbJysrCxszHycnGv8Ozs8jFy8vLz8fKv76/vcHHxczMycnAw8Cur7OonqKqo5qTnpyYnqaprKSlppaXipWFkZSHkpKSmZualpiQm5aQjIaRi4B7cnV2Z2NndmpkVldSRE5GQElRQz5CPToyMkE8RTw3OTxCPTs9Pzs7Pj05Oj48Oz44Ojk5Oj86Pj1APkA8Pjs+Ozk9PTw5Njo6Pj08PEA/Pjk6QEE6OT44Ojo6Oz4+PEE/QT6QrKKiqaanqKSfop2qqKOso6OnpqyiqZ+To5iWn56dpK6bn7CrqKyxyc3U18/Gu8esrbO3rK6jnqOinaGbYlRMSkRDP0NSr9G9sq+mnJycoKShnZqUk5WUiX14cWtlYmhycHJ7hYqAdXBucXNwhbPDvsXR0NfW1dLWzdTW1tTT0dLT1NLP0sPQ09bY1dXSy8rO0cvGzdHK0tXW2dbY09bYzdLKz9HMz9HM09DAycjKxMzMzM/PxcfItsDLwNLNzNDGysnAxMPIzs3Q0c/NysjNuLe7qJ+lq6efmJ6jnp2qpa2pqKiSlYiQhIyRho2MiJOVmZCWjJiSj4aHjIR9eHN2cGNgZXJjXVJcSUtHQUVJSj47QTg+NTU4Njs4Njo8QD07Pjw7OUA7OTo8Ozs8Nz09Ozo+Oz08Pjw/Ojo8Ozs5Oz89OTU7PD48PD0/Pz46O0BCOzk/OTg7PT0+PzxBQEQ8hqugnKegp6Oim6CbqaSlqaCfoaGmn6ifmKSimqmmoqarmqOwsamotdDU19rSx8bLtLXBxbG1qKGkpaCioVpJQEFEQUZRdrGvppqUl5+cmqCgnpucmpWJd2ljYV9fX19eX19dYWx1c3Bwb2xxcXWSxMjH1NbX19bT1tDV1NnU1M7P1dTU0dHM0c3T19bT1dDP0tPRydPRyNDY19jR2NLX2dTWzM/Pyc3Sy87RwMbDyMbPztHR0sjMzcDLzcbUz8zPyMTLx8fIzMvU1NHVz9LM08K5xbGlqLWup5uoq6Wdsqiws62sk4+TjoiLjoOPi4SQjpmNk4+Zj4+ChYx8enFzdG1iY2ltX1ZRYEpKQ0VDUk1APD40Mzo9NTI4NTU8PEA8Ozw6OTpAOjg7Oj46PTg+Ojo8QD08OTs9Pzk6Pz07PTw9PTo2PD0/QD08PT0+OjxAQjs5PDc0Oj48P0A9RkFEPYKknKClnaWlo5mcnaSeo6OfnZ+doJqnnpyhqZ+vraqqq52lrreoq7fX1NXZ2dHO0L+8zMm2vq6mqqiho6tmQzg9PkRYgqqon5eVl5manJ+dmJyckn1xZWNiX19hX15hYF5hYF9gZW1wcG5rb3J2d5zMwdPV09jY1tnR0tLXz9POy9LN1dTRys/M09bS0dbNz9XV0cXR1MrQ1NXWztPR2NfX18vIzsTJz8zKzMDKwMnKzs7Py9DOzszPz8jM0NDLzsvDysfJzcvM0tPO1NLR0NDKvci5sK67ubWrtrCtqLits767sZqPoJSRjo2IjpCFkY2ZjJGRlY6RgIWJenZvcG9rYWRucGFYXFpKRkZETVhFO0A9MzM8PDg3ODU1Oz5APTk8PDg8Pjk8QDtAOj04Pjk4Oj88PTg7PkI6Oj08OkE9PTw6Nj08P0A9PDs9Pjg7QEE9Ojw4ODs+PD4+OkVCRT6Bn5mlp6Cfo6eam5+cl56eoZqdmpyappufpKefuLa1taykrK6+tLDA2NLX2tzWzs3Kw9LPwcGxqaytqaSxe0hGQjtXjaGblZOWm56enpyTlpeUiGteXl5hZGJgYGFhYGFgXl9fXlxibXJvb3N0dXZ5pL/M1dHW1NPY1s7O08vOzsXOytLSz8fOzc3Uy87SzcvX1tDM0dTLy9DS08rO0dXS1dXKwMrBxs3CyMrDzMTGyMvLz8rOzdDO1MzGyc/NycfLxcfCxsrMzdDSx9DPzs7M0MXHwbi5vcPDvcO5s7K+sbvDxLWqmKWhmJaSlZWSi5SNmpGUlI+PlYKJhnlxcmttaGBgcWhZWGhWTUdMSVBRQjtDPjs2ODo4Ojs1Nz09QTs6PD05PD05PT06Pjo8ODs9OTtAPD47Pj5BPDk9Pj1CPTs3NzU/PDw/PDw7PDw4O0FAPDo8OTs7Ozw9QTpFQUU+hJ6bqK2epKSqnJ6fmJKXm5+am56ZmaKVoamppcTCwb+7tbKxx8K4ytXW2drb2MzMz8jW1cTCta+0qKCtl3hsb3B3j5qNjJeVkJORkZWWlZCLfGVhYmJgXV5hY2FgYGBgYWFfX11bXWdycnByc3Btcnmlx9PPy9DQ09TJxMjJxca/w8XPzsfFx83K0cjLzs3G0dLQzszUysfKzs/Hx8/Sy9DPxbrEv8bKvcPIyc7Fw8fAx83IxMzKzM/IxMTQycbCxsnFv8HHzMvMz8LLzMnHy9DFxce7x8PJycLPwb28v7DByce5vKqwsqelnaKcmJCbkKOZl5mRlZiJj4J4b3Vka2BeZnFhW1dgR0hIR0lNVEc/Sj02NDM1NT09NDg9PT06Oz08OTo7OT89OTw7PDg6PDo6QD1APD09Pjw6Qz48Pz04ODk6QD4/Pjw7Ozs7ODo+Pzw7Ojc5PD49Oz49RkFDPYOgm6qupa6qq5qdoJeUjpedmpmgmpqcm6WysazJzcrIxL68uczMxtDV1dja29jQyc/P0dPIwre7u62ktn5ngoWiqpONjZaPhYODg4F9hIR+c19bXl1eYF5gY2RjX11dXl9gYF9bWlxgbHJxbm9rbG9vfbnRyMnKz8vNxLq/w7q7urm9yMbCw8DDyMrIyMrIwcXMxsjKzcnEwcrJwcHL0MXLyL+5wbzGx77Axs/LxMDDu8nHybzJx8XKwb7Cy8bFxL7Gvb3Bw8XMxca8wMnDxcfSxMHJv8rKxsjG0cPDxsOuxMvHxMq3v7y6tKmspKWYn5iso6Gmm6Ogm5V8d3N1ZmpbYW5tWlxYUkRMR0JHRUxERlNANTQzMzVAPTM6PDw7OTw8PDg7PTtBPTo8Ojs3Oz05Oz07PTs6OD4+PEI+Oz88OTk7Pz07QD48Ozk5OTk6Oz06PDo2OTw+PDs+O0NCRD5/pZypsqm0rrCdnp6YnImUm5man6Kfmp2ov7i8ys/RzMfCw8bNzs7M1c/V2djZz8vSzc3OyMG1w76ysLZsXnl8n5GKkpaGeoCFhX91eHVycF9aW11gYGJjZGRlZGBcXF5dXl5gW1laXGJvcm5raWtwb3OPx73JxcvAxsGwtrmxsbOyscK8vLy6uMDBwcS+vbm9v7nEysXGwr3GwLe7w8m/wcm7tru6xsO/vMLOw8a+vrXBvcO7vce8w7q0vcbEwsO3wLa2vr+7zMO9trrIu7++y8PBxsPGycfJxtDGwszHssfJw87MwcXDv72yt7Cyp6ioubClrbCqrayUenZ4a2VoYGhvZFZeWUpGSkZIS0FGQkZJQDk6NjU4ODUzOzo7PDk8PDs5Ozk6QD46Ojw6Nzo7Nzo7Oz88OjxAPUA/PT8/Oz07O0A8Pj4+Ojk5ODk3ODo8PDw7OTo8Pjs7PjpAQEU+fqygrLWqt7SyoZ6fl5qNlJaan52mop2et8XCxMjO0srKysfNzc7RyNDG1dTV183KzsXJxcfBusW9rK6mYGN1gZKLiIuEeH+Ghn99g3t0dGNcXF1eYGBiY2JiZGViXVxbXF5cXl1aW1xeaHNxbWdnbm9yeZ29y8HDusC4rbCwpqmtq6a4tLa0s7Ozu7a9sbewtK6yu8K8wcS8v7q0srq+wLjIuLS8tsHCvbi9x8HEu7WvsrW6v7TFuLu1rLm9vsC9sbu2sLe6s8a8t6+7v7W3tcW8v8PGwMTFxsfLxcDGxrvHy8DOycfDxsHDt8O9vba5vse/rLW7tbe2jnl0eGdnZWJrbl5WXmBGS0hISkZCREFFRT89OjU2NjYzMzs6Oz06Ozs6Oz44PEE9PDo7ODc5OTk7PDo+Ozk+Pz1APz5CQD1AOjo+Oz89PTk6Ojo4NTY7PT48PDo7OT49OT86PEBAPIi3pauzsby8sa2foJmUlJiXnqujr6qnpMbLzcjFyM3M0MvNyMnIysnKxNDN0s/NxcfBxcG/urjJt6uwmVtnb4mOhoiJenh+hoZ2d4F8c2hdXV1dX2BfYGRhXmNlY19eXFteW11eWltbXV9scG5pZmptbnJ8pMa/uLi0r6qrp56hqaaeqqyyraqsqbSttrGzqa6nrLO7urbDubq5sKu0ubu0wrmvwLG+vLu2vMe5w7etqqiwssC2uL2wsaixs7W7vKyutqautq67srGqubCuu668uLzAwL66w7/Gw8XAvMbCyMu4xcfFv8fEw7rExsK7xsnMy7O5wr27s4l0dndraWBibGlZV1dbQUxLTUpFQUNARkE6Ojo5OTY4NTQ6Ojk7PD07Ojs+ODtAPD05Ojc5Pjk7PDo4Ozs6Pj45QT0/QD87Pjo7PDo9PDw4OTg5NzY4PDw9Ozw6Ojs+PTs/Ozs+QDyKwKuouLe5w62zqZ2ZlJaZoZymsLWxt6bFztLLw8XBxM/HzcHCxr/ExMPDysLJyr/AvMG6s7W1w66qsJJbaX6SiI6Pe3h9iYV6e4SAd25eXVxcXV9gX19kY2JjZGJgX15aW1paXVpaWVpcZW5vaGZnaWtucoGturC1raWjpqaZn6SfmZukqq6kqKKrqqyqsKOmn6qttbaxvLivt6+orri0tLy4s7yvuLm1srzBssGvpamjq7Gys6i9qquoq62utbSmqK2hpK+psqaoqK6lqLessbO3urq7sry+vr7Ev7XBwcfIt77AxbfFw8C7v8TCvsTIzMq/v8TAwKmHc3RzamlcYW9kV1ZYUEhaUlNLRkZFPj9AOjc4OTc3NjQzNzo5OTo8Ozs8PDc7PTs7Ozw4OT44PTs8Njo9Oz89N0E+P0A/Ojw8Oj05Ojs6Nzc3ODg3OTw7PDs5Ozo8OTc5Pjw+P0E7jMKvrry3ucSwtrCbmZWcmKqpsLGztb2vxdDPzcPHubnLwsu+u8m2vcO+usq3wcPBtLa8trGvtbytqauSY22Ig4eLgHp9f354dH58c3dlX11cXF5fYF5fY2NhYmBgX15dXFpYWVtbWVhaXF9ma2ZkZmVoa29yhamlq6Sdm6Cjk5yjmpeQoKKpo6Kfpaanpq2gnZukpqyyr7e3p7CsqKq0q7S6sba2rra5srC6urG3pKCkoKaxqKypuqqlp6eop7OtoKinn5ykpqyfn6ekoKGxra2ssrWztLG1vba7wcCyu77DwbG5ucKzwb3Atbi8vb68wsfEw8S/wMSghHhxbGJmYGtvYFRZX0hOaE9USEZLRjw9QD06Ozs4MjY1MzY5OTk7OTo6PDo3PD88PDs8ODg8OTw6Ozc4Ojo8OTg+Oj89OTg8Ojs+OTc3NzY3ODg2NjY7Ojo7OTo7PDg1OTw6Pj5AO43Itba9uLrAur21oJ6UnaGmurars7O7s8TPycvCxri3x8DMv7jKt7vFuLPFuLO/wKy1vLKspq+0raGjkmlyhoWGgHx4dXNvbWppaXBpX2BdXFxcXl9fYWNiYGBgYF1cW1xcWFlYWFhWWFtdX2RjY2ZnZ2drbW6HnaielJSZn5SZoZeVi52goaacn5+kpaKnnpuim5+rsK2xtaSpqqqsrKS0uK23sKyztq+zta+wqp+en6SisqWmqrmtoqamoKitq5mgoJ6ZnZ+lmpqjnJyesKmsqKqsra2ws7mvuLm6sLa8u7qrs7O5s720t7GxtrW/tb3AvcPCu7u9l4R7c2xfZV5kZFhUV15JV11LUEdKSkdBPD8/QTs/PDA1NTM1Ojs5Ozg5OTw8Nz4/Oz07Ozg4PDg5ODw3ODo7Ozo7Pzo9Ozc4PDo9PDc0Nzc2NzU3NDY2Ozc5Ojs6ODo5ODo7OTo8PzuJyba4vru4wcHBtKSkmZqkpsCyr7astLfFz8jIwMa7u8PDz765x7i3v7eywrSxu7usubqxop+pq6eYnpBtfoWGf3hybW9ta2JeYWZmXV1eXV1dXF1fYWFiY2NiYV9cW1taWllYWFdXV1hYWFpdYmRkZmZmaGlrcoynm5GSkpmVmZ+UlY+boaGonpudpaaipZugoZqZr66tr7KhpaOuq6iitbCysqypr7OnurOmtqGjn5yjoa2joqq2q6Ojpp6mpqOWmZ2XmZudoJqXnZydnK2hrKijpKatq7O0qrWwsquzubSvq6+ysrO4s66pra6yt7C6trq9wLizsZSGeXVmX2ZfW1lWU1pVS1tRTEpFSEtJQj0/QUFAQToyNDUyNDk5ODk7OTo9PDY9Pzs8Pjs3Ozs3Nzc+Njo+Ozo4Oj07PD06Ozw6PTs4Nzk3NDY1NTQ2Nzg1Ojo4Ojk5PDg3Ojg5PkA6gci9uL2/tr68v7OdpaOYpbHCtba9rbS4wczIxr/FtsHAx862wMO9s7m5sr+2sbm7rbK0r5+ao6qglJqPeH+DhH94b3F0cWhlY2hkY1xcW1tdXVxbXmBhXl9fYF5cW1pcWllYVldXVlhXWFdWV2FkZWNkZWRkaGp2oJqRkY6SlJWdlZeTlp+doJyWoaGopJ+fqZ2bm6umr7CrnKOkuKmgoK+ot6unp62wpLewpLego5yZmaqmoZutubCjoaScoqCfk5ShlJaWm5mYlpeclZ+pnqqkop2jqqqxrai0rKqnrbOwpauus7GwsK+vp6iosq6xtLC8tLq4rqOVgnp2ZV9hV1lYU1JUS01eTFBMR0hMS0U9QD49Qjw6NzY1MzQ5ODg5OTo5Pjo4Pj47PTw8Nz49Njc2PTc7PTs5Nzk7Ozw+OTk6Ozo4Njc2NTQ1MzEwNDU2Nzk6ODo5Ojo3Ojs5OT1AOnbAvLS6wrG+t72unaenoqq7wL3Aua60uMHMx8XCw73FuMjMssHCwa68u7W7vLW5ubCvsKqcmqGplZGKi4CAfHdxaWxydHBoaGVkZmFcXFpZWlxcXF1eXVxbXF5cW1xZW1taWFZXV1ZXWFdXV1ZbYmNjYmNiYmNmaYCTj5KKj5GSmJabk5San5uelZ+fp6akp6ignZ+moKuvpqCio7eooaGiqbOipailsKaxrqy1nqGdlpWpoaKUrbGxn6Ojnp6Ym5OLoZSRk5iYk5eYmJeep5uooaKapKWlq6SlsKelo6usraaprq+vq6iqqrOmpquvtLGuvLaxsK+gknt4c2ViXFtdWE5MUUhSYU1WUE9KTU9FQkQ/OT02OTo3NjQ1OTk7OTg4Nzs4OT0+Oz47PDY5Ojc7Njs3Ozs6ODU6Ozo7OzY8Ozg4NDc3NjMzMjEuLzI1NTY7Ojg7Nzg3Njw7Ojs7QTh4u7uxtr2wu7G3rJ6lpqy3u7zBxbqxubXEycnAw8bFx7bGxLPBv8Wrt7e9tr26u7WyrK2omZmfo4uKdImIfnZuY2FmaWhmZ2lmaWxgXVxbWlpaWlxdXFtcXl9cWllbWVlaW1dVWFdUVFZVUlRSVWBhX2BhX2BgYmRpf4+Ph46LkY+RmpKTlaOZoJacoKWhraalpaSko52qq6Wan6WxqqGhnqWqnqiin66sqqmtraKiopWXopqckKupsJyfop+fl5iTiZ6RjZKTlpCYmJOcoaOcpKGilaCipKWbo6uloqOrpKutpa6yqqalpqa0pqqorbO1tLm6sKusnoxzcXBgW1dWVlJGUE9IWlxPUkpUS1NMRUdKRDg7Oz48OTY2Nzo5Ozo5NzY5Nzc6Ozo9PDw2Ozw4PjU5ODo4ODY1OTo7PDk3Pzw5Njc4NDUyMTIxLi4xNDI2Ojg2OTg1OTg5ODk7OUA5e7W0rLS7srCrsq2dqKevubmzwMi6tcCvxcjMusHJzMi1ybyxvcPJrbG4wbW8wLy0taqsppaanJyJgXKIg3t0aWlqbGdqbG1ramxlXVxcW1tcWlhaXVtbXmBgXFhYWllYV1hXVFZWVVRVVVJSTlFZXVxdXV5eX19iZG2KjIGOg42NjJeRkpGcmqGcm6CoqauorKeppqSZpa+klZmlr6mgnJmboJ6umpyrtKCmpp+jpKGUk5uWlpKpqq2bnaChoZuUkIyZjoyRjJKNlpWQnaGgo52co5WboaOhmKKoo6Koq6CrsKSuuKajpKOsramoq6+0t7K9tbOrr5iFdXRpW1hZUlVSRVhMUVtYTVVPUUxRUklOSkI9Pz9BPz03NTc5OTw8OTc3Ojc5Ojs8PT47Nzs7Oj02Nzo7ODk3Njk4OTo2Oj05OTU3NzU3MTE0MS0rLzQzNDk4ODo6ODo6NzQ4PTg/OX6zraeztq6oqK+um6morLe2rLzKu7a/rMvGxbjBzs/Hs8S6t7vCyLGtuL+3vL67s7amqaCWmJmXiHp0gHZ3bm1obW1tcGdnaWZkXVpbW1tbXFtZWltcXF5fX1xYWFlYV1hXVlVUU1VWVVVTU05PUVlaWlpdXFxdX2BkfIl/iHyJjYeQi5WPlpihn5qgq6qmr6yosKWpmp+toZWWpKinnZiQj5qer5eZp6qZoJ2UpaGfkpGSkZOVqKulmpmZnp6WjoyLk4aJjYOPi5KVkaCeoaSZlp+VmqGinpSbpaWnqaigsLCmsb2ooKOstKqup7C0sLm1wLGusauQfnJ0Y1ZUVk5SSkdWUFJSTExYTkpMT1JHTUtBQ0ZERD5BNzU4ODk7OTo3Ojo3PD06O0A+Ojk7OTo/NzU5Ojk4NzY5NTg3Nzk7ODU1NzY2NjEzMjAtKi4xMDI4Nzc7OTk7ODk0ODs4QDh/tKymsbeqpaKxq52pp6mysKS2xrS5urPKxbm6wcvQyrK2uLy9wMOxsLG3rrS0u7O0o6OdnZiXlYSAdmtnbG5xbnJqb2tkZWdlXlpZWllaWlpaWlpaXFxdXFpYWFhZWVdYV1VVVFJTVVNWVFJOTk5SV1haWVlYXFxdYWp9d3xyhYuEjoeViJOSl5qYnqibn6umpqyeqJmgppyTj5+jmpeXhoWSm6SQlaOdlpaWiKKbm5OMjoqQmqWnnJWVl5uRkoeUjouBjI2AkIuSkpKhmqCilpSYmJWippqNmaSnqaehoLSyqLO4oZyjt6ypraSzsqa1u7WrrLGjinpzbl5OUVFNT0ROTk5QS0ZOTkpKTk5RSU1KQUhMSEhDPjk1ODg4OTo7Njk6Njg7OTk+PDg6Pjk7Pzg3ODk6ODg2ODU3Njg4OTc0NTc3ODIwMzAxKyktLzEyODc2Ojk5OTk4NDk4OEE3d7ampLexpaekqqWgqaaks6qissO1tbKzxsa2usPKzMazrLm9tLjAr66psJ6mrruvraCam56VlYh8hG5fX2ZycHZxaW5pZWdoal9YWFhYWFlZWVpaWVtbXFxZWFhXWVlYVVZSU1JQUVRRU1VRTU1LTFNXV1ZYWFhYWl1hbm9zbYGFf4V+j4KNiZOQkp2hjpqco6KkmKWWopyVjYiZmoxzjYN+jpeWhpKakJSOjnuZj52MgomAipigo56Qk5iWhY6DlH5+dIqOepCIk5CQnZuampKWkJ2Oo6OOiZqgoaSkm6K0r6ywrZ+YprimpbChsa6csbyqqa+qmYN4dGRWTVJQUE1DU05MUE1CUFFISU5TTUhKSkRLTUZLSz03NDk4ODg7OzY5Ozc6PDk6Ojs3OT85PkA3OTo8ODk3NjQ0NDU4NzQzMTI1ODUvMDEwMikoLC0wMjc2NDc4OTo6NjU6ODdBN3i3oaO0qKalqKOlpaamprKnprTBuK+0sMnEt7nBzsa+s6y6waytxK2ooqaSnaa3raOgkJaXkpB+eH9mV1ZfZ2ZpZ2huY2lpZ2JcWFdYWFhZWVlZWVlaW1tbWVlZVldXV1NUUE5QTk9PUFNUUU1NSkhOVFNTVFVVV1lbXWlpb2p8gnpyTVdxjoGWhYycl4uTkZ+YnZWUlpSPloqAlIlfO1ZvfIyUioCMkoyQhoZzi4WXgXmBe4aUnZWDlY6RkIOGfZN4cXCGjX2JgZCOkJeamZOLkIqciJ+YiIiWnpqhoJenrqmtqKielq2zoqaumaysmKi0o6mto5N/dG5gW05TUldMRFRKUE1MRk5PSUVMUU1LT0pJTVBGSUo9NzU5OTk5OTo3Ojs6Pj44Oj09Nzo/OD4/NTg5Ozc5Njc1MzMzNzYwLi0vMzQ0MTEwLy8oKSsrLTM4NTQ3Nzk8Ojc5Ozg2QTl5t6CjraGmpqmgpqmno6qwqKe0wbmwtbDHwrezvc+/ua+utcKnqsSqop2Yg5ScsaOamIeUkIuHfnN2XVBMUVVZWlddXmJnY19ZV1dXWFhYWVpZWFlYWVpaWllYWFZXV1VTUk5MS0hHYlxNTlFNS0lGSE5RUU1PUlRWWFpga2xmeH9yT0E/f5WRkHyIlIyEio2bjpaViZKIhpWHeYl/YEpRbniLkoR+hI2LhYB/bX9/lHd1dniEjZpwUY2IioZ8fniUdmh3hoh+ioiVi46Rk5eMhIqIlISbjYOEkpuWnp2UpKKoqaWknpuwqqGkpJKmqpaiqpyhpqiJdm5nXlxIUVFTTUlVTVNJTEtPSUhGSk5MTVRLUVFPR0pEPTc2OTo4Ojs7ODo7OD4/OTk+PTg7PDY7OzQ3ODs2Nzc1MzQ0Njk2LzMvLjEyNTIyMS8sJykrKiw0ODMzOTg5Ojk5Ojo6Oj85d7aco6edn6Guoaeopaeor6yqtry2uLezwbu2qLnIuLaoqLW2qrK8p56VjX+JlKmWlYt/joOCfnhxb1hNS01OT0xNUVdbXFpYWlVVVlZWV1lZWFhZWFhZWVlaWFhWVldVU1BNSkVAQJtrc3NJTUtERENJTk9oWU5RU1RWWm6CcXR8aGdbU4+JlIhzfoaBfIWMk4KSmYuPe4aPgHaAeHNvdXF0jo6Ben6Kq4V6emh2e45wcm14gYuNknh7gHuAd3NzknhndYWEhIV8lYqIio2LgH+Ei42AlIR8gI+YlJyWkZ+dqZ6foZ2gqaWenZiNp6SToJ+Wnp+kgXNpYl1dSldQUkdLWFJPSk1MUkpKSkxQSExRTFJUTUZJQjw3ODs5OT49Ojs8OThAPzo6Pj03PT03OTkzNzc4NTY3NTI1MTQ3Mi8yLiwvLzIwMC8tKygoKS4xMjcyMTk4Nzo4Nzc1Ojw7N3aumaOhmJ2ftKmvqqWtq7Cxqr20sru4trq0sZ+3urKqnZ2sqaiyr6KakY2UgY6cjpF/doZ3fHZvb2pZS0hISEdFSEhQVFRUV1dTVFVVVVZXV1dYWFhYWFhYWVlXV1VWVVNQS0Y+OTNOPH6eTUhKREA9QURqlH5MT1FRU1ZedIJ7d2V1i5WYjY58Z3iAdnh/iZB9hJiSgHGHj3x3e29rfq19dJCLf3qGkoB8f3RmdnyGbG9oc3yKjYeAbXlxfXFtdo9xaHGBfo5wRIuFgoOFf3d3eoyGfYx7dX2Oko+Yi5Kam6OWmZ2anZ6hnJaNi6Wbjp2XjpaYkHhvbmdjW1hYVVFKU1VUT1BOUFZLTktPT0pST0hOUExGRDw7Nzk7Ojo/PTk8Ojk5Pz87ODs9Nzw5OTk5MjY2ODU2NjMzNjExMjI0LiwsLS4uLTAtKyonJyouMTM2Mi84NzY5NjY1Mjc5OTV5ppegnpagprCsrquoqbGvsau8uKy7vrizrKebsKesm4+WnaWppKGYmY+FknmJj4uLdnF8bXVwam1qWEtGR0VBQENESExMTVFSUFFTVFRUVVZWV1dYV1hZWVlZWVlWVlRTUUtENzhmNzA/qGlOSEM9OzpEioV6WkpOT1FUWF1lcHFrh6aqwH50eGJ7d257eYiQeXyLhm9tjJJ5dHlqaoCCcZaRjIF9lX9JkpluaHd+gm1qZGx5hZCShmtybHxucnyGaW1wf3ONiYWGe35/e3dwdHSGgnmBeXB8jouKk4OWl5iakJOWlpmXnZaMg4mfkouSjYaQl4Bvam9vb1lWWFRSUVlPUlRUUlhVTU5ITUtNT0tDSU5HRkA6OTk7OTk6Pjw5PDs6Oj0+Ojg6PDk/ODY4NzI3NTY1NTQxNDMyLzAyNCorKiotListKigqKCcsLTEyNTAsNTU2NzQ4NUhBODk1d5mRm5ibn6Str6Ktqqi1r66stL+rvMO/paKalaSYno2Ei5ShoZiZkZOLc456gIaMhnRvdGtwbGRsallOREZDQDw+PkFGRkdLS0tNUFJSUlRUVFRWVldXWFlaWVlaV1ZUU1BMRTFAmjMganNDmW87PDk1PICChl9JTU9PUlZaUVlcX6eHYZlocnlkfm9sf3qLiXaCiIZ0bJqSdHR8amqdjk15hZOJhI5mMXaHc2x+foN0ZmV1f4SEhYBmaWx1a3CAfGhxcXxuk42Pe3R+fXFxbnVtgn93eXVqeYiCiImDlpKSkIuNkZSUjpeNgHmIl4iHioaAkIh4bGtwaGVYUlpYWVlbTVBVVllYTklIRUpKSEdDQEdFQ0c9OTk4Ozk6OTw6OTs6OjpAPDk6PDk4Pjc4NzcxNTIzNDUzMzY0NTAzMS4qKispLCwrKykoKycpLCwyMjYsLDQ3NzU0NzhpTzg7NW6SiJqQmZajqK2esZ6nuq+rsrDCsbvDx5qWj5SZi46FeoSQmJSNkIyPhnGHgnSHjIZ5cHJwb29kcWdfVEZJQz48Ozk6P0BBRENFR0lMT1FRUVFSU1RVVlZYWlpZWFZVVFNQS0U4MC9cYLNHOVhQOzk0NDGWuotITE1PT1FVTEFJUUlir7KfcXp3a3xscYKBhYF6hIaGeXKglXR4gHN1lIc1cZ2onY6hoYSihXZwh3yHfHOLrY2JgWhnYmpucm1wg3Vpb1h1cI6bkXZtf3t9bXJucIB7c3ZuYnWDf4aAhZCQioqJkYuRi4uOg3V4io6AfoOAfY57c3FxbWBbXV5cWllhX1JOW1pYV0tISkZJRz9DQUJHP0NEPTs5Nz07Ojs7OTo5OTs6Pzw4OD06ODs2NjY1MTEyMTI1MzQ3NDUzMS4vLCwrKSopKSoqKikoKikrLzNETTIxNjY2NDM8dlI3PTdikoGSiJWRnaSnnq+VpbSprrCuwbK7wcWWkIyUj4CIfG6BkJKJg4qHj4Z1goRslYiIe3R4eG13bndkal5JUEc9Pzc0NDk7Ozs9PkBCRUhMTExMTlBRUlRVVldYWlhWVVRTUExFPDUqnUtbQC1nSTk0Lz+Sg6muX0dMTU5QTDdDTVFTREuGdX98e3V+bHaIiHx9hIN/jH51opp6foaBhJmEmpxhhqqfnYqDkI56d4l+iYiOc4qXj4R7XWRxdHp8d4ptaGpieW+FkIJ6b4F4dYV6cHR6eGtuaV12hn2HfIeGjn+KkpeDjYWMhn1xhH+EfXZ3e3yJeHF0dWZnYFtbXlNcZ15XUFRYW1VHSkpFS0c/RkBEQz5BQT07OTc8Ozs9PDo6OTk7Oz0+Nzk+OTk4NTY1MzI0NDAwNDY0NTU1NC0sKSsoJycnJigoKSkoKCsrKy8wMFVxPTIzMzMxRX5XND05XIx4in+TjJGcnZ+mkaCqoLGor8Cyu8W6lo6RlId7hnZrf4yRgn2Kg46MeIOAc6CEinx8gX9wgX16aHZsUlhMQEUyMTEzNjY2ODg6PD5BRUdGR0pLTU9RUVNUVVdWVlZUU1BNRkA6Mj0gI5ZjjFs1MzExaT9Hb0lGSUxNT1FMS1RdWVJLaIOIe4l5e3F8j4x6fImHfpeHdqGaiIePkpSlja2pSIaur66LgYCTioKLgoSSqYeAmJiKnHRtfIGGh36OaGdoeX9uhYeChXGEhkhsgHdyeXZobWtfdn2CiH+HhIt5lJybiYuIkX96dYp2fHhtb3d+gHV1c21cXl5bY2NYZ2ZcVFBQV1lQRExLRk9JQ0ZDQ0BAQ0E9OTc4Ojo6Ozs6ODg4Ojo/PjY7Pjc1ODU3NzMzNDQyMzY2NTY3Njg7REZMTU1MQzcrIiUnKykrKywvMDArbnUyMjQyMEyBXDU9PF6EdHx9iYWHkY6Wl5KWoJ6soKa4r7O9s5eNkouYi310cH6Jkn59jIOSlH2Gfoakh4h/goiFeIeIfnOEeF9jV0tCNjAuLzIzMTI0NjY4Oj0+P0JFR0hKTU5RU1RVVFRWVVNRT0dDPzgwLCOHWz8/ODQuXZZwc6NVRklLTU1QV2BYcFlcXmmMk4aUgISBhZGSfoWIkYCalYKhoZiVm5qmrZOZu7Gnu8fDqIuMoaWPlImBkXxxg56fkZ1/d4WFi5CHkGlocISBdIyHhIpyhoJ3h397doR8bnZ1Zn+UjoeIiIeIh6CqopaJjpd/eoGIenlwZ2t4f3t/dWxlXltbXmpeYmdgWk9MTldSUUlQSkROR0NKRENBRERBPDo4Nz08Ojw6ODg3Nzg6PT04PD02ODY1NjYyMzQ0NDU3Njg2NzxCQj88ODo+Q1FeZVxHMicmLCwtLS4xKD+LWy4zMTBPg180PztudXBmd4N6f4x/gZCOipqbpJ2hrKarr7CXkZGEoZSEeHd/jJR8fpKGkpV/ioCSm46DgIGMioKJjYN/ioBtcGpdQkA0LS0vLy4uMDIyMzQ3Nzg7PT9CREhJTlFSU1JTU1RSUE9IREI8ODcvOUM+PDw2My5sk5dNUEhJTExLTlZgY39mZ210m5qOmZKSio2OmYiSj52LoKCSo6qlpKyTqbaiqMHCrseveLqUmnyNoZ6ZhJOFgo6hn5SZkYWKhY+ZkZZscHWKjIKWjI2Od4+EcW2FgYqWkYOFiHGIoJWGkomNj5aktKmbjJSig4eSg31/a2pqfIGCg3VjXmRgW2dsXWxsXldLSE5SUU1MTEZJUENETUZCQ0VGQj05OTc9PDo7Ojk4Nzc2Nzs6Nj06Nzg1NDU2MzQ0NTY2NjY4NTU2MzEwLiosLCkoKS46UGFcQCwoLSsrMCwncog3MjQwT4RiM0A8dW5nWW+Cb3WGcXaShn6XlpqUnp6cp6CplpOYnmdlpJp+hJKReX+SiJGSfYqEmJKQgoCAi4yJhpCHhYmFeHh+Z01SPi8uLiwvLi0vMDAwMjEyNDY3Oz9DRU5PUlRQUFFTUU5QSUVEPjs8OkRGPz48NzUyPD9SNUhISExMTU5SXm6KfHOBfZ+cm6eloZmhl6KUnJ6onqirn6isqaq2l6u/q7bIyLfI0M++m6Bwaaupn4STkoWcoJqbmaaSkYiVopubeHp+lJiTopOXl4GUnnt3lZKrsomNl598lJ2bjZKVmKOhprWvnJCYqIeWj42AiGxzc32BfXNpYF5iYGJoZGBnZlxSRUpLUE9JSUxGRk1DSExGR0NCR0VBOjg1PDw4OTk5NzU2NTg+NzU9ODQ3NDU3NTQ1MzY5NTg6NjE2ODYzLzAuLSosLy4tJyMqO1hiQigqLDEtKEuXXjA2M1GFZjJBQGlhXlBwdGBtfGF3jn17lI6Oip+Sl56Wm6qYnqpCRH2HiYeYjXiCjYqOjHyKho+QjoGCgImLioSShYOGiYGAhnZeYlA0NjAtMS8sLjAvLy8uLjAwMTU+QUFNUVJUUVJTVFJOU0xFRUA8Pj1GR0BBQDg2NjI8OTtGSEdJSk5PUVlthY93lIqipqm0vLikrayspqi0q7C2srGtu7Gzvpyzw6u6ycu3w7+4paKws6ytqqOLlpiFpqago5eBppmNoquopYiFlKShoKuhpKiPnLGLlaOmt7qboKKwkqKdop2Qo6Grr6yytaKUpKqImYiSiZV5en6GgGliaV1mY15kZF5nZ19bT0NJSFNORkhMRkpHRkZIQUtGQ0ZGQTs4Nz08ODg6OTc0NjU4PDU0PDc2OjQ0NjQ0NzM5PDM4PDIwMjU1MS8xLi0qKi8sLSooKiYlNVhYLywwLCwwhIE4NzFQhWg1QUNbWFRMaGJXaW9YeoV2gZOFiIKbg5KQjJLayJ2Wc1aXiI+InI98hoyOiop6h4KHkI6DhIGLhYaIkoaChImHiIeHcW5hQEU2NDwzLzExMC0sKy0xLi00P0NBTVVRUlNVVVZVTltQR0hFPD4+RkhDRUE3Ozw1Qzs9RktJR0hRT1BXgZKfhK2jsqmxwMbCqrPFtquzv7O4vra/tMG2u7qjuMWotsnHtb65tKijtK2wsZuZkpqfiKevq6WUdp+kl6GssrSZlqquqa62u7K6rLC1orGrsbW7t7WutKCnqKOnmqmvrLK5t7imm7apjKSOkZOfhniBhXdaY2VXZ2NiZGBhZ2BbVEpERExVUUhJSkRJR0VBQEBLREJNRzw4Njc7PDk3Ojk4NjU1NTcxMTw4ODk1NDY2NDk3Pj0zODkxLjAxMjExMzAsKiwuLCsrKyooJyopRVowMCovK2iSTzYwUodqNkFGV1FKTFtZUWJjV3l1cIGUfYSGk3WFf4CMe7+7o7yCtJSTjZuPhIiPkomIeYaAjJKMh4SBjn+BiY+HgIaIhYqHkXp4bl1WQEVOPDY6NTZBQjc2NC8vNkNIQlFcUFFVV1VcVlBfVUlLS0E/PkdLRkZEOz5AN0Q3P0JKSkVGVlNQXo+kraOxtMK1t8HLyLW7xL2zs8C2uMG1v6+3dLGzpbrEpLDGubGzsbSopLW2qrGgopebopKlsK6mraunpJigrLS7oqiyurW8v8y/xcW9vbPBt7m3vre6t7msrLClsKmtvbC8usLBq5i5p5StjpeXqoh+g35sWGRiWWtmamZXXGNZVlNJR0ZMUUdDSElBSEQ+P0JCTEBATUQ5OTY2OTo/Njo5OTY2MjQ2LzE5NTk5MzY0NjI3Oz0/NjoxLi81ODo5NjUwKigsLS0tLCwqKCgrKyhFUy8qMDBKj2s1MlCHbTY/RlJMQUxRVlNZVVp2am9+joSAjYRuenN4h2K5oZmjiZSUlpKUk42PlpKHhnuGgY2VioCEgYp6fIuHhn2KgoGLhJV9d3p1ZVBcZEdFTDtRY2FbXlNGPztIUEVaY1JSWVhaZ1lUYGBMU1BFQT9JSkhFRUFARDxFNkI+SEdKTFNaVF2Trri0urjIv7m9ycy7u8C7t7W7ura9tLqxxmB1sqSxmp6rvamlqKuqpKKytaCrqJ6Vlp+Zn66lp6aln6SToqextKeysr22wb7TycnTxsPFzMLKw8C+vb67vLe0r7i3tsO5xb3Cx6+euamhq46kqLWIgYFzYGNjX1hjYGpnUlhgVlJVSUVFTktAPkdEPUtBPUJAPUY+O0hBNzk2Mzc5PjQ4OTo1NzA0NS8yNjM4OTM3NDQyNj84QD5HS1JUU1FQT1FRUEpBOS8sLCwqKygoLC0sL1A+KC40OIB9PDJLiHE5PkNLRUBJTVBSS1FdZ2xrcI+MhI9zbHJyc4fVwLWZoI2VmJmRjpeSlpaOhod9hoOMlop+g3+DeHuLg4d8i3mBioKXfnR9emtmcHVZXVxQZWRiYGVkXVtYV1xNZG1VUm1tX25fWGdkVVlVSkRCS0tIRkhISEhCSTpEP0hLVFRWXFpbkrnAuL22xb+6uMnKura5tbe5sre1s662tphkdaicrXBeoqycmKCim6SeqqWUn6CQk46WmZennqagnpqZg6SerKWqsK24sL251NHP1tDKzNLMz87Kxr++wsq9wbzBwMTExcq+yM6zpLuwtK+aq7i7mH97bV5hXVpfYlpkY1BbYFNQS0NBRUZFPEBFPkFIQUBEPTpFPj1KPzM3NTM1Oz00Njg5NzcwMjIvMjQxNjk3NzU1NTVEM0VMTT41MS8wMDY6NDc3QElPSTstJioqKC0uLyxATSsvNTRtiUkwSIl0Pz5CREBDREZLT0RRXFloX2+WkZCUbmxvdHWHs6ugoZ+LmZyZjIyVkZuShYqKfoiHjJCLiXyBg3N7ioOFe4l0goqGlX9ze3lsbXV7aHJlaWxpZ2ppaGBmaWlsWm1zlq2kvIiGZ1tvaF1aWlRIS05PSktQS1NRSExBSkZKT19eYmdpYZe3x7C4srq9tbHExrWvuLCwu6uysaert6uMtqedmqeaTpqdjI6flpGmmKWVipOTiJCJj5GRnZuhl5qVloeemqebrK+osKi0tNTV1dbTzNDT1c3Tz83FwsnQvsnJysnRx8zNwtDRt6/DvMS5pbW6wqKDcGVeXl9ZYVhaZlpRXVhPUEJCSEVCSDtBQz5BRz8/QTc7RD5ASD00NjY1NTs6Njg3NjU0LzEwMTQ2Mjc4ODc1MzY3QzVCOD8tMC0xMzQ5PTk3LC4sMTtGSz0pLCguMDAwN0s/LTQ2VIhXMESHd0M7Qj5FQkFDSk0/VVlSZVZzkJCYgmhxb3l5g6CpnqaXjJqbl4uNlZGajn2Ji4SNioqLkId8hIJwf4eBhnuHcoOSi459cXh1bHF4fnF6bnhzbGmBcG1jam1weGl3fH7Lv8Hfp21jeG5jW2FgSlBSVU5ZXlBdXE5QTlRRVVRcbm12gnGWrbistKawtaqsvL+wq7SmpLimq66gq7SjjrGumpeYjJGTkYSOm4GNppGciYOLhIqJhIuElJWXl5ObkJyYmZqfnquspaiirK3P0tXSzszS1NTQ1NHOyMPU0cfN0tPT18zR0cXS1sXAzsfHwqi+t86ee3BnX2ReWGFTXlpQUVRRT0g+QEZBQkU8QEE+RUQ+Pz86PT08PEpBNDU0NjU8ODg4NjY0NDEyLzAzNTI2NzY4NTMzOz08RT1AMTErLzI0OT41OTAxMDIyLTJETjMpLzMuMzI9TjIzOEN9XzJBhnREOj09ST5AQ0ZIPFZSTU5adYaFindsd299fn+hnp6hjIyYk5OLjJKPloR5hY+QjYqJh5GGfoF7cn5/gYd6hHWFk5CIf292cmtzfXt2e3OBeHJqgHNyaW9xenlxer7Lmn6MsoR2coR2aGFrXUNaWltWZWNZZGpUWFxdYGReY3d6fouBmKmjpKGfoKilqrC4qqWzo6GtoqOtoaexn4immpOSkYmRjoiBk4lqlKKMmYSBhn6Rg4OTl62LlY2Umo6Gk5Gel6ewoaGhpaSpyM3PyMLM0dTS1NLO083G1tLM1NjW1tjU19XJ1NrNydfX0cqsw8LLjHRwZWJhWVVaVFxQS0dJSkpAOzo7REFEPEJDPkdCPkJCOzw5PDpHQjQ2NTQ0PDU2ODc1NDMyNTAvMjU0Njc0NTU0NDw+PUU/QTYyLy0xNjs9MDgxLzI1NC8tLTtSMDE3LzUzMkZEMjg+bmI1PYF0TTk5QEk8QUQ/QTtQTEZLWXCAdX1oc3hygomAnJSdlIWLlYmPioiNh45/eIOTmIqMiIiLiH6CeHN7fYOHd396hpGVf4Nud3BtdX92eH10hXx5bId2dG59doR0eHudtYw7QYvFpX6MfGllV0lDZmNlY2dqY253W15maGtuaW6Ag4iQi5ydoJ2Ql5ieo6OlsaOjsp+hpZ2gqKCjsZyFnpKSkpCKjouGg4+EfpybjI2ChIV6lH+CqZWjjJGKl5KLfpiLmpKrs5ibnKicp73Dxrm2xs7S0NLQy9LLydTO0NXa19fY1NnYzdjbzsnZ2tHWvsvLtXp4cGZeW1NXUltWRkdKSUVFPTo3OkBAQjpGRD9EQ0FEQjs/Ozs3REM3NTY1NTswNjg5NDQzMzQxMDE0NTU4NzQ0NDQ5QD5EQkM8MzMuNkZUV09RSkFKRj8xKiguQlMzOTI1NC83Szc1PGBiQTxzdlY4N0FIOj9DPjw5UUVDSlRrbm5wYnBxc4WNfJeQnYt/h5KDiYaFiYGHfHiFlpaIjoOHhYZ6hHlxenuDhnV6hY6NnHmLcHxvb3p/cXuBcYOHgG6OenR3fXyCdX57hoevc1ipwraNkYJwbmI9XmhycHFwbnh2gWVob3J1eHF6i4aOk5GblZ+Vh4yTm6CanqmeoKyboZqZn6Wen6uZi5qMkJGNhH2Ih4OFi46gmZOIg4d+bJl6hJmGiJOMjZSMhnyciZSPrqqUlpifmaevtr2prb7Hy8nJzMvPycTSytTX2dfY19Xb19PZ29XQ29rR1sjUy5Z7fWpqXFtRVFRfSENGSUg+QT49Nzo9Pzs9Rz0/QUFBREE+Pjo4NkRCNzU1NDc5LjU2NjQzNTUzMjMyMzY0NzU1MzQ1OEVCRENFQjU2PEZOU01bbmZjbnNrYVY+LDRMRzg2NTQzNEJGND1XX2hMdXheODs/Rjw8Qjw5OUQ/Q0dSal5tZGJma3aAiHGRj5qAeoCNfoKCgYN+g3t8hJiNh4t+hYaAdoJ5bnt7hoF0epKejaB2jnWCdHWBfXOAhG+BkIJvkoR1fIGFenaGe4i3xaTBybiBlpqPd3BlTmZjgXqBd4aikIp4eXZ7g397hHZtk5aUlY+XkYSJj5aZl5alnJeflp6TkpeinZmrlZCQiYyRgoyFiIiBhpCRnpuZiIWMgYWXeoiJn5eQiI2Ki4J9oYqRi7ygmJOXmZ2ppqaun6i2v8DAucfJzc7FzcrR1tXV2dXX29TX2drb19va2tjO28aIfXtpa2diVVhWVk5MRE1COz09PDg6PD44PUA2PT9APT8+PDk4NjdEQTY0NTU9ODA2NjU1NDc3NDU2MTM4NTQ1NjQ1NTdISD1ESkU3OTI1O0g+Ozo6N0lQXVpSVVhLOVQ+Ozk1MzI3STg9TllNSHh4ZDU9PkM9PUA6Njo+PkBFUV9YZWFdW2h0enlsiYySd3Z6int+gH5/fIR6fYKRiYSFeoSHenV9dG18fYZ+dH+SnpGeg5F8hn54j354iopugpqAdJmGfoGJhXx9kHqPqY6Pw6G9i5yjnH2JhH2JcouKfnOmmpyYk4V7jpCIhGhHcaCknYyLkJKFiYuQkpSOnJmSlJCWjYyVn5yUoJSRjY2Pi36Qjo6LhImSlpqen4mMlJGdkYKLf6WZiISNgoWEgKWHiou4mJ2RlZaiqKGenp2kr7e6tazAxsrQyMfMz9PT0tjT1dfA19jZ29ja2tnZ19u5e3t6bWtnWWJcVFBPSUNMQTw8Pjk5Ojo5OTs9Nj8+Pjw9OTo7OzM3REA4Mzc4PjcwNjg4MzU3PDM3ODA0OTc2NzU1NTQ2RlA1RE5JODkzOEFLPTszQ0BJPDlEV048TVRITj85NjMzMz5DO1tYPjVZeXBaPDxBPD0+ODY4OT89RFJTUlheVVhmbW1taYGOinFzeYp7en98f3uHenx7i4aCfXSDhXlyenNtgH6EfneFnKGanZSSgIyIf5iHgJyRboeohXqgi3yRjYOIhJt9mpCKjKOioJCkrp+KkIuFi4GThldyrYufq5uPg5ibj4+OXIKikYKMn5OVjIeIjJKTi5SUk46Lj4qHlpucj5SWkIqSk4aAi4iSjYqKnJaZoqKGk52WoIqJiI2ckIOIjn+Dh4WkhoyQs5idkpWXoaGfmZKcnaiyuaymvcHHzcjGz83QzM/X0dHVrtbV2NrY2trX1dnZoHJ/d2loX15ZVFhZQ0FIQz8+Pjo0OTo7Nzo7OzM7Oz89Pjc7OToxOkg+OjM3PUA1MDY3NzI1NT82NTs1NTg1ODo1NzczNUhSN0dPSzk5ND1FSkI+MUZDTEI5ODpHWEA1SFdJNjYyMjM6RUNlWD8mX3lpX3o+Pjk8Ozk4OjtAO0JRS0tTWVBUY2J5bWF+kYNvbXeLeHl/eoF8hXt7doWEf3NwhIF6dXZ2dISDhX5/kqakn6WiloqdkJSXi4qol3OKsY2Ep5KEmZOFmYyilZ+Yk4ianqOSqa+fkZSQjY6IloxujbeFmsTIsZuhpZucmJaQspFkpM3Ilo+Gh4iPko2NkpOJhYqJhZaZmo+PlJOGlJeDf4+LmYiNkKqWl6OjiJmflpqIjoaWl4qEjo2Bf4iPpImNk6ial5OXmaGZn5mTnZujs7Smo7zBvsfFxcnIycLL083N1KnS0dbW1tja1NPazoR1gmtmYGBfUEtWXEJCRkM7QT04Mzc7PDo4PTY0OTo8OjgyPzk5MjpJOj02N0JDMzI6OTYyNjQ+PTQ7PjY5NDk7NTc5NDRKUTxKUUs5QTdCR0lANjRKRUxGPjw4OEVUQTc+XDg2MjE0OjtFYFhBRmF0aExjWj41Ozo6NTs6PTpFTUZIUldTUkJkg0d1go59fG19iHh6fnqBgYJ+dnaAgntsbop+eXx3eHyEh4t+i6OzqKSrsqGWp6ClpJaVr6KDkLiVkrOZjaGgjKSbr6KknZiQp5epma2vpJeUlZSQi5ialqDAjqPJuKuaoqWtmZGbnLKdhoWoop2YhYiIjpWMi5OPh4GGh4iSmJSMipOThpSYhoORkJx0kZmylZakoYicmpOPipCKl5qJipaNhn2MmJ6KkI+cmpmTmZiflKCdlZ+bobGuo6S3vrPFx8S9w8O/xs7KydKnz83T0dDW2NLP2Lx1fHhfYldiWFJJS09FQkNENT46NzY6Pzs8Nz00MjY2OTc3ND01OzU8TDw+OzxCQTc1PDs0Mjc3P0A2P0A3ODQ5ODc7PDU1T01EUFJMOEA9RUFHQTU6SkVORUQ6NkFAQlM+OURPMzIzNTc1PXZcPFJcdGlaTV1TPD04OTU2Nz06SkZER01bXFlJaGE7SISKentthYZ5fIR4gIWAfXB4fH18b3OMen2Ce3iFi4mGg5KovK2psr2vpa6zs6mjorCsipq1naK4pZWtpJeprbempKOfmamYqqSvsKmamZuUlZGYoJeZu7utyaFptreqsJWYnqKrkpe9o16psoKJioyUh5F8jo59g4aNj5SUiIeSlouPlY2LjJeZkp2atJaVq56LnJSSjZCSi5iaipKdj4uJlZ+hjZWNl5mdk5yYnpWioJScnaWvqKGls7irwsjEtru9vMXIyMLQocbJzc3E19bQytOjc31rX1xVYVNRR0Q+PENBQjg/ODc0PkY8PDY8MzUzNTU0NTRCMzk6Qk06QTtBSEI7OkA8NzQ2PEI5P0BCODc0Ojo2Pjw0N1RLQ1VRSjc8OklBREA0QUpITkJBPzZEQTxKTkQvVD0yNTQ6RUpcWEpaUW1ncHBEaWBLSTY3NTc6PkpAQ0lQZkhhYGJwSUCLiX+AcoaHfIGJdYKKgn5tfX18fnB3h3eNgYd7jY+Mhoyaq8PAsL3Gu7O0wby0rKuzt4yosq2tvaubuqSorbm3qqamoaKjo6qvsrGqnZyjmJuYl56ipaWSo7muqMC7rK2yuaWkp32Ihpytva+Ci4uKkIOOg5GOeoGHkI2OnIiIj5eNipSXlJCal52nmrCakaudjpqPko6VkI+Vl46RoJCIlJujrJWWj5ScnpSgnpuYoKGUmp6np6SipLCzpsHGw7Cwu7bFxMO/zafHw8fDvNbQzMTKinZ1ZF9cYl1PS0NMQEVGPkE/QTw6ND5BPT01PTY+MzMzMjQyQTE3QEJOPkdAQ05DQT1DPTs4NkNDNUJJQjo4Nzg7NUI+NzlWS0RXT0Y4PTRLQEM+NEVLSE4+QUE2QkI/QlNFNThQMTQ1Ozw4O0Q+OUxqal07V1JkS2daVU83OUdFP0NGXGhGX2lnWl1ck4yMiHuHi4aDjHWGkIqBbn57gX5xfoF6lXqSlJSYkZOVqLTHycDCzMHDuse8uq+rubuXsra6s8CupcCkq7C8vKquq6Kinqesr7WwqpugqpyinJafsLSni6K6urXBu6uonLKkpKiUhI6pxMOkgouOh4iEhpWUjHmDjJGPkqGMjJSRj4iXoJeSmZWXpqCunIyqnI6Wj5KRlZWOkJWRj6GThpefoLKflJuUoKGZpJ+aoJyglJiepqSmp6SvraW/xMKuqbe1ycO+ts6yxL7Du7PRycfBtXd7b19aXmxUTklETUtLSUBBPUJEPDVBRDs6Mz04QjMzMjI2MkEwNUlFTT5JQEhSQEg+Q0A7Pj1GQTVBVUA7OTk4PDdFPjg+VkpDV09HOD80TEBCOzVKS0NMP0I/PEJGPUFITDkrRzwzNjc0NjRBPzdPYU9hRS89PjZrbGpgQDpIPj9FQmdcTWVcZlRjapmNl4mLiJKPhol5hpOQgXJ/e41+d4eBgpB6jaGWqJqamLu+ycjKwtLJysLNvMGzrbu/p7q/vrzEuKzBqayzu72qsKqkpaOsrrSttrWgoK6fpaKYo7S8qZuovMGjtbavq5KvrKqrloaaqaelkYKMk6SVioB1iZJ5hY2RkJ6gko6Ui4+MlKOZlpuUlKOeqZ+RpZqMj4+QlZaIfY+VkpKjmpWgopy1ppCfl6Wko6WfnqaYnpWXnKWjqKiisq2ou8DEr6Wzt8zAua7Ds7u+wbitwsLCv5lwe2NbWF5cTU1OSkdEREhCQkFDSzo0REg6OzQ8N0UuMTIzNTJCMjZTSE48SkJKUUVLQ0RFOkVMQjw3RVY9Oz04OT88ST86RVVJQVdRRjdBOks6Qjc5Sk1CSUBDPjxERzxCQ089MjBIMzY2MTcwPUI6PWpqSks1UVMzU3BwZE47RD1ARj5sSV9YYVpkZFeekJ2Nl46ekomKf4ifkoR4hX+Vfn+QiIqQgJWgma6no5jDvsnEyMbSzc7Ny7zCt7C6vbS8y7vDwba3vK2zwLm8rq+ooamotq2uqbK3mp6soqehnau3t6mlr77Esb25s6eps7OtrpaVpa2ooJGOkrHFp5WNfZGVfYeRmI+qmZiTk46TlZOlnpOdmZOhoqGcmJ+Yi4yPj56IWpCWl5KWpZllmKOes6WWoparraunnJ+nl5iWmJWhpKinn7asqbq8w7WmtLXLwbiqtqyzu7iuqLi6vLeEbnBcWlZXUEdLU01LP0FIRERIRkY4NUZNOz43PkFKLjMyMDI1QjU1UFdOO0xGS1JMT0dHST5JUT86OElTOzs/Nzk+RExCQEhTS0BXUEY6QT9HNkE3O0hNQ0U7Qz00RkU6QkFCRzkvOkEzNjAzPkdEOTQ9dGRNRztFKzpmfGhWPD5AQkZCc0ZpSVJlY0xGpZSclaGXqJaMkIOHpZKIgYeCm4SDlZCRlI6aop+vvq6hx77GxcjHzs7O0sq+u7axuru8v8+1xL23ubeysrazt7Ospp2rq7irqaivsJejrqSnpKW0wbCrrLO+wrnAubOnuLS3s6+VpK2wrqSLk5WhjXPBmX2WmYSOlpmLsZWampWSkpmZpqOVoJuWmqmcm6GgmYqMj5WcYEqWnJqUmqWXVJawn6+cn6WUr6+tppuhppSTmZmOnaCnopm0qaqzvby7q7Cyx8C4pqyrrbKxo6GysrSlc3FnXlxQUk1FUVFQUTtIS0lGR0FDPTlLVD9BOj1FTTA3NTQ0OkIzNE5XTzxKS05VTlFKUEhISk9CPD5NUjs+PTg6PENSPkRIUklCV05JQENBRjM+NThKS0NBPUM7NEVBOkE/PkhANSpCNTIsPmNdZzozNXRkZUBSNyYjM31oWDw6QkNAPVJFV1NzYlZGSKuXmZ+hqK6YkJeHiqeWjoiShZ+IhJyXj56gm6Oltcm0qca8w8TIy8nIzM7Hvrqzrrm5wMHNtci7wbm1urGvr7K0p6ObqrS0q6mmrayZpK6lpaisusCoq7a2v8HAv7iyssOwt72ro660rbmliJuXppt2vp+EmJyOkpiai66WoZybl5San6GpnqigmpuqmaGnnpeQjZCdg211k6KalZyin5CusqOrlamqmKuvpaWgpaqTkpmciZWcop6Wsaapq7q3vbOyrr65tqCjp6mlppycrKmpjWZoYmBTTE1HSE5KVUw9TURNSUpBQ0Q8UVU8QUFCRE8xOD03Nz9CNzVVWE4/SE5RWFJQUVRKUUpKRUFFTVE/Pz04PTtHUjxFRFFCR1lNS0FIREU6OjM5S0lCPkNCOTlDPjxAPjs7RzctMj4tMYJoTnpcLzBraGA8PUJCODZ6Zlc8Oj0uLlNhTVZIfmVeSEaslZyhn7uumJSei5Oqm5GRk4mqjYahnoyjrJSkpLbHvbTBu8LDyMnFws7Iwr25sq+5tMDCyrbGscG8tburqa2ssKOjmaq0uqaqp6yqnaivp6Srq768qK28tLi+xry2tbjAsL2/s6m1tqu+pI+il5Ghn7ueiZqgmZednY+2nqmcpaObnKGap6WzopuepZyoqp2YlY+Um4uWiYykoZScop6hta+lppOxq5qrrZ+fpaSqkZaVoISQnp+clqmkoaG0tLq1rai1srKenKOmmpeVmaqhnnhjX2FfTElHSE1RSU1ERkZBUUtJQURHQVZSREg8QUdRMTtCNzpCRjc5XVlLQUxQVFVTTVdSTlVKREBKSk5POUM/NT08TlFDPz9QP0VaTUpBS0RHQDUzPUlHPz1FQTk3QTs8QDw8M0A8Lyc7KkiRQjpTSjAsW29XNzE8Kh1CgGRUNDktMTpoXUZEQ5xwYkdFqJeknp7DrJuXpJeZqJuVmpqPqpaVqKaVrayZoqq2xcG8v7jBw8HIxL/Nxru+ubKwuLS/w8i1v7C8t7q3p6Srq6yhoZurqsSipamspp6rr6yiqqi/uKasvbC3t8a2tLm4vrC+wba0srSvvaOWo5WSm5Otn5ChoaSio56QvqSpnamsnZ2gm6afvaKYo56iqaugnZaNlZ6TnoeOhI2TnqShnbWsppyWsqaZsKmgm6ufoY2alZ+EjqGam5KlpJqYq7G1saqlqq2snJigoZKOkJWon5RpZVtiXlBKSEtPTEhFQ0lAPU9IQDtHSUhbUk9LPUhOVTRCRTg+SEc1Q2JbS0NOUlVXVlFYVFJVSEA4UVFQTTpHQDRDSFFTSUM7Qz5HVktDQE8+SzwwNjtHRj47RkE1Nj85Oj85OzE1RDAtLDBNdlw0S1o1LE1uVzwtPSkeI3piUTVDS1E5b1JGPEt4ZmNXTaKbpJuexauhn6udnK2fkqKelqWgpqmsl7axo6qztsXCvcC2wMK8ycK/ysi2uLW1sbS0t8LGt76xuLW6tqCnraqrnZ6fpaTBpaCprqCkqa2voqaovbWlsbu3trXDsrO3ur6xw8C4uK60tLSjnKSUkZOgrJ+YoZ2oqKqimsKtqZ2srZubnpimoL2hnaSYq6urpqCZjZmfkp6Ijlh/lp6moaC4qqaUmLajnrKioZywmKCPmpSego+gl5aOoqOVkKWus6upoqKlpZWVnJmLj5GTpJ+JY2dcZWFNSktLT0ZFQUZLPj1JQTk5SkpOXVFRST1MVlw4Rkk9RE1JOEhjXEtDTFBTWVlWV09aXklBPVdRSUs/SEA1SE1YU0hBOkBBRFBIPz5RPks3MDk5RkU7OEc/LjY+Nzg+NzcvMT85MSUxUVVtW0pPMTA9Z1dEMTc9LSt3YVM2U1prV3NIRTY9dWVcTE+eoKGYnsOnpaKzoJyyp5Oqo5+jn6yprJ27samstbHIw8HDs8LEvsfEvcTKvbCwtq6xta/AxbW6sbC6tq2aqbCpqZuepqGowq2brLGcqqKusKmkp723pra6va+3w62zs8K/scazurertLauqqKmlZWUoquhn5+Zp6uvr6+7sqafqamZmZeToqS4oaGjkq6vq6SlnpKhnpSdjpCNlJ2ao5+ntKenjZi0nKOvm5+cr5GglJiUmoCSopaPjqCgk4umrLClp6KdoJ6SkpqUhYuSjZyfgGRoXWhmS0pMS1NCQ0BJRzs7Rj44OU5NVV5SU0o+T15dPUhQQk1MSThOZF1MRUxSVFlbU1VPXGJIQT9aUUFIQUtCN0ZFTEtOPjtCSEROQj07TkBBMy85N0NCOTdGOys2PDQ2PDM1LS80QDErJ1Z0U2VPPzEwNGJbTTIzPjA8d11eP1tVX2ZyQDg8SJZ3ZUE0n6Sfm5/CqKOpsaCjtKmVsqumoqSyrK2pu7KtsLS0xr/ExLW/xL7KxbbAycK1q7WpsbiswMW0uK6ttrqlmauyq6qYoaeXrbu1m6iwm62frrSyp6q6s6e5s7iyuMCquLLCvbTFp76urbe1qaesoZaWkaWkoaGXl6Sut62ytbafnqikmZSVk6Ogt6OkpZWusbKlqaShnpqZmpWYqJ+emKKfr7Kip42Xr5ilq5ibn6aSnY+VmJqGlqCVjJCdnpSLqamqoqehmZ2WjI+ZkIGGlomVn3plal1sa09RTk5UPUJBTkM7Okk/NzdRTl1fUlZRQVdgXEJKU0hWS0g6VGRdTkZPTltXW1JQUVhdR0FCW1BCRz5OQzlIR0hOUD8/Q0lCTEI8MklBOTQxNzdCPjs3RTcrNjkxNDgwMi0vLjw2LSNCcWdzazIzLzFcY1ozMzkwNnBbYkgwNUpxalZDV0aMeWZDO6SknKGlv6aorq6gqLWqnbivq6SqtLexsLi3sLe4t8W9w8e9vMTCx8G5wcbBuqq2pa27rcHDt7iqrbK8o5WtsK2yl6aokaq5qqGnsJ2rn6+0s6qqt7Wsu6uzsrm3rLiwwbq9v6bDqrC2rqmqq6admJiqoaGgkZegsK6zq7C5mZupn5mWkpemoLeppaKir7Gzq7Gnq6CcoJ+bnqWdoJedpLSwm5+QlKaaoKmblqSgl5mLlpmUlpedlImSm5mUjqmpp6CjnJibk4ePmYt+jJeGj5psam1ibm5YUVFaVEFDRVVAOztIQDc6WFBkXlBXV0RZXl5OTFJPX0xKPlpkXk5JUU5bVVlQS1NXWkk/RFhQREY+Tj89SUdHUVBCPUNGQk0/OjJEPzc3NTQ3Pz05NUU0Kzc1LzI1MS4tLiwxPionKz1ccD0+MS4xZVtkQDE3NDdnWWFGKEA4bX1oXFY6iXtjQz2on5yhqbyhqq+qorG3qKW0squhrbW9r7O4vLu9t7bBw7/JxLnFw8DAucW+wbivtqirt7K8v7+0qa+yuJ+XrK2orpioqY6nu5+lrbOfq6KxsLOsqraztbytr7G1rLC1sb+6xbarvK+xt6ysqaKxpZ6kqJ+jlo+Yn7Kqs6mqs5mdp5ualI2gpqS0rqehrKytsaeyq7Gpo5ueqKSelKCZm6m2qZeakpKfmZ6hn5KtoJqZh5aZjJ2anZSLj5aXmpempqOgnpaWl5SBkJWFe4+Tg4yXZ21zaHBzX0dZZlZEQ05YRFo5SEI1Pl1RaFxOWl1HW15dT01SWGRKS0NdY2BQTE1OWFdYUEpWVldMPUVVSkVEQU0/QUZISFFQQTtGREZLPTg3Qj02ODcxOT48NjVEMCs4MC8wNS8qLC8tKj0sKyUyKyo1SzEuJ19eYVYxNTE9YFZfOClDM1lVXGdLNYx6ZkxApJqfpKy2o6yopK6ttamus7imprC4xrawt7/CwrW0usW+zMW5w8G6wLrEuMG5srWsqrq3u7q+tauusbeZmKirq6ucrauPq76eq6+xo6qfsa2yrq61sbi2qq2usae1r7S6vMmyqrW0sbSvrqags5+aqKygpJWVmpmxoq2gpa+WoaSZmZKNoqWmsqmhprGrqrWkrrC0rqOZna2nm5edmZmsuKKXk5CPmJyhmZiUraCelYKUmY6enZqWkYqUk56apaOjoZmXk5KWe4yRhXuNi4OLk2xveW91fGFGYGpaSUhaWz17SkdFNkFiVWlbTVxhSltcWlJTU2JhTEtFYGFgUExJUFdWVU9HV1ZVTjpJVklIP0NLP0VESEhRTkE/SEhIRTw3PT46NzU2MDk/ODY2QiwtOCwvMDQsKCwvLSo3NikoOS4kOks1LiJUYFZhLjUoQ15RXC4rQS9KR1BbRzNjWFRLRZqWn6+osamspaOurrWpt7O3o6y0t8q6tLu7wL+1s7fEwMzHvMS9t7/AwLjAvbK9rqi6ube3wresrrK5lZenrqynpLKqlK+7pKyysqanorGzsLKxtLC3sqmuq7KmuK+1s8TFtqm1tauwramnorafn6axoKSUm5iUsJ6nm5+pjaminZuVl6WlpLanorCzq6exp62vtaykmaGsqJycnZuUqrmclY6Oi5icopiRmKijoJiFk5eRnpyYl5eIlo+Xm6icpKGSlpKQlneEkYZ8hoKEjI1ucXh2fH9dS2VsXEpPZFw/YntHSThHZ1dmW0xeYk1YWVdVWFRpXVBPSGFdX1BKSFFWVVJLSFdVVk04TVpORUBGSz9IQkNLU00/P0xPSEA7Oj47NjswNDE8PTQ1OD8pMDcpMS4yKSksLC0rLTkkMDQyJTlCNy4jQU5JZzI3J0ZhTFYlLUIuPUVMUTwzcmtMRESRmaStpKytq6ajsLKyqrewtZ+rtbrJuK7BvMO3s7G1wsPPxMDCvrS9wcC7v7y0xKirurG2t7+9r6y0tJ2hp7GtpaaxpZ6ytayqsrGrqKi0uay0srWss6yqq6isqbmtsbDHv7ikua+pra2mp6ywpaSjrqOpnJ2bmq+ZoqKio5Csn6Ogn6GppqW4pKuztKSqq6isrrauop2jqKqcoJmakqS0mY+JjYeRo6CWjpWfopaVhpCUlJ6bmZaVh5eSlZmnnKCgjZOSjpF4fo6EfX19h4qKcnRzf35+XFJkbl5OWmddRkSWW0c6Tm1YYlpNYWJOVlZWV1RZaF5RUkxkWltUS0dPVFNOR0lWU1xOO1BeSkJESEpBRT8/S1NPPjpOTUM8PD45OjU9KzMyPTYyNDk6KDQ1KS8sMSgpKywtKiY1Ki8mMCkzODoxJiozQ2U7NipIZEhKKzpJPzNDSVMsPo9rP0hJkJqpqqGpr6Sno7O0sLS1sbCgq629zLquwbzHsbSutMLD0cTFv8GyvsPCvL+4vcWorbettLm8wLCssq6ho6euqqelsaOrsaquqrCurqyrsrqnt7GyqbKpqqWlo626rKqwwrm0rLmoqaitqaewpamkoq6qqKKenKKslaWdl56Yq52hp6ihrKairKy3sLGgqaKfqq2wq52epqepmqOXmJCgqJiGg46Ki5+gkIyOl56SkYeIkZWhnZaYloaWk5OXpZydnYySkI2Kf3+IhH13gIeFh3V0col2bF9ZYG5jUXNyXEs8hHxGP1d1WGBZT2NcTVVWVVdRXGJfVE9PaFhXVktHTE5SSEVJVlJdYzxQXUQ8RkhIQkc/PUpQTDo+T0o9OT89Mjo3OyozNT4xMDQ4NSg1LyosLjMwOyksLCclMjM0JCwyLTg2MCkoMTxeSzAuSWdERjg8QjA1RUtYMUCUXUBNRpWWrKehqbGcqKivtay4ta6ppKurvcm7sL64w6+wrbLExM7Ow7+/tMHExLrBtMnErK+4rrO5wL+0rq6spqepsammqLKmtK2qsK2tsa+yrLO6pLizrKytp6ufo56wt6uqrbm2pLW1o6morKyqrKCopqexsaOmpaGhq5aqoZSboKWeo6Kqo6yinqaxt6ysoqWimqmqramdoaWkpJmfmZWPmJ2TgYKQiYWdoI2Lj42bkJKMhY6ZpJuSkZuLk5GRlKOam5qLj4uLfIeBgoJ7dYGEgX51eIujh3hrXmBuZ1dmh2ROQGeSTERieldiWFJlVU1WVVVUT1xdYlZLTmlXVlZJSkhJT0JHSVNRWW9BTVhAOkpHRkVHPj5FUUg4Q0tFODdDNzI6OjoqNDk/Li80NjMpNCsqLCsuIzQuLSsmKCs3OSomNis8LTIsJjA2WFouMEpnQUE8PEMrOkpPXjREhkJJSESWkK+koqmvmKmorbWqtrCqpKupqbzBwLi5tLy1prKvxMrL0b/Bu7jAwMK6wbrCxK6xtrK0u8G+s7KvraysqLeqpq2wq7iup7CwrrGrtaq1tqe1t6uspKmqnKOes7OoqKSztJ+1raGpqKuoq6afq6uoubapqqmpoamfrZuRqaGdoKOipqKqnZumtK6npamio5elpqapnKKjo5+ZmJ+Rjo+YjX6HjIeFnp6IhYuLj5CSjYWHlqOajo2akZKQjpKfl5mWjYuEf3SHgX9+eHWDgHp4foCInY9wcmdncXhcYXSIaU9dmFZIbXlVZFZSYk9MVlRVUU9YW2JWSFBqVFZUR1BZVUk+SUhPUVB4TU5WPTxLRD9AQTxAQ1VDOUFLPTU7RTEzOzk3KjQ6PSstMzQxKjgqKisqLCkqKC8qJiklMzssJDIpMjAyMSUvMlJjMDI/Zj1OWD9DLD9MVF8vSWs3UkY7lY2voKWprJmqpK2usrSvqqWvqam7vrvBsbC5raK2r8nHyNDAv726vMO9u8PBwL+vsrOytr28wbGys6uzqaW1qKSss7K4r6KttLGvsbmquK6qr7erqp6pq6CjobWtqaGer7KhtaqeqKeqo6qhoaytqL2vq66soaenn6uZj6+imKKgqKaep5uYqbCoop+soaGSoaKippiZqKWYmJidj4qHlIh8jYaEhaSWhoOCjIeQj5GFhpShlomRnZCTkI2RnJSXj4qGhnh0gX99dHh6gXt0dHtqgoijdmleZWyBdWeIi3xSV3BeS3hzVGRTUV9NTVNaZ05NV1llWUdTalJRPkJOUWFROklITFNJcVFMUzs8ST87PD07QEBXPDw+SDczQ0IxNTo5My01OjopLTMxLS02KSgrLSw1MiMyKScsJS47LiYxLjAtMTQlLDBNaDozOF89YWQ/RjFDUFtbK0hQO1lDNI+OsZ+kpaqjpaOsprSzsKmksKequL7BvLCouaqnrrDJxsjQwr3Avrm/v73JvMK5sbC1srq8ucCztLytuayjtaanrLG2uLKmp7q1rbS8r7ulra21qq2cqa+kn6WsqqecnaqypLSpmqqnqqSpnaKoqKm9q7OwrZ2po6CunJqyopakm6Skn6SamaeqpZ6aqaGbkZugpJ2YlqipkZmZkpCLgo+FfY+Cf4iej4eAfoyIkpCQhYGUm5SGk6KMk5GLkZqSlYeJfoByenh+fGh3fHt1cXJ+aYZ6hIhkYGhjcoV7bWd5XV5WQ1h7bVRhUFJZS0tNcHRdSVpbZ1pFVmdPQz5LTkRDQTlIR0tTP2phSVE4PUg8PDw+Ojw/VDY6P0M0NUg+Mjs1OTAyNzw1KC41Ly0xMSYvPktJMSUaOTAlLCwwOS8sLCs2JzE3Iy0vR2pJMTRYPWZiQUo3R1NgVSo9PEZcQCqOkrCZn56ppKOhqqS2srGkqbGnrbnBvbawpLmsqKiww8nIzMG3vb+1uMG6yLbEtrSztbK9ubq9tq65tr+torOmqquutbe0qZy6u6ixv7K6oK60taisnq6xo5ylp6mjnZykr6avoZ+rqaehqZyjqKCtu6eusa6hqqKjrZ6erKaYn5uhopufmpmiqqKamqOjlZaTnqGWm5WlrIuekY+RjIKKf3+PgHqalIyJfX+Mh5CPjIqGk5iRh5SjiZGRh5CZkJOBiHx5bH12eXhie3pycHFzeGqCdWqDZ2NoYW5zjm1iaXBgb0JdeWtWXk5RUUtJTVNZVk1cXm1XRVhhT15QSE1ERjs3SEVLTzxyaEpLOUFFOzs9PTs7PUo0OUI8MztHPDQ/MTgtNzg7MigwOS8sNS4uPS0qTD4qHTQ5JicuMzQuMCsvNCYsOiQ0MEFoWjEzUz1lX0RMNktWZE4pPTNSXT0jkZesmJ+XpqOhn6ejt6+toq+wqau5wrqzraC5r6uns7rHysi/t8G+r7S+t8S2w7KwurGywLa7vrequbi9qqS0pqiqr624sKiYuLyjrb60s6Gut7Smpqews6CepKWnoaSZnqyoqJ6gqq+noKaXoqifsLifo7GvoauhraSbpqapmpqbnqKVnJuZnammlpueqJCXkpidk5mWoamQmomNj4d9h36CjXx7oYyNiHmEjYWKjY2FiZOajomVn4iQlYKMlo2RfYR7c3B8cXN0YHl4am9wcXBqf3NkemxoZWRiZoeAYFtyanFNToBpWFpNUUxLSFBSUUhNXF9vVEVZWlJnT0hLRUY1NkhCTEk1WmVKQDZFQjk6Pj0+OjpDNTk+OjNARjwyQDIzLzo7ODMmMjwwLDg1QiopLUMqLDQ7Tk5AOzczLS4rLTcqKjwlNTM9ZmQyNE0/ZV1GTz1SWmdIKj8wXVs1KJWbpZiclayfnqGkobersKOztKmpusW2sq6guK2urLC1xcfAtr/CubC0vbe/u76wrL6ws7+yvcK5qru6uKeotainq6+rs6+lmLu2pKu6ta6esLiuqaWnr7KcoaSgpKShlpuvpqGfo6ivoaCik6Okobewoaawq5+ro6+Xm6qlqJ+Ymp2jk5qbmZylqZmbm6SUlJeVnI6Tl6KooZCJio+GeoN9g4p5jpeKjYd6goiEiY2PhY+TmIyOlpmKjpZ+hZeMj3qAenBxdm5vdF94d2VtbGxqaoRvZnJpa2ZoXmR0gWBba3ZpWkp/XlxYT09LSEhSVUczOV1ebFFFWVVZZU1ISUVFMDdGP0tCNklKSDs2Rjk0OT49PDk4QDg7ODo3QEk+ODw0LTM8PDc1KDU+MSw7QTEoKzY8IjhSPSoxMTM+RDUsLSc0Mio7KzEzOWNtNzRHQWZbSFREVV1oRC48MmRXLDKUoaGXlJuqnKShoqC3qq6gu7ilrL3Fs7Cuo7WwrKyutMPDvLO/urexs7m4uri7r67As7S5sL/AuK29urWlorKpp6myqq2xn5m/taSntbWonbK8qKelqa+smaOnnKSllJihsaWZn6OoqZyin5Kkn6O4qKSnraadpaGokp+ooqGhmZucn5Gam5afoambmpiglJCTlpmNk5Ojp6SQiYmOhnmEeoSFfJ2NiYqHeoGEh4mJkoWWk5KLkJWTjI2Ue4KXjot3fntsdHFsbHNhd3VpaWpnZ2+GaGhpY2ZpaWBqY2poXGZ7Y2BTdFRcW1NMSkdJT1NAISpoXmpNRFdVXmBLSUdFQy46QjxGPDZLUEQ4OkQzNTc9PTg5NT86OzQ+OEBLPT45Myk4Pjw6OSo2QDMuRTQoKyw/MC1OPy4rLTcsMTE5NSwmLjUtODA1NzZgdEEzQ0RnW0tXR1VgaEIzNzlnUCcynaKkkI2kppqdnp2jtKynqrq3p6zEwbawrKO2rqeurre/v7yywbewrrK2tri2tq6qvbOusrG9v7euvLuxpJ+2qqWls6iqrZ2cwKqnpa+yqay1u56oqauxpZieqZ2mpJGZpq2imJ6kqaGboZyWn52ntaavqq6hoZ2doZSgpp+hoJqbmZuSmJyTpZyroZeWnJSSjJWXi4+YmqifkYiJioh4hXaBgoGdh4qCiX2AhYiHhpCElpSQjpCRkJGMknuDlY6Gc319Znhva2prZnVza2NnZGR2gWNlZmZmampja3NaX1pdbWRhTmlYWmBWSkdIS01TWD45X2xpSENVVF1bSUhGRkEuPD85QTg5UkZANzpCMDM3PTc2OTI6PDk3OjlETT1CPDAqPEA7QT0tNUIzNz0rKiwwQipKSy4vKiszNzIyKDU3JCs3LjcyNjg1XXlOMj5IaVpMWkpWYmZAOjNCaEglNZqjoI+LrKGYl6CWpLOxorK9tqGxxry6sbGktqyqrqm5vLu6rcCyrq6utq6yuLOprLmxr66ztrq2sLi9rKaetaqgn6+jqa6cor+gsaOusK63rbWera6traKanaappZ+Vmqeln5mloqidmp+blJyerK+luqeuoqGamp2ZnqSapJ2Xnpebk5ifkqiVqaeak5qakYuVmY2UlJqopo6NiomOe4F0gYGKmIWHfImJhYWKjIqShJSbk5KPkJGWjpB/gIyOgnCAfmZ5bWhraWZxcmtcaGNjdIFiZmdqbmxnampobl1sbHRwYVRjaWRlWklGTE1PWVFQVmFlgVVBVlNZVEZIRkVALzw9Nz82PEZOYTg6PzI0OUAzNzgyOD83PTg+RkpARDkyLT1BPUE9MDVAOUAxLSsuMzw7SzYvLissLTI0OzYjMyopNi41NTQ2NVp8XTE5S2pbTVtLWGRkQEExSmZDJzSRoZuNjrCempOhmamxr5+5v7WgtMK7vbqxpravqK2lt7i3t627rqyqq7aqs7itprO1sq6psLa2sbO1uqapn7WonZ2ooaismqe9mKyjrq+1taysn7Gtr6mim5yiq6iclJympJ2aqqKklpqfnJCbpKqqqbufp6SgmJmZnaGPa6KWmZxwgpWao391kamnnpSUnpCIl5mAloqhkHiGlIyDbWl+doNxbIaLhn2FjIdwXmNhZ4SYhWuLj5SSdHeLhH6Dj39nhoBndWhlV1xoc25OUGpjZ3OFaF9lZm5tal1gYYqPhIRmTktEOUdUZ15KR1BQVVVMSFJhb3RmRltRVVBGSEVDPjE7PTY9NjwzZlw1Ojw3NTtENDg2MDpCNz86PkZMQ0IzNDM9QEBAPTI4QEU9MSwrMDg9RzYwMS4qLiovNTY4LCMxJzIxNDoxNzVYgWwxNk9rW05cS1tmYj5HMVFkPSoui6OZhZWwm5uSoJuqraqjvcWvqbjCuL28rae2sKWro7ezsrOxua2ppqy0pq+1oqm4traop6y2sq60rbOhqZ+zqp6ho5ulppiruZSlpa+zt62upamtqqyloZ6coKemm5egpaWbm6ennZOfn5iQnqepo7Wvo6KinZaXl5ejiKCOkpmGoIeTnKB/pX+lqp6SkZqRiIRyeI2OhYihdoiMaZeIZn1yeKBviIeEfo59f6GgoJmAfIeedIeOdZuKbIeBg2xoZWN6bHFhU4VtYmxpmHFYanFwiFleaVtsbFuIcW56coVnhoRaXkdOP0dfTUVSVlZRUVJXVWdeTVdJUlJQRkdHPjw0OT05PDc7MDw8Nzk5OjY9RjU4NjA8Qjs8OT1GUUc9LjU8O0A9QD41OUdBODIpLjE8STkvMDEuKi8oLTQ1ODMlJjIxMTU+MTw4WIN1MjVSa1tOXExcZ189SzFXYTcwKIqmloOcq5yZmJ2fqqqnqr/Dr7G6vbfAvqqlt7CprKWytK6vs7eqqaWwraW0s5yttba1pqeos7CtsqeunaqgsqifoqKZoaGarbOTo6SltbymrKerqqyopaGgmJ+mo5mZpaOkmJykqZaUo5yTk6OkpqG3o6Sgo5iVkpeTnIivkJeUiamLlqGbhbGAo6ydk5mdlHmC1KiAh5XBm8d5eLGlt5dkf8Ccv3mEhHmRhHyQkJHKcZe8nMV6crWmu5B7gGyWsauweGhrWLGubmVpvJK8bmd6b3KP2H5Ta2O2sn+BcpV0mqGqkFdPV2JQVk5GVVtYUVBSjVxXXFBBXURRTkVHSTw8NTc9Ozo5Oi49Ozg3ODs5PkY2Ojc0PkA+Njk/RVJJOi41PjtCPD9BODpKPjUyKjIyQkUvLjMyLisvKS0vMTg2LSAvNDE2QTE9OleDdzIxVGtcT1tNXmdcPkwxW100MSGMppKAp6qfl5ydpayyqLHCvbK1v7W3vsGqp7OsrKmnrrOpr7a0p6eltKWnuK+cs7K2q6Wkp7GurrCmqp2npLCjoZ+dlpqenK2rk56in7O6oqqpoa2upaGdmpqhp5+Xm6egn5iep6eRnKealJ2hpqGhsKKfn6OWlpKXkpmFr2tqio2qfmaDlYatZHCcnZSZpZRxrqGkfni7fWuhj3axX2q0W6WAZZyRYGaCe2Z/anhrqWS+cmemjHWxanyxeHSSk2NtbaduW4SgRWhmh5ZFdZxgfmh8pKeCWV+Lq2mAlXh5aqc3Sq9cWFNsZFtLTlhfXFdWO06JUFdXL0lUU0pERUY9PzQ2Pzs4OjkwPTg5OTk6PTxEODs6Nj1BQDY8QEhRRzkwNzxBQz5ARDhARz0xMy0zM0UzLi41My8rLyguMC46NS8nJDIwM0IvPTtVgnYyLVZqXE9ZTF9nWTpNNV9ZMzAbkKKVgqyopZ2jpKqxt6y1vb+wtsSyt7rBpqmwq66oqbCuo7C6r6OkrbKjqLionrOzsKOloKqtr6yvpqefo6Kwm6KalpWWmpqrpZWboZ6zs6GrnKKtraCdmpegoaicmJ2jn5yZoaakj52imZehn6qepqafmp+hlZWRlpCahbWbtXiFqZm1mXaGs5u3fpOWlqiUfmuBpnuChoiSlJJ3q2drsVureo2GlHSJco+GgH+IkJd4goKLmIuDoI+EsHZ3n3Fra2x8i06kWEhiYpl+Y2imYHlzdlOSh15QqW1jcX6HgGKcLlGhb1tTa2hgTEtbZFhcWkI/snlYWEEjTWhGQ0RBQEExOT44ODo4NDs6OTw5OkE6RTo6OzY6Q0I4PT9LTkc6NTpBRkJAQUQ8RkQ7MDIwMTtGLDAuOTQwLC4oLzMsPjgzMR8vMi1EMTw8U31uMytYalxPWE1fZ1g3SjhhVTUwG5WflYizpqagr6mnsqyqu7bCsLvCrbi2v6qsra2tpq2xqaGuvKqgp7Sso6u1paays6ekop2nqrKosKelnp+frpafmJSVlZedrKCZmaSotK6hqY+pqKqbnZWYoKSnmp6cop+boKOko5WbnpeZnaKom6WZnJyioJaTkZOTnYPVk5m5cLDBfsWGfNaUm7t8mpWkj42cjaR7joejgqWCeqx5j51Wr3qIfp9quVu6d4eEfaaCk3yYeql4jZ2Pe7FujoR0kbyFb5RQr6fFilGgemNgqWJzc4htl4hgU7W0yIaAiXxjpDNCnXZdUGppZFBAWGdaZGFKSE5uTlxST1lmWUNEP0U/MD08NTk7NzQ8Ozg9OjxDOkY6Oz42OkBDOzZAT0xIPDo7REhDQkNEPEVGODEyMTFEQy4vMDQ4MystKS4zMjM5NzEjJTUqPjM9PVF3ajYqWWlbS11PX2ZUN0c6YVE3MSWbopSZsqiopbSqpbSppLy3wrC5wLG1tLqztaexsKKwsqafrbaomqe5raOvsaCztLChpJ6fp6mwqLSopJudnaqWmJeVl5WWoKmcmZanrbCoop+PrKKolp2Wm6GloZihoaGhmqGippueoZ6UmZumn5unlZubn6CYkJGUkZ2Ism5otXGrh26OpnK0c3K2e5qXo4uPnY2jf5GhpX6wdoOR0tJ2XK57hX+kb5uqpmuHhX2tfZeZjnuwcpKdjnizZZZ0hJ5vnmaUUsiLWsJcn3liX61gdnSHYpeIXlnKnW+/gXVNS7VTVcZkVFFqY2ZYQU9rYGxoUFVISTk9VlJaV1hJQz9KPDI/OzU9PDQ2Pjs3Pjw9QztHOTtANzs+RDsuQ1JKRz4/PElKRkNFRD5ISTkxNzQ2QD4vLjI0MjUyLSkuMjYsNzQyJh82MDs1Oj1QcWg5J1dpXEJPVF9lUDVHPWFNNjIwoZ2SpbCto6q8raa0pqe2u7yyur+3trO5ubKltLOhsbGin6uwpJemua2ksbCctLiqoKadoamksaisqaSZm5monpWTl5iSkqGmn5aSpaqwpqGVk62fpZKToJukpp+VmqWmoZqin62ZoJ6dkJWboZ2cpZSdlZminpWYlZGbhax7d6h2o42IhqlvrYqCp4OYmKCJkpqKon+TmYmuhX+Cs1xys1KufYKCpH9y2H54hn6PnYaZmXavhomRnId3tGGaZZqCgpRsklqwWEuadZh5ZmCtXnZ3h2iYiGtdr3eVno94bDV5yK6yX0JUb15nYEVQbV9wbVZWTi5lZGlTWFE7QURATDo1PzkxPTwxNj85OEA9OkM6Rzs8Pzo+PkU5LUVVSkVAQzpNS0pCSEc+R0s5Nzw0Njo+LzA0MzMzLjIuLjE4Ki4zMiUhMDM3Njc9UGtlPiZWZ1xAPlZfY042R0NgSTo5OZ+elKC5sJa0wq2os6ipsrq3s7i+ubextLu1pLiynrSsn56orJ+Up7WrqLGxq620pJupoJ+oobWmpqmimZ2UpKGTkpuYkZSipJqSj6atr6aglZmpn6KOkaGaqKSglZmlqJ2cpJ6snKGdoI2TnpqdoJiZm5aXoaCTl5CmnoapfX2leKGOjYKqcK2LgaeGlp+giZeXiKOCkYiUqnyAi514b7FaqIKCiKB5dNmAd4h0qIGOm42SpHyWkJ+Ee7JenGSgfoOVbJJcq1tak4CRf2hnqmRye4FrmIdzXaxaiaCOa29lT0pDoVxbTHRdYmdNW2FfcnNfS1Y2SpuUWEdFPUdGQU0zNUE4Ljs+MDVBNzhAPDY9PEY/Ojw2Pz1CNy5IVkpFQUg2S0lOQElLQEVOOjpANC47PjEwMjE0NCsqMDUvNywmMjEoJCQ2NjcxPFBlZUEmVWZbPzJVX2JMN0ZJX0MyPziinpqav6uYtMKuq62ppbSwt7G1vrm5srC2uqi7tJ+wpJ6kp6eek6qwqa+ptayqr6GYoaCmpKS5oqOroJabkKGflJOemZOXnp+PjIuosK+mnZabqKafjJKjl6iqppSWqaeenqCjraOhnqKNlKGYn5+SnpeclZ2hlZaOq5yPrm1ytHOpi3WKp3O0eHOzgJGko5KcjYmkh5B3uG+Me4uiamu2WqGFZZeXaaCip26UcrR0k5h/smqFkoita3WzYZ1mom+Hk2qXXK1fTaF8h5FSc6NseX9+b5iHcVyvVjycd2ZUb24uXKdPY1NrZWJtWmNdYXB7Y1RaUT4+bW8zQ0JAP0w5ITdANi47QDM3QzU4Pz8zOzxDREJKRk1JRjYySlRLRUJJNklKUD9ITkNGUD08RTUwOzswMTAvNzUsKyw0MjYvIzAwLCwdMjg5LzlOYGVEJ1VkWT4vVV5hTDVGTV44MUM4ppubnbuhm7LArq2rrKe3qbivtcC0u6+ut7arwLWoqaCbpaShnJGqqae1o7Knrqqgl5ynoKSruZ2jrZuWmY6kopWMnaCbmJyekZKUqrawp5iUnKypl4yTpZmlrKKRlqqyo5+epquwmaGjkJmilqCblpyXoZKcqZyUkKuZh9SSmrtzsMOAw4Z+1ZabuHiIkJiMl4qMp4h6o7Z1fXd2woKasmCDunnAfHW4Y7WBjIepfZWBrKlxe390vIinoGmdYaaOr6J+jHSHqn2+b3O8dLKDdXiBi26aiHFujaR0vV53fVphebxrWlZcanleamFlZ2JteG9ZW1lEQUBzQENGKzVHIic7PzEwPD83OkI5OT1DNDxATlpeYGBfX19aUFBSS0VGSjRITFJASk5FRk9CPEU4ND05MDIwLjg3LSouLzE4MCItMSwzHiw8OjA4TFhhRidUY1g8L1ReYEs1O0xbLTdBOaeanqK8oZeyw7Csqqursae4r7bEsLmwrbmurcCxq6OinqOhm5uQqaOqsqS1pq2lnpaaqpmmrLmdo62YlKCQpZ+SjJyinZidmpGVkq65sqyVl6Onp5SQlqScpKyekKCoq5+bn6ijs5+jpY6noZSimpyXlaOXj6+gkpSpnoSQmLZ/j5GMt5V4gpOatXdta25zb3mQhY+KdJ7Bu72ae4GxqHCAc5G5g3yGhoyHjXyKh42XfKS7ub2cdXq0o3R2l3Z0sHWZnmaGao21dHJxd7aMXn96fYlog3lueWKLrHB1hX9YW6dqRWVaVGZgY15jUWhncW11Qk5QTUQ7Wk0/SjM7MCA4PjsuMz1BOTk/PTs8QzZCVFlaWltbWlteYGJgXVNHR0g0RElUQktOR0VPRj9HPDc/NzA3MC85Oi4sLy0qOC8lJjIoNCQoPjcvN0xUX0cnU2JXOCpPXl09KzpWVic+OzynnqCiv6WWtMO0rKuorKupuq6wxa60sq22prS4rKmhoaWeoJ2Zk6ukraqmtaenn5uWoKOdrKS+pqGqlpOckKGakY+hp6GTnJeTl5SxtbetmJ2kpKKKkpKlm6Wqm5aopaWcmqGopaekqaGSrZ6Wo56Xl5edno+vqJSbpqGNan1pm6Z4h3J9mY50eWSHe72+wLpvk4NylYdhc2paXpuJYWOIjpVrYICVY22dd2KVa4CalZRlXmBjcJqKaHKLfYWVZ2p+cnR4fX5iW3d0gWhQXG6DfXyLa1hseoJySkpvhnBOdExFV11nYUxaWGdjX09bbnVpclJQREVOO0hJPU0/MiwyQT84LzU/Qzw5O0A7PUM+UlZWV1laW1xcXWBhYWFgXFVHNURGVUVKT0hGUElJSDs4PTUxOi4wOzouMC03Nj01JiIvKjIsJTs4LTdKUl9JJ1NgVjQpUF9MKDM+W08nPzI+qaCoosGim7W6taOspa6np7WxrMirr7KqtKK9sbGmoKKonKKbmZmspq+kpLWppZuXlaGbpq2ovqeopZSTm5WfmZKXpKiokJ2RkJicr7K/rJunnqeiiJORqZqoo5qarKCjmpujp6yjoKujmrGblKeglpSdn52XsKWXoaeZm5CcnKKjmKWhmZuZmZmPlYFnbX1xd5KXlJKFi7WqjYaYlY6KjJiWh5SVioSTlJGJjpKUmJOYlpqgoZqclKCdjYJ6pYZsanyQfIB1ioqBcYJ4eXZ2ioB8impzgXWDdWV3fXdrb3ptYGNdcGhNWFpmamBXWnB6bm1mVE9GUzlPWk1STygrOktCNjM1PUBBOTpDPjxFTlNTVFZXWFlaXF1gYmJhX15eW1RLQ1NHS05ER1BMT0k8OjszODksMjs4MjApNklSTzgiKSsvMiM0Oyo3Rk9bSiZSXlMxMFReOis9OFxLLDwtQLOhs6LAoaSysregqqayp6WwtKrIqqywpLSlwKezoJ2kpJyjlZWgqqeso6O2q5+Zlpafl62qpcGeq6OVkZuXnZeSk6GenaGnk5KZqKeyxK+aq52qn5CXlqedqpucn62ZoZudoqSvp6KlqJ+umJennJmaoJ6dnK+gnKGmlZeSl5OfoJWinZegjpaTioqNjpeukHyWm4OSgouqqYWAmZeJg4+eiHqEkIeGmpKIhoqVj5uXjZGYnaOWmpORnY1/jmahs6+FioR2e5KKfXZ5em9meZCBgIlrdYF5iHJpc397doOGgmt1ZHlmYGplY2Rma1lse3BpalxTTFBEXlRGQD8+LDRARjs0NTs+QTs8Pz4+SE5OT1BTVVZWWFpcX2FjYV9eXl1eXVhWSktMQklPTVJKOzw6Nzg2LzI5NjQuKCYkLTEuLykrKjclKzwoNkNNTUQvVF1RMDVNWzE3RTRbRzU8LEC0oLqvv62rrrKyoKumsa2irLOvxK+qq6Kyrbyjs5ufpqKhnJmXqKWppqSlsrSelZSdmZmwpa6+oKyikJGdmZmUkZShnJeonISfqquis8izn6qkqpaWl5qmnaianqOrlJ6fnqCpr6qmpKyirpufoKCYpJ6cn5yvo5iep5KXlpyRo5iXp5yal2WCknxlfo2akGN5jm1pa3uSpKpqZJqXfWeGimVlaWh7jqGPbGiMl5Gjd2tqi5mjnplzbG56g42HelhlXoaCXm2LiYF2XGhzd3eSgIeCbneCeH9zbXmEdHaIiI6DfGqHWV5sdWRec4lpa3xxa2NeUk5YSWRYQUo0Pkc3P0ZENzE8PT9BRDs7REdISElMTlBSUlRXW15gYWFgXV1dXV5fXVpVT0RIT0tTTj0+PT02NTM1NTU0KiYmJSwqJS8qKyc2KiQ7Jy9BSltKLzdaTzYpRVkvRE8yWUM7Py49pZ+6vLqvrLSxqqWora2wpq2tsLywqaajra6wnqyWoKOdopmZpqqcraOlqKmyrZ6Vo4+ir6W2uaWto46OmqGZk5Kan5mZpJV7pa2iqLTEuKWip6+enZSeop6jm6KpqZKeoZ6gqrCrrKSroKqbp5+noKuVoZulsKSXm6qVoJyakaOWnamXnX29g4hytHKEnYataHi5xLhxk6KjeqWZmHOrgnzLwMC7cYyiiIOffZaYiZ3AvYKXnZ2NncLBfIJ7ko2aw8B9a6WyboyBb8p6f5t3kYOOgXZ5gYB5cXp/h3B3hYyTeW54lGNmX3lkYGWCY150aGxkY1hMV0lRWkhPRDJJRT9EQj4vPD8+QEE6OERDQkNFSElLTU5QU1ZZXl9fYF9eXl5eX19fXVxTTVBHVU5BPz89NjQ2ODI3NiomJSMpKiYuKyopMTAfOSojPklbTCojQlAuI0ZbM1BZL1ZBQjsvOJajucO1sLDAqaiUo6+psK6tprO0r6mlpaawq5+rmJqin5yaqqeinayipaikpLSknaKSpq2rt7OnrqKRkZmcpZKQn6CYm5+ch6aspKutwMCxoKmvqZeRnp2hmaGjqqSToKGenq2vqq2npKSnoaalna2okaSaqK2pmpypm6uglZWklaCilpx+zpR4eqSBeZWWm1+uj16Op4GioHynlptzq4OAr15jjap7p4eFoHWXk4izY4KrhqGNjbNqhK50fZeIt2GDrVmjzW2QdXvae3+ZcH6IknZ+ZXuHdnZrfIhufYWQkX9tg5BhcmxwaGBgeWRccWhqZGdgUlRTV11LT0M1QUhERDg+NjtAP0E7PThAPj8/QkRERklKTE5QUk9TXF5fX15dXV9gYF9fXVpXT1VKPT8+PDU1NzgxNjQoJyQhJywmJi8oJiszHTYwJDc7U0wrLC1LMCc7XDtMLSFQQEY0LjGtwsC/tbSwuJedkaOqqK2zq6ayrKyqoqqnr6mgp5uZpJecoq+foJ6op6OloZ+wrJqdlaeurLCqqKyflJKbn6SSj56kl52no56upauwqL/Hs6ipsa6Wkp2bopefqaqflaCfnZ2tsKisqpyoqKSiq5KsspaloqqqnaOmpKGvn5GYppifmZOTkZegcYWMl3WFqIZxsX2ecqx+oZ6BpY+ed6qCfa1/nHOtfqqGhp92mJJ7fJd+qoiijJGMnX6reoiUkJ+Ae61WnMR6j2+SwX2BlW11b4xtZXZlhm9hd25yb4mKko+EbpKRZnB1dXFhZ21lX29paW5nZFhTXWFaUlNDOUlJQEQ8PjxARkRDRUE9PDw8PkBAQUJFRkdFQENJU1dZWlxdXl5cXl9hX15eXVtaUkM+OzkxNDc4NDUyJiMfHCAxJyAxJyAnNB41LSY3PVdKLTwnPjEpM1ZARiEcRzpDMS4rsNPGxrK0oJ2jjqOjoqyvtq6osKaoqqatq6umoaSdmaGVoKWrn6KloKioop6dsKyXmpapp66sqKeonpeUmqOhkZOgrJudpqKvrKSstaq5zbKtpq2sl5WcnaKYnq2snZegmZ6eqbKqq6qcrKuko6ybr7GiqKuupZilqqipsKGRlaKkmZORhKRqpHWJeql0erJwgqaKmYxxiKCah6RgYFKrhH+ug5t2rYGnhoafepmXhntmgKOJpJmGgqN9qX6ClYeuX32pVZ2ikoF6op+Ae8OvxYtyr7OzuXFiqa/CdGiMjJiOgm2blXFuenh5cG1nZWVycGZ8aWNdV2BqWFlVTExRTENDQUI7Q0BAQkk8PTo5Ojw9Pj4/QT04NjtETFBSVFZYW15eXVxeYGFgX15dXF1bU0lCNjc5OTY2NCwmJCIgKCciKy0iJC4hMy0mQERXSCxHKzU2KjFQS0wjIEE5RDQsJ8PJ1dW/oZmrp6Cvop6wtLCuqayip6aoqquppKafm6Senaanp6OcrJqirKGjn6+inJuTq6S1r66gqJqdlpSmopCaoqifoKWcsKakqLGstsiytaqrqZaRnZyhmJ+ks52aoZSdnqesrKWvm62qo6KqobOtoaqzsKGaqKeurrSikpWippiakXuqbJ6Eh3WreXywb4Kki4mflpaflIHSuLS4yYCBsl9glKmDpIiHoHqYlpp4qsl0maOVqKmRk5qMgJyJmsbHeGahgqVzgZ+Ogn2vXXC0YrB1S6OGbadHgpNkjpCeknxxmJWBcXx1fnxuXGZqc3FmgWteYVlkbVxfWUlOTEtFREFCPkE8Qj9KOzc5Nzk5Ojs7OzMuNjxBRklMTU9RU1daW1tbXV5fXl9fXlxcXFxcWE1CNzU2ODUvKSglJiUkJiksNEVOUFBNRktKVkYqTDAvPS01T1RRHRw7PEYyLCSnpMDGuK2osq2spaKcsrisqqClmqilqquppp+mppiqo5+uq52moKyanqmlnae1n6KXk6mqtrKtm6WcoJSPpayRmZynoqCppq6hpKepsLXDsrKprKiTiZecpZqho66ll6GVmZylpqybsJ6uqaeerKO3rKGxuK+dmq6msrKyo5OWpqKZno6CnU54moF/n3qEo32DpISHpp6cnpOEuHt7ebmCf8zGwrZ4m6GQi59+mpaXinaemIqlmKSof7CFnIWfhKx9mpRipWykcI+EkIF9loJyrGCjc3GAmmC8fVJVdI6So5Z7fpOTjHZ8c4aAcVxubnhyaoFvW2RfaW5iZF5MTFFUQUlIRkk6OUs+QjEwODg2Njg3Ny0qNT09P0JER0lMTlBUVlhZWltcX19eXV9fXFpaWllVU09IQDg4Mi4sKi4rKicmP1FUVldXV1lYWFdVT1VGPEUzOlBbVBwbNj9ILC0gi4eZqaukq7mqr6Cboayys6WeoJWlrq2uq6ecpqaao6ehs6+iqaeyoJippJSitaKilZehqbS4pJuinaOSj6GxmJ6bpqShoq+unKWoorayxLGtqa2pkYeQnKecoqScpZeemZmapqSqm7Cir6WmmK+ku6yhtratnZy0sbewsaWXnK6fop2Fj9G1w7d5h46FkZOQgKZ4lKF3jKCRhKWBinGqhoW0bnJqmaOclYqefJiZhoePc6+CpZuijaaLk52KlZCbbXCyXaVzk3qba5l/e5l8balho3Fxf59ic7K4aHePlKaYfY2OlY15fnmQg25qeWl5cm+AdV5lZW9tZmdgSltYWDxISEBVNEBGPjwqKDYzLjAxMykmNDo7PD0+QENFSUtOUFJUVldXWV1fX15eX19dW1paWFVSUlFGOjIyMzAvKysoQFFSVFVUU1RWV1dYWFdVVVZUUU9RW1UlITJBSCQpJZNzjYqtv7+8urSelqelrbWhopmVo6imrqusmaain6agoLano6mnsaOUrKOOpK2jnZCamqqzs6ScpJypkZSXrZ+fnaajnKectZmiqqS2q8OwqaqpoYyEjpuioKajlZqanJmbmaelp5mtqK+jpZutpr2slL2wrJ6hr7K5qrKlmqiwoqaXeaiQfXywd4qApKWInG2yb6CHrXyhj4OnlZiArImFroWflKqgoZeGn4CZlYB7kn6rgJ2aloureJ2fkYmUkoB5r16jgX2mp2OdgHyXc2qvXaVrcIWZXWBbjKBtlZGmmYOVjpmNfHyEmIBrbn9jf3RugHpgZ2VxbmhnaENaYVs+S1UzVThCQkM3JCQzKycnMywgLzY2NzQzNTlAQ0ZJS01OUVNTU1ZaXV9hYGFhYV1dW1pYU1BPTkk4MDUyLiosQVRWVlZUVFVVVVVUVFVUU1RWV1dYVlVVUUhGSUojKCi9k5qDqcbCtsG0n5qsoK24paOOm6Sjn7Cwqp+kn52tmZ+5oKOroK+pmq6hkKuopJaJmpCusKymnqabrJeXj6yhoJ2loZmknK6YoaimtqnAr6Wpo56LgI2bmp+mnpKVmpuUm5qmpaWbqqytpKWfqqi+pJbCq6mioKuyuKmtpZ+yraeol3avfpCLnIWHfbqtipllsY1lla19oI+DppWagayKhLCFppqkoaGQhaBbbGqBs2B/rXt7g4GxbWdvmZiMiLFbfbRcpINryKJkn4B7vFh2tVmyfVKugHqsWIChbZiPp5uMl5GYmHx6kJ5/ZXV/Y4V4dIB8YWpncW1nZWZPVmRcQVVfPkkoPjo9NCEiLCUfMi4gKjEvMDQ1Nzk6PEFDRkhKTE5QUVJUV1peYGBgYWJeX1xbWFVQTkpGQzU1My4vQFVaWFdYV1hYV1dYV1ZXV1dXWFdXWFlaWltcWFdXR0I70p+zsbe9urPBs6OcrKaktqigipqgn5yztKmfo6CetZmgtKiqrJ6vrZ6sm5WvqaKOiJuOr6yop6Gmma6SmI+omaGdpJ+Zo6OmmaCiqbKpva+lqJ6dj32Mm5agoJmQkpqckpqYqaCimqmuqKamoqWpu56gxqakqKCqtLSrraWeuqyrq5SAqZKjr46bf4ekl5mQgoC4w7qDjpyShKeXnIKsioKviKecm6aqkH7VvcKqYqO/vX1+o4KD17q4tYWUk4Oevb6Ea6KBb6uEbJx/erKwx4Npq7C9rHh3or68c4CWjqackZuRmZ57gpKce2R+fGWOZ3mCe2FsZWtqY1BhW1NqXD9VYkNOKT06NC8fHyQfJTIgHSQoMDQ5NjY3ODo+QUNGR0pLTU5OUVRXXWFcX19hXmBbXFlUUU1IQz89QT81PVNZWVhZWVpZWlpZWFdXWFlaWllZWFlbW11dXFpWWFRXWryVs7Oxv7myvbKhnK6mpbKmnYyYpb+quLKoor+np7KcnrGcuqifra+mp5SUsKyXjIObka6loqygo5yqoJeKopKmnaecmqGoopmfoaytqbmtqKOal5N8h5mRppqSj5GYmI+YlKmboZmqqaGqp6CjqrudqMWioK6jqbOzqa6on7mmra2Zc3WqpLeGZImgcGiukYqQbm53pJCZn4F1rpiUcI+LcZWoo5uXrqRybWxsZot4b26CmXGBempxaWeJlpaYcWlphIdmcIZkXYhiam9ZXGZ9dqZfYXGOkW5lZX+Nk4+hmJmZkpihfoiQlndniHhpjmt6f3llbGNmbGJLZFhKbFo6UGVFUidLOisjHCAbIiwpGBsYLTIuNTo0NTc5PD9BQkRFSEtMTU9RU1ZcV1pcYGBhXV1bVFBMSEQ9OkFCN01YWlpZWVpZWFhZWFdXVldZXF5eXVxcXF1eXV5dW1tVV16plKyzqbm4srOqqaGunqOyqZeSvrLEyb63qp/ArK2koaesoLqjpK6srqeOl66pj4uFlpetnaaqoJ2jo6CRi6SSppmomZajqqCWnaamp7C6q6yam5OSe4SWjaWYjZGRmZSOmJaolaCYqaObsaadoqu5n6/Bp6OypauvsKmsqqa2oqy2lYqgqKW2nYmWo5mHqpuRlZ2SqbKZmqOqoLKWoqGdn6KcoaWhlaunjZKSjIeTnJyUkJmTmZGOlYWBpJqXlo6Lk5OLj4aEfWeJfnSCdXOGinCnbHqUkZOSgYGNj5CPnJShlpqYo4OJlo9zapF3cYx4d3x6am1kY29kVWFZQGpcSGNhT1krRj0rJyE3NTAuHxwhJTIoKjY5OTQ2OTs+P0FCREVKS0tNUFBRWFVWWV5gYWNdXlVRSkVEPjk9QEFTWFtcWVdYWFhYWFlYWFpbXFxeX19gXl5eX19gYGBfWVlgppaoqqW0tq6uoa+jrZ+gtbGQjqzHvsa7uaujpZ6cpp+xqaS3p52ptaeokZitoouHiY+cp5WspJ+Yp56ekpSjlqeaqJmUpqGkkJunmaG2u6irmZqQjHyBlIuhlIqVkZaQkJSYppCfm6qfnLajnqert6euwa2jtqWur6+rqKiyt6Ctu5iRpaSmtqKSnqegjqqgjpKfo6yvmqCjr6ivmKOgnKOqnZ6dnJarnZOZoZuUkJaqmY2YmZeQlp6RiKCdlZWFkoyQjZSKgH1mi4V1hnV4h4JznGqFj5STkIl8i5WSkpeUopOemKOFipqJfHOXc3qLgHN8f2pvZF5wamBbYFluZFBgZVBaOkdHRT4yPT45LyomKykmHSY0MTY2Njg6PT0/QUFDSUpHSktMTVNTU1VaYGBpYGVWUEpBQ0I6OUVNVlteXltaXFtbW1xdXV9fXV5fYGFhYmFhYWBiYmJkYlxbY5eVo6ejr7KsrqOppq2fp7WqkJCdpbW8sK2toqOae56jsqSlsamXm7mmo5OZqpyOhoqJnKKPrp6ilaifoJKWmJqti6mWj6iZqY2ZqY+eurakpZmbjYh5gZSMmpOKlZKUkY2Sl6ONnp+pnp+4o4CEr7Wir690o72jsZ93eZ+psLmUdayjnomAqn9kXGJ2oI+ln4SXfW2Ss5yjp62qomWen5JzeZmXcICYqJdtf6KoimWcpZyRl5iWjJKckYadmo+Vg5KHjo6SiYR3ao6GdoZwe4V/f2Boh4qUkotadZSQZ2iQj3N7p5ubZnqaiYR5mWqEi4RveYBrcmVfdnBsa2hbZ2ZiYnBTXD5OTk5TRz5AVUQ5MS8eHyY0OjMwNjY3ODw7PkBBQUZIQkdGSUtNU1RVWV1gaGZnV1FKPERHPDhVUltgYWJgXl9fYGFhX1xdX19gYWFiY2RhYmFhZWRjaGReXWablaajoK6wrKuppaiuoqatpJKWq7axsqebq6esl3SMnbCfqKunlJe5oKCPnKSdkX+JiJuejayaopSnoZ2OlpGehHWtj4imm6mRl6SJnLu0p6CZmIuJdHeTjZaTipORkZSNkJSgj5uhp5mcspaAjJu1nLOMko67pqB+p6J6oa21gI6NpZ6Di4aQsaqvjIqXpJt6gIushpydoaeop4eVhZh3pZt6h5uBmKeCgnucsnqKhqCXmZSYloKRl5eEmplieYeQhI2PkYqDbXCOhnmAcH+AhH6Fc4WElZF4lmeSdKCadX2ZhKKfiJh/lIyFhZprjo2GbHh7cXFnZHhvamxrW2VsamV0XF5JVExSQEU1LlpVVTcpITA5PT43NDM1Njg7Oj0+PkBEST9JRUpLR1NYW1lbYWFoZllRSDlFTDw+YlZeYmRmZGBhYWBiYl9dYGFhYmJiY2ZnY2JhYGVkY2djYWFonJijn6asrauorJ+osKamqaWZlK/Iv7Gil6iptZ6QhJ2snKeioI2Qvp6ajZ+aoJB8ho+ZmIisnKKVn6GRjJKJhoCRp42Hop2klJieh5+6sqedm5KOhXB1kImVkIqUkI+bjJCSn5KXoaWWnquHn7SJtJqtisqHqa2It4WNsIGvrIKojKaYjZ19qI9ye3ecj6eXaJWkebSMn56mp5KYwoF/q4iYoXKegJqlfZeFlbKBoX2hk6CQmJeBjpObipiRi3yFk4aNlZKJg21yj4V+eXGGgIN7g3SEgJaAj8Vmf6mHj6NrnoSjnISagY6Ph4uacY+ThWh3dHx4aGh2cWhobF5kcG1nbVhnR11STTJENDZOYmQ3JjM8RUdEOjY0NjU4Ozg+PT0/Qk0/TklKTENQWl1cV2FeaWxcUUU9TE1ASmRYXWNmaGdiYmJiY2NgX2JhYmNjY2VpaWNiYmJlY2FmY2JiaZSWoqCwp6iopaufo7ewqaqmmpSgo6SrpJemq7ijsIChqJ2lnp2JlLyalI2hkp6PeYSWlpGIq5mbm5mihY6Ld5qcj5+QiJ6lnJaamIejua2kmpyMjH5ibY+Lk5CNkI2NmIyRkqCPlKGhmaGnfqGnh62doJatj56cnZGFgKCMqq2Fo42pmYyaf6N1gJmUa4Ktdk2reIeNnJGaqKeAqat9g6F7eqdpnn+Sa2eXhZe3iZ5+bmBkWYOXf4x7ZGiLcpl9eZVsXXyWbV9TcINcX2t4gl9YZIF8g3+XcKeqa4OjbnKlcJ+FoGpmoG1bb4x9Z1pghIBiV1Bvd2ZtdHNram9ea3Fta2lYaU9eWEY5QTRIRF9rNCxJQ1JNTj04NDg1OTs2QDs7PkJPPlFSTE1CSlxdX1deXmJ1YE1EOk1PTlRiXFxmZmlpYmJkYmRkYmFiYGJkY2FjaWtkYmRkZ2RiZ2VhY2iXlZ2guKCpo6askaC2u6utopmYoaKlra6hnq+1o6iToaCgp5yajpm0mpCLn4yVi3WBlJKNiqeWlZien3+ShYWrpIeakIqZqZmam5KIprGnoZWaiImAaW6IiIuOjoqLjZKMkJKjjJSfoJyhpH+TgY+joZSgd5yVj6eDoaZ/hqirg6V4iXyEmn6icHOUiJZ8n415bYebjJmPm6iaj4ede4Kic3amZp5+d6RfmHp9k3Sibpi3tLp0k4eCf7WoZIHGuHtwlbaMcX+apGJzrKtgfGmds35tfIaBjYKLmHF/o2xyo3SfhYGkYJ2Zs5ZxfZifs3VzW56yg2pjb3R2cWhvWGttc3JmXGleY0xEPUQ2UUJacjM9U0dfSlI9PDM5NTo6NkQ7O0BKUD9VTU5RQEVfXltaWGBgfGRIQzhMV1VXY2BaZWZra2JiZWFkY2BhYmBkZF9gY2tuY2NkZGhkYmdmY2hok5aUo7eZq5uToI2kt7StraCaop2ko6aunZyyrqyTmKGZoaSZmpSfq5uLiJJ4i4VxgJaOipChj5KUnZh9kImNp6CHl46JkqOUnJuNi6mopZ6Pl4eEfmp7h399kI2Di5CRiZCUoIOXnqCdoJ6LiXecmKKMn3Khi4epiJulj5WmqX2tjH56oJl6o5N4gXSWiI2cfZafhpuOmJulhqJkoXyIlpCbjWyeaJqNbpqZeoCLp31yaHSrg56DdKpolZpdm4V2hJ1nqmqAuGZcqHCBnGCVjF6ndnWHiH6eaJp0hZOSl46An2+akW6nml2ofni7a36qXI6EXbRnXG5yenhraVxxa3l5Y19mWGJCUUZPN1dDUm81S1taX09aREAxNTE7OzZIPzpDSFU+WVJZXT5EYl5WYFFhY31qRUI5TlteWWVmWGZnbm1iYmVfYWFfX2BgZWNeYmRvcWBkZWVrZWNpaGdraZWbiam1m6eIY5Saq7mxr6yeppycqaCfr5yesamtnZekm6GgmZaWoaSZhomNaoiAcnuXiIuWloSRlZiQeoqDlaOcipSPhoyekp2diZCpo6CajJGKgIBpgId5f5eMe4mOjoiPlpt/lKKfoKGTmHJon4qfj4xwkoyBqYeYnqGlnqZ7sK2joriXd6OzoqSAiJR5nXuqmn+ijpyaloiXcaF8hY2vtX1rmpGheH6YtKKjq6iEmXybfZ2af3SqWl1ve5aLeJ5iTH57eoVjeZdCTJ9Yompxe45sgIiEmXWbeIaJsbN/gJuTp3eDnW5zfZVwmnRrpF2VdkhlZGB0cX5+bmZgbGl2e2RkYVFfV11VV0BZRlFoRFNXXGJYXklEPUI4P0I6SUY4TEVYQVdSW1ZERmJcWmBLYG1+ckVDPFVfYlpmalZnaG1vYmZnXmFhXF1eYWhiX2Vjdm1dZWdma2RmbGloa2mTnICwrZmEU16gprO5srKpmqKMnKycnKqUoqykoqiPoJ6dm5mWmKGdloiHiXeGgW95lYWRm4t8kZOWiHKAiJKgm3ORkIGJmpWhm4WPqZyblYuLinyDbISGcYGhjHiGjYiIk5mWfJOjoJ6iiK2GfbWEjp6ce6WWeqmBlZuPiZ+bfKdod21+mXShc3F8noaZcJODrn2kg6admYCkb16oZ3WiY2+lYZzTkHx7mXhyc2OihpB+o3Okj3VrkLOMYIKYiXOqsqe8f3eDbX6+pqm0XZtufHCWbX9yonJdpGdzpmBopm2b1Jp9hptwenuYbJx8eJdzbqmkZ2BlenGAhGtnZmRvdXdnYGNTXGZRUWJJV0pUYVdTW2VqW2VRRkNLTUpLQktFOE9AUU5YU1lPU1FhZWVqUmN3eXdJRkVjXWVaaGpUaWhqb2NqZ2BjYFxdXV9oYmFoZXxkXmRnZGtkam1naGxol5qAsKtUXEt+qa+xtK+zo5uZhZmpoKGkjqWpoJmqipqYmJOZk5KhmI+IhntwfYRofY+DlJqBd5CNj4lvf4WPkpJsl5N8iZKTpZaDj6qblJKLhYl5g3aIgG6Cn4Z3gJOGiJmil3qUo6San4mzoaK2i3qsp6SupXCpgJqOhYCakHukgKGZhphynoSjrq+Kl4yAjaSNlYOtoJR2tLW1yaFzlIuBn2Cdl6lteZWHoJt0ood3oH6Sl4uBb0xmo5Jwm4dzpHt6dGGDgWt+oGtxZF+ccX1zlmh5abO1tMamc5h9ep1rnJurdoWbbXZ4mGqae3WYclBFfbRfanZreYdmamdjdXVwblZeVFlpUFJoSVZNWVRWXWhrblZnV05LQUpNS0hKT0FRS1BlY2ptZXRzc355fG51iXt7VFBPbF5pXGtpUmpoaWxnbGZjZWBcXV1eaWJkaWt7X11kaGNqZm5tZWlsZaGbiK6mhGU/k6Gyqq6vtaKikICXqqKjpYylp56dpoObl5aOl5CPnJOOiIN6anmHZYONf5igeXWPiIyBaYSFkYOMhZ2Neo2LlqaTg5ipmI2Ri4GIen99i3lwkKGGeoGVh4mWoJZ/lKWonJaWhGZueJxsomR8caV3m5hwZ6aAlYp6pHqfloOXcp52gYqVl4+5bpGKomJ9maCViG1yaaprdaBtb6ZfmmmLkGmWh5uVdKKAfZpgjIaNdW+IYmigZZ5+aZt1b2NmiIJtcaJaX1tioW1diItuen1zcmSlbXiiZGenaJlzjJlwom9ViZBvoF9mqFSLXlSYbm1za3KCbXBpbHlza29SWVdXZ1pTbUlZT11JWGlpc2pZa1ZRUkVWXExYU2FVaWtfd3R7fXB9fHKDe4Bzdo2AhHZeUXJiZ2NwZ1BqaGhrbG5oZGdfXV5dYGpjaml2dV1cY2ljampzbWZrbWOcpJilemR0bYunrqOpsLGmn4yAmKudn6aMo6Kbo6KBlpiTjpqQi5iQjop7hnGAiGiLi3yYnHN0iX2QfGSCh5SJiZWZgnyIh5eokYGirJGGkIqCin6AgI9zaZCmhH2GlI2JmaCPiJOppp2IpniVm36liJaMspiekIKvl5+ldpSGeKlzpY+Emm6kooyShI2Du259pa+DhoWGk5Wcn3ylenKolaCWZp5+b6xjlYqWk3epbKmigYl2iIN3qpGmh2qRsGt2s4ypa4qGbW2fnpKVYH6ri6p2fn6LpZ52n3yDpJWdoGqbiHisaJ6tjLZ0d76NpJNZg6aNq2F1cnRxfHVxY2t/b2hsU1dbVmFiXWtNXVJdSl5tbndfW3FZXGBbZnRlbm9yYnF0YHd6fnlyeYNzg3+Be3uMgYKAdmJ4ZGNucmRSa2dob2xyamZpYWBeXGJrYm1sem9cXGJpYmxqeG1nbG5ilaWqnIB/naOWqaqdqKaupJmKgpismp+lipulnamdhYyaj4eckYWSjYyNdIZ6iIRwjYV+mJR0dIVykoNtf4uRh4aTjn17goaZpo5/pqaOgY6JhZR2goeTb2yLqYGDjJSOiZ2fioyUq6Ogj4B1lJeIfoF5lK6jf4GbcY+Gd46Jgn17cqeMcX19epiWm4SPeXt/foeTlZOKdpCYnqCDe32Ja4yFW3l5cnpxaW5+kolxgHWBj5STcYaEgmWMf16Af4t3dHKUdW55bm2GbISFXnVnd45lgICFjaiafXR7lWqJiHCBdn2Hd25tZ4xzeXyYeIVca1h5j2lueHJyb3h4cF1rh25qZ1ZbYFdcZmtkVmJVX1FfcHh5bGt2Zmpra3Z9cXJ1c2FvdWJ0e4F4dXqDdX+Af4B4ioWDfXttf2xkeW5eV25naHVreGppamVcYFpjamVtcXRuW1tibGRsbHluaGxvYY2UuKimiaCimqakmKWcq6KhhISYrZKeoYmbp5qpmIOBm4t/lpSHjoqJjXKDfI99fo+Fe5iPdHKDcJWFe3ySi4aGj4V5foCHmqWOfKehi4aQkIWVg4aOmHdyhKqGjZKdkImfnoiMm6ifoKqDiI6Vmn5+iZatqI+Rpo93b5uPgXiQbn6ohXB9lXFrcH2BoI2Ak46MaG1dg4uLm5qejnOVi4hxdGuBdnSBWXJuhpGBfn6Mal1qZHuFhImAYGl3epp7goqBdYGFgmd3iYVqYXBxgXVecYqAiI6llIVli42DbneLhHGGkHpxZ2hlfIR6lltcamdudlt7eXh1bnNzgmdcbYtra2JaWl9aWWxxXF9hWl9dZnR+e3VwdGNra2t8fXN8eHVkbXVobXx+dnp8e3l6gIB+b4aKhHt9c355c39oVFxxaWx1b3Vna2hkXWFYa2hsa3FybVdbZW5sZ3N6b2hqbWCLi6qwoI+ioZqenZeemKijon6Dma6OoJWInKKRpZV/e5iFfZKZiYmGh4pzfYGMdoWLgoWXinFvgHKYhoN9koOEhoqBeoGFjJyhkYOmooh4jpeJlYqLnJiEg3qtgpGXmpWKnp2IiKGrn6Gio4uHk5uco5mWqqGnpp+SmoaUjHp2jY2Dp35/kpCTlJyyppuVn5CNspOXg6WMjJWan4mQm4KIkYprfI53eGWChpCLfImdhIeLkIiIgISEkHd8eXSZoIiGiZ2JhJN+fYp/f3VvcoSBfXeGhoqPpZCChYyGgoyQjH2HjIqRhHltg4V9eplrcmhhdIpxfnp3d3B3dIFdXm+HaG5fXlpdXVRoclZkXFxibGh1e3xzb3Bka2tpgHxueYByanBwbGeBe3KCgHh/fX+Ee22CjYZ8eXh7fXqDeE5kdmpybXB6ZWtlY2JgW3RmcGZycW1VXWx0bWl5enFnaWtkjIecuZ6WoqCYlJiYlJikoJ58f5qsj5+OhqCdi56WfXiUg3uOmYmGg4SHbnmBgHKBiH6JlIRta356l4eEg5B/gIaEhn2HhY6cnpOHq5+EcouQhpKRi52SfY57qoSOk5iWj5yWh4abpZ+imp2FgpKamZmQmqafpZ2dj5V/j4h1e4aNg6R6fI6QkYaYq6GelJ2QjqqNkH+djIiTmZ6Cjpd+ho6Db3eGcXVgfoOPhnWMmICDj4KGhH6FhJRueHV0kaGKi4Wag4SMc3+Ie3xycXqHgnp3io2DkaaOhYOOgIOKiYp3homKjH5wbH+CfG5obG1oX3p/aX18dnV2dXt3XF9wfm51YGNbXV5SZ25UZVteYmtpdnp+cWxtZGtqZ4GAbHOBbGx1b3lwhXluh4B2goB+hXZxgo2Ifnt6fH97gopgaXxqdWhpgmRqY2BpXGN1aG9idW1sVWNxeWVwentzZWptbYqJnreaoaOfkZGVl4uanp+ee3ifp5Gci4ellIuYmXl6jYV8iZGDjYKCg258f3lzgYV+i5F9amh9gpiJgYiOfH2GhIZ9j4KQnJ2SiaidgHCMi4ySh6ChioWMfaiRiZCSl5OWk3iMo6CgnZaZf4CQmpiSjJujoaSZl5GafYyDd3+Cjoaff36MjI98mKWhopOakZCmjI+BmpGJkpebfpOSfoeOgXR0gnB3YX2AjYZxi5V8iIxxjH+ChYaOaHdxeIuXkY9/ln2HinGBhnp8cHd6ioN5eY+LgpSlkouEj3qGhoeFdoKEiYl8Z3N9gHl7cWxrZ19+c2h8dXZ0fXOAal5gdHZwd2RjWV9eUmtpVWVZX2FoanZ5gXFna2RtaGaAgWtufWhvcWx+eId6bIyBc4GBfoF0doKNhn98en+BfX+PaXKDbnNpYYdobGJfcVZ0b21tYHhobVdqdHZjdXp7cmJqb3qIjJ6ykqWlnI6Pl4+GnKCbnXx2paGOmICNo4uImpZ5e4aHfoOKf4mCgX9yf3t0doOFfoqReGdjfYaXioGKjHh9gI2DeZeClpmXjZegnH5wjIKRlIamm4iMiYOmlYWTi5aXk5J3kZ2goZeTlnl/jpiXjpaanKSdmJKUmniOhIJ3g5WNnH2BiY2Mc5ejn6KTmY+PooyLg5aYg5KWmX6YjHyIjYB2cX1ue2SAfIqFcIeTf5GCbIeCgYCJhGV1bnuFkZeLfJJ3i4h7f4V7enF9d4iEeIOPiIqXoZSBgop2iISCgnd8g4qGeGF6eX50f3hnbWVhf2pqd3N0dX1xfGJjYHRudXJtYVphXltsZVJjWWBhaGt2eYZxYmpjbWVofYNsaHRobnBpgH2CeW2QhnGAhIN/dHyDjIGAfXqCg358j212iXR0bWWKbGpiYnZWhGlwbmB4Z2xianZwZnl8enFgcmyGhY+crpemqJ6NjJeHhp+Tl5l+eKqdi5l6l52Li5iQeXyBi318hHyBg4F4dHl6c32AhICJi4BkX32LlYd+hIZ0fX6Kf32ZhZeVmI2kopl/c4d7k5KKpo+MjoqToZKDkZCVl5GLgY+Xn5qSj5Bzf42SlImdnZ6ml5eMlJVyi42Ja4SXj5h6h4iPiW+XnZqklJWLjJ6MhoKSnH+SkpWHmYh8iomBenF5a3Vse36Lfm2FkoKUeHCBg31+in9kcWl7f5aXhH6Mc4+HgniFfHV3f3yEf3uCi4OLkqOPeIOBdImHfYB0doKJhXBhfHZ6cX1vYm9jZHxjbm92c3h3c3RhdmBvbHVtb1xcX15eal5QXVljYWhudHuIa2BpZmpjaXeIbmZsaWptaIF9e3dvkIhzgISEfXSBhol7g316gYR9fI5yeot4eG5sh2poX2lyY4dncW9ld2dubGF5aWt9e3hwYXhti4CYmaqgo6idioqRhoqdi5WYfnivmY2XfZ+UkZaTiHd+e4p8e4B3eICAcHV0fG+GfYGBin98YVx+j5KGf4ODc3qAh3qPkomTkp2Tpp2Vgn2BfY2KkqSJjoqNmJuNhpGYlJaPioiMkpySj4uMbYOPj5GJnpmioZeViJaQbYeYg2aFmI6TeoiEkIpwlpqUo5OSiYuZjIJ/kJ19ko+SjJmOe4qFh3NydWtwbnV8inRuhpCOknF1gHuBgYd7ZHBseXyZk32DiHOQiYBzh3huf3x/hXuEi4eDi5SnjHqHe32LhXd+cXCBhoRlaHl1dXB8Yl9wYWt0XnFqe3l5bHNwZXhdbmxzbXJYWl9fYWtaUFdYZWNncXF/h2ZdamlnYmdxjW9kaWdlaWiBend1b46FdIGCg3t1gomFeIV8eISFen+Jd3+Le3tyeINqa2BwaHSAa3JvbXJnb2xlfGNugHp3cWx3d4p+opehqKCmm4eMioGQnIeTnXaCq5WTjoehjZaTj390fHaFeHl/c3N7hmtzcHptinaAgYhvcVtZfpGNh4B/f3Z1gICAoIaRi5OdmKGVmHiKf4CMiZydio+GkpiWhYmVmZCXi4uMjYyciY2Pgm2Ji5CRip2WoZyXlIWXh2mDooJlhJyJkH6Lg4uBd5OYkp+TkYmJlY1/fo+XfJGNj42akXyKgINudXBsbW9we4Vpc4OOmItxd4B1goiCeGZybnWAmY57h4N5k5B5dYdzb4h6hIt5ioWCh42aood7g3WBi393eW5sgoSCXnN1c3FweVpfcWFwa15wan17cW1tamx2YG9vanFtWVhhYGFuWFFUWmZnY3VwhIJiXWtuZGJma5JuYGdmYGdrgXVyc3CLgHV/g4B4dYCLgHmFf3eHhneDhXyHjH97d4p/anFjfGOGfG5xbXRqaG9sdnhfcX95fHV1dICDfqSVmq2eppaFjYN/l5SDkKB2jKCUk4aLm42Wjot6cnh0gnByhXRxdohscG12bYh2g36Abm1VUYGrlIeCeIB3coN6gqGCk4KVlJmck5t4knuDjJKkmpOOiZWZkoSHl5mMlIuJj4+HnYSPinxyi4WJjoicmp+blZR/k31ohJuGZ4Wfh5GDkYKJcYORmJCcj5CMjI+Nd3uSkXqOi4ySlox8iHyAa3ZqbmtsbHt/YXp+jpaCdnqAeIOMfHlmc2tzhpWLfoeFepOOcHmDb3WLeYiLeYd8gIuPnZ2EfHp2gYt8d3BqbIKEe2B5cW5tc3RWXnBicmFgbG56cWhwZmZzdGhxa2F3ZV1WZmBgclNRTlxmZV15cIh8X1xpcmJiZWaRal9oZVtncH1wbHF0in12fIWAdXV+i3p7hYB4iINzhoV+jI2EfHmVeGZyaoNgiH1vb2t6YGpudH91X3R9eYZ4dHOFfXigj5mwnKWOgop/g5qIgIyegIualI+FiJiPj4+Ed3R3dIBwcIV0cHKEb2tpd26Dbn19bnVzUk2C38iS1pN7cHWDdYSgg5R3lpKZnJGZe5RzhZCfoZOTkYmTnJSGfpaWiY2NiJKNiJx/joB3eox+iYyKnJucm5WSeYx2ZoeQhmuHooSRiJeDhmOMkZmPlYuXjI2Ki3F6lIh7joiKk5GJeYV8fmx7ZXJva2t6eVuAeY+PgXp9fn+Gjnp6Z3JqcoqOiYGFhHyUimt9fm1/in2KhXyDeYCOlJmZinx1d4OQeHJtZ3GAhW5rdXBoanVuVF9wZXBaYGxyeGdra2JmeHJwcGNfd2BgVmtfXnZQTkthZ2NdenCJdFxcZXZgYWVlj2RhZ2JYaXNzbmtyd4x9dHqGgnV2fotzgIZ/eol/comHgZGLiHx+mHZlc259ZYh+b3BsgFlsbnl5c2F2e3uNdnJ3ind5n4ubrpufkIKFd4iVfn2KnYiGoJGPhYyYhJOOh4F0d3B5cW+Eb21vf3NlZXlxfW16fWpoa2OkmsHcrvChcmx2hHaFo4aSb5eRlqGWnIGScoWLo5eJjpWKkZ2Wg4CVkIWJkICRiomWfod6dX+JeIeEjpyamJmOj3aJdW2FiIp8iaKDkImchIVei5OXi4+Jj4uLhYlte5aBfYiFiZGPhnaFfX1rfWR4dWpueXNXiHqSh4V5foCAhYx+eGVyaX+JjomBgn6LloRrgXVtho+BjoN9gXh+j5SSmI90cneHjHVzcWd2eoRjdW5xYmp3aFJhcWdrVl9vdHphcmRfaH1wcm5aY3JgYlZuWVx4Tk1MZGdhXndziW5cXGR5Xl9kZYVgY2NfWWpya25rc3eMfnR3hIF4d3uJcYOEfH6Ie3SLiYeWhox/fpdzZ3VxeW2Le250cYFXcXp2eXJkd3mHjGl2gIlyf5yHmKeco5KFfXGMlHh5jJ6EhaGNjnyWjYCZh4R7cndwdGpwgWxqbXx1X2F4d3txdXxoYGR869q1ycPch3JsdIF2i5uJjmqZkJCdlpSBiXGFiaCOhYuVioyYlHyNkoiDiZB7kIuFj4F/dniDhHKIgpOclpSXhox1hn1ug4GIhpihgpOLnoOJYYOVj4eKhomNiIGHan2UgH2DhImOjYJxhn5/cXdodnJpdHdrWox8koKFfX+DgISKgnVhcmqHgI+KgX5+kZB8bYFrd4SNhZGCe4B8fo+Rj5WIbnB5jIZ1a3Fsc3mCYHVqb11rd2BSZXJoZlNgcHZ0YXBgXWiDcXNqV2doYmlYbVZbdUxLTGZnXmJyc4VqW1xleV5eZGd7YWRfXVlrbmVvanR4in5zc4F+e3Z6h3OFg3x/h3Z2ioaOmYGMgnuTdWx3dXl4k3RueHp9WHqGcYBvZ3l3koJkdoaFcIqWhZmhmqKKh3Rvk4tyd4+cfouaiYl8oH+EmX+BeHJ0bm9kcn9pZm14eFxfeXt7cXGAamFmYX/Vto6RpnhucXd8cZORjYdrmo+JnJOMhntph4uZhoGSkYaHmI58jYyAgYqNfI+MfYmEenR6g3txhoCWmo6Tk4GIdYOFdYJ/iZGcnYWUjp9+iGKAk4iFiISKjoCAg2d9kYB+f4KMj5B+bYJ8gnRrbXd1dHd2a2ONgY6AhX58hX+EiH5vX3FvhHuOi4F7fpCHeXCDZXmBiYWKgXqDfH6SjY+ShG5ueYt+dW1ua2x7fmRpbGpZbndaUmpzaWJRY3N4bGJlXlpqg25zYVtnX2RsX25VW3BOSE9nZVxnbnGAbFpbY3NgXGNsd2RlXV1abGxjbWpzd4d/cXCAe310eIZ4hYJ8gId1eYmBkpZ8iYZ2iYFweHl7hJNvbnyBd16Df3SBbWl6c5RzZ3OIfHKSkYOan5ughoh2dpV/bXeVmH6IkISKjZp9jJp2fnZxcGxqYXV8Z2JqdXpaYHh8em1xf2VjZ2dXnY9fcXOWvMSEd3GUipB/c5iMh52UjYh0a4iPlYB7lIyBhJuMfIqGfXyJjH+TiHWJhXZ2fYFxdYaBnpWGlI+CgnF/h3ODeoiWm5aGk42cgIhmfZOCgIaEiolygn5nfYt7eX9/h4uPfWmAfYN2Zm95eHN3c2xqjoWKgYp/eIKAhIN/al1wd3p9i4iFe4COf31xgGh4gYaJhIJ3gnp/louPjH1ta3qJfHZ0b2lofXdlXXFjWHB0U1Rvc2hiTmh0eGZhXl1Yb4Bvc1llYl1qbWBwT1lsUkRUZ2FabG5te29ZW15sY1pjcHZkZ1xdYGxqY2xpc3eBgnFufnt/dHWDeoSCfIKFdn6JgZaReIOKdIGIc3l5fo2Qb297gXFpgXl6fm5tfHaWa2p4hHRrlI2FnpigmYWIb36Mdmp5mY9/goqClZeKeo+Wb3pzcGxqZGB0e2lgZXJ7W2FzfXpncHphZWSOsbJ3S2JapdrRl3J7koyReX+WjIWako2Gb2yGkpF6eZOHgYSZinyGf3h4iYqElYBviodxdH17anmGg6WRhZOMg35ufoJ1gneFmZiTipKPlIWHcHuSg32DhIqEb4F4aICFeHJ/f4OKh3xlfH6EdmNwc4BoeXFvdZmMhoOKe3Z4gIR5gWpbb3xyf4eDiH2FiHqIcYBtcIKFjYKDcYN3f5iLjIR3bW19hH92emVoan5yYVp4W1lybk5YcnNmYEttd3ViXltbWXV9cm9XZ11manBfb05XaVI/WWdfWnBrZ3lxW1tZa2VZY3F5X2hdXmVsaGZsaXF4f4dvbX99gXVwgXuAgX+Cf3aBhYmXinGCjXF7hnx6eYSUjHVren9rb350gH1vcnx7lHBvgH95ZpKKgqGYnZKDhWeHg3BnepeKfn+FgpmKgXyNjWl4cmtrZl9hb3ltX2JveV1kbIN6YHF2X2Rl1eu+izI6PouOgHJ5homPjXeFmI1/k46Nf25shY2MdX2Pf4WClYl8gnhudoeFg5Z3boeEa3V7dWV5g4SnjIOPjIN9bX9zdYJ4hJqPi4+RkoyLhn57kod4gIWNg2yAcmmAfnhtfHuBioN4YnmEgXFkcWh+bXVxdYGbi4F/hX5zdX2AcoBuWmt8c3iIgYp7hn98h3d5cGuGgo6CiXGAd36Viop+dG1qdoCAdXVcaWl4cVpXflNacmVMW3NyZltKcXhwXltbWVx1f3VpWWJbZ2VuYmlMV2ZRPV5mXV12Zl91cVtZVW9kWmVxeVtoXmBnbWdqa2lweH2ObWqBhH95boB7fYB/gnp1goGMk4VwgItud36Be3uIk4l/aXt9a3R8coZ7c3d9f4x6eIR+fGuMjISbnZaMgoBsjX5raH+Pjnt+f4OUgn99iohrdXFnaWNbY2dzb2BhbHRhaHCJemFzdF5iY5ugkG5cNVqvtXVqgIp+k4Z3h5iHdY+MindwbIWDh3R5iXiJfZOIeX5yZ3aIfn2Xb3CGfWh2eW5leomFpYeAh42JfW19dX5/e4qXhoGTkJeIi4SJfI+JcXx+hXxpfm1rgXt6anp2goeAcmB3gn5xZHJndYJtdXuGlJGBfYF/b3d5e3R9bFdtfXVzioCGd4Z1gYl6d3JtiH+Of4NxfXt8kYeIem5taW2CgXRuXWhmdHJSXHxOXHFcT1xzb2RWS3N5a1hZWVpgcYB1YV1dYWdkaGhmTlpoTkFhZFxgdmFcdW1YWFN0YVtlb3NXal9iaGtnbWxpcHd8k2xohIl9fHB+fnyBf4J6d4CAiYuEcnuHb3F3hH97iY2Pg2p+e254eXeKd314gIKHf4R+fnpthIyImKONhYR7dot5a22FiZJ5fXuCkoCAfYqDcHJwYmZeWWdfcHBgYWhwZmpviXRhdG9bYGRqdnt/vpynpMi4coWEc5N9eYiUhHSRjYhyc3CEe4NzdYZ0iHeUiXl5cGN3hnmAkmlyhHVmd3ZjanyEiJ6CgH+Oj31xfnODeH6QjoJ3lY2Uj4iCiHuJiWx5eX92aHppbH95c2l6doCDfWhgeIh9ampzaHuAanaBjJGUfnp9fnF7dntzfWFVdXtxc4iCgXuCcIaJd3dvb4KBi318d3x7dI2EgXVocWhsiIJycF1oY3RvS2Z2TF5vVVRZc25iUU90eWJTWFhcYXCCc1thXGhlZGNqZFFbcUlEZGJcY3FeXHhoVVdWd15cZm5pVmxeYWpnZW5uaHB3epNuaYiMeX1ye355goCCfHZ9g4iGg3B2g3Ntd4KCfomLlH9xgHx4eXqBi3SDeH+BgYKEeoB1b32Ji5ueiH6Ge3eHfGh1ho2Ren+AfImGhHaPgGdwbl9kXFhmWW1zYWFhcWxsaIluYHNpWF5jbYB3qdmpx4aHs3KKeXCOdn2IkIF6lIqAdXR1fneAb3B/boV0lIZ4dGxgeoF5iI5lcYJvZ3VuW219gZCTgIF5kZJ9d3pshXR+j4qDcpWKkI6HhYV7f4ZtdXZ/bmh3ZW18dm1qd3Z/f3xgYniGemh1dWN+e2d1ho6NlXx0f3VxgHp8bH5ZVnJ8b3SChn5/d2uIhnN4anR/goJ8eXt3enGKf3xyZ3RkbYuEbXRba2B2Zklvb0xbY1hXVnhtYlBTdXZZUVZYXWByhG9cYGNtZGNdbmJUXXJHQmZfXmZpXVp7Y1JWXHVbW2drYVZrYGBuZmZscWhwdniPdGuOjHV/dnh9d4GDgXt0fYOIiINvcYB1cXV+hoKJjYt7d394hHx9hYd4h3x9gX6EgHt+c3Z4i46fjYl7ind1g3pefoeajXmHhHSGh4R3iXpibmxbYltbYVVqdGRgW2hvcGaHcmFxZldcY2t/fMrOhrmia25ui21yhXJ+hYt/e5KFenl0eXV1e2psdmOEdpKCdm9nX3yBeYuIZXGAampxY1hse4aciYOCcpeUdn17bYdwgImKhnCWjpCIhYuEe3l/cnJwfmdocmNueHFqbHF3fXx6XWV6gHdpdXlmgnZndIeLjZR9coZqb36AeG17XFhwfWxzfol7gW1uiX9wdmZ2foB+gHV6cHlzhXt4cWVyYG2LgWtzWGtfeV1JcGxOV1ZfVFV8a2JPVHZzUVJUVl1idIZpXGBramZiWW5hWGNwR0FoXWBmX1xWfF5PVmVwWVtqaF1YZ2FfcmZraHFncXN3h3lulYp0f3t3fnmDh4B1c3+GhY6DcHB7eHd1eYeGh4yGenx/dYt+fYaEhId/fn59h398eHZ5dpGTn36NfYtudYB5ZISIl4ZzkopvhYWCeoN1ZG5qWV9bXV1VaHNlYFlkcnJngXJha2RXWl9pf3i+rnqft25idIdpdHxyeoSHe36NgHd3c3dve3Zlam9gh3WOgXNqYl5+eHiKgmVwfWhra1pWb3iLpIGFf3GZknF/d3SBbH+Bj4Zyk4eMh4SJhX15dXNvaXlham1hbXZqZ2treXd6d1tnfnx4ZXN+boR0ZnaGjYaVf2+LZmt6gnRsdGJbbXpqc3qKeoFldIZ9bXBndH53fH5wemp5eoB4d29lbGFsiX1sblZrYXhWTGtsT1JPaU5ZfWdiT1V2bE1RVFVeZnaEZ15hcGhnYVdpXVxraUpEa1piZFZYVXlaTldualldbGVdWmVjXnVmbWRyZnNwdIF4cJmFdn9/eH98hYd9dXSCh4CVgm5zeXt7c3OFh4iIhHmBfXaPf32EiY6DgYN7fouDe3d8d3aanZd6ioOHanZ+fGyEhpSAco+CcYWCfoKAcGZsZ1ddW1xbVGVwZV9YY3J1aXVwZGViV1tbaH9wb3J/c4lkZXl/anR2dHSEhXiBhHp3c3Vua3pwYWhrZ4Z0jYNtZl5ffG96iX1obXdmamRWV3Jwjqd9hHx2lpBze3J7eWx6eo+DdpZ7h4aDh4R9dXFzbWh1XW1pX211ZGdmaXpve3JZZ4F2dWhwgHiCdmJ3hYt8lIFui2pte4BwZXJlX2t4ZnF1iXp9YXWDdmlrcXR6b3h3cXtlfX5+d3VuY2VhbIZ8bWtWamNyVExqa1BMTnBIXntmYk5WdWVLT1NXYGt3fmZdZ3NpZV9WYldicF1LS2tYZGFVVFVzVk1ZdmVaX2xgXFtjZV93Z21icGl0b3F+dXSZgXd/gHiAf4aEen12goN+mIVucnR8enRxhYWPgoB6i3V0kIB9gZSOgIWEfH6Mhnp+gXZ7o6WKeYmGhWx1fXt1hIONem+Fc3qFfYKEdW5qaWVWXVtbWlNjbmVbWGJ0e2pobWhgYVdfWml/aWxvf2dsYWl6emt0dXRvhoJ7gX12dW56aGp5al9lbmmBd5CEZ2VYYndpfoZ5bmlvZmZdVVhvaI+od4F6fJCOeHVvfW5ydHiOfneUdIWCgIaIdmpzdmhpb1xtZV5uc19nYmp4aHttW22Dc3Rqb4B+eXdhdoWEeI+Fc4hxb3l/cWJwaFttdmNwcod6d2FygG9naXhzcWt3dnN1YoJ6fXZ1b2NjYm18fGtrVWliZ1RMbWhQR1JsRWF4ZmJNVHNeSk1VWWVseHtmX21xamNcVl9Vbm9XSlNoWGdeWE1VbFRLXHpfXF9rXV1bYmVgemhsYW9vdm5vd3V6l313gIF5gICHhnp5eoN9gZOEcXR0fnp2dIWIkH2BfJBsc5WBe4KfhX+HfYB+hoKAint2hKyff3qIiIRscoJ6doGBgnRuh299gHSKgGpvbmRkWF9aWlpVYmpnXFpfdYJpXm1sXGFWW1xrgWVydHxpal1seHdodXdybod8fn56dnNsemhpeGddZHNoeneSgWNjVGRvZ4GEdnZmaGlhV1ZZaGSQqG9/eICLjnpwb3tmeG55inp2jnGDfX9/hm5kd3NkaWldbGJecG9bZ19tdWV6aF10gG9ya3F7fnV2YnWFi3uHh4B/d3J1fnNgcGxYcHJhcHCDe3NjcYBrYGx6b2loeXdzcGSDdHl5dHFkYWRtcn5qbFRpXl9VTHRjUUdXYkdjd2ZhTFRxWUtMWFhnbHZ6ZWVtcWZjWlhdWHZmVEpcY1hpWFhIV2VRSWJ4W11fbVteXWJjXoBpamBudHhtb252g5d5coGAfX+JjIZ+dnaGeIaMfXR1dYF5enqCjI59f4SJanSWgXuKnX1+hXmAe358holzcY+ujHt7h5B+ZnGIenR+fXZyb4Zse35tkHpjcG9iZV1lVlpZV2Nma2BdXXOGaVhwbVteV1pcbHtjcXd1bGJbbnR1aHV2cW2FeX+BeXdub3RlaHRlW2d1ZnZ2knpgXVNlZmqCgXN8YWNpXFRYXmJkkKVpeXSChZB4bG54Zndse4N5dIhygHh8eIBpZndtYGhhX2tgXnVrWWZdb29iemVbd3xrbm5weHl0dGVzg5J/h4KIenZvcXxxYXdjWW5vYG9wgHtyZXGAZF5tdWljZnd5cmttgHRye3JxYV5lbW59ZWlUaFlaVU55YFJLWllIYnVkYUpVblRKTFpWaWxye2NsbHNjYVlaW2F3XFRLY11ZalNWR1lhTkhqdlhfYW1bW19iY12FaWhhbnd5bG9qdoGQeG2CfoCBkoiEgXZ1iXSLhnRxdnaBd3x9foyPgX+TfnB4loN9mZJ5gIB4eX5/c4iEc3CZont7f4mWeGR1iXlzeXZrdHB/bHl8cJFyXnBvYGdibFRbWldpZG1mXFxyiWZScm1bWVhXYGt2Y2p1amlfW210cm10dHRrhn1/gHx3b25sZGlxY1trcmR0do5zXFdTZGBxf35xgVxiY15TWmFcZJOfZXJxhIOQc2tqeGxub3l5enGAdn9yenp7ZGZ2aF5jW2FoXF53aVdiXnBoYXdhW3t2ampyb3h0c3RocYKVg4Z+hHVyanB7bGV2V1tpbGFwcX95c2Vvflpgb3FiXmlvfGtqcn1xb3Zpb2BbZGtse2FnVGdVWFJRd1xTUFlSSGNzYmFHVmxRSVBaVmtsa3xlbW9xYVtaWFlscFdTT2ZXV2lTVEZaXE9JcnVYYGRtY1hgYWJdjGpkZG15eGtvaXV5hXtrhH2AhJl9goR5fYhtj4Zxb3Z6fXSBgn2Lj4OCl3R4gpOGgZ+JdYF/gXR/gnCHgnVvopdze4aMh3tmd4tvbnxwZ3hxe2xzdnONa150bmFnZmtTXlxWaGJsbFtccYxkTm9tXFZXVWZpc2hjdGVlXVpvdm9xdXV6bIh9gH2Id5BzY2Vrb2Fdbm1kc3iIa1pUVmJjd3x8cIRcY19jVFpgWmOXlWNucIOEiXJqZ3luZXJ1cXpreXN1b3p+dl9nc2RcX1diZFlhdWZWX2BtZGFxXV1+b2hpc3F0cXV2a22Fk4GJe4VxcWZue29wblJaZWlkcHJ/dXNibHVVYnFrW15uZHtka3R8cXFxaWxfWGRpanheZlRlVVZQVW9YUVdUUEhlcl9hRlhrT0lYVFZuaWR8aWt4a2FXXFVbdGRTUlZoUVlnVFNIWltQTnh3W19mbWpaYmBfXo9uYmdreXZubml2dn5+bYSAfoaXe3+HgYl+a5OIcmd0gHt1f4N+iY5/i5NzfYqRhYefhnt/hoxzgIZzfYJ1bqSMc4GNjHd4bnqNYGV9cWd6dHlsbXF3g2dkfG1jZmdoU2BfVWdgbG9cXm6OaE1pbGBVVlNuZnNrZnhkZV1acXVuc3t4c26Je4F3nHt6bGJlbG1eYG9qZXF5f2daVlhfbHh7em+DX2JeaFZZYFhknIhia3GBhnx3a2p2bFt1cGp5aXVybW97gHNYa29fWV5XY2RYZXFjVF9iaWFibFpgfmtma3N1b214dmtohYx/iXqHbXBlb3tscWxiWF9nZ25yf3NyXmlsU2VwZFVibWF4YW90enRqbmtqX1hgZmh1XWRWYlZTT1lnU09dT09IZW9dY0daak5KX0tYbWVfeGhufmRgVV5UXXRbVFNgZk5dYlVTSlxaUVl1dl1fZm1oWGNhW16OcWNoanhyc21ndnN5g3OCg3uIjn58ioiOeW6QinRsc4J0f3+IhYeRhJWPen2Mj4iRm4SAfIyEcn+Bc3R3cW6Tk5OTk5OTk5OTkpKSkpKSkpKSkpKSk5OTkpKSkpKSkpKSkpKSkZGRkJCPj4+Pj4+Ojo6Pj46OjY2Njo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo2NjYyMjI2NjY2Njo6Ojo6OjY6OjY2Ojo6Oj4+Pjo2NjY2Oj4+Pj4+PjoKAfnp6fX5+fX1/fn59fn5+fn5+fn+Af4CAgIGAgIB/gIGBgYOHjI6Ojo6NjY2NjY2NjY2NjZKSkpOTkpKSkpKSkpKSkpGRkZGSkpKSkpKSkpKSkpKSkpKSkpGRkZCQkI+Pjo6Ojo6NjY6Ojo2NjY2Njo6Njo6OjY2NjY2Njo6Ojo6Ojo6NjYyMjY2MjIyNjY2Njo6Ojo6NjY2NjY2Njo6Ojo6OjY2NjY2Ojo6Ojo+Ogn99ent8fX59fX5+fn5+fn5+fn5+f4B/gICAgICAgH+BgYCBg4aMjY6NjY2NjY2NjIyMjIyMkpGRkZGRkZGSkpKSkpKSkZKSkpKSk5KSkpKRkZGRkZKSkpGRkZGQkJCQj4+Ojo6OjY2NjY2Njo6Ojo6NjY2NjY2NjY2NjY2NjY6Ojo6Ojo2NjIyMjIyMjIyNjY2NjY2NjY2NjY2NjY2Njo6Ojo2NjY2NjY2NjY6Ojo6Cf3x6fHx9fn19fn19fX59fn5+fn5+gH9/gICBgYGAf4CAgICDhouOjo2NjY2NjIyMjIyMjIySkZCQkJCQkJKSkpKSkZGSkpKSkpKSkpGRkZGRkZGRkJCQkJGRkZCQkJCPj46Pjo6Ojo6Ojo6Ojo6NjY2NjY2NjY2NjY2NjY2NjY6Ojo6OjY2MjIyMjIyMjIyMjY2NjY2NjY2NjY2NjY2Njo6NjY2MjIyNjY2Njo6OjoN/fHp8e31+fH1+fXx9fn59fn5+fn5/f3+BgYGAgICAgYCAgIOGi42NjY2NjIyMjIyMjIyMjJTO2tjY2NjamoGEhISEiF0tMDAwMC1GoaGhoaGhoJqZmpqampqKg4SEhIOEd2VnZmZmaFxDREREREJLkpqZmZmZmZ6goKCgoKOAZGdnZ2dmb4SDg4ODg4OLjIyMjIyMjY2NjYyMjY2NjY2NjY2NjIyMjIyNjY2NjY2OhX19e3t6fX58fH59fX1+fX1+fn5+fn9/f4GBgYCAgICBgICAgoWKjI2MjIyMjIyMjIyMjIyMlNvp5+fn5+qcfoKCgoKGUxgdHR0dGTekpKSkpKSjnJycnJycnImBgoKBgYJyXV9fX19hUjQ1NTU1Mz+TnpycnJuboqSkpKSkp3xdX19fX15qgoGBgYGAgYqLi4yMjIyMjIyMjIyMjIyMjY2NjY2MjIyMjIyMjY2NjY2GfH16enp8fXt8fn19fX59fX5+fn5/f3+AgYCBgYGAgIGBgYGChYqNjYyMjIyMjIyMjIuLi4uSl5iYmJiZmZKPkJCQkJCMh4eHh4eHiZOTkpKSkpKRkZGRkZGRj46Ojo2NjYuJiYmJiYmIhYaFhYWFho2Ojo6Ojo6Pj4+Pj4+Pi4iIiIiIiImKioqKioqKi4uLi4uLi4uLjIyLi4yMjIyMjI2NjIyMjIyMjIyMjY2Njoh8f3l7enx8e319fX18fX19fX5+fn9/f4CBgYGBgYGAgYCAgYKFioyMjIyMjIyMjIuLi4uLi5GQj5CQkIuOkZGJh46KkJKTkYuRjI6Ph4+RkZGRkJCQkJCPj4+Pj4+Ojo6Njo6Ojo2Njo2Njo6Ojo6NjIyMjY2NjYyMjIyMjIyMjY2MjIyMjIuLi4uLiouLi4uLi4uLi4uLi4uLjIyMjIyMjIyMjIyMjIyMjIyNjY2NiX59eHh5fH18fX19fHx9fX59fn5+f3+AgICBgYGBgYCBgIGCgoSKjIyMjIyMjIyLi4uLi4qLkJCRkZGPhI6QkIaKj4WNkJCOhY6Kho2GiZCQkJCQkJCQkI+Pj4+Ojo6NjY2NjYyMjIyMjIyMjIyMjIyMjIyMjI2NjIyMjIyMjIyMi4uLi4uLi4uLi4qKiouLi4uLi4uLi4uLi4uLi4yMjIyMjIyMjIyMjIyMjIyMjI2Lfnx3dnh7fXx7fX18fH19fn5+fn5/f4CAgIGBgYGBgIGAgIGChIqMjIyMjIuLi4uLioqKioqQkJCQkIqFjoiOhoaPiY2QkJCIjoqFjoaLj4+Pj4+Qj5CPj4+Ojo6OjY2MjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMi4uLi4uLi4uLi4uLi4qKioqKi4qKi4qKi4uKioqKi4uLi4uLjIyMjIyMjIyMjIyMjIyMjIt+e3d2eHt8fHx9fX19fX1+fn5/fn9/f3+AgIGAgYGAgYCBgYGEiYyMi4uLi4uLioqKioqKipCQkJCPhYOMjpCOiYyKjpCQkIiNjIaMiIiPj4+Pj4+Pj4+Pjo6OjY2NjYyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIuLi4uLi4uLi4qKioqKioqKioqKioqKioqLi4uKioqKiouLi4uLi4yMjIyMjIyMjIyMjIyMin18dnZ4fHx7fHx9fX19fn5+fn5+fn9/f4CAgYCBgYGBgIGAgYSJi4yLi4uLi4qKiomJiYmJkJCQkJCMhoyJjoeFjYmOi4yQiIuHhoiFiY+Pjo+Pj4+Pjo6OjY2NjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyLi4uLi4qKioqKioqKioqKioqKioqKioqKi4uLioqKioqKioqLi4uLi4uLjIyMjIyMi4uMjIyKf353eHp7enp8fHx7fX1+fn5+fn9+fn9/gICAgICBgICAgYCBhIqMi4uLioqKioqJiYmJiYmPj4+Pj5CMjouPjIqPjI6MjY+LjYqLjYqOj46Ojo6Ojo6Ojo6NjYyMjIyLi4uLi4uLjIyMjIyMjIyMjIyMjIyMjIyMjIyLi4uLioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi4uLi4uLi4uLi4uLjIiAfXh5enl5e318e3t9fn5+fn5/f35+f39/gICBgICAgIGBgIGEiouLioqKioqJiYmJiYmIiI+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Oj46Oj46Ojo6Ojo6Ojo2NjYyMjIyLi4uLi4uLi4uLjIyMjIyMjIyMjIyMjIyMjIyMjIuLi4uKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLi4uLioqKi4uLh4B8eHp6eXt8fHt8fH1+fn5+fn9/fn9/f39/gIB/gYGAgIB/gYSJi4qKioqJiYmJiYmJiIiIj4+Pj4+Pj4+Pj46Pj4+Oj4+Ojo6Ojo6Ojo6OjY2NjY2NjY2MjIyMjIuLi4uLi4uLi4uLi4uLi4uLjIyMjIyMjIyMjIyMi4uLi4qKioqKioqKioqKioqKioqKioqKioqKioqKiYmKioqKioqKioqKioqKioqKioqKi4uHgHt5eXh6fHx6e3t9fX5+fn5+f39+f39/f39/f3+BgYCAgH+BhIiLiomJiYmJiYmJiIiIiIiOjo6Ojo6Pj46MjI+Sj5COjo6Ojo6NjY2NjY2NjY2NjIyMjIyMjIuLi4uLioqKioqLi4uLi4uLi4uLi4uMjIyMjIyMjIyLi4uLi4qKioqKioqKioqKiomKiomJiYqKioqKioqJiYmJioqKioqKioqKioqKioqKioqKi4aBe3h5eHp8ent7fH19fn5+fn5/f35/f39+fn9/f4CAgYCAgIGEiIqJiYmJiYmJiIiIiIeHh46Ojo6Ojo6Ojo+MkJOQkI+Ojo6NjY2NjY2NjYyMjIyMjIyMjIuLi4uLi4qKioqKioqKi4uLi4uLi4uLi4uLi4uMjIyLi4uLi4uLioqKioqKioqKiYmJiYmJiYmJiYmKioqKiomJiYmJiYmJiYqKioqKiomJioqKioqKhYB6eHl5fHt6ent8fH1+fn1+fn9/fX9/f35/f39/gICBgICAgYSIiomJiYiIiIiIiIeHh4eHjY2Ojo6Ojo6Pj4+PjoyNkI2NjY2NjY2MjIyMjIyMjIyMi4uLi4uLioqKioqKioqKioqLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4qKioqKioqJiYmJiYmJiYmJiYmJiYmKioqJiYmJiYmJiYmJiYmKioqJiYmJiYmJioqFf3l6eXh7e3p7fHx7fn5+fX5+f39+f35/fn+Af3+AgICBgYCChIeKiYmIiIiIh4eHh4eHh4eNjY2Njo6Oi42Nj5WPiYyPjYyNjYyMjIyMjIyMjIuLi4uLi4uLi4qKioqKioqKioqKiouLi4uLi4uLi4uLi4uLi4uLi4uLi4uKioqJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYR+eXt5ent7ent9fHt+fn59fn1+f35/fn9+f3+AgICAf4CAgICEh4mIiIiHh4eHh4eHh4aGhoyNjY2NjY+MjImKj42IjJGPjY2NjIyMjIyMjIyLi4uLi4uKioqKioqKioqKioqKioqKiouLi4uLi4uLi4uLi4uLi4uLi4uKioqJiomJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJg355e3p8e3p7fX17fH9+fn5+fX5/fn9+f3+Af4CAgH+AgH9/f4OGiIiHh4eHh4aGhoaGhoaGjIyMjIyLiYyKiIeJhoyOjJCMjZGOjIyMi4uLi4uLi4uLi4qKioqKioqKioqKioqKioqKioqKiouLi4uLi4uLi4uLioqKioqKiomJiYmJiYmJiImJiYmJiYmJiYmJiYmJiYmJiYmIiImJiYmJiYmJiYmJiYiIiIiIiYmCf3h7e3t6enx9fHx9f39+fn19fn9/f39/f4F/gIB/gICAgICAg4aIh4eHhoaGhoaGhoaGhoWMjIyMi4yOjoyKioeEiIuKjIuNjo+Li4uLi4uLi4uLi4uLioqKiomJiYmKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiomJiYmJiYiIiIiIiIiIiImJiYmJiYmJiYmJiIiIiIiIiYmIiIiIiIiIiIiIiIiIiIJ/eHp7enp6e3x8fX1+f35+fX1+f39/fn+AgICAf3+Af4CAgYCDhYiHh4aGhoaGhoaFhYWFhYyMjI2NjJCSjI2Ii4mJi4uLi4mLjIqMi4uLi4uLioqLi4qKiomJiYmJiYmJiYqKioqKioqKioqKioqKioqKioqKioqKiYqJioqJiYmJiYmIiIiIiIiIiIiIiImJiYmJiYmJiYmIiIiIiIiIiIiIiIiIiIiIiIiIiIiHgXx4e3x5enp8fHx9fX9/fn59fX9/f39+fn+Af4B/f3+Af4CAgIKEh4eGhoaGhYWFhYWFhYWFjIyNkY+PjZGJjIaJjIuIiImMiYeNjo+NioqKioqKioqKiomJiYmJiYmJiYmJioqKioqKioqKioqKioqJioqKioqKiYmJiYmJiYmJiYmJiYiIiIiIiIiIiIiIiImJiYmJiYmJiIiIiIiIiIiIiIiIiIiHh4eHh4eHh4WAenl9e3t7enx8fHx9f39+fn19f39/f35+f4B/gH9/f4B/gH+AgoSHhoaGhYWFhYWFhYWFhISLi46PjoyLj4iHiYmMjYWFjo2KiYyNi46KioqKiomJiYmJiYmJiYmJiYmJiYmJiYmKioqKioqKiomJiYmJiYmJiYmJiYmJiYmJiYmJiYmIiIiIiIiIiIiHiIiIiIiIiIiIiIiIiIiIiIiHh4eHh4eHh4eHhoaHh4eHhH55eX16enp7fXt8fX5+f35+fX5/f39/fX5/f3+Af39/f39/f4CChIaFhoWFhYWFhYWFhISEhIuLjI6MjI2Lh4mIiomGgoiNjoiKi5GTj4uJiYmJiYmJiYmJiYmIiYmJiYmJiYmJiYmKioqKiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiIiIiIiIiIeHh4eHh4eIiIiIiIiIiIiIh4eHh4eHhoaGh4aGhoaGhoaGh4eDfXp5e3p5enx8e31+fn5/fn59fn9/fn9+fn+AgICAf35/f39/gIKEhoWFhYWFhISEhISEhISEioqOjYmIiIqKh4iHiomIioiIh4qGi5GPiomJiYmJiYiIiIiIiIiIiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmIiIiIiIiIiIiHh4iIh4eHh4eHh4eHh4eHh4eHh4eHh4eHhoaGhoaGhoaGhoaGhoaGh4J8eXl6eXp7e3t7fX5+fn5+fn59gH9/f39/f4CAgH9/fn9/gICAgoSGhYWFhISEhISEhISEhISKi5CPiYmJi4qHh4WHiYuKiYSLjYmOjYmJiYmJiIiIiIiIiIiIiIiIiYmJiYmJiYmJiYmJiYmJiYmJiIiIiImJiYmJiYiIiIiIiIiIiIiIiIeHh4eHh4eHh4eHh4eHh4eHh4eHh4eGhoaGhoaGhoaGhoaGhoaGhoaGgXt4enp4e3x7e3x+fn9+fn5+fX1/f39/f3+Af4B/f39/f3+Af4CChIaFhYSEhISEhISEhISEhI+Qj4+IiYuIhoeIiYuLjIuJioqNio6Oj4iJiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIh4eHh4eHh4eHh4eHh4eHh4aGhoaGhoaGhoaGhoaGhoaGhYWFhYWFhoaAe3h5eXh4enp8fX1+f35+fn59fn9/f39/gIB/gICAf39/gIB/gYKDhoiGiIaDhISEhIODg4ODkpKOioeKi4qLh4uNiYqJi4iHiouIio+SioiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIh4eHh4eHh4eHh4eHh4eGhoaGhoaGhoaGhoaGhoaGhoaGhoaFhYWFhYWGhn96eXh4eHl5eXx9fn5/fn5/fn1+f35/f3+Af39/f4CAgH+AgH+BgoOHjo+PjoiHhIWFhoaFhYWSkI6KiYmIiImKioiIh4aKjIiHiYmOkJGNh4iIiIiIiIiIiIiIiIiIiIiIh4iIiIiIiIiIiIiIiIiIiIiIiIiIh4eHh4eHh4eHh4eHh4eHh4eHh4aGh4eHh4aGhoaGhoaGhoaGhoaGhoaGhoaGhoWFhYWFhYWFhYWGf3l4d3d3eXp5e3x9fn9+f35+fn5+f35+fn+Af4CAgICAf3+Af4GBg4eOjo6Ojo6Mjo2OjY2MjZCQjomHhoiJiYeIiouIiYyJiYaKjY6PkYuIiIiIiIeHh4eIiIiIiIiHh4eHh4iIiIiIiIiIiIiIiIiIiIeHh4eHh4eHh4eHh4eHh4eHh4eHh4aGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaFhYWFhYWFhYWFhYZ+eXd5d3d6eXl8e31/fn5/fn5+fn5+fn9+f4B/fn+Af39/f39+gIGEiI6Ojo6Ojo6Ojo6Ojo2NkJGOi42JjIiIiYaHiYaIioiHi4yLjpCQiIeIiYmJiIeHh4iIiYmIh4eHh4iIiYiIiIiIh4iIiIiHh4eHh4eHh4eHh4eHh4eHh4aGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoWFhoaFhYaGhoWGhYSEhIWFhoaFhIWFhX55d3l2eHl4e3x7fn5+fn5+fn5+fn5+f39+f39+f39/f35/f3+AgYOGjY2Ojo6OjY6NjY6OjY2Qj42Ni46KhoiKhISLiYeDhYSDi4mLj42JjI6QkI+NjYyLjY6Pj42NjI2Nj4+Pjo6MjYyMjY2KiYiHiImHh4aHh4eHh4aGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoeHiYqKiIeJi4yNjo2LiImLi42OjYyJiImMgHl3d3Z6eXh7e3t+fn5+fn5+fn5+fn5/f39+fn5/f4B/f4B/f4CBg4aMjY2NjY2NjY2Qj4+Pj46NjI6KiYuMjIeFiY2Lh4aIh4aHh4uNjo6Pj4+Pjo+Pj4+Pj4+Pj4+Pj4+Ojo+Pj4+Pj4+Pj4+Oj46Oj46Mi4uJh4eHh4aIhoaGhoaGhoaGhoeLiYeHiIiLjY2Mi4yLjY2Ojo+Ojo6Pj46Ojo6Ojo6Ojo6Njo6NjY2AeHZ4eHp4enx6fH5+fn5+fn5+fn5+f39/fn59fn9/f39/gH9/gIGDhoyMjIyMjY+QkpOTk5KSjYyMjIqHioyKh4eJiYWCiouIiYWJjpCNjo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6NjI2NjI2LiYaHh4eHiYqLjY6NjYyNjY6OjY2OjY2NjY2NjY2NjY2NjY2OjIyNj4+OjY2MjIyLi313dXd5enp7e3p+fn5+fn5+f35+fn5/f39+fn1+f39/gICAf3+AgYOFj5KRkJGSk5OTk5OTkpKLi4uLiomMiouLiYuKhoeOjYiIjI6OjIuMjIyNj46Njo6Ojo2NjY2MjY2NjIyMjIyMjIyMjY2NjYyMjI2NjYyMjI2NjIyNjIyMi4yMi4yMjI2MjIyMjIyMjIyMjIyLi4uLi4yNjY6Sk5OSkpSRkJOVlZSTk5COjo6Oe3Z2d3h6ent7e31+fn5+fn5/fn5+fn5/f35+fn9/f39/gIB/f4CBgoSNkpKTkpOSkpOTkZKSkoqJioyJi4qJjIuKioiHiYqKi4mKjY2Mj46Nj5KUlJOUlJOTkpGSkI+Ojo2NjY2Pko+OkZGOjIuKioqLi4qKi5CPjoyMjIqKioqKioqKiouKioqKi4yLi4uMjIyKiouLi46RkpOTk5SUk5STk5SUlJOTk5KSkpKSk5F6dXZ2eHt7e3p6fX5+fn5+fn5+fn5+fX5/fn5+f39/f3+Af39/gIGChIuRkZGRkZKSkpGRkpGRiYmIiIqMiYiJiYuJhoSJhoyKh4ySkpKTk5OUlZWWlZWUk5OUlJSUlJSUlJSVlZWVlZWUlJOTkY+QkZKQjoyRlZWVk5KSjo+QjYqKi4qKi42OjY6RkpCRkpKSkpGRkpKSk5OTk5OTk5OTk5OTkpOSkpKSkpKSkpKSj3h1d3l6e3t7ent9fX19fn5/f35+fX5+fn5+f39/fn9/f4B/f3+AgYKEi5GQkJCSkpKRkZGRkZGIiIiIi4uJg4eLi4yMiIeHjYyNkpSSkpOTlJWWlpaVlZSSkpOTlJSUlJWVlZaXlpaWlpWUk5SUlJSVlJSUk5OVlZWUk5KTk5OTkJGSkZGSk5OTk5KSkpOSkpKSkpKSkpKSkpKSk5OTk5SUk5OSkpOTkpKSkpGRkZGPdnJ3enp7e3t8fX59fX1+fn9+fn9+fn5+fn6Af39/f3+Af3+Af4CBgoSKkJCRkZGRkZCQkJCQkIeHh4eIiIiFi4+KjI6Njo+OkJWUk5OTk5SUlZWVlJSUk5KSk5KTlZSUlZaWlpaWlpaWlpSTk5OTk5OUlJOSk5SVlZSTkpKSkpOTk5OTk5OTk5KSkpKSkpKSkpGSkpGRkZGRkZKTlJSUlJSTkpGRkZGRkZGRkZGRkYx0c3d6ent7e3x9fX1+fX5+f35+fn5+fn5+fn9/f39/fn9/f39/f4GDhIqQkJGRkJCQj4+Pj4+Ph4iKi4yNjYuOj42Mjo6RkpGSk5OSkpKSk5SUlJOSk5OTkpKSkpOTk5OTk5WVlZWUlZWUk5OTk5KSk5OUk5KTlJSUk5KSkpKSk5OTkpKSkpKRkZKSkpKSkpKSkpKSkZKRkZGSkpOTlJSUk5OSkZGRkZGQkJCQkZCRinN0dnp8fHp7fXx9fn59f35/f35+fn9+f31+f39+fn59f39/gH+AgYKDipCQkZGQj5CPjo+Pjo+Oj4+Pj4+Pj4+PkI2OjpCRkpKSkpKRkpKTk5OTkpGSkpKSkZGSkpOKh5SSk5STk5OTlJOSk5OTk5OTk5OSk5OTkpKSkpKSkpKSkpGRkZGSkZCRkZGRkpKRkZGRkpGRkZGRkpKSkpKSkpKSkpKRkJCQkJCQkJCQkJGGc3V2e3x8e3x9fX1+fn1/f35/fn5/gH9+fX5/fX5/fn5/f3+Af3+BgYGKkI+PkI+Pj4+Pj4+Pj4+Oj46Oj4+Pj5CQiI2PkJGRkpKSkpOTk5OTkpKSk5KSjIuSkZGSkXeGk5GRkpKSkZKSkpKSkpKTk5KRkZKTkpGRkpKSkpKRkJCQkJGRkZGQkJGSkZGRkZGSkZGRkZGRkZGSkpKSkpKSkZCRkZCPj4+Pj4+Pj4+PkX9ydHh8fHx7fHx9fX5+fn9+fn5/f3+AgH99fn5+f39+f39/f4CAf4GBgYqPj4+Pjo6Ojo+Pj46Ojo6Ojo+PkI+Pj4+GjpCQkJCRkZGRkZGRkZGQkJCQkJGJcoqSkJKAc4mRkJCRkZCQkJGRkZGRkZGRkJCQkZGQkJGRkZGRkI+PkJCQkJGRkJCQkJCRkJCQkJCQkZCQkJCQkJCQkZCQkJCPj4+Pjo+Pj46Ojo+Pj4+PeHJ2eXx9fHp9fH19fn5+f35+f39/f4CAf39/fn5/f35/f39/gIB/gYGAio6Ojo6NjY2Ojo6Ojo6NjY2Oj4+Pj4+PjoiQkZCPj4+QkJCQkJCQkI+PkJCQj49zcIyQjHR3iJCPj4+PkI+PkJCQkJCQj4+Oj4+QkI+PkJCQkJCPjo+QkJCPj4+Pj4+PkJCQkI+PkI+Qj4+PkI+PkJCQkI+OkI+Pj46OjoyMjY2NjIqDiYhzc3Z4fX58eX18fX1+fn5/fX5/fn9/f39/f4B/f39/f4CAgH+AgH+BgYCJjY2Ojo6Ojo6OjY2OjoyNjY6Ojo6Ojo2NiJCRkI6Njo6Ojo6Ojo6Pjo6Ojo6Oj3drepCGdHeHj46OjY6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Pj46Oj4+Pj4+Pj4+Pjo+PjY2MjYyNjoyLi4mJiYiFhYSDgoKEgnR5fXp4dXJrZWltb2xmZmdncHNzd3l9fnl6e3x9fX1+fn59fn9/fn9/f39/gIB/f3+AgIGAgIB/f4CBgImNjY2NjY2MjYyMjIyMi4uLjYyMjIyMjIyGj5GRjIyMjIyMjIyMjIyMjIyMjIyOe2Vrhn5xdYaNjY2MjIyNjY2NjYyMjI2MiomKi4uJh4KAh4iEgXt6gH57fXx8fXlzcnJycnV1cG1ramppZ2NkYV9bXF1eWFVXWFlTS0VJSkpLTE1PT0tgdHR3eX19eHp5e3x8fX5+fn1+f39+f35/f4CAgH+AgICBgYCAgICAgIGAf4OEhYSFiIuLjYyMjIuLi4yGiYqKioqKh4OOkJGNiouLi4uMiYmKioqKiouKi4doXmhlZ2NugoWDhIeJiYWCg397fHl6e3pzcHFxcW1samdsbWdlZmVmZGNlZGVkZWVlZWRkZGNhYV5dXFpYWFdUUFFSU1JTTU1KSUZESEpHR0hHR0xOSWdzdXh6fXp4d3l8fHx8fn5+fn9/fn9/f39+f4CAgIB/gICBgICAgICBgYFnXmBjYWNucX17ent/fXd8fHZ4ent4eHpvcXt4eXt8e3h3e394dXd0dHZ1dXZ3b15ybFxpbWdlaGtsbm9tamlpaGhlZWRkZF9gYWJgYF5dWVhaWltdXV9gX2BfX19gYmFeXl5eWVldXF1bV1dWUlRSU1NOUUpISUZERUhMTEhGR0lLSklNbXJ0eHp7end3eXt6e3x+fn1+f39+f35/f35+gIGAf3+AgIGAgICAgICCgWdYW1pZXFtcY1xaXF5ga3FtcHBvbm5vbmtpbmxrbG9qaWtraWpraWZmZ2dnaGheaHVsXW11bmZiY2JhYmBgXVhbW1dYV1RWUVBUU1NNSkxLTExOTk9UWFhXVVVUUlBQTU1QT05LTE1QUU9MTEpHSUlHSEhJSEhIR0ZHSEpKSEhISUlISVZwc3V5ent5dnZ5enp7fH59fX5/f35/fn5+f3+AgX9+f4B/gICAgICAgIGBbFtYVlZWWVlaWVlYVVZoamxubmxra2poaGloZGVkYlxiZl9fYWNfXF9dYF1eWl1nb21fa3N1bFlZX1tYV1NOTUtLS0tMSUtNTktKS0tMSktQTEtLRkdHSUlGR0lISUZFSEdGRkVERUVEREVJSUlHSEdIRkZLTUtJSUlIR0hLTU1LTExMVXFzdnl6e3h2d3h3ent8fn1+fn9/f39+f3+AgIGAfn5/f4CAf4CAgIB/gYJoUlRVVlNVV1lZWVdXV1tbYWNfXlxbWFZWWVZSVFJRUVVUU1NUUE1KTU5QUk9NVmJobXNwcHNuUlFUUFBOTk9NSk1MS0xKSktLRklJSkxJR0pISUlFR0dGRkVFSElKR0ZHRkZHR0hKR0dISEpMSkpLSUlISktLSkhKS0pISUtMTU9QUEtUdHN1eHp6eHZ2d3d6enx+fX5+fn5/f35+fn+AgYB/f3+AgYB/gICAgH+AgmlQUlRXVVRWWVdYWFpbVFRTUlBRU1FRUU9OTlBQUU9MTlBPTk5NTEtNTk5QTU5UYWVlbm1taWhUTU5PUFBPTk5PTk5QTk1NS0lISEpJSUlJR0ZHR0dJSkhJSEhJSEhHSEdISElISUxLSklISkpJSkpIR0pMS0pJSUhKSktMTk1NTU9RTFVzcnN3enl3dnR2eHp7fX19fn5+fn9+fn5+gICBgICAf4GBgH+AgICAgICBbE9PTlRZVVVdW1lXV1hOTUpKSUZKT0xKSkdJSk1NS0pMTUpHSUlJSktLRENGTFpobGhtbG1pZ2NbVVJPTk9NTk9MTk5OUFBPTE1MTk1MTEpJSEdJSElISElJS0xLS0pJS0pJSklJSUlJR0dKSUdJSUpKTk1OTEhJSklJSk1PT01MT1JOWXBwcnd4d3d0c3R3enx+fX5+fn5+fn5+fn9/gICAgICAgYCAf39/gICAgIFvS0pNTlFOTlVXVlZSU0lFQ0VFUkREQT5CP0RAQD5CREFAQURHRkVIRUVQVFVaZGttZ2xsa2pqaWhpZ1tMSklKSUlLSkxQTk1MTU1MTU1NTElIREZGR0ZGRklKSUlLSkhMSklKSkpJSEhKS0tIRkdJSklLTU5OSktPTUxLTU1PUE5QT1BgcG9yd3h2dHJzdXd6fX19fn5+fn9+fn1/gICAgICAf4CAgIB/f3+AgICAgXNQUE5OUE1KS1BSUE5RQ0RCQUZRRT1DPT9FSDk6Oz0/PTxBRkA+Ojs+QkpZY2hsa29sbWxqaWpraV9USUVFRUZFR0dHR0pHSEpLR0NER0pHQ0RFQUFDR0hHSEdISktKSElMS0lISktLTU5MTUxMSkpMS0lLTU9PUFNRT1BQTk9QUlFNUGdwb3N2dXRycXR4eX19fX1+fn5+f4B+foCAgH9/gIB/f4CAgH+Af4B/gICCdlRVUVFQT0xNUFBOT09BQkFAQkE/Oz48Pj8/Ozg5ODs7OkA6Oz48Ozs7OkZOTWFtcHB0cGpraVhLQkVFREdJSEM/QEBAQUFCQUE/Pjw9PkFAQD8+P0BFR0dHSUtMTk1OTUxNTUpLTVBVU05MTlFOTk1OTE1NTk9OTk1LS05OTk1OTkxUbnBwc3R0c3Fydnl5fX19fn1+fn5/gH5+gICAgICAgH9/gICAgH9/gH+BgIJ4UVFSVFJTUVNTUVFST0BAPT4/PD8+QEE/PT45Ozo7Ozk5Ojg4Ozw5Nzk7Oz07O0tgbXtzaltHPUBAQ0ZEQ0NDPzs+PkBDQ0E/Pj9BPkBAQj9APD9CQEFDRUVFSktQT1BPTU1OTExMT1JRUFJOTExPTUtOT0xMTEtMS0tKS0tKTU1LS1xxcXF0c3VycXR4eHp9fn1+fn5+f39/fn5/gIGAgH+Af4CAgICAf4CAf4CAgXxSTU9RUFFSUlRSU1NOPDs8Ozs7P0BBQkA9PDk8PTw6Nzk6Ojk3OTo6Nzg6OTk6OThCam1IOTc8PD1AQUA9Ozs+PD08QEJDQT9BQkE9Pj09Oz0/Q0RCQD9BREJFR0pKSkpKTE1MTExNTExOVVNLTE1USVBKSU1KSUpLS0pJSEdKS0lKZnJxc3RzdXJydnl5e31+fn5+fX9+f39/f36AgICAf4CAgICAgIF/gIF/gYCBgFZMTlBQTlJRUFBRUU44PT88PDo9PkFAQT8+PkA/Pj48PT0/QD09PT9DOz09PTw9PDtHXDk8PD49Pj9AQUA+P0E/QEBBQEBAPT8/PTw6Oz09PD9AQUJCQUBCREZGRkdGR0dISUtMTExLTEtKS0lKSk1MTEpMS0lISUxMSklJSElLR01tcHF1dXR1c3V4eXl8fX5+fn5+fn5/gH9+gIB/f39/gH+AgYCAgYCBgICBgYCCYUtPT05OT1BPT1BQTzo8Pjw9Oz8+PkFBPz0/Q0NEQT89PkBBP0A8XG5APkRFPz5BPEVePT49Ozo9PkFBPz5AQD9BPz89PD48PTs7PD0+QUA/QD5AQ0NEQkRFSEVFR0hISEdGSUpJSUlJSUhKSkpKTEtKSklJSEhKSktMS0lLSkpIVnBwcXNzdHR1eXp7e3x+f35+fn5+f39/f39/f3+Af4CAgICAf4GBgICAgIGBgIJtTFBRTk9QTk5PUFBPPjw8PT4/P0A+QEA/Pz9CRkQ+PDw9QD04Ojttd0g4Ozo9PUE8S2M9PD08ODo7Pz49PD07PEA9PTw8Pjs9PD0+QUBCQUBAP0JEQ0RFRkZGQ0VHSElJSEhJS0tMTUpKSUpNTUpLSktJSEhISEpJSktKSk5MSUlfcHBycnJ0dXZ6e319fH5+fn5+fn5/f35/f36AgIB/gICAgICAgYGAgICAgIGAgnZNTk5NTk5MTE5QT0w+QTw8PT8+QkM/PkFBQUJBQFlSPD09SUxGRnV3TTc4ODo7Pj5XakE7PDw6Ojs+Pz89PDg6Pjw9Pj89Oz4/QEJDQkJDQ0FCQkFCQkRCQkRCRENGSUdGRkhJSUtNSklKSktMSkpJSkVESUlGRkhISUpKTEpGRmdwb3FxdHZ1d3t8fH18fn59fX1+fn9/foB+fn+AgH+AgICAgICBgYCAgICAgICBek5JS0tMTExFSUxOTTw/PDw9PkBAQUE7QkNCQ0BDc3lJO11/g4B6fHdWPD0/PT0+Rml0TDo9Pj89PT5BQ0A8OTtBPz4+QT07P0JAQkNCQENDQUNBPT0+QD0/QUFBQENFRUBAQ0JDR0dFRENGRUZGR0VEQEFHR0ZDRkRHSEpHQz5IbG9wcHF0dXZ5fHx8fHx+fn1+fn5+fn5+f36Af3+AgICAgICAgIGAf4CAf4CBgIF+UUhLTU1NS0pLTE9RQD8+PkFBQEBBR0FCRENFQUhyeWtigoSDgoOAfF0+QENAQD1KcntZOj1BRUFCQkZIQz08QEREQUA/Pj1AQT4+Pj88PkBER0VAPkBBP0BDRkVDQkNDQEJEREJERUFCPkFCQkFCQEA9QUJDRENDQUNFR0E/PVZwcHFwcnV1d3p8e3t7fX9+fX19fX1+fX5+fn9/foB/f4CAgICAgYCAgIB/gIGAgX5SSEtNTUxLS05OUlVEQkBDQ0FBQkBCQ0BAQUFARm90fYKCgYN+fYR1TEFDRUA/Pll7gF0/Q0VJSklJTU1LRUNGR0dFR0VFRUREQ0E/QD4+QkZKSkdFRUdGRkpOTktKSUdHSEtMSUdHQ0REREVEQUJCQ0BDREVEREVERUZDQkFEZW9wcXF0dnV4e3x6fHx+f319fX19fn59f4B/f39/f39+gIGBf4CBgICAgH+AgICAfVJJSUpKSEpKTE9SU0dGRUdIREdIREA+PDs+QEVFaHN9gXx/hH55hXJDREVEQ1d1hoeHflhHSEpNTE5PT0xIR0hHSElJSEhHR0hIRUNFRUVFRkhKSkZFR0lKTU9PTU1LSktKTU5LSUhHSEhIR0ZFRkZGREZIR0VFSEhGSEdIRlFubnBxcnV2eXt7e3p9fX5/fX19fX1+fn1/f39/fn5/gH+BgYGAgICAgICAf4GBgIB8UEhHSElGR0lKTU5OSkxJSUpLTE5KRkNBQkNGSkdge4B/d3+EhYOEiWxBQVZ0h4mHh4eIg1dITE1MTU5MSUdHR0dER0dHR0ZIRkhFQ0RERkVEREhIQ0NDRklLS0xMTExMTElKS0pKSUlJSEpISEdISUhHR0hGRkZISklJSUlIXW9vcXJ0d3d6e3t6e319fn59fX19fX5+fYB/f39+fn+BgIGAgYCAgICAgIB/gYCAgHxNR0ZIRkVGR0dKS0pMTUxLTU5NT0tJSEhKS0tMTE5bfIKCg4OFhoaIg1ZshIeGhoaHiIiHfFBLTEtIR0ZGREVDQ0BAQ0NDQ0ZGRUJAPj5AQUFAQkQ/Pj9ERkhERUdJSklKSEhIR0lJSkpJSEZKSkpKSUpJSkpKRklMTEpKS0tmb3BzcnR2eHl7e3t8fH1+fn19fX19fn59f39/f35/f4CAgICAgYCAgIGAgICAgICAfU9GRkdGR0hHRUZHR01NTUtMS0lHQ0NDRElLS0xMSlSBg4SEgoKFhoaDgoaFhISGhoaHh4aKdUlJRkI/P0A/Pz88PDw+Ozo8QUFAPjw5OTg8PD07Pjs4Oz9BQkBBQ0NCQEFBRERCQ0ZISUhISExNTEdJSk1NTk1KSktLSkxNU2xwcXRzc3d5e3t7fH19fn9+fX19fX1+fn5/foB/fn9/gICBgIGBgICAgYCAgIB/f39+UUZFRkdJSUdEQ0VGTk1MSklIRT85Oj5ARUhISkpJZYWEhIR/gYKDgoODhIWFhoeIiIiIiYyOZkJCPTg4Ojo5ODc4ODk2NDc5Ozw6ODU1Nzc4OTc4NzU4ODs7Oz1AOzk5OT08Pjs8PUFDRUhKTUxMR0lIT1JRUFBOTE1NT1Fdb3BydHN1eHp7e3x8fn5+f359fX59fX5+f39/gH9/f4CAgICAgYCAgICAgICAgIB/f39RR0ZHSEpIRkVGR0hMTEpJSUdDQjU2OjxDQENHSUlohoSEgX6Bg4ODgoOEhomKjIyLi4mKi4yJVDo4NjU2NzY2NjU2NzczNTY4Ojg3NjU2NTY3Njc2ODo2Nzg4OTs3NTc4OTc5Nzc2OjxAR0ZJRklGRUZPU1JTU1JPUFBSVGVwcXN0dHZ5e3t7fH1+fn5/fn19fX19f39/f3+Afn+AgICAgICBgICAgICAgICAgH9/flJISEhJS0lHSUpJSkpLREVIRUJANTc4OD06PUVDQmWFg4GAgoODg4ODhYmLiomJioqKiouJioqBRzY3NjQ2ODg3NDU3ODU2NzY5OTc3Njc2NTo5Ojo6Ozc5ODk4Nzc3OTo5ODg3ODU4OTtBPT4+QkE/QUtMT1FQUU9PT1JXa3FydHR1dnp7e3t9fX5/fn9+fX19fX5/f4B+fn9/f4CAgH9/gICAgICAgH+AgICAf39+VEhHSUlMTUtKS0tMSUg/QEFAPDo1Nzk4OTc7Qjo9cYSAgYOEhISEhYaJioqIh4iIiIqKjIqJiYx6Pjk4ODs8Pj45Ojo7ODk7OTo7Ojo5Ozo5PT09Pjs7PD06PTs5Ozs8Ozw8OTk8ODo6Ojo5OTk8Pzw8QUJESUpNS0lLTFdvcnN1c3Z4e3t8fHt9f39+f359fX19fn9/f35/f39/f3+Bf4CAgICAgICAf4CAgH+Af35URkVGSUxOTkxKSk1CPzo7PDo4OTk4OTo6Ojs/Pkh+hIKChIWFhYaIiYiHhoaGiImIiYuMi4mKioxsPDs+QkNFRUJBQEI+QEJBQD49Pj5APz8/QD8/PT0/Qj9BQT9APz1AQEA+P0E9Pjw7Ojs5OTs/PTs8PT1BQUNBQkNBWHBxdHR0dnp7e3x9e31/fn9/fn19fX5+f35+fn9+f4B/f4CAgIB/gIGAf39/gICAf39/flJFQ0FHSk5PTElHSzo4Ojs5Ojo8PTo7Oz09P0BCUoKCgoSFhIWEhomJiIiGhoaHiImKi4uKioqLiotePkRHSUxKSkZHR0RGR0dFQkFAQ0VDQ0FCQ0I/QERIRENFQ0VFQUZFRkRFRkRAQj48QD49P0A+Pz4/Pj8+Pjo7PTxgcXJ0dHV3enp7fX19fn5+f39+fX19fX5/fn5+fn5/gH9/gICAgICAgICAf4CAgIB/f4B+UERAPUNIT01HRkJEOTc6Pjo8Oz4/Pz89QUBDQ0ZXhIKDhIWFhoaIiYmIh4aGhoeJiYqLjI2MjIuKiohWSE1MTkxOSklLSUlKSklFQ0RGR0ZEQ0VGREJISUtIR0dGSEdFSklLSUpLSkNGQ0NEQkFBQ0JEQ0NERENBPTs9QGhwc3R0d3d5eHt8fH19fn5/f359fX1+fn9+fn59fn+Af3+AgH9/gICAgICAgICAgH+AgH9PQT49P0RMS0BCQkE5ODw+Ozw7PkA/QT5CQkdHSlmEgoOFhYaHiImJiIiHhoaGiIiIiYqMjY2NjIuKjH9QTlBOTE9MSkxKSUlISkZERkhISUVFSEZGRUxMTUlKR0ZISUpOTU5MTE5LSEZHR0VFQ0ZGRkZERUhIRkNBP0BMbHB0dXZ4eXl5fHx8fX1+fn9+fn19fX1/f35+fn5+f39/f39/f3+AgICAgIB/gICAgICAf1FBPz4/RUdHPTxAQDg3PDs8PTo+QD4/QENGSUpRX4GDhYSFhoaHiIiIiIiIh4eIiIiJioyNjYyMi4uKjXJOUlBOTU1MTEpIR0VJSUVKSEdKSklKR0dHS0xOTExISElKTVBOUE5NT0tJR0lKSElESUhIRkZHR0hHQ0JBQ1VucHV3d3l6eHl6enx8fX5+f39+fn1+fX5+fn5/f36Af4B/f3+Af4CAgICAgICAgICAf39/VERBQUJHSEI/OD9AODo8OD0+Oz1BPj9BREhKTFVxg4SEhISFhoeIiIiIiIeGiIiIiImJjIyLjIyMi4uLi19TU1FOT01LSkdFQkdKR0xKRktOS0tKSktNTE9QTkhJS0xPUVFQUU9PSkhKSkxKS0ZHSEdGRklGRUVCQUJCXG9yd3h5enl5eXp6e3t+fn5/fn59fX19fn9+fn9+f4CAgIB/f39/gICAgICAgICAgH9/f39VRUNFRUdHRUQ7P0E7PTw5QD4+QEJHR0FHS0xQVnmFg4ODhISGiIiIiIiIh4eIiIiIiIqLi4qMjIyMi4uNfFhXU1NVU05MS0pERUZLT05PV1VRUE9RU1JNU1RPTVNMUFNVVlJTUVBMSk1NTUtOR0dKRkZISkRERUVCRUNjcHV5eXp6ent6e3p6fH59fX9+fX19fXx9fn5/gH9/gICAf39/f3+BgYCAf39/gIB/f39/f1VGRkdHR0dIRj5AQj0/PT1CP0JCR1ZORk5QUFRYe4aDhYWEhIeIiIiIiIiIiIiIiIiJiouKioyMjIyOi4uLaFhXa2FFUlFRUEk7O1JTUmB1XFVWVFZZWVJYWFJaZlBVV1pdUlRXUU9NUlFQUFFLS0tISEpIRUZJSUlISWlydnl4eXl6e3t8ent8fXx9gH59fX19fX1+f39/f3+AgIB/f39/f4CAgIB/f3+AgH9/f35+U0hKSUhHRkZFPz9BQUVBQ0dFREVMWFJNVFVWWFt8hoWHhoWGh4iIiIiIiIiIiIiIiIiIlJyMioqMfWGKi4uHbVxkVTpYWFhTUT9AVlVZXGRgVllicl1dV11aVkVRWVpbWV9UWWdSVlZYVFRWVE9PTUpMSklJTE1LT01Tb3N2eHl4d3p5ent6enx9e35/fn1+fX19fn1/f39+f4CAgH9/f3+AgICAgH9/gH+Af39+fn5WSkpJSEdFRERCQT9ITUlNUEtJS1BUU1NYWlpcXHiFhIWFhYWGh4eHiIiIiIiIiIiIiImcnaCPiY5nO36LiYqLeW5wWVpbW1JTUlZWVFtadYNZVX2QYFxYXV5XSVZdXVtbX1lIWVhZW11YWFlXUlFNUFFNTU9TUVFVUmFzc3Z3d3Z4eHh6e3p8fX19f39+fX59fX1+fn9/gH9/gIB/f3+Af3+AgICAf39/gIB/gHh5fVlOS0lJSEZCREBBOlBRUVdYUFBPUVNUVFhYWVpbboGCg4WEhYaHh4eHh4iIiIiIiIiIiJaanJeIioFuhomIh4SKfmZZWVxZU1ZUV1JRV1ZjloBRZXJYWldfaFBgZltbWFxnYUdPWmhnXFtcXV1XUk9TUFBRVlZWVllabnJ0d3Z2dXh4eHt7fH19fX5/fn59fn18fn9/f3+Af39/gH+AgH9/gICBgYB/gH1yfX9/b3R8XVNQT01LSkVDP0A7UFBaWltSU1FPUlJSVVNWVFdfdXiAhYSEhYaGhoaHh4eHiIiIh4eIh4ORjomJiIaFiIiGfYB7XFBVWFRSVFJRUUxPTUtmeVtdVFlVVl1aTFRaVVNUXlpYV1dXemtYW1tcXlRRUVBJTk9XVlhbWmRwcnZ2dHR2eHl5e3t8fH19fn99fX1+fX1+f39/gIB/f3+Afn56eHd2c3V7f3+AgHRrfn5rcnleW1ZVVFJPS0ZDREFNXoNsVlJTTk9RT1FVUlNSUlVjZHaAgoKDhISEhIWFhISDhoaGhoeIhn6JiYiHhoOHh4d5bXFWSUtNTktNS0hKREVJRUM+VGRVf1JRUU5LUVRRTU9ZUk1OUVNVVU1RU1JQT01MSENJSFJUVVpcbHF1dXVzc3d6ent7e317fX19fn19fX59fn9/f4B/f399fX5+f39/f4B+e3Zzd31+fmR1fWlxdF9kXV5bWVZQTElMSWFsknRQUVNOUVJRUltSU1JRUlVUYnN7fH+AgYKBgX99e3uAf4OChYaHgoaGhoGEgYaFhnVfXUxEP0NDQ0NCP0RQQkNAQz1DSUdWQEhOTEddaVBIRk5GREVGSUdIQ0RIR0hLR0RCQURAT1FNUmRydHZ1c3R1enx7e3t7fHx9fHt+fX19fn5/f3+AgIB/f3x8fX+Af39/f4CBgH12dHt/bWh8Z25xZmllZGJcWFNRUFVSc1dlW09PTkxRU1FVWVNVUVFUU09WYGtscnZ7e3h5dHJuc3RzeXh+f4OAg4OCgIKAgoGCa01HP0A7Oz5AQD8/PmtQS2FFRkhJRUI/R0xNR01SVUlCRT8/PD08PT0/PT9BQ0NAPzw9Qj5KTkdVbnR0dXN0dnh6fHt9e3x9fX19fH59fXx+fn9/f4B/f39/enl3eHd2dnh7foB+fXt4dnx1YXhnbHBqbGppZmBbUVJaXFleSkpQUU5LTFFSUVRVVVdRUVdWUFhbYl1hZ21tbG9rZ2BucmptbHF1e3p9e3h6fHx4d3hlQ0BAQj06QkNCQkRCXF1Pe05PTk5LTE1PT1BMS01XTUhHQEI8OTc3NTk5PTs7Ozg5ODk/PEJIP1xzdHV2dXZ3eXx8fH18fH19fn58fX19fX9/f39/fn9/f314dXZ6e3p3eXh1d3t8eXh1eXdjcWhpcG1ubW1oZl5PUF5cWklIUFJRT01QUU5RUlRWWFNSWVROWVpbV1ldXl5fZWBdXnF2a15gZ2t3b29sam9ubmxmYllIRkdIQkFHSUVFRkRNUlBhV1JXUVBTU1JVW09PUVZQTUlERj46OTY1ODc5Nzk6MzY1Nzk1PEM+ZXNzdnd3eXl7fX18fHt8fX5+fnt9fn19f39/fn5+fn9/e3d1eX18enh8fHx8dHd2d3Z1d2tuaWhxbm9vb2prYFVXXlpYTUtUVFNQUVVPTFJTVFdYVFRYUUxXWVpWWFhWWFldV1dYaHNrXVZhc2tiYV9eZGFfXllUUU5OTkxJSEpLSUlGQ1FQU1tXVFROUVNZU1xlVU9TU1FOS0lIQz9BOTk5ODk3ODg1NzU3ODU5OkducXR3eHl7e3x+fX18e318fn5+en1+fH1/f359fn59f358dHR1e3hycW9vbnR4cXJzeHZ1cWZkZ3JucHBwbm1kXV9fWVdPUFhWVlNUVk9PVFZYWFlTVVRMS1RWVVVVV1BTVVdUVVJdbl5STllfW1ZZO0RWWFRbZkpMT1JST01NTk5OTEpGUVBVWVNUT0pOT1VTVFxWUlVTUk9NTElISEY/Pj06Nzg3NjU5OTY3Njc1V3Bwc3d5ent8fX59fnx8fXx+fX15fX18fn5+fXx8fX1+fXxydnF4eHJ2dXFxbnBwb3B1dnRuamRkanBwcXJwbmZlZGNcXVJUWlZXVVRXVFJYWFlZWVJVT0lHT1BPT01SSlBQT1BOTk9UTE1JUE9TVFUyPVhNSUBRPWNhUVNRUE5QUVBOTk1RTlRSUFJNSUxKT1JQUlJTVFFST0xMS0xMSENCQT06Ojg3NjtCNTU2Njpkb3F0d3h7fHx9fnx9fH19fX18e3h8ent9fX58e3l9fH18e3B1b3d1cHV0b3N2cHFxcHR1dmNqZ2VXaHRycnFuaWlocFZWVFVYVVdVUldWVVpZWFdVUVNGRUFGR0dIRkpESEpJR0VITEhLSUZMTVBNRy9FX1I+Mz8+am9hUlJRQEdVUVBRUFFOUU9QT0xKTExPUE5OUFFRTlBPSkxNTUtHRUVEQjs9PDw5PUc2Njc3RG1wdHV5e3t8fX18enx8fX5+fXt5dnh3eXl8fXp6dn17fHp6b3Fud3JwdnFtcHNwb3Bzc3N0ZmdgaFpXa3JzcmxtbWtuYWVQU1RSU1RPV1ZWWVlWUVFRT0A9Oz0/QUJBQ0BCRURBQEdIR0hFRkhKTUxFR0NPUkM4RU5TXWdTUFNBR1VQT1FRUE1NTk1LTEtMTk9PUU1PT01ITExJS0tMS0dGRkVEPEFBPjtARTs8ODlTcHJ0eHt6e318fHt5fHp6fn58e3V0dXJ2dnp6eHpyfHt8eXltcW94cnF1bm5xcm9vb3Rzc3J1dGtnZ15lam1wa29xbWltY0xPT01RU0xUVVRYV1VNTEtJPDk4Nzs+QD48PUFAQj0+RUhHQ0ZGSUdKSkBGQUFARkhFSk9IUVJhXFFQUk9TTk9QTExPTUtNTE1PTltXS01RT0dJSENISkxMSkZGRkQ/QkM+PEJHP0I/QWRwc3d6enp7fHt6end7d3l+fnt7cXN0cHJzd3R4eHN6e3l2d2xxb3ZxdHRsb3Fybm5vc3ZydHNycmtsZW5zaG1ubWxtbGprSUxISE9RSlFTUVRTT0tIREQ9OTc3OT9CPjs/QkBAPkFESkVDR0dJR0lFQkI/Pj1DQkFHSUVOT2JlUU1PTldLS01LTE1NTUxLT05TZE5KTFJJSUlFQUhKTE1OSkdJRkJBQkA/RUZFSERLbm92eXl5e3t6fHp3c3h0eHx8eXpucXJtbm9ycnZyc3h8eHZ2bXBtc3B1dGxwcHJvb29ydnVyVlZucWdseYRqbXFybm5qaG9ISkNHTU1KTVBNUE9ISkQ/QT05ODo6P0I/PEBCQUFERUdLRkNISUdHSENDP0I/P0BBPkRFQ0xOUlRMSklNVEZJSUpMSktMSUpMTU9QUlBLR0NMR0NCSkpMTU9OSUpJR0NDQ0RJSk1MSVlybXd5eHp7e3l8dnJwdXJ0eHl2eGpxbmpsbG50dG10dXtzdHhyb25xb3ZzbnBvcnBvcHN0eWpOYGdzanR8eWdvc3FpcWhkcUdLREdISEdKS0lKS0RHQj0+PTo5OjtBQj89QkJDQ0dGSUtKRElJRkdHQ0M7QUBCPkBAQ0VESU1QSEhLR0hLREhJTE1ISkxISUpMS01dUkhIRE5GQURKSk1NUE1LTUpLRkdHSk1OUU5MYm1pdnZ3enl8en1xbWxza3B0dHR1aHBtamlra3RwbnR0eXByeXRvcnFvd3NvcXB0cnBydXR5a05WbXVscXt2aW5vaWt0Z2RvRktDRkVHRUZGR0VHQkNAPjw9OTo6O0BDQD5CQ0VFSUVJSkxGSUlHRkZEQjtBQ0M+QENDQ0RHTE5IS05IREhFSUxOTUdJTEdGR0lJTE5LSUdFTkhDR01LTUxPTU1OTUtISElPUlFSTlJmZmZxb3N4dXt6fGxoam9la3Fsc3BmbWxoaWtsdG1wdXR3cW94dG90c3J2c3BxcnRzcnR1dXZ2WFZ1dWtvdHJrb3ZsaG1lX3BHSkRGRkVDQ0JFQERCPkA+Ojs7PTo9PkNBPkFDRUZKRklITEhHR0dGRUNAPURFQj5BQ0NDREdISUdNUEpGRkdLTk9LRkhJRkVERUlKSEpJRkhQS0RJTUtPTU9OT1BOSkpJTFJVVVJPV2RgYW1ncHJvcnl6Z2VoaGRpbGdxbGZsbWdpa2xzbHB2dXRwbnZyb3Nyc3V0cXNzdXRzdXZ2dnl2dXR3bGp1dW1ydnFsbmxlckxIRUVIQ0JBQkQ9QkE+QT05Oj0/Oj0+QEI+QEJER0pFSUZJSEZGR0VDQkFBRkZDQkJCREVFR0dJRkxRTElPSkpMTElHSEVGRURDSUlIS0pHS1JNQk5PTVFOT09NTk9LS0tPVVdWVVNYX15caWFtaW5ocnNiZWZmZGloZm5pZm1taGtrbXJpcXZ1c3Ftdm5vcXJzd3Nyc3R1dnZ2dnd2d3Z2dHd1anN1bnV0c3FyamtzTUdIRkhCQkFERDxBQEBDPDg6PT45Pzw/QkBAQERGSEVJRkZIR0ZGRENFQ0RJRUNHRUJFR0VGR0dFSk1LSFFNSktISElFRkhIRUNJSUlLTUtPU05EUVJQUVFOUE1OUE1MTVNXVlhXVVhdWl1kYGhiamlna19lZWZjZ2dna2dna21rbWxwcmh0dHVyc252b3FwcnR4cXNzdXZ1gpF5dnZ0eHV1d3htb3VvcnN1cXFpbnlNSEdISEJCQkZEPD9CQkQ8Nzo+Pjo+OkBCPj8/QkVGREdERUhGREVDREVGR0pFRUpHQ0dIRkhHRUNGSkpHTUtMS0hKTEZJSUtIRUtLTE1OT1JUUEhTVVNQU09RTU5RTk1QV1pWWllWWl1aWGFgYGBeaGVjYGRmaGdpaGhpZmhubGxubXFwaXV1eHJycHVwcHBydXZwdXN1dnV7fn14dnR3dnZ2eHBsdXBtc3RucHJyeE5JSEdJQ0FDSEU8QEVCRTw4Oj4+PTw8QUI8Pz5BQkZDRUNDSEVDRUVGR0dHSUZHS0hESEhHSUdGREhLSUdLSE1LSktMSExLTUtKTkxPTk9SVVZPS1VXU1FTUVJMT1FQT1RZWllcWllbXl5eYGNeXGFja2JgZGdocoVoZ2lmam1ucG9uc3JqdHV4cnNzdHJucHF2cnF1cnV1c355jn11dXZ2dnZ4cmh1cWtydGxxdnB0TUlLSEpGQkVHRTxAR0NEQDo8PkA/Pj9CQTxAPkFBRkNFRURJRUZFR0VISEZISElLSkZKSEhLSEZGTElISEpHTExNTExJTUtNTU1PTFBQUVVWV09LVlZVU1NRUUxPUlJQVltbXV5bXF5fX2FgYWRdY2BlZmBlaGpjc3NmamdnbHBycW9zc25zd3dxdXZ0c21vcnVvcnNwdXJ2cnSBdnV1dXd2dXd0Z3Rya3Fya3J2bnZKSkxKTEdCRURFPEBGRERDOz8/QUBAQENBP0I/QUNIQ0ZFRklGSUZGRElJR0lISkxISEpKSUxKRkpLSElKSkdLS01NSkpNTE5OTlBMT1BSVFhWTU5UVlRSUlFQTE5UU1JXW15eX11dYF9gYWFgYWNlYmRoYmRpamd2i2xqaWdtb3NxcHFwcHJ5dnJ1dXRzbW1zc21xcm90dXRycHN3dHV1d3Z1dXRlcXNrcHFqcnZud0tNTEtNR0RDQUQ8P0VFRUM9QUFDQkJDREFDREFBRUdDSEdISEdKR0RISUdISkZJTEhJSk1LTUxHS0lIS0tOUUtSUU1TTUtOTk9QUE9UT1dYWFtOU1BXXFpSV1BOVFVUVFhaX2JiX2RhXmBiXmBlYWFjaW5nYmloaG54dmxoaW1vc3JwcXJycnZ0c3Vzc3Nua3NxbXByb3R2cnFxdXZ1c3d5d3V0dWNtdGtvcGpxdG93TE5MTExHRUFARD4+REVGQ0BDQUVEREZCQ0VHQ0NJRUNJSkpJSUtHRUtKR0hKSUlLSEpKTkxOS0lMSEpMS1pmSmRcS2xTSE9OX25Va3NbcXBid2NTUGF2dWh1Y2F2YFhucWJkdmluemZbbHRgbGpUX3d2aWpnaWZnbG1qbW9qbW5zcnBycnFyc3Jzc3J0cm5sdG9ucHFxdXVxcXN0dnZ1dXl3dXR0YGt0a3Bwa3FycXlMTkpKSkZDP0BCPz1ERUZEQ0RCRUVERkJGRkdERUpFRUpNTUtMTEdHTUlHSktIS0tJS0tOTE5MTExJTE1MW3NiZHBebG1VTU5mc11nZXFsbnRncGlfYVlubmJwcGJrampnb3F0ZXRub1xvdWdwTUpxeXZrYmBrZWVteGxrdm1ucHNycHJxcHFycXJycnRybW1zbm5vcHJ1dHFzc3R1dXV0d3h2dXRibXVrcHBscnJxektMSUhHRURAQkJAPkNGR0JGQ0ZFRkVEQ0hIR0RFS0hHTE1OTE1NRkpOSEpLSklMSkpKS0xNTk5NTUpNTU1bcm9vbnBwbGtNUFFsV05pYnRycGFtbnVcWWxRXG1tWnFta29teHh0c2lwXV9ya3FqVXV5eHBjXmtmYmdwcGpqb3BwcnNwcXBxcXJycXFycnRsbXJtbm5vcnV0cXRydHV1dHV1enZ1dGVudWtwb2xzcnJ5SUtHR0VFRUJCQj5AQEZHQkdESUVFRUJGSUhIRUdLSkdNTU5LTU5HTE5JTEtJSk1JSklKS09QT05NS05OTFxoZHVdbHFXbE5QUW1VWmtea2x2YWxkc1NlY05tWWxcdHBraWx4and1aHBdXnJraFdiY3d8b2NgZ2dhZGl0eWtubnFzc3BxcHFwcnFwcHBydWttcW1tbW9xc3Rxc3J0dnZzd3Z6dnV0aG91bHNvbXNydHZITEZJREVFQ0FCPUJBQ0dESEdMSEVDQ0hLSEhGSkxMRk5MTFNSTEdMTUhOSkhITkhKSklITk9NTkxKTk1KWnNwcG9xcW1sT1FSbllxa2dvb3Fxb210XW5YYXRfbm9wb3Fyb251c3R0altddGN3eHJqbnpoYWFjZmJiam10dXBzdXZzcXBwcW9ydHt/fn13bGtxbmxtbnByc3F0dHN1dXR4eHl4dHVrb3VtdG9uc3N2c0hLSElCRUVFQUA+RERCR0RISU1JRkNGSkxJR0ZKTUxFT0pLV1JLR0tLSk5JSEpMSUtKSUhKTU1NTUlLS0tTa2NbaV5faWNyclpfWWpvX2VlVWtfY1thYVFgbGhdalxuaWlkW3BmZHBdWlxrW21xY3BzbGRnY2RnYGBrbXBwb3R5cnVxb3BxbnmFiIeHhoWAdnNua21tb25xcnR0cnR1dXZ5eHhzdW5xdW53cXJ2dHdyR0dGSURFREZBQEJGRURHQkhKTEhGREdLTElFRkpPTElQSUxbUUpFSEhLTUlISkpLS0lISUdLS0tMR0hLS0xNTUxKS01OVFtcVFBUTFBPTk9PVlFPT1FOT1FKSU5QUWRxaVRZV1xbXFVZW11YXVxcY2ZhYWViY2VfX2ZrbWhtdHlydHJvcHB0hoeGhoaFhYaHg3pwbW1sa3FzdHRydHZ0dXl4eHV2cXJ1b3ZydHN1dXNHQ0VHRkZBRUNAQ0hERkdDSUtMSEZER0tMSERHSVBLTE9LTFdMSUVFSElKSElLSUxKSEZHR0lHSElFRkxJSkxPTElQXFdeUFxbYF5NWFlTXFxiXk1YWk1YYVJKWWFaUl9kXGFYW2RkVlZYXFlaWFxWWVxdYl5kYGFfZWhrZ210dHFxdHBxcoGGhoaFhoWFhYaGhoR9cmtpb3Jzc3N0d3l5eHl4d3h0cXhyeHNxcnVydE9CQ0VMTUJEQ0JFSUVHR0ZLSktIRUVKSktGRUhIUEpNTUpNUklHRUFIRkpJS0xKTEpIRkRJRkRGR0VFSkhDSk1LTFVfWWBYYGFbYFRYWVReXlpfUllcUF5cWU5eXF5TWl5jXlpdYGNgWV9jW2BeW1RYV1leXWNiY2FjZWhla3Jwb3Bwbm93hoaFhYaCe4CFhYaGhYaFf3VxcHJyc3Z5eXp5eXh4eHdyeXZ4cnF4dnR2YVNKSk1JREJCQ0dIRkhHSEtJSUlERktLS0VGSUpOS05MSExOR0hFPkdHTElLTEtLS0lHRElEQ0RFQkZKREBKTEpPW2NZX15hX1JUUldfYFxdWV5RWVxNVl9XS1FZW1BaX2FhXV5jYWBiYmJjY2VaUVlVVVxZXWNgX19jZGJob21ubGxsbHWFf4SDeXV8hIWFhYaGhYWGhoN9d3JydHd5eXl5f359eXV5dnZybnp3dnhYUUtGQ0dFQkVHSUZHSEhGRkpHSEdIS0lMRERLSk1NTExISkpISkY/R0dOS0tLTUtLS0lGR0NEQERBSElCP0lKSFBdYVpbZF1fVFFSWF1cXFxfWktXXExSXFlJTV5RT1xfYWNjY2NiXGRjYmRjZlhRVVRSW1daYF9eXmFhX2Rsa21qamxudn51gXp8hIWFhYWFhYaGhYaFhoaGgnpyc3V1e4WHh4eGhYSBfnhwend2eFxSTUNASUZERktKRkZGSEdGSUZGRklMSk5GREtLTE5KTElLSkhJRkJISFFNS0tPTEpLSUdHRUQ/RUNISEFCR0dFVF1ZXlhfWV9bXVVYWE9dXVFLSlZeWF5bXVVZYFJRX19iYmBgYmJgY2JhZGRiWE9RUVFaUltdXV1dXl9fZGhnbGpubnB7e3x+e4CCg4SFhYWFhYWEhIWDhISHh4FzcneFh4eHh4eHh4eHh4WDgHx4XFNLQ0FIRkRHTVJIQ1FKRkhISEVGS0pNUEVGSUpLTkxMSUxMSElHREhLUU5NTVBMTEpLSElDREFFREhHQkFHRURXVUVcVF1TVl9YT1RVTlpaTUlKVGBhW19YXl5hXU9ZYVxgYF9iY2JdYWJXX19UUE5PT1dRXFtbXFxeX2JmZmVsZm9vd3x7gHt9f4CEhISEhIWFhYODhYKDgoWFhnpvgYaGhoeHiIeGhoaFhYSFg35JTkZERkZIRElSYlBDVl5JR0dIREZNS1BQRUlJSktOTExMTUtKSkdFSk5RUU5PT01OTE1IS0FEQUNERkRDQkVGQk1IQktLT09OTEZNRkdJSkhHTEtNT1BJTE9QT1NPTFBTUlVaWVdZWFhkV09TVFBQTk1PVFJaWFhaXVxgYWRlY2dja2xwc3J6eX97en+EhISEhISEhIKEgH57gYOBfXuFhIaGh4eHhYWFhISEgoGAfUtJRUVIRkdES01dTEdHWExHSEpIR01MUVFITEtLS05NVU5PS0tLR0dLUFNTTlBPTk9OTkdLRmBFRF9MRWZkRU1bSV5bcm1PTVVtWUxEUGBVa1dnSl1XVV5ETFFVTExTVlFSVFhXVFhVVFxVUGZaaGhkWFJqUlZVVFtcW2BgYWJiYmBmaGZua2hyenx9foGEhISEg4ODgX18enJ7gXp7f4KAg4SEhYWBhIWBg4N/fnp7TElGR0ZIRUVLT1NJSkZgU0hKT0pJT01SUUtNTExPUlVST09JS01HSE1RW1lPUFBOT09PSUpRf1FJfFlZcXRZUW1IcW5vYVZQcXFzUENrc21xc3BTb19bblhdVlxYVWtoVV1WY1pgWVtgVlZYf2p0dXVfX3ZfWGFbW2ZbX2BhYWFdYGJnbXBsYHB3dHiBgYKDg4J/fX+Adnh6bHZ+dHh9gHx+gIGChHyAg3p/gX9+d3dOSkVITU5CRExMRklMRVFWTEtOSUtSWFdRTU9PTVFUTk9RUEtLTkdNUFNbWlNRUk9QUFBKSFp4XVR4ZWhaU1RSdmd0bHBibmZqUXJPTXdtanJwc3JxcnBvb4BdZXp1eHFxenF+c31rdX1iUmh8ZXNzb3Nye3xvfnhugHJfYGBiYVpgYGdrbmtibGZnbXd+gYCDfnt4d4B0dnppcn5uc3x+d3h7foCDeHyAdXx/fHxzc05LRmBdR0FFTU1ISktHSlBPTU1KTlZeWVVMUVNOWVpNU1NSTktPSFFSVFlXVlBUUFBQUUtIZ3hsY3hybVtLTVV5cHVtdWJudlBkZUpmdnFtd2+AamZ4eGlXclFoem1panp6fWx4en9vaG9ZdnZqdXVwgWByZn1pbHh8b15fX2JhW11iZGdpaWRnYmNkbGxwcHN0c3NzeXFyeGJsdWdxeXtzcnZ5foFzdXpufH15d3JuTktTdU5DQkZQUEhKS0lLUE9PT01PWmBaV0tUV1BhXlJWUVlSTE9JU1RVWFdXUFVQT05SSktyb3V1cXVxZGliV25McXBeRmh5V3ZUTGl5fXhgeXtzbmFdbW9jUmhxdW5teXB3bHZ0dHJsbl10fnprbXl8a3RsfGtwdnV4Xl9fYl5dX2RkaWdoZWVeYWJpaWlqa25va3FubWpwYWNmY293eG9tcHN5fm5xcGp7enRzb21MTFtWSEdFR1JQSUxNSktQUVBQUFBXXFhVTVVZVWVYUlJZXlNMTklUVFZXWVdPU05OTlFIUm1IaXdLYGR2dlZYbE9ubHtzYWpnf3ZVTFdraH1sbWx4X1twenteYHpzY3JveHFoZH1pcnxeVExsYHZ1a2l1e3ttfnhrfHBcXl9iW15iZGRnZWVlYlpjY2lra3JzcndnbGloZGdgYWthZ3NybGdtbXJ8a21oa3t0bW1rbU9IS0tJSUhIUVBMTk9MS1JSUk9TUldSVlRQV1tWVlRUVGFfUE5NS1RTVFFVVk5OTE1PUEpIUU5QVUxLTFNUU1NUUFZVUVFOUVFYWVJOUFVUWFhYW1pVUlNXW1dYV1pPU1VXWFhSXllXXlZUUFlSVldXV1heW2dyXltbWVxdX2NaX2NjZGZkY2NiWmNjZmZlbW5tdWVlZ2NhZl9dZ2BkbGhmZ2tocHpoZ2drdWpoZ2lsUUlLTE1NS0pTUU1RUE9MVlVUUFRVWFVZVVFaXVZVVFdVWVdPT0tNVlRRTlVTTk9NTFFQS0pSUUtRTUtLUFJVU1FSU1NJSExOT1FSUVFRVFZSWFdcV1NTUFJUVVZTWlFOU1JYVlRZVlRaVlRSVVRUVVdYVl1ZXmBdXFpaXFxfY1tdYmNkZmRkZGFZYGFjYWJoaGltYmFkXl9jXVpkXGJtYV5mZWZtc2RpaGtrZWRjZmhQSktLT09MTVNQTlNRUU1YV1VUVVdXV1pVU1xgVldWWVVYU1BQSk5XU1BOVVBOUU5MU1BMT1VTTlFOTU5RVVFVUVJUVU5LTU9RVFRSUlFWV1RZWltZU1VSVFdXV1lbVFBUVVhVVVpVV1pWU1JXVlVXW1haX1xVWF5cXl1bXWBhXltiYmNnZmVkYlhfYWJdYGdkZmVhXl9dXV5aWl9aX2dgXl1dYmhrYWdmaGZkYGJjYVBLTUxQUUxPVE9PU1FPUVtaWFdYW1lYWVZcamRWWFlaV1ZTU09KTlZUUE9UUFBQTkxRUVBSWFRRUU9NT1NWT1dSVFVVT05NUVNVVVRUUlRXVlpdXFpWVlFRVlhWW1tXUVRXVlZWWVRYWFZTUllXVlpdWV1fXlVeXV5gXFtfX19fWmJiZGhnZGRiWGFgYl5eZmNjYGJdXFxcXFlaW1hbYVteXVxfYl9fYmRlYmRfX2BcUE1OTlJRTVJST1NUUU9VXFpaV1tbXFhaW2RxbWhkX1tZVlVXUUxNVlNNTlJPUVJPTFBTUlVaVVNQUE1QWFdSV1NTU1hNT09RVFhWVVVTVVlYW15dW1tWUk9VVlZbW1dSVFdWV1hWVFhbVFNSWlhXXF5aXl9gVWFcYWFdYGJfXWBdY2BjZ2hkZmBZY2BhX19lZF9gY1taXFtcWVpZWFdcWVxbYF5fW15eYWBeYlxZYFpRTk9OVlFQVFJPVVRTUFdcXFxYXlxeVlxeanF3eYBjXFtVVVhRTU9WU05RUVBSVFJLUVRUWVpXVU9ST1NYV1RTVVJSWk9QU1JWW1ZWV1NWWlhdXltbXlZTTlRVVlxcVlJUVlZYWVNUWVxVU1NdWFpdXlxgYGBWYVtjYl1hY19cYmFiX2NmaWRmXltkYGFgYWNkX2JfWVpeW1xbWVhZV1daWlphXF1bXVxcWl1gV1tbWlBPT09ZUFVUUlFXUlRQW15eXVtgXGBVXF1oanJ9c2xnXFRXV1FOUlpTUlFUUlRVVEtSVlZbWlpTT1NRVlZWVE9XUlNaUlRUVFhdV1hYU1hcWF5dWVpdVFVOVldXXltYUlVVWVlZVVdZXFVUV15ZXV1gXWJiXllfW2VhX2RkXl5jY2FeZWZpZGZdXWRhYGBhYmRgYl5YWl9bXFtYWFhYV1taXGBcW1tcW1haW15WXlldUE9PUlpQW1RVVlZUVFReXmBeXmJcYFVdXmJreXRsfWtaVVlVUVFTXFRVVFVUVllXTFJbV11bXVJPVVNYV1dUUFhSU1dTVlVVW11YW1lVWl5YX15ZXFlSV1JZWFlfW1pUVVZaWVpXWFpcVlVaXlxeYGFfZGNcXl1dZWFhZmReXmRjYFxnZGhlZGJfZGFfYWBiYl9gXldYXlpcXFpZWVdWXVpdXlpZW1xbV1lcXVZYV11TT1BXWVFcVVZZV1dVWF9fYWFgY11fVF1fYmVldYF6aFhZWVNVU1ZcWFdXVlZXXVhPVV1aXl1cVFJXU1dWVVNUWFJTVlRYV1hdXlhdW1ZdX1hfX1hcVlFZVFlaWmFZXFZXWFtaW1lZWltYVl1fYF9jYmFkZFxiXGBmYWRmZF5fZGJiW2ZjaGVjZmBmX19hYWFhYF9eVlVdWVtcW1lbWVldW1tbWFhZW1laWl1fXVRZXVVOVFlWU1xUVldZVlZcYGFiY2FjXl9WW2BkYV96dW9oWVxaVVdUV1taWVxZWFlgV1BWXlxgYFxUVFhQVVdWVFZXUlNVV1paW19eWl9cVl9fWV1eWV5VU1lXWVldYlpeVldbXFtcW1taW1lZX19gYGRiY2RlYmRZYWZjZmZlXmFiYGNeYmNpZGNnX2deYWJjYWFgXl9YVFtaWltbWFtYWFxbWltXV1lYV1xbXGBdVl1dU09WWlZWWlVYVVhXWF1fYmFkYWRgXllZYWRiYGxmaF5bXVtWV1hZXFxcX1tZW2JWVFheXWFjXFJWWVBXVldXV1ZTVVRYXFxeYGBdYFxXYV5bXlxbXlhWWFhbW19gXF9YWVxcXV5eXFtdWFtgYV5gZGNkZWVmYlhjZWRoZ2ReY2BgZWNdZWlkZWlfZl1jYmNhYWBfX1tYWVtZWlpYWVhXW1taW1dYWlRZXVxaYFxVXmJOU1dZVldaWFtcWFdZXmBiYWRhZGFdXllhY2JfYWBgXlxcXFdXW1tdXV9fXFpdY1haWF1gY2RfUlhZUFdXWFlZV1ZXVl1dXmBhYF9iXllhXV1eWV1eWVhVV1tcYF5dX1paXl1eXmFdXFtaXGBiX2JkY2VmZWZiWmRmZmlnY19jXmFmZFppaWNmamNlXmJiY2FgYF9dXVpYXFlZWFhaWFdaW1pZV1hVVVtdXV1gYGJieEtYV1tZV11bXF1aV1xdX2BiZGFiYV1gWGJjYmFjYWJdW1xbWFdbXF9dYF9dW2BkXFxYWmJlY2FSXFpPWFhaW1taV1pZYF1gYmJgYWNfXGJdX11bXl5ZWVRYXV5fYF9gXFteXmBiY11cWFxeYGJiY2VkZmRlZmRcZWZnaWZjYWJcY2dgXGlpYmhqZWRgYmFjYV9gX11dXFlcWVhXWFlYV1xaWldXWE9YWl1hY2Zmcmt/SllXXFpaX1xbXlxYXVteX2FjYmFhXWJbYmRiYGJjYlxbW1pXWGlxYFxgX11cYWNfXllZY2VkYVNfWlJZWFxdXVtaW1tjYGJiY2BiZGFgY15gXF5eXlpYVltfXl1hYWBeW2BhYmVjX11UXWBgY2RkZmVnZWZmZV5lZmhoZ2RkYFtlZ15haGhiaGhmY2BiYGNiX19fXV1bWltZWFhYVlpWXFtbVlZVTVhXXGdpa2h1eIF2dnZ2dnZ2dnZ2dnd3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d4eHh4eXl5enp6enp6e3p6ent7e3t7e3t7e3t7e3t7e3x7e3t7e3t7e3t7fHx8fHx8fHx8fHx8fHt7e3t8fHx8fHx8fHx8e3t7fHx8fHx7e3t7e3t7fYmIhoqHhYKBgoOCg4OCgoKCgoKCgoKCgoGAgYCBgICAgYCBgYGAfnx8fHx8fHx8fHx8fHx8fHZ2dnZ2dnZ2dnZ3dnd3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3h4eHh5eXl6enp6enp6ent7e3t7e3t7e3t7e3t7e3t7e3t7e3t6e3t7e3t7fHx8fHx8fHx8fHx7e3t7e3t7e3t7e3x7e3t7e3t7fHx8fHt7e3t7e3t8iYmHiYaFgoGCgoGCgoKCgYKCgoKCgoKBgYGAgICAgICAgIGBgYB9fHx8e3x8fHx8fHx8fHx8dnZ2dnZ2dnZ2dnZ3dnd3d3d3d3d3d3d3d3d3d3d3d3d3d3d4eHh4eHh5eXl5eXl5eXl5eXt7e3t7e3t7e3t7e3t7e3x8fHx7fHt6enp6ent7fHx8fHx8fHx8fHx7e3t7e3t7fHx8e3t7e3t7e3t7fHx8fHx7fHt7e3uHiYiJhYSDgYKCgoODgoKCgoKCgoKCgYGBgICAgICAgICAgYKBgH58fHx8fHx8fHx8fHx8fHx2dnZ2dnZ2dnZ2d3d3d3d3d3d3d3d3d3h4eHh4eHh4eHh4eHh4eHh4eHl5eXl5eXl5eXl5e3t7e3t7e3x8fHx8fHx9fX19fXx9fHt6enp6e3t8fHx8fHx8fHx8fHx8fHx8e3x8fHx8e3t7e3t7e3x8fHx8fHt7e3t7e4aJiYiFhYOBgoKCgoOCgYKCgoKCgoKBgYGAgICAgICAgIGBgYCAfnx8fHx8fHx8fHx9fX18fHVwb29vb29veX59fX19fYSMi4uLi454KSkqKiopKz0/Pj4+Pj5tgH5+f397pdfT09PT1r2GiYmJiYqCRT4/Pz8/QDAqKysrKiKM29LS0tLWun1+f39/f359fHx8fHx8fHx8fHx8fHx8fHx7fHx8fHx8fHx8fHt7e3t7hIuHh4aHgoGDg4GCgoKCgoKCgoKCgoGBgYCAgICAgICAgYCBgIB+fHx8fHx8fHx9fXx8fH19dXBub29vb255gH9/f39+hpCPj4+Pk3kZGhoaGhocMTMzMzMzMmqCf4CAgHut6eTk5OToyomMjIyMjYM6MjMzMzM0IRobGxsbEI/v5eXl5enHfX5/f39/f319fXx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx7e3uCjYeIh4eDgoSCgYKCgoKCgoOCgoKCgYGBgICAgICAgICAgICAgH58fHx8fHx8fXx8fH19fX12dXV1dXV1dXZ3d3d3d3d4eXl5enl6eG9wcHBwcHBycnJycnJyd3p5eXp6en6Dg4ODg4SBfHx8fHx8fHZ1dXV1dXV0c3Nzc3NzfYWEhISEhYJ8fX19fX19fX19fX18fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx7e4CMhomHh4SDhIKCgoKDgYKCg4KCgoGBgYGBgYCAf4CAgICAgICAfnx8fHx8fHx8fX19fX19fXZ2dnZ2dnl3dnZ6e3h7eHd2d3p4enl5fXp5eXh4eHh5eXl5enp5eXl5enp6eXh4eXl5eXl7e3t7e3t7fHx8fHx8fHx9fX19fX17enp6enp6e3x8fHx9fX19fX19fX18fH19fX18fHx8fHx8fHx8fHx8fHx8fHx8fHx8f4uHi4qIhIODgoKCg4KBgoKDgoKCgYGBgYGAgIGAf4CAgH+AgYF+fX18fHx8fHx9fX19fX19d3d3dnZ3fXh3d316eH14d3d4fXl7fXp8e3h3d3d3eHh4eHh5eXl5eXp6ent7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7fHx8fHx8fHx8fHx8fHx9fX19fX19fX19fX19fX19fX19fHx8fHx8fHx7e3x8fHx8fHx8fHx+iomMjImFg4SEgoKDgoGBgoKCgoKBgYGBgYCAgICAgICAf4CAgH19fXx8fH19fX19fX19fX13d3d3d3p9eHt4fHx3e3h3d3d8eXt+eXx6eHh4eHh4eHh4eHh5eXl6enp6e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3x8fHx8fHx8fHx8fHx8fHx8fX19fXx9fX19fX19fX19fX19fHx8fHx8fHt7fHx8fHx8fHx8fH2Kio2NioWDg4SCgoKCgYGCgoKBgoGBgYKBgIGBgICAgIB/gIGAfXx9fX18fX19fX19fX19fXd3d3d3fX55d3d4e3p7eHd3d3x5eXx6fHt3eHh4eHh4eHh4eXl5enp6ent7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3x8fHt8fHx8fHx8fHx8fHx8fH19fX18fH18fH18fHx8fX19fX18fHx8fHx8fHx8fHx8fHx8fHx8foqJjo2JhISEg4KCgoKBgYKBgoKCgYGBgoGAgYKAgICAgH+BgIB8fH19fX18fX19fX19fn5+d3d3d3d5fHl7eHx9eXt5enp4fHp7fHt9e3h4eHh4eHh4eXl5eXp6enp7e3t7e3t7e3t7e3t7e3t7e3t7e3x8fHt7fHx7fHx8fHx8fHx8fXx8fX19fX19fXx8fHx8fHx8fXx9fX19fXx8fHx8fHx8fHx8fHx8fHx8fHx/iIeNioeFhoaDg4ODgoGBgoGCgoGBgYGCgYCAgoF/gICAf4CAgHx8fX19fX19fX19fX5+fn53d3d3d3Z4eHl3eXp4enh5eXh6eXp6eXt5eHh5eXh4eHh5eXl5enp7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t8fHx8fHx8fHx9fX19fX19fX19fX19fX18fH18fH19fX19fH19fX19fHx8fHx8fHx8fHx8fX+HiIyIhoeHhIKDhISCgYKBgYKCgoGBgYKBgIGBgYGAgIB/gIGAfHx9fX19fX19fX1+fn5+fnd3d3d3d3d3d3d3eHh4eHh4eHh4eHl5eHl5eXl5eXl5eXl6enp6ent7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7fHx8fHx8fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fHx8fHx8fX19fHx8gIeIi4eHiYaDg4SDg4KBgYGCgoGBgYKCgYGBgIGBgYCAgICBgX97fH19fX19fX19fn5+fn5+d3d3d3d3d3d4eHd4dnl5eHh4eHh5eXl5eXl5eXl5eXl5enp6enp6e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7fHx7fHx8fHx8fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fHx8fH19fXx9fXyBhoqKiYmIhIOFhISCgoGBgYGCgYGCgoGBgYCAgYGAgIGAgIGBf3x8fX19fX1+fn5+fn5+f394eHd4eHh4eHZxZGpeam15eXl4eHl5eXl5eXl5enp6enp6enp6enp7e3t8e3x8fHt7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3x8fHx9fHx8fH19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fIGFiYqJioeEhYWEg4KBgYGBgoKBgYKBgYGBgYCBgYCAgYCBgIF+fH1+fn5+fn5+fn5+fn9/f3h4eHh4eHh5bWRiZV9fXm95eXl5eXl5eXl5eXp6enp6enp6enp6e3t7e3t7fHx8fHx8fHt7e3t7e3t7e3t7e3t7e3t7e3t7e3t7fHx8fHx9fHx8fH19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18goWKiomJhISGhYSDg4KBgYKCgoGBgoGBgYKBgIGBgICAgICBgH58fX5+fn5+fn5+fn9/f39/eHh4eHh4eW5kZWdlZGJeZnh5eXl5enp6enp6enp6enp6enp6e3t7e3t7e3x8fHx8fHt8fHt7e3t7e3t7e3t7e3t7e3t7e3t7fHx8fHx8fHx8fHx9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXyChouJiIqEhYaEg4OEgoGBgYGCgYKCgYGBgYCAgYGBgIB/gIGBf3x8fn5+fn5+fn9/f39/f394eHh4eHl3Z2VkZWZkZWFfaXl6enp6enp6enp6enp6ent7e3t7e3t7e3t7e3t8fHx7e3t7e3t7e3t7e3t7e3t7e3t7e3t7fHt8fHx8fHx8fHx9fX19fX19fX19fX19fXx9fX19fX19fX19fX19fX19fX19fX19fX19fIKGi4eJh4SEhoSDg4WBgYGBgYKCgYGBgYKBgICAgYGAgYCAgYF+fHx/f35/f39/f39/f39/gHl5eXl5eWtlYWJlZWFlZV5ieHdze3p6enp6enp6enp6e3t7e3t7e3t7e3t7fHt7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t8fHx8fHx8fH18fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19g4aLhoiFhYaEgoOEhIKBgYGBgoKBgYKBgYGAgYGBgYGAgIGBgn98fH9/f39/f39/f3+AgICAeXl5eXl0Y2NlZGNmY2doZGZsZF5ze3p6enp6enp6enp6ent7e3t7e3t8fHx7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3x8fHx8fHx8fH19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX1+fn6DhouGhoaGhYODg4SDgYGBgYGCgoGBgYKBgYCAgYGBgYCAgYGBfnx8f39/f39/gICAgICAgIB5eXl6d2RhY2diYmRdW2VfYV1eYGFoeHp6enp6enp6enp6e3t7e3t7fHx8e3x7e3t7e3t7e3t7e3t7e3t7e3t7e3t8fHx8fHx8fHx8fH19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX1+fn5+fn5+foSFi4eGhoaGhIODg4KBgYGBgoKCgYKBgoGAgIGBgYGAgYGBgYF+fX1/gH+AgICAgICAgICAgHl5eW9vYmJiZF5jZ19dYWFgXF9kYlttfHp6enp6enp6enp7e3t7fHx8e3t7e3t7e3t7e3t7e3t7e3t7fHx7e3x7fHx8fHx8fHx8fH19fH19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX5+fn5+fn5+fn5/hIiLhoSHhoaEhIODgoGBgYGCgYGBgYKCgYCAgYGBgYGBgYGBgX5+fYCAgICAgICAgICAgICBeXpwXWJlZGJkXmZnZ2BZYmJhY2VfXF1ze3t6enp7e3t7e3t8fHx8fHx8fHt7e3t7e3t7e3t7e3t7fHx8fHx8e3x8fHx8fHx8fHx8fHx9fX19fX19fX19fX19fX19fX19fX19fX19fX19fn19fn5+fn5+fn5+fn5+foCFjIqEhYaGhYODg4SCgYGBgYKBgYGBgoKCgYCBgYGCgICAgIGBf35+gICAgICAgICAgIGBgYF5emxiZGdjYmdmYWBgZGFiZWRjZGNeXGJ1fHt7e3t7e3t7e3x8fHx7e3x8fHx7e3t7e3t7e3t7e3x8fHx8fHx8fHx8fHx8fHx8fHx8fH19fX19fX19fX19fX19fX19fX19fX19fX1+fn5+fn5+fn5+fn5+fn5+fn9/gYeMiYWGhoeFg4SDgoGBgYGBgYKBgoKCg4KBgIGBgYKBgYGCgoF/f36AgICAgICAgIGBgYGBgXp7dGdnZmZkZGZmYF5fYWNlaGRlXmJkYHR8e3t7e3t7fHx8fHx8fHx8fHt7fHt8fHt7e3t7fHx8fHx8fHx8fHx8fHx8fHx8fHx8fH19fH19fX19fX19fX19fX19fX19fX19fX19fX5+fn5+fn5+fn5+fn9/f39/f3+CiYqIhoaIhoWDhIOCgYGBgYGBgoGBgoKCgoGAgYGBgoKBgYKCgX9/f4GBgYGAgYGBgYGBgYGBenptaGNjZ2ZnZWdmZmdiZWRlYmdbYmVgdnx8e3x8fHx8fHx8fHx8e3t8fHx8e3x8fHt7fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx9fXx9fX19fX19fX19fX19fX19fX19fX19fn5+fn5+fn5+fn5+f39/f39/f39/f4SJioiGiYeFhYSEg4KBgYGBgYGCgYKCgYGBgYGBgYKBgoGBgICBgH9/gYGBgYGBgYGBgYGBgYF7emlpZGNqZmFgZmVjY2NnaWRjYmBiZGJ0fXx8fHx8fHt8fHx8fHx8e3x8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fH19fX19fX19fX19fn5+fn5+fn5+fn5+fn5+fn5/f39+fn9/f39/f39/f3+AhIqMiIeJhoSFhYOCgYGBgYGBgYKBgoGBgYGBgYGBgoKBgYGBgYGAgH+BgYGBgYGBgYGBgYGBgXZzZWRnY2RmZWJlZmdkZmhmZWNgYGNkYHF9fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fXx8fHx8fHx9fX19fX19fX19fX19fn5+fn5+fn5+fn5+fn5/fn5+f35+f39/f39/f3+AgICFioyJiIqJhoaDgoKCgYGBgYGBgoGBgoGBgYGBgIGBgYGBgYGCgX+Af35/foCCgoKCgoKCgoKCc3NnZWRkZWlqaGZnZ2NhZmZlZmdmZWVjdX18fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fX19fX19fH19fX19fX1+fn5+fn5+fn5+fn5+fn5+fn5+f39/f39/f39/f39/gICAgICAgIWLioqJioeHhoSCgoGBgYGBgYKCgYKBgYGBgIGBgoKBgYGBgYGAf4B+dHRzdX1/goCAfn5/gYB0cmdkZWNmaWppZWNlY2BmZGRnZ2JiZWFwfXx8fHx8fHx8fHx8fHx8fHx9fX18fHx8fHx8fHx8fHx8fHx9fX19fX19fX19fX19fX19fX19fX1+fn5+fn5+fn5+fn5+fn9/f39/f39/f39/f39/f39/f4CAgICAgIB/houLiouLh4eHhIOCgYGBgYGBgYKBgoKBgYGBgYKCgYCBgYGBgoCAgH5zc3NzdHV4dXV0dHV2dXVwZmNmZWhoaWdoZ2VmZWJfZGVmY2BiZ3d8fHx8fX19fX18fHx8fH19fX19fX19fXx9fXx8fX19fX19fX19fX19fX19fX19fX19fX19fn5+fn5+fn5+fn5+fn5+fn5+f39/f39/f39/f39/gIB/f3+AgICAgICAgICHjIyIi4qHh4eEhIKBgYGBgYGBgoGCgoGBgICBgoGBgYKBgoKCgYCAfnNzc3Nzc3NzdHR0dHNzdW9jY2FnZWhoZ2pmZGVnZmhmY2JlYl5ieX18e3t8fX19fX18fHx9fX19fX19e3x9fX19fX19fX19fX19fX19fX19fX5+fn5+fn5+fn5+fn5+fn9/fn5+fn5+fn5/f39/f4CAgH9/gICBgICAgICAgYCAf4CAgYGAgIeLi4iNiYiJhoSFgYGBgYGBgYKCgYKCgYGBgIGCgoGBgYKBgoKBgIB+dHNzc3Nzc3Nzc3Nzc3N1cmdlZWRlamhoZ2ZpaGdjZWViZGNoZGd7eHVzc3R2dnl4dnR0dHZ3d3d2dHR0dXV4d3h4d3d6e3x9fXx9fn5+fn5+fn5+fn5+fn5+fn5+fn5/f39/f39/f35/f39/gH9+fHt7fX58eXl2dnZ5fHx6end2d3l7fXt4hIyMioyHh4iEhYSBgYGBgYGBgoGBgoGBgYGAgYKCgYGBgoGBgoGAgH51c3Nzc3Nzc3Nzc3Nzc3VzaGVnaGVrbGhqZ2lqZ2dnZmRkYmVkbnV0dHNzdHNzc3Nzc3Nzc3Nzc3NzdHNzc3Nzc3Nzc3N0dHV1c3V3eHl7fn59fn98f39/f39/f39/f314fH5+fXx4dXZ3eXd4dnRzc3N0dXRzc3Nzc3NzdHNzc3R0c3R0dHODjI2KiYeIhoOGg4GBgYGBgYGBgYGCgYGAgYGDgoKBgYCBgYGBgICAf3VzdHRzc3Nzc3Nyc3NzdnZpY2hqaGpsZWZpbGhgZmVkY2BkZGZ0dXV1dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHRzdHRzc3Nzc3R2dnV1d3V4fH9+fX9+fHp4dXN0dXV1dHNzc3Nzc3N0dHR0dHR0dHR1dXR0dHV1dHR1dXR1dXV1dIaMjYuIhoeEhIWCgYGBgYGBgYGCgoGAgYCBgYKCgoGBgIGBgYGAgIB/dnNzc3Nzc3Nzc3Nzc3N2dnNnZ2pmaGdmaGhmZGlnY2NnZWVmcHZ1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dHR1dHR0dHR0dHRzdHR0dnV1d3Z0c3R0dHR0dHR0dXV1dXV0dXV1dXV1dXV0dHNzc3N0dHNzdHR0dHR1dXR1iY6MjIqHh4SEhYKBgYGBgYGBgYKCgoGBgICAgoKCgoGBgYGBgYCAgH93c3Nzc3NycnJyc3NzcnZ2dW5kXWNnZWlraGVoZ2dqamlnZXB2dXV1dXV0dHRzdHR0dHR0dHV1dXV1dXV0dHV1dHR1dXV1dXV1dXV1dXR0dHV1dXV1dXV0dHV0dHV1dXV1dXV1dXV1dXV1dXV1dXV0dHNzc3Nzc3N0dHNzc3Nzc3R0dHR0dHWKjoyMiYaGhIeFgoGBgYGBgYGBgoKBgYGAgYGCgYKBgYGBgYKBgYCAf3hzc3Nzc3JycnJyc3NzdnZ3d2liaGhnamtpaGZkZGVmaWhwdXR0dHRzc3JxcnJ0dXV0dHR0dHR0c3NycXFxcXNzdHR0dHR0dHR0dHV0cnJyc3R0dHR0dXV1dXV1dXR0dXR0dHR0dHR0dHR0dHR0c3Nzc3Nzc3Nzc3Nzc3N0dHN0dHR0dHR0dYuOjImGhYWFh4SCgYGBgYGBgYGBgoKCgYGAgIKCgoGBgYGBgYGBgIB/eXNzc3NycXJycnJzc3N3d3d3bGpoZGhpa3Z6a2VmZWhnbXJzdHN0c3JwcHBxcnN1dXR0c3Nzc3JycXBvb29vcHFzc3NycnJyc3R0dHNxcHFyc3R0dHR0dHRzc3Rzc3NzdHR0dHRzdHR0dHR0dHRzdHR0c3NycnFxcnJzc3Nyc3NzdHR0dHN2jZCMh4eFhYSEgoGCgoGBgYGBgYGCgoKBgYGAgYGCgoGBgoKBgYGAf395c3NycnFxcnJycnNzc3d3d3dzc2pnaWloeX99cW51bG5wcXJycnFxcG9wcXFxc3R0c3NycXFxcG9ubm1ubW5ubnBxcnJycnJycnJzcXBvb3BxcnJzc3JxcnJycnJycnJycnJzc3Jzc3Nzc3Nzc3Nzc3Jxb29ubm9vcXJzc3Jyc3NycnNzcnaPj4uHhoWFhYOCgoKBgYGBgYGBgYGBgoGBgYGCgoKBgoGCgYGCgX9/f3hxcHBwcXFycnJyc3Nzd3d2dnd2cnF0c252f352c3hwcHBycnJycXFwcHFxcXJzc3Nzc3JxcHBwb25ubm5ub25vcHBxcXFxcXBwcXJwb25vcHFxcXFxcHBxcXFxcXJycnJycnJycnFxcnFxcnJycnFwb29ubm1ubW5vcXJycnJycnJyc3JxeI+OjYaDg4aEgoOCgoGCgYGBgYKBgYGCgYGBgYKCgoKCgoKBgYKBf4B/d29wb3BxcnJyc3Nzc3J2dnZ2dnZ3dnZ1c3l/fnd3d29wcXFxcXFxcHBwcXJycnJyc3NycW96f29wb29vb29vb29wb3Bvb29vcHBxb29vcHBwcHBvcG9wcHFycXFxcnJycnFxcXFxcXFxcHBwcHBxb29ubm5tbW5tbm9wcXFxcXFxcXFxcXB7j42NhoODhYOCgoKCgYKBgYGBgoGCgYGCgoGCg4KBg4KBgYGAgYF/f392bm9wcHBxcXFxcXBwcHZ2dnZ2dXR0c3NxfYB9fX9zb3BxcXFwcHBwcXFwcXFxeXtwcnFwcZeDbnBwb29wcG9vb29vb29vb3BxcXBub3Bwb29wb29wcnJycnFxcXBxcnFwcXFxcHBwcHBwcHBwb29ubm1ubm5ubm9ub3BwcHFxcXFxcXFxcIKRjoqEhIOFhIOCgoGBgoKBgYKBgYGBgYGCgoKCgoKCgYGBgYCBgX9/gHVvb29wcXFxcXBwcHBwdnZ2dXRzcnJycnGAgoCBeXBwcHBvcHBwcHFxcXFwcnF9nnpwcW+GoHxvcHBwb3BxcHBvb29wb29vcXFwcG9wcG9vb25vcHFxcHBwb3Bvb3BwcHBwcHBwcHBvb29vb29vbm5tbW1ubm5ub25vb3BvcHBwcHBwcHBwiZCMiISDhIaDg4KCgYGCgoKCgYGBgYCAgYGBgoKBgYGBgYGBgIGBgH+AdG5vb3BxcXFwcG9vcG92dnVzcnFxcXFxcICDg39ycHBwcHBwcHBwcHFxcHBxcXKdn3ZwdJyffW9wcHFwcHBwcHBwcHBvcHBxcXBwcHFxb29vbm9wcHBvb29vcHBvb3BwcHBwcHBwcHBvb29vbm5ubm5ubW5ubm1ubm9wcG9vb29vb3BzcXWPj4uJg4KFh4ODgoKBgoGCgoKBgYKBgYGBgYGBgYGBgYCAgYGAgYGAf4B0b29vbm9vb29vb29vb3Z1dHNxcXFxcXJygIKCgXRxcXFxcXFxcXFxcXFxcXFycJeskG5/o59+cHFxcXFwcHBwcHFxcXBxcHBwcXBwcHBwcHBwcHBwcHBwcHFxcXBxcHBwcHFwcHFxcHFxcXFxcXJxcnFwcnRycnR0dHR1dnRzdHR0dXd3gpCPi4iDgoaHhISCg4GBgYKCgoGBgoGBgYKBgYGBgYGAgICBgYCBgYB/gHVvb29vb29vb25vb29vdXRzcnJycnJycnKDg4OCdnFycnFxcXJxcnJxcXJycnJwjrGoeoimoH1wcXFycXFxcXFxcXFxcXFwcXFxcXFxcnNzcnJyc3V1dHR0dHR0dHV2d3d3d3d3eHh4eHd3eHh4d3Z3dnV2dnZ2d3h6e3x7e3t6enp6enyGkI2LiIODiIeHhYODgoGCgYKBgYGBgYKCgoGBgYGAgYCAgYGAgIGBgH+Ad3FxcXFxcG5ucG9wcG92dHV1c3Nzc3NzdYiDgoN5cnNzcnJyc3Jyc3Nzc3Nzc3Ocs6akp7GidnNzc3Nyc3N0dHV1dXV1dHV3eHd3d3d4eHh3eHh4eXl5eXl4eHl5eXp6e3t7e3t6enp5eXh3d3d1dnV2dnd5enp7fn5+fX1+fn5/f35+gIyQi4qHg4WIi4iEg4SDgYGCgYGBgoGBgoKCgoKAgYGBgYCBgYGAgIGAf4B8enp5eXx5eHh2dXZ2dHl2d3h3d3Z3dnZ6fnx+fnx2dnd3dnV4enh4eHh4eHd3gaudobamoqeEenl5eXh4eXl6enl5eXh4enp5eXh4eHh3dnd3eHh3eHh5eXp7e3p8fH1+fX9/f359e3t7e3p5enl5e3t/foB/fn5/fn19fX5+f35+fn6AjpCNioeEhoqLiIaGhIOBgoKBgYGCgYGCgoKCgoCBgoKBgYGCgYCBgIF/f4B/fn19fX9/f318e3t7eXh4eHh5eXl4eXh5eXl4enp6enp6e3t7fH1+fHx8fHuSppmjsaGbpJR6e3p4eXh4ent6enp5eXp8fHt6enx8fHp6ent9fHx+fn+AgoGAgYKAgH9/gYGBgIB/f35+fn5/fX1+f4CAf35+f39+fn9/f39/gH+Af4OQjoyHhoWIi4yIh4aFg4GCgYGBgYKBgoKCgoKBgYKDgoGBgYGBgIGBgIB/goOCgoGBgX99f39/f4F6enh4d3h4eHh5eHh5enp5e358enx9fXt8fX19fX19fZWeipSsnp6fmoB/f319fYCDgoCAf318fXx9fXt9fXx8fH19fX1+gYGChISDgoB/gYGBgH9/f4B/f39/f39+fn9/f39/f35+f3+Af39/gICAf4CAgICAhJCPi4eGhoiLi4mKhYaDgoKCgYGBgoGCgYKBgYGBgoOCgYCAgYGAgIGBgH+ChIKCgICAgH9+fn+AgH9/fn18fX19fYB/fX+Af35/gH9/fn9/gICBgICBgIGAlKOclJybl46bg3+BgH5/f39+f4B/fn5+f39/gYB/f4CBgYCAgYOEgoGCgoGCgH+AgYCBgYGAgH+BgICAf39/gICAgYGBgIGBgYCAgICBgoGBgYCAgYGFjo6MiYaHiYyLi4qGhoOCgoKBgYGCgoOCgoKBgIGBgYKCgICBgYCAgYGAf4KFg4KBgYCAf39+fn+AfX5+fn19fX5/fn9/f35+fn+AgYCAgICAfn9/f4CBgH6asqmjm5+fpaeRfXx9foB/fn5/f35/gIGBgoKDg4KCg4KBgYKDg4OCgYGBgYKBgoKCgYKBgoGBgYGBgoKCgYGCgYKCgoGBgoKBgYKCgoKCgYGBgoKCgoaPkY+KiImKjY6NiYaFgoKCgoKBgYKCg4KCgoGBgYGBgYF/gIGBgYCBgIF/gYWEg4KCgoGCgYCAgIB8fHx7fH18fH9+fn9+fn5+f35+f39/f39/gH5/gIGEla+mnqWfn56kqK2fkYeBf4B/gIF/f39/f3+BgYGCgoCAgYKDg4SDg4ODgoKCgoKCgoKCgoKCgoGCgoKDg4OCg4ODgoKCgYKCgoODg4ODgoKCgoODg4KCh5KTkIuKi4uPj42Lh4SCgoKCgYGBgoKDgoKBgYGBgIGBgICAgYGBgIGAgYCAg4SDg4OEg4ODgoKCgXx9fHx9gn1+f4GCiIGCgoSCgYGDg4GBgYKDgoaJlqaxqZ6bpZ+en6Cfo6ioo5eHgYCAgICAgH9/f3+AgICAgH9/gYODhYSEg4SDgoKCg4OCgoOCgoODg4ODg4SDg4KEhYWDg4SEgoKDhIOCg4ODg4OCgoODgoCKlJOPioqMj5GPjYuGg4KCgoKBgYGBgoOCgYGBgIGBgoGBgICBgYGAgYCAgH+BgoODg4SEhIOCgoKCfXx8fn6AgYOAg4OChIaFhoaFhIWFg4ODg4ODhYqZo5+ZmJidnZ6hn5ucnZmTjIWDg4KDg4ODgoGAgIKCgYOCgYKCg4OEhYWEg4OChISEhIOEhISDg4OEg4ODg4OEg4SDhIWEhISDg4ODgoKCgoKCgoKBgYKCgo+UlI+Njo6RkY6KiISCgoKCgYGBgYGCg4GBgIGBgYGBgYCBgIGBgYCBgICAgIKChIKChIOCg4ODgoJ9fX2AgH+AgoGDg4ODhIaEhIOEhYWDg4GBg4OBgIGHjJGVmJmNlZ2bmJSNh4aGh4eGhoeHhoaEgoGCg4SDg4ODg4ODhISFhYWDhYSFhISEg4KBg4OCg4SEg4KCg4SCg4ODg4OCgoKCgoKCg4OEhIOFhYWFhoaIk5OTkI+Pj5KRjIqIgoKCgoKBgYGBgYKDgoKBgIGBgYGBgICAgYGBgICAgICAhISEgoKCgoGBgoKBgX+AgYOCgICAf4CCgoGDg4KCgYODg4SDg4GDhYSCgYGBg4uWnIeOm5qMh4aIiIiHh4eIiIiFhIOBgIGBgoKCg4GCg4SEhYSDg4OEg4OEhIOBgYGCg4OEhISDg4ODg4OEhIODgoSDg4ODhIWFhoeHh4eIiIiJiY6TkpKOj46Rko+LiYeCgoKCgoKBgYGBgoKCgoGBgIGBgYGAgICAgYGAgIGAgICDg4KCgYKCgYGAf4CBhYWFhoOCgYB+fn+BgoSCgYKDhIOCg4ODg4KChISDhISCgYSLipKOhYSDg4WFhYOEhIWFg4GCgH9/gIB/gIGEg4OEhYWEgoKCgoOCg4OFhIKDhISEhYaGhoaGhoWFhoeHhYaIh4aHiIeGhoaIiYeGhYaGhoeIkZKSj46QjpGRjImHhYGBgoKCgoGBgYGBgoOBgYGBgYGBgICAgICBgYCAgICAgISEg4KBgoGAgYGAgYKIh4aHhYSCgH99fX6AgH+AgYGBgYGBgoGAgYKDgYKCgoGBgYCIkYKCg4GCgICAf4GAgIB/gH9+gIGBgYKCg4OEg4OEg4OCgoGBgoODg4SEg4SEhIOFhYaFh4eIh4eHh4eHh4eGhoaGh4WFhYaGhISEhIWEhYaSk5GOjo+OkI6JiIeEgoKCgoKCgoGBgIGCgoKCgoKCgYGBgYGAgYGBgICAgYGAgoSDg4KDgoGCgYKDg4iHh4iHhYSCgX5+gICAfn5/f4CBgYGCgoCBhI2DgH+AgICAgImRgIGCg4OAf39/gICAgICAgICDg4KDg4ODgoOBgYKCgoOCgYKCgoOCgoSDhISDg4SEhYWFhYaGhoaFhISEhYWEhIWFhYSEhISDhISEhISEipSTkZCQj46NiIaFhIOBgYKCgoKCgYGAgYKCgoKBgoKBgYCBgYCBgYGAgICAgYGAg4OCgoOCgoKBgoOCiImJiYiHhYSDgYKEhIOBgoKCg4SCgoSEgoOJloiEgoSCgn+AjJWCgoGChIOBgYGCgoODgoGDg4SDg4SEg4OCg4KDg4ODg4KCgoKCgoGDhISEhYSFhYWFhIWEhIWFhYWDg4OEhISEhYWFhISEhISEg4ODg4OOlZKQkZGPjYyHhYODg4GBgoKCgoKBgYCBgoOCgYCCgYGBgICAgIGBgYCAgICBgICDhYSEhIODg4SDhIOGh4mIhoWDhIODg4WDgYCDgoWFhISDg4OChI6YioOFhISEgoCSmoaCgoKEg4OCg4GBhIWEg4ODgoKDhISDg4ODg4SFhISDg4KCgoKCgoSEhYSFhYWFhYODhYWFhYaFhoWEhIWEhYWGhYWFhIWEhISDhIODhJGUk5KSj4yMioWEhIODgYGCg4KCgoKBgYGCg4KBgYKBgYGBgICBgIGBgH+AgIGAgYaGhoaGhoaHh4aGhYSDhYaCgIGBgYGHgoB+f4GBj4yDgX9+fXx9jJyNgIKBgYKChZSTjIGCgYKDg4GBgYKDhYODg4KDg4OEgoKEhIOEhIWEg4OCgoKCgYKCg4ODg4SFhYWFhIOEhYWGhYWEhISEhIOEhIWFhYWFhIODhIOEg4KGlJSSlJKPjYyIg4SEg4KBgoODgoKDg4GBgoKBgoKCgYGCgYGBgYCAgYGAgICAgICAhYWFhYaGh4aGhoWGg4ODg4GAgoKCgYKAf35/f4GVl4mAfX19fXuBl4yAg4GBgYCPk4yQgYKBgoKBgYKDgoODgoOCgoKCg4OBg4SDg4ODg4OEhIKCgoKDgoKDg4ODhIWEhISEg4OEhIODg4OEhIODg4ODg4SDg4ODg4KDg4KDgouUk5KTko2NioaDhIOEgYGCg4ODg4ODgoGBgoGCgoKCgoKBgYGBgICBgYCAf4CAgICDhISFhYSFhYWEhIWCg4KDgoKDg4OBgICAgICAgJWfin5+gH2Hi36EhIOEgoODgo6JhYyCgoOCgoKCg4ODgoODg4KCgoODgoKDg4KCg4KDg4WEg4ODg4SDg4SEhISEhYWEhIWEg4SEg4OEhISEhISEg4SEhYSDg4SEhIODgoKDkJSSkpKPi4yIhoSFg4OBgYKDg4ODg4OCgYGCgoKCgoKDgoCBgoGAgICAgIB/gICAgISDhYWEhYWFhYSFhYOEhIWDg4SEhIKCgoOCgoSBkaGKf4yFfYaJgH6FhYWEhYJ/fn19f4KEg4ODg4OEg4ODhISEg4OEhISEg4SEhIOEg4OFhoWFhYSFhYWFhYSFhoWGhoWFhYWFhYWFhYWGhoWGhoaFhoaGh4aFhYWFg4SEhIeTk5ORkoyKiIWGhYWCgoGBgoODg4OCg4KBgYKDg4ODgoKBgIGAgICAgICAgH+AgICAhYWFhYWGh4eGhYWFhISFhYSEhISEg4ODg4OEhYOJkYOEi4WCgYF+fYGHhoOAfn5/f39+f4OEg4OEhISEhISEhISEhISFhYWEhYSGhYWFhYaGhoWGhYWGhYWHhoaGhoaFhIWFhYWFhIWGhoaHhoaGhoaHh4iIiIaFhYaEhYWGjZSTkpGQi4qHhoeGhIGCgYKDg4ODg4KDgoGBgoODg4KAgYGBgICAgICAgICAf4CAgICHh4eGhoeHiIeHhoaEg4ODhIODg4OEg4ODg4OEhISEgYKCgYmBf359foWBf39/f39/f36AgISFhIWGhoaFhYWGhoeHhoaFhoWFhoeHh4iGh4eGhoaHh4eGhoeHhoaGhYSDhIWFhYSFhYaGhoeHhoaGhoeHh4eIiIeGhoaHh4eRlJORkZCLiYiFhoSDgoKBgoODg4ODgoKDgoKCgoOCgYCBgICBgICAgIGAgIB/gICAf4aHiIeHh4eIiYmIiIODgoKDgoSEhIWEg4KCg4SEhIOBgICAhIR/fn5/gH9/f39/gIB/f4B/f4WFhoiIiIeHh4eIh4iHiIiIhoaHiImJiYmIh4aHh4eJiIaHh4eHhoeFhIOEhYaFhYWFhoaGh4eFhoeGh4aGh4eHh4eHh4eFh5OTkY+RkIuHhoWFhIKCgYGCg4ODg4ODgoKCgoGCg4KCgIGBgYCAgICAgICAf3+AgYB/hoiIiIiHh4iJiYmIg4KCg4ODhIWHh4aFg4OFhISDg4GAgIGMiYGAgYKCgYGBgYB/gH9/fnt6gIaHiIqKiYmJiImJiYmKi4qIiIiJiYuLioqIh4eIiImHh4iIh4iGh4aEg4OFh4eHhoWFhISDhYWEhYWGhISEhYWFhoWGhYOJlJOQj5GOioaFhoWDgYGCgoKDg4ODgoKCgoKCgoKCgYGBgYGBgYCAgICAgIB/gICBgH+GiYiIiYeIiImJiIiEgoKDg4KDhImKh4aEhIWEg4OCgICAhISCgoKCgoKCgH9+fX19fX5+fHt8g4eJi4uKiomIiIqJiImLiomJiIiIioqJi4mHhoaGh4WGiIiJiIaGh4SDgoSIiIiIh4WCgoGDg4KDg4SCgYKDgoGEg4SDgY6TkpCPj4uJhYWGhIKBgYGBgoODg4OCgoKCgoKCgoGBgYGBgIGAgICAgICAgH+AgIGAf4WIh4eHhoeIiIiHh4SCg4OCgoOFiYqJh4WHhYSFhYKAgYOEgoOCgoKDgX59fX5+fn5+fn1+fX19g4eJioqHh4WGh4eHh4iHh4mHh4aIh4aJiYODhIOFhISFhYeIiIaFg4KCg4WHhoeGhoSCgoOEgoOEhIKBgoGBgYODhIOEkZKQjo+Oi4eEhoaEgoGAgYGDg4ODg4KCgoKCgoKCgYGBgIGBgYCAgIB/gIGAf39/gIB/hYaGhYaGhoeHiIeGgYKEhIOChYeIi4qGhIaEgoaGgoKEhIODg4OCgoF9fH1/gH9+fn59fH19fHl8g4aGhoSDgYKDhIWFhYODhYSEhISEhIWEgoKCgoSEgYKDg4WGhYSCgYGCgoODhYSEhIWEhIaEg4SFg4KDgYKDg4SFhIeSkY+Nj4yJhYSFhIWCgYCBgYODg4ODgoKCgoKCgoKBgYGBgYGAgICAf4CAgYB/gICAgICDhIWEhIWFh4eHh4aAgYGFg4OEhYSHiIWCgICAgX9/gIODg4ODgoKAfX1/gICBf31+fn19fX17enp+hISEgoGBgIGBgoKBf36BgYGCgYOBgoGCgoKBg4OAf4CAgYKCgICAgICBgYGDgYGChIODhYSCg4SDgoKBgoSDhYWGi5ORj4+Pi4iFhYODhIGAgYGBgoODg4KCgoKCgoKCgoGBgYCBgYCBgH9/gIGBgICAgH+AgIKCg4OChIOEhYWGhn+BfoCBgICAf4GDgn9+fn5+fX+Cg4OCg4KDgn19fn+AgIGAfn19fX1+fXx6enqAgoKBf39/f35/gIB+fYB/foCAgX+AgIF/f4CAgX59fX+AgX9/fn+AgICAgICAf4CCf4CCgYGDgYGAgYGBgYKEg4aPkpCOj42Kh4eGg4ODgYGBgYGCg4ODgoKCgoKCgoOCgYGCgYGBgICAgH+AgICAgICAf39/gYKDhIGCgoOCg4SFgIB/fH19fn19foCAf31/fn1+gIODg4KCgYF/fX1+f4CAgH9+fX19fHt7e3p6enqAgH9/f39+fnx/f35/gH9+f3+Af4GAf359fn9/fn18fn+Afn5+f3+Af39/f4B/f39+f4CBf4B+f39/gH9+f4B/hZKSj46Pi4uHiYWEg4KBgYGBgYKDg4ODg4OCgoKDg4KAgYKBgYGAgICAf3+AgIB/gIF/f36BgYSEgYKBg4OCg4OBgH98fn9+fX6Af4B/foF/f4CBhIOCgYB/f359fn5/gICAfn19fXx7e3x6enl5eXuAgH+AgH9/fn5/foCAf35/f4B/goB/fH5+f35+fXx/f4B/fn5/f4B/f35/f4CAfn2Af39+f35/f35+fn19fX2Fk5KOjIuKiImIhISEgoKCgYGBgoOCgoOCgoODg4ODgYCBgYGBgYCAf39/f4CAgICAgIB/foCBhIOCgYGDhISDhICBgICBgIGAgYKCgoGBgoCBg4ODgYGBgYCAfn19fn5+f359fX19fXx8fHt6eXl5eH2BgICBgYF/f4B/f4F/gICAgYGCgoB+gH5/fn5/foGAgYF/f39/gICAf39/gYB+f3+Afn9/fn+Af31+fn17fIaTkYyLioeHioiGhoSDgoGBgYGCg4ODg4OCg4OCgoKBgICBgYGAgH9/f39/gICAgICAgH9+fn+BgYGAgISGh4aHgoODhYOBg4ODhYSEhISEg4ODhIKCgoKCgX9+fX19fn6AfX19fX19fX19e3p6eXl5eYCCgoKEg4CCg4GAgoCCgYGDgoODgYGCgIGAf4CBg4GEgoCAgYCBgYCAgYCCgn+BgIF/gIB/gICAfn9/fnx8ipSQiomIiIiJiIaGhoSCgoGBgoKDg4ODg4KDg4KCgYCAgICBgYGAf39/f4CAgICAgIGBf359fn5/f39+g4aHh4iChoSFg4SFhIWGhYaGhoWGhYGBg4ODgoKAfX19fX19fn59fX19fX18fX18e3l5eXh4fIKDhIWCgYSDgoKDhYeCg4SDgYKCg4OCgoKCgYKFg4iFgoGCgYKDgYGBgYSDgoOCgYKCgICBgIF/gIGAf36Ok4yHiIaIh4aGhYaGhIKDgoGCgoODg4ODg4OCgYGBgH+AgYCBgYB/gH9/gICBgH+AgYB/fn19fX5+f36Ag4SHh4SGhoaFhoaHh4aHh4iHh4eGf32AgICCgX59fX19fX19fX19fX18fH5+fnx7eXh3eHl5gIODf4ONhIOEhISXl4ODhIF9foGCgoGBgYKBg4aIjIWDgoKBhIKEg4KDhYSEhYODg4OCg4OCgoKCg4OCgpGQi4iIh4mHhoaEhoWFhISDgYKCg4ODg4ODgoGBgYCAgICBgIGBgH9/fn+AgICAf4CAgH9/fn1+fn+Bf4CCgYWFhYeGh4eGh4eIhoeHh4eGh4V+fX18fX9+fX19fX19fX19fX19fXx7iJKCe3x6fIZ5eXl8gYF+iJaEg4OEhJSTgIGBf39/fn6Fi4B/gICEhpCJhYSCgoGFhYuDgYKFhYaGhIOFhIOEhIODhIOEhISIko+MiYiIiYeHh4WGhYSFhIKBgoKDg4ODg4OCgYGBgYB/gIGAgICAf39/f4CAgICAgYGBf39/f4CAgIGBgYGBg4OGh4aGh4aGiIeGhoaFhIOFhH59fHx8fX18fH19fX19fX19fX18fH+RlZaDe3qElHx5enp7fH+Bg4GCgYOCgH59fn57iJF8fI6Wf31/f4KGioWDg4SDgYONiX9+f4OEhYWDhYWFhIWFg4SFhYaEhI6Rj4yKioyJiImHhYWFg4ODgYGCgoKDhIODgoGBgICBgICAgYGAgIB/f3+AgIB/gICAgX5+f4GBgoKCgoODgoOCgoWGhISFhYSGhIOEg4KBgIKAfn19fHx9fXx8fH18fH18fX19fHx8e4uRl4x6e3yBenl6e3x5eX19foB/gH98e3t+fn2ClZF/hIh9fH5/goR8fIGChIKAf4eDfYKBf4KCgIODhISEhISChIOEhYGEkZGOi4yMjoqJiYWFhYODg4KBgoODgoKDg4KCgYGAgIGAgICAgICAgH+Af3+Af357gICBenyAgYKDhYODhYWFhYODg4SCgYKDgoOCgoGBgIB/gX5+fX19fHx8fHx8fHx8fHx8fHx9fHx8fn6Kgnt6e3p4ent7fH17fn1+f319fX19fH+BgH2Gj4F+fYJ+f36Agnx8gH+CgIKAfnx7ioJ9gH9+gYCAgYKBgoCAgIGAf4uUkIyMjo6NiIiHhYWFhIOCgoKCg4OCgoODgYGBgICAgICAgH9+fXx7fHx9f3+AgHx6gYF4e4CCgYOFhIOFhIaGhISAhpSIgIKBgYGBgH9/f39/fn5+gHx8fHx8fHx8fHx8fHx9fHx8fHx9fHl6e3t4eHl7e3p8goCBfn+AfH5+f359gIKCgICAgX+CkYF/f4CAfoB+fn9+gIGBfX19e319fXx9fHx9gH+AgH6Afn6ClJKNjI2Oj4qFhoaFhISFg4KDgoODg4OCgoGBgYGAgICBgICAf4CAf39/fXt6fICAgHh+gXd7gIF/goKCgoKEhoeGhn6IlYp+gYGAgIB/foB+f39/fn+Bfnx7e3x8fHx8fHx8fH59fHt9fHx8e3x8fHp6eXt8en2Fg4N/gYF+f35/gH6FgoF+gH9+foCFhoKAfn6Dhn99fH5/gIGAf39+fX19fX57fH1/f3+AfX9+f4yRjo2Njo2Nh4SGhoWEhIODg4OCg4ODg4KBgYGBgYCAgYGAgYGBgYGAgH9/f397en9/e3mAd3p/f31/f3+Af4KEhoaFf3+FgX5/gIB/gH5+f31/gIB/f4B/f319fHx9fn18fH19fX19fH58fXx7fXx8ent6fH19f4aEg4CAgX1+fX5/fouEgYd+fXx8f36CgX99fX19gXx7fXx+gYSDgYB+fn5+fXx+f399foB+f36Eko2NjI+NjIqGhIWEhIODg4OCg4KDgoOCgYGBgYGAgYGBgYB/fXx8fH1+f39/f397e399d352eH59fH18fX5+gYGCg4B6fn58fn6Af35/f35/fn+AgH+AgH9/fn9+fn5+fn1+fn99fH59fn19fXt8fHx7e3p9f4CAg4OCf35/fHx8fXx8gYN+jH58e3t9fn1+fn17e3t9fHt7e3uAhoSChIOCf4B+f4KCgn9/goJ/gIuQjY2MjYuKiISEhIODg4ODgoKCgoKCgoKBgYGAgoGBgYKCf3+AgIB/fn18fH5/fn55fX52e3Z4fXx8fHt9fX6BgICAf31/f31+f39/foB/f39/f3+Af4GBgH99gH9/fn9+fn5/f3yCfX59fX17e319fHp8fH6AgoGAgIB9fX18fHx8fH18fnt/fnt7e3x8fH18e3t7e3x8enp9en6CfoKEhIOBgoGFhoWFhoaHhYGEkY+Ni4qLh4eFgoOEhISEg4KCgYGCgoKBgoGBgYGBgoGBgoKAgYKBgYCAgH9+e3x+fnx6fnh5dnd8fHx7e318f4GAf35/foB/f35/f35/gH9/f3+Af39/gYKAfn6BgIB/f39/f39+fYN8fH19fH99fX19e3x+fn9/fn5/fnx8fXx8fXx9fnt8e3x8fHx9fH18fnx9fHt7e3x5e3x7e316fX5+f4CAg4eJiYmKiYqJhYiSj4yJioeFhYOCgoOEhIOCgoKBgYKBgYKBgYGBgYKCgoGCgoCAgX98e3p6eXt9enx+fnl8eXh4dHx8fHt8fHx+gH9/f39/gIB/fn5+fYCAgH9/f3+Af4CDgoB/gIGAgIB/f4CAgH58enx9fX59fX5+jIZ9fX57e4ODfX5+fX18fX19fX19fH18fXx9fX58fn19fX18e3t6fHt8fHt6e3t6enp7fn6DhYiHiIqLi4uJjJGQjoqIhoWEgoKCgoODg4OBgYGBgYGBgYGBgYGCgoOCgYKBgIGBf3+Af356eHl5en5+e3l6eH5zfHx8e3x8fH5+fn5/gH+AgIB/fn9+gIF/f4B/gIGAgoSEgYCAgYGAgX+AgYKBf39+f31+gH57foGSjHx9f4qAjYx+fn19fX5+fX59fHx8fn18fXx9fX1+fX1+fnx7e3t8fH18e3p7e3l6eXl5e35/g4OEh4mKiImOkI6MiYmFhISCgYKCgoKCgoGCgoKBgYGCgYKCgoGCgoKBgoKAgYGAfoCAf39+e3p5e319eHx6f3KBfXt7fXx8fn59fYGCf4GBgX9/gH+AgX+AgIGCgYGFg4SCgYGCgYKCgICBg4KAf4F/fX6Afnx/f4mCf36DkYSEg4F/fn18jYd9fX59fXx+fnx9fXx9fX5+fX5/fX19e3x9fnx8e3x9enp5eXl5e3t+foCBg4eEiI+Oi4uHhYSEg4KBgoKCgoGBgYGCgoKBgoKCgoKCgoKCgoGCgn+AgIB+f39/fn5/ent5fX16enp9cX6Cent9fX19fXp4f4KAgYKCgICBgIGBgICBgoKCgoaFhIKBgYGBg4F/gIKEgX9+gYB9foF+fX5/gIB9fn+EgH5+f31+fX2KhX1+f31+foB+fX18fH5+fn99f4B9fX18fX9/fHx7fH17e3t6enp7e3x9fX2Ag4CJjouMiIWFhYSDgoKCgoKCgYGBgoKBgoKCgoKCgoGBgoKBgYKCf4CAgH9/f39+fn59eXp6fXx5d3t0e4d8dHd9fn17e3Z2fYCBg4KBgYKCgoKBgYGDg4OChYaEg4GAgICCgX+AgYSBfn6Af35+gH59fn6AgH+Bfn+Af39/gH99f39/f3+Afn9/gH58fX18fn5+foF/gH2CgHx9gIB9e319fXx8fHt8e3t7fHt8fHx9fIqLiYiGhoWFhISDgYKBg4KAgIGCg4KCgoOCgoKCgoGCgoGBg4J/gIGAf39/fn5+fn57enp8fHt2e3R3f352cnt+fnt4dnd8gIGCgoKBgoODg4OCgoSDhIOFhoOCgX9/gIKBgICAg4F+foB/fX+AfX1+foCAf4J/gYGAgICBgH1/f3+AgICAgIB/fnx9fX19fn59g32AfoKAfX6AgX98fn59fX17fH58fXx8fHt8e3t+ioeHhYaIhYSFhIKCgoGDgYCAgoKDgoKCg4ODg4KBgYGBgYGCgH6AgYB/fn5+fn5+fn56e3p9goN9dXF6fHpxen59eXh0dICAgoKCg4KDhYOEg4KDhISEhIWEgYGAgH6Agn9+f36Bf35+f4B9foB9fX1+gH9/gYCBgYCAgIGBfn6Af4GAf4CAgH9+fX19fnx+fn19gYR/gH9+f4GBf31/f319fn1+fn1+fHt8enx7eoCIg4SEhYSEhIWDgYKBgYKBgICCgoOBgoOEg4SDg4KBgYKBgYOAfoCBf35+fn5+fX5+fnt7en6Jh354cnl9f3F6eHt4eXV1fYKDgYODg4OFhIWDg4OEg4OEhIOBgH+Af4CBfn19fn9+fn5+gH19f3x9fX6Af4CAgIKAgIGAg4KAf4B+gIF+gIGAgH9+fn5+fn1/fn6FhYGBgH+Ag4F/foGAf35/f4B/fn17ent6fHt6goWAg4KCgoKCg4GBgYCAgoGAgIKCg4KBg4SDhIKEgoGBgoGCgn9+gIF/fn1+fn5+fX59fXp7fIWEe3tzeXp8cHd1dnd5dXR6hISBhISDhIWFhoSDg4SEgoODgoCBf39/f4B9fX1+f31+f39/fn1+fH19foF/f4B/gIB/gICDgoGAf36AgH+AgYCBgH9/f39/f4B/gIGCgoKBf4CDgn9/g4J/f4B/gX+Af3x6fHp8e3yCgH+Cf3+BgIKCgYF/f3+BgH6BgoKDgYGDg4KEgoSCgYGBf4GCgH6AgH9/fX5+fX19fn19e3t6gH94fHZ5eXtxdHh3dnh1cnmFhYKEhIKEhYWGhISChIOBg4GAgIF/f4B/f3x9fX6AfX5/f39+fX98fn5+gX+BgH9+f4B/gYOCg4B/f4GBgIKBgYGAgIGAgIB/gIGAgIKDgYF/gISAfYGChICAgX+BgYKBfXp7e3x8fH9+f4B8f399fYGAgH59fX9/foKBgYKBgIKCgoKBg4KCgYB/gYKAfn9/fn99fX1+fX19fX19ent7fHZ9eXh5enJ1eXl2d3dzdYaFg4WEgoSEhYSEhIGDgoGDgX+AgX5/gH6AfX19foB+f4B+fn99f3x/f3+BgIF/f3x+gH6AgYKDgYCAgYOEgoGAgYB/gYCAgYGAgYGBg4OBgX+Ag4B+goKEgICCgYKChIJ+e3t8fHx8fX1+fXp+fX14fn9/fHx8fn5+gYCBgYCAgoGBgYGDgoGBf4CAgoB9fn19f319fX59fH19fX16e3p8dnx6d3t4cnZ5e3Z2dnN0hoSEhYSChISFg4ODgYOBgYOBgIGBfX+BfoF9fX1/f39/gH5+f359fYB/gIGBgX9+fH5/fn5/gYJ/gYGCg4eFgX9/fn6Af4CAgYGAgIKCgYCAfoCCf3+BgoOBgYOCg4OFg399fX18e3x8eXp7en55e3l4f357fHt+fX1/f4F/gH6BgICAgoOCgYF/gIGBf31+fH1+fX19fX18fn58fXx5e3x4enx3endzeHd6c3Z2c3SGhISGg4KDhISDgoKCg4GCgoGAgYF9gIB+gH1+fX5/gIB/f39/f3x/f3+BgIGAf359f39+fn+BgH2AgIGDg4N/f359fn5/f4CAgX9/gYKBgH9+f4F+f4CCgYCBg4KEhIaEgH5+fHx8fHp5dnl5enl2eXZ+fHt7e359e399gH99fX9/f3+BgoGBgX5/gYF+fX18fX19fX19fXx+jYF8fXl7e3p5fHd4eHR1dXhyd3d0doaEhIWEg4ODg4OCgYKDgoGDgn+Bf35/fn+AfX19fH6AgIB/f39/fIB/f4GAgYCAf3yAf35+fn9/fX5+gYGCgn5/fn1+fn5+f3+Af32AgIB+fn5/gX5+gIKCf4KDgoOEh4SAgH58fXx8e3x1eXl4eHh5d3t8e3t7foV9fn1/ent+fn59foGAgIGAfX6BgH59fXx9fX19fX18e32Dgnx8ent7e3p7d3Z4dXJzdnB4eXJ4hYWFhYOEhIOChIKBgYKBgIKBgIF/fn5+foB+fX58foCAgH+AgIB8gH6AgH+BgIB/fYF/fn5/f359fX6AgYKBfn9+fn59fX5/fn9+fH6Af35+fn+Cfn6AgIF+gYOCg4OGhICBfnx9fHx7fHh3e3h1eXd3eXx6e3t9kod9fH13en1+fn19f35+gH98foB/fn19fH19fX19fHt8ent9enp4e3x6ent4dHh1cXJ0cHh4cXmEhYWFg4SDgoODgoGBgoKAgYGAgIB9fn5/gH18fn1/gIGAgICAgHx/f4B+f4GAf39+gX9+f39+fX18f4CAgIB+f35+f318fn9/f358fYB/fn1+gIJ/foCAf36ChIKCg4WFgoJ+fXx7e3x8eXd8eXd4d3d4e3t7e3yFiX17end6fH19fHx9fX1/fnx9fn59fXx8fX5+fX18fHt6enx7e3p5enp7enhzd3VxcXNveHdxe4WGhYWDhYKBg4OBgoGBgoCBgICBgH5/fn9/fXx+fYCBgoGAgIGBfX6Af35/gX+Af3+BgH9/f319fH1/gICAgH9/f35/fXx+f39/f319f39+fn6CgYF/gIB/foGDgoKEg4SCgn5+fHx6fHt7eXt6d3N2d3h5e3p7eXp/fnt7d3p8fXx8fH59fH19fH19fXx8fX19fX99fXx9e3l7fHx7enp6enp6eHN2dXBwcm93dnJ7hYaEhYOEgoGDgoKBgYGCgYKBgYGAf4B/f399fX9+f4CBgYJ/goF9foF+fn+Bf4B/gIJ/gIB+fH58f3+BgICAf4B/f4B+fX5+f4B/f39/gH9/f4J/gICAgIB/gYGAgISBgoKAf39+f3x9fn56fYV+dHx9enp6enx5eXp6hoV3eXx8fHx8fXt8fHx8fX19fHx9fX19fn19fX16eX18fH16enp6enp5c3V1b29xb3d0c3yFhoOEgoOCgYKBgoKCgYKBgoCCgYCAgICAgH59gH+Af4GCgn+CgX+AgX5/gYB/f4CAgn+Bf319f35/f4KAgICAgIB/gIB+fn1/gH9/gIB/f39/gH+AgICAgH+AgYCBgYGCgYCAf39/fn1/fnuBk416fH18e315e3p6eHqBgXh5e3x8fXx8e3x8fHx9fX18fH18fn1+fn59fHp8fHt8fXt5enp6eXl0dXVvb3Fwd3N0fYWGg4OCg4KAgYCCg4KAgYGCgYKBgYCAgIGAfn6Af4GAgYKCgIKCgICCfoCBgX9/gX+BgIF/fH6Af3+AgoCAgICAf3+AgH9+fX6Afn2AgIB/f3+AgICAgYCAf4CAgYCBgYKCgICAf39/fX5+fIGGiXx8fnt7fnl6e3p7j393d3l7fHt9fHx8fHt9fH19fX18fXx+fn5/f358enx9e3x9e3l6e3p5eXN0dW5zcXB4cnV6hYaDg4KDgoCAgIKCgX+CgYKBgoGBgYKAgYF/fn9/gYGCgYKBg4OAgYJ/gYGBf4CAgIB/gX99f4F/gICBgICAf4B+gICAf359foB+fn+Af39/gH9/gICBf4CBgH+BgIGCgoKAgICAgIB9foB9gIOCe35+e3x9e3p8fHuHenh4eXx8fH17fHx9fX18fH19fn19fX5+f3+Af317fH18fHx7enl7e3l5c3J1bnZycHhxdXaFhYOEg4KCgICBgoF/gIKCgoKDgYGDgoCCgYB/gICCgoKBg4KEhICBgX6BgoF/gICAgH+Cf36AgYCCf4B/gIB/gH+AgIB/fn2Af35/f4CAgH+AgH+AgYF/gICAgIGAgYGBgYGAgYCAgH9/gH5/fX59fn57fXx9e3x8d3h1eHh5e3x8fXx8fHx8fX5/f39/fn19fn9/gIGAf3x9fHx9e3p7eXp8eHpzcnVud3FxenF2d4WFg4SDg4KBgoKDgICCgYSDg4SBgYOBgoOCgYCAgIKDgoCCgoSDf4GAfoKDgICBgICAf4CAf4GBgIKAf4CBgH9/gICAgIB/f4CAgH+AgICAgIB/f4CBgYCAgICAgYGAgoOCgoCCgYGCgYB/f4B/gId+fnx7fXx7fX94d3Z5eXp8fHx8fXt8fH19fn5/gIGAfn1+gICAgoGAfH59fX58d3t6ent5eXNxdW53cHV6cXZ5hYWCg4KDg4KChISAgIOBhoODg4GChICEg4KCgICCgoSBgYKBg4J/gIB/gYOCgYCBgYCAf4GBgYGAg4B/gIOCf35/goGAgH9+gYCBf4CAgYCBgYCAgIKBgYKBgX+BgYGBgoOCgoOBg4OCgYCBgH9/hH19fXx/fXp9f3t5dnp4eXt7fH19e3x9fX19fn+AgYGAgH+AgICDg4B9f35+fn15eXt6enp5c3J0b3dxd3lzd3uFgoKDg4OEgoOEg4CAg4OGg4ODgoKEgYSDgYOAgIKBhIGCgoGCgX6AgICCgYKBgYOCgIGAgICCgoGEgH6Bg4F/f4CDgoCBf4CCg4KAgYKBg4KDgoGBg4KChIGAgYOBgYKEg4KEhIODhIODgYGBgoCCf4B/fYB8enx/e3t3fHl5eXt6fX59fHx8fH1+foCBgYCAgIGBgYSEgH2Af39/f357e3t6e3p0cHhxeXR2eHR3e4SCg4KDg4SChIODgYKDhIaEgoODgoSChIOBg4CBg4KCgoKCgIKAf4GAgIKBgoGCgoKBgIGBgYKCgoOAfoGDgX9/gYSEgYN/goKBg4KCgoGEg4OEgIKEgoOCgoGCgoOBg4SDhISEhISFg4SCgYOCgYOBgYGAgH58fIB9fHh8eXp5enx9f3x7fHx9fX18fICAgICAgYGBgYKBfoGAgICAf3t7e3p6enVweHd5dnV8dXZ8gICDgoODg4OEhISAgoOGhYWDg4KDhIKEhYKCgYKDg4GCgYKAgYB+gYCBgYKDgoKCgoGAgYKCg4KCg4B/gYOCgICChIODgoGCgoGDgoKDg4ODg4SAgoSDg4OBgX+Bg4KDhYKEhISEhISDhISChIOEhIKBgoGBgHt9gX58eXx6enp9fHyBfXp8fH19fHp7fn5+gIB/gYGAgICAgIKBgIB/fX18fX18dnJ2eHh2dH92dX2Hh4OChIWDg4SFhICChYWEhIOCg4SEgYSFg4KCgoODgYOBgoCCgH2AgIGCg4KCgoKEgoCCgoOEgoKBgICBg4KAgYOFhIOCg4CCgoOCg4ODg4OEg4CCg4KEg4KCf4OBgoSEgoODhISEhIOEhIOEg4WEg4ODgoKAe4CBf3x8fXp6fH2AfX9/fHx6fH59fH19fn5/f39/gICAgH9+foCBgICAfnx9fX5/fn18fHh2f3Z3f4SHg4KDhoODhIaEgYKFhoWEhIODhISChIWFgoKDg4SCg4KDgoKBfoCAgoKDgoODg4SDgYKCg4OCg4GCgYGDgn+ChISDg4KEf4KEg4ODgoSDg4SCgIOEg4SDg4KCg4KChIOCg4OEhISEhIWEg4OEhYSFhIOBgoB9gYKAfXx8e3x8gH19foB+fn1/fnx8fH19fn5/fn+BgYGBgH99fX6BgYB+fn19fX59fX5+f3+AfH2AgYKCg4OGg4SDhoSBgoiHhYSDg4SEhYGFhYWDg4SDhIODgoOCg4F+gYGCg4SCg4OEhIOCg4KEg4ODgoKDgYOCf4KDg4ODgoOAgoWDg4ODhIODhIOBgoSEhYODgoODg4GEg4GDg4SEg4SEhYSEhIWFhYWEg4ODf36BhIB9fXx8fHx/gX5/f39/fX99e3x9fX19fX5+f4CBgIGBgH59fH6Cf39+fn5+fX1/f39/gICAf4CEhIODg4WDhIOFf36CiouFhYSDgoOFgYaGhoOEhISEhIODg4OEgn+BgYODhYSFhIWEg4KEhISFhIODgoSDhYKBhISFhYaEgoCDh4SDg4OFhIWFhIGEg4OHgoOCg4GCgYSDgoODhIODhIWEhYWHh4aHhYSEhYSBf4GDf35+fH5+fX+BgH9+fHx/f358enx9fX19fX5+fn9/gIGBf319fIB/gH5+fn5+f3+BgYGBgYKAgYWFhIOEhIKEg4aAgoWFiomEhISEhYWCh4aGhISEhIWEhISEg4SDgYKDg4OEhIaEhYSDg4SEg3yDhHuBhHd5g4F9hH5+cnWDgoF2foOEgH2BdYF5g39/f36EhIKDgoOBg4SDhISFg4SFhoSFhn2EeXx+f4N7hYOBhIOAf31+f31+gYOBfXt/fX6Afn18fHx9fX19fH19f4B/gYJ/fX18f4GBgICAgH+BgYGBgYKDg4KChoSEhIWEgYOEhYOEhYSKiIWFhYOFhYSGhoaDhISFhYWEhYWEhIWCgoOEhYWFhoSFhIOEhYWCaICFanx7cXF8gXOGc3R0fYKDdXNxg4ZzcHVyc3SDdnt9dYF/goOBgnZ5hYCDgIR/hYSChYWCaHpyc3N8gHKBg3+Dg32BfX5/fX6Cg4J8f4F9f4B9fXx8fHx9fHx8fn1+gX+BgX99fX2AgYKBgYGBgIGBgYKBgoKCgoSHhIWEhYSBgoSGhoOFg4aIhoaFg4aGhoeGh4OFhYaFg4KFhoSFhYODg4SEhoaGhIaEg4SFhn1xe4FweXZ+g3+CbnlwdXN8dnl5hnKEg3B2eHF2dHR1cnN0dml/gG5yb3R2bnVsd216c26Ah3ltfXJzdnN2bW53bHB5bHV+f398foGAgX2Af32Af4B/fX18fHx9fH1+f32Af4CAfnx/foCBgYCBgICAgYCAgIKDgoKEhYeGhoCChYODhYeGg4WFhYaHh4SDhoaIiYaHhIWGiIeEg4WGhYWEhIOFhIKFhoaFhoWEhoWHdnB0e3BydX+HhYNtdW92b3x1coR5eYd4cXR3bndod3pucHaCcoN+b3p5eW1vbnpvb2x3fXiGcHF6cHJ0ZoF1fm57eXNveX+Af31+gYB/e39+fIB+gIB+foCAgYB+fn9/foF/gH9+fYB9f4CBgIB+fn+BgH9+goOCgoSFh4eEfoeEg4OFh4aEhoWFhoaIhISGh4iIhoeEhoaLioWEhoeHhYOFhIWEgoWFhYWGhYWGhYZxdXByc29zenl+hHSIdHV+iHZugnKEhnluanJ/cW1zd3x/dXR8hH54cXV3bnl1enF2eHV6eYRyaW95eHBreXN6b3p3dnZwgYB/fn5/f356fn18f31/f359gIGDg4CCg4GBhIKBf4GCgH1/f4F+f35+f4GAfn6BgoCAgoSHhoODhoSFhYaHhoWFhYWGhoiFhYaFh4eFhoSGhomIhYSJi4iGhIaFhoWDhYWEhoaGhoaFg3iLeXKIentwcIWEeIV4eWtzfnl7a3KDh4N6fG16eXl0fYB2bm+AgG90fHV3cXl9fW1+dW+DhYZ6gHJye3x1cG96a3N8bnaCgYF+fn99fXp9e3x9fH9/fn1/f4KCf4GDgYGDgYB/gICAfn9+f31/fn1/gH58fYGAfn6Ag4iFhoOFhYWFhoeFhYWFhYeHiIaEhoWHhoaFhIWFhIWFhomKh4WEhoWGhoWGhoSGhoaGhoWGh4eHhoaEhoWGh4iHhYeGhoOHhoWFg4SFhoWGhIaEg4SEhoSEgYODhIOFhIWEhYSGg4WGhYWEhIWHhoSEhYaFhX13hYOEhIOCgX5/fnt8e357fHx9f399fH9+gYB9f4F/f4GAfn5+gH5+f35+fX99fX5/fHt8f358fH+BiYaFhIaGhoWGhoWFhYWGhoeIhoSGhYeFhYWDhIWGhYSGhoaGhYSGhIWGhoaGhIeGh4eGhYeIiIiIhoSHhYaGiIaFiIeIhYeGhoiFhYaHhYaGhYOChYWGhYWDhYSEhIWEhoWEhYWDhoaFhoWEhoeGhISFhoOFhIKEg4OFg4OBfYB/e3t8fnt8fH1+fnx8fn2Afn1/gH5+gH99fXyAfX5/fn5+f3x8fX57fHx/fHt7fn+Ih4SEiIaGhYeGhYWEhoaGhoiHhIWGh4aFhIODhIaFhIeFhoaFhYaEhYaGh4eFh4aJiIaGiIeIiYiFhYiFhoeGh4aHhoeFh4eGh4WFhoeFhoaFgoOFhoaEhIOEhIOEhoSGhYWFhYOGhoWGhYSGh4WEhIWFg4SHhoOCg4SDhIJ+gYB8e31+e3x7fn59fHx+fX5+fX9+fX1+fnx9fH98fn58fYF/fHx8fXx8fH56e3t8foiHgoWIh4eGhoaGhISGhoeGiIaEhYSHhoSFh4OEhYSFh4SFhoaFhoSGhoeHhoaHh4mIhoaIh4iKiIWHiIWGh4WHhoeGh4WIiIeHhYaGh4WGhoSBhISFhoWFhISEg4SFhIaGhoWGhIaFhoaFhYaGhYSDhISDhIeDhIGChIWDgYCAgHt7fn18fHx+fXx8fH19fH18fn18fX18fHx8fXx+fXt8gX99fH18fnx8fHp6fHx9iIeChoiHhoeGhoaDhYaFhoaGhYOFhIaFhIiJg4GEg4SGhIaGhoaGhIeHiIiHh4eIioiGh4iHiImIhYiHhIaGhoeHh4WHhoiIh4eFh4eHhYaHhIKEg4SGhYeFhISEhISFhoaGhoaFh4WFh4WGhYaFhIOEg4OEh4GDgIKDhIKCgn+Ae31/fXx8fH59fH19fH17fHx7fHx9fXt7e318e359e3x/fX18fX1+fXx6ent7fHyIh4KGhoaGh4aGhYOFhoWFhYWEg4WChoSDiId/enqChYaEhoaFh4aEh4eIiIiHhoiKh4aHh4eIiYeFiIeFh4eGhoeHhYeGiIiHhoWHhoiGhoeDg4SEg4aGh4WFhISEhYaGhoaGhYaHhoaIhoaEhoWDg4ODgoOGgYN+goKDgIOCf398f39+fHx9f318fX18fnt7e3p7fHx8e3t7fnt8fXt6e358fHx8fX5/fXt6fHp8fImHg4aFhoWGhoWEhIWFhYWFhIOBhIGGhIKEhHyAhn+ChYWGhYWGhYSHh4iHiIaFiYqHhYeGh4eIh4WIhYaHiIaGh4eGh4aIiIeFhoeGh4WFiIOEhoWDhoaHhoWEg4WFhoaGhoaFhoaHhoeHhYOFhYOBgoKBg4WCg36BgoF/g4F/fn5/fn98fH1/fXt9fXx+enp7eXt8fXt7e3t+fHx8fHp7fXx8fHx+fYF8e3t7e3x8iYeEhoSGhIaGhYSFhoWEhIOEgoCDgYaDgYJ/eoSMe4CEhYeGhoaEhIeIh4aHhYWHiYeEh4WGhoiGhYeEhoeIhoaIh4eHhoeIhoSGhoaHhYWHg4SFhIaGhoeFhYSDhYWGhoeGhoWGhoaFhoaEg4SFgoGCgYCEg4OCfYGBf36DgX5/f4B8f3x9fX59e319fH15enp5e3x9enp7e318fXx8enp9fHx9fH5+gHt7e3x+fXyIh4WGhYeEhoSFhYWFhYODgYOBgIKBhYJ/gH9/fXx7gYSFhoaEhYSEh4eGhoaFhIaJhoKGhIaGhoWFh4WHiImGhYiHiYeGhoeFhIaFhYeFhIeDhIWEiIaGh4WFhIKFhYaFhoaHhIWGhoWFhoKDg4WAgIGAgIOAg4B8gYB+foKAfYB/gXx/fH1+fX57fn18fHl6enl6fX15enp7fHt8e3t6e319fH18f35+fHt7fX59fIiGhYaGhoSFhYSFhYSDgoKAgoGAgICDgX5+foB5en2Ag4OFh4WEg4OHhoOEhYSChYiFgoSDg4WFhYWHh4aIiIaFiIeJh4aFhYWDhoSFh4OEhoSEhYSHhoWGhYaEgoWFhoaGhoaEhYaGhIWFgoKDhH9+gICAgYCDgHuBf31+gn5+gH6Afn99fX59f3t/fXt6eXp6eXp8fXl6ent7enx7e3t7fH19fXx/fn18fHx/fnx7h4WFhoaGhoSFhIWDhYKBgICAgYB+f4KCfX1/f3t/f4KDg4WGhYSDg4aDgYOEgoCFh4WCg4GBg4SEhYaGh4eHhYWIhomHhYSEhIKFg4SGgoOFhISGhIeGhYWFhoOEhYSFhoWGhISFhIWDhYSAgIKDf35/f39/gIN/fIB9fX+CfYCBfn6Bfn5+fX1/e398e3p5enp5ent8eXp6e3t7fHp7e3t8fX19fYB9fXx8fYB/fXyGg4aGhYaGg4SDhoKFgYGAf3+AgH5/gYJ8fn9/foCAgoKChISDgoGChIGAg4KBgISFhIKBf4CCg4OEhYWHhoaEhYeFh4WGgoOCgoOBgoWBg4WEhYaEhoaHhoaFgoSEg4SGhYWDhIODhIKEhIB/goJ/fX5/fn5/hH57f3x8gIF9gYB9foN9fn59fX57fnt7enl7enl6ent5enp6e3t8enx8fHx+fn1/gXx9fHx9f4B+gIaEhYWEh4SEg4KGgoOAgYB+fn+AfX5/gnx9f39+fn+BgYKEg4KBgYKCf4CBgoCAgoWEgoB/gIGCgYOFhYeFhISGhoOFg4WBgoGBgoGCg4GChISEhYWGh4eGhYWDg4ODhIWFhIGDgYOChIODgH+AgX59fX5+fH6Dfnx+fHyBgH6Cf35/gnx/fn19fHx8e3t6enp6eXt5enp5enp6e3x5e317e35/f4GAfX59fX1/gICAhoSEhYSFgoSCgoSCgoCBgH59fn9+fn6AfX2Af35+foGBgoODgoSHgYF+gICBf3+ChIOBf35/gIJ/goWEhYOCg4WFgoSBg4CBgIGBgYKBgIGEg4OGhYWHh4WEhIWCgoKDhYSCgYGBgYCFg4F/foB/fnx9fn18foN9e358fYF/gIN9fYCBf35/fXx8fH17e3p5enl5e3l6enl6ent7e3p7fXx8f3+BgoB+gH+AgH+AgIDKysrKysrKysrKysrLy8vLy8vLy8vLy8zMzMzNzc3Nzc3Nzc3NzczMzMvLy8vLy8vLy8vLy8vLzMvLy8vLy8vLy8vLy8vMzMzMzM3Nzc7Oz8/Pz9DQ0NHR0dLS0tLS0tLT09PT0tLS0tLS0tPT09TU1NTU09PT09PT09PT09PT09PT09PT09PT09PT09PT09PS0tLS0tLS0tLS0tPT09PT1NTV1dXV1dXV1dXV1dXV1dXV1NTU1NTT09PT09PT09PT09TU09PU1NTU1NTU1NTU09PT09PS0tLS0tPT09TU1NTU1NPT09LS0tLS0tLR0dHR0dPHhnNlYFtLWWdVTUZIQD03Nzg5Nzw8PDo8Oz42Oj04PDs6OTg3ODs7Oj87PTs8PD47P0E/QkJBQ0RFREE+PTw7QENDQUBDQ0FBR0hHSUtSwtXS09PT09TU1NTU1NTU1NTU1NXV1dXV1dXV1dXVysrKysrKysrKysrKy8vLy8vLy8vLy8vMzMzMzMzNzc3Nzc3Nzc3MzMzMy8vLy8vLy8vLy8vLzMzMy8vLy8vLy8vLy8vLzMzMzc3Nzc3Oz8/P0NDQ0NHR0tLS0tLS09PT09PT09PT09PS09PT09TU1NTU1NTU09PT09PT09PT09PT09PT1NTU1NTU1NTT09PT09LS0tLS0tLT09PT09PU1NTU1dXV1dXV1dXV1dXV1dXV1dXV1NTU1NPT09PT09PT09PU1NPT09TU1NTU1NTU1NPT09PS0tLS0tPT09PU1NTU1NTU09PT09PS0tLS0tLR0dHSzIxyZ2BcTVllUktHSz87Mzc4Ozg5Pj05PDpBOjs9Nzs8PDo6Nzg6Oz0/Oz88PTw/Pj9BPUFBPkNDREJAQT46Oz9DREFDRERCQklHSEhJTr7V0tPT09TU1NTU1NTU1NTU1NXV1dXV1dXV1dXV1crKy8vKysrKysrKy8vLy8vLy8vLy8vLy8zMzMzMzM3Nzc3Nzc3NzMzMzMzMy8vLy8vMzMzMzMzMzMzLy8zMzMzLy8vLzMzMzc3Nzc3Ozs/P0NDQ0NDR0dLS0tLS09PT09PT09PU09PT09PT09TU1NXV1dTU1NTT09PU1NPT09PT09PT1NTU1NTU1NTU1NPT09PS0tLS0tLS0tPT09PT1NTV1dXV1dXV1dXV1dXV1tbV1dXV1dTU1NTT09PT09PT09PU1NTU09TU1NTU1NTU1NTT09PT0tLS0tLT09PU1NTU1NTU1NTU09PT09PT0tLS0tHR0s+Sd2hfXk9XZ01LRks9ODc2NTk5OTw+OT88Qzk7PDc5PD07OTc5Ojw9QDs+PT47PD48PT5BQD5EQ0NDP0E9Ojs9QkNFQ0NEQT9FSEpJSky61dPT09TU1NTU1NTU1NTV1dXV1dXV1dXV1dXV1dXLy8vLy8vLy8rKysvLy8vLy8vLy8zLy8vMzMzMzMzNzc3Nzc3Nzc3MzMzMzMzMzMzMzMzMzMzMzczMzMzMzMzMzMzMzMzMzc3Nzc3Ozs/Pz9DQ0NDQ0dHS0tPT09PT09PT09TU1NTT1NTU1NTU1NTV1dXU1NTU1NPU1NTU09PT09TU1NTU1dTU1NTV1dTU09PT09LS0tLS0tLS09PT09TU1dXV1dbW1dXV1dXV1tbW1tXV1dXV1NTU1NTT09PT09PT1NTU1NTU1NTU1NTU1NTU09PT09LS0tLT09PU1NTU1dXV1dTU1NTT09PT09PT0tLS0dHRmn5nYWJOVWpKSElLPzw6OTM3Njc2PTs+Oj06Ojo4ODo7Ozg4Ojs7PD46PT09Ojw/PD0/QkA/Q0RDRD5APT08QENEQ0JEQkQ+REhJSUtMttfT09TU1NTU1NXV1dXV1dXV1dXV1dXV1dXV1dXVy8vLy8vLy8vLy8vLy8vLy8vLy8zMzMzMzMzMzMzNzc3Nzc3Nzc3Nzc3MzMzMzMzMzMzMzMzNzc3NzczMzMzMzMzMzMzMzc3Nzc3Ozs7Pz8/Q0NDQ0NHS0tLT09PT09PT1NTU1NTU1NTU1NTU1NTV1dXV1NTU1NPT1NTU1NTU1NTU1NTU1dXV1NXV1dXV1NTU09PT09PS0tLT09PT09PU1NXV1dbW1tXV1dbW1tbW1tbW1dXV1dXU1NTU1NTU1NTU1NTU1NTU1NTU1NXU1NTU1NTT09PT09PT09PU1NTU1dXV1dXV1dTU1NTU09PT09PS0tLR0p+DaV9kU1hsSEhIS0A9Nzg0NzY6Oj87RDw8Ojw8OTg6OTo6Ojs8Ojo7OT49Pjk9QDs/QUFCP0JCQUM9Pz8+PEBCRUNDQkBBO0ZJR01MSbLY09TU1NTU1NXV1dXV1dXV1dXW1tbW1tbV1dXW1svLy8vLy8vLy8vLy8vLy8vLy8vMzMzMzMzMzM3Nzc3Nzc3Nzc3Ozc3NzczMzMzMzMzMzc3Nzc3Nzc3Nzc3Nzc3Nzc3Mzc3Nzs7Ozs7Pz8/P0NDQ0NHS0tLS09PT09PT09TU1NTU1NTU1NTU1NTV1NXV1dTU1NTU1NTU1NTU1NTV1NTU1dXV1dXV1dXV1dTU1NTU1NPT09PT09PT09PU1NXV1dbW1tbW1tbW1tbW1tbW1tbV1dXV1dTU1NTU1NTU1NTU1NTV1NTU1NXV1dXU1NTU1NTT09PT09PT1NTU1dXV1dXV1dXU1NTU1NTT09PT09LS0tSjiGxfZlJWakdIR0lBPjM2Njo7PDhDPEJBPjtBPDg5Ojw6Ojw8PDk8PTo7PD09PD89QD9AQT9AQUBCPD4+PzxCQ0NDRkBBQT1ISklOTUeu2NPU1NTV1dXV1dXV1dXV1dbW1tbW1tbW1tbW1tbMzMvLy8rKysvLy8vLy8vLy8vMzMzNzc3Nzc3Nzc3Nzc3Nzc3Nzs7Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Ozs3Nzc3Nzc3Nzc3Nzs7Ozs7Oz8/P0NDQ0NHR0dLS0tPT09PT09TU1NTU1NTU1NTU1NTU1NTV1dXV1dTU1NTU1NTU1NTU1dXV1dXV1dXV1dXV1dXU1NTU1NTT0tPU1NTU1NTU1NTV1dbW1tbW1tbW1tbW1tbX19bW1tXV1dXV1dXV1dXV1dTU1NTU1dXV1dXV1dXU1NTU1NTU09PT09PT1NTU1NXV1dXV1dXV1dXV1NTU1NPT09PT0tLWroprY2VSWGhMSkdJQjg0OTQ6Ozo5QDk+Q0U/PDw5OTk9Oj07PDw6PTw7OTw9Ozs/PUA9PT5AQD9CQT5APD05QERDQkFBQj48SEpLTU5IqNnU1NXV1dXV1dXV1dXW1tbW1tbW1tbW1tbW1tbWzMzQ0dDQ0NDQ0dHR0dHR0c3Ky8vLzMzMzMzMzMzMzM3Nzc3Nzc7Ozs3Nzc3Nzc/Pz8/Pz8/Pz8/Pz9DQ0dHR0dHR0dHR0dHS0tHV2djY2NnZ2dra2tvb29vZ2dnZ2dna2tra2tra2tjW19fX19fX19jX19fX19jZ2NjY2NjY2NjZ2dnZ2NfX19fX19fX1tbW1tbW09LT09PT09TU1NTU1NbW1dXV1dXV1dXV1dXW1tbX1tbW1tbV1dXV1dXV1dXV1dTU1dXV1dXV1dXU1NTU1NTU1NTU09PU1NTU1NXV1dXW1dXV1dXV1dTU1NTT09PT09PS1bqKa2hoUlhlSUlMTkA5OTo0O0E8Nz05QUM9QD89ODo6Ozk9Oz4/Ojs8PDo7PDo7Pj1APT8/P0FAQUE/QTw8Oz5BRENBREA9PElJSk1ORqPa09TV1dXV1dXV1dXW1tbW1tbW1tbW1tbW1tbW1szNloSGhoaGhoeHh4eHh4Ky4t3d3t7e3t7e3t7e3t3S0NDQ0NDQ0NDQ0NDQ0ci5ubm5ubm5ubm5ubq6t6WkpKSkpKSkpKSkpKSnhmBjY2NjY2NjY2NkZGRlhIuKioqKioqKioqKioemuri4uLi4uLi4uLi4uLepp6enp6enp6enp6enprG+vb29vb29vby8vLy7v9LS0tLS0tLT09PS09PT3OPi4uLi4uLi4uLj4+Pi2NfX1tbW1tbW1tbV1dXV1dXV1dXV1dbW1dXV1dXV1dTU1NTU1NTU1NTV1dXV1dXW1dXV1dXV1dXV1NTU1NTT09PT09XDkXFrak5TYkxMVk08Ojo3Nz5DPjg+Oj8/QTw/QDc7Ojs7PTs+Pjo7PD48Oz07PT8+QDw/Pz1AQEBBPj88PjxAQUVCQkZAQD9HSEpLT0ae2tXV1dXV1dXW1tbW1tbW1tbW1tbW19fX19fX19fMzm5QU1NTU1NUVFRUVFNMoPPr6+rq6urq6urq6uvp1dLS0tLS0tLS0tLS0tTEqaqqqqqqqqqqqqqqq6aGhIWFhYWFhYWFhYWFik4MEhISEhISEhISEhIRE0pUU1NTU1NTU1NTU1NPg6ejo6Ojo6Ojo6Ojo6OghoSEhISEhISEhISEhIKVrKqqqqqqqqqpqampqLDS0tLS0tLS0tLS0tLS0eDs6+vr6+vr6+vr6+vr6dnX19fX1tbW1tbW1tbW1dXV1dXV1dbW1tbV1dXV1dXV1dXV1dTU1NTV1dXV1dXW1tXV1dXV1dXV1dXU1NTU1NTU1NPUy5h2bGlKTl9NUlVNPjw8Nzs/Qz42Ojc+Pzs8QkA4PDk9Ozw6PD07PTs9Ozs9PD0+PT07QT08QUBBQT08Pzw7QEJDQURFPUFAQ0ZLS09GmNzV1dXV1dbW1tbW1tbW1tbW1tfX19fX19fX19fXzM5xVFhXV1dYWFhYWFhXUKHx6enp6enp6enq6unq6dXS0tLS0tLS0tLS0tLUxaqrq6urq6urq6urq6yoiIeHh4eHh4eHh4eHh41SEhgYGBgYGBgYGBgYFxpOWVdXV1dXV1dXV1dXU4WopKSkpKSkpKSkpKSloomHh4eHh4eHh4eHh4eFl62rq6urq6urq6qqqqmy0tLS0tLS0tLS0tLS0tHf6+rq6urq6urq6urq6unZ19jX19fX19fX1tbW1tbW1tbW1tbW1tbW1tbV1dXV1dXV1dXV1dXV1dXV1dXW1tbW1tXV1dXV1dXV1dXU1NTU1NTU1NGcenFpSlRdT1JVTkQ+Pzs/QEA4Ojs4PDw8PD46Ojs4Ozk5Ozw7Ojw5Ozs8Ozo9PT0+PUE/Pj8/Pj08PT88PEFBQ0FERTw+QEVGSktNRpPc1dXV1tbW1tbW1tbW1tbW1tfX19fX19fX19fX183OeF5hYGBgYGFhYWFgYFqk7ufn5+fn5+fn5+fn5+bV0dLS0tLS0tLS0tLS08Wtrq6urq6urq6urq6vq46NjY2NjY2NjY2NjY2SXSInJycnJycoKCgoKCcpWmNiYWJhYmJiYmJiYl6MrKmpqampqampqampqaeQjo6Ojo6NjY2NjY2Ni5yxr6+vr6+vr6+vr6+uttLS0tLS0tLS0tLS0tLS3+np6enp6enp6enp6enn2djY2NjY19fX19fX19fX19fX19bW1tfX19fW1tbW1tbV1dXV1dXV1dXV1dXV1tbW1tbW1tbW1tbV1dXV1dXU1NTU1NTWo3txZElbYE5OVU9AQT89REI+Oz06OTs6PTw7PDs6OTg5OTs8Ozw8Ojo7PDo7QD08PTxAQTxBQTs7PEA/PD1CP0RDQ0U8PkJERkpMTEWN3NXV1tbW1tbW1tbW1tbX19fX19fX19fY2NjY2NjNzcfFxcXFxcXFxcXFxcXEy9DPz8/Pz8/Pz9DQ0NDQz87Ozs7Ozs7Ozs/Oz8/NzMzMzMzMzMzMzMzMzMvJycrKysrKysrKysrKysfCw8PExMTExcXFxsbGxsvMy8zLzMzNzMzMzMzLz9HR0tLS0tLS0tLS0tLS0NDQ0NDPz8/Pz8/Pz87Q09LS0tLS0tLS0tLT09LV1NTV1dXV1dXW1dbW1tjY2NnZ2dnZ2dnZ2dnZ2djY2NjY2NjY2NjY2NfX19fX19fX1tfX19fX19bW1tbW1tbW1tXV1dXV1dXV1dbV1dbW1tbW1tbW1tXV1dXV1dTU1NTU169/cF5GXmJQUVdOR0ZDQ0lBPz07PDo8N0BBPD04Ojo4OTg7Pzs8PDs7PDw8PD87PD46Pj44PkI8Pj1BPjw+QkBERUNAPD5APkNJSUtEh9zV1tbW1tbW1tbW1tbX19fX19fX19jY2NjY2NjYzs3Pz8/Pz8/Pz8/Pz9PPz87MzczP09LSzs3P0s7Ozs7Ozs7O0dTPz9HU1NPOztPTz8/Pz8/Pz8/Pz8/Pz8/P0NDQ0NDR0dHR0dHS09PU1NTU1dXV1tbW1tfW1tbX1tfX19fX19fX19bW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tXV1dXV1dXW1tbW1tbW1tbW19bW1tbW1tbX19fX19fX19fX19jY2NjY2NjY2NnZ2dnZ2dnZ2djY2NjY2NjY2NjY2NjX19fX19jY19fX1tbW1tbW1tbW1tbW1tbW1dbW1dbW1tbW1tbW1tbW1tXV1dXV1NTV1di4gm9XSl9jUlFaS0hBQTxCPT07Oj4+PD4/PT0/ODk6OTk3OD48PD47Ozw7PDs/PT0+OTs7OT0+P0A+QD07OkI/QkNCPz0+QD5CRUdKQoDc1tbW1tbW1tbW19fX19fX19fX2NjY2NjY2NjY2M7Ozs7Ozs7Nzc3Nzsqfys3Nzc3QuYOEi8fTwJrLz87Ozs7O07udz9Ktg4OVz9KkodDOzs7Ozs7Ozs7Ozs7Oz8/Pz8/P0NDQ0NDQ0NDR0dHR0tLT09PU1NTU1NTV1dXV1dXV1dXV1dXV1dXV1dXW1tbV1dXV1dbW1tbV1dXV1dXV1NTU1NXV1dXV1dXV1dXW1tbW1tbW1tbX19fX19fX19fY2NjY2NjY2NjY2NnZ2dnZ2dnZ2dnZ2dnY2NjY2NjY2NjY2NjY2NjY2NfX19fX1tbW1tbW1tbW1tbW1tXV1tbW1tbW1tbW1tbW1tbW1dXV1dXV1dXYwIBuVU9gY1dZW0xMQ0A9PTs9Ojw9Qj5CQkA8Ojg5ODo6Ojc7Pz4/PDw7PDo5Pzw8PTg5PD9BPj09PUFAPTtBQkBCQz47QD9BQUlHSkF629bW1tbW1tbX19fX19fX19jY2NjY2NnZ2djY2dnOzs7Ozs7Ozs7OzdKpj63Rzs7Ozpu3tqSiwJOerNPOzs7O0rWVm7XKmry4mbWzn6Gp0s7Ozs7Ozs7Ozs7Pz8/Pz8/Pz9DQ0NHR0dHR0dHS0tLT09TU1NTU1dXV1dXV1dXV1dXV1dXV1dXV1dXW1tbW1tXV1dbW1tbW1tXV1dXV1dXU1dXV1dXV1dXW1tbW1tbW1tbW1tfX19fX19jX19fY2NjY2NjY2djY2dnZ2dnZ2dnZ2dnZ2dnZ2djY2NjY2NjY2dnY2NjZ2NjY19fX19fX19bW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tXV1dXV1dXV18h/b1pTYWVeXVxPSkQ9QD8+PDc6Pjk/RD5AOTg3ODk7Ozw4OT89PTw9PD47OkE7OTs5OzxDQDw7PT5AQT49QkQ/QkM9PT8+Pz5ISUg/ddrW1tbX19fX19fX19fX2NjY2NjZ2dnZ2dnZ2dnZzs7Ozs7Ozs7Ozs/Inrym0tDQzsqgl36Cw6abr6fUz8/Pz9GfoKqwxKKMgI3FnZeVnMjQzs7Ozs7Ozs7Oz8/Pz8/Pz8/Q0NDR0dHR0dLS0tPT09TU1dXV1dXV1dXV1dXV1dbV1dXV1dXV1tbW1tbW1tbV1dXV1dXW1tbV1dXV1dXV1dXV1dXW1tbW1tbW1tbW1tbW1tfX19fX19jY2NjY2NjY2NjY2NjZ2dnZ2dna2dnZ2dnZ2dnZ2dnZ2djY2NjY2NnZ2dnZ2dnY2NjY2NfX19fX19fX19bW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1dbV1dXV1dfNiHNdWGloXl9gT0lGOkFAPj88PDk2P0I/Qjo2NDc6Ozo8Ojk+PD49PTs/PTxBPjw8Ojw8PTw6PEA9QEI+PkFCPUNDPT0+Oz9BRUtIQHDZ1tbX19fX19fX19fY2NjY2NjZ2dnZ2dnZ2dnZ2c/Pz8/Pz87Ozs7SrKWnqdXAvNLHnY+ey9PJipmq1M/Pz8/RxYeas8CeiKzWupehnbCy08/Pz8/Pz8/Pz8/Pz8/Pz8/Q0NDQ0dHS0tLS09PT1NTU1dXV1dXV1dbW1tbW1dbW1tbW1tbV1tbW1tbW1tbW1dXV1dXV1dXW1dXV1dXV1dXV1dXW1tbW1tbW1tfX19fX19fX19fX19jY2NjY2NjY2NjY2NnZ2dnZ2dnZ2tnZ2dnZ2dnZ2dnZ2dnZ2dnY2dnZ2dnZ2dnZ2dnY2NjY19fX19fX19fX19bW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbV1dXW0JB1W1tqaWFeXVNOSTxDQEE+QD46OEVAP0M6NzQ5Ojo5Ozs4Oz0/Pj49QT08P0A9Pjw8PDw8Oj1AQD8/PT5CQD9AQkA8QD0+QUVLRz9r19fX19fX19fX2NjY2NjY2NjZ2dnZ2dnZ2dnZ2tnPz8/Pz8/Pz8/QzJ2Nl6zQmpfKxZ6ynpbN1q2ZqtTPz8/Pz9anmbW7p6ubpbKZlq+zqtXQ0M/Pz8/Pz8/Pz8/Pz8/P0NDQ0dHS0tLT09PT1NTU1NXV1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbV1dXV1dXV1dXV1dXV1dXV1dXW1tbW1tbW19fX19fX19fX19fY19fY2NjY2NjY2NjY2NjZ2dnZ2dnZ2drZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2djY2NjY2NfX19fX19fW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1dXV1tKUcl5ea2tqZV1PTEc/RENDQDo9OzxCPD09OTY0Ojk5Ojo5Nzs/QDs8PUA8PEE+PD07PTw/PDo8Q0A+PTs9QD5CPkBBPkA9QD9GSUQ/ZtXX19fX19fY2NjY2NjY2NnZ2dna2tra2tra2traz8/Pz8/Pz8/P07GigJuvyaCjv8qcpYynrdiqmarUz8/Pz8/VpZm0waCdlqeQmoSdk6TV0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NHR0tLT09PT1NTU1NXV1dbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1dXV1dXV1dbW1tXW1tbW1tbV1tbW1tbX19fX19fX19fX19fX2NjY2NjY2NjY2NjY2NjY2dnZ2dnZ2dna2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2djZ2djY2NjY2NfX19fX19bW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbSk3BgXnBoZmVaUUhHQkVDQEA3Ojo8Pjo8OTc2NTk6Njo8Ozc8QEA8Ojo9Ojw/Pj08OUA8PDo6OT9APT08PUBBQz9APz5BOz9ARkpCP2LS2NfX2NjY2NjY2NjY2dnZ2dnZ2tra29vb29vb28/Pz8/Pz8/P0M6fkGyclteqo9PSrqa1mJ/Vqpmq1M/Q0NDQ1qWZstajtKuff6CphZmk1dHR0NDQ0dHQ0NDQ0NDQ0NDQ0NHR0tLT09PT1NTU1dXV1dbW1tbX19bW1tbW1tbW1tbX1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tfW1tfX19jY2NfX19fX2NjY2NjY2NjY2NnZ2dnZ2dnZ2dnZ2dna2tnZ2dnZ2dnZ2dnZ2dnZ2dnZ2djY2dnZ2dnZ2dnZ2dnZ2NjY2NjY2NjX19fX1tbW1tbW1tbW1tbW1tbX19fX19fW1tbW1tbX0pNuYFxxZGdkWlVKQENGQ0FBODs/PD07PDw3NTU4OTY4Ozo5PDo+Pzw9PTk8Pz49Ojo+OTw6Ojg+Pzw9PTw+QEFDQT48PDpCRERKRkJd0NnX19jY2NjY2NjY2dnZ2dna2trb29vb29vb29vPz8/Pz8/Pz9G9n8O31pfA09HQ0srSzZeb1KqZq9XRz9DQ0NWlmrPWydjBnIC8raaYr9bR0dHR0dHR0dHR0NDR0dHR0dHR0tLT09PU1NTV1dXV1tbW1tfX19fX19bW1tbW1tfX19fW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW19fX19fY2NjY2NjY2NjY2NjY2djZ2dnZ2dnZ2dnZ2dnZ2drZ2tnZ2dnZ2dnZ2dnZ2dnZ2djY2NjY2NjZ2dnZ2dnZ2dnZ2dnY2NjY2NjY2NfX19fX19fX19fW1tfX1tbX19fX19fX19fX19bW19GRbF1cb2doYl1PRj9ISEdFQDw8Pj48PT08NzU2Ojk2OTs6Ojs4QD86PDw5PD49Ozs6Pzk/Ojs5PT49Pjw7PTxAQ0I/Pz47Q0ZGR0hEWc3a2NjY2NjZ2dnZ2dnZ2dna2trb29vb29vb29vb0NDQz8/Pz8/Pz5V+e6WS1KKa08ySl6ObodirmavV0pem09DVpZm0yY2hn5+ZqJaYm7vV0dHR0dHR0dHR0dHR0dHR0tLS0tLS09PU1NTV1dXV1tbW19fX19fX19fX19fX19fX19fX1tbW1tbW1tbW1tbX19bW1tbW1tbW1tbW1tbW1tbW1tbW1tfX19fY2NjY2NjY2NjY2NjY2dnZ2dnZ2dnZ2dnZ2dnZ2tra2tra2tnZ2dnZ2dnZ2dnZ2djY2NjY2NjZ2dnZ2tnZ2dnZ2dnZ2djY2NjY2NjY2NjX19fX19fX19fX19fX19fX19fX19fX19fX1tfPjGRWXnBrXGBgTkVITUlJT0M+OkI9PUBDOzU1Nzw6Nzo7Ojo7OT09OTo6OT0+Pz07OT47PDo8Ozk+PD47PD0+QENCPz5BPEFDR0ZGRVXJ29jY2NnZ2dnZ2dnZ2dra2tvb29vb29zc3Nzc3NDQ0NDQ0M/Pz9DR1aeZrcmjqL7KnbGdo7XZqZup2LirocfS1qOas8KkqqOhw6CrpJzR09LS0tLS0tLS0tLR0dHS0tLT0tPT09PU1NTV1dbW1tbX19fX19fX19fX19fX19fX19fX19bW1tbW1tfX19fX19fW1tbW1tbW1tbX19fW1tbW1tbW1tbX19fX2NjY2NjY2NnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dra2tra2tra2trZ2dnZ2dnZ2dnZ2djY2NjY2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnY2dnY2NjY2NjX19fX19fX19fX19fX19fY2NfX19fX19fYzYZdV2JvZE9dVEtIRlNRS0xAPj1EPD9DRj01NTc7OTY6Ozo8PTo7Pzo6OTg6PT0/Pjs/Oz49Ojs5Pjs9PD0+QURCQD8+PzxAQUVHRURSxdvY2dnZ2dnZ2dnZ2tra2tvb29vb3Nzc3Nzc3NzQ0NDQ0NDQ0NDQ0NO5gL3Tm5bP1LWLkZ/T1LyBu9TOlKDT0dW1gsPYqY+QrNfCj4281dLS0tLS0tLS0tLS0tLS0tLT09PT09PU1NXV1dbW1tfX19fX19fY2NjY19fX19fX19fX19fX19fW1tbX19fX19fW1tbW1tbW1tbW19fX1tbW1tbW1tbX19fX19jY2NjY2NnZ2dnZ2dnZ2dnZ2tnZ2tra2tra2tra29ra2tra2tnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2NjY2NjX19fX19fX19fY2NjY2NjY2NjY2NfX2ct+WlVqaltMX01KTEpVTEZCPDw/R0VHS0g9NjU3Ojk3OTo7Ojw9OT45OTo4Oz0+PkE+PTk8PDo9Pj46PTk5Oj9FQUA+PT8/QkBHRURFUMHc2dnZ2dnZ2dna2trb29vb29vb3Nzc3Nzc3dzc0NDQ0NDQ0NDQ0NDQ0cHR0crI0tDUxLjS0tHSwtLQ08fM0tHR0cLU0tXBv9bS1cXE1dLS0tLS09PT09PT09LS0tPT09PU1NTU1NXV1dbW1tfX19fX19fX2NjY2NjX19fX2NfX19fX19fX19fX19fX19fX1tbW1tbW1tbW1tfX1tbW1tbW1tbW19fX19fY2NjY2NjY2dnZ2dnZ2dnZ2dra2tra2tra2tra29va2tra2tra2dnZ2dna2tnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dna2tnZ2dnZ2dnZ2djY2NjX19fX19fY2NjY2NjY2NjY2NjY19rHd1xSZ2laTlpOTFBRV0VKPz89P0FFTExBPjc3NTs4ODk5Ojs8Pjw+ODo6OTs+P0A9Pj46NTo6Oz0/Ojs5Ojw+QkJAPz8/P0FCR0RDRE683dnZ2dnZ2dna2tvb29vb29vb3Nzc3Nzc3d3d3dDR0dDQ0NDQ0NDQ0NDS0NDR0dDQ0dPU0dHR0dPR0dHS0tHR0tLU0tLS1NXT09PU1NLS0tPT09PT09PT09PT09PT09PU1NTU1dXV1dbW1tfX19fX2NjY2NjY2NjY2NfX19jY19fX19fX19fX19fX19fX19fX1tbW1tbW1tbX19bW1tbW1tbW1tfX19fX2NjY2NjY2NnZ2dna2tra2tra2tra2tra2tra2tvb2tra2tra2trZ2tra2tra2tra2tra2tnZ2dnZ2dnZ2dnZ2trZ2tra29ra2trZ2dnZ2dnZ2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjbwXNYVWlrU0xSTlBSWVRGSTw+Qz9BQkVKPT43ODY5Nzc4OTk7Oz0/QDw9ODk7Ozs/Pjw8OTU6PT47OTk7PD8/P0JCQT1BPUBBQkZCQkJLtd7Z2dra2tra2tvb29vb29vc3Nzc3Nzd3d3d3d3R0dHR0dHR0dHR0dDQ0NDQ0NDQ0dHR0dHR0dHR0dHR0dHS0tLS0tLS0tPT09PT09PT09PT09PT09TU1NPT1NTU1NTU1NXV1dXV1dXW1tbX19fX2NjY2NjY2NjY2NjY19fY2NjX19fX19fX19fX19fX19fX19fX19fW1tbX19fX1tbW1tbW1tbX19fX19jY2NjY2NnZ2dna2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tnZ2dnZ2dnZ2NjY2NjY2NnZ2dnZ2dnZ2NjY2NjY3LxvVFRsbExLUkpUUlVLRkQ6PkdEREFERjw/ODk6OTY5OTo3PD07PkA9PTc5Ojs5Pjs5OTY2Oj1AQT47PDk6Pj9DQT4/Qj0+QkNFQkFCSrDe2dra2tvb29vb29vb29vc3Nzc3Nzd3d3d3d3d0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0tLS0tLS0tLS0tLS0tLS0tPT09PT09PT09PT09PT1NTU1NTU1NTU1NTU1dXV1dXV1tbW1tbW19fX19jY2NjY2NjY2NjY2NjY2NjY2NjY19fX19fX19fX19fX19fX19fX19fX19fX19fW1tbW1tfW19fX19jY2NjY2NjZ2dnZ2dra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2trZ2dnZ2dnZ2djZ2dnZ2dnZ2dnZ2dnZ2dnY2Ny2a1NbcGtLVVdSXFFXSEQ+PEJKRT1ISj89PDc4ODo2OTg5Njs+PD1APDw1OTk8Oj87OTk0ODw9PUFBPD47Ojw+QD89PkE9PUNGR0I/Qkmq39ra29vb29vb29vb3Nzc3Nzc3N3d3d3d3d3d3dHR0dHR0dHR0dHR0dHR0dHR0dHS0M/U0M7P0tLT0tLS0tLS0tLS0tPT09TU1NTU1NTU1NTU1NTU1NTU1NTU1NTV1dXV1dXV1dbW1tbW19fX19fY2NjY2NjY2NjY2NjY2NjY2NjY2NjX19fX19fX19jY2NfX19fX19fX19fX19fX19fX19fX19fX19jY2NjY2NjY2dnZ2dra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tvb29va2tra2tra2tra2tra2tra2tnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dndsGRTYXJfT1pUV19RUkdCPUVJS0FBTEQ/Pzs5ODg5Mzg2ODY5Pj0+Pz06Njo7Pjs9PTo5Njg6PTtAQDxAPz0/P0I+PD48PEJFSElCPkNJpODa29vb29vb3Nzc3Nzc3Nzc3N3d3d3d3d3d3t7S0tLS0tLS0tLS0dHR0dHR0dPT0bm7zLqbnLrQyNPT0tLS09PT09PT09PU1NTU1NTU1NTU1NTU1dXV1dXV1dXV1dXV1dbW1tbW1tbX19fX19fY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjX19fX19fX19fX19fX19fX19fX19jY2NjY2NjY2NjZ2dra2tra2tra2tra2tra2tra2tra2tra29va2tra29va2tvb2tra2tra2tra2tra2trb29vb29va2tra2tra2tra2tra2tra2tra2tnZ2dnZ2trZ2dnZ2dnZ2dnZ2dnZ3qpfVWBuW1VZUVpeT0xHQ0ZNSUZEREk7QUE7PDg4NjU4Njk4Nzw/QT89Ojc8Pz48Pz87OjY4OD09QEE9QD5BQD1AOjs6Pj1BRUdKQkBDR57h29vb29vc3Nzc3Nzc3Nzc3d3d3d3d3d7e3t7e0tLS0tLS0tLS0tLS0tLS0tO+wMqaoKKViJGeqpOpz9TT09PT09PT09PU1NTU1NTU1NTU1NTV1dXV1dXV1dXV1dXV1tbW1tbW1tbX19fX19fY2NjY2NnZ2dnZ2dnZ2dnZ2djY2djY2NjY2NjY2NjY2NjY2NjY2NjX19fX19fX19fX19fX19fX19fY2NjY2NjY2NjZ2dna2tra2tra2tra2tra2tra2tra29vb29vb29vb29vb29vb29vb29ra2tra2tra2tra2tvb29vb29va29vb29vb29va2tra2tra2tra2tra2tra2trZ2dnZ2dnZ2dnZ2d6iXFVeblheXU5aUFROQ0NMSUlJRkpEPEJBPDs4NzY3OTc3OTk9P0E/PDo5QD88PkI/Ojg3NzY9P0BAPUBBPz88PTs7OD48P0VJSEE/Q0aX4dvb29zc3Nzc3Nzc3N3d3d3d3d3d3t7e3t7e3tPT09PT0tLS0tLS0tLS0tTIlZyum5m1iX2TjIKBhMTV09PT09PT09PU1NTU1dXV1dXV1dXV1dXV1dXV1dXV1tbW1tbW1tbW1tfX19fX19fX2NjY2NjY2dnZ2dnZ2dnZ2dnZ2dnZ2NjY2NjY2NjY2NjY2NjY2NjY2NfX19fX19fX19fX19fX19fX2NjY2NjY2NjY2dnZ2dnZ2dna2tra2tra2tra2tra29vb29vb29vb29vb29vb29vb29vb2tra2tra2tra2tvb29vb29vb2tvb29vb29vb2tra2tra2tra2tra2tra2tra2tra2tra2tnZ2dndmlpYYW5ZYVdPV01QRUJETElNS0ZJRT5CRDk4ODY3OTc1Njk4PT1BPjo4OT4+PD9APzw1Njc2PD4/PjtAQEA/Pj4/Pjs/PkFCRkdCQENIkeLb29zc3Nzc3d3d3d3d3d3d3d7e3t7e3t7f39/U09PT09PT09PT09LS0tLTz6h+kayPko6MhoCIiYSQo8rU09PT09PU1NTU1dXV1dXV1dXV1dXV1dbW1tbW1tbW1tbW1tbW19fX19fX19fX2NjY2NjY2dnZ2dnZ2dnZ2dnZ2dnZ2dnY2NjY2NjY19jY2NjY2NjY2NjY2NjX19fX19fX19fX19fY2NjY2NjY2NjY2NnZ2dnZ2dna2tra2tra2tra2tra29vb29vb29vb29vb29vb29vb29vb29ra2tra2tra2tvb29vb29vb29vb29vb29vb29va2tra2tra2tra2tra29vb29ra2tra2tra2tna3JJaWWNuWlpSVV5QTDxAR05IUklIRT48SEY4OTc1Nzg3NTg5ODs+Pj07ODlBPj1AP0E+NzU5Njs+QUI/P0BAQUI/Pj8+QUBEQUZIQj9FSozi3Nzc3Nzc3d3d3d3d3d3e3t7e3t7f39/f39/f1NTU09PT09PT09PT09PWtaWaiIuQhYCFi4iBg4qLf4bC1tTU1NTU1NTV1dXV1dXV1dXV1dXW1tbW1tbW1tbX19fX19fX19fX2NjY2NjY2NjY2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2djY2NjY2NjY2NjY2NjY2NjY2NjY2NjX19fX19fX19fY2NjY2NjY2NjY2dnZ2dna2dra2tra2tra2tra2tra2tvb29vb29vb29vb29vb29vb29vb29vb29ra2tra2trb29vb29vb29vb29vb29vb29vb29vb2tra2tra2tra29vb29vb29vb29vb2tra29uIWltnalxYTFpfVkg6TEhMSkpDRUVDQExINzo3Njc4ODU4Nzg5PDw7Ozk4QD89Pj8/PDY3PDQ3P0JCQUBAPz8/QT09P0A+QEBGRT09REuI4tzc3Nzd3d3d3d7e3t7e3t7e3t/f39/f39/f39TU1NTU1NPT09PT09PUxZKCg4WGfYGCfXx5foGCg36k29bU1NTU1NTV1dXV1dXV1tbV1tbW1tbW1tfX19fX19fX19fX19fX19jY2NjY2NjZ2dnZ2dnZ2dna2tnZ2dnZ2dnZ2dnY2NnY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjX19fX19fY2NjY2NjY2NjY2dnZ2dna2tra2tra2tra2tra29vb29vb29vb29vc3Nzc3Nvb29vb29vb29vb29vb2tra2tra29vb29zb29zb29vb29vb29vb29vb29vb29va2tvb29vb29vb29vb29vb29vb2tvZgFpebWhaU0ldW1hKRE1ISlNMR0ZBQD9KQjg7NjY5OTc1ODY4Ozo7Ojw5OD09O0A9Ozo2NTw3Oz1CQEFBPD49QEE9PEA/Pz5CREU+PERLg+Lc3d3d3d3d3t7e3t7e3t7f39/f39/f39/f39/V1dTU1NTU1NPT09PT2LKEkKh9g3l2hIh/e3d5gn5+i67A1dTU1NXV1dXV1tbW1tbW1tbW1tbW1tfX19fX19fY2NjY2NjY2NjY2NjY2NjZ2dnZ2dnZ2dna2trZ2dnZ2dnZ2dnY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2dnZ2dna2tra2tra2trb2tra2tvb29vb29vb29vc3Nzc3Nzc29vb29vb29vb29vb29va2trb29vb29zc3Nzc3Nvb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vc1nlcWmxmWFJPYFFSQUhHSkZYTEZAQENDSz87Ozc4ODc2NTc2ODo5PDw6PTs/PTs9Pjw7ODg8OT0/QkFCQzw8P0FCPj1BQkNCREVDQDtDTH3h3d3d3d3e3t7e3t7e39/f39/f39/f39/g4ODg1dXV1NXU1NTU1NPU0ruen3WKeXuIgICChYGDcnOAhYOMrNfV1NXV1dXW1tbW1tbW1tbW1tbW19fX19fX2NjY2NjY2NjY2NjZ2dnZ2dnZ2dnY2NnZ2dna2tra2trZ2dnZ2dnZ2djY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2dnZ2dna2tra2tra29vb29ra2trb3Nzc3Nzc29zc3Nzc3Nzc3Nzb29vb29vb29vb29rb29vb29vb29zc3Nzc3Nzc3Nvb29zc3Nzc3Nvb29vb29vb29vb29vc3Nzc3Nzc3Nvb29vb3dByXV9wZVdLUGNPS0JHQ0pIS0ZBPEE9SFBBOjo3Nzg3Njc4Nzw6OD09PD47QD88Pz07Ojs5Ojk8QEJAQkNAPUFAPz1AQkNDQUBAP0A7RU144N3d3d7e3t/f39/f39/f39/f3+Dg4ODg4ODg4NXV1dXV1dXV1NXU18h4i4V8goh6g4SBfoKCc2l0hYuGkJ3U1tXU1dbW1tbW1tbW1tbW19fX19fX19jY2NjY2NjY2NnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dra2tra2tra2dnZ2dnZ2dnY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2dnZ2dna2tra2tra2tra2tvb2tvb3Nzc3Nzc3Nvc3Nzc3Nzc3Nzc29zb29vb29vb29vb29vb29vb29vc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc29vb297KalxjcWVST1heSz9HTElPS0VAPkFCP0lPPjk6NzY7NzY6Ozc7Ojg6PDw+Oz09Oz48Ojs4OTo4OUFCQkFAQDtAQj06PkFCQz8+PT4/PUZOdN/e3t7e3t7f39/f39/f4ODg4ODg4ODg4ODg4OHV1dXV1dXV1dXV1s6dhpl+f5OTin+CgXx9gnNxm4mAgoOJwNnat7TQ19bW1tbX19fX19fX19fX2NjY2NjY2NjY2NjZ2dnZ2dnZ2dnZ2tnZ2dnZ2dra2tra2tra2trZ2dnZ2dnZ2dnZ2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NnZ2dna2tra2tra2tra2tra29vb3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nvb29vb29vb29vb29vb29vc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3NvfwGNaW21gVlBTU0pETEhNSEk8PkFEQ0ZORDw8OTc5OjY4Ozk3PDk4OTw9OzlAPjpBPzw3NTc7ODpAQUVBPz45PUI/Oz1CQkI6Pj07PT5GTnHe3t7e3t/f39/f39/g4ODg4ODg4ODg4OHh4eHh1tbW1tbW1tbV1tjLioCHhYOXjHh7e3lvfYF1a3ebdHZ7eInHxpiMrdjZ19fX19fX19fY2NjY2NjY2NjY2NjY2NjY2dnZ2drZ2dna2tra2tra2tra2tra2tra2tra2dnZ2dnZ2dnZ2dnZ2dnZ2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NnZ2dnZ2dnZ2dna2tra2tra2tra2tra29vb3Nzc3dzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nvb29vb29zb29vb3Nzc3Nzc3Nzd3dzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3d3d3d3d3Nzc3Nzc4LdjV1lrYlJNVVFMSktGS0ZDQD5CQT9FTT4+PTg5OTo3OTo3NT03Nzo+PDs7Qjw5Pz05NjY4PTk6QEJGQD49PEBCREA9QD9DO0A9PD4/Rk9t3N/e3t/f3+Dg4ODg4ODg4ODg4OHh4eHh4eHh4dbW1tbW1tbW1tfVrYZ6d32rn3l4entzdH+Dfm9xe3l6c3t2k4qFgImkzdnY19fX2NjY2NjY2NjY2NjY2NjY2NjY2NnZ2dna2tna2tra2tra2tra2tra2tra2tra2tnZ2dnZ2dnZ2dnZ2dnZ2dnZ2djY2NjY2NjY2NjY2NjY2NjY2NjY2dnZ2dnZ2dnZ2dra2tra2tra2tra29vb29vc3Nzc3N3d3d3c3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc29vb29vc3Nzb3Nzc3Nzc3N3d3d3d3d3d3dzc3Nzc3Nzd3d3c3Nzc3Nzc3N3d3d3d3d3d3d3d3dzc3OGtYVtebGJSTVZMTUdLS0RGQkI7QT08RUxCQT44Ojk6Nzc5NjY6NTs+QDs9Oz89PD89Ojk5Ojw5PEVDRkA/PkBDQkQ9OT0/QT1CPz1APkdPadvf3t/f3+Dg4ODg4ODh4eHh4eHh4eHh4eHi4uLW1tbW1tbW1tfQmH+Qh4N9eoN2e3Vzenl6kKqmd3JyfoeHh4CAfoKEhJHJzNnX19jY2NjY2NjY2NjY2NjY2NjY2NnZ2dnZ2tra2tra2tra2tra29va2tra2tra2tra2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2djZ2dnZ2dnZ2djY2NnZ2dnZ2dnZ2dnZ2tra2tra2tra2tra29vb29vb3Nzc3N3d3d3d3d3d3d3d3d3d3d3c3Nzc3Nzc3Nzb29vb3Nzc3Nzc3Nzc3Nzd3d3d3d3d3d3d3dzc3N3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3NzhpV9UYm1iUE9TSUhHRkpJSUJBPkJCPEVFREA+ODo4Ozc3Ojc4ODY+Pz07PDk9PDo+PTs6Njc7NjpEQUY+Pz8/PkNBPzs9PT47REM/PjxIT2fZ4N/f3+Dg4ODg4eHh4eHh4eHh4eLi4uLi4uLi1tbW1tbW19jYyH52doN+fnR2eIaCenl1d5yhu6GEgoCAfoeKinx/gYaMnKjO2NjY2NjY2NjY2djY2NjZ2djY2NjY2dnZ2dra2tra2trb29rb29rb2tra2tra2tra2tnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dna2tra2tra2tra2tra2trb29vb29zc3Nzc3N3d3d3d3d3d3d3d3d3d3d3d3dzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3e3t7e3t7e3d3d3d3c35pbT2drXFBRUElDT0pLR0xHSkJAP0JHREBBPDg8ODg1ODk3Njc3QEA/Ozw5Pj04PTw8Ojc4PTk/RENGPkE/QkBDPzw6Pj0/PkVEPz07S1Fj1+Hf4ODg4ODh4eHh4eHh4uLi4uLi4uLi4uLj49bW1tbW19XB3LRueHJze3B6eXaFiIR7eH2AgZiljH98fnuRhZaLhoGDgY6Rvd3Z2NjY2NjZ2dnZ2dnZ2dnZ2dnY2dnZ2dna2tra2trb29va2tva2tra2trb29ra2tra2tnZ2dnZ2dnZ2dnZ2dna2trZ2dnZ2dra2tra2tnZ2dnZ2dna2tra2tra2tra2tra2tra2trb29vc3Nzc3Nzc3N3d3d3d3d3d3d3d3d3d3d3d3d3d3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3e3t7e3t7e3t7e3t7e3t7e3t3d3d6NWFdobllQUUtISlNJTUhNSUtBQz9DRkJBRDo6PDg2NDg4NzY2Nj8+Pjo8OTw7Oj09PDw4Ozw8RERERT4/PkI+Qj84PT8/Q0NCQEE+O0xUY9Xh3+Dg4OHh4eHh4eLi4uLi4uLi4uLi4uPj4+PW1tbW1teslLZ6eHJvd5V7dHuLgHh1bn6Fg3t/hYhyfH2bnI6JioJ+g32Hk5rH1NjY2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dna2tra2trb29vb29vb29vb2tra2tra2tra2tra2tnZ2dnZ2dnZ2dna2tra2tra2tra2tra2tra2tra2tra2tra2trb2tra2tra2tra2trb29vc3Nzc3Nzc3Nzd3d3d3d3d3d3d3d3d3d3d3d3d3d3c3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3N3d3d3d3d3d3d3d3d3d3d3d3d3e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3d7Zf1lgaGxcUUtHR09LTk5PTURGQkg/Q0hEREA6Ozs4NzU3Nzc4NThAPkA7PDk8Ozw+Ojk7OTk7OUZERUI8QD4/PEBDOz5AP0A/Qj8+OjtKVWPV4eDg4eHh4eHi4uLi4uLi4uLi4uPj4+Pj4+Pj1tbX19vKhYR3cXJubniVhHt4hH95dnB4c3eLkY6CdnN9ioaId3d1d4ODfIiIk8Pb2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dra2trb2tvb29vb29vb29vb29rb2tra2tra2tra2tra2tnZ2dnZ2dna2tra2tra2tra2trb2tra2tra2tra2tra2trb29vb29ra2trb29vb29vb3Nzc3Nzc3Nzd3d3d3d3d3d3d3d3d3d3d3d7e3d3d3d3c3Nzc3Nzc3Nzc3Nzc3Nzc3d3d3d3d3d3d3d3d3d3d3d3d3d7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7f0nVZaGlqVk5KSE1OR01EUElGSD9FPUZMREM+Ozs8OTc3OTY2OTU4Pj4/PTs8QDs9PDo3Ozc5OThHREVCPUE9Qj8+QDw/QUE/QEJAPjs8S1Ri1OLg4eHh4eLi4uLi4uLi4+Pj4+Pj4+Pj4+Pj49fX19fEknuJf29sbnV2foSBg4qGfnVybWVtiIaKjoR7c4OHint4e4OPj4GEioqxztrZ2dnZ2dnZ2dna2tra2tra2tra2trb29vb29zc3Nzb29vb29vb29va2tra2tra2tra2tra2tra2tra2tra2tra2tra2tvb29va2tra2tra2tvb2tvb29vb29vb29vb29vb29vb29zc3Nzc3Nzc3d3d3d3d3d3d3d3d3d3d3t7e3t3d3d3d3d3d3d3d3dzc3Nzc3Nzc3d3d3d3d3d3e3t7e3t7e3t7e3t7e3t7e3t7e3t7f39/f39/f39/f39/f3t7e4clsW2pqalNOR0hOT0VIRk1JSUA7RD5ISUA9PDo6Ojg2ODo3Nzk0OD08PT07ODw8PDw4Njc4OTo6RUJFQT9APEI/Q0M+PkNEQUBAP0A8PUtRYdPj4OHh4uLi4uLi4uPj4+Pj4+Pj4+Pj4+Pj5OTX19fZqXaFfnx3bHB3eXh8jH2KhYB3anN0d3p9bot7fnl6foR/gIGDfnh8foeGlrbT2tnZ2dra2tra2tra2tra2tra2tvb29vb3Nzc3Nzc3Nvb29vb29vb29ra2tra2tra2tra2tra2tra2tra2tra29ra29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb3Nzc3Nzc3Nzc3d3d3d3d3d3d3d3d3d3d3d7e3t7d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3t7e3t7e3t7e3t7e3t7e3t7e3t7e39/f39/f39/f39/f39/f39/e3uO9amFpa2lRTkZNTEtKWE1OR0FAQE9BRD9AOzw4OTk5Njg2NjY4NDs+PD07OTY6Ojk6OTU4OTg5OkJERj8+Pj5AQEBCPzxBQD88Pj9BOT5KT17S4+Hh4eLi4uLi4+Pj4+Pj4+Pj4+Pj4+Tk5OTk19fX2sqKhIB5c29tcXN1d4CUeHaAfHWHhXd1cnWgmXp7d3Z5doR0bWxue3iAmouTu9za2tra2tra2trb29vb29vb29vb29zc3Nzc3Nzc3Nzc3Nzc29vb29vb2tra2tra2tra2tra2tra2tra2tra29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vc3Nzc3Nzc3Nzc3d3d3d3d3d3d3d3d3d3d3d3e3t7e3t3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3t7e3t7e3t7e3t7e3t7e3t7e3t/f39/f39/f39/f39/f39/f39/f397js2lpbmloUFBPTExPUk9LU0Y/RURERD48PDg7ODc5OTU2ODY2NzM6Pjs+PTc6Pjk5OTk2Ojo4NzxDRUc/Pzs/PkA9PkE9Oz0+OUFAQDhBTlFc0OTh4eLi4uLj4+Pj4+Pj4+Pj4+Pk5OTk5OTk5NjY2NjauY6AenZ1bmpveHCBfWt0cnZ3hIV5h4d5lY55eXp1d3pza298gHx2fYh8gLLe2tra29vb29vb29vb29vc3Nzc3Nzc3Nzc3dzc3Nzc3Nzc3Nzb29vb29rb29vb29ra2tra2tra2tra29va29vb29vb29vb29zc3Nzb29vb29vb29vb29vc3Nvb3Nzc3Nzc3Nzc3Nzc3Nzc3d3d3d3d3t7e3t7e3d7e3t3d3t7e3t7e3t7d3d3d3d3d3d3d3d3d3d3d3d3d3t7e3t7e3t7e3t7f39/f39/f39/f39/f39/f39/f4ODg4ODg4N/f39/f4qpqa2hrZFNQT0ZQVFJOSFJLPkREQ0I7Ozk6Ojg2Nzg1NjY4ODg0Oz88Pzw5PDw3Ozo6Nzo6Nzo9Q0JDPUE+Pzw5PT5BQDs8PDtFQD47Q05TXNDk4eLi4uLj4+Pj4+Pj4+Pj5OTk5OTk5OTk5OTY2NjZ1p5vdntveHh2cG50d3BwdHBzb36Jc3qGhY2EenNtcoB6hn1vg5OBdnx9g4a13drb29zc29vc3Nzc3Nzc3Nzc3Nzc3Nzc3d3d3Nzc3Nzc3Nzc3Nzb29vb29vb29vb29ra2tra2tvb29vb29vb3Nzc3Nzc3Nzc3Nzc3Nzc3Nvb29vb29vc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzd3d3d3d3d3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3d3d3d3d3d7e3t7e3t7e3t7e3t7f39/f39/f39/f39/f39/f39/g4ODg4ODg4ODg4ODg4N/f3+KgbWhma2ZVVlJHUFFOS0xMRUJIRUc9OD08Ojo3Nzg2Nzc2NTY3NDg+PD09Ojg6OD46Ozc4Nzc6Oj5DRDtDQj49OD1AQUM/Pjw+RTw+PUJNUF/S4+Hi4uLj4+Pj4+Pj4+Pk5OTk5OTk5OTk5OTk2NjY3MB2doCCfnp4eHBsdXlya399bHNvdGdoaYB/aWl4c2d+iYl4cIKGe3d9foWKvd3b3Nzc3Nzc3Nzc3Nzc3Nzc3d3c3Nzc3N3d3dzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nvb29vb29vb29vb3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzd3d3d3d3d3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7f39/f39/f39/f39/f39/f4ODg4ODg4ODg4ODg4ODg4ODg4ODflGttZm5mU1NJUFlUTEhGTkZGRUJGPTs+PDs5Nzc4NTc5NjQ1NzU4PDs9Pjo6OztAOTs7ODc6OTlAQkE8QUE/Pzk/QEJFQ0FAQEM7Oz1ES01g1uTi4uLi4+Pj4+Pj4+Pk5OTk5OTk5OTk5OTk5NnZ2tmYc3uqhJaCcnR1dn14aGx8d2h4d25rcHR5gIJ3dHyBhIJ9c3CAin94gn95g8je3Nzc3Nzc3Nzc3Nzd3d3d3d3d3d3d3d3d3N3d3dzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nvb29zc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3N3d3d3d3d3d3d3d3d3d3d3d3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e39/f39/f39/f4N/f39/f3+Dg4ODg4ODg4ODg4ODg4ODg4ODg4ODh24tubWdzY1lRTVVbV0hDSUZOS0dCRD8/Qjo7OjY2NzU2NzY0ODc2Ozw7Pj86PDk8Qjg3OTo6Ojk6QUFCQUJDQEE+PT9CQ0NEQUJGOTg9REpOYtjk4uLi4+Pj4+Pj5OTk5OTk5OTk5OTk5OTk5OXZ2drcqHGCtXiRfnNsem6EgXaCfWtoan+DeHZ8dX2FhXRmcHl9d316gIqFe318foC03tzc3Nzc3N3d3d3d3d3d3d3d3d3d3d3d3dzd3d3d3dzc3N3c3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzd3Nzd3d3d3d3d3Nzc3Nzc3Nzc3Nzc3N3d3d3d3d3d3d3d3d3d3d3d3d3d3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e397e3t7e39/f39/f39/f39/g4ODg4ODg4ODg4ODg4ODg4ODg4ODg4eDg4ODg4ODg4tiFb3FrdWFWT1VVXE9ETUY+SkdKRUQ8P0I6PDk4Njg0NTY3NDc2NDk7Ozw7OD47PEE4ODo9OD04Oj09QEBAP0FCP0A+QENCQ0FBRTc2O0RMTmPa5OLi4+Pj4+Pj5OTk5OTk5OTk5OTk5OTk5OXl29ra3Z5sbnNxhY1ybXBuf391hH5rcnZ2enN4gXhzbnVwbWt2fHmFiIB/f392coODsd/c3Nzc3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3Nzd3d3c3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3N3d3d3d3d3d3d3d3d3d3d3d3d3c3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e39/f39/f39/f39/f39/f39/f39/f39/f39/f4ODg4ODg4ODg4ODg4ODg4ODg4OHh4eDg4eHh4eHh4eHh4OLXhW1xb3ZeUldTWlpRSkhDQFFAQkQ8OT9BOjw5NzU3NDU2NjQ3NTY9PDo9PTk+OjxAODo6PDY7OTs+PUJCQjtBQkBDQEBEREM8PUA3OjxFS01l3OPi4uPj4+Pj5OTk5OTk5OTk5OTk5OXl5eXl5dPOxsB+cWxveHt2b3VuanNzbZKGeG50dG5vdIZ/b2twboJ0bXZyfY2DdnF/d3mKgabf3Nzc3d3d3d3d3d3e3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3dzc3d3d3dzc3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3t7e3t7e3t7e3t7e3t/f3t7e3t7f39/f39/f39/f39/f39/f39/f39/f39/f39/f4ODg4ODg4ODg4ODg4ODg4ODg4ODg4eHh4eHh4eHh4eHh4eHh4eHi1oZucG1xYFJZUFdfWUpMTElSP0Q9OTtCRjs6OTc0NTY1NzU0NjY2Pj07Pz45PTk7Pjg9Ozo0ODtAQENCQ0FCRkE/Q0BBQkREOz0+OTs8QkxNZODl4+Pk5OTj4+Tk5OTk5OTk5OTk5eXl5eXl5eW5t7Woc3JscHd6dHd4bXFydXd/hHRyc2xsa3F8bnBudGuBf3GAd32Eg355gHNygYqg2d3c3d3d3d3d3d7e3t3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3e3t7e3t7e3t7d3d3d3t7e3t7e3t7e3t7f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f4ODg4ODg4ODg4ODg4ODg4ODg4OHh4eHh4eHh4eHh4eHh4eHh4eHh49WHcWxqbF5YWlVXYFZWUE9QTD1BOjs8RkE4Ojg3MzY1Njk2NTg1Nz89Oz8+OT04Ozw5PTs7NTo9Q0JCPENDREREQUE/PkJDQzw9Pjg5PENLS2PN0dnh1sjY4+Tk5OTk5OTk5OTk5eXl5eXl5eXltbW2q3J5cm59f3Z1d2hqaGlwb3Zta2tnZWZxdG15gG5teXd2iHhxa2podXV5dHV/wd/c3d3d3d3d3d3e3t7e3d3d3d7d3d3d3d3d3d3d3t7e3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3e3t7e3t7e3t3d3d3d3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f4ODg39/g4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4OHh4eHh4eHh4eHh4eHh4eHi4uHh4ePVhnFwY2lhV1NZV19MUk9STUtAPjg5O0E+ODc5NjQ3Njc6NjY2NDk+Pzo8Pzo/OTo6Nzo9PDk5PEFBPTtBQ0VDRkA+Pj5BRUQ+QEE3OD5GSEpesrW4wbm1u8jg5eXl5OTl5OXl5+fn5+fm5ebm5ra2tbWOfX5weoR1cnZnYmNlbGtyb2ZpbHZtd4Z9hXlsbHd4a3ZwfH14c3V5fHd2h7ng3d3d3d3d3d7e3t7e3t7d3t7e3t7d3d3d3d3d3t7e3t7d3t7e3t7e3t3d3d3d3d3d3d7e3t7e3t7e3t7d3d3d3d3d3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4OHh4eHh4eHh4eLi4uLi4uLi4uLi4eHj1Yd1bl5uY1pUU1hXS1NLSk1SR0E4Ozs+PDk4NzU2NTY2OTY4NjY5Pzw6PT07Pzo7Ozk8PDs5Oj4+Pjs8PUFEQkNBQEBBP0JDPDw9Nzs+REVKXrG1tLW2t7e2y9rJ3uXl3eDi3tXU1tPU4OPg39+2treuh3t/bnmNenJ1bWNobGxtaXR4enF5enqIh4N6aWh9cWRvcXyGgX55e318e4an2t7d3d3d3d7e3t7e3t7e3t7e3t7e3d3d3d3d3t7e3t7e3t7e3t7e3t7e3t3e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t/f39/e3t7e3t7f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4OHh4eHh4eHh4eLi4uLi4uLi4uLi4uHh49aGdmxhb19dV1lcWlJQSEpXTEVHPUA9Ozs9OTY0NjU1NTg2NzY3OD87OT09PDw5OTw6Pjw6OTg+Qjs7Pj5AREBDRUFAQD0/QDw9PTU5PEJHRl2xtbW2uLm5ubq9uMPT0r3BwcC6u7y6u8TMxb/Dt7e3hGl1gX1ndYd5Z3Vxa2t5eHB3fH15bWl3e3h3bml1j4FwbHl4d3d9gXuGgnmAoNze3d3d3t7e3t7e3t7e3t7e3t7e3t3d3d3d3d7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t/f39/f3t7e3t/f39/f39/f39/f39/f39/f39/f39/f39/f39/f4ODg4ODg39/f39/f39/f3+Dg4N/f4ODg4ODg4ODg4ODg4ODg4ODg4ODh4OHh4eHh4eHh4eHh4eHh4eHh4uLi4uLi4uLi4uLi4uLi4ePXhXJrZ3RhW1hYX15TVVVRVUpMRj9JRDs5PTY2NDc3NTc4Nzc3ODk8PDo+PDg8Oj0+OTs8OTs5P0E8PT9DP0FARUJCQTw9Q0A6Pjw1NDlER0dasbW1tre5ubm5ubm3ubm4uLm5urq6urm5urm6u7e3uX9ucHN6b3B/eXNuc3Vsc3Z4cXFwb2tvcX6Bc2mHhIF9dHOHdW11hYmBgHJ2hafd3d3d3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7f39/f3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f4ODg4ODg4ODg39/f3+Dg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4eDg4eHh4eHh4eHh4eHh4eHh4eHh4eHh4uLi4uLi4uLi4uLi4uLi4uHj14lxa2xyW1dXXWBUUVVUUFJPSkNATUE9Ozk2NTM0NjQ2ODc3Nzk6Pjs8Pjs5PDo8PDk8PTw7PT0+PUNEREBDQkE/QD48PkE8OD06NjY6QkpIWLG1tLa2uLm5uLi5uLe3uLi5urq5ubi4uLi6uru3uKx7cnhxf3ZzfnBsbXpyZ29sbW50cHt3d3Jyd3pvhpJ2f3x8enZ5fH9zfYdyda3T393d3d7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e39/f39/f39/f39/e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f4ODg4ODg4ODg4ODg4ODg4ODf3+Dg4ODg4ODg4ODg4ODg4ODg4eHh4eDg4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4uLi4uLi4uLi4uLi4uLi4uLi49eHb2pxalVWV2FbT1FSUE5XSURESUo/Ojk6NzUzNDk1NzY2Nzg4Ojw7PD46PDo6PTw5PDw9Oz09PDs9REdEQ0E8PDw8Pj5AOzg8ODE1OkFGRVautbW1tre4uLm4uLi4uLe4ubq5uLi3t7i4ubq7t7mqcnB4d3x7e4J3aG5xam9qY2lyf21zcn54dHFsanaAeX2AgH91doB1a4qLgHaR1d/d3d7e39/f3t/f3t7e3t7e3t7e3t7e3t7e3t7e39/f39/f39/f39/f4N/e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t/f39/f39/f39/f39/f39/f39/f39/f3+Dg4ODg4ODf4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHi4uLi4uLi4uLi4uLi4uLi4uLi4uPYhm1sdGVWUFxnWE1YU1JRWUVDS1BOOzk4ODc1NTM5NTY2NzY4Nzk+OT0+OTw5OTw7Njg5OTo8QEA9PkBGQEJCQDo+PEE9Pzs7OzYxNjxCR0RQqLa1tba2tre4t7i4uLi4uLm6ubi4t7e3t7e5ure2tIlyd3h9iXxwem99c2hqbGdnbHRscXd0cWx2c3Fxd3FyfHl4g3Z7d2mLkYp9kM7f3d7e3tvY2drZ297f39/e3+De39/f3Nvc3N3e3uDg3+Dg4ODf3t7e39jS397f397e3t/f3t7f3t/f3t7e3t7e3t7e3t7e3t/f39/f39/f39/f39/f39/f39/f4ODf4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODh4eHh4eHh4eHh4eHh4eHh4eLi4eLi4uLi4uLi4uLi4uLj4+Lj4+Li4uPj4+Pi4uLi4+Lk14NoZ3VkVlVkZVdKWllXW1Q9RU1LSD04NzU3NjQzOTQ0Nzc1Njc5PTo9Pjw9PDk7PDk5Oj45PD4/PkFBQ0FFRUQ+OzxBPjw5PDs3Mzc+REhFSqG2tbW1tbW2tre4uLi4t7e4uLi3tra2tra3uLm2traLfXpsbHp/cGx5dm5qaGdlcXp4b2lvb3B1c21zd4Fnb32CgYNyf3lqcHJ6f6ng393Zy8a/vL2/vsLN0tDW3tnc4NfQzcPCw8PH1dfT2dzX1NjX0MfExce9vM/Kz87Y3djO3N3c2t3T0dze39/e397e3t7e4N/f39/f39/f39/f39/f39/f4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4OHh4eLi4uLi4uLf4uPi4eLg4d7W29/Sw8rJx9Hb3OLk4eHg2dre1sbExcTN2trf5OHi4trX3st9aWZxYVleZWFNTFRLUlpMO0hNSEZBPTc2NjUzNDY2NDg3NjU2OTw7Pj46Pjk5PDk3OTs7Oj49PEBAQ0RCR0ZCQT08Q0A9OTw7Nzc3P0RGRkaZtrS1tbW2tra4uLi4uLi3uLi3s7W2t7a3t7i5tba3opdxb29waW50dnFmZWNrbmdvcm1mZ2tygWVvdnyAeGRzj39zaHFyaWVlbm+w39HFv7u5ubm5ubq6uru6vc3Gw8e/urq6uru7u8HCvcHFvby/vry7urq5ubq6ubm6w8XDucDDwby/ube/z8/U3tjc3t/g3tLa4N/f4ODg39/f39/f39/f3+Dg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODh4eDg4ODg4ODg4ODh4eHh4uLi4eDh4uLi4uHa2t3RwsPCu8XT1uDdydPDrrnAsaqrq6uwtLbJ0sXRxLG4v7Srq6usr7S0vMzE1c60tLureGxtbWBdYl9ZS1NVVFFQREBRTUhEPzo3ODU3MzE1NjQ5ODU2Njo8Oz08ODw5Njo6ODg5NzU8PDw/QEFAQkRDQkE8PkI/Pz09PTc1OD5DRUNAj7a0tLW1t7i4uLi4uLm5uLe1sautr7Oxs7OztLS0tqaei2tue3ZxeXhnY2hfcXdha25vaG99b25ja2lseHdsa4Z+bHB6dm1scG95sca8uru7urm5ubq6urq6urq6urq6urq6urq7u7q7u7y7urq6ubq7u7q6urq6urq6ubi3t7i4t7e2tbW1tbi3u8e+w8XHzcS4wMnH0tzZ2d/e3uDf39/f4ODh4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODh3Nji4uLi4eHh4OHg3tfGxtHQztTe3tPO0t/SuLi8sq2trKysrrG+ua63rKipqamqq6urqqqqq6ysuKyqqqqrq6urra6urq6urryzrayrpHlub21fXl1dVE1SU1xUSkE/UElIPjg5NjgzNzMwNTczNzg1NzY2Ojw/PDg5Ozo6Ojg5OjY1OTs8Pj9EP0NFQkNCP0BAQT9APjw3ODc6QUVEP4W4tLS1tbe4uLm5uLi3t7SurKuqqq2urq6vsLGzs7WjcG5ucm1wg311aWFlaGZkY2Rxc21td25naW1tZXBzb29zcXN8h4F6dX11n7u6uru7urq5ubm6urq6urq6ubq6urq5uLm5ubm6urq6u7q5ubm5ubq6ubm6ubm4uLi3t7e4uLe3t7a2tbW2tra1tbW1tba1t7e3t7rBvrzGycrb3+Dg3tvd3d7h4tDW4uHg4ODg4ODg4ODg4ODg4OHg4OHi0768zNjd3OLg0dnbxL23sLCxsa+zu7uzsLS9s66urq2tra2sq6qqqqmpqKmpqampqqurqqqqqamoqampqampqaqqqqytrq6urq6urq6sraR4aWJxZmFZWlZRUk5cU0Y9QlJEQTc8OzY5NTY1NDU2NTk3NTY1Nzg7Pjw7OTk5Ojg3Nzk3Njg8Oz47RD8/Q0BBREE+P0M9Pjw+Ojo3Nz9DRj54srCztLW2t7i3trKurq2sq6uqqaqtraysrq+xs7S1t4xucnRqaIB5ZmpmZWxdaG5waGxxYmNmcoJ+dmhobGpueoaBhXx4cXF5gK+6ubq6urm5uLm5ubm5ubm5ubm5ubm4uLe3t7e3uLm5ubm5uLe3t7i5ubi4uLi3t7a2tre3t7e3tra2trW0tLW1tbW2trW1tre3t7e3t7e3tre4v8bP0MS+v8DE19e8ydra4OHg4ODh4eDg4ODh4eDb3t7Uzby3tre6wMDJxLfIvrKwsLCwr7Cvrq6ur7Cwr66urq6uraytrKurq6qpqampqampqampqKmpqKmpqampqKmpqKmpqqqrraytra2ur66trK2heWpjbWdiXFhRUFFLVEpCOklRP0E3PDk0OjU2NTQ1NTU4ODY4Njs6OTw9PTs6ODY2ODg6ODY3Pj09PT5BQUVCQkNBQUBBOj09Pz05Ojc9QUc8bKqmqKutsLGwrqupqKqrq6mpqamrrKytra2usLO0tbilgIdvaWdzdGZrcG1qZGxvcm5rbWNrcHyJhG5qbHx4Y3uKfnNqc25rcY+7ubm5ubm5ubi4ubm5ubm5ubq5uLi4t7e3t7e3t7i5ubi4uLe2tra3t7e3t7a2t7a2tra3tra2tbW1tba1tLS0tbW1tra2tra3t7e3t7i4uLe2t7a2uLm4uLe3uL6+uLq9vcfb4OHg2Nnd4eHg3dfKwcPCurm5uLe4uLi3tbS0tLKysbGxsLCvr6+vr6+vr6+vr66ura2srKyrq6yqqqmoqKmppqepqaehpaipqamoop+hoZyip6inqausrK2ur7Cwrq2unXdwbGphY2BZUU1RTFJGQzlNUEU+ODs3Mjc5Njc0NDM1ODg3OTc7OTo9PTw6Ojk3NDo5ODY1OD8/QEI9RENDQ0FDQEJBQDtAP0A/PDw6O0NIPWOopaWlpqioqKenp6ipqqmoqKipqqqsra6wsLCztLW1taWYdn5xZmt4cW9tZmVsaGNsZ2ZpaX11bWlvfXZ5hWZod294b3Fvcninu7m5ubm5ubm4uLm6ubm5ubm5ubi3t7W1tba2tre3t7e3t7a2tba2tre2tbW1tra3t7e2tbS0tLS0tLS1tLS0tLW1tba2tra2t7e3t7e3t7a2tre2tre3uLe2t7i4t7i4uLi4wMXTyry8w83PyMC9urm5ubq6ubi4uLi4t7W0tLSzs7KysrGwr6+vr66urq+vr6+uraysrKurrKysq6ehoJ6gn5udoaGdlpmkpKaon5mZmZmanZ+gn56fpKqtrq+ura2srJl1cGlrY2FeXVVOU0tSREQ4TktHQTo4NTI2OTY1NDczNzc3ODk3OTo7PT0+ODg4NzU6OTk1OD9AQEFEPkZBQkNAQkNCQT88QEJCQD0+OjpERj5cpqWmpqampqanqKenqKioqKenqaurrKytra2ttLS0tbekc311bnONf3JmanFjaW1jaGZobG51aV9jZ3VzdnpuZ3Bwcn56cYihu7m5ubm6urq6urm2s7a1uLm2trW1tra1tbW1tbW3tra3tra2tbW2tbW1tbS0tLa2t7e3tbS0s7O0tLW1tLS0tbW1tra2tra2t7e3uLe3tra2trW2tbW2tra2tra2tra3tra3uLi3uri4uLe3t7i5ubm5urq6urm4t7e3t7W1tLS0s7OysrKxsbCwr66urq6urq+vra2srKuppaSmpqScmZubmpmampmXl5eXl5aZm5iZmJmZm52en5+dnJ6gpKWko6OioqKQdG5jcGFeXltUU1RIVEo/PFFCRkM7ODYzNzo1NTQ4Mzg5OTc4OTc7OTs9Ozc6NzU2OTk4NTg+Pz9ART5CPz9DPzxBQUI/PT9EQT8+PTk9Q0Y/VaSlpqanqKeoqamop6ioqKioqKiqrKuqqaipq7W1tba5o3eKcXKHhnd0cGh5a2JjYWVsaW5zal9jZWNjZWprYmRqbHaXjX6ovbm3tre5u7u6uLWxrKurqq6wrKyrq62tq6uvsLGvr7CytbW2t7W1trW1tbW1tbW2trSvr7O0tLSvra6vsrW0tbW1tbW2t7e3t7e3t7e3t7e3t7Owsra1tLa2tre3tra2tbW1tra3t7e5uLi4t7e3uLi4ubq6urq5uLi3t7e1tbS0tLS0tLS0s7OysbCvr6+vr66vr62oo6KgnJqampqZmZqbm5qampqbmpmZmZiXl5aYmZmZmpycnZ+foJ+goKChoaCgoJ+fi3RuaXRdYGZeUlRLRFRJPUVTSEVCOzo0NDY5NDQ1NzM4ODg3ODk5Ojo7Pz04OjkzNTg5NjM5PT5AP0A6QEJCQkA/QEJCPz0+QUFCPz06PkVDQFGjpqWlp6inqauqqKaoqKipp6ioqKinp6ioqaq1tbe3t7KZtH99kIx1Z2lqbGZjYGNoZW94cGlicXx5cGpmZmRma3NqhYystrKwra2ttLeysLCtrKuqqaiop6ipqampqKinqKipqaeoqqurra2sqqysraysrq6traunpaSnqqyopKOkpamwsbGztbW2t7i3t7W1tre4t7e3t7Kppaasq6ivtLa1s7W3t7a1tbW2tra3t7e4t7a2t7e3t7m6urq5uLi3t7Wxs7S0tLKxsK6sq6yurrCxsK2rqqmqqKijnJqZmJmYmJiYmZmZmZmZmpqZm5ubnJybmZeYmpqcnJydnJ2foKGhoqKioKGgoKCfnop1amtuWVxhVktPREdVRz5PV0hEPTw4MzQ0ODQ1NDgyODk4ODk6Ojw5OUA8Njk6MzY3OTE0PD8/QEBBOkNGRUJBREJDQTo7P0FCQz9APUBEQ0BPo6empaemqKqqqqakpqenqKioqKimpqaoq6uttba3t7e4rbJ1cHuDdmBiaWtiZWZhZGdmfYh5bHKAfXFvcXhjbW5xZo+srKurq6ysra6urK2trKyqp6WmpaWlpqioqKiopaeoqKioqKeoqamqp6Wko6KioqOioKKioaKhoKChoaKjpKOjpaWlqLC0s7OzsKuqqaqztLa3trGopaOioaGipKiqqairs7Sxrq6xs7W2tra3uLi3tre3t7e3t7a2uLe0sa6ppqerrKmnpqWkpKSkpKWnqaajoJ+enZycm5uampmZmJeXmZmZmJiZmpqampqampqbm5mYmpydnZ2dnZucoKGgoaOjoqCgoKCfnp2FdGtsaFdYU0pHTUVITUdAU1dGRz09OTM2Mzc0NTU3Mzg6Ojk6OTw9OjpBPDY9ODM3ODgzNztAPz9AQDpCRUNAQkRDQT87PEBDQkNBQDxBQ0A9TqKnpqanp6mqq6mkpaWlpaaoqKippqanqKmpqrW2tre3t7izc2h7c2JnamtpaWJhZGloXV1tfHJma3J/fHR8bm1zc36gqamrq6uqq62trKusq6mpqKWjpKampqWmp6eqqaamp6enqKinp6iop6WkpKKhoaGhn56en5+fn56foKGho6Wko6OkpKSmp6enpqWkpaampqeqraumpKKhoaChpKWlpaempaeoqKalpaivtLa3trW0tra1tbOwrKupqa6rqKWlpqampaSkpaWlpqWkpKSkpaKhoaGgnp2bm5ucm5qamZiXmJiYmJiZmpmZmZmYmZmZmZqZmZydnJycnJybnJ+fn6ChoaKgoKCfnZ2cgHNrbmReU0pITUZETEtFRFFTQ0c9PDgzNjI4NDY0NjQ4OTg6Ozk7Pjw5PTs5PTczNTk2NTY8QD0/QD88P0JDPkJCQj89Pj5CQ0FFQD86PkVAO0+jpqWkpqeoqaelpKWlpKWnp6eoqKanp6alpqa1tba2trW2uYptcW1vfHxxZ2pmYGFsYFROW2hqbm9tgYJ9cWdxdn6aqKeoqqmpq6urrKqqqqimpaWkoqOlpqalpaWmqaqppqWjpKWmpqSko6Kio6Khn5+fnp6cnJycnJ2dnJ2en6CioaKjo6KhoqKkpaSioqOjpKSjpKSko6Ggn6GipKanp6ipqaelpaSipKSlqK2wsKyrqqusqqmnpaWmpaWlpaalpqioqailpaWkpKSlpKOjpKOioaGhoqKgnp2cnJubm5qZmJiYmJmam5mXl5eWlpeXmJiZmpqcm5qampubm5ucnJ6goKGgnp6enpycm356bnJiXlNNSlBFRk5NQkBPRT5JOz01MzYzODM2Njc1Ojs4OTs5Oj49Ozo5OT03NjY5NjU2PkI+PkE/PT5DQT5DQ0BAO0BAQkJCRUA+Oz5FPzxQoKSjpKOjo6SkoqSlpaSlpqamp6empqalpqaltLW1tbS0tbiBaHx9ZXOCemxwdWFfY1ROT1FbaGxpbGxxbW5xbnScoqSnqKioqauqqqqqqaempaSjo6OjpKSlpqalp6ytqaShnp2eo6Shn56foKCdnJ2dnJycmpqam5ucnJubm5ydnp6foKChoJ+goaOioKGjpKSjoqSlpaWkop+go6SkpKapqainpaGdnJ+jpaipqainqKioqaempaWkpKSlpqampqampqenpaWko6Ojo6KioqGhoqKhoqOkop+enZ2cmpubmpqZmJeXmJaWlZSUlJWVl5iYmpubnJuampqam5ucm5ucnp+fnpucnJyam5p/fnF0YFtUTUdNSEZMSj8/TkM8QDs8NDM4Mzc0NzY3ODs9ODo6OTk7PTs7ODk9Njc4OTU4OD9APT9BPjs9RD89REA/PzpAQUE/QUVAPjw8Qz88Tp2ioaKioKCipaSkpKWlpqenp6empqampaampbW1tbS0tLS3jHalsXdmc3Jvc2xjZGlYT1JRT09dgG1kYFptkZGSoqKjpaampqenqKiop6alpaOioaGhoaKjpaempqesq6imoJ2cm6Ghnpubmp2cmZiam5qampmZmZubm5uampqampucnZ6goaCfnp+hoJ6foqOko6Omp6inqKWioKGhoaGkpaWlpKCcmZmbnqOmpqampqanpqempaOlpKWlpqiop6enpaWlpaWkpKOjo6KhoqKioqKhoaKjo6Kgn56enZybnJubmZaUlJSTk5OTk5SUlJWWl5qam5ubm5qZmZqanJ2dnZ2dnZuampqamZqXf3dvc11aTkhKTkdFRklERU5APD09PDQ1OzQ2NDY1Njc5Ozg5OTg5OTw7PDc6Ozc4ODg1ODg/Qj9BQTw+P0A8PEJAQT49QT4/Pz1CQUA6OkA8PE+doqGfoJ+dn6OkpKSlpqeoqKenp6ampqampqW1tLS0tLS0tbSXtqd1Znh2Y2xjY2VjW1JTU1JNXqCMeFhodpajnp6hoaOjo6OjpKSlpqalpKSioaGko6OjoqOlpqamp6enp5+bmpuioJqWl5Wam5qXl5iZmpqYmJqampqbm5qZmZmenZ2goqOjo6KkpKWinqGhoaKjpaampaSjoaCgn5+hoZ+goJ2amJiZmpygpKOjpKWmp6alpaOjpKSkpKWnp6ampqampaWmpKOjo6SjoqKjpKGfoKGhoKGgoaCfn56dnZyamJeVk5KSkpKSkpOTkpOUlZaZmpqbm5qampqbnZ6enp2cnJybm5qamZmZlH10bHReWk9IRUdGQkVORT9GOzo+Pzs0Njo2OTM2NDY4ODo4OTc4ODo8Ozw5Ozs6OjY3ODk5Pj9APjw9QD5AOjlAQT89QT8/QUE+QUE/Ojk9PjpQnaCfnZucnJufoqOlpaWlp6iop6ampqanpqantLS0tLOysrGwsK2rkHiGj36bmn93Yl1TUlFRTGKgootaiKCgn52YmZycnZ2eoaGgpKenpqWkoqGjp6alpaOipaampaanpqagm5mboaCXk5KRl5qcmpaXl5iampmampqam5qYmJmaoKCgoKGfoaKipKamop6gn5+goaOko6Khn56enpyanZuZmpqZmJeZnqChoaKioqKkpaWmpKSkpKKioqKkpaWlpaWlpaalpaOko6KioqGgoKGgnp+fn5+fnp+foJ+cm5qZl5WUlJSTkZCRkpKSkpKSk5SVl5iZmpmZmpqam5+fnp2cnJycmpmZmpiXl5F8cmdxXl1QRj9BRD9KT0JCRjhDRT4+OTg7Nzc0ODQ1OTo6Ozk3OTo8Ozo8PT48PDo2NzY5OD4/QT47Pz49PDg6PkFAQUE/P0FCP0RBPjo4PkE8U5ycm5uampycnaGio6KjoqSmp6alpaampqSjo7KysK2rp6amp6alpqiln6iop6qnoXmEXFFST0xcnKCAYpmgnp2clZOVlpeZmp2dnqGmpqampKOioqanp6ajpaampaWnp6amop6cn6GgmZGSmpaXmp2YlpeWmJuZmpqampqZl5iam6Ghn56fnpybnJ6goJ6dn56fn6Cio6SjoqCfnp2ZlpeXl5iYmZubnqKioqKioqGio6WlpKOio6SioaGhoqOkpKSko6SkpKSioqKhoqGgn5+gnp2enp2dnZ2dnp6em5mYl5WTk5SUk5KQj5GSkZKSkZKTlJaXl5iYmZqampyenZ2dnJubmpiYmpmXlZaNempmamBiTkY+P0A9SkVAQ0A7QEE8Ozs5Ojc2NTg0Njc4OT04ODs6Oz87Ojs8Ojk6Nzc2ODs8Oz08Ojo8PTw3Oz5DQkRDPz1BQ0FEQT88OkBCO1eZmJqamZmam5ucnp2foqKhoqSlpKSlpqSioJ6op6alpqWlpaemp6ampqakpaanqKehqXJOUU1KVJahenKanJyenJeVlJWWmJiXl5qeoqKhoqOkpKOjpqalpaanpqWlp6empaOgoKGgn5qTpq+bmpmenJaXl5eZm5ycnJqamZeZm5uen52cnZyZmZqcnZydnp6fn5+hoaCgoaKgn56bl5WVlZeanZ2fn6GhoqKio6OhoaCgoJ2cnaGioqOkpKOioaSlpKOko6SjoqKioqKhoaGfn52cnZ2cnJ2dnJ2enpqXlpaVlJOTkpKSkpCRkpKSkpGSlJWWl5iYmJiam5ycnJycnJ2cm5mYmZiWlJWXi3hsY2RiZFFHQT1DO0tIRDo7Ozw+OTo6OTo3Mzc5NTo4ODg8OTg7OT09Ozo7Ojk8PDc2NDc/PDo9Ozw/Pjw7ODxBQ0FDQkI+P0NAQkFAOj9APztZmZiampqam5ubm5ydoKGhoaGhoqKioqKhn5+dpKWmpqenpaWmp6ampqWkpKalpKSkpaaGUFJQT0+PmHB6mpubnJ6cnJycm5ubmZiYm56dnp6foKOkoqGhoqKipKWkpqampKSjoqKhnp2ao4qHm5yam56amJiYmJqcnpyam5iWmZybnJycnJydmpqbnJ2dnp6dnp6fn52cnJyhoaCblpWVlZacn6Ggn5+hoKKjoqOhnZuZlpaWlpicnqCip6ikoaCgoqOjoqKioKCgoJ+fnp+gnp2cm5ucnZydnJmanJuWk5KSkpKUk5KSkpKSkpOSkpKRkpSVlpeYmJiYmZqcm5qbm5ucnJqZmJiXlZWWl4d3ZGdoZGJNQ0U8RDlJSkU5Ojs9PTo6Nzg6NjQ3OTU8OTY4OTc5PDs7PDo6PDs6PDw4Nzg3Pj07Pj46Qj86Ojo/QURCQ0FBQD9EQUFAPjpAPj06W5qYmZqbmpubm5uen6CgoaKioKCgn5+enp2dnKWkpaanpqWlpqakoqKio6Oko6Kjo6KnllRYVVJOZ21rgZ6am5udn6Cgn56enp6dnJ2dnJ6enp+goaCfn6CgoKGipq6kpKSkoqGhnpubn6BbhpyZmZienpiYmZmam5qWlZeWlZicnJ2cm52dnpybnJ2cnZ6bmJqeoaGdm5udoKKhmpWVlpaZoKKfnZueoaKjop+em5eXlJKSlJeYmZ2goqenpaGgn56goaGioaCfnp2cnJubnJubmpqZmpydnJmXmZaVk5GQkJCPkZKSkpKSkZKTk5OTk5OTlJWWlpeXl5manJubnJucnJqamZeXlpaVlZSEcmZsYmRbREJMPT84RktCPEA+Pj05Ozk6PTg1ODg2Ozg1Njo4PDw7Ozw8Ozk8Oj09OTU4Nzw5PD88OkE/Ojo6QEBDQkRBQ0A/Q0FAPj08QD09Ol+al5mamJeYmpycn5+foaGhoJ+fn56foKCenZ2lpKSko6OioqOjoZ+foaGipKOio6SiradXXl1UV19ua42dmpqbnJ2dm5ucnZ+enZycnJydnZ+goKChoaGgoKGgoKq0sKKjoqCenJuamqlwUIubm5yZnJ6ZlpaWl5eTjo6QlJabnJuam5udn52cnJycnJ6dlpSZnJ+in5ycnZ+hoJuXl5mZmpycnJubnZ6fnZqXlpaWlJOTlJiampqfoKGmpqWgn56fnqChoaCenJubnJybm5ybm5qZmJmZmZmXl5iVlJKQkJCQj5CSkpKSkZGTk5aYl5STkpSVlJWWlZaZmZmam52cnJyampmXlpaWlpaQgG9vZV5gV0BKSDg/N0lFP0VBPD07Ojo8Ozs3NTs4Njs3NDY6Oj47Oj0+Pj07Ozs+Ozo4Ojk5NkBBPTo8PTo6OT9BQ0JERUM+P0FBPz8+Pj89PDtgl5WXl5aVl5mbnqGhoKGioqCenp6enqCgn52bpaWkpKSioKCfoJ+dnZ+hoqOjo6OkobCjXWVkYGFua4GenJubm5ubmZianJ2enJubm5ycnJ6ipKGeoKGioqKhoaCrk5yuoKCenZqZmqKZU1qPnJ2em5manJiXlZWWkY6Nj5KYnZycm5ycnqCdnJucnJyempWVm56foZ+dnJyenp2cmpqampqampqbm5qXl5aTkpWVlpWTlZaam5qanZ6foqWjnp6fn5+en5+enZ6fnZycm5qbmpqbmpiZmJiYmJiYlZSTkZCRkJCQkZKTk5CRk5SYmZiVk5SVlZWWlZaXmZmXmZqenpyamJiXl5aWl5eYjX1ubV9lVlRFSzw3PjdSRUM+QkE4Ozw7OTg6ODY7Nzc6Njc5Oj0+Ojw8PT49PD06Pz06ODw9OTtAPj4/PT45OTs/QkNAQ0VDPT9DQj5AQD5APTw8YZWSlJWWlpeanJ6goKCgoaCgnp6enp6gn56em6WlpKSioJ+fnp2dm5mbnJydnp+gn56rmGNpbW5pZm2enZybm5ybmpmZmZqam5ucm5uam5ygo6SgnZ+en6ChoKCgo6Fol6yfnZuam5yqc1Zfj56enpyZmJqamJiYmJKOj5OXnJ2bnJ2cnJycnZycnp6dnpqVl5ygoaGfnp2eoJ+cnJuampqbmpqYmpmVk5OTkpOWl5eVlJiYmZucnJydoJ+gnp6enp+fn56en6KjpKKgnp6cm5qam5uamJmZmJeXlpWUlJORkZCQkZKTk5OSkpOUmJmYlpWUlZaWlpaWl5iYmJiXmZqamZeXl5aXlpeWl4l4dmddX1dURUU5OTs8WT5AOEI/OTw8Pjk4Ozg6Ozc5OjU4OTs9PDk9Oz0+PD0+Oz8/Ozk+PDw+Pz5AQUE9ODc7QkNFP0FFQz1AREJBQEQ7Oz47PGKWk5SUlpWUlpiYmZubnJycnZ2cnJ2en56dnJqkpKSkoJ+enpybm5qZmJiYmZucnZ6cpolla3R4bVuFop2dnJydnJqbmpqampydnZ2bmpuboKKinpucnZycnJ2enp2odGiko5ubm5yfoWtiYpGenZ6cm5qanZqam5yVkZOXm52dnJ2fnZycnJycnZ6fnp+cl5idn6GhoJ6cn6CfnJubm5qbmpmZmZmZl5WWlZaYl5eXlpaYmZuenp2dn6GhoJ+fnp6fn5+dn5+hoqKhoZ+fn5yZm5qcnZuampmXlpaYl5eXlpWTkpGTlJSTlJSUlJaZmJaVlZeZmJeYl5eXl5eYl5iXl5eXlpaYl5eVl5eDeHZfW11eUT1GOjk4P1VDQTtDQzo8Pz86Ojk3Ozg4ODc0ODk8Ozw4Ozs8PTo8Pjk/QT06PTw+PkA/PUBBPjk2PERDRUBBRUU9PkVERD9COzo8OTpkl5SVlZaUlJSUlJWXmJiamZqcnJydnp6dnZybo6Oko6CenJuamZqZmJiYmZiam5ubm6WJa3F2em9lmp+enp2dnJybnZ6dnJ2enp2dnJydm5ygoJuampubm5udnJuap4Jsgaebm5ycopJsZGONn5ydnpybmp+fm5ydm5mZmZudnZ2dn52dn5+dnJydn5+fn5uanZ+goJ+dnJ6gnpubm5ubm5yampuamZudnJqZmJeYmJiYmp2foKCgoJ+hoaGgoJ+en5+fnp6foaKhoJ+enp+enJqam5ubmpqZlpaXmZmYmJiWlJOUlJWVk5OVlZSVlpWVlZSYmZuamZaWl5WWmJiWl5OUlJGRk4yRkJOWfXhqYWJiXFA8QDw2OENWSERCOjg7Oj47Nzc5Nj06OTk2NDc6Ozw9OTo6Oz87PT08QD47Oz46PT89PkBBP0A8NztBQ0U/P0REPj9EREM+Qj07PDs6Z5aTk5OTk5OTlJSVlpeWl5aWl5mbm5ybm5uamaOjoqCfnpuamJeYl5eXmJmYmZybm5qkgGpqb3lzcZegnp2dnJydnp6enp+enp2cnJydnp2bnJuampqam5ubmZmZmqaEdnCTmpucnZ2CamVljKCcnJ2cm5qdn5ucnJubnJubnZ2dnJydnp2enZydnZ2cnJ2dm5uenp6dnZybnpubnJycnJydnJubmpmbmpmYmZmYmpmZmpyfn5+jpaKfoaKioaGfnqCgn5+fnqCioaGhn5+fn52ZmpucnZqZmJWWl5aVlZaTkpOUk5STkJCSk5GUkY+OkJGOlZabmJWYlJmXlJiRjJCPk5yTkoyFjIeDhndxZ2pkW1xRQT44NkJHYEJFR0A+Ozw7Ojg4NjU8ODo4MzQ6Njk9PTk5Ojs9Ozw6PD48Oj5AOj5APjw/QD8+PDg6Q0FEPz5CRD8+Q0VCPUJAPDw8OmeYk5KSk5OSk5SVlJWXl5aWlZaXmZmZmpqampqkoqCfn52bmpmYmJiXl5iZmJmcnZ2cqH1nZXN7enOJop+enp2dnp6enZ2enZ6enp2dnZ6cm5ybmpubm5ycnJmYmZmmjXV8fI6anZ+WeGZfZY2hnZ6dnZybm52bnJybnJ2dnZ2dnJ2dnp+fn52cnZ2dm5qbnJmZnJ2dnZ2dm5uanJ2dnJycnp2dnZybmZeVlZeXmJqam5ubnZ6foqOhoKGhnJucm5ubnZqcmZycn6CfnZiZmZmUkpKUl5SPj4+OkYyNiYuQi4mLjpGRj4mQmJiQkoyNi5KQj5iYoqiqpqWlrKOmoZqep6eyqKKVo6Cfl39wcWlsXFtcTUY8NzdHR1g+SE5URjk+Ojg5ODc1PTk4NzMzOTY6Pjw6Nzo8Ozo6Ojo8PDs/PjtAQD47PT5BPDw2N0A+QkA+QUY+PEFEQT1DQj49PDlmmJSTk5OTkpOUlZOVl5iYmJaXl5iZmZqampqaoqGfnp2cm5mYmJiYmJiYmZmZm5ybnKx/am16f3lxh6Genp2cnZ6enp6enp6dnp2dnZ6enJubnJubm5ubm5yZmJmZnJWUnXt/nKKghox/YGaRoJ6fnp2dnp6dnJydnJ2dnZ6fnZ2fn56goJ+enZ2dnZybnJ2em5qbm52enZ6dm5ubnJ2cnp2cnZqYl5SRjo+QkJGVmJSWlJiZmpudmJuYlY2Mjo6TkpKRj4mQjpGRjo+Ki42NjYiIi4+Lg42NkY+MkI2Qk5WVnJihoJySn6SipKmam5eanKOprb3Bwbq8uL26ucC8ubq3uru7tL2zwbV/bnVmZ1peWUxJRTo7TElTPFZSSUM6QTo7Ozc3NTo6OjgyNTY4Oz08OTk7Ozw5Nzo4Ojw6PT85PD8+PDw9QTs5NTg8O0A/QT9EPTxBQkA8REM9PT06YZOTkZCUlJOTk5OTlJeYlpeZmJmYmZqbmpqamp+gnp+fnJqZmpqampmYl5iZmZmZmZmphXB1e4B3b4mhnp6enp6fn56en56fn56dnp6fnp2dnJ2cm5ubm5ucmpiZmZ+pnIprba6qoWd/i3pnl5+goJ+enZ6hoJ6dnp2enZ6fn56en6CenZ6enJydnZ2cm5qYnJuVmJqamJiYmJmSjJCXlKCXk4+MjYqKiImMiJORh5CPjYqKkJCLjoqMi4+IiImJjpGOjYaFiYaKhoWLiI+SkJCNkJKXlpKamJ2TlJ6kpqaqq7Gsr6+rpquqsbm5tbS0rqyvtMDIxcXBvsbDxMTDurW+t7a0s7C2tb6qcHRyXGZfXl1JRj8/RUtMVklcTEQ/PUI6Qzk5Nzc7OTk3MTc5ODo+ODg6PDw7OTc5OTs9Oj4/OT5BPDs+PD46OTY5PDpBPkNBQT08QkBAPkJEPj8+OVyHhIOHi42KiYaFgYqMkZOVmJiHlZaWkpiampmenZ+gn52ampubm5ycm5iWmJiXl5ibqo56dXZ7f3mCoJ+fnp+goKCfn5+foKCfnp2dnp+enp2dnJqbm5ybm5uYmZempYhwX2qklJhWZ3t9fJ2cm56dnZycoaGfnZ6dnZ2dnp2dnJiWlpaYlZWSlpmWk5GKjI+PjI+NkIuLj4+WiYiEi5GZjn2Fi42PjYyHioyQm4yRj4+Lio6TjIyNjIiSi4yFiYyPhouIh42KhYyEj4qXkJOYmpWbnKOqoaKknKKrsbe0ubWxtK2vsrKlp7O6sbq6vLa3tsDDw729vLa/urq8wbW4wL60r66mqa+3mm58Z1tjWl1fSEU+QUtJU1hZXkFGOTk9OkY/Pzo3Ozs7NjM6Nzo5Pjg6Ojw9OTk4Ozk7PDo+PTtAQDs8QjxAOjg0Nzw7Qj9BQj4+O0NEREBDQz0+PjlhmZWLkYWNj5aSiHl9e3+Fi4OKgoqJhmuAeJCLlpqRnZ2UlJGTlpeampiWk42Sk5KQm5uIdndzcX1/cpGgnZubm5yenZ2eoKGgm5uWlpucmpubnJuYmZqYmJmbmpqXqZlnRUh0mYOFT0VgdYCUkY2SkY+Uk5KXm5mYm5ePjpCLjo2Ch4uLi4qLiI2RjIeHhoqIiZGKh4yEhYqNi4qNhI+UkIyDkJOUmZWQi5OTkZWRlpWOj5GMlI2Oj4qIj4ePhoeJiYmNiomJioWNh46JmJKUmpuXmKChp6Cko5qqqbO2sbWwqKqiqK6tn6qvsK21ubi8wr/BxLixtbCutrOwuL68ury+urOzp7G3wpB1gGNiXlpXUk1IRkVQSVlXX1tDUDpCQz1HRj84Nzo6NzU1OTc8OTw5ODo9Pjo6Nzs7Pjs7PTs9P0E7Pz48Pzo4NDM3OkFBQEI+PjpDREM/QUM7PT45Z6mloqKZn6CippeUiI2CiIJ1h4iKiIp7e3Z7enmPeoiSfn18en6CkYWBgH1zfH99fISHfnRweHZzfHaBj4iIiYeIioyMkZicl4iOhIuNi4iNkZCPi5GPi4yPkJGQlq2EPTo8eIx2blE5NV52goeCjYuGiYp/iYqGiJiRiIOIg4KFfIuLjIaJi4iKkIyIi42PjI+Wh4mLio6NjY2Wk5OdnJyalpycm56bmpuYnpeTkZWWkJKRi4+LlpSMjYqDi4SEiYyQkIqOio2LipGJjZOTk5SVk5KcmZ6Xn6CfpaKvsamupKSfmKStpqa4t6ysu729wsPAv7+vpa2wsLS3uLO0uLa0ta6stK+4tLaBeXpjZmBeVlFRQUVMT0lcXl9UR0dCS0xCREA9ODg7OTU3Nzk3Ozc9PDk9Pj05Ozg6O0A8Oj06PkJBOD88Oj84NjQyOTtCQD9CPj04QEI/PkBEO0A+N2CloJqXnaGaoaCPl5efl5WCjaCfo6GdmpKOjIxycXBvdnFucG1ucHZub29waHBxcHR+c3FycXd7cnl2d3Jyd3Z6e3l8fXt/iIGEi3+PkYaNi4yGiouLiYeEgYaDfpijWl5sUHmhloNTY2pGZ3iBgpKQhoSEhY2DhIyPj4+IjY+Hi4iRkJWRjpCKk5eOj5WYp6SfnZWYlpaln5udq6aqt7W4srGnr6qnpqGfmp2WkpWVkYqPjImTjZuVjYuLhoaJjJWQkJCLmZKVlZSbkJiTlIyNkYyWl5WilZ6mqauno6OqsJucpp+mq6G0vb6zs7+5u7u6uby9rqiusa6wuLyztLGxqrCpqLGxsqild3J0X2hhYFRWUUlKSFZNXl5eVExKRVFKRUdDPTo5OTc0ODY4Mzg4PTo9PD47OTs4Ojs/PDw+OT9DPzg7Ojg8Nzc2Mzc5RT4/Qz89N0BAQT0/RDw+PThUj4yGh4eUjJWZl5yWmZaNlZyWlZydoKCdmpiWeHFubXJ4cXFsbnJwa3FvcG1yc3t1dnd5fnVxeHZ0d3tybn98gX15eH1/eYOGg4WCg5CLkIuLi46Pi4mJhYKCfn6djFmYo2+2vLG8gnmafU51foWOjYuGjZSSi5CXj5SXkpihlp6WlZunpp+goKawq6GjpbW0sqqmqq+isba5vcK7ucO+vLi9uLWxrLCsppuSk5mfm5SPk5WOmp2doJqfn5edo6qsoZ+em62hp6qwqaampJiRkZWUo6SirKSss7Szs6i3tru4sLKvra2yt7a6srW6s7e5u7i8urayr6yxsbKztLOxsa2us7Gzs6yhl3Zxc19jXlJRVE1PSUdYT1pcZFROR1VPRURKRD44Ojg3NTg4ODU5Nzo6PTw/Ojg8ODk5PTs9PTpCPj84Ozo5Ojk4NjI1N0I+P0RAQDY+P0I/PEM8PT46Tn98go6MjJOTl5eaj5SWjZaRkZSXk5qanqGdnHJvcnFxcXFxcG5zcW91dHJxdneAdXd8eYV+d3t8eX1/fICJiYmDfXp/h4GIiYGAgIGGiIKGi4eIhYSIiIqEf4J9oHiM3Myz1rGeuLxlYnJhYIiLjouNkJmclJSUoJqan6Ktsa6ppKWtr6ysrLWuvrmtrqm1sLexq7G2rK+9wsLAvrq8trKutraxtK66u7OurKepp6unoqmtoKmooq+wuLSxvLq6urK0ta+8tLezt7e7t7mtrbCprLW5sbeytLe2sLu7vLu6ury1vLi0wbWsqqqrtLG3uLm1trSzsKymrrCqq7Cxq6yusLKxtK6qo5N4dnJlZ1tMUlBFTUlTV1JlXmdUUExcUUhMUkNBOTk3OTU4ODY2Ozc5Ojs6Pjk4Ozo6Ojw8Pj08RD45Njs7ODg+OTUxNTZCRkREP0A3Pj5DPjpBP0BAO0t/gomXmJSdlpabmIuSlo6XkZGVl5SZl5+bmZx8dHV2dXl1c3RudnJzdHV2d319gX56gXyDfoJ/fYB/hIKFj52RiYF/go+Xjo6HgoCBiIuFfoqRjH+IjYyLi4iSippos8m0yNSvrrqndIupaliIi4qQj42PlJSYkJWcmp2eqK6ysLC1tLOtsrW4sLy1tbGqsKqztbS7t7SztrS1r7i4t62noqassLCvtre3vrW5vLOysa61u7C0r6+yu7axuMC9tLS0s7izvLq2tLrAvbm6ubq+ubm5vrWysa+yr6q1tLGzsbSzrri4tb+vpKaoo6ussa+zrq6wsKytq6qroqKmqKKnrauqpaynoqeYeHlxZmVZT09NSVJNV01PX15cTlVVYlFEVE07Pzk8ODk1ODc1Nzk1Ojo6OTs4Ojw8Oj08Pj4/P0I9ODY6Ojk6QDs1MjY2QUZDQz4/Nz49Q0I5P0I/PjtLjpGTmJmVmZGTopiTkpKLk4uOkI+Vl5ablZSbhoJ9enh2dHRzdH53end2gIKDhouMhISFioaQiYeRk5aRjZaalY+IjI+emJaVkpCTl5qamZGeoZ2Tl5uhmp6co6OTb6mbkcK+trGYjXddyppVgo+LmJqPj4yUmpecnZugnaSstLm6vK+2tLi0tLK3uLmzq6+qqKy1srK1rrGrrqa3s7OxpaGotbCvrayrtbqyu7q6tLK3ur67ubG4sLmtqLK4u66ttLS3tbu2trm5vLe0r7G0t7a5s7e1pq2pq6ior6yprq2up6KxtLG0q6aop6Cjq66oqq6orLKwr6+pqKGeoaGjpqOgopqlo56ol3J3bmdiVUpUT09KRFBLX2JYWlFcVGBNSFJJQUA5Ojg2Njc3NTg5NDs5Ozk8Nzs+Ojg8PD0/QkBBPTs2OTk5Oj87NjM3OD5GQkJAQjk+PUBDPkBGQj44R5OWkZWTkpSQkZ+ZnZmVkI+Sko6Mk5aWko6RlZGSkIaBeXJzdXuBhI6HhZGTkpicnJiVkJWYo5yaoaeqqZ+clpeVnaKioZyZnpmlqKyvramnqqqpp6KlqKmrqqmzoIeQeZSslIyPfXlyZ52cY3idoqSem5qkp6Spq66spaSoq6+xtK6qrK6zr6ystLO0ua6urayqrLKwsK2wqKqmsrS0uK6qtrqwr6qurLC3s7i0t7W0u7y4tbWxtauyrKiys7uvrbGytLa1sbG0s7OvrKuvs7a0sayutKqqpqWnrauoqKupqqifqbOwqqeppaOio7CtqaatpairrayppaSioKWipaOYmZyVnqKippdudWVnZFdPWUtLSktTVHBiWWRXX1tcUlpQTEM8ODk6Njk4NzQ3NzQ4Ojw6PDg6PTk3PDw7PkM/QT47OTo5Ojs+PTg0NThBREVEQkM5PjtAPkI/R0Q+N0KSm5SVlZaVj46Wl5qZlZGKk5SSjo+SkYqKiY2Ul5qTjYmCho6VkZSfmpuin5+jnqGhn5ijpKelpaapqa2rqaKmpKilpKGfnqOjra2srairrq6rq6ykoaKlqaenqaqOeFeDjXt6gHBua3N2fH12oKmnoKKirqyrqqetrqilpKmpqqmmo6iqqaekp66wr7Ovq7Crqq+yr7Czua+rqLCxrrCyubO0r62vtbCss7GurLW1tLSzs7CvrKyqrKusr7G0s7CwrrCwsKyqrauqq6alrrCysKumqbCvqaOkqaunqKaopquwq6mvqaaoqaalo6iwraqpqKKpo6WnpKGhoKKloZ2el5aYlJugpKmUbnNeamlfVlpOUk5RT1NlXGVjW11ZXFBZT0tAPDs5Ojc6ODczNTMzODo9OTo4OTo5Oj08PEBEPkA9OTo8PDw+Oz45NTo8QkFFQUNBOT47P0BEQENCQDdAkZ6YlJeZlpGHi5SSl5GIg4mLk4+OkI2Hh4SFlZmWmJeZlpqeop2ZnKKkoaCdn5qfoKGgpqGgoKCjo6KlqKmrramqpqOmpaCloKaop6aoqaepqaSoppqdpKaioamefGhLaXRucHhqaGRqa256hJako6Chn6GhqKCcn6GloaCmo6KfpKGspp6foaGkrKqnrKivq6e0sa6ur7WyrKqwq6mtrbWwrq6srreup6yqpKivsq+sq7Kvqqqpq6utqa6urrGxraqtqaunp6uoqauinaapqKilqKisqKilpKWop6iopqmsr6+oq6mhoqKlo6Opq6ymqKWjqKKhoKSdnZ+hoZ2bnZ+amZWcnKOqlG9zZm5yZF1dUFVPWE9eZGRsaGJiWlpSVE9NQTo9Ojo4Ozk1MTYzMjg4Ozk5OTk7OTk8Oz0/Qz5APTk7Ojs8QD0+PDk5PEFBRUFGQTo9Oz9BQUJBRUI4PYqWlJOYmpaPiISNjpGSjIiIiI+JiZCRjoqKiJubmZygpaKlnqKjoZqeoZyanZ6bnKOop6ugoKOYoJ2XnKGjo6WjoqKkrKilqaCepqmnq6mkn6Kho6ehpq6mp6evhGxiS11zbm93Z2JjZV9eanR+jpuioZ+doKOZlpqYo6KipJ+ZnKGhoqCbmp6goaSgnaejqrGorqusqaSqqquorKalrKqws6+rq6mwq6appaWoq6ynpqevq6Wnq6upq6irqqqrrailqKOmpaesqayoopykoaOmo6qpqKano6SnqKanqKepqKupoaKoo5yepqWjqKino6WlpqmgpJ6inpeYnZ+doqKlnpiUlZ6go5d1d2t2eGJfXFVZUVVXW2Nfc19oX2NTUVlUSD48PTg7OTo4NTM3MzM0Nzo4OT05Ozo5PDxBQEM9PT44Ozw9PEA/Qj86ODo+P0NAREE6Oz49QD9DQ0VDOTyCmJmenZ2alZKKiZGRl5GQh4SJgoGNj4+Sj42cnZ+hpKmlqaeorK2moqKfmKSmo6Stsa6yp6asm56em5qjp6Cfo5+foq+rq6yoqKuvqaiqqaKgoaiprbCztbyylm9lXEdWdnJzfGdhZGpaWmBjbXh/ipmioqGimZaem5+fpKGblZigoZ2enJudnZuZmZWen6Oonp2iqKGaoaOmoqSoqaqoq7CxqKWlp6eopKWpqaqnoqWmqKadnqWloqClpaOlpqCjpaOjpaelqamqpKekpqKmp6SrqaenpKGlqKynpqWlo6OopJWdo5+bnaCjqaeopqGjo6mooKiioJyVkZqfn6GmopuXkpCamqCVfHdvfXlmW1tgX1pcVlxoZG9jbWlpYl5QUEA/Ozo4OTg8OzYzNDMzMzc5OTs8OTs7OT49QkBAPTs9ODw9QD08PENBPjo4PT9EP0M+Ojk/PEI/P0FEQjk6gJ6kp6Kem5+gmY+ZnaCWloqGj4iEi4qTl5SRo6Wnqq6trLOys7S4t62pqqevtLKxqq6usbKusa2lq7OssbGpq6+rq6y2sLSwq7GysaOgo6uqqK62uLzBw72vmXtlZFtAXWxueHtrYV9nW1hgXmFmcHN5gZOiqJ2eoZqWnqScm5aZoqefoJ+joJuUlpmWl5qfoJmVnqGZmJ2dpZ2gpKeqqaiqraylqaSlqqeqqaqsp6SkpKOimZmhnpqaoaCfpaWYnqSmpKqooqelpaGqp6mnp6ejqKWmpaGkqKesoqekoaalpaOVl52Ym5mVo6elpaSfnZ2lo6Kqo5+amZiXnJyaoaGakJOTl5ibjX93cnZ4amJbX19cYllgZG5ta25hX2RgUE9BQDs7OTs4Ojk2MTQzNjQ3Nzc6PTo8Ozk9PUI/Pj89PDo/OTo7PD5CRUA9OTtAQT5DPDs5PzlAQEBAQkM7OXuao6OcoJ2dop2Zn6KioJibmJaYkpSQm5qWl7S0rrW4s7S4tre0uLm3tbm4ub28uKqLnLK4vLS9urW7uru4s7q/uLe5u7G3r6iusq2inaCrs7rG0NrVxrioln1nYmNVPV5qbHZxcmRiY1lXXF9dXWFoamtue5KlrqelmaGko52goaKooaOgpaGck5mYmJmco56cmpudl5uZlqWam5+hqKmpqKuvr66pqKirrKytq6irp6WjoJyfo6Ojn6Cipammmpyip6Spn6GjoqKgpaanpqSooJ+ipKGjoqiop6OloaGopqalo5mbmJuTj6GknqKfmJiVoJuhpaCfm5udnJuamZugmo2YmZiTkYaAdnh4eGNbUllUX19hbWl2a3BoaWliWlNMQDw6Ozg5Nzk3NTU2Mjg1Njc3Ojw7Ozs7QD4/QD0+Pjk6PDk2Nz47QkZCPDg7P0NDRDw+OT43PkFCP0ZDOzhwkpqblJ6bm52Vl52doqajopaXnpaXl6GblJi+t7G4uba3t7i7l5S2vbu9vcDFtaK7mKC3v7+6wcm0nbu2sra/xcGooLa0urGqrrSxsLK0tb3S4OHQuqWSg3JhWVtbTz9XcmleW25sXl1XWVhaWlhZWVtkcoadusi+t6Gnqqynq6mlpqCnoKGmoZOWmJ2foqSjnZ6coaChnZekmpmdoKaqqqqtrq2tsLGrrK2sqamrrqimpaalpqSkpqaeo6eppKGcoKKjpqCio5+jpJ2foqWgpJyboZ6fo6GhpaSlqaOkpaKkp6ehn52elpOcoJiZko+MjJeWn5uWnJqdnJqSlpSUmJOQmp2YiouHgIB8gnhhXllUYWlgZnRvdGl0ZGlkYltMSz46OTg5ODg5NzM0NTI1NDY2OTw8Oz08P0E/QEA9Pj44OTs4Njc/OUJFQzw7PD5DREM9QDs9Nz1DQ0BFQjw3Z4yRk4qalZiblZWYm6Knq6aVl5iQlZmhnpeXvrWztLu6ubi5woeYt6u4u8DCxbOjw6e4s72/tMTHvbS7uL62wMTErqCworW2tb2+wcTHw8O8w8jO1NDAo35hVVNVWFFGSYJueoN/XlZYV1xbXVpXYHycsrzAxse3t7epr7Gwr6yqoqajrJ+fpquXmqifpaWfoJydoKuwsKyiq5yYm6Cor7Kys6uorre1sq2tqaalqKulpaStqaShn6Cnnp6mqKmmnp+anqGlpqmcnaObl6KmmpuanZ+cmqGcmZ2eoKijn6GfnaWioKOioZSZmpmTj4qLhI2Qk5uPjpiVm5eYkJORkomNl5iYk4uKi32AgIVwYGJfXmtjYm54dXdubVtiUlZcTUc7PDk3OTc5Ojc0NDQxNDM3Njg8Ozs8PEBAPUA/Pj8+Ojo5Ojc6Pz5FRUU8PT1AQkJCQUE7PDhAQ0NARD87NV+MjIaFlouUlZeYl5ifpqellpWVkZebn5ual7mxtrO5vLy5urWqsryxvsG0vMe5uLuuv6fGw7/KxsnIxcXJvMLHx7+xsKe8vL7FxMbJx8XGu8TBxcjIxb/FrYplVlhVUUlrdaOso09VXF9hXF1skLHEvL2uqbK3q7WyrbOtqa6vp6awr7Ktqq+zpKu1qaeopKCgnqmyuL61tbWqqaausre4t7apq7i8ubexr66noqOop6SfqKOfnqCZoZydoqSnp6GelJuaoKGlnqChnpajnZSQlpiboZqflpORlpSin5qenJudoZ6kn56VnJiPkpOPjImTkJefiZCWkZuUmJGRlZaDjJWXlpKLjIh8foR/amZoYWtsZ251cnJ1cWdeYFxSSUU/Ojo6Nzg0ODw3NjU0MjMzNjU3PDo7PDs9QD4/QD48PTk5OTs6PDw+QkRFPj49QENDQkREOzo4QkJCQUNAOTJbk4iEjZGKi5GRlZCSmp2fnJOSmJSdnZqXmpW2sbm1tb6+tri1uLO8vMTEusPHwb+0s8XFxr/CzcfLzsvLx8HDxsfIysXExcO7vLzBxcHFxL/Ew8bGwLGUxMjSu4tmVVZRVmairp1OVldYW2eHs7eusK2ypqqqqqutrKmlpZ6pr6uyu7q4u7e5t7O5uLOurLO0qrC1ub3Bur6+vL60urm4u7qysbS8u7q7s7Oyp6Smq6uioaCdmpudmpyXmpuenJygnZaclpuZnZ6io52UnJCNiY6OkZ6bnJWNh5KLmJiWmpybmJybnp6cmp6UjpiYmpSRmZeeoZWYmpKXlJWRlJqYk4+TnZaSi5F+enx/dWtsbmRvbWlxeG96amlhXWdhUUZEQTw5OTc2NDQ6ODQ2NTMzMjY1Nj05OTs7PT47Pj49Oz05OTs7Oz89QUNBQkFAPEBDQ0NFQjs4OUQ/P0BCPzsyV5uQkZCQh4WSjo2IjZCTlZGPjZSUm5STlpqRs7e4uLi+u7C1sri2tbbAw8G+w8LAvru+u7u8xMzEzNDLxsa/xcfLyNTLysjGv7u7vsS+xcjGxsTExLm0wLazvsbIsIBaVFNQmbGRR09WWXGOprywpa20tayvpaWjp6SgoKWZqrSxvsG+urm6uLW0srG0tLO6wL7Av769u7u9vsDCt7a3tru7sru+ubi3u7a3tKyoqamrpqijnpOampyYkZKZl5GRmJqXnpiWk5acm5+elJOJiX6GiIuWlJiZkYmVkZeWlZmbmpaYl5idnpyhmJWZmZyYl5ybn56jnJ6WmJeTl5yZmZyUlp2UlpOJdnl5e3dua2lodlpncnhzeWZmXmRbUlhJRj87Nzg4NzYxNjk3NDQzMzM2NDY7ODo8Oz08OD0+PDo7PDs9Ozs+PkRBQURCQEBBQkNDREM9OTlCQD8/QD89MkyWmpaSk4yKmJCKi4yOkpKKiIaNkJiKj5CUl7O7tba/vb2xtrjBvby0uL/Bsbi3vsHFvbu8wsbJv8jOyMHEwcfKysbKxczIzcbIxb/DwMvNz8rGxMPEwsW+uL3AwsLDoW5VSo22hUVLWn6hoqe0sq2suLWzrKmjoa2prKetn6y1tL/Cvrm4vbawrausr7W0ur7Fv7u8urO5u7i5ubWtsLS9u7G/vLiytrmzubu0ra2orKyqqaeXnpualY2MmJSTi5WWlJyZl5WWmZKYn5mQiop+iYqKkY6Vl5OUn5mWkJSZmJmWmJOUm6GeoZiYmp2ZmZaenpibopqdnJuYmpuZlpeXlpyZlJyYfoB4eXV1ZWZpamheam9ueXhjYmFgXlhXRkU4Ojg6OTc5NDQ5NzY2NTEyMzM0Ozo9Pzs9PTo6PTs8Pjo7Pz48QkBDQkJFQj0/Q0NDQ0RFQDk6QkFBQj5CQTVCkJeUlZmSj5qQjpKRjZSVi4qHjI2UiImPkpq2u7S8xsHEwr3BxcLAtLO9v6ywr7rDysPCvs3IxbfByMW/wcLIy8rCwsTJzM3Oz8zDx8bIycjIycfFycfIx7/Ex8TEyMvGrHNfdl9LV5a3ucC9vrm8ury6vKytpqm7urm3v7K1uLLAxrq3t8Gzsa2tqau1s7u2w7a2vbWxt762s7e4sLW2v7uwvbq0q7CxsbO8urOzrqutq62xnaOjoJqQjpiXlZCclpaYlpWSnJmTm5+clpGUjpWQiYyQlZOUm56YmZKSnJedlJmSk5aZmJ2VnJ6do5yVnZ+TnKKcnKCfnaOemJSVl5ebmpmgkH99cXRxb2NhZ3Zpamp0bnlsXWRbVWBZTEhDNjw5OTg4OjUzOjY2NDQxMzUyNTs6PD47Ozw9PDs8PTw7PD49P0E/RUFCQ0M+QEFARUVERUE7Nz5DQkI+Q0I4O4+akZaalJKUjZCUlI6VlI6Pi4yJk4uIkJObt8C6xsXEw8zCwcS9vrWvt7uvr7O6wMfFxMHMy8W2ucDCwsTHytHLwsPExsnFzNDNx8zJwsLHwsvLyMfMyc3FxcXDxsXIzNTMhklMV6DJwcjNxsTBxMfBvL60sbCwwr6+wca/vri2w8K6urbAvrWyrKmvsri+tMC0tLi0t7nEua+8vrm+v8K/tbq2q6qsrq+wt768trSura2utaSlqKimmpycnZyeopydmZOQkp2VmKCdmJiVmZmZl46MlH2QkJefmZmYk5GToI6Nko+VjpCUlaKdnKSem56elpyjoKGipKOkop6amZubnJ2enIN9cnx4cGdga2p3bGlmdW90Y11iVFdVU01HOjc7OTk3Nzo3NDg3ODQ1MjM0MjU7Ojk+Oj08Pz04Oz05OTk9PEBBQEVCQUJBQT9AP0RFREVAPDk+QkNCQENBOjSAoZeUmZiVkImUk5aTiZGMlJGOiJaKi5CXnMXLw8O8wMPHwbm9vbu4tre3rrK3uLzAwsDCx8bHurzAwsTHyMbSycHDw7+/vsTLyMrLyby8yMfJzcjDyMnJxcXCw8HCxsbGysx7R4XOzcfM0MW2v7/AwLq7vbWzs8C/ub/DucC3u8G8uri7ub27srCvsKy5wri9ube1t7q9xb24xsjCwcLGwr28tamurrCwr7O6t7m2sK+tr7OppquprqannqSlo6OjoqCblZiekZecl5GRlZeZlZmRlJiSlYyYo5qcnp2FiZ+TfJKWlZKUlJennaCipJ+en56foaGkoqKjoaOinJ2fnqOhppl5enl/cnBmZWdjamRia21ub15ZXVZWTlBKRjk5Ozk3Njc3NjM3ODk1NjEzNTI3PDs8QDs/PDw6ODo8OTk4Pj1APz9GP0JBQz89QT5ARENDQTw5PENBQ0RBQDozbKKdlZedlo+PmJiZmIiSjZGVkI+Vjo6TlpbKy7u5urnBu7q3vsG8vLu5sa61uri4u8S6vsC+vru8wMXBxsK+xsK5u8O6uLm8vsHHwca7ucjIw8XEwMPBwcDEwcK+vcHAv8DHpUqf0szFydHBr729uLm7u763tLG5vrO8vrG5tbi7try0tbm2uba5t7GtusG6vMG/t77Ev8bDw8fHwrvAwr/Cv7iys7O1tLGut7S3tbSxrK2xp6Wlp7CtqJ+nq6ajqKWmpqCgn5SYmZSRkZWUl5OYl5qhnZ6hnKGdoaWglpSbkZeXmJqTnpmZqaSlpKWdoqCanqCkoqOcoqGjoJ6cnp6ppaiVfXuDeG5mYWRiYWNjZGpjZ2NbWlpdWVFPRT07OTo7Nzc5OTY0OTk6NTMxNDUyNzo7OkA9Pzw8OTc3Ozo5Ojw+QD8+RDxCQURAPz49QkRCQkI+OjlCP0FCPT44NVmfnJiTmZaRlZiYmpeQkZCQk5GTlJKSkpSUxce4tbq5wrm5vMPFwri7ubGxtry6tbnAu7u5tre0tLW/u72/ub66urTAuLW3sq66u7fAt7zKz8G7v8C8u8S9usDEv728uLzAxa9Pmc3EwMHJv7DBv7q3u765tbi0uLy0vbi1tLCzvLG3t7i/tr25vb65t7q+u7/Axb29y8PGw8TAw762ubq2v7i7v7y4trOyq7CwsrWzs66sq6emnqeurauiqKumpqqjp6iqo5+Ym52bmpicnJiXnJuhpZ2anqGhoKGmoJqbnJiboJ+dnJ+coKiho6SknaKfmqKgop+el6Shop+dmpieqKWhi3x5iH1xZGFiY2hqZ2dpZWleVlZUWU9TTEY4PzY7Ojc3OTs2NTo7PDYzMTM0MTc7OTg/PT47PDs3Njk5ODo7PUA/PkA9PT9CPjxAQUNDQT9DPTo2PEBBQDw9ODdJlJibj5OUkZWYlZGWkpWRkJGUlZSTk5OYlcHCwLq8ub62uL7EwMKxvbqytLO4vLW3vMC8vbS0sbC1t7W7wbi+ub+8vLe0t6+ut7W5v7vB1Y67v7vDtbrHt7a5u7y4ubW6xMiqUJHJv7+7wb65xr3Cv7zFuLa3tLi2tru7uba0t7q1s7i8vbm/ucPAwLu5vLu+vcjEvcfEw7rAvb62sra4srm0usLCureysaysq62yr7Kur6ijpJ6rrKyqpKakpKiqoqemraihoaGmn6Oiop6bnKKfoKOdnJuhn6KgpKCem5eZn6GdnZ6eoaWkoaKioZ6ho5yinqCZnZijn52eoJqZoKKmnYR6g4F5cW1mZWZwamVraFhZT0tLS1JKTEhEOT44PTs2Ojs5Njc8ODk4NjA0MzE3OTk7Pz0+Ojw6ODg5PDg6Ozs7PD1BPj09Q0E8P0NDREA/Pzw6Nz5CREE/QDg4P4mYmoyMkI+Tl5WMkpCakpGXmJaUlJKQmZTDvsbBwby8uLi6v7a8scK2tLyxtLa4s7q9v768sq2vrLGwt7y3u73BxLm3t7a1ubm6u7+8z8V5rMy9x7e5uK22tLe5s7WyusXKnlKIyr+/vr28v8jDxcW+xri1srK9uLi4vrq6uby6urS3u7q5v7zEwL+5uri/ubvFxr3Fw8Kyur27sa+2uLO3s7q+wLm2rLGrrqmqqa2qqq6mpKWnrq2ppaOio6GkpaWmoqato6Klo5+ho6Gcmpyhn6CloaCenZygnaWgnpeVmZ2fn52gn6KmpaCknpybn6Ofn5mcmZ2epJyWnKOcnqGcppZ+f4d9a25xZ3FrdGZibmBcVEhLS0RKQ0NHPzo7OD48Nzs7OTc4Ozc8PDYyNzUxNjk8PD08QTs8Ojs6OT45Ojs9PUA+RD89PkRAPz9BRkQ/Pzw9OTc/QUNCQEI5Ojl3nJiLh4uQkpOWjY+TmpOQnZiSkY2PjpiSvbfHvsO+vbu+vL22uri9ure9s7OwuLi1uby7wLeqraSusLi7sr2+u8S2tbi1t7++xLzCxNeudoS9yM/CwLiutbW7vbe5sb7Dx5NYg87Dwr++vbzHzMfHxMe9tbW2wb27u7/CusDCv7y2t729vcHBwL+8ube8wru3v8W7wr++tbe8vK+vt7awtLO6ubq7r6mtq62rrKaqoqeuqKWqra2vp6Sgn6ajnqKjqKOjq6Oiop6dm5ublJaZnJyfpZ6fnpmYnpejoJyXmZqZmqOjop6jo6egpqCbnaCjnp2WoJmcoKCblJegn6WcmKKQgYaAcmZsam51b3hjZ2JcY1FLVUhFRUNHQzw7OTg9Ojc6PTo4OTs3PD01MzY1MDY4OTo8O0A9PDo+PDk+OTk9Pjs/PkM8Pz5APz4/P0ZEQEE/Pjo3P0BDQz9APTo4ZqGYj4uNlZKVlY6PlpmVl5uVjoyMjY+bk7m2wbS/vLm8w8C+wLq1trKywLmvsry8sLe7tru8qqqjsLm9vLK8vrzFuLG4ubzGycrCx8nRmXN2sNHRzMrEtbq/xMi+vrS+wL+CZnjLxsK+wby/w8zKx8XGwLm9vMS/v7/CyL3Hx8XFvLrEv7vBv7rAvLu7wMS9t7nCub69t7S2uLqur7WxsLCytre0t6yurKqsrKuoq6Gms6qlra+trKippaOkp5+io6Onoaeiop6cnZyamYyQlpeZnaKZnpuVkp2UoaCdmZ6fmJimpqKfoqKmoqeloqCko6GbnaCbnKKfl5WVnp6kmpafiYGDgnRvbGx0bGxuX2NeYWJOSE4/RUA/REM7Ozo6Ozo4Ozw6OTw+Ojo+NDQ1NTE5OTo5PDtAPD89PTw4PDs6PDs7Pz5DPkI+QD89Pz9FRUJBQj87Nj9CRUQ9QUE6OlmfmJOSlZqVmpOQlpeclZuZlpSVkZKTnZm2uLaxuru6vsG5uca7trWypb69tLbBv66zvbS4wbGwsbS7xdDCur68xL63vMC/yc/HyMrKwod1dqfMzMvNysbCw8vOwby4vLqwfXdrvMjEwMC/xMDKycPDxMO5w769ub+8wsbCyc7Hxr66xr26v7m3wLm5vsDCvrW0vLi2u7CvsrK1r7Cvrqyus7CzsrirsbKxqrCrq6yrrLatqKyusqarrKmpoaWgpaakrKSmoaChnqGgnaCMlJeTm5+mmZ6emZOYnZ+gnp2eopuYp62ooqSgoKKqpqmhqKGlm6CgnZ2jn5SYmKKdp6Gfm4J7eoh7bW14fGBxZFteX19UST5DRUlCQz5DOz42OTo7Ozs7Ozs7PT05PTU2NjIxODo5Ozs6QTs/PDw+Nzs8Ozw9PTw9Pz5BQUE/P0FCQUVDQkRAPDY+Q0RFPkJEPztTmZuZmJ6dmqCalpyZn5KdlZ2boJWWlJqYur20sLu8wcTCv8XGura5sqO7vbS3xLuwtbq2ucS4tLy3u7us28O+tr7Avr66ppyqs7fDwKZ7eXuexMbLyMHDwMDJysG/u7mxo5GFeq/IxcS/wMG/y8fCwMjAusK7urO6usG+wMrOysS9tby8ub+5ubW1s7/Avre0s7S4rbeqr7CwsrGvq6+nr7ausrG5rra2uLSzsLGttrS6sa6srranrLKsraSjoaenqLKrqqWkp6elpaCml5ujn6SmraKeo6KanaWiop+foaWenrC0sKSlnp+kqaevp6mgq6CiopqipJ2anqGmp6+psZWCe32Cem5zeHRocF5cX1xaUUVFRE1JQUQ9SDs7NTk7Ojw8Ojs7Oz0/Oj01NDUxMjc4ODs8O0I8Pz46OzY6PTo7Pj0/QD87QUFBPj4/QkBBQkJFPjo1OkFCST9AQkA7TJqdnZ6fnZienZmampySoJWbnp+blZGRl8W+urbDvMbCvr/Ixbe1uLe2ubu0r7e3srWzt7m8u7a7u8W3ba7Ovba5wLyqfW5obm10gpeZdHp+mr6/xsC5wLy+xcS9vbiyrqSnkpKdysPDvL2/v8PDvr/HvLy/tLSutbW8vr/OzcvCt7K4t7e9ubuxtrLIwLu2tLGwt6yzqbCtrbS3r6uuqrG1r7Gvt7O6usC/tre2sru6wLWyrbO3rLC6r7KloqWrrK+5s7KosK+xr6qiqKGkraitrLOun6inpqWmq6Sknqaqo6ayuLOrpZyfp6anrquqpbClpaWbpKOYn6exrLW4sLKOhHl/fHdtdntxb2pcYGBZU1BBRklHS0BFQ0g8PTY7OTk8Ozo6Ozo9Pzw9NTU2MTM2OTg8QT5AOz1AOzs5PD04Oj08QD46Oj49Pj09PkBCQkJBRD03NDU9REc9Q0I/PEWUnqCgoJyXmpiYlZmdmZ2fmp2bnJaRj5LDwMK9wrzEvLy7xbu3s7e2tru7s6CWtayvsbS0tLa4ucDNsnaCs722tcGkhmlaXmBOU1tccHV5hKO4t8K6s7u3u72/uru7r6KorZ6kgb7Fw768v7u7uLbBwrW/urWur62wvcC5z8rJw7GwtbS0vbq+urq7ysO7uravsL2xuK+ys7C3vbaur66wt7CsrLK2vbzEwrq9t7bAv8G3tbC2srGzurGxr6err6u2v7e1qbqztbmxp6uop7ausrG1uaisrK+qr7CqqKessayytr20saykqKuoqKusq6i2qaaonqadmKOuvLG7wbSmiYF7gnpzdnZ3b3JhX2ZdW1VKPT8/R0c9R0NDOTo1Ozk5Pjw8Ojo8Pj4+Pjg4MzE1Nzg5Pj9BPzs6Pz08Oz09OTs8OTs6Nzs+PT1DQT8/QUJEQkE8ODU4PUNGPUREPzw/iZ2en52Xl5WUk5aZnpubmpuYlJ2Uio6Owb7Dwr6+vrm2usCxtbGzt7fCtbOrrbOoqa61r620trnCyaeEeIuhsLWcamZnVllfSUlNUFRueYmpsLe+ubK1sry5vLa5vrWWqryrsXesysTAvb+5s66yvLquu7Szpquorbq+uMvCv76sq7Cvs7q3ub67wMXBu7y3sLXEtb+0uLu0u8PCs7a2sbisqaWrsr23v7+7u7exvL28trGvq6uprbOvsLCrsLSpuMC2sqm0tbC3tq2spqu7s660uMKwsbG1sbK1saywsri4ubi+tLGzrqyxramvrqqyuK6trainoZ6ptr+4ur+wlol9gHxxdXd0d3JsYGNhXF5PSUI/PUlERk1EQDc3NTs6OT48PDk4PT47PT86ODMyNTc2OD8/Qj86OD4+PTw5PDk7Ozo8Ozs6PEA+QkI9QEE/QkI/PDs3OjxBRD5CQz8+QYqgm6GdlJiVlZKYmpyWm5WalY2bj4SIhru0vb+7vLm3s7y8rLOytLS2wLXAr7Kzqqqxt62pubO3v8aph3t2jKGYX1NDWVVIYmpVT0VKY5Ckrq+2urW0sqy8ubi1uMG9jaK+r7B2p8vCv7m6ta6lrLOxprCtqJ2gn6WttrXCt7a0paiqqLC2s7K6tbu7u7W4trC1xLK+vL+8ubrFybq9vraxp6SeoamxrrW5trKxq7S2trGopp6gmaWmpKynq6y2qa+6sa2kpq2lq7GrrKmtuLawsrjBtrGxtbGvu7ayt7W1sry1urKwsbKutLKqrq2nuLWyta2uqqiosrq9wLa0qY6Ce393cHxvdnNuY15nWV1dU09OQT5KQkBKSkA2NjU7Nzg+Ojs4Nz4+PDs/OjkzMjc1NzU8PD48PDg+Pjw8OTk5Ozs7Pjs7OTw+P0E9PEJAPz9CQD47Njc6QERBQ0E/QUKJoJ2loJSWmJiVnqCcl5uYmZGMmYmDhoS1r7S7u7S1sLG2uq6wtLOvtbq1urC1s7KttrqvrbyzuLi/tJCBeYiQbk5LP2VZQk94gZNoTUJehLG1s7WytK+su7q4trm/xXeKtKeeZqq/uLWysa2tn6Smp52kpZyWmZmZn6muuayrq5+lqKSrrq+nsKuvsbGtsa6usLmwtLy+uLm4x8W8vLu4qaKcmJufp6assq6zqaapqq6popqXl5GcmpijnqKir6ekrKaompqemqGnp6anqa+2squ0tq+qsK+xqbm2sbWxrqy3s7avrquuq7S1ra+rq7GtsbKoraurs7W3ur2wq6GLeoJ5cnZzbXVqbF1ca1VdW1BOSERHTUJGTkY4NjY1OjU6Pjg7OTc8PTo7PTo5MjM2Nzc3Pjs9Pjo6Pz48PDw6Ojs5Oz47PTk8Pj1CPDtAP0A/QT8+OjU1OkBFQkRBQEJBiJ+ipqGYm56dmqWpmJudmpmUjJmHhoeGrq2uuLmxsqiur7iyq7CwqrK1ubm+tbK4tLm6trm7tbWzt7aVjIiEfFhGQU+HWEpKWXiOg2NBVKO5s7SysLGtsLm4tru3u72So7OupHSssKmrraujqKGdnZ6Xl6CVkpaXj5ifqK6ko6Sgoqaio6mpoaanpaqtp6ynqKesq6yyu7SztLm6trK2ramgmpaWm52fq6yqr6Oko6GpoJuTjo+QlJKSmZaanaSloJ+ep5iVkpSZnqSjoaWqrK2iqaqppKmtrqW0sa6xraqprq+wraWmqqSos66trKmmpqmrpqqnq7Ksr7Oxq6mWgX+Bd3J4aHV0b2VVYWRXXVFPTUhASVJETUM9ODg3NTo3PD46Oz04OTw7Ozw7ODI0ODk3ODs7PDs4PD0+Oz08Ojk8Ojs9PTw6OkA9PDw7QD5CQEE/Pjk1ODs8RkFDRD9BQYijpqKjnqCfp6Coqpufm5yZmI6Xi42PjKqpqLGvsK2lp6ayr6mmq6CvsLu1vby4wMG+vLy8ua6sr7K8qZiZlWhNQFN5cVBJSUtonIBaRVSvu7Gss6+urK22trK0ta6pp5+am56fpqieoKipn6GnlpuWl46dlI+Qlo2Xm6SooKCioqGlpZ2jo6CepaCkrKWmqKSio6OrrLOuqa6urqeqraisoZyamJmYm6qoq6ufpqKbo5yVkIyPkJCTkJeVlpifnp6bmaaXk4+Slp2ioKWipqSnoKKko6Ghq6uksq2qrKyno6yuraufoaKkpK+srKmmo6KqpKqqpKmrpqmsq6ahiHiDfHZ/emN3bG5dUWlVUE9HUE1MQ1BRQD47PjQ5OjU7OT07Ojk8OTk8Ozw8OzkzNjk5Njo7Pz06ODs6Pjw6PDs5Oz07PDw9PjxAPT88ODtAQEE/Pz45NDk8N0FDQkQ9QEOOqqSjoqGinaulpqimoZ6dmZ2PmJWTkJWnpKGmqKmlpKChp6uhnKKbp6u1sry9wMLCwL7AuLSnpKyovcKqpbxnRFObf1FYSUthSlaOYmVkgq+1qrK0rqqrr7Cys62lnZGXk46XoJ+ioJyjpJ+eqJSblpeMl5GNkJeTmJ2jqp+fn6Cjpaicn6ChnKKfo6ionKehoKSfrKisrKCpq6agpKimrKOenp6al5qrpqqxo6WonqCclZOQj5GRmZCWlZiXn5icmZukmZeUlZqdoJ2nqKWgo6Kho56doKmqpa6upqipoaKqrqqnoaCio6msq6eppqShqaKlqaalpKKmpKijkn58f3V2fW5re2RoVlJkTkpIR09TTktOSDxFQDwyPzg1OTs+Ozk5Ozg6PDs7Ozk5NDg7ODc7Oz48Ojk8Oj07Ozw9OTw8PD49PUE+QEJAPTc6P0FCQEA/ODU1PDpAQ0BEPkFGlq6koqWeo6KpqKipqqWmnp2imJiZmZWbop6bnqOioKOgoZqgmJeXlqGorK62t7q5ure3u66ooKGpoKrGv8qfT0FzmHNQbkpMY2Z1dGBcYnORsq+us7WqpqyropuZlI2RlZaYmJyfoqKcnaSemqSXl5eWkJKRkZOal5ugpKqeoaGepqeqop+gp5+dn6SnqZ6jpp+qnaqtqq6nqLClo6Smp6ymoqWimpmer6iusqulqqqgm5iYmJWTlpqTlZWalpuXl5ihnpyclpuhm56ao6eln6GioqOdm6Gmp6aoraOppZ6kp6mkpaWhpaSsrKmmq6eioKSjpKenoaCgpaKmoIl7gH13eXxleXlgYlNWYUhJSktTVElTUU05P0I2Nz02NTs6PDw5Ozs4Ojw9Ojs4NjU3OjY5Pj0+PDk5PTk9PTw+PTs7PDo+PTw/Pz9APT03Oj5AQEA/Pzg2NT08PkFCRkBAR6CupKaroaOqrK6tp6ypqKCipp6bm56aoJyalZmfn5uen56WlJOXk5KcnqSorq2sq6uvqq+pnpeepZylxsaMV1NKZqRaZn1vcltRa2NcZmJgbJG0sLC4rKahnJ2alJeamZCOkZWRjI6Nk5minJejmZqXmJmUmZiWnZufpaapoKajnqeurqumorGjmqSmpqqioaqiqaSosquxsqu5qKarp6urqaysp6Ggo7GusrG0qrKuo5mcnZ6hmJubmpiZm5SWm5aZnKWhoJqjoZqcmZ+kop6gn6KmnZulpqWkpaijp6OepqOinqaloqWlqKykpq2noJ2eoJ6gpaGenqWgppmBe4F8dnZzaIJsZVtTWlpNUUpPT1ZNU01CNz5DNzg9NzY6PDw9Ojw5ODo7PDo7OTc2Oj01OTw7QD03ODs3PTs9PT06Ozw4Pj09QD5BPj4+ODg8P0BAPT43NTg9Pj1BQEZAQUihqqCrq6GkqquwramtqaelpaWkoKGfnqWXl5SYmZ6YnJ2blo+VmZKRnJihnaqip6Cep6Gln5ySm6Kan6qjjHlVaXJ3dXBjd3ZYV2NgZGlaWldnra6sr6efnqKglpCTm6CbmZeSk5+coaObnpuWn5qfl5uinqWhnqSfpKitraisqaSstLe2sKe0rKKtraOvpaSmoamorrWzsr22vrCssa6tqaq0sbCoq6iztrizuK2ytKSgnaWgrKGhoqGgmpiWlZ+bm5iloaCeo6GgnpucpaCfnZyhqJ+fp6meoaOkoKagnqehn5ymo5+ipaOooKmrpZ+dnZudmqainpyjnqeQgYKAfXh2and1Xm1bUmFJUlVIRlVXSkNNRz1LSDhGPDc3Oz49PDo8OTg6Ojs6PDk2Njo8Nzs+PT8+OTc9OT47PEA8OkA6OkA/O0A+QUA9PDk3Oj5APzo+NzU4PT0/QUBEQEJGnKueqamipamprqimqqWmp6aoqqGlpKOmkpOVmJacmpqcmpWTmZuNk5+ZqJ2un6eenKGdnpqZkpiem6GhoKR/b4JwYGNYTFtSWkxMUVlSSE5OSJmsqqmkn5+ZkpKUmJiWlpWMiIuOlZ2cnZ2el56Zpp+gqKWxqqeuo6uutrC0srGutri9v7qttbSwt7CutKmmpKWsqbmztbvDvMPBtrq2q66xubi8r7OwtcK8t76zs7WirKKpqLKpq6inqJqZnpqqp6CZp6Cfn6iopaSenaqiop6bn6igpKetmZ+jnp6nnqCmnpycoqGbo6KhnZympaWkn6KZnJukn6CboJyjiYWFfnZybWl3bWhtXFhcQ1dOSkdNR0NGTTw+TD40PDk2Oj0/PDs6Ojg4PDk6Ozs8NTQ6PDg5Pj4/Pjg4Pzk8Oz0/Oz1BPTo/PjxAPj8+Pz08Njs/QT07Pzg1ODw8QERCREFCQ5WqoKapo6mqqKmjoamgpqinrK6lqaWpqpSSl5mUmpqanJiYmZyamJmqoLGit6Swpp+enZ2XmJWZnpuco56ciWJXXmVgV01RRz0+QENEPz5CUnipramqpZ+en6KjnZ6dmpyblJOVlJ6dmJSFnZqgmqukq7KwubKysbKxur28vLm2uMO+v8K/tru7wMS5vbusr6exrbHCtrjCxsDIysDKv7C5ub25wr64s7vGxL3DvLezqrOtqrO0r7Ouqq+jnayotrGto7CmoKOwsa6wpKWvo6GgmqGmoaSqqpmdoJmao6CmqKGcnqKemaSenpiYo6OhpJ6mmpuipJ6fm5ubnIeGgXx0cmtrdXJxaFZcUUZVSERKUEk/RUE0Rkg5NTw+Nzs8Pjw8Ojo4OTw4OTs4Ojo4Ozw3Oz49Pj02OEA5Ozs9QDw9QDk3PD07Pj0+PUI+Pjc6QUA+PD45NTg9Oz1DQEFDQkGRqqGlqqelqqimn6KnnKasp7Gyq62jqayVkpWalJecoqGbnqCinJ+psqu7sr+rr6ylnqCgnJyYmp+gmqCflXxfXmVgUUZEO0M/Rjw+OTZOfqqzp6OjoqCepaumnpiclJGZnZmVjIqGiIZ4bYigpKKrrLS8tsO9vrO7wcPCxcC/wsbGxcPIwsDFyM3QyMvDsre1vrK+xbu+zM3FzMzM0se+v8DCvsfGwrfDysrDwce/urS6u7W7t7C2sqq6sq67uL+7uqu4rauquLu1vK6uuKOmo56mpaKjqaaZm5+Zmp2nqqegoaGkmJSjlpSZkZydn6Sep5+en6KdmJmUmJSIhX56cmtkaW94a2VZW0ZLTEVEVE1FQ0U3Oj86NTQ5OTc5Pj87PDs7OD48Njo9OTw9OTw9Ojs9Pj4+NztBOj45PT45PT44Nzs6Ojs/Pj1CPj83OkFAPTw9ODY2PDo8QT9BQUE+kqugp66ooqulpKKipaGlqquwsq2upKmmlJWWmpaUm6SmnaGqp6KrrLy8v8PBsrK4p6Ghq6qhnJ6hoZ2bmn1yaWFXTkU+SVp8b2FBPVyOrqygmZubnp6Zl5eYko2Pl5eTjo2QjIKDgndycW1wj6atrrS5xbvNx8u+wczNzczHydHMzMzHycXGzNDS1c7Tyb3Av8O7xsXIxdHTzdTQ09PMysLFxsbKyM/AydHMx8bIxsK8w8G/v7+2vrOtv8DDw8fFx8Svv7myuLzEwsK6vLy1rqenraigoqmlmpagmpmdqKupo6SknpePm4uQmYmVmJugn6OdnZeempOTi5WPhYF5dHNlYmdyb2ZeWlpDTkxERlBJRENANTU1ODlCPTY4OkE+Ozs+PDk+PTc6PTk6PDg8PDw7Pz8+PD0+Qzw7OkA9Ojs6Ojg4ODk7QT88QD8+OTtBQTs7Pjc4Njo8PkI+Q0FAPpOvn6ivpqiro6KloKampKuoq62qrqKqo5Kcl5ebmJuirJ2frqalsarFxszOzb+wwaikqKytqqCdo56cnpVpZlxUSURAP0uGnqSYg6CyraOenJ+amJeUkpSWkZCPjIiEg4iHg4CBgYB5cXJvbHmktrq5vsvB09HTyM3O0dPR0tHQ0dHNzs7Qxc7U1djS183Gx8nMw8XKz8rT19LX0tXW09TIzMfMzcrTzc7TzcbJysrCxszHycnGv8Ozs8jFy8vLz8fKv76/vcHGxc3MycnAw8Cur7OonqKqo5qTnpyYnqaprKSlppaXipWFkZSHkpKSmZualpiQm5aQjIaRi4B7cnV2Z2NndmpkVldRRE5GQElRQz5CPDoyMkE8RTw3OTxCPTs9Pzs7Pj05Oj48Oz44Ojk5Oj86Pj1APkA8Pjs+Ozk9PTw5Njo6Pj08PEA/Pjk6QEE6OT44Ojo6Oz4+PEE/QT6QrKKiqaanqKSfop2qqKOso6OnpqyiqZ+To5iWn56dpK6bn7CrqKyxyc3U18/Gu8esrbO3rK6jnqOinaGbYVNMSkRDP0NSsNK9sq+mnJycoKShnZqUk5WUiX14cWtlYmhyb3F7hYqAdXBucXRwhbPDvsXR0NfW1dLWzdTW19TT0dPU1NPP0sTQ09bY1dbSy8nO0cvGzdHK0tXW2dbX09fYztLKz9HMz9DM09DAycjKxMzMzM/PxcfItsDLwNLNzNDGysnAxMPIzs3Q0c/Ny8jNuLe7qJ+lq6efmJ6jnp2qpa2pqKiSlYiQhIyRho2MiJOVmZCWjJiSj4aHjIR9eHN2cGNgZXJjXVJcSUpHQUVJSj47QTg9NTU4Njs4Njo8QD07Pjw7OUA7OTo8Ozs8Nz09Ozo+Oz08Pjw/Ojo8Ozs5Oz89OTU7PD48PD0/Pz46O0BCOzk/OTg7PT0+PzxBQEQ8hqugnKegp6Oim6CbqaSlqaCfoaGmn6ifmKSimqmmoqarmqOwsamotdDU19rSx8bLtLXBxbG1qKGkpaCioVlJQEFEQUZRdrKvppqUl5+cmqCgnpucmpWJd2ljYV9fYF9eX19dYWx1c3Bwb2xycXWSxMjH1NbX19bT1tDV1NrU1M7P1dTU0dHM0c7T19bT1dDP0tPRydPRyNDY19jR2NLX2dTVzM/Pys3Sy8/RwMbDyMbPztHR0sjMzcDLzcbTz8zOyMTLx8fJzMrU1NHVz9LM08K5xbGlqLWup5uoq6Wdsqiws62sk4+TjoiLjoOPi4SQjpmNk4+Zj4+ChYx8enFzdG1iY2ltX1ZQX0pKQ0ZDUk1APD40Mzo9NTI4NTU8PEA8Ozw6OTpAOjg7Oj46PTg+Ojo8QD08OTs9Pzk6Pz07PTw9PTo2PD0/QD08PT0+OjxAQjs5PDc0Oj48P0A9RkFEPYKknKClnaWlo5mcnaSeo6OfnZ+doJqnnpyhqZ+vraqqq52lrreoq7fY1NXZ2dHO0L+8zMm2vq6mqqiho6tlQzg9PkRYgqqon5eVl5manJ+dmJyckn1xZWNiX19hX15hYF9gYF9gZW1wcG5rb3J3d5zMwdPV09jY1tnR0tLXz9POy9LN1dTRy8/N09bS0dXNz9XV0cXR1MrQ1NXWztPR2NfX2MvIzsTJz8zKzMDKwMnKzs7Py9DOzszPz8jM0NDLzsvDysfJzcrM0tPN09LR0NDKvci5sK67ubWrtrCtqLits767sZqPoJSRjo2IjpCFkY2ZjJGRlY6RgIWJenZvcG9rYWRucGFXXFpJRkZETVhFO0A9MzM8PDg3ODU1Oz5APTk8PDg8Pjk8QDtAOj04Pjk4Oj88PTg7PkI6Oj08OkE9PTw6Nj08P0A9PDs9Pjg7QEE9Ojw4ODs+PD4+OkVCRT6Bn5mlp6Cfo6eam5+cl56eoZqdmpyappufpKefuLa1taykrK6+tLDA2NLX2tzWzs3Kw9LPwcGxqaytqaSxekhGQjtXjaGblZOWm56enpyTlpeUiGteXl5hZGJgYGFhYGBhXl9fXlxibXJvb3N0dnZ5pL/M1dHW1NPY1s7O08vOzsXOytLSz8fOzc7UzM7SzcvX1tDM0dTLzNDS08rO0dXS1dXKwMrCxc3CyMrDzMTGycrLz8vOzdDO08zGydDNyMfLxcfCxsrMzdDSx9DPzs7M0MXHwbi5vcPDvcO4srK+sbvDw7WqmKWhmJaSlZWSi5SNmpGUlI+PlYKJhnlxcmttZ2BgcWhZWGhWTUdMSVBRQjtDPjs2ODo4Ojo1Nz09QDs6PD05PD05PT06Pjo8ODs9OTtAPD47Pj5BPDk9Pj1CPTs3NzU/PDw/Ozw7PDw4O0FAPDo8OTs7Ozw9QTpFQUU+hJ6bqK2epKSqnJ6fmJKXm5+am56ZmaKVoamppcTCwb+7tbKxx8O4ytXW2drb2MzMz8jW1cTCta+0qJ+tl3hscHF5j5qNjJeVkJORkZWWlZCLfGVhYmJgXV5hY2FgX19gYWFgX11bXWdycnByc3Ftcnmlx9PPy9DQ09TKxcnJxsa/w8XPzsfFx83K0sjLzs3G0dLQzszUysfLzs/Hx8/Sy9DPxrrEv8bKvcPIyc7Fw8fAx83IxMzLzM/IxMTQycbCxsnFv8HHzMvMz8LLzMnHy9DExce7x8PIycLPwb28v7DByca5vaqwsqelnaKcmJCbkKOZl5mRlZiJj4J4b3Rka2BeZnFhW1dgR0hIR0lNVEc/Sj02NDM1NT09NDg9PT06Oz08OTo7OT89OTw7PDg6PDo6QD1APD09Pjw6Qz48Pz04ODk6QD4/Pjw7Ozs7ODo+Pzw7Ojc5PD49Oz49RkFDPYOgm6qupa6qq5qdoJeUjpedmpmgmpqcm6WysazJzcrIxL68uczMxtDV1dja29jQyc/P0dPIwre7u62jtn5og4Wkq5ONjZaPhYODg4F9hIR+c19bXl5eYF5gY2RjX11dXl9gYF9bWlxgbHJxb29rbG9vfbnRyMnKz8vNxLrAw7u7urq+ycbCw8DDyMrJyMrIwcXMxsjKzcnEwsvJwcHL0MXLyL+5wrvGx77Axs/LxMDDu8nHybzJx8XKwL7Cy8bFxL7Gvb3Bw8XMxca8wMnDxcfSxcHJv8rJxsjG0cPDxsOvxMvHw8q3v7y6tKmspKWYn5iso6Gmm6Ogm5V8d3N0ZmlaYW5tWlxYUkRMRkJHRUxERlNANTQzMzU/PDM6PDw7OTw8PDg7PTtBPTo8Ojs3Oz05Oz07PTs6OD4+PEI+Oz88OTk7Pz07QD48Ozk5OTk6Oz06PDo2OTw+PDs+O0NCRD5/pZypsqm0rrCdnp6YnImUm5man6Kfmp2ov7i8ys/RzMfCw8bNzs7M1c/V2tjZz8vSzc3OyMG1w76xr7ZsXnp9oZGKkpaGeoCFhX92eHVycF9bW11gYGJjZGRlZGBcXF1dX15gW1laXGJvcm9raWtwb3OPx73KxcvAxsKwtrqysrOyscK8vLy6uMHBwcS+vbm9v7nEysXGwr3GwLi7xMm/wcm7t7u6xsO/vMLOw8a+vrXBvcS7vce7w7q0vcbEwsO3wLa2vr+7zMO9trrIu7++y8PBxsLFycfJxtDGwszIssfJw87MwMXDv72yt7Cyp6ioubClrbCqrayUenZ3amRnYGhvZFZeWUpGSkZIS0FGQkZKQDk6NjU4ODU0Ozo7PDk8PDs5Ozk6QD46Ojw6Nzo7Nzo7Oz88OjxAPUA/PT8/Oz07O0A8Pj4+Ojk5ODk3ODo8PDw7OTo8Pjs7PjpAQEU+fqygrLWqt7SyoZ6fl5qNlJaan52mop2et8XCxMjO0srKycbNzc7RyNDG1dTV183KzsXJxcfBucW9q66mYGR1g5OLiIuEeH+Ghn9+hHt0dGNcXF1eYGBiY2JiZGViXVxbXF5cXl1aW1xeaHNxbWdnbnByeZ29zMDDusC4rbCxp6qtrKe4tLa0s7O0u7a9sbewta+yu8K8wcS8v7u1srq+wLjIubS7t8HCvbi9x8HEvLWvsra7v7TFt7u1q7m9vsC9sbu2sLe6s8a8t6+7v7W3tcW8vsPFwMTFxsfLxcDGxrvHy8DPycfDxsHDt8O9vba5vse/rLW7tbe2jnl0eGdnZWJrbl5WXmBGS0hISkZCREFFRT88OjU2NjYzMzs6Oz06Ozs6Oz44PEE9PDo7ODc5OTk7PDo+Ozk+Pz1APz5CQD1AOjo+Oz89PTk6Ojo4NTY7PT48PDo7OT49OT86PEBAPIi3pauzsby8sa2foJmUlJiXnqujr6qnpMbLzcjFyM3M0MzNyMnIysjKxNDN0s/NxcfBxsC/urfJtqqwmVtncIqPhYiJenh+hoZ2d4F8c2hdXV1dX2BfYGRhXmNlY19fXFteXF1eWltbXV9scG5pZmptbnJ8pMfAuLi1sKusp56iqaeeqqyzraqsqrSttrGzqa6nrLO7urbDubq6sau1ubu0wrqwwLG+vLu2vMe5w7atqqiwssC2uL2wsaexs7W7vKyutqautq67srGqubCuu667uLvAwL66w7/Gw8XAvMbBx8u4xcfFv8fDw7rExsK7xsnMy7O5wr27s4lzdnZraWBibGlZV1dbQUxLTUpFQUNARkE6OTo5OTY4NTQ6Ojk7PD07Ojs+ODtAPD05Ojc5Pjk7PDo4Ozs6Pj45QT0/QD87Pjo7PDo9PDw4OTg5NzY4PDw9Ozw6Ojs+PTs/Ozs+QDyKwKuouLe5w62zqZ2ZlJaZoZymsLWxt6bFztLLw8XBxNDHzcHDxr/ExMPDysLJyr/AvMK6s7W1w66qsJJban+Sh46Pe3h9iYV6e4SBd25eXVxcXV9gX19kY2JjZGJgX11aW1paXVpaWlpcZW5vaGZoaWtucoGturC1rqWkpqaaoKSgmZylq66kqKKrqqyrsKOmn6qttLaxvbmvt7Corri0s7y4tLyvuLm2srzBssGupaijq7Gys6i9qquoq62utbSmqK2hpK+psqaoqK6mqLessbO3urq7sry+vr7Ev7XCwcfIt77AxLfEw7+7v8TCvsTIzMq/v8PAwKmHc3RzamlcYW9kV1ZYUEhZUlNLRkZFPj9AOjc4OTc3NjQzNzo5OTo8Ozs8PDc7PTs7Ozw4OT44PTs8Njo9Oz89N0E+P0A/Ojw8Oj05Ojs6Nzc3ODg3OTw7PDs5Ozo8OTc5Pjw+P0E7jMKvrry3ucSwtrCbmZWcmKqpsLGztb2vxdDPzcPHubnLwcu+u8m2vcO+usq3wcPBtLa8trGvtbutqKuSZG2Ig4eLgHp9f354dH58c3dlX11cXF5fYF5fY2NhYmBhX15dXFpYWVtbWVhaXF9ma2ZkZ2Voa29yhaqlq6WenKCklJ2kmpeRoaKpo6Ofpaanpq2gnZykpq2ysLa3p7GtqKq0q7S6sba2rra5s7C6urG3paCkn6axqKypuqqkp6eop7KtoKinn5ykpqyfn6ekoKGxra2ssrSztLC1vLa7wcCyu77DwbG5ucKzwb7Atbi8vb68wsfFw8S/wMSghHhxbGJmYGtvYFRZX0hOZ09USEZLRjw9QD06Ozs4MjY1MzY5OTk7OTo6PDo3PD88PDs8ODg8OTw6Ozc4Ojo8OTg+Oj89OTg8Ojs+OTc3NzY3ODg2NjY7Ojo7OTo7PDg1OTw6Pj5AO43ItLa9uLrAur22oJ6UnaGmurars7O7s8TPycvDxri3x8DMv7jJt7vFuLPFuLO/wKy1vLKspa+zraGjkWlyhoWGgHx4dXNvbWppaXBpX2BdXFxcXl9fYWNiYGBgYV5cW1xcWFlYWFhWWFteX2RjYmVnZ2drbW+InamflZWaoJWaopiVjJ2hoqecoJ+kpaKnnpujnKCrsK2xtaSpqqqsrKS0uK23sKyztq+zta+wqp+en6OisqWmqrmtoqamoKitq5mgoJ6ZnZ+lmpqjnJyer6mrqKqsra2wsrivuLm6sLa8u7qrs7K5s720trGxtrW/tr3AvsPCu7q9l4R7c2tfZV5kZFhUV15JV1xLUEdKSkdBPD8/QDs/PDA1NTM1Ojs5Ozg5OTw8Nz4/Oz07Ozg4PDg5ODw3ODo7Ozo7Pzo9Ozc4PDo9PDc0Nzc2NzU3NDY2Ozc5Ojs6ODo5ODo7OTo8PzuJyba4vru3wcHBtKSkmZqkpsCyr7astLfFz8jIwMa7u8PDz765x7i3vreywrSxu7usubqxop6pq6eYno9tfoWGf3hybW9ta2JeYWZmXV1eXV1dXF1fYGFiY2NiYV9cW1taWllYWFdXV1hYWFpeYmRkZmZmaGlrco2nnJKTk5qWmqCVlZCboqGonpydpaeipZygoZuZr66ur7KhpaOuq6eitbCysqypr7OnurOmtqGjn5ujoa2joqq2q6Ojpp6lpqOWmZ2XmZudoJqXnp2dnK2hq6ijpKatq7KzqrWwsquyubSvqq+ysrO3s66pra6yuLG6trq9wLizsZSGenVmX2ZeW1lWU1pVS1tRTEpFSEtJQj0/QUFAQToyNDUyNDk5ODk7OTo9PDY9Pzs8Pjs3Ozs3Nzc+Njo+Ozo4Oj07PD06Ozw6PTs4Nzk3NDY1NTQ2Nzg1Ojo4Ojk5PDg3Ojg5PkA6gci9uL2/tr68v7OdpaOYpbHCtba9rbS4wczIxr/FtsHAx863wMS9s7m5sr+2sbm7rbK0r5+apKqglJqPeH+DhH94b3F0cWhlY2hkY1xcW1tdXVxbXmBhXl9fYF5cW1pcWllYVldXVlhXWFdWV2FkZWNkZWRkaGp2oJuSk4+TlZaelpiTl5+doZyWoaGppJ+fqZ2cm6unr7CrnKOkuKqhoK6otqqnqK2xpLiwpLego5yZmaqnoZutubCjoaScoqCgk5ShlJaWm5mYlpeclZ+pnqmkop2jqqqxrai0rKqnrbOwpauus7GwsK+vp6iosq6ytbC8tLq4rqOVgnp3ZV9hVllYU1JUS01eTFBMR0hMS0U9QD49Qjw7NzY1MzQ5ODg5OTo5Pjo4Pj47PTw8Nz49Njc2PTc7PTs5Nzk7Ozw+OTk6Ozo4Njc2NTQ1MzEwNDU2Nzk6ODo5Ojo3Ojs5OT1AOnbAvLS5wrG+t72unaenoqq7wL3Aua60uMHMx8XCw73FuMjMssHCwa68u7W7vLW5ubCvsKqcmaGplJGKi4CAfHdxaWxydHBoaGVkZmFcXFpZWlxcXF1eXVxbXF5cW1xZW1taWFZXV1ZXWFdXV1ZbYmNiYmNiYmNmaYCUkZOLkJKTmZeclZWbn5yflqCgp6akp6ignaCmoKqvpp+io7eooaGiqLOipailsKaxray1nqGdlpWpoqKUrbKxn6Ojnp6Ym5OLoZSRk5iYk5eYmJeep5unoqKapKWlq6SlsKelo6usraaorq+vq6iqqrOmpquvtLGvvLaxr6+gknt4c2VhXFtdWE5MUUhSYU1WUE9KTU9FQkQ/OT02OTo3NjQ1OTk7OTg4Nzs4OT0+Oz47PDY5Ojc7Njs3Ozs6ODU6Ozo7OzY8Ozg4NDc3NjMzMjEuLzI1NTY7Ojg7Nzg3Njw7Ojs7QTh4u7uxtb2wu7G3rJ6lpqy3u7zBxbqxubXEycnAw8bFx7bFxLPBv8Wrt7e9tr26u7Wyq62omZifo4uJdImIfnZuY2FmaWhmZ2lmaWxgXVxbWlpaWlxdXFtcXl9cWlpbWVlaW1dVWFdUVFZVUlRSVWBhX2BhX2BhY2RpgJGRh4+NkpCSnJOVlqSZoJecoKWiraalpaSko52qq6Wan6WxqqChnqWrnqiin66tqamuraKiopWYopuckKupsZyfop+fl5iTiZ6RjZKTlpCYmJScoaOdpKGilaCipaabo6uloqSqo6uupa6yqaalpqa0pqqorbO1tLm6sKqsnoxzcXBgW1dWVlJGUE9IWlxPUkpUTFNMRUdKRDg7Oz08ODY2Nzo5Ozo5NzY5Nzc6Ozo9PDw2Ozw4PjU5ODo4ODY1OTo7PDk3Pzw5Njc4NDUyMTIxLi4xNDI2Ojg2OTg1OTg5ODk7OUA5e7W0rLS7srCrsq2dqKevubmzwMm6tcCvxcjMusHKzMi1ybyxvcPJrbG4wbW8wLy0taqsppWZm5uIgXKIg3t0aWlqbGdqbG1ramxlXVxcW1tcWlhaXVtbXmBgXFhYWllYV1hXVFZWVVRVVVJTT1FZXVxcXV5eX19iZG2MjYKPhI6PjZiSk5KcmqKcm6GpqauprKeppqSZpa+llZqlr6mgnJmboZ6vmpyrtKCmpp+jpKGUk5uWlpKpqq2anaChoZuUkIyZjoyRjJKNlpWQnqKgo52co5WboKOhl6Koo6Ooq6Crr6SuuKajpKOsraqoq6+zt7K9tbOrr5iFdHNoW1hZU1VSRVhMUVtYTVVPUUxRUklOSkM9Pz9BPz03NTc5OTw8OTc3Ojc5Ojs8PT47Nzs7Oj02Nzo7ODk3Njk4OTo2Oj05OTU3NzU3MDE0MS0rLzQzNDk4ODo6ODo6NzQ4PTg/OX6zraezt6+op6+um6morLe2q7zKu7a/rMvGxbjBzs/Is8S6t7vCyLGtuL+3vL27s7WmqaCWl5iWh3p0gHZ3bm1obW1tcGdnaWZkXVpbW1tbXFtZWltcXF5fX1xYWFlYV1hXVlVUU1VWVVVTU05PUVlaWlpdXFxeX2BlfYqAiX2Kj4iQjJaRl5mioJugq6qmr6yosaWpmqCtoZWWpKinnZiQj5qerpeZp6qZoJ2UpaGfkpGSkZOVqKulmpmZnp6WjoyLk4aJjYOPi5KVkaCeoaSZlp+VmqGinpSbpaaoqKigsbCmsb2ooKOstKuup7C1sLm1wLGusauRfnJzYlZUVk5SSkdWUFJSTExYTkpMT1JHTUtBQ0ZERD5BNzU4ODk7OTo3Ojo3PD06O0A+Ojk7OTo/NzU5Ojk4NzY5NTg3Nzk7ODU1NzY3NjEzMjEtKi4xMDI4Nzc7OTk7ODk0ODs4QDh/tKymsbeqpaKxq52qp6mysKS2xrS5urPKxbm6wcvQyrG2t7y9wcOxsLG3rbS0u7O0oqOdnZeXlIOAdmtnbG5xbnJrcGtkZWdlXlpZWllaWlpaWlpaXFxdXFpYWFhZWVdYV1VVVFJTVVNWVFJOTk5SV1haWVlZXFxdYWp+eH1zh4yFjoiXiZSTmJuYnqmboKumpqyeqJqhppyTj5+jmpeXhYSSm6SQlaOdlpaWiKKbm5SMjoqQmqWnnJWVl5uRkoeUjouBjI2AkIuSkpKgmqCilpSZmZWippmNmaSmqaahoLSyqLO4oZyjt6yqrqSysqa1vLWrrLGjiXlzbl1OUVFMT0ROTk5QS0ZOTkpKTk5RSU1KQUhMSEhDPjk1ODg4OTo7Njk6Njg7OTk+PDg6Pjk7Pzg3ODk6ODg2ODU3Njg4OTc0NTc3ODIwMzAxKiktLzEyODc2Ojk5OTk4NDk4OEE3d7ampLexpaekqqWgqaaks6qissO1tbKzxsa2usPKzMazrLm9tLjAr62psJ6mrrqvrZ+Zmp2VlId7g25fX2ZycHZxaW5pZWdoal9YWFhYWFlZWVpaWVtbXFxZWFhXWVlYVVZSU1JQUVRRU1VRTU1LTFNXV1ZYWFhYW11hbnB0boKGgYd/kIOOipORk52hj5qco6KkmaWXopyVjYiZmoxzjYN+jpeWhpKakJSOjnuZj52Mgol/ipigo56Qk5iWhY6DlH5+dIqOepCHk5CQnZuampKWkJ2Oo6OOiZqgoaSkm6K0r6ywrZ+ZprimprGhsK6csLyqqa+qmYN3c2NWTVJPUE1DU05MUE1CUFFISU5TTUhKSkRLTUZLSz03NDk4ODg7OzY5Ozc6PDk6Ojs3OT85PkA3OTo8ODk3NjQ0NDU4NzQzMTI1ODUvMDEwMikoLC0wMjc2NDc4OTo6NjU6ODdBN3i3oaO0qaalqKOmpaamprOnpbTBuLC0sMnEt7nBzsa9s6y6waytw62ooqaSnaa2raOgj5WWkpB9d35mV1ZfZ2ZpZ2huY2lpZ2JcWFdYWFhZWVlZWVlaW1tbWVlZVldXV1NUUE5QTk9PUFNUUU1NSkhOVFNTVFVVVllbXWpqcGt9g3tzTlhyj4KXho2cl4uUkaCZnZWUlpWPl4qAlIlfO1ZvfIyUiYCMkoyQhoZzi4WXgXmBe4aTnZSDlY6RkIOGfZN4cXCGjX2KgZGNj5eamZOLkIqdiJ+Yh4iWnpqhoJenrqmtqKiel66zoqaumayrmKi0o6mto5N/c25fW05TUldMRFRKUE1MRk5PSUVMUU1LT0pJTVBGSUo9NzU5OTk5OTo3Ojs6Pj44Oj09Nzo/OD4/NTg5Ozc5Njc1MzMzNzYwLi0vMzQ0MTEwLy8oKCsrLTM4NTQ3Nzk8Ojc5Ozg2QTl5t6CjrqGmpqqgpqmno6mvqKe0wrmwtbDHwrezvc+/ua+utcKnqsWqo52Yg5ScsaKamIaUj4uHfXN1XVBMUVVZWlddXmJnY19ZV1dXWFhYWVpZWFlYWVpaWllYWFZXV1VTUk5MS0hHYlxNTlFNS0lGSE5RUU1PUlRWWFpgbG1neYBzUEI/f5WSkX2IlYyEio2bjpaVipKIhpWHeYl/YEpRbniLkoR+hI2LhYB/bX9/lHd1dniEjZpwUY2IioZ8fniUdmh3hoh+iomWi46Rk5eMhIqIlYSbjYKEkpqWnp2UpKOoqaWknpyxqqGkpJGmqZaiqpyipqiJdm1mXltIUVFTTUlVTVNJTEtPSUhGSk5MTVRLUVFPR0pEPTc2ODo4Ojs7ODo7OD4/OTk+PTg7PDY7OzQ3ODs2Nzc1MzQ0Njk2LzMvLjEyNTIyMS8sJykqKiw0ODMzOTg5Ojk5Ojo6Oj85d7aco6edn6Gvoaeopaeor6yqtby2uLazwbu2qLnIuLaoqLW2qrK8p56WjX+KlKiWlYp+joOCfXdwb1hNS01NTkxNUVdbXFpYWlVVVlZWV1lZWFhZWFhZWVlaWFhWVldVU1BNSkVAQJtrc3NJTUpFRENJTk9oWU9RU1RVWm6CcnV9aWhcVJCJlIh0foaBfIWMk4KSmouPe4aPgHaAeHNvdnF0jo6Ben6Kq4R6emh2e45wcm14gYuNknh7gHuAdnNyknhndYWEhIV8lYqIio2LgH+Ei42AlIR8gI+YlZyWkZ+dqZ6foJ2gqaWenZiNp6SSoKCWnp+kgXNoYV1dSldQUkdLWFJPSkxNUkpKSkxQSExRTFJUTUZJQjw3ODs5OT49Ojs8OThAPzo6Pj03PT03OTkzNzc4NTY3NTI1MTQ3Mi8yLiwuLzIwMC8tKygoKS4xMjcyMTk4Nzo4Nzc1Ojw7N3aumaOhmJ2ftKmvqqWtq7Cxqr20sry4trq0sZ+3urKqnZ2sqaiyr6KakY2UgY6cjpF+doZ4fHZvb2lYS0hJSEdFSEhQVFRUV1dTVFVVVVZXV1dYWFhYWFhYWVlXV1VWVVNQS0Y+OTNOPH6eTUhKREA9QURqlH5MT1FRU1ZedIJ7eGZ2jJaYjY58Z3mBdniAiZB9hJiSgXGHj3x3e29rfq19dJCLf3uGkoB8f3RmdnyGbG9oc3yJjIeAbXlxfXFtdo9xaHGBfo5wRIuFgoOFf3d4eoyGfYx7dX2Oko+Yi5Kam6OWmZyanZ6hnJaNi6Wajp2XjpaYkHhvbmdjW1hYVVFKU1VUT1BOUVZLTktPT0pST0lOUExGRDw7Nzk7Ojo/PTk8Ojk5Pz87ODs9Nzw5OTk5MjY2ODU2NjMzNTExMjI0LiwsLS4uLTAtKyonJyouMTM2Mi84NzY5NjY1Mjc5OTV5ppegnpahprCsrquoqbGvsau8uKy7vrizrKebsKesm4+WnaWppKGYmY+FknmJjouKdXF7bXVwam1qWEtGR0VBQENESExMTVFSUFFTVFRUVVZWV1dYV1hZWVlZWVlWVlRTUUtENzhmNzA/qGlOSEM9OzpEioV6WkpOUFFUWF1lcHJsiKeqwH50eWJ7eG98eYmQen2Lhm9tjJJ5dHlqaoCCcZaRi4F+loBJkpluaHd+gm1qZGx5hZCShmxybHxucnyGaW5wf3ONiYWGe35/e3dwdHSGgnmBeXB8joyKlIOWl5iakJKWl5mXnZaMg4mekouSjYaQloBvam9vb1lWWFRSUVlPUlRUUlhVTU5ITUpNT0tDSU5HRkA6OTk7OTk6Pjw5PDs6Oj0+Ojg6PDk/ODY4NzI3NTY1NTQxNDMyLzAyNCorKiotListKigqKCcsLTEyNTAsNTU2NzQ4NUhBODk1d5mRm5man6WssKOtqqi1r66stL+rvMO/paKalaSYno2Ei5ShoZiZkZOLc456gIaMhnRvdGtwbGRsallOREZDQDw+PkFGRkdLS0tNUFJSUlRUVFRWVldXWFlaWVlaV1ZUU1BMRTFAmjMganNDmW87PDk1PICChl9JTU9PUldaUVlcX6eHYZppc3llfm9tf3qLiXaCiIZ0bJqSdHR8amqdj015hZOJhI5nMXaHc2x+foN0ZmV1f4SEhYBnaWx1a3GAfGhxcXxuk42PfHR+fXFxbnZtgn93eXVqeYmCiImDlpKSkIuNkZSUjpeNgHmIl4iGioaAkIh3a2twaGZYUlpXWVlbTVBVVllYTklIRUpKSEdDQEdFQ0c9OTk4Ozk6OTw6OTs6OjpAPDk6PDk4Pjc4NzcxNTIzNDUzMzY0NTAzMS4qKispLCwrKykoKycpLCwyMjYsLDQ3NzU0NzhpTzg7NW6SiJqRmZajqK2esZ6nuq+rsrDCsbvDx5qWj5SZi46FeoSQmJSNkIyPhnGHgnSHjIZ5cHJwb29kcGZfVEZJQz88Ozk6P0BBRENFR0lMT1FRUVFSU1RVVlZYWlpZWFZVVFNQS0U4MC9cYLNHOVhQOzk0NDGWuotITE1PUFFWTEFJUUlir7KgcXt4bH1scYKChYF6hIaGeXKhlXR4gXN1lIc1cZ2onY6hoYSihXZwh3yHfHSMro2JgWhnYmpucm1wgnVpb1h1cI6bkndtf3t9bXJucIB7c3ZuYnaDf4aAhZCQioqJkYuRi4uOg3V4io6AfoOAfY57c3FxbWBcXV5bWVhgX1JOW1pYV0xISkZKRz9DQUJIP0NEPTs5Nz07Ojs7OTo5OTs6Pzw4OD06ODs2NjY1MTEyMTI1MzQ3NDUzMS4vLCwrKSopKSoqKikoKikrLzNETTIxNjY2NDM8dlI3PTdikoGSiJaRnaSnn6+VpbSprrGuwbK7wcWWkIyUj4CIfG6BkJKJg4qHj4Z1goRslYiIe3R4eGx3bndjaV5KUEc+PzY0NDk7Ozs9PkBCRUhMTExMTlBRUlRVVldYWlhWVVRTUExFPDUqnUtbQC1nSTk0Lz+Sg6muX0dMTU5QTDdDTVJTREqGdoB8fHZ+bHaIiHx+hYN/jH51opp6foaBhJmEm5xhhqqfnYuDkI56d4l+iYiOc4uXj4R7XWVxdHp8d4ptaGpieW+FkIJ6b4F4dYV6cHR5eGtuaV12hnyHfIeHjn+KkpeDjYWMhn1xhH+EfXV3e3yJd3BzdGZnYFtbXlNbZ15XUFRYW1VHSkpES0c/RkBEQz5BQT07OTc8Ozs9PDo6OTk7Oz0+Nzk+OTk4NTY1MzI0NDAwNDY0NTU1NC0sKSsoJycnJigoKSkoKCsrKy8wMFVxPTIzMzMxRX5XND05XIx4ioCUjJGcnZ+mkaCqoLGor8Cyu8W6lo6RlId7hnZrf4yRgn2KhI+MeIOAc6CEin18gX9wgH56Z3ZrUldMQEUyMTEzNjY2ODg6PD5BRUdGR0pLTU9RUVNUVVdWVlZUU1BNRkA6Mj0gI5ZjjFs1MzExaT9Hb0lGSUxNT1JMS1RdWVJKaISIe4l5fHF8j4x6fYmHfpeHdqGaiIePkpSlja2qSIaur6+LgYCTioKLgoSSqYeAmJiKnHRtfIGGh32OaGdoeX9uhYeChXGEhkdsgHdyeXZobWtfdn2CiH+HhIt5lJ2ciYuIkX96dYt2fHhtcHd+gHR0cmxbXl5cY2NYZ2VcVE9QVllQRExLRk5JQ0ZDQ0BAQ0E9OTg4Ojo6Ozs6ODg4Ojo/PjY7Pjc1OTU3NzMzNDQyMzY2NTY3Njg7REZMTU1MQzcrIiUnKykrKywvMDArbnUyMjQyMEyBXDU9PF6EdHx9iYWHkY6Wl5KXoJ6toaa4r7O9s5eNkouYi310cH6Jkn59jIKSlH2Gfoakh4h/goiFeIeIfnOEeF9jV0tCNjAuLzIzMTIzNjY4Oj0+P0JFR0hKTU5RU1RVVFRWVVNRT0dDPzgwLCOHWz4/ODQuXZZwc6NVRklLTU1QV2BYcFlcXmmNk4eVgISChZGTfoWIkYGalYKhoZiVm5umrZOau7Gnu8fDqIuMoaWPlIqBkXxxg56fkZx/doaFi5CHkGlocISBdI2HhIpxhoJ3h397doV9bnZ1Zn+UjoeIiIeIh6CropaJjpd/eoKIeXlvZ2t4f3t/dGxlXltbXmpeYmdgWk9LTldSUUlQSkROR0NKRENARERBPDo4Nz08Ojw6ODg3Nzg6PT04PD02ODc1NjYyMzQ0NDU3Njg2NzxCQj88ODo+Q1FeZVxHMicmLCwtLS4xKD+LWy4zMTBPg180PztudXBmd4N7gIx/gZCOipqbpJ2hrKarr7CXkZGEoZSEeHd/jJR8fpKFkpV/ioCSm46DgIGMioKJjYN/ioBtcGpdQkA0LS0vLy4uMDIyMzQ3Nzg7PT9CREhJTlFSU1JTU1RSUE9IREI8ODcvOUQ+PDw2My5sk5dNUEhJTExLTlZgY39nZ211nZuPmpKTi42OmoiTj52LoKCSo6qlo6yTqbaiqMHCrseveLqUmnyNoZ6ZhJOFgo6in5OYkoSKhY+ZkZZscHWKjIKWjI2Od4+EcW2FgYqWkYOFiHGIoJaGkomOj5aktambjZSig4eTg31/a2prfYGCg3VjXmRgW2dsXWxsXldLR05SUU1MTEZJUENETUZCQ0VGQj05OTc9PDo7Ojk4Nzc2Nzs6Nj06Nzg1NDU2MzQ0NTY2NjY4NTU2MzEwLiosLCkoKS46UGFcQCwoLSsrMCwncog3MjQwT4RiM0A8dW5nWW+Cb3WGcXaShn6XlpqUnp6cp6CplpOYnmdlpJp+hJKReX+SiJGSfYqEmJKQgoCAi4yJhpCHhYmFeHh+Z01SPi8uLiwvLi0vMDAwMjEyNDY3Oz9DRU5QUlRQUFFTUU5QSUVEPjs8OkNGPz48NzUyPD9SNUhISExMTU5SXm+KfHOBfaCdm6elopmhl6KUnJ6onqirn6isqaq2l6u/q7bIyLfJ0c++m6Bwaaupn4STkoWcoZqbmaeRkYiVopubeHp+lJiSoZOXl4GUnnt3lZKrsomNl598lJ2bjZKVmKOipravnZGZqIeWj42BiGxzc32BfXNpYF5iYGJoZGBnZlxSRUpLUE9JSUxGRk1DSExGR0RCR0VBOjg1PDw4OTk5NzU2NTg+NzU9ODQ3NDU3NTQ1MzY5NTg6NjE2ODYzLzAuLSosLy4tJyMqO1hiQigqLDEtKEuXXjA2M1GFZjJBQGlhXlBwdGBtfWF3jn17lI6Oip+Sl56Wm6qYnqpCRH2HiYeYjXiCjYqOjXyKho+QjoGCgImLioSShYOGiYGAhnZeYlA0NjAtMS8sLjAwLy8uLjAwMTU+QUJNUVJTUVJTVFJOU0xFRUA8Pj1HR0BBQDg2NjI8OTtGSEdJSk5PUVlthZB3lYqjp6q0vbikraysp6i0q7C2srKtu7GzvZyzw6u6ycu3w7+4paKws6ytqqOLlpiFpqago5eBppmNoquopYiFlKShoKuhpKmPm7CLlaOmt7uboaOwkqKdop2Qo6Grr6yytaKUpKqImYmSiZV6en6GgGliaV1mY15kZF5nZ19bT0NJSFNORkhMRkpHRkZIQUtGQ0ZGQTs4Nz08ODg6OTc0NjU4PDU0PDc2OjQ0NjQ0NzM5PDM4PDIwMjU1MS8xLi0qKi8sLSooKiYlNVhYLywwLCwwhIE4NzFQhWg1QUNbWFRMaGNXaW9YeoV2gZOFh4Kbg5KQjJLayJ2Wc1aXiI+InI98hoyOiop6h4KHkI6DhIGLhYaIkoaChImGiIeHcW5hQEU2NDwzLzExMC0sKy0xLi00P0NBTVVRUlNVVVZVTltQR0hEPD4+RkhDRUE4Ozw1Qzs9RktJR0hRT1BXgZKghK6js6qywMfDqrPFtqyzv7O4vra/tMG2u7qjuMWotsnHtb65taijtK2wsZuZkpqfiKevq6WUdp+kl6GssrSZlqquqK62u7K6rK+1orGrsbW7t7WutKCnqKOnmqmvrbK5t7inm7aojKSOkZOfhniChHdaY2VXZ2JiZGBhZmBbVUpERExVUUhJSkRJR0VBQEBLREJNRzw4Njc7PDk3Ojk4NjU1NTcxMTw4ODk1NDY2NDk3Pj0zODkxLjAxMjExMzAsKiwuLCsrKyooJyopRVowMCovK2iSTzYwUodqNkFGV1FKTFtaUWJjV3l1cIGUfYSGk3WFf4CMe7+7o7yCtJSTjZuPhIiPkomIeYaAjJKMh4SBjn+BiY+HgIaIhYmHkXp4bl1WQEVNPDY6NDZBQjc2NC8vNkNIQ1FbT1FVV1VcVlBfVUlLS0FAP0dLRkVEOz5AN0Q3P0JKSkVGVlNQXo+kraOxtMO2uMHMyba7xL2zs8C2uMG1vq+3dLGzpbrEpLDGubGzsbSopLW2qrGgopabopKlsK6mraynpJigrLS7oqiyurW8v8y/xcW9vbPCt7m3v7e6t7msrLClsKmtvbC8usLCrJm6qJOtj5eXqoh9g35sWGRiWWtmamZXXGNZVlNJR0ZMUUdDSElBSEQ+P0JCTEBATUQ5OTY2OTo/Njo5OTY2MjQ2LzE5NTk5MzY0NjI3Oz0/NjoxLi81ODo5NjUwKigsLS0tLCwqKCgrKyhFUy8qMDBKj2s1MlCHbTY/RlJMQUxSV1NZVVp2am9+joSAjYRuenN4h2K5oZmiiJSUlpKUk42QlpKHhnuGgY2VioCEgYp6fIuHhn2KgoGKg5V9d3p1ZVBcZEdFTDtRY2FbXlNGPztIUEVaY1FSWFhaZ1lUYGBMU1BFQT9JSkhFRUFAQzxFNkI+SEdKTFNaVF2Trri1urjIv7q9ycy7vMC8t7W7ura9tLqxxmB1sqSxmp6rvaqlqKurpKKytaCrp5+Vlp+Yn66lp6aln6OUo6extKeys722wb7TycnTx8PFzMLKw8C+vb67vLe0r7i3tsO5xb3Cx6+euaqhq46kqLaIgYFzYGNjX1hiYGpnUlhgVlFVSUVFTktAPkdEPUpBPUJAPUY+PEhANzk2Mzc5PjQ4OTo1NzA0NS8yNjM4OTM3MzQyNj84QD5HS1JUU1FQT1FRUEpBOS8sLCwqKygoLC0sL1A+KC40OIB9PDJLiHE5PkNLRUBJTVBSS1FdZ2xrcI+NhY9zbHJzc4fVwLWZoI2VmJmRjpeSlpaOhod9hoOMlop+g3+DeHuLg4d8i3mBioKXfnN9emtmcHVZXVxQZWRiYGVkXVtYV1xNZG1VUm1tX25fWGdkVVlVSkRCS0pIRkhISEdBSTlEP0hLVFRWXFpbk7nAuL23xsC7ucrKura5tbi5sre1tK62tplkdaicrXBeoqycmKCim6Seq6WUn5+QlI6WmJenn6WfnpqZg6SdrKWqsK24sL251NHO1s/JzNLMz87Kxr++wsq9wbzBwMTExcq+yM6zpLuwtK+aq7i7mH97bV5hXVpfYVpkY1BbYFNQS0NBRUZFPEBFPkFIQUBEPTpFPj1KPzM3NTM1Oz00Njg5NzcwMjIvMjQxNjk3NzU1NTREM0VMTT41MS8wMDY6NDc3QElPSTstJioqKC0uLyxATSsvNTRtiUkwSIl0Pz5CREBDREZLT0RRXFloX2+WkpCUbmxvdXWHs6yhoJ+LmZyZjIyVkZuShYqKfoiHjJCLiXyBhHN7ioOFe4l0goqGlX9ze3lsbXV7aHJlaWxpZ2ppaGBmaWlsWm1zlq2kvIiHZ1tvaF1aWlRIS05PSktQS1NRSExBSkdKT19eYmZpYZe3x7C4sru9tbHExrWwuLCvu6uysaert6uNtaedmqeaTpqdjI6flpGmmKWVipOTiZCJkJGRnZuhl5qVloeemqebrK+osKe0tNTU1NbSy9DT1c3Tz83FwsnQvsnJysnRx8zNwtDRt6/DvMS5pbW6wqKDcGVeXl5ZYVhaZlpRXVdPUEJCSEVCSDtBQz5BRz8/QTg7RD5ASD00NjY1NTs6Njg3NjU0LzEwMTQ2Mjc4ODc1MzY3QzVCOD8tMC0xMzQ5PTk3LC4sMTtGSz0pLCguMDAwN0s/LTQ2VIhXMESHd0M7Qj5FQkFDSk0/VVlTZVZzkJCYgmhxb3l5g6CqnqWWjJqbl4uNlZGajn2Ji4SNioqLkId8hIJwf4iBhnuHcoOSi459cXh1bHF4fnF7bnhzbGmBcG1jam1weGl3fH7Lv8Hfp25jeG5jW2FgSlBSVU5ZXlBdXE5QTlRRVVRcbm12gnGWrbistKavtqqsvMCwq7SmpLimq66gq7SjjrGtmpeYjJGTkYSOm4GNppGciYOLhIqJhIuDlJWXl5OckZyYmZmfnquspKeirK3P0tXRzczS1NTQ1NHOyMPU0cfN0tPT18zR0cXS1sXAzsfHwqi+t86ee3BnX2ReWGFTXlpQUVRQT0g+QEZBQkU8QEI+RUQ+Pz86PT08PEpBNDU0NjU8ODg4NjY0NDEyLzAzNTI2NzY4NTMzOz08RT1AMTErLzI0OT41OTAxMDIyLTJETjMpLzMuMzI9TjIzOEN9XzJBhnREOj09ST5AQ0ZIPFZSTU5adYaFindsd3B9fn+hnp6hi4yYk5OLjJKPloR5hZCQjYqJh5GGfoF7cn6AgYd6hHWFk5CIf292cmtzfXt2e3OBeHJqgHNyaXBxenlyer7Lmn6MsoR2coR2aGFrXUNaWltWZWNYZGpTWF1dYGReY3h6fouBmKmjpKGfoKilqrC4qqWzo6GtoaOtoaexn4mmmpOSkYmRj4iBlIlqlKKMmYSAhX6Rg4OTlq2LlY2Vmo6GkpGel6ewoaChpaSoyM7PyMLL0dTS1NLO083G1tLM1NjW1tjU19XJ1NrNydfX0cqsw8LLjHRwZWJhWVVaVFxQS0dJSkpAOzo7REFEPEJDPkdCPkJCOzw5PDpHQjQ2NTQ0PDU2ODc1NDMyNTAvMjU0Njc0NTU0NDw+PUU/QTYyLy0xNjs9MDgxLzI1NC8tLTtSMDE3LzUzMkZEMjg+bmI1PYF0TTk5QEk8QUQ/QTtQTEZLWXCAdX1oc3hygomAnZWdlIWLlYmPioiNh4+AeISUmIqMiIiLiH6CeHN7fYOHd396hpGVf4Nud3BtdX91eH10hXx5bId2dG59doR1eHydtYw7QYvFpX6MfGllV0lDZmNlY2dqZG54W15maGtuaW6Ag4iRi5ydoJ2Ql5ieo6OmsaOjs5+hpZ2gqaCjsZyGnpKSkpCKjouGg4+EfpybjI2ChIV6lH6CqZWjjJGKl5KLfZeKmpKrs5ianKicp73Dxrm2xs7S0NLQy9LLydTO0NXa19fY1NnYzdjbzsnZ2tHWvsvLtXp4cGZeW1NXUltWRkdKSUVFPTo3OkBAQjpHRD9EQ0FEQjs/Ozs3REM3NTY1NTswNjg5NDQzMzQxMDE0NTU4NzU0NDQ5QD5EQkM8MzMuNkZUV09RSkFKRj8xKiguQlMzOTI1NC83Szc1PGBiQTxzdlY4N0FIOj9DPjw5UUVDSlRrbm5wYnBxdIaNfZeRnYt+h5KDiYaFiYGHfHiFlpaIjoOHhYZ6hHlxenuEhnV6hY6NnHmLcHxvb3p/cXuBcYOHgG6OenV3fXyCdX57hoevc1ipwraNkYJwbmI9XmhycHFwbnh2gWVob3J1eHF6jIeOk5GblZ+Vh4yTm6CbnqqfoKycoZqYn6Wen6uZi5qMkJGNhH2Ih4OFi46gmZOIhId+bZl5hJiGiJOMjZSMhnyciZSPrqqUlZifmaevtb2prb7Hy8nJzMvQycPSytTX2NfY19Xb19PZ29XQ2trR1sjUy5Z7fWppXFtRVFRfSENGSUg+QT09Nzo9Pzs9Rz0/QUFBREE+Pzo4NkRCNzU1NDc5LjU2NjQzNTUzMjMyMzY0NjU1MzQ1N0VCRENFQjU2PEZOU01bbmZjbnNrYVY+LDRMRzg2NTQzNEJGND1XX2hMdXheODs/Rjw8Qjw6OkQ/Q0dSal5tZGJma3aAiHKRj5qAeoCNfoKCgYN+g3t8hJiNh4t+hYaAdoJ5bnt7h4J0epKejaB2jnWCdHWBfXSAhG+Bj4FvkoV0fICEenaGe4i3xaTBybiBlpqPd3BlTmZjgXqBd4aikIp4eXZ7g397hHZtk5aUlY+XkIOJjpaZl5alnJeflp6TkZejnZmrlZCQiYyRgoyFiIiBhpCRnpuZiYWMgYaXeoiIn5ePiI2Ki4J9oYqRjLyhmJOXmZ2ppqaun6i2v8DAucfKzs7FzcnR1tXV2dXX29TW2drb19va2tjO3MaHfXtpa2dhVVhWVk5MRE1COz09PDg6PD45PUA2PT9APT8+PDk4NjdEQTY0NTU9ODA2NjU1NDc3NDU2MTM4NTU1NjQ1NTdISD1ESkU3OTI1O0g+Ozo6N0lQXVpSVVhLOVQ+Ozk1MzI3STg9TllNSHh4ZDU9PkM9PUA6Njo+PkBFUV9ZZWFdW2h0enlsiYySd3Z6inx+gH5/fIR6fYKRiYSFeoSHenV+dW18fYZ+c36SnpGeg5F8hn54jn14iopugpqAdJmGfYGIhHt9kHqPqY6Pw6G9i5yjnX2JhH2JcouKfnOmmpyYk4V7jpCIhGhHcaCknYyLkJKFiYqQkpWPnZqTlJCWjYyVn5yUoJSRjY2Pin6Qjo6LhImSlpqen4mMlJKdkYKLf6WZiISNgoWEgaWHi4u4mJ2RlZaiqKGdnp2jr7e6tazAxsrQyMfMz9PT0tjT1dfA19jZ29ja2tnZ19u4ent6bWtnWGJcVFBPSUNMQTw8Pjk5Ojo5OTs9Nj8+Pjw9OTo7OzM3REA4Mzc4PjcwNjg4MzU3PDM3ODA0OTc2NzU1NTQ2RlA1RE5JODkzOEFLPTszQ0BJPDlEV048TVRITj85NjMzMz5DO1tYPjVZeXBaPDxBPD0+ODY4OT89RFJTUlhfVlhmbW1taYGOinFzeYp7en98f3uHenx7i4aCfXSDhXlyenNtgH6EfneFnKGanZSSgIyIf5iHgJuSboeohXqgi3yRjYKIhJt9mpCKjKOioJCkrqCLkYuFi4GThldyrYufq5uPg5ibj4+OXIKikYKMn5OUjIaIjJKTjJSUlI+Lj4qHlpudj5WWkIqSk4WAi4iSjYqKnJaZoqOHk52WoIqJiI2ckIOIjn+Dh4akhoyQs5idkpWXoaGfmZKcnaiyuaymvcLHzcjGz8zQzM/X0NHUrtbV2NrY2trX1tnZn3F/dmloX15ZVFhZQ0FIQz8+Pjo0OTo7Nzo7OzM7Oz89Pjc7OToxOkg+OjM3PUA1MDY3NzI1NT82NTs1NTg1ODo1NzczNUhSN0dPSzk5ND1FSkI+MUZDTEI5ODpHWEA1SFdJNjYyMjM6RUNlWD8mX3lpX3o+Pjk8Ozk4OjtAO0JRS0tTWVBUY2J5bWJ+kYNvbXiLeHp/eoF8hXt7doWEf3NwhIF6dXZ2dISDhX1+kqakn6WiloqdkJSXi4qol3KKsY2Ep5KEmZOEmYyilZ+Yk4ianqOSqa+fkJWQjY6IloxujbeFmsTIspuhpZucmJaQspFkpM3HlY6Gh4mQko2Nk5SJhYqJhZaZm4+QlJOGlJeEf4+LmYiNkKqXl6OjiJmflpqIjoeXl4qEjo2Bf4iPpYmNk6mal5OXmaGZn5mTnZujs7Smo7zBvsfFxcnIycLL083N1KnS0dbW1tja1NPazoNzgWllYF9fUEtWXEJCRkM7QT04Mzc7PDo4PTY0OTo8OjgyPzk6MjpJOj02N0JDMzI6OTYyNjQ+PTQ7PjY5NDk7NTc5NDRLUTxKUUs5QTdCR0lANjRKRUxGPjw4OEVUQTc+XDg2MjE0OjtFYFhBRmF0aExjWj41Ozo6NTs6PTpFTUZIUldTUkJjgUZ1go59fG1+iHh6fnqBgYJ+dnaAgntsbop+eXx3eHyEh4t+i6OzqKSrsqGWp6ClpJaVrqKDkLeVkrOZjaGgi6Sbr6KknZiQp5epma2vpJeVlZSQi5ialqDAjqPJuKuaoqWtmZGbnLKdhoWoopyYhYiJjpWNi5OPh4GGh4iTmJSMi5OThpSYhoORkJx0kZmylpekoYicmpOPipCLl5qJipaOhn2MmZ+KkJCcmpmTmZiflKCdlZ+bobKuo6W3vrPFx8S9w8O/xs7KydKnzs3T0tDW2NLP2Ltze3deYldiWFFJSk9FQkNENT46NzY6Pzs8Nz00MjY2OTc3ND01PDU8TDw+OzxCQTc1PDs0Mjc3P0A2P0A3ODQ5ODc7PDU1T01EUFJMOEA9RUFHQTU6SkVORUQ6NkFAQlM+OURPMzIzNTc1PXZcPFJcdGlaTV1TPD04OTU2Nz06SkZER05bXFlKZ2E7SISKentthYZ5fIR4gIWAfXB4fH18b3OMen2Ce3iGi4mFhJKnvK2psr2vpa6zs6ijorCsipq1nqK4pZWtpJeprbempKOfmamYqqSvsKmamZyUlZGYoJeZu7utyaBptrirsJWYn6Krkpe9o16qsoKJio2Vh5F8j459g4aOj5SUiIeSlouPlY2LjZeZkp2ZtJaVq56LnJSSjZCSjJibipKej4uJlZ+ijpWOmJqdk5yYnpWioJScnKWvqKKls7irwsjEtbu9vMXIyMLRocbJzc3E1tbQy9OicXxqXlxVYFNRR0Q/PUNBQjg/ODc0PkY8PDY8MzUzNDU0NTRCMzo6Qk06QTtBSEI7OkA8NzQ2PEI5P0BCODc0Ojk2Pj00N1RLQ1VRSjc8OklBREA0QUpITkJBPzZEQTxKTkQvVD0yNTQ6RUpcWEpaUW1ncHBEaWBLSTY3NTc6PkpAQ0lQZUhiYGNwSkCLin6AcoaHfIGJdYKKgn5tfX18f3B3h3eNgYd7jY+Mhoyaq8LAsL7Gu7O0wby0rKuztoyosq6uvaubuqSorbm3q6amoqGjo6qvsrGqnZyjmJuYl56ipaWSo7muqMC7rK2yuaWkp32IhpytvbCDi4yLkIOPg5GPeoGHkI2OnIiIj5eNi5WXlJCalpynm7GakaudjpmPko6VkJCWl4+RoJGIlZukrJWWj5ScnpShnpuZoKGUmp6op6ShpLCzpsHGw7Cwu7bFxMO+zafHw8fDvNbQzcTKiXZ1ZF9cYl1PS0NMQEVGPkE/Qjs6ND5BPT01PTY+MzMzMjQxQTE3QEJOPkdAQ05DQT1DPTs4NkNDNUJJQjo4Nzg7NUI+NzlWS0RXT0Y4PTRLQEM+NEVLSE4+QUE2QkI/QlNFNThQMTQ1Ozw4O0Q+OUxqal07V1JkS2daVU83OUdFP0NGXGdHYGlnWl1bk4yMiHuHi4aDjHWGkIqBbn57gn9xfoF6lXqSlJSYkZOVqLTHycDCzMHDuse8uq+rubuXsra6s8CupcCkq7C7u6quq6Kinqesr7WwqpugqpyinJafsLSni6O6urXBu6uonLKkpKiUhI6pw8SkgouOh4iEhpWUjXqDjJGPkaGMjJSRj4mYoJeTmZSXpqCunYyqnI6Vj5KRlZWOkJWRj6GUhpefoLOflJuUoKGZpJ+aoJyglJiep6Smp6SvraW/xMKuqbe1ycO+ts6yxb7Du7PRycjBtXd7b19aXmxUTklETUtLSUBBPUNEPDVBRDs6Mz04QjMzMjI2M0EwNUlFTT5JQEhSQEg+Q0A7Pj1GQTVBVUA7OTk4PDdFPjg+VkpDV09HOD80TEBCOzVKS0NMP0I/PEJGPUFITDkrRzwzNjc0NjRBPzdPYU9hRS89PjZrbGpgQDpIPj9FQmdcTWVcZlRjapmNlomLiJKPhol5hpOQgXJ/e41+d4eBgpB6jaGWqJqamLu+ycjKwtLJysLNvMGzrbu+p7q/vrzDuKzBqayzu72qsKmkpaOsrrSttrWgoK6fpaKYo7S9qZuovMGjtravq5KvrKqrloaaqaalkYKMk6WViYB1ipJ5hY2RkJ6gko6Ui4+NlKOZl5uUlKOeqZ+RpZqMj4+PlZaIfY+VkpKjmpWgopy1ppCfl6Wko6WfnqaYnpWXnKWjqaiisq2ou8DEr6Wzt8zAua7Ds7u+wbmtwsLBwJlwe2NbWV5cTU1OSkdEQ0hCQkFDSzo0REg6OzQ8N0UuMTIzNTJCMjZTSE48SkJKUUVLQ0RFOkVMQjw3RVY9Oz04OT88ST86RVVJQVdRRjdBOks6Qjc5Sk1CSUBDPjxERzxCQ089MjBIMzY2MTcwPUI6PWpqSks1UVMzU3BwZE47RD1ARj5rSV9YYVpkZVaej52Ol46ekomKf4mfkoR4hX+Vfn+QiIqQgJWgma6no5jDvsnEyMbTzc7Ny7zCt7C6vLS8yrzDwba3vK20wLm8ra+ooKmntq2uqbK3mp6soqehnau3uKmlr77Esb25s6eps7OtrpaVpaynoJGOkrHFp5WNfJGVfYeRmY+qmZiTk4+TlZOlnpOdmZOho6KcmJ+Zi4yPj56IWpCXl5KWpZlmmaOfs6WWo5asraunnJ+nl5iWmJWhpKimnrasqbq8w7WmtLbLwbiqtqyzu7iuqLi6vbiDbnBcWlZXUEdLU01LP0FIRURHRkc4NUZNOz43PkFKLjMyMDI1QjU1UFdOO0xGS1JMT0dHST5JUT86OElTOzs/Nzk+RExCQEhTS0BXUEY6QT9HNkE3O0hNQ0U7Qz00RkU6QkFCRzkvOkEzNjAzPkdEOTQ9dGRNRztFKzpmfGhXOz1AQkZCckZpSVJlYkxGppSclqGXqJaMkIOHpZKIgYeCnISDlZCRlI6aop+vvq6hx77GxcjHzs7O0sq+u7axuru8vs62xL23ubeysrWzuLKrppyrq7irqaiwsJejrqSnpKW0wLCqrLO+wrrAubOnuLO3s66Vpa2urqSLk5WhjXPBmX2WmYSOlpqLsZWampWSk5mZpqOVoJuWmqicm6GgmYuMj5adYEqWnJqUmqWXVJawn6+cn6WUr6+tppuhppSTmZmOnaCnopm0qaqzvby7q7Cyx8C4pqurrbGxo6GysrSkcnFnXlxQUk1FUVFQUTtIS0lGSEFDPjlLVD9BOj1FTTA3NTQ0OkIzNE5XTzxKS05VTlFKUEhISk9CPD5NUjs+PTg6PENSPkRIUklCV05JQENBRjM+NThKS0NBPUM7NEVBOkE/PkhANSpCNTIsPmNdZzozNXRkZUBSNyYjM31pWDs6QkNAPVJFV1JzYldGSKuXmZ+hqK6YkJeHi6eWjoiShZ+IhJyXj56gm6Oltcm0qca8w8TIysnIzM7Hvrqzr7m4wMHNtci6wLi1urGvr7K0pqObqrS0q6mmrqyZpK6lpaisur+oq7a2v8HAv7izssKvt72ro660rLiliJuXppt2vqCEmJyOk5mai66WoZybl5WboKGpnqigmpqqmaGnnpeQjZGdg252k6KalZ2in5CusqOrlamqmKuupaWgpaqTkpmciZWcop6Wsaeqq7q3vbOyrr65tp+jp6ilppycrKmpjWVoYmBTTE1HSE5KVUw9TURNSUpBQ0Q8UVU8QUFCRE8xOD03Nz9CNzVVWE4/SE5RWFJQUVRKUUpKRUFFTVE/Pz04PTtHUjxFRFFCR1lNS0FIREU6OjM5S0lCPkNCOTlDPjxAPjs7RzctMj4tMYJoTnpcLzBraGA8PUJCODZ6Zlc7Oj0uLlNhTVZIf2VeSEaslJyhn7uumJSei5Oqm5GSk4mrjYeinoykrJSjo7bHvbTBu8PDyMnFws7Iwr25sq+5tMDCyrbGscG8tburqa2sr6OimKq0uqaqp6yqnaivp6Srq768qKy8s7i+xry3tbjAsL2/s6m1tqu+pI+il5Gin7yfiZqgmZeenY63n6mcpaObnKGap6WzopudpZyoqp6ZlY+UmouXiY2kopScop+gta+lppOxq5qrrZ+fpaSqkpaVoISQnp+clamloqG0tbq1rai1srKenKKmmpeVmaqhnnhiX2FfTElHSE1RSU1FRkZCUkpIQURHQVZTREg8QUdRMTtCNzpCRjc5XFlLQUxQVFVTTVdSTlVKREBKSk5POUM/NT08TlFDPz9QP0VaTUpBS0RHQDUzPUlHPz1FQTk3QTs8QDw8M0A8Lyc7KkiRQjpTSjAsW29XNzE8Kh1CgGRUNDktMTpoXUZEQ5xwYkdFqJeknp7DrJuXpZeZqZyWmpqPqpaVqKaVrayZoaq2xMK8v7jBw8HIxL/Nxru+ubKwuLO/w8i1wLC8t7m3p6Srq6yhoJqqqsSipamspp6sr6yiqqi/uKasvbC3t8a2tbm4vrC+wba0srSvvqOWo5aTm5Stn5ChoaWjo5+QvqWpnaisnZ2hm6afvaKYpJ6iqauhnZaNlZ6Tn4ePhY2TnqSgnbWsppyWsqeZsKmgm6ufoY2alZ+EjqGam5KlpJqYrLG2saqlqq2snJigoZKOkJWon5RpZVtiXlBKSEtPTEhFQ0lAPU9IQDtHSUhbUk9LPUhOVTRCRjk+SEc1Q2JbS0NOUlVXVlFYVFJVSEA4UVFQTTpHQDRDSFFTSUM7Qz5HVktDQE8+SzwwNjtHRj47RkE1Nj85Oj85OzE1RDAtLDBNdlw0S1o1LE1uVzwtPSkeI3piUTVDS1E5b1JGPEt4ZmNYTaKao5uexauhn6ydna2fkqKelqSgp6qsl7awo6qztsXCvcC2wMK8ycK/ysi2uLW1sbS0t8HGt76xuLW6tqCnraqsnZ6fpaTBpaCprqCkqa2voqanvbalsbu3trXDsrO3ur6xw8C4uK60tLSinKSVkZOgrZ+YoZ2oqKuimsOtqZ6srpubnpimoL2hnaSYq6urpqGZjZqfkp6Jjlh/lp6moaC4qqeTmbejn7OioZywmKCPmpSego+gl5aNoqSVkKaus6upoqKlpZWVnJmLj5GTpJ+JY2dcZWFNSktLT0ZFQUZLPj1JQTk5SkpOXVFRST1MV1w5Rkk9RE1JOEhjXExDTFBTWVlWV09aXklBPVdRSUs/SEA1SE1YU0hBOkBBRFBIPz5RPks3MDk5RkU7OEc/LjY+Nzg+NzcvMT85MSUxUVVtW0pPMTA9Z1dEMTc9LSt3YFM2U1prV3NIRTY9dWVcTE+en6GYnsOnpaKzoZyyp5OqpJ+jn62prJ27sKistbLIw8HDs8LEvsfEvcXKvbCwtq6xta+/xbW6sbC6tq2aqbGpqpqepqGnwq2brLGcqqKusKmkp723pra6va+3w62zs8K/scazurertLatqqKllZWUo6uhn5+Zp6uvr6+7sqagqamZmZeSoqS4oaGkkq6vrKSmn5KhnpWej5GNlZ2ao5+ntKenjZi0nKOvm5+cr5GglJiUmoCSopaPjqChk4umrLClp6KdoJ6SkpqUhYuSjZyfgGRoXGhmS0pMS1NCQ0BJRzs7Rj44OU5NVV5SU0o+T15ePUhQQk1MSTlOZF1MRUxSVFlbU1VPXGJIQT9aUUFIQUtCN0ZFTEtOPjtCSEROQj07TkBBMy85N0NCOTdGOys2PDQ2PDM1LS80QDErJ1Z0U2VPPzEwNGJbTTIzPjA8dl1eP1tVXmZyQDg8SJZ3ZUE0n6Sfm6DCqKOqsaGjtKmWsqumoqSyrK6pu7KtsLS0xr/ExLbAxb7KxbbAycK1q7WpsbiswMS0t66tt7qlmauyq6qYn6aXrbu1m6iwm62frrSyp6q6s6e6s7iyuMCqt7LCvLTFp72urbe1qaesoZeWkaWkoaGXl6SvuK2ytbagn6ikmZSVk6Ogt6OkpZWusbKlqaWinpqampWYqJ+emKKerrKipo2Yr5mlrJibn6aSnY+VmJqGlp+UjJCcnpSLqamroqehmZ2WjI+ZkIGGlomVn3plal1sa09RTk5UPUJBTkM7Okk/NzdRT11eUlZRQVdgXEJKU0hXS0g6VWRdTkZPTltXW1JQUVhdR0FCW1BCRz5OQzlIR0hOUD8/Q0lCTEI8MklBOTQxNzdCPjs3RTcrNjkxNDgwMi0vLjw2LSNCcWdzazIzLzFcY1ozMzkwNnBbYkgwNUpwaVZDV0aMeWZDO6SknKGlv6anr6+hqbWqnbmvq6SqtLexsLm2sLe4uMW9w8e9vMTCx8G5wcfBuqq2pa27rcHDt7iqrbK8o5WtsK2yl6Wokaq5qqCnsJ2qn7C0s6qptrasu6yzsrm3rLmwwbm9vqbCq7C2rqmqq6admJiqoaGgkZegsK6zq7C5mpupn5mWkpemoLeppaKir7Gzq7Gnq5+boKCbnqWdoZedo7Owm5+QlKaaoamblqSgl5mLlpmUlpedk4iQm5mUjqmpp6CjnJibk4ePmYt+jJeGj5psam1ibm5YUlFaVEFDRVVAOztIQDc6WFBkXlBXV0RZXl5NTFJPX0tKPlpkXk5JUU5bVVlQS1NXWkk/RFhQREY+Tj89SUdHUVBCPUNGQk0/OjJEPzc3NTQ3Pz05NUU0Kzc1LzI1MS4tLiwxPionKz1ccD0+MS4xZVtkQDE3NDdnWWBGKEA4bH1oXFY6iXtjQz2on5yhqbyhqrCqo7G4qaW1squhrLW9r7O4vLq9t7bBwr/JxLnFw8HAucW+wbivtqert7K8v7+1qq6yuJ+XrK2orZeoqY6nu5+lrbOeq6KxsLOsqraztb2tr7G1rLC1scC5xLarvK+xt6ysqaKxpZ6kqJ+jlo+Yn7Kqs6mqs5mdp5uZlI2gpqS0rqeirKyusaeyrLKpo5ufqKSelaCZm6i1qZeZkpKfmZ+hn5KtoJqZh5aZjJ2anZOKjZaXmpenpqOgnpaWl5SBkJWFe4+ThIyXZ21zaHBzX0dZZlZEQ05YRFo5SEI1Pl1SaFxOWV1HW15dT01SWGRKSkNcY2BQTE1OWFdYUEpWVldMPUVVSkVEQU0/QUZISFFQQTtGREZLPTg3Qj02ODcxOT48NjVEMCs4MC8wNS8qLC8tKj0sKyUyKyo1SzEuJ19eYVYxNTE9YFZeOClDM1lVXGdLNYx6ZkxApJmgpKy2o6yppa6utqqutLmmprC4xrext77BwrW0u8W+zMW5w8G6wLrEuMG5s7Wsqrq3u7q+tauusbaYmKirqqubrauPq72eq66xo6qfsa2zrq62srm3qq2usqe1r7S6vMmyqrW0sbSvrqags5+ZqKygpZWVmpmxoq2gpa+WoaSZmZKNoqWmsqmhprGrqrWkrrC1r6OYnq2nm5eemZmsuKKXk5CPmJyhmZiUraCelYKUmY6enZqXkYuUkp6apaOjoZmWk5KWe4yRhXuNi4OLlGxueW91fGFGYGpaSUhaWz17SkdFNkFiVGlaTVxhSltcWlJSU2JhTEtFYGFgUExJUFdWVU9HV1ZVTjpJVklIP0NLP0VESEhRTkE/SEhIRTw3PT46NzU2MDk/ODY2QiwtOCwvMDQsKCwvLSo3NikoOS4kOks1LiJUYFZhLjUoQ15RXC4qQS9KR1BbRzNjWVRLRJmXn6+osamspaOurrWptrS3o6u0t8q6tLu6v761tLfDwc3HvMS9t7/AwLjAvbK9rqe6ure3wresrrK4lZemrquno7OqlK+6pK2ysaanorKzsbKxtbG3sqmuq7KnuK+1s8TEtqm0tauwramnorafnqaxoKSUm5iUsZ2nm5+pjaminZuVl6WlpLanorCzq6exp62wtaykmaGsqJycnZuUqrmclY6Oi5icopiRmKijoJeEk5eRnpyYl5aIlo+XmqidpKGTlpKQlneFkYd8hoKEjY1ucXh2fH9dS2VsXEpPZFw/YntHSThHZ1dlW01eYk1YWVdVWFRpXVBPSGFdX1BKSFFWVVJLSFdVVk04TVpORUBGSz9IQkNLU00/P0xPSEA7Oj47NjswNDE8PTQ1OD8pMDcpMS4yKSksLC0rLTkkMDQyJTlCNy4jQU5JZzI3J0ZhTFYlLUIuPUVMUTwzcmtLREORmKStpKytq6ajsLKzqrawtp+rtbrIua7Bu8O3s7K1wsPPxMDCvrS9wcC6v72zxKiqubG2t8C9sKyzs52gp7CtpaaxpZ6ytayrsrCsqai0uqy0s7WstKypq6isqbmtsbDHvrikua+pra2mp6ywpaOjrqOpnJ2bmq+ZoqOio5Csn6Ogn6GppqW4pKu0tKSqq6isrrauop2jqKqcoJmakqS0mY+JjYeRo6CWjpWfoZaUhpCUlJ6bmZaVh5iSlZmnnaCgjZORjpF4fo6FfX19h4qKcnRzf35+XFJkbl5OWmddRkSWW0c6Tm1YYltNYWJOVlZWV1RZZ15RUkxkWltUS0dPVFNOR0lWU1xOO1BeSkJESEpBRT8/S1NPPjpOTUM8PD45OjU9KzMyPTYyNDk6KDQ1KS8sMSgpKywtKiY1Ki8mMCkzODoxJiozQ2U7NipIZEhKKzpJPzNDSVMsPo9rPkhJj5qpqqGpr6Sno7O0sbS1sbGhq629zLquwbvGsbSttMLD0cTGv8GzvsPCvMC4vMWorbess7i8wbGssq2hpKetqaiksaOrsaqvq7Gurq2rs7unt7GyqbKpq6alo626rKqwwrm0rLmoqaitqaewpamkoq6qqKKenKKslaSdl56Yq52hp6ihrKairKu3sbGgqaKfqq2wrJ2epqepmqOYmY+gqJiGg46Ki5+gkIyOl56RkIeIkZWhnZaYloaWk5OXpZ2dnYySkI6KgH+IhX13gIeFh3Vzcol2bF9ZYG5jUXNyXEs8hHxGP1d1WGBZT2NcTlVWVVdQXGFfVE9PaFhXVktHTE5SSEVJVlJdYzxQXUQ8RkhIQkc/PUpQTDo+T0o9OT89Mjo3OyozNT4xMDQ4NSg1LyosLjMwOyksLCclMjM0JCwyLTg2MCkoMTxeSzAuSWdERjg8QjA1RUtYMUCUXEBNRpWWrKehqbGcqKmwtqy4tK6qpKurvcm7sb63w6+wrbPExM7Ow7+/tMHExLrBtMnErK+3rrK6wL+0rq6rpaiqsKmmqLKmtK2qsK6tsa+zrLO6pLizrKytp6ugop6wt6uqrbq2pLW1o6morKyqrKCopqaxsqOmpaGhq5apoJOaoKaeo6KqpKyinqaxt6ysoqWimqmqramcoaWkpJmgmpWPmJ2TgYKQiYWdoI2Lj42bkJKMhY6ZpJyTkZuMk5GRlKObm5qLjouLfIeBgoJ7dYGEgn51d4ukh3lrXmBuZ1dmh2ROQGeSTERieldiWFJlVU1WVVVUT1xdYVZLTmlXVlZJSkhJT0JHSVNRWW9BTVhAOkpHRkVHPj5FUUg4Q0tFODdDNzI6OjoqNDk/Li80NjMpNCsqLCsuIzQuLSsmKCs3OSomNis8LTIsJjA2WFouMEpnQUE8PEMrOkpPXjREhkFJSESWka+koqmvmKmorbWrtrCrpKuqqbzBwLi5s7y1prKvxMnL0b/Bu7nAwMK6wbrCxK6xtbK0u8G+s7KvrausqLaqpa2wq7muqLCwrrGrtaq2taa0tquspKmqnKOds7OoqKSztKC2rqGpqKuoq6afq6uoubapqampoamfrZuRqKGdoKOipqKqnZumtK6npamio5elpqeqnKKjo6CZmJ+Rjo+YjX6HjYeFnp6IhYuLj4+RjYWHlqOajo2akZKRjpOfmJmWjYuEf3SHgYB/eHWEgHt4foCInY9wcmdncXhcYXSIaU9dmFZIbXlVZFZSY09MVlRVUU9YWmJWSFBqVFZTR1BZVUk+SUhPUVB4TU5WPTxLRD9AQTxAQ1VDOUFLPTU7RTEzOzk3KjQ6PSstMzQxKjgqKisqLCkqKC8qJiklMzssJDIpMjAyMSUvMlJjMDI/Zj1OWD9DLD9MVF8vSWs3UUU7lY2voKWqrJmqpK2us7SuqqWvqam7vrvBsa+4raK1r8nHyNDAv727vMO9usPBwL+vsbOytr28wbKys6u0qaW1qKSts7K4r6KttbGvsbmquK6qrrarqp6pq6CjobWtqaGer7KhtaqeqKiqo6qhoaytqL2vrK6soaenn6yZj6+imKKgqKeep5uYqbCoop+soqGSoaKippiaqKWYmJidj4qHlIh8jYaEhaSWhoOCjIeQj5GFhpShl4mRnZCTkI2RnZWXj4qFhnhzgX99dHh6gXt0dHtqgoikdmleZWyBdWeIi3xSV3BeS3hzVGRTUV9NTVNaZ05NV1llWUdTalJRPkJOUWFROklITFNJcVFMUzs8ST87PD07QEBXPDw+SDczQ0IxNTo5My01OjopLTMxLS02KSgrLSw1MiMyKScsJS47LiYxLjAtMTQlLDBNaTozOF89YWQ/RjFDUFtbK0hQO1lDNI+OsZ+kpaqjpaOsprSzsKmksKequL7BvLCouaqnrrDJxsjQwr3Avrm+vrzJvMK5sbC1srq8ucCztLutuayjtaanrLG2uLKmp7q1rbS8r7ulra21q62cqa+kn6WsqqecnaqypLSpmqqnqqSpnaKoqKm9q7SvrZ2po6Cum5qyopakm6Sln6SamaeqpZ6aqaGbkZugpJ2YlqmpkZmZkpCLgo+FfY+CgIiej4eAfoyIkpCQhYGUm5SGk6KMk5GLkZuTlYeJfoByenl+fGh3fHt1cXJ+aYZ6hIhkYGhjcoV7bWh5XV5WQ1h7bVRhUFJZS0tNcHRdSVpbaFpFVmdPQz5LTkRDQTlIR0tTP2phSVE4PUg8PDw+Ojw/VDY6P0M0NUg+Mjs1OTAyNzw1KC41Ly0xMSYvPktJMSUaOTAlLCwwOS8sLCs2JzE3Iy0vR2pJMTRYPWZiQUo3R1NgVSo9PEZcQCqOkrCZn5+ppaOhqqS2srGkqbGnrbnBvbWwo7mtqKiww8nIzMG3vcC1t7+6yLbDtbSztbK9ubq9tq25tr+torOmqquutbe0qp26u6ixv7K6oK+0tqmsnq6xo5ylp6mjnZykr6avoZ+qqaehqZyjqKCtu6eusa6gq6KjrZ6erKaYn5uhopyfmpmiqqKamaOjlZaTnqGWm5amrIuekY+RjIKKf3+PgXualIyJfX+Mh5CPjIqGk5iRh5SjiZGRh5CakJOBiHx5bH12eXhie3pycHFzeGqCdWqDZ2NoYW5zjm1ianBgb0JdeWtWXk5RUUtJTVNZVk1cXm1XRFhhT15QSE1ERjs3SEVLTzxyaEpLOUFFOzs9PTs7PUo0OUI8MztHPDQ/MTgtNzg7MigwOS8sNS4uPS0qTD4qHTQ5JicuMzQuMCsvNCYsOiQ0MEFoWjEzUz1lX0RMNktWZE4pPTNSXT0jkZesmJ+Xp6Ohn6ejt6+toq+vqau5wrqzrZ+5r6uotLrHysi/t8K+r7S+tsS2w7KwurGywLa7vripubi9qqS0pqiqr624sKmZubyjrb60s6Gut7Wnpqews6CepKWnoaSZnqyoqJ6gqq6noKaXoqifsLifo7GvoauhraSbpqapmpqbn6OVnJuZnammlpqeqJGYkpidk5mWoaqQmomNj4d9h36CjXx8oYyMiHmEjYWKjY2FiZOajomVn4iQlYKMl42RfYR7c3B8cXN0YHl4am9wcXBqf3NkemxoZmRiZoeAYFtyanFNToBpWFpNUUxLSFBSUUhNXF9vVEVYWlJnT0hLRUY1NkhCTEk1WmVKQDZFQjk6Pj0+OjpDNTk+OjNARjwyQDIzLzo7ODMmMjwwLDg1QiopLUMqLDQ7Tk5AOzczLS4rLTcqKjwlNTM9ZmQyNE0/ZV1GTz1SWmdIKj8wXVs1KJWbpZiclaygnqGkobeqsKO0tKmpusW2sq6gt6ytrbC1xcfAtr/CubC1vLa+u7+vrL6ws7+yvcO5qbu6uKeotainq6+rs6+lmby2pKu6ta6fsbivqaWnr7KcoaSgpKShlpuvpqGfo6ivoaCik6Okorawoaawq5+ro6+Xm6qlqJ+Ymp2kk5qbmZylqZmbm6SUlJeVnI6Tl6KpoZCJio+GeoN9g4p5j5eKjYd6goiEiY2PhY+TmIyOlpmKjpZ+hZeMj3qAenBxdm5vdF94d2VtbGxqaoRvZnJpa2ZpXmR0gWBba3ZpWkp/XlxYT09LSEhSVUczOV5ebVFFWFZZZU1ISUVFMDdGP0tCNklKSDs2Rjk0OT49PDk4QDg7ODo3QEk+ODw0LTM8PDc1KDU+MSw7QTEoKzY8IjhSPSoxMTM+RDUsLSc0Mio7KzEzOWNtNzRHQWZbSFREVV1oRC48MmRXLDKUoaGXlJuqnaShoqG3qa6gurilrL3Fs7Cuo7Wvra2utMPDvLO/urexs7m3ube6r67As7S5r7/BuKy9urWmorKpp6myqq2xoJrAtaSntbWonrK8qaelqa+smaOnnKSllJihsaWZn6SoqZyin5Kkn6O4qKSnraadpaGokp+ooqGhmZucoJKam5afoaqbmpiglJCTlpmNk5OjqKSQiYmOhnmEeoOFfZ2NiYqHeoGEh4mJkoWWk5KLkJWTjI2Ue4KXjot3fntsdHFsbHNhd3VpaWpnZ2+GaGhpY2ZpamBrY2poXGV7Y2BTdFRcW1NMSkdJT1NAISppXmpNRFdVXmBLSUdFQy46QjxGPDZLUEQ4OkQzNTc9PTg5NT86OzQ+OEBLPT45Myk4Pjw6OSo2QDMuRTQoKyw/MC1OPy4rLTcsMTE5NSwmLjUtODA1NzZgdEEzQ0RnW0tXR1VgaEIzNzlnUCcynaKjkY2kp5uenp2jtaynqrq3p6zEwbawrKO1rqeur7e/v7yywbewrrK2tbi2tq2qvbOusrG9v7iuvLuxpZ+2qqWls6iqrZ6dwKuopa+yqay1u56oqauxpZieqZ2mpJGZpq2imJ6kqaGboZyWn52ntqWvqq6hoZ2doZSgpp+hoJqbmZyRmJyTpZ2roZeWnJSSjJWXi4+YmqmgkYiJioh5hXaBgoKdiIuCiX1/hYiHhpCElpWQjpCRkJGMknuDlY6Gc319Znhva2prZ3Vza2NnZGR2gWNlZmZmampja3NaX1ldbWRhTmlYWmBWSkdJS01SWD45X2xpSENVU1xbSUhGRkEuPD85QTg5UkZANzpCMDM3PTc2OTI6PDk3OjlETT1CPDAqPEA7QT0tNUIzNz0rKiwwQipKSy4vKiszNzIyKDU3JCs3LjcyNjg1XXlOMj5IaVpMWkpWYmZAOjNCaEglNZqjn5CMraGYmJ+WpLOxorG9tqGxxry6sbGkt6yqrqm5vLu6rcCyrq6utq6yuLOoq7mxr66ztrq2sLi9rKaetaqgoK+jqa6cosCgsaOur623rrWera6traKanaeppZ+Vmqeln5mloqidmp+blJydrK+luqeuoqGamp2ZnqSapJ6XnpiblJmgkqiVqaeak5qakYuVmY6UlJmpp46NiomPfIJ0gYGKmIWHfImJhYWKjIqShJSck5KPkJGWjpB/gIyNgnCAfmZ5bWhraWdxcmtcaGNjdIFiZmhqbmxnampobl1sbHRwYVVjaWRlWklGTE1PWFFRVmFlgVRAVlNZVUZIRkVALzw9Nz82PEZOYTg6PzI0OUAzNzgyOD83PTg+RkpARDkyLT1BPUE9MDVAOUAxLSsuMzw7SzYvLissLTI0OzYjMyopNi41NTQ2NVp8XTE5S2pbTVtLWGRkQEExSmZDJzSRoZqNjrCempOhmaiyr5+4v7agtMK7vbmxprawqK6lt7i3t627rqyqq7aqs7itpbO1sq6psLe2sbO1uqapn7WonZ6ooaismqe+mK2jrq60ta2sn7Gtr6minJ2jq6iclJympJ2aqqKklpqfnJCbo6uqqbufp6SgmJmZnaGPa6KWmZxwgpWao391kamnnpSUnpCIl5mAloqhkHiGlIyDbml+doNxbIaLhn2EjIdwXmNhZ4SYhmyLj5SSdHeLhH6Dj39nhoBndWhlV1xoc25OUGpjZ3OFZ19kZm5tal1gYYqPg4RlTktEOUZUZ15KR1BQVFVLSFJgb3RlRlpRVVBGSEZDPjE7PTY9NjwzZlw1Ojw3NTtENDg2MDpCNz86PkZMQ0IzNDM9QEBAPTI4QEU9MSwrMDg+RzYwMS4qLiovNTY4LCMxJzIxNDoxNzVYgWwxNk9rW05cS1tmYj5HMVFkPSoui6OZhpWwm5yToJuqraqjvcWvqbjCuL28rae2sKWro7ezsrOxua2ppqy0pq+1oqi4traop6y3s660rbOhqZ6zqp6ho5ulppirupWlpa+ytq2upKmuq6yloZ+coKenm5egpaWbm6ennZOfn5iQnqeqo7Wvo6KinZaXl5ejiKCOkpqHoYeTnKB/pH+lqp6SkZqRiIRyeI2OhYihdoiMaZeIZn1yeKFviIeEfo59f6GgoJmAfIeedIeOdpuKbIeBg2xoZWN6a3FhU4VtY2xpmHFZanBviFheaVtsbFuIcW56coVnhoRaXkdOP0dfTUVSVlZRUVJXVGdeTVdJUlNQRkdHPjw0OT05PDc7MDw8Nzk5OjY9RjU4NjA8Qjs8OT1GUUc9LjU8O0A9QD41OUdBODIpLjE8STkvMDEuKi8oLTQ1ODMlJjIxMTU+MTw4WIN1MjVSa1tOXExcZ189SzFXYTcwKIumloOcq5yZmJ2fqqqnqr/Dr7G6vbfAv6qlt7CpraWytK6vs7eqqaWwraW0s5yttba0pqeos7Gtsqiunaqgsqigo6KZoaGarbOUo6SltbymrKerqqyopaGgmKCmo5mZpaOkmJykqZaUo5yUk6SlpqG3o6Ogo5iVk5eSnIivkJiUiamLl6GbhbGAo6ydk5mdlHmD1KiAh5XBm8d5eLGlt5dkgMCcv3mEhHmQhHyQkJHKcZe8nMV6crWmu5B7gGyWsauweGhrWLGubmVpvJK8bmh6b3KQ2H5Ta2O2sn+BcpV0mqGqkFdPV2JQVk5GVVtYUVBSjFxXXFBAXERRTkVHSjw8NTc9Ozo5Oi49Ozg3ODs5PkY2Ojc0PkA+Njk/RVJJOi41PjtCPD9BODpKPjUyKjIyQkUvLjMyLisvKS0vMTg2LSAvNDE2QTE9OleDdzIxVGtcT1tNXmdcPkwxW100MSGNppKAp6qfl5ydpa2yqLHCvbK1wLW3vsKrprOtrKmnrrOpr7a0p6eltKWnt66cs7K2qqWkp7KurrGmqp2npLGjop+dlpqena6rlJ6in7O5o6qpoq2upaGdm5qip5+Xm6egn5iep6eRnKeak52hpqKgsKKfn6OWlpKXkpmFr2tqio2qfmeDlYatZHCdnZSZpZRxrqGkfni7fWuhj3axX2q0W6WAZpyRYGaCemZ/anhrqWS+cmemjHWxanyxeHSSk2NtbaduW4SgRWhmh5ZFdZxgfmh8pKeCWV+Lq2mAlnh5aqc3Sq9cWFNsZFtLTlhfXFdWO06JT1hXL0lUVEpERkY9PzQ2Pzs4OjkwPTg5OTk6PTxEODs6Nj1BQDY8QEhRRzkwNzxBQz5ARDhARz0xMy0zM0UzLi41My8rLyguMC46NS8nJDIwM0IvPTtVgnYyLVZqXE9ZTF9nWTpNNV9ZMzAbkKKVgqynpZ6jpKqyt6y0vb6wtsSyt7rCp6mwq66pqbCuo7C6r6OkrbKjqLionrOysKOloKqtr6yvpqefo6Kwm6KblpWWmpqspZaboZ6zsqKrnKKtraCdmpegoaicmJ2jn5yZoaakj52impegn6qepqagm5+hlZWRlpGahbWbtXiFqZm1mXaGs5u3fpOWlqiUfmyCpnuChoiSlJJ3q2drsVure4+HlHSJcY+GgH+IkJd4goKLmIyDoI+EsHZ3n3Fra2x8i06kWEhjY5l+Y2imYHlzdVOTh15QqW1jcX6HgGKcLlGhb1tTa2hgTEtbZFhcWkI+sXlYWEEjTWhGQ0VBQEExOT44ODo4NDs6OTw5OkE6RTo6OzY6Q0I4PT9LTkc6NTpBRkJAQUQ8RkQ7MDIwMTtGLDAuOTQwLC4oLzMsPjgzMR8vMi1EMTw8U31uMytYalxPWE1fZ1g3SjhhVTUwG5WflYezpqagrqmnsqypu7bCsLvCrbi2v6qsra2upq2xqaGuu6qgp7Sso6u1paazs6ejop2nqrKosKilnp+fr5afmJSVlZedrKGZmaSotK6hqY+pqKqbnZWYoKWnmp6cop+boKOko5WbnpeZnaKpm6WZnJyioJaTkZOTnYPVk5m5cLDCfsWGfNaUm7t8mpWkj42cjaR7joekgqWCeqx5j51Wr3qIfp9quVq5doeEfaaCk3yYeqp5jZ2Qe7FujoR0kLyFb5RQr6fFilGgemNgqWJzc4htl4hgU7W0yIaAiXxjpDNCnXZdUGppZFBAWGdaZGFKSE5tTVtST1lmWUNEP0U/MD08NTk7NzQ8Ozg9OjxDOkY6Oz42OkBDOzZAT0xIPDo8REhDQkNEPEVGODEyMTFEQy4vMDQ4MystKS4zMjM5NzEjJTUqPjM9PVF3ajYqWWlbS11PX2ZUN0c6YVE3MSWbopOYsaiopbOqpbSppLy3wbC5wLG1s7qztaexsKOwsqafrbWnmqe5raOvsaCztLCgpJ6fp6mwqbSopJudnquXmJeVl5WVoKmcmZanrbCoop+PrKKolp2Wm6GloZihoaGhmqGippueoZ6UmZumoJunlZubn6CYkJGUkZ2Ism5otXGrh26OpnK0c3K2e5qXpIuPnY2jf5GhpX6wdoOR0tJ2XK57hX+kb5uqpmuHhX2tfZeZj3uxc5Kdj3mzZZZ0hJ5vnmaUUsiLWsJcn3liX61gdnSHYpeIXlnKnW+/gXVNS7VTVcZkVFFqY2ZYQU9rYGxoUFVHSTg9VlFaV1hJQz9KPDI/OzU9PDQ2Pjs3Pjw9QztHOTtANzs+RDsuQ1JKRz4/PElKRkNFRD5ISTkxNzQ2QD4vLjI0MjUyLSkuMjYsNzQyJh82MDs1Oj1QcWg5J1dpXEJPVF9lUDVHPWFNNjIwoZ2Spa+tpKq8raa1pae2u7yyur+3tbO5urOltLShsbGin6uvpJemua2ksbCctLiqoKadoamksqisqaSZm5qonpWUl5iSkqKnn5aSpaqwpqGVk62fpZKToJukpp+VmqWmoZqin62ZoJ6dkJWboZ2cpZSdlZminpWYlZGbhax7d6h2o46IhqlvrYqCp4OYmKGJkpqKon+TmYmuhX+Cs1xys1KufYOCpH9x1314hX6PnYaZmnevhoqRnIh4s2GaZZqBgpRsklqwWEuadZh5ZmCtXnZ3h2iYiGtdr3eVno94bDV5yK6yX0JUb15nYEVQbV9wbVZVTS5lY2hSWFE7QURATDo1PzkxPTwxNj85OEA9OkM6Rzs8Pzo+PkU5LUVVSkVAQzpNS0pCSEc+R0s5Nzw0Njo+LzA0MzMzLjIuLjE4Ki4zMiUhMDM3Njc9UGtlPiZWZ1xAPlZfY042R0NgSTo5OZ+dlJ+4sJe0wa2os6ipsrq3s7i/ubextLu0pLiznrOsn56oq56Up7WrqLGxq620pJupoKCoobanpqmimZ2UpKGTkpuYkZSipZqSj6atr6aglZmpn6KOkaGaqKSglZmlqJ2cpJ6snKGdoI2UnpqdoJiZm5aXoaCTl5CmnoapfX2leKGPjoKqcK2LgaeGlp+hiZeXiKOCkYiUqnyAi514b7FaqIKCiKB5dNh/doh0qIGOm42So3yWkJ+Ee7JenGSgfoOVbJJcq1tak3+Rf2hnqmRye4FrmIdzXaxaiaCOa29lT0pDoVxbTHRdYmdNW2FfcnNfSlY2SpuTWEhFPUdGQU0zNUE4Ljs+MDVBNzhAPDY9PEY/Ojw2Pz1CNy5IVkpFQUg2S0lOQElLQEVOOjpANC47PjEwMjE0NCsqMDUvNywmMjEoJCQ2NjcxPFBlZUEmVWZbPzJVX2JMN0ZJX0MyPzihnZmZv6uXtMKurK2pprSwt7G1v7m5sbC1uqm6tJ6vpJ6kp6edk6qwqa+ptayqr6GYoaCmpaS6oqOroJabkaKglJOemZOXnp+PjYuosK+mnZabqKafjJKjl6iqppSWqaeenqCjraOhnqKNlaGYn5+SnpeclZ2hlZaOq5yPrm1ytHKpjHaKp3O0eHOzgJGko5KcjYmkh5B3uG+Me4uiamu2WqCFZZeXaaGip22TcrR0k5h/smqFkoita3WzYZ1mom+HkmqXXK1fTaF8h5FSc6NseX9+b5iHcVyvVjycd2VUb24uXKdPY1NrZWJtWmNdYXB7Y1RaUT4+bW8zQ0JAP0w5ITdANi47QDM3QzU4Pz8zOzxDREJKRk1JRjYySlRLRUJJNklKUD9ITkNGUD08RTUwOzswMTAvNzUsKyw0MjYvIzAwLCwdMjg5LzlOYGVEJ1VkWT4vVV5hTDVGTV44MUM4pZqbnbuhnLLArq6rq6e3qbivtcC1u7CuuLaqwbWoqKCbpaShnJGqqae1o7Kor6qgl5ynoKSruJ2jrZuWmY+lo5WMnaCamJyfkZOUqrawp5iUnKypl4yTpZmlrKKRlqqyo5+epquwmaGjj5milp+blpyXoZKcqZyUkKuZh9SSmrtzsMOAw4Z+1ZabuHiIkJiMmIqMp4h6o7Z1fXd2woKasmCDunnAfHW4YrWBjIepfZWBrKlxe391vIinoGmdYaaOr6F+jHSHqn2+bnO8dLKDdXiBi26aiHFujaR0vV53fVthebxrWlZcanleamFlZ2JteG9ZW1lDQUByQENGKzVHIic7PzEwPD83OkI5OT1DNDxATlpeYGBfX19aUFBSS0VGSjRITFJASk5FRk9CPEU4ND05MDIwLjg3LSouLzE4MCItMSwzHiw8OjA4TFhhRidUY1g8L1ReYEs1O0xbLTdCOaebnqG8opexw7Ctqqussae4r7bEsbmwrbmurcCxq6OinqOhnJuQqaOqsqS1pq2lnpaZqpmmrLmdo66YlKCQpZ+SjJyjnZedm5GVkq65sqyVl6Onp5SQlqScpKyekKCoq5+anqijs56jpY6nopSimpyXlaOYkK+gkpSpnoWQmbV/j5GMt5V4gpOatXdta25zb3mPhI6JdJ7Bu72ae4GyqHCAdJG5g3yGhoyGjXuKh42XfKS7ub2cdXq0o3R2l3V0sHWZnmaGao21dHJxd7aMXoB6fYpog3lteWOLrHB1hX9ZW6dqRWVaVGZgY15jUWhncW11Qk1QTEQ6Wk0/SjM7MCA4PjsuMz1BOTk/PTs8QzZCVFlaWltbWlteYGJgXVNHR0g0RElUQktOR0VPRj9HPDc/NzA3MC85Oi4sLy0qOC8lJjIoNCQoPjcvN0xUX0cnU2JXOCpPXl09KzpWVic+OzynnqChv6WWtMK0rKuorKupuq6wxa60sq22prS4rKmhoaWeoJ2Zk6ukraqmtaenn5uWoKOdrKS+pqGql5SckKGakY+hqKGTnZiTl5SxtbetmJ2kpKKKkpKlm6Wqm5WopaWbmaCopqajqaGRrZ6Wo56Xl5edno+wqJSbp6GOan5pm6V4h3J9mo50emSHe72+wLpvkoJxlYdhc2paXpuKYWOIjpVrYICVZG2dd2KVa4CalZRlXmBjcZqKaXKMfYWVZ2p+cnR4fX5iW3d0gWhQXG6EfXyLa1hseoJzSkpvhnBOdExFV11nYUxaWGdjX09bbnVpclJPREVOO0hIPU0/MiwyQT84LzU/Qzw5O0A7PUM+UlZWV1laW1xcXWBhYWFgXFVHNURGVUVKT0hGUElJSDs4PTUxOi4wOzouMC03Nj01JiIvKjIsJTs4LTdKUl9JJ1NgVjQpUF9MKDM9W08nPzI+qKCoocKjmrS5taOspa6np7Wxq8irsLKqtKK9sbGmoKKonKKbmZmspq+kpLWppZuXlaGbpq2ovqeoppWTm5WfmZKXpKmokJ2Rj5icr7K/rJunnqeiiJORqZqoo5qbrKCjmZmip6yin6uimrGblKeglpSdn52XsaSXoaiZnJGdnKKjmKWhmpyampmPlYFnbn1xd5KXlJGFi7WqjYaYlY6KjJiXh5SVioSSlJGJjpKUmJSYlpqgoZqclKGejYJ6pIZsanyQfIB1ioqBcYJ4eXZ2i4B8imtzgXSDdWV2fXdrb3ptYGNdcGhNWFpmamBXWnB6bm1mU09GUzlPWU5STygrOktCNjM1PUBBOTpDPjxFTlNTVFZXWFlaXF1gYmJhX15eW1RLQ1NHS05ER1BMT0k8OjszODksMjs4MjApNklSTzgiKSsvMiM0Oyo3Rk9bSiZSXlMxMFReOis9OFxLLDwtQLOhs6G/oaSxsregqqayp6WwtKrIq62wpLSlwKezoJ2kpJyjlZWgqqeso6O2q5+Zlpafl62qpcGeq6SVkpyXnZeSk6KfnqKnk5GZqKeyxK+aq52qn5CXlqedqpucoKyYoZqboaSvpqGlqJ+umJennJmaoJ6enK+gnKGmlZeSmJOfoJWinZigjpaTioqNjpeukHyVm4KSgouqqIaBmZeKhI+fiHuEkIeGmpKIhoqVj5uXjZGYnaOWmpORno1/jmahs6+FioR2e5KKfXZ5em9mepGBgIlrdYF5iHNpc397doOGgmt1ZHlmYGplY2Rma1lse3BpalxTTFBEX1RGQD8+LDRARjs0NTs+QTs8Pz4+SE5OT1BTVVZWWFpcX2FjYV9eXl1eXVhWSktMQklPTVJKOzw6Nzg2LzI5NjQuKCYkLTEuLykrKjclKzwoNkNNTUQvVF1RMDVNWzE3RTRcRzU8LEC0oLmvv6yrrrKxoKumsa2irLOwxLCqq6Kyrbyjs5ufpqKhnJmXp6WppqSlsrSelZSdmZmwpa6+oKuikJGdmpmUkZSinJeonISeqquis8izn6qkqpaWl5qmnaian6Oqk56fnaCpr6mlo6uirpufoKCYpJ6cn52vo5ieqJOXlpuQo5iXp5yal2WCknxlfo2akGR5jWxoa3uSpKpqZZqYfmeGimVlaWh7jqGPa2iNl5Gjd2tqi5mjnplzbG57hI2HelhlXoaCXm2LiYF2XGhzd3eSgIeCbniCeIBzbXmEdHaIiI6DfGqHWV5sdWRdc4lpa3xxa2NeUk5XSmRYQUo0Pkc3P0ZENzE8PT9BRDs7REdISElMTlBSUlRXW15gYWFgXV1dXV5fXVpVT0RIT0tTTj0+PT02NTM1NTU0KiYmJSwqJS8qKyc2KiQ7Jy9BSltKLzdaTzYpRVkvRE8xWUM7Py49pZ+6vLmvrLOxqqWora2wpq2tsLyxqaajra6wnqyWoKOdopmZpqucraOlqKmyrZ6Vo4+ir6W2uaWuo46OmqGZk5KaoJmZpZV7pa2iqLTEuKSip6+enZSeop6jnKOpqJGeoZ2gqrCqq6SqoKqbp5+noKuVoZulsKSXm6qVoJ2akaSWnamXnn69g4hytHKEnYataHi5xLhxk6KjeqaZmXOqgnzLwMC7cYyiiIKffZaYiZ3AvYKXnZ2NncLBfIJ8ko2aw8B9a6WyboyBb8p6f5t3kYOOgXZ6gYB5cXp/h3B3hYyTeW54lGNmX3lkYGWCY150aGxkYlhMVklRWkhPRDJJRT9EQj4vPD8+QEE6OERDQkNFSElLTU5QU1ZZXl9fYF9eXl5eX19fXVxTTVBHVU5BPz89NjQ2ODI3NiomJSMpKiYuKyopMTAfOSojPklbTCojQlEvI0ZbM1BZL1VBQjsvOJajucO0sLDAqaiUo6+psK6tprO0r6mlpqawq5+rmJqin5yaqqeinayjpaikpLSknaKSpq2ruLOnr6KRkZmdpZKQn6GYm5+dh6espKutwMCxoKmvqZeRnp2hmaKjqaOSoKGdna2uqayno6Onoaalna2okaSaqK2pm5ypm6yglZWklaCilpx/zpR4eqSBeZWWm1+uj16Op4GioH2nlpt0q4OAr15jjap7p4eFoHWXk4izY4KrhqGOjbNqha90fZeIt2GDrVmjzW2QdXvae3+ZcH6IknZ+ZXuIdnZrfIhufYWQkX5tg5BhcmxwaGBfeWRccWhqZGZgUlRSV11LT0M1QUhERDg+NjtAP0E7PThAPj8/QkRERklKTE5QUk9TXF5fX15dXV9gYF9fXVpXT1VKPT8+PDU1NzgxNjQoJyQhJywmJi8oJiszHTYwJDc7U0wrLC1LMCc7XDtMLSFQQEY0LjGtwsC/tbSwuJedkaSqqK2zq6ayrKyqo6qmr6qgp5uZpJacoq+foJ6op6OloZ+wrJqdlaeurLGqqKyglJKbn6SSj56lmJ2no56upKuwqL/Hs6ipsa6Wkp2boZefqaqflKCfnJ2tr6erqZynqKSiq5KsspaloqqqnaOmpKGwoJKZppifmZOUkZegcYWMl3SEqIdxsXydcax+oZ6BpY+ed6qCfa1/nHOtfquHhp92mJJ7fJd+qoiijJGMnX6re4mUkJ+Ae61WnMR6j2+SwX2BlW11b4xtZXZlhm9hd25yb4mKko+DbZKQZnB1dXFhZ21lX29paW5nZFhTXGFZUVNDOUlJQEM8PjxARkRDRUE9PDw8PkBAQUJFRkdFQENJU1dZWlxdXl5cXl9hX15eXVtaUkM+OzkxNDc4NDUyJiMfHCAxJyAxJyAnNB41LSY3PVdKLTwnPjEpM1ZARiEcRzpDMS4rsNTGxrK0oJyjjqOjoqyvtq6osKaoqqasq6unoqOdmaGUoKWrn6KloKioop6dsKyXmpapp66sqKapnpeUmqOhkZOgrZudpqOvrKOstaq5zbKtpq2slpWcnaKYnq6snZagmZ2fqbKpqqqbrKuko6ybr7GiqKuupZilqqipsaKSlqOkmZORhKRqpHWJeql0erJwgqaKmYxxiKCah6RgYVKrhH+ug5t2rYGmhoafepmXhntmgKOJpJmGgqN9qX+ClYeuX32pVZ2ikoF6op+Ae8OvxYtyr7OzuXFiqa/CdGiMjJiOgW2alHBueXh5cG1mZWVxcGZ8amNdV2BpWFhVTExRTENDQUI7Q0FAQkk8PTo5Ojw9Pj4/QT04NjtETFBSVFZYW15eXVxeYGFgX15dXF1bU0lCNjc5OTY2NCwmJCIgKCciKy0iJC4hMy0mQERXSCxHKzU2KjFQS0wjIEE5RDQsJ8PJ1tW/oZmrp6Gvop6wtLCuqayip6apqquppKagm6SdnKanp6OcrJqirKGjn6+inJuTq6S1sK+gqZudlpSmopCaoqigoKWcsKakqLGstsiytaqrqZWRnZyimJ+ls52aoJScn6esrKSumq2qo6KqobOtoaqzsaGaqKeurraikpaippiakXyqbJ6Eh3WreXywb4Kki4mflpaflIHSuLS4yYCBsl9glKmDo4iHoHqYlpp4qsl0maSVqKmRk5qMgJyKmsbHeGahgqVzgZ+Ogn2vXXC0YrB1S6OGbadHgpNkjpCeknxxl5OAcXt1fnxvW2ZqcnBlgWteYVljbVxeWUlOTEtFREFCPkE8Qj9KOzc5Nzk5Ojs7OzMuNjxBRklMTU9RU1daW1tbXV5fXl9fXlxcXFxcWE1CNzU2ODUvKSglJiUkJiksNEVOUFBNRktKVkYqTDAvPS01T1RRHRw7PEYyLCSnpMDGuK2ps62spaKcsrisqqClmqilqquqp6CmpZiqo5+uq52moKyanqmlnae1n6KXk6mqtbKsnKWcoJSPpayRmZuno6Cppq6hpKepsLXDsrOqraiTiJacpJqho66mmKGVmJylpqubsJ2uqKafrKO3rKGxua+dmq6msrKypJOXp6KZno6CnU54moF/n3qDo32DpISGpp6cnpOEuHt8ebmCfszGwrZ4m6GQi59+mpaXinaemIqlmKSof7CFnYWfhKx9mpRipWykcI+FkIF9loJyrGCjc3GAmmC8fVJVdI6So5Z7fpOSi3V7c4V/cV1ubnhyaoFvW2RfaG5iZF1MTFFUQUlIRkk6OUs+QjEwODg2Njg3Ny0qNT09P0JER0lMTlBUVlhZWltcX19eXV9fXFpaWllVU09IQDg4Mi4sKi4rKicmP1FUVldXV1lYWFdVT1VGPEUzOlBbVBwbNj9ILC0gi4eZqaukq7mqr6Cboayys6WeoJWlrq2uqqedpqaao6ehs66iqaeyoJippJSitaKilZehqbS5o5uinaKTj6GxmJ6bp6Whoq+unaSoorayxLGtqa2pkYePm6ecoqScpZeemJmapqSpmq+irqWmmK+ku6yhtretnZ20sbewsqaXna6fop2Fj9G1w7d5h46FkZOQgaZ4lKF3jKCRhKWBinGqhoS0bnJqmaOclYqefJiZhoePc6+CpZuijaaLk52KlZCbbXCyXKVzk3qcbJl/e5l8balho3Fxf59ic7K4aHePlKaYfYyNlI14fXmPgm5qeWl5cm6AdV5lZG5tZmdgSltYWDxIR0BVM0BGPjwqKDYzLjAxMykmNDo7PD0+QENFSUtOUFJUVldXWV1fX15eX19dW1paWFVSUlFGOjIyMzAvKysoQFFSVFVUU1RWV1dYWFdVVVZUUU9RW1UlITJBSCQpJZNzjYqtv7+8urSelqelrbWhopmVo6inrqusmaain6agoLWno6mnsaOUrKOOpK2jnZCamqq0tKSdpJypkZSXrZ+fnaeknaectZqhqqS2q8OwqaupoYyEjZuhoKailZqanJibmaakppisqK6jpZutpr2slL2wrJ+ir7K5qrOmmqixoqaXeaiQfXywd4qApKWInG2yb6CHrXyhjoOolZmArImFroWflKqhoZeGn4CZlYB7kn6rgJ2aloureJ2fkYqUkoF6r12jgX2mp2SdgHyXc2qvXaVrcIWZXWBbjKBtlZGmmYKVjpiNe3uEmH9sbn9jfnRugHpgZ2VxbmhnaEJaYVs+S1QzVThCQkM3JCQzKycnMywgLzY2NzQzNTlAQ0ZJS01OUVNTU1ZaXV9hYGFhYV1dW1pYU1BPTkk4MDUyLiosQVRWVlZUVFVVVVVUVFVUVFRWV1dYVlVVUUhGSUojKCi9kpqDqcbCtsG0n5qsoK24paOOm6Sjn7Cvqp+kn52tmZ65oKOroK+pmq6hkKuopJaJmpCusaymnqaarJeXj6yhoZ2loZqknK2YoKimtqnAr6WppJ+LgI2bmp+mnpKUmpqUmpqlpKSaqayspKWfqqi+pJbDrKqioauyuaqupp+yraeol3avfpCLnIWHfbquiphlsIxlla19oY+DppWagayKhLCFppmkoaGRhaBbbGqBs2B/rXt7goGxbWdvmZiMiLBbfbRcpINryKJkn4B7vFh2tVqyfVKugHqsWIChbpiQqJuLl5GXmHx6j55+ZXV+YoR4dIB8YWpmcW1mZWZPVmRcQlVfPkooPjo9NCEiLCUfMi4gKjEvMDQ1Nzk6PEFDRkhKTE5QUVJUV1peYF9gYWJeX1xbWFVQTkpGQzU1My4vQFVaWFdYV1hYV1dYV1ZXV1dXWFdXWFlaWlxcWFdXR0I70p+zsre9urPBs6ObrKaktqigi5qgn5yzs6mfo6CetZigtKiqrJ6vrZ6sm5WvqaKOiJuOr6yop6Gmma6SmI+omqGepJ+Zo6OlmZ+jqbKpva+kqJ6cjn2LmpWgoJmPkZqbkpqXqJ+hmqiuqKamo6Wpu56gxqakqKGrtLWsrqaeuqyrq5SAqZKjr46bgIekl5iQgYC4w7qDjpyThKeWnIKsioKviKabm6WqkX7VvcKqYqO/vX1+o4KD17q4tYWUk4Oevb6Ea6OBb6uEbJx/erKwx4Nqq7C9rHh3or68c4GWjqeckJuRmJ57gpKce2R+e2SOZ3mCe2BrZWtqYlBhW1NqXEBVYUNOKT06NC8eHyQeJTIgHSQoMDQ5NjY3ODo+QUNGR0pLTU5OUVRXXWFcX19hXmBbXFlUUU1IQz88QT81PVNZWFhZWVpZWlpZWFdXWFlaWllZWFlbW11dXFpWWFRXWruVs7Sxv7myvbKina6lpbKmnYyYpb+quLKoob+mp7KcnrGcuqifra+lppSUsKyXjIKbka6loqygo5yqoJeKo5KmnqecmqGoopmeoaytqbmtqKOal5J7h5mRppuTjpGYmI+Yk6iaoJipqaGqp6GjqrueqMSioK6jqrO0qq+pn7mmra2Zc3WqpLeGZImgcGetj4qPbW93pJCZn4F1rpiUcI+LcZWoo5uXrqRybW1sZot4b26CmXGBempxaWeJlpWYcWlphIdncIZkXYhiam9ZXWd+d6ZfYXGOkW5lZX+Nk4+imJmZkZigfoiQlndniHhpjmt5f3lkbGNmbGJLZFhKa1o6UWVFUidLOisjHCAbIiwpGBsYLTIuNTo0NTc5PD9BQkRFSEtMTU9RU1ZdV1pcYGBhXV1bVFBMSEQ9OkFCN01YWlpZWVpZWFhZWFdXVldZXV5eXVxcXF1eXV5dW1tVV16ola2zqbm4srOqqaGunqOyqZiSvrLEyb62qp7ArKyjoaisoLqjpK6sraeNl66pj4uFlZatnqaqoJ2jo6CRi6SSp5momZajqqCWnKamp7C6q6yam5OSe4SXjaWYjZGRmJSNl5WolZ+YqaObsaaeoqu5n6/Ap6Sypaywsaqtqqa2oqy2lYqgqKW2nYmWo5mHqZqQlJ2SqbOZm6OroLGWoqCdoKKcoKWhlaunjZOSjIeTnJyVkJqTmJGOlYWBpJqXlY2Lk5OLj4aEfWeJfnSCdnSHi3GnbHqUkZOSgYGNkJCPnZWhlpqYo4OJlo5zapF3cYt4d3x6amxkY29kVWFZQGpbSGNhT1krRj0rJyE3NDAuHxwhJTIoKjY5OTQ2OTs+P0FCREVKS0tNUFBRWFRWWV5gYWNdXlVRSkVEPjk9QEFTWFtcWldYWFhYWFlYWFpbW1xeX19gXl5eX19gYGBfWVlgpZapqqW0tq6uorCjrZ+gtbGQjqzHvcW7uauipp6bpp+xqKO2p52ptaepkZitoouHiY+bqJWspJ+Yp56ekpSjl6iaqJmUpqGjkJqnmaG2u6irmZqQjXuBlIuglIqVkZWQkJOXpZCfmqqgnLajnqert6euwa6jtqavr7CsqKiyt5+tu5iRpaSmtqKSnqefjamfjZKfo6yvm6GjsKivl6OgnKOqnp6dnJarnZKZoZuUkJaqmY2ZmZaQlp6RiaCdlZSFkoyQjZSLgH1mi4V1hnV5iINznGqFkJSTkIl8i5aSkpeUopOemKOFiZqIe3OXc3qLf3J8f2pvZF5wamFbYFluY1BgZFBaOkdHRT4yPT04LysmKykmHSY0MTY2Njg6PT0/QUFDSUpHSktMTVNTU1VaYGBpYGVWUEpBQ0I6OUVNVlteXltaXFtbW1xdXV9fXV5fX2FhYmFhYWBiYmJkYlxbY5eVpKiir7KsrqOppq2fp7WqkJCdpbS8r62toqOaep2isaSlsamXm7mno5SZqpyOhoqJnKOPrp6ilaefoJKWmJuui6mWj6iZqIyYqY+furakpZmbjYh5gpOLmpOKlZKUkI2Sl6KNnZ6onp+4o4CEr7Wir691pL2jsp93eZ+psLmUdaujnomAqn9kXGJ2oI6knoSXfW6Ts52jp62qo2Wdn5JzeZmWcICYqJdsf6KoimWcpZyRl5iWjJKckYadmpCVg5KHj4+SiYR3ao6GdoZwe4aAgGFph4qUkotadZSQaGiPj3N7ppqaZnqaiIR5mWqEi4NveYBrcWVfdnBsa2hbZ2ViYnBTXD5OTk5TRz5AVEQ5MS8eHyY0OjMwNjY3ODw7PkBBQUZIQkdGSUtNVFRVWV1gaGZnV1FKPERHPDhVUltgYWJgXmBfYGFhX1xdX19gYWFiY2RhYmFhZWRjaGReXWablaajoK+wrKuppaiuo6atpJKWq7awsqebq6asl3SMnbCfqKunlJe5oKCPnKSdkX+JiJuejayaopWnoZ2OlpGehHWtjoimmqmRl6SJnLq0p6CZmIuJdXeTjZaTipSRkJSMkJOgjpuhp5mcspaAjJu1nbOMko+7p6B+p6J6oq21gI6NpZ6Di4aQsaqvjIqWo5p5gIushpydoqepp4eVhZh3pZt6h5uBl6eCgnucsnqKhqCXmZSYloKRl5eEmpljeYeQhI6PkYuDbXCOh3mAcICBhX+GdIaElZF4lmeSdKCadH2ZhKKeiJh/lIuFhZprjo6FbHh7cXFnZHhvamxqW2VramV0XF5JVExRQEU1LlpUVTcpITA5PT43NDM1Njg7Oj0+PkBEST9KRUpLR1NYW1lbYWFoZllRSDlFSzw+YVZeYmRmZGBhYWBiYl9dYGFhYmJiY2ZnY2JhYGVkY2djYWFonJejn6atrquorJ+osKamqaWZlK7IvrGil6eptp6QhJ2snKeioI2Qvp6ZjZ+aoJB8ho6ZmIisnKGVn6CRjZOJhoCRp4yGop2klJiehp+6sqedm5KOhXB1kImVkIqUkI+bi4+Rn5KXoaWWnquHn7SJtJqtisqHqq2It4WMr4KwrIKpjaWYjZ19qI9ye3ecj6eWaJWkebSMn56mqJKYwoF/q4iYoXKegJqlfZeFlbGAoX2hk6CQmJeBjpObipiRi3yFk4aNlZKJg21ykIV/eXGGgYR8hHWEgZaAj8Vmf6mHj6NrnoOjnIOagY6Ph4uacY6ThWh3dHx3aGh2cWhoa15kcG1nbVhnR11STTJENDZOYWM3JjM8RUdEOjY0NjU4Ozg+PT0/Qk0/TklKTENQWl1cV2Feam1cUUU9TE1ASmRYXWNmaGdiYmJiY2NgX2JhYmNjY2VpaWNiYmJlY2FmY2JiaZSXop+wp6mppqufo7ewqaqmmpSgo6SrpJelq7ijsIChqJ2lnp2JlL2Zk42hkp6PeYSWlpGIq5mbm5mhhY+Md5ucj56Ph56knJaamIejua6kmpyMjH5ibY+Lk5CNkI2NmIyPkZ+PlKGhmaGnfqGnh62doJatj56cnZGFgKCNqq2Fo42pmYyaf6N1gJmUa4KsdU2reIeNnJGbqKeAqat9g6F7eqdpnn+Sa2eXhpe2iZ5+bmBkWYOXf4x7ZGiLcpl9eZVsXXyWbV9TcINcX2t5g2BZZYJ9g4CXcKeqa4OjbnKlcJ+FoGpmoG1bb4x9Z1pgg39iV1Bvd2ZtdHNram9ea3BtbGlYaU9eWEY5QTRHRF5rNCxJQ1JNTj04NDg1OTs2QDs7PkJPPlFSTE1CSlxdX1deXmN2YE1EOk1PTVRiXFxmZmlpYmJkYmRkYmFiYGJkY2FjaWtkYmRkZ2RiZ2VhY2iXlp2guKCqpKaskaC2u6utopmYoKKlra6hna62o6iToaCgp5yajpm0mZCLn4yVi3WBlJKNiqaWlZienn+ShYaspIeaj4qYqZmam5KIprGnopWaiImAaW6IiIuPjoqLjZKMkJGijJSfoJyhpH+TgY+joZSgd5yWj6eDoad/hqirg6V4inyEmn6icHOUiJZ7nox5bYebjJmQm6iaj4ede4Kic3amZp5+d6RfmHp9knOibpi3tLp0k4eCf7WoZIHGuHtwlbeLcYCapGJzrKtgfWmds35ufIaCjYKLmHF/o2xyo3SfhYGkYJ2Zs5ZxfZiftHRzW56yg2pib3R2cWlvWGtscnJmXWleY0xEPUQ2UUFZcTM9U0dfSlI9PDM5NTo6NkQ7O0BKUD9VTU5RQEVfXltaWGBgfGRIQzhMV1VWY2FaZWZra2JiZWFkY2BhYmBkZF9gY2tuY2NkZGhkYmdmY2holJaVo7iZq5yToI2kt7StraCaop2jo6aunZyyrqyTmKCYoaSZmpSfq5uLiJJ4i4VxgJaOio+hkJKUnZd9kImOqKCHmI6KkaOUnJuNi6mopZ6Pl4eEfmt7h359j42Di5CRiY+UoIOXnqCdoJ6LiXecmKKMn3Khi4eoiJulj5WmqX2tjH56oJl6o5N4gXSWiI2cfZWfhpuOmZumhqJkoXyIlpCbjWyeaJqNbpqZe4CLp31yaHSrg56DdKpolZpdm4V2hJ1oqmqAuGZcqHCBnGCVjF6ndnWHiX6eaJp1hpOSl46An2+akG2nml2ofni7a36qW46EXbNnXG5yenhraVxxanh5Y2BmWGJCUUZPN1ZDUm81S1taX09aREAxNTE7OzZIPzpDSFU+WVJZXT5EYl5WYFFhY31qRUI5TltdWWVmWGZnbm1iYmVfYWFfX2BgZWNeYmRvcV9kZWVrZWNpaGdraZWciaq1m6eIY5Saq7mxr6yeppycqZ+fr5yesamtnZejmqGgmZaWoaSZhomNaoiAcnuXiIuWloSRlJiPeoqElqOdipSPhouekp2diZCpo6CajJGKgIBpgIZ4f5eMe4mOjoiPlpp/lKKfoKGTmHJon4qfj4xwkoyBqYeYnqGmnqZ7sK2joriXd6OzoqSAiJR5nXuqmn+ijp2bl4iXcaF8hY2vtX1rmpGheH6YtKOjq6iEmXybfZ2af3SqWl1ve5aLeJ5iTH56eoVjeZdCTJ5ZompyfI5tgIiEmXWbeIaJsbN/gJuTp3eCnW5zfZVwmnRrpF2VdkhlZGF0cX5+bmZgbGl2e2RlYlJfV11VV0BaRlFoRFNXXGJYXklEPUI4P0I6SUY4TEVYQVdSW1ZERmJcWmBLYG1+ckVDPFVfYlpmalZnaG1vYmZnXmFhXF1eYWhiX2VjdmxeZWdma2RmbGloa2mTnIGwrpmEVF6gprO5srKpmqKMnKucnKqUoqykoqiPnp2dm5mWmKGdloiHiXeGgW95lYWRm4t8kZOWiHJ/iJKhm3ORkIGImZWhm4WOqZyalYuLinyDbISFcYGhjHiGjYiIk5iVfJOjoJ6jiK2GfbWEjp6ce6WWeqmBlZyPiZ+bfKdod21+mXShc3F8noaZcJODrn2kg6aemYCjb16oZ3WjY2+lYZzTkHx7mXhyc2OihpB+o3Okj3ZrkLOMYIKYiXOqsqi8f3eDbX6+pqm0XpxufXGXbn9yonJdpGdzpmFopm2b1Jp9hZtwenuYbJx8eJdzbqmkZ2FlenGAhGtnZmRudXdnYGNTXGZRUWJJV0pUYVdTW2VqXGVRRkNLTUpLQktFOE9AUU5YU1lPU1FhZmVqUmN3eXdJRkVjXWVaaGpUaWhqb2NqZ2BjYFxdXV9oYmFoZXxkXmRnZGtkam1naGxol5t/sKtUXEt+qa+xtK+zo5uZhZmpoKGkjqWooJipipqYmJOZk5KgmI6HhntwfYRofY+DlJqBd5CNj4lvf4aPkpJslpN8iZKTpZaDj6ublJKLhYl6g3aHgG6Bn4Z3gJKGh5mil3uUo6San4mzoaK2i3qsp6SupXCogJqQhYCakHukgKGZhphynoSjrq+Kl4x/jKSNlYOtoZR2tLW1yaFzlIqBn2Cdl6lteZWGoJt1oYd3oH6Sl4uBb0xmo5Jwm4dzpHt6dGGDgWt+oGtxZF+ccX10l2l6abO1tMamc5h+ep1rnJurdoWbbXZ4mGqZe3WYclBFfbReanZreYhmamhidHVwblZeVFlpUFNpSlZNWVRWXWhrblZoV05LQUpNS0hKT0FRS1BlY2ptZXVzc395fG51iXt7VFBPbF5oW2tpUmpoaWxnbGZjZWBcXVxeaWJkaWt7X11kaGNqZm9tZWlsZaGciK+mhGY/k6Gyqq6vtaKikICYqqKjpYymp52dpoKbl5aOl5CPnJOOiIN5anmHZYONf5igeXWPiIyBaYSFkoKMhZ2Neo2LlqaTg5ipmI2Ri4GJeoB9i3lwkKGGeYGVh4mWoJV/lKWnnJaWhGZueJxsomR8caV3m5hwZ6aAlYp6pHqfloOXcp52gYqUlo+5bpCKomJ9maGViG1yaaprdaBtbqZfmmmLkGiWh5qVdaKAfZpgjIaNdW+IYmigZZ5+aZt1b2NmiIJtcqJaX1tioW1diYxue35zcmSlbXeiZGenaJlzjJlwom9ViZBvoF9mqFSLXlSYbm1za3KCbXBpa3lza29SWVdXZ1pUbUpZT11JWGlpc2pZa1ZRUkVWXExYU2FVaWtfd3R7fXB9fHKDe39zdo2AhHZeUXJiZ2JwZ1BqaGhrbG5oZGdfXV5dYGtjaml2dV1cY2ljampzbGZrbWOcpJimemV0bYunrqOpsLGmn4uAmKudn6aNo6GboqKAlpmTjpqPi5iQjop7hnGAiGiLi3yYnHN0iX2Qe2SCh5WKiZaZgnyIh5eokYGirJGGkIqCin6AgI5zaY+lhH2GlI2ImKCOiJOqpp2JpniVm36liJaMspiekIKvl5+ld5SGeKlzpY+Emm6kooyShIyDu259pa+DhoaGk5Wcn3ylenKolaCWZp5+b6tjloqVkniobKmigYl2iIN3qpGmh2qRsGt2s4ypa4qGbW2fnpKVYH6ri6p2fn+MpZ52n32EpJWdoGqbiHesZ56tjLZ0d76NpJNZg6aNq2F1cnRxfHRxY2p+bmhsU1dbVmFiXWtNXVJdSl5tbnZgW3FZXGBbZnRlbm9yYnF0YHd6fnlyeYNzhH+Be3uMgYKAdmJ4ZGNtc2RSa2dob2xyamZpYWBeXGJrYm1sem9cXGJpYmxqd21nbG5ilaWqnYGAnqSWqaqdqKaupJmJg5irmp+lipulnamdhYyaj4eckYWSjYyNdIZ6iIRwjYV+mJR0dIVykoNtf4uSh4aTjn17goaZpo5/pqaOgY6KhZR2goeSb2yLqYCDi5SOiZyfiYyUqqKfj4B1lJeIfoF5lK6jf4GbcY+FeI+Kg357cqeMcX19epeWm4SOeHt+foeUlZOKdpCYn6CDe32Ja4yFW3l5cnpwaG5+kolxf3WBj5STcYaEgmWMf16Bf4t3dHKUdW95bm6HbYSFXnZoeI5lgICFjambfXR8lmqJiHCBdn2Gdm5tZ4xzeXuYeIVca1h5j2lueHJyb3h4cF1shm5pZ1ZbYFdcZmtkVmJVX1FfcHh4bGt2Zmpra3Z9cXJ1c2FvdWJ0e4F4dXqDdYCBf4F5i4WDfXttf2xkeG5eV25naHVreGppamVcYFpjamVtcXRuW1tibGRsbHluaGxvYY2UuKimi6GimqakmKWcq6KhhISYrJKeoYmbp5qpmIOBm4t/lpOHjoqJjXKDfI99fo+Fe5iPdHKDcJaFe32Si4aGkIV5foCHmqWOfKehi4aQkIWUg4aOmHdyhamFjpGdkIienoiMm6ifn6qDiY6Vmn5+iZatqI+Spo93b5yQgnmRbn6ohXB9lXFrcH2Bn4x/k46MaG1dg4uMnJuejnOVi4hxdGuCdnSBWXJuhpGBfX6Mal1qZHuFhImAYGl4epp7goqBdYGFgmd3ioZrYXBxgXZecoqBiI+mlYVljI+DbneLhHGGj3pxZ2hle4N6lltcamdudlt7eXh1bnNzgmZcbYpra2JaWl9aWWxxXF9hWl9dZnR+enRwdGNra2t8fXN8eHVkbXVobXx+dnp8e3p6gIB+b4aKhHt9c355c39pVFxxaWx1b3Vna2hkXWFYa2hsa3FybVdbZW5sZ3N5b2hqbWCLi6qwoZCjoZqenZeemKijon6Dma2NoJWInKKRpZV/e5iFfZKZiYiGh4pzfYCMdoWLgoWXinFvgHKYhoR+k4SDhoqBeoGFjJyhkYKmooh4jpiIlIuLnJeFg3qsgpGXmZSKnp2HiKGrnqGho4uIk5uco5mWqqGnpqCSm4eVjXt3jY2Dp35/kpGSk5yyppuVnpCNspKXhKWMjJWbn4mQm4KIkYprfI53eGWChpCLfImdhIeLkIiIgISEkHd8eXSZoIiGiZ6KhJR+fYqAgHVvc4SCfneGhoqPppCDhY2Hg42QjH2IjIqRhHltg4R9eplqcmhhdIpwfXp3d3B3dIFdXm+GaG5fXlpdXVRoclZjXFxibGh1fHxzb3Bka2tpgHxueYByanBwbGeBe3KCgHh/fn+Fe22CjIZ8eXh7fXqDeU5kdmpybXB6ZWtlY2JgW3RmcGZycW1VXWx0bWl5enFnaWtkjIeduZ6WoqGYlJiYlJikoJ57gJqrjp+NhqCci56WfXmUg3uOmYmGhISGbniBgHOBiH6JlIRta356l4eEg5B/gIaEhn2HhY6cnpOHrJ+EcouQhpKRi52RfY17qoSNkpiWj5yWh4abpp+hmp2GgpGamZiQmqafpZ2dkJZ/j4l1e4aNg6R6fI6QkYaYqqGdk52PjaqOkYCdjImTmp6Cjpd+ho6Db3iGcnVhfoOPhnWLmIGDj4KGhX6FhJRueXV0kqGKi4Wag4SMc3+JfHxycnuHg3p4io6DkqaOhYOOgIOKiYp3homKjH5xbX+BfG5obG1oX3p/aH18dnV2dXt3XF9wfW51YGNbXV5RZ25UZVteYmtpdnp+cWxtZGtqaIGAbHOBbG11bnlwhXluh4B2goB+hXZxgo2Ifnt6fH97gopgaXxqdWhpgmVqY2BpXGR1aG9idW1sVWNxeWVwentzZWptbIuJnreaoaOfkZGVl4uan5+ee3iep5GcioeklIuYmXl6jYV8iZGDjIKCgm58f3lzgYV9i5B9a2h9gpiJgIeNfH6GhIZ9j4KQnJ2SiamdgHCMi4yTh6GiioWMfaiRiJCSl5OWk3iMo5+gnZaZf4CQmpiSjJqjoaOal5GafYyDd3+Cjoagf36MjI98mKSgoZOZkI+mjY+BmpGJk5ebfpOSfoeOgXR0gnB2YH2AjYZxipV8iIxxjH+ChYaOaHdxeIuYkY9+ln2HinKBhnt8cXh6ioR6eZCLgpWlk4uEj3qGhoeFdoKEiYh8Z3N9f3l7cWxrZ19+c2h8dXZ0fXOAal5gc3Zwd2RjWV9eUmtpVWVZX2FoanZ5gXFna2RtaGWAgWttfmhwcWt9eYd6a4yBc4GBfoF0doKNhn98en+BfX+PanKDbnNpYodobGJfcVZ0b21uYHhobVdqdHZjdXp7cmJqb3mJjZ6ykqWlnI6Pl4+GnaCbnXx2paGOmICMooqImpZ4e4aHfoOJf4iCgX9xf3t0doOFfoqReGdjfYaXioGJjHl9gI2DeZeClpmXjZehnH5wjIKRlIamm4eMiYOmlYWTi5aXk5J3kZ2goZeTlnl+jpiXjpaanaSdmJKUmniNhIJ3g5aNnX6BiY2McpejnqGTmY6PooyLg5aYg5KWmX6YjHyIjYB2cX1uemSAfIqFcIaTf5CCbIeCgYCJhGV1b3uGkpeMfJJ3i4h7f4V8e3F+d4iFeYSPiYqXopWBgop2iISCgnd8goqGeGF6eX10f3hnbWVhf2pqd3N0dX1xfGJjYXNudXJtYVphXltsZVJjWWBhaGt2eYZxYmpjbWVofYNsaHVpbm9nf32CeW2QhnGAhIN/dHyDjIGAfnqCg358kG12iXR0bWWKbGpiY3VWhGlxbmB4Z2xianZwZnl8enFfcWyGhY+crpemqJ6NjJeHhp+Tl5l9eKqcipl6l52LjJiQeXyBjH58g3yAgoF4dHl6dH2AhH+Ji4BkXn2LlYd+hIZ1fX6Kf32ZhZeVmI2ko5l/c4d7lJKKp4+MjoqToZKDkZCUl5GLgY+Xn5qSj5Bzf42SlImdnZ6ml5eNlZVzjI2Ja4WXj5l6h4iQiW+XnZqjk5WKjZ6MhoKSnH+SkpWHmYh8iomBeXF6a3Vse36Lfm2FkoKUeHCCg31+in9kcml7gJaXhH6Mc4+Hg3iGfXZ3f3yFgHyCjIOLk6SPeIOBdImHfYB0doGJhXBifHZ6cX1vYm9jZHxjbm92c3h3c3RhdWBvbHVtb1xcX15fal5QXVljYWhtdHuIa19pZmpjaHeIbmZsaWpsZ4B9e3dukIhzgISEfXSBhol7g316gYR9fY5yeot4eG5sh2poX2lyYodocW9ldmdubGF5aWt9e3hwYXdti4CZmaqgo6idioqRhoqei5WYfneumY2XfZ+TkZaUiHd+e4p9e4B2eH+AcHR0fG+GfYGAin98YVt+j5KGf4ODc3qAh3qPkomTkp2TppyVgn2CfI6LkqSJjoqNmJuNhpGYk5aPioiMkpySj4uMboOPj5GInpmioZeWiZaRboeYg2aFmI6TeoiEkIpwlZqUopKSiYuZjIJ/kJ59ko+SjJmOe4qEh3NydWtwbnV8inRuhpCOknF1gHuBgYd7ZHBseH2Zk32DiHOQiYBzh3luf32AhXuFi4iDi5WojHqHe32LhXd+cXCBhoRkaXl1dXB8Yl9wYWt0XnFqe3l5bHNwZXhdbmxzbXJZWl9fYWtaUFdYZWNncXF+h2ZdamlnYmdxjW5kaWdkaWmBend1b46FdIGCg3t1goiFeIV8eIOFeoCJd3+Le3pyeINqa19waHSAanJvbXFnb2xlfGNugHp3cWx3d4p+opehqKCmm4eMioGPnYeTnXWBqpWTjoehjJWTkIB0fHaFeHl/cnN7hWtycHptinaAgYducVtYfpGNiH9/f3d1gYGAoIaRi5OdmKGVmHiKgIGNiZyeio+GkpiWhYmVmY+Wi4uMjYyciY2Pg22Ji5CQip2WoZyXlIWYh2qDooJlhZ2KkH6Lg4uBd5OYkZ6RkImJlY1/fo+YfJGNj42akXyKgIJudXBsbW9we4Vpc4OOmIpxd4B1goiCeGZybnWBmY57iIN5k5B5dodzb4h7hYt6ioWCh42bo4d7g3WBi393eW5sgYSCXnN1c3FweFpecWFwa15wan17cW1tamx2YHBvanFtWlhhYWJuWFFUWmZnY3ZvhIJiXWtuZGJma5JuYGZmX2drgXVyc3CLgHV/g4B4dYCLgHmFf3eHhneDhXyHjH97dop/anFjfGOGfG5xbHRqaG9sdnhfcX95fHR1dICCfqSVmq2ep5aFjYN/l5SDkKB1i6CUkoaLm4yVjot6cnh0gnByhXNxdYhrb212bYh2g36AbW5VUYGrlYeCd393c4J6gqGCk4KVlJmck5p4knuDjZOkmpOOiZWZkoWHl5mMlIuJj4+HnYSPinxzi4WJjoicmp+blZR/k35ohJuGZ4Wgh5GDkYKJcYORl4+bjo+MjI+NeHuSkHqOi4ySlox8iHyAa3ZqbmtsbHt/YXp+jpaCdnqAeIOMfHlnc2xzh5WKfoeFepOOcXmDb3aMeomLeYh9gYuPnp2EfHp2gYt9d3BqbIKDemF5cW5tcnRWXnBicmFgbG56cWhwZmZzdGhwa2F3ZV1WZmBgclNRTlxmZV15cIh8X1xpcmJiZWaSal9oZFtncH5wa3F0in12fIWAdHV+jHl7hoB4iINzhoV+jY2EfHmVeGZyaoNgiH1vb2t6YGpudH91X3R9eYZ4dHOFfHigj5mwnKWOgop/g5qHgIyef4ualI+FiJiOjo+Ed3R2c4Bwb4V0cHKEcGtqd26Dbn19bXVzUk2C38iS1pN8cHWDdoSgg5R3lZKZnJGZe5RzhZCfoZOTkYmSm5SGfpaWiI2NiJKNiJx/joB3eox+iYyKnJudm5WTeYx1ZoeQhmuHooSRiJeChWOMkZmOlYqXi42Ki3F6lIh7jYiKk5GJeYV8fmx7ZXJva2t6eVuAeZCOgHp9fn+Gjnp6aHJqc4qOiYGFhHyUimt9fm5/i36LhnyDeYCOlJqainx1d4OQeHJtZ3GAhW5rdXBoanVuU19wZXBaYGxyeGdra2JmeHJwcGNfd2BgVmtfXnZQTkthZ2NdenCJdFxcZXZgYWVlj2NhZmJYaXNzbWpxdox9dHmGgXV2fotzgIZ/eol+comHgZGLiHx+mHZlc259ZYh+b3BrgFpsbnl5c2F2e3uNdnJ3ind5n4ubrpugkIKFd4iVfn2KnYeGoJGPhYyYhJOOh4F0d3B5cW6Eb21vf3NlZXlxfW15fWpoa2OkmsHcru+hc2x2hHaFo4aSb5eRlqGWnIGScoWLo5eJjpWKkJ2Wg4GVkIWJkICRiomWfod6dX+JeIeEjpybmJmOj3aJdW2FiIp8iaKDkImchIVei5OXio6JjoqKhIlte5aBfYiFiZGPhnaFfX1rfWR4dWpueXNXiHqSh4V5foCAhYx+eGVyaX+JjomBgn6LloRrgXVth5CBj4R9gXh+kJWTmJB0cneHjHVzcWd2eoRjdW5xYmp3aFJhcWdrVl9vdHphcmRfaH1wcm1aY3JhYlZuWVx4Tk1MZGdiXndziW1cXGR5XmBkZYVgY2NeWWpya25rcneMfnR3hIF4d3uJcYOEfH6Ie3SLiYeWhox/fpdzaHVxeW2Lem50cIBXcXp2eXFleHmHjGl2gIlyf5yHmaeco5KFfXCMlHh5i52EhaGNjnyWjYCaiIR7c3dwc2pwgWxqbXx1X2F4d3txdXtnYGR869q1ycPciHNsdIF2i5uJjmqZkJCelpSBiXGFiaCOhYuVioyYlHyOk4iDiZB7kIuFj4F/dniDhHKIgpOcl5SXhox1hn1ug4GIhpihgpOLnoOJYYOUj4aJhomNh4GHan2UgH2DhImOjYJxhn5/cXdodnJpdHdrWox8koOFfX+DgISKgnVhc2uIgI+KgX5+kZB8bYFreIWOhZGCe4B8fpGSkJaIbnB5jIZ1a3Fsc3mCYHVqb11rd2BSZXJoZlNgcHZ0YXBgXWiDcXNqV2doYmlYbVZbdUxLTGZnX2Jyc4VpW1xleV5eZGd7YWRfXVlrbmZvaXN4in5zc4F+enZ6iHOFg3x/h3Z3ioaOmYGMgnuTdWx3dXl4k3RueHt8WHqGcYBvZ3l3koJkdoaFcYqWhZmhmqKKh3Nvk4tyd46cfouaiYl8n3+Emn+BeHJzbm9kcn9pZm14eFxfeXt7cXGAamFnYX/Vto6QpnhucXd8cZORjYdrmo+JnZOMhntph4uZhoGSkYaHmI58jY2BgYqNfI+MfYmEenR6g3txhoCWmo6TlIGIdIOFdYJ/iZGcnYWUjp9+iGF/k4eEiISJjX+Ag2d9kYB+f4KMjpB+bYJ8gnRrbXd1dHd2a2ONgY9/hX58hH+EiH5vXnFwhHuOi4F7fpCHeXCDZnmCioaLgnqDfX+Tjo+ShG5ueYt+dW1ubGx7fmNpbGpZbndaUmpzaWJRY3N4bGJlXlpqg25zYVtnX2RsX25VW3BOSE9nZVxnbnGAbFtbY3NgXGNsd2RlXV1aa2xibWp0d4Z/cXB/fH10eIZ4hYJ8gId1eYmBkpZ8iYZ2iYFwd3l7hJNvbXyBd16Df3SBbWl6dJRzZ3OHfHKSkYOan5ughoh2dpV+bXaUl36IkYSKjpp9jJp2fXZxb2xqYXV8Z2JqdXpaYHh8em1xf2VkaGdXnY9ecXOWvMSEdnGUipB/c5iMh5yUjYh0a4iPlYB7lIyBhJuMfIuGfXyJjH+TiHWJhXZ2fYFxdYaBnpWGlY+CgnF/h3ODeoiWm5aGk42cgIhlfZKCf4WDiYlygn5nfYt7eX9/h4uPfWmAfYN2Zm95eHN3c2xqjYWKgYp/eYKAhIN/al1wd3p8i4iFe4COf31ygGh4goaKhYJ3gnuAl4yPjH1ta3qJfHZ0b2lofXdlXXFjWHB0U1Rvc2hiTmh0eGZhXl1Yb4Bvc1llYl1qbWBwT1lsUkRUaGFaa25te29aW15sY1pjcHZkZ1xdYGtqY2xpc3aBg3Fufnt/dHWDeoSCfIKFdn6JgZaReIOKdIGIcnl5f46Qb298gXFpgXl6fm1tfHaWa2p4hHRrlI2Fn5igmoWIbn2Mdmp4mI9/goqClZiKeo+Wb3pzcWxqZGB0e2lgZnJ7W2FzfXpncHphZWWOsbJ3SmJapNnQl3J7koyReX+WjIWako2Gb2yGkpF6eZOHgYSZinyHf3h4iYqElYBviodxdH17anmGg6WRhJONg35ufoJ1gneFmZiTipKPlIWHb3qSg32Dg4mDb4J4aICFeHJ/f4OKh3xlfX6EdWNwc4BoeXFvdZiNhYKKe3Z4gIR5gWpab3xyf4eDiH2FiHqIcoBtcIOGjYODcYN4gJiMjYR3bW19g392emVoan5yYVp4W1lybk5YcnNmYEttd3ViXltbWXV9cm9XZ11manBfb05XaVI/WWdfW3BqZ3lxW1tZa2VZY3F5X2hdXmVsaGZsaXF3f4dvbX99gHVwgXuAgX+Cf3aBhYmXinGCjXF7hn16eoSUjHVqen9sb350f31vcnx7lHBvgH94ZpKKgqGYnJKChWeHhHBoepeJfoCFgpmKgXyNjWl4cmtsZl9hb3ltX2JveV1kbIN6YXF2X2Vl1eu+izI6PouOgHJ5homPjXeFmI1/k46Nf25shY2MdX2Pf4WClYl8g3hudoeFg5d3boiEbHV7dWZ5goOojIOPjIN9bX90doF4hJuPi4+RkoyLhn57kod4gISNg2yAc2l/fnhtfHuBioN4YXmEgXFkcWl+bXRxdIGbi4B/hH5zdX2Ac4BuWmt9dHiJgop7hn98iHh5cGuHgo6CiXGBeH+Wiop+dG1qdoCAdXVcaWl4cVlXfVNacmVMW3NyZVtKcXhwXltbWVx1f3VoWWJbZ2VuYmlNV2ZRPV5mXV12Zl90cFtZVW9kWmVxeVpoXmBnbWdpbGhweH6ObGqChH95boB7fYB/gnp1goGMk4VwgItud36Be3uIk4mAaXt+a3R8coZ7c3d9f4x6eIR+fGuMjIObnZaMgYBsjX5raX+PjXt+f4OUgn99iohrdXFnaGNbYmdzb2BhbHRhaHCJemFzdF5jZJugkG5cNVmvtXVqgIp+k4Z3h5iHdY+MindwbIWDh3R5iXiJfZOIen9zZ3aIfn2Yb3CGfWh3eW5leoiEpYeBh42Kfm5+dn5/e4qYhoGTkJeIi4SJfI+IcXt9hXxpfm1rgHt6anp2goeAcmB3gX5xZHJndYJtdXuFlZGBfIF+b3d5e3R9bFdtfXVzioGGd4d1gYl6d3JtiH+Of4Nyfnx9koiIem5taW2CgXVuXWhmdHJSW3tOXHFcT1xyb2RWS3N5a1hZWVpgcYF1YF1dYWdkaGhmTlpoTkFhZFxgdmJcdW1YWFN0YVpkbnJXal5iaGtnbWxpcHd8k2xphIp9fXB+fnuBf4J6d4CAiYuEcnuHb3F3g397io2Pg2p+e254eXeKd314gIKHf4N/fnpthYyImKONhIN7dox5a22EiZJ5fXuCkYCAfYqDcHJwY2ZeWWdfcHBgYWhwZmpvinVhdG9bYWRpdnt/vpymo8i4coWEc5N9eYiUhHSRjYhyc3CEe4NzdYZ0iHeUiXl5cWN3hnmAk2lyhHVmd3ZjanyDiJ6CgH+Ojn1yfnODd36Qj4J3lY2Uj4eCiHqJiWt4eX51aHppbH95c2l6doCDfWhgd4d+ampzaHuAaXaBjJCUfnp9fXF7dntzfWFVdXtxc4mDgnyCcIaKd3dvb4KBi318eH18dY2FgnZocWhsiIJycF1oY3RvS2V2TF5vVVRZc21iUU90eWJTWFhcYXCCdFtgXGhlZGNqZFBbcUlEZGJcY3FfXHdoVVdWd15cZW5oVmxeYWpnZW9vaHB3epNuaYiLeX5ze355goGCfHZ9g4iGg3B2g3Ntd4ODfomLlH9xgHx4eXqBi3SDeH+BgYKEeYB2b36Ji5ueiH2GeneHfGh0ho2Ren9/fImGhHaQgGdwbl9kXFhlWW1zYWFhcWxsaIluYHNpWV5kbYB3qdqqx4aHs3KKeXCOdn2IkIF6lIqAdXR1fneAcHF+bYV0lIV4dGxgeoF5iI5mcYNvZ3VuW219gZCTgIF5kpJ9eHtthnR/kIuDcpWKkI6HhYV7f4VtdXZ/bmh3Zm18dm1qd3Z/f3xgYniGemh1dWN+e2d0ho6MlXt0gHVxgHp8bH5ZVnJ8b3SDhn9/eGuIhnN4anR/goJ8eXx3e3KKgHxzZ3RkbYuEbXRba2B2Zkhub0xbY1hXVnhtYlBTdXdZUVZYXWByhG9cYGNtZGNdbmJUXXJHQ2ZfXmZpXVp7YlJWXHVbW2drYVZrX2FuZmZscWhwdniPdGuOjXV/dnh9d4GDgXt0fYOIiINvcYB1cXV+hoKJjYp7d394hHx9hYd4h3x9gX6EgHt+c3Z5jI6fjIl6iXd1g3lefoaajXmHg3SGhoR3iXtibmxbYltbYVVqdGRgW2hvcGeHcmFxZlddY2t/fMrOh7mia25ui21yhXJ+hYt/e5KFenl0eXV1e2ptdWOEdpKBdm9nX3yBeYuJZXGBampxY1hte4aciYOCc5eUd357bYdwgImKhnCWjpCIhYuDenl+cXFvfWdocmNueHJqbHF3fXx6XWV5gHdpdXlmgnZndIeMjZR8codqbn6AeG17XFhwfWxzf4p8gW5uiX9wdmZ2foB+gHV7cXpzhnt5cWVyYG2MgmxzWGtfeF1Jb2xNV1ZfVFV8a2FPVHZzUVJUVl1idIVoXGBramZiWW5hWGNwR0FoXWBmX1xWe15PVmVwWltqaF1XZ2BfcmZqaHJocXN3h3hulYp0f3t3fnmDh4B1c3+GhY6CcHB7eHd1eYeFh4yGenx/dYt+fYaEhId/fn59h398eHV5d5GTn36MfYtudYB5ZIOIl4Z0kopvhYWCeoN1Y25qWV9bXV1VaHNlYFlkcnJngXNia2RXW2Bpf3i+rnuft21idIdpdHxyeoSHe36NgHh4c3dve3dlam5gh3WOgHJpYl9+eHmKg2ZwfWhqa1tXb3iKo4GFf3GZk3GAeHSBbX+BkIdyk4eMh4OIhX15dHJvaHlham1hbXZrZ2tsend6d1tnfXx4ZXN+boR0ZXWGjYaVfnCLZmt6gnRsdGJbbXpqdHuLeoFmdIZ9bXBndH53fH5xe2t5e4F5d3BlbGFsiX5tblZrYHhWS2tsT1JPaU5ZfWdiTlV2bE1RVFVeZnaDZl1hcGhnYVdpXVxsaUpFa1piZFZYVXlaTldualldbGVcWWVjXnRmbGRyZ3NwdIF4cJmFdoB/eH98hYd9dXOCh4CVgm5zeXt7c3KFh4iIhHmBfXaPf32EiY6DgYN7fouDe3d8d3eanZd6ioOHaXZ+fGyEhZSAco+CcYaCfoJ/b2ZsZ1ddW1xbU2VwZV9YY3N1aXVwZGViV1xcaIBwb3KAc4llZXl/anR2dHSEhXiChHp3dHVua3pwYWdrZ4Z0jYNtZl5ffG97iX1obXdmaWRWV3Jwjad8hHx2lpBzfHJ7eW16epCEdpZ7h4aChoN9dXBybWd1XW1pX2x1ZGdmaXpve3JZZ4F2dWdwgHiCdmJ3hYt8lIBui2pteoBwZXJlYGt4ZnJ2iXp9YXWDdmlrcXR6b3h4cnxlfX5+eHZuY2VhbIZ8bWtWamJyVExpa1BMTnBIXntmYU5VdWVLT1NXYGt3fmVdZ3NpZV9WY1dicF1LS2tYZGFVVFVzV01ZdmVaX2tgXFpjZV93Z21icGl0b3F+dXSZgXiAgHiAfoaEen12goN+mIVucnR8enRxhYWPgoB6i3V0kIB9gZSOgIWEfH6Mhnp+gHZ7o6WKeYiGhWx1fHt1hIKMem+Fc3qFfYKDdW5qaWVWXVtbWlNjbmVbWGF0e2pobWhgYldfW2mAaWtvgGdsYWl6eWp0dXRvhoJ7gX12dW56aGp5al9lbmmBd5CEaGZYYndpfod6b2lvZ2ZdVVhvaI+ndoF6fJCOeHVufW1xdHiOfneUdIWCf4WIdmpydmdob1xtZV5uc19nYmp4aHttW22Dc3Rqb4B+eXdid4SEeI+Fc4hxcHl/cWJwaFtud2Rwc4d7eGFygHBnaXhzcWt3dnN1YoJ6fnd1cGNjY218fWtrVWliZ1RMbWlQR1JsRWF4ZmJNVHNeSk1VWWVseHtmX21xamNcVl9Vb29XSlNoWGdeWE1VbFRLXHpfW19rXV1bYmVgemhsYW9vdW5vd3V6l313gIF5gICHhnp5eoN9gZOEcXR0f3p2dIWIkH2AfZBsc5WBe4KfhX+HfYB+hoKAint2hKyff3qIh4RscoJ5doGAgnRuh299gHSKgGpvbmRkWF9aWlpVYmpnXFpfdYJpXm1sXGFWXFxrgWVydH1pal1sd3ZodXdybod8fn56dnNsemdpd2ddZHNoeneSgWNjVGRvZ4KEd3ZmaGphV1ZZaGSQp25+eICLjnpwb3tmeG55inp2jnGDfX5/hm5kdnNkaGhdbGJecG9bZ15tdWV6aV10gG9ya3F7fnV2Y3WFinuHh4B/d3J1fnNgcGxZcHJicXGEe3VkcoBsYGx6b2poend0cGSDdHl5dXFkYWRtc35qbFRpXl9VTHRjUUdXYkdjd2ZhTFRxWUtMWFhnbHZ6ZWVtcWZjWlhdWHZmVEpcY1hpWFhIV2VRSWN5W11gbFteXGJkXoBpal9vdHhub252g5d5coGAfYCJjIZ+dnaGeIaMfXR1dYJ5enqCjI59foSJanSWgXuKnX1+hXmAe358hohzcY+ujHt7hpB+ZnGIenR9fXZyb4Zte35tj3picG9iZV1lVlpZV2Nma2BdXXOGaVhwbVteWFpcbHtjcXd2bWNbbnR0aHV2cW2FeX+BeXdub3RlaHRlW2d1ZnZ2knpgXVNlZmqCgXN9YWNpXFVYXmJkkKVoeXSChZB4bG54Zndse4N5dIhygHh7eH9oZXZtYGZhX2pgXnVrWWVdb25iemZbeHxrbm5wd3l0dWVyg5J/h4OIenZvcXxxYXdjWm5vYXBxgXtzZXGAZF5tdmljZnh6c2ttgHRzfHJxYl5lbW99ZWlUaFlaVU55YFJLWllIYnVkYUpVblRKTFpWaWxye2NsbHNjYVlaW2F3XFRLY11ZalNWR1lhTkhqdlhfYm1bW19iY12FaWhhbnh5bG9qdoGQeG2CfoCCkoiEgXZ1iXSLhnRxdnaCeHx9foyQgH6TfnB4loN9mZJ5gIB4eX5/c4iDc3CZont7gImVeWR1iHlzeXZrc3B/bHl8cJFyXnBvYWdibFRbWldpZG1mXFxyiWZScm1bWVhYYGx2ZGp1ampfW210cm10dHRrhn1/gHx3b25sZGlwY1trcmR0do5zXFdTZGBxf35xglxhY15TWmFcZJOfZXJxhIOQc2tqeGxub3l5enGAdn9yeXp6ZGZ1Z15iW2FoXF53aVdiXnBoYXhhW3t2ampyb3d0c3RpcIGUg4Z+hHZyanB7bGV2V1tqbWJwcoB6c2Vvfltgb3FiXmlvfWxqcn1xcHdrcGBbZWtte2FnVGdVWFJRd1xTUFlSSGNzYmFHVmxRSVBaVmtsa3xlbW9xYVtaWFlscFdTT2ZXV2lTVEZaXE9JcnVZYGRtY1hhYGFejGpjZG15eGtvaXV5hXtrhH2AhZl9goR5fYhtj4Zxb3d6fHSCgn2Lj4OClnR4gpOGgZ+JdYF/gXR/gnCHgnVvopdze4aLh3tmd4tvbnxwZnhxe2xzdnONa150bmFnZmtTXlxWaGJsbFtccYxkTm9tXFZYVWdpdGhjdGVlXVpvdm9xdXV6bIh9gH2Id5BzY2Rrb2Fdbm1kc3iIa1pUVmJjd3x8cIVcY19jVFpgWmOWlWNucIOEiXJqZ3luZXJ1cXpreXN1bnp+dV9mc2NbXldiZFlhdWZWX2FtY2FxXV1+b2hpc3FzcHV1a2yEk4GJe4VxcmZue29wblJaZWplcXOAdnNibHZVYnFrW15uZHxla3R8cXJyam1gWWNpanheZlRlVVZQVW9YUVdUUEhlcl9hRlhrT0lYVFZuaWR8aWt4a2FXXFVbdGRTUlZoUVlnVFNIWltQTnh3W2BmbGlaYmBeXo9uYmZreXVubml2dn5+bYSAfoaXe3+HgYl+a5OIcmd0gHp1gIN+iY9/i5NyfYqRhYefhnt/hoxzgIZzfYJ1bqSMc4GNi3d4bnuNYGR8cWd5c3ltbXF2g2dkfG1jZmdoU2BfVWdgbG9cXm6OaE1pbGBVVlNvZnNsZXhkZV1acXVuc3t4c26Je4F3nHt6bGJlbG1eYG9qZXF5f2daVlhfbHh7e2+DX2JeaFZZYFhknIhia3GBhnx3a2p2bFt1cGp5aXVybW57gHJYam5eWV1WYmRYZXFkVF9iaWJibVpgfmtma3N1bm13dmtohYx/iXqHbXFmb3tscWxiWF9oaG9zgHNzXmltU2VwZFVibmF5Ym90enRqb2xqX1hgZmh1XWVWYlZTT1lnU09dT09IZW9dY0daak5KX0tYbWVfeGhufmRgVV5UXXRbVFNgZk5dYlVTSlxaUVl1dl1fZm1oWGJhW16OcWNnandxc21ndnN5g3OCg3uIjn58ioiOeW6QinRsc4Fzf3+IhYeShJWPen2Mj4iRm4SAfIyEcn+Bc3R3cW6Tk5OTk5OTk5OTkpKSkpKSkpKSkpKSk5OTkpKSkpKSkpKSkpKSkZGRkJCPj4+Pj4+Ojo6Pj46OjY2Njo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo2NjYyMjI2NjY2Njo6Ojo6OjY6OjY2Ojo6Oj4+Pjo2NjY2Oj4+Pj4+PjoKAfnp6fX5+fX1/fn59fn5+fn5+fn+Af4CAgIGAgIB/gIGBgYOHjI6Ojo6NjY2NjY2NjY2NjZKSkpOTkpKSkpKSkpKSkpGRkZGSkpKSkpKSkpKSkpKSkpKSkpGRkZCQkI+Pjo6Ojo6NjY6Ojo2NjY2Njo6Njo6OjY2NjY2Njo6Ojo6Ojo6NjYyMjY2MjIyNjY2Njo6Ojo6NjY2NjY2Njo6Ojo6OjY2NjY2Ojo6Ojo+Ogn99ent8fX59fX5+fn5+fn5+fn5+f4B/gICAgICAgH+BgYCBg4aMjY6NjY2NjY2NjIyMjIyMkpKSkpKSkpKSkpKSkpKSkZKSkpKSk5KSkpKRkZGRkZKSkpGRkZGQkJCQj4+Ojo6OjY2NjY2Njo6Ojo6NjY2NjY2NjY2NjY2NjY6Pj4+Pjo6NjIyMjIyMjIyNjY2NjY2NjY2NjY2NjY2Njo6Ojo2NjY2NjY2NjY6Ojo6Cf3x6fHx9fn19fn19fX59fn5+fn5+gH9/gICBgYGAf4CAgICDhouOjo2NjY2NjIyMjIyMjIySkpOTk5KTk5KSkpKSkZGSkpKSkpKSkpGRkZGRkZGRkJCQkJGRkZCQkJCPj46Pjo6Ojo6Ojo6Ojo6NjY2NjY2NjY2NjY2NjY2NjY+Pjo6OjY6MjIyMjIyMjIyMjY2NjY2NjY2NjY2NjY2Njo6NjY2MjIyNjY2Njo6OjoN/fHp8e31+fH1+fXx9fn59fn5+fn5/f3+BgYGAgICAgYCAgIOGi42NjY2NjIyMjIyMjIyMjJFtZmdnZ2dnfYWEhISEiF0tMDAwMC1GoaGhoaGhoJqZmpqampqKg4SEhIOEd2VnZmZmaFxDREREREJLkpqZmZmZmZ6goKCgoKVeKi8vLzAsSIWDg4ODg4OLjIyMjIyMjY2NjYyMjY2NjY2NjY2NjIyMjIyNjY2NjY2OhX19e3t6fX58fH59fX1+fX1+fn5+fn9/f4GBgYCAgICBgICAgoWKjI2MjIyMjIyMjIyMjIyMkWdfYGBgX155g4KCgoKGUxgdHR0dGTekpKSkpKSjnJycnJycnImBgoKBgYJyXV9fX19hUjQ1NTU1Mz+TnpycnJuboqSkpKSkqlYVHBwcHBc6g4GBgYGAgYqLi4yMjIyMjIyMjIyMjIyMjY2NjY2MjIyMjIyMjY2NjY2GfH16enp8fXt8fn19fX59fX5+fn5/f3+AgYCBgYGAgIGBgYGChYqNjYyMjIyMjIyMjIuLi4uRjo2NjY2NjY+QkJCQkJCMh4eHh4eHiZOTkpKSkpKRkZGRkZGRj46Ojo2NjYuJiYmJiYmIhYaFhYWFho2Ojo6Ojo6Pj4+Pj4+PiIKDg4KCgoWKioqKioqKi4uLi4uLi4uLjIyLi4yMjIyMjI2NjIyMjIyMjIyMjY2Njoh8f3l7ent8e319fX18fX19fX5+fn9/f4CBgYGBgYGAgYCAgYKFioyMjIyMjIyMjIuLi4uLi5GSkpKSko2QkpGJh46KkJKTkYuQi4qQiY+RkZGRkJCQkJCPj4+Pj4+Ojo6Njo6Ojo2Njo2Njo6Ojo6NjIyMjY2NjYyMjIyMjIyNjo6NjY2NjIuLi4uLiouLi4uLi4uLi4uLi4uLjIyMjIyMjIyMjIyMjIyMjIyNjY2NiX59eHh5fH18fX19fHx9fX59fn5+f3+AgICBgYGBgYCBgIGCgoSKjIyMjIyMjIyLi4uLi4qLkJCRkZGPhI6QkIaKj4WNkJCOhoyFioqGiJCQkJCQkJCQkI+Pj4+Ojo6NjY2NjYyMjIyMjIyMjIyMjIyMjIyMjI2NjIyMjIyMjIyMi4uLi4uLi4uLi4qKiouLi4uLi4uLi4uLi4uLi4yMjIyMjIyMjIyMjIyMjIyMjI2Lfnx3dnh7fXx7fX18fH19fn5+fn5/f4CAgIGBgYGBgIGAgIGChIqMjIyMjIuLi4uLioqKioqQkJCQkIqFjoiOhoaPiY2QkJCIjIaIh4WHj4+Pj4+Qj5CPj4+Ojo6OjY2MjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMi4uLi4uLi4uLi4uLi4qKioqKi4qKi4qKi4uKioqKi4uLi4uLjIyMjIyMjIyMjIyMjIyMjIt+e3d2eHt8fHx9fX19fX1+fn5/fn9/f3+AgIGAgYGAgYCBgYGEiYyMi4uLi4uLioqKioqKipCQkJCPhYOMjpCOiYyKjpCQkIiNjYmEhoiPj4+Pj4+Pj4+Pjo6OjY2NjYyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIuLi4uLi4uLi4qKioqKioqKioqKioqKioqLi4uKioqKiouLi4uLi4yMjIyMjIyMjIyMjIyMin18dnZ4fHx7fH19fX19fn5+fn5+fn9/f4CAgYCBgYGBgIGAgYSJi4yLi4uLi4qKiomJiYmJkJCQkJCMhoyJjoeFjYmOi4yQiIyHhYiDio+Pjo+Pj4+Pjo6OjY2NjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyLi4uLi4qKioqKioqKioqKioqKioqKioqKi4uLioqKioqKioqLi4uLi4uLjIyMjIyMi4uMjIyKf353eHp7enp8fHx7fX1+fn5+fn9+fn9/gICAgICBgICAgYCBhIqMi4uLioqKioqJiYmJiYmPj4+Pj5CMjouPjIqPjI6MjY+MjoqKjomOj46Ojo6Ojo6Ojo6NjYyMjIyLi4uLi4uLjIyMjIyMjIyMjIyMjIyMjIyMjIyLi4uLioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi4uLi4uLi4uLi4uLjIiAfXh5enl6e318e3t9fn5+fn5/f35+f39/gICBgICAgIGBgIGEiouLioqKioqJiYmJiYmIiI+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Oj4+Oj46Ojo6Ojo6Ojo2NjYyMjIyLi4uLi4uLi4uLjIyMjIyMjIyMjIyMjIyMjIyMjIuLi4uKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLi4uLioqKi4uLh4B8eHp6eXt8fHt8fH1+fn5+fn9/fn9/f39/gIB/gYGAgIB/gYSJi4qKioqJiYmJiYmJiIiIj4+Pj4+Pj4+Pj46Pj4+Oj4+Ojo6Ojo6Ojo6OjY2NjY2NjY2MjIyMjIuLi4uLi4uLi4uLi4uLi4uLjIyMjIyMjIyMjIyMi4uLi4qKioqKioqKioqKioqKioqKioqKioqKioqKiYmKioqKioqKioqKioqKioqKioqKi4uHgHt5eXh6fHx6e3t9fX5+fn5+f39+f39/f39/f3+BgYCAgH+BhIiLiomJiYmJiYmJiIiIiIiOjo6Ojo6Pj46MjI+Sj5COjo6Ojo6NjY2NjY2NjY2NjIyMjIyMjIuLi4uLioqKioqLi4uLi4uLi4uLi4uMjIyMjIyMjIyLi4uLi4qKioqKioqKioqKiomKiomJiYqKioqKioqJiYmJioqKioqKioqKioqKioqKioqKi4aBe3h5eHp8ent7fH19fn5+fn5/f35/f39+fn9/f4CAgYCAgIGEiIqJiYmJiYmJiIiIiIeHh46Ojo6Ojo6Ojo+MkJOQkI+Ojo6NjY2NjY2NjYyMjIyMjIyMjIuLi4uLi4qKioqKioqKi4uLi4uLi4uLi4uLi4uMjIyLi4uLi4uLioqKioqKioqKiYmJiYmJiYmJiYmKioqKiomJiYmJiYmJiYqKioqKiomJioqKioqKhYB6eHl5fHt6ent8fH1+fn1+fn9/fX9/f35/f39/gICBgICAgYSIiomJiYiIiIiIiIeHh4eHjY2Ojo6Ojo6Pj4+PjoyNkI2NjY2NjY2MjIyMjIyMjIyMi4uLi4uLioqKioqKioqKioqLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4qKioqKioqJiYmJiYmJiYmJiYmJiYmKioqJiYmJiYmJiYmJiYmKioqJiYmJiYmJioqFf3l6eXh7e3p7fHx7fn5+fX5+f39+f35/fn+Af3+AgICBgYCChIeKiYmIiIiIh4eHh4eHh4eNjY2Njo6Oi42Nj5WPiYyPjYyNjYyMjIyMjIyMjIuLi4uLi4uLi4qKioqKioqKioqKiouLi4uLi4uLi4uLi4uLi4uLi4uLi4uKioqJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYR+eXt5ent7ent9fHt+fn59fn1+f35/fn9+f3+AgICAf4CAgICEh4mIiIiHh4eHh4eHh4aGhoyNjY2NjY+MjImKj42IjJGPjY2NjIyMjIyMjIyLi4uLi4uKioqKioqKioqKioqKioqKiouLi4uLi4uLi4uLi4uLi4uLi4uKioqJiomJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJg355e3p8e3p7fX17fH9+fn5+fX5/fn9+f3+Af4CAgH+AgH9/f4OGiIiHh4eHh4aGhoaGhoaGjIyMjIyLiYyKiIeJhoyOjJCMjZGOjIyMi4uLi4uLi4uLi4qKioqKioqKioqKioqKioqKioqKiouLi4uLi4uLi4uLioqKioqKiomJiYmJiYmJiImJiYmJiYmJiYmJiYmJiYmJiYmIiImJiYmJiYmJiYmJiYiIiIiIiYmCf3h7e3t6enx9fHx9f39+fn19fn9/f39/f4F/gIB/gICAgICAg4aIh4eHhoaGhoaGhoaGhoWMjIyMi4yOjoyKioeEiIuKjIuNjo+Li4uLi4uLi4uLi4uLioqKiomJiYmKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiomJiYmJiYiIiIiIiIiIiImJiYmJiYmJiYmJiIiIiIiIiYmIiIiIiIiIiIiIiIiIiIJ/eHp7enp6e3x8fX1+f35+fX1+f39/fn+AgICAf3+Af4CAgYCDhYiHh4aGhoaGhoaFhYWFhYyMjI2NjJCSjI2Ii4mJi4uLi4mLjIqMi4uLi4uLioqLi4qKiomJiYmJiYmJiYqKioqKioqKioqKioqKioqKioqKioqKiYqJioqJiYmJiYmIiIiIiIiIiIiIiImJiYmJiYmJiYmIiIiIiIiIiIiIiIiIiIiIiIiIiIiHgXx4e3x5enp8fHx9fX9/fn59fX9/f39+fn+Af4B/f3+Af4CAgIKEh4eGhoaGhYWFhYWFhYWFjIyNkY+PjZGJjIaJjIuIiImMiYeNjo+NioqKioqKioqKiomJiYmJiYmJiYmJioqKioqKioqKioqKioqJioqKioqKiYmJiYmJiYmJiYmJiYiIiIiIiIiIiIiIiImJiYmJiYmJiIiIiIiIiIiIiIiIiIiHh4eHh4eHh4WAenl9e3t7enx8fHx9f39+fn19f39/f35+f4B/gH9/f4B/gH+AgoSHhoaGhYWFhYWFhYWFhISLi46PjoyLj4iHiYmMjYWFjo2KiYyNi46KioqKiomJiYmJiYmJiYmJiYmJiYmJiYmKioqKioqKiomJiYmJiYmJiYmJiYmJiYmJiYmJiYmIiIiIiIiIiIiHiIiIiIiIiIiIiIiIiIiIiIiHh4eHh4eHh4eHhoaHh4eHhH55eX16enp7fXt8fX5+f35+fX5/f39/fX5/f3+Af39/f39/f4CChIaFhoWFhYWFhYWFhISEhIuLjI6MjI2Lh4mIiomGgoiNjoiKi5GTj4uJiYmJiYmJiYmJiYmIiYmJiYmJiYmJiYmKioqKiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiIiIiIiIiIeHh4eHh4eIiIiIiIiIiIiIh4eHh4eHhoaGh4aGhoaGhoaGh4eDfXp5e3p5enx8e31+fn5/fn59fn9/fn9+fn+AgICAf35/f39/gIKEhoWFhYWFhYWEhISEhISEioqOjYmIiIqKh4iHiomIioiIh4qGi5GPiomJiYmJiYiIiIiIiIiIiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmIiIiIiIiIiIiHh4iIh4eHh4eHh4eHh4eHh4eHh4eHh4eHhoaGhoaGhoaGhoaGhoaGh4J8eXl6eXp7e3t7fX5+fn5+fn59gH9/f39/f4CAgH9/fn9/gICAgoSGhYWFhISEhISEhISEhISKi5CPiYmJi4qHh4WHiYuKiYSLjYmOjYmJiYmJiIiIiIiIiIiIiIiIiYmJiYmJiYmJiYmJiYmJiYmJiIiIiImJiYmJiYiIiIiIiIiIiIiIiIeHh4eHh4eHh4eHh4eHh4eHh4eHh4eGhoaGhoaGhoaGhoaGhoaGhoaGgXt4enp4e3x7e3x+fn9+fn5+fX1/f39/f3+Af4B/f39/f3+Af4CChIaFhYSEhISEhISEhISEhI+Qj4+IiYuIhoeIiYuLjIuJioqNio6Oj4mJiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIh4eHh4eHh4eHh4eHh4eHh4aGhoaGhoaGhoaGhoaGhoaGhYWFhYWFhoaAe3h5eXh4enp8fX1+f35+fn59fn9/f39/gIB/gICAf39/gIB/gYKDhoiGiIaDhISEhIODg4ODkpKOioeKi4qLh4uNiYqJi4iHiouIio+SioiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIh4eHh4eHh4eHh4eHh4eGhoaGhoaGhoaGhoaGhoaGhoaGhoaFhYWFhYWGhn96eXh4eHl5eXx9fn5/fn5/fn1+f35/f3+Af39/f4CAgH+AgH+BgoOHjo+PjoiHhIWFhoaFhYWSkI6KiYmIiImKioiIh4aKjIiHiYmOkJGNh4iIiIiIiIiIiIiIiIiIiIiIh4iIiIiIiIiIiIiIiIiIiIiIiIiIh4eHh4eHh4eHh4eHh4eHh4eHh4aGh4eHh4aGhoaGhoaGhoaGhoaGhoaGhoaGhoWFhYWFhYWFhYWGf3l4d3d3eXp5e3x9fn9+f35+fn5+f35+fn+Af4CAgICAf3+Af4GBg4eOjo6Ojo6Mjo2OjY2MjZCQjomHhoiJiYeIiouIiYyJiYaKjY6PkYuIiIiIiIeHh4eIiIiIiIiHh4eHh4iIiIiIiIiIiIiIiIiIiIeHh4eHh4eHh4eHh4eHh4eHh4eHh4aGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaFhYWFhYWFhYWFhYZ+eXd5d3d6eXl8e31/fn5/fn5+fn5+fn9+f4B/fn+Af39/f39+gIGEiI6Ojo6Ojo6Ojo6Ojo2NkJGOi42JjIiIiYaHiYaIioiHi4yLjpCQiIeIiYmJiIeHh4iIiYmIh4eHh4iIiYiIiIiIh4iIiIiHh4eHh4eHh4eHh4eHh4eHh4aGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoWFhoaFhYaGhoWGhYSEhIWFhoaFhIWFhX55d3l2eHl4e3x7fn5+fn5+fn5+fn5+f39+f39+f39/f35/f3+AgYOGjY2Ojo6OjY6NjY6OjY2Qj42Ni46KhoiKhISLiYeDhYSDi4mLj42JjI6QkI+NjYyLjY6Pj42NjI2Nj4+Pjo6MjYyMjY2KiYiHiImHh4aHh4eHh4aGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoeHiYqKiIeJi4yNjo2LiImLi42OjYyJiImMgHl3d3Z6eXh7e3t+fn5+fn5+fn5+fn5/f39+fn5/f4B/f4B/f4CBg4aMjY2NjY2NjY2Qj4+Pj46NjI6KiYuMjIeFiY2Lh4aIh4aHh4uNjo6Pj4+Pjo+Pj4+Pj4+Pj4+Pj4+Ojo+Pj4+Pj4+Pj4+Oj46Oj46Mi4uJh4eHh4aIhoaGhoaGhoaGhoeLiYeHiIiLjY2Mi4yLjY2Ojo+Ojo6Pj46Ojo6Ojo6Ojo6Njo6NjY2AeHZ4eHp4enx6fH5+fn5+fn5+fn5+f39/fn59fn9/f39/gH9/gIGDhoyMjIyMjY+QkpOTk5KSjYyMjIqHioyKh4eJiYWCiouIiYWJjpCNjo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6NjI2NjI2LiYaHh4eHiYqLjY6NjYyNjY6OjY2OjY2NjY2NjY2NjY2NjY2OjIyNj4+OjY2MjIyLi313dXd5enp7e3p+fn5+fn5+f35+fn5/f39+fn1+f39/gICAf3+AgYOFj5KRkJGSk5OTk5OTkpKLi4uLiomMiouLiYuKhoeOjYiIjI6OjIuMjIyNj46Njo6Ojo2NjY2MjY2NjIyMjIyMjIyMjY2NjYyMjI2NjYyMjI2NjIyNjIyMi4yMi4yMjI2MjIyMjIyMjIyMjIyLi4uLi4yNjY6Sk5OSkpSRkJOVlZSTk5COjo6Oe3Z2d3h6ent7e31+fn5+fn5/fn5+fn5/f35+fn9/f39/gIB/f4CBgoSNkpKTkpOSkpOTkZKSkoqJioyJi4qJjIuKioiHiYqKi4mKjY2Mj46Nj5KUlJOUlJOTkpGSkI+Ojo2NjY2Pko+OkZGOjIuKioqLi4qKi5CPjoyMjIqKioqKioqKiouKioqKi4yLi4uMjIyKiouLi46RkpOTk5SUk5STk5SUlJOTk5KSkpKSk5F6dXZ2eHt7e3p6fX5+fn5+fn5+fn5+fX5/fn5+f39/f3+Af39/gIGChIuRkZGRkZKSkpGRkpGRiYmIiIqMiYiJiYuJhoSJhoyKh4ySkpKTk5OUlZWWlZWUk5OUlJSUlJSUlJSVlZWVlZWUlJOTkY+QkZKQjoyRlZWVk5KSjo+QjYqKi4qKi42OjY6RkpCRkpKSkpGRkpKSk5OTk5OTk5OTk5OTkpOSkpKSkpKSkpKSj3h1d3l6e3t7ent9fX19fn5/f35+fX5+fn5+f39/fn9/f4B/f3+AgYKEi5GQkJCSkpKRkZGRkZGIiIiIi4uJg4eLi4yMiIeHjYyNkpSSkpOTlJWWlpaVlZSSkpOTk5SUlJWVlZaXlpaWlpWUk5SUlJSVlJSUk5OVlZWUk5KTk5OTkJGSkZGSk5OTk5KSkpOSkpKSkpKSkpKSkpKSk5OTk5SUk5OSkpOTkpKSkpGRkZGPdnJ3enp7e3t8fX59fX1+fn9+fn9+fn5+fn6Af39/f3+Af3+Af4CBgoSKkJCRkZGRkZCQkJCQkIeHh4eIiIiFi4+KjI6Njo+OkJWUk5OTk5SUlZWVlJSVk5KSk5KTlZSUlZaWlpaWlpaWlpSTk5OTk5OUlJOSk5SVlZSTkpKSkpOTk5OTk5OTk5KSkpKSkpKSkpGSkpGRkZGRkZKTlJSUlJSTkpGRkZGRkZGRkZGRkYx0c3d6ent7e3x9fX1+fX5+f35+fn5+fn5+fn9/f39/fn9/f39/f4GDhIqQkJGRkJCQj4+Pj4+Ph4iKi4yNjYuOj42Mjo6RkpGSk5OSkpKSk5SUlJOSkpOTkpKSkpKUkpGUk5WVlZWUlZWUk5OTk5KSk5OUk5KTlJSUk5KSkpKSk5OTkpKSkpKRkZKSkpKSkpKSkpKSkZKRkZGSkpOTlJSUk5OSkZGRkZGQkJCQkZCRinN0dnp8fHp7fXx9fn59f35/f35+fn9+f31+f39+fn59f39/gH+AgYKDipCQkZGQj5CPjo+Pjo+Oj4+Pj4+Pj4+PkI2OjpCRkpKSkpKRkpKTk5OTkpGSkpKSkZGSk5SDhZSSk5STk5OTlJOSk5OTk5OTk5OSk5OTkpKSkpKSkpKSkpGRkZGSkZCRkZGRkpKRkZGRkpGRkZGRkpKSkpKSkpKSkpKRkJCQkJCQkJCQkJGGc3V2e3x8e3x9fX1+fn1/f35/fn5/gH9+fX5/fX5/fn5/f3+Af3+BgYGKkI+PkI+Pj4+Pj4+Pj4+Oj46Oj4+Pj5CQiI2PkJGRkpKSkpOTk5OTkpKSk5KSjoOSkZGTjXWJk5GRkpKSkZKSkpKSkpKTk5KRkZKTkpGRkpKSkpKRkJCQkJGRkZGQkJGSkZGRkZGSkZGRkZGRkZGSkpKSkpKSkZCRkZCPj4+Pj4+Pj4+PkX9ydHh8fHx7fHx9fX5+fn9+fn5/f3+AgH99fn5+f39+f39/f4CAf4GBgYqPj4+Pjo6Ojo+Pj46Ojo6Ojo+PkI+Pj4+GjpCQkJCRkZGRkZGRkZGQkJCQkJGOb3+SkZF8dImRkJCRkZCQkJGRkZGRkZGRkJCQkZGQkJGRkZGRkI+PkJCQkJGRkJCQkJCRkJCQkJCQkZCQkJCQkJCQkZCQkJCPj4+Pjo+Pj46Ojo+Pj4+PeHJ2eXx9fHp9fH19fn5+f35+f39/f4CAf39/fn5/f35/f39/gIB/gYGAio6Ojo6NjY2Ojo6Ojo6NjY2Oj4+Pj4+PjoiQkZCPj4+QkJCQkJCQkI+PkJCQj5B4aoSRinN2iJCPj4+PkI+PkJCQkJCQj4+Oj4+QkI+PkJCQkJCPjo+QkJCPj4+Pj4+PkJCQkI+PkI+Qj4+PkI+PkJCQkI+OkI+Pj46OjoyMjY2NjIqDiYhzc3Z4fX58eX18fX1+fn5/fX5/fn9/f39/f4B/f39/f4CAgH+AgH+BgYCJjY2Ojo6Ojo6OjY2OjoyNjY6Ojo6Ojo2NiJCRkI6Njo6Ojo6Ojo6Pjo6Ojo6Oj3tncY6EcnWHj46OjY6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Pj46Oj4+Pj4+Pj4+Pjo+PjY2MjYyNjoyLi4mJiYiFhYSDgoKEgnR5fXp4dXJrZWltb2xmZmdncHNzd3l9fnl6e3x9fX1+fn59fn9/fn9/f39/gIB/f3+AgIGAgIB/f4CBgImNjY2NjY2MjYyMjIyMi4uLjYyMjIyMjIyGj5GRjIyMjIyMjIyMjIyMjIyMjIyOeVxodXBkb4iOjY2MjIyNjY2NjYyMjI2MiomKi4uJh4KAh4iEgXt6gH57fXx8fXlzcnJycnV1cG1ramppZ2NkYV9bXF1eWFVXWFlTS0VJSkpLTE1PT0tgdHR3eX19eHp5e3x8fX5+fn1+f39+f35/f4CAgH+AgICBgYCAgICAgIGAf4OEhYSFiIuLjYyMjIuLi4yGiYqKioqKh4OOkJGNiouLi4uMiYmKioqKiouKioZkaWtcZ2prg4WDhIeJiYWCg397fHl6e3pzcHFxcW1samdsbWdlZmVmZGNlZGVkZWVlZWRkZGNhYV5dXFpYWFdUUFFSU1JTTU1KSUZESEpHR0hHR0xOSWdzdXh6fXp4d3l8fHx8fn5+fn9/fn9/f39+f4CAgIB/gICBgICAgICBgYFnXmBjYWNucX17ent/fXd8fHZ4ent4eHpvcXt4eXt8e3h3e394dXd0dHZ1dXZ3bmN1bFtqdW5laGtsbm9tamlpaGhlZWRkZF9gYWJgYF5dWVhaWltdXV9gX2BfX19gYmFeXl5eWVldXF1bV1dWUlRSU1NOUUpISUZERUhMTEhGR0lLSklNbXJ0eHp7end3eXt6e3x+fn1+f39+f35/f35+gIGAf3+AgIGAgICAgICCgWdYW1pZXFtcY1xaXF5ga3FtcHBvbm5vbmtpbmxrbG9qaWtraWpraWZmZ2dnaGdgZ29vZmxydGpiY2JhYmBgXVhbW1dYV1RWUVBUU1NNSkxLTExOTk9UWFhXVVVUUlBQTU1QT05LTE1QUU9MTEpHSUlHSEhJSEhIR0ZHSEpKSEhISUlISVZwc3V5ent5dnZ5enp7fH59fX5/f35/fn5+f3+AgX9+f4B/gICAgICAgIGBbFtYVlZWWVlaWVlYVVZoamxubmxra2poaGloZGVkYlxiZl9fYWNfXF9dYF1eWVxiZ2pyb3FzbVpZX1tYV1NOTUtLS0tMSUtNTktKS0tMSktQTEtLRkdHSUlGR0lISUZFSEdGRkVERUVEREVJSUlHSEdIRkZLTUtJSUlIR0hLTU1LTExMVXFzdnl6e3l2d3h3ent8fn1+fn9/f39+f3+AgIGAfn5/f4CAf4CAgIB/gYJoUlRVVlNVV1lZWVdXV1tbYWNfXlxbWFZWWVZSVFJRUVVUU1NUUE1KTU5QUk9NUl9jZW1ubmpoUlFUUFBOTk9NSk1MS0xKSktLRklJSkxJR0pISUlFR0dGRkVFSElKR0ZHRkZHR0hKR0dISEpMSkpLSUlISktLSkhKS0pISUtMTU9QUEtUdHN1eHp6eHZ2d3d6enx+fX5+fn5/f35+fn+AgYB/f3+AgYB/gICAgH+AgmlQUlRXVVRWWVdYWFpbVFRTUlBRU1FRUU9OTlBQUU9MTlBPTk5NTEtNTk5PTU1VY2tnbG1tZ2VZUU9PUFFPTk5PTk9QTk1NS0lISEpJSUlJR0ZHR0dJSkhJSEhJSEhHSEdISElISUxLSklISkpJSkpIR0pMS0pJSUhKSktMTk1NTU9RTFVzcnN3enl3dnR2eHp7fX19fn5+fn9+fn5+gICBgICAf4GBgH+AgICAgICBbE9PTlRZVVVdW1lXV1hOTUpKSUZKT0xKSkdJSk1NS0pMTUpHSUlJSktLRUVLUl5obWdsbWxqamZiXFVQT09NTk9MTk5OUFBPTE1MTk1MTEpJSEdJSElISElJS0xLS0pJS0pJSklJSUlJR0dKSUdJSUpKTk1OTEhJSklJSk1PT01MT1JOWXBwcnd4d3d0c3R3enx+fX5+fn5+fn5+fn9/gICAgICAgYCAf39/gICAgIFvS0pNTlFOTlVXVlZSU0lFQ0VFUkREQT5CP0RAQD5CREFAQURHRkVIRkZTW11hZmpuam9ta2pra2pqZlpLSklKSUlLSkxQTk1MTU1MTU1NTElIREZGR0ZGRklKSUlLSkhMSklKSkpJSEhKS0tIRkdJSklLTU5OSktPTUxLTU1PUE5QT1BgcG9yd3h2dHJzdXd6fX19fn5+fn9+fn1/gICAgICAf4CAgIB/f3+AgICAgXNQUE5OUE1KS1BSUE5RQ0RCQUZRRT1DPT9FSDk6Oz0/PTxBRkA+Ojs/QENTXmNtbGxud3JqaWtoX1RNRkVFRUZFR0dHR0pHSEpLR0NER0pHQ0RFQUFDR0hHSEdISktKSElMS0lISktLTU5MTUxMSkpMS0lLTU9PUFNRT1BQTk9QUlFNUGdwb3N2dXRycXR4eX19fX1+fn5+f4B+foCAgH9/gIB/f4CAgH+Af4B/gICCdlRVUVFQT0xNUFBOT09BQkFAQkE/Oz48Pj8/Ozg5ODs7OkA6Oz48Ozs8O0dLQk5ibXB6c2tqYEtGQkVGREdJSEM/QEBAQUFCQUE/Pjw9PkFAQD8+P0BFR0dHSUtMTk1OTUxNTUpLTVBVU05MTlFOTk1OTE1NTk9OTk1LS05OTk1OTkxUbnBwc3R0c3Fydnl5fX19fn1+fn5/gH5+gICAgICAgH9/gICAgH9/gH+BgIJ4UVFSVFJTUVNTUVFST0BAPT4/PD8+QEE/PT45Ozo7Ozk5Ojg4Ozw5Nzk7Oz08Oj5NYHRwY05DP0BAQ0ZEQ0NDPzs+PkBDQ0E/Pj9BPkBAQj9APD9CQEFDRUVFSktQT1BPTU1OTExMT1JRUFJOTExPTUtOT0xMTEtMS0tKS0tKTU1LS1xxcXF0c3VycXR4eHp9fn1+fn5+f39/fn5/gIGAgH+Af4CAgICAf4CAf4CAgXxSTU9RUFFSUlRSU1NOPDs8Ozs7P0BBQkA9PDk8PTw6Nzk6Ojk3OTo6Nzg6OTk7OjY4V2ZBODg7PD1AQUA9Ozs+PD09QEJDQT9BQkE9Pj09Oz0/Q0RCQD9BREJFR0pKSkpKTE1MTExNTExOVVNLTE1USVBKSU1KSUpLS0pJSEdKS0lKZnJxc3RzdXJydnl5e31+fn5+fX9+f39/f36AgICAf4CAgICAgIF/gIF/gYCBgFZMTlBQTlJRUFBRUU44PT88PDo9PkFAQT8+PkA/Pj48PT0/QD09PT9DOz09PTw8PDpEWTk8PD09Pj9AQUA+P0E/QEBBQEBAPT8/PTw6Oz09PD9AQUJCQUBCREZGRkdGR0dISUtMTExLTEtKS0lKSk1MTEpMS0lISUxMSklJSElLR01tcHF1dXR1c3V4eXl8fX5+fn5+fn5/gH9+gIB/f39/gH+AgYCAgYCBgICBgYCCYUtPT05OT1BPT1BQTzo8Pjw9Oz8+PkFBPz0/Q0NEQT89PkBBP0A8XW5APkRFPz9BPEZdPT49Ozo9PkFBPz5AQD9BPz89PD48PTs7PD0+QUA/QD5AQ0NEQkRFSEVFR0hISEdGSUpJSUlJSUhKSkpKTEtKSklJSEhKSktMS0lLSkpIVnBwcXNzdHR1eXp7e3x+f35+fn5+f39/f39/f3+Af4CAgICAf4GBgICAgIGBgIJtTFBRTk9QTk5PUFBPPjw8PT4/P0A+QEA/Pz9CRkQ+PDw9QD04Ojttd0k4Ozo9PUE8S2I9PD08ODo7Pz49PD07PEA9PTw8Pjs9PD0+QUBCQUBAP0JEQ0RFRkZGQ0VHSElJSEhJS0tMTUpKSUpNTUpLSktJSEhISEpJSktKSk5MSUlfcHBycnJ0dXZ6e319fH5+fn5+fn5/f35/f36AgIB/gICAgICAgYGAgICAgIGAgnZNTk5NTk5MTE5QT0w+QTw8PT8+QkM/PkFBQUJBQFlSPD09SUxGRnZ3Tjc4ODo7Pj5XaUE7PDw6Ojs+Pz89PDg6Pjw9Pj89Oz4/QEJDQkJDQ0FCQkFCQkRCQkRCRENGSUdGRkhJSUtNSklKSktMSkpJSkVESUlGRkhISUpKTEpGRmdwb3FxdHZ2d3t8fH18fn59fX1+fn9/foB+fn+AgH+AgICAgICBgYCAgICAgICBek5JS0tMTExFSUxOTTw/PDw9PkBAQUE7QkNCQ0BDc3lJO11/g395fHdWPD0/PT0+RWl0TTo9Pj89PT5BQ0A8OTtBPz4+QT07P0JAQkNCQENDQUNBPT0+QD0/QUFBQENFRUBAQ0JDR0dFRENGRUZGR0VEQEFHR0ZDRkRHSEpHQz5IbG9wcHF0dXZ5fHx8fHx+fn1+fn5+fn5+f36Af3+AgICAgICAgIGAf4CAf4CBgIF+UUhLTU1NS0pLTE9RQD8+PkFBQEBBR0FCRENFQUhyeWtigoSDg4OAfV0+QENAQD1JcntaOj1BRUFCQkZIQz08QEREQUA/Pj1AQT4+Pj88PkBER0VAPkBBP0BDRkVDQkNDQEJEREJERUFCPkFCQkFCQEA9QUJDRENDQUNFR0E/PVZwcHFwcnV1d3p8e3t7fX9+fX19fX1+fX5+fn9/foB/f4CAgICAgYCAgIB/gIGAgX5SSEtNTUxLS05OUlVEQkBDQ0FBQkBCQ0BAQUFARm90fYKCgYN+fYR1TEFDRUA/Plh7gF0/Q0VJSklJTU1LRUNGR0dFR0VFRUREQ0E/QD4+QkZKSkdFRUdGRkpOTktKSUdHSEtMSUdHQ0REREVEQUJCQ0BDREVEREVERUZDQkFEZW9wcXF0dnV4e3x6fHx+f319fX19fn59f4B/f39/f39+gIGBf4CBgICAgH+AgICAfVJJSUpKSEpKTE9SU0dGRUdIREdIREA+PDs+QEVFaHN9gXx/hH55hXFDREVEQ1d1hoeHflhHSEpNTE5PT0xIR0hISElJSEhHR0hIRUNFRUVFRkhKSkZFR0lKTU9PTU1LSktKTU5LSUhHSEhIR0ZFRkZGREZIR0VFSEhGSEdIRlFubnBxcnZ2eXt7e3p8fX5+fX19fX1+fn1/f39/fn5/gH+BgYGAgICAgICAf4GBgIB8UEhHSElGR0lKTU5OSkxJSUpLTE5KRkNBQkNGSkdge4B/d3+EhYOEim1BQVZ0h4mHh4eIg1dITE1MTU5MSUdHR0dER0dHR0ZIRkhFQ0RERkVEREhIQ0NDRklKS0xMTExMTElKS0pKSUlJSEpISEdISUhHR0hGRkZISklJSUlIXW9vcXJzdnd6e3t6e319fn59fX19fX5+fYB/f39+fn+BgIGAgYCAgICAgIB/gYCAgHxNR0ZIRkVGR0dKS0pMTUxLTU5NT0tJSEhKS0tMTE5bfIKCg4OFhoaIg1ZshYeGhoaHiIiHfFBLTEtIR0ZGREVDQ0BBQ0NDQ0ZGRUJAPj5AQUFAQkQ/Pj9ERkhERUdJSklKSEhIR0lJSUpJSEZKSkpKSUpJSkpKRklMTEtKS0tmb3BzcnR2eHl7e3t8fH1+fn19fX19fn59f39/f35/f4CAgICAgYCAgIGAgICAgICAfU9GRkdGR0hHRUZHR01NTUtMS0lHQ0NDRElLS0xMSlWBg4SEgoKFhoaEgoaFhISGhoaHh4aKdUlJRkI/P0A/Pz88PDw+Ozo8QUFAPjw5OTg8PD07Pjs5Oz9BQkBBQ0NCQEFCRERCQ0ZISUhISExNTEdJSk1NTk1KSktLSkxNU2xwcXRzc3d5e3t7fH19fn9+fX19fX1+fn5/foB/fn9/gICBgIGBgICAgYCAgIB/f39+UUZFRkdJSUdEQ0VGTk1MSklIRT85Oj5ARUhISkpJZYWEhIR/gYKDgoODhIWFhoeIiIiIiYyOZkJCPTg4Ojo5ODc4ODk2NDc5Ozw6ODU2Nzc4OTc4NzY4ODs7Oz1AOzk5OT08Pjs7PUFDRUhKTUxMR0lIT1JRUFBOTE1NT1Fdb3BydHN1eHp7e3x8fn5+f359fX59fX5+f39/gH9/f4CAgICAgYCAgICAgICAgIB/f39RR0ZHSEpIRkVGR0hMTEpJSUdDQjU2OjxDQENHSUlqhoSEgX6Bg4ODgoOEhomKjIyLiomKi4yJVDo4NjY2NzY2NjQ1NzczNTY4Ojg3NjU2NTY3Njc3ODo2Nzc4OTs3NTc4OTc5ODc2OjxAR0ZJRklGRUZPU1JTU1JPUFBSVGVwcXN0dHd5e3x7fH1+fn5/fn19fX19f39/f3+Afn+AgICAgICBgICAgICAgICAgH9/flJISEhJS0lHSUpJSkpLREVIRUJANTc4OD06PUVDQmaFg4GAgoODg4ODhYmKiomJioqKiouJioqBRzY3NjQ2ODg3NDU3ODU2NzY5OTc2Njc2NTo5Ojs6Ozg5ODk4Nzc3OTo5ODg3ODY4OTtBPT4+QkE/QUtMT1FQUU9PT1JXa3FydHR1d3p7e3t9fX5/fn9+fX19fX5/f4B+fn9/f4CAgH9/gICAgICAgH+AgICAf39+VEhHSUlMTUtKS0tMSUg/QEFAPDo1Nzk4OTc7Qjo9cYSAgYOEhISEhIaJioqIh4iIiYqKi4qJiYx6Pjk4ODs8PT45Ojo8OTo7OTo7Ojk5Ozo5PT09Pjs7PD06Pjs5Ozs8Ozw8OTo8ODo6Ozo5OTk8Pzw9QUJESUpNS0lLTFdvcnN1c3Z4e3t8fHt9f39+f359fX19fn9/f35/f39/f3+Bf4CAgICAgICAf4CAgH+Af35URkVGSUxOTkxKSk1CPzo7PDs4OTk4OTo6Ojs/Pkh+hIKChIWFhYaIiYiHhoaGiImIiYuMi4mKioxsPDs+QkNFRUFBQEI+QEJAQD49PT5APz4/QD9APT0/Qj9AQT9BPz1AQEA+P0E9Pjw7Ojs5OTs/PTs8PT1BQUNBQkNBWHBxdHR0dnp7e319e31/fn9/fn19fX5+f35+fn9+f4B/f4CAgIB/gIGAf39/gICAf39/flJFQkFHSk5PTElHSzo4Ojs5Ojo8PTo7Oz09P0BCUoKCgoSFhIWEhomJiIiGhoaHiImKi4uLioqLiotePkRHSUtKSUZHR0RGSEdFQkBAQ0VDQkBCQ0I/QERIRUNFQ0VFQUZFRkRFRkRAQj88QD49P0A+Pz4/Pj8+Pjo7PTxgcXJ0dHV3enp7fX19fn5+f39+fX19fX5/fn5+fn5/gH9/gICAgICAgICAf4CAgIB/f4B+UERAPUNIT01HRkJEOTc6Pjo8Oz4/Pz89QUBDREZXhIKDhIWFhoaIiYmIh4aGhoeJiYqLjI2MjIuKiohWSE1MTUxPSUlLSUlKSklFQ0RGR0ZEQ0VGREJISUtIR0dGSEdFS0lLSUpLSkNGQ0NEQkFBQ0JEQ0NERENBPTs9QGhwc3R0d3d5eHt8fH19fn5/f359fX1+fn9+fn59fn+Af3+AgH9/gICAgICAgICAgH+AgH9PQT49P0RMS0BCQkE5ODw+Ozw7PkA/QT5CQkdHSVmEgoOFhYaHiImJiIiHhoaGiIiIiYqMjYyMi4uKjH9QTlBOTE5MSkxKSUlISkZERkhISUVFSEZGRUxMTUlKR0dISUpOTU5MTE5LSEdHR0VFQ0ZGRkZERUhIRkNBP0BMbHB0dXZ4eXl5fHx8fX1+fn9+fn19fX1/f35+fn5+f39/f39/f3+AgICAgIB/gICAgICAf1FBPz4/RUdHPTxAQDg4PDs8PTo+QD4/QENGSUlQX4GDhYSFhoaHiIiIiIiIh4eIiIiJioyNjIyMi4uKjXJOUlBOTU1MTEpIR0VJSURKSEdLSkhKR0dHS0xOTExISElKTVFOUE5NT0tJR0lKSElESUhIRkZHR0hHQ0JBQ1VucHV3d3l6eHl6enx8fX5+f39+fn1+fX5+fn5/f36Af4B/f3+Af4CAgICAgICAgICAf39/VERBQUJHR0I/OD9AODo8OD0+Oz1BPj9BREhKTFVxg4SEhISFhoeIiIiIiIeGiIiIiImJjIyLjIyMi4uLi19SUlBNTk1LSkdFQkdKR0xLRktOS0tKSkxNTE9QTkhJS0xPUVBQUU9PSklKSkxKTEZHSEdGRklGRUVCQUJCXG9yd3h5enp5eXp6e3t+fn5/fn59fX19fn9+fn9+f4CAgIB/f39/gICAgICAgICAgH9/f39VRUNFRUdHRUQ7P0E7PTw5QD4+QEJHR0FHS0xQVnmFg4ODhISGiIiIiIiIh4eIiIiIiIqLi4uMjIyMi4uNfFhWUlJUU09MS0pERUZLT05PV1VRUE9RU1NNU1RPTVNMUFNVVlJTUVBMSk1NTUtOR0dKRkZJSkRERUVCRENjcHV5eXp6ent6e3p6fH59fX9+fX19fXx9fn5/gH9/gICAf39/f3+BgYCAf39/gIB/f39/f1VGRkdHR0dIRj5AQj0/PT1CP0JCR1ZORk5QUFRYe4aDhYWEhIeIiIiIiIiIiIiIiIiJiouKioyMjIyOi4uLaFdVa2FFUlFRUEk7O1JUUmB1XVVWVFZZWVJYWFJaZlBVV1pdUlRXUU9OUlBQUFFLS0tISEpIRUZJSUlISWlydnl4eXl6e3t8ent8fXx9gH59fX19fX1+f39/f3+AgIB/f39/f4CAgIB/f3+AgH9/f35+U0hKSUhHR0ZFPz9BQUVCQ0dFREVMWFJNVFVWWFt8hoWHhoWGh4iIiIiIiIiIiIiIiIiIlJyMiouMfWGKi4uHbFtkVTpYWFhTUT9AVlVZXGRgVllicl1dV11aVUVRWVpbWV9UWWdSVlZYVFRWVE9PTUpMSklJTE1LT01Tb3N2eHl4d3l5ent6e3x9e35/fn1+fX19fn1/f39+f4CAgH9/f3+AgICAgH9/gH+Af39+fn5WSkpJSEdFRERCQT9ITUlNUEtJS1BUU1NYWlpcXHiFhIWFhYWGh4eHiIiIiIiIiIiIiImcnaCPiY5nO36LiYqLeW5wWFpcW1JTUlZWVFtadYNZVX2QYFxYXV5XSVZdXVtbX1lIWVhZW11YWFlXUlFOUFFNTU9TUVFVUmFzc3Z3d3Z4eHh6e3p8fX19f39+fX59fX1+fn9/gH9/gIB/f3+Af3+AgICAf39/gIB/gHh5fVlOS0lJSEZCREBBOlBRUVdYUFBPUVNUVFhYWVpbboGCg4WEhYaHh4eHh4iIiIiIiIiIiJaanJeIioFuhomIh4OKfmZZWVxZVFVUV1JRV1ZjloBRZXJYWldfaFBgZltbWFxnYUdPWmhnXFtcXV1XUk9TUFBRVlZWVllabnJ0d3Z2dXh4eHt7fH19fX5/fn59fn18fn9/f3+Af39/gH+AgH9/gICBgYB/gH1yfX9/b3R8XVNQT01LSkVDP0A7UFBaWltSU1FPUlJSVVNWVFdfdXiAhYSEhYaGhoaHh4eHiIiIh4eIh4ORjomJiIaFiIiGfYB7XFBVWFRSVFJRUUxPTUtmeVtdVFlVVl1aS1RaVVNUXlpYV1dXemtYW1tcXlRRUVBJTk9XVlhbWmRwcnZ2dHR2eHl5e3t8fH19fn99fX1+fX1+f39/gIB/f3+Afn56eHd2c3V7f3+AgHRrfn5rcnleW1ZVVFJPS0ZDREFNXoNsVlJTTk9RT1FVUlNSU1VjZHaAgoKDhISEhIWFhISDhoaGhoeIhn6JiYiHhoOHh4d5bXFWSUtNTktNS0hKREZIRUM+VGRVf1JRUU5LUlRRTU9ZUk1OUVNVVU1RU1JQT01MSENJSFJUVVpcbHF1dnVzc3d6ent7e317fX19fn19fX59fn9/f4B/f399fX5+f39/f4B+e3Zzd31+fmR1fWlxdF9kXV5bWVZQTElMSWFsknRQUVNOUVJRUltSU1JRUlZUYnN7fH+AgYKBgX99e3uAf4OChYaHgoaGhoGEgYaFhnVfXUtDP0NDQ0NCP0RQQkNAQz1DSUdWQEhOTEddaVBIRk9GREVGSUdIQ0RIR0hLR0RCQURATlFNUmRydHZ1c3R1enx7e3t7fHx9fHt+fX19fn5/f3+AgIB/f3x8fX+Af39/f4CBgH12dHt/bWh8Z25xZmllZGJcWFNRUFVSc1dlW09PTkxRU1FVWVNVUVFUUk9WYGtscnZ7e3h5dHJuc3RzeXh+foOAg4OCgIKAgoGCa01HP0A6Oz5AQD8/PmpRS2FFRkhJRUI/R0xOR01RVUlCRT8/PD08PT0/PT9BQ0NAPzw9Qj5KTUdVbnR0dXN0dnh6fHp9e3x9fX19fH59fXx+fn9/f4B/f39/enl3eHd2dnh7foB+fXt4dnx1YXhnbHBqbGpqZmBbUVJaXFleSkpQUU5LTFFSUVRWVFdRUVdWUFhbYl1hZ21tbG9rZ2BucmptbHF1e3p9e3h6fHx4d3hlQ0BAQj06QkNBQURCXF1Pe05PTk5LTE1PT1FMS0xXTkhHQEE8OTc3Njk5PTs7Ozg5ODk/PEJIP1xzdHV2dXZ4enx8fH18fH19fn58fn19fX9/f39/fn9/f314dXZ6e3p3eXh1d3t8eXh1eXdjcWhpcG1ubW1oZl5PUF5cWklIUFJRT01QUU5RUlRWWFNSWVROWVpbV1ldXl5fZWBdXnF2a15gZ2t3b29sam9ubmxmYllIRkZIQkFHSUVFRkRNUlBhV1JXUVBTU1JVW09PUVdQTUlERj46OTY1ODc5Nzk6MzY1Nzk1PEM+ZXNzdnd3eXl7fX18fHt8fX1+fnt+fn19f39/fn5+fn9/e3d1eX18enh8fHx8dHd2d3Z1d2tuaWhxbm9vb2prYFVXXlpYTUxUVFNQUVVPTFJTVFdYVFRYUUxXWVpWWFhWWFldV1hYaHNrXVZhc2thYV9eZGFfXllUUU5OTkxJSEpLSUlGQ1FQU1tXVFROUVNZU1xlVU9TVFFOS0lIQz9BOTk5ODk3ODg1NzU3ODU5OUducXR3eHl7e31+fX18e318fn5+en1+fH1/f359fn5+f358dHR1e3hycW9vbnR4cXJzeHZ1cWZkZ3JucHBxbm1kXV9fWVdPUFhWVlNUVk9PVFZYWFlTVVRMS1RWVVVVV1BUVVdUVVJdbl5STllfW1ZZO0RWWFRbZkpMT1JST01NTk5OTEpGUVBVWVNUT0pOT1VTVFxWUlVTUk9NTElISEY/Pzw6Nzg3NjU5OTY3NjY1V3Bwc3d5ent8fX59fnx9fXx9fX15fX18fn5+fXx8fX1+fXxydnF4eHJ2dXFxbnBwb3B1dnRuamRkanBwcXJwb2ZlZGNcXVJUWlZXVVRXVFJYWFlZWVJVT0lHT1BPT01SSk9QT1BOTk9UTE1JUE9TVFUyPVhNSUBRPWNhUVNRUE5QUVBOTk1RTlRSUFJNSUxKT1JQUlJTVFFST0xMS0xMSENCQT06Ojg3NjtCNTU2Njpkb3F0d3h7fHx9fnx9fH19fX18e3h8ent9fX58e3l9fH18e3B1b3d1cHV0b3N2cHFxcHR1dmNqZ2VXaHRycnFuaWlocFZWVFVYVVdVUldWVVpZWFdVUVNGRUFGR0dIRkpESEpIR0VITEhLSUZMTVBNRy9FX1I+Mz8+am9hUlJRQEdVUVBRUFFOUU9QT0xKTExPUE5OUFFRTlBPSkxNTUtHRUVEQjs9PDw5PUc2Njc3RG1wdHZ6e3t8fX18enx8fX5+fXt5dnh3eXl8fXp6dn17fHp6b3Fud3JwdnFtcHNwb3Bzc3N0ZmdgaFpXa3JzcmxtbWtuYWVQU1RSU1RPV1ZWWVlWUVFRT0A9Oz0/QUJBQ0BCRURBQEdIR0hFRkhKTUxFR0NPUkM4RU5TXWZTUVNBR1VQT1FRUE1NTk1LTEtMTk9PUU1PT01ITExJS0tMS0dGRkVEPEFBPjtARTs8ODlTcHJ1eXt6e318fHt5fHp6fn58e3V0dnJ2dnp6eHpyfHt8eXltcW94cnF1bm5xcm9vb3Rzc3J1dGtnZ15lam1wa29xbWltY0xPT01RU0xUVVRYV1VNTEtJPDk4Nzs+QD48PUFAQj0+RUhHQ0ZGSUdKSkBGQUFARkhFSk9IUFJhXFFQUk5TTk9QTExPTUtNTE1PTltXS01RT0dJSENISkxMSkZGRkU/QkM+PEJHP0I/QWRwdHd7ent7fHt6end7d3l+fnt7cXN0cHJzd3R4eHN6e3l2d2xxb3ZxdHRsb3Fybm5vc3ZydHNycmtsZW5zaG1ubWxtbGprSUxISE9RSlFTUVRTT0tIREQ9OTc3OT9CPjs/QkBAPkFESUVDR0dJR0lFQkI/Pj1DQkFHSURNT2JlUU1OTldLS01LTE1NTUxLTk5TZE1KTFJJSUlFQUhKTE1OSkdJRkJBQkA/RUZFSERLbm92eXl5e3t6e3p3dHh1eHx8eXpucXJtbm9ycnZyc3h8eHZ2bXBtc3B1dGxwcHJvb29ydnVyVlZucWdseYRqbXFybm5qaG9ISkNHTE1JTVBNUE9ISkQ/QT05OTk6P0I/PEBCQkFERUdLRkNISUdHSENDP0I/P0BBPkRFREtNUlRMSklNVEdJSUpMSktMSUpMTU9QUVBLR0NLR0NCSkpMTU9OSUpJR0NDQ0RJSk1MSVlybXd5eHp7e3l8dnJwdXJ0eHl2eGpxbmpsbG50dG10dXtzdHhyb25xb3ZzbnBvcnBvcHN0eWpOYGdzanR8eWdvc3FpcWhkcUdLREdISEdKS0lKS0RHQj0+PTo6OjtBQj89QkJDQ0hGSUxKRElJRkdHQ0M7QUBCPkBAQkVESU1QSEhLR0hLREhJS01ISkxISUpLSk1cUkhIRE5GQURLSk1NUE1LTUpLRkdHSk1OUU5MYm1pdnZ3e3h8en1xbWxza3B0dHR1aHBtamlra3RwbnR0eXByeXRvcnFvd3NvcXB0cnBydXR5a05WbXVscXt2aW5vaWt0Z2RvRktDRkVHRUZGR0VHQkNAPTw9OTo6OkFDQD5CQ0VFSUVJSkxGSUlHRkZDQjtBQ0M+QENDQ0RHTE5IS05IREhFSUxOTUdJTEdGR0lJTE5LSUhFTklCRk1MTkxPTU5OTUtISElPUlFTTlJmZmZxb3N4dXt5fGxoam5la3Fsc3FmbWxoaWtsdG1wdXR3cW94dG90c3J2c3BxcnRzcnR1dXZ2WFZ1dWtvdHJrb3ZsaG1lX3BHSkRGRkVDQ0NFQERCPkA/Ojs7PTo9PkNBPkFDRUZKRklITEhHR0dGRUNAPUVFQj5CQ0NDREdISUdNUEpGRkdLTk9LRkhKRkVERUlKSEtJRkhQS0NJTUxQTU9OT09OSkpJTFJVVVJPV2RgYW1ncHJvcnl6Z2VoaGRpbGZxbGZsbWdpa2xzbHB2dXRwbnZyb3Nyc3V0cXNzdXRzdXZ2dnl2dXR3bGp1dW1ydnFsbmxlckxHRUVIQ0JBQkQ9Q0I+QD05Oj0/Oj0+QEI+QEJER0pGSUZJSEZGR0VDQ0FBRkZDQkNCREVFR0dJRkxRTElPSkpMTElHSEVGRURDSUlIS0pHS1JNQk5PTVFOT09NTk9LS0tQVVdWVVRYX15caWFtaW5ocnNiZWZmZGloZm5pZm1taGtrbXJpcXZ1c3Ftdm5vcXJzd3Nyc3R1dnZ2dnd2d3Z2dHd1anN1bnV0c3FyamtzTUdIRkhCQkBERDxCQUFDPDg6PT45Pzw/QkBAQERGSEVIRkZIR0ZGRENFQ0RJRUNGRUJFR0VGR0dFSk1LSFFNSktISElFRkhIRUNJSklLTUtPU05EUVJQUVFOUE1OUE1MTVNXVlhYVlhdWl1kYGhiamlna19lZWZjZ2dna2dna21rbWxwcmh0dHVyc252b3FwcnR4cXNzdXZ1gpF5dnZ0eHV1d3htb3VvcnN1cXFpb3lNSEdISEJCQkZFPEBDQkQ8Nzo+PTo+OkBCPj8/Q0VGREZERUhGREVEREVGR0pFRUpHQ0dIRkhHRUNGSkpHTUpMS0hKTEZJSUtIRUtLTE1OT1JUT0hTVVNQU09RTU5RTk1QV1pWWllWWl1aWGFgYGBfaGVjYGRmaGdqaGhpZmhubGxubXFwaXV1eHJycHVwcHBydXZwdXN1dnV7fn14dnR3dnZ2eHBsdXBtc3RucHJyeE5JSEdJQ0FDSEU8QEVCRTw4Oj4+PTw8QUI8Pz5BQkZDRUNDSEVDRUVGR0dHSUZHS0hESUhHSUdGREhLSUdLSE1LSktMSExLTUtKTkxPTk9SVVZPS1VXU1FTUVJMT1FQT1RZWllcWllbXl5eYGNeXGFja2JgZGdocoVoZ2lmam1ucG9uc3JqdHV4cnNzdHJucHF2cnF1cnV1c355jn11dXZ2dnZ4cmh1cWtydGxxdnB0TUlLSEpGQkVHRTxAR0NEQDo8PkA/Pj9CQTxAPkFBRkNFRURJRUZFR0VISEZISElLSkZKSEhLSEZGTElISEpHTExMTExJTUtNTU1PTFBQUVVWV09LVlZVU1NRUUxPUlJRVltbXV5bXF5fX2FgYWRdZGBlZmBlaGpjc3NmamdnbHBycW9zc25zd3dxdXZ0c21vcnVvcnNwdXJ2cnSBdnV1dXd2dXd0Z3Rya3Fya3J2bnZKS0xKTEdCRURFPEBGRERDOz8/QUBAQENBP0I/QUNIQ0ZFRklGSUZGRElJR0lISkxISEpKSUxKRkpLSElKSkdLS01NSkpNTE5OTlBMT1BSVFhWTU5UVlRSUlFQTE5UU1JXW15eX11dYF9gYWFfYWNlYmRoYmRpamd2i2xraWdtb3NxcHFwcHJ5dnJ1dXRzbW1zc21xcm90dXRycHN3dHV1d3Z1dXRlcXNrcHFqcnZud0tNTEtNR0RDQUQ8P0VFRUM9QUFDQkJDREFDREFBRUdDSEdISEdKR0RHSUdISkZJTEhJSk1LTUxHS0lIS0tOUUtSUU1TTUtOTk9QUE9UT1dYWFtOU1FXXFpSV1BOVFVUVFhaX2JiX2RhXmBiXmBlYWFjaW5nYmloaG54dmxoaW1vc3JwcXJycnZ0c3Vzc3Nua3NxbXByb3R2cnFxdXZ1c3d5d3V0dWNtdGtvcGpxdG93TE5MTExHRUFARD4+REVGQ0BDQUVEREZCQ0VHQ0NJRUNJSkpJSUtHREtKR0hKSUlLSEpKTkxOTElMSEpMS1pmSmRcS2xTSE9OX25Va3NbcXBid2NTUGJ2dWh1Y2F2YFhucWJkdmluemZbbHRgbGtUX3d2aWpnaWZnbG1qbW9qbW5zcnBycnFyc3Jzc3J0cm5sdG9ucHFxdXVxcXN0dnZ1dXl3dXR0YGt0a3Bwa3FycXlMTkpKSkZDP0BCPz1ERUZEQ0RCRUVERkJGRkdERUpFRUpNTUtMTEdHTUlHSktIS0tJS0tOTE1NTExJTE1MW3NiZHBebG1VTU5mc11mZXFsbnRncGlfYVlubmJwcGJrampnb3F0ZXRublxvdWdwTUpyeXZrYmBrZWVteGxrdm1ucHNycHJxcHFycXJycnRybW1zbm5vcHJ1dHFzc3R1dXV0d3h2dXRibXVrcHBscnJxektMSUhHRURAQUJAPkNGR0JGQ0ZFRUVEQ0hIR0RFS0hHTE1OTE1NRkpOSEpLSklMSkpKS0xNTk5NTUpNTU1bcm9vbnBwbGtNUFFsV05pYnRycGFtbnVcWWxRXG1tWnFta29teHh0c2lwXV9ya3FqVXV5eHBjXmtmYmdwcGpqb3BwcnNwcXBxcXJycXFycnRsbXJtbm5vcnV0cXRydHV1dHV1enZ1dGVudWtwb2xzcnJ5SUtHSEVFRUJCQj5AQEZHQkdESUVFRUJGSUhIRUdLSkdNTU5MTU5HTE5JTEtJSk1JSklKS09QT05NS05OTFxoZHVdbHFXbE5QUW1VWmtea2x2YWxkc1NlY05tWWxcdHBraWx4and1aHBdXnJraFdiY3d8b2NgZ2dhZGl0eWtubnFzc3BxcHFwcnFwcHBydWttcW1tbW9xc3Rxc3J0dnZzd3Z6dnV0aG91bHNvbXNydHZITUdJREVEQ0FCPUJBQkZER0ZMSEVDQ0hLSEhGSkxMRk5MTFNSTEdMTUhOSklITkhKSklITk9NTkxKTk1KWnNwcG9xcW1sT1FSbllxa2dvb3Fxb210XW5YYXRfbm9wb3Fyb251c3R0altddGN3eHJqbnpoYWFjZmJiam10dXBzdXZzcXBwcW9ydHt/fn13bGtxbmxtbnByc3F0dHN1dXR4eHl4dHVrb3VtdG9udHN2c0hLSElCRUVFQUA+RERCR0RISU1JRkNGSkxJR0ZKTUxGT0pLV1JLR0tLSk5JSEpMSUtKSUhKTU1NTUlLS0tTa2JbaV5faWNyclpfWWpvX2VlVWtfY1thYVFgbWhdalxuaWlkW3BmZHBdWlxrW21xY3BzbGRnY2RnYGBrbXBwb3R5cnVxb3BxbnmFiIeHhoWAdnNua21tb25xcnR0cnR1dXZ5eHhzdW5xdW53cXJ2dHdyR0dGSURFREZBQEJGRURHQkhKTEhGREdLTElFRkpPTElQSUxbUUpFSEhLTUlISkpLS0lISUdLS0tMR0hLS0xMTExKS01OVFtcVFBUTFBPTk9PVlFPT1FOT1FKSU5QUWRxaVRZV1xbXFVZWl1YXVxcY2ZhYWViY2VfX2ZrbWhtdHlydHJvcHB0hoeGhoaFhYaHg3pwbW1sa3FzdHRydHZ0dXl4eHV2cXJ1b3ZydHN1dXNHQ0VHRkZBRUNAQ0hERkdDSUtMSEZER0tMSERHSVBLTE9LTFdMSUVFSElKSElLSUxKSEZHR0lHSElFRktJSktOTElQXFdeUFxbYF5NWFlTXFxiXk1ZWk1YYVJKWWFaUl9kXGFYW2RkVlZYXFlaWFxWWVxdYl5kYGFfZWhrZ210dHFxdHBxcoGGhoaFhoWFhYaGhoR9cmtpb3Jzc3N0d3l5eHl4d3h0cXhyeHNxcnVydE9CQ0VMTUJEQ0JFSUVHR0ZLSktIRUVKSktGRUhIUEpNTUpNU0hHRUFIRkpJS0tJTEpIRkVJRkRGR0VFSkhDSk1LTFVfWWBYYGFbYFRYWVReXlpfUllcUF5cWU5eXF5TWl5jXlpdYGNgWV9iW2BeW1RYV1leXWNiY2FjZWhla3Jwb3Bwbm53hoaFhYaCe4CFhYaGhYaFf3VxcHJyc3Z5eXp5eXh4eHdyeXZ4cnF4dnR2YVNKSk1JREJCQ0dIRUhHSEtJSUlERktLS0VGSUpOS05MSExOR0hFPkdHTElLS0pMS0lHRUlEQ0RFQkZKREBKTEpPW2NZX15hX1JUUldfYFxdWV5RWVxNVl9XS1FZW1BaX2FhXV5jYWBiYmJjY2VaUVlWVVxZXWNgX19jZGJob21ubGxsbHWFf4SDeXV8hIWFhYaGhYWGhoN9d3JydHd5eXl5f359eXV5dnZybnp3dnhYUUtGQ0dFQkVHSUZHSEhGRkpHSEdIS0lMRERLSk1NTExISkpISkY/R0ZOS0tLTUtLS0lHR0NEQERBSElCP0lKSFBdYVpbZF1fVFFSWF1cXFxfWktXXExSXFlJTV5RT1xfYWNjY2NiXGRjYmRjZlhRVVRSW1daYF9eXmFhX2Rsa21qamxudn51gXp8hIWFhYWFhYaGhYaFhoaGgnpyc3V1e4WHh4eGhYSBfnhwend2eFxSTUNASUZDRktKRkZGSEdGSUZGRklMSk5GREtKTE5KTElLSkhJRkJISVFNS0tPTUtLSUhHRUQ/RUNISEJCR0dFVF1ZXlhfWV9bXVVYWFBdXVFLSlZeWF5bXVVZYFJRX19iYmBgYmJgY2JhZGRiWE9RUVFaUltdXV1dXl9fZGhnbGpubnB7e3x+e4CCg4SFhYWFhYWEhIWDhISHh4FzcneFh4eHh4eHh4eHh4WDgHx4XFNLQ0FHRkRHTVJIQ1FKRkhISEVGS0pNUEVGSUpLTkxMSUxMSUlHREhLUU9NTVBMTUtLSElDREFFREhHQkFHRURXVUVcVV5TVl9YTlRVTlpaTUpLVGBhW19YXl5hXU5ZYlxgYF9iY2JdYWJXX19UUE5PT1dRXVtbXFxeYGJmZmVsZm9vd3x7gHt9f4CEhISEhIWFhYODhYKDgoWFhnpvgYaGhoeHiIeGhoaFhYSFg35JTkZERkZIRElSYlBDVl5JR0dIREZNS1BQRUlJS0tOTExMTUtKSkdFSk1RUU5PUE1OTE5IS0FEQUNERkRDQkVGQk1IQktMUE9OTEZNRkdJSkhHTEtNT1BJTE9QT1NPTFFTUlVaWVdZWFhkV09TVFBQTk1PVFNbWVhaXVxgYWRlY2dja2xwc3J6eX97en+EhISEhISEhIKEgH57gYOBfXuFhIaGh4eHhYWFhISEgoGAfUtJRUVHRkdES01dTEdHWExHSEpIR01MUVFJTEtMS05NVU5PS0tMR0dLUFNTTlBPTk9OT0hLRmBFRF9MRGZkRU1bSV5bcm1PTVVtWUxDUWBVa1dnSl1YVV5ETVFVTExTVlFSVFhXVFhVVFxVUGZaaGhkWFJqU1dWVFtcW2BgYWFhYmBmaGZua2hyenx9foGEhISEg4ODgX18enJ7gXp7f4KAg4SEhYWBhIWBg4N/fnp7TEhFR0ZIRUVLT1NJSkZgU0dKT0pJT01SUUtNTExPUlVST09KTE5HSE1RW1lPUFBOT1BPSUpRf1FJfFlZcXNYUG1IcW5vYVZQcXFzUENrc21xc3BTb19bblhdVlxYVWtoVV1WY1pgWVtgVlZYf2p0dXVfX3ZfWGFbXGZbX2FhYWFeYGJnbXBsYHB3dHiBgYKDg4J/fX6Adnh6bHZ+dHh+gHx+gIGChHyAg3p/gX9+d3dOSUVITU5CRExMR0lMRVFWTEtOSUtSWFdRTU9PTVFUTk9RUEtLTkdNUFNbWlRRUk9QUFBKSFp4XVR4ZWhaUlRRdmd0bHBibmZqUXJPTXdtanJwc3JxcnBvb4BdZXp1eHFxenF+c31rdX1iUmh8ZXNzb3Nye3xvfnlvf3JfYGBiYVpgYGdrbmtibGZnbXd+gYCDfnt4d4B0dnppcn5udHx+d3h7foCDeHyAdXx/fHxzc05LRmBdR0FFTU1ISktHSlBPTU1KTlZeWVVMUVNOWFpMU1NSTkxQSVFSVFlXV1BUUFBQUUtIZ3hsY3hybVtLTVV5cHVtdWJudlBkZUpmdnFtd2+AamZ4eGlXclFoem1panp6fmx4en9vaG9ZdnZqdXVwgWByZ3xpbHh8b15fX2JhW11iZGdpaWRnYmNkbGxwcHN0c3NzeXFyeGJsdWdyeXtzc3V5foFzdXpufH15d3JuTktTdE5DQkZQUEhKS0pMUU9PT01QWmBaV0tUV1BhXlJWUVlSTE9JU1RWWFdXUFVQT05SSktyb3V1cXVxZGliV25McXBeRmh5V3ZUTGl5fXhgeXtzbmFdbW9jUmhxdW5teXB3bHZ0dHJtbl10fnprbXl8a3RsfGtwdnV4Xl9fYl5dX2RkaWdoZmVeYWJpaWlqa25va3FubWpwYWNmZG93eG9tcHN5fm5xcGp7enRyb21MTFtWSEdFR1JQSUxNS0xRUVBQUFFXXFhVTVVZVWZYUlJZXlNMTklUVFZXWVdPU05OTlFIUm1IaXdLYGR2dlZYbE9ubHtzYWpnf3ZVTFdraH1sbWx4X1twenteYHpzY3JveHFoZHxpcnxeVExsYHZ1a2l1fHttfnhrfHBdXl9iW15iZGRnZWVlYlpjY2lra3JzcndnbGloZGdhYWthZ3NybGdtbXJ8a21oa3t0bW1rbU9ISktISUhIUVBMTk9NTVNSUk9TUldSVlRQV1tWVlRUVGFfUE5NS1RTU1FVVk5OTE1PUEpIUU5QVUxLS1NUU1JUUFZVUVBOUVFYWVJOUFVUWFhYW1pVUlNXW1dYV1pPU1VXWFhSXVlXXldUUFlSVldXV1hfW2dyXltbWV1dX2NaX2NjZGZkY2NiWmNjZmZlbW5tdWVlZ2NhZl9dZ2BkbGhmZ2tocHpoZ2drdWpoZ2lsUUlLS0xNS0pTUU1RUE9MVlVUUFRVWFVZVVFaXVZVVFdVWVdPT0xNVlRQTlVTTk9NTFFQS0pSUUtRTUtLT1JVUlFSU1JJSExOT1FSUVFRVFZSWFdcV1NTUFFVVVZTWlFPU1JYVlRZVlRaVVRSVVNUVVdYV11aXmFdW1paXFxgY1tdYmNkZmRkZGFZYGFjYWJoaGltY2FkXl9jXVpkXGJtYV5mZWdtc2RpaGtrZWRjZmhQSktMT09MTVNQTlNRUU1YV1VUVVdXV1pVU1xgVldWWVVYU1BQS09XU1BOVVBOUU5LU1BMT1VTTlJOTU5RVFFVUVNUVU5LTU9RVFRSUlFWV1RZWltZU1VSVFdXV1lbVE9UVVhVVVpVV1lVUlJXVlVXW1laX11VWF5cXl1bXWFhXltiYmNnZmRkYlhfYGJeYGhlZmVhXl9dXV5aWl9aX2dgXl1dYmhrYWdmaGZkYGJjYVBLTUxQUUxPVE9PU1FPUVtaWFdYWlpYWVZcamRWWFlaV1ZTU09KTlZUUE9UUFBQTk1RUVBSWFRRUU9NT1NWT1hSVFVVT05NUVNVVVRUUlRXVlpdXFpWV1FSV1hWW1tXUVRXVlZWWVRYWFVSUllXVlpdWV1fXlZeXV5gXFtfX19fWmJiZGhnZGRiWWJgYV5eZmNjYGJdXFxcXFlaW1hbYVteXVxfYl9fYmRlYmRfX2BcUE1OTlJRTVJST1NUUU9VXFtaV1tbXFlaW2RxbWhkXltZVlVXUUxNVlJNTlJPUVJPTFBTUlVaVVNQUExQWFdSV1NTU1hNT1BSVFhWVVVTVVlYW15dW1tWUk9VVlZbW1dSVFdWV1hWVFhbVFNSWlhXXF5aXl9gVWFcYWFdYGJfXWBdY2BjZ2hkZmBaY2BhX19lZF9gY1taXFtcWVpZWVdcWVxbYF5fW15eYWBeYlxZYFpRTk9OVlFQVFJPVVRTUFdcXVxYXlxeVlxeanF3eYBiXFtWVlhRTU9WU05RUVBSVFJLUVRUWVpXVU9RTlNYV1RTVVJSWk9QU1NWW1ZWV1RWWlhdXltbXlZTTlRVVlxcVlJUVlZYWVNUWVxVU1NdWFpdXlxgYGBWYVtjYl1hY19cYmFiX2NmaWRmXltkYGFgYWNkX2JfWVpeW1xbWVhZV1daWlphXF1bXVxcWl1gV1tbWlBPT09ZUFVVUlFXUlRQW11eXltgXGBVXF1panJ9c2xnXFVZV1BOUlpTUlFTUlRVVEtSVlZbWlpTT1NSVlZWVE9XUlNaUlRUVFhdV1hYU1hcWF5dWVpdVFVOVldXXltYUlVVWVlZVVdZXFVUV15ZXV1gXWJiXllfW2VhX2RkXl5jY2FeZWZpZGZeXmRhYGBhYmRgYl5YWl9bXFtYWFhYV1taXGBcW1tcW1hZW15WXlldUE9PUlpQWlRVVlZTVFReXmBfXmJcYFVdXmJreXRsfWtaVVlVUVBTXFRVVFVUVllXTFJbV11bXVJPVVNYV1dUUFhSU1dTVlVVW11YW1lVWl5YX15ZXFlSV1JZWFlfWlpUVVZaWVpXWFpcVlVaXlxeYGFfZGNcXl1dZWFhZmReXmRjYFxnZGhlZGJfZGFgYWBiYl9gXldYXlpcXFpZWVdWXVpdXlpZW1xbV1lcXVZYV11TT1FXWVFdVVZZV1dVWF9fYWFgY11gVF1fYmVldYF6aFhZWVNWU1ZcWFdXVlZXXVhPVV1aXl1dVFJXU1dWVVNUWFJTVlRYWFhdXlhdW1ZdX1hfX1hdVlFZVFlaWmFZXFZXWFtaW1lZWltYVl1fYF5jYmJlZFxiXGBmYWRmZF9gZGJiW2ZjaGVjZmFmX2BhYWFhYF9eVlVdWVtcW1lbWVldW1tbWFhZW1laWl1fXVRZXVVOVFpWU1xUVldZVlZcYGFiY2FjX19WW2BkYV96dW9oWVxaVVhUV1taWVxZWFlgV1BWXlxgYVxUVFhQVVdWVFZXUlNVV1paXF9eWl9cVl9fWV5eWV5WU1lXWVldYlpeVldbXFtcW1taW1lZX19gYGRiY2RlYmRZYmZjZmZlXmFiYGNeYmNpZGNnX2deYmJjYWFgXl9YVFtaWltbWFtYWFxbWltXV1lYV1xbXGBdVl1dU1BWWlZWWlVYVVhXWF1fYmFkYWRgXllZYWRiYGxmaF5cXVtWV1hZXFxcX1tZW2JWVFheXWFjXFJWWFBXVldXV1ZTVVRYXFxeYGBdYF1XYV5bXlxbXlhWWFhbW19gXF9YWV1cXV5eXFtdWFtgYV5gZGNkZWVmYlhjZWRoZ2ReY2BfZWNdZWlkZWlfZl5jYmNhYWBfX1tYWVpZWlpYWVhXW1taW1dYWlRZXVxaYFxVXmJOU1dZVldaWFtcWFdZXmBiYWRhZGFdXllhY2JfYWBgXlxcXFdXW1tdXV9fXFpdY1haWF1gY2RfUlhZUFdXWFlZV1ZXVl1dXmBhYF9iXllhXV1eWV1eWVhWV1tcYF5dYFpaXl1eXmFcW1taXF9iXmJkY2VmZWZiWmRmZmlnY19jXmFmZVppaWNmaWNlXmJiY2FgYF9dXVpYXFlZWFhaWFdaW1pZV1hWVVtdXV1gYGJieEtYV1xZV1xbXF1aV1xdX2BiZGFiYV1gWGJjYmFjYWJdW1xbWFdbXF9dYF9dW2BkXFxYWmJlY2FSXFpPWFhaW1taV1pZYF1gYmJgYWNfXGJdX11bXl5ZWVVYXV5fYF9gXFteXmBiY1xcWFxeYGJiY2VkZmRlZmRcZWZnaWZjYWJcY2dgXGlpYmhqZWRgYmFjYV9gX11dW1lcWVhXWFlYV1xbWldXWE9YWl1hY2Zmcmt/SllXXVpaX1xbXlxYXVteX2FjYmFhXWJbYmRiYGJiYlxbW1pXWGlxYFxgX11cYWNfXllZY2VkYVNfWlJZWFxdXVtaW1tjYGJiY2BiZGFgY15gXF1eX1pYVltfXl1hYWBeW2BhYmViX11UXWBgY2RkZmVnZWZmZV5lZmhoZ2RkYFtlZ15haGhiaGhmY2BiYGNiX19fXV1cWltZWFhYVlpWXFpaVlZVTVhXXGdpa2h1eIF2dnZ2dnZ2dnZ2dnd3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d4eHh4eXl5enp6enp6e3p6ent7e3t7e3t7e3t7e3t7e3x7e3t7e3t7e3t7fHx8fHx8fHx8fHx8fHt7e3t8fHx8fHx8fHx8e3t7fHx8fHx7e3t7e3t7fYmIhoqHhYKBgoOCg4OCgoKCgoKCgoKCgoGAgYCBgICAgYCBgYGAfnx8fHx8fHx8fHx8fHx8fHZ2dnZ2dnZ2dnZ3dnd3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3h4eHh5eXl6enp6enp6ent7e3t7e3t7e3t7e3t7e3t7e3t7e3t6e3t7e3t7fHx8fHx8fHx8fHx7e3t7e3t7e3t7e3x7e3t7e3t7fHx8fHt7e3t7e3t8iYmHiYaFgoGCgoGCgoKCgYKCgoKCgoKBgYGAgICAgICAgIGBgYB9fHx8e3x8fHx8fHx8fHx8dnV1dXV1dXV2dnZ3dnd3d3d3d3d3d3d3d3d3d3d3d3d3d3d4eHh4eHh5eXl5eXl5eXl5eXt7e3t7e3t7e3t7e3t7e3x8fHx8fHt7e3t7e3t8fHx8fHx8fHx8fHx7e3t7e3t7fHx8e3t7e3t7e3t7fHx8fHx7fHt7e3uHiYiJhYSDgYKCgoODgoKCgoKCgoKCgYGBgICAgICAgICAgYKBgH58fHx8fHx8fHx8fHx8fHx2dXR1dXV1dHV2d3d3d3d3d3d3d3d3d3h4eHh4eHh4eHh4eHh4eHh4eHl5eXl5eXl5eXl5e3t7e3t7e3x8fHx8fHx9fX19fXx8fHt7e3t7fHx8fHx8fHx8fHx8fHx8fHx8e3x8fHx8e3t7e3t7e3x8fHx8fHt7e3t7e4aJiYiFhYOBgoKCgoOCgYKCgoKCgoKBgYGAgICAgICAgIGBgYCAfnx8fHx8fHx8fHx9fX18fHjF1NLS0tLUk3t9fX19fYSMi4uLi454KSkqKiopKz0/Pj4+Pj5tgH5+f397pdfT09PT1r2GiYmJiYqCRT4/Pz8/QDAqKysrKiVikoyMjY2OiX5/f39/f359fHx8fHx8fHx8fHx8fHx8fHx7fHx8fHx8fHx8fHt7e3t7hIuHh4aHgoGDg4GCgoKCgoKCgoKCgoGBgYCAgICAgICAgYCBgIB+fHx8fHx8fHx9fXx8fH19eNXn5OTk5OeZe39/f39+hpCPj4+Pk3kZGhoaGhocMTMzMzMzMmqCf4CAgHut6eTk5OToyomMjIyMjYM6MjMzMzM0IRobGxsbFF2Wj4+QkJCLf39/f39/f319fXx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx7e3uCjYeIh4eDgoSCgYKCgoKCgoOCgoKCgYGBgICAgICAgICAgICAgH58fHx8fHx8fXx8fH19fX12fn9/f39/f3l3d3d3d3d4eXl5enl7eG5vb29wcHBycnJycnJyd3p5eXp6en6Dg4ODg4SBfHx8fHx8fHZ1dXV1dXV0c3Nzc3NzeX19fX19fX18fX19fX19fX19fX18fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx7e4CMhomHh4SDhIKCgoKDgYKCg4KCgoGBgYGBgYCAf4CAgICAgICAfnx8fHx8fHx8fX19fX19fXZ0dHR0dHd0dnd6e3h7eHd2d3p4e3p5fXl4eHl4eHh5eXl5enp5eXl5enp6eXh4eXl5eXl7e3t7e3t7fHx8fHx8fHx9fX19fX18e3t7e3t8fHx8fHx9fX19fX19fX18fH19fX18fHx8fHx8fHx8fHx8fHx8fHx8fHx8f4uHi4qIhIODgoKCg4KBgoKDgoKCgYGBgYGAgIGAf4CAgH+AgYF+fX18fHx8fHx9fX19fX19d3d3dnZ3fXh3d316eH14d3d4fXp9ent9e3d3d3d3eHh4eHh5eXl5eXp6ent7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7fHx8fHx8fHx8fHx8fHx9fX19fX19fX19fX19fX19fX19fHx8fHx8fHx7e3x8fHx8fHx8fHx+iomMjImFg4SEgoKDgoGCgoKCgoKBgYGBgYCAgICAgICAf4CAgH19fXx8fH19fX19fX19fX13d3d3d3p9eHt4fHx3e3h3d3d8en18fX58d3h4eHh4eHh4eHh5eXl6enp6e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3x8fHx8fHx8fHx8fHx8fHx8fX19fXx9fX19fX19fX19fX19fHx8fHx8fHt7fHx8fHx8fHx8fH2Kio2NioWDg4SCgoKCgYGCgoKBgoGBgYKBgIGBgICAgIB/gIGAfXx9fX18fX19fX19fX19fXd3d3d3fX55d3d4e3p7eHd3d3x6ent9fnx4eHh4eHh4eHh4eXl5enp6ent7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3x8fHt8fHx8fHx8fHx8fHx8fH19fX18fH18fH18fHx8fX19fX18fHx8fHx8fHx8fHx8fHx8fHx8foqJjo2JhISEg4KCgoKBgYKBgoKCgYGBgoGAgYKAgICAgH+BgIB8fH19fX18fX19fX19fn5+d3d3d3d5fHl7eHx9eXt5enp4e3l8fXx+e3h4eHh4eHh4eXl5eXp6enp7e3t7e3t7e3t7e3t7e3t7e3t7e3x8fHt7fHx7fHx8fHx8fHx8fXx8fX19fX19fXx8fHx8fHx8fXx9fX19fXx8fHx8fHx8fHx8fHx8fHx8fHx/iIeNioeFhoaDg4ODgoGBgoGCgoGBgYGCgYCAgoF/gICAf4CAgHx8fX19fX19fX19fX5+fn53d3d3d3Z4eHl3eXp4enh5eXh5eHp7eXx4eHh5eXh4eHh5eXl5enp7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t8fHx8fHx8fHx9fX19fX19fX19fX19fX18fH18fH19fX19fH19fX19fHx8fHx8fHx8fHx8fX+HiIyIhoeHhIKDhISCgYKBgYKCgoGBgYKBgIGBgYGAgIB/gIGAfHx9fX19fX19fX1+fn5+fnd3d3d3d3d3d3d3eHh4eHh4eHh4eHl5eHl5eXl5eXl5eXl6enp6ent7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7fHx8fHx8fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fHx8fHx8fX19fHx8gIeIi4eHiYaDg4SDg4KBgYGCgoGBgYKCgYGBgIGBgYCAgICBgX97fH19fX19fX19fn5+fn5+d3d3d3d3d3d4eHd4dnl5eHh4eHh5eXl5eXl5eXl5eXl5enp6enp6e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7fHx7fHx8fHx8fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fHx8fH19fXx9fXyBhoqKiYmIhIOFhISCgoGBgYGCgYGCgoGBgYCAgYGAgIGAgIGBf3x8fX19fX1+fn5+fn5+f394eHd4eHh4eHZxZGpeam15eXl4eHl5eXl5eXl5enp6enp6enp6enp7e3t8e3x8fHt7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3x8fHx9fHx8fH19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fIGFiYqJioeEhYWEg4KCgYGBgoKBgYKBgYGBgYCBgYCAgYCBgIF+fH1+fn5+fn5+fn5+fn9/f3h4eHh4eHh5bWRiZV9fXm95eXl5eXl5eXl5eXp6enp6enp6enp6e3t7e3t7fHx8fHx8fHt7e3t7e3t7e3t7e3t7e3t7e3t7e3t7fHx8fHx9fHx8fH19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18goWKiomJhISGhYSDg4KBgYKCgoGBgoGBgYKBgIGBgICAgICBgH58fX5+fn5+fn5+fn9/f39/eHh4eHh4eW5kZWdlZGJeZnh5eXl5enp6enp6enp6enp6enp6e3t7e3t7e3x8fHx8fHt8fHt7e3t7e3t7e3t7e3t7e3t7e3t7fHx8fHx8fHx8fHx9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXyChouJiIqEhYaEg4OEgoGBgYGCgYKCgYGBgYCAgYGBgIB/gIGBf3x8fn5+fn5+fn9/f39/f394eHh4eHl3Z2VkZWZkZWFfaXl6enp6enp6enp6enp6ent7e3t7e3t7e3t7e3t8fHx7e3t7e3t7e3t7e3t7e3t7e3t7e3t7fHt8fHx8fHx8fHx9fX19fX19fX19fX19fXx9fX19fX19fX19fX19fX19fX19fX19fX19fIKGi4eJh4SEhoSDg4WBgYGBgYKCgYGBgYKBgICAgYGAgYCAgYF+fHx/f35/f39/f39/f39/gHl5eXl5eWtlYWJlZWFlZV5ieHdze3p6enp6enp6enp6e3t7e3t7e3t7e3t7fHt7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t8fHx8fHx8fH18fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19g4aLhoiFhYaEgoOEhIKBgYGBgoKBgYKBgYGAgYGBgYGAgIGBgn98fH9/f39/f39/f3+AgICAeXl5eXl0Y2NlZGNmY2doZGZsZF5ze3p6enp6enp6enp6ent7e3t7e3t8fHx7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3x8fHx8fHx8fH19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX1+fn6DhouGhoaGhYODg4SDgYGBgYGCgoGBgYKBgYCAgYGBgYCAgYGBfnx8f39/f39/gICAgICAgIB5eXl6d2RhY2diYmRdW2VfYV1eYGFoeHp6enp6enp6enp6e3t7e3t7fHx8e3x7e3t7e3t7e3t7e3t7e3t7e3t7e3t8fHx8fHx8fHx8fH19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX1+fn5+fn5+foSFi4eGhoaGhIODg4KBgYGBgoKCgYKBgoGAgIGBgYGAgYGBgYF+fX1/gH+AgICAgICAgICAgHl5eW9vYmJiZF5jZ19dYWFgXF9kYlttfHp6enp6enp6enp7e3t7fHx8e3t7e3t7e3t7e3t7e3t7e3t7fHx7e3x7fHx8fHx8fHx8fH19fH19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX5+fn5+fn5+fn5/hIiLhoSHhoaEhIODgoGBgYGCgYGBgYKCgYCAgYGBgYGBgYGBgX5+fYCAgICAgICAgICAgICBeXpwXWJlZGJkXmZnZ2BZYmJhY2VfXF1ze3t6enp7e3t7e3t8fHx8fHx8fHt7e3t7e3t7e3t7e3t7fHx8fHx8e3x8fHx8fHx8fHx8fHx9fX19fX19fX19fX19fX19fX19fX19fX19fX19fn19fn5+fn5+fn5+fn5+foCFjIqEhYaGhYODg4SCgYGBgYKBgYGBgoKCgYCBgYGCgICAgIGBf35+gICAgICAgICAgIGBgYF5emxiZGdjYmdmYWBgZGFiZWRjZGNeXGJ1fHt7e3t7e3t7e3x8fHx7e3x8fHx7e3t7e3t7e3t7e3x8fHx8fHx8fHx8fHx8fHx8fHx8fH19fX19fX19fX19fX19fX19fX19fX19fX1+fn5+fn5+fn5+fn5+fn5+fn9/gYeMiYWGhoeFg4SDgoGBgYGBgYKBgoKCg4KBgIGBgYKBgYGCgoF/f36AgICAgICAgIGBgYGBgXp7dGdnZmZkZGZmYF5fYWNlaGRlXmJkYHR8e3t7e3t7fHx8fHx8fHx8fHt7fHt8fHt7e3t7fHx8fHx8fHx8fHx8fHx8fHx8fHx8fH19fH19fX19fX19fX19fX19fX19fX19fX19fX5+fn5+fn5+fn5+fn9/f39/f3+CiYqIhoaIhoWDhIOCgYGBgYGBgoGBgoKCgoGAgYGBgoKBgYKCgX9/f4GBgYGAgYGBgYGBgYGBenptaGNjZ2ZnZWdmZmdiZWRlYmdbYmVgdnx8e3t8fHx8fHx8fHx8e3t8fHx8e3x8fHt7fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx9fXx9fX19fX19fX19fX19fX19fX19fX19fn5+fn5+fn5+fn5+f39/f39/f39/f4SJioiGiYeFhYSEg4KBgYGBgYGCgYKCgYGBgYGBgYKBgoGBgICBgH9/gYGBgYGBgYGBgYGBgYF7emlpZGNqZmFgZmVjY2NnaWRjYmBiZGJ0fXx8fHx8fHt8fHx8fHx8e3x8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fH19fX19fX19fX19fn5+fn5+fn5+fn5+fn5+fn5/f39+fn9/f39/f39/f3+AhIqMiIeJhoSFhYOCgYGBgYGBgYKBgoGBgYGBgYGBgoKBgYGBgYGAgH+BgYGBgYGBgYGBgYGBgXZzZWRnY2RmZWJlZmdkZmhmZWNgYGNkYHF9fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fXx8fX18fHx9fX19fX19fX19fX19fn5+fn5+fn5+fn5+fn5/fn5+f35+f39/f39/f3+AgICFioyJiIqJhoaDgoKCgYGBgYGBgoGBgoGBgYGBgIGBgYGBgYGCgX+Af35/foCCgoKCgoKCgoKCc3NnZWRkZWlqaGZnZ2NhZmZlZmdmZWVjdX18fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fX19fX19fH19fX19fX1+fn5+fn5+fn5+fn5+fn5+fn5+f39/f39/f39/f39/gICAgICAgIWLioqJioeHhoSCgoGBgYGBgYKCgYKBgYGBgIGBgoKBgYGBgYGAf4B+dHRzdX1/goCAfn5/gYB0cmdkZWNmaWppZWNlY2BmZGRnZ2JiZWFwfXx8fHx8fHx8fHx8fHx8fHx9fX18fHx8fHx8fHx8fHx8fHx9fX19fX19fX19fX19fX19fX19fX1+fn5+fn5+fn5+fn5+fn9/f39/f39/f39/f39/f39/f4CAgICAgIB/houLiouLh4eHhIOCgYGBgYGBgYKBgoKBgYGBgYKCgYCBgYGBgoCAgH5zc3NzdHV4dXV0dHV2dXVwZmNmZWhoaWdoZ2VmZWJfZGVmY2BiZ3d8fHx8fX19fX18fHx8fH19fX19fX19fXx9fXx8fX19fX19fX19fX19fX19fX19fX19fX19fn5+fn5+fn5+fn5+fn5+fn5+f39/f39/f39/f39/gIB/f3+AgICAgICAgICHjIyIi4qHh4eEhIKBgYGBgYGBgoGCgoGBgICBgoGBgYKBgoKCgYCAfnNzc3Nzc3NzdHR0dHNzdW9jY2FnZWhoZ2pmZGVnZmhmY2JlYl5ieX18e3t8fX19fX18fHx9fX19fX19e3x9fX19fX19fX19fX19fX19fX19fX5+fn5+fn5+fn5+fn5+fn9/fn5+fn5+fn5/f39/f4CAgH9/gICBgICAgICAgYCAf4CAgYGAgIeLi4iNiYiJhoSFgYGBgYGBgYKCgYKCgYGBgIGCgoGBgYKBgoKBgIB+dHNzc3Nzc3Nzc3Nzc3N1cmdlZWRlamhoZ2ZpaGdjZWViZGNoZGd7eHVzc3R2dnl4dnR0dHZ3d3d2dHR0dXV4d3h4d3d6e3x9fXx9fn5+fn5+fn5+fn5+fn5+fn5+fn5/f39/f39/f35/f39/gH9+fHt7fX58eXl2dnZ5fHx6end2d3l7fXt4hIyMioyHh4iEhYSBgYGBgYGBgoGBgoGBgYGAgYKCgYGBgoGBgoGAgH51c3Nzc3Nzc3Nzc3Nzc3VzaGVnaGVrbGhqZ2lqZ2dnZmRkYmVkbnV0dHNzdHNzc3Nzc3Nzc3Nzc3NzdHNzc3Nzc3Nzc3N0dHV1c3V3eHl7fn59fn98f39/f39/f39/f314fH5+fXx4dXZ3eXd4dnRzc3N0dXRzc3Nzc3NzdHNzc3R0c3R0dHODjI2KiYeIhoOGg4GBgYGBgYGBgYGCgYGAgYGDgoKBgYCBgYGBgICAf3VzdHRzc3Nzc3Nyc3NzdnZpY2hqaGpsZWZpbGhgZmVkY2BkZGZ0dXV1dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHRzdHRzc3Nzc3R2dnV1d3V4fH9+fX9+fHp4dXN0dXV1dHNzc3Nzc3N0dHR0dHR0dHR1dXR0dHV1dHR1dXR1dXV1dIaMjYuIhoeEhIWCgYGBgYGBgYGCgoGAgYCBgYKCgoGBgIGBgYGAgIB/dnNzc3Nzc3Nzc3Nzc3N2dnNnZ2pmaGdmaGhmZGlnY2NnZWVmcHZ1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dHR1dHR0dHR0dHRzdHR0dnV1d3Z0c3R0dHR0dHR0dXV1dXV0dXV1dXV1dXV0dHNzc3N0dHNzdHR0dHR1dXR1iY6MjIqHh4SEhYKBgYGBgYGBgYKCgoGBgICAgoKCgoGBgYGBgYCAgH93c3Nzc3NycnJyc3NzcnZ2dW5kXWNnZWlraGVoZ2dqamlnZXB2dXV1dXV0dHRzdHR0dHR0dHV1dXV1dXV0dHV1dHR1dXV1dXV1dXV1dXR0dHV1dXV1dXV0dHV0dHV1dXV1dXV1dXV1dXV1dXV1dXV0dHNzc3Nzc3N0dHNzc3Nzc3R0dHR0dHWKjoyMiYaGhIeFgoGBgYGBgYGBgoKBgYGAgYGCgYKBgYGBgYKBgYCAf3hzc3Nzc3JycnJyc3NzdnZ3d2liaGhnamtpaGZkZGVmaWhwdXR0dHRzc3JxcnJ0dXV0dHR0dHR0c3NycXFxcXNzdHR0dHR0dHR0dHV0cnJyc3R0dHR0dXV1dXV1dXR0dXR0dHR0dHR0dHR0dHR0c3Nzc3Nzc3Nzc3Nzc3N0dHN0dHR0dHR0dYuOjImGhYWFh4SCgYGBgYGBgYGBgoKCgYGAgIKCgoGBgYGBgYGBgIB/eXNzc3NycXJycnJzc3N3d3d3bGpoZGhpa3Z6a2VmZWhnbXJzdHN0c3JwcHBxcnN1dXR0c3Nzc3JycXBvb29vcHFzc3NycnJyc3R0dHNxcHFyc3R0dHR0dHRzc3Rzc3NzdHR0dHRzdHR0dHR0dHRzdHR0c3NycnFxcnJzc3Nyc3NzdHR0dHN2jZCMh4eFhYSEgoGCgoGBgYGBgYGCgoKBgYGAgYGCgoGBgoKBgYGAf395c3NycnFxcnJycnNzc3d3d3dzc2pnaWloeX99cW51bG5wcXJycnFxcG9wcXFxc3Rzc3RycXFwcG9ubm1ubW5ubnBxcnJycnJycnJzcXBvb3BxcnJzc3JxcnJycnJycnJycnJzc3Jzc3Nzc3Nzc3Nzc3Jxb29ubm9vcXJzc3Jyc3NycnNzcnaPj4uHhoWFhYOCgoKBgYGBgYGBgYGBgoGBgYGCgoKBgoGCgYGCgX9/f3hxcHBwcXFycnJyc3Nzd3d2dnd2cnF0c252f352c3hwcHBycnJycXFwcHFxcXJzc3Nzc3JwcXNwb25ubm5ub25vcHBxcXFxcXBwcXJwb25vcHFxcXFxcHBxcXFxcXJycnJycnJycnFxcnFxcnJycnFwb29ubm1ubW5vcXJycnJycnJyc3JxeI+OjYaDg4aEgoOCgoGCgYGBgYKBgYGCgYGBgYKCgoKCgoKBgYKBf4B/d29wb3BxcnJyc3Nzc3J2dnZ2dnZ3dnZ1c3l/fnd3d29wcXFxcXFxcHBwcXJycnNxdHNycW+GhG5wb29vb29vb29wb3Bvb29vcHBxb29vcHBwcHBvcG9wcHFycXFxcnJycnFxcXFxcXFxcHBwcHBxb29ubm5tbW5tbm9wcXFxcXFxcXFxcXB7j42NhoODhYOCgoKCgYKBgYGBgoGCgYGCgoGCg4KBg4KBgYGAgYF/f392bm9wcHBxcXFxcXBwcHZ2dnZ2dXR0c3NxfYB9fX9zb3BxcXFwcHBwcXFwcXFxeINxcnJwd51/bnBwb29wcG9vb29vb29vb3BxcXBub3Bwb29wb29wcnJycnFxcXBxcnFwcXFxcHBwcHBwcHBwb29ubm1ubm5ubm9ub3BwcHFxcXFxcXFxcIKRjoqEhIOFhIOCgoGBgoKBgYKBgYGBgYGCgoKCgoKCgYGBgYCBgX9/gHVvb29wcXFxcXBwcHBwdnZ2dXRzcnJycnGAgoCBeXBwcHBvcHBwcHFxcXFxcXF2oYhwcnCPoX1vcHBwb3BxcHBvb29wb29vcXFwcG9wcG9vb25vcHFxcHBwb3Bvb3BwcHBwcHBwcHBvb29vb29vbm5tbW1ubm5ub25vb3BvcHBwcHBwcHBwiZCMiISDhIaDg4KCgYGCgoKCgYGBgYCAgYGBgoKBgYGBgYGBgIGBgH+AdG5vb3BxcXFwcG9vcG92dnVzcnFxcXFxcICDg39ycHBwcHBwcHBwcHFxcHBxcm+Vqn9wd6ChfW9wcHFwcHBwcHBwcHBvcHBxcXBwcHFxb29vbm9wcHBvb29vcHBvb3BwcHBwcHBwcHBvb29vbm5ubm5ubW5ubm1ubm9wcG9vb29vb3BzcXWPj4uJg4KFh4ODgoKBgoGCgoKBgYKBgYGBgYGBgYGBgYCAgYGAgYGAf4B0b29vbm9vb29vb29vb3Z1dHNxcXFxcXJygIKCgXRxcXFxcXFxcXFxcXFxcXFycI+xnnCBpaF9cHFxcXFwcHBwcHFxcXBxcHBwcXBwcHBwcHBwcHBwcHBwcHFxcXBxcHBwcHFwcHFxcHFxcXFxcXJxcnFwcnRycnR0dHR1dnRzdHR0dXd3gpCPi4iDgoaHhISCg4GBgYKCgoGBgoGBgYKBgYGBgYGAgICBgYCBgYB/gHVvb29vb29vb25vb29vdXRzcnJycnJycnKDg4OCdnFycnFxcXJxcnJxcXJycnJwjLaqkZuypnpxcXFycXFxcXFxcXFxcXFwcXFxcXFxcnNzcnJyc3V1dHR0dHR0dHV2d3d3d3d3eHh4eHd3eHh4d3Z3dnV2dnZ2d3h6e3x7e3t6enp6enyGkI2LiIODiIeHhYODgoGCgYKBgYGBgYKCgoGBgYGAgYCAgYGAgIGBgH+Ad3FxcXFxcG5ucG9wcG92dHV1c3Nzc3NzdYiDgoN5cnNzcnJyc3Jyc3Nzc3Nzc3Wgp6OzqKaleHRzc3Nyc3N0dHV1dXV1dHV3eHd3d3d4eHh3eHh4eXl5eXl4eHl5eXp6e3t7e3t6enp5eXh3d3d1dnV2dnd5enp7fn5+fX1+fn5/f35+gIyQi4qHg4WIi4iEg4SDgYGCgYGBgoGBgoKCgoKAgYGBgYCBgYGAgIGAf4B8enp5eXx5eHh2dXZ2dHl2d3h3d3Z3dnZ6fnx+fnx2dnd3dnV4enh4eHh4d3h4gqifo7Gjm6SPenl6eXh4eXl6enl5eXh4enp5eXh4eHh3dnd3eHh3eHh5eXp7e3p8fH1+fX9/f359e3t7e3p5enl5e3t/foB/fn5/fn19fX5+f35+fn6AjpCNioeEhoqLiIaGhIOBgoKBgYGCgYGCgoKCgoCBgoKBgYGCgYCBgIF/f4B/fn19fX9/f318e3t7eXh4eHh5eXl4eXh5eXl4enp6enp6e3t7fH1+fXx7fHyPo5GTpZygoZZ7e3l4eXh4ent6enp5eXp8fHt6enx8fHp6ent9fHx+fn+AgoGAgYKAgH9/gYGBgIB/f35+fn5/fX1+f4CAf35+f39+fn9/f39/gH+Af4OQjoyHhoWIi4yIh4aFg4GCgYGBgYKBgoKCgoKBgYKDgoGBgYGBgIGBgIB/goOCgoGBgX99f39/f4F6enh4d3h4eHh5eHh5enp5e358enx9fXt8fX19fX19fY6gmJaZnJaQmYJ/f319fYCDgoCAf318fXx9fXt9fXx8fH19fX1+gYGChISDgoB/gYGBgH9/f4B/f39/f39+fn9/f39/f35+f3+Af39/gICAf4CAgICAhJCPi4eGhoiLi4mKhYaDgoKCgYGBgoGCgYKBgYGBgoOCgYCAgYGAgIGBgH+ChIKCgICAgH9+fn+AgH9/fn18fX19fYB/fX+Af35/gH9/fn9/gICBgICBgIGAj7GqpZ+hn6Ghg36BgH5/f39+f4B/fn5+f39/gYB/f4CBgYCAgYOEgoGCgoGCgH+AgYCBgYGAgH+BgICAf39/gICAgYGBgIGBgYCAgICBgoGBgYCAgYGFjo6MiYaHiYyLi4qGhoOCgoKBgYGCgoOCgoKBgIGBgYKCgICBgYCAgYGAf4KFg4KBgYCAf39+fn+AfX5+fn19fX5/fn9/f35+fn+AgYCAgICAfn9/f4CBgIOkrqGnoaCgqKyehX59foB/fn5/f35/gIGBgoKDg4KCg4KBgYKDg4OCgYGBgYKBgoKCgYKBgoGBgYGBgoKCgYGCgYKCgoGBgoKBgYKCgoKCgYGBgoKCgoaPkY+KiImKjY6MiYaFgoKCgoKBgYKCg4KCgoGBgYGBgYF/gIGBgYCBgIF/gYWEg4KCgoGCgYCAgIB8fHx7fH18fH9+fn9+fn5+f35+f39/f39/gH5/gIWPp7GknKehoKCio6upnIyCgIB/gIF/f39/f3+BgYGCgoCAgYKDg4SDg4ODgoKCgoKCgoKCgoKCgoGCgoKDg4OCg4ODgoKCgYKCgoODg4ODgoKCgoODg4KCh5KTkIuKi4uPj42Lh4SCgoKCgYGBgoKDgoKBgYGBgIGBgICAgYGBgIGAgYCAg4SDg4OEg4ODgoKCgXx9fHx9gn1+f4GCiIGCgoSCgYGDg4GBgYKDgoaLm6mqo52aop2foaCen6KloZWGgYCAgICAgH9/f3+AgICAgH9/gYODhYSEg4SDgoKCg4OCgoOCgoODg4ODg4SDg4KEhYWDg4SEgoKDhIOCg4ODg4OCgoODgoCKlJOPioqMjpGPjYuGg4KCgoKBgYGBgoOCgYGBgIGBgoGBgICBgYGAgYCAgH+BgoODg4SEhIOCgoKCfXx8fn6AgYOAg4OChIaFhoaFhIWFg4ODg4OChIeQmJiWl5mcjJSfnZucmpSMiISDg4KDg4ODgoGAgIKCgYOCgYKCg4OEhYWEg4OChISEhIOEhISDg4OEg4ODg4OEg4SDhIWEhISDg4ODgoKCgoKCgoKBgYKCgo+UlI+Njo6RkY6KiISCgoKCgYGBgYGCg4GBgIGBgYGBgYCBgIGBgYCBgICAgIKChIKChIOCg4ODgoJ9fX2AgH+AgoGDg4ODhIaEhIOEhYWDg4GBg4OCgYGEho6Wl5WHj5qclo6Jh4aHh4eGhoeHhoaEgoGCg4SDg4ODg4ODhISFhYWDhYSFhISEg4KBg4OCg4SEg4KCg4SCg4ODg4OCgoKCgoKCg4OEhIOFhYWFhoaIk5OTkI+PkJKRjIqIgoKCgoKBgYGBgYKDgoKBgIGBgYGBgICAgYGBgICAgICAhISEgoKCgoGBgoKBgX+AgYOCgICAf4CCgoGDg4KCgYODg4SDg4GDhYSCgYKBgYiSl46UmpOGh4eIiIiHh4eIiIiFhIOBgIGBgoKCg4GCg4SEhYSDg4OEg4OEhIOBgYGCg4OEhISDg4ODg4OEhIODgoSDg4ODhIWFhoeHh4eIiIiJiY6TkpKOj46Rko+LiYeCgoKCgoKBgYGBgoKCgoGBgIGBgYGAgICAgYGAgIGAgICDg4KCgYKCgYGAf4CBhYWFhoOCgYB+fn+BgoSCgYKDhIOCg4ODg4KChISDhISCgoKHkpaKhISDg4WFhYOEhIWFg4KBgH9/gIB/gIGEg4OEhYWEgoKCgoOCg4OFhIKDhISEhYaGhoaGhoWFhoeHhYaIh4aHiIeGhoaIiYeGhYaGhoeIkZKSkI6QjpGRjImHhYGBgoKCgoGBgYGBgoOBgYGBgYGBgICAgICBgYCAgICAgISEg4KBgoGAgYGAgYKIh4aHhYSCgH99fX6AgH+AgYGBgYGBgoGAgYKDgYKCgoKCgoGIkYKDg4GCgICAf4GAgICAgH9+gIGBgYKCg4OEg4OEg4OCgoGBgoODg4SEg4SEhIOFhYaFh4eIh4eHh4eHh4eGhoaGh4WFhYaGhISEhIWEhYaSk5GOjo+OkI6JiIeEgoKCgoKCgoGBgIGCgoKCgoKCgYGBgYGAgYGBgICAgYGAgoSDg4KDgoGCgYKDg4iHh4iHhYSCgX5+gICAfn5/f4CBgYGCgoCBhI2DgH+AgICAgIiRgIGCg4OAf39/gICAgICAgICDg4KDg4ODgoOBgYKCgoOCgYKCgoOCgoSDhISDg4SEhYWFhYaGhoaFhISEhYWEhIWFhYSEhISDhISEhISEipSTkpCQj46NiIaFhIOBgYKCgoKCgYGAgYKCgoKBgoKBgYCBgYCBgYGAgICAgYGAg4OCgoOCgoKBgoOCiImJiYiHhYSDgYKEhIOBgoKCg4SCgoSEgoOJloiEgoSCgn+AjJaCgoGChIOBgYGCgoODgoGDg4SDg4SEg4OCg4KDg4ODg4KCgoKCgoGDhISEhYSFhYWFhIWEhIWFhYWDg4OEhISEhYWFhISEhISEg4ODg4OOlZKQkZGPjYyHhYODg4GBgoKCgoKBgYCBgoOCgYCCgYGBgICAgIGBgYCAgICBgICDhYSEhIODg4SDhIOGh4mIhoWDhIODg4WDgYCDgoWFhISDg4OChI6YioOFhISEgoCSmoaCgoKEg4OCg4GBhIWEg4ODgoKDhISDg4ODg4SFhISDg4KCgoKCgoSEhYSFhYWFhYODhYWFhYaFhoWEhIWEhYWGhYWFhIWEhISDhIODhJGUk5KTj4yMioWEg4ODgYGCg4KCgoKBgYGCg4KBgYKBgYGBgICBgIGBgH+AgIGAgYaGhoaGhoaHh4aGhYSDhYaCgIGBgYGHgoB+f4GBj4yDgX9+fXx9i5yNgIKBgYKChpSTjIGCgYKDg4GBgYKDhYODg4KDg4OEgoKEhIOEhIWEg4OCgoKCgYKCg4ODg4SFhYWFhIOEhYWGhYWEhISEhIOEhIWFhYWFhIODhIOEg4KGlJSSlJKPjYyIg4SEg4KBgoODgoKDg4GBgoKBgoKCgYGCgYGBgYCAgYGAgICAgICAhYWFhYaGh4aGhoWGg4ODg4GAgoKCgYKAf35/f4GVl4mAfX19fXuBl4uAg4GBgYCPk4yQgYKBgoKBgYKDgoODgoOCgoKCg4OBg4SDg4ODg4OEhIKCgoKDgoKDg4ODhIWEhISEg4OEhIODg4OEhIODg4ODg4SDg4ODg4KDg4KDgouUk5KTko2NioaDhIOEgYGCg4ODg4ODgoGBgoGCgoKCgoKBgYGBgICBgYCAf4CAgICDhISFhYSFhYWEhIWCg4KDgoKDg4OBgICAgICAgJWfin5+gH2Hin2EhYOEgoODgo6JhYyCgoOCgoKCg4ODgoODg4KCgoODgoKDg4KCg4KDg4WEg4ODg4SDg4SEhISEhYWEhIWEg4SEg4OEhISEhISEg4SEhYSDg4SEhIODgoKDkJSTkpKPi4yIhoSFg4OBgYKDg4ODg4OCgYGCgoKCgoKDgoCBgoGAgICAgIB/gICAgISDhYWEhYWFhYSFhYOEhIWDg4SEhIKCgoOCgoSBkaGKf4yFfYaJgH6FhYWEhYJ/fn19f4KEg4ODg4OEg4ODhISEg4OEhISEg4SEhIOEg4OFhoWFhYSFhYWFhYSFhoWGhoWFhYWFhYWFhYWGhoWGhoaFhoaGh4aFhYWFg4SEhIeTk5OSkoyLiIWGhYWCgoGBgoODg4OCg4KBgYKDg4ODgoKBgIGAgICAgICAgH+AgICAhYWFhYWGh4eGhYWFhISFhYSEhISEg4ODg4OEhYOKkYOEi4WCgYF+fYGHhoOAfn5/fn9+f4OEg4OEhISEhISEhISEhISFhYWEhYSGhYWGhYaGhoWGhYWGhYWHhoaGhoaFhIWFhYWFhIWGhoaHhoaGhoaHh4iIiIaFhYaEhYWGjZSTkpGQi4qHhoeGhIGCgYKDg4ODg4KDgoGBgoODg4KAgYGBgICAgICAgICAf4CAgICHh4eGhoeHiIeHhoaEg4ODhIODg4OEg4ODg4OEhISEgYKCgYmBf359foWCf39/f39/f36AgISFhIWGhoaFhYWFhoeHhoaFhoWFhoeHh4iHh4eGhoaHhoeGhoeHh4aGhYSDhIWFhoSFhYaGhoeHhoaGhoeHh4eIiIeGh4aHh4eRlJORkZCLiYiFhoSDgoKBgoODg4ODgoKDgoKCgoOCgYCBgICBgICAgIGAgIB/gICAf4aHiIeHh4eIiYmIiIODgoKDgoSEhIWEg4KCg4OEhIOBgICAhIR/fn5/gH9/f39/gIB/f4B/f4WFhoiIiIeHh4eIh4iHiIiIhoaHiImJiYmIh4aHh4eJiIeHh4eHhoeFhIOEhYaFhYWFhoaGh4eFhoeGh4aGh4eHh4eHh4eFh5OTkY+RkIuHhoWGg4KCgYGCg4ODg4ODgoKCgoGCg4KCgIGBgYCAgICAgICAf3+AgYB/hoiIiIiHh4iJiYmIg4KCg4ODhIWHh4aFg4OFhISDg4GAgIGMiYGAgYKCgYGBgYB/gH9/fnt6gIaHiIqKiYmJiImJiYmKi4qIiIiJiYqLioqIiIeIiIiHiIiIh4iGh4aEg4OFh4eHhoWFhISDhYWEhYWGhISEhYWFhoaGhYOJlJOQj5COioaEhoWDgYGCgoKDg4ODgoKCgoKCgoKCgYGBgYGBgYCAgICAgIB/gICBgH+GiYiIiYeIiImJiIiEgoKDg4KDhImKh4aEhIWEg4OCgICBhISCgoKCgoKCgH9+fX19fX59fHt8g4eJi4uKioqIiIqJiImLiomJiImIioqJi4mHhoaHh4WGiIiJiIaGh4SDgoSIiIiIh4WCgoGDg4KDg4SCgoKDgoGEg4SEgY6TkpCPj4uIhYSGhIKBgYGBgoODg4OCgoKCgoKCgoGBgYGBgIGAgICAgICAgH+AgIGAf4WIh4eHhoeIiIiHh4SCg4OCg4OFiYqJh4WHhYSFhYKAgYOEgoOCgoKDgX59fn5+fn5+fn1+fX19g4eJioqHh4WGh4eHh4iHiImHiIaIh4aJiYODhIOFhISFhYeIiIaFg4KCg4WHhoeGhoSCgoOEgoOEhIKBgoGBgYODhIOEkZKQjo+Oi4eFhoaEgoGAgYGDg4ODg4KCgoKCgoKCgYGBgIGBgYCAgIB/gIGAf39/gIB/hYaGhYaGhoeHiIeGgYKEhIOChYeIi4qGhIaEgoaGgoKEhIODg4OCgoF9fH1/gH9+fn59fH19fHl8g4aHh4SDgYODhIWFhYODhYSEhISEhIWEgoKCgoSEgYKDg4WGhYSCgYGCgoODhYSEhIWEhIaEg4SFg4KDgYKDg4SFhIeSkY+Nj4yJhoSFhIWCgYCBgYODg4ODgoKCgoKCgoKBgYGBgYGAgICAf4CAgYB/gICAgICDhIWEhIWFh4eHh4aAgYGFg4OEhYSHiIWCgIB/gX9/gYODg4ODgoJ/fX1/gICBf31+fn18fX17enp+hISEgoGBgIGBgoKBf36BgYGCgYOBgoGCgoKBg4OAf4CAgoOCgICAgICBgYGDgYGChIODhYSCg4SDgoKBgoSDhYWGi5ORj4+Pi4iFhYODhIGBgYGBgoODg4KCgoKCgoKCgoGBgYCBgYCBgH9/gIGBgICAgH+AgIKCg4OChIOEhYWGhn+BfoCBgICAgIGDgn9+fn5+fX+Cg4OCg4KDgn19fn+AgIGAfn19fX1+fXx6enqAgoKBf39/f35/f4B+fYB/f4CAgX+AgIF/f4CBgX59fX+AgX9/foCAgH+AgICAf4CCgICCgYGCgYGAgYGBgYKEg4aPkpCOj42Kh4eGg4ODgYGBgYGCg4ODgoKCgoKCgoOCgYGCgYGBgICAgH+AgICAgICAf39/gYKDhIGCgoOCg4SFgIB/fH19fn19foCAf31/fn1+gYODg4KCgYF/fX1+f4CAgH9+fX19fHt7e3p6enqAgH9/gH9+fn1+f35/gH9+f3+Af4CAf35+fn9/fn18fn+Af35+f3+Af39/f4B/f4B/f4CBf4B+f39/gH9+f4B/hZKSj46Pi4uHiYWEg4KCgYGBgYKDg4ODg4OCgoKDg4KAgYKBgYGAgICAf3+AgIB/gIF/f36BgYSEgYKBg4OCg4OBgH98fn9/fX6Af4B/foF/f4CBhIOCgYB/f359fn5/gICAfn19fXx7e3x6enl5eXuAgH+AgH9/fn5/foCAf35/f4CAgoB/fH5+f35+fXx/f4B/fn5/f4B/f35/f4CAfn5/f39+f35/f35+fn19fX2Fk5KOjIuKiImIhISEgoKCgYGBgoOCgoOCgoODg4ODgYCBgYGBgYCAf39/f4CAgICAgIB/foCBhIOCgYGDhISDhICBgICBgIGAgYKCgoGBgoCBg4ODgYGBgYCAfn19fn5+f359fX19fXx8fHt6eXl5eH6BgICBgYF/f4B/f4F/gICAgYGCgoB+gH5/fn5+foGAgoF/f39/gICAf4B/gYB+f3+Afn9/fn+Af31+fX17fIaTkoyLioeHioiGhoSDgoGBgYGCg4ODg4OCg4OCgoKBgICBgYGAgH9/f39/gICAgICAgH9+fn+BgYGAgISGh4aHgoODhYOBg4ODhYSEhISEg4ODhIKCgoKCgX9+fX19fn6AfX19fX19fX18e3p6eXl5eYCCgoKEg4CCg4GAgoGCgYGDgoODgYGCgIGAf4CBg4GEgoCAgYCBgYCAgYCCgn+BgIF/gIB/gICAfn9/fnx8ipOPiYmIiIiJiIaGhoSCgoGBgoKDg4ODg4KDg4KCgYCAgICBgYGAf39/f4CAgICAgIGBf359fn5/f39+g4aHh4iChYSFg4SFhIWGhoaGhoWGhYGBg4ODgoKAfX19fX19fn59fX19fX19fX18e3l5eXl4fIKDhIWCgYSDgoKDhYeCg4SDgYKCg4OCgoKCgYKFg4iFgoGCgYKDgYGBgYSDgoOCgoKCgYGBgIF/gIGAf36Ok4yHiIaIh4aGhYaGhIKDgoGCgoODg4ODg4OCgYGBgH+AgYCBgYB/f39/gICAgH+AgYB/fn19fX5+f36Ag4SHiISGhoaFhoaHh4aGh4iHh4eGf32AgIGCgX59fX19fX19fX19fX18fH5+fnx7eXh3eHl5gIKDf4ONhISEhISXl4ODhIF9foGCgoGCgYKBg4aIjIWDgoKBhIKDg4KDhYSEhYOCg4OCg4OCgoKCg4KCgpKQi4iIh4mHhoaEhoWFhISDgYKCg4ODg4ODgoGBgYCAgICBgIGBgH9/fn+AgYCAf4CAgH9/fn1+fn+Bf4CCgYWFhYeGh4eGh4eIhoeHh4eGh4V/fX18fX9+fX19fX19fX19fX19fXx7iJKCe3x6fIZ5eHl8gYF+iZaEg4OEhJSTgIGBf39/fn6Fi4B/gICEhpCJhYSCgoGFhYuDgYKFhYaGhIOFhYOEhIODhIOFhISIko+MiYiIiYeHh4WGhYSFhIKBgoKDg4ODg4OCgYGBgYB/gIGAgICAf39/f4CAgICAgYGBf39/f4CAgIGBgYGBg4OGh4aGh4aGiIeGhoaFhIOFhH59fHx8fX18fH19fX19fX19fX18fH+RlZaDe3qElHx4eXp7fICCg4GCgYOCgH59fn57iJF8fI6Wf31/f4KGioWDg4SCgYONiX99f4OEhYWDhYaFhIWFg4SFhYaEhI6Rj4yKioyJiImHhYWFg4ODgYGCgoKDhIODgoGBgICBgICAgYGAgIB/f3+AgIB/gICAgX5+f4GBgoKCgoODgoOCgoWGhISFhYSGhIOEg4KBgIKAfn19fHx9fHx8fH18fH18fX19fHx8e4uRl4x6e3yBenp6e3x5eX19foB/gH98e3t+fn2ClZF/hIh9fH5/goR8fIGChIKAf4eDfYKBf4KCgIODhISEhISChIOEhYGEkZGOi4yLjoqJiYWFhYODg4KBgoODgoKDg4KCgYGAgIGAgICAgICAgH+Af3+Af357gICBenyAgoKDhYODhIWFhYODg4SCgYKDgoOCgoGBgIB/gX5+fX19fHx8fHx8fHx8fHx8fHx9fHx8fn6Kgnt6e3p4ent7fH17fn1+f319fX19fICBgH2Gj4F9fYJ+f36Agnx8gH+CgIKAfn17ioJ9gH9+gYCAgYKAgoCAgIGAf4uUkIyMjo6NiIiHhYWEhIOCgoKCg4OCgoODgYGBgICAgICAgH9+fXx7fHx9f3+AgHx6gYF4e4CCgYOFhIOFhYaHhISAhpSIgIKBgYGBgH9/f39/fn5+gHx8fHx8fHx8fHx8fHx9fHx8fHx8fHl7e3t4eHl7enp8goCBfn+BfH5+f359gIKCgICAgX+CkYF/f4CAfoB+fn9+gIGBfXx9e319fXx9fHx9gH+AgH6Afn6BlJKNjY2Oj4qFhoaFhISFg4KDgoODg4OCgoGBgYGAgICBgICAf4CAf39/fXt6fICAgHh+gXd7gIF/goKCgoKEhoeGhn6IlYp+gIGAf4B/foB+f39/fn+Bfnx7e3x8fHx8fHx8fH59fHt8fHx8e3x8fHp6eXt8en2Fg4N/gYF+f35/gH6FgoF+gH9+foCFhoKAfn6Dhn99fX6AgIGAf39+fX19fX57fH1/f3+AfX9+f4yRjo2Nj46Nh4SGhoWEhISDg4OCg4ODg4KBgYGBgYCAgYGAgYGBgYGAgH9/f397en9/e3mAd3p/f31/f3+Af4KEhoaFf3+FgX5/gIB/gH5+f31/gIB/f4B/f319fHx9fn18fH19fX19fH58fXx7fXx8ent6fH19f4aEg4CAgX1+fX5/fYuEgYZ+fXx8f36CgX99fX19gXx7fXx+gYSDgYB+fn5+fXx+f399foB+f36Eko2NjI+Ni4qGhIaEhISDg4OCg4KDgoOCgYGBgYGAgYGBgYB/fXx8fH1+f39/f397e399d352eH59fH18fX5+gYGCg4B6fX18fn6Af35/f35/fn+AgH+AgH9/fn9+fn5+fn1+fn99fH59fn1+fHt8fHx6e3p9f4CAhIOCf35/fHx8fXx9gYN+jH58e3t9fn1+fn17e3t9fHt7e3uAhoSChIOCf4B+f4KCgn9/goJ/gIuQjY2MjYuKiISEhIOEg4ODgoKCgoKCgoKBgYGAgoGBgYKCf3+AgIB/fn18fH5/fn55fX52e3Z4fXx8fHt9fX6BgICAf31/f31+f39/foB/f39/f3+Af4GBgH99gH9/fn9+fn5/f3yCfn59fX17fH19fHp8fH6AgoGAgIB9fH18fHx8fH18fnt/fnt7e3x8fH18e3t7e3x8enp9en6CfoKEhIOBgoGFhoWFhoaHhYGEkY+Ni4qLh4iFgoOEhISEg4KCgYGCgoKBgoGBgYGBgoGBgoKAgYKBgYCAgH9+e3x+fnx6fnh5dnd8fHx7e318f4GAf35/foB/f35/f35/gH9/f3+Af39/gYKAfn6BgIB/f39/f39+fYN8fH19fH99fX19e3x+fn9/fn5/fnx9fXx8fHt+fnt8e3x8fXx9fH18fnx9fHt7e3x5e3x7e316fX5+f4CAg4eJiYmKiIuJhYiSj4yJioeFhYOCgoOEhIOCgoKBgYKBgYKBgYGBgYKCgoGCgoCAgX98e3p6eXt9enx+fnl8eXh4dHx8fHt8fHx/gH9/f39/gIB/fn5+fYCAgH9/f3+Af4CDgoB/gIGAgIB/f4CBf358enx9fX59fX5+jIZ9fX57e4ODfX5+fX18fX19fX19fH17fXx9fX58fn19fX18e3t7fHt7fHt6e3t6enp7fn6DhYiHiIqLi4qJjJGQjoqIhoWEgoKCgoODg4OBgYGBgYGBgYGBgYGCgoOCgYKBgIGBf3+Af356eHl5en5+e3l6eH5zfHx8e3x8fH5+fn5/gH+AgIB/fn9+gIF/f4B/gIGAgoSEgYCAgYGAgX+AgYKBf39+f31+f357foGSjHx9f4qAjYx+fn19fX5+fX59fHx8fn18fXx9fX1+fX1+fnx7e3t8fH18e3t7e3l6eXh5e35/g4OEh4mKh4mOkI6MiYmFhISCgYKCgoKCgoGCgoKBgYGCgYKCgoGCgoKBgoKAgYGAfoCAf39+e3p5e319eHx6f3KBfXt7fXx8fn59fYGCf4GBgX9/gH+AgX+AgIGCgYGFg4SCgYGCgYKCgICBg4KAf4F/fX6Afnx/f4mCf36DkYSEg4F/fn18jYd9fX59fXx+fnx9fXx9fX5+fX5/fX19e3x9fnx8e3x9enp5eXl5e3t+foCBg4eEiI+Oi4uHhYSEg4KBgoKCgoGBgYGCgoKBgoKCgoKCgoKCgoGCgn+AgIB+f39/fn5/ent5fX16enp9cX6Cent9fX19fXp4f4KAgYKCgICBgIGBgICBgoKCgoWFhIKCgYGBg4F/gIKEgX9+gYB9foF+fX5/gIB9fn+EgH5+f31+fX2KhX1+f31+fn9/fX19fH5+fn99f4B9fX18fX9/fHx7fH17e3t6enp7e3x9fn6Ag4CJjouMiIWFhYSDg4GCgoKCgYGBgoKBgoKCgoKCgoGBgoKBgYKCf4CAgH9/f39+fn59eXp6fXx5d3t0e4d8dHd9fn17e3Z2fYCBgoKBgYKCgoKBgYGDg4OChYaEg4GAgICDgX+AgYSBfn6Af35+gH59fn6AgH+Bf3+Af39/gH99f39/f3+Afn9/gH58fX18fn5+foF/gH2CgHx9gIB9e319fXx8fHx8e3t7fHt8fHx9fIqLiYiGhoWEhISDgYKBg4KAgIGCg4KCgoOCgoKCgoGCgoGBg4J/gIGAf39/fn5+fn57enp8fHt2e3R3f352cnt+fnt4dnd8gIGCgoKBgoODg4OCgoSDhIOFhoOCgX9/gIKAgICAg4F+foB/fX+AfX1+foCAf4J/gYGAgICBgH1/f3+AgICAgIB/fnx9fX19fn59g32AfoKAfX6AgX98fn59fX17fH58fXx8fHt8e3x9iYeHhYaIhYSFhIKCgoGDgYCAgoKDgoKCg4ODg4KBgYGBgYGCgH6AgYB/fn5+fn5+fn56e3p9goN9dXF6fHpxen59eXh0dICAgoKCg4KDhYOEg4KDhISEhISEgYGAgH6AgoB+fn6Bf35+f4B9foB9fX1+gH9/gYCBgYCAgIGBfn6Af4GAf4CAgH9+fX19fnx+fn19gYR/gH9+f4GBf31/f319fn1+fn1+fHt8enx7eoCIg4SEhYSEhISDgYKBgYKBgICCgoOCgoOEg4SDg4KBgYKBgYOAfoCBf35+fn5+fX5+fnt7en6Jh354cnl9f3F6eHt4eXV1fYKDgYODg4OFhIWDg4OEhIODhIOBgH+Af4CBfn1+fn9+fn5+gH19f3x9fX6Af4CAgIKAgIGAg4KAf4B+gIF+gIGAgH9+fn5+fX1/fn6FhYGBgH+Ag4F/foGAf35/foB/fn17ent6fHt6goWAg4KCgoKCg4GBgYCAgoGAgIKCg4KBg4SDhIKEgoGBgoGCgn9+gIF/fn1+fn5+fX59fXp7fIWEe3tzeXp8cHd1dnd5dXR6hISBhISDhIWFhoSDg4WEgoODgoCBf39/f4B9fX1+f31+f39/fn1/fH19foF/f4B/gIB/gICDgoGAf36AgH+AgYCBgH9/f39/f4CAgIGCgoKBf4GDgX9/g4J/f4B/gX+Af3x6e3p8e3yCgH+Cf3+AgIKCgYF/f3+CgH6BgoKDgYGDg4KEgoSCgYGBf4GCgH6AgH9/fX5+fX19fn19e3t6gH94fHZ5eXtxdHh3dnh1cnmFhYKEhIKEhYWGhISChIOBg4GAgIF/f4B/gHx9fX6AfX5/f39+fX98fn5+gX+Bf39+f4B/gYODg4B/f4GBgIKBgYGAgICAgICAgIGAgIKDgYF/gISAfYGDhICAgX+BgYKAfXp7e3x8fH9+f4B8f399fYGAgH59fX9/foKBgYKBgIKCgoKBg4KCgYB/gYKAfn9/fn99fX1+fX19fX19ent7fHZ9eXh5enJ1eXl2d3dzdYaFg4WEgoSEhYSEhIGDgoGDgX+AgX5/gH6AfX19foB+f4B+fn99f3x/f3+BgIF/f3x+gH6AgYKDgYCAgoOEgoGAgYB/gYCAgYGAgYGBg4OBgX+Ag4B+goOEgICCgYKChIJ+e3x8fHx8fX1+fXp+fX14fn9/fHx8fn5+gYCBgYCAgoGBgYGDgoGBf4CAgoB9fn19f319fX59fH19fX16e3p8dnx6d3t4cnZ5e3Z2dnN0hoSEhYSChISFg4ODgYOBgYOBgIGBfX+BfoF9fX1/f39/gH5+f359fYB/gIGBgX9+fH5/fn5/gYJ/gYGCg4eFgX9/fn6Af4CAgICAgIKCgYCAfoCCf3+BgoOBgYOCg4OFgn99fX18e3x8eXp7en55e3l4f357fHt+fX1/f4F/gH6BgICAgoOCgYF/gIGBf31+fH1+fX19fX18fn58fXx5e3x4enx3endzeHd6c3Z2c3SGhISGg4KDhISDgoKCg4GCgoGAgYF9gIB+gH1+fX5/gIB/f39/f3x+gH+BgIGAf359f39+fn+BgH2AgIGDg4N/f359fn5/f4B/gIB/gYKAgH9+gIF+f4CCgYCBg4KEhIaEgH59fHx8fHp5dnl5enl2eXZ+fHt7e358e399gH99fX9/f3+BgoGBgX5/gYF+fX18fX19fX19fXx+jYF8fXl7e3p5fHd4eHR1dXhyd3d0doaEhIWEg4ODg4OCgYKDgoGDgn+Bf35/fn+AfX19fH+AgIB/f39/fIB/f4GAgYCAf3yAf35+fn9/fX5+gYGCgn5/fn1+fn5+f3+Af32AgIB+fn1/gX5+gIKCf4KDgoOEh4SAgH58fXx8e3x1eHl4eHh5d3t8e3t7foV9fn1/ent+fn59foGAgIGAfX6BgH59fXx9fX19fX18e32Dgnx8ent7e3p7d3Z4dXJzdnB4eXJ4hYWFhYOEhIOChIKBgYKBgIKBgIF/fn5+foB+fX58foCAgH+AgIB8gH6AgH+BgIB/fYF/fn5/f319fX6AgYKBfn9+fn59fX5/fn9+fH6Af35+fn+Cfn6AgIF+gYOCg4OGhICBfnx9fHx7fHh3e3h1eXd3eXx6e3t9kod9fH13en1+fn19f35+gH98foB/fn19fH19fX19fHt8ent9enp4e3x6ent4dHh1cXJ0cHh4cXmEhYWFg4SDgoODgoGBgoKAgYGAgIB9fn5/gH18fn2AgIGAgICAgHx/f4B+f4GAf39+gX9+f39/fX18f4CAgIB+f35+f318fn9/f358fYB/fn1+gIJ/foCAf36ChIKCg4WFgoJ+fXx7e3x8eXd8eXd4d3d4e3t7e3yFiX17end6fH19fHx9fX1/fnx9fn59fXx8fX5+fX18fHt6enx7e3p5enp7enhzd3VxcXNveHdxe4WGhYWDhYKBg4OBgoGBgoCBgICBgH5/fn9/fXx+fYCBgoGAgIGBfX6Af35/gX+Af3+BgH+Af319fH1/gICAgH9/f35/fXx+f39/f319f39+fn6CgYF/gIB/foGDgoGEg4SCgn5+fHx6fHt7eXt6d3N2d3h5e3p7eXp/fnt7d3p8fXx8fH59fH19fH19fXx8fX19fX99fXx9e3l7fHx7enp6enp6eHN2dXBwcm93dnJ7hYaEhYOEgoGDgoKBgYGCgYKBgYGAf4B/f399fX9+f4CBgYJ/goF9foF+fn+Bf4B/gIJ/gIB+fH58f3+BgICAf4B/f4B+fX5+f4B/f39/gH9/f4J/gICAgIB/gYGAgISBgoKAf39+f3x9fn56fYV+dHx9enp6enx5eXp6hoV3eXx8fHx8fXx8fHx8fX19fHx9fX19fn19fX16eX18fH16enp6enp5c3V1b29xb3d0c3yFhoOEgoOCgYKBgoKCgYKBgYGCgYCAgICAgH59gH+Af4GCgn+CgX+AgX5/gYB/f4CAgn+Bf319f35/f4KAgICAgIB/gIB+fn1/gH9+f4B/f39/gH+AgICAgH+AgYCBgYGCgYCAf39/fn1/fnqBk416fH18e315e3p6eHmBgXh5e3x8fXx8fHx8fHx9fX18fH18fn1+fn59fHp8fHt8fXt5enp6eXl0dXVvb3Fwd3N0fYWGg4OCg4KAgYCCgoGAgYGCgYKBgYCAgIGAfn6Af4GAgYKCgIKCgICCfoCBgX9/gX+BgIF/fH6Af3+AgoCAgICAf3+AgH9+fX6Afn2AgH9/f3+AgICAgYCAf4CAgYCBgYKCgICAf39/fX5/fIGGiXx8fnt7fnl6e3p7jn53d3l7fHt9fHx8fHt9fH19fX18fXx+fn5/f358enx9e3x9e3l6e3p5eXN0dW5zcXB4cnV6hYaDg4KDgoCAgIKBgX+CgYKBgoGBgYKAgYF/fn9/gYGCgYKBg4OAgYJ/gYGBf4CAgIB/gX99f4F/gICBgICAf4B+f4CAf359foB+fn+Af39/gH9/gIGBf4CBgH+BgIGBg4KBgICAgIB9foB9gIOCe35+e3x9e3p8fHyHeXh4eXx8fH17fHx9fX18fH19fn19fX5+f3+Af317fH18fHx7enl7e3l5c3J1bnZycHhxdXaFhYOEg4KCgYCBgoF/gIKCgoKDgYGDgoCCgYB/f4CCgoKBg4KEhICBgX6BgoF/gICAgH+Cf36AgYCCf4B/gIB/gH+AgIB/fn2Af39/f4CAgH+AgH+AgYGAgICAgIGAgIGBgYGAgYCAgH9/gH5/fX59fn57fXx9e3x8eHh1eHh5e3x8fXx7fHx8fX5/f39/fn19fn9/gIGAf3x9fHx9e3p7eXp8eHpzcnVud3FxenF2d4WFg4ODg4KCgoKDgICCgYSDg4SBgYOBgoKCgYCAgIKDgoCCgoSDf4GAfoKDgICBgICAf4CAf4GBgIKAgICBgH9/gICAgIB/f4CAgH+AgICAgIB/f4CBgYCAgICAgYGAgoKCgoCCgYGCgYB/gIB/gId+fnx7fXx7fX94d3Z5eXp8fXx8fXt8fH19fn5/gIGAfn1+gICAgoGAfH59fX58d3t6ent5eXNxdW53cHV6cXZ5hYWCg4KDg4KChISAgIOBhoODg4GChICEg4KCgICCgoSBgYKBg4J/gIB/gYOCgYCBgYCAf4GBgYGAg4B/gIOCf35/goGAgH9+gYCBf4CAgYGBgYCAgIKBgYKBgX+BgYGBgoOCgoOBg4OCgYCBgH9/hH19fXx/fXt9f3t5dnp4eXt7fH19e3x9fX19fn+AgYGAgH+AgICDg4B9f35+fn15eXt6enp5c3J1b3dxd3lzd3uFgoKCgoOEgoOEg4CBg4OGg4ODgoKEgYSDgYOAgIKBhIGCgoGCgX6AgICCgYKBgYKCgIGAgICCgoGEgH6Bg4J/f4CDgoCBf4CCg4KAgYKBgoKDgoGBg4KChIGAgYOBgYKEg4KEhIODhIODgYGBgoCCf4B/fYB8enx/e3t3fHl5eXt6fX59fHx8fH1+foCBgYCAgIGBgYSEgH2Af39/f357e3t6e3p0cHhyeXR2eHR3e4SCg4KDg4SChIODgYKDhIaEgoOCgoSBhIOBg4CBg4KCgoKCgYKAf4GAgIKBgoGCgoKBgIGBgYKCgoOAfoGDgX9/gYSEgYN/goKBg4GCgoGDg4OEgYKEgoOCgoGCgoOBg4SDhIOEhYSFg4SCgYOCgYOBgYGAgH58fIB9fHh8eXp5enx9f3x7fHx9fX18fICAgICAgYGBgYKBfoGAgICAf3t7e3p6enVweHd5dnV8dXZ8gICDgoODg4OEhISAgoOGhYWDg4KDhIKEhYKCgYKDg4GCgoKAgYB+gYCBgYKDgoKCgoGAgYKCg4KCg4B/gYKCgICChIODgoGCgoGDgoKDg4SDg4SAgoSDhIOBgX+Bg4KDhYKEhISEhISDhISChIOEhIKBgoGBgHt9gX58eXx6enp9fHyBfnp8fH19fHp7fn5+gIB/gYGAgICAgIKBgIB/fX18fX18dnJ2eHh2dH92dX2Hh4OChIWDg4SFhICChYWEhIOCg4SEgYSFg4KCgoODgYOCgoCCgH2AgIGCg4KCgoKEgoGCgoOEgoKBgICBg4KAgYOFhIOCg4CCgoOCg4ODhIOEg4CCg4KEg4KCfoOBgoSEgoODg4SEhIOEhIOEg4WEg4ODgoKAfICBf3x8fXp6fH2AfX9/fHx6fH59fX19fn5/f39/gICAgH9+foCBgICAfnx9fX5/fn18fHh2f3Z3f4SHg4KDhoODhIaEgYKFhoWEhIODhISChIWFgoKDg4SCg4KDgoOBfoCAgoKDgoODg4SDgYKCg4OCg4KCgYGDgn+ChISDg4KEf4KEg4ODgoSDg4SCgIOEg4SDg4KCg4KChIOCg4OEhISEhIWEg4OEhYSFhIKBgoB9gYKAfXx8e3x8gH19foB+fn1/fnx8fX19fn5/fn+BgYGBgH99fX6BgYB+fn19fX59fX5+f3+AfH2AgYKCg4OFg4SDhoSBgoiHhYSDg4SEhYGFhYWDg4SDhIODgoOCg4F+gYGDg4SCg4OEhIOCg4KEg4ODgoKDgYOCf4KDg4ODgoOAgoWDg4ODhIODhIOBgoSEhYOCgoODgoGEg4GDg4SDg4SEhYSEhIWFhYWEg4ODf36BhIB9fXx8fHx/gX5+fn9/fX99e3x9fX19fX5+f4CBgIGBgH59fH6Cf39+fn5+fX1/f39/gICAf4CEhIODg4WDhIOFf36CiouFhYSDgoSFgYaGhoOEhISEhIODg4OEgn+BgYODhYSFhIWEg4KEhISFhIODgoSDhYKBhISFhYaEgoCDh4SDhIOFhIWFhIGEg4OGgoOCg4GCgYSDgoODhYODhIWEhYWHh4aHhYSEhYSBf4GDf35+fH5+fX+BgH9+fHx/f358enx9fX19fX5+fn9/gIGBf319fIB/gH5+fn5+f3+BgYGBgYKAgYWFhIOEhIKEg4aAgoWFiomEhISEhYWCh4aGhISEhIWEhYSEg4SEgYKDg4OEhIaEhYSDg4SEg3yDhHuBhHd5g4F9hH5+cnWDgoF2foOEgH2BdYF6hH9/f3+EhIKDg4KBg4SDhISFg4SFhoSFhn2EeXx+f4N7hYOBhIOAf31+f31+gYOBfXt/fX6Afn18fHx9fX19fH19f4B/gYJ/fX18f4GBgICAgH+BgYGBgYKDg4KChoSEhIWEgYOEhYOEhYSKiIWFhYOFhYSGhoaDhIWFhYWEhYWEhIWCgoOEhYWFhoSFhIOEhYWCaICFanx7cXF8gXOGc3R0fYKDdXNxg4ZzcHVyc3SDdnt9dYF/goOBgnZ5hYCDgIR/hYSChYWCaHpyc3N8gHKBg36Dg32BfX5/fX6Cg4J8f4F9f4B9fXx8fHx9fHx8fn1+gX+BgX99fX2AgYKBgYGBgIGBgYKBgoKCgoSHhIWEhYSBgoSGhoOFg4aIhoaFgoaGhoeGh4OFhYaFg4KFhoSFhYODg4SEhoaGhIaEg4SFhn1xe4FweXZ+g3+CbnlwdXN8dnl5hnKEg3B2eHF2dHR1cnN0dml/gG5yb3R2bnVsd217c26Ah3ltfXJzdnN2bW53bHB5bHV9f398foGAgX2Af32Af4B/fX18fHx9fH1+f32Af4CAfnx/foCBgoCBgICAgYCAgIKDgoKEhYeGhoCChYODhYeGg4WFhYaHh4SDhoeIiYaHhIWGiIeEg4WGhYWEhIOFhIKFhoaFhoWEhoWHdnB0e3BydX+HhYNtdW92b3x1coR5eYd4cXR3bndod3pucHaCcoN+b3p5eW1vbnpvb213fXiGcHF6cHJ0ZoF1fm57eXNveX+Af31+gYB/e39+fIB+gIB+foCAgYB+fn9+foF/gH9+fYB9f4CBf4B+fn+BgH9+goOCgoSFh4eEfoaEg4OFh4aEhoWFhoaIhISGh4iIhoeEhoaLioWEhoeHhYOFhIWEgoWFhYWGhYWGhYZxdXByc29zenl+hHSIdHV+iHZugnKEhnluanJ/cW1zd3x/dXR8hH54cXV3bnl1enF2eHV6eYRyaW95eHBreXN6b3p3dnZwgYB/fn5/f356fn18f31/f359gIGDg4CCg4GBhIGBf4GBgH1/f4F+f35+f4GAfn6BgoCAgoSHhoODhoSFhYaHhoWFhYWGhoiFhYaFh4eFhoSGhomIhYSJi4iGhIaFhoWDhYWEhoaGhoaFg3iLeXKIentwcIWFeIV4eWtzfnl7a3KDh4N6fG16eXl0fYB2bm+AgG90fHV3cXl9fW19dW+DhYZ6gHJye3x1cG96a3N8bnaCgYF+fn99fXp9e3x9fX9/fX1/f4KCf4GDgYGDgYB/gICAfn9+f31/fn1/gH58fYGAfn6Ag4iEhoSFhYWFhoeFhYWFhYeHiIaEhoWHhoaFhIWFhIWFhomKh4WEhoWGhoWGhoSGhoaGhoWGh4eHhoaEhoWGh4iHhYeGhoOHhoWFg4SFhoWGhIaEg4SEhoSDgYODg4SFhIWEhYSGg4WGhYWEhIWHhoSEhYaFhn13hYSEhIOCgX1/fnt8e357fHx9f359fX9+gYB9f4F/f4GAfn5+gH5+f35+fX99fX5/fHt8f358fH+BiYaFhIaGhoWGh4WFhYWGhoeIhoSGhYeGhYWDhIWGhYSGhoaGhYWGhIWGhoaGhIeGh4eGhYeIiIiIhoSHhYaGiIaFiIeIhYeGhoiFhYaHhYaGhYOChYWGhYWDhYSEhIWEhoWEhYWDhoaFhYWEhoaGhISFhoOFhIKEg4OFg4OBfYB/fHt8fnt8fH1/fnx8fn2Afn1/gH5+gH99fXyAfX5/fn5+f3x9fX57fHx/fHt7fn+Ih4SEiIaGhoeGhYWEhoaGhoiHhIWGh4aFhIODhIaFhIeFhoaFhYaEhYaGh4eFh4aJiIaGiIeIiYiFhYiFhoeGh4aHhoeFh4eGh4WFhoeFh4aFgoSFhoaEhIOEhIOEhoSFhYWGhYOGhoWGhYSGh4WFhIWFg4SHhoOCg4SDhIJ+gYB8e31+e3x7fn59e3x+fX5+fX9+fX1+fnx9fH98fn58fYGAfHx8fXx8fH56e3t8foiHgoWIh4eGhoaGhISGhoeGiIaEhYSHhoSFh4OEhYSFh4SFhoaFhoSGhoeHhoaIh4mIhoaIh4iKiIWHiIWHh4WHhoeGh4WIiIeHhYaGh4WGhoSBhISFhoWFhISEg4SFhIaGhoWGhIaFhoaFhYaHhYSDhISDhIeDhIGChIWDgYCAgHt7fn58fHx+fXx8fH19fH18fn18fX19fHx8fXx+fXt8gX99fH18fnx8fHp6fHx9iIeChoiHhoeGhoaEhYaFhoWGhYOFhIaFhIiJg4GEg4SGhIaGhoaGhIeHiIiHh4eIioiGh4iHiImIhYiHhYaGhoeHh4WHhoiIh4eFh4eHhoaHhIKEg4SGhYeFhISEhISFhoaGhoaFh4WFh4WGhYaFhIOEg4OEh4GDgIKDhIKCgn+Ae31+fnx8fH59fH19fH17fHx7fHx9fXt7e318e359e3x/fX18fX1+fXx6ent7fHyIh4KGhoaGh4aGhYOFhoWFhYWEg4WChoSDiId/enqChYaEhoaFh4aEh4eIiIiHhoiKh4aHh4eIiYeFiIeFh4eGhoeHhYeGiIiHhoWHh4iGhoiEg4SEg4aGh4WFhISEhYaGhoaGhYaHhoaHhoaEhoWDg4ODgoOGgYN+goKDgIOCf398f35+fHx9f318fX18fnt7e3p7fHx8e3t7fnt8fXt6e358fHx8fX5/fXt6fHp8fImHg4aFhoWGhoWEhIWFhYWFhIOBhIGGhIKEhHyAhn+ChYWGhYWGhYSHh4iHiIaFiYqHhYeGh4eIh4WIhYaHiIaGh4eGh4aIiIeFhoeGh4WFiIOEhoWDhoaHhoWEg4WFhoaGhoaFhoaHhYeHhYOFhYOBgoKBg4WCg36BgoF/g4F/fn5/fn98fH1/fXt9fXx+enp7eXt8fXt7e3t+fHx8fHp7fXx8fHx+fYF8e3t7e3x7iYeEhoSGhIaGhYSFhYWEhIOEgoCDgYaCgYJ/eoSMe4CEhYeGhoaFhIeIh4eHhYWHioeDh4WGhoiGhYeEhoeJhoaIiIeHhoeIhoSGhoaHhYWIg4SFhIeGhoeFhYSDhYWGhoeGhoWGhoaFhoaEg4SFgoGCgYCEg4OCfYGBf36DgX5/f4B8f3x9fX59e319fH15enp5e319enp7e318fXx8enp9fHx9fH5+gHt7e3x+fXyIh4WGhYeEhoSFhYWFhYODgYOBgIKBhYKAgH9/fXx7gYSFhoaEhYSEh4eGhoaFhIaJhoKGhIaGhoWFh4aHiImGhYiHiYeGhoeFhIaFhYeFhIeDhIWEiIaGiIWFhIKFhYaFhoaHhIWGhoaFhoKDg4WBgIGAgIOBg4B8gYB+foKAfYB/gXx/fH1+fX57fn18fHl6enl6fX15ent7fHt8e3t6e319fH18f35+fHt7fX59fIiGhYaGhoSFhYSFhYSDgoKAgoGAgIGDgX5+foB5en2Ag4OFh4WEg4OHhoOEhYSChYiFgoSDg4WFhYWHh4aIiIWFiIeJh4aFhYWDhoSFh4OEhoSEhYSHhoWGhYaEgoWFhoaGhoaEhYaGhYWFgoKDg39+gICAgYCDgHuBf31+gn5+gH6Afn99fX59f3t/fXt6eXp6eXp8fXl6ent7enx7e3t7fH19fXx/fn18fHx/fnx7h4WFhoaGhoSFhIWDhYKBgICAgYB+f4KCfX5/f3t/f4KDg4WGhYSDg4aDgYOEgoCFh4WCg4GBg4SEhIaGh4eHhYWIhomHhYSEhIKFg4SGgoOFhIWGhIeGhYWFhoOEhYSFhoWGhISFhIWDhYSAgIKDf35/f39/gIN/e4B9fX+Cfn+Bfn6Bfn5+fX1/e398e3p5enp5ent8eXp6ent7fHp7e3t8fX59fYB9fXx8fYB/fXyGg4aGhoaFg4SDhYKFgYGAf3+AgH5/gYJ8fn9/foCAgoKChISDgoGChIGAg4KBgISFhIKBf4CCg4OEhYWHhoaEhYeFh4WGgoOCgoOCgoWBg4WEhIaEhoaHhoaFgoSEg4SFhYWDhIODhIKEhIB/goJ+fX5/fn5/hH57f3x8gIF9gYB9foN8fn59fX57fnt7enl7enl6ent5enp6e3t8enx8fHx+fn1/gXx9fHx9f4B+gIaEhYWEh4SEg4KGgoOAgYB+fn+AfX5/gnx9f39+fn+BgYKEg4KBgYKCf4CBgoCAgoWEgoB/gIGCgYOFhYeFhISGhoOFg4WBgoGBgoGCg4GChISEhYWGh4eGhYWDg4ODhIWFhIGDgYOChIODgH+AgX59fX5+fH6Dfnx+fHyBgH6Cf35/gnx/fn19fHx8e3t6enp6eXt5enp5enp6e3x5e317e35/f4GAfX59fX1/gICAhoSEhYSFgoSCgoSCgoCBgH59fn9+fn6AfX2Af35+foGBgoODgoSHgYF+gICBf3+ChIOBf35/gIJ/goWEhYOCg4WFgoSBg4CBgIGBgYKBgIGEg4OGhYWHh4WEhIWCgoKDhYSCgYGBgYCFg4F/foB/fnx9fn18foN9e358fYF/gIN9fYCBf35/fXx8fH17e3p5enl5e3l6enl6ent7e3p7fXx8f3+BgoB+gH+AgH+AgIDKysrKysrKysrKysrLy8vLy8vLy8vLy8zMzMzNzc3Nzc3Nzc3NzczMzMvLy8vLy8vLy8vLy8vLzMvLy8vLy8vLy8vLy8vMzMzMzM3Nzc7Oz8/Pz9DQ0NHR0dLS0tLS0tLT09PT0tLS0tLS0tPT09TU1NTU09PT09PT09PT09PT09PT09PT09PT09PT09PT09PS0tLS0tLS0tLS0tPT09PT1NTV1dXV1dXV1dXV1dXV1dXV1NTU1NTT09PT09PT09PT09TU09PU1NTU1NTU1NTU09PT09PS0tLS0tPT09TU1NTU1NPT09LS0tLS0tLR0dHR0dPHhnNlYFtLWWdVTUZIQD03Nzg5Nzw8PDo8Oz42Oj04PDs6OTg3ODs7Oj87PTs8PD47P0E/QkJBQ0RFREE+PTw7QENDQUBDQ0FBR0hHSUtSwtXS09PT09TU1NTU1NTU1NTU1NXV1dXV1dXV1dXVysrKysrKysrKysrKy8vLy8vLy8vLy8vMzMzMzMzNzc3Nzc3Nzc3MzMzMy8vLy8vLy8vLy8vLzMzMy8vLy8vLy8vLy8vLzMzMzc3Nzc3Oz8/P0NDQ0NHR0tLS0tLS09PT09PT09PT09PS09PT09TU1NTU1NTU09PT09PT09PT09PT09PT1NTU1NTU1NTT09PT09LS0tLS0tLT09PT09PU1NTU1dXV1dXV1dXV1dXV1dXV1dXV1NTU1NPT09PT09PT09PU1NPT09TU1NTU1NTU1NPT09PS0tLS0tPT09PU1NTU1NTU09PT09PS0tLS0tLR0dHSzIxyZ2BcTVllUktHSz87Mzc4Ozg5Pj05PDpBOjs9Nzs8PDo6Nzg6Oz0/Oz88PTw/Pj9BPUFBPkNDREJAQT46Oz9DREFDRERCQklHSEhJTr7V0tPT09TU1NTU1NTU1NTU1NXV1dXV1dXV1dXV1crKy8vKysrKysrKy8vLy8vLy8vLy8vLy8zMzMzMzM3Nzc3Nzc3NzMzMzMzMy8vLy8vMzMzMzMzMzMzLy8zMzMzLy8vLzMzMzc3Nzc3Ozs/P0NDQ0NDR0dLS0tLS09PT09PT09PU09PT09PT09TU1NXV1dTU1NTT09PU1NPT09PT09PT1NTU1NTU1NTU1NPT09PS0tLS0tLS0tPT09PT1NTV1dXV1dXV1dXV1dXV1tbV1dXV1dTU1NTT09PT09PT09PU1NTU09TU1NTU1NTU1NTT09PT0tLS0tLT09PU1NTU1NTU1NTU09PT09PT0tLS0tHR0s+Sd2hfXk9XZ01LRks9ODc2NTk5OTw+OT88Qzk7PDc5PD07OTc5Ojw9QDs+PT47PD48PT5BQD5EQ0NDP0E9Ojs9QkNFQ0NEQT9FSEpJSky61dPT09TU1NTU1NTU1NTV1dXV1dXV1dXV1dXV1dXLy8vLy8vLy8rKysvLy8vLy8vLy8zLy8vMzMzMzMzNzc3Nzc3Nzc3MzMzMzMzMzMzMzMzMzMzMzczMzMzMzMzMzMzMzMzMzc3Nzc3Ozs/Pz9DQ0NDQ0dHS0tPT09PT09PT09TU1NTT1NTU1NTU1NTV1dXU1NTU1NPU1NTU09PT09TU1NTU1dTU1NTV1dTU09PT09LS0tLS0tLS09PT09TU1dXV1dbW1dXV1dXV1tbW1tXV1dXV1NTU1NTT09PT09PT1NTU1NTU1NTU1NTU1NTU09PT09LS0tLT09PU1NTU1dXV1dTU1NTT09PT09PT0tLS0dHRmn5nYWJOVWpKSElLPzw6OTM3Njc2PTs+Oj06Ojo4ODo7Ozg4Ojs7PD46PT09Ojw/PD0/QkA/Q0RDRD5APT08QENEQ0JEQkQ+REhJSUtMttfT09TU1NTU1NXV1dXV1dXV1dXV1dXV1dXV1dXVy8vLy8vLy8vLy8vLy8vLy8vLy8zMzMzMzMzMzMzNzc3Nzc3Nzc3Nzc3MzMzMzMzMzMzMzMzNzc3NzczMzMzMzMzMzMzMzc3Nzc3Ozs7Pz8/Q0NDQ0NHS0tLT09PT09PT1NTU1NTU1NTU1NTU1NTV1dXV1NTU1NPT1NTU1NTU1NTU1NTU1dXV1NXV1dXV1NTU09PT09PS0tLT09PT09PU1NXV1dbW1tXV1dbW1tbW1tbW1dXV1dXU1NTU1NTU1NTU1NTU1NTU1NTU1NXU1NTU1NTT09PT09PT09PU1NTU1dXV1dXV1dTU1NTU09PT09PS0tLR0p+DaV9kU1hsSEhIS0A9Nzg0NzY6Oj87RDw8Ojw8OTg6OTo6Ojs8Ojo7OT49Pjk9QDs/QUFCP0JCQUM9Pz8+PEBCRUNDQkBBO0ZJR01MSbLY09TU1NTU1NXV1dXV1dXV1dXW1tbW1tbV1dXW1svLy8vLy8vLy8vLy8vLy8vLy8vMzMzMzMzMzM3Nzc3Nzc3Nzc3Ozc3NzczMzMzMzMzMzc3Nzc3Nzc3Nzc3Nzc3Nzc3Mzc3Nzs7Ozs7Pz8/P0NDQ0NHS0tLS09PT09PT09TU1NTU1NTU1NTU1NTV1NXV1dTU1NTU1NTU1NTU1NTV1NTU1dXV1dXV1dXV1dTU1NTU1NPT09PT09PT09PU1NXV1dbW1tbW1tbW1tbW1tbW1tbV1dXV1dTU1NTU1NTU1NTU1NTV1NTU1NXV1dXU1NTU1NTT09PT09PT1NTU1dXV1dXV1dXU1NTU1NTT09PT09LS0tSjiGxfZlJWakdIR0lBPjM2Njo7PDhDPEJBPjtBPDg5Ojw6Ojw8PDk8PTo7PD09PD89QD9AQT9AQUBCPD4+PzxCQ0NDRkBBQT1ISklOTUeu2NPU1NTV1dXV1dXV1dXV1dbW1tbW1tbW1tbW1tbMzMvLy8vLy8vLy8vLy8vLy8vMzMzNzc3Nzc3Nzc3Nzc3Nzc3Nzs7Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Ozs3Nzc3Nzc3Nzc3Nzs7Ozs7Oz8/P0NDQ0NHR0dLS0tPT09PT09TU1NTU1NTU1NTU1NTU1NTV1dXV1dTU1NTU1NTU1NTU1dXV1dXV1dXV1dXV1dXU1NTU1NTU09PT09TU1NTU1NXV1dbW1tbW1tbW1tbW1tbX19bW1tXV1dXV1dXV1dXV1dTU1NTU1dXV1dXV1dXU1NTU1NTU09PT09PT1NTU1NXV1dXV1dXV1dXV1NTU1NPT09PT0tLWroprY2VSWGhMSkdJQjg0OTQ6Ozo5QDk+Q0U/PDw5OTk9Oj07PDw6PTw7OTw9Ozs/PUA9PT5AQD9CQT5APD05QERDQkFBQj48SEpLTU5IqNnU1NXV1dXV1dXV1dXW1tbW1tbW1tbW1tbW1tbWzMzLy8vLy8vLy8vLy8vLy8rKy8vLzMzMzMzMzMzMzM3Nzc3Nzc7Ozs3Nzc3Nzc/Pz8/Pz8/Pz8/Pz9DQ0dHR0dHR0dHR0dHS0tHV2djY2NnZ2dra2tvb29vZ2dnZ2dna2tra2tra2tjW19fX19fX19jX19fX19jZ2NjY2NjY2NjZ2dnZ2NfX19fX19jX19fX19bX2tra2tra2tra2trb3NzX1dXV1dXV1dXV1dXW1tbX1tbW1tbV1dXV1dXV1dXV1dTU1dXV1dXV1dXU1NTU1NTU1NTU09PU1NTU1NXV1dXW1dXV1dXV1dTU1NTT09PT09PS1bqKa2hoUlhlSUlMTkA5OTo0O0E8Nz05QUM9QD89ODo6Ozk9Oz4/Ojs8PDo7PDo7Pj1APT8/P0FAQUE/QTw8Oz5BRENBREA9PElJSk1ORqPa09TV1dXV1dXV1dXW1tbW1tbW1tbW1tbW1tbW1szMz9DPz8/Pz8/Pz8/Pz8/W3t3d3t7e3t7e3t7e3t3S0NDQ0NDQ0NDQ0NDQ0ci5ubm5ubm5ubm5ubq6t6WkpKSkpKSkpKSkpKSnhmBjY2NjY2NjY2NkZGRlhIuKioqKioqKioqKioemuri4uLi4uLi4uLi4uLepp6enp6enp6enp6enpq65uLi4uLi4uLi4uLi5sIqKioqKioqKioqKiouHvebh4uLi4uLi4uLj4+Pi2NfX1tbW1tbW1tbV1dXV1dXV1dXV1dbW1dXV1dXV1dTU1NTU1NTU1NTV1dXV1dXW1dXV1dXV1dXV1NTU1NTT09PT09XDkXFrak5TYkxMVk08Ojo3Nz5DPjg+Oj8/QTw/QDc7Ojs7PTs+Pjo7PD48Oz07PT8+QDw/Pz1AQEBBPj88PjxAQUVCQkZAQD9HSEpLT0ae2tXV1dXV1dXW1tbW1tbW1tbW1tbW19fX19fX19fMzNDS0tLS0tLS0tLS0tLR3uzr6+rq6urq6urq6uvp1dLS0tLS0tLS0tLS0tTEqaqqqqqqqqqqqqqqq6aGhIWFhYWFhYWFhYWFik4MEhISEhISEhISEhIRE0pUU1NTU1NTU1NTU1NPg6ejo6Ojo6Ojo6Ojo6OghoSEhISEhISEhISEhIKSpaOjo6Ojo6Ojo6OjpZVTUlNTU1NTU1NTU1NTS6ry6+vr6+vr6+vr6+vr6dnX19fX1tbW1tbW1tbW1dXV1dXV1dbW1tbV1dXV1dXV1dXV1dTU1NTV1dXV1dXW1tXV1dXV1dXV1dXU1NTU1NTU1NPUy5h2bGlKTl9NUlVNPjw8Nzs/Qz42Ojc+Pzs8QkA4PDk9Ozw6PD07PTs9Ozs9PD0+PT07QT08QUBBQT08Pzw7QEJDQURFPUFAQ0ZLS09GmNzV1dXV1dbW1tbW1tbW1tbW1tfX19fX19fX19fXzMzR0tLS0tLS0tLS0tLS0d3q6enp6enp6enq6unq6dXS0tLS0tLS0tLS0tLUxaqrq6urq6urq6urq6yoiIeHh4eHh4eHh4eHh41SEhgYGBgYGBgYGBgYFxpOWVdXV1dXV1dXV1dXU4WopKSkpKSkpKSkpKSloomHh4eHh4eHh4eHh4eFlaakpKSkpKSkpKSkpKaXV1dXV1dXV1dXV1dXV0+r8erq6urq6urq6urq6unZ19jX19fX19fX1tbW1tbW1tbW1tbW1tbW1tbV1dXV1dXV1dXV1dXV1dXV1dXW1tbW1tXV1dXV1dXV1dXU1NTU1NTU1NGcenFpSlRdT1JVTkQ+Pzs/QEA4Ojs4PDw8PD46Ojs4Ozk5Ozw7Ojw5Ozs8Ozo9PT0+PUE/Pj8/Pj08PT88PEFBQ0FERTw+QEVGSktNRpPc1dXV1tbW1tbW1tbW1tbW1tfX19fX19fX19fX183N0NLS0tLS0tLS0dHR0dDc6Ofn5+fn5+fn5+fn5+bV0dLS0tLS0tLS0tLS08Wtrq6urq6urq6urq6vq46NjY2NjY2NjY2NjY2SXSInJycnJycoKCgoKCcpWmNiYWJhYmJiYmJiYl6MrKmpqampqampqampqaeQjo6Ojo6NjY2NjY2NjJqqqampqampqampqamrnmJhYmJiYmJiYmJiYmJbr+/p6enp6enp6enp6enn2djY2NjY19fX19fX19fX19fX19bW1tfX19fW1tbW1tbV1dXV1dXV1dXV1dXV1tbW1tbW1tbW1tbV1dXV1dXU1NTU1NTWo3txZElbYE5OVU9AQT89REI+Oz06OTs6PTw7PDs6OTg5OTs8Ozw8Ojo7PDo7QD08PTxAQTxBQTs7PEA/PD1CP0RDQ0U8PkJERkpMTEWN3NXV1tbW1tbW1tbW1tbX19fX19fX19fY2NjY2NjNzc7Ozs7Ozs7Ozc3Nzc3Nzs/Pz8/Pz8/Pz9DQ0NDQz87Ozs7Ozs7Oz87Oz87NzMzMzMzMzMzMzMzMzMvJycrKysrKysrKysrKysfCw8PExMTExcXFxsbGxsvMy8zLzMzNzMzMzMzLz9HR0tLS0tLS0tLS0tLS0NDQ0NDPz8/Pz8/Pz87Q0dLS0tLS0tLS0tLS0tHNzc3Nzc3Nzc3Nzc3NzdTY2NnZ2dnZ2dnZ2dnZ2djY2NjY2NjY2NjY2NfX19fX19fX1tfX19fX19bW1tbW1tbW1tXV1dXV1dXV1dbV1dbW1tbW1tbW1tXV1dXV1dTU1NTU169/cF5GXmJQUVdOR0ZDQ0lBPz07PDo8N0BBPD04Ojo4OTg7Pzs8PDs7PDw8PD87PD46Pj44PkI8Pj1BPjw+QkBERUNAPD5APkNJSUtEh9zV1tbW1tbW1tbW1tbX19fX19fX19jY2NjY2NjYzs3Nzc3Nzc3Nzc3NzdHNzc3NzczP09LSzs3P0s7Ozs7Ozs7O0dTPz87Q09DO0tTV1NDPz8/Pz8/Pz8/Pz8/P0NDQ0NDR0dHR0dHS09PU1NTU1dXV1tbW1tfW1tbX1tfX19fX19fX19bW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tXV1dXV1dbW1tbW1tbW1tbW19fW2NjY2NjZ2dnZ2dnZ2dnY19jY2NjY2NjY2NnZ2dnZ2dnZ2djY2NjY2NjY2NjY2NjX19fX19jY19fX1tbW1tbW1tbW1tbW1tbW1dbW1dbW1tbW1tbW1tbW1tXV1dXV1NTV1di4gm9XSl9jUlFaS0hBQTxCPT07Oj4+PD4/PT0/ODk6OTk3OD48PD47Ozw7PDs/PT0+OTs7OT0+P0A+QD07OkI/QkNCPz0+QD5CRUdKQoDc1tbW1tbW1tbW19fX19fX19fX2NjY2NjY2NjY2M7Ozs7Ozs7Nzc3Nzsqfys3Nzc3QuYOEi8fTwJrLz87Ozs7O07udz8/SuY++1JyChIrGz87Ozs7Ozs7Ozs7Oz8/Pz8/P0NDQ0NDQ0NDR0dHR0tLT09PU1NTU1NTV1dXV1dXV1dXV1dXV1dXV1dXW1tbV1dXV1dbW1tbV1dXV1dXV1NTU1NXV1dXV1dXV1dXW1tbW1tbW1tbX19fX19fX19fY2NjY2NjY2NjY2NnZ2dnZ2dnZ2dnZ2dnY2NjY2NjY2NjY2NjY2NjY2NfX19fX1tbW1tbW1tbW1tbW1tXV1tbW1tbW1tbW1tbW1tbW1dXV1dXV1dXYwIBuVU9gY1dZW0xMQ0A9PTs9Ojw9Qj5CQkA8Ojg5ODo6Ojc7Pz4/PDw7PDo5Pzw8PTg5PD9BPj09PUFAPTtBQkBCQz47QD9BQUlHSkF629bW1tbW1tbX19fX19fX19jY2NjY2NnZ2djY2dnOzs7Ozs7Ozs7OzdKpj63Rzs7Ozpu3tqSiwJOerNPOzs7O0rWVm7PUwJSwnLGWuLmvodLOzs7Ozs7Ozs7Pz8/Pz8/Pz9DQ0NHR0dHR0dHS0tLT09TU1NTU1dXV1dXV1dXV1dXV1dXV1dXV1dXW1tbW1tXV1dbW1tbW1tXV1dXV1dXU1dXV1dXV1dXW1tbW1tbW1tbW1tfX19fX19jX19fY2NjY2NjY2djY2dnZ2dnZ2dnZ2dnZ2dnZ2djY2NjY2NjY2dnY2NjZ2NjY19fX19fX19bW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tXV1dXV1dXV18h/b1pTYWVeXVxPSkQ9QD8+PDc6Pjk/RD5AOTg3ODk7Ozw4OT89PTw9PD47OkE7OTs5OzxDQDw7PT5AQT49QkQ/QkM9PT8+Pz5ISUg/ddrW1tbX19fX19fX19fX2NjY2NjZ2dnZ2dnZ2dnZzs7Ozs7Ozs7Ozs/Inrym0tDQzsqgl36Cw6abr6fUz8/Pz9GfoKqu1qKgi5HDk31+r7DRzs7Ozs7Ozs7Oz8/Pz8/Pz8/Q0NDR0dHR0dLS0tPT09TU1dXV1dXV1dXV1dXV1dbV1dXV1dXV1tbW1tbW1tbV1dXV1dXW1tbV1dXV1dXV1dXV1dXW1tbW1tbW1tbW1tbW1tfX19fX19jY2NjY2NjY2NjY2NjZ2dnZ2dna2dnZ2dnZ2dnZ2dnZ2djY2NjY2NnZ2dnZ2dnY2NjY2NfX19fX19fX19bW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1dbV1dXV1dfNiHNdWGloXl9gT0lGOkFAPj88PDk2P0I/Qjo2NDc6Ozo8Ojk+PD49PTs/PTxBPjw8Ojw8PTw6PEA9QEI+PkFCPUNDPT0+Oz9BRUtIQHDZ1tbX19fX19fX19fY2NjY2NjZ2dnZ2dnZ2dnZ2c/Pz8/Pz87Ozs7SrKWnqdXAvNLHnY+ey9PJipmq1M/Pz8/RxYeasc+Yh5261NLNnp7D0M/Pz8/Pz8/Pz8/Pz8/Pz8/Q0NDQ0dHS0tLS09PT1NTU1dXV1dXV1dbW1tbW1dbW1tbW1tbV1tbW1tbW1tbW1dXV1dXV1dXW1dXV1dXV1dXV1dXW1tbW1tbW1tfX19fX19fX19fX19jY2NjY2NjY2NjY2NnZ2dnZ2dnZ2tnZ2dnZ2dnZ2dnZ2dnZ2dnY2dnZ2dnZ2dnZ2dnY2NjY19fX19fX19fX19bW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbV1dXW0JB1W1tqaWFeXVNOSTxDQEE+QD46OEVAP0M6NzQ5Ojo5Ozs4Oz0/Pj49QT08P0A9Pjw8PDw8Oj1AQD8/PT5CQD9AQkA8QD0+QUVLRz9r19fX19fX19fX2NjY2NjY2NjZ2dnZ2dnZ2dnZ2tnPz8/Pz8/Pz8/QzJ2Nl6zQmpfKxZ6ynpbN1q2ZqtTPz8/Pz9anmbPImZCfoNLTwKCg0M/Pz8/Pz8/Pz8/Pz8/Pz8/P0NDQ0dHS0tLT09PT1NTU1NXV1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbV1dXV1dXV1dXV1dXV1dXV1dXW1tbW1tbW19fX19fX19fX19fY19fY2NjY2NjY2NjY2NjZ2dnZ2dnZ2drZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2djY2NjY2NfX19fX19fW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1dXV1tKUcl5ea2tqZV1PTEc/RENDQDo9OzxCPD09OTY0Ojk5Ojo5Nzs/QDs8PUA8PEE+PD07PTw/PDo8Q0A+PTs9QD5CPkBBPkA9QD9GSUQ/ZtXX19fX19fY2NjY2NjY2NnZ2dna2tra2tra2traz8/Pz8/Pz8/P07GigJuvyaCjv8qcpYynrdiqmarUz8/Pz8/VpZm0vqmvkaG516+iqdTQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NHR0tLT09PT1NTU1NXV1dbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1dXV1dXV1dbW1tXW1tbW1tbV1tbW1tbX19fX19fX19fX19fY2NjY2NjY2NjY2NjY2NjY2dnZ2dnZ2dna2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2djZ2djY2NjY2NfX19fX19bW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbSk3BgXnBoZmVaUUhHQkVDQEA3Ojo8Pjo8OTc2NTk6Njo8Ozc8QEA8Ojo9Ojw/Pj08OUA8PDo6OT9APT08PUBBQz9APz5BOz9ARkpCP2LS2NfX2NjY2NjY2NjY2dnZ2dnZ2tra29vb29vb28/Pz8/Pz8/P0M6fkGyclteqo9PSrqa1mJ/Vqpmq1M/Q0NDQ1qWZtb+emq2bqdijobrU0dHR0NDQ0dHQ0NDQ0NDQ0NDQ0NHR0tLT09PT1NTU1dXV1dbW1tbX19bW1tbW1tbW1tbX1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tfW1tfX19jY2NfX19fX2NjY2NjY2NjY2NnZ2dnZ2dnZ2dnZ2dna2tnZ2dnZ2dnZ2dnZ2dnZ2dnZ2djY2dnZ2dnZ2dnZ2dnZ2NjY2NjY2NjX19fX1tbW1tbW1tbW1tbW1tbX19fX19fW1tbW1tbX0pNuYFxxZGdkWlVKQENGQ0FBODs/PD07PDw3NTU4OTY4Ozo5PDo+Pzw9PTk8Pz49Ojo+OTw6Ojg+Pzw9PTw+QEFDQT48PDpCRERKRkJd0NnX19jY2NjY2NjY2dnZ2dna2trb29vb29vb29vPz8/Pz8/Pz9G9n8O31pfA09HQ0srSzZeb1KqZq9XRz9DQ0NWlmrXGlqbFmKLRnp/J0tHR0dHR0dHR0dHR0NDR0dHR0dHR0tLT09PU1NTV1dXV1tbW1tfX19fX19bW1tbW1tfX19fW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW19fX19fY2NjY2NjY2NjY2NjY2djZ2dnZ2dnZ2dnZ2dnZ2drZ2tnZ2dnZ2dnZ2dnZ2dnZ2djY2NjY2NjZ2dnZ2dnZ2dnZ2dnY2NjY2NjY2NfX19fX19fX19fW1tfX1tbX19fX19fX19fX19bW19GRbF1cb2doYl1PRj9ISEdFQDw8Pj48PT08NzU2Ojk2OTs6Ojs4QD86PDw5PD49Ozs6Pzk/Ojs5PT49Pjw7PTxAQ0I/Pz47Q0ZGR0hEWc3a2NjY2NjZ2dnZ2dnZ2dna2trb29vb29vb29vb0NDQz8/Pz8/Pz5V+e6WS1KKa08ySl6ObodirmavV0pem09DVpZmz0Zqcm5utx5+h0tHR0dHR0dHR0dHR0dHR0dHR0tLS0tLS09PU1NTV1dXV1tbW19fX19fX19fX19fX19fX19fX1tbW1tbW1tbW1tbX19bW1tbW1tbW1tbW1tbW1tbW1tbW1tfX19fY2NjY2NjY2NjY2NjY2dnZ2dnZ2dnZ2dnZ2dnZ2tra2tra2tnZ2dnZ2dnZ2dnZ2djY2NjY2NjZ2dnZ2tnZ2dnZ2dnZ2djY2NjY2NjY2NjX19fX19fX19fX19fX19fX19fX19fX19fX1tfPjGRWXnBrXGBgTkVITUlJT0M+OkI9PUBDOzU1Nzw6Nzo7Ojo7OT09OTo6OT0+Pz07OT47PDo8Ozk+PD47PD0+QENCPz5BPEFDR0ZGRVXJ29jY2NnZ2dnZ2dnZ2dra2tvb29vb29zc3Nzc3NDQ0NDQ0M/Pz9DR1aeZrcmjqL7KnbGdo7XZqZup2LirocfS1qOasNmlq6SexbSkptbS0tLS0tLS0tLS0tLR0dHS0tLT0tPT09PU1NTV1dbW1tbX19fX19fX19fX19fX19fX19fX19bW1tbW1tfX19fX19fW1tbW1tbW1tbX19fW1tbW1tbW1tbX19fX2NjY2NjY2NnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dra2tra2tra2trZ2dnZ2dnZ2dnZ2djY2NjY2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnY2dnY2NjY2NjX19fX19fX19fX19fX19fY2NfX19fX19fYzYZdV2JvZE9dVEtIRlNRS0xAPj1EPD9DRj01NTc7OTY6Ozo8PTo7Pzo6OTg6PT0/Pjs/Oz49Ojs5Pjs9PD0+QURCQD8+PzxAQUVHRURSxdvY2dnZ2dnZ2dnZ2tra2tvb29vb3Nzc3Nzc3NzQ0NDQ0NDQ0NDQ0NO5gL3Tm5bP1LWLkZ/T1LyBu9TOlKDT0dW1gsPVzJOQp9e5g7/V0tLS0tLS0tLS0tLS0tLS0tLT09PT09PU1NXV1dbW1tfX19fX19fY2NjY19fX19fX19fX19fX19fW1tbX19fX19fW1tbW1tbW1tbW19fX1tbW1tbW1tbX19fX19jY2NjY2NnZ2dnZ2dnZ2dnZ2tnZ2tra2tra2tra29ra2tra2tnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2NjY2NjX19fX19fX19fY2NjY2NjY2NjY2NfX2ct+WlVqaltMX01KTEpVTEZCPDw/R0VHS0g9NjU3Ojk3OTo7Ojw9OT45OTo4Oz0+PkE+PTk8PDo9Pj46PTk5Oj9FQUA+PT8/QkBHRURFUMHc2dnZ2dnZ2dna2trb29vb29vb3Nzc3Nzc3dzc0NDQ0NDQ0NDQ0NDQ0cHR0crI0tDUxLjS0tHSwtLQ08fM0tHR0cLU0tTLvdXS0cLT0tLS0tLS09PT09PT09LS0tPT09PU1NTU1NXV1dbW1tfX19fX19fX2NjY2NjX19fX2NfX19fX19fX19fX19fX19fX1tbW1tbW1tbW1tfX1tbW1tbW1tbW19fX19fY2NjY2NjY2dnZ2dnZ2dnZ2dra2tra2tra2tra29va2tra2tra2dnZ2dna2tnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dna2tnZ2dnZ2dnZ2djY2NjX19fX19fY2NjY2NjY2NjY2NjY19rHd1xSZ2laTlpOTFBRV0VKPz89P0FFTExBPTc3NTs4ODk5Ojs8Pjw+ODo6OTs+P0A9Pj46NTo6Oz0/Ojs5Ojw+QkJAPz8/P0FCR0RDRE683dnZ2dnZ2dna2tvb29vb29vb3Nzc3Nzc3d3d3dDR0dDQ0NDQ0NDQ0NDS0NDR0dDQ0dPU0dHR0dPR0dHS0tHR0tLU0tLS09XT09PV0tLS0tPT09PT09PT09PT09PT09PU1NTU1dXV1dbW1tfX19fX2NjY2NjY2NjY2NfX19jY19fX19fX19fX19fX19fX19fX1tbW1tbW1tbX19bW1tbW1tbW1tfX19fX2NjY2NjY2NnZ2dna2tra2tra2tra2tra2tra2tvb2tra2tra2trZ2tra2tra2tra2tra2tnZ2dnZ2dnZ2dnZ2trZ2tra29ra2trZ2dnZ2dnZ2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjbwXNYVWlrU0xSTlBSWVRGSTw+Qz9BQkVKPT43ODY5Nzc4OTk7Oz0/QDw9ODk7Ozs/Pjw8OTU6PT47OTk7PD8/P0JCQT1BPUBBQkZCQkJLtd7Z2dra2tra2tvb29vb29vc3Nzc3Nzd3d3d3d3R0dHR0dHR0dHR0dDQ0NDQ0NDQ0dHR0dHR0dHR0dHR0dHS0tLS0tLS0tPT09PT09PT09PT09PT09TU1NPT1NTU1NTU1NXV1dXV1dXW1tbX19fX2NjY2NjY2NjY2NjY19fY2NjX19fX19fX19fX19fX19fX19fX19fW1tbX19fX1tbW1tbW1tbX19fX19jY2NjY2NnZ2dna2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tnZ2dnZ2dnZ2NjY2NjY2NnZ2dnZ2dnZ2NjY2NjY3LxvVFRsbExLUkpUUlVLRkQ6PkdEREFERjw/ODk6OTY5OTo3PD07PkA9PTc5Ojs5Pjs5OTY2Oj1AQT47PDk6Pj9DQT4/Qj0+QkNFQkFCSrDe2dra2tvb29vb29vb29vc3Nzc3Nzd3d3d3d3d0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0tLS0tLS0tLS0tLS0tLS0tPT09PT09PT09PT09PT1NTU1NTU1NTU1NTU1dXV1dXV1tbW1tbW19fX19jY2NjY2NjY2NjY2NjY2NjY2NjY19fX19fX19fX19fX19fX19fX19fX19fX19fW1tbW1tfW19fX19jY2NjY2NjZ2dnZ2dra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2trZ2dnZ2dnZ2djZ2dnZ2dnZ2dnZ2dnZ2dnY2Ny2a1NbcGtLVVdSXFFXSEQ+PEJKRT1ISj89PDc4ODo2OTg5Njs+PD1APDw1OTk8Oj87OTk0ODw9PUFBPD47Ojw+QD89PkE9PUNGR0I/Qkmq39ra29vb29vb29vb3Nzc3Nzc3N3d3d3d3d3d3dHR0dHR0dHR0dHR0dHR0dHR0dHS0M/U0M7P0tLT0tLS0tLS0tLS0tPT09TU1NTU1NTU1NTU1NTU1NTU1NTU1NTV1dXV1dXV1dbW1tbW19fX19fY2NjY2NjY2NjY2NjY2NjY2NjY2NjX19fX19fX19jY2NfX19fX19fX19fX19fX19fX19fX19fX19jY2NjY2NjY2dnZ2dra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tvb29va2tra2tra2tra2tra2tra2tnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dndsGRTYXJfT1pUV19RUkdCPUVJS0FBTEQ/Pzs5ODg5Mzg2ODY5Pj0+Pz06Njo7Pjs9PTo5Njg6PTtAQDxAPz0/P0I+PD48PEJFSElCPkNJpODa29vb29vb3Nzc3Nzc3Nzc3N3d3d3d3d3d3t7S0tLS0tLS0tLS0dHR0dHR0dPT0bm7zLqbnLrQyNPT0tLS09PT09PT09PU1NTU1NTU1NTU1NTU1dXV1dXV1dXV1dXV1dbW1tbW1tbX19fX19fY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjX19fX19fX19fX19fX19fX19fX19jY2NjY2NjY2NjZ2dra2tra2tra2tra2tra2tra2tra2tra29va2tra29va2tvb2tra2tra2tra2tra2trb29vb29va2tra2tra2tra2tra2tra2tra2tnZ2dnZ2trZ2dnZ2dnZ2dnZ2dnZ3qpfVWBuW1VZUVpeT0xHQ0ZNSUZEREk7QUE7PDg4NjU4Njk4Nzw/QT89Ojc8Pz48Pz87OjY4OD09QEE9QD5BQD1AOjs6Pj1BRUdKQkBDR57h29vb29vc3Nzc3Nzc3Nzc3d3d3d3d3d7e3t7e0tLS0tLS0tLS0tLS0tLS0tO+wMqaoKKViJGeqpOpz9TT09PT09PT09PU1NTU1NTU1NTU1NTV1dXV1dXV1dXV1dXV1tbW1tbW1tbX19fX19fY2NjY2NnZ2dnZ2dnZ2dnZ2djY2djY2NjY2NjY2NjY2NjY2NjY2NjX19fX19fX19fX19fX19fX19fY2NjY2NjY2NjZ2dna2tra2tra2tra2tra2tra2tra29vb29vb29vb29vb29vb29vb29ra2tra2tra2tra2tvb29vb29va29vb29vb29va2tra2tra2tra2tra2tra2trZ2dnZ2dnZ2dnZ2d6iXFVeblheXU5aUFROQ0NMSUlJRkpEPEJBPDs4NzY3OTc3OTk9P0E/PDo5QD88PkI/Ojg3NzY9P0BAPUBBPz88PTs7OD48P0VJSEE/Q0aX4dvb29zc3Nzc3Nzc3N3d3d3d3d3d3t7e3t7e3tPT09PT0tLS0tLS0tLS0tTIlZyum5m1iX2TjIKBhMTV09PT09PT09PU1NTU1dXV1dXV1dXV1dXV1dXV1dXV1tbW1tbW1tbW1tfX19fX19fX2NjY2NjY2dnZ2dnZ2dnZ2dnZ2dnZ2NjY2NjY2NjY2NjY2NjY2NjY2NfX19fX19fX19fX19fX19fX2NjY2NjY2NjY2dnZ2dnZ2dna2tra2tra2tra2tra29vb29vb29vb29vb29vb29vb29vb2tra2tra2tra2tvb29vb29vb2tvb29vb29vb2tra2tra2tra2tra2tra2tra2tra2tra2tnZ2dndmlpYYW5ZYVdPV01QRUJETElNS0ZJRT5CRDg4ODY3OTc1Njk4PT1BPjo4OT4+PD9APzw1Njc2PD4/PjtAQEA/Pj4/Pjs/PkFCRkdCQENIkeLb29zc3Nzc3d3d3d3d3d3d3d7e3t7e3t7f39/U09PT09PT09PT09LS0tLTz6h+kayPko6MhoCIiYSQo8rU09PT09PU1NTU1dXV1dXV1dXV1dXV1dbW1tbW1tbW1tbW1tbW19fX19fX19fX2NjY2NjY2dnZ2dnZ2dnZ2dnZ2dnZ2dnY2NjY2NjY19jY2NjY2NjY2NjY2NjX19fX19fX19fX19fY2NjY2NjY2NjY2NnZ2dnZ2dna2tra2tra2tra2tra29vb29vb29vb29vb29vb29vb29vb29ra2tra2tra2tvb29vb29vb29vb29vb29vb29va2tra2tra2tra2tra29vb29ra2tra2tra2tna3JJaWWNuWlpSVV5QTDxAR05IUklIRT48SEY4OTc1Nzg3NTg5ODs+Pj07ODlBPj1AP0E+NzU5Njs+QUI/P0BAQUI/Pj8+QUBEQUZIQj9FSozi3Nzc3Nzc3d3d3d3d3d3e3t7e3t7f39/f39/f1NTU09PT09PT09PT09PWtaWaiIuQhYCFi4iBg4qLf4bC1tTU1NTU1NTV1dXV1dXV1dXV1dXW1tbW1tbW1tbX19fX19fX19fX2NjY2NjY2NjY2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2djY2NjY2NjY2NjY2NjY2NjY2NjY2NjX19fX19fX19fY2NjY2NjY2NjY2dnZ2dna2dra2tra2tra2tra2tra2tvb29vb29vb29vb29vb29vb29vb29vb29ra2tra2trb29vb29vb29vb29vb29vb29vb29vb2tra2tra2tra29vb29vb29vb29vb2tra29uIWltnalxYTFpfVkg6TEhMSkpDRUVDQExINzo3Njc4ODU4Nzg5PDw7Ozk4QD89Pj8/PDY3PDQ3P0JCQUBAPz8/QT09P0A+QEBGRT09REuI4tzc3Nzd3d3d3d7e3t7e3t7e3t/f39/f39/f39TU1NTU1NPT09PT09PUxZKCg4WGfYGCfXx5foGCg36k29bU1NTU1NTV1dXV1dXV1tbV1tbW1tbW1tfX19fX19fX19fX19fX19jY2NjY2NjZ2dnZ2dnZ2dna2tnZ2dnZ2dnZ2dnY2NnY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjX19fX19fY2NjY2NjY2NjY2dnZ2dna2tra2tra2tra2tra29vb29vb29vb29vc3Nzc3Nvb29vb29vb29vb29vb2tra2tra29vb29zb29zb29vb29vb29vb29vb29vb29va2tvb29vb29vb29vb29vb29vb2tvZgFpebWhaU0ldW1hKRE1ISlNMR0ZBQD9KQjg7NjY5OTc1ODY4Ozo7Ojw5OD09O0A9Ozo2NTw3Oz1CQEFBPD49QEE9PEA/Pz5CREU+PERLg+Lc3d3d3d3d3t7e3t7e3t7f39/f39/f39/f39/V1dTU1NTU1NPT09PT2LKEkKh9g3l2hIh/e3d5gn5+i67A1dTU1NXV1dXV1tbW1tbW1tbW1tbW1tfX19fX19fY2NjY2NjY2NjY2NjY2NjZ2dnZ2dnZ2dna2trZ2dnZ2dnZ2dnY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2dnZ2dna2tra2tra2trb2tra2tvb29vb29vb29vc3Nzc3Nzc29vb29vb29vb29vb29va2trb29vb29zc3Nzc3Nvb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vc1nlcWmxmWFJPYFFSQUhHSkZYTEZAQENDSz87Ozc4ODc2NTc2ODo5PDw6PTs/PTs9Pjw7ODg8OT0/QkFCQzw8P0FCPj1BQkNCREVDQDtDTH3h3d3d3d3e3t7e3t7e39/f39/f39/f39/g4ODg1dXV1NXU1NTU1NPU0ruen3WKeXuIgICChYGDcnOAhYOMrNfV1NXV1dXW1tbW1tbW1tbW1tbW19fX19fX2NjY2NjY2NjY2NjZ2dnZ2dnZ2dnY2NnZ2dna2tra2trZ2dnZ2dnZ2djY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2dnZ2dna2tra2tra29vb29ra2trb3Nzc3Nzc29zc3Nzc3Nzc3Nzb29vb29vb29vb29rb29vb29vb29zc3Nzc3Nzc3Nvb29zc3Nzc3Nvb29vb29vb29vb29vc3Nzc3Nzc3Nvb29vb3dByXV9wZVdLUGNPS0JHQ0pIS0ZBPEE9SFBBOjo3Nzg3Njc4Nzw6OD09PD47QD88Pz07Ojs5Ojk8QEJAQkNAPUFAPz1AQkNDQUBAP0A7RU144N3d3d7e3t/f39/f39/f39/f3+Dg4ODg4ODg4NXV1dXV1dXV1NXU18h4i4V8goh6g4SBfoKCc2l0hYuGkJ3U1tXU1dbW1tbW1tbW1tbW19fX19fX19jY2NjY2NjY2NnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dra2tra2tra2dnZ2dnZ2dnY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2dnZ2dna2tra2tra2tra2tvb2tvb3Nzc3Nzc3Nvc3Nzc3Nzc3Nzc29zb29vb29vb29vb29vb29vb29vc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc29vb297KalxjcWVST1heSz9HTElPS0VAPkFCP0lPPjk6NzY7NzY6Ozc7Ojg6PDw+Oz09Oz48Ojs4OTo4OUFCQkFAQDtAQj06PkFCQz8+PT4/PUZOdN/e3t7e3t7f39/f39/f4ODg4ODg4ODg4ODg4OHV1dXV1dXV1dXV1s6dhpl+f5OTin+CgXx9gnNxm4mAgoOJwNnat7TQ19bW1tbX19fX19fX19fX2NjY2NjY2NjY2NjZ2dnZ2dnZ2dnZ2tnZ2dnZ2dra2tra2tra2trZ2dnZ2dnZ2dnZ2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NnZ2dna2tra2tra2tra2tra29vb3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nvb29vb29vb29vb29vb29vc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3NvfwGNaW21gVlBTU0pETEhNSEk8PkFEQ0ZORDw8OTc5OjY4Ozk3PDk4OTw9OzlAPjpBPzw3NTc7ODpAQUVBPz45PUI/Oz1CQkI6Pj07PT5GTnHe3t7e3t/f39/f39/g4ODg4ODg4ODg4OHh4eHh1tbW1tbW1tbV1tjLioCHhYOXjHh7e3lvfYF1a3ebdHZ7eInHxpiMrdjZ19fX19fX19fY2NjY2NjY2NjY2NjY2NjY2dnZ2drZ2dna2tra2tra2tra2tra2tra2tra2dnZ2dnZ2dnZ2dnZ2dnZ2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NnZ2dnZ2dnZ2dna2tra2tra2tra2tra29vb3Nzc3dzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nvb29vb29zb29vb3Nzc3Nzc3Nzd3dzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3d3d3d3d3Nzc3Nzc4LdjV1lrYlJNVVFMSktGS0ZDQD5CQT9FTT4+PTg5OTo3OTo3NT03Nzo+PDs7Qjw5Pz05NjY4PTk6QEJGQD49PEBCREA9QD9DO0A9PD4/Rk9t3N/e3t/f3+Dg4ODg4ODg4ODg4OHh4eHh4eHh4dbW1tbW1tbW1tfVrYZ6d32rn3l4entzdH+Dfm9xe3l6c3t2k4qFgImkzdnY19fX2NjY2NjY2NjY2NjY2NjY2NjY2NnZ2dna2tna2tra2tra2tra2tra2tra2tra2tnZ2dnZ2dnZ2dnZ2dnZ2dnZ2djY2NjY2NjY2NjY2NjY2NjY2NjY2dnZ2dnZ2dnZ2dra2tra2tra2tra29vb29vc3Nzc3N3d3d3c3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc29vb29vc3Nzb3Nzc3Nzc3N3d3d3d3d3d3dzc3Nzc3Nzd3d3c3Nzc3Nzc3N3d3d3d3d3d3d3d3dzc3OGtYVtebGJSTVZMTUdLS0RGQkI7QT08RUxCQT44Ojk6Nzc5NjY6NTs+QDs9Oz89PD89Ojk5Ojw5PEVDRkA/PkBDQkQ9OT0/QT1CPz1APkdPadvf3t/f3+Dg4ODg4ODh4eHh4eHh4eHh4eHi4uLW1tbW1tbW1tfQmH+Qh4N9eoN2e3Vzenl6kKqmd3JyfoeHh4CAfoKEhJHJzNnX19jY2NjY2NjY2NjY2NjY2NjY2NnZ2dnZ2tra2tra2tra2tra29va2tra2tra2tra2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2djZ2dnZ2dnZ2djY2NnZ2dnZ2dnZ2dnZ2tra2tra2tra2tra29vb29vb3Nzc3N3d3d3d3d3d3d3d3d3d3d3c3Nzc3Nzc3Nzb29vb3Nzc3Nzc3Nzc3Nzd3d3d3d3d3d3d3dzc3N3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3NzhpV9UYm1iUE9TSUhHRkpJSUJBPkJCPEVFREA+ODo4Ozc3Ojc4ODY+Pz07PDk9PDo+PTs6Njc7NjpEQUY+Pz8/PkNBPzs9PT47REM/PjxIT2fZ4N/f3+Dg4ODg4eHh4eHh4eHh4eLi4uLi4uLi1tbW1tbW19jYyH52doN+fnR2eIaCenl1d5yhu6GEgoCAfoeKinx/gYaMnKjO2NjY2NjY2NjY2djY2NjZ2djY2NjY2dnZ2dra2tra2trb29rb29rb2tra2tra2tra2tnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dna2tra2tra2tra2tra2trb29vb29zc3Nzc3N3d3d3d3d3d3d3d3d3d3d3d3dzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3e3t7e3t7e3d3d3d3c35pbT2drXFBRUElDT0pLR0xHSkJAP0JHREBBPDg8ODg1ODk3Njc3QEA/Ozw5Pj04PTw8Ojc4PTk/RENGPkE/QkBDPzw6Pj0/PkVEPz07S1Fj1+Hf4ODg4ODh4eHh4eHh4uLi4uLi4uLi4uLj49bW1tbW19XB3LRueHJze3B6eXaFiIR7eH2AgZiljH98fnuRhZaLhoGDgY6Rvd3Z2NjY2NjZ2dnZ2dnZ2dnZ2dnY2dnZ2dna2tra2trb29va2tva2tra2trb29ra2tra2tnZ2dnZ2dnZ2dnZ2dna2trZ2dnZ2dra2tra2tnZ2dnZ2dna2tra2tra2tra2tra2tra2trb29vc3Nzc3Nzc3N3d3d3d3d3d3d3d3d3d3d3d3d3d3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3e3t7e3t7e3t7e3t7e3t7e3t3d3d6NWFdobllQUUtISlNJTUhNSUtBQz9DRkJBRDo6PDg2NDg4NzY2Nj8+Pjo8OTw7Oj09PDw4Ozw8RERERT4/PkI+Qj84PT8/Q0NCQEE+O0xUY9Xh3+Dg4OHh4eHh4eLi4uLi4uLi4uLi4uPj4+PW1tbW1teslLZ6eHJvd5V7dHuLgHh1bn6Fg3t/hYhyfH2bnI6JioJ+g32Hk5rH1NjY2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dna2tra2trb29vb29vb29vb2tra2tra2tra2tra2tnZ2dnZ2dnZ2dna2tra2tra2tra2tra2tra2tra2tra2tra2trb2tra2tra2tra2trb29vc3Nzc3Nzc3Nzd3d3d3d3d3d3d3d3d3d3d3d3d3d3c3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3N3d3d3d3d3d3d3d3d3d3d3d3d3e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3d7Zf1lgaGxcUUtHR09LTk5PTURGQkg/Q0hEREA6Ozs4NzU3Nzc4NThAPkA7PDk8Ozw+Ojk7OTk7OUZERUI8QD4/PEBDOz5AP0A/Qj8+OjtKVWPV4eDg4eHh4eHi4uLi4uLi4uLi4uPj4+Pj4+Pj1tbX19vKhYR3cXJubniVhHt4hH95dnB4c3eLkY6CdnN9ioaId3d1d4ODfIiIk8Pb2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dra2trb2tvb29vb29vb29vb29rb2tra2tra2tra2tra2tnZ2dnZ2dna2tra2tra2tra2trb2tra2tra2tra2tra2trb29vb29ra2trb29vb29vb3Nzc3Nzc3Nzd3d3d3d3d3d3d3d3d3d3d3d7e3d3d3d3c3Nzc3Nzc3Nzc3Nzc3Nzc3d3d3d3d3d3d3d3d3d3d3d3d3d7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7f0nVZaGlqVk5KSE1OR01EUElGSD9FPUZMREM+Ozs8OTc3OTY2OTU4Pj4/PTs8QDs9PDo3Ozc5OThHREVCPUE9Qj8+QDw/QUE/QEJAPjs8S1Ri1OLg4eHh4eLi4uLi4uLi4+Pj4+Pj4+Pj4+Pj49fX19fEknuJf29sbnV2foSBg4qGfnVybWVtiIaKjoR7c4OHint4e4OPj4GEioqxztrZ2dnZ2dnZ2dna2tra2tra2tra2trb29vb29zc3Nzb29vb29vb29va2tra2tra2tra2tra2tra2tra2tra2tra2tra2tvb29va2tra2tra2tvb2tvb29vb29vb29vb29vb29vb29zc3Nzc3Nzc3d3d3d3d3d3d3d3d3d3d3t7e3t3d3d3d3d3d3d3d3dzc3Nzc3Nzc3d3d3d3d3d3e3t7e3t7e3t7e3t7e3t7e3t7e3t7f39/f39/f39/f39/f3t7e4clsW2pqalNOR0hOT0VIRk1JSUA7RD5ISUA9PDo6Ojg2ODo3Nzk0OD08PT07ODw8PDw4Njc4OTo6RUJFQT9APEI/Q0M+PkNEQUBAP0A8PUtRYdPj4OHh4uLi4uLi4uPj4+Pj4+Pj4+Pj4+Pj5OTX19fZqXaFfnx3bHB3eXh8jH2KhYB3anN0d3p9bot7fnl6foR/gIGDfnh8foeGlrbT2tnZ2dra2tra2tra2tra2tra2tvb29vb3Nzc3Nzc3Nvb29vb29vb29ra2tra2tra2tra2tra2tra2tra2tra29ra29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb3Nzc3Nzc3Nzc3d3d3d3d3d3d3d3d3d3d3d7e3t7d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3t7e3t7e3t7e3t7e3t7e3t7e3t7e39/f39/f39/f39/f39/f39/e3uO9amFpa2lRTkZNTEtKWE1OR0FAQE9BRD9AOzw4OTk5Njg2NjY4NDs+PD07OTY6Ojk6OTU4OTg5OkJERj8+Pj5AQEBCPzxBQD88Pj9BOT5KT17S4+Hh4eLi4uLi4+Pj4+Pj4+Pj4+Pj4+Tk5OTk19fX2sqKhIB5c29tcXN1d4CUeHaAfHWHhXd1cnWgmXp7d3Z5doR0bWxue3iAmouTu9za2tra2tra2trb29vb29vb29vb29zc3Nzc3Nzc3Nzc3Nzc29vb29vb2tra2tra2tra2tra2tra2tra2tra29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vc3Nzc3Nzc3Nzc3d3d3d3d3d3d3d3d3d3d3d3e3t7e3t3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3t7e3t7e3t7e3t7e3t7e3t7e3t/f39/f39/f39/f39/f39/f39/f397js2lpbmloUFBPTExPUk9LU0Y/RURERD48PDg7ODc5OTU2ODY2NzM6Pjs+PTc6Pjk5OTk2Ojo4NzxDRUc/Pzs/PkA9PkE9Oz0+OUFAQDhBTlFc0OTh4eLi4uLj4+Pj4+Pj4+Pj4+Pk5OTk5OTk5NjY2NjauY6AenZ1bmpveHCBfWt0cnZ3hIV5h4d5lY55eXp1d3pza298gHx2fYh8gLLe2tra29vb29vb29vb29vc3Nzc3Nzc3Nzc3dzc3Nzc3Nzc3Nzb29vb29rb29vb29ra2tra2tra2tra29va29vb29vb29vb29zc3Nzb29vb29vb29vb29vc3Nvb3Nzc3Nzc3Nzc3Nzc3Nzc3d3d3d3d3t7e3t7e3d7e3t3d3t7e3t7e3t7d3d3d3d3d3d3d3d3d3d3d3d3d3t7e3t7e3t7e3t7f39/f39/f39/f39/f39/f39/f4ODg4ODg4N/f39/f4qpqa2hrZFNQT0ZQVFJOSFJLPkREQ0I7Ozk6Ojg2Nzg1NjY4ODg0Oz88Pzw5PDw3Ozo6Nzo6Nzo9Q0JDPUE+Pzw5PT5BQDs8PDtFQD47Q05TXNDk4eLi4uLj4+Pj4+Pj4+Pj5OTk5OTk5OTk5OTY2NjZ1p5vdntveHh2cG50d3BwdHBzb36Jc3qGhY2EenNtcoB6hn1vg5OBdnx9g4a13drb29zc29vc3Nzc3Nzc3Nzc3Nzc3Nzc3d3d3Nzc3Nzc3Nzc3Nzb29vb29vb29vb29ra2tra2tvb29vb29vb3Nzc3Nzc3Nzc3Nzc3Nzc3Nvb29vb29vc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzd3d3d3d3d3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3d3d3d3d3d7e3t7e3t7e3t7e3t7f39/f39/f39/f39/f39/f39/g4ODg4ODg4ODg4ODg4N/f3+KgbWhma2ZVVlJHUFFOS0xMRUJIRUc9OD08Ojo3Nzg2Nzc2NTY3NDg+PD09Ojg6OD46Ozc4Nzc6Oj5DRDtDQj49OD1AQUM/Pjw+RTw+PUJNUF/S4+Hi4uLj4+Pj4+Pj4+Pk5OTk5OTk5OTk5OTk2NjY3MB2doCCfnp4eHBsdXlya399bHNvdGdoaYB/aWl4c2d+iYl4cIKGe3d9foWKvd3b3Nzc3Nzc3Nzc3Nzc3Nzc3d3c3Nzc3N3d3dzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nvb29vb29vb29vb3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzd3d3d3d3d3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7f39/f39/f39/f39/f39/f4ODg4ODg4ODg4ODg4ODg4ODg4ODflGttZm5mU1NJUFlUTEhGTkZGRUJGPTs+PDs5Nzc4NTc5NjQ1NzU4PDs9Pjo6OztAOTs7ODc6OTlAQkE8QUE/Pzk/QEJFQ0FAQEM7Oz1ES01g1uTi4uLi4+Pj4+Pj4+Pk5OTk5OTk5OTk5OTk5NnZ2tmYc3uqhJaCcnR1dn14aGx8d2h4d25rcHR5gIJ3dHyBhIJ9c3CAin94gn95g8je3Nzc3Nzc3Nzc3Nzd3d3d3d3d3d3d3d3d3N3d3dzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nvb29zc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3N3d3d3d3d3d3d3d3d3d3d3d3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e39/f39/f39/f4N/f39/f3+Dg4ODg4ODg4ODg4ODg4ODg4ODg4ODh24tubWdzY1lRTVVbV0hDSUZOS0dCRD8/Qjo7OjY2NzU2NzY0ODc2Ozw7Pj86PDk8Qjg3OTo6Ojk6QUFCQUJDQEE+PT9CQ0NEQUJGOTg9REpOYtjk4uLi4+Pj4+Pj5OTk5OTk5OTk5OTk5OTk5OXZ2drcqHGCtXiRfnNsem6EgXaCfWtoan+DeHZ8dX2FhXRmcHl9d316gIqFe318foC03tzc3Nzc3N3d3d3d3d3d3d3d3d3d3d3d3dzd3d3d3dzc3N3c3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzd3Nzd3d3d3d3d3Nzc3Nzc3Nzc3Nzc3N3d3d3d3d3d3d3d3d3d3d3d3d3d3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e397e3t7e39/f39/f39/f39/g4ODg4ODg4ODg4ODg4ODg4ODg4ODg4eDg4ODg4ODg4tiFb3FrdWFWT1VVXE9ETUY+SkdKRUQ8P0I6PDk4Njg0NTY3NDc2NDk7Ozw7OD47PEE4ODo9OD04Oj09QEBAP0FCP0A+QENCQ0FBRTc2O0RMTmPa5OLi4+Pj4+Pj5OTk5OTk5OTk5OTk5OTk5OXl29ra3Z5sbnNxhY1ybXBuf391hH5rcnZ2enN4gXhzbnVwbWt2fHmFiIB/f392coODsd/c3Nzc3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3Nzd3d3c3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3N3d3d3d3d3d3d3d3d3d3d3d3d3c3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e39/f39/f39/f39/f39/f39/f39/f39/f39/f4ODg4ODg4ODg4ODg4ODg4ODg4OHh4eDg4eHh4eHh4eHh4OLXhW1xb3ZeUldTWlpRSkhDQFFAQkQ8OT9BOjw5NzU3NDU2NjQ3NTY9PDo9PTk+OjxAODo6PDY7OTs+PUJCQjtBQkBDQEBEREM8PUA3OjxFS01l3OPi4uPj4+Pj5OTk5OTk5OTk5OTk5OXl5eXl5dPOxsB+cWxveHt2b3VuanNzbZKGeG50dG5vdIZ/b2twboJ0bXZyfY2DdnF/d3mKgabf3Nzc3d3d3d3d3d3e3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3dzc3d3d3dzc3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3t7e3t7e3t7e3t7e3t/f3t7e3t7f39/f39/f39/f39/f39/f39/f39/f39/f39/f4ODg4ODg4ODg4ODg4ODg4ODg4ODg4eHh4eHh4eHh4eHh4eHh4eHi1oZucG1xYFJZUFdfWUpMTElSP0Q9OTtCRjs6OTc0NTY1NzU0NjY2Pj07Pz45PTk7Pjg9Ozo0ODtAQENCQ0FCRkE/Q0BBQkREOz0+OTs8QkxNZODl4+Pk5OTj4+Tk5OTk5OTk5OTk5eXl5eXl5eW5t7Woc3JscHd6dHd4bXFydXd/hHRyc2xsa3F8bnBudGuBf3GAd32Eg355gHNygYqg2d3c3d3d3d3d3d7e3t3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3e3t7e3t7e3t7d3d3d3t7e3t7e3t7e3t7f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f4ODg4ODg4ODg4ODg4ODg4ODg4OHh4eHh4eHh4eHh4eHh4eHh4eHh49WHcWxqbF5YWlVXYFZWUE9QTD1BOjs8RkE4Ojg3MzY1Njk2NTg1Nz89Oz8+OT04Ozw5PTs7NTo9Q0JCPENDREREQUE/PkJDQzw9Pjg5PENLS2PN0dnh1sjY4+Tk5OTk5OTk5OTk5eXl5eXl5eXltbW2q3J5cm59f3Z1d2hqaGlwb3Zta2tnZWZxdG15gG5teXd2iHhxa2podXV5dHV/wd/c3d3d3d3d3d3e3t7e3d3d3d7d3d3d3d3d3d3d3t7e3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3e3t7e3t7e3t3d3d3d3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f4ODg39/g4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4OHh4eHh4eHh4eHh4eHh4eHi4uHh4ePVhnFwY2lhV1NZV19MUk9STUtAPjg5O0E+ODc5NjQ3Njc6NjY2NDk+Pzo8Pzo/OTo6Nzo9PDk5PEFBPTtBQ0VDRkA+Pj5BRUQ+QEE3OD5GSEpesrW4wbm1u8jg5eXl5OTl5OXl5+fn5+fm5ebm5ra2tbWOfX5weoR1cnZnYmNlbGtyb2ZpbHZtd4Z9hXlsbHd4a3ZwfH14c3V5fHd2h7ng3d3d3d3d3d7e3t7e3t7d3t7e3t7d3d3d3d3d3t7e3t7d3t7e3t7e3t3d3d3d3d3d3d7e3t7e3t7e3t7d3d3d3d3d3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4OHh4eHh4eHh4eLi4uLi4uLi4uLi4eHj1Yd1bl5uY1pUU1hXS1NLSk1SR0E4Ozs+PDk4NzU2NTY2OTY4NjY5Pzw6PT07Pzo7Ozk8PDs5Oj4+Pjs8PUFEQkNBQEBBP0JDPDw9Nzs+REVKXrG1tLW2t7e2y9rJ3uXl3eDi3tXU1tPU4OPg39+2treuh3t/bnmNenJ1bWNobGxtaXR4enF5enqIh4N6aWh9cWRvcXyGgX55e318e4an2t7d3d3d3d7e3t7e3t7e3t7e3t7e3d3d3d3d3t7e3t7e3t7e3t7e3t7e3t3e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t/f39/e3t7e3t7f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4OHh4eHh4eHh4eLi4uLi4uLi4uLi4uHh49aGdmxhb19dV1lcWlJQSEpXTEVHPUA9Ozs9OTY0NjU1NTg2NzY3OD87OT09PDw5OTw6Pjw6OTg+Qjs7Pj5AREBDRUFAQD0/QDw9PTU5PEJHRl2xtbW2uLm5ubq9uMPT0r3BwcC6u7y6u8TMxb/Dt7e3hGl1gX1ndYd5Z3Vxa2t5eHB3fH15bWl3e3h3bml1j4FwbHl4d3d9gXuGgnmAoNze3d3d3t7e3t7e3t7e3t7e3t7e3t3d3d3d3d7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t/f39/f3t7e3t/f39/f39/f39/f39/f39/f39/f39/f39/f39/f4ODg4ODg39/f39/f39/f3+Dg4N/f4ODg4ODg4ODg4ODg4ODg4ODg4ODh4OHh4eHh4eHh4eHh4eHh4eHh4uLi4uLi4uLi4uLi4uLi4ePXhXJrZ3RhW1hYX15TVVVRVUpMRj9JRDs5PTY2NDc3NTc4Nzc3ODk8PDo+PDg8Oj0+OTs8OTs5P0E8PT9DP0FARUJCQTw9Q0A6Pjw1NDlER0dasbW1tre5ubm5ubm3ubm4uLm5urq6urm5urm6u7e3uX9ucHN6b3B/eXNuc3Vsc3Z4cXFwb2tvcX6Bc2mHhIF9dHOHdW11hYmBgHJ2hafd3d3d3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7f39/f3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f4ODg4ODg4ODg39/f3+Dg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4eDg4eHh4eHh4eHh4eHh4eHh4eHh4eHh4uLi4uLi4uLi4uLi4uLi4uHj14lxa2xyW1dXXWBUUVVUUFJPSkNATUE9Ozk2NTM0NjQ2ODc3Nzk6Pjs8Pjs5PDo8PDk8PTw7PT0+PUNEREBDQkE/QD48PkE8OD06NjY6QkpIWLG1tLa2uLm5uLi5uLe3uLi5urq5ubi4uLi6uru3uKx7cnhxf3ZzfnBsbXpyZ29sbW50cHt3d3Jyd3pvhpJ2f3x8enZ5fH9zfYdyda3T393d3d7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e39/f39/f39/f39/e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f4ODg4ODg4ODg4ODg4ODg4ODf3+Dg4ODg4ODg4ODg4ODg4ODg4eHh4eDg4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4uLi4uLi4uLi4uLi4uLi4uLi49eHb2pxalVWV2FbT1FSUE5XSURESUo/Ojk6NzUzNDk1NzY2Nzg4Ojw7PD46PDo6PTw5PDw9Oz09PDs9REdEQ0E8PDw8Pj5AOzg8ODE1OkFGRVautbW1tre4uLm4uLi4uLe4ubq5uLi3t7i4ubq7t7mqcnB4d3x7e4J3aG5xam9qY2lyf21zcn54dHFsanaAeX2AgH91doB1a4qLgHaR1d/d3d7e39/f3t/f3t7e3t7e3t7e3t7e3t7e3t7e39/f39/f39/f39/f4N/e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t/f39/f39/f39/f39/f39/f39/f39/f3+Dg4ODg4ODf4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHi4uLi4uLi4uLi4uLi4uLi4uLi4uPYhm1sdGVWUFxnWE1YU1JRWUVDS1BOOzk4ODc1NTM5NTY2NzY4Nzk+OT0+OTw5OTw7Njg5OTo8QEA9PkBGQEJCQDo+PEE9Pzs7OzYxNjxCR0RQqLa1tba2tre4t7i4uLi4uLm6ubi4t7e3t7e5ure2tIlyd3h9iXxwem99c2hqbGdnbHRscXd0cWx2c3Fxd3FyfHl4g3Z7d2mLkYp9kM7f3d7e3tvY2drZ297f39/e3+De39/f3Nvc3N3e3uDg3+Dg4ODf3t7e39jS397f397e3t/f3t7f3t/f3t7e3t7e3t7e3t7e3t/f39/f39/f39/f39/f39/f39/f4ODf4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODh4eHh4eHh4eHh4eHh4eHh4eLi4eLi4uLi4uLi4uLi4uLj4+Lj4+Li4uPj4+Pi4uLi4+Lk14NoZ3VkVlVkZVdKWllXW1Q9RU1LSD04NzU3NjQzOTQ0Nzc1Njc5PTo9Pjw9PDk7PDk5Oj45PD4/PkFBQ0FFRUQ+OzxBPjw5PDs3Mzc+REhFSqG2tbW1tbW2tre4uLi4t7e4uLi3tra2tra3uLm2traLfXpsbHp/cGx5dm5qaGdlcXp4b2lvb3B1c21zd4Fnb32CgYNyf3lqcHJ6f6ng393Zy8a/vL2/vsLN0tDW3tnc4NfQzcPCw8PH1dfT2dzX1NjX0MfExce9vM/Kz87Y3djO3N3c2t3T0dze39/e397e3t7e4N/f39/f39/f39/f39/f39/f4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4OHh4eLi4uLi4uLf4uPi4eLg4d7W29/Sw8rJx9Hb3OLk4eHg2dre1sbExcTN2trf5OHi4trX3st9aWZxYVleZWFNTFRLUlpMO0hNSEZBPTc2NjUzNDY2NDg3NjU2OTw7Pj46Pjk5PDk3OTs7Oj49PEBAQ0RCR0ZCQT08Q0A9OTw7Nzc3P0RGRkaZtrS1tbW2tra4uLi4uLi3uLi3s7W2t7a3t7i5tba3opdxb29waW50dnFmZWNrbmdvcm1mZ2tygWVvdnyAeGRzj39zaHFyaWVlbm+w39HFv7u5ubm5ubq6uru6vc3Gw8e/urq6uru7u8HCvcHFvby/vry7urq5ubq6ubm6w8XDucDDwby/ube/z8/U3tjc3t/g3tLa4N/f4ODg39/f39/f39/f3+Dg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODh4eDg4ODg4ODg4ODh4eHh4uLi4eDh4uLi4uHa2t3RwsPCu8XT1uDdydPDrrnAsaqrq6uwtLbJ0sXRxLG4v7Srq6usr7S0vMzE1c60tLureGxtbWBdYl9ZS1NVVFFQREBRTUhEPzo3ODU3MzE1NjQ5ODQ2Njo8Oz08ODw5Njo6ODg5NzU8PDw/QEFAQkRDQkE8PkI/Pz09PTc1OD5DRUNAj7a0tLW1t7i4uLi4uLm5uLe1sautr7Oxs7OztLS0tqaei2tue3ZxeXhnY2hfcXdha25vaG99b25ja2lseHdsa4Z+bHB6dm1scG95sca8uru7urm5ubq6urq6urq6urq6urq6urq7u7q7u7y7urq6ubq7u7q6urq6urq6ubi3t7i4t7e2tbW1tbi3u8e+w8XHzcS4wMnH0tzZ2d/e3uDf39/f4ODh4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODh3Nji4uLi4eHh4OHg3tfGxtHQztTe3tPO0t/SuLi8sq2trKysrrG+ua63rKipqamqq6urqqqqq6ysuKyqqqqrq6urra6urq6urryzrayrpHlub21fXl1dVE1SU1xUSkE/UElIPjg5NjgzNzMwNTczNzg1NzY2Ojw/PDg5Ozo6Ojg5OjY1OTs8Pj9EP0NFQkNCP0BAQT9APjw3ODc6QUVEP4W4tLS1tbe4uLm5uLi3t7SurKuqqq2urq6vsLGzs7WjcG5ucm1wg311aWFlaGZkY2Rxc21td25naW1tZXBzb29zcXN8h4F6dX11n7u6uru7urq5ubm6urq6urq6ubq6urq5uLm5ubm6urq6u7q5ubm5ubq6ubm6ubm4uLi3t7e4uLe3t7a2tbW2tra1tbW1tba1t7e3t7rBvrzGycrb3+Dg3tvd3d7h4tDW4uHg4ODg4ODg4ODg4ODg4OHg4OHi0768zNjd3OLg0dnbxL23sLCxsa+zu7uzsLS9s66urq2tra2sq6qqqqmpqKmpqampqqurqqqqqamoqampqampqaqqqqytrq6urq6urq6sraR4aWJxZmFZWlZRUk5cU0Y9QlJEQTc8OzY5NTY1NDU2NTk3NTY1Nzg7Pjw7OTk5Ojg3Nzk3Njg8Oz47RD8/Q0BBREE+P0M9Pjw+Ojo3Nz9DRj54srCztLW2t7i3trKurq2sq6uqqaqtraysrq+xs7S1t4xucnRqaIB5ZmpmZWxdaG5waGxxYmNmcoJ+dmhobGpueoaBhXx4cXF5gK+6ubq6urm4uLm5ubm5ubm5ubm5ubm4uLe3t7e3uLm5ubm5uLe3t7i5ubi4uLi3t7a2tre3t7e3tra2trW0tLW1tbW2trW1tre3t7e3t7e3tre4v8bP0MS+v8DE19e8ydra4OHg4ODh4eDg4ODh4eDb3t7Uzby3tre6wMDJxLfIvrKwsLCwr7Cvrq6ur7Cwr66urq6uraytrKurq6qpqampqampqampqKmpqKmpqampqKmpqKmpqqqrraytra2ur66trK2heWpjbWdiXFhRUFFLVEpCOklRP0E3PDk0OjU2NTQ1NTU4ODY4Njs6OTw9PTs6ODY2ODg6ODY3Pj09PT5BQUVCQkNBQUBBOj09Pz05Ojc9QUc8bKqmqKutsLGwrqupqKqrq6mpqamrrKytra2usLO0tbilgIdvaWdzdGZrcG1qZGxvcm5rbWNrcHyJhG5qbHx4Y3uKfnNqc25rcY+7ubm5ubm5uLi4ubm5ubm5ubq5uLi4t7e3t7e3t7i5ubi4uLe2tra3t7e3t7a2t7a2tra3tra2tbW1tba1tLS0tbW1tra2tra3t7e3t7i4uLe2t7a2uLm4uLe3uL6+uLq9vcfb4OHg2Nnd4eHg3dfKwcPCurm5uLe4uLi3tbS0tLKysbGxsLCvr6+vr6+vr6+vr66ura2srKyrq6yqqqmoqKmppqepqaehpaipqamoop+hoZyip6inqausrK2ur7Cwrq2unXdwbGphY2BZUU1RTFJGQzlNUEU+ODs3Mjc5Njc0NDM1ODg3OTc7OTo9PTw6Ojk3NDo5ODY1OD8/QEI9RENDQ0FDQEJBQDtAP0A/PDw6O0NIPWOopaWlpqioqKenp6ipqqmoqKipqqqsra6wsLCztLW1taWYdn5xZmt4cW9tZmVsaGNsZ2ZpaX11bWlvfXZ5hWZod294b3Fvcninu7m5ubm5ubm4uLm6ubm5ubm5ubi3t7W1tba2tre3t7e3t7a2tba2tre2tbW1tra3t7e2tbS0tLS0tLS1tLS0tLW1tba2tra2t7e3t7e3t7a2tre2tre3uLe2t7i4t7i4uLi4wMXTyry8w83PyMC9urm5ubq6ubi4uLi4t7W0tLSzs7KysrGwr6+vr66urq+vr6+uraysrKurrKysq6ehoJ6gn5udoaGdlpmkpKaon5mZmZmanZ+gn56fpKqtrq+ura2srJl1cGlrY2FeXVVOU0tSREQ4TktHQTo4NTI2OTY1NDczNzc3ODk3OTo7PT0+ODg4NzU6OTk1OD9AQEFEPkZBQkNAQkNCQT88QEJCQD0+OjpERj5cpqWmpqampqanqKenqKioqKenqaurrKytra2ttLS0tbekc311bnONf3JmanFjaW1jaGZobG51aV9jZ3VzdnpuZ3Bwcn56cYihu7m5ubm6urq6urm2s7a1uLm2trW1tra1tbW1tbW3tra3tra2tbW2tbW1tbS0tLa2t7e3tbS0s7O0tLW1tLS0tbW1tra2tra2t7e3uLe3tra2trW2tbW2tra2tra2tra3tra3uLi3uri4uLi3uLi5ubm5urq6urm4t7e3t7W1tLS0s7OysrKxsbCwr66urq6urq+vra2srKuppaSmpqScmZubmpmampmXl5eXl5aZm5iZmJmZm52en5+dnJ6gpKWko6OioqKQdG5jcGFeXltUU1RIVEo/PFFCRkM7ODYzNzo1NTQ4Mzg5OTc4OTc7OTs9Ozc6NzU2OTk4NTg+Pz9ART5CPz9DPzxBQUI/PT9EQT8+PTk9Q0Y/VaSlpqanqKeoqamop6ioqKioqKiqrKuqqaipq7W1tba5o3eKcXKHhnd0cGh5a2JjYWVsaW5zal9jZWNjZWprYmRqbHaXjX6ovbm3tre5u7u6uLWxrKurqq6wrKyrq62tq6uvsLGvr7CytbW2t7W1trW1tbW1tbW2trSvr7O0tLSvra6vsrW0tbW1tbW2t7e3t7e3t7e3t7e3t7Owsra1tLa2tre3tra2tbW1tra3t7e5uLi4t7e3uLi4ubq6urq5uLi3t7e1tbS0tLS0tLS0s7OysbCvr6+vr66vr62oo6KgnJqampqZmZqbm5qampqbmpmZmZiXl5aYmZmZmpycnZ+foJ+goKChoaCgoJ+fi3RuaXRdYGZeUlRLRFRJPUVTSEVCOzo0NDY5NDQ1NzM4ODg3ODk5Ojs7Pz04OjkzNTg5NjM5PT5AP0A6QEJCQkA/QEJCPz0+QUFCPz06PkVDQFGjpqWlp6inqauqqKaoqKipp6ioqKinp6ioqaq1tbe3t7KZtH99kIx1Z2lqbGZjYGNoZW94cGlicXx5cGpmZmRma3NqhYystrKwra2ttLeysLCtrKuqqaiop6ipqampqKinqKipqaeoqqurra2sqqytraysrq6traunpaSnqqyopKOkpamwsbGztbW2t7i3t7W1tre4t7e3t7Kppaasq6ivtLa1s7W3t7a1tbW2tra3t7e3t7a2t7e3t7m6urq5uLi3t7Wxs7S0tLKxsK6sq6yurrCxsK2rqqmqqKijnJqZmJmYmJiYmZmZmZmZmpqZm5ubnJybmZeYmpqcnJydnJ2foKGhoqKioKGgoKCfnop1amtuWVxhVktPREdVRz5PV0hEPTw4MzQ0ODQ1NDgyODk4ODk6Ojw5OUA8Njk6MzY3OTE0PD8/QEBBOkNGRUJBREJDQTo7P0FCQz9APUBEQ0BPo6empaemqKqqqqakpqenqKioqKimpqaoq6uttba3t7e4rbJ1cHuDdmBiaWtiZWZhZGdmfYh5bHKAfXFvcXhjbW5xZo+srKurq6ysra6urK2trKyqp6WmpaWlpqioqKiopaeoqKioqKeoqamqp6Wko6KioqOioKKioaKhoKChoaKjpKOjpaWlqLC0s7OzsKuqqaqztLa3trGopaOioaGipKiqqairs7Sxrq6xs7W2tra3uLi3t7e3t7e3t7a2uLe0sa6ppqerrKmnpqWkpKSkpKWnqaajoJ+enZycm5uampmZmJeXmZmZmJiZmpqampqampqbm5mYmpydnZ2dnZucoKGgoaOjoqCgoKCfnp2FdGtsaFdYU0pHTUVITUdAU1dGRz09OTM2Mzc0NTU3Mzg6Ojk6OTw9OjpBPDY9ODM3ODgzNztAPz9AQDpCRUNAQkRDQT87PEBDQkNBQDxBQ0A9TqKnpqanp6mqq6mkpaWlpaaoqKippqanqKmpqrW2tre3t7izc2h7c2JnamtpaWJhZGloXV1tfHJma3J/fHR8bm1zc36gqamrq6uqq62trKusq6mpqKWjpKampqWmp6eqqaamp6enqKinp6iop6WkpKKhoaGhn56en5+fn56foKGho6Wko6OkpKSmp6enpqWkpaampqeqraumpKKhoaChpKWlpaempaeoqKalpaivtLa3trW0tra1tbOwrKupqa6rqKWlpqampaSkpaWlpqWkpKSkpaKhoaGgnp2bm5ucm5qamZiXmJiYmJiZmpmZmZmYmZmZmZqZmZydnJycnJybnJ+fn6ChoaKgoKCfnZ2cgHNrbmReU0pITUZETEtFRFFTQ0c9PDgzNjI4NDY0NjQ4OTg6Ozk7Pjw5PTs5PTczNTk2NTY8QD0/QD88P0JDPkJCQj89Pj5CQ0FFQD86PkVAO0+jpqWkpqeoqaelpKWlpKWnp6eoqKanp6alpqa1tba2trW2uYptcW1vfHxxZ2pmYGFsYFROW2hqbm9tgYJ9cWdxdn6aqKeoqqmpq6urrKqqqqimpaWkoqOlpqalpaWmqaqppqWjpKWmpqSko6Kio6Khn5+fnp6cnJycnJ2dnJ2en6CioaKjo6KhoqKkpaSioqOjpKSjpKSko6Ggn6GipKanp6ipqaelpaSipKSlqK2wsKyrqqusqqmnpaWmpaWlpaalpqioqailpaWkpKSlpKOjpKOioaGhoqKgnp2cnJubm5qZmJiYmJmam5mXl5eWlpeXmJiZmpqcm5qampubm5ucnJ6goKGgnp6enpycm356bnJiXlNNSlBFRk5NQkBPRT5JOz01MzYzODM2Njc1Ojs4OTs5Oj49Ozo5OT03NjY5NjU2PkI+PkE/PT5DQT5DQ0BAO0BAQkJCRUA+Oz5FPzxQoKSjpKOjo6SkoqSlpaSlpqamp6empqalpqaltLW1tbS0tbiBaHx9ZXOCemxwdWFfY1ROT1FbaGxpbGxxbW5xbnScoqSnqKioqauqqqqqqaempaSjo6OjpKSlpqalp6ytqaShnp2epKShn56foKCdnJ2dnJycmpqam5ucnJubm5ydnp6foKChoJ+goaOioKGjpKSjoqSlpaWkop+go6SkpKapqainpaGdnJ+jpaipqainqKioqaempaWkpKSlpqampqampqenpaWko6Ojo6KioqGhoqKhoqOkop+enZ2cmpubmpqZmJeXmJaWlZSUlJWVl5iYmpubnJuampqam5ucm5ucnp+fnpucnJyam5p/fnF0YFtUTUdNSEZMSj8/TkM8QDs8NDM4Mzc0NzY3ODs9ODo6OTk7PTs7ODk9Njc4OTU4OD9APT9BPjs9RD89REA/PzpAQUE/QUVAPjw8Qz88Tp2ioaKioKCipaSkpKWlpqenp6empqampaampbW1tbS0tLS3jHalsXdmc3Jvc2xjZGlYT1JRT09dgG1kYFptkZGSoqKjpaampqenqKiop6alpaOioaGhoaKjpaempqesq6imoJ2cm6Ghnpubmp2cmZiam5qampmZmZubm5uampqampucnZ6goaCfnp+hoJ6foqOko6Omp6inqKWioKGhoaGkpaWlpKCcmZmbnqOmpqampqanpqempaOlpKWlpqiop6enpaWlpaWkpKOjo6KhoqKioqKhoaKjo6Kgn56enZybnJubmZaUlJSTk5OTk5SUlJWWl5qam5ubm5qZmZqanJ2dnZ2dnZuampqamZqXf3dvc11aTkhKTkdFRklERU5APD09PDQ1OzQ2NDY1Njc5Ozg5OTg5OTw7PDc6Ozc4ODg1ODg/Qj9BQTw+P0A8PEJAQT49QT4/Pz1CQUA6OkA8PE+doqGfoJ+dn6OkpKSlpqeoqKenp6ampqampqW1tLS0tLS0tbSXtqd1Znh2Y2xjY2VjW1JTU1JNXqCMeFhodpajnp6hoaOjo6OjpKSlpqalpKSioaGko6OjoqOlpqamp6enp5+bmpuioJqWl5Sam5qXl5iZmpqYmJqampqbm5qZmZmenZ2goqOjo6KkpKWinqGhoaKjpaampaSjoaCgn5+hoZ+goJ2amJiZmpygpKOjpKWmp6alpaOjpKSkpKWnp6ampqampaWmpKOjo6SjoqKjpKGfoKGhoKGgoaCfn56dnZyamJeVk5KSkpKSkpOTkpOUlZaZmpqbm5qampqbnZ6enp2cnJybm5qamZmZlH10bHReWk9IRUdGQkVORT9GOzo+Pzs0Njo2OTM2NDY4ODo4OTc4ODo8Ozw5Ozs6OjY3ODk5Pj9APjw9QD5AOjlAQT89QT8/QUE+QUE/Ojk9PjpQnaCfnZucnJufoqOlpaWlp6iop6ampqanpqantLS0tLOysrGwsK2rkHiGj36bmn93Yl1TUlFRTGKgootaiKCgn52YmZycnZ2eoaGgpKenpqWkoqGjp6alpaOipaampaanpqagm5mboaCXk5KUmZqcmpeXl5iampmampqam5qYmJmaoKCgoKGfoaKipKamop6gn5+goaOko6Khn56enpyanZuZmpqZmJeZnqChoaKioqKkpaWmpKSkpKKioqKkpaWlpaWlpaalpaOko6KioqGgoKGgnp+fn5+fnp+foJ+cm5qZl5WUlJSTkZCRkpKSkpKSk5SVl5iZmpmZmpqam5+fnp2cnJycmpmZmpiXl5F8cmdxXl1QRj9BRD9KT0JCRjhDRT4+OTg7Nzc0ODQ1OTo6Ozk3OTo8Ozo8PT48PDo2NzY5OD4/QT47Pz49PDg6PkFAQUE/P0FCP0RBPjo4PkE8U5ycm5uampycnaGio6KjoqSmp6alpaampqSjo7KysK2rp6amp6alpqiln6iop6qnoXmEXFFST0xcnKCAYpmgnp2clZOVlpeZmp2dnqGmpqampKOioqanp6ajpaampaWmp6amop6cn6GgmJChrJeXm52YlpeWmJuZmpqampqZl5iam6Ghn56fnpybnJ6goJ6dn56fn6Cio6SjoqCfnp2ZlpeXl5iYmZubnqKioqKioqGio6WlpKOio6SioaGhoqOkpKSko6SkpKSioqKhoqGgn5+gnp2enp2dnZ2dnp6em5mYl5WTk5SUk5KQj5GSkZKSkZKTlJaXl5iYmZqampyenZ2dnJubmpiYmpmXlZaNempmamBiTkY+P0A9SkVAQ0A7QEE8Ozs5Ojc2NTg0Njc4OT04ODs6Oz87Ojs8Ojk6Nzc2ODs8Oz08Ojo8PTw3Oz5DQkRDPz1BQ0FEQT88OkBCO1eZmJqamZmam5ucnp2foqKhoqSlpKSlpqSioJ6op6alpqWlpaemp6ampqakpaanqKehqXJOUU1KVJahenKanJyenJeVlJWWmJiXl5qeoqKhoqOkpKOjpqalpaanpqWlpqelpaOgoKGhn5mZmpaYm5qenJaXl5eZm5ycnJqamZeZm5uen52cnZyZmZqcnZydnp6fn5+hoaCgoaKgn56bl5WVlZeanZ2fn6GhoqKio6OhoaCgoJ2cnaGioqOkpKOioaSlpKOko6SjoqKioqKhoaGfn52cnZ2cnJ2dnJ2enpqXlpaVlJOTkpKSkpCRkpKSkpGSlJWWl5iYmJiam5ycnJycnJ2cm5mYmZiWlJWXi3hsY2RiZFFHQT1DO0tIRDo7Ozw+OTo6OTo3Mzc5NTo4ODg8OTg7OT09Ozo7Ojk8PDc2NDc/PDo9Ozw/Pjw7ODxBQ0FDQkI+P0NAQkFAOj9APztZmZiampqam5ubm5ydoKGhoaGhoqKioqKhn5+dpKWmpqenpaWmp6ampqWkpKalpKSkpaaGUFJQT0+PmHB6mpubnJ6cnJycm5ubmZiYm56dnp6foKOkoqGhoqKipKWkpqWlpKSjoqKhnZycomqJm5yam56amJiYmJqcnpyam5iWmZybnJycnJydmpqbnJ2dnp6dnp6fn52cnJyhoaCblpWVlZacn6Ggn5+hoKKjoqOhnZuZlpaWlpicnqCip6ikoaCgoqOjoqKioKCgoJ+fnp+gnp2cm5ucnZydnJmanJuWk5KSkpKUk5KSkpKSkpOSkpKRkpSVlpeYmJiYmZqcm5qbm5ucnJqZmJiXlZWWl4d3ZGdoZGJNQ0U8RDlJSkU5Ojs9PTo6Nzg6NjQ3OTU8OTY4OTc5PDs7PDo6PDs6PDw4Nzg3Pj07Pj46Qj86Ojo/QURCQ0FBQD9EQUFAPjpAPj06W5qYmZqbmpubm5uen6CgoaKioKCgn5+enp2dnKWkpaanpqWlpqakoqKio6Oko6Kjo6KnllRYVVJOZ21rgZ6am5udn6Cgn56enp6dnJ2dnJ6enp+goaCfn6CgoKGipbapo6SkoqGhnpqZpYFWjpuampienpiYmZmam5qWlZeWlZicnJ2cm52dnpybnJ2cnZ6bmJqeoaGdm5udoKKhmpWVlpaZoKKfnZueoaKjop+em5eXlJKSlJeYmZ2goqenpaGgn56goaGioaCfnp2cnJubnJubmpqZmpydnJmXmZaVk5GQkJCPkZKSkpKSkZKTk5OTk5OTlJWWlpeXl5manJubnJucnJqamZeXlpaVlZSEcmZsYmRbREJMPT84RktCPEA+Pj05Ozk6PTg1ODg2Ozg1Njo4PDw7Ozw8Ozk8Oj09OTU4Nzw5PD88OkE/Ojo6QEBDQkRBQ0A/Q0FAPj08QD09Ol+al5mamJeYmpycn5+foaGhoJ+fn56foKCenZ2lpKSko6OioqOjoZ+foaGipKOio6SiradXXl1UV19ua42dmpqbnJ2dm5ucnZ+enZycnJydnZ+goKChoaGgoKGgoKeqsKigoaCenJuanaJZXZSam5yZnJ6ZlpaWl5eTjo6QlJabnJuam5udn52cnJycnJ6dlpSZnJ+in5ycnZ+hoJuXl5mZmpycnJubnZ6fnZqXlpaWlJOTlJiampqfoKGmpqWgn56fnqChoaCenJubnJybm5ybm5qZmJmZmZmXl5iVlJKQkJCQj5CSkpKSkZGTk5aYl5STkpSVlJWWlZaZmZmam52cnJyampmXlpaWlpaQgG9vZV5gV0BKSDg/N0lFP0VBPD07Ojo8Ozs3NTs4Njs3NDY6Oj47Oj0+Pj07Ozs+Ozo4Ojk5NkBBPTo8PTo6OT9BQ0JERUM+P0FBPz8+Pj89PDtgl5WXl5aVl5mbnqGhoKGioqCenp6enqCgn52bpaWkpKSioKCfoJ+dnZ+hoqOjo6OkobCjXWVkYGFua4GenJubm5ubmZianJ2enJubm5ycnJ6ipKGeoKGioqKhoaCmooCrpZ+enZqZmad/VWaVnJ2em5manJiXlZWWkY6Nj5KYnZycm5ycnqCdnJucnJyempWVm56foZ+dnJyenp2cmpqampqampqbm5qXl5aTkpWVlpWTlZaam5qanZ6foqWjnp6fn5+en5+enZ6fnZycm5qbmpqbmpiZmJiYmJiYlZSTkZCRkJCQkZKTk5CRk5SYmZiVk5SVlZWWlZaXmZmXmZqenpyamJiXl5aWl5eYjX1ubV9lVlRFSzw3PjdSRUM+QkE4Ozw7OTg6ODY7Nzc6Njc5Oj0+Ojw8PT49PD06Pz06ODw9OTtAPj4/PT45OTs/QkNAQ0VDPT9DQj5AQD5APTw8YZWSlJWWlpeanJ6goKCgoaCgnp6enp6gn56em6WlpKSioJ+fnp2dm5mbnJydnp+gn56rmGNpbW5pZm2enZybm5ybmpmZmZqam5ucm5uam5ygo6SgnZ+en6CgoKCgn6p3dq2inpyampyka2FplZyfnpyZmJqamJiYmJKOj5OXnJ2bnJ2cnJycnZycnp6dnpqVl5ygoaGfnp2eoJ+cnJuampqbmpqYmpmVk5OTkpOWl5eVlJiYmZucnJydoJ+gnp6enp+fn56en6KjpKKgnp6cm5qam5uamJmZmJeXlpWUlJORkZCQkZKTk5OSkpOUmJmYlpWUlZaWlpaWl5iYmJiXmZqamZeXl5aXlpeWl4l4dmddX1dURUU5OTs8WT5AOEI/OTw8Pjk4Ozg6Ozc5OjU4OTs9PDk9Oz0+PD0+Oz8/Ozk+PDw+Pz5AQUE9ODc7QkNFP0FFQz1AREJBQEQ7Oz47PGKWk5SUlpWUlpiYmZubnJycnZ2cnJ2en56dnJqkpKSkoJ+enpybm5qZmJiYmZucnZ6cpolla3R4bVuFop2dnJydnJqbmpqampydnZ2bmpuboKKinpucnZycnJ6fnp2ojGmMq5ybm5ygl25pa5adnZ6cm5qanZqam5yVkZOXm52dnJ2fnZycnJycnZ6fnp+cl5idn6GhoJ6cn6CfnJubm5qbmpmZmZmZl5WWlZaYl5eXlpaYmZuenp2dn6GhoJ+fnp6fn5+dn5+hoqKhoZ+fn5yZm5qcnZuampmXlpaYl5eXlpWTkpGTlJSTlJSUlJaZmJaVlZeZmJeYl5eXl5eYl5iXl5eXlpaYl5eVl5eDeHZfW11eUT1GOjk4P1VDQTtDQzo8Pz86Ojk3Ozg4ODc0ODk8Ozw4Ozs8PTo8Pjk/QT06PTw+PkA/PUBBPjk2PERDRUBBRUU9PkVERD9COzo8OTpkl5SVlZaUlJSUlJWXmJiamZqcnJydnp6dnZybo6Oko6CenJuamZqZmJiYmZiam5ubm6WJa3F2em9lmp+enp2dnJybnZ6dnJ2enp2dnJydm5ygoJuampubm5udnJuao5F5dZ+cmpydoIhraWuSn5ydnpybmp+fm5ydm5mZmZudnZ2dn52dn5+dnJydn5+fn5uanZ+goJ+dnJ6gnpubm5ubm5yampuamZudnJqZmJeYmJiYmp2foKCgoJ+hoaGgoJ+en5+fnp6foaKhoJ+enp+enJqam5ubmpqZlpaXmZmYmJiWlJOUlJWVk5OVlZSVlpWVlZSYmZuamZaWl5WWmJiWl5OUlJGRk4yRkJOWfXhqYWJiXFA8QDw2OENWSERCOjg7Oj47Nzc5Nj06OTk2NDc6Ozw9OTo6Oz87PT08QD47Oz46PT89PkBBP0A8NztBQ0U/P0REPj9EREM+Qj07PDs6Z5aTk5OTk5OTlJSVlpeWl5aWl5mbm5ybm5uamaOjoqCfnpuamJeYl5eXmJmYmZybm5qkgGpqb3lzcZegnp2dnJydnp6enp+enp2cnJydnp2bnJuampqam5ubmZmamqOUeHyFmJqcnpl9amdskp+cnJ2cm5qdn5ucnJubnJubnZ2dnJydnp2enZydnZ2cnJ2dm5uenp6dnZybnpubnJycnJydnJubmpmbmpmYmZmYmpmZmpyfn5+jpaKfoaKioaGfnqCgn5+fnqCioaGhn5+fn52ZmpucnZqZmJWWl5aVlZaTkpOUk5STkJCSk5GUkY+OkJGOlZabmJWYlJmXlJiRjJCPk5yTkoyFjIeDhndxZ2pkW1xRQT44NkJHYEJFR0A+Ozw7Ojg4NjU8ODo4MzQ6Njk9PTk5Ojs9Ozw6PD48Oj5AOj5APjw/QD8+PDg6Q0FEPz5CRD8+Q0VCPUJAPDw8OmeYk5KSk5OSk5SVlJWXl5aWlZaXmZmZmpqampqkoqCfn52bmpmYmJiXl5iZmJmcnZ2cqH1nZXN7enOJop+enp2dnp6enZ2enZ6enp2dnZ6cm5ybmpubm5ycm5mZmZqgnIuegH6YoJyFjYFmbZSgnZ6dnZybm52bnJybnJ2dnZ2dnJ2dnp+fn52cnZ2dm5qbnJmZnJ2dnZ2dm5uanJ2dnJycnp2dnZybmZeVlZeXmJqam5ubnZ6foqOhoKGhnJucm5ubnZqcmZycn6CfnZiZmZmUkpKUl5SPj4+OkYyNiYuQi4mLjpGRj4mQmJiQkoyNi5KQj5iYoqiqpqWlrKOmoZqep6eyqKKVo6Cfl39wcWlsXFtcTUY8NzdHR1g+SE5URjk+Ojg5ODc1PTk4NzMzOTY6Pjw6Nzo8Ozo6Ojo8PDs/PjtAQD47PT5BPDw2N0A+QkA+QUY+PEFEQT1DQj49PDlmmJSTk5OTkpOUlZOVl5iYmJaXl5iZmZqampqaoqGfnp2cm5mYmJiYmJiYmZmZm5ybnKx/am16f3lxh6Genp2cnZ6enp6enp6dnp2dnZ6enJubnJubm5ubm5yZmZmanKehkXFlpqyhaIGNeWuXn56fnp2dnp6dnJydnJ2dnZ6fnZ2fn56goJ+enZ2dnZybnJ2em5qbm52enZ6dm5ubnJ2cnp2cnZqYl5SRjo+QkJGVmJSWlJiZmpudmJuYlY2Mjo6TkpKRj4mQjpGRjo+Ki42NjYiIi4+Lg42NkY+MkI2Qk5WVnJihoJySn6SipKmam5eanKOprb3Bwbq8uL26ucC8ubq3uru7tL2zwbV/bnVmZ1peWUxJRTo7TElTPFZSSUM6QTo7Ozc3NTo6OjgyNTY4Oz08OTk7Ozw5Nzo4Ojw6PT85PD8+PDw9QTs5NTg8O0A/QT9EPTxBQkA8REM9PT06YZOTkZCUlJOTk5OTlJeYlpeZmJmYmZqbmpqamp+gnp+fnJqZmpqampmYl5iZmZmZmZmphXB1e4B3b4mhnp6enp6fn56en56fn56dnp6fnp2dnJ2cm5ubm5ucmpiZmKGtkndlZqaXmlhnfX94nZ6goJ+enZ6hoJ6dnp2enZ6fn56en6CenZ6enJydnZ2cm5qYnJuVmJqamJiYmJmSjJCXlKCXk4+MjYqKiImMiJORh5CPjYqKkJCLjoqMi4+IiImJjpGOjYaFiYaKhoWLiI+SkJCNkJKXlpKamJ2TlJ6kpqaqq7Gsr6+rpquqsbm5tbS0rqyvtMDIxcXBvsbDxMTDurW+t7a0s7C2tb6qcHRyXGZfXl1JRj8/RUtMVklcTEQ/PUI6Qzk5Nzc7OTk3MTc5ODo+ODg6PDw7OTc5OTs9Oj4/OT5BPDs+PD46OTY5PDpBPkNBQT08QkBAPkJEPj8+OVyHhIOHi42KiYaFgYqMkZOVmJiHlZaWkpiampmenZ+gn52ampubm5ycm5iWmJiXl5ibqo56dXZ7f3mCoJ+fnp+goKCfn5+foKCfnp2dnp+enp2dnJqbm5ybm5uYmZenpXhOSnCbhIRSRGF4gp2bm56dnZycoaGfnZ6dnZ2dnp2dnJiWlpaYlZWSlpmWk5GKjI+PjI+NkIuLj4+WiYiEi5GZjn2Fi42PjYyHioyQm4yRj4+Lio6TjIyNjIiSi4yFiYyPhouIh42KhYyEj4qXkJOYmpWbnKOqoaKknKKrsbe0ubWxtK2vsrKlp7O6sbq6vLa3tsDDw729vLa/urq8wbW4wL60r66mqa+3mm58Z1tjWl1fSEU+QUtJU1hZXkFGOTk9OkY/Pzo3Ozs7NjM6Nzo5Pjg6Ojw9OTk4Ozk7PDo+PTtAQDs8QjxAOjg0Nzw7Qj9BQj4+O0NEREBDQz0+PjlhmZWLkYWNj5aSiHl9e3+Fi4OKgoqJhmuAeJCLlpqRnZ2UlJGTlpeampiWk42Sk5KQm5uIdndzcX1/cpGgnZubm5yenZ2eoKGgm5uWlpucmpubnJuYmZqYmJmbmpqXq5lONzx0kn1wUz82YXqOko2SkY+Uk5KXm5mYm5ePjpCLjo2Ch4uLi4qLiI2RjIeHhoqIiZGKh4yEhYqNi4qNhI+UkIyDkJOUmZWQi5OTkZWRlpWOj5GMlI2Oj4qIj4ePhoeJiYmNiomJioWNh46JmJKUmpuXmKChp6Cko5qqqbO2sbWwqKqiqK6tn6qvsK21ubi8wr/BxLixtbCutrOwuL68ury+urOzp7G3wpB1gGNiXlpXUk1IRkVQSVlXX1tDUDpCQz1HRj84Nzo6NzU1OTc8OTw5ODo9Pjo6Nzs7Pjs7PTs9P0E7Pz48Pzo4NDM3OkFBQEI+PjpDREM/QUM7PT45Z6mloqKZn6CippeUiI2CiIJ1h4iKiIp7e3Z7enmPeoiSfn18en6CkYWBgH1zfH99fISHfnRweHZzfHaBj4iIiYeIioyMkZicl4iOhIuNi4iNkZCPi5GPi4yPkJGQlq1zVHBXfLCpmVpnbkhrfYiCjYuGiYp/iYqGiJiRiIOIg4KFfIuLjIaJi4iKkIyIi42PjI+Wh4mLio6NjY2Wk5OdnJyalpycm56bmpuYnpeTkZWWkJKRi4+LlpSMjYqDi4SEiYyQkIqOio2LipGJjZOTk5SVk5KcmZ6Xn6CfpaKvsamupKSfmKStpqa4t6ysu729wsPAv7+vpa2wsLS3uLO0uLa0ta6stK+4tLaBeXpjZmBeVlFRQUVMT0lcXl9UR0dCS0xCREA9ODg7OTU3Nzk3Ozc9PDk9Pj05Ozg6O0A8Oj06PkJBOD88Oj84NjQyOTtCQD9CPj04QEI/PkBEO0A+N2CloJqXnaGaoaCPl5efl5WCjaCfo6GdmpKOjIxycXBvdnFucG1ucHZub29waHBxcHR+c3FycXd7cnl2d3Jyd3Z6e3l8fXt/iIGEi3+PkYaNi4yGiouLiYeEgYaDfpakXIWbfMrFscWdfp16UHiCgpKQhoSEhY2DhIyPj4+IjY+Hi4iRkJWRjpCKk5eOj5WYp6SfnZWYlpaln5udq6aqt7W4srGnr6qnpqGfmp2WkpWVkYqPjImTjZuVjYuLhoaJjJWQkJCLmZKVlZSbkJiTlIyNkYyWl5WilZ6mqauno6OqsJucpp+mq6G0vb6zs7+5u7u6uby9rqiusa6wuLyztLGxqrCpqLGxsqild3J0X2hhYFRWUUlKSFZNXl5eVExKRVFKRUdDPTo5OTc0ODY4Mzg4PTo9PD47OTs4Ojs/PDw+OT9DPzg7Ojg8Nzc2Mzc5RT4/Qz89N0BAQT0/RDw+PThUj4yGh4eUjJWZl5yWmZaNlZyWlZydoKCdmpiWeHFubXJ4cXFsbnJwa3FvcG1yc3t1dnd5fnVxeHZ0d3tybn98gX15eH1/eYOGg4WCg5CLkIuLi46Pi4mJhYKCfn6SkXLP183Vppy5vGtdcl1ngIWOjYuGjZSSi5CXj5SXkpihlp6WlZunpp+goKawq6GjpbW0sqqmqq+isba5vcK7ucO+vLi9uLWxrLCsppuSk5mfm5SPk5WOmp2doJqfn5edo6qsoZ+em62hp6qwqaampJiRkZWUo6SirKSss7Szs6i3tru4sLKvra2yt7a6srW6s7e5u7i8urayr6yxsbKztLOxsa2us7Gzs6yhl3Zxc19jXlJRVE1PSUdYT1pcZFROR1VPRURKRD44Ojg3NTg4ODU5Nzo6PTw/Ojg8ODk5PTs9PTpCPj84Ozo5Ojk4NjI1N0I+P0RAQDY+P0I/PEM8PT46Tn98go6MjJOTl5eaj5SWjZaRkZSXk5qanqGdnHJvcnFxcXFxcG5zcW91dHJxdneAdXd8eYV+d3t8eX1/fICJiYmDfXp/h4GIiYGAgIGGiIKGi4eIhYSIiIqEf4J8mXea0b3H08fBtJx3pahjYoqKjouNkJmclJSUoJqan6Ktsa6ppKWtr6ysrLWuvrmtrqm1sLexq7G2rK+9wsLAvrq8trKutraxtK66u7OurKepp6unoqmtoKmooq+wuLSxvLq6urK0ta+8tLezt7e7t7mtrbCprLW5sbeytLe2sLu7vLu6ury1vLi0wbWsqqqrtLG3uLm1trSzsKymrrCqq7Cxq6yusLKxtK6qo5N4dnJlZ1tMUlBFTUlTV1JlXmdUUExcUUhMUkNBOTk3OTU4ODY2Ozc5Ojs6Pjk4Ozo6Ojw8Pj08RD45Njs7ODg+OTUxNTZCRkREP0A3Pj5DPjpBP0BAO0t/gomXmJSdlpabmIuSlo6XkZGVl5SZl5+bmZx8dHV2dXl1c3RudnJzdHV2d319gX56gXyDfoJ/fYB/hIKFj52RiYF/go+Xjo6HgoCBiIuFfoqRjH+IjY2Li4iSjJtvoqaVuayioYmFdmHIi1qIiomQj42PlJSYkJWcmp2eqK6ysLC1tLOtsrW4sLy1tbGqsKqztbS7t7SztrS1r7i4t62noqassLCvtre3vrW5vLOysa61u7C0r6+yu7axuMC9tLS0s7izvLq2tLrAvbm6ubq+ubm5vrWysa+yr6q1tLGzsbSzrri4tb+vpKaoo6ussa+zrq6wsKytq6qroqKmqKKnrauqpaynoqeYeHlxZmVZT09NSVJNV01PX15cTlVVYlFEVE07Pzk8ODk1ODc1Nzk1Ojo6OTs4Ojw8Oj08Pj4/P0I9ODY6Ojk6QDs1MjY2QUZDQz4/Nz49Q0I5P0I/PjtLjpGTmJmVmZGTopiTkpKLk4uOkI+Vl5ablZSbhoJ9enh2dHRzdH53end2gIKDhouMhISFioaQiYeRk5aRjZaalY+IjI+emJaVkpCTl5qamZGeoZ2Tl5uhmp6co6CdhJN8j6WNhYt3dXBsppdhgY+LmJqPj4yUmpecnZugnaSstLm6vK+2tLi0tLK3uLmzq6+qqKy1srK1rrGrrqa3s7OxpaGotbCvrayrtbqyu7q6tLK3ur67ubG4sLmtqLK4u66ttLS3tbu2trm5vLe0r7G0t7a5s7e1pq2pq6ior6yprq2up6KxtLG0q6aop6Cjq66oqq6orLKwr6+pqKGeoaGjpqOgopqlo56ol3J3bmdiVUpUT09KRFBLX2JYWlFcVGBNSFJJQUA5Ojg2Njc3NTg5NDs5Ozk8Nzs+Ojg8PD0/QkBBPTs2OTk5Oj87NjM3OD5GQkJAQjk+PUBDPkBGQj44R5OWkZWTkpSQkZ+ZnZmVkI+Sko6Mk5aWko6RlZGSkIaBeXJzdXuBhI6HhZGTkpicnJiVkJWYo5yaoaeqqZ+clpeVnaKioZyZnpmlqKyvramnqqqpp6KlqKmsqqqvp5Z+WHKGeXmAbWtpdXh/eHqgoaSem5qkp6Spq66spaSoq6+xtK6qrK6zr6ystLO0ua6urayqrLKwsK2wqKqmsrS0uK6qtrqwr6qurLC3s7i0t7W0u7y4tbWxtauyrKiys7uvrbGytLa1sbG0s7OvrKuvs7a0sayutKqqpqWnrauoqKupqqifqbOwqqeppaOio7CtqaatpairrayppaSioKWipaOYmZyVnqKippdudWVnZFdPWUtLSktTVHBiWWRXX1tcUlpQTEM8ODk6Njk4NzQ3NzQ4Ojw6PDg6PTk3PDw7PkM/QT47OTo5Ojs+PTg0NThBREVEQkM5PjtAPkI/R0Q+N0KSm5SVlZaVj46Wl5qZlZGKk5SSjo+SkYqKiY2Ul5qTjYmCho6VkZSfmpuin5+jnqGhn5ijpKelpaapqa2rqaKmpKilpKGfnqOjra2srairrq6rq6ykoaKlqainq6mFcFJgdHFyemlmYmlrcHyFoqmnoKKhrqyrqqetrqilpKmpqqmmo6iqqaekp66wr7Ovq7Crqq+yr7Czua+rqLCxrrCyubO0r62vtbCss7GurLW1tLSzs7CvrKyqrKusr7G0s7CwrrCwsKyqrauqq6alrrCysKumqbCvqaOkqaunqKaopquwq6mvqaaoqaalo6iwraqpqKKpo6WnpKGhoKKloZ2el5aYlJugpKmUbnNeamlfVlpOUk5RT1NlXGVjW11ZXFBZT0tAPDs5Ojc6ODczNTMzODo9OTo4OTo5Oj08PEBEPkA9OTo8PDw+Oz45NTo8QkFFQUNBOT47P0BEQENCQDdAkZ6YlJeZlpGHi5SSl5GIg4mLk4+OkI2Hh4SFlZmWmJeZlpqeop2ZnKKkoaCdn5qfoKGgpqGgoKCjo6KlqKmrramqpqOmpaCloKaop6aoqaepqaSoppqdpKaio7CYcGlPVnh2dHxoYWRmX19ufYqgpKCgn6GhqKCcn6GloaCmo6KfpKGspp6foaGkrKqnrKivq6e0sa6ur7WyrKqwq6mtrbWwrq6srreup6yqpKivsq+sq7Kvqqqpq6utqa6urrGxraqtqaunp6uoqauinaapqKilqKisqKilpKWop6iopqmsr6+oq6mhoqKlo6Opq6ymqKWjqKKhoKSdnZ+hoZ2bnZ+amZWcnKOqlG9zZm5yZF1dUFVPWE9eZGRsaGJiWlpSVE9NQTo9Ojo4Ozk1MTYzMjg4Ozk5OTk7OTk8Oz0/Qz5APTk7Ojs8QD0+PDk5PEFBRUFGQTo9Oz9BQUJBRUI4PYqWlJOYmpaPiISNjpGSjIiIiI+JiZCRjoqKiJubmZygpaKlnqKjoZqeoZyanZ6bnKOop6ugoKOYoJ2XnKGjo6WjoqKkrKilqaCepqmnq6mkn6Kgo6eipq2nsLKpfGljSVJzdXiBaGBjalpbYmt1g5GdoaCdoKOZlpqYo6KipJ+ZnKGhoqCbmp6goaSgnaejqrGorqusqaSqqquorKalrKqws6+rq6mwq6appaWoq6ynpqevq6Wnq6upq6irqqqrrailqKOmpaesqayoopykoaOmo6qpqKano6SnqKanqKepqKupoaKoo5yepqWjqKino6WlpqmgpJ6inpeYnZ+doqKlnpiUlZ6go5d1d2t2eGJfXFVZUVVXW2Nfc19oX2NTUVlUSD48PTg7OTo4NTM3MzM0Nzo4OT05Ozo5PDxBQEM9PT44Ozw9PEA/Qj86ODo+P0NAREE6Oz49QD9DQ0VDOTyCmJmenZ2alZKKiZGRl5GQh4SJgoGNj4+Sj42cnZ+hpKmlqaeorK2moqKfmKSmo6Stsa6yp6asm56em5qjp6Cfo5+foq+rq6yoqKuvqaiqqaKgoaiprbW6vL2sim1nYUJabnB9fm5hX2ZbWWFhaHB4f42aoKGimZaem5+fpKGblZigoZ2enJudnZuZmZWen6Oonp2iqKGaoaOmoqSoqaqoq7CxqKWlp6eopKWpqaqnoqWmqKadnqWloqClpaOlpqCjpaOjpaelqamqpKekpqKmp6SrqaenpKGlqKynpqWlo6OopJWdo5+bnaCjqaeopqGjo6mooKiioJyVkZqfn6GmopuXkpCamqCVfHdvfXlmW1tgX1pcVlxoZG9jbWlpYl5QUEA/Ozo4OTg8OzYzNDMzMzc5OTs8OTs7OT49QkBAPTs9ODw9QD08PENBPjo4PT9EP0M+Ojk/PEI/P0FEQjk6gJ6kp6Kem5+gmY+ZnaCWloqGj4iEi4qTl5SRo6Wnqq6trLOys7S4t62pqqevtLKxqq6usbKusa2lq7OssbGpq6+rq6y2sLSwq7GysaOgo6uqp665wcbMxbeljnJoaVo/U3BvcWx0aGFhWlhfY2FianF2e4yfp52eoZqWnqScm5aZoqefoJ+joJuUlpmWl5qfoJmVnqGZmJ2dpZ2gpKeqqaiqraylqaSlqqeqqaqsp6SkpKOimZmhnpqaoaCfpaWYnqSmpKqooqelpaGqp6mnp6ejqKWmpaGkqKesoqekoaalpaOVl52Ym5mVo6elpaSfnZ2lo6Kqo5+amZiXnJyaoaGakJOTl5ibjX93cnZ4amJbX19cYllgZG5ta25hX2RgUE9BQDs7OTs4Ojk2MTQzNjQ3Nzc6PTo8Ozk9PUI/Pj89PDo/OTo7PD5CRUA9OTtAQT5DPDs5PzlAQEBAQkM7OXuao6OcoJ2dop2Zn6KioJibmJaYkpSQm5qWl7S0rrW4s7S4tre0uLm3tbm4ub28uKqLnLK4vLS9urW7uru4s7q/uLe5u7G3r6iusq2inaCqtL/O2dvOuquciG9gYWJTQ0p5a2BibWxbW1daWV1bWl5jZmZod4+lr6elmaGko52goaKooaOgpaGck5mYmJmco56cmpudl5uZlqWam5+hqKmpqKuvr66pqKirrKytq6irp6WjoJyfo6Ojn6Cipammmpyip6Spn6GjoqKgpaanpqSooJ+ipKGjoqiop6OloaGopqalo5mbmJuTj6GknqKfmJiVoJuhpaCfm5udnJuamZugmo2YmZiTkYaAdnh4eGNbUllUX19hbWl2a3BoaWliWlNMQDw6Ozg5Nzk3NTU2Mjg1Njc3Ojw7Ozs7QD4/QD0+Pjk6PDk2Nz47QkZCPDg7P0NDRDw+OT43PkFCP0ZDOzhwkpqblJ6bm52Vl52doqajopaXnpaXl6GblJi+t7G4uba3t7i7l5S2vbu9vcDFtaK7mKC3v7+6wcm0nbu2sra/xcGooLa0urGqrrSxsLK0tbzO2t3UwKSKdmVdWVpcU0pDbWqUnpRWVFhXXVxdXVhVV1tpfpWqwce6tqGnqqynq6mlpqCnoKGmoZOWmJ2foqSjnZ6coaChnZekmpmdoKaqqqqtrq2tsLGrrK2sqamrrqimpaalpqSkpqaeo6eppKGcoKKjpqCio5+jpJ2foqWgpJyboZ6fo6GhpaSlqaOkpaKkp6ehn52elpOcoJiZko+MjJeWn5uWnJqdnJqSlpSUmJOQmp2YiouHgIB8gnhhXllUYWlgZnRvdGl0ZGlkYltMSz46OTg5ODg5NzM0NTI1NDY2OTw8Oz08P0E/QEA9Pj44OTs4Njc/OUJFQzw7PD5DREM9QDs9Nz1DQ0BFQjw3Z4yRk4qalZiblZWYm6Knq6aVl5iQlZmhnpeXvrWztLu6ubi5woeYt6u4u8DCxbOjw6e4s72/tMTHvbS7uL62wMTErqCworW2tb2+wcTHw8O5vcDGztHNt5J1ZFtZWldTSVVvqrOmTlVeYWJfX19md5Cnur7BxcW0trapr7Gwr6yqoqajrJ+fpquXmqifpaWfoJydoKuwsKyiq5yYm6Cor7Kys6uorre1sq2tqaalqKulpaStqaShn6Cnnp6mqKmmnp+anqGlpqmcnaObl6KmmpuanZ+cmqGcmZ2eoKijn6GfnaWioKOioZSZmpmTj4qLhI2Qk5uPjpiVm5eYkJORkomNl5iYk4uKi32AgIVwYGJfXmtjYm54dXdubVtiUlZcTUc7PDk3OTc5Ojc0NDQxNDM3Njg8Ozs8PEBAPUA/Pj8+Ojo5Ojc6Pz5FRUU8PT1AQkJCQUE7PDhAQ0NARD87NV+MjIaFlouUlZeYl5ifpqellpWVkZebn5ual7mxtrO5vLy5urWqsryxvsG0vMe5uLuuv6fGw7/KxsnIxcXJvMLHx7+xsKe8vL7FxMbJx8XGu8XBxcbBvrzMxLCRb1xVWFNQU6G1m05ZW11dYG2OqrrBtbmpp7G1q7WyrbOtqa6vp6awr7Ktqq+zpKu1qaeopKCgnqmyuL61tbWqqaausre4t7apq7i8ubexr66noqOop6SfqKOfnqCZoZydoqSnp6GelJuaoKGlnqChnpajnZSQlpiboZqflpORlpSin5qenJudoZ6kn56VnJiPkpOPjImTkJefiZCWkZuUmJGRlZaDjJWXlpKLjIh8foR/amZoYWtsZ251cnJ1cWdeYFxSSUU/Ojo6Nzg0ODw3NjU0MjMzNjU3PDo7PDs9QD4/QD48PTk5OTs6PDw+QkRFPj49QENDQkREOzo4QkJCQUNAOTJbk4iEjZGKi5GRlZCSmp2fnJOSmJSdnZqXmpW2sbm1tb6+tri1uLO8vMTEusPHwb+0s8XFxr/CzcfLzsvLx8HDxsfIysXExcO7vLzBxcHFxL/Dw8bGwbGSv7/OzryVaVhXWkyZuZNMVFlXYH+mvLCmq6yypqqpqautrKmlpZ6pr6uyu7q4u7e5t7O5uLOurLO0qrC1ub3Bur6+vL60urm4u7qysbS8u7q7s7Oyp6Smq6uioaCdmpudmpyXmpuenJygnZaclpuZnZ6io52UnJCNiY6OkZ6bnJWNh5KLmJiWmpybmJybnp6cmp6UjpiYmpSRmZeeoZWYmpKXlJWRlJqYk4+TnZaSi5F+enx/dWtsbmRvbWlxeG96amlhXWdhUUZEQTw5OTc2NDQ6ODQ2NTMzMjY1Nj05OTs7PT47Pj49Oz05OTs7Oz89QUNBQkFAPEBDQ0NFQjs4OUQ/P0BCPzsyV5uQkZCQh4WSjo2IjZCTlZGPjZSUm5STlpqRs7e4uLi+u7C1sri2tbbAw8G+w8LAvru+u7u8xMzEzNDLxsa/xcfLyNTLysjGv7u7vsS+xcjGxsTExLm1wLezvMHGvql5WFVRireGTFNVXYSgprevpa20tK2upaSjp6SgoKWZqrSxvsG+urm6uLW0srG0tLO6wL7Av769u7u9vsDCt7a3tru7sru+ubi3u7a3tKyoqamrpqijnpOampyYkZKZl5GRmJqXnpiWk5acm5+elJOJiX6GiIuWlJiZkYmVkZeWlZmbmpaYl5idnpyhmJWZmZyYl5ybn56jnJ6WmJeTl5yZmZyUlp2UlpOJdnl5e3dua2lodlpncnhzeWZmXmRbUlhJRj87Nzg4NzYxNjk3NDQzMzM2NDY7ODo8Oz08OD0+PDo7PDs9Ozs+PkRBQURCQEBBQkNDREM9OTlCQD8/QD89MkyWmpaSk4yKmJCKi4yOkpKKiIaNkJiKj5CUl7O7tba/vb2xtrjBvby0uL/Bsbi3vsHFvbu8wsbJv8jOyMHEwcfKysbKxczIzcbIxb/DwMvNz8rGxMPEwsW+uL3Bw7/HvZZsUlppWlFSZJSrn6a0sq2suLWyrKmjoa2prKetn6y1tL/Cvrm4vbawrausr7W0ur7Fv7u8urO5u7i5ubWtsLS9u7G/vLiytrmzubu0ra2orKyqqaeXnpualY2MmJSTi5WWlJyZl5WWmZKYn5mQiop+iYqKkY6Vl5OUn5mWkJSZmJmWmJOUm6GeoZiYmp2ZmZaenpibopqdnJuYmpuZlpeXlpyZlJyYfoB4eXV1ZWZpamheam9ueXhjYmFgXlhXRkU4Ojg6OTc5NDQ5NzY2NTEyMzM0Ozo9Pzs9PTo6PTs8Pjo7Pz48QkBDQkJFQj0/Q0NDQ0RFQDk6QkFBQj5CQTVCkJeUlZmSj5qQjpKRjZSVi4qHjI2UiImPkpq2u7S8xsHEwr3BxcLAtLO9v6ywr7rDysPCvs3IxbfByMW/wcLIy8rCwsTJzM3Oz8zDx8bIycjIycfFycfIx7/Ex8TExsnOypxWSE9Qa627t8C9vrm8ury6vKytpqm7urm3v7K1uLLAxrq3t8Gzsa2tqau1s7u2w7a2vbWxt762s7e4sLW2v7uwvbq0q7CxsbO8urOzrqutq62xnaOjoJqQjpiXlZCclpaYlpWSnJmTm5+clpGUjpWQiYyQlZOUm56YmZKSnJedlJmSk5aZmJ2VnJ6do5yVnZ+TnKKcnKCfnaOemJSVl5ebmpmgkH99cXRxb2NhZ3Zpamp0bnlsXWRbVWBZTEhDNjw5OTg4OjUzOjY2NDQxMzUyNTs6PD47Ozw9PDs8PTw7PD49P0E/RUFCQ0M+QEFARUVERUE7Nz5DQkI+Q0I4O4+akZaalJKUjZCUlI6VlI6Pi4yJk4uIkJObt8C6xsXEw8zCwcS9vrWvt7uvr7O6wMfFxMHMy8W2ucDCwsTHytHLwsPExsnFzNDNx8zJwsLHwsvLyMfMyc3FxcXDxcTJy9HTpFJMYLDHwMnNxsTBxMfBvL60sbCwwr6+wca/vri2w8K6urbAvrWyrKmvsri+tMC0tLi0t7nEua+8vrm+v8K/tbq2q6qsrq+wt768trSura2utaSlqKimmpycnZyeopydmZOQkp2VmKCdmJiVmZmZl46MlH2QkJefmZmYk5GToI6Nko+VjpCUlaKdnKSem56elpyjoKGipKOkop6amZubnJ2enIN9cnx4cGdga2p3bGlmdW90Y11iVFdVU01HOjc7OTk3Nzo3NDg3ODQ1MjM0MjU7Ojk+Oj08Pz04Oz05OTk9PEBBQEVCQUJBQT9AP0RFREVAPDk+QkNCQENBOjSAoZeUmZiVkImUk5aTiZGMlJGOiJaKi5CXnMXLw8O8wMPHwbm9vbu4tre3rrK3uLzAwsDCx8bHurzAwsTHyMbSycHDw7+/vsTLyMrLyby8yMfJzcjDyMnJxcXCw8HCxsbGyM6KSZPOzMfM0MW2v7/AwLq7vbWzs8C/ub/DucC3u8G8uri7ub27srCvsKy5wri9ube1t7q9xb24xsjCwcLGwr28tamurrCwr7O6t7m2sK+tr7OppquprqannqSlo6OjoqCblZiekZecl5GRlZeZlZmRlJiSlYyYo5qcnp2FiZ+TfJKWlZKUlJennaCipJ+en56foaGkoqKjoaOinJ2fnqOhppl5enl/cnBmZWdjamRia21ub15ZXVZWTlBKRjk5Ozk3Njc3NjM3ODk1NjEzNTI3PDs8QDs/PDw6ODo8OTk4Pj1APz9GP0JBQz89QT5ARENDQTw5PENBQ0RBQDozbKKdlZedlo+PmJiZmIiSjZGVkI+Vjo6TlpbKy7u5urnBu7q3vsG8vLu5sa61uri4u8S6vsC+vru8wMXBxsK+xsK5u8O6uLm8vsHHwca7ucjIw8XEwMPBwcDEwcK+vcHAwMDFqk6k0czFydHBr729uLm7u763tLG5vrO8vrG5tbi7try0tbm2uba5t7GtusG6vMG/t77Ev8bDw8fHwrvAwr/Cv7iys7O1tLGut7S3tbSxrK2xp6Wlp7CtqJ+nq6ajqKWmpqCgn5SYmZSRkZWUl5OYl5qhnZ6hnKGdoaWglpSbkZeXmJqTnpmZqaSlpKWdoqCanqCkoqOcoqGjoJ6cnp6ppaiVfXuDeG5mYWRiYWNjZGpjZ2NbWlpdWVFPRT07OTo7Nzc5OTY0OTk6NTMxNDUyNzo7OkA9Pzw8OTc3Ozo5Ojw+QD8+RDxCQURAPz49QkRCQkI+OjlCP0FCPT44NVmfnJiTmZaRlZiYmpeQkZCQk5GTlJKSkpSUxce4tbq5wrm5vMPFwri7ubGxtry6tbnAu7u5tre0tLW/u72/ub66urTAuLW3sq66u7fAt7zKz8G7v8C8u8S9usDEv729uLzAxK9TnMzEwMHJv7DBv7q3u765tbi0uLy0vbi1tLCzvLG3t7i/tr25vb65t7q+u7/Axb29y8PGw8TAw762ubq2v7i7v7y4trOyq7CwsrWzs66sq6emnqeurauiqKumpqqjp6iqo5+Ym52bmpicnJiXnJuhpZ2anqGhoKGmoJqbnJiboJ+dnJ+coKiho6SknaKfmqKgop+el6Shop+dmpieqKWhi3x5iH1xZGFiY2hqZ2dpZWleVlZUWU9TTEY4PzY7Ojc3OTs2NTo7PDYzMTM0MTc7OTg/PT47PDs3Njk5ODo7PUA/PkA9PT9CPjxAQUNDQT9DPTo2PEBBQDw9ODdJlJibj5OUkZWYlZGWkpWRkJGUlZSTk5OYlcHCwLq8ub62uL7EwMKxvbqytLO4vLW3vMC8vbS0sbC1t7W7wbi+ub+8vLe0t6+ut7W5v7vB1Y68vrvDtbrHt7a5u7y4ubW6xMmqVJPIv7+7wb65xr3Cv7zFuLa3tLi2tru7uba0t7q1s7i8vbm/ucPAwLu5vLu+vcjEvcfEw7rAvb62sra4srm0usLCureysaysq62yr7Kur6ijpJ6rrKyqpKakpKiqoqemraihoaGmn6Oiop6bnKKfoKOdnJuhn6KgpKCem5eZn6GdnZ6eoaWkoaKioZ6ho5yinqCZnZijn52eoJqZoKKmnYR6g4F5cW1mZWZwamVraFhZT0tLS1JKTEhEOT44PTs2Ojs5Njc8ODk4NjA0MzE3OTk7Pz0+Ojw6ODg5PDg6Ozs7PD1BPj09Q0E8P0NDREA/Pzw6Nz5CREE/QDg4P4mYmoyMkI+Tl5WMkpCakpGXmJaUlJKQmZTDvsbBwby8uLi6v7a8scK2tLyxtLa4s7q9v768sq2vrLGwt7y3u73BxLm3t7a1ubm6u7+8z8V5rcu9x7e5uK22tLe5s7Wyu8XKn1WLyr+/vr28v8jDxcW+xri1srK9uLi4vrq6uby6urS3u7q5v7zEwL+5uri/ubvFxr3Fw8Kyur27sa+2uLO3s7q+wLm2rLGrrqmqqa2qqq6mpKWnrq2ppaOio6GkpaWmoqato6Klo5+ho6Gcmpyhn6CloaCenZygnaWgnpeVmZ2fn52gn6KmpaCknpybn6Ofn5mcmZ2epJyWnKOcnqGcppZ+f4d9a25xZ3FrdGZibmBcVEhLS0RKQ0NHPzo7OD48Nzs7OTc4Ozc8PDYyNzUxNjk8PD08QTs8Ojs6OT45Ojs9PUA+RD89PkRAPz9BRkQ/Pzw9OTc/QUNCQEI5Ojl3nJiLh4uQkpOWjY+TmpOQnZiSkY2PjpiSvbfHvsO+vbu+vL22uri9ure9s7OwuLi1uby7wLeqraSusLi7sr2+u8S2tbi1t7++xLzCxNevdoS+yM/CwLiutbW7vbe5sb7Dx5Rchs7Dwr++vbzHzMfHxMe9tbW2wb27u7/CusDCv7y2t729vcHBwL+8ube8wru3v8W7wr++tbe8vK+vt7awtLO6ubq7r6mtq62rrKaqoqeuqKWqra2vp6Sgn6ajnqKjqKOjq6Oiop6dm5ublJaZnJyfpZ6fnpmYnpejoJyXmZqZmqOjop6jo6egpqCbnaCjnp2WoJmcoKCblJegn6WcmKKQgYaAcmZsam50b3hjZ2JcY1FLVUhFRUNHQzw7OTg9Ojc6PTo4OTs3PD01MzY1MDY4OTo8O0A9PDo+PDk+OTk9Pjs/PkM8Pz5APz4/P0ZEQEE/Pjo3P0BDQz9APTo4ZqGYj4uNlZKVlY6PlpmVl5uVjoyMjY+bk7m2wbS/vLm8w8C+wLq1trKywLmvsry8sLe7tru8qqqjsLm9vLK8vrzFuLG4ubzGycrCx8nRm3R3sdHRzMrEtbq/xMi+vrS+v7+FanrLxsK+wby/w8zKx8XGwLm9vMS/v7/CyL3Hx8XFvLrEv7vBv7rAvLu7wMS9t7nCub69t7S2uLqur7WxsLCytre0t6yurKqsrKuoq6Gms6qlra+trKippaOkp5+io6Onoaeiop6cnZyamYyQlpeZnaKZnpuVkp2UoaCdmZ6fmJimpqKfoqKmoqeloqCko6GbnaCbnKKfl5WVnp6kmpafiYGDgnRvbGx0bGxuX2NeYWJOSE4/RUA/REM7Ozo6Ozo4Ozw6OTw+Ojo+NDQ1NTE5OTo5PDtAPD89PTw4PDs6PDs7Pz5DPkI+QD89Pz9FRUJBQj87Nj9CRUQ9QUE6OlmfmJOSlZqVmpOQlpeclZuZlpSVkZKTnZm2uLaxuru6vsG5uca7trWypb69tLbBv66zvbS4wbGwsbS7xdDCur68xL63vMC/yc/HyMrKwoh2d6jMzMvNysbCw8vOwby4vLmvgnxtvMjEwMC/xMDKycPDxMO5w769ub+8wsbCyc7Hxr66xr26v7m3wLm5vsDCvrW0vLi2u7CvsrK1r7Cvrqyus7CzsrirsbKxqrCrq6yrrLatqKyusqarrKmpoaWgpaakrKSmoaChnqGgnaCMlJeTm5+mmZ6emZOYnZ+gnp2eopuYp62ooqSgoKKqpqmhqKGlm6CgnZ2jn5SYmKKdp6Gfm4J7eoh7bW14fGBxZFteX19UST5DRUlCQz5DOz42OTo7Ozs7Ozs7PT05PTU2NjIxODo5Ozs6QTs/PDw+Nzs8Ozw9PTw9Pz5BQUE/P0FCQUVDQkRAPDY+Q0RFPkJEPztTmZuZmJ6dmqCalpyZn5KdlZ2boJWWlJqYur20sLu8wcTCv8XGura5sqO7vbS3xLuwtbq2ucS4tLy3u7qs28O+tr7Avr66ppyqs7fDwKZ8enyfxMbLyMHDwMDJysG/u7mxo5iKfrDIxcS/wMG/y8fCwMjAusK7urO6usG+wMrOysS9tby8ub+5ubW1s7/Avre0s7S4rbeqr7CwsrGvq6+nr7ausrG5rra2uLSzsLGttrS6sa6srranrLKsraSjoaenqLKrqqWkp6elpaCml5ujn6SmraKeo6KanaWiop+foaWenrC0sKSlnp+kqaevp6mgq6CiopqipJ2anqGmp6+psZWCe32Cem5zeHRocF5cX1xaUUVFRE1JQUQ9SDs7NTk7Ojw8Ojs7Oz0/Oj01NDUxMjc4ODs8O0I8Pz46OzY6PTo7Pj0/QD87QUFBPj4/QkBBQkJFPjo1OkFCST9AQkA7TJqdnZ6fnZienZmampySoJWbnp+blZGRl8W+urbDvMbCvr/Ixbe1uLe2ubu0r7e3srWzt7m8u7a7u8W2ba7Ovba5wLyqfW5obm10gpeZdXt/nL6/xsC5wLy+xcS9vbixr6esl5edysPDvL2/v8PDvr/HvLy/tLSutbW8vr/OzcvCt7K4t7e9ubuxtrLIwLu2tLGwt6yzqbCtrbS3r6uuqrG1r7Gvt7O6usC/tre2sru6wLWyrbO3rLC6r7KloqWrrK+5s7KosK+xr6qiqKGkraitrLOun6inpqWmq6Sknqaqo6ayuLOrpZyfp6anrquqpbClpaWbpKOYn6exrLW4sLKOhHl/fHdsdntxbmlcYGBZU1BBRklHS0BFQ0g8PTY7OTk8Ozo6Ozo9Pzw9NTU2MTM2OTg8QT5AOz1AOzs5PD04Oj08QD46Oj49Pj09PkBCQkJBRD03NDU9REc9Q0I/PEWUnqCgoJyXmpiYlZmdmZ2fmp2bnJaRj5LDwMK9wrzEvLy7xbu3s7e2tru7s6CWtayvsbS0tLa4ucDNsXaCs722tcGkhmlaXmBOU1tccHZ6haS4t8K6s7u3u72/uru7r6KssqKogr7Fw768v7u7uLbBwrW/urWur62wvcC5z8rJw7GwtbS0vbq+urq7ysO7uravsL2xuK+ys7C3vbaur66wt7CsrLK2vbzEwrq9t7bAv8G3tbC2srGzurGxr6err6u2v7e1qbqztbmxp6uop7ausrG1uaisrK+qr7CqqKessayytr20saykqKuoqKusq6i2qaaonqadmKOuvLG7wbSmiYF7gnpzdnZ3b3FhX2ZdW1VKPT8/R0Y9R0NDOTo1Ozk5Pjw8Ojo8Pj4+Pjg4MzE1Nzg5Pj9BPzs6Pz08Oz09OTs8OTs6Nzs+PT1DQT8/QUJEQkE8ODU4PUNGPUREPzw/iZ2en52Xl5WUk5aZnpubmpuYlJ2Uio6Owb7Dwr6+vrm2usCxtbGzt7fCtbOrrbOoqa61r620trnCyaaEeIuhr7WcamZnVllfSUlNUFRve4upsLe+ubK1sry5vLa5vrWWr8CwtXisysPAvb+5s66yvLquu7Szpquorbq+uMvCv76sq7Cvs7q3ub67wMXBu7y3sLXEtb+0uLu0u8PCs7a2sbisqaWrsr23v7+7u7exvL28trGvq6uprbOvsLCrsLSpuMC2sqm0tbC3tq2spqu7s660uMKwsbG1sbK1saywsri4ubi+tLGzrqyxramvrqqyuK6trainoZ6ptr+4ur+wlol9gHxxdXd0d3JsX2NhXF5PSUI/PUlERk1EQDc3NTs6OT48PDk4PT47PT86ODMyNTc2OD8/Qj86OD4+PTw5PDk7Ozo8Ozs6PEA+QkI9QEE/QkI/PDs3OjxBRD5CQz8+QYqgm6GdlJiVlZKYmpyWm5WalY2bj4SIhru0vb+7vLm3s7y8rLOytLS2wLXAr7Kzqqqxt62pubO3v8aoh3t2jKGYX1NDWVVIYmpVT0VKZZGlr6+2urW0sqy8ubi1uMG9jafCsrJ2p8rCv7m6ta6lrLOxprCtqJ2gn6WttrXCt7a0paiqqLC2s7K6tbu7u7W4trC1xLK+vL+8ubrFybq9vraxp6SeoamxrrW5trKxq7S2trGopp6gmaWmpKynq6y2qa+6sa2kpq2lq7GrrKmtuLawsrjBtrGxtbGvu7ayt7W1sry1urKwsbKutLKqrq2nuLWyta2uqqiosrq9wLa0qY6Ce393cHxvdnNuY15nWV1dU09OQT5KQkBLSkA2NjU7Nzg+Ojs4Nz4+PDs/OjkzMjc1NzU8PD48PDg+Pjw8OTk5Ozs7Pjs7OTw+P0E9PEJAPz9CQD47Njc6QERBQ0E/QUKJoJ2loJSWmJiVnqCcl5uYmZGMmYmDhoS1r7S7u7S1sLG2uq6wtLOvtbq1urC1s7KttrqvrbyzuLi/tJCBeYiQbk5LP2VZQk94gZNoTUNehbG1s7WytK+su7q4trm/xXiOuKmfZqu/uLWysa2tn6Smp52kpZyWmZmZn6muuayrq5+lqKSrrq+nsKuvsbGtsa6usLmwtLy+uLm4x8W8vLu4qaKcmJufp6assq6zqaapqq6popqXl5GcmpijnqKir6ekrKaompqemqGnp6anqa+2squ0trCqsK+xqbm2sbWxrqy3s7avrquuq7S1ra+rq7GtsbKoraurs7W3ur2wq6GLeoJ5cnZzbXVqbF1ca1VdW1BOSERHTUJGTkY4NjY1OjU6Pjg7OTc8PTo7PTo5MjM2Nzc3Pjs9Pjo6Pz48PDw6Ojs5Oz47PTk8Pj1CPDtAP0A/QT8+OjU1OkBFQkRBQEJBiJ+ipqGYm56dmqWpmJudmpmUjJmHhoeGrq2uuLmxsqiur7iyq7CwqrK1ubm+tbK4tLm6trm7tbWzt7aVjIiFfFhGQU+HWEpKWXiOg2NBVaO5s7SysLGtsLm4tru3u7ySpLOupHSssKmrraujqKGdnZ6Xl6CVkpaXj5ifqK6ko6Sgoqaio6mpoaanpaqtp6ynqKesq6yyu7SztLm6trK2ramgmpaWm52fq6yqr6Oko6GpoJuTjo+QlJKSmZaanaSloJ+ep5iVkpSZnqSjoaWqrK2iqaqppKmtrqW0sa6xraqprq+wraWmqqSos66trKmmpqmrpqqnq7Ksr7Oxq6mWgX+Bd3J4aHV0b2VVYWRXXVFPTUhASVJETUM9ODg3NTo3PD45Ozw4OTw7Ozw7ODI0ODk3ODs7PDs4PD0+Oz08Ojk8Ojs9PTw6OkA9PDw7QD5CQEE/Pjk1ODs8RkFDRD9BQYijpqKjnqCfp6Coqpufm5yZmI6Xi42PjKqpqLGvsK2lp6ayr6mmq6CvsLu1vby4wMG+vLy8ua6sr7K8qZiZlWhNP1N4cVBJSUtonYBaRVWwurGss6+urK22trK0ta6pp56Zm56fpqieoKipn6GnlpuWl46dlI+Qlo2Xm6SooKCioqKlpZ2jo6CepaCkrKWmqKSio6OrrLOuqa6urqeqraisoZyamJmYm6qoq6ufpqKbo5yVkIyPkJCTkJeVlpifnp6bmaaXk4+Slp2ioKWipqSnoKKko6Ghq6uksq2qrKyno6yuraufoaKkpK+srKmmo6KqpKqqpKmrpqmsq6ahiHiDfHZ/emN3bG5dUWlVUE9HUE1MQ1BRQD47PjQ5OjU7OT07Ojk9OTk8Ozw8OzkzNjk5Njo7Pz06ODs6Pjw6PDs5Oz07PDw9PjxAPT88ODtAQEE/Pz45NDk8N0FDQkQ9QEOOqqSjoqGinaulpqimoZ6dmZ2PmJWTkJWnpKGmqKmlpKChp6uhnKKbp6u1sry9wMLCwL7AuLSnpKyovcKqpbxnRFObfVFYSUthSlaNYmVlg6+1qrK0rqqrr7Cys62lnZGXk4+XoJ+ioJyjpJ+eqJSblpeMl5GNkJeTmJ2iqp+fn6Cjpaicn6ChnKKfo6ionKehoKSfrKisrKCpq6agpKimrKOenp6al5qrpqqxo6WonqCclZOQj5GRmZCWlZiXn5icmZukmZeUlZqdoJ2nqKWgo6Kho56doKmqpa6upqipoaKqrqqnoaCio6msq6eppqShqaKlqaalpKKmpKijkn58f3V2fW5re2RoVlJkTkpIR09TTktOSDxFQDwyPzg1OTs+Ozk5Ozg6PDs7Ozk5NDg7ODc7Oz48Ojk8Oj07Ozw9OTw8PD49PUE+QEJAPTc6P0FCQEA/ODU1PDpAQ0BEPkFGlq6koqWeo6KpqKipqqWmnp2imJiZmZWbop6bnqOioKOgoZqgmJeXlqGorK62t7q5ure3u66ooKGpoKvGv8qfT0F0mHFQbkpMY2Z1dGBdYnSSsq+us7WqpqyropuZlI2RlZaYmJyfoqKcnaSemqSXl5eWkJKRkZOal5ugpKqeoaGepqeqop+gp5+dn6SnqZ6jpp+qnaqtqq6nqLClo6Smp6ymoqWimpmer6iusqulqqqgm5iYmJWTlpqTlZWalpuXl5ihnpyclpuhm56ao6eln6GioqOdm6Gmp6aoraOppZ6kp6mkpaWhpaSsrKmmq6eioKSjpKenoaCgpaKmoIl7gH13eXxleXlgYlNWYUhJSktTVElTUU05P0I2Nz02NTs6PDw5Ozs4Ojw9Ojs4NjU3OjY5Pj0+PDk5PTk9PTw+PTs7PDo+PTw/Pz9APT03Oj5AQEA/Pzg2NT08PkFCRkBAR6CupKaroaOqrK6tp6ypqKCipp6bm56aoJyalZmfn5uen56WlJOXk5KcnqSorq2sq6uvqq+pnpeepZylxsaMV1NKZqRZZn1vcltSa2NcZ2JgbZG0sLC4rKahnJ2alJeamZCOkZWRjI6Nk5minJejmZqXmJmUmZiWnZufpaapoKajnqeurqumorGjmqSmpqqioaqiqaSosquxsqu5qKarp6urqaysp6Ggo7GusrG0qrKuo5mcnZ6hmJubmpiZm5SWm5aZnKWhoJqjoZqcmZ+kop6gn6KmnZulpqWkpaijp6OepqOinqaloqWlqKykpq2noJ2eoJ6gpaGenqWgppmBe4F8dnZzaIJsZVtTWlpNUUpPT1ZNU01CNz5DNzg9NzY6PDw9Ojw5ODo7PDo7OTc2Oj01OTw7QD03ODs3PTs9PT06Ozw4Pj09QD5BPj4+ODg8P0BAPT43NTg9Pj1BQEZAQUihqqCrq6GkqquwramtqaelpaWkoKGfnqWXl5SYmZ6YnJ2blo+VmZKRnJihnaqip6Cep6Gln5ySm6Kan6qjjHlVaXJ3dXBjd3ZYV2JgZGlbWldora6sr6efnqKglpCTm6CbmZeSk5+coaObnpuWn5qfl5uinqWhnqSfpKitraisqaSstLe2sKe0rKKtraOvpaSmoamorrWzsr22vrCssa6tqaq0sbCoq6iztrizuK2ytKSgnaWgrKGhoqGgmpiWlZ+bm5iloaCeo6GgnpucpaCfnZyhqJ+fp6meoaOkoKagnqehn5ymo5+ipaOooKmrpZ+dnZudmqainpyjnqeQgYKAfXh2and1Xm1bUmFJUlVIRlVXSkNNRz1LSDhGPDc3Oz49PDo8OTg6Ojs6PDk2Njo8Nzs+PT8+OTc9OT47PEA8OkA6OkA/O0A+QUA9PDk3Oj5APzo+NzU4PT0/QUBEQEJGnKueqamipamprqimqqWmp6aoqqGlpKOmkpOVmJacmpqcmpWTmZuNk5+ZqJ2un6eenKGdnpqZkpiem6GhoKR/b4JwYGNYTFtSWkxMUVlSSE9OSJmsqqmkn5+ZkpKUmJiWlpWMiIuOlZ2cnZ2el56Zpp+gqKWxqqeuo6uutrC0srGutri9v7qttbSwt7CutKmmpKWsqbmztbvDvMPBtrq2q66xubi8r7OwtcK8t76zs7WirKKpqLKpq6inqJqZnpqqp6CZp6Cfn6iopaSenaqiop6bn6igpKetmZ+jnp6nnqCmnpycoqGbo6KhnZympaWkn6KZnJukn6CboJyjiYWFfnZybWl3bWhtXFhcQ1dOSkdNR0NGTTw+TD40PDk2Oj0/PDs6Ojg4PDk6Ozs8NTQ6PDg5Pj4/Pjg4Pzk8Oz0/Oz1BPTo/PjxAPj8+Pz08Njs/QT07Pzg1ODw8QERCREFCQ5WqoKapo6mqqKmjoamgpqinrK6lqaWpqpSSl5mUmpqanJiYmZyamJmqoLGit6Swpp+enZ2XmJWZnpqco56ciWJXXmVgV01RRz0+QENEPz5CUnipramqpZ+en6KjnZ6dmpyblJOVlJ6dmJSFnZqgmqukq7KwubKysbKxur28vLm2uMO+v8K/tru7wMS5vbusr6exrbHCtrjCxsDIysDKv7C5ub25wr64s7vGxL3DvLezqrOtqrO0r7Ouqq+jnayotrGto7CmoKOwsa6wpKWvo6GgmqGmoaSqqpmdoJmao6CmqKGcnqKemaSenpiYo6OhpJ6mmpuipJ6fm5ubnIeGgXx0cmtrdXJxaFZcUUZVSERKUEk/RUE0Rkg5NTw+Nzs8Pjw8Ojo4OTw4OTs4Ojo4Ozw3Oz49Pj02OEA5Ozs9QDw9QDk3PD07Pj0+PUI+Pjc6QUA+PD45NTg9Oz1DQEFDQkGRqqGlqqelqqimn6KnnKasp7Gyq62jqayVkpWalJecoqGbnqCinJ+psqu7sr+rr6ylnqCgnJyYmp+gmqCflXxfXmVgUUZEO0M+Rjw+OTZOfqqzp6OjoqCepaumnpiclJGZnZmVjIqGiIZ4bYigpKKrrLS8tsO+vrO7wcPCxcC/wsbGxcPIwsDFyM3QyMvDsre1vrK+xbu+zM3FzMzM0se+v8DCvsfGwrfDysrDwce/urS6u7W7t7C2sqq6sq67uL+7uqu4rauquLu1vK6uuaOmo56mpaKjqaaZm5+Zmp2nqqegoaGkmJSjlpSZkZydn6Sep5+en6KdmJmUmJSIhX56cmtjaW94a2VZW0ZLTEVEVE1FQ0U3Oj86NTQ5OTc5Pj87PDs7OD48Njo9OTw9OTw9Ojs9Pj4+NztBOj45PT45PT44Nzs6Ojs/Pz1CPj83OkFAPTw9ODY2PDo8QT9BQUE+kqugp66ooqulpKKipaGlqquwsq2upKmmlJWWmpaUm6SmnaGqp6KrrLy8v8PBsrK4p6Ghq6qhnJ6hoZ2bmn1yaWFXTkU+SVl8b2FBPVyOrqygmZubnp6Zl5eXko2Pl5eTjo2QjIKDgndycW1wj6atrrS5xbvNx8u/wszNzczHydHMzMzHycXGzNDS1c7Tyb3Av8O7xsXIxdHTzdTQ09PMysLFxsbKyM/AydHMx8bIxsK8w8G/v7+2vrOtv8DDw8fFx8Svv7myuLzEwsK6vLy1rqenraigoqmlmpagmpmdqKupo6SknpePm4uQmYmVmJugn6OdnZeempOTi5WPhYF5dHNlYmdyb2ZeWlpDTkxERlBJRENANTU1ODlCPTY4OkE+Ozs+PDk+PTc6PTk6PDg8PDw7Pz8+PD0+Qzw7OkA9Ojs6Ojg4ODk7QT48QD8+OTtBQTs7Pjc4Njo8PkI+Q0FAPpOvn6ivpqiro6KloKampKuoq62qrqKqo5Kcl5ebmJuirJ2frqalsarFxszOzb+wwaikqKytqqCdo56cnpVpZlxUSURAP0qGnqSYg6CyraOenJ+amJeUkpSWkZCPjIeEg4iHg4CBgYB5cXJvbHmktrq5vsvB09LTyM3O0dPR0tHQ0dHNzs7Qxc7U1djS183Gx8nMw8XKz8rT19LX0tXW09TIzMfMzcrTzc7TzcbJysrCx8zHycnGv8Ozs8jFy8vLz8fKv76/vcHGxc3MycnAw8Cur7OonqKqo5qTnpyYnqaprKSlppaXipWFkZSHkpKSmZualpiQm5WQjIaRi4B7cnV2Z2NndmpkVldRRE5GQElRQz5CPDoyMkE8RTw3OTxCPTs9Pzs7Pj05Oj48Oz44Ojk5Oj86Pj1APkA8Pjs+Ozk9PTw5Njo6Pj08PEA/Pjk6QEE6OT44Ojo6Oz4+PEE/QT6QrKKiqaanqKSfop2qqKOso6OnpqyiqZ+To5iWn56dpK6bn7CrqKyxyc3U18/Gu8esrbO3rK6jnqOinaGbYVNMSkRDP0NSsNG9sq+mnJycoKShnZqUk5WUiX14cWtlYmhyb3F7hYqAdXBucXRwhbPDvsXR0NfW1tLWztTW19TT0dPU1NPP0cTQ09bY1dbSy8nO0cvGzdHK0tXW2dbX09fYztLKz9HMz9DM09DAycjKxMzMzM/PxcfItsDLwNLNzNDHysnAxMPIzs3Q0c/NysjNuLe7qJ+lq6efmJ6jnp2qpa2pqKiSlYiQhIyRho2MiJOVmZCWjJiSj4aHjIR9eHN2cGNgZXJiXVJcSUpHQUVJSj47QTg9NTU4Njs4Njo8QD07Pjw7OUA7OTo8Ozs8Nz09Ozo+Oz08Pjw/Ojo8Ozs5Oz89OTU7PD48PD0/Pz46O0BCOzk/OTg7PT0+PzxBQEQ8hqugnKegp6Oim6CbqaSlqaCfoaGmn6ifmKSimqmmoqarmqOwsamotdDU19rSx8bLtLXBxbG1qKGkpaCioVlJQEFEQUZRdrKvppqUl5+cmqCgnpucmpWJd2ljYV9fYF9eX19dYWx1c3Bwb2xycXWSxMjH1NXX19fT19DV1NrU1M7P1dTU0dHM0c7T19bT1dDP0tPRydPRyNDY19jR2NLX2dTVzM/Pys3Sy8/RwMbDyMbPztHR0sjMzcDLzcbTz8zPyMXLx8fJzMrU1NHVz9LM08K5xbGlqLWup5uoq6Wdsqiws62sk4+TjoiLjoOPi4SQjpmNk4+Zj4+ChYx8enFzdG1hY2ltX1ZQX0pKQ0ZDUk1APD40Mzo9NTI4NTU8PEA8Ozw6OTpAOjg7Oj46PTg+Ojo8QD08OTs9Pzk6Pz07PTw9PTo2PD0/QD08PT0+OjxAQjs5PDc0Oj48P0A9RkFEPYKknKClnaWlo5mcnaSeo6OfnZ+doJqnnpyhqZ+vraqqq52lrreoq7fY1NXZ2dHO0L+8zMm2vq6mqqiho6tlQzg9PkRYgqqon5eVl5manJ+dmJyckn1xZWNiX19hX15hYF9gYF9gZW1wcG5rb3J3d5zMwdPV09jY1tnR0tLXz9POy9LN1dTRys/N09bS0dbNz9XV0cXR1MrQ1NXWztPR2NfX2MvIzsTJz8zKzcDKwMnKzs7Py9DOzszPz8jM0NDLzsvDysfJzcvM0tPN09LR0NDKvci5sK67ubWrtrCtqLits767sZqPoJSRjo2IjpCFkY2ZjJGRlY6RgIWJenZvcG9rYWRucGFXXFpJRkZETVhFO0A9MzM8PDg3ODU1Oz5APTk8PDg8Pjk8QDtAOj04Pjk4Oj88PTg7PkI6Oj08OkE9PTw6Nj08P0A9PDs9Pjg7QEE9Ojw4ODs+PD4+OkVCRT6Bn5mlp6Cfo6eam5+cl56eoZqdmpyappufpKefuLa1taykrK6+tLDA2NLX2tzWzs3Kw9LPwcGxqaytqaSxekhGQjtXjaGblZOWm56enpyTlpeUiGteXl5hZGJgYGFhYGBhXl9fXlxibXJvb3N0dnZ5pL/M1dHW1NPY1s7O08vOzsXOytLSz8fOzc7UzM7SzcvX1tDM0dTLzNDS08rO0dXS1dXKwMrCxc3CyMrDzMTGycrLz8vOzdDO08zGydDNycfLxcfBxsrMzdDSx9DPzs7M0MXHwbi5vcPDvcO4srK+sbvDw7WqmKWhmJaSlZWSi5SNmpGUlI+PlYKJhnlxcmttZ2BgcWhZWGhWTUdMSVBRQjtDPjs2ODo4Ojo1Nz09QTs6PD05PD05PT06Pjo8ODs9OTtAPD47Pj5BPDk9Pj1CPTs3NzU/PDw/PDw7PDw4O0FAPDo8OTs7Ozw9QTpFQUU+hJ6bqK2epKSqnJ6fmJKXm5+am56ZmaKVoamppcTCwb+7tbKxx8O4ytXW2drb2MzMz8jW1cTCta+0qJ+tl3hscHF5j5qNjJeVkJORkZWWlZCLfGVhYmJgXV5hY2FgYF9gYWFgX11bXWdycnByc3Ftcnmlx9PPy9DQ09TKxcnJxsa/w8XPzsfFx83K0sjLzs3G0dLQzszUysfLzs/Hx8/Sy9DPxrrEv8bKvcLHyc7Fw8fAx83IxMzLzM/IxMTQycbCxsjEv8HHzMvMz8LLzMnHy9DExce7x8PIycLPwb28v7DByca5vaqwsqelnaKcmJCbkKOZl5mRlZiJj4J4b3Rka2BeZnFhW1dgR0hIR0lNVEc/Sj02NDM1NT09NDg9PT06Oz08OTo7OT89OTw7PDg6PDo6QD1APD09Pjw6Qz48Pz04ODk6QD4/Pjw7Ozs7ODo+Pzw7Ojc5PD49Oz49RkFDPYOgm6qupa6qq5qdoJeUjpedmpmgmpqcm6WysazJzcrIxL68uczMxtDV1dja29jQyc/P0dPIwre7u62jtn5og4Wkq5ONjZaPhYODg4F9hIR+c19bXl5eYF5gY2RjX11dXl9gYF9bWlxgbHJxb29rbG9vfbnRyMnKz8vNxLrAw7u7urq+ycbCw8DDyMrJyMrIwcXMxsjKzcnEwsvJwcHL0MXLyL+5wrvGx77Axs/LxMDDu8nHybzJx8XKwL7Cy8bFxL7GvbzBw8XMxca8wMnDxcfSxcHJv8rJxsjG0cPDxsOvxMvHw8q3v7y6tKmspKWYn5iso6Gmm6Ogm5V8d3N0ZmlaYW5tWlxYUkRMRkJHRUxERlNANTQzMzU/PDM6PDw7OTw8PDg7PTtBPTo8Ojs3Oz05Oz07PTs6OD4+PEI+Oz88OTk7Pz07QD48Ozk5OTk6Oz06PDo2OTw+PDs+O0NCRD5/pZypsqm0rrCdnp6YnImUm5man6Kfmp2ov7i8ys/RzMfCw8bNzs7M1c/V2tjZz8vSzc3OyMG1w76xr7ZsXnp9oZGKkpaGeoCFhX92eHVycF9bW11gYGJjZGRlZGBcXF1dX15gW1laXGJvcm9raWtwb3OPx73KxcvAxsKwtrqysrOyscK8vLy6uMHBwcS+vbm9v7nEysXGwr3GwLi7xMm/wcm7t7u6xsO/vMHOw8a+vrXBvcO7vce7w7q0vcbEwsK3v7a2vr+7zMO9trrIu7++y8PBxsLFycfJxtDGwszIssfJw87MwMXDv72yt7Cyp6ioubClrbCqrayUenZ3amRnYGhvZFZeWUpGSkZIS0FGQkZKQDk6NjU4ODU0Ozo7PDk8PDs5Ozk6QD46Ojw6Nzo7Nzo7Oz88OjxAPUA/PT8/Oz07O0A8Pj4+Ojk5ODk3ODo8PDw7OTo8Pjs7PjpAQEU+fqygrLWqt7SyoZ6fl5qNlJaan52mop2et8XCxMjO0srKycbNzc7RyNDF1dTV183KzsXJxcfBucW9q66mYGR1g5OLiIuEeH+Ghn9+hHt0dGNcXF1eYGBiY2JiZGViXVxbXF5cXl1aW1xeaHNxbWdnbm9yeZ29zMDDusC4rbCxp6qtrKe4tLa0s7O0u7a9sbewta+yu8K8wcS8v7u1srq+wLjIubS7t8HCvbi9x8HEvLWvsra7v7TFt7u1q7m9vsC9sbq2sLe6s8a8t6+7v7W3tcW8vsPFwMTFxsfLxcDGxrvHy8DPycfDxsHDt8O9vba5vse/rLW7tbe2jnl0eGdnZWJrbl5WXmBGS0hISkZCREFFRT88OjU2NjYzMzs6Oz06Ozs6Oz44PEE9PDo7ODc5OTk7PDo+Ozk+Pz1APz5CQD1AOjo+Oz89PTk6Ojo4NTY7PT48PDo7OT49OT86PEBAPIi3pauzsby8sa2foJmUlJiXnqujr6qnpMbLzcjFyM3M0MzNyMnIysjKxNDN0s/NxcfBxsC/urfJtqqwmVtncIqPhYiJenh+hoZ2d4F8c2hdXV1dX2BfYGRhXmNlY19fXFteXF1eWltbXV9scG5pZmptbnJ8pMfAuLi1sKusp56iqaeeqqyzraqsqrSttrGzqa6nrLO7urbDubq6sau1ubu0wrqwwLG+vLu2vMi5w7atqqiwssC2uL2wsaexs7W7vKuutaautq67srGqubCuu667uLvAwL66w7/Gw8XAvMbBx8u4xcfFv8fDw7rExsK7xsnMy7O5wr27s4lzdnZraWBibGlZWFdbQUxLTUpFQUM/RkE6OTo5OTY4NTQ6Ojk7PD07Ojs+ODtAPD05Ojc5Pjk7PDo4Ozs6Pj45QT0/QD87Pjo7PDo9PDw4OTg5NzY4PDw9Ozw6Ojs+PTs/Ozs+QDyKwKuouLe5w62zqZ2ZlJaZoZymsLWxt6bFztLLw8XBxNDHzcHDxr/ExMPDysLJyr/AvMK6s7W1w66qsJJban+Sh46Pe3h9iYV6e4SBd25eXVxcXV9gX19kY2JjZGJgX11aW1paXVpaWVpcZW5vaGZoaWtucoGturC1rqWkp6eaoKSgmpylq66kqKKrqqyrsKSmn6qttLaxvbmvt7Corri0s7y4tLyvuLm1srzBssGupaijq7Gys6i9qquoq6yutbOlqK6hpK+psqaoqK6mqLessbK3urq7sry+vr7Ev7XCwcfIt77AxLfEw7+7v8TCvsTIzMq/v8PAwKmHc3RzamlcYW9kV1dYUEhZUlNLRkZFPj9AOjc4OTc3NjQzNzo5OTo8Ozs8PDc7PTs7Ozw4OT44PTs8Njo9Oz89N0E+P0A/Ojw8Oj05Ojs6Nzc3ODg3OTw7PDs5Ozo8OTc5Pjw+P0E7jMKvrry3ucSwtrCbmZWcmKqpsLGztb2vxdDPzcPHubnLwcu+u8m2vcO+usq3wcPBtLa8trGvtbutqKuSZG2Ig4eLgHp9f354dH58c3dlX11cXF5fYF5fY2NhYmBhX15dXFpYWVtbWVhaXF9ma2ZkZ2Voam9yhaqlrKWenKGklJ2kmpeRoaOpo6Ofpaanpq2gnZykpq2ysLa3p7GtqKq0q7S6sba2rra5srC6urG3paCkn6axqKypuqqkp6eop7KtoKemn5ukpqyfn6ekoKGxra2ssrSztLC1vLa7wcCyu77DwbG5ucKzwb7Atbi8vb68wsfFw8S/wMSghHhxbGJmYGtvYFVZX0hOZ09USEZLRjw9QD06Ozs4MjY1MzY5OTk7OTo6PDo3PD88PDs8ODg8OTw6Ozc4Ojo8OTg+Oj89OTg8Ojs+OTc3NzY3ODg2NjY7Ojo7OTo7PDg1OTw6Pj5AO43ItLa9uLrAur22oJ6UnaGmurars7O7s8TPycvDxri3x8DMv7jJt7vFuLPFuLO/wKy1vLKspa+zraGjkWlyhoWGgHx4dXNvbWppaXBpX2BdXFxcXl9fYWNiYGBgYV5cW1xcWFlYWFhWWFteX2RjYmVnZ2drbW+InamflpWaoZabopiVjJ6hoqecoJ+kpaKnnpujnKCrsK2xtaSpqqqsrKS0uK23sKyztq+zta+wqp+en6OisqWmqrmtoqamoKitq5mgn56ZnZ+lmpqjnJyer6mrqKqsra2wsrivuLm6sLa8u7qrs7K5s720trGxtrW/tr3AvsPCu7q9l4R7c2tfZV5kZFhUV11JV1xLUEdKSkdBPD8/QDs/PDA1NTM1Ojs5Ozg5OTw8Nz4/Oz07Ozg4PDg5ODw3ODo7Ozo7Pzo9Ozc4PDo9PDc0Nzc2NzU3NDY2Ozc5Ojs6ODo5ODo7OTo8PzuJyba4vru3wcHBtKSkmZqkpsCyr7astLfFz8jIwMa7u8PDz765x7i3vreywrSxu7usubqxop6pq6eYno9tfoWGf3hybW9ta2JeYWZmXV1eXV1dXF1fYWFiY2NiYV9cW1taWllYWFdXV1hYWFpeYmRkZWZmaGlrco2nnJOUlJqXmqGWlpCboqGonpydpaeipZygoZuZr66ur7KhpaOuq6eitbCysqypr7OnurOmtqGjn5ujoa2joqq2q6Ojpp6lpqOWmZ2XmZudoJqXnp2dnK2hq6ijpKatq7KzqrWwsquyubSvqq+ysrO3s66pra6yuLG6trq9wLizsZSGenVmX2ZeW1lWU1pVS1tRTEpFSEtJQj0/QUFAQToyNDUyNDk5ODk7OTo9PDY9Pzs8Pjs3Ozs3Nzc+Njo+Ozo4Oj07PD06Ozw6PTs4Nzk3NDY1NTQ2Nzg1Ojo4Ojk5PDg3Ojg5PkA6gci9uL2/tr68v7OdpaOYpbHCtba9rbS4wczIxr/FtsHAx863wMS9s7m5sr+2sbm7rbK0r5+apKqglJqPeH+DhH94b3F0cWhlY2hkY1xcW1tdXVxbXmBhXl9fYF5cW1pcWllYVldXVlhXWFdWV2FkZWNkZWRkaGp2oJuTk4+TlpaelpiTl6CdoZyWoaGppJ+fqZ2cm6unr7CrnKOkuKqhoK6otqqnqK2xpLiwpLego5yZmaqnoZutubCjoaScoqCgk5ShlJaWm5iYlpeclZ+pnqmkop2jqqqxrai0rKqnrbOwpauus7GwsK+vp6iosq6ytbC8tLq4rqOVgnp3ZV9hVllYU1JTS01eTFBMR0hMS0U9QD49Qjw7NzY1MzQ5ODg5OTo5Pjo4Pj47PTw8Nz49Njc2PTc7PTs5Nzk7Ozw+OTk6Ozo4Njc2NTQ1MzEwNDU2Nzk6ODo5Ojo3Ojs5OT1AOnbAvLS5wrG+t72unaenoqq7wL3Aua60uMHMx8XCw73FuMjMssHCwa68u7W7vLW5ubCvsKqcmaGplJGKi4CAfHdxaWxydHBoaGVkZmFcXFpZWlxcXF1eXVxbXF5cW1xZW1taWFZXV1ZXWFdXV1ZbYmNiYmNiYmNmaYGVkpSLkZOTmpiclZacn5yflqCgp6akp6ignaCmoKqvpp+io7eooaGiqLOipailsKaxray1nqGdlpWpoqKUrbKxn6Ojnp6Ym5OLoZSRk5iYk5eYmJeep5unoqKapKWlq6SlsKelo6usraaorq+vq6iqqrOmpquvtLGvvLaxr6+gknt4c2VhXFtdWE5MUUhSYU1WUE9KTU9FQkQ/OT02OTo3NjQ1OTk7OTg4Nzs4OT0+Oz47PDY5Ojc7Njs3Ozs6ODU6Ozo7OzY8Ozg4NDc3NjMzMjEuLzI1NTY7Ojg7Nzg3Njw7Ojs7QTh4u7uxtb2wu7G3rJ6lpqy3u7zBxbqxubXEycnAw8bFx7bFxLPBv8Wrt7e9tr26u7Wyq62omZifo4uJdImIfnZuY2FmaWhmZ2lmaWxgXVxbWlpaWlxdXFtcXl9cWlpbWVlaW1dVWFdUVFZVUlRSVWBgX2BhX2FhY2RpgJKSiI+Nk5GSnJSVlqSZoJecoKWiraalpaSko52qq6Wan6WxqqChnqWrnqiin66tqamuraKiopWYopuckKupsZygop+fl5iTip6RjZKTlpCYmJScoaOdpKGilaCipaabo6uloqSqo6uupa6yqaalpqa0pqqorbO1tLm6sKqsnoxzcW9gW1dWVVJGUE5IWlxPUkpUS1NMRUdKRDg7Oz08OTY2Nzo5Ozo5NzY5Nzc6Ozo9PDw2Ozw4PjU5ODo4ODY1OTo8PDk3Pzw5Njc4NDUyMTIxLi4xNDI2Ojg2OTg1OTg5ODk7OUA5e7W0rLS7srCrsq2dqKevubmzwMi6tcCvxcjMusHKzMi1ybyxvcPJrbG4wbW8wLy0taqsppaanJyJgXKIg3t0aWlqbGdqbG1ramxlXVxcW1tcWlhaXVtbXmBgXFhYWllYV1hXVFZWVVRVVVJSTlFZXVxdXV5fX19iZG2MjYKQhY6QjZiSlJKcmqKcm6GpqauprKeppqSZpa+llZmlr6mgnJmboZ6vmpyrtKCmpp+jpKGUk5uWlpKpqq2anaChoZuUkIyZjoyRjJKNlpWQnqKgo52co5WboKOhl6Koo6Ooq6Crr6Sut6ajpKOsraqoq6+zt7K9tbOrr5iFdHNoW1hZU1VSRVhMUVtYTVVPUExRUklOSkM9Pz9BPz03NTc5OTw8OTc3Ojc5Ojs8PT47Nzs7Oj02Nzo7ODk3Njk4OTo2Oj05OTU3NjU3MDE0MS0rLzQzNDk4ODo6ODo6NzQ4PTg/OX6zraezt6+oqK+um6morLe2q7zKu7a/rMvGxbjBzs/Is8S6t7vCyLGtuL+3vL27s7WmqaCWmJmXiHp0gHZ3bm1obW1tcGdnaWZkXVpbW1tbXFtZWltcXF5fX1xYWFlYV1hXVlVUU1VWVVVTU05QUVlaWlpdXVxeX2BlfYqAiX2Kj4iQjJaRl5mioJugq6qmr6yosaWpmqCtoZWWpainnZiQj5qerpeZqKuZoJ2UpaGfkpGSkZOVqKulmpmZnp6WjoyLk4aJjYOPi5KVkaCeoaSZlp+VmqGinpSbpaaoqKigsbCmsb2ooKOstKuup7C1sLm1wLGusauRfnJzYlZUVk5SSkdWUFJSTExYTkpMT1JHTUtBQ0ZERD5BNzU4ODk7OTo3Ojo3PD06O0A+Ojk7OTo/NzU5Ojk4NzY5NTg3Nzk7ODU1NzY2NjEzMjAtKi4xMDI4Nzc7OTk7ODk0ODs4QDh/tKymsbeqpaKxq52qp6mysKS2xrS5urPKxbm6wcvQyrG2t7y9wcOxsLG3rbS0u7O0oqOdnZiXlYSAdmtnbG5xbnJrcGtkZWdlXlpZWllaWlpaWlpaXFxdXFpYWFhZWVdYV1VVVFJTVVNWVVJOTk5SV1hZWVlZXFxdYWp+eH50h4yFjoiXiZSTmJuYnqmboKumpqyeqJqhppyTj5+jmpeXhYSSm6SQlaOdlpaWiKKbm5SMjoqQmqWnnJWVl5uRkoeUjouBjI2AkIuSkpKgmqCilpSYmZWippmNmaSmqaahoLSyqLO4oZyjt6yqrqSysqa1vLWrrLGjiXlzbl1OUVFMT0ROTk5QS0ZOTkpKTk5RSU1KQUhMSEhDPjg1ODg4OTo7Njk6Njg7OTk+PDg6Pjk7Pzg3ODk6ODg2ODU3Njg4OTc0NTc3ODIwMzAxKiktLzEyODc2Ojk5OTk4NDk4OEE3d7ampLexpaekqqWgqaaks6qissO1tbKzxsa2usPKzMazrLm9tLjAr62psJ6mrrqvrZ+Zmp2VlYh8g25fX2ZycHZxaW5pZWdoal9YWFhYWFlZWVpaWVtbXFxZWFhXWVlYVVZSU1JQUVRRU1VRTU1LTFNXV1ZYWFhYW11hbnB1b4OHgYd/kIOOipORk52hj5qco6KkmaWXopyVjYiZmoxzjYN+jpeWhpGakJSOjnuZj52Mgol/ipigo56Qk5iWhY6DlH5+dIqOepCHk5CQnZuampKWkJ2Oo6OOiZqgoaSkm6K0r6ywrZ+ZprimprGhsK6csLyqqa+qmYN4dGRXTVJPUE1DU05MUE1CUFFISU5TTUhKSkRLTUZLSz03NDk4ODg7OzY5Ozc6PDk6Ojs3OT85PkA3OTo8ODk3NjQ0NDU4NzQzMTI1ODUvMDEwMikoLC0wMjc2NDc4OTo6NjU6ODdBN3i3oaO0qaalqKOmpaamprOnpbTBuLC0sMnEt7nBzsa9s6y6waytw62ooqaSnaa2raOgj5WWkpB+eH5mV1ZfZ2ZpZ2huY2lpZ2JcWFdYWFhZWVlZWVlaW1tbWVlZVldXV1NUUE5QTk9PUFNUUU1NSkhOU1NTVFVVVllbXWpqcGt+hHtzTlhyj4KXho2cl4uUkaCZnZWUlpWPloqAlIlfO1ZvfIyUioGMkoyQhoZzi4WXgXmBe4aTnZSDlY6RkIOGfZN4cXCGjX2KgZGNj5eamZOLkIqdiJ+Yh4iWnpqhoJenrqmtqKiel66zoqaumayrmKi0o6mto5N/dG9gXE9TUldMRFRKUE1MRk5PSUVMUU1LT0pJTVBGSUk9NzU5OTk5OTo3Ojs6Pj44Oj09Nzo/OD4/NTg5Ozc5Njc1MzMzNzYwLi0vMzQ0MTEwLy8oKSsrLTM4NTQ3Nzk8Ojc5Ozg2QTl5t6CjrqGmpqqgpqmno6mvqKe0wrmwtbDHwrezvc+/ua+utcKnqsWqo52Yg5ScsaKamIaUj4uHfnN1XVBMUVVZWlddXmJnY19ZV1dXWFhYWVpZWFlYWVpaWllYWFZXV1VTUk5MS0hHYlxNT1JNS0hGSE5RUU1PUlRWWFpgbG5neoFzUEI/f5WSkX2IlYyEio2bjpaVipKIhpWHeYl/YEpRbniLkoR+hI2LhX9/bX9/lHd1dniEjZpwUY2IioZ8fniUdmh3hoh+iomWi46Rk5eMhIqIlYSbjYKEkpqWnp2UpKOoqaWknpyxqqGkpJGmqZaiqpyipqiJdm5nX11IUVFTTUlVTVNJTEtPSUhGSk5MTVRLUVBPRklDPTc2OTo4Ojs7ODo7OD4/OTk+PTg7PDY7OzQ3ODs2Nzc1MzQ0Njk2LzMvLjEyNTIyMS8sJykrKiw0ODMzOTg5Ojk5Ojo6Oj85d7aco6edn6Gvoaeopaeor6yqtby2uLazwbu2qLnIuLaoqLW2qrK8p56WjX+KlKiWlYp+joOCfXhxb1hNS01NTkxNUVdbXFpYWlVVVlZWV1lZWFhZWFhZWVlaWFhWVldVU1BNSkVAQJtrc3NJTUtERERJTk9oWU5RU1RVWm6DcnV9aWhcVJCJlIh0foaBfIWMk4KSmouPe4aPgHaAeHNvdnF0jo6Ben6Kq4V5e2h2e45wcm14gYuNknh7gHuAdnNyknhndYWEhIV8lYqIio2LgH+Ei42AlIR8gI+YlZyWkZ+dqZ6foJ2gqaWenZiNp6SSoKCWnp+kgXNoYl1dSldQUkdLWFJPSkxNUkpKSkxQSExRTFJUTUVIQT03Nzs5OT49Ojs8OThAPzo6Pj03PT03OTkzNzc4NTY3NTI1MTQ3Mi8yLiwvLzIwMC8tKygoKS4xMjcyMTk4Nzo4Nzc1Ojw7N3aumaOhmJ2ftKmvqqWtq7Cxqr20sry4trq0sZ+3urKqnZ2sqaiyr6KakY2UgY6cjpF+doZ4fHZvb2lYS0hJSEdFSEhQVFRUV1dTVFVVVVZXV1dYWFhYWFhYWVlXV1VWVVNQS0Y+OTNOPH6eTUhKREA9QURqlH5MT1FRU1ZedIJ7eGZ2jJaYjY58Z3mBdniAiZB9hJiSgXGHj3x3e29rfq19dJCLf3uGkoF8f3VmdnyGbG9nc3yJjIeAbXlxfXFtdo9xaHGBfo5wRIuFgoOFf3d4eoyGfYx7dX2Oko+Yi5Kam6OWmZyanZ6hnJaNi6Wajp2XjpaYkHhvbWdjW1hYVVFKU1VUT1BOUVZLTktPT0pST0lOUExGRDw8Nzk7Ojo/PTk8Ojk5Pz87ODs9Nzw5OTk5MjY2ODU2NjMzNjExMjI0LiwsLS4uLTAtKyonJyouMTM2Mi84NzY5NjY1Mjc5OTV5ppegnpahprCsrquoqbGvsau8uKy7vrizrKebsKesm4+WnaWppKGYmY+FknmJjouKdXF7bXVwam1qWEtGR0VBQENESExMTVFSUFFTVFRUVVZWV1dYV1hZWVlZWVlWVlRTUUtENzhmNzA/qGlOSEM9OzpEioV6WkpOUFFUWF1lcHJsiKeqwH50eWJ7eG98eYmQen2Lhm9tjJJ5dHlqaoCCcZaRi4F+loBJkphuaHh+gm1pZGx5hZCShmxybHxucnyGaW5wf3ONiYWGe35/e3dwdHSGgnmBeXB8joyKlIOWl5iakJKWl5mXnZaMg4mekouSjYaQloBvam9vb1lWWFRSUVlPUlRUUlhVTU5ITUpNT0tDSU5HRkA6OTk7OTk6Pjw5PDs6Oj0+Ojg6PDk/ODY4NzI3NTY1NTQxNDMyLzAyNCorKiotListKigqKCcsLTEyNTAsNTU2NzQ4NUhBODk1d5mRm5man6WssKOtqqi1r66stL+rvMO/paKalaSYno2Ei5ShoZiZkZOLc456gIaMhnRvdGtwbGRsallOREZDQDw+PkFGRkdLS0tNUFJSUlRUVFRWVldXWFlaWVlaV1ZUU1BMRTFAmjMganNDmW87PDk1PICChl9JTU9PUldaUVlcX6eHYZppc3llfm9tf3qLiXaCiIZ0bJqSdHR8amqdj015hZOJhI5nMXaGc2x+fYN0ZmV1f4SEhYBnaWx1a3GAfGhxcXxuk42PfHR+fXFxbnZtgn93eXVqeYmCiImDlpKSkIuNkZSUjpeNgHmIl4iGioaAkIh3a2twaGZYUlpXWVlbTVBVVllYTklIRUpKSEdDQEdFQ0c9OTk4Ozk6OTw6OTs6OjpAPDk6PDk4Pjc4NzcxNTIzNDUzMzY0NTAzMS4qKispLCwrKykoKycpLCwyMjYsLDQ3NzU0NzhpTzg7NW6SiJqRmZajqK2esZ6nuq+rsrDCsbvDx5qWj5SZi46FeoSQmJSNkIyPhnGHgnSHjIZ5cHJwb29kcGZfVEZJQz88Ozk6P0BBRENFR0lMT1FRUVFSU1RVVlZYWlpZWFZVVFNQS0U4MC9cYLNHOVhQOzk0NDGWuotITE1PUFFWTEFJUUlir7KgcXt4bH1scYKChYF6hIaGeXKhlXR4gXN1lIc1cZ2onY6hoYSihXZwh3yHfHSMro2JgWhnYmpucm1wgnVpb1h1cI6bkndtf3t9bXJucIB7c3ZuYnaDf4aAhZCQioqJkYuRi4uOg3V4io6AfoOAfY57c3FxbWBcXV5bWVhgX1JOW1pYV0xISkZKRz9DQUJIP0NEPTs5Nz07Ojs7OTo5OTs6Pzw4OD06ODs2NjY1MTEyMTI1MzQ3NDUzMS4vLCwrKSopKSoqKikoKikrLzNETTIxNjY2NDM8dlI3PTdikoGSiJaRnaSnn6+VpbSprrGuwbK7wcWWkIyUj4CIfG6BkJKJg4qHj4Z1goRslYiIe3R4eGx3bndjaV5KUEc+PzY0NDk7Ozs9PkBCRUhMTExMTlBRUlRVVldYWlhWVVRTUExFPDUqnUtbQC1nSTk0Lz+Sg6muX0dMTU5QTDdDTVJTREqGdoB8fHZ+bHaIiHx+hYN/jH51opp6foaBhJmEm5xhhqqfnYuDkI16d4h+iYmOc4uXj4R7XWVxdHp8d4ptaGpieW+FkIJ6b4F4dYV6cHR5eGtuaV12hnyHfIeHjn+KkpeDjYWMhn1xhH+EfXV3e3yJd3BzdGZnYFtbXlNbZ15XUFRYW1VHSkpES0c/RkBEQz5BQT07OTc8Ozs9PDo6OTk7Oz0+Nzk+OTk4NTY1MzI0NDAwNDY0NTU1NC0sKSsoJycnJigoKSkoKCsrKy8wMFVxPTIzMzMxRX5XND05XIx4ioCUjJGcnZ+mkaCqoLGor8Cyu8W6lo6RlId7hnZrf4yRgn2KhI+MeIOAc6CEinx8gX9wgH56Z3ZrUldMQEUyMTEzNjY2ODg6PD5BRUdGR0pLTU9RUVNUVVdWVlZUU1BNRkA6Mj0gI5ZjjFs1MzExaT9Hb0lGSUxNT1JMS1RdWVJKaISIe4l5fHF8j4x6fYmHfpeHdqGaiIePkpSlja2qSIaur6+LgYCTi4KLgoSSqYeAmJiKnHRtfIGGh32OaGdoeX9uhYeChXGEhkdsgHdyeXZobWtfdn2CiH+HhIt5lJ2ciYuIkX96dYt2fHhtcHd+gHR0cmxbXl5cY2NYZ2VcVE9QVllQRExLRk5JQ0ZDQ0BAQ0E9Ojg4Ojo6Ozs6ODg4Ojo/PjY7Pjc1OTU3NzMzNDQyMzY2NTY3Njg7REZMTU1MQzcrIiUnKykrKywvMDArbnUyMjQyMEyBXDU9PF6EdHx9iYWHkY6Wl5KXoJ6toaa4r7O9s5eNkouYi310cH6Jkn59jIKSlH2Gfoakh4h/goiFeIeIfnOEeF9jV0tCNjAuLzIzMTI0NjY4Oj0+P0JFR0hKTU5RU1RVVFRWVVNRT0dDPzgwLCOHWz4/ODQuXZZwc6NVRklLTU5QV2BYcFlcXmmNk4eVgISChZGTfoWIkYGalYKhoZiVm5umrZOau7Gnu8fDqIuMoaWPlIqBkXxxg56fkZx/doaFi5CHkGlocISBdI2HhIpxhYJ3h397doV9bnZ1Zn+UjoaJiIeIh6CropaJjpd/eoKIenlvZ2t4f3t/dGxlXltbXmpeYmdgWk9LTldSUUlQSkROR0NKRENBRERBPDo4Nz08Ojw6ODg3Nzg6PT04PD02ODc1NjYyMzQ0NDU3Njg2NzxCQj88ODo+Q1FeZVxHMicmLCwtLS4xKD+LWy4zMTBPg180PztudXBmd4N7gIx/gZCOipqbpJ2hrKarr7CXkZGEoZSEeHd/jJR8fpKFkpV/ioCSm46DgIGMioKJjYN/ioBtcGpdQkA0LS0vLy4uMDIyMzQ3Nzg7PT9CREhJTlFSU1JTU1RSUE9IREI8ODcvOUQ+PDw2My5sk5dNUEhJS0tLTlZfY39nZ211nZuPmpKTi42OmoiTj52LoKCSo6qlo6yTqbaiqMHCrseveLqUmnyNoZ6ZhJOFgo6in5OYkoSKhY+ZkZZscHWKjIKWjI2Od4+EcW2FgYqWkYOFiHGIoJWGkomOj5aktambjZSig4eTg31/a2prfYGCg3VjXmRgW2dsXWxsXldLR05SUU1MTEZJUENETUZCQ0VGQj05OTc9PDo7Ojk4Nzc2Nzs6Nj06Nzg1NDU2MzQ0NTY2NjY4NTU2MzEwLiosLCkoKS46UGFcQCwoLSsrMCwncog3MjQwT4RiM0A8dW5nWW+Cb3WGcXaShn6XlpqUnp6cp6CplpOYnmdlpJp+hJKReX+SiJGSfYqEmJKQgoCAi4yJhpCHhYmFeHh+Z01SPi8uLiwvLi0vMDAwMjEyNDY3Oz9DRU5QUlRQUFFTUU5QSUVEPjs8OkNGPz48NzUyPD9SNUhISExMTU5SXm+KfHOBfaCdm6elopmhl6KUnJ6onqirn6isqaq2l6u/q7bIyLfJ0c++m6Bwaaupn4STkoWcoZqbmaeRkYiVopubeHp+lJiSoZOXl4GUnnt3lZKrsomNl598lJ6bjZKVmKOipravnZGZqIeWj42BiGxzc32BfXNpYF5iYGJoZGBnZlxSRUpLUE9JSUxGRk1DSExGR0RCR0VBOjg1PDw4OTk5NzU2NTg+NzU9ODQ3NDU3NTQ1MzY5NTg6NjE2ODYzLzAuLSosLy4tJyMqO1hiQigqLDEtKEuXXjA2M1GFZjJBQGlhXlBwdGBtfWF3jn17lI6Oip+Sl56Wm6qYnqpCRH2HiYeYjXiCjYqOjXyKho+QjoGCgImLioSShYOGiYGAhnZeYlA0NjAtMS8sLjAwLy8uLjAwMTU+QUJNUVJTUVJTVFJOU0xFRUA8Pj1HR0BBQDg2NjI8OTtGSEdJSk5PUVlthZB3lYqjp6q0vbikraysp6i0q7C2srKtu7GzvZyzw6u6ycu3w7+4paKws6ytqqOLlpiFpqago5eBppmNoquopYiFlKShoKuhpKmPm7CLlaOmt7uboaOwkqKdoZ2Qo6Grr6yytaKUpKqImYmSiZV6en6GgGliaV1mY15kZF5nZ19bT0NJSFNORkhMRkpHRkZIQUtGQ0ZGQTs4Nz08ODg6OTc0NjU4PDU0PDc2OjQ0NjQ0NzM5PDM4PDIwMjU1MS8xLi0qKi8sLSooKiYlNVhYLywwLCwwhIE4NzFQhWg1QUNbWFRMaGNXaW9YeoV2gZOFh4Kbg5KQjJLayJ2Wc1aXiI+InI98hoyOiop6h4KHkI6DhYGMhYaIkoaChImGiIeHcG5hQEU2NDwyLzExMC0sKy0xLi00P0NBTVVRUlNVVVZVTltQR0hFPD4+RkhDRUE3Ozw1Qzs9RktJR0hST1BXgZKghK6js6qywMfDqrPFtqyzv7O4vra/tMG2u7qjuMWotsnHtb65taijtK2wsZuZkpqfiKevq6WUdp+kl6GssrSZlqquqK62u7K6rK+1orGrsbW7t7WutKCnp6KnmqmvrbK5t7inm7aojKSOkZOfhniChHdaY2VXZ2JiZGBhZmBbVUpERExVUUhJSkRJR0VBQEBLREJNRzw4Njc7PDk3Ojk4NjU1NTcxMTw4ODk1NDY2NDk3Pj0zODkxLjAxMjExMzAsKiwuLCsrKyooJyopRVowMCovK2iSTzYwUodqNkFGV1FKTFtaUWJjV3l1cYGUfYSGk3WFf4CMe7+7o7yCtJSTjZuPhIiPkomIeYaAjJKMh4WBjn+BiY+HgIaIhYmHkXp4bl1WQEVNPDY6NDZBQjc2NC8vNkNIQ1FbT1FVV1VcVk9eVUlLS0FAP0dLRkZEOz5AN0Q3P0JKSkVGV1RQXo+kraOxtMO2uMHMyba7xL2zs8C2uMG1vq+3dLGzpbrEpLDGubGzsbSopLW2qrGgopabopKlsK6mraynpJigrLS7oqiyurW8v8y/xcW9vbPCt7m4v7e6t7msrLClsKqtvbC8usLCrJm6qJOtj5eXqol9g35sWGRiWWtmamZXXGNZVlNJR0ZMUUdDSElBSEQ+P0JCTEBATUQ5OTY2OTo/Njo5OTY2MjQ2LzE5NTk5MzY0NjI3Oz0/NjoxLi81ODo5NjUwKigsLS0tLCwqKCgrKyhFUy8qMDBKj2s1MlCHbTY/RlJMQUxSV1NZVVp2anB+joSAjYRuenN4h2K5oZmjiZSUlpKUk42QlpKHhnuGgY2VioCEgYp6fIuHhn2KgoGKg5Z9d3p1ZVBcZEdFTDtRY2FbXlNGPztIUEVaY1FSWVhaZ1lUYGBMU1BFQT9JSkhFRUFAQzxFNkI+SEdKTFNaVF2Trri1urjIv7q9ycy7vMC7t7W7ura9tLqxxmB1sqSxmp6rvaqlqKurpKKytaCrp5+Vlp+Yn66lp6aln6OUo6extKeys722wb7TycnTx8LFzMLKw8C+vb+7vLe0r7i3tsO5xb3Cx6+euaqhq46kp7aIgYFzYGNjX1hiYGlnUlhgVlFVSUVFTktAPkdEPUtBPUJAPUY+O0hANzk2Mzc5PjQ4OTo1NzA0NS8yNjM4OTM3NDQyNj84QD5HS1JUU1FQT1FRUEpBOS8sLCwqKygoLC0sL1A+KC40OIB9PDJLiHE5PkNLRUBJTVBSS1FdZ2xrcI+NhY9zbHJzc4fVwLWZoI2VmJmRjpeRlpaOhod9hoOMlot+g3+DeHuLg4d8i3mBioKXfnR9emtmcHVZXVxQZWRiYGVkXVtYV1xNZG1VUm1tX25fWGdkVVlVSkRCS0tIRkhISEdBSTlEP0hLVFRWXFpbk7nAuL23xsC7ucrKura5tbi5sre1tK62tplkdaicrXBeoqycmKCim6Seq6WUn5+QlI6WmJenn6WfnpqZg6SdrKWqsK24sL251NHO1tDJzNLMz87Kxr+/wsq9wbzBwMTExcq+yM6zpLuwtK+aq7i7mYB7bV5hXVpfYVpjY1BbYFNQS0NBRUZFPEBFPkFIQUBEPTpFPj1KPzQ3NTM1Oz00Njg5NzcwMjIvMjQxNjk3NzU1NTVEM0VMTT41MS8wMDY6NDc3QElPSTstJioqKC0uLyxATSsvNTRtiUkwSIl0Pz5CREBDREZLT0RRXFloX2+WkpCUbmxvdXWHs6yhoJ+LmZyZjI2VkZuShYqKfoiHi5CMiXyBhHN7ioOFe4l0gYqHlX9ze3lsbXV7aHJlaWxpZmppaGBmaWlsWm1zlq2kvIiHZ1tvaF1aWlRIS05PSktQS1NRSExBSkdKT19eYmZpYZe3x7C4sru9tbHExrWwuLCvu6uysaert6uNtaedmqeaTpqdjI6flpGmmKWVipOTiZCJkJGRnZuhl5qVloeemqebrK+osKe0tNTU1NbSy8/U1c3Tz83FwsnQv8rJysnRx8zNwtDRt6/DvMS5pba6w6KDcGVeXl5ZYVhaZlpRXVdPUEJCSEVCSDtBQz5BRz8/QTg7RD5ASD00NjY1NTs6Njg3NjU0LzEwMTQ2Mjc4ODc1MzY3QzVCOD8tMC0xMzQ5PTk3LC4sMTtGSz0pLCguMDAwN0s/LTQ2VIhXMESHd0M7Qj5FQkFDSk0/VVlTZVZzkJCYgmhxb3l5g6CqnqWWjJqbl4uNlZGajn2Ji4WNioqLkId8hIJwf4iBhnuHcoOSi499cXh1bHF4fnF7bnhzbGiBcG1jam1weGl3fH7Lv8Hfp25jeG5jW2FgSlBSVU5ZXlBdXE5QTlRRVVRcbm12gnGWrbistKavtqqsvMCwq7SmpLimq66gq7SjjrGtmpeYjJGTkYSOm4GNppGciYOLhIqJhIuDlJWXl5OckZyYmZmfnquspKeirK3P0tXRzcvS09TQ1NHOyMPU0cfN0tPT18zR0cXS1sXAzsfHwqi+t8+eenBmX2ReWGFTXVpQUVRQT0g+QEZBQkU8QEI+RUQ+Pz86PT08PEpBNDU0NjU8ODg4NjY0NDEyLzAzNTI2NzY4NTMzOz08RT1AMTErLzI0OT41OTAxMDIyLTJETjMpLzMuMzI9TjIzOEN9XzJBhnREOj09ST5AQ0ZIPFZSTU5adYaFindsd3B9fn+hnp6hi4yYk5OMi5OPloR5hZCQjYuKh5GHf4J7cn6AgYd6hHWFk5GIf292cmtzfXt2e3OBd3FqgHNyaXBxenlyer7Lmn6MsoR2coR2aGFrXUNaWltWZWNYZGpTWF1dYGReY3h6fouBmKmjpKGfoKilqrC4qqWzo6GtoaOtoaexn4mmmpOSkYmRj4iBlIlqlKKMmYSAhX6Rg4OTlq2LlY2Vmo6GkpGel6ewoaChpaSoyM7PyMLL0dTR1NPO083G1tLM1NjW1tjU19XJ1NrNydfX0cqsw8PMjHRwZGFgWVVaVFxQS0dKSkpAOzo7REFEPEJDPkdCPkJCOzw5PDpHQjQ2NTQ0PDU2ODc1NDMyNTAvMjU0Njc0NTU0NDw+PUU/QTYyLy0xNjs9MDgxLzI1NC8tLTtSMDE3LzUzMkZEMjg+bmI1PYF0TTk5QEk8QUQ/QTtQTEZLWXCAdX1oc3hygomAnZWdlIWLlYmPioiOh49/eIOUmIqNiIiLiX6CeHN7fYOHd396h5GWgINud3BtdX91eH10hXx5bId2dG59doR1eHydtYw7QYvFpX6MfGllV0lDZmNlY2dqZG54W15maGtuaW6Ag4iRi5ydoJ2Ql5ieo6OmsaOjs5+hpZ2gqaCjsZyGnpKSkpCKjouGg4+EfpybjI2ChIV6lH6CqZWjjJGKl5KLfZeKmpKrs5ianKicp73Dxrm2xs3S0NLQzNLLydTO0NXa19fY1NnYzdjbzsnZ2tHWvsvMtHl3cGZeW1NXUltWRkdKSUVFPTo3OkBAQjpHRD9EQ0FEQjs/Ozs3REM3NTY1NTswNjg5NDQzMzQxMDE0NTU4NzU0NDQ5QD5EQkM8MzMuNkZUV09RSkFKRj8xKiguQlMzOTI1NC83Szc1PGBiQTxzdlY4N0FIOj9DPjw5UUVDSlRrbm5wYnBxdIaNfZeRnYt+h5KDiYaFiYGHfHiFlpaIjoOHhYZ6hHlxenuEhnV6hY6NnXmLcHxvb3p/cXuBcYOHgG6OenV3fXyCdX57hoevc1ipwraNkYJwbmI9XmhycHFwbnh2gWVob3J1eHF6jIeOk5GblZ+Vh4yTm6CbnqqfoKycoZqYn6Wen6uZi5qMkJGNhH2Ih4OFi46gmZOIhId+bZl5hJiGiJOMjZSMhnyciZSPrqqUlZifmaavtb2prb7Hy8nJzMvQycPSytTX2NfY19Xb19PZ29XQ2trR1sjUy5V7fWppXFtRVFRfSENGSUg+QT49Nzo9Pzs9Rz0/QUFBREE+Pzo4NkRCNzU1NDc5LjU2NjQzNTUzMjMyMzY0NjU1MzQ1N0VCRENFQjU2PEZOU01bbmZjbnNrYVY+LDRMRzg2NTQzNEJGND1XX2hMdXheODs/Rjw8Qjw6OkQ/Q0dSal5tZGJma3aAiHKRj5qAeoCNfoKCgYN+g3x8hJiOh4t+hoaAd4J5bnt7h4J0epKejaB2jnWCdHWBfXSAhG+Bj4FvkoV0fICEenaGe4i3xaTBybiClpuPd3BlTmZjgXqBd4aikIp4eXZ7g397hHZtk5aUlY+XkYSJj5aZl5alnJeflp6TkpejnZmrlZCQiYyRgoyFiIiBhpCRnpuZiYWMgYaXeoiIn5ePiI2Ki4J9oYqRjLyhmJOXmZ2ppqaun6i2v8DAucfJzc7FzcnR1tXV2dXX29TX2drb19va2tjO3MaHfXtpa2dhVVhWVk5MRE1COz09PDg6PD45PUA2PT9APT8+PDk4NjdEQTY0NTU9ODA2NjU1NDc3NDU2MTM4NTU1NjQ1NTdISD1ESkU3OTI1O0g+Ozo6N0lQXVpSVVhLOVQ+Ozk1MzI3STg9TllNSHh4ZDU9PkM9PUA6Njo+PkBFUV9ZZWFdW2h0enlsiYySd3Z6inx+gH5/fIR7foKRiYSFeoSHenV9dW18fYZ+c36SnZGeg5F8hn54jn14iopugpqAdJmGfYGIhHt9kHqPqI6Pw6G9jJyjnX2JhH2JcouKfnOmmpyYk4V7jpCIhGhHcaCknYyLkJKFiYuQkpWPnZqTlJCWjYyVn5yUoJSRjY2Pin6Qjo6LhImSlpqen4mMlJKdkYKLf6WZiISNgoWEgaWHi4u4mJ2RlZaiqKGdnp2jr7e6tazAxcrQyMfMz9PS0tjS1dfA19jZ29ja2tnZ19u4ent6bWtnWGJcVFBPSUNMQTw8Pjk5Ojo5OTs9Nj8+Pjw9OTo7OzM3REA4Mzc4PjcwNjg4MzU3PDM3ODA0OTc2NzU1NTQ2RlA1RE5JODkzOEFLPTszQ0BJPDlEV048TVRITj85NjMzMz5DO1tYPjVZeXBaPDxBPD0+ODU4OT89RFJTUlhfVlhmbW1taYGOinFzeYp7en98f3uHe3x7i4eBfnWDhXlyenNtgH6EfneFm6GanpSSgIyIf5iHgJuSboeohXqgi3yRjYKIhJt9mpCKjKOioJCkrqCLkYuFi4GThldyrYufq5uPg5ibj4+OXIKikYKMn5OVjIeIjJKTjJSUlI+Lj4mHlpudj5WWkIqSk4WAi4iSjYqKnZaZoqOHk52WoIqJiI2ckIOIjn+Dh4akhoyQs5idkpWXoaGfmZKcnaiyuaymvcLHzcjGz8zQzM7X0NHUrtbV2NrY2trX1tnZn3F/dmloX15ZVFhZQ0FIQz8+Pjo0OTo7Nzo7OzM7Oz89Pjc7OToxOkg+OjM3PUA1MDY3NzI1NT82NTs1NTg1ODo1NzczNUhSN0dPSzk5ND1FSkI+MUZDTEI5ODpHWEA1SFdJNjYyMjM6RUNlWD8mX3lpX3o+Pjk8Ozk4OjtAO0JRS0tTWVBUY2J5bWJ+kYNvbXiLeHp/eoF8hnx7d4aEf3NwhYJ6dXZ2dISDhX1+kqajn6WiloqdkJSXi4qol3KKsY2Ep5KEmZOEmYyilZ+Yk4manqOSqa+fkJWQjY6IloxujbeFmsTIspuhpZucmJaQspFkpM3Ilo+Gh4mQko2Nk5SJhYqJhZaZm4+QlJOGlJeEf4+LmYiNkKqXl6OjiJmflpqIjoeXl4qEjo2Bf4iPpYmNk6mal5OXmaGZn5mTnZujs7Smo7zBvsjFxcnIycLK083N1KnS0dbW1tja1NPazoNzgWllYF9fUEtWXEJCRkM7QT04Mzc7PDo4PTY0OTo8OjgyPzk6MjpJOj02N0JDMzI6OTYyNjQ+PTQ7PjY5NDk7NTc5NDRLUTxKUUs5QTdCR0lANjRKRUxGPjw4OEVUQTc+XDg2MjE0OjtFYFhBRmF0aExjWj41Ozo6NTs6PTpFTUZIUldTUkJjgUZ1go59fG1+iHh6fnqBgYJ+dnaAgntsbot/eXx4eHyEh4t+i6OzqKOrsqGWp6ClpJaVrqKDkLeVkrOZjaGgi6Sbr6KknZiQp5apma2vpJeVlZSQi5ialqDAjqPJuKuaoqWtmZGbnLKdhoWoop2YhYiJjpWNi5OPh4GGh4iTmJSMi5OThpSYhoORkJx0kZmylpekoYicmpOPipCLl5qJipaOhn2MmZ+KkJCcmpmTmZiflKCdlZ+bobKuo6W3vrTFx8S9w8O/xs7KydKnzs3T0tDW2NLP2Ltze3deYldiWFFJSk9FQkNENT46NzY6Pzs8Nz00MjY2OTc3ND01PDU8TDw+OzxCQTc1PDs0Mjc3P0A2P0A3ODQ5ODc7PDU1T01EUFJMOEA9RUFHQTU6SkVORUQ6NkFAQlM+OURPMzIzNTc1PXZcPFJcdGlaTV1TPD04OTU2Nz06SkZER05bXFlKZ2E7SISKentthYZ5fIR4gIWBfXB4fX18b3ONen2Be3iGi4mFhJKou62osr2vpa6zs6ijorCsipq1nqK4pZWspJeprbempKOfmamYqqSvsKmamZyUlZGYoJeZu7utyaBptrirsJWYn6Krkpe9o16psoKJio2Vh5F8j459g4aNj5SUiIeSlouPlY2LjZeZkp2as5aVq56LnJSSjZCSjJibipKej4uJlZ+ijpWOmJqdk5yYnpWioJScnKWvqKKls7irwsjEtbu9u8XIyMLRocbJzc3E1tbQy9OicXxqXlxVYFJRR0Q+PUNBQjg/ODc0PkY8PDY8MzUzNTU0NTRCMzo6Qk06QTtBSEI7OkA8NzQ2PEI5P0BCODc0Ojo2Pj00N1RLQ1VRSjc8OklBREA0QUpITkJBPzZEQTxKTkQvVD0yNTQ6RUpcWEpaUW1ncHBEaWBLSTY3NTc6PkpAQ0lQZUhiYGNwSkCLin6AcoaHfIGJdYKKgn5tfX18f3B3h3eNgYd7jY+Mhoyaq8LAsL7Gu7O0wby0rauztoyosq6uvaqbu6Sorbm3q6amoqGjo6qvsrGqnZykmJuYl56ipaWSo7muqMC7rK2yuaWkp32IhpytvbCDi4yLkIOPg5GPeoGHkI2OnIiIj5eNi5WXlJCalpynmrGakaudjpmPko6VkJCWl4+RoJGIlZukrJWWj5ScnpShnpuZoKGUmp6op6ShpLCzpsHGw7Cwu7bFxMO+zafHw8fDvNXQzcTKiXZ1ZF5cYVxPS0NMQEVGPkE/Qjs6ND5BPT01PDY+MzMzMjQyQTE3QEJOPkdAQ05DQT1DPTs4NkNDNUJJQjo4Nzg7NUI+NzlWS0RXT0Y4PTRLQEM+NEVLSE4+QUE2QkI/QlNFNThQMTQ1Ozw4O0Q+OUxqal07V1JkS2daVU83OUdFP0NGXGdHYGlnWl1bk4yMiHuHi4aDjHWGkIqBbn58gn9xfoF6lXqSlJSYkZOVp7TGycDCzMHDuse7uq+rubuXsra6s8CupcCkqrC7u6quq6Kinqesr7WwqpugqpyinJafsLSni6O6urXBu6uonLKkpKiUhI6pw8SkgouOh4iEhpWUjXqDjJGPkaGMjJSRj4mYoJeTmZSXpqCunYyqnI6Vj5KRlZWOkJWRj6GUhpefoLOflJuUoKGZpJ+aoJyglJiepqSmp6SvraW/xMKuqbe1ycO+ts6yxb7DvLPRysjBtXZ7bl5aXWxUTklDTEtKSUBBPUNEPDVBRDs6Mz04QjMzMjI2MkEwNUlFTT5JQEhSQEg+Q0A7Pj1GQTVBVUA7OTk4PDdFPjg+VkpDV09HOD80TEBCOzVKS0NMP0I/PEJGPUFITDkrRzwzNjc0NjRBPzdPYU9hRS89PjZrbGpgQDpIPj9FQmdcTWVcZlRjapmNlomLiJKPhol5hpOQgXKAfI1+d4eBgpB6jaGWqJqamLq+yMnKwtLJysLNvMGzrbu+p7q/vrzDt6zBqayzu72qsKmkpaOsrrSttragoK+fpaKYo7S9qZuovMGjtravq5KvrKqrloaaqaalkYKMk6WViYB1ipJ5hY2RkJ6gko6Ui4+NlKOZl5uUlKOeqZ+RpZqMj4+PlZaIfY+VkpKjmpWgopy1ppCfl6Wko6WfnqaYnpWXm6Wjqaiisq2ou8DEr6Wzt8zAua7Ds7u+wbitwsLBwJlwe2NaWF1cTUxNSUdEQ0hCQkFDSzo0REg6OzQ8N0UuMTIzNTJCMjZTSE48SkJKUUVLQ0RFOkVMQjw3RVY9Oz04OT88ST86RVVJQVdRRjdBOks6Qjc5Sk1CSUBDPjxERzxCQ089MjBIMzY2MTcwPUI6PWpqSks1UVMzU3BwZE47RD1ARj5rSV9YYVpkZVaej52Ol46ekomKf4mfkoR4hX+Vfn+QiIqQgJWgma6no5jCvcnEyMbTzc7Ny7zCt7C6vLS8yrzDwba2u62zv7m8ra+ooKmntq2uqbK3mp6toqehnau3uKmlr77Esb25s6eps7OtrpaVpaynoJGOkrHFp5WNfJGVfYeRmY+qmZiTk4+TlZOlnpOdmZOho6KcmJ+Zi4yPj56IWpCXl5KWpZpmmaOfs6WWo5asraunnJ+nmJmWmZWhpKimnrasqbq8w7WmtLbLwbiqtqyzuriuqLi6vbiDbnBcWlZXT0dLU01LP0FIRURHRkc4NUZNOz43PkFKLjMyMDI1QjU1UFdOO0xGS1JMT0dHST5JUT86OElTOzs/Nzk+RExCQEhTS0BXUEY6QT9HNkE3O0hNQ0U7Qz00RkU6QkFCRzkvOkEzNjAzPkdEOTQ9dGRNRztFKzpmfGhXOz1AQkZCckZpSVJlYkxGppSclqGXqJaMkIOHpZKIgYeCnISDlZCRlI6aop+vvq6hx73GxcjHzs7O0sq+u7axuru8vs62xL23uLeysrWzuLKrppyrq7irqaiwsJejrqSnpKW0wLCqrLO+wrrAubOnuLO3s66Vpa2urqSLk5WhjXPBmX2WmYSOlpqLsZWampWSk5mapqOVoJuWmqicm6GgmYuMj5adYEqWnJqUmqWXVJawn6+cn6WUr6+tppuhppSTmZmOnaCnopm0qaqzvby7q7Cyx8C4pqurrbGxo6GysrSkcnBnXlxQUk1FUFBQUTtIS0lGSEFDPjlLVD9BOj1FTTA3NTQ0OkIzNE5XTzxKS05VTlFKUEhISk9CPD5NUjs+PTg6PENSPkRIUklCV05JQENBRjM+NThKS0NBPUM7NEVBOkE/PkhANSpCNTIsPmNdZzozNXRkZUBSNyYjM31pWDs6QkNAPVJFV1JzYldGSKuXmZ+hqK6YkJeHi6eWjoiShZ+IhJyXj56gm6Oltcm0qca7w8TIysnIzM7Hvrqzr7m4wMHNtci6wLm1urGvr7K0pqObqrS0q6mmrqyZpK6lpaisur+oq7a2v8HAvrizssKvt72ro660rLiliJuXppt2vqCEmJyOk5mai66WoZybl5WboKGpnqigmpqqmaGnnpeQjZGdg252k6KalZ2in5CusqOrlamqmKuvpaWgpaqTkpmbiJScop6Wsaeqq7q3vbOyrr65tp+jp6ilp5ycrKmpjWVoYmBTTE1HSE5KVkw9TURNSUpBQ0Q8UVU8QUFCRE8xOD03Nz9CNzVVWE4/SE5RWFJQUVRKUUpKRUFFTVE/Pz04PTtHUjxFRFFCR1lNS0FIREU6OjM5S0lCPkNCOTlDPjxAPjs7RzctMj4tMYJoTnpcLzBraGA8PUJCODZ6Zlc7Oj0uLlNhTVZIf2VeSEaslJyhn7uumJSei5Oqm5GSk4mrjYeinoykrJSjo7bHvbTBusPDyMnFws7Iwr25sq+5tMDCyrbGscG8tbqrqK2sr6Oimaq0uqappqyqnaivp6Srqr68qKy8s7e9xry2tbjAsL2/s6m0tqu+pI+il5Gin7yfiZqgmZeenY63n6mcpaObnKGap6WzopudpZyoqp6ZlY+UmouXiY2kopScop+gta+lppOxq5qrrZ+epaSqkZWVoIOQnp+clamloqG0tbq1rai1srOenKKmmpeVmaqhnnhiX2FfTElHSE1RSU1FRkZCUkpIQURHQVZTREg8QUdRMTtCNzpCRjc5XFlLQUxQVFVTTVdSTlVKREBKSk5POUM/NT08TlFDPz9QP0VaTUpBS0RHQDUzPUlHPz1FQTk3QTs8QDw8M0A8Lyc7KkiRQjpTSjAsW29XNzE8Kh1CgGRUNDktMTpoXUZEQ5xwYkdFqJeknp7CrJuXpZeZqZyWmpqPqpaVqKaVrayZoaq2xMG8v7jBw8HIxL/Nxru+ubKwuLO/w8i1v7C8t7m3p6Srq6yhoZurq8Sipaispp6sr6yiqqi/uKasvbC3tse2tLm4vrC+wba0srSvvqOWo5aTm5Stn5ChoqWjo5+QvqWpnaisnZ2hm6afvaKYpJ6iqauhnZaNlZ6Tn4ePhY2TnqSgnbWsppyWsqeZsKigm6ufoY2ZlZ+FjqGam5KlpJqYrLG2saqlqa2snJigoZKOkJWpn5RqZVtiXlBKSUtPTUhGQ0lAPU9IQDtHSUhbUk9LPUhOVTRCRjk+SEc1Q2JbS0NOUlVXVlFYVFJVSEA4UVFQTTpHQDRDSFFTSUM7Qz5HVktDQE8+SzwwNjtHRj47RkE1Nj85Oj85OzE1RDAtLDBNdlw0S1o1LE1uVzwtPSkeI3piUTVDS1E5b1JGPEt4ZmNYTaKao5udxKuhn6ydna2fkqKelqSgp6qsl7awo6qztsXCvcC2wMK8ycK/ysi2uLW1sbS0t8HGt76xuLW6tqCnraqsnZ6fpaTBpaCqrqCkqa2voqanvbalsbu3trXDsrO3ur6xw8C4uK2ztLWinKSVkZOgraCZoZ2pqKuimsOtqZ6srpubnpimoL2hnaSYq6urpqGZjZqfkp6Jjlh/lp6moaC4qqeTmLejn7OioZyvmKCPmZSdgo+gl5aNoqSVkKaus6upoqKlpZWVnZmLj5GTpJ+JY2ZcZWFNSktLT0ZFQUZLPj1KQTk5SkpOXVFRSj1MV1w5Rkk9RE1JOEhjXExDTFBTWVlWV09aXklBPVdRSUs/SEA1SE1YU0hBOkBBRFBIPz5RPks3MDk5RkU7OEc/LjY+Nzg+NzcvMT85MSUxUVVtW0pPMTA9Z1dEMTc9LSt3YFM2U1prV3NIRTY9dWVcTE+en6GYnsOnpaKzoZyyp5OqpJ+jn62prJ27sKistbLIw8HDs8LEvsfEvcXKvbCxt66xta+/xbW6sbC6tq2aqbGpqpuepqGowq2brLGcqqKusKmkp723pra6vK+3xK2zs8K/scazurertLatqqKllZWUo6uhn5+ap6uvr6+7sqagqamZmZeSoqS4oaGkkq6vrKSmn5KhnpWej5GNlZ2ao5+ntKenjZi0nKOvm5+cr5GglJeUmoCSoZaPjqChk4umrLClp6KcoJ6SkpuUhYuSjZyegGNnXGhmS0pMS1NCQ0BJRzs7Rj85OU5NVV5SU0o+T15ePUhQQk1MSTlOZF1MRUxSVFlbU1VPXGJIQT9aUUFIQUtCN0ZFTEtOPjtCSEROQj07TkBBMy85N0NCOTdGOys2PDQ2PDM1LS80QDErJ1Z0U2VPPzEwNGJbTTIzPjA8dl1eP1tVXmZyQDg8SJZ3ZUE0n6Sfm6DCqKOqsaGjtKmWsqumoqSyrK6pu7KtsLS0xr/ExLXAxb7KxbbAycK2q7WpsbiswMS0t66ttrqlmauyq6qYoKeXrbu1m6iwm62frrSyp6q6s6e6s7eyuMCqt7LCvLTFp76urbe1qaesoZeWkaWkoqKXl6SvuK2ytbagn6ikmZSVk6Ogt6OkpZWusrKlqaWinpqampWYqJ+fmKKerrKipo2Xr5mlrJibn6aSnY6VmZuGl5+UjJCcnpSLqamroqehmZ6WjI+ZkIGGlomUn3plal1sa09RTk5UPUJBTkM7OklANzdRT11eUlZRQVdgXEJKU0hXS0g6VWRdTkZPTltXW1JQUVhdR0FCW1BCRz5OQzlIR0hOUD8/Q0lCTEI8MklBOTQxNzdCPjs3RTcrNjkxNDgwMi0vLjw2LSNCcWdzazIzLzFcY1ozMzkwNnBbYkgwNUpwaVZDV0aMeWZDO6SknKGlv6aor6+hqbWqnbmvq6SqtLexsLm2sLe4uMW9w8e9vMTCx8G5wcfBuqq3pa27rcHDt7iqrbK8o5WtsK2yl6aokaq5qqCnsJ2qn7C0s6qptrasu6yysrm3rLmwwbm9vqbDq7C3rqiqq6admJiqoaKgkZegsK6zq7C5mpupn5mWkpemoLeppaKir7Gzq7Gnq5+boKCbnqWdoZedo7Owm5+QlKaaoamblqOgl5mKlpmUl5idk4iQm5mUjqmpp6Ckm5ibk4ePmYt+jJaGjptram5ibm5YUlFaVEFDRVVAOzpJQTc6WFBkXlBXV0RZXl5NTFJPX0tKPlpkXk5JUU5bVVlQS1NXWkk/RFhQREY+Tj89SUdHUVBCPUNGQk0/OjJEPzc3NTQ3Pz05NUU0Kzc1LzI1MS4tLiwxPionKz1ccD0+MS4xZVtkQDE3NDdnWWBGKEA4bH1oXFY6iXtjQz2on5yhqb2hqrCqo7G4qaW1squhrbW9r7O4vLq9t7bBw7/JxLnFw8HAucW+wbivtqirt7K8v7+1qq6yuJ+XrK2orZeoqY+nu5+lrbOeq6KxsLOsqraztb2tr7G1rLC1scC5xLarvK+xuKysqaKxpZ6kqJ6kl5CYn7Kqs6qqs5mdp5uZlI2gpqS0rqeirKyusaeyrLKpo5ufqKSelaCZm6i1qZeZkpKfmZ+hn5Gsn5mZhpaYjJ6anZOKjZaXmpenpqOgnpaVlpSBkJWFe4+ShIyXZm1zaHBzX0dZZlZEQ05YRFo5SEI2Pl1SaFxOWl1HW15dT01SWGRKSkNcY2BQTE1OWFdYUEpWVldMPUVVSkVEQU0/QUZISFFQQTtGREZLPTg3Qj02ODcxOT48NjVEMCs4MC8wNS8qLC8tKj0sKyUyKyo1SzEuJ19eYVYxNTE9YFZeOClDM1lVXGdLNYx6ZkxApJmgpKy3o6yppa6utqqutLmmp7C4xbext77BwrW0u8W+zMW5w8G6v7rEt8G5s7Wsqrq3u7q+tauusbeZmKirqqubrauPq72eq66xo6qfsa2zrq62srm3qq2usae1r7S6vMmyqrW0sbSvrqahs5+aqKygpZWVmpmxoq2gpa+WoaSZmZKNoqWmsqmhprGrqrWkrrC1r6OZna2nm5eemZmsuKKXk5CPmJyhmZiUraCelYKTmY2enJqXkYuUkp6apaOioZmWk5KWe4yQhXuNi4OLlGxueW91fGFGYGpaSUhaWz17SkdFNkFiVGlaTVxhSltcWlJSU2JhTEtFYGFgUExJUFdWVU9HV1ZVTjpJVklIP0NLP0VESEhRTkE/SEhIRTw3PT46NzU2MDk/ODY2QiwtOCwvMDQsKCwvLSo3NikoOS4kOks1LiJUYFZhLjUoQ15RXC4qQS9KR1BbRzNjWVRLRJmXn6+osamspaOurrWptrS3o6y0t8m6tLu6v761tLfDwc3HvMS9t76/wLe/vbK9rqe6ure3wresrrK5lZenrquno7OqlK+6pK2ysaanorKzsbKxtbG4sqmuq7KnuK+1s8TEtqm0tauwramnorafnqaxoKSUm5mUsZ6nm5+pjaminZuVl6WlpLenorCzq6exp62wtaykmaGsqJucnZuUqrmclY+Oi5mdopiRmKijoJeEkpaQnZyYl5aIlo+XmqidpKGSlpKQlneEkId8hoKEjY1ucXh2fH9dS2VsXEpPZFw/YntHSThHZ1dlW01eYk1YWVdVWFRpXVBPSGFdX1BKSFFWVVJLSFdVVk04TVpORUBGSz9IQkNLU00/P0xPSEA7Oj47NjswNDE8PTQ1OD8pMDcpMS4yKSksLC0rLTkkMDQyJTlCNy4jQU5JZzI3J0ZhTFYlLUIuPUVMUTwzcmtLREORmKStpK2tq6ajsLKzqrawtp+rtbnJua7Bu8O3s7K1wsPPxMDCvrW9wL+6v72zxKiqubG2t8C9sKy0tJ2hp7CtpaaxpZ6ytayrsrCsqai0uqy0s7WstKypq6isqbmtsbDHvrikua+pra2mqK2wpaOjrqOpnJ2bmq+ZoqOio5Csn6Ogn6GppaW4pKu0tKSqq6isrrauop2jqKqcoJmakqS0mY+JjYeRo6CWjpWfoZaUho6Uk52bmZaVh5iSlZmnnaCgjZORjpF4fo6FfX19h4qKcnRzf35+XFJkbl5OWmddRkSWW0c6Tm1YYltNYWJOVlZWV1RZZ15RUkxkWltUS0dPVFNOR0lWU1xOO1BeSkJESEpBRT8/S1NPPjpOTUM8PD45OjU9KzMyPTYyNDk6KDQ1KS8sMSgpKywtKiY1Ki8mMCkzODoxJiozQ2U7NipIZEhKKzpJPzNDSVMsPo9rPkhJj5qpqqGpsKSoo7O0sbS1sbGhrK29y7quwbvGsbSttMLD0cTGv8GzvsLCvL+4vMWorbess7i8wbGssq6hpKetqaiksaOrsaqvq7Gurq2rs7unt7GyqbKpq6alo626rKqwwrm0rLmoqKitqaexpamkoq6qqKKem6KslaWdl56Yq52hp6ihrKWjray3sbGgqaKfqq2wrJ2epqepmqOYmY+gqJiGg46Ki5+gkIyNl56RkIeIkZWhnZaYloaWk5OXpZ2dnYySkI6KgH+IhX13gIeFh3Vzcol2bF9ZYG5jUXNyXEs8hHxGP1d1WGBZT2NcTlVWVVdQXGFfVE9PaFhXVktHTE5SSEVJVlJdYzxQXUQ8RkhIQkc/PUpQTDo+T0o9OT89Mjo3OyozNT4xMDQ4NSg1LyosLjMwOyksLCclMjM0JCwyLTg2MCkoMTxeSzAuSWdERjg8QjA1RUtYMUCUXEBNRpWWrKehqrKcqamwtqy4tK6qpKurvcm7sb63w6+wrbPExM7Ow7+/tMHDxLrAtMnErK+3rrK6wL+0rq6spqiqsKmmqLKmtK2qsK6tsa+zrLO6pLizrKytp6ugop6wt6uqrbq2pLW1pKmnrKyqrKGopqaxsqSmpaGhq5aqoZOaoKaeo6KqpKyinqaxt6ysoqWimqmqramcoaWkpJmgmpWPmJ2TgYKQiIWdoI2Lj42bkJKMhI2ZpZyTkZuMk5GRlKObm5qLjouLfIeBgoJ7dYGEgn51d4ukh3lrXmBuZ1dmh2ROQGeSTERieldiWFJlVU1WVVVUT1xdYVZLTmlXVlZJSkhJT0JHSVNRWW9BTVhAOkpHRkVHPj5FUUg4Q0tFODdDNzI6OjoqNDk/Li80NjMpNCsqLCsuIzQuLSsmKCs3OSomNis8LTIsJjA2WFouMEpnQUE8PEMrOkpPXjREhkFJSESWka+koqqwmKqorbWrtrCrpKuqqbzBwLi5s7y1prKvxMnL0b/Bu7nAwMK5wbrCxK6xtbK0u8G+s7KvraysqLaqpa2wq7muqLCwrrGrtaq2taa0tquspKmqnKOds7OoqKSztKC2rqGpqKuoq6egqquoubapqqqpoamfrZuRqKGdoKOipqKpnZymtK6npamio5elpqapnKKjo5+ZmJ+Rjo+YjX6HjYeFnp6IhYuLj4+RjYSGlqOajo2akZKRjpOfmJmWjYuEf3SHgYB/eHWEgHt4foCInY9wcmdncXhcYXSIaU9dmFZIbXlVZFZSY09MVlRVUU9YWmJWSFBqVFZTR1BZVUk+SUhPUVB4TU5WPTxLRD9AQTxAQ1VDOUFLPTU7RTEzOzk3KjQ6PSstMzQxKjgqKisqLCkqKC8qJiklMzssJDIpMjAyMSUvMlJjMDI/Zj1OWD9DLD9MVF8vSWs3UkU7lY2voKWqrJmrpK2us7SuqqWvqam7vrvBsa+4raK1r8nHyNHAv727vMO9usPBwL+vsbOytr28wbKys6u0qaW1qaSts7O4r6KttbGvsbmquK6qrrarqp6qq6CjobatqKGer7KhtKqeqKeqo6qhoaytqL2vrK6soaenn6yZj6+imKKgqKeep5uYqbCoop+soqGSoaKippiaqKWYmJidj4qHlYh9jYaEhaSWhoOCjIeQj5GFhpWhl4mSnZGTkI2RnZWXj4qFhnhzgX99dHh6gXt0dHtqgoikdmleZWyBdWeIi3xSV3BeS3hzVGRTUV9NTVJaZ05MVlllWEdTalJRPkJOUWFROklITFNJcVFMUzs8ST87PD07QEBXPDw+SDczQ0IxNTo5My01OjopLTMxLS02KSgrLSw1MiMyKScsJS47LiYxLjAtMTQlLDBNaTozOF89YWQ/RjFDUFtbK0hPO1hCNI+OsaCkpaqjpaOsprSzsKmksKequL7BvLCouaqnrrDJx8jQwr3Avrm+vrzJvMK5sbC1srq8ucCztLutuayjtaenrLK2ubKmp7q1rbS8r7ylra21q62cqa+kn6WsqqecnaqypLOomqqnqqSpnqKpqKm9q7SvrZ6po6CunJqyopakm6Sln6SamaeqpZ6aqaGbkZugpJ2YlqmpkZmak5CKgo+FfY+CgIiej4eAfoyHko+QhYGUm5SGk6KNlJGLkZuTlYeJfoByenl+fGh3fHt1cXJ+aYZ6hIhkYGhjcoV7bWh5XV5WQ1h7bVRhUFJZS0tNcHRdSFpbZ1lFVmdPQz5LTkRDQTlIR0tTP2phSVE4PUg8PDw+Ojw/VDY6P0M0NUg+Mjs1OTAyNzw1KC41Ly0xMSYvPktJMSUaOTAlLCwwOS8sLCs2JzE3Iy0vR2pJMTRYPWZiQUo3R1NgVSo9PEZcQCqOk7GZn5+ppaOhqqS2srGkqbGnrbnBvbWwo7mtqKiww8nJzMG3vcC1t7+6yLbDtbSztbK9ubq9tq25tr+torOnqquvtbe0qp26u6ixv7K5oK+0tqmsnq2xo5ylqKqjnZyksKavoJ+rqaehqZyjqKCtu6eusa6hqqKjrZ6erKaXn5uhopyfmpmiqqKamaOjlZaTnqGWm5amrIuekZCRjIKLgH+PgXualIyJfX+Mh5CQjIqGkpiRh5SkipKSh5CakJOBiHx5bH12eXhie3pycHFzeGqCdWqDZ2NoYW5zjm1ianBgb0JdeWtWXk5RUUtJTFNZVk1cXm1XRFhhT15QSE1ERjs3SEVLTzxyaEpLOUFFOzs9PTs7PUo0OUI8MztHPDQ/MTgtNzg7MigwOS8sNS4uPS0qTD4qHTQ5JicuMzQuMCsvNCYsOiQ0MEFoWjEzUz1lX0RMNktWZE4pPTNRXT0jkpesmZ+Xp6Ohn6ejt6+toq+vqau5wrqzrZ+5r6uotLrHyse/t8K+r7S+t8S2w7KwurGywLa7vripubi9qqS1p6iqsK25sKmZubyjrb+0tKGut7Wmpqews6CfpaaooaSZnqyoqZ6gqq6noKaXoqifsLifpLGuoKyhraSbpqapmpqbn6OVnJuZnammlpqeqJGYkpidk5mWoaqQmomNkId9iH+Cjnx8oYyMiHmEjYWKjY2FiZOajomVn4mRlYOMl42RfYR7c3B8cXN0YHl4am9xcXBrf3NkemxoZmRiZoeAYFtyanFNToBpWFpNUUxLSFBSUUhNW19vVERYWlJnT0hLRUY1NkhCTEk1WmVKQDZFQjk6Pj0+OjpDNTk+OjNARjwyQDIzLzo7ODMmMjwwLDg1QiopLUMqLDQ7Tk5AOzczLS4rLTcqKjwlNTM9ZmQyNE0/ZV1GTz1SWmdIKj8wXFs1KJabpZiclaygnqGkobeqsKO0tKmpusW2sq6gt6ytrbC2xcfAt7/CubC1vLe/u7+vrL6ws7+yvcO5qbu6uKeotqinq7Css7CmmLy2o6q6ta6fsbivqaWnr7KboaSgpKOhlpuvpqGfo6ivoaCik6Okorawoaaxq5+so6+Xm6qlqJ+Ymp2kk5qbmZylqZmbm6SUlJeVnI6Tl6KpoZCJio+GeoR+hIp6j5eKjYd6goiEiY2PhY6TmIyOlpmKj5d+hpeMj3qAenBxdm5vdF94d2VtbGxraoRvZnJpa2ZpXmR0gWBba3ZpWkp/XltYT09LSEhSVUYyOV1ebVBEWFZZZU1ISUVFMDdGP0tCNklKSDs2Rjk0OT49PDk4QDg7ODo3QEk+ODw0LTM8PDc1KDU+MSw7QTEoKzY8IjhSPSoxMTM+RDUsLSc0Mio7KzEzOWNtNzRHQWZbSFREVV1oRC48MmNWLDKVoqGXlJuqnaShoqG3qa6gurilrL3Fs7Cuo7Wvra2vtMPDvLO/urexs7m4uri6r67As7S5r7/BuKy9urWmorOqp6myq62xoJrAtaSmtLWonrK8qailqa+smaOnnKSllJihsqWZn6SoqZyioJOkn6O4qKSnrqadpaGokp+ooqGhmZucoJKam5afoaqbmpiglJCTlpmNk5OjqKSQiYmPhnmEe4SGfZ2NiYqHeoGEh4mJkoWWk5OMkJWUjY6Ue4OXjot3fntsdHFsbHNhd3VpaWpnZ2+GaGhpY2ZpamBrY2poXGV7Y2BTdFRcW1NMSkdJT1NAISpoXmpMQ1ZVXmBLSUdFQy46QjxGPDZLUEQ4OkQzNTc9PTg5NT86OzQ+OEBLPT45Myk4Pjw6OSo2QDMuRTQoKyw/MC1OPy4rLTcsMTE5NSwmLjUtODA1NzZgdEEzQ0RnW0tXR1VgaEIzNzlnTycynqKjkY6kp5uenp2jtaynqrq3p6zEwbawrKO1rqeur7fAv7yywbewrrK2tri2tq2qvbOusrG9v7iuvLuxpZ+2q6WltKmqrp6dwKuopK+yqay1u56oqauxpZieqZ2mpJGZpq2imJ6kqaGboZyWn52ntqWvqq6hoZ2doZSgpp+hoZqbmZyRmJyTpZ2roZeWnJSSjJWXi4+YmqmgkYiJi4h5hXeCgoKdiIuCiX2AhYiHhpGEl5WQjpCRkZGMknuDlY6Gc319Znhva2prZ3Vza2NnZGR2gWNlZmZmampka3JaX1ldbWRhTmlYW2BWSkdJS01SWD45X2xpSEJUU1xbSUhGRkEuPD85QTg5UkZANzpCMDM3PTc2OTI6PDk3OjlETT1CPDAqPEA7QT0tNUIzNz0rKiwwQipKSy4vKiszNzIyKDU3JCs3LjcyNjg1XXlOMj5IaVpMWkpWYmZAOjNCaEglNZqjn5CMraGYmJ+WpLOxorG9tqGxxry6sbGkt6yqrqm5vLu7rsGyrq6utq6yuLOoq7mxr66ztrq2sLi9raaetaqgoLCkqq6cosCgsaSusK63rrWera6traKanaeppZ+Vmqeln5mloqidmp+blJydrK+luqiuoqGamp2ZnqSapJ6XnpiblJmgkqiVqaeak5qakYuVmY6UlJmpp46NiomPfIJzgYGKmIWHfImJhYWKjIqShJSck5KPkJCWjpB/gIyNgnCAfmZ5bWhraWdxcmtcaGNjdIFiZmhqbmxnampobl1sbHRwYVVjaWRlWklGTE1PWFFRVmFlgVVAVlNZVUZIRkVALzw9Nz82PEZOYTg6PzI0OUAzNzgyOD83PTg+RkpARDkyLT1BPUE9MDVAOUAxLSsuMzw7SzYvLissLTI0OzYjMyopNi41NTQ2NVp8XTE5S2pbTVtLWGRkQEExSmZDJzSRoZqNjrCempOhmaiyr5+4v7agtMK7vbqxprawqK6lt7i3t627r6yqq7aqs7itpbO1sq6psLe2sbO1uqepn7WonZ6ooqmtmqe+mK2jrq+1ta2sn7Gtr6minJ2jq6iclJympJ2aqqKklpqfnJCbo6uqqbufp6SgmJmZnaGPa6KWmZxwgpWao391kamnnpSUnpCIl5mAloqhkHiGlIyDbml+doNxbIaLhn2EjIdwXmNhZ4SYhmyLj5SSdHeLhH6Dj39nhoBndWhlV1xoc25OUGpjZ3OFZ19kZm5tal5fYYqPg4RlTktEOUZUZ15KR1BQVFVLSFJgb3RlRlpRVVBGSEZDPjE7PTY9NjwzZlw1Ojw3NTtENDg2MDpCNz86PkZMQ0IzNDM9QEBAPTI4QEU9MSwrMDg+RzYwMS4qLiovNTY4LCMxJzIxNDoxNzVYgWwxNk9rW05cS1tmYj5HMVFkPSoui6OZhpWwm5yToJuqraqjvcWvqbjCuL29rae3sKWrpLezsrOxua2ppqy0pq+1oqi4traop6y3s660rbOiqZ+zqp6hpJymp5irupWmpa+zt62upKmuq6yloZ+coKenm5egpaWbm6ennZOfn5iQnqeqo7Wvo6OjnJaXl5ejiKCOkpqHoYeTnKB/pH+lqp6SkZqRiIRyeI2OhYihdoiMaZeIZn1yeKFviIeEfo59f6GgoJmAfIeedIeOdpuKbIeBg2xoZWN6a3FhU4VtY2xpmHFZanBviFheaVtra1uIcW56coVnhoRaXkdOP0dfTUZSVlZRUVJXVGdeTVdJUlNQRkdHPjw0OT05PDc7MDw8Nzk5OjY9RjU4NjA8Qjs8OT1GUUc9LjU8O0A9QD41OUdBODIpLjE8STkvMDEuKi8oLTQ1ODMlJjIxMTU+MTw4WIN1MjVSa1tOXExcZ189SzFXYTcwKIumloOcq5yZmJ2fqqqnqb7Dr7G6vbfAv6qlt7CpraaztK6vs7erqaWxraW0s5yttba0pqeos7Gtsqiunqugsqigo6KaoaKarbOUo6WltbynrKerqqyopaGgmKCmo5mZpaOkmJykqZaUo5yUk6SlpqG3o6OgpJiUk5eSnIivkJiUiamLl6GbhbGAo6ydk5mdlHmC1KiAh5XBm8d5eLGlt5dkgMCcv3mEhHmQhHyQkJHKcZe8nMV6crWmu5B7gGyWsauweGhrWLGubmVpvJK8bmh6b3KQ2H5TamK2sn+BcpV0mqGqkFdPV2JQVk5GVFtYUVBSjFxXXFBAXERRTkVHSjw8NTc9Ozo5Oi49Ozg3ODs5PkY2Ojc0PkA+Njk/RVJJOi41PjtCPD9BODpKPjUyKjIyQkUvLjMyLisvKS0vMTg2LSAvNDE2QTE9OleDdzIxVGtcT1tNXmdcPkwxW100MSGNppKAp6qfl5ydpa2yp7DCvbK1wLW3vsKrp7OtrKmnrrOpr7a0p6emtKWnuK6cs7K2qqWkp7KurrGmqp6npLGjop+el5ufna6rlJ2in7O6o6qpoq2upaGdm5qhp5+Xm6egn5iep6eRnKeak52hpqKgsKKfn6OWlZKYkpmFr2tqio2qfmeDlYatZHCdnZSZpZRxrqGkfni7fWuhj3axX2q0W6WAZpyRYGaCemZ/anhrqWS+cmemjHWxanyxeHSSk2NtbaduW4SgRWhmh5ZFdZxgfmh8pKeCWV+Lq2mAlnh5aqc3Sq9cWFNsZFtLTldfXFdWO06JT1hXL0lUVEpERkY9PzQ2Pzs4OjkwPTg5OTk6PTxEODs6Nj1BQDY8QEhRRzkwNzxBQz5ARDhARz0xMy0zM0UzLi41My8rLyguMC46NS8nJDIwM0IvPTtVgnYyLVZqXE9ZTF9nWTpNNV9ZMzAbkKKVgqynpZ6jpKqyt6uzvb6wtsSyt7rBp6mwq66oqbCuo7C6r6SkrrKjqbionrOysKOloKqtr6yvpqefo6Kwm6Kbl5WXm5uspZaboZ6zs6KrnKKtraCdmZegoaicmJ2jn5yZoaakj52impegn6qepqagm5+hlZWRlpGahbWbtXiFqZm1mXaGs5u3fpOWlqiUfmyCpnuChoiSlJJ3q2drsVure4+HlHSJcY+GgH+IkJd4goKLmIyDoI+EsHZ3n3Fra2x8i06kWEhjY5l+Y2imYHlzdVOTh15QqW1jcX6HgGKcLlGhb1tTa2hgTEtbZFhcWkI+sXlYWEEjTWhGQ0VBQEExOT44ODo4NDs6OTw5OkE6RTo6OzY6Q0I4PT9LTkc6NTpBRkJAQUQ8RkQ7MDIwMTtGLDAuOTQwLC4oLzMsPjgzMR8vMi1EMTw8U31uMytYalxPWE1fZ1g3SjhhVTUwG5WflYezpqagrqmnsqypu7bCsLvCrbi2v6mrra2upq2xqaGvvKqhp7Sso6u1paazs6ejop2nqrKosKilnp+fr5afmJSVlZedrKGZmaSotK6hqY+pqKmanZWYoKWnm5+dop+boKOko5Wbn5eZnaKpm6WZnJyioJeTkZOTnYPVk5m5cLDCfsWGfNaUm7t8mpWkj42cjaR7joekgqWCeqx5j51Wr3qIfp9quVq5doeEfaaCk3yYeqp5jZ2Qe7FujoR0kLyFb5RQr6fFilGgemNgqWJzc4htl4hgU7W0yIaAiXxjpDNCnXZdUGppZFBAWGdaZGFKSE5tTVtST1lmWUNEP0U/MD08NTk7NzQ8Ozg9OjxDOkY6Oz42OkBDOzZAT0xIPDo8REhDQkNEPEVGODEyMTFEQy4vMDQ4MystKS4zMjM5NzEjJTUqPjM9PVF3ajYqWWlbS11PX2ZUN0c6YVE3MSWbopOYsaiopbOqpbSppLy3wbC5wLG1s7qytKaxsKOwsqafrraomqe5raOvsaCztLCgpJ6fp6mwqbSppJydnquXmJeVl5WVoKmcmZanrbCoo56PraKmlZ6XnKGloZmioaGhmqGippueoZ6UmZumoJynlZubn6GZj5GUkZ2Ism5otXGrh26OpnK0c3K2e5qXpIuPnY2jf5GhpX6wdoOR0tF2XK57hX+kb5uqpmuHhX2tfZeZj3uxc5Kdj3mzZZZ0hJ5vnmaUUsiLWsJcn3liX61gdnSHYpeIXlnKnW+/gXVNS7VTVcZkVFFqY2ZYQU9rYGxoUFVHSTg9VlFaV1hJQz9KPDI/OzU9PDQ2Pjs3Pjw9QztHOTtANzs+RDsuQ1JKRz4/PElKRkNFRD5ISTkxNzQ2QD4vLjI0MjUyLSkuMjYsNzQyJh82MDs1Oj1QcWg5J1dpXEJPVF9lUDVHPWFNNjIwoZ2Spa+tpKq8raa1pae2u7yyur+3tbO5ubKktLShsbGin6ywpJemua2ksbCctLiqoKadoamksqisqaSanJqonpWUl5iSkqKnn5aSpaqwpqKWk62fpJGUoJukpp+Vm6amoZqin62aoJ6dkJWboZ6cppWdlpmin5WYlZGbhax7d6h2o46IhqlvrYqCp4OYmKGJkpqKon+TmYmuhX+Cs1xys1KufYOCpH9x1314hX6PnYaZmnevhoqRnIh4s2GaZZqBgpRsklqwWEuadZh5ZmCtXnZ3h2iYiGtdr3eVno94bDV5yK6yX0JTb15nYEVQbV9wbVZVTS5lY2hSWFE7QURATDo1PzkxPTwxNj85OEA9OkM6Rzs8Pzo+PkU5LUVVSkVAQzpNS0pCSEc+R0s5Nzw0Njo+LzA0MzMzLjIuLjE4Ki4zMiUhMDM3Njc9UGtlPiZWZ1xAPlZfY042R0NgSTo5OZ+dlaC5sJe0wa2os6ipsrq3s7i/ubextLu0pLezn7Ssn5+orJ+Up7WrqLGxq620pJupoKCoobanpqmimZ2VpKGTkpuYkZSipZqSj6atr6aglZmpn6GNkaKZqKWglJmlqJ2cpJ6snaGdoI2UnpqdoZiZnJaXoaCTmJCmnoapfX2leKGPjoKqcK2LgaeGlp+hiZeXiKOCkYiUqnyAi515b7FaqIKCiKB5dNh/doh0qIGOm42So3yWkJ+Ee7JenGSgfoOVbJJcq1tak3+Rf2hnqmRye4FrmIdzXaxaiaCOa29lT0pDoVxbTHRdYmdNW2FecXNeSlY2SpuTWEhFPUdGQU0zNUE4Ljs+MDVBNzhAPDY9PEY/Ojw2Pz1CNy5IVkpFQUg2S0lOQElLQEVOOjpANC47PjEwMjE0NCsqMDUvNywmMjEoJCQ2NjcxPFBlZUEmVWZbPzJVX2JMN0ZJX0MyPzihnZqav6uXtMKurK2pprSwt7G1v7m5sbC1uqm6tJ+wpJ6lp6eek6qwqa+ptayqr6GYoaCmpaS6oqOroJebkaKglJOemZOXnp+PjYuosK+mnZabqKaei5Kkl6irp5SWqaeenqCjraShnqGNlaGYn6CSnZeclZ2hlZaPq5yPrm1ytHKpjHaKpnO0eHOzgJGko5KcjYmkh5B3uG+Me4uia2u2WqCFZZeXaaGip22TcrR0k5h/smqFkoita3WzYZ1mom+HkmqXXK1fTaF8h5FSc6NseX9+b5iHcVyvVjycd2VUb24uXKdPY1JrZWJtWmNcX296YlRaUT4+bW8zQ0JAP0w5ITdANi47QDM3QzU4Pz8zOzxDREJKRk1JRjYySlRLRUJJNklKUD9ITkNGUD08RTUwOzswMTAvNzUsKyw0MjYvIzAwLCwdMjg5LzlOYGVEJ1VkWT4vVV5hTDVGTV44MUM4pZqcnruhnLLArq6rq6e3qbivtcC1u6+uuLaqwbapqaCbpqSinZGqqae1o7Knr6qgl5ynoKSruJ2jrZuWmY+lo5WMnaCamJyfkZOUqrawp5mUnKyplYuTpZmlraKQlqqyo5+epquwmKGjj5milp+blpyXoZKcqZyUkKuZh9SSmrtzsMOAw4Z+1ZabuHiIkJiMmIqMp4h6o7Z1fXd2woKasmCDunnAfHW4YrWBjIepfZWBrKlxe391vIinoGmdYaaOr6F+jHSHqn2+bnO8dLKDdXiBi26aiHFujaR0vV53fVthebxrWlZbanpeamFlZ2Fsd25ZW1lDQUByQENHKzVHIic7PzEwPD83OkI5OT1DNDxATlpeYGBfX19aUFBSS0VGSjRITFJASk5FRk9CPEU4ND05MDIwLjg3LSouLzE4MCItMSwzHiw8OjA4TFhhRidUY1g8L1ReYEs1O0xbLTdBOaebnqK8oZexw7Ctqqussae4r7bEsbmxrbqvrsCxq6SinqOhnJuQqaOqsqS1pq2lnpaZqpmmrLmdo66YlKCQpZ+SjJyjnZedm5GVkq65sqyVl6Onp5OQlqScpKyekKCoq5+bn6ijs56jpY6nopSimpyYlaOYj7CgkpSpnoWQmbWAkJGMt5V4gpOatXdta25zb3mPhI6JdJ7Bu72ae4GyqHCAdJG5g3yGhoyGjXuKh42XfKS7ub2cdXq0o3R2l3V0sHWZnmaGaY21dHJwd7aMXoB6fYpog3lteWOLrHB1hX9aW6dqRWRZU2ZgY15jUWdmcGx1Qk1QTEQ6Wk0/SjM8MCA4PjsuMz1BOTk/PTs8QzZCVFlaWltbWlteYGJgXVNHR0g0RElUQktOR0VPRj9HPDc/NzA3MC85Oi4sLy0qOC8lJjIoNCQoPjcvN0xUX0cnU2JXOCpPXl09KzpWVic+OzynnqChv6WWtMK0rKuorKupuq6wxa60sq63p7S4ramioaWeoJ2Zk6ukraqmtainn5uWoKOdrKS+pqGql5SckKGakY+hqKGTnZiTl5SxtbetmJ2kpKKKkpKmm6Wqm5appaWcmqGopqajqaGRrZ6Wo56Xl5edno+wqJSbp6GOan5pnKZ4h3J9mo50emSHe72+wLpvkoJxlYdhc2paXpuKYWOIjpVrYICVZG2dd2KVa4CalZRlXmFjcZqKaXKMfYWVZ2p+cnR4fX5iW3d0gWhQXG6EfXyLa1hseoJzSkpvhnBNdU1FV15mYEtaV2djX09bbXVpclJPREVOO0hIPUw/Mi0yQT84LzU/Qzw5O0A7PUM+UlZWV1laW1xcXWBhYWFgXFVHNURGVUVKT0hGUElJSDs4PTUxOi4wOzouMC03Nj01JiIvKjIsJTs4LTdKUl9JJ1NgVjQpUF9MKDM9W08nPzI+qKCoocKjmrS5taOspa6np7Wxq8irsLKrtKO+sbKmoKKonKKbmZmspq+kpLWppZuXlaGbpq2ovqeoppWTm5WfmZKXpKmokJ2Rj5icr7K/rJunnqeiiJORqZqoo5qbrKCjmpqjp6yin6uimrGblaegl5Wdn52XsaSXoaiZnJGdnKKkmKaimpyampmPlYFnbn1xd5KXlJGFi7WqjYaYlY6KjJiXh5SVioSSlJGJjpKUmJSYl5qgopqclKGejYJ6pIZsanyQfIB1iYqBcYJ4eXZ2i4B8imtzgXSDdWV2fXdrcHttYGNdcGdMWFpmamBXWm95bW1mU09GUzlPWU1STygrOktCNjM1PUBBOTpDPjxFTlNTVFZXWFlaXF1gYmJhX15eW1RLQ1NHS05ER1BMT0k8OjszODksMjs4MjApNklSTzgiKSsvMiM0Oyo3Rk9bSiZSXlMxMFReOis9OFxLLDwtQLOhs6G/oaSxsregqqayp6WwtKrIq6ywpbWmwKe0oJ2kpJyjlZWgqqeso6O2q5+Zlpafl62qpcGeq6SVkpyXnZeSk6KfnqKnk5GZqKeyxK+aq52qn5CWlqidqpucoKyYoZucoqSvpqGlqJ+umJennZmaoJ6enK+gnKGmlZeSmJOgoZWjnpegjpaTioqNjpeukHyVm4KSgouqqIaBmZeKhI+fiHuEkIeGmpKIhoqVj5uXjZGYnqOWmpORno1/jmahs6+FioR2e5CKfHZ5em9mepGBgIlrdYF5iHNpc396dYOHgmt1ZHlmYGllY2Rma1lse29palxSTFBEX1RFQD8/LDRARjs0NTs+QTs8Pz4+SE5OT1BTVVZWWFpcX2FjYV9eXl1eXVhWSktMQklPTVJKOzw6Nzg2LzI5NjQuKCYkLTEuLykrKjclKzwoNkNNTUQvVF1RMDVNWzE3RTRcRzU8LEC0oLmvv6yrrrKxoKumsa2irLOwxLCqq6OzrryjtJufpqKhnJmXp6WppqSlsrSelZSdmZmwpa6+oKuikJGdmpmUkZSinJeonISeqquis8izn6qkqpaWl5qnnaian6Srk56fnaCpr6mlo6uirpufoKGYpJ6cn52vo5ieqJOXlpyRpJiXqJ2al2WCknxlfo2akGR5jWxoa3uSpKpqZZqYfmeGimVlaWh7jqGPa2iNl5Gjd2tqi5mjnplzbG57hI2HelhlXoaCXmyLiYB2XGhzd3eSgIeCbniCeIBzbXmEdHeJiI6EfGqGWV5rdGRdc4lpa3xxa2NeUU1XSmRYQUo0PUY3P0ZENzE8PT9BRDs7REdISElMTlBSUlRXW15gYWFgXV1dXV5fXVpVT0RIT0tTTj0+PT02NTM1NTU0KiYmJSwqJS8qKyc2KiQ7Jy9BSltKLzdaTzYpRVkvRE8xWUM7Py49pZ+6vLmvrLOxqqWora2wpq2tsbyxqaekra+wn62XoKOdopmZpqucraOlqKmyrZ6Vo4+ir6a2uaWuo46OmqGZk5KaoJmZpZV7pa2iqLTEuKSip6+enZSeop6jnKOpqJKeoZ2gqrCqq6SqoKqbp5+ooKyWoZulsKSXm6qVoJ2akqWXnqqYnn69g4hytHKEnYataHi5xLhxk6KjeqaZmXOqgnzLwMC7cYyiiIKffZaYiZ3AvYKXnZ2NncLBfIJ8ko2aw8B9a6Wyb4yBb8p6f5t3kYOOgXZ6gYB5cXp/h3F4hY2TeW54lGNmX3lkYGWCY150Z2xkYldLVUlRWkhPRDJJRT9EQj4vPD8+QEE6OERDQkNFSElLTU5QU1ZZXl9fYF9eXl5eX19fXVxTTVBHVU5BPz89NjQ2ODI3NiomJSMpKiYuKyopMTAfOSojPklbTCojQlEvI0ZbM1BZL1VBQjsvOJajucO0sLDAqaiUo6+psK6tprO0r6mlpqaxq5+rmJqin5yaqqeinayjpaikpLSknaKSpq2ruLOnr6KRkZmdpZKQn6GYm5+dh6espKutwMCxoKmvqZeRnp2hmaKjqqOToKGdnq2uqayno6Onoaalna2pkqSaqK2pm5ypnKyglpallaGil5x/zpR4eqSBeZWWm1+uj16Op4GioHynlpt0q4OAr15jjap7p4eFoHSXk4izY4KrhqGNjbNqha90fZeIt2GDrVmizW6QdXvae3+ZcH6IknZ+ZXuIdnZrfIhvfYWRkX5tg5BgcmxwaGBfeWRccWhqY2ZfUVRSV11LT0M1QUhFRDg+NjtAP0E7PThAPj8/QkRERklKTE5QUk9TXF5fX15dXV9gYF9fXVpXT1VKPT8+PDU1NzgxNjQoJyQhJywmJi8oJiszHTYwJDc7U0wrLC1LMCc7XDtMLSFQQEY0LjGtwsC/tbSwuJedkaSqqK20q6ayrKyrpKumsKqgp5uZpZecoq+foJ6op6OmoZ+wrJqdlaatrLGqqKyglJKbn6SSj56lmJ2no56upKuwqL/Hs6ipsa6Wkp2boZefqaqflaCfnZ2usKerqZynqKSiq5Oss5eloqqqnaOmpaGwoJKZppmgmpSUkZegcYWMl3SEqIdxsXydcax+oZ6BpY+ed6qCfa1/nHOtfquHhp92mJJ7fJd+qoiijJGMnX6re4mUkJ+Ae61WnMR6j2+SwX2BlW11b4xtZXZlhm9hd25yb4mKko+DbZKQZnB1dXFhZ21lX29paW5nY1dTXGFZUlNDOElJQEQ8PjxARkRDRUE9PDw8PkBAQUJFRkdFQENJU1dZWlxdXl5cXl9hX15eXVtaUkM+OzkxNDc4NDUyJiMfHCAxJyAxJyAnNB41LSY3PVdKLTwnPjEpM1ZARiEcRzpDMS4rsNTGxrK0oJyjjqOjoqyvtq+osaaoqqetq6unoqOdmaKVoKWrn6KloKioop+dsKyXmpeopq6sqKapnpeUmqOhkZOgrZudpqOvrKOstaq5zbKtpq2slpWcnaKYnq6snZagmZ6fqrKpqqqbrKuko6ybr7GiqKuupZimqqmpsaKSlqOkmpSShaRqpHWJeql0erJwgqaKmYxxiKCah6RgYVKrhH+ug5t2rYGmhoafepmXhntmgKOJpJmGgqR9qX+ClYeuX32pVZ2ikoF6op+Ae8OvxYtyr7OzuXFiqa/CdGiMjJiOgW2alHBueXh5cG1mZWVxcGZ8aWJdV2BpWFhVTExRTENDQUI7Q0BAQkk8PTo5Ojw9Pj4/QT04NjtETFBSVFZYW15eXVxeYGFgX15dXF1bU0lCNjc5OTY2NCwmJCIgKCciKy0iJC4hMy0mQERXSCxHKzU2KjFQS0wjIEE5RDQsJ8PJ1tW/oZmrp6Gvop6wtLCvqa2ip6aqq6uppKagm6Senaanp6OcrJqirKGkn6+inJuTqqO1sK+gqZudlpSmopCaoqigoKWcsKakqLGstsiytaqrqZWRnZyimJ+ls52aoJSdn6esrKSumq2ro6OqorOuoqqzsaGaqaiur7aikpWip5ibkXyqbJ6Eh3WreXywb4Kki4mflpaflIHSuLS4yYCBsl9glKmDo4iHoHqYlpp4qsl0maSVqKqRk5qMgJyKmsbHeGahgqVzgZ+Ogn2vXXC0YrB1S6OGbadHgpNkjpCeknxxl5OAcXt1fnxuW2ZqcnBlgWpfYVhkbVxeWUlOTEtFREFCPkE8Qj9KOzc5Nzk5Ojs7OzMuNjxBRklMTU9RU1daW1tbXV5fXl9fXlxcXFxcWE1CNzU2ODUvKSglJiUkJiksNEVOUFBNRktKVkYqTDAvPS01T1RRHRw7PEYyLCSnpMDGuK2ps62spaKcsrmsqqGmmqilqquqp6CmpZiqo5+vq52moKyanqmlnae1n6KXk6iptbKsnKWcoJSPpayRmZuno6Cppq6hpKepsLTCsbOqraiTiZedpJqho66mmKGVmZympqybsJ2uqaeerKS3rKCxua+dm66nsrOzpJOXp6KZn46CnU54moF/n3qDo32DpISGpp6cnpOEuHt8ebmCfszGwrZ4m6GQi59+mpaXinaemIqlmKSpf7CFnYWfhKx9mpRipWykcI+FkIF9loJyrGCjc3GAmmC8fVJVdI6So5Z7fpOSjHZ7c4V/cVxtbnhyaoFvW2RfaG5iZF1LTFFUQUlIRkk6OUs+QjEwODg2Njg3Ny0qNT09P0JER0lMTlBUVlhZWltcX19eXV9fXFpaWllVU09IQDg4Mi4sKi4rKicmP1FUVldXV1lYWFdVT1VGPEUzOlBbVBwbNj9ILC0gi4eZqaukq7mqr6Cboayzs6WfoJWlrq2uqqedpqaao6ehs66iqaeyoJmppJSitaKilZehqLS5o5uinaKTj6GxmJ6bp6Whoq+unaSooraww7Gtqa2pkYeQnKecoqScpZeemJmapqSpmq+hr6WmmK+lvK2htretnZ21sriws6aXna+go52Fj9G1w7d5h46FkZOQgaZ4lKF3jKCRhKWBinGqhoS0bnJqmaOclYqefJiZhoePc6+CpZuijqaLk52KlZCbbXCyXKVzk3qcbJl/e5l8balho3Fxf59ic7K4aHePlKaYfYyNlI55fXmPgm1peGl5cm6AdV1lZG5tZmdgSltYWDxIR0BVM0BGPjwqKDYzLjAxMykmNDo7PD0+QENFSUtOUFJUVldXWV1fX15eX19dW1paWFVSUlFGOjIyMzAvKysoQFFSVFVUU1RWV1dYWFdVVVZUUU9RW1UlITJBSCQpJZNzjYqtv7+8urSelqelrbWhopmVo6inrqusmaain6agoLWno6mnsaOUrKOOpK2jnZCamqiztKSdpJypkZSXrZ+fnaeknaectZqhqqS2qsKwqaupoYyEjpyhoKajlZqanJibmaelppisqK6jpZutpr6slL2wrJ+isLK5q7Smmqixo6eXeqiQfXywd4qApKWInG2yb6CHrXyhjoOolZiArImEroWflKqhoZeGn4CZlYB7kn6rgJ2al4ureJ2fkYqUkoF6r12jgX2mp2SdgHyXc2qvXaVrcIWZXWBbjKBtlZGmmYKVjpiOfHuEmH9rbX9jfnRugHpgZ2VxbmhnZ0NaYVs+S1QzVThCQkM3JCQzKycnMywgLzY2NzQzNTlAQ0ZJS01OUVNTU1ZaXV9hYGFhYV1dW1pYU1BPTkk4MDUyLiosQVRWVlZUVFVVVVVUVFVUU1RWV1dYVlVVUUhGSUojKCi9k5qDqcbCtsG0n5qsoK64paOOm6Sjn7Cvqp+kn52tmZ65oKOroK+pmq6hkKuopJaJmo+usaymnqaaq5aXjqyhoZ2loZqknK2YoKimtqi/r6WppJ+LgI2bmp+mnpKUmpqUmpqmpaWbqqyspKWfqqi+pJbDrKqioauyuaqupp+zrqipmHavfpCLnIWHfbquiphlsIxlla19oY+DppWagayKhLCFppmkoaGRhaBbbGqBs2B/rXt7goGxbWdvmZiMiLFbfbRcpINryKJkn4B7vFh2tVqyfVKugHqsWIChbpiQqJuLl5GYmHx6j51+ZHR+YoR4dIB8YWpncW1mZWVPVWRcQlVfPkooPjk9NCEiLCUfMi4gKjEvMDQ1Nzk6PEFDRkhKTE5QUVJUV1peYF9gYWJeX1xbWFVQTkpGQzU1My4vQFVaWFdYV1hYV1dYV1ZXV1dXWFdXWFlaWlxcWFdXR0I70p+zsre9urPBs6ObrKaltqigi5qgn5yzs6mfo6CetZigtKiqrJ6vrZ6sm5WvqKKOiJuOr6yop6GmmK2RmI6omqGepJ+Zo6OlmZ+jqrKou6+kqJ6cjn2Lm5ahoJmPkZqbkpqYqaCimqmuqKamo6Wpu56gxqakqKGrtLWsrqaeu6ysrJWAqZKjr46bgIekl5iQgYC4w7qDjpyThKeWnIKsioKviKabm6WqkX7VvcKqYqO/vX1+o4KD17q4tYWUk4Oevb6Ea6OBb6uEbJx/erKwx4Nqq7C9rHh3or68c4GWjqeckJuRmJ57gpKbemN9e2SOZ3mCe2BsZWtqYlBhWlNqXEBVYUJOKj06NC8eHyQeJTIgHSQoMDQ5NjY3ODo+QUNGR0pLTU5OUVRXXWFcX19hXmBbXFlUUU1IQz88QT81PVNZWFhZWVpZWlpZWFdXWFlaWllZWFlbW11dXFpWWFRXWryVtLSxv7myvbKina6mpbKmnYyYpb+quLKoob+mp7KcnrGcuqifra+mppSUsKyXjIObka6loqygo5uonpeKo5KmnqecmqGoopmeoaytqLitqKObl5J7h5mSppuTjpGYmI+Yk6mboZmqqaGqp6GjqrueqMSioK6jqrO0qq+on7qnrq6ac3WqpLeGZImgcGetj4qPbW93pJCZn4F1rpiUcI+LcZWoo5uXrqRybW1sZot4b26CmXGBempxaWeJlpaYcmlphIdncIZkXYhiam9ZXWd+d6ZfYXGOkW5lZX+Nk4+imJmZkZigfoiQlXZmh3hpjmt5f3lkbGNmbGJLZFhKbFo6UWVFUidLOisjHCAbIiwpGBsYLTIuNTo0NTc5PD9BQkRFSEtMTU9RU1ZdV1pcYGBhXV1bVFBMSEQ9OkFCN01YWlpZWVpZWFhZWFdXVldZXV5eXVxcXF1eXV5dW1tVV16pla2zqbm4srOqqaGunqOyqZiSvrLEyb62qp7ArKyjoaisoLqjpK6sraaNl66pkIyFlZatnqaqoJ2jop6QiqSSp5momZajqqCWnKamp6+6q6yam5KSe4SWjaWYjZGRmJSNl5WolZ+YqqSbsaaeoqu5n6/Ap6Sypaywsaqtq6a3oq23loqgqKW2nYmWo5mHqZqQlJ2SqbKZmqOroLGWoqCdoKKcoKWhlaunjZOSjIeTnJyVkJqTmJGOlYWBpJmXlo6Lk5OLj4aEfWeJfnSCdnSHi3GnbHqUkZOSgYGNkJCPnZWhlpqYo4OJlo1yaZB3cYt4d3x6amxkY29kVWBYQGlbSGNhT1orRj0rJyE3NDAuHxwhJTIoKjY5OTQ2OTs+P0FCREVKS0tNUFBRWFVWWV5gYWNdXlVRSkVEPjk9QEFTWFtcWVdYWFhYWFlYWFpbW1xeX19gXl5eX19gYGBfWVlgppapqqS0tq6uorCjrZ+gtbGQjqzHvcW7uauipp6bpp+xqKO2p52ptKeokZisoouHiY+bqJWspJ+Ypp2dkZSjl6iaqJmUpqGjkJqnmaG1u6irmJmPjXuBlIyhlIqVkZWQkJOXpZCfm6qgnLajnqert6euwa6jtqavr7CsqamyuKCuvJmRpaSmtqKSnqefjamfjZKfo6yvmqCjsKivl6OgnKOqnp6dnJarnZKZoZuUkJaqmY2ZmZaQlp6RiaCdlZSFkoyQjZSLgH1mi4V1hnV5iINznGqFkJSTkIl8i5aSkpeUopOemKOFiZmIe3KWc3qLf3J8f2pvZF5wamFbX1htY1BgZFBaOkdHRT4yPT04LysmKykmHSY0MTY2Njg6PT0/QUFDSUpHSktMTVNTU1VaYGBpYGVVUEpBQ0I6OUVNVlteXltaXFtbW1xdXV9fXV5fX2FhYmFhYWBiYmJkYlxbY5eVpKijr7KsrqOppq2gp7WqkJCdpbS8r62toqOaep2isaSlsamXnLimo5SZqpyOhoqJnKOQrp6ilaeeoJGWmJuui6mWj6iZqIyYqY+fubakpZiajIh5gpSMm5OKlZKUkI2Sl6KNnp+pnp+4o4CEr7Wir691pL2jsp93eaCqsbqUdayknomAqn9kXGJ2oI6knoSXfW6Ts5yjp62qo2Wdn5JzeZmWcICYqJdsf6KoimWcpZyRl5iWjJKckYadmpCVg5KHj4+SiYR3ao6GdoZwe4aBgGFph4qUkotadZSQaGiPj3N7ppqaZnuah4N4mGqEi4NveYBrcWVfdnBsa2hbZmViYnBTXD5OTk5TRz5AVEQ5MS8eHyY0OjMxNjY3ODw7PkBBQUZIQkdGSUtNVFRVWV1gaGZnV1FKPERHPDhVUltgYWJgXmBfYGFhX1xdX19gYWFiY2RhYmFhZWRjaGReXWablaajoK+wrKuppamuo6atpJKWq7awsqebq6asl3SMna+fqKunlJe5n6CPnKSdkX+JiZuejKuZopSmoJyNlpGehHWtjoimmqmRl6SIm7qzp6CZl4qJdXeTjZaTipSRkJSMkJOgj5uhp5mcspaAjJu1nbOMko+7p6B+p6J6oq62gI6Opp6Di4aQsaqvjIqWo5p5gIushpydoaepp4eVhZh3pZt6h5uBl6eCgnucsnqKhqCXmZSYloKRl5aEmplieYeQhI6PkYqDbXCOh3mAcICBhX+GdIaElZF4lmeSdKCadH2ZhKKeiJh/k4qEhJlrjo6FbHh7cXFnZHhvamxqWmVramV0XF9JVExRQEU1LlpUVTcpITA5PT43NDM1Njg7Oj0+PkBEST9KRUpLR1NYW1lbYWFpZllRSDlFSzw+YVZeYmRmZGBhYWBiYl9dYGFhYmJiY2ZnY2JhYGVkY2djYWFonJejn6atrquorKCosaamqaWZlK7IvrGil6eptZ6PhJ2snKeioI2Qvp6ajZ+aoJB8ho6Yl4eqm6CUnp+RjZOJhn+Qp4yGop2klJiehp65sKedm5OOhXB1kImVkIqUkI+bjJCSn5KXoaWWnquHn7SJtJqtisqHqq2It4WMr4KvrIKpjaWYjZ19qI9ye3ecj6eWaJWkebSMn56mqJKYwoF/q4iYoXKegJqlfZeFlbGAoX2hk6CQmJeBjpObipiRi3yFkoaNlZKJg21ykIV/eXGGgYR8hHWEgZaAj8Vmf6mHj6NrnoOjnISagI2OhoqZcY6ThWh3dHx3aGh1cWhoa11jcG1nbVhnR11STTJENDZOYWM3JjM8RUdEOjY0NjU4Ozg+PT0/Qk0/TklKTENQWl1cV2Feam1cUUU9TE1ASmRYXWNmaGdiYmJiY2NgX2JhYmNjY2VpaWNiYmJlY2FmY2JiaZSXop+wp6mppqugpLiwqaqmmpSgo6SrpJelqrejr4Chp5ylnp2JlL2Zk42hkp6PeYSWlpCGqpiZmpmghI+Md5qbjp6Ph56knJaamIaiuKykmpyMjH5ibY+Lk5CNkI2NmIyRkqCPlKGhmaGnfqGnh62doJatj56cnZGFgKCNqq2Fo42pmYyaf6N1gJmUa4KsdU2reIeNnJGbqKeAqat9g6F7eqdpnn+Sa2eXhpe2iZ5+bmBkWYOXf4x7ZGiLcpl9eZVsXXyWbV9TcINcX2t5g2BZZYJ9g4CXcKeqa4OjbnKlcJ+FoGpmoGxbbot8Zlpgg39iV1Bvd2ZtdHJram9danBtbGlYaU9eWEY5QTRHRF5rNCxJQ1JNTj04NDg1OTs2QDs7PkJPPlFSTE1CSlxdX1deXmN2YE1EOk1PTVRiXFxmZmlpYmJkYmRkYmFiYGJkY2FjaWtkYmRkZ2RiZ2VhY2iXlp2guKCqpKaskaG1vKuuopmYoKKlrK6hna61o6iSoaCfppuajpm0mZCLn4yVi3WBlJKMiqaVk5ednX6ShYWro4eaj4qYqZmam5GHpbCmoZWaiImAaW6IiIuPjoqLjZKMkJKjjJSfoJyhpH+TgY+joZSgd5yWj6eDoad/hqirg6V4inyEmn6icHOUiJZ7nox5bYebjJmQm6iaj4ede4Kic3amZp5+d6RfmHp9knOibpi3tLp0k4eCf7WoZIHGuHtwlbeLcYCapGJzrKtgfWmds35ufIaCjYKLmHF/o2xyo3SfhYGkYJ2YspVxfJefs3RzW56yg2pib3R2cWlvWGpscnJmXWleY0xEPUQ2UUFZcTM9U0dfSlI9PDM5NTo6NkQ7O0BKUD9VTU5RQEVfXltaWGBgfGRIQzhMV1VWY2FaZWZra2JiZWFkY2BhYmBkZF9gY2tuY2NkZGhkYmdmY2holJaVo7iZq5yToI2kt7WuraCaop2jo6aunJuyrq2TmKGZoaSZmpSfq5uLiJJ4i4VxgJaNio+hj5GTnZh9kImNqKCHmI6KkaOUnJuMi6iopZ6Pl4eEfmt7h359j42Di5CRiZCUoIOXnqCdoJ6LiXecmKKMn3Khi4eoiJulj5WmqX2tjH56oJl6o5N4gXSWiI2cfZWfhpuOmZumhqJkoXyIlpCbjWyeaJqNbpqZe4CLp31yaHSrg56DdKpolZpdm4V2hJ1oqmqAuGZcqHCBnGCVjF6ndnWHiX6eaJp1hpOSl46An2+akG2nmVyofni7an2pW46EXbNnXG5yenhraVxwanh5Y2BmWGJCUUZPN1ZDUm81S1paX09aREAxNTE7OzZIPzpDSFU+WVJZXT5EYl5WYFFhY31qRUI5TltdWWVmWGZnbm1iYmVfYWFfX2BgZWNeYmRvcV9kZWVrZWNpaGdraZWciaq1m6eIY5Sbq7qysayeppycqZ+erpuesamsnZekmqGfmJaWoaSZhomNaoiAcnuXiIuWloSQk5iPeoqElaOcipSPhouekp2diY6oo6CajJGKgIBpgIZ4f5eMe4mOjoiPlpt/lKKfoKGTmHJon4qfj4xwkoyBqYeYnqGmnqZ7sK2joriXd6OzoqSAiJR5nXuqmn+ijp2bl4iXcaF8hY2vtX1rmpGheH6YtKOjq6iEmXybfZ2af3SqWl1ve5aLeJ5iTH56eoVjeZdCTJ5ZompyfI5tgIiEmXWbeIaJsbN/gJuTp3eCnW1yfZRvmXJqo12VdkhlZGFzcX5+bmZgbGl2e2RlYlJfV11VV0BaRVFoRFNXXGJYXklEPUI4P0I6SUY4TEVYQVdSW1ZERmJcWmBLYG1+ckVDPFVfYlpmalZnaG1vYmZnXmFhXF1eYWhiX2VjdmxeZWdma2RmbGloa2mTnIGwrZmEU16gprO5s7OpmqKMnKucnKmUoayloqiPn56dmpmWmKGdloiHiXeGgW95lYWQm4t8kJGWiHJ/iJKgm3ORkIGImZWhm4WNqJyalYuLinyDbISFcYGhjHiGjYiHk5mWfJOjoJ6jiK2GfbWEjp6ce6WWeqmBlZyPiZ+bfKdod21+mXShc3F8noaZcJODrn2kg6aemYCjb16oZ3WiY2+lYZzTkHx7mXhyc2OihpB+o3Okj3ZrkLOMYIKYiXOqsqi8f3eDbX6+pqm0XpxufXGXbn9yonJdpGdzpmFopm2b1Jp9hZtveHqXa5t7d5dzbqmkZ2FleXGAhGtnZmRudXdnYGNTXGZRUWJJV0pUYVdTW2VqXGVRRkNLTUpLQktFOE9AUU5YU1lPU1FhZmVqUmN3eXdJRkVjXWVaaGpUaWhqb2NqZ2BjYFxdXV9oYmFoZXxkXmRnZGtkam1naGxol5t/sKtUXEt+qa+xtLCzo5uZhZmpoKGkjqWooJipipqYmJOZk5KgmI6HhntwfYRofY+DlJqBd4+MjohvfoWPkpJsl5N8iZGSpJaDjqqak5KLhYl6g3aHgG6Bn4Z3gJOHiJmil3uUo6San4mzoaK2i3qsp6SupXCogJqQhYCbkXukgKKZhphynoSjrq+Kl4x/jKSNlYOtoZR2tLW1yaFzlIqBnmCdl6lteZWGoJt1oYd3oH6Sl4uBb0xmo5Jwm4dzpHt6dGGDgWt+oGtxZF+ccX10l2l6abO1tMamc5h+ep1rnJurdYSbbXV4mGmae3WYclBFfbReanZreYhmamhidHVwblZeVFlpUFNpSlZMWVRWXWhrblZoV05LQUpNS0hKT0FRS1BlY2ptZXVzc395fG51iXt7VFBObF5oW2tpUmpoaWxnbGZjZWBcXVxeaWJkaWt7X11kaGNqZm9sZWlsZaGciK+mhGY/lKGzq6+vtqKikICYqqKjpYymp52dpoKbl5aOl5CPnJOOiIN5anmHZYOMf5egeXWNh4uAZ4OFkYOMhZ2NeoyLlaaTg5epmIyRi4GJeoB9i3lwkKGGeYGWiImWoJV/lKWnnJaWhGZueJxsomR8caV3m5hwZ6aAlot7pHqfloOXcp52gYqUlo+5bpCKomJ9maGViG1yaaprdaBtbqZfmmmLkGiWh5qVdaKAfZpgjIaNdW+IYmigZZ5+aZt1b2NmiIJtcqJaX1tioW1diYxue35zcmSlbXeiZGenaJlzjJlvom9TiZBvoF9mqFSLXlSYbm1za3KCbXBpa3lza29SWVdXZ1pUbUpZT11JWGlpc2pZa1ZRUkVWXExYU2FVaWtfd3R7fXB9fHKDe39zdo2AhHZeUXJiZ2JwZ1BqaGhrbG5oZGdfXV5dYGtjaml2dV1cY2ljampzbGZrbWOcpJimemV0bYunrqSpsLGmn4uAmKudn6aNo6GboqKAlpmTjpqPi5iQjop7hnGAiGiLi3yYm3N0iHyPemOBhpSJiZWZgnyIh5aokYGirJGGkIqCin6AgI5zaY+lhH2GlI6JmKCOiJOqpp2JpniVm36liJaMspiekIKvl5+ld5SHeal0pY+Emm6kooyShIyDu259pa+DhoaGk5Wcn3ylenKolaCWZp5+b6tjloqVkniobKmigYl2iIN3qpGmh2qRsGt2s4ypa4qGbW2fnpKVYH6ri6p2fn+MpZ52n32EpJWdoGqbiHesZ5+tjLZ0d76NpJNZg6aNq2F1cnRxfHRxY2p+bmhsU1dbVmFiXWtNXVJdSl5tbnZgW3FZXGBbZnRlbm9xYnF0YHd6fnlyeYNzhH+Be3uMgYKAdmJ4ZGNtc2RSa2dob2xyamZpYWBeXGJrYm1sem9cXGJpYmxqd21nbG5ilaWqnYGAnqSWqaqdqKeupJmJg5irmp+lipulnamdhYyaj4eckYWSjYyNdIZ6iIRwjYR+mJN0dIVykoNsf4uRh4aTj317goWYpo5/paaOgY6JhZV2goeSb2yLqYCDi5SOiZyfiYyUqqOgj4B1lJeIfoF5lK6jf4GbcY+FeI+Kg357cqeMcX19epeWm4SOeHt+foeUlZOKdpCYn6CDe32Ja4yFW3l5cnpwaG5+kolxf3WBj5STcYaEgmWMf16Bf4t3dXOUdW95bm6HbYSFXnZoeI5lgICFjambfXR8lmqJiHCBdn2Gdm1tZ4xzeXuYeIVca1h5j2lueHJyb3h4cF1shm5pZlZbYFdcZmtkVmJVX1FfcHh4bGt2Zmpra3Z9cXJ0c2FvdWJ0e4F4dXqDdYCBf4F5i4WDfXttf2xkeG5eV25naHVreGppamVcYFpjamZscXVuWltibGRsbHluaGxvYY2UuKimi6GimqakmaWcq6OhhISYrJKeoYmbp5qpmIOBm4t/lpOHjoqJjXKDfI99fo+Fe5eOc3KDcJWFe32Si4aGkIV4fYCGmaSOfKehi4aQkIWWg4aOmHdyhamFjpGdkIienoiMm6ifoKqDiY6Vmn5+iZatqI+Spo93b5yQgnmRb36ohXB9lXFrcH2Bn4x/k46MaG1dg4uMnJuejnOVi4hxdGuCdnSBWXJuhpGBfX6Mal1qZHuFhImAYGl4ept7gouCdYGFgmd3ioZrYXBxgXZecoqBiI+mlYVljI+DbneLhHGGj3pwZmdle4N6lltcamdudlt7eXh1bnNzgmZcbYpra2FZWl9aWWxxXF9hWl9dZnR+enRwdGNra2t8fXN7eHRkbXVobXx+dnp8e3p6gIB+b4aKhHt9c355c39pVFxxaWx1b3Vna2hkXWFYa2hsa3FybVdbZW5sZ3N5b2hqbWCLi6qwoZCjoZqenpiemaijo36Dma2NoJWInKKRpZV/e5iFfZKZiYiGh4pzfYGMdoWLgYSWinFvgHKYhoR+koOEhoqBeoCDi5ugkIKnoYd4jpiJlYuLnJeEg3qsgpGXmZSKnp2HiKGrn6Kio4uIk5uco5mWqqGnpqCSm4eVjXt3jY6Ep35/kpGSk5yyppuVnpCNspOXhKWMjJWbn4mQm4KIkYprfI53eGWChpCLfImdhIeLkIiIgISEkHd8eXSZoYiGiZ6KhJR+fYqAgHVvc4SCfneGhoqPppCDhY2Hg42QjH2IjIqRg3dsgoR9eplqcmhhdIpwfXp3d3B3dIFdXm+GaG5eXlpdXVRoclZjXFxibGh1fHxzb3Bka2tpgHxueX9xanBwbGeBe3KCgHh/fX+Ee22CjIZ8enh8fXqDeU5kd2pybXB6ZWtlY2JgW3RmcGZycW1VXWx0bWl5enFnaWtkjIeduZ6WoqGYlZiZlZmkoZ58gJqrjp6Nhp+ci56WfXmUg3uOmYmGhISGbniAgHKBiH6JlIRta356l4eEg5B/gIaEhn2HhI6bnZKHq5+EcouQhpORi52RfY17qoSNkpiWj5yWh4abpp+imp2GgpKamZiQmqagpZ2dkJZ/j4l1fIeOhKV7fI6QkYaYqqKek52PjaqNkYCdjImTmp6Cjpd+ho6Db3iGcnVhf4OPhnWLmIGDj4KGhX6FhJRueXV0kqKKi4WahISMc3+IfHxycnuHg3p4io6DkqaPhYOOgYOKiYp3homKjH1vbH6BfG5obG1oX3p/aH17dnV2dXt3XF9wfW50X2NbXV5RZ25UZVteYmtpdnp+cWxtZGtqZ4GAbHOBbGx1b3lwhXluh4B2goB+hXZxgo2Ifnt7fH97gopgaXtqdWhpgmRqY2BpXGR1aG9idG1sVWNxeWVwentzZWptbIuJnreaoaOfkpGWmIuan5+ee3iep5Gbioakk4uYmXl6jYV8iZGDjIKCgm57f3hzgYV9i5F9a2h9gpiJgIeNfH6GhId9j4GQm5uRiaicgHCMi4yTh6GiioWMfaiRiJCSmJSWk3iMo5+gnZaZf4CQmpiSjJqjoaSal5GafYyEeICDjoagf36MjI98mKSiopOZkI+mjI6AmpGJk5ebfpOSfoeOgXR0gnB2YH6AjYZxipV8iIxxjH+ChYaOaHdxeIuYkY9+l32HinKBhnt8cXh6ioR6eZCLgpWlk4uFkHuGhoeFdoKEiYh7ZnJ8f3l7cWxqZl9+c2h8dXZ0fXOAal5gc3Zwd2RjWV9eUmtpVGRZX2FoanZ5gXFma2RsaGWAgWttfmhvcWx+eId6a4yBc4GBfoF0doKNhn98en+BfX+PanKCbXNpYodobGJfcVZ0b21uYHhobVdqdHZjdXp7cmJqb3mJjZ6ykqWlnI6QmI+GnaCbnXx2paGOl3+MooqImpZ4e4aHfoOJf4iCgX9xf3t0doKFfoqReGdjfYaXioGJjHl9gI2DeZaBlZiWjZagm35wjIKRlIamm4eMiYOmlYWTi5eYk5J3kZ2goJeTlnl+jpiXjpaanaSdmJKUmniOhIJ3hJaNnX6BiY2Mcpejn6KTmY6PoYuKgpaYg5KWmX6YjHyIjYB2cX1uemSAfIqFcIaTf5CCbIeCgYCJhGV1b3uGkpeMfJN3ioh7f4V8e3F+d4iFeYSPiYqXopWBg4t2iISCgnd8goqGd2B5eH10f3hnbGVhf2lqd3N0dn1xfGJjYXNudXJtYVphXltsZVJjWGFhaWx2eYZxY2pjbWVofYNsaHVobHBpgH2CeW2QhnGAhIN/dHyDjIGAfnqCg358kG12iHN0bmWKbGpiY3VWhGlxbmB4Z2xianZwZnl8enFfcWyGhY+crpemqJ6NjZeHhp+Tl5l9eKqcipl6lpyLjJiQeXyBjH58g3yAgoF4dHl6dH2AhH+Ji4BkXn2LlYd+hIZ1fX6Kf32YhJeUl4ykoph/c4d7lJKKp4+MjoqToZKDkZCVmJGLgY+Yn5qSj5Bzf42SlImdnZ6mmJiNlZVyjI2Ja4WXj5l6h4iQiW+Xnpukk5WKjZ6LhoGSnH+SkpWHmYh8iomBeXF6a3VsfH6Lfm2FkoKUeHCCg31+in9kcml7gJaXhH6Nc4+Ig3iGfXZ3f3yFgHyCjISMlKSPeISCdImHfYB0doGJhG9he3V6cX1vYm9jZHtibm92c3h3c3RhdWBvbHVtb1xcX15ea15QXVhjYmltdHuIa19qZmpjaHeIbmZsaGpsaIF9e3dukIhzgYSEfXSBhol7g316gYR9fY5yeop4eG5sh2poX2lyYodocW9ldmdubGF5aWt9e3hwYXdti4CZmaqgo6idioqRhouei5WYfneumY2XfZ6TkJaUiHd+e4p9e4B2eH+AcHR0e2+FfYGAin98YVt+j5KGf4ODc3qAh3qPkoiSkZyTpZyVgn2CfY6LkqSJjoqNmJuNhpGYk5aPioiMkp2Tj4uMboOPj5GInpmioZeWiZaQbYeYg2aFmI6TeoiEkIpwlZqUo5KSiYuZjIJ/kJ59ko+SjJmOe4qEh3NydWtwbnV7i3RuhpCOknF1gHuAgId7ZHBseH2Zk32EiHSQioBzh3luf32AhXuFi4iEjJWojHqHfH6LhXd+cXCBhoRkaXl0dXB8Yl9wYWt0XnBqe3l5bHNwZXhdbmxzbXJZWl9fYmtaUFdYZWNncXF+h2ZdaWhnYmdxjW5kaWdkaWiBend1b46FdIGCg3t1goiFeIV8eIOFeoCJd3+Le3pyeINqa19waHSAanJvbXFnb2xlfGNugHp3cWx3d4p+opehqKCmm4eMioKQnYeTnXWBqpWTjoegjJWTkIB0fHaFeHl/cnN7hWtycHptinaAgYducVtYfpGNiH9/f3d1gYB/oIaRi5KdmKGVmHiKgIGNiZyeio+GkpiWhYmVmY+Wi4uNjY2dio2Pg22Ji5CQip2WoZyYlYWYh2mDooJmhZ2KkH6Lg4uBd5OYkp+RkImJlY1/fo+YfJGNj42akXyKgIJudXBsbW9we4Vpc4OOmIpxd4B0gYeCeGZybnWBmY57iIR6k5F5dodzb4h7hYt6ioWCiI6bo4d7g3WCi393eW5sgYSCXnN0cnBweVpecGBwal5vanx7cW1tamx2YHBvanFtWlhhYWJuWFFUWmZnY3ZvhIJiXWttZGJma5JuYGZmX2drgXVyc3CLgHV/g4B4dYCLgHmFf3eHhneDhXyHjH97dop/anFjfGOGfG5xbHRqaG9sdnhfcX95fHR1dICCfqSVmq2eppaFjYR/l5SDkKB1i6CUk4aLmoyVjot6cnh0gnByhXNxdYhrb211bYh2g36AbW5VUYGrlYeCd393c4N6gqCCkoKTk5ick5p4knuDjZOkmpOOiZWZkoWHl5mMlIuJj4+InoSPinxyi4WJjoicmp+blpR/k31nhJuGZ4Wgh5GDkYKJcYORmJCbjo+MjI+NeHuSkHqOi4ySlox8iHyAa3ZqbmtsbHt+YXp+jpaCd3qAd4KMfHlnc2xzh5WKfoiGe5OPcXmDb3aMeomLeoh9gYuQnp2EfHt3got9dnBqbIKDemF4cG5scnRWXm9icmBfbG55cWhwZmdzdGhwa2F3ZV1WZmBgclNRTlxmZV55cIh8X1xocmJiZWaSal9oZFtncH5wa3F0in12fIWAdHV+jHl7hoF4iINzhoV+jY2EfHmVeGZyaoNgiH1vb2t6YGpudH91X3R9eYZ4dHOFfHigj5mwnKWOgop/g5qHgIyef4ualI+FiJiOjo+Ed3R2c4Bwb4VzcHGDb2ppdm6Dbn19bXVzUk2C38iS1pN8cHWDdoSgg5N3lZKZnJGZe5RzhZCfoZOTkoqSm5SGfpaWiY2NiJGMiJx+joB3eox+iIyKnJydm5WTeYx1ZoiRhmyIooSRiJeChWOMkZmPlYqXi42Ki3F6lIh7joiKk5GJeYV8fmx7ZXJva2t5eVyAeZCOgHt9fn6FjXp6aHJqc4qPiYKFhHyUimt9fm5/i36LhnyEeYGOlJqainx2eIOQeHJsZ3GAhW5rdW9oanRtUl5vZHBZX2txd2dra2JmeHJvcGNfd2BgVmtfXnZQTkthZ2NdenCJdFxcZXZgYWVlj2NhZmJYaXNzbWpxdox9dHmGgnV2fotzgIZ/eol+comHgZGLiHx+mHZlc259ZYh+b3BrgFpsbnl5c2F2e3uNdnJ3ind5n4ubr5ugkIKFd4iVfn2KnYeGoJGPhYyYhJOOh4F0d3B5cW6Eb21ufnJkZXhwfW16fWpoa2OkmsHcru+hc2x2hHaFo4aSb5eRlqGWnIGScoWLo5eJjpaLkJ2Wg4GVkIWJj4CRiomWfod7dX+JeIaEjZybmJmOj3WJdW2FiIp9iqKDkImchIVei5OYjI+JjoqKhIlte5aBfYiFiZGPhnaFfX1rfWR4dWlueHNYiHqSh4V5foB/hIt+eGVyaX+JjomCgn+LloVrgXVth5CBj4R/gnl/j5WTmJB1c3eIjXVzcGd2eoRjdW5wYml2Z1FgcWdsVV9udHlhcmRfaH1wcm5aY3JhYlZuWVx4Tk1MZGdiXndziW1cXGR5XmBkZYVgY2NeWWpya25rcneMfnR3hIF4d3uJcYOEfX6Ie3SLiYeWhox/fpdzaHVxeW2Lem50cIBXcXp2eXFleHmHjGl2gIlyf5yHmaeco5KFfXCMlHh5i52EhaGNjnyWjYCaiIR7c3dwc2pvgWtpbXx1XmF4d3txdXtnYGR869q1ycPciHNsdIF3i5uJjmqZkJCelpSBiXGFiaCOhYuWi4yYlHyOk4iDiY97kIuFj4F/dniDhHKHgpObl5SXhox1hn5vhIGJhpihgpOLnoOJYYOUj4eKhomNh4GHan2UgH2DhImOjYJxhn5/cXdodnJpc3ZrWox8koOFfH+DgIOJgnVhc2uIgY+KgX5+kZB9bYFreIWOhZGDfIF8f5CSkJaIbnF5jIZ1bHBrc3mCYHVqbl1rdl9RZHFpZlNgcHZ0YHBgXWiCcXNpV2doYmlYbVZbdUxLTGZnX2Jyc4VpW1xleV5eZGd7YWRfXVlrbmZvaXN4in5zc4F+enZ6h3OFg3yAh3Z3ioaOmYGMgnuTdWx3dXl4k3RueHt8WHqGcYBvZ3l3koJkdoaFcYqWhZmhmaKKh3Nvk4tyd46cfouaiYl8n3+Emn+BeHJzbm9kcn5oZmx3eFtfeXt7cXGAaWBmYX/Vto6QpnhucXd8cZORjYdrmo+JnJOMhntph4uZhoGSkYaHmI58jY2BgYqNe4+NfYiEenR6g3txh4GWmo6TlIGIdIKFdYJ/ipKcnYWUjp9+iGF/k4iFiYSJjX+Ag2d9kYB+f4KMjpB+bYJ8gnRrbXd1dHZ1amKNgY9/hH18hH+EiH5vX3JwhHuOjIF8fpCIeXCDZnmCioaLgnuEfX+Tjo+ShG5veYx+dW1va2x7fmRpbGpZbnZaUmlyaWJRYnJ3bGJlXlpqg21zYltnX2RsX25VW3BOSE9nZVxnbnGAbFtbY3NgXGNsd2RlXV1aa2xibWp0d4Z/cXB/e310eIZ4hYJ9gId1eYmBkpZ8iYZ2iYFwd3l7hJNvbXyBd16Df3SBbWl6dJRzZ3OHfHKSkYOanpqfhoh2dpV+bXaUl36IkYSKjpp9jJp2fXZxb2xqYXV8ZmJpdXpaX3d8em1xf2VjZ2dXnY9ecXOWvMSEdnGUiZB+c5iMh5yUjYh0a4iPlYB7lIyBhJuMfIuGfXyJjH+UiHWJhXV2fYFxdYeCnpWGlY+CgnF+h3SDe4mXnJaGk42cgIhlfZKDgIaDiYlygn5nfYt7eX9/h4uPfWmAfYN2Zm95eHN2cmtqjYWKgYl+eIKAhIN/al5xd3p9jImFe4CPf35ygGh4goaKhIN4g3uAl4yPjH1ubHqJfXd0b2lofXdlXnJjWHBzU1Ruc2liTmd0eGZgXl1YboBvc1llYl1qbWBwT1lsUkRUaGFaa25te29aW15sY1pjcHZkZ1xdYGtqY2xpc3aBg3Fufnt/dHWDeoSCfIGFdn6JgZaReIOKdIGIc3l5f46Qb298gXFpgXl6fm1tfHaWa2p4hHRrlI2Fn5efmYWIbn2Mdmp4mI9/goqClZiKeo+Wb3pzcWxqZGB0emhfZXJ7WmFyfHlmcHphZGSOsbJ3SmJapNnQl3J7kYuReH+WjIWako2Gb2yGkpF6eZOHgYSZinyHf3h4iYqEloBviodxdH17anmGhKaRhJONg35tfYJ2gniFmpiTi5KPlIWHb3qShH6Dg4mDb4F4aICFeHJ/f4OKh3xlfX6DdWNwc4BoeHBudJiNhYKJenZ4gIR5gWpbcHxygIeEiX2FiHqIcoBtcIOGjYODcoN4gJiMjYR3bW5+hH93emVoan5yYVp4WllybU5YcnNmYEptdnRhXltbWXV9cm9XZ11manBfb05XaVI/WWdfW3BqZ3lxXFpZa2VZY3F5X2hdXmVsaGZsaXF3f4dvbX99gHVwgXuAgX+Cf3aBhYmXinGCjXF7hn16eoSUjHVqen9rb350f31vcnx7lHBvgH94ZpKKgqGYnJKChWeHhHBoepeJfn+FgpmKgXyNjWl4cmtsZl9hb3ltX2JveVxkbIN5YHB2X2Vl1eu+izI6PouOgHJ5hYiOjXaEmI1/k46Nf25shY2MdX2Pf4WClYl8g3hudoeFg5d3boiEbHV7dGZ5g4OojIOPjIN9bX90dYN5hZqPi4+RkoyLhn57kod5gISNg2yAc2l/fnhtfHuBioN4YnmEgXFkcWl+bXRxdIGbi4B/hH1zdX6Ac4BvW2t9dHiJgop7hn98iHh6cWyIgo6CiXGBeH+Viop+dG1qdoCAdXVcaWl4cVlXfVNacWVMW3NyZVtKcHdvXVtaWV10fnRoWWJbZ2VuYmlNV2ZRPV5mXV12Zl90cFtZVW9kWmVxeVpoXmBnbWdpbGlweH2ObGqChH95boB7fYB/gnp1goGMk4VwgItud36Be3uIk4l/aHt+a3R8coZ7c3d9f4x6eIR+fGuMjIObnZaMgYBsjX5raX+PjXt+f4OUgn99iohrdXFnaGNbYmdzb19hbHRhaHCJeWBzdF5jZJugkG5cNVmvtXVqgIl9koZ2hpiHdY+MindwbIWDh3R5iXiJfZOIen9zZ3aIfn2Xb3CGfWh3eW5leoiEpYeBh42Kfm5+dn6AfIuXhoGTkJeIi4SJfI+Jcnx9hXxpfm1rgHt6anp2goeAcmB3gX5xZHJndYJtdXuFlZGBfIF+b3d5fHR+bVdtfnZzioGGd4d1gYl6d3NuiYCOf4Nyfnx9koiIem5taW2CgXVuXWhmdHJSW3tOXHFcT1xyb2RWS3N4aldZWVphcYB0YF1dYGZkaGhmTlpoTkFhZFtgdmFcdW1YWFN0YVpkbnJXal5iaGtnbWxpcHd8k2xphIp9fXB+fnuBf4J6d4CAiYuEcnuHb3F3hH97io2Pg2p+e254eXeKd314gIKHf4N/fnpthYyImKONhIN7dox5a22EiZJ5fXuCkYCAfYqDcHFwY2ZeWWdfcHBgYGhwZmpvinRgc29bYWRpdnt/vpymo8i4coWDc5R9eIeUhHSRjYhyc3CEe4NzdYZ0iHeUiXl5cWN3hnmAk2lyhHVmd3ZjanyDiJ6CgH+Ojn1yfnODeX+QjoJ3lY2Uj4eCiHqJiW15eX51aHppbH95c2l6doCDfWhgd4d+ampzaHuAaXaBjJCUfnp9fXF7dnt0fWFVdXxyc4mDgnyCcIaKd3hwcIOCi318eH18dY2FgnZocWhsiIJycF1oY3RvS2V2TF5vVVRac21iUU90eGFSV1hcYXCCc1tgXGhlZGNqZFBbcUlEZGFcZHFeXHdoVVdWd15cZW5oVmxeYWpnZW9vaHB3e5NuaYiLeX5ze355goGCfHZ9g4iGg3B2g3Ntd4ODfomLlH9wgHx4eXqBi3SDeH+BgYKEeYB2b36Ji5ueiH2GeneHfGh0ho2Ren9/fImGhHaPgGdvbV9kXFhlWW1zYWBhcWxsaIltX3NpWV5kbYB3qdqqx4aHsnKKeHCNdXuHkIF6lIqAdXR1fneAcHF+bYV0lIZ4dWxgeoF5iI5mcYNvZ3VuW219gZCTgIF5kpJ9eHtthnV/j4qDc5WKkI6HhYV7f4VtdXZ/bmh3Zm18dm1qd3Z/f3xhYniGemh1dWN+e2d0ho6MlXt0gHVxgHp8bH9ZVnJ9b3SDhn9/eGuIhnN4a3V/g4J8eXx3e3KKgHxzZ3RlbYuEbXRba2B2Zkhub0xbY1hXVnhtYlBTdHZYUFVYXmBxhG9cYGJsZGNebmJUXXJHQ2ZfXWZoXlp7YlJWXHVbW2drYVZrX2FuZmZscWhwdniPdGuOjXV/dnh9d4GDgXt0fYOIiINvcYB1cXV+hoKJjYp7d394hHx9hYd4h3x9gX6EgHt+c3Z5jI6fjIl6iXd1g3lefoaajXmHg3SGhoR3iXtibmxbYltbYVZqdGNgW2hvcGeHcWBxZlddY2t/fMrOh7mia21ui21yhXJ9hYt/e5KFenl0eXV1e2ptdWOEdpKCd29nX3yBeYuJZXGBampxY1hte4aciYOCc5eUd357bYdwgImKhnCWjpCIhYuDenl+cXFvfWdocmNueHJqbHF3fXx6XWV5gHdpdXlmgnZndIeMjZR8codqbn6AeW18XVhwfW1zf4p8gW5uiX9wdmd3foB+f3V7cXpzhnt5cWVyYW6MgmxzWGtfeF1Jb2xNV1ZfVFV8a2FPVHVyUVFUVl5idIVoXGBqaWViWW5hWGNwR0FoXWBmXl1We15PVmVwWltqaF1XZ2BfcmZqaHJocXN2h3hulYp0f3t3fnmDh4B1c3+GhY6CcHB7eHd1eYeFh4yGenx/dYt+fYaEhId/fn59h398eHV5d5GTn36MfYtudYB5ZIOIl4Z0kopvhYWCeoN0Y25qWV9bXV1UZ3NlYFlkcnJngXJha2RXW2Bpf3i+rnuft25ic4dodHxyeoOHe36NgHh4c3dve3Zlam5hh3WOgXNqYl9+eHmKg2ZwfWhqa1tXb3iKo4GFf3GZk3GAeHSBbH+Bj4ZylIeMh4OIhX15dHJvaHlham1hbXZrZ2tsend6d1tnfXx4ZXN+boR0ZXWGjYaVfnCLZmt6g3RsdGJbbntrdHyLeoFmdIZ9bXBodX53fH1xe2t5e4F5d3BlbGFtiX5tblZrYHhWS2tsT1JPaU5ZfGdiTlV1a01QVFVeZ3aDZl1hb2dmYVdpXVxsaUpFalpiZFdZVXlaTldualldbGVcWWVjXnRmbGRyZ3NwdIF4cJmFdoB/eH98hYd9dXOCh4CVgm5zeXt7c3KFh4iIhHmBfXaPf32EiY6DgYN7fouDe3d8d3eanZd6ioOHaXZ+fGyEhZSAco+CcYaCfoJ/b2ZsZlddW1xbVGRwZV9YY3J1aXZvZGViV1xcaIBwb3KAc4llZXl/anR2c3ODhXiBhHp3dHVua3pwYmdrZ4Z0jYRuZl5ffG97iX1obXdmaWRWV3Jwjad8hHx2lpBzfHJ7eWx6eo+Edpd7h4aChoN9dXBybWd1XW1pX211ZGdmaXpve3JZZ4F2dWdwgHiCdWF3hYt8lIFui2pteoFxZXJlYGx5Z3J2iXp9YXWDdmlrcXV6cHl3cnxmfX5+eHZuY2VhbYZ8bWtWamJxVExqa1BMTnBIXntlYU1VdGRLTlNXYWp3fmVdZ3JoZV9WY1dicF1LS2tYY2FUU1RzVkxZdmVaX2tgXFpjZV93Z21icGlzb3F+dXSZgXiAgHiAfoWEen12goN+mIVucnR8enRxhYWPgoB6i3V0kIB9gZSOgIWEfH6Mhnp+gHZ7o6aKeYiGhWx1fHt1hIKMem+Fc3qFfYKDdW5qaWVWXVtbWlNjbmVbWGF0e2ppbWhgYldfWmmAaWtvgGdsYWh6eWt0dHRvhoJ7gH12dW56aWt6al9lbmiBd5CEZ2VYYndpfod6b2lvZ2ZdVVhvaI+ndoF6fJGOeHVvfm5ydHiOfneUdIWCf4WIdmpydmdob1xtZV5uc19nYmp4aHttW22Dc3Rqb4B+eXdgdoSEeI+Fc4hxcHl/cWNwaFtudmRwc4d7eGFygHBnaXhzcWt3dnR2Y4N7fnd1cGNjY2x7fGtrVWliZ1RLbWlQR1JsRWF4ZWFNVHJdS01VWWRrd3plX21waWRcVl9Vb25WSVNoWGZeV0xUa1RLXHpfW19rXV1bYmVgemhsYW9vdW5vd3V6l312gIF5gH+Hhnp5eoN9gZOEcXR0fnl2dIWIkH2AfZBsc5WBe4KfhX+HfYB+hoKAint2hKyfgHqIh4RscoJ5doGAgnRuh299gHSKgGpvbmRkWF9aWltVYmpnW1pfdYJpXm5sXGFWXFxrgWVydH1pal1sd3ZndHdybod8fn56dnNsemhqeGZdZHJneneSgWNjVGRvZ4KEd3ZmaGphV1ZZaGSQp25+eICLjnpwcHxmeG55inp2jnGDfX5/hm5kdnNkaGhdbGJecG9bZ15tdWV6aV10gG9ya3F7fnV1YXSFinuHh4B/d3J1fnRhcGxZcHJicXGEe3VkcoBsYGx6b2poend0cWWEdHl5dXFkYWRscn1qbFRpXl5VTHRjUUdXYkdjdmVgS1RwWEpNWFhna3Z6ZGVtcGZjWlhdWHZmU0lcY1hoWFhIVmRQSGJ5W11gbFteXGJkXoBpal9vdHhub252g5d5coGAfX+Ji4Z+dXaGeIaMfXR1dYF5enqCjI59foSJanSWgXuKnX1+hXmAe358hohzcY+ujHx7hpB+ZnGIenR9fXZyb4Zte35tj3picG9iZV1lVlpZV2Nma2BdXXOGaVlxblteWFpcbHtjcXd2bWNbbXN0aHV2cW2FeX+BeXdub3RlaXVlW2d0ZnZ2kXpfXVNlZmqCgXN9YWNpXFVYXmJkkKVoeXSDhpB4bG55Z3dse4N5dIhygHh7eH9oZXZtYGZhX2pgXnVrWWVdb25iemZbeHxrbm5wd3l0dGRyg5J/h4KIenZvcXxyYXdjWm5vYXBxgXtzZXGAZF5tdmljZnh6c2xtgXRzfHJxYl5lbW59ZWlUaFlaVU55YFJLWllIY3RjYElUbVRKTVpWaWxye2NsbHNjYVlaW2F3XFNKY11YaVNWR1hgTkdqdlhfYm1bW19iY12FaWhhbnh5bG9qdoGQeG2CfoCCkoiEgXZ1iXSLhnRxdnaBd3x9foyQgH6TfnB4loN9mZJ5gIB4eX5/c4iDc3Caont7gImVeWR1iHlzeXZrc3B/bHl8cJFyXnBvYWdibFRbWldoY21mXFxyiWZTcm5bWVhYYGx2ZGp1ampfW210cW10dHRrhn1/gHx3b29sZWlxY1trcmR0do9zXFZTZGBxf35xglxhY15TWmFcZJOfZXJxhIOQdGtqeWxub3l5enGAdn9yeXp6ZGZ1Z15iW2FoXF53aVdiXnBoYXhhW3t2ampyb3d0c3RpcIGUg4Z+hHZyanB8bWV2V1tqbWJwcoB6c2Vvfltgb3FiXmlve2trc31ycHdrcGBbZWtte2FnVGdVWFJRd1xTUFlSSGNzYmBHVmxSSVBaVWtra3xlbW9xYVtaWFlscFdST2ZXVmhTVEZZXE9JcnVZYGRtY1hhYGFejGpjZG15eGtvaXV5hntrhH2AhZl8goR5fYhtj4Zxb3d6fHSCgn2Lj4OClnR4gpOGgZ+JdYF/gXR/gnCHgnVvopd0e4aLh3tmd4tvbnxwZnhxe2xzdnONa150bmFnZmtTXlxWaGJsbFtccYxkTm9uXVZYVWdpdGhjdGVlXVpudW5wdXV6a4h9gH2Id5BzY2VrbmFcbm1jc3iHa1pUVmJjd3x8cIVcY19jVFpgWmOWlWNucIOEinNqZ3luZXJ1cXpreXR1bnp+dV9mc2NbXldiZFlhdWZWX2FtY2FxXV1+b2hpc3FzcHV1a2yEk4GJe4VxcmZue29xblNaZWplcXOAdnNibHZVYnFrW15uZHtka3V8cnJyam1gWWNpanheZlRlVVZQVW9YUVdUUEhlcl9hRlhrT0lYVFZtaGR8aWt3amFXXFVbdGRTUlZoUVhlU1NIWVpQTnh3W2BmbGlaYmBeXo9uYmZreXVubml2dn9+bYSAfoaXe3+HgYl+a5OIcmd0gHt1gIN+iY9/i5NyfYqRhYefhnt/hoxzgIZzfYJ1bqSMc4GNi3d4bnuNYGR8cWd5c3ltbXF2g2dkfG1jZmdoU2BfVWdgbG9cXm6OaE1pbWBVVlNvZnNsZXhkZV1ZcXVtcnt4c22JfIF3nHt6bGJlbG1eYG5qZXB5fmdaVlhfbHh7e2+DX2JeaFZZYFhknIhia3GBhnx3a2p2bFt1cGp5aXVybW57gHJYam5eWV1WYmRYZXFkVF9iaWJibVpgfmtma3N1bm13dmtohYx/iXqHbXFmb3tscWxiWF9oaG9zgHNzXmltU2VwZFVibmF4Ym91e3Vqb2xqX1hgZmh1XWVWYlZTT1lnU09dT09IZW9dY0daak5KYEtYbWRfeGhufWRgVV5UXXRbVFJfZk5cYVRTSltZUVp2dl1fZm1oWGJhW16OcWNnandxc21ndnN5g3OCg3uIjn58ioiOeW6QinRsc4Fzf3+IhYeShJWPen2Mj4iRm4SAfIyEcn+Bc3R3cW6Tk5OTk5OTk5OTkpKSkpKSkpKSkpKSk5OTkpKSkpKSkpKSkpKSkZGRkJCPj4+Pj4+Ojo6Pj46OjY2Njo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo2NjYyMjI2NjY2Njo6Ojo6OjY6OjY2Ojo6Oj4+Pjo2NjY2Oj4+Pj4+PjoKAfnp6fX5+fX1/fn59fn5+fn5+fn+Af4CAgIGAgIB/gIGBgYOHjI6Ojo6NjY2NjY2NjY2NjZKSkpOTkpKSkpKSkpKSkpGRkZGSkpKSkpKSkpKSkpKSkpKSkpGRkZCQkI+Pjo6Ojo6NjY6Ojo2NjY2Njo6Njo6OjY2NjY2Njo6Ojo6Ojo6NjYyMjY2MjIyNjY2Njo6Ojo6NjY2NjY2Njo6Ojo6OjY2NjY2Ojo6Ojo+Ogn99ent8fX59fX5+fn5+fn5+fn5+f4B/gICAgICAgH+BgYCBg4aMjY6NjY2NjY2NjIyMjIyMkpKSkpKSkpKSkpKSkpKSkZKSkpKSk5KSkpKRkZGRkZKSkpGRkZGQkJCQj4+Ojo6OjY2NjY2Njo6Ojo6NjY2NjY2NjY6Ojo2Ojo6Ojo6Ojo2NjIyMjIyMjIyNjY2NjY2NjY2NjY2NjY2Njo6Ojo2NjY2NjY2NjY6Ojo6Cf3x6fHx9fn19fn19fX59fn5+fn5+gH9/gICBgYGAf4CAgICDhouOjo2NjY2NjIyMjIyMjIySk5OTk5OTk5OSkpKSkZGSkpKSkpKSkpGRkZGRkZGRkJCQkJGRkZCQkJCPj46Pjo6Ojo6Ojo6Ojo6NjY2NjY2NjY2Njo6Ojo6Ojo6Ojo6OjY2MjIyMjIyMjIyMjY2NjY2NjY2NjY2NjY2Njo6NjY2MjIyNjY2Njo6OjoN/fHp8e31+fH1+fXx9fn59fn5+fn5/f3+BgYGAgICAgYCAgIOGi42NjY2NjIyMjIyMjIyMjJA+LjExMTEvb4eEhISEiF0tMDAwMC1GoaGhoaGhoJqZmpqampqKg4SEhIOEd2VnZmZmaFxDREREREJLkpqZmZmZnFtBRERERENYaGdnZ2dmb4SDg4ODg4OLjIyMjIyMjY2NjYyMjY2NjY2NjY2NjIyMjIyNjY2NjY2OhX19e3t6fX58fH59fX1+fX1+fn5+fn9/f4GBgYCAgICBgICAgoWKjI2MjIyMjIyMjIyMjIyMjy0aHR0dHBpohoKCgoKGUxgdHR0dGTekpKSkpKSjnJycnJycnImBgoKBgYJyXV9fX19hUjQ1NTU1Mz+TnpycnJyfUjE1NTU1NE1hX19fX15qgoGBgYGAgYqLi4yMjIyMjIyMjIyMjIyMjY2NjY2MjIyMjIyMjY2NjY2GfH16enp8fXt8fn19fX59fX5+fn5/f3+AgYCBgYGAgIGBgYGChYqNjYyMjIyMjIyMjIuLi4uRiYeHiIiIh46QkJCQkJCMh4eHh4eHiZKTkpKSkpKRkZGRkZGRj46Ojo2NjYuJiYmJiYmIhYaFhYWFho2Ojo6Ojo6IhoaGhYWFh4mIiIiIiImKioqKioqKi4uLi4uLi4uLjIyLi4yMjIyMjI2NjIyMjIyMjIyMjY2Njoh8f3l7ent8e319fX18fX19fX5+fn9/f4CBgYGBgYGAgYCAgYKFioyMjIyMjIyMjIuLi4uLi5GTk5OTk46RkpGJh46KkJKTkYuSj4yOhYqRkZGRkJCQkJCPj4+Pj4+Ojo6Njo6Ojo2Njo2Njo6Ojo6NjIyMjY2NjY6Ojo6Ojo6NjY2MjIyMjIuLi4uLiouLi4uLi4uLi4uLi4uLjIyMjIyMjIyMjIyMjIyMjIyNjY2NiX59eHh5fH18fX19fHx9fX59fn5+f3+AgICBgYGBgYCBgIGCgoSKjIyMjIyMjIyLi4uLi4qLkJCRkZGPhI6QkIaKj4WNkJCOhY6HiI2IiZCQkJCQkJCQkI+Pj4+Ojo6NjY2NjYyMjIyMjIyMjIyMjIyMjIyMjI2NjIyMjIyMjIyMi4uLi4uLi4uLi4qKiouLi4uLi4uLi4uLi4uLi4yMjIyMjIyMjIyMjIyMjIyMjI2Lfnx3dnh7fXx7fX18fH19fn5+fn5/f4CAgIGBgYGBgIGAgIGChIqMjIyMjIuLi4uLioqKioqQkJCQkIqFjoiOhoaPiY2QkJCIjIWGj4mMkI+Pj4+Qj5CPj4+Ojo6OjY2MjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMi4uLi4uLi4uLi4uLi4qKioqKi4qKi4qKi4uKioqKi4uLi4uLjIyMjIyMjIyMjIyMjIyMjIt+e3d2eHt8fHx9fX19fX1+fn5/fn9/f3+AgIGAgYGAgYCBgYGEiYyMi4uLi4uLioqKioqKipCQkJCPhYOMjpCOiYyKjpCQkIiMh4iMiI6Pj4+Pj4+Pj4+Pjo6OjY2NjYyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIuLi4uLi4uLi4qKioqKioqKioqKioqKioqLi4uKioqKiouLi4uLi4yMjIyMjIyMjIyMjIyMin18dnZ4fHx7fH19fX19fn5+fn5+fn9/f4CAgYCBgYGBgIGAgYSJi4yLi4uLi4qKiomJiYmJkJCQkJCMhoyJjoeFjYmOi4yQiI2HhYyIj4+Pjo+Pj4+Pjo6OjY2NjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyLi4uLi4qKioqKioqKioqKioqKioqKioqKi4uLioqKioqKioqLi4uLi4uLjIyMjIyMi4uMjIyKf353eHp7enp8fHx7fX1+fn5+fn9+fn9/gICAgICBgICAgYCBhIqMi4uLioqKioqJiYmJiYmPj4+Pj5CMjouPjIqPjI6MjY+Mj4yLjYyOj46Ojo6Ojo6Ojo6NjYyMjIyLi4uLi4uLjIyMjIyMjIyMjIyMjIyMjIyMjIyLi4uLioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi4uLi4uLi4uLi4uLjIiAfXh5enl6e318e3t9fn5+fn5/f35+f39/gICBgICAgIGBgIGEiouLioqKioqJiYmJiYmIiI+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Ojo+Ojo6Ojo6Ojo6Ojo2NjYyMjIyLi4uLi4uLi4uLjIyMjIyMjIyMjIyMjIyMjIyMjIuLi4uKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLi4uLioqKi4uLh4B8eHp6eXt8fHt8fH1+fn5+fn9/fn9/f39/gIB/gYGAgIB/gYSJi4qKioqJiYmJiYmJiIiIj4+Pj4+Pj4+Pj46Pj4+Oj4+Ojo6Ojo6Ojo6OjY2NjY2NjY2MjIyMjIuLi4uLi4uLi4uLi4uLi4uLjIyMjIyMjIyMjIyMi4uLi4qKioqKioqKioqKioqKioqKioqKioqKioqKiYmKioqKioqKioqKioqKioqKioqKi4uHgHt5eXh6fHx6e3t9fX5+fn5+f39+f39/f39/f3+BgYCAgH+BhIiLiomJiYmJiYmJiIiIiIiOjo6Ojo6Pj46MjI+Sj5COjo6Ojo6NjY2NjY2NjY2NjIyMjIyMjIuLi4uLioqKioqLi4uLi4uLi4uLi4uMjIyMjIyMjIyLi4uLi4qKioqKioqKioqKiomKiomJiYqKioqKioqJiYmJioqKioqKioqKioqKioqKioqKi4aBe3h5eHp8ent7fH19fn5+fn5/f35/f39+fn9/f4CAgYCAgIGEiIqJiYmJiYmJiIiIiIeHh46Ojo6Ojo6Ojo+MkJOQkI+Ojo6NjY2NjY2NjYyMjIyMjIyMjIuLi4uLi4qKioqKioqKi4uLi4uLi4uLi4uLi4uMjIyLi4uLi4uLioqKioqKioqKiYmJiYmJiYmJiYmKioqKiomJiYmJiYmJiYqKioqKiomJioqKioqKhYB6eHl5fHt6ent8fH1+fn1+fn9/fX9/f35/f39/gICBgICAgYSIiomJiYiIiIiIiIeHh4eHjY2Ojo6Ojo6Pj4+PjoyNkI2NjY2NjY2MjIyMjIyMjIyMi4uLi4uLioqKioqKioqKioqLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4qKioqKioqJiYmJiYmJiYmJiYmJiYmKioqJiYmJiYmJiYmJiYmKioqJiYmJiYmJioqFf3l6eXh7e3p7fHx7fn5+fX5+f39+f35/fn+Af3+AgICBgYCChIeKiYmIiIiIh4eHh4eHh4eNjY2Njo6Oi42Nj5WPiYyPjYyNjYyMjIyMjIyMjIuLi4uLi4uLi4qKioqKioqKioqKiouLi4uLi4uLi4uLi4uLi4uLi4uLi4uKioqJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYR+eXt5ent7ent9fHt+fn59fn1+f35/fn9+f3+AgICAf4CAgICEh4mIiIiHh4eHh4eHh4aGhoyNjY2NjY+MjImKj42IjJGPjY2NjIyMjIyMjIyLi4uLi4uKioqKioqKioqKioqKioqKiouLi4uLi4uLi4uLi4uLi4uLi4uKioqJiomJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJg355e3p8e3p7fX17fH9+fn5+fX5/fn9+f3+Af4CAgH+AgH9/f4OGiIiHh4eHh4aGhoaGhoaGjIyMjIyLiYyKiIeJhoyOjJCMjZGOjIyMi4uLi4uLi4uLi4qKioqKioqKioqKioqKioqKioqKiouLi4uLi4uLi4uLioqKioqKiomJiYmJiYmJiImJiYmJiYmJiYmJiYmJiYmJiYmIiImJiYmJiYmJiYmJiYiIiIiIiYmCf3h7e3t6enx9fHx9f39+fn19fn9/f39/f4F/gIB/gICAgICAg4aIh4eHhoaGhoaGhoaGhoWMjIyMi4yOjoyKioeEiIuKjIuNjo+Li4uLi4uLi4uLi4uLioqKiomJiYmKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiomJiYmJiYiIiIiIiIiIiImJiYmJiYmJiYmJiIiIiIiIiYmIiIiIiIiIiIiIiIiIiIJ/eHp7enp6e3x8fX1+f35+fX1+f39/fn+AgICAf3+Af4CAgYCDhYiHh4aGhoaGhoaFhYWFhYyMjI2NjJCSjI2Ii4mJi4uLi4mLjIqMi4uLi4uLioqLi4qKiomJiYmJiYmJiYqKioqKioqKioqKioqKioqKioqKioqKiYqJioqJiYmJiYmIiIiIiIiIiIiIiImJiYmJiYmJiYmIiIiIiIiIiIiIiIiIiIiIiIiIiIiHgXx4e3x5enp8fHx9fX9/fn59fX9/f39+fn+Af4B/f3+Af4CAgIKEh4eGhoaGhYWFhYWFhYWFjIyNkY+PjZGJjIaJjIuIiImMiYeNjo+NioqKioqKioqKiomJiYmJiYmJiYmJioqKioqKioqKioqKioqJioqKioqKiYmJiYmJiYmJiYmJiYiIiIiIiIiIiIiIiImJiYmJiYmJiIiIiIiIiIiIiIiIiIiHh4eHh4eHh4WAenl9e3t7enx8fHx9f39+fn19f39/f35+f4B/gH9/f4B/gH+AgoSHhoaGhYWFhYWFhYWFhISLi46PjoyLj4iHiYmMjYWFjo2KiYyNi46KioqKiomJiYmJiYmJiYmJiYmJiYmJiYmKioqKioqKiomJiYmJiYmJiYmJiYmJiYmJiYmJiYmIiIiIiIiIiIiHiIiIiIiIiIiIiIiIiIiIiIiHh4eHh4eHh4eHhoaHh4eHhH55eX16enp7fXt8fX5+f35+fX5/f39/fX5/f3+Af39/f39/f4CChIaFhoWFhYWFhYWFhISEhIuLjI6MjI2Lh4mIiomGgoiNjoiKi5GTj4uJiYmJiYmJiYmJiYmIiYmJiYmJiYmJiYmKioqKiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiIiIiIiIiIeHh4eHh4eIiIiIiIiIiIiIh4eHh4eHhoaGh4aGhoaGhoaGh4eDfXp5e3p5enx8e31+fn5/fn59fn9/fn9+fn+AgICAf35/f39/gIKEhoWFhYWFhYSEhISEhISEioqOjYmIiIqKh4iHiomIioiIh4qGi5GPiomJiYmJiYiIiIiIiIiIiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmIiIiIiIiIiIiHh4iIh4eHh4eHh4eHh4eHh4eHh4eHh4eHhoaGhoaGhoaGhoaGhoaGh4J8eXl6eXp7e3t7fX5+fn5+fn59gH9/f39/f4CAgH9/fn9/gICAgoSGhYWFhISEhISEhISEhISKi5CPiYmJi4qHh4WHiYuKiYSLjYmOjYmJiYmJiIiIiIiIiIiIiIiIiYmJiYmJiYmJiYmJiYmJiYmJiIiIiImJiYmJiYiIiIiIiIiIiIiIiIeHh4eHh4eHh4eHh4eHh4eHh4eHh4eGhoaGhoaGhoaGhoaGhoaGhoaGgXt4enp4e3x7e3x+fn9+fn5+fX1/f39/f3+Af4B/f39/f3+Af4CChIaFhYSEhISEhISEhISEhI+Qj4+IiYuIhoeIiYuLjIuJioqNio6Oj4iJiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIh4eHh4eHh4eHh4eHh4eHh4aGhoaGhoaGhoaGhoaGhoaGhYWFhYWFhoaAe3h5eXh4enp8fX1+f35+fn59fn9/f39/gIB/gICAf39/gIB/gYKDhoiGiIaDhISEhIODg4ODkpKOioeKi4qLh4uNiYqJi4iHiouIio+SioiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIh4eHh4eHh4eHh4eHh4eGhoaGhoaGhoaGhoaGhoaGhoaGhoaFhYWFhYWGhn96eXh4eHl5eXx9fn5/fn5/fn1+f35/f3+Af39/f4CAgH+AgH+BgoOHjo+PjoiHhIWFhoaFhYWSkI6KiYmIiImKioiIh4aKjIiHiYmOkJGNh4iIiIiIiIiIiIiIiIiIiIiIh4iIiIiIiIiIiIiIiIiIiIiIiIiIh4eHh4eHh4eHh4eHh4eHh4eHh4aGh4eHh4aGhoaGhoaGhoaGhoaGhoaGhoaGhoWFhYWFhYWFhYWGf3l4d3d3eXp5e3x9fn9+f35+fn5+f35+fn+Af4CAgICAf3+Af4GBg4eOjo6Ojo6Mjo2OjY2MjZCQjomHhoiJiYeIiouIiYyJiYaKjY6PkYuIiIiIiIeHh4eIiIiIiIiHh4eHh4iIiIiIiIiIiIiIiIiIiIeHh4eHh4eHh4eHh4eHh4eHh4eHh4aGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaFhYWFhYWFhYWFhYZ+eXd5d3d6eXl8e31/fn5/fn5+fn5+fn9+f4B/fn+Af39/f39+gIGEiI6Ojo6Ojo6Ojo6Ojo2NkJGOi42JjIiIiYaHiYaIioiHi4yLjpCQiIeIiYmJiIeHh4iIiYmIh4eHh4iIiYiIiIiIh4iIiIiHh4eHh4eHh4eHh4eHh4eHh4aGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoWFhoaFhYaGhoWGhYSEhIWFhoaFhIWFhX55d3l2eHl4e3x7fn5+fn5+fn5+fn5+f39+f39+f39/f35/f3+AgYOGjY2Ojo6OjY6NjY6OjY2Qj42Ni46KhoiKhISLiYeDhYSDi4mLj42JjI6QkI+NjYyLjY6Pj42NjI2Nj4+Pjo6MjYyMjY2KiYiHiImHh4aHh4eHh4aGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoeHiYqKiIeJi4yNjo2LiImLi42OjYyJiImMgHl3d3Z6eXh7e3t+fn5+fn5+fn5+fn5/f39+fn5/f4B/f4B/f4CBg4aMjY2NjY2NjY2Qj4+Pj46NjI6KiYuMjIeFiY2Lh4aIh4aHh4uNjo6Pj4+Pjo+Pj4+Pj4+Pj4+Pj4+Ojo+Pj4+Pj4+Pj4+Oj46Oj46Mi4uJh4eHh4aIhoaGhoaGhoaGhoeLiYeHiIiLjY2Mi4yLjY2Ojo+Ojo6Pj46Ojo6Ojo6Ojo6Njo6NjY2AeHZ4eHp4enx6fH5+fn5+fn5+fn5+f39/fn59fn9/f39/gH9/gIGDhoyMjIyMjY+QkpOTk5KSjYyMjIqHioyKh4eJiYWCiouIiYWJjpCNjo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6NjI2NjI2LiYaHh4eHiYqLjY6NjYyNjY6OjY2OjY2NjY2NjY2NjY2NjY2OjIyNj4+OjY2MjIyLi313dXd5enp7e3p+fn5+fn5+f35+fn5/f39+fn1+f39/gICAf3+AgYOFj5KRkJGSk5OTk5OTkpKLi4uLiomMiouLiYuKhoeOjYiIjI6OjIuMjIyNj46Njo6Ojo2NjY2MjY2NjIyMjIyMjIyMjY2NjYyMjI2NjYyMjI2NjIyNjIyMi4yMi4yMjI2MjIyMjIyMjIyMjIyLi4uLi4yNjY6Sk5OSkpSRkJOVlZSTk5COjo6Oe3Z2d3h6ent7e31+fn5+fn5/fn5+fn5/f35+fn9/f39/gIB/f4CBgoSNkpKTkpOSkpOTkZKSkoqJioyJi4qJjIuKioiHiYqKi4mKjY2Mj46Nj5KUlJOUlJOTkpGSkI+Ojo2NjY2Pko+OkZGOjIuKioqLi4qKi5CPjoyMjIqKioqKioqKiouKioqKi4yLi4uMjIyKiouLi46RkpOTk5SUk5STk5SUlJOTk5KSkpKSk5F6dXZ2eHt7e3p6fX5+fn5+fn5+fn5+fX5/fn5+f39/f3+Af39/gIGChIuRkZGRkZKSkpGRkpGRiYmIiIqMiYiJiYuJhoSJhoyKh4ySkpKTk5OUlZWWlZWUk5OUlJSUlJSUlJSVlZWVlZWUlJOTkY+QkZKQjoyRlZWVk5KSjo+QjYqKi4qKi42OjY6RkpCRkpKSkpGRkpKSk5OTk5OTk5OTk5OTkpOSkpKSkpKSkpKSj3h1d3l6e3t7ent9fX19fn5/f35+fX5+fn5+f39/fn9/f4B/f3+AgYKEi5GQkJCSkpKRkZGRkZGIiIiIi4uJg4eLi4yMiIeHjYyNkpSSkpOTlJWWlpaVlZSSkpOTk5SUlJWVlZaXlpaWlpWUk5SUlJSVlJSUk5OVlZWUk5KTk5OTkJGSkZGSk5OTk5KSkpOSkpKSkpKSkpKSkpKSk5OTk5SUk5OSkpOTkpKSkpGRkZGPdnJ3enp7e3t8fX59fX1+fn9+fn9+fn5+fn6Af39/f3+Af3+Af4CBgoSKkJCRkZGRkZCQkJCQkIeHh4eIiIiFi4+KjI6Njo+OkJWUk5OTk5SUlZWVlJSVk5KSk5KTlZSVlZaWlpaWlpaWlpSTk5OTk5OUlJOSk5SVlZSTkpKSkpOTk5OTk5OTk5KSkpKSkpKSkpGSkpGRkZGRkZKTlJSUlJSTkpGRkZGRkZGRkZGRkYx0c3d6ent7e3x9fX1+fX5+f35+fn5+fn5+fn9/f39/fn9/f39/f4GDhIqQkJGRkJCQj4+Pj4+Ph4iKi4yNjYuOj42Mjo6RkpGSk5OSkpKSk5SUlJOSk5OTkpKSkpKUj46Uk5WVlZWUlZWUk5OTk5KSk5OUk5KTlJSUk5KSkpKSk5OTkpKSkpKRkZKSkpKSkpKSkpKSkZKRkZGSkpOTlJSUk5OSkZGRkZGQkJCQkZCRinN0dnp8fHp7fXx9fn59f35/f35+fn9+f31+f39+fn59f39/gH+AgYKDipCQkZGQj5CPjo+Pjo+Oj4+Pj4+Pj4+PkI2OjpCRkpKSkpKRkpKTk5OTkpGSkpKSkZGSkpN8hpSSk5STk5OTlJOSk5OTk5OTk5OSk5OTkpKSkpKSkpKSkpGRkZGSkZCRkZGRkpKRkZGRkpGRkZGRkpKSkpKSkpKSkpKRkJCQkJCQkJCQkJGGc3V2e3x8e3x9fX1+fn1/f35/fn5/gH9+fX5/fX5/fn5/f3+Af3+BgYGKkI+PkI+Pj4+Pj4+Pj4+Oj46Oj4+Pj5CQiI2PkJGRkpKSkpOTk5OTkpKSk5KSj36PkpGTiHOMk5GRkpKSkZKSkpKSkpKTk5KRkZKTkpGRkpKSkpKRkJCQkJGRkZGQkJGSkZGRkZGSkZGRkZGRkZGSkpKSkpKSkZCRkZCPj4+Pj4+Pj4+PkX9ydHh8fHx7fHx9fX5+fn9+fn5/f3+AgH99fn5+f39+f39/f4CAf4GBgYqPj4+Pjo6Ojo+Pj46Ojo6Ojo+PkI+Pj4+GjpCQkJCRkZGRkZGRkZGQkJCQkJCQdHaQkZB4dIqRkJCRkZCQkJGRkZGRkZGRkJCQkZGQkJGRkZGRkI+PkJCQkJGRkJCQkJCRkJCQkJCQkZCQkJCQkJCQkZCQkJCPj4+Pjo+Pj46Ojo+Pj4+PeHJ2eXx9fHp9fH19fn5+f35+f39/f4CAf39/fn5/f35/f39/gIB/gYGAio6Ojo6NjY2Ojo6Ojo6NjY2Oj4+Pj4+PjoiQkZCPj4+QkJCQkJCQkI+PkJCQj5F8aH2RiXV2iZCPj4+PkI+PkJCQkJCQj4+Oj4+QkI+PkJCQkJCPjo+QkJCPj4+Pj4+PkJCQkI+PkI+Qj4+PkI+PkJCQkI+OkI+Pj46OjoyMjY2NjIqDiYhzc3Z4fX58eX18fX1+fn5/fX5/fn9/f39/f4B/f39/f4CAgH+AgH+BgYCJjY2Ojo6Ojo6OjY2OjoyNjY6Ojo6Ojo2NiJCRkI6Njo6Ojo6Ojo6Pjo6Ojo6OkIBiaop+bHSIj46OjY6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Pj46Oj4+Pj4+Pj4+Pjo+PjY2MjYyNjoyLi4mJiYiFhYSDgoKEgnR5fXp4dXJrZWltb2xmZmdncHNzd3l9fnl6e3x9fX1+fn59fn9/fn9/f39/gIB/f3+AgIGAgIB/f4CBgImNjY2NjY2MjYyMjIyMi4uLjYyMjIyMjIyGj5GRjIyMjIyMjIyMjIyMjIyMjIyOd15qZmljbIqOjY2MjIyNjY2NjYyMjI2MiomKi4uJh4KAh4iEgXt6gH57fXx8fXlzcnJycnV1cG1ramppZ2NkYV9bXF1eWFVXWFlTS0VJSkpLTE1PT0tgdHR3eX19eHp5e3x8fX5+fn1+f39+f35/f4CAgH+AgICBgYCAgICAgIGAf4OEhYSFiIuLjYyMjIuLi4yGiYqKioqKh4OOkJGNiouLi4uMiYmKioqKiouKi4Zkb21baXJrgYaDhIeJiYWCg397fHl6e3pzcHFxcW1samdsbWdlZmVmZGNlZGVkZWVlZWRkZGNhYV5dXFpYWFdUUFFSU1JTTU1KSUZESEpHR0hHR0xOSWdzdXh6fXp4d3l8fHx8fn5+fn9/fn9/f39+f4CAgIB/gICBgICAgICBgYFnXmBjYWNucX17ent/fXd8fHZ4ent4eHpvcXt4eXt8e3h3e394dXd0dHZ1dXZ3b2Nxb2Fqc3FlaGtsbm9tamlpaGhlZWRkZF9gYWJgYF5dWVhaWltdXV9gX2BfX19gYmFeXl5eWVldXF1bV1dWUlRSU1NOUUpISUZERUhMTEhGR0lLSklNbXJ0eHp7end3eXt6e3x+fn1+f39+f35/f35+gIGAf3+AgIGAgICAgICCgWdYW1pZXFtcY1xaXF5ga3FtcHBvbm5vbmtpbmxrbG9qaWtraWpraWZmZ2dnaGhjZWtuc3BydWxjY2JhYmBgXVhbW1dYV1RWUVBUU1NNSkxLTExOTk9UWFhXVVVUUlBQTU1QT05LTE1QUU9MTEpHSUlHSEhJSEhIR0ZHSEpKSEhISUlISVZwc3V5ent5dnZ5enp7fH59fX5/f35/fn5+f3+AgX9+f4B/gICAgICAgIGBbFtYVlZWWVlaWVlYVVZoamxubmxra2poaGloZGVkYlxiZl9fYWNfXF9dYF1eWVxgYmNtb3BwbVpZX1tYV1NOTUtLS0tMSUtNTktKS0tMSktQTEtLRkdHSUlGR0lISUZFSEdGRkVERUVEREVJSUlHSEdIRkZLTUtJSUlIR0hLTU1LTExMVXFzdnl6e3h2d3h3ent8fn1+fn9/f39+f3+AgIGAfn5/f4CAf4CAgIB/gYJoUlRVVlNVV1lZWVdXV1tbYWNfXlxbWFZWWVZSVFJRUVVUU1NUUE1KTU5QUk9NT19oZmxubWdlUVBTUFBOTk9NSk1MS0xKSktLRklJSkxJR0pISUlFR0dGRkVFSElKR0ZHRkZHR0hKR0dISEpMSkpLSUlISktLSkhKS0pISUtMTU9QUEtUdHN1eHp6eHZ2d3d6enx+fX5+fn5/f35+fn+AgYB/f3+AgYB/gICAgH+AgmlQUlRXVVRWWVdYWFpbVFRTUlBRU1FRUU9OTlBQUU9MTlBPTk5NTEtNTk5PTExWZG1mam1tamdcU09PUFFPTk5PTk9QTk1NS0lISEpJSUlJR0ZHR0dJSkhJSEhJSEhHSEdISElISUxLSklISkpJSkpIR0pMS0pJSUhKSktMTk1NTU9RTFVzcnN3enl3dnR2eHp7fX19fn5+fn9+fn5+gICBgICAf4GBgH+AgICAgICBbE9PTlRZVVVdW1lXV1hOTUpKSUZKT0xKSkdJSk1NS0pMTUpHSUlJSktLR0dPVWBobmhsbGtqamhkX1ZPT09NTk9MTk5OUFBPTE1MTk1MTEpJSEdJSElISElJS0xLS0pJS0pJSklJSUlJR0dKSUdJSUpKTk1OTEhJSklJSk1PT01MT1JOWXBwcnd4d3d0c3R3enx+fX5+fn5+fn5+fn9/gICAgICAgYCAf39/gICAgIFvS0pNTlFOTlVXVlZSU0lFQ0VFUkREQT5CP0RAQD5CREFAQURHRkVIRUVTXmJmaGptbHNwamlqbGtqZlhKSklKSUlLSkxQTk1MTU1MTU1NTElIREZGR0ZGRklKSUlLSkhMSklKSkpJSEhKS0tIRkdJSklLTU5OSktPTUxLTU1PUE5QT1BgcG9yd3h2dHJzdXd6fX19fn5+fn9+fn1/gICAgICAf4CAgIB/f3+AgICAgXNQUE5OUE1KS1BSUE5RQ0RCQUZRRT1DPT9FSDk6Oz0/PTxBRkA+Ojs+Pz9NWV5qbWxueXNqamxmXFJMRUVFRUZFR0dHR0pHSEpLR0NER0pHQ0RFQUFDR0hHSEdISktKSElMS0lISktLTU5MTUxMSkpMS0lLTU9PUFNRT1BQTk9QUlFNUGdwb3N2dXRycXR4eX19fX1+fn5+f4B+foCAgH9/gIB/f4CAgH+Af4B/gICCdlRVUVFQT0xNUFBOT09BQkFAQkE/Oz48Pj8/Ozg5ODs7OkA6Oz48Ozs7O0dKPkdZam93cGtpWUdEQUVGREdJSEM/QEBAQUFCQUE/Pjw9PkFAQD8+P0BFR0dHSUtMTk1OTUxNTUpLTVBVU05MTlFOTk1OTE1NTk9OTk1LS05OTk1OTkxUbnBwcnR0c3Fydnl5fX19fn1+fn5/gH5+gICAgICAgH9/gICAgH9/gH+BgIJ4UVFSVFJTUVNTUVFST0BAPT4/PD8+QEE/PT45Ozo7Ozk5Ojg4Ozw5Nzk7Oz49OjtEWG1sX0hBPkFAQ0ZEQ0NDPzs+PkBDQ0E/Pj9BPkBAQj9APD9CQEFDRUVFSktQT1BPTU1OTExMT1JRUFJOTExPTUtOT0xMTEtMS0tKS0tKTU1LS1xxcXF0c3VycXR4eHp9fn1+fn5+f39/fn5/gIGAgH+Af4CAgICAf4CAf4CAgXxSTU9RUFFSUlRSU1NOPDs8Ozs7P0BBQkA9PDk8PTw6Nzk6Ojk3OTo6Nzg6OTo7Ojc3U2M9Nzg8PD1AQUA9Ozs+PD09QEJDQT9BQkE9Pj09Oz0/Q0RCQD9BREJFR0pKSkpKTE1MTExNTExOVVNLTE1USVBKSU1KSUpLS0pJSEdKS0lKZnJxc3RzdXJydnl5e31+fn5+fX9+f39/f36AgICAf4CAgICAgIF/gIF/gYCBgFZMTlBQTlJRUFBRUU44PT88PDo9PkFAQT8+PkA/Pj48PT0/QD09PT9DOz09Pj09PTtFWTk7PD49Pj9AQUA+P0E/QEBBQEBAPT8/PTw6Oz09PD9AQUJCQUBCREZGRkdGR0dISUtMTExLTEtKS0lKSk1MTEpMS0lISUxMSklJSElLR01tcHF1dXR1c3V4eXl8fX5+fn5+fn5/gH9+gIB/f39/gH+AgYCAgYCBgICBgYCCYUtPT05OT1BPT1BQTzo8Pjw9Oz8+PkFBPz0/Q0NEQT89PkBBP0A8XW5APkRFPz9BPEVcPT09Ozo9PkFBPz5AQD9BPz89PD48PTs7PD0+QUA/QD5AQ0NEQkRFSEVFR0hISEdGSUpJSUlJSUhKSkpKTEtKSklJSEhKSktMS0lLSkpIVnBwcXNzdHR1eXp7e3x+f35+fn5+f39/f39/f3+Af4CAgICAf4GBgICAgIGBgIJtTFBRTk9QTk5PUFBPPjw8PT4/P0A+QEA/Pz9CRkQ+PDw9QD04Ojttdkg4Ozo9PUE8SmE8PD08ODo7Pz49PD07PEA9PTw8Pjs9PD0+QUBCQUBAP0JEQ0RFRkZGQ0VHSElJSEhJS0tMTUpKSUpNTUpLSktJSEhISEpJSktKSk5MSUlfcHBycnJ0dXZ6e319fH5+fn5+fn5/f35/f36AgIB/gICAgICAgYGAgICAgIGAgnZNTk5NTk5MTE5QT0w+QTw8PT8+QkM/PkFBQUJBQFlSPD09SUxGRnZ3TTc4ODo7Pj9XaUE7PDw6Ojs+Pz89PDg6Pjw9Pj89Oz4/QEJDQkJDQ0FCQkFCQkRCQkRCRENGSUdGRkhJSUtNSklKSktMSkpJSkVESUlGRkhISUpKTEpGRmdwb3FxdHZ1d3t8fH18fn59fX1+fn9/foB+fn+AgH+AgICAgICBgYCAgICAgICBek5JS0tMTExFSUxOTTw/PDw9PkBAQUE7QkNCQ0BDc3lJO11/g395fHdWPD0/PT0+Rmp1TTo9Pj89PT5BQ0A8OTtBPz4+QT07P0JAQkNCQENDQUNBPT0+QD0/QUFBQENFRUBAQ0JDR0dFRENGRUZGR0VEQEFHR0ZDRkRHSEpHQz5IbG9wcHF0dXZ5fHx8fHx+fn1+fn5+fn5+f36Af3+AgICAgICAgIGAf4CAf4CBgIF+UUhLTU1NS0pLTE9RQD8+PkFBQEBBR0FCRENFQUhyeWtigoSDg4OAfV0+QENAQD1Kc3xZOj1BRUFCQkZIQz08QEREQUA/Pj1AQT4+Pj88PkBER0VAPkBBP0BDRkVDQkNDQEJEREJERUFCPkFCQkFCQEA9QUJDRENDQUNFR0E/PVZwcHFwcnV1d3p8e3t7fX9+fX19fX1+fX5+fn9/foB/f4CAgICAgYCAgIB/gIGAgX5SSEtNTUxLS05OUlVEQkBDQ0FBQkBCQ0BAQUFARm90fYKCgYN+fYR1TEFDRUA/Pll8gF0/Q0VJSklJTU1LRUNGRkdFR0VFRUREQ0E/QD4+QkZKSkdFRUdGRkpOTktKSUdHSEtMSUdHQ0REREVEQUJCQ0BDREVEREVERUZDQkFEZW9wcXF0dnV4e3x6fHx+f319fX19fn59f4B/f39/f39+gIGBf4CBgICAgH+AgICAfVJJSUpKSEpKTE9SU0dGRUdIREdIREA+PDs+QEVFaHN9gXx/hH55hXFCREVEQ1d1hoeHflhHSEpNTE5PT0xIR0hHSElJSEhHR0hIRUNFRUVFRkhKSkZFR0lKTU9PTU1LSktKTU5LSUhHSEhIR0ZFRkZGREZIR0VFSEhGSEZIRlFubnBxcnZ2eXt7e3p9fX5/fX19fX1+fn1/f39/fn5/gH+BgYGAgICAgICAf4GBgIB8UEhHSElGR0lKTU5OSkxJSUpLTE5KRkNBQkNGSkdge4B/d3+EhYOEimxBQVZ0h4mHh4eIg1dITE1MTU5MSkdHR0dER0dHR0ZIRkhFQ0RERkVEREhIQ0NDRklKS0xMTExMTElKS0pKSUlJSEpISEdISUhHR0hGRkZISklJSUlIXW9vcXJzdnd6e3t6e319fn59fX19fX5+fYB/f39+fn+BgIGAgYCAgICAgIB/gYCAgHxNR0ZIRkVGR0dKS0pMTUxLTU5NT0tJSEhKS0tMTE5bfIKCg4OFhoaIg1ZshIeGhoaHiIiHfFBLTEtIR0ZGREVDQ0BBQ0NDQ0ZGRUJAPj5AQUFAQkQ/Pj9ERkhERUdJSklKSEhIR0lJSUpJSEZKSkpKSUpJSkpKRklMTEpKS0tmb3BzcnR2eHl7e3t8fH1+fn19fX19fn59f39/f35/f4CAgICAgYCAgIGAgICAgICAfU9GRkdGR0hHRUZHR01NTUtMS0lHQ0NDRElLS0xMSlWBg4SEgoKFhoaEgoaFhISGhoaHh4aKdUlJRkI/P0A/Pz88PDw+Ozo8QUFAPjw5OTg8PD07Pjs5Oz9BQkBBQ0NCQEFCRERCQ0ZISUhISExNTEdJSk1NTk1KSktLSkxNU2xwcXRzc3d5e3t7fH19fn9+fX19fX1+fn5/foB/fn9/gICBgIGBgICAgYCAgIB/f39+UUZFRkdJSUdEQ0VGTk1MSklIRT85Oj5ARUhISkpJZYWEhIR/gYKDgoODhIWFhoiIiIiIiYyOZkJCPTg4Ojo5ODc4ODk2NDc5Ozw6ODU2Nzc4OTc4NzY4ODs7Oz1AOzk5OT08Pjs7PUFDRUhKTUxMR0lIT1JRUFBOTE1NT1Fdb3BydHN1eHp7e3x8fn5+f359fX59fX5+f39/gH9/f4CAgICAgYCAgICAgICAgIB/f39RR0ZHSEpIRkVGR0hMTEpJSUdDQjU2OjxDQENHSUlqhoSEgX6Bg4ODgoOEhomKjIyLiomKi4yJVDo4NjU2NzY2NjQ1NzczNTY4Ojg3NjU2NTY3Njc3ODo2Nzc4OTs3NTc4OTc5ODc2OjxAR0ZJRklGRUZPU1JTU1JPUE9SVGVwcXN0dHd5e3x7fH1+fn5/fn19fX19f39/f3+Afn+AgICAgICBgICAgICAgICAgH9/flJISEhJS0lHSUpJSkpLREVIRUJANTc4OD06PUVDQmaFg4GAgoODg4ODhYmLiomJioqKiouJioqBRzY3NjQ2ODg3NDU3ODU2NzY5OTc2Njc2NTo5Ojs6Ozg5ODk4Nzc3OTo5ODg2ODY4OTtBPT4+QkE/QUtMT1FQUU9PT1JXa3FydHR1d3p7e3t9fX5/fn9+fX19fX5/f4B+fn9/f4CAgH9/gICAgICAgH+AgICAf39+VEhHSUlMTUtKS0tMSUg/QEFAPDo1Nzk4OTc7Qjo9cYSAgYOEhISEhIaJioqIh4iIiIqKi4qJiYx6Pjk4ODs8PT45Ojo8OTo7OTo7Ojk5Ozo5PT09Pjs7PD06Pjs5Ozs8Ozw8OTo8ODo6Ozo5OTk8Pzw9QUJESUpNS0lLTFdvcnN1c3V4e3t7fHt9f39+f359fX19fn9/f35/f39/f3+Bf4CAgICAgICAf4CAgH+Af35URkVGSUxOTkxKSk1CPzo7PDs4OTk4OTo6Ojs/Pkh+hIKChIWFhYaIiYiHhoaGiImIiYuMi4mKioxsPDs+QkNFRUFBQEI+QEJAQD49PT5APz4/QD9APT0/Qj9AQT9BPz1AQEA+P0E9Pjw7Ojs5OTs/PTs8PT1BQUNBQkNBWHBxdHR0dnp7e319e31/fn9/fn19fX5+f35+fn9+f4B/f4CAgIB/gIGAf39/gICAf39/flJFQ0FHSk5PTElHSzo4Ojs5Ojo8PTo7Oz09P0BCUoKCgoSFhIWEhomJiIiGhoaHiImKi4uKioqLiotePkRHSUtKSUZHR0RGSEdFQkBAQ0VDQkBCQ0I/QERIRUNFQ0VFQUZFRkRFRkRAQj88QD49P0A+Pz4/Pj8+Pjo7PTxgcXJ0dHV3enp7fX19fn5+f39+fX19fX5/fn5+fn5/gH9/gICAgICAgICAf4CAgIB/f4B+UERAPUNIT01HRkJEOTc6Pjo8Oz4/Pz89QUBDREZXhIKDhIWFhoaIiYmIh4aGhoeJiYqLjI2MjIuKiohWSE1MTUtOSklLSUlKSklFQ0RGR0ZEQ0VGREJISUtIR0dGSEdFS0lLSUpLSkNGQ0NEQkFBQ0JEQ0NERENBPTs9QGhwc3R0d3d5eHt8fH19fn5/f359fX1+fn9+fn59fn+Af3+AgH9/gICAgICAgICAgH+AgH9PQT49P0RMS0BCQkE5ODw+Ozw7PkA/QT5CQkdHSVmEgoOFhYaHiImJiIiHhoaGiIiIiYqMjYyMi4uKjH9QTlBOTE5LSkxKSUlISkZERkhISUVFSEZGRUxMTUlKR0dISUpOTU5MTE5LSEdHR0VFQ0ZGRkZERUhIRkNBP0BMbHB0dXZ4eXl5fHx8fX1+fn9+fn19fX1/f35+fn5+f39/f39/f3+AgICAgIB/gICAgICAf1FBPz4/RUdHPTxAQDg3PDs8PTo+QD4/QENGSUlQX4GDhYSFhoaHiIiIiIiIh4eIiIiJioyNjIyMjIuKjXJOUk9OTExMTEpIR0VJSURKSEdLSkhKR0dHS0xOTExISElKTVBOUE5NT0tJR0lKSElESUhIRkZHR0hGQ0JBQ1VucHV3d3l7eHl6enx8fX5+f39+fn1+fX5+fn5/f36Af4B/f3+Af4CAgICAgICAgICAf39/VERBQUJHSEI/OD9AODo8OD0+Oz1BPj9BREhKTFVxg4SEhISFhoeIiIiIiIeGiIiIiImJjIyLjIyLi4uLi19SUlBNTk1LSkdFQkdKR0xKRktOS0tKSkxNTE9QTkhJS0xPUVBQUU9PSklKSkxKTEZHSEdGR0lGRUVCQUJCXG9yd3h5enp5eXp6e3t+fn5/fn59fX19fn9+fn9+f4CAgIB/f39/gICAgICAgICAgH9/f39VRUNFRUdHRUQ7P0E7PTw5QD4+QEJHR0FHS0xQVnmFg4ODhISGiIiIiIiIh4eIiIiIiIqLi4uMjIyMi4uNfFhWUlJUU09MS0pERUZLT05PV1VRUE9SU1NNU1RPTVNMUFNVVlJTUVBMSk1NTUtOR0dKRkZJSkRERUVCRENjcHV5eXp6ent6e3p6fH59fX9+fX19fXx9fn5/gH9/gICAf39/f3+BgYCAf39/gIB/f39/f1VGRkdHR0dIRj5AQj0/PT1CP0JCR1ZORk5QUFRYe4aDhYWEhIeIiIiIiIiIiIiIiIiJiouKioyMjIyOi4uLaFdVa2FFUlFRUEk7O1JUUmB1XVVWVFZZWVJYWFJaZlBVV1pdUlRXUU9OUlBQUFFLS0tISEpIRUZJSUlISWlydnl4eXl6e3t8ent8fXx9gH59fX19fX1+f39/f3+AgIB/f39/f4CAgIB/f3+AgH9/f35+U0hKSUhHRkZFPz9BQUVBQ0dFREVMWFJNVFVWWFt8hoWHhoWGh4iIiIiIiIiIiIiIiIiIlJyMioqMfWGKi4uHbFtkVTpYWFhTUT9AVlVZXGRgVllicl1dV11aVkVRWVpbWV9UWWdSVlZYVFRWVE9PTUpMSklJTE1LT01Tb3N2eHl4d3p5ent6enx9e35/fn1+fX19fn1/f39+f4CAgH9/f3+AgICAgH9/gH+Af39+fn5WSkpJSEdFRERCQT9ITUlNUEtJS1BUU1NYWlpcXHiFhIWFhYWGh4eHiIiIiIiIiIiIiImcnaCPiY5nO36LiYqLem5wWFpcW1JTUlZWVFtadYNZVX2QYFxYXV5XSVZdXVtbX1lIWVhZW11YWFlXUlFOUFFNTU9TUVFVUmFzc3Z3d3Z4eHh6e3p8fX19f39+fX59fX1+fn9/gH9/gIB/f3+Af3+AgICAf39/gIB/gHh5fVlOS0lJSEZCREBBOlBRUVdYUFBPUVNUVFhYWVpbboGCg4WEhYaHh4eHh4iIiIiIiIiIiJaanJeIioFuhomIh4OKfmZZWVxZVFVUV1JRV1ZjloBRZXJYWldfaFBgZltbWFxnYUdPWmhnXFtcXV1XUk9TUFBRVlZWVllabnJ0d3Z2dXh4eHt7fH19fX5/fn59fn18fn9/f3+Af39/gH+AgH9/gICBgYB/gH1yfX9/b3R8XVNQT01LSkVDP0A7UFBaWltSU1FPUlJSVVNWVFdfdXiAhYSEhYaGhoaHh4eHiIiIh4eIh4ORjomJiIaFiIiGfYB7XFBVWFRSVFJRUUxPTUtmeVtdVFlVVl1aTFRaVVNUXlpYV1dXemtYW1tcXlRRUVBJTk9XVlhbWmRwcnZ2dHR2eHl5e3t8fH19fn99fX1+fX1+f39/gIB/f3+Afn56eHd2c3V7f3+AgHRrfn5rcnleW1ZVVFJPS0ZDREFNXoNsVlJTTk9RT1FVUlNSU1VjZHaAgoKDhISEhIWFhISDhoaGhoeIhn6JiYiHhoOHh4d5bXFWSUtNTktNS0hKREZIRUM+VGRVf1JRUU5LUlRRTU9ZUk1OUVNVVU1RU1JQT01MSENJSFJUVVpcbHF1dnVzc3d6ent7e317fX19fn19fX59fn9/f4B/f399fX5+f39/f4B+e3Zzd31+fmR1fWlxdF9kXV5bWVZQTElMSWFsknRQUVNOUVJRUltSU1JRUlZUYnN7fH+AgYKBgX99e3uAf4OChYaHgoaGhoGEgYaFhnVfXUtDP0NDQ0NCP0RQQkNAQz1DSUdWQEhOTEddaVBIRk9GREVGSUdIQ0RIR0hLR0RCQURATlFNUmRydHZ1c3R1enx7e3t7fHx9fHt+fX19fn5/f3+AgIB/f3x8fX+Af39/f4CBgH12dHt/bWh8Z25xZmllZGJcWFNRUFVSc1dlW09PTkxRU1FVWVNVUVFUUk9WYGtscnZ7e3h5dHJuc3RzeXh+foOAg4OCgIKAgoGCa01HP0A6Oz5AQD8/PmpRS2FFRkhJRUI/R0xOR01RVUlCRT8/PD08PT0/PT9BQ0NAPzw9Qj5KTUdVbnR0dXN0dnh6fHp9e3x9fX19fH59fXx+fn9/f4B/f39/enl3eHd2dnh7foB+fXt4dnx1YXhnbHBqbGppZmBbUVJaXFleSkpQUU5LTFFSUVRVVVdRUVdWUFhbYl1hZ21tbG9rZ2BucmptbHF1e3p9e3h6fHx4d3hlQ0BAQj06QkNBQURCXF1Pe05PTk5LTE1PT1FMS0xXTUhHQEI8OTc3NTk5PTs7Ozg5ODk/PEJIP1xzdHV2dXZ4enx8fH18fH19fX58fn19fX9/f39/fn9/f314dXZ6e3p3eXh1d3t8eXh1eXdjcWhpcG1ubW1oZl5PUF5cWklIUFJRT01QUU5RUlRWWFNSWVROWVpbV1ldXl5fZWBdXnF2a15gZ2t3b29sam9ubmxmYllIRkZIQkFHSUVFRkRNUlBhV1JXUVBTU1JVW09PUVdQTUlERj46OTY1ODc5Nzk6MzY1Nzk1PEI9ZXNzdnd3eXp7fX18fHt8fX1+fnt+fn19f39/fn5+fn9/e3d1eX18enh8fHx8dHd2d3Z1d2tuaWhxbm9vb2prYFVXXlpYTUxUVFNQUVVPTFJTVFdYVFRYUUxXWVpWWFhWWFldV1dYaHNrXVZhc2thYV9eZGFfXllUUU5OTkxJSEpLSUlGQ1FQU1tXVFROUVNZU1xlVU9TVFFOS0lIQz9BOTk4ODk3ODg1NzU3ODU5OUdtcnR4eHl7e31+fX18e318fn5+en1+fH1/f359fn59f358dHR1e3hycW9vbnR4cXJzeHZ1cWZkZ3JucHBxbm1kXV9fWVdPUFhWVlNUVk9PVFZYWFlTVVRMS1RWVVVVV1BUVVdUVVJdbl5STllfW1ZZO0RWWFRbZkpMT1JST01NTk5OTEpGUVBVWVNUT0pOT1VTVFxWUlVTUk9NTElISEY/Pzw6Nzg3NjU5OTY3Njc1V3BwdHd5ent8fX19fnx9fXx9fX15fX18fn5+fXx8fX1+fXxydnF4eHJ2dXFxbnBwb3B1dnRuamRkanBwcXJwb2ZlZGNcXVJUWlZXVVRXVFJYWFlZWVJVT0lHT1BPT01SSk9QT1BOTk9UTE1JUE9TVFUyPVhNSUBRPWNhUVNRUE5QUVBOTk1RTlRSUFJNSUxKT1JQUlJTVFFST0xMS0xMSENCQT06Ojg3NjtCNTU2Njpkb3J1eHh7fHx9fnx9fH19fX18e3h8ent9fX58e3l9fH18e3B1b3d1cHV0b3N2cHFxcHR1dmNqZ2VXaHRycnFuaWlocFZWVFVYVVdVUldWVVpZWFdVUVNGRUFGR0dIRkpESEpJR0VITEhLSUZMTVBNRy9FX1I+Mz8+am9hUlJRQEdVUVBRUFFOUU9QT0xKTExPUE5OUFFRTlBPSkxNTUtHRUVEQjs9PDw5PUc2Njc3RG1wdHZ6e3t8fX18enx8fX5+fXt5dnh3eXl8fXp6dn17fHp6b3Fud3JwdnFtcHNwb3Bzc3N0ZmdgaFpXa3JzcmxtbWtuYWVQU1RSU1RPV1ZWWVlWUVFRT0A9Oz0/QUJBQ0BCRURBQEdIR0hFRkhKTUxFR0NPUkM4RU5TXWdTUVNBR1VQT1FRUE1NTk1LTEtMTk9PUU1PT01ITExJS0tMS0dGRkVEPEFBPjtARTs8ODlTcHJ1eXt6e318fHt5fHp6fn58e3V0dXJ2dnp6eHpyfHt8eXltcW94cnF1bm5xcm9vb3Rzc3J1dGtnZ15lam1wa29xbWltY0xPT01RU0xUVVRYV1VNTEtJPDk4Nzs/QD48PUFAQj0+RUhHQ0ZGSUdKSUBGQUFARkhFSk9IUVJhXFFQUk5TTk9QTExPTUtNTE1PTltXS01RT0dJSENISkxMSkZGRkU/QkM+PEJHP0I/QWRwdHd7enp7fHt6end7d3l+fnt7cXN0cHJzd3R4eHN6e3l2d2xxb3ZxdHRsb3Fybm5vc3ZydHNycmtsZW5zaG1ubWxtbGprSUxISE9RSlFTUVRTT0tIREQ9OTc3OT9CPjs/QUBAPkFESUVDR0dJRklFQkI/Pj1DQkFHSUVNT2JlUU1OTldLS01LTE1NTUxLTk5TZE1KTFJJSUlFQUhKTE1OSkdJRkJBQkA/RUZFSERLbm92eXl5e3t6fHp3c3h1eHx8eXpucXJtbm9ycnZyc3h8eHZ2bXBtc3B1dGxwcHJvb29ydnVyVlZucWdseYRqbXFybm5qaG9ISkNHTE1JTVBNUE9ISkQ/QT05OTk6P0I/PEBCQUFERUdLRkNISUdHSENDP0I/P0BBPkRFRExNUlRMSklNVEdJSUpMSktMSUpMTU9QUVBLR0NLR0NCSkpMTU9OSUpJR0NDQ0RJSk1MSVlybXd5eHp7e3l8dnJwdXJ0eHl2eGpxbmpsbG50dG10dXtzdHhyb25xb3ZzbnBvcnBvcHN0eWpOYGdzanR8eWdvc3FpcWhkcUhLREdISEdKS0lKS0RHQj0+PTo6OjtBQj89QkJDQ0hGSUtKRElJRkdHQ0M7QUBCPkBAQkVDSU1QSEhLR0hLREhJS01ISkxISUpLSk1cUkhIRE5GQURLSk1NUE1LTUpLRkdHSk1OUU5MYm1pdnZ3e3l7en1xbWxza3B0dHR1aHBtamlra3RwbnR0eXByeXRvcnFvd3NvcXB0cnBydXR5a05WbXVscXt2aW5vaWt0Z2RvRktDRkVHRUZGR0VHQkNAPTw9OTo6OkBDQD5CQ0RFSUVJSkxGSUlHRkZEQjtCQ0M+QENDQ0VHTE5IS05IREhFSUxOTUdJTEdGR0lJTE5LSUhFTklCRk1MTk1PTU5OTUtJSElPUlFSTlJmZmZxb3N4dXt6fGxoam5la3Fsc3FmbWxoaWtsdG1wdXR3cW94dG90c3J2c3BxcnRzcnR1dXZ2WFZ1dWtvdHJrb3ZsaG1lX3BHSkRGRkVDQ0NFQERCPkA/Ojs7PTo9PkNBPkFDRUZKRklITEhHR0dGRUNAPUVFQj5CRENDRUdISUdNUEpGRkdLTk9LRkhKRkVERUlKSEtJRkhQS0NJTUxQTU9OT09OSkpITVJVVVJPV2RgYW1ncHJvcnl6Z2VoaGRpbGZxbGZsbWdpa2xzbHB2dXRwbnZyb3Nyc3V0cXNzdXRzdXZ2dnl2dXR3bGp1dW1ydnFsbmxlckxHRUVIQ0JBQkQ9QkE+QT05Oj0/Oj0+QEI+QEJER0pGSUZJSEZGR0VDQkFBRkZDQkNCREVFR0dIRkxRTElPSkpMTElHSEVGRkRDSUlIS0pHS1JNQk5PTVFPT09NTk9LS0tQVVdWVVRYX15caWFtaW5ocnNiZWZmZGloZm5pZm1taGtrbXJpcXZ1c3Ftdm5vcXJzd3Nyc3R1dnZ2dnd2d3Z2dHd1anN1bnV0c3FyamtzTUdIRkhCQkBERDxBQEBDPDg5PT45Pzw/QkBAQERGSEVIRkZIR0ZGRENFQ0RJRUNGRUJFR0VGR0dFSk1LSFFNSktISElFRkhJRkNJSklLTUtPU05EUVJQUVJOUE1OUE1MTVNXVlhYVlhdWl1kYGhiamlna19lZWZjZ2dna2dna21rbWxwcmh0dHVyc252b3FwcnR4cXNzdXZ1gpF5dnZ0eHV1d3htb3VvcnN1cXFpb3lNSEdISEJCQkZEPD9CQkQ8Nzo+Pjo+OkBCPj8/Q0VGREZERUhGREVEREVGR0pFRUpHQ0dIRkhHRUNGSkpHTUpMS0hKTEZJSUtIRUtLTE1OT1JUT0hTVVNQU09RTU5RTk1QV1pWWllWWl1aWGFgYGBfaGVjYGRmaGdqaWhpZmhubGxubXFwaXV1eHJycHVwcHBydXZwdXN1dnV7fn14dnR3dnZ2eHBsdXBtc3RucHJyeE5JSEdJQ0FDSEU8QEVCRD05Oj4+PTw8QUI8Pz5BQkZDRUNDSEVDRUVGR0dHSUZHS0hDSUhHSUdGREhLSUdLSE1LSktMSExLTUtKTkxPTk9SVVZPS1VXU1FTUVJMT1FQT1RZWllcWllcX19eYGNeXGFja2JgZGdocoVoZ2lmam1ucG9uc3JqdHV4cnNzdHJucHF2cnF1cnV1c355jn11dXZ2dnZ4cmh1cWtydGxxdm90TUlLSEpGQkVHRTxAR0NEQDo8PkA/Pj9CQTxAPkFBRkNFRURJRUZFR0VISEZISElLSUVKSEhLSEZGTElISEpHTExMTExJTUtNTU1PTFBQUVVWV09LVlZVU1NRUUxPU1JQVltbXV5bXF5fX2FgYWRdZGBlZmBlaGpjc3NmamdnbHBycW9zc25zd3dxdXZ0c21vcnVvcnNwdXJ2cnSBdnV1dXd2dXd0Z3Rya3Fya3J2bnZKS0xKTEdCRURFPEBGRERDOz8/QUBAQENBP0I/QUNIQ0ZFRklGSUZGRElIR0lISk1ISEpKSUxKRkpLSElKSkdLS01NSkpNTE5OTlBMT1BSVFhWTU5UVlRSUlFQTE5UU1JXW15eX11dYF9gYWFfYWNlYmRoYmRpamd2i2xqaWdtb3NxcHFwcHJ5dnJ1dXRzbW1zc21xcm90dXRycHN3dHV1d3Z1dXRlcXNrcHFqcnZvd0tNTEtNR0RDQUQ8P0VFRUM9QUFDQkJDREFDREFBRUdDSEdISEdKR0RHSUdISkZJTEhJSk1LTUxHS0lIS0tOUUtSUU1TTUtOTk9QUE9UT1dYWFtOU1FXXFpSV1BOVFVUVFhaX2JiX2RhXmBiXmBlYWFjaW5nYmloaG54dmxoaW1vc3JwcXJycnZ0c3Vzc3Nua3NxbXByb3R2cnFxdXZ1c3d5d3V0dWNtdGtvcGpxdG93TE5MTExHRUFARD4+REVGQ0BDQUVEREZCQ0VHQ0NJRkNJSkpJSUtHREtKR0hKSUlLSEpKTkxOTElMSEpMS1pmSmRcS2xTSE9OX25Va3NbcXBid2NTUGJ2dWh1Y2F2YFhucWJkdmluemZbbHRgbGtUX3d2aWpnaWZnbG1qbW9qbW5zcnBycnFyc3Jzc3J0cm5sdG9ucHFxdXVxcXN0dnZ1dXl3dXR0YGt0a3Bwa3FycXlMTkpKSkZDP0BCPz1ERUZEQ0RCRUVERkJGRkdERUtFRUpNTUtMTEdHTUlHSktIS0tJS0tOTE1NTExJTE1MW3NiZHBebG1VTU5mc11nZXFsbnRncGlfYVlubmJwcGJrampnb3F0ZXRub1xvdWdwTUpyeXZrYmBrZWVteGxrdm1ucHNycHJxcHFycXJycnRybW1zbm5vcHJ1dHFzc3R1dXV0d3h2dXRibXVrcHBscnJxektMSUhHRURAQkJAPkNGR0JGQ0ZFRkVEQ0hIR0RFS0hHTE1OTE1NRkpOSEpLSklMSkpKS0xNTk5NTUpNTU1bcm9vbnBwbGtNUFFsV05pYnRycGFtbnVcWWxRXG1tWnFta29teHh0c2lwXV9ya3FqVXV5eHBjXmtmYmdwcGpqb3BwcnNwcXBxcXJycXFycnRsbXJtbm5vcnV0cXRydHV1dHV1enZ1dGVudWtwb2xzcnJ5SUtHSEVFRUJCQj5AQEZHQkdESUVFRUJGSUhIRUdLSkdNTU5MTU5HTE1JTEtJSk1JSklKS09QT05NS05NTFxoZHVdbHFXbE5QUW1VWmtea2x2YWxkc1NlY05tWWxcdHBraWx4and1aHBdXnJraFdiY3d8b2NgZ2dhZGl0eWtubnFzc3BxcHFwcnFwcHBydWttcW1tbW9xc3Rxc3J0dnZzd3Z6dnV0aG91bHNvbXNydHZITUdJREVFQ0FCPUJBQkZESEdMSEVDQ0hLSEhGSkxMRk5MTFNSTEdMTEhOSkhITkhKSklITk9NTkxKTk1KWnNwcG9xcW1sT1FSbllxa2dvb3Fxb210XW5YYXRfbm9wb3Fyb251c3R0altddGN3eHJqbnpoYWFjZmJiam10dXBzdXZzcXBwcW9ydHt/fn13bGtxbmxtbnByc3F0dHN1dXR4eHl4dHVrb3VtdG9udHN2c0hLSElCRUVFQUA+RERCR0NISU1JRkNGSkxJR0ZKTUxGT0pLV1JLR0tKSk5JSEpMSUtKSUhKTU1NTUlLS0tTa2JbaV5faWNyclpfWWpvX2VlVWtfY1thYVFgbGhdalxuaWlkW3BmZHBdWlxrW21xY3BzbGRnY2RnYGBrbXBwb3R5cnVxb3BxbnmFiIeHhoWAdnNua21tb25xcnR0cnR1dXZ5eHhzdW5xdW53cXJ2dHdyR0dGSURFREZBQEJGRURHQkhKTEhGREdLTElFRkpPTElQSUxbUUpFSEhLTUlISkpKS0lISUdLS0tMR0hLS0xMTExKS01OVFtcVFBUTFBPTk9PVlFPT1FOT1FKSU5QUWRxaVRZV1xbXFVZWl1YXVxcY2ZhYWViY2ZfX2ZrbWhtdHlydHJvcHB0hoeGhoaFhYaHg3pwbW1sa3FzdHRydHZ0dXl4eHV2cXJ1b3ZydHN1dXNHQ0VHRkZBRUNAQ0hERkdDSUtMSEZER0tMSERHSVBLTE9LTFdMSUVFSElKSElLSExKSEZHR0lHSElFRkxJSktOTElQXFdeUFxbYF5NWFlTXFxiXk1ZWk1YYVJKWWFaUl9kXGFYW2RkVlZYXFlaWFxWWVxdYl5kYGFfZWhrZ210dHFxdHBxcoGGhoaFhoWFhYaGhoR9cmtpb3Jzc3N0d3l5eHl4d3h0cXhyeHNxcnVydE9CQ0VMTUJEREJFSUVHR0ZLSktIRUVKSktGRUhIUEpNTUpNU0hHRUFIRkpJS0tJTEpIRkVJRkRGR0VFSkhDSk1LTFVfWWBYYGFbYFRYWVReXlpfUllcUF5cWU5eXF5TWl5jXlpdYGNgWV9iW2BeW1RYV1leXWNiY2FjZmhla3Jwb3Bwbm93hoaFhYaCe4CFhYaGhYaFf3VxcHJyc3Z5eXp5eXh4eHdyeXZ4cnF4dnV2YVNKSk1JREJCQ0dIRUhHSEtJSUlERktLS0VGSUpOS05MSExOR0hFPkdHTElLS0pMS0lHRUlEQ0REQkZKREBKTEpPW2NZX15hX1JUUldfYFxdWV5RWVxNVl9XS1FZW1BaX2FhXV5jYWBiYmJjY2VaUVlWVVxZXWNgX19jZGJob21ubGxsbHWFf4SDeXV8hIWFhYaGhYWGhoN9d3JydHd5eXl5f359eXV5dnZybnp3dnhYUUtGQ0dFQkVISUZHSEhGRkpHSEZIS0lMRERLSk1NTExISkpISkY/R0ZOSktLTUtLS0lHR0NEQERBSElCP0lKSFBdYVpbZF1fVFFSWF1cXFxfWktXXExSXFlJTV5RT1xfYWNjY2NiXGRjYmRjZlhRVVRSW1daYF9eXmFhX2Rsa21qamxudn51gXp8hIWFhYWFhYaGhYaFhoaGgnpyc3V1e4WHh4eGhYSBfnhwend2eFxSTUNASUZDRktKRkZGSEdGSUZGRklMSk5GREtKTE5KTElLSkhJRkJISFFNS0tPTUtLSUhHRUQ/RUNISEFBR0dFVF1ZXlhfWV9bXVVYWFBdXVFLSlZeWF5bXVVZYFJRX19iYmBgYmJgY2JhZGRiWE9RUVFaUltdXV1dXl9fZGhnbGpubnB7e3x+e4CCg4SFhYWFhYWEhIWDhISHh4FzcneFh4eHh4eHh4eHh4WDgHx4XFNLQ0FHRkRHTVJIQ1FKRkhISEVGS0pNUEVGSUpLTkxMSUxMSUlHREhLUU9NTVBMTUtLSElDREFFREhHQkFHRURXVUVcVV5TVl9YTlRVTlpaTUpLVGBhW19YXl5hXU9ZYlxgYF9iY2JdYWJXX19UUE5PT1dRXVtbXFxeYGJmZmVsZm9vd3x7gHt9f4CEhISEhIWFhYODhYKDgoWFhnpvgYaGhoeHiIeGhoaFhYSFg35JTkZERUZHRElSYlBDVl5JR0dIREZNSlBQRUlJS0tOTExMTUtKSkdFSk1RUU5PUE1OTE5IS0FEQUNERkRDQkVGQk1IQktMUE9OTEZNRkdJSkhHTEtNT1BJTE9QT1NPTFFTUlVaWVdZWFhkV09TVFBQTk1PVFNbWFhaXVxgYWRlY2dja2xwc3J6eX97en+EhISEhISEhIKEgH57gYOBfXuFhIaGh4eHhYWFhISEgoGAfUtJRUVHRkdES01dTEdHWExHSEpIR01MUVFJTEtMS05NVU5PS0tMR0dLUFNTTlBPTk9OT0hLRmBFRF9MRGZkRU1bSV5bcm1PTVVtWUxDUGBVa1dnSl1YVV5ETVFVTExTVlFSVFhXVFhVVFxVUGZaaGhkWFJqU1dWVFtcW2BgYWFhYmBmaGZua2hyenx9foGEhISEg4ODgX18enJ7gXp7f4KAg4SEhYWBhIWBg4N/fnp7TEhFR0ZIRUVLT1NJSkZgU0hKT0pJT01SUUtNTExPUlVST09KTE5HSE1RW1lPUFBOT1BPSUpRf1FJfFlZcXNYUG1IcW5vYVZQcXFzUEJrc21xc3BTb19bblhdVlxYVWtoVV1WY1pgWVtgVlZYf2p0dXVfX3ZfWGFbXGZbX2FhYWFeYGJnbXBsYHB3dHiBgYKDg4J/fX6Adnh6bHZ+dHh+gHx+gIGChHyAg3p/gX9+d3dOSUVITU5CRExMRklLRVFWTEtOSUtSWFdRTk9PTVFUTk9RUEtLTkdNUFNbWlRRUk9QUFBKSFp4XVR4ZWhaUlRRdmd0bHBibmZqUXJPTXdtanJwc3JxcnBvb4BdZXp1eHFxenF+c31rdX1iUmh8ZXNzb3Nye3xvfXlvf3JfYGBiYVpgYGdrbmtibGZnbXd+gYCDfnt4d4B0dnppcn5udHx+d3h7foCDeHyAdXx/fHxzc05LRmBdR0FFTU1ISkpHSlBPTU1KTlZeWVVMUVNOWFpNU1NSTktPSVFSVFlXV1FUUFBQUUtIZ3hsY3hybVtLTVV5cHVtdWJudlBkZUpmdnFtd2+AamZ4eGlXclFoem1panp6fWx4en9vaG9ZdnZqdXVwgWByZ3xpbHh8b15fX2JhW11iZGdpaWRnYmNkbGxwcHN0c3NzeXFyeGJsdWdyeXtzc3V5foFzdXpufH15d3JuTktTdE5DQ0ZQUEhKS0pLUE9PT01QWmBaWEtUV1BhXlJWUVlSTE9JU1RVWFdXUFVQT05SSktyb3V1cXVxZGliV25McXBeRmh5V3ZUTGl5fXhgeXtzbmFdbW9jUmhxdW5teXB3bHZ0dHJsbl10fnprbXl8a3RsfGtwdnV4Xl9fYl5dX2RkaWdoZmVeYWJpaWlqa25va3FubWpwYWNmZG93eG9tcHN5fm5xcGp7enRyb21MTFtWSEdFR1JQSUxNSktQUVBQUFFXXFhVTVVZVWZYUlJZXlNMTklUVFZXWVdPU05OTlFIUm1IaXdLYGR2dlZYbE9ubHtzYWpnf3ZVTFdraH1sbWx4X1twenteYHpzY3JveHFoZHxpcnxeVExsYHZ1a2l1fHttfnhrfHBdXl9iW19iZGRnZWVlYlpjY2lra3JzcndnbGloZGdgYWthZ3NybGdtbXJ8a21oa3t0bW1rbU9ISktISUhIUlBMTk9MS1JSUk9TUldSVlRQV1tWVlRUVGFgUE5NS1RTU1FVVk5OTE1PUEpIUU5QVUxLS1NUU1JUUFZVUVFOUVFYWVJOUFVUWFhYW1pVUlNXW1dYV1pPU1VXWFhSXVlXXlZUUFlSVldXV1heW2dyXltbWVxdX2NaX2NjZGZkY2NiWmNjZmZlbW5tdWVlZ2NhZl9dZ2BkbGhmZ2tocHpoZ2drdWpoZ2lsUUlLTExNS0pTUU1RUE9MVlVUUFRVWFVZVVFaXVZVVFdVWVhQT0xNVlRQTlVTTk9NTFFQS0pSUUtRTUtLT1JVUlFRU1NJSExOT1FSUVFRVFZSWFdcV1NTUFFVVVZTWlFPU1JYVlRZVlRZVVRSVVRUVVdYV11aXmFdXFpaXFxgY1tdYmNkZmRlZGFZYGFjYWJoaGltY2FkXl9jXVpkXGJtYV5mZWZtc2RpaGtrZWRjZmhQSktMT09MTVNQTlNRUU1YV1VUVVdXV1pVU1xgVldWWVVYU1FQS09XU1BOVVBOUU5LU1BMT1VTTlJOTU5RVFBUUVNUVU5LTU9RVFRSUlFWV1RZWltZU1VSVFdXV1lbVE9UVVhVVVpVV1lVUlJYVlVXW1laYF1VWF5cXl1cXWFhXltiYmNnZmVkYlhfYWJeYGhlZmVhXl9dXV5aWl9aX2dgXl1dYmhrYWdmaGZkYGJjYVBLTUxQUUxPVE9PU1FPUVtaWFdYWlpYWVZcamRWWFlaV1ZTVE9KTlZUUE9UUFBQTk1RUVBSWFRRUU9NT1NWTldSVFVVT05NUVNVVVRUUlRXVlpdXFpWV1FSV1hWW1tXUVRWVlZWWVRYWFVSUlhWVlpdWV1fXlZeXV5gXFxgX19fWmJiZGhnZGRiWWJgYl5eZmNjYGJdXFxcXFlaW1hbYVteXVxfYl9fYmRlYmRfX2BcUE1OTlJRTVJST1NUUVBVXFpaV1tbXFlaW2RxbWhkXltZVlVXUUxNVlNNTlJPUVJPTFBTUlVaVVNQUExQV1dSV1NTU1hNT1BSVFhWVVVTVVlYW15dW1tWUk9VVlZbW1dSVFdWV1hWVFhbVFNSWldXXF5aXl9gVWFcYWFeYGJfXWBdY2BjZ2hkZmBaY2BhX19lZF9gY1taXFtcWVpYWVdcWVxbYF5fW15eYWBeYlxZYFpRTk9OVlFQVFJPVVRTUFdcXVxYXlxfV1xeanF3eYBiXFtWVlhRTU9WU05RUVBSVFJLUVRUWVpXVU9STlNYV1RTVVJSWk9QU1NWW1ZWV1RWWlhdXltbXlZTTlRVVlxcVlJUVlZYWVNUWVxVU1NdWFpdXlxgYGBWYltjYl5hY19cYmFiX2NmaWRmXltkYGFgYWNkX2JfWVpeW1xbWVhZV1daWlphXF1bXVxcWl1gV1tbWlBPT09ZUFVVUlFXUlRQW11eXltgXGBVXF1panJ9c2xnXFVYV1BOUlpTUlFUUlRVVEtRV1ZbWlpTT1NSVlZWVE9XUlNaUlRUVFhdV1hYU1hcWF5dWVpdVFVOVldXXltYUlVVWVlZVVdZXFZUV15ZXV1gXWJiXllfW2ViX2RkXl5jY2FeZWZpZGZeXmRhYGFiYmRgYl5YWl9bXFtYWFhYV1taXGBcW1tcW1haW15WXlldUE9PUlpQWlRVVlZUVFReXmBfXmJcYFVdXmJreXRsfWxaVVlVUVBTXFRVVFVUVllXTFJaV11bXVJPVVNYV1ZUUFhSU1dTVlVVW11YW1lVWl5YX15ZXFlSV1JZWFlfWlpUVVZaWVpXWFpcVlVaXlxeYGFfZGNcXl1dZWFhZmReXmRjYFxnZGhlZGJfZGFgYWBiYl9gXldYXlpcXFpZWVdWXVpdXlpZW1xbV1lcXVZYV11TT1BXWVFdVVZZV1dVWF9fYWFgY11gVF1fYmVldYF6aFhZWVNWU1ZcWFdXVlZXXVhPVV1aXl1dVFJXU1dWVVNUWFJTVlRYWFhdXlhdW1ZdX1hfX1hdVlFZVFlaWmFZXFZXWFtaW1lZWltYVl1fYF5jYmJlZFxiXGBmYWRmZF9gZGJiW2ZjaGVjZmFmX2BhYWFhYF9eVlVdWVtcW1lbWVldW1tbWFhZW1laWl1fXVRZXVVOVFpWU1xUVldZVlZcYGFiY2FjX19WW2BkYV96dW9oWVxaVVhUV1taWVxZWFlgV1BWXlxgYVxUVFhQVVdWVFZXUlNVV1paXF9eWl9cVl9fWV5eWV5WU1lXWVpdYlpeVldbXFtcW1taW1lZX19gYGRiY2RlYmRaYmZjZ2ZlXmFiYGNeYmNpZGNnX2deYmJjYWFgXl9YVFtaWltbWFtYWFxbWltXV1lYV1xbXGBdVl1dU1BWWlZWWlVYVVhXWF1fYmFkYWRgXllZYWRiYGxmaF5cXVtWV1hZXFxcX1tZW2JWVFheXWFjXFJWWVBXVldXV1ZUVlRYXFxeYGBdYFxXYV5bXlxbXlhWWFhbW19gXF9YWV1cXV5eXFtdWFtgYV5gZGNkZWVmYlljZWVoZ2ReY2FgZWNdZWlkZWlfZl5jYmNhYWBfX1tYWVtZWlpYWVhXW1taW1dYWlRZXVxaYFxVXmJOU1dZVldaWFtcWFdZXmBiYWVhZGFdXllhY2JfYWBgXlxcXFdXW1tdXV9fXFpdY1haWF1gY2RfUlhZUFdXWFlZV1ZXVl1dXmBhYV9iXllhXV1eWV1eWVhWV1tcYF5dX1paXl1eXmFcW1taXGBiXmJkY2VmZWZiWmRmZmlnY19jX2FmZVppaWNmaWNlXmJiY2FgYF9dXVpXW1lZWFhaWFdaW1pZV1hWVVtdXV1gYGJieExYV1xZV1xbXF1aV1xdX2BiZGJiYV1gWGJjYmFjYWJdW1xbWFdbXF9dYF9dW2BkXFxYWmJlY2FSXFpPWFhaW1taV1pZYF1gYmJgYWNfXGJdX11bXl5ZWVVYXV5fYF9gXFteXmBiY1xcWFxeYGJiY2VkZmRlZmRcZWZnaWZjYWJcZGdgXGlpYmhpZmVgYmFjYV9gX11dW1lcWVhXWFlYV1xbWldXWE9YWl1hY2Zmcmt/SllXXVpaX1xbXlxYXVteX2FjYmFhXWJbYmRiYGJiYlxbW1pXWGlxYFxgX11cYWNfXllZY2VkYVNfWlJZWFxdXVtaW1tjYGJiY2BiZGFgY15gXF1eX1pYVltfXl1hYWBeW2BhYmViX11UXWBgY2RkZmVnZWZmZV5lZmhoZ2RkYFtlZ15haGhiaGhmY2BiYGNiX19fXV1cWltZWFhYVlpWXFpaVlZVTVhXXGdpa2h1eIF2dnZ2dnZ2dnZ2dnd3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d4eHh4eXl5enp6enp6e3p6ent7e3t7e3t7e3t7e3t7e3x7e3t7e3t7e3t7fHx8fHx8fHx8fHx8fHt7e3t8fHx8fHx8fHx8e3t7fHx8fHx7e3t7e3t7fYmIhoqHhYKBgoOCg4OCgoKCgoKCgoKCgoGAgYCBgICAgYCBgYGAfnx8fHx8fHx8fHx8fHx8fHZ2dnZ2dnZ2dnZ3dnd3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3h4eHh5eXl6enp6enp6ent7e3t7e3t7e3t7e3t7e3t7e3t7e3t6e3t7e3t7fHx8fHx8fHx8fHx7e3t7e3t7e3t7e3x7e3t7e3t7fHx8fHt7e3t7e3t8iYmHiYaFgoGCgoGCgoKCgYKCgoKCgoKBgYGAgICAgICAgIGBgYB9fHx8e3x8fHx8fHx8fHx8dnZ2dnZ2dnZ2dnZ3dnd3d3d3d3d3d3d3d3d3d3d3d3d3d3d4eHh4eHh5eXl5eXl5eXl5eXt7e3t7e3t7e3t7e3t7e3t7fHt7e3t6enp6ent7fHx8fHx8fHx8fHx7e3t7e3t7fHx8e3t7e3t7e3t7fHx8fHx7fHt7e3uHiYiJhYSDgYKCgoODgoKCgoKCgoKCgYGBgICAgICAgICAgYKBgH58fHx8fHx8fHx8fHx8fHx2dnV2dnZ2dXZ2d3d3d3d3d3d3d3d3d3h4eHh4eHh4eHh4eHh4eHh4eHl5eXl5eXl5eXl5e3t7e3t7e3x8fHx8fHx8fHx7e3t7e3p6enp6e3t8fHx8fHx8fHx8fHx8fHx8e3x8fHx8e3t7e3t7e3x8fHx8fHt7e3t7e4aJiYiFhYOBgoKCgoOCgYKCgoKCgoKBgYGAgICAgICAgIGBgYCAfnx8fHx8fHx8fHx9fX18fHaIi4uLi4uLgX19fX19fYSMi4uLi454KSkqKiopKz0/Pj4+Pj5tgH5+f397pdfT09PT1r2GiYmJiYqCRT4/Pz8/PXWNiYmJiYaz1tLS0tLWun1+f39/f359fHx8fHx8fHx8fHx8fHx8fHx7fHx8fHx8fHx8fHt7e3t7hIuHh4aHgoGDg4GCgoKCgoKCgoKCgoGBgYCAgICAgICAgYCBgIB+fHx8fHx8fHx9fXx8fH19doyQj4+Pj5CDfn9/f39+hpCPj4+Pk3kZGhoaGhocMTMzMzMzMmqCf4CAgHut6eTk5OToyomMjIyMjYM6MjMzMzMwc5CMjIyMiL/p5eXl5enHfX5/f39/f319fXx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx7e3uCjYeIh4eDgoSCgYKCgoKCgoOCgoKCgYGBgICAgICAgICAgICAgH58fHx8fHx8fXx8fH19fX12eHh4eHh3eHd3d3d3d3d4eXl5enl5d29wcHBwcHBycnJycnJyd3p5eXp6en6Dg4ODg4SBfHx8fHx8fHZ1dXV1dXV6fX19fHx7gYSEhISEhYJ8fX19fX19fX19fX18fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx7e4CMhomHh4SDhIKCgoKDgYKCg4KCgoGBgYGBgYCAf4CAgICAgICAfnx8fHx8fHx8fX19fX19fXZ2dnV1dXl2dnZ6e3h7eHd2d3p3eXp6fnx5eXh4eHh5eXl5enp5eXl5enp6eXh4eXl5eXl7e3t7e3t7fHx8fHx8fHt7e3t7e3t6enp6enp6e3x8fHx9fX19fX19fX18fH19fX18fHx8fHx8fHx8fHx8fHx8fHx8fHx8f4uHi4qIhIODgoKCg4KBgoKDgoKCgYGBgYGAgIGAf4CAgH+AgYF+fX18fHx8fHx9fX19fX19d3d3dnZ3fXh3d316eH14d3d4fXl9enl8e3h3d3d3eHh4eHh5eXl5eXp6ent7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7fHx8fHx8fHx8fHx8fHx9fX19fX19fX19fX19fX19fX19fHx8fHx8fHx7e3x8fHx8fHx8fHx+iomMjImFg4SEgoKDgoGCgoKCgoKBgYGBgYCAgICAgICAf4CAgH19fXx8fH19fX19fX19fX13d3d3d3p9eHt4fHx3e3h3d3d8en59eXt6eHh4eHh4eHh4eHh5eXl6enp6e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3x8fHx8fHx8fHx8fHx8fHx8fX19fXx9fX19fX19fX19fX19fHx8fHx8fHt7fHx8fHx8fHx8fH2Kio2NioWDg4SCgoKCgYGCgoKBgoGBgYKBgIGBgICAgIB/gIGAfXx9fX18fX19fX19fX19fXd3d3d3fX55d3d4e3p7eHd3d3x6fHx6fHl4eHh4eHh4eHh4eXl5enp6ent7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3x8fHt8fHx8fHx8fHx8fHx8fH19fX18fH18fH18fHx8fX19fX18fHx8fHx8fHx8fHx8fHx8fHx8foqJjo2JhISEg4KCgoKBgYKBgoKCgYGBgoGAgYKAgICAgH+BgIB8fH19fX18fX19fX19fn5+d3d3d3d5fHl7eHx9eXt5enp4fHl8fXp8eHh4eHh4eHh4eXl5eXp6enp7e3t7e3t7e3t7e3t7e3t7e3t7e3x8fHt7fHx7fHx8fHx8fHx8fXx8fX19fX19fXx8fHx8fHx8fXx9fX19fXx8fHx8fHx8fHx8fHx8fHx8fHx/iIeNioeFhoaDg4ODgoGBgoGCgoGBgYGCgYCAgoF/gICAf4CAgHx8fX19fX19fX19fX5+fn53d3d3d3Z4eHl3eXp4enh5eXh5eHp7eXl4eHh5eXh4eHh5eXl5enp7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t8fHx8fHx8fHx9fX19fX19fX19fX19fX18fH18fH19fX19fH19fX19fHx8fHx8fHx8fHx8fX+HiIyIhoeHhIKDhISCgYKBgYKCgoGBgYKBgIGBgYGAgIB/gIGAfHx9fX19fX19fX1+fn5+fnd3d3d3d3d3d3d3eHh4eHh4eHh4eHh5eXl5eXl5eXl5eXl6enp6ent7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7fHx8fHx8fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fHx8fHx8fX19fHx8gIeIi4eHiYaDg4SDg4KBgYGCgoGBgYKCgYGBgIGBgYCAgICBgX97fH19fX19fX19fn5+fn5+d3d3d3d3d3d4eHd4dnl5eHh4eHh5eXl5eXl5eXl5eXl5enp6enp6e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7fHx7fHx8fHx8fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fHx8fH19fXx9fXyBhoqKiYmIhIOFhISCgoGBgYGCgYGCgoGBgYCAgYGAgIGAgIGBf3x8fX19fX1+fn5+fn5+f394eHd4eHh4eHZxZGpeam15eXl4eHl5eXl5eXl5enp6enp6enp6enp7e3t8e3x8fHt7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3x8fHx9fHx8fH19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fIGFiYqJioeEhYWEg4KCgYGBgoKBgYKBgYGBgYCBgYCAgYCBgIF+fH1+fn5+fn5+fn5+fn9/f3h4eHh4eHh5bWRiZV9fXm95eXl5eXl5eXl5eXp6enp6enp6enp6e3t7e3t7fHx8fHx8fHt7e3t7e3t7e3t7e3t7e3t7e3t7e3t7fHx8fHx9fHx8fH19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18goWKiomJhISGhYSDg4KBgYKCgoGBgoGBgYKBgIGBgICAgICBgH58fX5+fn5+fn5+fn9/f39/eHh4eHh4eW5kZWdlZGJeZnh5eXl5enp6enp6enp6enp6enp6e3t7e3t7e3x8fHx8fHt8fHt7e3t7e3t7e3t7e3t7e3t7e3t7fHx8fHx8fHx8fHx9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXyChouJiIqEhYaEg4OEgoGBgYGCgYKCgYGBgYCAgYGBgIB/gIGBf3x8fn5+fn5+fn9/f39/f394eHh4eHl3Z2VkZWZkZWFfaXl6enp6enp6enp6enp6ent7e3t7e3t7e3t7e3t8fHx7e3t7e3t7e3t7e3t7e3t7e3t7e3t7fHt8fHx8fHx8fHx9fX19fX19fX19fX19fXx9fX19fX19fX19fX19fX19fX19fX19fX19fIKGi4eJh4SEhoSDg4WBgYGBgYKCgYGBgYKBgICAgYGAgYCAgYF+fHx/f35/f39/f39/f39/gHl5eXl5eWtlYWJlZWFlZV5ieHdze3p6enp6enp6enp6e3t7e3t7e3t7e3t7fHt7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t8fHx8fHx8fH18fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19g4aLhoiFhYaEgoOEhIKBgYGBgoKBgYKBgYGAgYGBgYGAgIGBgn98fH9/f39/f39/f3+AgICAeXl5eXl0Y2NlZGNmY2doZGZsZF5ze3p6enp6enp6enp6ent7e3t7e3t8fHx7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3x8fHx8fHx8fH19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX1+fn6DhouGhoaGhYODg4SDgYGBgYGCgoGBgYKBgYCAgYGBgYCAgYGBfnx8f39/f39/gICAgICAgIB5eXl6d2RhY2diYmRdW2VfYV1eYGFoeHp6enp6enp6enp6e3t7e3t7fHx8e3x7e3t7e3t7e3t7e3t7e3t7e3t7e3t8fHx8fHx8fHx8fH19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX1+fn5+fn5+foSFi4eGhoaGhIODg4KBgYGBgoKCgYKBgoGAgIGBgYGAgYGBgYF+fX1/gH+AgICAgICAgICAgHl5eW9vYmJiZF5jZ19dYWFgXF9kYlttfHp6enp6enp6enp7e3t7fHx8e3t7e3t7e3t7e3t7e3t7e3t7fHx7e3x7fHx8fHx8fHx8fH19fH19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX5+fn5+fn5+fn5/hIiLhoSHhoaEhIODgoGBgYGCgYGBgYKCgYCAgYGBgYGBgYGBgX5+fYCAgICAgICAgICAgICBeXpwXWJlZGJkXmZnZ2BZYmJhY2VfXF1ze3t6enp7e3t7e3t8fHx8fHx8fHt7e3t7e3t7e3t7e3t7fHx8fHx8e3x8fHx8fHx8fHx8fHx9fX19fX19fX19fX19fX19fX19fX19fX19fX19fn19fn5+fn5+fn5+fn5+foCFjIqEhYaGhYODg4SCgYGBgYKBgYGBgoKCgYCBgYGCgICAgIGBf35+gICAgICAgICAgIGBgYF5emxiZGdjYmdmYWBgZGFiZWRjZGNeXGJ1fHt7e3t7e3t7e3x8fHx7e3x8fHx7e3t7e3t7e3t7e3x8fHx8fHx8fHx8fHx8fHx8fHx8fH19fX19fX19fX19fX19fX19fX19fX19fX1+fn5+fn5+fn5+fn5+fn5+fn9/gYeMiYWGhoeFg4SDgoGBgYGBgYKBgoKCg4KBgIGBgYKBgYGCgoF/f36AgICAgICAgIGBgYGBgXp7dGdnZmZkZGZmYF5fYWNlaGRlXmJkYHR8e3t7e3t7fHx8fHx8fHx8fHt7fHt8fHt7e3t7fHx8fHx8fHx8fHx8fHx8fHx8fHx8fH19fH19fX19fX19fX19fX19fX19fX19fX19fX5+fn5+fn5+fn5+fn9/f39/f3+CiYqIhoaIhoWDhIOCgYGBgYGBgoGBgoKCgoGAgYGBgoKBgYKCgX9/f4GBgYGAgYGBgYGBgYGBenptaGNjZ2ZnZWdmZmdiZWRlYmdbYmVgdnx8e3t8fHx8fHx8fHx8e3t8fHx8e3x8fHt7fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx9fXx9fX19fX19fX19fX19fX19fX19fX19fn5+fn5+fn5+fn5+f39/f39/f39/f4SJioiGiYeFhYSEg4KBgYGBgYGCgYKCgYGBgYGBgYKBgoGBgICBgH9/gYGBgYGBgYGBgYGBgYF7emlpZGNqZmFgZmVjY2NnaWRjYmBiZGJ0fXx8fHx8fHt8fHx8fHx8e3x8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fH19fX19fX19fX19fn5+fn5+fn5+fn5+fn5+fn5/f39+fn9/f39/f39/f3+AhIqMiIeJhoSFhYOCgYGBgYGBgYKBgoGBgYGBgYGBgoKBgYGBgYGAgH+BgYGBgYGBgYGBgYGBgXZzZWRnY2RmZWJlZmdkZmhmZWNgYGNkYHF9fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fXx8fX18fHx9fX19fX19fX19fX19fn5+fn5+fn5+fn5+fn5/fn5+f35+f39/f39/f3+AgICFioyJiIqJhoaDgoKCgYGBgYGBgoGBgoGBgYGBgIGBgYGBgYGCgX+Af35/foCCgoKCgoKCgoKCc3NnZWRkZWlqaGZnZ2NhZmZlZmdmZWVjdX18fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fX19fX19fH19fX19fX1+fn5+fn5+fn5+fn5+fn5+fn5+f39/f39/f39/f39/gICAgICAgIWLioqJioeHhoSCgoGBgYGBgYKCgYKBgYGBgIGBgoKBgYGBgYGAf4B+dHRzdX1/goCAfn5/gYB0cmdkZWNmaWppZWNlY2BmZGRnZ2JiZWFwfXx8fHx8fHx8fHx8fHx8fHx9fX18fHx8fHx8fHx8fHx8fHx9fX19fX19fX19fX19fX19fX19fX1+fn5+fn5+fn5+fn5+fn9/f39/f39/f39/f39/f39/f4CAgICAgIB/houLiouLh4eHhIOCgYGBgYGBgYKBgoKBgYGBgYKCgYCBgYGBgoCAgH5zc3NzdHV4dXV0dHV2dXVwZmNmZWhoaWdoZ2VmZWJfZGVmY2BiZ3d8fHx8fX19fX18fHx8fH19fX19fX19fXx9fXx8fX19fX19fX19fX19fX19fX19fX19fX19fn5+fn5+fn5+fn5+fn5+fn5+f39/f39/f39/f39/gIB/f3+AgICAgICAgICHjIyIi4qHh4eEhIKBgYGBgYGBgoGCgoGBgICBgoGBgYKBgoKCgYCAfnNzc3Nzc3NzdHR0dHNzdW9jY2FnZWhoZ2pmZGVnZmhmY2JlYl5ieX18e3t8fX19fX18fHx9fX19fX19e3x9fX19fX19fX19fX19fX19fX19fX5+fn5+fn5+fn5+fn5+fn9/fn5+fn5+fn5/f39/f4CAgH9/gICBgICAgICAgYCAf4CAgYGAgIeLi4iNiYiJhoSFgYGBgYGBgYKCgYKCgYGBgIGCgoGBgYKBgoKBgIB+dHNzc3Nzc3Nzc3Nzc3N1cmdlZWRlamhoZ2ZpaGdjZWViZGNoZGd7eHVzc3R2dnl4dnR0dHZ3d3d2dHR0dXV4d3h4d3d6e3x9fXx9fn5+fn5+fn5+fn5+fn5+fn5+fn5/f39/f39/f35/f39/gH9+fHt7fX58eXl2dnZ5fHx6end2d3l7fXt4hIyMioyHh4iEhYSBgYGBgYGBgoGBgoGBgYGAgYKCgYGBgoGBgoGAgH51c3Nzc3Nzc3Nzc3Nzc3VzaGVnaGVrbGhqZ2lqZ2dnZmRkYmVkbnV0dHNzdHNzc3Nzc3Nzc3Nzc3NzdHNzc3Nzc3Nzc3N0dHV1c3V3eHl7fn59fn98f39/f39/f39/f314fH5+fXx4dXZ3eXd4dnRzc3N0dXRzc3Nzc3NzdHNzc3R0c3R0dHODjI2KiYeIhoOGg4GBgYGBgYGBgYGCgYGAgYGDgoKBgYCBgYGBgICAf3VzdHRzc3Nzc3Nyc3NzdnZpY2hqaGpsZWZpbGhgZmVkY2BkZGZ0dXV1dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHRzdHRzc3Nzc3R2dnV1d3V4fH9+fX9+fHp4dXN0dXV1dHNzc3Nzc3N0dHR0dHR0dHR1dXR0dHV1dHR1dXR1dXV1dIaMjYuIhoeEhIWCgYGBgYGBgYGCgoGAgYCBgYKCgoGBgIGBgYGAgIB/dnNzc3Nzc3Nzc3Nzc3N2dnNnZ2pmaGdmaGhmZGlnY2NnZWVmcHZ1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dHR1dHR0dHR0dHRzdHR0dnV1d3Z0c3R0dHR0dHR0dXV1dXV0dXV1dXV1dXV0dHNzc3N0dHNzdHR0dHR1dXR1iY6MjIqHh4SEhYKBgYGBgYGBgYKCgoGBgICAgoKCgoGBgYGBgYCAgH93c3Nzc3NycnJyc3NzcnZ2dW5kXWNnZWlraGVoZ2dqamlnZXB2dXV1dXV0dHRzdHR0dHR0dHV1dXV1dXV0dHV1dHR1dXV1dXV1dXV1dXR0dHV1dXV1dXV0dHV0dHV1dXV1dXV1dXV1dXV1dXV1dXV0dHNzc3Nzc3N0dHNzc3Nzc3R0dHR0dHWKjoyMiYaGhIeFgoGBgYGBgYGBgoKBgYGAgYGCgYKBgYGBgYKBgYCAf3hzc3Nzc3JycnJyc3NzdnZ3d2liaGhnamtpaGZkZGVmaWhwdXR0dHRzc3JxcnJ0dXV0dHR0dHR0c3NycXFxcXNzdHR0dHR0dHR0dHV0cnJyc3R0dHR0dXV1dXV1dXR0dXR0dHR0dHR0dHR0dHR0c3Nzc3Nzc3Nzc3Nzc3N0dHN0dHR0dHR0dYuOjImGhYWFh4SCgYGBgYGBgYGBgoKCgYGAgIKCgoGBgYGBgYGBgIB/eXNzc3NycXJycnJzc3N3d3d3bGpoZGhpa3Z6a2VmZWhnbXJzdHN0c3JwcHBxcnN1dXR0c3Nzc3JycXBvb29vcHFzc3NycnJyc3R0dHNxcHFyc3R0dHR0dHRzc3Rzc3NzdHR0dHRzdHR0dHR0dHRzdHR0c3NycnFxcnJzc3Nyc3NzdHR0dHN2jZCMh4eFhYSEgoGCgoGBgYGBgYGCgoKBgYGAgYGCgoGBgoKBgYGAf395c3NycnFxcnJycnNzc3d3d3dzc2pnaWloeX99cW51bG5wcXJycnFxcG9wcXFxc3R0c3RycXBwcG9ubm1ubW5ubnBxcnJycnJycnJzcXBvb3BxcnJzc3JxcnJycnJycnJycnJzc3Jzc3Nzc3Nzc3Nzc3Jxb29ubm9vcXJzc3Jyc3NycnNzcnaPj4uHhoWFhYOCgoKBgYGBgYGBgYGBgoGBgYGCgoKBgoGCgYGCgX9/f3hxcHBwcXFycnJyc3Nzd3d2dnd2cnF0c252f352c3hwcHBycnJycXFwcHFxcXJzc3Rzc3FwdXdvb25ubm5ub25vcHBxcXFxcXBwcXJwb25vcHFxcXFxcHBxcXFxcXJycnJycnJycnFxcnFxcnJycnFwb29ubm1ubW5vcXJycnJycnJyc3JxeI+OjYaDg4aEgoOCgoGCgYGBgYKBgYGCgYGBgYKCgoKCgoKBgYKBf4B/d29wb3BxcnJyc3Nzc3J2dnZ2dnZ3dnZ1c3l/fnd3d29wcXFxcXFxcHBwcXJycnNyc3NycW+Qg25wb29vb29vb29wb3Bvb29vcHBxb29vcHBwcHBvcG9wcHFycXFxcnJycnFxcXFxcXFxcHBwcHBxb29ubm5tbW5tbm9wcXFxcXFxcXFxcXB7j42NhoODhYOCgoKCgYKBgYGBgoGCgYGCgoGCg4KBg4KBgYGAgYF/f392bm9wcHBxcXFxcXBwcHZ2dnZ2dXR0c3NxfYB9fX9zb3BxcXFwcHBwcXFwcXFxdox1cnJvfaB7bnBwb29wcG9vb29vb29vb3BxcXBub3Bwb29wb29wcnJycnFxcXBxcnFwcXFxcHBwcHBwcHBwb29ubm1ubm5ubm9ub3BwcHFxcXFxcXFxcIKRjoqEhIOFhIOCgoGBgoKBgYKBgYGBgYGCgoKCgoKCgYGBgYCBgX9/gHVvb29wcXFxcXBwcHBwdnZ2dXRzcnJycnGAgoCBeXBwcHBvcHBwcHFxcXFwcXFynZVxcXGVontvcHBwb3BxcHBvb29wb29vcXFwcG9wcG9vb25vcHFxcHBwb3Bvb3BwcHBwcHBwcHBvb29vb29vbm5tbW1ubm5ub25vb3BvcHBwcHBwcHBwiZCMiISDhIaDg4KCgYGCgoKCgYGBgYCAgYGBgoKBgYGBgYGBgIGBgH+AdG5vb3BxcXFwcG9vcG92dnVzcnFxcXFxcICDg39ycHBwcHBwcHBwcHFxcHBxcm+Pr4lveaKiem9wcHFwcHBwcHBwcHBvcHBxcXBwcHFxb29vbm9wcHBvb29vcHBvb3BwcHBwcHBwcHBvb29vbm5ubm5ubW5ubm1ubm9wcG9vb29vb3BzcXWPj4uJg4KFh4ODgoKBgoGCgoKBgYKBgYGBgYGBgYGBgYCAgYGAgYGAf4B0b29vbm9vb29vb29vb3Z1dHNxcXFxcXJygIKCgXRxcXFxcXFxcXFxcXFxcXFycIiypnaKrKR7cHFxcXFwcHBwcHFxcXBxcHBwcXBwcHBwcHBwcHBwcHBwcHFxcXBxcHBwcHFwcHFxcHFxcXFxcXJxcnFwcnRycnR0dHR1dnRzdHR0dXd3gpCPi4iDgoaHhISCg4GBgYKCgoGBgoGBgYKBgYGBgYGAgICBgYCBgYB/gHVvb29vb29vb25vb29vdXRzcnJycnJycnKDg4OCdnFycnFxcXJxcnJxcXJycnJwjbOopKaxqHZxcXFycXFxcXFxcXFxcXFwcXFxcXFxcnNzcnJyc3V1dHR0dHR0dHV2d3d3d3d3eHh4eHd3eHh4d3Z3dnV2dnZ2d3h6e3x7e3t6enp6enyGkI2LiIODiIeHhYODgoGCgYKBgYGBgYKCgoGBgYGAgYCAgYGAgIGBgH+Ad3FxcXFxcG5ucG9wcG92dHV1c3Nzc3NzdYiDgoN5cnNzcnJyc3Jyc3Nzc3Nzc3ahoaO0ppukfHNzc3Nyc3N0dHV1dXV1dHV3eHd3d3d4eHh3eHh4eXl5eXl4eHl5eXp6e3t7e3t6enp5eXh3d3d1dnV2dnd5enp7fn5+fX1+fn5/f35+gIyQi4qHg4WIi4iEg4SDgYGCgYGBgoGBgoKCgoKAgYGBgYCBgYGAgIGAf4B8enp5eXx5eHh2dXZ2dHl2d3h3d3Z3dnZ6fnx+fnx2dnd3dnV4enh4eHh4d3h4gqefnKefo6OSenl6eXh4eXl6enl5eXh4enp5eXh4eHh3dnd3eHh3eHh5eXp7e3p8fH1+fX9/f359e3t7e3p5enl5e3t/foB/fn5/fn19fX5+f35+fn6AjpCNioeEhoqLiIaGhIOBgoKBgYGCgYGCgoKCgoCBgoKBgYGCgYCBgIF/f4B/fn19fX9/f318e3t7eXh4eHh5eXl4eXh5eXl4enp6enp6e3t7fH1+fXx8fHyLoY6PmJqZm5V7e3l4eXh4ent6enp5eXp8fHt6enx8fHp6ent9fHx+fn+AgoGAgYKAgH9/gYGBgIB/f35+fn5/fX1+f4CAf35+f39+fn9/f39/gH+Af4OQjoyHhoWIi4yIh4aFg4GCgYGBgYKBgoKCgoKBgYKDgoGBgYGBgIGBgIB/goOCgoGBgX99f39/f4F6enh4d3h4eHh5eHh5enp5e358enx9fXt8fX19fX59f4inp6OdoJqTmIF/f319fYCDgoCAf318fXx9fXt9fXx8fH19fX1+gYGChISDgoB/gYGBgH9/f4B/f39/f39+fn9/f39/f35+f3+Af39/gICAf4CAgICAhJCPi4eGhoiLi4mKhYaDgoKCgYGBgoGCgYKBgYGBgoOCgYCAgYGAgIGBgH+ChIKCgICAgH9+fn+AgH9/fn18fX19fYB/fX+Af35/gH9/fn9/gICBgICBgYGAjbKnqaKgoaumhH6AgH5/f39+f4B/fn5+f39/gYB/f4CBgYCAgYOEgoGCgoGCgH+AgYCBgYGAgH+BgICAf39/gICAgYGBgIGBgYCAgICBgoGBgYCAgYGFjo6MiYaHiYyLi4qGhoOCgoKBgYGCgoOCgoKBgIGBgYKCgICBgYCAgYGAf4KFg4KBgYCAf39+fn+AfX5+fn19fX5/fn9/f35+fn+AgYCAgICAfn9/f4CAf4qprp+po6ChpamkjH58foB/fn5/f35/gIGBgoKDg4KCg4KBgYKDg4OCgYGBgYKBgoKCgYKBgoGBgYGBgoKCgYGCgYKCgoGBgoKBgYKCgoKCgYGBgoKCgoaPkY+KiImKjY6NiYaFgoKCgoKBgYKCg4KCgoGBgYGBgYF/gIGBgYCBgIF/gYWEg4KCgoGCgYCAgIB8fHx7fH18fH9+fn9+fn5+f35+f39/f39/gH5/gYiVqq+knKShoKGhoamroI2BgIB/gIF/f39/f3+BgYGCgoCAgYKDg4SDg4ODgoKCgoKCgoKCgoKCgoGCgoKDg4OCg4ODgoKCgYKCgoODg4ODgoKCgoODg4KCh5KTkIuKi4uPj42Lh4SCgoKCgYGBgoKDgoKBgYGBgIGBgICAgYGBgIGAgYCAg4SDg4OEg4ODgoKCgXx9fHx9gn1+f4GCiIGCgoSCgYGDg4GBgYKDg4aMm6ajnZyan5OYoaCenZ6hoJSFgYCAgICAgH9/f3+AgICAgH9/gYODhYSEg4SDgoKCg4OCgoOCgoODg4ODg4SDg4KEhYWDg4SEgoKDhIOCg4ODg4OCgoODgoCKlJOPioqMj5GPjYuGg4KCgoKBgYGBgoOCgYGBgIGBgoGBgICBgYGAgYCAgH+BgoODg4SEhIOCgoKCfXx8fn6AgYOAg4OChIaFhoaFhIWFg4ODg4SBgoSMlJaXl5mYh5Cdm5ucmJGLh4ODg4KDg4ODgoGAgIKCgYOCgYKCg4OEhYWEg4OChISEhIOEhISDg4OEg4ODg4OEg4SDhIWEhISDg4ODgoKCgoKCgoKBgYKCgo+UlI+Njo6RkY6KiISCgoKCgYGBgYGCg4GBgIGBgYGBgYCBgIGBgYCBgICAgIKChIKChIOCg4ODgoJ9fX2AgH+AgoGDg4ODhIaEhIOEhYWDg4GBg4OCgIKDhIyWmZWJkpmckouHhYaHh4eGhoeHhoaEgoGCg4SDg4ODg4ODhISFhYWDhYSFhISEg4KBg4OCg4SEg4KCg4SCg4ODg4OCgoKCgoKCg4OEhIOFhYWFhoaIk5OTkI+PkJKRjIqIgoKCgoKBgYGBgYKDgoKBgIGBgYGBgICAgYGBgICAgICAhISEgoKCgoGBgoKBgX+AgYOCgICAf4CCgoGDg4KCgYODg4SDg4GDhYSCgYKBgYSPl5SWmZCFh4eIiIiHh4eIiIiFhIOBgIGBgoKCg4GCg4SEhYSDg4OEg4OEhIOBgYGCg4OEhISDg4ODg4OEhIODgoSDg4ODhIWFhoeHh4eIiIiJiY6TkpKOj46Rko+LiYeCgoKCgoKBgYGBgoKCgoGBgIGBgYGAgICAgYGAgIGAgICDg4KCgYKCgYGAf4CBhYWFhoOCgYB+fn+BgoSCgYKDhIOCg4ODg4KChISDhISCg4OEkZaIhIWDg4WFhYOEhIWFg4KBgH9/gIB/gIGEg4OEhYWEgoKCgoOCg4OFhIKDhISEhYaGhoaGhoWFhoeHhYaIh4aHiIeGhoaIiYeGhYaGhoeIkZKSj46QjpCRjImHhYGBgoKCgoGBgYGBgoOBgYGBgYGBgICAgICBgYCAgICAgISEg4KBgoGAgYGAgYKIh4aHhYSCgH99fX6AgH+AgYGBgYGBgoGAgYKDgYKCgoKCgoGHkYKDg4GCgICAf4GAgICAgH9+gIGBgYKCg4OEg4OEg4OCgoGBgoODg4SEg4SEhIOFhYaFh4eIh4eHh4eHh4eGhoaGh4WFhYaGhISEhIWEhYaSk5GOjo+OkI6JiIeEgoKCgoKCgoGBgIGCgoKCgoKCgYGBgYGAgYGBgICAgYGAgoSDg4KDgoGCgYKDg4iHh4iHhYSCgX5+gICAfn5/f4CBgYGCgoCBhI2DgH+AgICAgIiSgIGCg4OAf39/gICAgICAgICDg4KDg4ODgoOBgYKCgoOCgYKCgoOCgoSDhISDg4SEhYWFhYaGhoaFhISEhYWEhIWFhYSEhISDhISEhISEipSTkpCQj46NiIaFhIOBgYKCgoKCgYGAgYKCgoKBgoKBgYCBgYCBgYGAgICAgYGAg4OCgoOCgoKBgoOCiImJiYiHhYSDgYKEhIOBgoKCg4SCgoSEgoOKloiEgoSCgn+AjJaCgoGChIOBgYGCgoODgoGDg4SDg4SEg4OCg4KDg4ODg4KCgoKCgoGDhISEhYSFhYWFhIWEhIWFhYWDg4OEhISEhYWFhISEhISEg4ODg4OOlZKQkZGPjYyHhYODg4GBgoKCgoKBgYCBgoOCgYCCgYGBgICAgIGBgYCAgICBgICDhYSEhIODg4SDhIOGh4mIhoWDhIODg4WDgYCDgoWFhISDg4OChI6YioOFhISEgoCSmoaCgoKEg4OCg4GBhIWEg4ODgoKDhISDg4ODg4SFhISDg4KCgoKCgoSEhYSFhYWFhYODhYWFhYaFhoWEhIWEhYWGhYWFhIWEhISDhIODhJGUk5KTj4yMioWEg4ODgYGCg4KCgoKBgYGCg4KBgYKBgYGBgICBgIGBgH+AgIGAgYaGhoaGhoaHh4aGhYSDhYaCgIGBgYGHgoB+f4GBj4yDgX9+fXx9i5yNgIKBgYOChZSTjIGCgYKDg4GBgYKDhYODg4KDg4OEgoKEhIOEhIWEg4OCgoKCgYKCg4ODg4SFhYWFhIOEhYWGhYWEhISEhIOEhIWFhYWFhIODhIOEg4KGlJSSlJKPjYyIhISEg4KBgoODgoKDg4GBgoKBgoKCgYGCgYGBgYCAgYGAgICAgICAhYWFhYaGh4aGhoWGg4ODg4GAgoKCgYKAf35/f4GVl4mAfX19fXuBl4yAg4GBgYCPk4uQgYKBgoKBgYKDgoODgoOCgoKCg4OBg4SDg4ODg4OEhIKCgoKDgoKDg4ODhIWEhISEg4OEhIODg4OEhIODg4ODg4SDg4ODg4KDg4KDgouUk5KTko2NioaDhIOEgYGCg4ODg4ODgoGBgoGCgoKCgoKBgYGBgICBgYCAf4CAgICDhISFhYSFhYWEhIWCg4KDgoKDg4OBgICAgICAgJWfin5+gH2Hin2EhIOEgoODgo6JhYyCgoOCgoKCg4ODgoODg4KCgoODgoKDg4KCg4KDg4WEg4ODg4SDg4SEhISEhYWEhIWEg4SEg4OEhISEhISEg4SEhYSDg4SEhIODgoKDkJSTkpKPi4yIhoSFg4OBgYKDg4ODg4OCgYGCgoKCgoKDgoCBgoGAgICAgIB/gICAgISDhYWEhYWFhYSFhYOEhIWDg4SEhIKCgoOCgoSBkaGKf4yFfYaJgH6FhYWEhYJ/fn19f4KEg4ODg4OEg4ODhISEg4OEhISEg4SEhIOEg4OFhoWFhYSFhYWFhYSFhoWGhoWFhYWFhYWFhYWGhoWGhoaFhoaGh4aFhYWFg4SEhIeTk5OSko2KiIWGhYWCgoGBgoODg4OCg4KBgYKDg4ODgoKBgIGAgICAgICAgH+AgICAhYWFhYWGh4eGhYWFhISFhYSEhISEg4ODg4OEhYOKkYOEi4WCgYF+fYGHhoOAfn5/fn9+f4OEg4OEhISEhISEhISEhISFhYWEhYSGhYWGhYaGhoWGhYWHhYWHhoaGhoaFhIWFhYWFhIWGhoaHhoaGhoaHh4iIiIaFhYaFhYWGjZSTkpGQi4qHhoeGhIGCgYKDg4ODg4KDgoGBgoODg4KAgYGBgICAgICAgICAf4CAgICHh4eGhoeHiIeHhoaEg4ODhIODg4OEg4ODg4OEhISEgYKCgYmBf359foWBf39/f39/f36AgISFhIWGhoaFhYWFhoeHhoaFhoWFhoeHh4iHh4eGhoaHhoeGhoeHh4aGhYSDhIWFhoSFhYaGhoeHhoaGhoeHh4eIiIeGhoaHh4eRlJORkZCLiYiFhoSDgoKBgoODg4ODgoKDgoKCgoOCgYCBgICBgICAgIGAgIB/gICAf4aHiIeHh4eIiYmIiIODgoKDgoSEhIWEg4KCg4SEhIOBgICAhIR/fn5/gH9/f39/gIB/f4B/f4WFhoiIiIeHh4eIh4iHiIiIhoaHiImJiYmIh4aHh4eJiIaHh4eHhoeFhIOEhYaFhYWFhoaGh4eFhoeGh4aGh4eHh4eHh4eFh5OTkY+RkIuHhoWGg4KCgYGCg4ODg4ODgoKCgoGCg4KCgIGBgYCAgICAgICAf3+AgYB/hoiIiIiHh4iJiYmIg4KCg4ODhIWHh4aFg4OFhISEg4GAgIGMiYGAgYKCgYGBgYB/gH9/fnt6gIaHiIqKiYmJiImJiYmKi4qIiIiJiYqLioqIiIeIiIiHiIiIh4iGh4aEg4OFh4eHhoWFhISEhYWEhYWGhISEhYWFhoaGhYOJlJOQj5COioaEhoWDgYGCgYKDg4ODgoKCgoKCgoKCgYGBgYGBgYCAgICAgIB/gICBgH+GiYiIiYeIiImJiIiEgoKDg4KDhImKh4aEhIWEg4OCgICBhISCgoKCgoKCgH9+fX19fX59fHt8g4eJi4uKioqIiIqJiImLiomJiImIioqJi4mHhoaGh4WGiIiJiIaGh4SDgoSIiIiIh4WCgoGDg4KDg4SCgoKDgoGEg4SEgY6TkpCPj4uIhYSGhIKBgYGBgoODg4OCgoKCgoKCgoGBgYGBgIGAgICAgICAgH+AgIGAf4WIh4eHhoeIiIiHh4SCg4OCgoOFiYqJh4WHhYSFhYKAgYOEgoOCgoKDgX59fX5+fn5+fn1+fH19g4eJioqHh4WGh4eHh4iHh4mHiIaIh4aJiYODhIOFhISFhYeIiIaFg4KCg4WHhoeGhoSCgoOEgoOEhIKBgoGBgYODhIOEkZKQjo+Oi4eEhoaEgoGAgYGDg4ODg4KCgoKCgoKCgYGBgIGBgYCAgIB/gIGAf39/gIB/hYaGhYaGhoeHiIeGgYKEhIOChYeIi4qGhIaEgoaGgoKEhIODg4OCgoF9fH1/gH9+fn59fH19fHl8g4aGh4SDgYODhIWFhYODhYSEhISEhIWEgoKCgoSEgYKDg4WGhYSCgYGCgoODhYSEhIWEhIaEg4SFg4KDgYKDg4SFhIeSkY+NkIyJhoSFhIWCgYCBgYODg4ODgoKCgoKCgoKBgYGBgYGAgICAf4CAgYB/gICAgICDhIWEhIWFh4eHh4aAgYGFg4OEhYSHiIWCgIB/gX9/gYODg4ODgoJ/fX1/gICBf31+fn19fX17enp+hISEgoGBgIGBgoKBf36BgYGCgYOBgoGCgoKBg4OAf4CAgoOCgICAgICBgYGDgYGChIODhYSCg4SDgoKBgoSDhYWGi5ORj4+Pi4iFhYODhIGBgYGBgoODg4KCgoKCgoKCgoGBgYCBgYCBgH9/gIGBgICAgH+AgIKCg4OChIOEhYWGhn+BfoCBgICAf4GDgn9+fn5+fX+Cg4OCg4KDgn19fn+AgIGAfn19fX1+fXx6enqAgoKBf39/f35/f4B+fYB/foCAgX+AgIF/f4CAgX59fX+AgX9/foCAgH+AgICAf4CCgICCgYGCgYGAgYGBgYKEg4aPkpCOj42Kh4eGg4ODgYGBgYGCg4ODgoKCgoKCgoOCgYGCgYGBgICAgH+AgICAgICAf39/gYKDhIGCgoOCg4SFgIB/fH19fn19foCAf31/fn1+gYODg4KCgYF/fX1+f4CAgH9+fX19fHt7e3p6enqAgH9/f39+fn1+f35/gH9+f3+Af4GAf359fn9/fn18fn+Af35+f3+Af39/f4B/f4B/f4CBf4B+f39/gH9+f4B/hZKSj46Pi4uHiYWEg4KCgYGBgYKDg4ODg4OCgoKDg4KAgYKBgYGAgICAf3+AgIB/gIF/f36BgYSEgYKBg4OCg4OBgH98fn9/fX6Af4B/foF/f4CBhIOCgYB/f359fn5/gICAfn19fXx7e3x6enl5eXuAgH+Af39/fn5/foCAf35/f4CAgoB/fH5+f35+fXx/f4B/fn9/f4B/f35/f4CAfn5/f39+f35/f35+fn19fX2Fk5KOjIuKiImIhISEgoKCgYGBgoOCgoOCgoODg4ODgYCBgYGBgYCAf39/f4CAgICAgIB/foCBhIOCgYGDhISDhICBgICBgIGAgYKCgoGBgoCBg4ODgYGBgYCAfn19fn5+f359fX19fXx8fHt6eXl5eH2BgICBgYF/f4B/f4F/gYCAgYGCgoB+gH5/fn5/foGAgoF/f39/gIB/f4B/gYB+f3+Afn9/fn+Af31+fn17fIaTkoyLioeHioiGhoSDgoGBgYGCg4ODg4OCg4OCgoKBgICBgYGAgH9/f39/gICAgICAgH9+fn+BgYGAgISGh4aHgoODhYOBg4ODhYSEhISEg4ODhIKCgoKCgX9+fX19fn6AfX19fX19fX19e3p5eXl5eYCCgoKEg4CCgoGAgoCCgYGDgoKDgYGCgIGAf4CBg4GEgoCAgYCBgYCAgYCCgn+BgIF/gIB/gICAfn9/fnx8ipOPiYmIiIiJiIaGhoSCgoGBgoKDg4ODg4KDg4KCgYCAgICBgYGAf39/f4CAgICAgIGBf359fn5/f39+g4aHh4iChYSFg4SFhIWGhYaGhoWGhYGBg4ODgoKAfX19fX19fn59fX19fX19fX58e3l5eXl4fIKDhIWCgYSDgoKDhYeCg4SDgYKCg4OCgoKCgYKFg4iFgoGCgYKDgYGBgYSDgoOCgoKCgYGBgIF/gIGAf36Ok4yHiIaIh4aGhYaGhIKDgoGCgoODg4ODg4OCgYGBgH+AgYCBgYB/gH9/gICAgH+AgYB/fn19fX5+f36Ag4SHiISGhoaFhoaHh4aHh4iHh4eGf32AgIGCgX59fX19fX19fX19fX18fH5+fnx7eXh3eHl5gIODf4ONhISEhISXl4ODhIF9foGCgoGCgYKBhIaIjIWDgoKBhIKDg4KDhYSEhYOCg4OCg4OCgoKCg4KCgpKQi4iIh4mHhoaEhoWFhISCgYKCg4ODg4ODgoGBgYCAgICBgIGBgH9/fn+AgYCAf4CAgH9/fn1+fn+Bf4CCgYWFhYeGh4eGh4eIhoeHh4eGh4V+fX18fX9+fX19fX19fX19fX19fXx7iJKCe3x6fIZ5eHl8gYF+iZaEg4OEhJSTgIGBf39/fn6Fi4B/gICEhpCJhYSCgoGFhYuDgYKFhYaGhIOFhYOEhIODhIOFhISIko+MiYiIiYeHh4WGhYSFhIKBgoKDg4ODg4OCgYGBgYB/gIGAgICAf39/f4CAgICAgYGBf39/f4CAgIGBgYGBg4OGh4aGh4aGiIeGhoaFhIOFhH59fHx8fX18fH19fX19fX19fX18fH+RlZaDe3qElHx4eXp7fICCg4GCgYOCgH59fn57iJF8fI6Wf31/f4KGioWDg4SDgYONiX9+f4OEhYWDhYaFhIWFg4SFhYaEhI6Rj4yKioyJiImHhYWFg4ODgYGCgoKDhIODgoGBgICBgICAgYGAgIB/f3+AgIB/gICAgX5+f4GBgoKCgoODgoOCgoWGhISFhYSGhIOEg4KBgIKAfn19fHx9fXx8fH18fH18fX19fHx8e4uRl4x6e3yBenp6e3x5eX19foB/gH98e3t+fn2ClZF/hIh9fH5/goR8fIGChIKAf4eDfYKBf4KCgIODhISEhISChIOEhYGEkZGOi4yMjoqJiYWFhYODg4KBgoODgoKDg4KCgYGAgIGAgICAgICAgH+Af3+Af357gICBenyAgYKDhYODhYWFhYODg4SCgYKDgoOCgoGBgIB/gX5+fX59fHx8fHx8fHx8fHx8fHx9fHx8fn6Kgnt6e3p4ent7fH17fn1+f319fX19fH+BgX2Gj4F+fYJ+f36Agnx8gH+CgIKAfnx7ioJ9gH9+gYCAgYKBgoCAgIGAf4uUkIyLjo6MiIiHhYWFhIOCgoKCg4OCgoODgYGBgICAgICAgH9+fXx7fHx9f3+AgHx6gYF4e4CCgYOFhIOFhIaHhISAhpSIgIKBgYGBgH9/f39/fn5+gHx8fHx8fHx8fHx8fHx9fHx8fHx8fHl7e3t4eHl7e3p8goCBfn+BfH5+f359gIKCgICAgX+CkYF/f4CAfoB+fn9+gIGBfX19e319fXx9fHx9gH+AgH6Afn6ClJKNjY2Oj4qFhoaFhISFg4KDgoODg4OCgoGBgYGAgICBgICAf4CAf39/fXt6fICAgHh+gXd7gIF/goKCgoKEhoeGhn6IlYp+gYGAf4B/foB+f39/fn+Bfnx7e3x8fHx8fHx8fH59fHt9fHx8e3x8fHp6eXt8en2Fg4N/gYF+f35/gH6FgoF+gH9+foCFhoKAfn6Dhn99fX6AgIGAf39+fX19fX57fH1/f3+AfX9+f4yRjo2Oj46Nh4SGhoWEhISDg4OCg4ODg4KBgYGBgYCAgYGAgYGBgYGAgH9/f397en9/e3mAd3p/f31/f3+Af4KEhoaFf3+FgX5/gIB/gH5+f31/gIB/f4B/f319fHx9fn18fH19fX19fH58fXx7fXx8ent6fH19f4aEg4CAgX1+fX5/fouEgYZ+fXx8f36CgX99fX19gXx7fXx+gYSDgYB+fn5+fXx+f399foB+f36Eko2OjI+Ni4qGhIaEhISDg4OCg4KDgoOCgYGBgYGAgYGBgYB/fXx8fH1+f39/f397e399d352eH59fH18fX5+gYGCg4B6fX18fn6Af35/f35/fn+AgH+AgH9/fn9+fn5+fn1+fn99fH59fn1+fHt8fHx6e3p9f4CAhIOCf35/fHx8fXx8gYN+jH58e3t9fn1+fn17e3t9fHt7e3uAhoSChIOBf4B+f4KCgn9/goJ/gIuQjY2MjYuKiISEhIODg4ODgoKCgoKCgoKBgYGAgoGBgYKCf3+AgIB/fn18fH5/fn55fX52e3Z4fXx8fHt9fX6BgICAf31/f31+f39/foB/f39/f3+Af4GBgH99gH9/fn9+fn5/f3yCfn59fX17e319fHp8fH6AgoGAgIB9fH18fHx8fH18fnt/fnt7e3x8fH18e3t7e3x8enp9en6CfoKEhIKBgoGFhoWFhoaHhYGEkY+Ni4qLh4eFgoOEhISEg4KCgYGCgoKBgoGBgYGBgoGBgoKAgYKBgYCAgH9+e3x+fnx6fnh5dnd8fHx7e318f4GAf35/foB/f35/f35/gH9/f3+Af39/gYKAfn6BgIB/f39/f39+fYN8fH19fH99fX19e3x+fn9/fn5/fnx9fXx8fHt+fnt8e3x8fHx9fH18fnx9fHt7e3x5e3x7e316fX5+f4CAg4eJiYmKiIqJhYiSj4yJioeFhYOCgoOEhIOCgoKBgYKBgYKBgYGBgYKCgoGCgoCAgX98e3p6eXt9enx+fnl8eXh4dHx8fHx8fHx+gH9/f39/gIB/fn5+fX+AgH9/f3+Af4CDgoB/gIGAgIB/f4CAgH58enx9fX59fX5+jIZ9fX57e4ODfX5+fX18fX19fX19fH17fXx9fX58fn19fX18e3t6fHt8fHt6e3t6enp7fn6DhYiHiIqLi4qJjJGQjoqIhoWEgoKCgoODg4OBgYGBgYGBgYGBgYGCgoOCgYKBgIGBf3+Af356eHl5en5+e3l6eH5zfHx8e3x8fH5+fn5/gH+AgIB/fn9+gIF/f4B/gIGAgoSEgYCAgYGAgX+AgYKBf39+f31+gH57foGSjHx9f4qAjYx+fn19fX5+fX59fHx8fn18fXx9fX1+fX1+fnx7e3t8fH18e3p7e3l6enh5e35/g4OEh4mKh4mOkI6MiYmFhISCgYKCgoKCgoGCgoKBgYGCgYKCgoGCgoKBgoKAgYGAfoCAf39+e3p5e319eHx6f3KBfXt7fXx8fn59fYGCf4GBgX9/gH+AgX9/gIGCgYGFg4SCgYGCgYKCgICBg4KAf4F/fX6Afnx/f4mCf36DkYSEg4F/fn18jYd9fX59fXx/fnx9fXx9fX5+fX5/fX19e3x9fnx8e3x9enp5eXl5e3t+foCBg4eEiI+Oi4uHhYSEg4KBgoKCgoGBgYGCgoKBgoKCgoKCgoKCgoGCgn+AgIB+f39/fn5/ent5fX16enp9cX6Cent9fX19fXp4f4KAgYKCgICBgYGBgICBgoKCgoaFhIKBgYGBg4F/gIKEgX9+gYB9foF+fX5/gIB9fn+EgH5+f31+fX2KhX1+f31+fn9/fX19fH5+fn99f4B9fX18fX9/fHx7fH17e3t6enp7e3x9fn2Ag4CJjouMiISFhYSDg4GCgoKCgYGBgoKBgoKCgoKCgoGBgoKBgYKCf4CAgH9/f39+fn59eXp6fXx5d3t0e4d8dHd9fn17e3Z2fYCBgoKBgYKCgoKBgYGDg4OChYaEg4GAgICDgX+AgYSBfn6Af35+gH59fn6AgX+Bf3+Af35/gH99f39/f3+Afn9/gH58fX18fn5+foF/gH2CgHx9gIB9e319fXx8fHx8e3t7fHt8fHx9fIqLiYiGhoWFhISDgYKBg4KAgIGCg4KCgoOCgoKCgoGCgoGBg4J/gIGAf39/fn5+fn57enp8fHt2e3R3f352cnt+fnt4dnd8gIGCgoKBgoODg4OCgoODhIOFhoOCgX9/gIKAgICAg4F+foB/fX+AfX1+foCAf4J/gYGAgICBgH1/f3+AgICAgIB/fnx9fX19fn59g32AfoKAfX6AgX98fn59fX17fH58fXx8fHt8e3x9iYeHhYWHhYSFhIKCgoGDgYCAgoKDgoKCg4ODg4KBgYGBgYGCgH6AgYB/fn5+fn5+fn56e3p9goN9dXF6fHpxen59eXd0dICAgoKCgoKDhYOEg4KDhISEhISEgYGAgH6AgoB+f36Bf35+f4B9foB9fX1+gH9/gYCBgYCAgIKBfn6Af4GAf4CAgH9+fX19fnx+fn19gYR/gH9+f4GBf31/f319fn1+fn1+fHt8enx7eoCHg4SEhYSEhISDgYKBgYKBgICCgoOCgoOEg4SDg4KBgYKBgYOAfoCBf35+fn5+fX5+fnt7en6Jh354cnl9f3F6eHt4eXV1fYKDgoODg4OFhIWDg4OEhIODhIOBgH+Af4CBfn1+fn9+fn5+gH19f3x9fX6Af4CAgIKAgIGAg4KAf4B+gIF+gIGAgH9+fn5+fn1/fn6FhYGBgH+Ag4F/foGAf35/f4B/fn17ent6fHt6goWAg4KCgoKCg4GBgYCAgoGAgIKCg4KBg4SDhIKEgoGBgoGCgn9+gIF/fn1+fn5+fX59fXp7fIWEe3tzeXp8cHd1dnd5dXR6hISBhISDhIWFhoSDg4WEgoODgoCBf39/f4B9fX1+f31+f39/fn1+fH19foF/gIB/gIB/gIGDgoGAf36AgH+AgYCBgH9/f39/f4B/gIGCgoKBf4CDgn9/g4J/f4B/gX+Af3x7e3p8e3yCgH+Cf3+BgIKCgYF/f3+BgH6BgoKDgYGDg4KEgoSCgYGBf4GCgH6AgH9/fX5+fX19fn19e3t6gH94fHZ5eXtxdHh3dnh1cnmFhYKEhIKEhYWGhISChIOBg4GAgIF+f4B/gHx9fX6AfX5/f39+fX98fn5+gX+Bf39+f4B/gIODg4B/f4GBgIKBgYGAgIGAgIB/gIGAgIKDgYF/gISAfYGDhICAgX+BgYKBfXp7e3x8fH99f4B9f399fYGAgH59fX9/foKBgYKBgIKCgoKBg4KCgYB/gYKAfn9/fn99fX1+fX19fX19ent7fHZ9eXh5enJ1eXl2d3dzdYaFg4WEgoSEhYSEhIGDgoGDgX+AgX5/gH6AfX19foB+f4B+fn99f3x/f3+BgIF/f3x+gH6AgYKDgYCAgYOEgoGAgYB/gYCAgYGAgYGBg4OBgX+Ag4B+goOEgICCgYKChIJ+e3x8fHx8fX1+fXp+fX14fn9/fHx8fn5+gYCBgYCAgoGBgYGDgoGBf4CAgoB9fn19f319fX59fH19fX16e3p8dnx6d3t4cnZ5e3Z2dnN0hoSEhYSChISFg4ODgYOBgYOBgIGBfX+BfoF9fX1/f39/gH5+f359fYB/gIGBgX9+fH5/fn5/gYJ/gYGCg4eFgX9/fn6Af4CAgICAgIKCgYCAfoCCf3+BgoOBgYOCg4OFg399fX18e3x8eXp7en55e3l4f357fHt+fX1/f4F/gH6BgICAgoOCgYF/gIGBf31+fH1+fX19fX18fn58fXx5e3x4enx3endzeHd6c3Z2c3SGhISGg4KDhISDgoKCg4GCgoGAgYF9gIB+gH1+fX5/gICAf39/f3x/f3+BgIGAf359f39+fn+BgH2AgIGDg4N/f359fn5/f4CAgIB/gYKBgH9+f4F+f4CCgoCBg4KEhIaEgH59fHx8fHp5dnl5enl2eXZ+fHt7e359e399gH99fX9/f3+BgoGBgX5/gYF+fX18fX19fX19fXx+jYF8fXl7e3p5fHd4eHR1dXhyd3d0doaEhIWEg4ODg4OCgYKDgoGDgn+Bf35/fn+AfX19fH+AgIB/f39/fIB/f4GAgYCAf3yAf35+fn9/fX5+gYGCgn5/fn1+fn5+f3+Af32AgIB+fn5/gX5+gIKCf4KDgoOEh4SAgH58fXx8e3x1eXl4eHh5d3t8e3t7foV9fn1/ent+fn59foGAgIGAfX6BgH59fXx9fX19fX18e32Dgnx8ent7e3p7d3Z4dXJzdnB4eXJ4hYWFhYOEhIOChIKBgYKBgIKBgIF/fn5+foB+fX58foCAgH+AgIB7gH6AgH+BgIB/fYF/fn5/f319fX6AgYKBfn9+fn59fX5/fn9+fH6Af35+fn+Cfn6AgIF+gYODg4OGhICBfnx9fHx7fHh3e3h1eXd3eXx6e3t9kod9fH13en1+fn19f35+gH98foB/fn19fH19fX19fHt8ent9enp4e3x6ent4dHh1cXJ0cHh4cXmEhYWFg4SDgoODgoGBgoKAgYGAgIB9fn5/gH18fn1/gIGAgICAgHyAf4B+f4GAf39+gX9+f39+fX18f4CAgIB+f35+f318fn9/f358fYB/fn1+gIJ/foCAf36ChIKCg4WFgoJ+fXx7e3x8eXd8eXd4d3d4e3t7e3yFin17end6fH19fHx9fX1/fnx9fn59fXx8fX5+fX18fHt6enx7e3p5enp7enhzd3VxcXNveHdxe4WGhYWDhYKBg4OBgoGBgoCBgICBgH5/fn9/fXx+fYCBgoGAgIGBfX6Af35/gX+Af3+BgH9/f319fH1/gICAgH9/f35/fXx+f39/f319f39+fn6CgYF/gIB/foGDgoKEg4SCgn5+fHx6fHt7eXt6d3N2d3h5e3p7eXp/fnt7d3p8fXx8fH59fH19fH19fXx8fX19fX99fXx9e3l7fHx7enp6enp6eHN2dXBwcm93dnJ7hYaEhYOEgoGDgoKBgYGCgYKBgYGAf4B/f399fX9+f4CBgYJ/goF9foF+fn+Bf4B/gIJ/gIB+fH58f3+BgICAf4B/f4B+fX5+f4B/f39/gH9/f4J/gICAgIB/gYGAgISBgoKAf39+f3x9fn56fYV+dHx9enp6enx5eXp6hoV3eXx8fHx8fXx8fHx8fX19fHx9fX19fn19fX16eX18fH16enp6enp5c3V1b29xb3d0c3yFhoOEgoOCgYKBgoKCgYKBgoCCgYCAgICAgH59gH+Af4GCgn+CgX+AgX5/gYB/f4CAgn+Bf319f35/f4KAgICAgIB/gIB+fn1/gH9/gIB/f39/gH+AgICAgH+AgYCBgYGCgYCAf39/fn1/fnuBk416fH18e315e3p6eHmBgXh5e3x8fXx8fHx8fHx9fX18fH18fn1+fn59fHp8fHt8fXt5enp6eXl0dXVvb3Fwd3N0fYWGg4OCg4KAgYCCg4KAgYGCgYKBgYCAgIGAfn6Af4GAgYKCgIKCgICCfoCBgX9/gX+BgIF/fH6Af3+AgoCAgICAf3+AgH9+fX6Afn2AgIB/f3+AgICAgYCAf4CAgYCBgYKCgICAf39/fX5+fIGGiXx8fnt7fnl6e3p7jn53d3l7fHt9fHx8fHt9fH19fX18fXx+fn5/f358enx9e3x9e3l6e3p5eXN0dW5zcXB4cnV6hYaDg4KDgoCAgIKCgX+CgYKBgoGBgYKAgYF/fn9/gYGCgYKBg4OAgYJ/gYGBf4CAgIB/gX99f4F/gICBgICAf4B+gICAf359foB+fn+Af39/gH9/gICBf4CBgH+BgIGCgoKAgICAgIB9foB9gIOCe35+e3t9e3p8fHyHeXh4eXx8fH17fHx9fX18fH19fn19fX5+f3+Af317fH18fHx7enl7e3l5c3J1bnZycHhxdXaFhYOEg4KCgYCBgoF/gIKCgoKDgYGDgoCCgYB/f4CCgoKBg4KEhICBgX6BgoF/gICAgH+Cf36AgYCCgICAgIB/gH+AgIB/fn2Af39/f4CAgH+AgH+AgYGAgICAgIGAgYGBgYGAgYCAgH9/gH5/fX59fn57fXx9fHx8d3h1eHh5e3x8fXx8fHx8fX5/f39/fn19fn9/gIGAf3x9fHx9e3p7eXp8eHpzcnVud3FxenF2d4WFg4SDg4KCgoKDgICCgYSDg4SBgYOBgoOCgYCAgIKDgoCCgoSDf4GAfoKDgICBgICAf4CAf4GBgIKAf4CBgH9/gICAgIB/f4CAgH+AgICAgIB/f4CBgYCAgICAgYGAgoOCgoCCgYGBgYB/gIB/gId+fnx6fXx7fX94d3Z5eXp8fHx8fXt8fH19fn5/gIGAfn1+gICAgoGAfH59fX58d3t6ent5eXNxdW53cHV6cXZ5hYWCg4KDg4KChISAgIOBhoODg4GChICEg4KCgICCgoSBgYKBg4J/gIB/gYOCgYCBgYCAf4GBgYGAg4B/gIOCf35/goGAgH9+gYCBf4CAgYGBgYCAgIKBgYKBgX+BgYGBgoOCgoOBg4OCgYCBgH+AhH19fXt/fXp9f3t6dnp4eXt7fH19e3x9fX19fn+AgYGAgH+AgICDg4B9f35+fn15eXt6enp5c3J1b3dxd3lzd3uFgoKCgoOEgoOEg4CAg4OGg4ODgoKEgYSDgYOAgIKBhIGCgoGCgX6AgICCgYKBgYKCgIGAgICCgoGEgH6Bg4J/foCDgoCBf4CCg4KAgYKBg4KDgoGBg4KChIGAgYOBgYKEg4KEhIODhIODgYGBgoCCf4B/fYB8enx/e3t3fHl5eXt6fX59fHx8fH1+foCBgYCAgIGBgYSEgH2Af39/f357e3t6e3p0cHhyeXR2eHR3e4SCg4KDg4SChIODgYKDhIaEgoODgoSChIOBg4CBg4KCgoKCgIKAf4GAgIKBgoGCgoKBgIGBgYOCgoOAfoGDgX9/gYSEgYN/goKBg4KCgoGEg4OEgYKEgoOCgoGCgoOBg4SDhISEhISFg4SCgYOCgoOBgYGAgH58fIB9fHh8eXp5enx9f3x7fHx9fX18fICAgICAgYGBgYKBfoGAgICAf3t7e3p6enVweHd5dnV8dXZ8gICDgoODg4OEhISAgoOGhYWDg4KDhIKEhYKCgYKDg4GCgoKAgYB+gYCBgYKDgoKCgoGAgYKChIKCg4B/gYOCgICChIODgoGCgoGDgoKDg4ODg4SAgoSDg4OBgX+Bg4KDhYKEhISEhISDhISChIOEhIKBgoGBgHt9gX59eXx6enp9fHyBfXp8fH19fHp7fn5+gIB/gYGAgICAgIKBgIB/fX18fX18dnJ2eHh2dH92dX2Hh4OChIWDg4SFhICChYWEhIOCg4SEgYSFg4KCgoODgYOCgoCCgH2AgIGCg4KCgoKEgoGCgoOEgoKBgICBg4KAgYOFhIOCg4CCgoOCg4ODg4OEg4CCg4KEg4KCfoOBgoSEgoODhISEhIOEhIOEg4WEg4ODgoKAe4CBf3x8fXp6fH2AfX9/fHx6fH59fH19fn5/f39/gICAgH9+foCBgICAfnx9fX5/fn18fHh2f3Z3f4SHg4KDhoODhIaEgYKFhoWEhIODhISChIWFgoKDg4SCg4KDgoKBfoCAgoKDgoODg4SDgYKCg4OCg4GCgYGDgn+ChISDg4KEf4KEg4ODgoSDg4SCgIOEg4SDg4KCg4KChIOCg4OEhISEhIWEg4OEhYSFhIOBgoB9gYKAfXx8e3x8gH19foB+fn1/fnx8fH19fn5/fn+BgYGBgH99fX6BgYB+fn19fX59fX5+f3+AfH2AgYKCg4OFg4SDhoSBgoiHhYSDg4SEhYGFhYWDg4SDhIODgoOCg4F+gYGDg4SCg4OEhIOCg4KEg4ODgoKDgYOCf4KDg4ODgoOAgoWDg4ODhIODhIOBgoSEhYOCgoODg4GEhIGDg4SDg4SEhYSEhIWFhYWEg4ODf32BhIB9fXx8fHx/gX5/f39/fX99e3x9fX19fX5+f4CBgIGBgH59fH6Cf39+fn5+fX1/f39/gICAf4CEhIODg4WDhIOFf36CiouFhYSDgoOFgYaGhoOEhISEhIODg4OEgn+BgYODhYSFhIWEg4KEhISFhIODgoSDhYKBhISFhYaEgoCDh4SDg4OFhIWFhIGEg4OHgoOCg4GCgYSDgoODhYODhIWEhYWHh4aHhYSEhYSBf4GDf35+fH5+fX+BgH9+fHx/f358enx9fX19fX5+fn9/gIGBf319fIB/gH5+fn5+f3+BgYGBgYKAgYWFhIOEhIKEg4aAgoWFiomEhISEhYWCh4aGhISEhIWEhISEg4SDgYKDg4OEhIaEhYSDg4SEg3yDhHuBhHd5g4F9hH5+cnWDgoF2foOEgH2BdYF6hH9/f3+EhIKDg4KBg4SDhISFg4SFhoSFhn2EeXx+f4N7hYOBhIOAf31+f31+gYOBfXt/fX6Afn18fHx9fX19fH19f4B/gYJ/fX18f4GBgICAgH+BgYGBgYKDg4KChoSEhIWEgYOEhYOEhYSKiIWFhYOFhYSGhoaDhISFhYWEhYWEhIWCgoOEhYWFhoSFhIOEhYWCaICFanx7cXF8gXOGc3R0fYKDdXNxg4ZzcHVyc3SDdnt9dYF/goOAgnZ5hYCDgIR/hYSChYWCaHpyc3N8gHKBg3+Dg32BfX5+fX6Cg4J8f4F9f4B9fXx8fHx9fHx8fn1+gX+BgX99fX2AgYKBgYGBgIGBgYKBgoKCgoSHhIWEhYSBgoSGhoOFg4aIhoaFg4aGhoeGh4OFhYaFg4KFhoSFhYODg4SEhoaGhIaEg4SFhn1xe4FweXZ+g3+CbnlwdXN8dnl5hnKEg3B2eHF2dHR1cnN0dml/gG5yb3R2bnVsd217c26Ah3ltfXJzdnN2bW53bHB5bHV9f398foGAgX2Af32Af4B/fX18fHx9fH1+f32Af4CAfnx/foCBgoCBgICAgYCAgIKDgoKEhYeGhoCChYODhYeGg4WFhYaHh4SDhoaIiYaHhIWGiIeEg4WGhYWEhIOFhIKFhoaFhoWEhoWHdnB0e3BydX+HhYNtdW92b3x1coR5eYd4cXR3bndod3pucHaCcoN+b3p5eW1vbnpvb213fXiGcHF6cHJ0ZoF1fm57eXNveX+Af31+gYB/e39+fIB+gIB+foCAgYB+fn9/foF/gH9+fYB9f4CBgIB+fn+BgH9+goOCgoSFh4eEfoaEg4OFh4aEhoWFhoaIhISGh4iIhoeEhoaLioWEhoeHhYOFhYWEgoWFhYWGhYWGhYZxdXByc29zenl+g3SIdHV+iHZugnKEhnluanJ/cW1zd3x/dXR8hH54cXV3bnl1enF2eHV6eYRyaW95eHBreXN6b3p3dnZwgYB/fn5/f356fn18f31/f359gIGDg4CCg4GBhIKBf4GBgH1/f4F+f35+f4GAfn6BgoCAgoSHhoODhoSFhYaHhoWFhYWGhoiFhYaFh4eFhoSGhomIhYSJi4iGhIaFhYWDhYWEhoaGhoaFg3iLeXKIentwcIWFeIV4eWtzfnl7a3KDh4N6fG16eXl0fYB2bm+AgG90fHV3cXl9fW1+dW+DhYZ6gHJye3x1cG96a3N8bnaCgYF+fn99fXp9e3x9fX9/fn1/f4KCf4GDgYGDgYB/gICAfn9+f31/fn1/gH58fYGAfn6Ag4iEhoSFhYWFhoeFhYWFhYeHiIaEhoWHhoaFhIWFhIWFhomKh4WEhoWGhoWGhoSGhoaGhoWGh4eHhoaEhoWGh4iHhYeGhoOHhoWFg4SFhoWGhIaEg4SEhoSEgYODhISFhIWEhYSGg4WGhYWEhIWHhoSEhYaFhX13hoOEhIOCgX1/fnt8e357fHx9f359fH9+gYB9f4F/f4GAfn5+gH5+f35+fX99fX5/fHt8f358fH+BiYaFhIaGhoWGhoWFhYWGhoeIhoSGhYeFhYWDhIWGhYSGhoaGhYSGhIWGhoaGhIeGh4eGhYeIiIiIhoSHhYaGiIaFiIeIhYeGhoiFhYaHhYaGhYOChYWGhYWDhYSEhIWEhoWEhYWDhoaFhoWEhoeGhISFhoOFhIKEg4OFg4OBfYB/e3t8fnt8fH1/fnx8fn2Afn1/gH5+gH99fXyAfX5+fn5+f3x8fX57fHx/fHt7fn+Ih4SEiIaGhYeGhYWEhoaGhoiHhIWGh4aFhIODhIaFhIeFhoaFhYaEhYaGh4eFh4aJiIaGiIeIiYiFhYiFhoeGh4aHhoeFh4eGh4WFhoeFh4aFgoOFhoaEhIOEhIOEhoSGhYWFhYOGhoWGhYSGhoWEhIWFg4SHhYOCg4SDhIJ+gYB8e31+e3x7fn59fHx+fX5+fX9+fX1+fnx9fH98fn58fYGAfHx8fXx8fH56e3t8foiHgoWIh4eGhoaGhISGhoeGiIaEhYSHhoSFh4OEhYSFh4SFhoaFhoSGhoeHhoaHh4mIhoaIh4iKiIWHiIWHh4WHhoeGh4WIiIeHhYaGh4WGhoSBhISFhoWFhISEg4SFhIaGhoWGhIaFhoaFhYaGhYSDhISDg4eDhIGChIWDgYCAgHt7fn18fHx+fXx8fH19fH18fn18fX18fHx8fXx+fXt8gX99fH18fnx8fHp6fHx9iIeChoiHhoeGhoaDhYaFhoaGhYOFhIaFhIiJg4GEg4SGhIaGhoaGhIeHiIiHh4eIioiGh4iHiImIhYiHhYaGhoeHh4WHhoiIh4eFh4eHhYaHhIKEg4SGhYeFhISEhISFhoaGhoaFh4WFh4WGhYaFhIOEg4OEh4GDgIKDhIKCgn+Ae31/fXx8fH59fH19fH57fHx7fHx9fXt7e318e359e3x/fX18fX1+fXx6ent7fHyIh4KGhoaGh4aGhYOFhoWFhYWEg4WChoSDiId/enqChYaEhoaFh4aEh4eIiIiHhoiKh4aHh4eIiYeFiIeFh4eGhoeHhYeGiIiHhoWHh4iGhoeDg4SEg4aGh4WFhISEhYaGhoaGhYaHhoaIhoaEhoWDg4ODgoOGgYN+goKDgIOCf398f39+fHx9f318fX18fnt7e3p7fHx8e3t7fnt7fXt6e358fHx8fX5/fXt6fHp8fImHg4aFhoWGhoWEhIWFhYWFhIOBhIGGhIKEhHyAhn+ChYWGhYWGhYSHh4iHiIaFiYqHhYeGh4eIh4WIhYaHiIaGh4eGh4aIiIeFhoeGh4WFiIOEhoWDhoaHhoWEg4WFhoaGhoaFhoaHhoeHhYOFhYOBgoKBhIWCg36BgoF/g4F/fn5/fn98fH1/fXt9fXx+enp7eXt8fXt7e3t+fHx8fHp7fXx8fHx+fYF8e3t7e3x7iYeEhoSGhIaGhYSFhoWEhIOEgoCDgYaDgYJ/eoSMe4CEhYeGhoaFhIeIh4aHhYWHiYeEh4WGhoiGhYeEhoeIhoaIh4eHhoeIhoSGhoaHhYWHg4SFhIeGhoeFhYSDhYWGhoeGhoWGhoaFhoaEg4SFgoGCgYCEg4OCfYGBf36DgX5/f4B8f3x9fX59e319fH15enp5e319enp7e318fXx8enp9fHx9fH5+gHt7e3x+fXyIh4WGhYeEhoSFhYWFhYODgYOBgIKBhYJ/gH9/fXx7gYSFhoaEhYSEh4eGhoaFhIaJhoKGhIaGhoWFh4WHiImGhYiHiYeGhoeFhIaFhYeFhIeDhIWEiIaGh4WFhYKFhYaFhoaHhIaGhoaFhoKDg4WAgIGAgIOBg4B8gYB+foKAfYB/gXx/fH1+fX57fn18fHl6enl6fX15enp7fHt8e3t6e319fH18f35+fHt7fX59fIiGhYaGhoSFhYSFhYSDgoKAgoGAgIGDgX5+foB5en2Ag4OFh4WEg4OHhoOEhYSChYiFgoSDg4WFhYWHh4aIiIaFiIeJh4aFhYWDhoSFh4OEhoSEhYSHhoWGhYaEgoWFhoaGhoaEhYaGhYWFgoKDhH9+gICAgYCDgHuBf31+gn5+gH6Afn99fX59f3t/fXt6eXp6eXp8fXl6ent7enx7e3t7fH19fXyAfn18fHx/fnx7h4WFhoaGhoSFhIWDhYKBgICAgYB+f4KCfX1/f3t/f4KDg4WGhYSDg4aDgYOEgoCFh4WCg4GBg4SEhIaGh4eHhYWIhomHhYSEhIKFg4SGgoOFhISGhIeGhYWFhoOEhYSFhoWGhISFhIWDhYSAgIKDf35/f39/gIN/fIB9fX+CfYCBfn6Bfn5+fX1/e398e3p5enp5ent8eXp6e3t7fHp7e3t8fX19fYB9fXx8fYB/fXyGg4aGhoaFg4SDhoKFgYGAf3+AgH5/gYJ8fn9/foCAgoKChISDg4GChIGAg4KBgISFhIKBf4CCg4OEhYWHhoaEhYeFh4WGgoOCgoOCgoWBg4WEhYaEhoaHhoaFgoSEg4SFhYWDhIODhIKEhIB/goJ/fX5/fn5/hH57f3x8gIF9gYB9foN9fn59fX57fnt7enl7enl6ent5enp6e3t8enx8fHx+fn1/gXx9fHx9f4B+gIaEhYWEh4SEg4KGgoOAgYB+fn+AfX9/gnx9f39+fn+BgYKEg4KBgYKCf4CBgoCAgoWEgoB/gIGCgYOFhYeFhISGhoOFg4WBgoGBgoGCg4GChISEhYWGh4eGhYWEg4ODhIWFhIGDgYOChIODgH+AgX59fX5+fH6Dfnx+fHyBgH6Cf35/gnx/fn19fHx8e3t6enp6eXt5enp5enp6e3x5e317e35/f4GAfX59fX1/gICAhoSEhYSFgoSCgoSCgoCBgH59fn9+fn6AfX2Af35+foGBgoODgoSHgYF+gICBf3+ChIOBf35/gIJ/goWEhYOCg4WFgoSBg4CBgIGBgYKBgIGEg4OGhYWHh4WEhIWCgoKDhYSCgYGBgYCFg4F/foB/fnx9fn18foN9e358fYF/gIN9fYCBf35/fXx8fH17e3p5enl5e3l6enl6ent7e3p7fXx8f3+BgoB+gH+AgH+AgIDKysrKysrKysrKysrLy8vLy8vLy8vLy8zMzMzNzc3Nzc3Nzc3NzczMzMvLy8vLy8vLy8vLy8vLzMvLy8vLy8vLy8vLy8vMzMzMzM3Nzc7Oz8/Pz9DQ0NHR0dLS0tLS0tLT09PT0tLS0tLS0tPT09TU1NTU09PT09PT09PT09PT09PT09PT09PT09PT09PT09PS0tLS0tLS0tLS0tPT09PT1NTV1dXV1dXV1dXV1dXV1dXV1NTU1NTT09PT09PT09PT09TU09PU1NTU1NTU1NTU09PT09PS0tLS0tPT09TU1NTU1NPT09LS0tLS0tLR0dHR0dPHhnNlYFtLWWdVTUZIQD03Nzg5Nzw8PDo8Oz42Oj04PDs6OTg3ODs7Oj87PTs8PD47P0E/QkJBQ0RFREE+PTw7QENDQUBDQ0FBR0hHSUtSwtXS09PT09TU1NTU1NTU1NTU1NXV1dXV1dXV1dXVysrKysrKysrKysrKy8vLy8vLy8vLy8vMzMzMzMzNzc3Nzc3Nzc3MzMzMy8vLy8vLy8vLy8vLzMzMy8vLy8vLy8vLy8vLzMzMzc3Nzc3Oz8/P0NDQ0NHR0tLS0tLS09PT09PT09PT09PS09PT09TU1NTU1NTU09PT09PT09PT09PT09PT1NTU1NTU1NTT09PT09LS0tLS0tLT09PT09PU1NTU1dXV1dXV1dXV1dXV1dXV1dXV1NTU1NPT09PT09PT09PU1NPT09TU1NTU1NTU1NPT09PS0tLS0tPT09PU1NTU1NTU09PT09PS0tLS0tLR0dHSzIxyZ2BcTVllUktHSz87Mzc4Ozg5Pj05PDpBOjs9Nzs8PDo6Nzg6Oz0/Oz88PTw/Pj9BPUFBPkNDREJAQT46Oz9DREFDRERCQklHSEhJTr7V0tPT09TU1NTU1NTU1NTU1NXV1dXV1dXV1dXV1crKy8vKysrKysrKy8vLy8vLy8vLy8vLy8zMzMzMzM3Nzc3Nzc3NzMzMzMzMy8vLy8vMzMzMzMzMzMzLy8zMzMzLy8vLzMzMzc3Nzc3Ozs/P0NDQ0NDR0dLS0tLS09PT09PT09PU09PT09PT09TU1NXV1dTU1NTT09PU1NPT09PT09PT1NTU1NTU1NTU1NPT09PS0tLS0tLS0tPT09PT1NTV1dXV1dXV1dXV1dXV1tbV1dXV1dTU1NTT09PT09PT09PU1NTU09TU1NTU1NTU1NTT09PT0tLS0tLT09PU1NTU1NTU1NTU09PT09PT0tLS0tHR0s+Sd2hfXk9XZ01LRks9ODc2NTk5OTw+OT88Qzo7PDc5PD07OTc5Ojw9QDs+PT47PD48PT5BQD5EQ0NDP0E9Ojs9QkNFQ0NEQT9FSEpJSky61dPT09TU1NTU1NTU1NTV1dXV1dXV1dXV1dXV1dXLy8vLy8vLy8rKysvLy8vLy8vLy8zLy8vMzMzMzMzNzc3Nzc3Nzc3MzMzMzMzMzMzMzMzMzMzMzczMzMzMzMzMzMzMzMzMzc3Nzc3Ozs/Pz9DQ0NDQ0dHS0tPT09PT09PT09TU1NTT1NTU1NTU1NTV1dXU1NTU1NPU1NTU09PT09TU1NTU1dTU1NTV1dTU09PT09LS0tLS0tLS09PT09TU1dXV1dbW1dXV1dXV1tbW1tXV1dXV1NTU1NTT09PT09PT1NTU1NTU1NTU1NTU1NTU09PT09LS0tLT09PU1NTU1dXV1dTU1NTT09PT09PT0tLS0dHRmn5nYWJOVWpKSElLPzw6OTM3Njc2PTs+Oj06Ojo4ODo7Ozg4Ojs7PD46PT09Ojw/PD0/QkA/Q0RDRD5APT08QENEQ0JEQkQ+REhJSUtMttfT09TU1NTU1NXV1dXV1dXV1dXV1dXV1dXV1dXVy8vLy8vLy8vLy8vLy8vLy8vLy8zMzMzMzMzMzMzNzc3Nzc3Nzc3Nzc3MzMzMzMzMzMzMzMzNzc3NzczMzMzMzMzMzMzMzc3Nzc3Ozs7Pz8/Q0NDQ0NHS0tLT09PT09PT1NTU1NTU1NTU1NTU1NTV1dXV1NTU1NPT1NTU1NTU1NTU1NTU1dXV1NXV1dXV1NTU09PT09PS0tLT09PT09PU1NXV1dbW1tXV1dbW1tbW1tbW1dXV1dXU1NTU1NTU1NTU1NTU1NTU1NTU1NXU1NTU1NTT09PT09PT09PU1NTU1dXV1dXV1dTU1NTU09PT09PS0tLR0p+DaV9kU1hsSEhIS0A9Nzg0NzY6Oj87RDw8Ojw8OTg6OTo6Ojs8Ojo7OT49Pjk9QDs/QUFCP0JCQUM9Pz8+PEBCRUNDQkBBO0ZJR01MSbLY09TU1NTU1NXV1dXV1dXV1dXW1tbW1tbV1dXW1svLy8vLy8vLy8vLy8vLy8vLy8vMzMzMzMzMzM3Nzc3Nzc3Nzc3Ozc3NzczMzMzMzMzMzc3Nzc3Nzc3Nzc3Nzc3Nzc3Mzc3Nzs7Ozs7Pz8/P0NDQ0NHS0tLS09PT09PT09TU1NTU1NTU1NTU1NTV1NXV1dTU1NTU1NTU1NTU1NTV1NTU1dXV1dXV1dXV1dTU1NTU1NPT09PT09PT09PU1NXV1dbW1tbW1tbW1tbW1tbW1tbV1dXV1dTU1NTU1NTU1NTU1NTV1NTU1NXV1dXU1NTU1NTT09PT09PT1NTU1dXV1dXV1dXU1NTU1NTT09PT09LS0tSjiGxfZlJWakdIR0lBPjM2Njo7PDhDPEJBPjtBPDg5Ojw6Ojw8PDk8PTo7PD09PD89QD9AQT9AQUBCPD4+PzxCQ0NDRkBBQT1ISklOTUeu2NPU1NTV1dXV1dXV1dXV1dbW1tbW1tbW1tbW1tbMzMvLy8vLy8vLy8vLy8vLy8vMzMzNzc3Nzc3Nzc3Nzc3Nzc3Nzs7Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Ozs3Nzc3Nzc3Nzc3Nzs7Ozs7Oz8/P0NDQ0NHR0dLS0tPT09PT09TU1NTU1NTU1NTU1NTU1NTV1dXV1dTU1NTU1NTU1NTU1dXV1dXV1dXV1dXV1dXU1NTU1NTT09PT09PT1NTU1NTV1dbW1tbW1tbW1tbW1tbX19bW1tXV1dXV1dXV1dXV1dTU1NTU1dXV1dXV1dXU1NTU1NTU09PT09PT1NTU1NXV1dXV1dXV1dXV1NTU1NPT09PT0tLWroprY2VSWGhMSkdJQjg0OTQ6Ozo5QDk+Q0U/PDw5OTk9Oj07PDw6PTw7OTw9Ozs/PUA9PT5AQD9CQT5APD05QERDQkFBQj48SEpLTU5IqNnU1NXV1dXV1dXV1dXW1tbW1tbW1tbW1tbW1tbWzMzR09PT09PT09PT09PT087Ky8vLzMzMzMzMzMzMzM3Nzc3Nzc7Ozs3Nzc3Nzc/Pz8/Pz8/Pz8/Pz9DQ0dHR0dHR0dHR0dHS0tHV2djY2NnZ2dra2tvb29vZ2dnZ2dna2tra2tra2tjW19fX19fX19jX19fX19jZ2NjY2NjY2NjZ2dnZ2NfX19fX19jX19fX19fW1NPT09PT09TU1NTU1NXV1dXV1dXV1dXV1dXW1tbX1tbW1tbV1dXV1dXV1dXV1dTU1dXV1dXV1dXU1NTU1NTU1NTU09PU1NTU1NXV1dXW1dXV1dXV1dTU1NTT09PT09PS1bqKa2hoUlhlSUlMTkA5OTo0O0E8Nz05QUM9QD89ODo6Ozk9Oz4/Ojs8PDo7PDo7Pj1APT8/P0FAQUE/QTw8Oz5BRENBREA9PElJSk1ORqPa09TV1dXV1dXV1dXW1tbW1tbW1tbW1tbW1tbW1szNhG1wcHBwcHBwcHBwcGqn493d3t7e3t7e3t7e3t3S0NDQ0NDQ0NDQ0NDQ0ci5ubm5ubm5ubm5ubq6t6WkpKSkpKSkpKSkpKSnhmBjY2NjY2NjY2NkZGRlhIuKioqKioqKioqKioemuri4uLi4uLi4uLi4uLepp6enp6enp6enp6enpq65uLi4uLi4uLi4uLi3vdPT09PT09PT09PT09PT2+Li4uLi4uLi4uLj4+Pi2NfX1tbW1tbW1tbV1dXV1dXV1dXV1dbW1dXV1dXV1dTU1NTU1NTU1NTV1dXV1dXW1dXV1dXV1dXV1NTU1NTT09PT09XDkXFrak5TYkxMVk08Ojo3Nz5DPjg+Oj8/QTw/QDc7Ojs7PTs+Pjo7PD48Oz07PT8+QDw/Pz1AQEBBPj88PjxAQUVCQkZAQD9HSEpLT0ae2tXV1dXV1dXW1tbW1tbW1tbW1tbW19fX19fX19fMzk4mKysrKysrKysrKysiivTr6+rq6urq6urq6uvp1dLS0tLS0tLS0tLS0tTEqaqqqqqqqqqqqqqqq6aGhIWFhYWFhYWFhYWFik4MEhISEhISEhISEhIRE0pUU1NTU1NTU1NTU1NPg6ejo6Ojo6Ojo6Ojo6OghoSEhISEhISEhISEhIKSpaOjo6Ojo6Ojo6OjoqvT0tLS0tLS0tLS0tLT0d/q6uvr6+vr6+vr6+vr6dnX19fX1tbW1tbW1tbW1dXV1dXV1dbW1tbV1dXV1dXV1dXV1dTU1NTV1dXV1dXW1tXV1dXV1dXV1dXU1NTU1NTU1NPUy5h2bGlKTl9NUlVNPjw8Nzs/Qz42Ojc+Pzs8QkA4PDk9Ozw6PD07PTs9Ozs9PD0+PT07QT08QUBBQT08Pzw7QEJDQURFPUFAQ0ZLS09GmNzV1dXV1dbW1tbW1tbW1tbW1tfX19fX19fX19fXzc5SKzExMTExMTExMTExJ43z6enp6enp6enq6unq6dXS0tLS0tLS0tLS0tLUxaqrq6urq6urq6urq6yoiIeHh4eHh4eHh4eHh41SEhgYGBgYGBgYGBgYFxpOWVdXV1dXV1dXV1dXU4WopKSkpKSkpKSkpKSloomHh4eHh4eHh4eHh4eFlaakpKSkpKSkpKSkpKOs0tLS0tLS0tLS0tLT09Hf6urq6urq6urq6urq6unZ19jX19fX19fX1tbW1tbW1tbW1tbW1tbW1tbV1dXV1dXV1dXV1dXV1dXV1dXW1tbW1tXV1dXV1dXV1dXU1NTU1NTU1NGcenFpSlRdT1JVTkQ+Pzs/QEA4Ojs4PDw8PD46Ojs4Ozk5Ozw7Ojw5Ozs8Ozo9PT0+PUE/Pj8/Pj08PT88PEFBQ0FERTw+QEVGSktNRpPc1dXV1tbW1tbW1tbW1tbW1tfX19fX19fX19fX183PXDk9PT09PT09PT09PTWT8Ofn5+fn5+fn5+fn5+bV0dLS0tLS0tLS0tLS08Wtrq6urq6urq6urq6vq46NjY2NjY2NjY2NjY2SXSInJycnJycoKCgoKCcpWmNiYWJhYmJiYmJiYl6MrKmpqampqampqampqaeQjo6Ojo6NjY2NjY2NjJqqqampqampqampqamosNLS0tLS0tLS0tLS09LS4Onp6enp6enp6enp6enn2djY2NjY19fX19fX19fX19fX19bW1tfX19fW1tbW1tbV1dXV1dXV1dXV1dXV1tbW1tbW1tbW1tbV1dXV1dXU1NTU1NTWo3txZElbYE5OVU9AQT89REI+Oz06OTs6PTw7PDs6OTg5OTs8Ozw8Ojo7PDo7QD08PTxAQTxBQTs7PEA/PD1CP0RDQ0U8PkJERkpMTEWN3NXV1tbW1tbW1tbW1tbX19fX19fX19fY2NjY2NjNzcXCw8PDw8PDw8PDw8PCydDPz8/Pz8/Pz9DQ0NDQz87Ozs7Ozs7Ozs7Oz87NzMzMzMzMzMzMzMzMzMvJycrKysrKysrKysrKysfCw8PExMTExcXFxsbGxsvMy8zLzMzNzMzMzMzLz9HR0tLS0tLS0tLS0tLS0NDQ0NDPz8/Pz8/Pz87Q0dLS0tLS0tLS0tLS0tLU1NTV1dXV1tbW1tbW19nZ2dnZ2dnZ2dnZ2dnZ2djY2NjY2NjY2NjY2NfX19fX19fX1tfX19fX19bW1tbW1tbW1tXV1dXV1dXV1dbV1dbW1tbW1tbW1tXV1dXV1dTU1NTU169/cF5GXmJQUVdOR0ZDQ0lBPz07PDo8N0BBPD04Ojo4OTg7Pzs8PDs7PDw8PD87PD46Pj44PkI8Pj1BPjw+QkBERUNAPD5APkNJSUtEh9zV1tbW1tbW1tbW1tbX19fX19fX19jY2NjY2NjYzs3P0NDPz8/Pz8/P0NTQ0M7MzczP09LSzs3P0s7Ozs7Ozs7O0dTPz8/T08/Pz9PSz8/Pz8/Pz8/Pz8/Pz8/P0NDQ0NDR0dHR0dHS09PU1NTU1dXV1tbW1tfW1tbX1tfX19fX19fX19bW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tXV1dXV1dbW1tbW1tbW1tbW19fW1dbW1tbX19fX19fX19fX2NjY2NjY2NjY2NnZ2dnZ2dnZ2djY2NjY2NjY2NjY2NjX19fX19jY19fX1tbW1tbW1tbW1tbW1tbW1dbW1dbW1tbW1tbW1tbW1tXV1dXV1NTV1di4gm9XSl9jUlFaS0hBQTxCPT07Oj4+PD4/PT0/ODk6OTk3OD48PD47Ozw7PDs/PT0+OTs7OT0+P0A+QD07OkI/QkNCPz0+QD5CRUdKQoDc1tbW1tbW1tbW19fX19fX19fX2NjY2NjY2NjY2M7Ozs7Ozs7Nzc3Nzsqfys3Nzc3QuYOEi8fTwJrLz87Ozs7O07udz9DQoZbL0seSq9HOzs7Ozs7Ozs7Ozs7Oz8/Pz8/P0NDQ0NDQ0NDR0dHR0tLT09PU1NTU1NTV1dXV1dXV1dXV1dXV1dXV1dXW1tbV1dXV1dbW1tbV1dXV1dXV1NTU1NXV1dXV1dXV1dXW1tbW1tbW1tbX19fX19fX19fY2NjY2NjY2NjY2NnZ2dnZ2dnZ2dnZ2dnY2NjY2NjY2NjY2NjY2NjY2NfX19fX1tbW1tbW1tbW1tbW1tXV1tbW1tbW1tbW1tbW1tbW1dXV1dXV1dXYwIBuVU9gY1dZW0xMQ0A9PTs9Ojw9Qj5CQkA8Ojg5ODo6Ojc7Pz4/PDw7PDo5Pzw8PTg5PD9BPj09PUFAPTtBQkBCQz47QD9BQUlHSkF629bW1tbW1tbX19fX19fX19jY2NjY2NnZ2djY2dnOzs7Ozs7Ozs7OzdKpj63Rzs7Ozpu3tqSiwJOerNPOzs7O0rWVm7PWp6Crn8+ZrJqy0s7Ozs7Ozs7Ozs7Pz8/Pz8/Pz9DQ0NHR0dHR0dHS0tLT09TU1NTU1dXV1dXV1dXV1dXV1dXV1dXV1dXW1tbW1tXV1dbW1tbW1tXV1dXV1dXU1dXV1dXV1dXW1tbW1tbW1tbW1tfX19fX19jX19fY2NjY2NjY2djY2dnZ2dnZ2dnZ2dnZ2dnZ2djY2NjY2NjY2dnY2NjZ2NjY19fX19fX19bW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tXV1dXV1dXV18h/b1pTYWVeXVxPSkQ9QD8+PDc6Pjk/RD5AOTg3ODk7Ozw4OT89PTw9PD47OkE7OTs5OzxDQDw7PT5AQT49QkQ/QkM9PT8+Pz5ISUg/ddrW1tbX19fX19fX19fX2NjY2NjZ2dnZ2dnZ2dnZzs7Ozs7Ozs7Ozs/Inrym0tDQzsqgl36Cw6abr6fUz8/Pz9GfoKqvypyWkKG0lYadnM3Pzs7Ozs7Ozs7Oz8/Pz8/Pz8/Q0NDR0dHR0dLS0tPT09TU1dXV1dXV1dXV1dXV1dbV1dXV1dXV1tbW1tbW1tbV1dXV1dXW1tbV1dXV1dXV1dXV1dXW1tbW1tbW1tbW1tbW1tfX19fX19jY2NjY2NjY2NjY2NjZ2dnZ2dna2dnZ2dnZ2dnZ2dnZ2djY2NjY2NnZ2dnZ2dnY2NjY2NfX19fX19fX19bW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1dbV1dXV1dfNiHNdWGloXl9gT0lGOkFAPj88PDk2P0I/Qjo2NDc6Ozo8Ojk+PD49PTs/PTxBPjw8Ojw8PTw6PEA9QEI+PkFCPUNDPT0+Oz9BRUtIQHDZ1tbX19fX19fX19fY2NjY2NjZ2dnZ2dnZ2dnZ2c/Pz8/Pz87Ozs7SrKWnqdXAvNLHnY+ey9PJipmq1M/Pz8/RxYeas7+boKiZtb/Jl5nF0M/Pz8/Pz8/Pz8/Pz8/Pz8/Q0NDQ0dHS0tLS09PT1NTU1dXV1dXV1dbW1tbW1dbW1tbW1tbV1tbW1tbW1tbW1dXV1dXV1dXW1dXV1dXV1dXV1dXW1tbW1tbW1tfX19fX19fX19fX19jY2NjY2NjY2NjY2NnZ2dnZ2dnZ2tnZ2dnZ2dnZ2dnZ2dnZ2dnY2dnZ2dnZ2dnZ2dnY2NjY19fX19fX19fX19bW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbV1dXW0JB1W1tqaWFeXVNOSTxDQEE+QD46OEVAP0M6NzQ5Ojo5Ozs4Oz0/Pj49QT08P0A9Pjw8PDw8Oj1AQD8/PT5CQD9AQkA8QD0+QUVLRz9r19fX19fX19fX2NjY2NjY2NjZ2dnZ2dnZ2dnZ2tnPz8/Pz8/Pz8/QzJ2Nl6zQmpfKxZ6ynpbN1q2ZqtTPz8/Pz9anmbLMo6CLn8TTkZmhz9DQ0M/Pz8/Pz8/Pz8/Pz8/P0NDQ0dHS0tLT09PT1NTU1NXV1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbV1dXV1dXV1dXV1dXV1dXV1dXW1tbW1tbW19fX19fX19fX19fY19fY2NjY2NjY2NjY2NjZ2dnZ2dnZ2drZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2djY2NjY2NfX19fX19fW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1dXV1tKUcl5ea2tqZV1PTEc/RENDQDo9OzxCPD09OTY0Ojk5Ojo5Nzs/QDs8PUA8PEE+PD07PTw/PDo8Q0A+PTs9QD5CPkBBPkA9QD9GSUQ/ZtXX19fX19fY2NjY2NjY2NnZ2dna2tra2tra2traz8/Pz8/Pz8/P07GigJuvyaCjv8qcpYynrdiqmarUz8/Pz8/VpZmx2ZjHyZTYraO/ntXR0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NHR0tLT09PT1NTU1NXV1dbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1dXV1dXV1dbW1tXW1tbW1tbV1tbW1tbX19fX19fX19fX19fX2NjY2NjY2NjY2NjY2NjY2dnZ2dnZ2dna2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2djZ2djY2NjY2NfX19fX19bW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbSk3BgXnBoZmVaUUhHQkVDQEA3Ojo8Pjo8OTc2NTk6Njo8Ozc8QEA8Ojo9Ojw/Pj08OUA8PDo6OT9APT08PUBBQz9APz5BOz9ARkpCP2LS2NfX2NjY2NjY2NjY2dnZ2dnZ2tra29vb29vb28/Pz8/Pz8/P0M6fkGyclteqo9PSrqa1mJ/Vqpmq1M/Q0NDQ1qWZs8iclZWku82IlZ7I0tHR0NDQ0dHQ0NDQ0NDQ0NDQ0NHR0tLT09PT1NTU1dXV1dbW1tbX19bW1tbW1tbW1tbX1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tfW1tfX19jY2NfX19fX2NjY2NjY2NjY2NnZ2dnZ2dnZ2dnZ2dna2tnZ2dnZ2dnZ2dnZ2dnZ2dnZ2djY2dnZ2dnZ2dnZ2dnZ2NjY2NjY2NjX19fX1tbW1tbW1tbW1tbW1tbX19fX19fW1tbW1tbX0pNuYFxxZGdkWlVKQENGQ0FBODs/PD07PDw3NTU4OTY4Ozo5PDo+Pzw9PTk8Pz49Ojo+OTw6Ojg+Pzw9PTw+QEFDQT48PDpCRERKRkJd0NnX19jY2NjY2NjY2dnZ2dna2trb29vb29vb29vPz8/Pz8/Pz9G9n8O31pfA09HQ0srSzZeb1KqZq9XRz9DQ0NWlmrexmq+znaXQ26OZtdXR0dHR0dHR0dHR0NDR0dHR0dHR0tLT09PU1NTV1dXV1tbW1tfX19fX19bW1tbW1tfX19fW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW19fX19fY2NjY2NjY2NjY2NjY2djZ2dnZ2dnZ2dnZ2dnZ2drZ2tnZ2dnZ2dnZ2dnZ2dnZ2djY2NjY2NjZ2dnZ2dnZ2dnZ2dnY2NjY2NjY2NfX19fX19fX19fW1tfX1tbX19fX19fX19fX19bW19GRbF1cb2doYl1PRj9ISEdFQDw8Pj48PT08NzU2Ojk2OTs6Ojs4QD86PDw5PD49Ozs6Pzk/Ojs5PT49Pjw7PTxAQ0I/Pz47Q0ZGR0hEWc3a2NjY2NjZ2dnZ2dnZ2dna2trb29vb29vb29vb0NDQz8/Pz8/Pz5V+e6WS1KKa08ySl6ObodirmavV0pem09DVpZm3sZ6bopyckaeYnrvV0dHR0dHR0dHR0dHR0dHR0tLS0tLS09PU1NTV1dXV1tbW19fX19fX19fX19fX19fX19fX1tbW1tbW1tbW1tbX19bW1tbW1tbW1tbW1tbW1tbW1tbW1tfX19fY2NjY2NjY2NjY2NjY2dnZ2dnZ2dnZ2dnZ2dnZ2tra2tra2tnZ2dnZ2dnZ2dnZ2djY2NjY2NjZ2dnZ2tnZ2dnZ2dnZ2djY2NjY2NjY2NjX19fX19fX19fX19fX19fX19fX19fX19fX1tfPjGRWXnBrXGBgTkVITUlJT0M+OkI9PUBDOzU1Nzw6Nzo7Ojo7OT09OTo6OT0+Pz07OT47PDo8Ozk+PD47PD0+QENCPz5BPEFDR0ZGRVXJ29jY2NnZ2dnZ2dnZ2dra2tvb29vb29zc3Nzc3NDQ0NDQ0M/Pz9DR1aeZrcmjqL7KnbGdo7XZqZup2LirocfS1qOassmdqKGjnqiiqZ3Q09LS0tLS0tLS0tLR0dHS0tLT0tPT09PU1NTV1dbW1tbX19fX19fX19fX19fX19fX19fX19bW1tbW1tfX19fX19fW1tbW1tbW1tbX19fW1tbW1tbW1tbX19fX2NjY2NjY2NnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dra2tra2tra2trZ2dnZ2dnZ2dnZ2djY2NjY2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnY2dnY2NjY2NjX19fX19fX19fX19fX19fY2NfX19fX19fYzYZdV2JvZE9dVEtIRlNRS0xAPj1EPD9DRj01NTc7OTY6Ozo8PTo7Pzo6OTg6PT0/Pjs/Oz49Ojs5Pjs9PD0+QURCQD8+PzxAQUVHRURSxdvY2dnZ2dnZ2dnZ2tra2tvb29vb3Nzc3Nzc3NzQ0NDQ0NDQ0NDQ0NO5gL3Tm5bP1LWLkZ/T1LyBu9TOlKDT0dW1gsPXr42RpdSako6+1tLS0tLS0tLS0tLS0tLS0tLT09PT09PU1NXV1dbW1tfX19fX19fY2NjY19fX19fX19fX19fX19fW1tbX19fX19fW1tbW1tbW1tbW19fX1tbW1tbW1tbX19fX19jY2NjY2NnZ2dnZ2dnZ2dnZ2tnZ2tra2tra2tra29ra2tra2tnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2NjY2NjX19fX19fX19fY2NjY2NjY2NjY2NfX2ct+WlVqaltMX01KTEpVTEZCPDw/R0VHS0g9NTU3Ojk3OTo7Ojw9OT45OTo4Oz0+PkE+PTk8PDo9Pj46PTk5Oj9FQUA+PT8/QkBHRURFUMHc2dnZ2dnZ2dna2trb29vb29vb3Nzc3Nzc3dzc0NDQ0NDQ0NDQ0NDQ0cHR0crI0tDUxLjS0tHSwtLQ08fM0tHR0cLU0tXAvdbU07nI1dLS0tLS09PT09PT09LS0tPT09PU1NTU1NXV1dbW1tfX19fX19fX2NjY2NjX19fX2NfX19fX19fX19fX19fX19fX1tbW1tbW1tbW1tfX1tbW1tbW1tbW19fX19fY2NjY2NjY2dnZ2dnZ2dnZ2dra2tra2tra2tra29va2tra2tra2dnZ2dna2tnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dna2tnZ2dnZ2dnZ2djY2NjX19fX19fY2NjY2NjY2NjY2NjY19rHd1xSZ2laTlpOTFBRV0VKPz89P0FFTExBPjY3NTs4ODk5Ojs8Pjw+ODo6OTs+P0A9Pj46NTo6Oz0/Ojs5Ojw+QkJAPz8/P0FCR0RDRE683dnZ2dnZ2dna2tvb29vb29vb3Nzc3Nzc3d3d3dDR0dDQ0NDQ0NDQ0NDS0NDR0dDQ0dPU0dHR0dPR0dHS0tHR0tLU0tLS1NXT09PW1NLS0tPT09PT09PT09PT09PT09PU1NTU1dXV1dbW1tfX19fX2NjY2NjY2NjY2NfX19jY19fX19fX19fX19fX19fX19fX1tbW1tbW1tbX19bW1tbW1tbW1tfX19fX2NjY2NjY2NnZ2dna2tra2tra2tra2tra2tra2tvb2tra2tra2trZ2tra2tra2tra2tra2tnZ2dnZ2dnZ2dnZ2trZ2tra29ra2trZ2dnZ2dnZ2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjbwXNYVWlrU0xSTlBSWVRGSTw+Qz9BQkVKPj43ODY5Nzc4OTk7Oz0/QDw9ODk7Ozs/Pjw8OTU6PT47OTk7PD8/P0JCQT1BPUBBQkZCQkJLtd7Z2dra2tra2tvb29vb29vc3Nzc3Nzd3d3d3d3R0dHR0dHR0dHR0dDQ0NDQ0NDQ0dHR0dHR0dHR0dHR0dHS0tLS0tLS0tPT09PT09PT09PT09PT09TU1NPT1NTU1NTU1NXV1dXV1dXW1tbX19fX2NjY2NjY2NjY2NjY19fY2NjX19fX19fX19fX19fX19fX19fX19fW1tbX19fX1tbW1tbW1tbX19fX19jY2NjY2NnZ2dna2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tnZ2dnZ2dnZ2NjY2NjY2NnZ2dnZ2dnZ2NjY2NjY3LxvVFRsbExLUkpUUlVLRkQ6PkdEREFERjw/ODk6OTY5OTo3PD07PkA9PTc5Ojs5Pjs5OTY2Oj1AQT47PDk6Pj9DQT4/Qj0+QkNFQkFCSrDe2dra2tvb29vb29vb29vc3Nzc3Nzd3d3d3d3d0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0tLS0tLS0tLS0tLS0tLS0tPT09PT09PT09PT09PT1NTU1NTU1NTU1NTU1dXV1dXV1tbW1tbW19fX19jY2NjY2NjY2NjY2NjY2NjY2NjY19fX19fX19fX19fX19fX19fX19fX19fX19fW1tbW1tfW19fX19jY2NjY2NjZ2dnZ2dra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2trZ2dnZ2dnZ2djZ2dnZ2dnZ2dnZ2dnZ2dnY2Ny2a1NbcGtLVVdSXFFXSEQ+PEJKRT1ISj89PDc4ODo2OTg5Njs+PD1APDw1OTk8Oj87OTk0ODw9PUFBPD47Ojw+QD89PkE9PUNGR0I/Qkmq39ra29vb29vb29vb3Nzc3Nzc3N3d3d3d3d3d3dHR0dHR0dHR0dHR0dHR0dHR0dHS0M/U0M7P0tLT0tLS0tLS0tLS0tPT09TU1NTU1NTU1NTU1NTU1NTU1NTU1NTV1dXV1dXV1dbW1tbW19fX19fY2NjY2NjY2NjY2NjY2NjY2NjY2NjX19fX19fX19jY2NfX19fX19fX19fX19fX19fX19fX19fX19jY2NjY2NjY2dnZ2dra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tvb29va2tra2tra2tra2tra2tra2tnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dndsGRTYXJfT1pUV19RUkdCPUVJS0FBTEQ/Pzs5ODg5Mzg2ODY5Pj0+Pz06Njo7Pjs9PTo5Njg6PTtAQDxAPz0/P0I+PD48PEJFSElCPkNJpODa29vb29vb3Nzc3Nzc3Nzc3N3d3d3d3d3d3t7S0tLS0tLS0tLS0dHR0dHR0dPT0bm7zLqbnLrQyNPT0tLS09PT09PT09PU1NTU1NTU1NTU1NTU1dXV1dXV1dXV1dXV1dbW1tbW1tbX19fX19fY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjX19fX19fX19fX19fX19fX19fX19jY2NjY2NjY2NjZ2dra2tra2tra2tra2tra2tra2tra2tra29va2tra29va2tvb2tra2tra2tra2tra2trb29vb29va2tra2tra2tra2tra2tra2tra2tnZ2dnZ2trZ2dnZ2dnZ2dnZ2dnZ3qpfVWBuW1VZUVpeT0xHQ0ZNSUZEREk7QUE7PDg4NjU4Njk4Nzw/QT89Ojc8Pz48Pz87OjY4OD09QEE9QD5BQD1AOjs6Pj1BRUdKQkBDR57h29vb29vc3Nzc3Nzc3Nzc3d3d3d3d3d7e3t7e0tLS0tLS0tLS0tLS0tLS0tO+wMqaoKKViJGeqpOpz9TT09PT09PT09PU1NTU1NTU1NTU1NTV1dXV1dXV1dXV1dXV1tbW1tbW1tbX19fX19fY2NjY2NnZ2dnZ2dnZ2dnZ2djY2djY2NjY2NjY2NjY2NjY2NjY2NjX19fX19fX19fX19fX19fX19fY2NjY2NjY2NjZ2dna2tra2tra2tra2tra2tra2tra29vb29vb29vb29vb29vb29vb29ra2tra2tra2tra2tvb29vb29va29vb29vb29va2tra2tra2tra2tra2tra2tnZ2dnZ2dnZ2dnZ2d6iXFVeblheXU5aUFROQ0NMSUlJRklEPEJBPDs4NzY3OTc3OTk9P0E/PDo5QD88PkI/Ojg3NzY9P0BAPUBBPz88PTs7OD48P0VJSEE/Q0aX4dvb29zc3Nzc3Nzc3N3d3d3d3d3d3t7e3t7e3tPT09PS0tLS0tLS0tLS0tTIlZyum5m1iX2TjIKBhMTV09PT09PT09PU1NTU1dXV1dXV1dXV1dXV1dXV1dXV1tbW1tbW1tbW1tfX19fX19fX2NjY2NjY2dnZ2dnZ2dnZ2dnZ2dnZ2NjY2NjY2NjY2NjY2NjY2NjY2NfX19fX19fX19fX19fX19fX2NjY2NjY2NjY2dnZ2dnZ2dna2tra2tra2tra2tra29vb29vb29vb29vb29vb29vb29vb2tra2tra2tra2tvb29vb29vb2tvb29vb29vb2tra2tra2tra2tra2tra2tra2tra2tra2tnZ2dndmlpYYW5ZYVdPV01QRUJETElNS0ZJRT5CRDk4ODY3OTc1Njk4PT1BPjo4OT4+PD9APzw1Njc2PD4/PjtAQEA/Pj4/Pjs/PkFCRkdCQENIkeLb29zc3Nzc3d3d3d3d3d3d3d7e3t7e3t7f39/U09PT09PT09PT09LS0tLTz6h+kayPko6MhoCIiYSQo8rU09PT09PU1NTU1dXV1dXV1dXV1dXV1dbW1tbW1tbW1tbW1tbW19fX19fX19fX2NjY2NjY2dnZ2dnZ2dnZ2dnZ2dnZ2dnY2NjY2NjY19jY2NjY2NjY2NjY2NjX19fX19fX19fX19fY2NjY2NjY2NjY2NnZ2dnZ2dna2tra2tra2tra2tra29vb29vb29vb29vb29vb29vb29vb29ra2tra2tra2tvb29vb29vb29vb29vb29vb29va2tra2tra2tra2tra29vb29ra2tra2tra2tna3JJaWWNuWlpSVV5QTDxAR05IUklIRT48SEY4OTc1Nzg3NTg5ODs+Pj07ODlBPj1AP0E+NzU5Njs+QUI/P0BAQUI/Pj8+QUBEQUZIQj9FSozi3Nzc3Nzc3d3d3d3d3d3e3t7e3t7f39/f39/f1NTU09PT09PT09PT09PWtaWaiIuQhYCFi4iBg4qLf4bC1tTU1NTU1NTV1dXV1dXV1dXV1dXW1tbW1tbW1tbX19fX19fX19fX2NjY2NjY2NjY2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2djY2NjY2NjY2NjY2NjY2NjY2NjY2NjX19fX19fX19fY2NjY2NjY2NjY2dnZ2dna2dra2tra2tra2tra2tra2tvb29vb29vb29vb29vb29vb29vb29vb29ra2tra2trb29vb29vb29vb29vb29vb29vb29vb2tra2tra2tra29vb29vb29vb29vb2tra29uIWltnalxYTFpfVkg6TEhMSkpDRUVDQExINzo3Njc4ODU4Nzg5PDw7Ozk4QD89Pj8/PDY3PDQ3P0JCQUBAPz8/QT09P0A+QEBGRT09REuI4tzc3Nzd3d3d3d7e3t7e3t7e3t/f39/f39/f39TU1NTU1NPT09PT09PUxZKCg4WGfYGCfXx5foGCg36k29bU1NTU1NTV1dXV1dXV1tbV1tbW1tbW1tfX19fX19fX19fX19fX19jY2NjY2NjZ2dnZ2dnZ2dna2tnZ2dnZ2dnZ2dnY2NnY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjX19fX19fY2NjY2NjY2NjY2dnZ2dna2tra2tra2tra2tra29vb29vb29vb29vc3Nzc3Nvb29vb29vb29vb29vb2tra2tra29vb29zb29zb29vb29vb29vb29vb29vb29va2tvb29vb29vb29vb29vb29vb2tvZgFpebWhaU0ldW1hKRE1ISlNMR0ZBQD9KQjg7NjY5OTc1ODY4Ozo7Ojw5OD09O0A9Ozo2NTw3Oz1CQEFBPD49QEE9PEA/Pz5CREU+PERLg+Lc3d3d3d3d3t7e3t7e3t7f39/f39/f39/f39/V1dTU1NTU1NPT09PT2LKEkKh9g3l2hIh/e3d5gn5+i67A1dTU1NXV1dXV1tbW1tbW1tbW1tbW1tfX19fX19fY2NjY2NjY2NjY2NjY2NjZ2dnZ2dnZ2dna2trZ2dnZ2dnZ2dnY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2dnZ2dna2tra2tra2trb2tra2tvb29vb29vb29vc3Nzc3Nzc29vb29vb29vb29vb29va2trb29vb29zc3Nzc3Nvb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vc1nlcWmxmWFJPYFFSQUhHSkZYTEZAQENDS0A7Ozc4ODc2NTc2ODo5PDw6PTs/PTs9Pjw7ODg8OT0/QkFCQzw8P0FCPj1BQkNCREVDQDtDTH3h3d3d3d3e3t7e3t7e39/f39/f39/f39/g4ODg1dXV1NXU1NTU1NPU0ruen3WKeXuIgICChYGDcnOAhYOMrNfV1NXV1dXW1tbW1tbW1tbW1tbW19fX19fX2NjY2NjY2NjY2NjZ2dnZ2dnZ2dnY2NnZ2dna2tra2trZ2dnZ2dnZ2djY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2dnZ2dna2tra2tra29vb29ra2trb3Nzc3Nzc29zc3Nzc3Nzc3Nzb29vb29vb29vb29rb29vb29vb29zc3Nzc3Nzc3Nvb29zc3Nzc3Nvb29vb29vb29vb29vc3Nzc3Nzc3Nvb29vb3dByXV9wZVdLUGNPS0JHQ0pIS0ZBPEE+SFBBOjo3Nzg3Njc4Nzw6OD09PD47QD88Pz07Ojs5Ojk8QEJAQkNAPUFAPz1AQkNDQUBAP0A7RU144N3d3d7e3t/f39/f39/f39/f3+Dg4ODg4ODg4NXV1dXV1dXV1NXU18h4i4V8goh6g4SBfoKCc2l0hYuGkJ3U1tXU1dbW1tbW1tbW1tbW19fX19fX19jY2NjY2NjY2NnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dra2tra2tra2dnZ2dnZ2dnY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2dnZ2dna2tra2tra2tra2tvb2tvb3Nzc3Nzc3Nvc3Nzc3Nzc3Nzc29zb29vb29vb29vb29vb29vb29vc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc29vb297KalxjcWVST1heSz9HTElPS0VAPkFBP0pPPjk6NzY7NzY6Ozc7Ojg6PDw+Oz09Oz48Ojs4OTo4OUFCQkFAQDtAQj06PkFCQz8+PT4/PUZOdN/e3t7e3t7f39/f39/f4ODg4ODg4ODg4ODg4OHV1dXV1dXV1dXV1s6dhpl+f5OTin+CgXx9gnNxm4mAgoOJwNnat7TQ19bW1tbX19fX19fX19fX2NjY2NjY2NjY2NjZ2dnZ2dnZ2dnZ2tnZ2dnZ2dra2tra2tra2trZ2dnZ2dnZ2dnZ2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NnZ2dna2tra2tra2tra2tra29vb3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nvb29vb29vb29vb29vb29vc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3NvfwGNaW21gVlBTU0pETEhNSEk8PkFDQ0ZORDw8OTc5OjY4Ozk3PDk4OTw9OzlAPjpBPzw3NTc7ODpAQUVBPz45PUI/Oz1CQkI6Pj07PT5GTnHe3t7e3t/f39/f39/g4ODg4ODg4ODg4OHh4eHh1tbW1tbW1tbV1tjLioCHhYOXjHh7e3lvfYF1a3ebdHZ7eInHxpiMrdjZ19fX19fX19fY2NjY2NjY2NjY2NjY2NjY2dnZ2drZ2dna2tra2tra2tra2tra2tra2tra2dnZ2dnZ2dnZ2dnZ2dnZ2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NnZ2dnZ2dnZ2dna2tra2tra2tra2tra29vb3Nzc3dzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nvb29vb29zb29vb3Nzc3Nzc3Nzd3dzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3d3d3d3d3Nzc3Nzc4LdjV1lrYlJNVVFMSktGS0ZDQD5CQT9FTT4+PTg5OTo3OTo3NT03Nzo+PDs7Qjw5Pz05NjY4PTk6QEJGQD49PEBCREA9QD9DO0A9PD4/Rk9t3N/e3t/f3+Dg4ODg4ODg4ODg4OHh4eHh4eHh4dbW1tbW1tbW1tfVrYZ6d32rn3l4entzdH+Dfm9xe3l6c3t2k4qFgImkzdnY19fX2NjY2NjY2NjY2NjY2NjY2NjY2NnZ2dna2tna2tra2tra2tra2tra2tra2tra2tnZ2dnZ2dnZ2dnZ2dnZ2dnZ2djY2NjY2NjY2NjY2NjY2NjY2NjY2dnZ2dnZ2dnZ2dra2tra2tra2tra29vb29vc3Nzc3N3d3d3c3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc29vb29vc3Nzb3Nzc3Nzc3N3d3d3d3d3d3dzc3Nzc3Nzd3d3c3Nzc3Nzc3N3d3d3d3d3d3d3d3dzc3OGtYVtebGJSTVZMTUdLS0RGQkI7QT08RUxCQT44Ojk6Nzc5NjY6NTs+QDs9Oz89PD89Ojk5Ojw5PEVDRkA/PkBDQkQ9OT0/QT1CPz1APkdPadvf3t/f3+Dg4ODg4ODh4eHh4eHh4eHh4eHi4uLW1tbW1tbW1tfQmH+Qh4N9eoN2e3Vzenl6kKqmd3JyfoeHh4CAfoKEhJHJzNnX19jY2NjY2NjY2NjY2NjY2NjY2NnZ2dnZ2tra2tra2tra2tra29va2tra2tra2tra2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2djZ2dnZ2dnZ2djY2NnZ2dnZ2dnZ2dnZ2tra2tra2tra2tra29vb29vb3Nzc3N3d3d3d3d3d3d3d3d3d3d3c3Nzc3Nzc3Nzb29vb3Nzc3Nzc3Nzc3Nzd3d3d3d3d3d3d3dzc3N3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3NzhpV9UYm1iUE9TSUhHRkpJSUJBPkJCPEVFREA+ODo4Ozc3Ojc4ODY+Pz07PDk9PDo+PTs6Njc7NjpEQUY+Pz8/PkNBPzs9PT47REM/PjxIT2fZ4N/f3+Dg4ODg4eHh4eHh4eHh4eLi4uLi4uLi1tbW1tbW19jYyH52doN+fnR2eIaCenl1d5yhu6GEgoCAfoeKinx/gYaMnKjO2NjY2NjY2NjY2djY2NjZ2djY2NjY2dnZ2dra2tra2trb29rb29rb2tra2tra2tra2tnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dna2tra2tra2tra2tra2trb29vb29zc3Nzc3N3d3d3d3d3d3d3d3d3d3d3d3dzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3e3t7e3t7e3d3d3d3c35pbT2drXFBRUElDT0pLR0xHSkJAP0JHREBBPDg8ODg1ODk3Njc3QEA/Ozw5Pj04PTw8Ojc4PTk/RENGPkE/QkBDPzw6Pj0/PkVEPz07S1Fj1+Hf4ODg4ODh4eHh4eHh4uLi4uLi4uLi4uLj49bW1tbW19XB3LRueHJze3B6eXaFiIR7eH2AgZiljH98fnuRhZaLhoGDgY6Rvd3Z2NjY2NjZ2dnZ2dnZ2dnZ2dnY2dnZ2dna2tra2trb29va2tva2tra2trb29ra2tra2tnZ2dnZ2dnZ2dnZ2dna2trZ2dnZ2dra2tra2tnZ2dnZ2dna2tra2tra2tra2tra2tra2trb29vc3Nzc3Nzc3N3d3d3d3d3d3d3d3d3d3d3d3d3d3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3e3t7e3t7e3t7e3t7e3t7e3t3d3d6NWFdobllQUUtISlNJTUhNSUtBQz9DRkJBRDo6PDg2NDg4NzY2Nj8+Pjo8OTw7Oj09PDw4Ozw8RERERT4/PkI+Qj84PT8/Q0NCQEE+O0xUY9Xh3+Dg4OHh4eHh4eLi4uLi4uLi4uLi4uPj4+PW1tbW1teslLZ6eHJvd5V7dHuLgHh1bn6Fg3t/hYhyfH2bnI6JioJ+g32Hk5rH1NjY2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dna2tra2trb29vb29vb29vb2tra2tra2tra2tra2tnZ2dnZ2dnZ2dna2tra2tra2tra2tra2tra2tra2tra2tra2trb2tra2tra2tra2trb29vc3Nzc3Nzc3Nzd3d3d3d3d3d3d3d3d3d3d3d3d3d3c3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3N3d3d3d3d3d3d3d3d3d3d3d3d3e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3d7Zf1lgaGxcUUtHR09LTk5PTURGQkg/Q0hEREA6Ozs4NzU3Nzc4NThAPkA7PDk8Ozw+Ojk7OTk7OUZERUI8QD4/PEBDOz5AP0A/Qj8+OjtKVWPV4eDg4eHh4eHi4uLi4uLi4uLi4uPj4+Pj4+Pj1tbX19vKhYR3cXJubniVhHt4hH95dnB4c3eLkY6CdnN9ioaId3d1d4ODfIiIk8Pb2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dra2trb2tvb29vb29vb29vb29rb2tra2tra2tra2tra2tnZ2dnZ2dna2tra2tra2tra2trb2tra2tra2tra2tra2trb29vb29ra2trb29vb29vb3Nzc3Nzc3Nzd3d3d3d3d3d3d3d3d3d3d3d7e3d3d3d3c3Nzc3Nzc3Nzc3Nzc3Nzc3d3d3d3d3d3d3d3d3d3d3d3d3d7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7f0nVZaGlqVk5KSE1OR01EUElGSD9FPUZMREM+Ozs8OTc3OTY2OTU4Pj4/PTs8QDs9PDo3Ozc5OThHREVCPUE9Qj8+QDw/QUE/QEJAPjs8S1Ri1OLg4eHh4eLi4uLi4uLi4+Pj4+Pj4+Pj4+Pj49fX19fEknuJf29sbnV2foSBg4qGfnVybWVtiIaKjoR7c4OHint4e4OPj4GEioqxztrZ2dnZ2dnZ2dna2tra2tra2tra2trb29vb29zc3Nzb29vb29vb29va2tra2tra2tra2tra2tra2tra2tra2tra2tra2tvb29va2tra2tra2tvb2tvb29vb29vb29vb29vb29vb29zc3Nzc3Nzc3d3d3d3d3d3d3d3d3d3d3t7e3t3d3d3d3d3d3d3d3dzc3Nzc3Nzc3d3d3d3d3d3e3t7e3t7e3t7e3t7e3t7e3t7e3t7f39/f39/f39/f39/f3t7e4clsW2pqalNOR0hOT0VIRk1JSUA7RD5ISUA9PDo6Ojg2ODo3Nzk0OD08PT07ODw8PDw4Njc4OTo6RUJFQT9APEI/Q0M+PkNEQUBAP0A8PUtRYdPj4OHh4uLi4uLi4uPj4+Pj4+Pj4+Pj4+Pj5OTX19fZqXaFfnx3bHB3eXh8jH2KhYB3anN0d3p9bot7fnl6foR/gIGDfnh8foeGlrbT2tnZ2dra2tra2tra2tra2tra2tvb29vb3Nzc3Nzc3Nvb29vb29vb29ra2tra2tra2tra2tra2tra2tra2tra29ra29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb3Nzc3Nzc3Nzc3d3d3d3d3d3d3d3d3d3d3d7e3t7d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3t7e3t7e3t7e3t7e3t7e3t7e3t7e39/f39/f39/f39/f39/f39/e3uO9amFpa2lRTkZNTEtKWE1OR0FAQE9BRD9AOzw4OTk5Njg2NjY4NDs+PD07OTY6Ojk6OTU4OTg5OkJERj8+Pj5AQEBCPzxBQD88Pj9BOT5KT17S4+Hh4eLi4uLi4+Pj4+Pj4+Pj4+Pj4+Tk5OTk19fX2sqKhIB5c29tcXN1d4CUeHaAfHWHhXd1cnWgmXp7d3Z5doR0bWxue3iAmouTu9za2tra2tra2trb29vb29vb29vb29zc3Nzc3Nzc3Nzc3Nzc29vb29vb2tra2tra2tra2tra2tra2tra2tra29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vc3Nzc3Nzc3Nzc3d3d3d3d3d3d3d3d3d3d3d3e3t7e3t3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3t7e3t7e3t7e3t7e3t7e3t7e3t/f39/f39/f39/f39/f39/f39/f397js2lpbmloUFBPTExPUk9LU0Y/RURERD48PDg7ODc5OTU2ODY2NzM6Pjs+PTc6Pjk5OTk2Ojo4NzxDRUc/Pzs/PkA9PkE9Oz0+OUFAQDhBTlFc0OTh4eLi4uLj4+Pj4+Pj4+Pj4+Pk5OTk5OTk5NjY2NjauY6AenZ1bmpveHCBfWt0cnZ3hIV5h4d5lY55eXp1d3pza298gHx2fYh8gLLe2tra29vb29vb29vb29vc3Nzc3Nzc3Nzc3dzc3Nzc3Nzc3Nzb29vb29rb29vb29ra2tra2tra2tra29va29vb29vb29vb29zc3Nzb29vb29vb29vb29vc3Nvb3Nzc3Nzc3Nzc3Nzc3Nzc3d3d3d3d3t7e3t7e3d7e3t3d3t7e3t7e3t7d3d3d3d3d3d3d3d3d3d3d3d3d3t7e3t7e3t7e3t7f39/f39/f39/f39/f39/f39/f4ODg4ODg4N/f39/f4qpqa2hrZFNQT0ZQVFJOSFJLPkREQ0I7Ozk6Ojg2Nzg1NjY4ODg0Oz88Pzw5PDw3Ozo6Nzo6Nzo9Q0JDPUE+Pzw5PT5BQDs8PDtFQD47Q05TXNDk4eLi4uLj4+Pj4+Pj4+Pj5OTk5OTk5OTk5OTY2NjZ1p5vdntveHh2cG50d3BwdHBzb36Jc3qGhY2EenNtcoB6hn1vg5OBdnx9g4a13drb29zc29vc3Nzc3Nzc3Nzc3Nzc3Nzc3d3d3Nzc3Nzc3Nzc3Nzb29vb29vb29vb29ra2tra2tvb29vb29vb3Nzc3Nzc3Nzc3Nzc3Nzc3Nvb29vb29vc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzd3d3d3d3d3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3d3d3d3d3d7e3t7e3t7e3t7e3t7f39/f39/f39/f39/f39/f39/g4ODg4ODg4ODg4ODg4N/f3+KgbWhma2ZVVlJHUFFOS0xMRUJIRUc9OD08Ojo3Nzg2Nzc2NTY3NDg+PD09Ojg6OD46Ozc4Nzc6Oj5DRDtDQj49OD1AQUM/Pjw+RTw+PUJNUF/S4+Hi4uLj4+Pj4+Pj4+Pk5OTk5OTk5OTk5OTk2NjY3MB2doCCfnp4eHBsdXlya399bHNvdGdoaYB/aWl4c2d+iYl4cIKGe3d9foWKvd3b3Nzc3Nzc3Nzc3Nzc3Nzc3d3c3Nzc3N3d3dzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nvb29vb29vb29vb3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzd3d3d3d3d3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7f39/f39/f39/f39/f39/f4ODg4ODg4ODg4ODg4ODg4ODg4ODflGttZm5mU1NJUFlUTEhGTkZGRUJGPTs+PDs5Nzc4NTc5NjQ1NzU4PDs9Pjo6OztAOTs7ODc6OTlAQkE8QUE/Pzk/QEJFQ0FAQEM7Oz1ES01g1uTi4uLi4+Pj4+Pj4+Pk5OTk5OTk5OTk5OTk5NnZ2tmYc3uqhJaCcnR1dn14aGx8d2h4d25rcHR5gIJ3dHyBhIJ9c3CAin94gn95g8je3Nzc3Nzc3Nzc3Nzd3d3d3d3d3d3d3d3d3N3d3dzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nvb29zc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3N3d3d3d3d3d3d3d3d3d3d3d3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e39/f39/f39/f4N/f39/f3+Dg4ODg4ODg4ODg4ODg4ODg4ODg4ODh24tubWdzY1lRTVVbV0hDSUZOS0dCRD8/Qjo7OjY2NzU2NzY0ODc2Ozw7Pj86PDk8Qjg3OTo6Ojk6QUFCQUJDQEE+PT9CQ0NEQUJGOTg9REpOYtjk4uLi4+Pj4+Pj5OTk5OTk5OTk5OTk5OTk5OXZ2drcqHGCtXiRfnNsem6EgXaCfWtoan+DeHZ8dX2FhXRmcHl9d316gIqFe318foC03tzc3Nzc3N3d3d3d3d3d3d3d3d3d3d3d3dzd3d3d3dzc3N3c3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzd3Nzd3d3d3d3d3Nzc3Nzc3Nzc3Nzc3N3d3d3d3d3d3d3d3d3d3d3d3d3d3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e397e3t7e39/f39/f39/f39/g4ODg4ODg4ODg4ODg4ODg4ODg4ODg4eDg4ODg4ODg4tiFb3FrdWFWT1VVXE9ETUY+SkdKRUQ8P0I6PDk4Njg0NTY3NDc2NDk7Ozw7OD47PEE4ODo9OD04Oj09QEBAP0FCP0A+QENCQ0FBRTc2O0RMTmPa5OLi4+Pj4+Pj5OTk5OTk5OTk5OTk5OTk5OXl29ra3Z5sbnNxhY1ybXBuf391hH5rcnZ2enN4gXhzbnVwbWt2fHmFiIB/f392coODsd/c3Nzc3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3Nzd3d3c3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3N3d3d3d3d3d3d3d3d3d3d3d3d3c3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e39/f39/f39/f39/f39/f39/f39/f39/f39/f4ODg4ODg4ODg4ODg4ODg4ODg4OHh4eDg4eHh4eHh4eHh4OLXhW1xb3ZeUldTWlpRSkhDQFFAQkQ8OT9BOjw5NzU3NDU2NjQ3NTY9PDo9PTk+OjxAODo6PDY7OTs+PUJCQjtBQkBDQEBEREM8PUA3OjxFS01l3OPi4uPj4+Pj5OTk5OTk5OTk5OTk5OXl5eXl5dPOxsB+cWxveHt2b3VuanNzbZKGeG50dG5vdIZ/b2twboJ0bXZyfY2DdnF/d3mKgabf3Nzc3d3d3d3d3d3e3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3dzc3d3d3dzc3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3t7e3t7e3t7e3t7e3t/f3t7e3t7f39/f39/f39/f39/f39/f39/f39/f39/f39/f4ODg4ODg4ODg4ODg4ODg4ODg4ODg4eHh4eHh4eHh4eHh4eHh4eHi1oZucG1xYFJZUFdfWUpMTElSP0Q9OTtCRjs6OTc0NTY1NzU0NjY2Pj07Pz45PTk7Pjg9Ozo0ODtAQENCQ0FCRkE/Q0BBQkREOz0+OTs8QkxNZODl4+Pk5OTj4+Tk5OTk5OTk5OTk5eXl5eXl5eW5t7Woc3JscHd6dHd4bXFydXd/hHRyc2xsa3F8bnBudGuBf3GAd32Eg355gHNygYqg2d3c3d3d3d3d3d7e3t3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3e3t7e3t7e3t7d3d3d3t7e3t7e3t7e3t7f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f4ODg4ODg4ODg4ODg4ODg4ODg4OHh4eHh4eHh4eHh4eHh4eHh4eHh49WHcWxqbF5YWlVXYFZWUE9QTD1BOjs8RkE4Ojg3MzY1Njk2NTg1Nz89Oz8+OT04Ozw5PTs7NTo9Q0JCPENDREREQUE/PkJDQzw9Pjg5PENLS2PN0dnh1sjY4+Tk5OTk5OTk5OTk5eXl5eXl5eXltbW2q3J5cm59f3Z1d2hqaGlwb3Zta2tnZWZxdG15gG5teXd2iHhxa2podXV5dHV/wd/c3d3d3d3d3d3e3t7e3d3d3d7d3d3d3d3d3d3d3t7e3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3e3t7e3t7e3t3d3d3d3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f4ODg39/g4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4OHh4eHh4eHh4eHh4eHh4eHi4uHh4ePVhnFwY2lhV1NZV19MUk9STUtAPjg5O0E+ODc5NjQ3Njc6NjY2NDk+Pzo8Pzo/OTo6Nzo9PDk5PEFBPTtBQ0VDRkA+Pj5BRUQ+QEE3OD5GSEpesrW4wbm1u8jg5eXl5OTl5OXl5+fn5+fm5ebm5ra2tbWOfX5weoR1cnZnYmNlbGtyb2ZpbHZtd4Z9hXlsbHd4a3ZwfH14c3V5fHd2h7ng3d3d3d3d3d7e3t7e3t7d3t7e3t7d3d3d3d3d3t7e3t7d3t7e3t7e3t3d3d3d3d3d3d7e3t7e3t7e3t7d3d3d3d3d3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4OHh4eHh4eHh4eLi4uLi4uLi4uLi4eHj1Yd1bl5uY1pUU1hXS1NLSk1SR0E4Ozs+PDk4NzU2NTY2OTY4NjY5Pzw6PT07Pzo7Ozk8PDs5Oj4+Pjs8PUFEQkNBQEBBP0JDPDw9Nzs+REVKXrG1tLW2t7e2y9rJ3uXl3eDi3tXU1tPU4OPg39+2treuh3t/bnmNenJ1bWNobGxtaXR4enF5enqIh4N6aWh9cWRvcXyGgX55e318e4an2t7d3d3d3d7e3t7e3t7e3t7e3t7e3d3d3d3d3t7e3t7e3t7e3t7e3t7e3t3e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t/f39/e3t7e3t7f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4OHh4eHh4eHh4eLi4uLi4uLi4uLi4uHh49aGdmxhb19dV1lcWlJQSEpXTEVHPUA9Ozs9OTY0NjU1NTg2NzY3OD87OT09PDw5OTw6Pjw6OTg+Qjs7Pj5AREBDRUFAQD0/QDw9PTU5PEJHRl2xtbW2uLm5ubq9uMPT0r3BwcC6u7y6u8TMxb/Dt7e3hGl1gX1ndYd5Z3Vxa2t5eHB3fH15bWl3e3h3bml1j4FwbHl4d3d9gXuGgnmAoNze3d3d3t7e3t7e3t7e3t7e3t7e3t3d3d3d3d7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t/f39/f3t7e3t/f39/f39/f39/f39/f39/f39/f39/f39/f39/f4ODg4ODg39/f39/f39/f3+Dg4N/f4ODg4ODg4ODg4ODg4ODg4ODg4ODh4OHh4eHh4eHh4eHh4eHh4eHh4uLi4uLi4uLi4uLi4uLi4ePXhXJrZ3RhW1hYX15TVVVRVUpMRj9JRDs5PTY2NDc3NTc4Nzc3ODk8PDo+PDg8Oj0+OTs8OTs5P0E8PT9DP0FARUJCQTw9Q0A6Pjw1NDlER0dasbW1tre5ubm5ubm3ubm4uLm5urq6urm5urm6u7e3uX9ucHN6b3B/eXNuc3Vsc3Z4cXFwb2tvcX6Bc2mHhIF9dHOHdW11hYmBgHJ2hafd3d3d3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7f39/f3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f4ODg4ODg4ODg39/f3+Dg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4eDg4eHh4eHh4eHh4eHh4eHh4eHh4eHh4uLi4uLi4uLi4uLi4uLi4uHj14lxa2xyW1dXXWBUUVVUUFJPSkNATUE9Ozk2NTM0NjQ2ODc3Nzk6Pjs8Pjs5PDo8PDk8PTw7PT0+PUNEREBDQkE/QD48PkE8OD06NjY6QkpIWLG1tLa2uLm5uLi5uLe3uLi5urq5ubi4uLi6uru3uKx7cnhxf3ZzfnBsbXpyZ29sbW50cHt3d3Jyd3pvhpJ2f3x8enZ5fH9zfYdyda3T393d3d7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e39/f39/f39/f39/e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f4ODg4ODg4ODg4ODg4ODg4ODf3+Dg4ODg4ODg4ODg4ODg4ODg4eHh4eDg4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4uLi4uLi4uLi4uLi4uLi4uLi49eHb2pxalVWV2FbT1FSUE5XSURESUo/Ojk6NzUzNDk1NjY2Nzg4Ojw7PD46PDo6PTw5PDw9Oz09PDs9REdEQ0E8PDw8Pj5AOzg8ODE1OkFGRVautbW1tre4uLm4uLi4uLe4ubq5uLi3t7i4ubq7t7mqcnB4d3x7e4J3aG5xam9qY2lyf21zcn54dHFsanaAeX2AgH91doB1a4qLgHaR1d/d3d7e39/f3t/f3t7e3t7e3t7e3t7e3t7e3t7e39/f39/f39/f39/f4N/e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t/f39/f39/f39/f39/f39/f39/f39/f3+Dg4ODg4ODf4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHi4uLi4uLi4uLi4uLi4uLi4uLi4uPYhm1sdGVWUFxnWE1YU1JRWUVDS1BOOzk4ODc1NTM5NTY2NzY4Nzk+OT0+OTw5OTw7Njg5OTo8QEA9PkBGQEJCQDo+PEE9Pzs7OzYxNjxCR0RQqLa1tba2tre4t7i4uLi4uLm6ubi4t7e3t7e5ure2tIlyd3h9iXxwem99c2hqbGdnbHRscXd0cWx2c3Fxd3FyfHl4g3Z7d2mLkYp9kM7f3d7e3tvY2drZ297f39/e3+De39/f3Nvc3N3e3uDg3+Dg4ODf3t7e39jS397f397e3t/f3t7f3t/f3t7e3t7e3t7e3t7e3t/f39/f39/f39/f39/f39/f39/f4ODf4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODh4eHh4eHh4eHh4eHh4eHh4eLi4eLi4uLi4uLi4uLi4uLj4+Lj4+Li4uPj4+Pi4uLi4+Lk14NoZ3VkVlVkZVdKWllXW1Q9RU1LSD04NzU3NjQzOTU0Nzc1Njc5PTo9Pjw9PDk7PDk5Oj45PD4/PkFBQ0FFRUQ+OzxBPjw5PDs3Mzc+REhFSqG2tbW1tbW2tre4uLi4t7e4uLi3tra2tra3uLm2traLfXpsbHp/cGx5dm5qaGdlcXp4b2lvb3B1c21zd4Fnb32CgYNyf3lqcHJ6f6ng393Zy8a/vL2/vsLN0tDW3tnc4NfQzcPCw8PH1dfT2dzX1NjX0MfExce9vM/Kz87Y3djO3N3c2t3T0dze39/e397e3t7e4N/f39/f39/f39/f39/f39/f4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4OHh4eLi4uLi4uLf4uPi4eLg4d7W29/Sw8rJx9Hb3OLk4eHg2dre1sbExcTN2trf5OHi4trX3st9aWZxYVleZWFNTFRLUlpMO0hNSEZBPTc2NjUzNDY2NDg3NjU2OTw7Pj46Pjk5PDk3OTs7Oj49PEBAQ0RCR0ZCQT08Q0A9OTw7Nzc3P0RGRkaZtrS1tbW2tra4uLi4uLi3uLi3s7W2t7a3t7i5tba3opdxb29waW50dnFmZWNrbmdvcm1mZ2tygWVvdnyAeGRzj39zaHFyaWVlbm+w39HFv7u5ubm5ubq6uru6vc3Gw8e/urq6uru7u8HCvcHFvby/vry7urq5ubq6ubm6w8XDucDDwby/ube/z8/U3tjc3t/g3tLa4N/f4ODg39/f39/f39/f3+Dg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODh4eDg4ODg4ODg4ODh4eHh4uLi4eDh4uLi4uHa2t3RwsPCu8XT1uDdydPDrrnAsaqrq6uwtLbJ0sXRxLG4v7Srq6usr7S0vMzE1c60tLureGxtbWBdYl9ZS1NVVFFQREBRTUhEPzo3ODU3MzE0NjQ5ODU2Njo8Oz08ODw5Njo6ODg5NzU8PDw/QEFAQkRDQkE8PkI/Pz09PTc1OD5DRUNAj7a0tLW1t7i4uLi4uLm5uLe1sautr7Oxs7OztLS0tqaei2tue3ZxeXhnY2hfcXdha25vaG99b25ja2lseHdsa4Z+bHB6dm1scG95sca8uru7urm5ubq6urq6urq6urq6urq6urq7u7q7u7y7urq6ubq7u7q6urq6urq6ubi3t7i4t7e2tbW1tbi3u8e+w8XHzcS4wMnH0tzZ2d/e3uDf39/f4ODh4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODh3Nji4uLi4eHh4OHg3tfGxtHQztTe3tPO0t/SuLi8sq2trKysrrG+ua63rKipqamqq6urqqqqq6ysuKyqqqqrq6urra6urq6urryzrayrpHlub21fXl1dVE1SU1xUSkE/UElIPjg5NjgzNzMwNDczNzg2NzY2Ojw/PDg5Ozo6Ojg5OjY1OTs8Pj9EP0NFQkNCP0BAQT9APjw3ODc6QUVEP4W4tLS1tbe4uLm5uLi3t7SurKuqqq2urq6vsLGzs7WjcG5ucm1wg311aWFlaGZkY2Rxc21td25naW1tZXBzb29zcXN8h4F6dX11n7u6uru7urq5ubm6urq6urq6ubq6urq5uLm5ubm6urq6u7q5ubm5ubq6ubm6ubm4uLi3t7e4uLe3t7a2tbW2tra1tbW1tba1t7e3t7rBvrzGycrb3+Dg3tvd3d7h4tDW4uHg4ODg4ODg4ODg4ODg4OHg4OHi0768zNjd3OLg0dnbxL23sLCxsa+zu7uzsLS9s66urq2tra2sq6qqqqmpqKmpqampqqurqqqqqamoqampqampqaqqqqytrq6urq6urq6sraR4aWJxZmFZWlZRUk5cU0Y9QlJEQTc8OzY5NTY1NDU2NTg3NTY1Nzg7Pjw7OTk5Ojg3Nzk3Njg8Oz47RD8/Q0BBREE+P0M9Pjw+Ojo3Nz9DRj54srCztLW2t7i3trKurq2sq6uqqaqtraysrq+xs7S1t4xucnRqaIB5ZmpmZWxdaG5waGxxYmNmcoJ+dmhobGpueoaBhXx4cXF5gK+6ubq6urm5uLm5ubm5ubm5ubm5ubm4uLe3t7e3uLm5ubm5uLe3t7i5ubi4uLi3t7a2tre3t7e3tra2trW0tLW1tbW2trW1tre3t7e3t7e3tre4v8bP0MS+v8DE19e8ydra4OHg4ODh4eDg4ODh4eDb3t7Uzby3tre6wMDJxLfIvrKwsLCwr7Cvrq6ur7Cwr66urq6uraytrKurq6qpqampqampqampqKmpqKmpqampqKmpqKmpqqqrraytra2ur66trK2heWpjbWdiXFhRUFFLVEpCOklRP0E3PDk0OjU2NTQ1NTU4ODY4Njs6OTw9PTs6ODY2ODg6ODY3Pj09PT5BQUVCQkNBQUBBOj09Pz05Ojc9QUc8bKqmqKutsLGwrqupqKqrq6mpqamrrKytra2usLO0tbilgIdvaWdzdGZrcG1qZGxvcm5rbWNrcHyJhG5qbHx4Y3uKfnNqc25rcY+7ubm5ubm5ubi4ubm5ubm5ubq5uLi4t7e3t7e3t7i5ubi4uLe2t7a3t7e3t7a2t7a2tra3tra2tbW1tba1tLS0tbW1tra2tra3t7e3t7i4uLe2t7a2uLm4uLe3uL6+uLq9vcfb4OHg2Nnd4eHg3dfKwcPCurm5uLe4uLi3tbS0tLKysbGxsLCvr6+vr6+vr6+vr66ura2srKyrq6yqqqmoqKmppqepqaehpaipqamoop+hoZyip6inqausrK2ur7Cwrq2unXdwbGphY2BZUU1RTFJGQzlNUEU+ODs3Mjc5Njc0NDM1ODg3OTc7OTo9PTw6Ojk3NDo5ODY1OD8/QEI9RENDQ0FDQEJBQDtAP0A/PDw6O0NIPWOopaWlpqioqKenp6ipqqmoqKipqqqsra6wsLCztLW1taWYdn5xZmt4cW9tZmVsaGNsZ2ZpaX11bWlvfXZ5hWZod294b3Fvcninu7m5ubm5ubm4uLm6ubm5ubm5ubi3t7W1tba2tre3t7e3t7a1tba2tre2tbW1tra3t7e2tbS0tLS0tLS1tLS0tLW1tba2tra2t7e3t7e3t7a2tre2tre3uLe2t7i4t7i4uLi4wMXTyry8w83PyMC9urm5ubq6ubi4uLi4t7W0tLSzs7KysrGwr6+vr66urq+vr6+uraysrKurrKysq6ehoJ6gn5udoaGdlpmkpKaon5mZmZmanZ+gn56fpKqtrq+ura2srJl1cGlrY2FeXVVOU0tSREQ4TktHQTo4NTI2OTY1NDczNzc3ODk3OTo7PT0+ODg4NzU6OTk1OD9AQEFEPkZBQkNAQkNCQT88QEJCQD0+OjpERj5cpqWmpqampqanqKenqKioqKenqaurrKytra2ttLS0tbekc311bnONf3JmanFjaW1jaGZobG51aV9jZ3VzdnpuZ3Bwcn56cYihu7m5ubm6urq6urm2s7a1uLm2trW1tra1tbW1tbW3tra3tra2tbW2tbW1tbS0tLa2t7e3tbS0s7O0tLW1tLS0tbW1tra2tra2t7e3uLe3tra2trW2tbW2tra2tra2tra3tra3uLi3uri4uLi3uLi5ubm5urq6urm4t7e3t7W1tLS0s7OysrKxsbCwr66urq6urq+vra2srKuppaSmpqScmZubmpmampmXl5eXl5aZm5iZmJmZm52en5+dnJ6gpKWko6OioqKQdG5jcGFeXltUU1RIVEo/PFFCRkM7ODYzNzo1NTQ4Mzg5OTc4OTc7OTs9Ozc6NzU2OTk4NTg+Pz9ART5CPz9DPzxBQUI/PT9EQT8+PTk9Q0Y/VaSlpqanqKeoqamop6ioqKioqKiqrKuqqaipq7W1tba5o3eKcXKHhnd0cGh5a2JjYWVsaW5zal9jZWNjZWprYmRqbHaXjX6ovbm3tre5u7u6uLWxrKurqq6wrKyrq62tq6uvsLGvr7CytbW2t7W1trW1tbW1tbW2trSvr7O0tLSvra6vsrW0tbW1tbW2t7e3t7e3t7e3t7e3t7Owsra1tLa2tre3tra2tbW1tra3t7e5uLi4t7e3uLi4ubq6urq5uLi3t7e1tbS0tLS0tLS0s7OysbCvr6+vr66vr62oo6KgnJqampqZmZqbm5qampqbmpmZmZiXl5aYmZmZmpycnZ+foJ+goKChoaCgoJ+fi3RuaXRdYGZeUlRLRFRJPUVTSEVCOzo0NDY5NDQ0NzM4ODg3ODk5Ojs7Pz04OjkzNTg5NjM5PT5AP0A6QEJCQkA/QEJCPz0+QUFCPz06PkVDQFGjpqWlp6inqauqqKaoqKipp6ioqKinp6ioqaq1tbe3t7KZtH99kIx1Z2lqbGZjYGNoZW94cGlicXx5cGpmZmRma3NqhYystrKwra2ttLeysLCtrKuqqaiop6ipqampqKinqKipqaeoqqurra2sqqysraysrq6traunpaSnqqyopKOkpamwsbGztbW2t7i3t7W1tre4t7e3t7Kppaasq6ivtLa1s7W3t7a1tbW2tra3t7e3t7a2t7e3t7m6urq5uLi3t7Wxs7S0tLKxsK6sq6yurrCxsK2rqqmqqKijnJqZmJmYmJiYmZmZmZmZmpqZm5ubnJybmZeYmpqcnJydnJ2foKGhoqKioKGgoKCfnop1amtuWVxhVktPREdVRz5PV0hEPTw4MzQ0ODQ1NDgyODk4ODk6Ojw5OUA8Njk6MzY3OTE0PD8/QEBBOkNGRUJBREJDQTo7P0FCQz9APUBEQ0BPo6empaemqKqqqqakpqenqKioqKimpqaoq6uttba3t7e4rbJ1cHuDdmBiaWtiZWZhZGdmfYh5bHKAfXFvcXhjbW5xZo+srKurq6ysra6urK2trKyqp6WmpaWlpqiop6iopaaoqKinqKeoqamqp6Wko6KioqOioKKioaKhoKChoaKjpKOjpaWlqLC0s7OzsKuqqaqztLa3trGopaOioaGipKiqqairs7Sxrq6xs7W2tra3uLi3t7e3t7e3t7a2uLe0sa6ppqerrKmnpqWkpKSkpKWnqaajoJ+enZycm5uampmZmJeXmZmZmJiZmpqampqampqbm5mYmpydnZ2dnZucoKGgoaOjoqCgoKCfnp2FdGtsaFdYU0pHTUVITUdAU1dGRz09OTM2Mzc0NTU3Mzg6Ojk6OTw9OjpBPDY9ODM3ODgzNztAPz9AQDpCRUNAQkRDQT87PEBDQkNBQDxBQ0A9TqKnpqanp6mqq6mkpaWlpaaoqKippqanqKmpqrW2tre3t7izc2h7c2JnamtpaWJhZGloXV1tfHJma3J/fHR8bm1zc36gqamrq6uqq62trKusq6mpqKWjpKampqWmp6eqqKWmp6enqKinp6iop6WkpKKhoaGhn56en5+fn56foKGho6Wko6OkpKSmp6enpqWkpaampqeqraumpKKhoaChpKWlpaempaeoqKalpaivtLa3trW1tra1tbOwrKupqa6rqKWlpqampaSkpaWlpqWkpKSkpaKhoaGgnp2bm5ucm5qamZiXmJiYmJiZmpmZmZmYmZmZmZqZmZydnJycnJybnJ+fn6ChoaKgoKCfnZ2cgHNrbmReU0pITUZETEtFRFFTQ0c9PDgzNjI4NDY0NjQ4OTg6Ozk7Pjw5PTs5PTczNTk2NTY8QD0/QD88P0JDPkJCQj89Pj5CQ0FFQD86PkVAO0+jpqWkpqeoqaelpKWlpKWnp6eoqKanp6alpqa1tba2trW2uYptcW1vfHxxZ2pmYGFsYFROW2hqbm9tgYJ9cWdxdn6aqKeoqqmpq6urrKqqqqimpaWkoqOlpqalpaWmqaqppqWjpKWmpqSko6Kio6Khn5+fnp6cnJycnJ2dnJ2en6CioaKjo6KhoqKkpaSioqOjpKSjpKSko6Ggn6GipKanp6ipqaelpaSipKSlqK2wsKyrqqusqqmnpaWmpaWlpaalpqioqailpaWkpKSlpKOjpKOioaGhoqKgnp2cnJubm5qZmJiYmJmam5mXl5eWlpeXmJiZmpqcm5qampubm5ucnJ6goKGgnp6enpycm356bnJiXlNNSlBFRk5NQkBPRT5JOz01MzYzODM2Njc1Ojs4OTs5Oj49Ozo5OT03NjY5NjU2PkI+PkE/PT5DQT5DQ0BAO0BAQkJCRUA+Oz5FPzxQoKSjpKOjo6SkoqSlpaSlpqamp6empqalpqaltLW1tbS0tbiBaHx9ZXOCemxwdWFfY1ROT1FbaGxpbGxxbW5xbnScoqSnqKioqauqqqqqqaempaSjo6OjpKSlpqalp6ytqaShnp6eo6Shn56foKCdnJ2dnJycmpqam5ucnJubm5ydnp6foKChoJ+goaOioKGjpKSjoqSlpaWkop+go6SkpKapqainpaGdnJ+jpaipqainqKioqaempaWkpKSlpqampqampqenpaWko6Ojo6KioqGhoqKhoqOkop+enZ2cmpubmpqZmJeXmJaWlZSUlJWVl5iYmpubnJuampqam5ucm5ucnp+fnpucnJyam5p/fnF0YFtUTUdNSEZMSj8/TkM8QDs8NDM4Mzc0NzY3ODs9ODo6OTk7PTs7ODk9Njc4OTU4OD9APT9BPjs9RD89REA/PzpAQUE/QUVAPjw8Qz88Tp2ioaKioKCipaSkpKWlpqenp6empqampaampbW1tbS0tLS3jHalsXdmc3Jvc2xjZGlYT1JRT09dgG1kYFptkZGSoqKjpaampqenqKiop6alpaOioaGhoaKjpaempqesq6emoJ2cm6Ghnpubmp2cmZiam5qampmZmZubm5uampqampucnZ6goaCfnp+hoJ6foqOko6Omp6inqKWioKGhoaGkpaWlpKCcmZmbnqOmpqampqanpqempaOlpKWlpqiop6enpaWlpaWkpKOjo6KhoqKioqKhoaKjo6Kgn56enZybnJubmZaUlJSTk5OTk5SUlJWWl5qam5ubm5qZmZqanJ2dnZ2dnZuampqamZqXf3dvc11aTkhKTkdFRklERU5APD09PDQ1OzQ2NDY1Njc5Ozg5OTg5OTw7PDc6Ozc4ODg1ODg/Qj9BQTw+P0A8PEJAQT49QT4/Pz1CQUA6OkA8PE+doqGfoJ+dn6OkpKSlpqeoqKenp6ampqampqW1tLS0tLS0tbSXtqd1Znh2Y2xjY2VjW1JTU1JNXqCMeFhodpajnp6hoaOjo6OjpKSlpqalpKSioaGko6OjoqOlpqamp6enp5+bmpyioJqWlZWam5qXl5iZmpqYmJqampqbm5qZmZmenZ2goqOjo6KkpKWinqGhoaKjpaampaSjoaCgn5+hoZ+goJ2amJiZmpygpKOjpKWmp6alpaOjpKSkpKWnp6ampqampaWmpKOjo6SjoqKjpKGfoKGhoKGgoaCfn56dnZyamJeVk5KSkpKSkpOTkpOUlZaZmpqbm5qampqbnZ6enp2cnJybm5qamZmZlH10bHReWk9IRUdGQkVORT9GOzo+Pzs0Njo2OTM2NDY4ODo4OTc4ODo8Ozw5Ozs6OjY3ODk5Pj9APjw9QD5AOjlAQT89QT8/QUE+QUE/Ojk9PjpQnaCfnZucnJufoqOlpaWlp6iop6ampqanpqantLS0tLOysrGwsK2rkHiGj36bmn93Yl1TUlFRTGKgootaiKCgn52YmZycnZ2eoaGgpKenpqWkoqGjp6alpaOipaampqanpqagm5mboaCXkp2gl5qcmpeXl5iampmampqam5qYmJmaoKCgoKGfoaKipKamop6gn5+goaOko6Khn56enpyanZuZmpqZmJeZnqChoaKioqKkpaWmpKSkpKKioqKkpaWlpaWlpaalpaOko6KioqGgoKGgnp+fn5+fnp+foJ+cm5qZl5WUlJSTkZCRkpKSkpKSk5SVl5iZmpmZmpqam5+fnp2cnJycmpmZmpiXl5F8cmdxXl1QRj9BRD9KT0JCRjhDRT4+OTg7Nzc0ODQ1OTo6Ozk3OTo8Ozo8PT48PDo2NzY5OD4/QT47Pz49PDg6PkFAQUE/P0FCP0RBPjo4PkE8U5ycm5uampycnaGio6KjoqSmp6alpaampqSjo7KysK2rp6amp6alpqiln6iop6qnoXmEXFFST0xcnKCAYpmgnp2clZOVlpeZmp2dnqGmpqampKOioqanp6ajpaampaWmp6emop6dn6Ggl5ioopSXm52YlpeWmJuZmpqampqZl5iam6Ghn56fnpybnJ6goJ6dn56fn6Cio6SjoqCfnp2ZlpeXl5iYmZubnqKioqKioqGio6WlpKOio6SioaGhoqOkpKSko6SkpKSioqKhoqGgn5+gnp2enp2dnZ2dnp6em5mYl5WTk5SUk5KQj5GSkZKSkZKTlJaXl5iYmZqampyenZ2dnJubmpiYmpmXlZaNempmamBiTkY+P0A9SkVAQ0A7QEE8Ozs5Ojc2NTg0Njc4OT04ODs6Oz87Ojs8Ojk6Nzc2ODs8Oz08Ojo8PTw3Oz5DQkRDPz1BQ0FEQT88OkBCO1eZmJqamZmam5ucnp2foqKhoqSlpKSlpqSioJ6op6alpqWlpaemp6ampqakpaanqKehqXJOUU1KVJahenKanJyenJeVlJWWmJiXl5qeoqKhoqOkpKOjpqalpaanpqWlpqampaOgoKGhn5qgdI+WmpmenJaXl5eZm5ycnJqamZeZm5uen52cnZyZmZqcnZydnp6fn5+hoaCgoaKgn56bl5WVlZeanZ2fn6GhoqKio6OhoaCgoJ2cnaGioqOkpKOioaSlpKOko6SjoqKioqKhoaGfn52cnZ2cnJ2dnJ2enpqXlpaVlJOTkpKSkpCRkpKSkpGSlJWWl5iYmJiam5ycnJycnJ2cm5mYmZiWlJWXi3hsY2RiZFFHQT1DO0tIRDo7Ozw+OTo6OTo3Mzc5NTo4ODg8OTg7OT09Ozo7Ojk8PDc2NDc/PDo9Ozw/Pjw7ODxBQ0FDQkI+P0NAQkFAOj9APztZmZiampqam5ubm5ydoKGhoaGhoqKioqKhn5+dpKWmpqenpaWmp6ampqWkpKalpKSkpaaGUFJQT0+PmHB6mpubnJ6cnJycm5ubmZiYm56dnp6foKOkoqGhoqKipKWlrKakpaSjoqGhnZumgmGUmZuZm56amJiYmJqcnpyam5iWmZybnJycnJydmpqbnJ2dnp6dnp6fn52cnJyhoaCblpWVlZacn6Ggn5+hoKKjoqOhnZuZlpaWlpicnqCip6ikoaCgoqOjoqKioKCgoJ+fnp+gnp2cm5ucnZydnJmanJuWk5KSkpKUk5KSkpKSkpOSkpKRkpSVlpeYmJiYmZqcm5qbm5ucnJqZmJiXlZWWl4d3ZGdoZGJNQ0U8RDlJSkU5Ojs9PTo6Nzg6NjQ3OTU8OTY4OTc5PDs7PDo6PDs6PDw4Nzg3Pj07Pj46Qj86Ojo/QURCQ0FBQD9EQUFAPjpAPj06W5qYmZqbmpubm5uen6CgoaKioKCgn5+enp2dnKWkpaanpqWlpqakoqKio6Oko6Kjo6KnllRYVVJOZ21rgZ6am5udn6Cgn56enp6dnJ2dnJ6enp+goaCfn6CgoKGipLa1paOkoqGhnpuco11mmpmamZienpiYmZmam5qWlZeWlZicnJ2cm52dnpybnJ2cnZ6bmJqeoaGdm5udoKKhmpWVlpaZoKKfnZueoaKjop+em5eXlJKSlJeYmZ2goqenpaGgn56goaGioaCfnp2cnJubnJubmpqZmpydnJmXmZaVk5GQkJCPkZKSkpKSkZKTk5OTk5OTlJWWlpeXl5manJubnJucnJqamZeXlpaVlZSEcmZsYmRbREJMPT84RktCPEA+Pj05Ozk6PTg1ODg2Ozg1Njo4PDw7Ozw8Ozk8Oj09OTU4Nzw5PD88OkE/Ojo6QEBDQkRBQ0A/Q0FAPj08QD09Ol+al5mamJeYmpycn5+foaGhoJ+fn56foKCenZ2lpKSko6OioqOjoZ+foaGipKOio6SiradXXl1UV19ua42dmpqbnJ2dm5ucnZ+enZycnJydnZ+goKChoaGgoKGgoKalk7GioaCenJuap4VVbpyZmpyZnJ6ZlpaWl5eTjo6QlJabnJuam5udn52cnJycnJ6dlpSZnJ+in5ycnZ+hoJuXl5mZmpycnJubnZ6fnZqXlpaWlJOTlJiampqfoKGmpqWgn56fnqChoaCenJubnJybm5ybm5qZmJmZmZmXl5iVlJKQkJCQj5CSkpKSkZGTk5aYl5STkpSVlJWWlZaZmZmam52cnJyampmXlpaWlpaQgG9vZV5gV0BKSDg/N0lFP0VBPD07Ojo8Ozs3NTs4Njs3NDY6Oj47Oj0+Pj07Ozs+Ozo4Ojk5NkBBPTo8PTo6OT9BQ0JERUM+P0FBPz8+Pj89PDtgl5WXl5aVl5mbnqGhoKGioqCenp6enqCgn52bpaWkpKSioKCfoJ+dnZ+hoqOjo6OkobCjXWVkYGFua4GenJubm5ubmZianJ2enJubm5ycnJ6ipKGeoKGioqKhoaCgrXqMrZ+enZqanKZnXXGcmp2em5manJiXlZWWkY6Nj5KYnZycm5ycnqCdnJucnJyempWVm56foZ+dnJyenp2cmpqampqampqbm5qXl5aTkpWVlpWTlZaam5qanZ6foqWjnp6fn5+en5+enZ6fnZycm5qbmpqbmpiZmJiYmJiYlZSTkZCRkJCQkZKTk5CRk5SYmZiVk5SVlZWWlZaXmZmXmZqenpyamJiXl5aWl5eYjX1ubV9lVlRFSzw3PjdSRUM+QkE4Ozw7OTg6ODY7Nzc6Njc5Oj0+Ojw8PT49PD06Pz06ODw9OTtAPj4/PT45OTs/QkNAQ0VDPT9DQj5AQD5APTw8YZWSlJWWlpeanJ6goKCgoaCgnp6enp6gn56em6WlpKSioJ+fnp2dm5mbnJydnp+gn56rmGNpbW5pZm2enZybm5ybmpmZmZqam5ucm5uam5ygo6SgnZ+en6ChoKCgn6mNaZynnZyamp+XamdynZuenpyZmJqamJiYmJKOj5OXnJ2bnJ2cnJycnZycnp6dnpqVl5ygoaGfnp2eoJ+cnJuampqbmpqYmpmVk5OTkpOWl5eVlJiYmZucnJydoJ+gnp6enp+fn56en6KjpKKgnp6cm5qam5uamJmZmJeXlpWUlJORkZCQkZKTk5OSkpOUmJmYlpWUlZaWlpaWl5iYmJiXmZqamZeXl5aXlpeWl4l4dmddX1dURUU5OTs8WT5AOEI/OTw8Pjk4Ozg6Ozc5OjU4OTs9PDk9Oz0+PD0+Oz8/Ozk+PDw+Pz5AQUE9ODc7QkNFP0FFQz1AREJBQEQ7Oz47PGKWk5SUlpWUlpiYmZubnJycnZ2cnJ2en56dnJqkpKSkoJ+enpybm5qZmJiYmZucnZ6cpolla3R4bVuFop2dnJydnJqbmpqampydnZ2bmpuboKKinpucnZycnJ6fnp2klnR9qZyam5yii2tpcJudnZ6cm5qanZqam5yVkZOXm52dnJ2fnZycnJycnZ6fnp+cl5idn6GhoJ6cn6CfnJubm5qbmpmZmZmZl5WWlZaYl5eXlpaYmZuenp2dn6GhoJ+fnp6fn5+dn5+hoqKhoZ+fn5yZm5qcnZuampmXlpaYl5eXlpWTkpGTlJSTlJSUlJaZmJaVlZeZmJeYl5eXl5eYl5iXl5eXlpaYl5eVl5eDeHZfW11eUT1GOjk4P1VDQTtDQzo8Pz86Ojk3Ozg4ODc0ODk8Ozw4Ozs8PTo8Pjk/QT06PTw+PkA/PUBBPjk2PERDRUBBRUU9PkVERD9COzo8OTpkl5SVlZaUlJSUlJWXmJiamZqcnJydnp6dnZybo6Oko6CenJuamZqZmJiYmZiam5ubm6WJa3F2em9lmp+enp2dnJybnZ6dnJ2enp2dnJydm5ygoJuampubm5udnJuaoJZ7d5GdmpyenH1qaXKbnpydnpybmp+fm5ydm5mZmZudnZ2dn52dn5+dnJydn5+fn5uanZ+goJ+dnJ6gnpubm5ubm5yampuamZudnJqZmJeYmJiYmp2foKCgoJ+hoaGgoJ+en5+fnp6foaKhoJ+enp+enJqam5ubmpqZlpaXmZmYmJiWlJOUlJWVk5OVlZSVlpWVlZSYmZuamZaWl5WWmJiWl5OUlJGRk4yRkJOWfXhqYWJiXFA8QDw2OENWSERCOjg7Oj47Nzc5Nj06OTk2NDc6Ozw9OTo6Oz87PT08QD47Oz46PT89PkBBP0A8NztBQ0U/P0REPj9EREM+Qj07PDs6Z5aTk5OTk5OTlJSVlpeWl5aWl5mbm5ybm5uamaOjoqCfnpuamJeYl5eXmJmYmZybm5qkgGpqb3lzcZegnp2dnJydnp6enp+enp2cnJydnp2bnJuampqam5ubmZmZmqCgeoqFkJmdnpKAa2Zzmp+cnJ2cm5qdn5ucnJubnJubnZ2dnJydnp2enZydnZ2cnJ2dm5uenp6dnZybnpubnJycnJydnJubmpmbmpmYmZmYmpmZmpyfn5+jpaKfoaKioaGfnqCgn5+fnqCioaGhn5+fn52ZmpucnZqZmJWWl5aVlZaTkpOUk5STkJCSk5GUkY+OkJGOlZabmJWYlJmXlJiRjJCPk5yTkoyFjIeDhndxZ2pkW1xRQT44NkJHYEJFR0A+Ozw7Ojg4NjU8ODo4MzQ6Njk9PTk5Ojs9Ozw6PD48Oj5AOj5APjw/QD8+PDg6Q0FEPz5CRD8+Q0VCPUJAPDw8OmeYk5KSk5OSk5SVlJWXl5aWlZaXmZmZmpqampqkoqCfn52bmpmYmJiXl5iZmJmcnZ2cqH1nZXN7enOJop+enp2dnp6enZ2enZ6enp2dnZ6cm5ybmpubm5ycm5mZmZqboJegfXKZpZt4joZpcpufnZ6dnZybm52bnJybnJ2dnZ2dnJ2dnp+fn52cnZ2dm5qbnJmZnJ2dnZ2dm5uanJ2dnJycnp2dnZybmZeVlZeXmJqam5ubnZ6foqOhoKGhnJucm5ubnZqcmZycn6CfnZiZmZmUkpKUl5SPj4+OkYyNiYuQi4mLjpGRj4mQmJiQkoyNi5KQj5iYoqiqpqWlrKOmoZqep6eyqKKVo6Cfl39wcWlsXFtcTUY8NzdHR1g+SE5URjk+Ojg5ODc1PTk4NzMzOTY6Pjw6Nzo8Ozo6Ojo8PDs/PjtAQD47PT5BPDw2N0A+QkA+QUY+PEFEQT1DQj49PDlmmJSTk5OTkpOUlZOVl5iYmJaXl5iZmZqampqaoqGfnp2cm5mYmJiYmJiYmZmZm5ybnKx/am16f3lxh6Genp2cnZ6enp6enp6dnp2dnZ6enJubnJubm5ubm5yZmZmZnKufinFgp6mdYXqJeXSenp6fnp2dnp6dnJydnJ2dnZ6fnZ2fn56goJ+enZ2dnZybnJ2em5qbm52enZ6dm5ubnJ2cnp2cnZqYl5SRjo+QkJGVmJSWlJiZmpudmJuYlY2Mjo6TkpKRj4mQjpGRjo+Ki42NjYiIi4+Lg42NkY+MkI2Qk5WVnJihoJySn6SipKmam5eanKOprb3Bwbq8uL26ucC8ubq3uru7tL2zwbV/bnVmZ1peWUxJRTo7TElTPFZSSUM6QTo7Ozc3NTo6OjgyNTY4Oz08OTk7Ozw5Nzo4Ojw6PT85PD8+PDw9QTs5NTg8O0A/QT9EPTxBQkA8REM9PT06YZOTkZCUlJOTk5OTlJeYlpeZmJmYmZqbmpqamp+gnp+fnJqZmpqampmYl5iZmZmZmZmphXB1e4B3b4mhnp6enp6fn56en56fn56dnp6fnp2dnJ2cm5ubm5ucmpiZmJ+tjXBgaaKQk1RfeXuFoJ6goJ+enZ+hoJ6dnp2enZ6fn56en6CenZ6enJydnZ2cm5qYnJuVmJqamJiYmJmSjJCXlKCXk4+MjYqKiImMiJORh5CPjYqKkJCLjoqMi4+IiImJjpGOjYaFiYaKhoWLiI+SkJCNkJKXlpKamJ2TlJ6kpqaqq7Gsr6+rpquqsbm5tbS0rqyvtMDIxcXBvsbDxMTDurW+t7a0s7C2tb6qcHRyXGZfXl1JRj8/RUtMVklcTEQ/PUI6Qzk5Nzc7OTk3MTc5ODo+ODg6PDw7OTc5OTs9Oj4/OT5BPDs+PD46OTY5PDpBPkNBQT08QkBAPkJEPj8+OVyHhIOHi42KiYaFgYqMkZOVmJiHlZaWkpiampmenZ+gn52ampubm5ycm5iWmJiXl5ibqo56dXZ7f3mCoJ+fnp+goKCfn5+foKCfnp2dnp+enp2dnJqbm5ybm5uYmZenp3RFRm6XgHtQPlt2hJ2bm56dnZycoaGfnZ6dnZ2dnp2dnJiWlpaYlZWSlpmWk5GKjI+PjI+NkIuLj4+WiYiEi5GZjn2Fi42PjYyHioyQm4yRj4+Lio6TjIyNjIiSi4yFiYyPhouIh42KhYyEj4qXkJOYmpWbnKOqoaKknKKrsbe0ubWxtK2vsrKlp7O6sbq6vLa3tsDDw729vLa/urq8wbW4wL60r66mqa+3mm58Z1tjWl1fSEU+QUtJU1hZXkFGOTk9OkY/Pzo3Ozs7NjM6Nzo5Pjg6Ojw9OTk4Ozk7PDo+PTtAQDs8QjxAOjg0Nzw7Qj9BQj4+O0NEREBDQz0+PjlhmZWLkYWNj5aSiHl9e3+Fi4OKgoqJhmuAeJCLlpqRnZ2UlJGTlpeampiWk42Sk5KQm5uIdndzcX1/cpGgnZubm5yenZ2eoKGgm5uWlpucmpubnJuYmZqYmJmbmpuWqZpMREZwlYJxUkc4YHiOko2SkY+Uk5KXm5mYm5ePjpCLjo2Ch4uLi4qLiI2RjIeHhoqIiZGKh4yEhYqNi4qNhI+UkIyDkJOUmZWQi5OTkZWRlpWOj5GMlI2Oj4qIj4ePhoeJiYmNiomJioWNh46JmJKUmpuXmKChp6Cko5qqqbO2sbWwqKqiqK6tn6qvsK21ubi8wr/BxLixtbCutrOwuL68ury+urOzp7G3wpB1gGNiXlpXUk1IRkVQSVlXX1tDUDpCQz1HRj84Nzo6NzU1OTc8OTw5ODo9Pjo6Nzs7Pjs7PTs9P0E7Pz48Pzo4NDM3OkFBQEI+PjpDREM/QUM7PT45Z6mloqKZn6CippeUiI2CiIJ1h4iKiIp7e3Z7enmPeoiSfn18en6CkYWBgH1zfH99fISHfnRweHZzfHaBj4iIiYeIioyMkZicl4iOhIuNi4iNkZCPi5GPi4yPkJGQlax1XXhfg7avpWJ2fktqfoiCjYuGiYp/iYqGiJiRiIOIg4KFfIuLjIaJi4iKkIyIi42PjI+Wh4mLio6NjY2Wk5OdnJyalpycm56bmpuYnpeTkZWWkJKRi4+LlpSMjYqDi4SEiYyQkIqOio2LipGJjZOTk5SVk5KcmZ6Xn6CfpaKvsamupKSfmKStpqa4t6ysu729wsPAv7+vpa2wsLS3uLO0uLa0ta6stK+4tLaBeXpjZmBeVlFRQUVMT0lcXl9UR0dCS0xCREA9ODg7OTU3Nzk3Ozc9PDk9Pj05Ozg6O0A8Oj06PkJBOD88Oj84NjQyOTtCQD9CPj04QEI/PkBEO0A+N2CloJqXnaGaoaCPl5efl5WCjaCfo6GdmpKOjIxycXBvdnFucG1ucHZub29waHBxcHR+c3FycXd7cnl2d3Jyd3Z6e3l8fXt/iIGEi3+PkYaNi4yGiouLiYeEgYaDf5KoYI6zjM7DrMClgJV6UnqCgZKQhoSEhY2DhIyPj4+IjY+Hi4iRkJWRjpCKk5eOj5WYp6SfnZWYlpaln5udq6aqt7W4srGnr6qnpqGfmp2WkpWVkYqPjImTjZuVjYuLhoaJjJWQkJCLmZKVlZSbkJiTlIyNkYyWl5WilZ6mqauno6OqsJucpp+mq6G0vb6zs7+5u7u6uby9rqiusa6wuLyztLGxqrCpqLGxsqild3J0X2hhYFRWUUlKSFZNXl5eVExKRVFKRUdDPTo5OTc0ODY4Mzg4PTo9PD47OTs4Ojs/PDw+OT9DPzg7Ojg8Nzc2Mzc5RT4/Qz89N0BAQT0/RDw+PThUj4yGh4eUjJWZl5yWmZaNlZyWlZydoKCdmpiWeHFubXJ4cXFsbnJwa3FvcG1yc3t1dnd5fnVxeHZ0d3tybn98gX15eH1/eYOGg4WCg5CLkIuLi46Pi4mJhYKCfn6Kl3LQ1snXrZ+6s2NkcFpugYaNjYuGjZSSi5CXj5SXkpihlp6WlZunpp+goKawq6GjpbW0sqqmqq+isba5vcK7ucO+vLi9uLWxrLCsppuSk5mfm5SPk5WOmp2doJqfn5edo6qsoZ+em62hp6qwqaampJiRkZWUo6SirKSss7Szs6i3tru4sLKvra2yt7a6srW6s7e5u7i8urayr6yxsbKztLOxsa2us7Gzs6yhl3Zxc19jXlJRVE1PSUdYT1pcZFROR1VPRURKRD44Ojg3NTg4ODU5Nzo6PTw/Ojg8ODk5PTs9PTpCPj84Ozo5Ojk4NjI1N0I+P0RAQDY+P0I/PEM8PT46Tn98go6MjJOTl5eaj5SWjZaRkZSXk5qanqGdnHJvcnFxcXFxcG5zcW91dHJxdneAdXd8eYV+d3t8eX1/fICJiYmDfXp/h4GIiYGAgIGGiIKGi4eIhYSIiIqEf4J9kX+QzbXCzsi/rJR8qqxfaImMjouNkJmclJSUoJqan6Ktsa6ppKWtr6ysrLWuvrmtrqm1sLexq7G2rK+9wsLAvrq8trKutraxtK66u7OurKepp6unoqmtoKmooq+wuLSxvLq6urK0ta+8tLezt7e7t7mtrbCprLW5sbeytLe2sLu7vLu6ury1vLi0wbWsqqqrtLG3uLm1trSzsKymrrCqq7Cxq6yusLKxtK6qo5N4dnJlZ1tMUlBFTUlTV1JlXmdUUExcUUhMUkNBOTk3OTU4ODY2Ozc5Ojs6Pjk4Ozo6Ojw8Pj08RD45Njs7ODg+OTUxNTZCRkREP0A3Pj5DPjpBP0BAO0t/gomXmJSdlpabmIuSlo6XkZGVl5SZl5+bmZx8dHV2dXl1c3RudnJzdHV2d319gX56gXyDfoJ/fYB/hIKFj52RiYF/go+Xjo6HgoCBiIuFfoqRjH+IjY2Mi4iSi5h1mKKNtKqdnoeCcGjNgGCLi4qQj42PlJSYkJWcmp2eqK6ysLC1tLOtsrW4sLy1tbGqsKqztbS7t7SztrS1r7i4t62noqassLCvtre3vrW5vLOysa61u7C0r6+yu7axuMC9tLS0s7izvLq2tLrAvbm6ubq+ubm5vrWysa+yr6q1tLGzsbSzrri4tb+vpKaoo6ussa+zrq6wsKytq6qroqKmqKKnrauqpaynoqeYeHlxZmVZT09NSVJNV01PX15cTlVVYlFEVE07Pzk8ODk1ODc1Nzk1Ojo6OTs4Ojw8Oj08Pj4/P0I9ODY6Ojk6QDs1MjY2QUZDQz4/Nz49Q0I5P0I/PjtLjpGTmJmVmZGTopiTkpKLk4uOkI+Vl5ablZSbhoJ9enh2dHRzdH53end2gIKDhouMhISFioaQiYeRk5aRjZaalY+IjI+emJaVkpCTl5qamZGeoZ2Tl5uhmp6co6GdipB6hqOMhIl3dG12o4tmho+MmJqPj4yUmpecnZugnaSstLm6vK+2tLi0tLK3uLmzq6+qqKy1srK1rrGrrqa3s7OxpaGotbCvrayrtbqyu7q6tLK3ur67ubG4sLmtqLK4u66ttLS3tbu2trm5vLe0r7G0t7a5s7e1pq2pq6ior6yprq2up6KxtLG0q6aop6Cjq66oqq6orLKwr6+pqKGeoaGjpqOgopqlo56ol3J3bmdiVUpUT09KRFBLX2JYWlFcVGBNSFJJQUA5Ojg2Njc3NTg5NDs5Ozk8Nzs+Ojg8PD0/QkBBPTs2OTk5Oj87NjM3OD5GQkJAQjk+PUBDPkBGQj44R5OWkZWTkpSQkZ+ZnZmVkI+Sko6Mk5aWko6RlZGSkIaBeXJzdXuBhI6HhZGTkpicnJiVkJWYo5yaoaeqqZ+clpeVnaKioZyZnpmlqKyvramnqqqpp6KlqKmsqqqvp5l+W2aGeHh/bWpodXZ9d4SjoaSem5qkp6Spq66spaSoq6+xtK6qrK6zr6ystLO0ua6urayqrLKwsK2wqKqmsrS0uK6qtrqwr6qurLC3s7i0t7W0u7y4tbWxtauyrKiys7uvrbGytLa1sbG0s7OvrKuvs7a0sayutKqqpqWnrauoqKupqqifqbOwqqeppaOio7CtqaatpairrayppaSioKWipaOYmZyVnqKippdudWVnZFdPWUtLSktTVHBiWWRXX1tcUlpQTEM8ODk6Njk4NzQ3NzQ4Ojw6PDg6PTk3PDw7PkM/QT47OTo5Ojs+PTg0NThBREVEQkM5PjtAPkI/R0Q+N0KSm5SVlZaVj46Wl5qZlZGKk5SSjo+SkYqKiY2Ul5qTjYmCho6VkZSfmpuin5+jnqGhn5ijpKelpaapqa2rqaKmpKilpKGfnqOjra2srairrq6rq6ykoaKlqqinqqyHcVZbdHFyeWllYmlpcHyLo6mnoKKhrqyrqqetrqilpKmpqqmmo6iqqaekp66wr7Ovq7Crqq+yr7Czua+rqLCxrrCyubO0r62vtbCss7GurLW1tLSzs7CvrKyqrKusr7G0s7CwrrCwsKyqrauqq6alrrCysKumqbCvqaOkqaunqKaopquwq6mvqaaoqaalo6iwraqpqKKpo6WnpKGhoKKloZ2el5aYlJugpKmUbnNeamlfVlpOUk5RT1NlXGVjW11ZXFBZT0tAPDs5Ojc6ODczNTMzODo9OTo4OTo5Oj08PEBEPkA9OTo8PDw+Oz45NTo8QkFFQUNBOT47P0BEQENCQDdAkZ6YlJeZlpGHi5SSl5GIg4mLk4+OkI2Hh4SFlZmWmJeZlpqeop2ZnKKkoaCdn5qfoKGgpqGgoKCjo6KlqKmrramqpqOmpaCloKaop6aoqaepqaSoppmepaWiorCecWtSUnZ3dHtoYWVmXl9vfIugpKCgn6GhqKCcn6GloaCmo6KfpKGspp6foaGkrKqnrKivq6e0sa6ur7WyrKqwq6mtrbWwrq6srreup6yqpKivsq+sq7Kvqqqpq6utqa6urrGxraqtqaunp6uoqauinaapqKilqKisqKilpKWop6iopqmsr6+oq6mhoqKlo6Opq6ymqKWjqKKhoKSdnZ+hoZ2bnZ+amZWcnKOqlG9zZm5yZF1dUFVPWE9eZGRsaGJiWlpSVE9NQTo9Ojo4Ozk1MTYzMjg4Ozk5OTk7OTk8Oz0/Qz5APTk7Ojs8QD0+PDk5PEFBRUFGQTo9Oz9BQUJBRUI4PYqWlJOYmpaPiISNjpGSjIiIiI+JiZCRjoqKiJubmZygpaKlnqKjoZqeoZyanZ6bnKOop6ugoKOYoJ2XnKGjo6WjoqKkrKilqaCepqmnq6mkoKKgo6ehpq6osLKsgGhmS05wdXeAaWBiaVpdYmt1g5GdoaCdoKOalpqYo6KipJ+ZnKGhoqCbmp6goaSgnaejqrGorqusqaSqqquorKalrKqws6+rq6mwq6appaWoq6ynpqevq6Wnq6upq6irqqqrrailqKOmpaesqayoopykoaOmo6qpqKano6SnqKanqKepqKupoaKoo5yepqWjqKino6WlpqmgpJ6inpeYnZ+doqKlnpiUlZ6go5d1d2t2eGJfXFVZUVVXW2Nfc19oX2NTUVlUSD48PTg7OTo4NTM3MzM0Nzo4OT05Ozo5PDxBQEM9PT44Ozw9PEA/Qj86ODo+P0NAREE6Oz49QD9DQ0VDOTyCmJmenZ2alZKKiZGRl5GQh4SJgoGNj4+Sj42cnZ+hpKmlqaeorK2moqKfmKSmo6Stsa6yp6asm56em5qjp6Cfo5+foq+rq6yoqKuvqaiqqKKgoaeprba8vr2sjW5oY0ZVbm98fG5gXmZaWmFiZ3B4f46aoKGimJaem5+fpKGblZigoZ2enJudnZuZmZWen6Oonp2iqKGaoaOmoqSoqaqoq7CxqKWlp6eopKWpqaqnoqWmqKadnqWloqClpaOlpqCjpaOjpaelqamqpKekpqKmp6SrqaenpKGlqKynpqWlo6OopJWdo5+bnaCjqaeopqGjo6mooKiioJyVkZqfn6GmopuXkpCamqCVfHdvfXlmW1tgX1pcVlxoZG9jbWppYl5QUEA/Ozo4OTg8OzYzNDMzMzc5OTs8OTs7OT49QkBAPTs9ODw9QD08PENBPjo4PT9EP0M+Ojk/PEI/P0FEQjk6gJ6kp6Kem5+gmY+ZnaCWloqGj4iEi4qTl5SRo6Wnqq6trLOys7S4t62pqqevtLKxqq6usbKusa2lq7OssbGpq6+rq6y2sLSwq7GysaOgo6qqp6+8xsvNxremj3NoalxCTnBudG5zZ2JhWVhfY2FianF1eo6hqJydoZqWnqScm5aZoqefoJ+joJuUlpmWl5qfoJmVnqGZmJ2dpZ2gpKeqqaiqraylqaSlqqeqqaqsp6SkpKOimZmhnpqaoaCfpaWYnqSmpKqooqelpaGqp6mnp6ejqKWmpaGkqKesoqekoaalpaOVl52Ym5mVo6elpaSfnZ2lo6Kqo5+amZiXnJyaoaGakJOTl5ibjX93cnZ4amJbX19cYllgZG5ta25hX2RgUE9BQDs7OTs4Ojk2MTQzNjQ3Nzc6PTo8Ozk9PUI/Pj89PDo/OTo7PD5CRUA9OTtAQT5DPDs5PzlAQEBAQkM7OXuao6OcoJ2dop2Zn6KioJibmJaYkpSQm5qWl7S0rrW4s7S4tre0uLm3tbm4ub28uKqLnLK4vLS9urW7uru4s7q/uLe5u7G3r6iusq2inaCrtMDU3dvLuaubh3BgYGJVRkV1bmBfbW1cW1daWV1bW15iZGVoeJKnr6almKGko52goaKooaOgpaGck5mYmJmco56cmpudl5uZlqWam5+hqKmpqKuvr66pqKirrKytq6irp6WjoJyfo6Ojn6Cipammmpyip6Spn6GjoqKgpaanpqSooJ+ipKGjoqiop6OloaGopqalo5mbmJuTj6GknqKfmJiVoJuhpaCfm5udnJuamZugmo2YmZiTkYaAdnh4eGNbUllUX19hbWl2a3BoaWliWlNMQDw6Ozg5Nzk3NTU2Mjg1Njc3Ojw7Ozs7QD4/QD0+Pjk6PDk2Nz47QkZCPDg7P0NDRDw+OT43PkFCP0ZDOzhwkpqblJ6bm52Vl52doqajopaXnpaXl6GblJi+t7G4uba3t7i7l5S2vbu9vcDFtaK7mKC3v7+6wcm0nbu2sra/xcGooLa0urGqrrSxsLK0tLfF0tnWya6ReGZdWltcVExBa2qMmI9ZVFhXXFxdXVhVWGByiaGyxcO0sqCnqqynq6mlpqCnoKGmoZOWmJ2foqSjnZ6coaChnZekmpmdoKaqqqqtrq2tsLGrrK2sqamrrqimpaalpqSkpqaeo6eppKGcoKKjpqCio5+jpJ2foqWgpJyboZ6fo6GhpaSlqaOkpaKkp6ehn52elpOcoJiZko+MjJeWn5uWnJqdnJqSlpSUmJOQmp2YiouHgIB8gnhhXllUYWlgZnRvdGl0ZGlkYltMSz46OTg5ODg5NzM0NTI1NDY2OTw8Oz08P0E/QEA9Pj44OTs4Njc/OUJFQzw7PD5DREM9QDs9Nz1DQ0BFQjw3Z4yRk4qalZiblZWYm6Knq6aVl5iQlZmhnpeXvrWztLu6ubi5woeYt6u4u8DCxbOjw6e4s72/tMTHvbS7uL62wMTErqCworW2tb2+wcTHw8O5vb7Bx83QxKB+aV1ZWFdTSVRsp7OoTlVeYWJfX19mepavv76+wMKytbaor7Gwr6yqoqajrJ+fpquXmqifpaWfoJydoKuwsKyiq5yYm6Cor7Kys6uorre1sq2tqaalqKulpaStqaShn6Cnnp6mqKmmnp+anqGlpqmcnaObl6KmmpuanZ+cmqGcmZ2eoKijn6GfnaWioKOioZSZmpmTj4qLhI2Qk5uPjpiVm5eYkJORkomNl5iYk4uKi32AgIVwYGJfXmtjYm54dXdubVtiUlZcTUc7PDk3OTc5Ojc0NDQxNDM3Njg8Ozs8PEBAPUA/Pj8+Ojo5Ojc6Pz5FRUU8PT1AQkJCQUE7PDhAQ0NARD87NV+MjIaFlouUlZeYl5ifpqellpWVkZebn5ual7mxtrO5vLy5urWqsryxvsG0vMe5uLuuv6fGw7/KxsnIxcXJvMLHx7+xsKe8vL7FxMbJx8XGu8XBxcbAvLnMybmXc1xVWFRRUpyzn05ZXF5dYG2OqrvBsranprG1q7WyrbOtqa6vp6awr7Ktqq+zpKu1qaeopKCgnqmyuL61tbWqqaausre4t7apq7i8ubexr66noqOop6SfqKOfnqCZoZydoqSnp6GelJuaoKGlnqChnpajnZSQlpiboZqflpORlpSin5qenJudoZ6kn56VnJiPkpOPjImTkJefiZCWkZuUmJGRlZaDjJWXlpKLjIh8foR/amZoYWtsZ251cnJ1cWdeYFxSSUU/Ojo6Nzg0ODw3NjU0MjMzNjU3PDo7PDs9QD4/QD48PTk5OTs6PDw+QkRFPj49QENDQkREOzo4QkJCQUNAOTJbk4iEjZGKi5GRlZCSmp2fnJOSmJSdnZqXmpW2sbm1tb6+tri1uLO8vMTEusPHwb+0s8XFxr/CzcfLzsvLx8HDxsfIysXExcO7vLzBxcHFxL/Dw8bGwbGTv7zL0L+YalhXWUySt5ZNVVlYYH+mvLCmq66zp6qpqautrKmlpZ6pr6uyu7q4u7e5t7O5uLOurLO0qrC1ub3Bur6+vL60urm4u7qysbS8u7q7s7Oyp6Smq6uioaCdmpudmpyXmpuenJygnZaclpuZnZ6io52UnJCNiY6OkZ6bnJWNh5KLmJiWmpybmJybnp6cmp6UjpiYmpSRmZeeoZWYmpKXlJWRlJqYk4+TnZaSi5F+enx/dGtsbmRvbWlxeG96amlhXWdhUUZEQTw5OTc2NDQ6ODQ2NTMzMjY1Nj05OTs7PT47Pj49Oz05OTs7Oz89QUNBQkFAPEBDQ0NFQjs4OUQ/P0BCPzsyV5uQkZCQh4WSjo2IjZCTlZGPjZSUm5STlpqRs7e4uLi+u7C1sri2tbbAw8G+w8LAvru+u7u8xMzEzNDLxsa/xcfLyNTLysjGv7u7vsS+xcjGxsTExLm1wLizvMHFv6l3V1VRir2PTVNWW4Ogprevpa20tK2vpaSjqKSgoKWZqrSxvsG+urm6uLW0srG0tLO6wL7Av769u7u9vsDCt7a3tru7sru+ubi3u7a3tKyoqamrpqijnpOampyYkZKZl5GRmJqXnpiWk5acm5+elJOJiX6GiIuWlJiZkYmVkZeWlZmbmpaYl5idnpyhmJWZmZyYl5ybn56jnJ6WmJeTl5yZmZyUlp2UlpOJdnl5e3dua2lodVpmcnhzeWZmXmRbUlhJRj87Nzg4NzYxNjk3NDQzMzM2NDY7ODo8Oz08OD0+PDo7PDs9Ozs+PkRBQURCQEBBQkNDREM9OTlCQD8/QD89MkyWmpaSk4yKmJCKi4yOkpKKiIaNkJiKj5CUl7O7tba/vb2xtrjBvby0uL/Bsbi3vsHFvbu8wsbJv8jOyMHEwcfKysbKxczIzcbIxb/DwMvNz8rGxMPEwsW+uL3Bw7/Hu41jUWF/ZVBTYI2qn6a0sq2suLWzq6mjoa2prKetn6y1tL/Cvrm4vbawrausr7W0ur7Fv7u8urO5u7i5ubWtsLS9u7G/vLiytrmzubu0ra2orKyqqaeXnpualY2MmJSTi5WWlJyZl5WWmZKYn5mQiop+iYqKkY6Vl5OUn5mWkJSZmJmWmJOUm6GeoZiYmp2ZmZaenpibopqdnJuYmpuZlpeXlpyZlJyYfoB4eXV1ZWZpamhdam9ueXhjYmFgXlhXRkU4Ojg6OTc5NDQ5NzY2NTEyMzM0Ozo9Pzs9PTo6PTs8Pjo7Pz48QkBDQkJFQj0/Q0NDQ0RFQDk6QkFBQj5CQTVCkJeUlZmSj5qQjpKRjZSVi4qHjI2UiImPkpq2u7S8xsHEwr3BxcLAtLO9v6ywr7rDysPCvs3IxbfByMW/wcLIy8rCwsTJzM3Oz8zDx8bIycjIycfFycfIx7/Ex8TExsrOwo1SSVBRZqe6t8C9vrm8ury6vKytpqm7urm3v7K1uLLAxrq3t8Gzsa2tqau1s7u2w7a2vbWxt762s7e4sLW2v7uwvbq0q7CxsbO8urOzrqutq62xnaOjoJqQjpiXlZCclpaYlpWSnJmTm5+clpGUjpWQiYyQlZOUm56YmZKSnJedlJmSk5aZmJ2VnJ6do5yVnZ+TnKKcnKCfnaOemJSVl5ebmpmgkH99cXRxb2NhZ3ZoaWl0bXlsXWRbVWBZTEhDNjw5OTg4OjUzOjY2NDQxMzUyNTs6PD47Ozw9PDs8PTw7PD49P0E/RUFCQ0M+QEFARUVERUE7Nz5DQkI+Q0I4O4+akZaalJKUjZCUlI6VlI6Pi4yJk4uIkJObt8C6xsXEw8zCwcS9vrWvt7uvr7O6wMfFxMHMy8W2ucDCwsTHytHLwsPExsnFzNDNx8zJwsLHwsvLyMfMyc3FxcXDxcTJzNPTlk1NXKrHwMjNxsTBxMfBvL60sbCwwr6+wca/vri2w8K6urbAvrWyrKmvsri+tMC0tLi0t7nEua+8vrm+v8K/tbq2q6qsrq+wt768trSura2utaSlqKimmpycnZyeopydmZOQkp2VmKCdmJiVmZmZl46MlH2QkJefmZmYk5GToI6Nko+VjpCUlaKdnKSem56elpyjoKGipKOkop6amZubnJ2enIN9cnx4cGdga2p3bGlldW50Y11iVFdVU01HOjc7OTk3Nzo3NDg3ODQ1MjM0MjU7Ojk+Oj08Pz04Oz05OTk9PEBBQEVCQUJBQT9AP0RFREVAPDk+QkNCQENBOjSAoZeUmZiVkImUk5aTiZGMlJGOiJaKi5CXnMXLw8O8wMPHwbm9vbu4tre3rrK3uLzAwsDCx8bHurzAwsTHyMbSycHDw7+/vsTLyMrLyby8yMfJzcjDyMnJxcXCw8HCxsbHys1/SY/NzcfM0MW2v7/AwLq7vbWzs8C/ub/DucC3u8G8uri7ub27srCvsKy5wri9ube1t7q9xb24xsjCwcLGwr28tamurrCwr7O6t7m2sK+tr7OppquprqannqSlo6OjoqCblZiekZecl5GRlZeZlZmRlJiSlYyYo5qcnp2FiZ+TfJKWlZKUlJennaCipJ+en56foaGkoqKjoaOinJ2fnqOhppl5enl/cnBmZWdjamRiam1ub15ZXVZWTlBKRjk5Ozk3Njc3NjM3ODk1NjEzNTI3PDs8QDs/PDw6ODo8OTk4Pj1APz9GP0JBQz89QT5ARENDQTw5PENBQ0RBQDozbKKdlZedlo+PmJiZmIiSjZGVkI+Vjo6TlpbKy7u5urnBu7q3vsG8vLu5sa61uri4u8S6vsC+vru8wMXBxsK+xsK5u8O6uLm8vsHHwca7ucjIw8XEwMPBwcDEwcK+vcHBwMDHpk2k0czFydHBr729uLm7u763tLG5vrO8vrG5tbi7try0tbm2uba5t7GtusG6vMG/t77Ev8bDw8fHwrvAwr/Cv7iys7O1tLGut7S3tbSxrK2xp6Wlp7CtqJ+nq6ajqKWmpqCgn5SYmZSRkZWUl5OYl5qhnZ6hnKGdoaWglpSbkZeXmJqTnpmZqaSlpKWdoqCanqCkoqOcoqGjoJ6cnp6ppaiVfXuDeG5mYWRiYWNjY2piZ2NbWlpdWVFPRT07OTo7Nzc5OTY0OTk6NTMxNDUyNzo7OkA9Pzw8OTc3Ozo5Ojw+QD8+RDxCQURAPz49QkRCQkI+OjlCP0FCPT44NVmfnJiTmZaRlZiYmpeQkZCQk5GTlJKSkpSUxce4tbq5wrm5vMPFwri7ubGxtry6tbnAu7u5tre0tLW/u72/ub66urTAuLW3sq66u7fAt7zKz8G7v8C8u8S9usDEv729uLvAxLBTns3EwMHJv7DBv7q3u765tbi0uLy0vbi1tLCzvLG3t7i/tr25vb65t7q+u7/Axb29y8PGw8TAw762ubq2v7i7v7y4trOyq7CwsrWzs66sq6emnqeurauiqKumpqqjp6iqo5+Ym52bmpicnJiXnJuhpZ2anqGhoKGmoJqbnJiboJ+dnJ+coKiho6SknaKfmqKgop+el6Shop+dmpieqKWhi3x5iH1xZGFiY2hqZ2dpZWleVlZUWU9TTEY4PzY7Ojc3OTs2NTo7PDYzMTM0MTc7OTg/PT47PDs3Njk5ODo7PUA/PkA9PT9CPjxAQUNDQT9DPTo2PEBBQDw9ODdJlJibj5OUkZWYlZGWkpWRkJGUlZSTk5OYlcHCwLq8ub62uL7EwMKxvbqytLO4vLW3vMC8vbS0sbC1t7W7wbi+ub+8vLe0t6+ut7W5v7vB1Y68vrvDtbrHt7a4u725ubW6w8irVJfIv7+7wb65xr3Cv7zFuLa3tLi2tru7uba0t7q1s7i8vbm/ucPAwLu5vLu+vcjEvcfEw7rAvb62sra4srm0usLCureysaysq62yr7Kur6ijpJ6rrKyqpKakpKiqoqemraihoaGmn6Oiop6bnKKfoKOdnJuhn6KgpKCem5eZn6GdnZ6eoaWkoaKioZ6ho5yinqCZnZijn52eoJqZoKKmnYR6g4F5cW1lZWZwamVraFhZT0tLS1JKTEhEOT44PTs2Ojs5Njc8ODk4NjA0MzE3OTk7Pz0+Ojw6ODg5PDg6Ozs7PD1BPj09Q0E8P0NDREA/Pzw6Nz5CREE/QDg4P4mYmoyMkI+Tl5WMkpCakpGXmJaUlJKQmZTDvsbBwby8uLi6v7a8scK2tLyxtLa4s7q9v768sq2vrLGwt7y3u73BxLm3t7a1ubm6u7+80MV5rcu9x7e5uK22tLe6tLezu8XKoFWOyb+/vr28v8jDxcW+xri1srK9uLi4vrq6uby6urS3u7q5v7zEwL+5uri/ubvFxr3Fw8Kyur27sa+2uLO3s7q+wLm2rLGrrqmqqa2qqq6mpKWnrq2ppaOio6GkpaWmoqato6Klo5+ho6Gcmpyhn6CloaCenZygnaWgnpeVmZ2fn52gn6KmpaCknpybn6Ofn5mcmZ2epJyWnKOcnqGcppZ+f4d9a25xZ3Brc2ZibmBcVEhLS0RKQ0NHPzo7OD48Nzs7OTc4Ozc8PDYyNzUxNjk8PD08QTs8Ojs6OT45Ojs9PUA+RD89PkRAPz9BRkQ/Pzw9OTc/QUNCQEI5Ojl3nJiLh4uQkpOWjY+TmpOQnZiSkY2PjpiSvbfHvsO+vbu+vL22uri9ure9s7OwuLi1uby7wLeqraSusLi7sr2+u8S2tbi1t7++xLzCxNivdoS+yM/CwLiutbW7vre6sr7CyJZbiM3Cwr++vbzHzMfHxMe9tbW2wb27u7/CusDCv7y2t729vcHBwL+8ube8wru3v8W7wr++tbe8vK+vt7awtLO6ubq7r6mtq62rrKaqoqeuqKWqra2vp6Sgn6ajnqKjqKOjq6Oiop6dm5ublJaZnJyfpZ6fnpmYnpejoJyXmZqZmqOjop6jo6egpqCbnaCjnp2WoJmcoKCblJegn6WcmKKQgYaAcmZsam50bndjZ2JcY1FLVUhFRUNHQzw7OTg9Ojc6PTo4OTs3PD01MzY1MDY4OTo8O0A9PDo+PDk+OTk9Pjs/PkM8Pz5APz4/P0ZEQEE/Pjo3P0BDQz9APTo4ZqGYj4uNlZKVlY6PlpmVl5uVjoyMjY+bk7m2wbS/vLm8w8C+wLq1trKywLmvsry8sLe7tru8qqqjsLm9vLK8vrzFuLG4ubzGycrCx8nRm3R3sdHRzMrEtbq/xMi+vrW/wMCHaH3NxsK+wby/w8zKx8XGwLm9vMS/v7/CyL3Hx8XFvLrEv7vBv7rAvLu7wMS9t7nCub69t7S2uLqur7WxsLCytre0t6yurKqsrKuoq6Gms6qlra+trKippaOkp5+io6Onoaeiop6cnZyamYyQlpeZnaKZnpuVkp2UoaCdmZ6fmJimpqKfoqKmoqeloqCko6GbnaCbnKKfl5WVnp6kmpafiYGDgnRvbGx0bGxuX2NeYWJOSE4/RUA/REM7Ozo6Ozo4Ozw6OTw+Ojo+NDQ1NTE5OTo5PDtAPD89PTw4PDs6PDs7Pz5DPkI+QD89Pz9FRUJBQj87Nj9CRUQ9QUE6OlmfmJOSlZqVmpOQlpeclZuZlpSVkZKTnZm2uLaxuru6vsG5uca7trWypb69tLbBv66zvbS4wbGwsbS7xdDCur68xL63vMC/yc/HyMrKwoh2d6jMzMvNysbCw8vOwby5vbuxgXptwMfEwMC/xMDKycPDxMO5w769ub+8wsbCyc7Hxr66xr26v7m3wLm5vsDCvrW0vLi2u7CvsrK1r7Cvrqyus7CzsrirsbKxqrCrq6yrrLatqKyusqarrKmpoaWgpaakrKSmoaChnqGgnaCMlJeTm5+mmZ6emZOYnZ+gnp2eopuYp62ooqSgoKKqpqmhqKGlm6CgnZ2jn5SYmKKdp6Gfm4J7eoh7bW14fGBxY1teX19UST5DRUlCQz5DOz42OTo7Ozs7Ozs7PT05PTU2NjIxODo5Ozs6QTs/PDw+Nzs8Ozw9PTw9Pz5BQUE/P0FCQUVDQkRAPDY+Q0RFPkJEPztTmZuZmJ6dmqCalpyZn5KdlZ2boJWWlJqYur20sLu8wcTCv8XGura5sqO7vbS3xLuwtbq2ucS4tLy3u7qt28O+tr7Avr66ppyqs7fEwKZ8enyfxMbLyMHDwMDJysHAvLqypZaIebPIxcS/wMG/y8fCwMjAusK7urO6usG+wMrOysS9tby8ub+5ubW1s7/Avre0s7S4rbeqr7CwsrGvq6+nr7ausrG5rra2uLSzsLGttrS6sa6srranrLKsraSjoaenqLKrqqWkp6elpaCml5ujn6SmraKeo6KanaWiop+foaWenrC0sKSlnp+kqaevp6mgq6CiopqipJ2anqGmp6+psZWCe32Cem5zeHRocF1cX1xaUUVFRE1JQUQ9SDs7NTk7Ojw8Ojs7Oz0/Oj01NDUxMjc4ODs8O0I8Pz46OzY6PTo7Pj0/QD87QUFBPj4/QkBBQkJFPjo1OkFCST9AQkA7TJqdnZ6fnZienZmampySoJWbnp+blZGRl8W+urbDvMbCvr/Ixbe1uLe2ubu0r7e3srWzt7m8u7a7u8W2bq/Ovba5wLyqfW5obm10gpeZdXt/nL6/xsC5wLy+xcS9vbixrqarlpSiysPDvL2/v8PDvr/HvLy/tLSutbW8vr/OzcvCt7K4t7e9ubuxtrLIwLu2tLGwt6yzqbCtrbS3r6uuqrG1r7Gvt7O6usC/tre2sru6wLWyrbO3rLC6r7KloqWrrK+5s7KosK+xr6qiqKGkraitrLOun6inpqWmq6Sknqaqo6ayuLOrpZyfp6anrquqpbClpaWbpKOYn6exrLW4sLKOhHl/fHdsdXtwbmlcX19ZU1BBRklHS0BFQ0g8PTY7OTk8Ozo6Ozs9Pzw9NTU2MTM2OTg8QT5AOz1AOzs5PD04Oj08QD46Oj49Pj09PkBCQkJBRD03NDU9REc9Q0I/PEWUnqCgoJyXmpiYlZmdmZ2fmp2bnJaRj5LDwMK9wrzEvLy7xbu3s7e2tru7s6CWtayvsbS0tLa4ucDNsXaCtL22tcGkhmlaXmBOU1tccHZ6haS4t8K6s7u3u72/uru7rqWtsqGlh8HFw768v7u7uLbBwrW/urWur62wvcC5z8rJw7GwtbS0vbq+urq7ysO7uravsL2xuK+ys7C3vbaur66wt7CsrLK2vbzEwrq9t7bAv8G3tbC2srGzurGxr6err6u2v7e1qbqztbmxp6uop7ausrG1uaisrK+qr7CqqKessayytr20saykqKuoqKusq6i2qaaonqadmKOuvLG7wbSmiYF7gnpzdnZ3bnFhX2ZdW1VKPT8/R0Y9R0NDOTo1Ozk5Pjw8Ojo8Pj4+Pjg4MzE1Nzg5Pj9BPzs6Pz08Oz09OTs8OTs6Nzs+PT1DQT8/QUJEQkE8ODU4PUNGPUREPzw/iZ2en52Xl5WUk5aZnpubmpuYlJ2Uio6Owb7Dwr6+vrm2usCxtbGzt7fCtbOrrbOoqa61r620trnCyaaEeIuisLWcamZnVllfSUlNUFRve4upsLe+ubK1sry5vLa5vrWZsb6us3iwycTAvb+5s66yvLquu7Szpquorbq+uMvCv76sq7Cvs7q3ub67wMXBu7y3sLXEtb+0uLu0u8PCs7a2sbisqaWrsr23v7+7u7exvL28trGvq6uprbOvsLCrsLSpuMC2sqm0tbC3tq2spqu7s660uMKwsbG1sbK1saywsri4ubi+tLGzrqyxramvrqqyuK6trainoZ6ptr+4ur+wlol9gHxxdHd0d3JsX2NhXF5PSUI/PUlERk1EQDc3NTs6OT48PDk4PT47PT86ODMyNTc2OD8/Qj86OD4+PTw5PDk7Ozo8Ozs6PEA+QkI9QEE/QkI/PDs3OjxBRD5CQz8+QYqgm6GdlJiVlZKYmpyWm5WalY2bj4SIhru0vb+7vLm3s7y8rLOytLS2wLXAr7Kzqqqxt62pubO3v8aoh3t2jKGYX1NDWVVIYmpVT0VKZZGlr6+2urW0sqy8ubi1uMG9j6zEtLR3p8rCv7m6ta6lrLOxprCtqJ2gn6WttrXCt7a0paiqqLC2s7K6tbu7u7W4trC1xLK+vL+8ubrFybq9vraxp6SeoamxrrW5trKxq7S2trGopp6gmaWmpKynq6y2qa+6sa2kpq2lq7GrrKmtuLawsrjBtrGxtbGvu7ayt7W1sry1urKwsbKutLKqrq2nuLWyta2uqqiosrq9wLa0qY6Ce393cHxvdnJuY11mWV1dU09OQT5KQkBLSkA2NjU7Nzg+Ojs4Nz4+PDs/OjkzMjc1NzU8PD48PDg+Pjw8OTk5Ozs7Pjs7OTw+P0E9PEJAPz9CQD47Njc6QERBQ0E/QUKJoJ2loJSWmJiVnqCcl5uYmZGMmYmDhoS1r7S7u7S1sLG2uq6wtLOvtbq1urC1s7KttrqvrbyzuLi/s5CBeYiQbk5LQGVZQk94gZNoTUNehbG1s7WytK+su7q4trm/xn6TuquiaKu/uLWysa2tn6Smp52kpZyWmZmZn6muuayrq5+lqKSrrq+nsKuvsbGtsa6usLmwtLy+uLm4x8W8vLu4qaKcmJufp6assq6zqaapqq6popqXl5GcmpijnqKir6ekrKaompqemqGnp6anqa+2squ0tq+qsK+xqbm2sbWxrqy3s7avrquuq7S1ra+rq7GtsbKoraurs7W3ur2wq6GLeoJ5cnZzbXVpbF1balRdW1BOSERHTUJGTkY4NjY1OjU6Pjg7OTc8PTo7PTo5MjM2Nzc3Pjs9Pjo6Pz48PDw6Ojs5Oz47PTk8Pj1CPDtAP0A/QT8+OjU1OkBFQkRBQEJBiJ+ipqGYm56dmqWpmJudmpmUjJmHhoeGrq2uuLmxsqiur7iyq7CwqrK1ubm+tbK4tLm6trm7tbWzt7aVjIiFfFhGQU+HWElKWXiOg2NBVaO5s7SysLGtsLm4tru3ur2Up7Svp3etsKmrraujqKGdnZ6Xl6CVkpaXj5ifqK6ko6Sgoqaio6mpoaanpaqtp6ynqKesq6yyu7SztLm6trK2ramgmpaWm52fq6yqr6Oko6GpoJuTjo+QlJKSmZaanaSloJ+ep5iVkpSZnqSjoaWqrK2iqaqppKmtrqW0sa6xraqprq+wraWmqqSos66trKmmpqmrpqqnq7Ksr7Oxq6mWgX+Bd3J4aHV0bmVVYWNXXVFPTUhASVJETUM9ODg3NTo3PD46Ozw4OTw7Ozw7ODI0ODk3ODs7PDs4PD0+Oz08Ojk8Ojs9PTw6OkA9PDw7QD5CQEE/Pjk1ODs8RkFDRD9BQYijpqKjnqCfp6Coqpufm5yZmI6Xi42PjKqpqLGvsK2lp6ayr6mmq6CvsLu1vby4wMG+vLy8ua6sr7K8qZiZlWhNQFN5cU9JSUxpnYBaRVWwurGss6+urK22trK0ta6ppp+am52fpqieoKipn6GnlpuXl46dlI+Qlo2Xm6SooKCioqKlpZ2jo6CepaCkrKWmqKSio6OrrLOuqa6urqeqraisoZyamJmYm6qoq6ufpqKbo5yVkIyPkJCTkJeVlpifnp6bmaaXk4+Slp2ioKWipqSnoKKko6Ghq6uksq2qrKyno6yuraufoaKkpK+srKmmo6KqpKqqpKmrpqmsq6ahiHiDfHZ/emN3bG5dUWlUUE5HUE1MQ1BRQD47PjQ5OjU7OT07Ojk9OTk8Ozw8OzkzNjk5Njo7Pz06ODs6Pjw6PDs5Oz07PDw9PjxAPT88ODtAQEE/Pz45NDk8N0FDQkQ9QEOOqqSjoqGinaulpqimoZ6dmZ2PmJWTkJWnpKGmqKmlpKChp6uhnKKbp6u1sry9wMLCwL7AuLSnpKyovcGqpbxnRFOcflBYSUthSleOYmVlg6+1qrK0rqqrr7Cys62lnZGXk4+XoJ+ioJyjpJ+eqJSblpeMl5GNkJeTmJ2iqp+fn6Cjpaicn6ChnKKfo6ionKehoKSfrKisrKCpq6agpKimrKOenp6al5qrpqqxo6WonqCclZOQj5GRmZCWlZiXn5ibmZukmZeUlZqdoJ2nqKWgo6Kho56doKmqpa6upqipoaKqrqqnoaCio6msq6eppqShqaKlqaalpKKmpKijkn58f3V2fW5re2RoVlJkTUpIR09TTktOSDxFQDwyPzg1OTs+Ozk4Ozg6PDs7Ozk5NDg7ODc7Oz48Ojk8Oj07Ozw9OTw8PD49PUE+QEJAPTc6P0FCQEA/ODU1PDpAQ0BEPkFGlq6koqWeo6KpqKipqqWmnp2imJiZmZWbop6bnqOioKOgoZqgmJeXlqGorK62t7q5ure3u66ooKGpoKvGv8qfT0F1mXBQbUpMZGZ2dGFdYnSSsq+us7WqpqyropuZlI2RlZaYmJyfoqKcnaSemqSXl5eWkJKRkZOal5ugpKqeoaGepqeqop+gp5+dn6SnqZ6jpp+qnaqtqq6nqLClo6Smp6ymoqWimpmer6iusqulqqqgm5iYmJWTlpqTlZWalpuXl5mhnpyclpuhm56ao6eln6GioqOdm6Gmp6aoraOppZ6kp6mkpaWhpaSsrKmmq6eioKSjpKenoaCgpaKmoIl7gH13eXxleXlgYlNVYEhJSktTVElTUU05P0I2Nz02NTs6PDw5Ozs4Ojw9Ojs4NjU3OjY5Pj0+PDk5PTk9PTw+PTs7PDo+PTw/Pz9APT03Oj5AQEA/Pzg2NT08PkFCRkBAR6CupKaroaOqrK6tp6ypqKCipp6bm56aoJyalZmfn5uen56WlJOXk5KcnqSorq2sq6uvqq+pnpeepZylx8aLV1NKZqRZZn1vcltSa2RcZ2JgbZG1sLC4rKahnJ2alJeamZCOkZWRjI6Nk5minJejmZqXmJmUmZiWnZufpaapoKajnqeurqumorGjmqSmpqqioaqiqaSosquxsqu5qKarp6urqaysp6Ggo7GusrG0qrKuo5mcnZ6hmJubmpiZm5SWm5aZnaWhoJqjoZqcmZ+kop6gn6KmnZulpqWkpaijp6OepqOinqaloqWlqKykpq2noJ2eoJ6gpaGenqWgppmBe4F8dnZzaIJsZVtTW1lNUUpPT1ZNU01CNz5DNzg9NzY6PDw9Ojw5ODo7PDo7OTc2Oj01OTw7QD03ODs3PTs9PT06Ozw4Pj09QD5BPj4+ODg8P0BAPT43NTg9Pj1BQEZAQUihqqCrq6GkqquwramtqaelpaWkoKGfnqWXl5SYmZ6YnJ2blo+VmZKRnJihnaqip6Cep6Gln5ySm6Kan6qjjHlVanJ3dXBjd3ZYV2JgZGlbWldora6sr6efnqKglpCTm6CbmZeSk5+coaObnpuWn5qfl5uinqWhnqSfpKitraisqaSstLe2sKe0rKKtraOvpaSmoamorrWzsr22vrCssa6tqaq0sbCoq6iztrizuK2ytKSgnaWgrKGhoqGgmpiWlZ+bm5iloaCeo6GgnpucpaCfnZyhqJ+fp6meoaOkoKagnqehn5ymo5+ipaOooKmrpZ+dnZudmqainpyjnqeQgYKAfHh2and1Xm1bUmBIUlVIRlVXSkNNRz1LSDhGPDc3Oz49PDo7OTg6Ojs6PDk2Njo8Nzs+PT8+OTc9OT47PEA8OkA6OkA/O0A+QUA9PDk3Oj5APzo+NzU4PT0/QUBEQEJGnKueqamipamprqimqqWmp6aoqqGlpKOmkpOVmJacmpqcmpWTmZuNk5+ZqJ2un6eenKGdnpqZkpiem6GhoKR/b4JwYGNXS1tSWkxMUVlSSE9OSJmsqqmkn5+ZkpKUmJiWlpWMiIuOlZ2cnZ2el56Zpp+gqKWxqqeuo6uutrC0srGutri9v7qttbSwt7CutKmmpKWsqbmztbvDvMPBtrq2q66xubi8r7OwtcK8t76zs7WirKKpqLKpq6inqJqZnpqqp6CZp6Cfn6iopaSenaqiop6bn6igpKetmZ+jnp6nnqCmnpycoqGbo6KhnZympaWkn6KZnJukn6CboJyjiYWEfnZybWl3bWhtXFhbQ1dOSkdNR0NGTTw+TD40PDk2Oj0/PDs6Ojg4PDk6Ozs8NTQ6PDg5Pj4/Pjg4Pzk8Oz0/Oz1BPTo/PjxAPj8+Pz08Njs/QT07Pzg1ODw8QERCREFCQ5WqoKapo6mqqKmjoamgpqinrK6lqaWpqpSSl5mUmpqanJiYmZyamJmqoLGit6Swpp+enZ2XmJWZnpqco56ciWJXXmVgV01RRz0/QENEPz5CUnipramqpZ+en6KjnZ6dmpyblJOVlJ6dmJSFnZqgmqukq7KwubKysbKxur28vLm2uMO+v8K/tru7wMS5vbusr6exrbHCtrjCxsDIysDKv7C5ub25wr64s7vGxL3DvLezqrOtqrO0r7Ouqq+jnayotrGto7CmoKOwsa6wpKWvo6GgmqGmoaSqqpmdoJmao6CmqKGcnqKemaSenpiYo6OhpJ6mmpuipJ6fm5ubnIeGgXt0cmtrdXJxaFZcUUZVSERKUEk/RUE0Rkg5NTw+Nzs8Pj08Ojo4OTw4OTs4Ojo4Ozw3Oz49Pj02OEA5Ozs9QDw9QDk3PD07Pj0+PUI+Pjc6QUA+PD45NTg9Oz1DQEFDQkGRqqGlqqelqqimn6KnnKasp7Gyq62jqayVkpWalJecoqGbnqCinJ+psqu7sr+rr6ylnqCgnJyYmp+gmqCflXxfXmVgUEZEO0M+Rjw+OTZOfqqyp6OjoqCepaumnpiclJGZnZmVjIqGiIZ4bYigpKKrrLS8tsO+vrO7wcPCxcC/wsbGxcPIwsDFyM3QyMvDsre1vrK+xbu+zM3FzMzM0se+v8DCvsfGwrfDysnDwce/urS6u7W7t7C2sqq6sq67uL+7uqu4rauquLu1vK6uuaOmo56mpaKjqaaZm5+Zmp2nqqegoaGkmJSjlpSZkZydn6Sep5+en6KdmJmUmJSIhX56cmtjaW94a2VZW0ZLTEVEVExEQ0U3Oj86NTQ5OTc5Pj87PDs7OD48Njo9OTw9OTw9Ojs9Pj4+NztBOj45PT45PT44Nzs6Ojs/Pz1CPj83OkFAPTw9ODY2PDo8QT9BQUE+kqugp66ooqulpKKipaGlqquwsq2upKmmlJWWmpaUm6SmnaGqp6KrrLy8v8PBsrK4p6Ghq6qhnJ6hoZ2bmn1yaWFXTkU+SVl8b2FBPVyOrqygmZubnp6Zl5eXko2Pl5eTjo2QjIKDgndycW1wj6atrrS5xbvNx8u/wszNzczHydHMzMzHycXGzNDS1c7Tyb3Av8O7xsXIxdHTzdTQ09PMysLFxsbKyM/AydHMx8bIxsK8w8G+v7+2vrOtv8DDw8fFx8Svv7myuLzEwsK6vLy1rqenraigoqmlmpagmpmdqKupo6SknpePm4uQmYmVmJugn6OdnZeempOTi5WPhYF5dHNlYmdyb2ZeWlpDTkxERlBJRENANTU1ODlCPTY4OkE+Ozs+PDk+PTc6PTk6PDg8PDw7Pz8+PD0+Qzw7OkA9Ojs6Ojg4ODk7QT48QD8+OTtBQTs7Pjc4Njo8PkI+Q0FAPpOvn6ivpqiro6KloKampKuoq62qrqKqo5Kcl5ebmJuirJ2frqalsarFxszOzb+wwaikqKytqqCdo56cnpVpZlxUSURAP0uGnqSYg6CyraOenJ+amJeUkpSWkZCPjIeEg4iHg4CBgYB5cXJvbHmktrq5vsvB09LTyM3O0dPR0tHQ0dHNzs7Qxc7U1djS183Gx8nMw8XKz8rT19LX0tXW09TIzMfMzcrTzc7TzcXJysrCx8zHycnGv8Ozs8jFy8vLz8fKv76/vcHGxc3MycnAw8Cur7OonqKqo5qTnpyYnqaprKSlppaXipWFkZSHkpKSmZualpiQm5WQjIaRi4B7cnV2Z2NndmpkVldRRE5GQEpRQj5CPDoyMkE8RTw3OTxCPTs9Pzs7Pj05Oj48Oz44Ojk5Oj86Pj1APkA8Pjs+Ozk9PTw5Njo6Pj08PEA/Pjk6QEE6OT44Ojo6Oz4+PEE/QT6QrKKiqaanqKSfop2qqKOso6OnpqyiqZ+To5iWn56dpK6bn7CrqKyxyc3U18/Gu8esrbO3rK6jnqOinaGbYVNMSkRDP0NTsNK9sq+mnJycoKShnZqUk5WUiX14cWtlYmhyb3F7hYqAdXBucXRwhbPDvsXR0NfW1tLWztTW19TT0dPU1NPP0cTQ09bY1dbSy8nO0cvGzdHK0tXW2dbX09fYztLKz9HMz9DM09DAyMjKxMzMzM7PxcfItr/KwNLNzNDHysnAxMPIzs3Q0c/NysjNuLe7qJ+lq6efmJ6jnp2qpa2pqKiSlYiQhIyRho2MiJOVmZCWjJiSj4aHjIR9eHN2cGNgZXJiXVJcSUpHQUVJSj47QTg9NTU4Njs4Njo8QD07Pjw7OUA7OTo8Ozs8Nz09Ozo+Oz08Pjw/Ojo8Ozs5Oz89OTU7PD48PD0/Pz46O0BCOzk/OTg7PT0+PzxBQEQ8hqugnKegp6Oim6CbqaSlqaCfoaGmn6ifmKSimqmmoqarmqOwsamotdDU19rSx8bLtLXBxbG1qKGkpaCioVlJQEFEQUZRdrKvppqUl5+cmqCgnpucmpWJd2ljYV9fYF9eX19dYWx1c3Bwb2xycXWSxMjH1NbX19fT1tDV1NrU1M7P1dTU0dHM0c7T19bT1dDP0tPRydPRyNDY19jR2NLX2dTVzM/Pys3Sy87RwMbDyMbPztHR0sjMzcDLzMbTz8zPyMXLx8fJzMrU1NHVz9LM08K5xbGlqLWup5uoq6Wdsqiws62sk4+TjoiLjoOPi4SQjpmNk4+Zj4+ChYx8enFzdG1hY2ltX1ZQX0pKQ0ZDUk1APD40Mzo9NTI4NTU8PEA8Ozw6OTpAOjg7Oj46PTg+Ojo8QD08OTs9Pzk6Pz07PTw9PTo2PD0/QD08PT0+OjxAQjs5PDc0Oj48P0A9RkFEPYKknKClnaWlo5mcnaSeo6OfnZ+doJqnnpyhqZ+vraqqq52lrreoq7fY1NXZ2dHO0L+8zMm2vq6mqqiho6tlQzg9PkRYgqqon5eVl5manJ+dmJyckn1xZWNiX19hX15hYF9gYF9gZW1wcG5rb3J3d5zMwdPV09jY1tnR0tLXz9POy9LN1dTRys/N09bS0dbNz9XV0cXR1MvQ1NXWztPR2NfX2MvIzsTJz8zKzMDKwMnKzs7Qy9DOzszPz8jM0NDLzsvDysfJzcvM0tPN09LR0NDKvci5sK67ubWrtrCtqLits767sZqPoJSRjo2IjpCFkY2ZjJGRlY6RgIWJenZvcW9rYWRucGFXXFpJRkZETVhFO0A9MzM8PDg3ODU1Oz5APTk8PDg8Pjk8QDtAOj04Pjk4Oj88PTg7PkI6Oj08OkE9PTw6Nj08P0A9PDs9Pjg7QEE9Ojw4ODs+PD4+OkVCRT6Bn5mlp6Cfo6eam5+cl56eoZqdmpyappufpKefuLa1taykrK6+tLDA2NLX2tzWzs3Kw9LPwcGxqaytqaSxekhGQjtXjqGblZOWm56enpyTlpeUiGteXl5hZGJgYGFhYGBhXl9fXlxibXJvb3N0dnZ5pL/M1dHW1NPY1s7O08vOzsXOytLSz8fOzc7UzM7SzcvX1tDM0dTLzNDS08rO0dXS1dXKwMrCxc3CyMrDzMTGycvLz8vOzdDO08zGyc/NyMfLxcfBxsrMzdDSx9DPzs7M0MXHwbi5vcPDvcO4srK+sbvDw7WqmKWhmJaSlZWSi5SNmpGUlI+PlYKJhnlxcmttZ2BgcWhZWGhWTUdMSVBRQjtDPjs2ODo4Ojo1Nz09QDs6PD05PD05PT06Pjo8ODs9OTtAPD47Pj5BPDk9Pj1CPTs3NzU/PDw/PDw7PDw4O0FAPDo8OTs7Ozw9QTpFQUU+hJ6bqK2epKSqnJ6fmJKXm5+am56ZmaKVoamppcTCwb+7tbKxx8O4ytXW2drb2MzMz8jW1cTCta+0qJ+tl3hscHF5kJuNjJeVkJORkZWWlZCLfGVhYmJgXV5hY2FgYF9gYWFgX11bXWdycnByc3Ftcnmlx9PPy9DQ09TKxcnJxsa/w8XPzsfFx83K0sjLzs3G0dLQzszUysfLzs/Hx8/Sy9DPxrrEv8bKvcLHyc7Fw8fAx83IxMzLzM/IxMTQyMbCxsjEv8HHzMvMz8LLzMnHy9DExce7x8PIycLPwb28v7DByca5vaqwsqelnaKcmJCbkKOZl5mRlZiJj4J4b3Rka2BeZnFhW1dgR0hIR0lNVEc/Sj02NDM1NT09NDg9PT06Oz08OTo7OT89OTw7PDg6PDo6QD1APD09Pjw6Qz48Pz04ODk6QD4/Pjw7Ozs7ODo+Pzw7Ojc5PD49Oz49RkFDPYOgm6qupa6qq5qdoJeUjpedmpmgmpqcm6WysazJzcrIxL68uczMxtDV1dja29jQyc/P0dPIwre7u62jtn5og4Wkq5SOjZaPhYODg4F9hIR+c19bXl5eYF5gY2RjX11dXl9gYF9bWlxgbHJxb29rbG9vfbnRyMnKz8vNxLrAw7u7urq+ycbCw8DDyMrJyMrIwcXMxsjKzcnEwsvJwcHL0MXLyL+5wrvGx77Axs/LxMDDu8nHybvJx8XKwL7Cy8bFxL7GvbzBw8XMxca8wMnDxcfSxcHJv8rJxsjG0cPDxsOvxMvHw8q3v7y6tKmspKWYn5iso6Gmm6Ogm5V8d3N0ZmlaYW5tWltYUkRMRkJHRUxERlNANTQzMzU/PDM6PDw7OTw8PDg7PTtBPTo8Ojs3Oz05Oz07PTs6OD4+PEI+Oz88OTk7Pz07QD48Ozk5OTk6Oz06PDo2OTw+PDs+O0NCRD5/pZypsqm0rrCdnp6YnImUm5man6Kfmp2ov7i8ys/RzMfCw8bNzs7M1c/V2tjZz8vSzc3OyMG1w76xr7ZsX3p8oZGLkpaGeoCFhX92eHVycF9bW11gYGJjZGRlZGBcXF1dX15gW1laXGJvcm9raWtwb3OPx73KxcvAxsKwtrqysrOyscK8vLy6uMHBwcS+vbm9v7nEysXGwr3GwLi7xMm/wcm7t7u6xsO/vMHOw8a+vrXBvcO7vca7w7q0vMbEwsK3v7a2vr+7zMO9trrIu7++y8PBxsLFycfJxtDGwszIssfJw87MwMXDv72yt7Cyp6ioubClrbCqrayUenZ3amRnYGhvY1ZeWUpGSkZIS0FFQkZKQDk6NjU4ODU0Ozo7PDk8PDs5Ozk6QD46Ojw6Nzo7Nzo7Oz88OjxAPUA/PT8/Oz07O0A8Pj4+Ojk5ODk3ODo8PDw7OTo8Pjs7PjpAQEU+fqygrLWqt7SyoZ6fl5qNlJaan52mop2et8XCxMjO0srKycbNzc7RyNDF1dTV183KzsXJxcfBucW9q66mYGR2g5OLiIuEeH+Ghn9+hHt0dGNcXF1eYGBiY2JiZGViXVxbXF5cXl1aW1xeaHNxbWdnbnByeZ29zMDDusG4rbCxp6qtrKe4tLa0s7O0u7a9sbewta+yu8K8wcS8v7u1srq+wLjIubS7t8HCvbi9x8HEvLWvsra6v7TFt7u1q7i9vsC9sbq2sLe6s8a8t6+7v7W3tcW8vsPFwMTFxsfLxcDGxrvHy8DPycfDxsHDt8O9vba5vse/rLW7tbe2jnl0eGdnZWJrbl1WXmBGS0hISkZCREFFRT88OjU2NjYzMzs6Oz06Ozs6Oz44PEE9PDo7ODc5OTk7PDo+Ozk+Pz1APz5CQD1AOjo+Oz89PTk6Ojo4NTY7PT48PDo7OT49OT86PEBAPIi3pauzsby8sa2foJmUlJiXnqujr6qnpMbLzcjFyM3M0MzNyMnIysjKxNDN0s/NxcfBxsC/urfJtqqwmVtocIqPhYiJenh+hoZ2d4F8c2hdXV1dX2BfYGRhXmNlY19fXFteXF1eWltbXV9scG5pZmtubnJ8pMfAuLi1sKusp56iqaeeqqyzraqsqrSttrGzqa6nrLO7urbDubq6sau1ubu0wrqwwLG+vLu2vMi5w7atqqiwssC2uL2wsaexs7S7vKuutaautq67srGqubCuu667uLvAwL66w7/Gw8XAvMbBx8u4xcfFv8fDw7rExsK7xsnMy7O5wr27s4lzd3ZraWBibGhYWFdbQUxLTUpFQUM/RkE6OTo5OTY4NTQ6Ojk7PD07Ojs+ODtAPD05Ojc5Pjk7PDo4Ozs6Pj45QT0/QD87Pjo7PDo9PDw4OTg5NzY4PDw9Ozw6Ojs+PTs/Ozs+QDyKwKuouLe5w62zqZ2ZlJaZoZymsLWxt6bFztLLw8XBxNDHzcHDxr/ExMPDysLJyr/AvMK6s7W1w66qsJJban+Sh46Pe3h9iYV6e4SBd25eXVxcXV9gX19kY2JjZGJgX11aW1paXVpaWVpcZW5vaGZoaWtucoGturC1rqWlp6eaoKSgmpylq66kqKKrqqyrsKOmn6qttLaxvbmvt7Corri0s7y4tL2vuLm2srzBssCupaijq7Gys6i9qquoq6yttbOlqK6hpK+psqaoqK6lqLessbO3urq7sry+vr7Ev7XCwcfIt77AxLfEw7+7v8TCvsTIzMq/v8PAwKmHc3RzamlcYW9jV1ZYUEhZUlNLRkZFPj9AOjc4OTc3NjQzNzo5OTo8Ozs8PDc7PTs7Ozw4OT44PTs8Njo9Oz89N0E+P0A/Ojw8Oj05Ojs6Nzc3ODg3OTw7PDs5Ozo8OTc5Pjw+P0E7jMKvrry3ucSwtrCbmZWcmKqpsLGztb2vxdDPzMPHubnLwcu+u8m2vcO+usq3wcPBtLa8trGvtbutqKuSZG2Ig4eLgHp9f354dH58c3dlX11cXF5fYF5fY2NhYmBhX15dXFpYWVtbWVhaXF9ma2ZkZ2Voam9yhaqlrKWenKGklJ2kmpeRoaOpo6Ofpaanpq2gnZykpqyysLa3p7GtqKq0q7S6sba2rra5s7C6urG3paCkn6axqKuouaqkpqeop7KtoKemn5ukpqyfn6ejoKGxra2ssrSztLC1vLa7wcCyu77DwbG5ucKzwb7Atbi8vb68wsfFw8S/wMSgg3hwbGJmYGtvYFVZX0hOZ09UR0ZLRjw9QD06Ozs4MjY1MzY5OTk7OTo6PDo3PD88PDs8ODg8OTw6Ozc4Ojo8OTg+Oj89OTg8Ojs+OTc3NzY3ODg2NjY7Ojo7OTo7PDg1OTw6Pj5AO43ItLa9uLrAur22oJ6UnaGmurars7O7s8TPycvDxri3x8DMv7jJt7vFuLPEuLO/wKy1vLKspa+zraGjkWlyhoWGgHx4dXNvbWppaXBpX2BdXFxcXl9fYWNiYGBgYV5cW1xcWFlYWFhWWFteX2RjYmVnZ2drbW+InamflpWaoZabopiVjJ6hoqecoJ+kpaKnnpujm6CrsK2xtaSpqqqsrKS0uK23sKyztq+zta+wqp+en6OisqWmqbitoqamoKitq5mgn56ZnZ+lmpqjnJyer6mrqKqrra2wsrivuLm6sLa8u7qrs7K5s720trGxtrW/tr7AvsPCu7q9l4R6c2tfZV5kZFhUV11JV1xLT0dKSkdBPD8/QDs/PDA1NTM1Ojs5Ozg5OTw8Nz4/Oz07Ozg4PDg5ODw3ODo7Ozo7Pzo9Ozc4PDo9PDc0Nzc2NzU3NDY2Ozc5Ojs6ODo5ODo7OTo8PzuJyba4vru3wcHBtKSkmZqkpsCyr7astLfFz8jIwMa7u8PDz765x7i3vreywrSxu7usubqxop6pq6eYno9tfoWGf3hybW9ta2JeYWZmXV1eXV1dXF1fYWFiY2NiYV9cW1taWllYWFdXV1hYWFpeYmRkZWZmaGlrco2nnJOUlJqXmqGWlpCboqGonpydpaeipZygoZuZr66ur7KhpaOuq6eitbCysqypr7OnurOmtqCin5yjoa2joqq2q6Ojpp6lpqOWmZ2XmZudoJqXnZydnK2hq6ejo6atq7KzqrWwsquzubSvqq+ysrO3s66pra6yuLG6trq9wLizsZSFeXVmX2ZeW1lWU1pVS1tRTElFSEtJQj0/QUFAQToyNDUyNDk5ODk7OTo9PDY9Pzs8Pjs3Ozs3Nzc+Njo+Ozo4Oj07PD06Ozw6PTs4Nzk3NDY1NTQ2Nzg1Ojo4Ojk5PDg3Ojg5PkA6gci9uL2/tr68v7OdpaOYpbHCtba9rbS4wczIxr/FtsHAx863wMS9s7m5s7+2sbm7rbK0r5+apKqglJqPeH+DhH94b3F0cWhlY2hkY1xcW1tdXVxbXmBhXl9fYF5cW1pcWllYVldXVlhXWFdWV2FkZWNkZWRkaGp2oJuTk4+TlpaelpiTl6CdoZyWoaGppJ+fqZ2bm6unr7CrnKOkuKqhoK6otqqnp62xpLiwpLego5yZmaqnoZqsua+ioaScoqCgk5ShlJaWm5iYlpeclZ+pnqmkop2jqqqxrai0rKqnrbOwpauus7GwsK+vp6insq6xtK+8tLq4rqOUgXp2ZV9hVllYU1JTS01eTFBMR0hMS0U9QD49Qjw7NzY1MzQ5ODg5OTo5Pjo4Pj47PTw8Nz49Njc2PTc7PTs5Nzk7Ozw+OTk6Ozo4Njc2NTQ1MzEwNDU2Nzk6ODo5Ojo3Ojs5OT1AOnbAvLS5wrG+t72unaenoqq7wL3Aua60uMHMx8XCw73FuMjMssHCwa68u7W7vLW5ubCvsKqcmaGplJGKi4CAfHdxaWxydHBoaGVkZmFcXFpZWlxcXF1eXVxbXF5cW1xZW1taWFZXV1ZXWFdXV1ZbYmNiYmNiYmNmaYGVkpSLkZOTmpiclZacn5yflqCgp6akpqefnaCmoKqvpp+io7eooaGiqLOipailsKWxrqy1nqGdlpWpoaKUrbGxn6Ojnp6Ym5OLoZSRk5iYk5eYmJeep5unoqKapKWlq6SlsKelo6usraaorq+vq6iqqrOlpquvtLGuvLaxr6+gknp3cmVhXFtdWE5MUUhSYU1WUE9KTU9FQkQ/OT02OTo3NjQ1OTk7OTg4Nzs4OT0+Oz47PDY5Ojc7Njs3Ozs6ODU6Ozo7OzY8Ozg4NDc3NjMzMjEuLzI1NTY7Ojg7Nzg3Njw7Ojs7QTh4u7uxtb2wu7G3rJ6lpqy3u7zBxbqxubXEycnAw8bFx7bFxLPBv8Wrt7e9tr26u7Wyq62omZifo4uJdImIfnZuY2FmaWhmZ2lmaWxgXVxbWlpaWlxdXFtcXl9cWlpbWVlZW1dVWFdUVFZVUlRSVWBgX2BhX2FhY2RpgJKSiI+Nk5GSnJSVlqSZoJedoKWiraalpaOko52qq6Wan6WxqqChnqWrnqiin66sqamuraKiopWXopuckKupsJyfop+fl5iTip6RjZKTlpCYmJOcoaOdpKGilaCipaabo6uloqSrpKuupa6yqaalpqa0pqmorbO1tLm6sKqsnoxycG9gW1dWVVJGUE5IWlxQUklUS1NMRUdKRDg7Oz08OTY2Nzo5Ozo5NzY5Nzc6Ozo9PDw2Ozw4PjU5ODo4ODY1OTo7PDk3Pzw5NTc4NDUyMTIxLi4xNDI2Ojg2OTg1OTg5ODk7OUA5e7W0rLS7srCrsq2dqKevubmzwMi6tcCvxcjMusHKzMi1ybyxvcPJrbG4wbW8wLy0taqsppWZm5uIgXKIg3t0aWlqbGdqbG1ramxlXVxcW1tcWlhaXVtbXmBgXFhYWllYV1hXVFZWVVRVVVJSTlFZXVxdXV5fX19iZG2Nj4OQhY6QjZmTlJKcmqKcm6GpqauorKeppqSZpa+llZqlr6mgnJmboZ6vmpyrtKClpp+jpKGUk5uWlpKpqq2anaChoZuUkIyZjoyRjJKNlpWQnaKgpJ2co5WboKOhl6Koo6Ooq6Crr6Stt6ajpKKsraqoq6+zt7K9tbOrr5iFdHNoW1hZU1VSRVhMUVtYTVROUExRUklOSkM9Pz9BPz03NTc5OTw8OTc3Ojc5Ojs8PT47Nzs7Oj02Nzo7ODk3Njk4OTo2Oj05OTU3NzU3MDE0MS0rLzQzNDk4ODo6ODo6NzQ4PTg/OX6zraezt6+op6+um6morLe2q7zKu7a/rMvGxbjBzs/Is8S6t7vCyLGtuL+3vL27s7WmqaCWl5iWh3p0gHZ3bm1obW1tcGdnaWZkXVpbW1tbXFtZWltcXF5fX1xYWFlYV1hXVlVUU1VWVVVTU05QUVlaWlpdXVxeX2FlfYuAin2Kj4mSjZaRl5mioJugq6qmr6yosaWpmqCtoZWWpainnZiQj5qerpeZqKuZn52UpaGfkpGSkZOVqKulmpmZnp6WjoyLk4aJjYOPi5KVkaCeoaSZlp+VmqGinpSbpaaoqKigsbCmsb2on6OstKqup7C1sLm1wLGusauRfnJzYlZUVk5SSkdWUFJSTExXTUpNT1JHTUtBQ0ZERD5BNzU4ODk7OTo3Ojo3PD06O0A+Ojk7OTo/NzU5Ojk4NzY5NTg3Nzk7ODU1NzY3NjEzMjAtKi4xMDI4Nzc7OTk7ODk0ODs4QDh/s6ymsbeqpaKxq52qp6mysKS2xrS5urPKxbm6wcvQyrG2t7y9wcOxsLG3rbS0u7O0oqOdnZeXlIOAdmtnbG5xbnJrcGtkZWdlXlpZWllaWlpaWlpaXFxdXFpYWFhZWVdYV1VVVFJTVVNWVVJOTk5SV1hZWVlZXFxdYWp/eX50h4yGkImXiZSUmJuYnqmboKumpqyeqJqhppyTj5+jmpeXhYSSm6SQlaOdlpaWiKKbm5OLjoqQmqWnnJWVl5uRkoeUjouBjI2AkIuSkpKgmqGilpSYmZWippmNmaSmqaahoLSyp7K4oZyitqypraSysqa1vLWrrLGjiXlzbl1OUVFMT0ROTk5QS0ZOTkpKTk5RSU1KQUhMSEhDPjg1ODg4OTo7Njk6Njg7OTk+PDg6Pjk7Pzg3ODk6ODg2ODU3Njg4OTc0NTc3ODIwMzAxKyktLzEyODc2Ojk5OTk4NDk4OEE3d7ampLawpaekqqWgqaaks6qissO1tbKzxsa2usPKzMazrLm9tLjAr62psJ6mrrqvrZ+Zmp2VlId7g25fX2ZycHZxaW5pZWdoal9YWFhYWFlZWVpaWVtbXFxZWFhXWVlYVVZSU1JQUVRRU1VRTU1LTFNXV1ZYWFhYW11hbnF1b4OHgYd/kIOOipSRk52hj5qco6KkmaWXopyVjYiZmoxzjYN+jpeWhpGakJSOjnuZj52Mgol/ipigo56Qk5iWhY6DlH5+dIqNepCHk5CQnZuampKWkJ2Oo6OOiZqgoaSkm6K0r6ywrJ+YpbimprGhsK6csLyqqa+qmYN3c2NWTVJPUE1DU05MUE1CUFFISU5STUhKSkRLTUZLSz03NDk4ODg7OzY5Ozc6PDk6Ojs3OT85PkA3OTo8ODk3NjQ0NDU4NzQzMTI1ODUvMDEwMikoLC0wMjc2NDc4OTo6NjU6ODdBN3i3oaO0qaalqKOmpaamprOnpbTBuLC0sMnEt7nBzsa9s6y6waytw62ooqaSnaa2raOgj5WWkpB9d35mV1ZfZ2ZpZ2huY2lpZ2JcWFdYWFhZWVlZWVlaW1tbWVlZVldXV1NUUE5QTk9PUFNUUk1NSkhOU1NTVFVVVllbXWpqcWt+hHtzTlhyj4KXho2cl4uUkZ+YnZWUlpWPloqAlIlfO1ZvfIyUioGMkoyQhoZzioWXgXmBe4aTnZSDlY6RkIOGfZN4cXCGjH2JgZGNkJeamJOLkIqdiJ+Yh4iWnpqhoJenrqmtqKielq2zoqaumayrmKi0o6mto5N/c25fW05TUldMRFRKUE1MRk5PSUVMUU1LT0pJTVBGSUk9NzU5OTk5OTo3Ojs6Pj44Oj09Nzo/OD4/NTg5Ozc5Njc1MzMzNzYwLi0vMzQ0MTEwLy8oKSsrLTM4NTQ3Nzk8Ojc5Ozg2QTl5t6CjrqGmpqqgpqmno6mvqKe0wrmwtbDHwrezvc+/ua+utcKnqsWqo52Yg5ScsaKamIaUj4uHfXN1XVBMUVVZWlddXmJnY19ZV1dXWFhYWVpZWFlYWVpaWllYWFZXV1VTUk5MS0hHYlxNT1JNS0hGSE5RUU1PUlRWWFpgbG5neoFzUEI/f5WSkX2IlYyEio2bjpaVipKIhpWHeYl/YEpRbniLkoR+hI2LhX9/bn9/lHh1dniEjZpwUY2IioZ8fniUdmh3hoh+iomWi46RkpaMhIqIlYSbjYKEkpqWnp2UpKOoqaWknpuwqqGkpJGmqZaiqpyipqiJdm1mXltIUVFTTUlVTVJJTEtPSUhGSk5MTVRLUVBPRklDPTc2OTo4Ojs7ODo7OD4/OTk+PTg7PDY7OzQ3ODs2Nzc1MzQ0Njk2LzMvLjEyNTIyMS8sJykrKiw0ODMzOTg5Ojk5Ojo6Oj85d7aco6edn6Gvoaeopaeor6yqtby2uLazwbu2qLnIuLaoqLW2qrK9pp6VjX+Jk6iWlYp+joOCfXdwb1hNS01NTkxNUVdbXFpYWlVVVlZWV1lZWFhZWFhZWVlaWFhWVldVU1BNSkVAQJtrc3NJTUtERERJTk9oWU5RU1RVWm6DcnV9aWhcVJCJlIh0foaBfIWMk4KSmouPe4aPgHaAeHNvdnF0jo6Ben6Kq4V5e2h2e45wcm14gYuNknh6gHuAdnNyknhndYSEhIV8lYqIio2KgH+Ei42AlIR8gI+YlJyWkZ+dqZ6foJ2gqaWenZiNp6SSoKCWnp+kgXNoYV1cSldQUkdLWFJPSkxNUkpKSkxQSExRTFJUTUVIQjw3Nzs5OT49Ojs8OThAPzo6Pj03PT03OTkzNzc4NTY3NTI1MjQ3Mi8yLiwvLzIwMC8tKygoKS4xMjcyMTk4Nzo4Nzc1Ojw7N3aumaOhmJ2ftKmvqqWtq7Cxqr20sry4trq0sZ+3urKqnZ2sqaiysKGakY2UgI2cjpF+doZ4fHZvb2lYS0hJSEdFSEhQVFRUV1dTVFVVVVZXV1dYWFhYWFhYWVlXV1VWVVNQS0Y+OTNOPH6eTUhKREA9QURqlH5MT1FRU1ZedIJ7eGZ2jJaYjY58Z3mBdniAiZB9hJiSgXGHj3x3e29rfq19dJCLf3uGkoF8f3VmdnyGbG9nc3yJjIeAbHlxfXFtdo9xaHGBfo5wQ4uFgoOFfnd3eoyGfYx7dX2Oko+Yi5Kam6OWmZyanZ6hnJaNi6Wajp2XjpaYkHhvbWZjWlhYVVFKU1VUT1BOUFZLTktPT0pST0lOUExGRDw8Nzk7Ojo/PTk8Ojk5Pz87ODs9Nzw5OTk5MjY2ODU2NjMzNjExMjI0LiwsLS4uLTAtKyonJyouMTM2Mi84NzY5NjY1Mjc5OTV5ppegnpahprCsrquoqbGvsau8uKy7vrizrKebsKesm4+WnaWppKCYmY+FknmIjouKdXF7bXVwam1qWEtGR0VBQENESExMTVFSUFFTVFRUVVZWV1dYV1hZWVlZWVlWVlRTUUtENzhmNzA/qGlOSEM9OzpEioV6WkpOT1FUWF1lcHJsiKeqwH50eWJ7eG98eYmQen2Lhm9tjJJ5dHlqaoCCcZaRi4F+loBJkphuaHh+gm1pZGx5hZCShmtzbHxucnyGaW5wf3ONiYSGe35/e3ZvdHSGgnmBeXB8joyKk4OWl5iakJKWl5mXnZaMg4mekouSjYaQloBvam9ub1hWWFRSUVlPUlRUUlhVTU5ITUpNT0tDSU5HRkA6OTk7OTk6Pjw5PDs6Oj0+Ojg6PDk/ODY4NzI3NTY1NTQxNDMyLzAyNCorKiotListKigqKCcsLTEyNTAsNTU2NzQ4NUhBODk1d5mRm5man6WssKOtqqi1r66stL+rvMO/paKalaSYno2Ei5ShoZmZkZOLc456gIaMhnRvdGtwbGRsallOREZDQDw+PkFGRkdLS0tNUFJSUlRUVFRWVldXWFlaWVlaV1ZUU1BMRTFAmjMganNDmW87PDk1PICChl9JTU9PUldaUVlcX6eHYZppc3llfm9tf3qLiXaCiIZ0bJqSdHN8amqdj015hZOJhI5nMXaGc2x+fYN0ZmV1f4SEhYBmaWx1a3GAfGhxcXxuk42PfHR+fXFwbnVtgn93eXVqeYmCiImDlpKSkIuNkZSUjpeNgHmIl4iGioaAkIh3a2tvaGVYUlpXWVlbTVBVVllYTklIRUpKSEdDQEdFQ0c9OTk4Ozk6OTw6OTs6OjpAPDk6PDk4Pjc4NzcxNTIzNDUzMzY0NTAzMS4qKispLCwrKykoKycpLCwyMjYsLDQ3NzU0NzhpTzg7NW6SiJqRmZajqK2esZ6nuq+rsrDCsbvDx5qWj5SZi46FeoSQmJSNkIyPhnGHgnSHjIZ5cHJwb29kcGZfVEZJQz88Ozk6P0BBRENFR0lMT1FRUVFSU1RVVlZYWlpZWFZVVFNQS0U4MC9cYLNHOVhQOzk0NDGWuotITE1PUFFWTEFJUUlir7KgcXt4bH1scYOChYF6hIaGeXKhlXR4gHN1lIc1cZ2onY6hoYSihXZwh3yHfHSMro2JgGhnYmpucm1wgnVpb1h1cI6bkndsf3p9bXJucIB7c3ZuYnaDf4aAhZCQioqJkYuRi4uOg3V4io6AfoOAfY57c3FxbWBbXV5bWVhgX1JOW1pYV0xISkZKRz9DQUJIP0NEPTs5Nz07Ojs7OTo5OTs6Pzw4OD06ODs2NjY1MTEyMTI1MzQ3NDUzMS4vLCwrKSopKSoqKikoKikrLzNETTIxNjY2NDM8dlI3PTdikoGSiJaRnaSnn6+VpbSprrGuwbK7wcWWkIyUj4CIfG6BkJKJg4qHj4Z1goRslYiIe3R4eGx3bndjaV5KUEc+PzY0NDk7Ozs9PkBCRUhMTExMTlBRUlRVVldYWlhWVVRTUExFPDUqnUtbQC1nSTk0Lz+Sg6muX0hMTU5QTDdDTVJTREqGdoB8fHZ+bHaIiHx+hYN/jH51opl5foaBhJmEmpxhhqqfnYuDkI16d4h+iYmOc4uXj4R6XWRxdHp8d4ptaGpieW+FkIJ6boF3dIR6cHR5eGtuaV12hnyHfIeHjn+KkpeDjYWMhn1xhH+EfXV3e3yJd3BzdGZnYFtbXlNbZ15XUFRYW1VHSkpES0c/RkBEQz5BQT07OTc8Ozs9PDo6OTk7Oz0+Nzk+OTk4NTY1MzI0NDAwNDY0NTU1NC0sKSsoJycnJigoKSkoKCsrKy8wMFVxPTIzMzMxRX5XND05XIx4ioCUjJGcnZ+mkaCqoLGor8Cyu8W6lo6RlId7hnZrf4yRgn2KhI+MeIOAc6CEin18gX9wgH56Z3ZrUldMQEUyMTEzNjY2ODg6PD5BRUdGR0pLTU9RUVNUVVdWVlZUU1BNRkA6Mj0gI5ZjjFs1MzExaT9Hb0lGSUxNT1JMS1RdWVJKaISIe4l5fHF8j4x6fYmHfpeHdqGZiIePkpSljayqSIaur6+LgYCTi4KLgoSSqYeAmJiKm3RtfIGGh32OaGdoeX9uhYeChXGEhkdsgHdyeXZobWtfdn2CiH+HhIt5lJ2ciYuIkX96dYt2fHhtb3d+gHR0cmxbXl5bY2NYZ2VbVE9QVllQRExLRk5JQ0ZDQ0BAQ0E9OTc4Ojo6Ozs6ODg4Ojo/PjY7Pjc1OTU3NzMzNDQyMzY2NTY3Njg7REZMTU1MQzcrIiUnKykrKywvMDArbnUyMjQyMEyBXDU9PF6EdHx9iYWHkY6Wl5KXoJ6toaa4r7O9s5eNkouYi310cH6Jkn59jIKSlH2Gfoakh4h/goiFeIeIfnOEeF9jV0tCNjAuLzIzMTI0NjY4Oj0+P0JFR0hKTU5RU1RVVFRWVVNRT0dDPzgwLCOHWz4/ODQuXZZwc6NVRklLTU5QV2BYcFlcXmmNk4eVgISChZGTfoWIkYGalYKhoZiVm5umrZOau7Gnu8fDqIuMoaWPlIqBkXxxg56fkZx/doaFi5CHkGlocISBdI2HhIpxhoJ3h397doV9bnZ1Zn+UjoaJiIeIh6CropaJjpd/eoKIeXlvZ2t4fnt+dGxlXltbXmpdYWZgWk9LTldSUUlQSkROR0NKREJBRERBPDo4Nz08Ojw6ODg3Nzg6PT04PD02ODc1NjYyMzQ0NDU3Njg2NzxCQj88ODo+Q1FeZVxHMicmLCwtLS4xKD+LWy4zMTBPg180PztudXBmd4N7gIx/gZCOipqbpJ2hrKarr7CXkZGEoZSEeHd/jJR8fpKFkpV/ioCSm46DgIGMioKJjYN/ioBtcGpdQkA0LS0vLy4uMDIyMzQ3Nzk7PT9CREhJTlFSU1JTU1RSUE9IREI8ODcvOUQ+PDw2My5sk5dNUElJS0tLTlZfY39nZ211nZuPmpKTi42OmoiTj52LoKCSo6qlo6yTqbaiqMHCrseveLqUmnyNoZ6ZhJOFgo6in5OYkoSKhY+ZkZZscHWKjIKWjI2Od4+EcW2FgYqWkYOFiHGIoJWGkomOj5aktambjZSig4eTg31/a2pqfIGBgnRiXmRgW2drXWxrXldLR05SUU1MTEZJUENETUZBQ0VGQj05OTc9PDo7Ojk4Nzc2Nzs6Nj06Nzg1NDU2MzQ0NTY2NjY4NTU2MzEwLiosLCkoKS46UGFcQCwoLSsrMCwncog3MjQwT4RiM0A8dW5nWW+Cb3WGcXaShn6XlpqUnp6cp6CplpOYnmdlpJp+hJKReX+SiJGSfYqEmJKQgoCAi4yJhZCHhYmFeHh+Z01SPi8uLiwvLi0vMDAwMjEyNDY3Oz9DRU5QUlRQUFFTUU5QSUVEPjs8OkNGPz48NzUyPD9SNUhISExMTU5SXm+KfHOBfaCdm6elopmhl6KUnJ6onqirn6isqaq2l6u/q7bIyLfJ0c++m6Bwaaupn4STkoWcoZqbmaeRkYiVopubeHp+lJiSoZOXl4GUnnt3lZKrsoiNl598lJ6bjpKVmKOiprawnZGZqIeWj42BiGxzc32AfXJpYF1iYGJoZGBnZltSRUpLUE9JSUxGRk1DSExGR0RCR0VBOjg1PDw4OTk5NzU2NTg+NzU9ODQ3NDU3NTQ1MzY5NTg6NjE2ODYzLzAuLSosLy4tJyMqO1hiQigqLDEtKEuXXjA2M1GFZjJBQGlhXlBwdGBtfWF3jn17lI6Oip+Sl56Wm6qYnqpCRH2HiYeYjXiCjYqOjXyKho+QjoGCgImLioSShYOGiYGAhnZeYlA0NjAtMS8sLjAwLy8uLjAwMTU+QUJNUVJTUVJTVFJOU0xFRUA8Pj1HR0BBQDg2NjI8OTtGSEdJSk5PUVlthZB3lYqjp6q0vbikraysp6i0q7C2srKtu7GzvZyzw6u6ycu3w7+4paKws6ytqqOLlpiFpqago5eBppmNoquopYiFlKShoKuhpKmPm7CLlaOmt7qboKOwkqKdop6Qo6Grr6yytaKUpKqImYmSiZV6en2Ff2hhaFxlY15kZF5mZ19aT0NJSFNORkhMRkpHRkZIQUtGQ0ZGQTs4Nz08ODg6OTc0NjU4PDU0PDc2OjQ0NjQ0NzM5PDM4PDIwMjU1MS8xLi0qKi8sLSooKiYlNVhYLywwLCwwhIE4NzFQhWg1QUNbWFRMaGNXaW9YeoV2gZOFh4Kbg5KQjJLayJ2Wc1aXiI+InI98hoyOiop6h4KHkI6DhYGMhYaHkoaChImGiIeHcG5hQEU2NDwyLzExMC0sKy0xLi00P0NBTVVRUlNVVVZVTltQR0dEPD4+RkhDRUE3Ozw1Qzs9RktJR0hST1BXgZKghK6js6qywMfDqrPFtqyzv7O4vra/tMG2u7qjuMWotsnHtb65taijtK2wsZuZkpqfiKevq6WUdp+kl6GssrSZlqquqK62u7K6rK+1orGrsbW7t7SutKCnqKOnmqmvrbK5t7inm7aojKSOkZKfhniCg3ZaYmVXZmJiZGBgZmBbVElERExVUUhJSkRJR0VBQEBLREJNRzw4Njc7PDk3Ojk4NjU1NTcxMTw4ODk1NDY2NDk3Pj0zODkxLjAxMjExMzAsKiwuLCsrKyooJyopRVowMCovK2iSTzYwUodqNkFGV1FKTFtaUWJjV3l1cYGUfYSGk3WFf4CMe7+7o7yCtJSTjZuPhIiPkomIeYaAjJKMh4WBjn+BiY6GgIaIhYqHkXp4bl1WQEVOPDY6NDZBQjc2NC8vNkNIQ1FbT1FVV1VcVk9eVUlLSkFAP0dLRkZEOz5AN0Q3P0JKSkVGV1RQXo+kraOxtMO2uMHMyba7xL2zs8C2uMG1vq+3dLGzpbrEpLDGubGzsbSopLW2qrGgopabopKlsK6mraynpJigrLS7oqiyurW8v8y/xcW9vbPCt7q4vre6t7msrLCmsaqtvbC8u8LCrJm6qJOtj5eXqol9gn1rV2RiWWtlamZXXGNZVlNJR0ZMUUdDSElBSEQ+P0JCS0BATUQ5OTY2OTo/Njo5OTY2MjQ2LzE5NTk5MzY0NjI3Oz0/NjoxLi81ODo5NjUwKigsLS0tLCwqKCgrKyhFUy8qMDBKj2s1MlCHbTY/RlJMQUxSV1NZVVp2anB+joSAjYNuenN4h2K5oZmjiZSUlpKUk42QlpKHhnuGgY2VioCEgYp6fIqHhn2Kg4GKg5V9d3p1ZU9cZEdFTDtRY2FbXlNGPztIUEVaY1FSWVhaZ1lUYGBNU1BFQT9JS0hFRUFAQzxFNkI+SEdKTFNaVF2Trri1urjIv7q9ycy7vMC7t7W7ura9tLqxxmB1sqSxmp6rvaqlqKurpKKytaCrp5+Vlp+Yn66lp6aln6OUo6extKeys722wb7TycnTx8LFzMLKw8C+vb+7vLe0r7i3tsO5xb3CyLCeuamhq46kp7aIgYFzYGNiXlhiYGlnUlhgVlFVSUVFTktAPkdEPUpBPUJAPUY+O0hANzk2Mzc5PjQ4OTo1NzA0NS8yNjM4OTM3MzQyNj84QD5HS1JUU1FQT1FRUEpBOS8sLCwqKygoLC0sL1A+KC40OIB9PDJLiHE5PkNLRUBJTVBSS1FdZ2xrcI+NhY9zbHJzc4fVwLWZoI2VmJmRjpeRlpaOhod9hoOMlot+g4CDeHuLg4d8i3mBioKXfnR9emtlcHVZXVxQZWRiYGVkXVtYV1xNZG1VUm1tX25fWGdkVVlVSkRCS0tIRkhISEdBSTlEP0hLVFRWXFpbk7nAuL23xsC7ucrKura5tbi5sre1tK62tplkdaicrXBeoqycmKCim6Seq6WUn5+QlI6WmJenn6WfnpqZg6SdrKWqsK24sL251NHO1tDJzNLMz87Kxr+/wsq9wbzBwMTExcq+yM6zpLuwtK+aq7i7mYB7bV9hXVleYVpjY1BbYFNQS0NBRUZFPEBFPkFIQUBEPTpFPj1KPzQ3NTM1Oz00Njg5NzcwMjIvMjQxNjk3NzU1NTREM0VMTT41MS8wMDY6NDc3QElPSTstJioqKC0uLyxATSsvNTRtiUkwSIl0Pz5CREBDREZLT0RRXFloX2+XkpCUbmxvdXWHs6yhoJ+LmZyZjI2VkZuShYqKfoiHi5CLiHyBhHN7ioOFe4l0gYmHlX9ze3lrbXV7aHJlaWxpZmppaGBmaWlsWm1zlq2kvIiHZ1tvaF1aWlRIS05PSktQS1NRSExBSkdKT19eYmZpYZe3x7C4sru9tbHExrWwuLCvu6uysaert6uNtaedmqeaTpqdjI6flpGmmKWVipOTiZCJkJGRnZuhl5qVloeemqebrK+osKe0tNTU1NbSy8/U1c3Tz83FwsnQv8rJysnRx8zNwtDSuK/DvMS5pba6w6KDcGVeXl5ZYFdZZlpRXVdPUEJCSEVCSDtBQz5BRz8/QTg7RD5ASD00NjY1NTs6Njg3NjU0LzEwMTQ2Mjc4ODc1MzY3QzVCOD8tMC0xMzQ5PTk3LC4sMTtGSz0pLCguMDAwN0s/LTQ2VIhXMESHd0M7Qj5FQkFDSk0/VVlTZVZzkJCYgmhxb3l5g6CqnqWWjJqbl4uNlZGajn2Ji4WNioqKkId8hIJwf4iBhnuHcoORi499cXh1a3F4fnF7bnhzbGiBcG1jam1weGl3fH7Lv8Hfp25jeG5jW2FgSlBSVU5ZXlBdXE5QTlRRVVRcbm12gnGWrbistKavtqqsvMCwq7SmpLimq66gq7SjjrGtmpeYjJGTkYSOm4GNppGciYOLhIqJhIuDlJWXl5OckZyYmZmfnquspKeirK3P0tXRzcvS09TQ1NHOyMPU0cfN0tPT18zR0cXS1sXAzsfHwqi+t8+eenBmX2NdV2BTXVpQUVRQT0g+QEZBQkU8QEI+RUQ+Pz86PT08PEpBNDU0NjU8ODg4NjY0NDEyLzAzNTI2NzY4NTMzOz08RT1AMTErLzI0OT41OTAxMDIyLTJETjMpLzMuMzI9TjIzOEN9XzJBhnREOj09ST5AQ0ZIPFZSTU5bdYaFindsd3B9fn+hnp6hi4yYk5OMi5OPloR5hZCQjYuKh5GHf4J7cn6AgYd6hHWFk5CIf292cmtzfHx3e3OBd3FqgHNyaXBxenlyer7Lmn6MsoR2coR2aGFrXUNaWltWZWNYZGpTWF1dYGReY3h6fouBmKmjpKGfoKilqrC4qqWzo6GtoaOtoaexn4mmmpOSkYmRj4iBlIlqlKKMmYSAhX6Rg4OTlq2LlY2Vmo6GkpGel6ewoaChpaSoyM7PyMLL0dTR1NPO083G1tLM1NjW1tjU19XJ1NrNydfX0cqsw8PMjHRwZGFgWFRZVFxQS0dKSkpAOzo7REFEPEJDPkdCPkJCOzw5PDpHQjQ2NTQ0PDU2ODc1NDMyNTAvMjU0Njc0NTU0NDw+PUU/QTYyLy0xNjs9MDgxLzI1NC8tLTtSMDE3LzUzMkZEMjg+bmI1PYF0TTk5QEk8QUQ/QTtQTEZLWXCAdX1oc3hygomAnZWdlIWLlYmPioiOh49/eIOUmIqNiIiLiX6CeHN7fYOHd396h5GWgINud3BtdX92eH10hXx5bId2dG59doR1eHydtYw7QYrFpX6MfGllV0lDZmNlY2dqZG54W15maGtuaW6Ag4iRi5ydoJ2Ql5ieo6OmsaOjs5+hpZ2gqaCjsZyGnpKSkpCKjouGg4+EfpybjI2ChIV6lH6CqZWjjJGKl5KLfZeKmpKrs5ianKicp73Dxrm2xs3S0NLQzNLLydTO0NXa19fY1NnYzdjbzsnZ2tHWvsvMtHl3cGZeW1NWUltWRkdKSUVFPTo3OkBAQjpHRD9EQ0FEQjs/Ozs3REM3NTY1NTswNjg5NDQzMzQxMDE0NTU4NzQ0NDQ5QD5EQkM8MzMuNkZUV09RSkFKRj8xKiguQlMzOTI1NC83Szc1PGBiQTxzdlY4N0FIOj9DPjw5UUVDSlRrbm5wYnBxdIaNfJeRnYt+h5KDiYaFiYKHfHiFlpaIj4OHhYZ6hHlxenuEhnV6hY6NnXmLcHxvb3p/cXuBcYOHgG6OenV3fXyCdX57hoevc1ipwraNkYJwbmI9XmhycHFwbnh2gWVob3J1eHF6jIeOk5GblZ+Vh4yTm6CbnqqfoKycoZqYn6aen6uZi5qMkJGNhH2Ih4OFi46gmZOIg4d+bZl5hJiGiJOMjZSMhnybiJSPrqqUlZifmaeutb2prb7Hy8nJzMvQycPSytTX2NfY19Xb19PZ29XQ29rR1sjUy5V7fWppXFtQU1ReSENGSUg+QT49Nzo9Pzs9Rz0/QUFBREE+Pjo4NkRCNzU1NDc5LjU2NjQzNTU0MjMyMzY0NjU1MzQ1N0VCRENFQjU2PEZOU01bbmZjbnNrYVY+LDRMRzg2NTQzNEJGND1XX2hMdXheODs/Rjw8Qjw6OkQ/Q0dSa19tZGJma3aAiHGRkJqAeoCNfoKCgYR/g3x8hJiOh4t+hoaAd4J5b3t7h4J0epKejaB2jnWCdHWBfXSAhG+Bj4FvkoV0fICEenaGe4i3xaTBybiClpuPd3BlTmZjgXqBd4aikIp4eXZ7g397hHZtk5aUlY+XkIOJjpaZl5alnJeflp6SkpejnZmrlZCQiY2RgoyFiIiBhpCRnpuZiYWMgYaXeoiIn5ePiI2Ki4J9oYmQi7yhmJOXmpyppqWun6i2v8DAucfJzc7FzcnR1tXV2dXX29TX2drb19va2tjO3MaHfXtpa2dhVFhVVU1MRE5DOz09PDg6PD45PUA2PT9APD8+PDk4NjdEQTY0NTU9ODA2NjU1NDc3NDU2MTM4NTU1NjQ1NTdISD1ESkU3OTI1O0g+Ozo6N0lQXVpSVVhLOVQ+Ozk1MzI3STg9TllNSHh4ZDU9PkM9PUA6Njo+PkBFUV9ZZWFdW2h0enlsiY2Sd3Z6inx+gH5/fIR7foKRiYSFeoSHenV9dG18fYZ+c36SnZGeg5F8hn54jn14iopugpqAdJmGfYGIhHt9kHqPqI6Pw6G9jJyjnX2JhH2JcouKfnOmmpyYk4V7jpCIhGhHcaCknYyLkJKFiYqQkpWPnZqTlJCWjIuVn5yUoJSRjY2Pin6Qjo6LhImSlpqen4mMlJKdkYKLf6WZiISNg4aEgKWHi4u4mJ2RlJaip6Gdnp2jr7e6tazAxcrQyMfMz9PS0tjS1dfA19jZ29ja2tnZ19u4ent6bWtnWGBcU1BPSUNMQj08Pjk5Ojo5OTs9Nj8+Pjw9OTo7OzM3REA4Mzc4PjcwNjg4MzU3PDM3ODA0OTc2NzU1NTQ2RlA1RE5JODkzOEFLPTszQ0BJPDlEV048TVRITj85NjMzMz5DO1tYPjVZeXBaPDxBPD0+ODY4OT89RFJTUlhfVlhmbW1taYGPinFzeYp7en98f3uHe3x7i4eBfnWDhXlyenNtgH6EfneFm6GanpSSgIyIf5iHgJuSboeohXqgi3yRjYKIhJt9mpCKjKOioJCkrqCLkYuFjIGThldyrYufq5uPg5ibj4+OXIKikYKMn5OUjIaIjJKTjJSUlI+Lj4mHlpudj5WWkIuSk4WAi4iSjYqKnZaZoqOGk52WoIqJiI2ckIOIj4CDiIWkhoyQs5idkpSXoaGemZKcnaiyuaymvcLHzsfGz8zQzM7X0NHUrtbV2NrY2trX1tnZn3F/dmloX15YVFdYQ0BIQz4+Pjo0OTo7Nzo7OjM7Oz89Pjc7OToxOkg+OjM3PUA1MDY3NzI1NT82NTs1NTg1ODo1NzczNUhSN0dPSzk5ND1FSkI+MUZDTEI5ODpHWEA1SFdJNjYyMjM6RUNlWD8mX3lpX3o+Pjk8Ozk4OjtAO0JRS0tTWVBUY2J5bWJ+koNvbXiLeHl/eoF8hnx7d4aEf3NwhYJ6dXZ2dISDhX1+kqajn6WiloqdkJSXi4qol3KKsY2Ep5KEmZOEmYyilZ+Yk4manqOSqa+fkJWQjY6IloxujbeFmsTIspuhpZucmJaQspFkpM3HlY6Gh4mQko2Nk5SJhYqJhZaZm4+QlJOGlJeEf4+LmYiNkKqXl6OjiJmflpqIjoeXl4qEjo2Bf4iQpYmNk6mal5OWmaGZn5mTnZujs7Smo7zBvsjFxcnIycLK083N1KnS0dbW1tja1NPazoNzgWllYF9fT0pVW0JBRkM7QT04Mzc7PDo4PTY0OTo8OjgyPzk6MjpJOj02N0JDMzI6OTYyNjQ+PTQ7PjY5NDk7NTc5NDRLUTxKUUs5QTdCR0lANjRKRUxGPjw4OEVUQTc+XDg2MjE0OjtFYFhBRmF0aExjWj41Ozo6NTs6PTpFTUZIUldTUkJjgUZ1go59fG1+iHh6fnqBgYJ+dnaAgntsbot/eXx4eHyEh4t+i6OzqKOrsqGWp6ClpJaVrqKDkLeVkrOZjaGgi6Sbr6KknZiQp5apma2vpJeVlZSQi5ialqDAjqPJuKuaoqWtmZGbnLKdhoWoopyYhYiJjpWNi5OPh4GGh4iTmJSMi5OThpSYhoORkJx0kZmylpekoYicmZOPipCLl5qJipaOhn2MmZ+KkJCcmpmTmJiflKCdlZ+bobKuo6W3vrTFx8S9w8O/xs7KydKnzs3T0tDW2NLP2Ltze3deYldiWFBISk9FQkNENT46NzY6Pzs8Nz00MjY2OTc3ND01PDU8TDw+OzxCQTc1PDs0Mjc3P0A2Pz83ODQ5ODc7PDU1T01EUFJMOEA9RUFHQTU6SkVORUQ6NkFAQlM+OURPMzIzNTc1PXZcPFJcdGlaTV1TPD04OTU2Nz06SkZER05bXFlKZ2E7SISLentthYZ5fIR4gIWBfXB4fX18b3ONen2Be3iGi4mFhJKou62osr2vpa6zs6ijorCsipq1nqK4pZWspJeprbempKOfmamYqqSvsKmamZyUlZGYoJeZu7utyaBptrirsJWYn6Krkpe9o16qsoKJio2Vh5F8j459g4aNj5SUiIeSlouPlY2LjZeZkp2as5aVq56Lm5SSjZCSjJibipKekIyJlZ+ijZWOmJqdk5uYnpShoJScnKWvqKKls7irwsjEtbu9u8XIyMLRocbJzc3E1tbQy9OicXxqXlxVYFJQRkQ+PUNBQjg/ODc0PkY8PDY8MzUzNTU0NTNCMzo6Qk06QTtBSEI7OkA8NzQ2PEI5P0BCODc0Ojo2Pj00N1RLQ1VRSjc8OklBREA0QUpITkJBPzZEQTxKTkQvVD0yNTQ6RUpcWEpaUW1ncHBEaWBLSTY3NTc6PkpAQ0lQZUhiYGNwSkCLin6AcoaHfIGJdYKKgn5tfX18f3B3h3eNgYd7jY+Mhoyaq8LAsL7Gu7K0wby0rauztoyosq6uvaqbu6Sorbm3q6amoqGjo6mvsrGqnZykmJuYl56ipaWSo7muqMC7rK2yuaWkp32IhpytvbCDi4yLkIOPg5GPeoGHkI2OnIiIj5eNi5WXlJCalpynmrGakaudjpmPko6VkJCWl4+RoJGIlZukrJSWj5ScnpSgnpuYoKGUmp6op6Sho7CypsHGw7Cwu7bFxMO+zafHw8fDvNXQzcTKiXV0ZF5cYVxPS0JMQEVGPkE/Qjs6ND5BPT01PTY+MzMzMjQyQTE3QEJOPkdAQ05DQT1DPTs4NkNDNUJJQjo4Nzg7NUI+NzlWS0RXT0Y4PTRLQEM+NEVLSE4+QUE2QkI/QlNFNThQMTQ1Ozw4O0Q+OUxqal07V1JkS2daVU83OUdFP0NGXGdHYGlnWl1bk4yMiHuHi4aDjHWGkIqBbn58gn9xfoF6lXqSlJSYkZOVp7TGycDCzMHDuci8uq+rubuXsra6s8CupcCkqrC7u6quq6KinqerrrWwqpugqpyinJWesLSni6K6urXBu6uonLKkpKiUhI6pw8SkgouOh4iEhpWUjXqDjJGPkaGMjJSRj4mYoJeSmZSXpqCunYyqnI6Vj5KRlZWOkJWRj6GUhpefoLOelJuUoKGZpJ+aoJyglJiepqSmp6SvraW/xMKuqbe1ycO+ts6yxb7DvLPRysjBtXZ6bl5aXWxUTklDTEpKSUBBPUNEPDVBRDs6Mz04QjMzMjI2MkEwNUlFTT5JQEhSQEg+Q0A7Pj1GQTVBVUA7OTk4PDdFPjg+VkpDV09HOD80TEBCOzVKS0NMP0I/PEJGPUFITDkrRzwzNjc0NjRBPzdPYU9hRS89PjZrbGpgQDpIPj9FQmdcTWVcZlRjapmNlomLiJKPhol5hpOQgXKAfI1+d4eBgpB6jaGWqJqamLq+yMjKwtLJysLNvMGzrbu+p7q/vrzDt6zBqayzu72qsKmkpaOrrrSutrWgn66fpqKYo7S9qZuovMCjtravq5KvrKqrloaaqaalkYKMk6WViYB1ipJ5hY2RkJ6fk46Ui4+NlKOZl5uUlKOeqZ+RpZqMj4+PlZaIfY+VkpKjmpWgopy1ppGfl6Wko6WenqaYnpWXm6Wjqaiisqyou8DEr6Wzt8zAua7Ds7u+wbitwsLBwJlwe2NaWF1cTUxNSUdEQ0hCQkFDSzo0REg6OzQ8N0UuMTIzNTJCMjZTSE48SkJKUUVLQ0RFOkVMQjw3RVY9Oz04OT88ST86RVVJQVdRRjdBOks6Qjc5Sk1CSUBDPjxERzxCQ089MjBIMzY2MTcwPUI6PWpqSks1UVMzU3BwZE47RD1ARj5rSV9YYVpkZVaej52Ol46ekomKf4mfkoR4hX+Vfn+QiIqQgJWgma6no5jCvcjEyMbTzc7Ny7zCt7C6vLS8yrzDwba2u62zv7m8ra+ooKmntq2uqbK3mp6toqihnau3uKmlr77Esb25s6eps7OtrpaVpaynoJGOkrHFp5WNfJGVfYeRmY+qmZiTk4+TlZOlnpOdmZOho6KcmJ+Zi4yPj56IWpCXl5KWpZpmmKOfs6WWo5asraunm5+nmJmWmZWhpKimnrarqbq8w7WltLbLwbiqtqyzuriuqLi6vbiDbnBcWlZXT0dLU01LP0FIRURHRkc4NUZNOz43PkFKLjMyMDI1QjU1UFdOO0xGS1JMT0dHST5JUT86OElTOzs/Nzk+RExCQEhTS0BXUEY6QT9HNkE3O0hNQ0U7Qz00RkU6QkFCRzkvOkEzNjAzPkdEOTQ9dGRNRztFKzpmfGhXOz1AQkZCckZpSVJlYkxGppSclqGXqZaMkIOHpZKIgYeCnISDlZCRlI6aop+vvq6hx73FxMfHzs7O0sq+u7axuru8vs62xL23uLeysrWzuLKrppyrq7iqqaevsJejrqSnpKW0wLCqrLO+wrnAubOnuLO3s66Vpa2urqSLk5WhjXPBmX2WmYSOlpqLsZWamZWSk5mapqOVoJuWmqicm6GgmYuMj5adYEqWnJqUmqWXVJawn6+cn6WUr6+tpZqhppSTmZmOnaCnopm0qaqzvby7q7Cyx8C4pqurrbGxo6GysrSkcnBnXlxQUk1FUFBQUTtIS0lGSEFDPjlLVD9BOj1FTTA3NTQ0OkIzNE5XTzxKS05VTlFKUEhISk9CPD5NUjs+PTg6PENSPkRIUklCV05JQENBRjM+NThKS0NBPUM7NEVBOkE/PkhANSpCNTIsPmNdZzozNXRkZUBSNyYjM31pWDs6QkNAPVJFV1JzYldGSKuXmZ+hqa+YkJeHi6eWjoiShZ+IhJyXj56gm6Oltcm0qca7w8TIysjHzM7Hvrqzr7m4wMHNtci6wLm1urGvr7K0p6ObqrS0qqmmrqyZpK6lpamtur+oq7a2vsG/vrizssKvt72ro660rLiliJuXppt2vqCEmJyOk5mai6+WoZybl5WboKGpnqigmZqqmaGnnpeQjZGdg252k6KalZ2in5CusqOrlamqmKuupaSfpamSkpmbiJScop6WsKepq7q3vrOyrr65tp+jp6ilp5ycrKmpjWVoY2BTTE1HSE5KVkw9TURNSUpBQ0Q8UVU8QUFCRE8xOD03Nz9CNzVVWE4/SE5RWFJQUVRKUUpKRUFFTVE/Pz04PTtHUjxFRFFCR1lNS0FIREU6OjM5S0lCPkNCOTlDPjxAPjs7RzctMj4tMYJoTnpcLzBraGA8PUJCODZ6Zlc7Oj0uLlNhTVZIf2VeSEaslJyhn7uvmJSei5Oqm5GSk4mrjYeinoykrJSjo7bHvbTBusLDyMnFws7Iwb25sq+5tMDCyrbGscC8tbqrqK2sr6OimKq0uqappqyqnaivp6Srq767qKy8s7e9xry2tbjAsL2/s6m0tqu+pI+il5Gin7yfiZmgmZaenY+3n6mcpaObnKKaqKWzoZudpZyoqp6ZlY+UmouXiY2kopScop+gta+lpZOxq5qsrJ+epKOpkpWVoIOQnp+clamloqG0tbq1rai1srOenKKmmpeVmaqhnndiXmBeS0lHSE1RSU1FRkZCUkpIQURHQVZTREg8QUdRMTtCNzpCRjc5XFlLQUxQVFVTTVdSTlVKREBKSk5POUM/NT08TlFDPz9QP0VaTUpBS0RHQDUzPUlHPz1FQTk3QTs8QDw8M0A8Lyc7KkiRQjpTSjAsW29XNzE8Kh1CgGRUNDktMTpoXUZEQ5xwYkdFqJeknp7DrZuXpZeZqZyWmpqPqpaVqKaVrayZoaq2xMG8v7jBw8HIxL7Nxru+ubKwuLO/w8i1v6+8t7m3p6Sqq6ygoJqqqsSipaispp6sr6yiqqi+uKasvbC3tse2tLm4vrC+wba0srSvvqOWo5aTm5Stn5ChoqWjo5+QvqWpnamsnZ2hm6afvaKYpJ6iqauhnZaNlZ6Tn4ePhY2TnqSgnbWspZyWsqeZsKifmqqeoI2ZlZ+FjqGam5KlpJqYrLG2saqlqa2snJmgoZKOkJWpn5RpZFphXVBKSUtPTUhFQ0lAPU9IQDtHSUhbUk9LPUhOVTRCRjk+SEc1Q2JbS0NOUlVXVlFYVFJVSEA4UVFQTTpHQDRDSFFTSUM7Qz5HVktDQE8+SzwwNjtHRj47RkE1Nj85Oj85OzE1RDAtLDBNdlw0S1o1LE1uVzwtPSkeI3piUTVDS1E5b1JGPEt4ZmNYTaKao5uexayhn6ydna2fkqOelqSgp6qsl7awo6qztsXCvcC2wMK8ycK+ysi2uLW0sLO0t8HGtr6wuLS6tqCnraqrnZ6fpaTBpaCqrqCkqa2voqanvbWlsbu3trXDsrO3ur6xw8C4uK2ztLWinKSVkZOgraCYoZ2pqKuimsOtqZ6srpubnpmmoL2hnaSYq6urpqGZjZqfkp6Jjld/lZ6moaC4qqeTmLajn7OioJuvl5+PmZSdgo+gl5aNoqSVkKaus6upoqKlpZWVnZmLj5GTpJ+JY2VbZGBMSUtLT0ZFQUZLPj1KQTk5SkpOXVFRSj1MV1w5Rkk9RE1JOEhjXExDTFBTWVlWV09aXklBPVdRSUs/SEA1SE1YU0hBOkBBRFBIPz5RPks3MDk5RkU7OEc/LjY+Nzg+NzcvMT85MSUxUVVtW0pPMTA9Z1dEMTc9LSt3YFM2U1prV3NIRTY9dWVcTE+en6GYnsSnpaKzoZyyp5OqpJ+jn62prJ27sKistbLIw8HDs8LEvsfEvcTKvbCwtq6wta+/xbW5sLC6tq2aqbCpqZqepqGnwq2brLGcqqKusKmkp723pra6va+3xK2zs8K/scazurertLatqqKllZWUo6uhn5+ZqKuwrq67sqagqamZmZeToqS4oaGkkq6vrKSmn5KhnpWej5GNlJ2ao5+ntKenjJi0nKOwmp6brpGflJeUmoCSopaPjqChk4umrLClp6KcoJ6SkpuUhYuSjZyegGNmW2hmS0lNS1NCQ0BJRzs7Rj85OU5NVV5SU0o+T15ePUhQQk1MSTlOZF1MRUxSVFlbU1VPXGJIQT9aUUFIQUtCN0ZFTEtOPjtCSEROQj07TkBBMy85N0NCOTdGOys2PDQ2PDM1LS80QDErJ1Z0U2VPPzEwNGJbTTIzPjA8dl1eP1tVXmZyQDg8SJZ3ZUE0n6Sfm5/CqKOqsaGjtKmWsqumoqSyrK6pu7KtsLS0xr/ExLXAxb7KxLXAyMK1q7WosLiswMS0t66strqlmauxq6mYn6aXrbu1m6iwm62frrSyp6q6s6e6sreyuMCqt7LCvLTFp76urbe1qaesoZeWkaWkoqKXmKSvuK2ytbagn6ikmZSVk6Oft6OkpZWusbKlqaWinpqampWYqJ+fmKKerrKipo2XrpmlrJeanqWRm46UmJqFlp+UjJCcnpSLqamroqehmZ6WjI+ZkIGGlomUn3lkaV1sak5QTk5UPUJBTkM7OklANzdRT11eUlZRQVdgXEJKU0hXS0g6VWRdTkZPTltXW1JQUVhdR0FCW1BCRz5OQzlIR0hOUD8/Q0lCTEI8MklBOTQxNzdCPjs3RTcrNjkxNDgwMi0vLjw2LSNCcWdzazIzLzFcY1ozMzkwNnBbYkgwNUpwaVZDV0aMeWZDO6SjnKGlv6aor6+hqbWqnbmvq6SqtLexsLm2sLe4uMW9w8e9vMTCx8G5wcbBuqq2pa27rcHDt7eqrbK8o5WtsK2xlqWokaq5qqCnsJ2qn6+0s6qptrasu6uysrm3rLmwwbm9vqbDq7C3rqiqq6admJiqoaGgkZegsK6zq7C5mpupn5mWkpemoLappaKir7Gzq7Gnq5+boKCbnqWcoZedo7Owm5+QlKaaoamblaKflpiKlZiTlpedk4mQm5mUjqmpp6Ckm5ibk4eOmYt+jZaGjptraW1hbW5YUVFaVEFDRVVAOzpJQTc6WFBkXlBXV0RZXl5NTFJPX0tKPlpkXk5JUU5bVVlQS1NXWkk/RFhQREY+Tj89SUdHUVBCPUNGQk0/OjJEPzc3NTQ3Pz05NUU0Kzc1LzI1MS4tLiwxPionKz1ccD0+MS4xZVtkQDE3NDdnWWBGKEA4bH1oXFY6iXtjQz2on5yhqb2hqrCqo7G4qaW1squhrbW9r7O4vLq9t7bBw7/JxLnFw8HAuMW9wbivtqert7K8v761qa6yuJ+XrK2orZenqY6nu5+lrbOeq6KxsLOsqraztbytr7G1rLC1scC5xLarvK+xuKysqaKxpZ6kqJ+kl5CYn7Kqs6mqs5mdp5uZlI2gpaS0rqeirKyusaeyrLKpo5ufp6SdlaGYm6i1qZeZkZKfmZ+hnpCsn5iYhpWYi52anZOKjZaXmpenpqOgnZaVlpSBj5WFe4+ShIyWZmxzaHByX0dZZlZEQ05YRFo5SEI2Pl1SaFxOWV1HW15dTk1SWGRKSkNcY2BQTE1OWFdYUEpWVldMPUVVSkVEQU0/QUZISFFQQTtGREZLPTg3Qj02ODcxOT48NjVEMCs4MC8wNS8qLC8tKj0sKyUyKyo1SzEuJ19eYVYxNTE9YFZeOClDM1lVXGdLNYx6ZkxApJqgpKy3o6yppa6utqqutLmmp7C4xbext77BwrW0u8W+zMW5w8G6v7rEuMG5s7Wsqrq3u7q+taqtsbaYmKirqqubrKuPq72eq66xo6qfsa2zrq62srm2qa2usae1sLO6vMmyqrW0sbSvrqahs5+aqKygpZWVmpmxoq2gpa+WoaSZmZKNoqWmsqmhprGrqrWkrrC1r6OYna2nmpeemZmsuKKYk5CPmJyhmZeUrJ+dlIGTmY2enJqWkIqUkp6apaOioJmWkpKWe4uQhXuMioOLkmtueW51fGFGYGpaSUhaWz17SkdFNkFiVGlaTVxhSltdWlJSU2JhTEtFYGFgUExJUFdWVU9HV1ZVTjpJVklIP0NLP0VESEhRTkE/SEhIRTw3PT46NzU2MDk/ODY2QiwtOCwvMDQsKCwvLSo3NikoOS4kOks1LiJUYFZhLjUoQ15RXC4qQS9KR1BbRzNjWVRLRJmXn6+osamspaOurrWptrS3o6y0t8m6tLu6v761tLfDwc3HvMS9t76/wLe/vbK9rqe6ure3wresrbG5lZemrquno7KqlK+6pK2ysaenorGzsbKxtbG4sqiuq7KnuK+1s8PFtqm0tauwramnorafnqaxoKSUm5mUsZ2nm5+pjaminZuVl6WlpLenorCzq6exp62wtaykmaGsqJucnZuUqriclY6Oi5mdopiQl6ein5aDkpaQnZyYl5aIl4+XmqedpKCSlpGQlnaEkId7hYKEjIxucXh2fH9dS2VsXEpPZFw/YntHSThHZ1dlW0xeYk1YWVdUWFRpXVBPSGFdX1BKSFFWVVJLSFdVVk04TVpORUBGSz9IQkNLU00/P0xPSEA7Oj47NjswNDE8PTQ1OD8pMDcpMS4yKSksLC0rLTkkMDQyJTlCNy4jQU5JZzI3J0ZhTFYlLUIuPUVMUTwzcmtLREORmKStpK2tq6ajsLKzqrawtp+rtbnJua7Bu8O3s7K1wsPPxMDBvbS9wL+6v72zxKiqubG2t7+9r6uzs52gp7CtpaawpZ6ytayrsrCsqai0uay0s7WstKypq6isqbmtsbDHvrikua+pra2mqK2wpaOjrqOpnJ2bmq+ZoqOio5Csn6Ogn6GppaW4pKu0tKSqq6isrravop2jqKqboJmakqS0mo+JjYeRo6CWjpSeoJWThY6Uk52bmZaUh5iSlZmnnKCfjZKRjpF3fo6FfHx9h4qJcXRzfn1+XFJkbl5OWmddRkSWW0c6Tm1YYVtNYGJOVldWV1RZZ15RUkxkWltUS0dPVFNOR0lWU1xOO1BeSkJESEpBRT8/S1NPPjpOTUM8PD45OjU9KzMyPTYyNDk6KDQ1KS8sMSgpKywtKiY1Ki8mMCkzODoxJiozQ2U7NipIZEhKKzpJPzNDSVMsPo9rPkhJj5qpqqGosKSoo7O0sbS1sbGhrK29y7quwbvGsbSttMLD0cTGvsCyvsLCvL+4vMWorbess7i8wbCrsq2hpKetqaiksKOrsaqvq7Gurq2rs7unt7GyqbKpqqalo626rKmxwrm0rLmoqKitqaexpamkoq6qqKKem6KslaSdl56Yq52hp6ihrKWjray3sbGgqaKfqq2wrJ2epqepmaOYmI+gp5iGg46Ki5+hkIyNl52QkIaIkZWgnZWYlYaWk5OXpZydnIuRkI2Kf3+HhXx3f4eFh3Vzcol2bF9ZYG5jUXNyXEs8hHxGP1d1WGBZT2RcTlVWVVdQXGFfU09OaFhXVktHTE5SSEVJVlJdYzxQXUQ8RkhIQkc/PUpQTDo+T0o9OT89Mjo3OyozNT4xMDQ4NSg1LyosLjMwOyksLCclMjM0JCwyLTg2MCkoMTxeSzAuSWdERjg8QjA1RUtYMUCUXEBNRpWWrKehqrKcqaiwtay4tK6qpKurvcm7sb63w6+wrbPExM7Ow7+/tMDDxLrAtMnErK+3rrK6wL+zrq6rpaiqsKmmqLKltK2qsK6tsa+zrLO6pLi0rKyup6ugop6wt6uqrbq2pLW1pKmnrKyqrKGopqaxsqSmpaGhq5apoJOaoKaeo6KqpKyinqaxt6ysoqWimqmqramcoaWko5igmpWPmJ2UgYKQiIWdoI2Kjo2aj5GLhI2YpJySkZuMk5GRlKOam5qLjouLfIeBgoJ7dYCEgX51d4ujh3lrXmBuZ1dmh2ROQGeSTERieldiWFJlVU1WVVVUT1xdYVVLTmlXVlZJSkhJT0JHSVNRWW9BTVhAOkpHRkVHPj5FUUg4Q0tFODdDNzI6OjoqNDk/Li80NjMpNCsqLCsuIzQuLSsmKCs3OSomNis8LTIsJjA2WFouMEpnQUE8PEMrOkpPXjREhkFJSESWka+koqqwl6qorbWrtrCrpKuqqbzBwLi5s7y1prKvxMnL0b/Bu7nAwMK5wbrCxK6xtbK0vMG+s7KurausqLaqpa2wqrmvqLCwrrGrtaq2taa0tquspKmqnKOds7OoqKS0tKC2rqGpqKuoq6egqquoubapqqmpoamfrZuRqKGdoKOipqKpnZymtK6npamio5elpqeqnKKjo5+ZmJ+Rjo+Zjn6HjYeFnp6IhIqLj46RjYSGlaKajo2akZKRjpOfl5iWjYqDf3SHgX9/eHWDf3t4foCInY9wcmdncXhcYXSIaU9dmFZIbXlVZFZSY09MVVRVUU9YWmJWSFBqVFdTR1BZVUk+SUhPUVB4TU5WPTxLRD9AQTxAQ1VDOUFLPTU7RTEzOzk3KjQ6PSstMzQxKjgqKisqLCkqKC8qJiklMzssJDIpMjAyMSUvMlJjMDI/Zj1OWD9DLD9MVF8vSWs3UkU7lY2vn6WqrZmrpK2us7SuqqWvqam7vrvBsa+4raK1r8nHyNHAv726vMO9usPBwL+vsrOytr28wbKys6uzqaW1qaSts7O5r6KttbGvsbmquK6qrrarqp6qq6CjobauqKGer7KhtKqeqKeqo6qhoaytqL2vrK6soaenn6uYj6+imKKgqKefp5uZqbCoop+soaCSoaKjppiaqKWYmJidj4qHlYh9jYaEhaSXhoKCjIePjpGFhZWgl4mSnZGTkI2RnZWXj4qFhnhzgX99dXh6gHt0dHtqgoejdWleZWyBdWeIi3xSV3BeS3hzVGRTUV9NTVNaZ05MVlllWEdTalJSPkJOUWFROklITFNJcVFMUzs8ST87PD07QEBXPDw+SDczQ0IxNTo5My01OjopLTMxLS02KSgrLSw1MiMyKScsJS47LiYxLjAtMTQlLDBNaTozOF89YWQ/RjFDUFtbK0hPO1hCNI+OsJ+kpaqjpaOsprSzsKmksKequL7BvLCouaqnrrDJx8jQwr3Avrm+vrzJvMK5sbC1srq8ucCztLutuayjtaenrLK2ubKmp7q1rbS8r7ylra21q62cqa+kn6WsqqecnaqypLOomqqnqqSpnqKoqKm9q7SvrZ6po6Cum5qyopWkm6Sln6SamaiqpZ6aqaGbkZqgpJ2YlqmpkZmZk5CKgo+FfY+CgIiej4eAfoyHkY+QhYCUm5SGk6KMlJGLkZuSlYeJfoByenl+fGh3fHp1cHF+aYZ5hIhkYGhkcoV7bWd5XV5WQ1h7bVRhUFJYS0tNcHRdSFpbZ1lFVmdPQz5LTkRDQTlIR0tTP2phSVE4PUg8PDw+Ojw/VDY6P0M0NUg+Mjs1OTAyNzw1KC41Ly0xMSYvPktJMSUaOTAlLCwwOS8sLCs2JzE3Iy0vR2pJMTRYPWZiQUo3R1NgVSo9PEZcQCqOk7CZn5+ppaOhqqS2srGkqbGmrbnBvbWwo7mtqKiww8nJzMG3vcC1t7+6yLbDtbSztbK9ubq9tq25tr+torOnqquvtbe0qp26u6ixv7K5oK+0tqmsnq2xo5ylqKminZyksKavoJ+rqaehqZyjqKCtu6eusa6hqqKjrZ6erKWXn5ugopyfm5miqqKamaOjlZaTn6GWm5amrIuekZCRjIKLgH+PgXualI2JfX6Mh5CPjIqFkpiRh5SkipKSh5CakJOBiHx5bH12eXhie3pycHBzeGqCdGqCZ2NoYW5zjm1ianBgb0JdeWtWXk5QUUpJTFNZVk1cXm1XRFhhT15QSE1ERjs3SEVLTzxyaEpLOUFFOzs9PTs7PUo0OUI8MztHPDQ/MTgtNzg7MigwOS8sNS4uPS0qTD4qHTQ5JicuMzQuMCsvNCYsOiQ0MEFoWjEzUz1lX0RMNktWZE4pPTNRXT0jkpermJ+Xp6Ohn6ejt6+toq+vqau4wrqzrZ+5r6uotLrHyse/t8K+r7S+t8S2w7KwurKzwLW7vripubi9q6S1p6iqsK25sKmZubyjrr+0tKGut7Wnpqews6CfpaanoKWZnqyoqZ6gqq6noKaXoqifsLifpLGuoKyhrKSbpqaompqbnqOVnZyanammlpqeqJGXkpidk5mVoaqQmomNkId9iH+Cjnx8oYyNiXmDjYWKjY2FiJOajomVn4mRlYKMl42QfYR7c3B8cXN0YHl4am9wcXBqf3NjemxoZmRhZYeAYFtyanFNToBpWFpNUExKR1BSUUhNW19vVERYWlJnT0hLRUY1NkhCTEk1WmVKQDZFQjk6Pj0+OjpDNTk+OjNARjwyQDIzLzo7ODMmMjwwLDg1QiopLUMqLDQ7Tk5AOzczLS4rLTcqKjwlNTM9ZmQyNE0/ZV1GTz1SWmdIKj8wXFs1KJabpZiclayfn6GkobeqsKO0tKmpucW2sq6gt6ytrbC2xcfAt7/CubC1vLe/u7+vrL6ws7+xvcO5qbu6uKeotqinq7Css7Cmmby2pKu6ta6fsbivqaWnr7KboaSgo6ShlpuvpqGfo6ivoaCik6Okorawoaaxq5+soq6Xm6qkqJ6Xmp2kk5qbmp2lqZmbm6SUlJeUnI6Tl6KpoZCJio+FeoR+hIp6j5eKjYd6goiEiYyOhY6TmIyOlpmKj5Z/hpeLj3qAenBxdm5wdF94d2VtbGxraYRuZnJpa2ZpXWN0gWBba3ZpWkp/XltYT09LSEhSVUYyOV1ebVBEWFZZZU1ISUVFMDdGP0tCNklKSDs2Rjk0OT49PDk4QDg7ODo3QEk+ODw0LTM8PDc1KDU+MSw7QTEoKzY8IjhSPSoxMTM+RDUsLSc0Mio7KzEzOWNtNzRHQWZbSFREVV1oRC48MmNWLDKVoqGXlJupnKShoqG3qa6gurilrL3Fs7Cuo7Wvra2vtMPDvLO/urews7m4uri6r67As7S5sL/BuKy9urWlorOqp6myq62xoZrAtaSntbWonrK8qailqa+smaOnnKSllJehsqWZn6SoqZyioJOkn6O4qKSnrqadpaGokp+ooaGgmJqcoJKam5afoaqbmpiglJCTlpmNlJKjqKSQiYmPhnmEe4SGfZ2OiYqHeoGEh4mJkYWVk5OMkJWUjY6Ue4KXjot3fntsdHFsbHNhd3RoaGpnZ2+FZ2hoY2ZpamBqY2lnW2V7Y2BTdFRcW1NMSkdJT1NAISpoXmpMQ1ZVXmBLSUdFQy46QjxGPDZLUEQ4OkQzNTc9PTg5NT86OzQ+OEBLPT45Myk4Pjw6OSo2QDMuRTQoKyw/MC1OPy4rLTcsMTE5NSwmLjUtODA1NzZgdEEzQ0RnW0tXR1VgaEIzNzlnTycynqKjkY6jppuenp2jtaynqrq3p6zEwbawrKO1rqeur7fAv7yywbawrrK2tri2tq2qvbOusrG9v7iuvLuxpZ+2q6WltKmqrp6dwauopa+yqay1u56pqauxpZieqZ2npJGYpq2imJ6kqaGboZyWn52ntqWvqq6hoZ2doZSgpp+hoJmbmZyRmZ2UpZ2roZeWnJSSjJWXi4+YmqmgkYiJi4h5hXeCgoKdiIuCiX1/hYiGhpGElpWQjpCRkZGMknuDlY2Gc319Znhva2prZ3Vza2NnZGR2gGJlZmZlampka3JaX1ldbWRhTmlYW2BWSkdJS01SWD45X2xpSEJUU1xbSUhGRUEuPD85QTg5UkZANzpCMDM3PTc2OTI6PDk3OjlETT1CPDAqPEA7QT0tNUIzNz0rKiwwQipKSy4vKiszNzIyKDU3JCs3LjcyNjg1XXlOMj5IaVpMWkpWYmZAOjNCaEglNZqjn5CLrKGYmJ+WpLOxorG9tqGxxry6sbGkt6yqrqm5vLu7rsCyrq6utq6yuLOoq7mxr66ztrq2sLi9raaetaugoLCkqq6cosCgsaSusK63rrWera+traKanaeppZ6Vmqeln5mkoqidmp+blJydrK+luqiuoqGamp2ZnqOapJ2XnpiblJmgkqiVqaeak5qakYuUmY2UlJmpp46NiomPfIJzgYGKmIWHfImJhYWKjIqShJSck5GPkJCWjpB/gIyNgnCAfmZ5bWhraWdxcmtcaGNjc4FhZmhqbmxnampobl1sbHRwYVVjaWRlWklGTE1PWFFRVmFlgVVAVlNZVEZIRkVALzw9Nz82PEZOYTg6PzI0OUAzNzgyOD83PTg+RkpARDkyLT1BPUE9MDVAOUAxLSsuMzw7SzYvLissLTI0OzYjMyopNi41NTQ2NVp8XTE5S2pbTVtLWGRkQEExSmZDJzSRoZqNj7CdmpOhmaiyr5+4v7agtMK7vbmxprawqK6lt7i3t627r6yqq7aqs7itpbO1sq6psLe2sbO1uqepn7WonZ6ooqmtmqe+mK2jrq+0ta2sn7GtsKminJyjq6iblJymo52aqaKklpqfnJCbo6uqqbufp6SgmJmZnaGPa6GWmZxwgpWao391kamnnpSUnpCIl5mAloqhkHiGlIyDbmp+doNxbIaLhn2EjIdwXmNhZ4SYhmyLj5SSdHeLhH6Dj39nhoBndWhlV1xoc25OUGpjZ3KEZ19kZm5tal5fYYqPg4RlTktEOUZUZ15KR1BQVFVLSFJgb3RlRlpRVVBGSEZDPjE7PTY9NjwzZlw1Ojw3NTtENDg2MDpCNz86PkZMQ0IzNDM9QEBAPTI4QEU9MSwrMDg+RzYwMS4qLiovNTY4LCMxJzIxNDoxNzVYgWwxNk9rW05cS1tmYj5HMVFkPSoui6OZhpSwm5yToJuqraqjvcWvqbjCuL28rae2sKWrpLezsrOxua2ppqy0pq+1oqi4traop6y3s660rbOiqZ+zqp6hpJymppirupWmpa+ytq2upKmuq6yloZ+doKenm5egpaWbm6ennZOfn5iQnqeqo7Wvo6OjnJaXl5ejiKGOkpqHoYeTnKB/pH+lqp6SkZqRiIRyeI2OhYihdoiMaZeIZn1yeKFviIeEfo59f6GgoJmAfIeedIeOdpuKbIeBg2xoZWN6a3FhU4VtY2xpmHFZanFvh1heaVtra1uIcW56coVnhoRaXkdOP0dfTUZSVlZRUVJXVGdeTVdJUlNPRUdHPjw0OT05PDc7MDw8Nzk5OjY9RjU4NjA8Qjs8OT1GUUc9LjU8O0A9QD41OUdBODIpLjE8STkvMDEuKi8oLTQ1ODMlJjIxMTU+MTw4WIN1MjVSa1tOXExcZ189SzFXYTcwKIumloOcq52ZmJ2fqqqnqr/Dr7G6vbfAv6qlt7CpraaztK6vs7erqaWxraW0s5yttba0pqeos7Gtsqiunqugsqigo6KaoKGarbOUo6WltbynrKerqqyopaGgmKCmo5mZpaOkmJujqZaUo5yUk6SlpqG3o6OgpJiUk5eTm4iuj5iUiamLl6GbhbGAo6ydk5mdlHmC1KiAh5XBm8d5eLGlt5dkgMCcv3mEhHmQhHyQkJHKcZe8nMV6crWmu5B7gGyWsauweGhrWLGubmVpvJK8bmh6bnKP2H5TamK2sn+BcpV0mqGqkFdPV2JQVk5GVFtYUVBSjFxXXFBAXERRTkRHSTw8NTc9Ozo5Oi49Ozg3ODs5PkY2Ojc0PkA+Njk/RVJJOi41PjtCPD9BODpKPjUyKjIyQkUvLjMyLisvKS0vMTg2LSAvNDE2QTE9OleDdzIxVGtcT1tNXmdcPkwxW100MSGNppKAp6qfl5ydpa2yqLHCvbK1wLW3vsKrprOtrKmnrrOpr7a0p6emtKWnuK6cs7K2qqWkp7KurrGmqp6npLGjop+el5qenK6rlJ2in7O6o6qpoq2upaGdmpqhp5+Xm6egn5idpqeRnKeak52hpqKgsKKfn6OWlZKYkpmFr2pqio2qfmeDlYatZHCdnZSZpZRxrqGkfni7fWuhj3axX2q0W6WAZpyRYGaCemZ/anhrqWS+cmemjHWxanyxeHSSk2NtbaduW4SgRWhmh5ZFdZxgfmd8pKeCWV+Lq2mAlnh5aqc3Sq9cWFNsZFtLTldfXFdWO06JT1hXL0lUVElDRUY9PzQ2Pzs4OjkwPTg5OTk6PTxEODs6Nj1BQDY8QEhRRzkwNzxBQz5ARDhARz0xMy0zM0UzLi41My8rLyguMC46NS8nJDIwM0IvPTtVgnYyLVZqXE9ZTF9nWTpNNV9ZMzAbkKKVgqynpZ6jpKqyt6y0vb6wtsSyt7rCpqmwq66oqbCuo7C6r6OkrrKjqbionrOysKOloKqtr6yvpqefo6Kwm6Kbl5WWmpqspZaboZ6zs6KrnKKtraCdmZegoaicmZ2jn5yZoKWkj52impegn6qepqagm5+hlZWRlpGahbWbtXiFqZm1mXaGs5u3fpOWlqiUfmuBpnuChoiSlJJ3q2drsVure4+HlHSJcY+GgH+IkJd4goKLmIyDoI+EsHZ3n3Fra2x8i06kWEhjY5l+Y2imYHlydVOSh15QqW1jcX6HgGKcLlGhb1tTa2hgTEtbZFhcWkI+sXlYWEEjTWhFQkVBQEExOT44ODo4NDs6OTw5OkE6RTo6OzY6Q0I4PT9LTkc6NTpBRkJAQUQ8RkQ7MDIwMTtGLDAuOTQwLC4oLzMsPjgzMR8vMi1EMTw8U31uMytYalxPWE1fZ1g3SjhhVTUwG5WflYezpqahrqmnsqypu7bCsLvCrbi3wKqsra2upq2xqaGvvKqhp7Sto6u1pKazs6ejop2nqrKosKelnp+fr5afmJSVlZedrKGZmaSotK+iqY+pqKqbnZWYoKWnmp+cop+boKOko5Wbn5eZnaKpm6WZnJyioJeTkZOSnIPVk5m5cLDCfsWGfNaUm7t8mpWkj42cjaR7joekgqWCeqx5j51Wr3qIfp9quVq5doeEfaaCk3yYeqp5jZ2Qe7FujoR0kLyFb5RQr6fFilGgemNgqWN0cohtl4hgU7W0yIaAiXxjpDNCnXZdUGppZFBAWGdaZGFKSE5tTVtST1lmWkNEP0U/MD08NTk7NzQ8Ozg9OjxDOkY6Oz42OkBDOzZAT0xIPDo8REhDQkNEPEVGODEyMTFEQy4vMDQ4MystKS4zMjM5NzEjJTUqPjM9PVF3ajYqWWlbS11PX2ZUN0c6YVE3MSWbopOYsaiopbOqpbSppLy3wbC5wLG1tLuztaexsKOwsqafrraomqe5rqOvsaCztLCgpJ6fp6mwqbSopJudnquXmJeWl5WVoKqcmZanrbCpo56PrKKolp2XnKGloZiioaGhmqGip5ueoZ6UmZumoJynlZubn6GZj5GUkZyIsm5otXGrh26OpnK0c3K2e5qXpIuPnY2jf5GhpX6wdoOR0tF2XK57hX+kb5uqpmuHhX2tfZeZj3uxc5Kdj3mzZZZ0hJ5vnmaUUsiLWsJcn3liX61gdnOHYpeIXlnKnW+/gXVNS7VTVcZkVFFqY2ZYQU9rYGxoUFVHSTg9VlFaV1hJQz9KPDI/OzU9PDQ2Pjs3Pjw9QztHOTtANzs+RDsuQ1JKRz4/PElKRkNFRD5ISTkxNzQ2QD4vLjI0MjUyLSkuMjYsNzQyJh82MDs1Oj1QcWg5J1dpXEJPVF9lUDVHPWFNNjIwoZ2Spa+tpKq8raa1pae2u7yyur+3tbS6urOltLShsbGin6ywpJemuq6ksbCctLiqn6adoamksqisqaSZm5qonpWUmJmSkqKnn5aSpaqwpqKWk62fpZKUoJukpp+UmqWmoZqin62aoJ6dkJWboZ6cpZWdlpmin5WYlZGahax7d6h2o46IhqlvrYqCp4OYmKGJkpqKon+TmYmuhX+Cs1xys1KufYOCpH9x1314hX6PnoaZmXevhoqRnIh4s2GaZZqBgpRsklqwWEuadZh5ZmCtX3d3h2iYiGtdr3eVno94bDV5yK6yX0JTb15nYEVQbV9wbVZVTS5lY2hSWFE7QURATDo1PzkxPTwxNj85OEA9OkM6Rzs8Pzo+PkU5LUVVSkVAQzpNS0pCSEc+R0s5Nzw0Njo+LzA0MzMzLjIuLjE4Ki4zMiUhMDM3Njc9UGtlPiZWZ1xAPlZfY042R0NgSTo5OZ+dlJ+4sJe0wa2os6ipsrq3s7i/ubeytby1pLezn7Ssn5+orJ+Up7WrqLGxq620pJupoKCoobanpqmimZ2VpaGTkpuYkpSipZqSkKasr6aglZmpn6KOkaKZqKWglZqlqJ2cpJ6snaGdoI2UnpqdoZiZnJaXoaCTmJCmnoapfX2leKGPjoOqcK2LgaeGlp+hiZeXiKOCkYiUqnyAi515b7FaqIKCiKB5dNh/doh0qIKOm42So3yWkJ+Ee7JenGSgfoOVbJJcq1tak3+Rf2hnqmRye4FrmIdzXaxaiaCOa29lT0pDoVxbTHRdYmZNW2FfcnNfSlY2SpuTWEhFPUdGQU0zNUE4Ljs+MDVBNzhAPDY9PEY/Ojw2Pz1CNy5IVkpFQUg2S0lOQElLQEVOOjpANC47PjEwMjE0NCsqMDUvNywmMjEoJCQ2NjcxPFBlZUEmVWZbPzJVX2JMN0ZJX0MyPzihnZmZv6uXtMKurK2pprSwt7G1v7m5srC3u6m6tJ+wpJ6lp6eek6qwqa+qtayqr6GYoaCmpaS6oqOroJabkaKglJOempSXnp+PjYuor6+mnZabqKafjJKkl6irp5SXqaeenqCjraShnqGNlaGYn6CSnZeclZ2hlZaOq5uPrm1ytHKpjHaKpnO0eHOzgJGko5KcjYmkh5B3uG+Me4uia2u2WqCFZZeXaaGip22TcrR0k5h/smqFkoita3WzYZ1mom+HkmqXXK1fTaF8h5FSc6Nten9+b5iHcVyvVjycd2VUb24uXKdPY1JrZWJtWmNdYHB7Y1NaUT4+bW8zQ0JAP0w5ITdANi47QDM3QzU4Pz8zOzxDREJKRk1JRjYySlRLRUJJNklKUD9ITkNGUD08RTUwOzswMTAvNzUsKyw0MjYvIzAwLCwdMjg5LzlOYGVEJ1VkWT4vVV5hTDVGTV44MUM4pZqbnbuhnLLArq6rq6e3qbivtcC1vLCvubirwbapqaCbpqOinZGqqqi2o7Knr6qgl5ynoKSruJ2jrZuWmY+lopWMnaGbmJyfkZOUq7Wwp5mUnKyql4yTpZmlraKRlqqxpJ+epquwmKGjkJmilp+blpyXoZKcqZyUkKqZh9SSmrtzsMOAw4Z+1ZabuHiIkJiMmIqMp4h6o7Z1fXd2woKasmCDunnAfHW4YrWBjIepfZWBrKlxe391vIinoGmdYaaOr6F+jHSHqn2+bnO8dLKDdXiBim6aiHFujaR0vV53fVthebxrWlZbanpeamFlZ2JteG9ZW1lDQUByQENHKzVHIic7PzEwPD83OkI5OT1DNDxATlpeYGBfX19aUFBSS0VGSjRITFJASk5FRk9CPEU4ND05MDIwLjg3LSouLzE4MCItMSwzHiw8OjA4TFhhRidUY1g8L1ReYEs1O0xbLTdBOaebnqG8opexw7Ctqqqssae4r7bEsbqxrrqvrsCxq6SinqOinJuQqaSqsqS1pq2ln5aZqpmmrLicoq6YlKCQpZ+SjJyjnpedm5GVkq+5sqyVl6Onp5OQlqScpKyekaCoq5+bn6ijs56jpY6noZSimpyYlaOYj7CgkpSpnoWQmbWAkJGMt5V4gpOatXdta25zb3mPhI6JdJ7Bu72ae4GyqHCAdJG5g3yGhoyGjXuKh42XfKS7ub2cdXq0o3R2l3V0sHWZnmaGaY21dHJwd7aMXoB6fYpog3lteWOLrHB1hX9aW6dqRWVaVGZgY11jUWdncGx1Qk1QTEQ6Wk0/SjM8MCA4PjsuMz1BOTk/PTs8QzZCVFlaWltbWlteYGJgXVNHR0g0RElUQktOR0VPRj9HPDc/NzA3MC85Oi4sLy0qOC8lJjIoNCQoPjcvN0xUX0cnU2JXOCpPXl09KzpWVic+OzynnqChv6WWtMK0rKqorKupu66wxa60sq63p7S4ramioaWeoJ2Zk6ukraqmtainn5uWoKOdq6S9pqCql5SckKGakY+iqKGTnZiTl5SytbetmJ2jo6KKkpKmm6Wqm5appKWcmqGopqajqaGRrZ6Wo56Xl5edno+wqJSbp6GOan5pnKZ4h3J9mo50emSHe72+wLpvkoJxlYdhc2paXpuKYWOIjpVrYICVZG2dd2KVa4CalZRlXmFjcZqKaXKMfYWVZ2p+cnR4fX1iW3d0gWhQXG6EfXyLa1hseoJzSkpvhnBNdU1FV11nYUxaV2djX09bbXVqcVJPREVOO0hIPUw/Mi0yQT84LzU/Qzw5O0A7PUM+UlZWV1laW1xcXWBhYWFgXFVHNURGVUVKT0hGUElJSDs4PTUxOi4wOzouMC03Nj01JiIvKjIsJTs4LTdKUl9JJ1NgVjQpUF9MKDM9W08nPzI+qKCoocKjmrS5tqOspa6nqLWyq8irsLOrtKO+sbKmoKKonaObmZmspq+kpLWppZuXlaGapq2ovaeoppWTm5WfmZKXpKmokJ2Rj5icsLK/rJunnaahiJORqZqoo5qbrJ+jmZqjp6yin6uimrGblaegl5Wdn52XsaSXoaiZnJGdnKKkmKaimpyampmPlYFnbX1xd5KXlJGFi7WqjYaYlY6KjJiXh5SVioSSlJGJjpKUmJSYl5qgopqclKGejYJ6pIZsanyQfIB0iYqBcYJ4eXZ2i4B8imtzgXSDdWV2fXdrcHttYGNdcGhNWFpmamBXWm95bW1mU09GUzlPWU1STygrOktCNjM1PUBBOTpDPjxFTlNTVFZXWFlaXF1gYmJhX15eW1RLQ1NHS05ER1BMT0k8OjszODksMjs4MjApNklSTzgiKSsvMiM0Oyo3Rk9bSiZSXlMxMFReOis9OFxLLDwtQLOhs6G/oaSxsregqaWyp6WwtarIq6ywpbWmwKe0oJ2kpJyjlZWgqqeso6O2q5+ZlpWflq2ppcCeq6SVkpyXnZeSk6KfnqKnk5GZqKeyxK+aq5yqnpCWlqidqpucoKyYoZucoqSvpqGlqJ+umJennZmaoJ6enK+gnKGmlZiSmJOgoZWjnpegjpaTioqNjpatj3yVm4KSgouqqIaBmZeKhI+fiHuEkIeGmpKIhoqVj5uXjZGYnqSWmpORno1/jmahs6+FioR2epCKfHZ5em9mepGBgIlrdYF5iHNpc396dYOHgmt0ZHlmYGllY2Rma1lse3BpalxTTFBEX1RFQD8/LDRARjs0NTs+QTs8Pz4+SE5OT1BTVVZWWFpcX2FjYV9eXl1eXVhWSktMQklPTVJKOzw6Nzg2LzI5NjQuKCYkLTEuLykrKjclKzwoNkNNTUQvVF1RMDVNWzE3RTRcRzU8LEC0oLmvv6yrrrKxoKqmsa2irLOwxLCqq6OzrryjtJufpqKhnJmXp6WppqSlsrSelZSdmZmwpq2+oKuikJGdmpmUkZSinJeonISeqquis8izn6qkqpaWl5qnnaian6Srk56enaCpr6mlo6uirpufoKGYpJ6cn52vo5ieqJOYl5yRpJmYqJ2al2WCknxlfo2Zj2N5jWxoa3uSpKpqZZqYfmeGimVlaWh7jqGPa2iNl5Gjd2tqi5mjnplzbG57hI2HelhlXoaCXmyLiYB2XGhzd3eSgIeCbniCeIBzbXmEdHeJiI6De2mGWV5rdGRdc4lpa31xa2NeUk5XSmRYQUo0PUY3P0ZENzE8PT9BRDs7REdISElMTlBSUlRXW15gYWFgXV1dXV5fXVpVT0RIT0tTTj0+PT02NTM1NTU0KiYmJSwqJS8qKyc2KiQ7Jy9BSltKLzdaTzYpRVkvRE8xWUM7Py49pZ+6vLmvrLOwqqWora2wp62tsLyxqaekra+wn62XoKOdopmZpqucraOlqKmyrZ6Vo5Cir6a2uaWuo46OmqGZk5KaoJmZpZV7pa2iqLPEuKSip6+enZSeop6jnKOpqZKeoZ2gqrCqq6SqoKqbp5+ooKyWoZulsKSXm6qVoZ6bkqWXnqqYnn69g4dytHKEnYWtaHi5xLhxk6KjeqaZmXOqgnzLwMC7cYyiiIKffZaYiZ3AvYKXnZ2NncLBfIJ8ko2aw8B9a6Wyb4yBb8p6f5t3koOOgXZ6gYB5cXp/h3F4hY2TeW13lGNmX3lkYGWCY150aGxkYlhMVklRWkhPRDJJRT9EQj4vPD8+QEE6OERDQkNFSElLTU5QU1ZZXl9fYF9eXl5eX19fXVxTTVBHVU5BPz89NjQ2ODI3NiomJSMpKiYuKyopMTAfOSojPklbTCojQlEvI0ZbM1BZL1VBQjsvOJajucO0sLDAqaiUo6+psK6tprO0r6mlpqaxq5+rmJqin5yaqqeinayjpaikpLSknaKTpq2rt7OnrqKRkZmdpZKQn6GYm5+dh6espKutwMCxoKmvqZeRnp2hmaKjqqOToKGdnq2uqayno6Onoaalna2pkqSaqK2pm5ypnKyhlpallaGil5x/zpR4eqSBeZSWm1+uj16Op4GioH2nlpx0q4OAr15jjap7p4eFoHSXk4izY4KrhqGNjbNqha90fZeIuGGDrVmjzW2QdXvae3+ZcH6IknZ+ZXuIdnZrfIhvfoWRkn5tgo9gcmxwZ2BfeWRccWhqY2ZgUlRSV11LT0M1QUhFRDg+NjtAP0E7PThAPj8/QkRERklKTE5QUk9TXF5fX15dXV9gYF9fXVpXT1VKPT8+PDU1NzgxNjQoJyQhJywmJi8oJiszHTYwJDc7U0wrLC1LMCc7XDtMLSFQQEY0LjGtwsC/tbSwuJedkaSqqK20q6WyrKyrpKumsKqgp5uZpZecoq+foJ+op6OloZ+wrJqdlaeurbGrqKyglJKbn6SSj56lmJ2no56upKuwqcDHs6ipsa6Wkp2boZefqaqflKCfnZ2usKerqZynqKSiq5Oss5eloqqpnaOmpaGwoJKZppmgmpSUkZegcYWMl3SEqIdxsXydcax+oZ6BpY+ed6qCfa1/nHOtfquHhp92mJJ7fJd+qoiijJGMnX6re4mUj5+Ae61WnMR6j2+SwX2BlW11b4xtZXZlhm9hd25yb4qLkpCDbZKQZnB1dXBgZ21lX29paW5nY1dTXGFZUlNDOElJQEQ8PjxARkRDRUE9PDw8PkBAQUJFRkdFQENJU1dZWlxdXl5cXl9hX15eXVtaUkM+OzkxNDc4NDUyJiMfHCAxJyAxJyAnNB41LSY3PVdKLTwnPjEpM1ZARiEcRzpDMS4rsNTGxrK0oJyjjqOjoqyvtq+osaaoqqetq6unoqOdmaKVoKWqn6GloKioop+dsKyXmpaop6+sqKapnpeUmqOhkZOgrZudpqOvrKOstaq6zrKtpq2slpWcnaKYnq6snZagmZ6fqrKpqqqbrKuko6ybr7GiqKuupZimqqmpsaKSlqOkmpSShaRqpHWJeql0erJwgqaKmYxxiKCah6RgYVKrhH+ug5t2rYGmhoafepmXhntmgKOJpJmGgqR9qX+ClYeuXn2pVZ2ikoF6op+Ae8OvxYtyr7OzuXFiqa/CdGiNjJiPgW2alHBueXh4b2xmZWVxcGZ8aWJdV2BpWFhVTExRTENDQUI7Q0BAQkk8PTo5Ojw9Pj4/QT04NjtETFBSVFZYW15eXVxeYGFgX15dXF1bU0lCNjc5OTY2NCwmJCIgKCciKy0iJC4hMy0mQERXSCxHKzU2KjFQS0wjIEE5RDQsJ8PJ1tW/oZmrp6Gvop6wtLCvqa2ip6aqq6uppKagm6SenaanpqOcq5qirKGkn6+inJuTqqS1sK+gqZudlpSmopCaoqigoKWcsKakqLKtt8mytaqrqZWRnZyimJ+ls52aoJSdn6esrKSumq2ro6OqorOuoqqzsaGaqaiur7aikpaip5ibkXyqbJ6Eh3WreXywb4Kki4mflpaflIHSuLS4yYCBsl9glKmDo4iHoHqYlpp4qsl0maSVqKqRk5qMgJuKmcbGeGahgqVzgZ+Ogn2vXXC0YrB1S6OGbadHgpNkj5Ceknxxl5OAcXt1fntuW2ZqcnBlgWpfYVhkbVxeWUlOTEtFREFCPkE8Qj9KOzc5Nzk5Ojs7OzMuNjxBRklMTU9RU1daW1tbXV5fXl9fXlxcXFxcWE1CNzU2ODUvKSglJiUkJiksNEVOUFBNRktKVkYqTDAvPS01T1RRHRw7PEYyLCSnpMDGuK2ps62spaKcsrmsqqGmmqilqquqp6CmpZiqo5+vq52moKyanqmlnae1n6KXk6mqtrKsnKWbn5SPpayRmZuno6Cppq6hpKeqsLXCsrOqraiTiZedpJqho66mmKGVmZympqybsJ2uqaeerKS3rKCxua+dm66nsrOzpJSXp6KZn46CnU54moF/n3qDo32DpISGpp6cnpOEuHt8ebmCfszGwrZ4m6GQi59+mpaXinaemIqlmKSpf7CFnYWfhKx9mpRipWykcI+FkIF9loJyrGCjc3GAmmC8fVJVdY+SpJd7fpOSi3V7c4V/cVxtbnhyaoFvW2RfaG5iZF1LTFFUQUlIRkk6OUs+QjEwODg2Njg3Ny0qNT09P0JER0lMTlBUVlhZWltcX19eXV9fXFpaWllVU09IQDg4Mi4sKi4rKicmP1FUVldXV1lYWFdVT1VGPEUzOlBbVBwbNj9ILC0gi4eZqaukq7mqr6Cboayzs6WfoJWlrq2uqqedpqaao6ehs66iqaayoJmppJSitaKilZeiqbW5o5uinKGSj6GxmJ6bp6Whoq+unaSoorayxLGtqa2pkYeQnKecoqScpZeemJmapqSpmq+hr6WmmK+lvK2htretnZ21sriws6aXna+go52Fj9G1w7d5h46FkZOQgaZ4lKF3jKCRhKWBinGqhoS0bnJqmaOclYqefJiZhoePc6+CpZuijqaLk52KlZCabXCyXKVzk3qcbJl/e5l8balho3Fxf59ic7K4aHiQlKaYfYyNlI14fXmPgm1peGl5cm6AdV1lZG5tZmdgSltYWDxIR0BVM0BGPjwqKDYzLjAxMykmNDo7PD0+QENFSUtOUFJUVldXWV1fX15eX19dW1paWFVSUlFGOjIyMzAvKysoQFFSVFVUU1RWV1dYWFdVVVZUUU9RW1UlITJBSCQpJZNzjYqtv7+8urSelqelrbWhopmVo6inrqusmaain6agoLWnoqmnsKOUrKOOpK2jnZCamqq0tKSdpJunkZSXrZ+fnaeknaectZqhqqS2q8OwqaupoYyEjpyhoKajlZqanJibmaelppisqK6jpZutpr6slL2wrJ+isLK5q7Ommqixo6eXeqiQfXywd4qBpKWInG2yb6CHrXyhjoOolZiArImEroWflKqhoZeGn4CZlYB7kn6rgJ2al4ureJ2fkYmTkoB5r12jgX2mp2SdgHyXc2qvXaVrcIWZXWBbjKBtlZKmmYKVjpiNe3uEmH9rbX9jfnRugHpgZ2VxbmhnZ0NaYVs+S1QzVThCQkM3JCQzKycnMywgLzY2NzQzNTlAQ0ZJS01OUVNTU1ZaXV9hYGBhYV5dW1pYU1BPTkk4MDUyLiosQVRWVlZUVFVVVVVUVFVUU1RWV1dYVlVVUUhGSUojKCi9kpqDqcbCtsGzn5qsoK64paOOm6Sjn7Cvqp+kn52tmZ65oKOroK+pmq6hkKuopJaJmpCusaymn6aarJeYj6yhoZ2loZqlna2YoKimtqnAr6WppJ+LgI2bmp+mnpKUmpqUmpqlpKSaqayspKWfqqi+pJbDrKqioauyuaqup6CzrqipmHavfpCLnIWHfLquiphlsIxlla19oY+DppWagayKhLCFppmkoaGRhaBbbGqBs2B/rXt7goGxbWdvmZiMiLBbfbRcpINryKJkn4B7vFh2tVqyfVKugHqsWIChbpiQqJuLl5GYmHx5j51+ZHR+YoR4dIB8YWpncW1mZWVPVWRcQlVfPkooPjk9NCEiLCUfMi4gKjEvMDQ1Nzk6PEFDRkhKTE5QUVJUWFpeYGBgYWJeX1xbWFVQTkpGQzU1My4vQFVaWFdYV1hYV1dYV1ZXV1dXWFdXWFlaWlxcWFdXR0I70p+zsre9urTCs6ObrKaltqigi5qgn5yzs6mfo6CetZigtKiqrJ6vrZ6sm5WvqKKOiJuOr6yop6Kmma6SmY+omqGdpJ+ZpKOlmZ+jqrKpva+lqJ6djn2LmpWgoJmPkZqbkpqXqJ+hmqiuqKamo6Wpu56gxqakqKGrtLWsrqaeu62srJWAqZKjr4+bgIekl5iQgYC4w7qDjpyThKeWnIKsioKviKabm6WqkX7VvcKqYqO/vX1+o4KD17q4tYWUk4Oevb6Ea6OBb6uEbJx/erKwx4Nqq7C9rHh3or68dIGWjqeckJuRmJ16gpGbemN9e2SOZ3mCe2BsZWtqYlBhWlNqXEBVYUJOKj06NC8eHyQeJTIgHSQoMDQ5NjY3ODo+QUNGR0pLTU5OUVRXXWFcX19hXmBbXFlUUU1IQz88QT81PVNZWFhZWVpZWlpZWFdXWFlaWllZWFlbW11dXFpWWFRXWruVs7Sxv7mxvbKina6mpbKmnYyYpb+quLKoob+mp7KcnrGcuqifra+mppSUsKyXjIObka6loqyho5yqn5iLo5KmnqecmqGoopmeoaytqrmuqKObl5J7h5mRppuTjpGYmI+Yk6iaoJipqaGqp6GjqrueqMSioK6jqrO0qrCpoLqnrq6ac3WqpLeGZYmgcGetj4qPbW93pJCZn4F1rpiUcI+LcZWoo5uXrqRybW1sZot4b26CmXGBempxaWeJlpWYcWlphIdncIZkXYhiam9ZXWd+d6ZfYXGOkW5mZYCNk4+imJmZkZiffYeQlXZmh3hpjmt5f3lkbGNmbGJLZFhKbFo6UWVFUidLOisjHCAbIiwpGBsYLTIuNTo0NTc5PD9BQkRFSEtMTU9RU1ZdV1pcYGBhXV1bVFBMSEQ9OkFCN01YWlpZWVpZWFhZWFdXVldZXV5eXVxcXF1eXV5dW1tVV16ola2zqbm5srOqqaGunqOyqZiSvrLEyb62qp7ArKyjoaisoLqjpK6sraaNl66pkIyFlZatnqaroZ6jo5+Ri6SSp5momZajqqCWnKamp6+6rKyam5OSe4SXjaWYjZGRmJSNl5WolZ+YqaObsaaeoqu5n6/Ap6Sypaywsaqtq6e3o623loqgqKW2nYmWopiHqZqQlJ2SqbOZm6OroLGWoqCdoKKcoKWhlaunjZOSjIeTnJyVkJqTmJGOlYWBpJqXlY2Lk5OLj4aEfWeJfnSCdnSHi3GnbHqUkZOSgYGOkJCPnZWhlpqYooOIlY1yaZB3cYt4d3x6amxkY29kVWBYQGpbSGNhT1orRj0rJyE3NDAuHxwhJTIoKjY5OTQ2OTs+P0FCREVKS0tNUFBRWFRWWV5gYWNdXlVRSkVEPjk9QEFTWFtcWldYWFhYWFlYWFpbW1xeX19gXl5eX19gYGBfWVlgpZapqqW1tq6uorCjrZ+gtbGQjqzHvcW7uauipp6bpp+xqKO2p52ptKeokZisoouHiY+bp5aspaCZp56ekpWjl6iaqJmUpqGjkJqnmaG1u6irmJqQjXuBlIuglIqVkZWQkJOXpZCfmqqgnLajnqert6euwa6jtqavr7CsqamzuKCuvJmRpaSmtqKSnaafjamfjZKfo6yvm6GjsKivl6OgnKOqnp6dnJarnZKZoZuUkJaqmY2ZmZaQlp6RiaCdlZSFkoyQjZSLgH1mi4V1hnV5iINznGqFkJSTkIl9jJaSkpeUopOemKKEiZmHe3KWc3qLf3J8f2pvZF5wamFbX1luY1BgZFBaOkdHRT4yPT04LysmKykmHSY0MDY2Njg6PT0/QUFDSUpHSktMTVNTU1VaYGBpYGVVUEpBQ0I6OUVNVlteXltaXFtbW1xdXV9fXV5fX2FhYmFhYWBiYmJkYlxbY5eVpKijsLOsrqOppq2gp7WqkJCdpbS8r62toqOaep2isaSlsamXnLimo5SZqpyOhoqJnKOPrp+ilaefoZKXmJuui6qWj6iZqIyYqY+fubalppmbjYh5gpOLmpOKlZKUkI2Sl6KNnZ6onp+4o4CEr7Wir691pL2jsqB3eaCqsrqUdayknomAqn9kXGJ2oI6knoSXfW6Ts52jp62qo2Wdn5JzeZmWcICYqJdsf6KoimWcpZyRl5iWjJKckYadmpCVg5KHj4+SiYR3ao6GdoZwe4aBgGFph4qUkotadZWRaGiPj3N7ppqZZXmZh4N4mGqEi4NveYBrcWVfdnBsa2hcZ2ViYnBTXD5OTk5TRz5AVEQ5MS8eHyY0OjMxNjY3ODw7PkBBQUZIQkdGSUtNVFRVWV1gaGZnV1FKPERHPDhVUltgYWJgXmBfYGFhX1xdX19gYWFiY2RhYmFhZWRjaGReXWablaajoa+xrKuppamuo6atpJKWq7awsqebq6asl3SMna+fqKunlJe5n6CPnKSdkX+JiJuejauaopWnoZ2Ol5GehHWuj4immqmRl6SJnLq0qKCZmIuJdXeTjZWTipSRkJSMkJOgjpuhp5mcspaAjJu1nbOMko+8p6B+p6J6oq62gY6Opp6Di4aQsamvjIqWo5p5gIushpydoqepp4eVhZh3pZt6h5uBl6eCgnucsnqKhqCXmZSYloKRl5aEmpljeYeQhI6PkYqDbXCOh3mAcICBhX+GdIaElZF4lmiSdKCadH2ZhKKeh5h/k4uDhJlrjo6FbHh7cXFnZHhvamxqXGZramV0XF9JVExRQEU1LlpUVTcpITA5PT42NDM1Njg7Oj0+PkBEST9KRUpLR1NYW1lbYWFpZlpRSDlFSzw+YVZeYmRmZGBhYWBiYl9dYGFhYmJiY2ZnY2JhYGVkY2djYWFonJejn6atrquorKCosaamqaWZlK7IvrGil6eptZ6PhJ2snKeioI2Qvp6ajZ+aoJB8ho6ZmIisnKGWn6CRjZOJhoCRqI2Hop2klJiehp+6sqeem5KOhXB1kImUkIqUkI+bjJCSn5KXoaWWnquHn7SJtJqtisqHqq6It4WMr4KwroOpjaWYjZ19qI9ye3ecj6eWaJWkebSMn56mqJKYwoF/q4iYoXKegJqlfZeFlbGAoX2hk6CQmJeBjpObipiRi3yFk4aNlZKJg21ykIV/eXGGgYR8hHWEgZaAj8Vmf6mHj6NrnoOjm4SagY6OhoqZcY6ThWh3dHx3aGh1cWhoa15kcG1nbVhnR11STTJENDZOYWM3JjM8RUdEOjY0NjU4Ozg+PT0/Qk0/TklKTENQWl1cV2Feam1cUUU9TE1ASmRYXWNmaGdiYmJiY2NgX2JhYmNjY2VpaWNiYmJlY2FmY2JiaZSXop+wp6mopqugpLiwqaqmmpSgo6SrpJelqrejr4Chp5ylnp2JlL2Zk42hkp6PeYSWlpGIq5mbm5mhhY+Md5ucj5+QiJ6knJaamIejua6lmpyMjH5ibY+Lk5CNkI2NmIyRkp+PlKGhmaGnfqGnh62doJatj56cnZGFgKCNq66Go42pmYyaf6N1gJmUa4KsdU2reIeNnJGbqKeAqat9g6F7eqdpnn+Sa2eXhpe2iZ5+bmBkWYOXf4x7ZGiLcpl9eZVsXXyWbV9TcINcX2t5g2BZZYJ9g4CXcKeqa4OjbnKlcJ+FoGlmoG1bbop8Zlpgg39iV1Bvd2ZtdHJram9ea3BtbGlYaU9dWEY5QTRHRF5rNCxJQ1JNTj04NDg1OTs2QDs7PkJPPlFSTE1CSlxdX1deXmN2YE1EOk1PTVRiXFxmZmlpYmJkYmRkYmFiYGJkY2FjaWtkYmRkZ2RiZ2VhY2iXlp2guKCqpKaskaG1vKuuopmYoKKlrK6hna61oqiSoaCfppuajpm0mZCLn4yVi3WBlJKNiqaWlZienn+ShYaspIebkIqYqZmam5KIprGnopaaiImAaW6IiIuOjoqLjZKMkJKijJSfoJyhpH+TgY+joZSgd5yWj6eDoad/hqmshKV4inyEmn6icHOUiJZ7nox5bYebjJmQm6iaj4ede4Kic3amZp5+d6RfmHp9knOibpi3tLp0k4eCf7WoZIHGuHtwlbeLcYCapGJzrKtgfWmds35ufIaCjYKLmHF/o2xyo3SehICjYJ2Zs5ZxfJefs3RzW56yg2pib3R2cWlvWGtscnJmXWleYktFPUQ2UUFZcTM9U0dfSlI9PDM5NTo6NkQ7O0BKUD9VTU5RQERfXltZWGBgfGRIQzhMV1VWY2FaZWZra2JiZWFkY2BhYmBkZF9gY2tuY2NkZGhkYmdmY2holJaVo7iZq5yToI2kt7WuraCaop2jo6aunJuxrayTmKGZoaSZmpSfq5uLiJJ4i4VxgJaNio+hkJKUnZd9kImNqKGHmI6KkaOUnJuNi6mopZ6Ql4eFfmt7h359j42Di5CRiY+UoIOXnqCdoJ6LiXecmKKMn3Khi4eoiJulj5anqn6tjH56oJl6o5N4gXSWiI2cfZWfhpuOmZumhqJkoXyIlpCbjWyeaJqNbpqZe4CLp31yaHSrg56DdKpolZpdm4V2hJ1oqmqAuGZcqHCBnGCVjF6ndnWHiX6eaJp1hpOSl45/n26akG2nml2ofni7a36qW46EXbNnXG5yenhraVxxanh5Y2BmWGJBUUZPN1ZDUm81S1paX09aREAxNTE7OzZIPzpDSFU+WVJZXT5EYl5WYFFhY31qRUI5TltdWWVmWGZnbm1iYmVfYWFfX2BgZWNeYmRvcV9kZWVrZWNpaGdraZWciaq1m6eIY5Sbq7qysayeppycqZ+erpuesKisnZekmqGfmJaWoaSZhomNaoiAcnuXiIuWloSRlJiPeoqElqSdipSPhouekp2diZCpo6CajJKKgIBpgIZ4f5eMe4mOjoiPlpp/lKKfoKGTmHJon4qfj4xwkoyBqYeYnqKnn6d8r62joriXd6OzoqSAiJR5nXuqmn+ijp2bl4iXcaF8hY2vtX1rmpGheH6YtKOjq6iEmXybfZ2af3SqWl1ve5aLeJ5iTH56eoVjeZdCTJ5ZompyfI5tgIiEmXWbeIaJsbN/f5uTp3aCnW5zfZRvmXNrpF2VdkhlZGFzcX5+bmZgbGl2e2RlYlJeV11VV0BaRVFoRFNXXGJYXklEPUI4P0I6SUY4TEVYQVdSW1ZERmJcWmBLYG1+ckVDPFVfYlpmalZnaG1vYmZnXmFhXF1eYWhiX2VjdmxeZWdma2RmbGloa2mTnIGwrZmEVF6gprO5s7OpmqKMnKucnKmUoaukoaiPn56dmpmWmKGdloiHiXeGgW95lYWQm4t8kZOWiHJ/iJKhnHORkIGImZWhm4WOqZyalYuLi3yDbISFcYGhjHiGjYiIk5iVfJOjoJ6jiK2GfbWEjp6ce6WWeqmBlZyPiqCcfKdod21+mXShc3F8noaZcJODrn2kg6aemYCjb16oZ3WjY2+lYZzTkHx7mXhyc2OihpB+o3Okj3ZrkLOMYIKYiXOqsqi8f3eDbX6+pqm0XpxufXGXbn9yonJdpGdzpmFopm2b1Jl9hZtwenqXa5t8eJdzbqmkZ2FleXCAhGtnZmRudXdnYGNUW2ZRUWJJV0pUYVdTW2VqXGVRRkNLTUpLQktFOE9AUU5YU1lPU1FhZmVqUmN3eXdJRkVjXWVaaGpUaWhqb2NqZ2BjYFxdXV9oYmFoZXxkXmRnZGtkam1naGxol5t/sKtUXEt+qa+xtLCzo5yZhZmpoKGkjqWooJipipmYmJOZk5KgmI6HhntwfYRofY+DlJqBd5COj4lvf4aPkpJsl5N8iZGSpJaDjqqak5KLhYl6g3aHgG6Bn4Z3gZKGiJmil3uUo6San4mzoaK2i3qsp6SupXCogJqQhYCbkXukgKKZhphynoSjrq+Kl4x/jKSNlYOtoZR2tLW1yaFzlIqBn2Cdl6lteZWGoJt1oYd3oH6Sl4uBb0xmo5Jwm4dypHt6dGGDgWt+oGtxZF+ccX10l2l6abO1tMamc5h+ep1rnJurdYSbbXV4mGmaenWYclBFfbReanZreYdmamhidHVwblZeVFlpUFNpSVZNWVRWXWhrblZnV01KQkpNS0hKT0FRS1BlY2ptZXVzc395fG51iXt7VFBObF5oW2tpUmpoaWxnbGZjZWBcXVxeaWJkaWt7X11kaGNqZm9sZWltZaGciK+mhGY/lKGzq6+vtqKikICYqqKipYylp52dpoKal5aNl5CPnJOOiIN5anmGZYOMf5egeXWOiIyBaYSFkoKMhZ2NeoyLlaaTg5epmIyRi4GJeoB9i3lwkKGGeYGVh4mWoJV/lKWnnJaWhGZueJxsomR8caV3m5hwZ6aAlot7pHqfloOXcp52gYqUlo+5bpCKomJ9maGViG1yaaprdaBtbqZfmmmLkGiWh5qVdaKAfZpgjIaNdW+IYmigZZ5+aZp1b2NmiIJtcqJaX1tioW1diYxve35zcmSlbXeiZGenaZlzjJlvom9TiZBvoF9lqFSLXlSYbm1za3KCbXBpa3lza29SWVdXZ1pUbUpZT11JWGlpc2pZa1ZRUkVWXExYU2FVaWtfd3R7fXB9fHKDe39zdo2AhHZeUXJiZ2JwZ1BqaGhrbG5oZGdfXV5dYGtiaml2dV1cY2ljampzbGZrbWOcpJimemV0bYunrqSpsLGmn4uAmKudn6aMoqGboqKAlpiTjZqPi5iQjop7hnGAiGiLi3yYm3N0iX2Qe2SCh5WKiZaZgnyIh5aokYGirJGGkIqCin6AgI5zaY+lhH2GlI2ImKCOiJOqpp2JpniVm36liJaMspiekIKvl5+ld5SHeal0pY+Emm6kooyShIyDu259pa+DhoaGk5Wcn3ylenKolaCWZp5+b6tjloqVkniobKmigYl2iIN3qpGmh2qRsGt2s4ypa4qGbW2fnpKVYH6ri6p2fn+MpZ52n32EpJWdoGqbiHesZ5+tjLZ0d76NpJNZg6aNq2F1cnRwfHVxY2p+bmhsU1dbVmFiXWtNXVJdSl5tbnZgW3FZW2BbZnRlbm9xYnF0YHd6fnlyeYNzhH+Be3uMgYKAdmJ4ZGNtc2RSa2dob2xyamZpYWBeXGJrYm1sem9cXGJpYmxqd21nbG5ilaWqnYGAnqSWqaqdqKeupJmJg5irmp6kiZulnamdhYyajoackYWSjYyNdIZ6iIRvjYR+mJN0dIZykoNtf4uSh4aTj317goWYpo5/paaOgY6JhZV2goeSb2yLqYCDi5SOiZyfiYyUqqOgj4B1lJeIfoF5lK6jf4GbcY+FeI+Kg357cqeMcX19epeWm4SOeHt+foeUlZOKdpCYn6CDe32Ja4yFW3l5cnpwaG5+kolxf3WBj5STcYaEgmWMf16Bf4t3dXOUdW95bm6HbYSFXnZoeI5lgICFjambfXR8lmqJiHCBdn2Gdm1tZ4xzeXuYeIVba1h5j2lud3JxcHh4cF1shm5pZ1ZbYFdcZmtkVmJVX1FfcHh4bGt2ZWpra3Z9cXJ0c2FvdWJ0e4F4dXqDdYCBf4F5i4WDfXttf2xkeG5eV25naHVreGppamVcYFpjaWZscXVuWltia2RsbHluaGxvYY2UuKimi6GimqakmaWcq6OhhISYrJKeoYmappqpmIOBm4p+lpOHjoqJjXKDfI99fo+Fe5eOc3KDcJWFe32Si4aGkIV4fYCGmaSOfKehi4aQkIWWg4aOmHdyhamFjpGdkIienoiMm6ifoKqDiY6Vmn5+iZatqI+Spo93b5yQgnmRb36ohXB9lXFrcH2Bn4x/k46MaG1dg4uMnJuejnOVi4hxdGuCdnSBWXJuhpGBfX6Mal1qZHuFhImAYGl4ept7gouCdYGFgmd3ioZrYXBxgXZecoqBiI+mlYVljI+DbneLhHGGj3pwZmdle4N6lltcamdudlt7eXd1bnNzgmZcbYpra2JaWl9aWWxxXF9hWl9dZnR+enRvdGNra2t8fXN7eHRkbXVobXx+dnp8e3p6gIB+b4aKhHt9c355c39pVFxxaWx1b3Vna2hkXWFYa2hsa3FybVdbZW5sZ3N5b2hqbWCLi6qwoZCjoZqenpiemaijo36Dma2Nn5WInKKRpZV/e5iEfJKZiYiGh4pzfYCLdoWLgYSWinFvgHKYhoR+k4SDhoqBeoCDi5ugkIKnoYd4jpiJlYuLnJeFg3qsgpGXmZSKnp2HiKGrn6Kio4uIk5uco5mWqqGnp6CSm4eVjXt3jY6Ep35/kpGSk5yyppuVnpCNspOXhKWMjJWbn4mQm4KIkYprfI53eGWChpCLfImdhIeLkIiIgISEkHd8eXSZoYiGiZ6KhJR+fYqAgHVvc4SDf3eGhoqPppCDhY2Hg42QjH2IjIqRg3dsgoR9eplqcmhhdIpwfXp3d292dIFdXm+GaG5fXlpdXVRoclZjXFxibGh1fHxzb3Bka2ppgHxueX9xanBwbGeBe3KCgHh/fX+Ee22CjIZ8enh8fXqDeU5kdmpybXB6ZWtlY2JgW3RmcGZycW1VXWx0bWl5enFnaWtkjIeduZ6WoqGYlZiZlZmkoZ58gJqrjp6NhqCci56WfXmUg3uOmYmGhISGbniAgHKBh36JlIRta356l4eEg5B/gIaEhn2HhI6bnZKHq5+EcouQhpORi52RfY16qoSNkpiWj5yWh4abpp+imp2GgpGamZiQmqafpZ2dkJaAkIl2e4eOhKV7fI6QkYaYqqGdk52PjaqOkYCdjImTmp6Cjpd+ho6Db3iGcnVhf4OPhnWLmIGDj4KGhX6FhJRueXV0kqGKi4WahISMc3+IfH1ycnuHg3t4io6DkqaPhYOOgYSKiYp3homKjH1vbH6BfG5obG1nX3p/aH17dnR2dXt3XF9wfW51YGNbXV5RZ25UZVteYmtpdnp+cWxsZGtqaIGAbHOBbGx1b3lwhXluh4B2goB+hXZxgo2Ifnt7fH97gopgaXxqdWhpgmVqY2BpXGN1aG9idG1sVWNxeWVwenpyZWptbIuJnreaoaOfkpGWmIuan5+ee3iep5GcioellIuYmXl6jIV8iZGDjIKCgm57f3hzgYV9i5F9a2h9gpiJgYiOfH6GhId9j4GQm5uRiaicgHCMi4yTh6GiioWMfKiRiJCSl5OWk3iMo6CgnZaZf4CQmpiSjJqjoaOZl5Gbfo2FeICDjoagf36MjI98mKSgoZOZkI+mjY+BmpGJk5ebfpOSfoeOgXR0gnB2YH6AjYZxipV8iIxxjH+ChYaOaHdxeIuYkY9+l32HinKBhnt8cXh6ioR6eZCMgpWlk4uFkHuGh4eFdoKEiYh7ZnJ8f3l7cWxqZl9+c2h8dXZzfHOAal5gc3Zwd2RjWV9eUmtpVGRZX2FoanZ5gXFma2RsaGWAgWttfmhvcWx+eId6a4yBc4GBfoF0doKNhn98en+BfX+PanKDbnNpYodobGJfcVZ0b21uYHhobVdqdHZjdXp7cmJqb3mJjZ6ykqWlnI6QmI+GnaCbnXx2paGOmICMooqImpZ4e4aHfoOJf4iCgX9xf3t0doKFfoqReGdjfYaXioKKjHl9gI2DeZaBlZiWjZagm35wjIKRlIamm4eNiYOmlYWTi5aXk5J3kZ2goZiTlnl+jpiXjpaanaSdmJKUm3mPhYJ3hJaNnX6BiY2McpejnqGTmY6PooyLg5aYg5KWmX+YjHyIjYB2cX1uemSAfIqFcIaTf5CCbIeCgYCJhGV1b3uGkpeMfJN3ioh7f4V8e3F+d4iFeYSPiYqXopWBg4t3iISDgnd8goqGd2B5eH10f3hnbGVhf2lqd3N0dX1xfGJjYXNudXJtYVphXltsZVJjWGBhaGt2eYZxY2pjbWVofYNsaHVobHBpgH2CeW2QhnGAhIN/dHyDjIGAfnqCg358kG12iXR0bWWKbGpiY3VWhGlxbmB4Z2xianZwZnl8eXFfcWyGhY+crpemqJ6NjZeHhp+Tl5l9eKqcipl6l52LjJiQeXuAi318g3yAgoF4dHl6dH2AhH+Ji4BkXn2LlYd/hYd0fX6Kf32YhJeUl4ykoph/c4d7lJKKp4+MjoqSoJGDkZCUl5GLgY+YoJqSkJBzf42SlImdnZ6mmJiNlZZzjY6Ka4WXj5l6h4iQiW+XnZqjk5WKjZ6MhoKSnH+SkpWHmYh8iomBeXF6a3VsfH6Lfm2FkoKUeHCCg31+in9kcml7gJaXhH6Nc4+Ig3iGfXZ3f3yFgHyCjISMlKSPeISCdImHfYB0doGJhG9he3V6cX1vYm9jZHtibm92c3h3c3RhdWBvbHVub1xcX15ea15QXVhjYWhtdHuIa19qZmpjaHeIbmZsaGpsaIF9e3dukIhzgYSEfXSBhol7g316gYR9fY5yeot4eG5sh2poX2lyYodocW9ldmdubGF5aWt9e3hwYXdti4CZmaqgo6idioqRhouei5WYfneumY2XfZ+TkZaUiHd9e4p8e4B2eH+AcHR0e2+FfYGAin98YVt+j5KGgISEc3qAh3qPkoiSkZyTpZyVgn2CfY6LkqSJjoqNl5qNhZGYk5aPioiMkp2Tj4uMboOPj5GInpmioZeWiZaQboiZg2aFmI6TeoiEkIpwlZqUopKSiYuZjIJ/kJ59ko+SjJmOe4qEh3NydWtwbnV7i3RuhpCOknF1gHuBgYh8ZHBseH2Zk32EiHSQioBzh3luf32AhXuFi4iEjJWojHqHfH6LhXh+cXCBhoRjaHl0dXB8Yl9wYWt0XnBqe3l4bHNwZXhdbmxzbXNYWl9fYmtaUFdYZWNncXF+h2ZdaWhnYmdxjW5kaWdkaWiBend1b46FdIGCg3t1goiFeIV8eIOFeoCJd3+Le3pyeINqa19waHSAanJvbXFnb2xlfGNugHp3cWx3d4p+opehqKCmm4eMioKQnYeTnXWBqpWTjoehjJWTkIB0e3aFeHl/cnN7hWtycHptinaAgYducVtYfpGNiICAgHd1gYB/oIaRi5KdmKGVmHiKgIGNiZyeio+GkpeWhYmVmY+Wi4uNjY2dio2Pg22Ji5CQip2WoZyYlIWYh2qEo4JmhZ2KkH6Lg4uBd5OYkZ6RkImJlY1/fo+YfJGNj46aknyKgIJudXBsbW9we4Vpc4OOmIpxd4B0goiCeGZybnWBmY57iIR6k5F5dodzb4h7hYt6ioWCiI6bo4d7g3WBi394eW9sgYSCXnJ0cnBweFpecGBwal5van16cG1tamx2YHBvanFtWlhhYWJuWFFUWmZnY3ZvhIJiXWttZGJma5JuYGZmX2drgXVyc3CLgHV/g4B4dYCLgHmFf3eHhneDhXyHjH97dop/anFjfGOGfG5xbHRqaG9sdnhfcX95fHR1dICCfqSVmq2ep5aFjYR/l5SDkKB1i6CUk4aLm4yVjot6cnh0gnByhXNxdYhrb211bYh2g36AbW5VUYGrlYeCeIB3c4N6gqCCkoKTk5ick5p4knuDjZOkmpOOiZWYkoSGl5mMlIuJj4+InoSPinxzi4WJjoicmp+alpR/k35ohZyHZ4Wgh5GEkYKJcYORl4+bjo+MjI+NeHuSkHqOi4ySlox8iHyAa3ZqbmtsbHt+YXp+jpaCd3qAeIOMfHlnc2xzh5WKfoiGe5OPcXmDb3aMeomLeoh9gYuQnp2EfHt3got9d3FqbIKDemB4cG5scnRWXm9icmBfbG55cGhvZmZzdGhwa2F3ZV1WZmBgclNRTlxmZV15cIh8X1xocmJiZWaSal9oZFtncH5wa3F0in12fIWAdHV+jHl7hoF4iINzhoV+jI2Ee3mVeGZyaoNgiH1vb2t6YGpudH91X3R9eIZ4dHOFfHigj5mxnKWOgop/g5qHgIyef4uak4+FiJiOjo+Ed3R2c4Bwb4VzcHGDb2ppdm6Dbn19bXVzUk2C38iS1pN8cHWDdoSgg5N3lJGZnJCZe5RzhZCfoZOTkIqSm5OGfpaWiI2NiJGMiJx+joB4eo1+iIyKnJydm5WTeo11Z4iRhmyIooSRiJeChWOMkZmOlYqXi42Ki3F6lIh7joiKk5GJeYV8fmx7ZXJva2t5eVyAeZCOgHt9fn+Gjnp6aHJqc4qPiYKFhHyUimt9fm5/i36Lh3yEeYGPlZqZinx2eIOQeHNtZ3GAhG1qdG9oanRuU15vZHBZX2txd2ZramJmeHJvcGNfd2BgVmtfXnZQTkthZ2NdenCJdFxcZXZgYWVljmNhZmJYaXNzbWpxdox9dHmGgnV2fotzgIZ/eol+comHgZGLiHx+mHZlc259ZYh+b3BrgFpsbnl5c2F2enuNdnJ3ind5n4ubrpugkIKFd4iVfn2KnYeFoJGPhYyYhJOOh4F0d3B5cW6Eb21ufnJkZXhwfW16fWpoa2OkmsHcru+hc2x2hHaFo4aSb5aRlaCVnIGScoWLo5eJjpWKkJ2Wg4CVkIWJj4CRiomWfod7dX+JeIaEjZybmJmOj3aKdm6FiIp9iqKDkImchIVei5OXio6JjoqKhIlte5aBfYiFiZGPhnaFfX1rfWR4dWlueHNYiHqSh4V5foCAhYx+eGVyaX+JjomCgn+LloVrgXVth5CBj4R+gnp/kJWTmI91c3eIjXVzcWd1eoNidG1wYml2Z1JhcWdsVV9udHlhcmRfaH1wcm5aY3JhYlduWVx4Tk1MZGdiXndziW1cXGR5XmBkZYVgY2NeWWpya25rcneMfnR3hIF4d3uJcYOEfX6Ie3SLiYeWhox/fpdzaHVxeW2Lem50cIBXcXp2eXFld3mGjGh2gIlyf5yHmaeco5KFfXCMlHh5i52EhaGNjnyWjYCaiIR7c3dwc2pvgWtpbXx1XmF4d3txdXtnYGR869q1ycPciHNsdIF3i5uJjmqYkI+dlpOBiXGFiaCNhIuVioyYk3yNk4iDiY97kIuFj4F/dniDhHOHgpObl5SXhox1h39whIGJhpihgpOLnoOJYYOUj4aJhomNh4GHan2UgH2DhImOjYJxhn5/cXdodnJpc3dsWox8koOFfX+DgISKgnVhc2uIgY+KgX5+kZB9bYFreIWOhZGDfIF8f5GSkJaIbnF6jIZ1bHFscnmBYHRpbl1rdmBSZXFpZlNgcHZ0YG9gXWiCcXNpV2doYmlYbVZbdUxLTGZnX2Jyc4VpW1xleV5eZGd7YGRfXVlrbmZvaXN4in5zc4F+enZ6iHOFg3yAh3Z3ioaOmYGMgnuTdWx3dXl4k3RueHt8WHqGcYBvZ3h3koJjdoaFcYqWhZmhmqKKh3Nvk4tyd46cfYqaiYl8n3+Emn+BeHJzbm9kcn5oZmx3eFtfeXt7cXGAamFnYX/Vto6QpnhucXd8cZORjYdqmY6JnJKMhntph4uZhoGSkYaHmI18jY2BgYqNe4+NfYiEenR7g3txhoCWmo6TlIGIdYOFdYN/ipKcnYWUjp9+iGF/k4eEiISJjX+Ag2d9kYB+f4KMjpB+bYJ8gnRrbXd0c3Z1a2ONgY9/hX58hH+EiH5vX3JwhHuOjIF8fpCIeXCDZnmCioaLgnuEfX+Tjo+Sg25veYx+dW1va2x7fmNoa2pZbnZaUmpyaWJRYnJ3bGJlXlpqg21zYltnX2RsYG5VW3BOSE9nZVxnbnGAbFtbY3NgXGNsd2RlXV1aa2xibWp0d4Z/cXB/e311eIZ4hYJ9gId1eYmBkpZ8iYZ2iYFwd3l7hJNvbXyBd16Df3SBbWl6dJRzZ3OHfHKSkYOan5ughoh2dpV+bXaUl36IkYSKjpp9jJp2fXZxb2xqYXV8ZmJpdXpaX3d8em1xf2VkaGdXnY9ecXOWvMSEdnGUiZB+c5iMhp2TjIh0a4iPlYB7lIuBhJuMfIuGfXyJjH+UiHWJhXV2fYFxdYaBnpWGlY+CgnJ/h3SDe4mXnJaGk42cgIhlfZKCf4WDiYlygn5nfYt7eX9/h4uPfWmAfYN2Zm94eHN2c2xqjYWKgYp/eYKAhIN/al5xd3p9jImFe4CPf35ygGh4goaKhYN4g3yAl4yPjH1ubHqJfXd0b2lofXdlXXFjWHBzU1Ruc2liTmd0eGZgXVxYboBvc1llYl1qbWBwT1lsUkRUaGFaa25te29aW15sY1pjb3ZkZ1xdYGtqY2xpc3aBg3Fufnt/dHWDeoSCfIGFdn6JgZaReIOKdIGIc3l5f46Qb298gXFpgXl6fm1tfHaVa2p4hHRrlI2Fn5igmoWIbn2Mdmp4mI9/goqClZiKeo+Wb3pzcWxqZGB0emhfZXJ7WmFyfHlmcHphZWWOsbJ3SmJapNnQl3J7kYuReH6Vi4WZko2Gb2yGkpF6eZKGgYSZinyHf3h4iYqEloBviodxdH17anmFg6WRhJONg39vfoJ2gniFmpiTi5KPlIWHb3qSg32Dg4mDb4J4aICFeHJ/f4OKh3xlfX6DdWNwcoBoeHFvdZiNhYKKe3Z4gIR5gWpbcHxygIeEiX2FiHqIcoBtcIOGjoODcoN4gJmMjYR3bW5+hH93emVoan1yYFl3WllybU5YcnNmYEptdnRhXVtbWXR9cm9XZ11manBfb05XaVI/WWdfW3BqZ3lxXFpZa2VZY3B5X2hdXmVsaGZsaXF3f4dvbX99gHVwgXuAgX+Cf3aBhYmXinGCjXF7hn16eoSUjHVqen9rb350f31vcnx7lHBvgH94ZpKKgqGYnJKChWeHhHBoepeJfn+FgpmKgXyNjWl4cmtsZl9hb3ltX2JveVxkbIN6YXF2X2Vl1eu+izI6PouOgHJ5hYiOjXaEmI1/k46Nf25shY2MdX2Pf4WClYh8g3hudoeFg5d3boiEbHV7dGZ5goOojIOPjIN9bn90dYN5hZuQi4+RkoyLhn57kod4gISNg2yAcml/fnhtfHuBioN4YnmEgXFkcWh+bXRxdIGbi4B/hX5zdX6Ac4BvW2t9dHiJgop7hn98iHh5cGuIgo+DiXGBeH+Wiop+dG1qdoCAdXVcaWl4cVlXfVNacWVMW3NyZVtKcHdvXVtaWV10fnRoWWJbZ2VuYmlMV2ZRPV5mXV12Zl90cFtYVG9kWmRweVpoXmBnbWdpbGlweH2ObGqChH95boB7fYB/gnp1goGMk4VwgItud36Ae3uIk4l/aHt+a3R8coZ7c3d9f4x6eIR+fGuMjIObnZaMgYBsjX5raX+PjXt+f4OUgn99iohrdXFnaGNbYmdzb19hbHRhaHCJemFzdF5jZJugkG5cNVmvtXVqgIl9koZ2hpiHdY+MindwbIWDh3R5iXiJfZOIen5yZ3aIfn2Xb3CGfWh3eW5leoiEpYeBh42Kfm5+dX6AfIuYhoGTkJeIi4SJfI+IcXt9hXxpfm1qgHt6anp2goeAcmB3gX5xZHJndYJtdXuFlZGBfIJ/b3d5fHR+bVdtfnZzioGGd4d1gYl5eHJtiICPgIRyfnx9koiIem5taW2CgXVuXWhmdHJSW3tOXHFcT1xyb2RWS3N4aldZWVphcYB0YF1dYGZkaGhmTlpoTkFhZFtgdmFcdW1YV1J0YVpkbnJXal5iaGtnbWxpcHd8kmxphIp9fXB+fnuBf4J6d4CAiYuEcnuHb3F3g397io2Pg2p+e254eXeKd314gIKHf4N/fnpthYyImKONhIN7dox5a22EiZJ5fXuCkYCAfYqDcHFwY2ZeWWdfcHBgYGhwZmpvinVhdG9bYWRpdnt/vpymo8i4coWDc5R9eIeUhHSRjYhyc3CEe4NzdYZ0iHeUiXl5cWN3hnmAk2lyhHVmd3ZjanyDiJ6CgH+Ojn1yfnODeX+Rj4J3lY2Uj4eCiHqJiWt4eX51aHppa395c2l6doCDfWhgd4d+ampzaHuAaXaBjJCUfnp+fnF7dnt0fWFVdXxyc4mDgnyCcIaJd3hwb4KCi359eH18dY2Fg3ZocWhsiIJycF1oY3RuS2V2TF5vVVRac21iUU90eGFSV1hcYXCCc1tgXGhlZGNqZFBbcUlEZGFcZHFeXHdoVVZUd15cZW5oVmxeYWpnZW9vaHB3e5NuaYiLeX5ye355goGCfHZ9g4iGg3B2g3Jtd4KDfomLlH9wgHx4eXqBi3SDeH+BgYKEeYB2b36Ji5ueiH2GeneHfGh0ho2Ren9/fImGhHaPgGdvbV9kXFhlWW1zYWBhcWxsaIluYHNpWV5kbYB3qdqqx4aHsnKKeHCNdXuHkIF6lIqAdXR1fneAcHF+bYV0lIZ4dGxgeoF5iI5mcYNvZ3VuW219gZCTgIF5kpJ9eHtthnWAkIuDc5WKkI6HhYV7f4VtdXZ/bmh3ZW18dm1qd3Z/f3xhYniGemh1dWN+emd0ho6MlXt0gHVxgHp8bH9ZVXJ9b3SDhn9/eGuIhnN4anR/g4N9enx3e3KKgHxzZ3NlbYuEbXRbal92ZUhub0xbY1hXVnhtYlBTdHZYUFVYXmBxhG9cYGNtZGNebmJUXXJHQ2ZfXWZoXlp7YlJWXHVbW2drYVZrX2FuZmZscWhwdniOdGuOjXV/dnh9d4GDgXt0fYOIiINvcX90cXV+hoKJjYp7d394hHx9hYd4h3x9gX6EgHt+c3Z5jI6fjIl6iXd1g3lefoaajXmHg3SGhoR3iXtibmxbYltbYVZqdGNgW2hvcGeHcmFxZlddY2t/fMrOh7mia21ui21yhXJ9hYt/e5KFenl0eXV1e2ptdWOEdpKCd3BnXnyBeYuJZXGBampxY1hte4aciYOCc5eUd357bYdwgImKhnCWjpCIhYuDenl+cXFvfWdocmJteHJqbHF3fXx6XWV5gHdpdXhmgnZndIeMjZR8codpbn6AeW18XVdwfW1zf4p8gW5uiX9wdmd2foB+gXV7cXpzhnt5cWVyYW6MgmxzWGtfeFxJb2xNV1ZfVFV8a2FPVHVyUVFUVl5idIVoXGBramZiWW5hWGJwR0FoXWBmXl1We15PVmRwWltqaF1XZ2BfcmZqaHJncHN3hnhulYp0f3p3fnmDh4B1c3+GhY6CcHB7d3d1eYeFh4yGenx/dYt+fYaEhId/fn59h398eHV5d5GTn36MfYtudYB5ZIOIl4Z0kopvhYWCeoN0Y25qWV9bXV1UZ3NlYFlkcnJngXNia2RXW2Bpf3i+rnuft25ic4dodHxyeoOHe36NgHh4c3dve3Zlam5hh3WOgXNqYl5+eHmKhGZxfWhqa1tXb3iKo4GFf3GZk3GAeHSBbX+BkIZylIeMh4OIhX15dHJvaHlham1gbXZrZ2tseXd6d1tnfXx4ZXN9boR0ZXWGjYaVfnCLZmt6g3RsdGJbbntrdHyLeoFmdIZ9bXBndH53fX5ye2t5e4F5d3BlbGFtiX5tblZrYHdWS2tsT1JPaU5ZfGdiTlV1a01QVFVeZ3aDZl1hcGhnYFdpXVxraEpFalpiZFdZVXlaTldualldbGVcWWVjXnRmbGRyZ3JwdIB4cJmFdn9+eH98hYd9dXOCh4CVgm5zeHp6c3OFh4iIhHmBfXaPf32EiY6DgYN7fouDe3d8d3eanZd6ioOHaXZ+fGyEhZSAco+CcYaCfoJ/b2ZsZ1ddW1xaU2RwZV9YY3J1aXZwZWViV1xcaIBwb3KAc4llZXl/anR2c3ODhXiBhHp3dHVua3pwYmdrZ4Z0jYRuZl5ffG97iX5obHdmaWRWV3Jwjad8hHx2lpBzfHJ7eW16epCEdpd7h4aChoN9dXBybWd1XW1oX2x1ZGdmaXpve3JZZ4F2dWhwgHiCdWF3hYt8lIFui2pteoFxZXNlYGx5Z3J2iXp9YXWDdmlrcXR6cHl4cnxlfn5+eHZuY2VhbYZ8bWtWamJxVExpa1BMTnBIXntmYU1VdGRKTlNXYWp3fmVdZ3NpZV9WY1dicF1LS2tYY2JVVFVzV01YdWRaX2tgXFpjZV93Z21icGlzb3F+dXSZgXh/gHh/foWEen12goN+mIVucnR7enRxhYWPgoB6i3V1kYB9gZSOgIWEfH6Mhnp+gHZ7o6aKeYiGhWx1fHt1hIKMem+Fc3qFfYKDdW5qaGVWXVtbWlNjbmVbWGF0e2ppbWhfYldfW2mAaWtvgGdsYWh6eWt0dHRvhoJ7gH12dW56aGp5al9lbmiBd5CEZ2VYYndpfod6b2lvZmZdVVhvaI+ndoF6fJGOeHVvfm5xdHiOfneUdIWCf4WIdmpydmdob1xtZV5tc19nYWp4aHttW22Dc3Rqb4B+eXdgdoSEeI+Fc4hxcHl/cWNwaFtudmRwc4d7eGFygHBnaXhzcWt3dnR1YoN7fnd1cGNjY218fWtrVWliZ1RLbGhQR1JsRWF4ZmJNVHJdSkxUWWRrd3plX21waWRcVl9Vb29XSlNoWGZeWE1VbFRLW3lfW19rXV1bYmVgemhsYW9vdW5vd3V6l313f4F5gH+Hhnp5eoN9gZOEcXR0fnl2dIWIkH2AfZBsc5WBe4KfhX+HfYB+hoKAint2hKyfgHqIh4RscoJ5doGAgnRuh299gHSKgGpwbWRkWF9aWlpVYmpnW1pfdYJpXm5sXGFWXFxrgWVydH1pal1sd3ZndHdybod8fn56dnNsemdpeGZdZHJneneSgWNjVGVvZ4KEd3ZmaGlgV1ZZaGSQp25+eICLjnpwcHxmeG55inp2jnGDfX5/hm5kdnNkaGhdbGJdb29bZ15sdGV6aV10gG9ya3F7fnV1YXSFinuHh4B/d3J1fnRhcGxZcHJicXGEe3VkcoBsYGx6b2poend0cGSEdHl6dXFkYWRtc35qbFRpXl5VTHNjUUdXYkdjdmZhS1RwWEpLV1hna3Z6ZGVtcGZjWlhdWHZmVEpcY1hoWFlJV2VRSGJ4Wl5gbFteXGJkXoBpal9vdHhub252g5d5coGAfX+Ii4Z+dXaGeIaMfXR1dYF5enqCjI59foSJanSWgXuKnX1+hXmAe358hohzcY+ujHx7hpB+ZnGIenR9fXZyb4Zte35tj3picG9hZV5lVllZV2Nma2BdXXOGaVlxblteV1pcbHtjcXd2bWNbbXN0aHV2cW2FeX+BeXdub3RlaHRlW2d0ZnZ2kXpfXVJlZmqCgXR9YWNpXFRYXmJjkKVoeXSDhpB4bG55Z3dse4N5dIhygHh7eH9oZXZtYGZhX2pgXXRrWWVdb25iemZbeHxrbm5wd3l0dGRyg5J/h4KIenZvcXxyYXdjWm5vYXBxgXtzZXGAZF5tdmljZnh6c2xtgXRzfHNxYV5lbW99ZWlUaFlaVU55YFJLWllIYnRkYUlUbVNJS1pXaWxye2NsbHNjYVlaW2F3XFNLY11YaVNXSFlgTkdpdVheYW1bW19iY12FaWhhbnh5bG9qdoGQeG2CfoCBkoiEgXZ1iXSLhnRxdnaBd3x9foyQgH6TfnB4loN9mZJ5gIB4eX5/c4iDc3Caont7gImVeWR1iHlzeXZrc3B/bHl8cJFyXnBvYGdibFRaWVdoY21mXFxyiWZTcm5bWVhYYGx2ZGp1ampfW210cW10dHRrhn1/gHx3b29sZWlxY1trcmR0do9zXFdUZGBxf35xglxhY11TWmBcY5OfZXJxhIOQdGtqeWxub3l5enGAd39yeXp6ZGZ1Z15iW2FoXF53aFdiXXBoYXhhW3t2ampyb3d0c3RpcIGUg4Z+hHZyanB8bWV2V1tqbWJwcoB6c2Vvfltgb3FiXmlvfGxrc31ycHhrcGBbZWtte2FnVGdVWFJRd1xTUFlSSGNzYmBHVmtRSE9aVWtra3xlbW9xYVtaWFlscFdST2ZXV2lTVEZaXE9JcnRYX2NtY1hhYGFejGpjZG15eGtvaXV5hntrg32AhZl8goR5fYhtj4Zxb3d6fHSCgn2Lj4OClnR4gpOGgZ+JdYF/gXR/gnCHgnVvopd0e4aLh3tmd4tvbnxwZnhxe2xzdnONa150bmFnZWtSXVtWaGJsbFtccYxkTm9uXVZYVWdpdGhjdGVlXVpudW5wdXV6a4h9gH2Id5BzY2VrbmFcbm1jc3iHa1pUVmJjd3x8cIVcY19jVFtgWWKWlWNucIOEinNqZ3luZXJ1cXpreXR0bnp+dV9mc2NbXldiZFlhdWZVX2BtY2FxXV1+b2hpc3FzcHV1a2yEk4GJe4VxcmZue29xblNaZWplcXOAdnNibHZVYnFrW15uZHxla3V8cnJyam1fWWNpanheZlRlVVZQVW5YUldUUEhlcl9hRlhqTkhXVFZtaGR8aWt3amFXXFVbdGRTUlZoUVlmVFNIWltQTnh2Wl5lbGlaYmBeXo9uYmZreXVubml2dn9+bYOAfoaXe3+HgYl+a5OIcmd0gHt1gIN+iY9/i5NyfYqRhYefhnt/hoxzgIZzfYJ1bqSMc4GNi3d4bnuNYGR8cWd5c3ltbXF2g2dkfGxjZmdoU19fVWdgbG9cXm6OaE1pbWBVVlNvZnNsZXhkZV1ZcXVtcnt4c22JfIF3nHt6bGJlbG1eYG5qZXB5fmdaVlhga3d7em+DXmJeZ1ZZYFdjnIhia3GBhnx3a2p2bFt1cGp5aXVybW57gHJYam5eWV1WYmRYZXFjVF5iaWJibVpgfmtma3N1bm13dmtohYx/iXqHbXFmb3tscWxiWF9oaG9zgHNzXmltU2VwZFVibmF5Ym91e3Vqb2xqX1hgZmh1XWVWYlZTT1lmU09dT09IZW9dY0daaU1JX0tYbWRfeGhufWRgVV5UXXRbVFJfZk5dYlRTSlxaUVp1dVxeZW1oWGJhW16OcWNnandxc21ndnN5g3OBg3uIjX58ioiOeW6QinRsc4Fzf3+IhYeShJWPen2Mj4iRm4SAfIyEcn+Bc3R3cW6Tk5OTk5OTk5OTkpKSkpKSkpKSkpKSk5OTkpKSkpKSkpKSkpKSkZGRkJCPj4+Pj4+Ojo6Pj46OjY2Njo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo2NjYyMjI2NjY2Njo6Ojo6OjY6OjY2Ojo6Oj4+Pjo2NjY2Oj4+Pj4+PjoKAfnp6fX5+fX1/fn59fn5+fn5+fn+Af4CAgIGAgIB/gIGBgYOHjI6Ojo6NjY2NjY2NjY2NjZKSkpOTkpKSkpKSkpKSkpGRkZGSkpKSkpKSkpKSkpKSkpKSkpGRkZCQkI+Pjo6Ojo6NjY6Ojo2NjY2Njo6Njo6OjY2NjY2Njo6Ojo6Ojo6NjYyMjY2MjIyNjY2Njo6Ojo6NjY2NjY2Njo6Ojo6OjY2NjY2Ojo6Ojo+Ogn99ent8fX59fX5+fn5+fn5+fn5+f4B/gICAgICAgH+BgYCBg4aMjY6NjY2NjY2NjIyMjIyMkpGRkZGRkZGSkpKSkpKSkZKSkpKSk5KSkpKRkZGRkZKSkpGRkZGQkJCQj4+Ojo6OjY2NjY2Njo6Ojo6NjY2NjY2NjY6Ojo2Ojo6Pj4+Pjo6NjIyMjIyMjIyNjY2NjY2NjY2NjY2NjY2Njo6Ojo2NjY2NjY2NjY6Ojo6Cf3x6fHx9fn19fn19fX59fn5+fn5+gH9/gICBgYGAf4CAgICDhouOjo2NjY2NjIyMjIyMjIySkZCQkJCQkJKSkpKSkZGSkpKSkpKSkpGRkZGRkZGRkJCQkJGRkZCQkJCPj46Pjo6Ojo6Ojo6Ojo6NjY2NjY2NjY2Njo6Ojo6Ojo6Ojo6Ojo2MjIyMjIyMjIyMjY2NjY2NjY2NjY2NjY2Njo6NjY2MjIyNjY2Njo6OjoN/fHp8e31+fH1+fXx9fn59fn5+fn5/f3+BgYGAgICAgYCAgIOGi42NjY2NjIyMjIyMjIyMjJTO2tjY2NjamoGEhISEiF0tMDAwMC1GoaGhoaGhoJqZmpqampqKg4SEhIOEd2VnZmZmaFxDREREREJLkpqZmZmZnFtBREREREU5LzAwMDAsSIWDg4ODg4OLjIyMjIyMjY2NjYyMjY2NjY2NjY2NjIyMjIyNjY2NjY2OhX19e3t6fX58fH59fX1+fX1+fn5+fn9/f4GBgYCAgICBgICAgoWKjI2MjIyMjIyMjIyMjIyMlNvp5+fn5+qcfoKCgoKGUxgdHR0dGTekpKSkpKSjnJycnJycnImBgoKBgYJyXV9fX19hUjQ1NTU1Mz+TnpycnJyfUjE1NTU1NyccHR0dHRg6g4GBgYGAgYqLi4yMjIyMjIyMjIyMjIyMjY2NjY2MjIyMjIyMjY2NjY2GfH16enp8fXt8fn19fX59fX5+fn5/f3+AgYCBgYGAgIGBgYGChYqNjYyMjIyMjIyMjIuLi4uSl5iYmJiZmZKPkJCQkJCMh4eHh4eHiZOTkpKSkpKRkZGRkZGRj46Ojo2NjYuJiYmJiYmIhYaFhYWFho2Ojo6Ojo6IhoaGhYWFhIODg4KCgoSKioqKioqKi4uLi4uLi4uLjIyLi4yMjIyMjI2NjIyMjIyMjIyMjY2Njoh8f3l7ent8e319fX18fX19fX5+fn9/f4CBgYGBgYGAgYCAgYKFioyMjIyMjIyMjIuLi4uLi5GQj5CQkIuOkZGJh46KkJKTkYuRjY2Ph4+RkZGRkJCQkJCPj4+Pj4+Ojo6Njo6Ojo2Njo2Njo6Ojo6NjIyMjY2NjY6Ojo6Ojo6Ojo6NjY2NjIuLi4uLiouLi4uLi4uLi4uLi4uLjIyMjIyMjIyMjIyMjIyMjIyNjY2NiX59eHh5fH18fX19fHx9fX59fn5+f3+AgICBgYGBgYCBgIGCgoSKjIyMjIyMjIyLi4uLi4qLkJCRkZGPhI6QkIaKj4WNkJCOhY2Hh4yGiZCQkJCQkJCQkI+Pj4+Ojo6NjY2NjYyMjIyMjIyMjIyMjIyMjIyMjI2NjIyMjIyMjIyMi4uLi4uLi4uLi4qKiouLi4uLi4uLi4uLi4uLi4yMjIyMjIyMjIyMjIyMjIyMjI2Lfnx3dnh7fXx7fX18fH19fn5+fn5/f4CAgIGBgYGBgIGAgIGChIqMjIyMjIuLi4uLioqKioqQkJCQkIqFjoiOhoaPiY2QkJCIjIaFjoaLj4+Pj4+Qj5CPj4+Ojo6OjY2MjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMi4uLi4uLi4uLi4uLi4qKioqKi4qKi4qKi4uKioqKi4uLi4uLjIyMjIyMjIyMjIyMjIyMjIt+e3d2eHt8fHx9fX19fX1+fn5/fn9/f3+AgIGAgYGAgYCBgYGEiYyMi4uLi4uLioqKioqKipCQkJCPhYOMjpCOiYyKjpCQkIiLh4eMiIiPj4+Pj4+Pj4+Pjo6OjY2NjYyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIuLi4uLi4uLi4qKioqKioqKioqKioqKioqLi4uKioqKiouLi4uLi4yMjIyMjIyMjIyMjIyMin18dnZ4fHx7fH19fX19fn5+fn5+fn9/f4CAgYCBgYGBgIGAgYSJi4yLi4uLi4qKiomJiYmJkJCQkJCMhoyJjoeFjYmOi4yQiIyGhoiFiY+Pjo+Pj4+Pjo6OjY2NjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyLi4uLi4qKioqKioqKioqKioqKioqKioqKi4uLioqKioqKioqLi4uLi4uLjIyMjIyMi4uMjIyKf353eHp7enp8fHx7fX1+fn5+fn9+fn9/gICAgICBgICAgYCBhIqMi4uLioqKioqJiYmJiYmPj4+Pj5CMjouPjIqPjI6MjY+MjoqKjIqOj46Ojo6Ojo6Ojo6NjYyMjIyLi4uLi4uLjIyMjIyMjIyMjIyMjIyMjIyMjIyLi4uLioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi4uLi4uLi4uLi4uLjIiAfXh5enl6e318e3t9fn5+fn5/f35+f39/gICBgICAgIGBgIGEiouLioqKioqJiYmJiYmIiI+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Ojo+Oj46Ojo6Ojo6Ojo2NjYyMjIyLi4uLi4uLi4uLjIyMjIyMjIyMjIyMjIyMjIyMjIuLi4uKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLi4uLioqKi4uLh4B8eHp6eXt8fHt8fH1+fn5+fn9/fn9/f39/gIB/gYGAgIB/gYSJi4qKioqJiYmJiYmJiIiIj4+Pj4+Pj4+Pj46Pj4+Oj4+Ojo6Ojo6Ojo6OjY2NjY2NjY2MjIyMjIuLi4uLi4uLi4uLi4uLi4uLjIyMjIyMjIyMjIyMi4uLi4qKioqKioqKioqKioqKioqKioqKioqKioqKiYmKioqKioqKioqKioqKioqKioqKi4uHgHt5eXh6fHx6e3t9fX5+fn5+f39+f39/f39/f3+BgYCAgH+BhIiLiomJiYmJiYmJiIiIiIiOjo6Ojo6Pj46MjI+Sj5COjo6Ojo6NjY2NjY2NjY2NjIyMjIyMjIuLi4uLioqKioqLi4uLi4uLi4uLi4uMjIyMjIyMjIyLi4uLi4qKioqKioqKioqKiomKiomJiYqKioqKioqJiYmJioqKioqKioqKioqKioqKioqKi4aBe3h5eHp8ent7fH19fn5+fn5/f35/f39+fn9/f4CAgYCAgIGEiIqJiYmJiYmJiIiIiIeHh46Ojo6Ojo6Ojo+MkJOQkI+Ojo6NjY2NjY2NjYyMjIyMjIyMjIuLi4uLi4qKioqKioqKi4uLi4uLi4uLi4uLi4uMjIyLi4uLi4uLioqKioqKioqKiYmJiYmJiYmJiYmKioqKiomJiYmJiYmJiYqKioqKiomJioqKioqKhYB6eHl5fHt6ent8fH1+fn1+fn9/fX9/f35/f39/gICBgICAgYSIiomJiYiIiIiIiIeHh4eHjY2Ojo6Ojo6Pj4+PjoyNkI2NjY2NjY2MjIyMjIyMjIyMi4uLi4uLioqKioqKioqKioqLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4qKioqKioqJiYmJiYmJiYmJiYmJiYmKioqJiYmJiYmJiYmJiYmKioqJiYmJiYmJioqFf3l6eXh7e3p7fHx7fn5+fX5+f39+f35/fn+Af3+AgICBgYCChIeKiYmIiIiIh4eHh4eHh4eNjY2Njo6Oi42Nj5WPiYyPjYyNjYyMjIyMjIyMjIuLi4uLi4uLi4qKioqKioqKioqKiouLi4uLi4uLi4uLi4uLi4uLi4uLi4uKioqJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYR+eXt5ent7ent9fHt+fn59fn1+f35/fn9+f3+AgICAf4CAgICEh4mIiIiHh4eHh4eHh4aGhoyNjY2NjY+MjImKj42IjJGPjY2NjIyMjIyMjIyLi4uLi4uKioqKioqKioqKioqKioqKiouLi4uLi4uLi4uLi4uLi4uLi4uKioqJiomJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJg355e3p8e3p7fX17fH9+fn5+fX5/fn9+f3+Af4CAgH+AgH9/f4OGiIiHh4eHh4aGhoaGhoaGjIyMjIyLiYyKiIeJhoyOjJCMjZGOjIyMi4uLi4uLi4uLi4qKioqKioqKioqKioqKioqKioqKiouLi4uLi4uLi4uLioqKioqKiomJiYmJiYmJiImJiYmJiYmJiYmJiYmJiYmJiYmIiImJiYmJiYmJiYmJiYiIiIiIiYmCf3h7e3t6enx9fHx9f39+fn19fn9/f39/f4F/gIB/gICAgICAg4aIh4eHhoaGhoaGhoaGhoWMjIyMi4yOjoyKioeEiIuKjIuNjo+Li4uLi4uLi4uLi4uLioqKiomJiYmKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiomJiYmJiYiIiIiIiIiIiImJiYmJiYmJiYmJiIiIiIiIiYmIiIiIiIiIiIiIiIiIiIJ/eHp7enp6e3x8fX1+f35+fX1+f39/fn+AgICAf3+Af4CAgYCDhYiHh4aGhoaGhoaFhYWFhYyMjI2NjJCSjI2Ii4mJi4uLi4mLjIqMi4uLi4uLioqLi4qKiomJiYmJiYmJiYqKioqKioqKioqKioqKioqKioqKioqKiYqJioqJiYmJiYmIiIiIiIiIiIiIiImJiYmJiYmJiYmIiIiIiIiIiIiIiIiIiIiIiIiIiIiHgXx4e3x5enp8fHx9fX9/fn59fX9/f39+fn+Af4B/f3+Af4CAgIKEh4eGhoaGhYWFhYWFhYWFjIyNkY+PjZGJjIaJjIuIiImMiYeNjo+NioqKioqKioqKiomJiYmJiYmJiYmJioqKioqKioqKioqKioqJioqKioqKiYmJiYmJiYmJiYmJiYiIiIiIiIiIiIiIiImJiYmJiYmJiIiIiIiIiIiIiIiIiIiHh4eHh4eHh4WAenl9e3t7enx8fHx9f39+fn19f39/f35+f4B/gH9/f4B/gH+AgoSHhoaGhYWFhYWFhYWFhISLi46PjoyLj4iHiYmMjYWFjo2KiYyNi46KioqKiomJiYmJiYmJiYmJiYmJiYmJiYmKioqKioqKiomJiYmJiYmJiYmJiYmJiYmJiYmJiYmIiIiIiIiIiIiHiIiIiIiIiIiIiIiIiIiIiIiHh4eHh4eHh4eHhoaHh4eHhH55eX16enp7fXt8fX5+f35+fX5/f39/fX5/f3+Af39/f39/f4CChIaFhoWFhYWFhYWFhISEhIuLjI6MjI2Lh4mIiomGgoiNjoiKi5GTj4uJiYmJiYmJiYmJiYmIiYmJiYmJiYmJiYmKioqKiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiIiIiIiIiIeHh4eHh4eIiIiIiIiIiIiIh4eHh4eHhoaGh4aGhoaGhoaGh4eDfXp5e3p5enx8e31+fn5/fn59fn9/fn9+fn+AgICAf35/f39/gIKEhoWFhYWFhYWEhISEhISEioqOjYmIiIqKh4iHiomIioiIh4qGi5GPiomJiYmJiYiIiIiIiIiIiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmIiIiIiIiIiIiHh4iIh4eHh4eHh4eHh4eHh4eHh4eHh4eHhoaGhoaGhoaGhoaGhoaGh4J8eXl6eXp7e3t7fX5+fn5+fn59gH9/f39/f4CAgH9/fn9/gICAgoSGhYWFhISEhISEhISEhISKi5CPiYmJi4qHh4WHiYuKiYSLjYmOjYmJiYmJiIiIiIiIiIiIiIiIiYmJiYmJiYmJiYmJiYmJiYmJiIiIiImJiYmJiYiIiIiIiIiIiIiIiIeHh4eHh4eHh4eHh4eHh4eHh4eHh4eGhoaGhoaGhoaGhoaGhoaGhoaGgXt4enp4e3x7e3x+fn9+fn5+fX1/f39/f3+Af4B/f39/f3+Af4CChIaFhYSEhISEhISEhISEhI+Qj4+IiYuIhoeIiYuLjIuJioqNio6Oj4iJiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIh4eHh4eHh4eHh4eHh4eHh4aGhoaGhoaGhoaGhoaGhoaGhYWFhYWFhoaAe3h5eXh4enp8fX1+f35+fn59fn9/f39/gIB/gICAf39/gIB/gYKDhoiGiIaDhISEhIODg4ODkpKOioeKi4qLh4uNiYqJi4iHiouIio+SioiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIh4eHh4eHh4eHh4eHh4eGhoaGhoaGhoaGhoaGhoaGhoaGhoaFhYWFhYWGhn96eXh4eHl5eXx9fn5/fn5/fn1+f35/f3+Af39/f4CAgH+AgH+BgoOHjo+PjoiHhIWFhoaFhYWSkI6KiYmIiImKioiIh4aKjIiHiYmOkJGNh4iIiIiIiIiIiIiIiIiIiIiIh4iIiIiIiIiIiIiIiIiIiIiIiIiIh4eHh4eHh4eHh4eHh4eHh4eHh4aGh4eHh4aGhoaGhoaGhoaGhoaGhoaGhoaGhoWFhYWFhYWFhYWGf3l4d3d3eXp5e3x9fn9+f35+fn5+f35+fn+Af4CAgICAf3+Af4GBg4eOjo6Ojo6Mjo2OjY2MjZCQjomHhoiJiYeIiouIiYyJiYaKjY6PkYuIiIiIiIeHh4eIiIiIiIiHh4eHh4iIiIiIiIiIiIiIiIiIiIeHh4eHh4eHh4eHh4eHh4eHh4eHh4aGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaFhYWFhYWFhYWFhYZ+eXd5d3d6eXl8e31/fn5/fn5+fn5+fn9+f4B/fn+Af39/f39+gIGEiI6Ojo6Ojo6Ojo6Ojo2NkJGOi42JjIiIiYaHiYaIioiHi4yLjpCQiIeIiYmJiIeHh4iIiYmIh4eHh4iIiYiIiIiIh4iIiIiHh4eHh4eHh4eHh4eHh4eHh4aGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoWFhoaFhYaGhoWGhYSEhIWFhoaFhIWFhX55d3l2eHl4e3x7fn5+fn5+fn5+fn5+f39+f39+f39/f35/f3+AgYOGjY2Ojo6OjY6NjY6OjY2Qj42Ni46KhoiKhISLiYeDhYSDi4mLj42JjI6QkI+NjYyLjY6Pj42NjI2Nj4+Pjo6MjYyMjY2KiYiHiImHh4aHh4eHh4aGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoeHiYqKiIeJi4yNjo2LiImLi42OjYyJiImMgHl3d3Z6eXh7e3t+fn5+fn5+fn5+fn5/f39+fn5/f4B/f4B/f4CBg4aMjY2NjY2NjY2Qj4+Pj46NjI6KiYuMjIeFiY2Lh4aIh4aHh4uNjo6Pj4+Pjo+Pj4+Pj4+Pj4+Pj4+Ojo+Pj4+Pj4+Pj4+Oj46Oj46Mi4uJh4eHh4aIhoaGhoaGhoaGhoeLiYeHiIiLjY2Mi4yLjY2Ojo+Ojo6Pj46Ojo6Ojo6Ojo6Njo6NjY2AeHZ4eHp4enx6fH5+fn5+fn5+fn5+f39/fn59fn9/f39/gH9/gIGDhoyMjIyMjY+QkpOTk5KSjYyMjIqHioyKh4eJiYWCiouIiYWJjpCNjo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6NjI2NjI2LiYaHh4eHiYqLjY6NjYyNjY6OjY2OjY2NjY2NjY2NjY2NjY2OjIyNj4+OjY2MjIyLi313dXd5enp7e3p+fn5+fn5+f35+fn5/f39+fn1+f39/gICAf3+AgYOFj5KRkJGSk5OTk5OTkpKLi4uLiomMiouLiYuKhoeOjYiIjI6OjIuMjIyNj46Njo6Ojo2NjY2MjY2NjIyMjIyMjIyMjY2NjYyMjI2NjYyMjI2NjIyNjIyMi4yMi4yMjI2MjIyMjIyMjIyMjIyLi4uLi4yNjY6Sk5OSkpSRkJOVlZSTk5COjo6Oe3Z2d3h6ent7e31+fn5+fn5/fn5+fn5/f35+fn9/f39/gIB/f4CBgoSNkpKTkpOSkpOTkZKSkoqJioyJi4qJjIuKioiHiYqKi4mKjY2Mj46Nj5KUlJOUlJOTkpGSkI+Ojo2NjY2Pko+OkZGOjIuKioqLi4qKi5CPjoyMjIqKioqKioqKiouKioqKi4yLi4uMjIyKiouLi46RkpOTk5SUk5STk5SUlJOTk5KSkpKSk5F6dXZ2eHt7e3p6fX5+fn5+fn5+fn5+fX5/fn5+f39/f3+Af39/gIGChIuRkZGRkZKSkpGRkpGRiYmIiIqMiYiJiYuJhoSJhoyKh4ySkpKTk5OUlZWWlZWUk5OUlJSUlJSUlJSVlZWVlZWUlJOTkY+QkZKQjoyRlZWVk5KSjo+QjYqKi4qKi42OjY6RkpCRkpKSkpGRkpKSk5OTk5OTk5OTk5OTkpOSkpKSkpKSkpKSj3h1d3l6e3t7ent9fX19fn5/f35+fX5+fn5+f39/fn9/f4B/f3+AgYKEi5GQkJCSkpKRkZGRkZGIiIiIi4uJg4eLi4yMiIeHjYyNkpSSkpOTlJWWlpaVlZSSkpOTk5SUlJWVlZaXlpaWlpWUk5SUlJSVlJSUk5OVlZWUk5KTk5OTkJGSkZGSk5OTk5KSkpOSkpKSkpKSkpKSkpKSk5OTk5SUk5OSkpOTkpKSkpGRkZGPdnJ3enp7e3t8fX59fX1+fn9+fn9+fn5+fn6Af39/f3+Af3+Af4CBgoSKkJCRkZGRkZCQkJCQkIeHh4eIiIiFi4+KjI6Njo+OkJWUk5OTk5SUlZWVlJSVk5KSk5KTlZWVlZaWlpaWlpaWlpSTk5OTk5OUlJOSk5SVlZSTkpKSkpOTk5OTk5OTk5KSkpKSkpKSkpGSkpGRkZGRkZKTlJSUlJSTkpGRkZGRkZGRkZGRkYx0c3d6ent7e3x9fX1+fX5+f35+fn5+fn5+fn9/f39/fn9/f39/f4GDhIqQkJGRkJCQj4+Pj4+Ph4iKi4yNjYuOj42Mjo6RkpGSk5OSkpKSk5SUlJOSkpOTk5KSkZKUiIyUk5WVlZWUlZWUk5OTk5KSk5OUk5KTlJSUk5KSkpKSk5OTkpKSkpKRkZKSkpKSkpKSkpKSkZKRkZGSkpOTlJSUk5OSkZGRkZGQkJCQkZCRinN0dnp8fHp7fXx9fn59f35/f35+fn9+f31+f39+fn59f39/gH+AgYKDipCQkZGQj5CPjo+Pjo+Oj4+Pj4+Pj4+PkI2OjpCRkpKSkpKRkpKTk5OTkpGSkpGQkpGSk5B3jJOSk5STk5OTlJOSk5OTk5OTk5OSk5OTkpKSkpKSkpKSkpGRkZGSkZCRkZGRkpKRkZGRkpGRkZGRkpKSkpKSkpKSkpKRkJCQkJCQkJCQkJGGc3V2e3x8e3x9fX1+fn1/f35/fn5/gH9+fX5/fX5/fn5/f3+Af3+BgYGKkI+PkI+Pj4+Pj4+Pj4+Oj46Oj4+Pj5CQiI2PkJGRkpKSkpOTk5OTkpKSk5KSkHeJkpGTgHWOkpGRkpKSkZKSkpKSkpKTk5KRkZKTkpGRkpKSkpKRkJCQkJGRkZGQkJGSkZGRkZGSkZGRkZGRkZGSkpKSkpKSkZCRkZCPj4+Pj4+Pj4+PkX9ydHh8fHx7fHx9fX5+fn9+fn5/f3+AgH99fn5+f39+f39/f4CAf4GBgYqPj4+Pjo6Ojo+Pj46Ojo6Ojo+PkI+Pj4+GjpCQkJCRkZGRkZGRkZGQkJCQkJCSeW6Nko50doyRkJCRkZCQkJGRkZGRkZGRkJCQkZGQkJGRkZGRkI+PkJCQkJGRkJCQkJCRkJCQkJCQkZCQkJCQkJCQkZCQkJCPj4+Pjo+Pj46Ojo+Pj4+PeHJ2eXx9fHp9fH19fn5+f35+f39/f4CAf39/fn5/f35/f39/gIB/gYGAio6Ojo6NjY2Ojo6Ojo6NjY2Oj4+Pj4+PjoiQkZCPj4+QkJCQkJCQkI+PkJCQj5F/Z3iSh3V3i5CPj4+PkI+PkJCQkJCQj4+Oj4+QkI+PkJCQkJCPjo+QkJCPj4+Pj4+PkJCQkI+PkI+Qj4+PkI+PkJCQkI+OkI+Pj46OjoyMjY2NjIqDiYhzc3Z4fX58eX18fX1+fn5/fX5/fn9/f39/f4B/f39/f4CAgH+AgH+BgYCJjY2Ojo6Ojo6OjY2OjoyNjY6Ojo6Ojo2NiJCRkI6Njo6Ojo6Ojo6Pjo6Ojo6Oj4JhaYZ6aHSKj46OjY6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Pj46Oj4+Pj4+Pj4+Pjo+PjY2MjYyNjoyLi4mJiYiFhYSDgoKEgnR5fXp4dXJrZWltb2xmZmdncHNzd3l9fnl6e3x9fX1+fn59fn9/fn9/f39/gIB/f3+AgIGAgIB/f4CBgImNjY2NjY2MjYyMjIyMi4uLjYyMjIyMjIyGj5GRjIyMjIyMjIyMjIyMjIyMjIyOd2BrYmdkbouNjY2MjIyNjY2NjYyMjI2MiomKi4uJh4KAh4iEgXt6gH57fXx8fXlzcnJycnV1cG1ramppZ2NkYV9bXF1eWFVXWFlTS0VJSkpLTE1PT0tgdHR3eX19eHp5e3x8fX5+fn1+f39+f35/f4CAgH+AgICBgYCAgICAgIGAf4OEhYSFiIuLjYyMjIuLi4yGiYqKioqKh4OOkJGNiouLi4uMiYmKioqKiouKi4dkb25banJsgYWDhIeJiYWCg397fHl6e3pzcHFxcW1samdsbWdlZmVmZGNlZGVkZWVlZWRkZGNhYV5dXFpYWFdUUFFSU1JTTU1KSUZESEpHR0hHR0xOSWdzdXh6fXp4d3l8fHx8fn5+fn9/fn9/f39+f4CAgIB/gICBgICAgICBgYFnXmBjYWNucX17ent/fXd8fHZ4ent4eHpvcXt4eXt8e3h3e394dXd0dHZ1dXZ3cGNwcGRrcnFkaGtsbm9tamlpaGhlZWRkZF9gYWJgYF5dWVhaWltdXV9gX2BfX19gYmFeXl5eWVldXF1bV1dWUlRSU1NOUUpISUZERUhMTEhGR0lLSklNbXJ0eHp7end3eXt6e3x+fn1+f39+f35/f35+gIGAf3+AgIGAgICAgICCgWdYW1pZXFtcY1xaXF5ga3FtcHBvbm5vbmtpbmxrbG9qaWtraWpraWZmZ2dnaGhkZWltc3BydWtiY2JhYmBgXVhbW1dYV1RWUVBUU1NNSkxLTExOTk9UWFhXVVVUUlBQTU1QT05LTE1QUU9MTEpHSUlHSEhJSEhIR0ZHSEpKSEhISUlISVZwc3V5ent5dnZ5enp7fH59fX5/f35/fn5+f3+AgX9+f4B/gICAgICAgIGBbFtYVlZWWVlaWVlYVVZoamxubmxra2poaGloZGVkYlxiZl9fYWNfXF9dYF1eWl1gYWNsbm9va1pZX1tYV1NOTUtLS0tMSUtNTktKS0tMSktQTEtLRkdHSUlGR0lISUZFSEdGRkVERUVEREVJSUlHSEdIRkZLTUtJSUlIR0hLTU1LTExMVXFzdnl6e3h2d3h3ent8fn1+fn9/f39+f3+AgIGAfn5/f4CAf4CAgIB/gYJoUlRVVlNVV1lZWVdXV1tbYWNfXlxbWFZWWVZSVFJRUVVUU1NUUE1KTU5QUk9OUF5pZmxua2djUVBTUFBOTk9NSk1MS0xKSktLRklJSkxJR0pISUlFR0dGRkVFSElKR0ZHRkZHR0hKR0dISEpMSkpLSUlISktLSkhKS0pISUtMTU9QUEtUdHN1eHp6eHZ2d3d6enx+fX5+fn5/f35+fn+AgYB/f3+AgYB/gICAgH+AgmlQUlRXVVRWWVdYWFpbVFRTUlBRU1FRUU9OTlBQUU9MTlBPTk5NTEtNTk5PTExVZG1mam1raWZcU09PUFFPTk5PTk9QTk1NS0lISEpJSUlJR0ZHR0dJSkhJSEhJSEhHSEdISElISUxLSklISkpJSkpIR0pMS0pJSUhKSktMTk1NTU9RTFVzcnN3enl3dnR2eHp7fX19fn5+fn9+fn5+gICBgICAf4GBgH+AgICAgICBbE9PTlRZVVVdW1lXV1hOTUpKSUZKT0xKSkdJSk1NS0pMTUpHSUlJSktLR0lPVWBobmhrbGtpamhkX1dPTk9NTk9MTk5OUFBPTE1MTk1MTEpJSEdJSElISElJS0xLS0pJS0pJSklJSUlJR0dKSUdJSUpKTk1OTEhJSklJSk1PT01MT1JOWXBwcnd4d3d0c3R3enx+fX5+fn5+fn5+fn9/gICAgICAgYCAf39/gICAgIFvS0pNTlFOTlVXVlZSU0lFQ0VFUkREQT5CP0RAQD5CREFAQURHRkVIRURSXWJmaGpubHNvamlqbGtpZVVKSklKSUlLSkxQTk1MTU1MTU1NTElIREZGR0ZGRklKSUlLSkhMSklKSkpJSEhKS0tIRkdJSklLTU5OSktPTUxLTU1PUE5QT1BgcG9yd3h2dHJzdXd6fX19fn5+fn9+fn1/gICAgICAf4CAgIB/f3+AgICAgXNQUE5OUE1KS1BSUE5RQ0RCQUZRRT1DPT9FSDk6Oz0/PTxBRkA+Ojs+Pj5LVlxpbWxueXNqamxmW1FKRERFRUZFR0dHR0pHSEpLR0NER0pHQ0RFQUFDR0hHSEdISktKSElMS0lISktLTU5MTUxMSkpMS0lLTU9PUFNRT1BQTk9QUlFNUGdwb3N2dXRycXR4eX19fX1+fn5+f4B+foCAgH9/gIB/f4CAgH+Af4B/gICCdlRVUVFQT0xNUFBOT09BQkFAQkE/Oz48Pj8/Ozg5ODs7OkA6Oz48Ozs7O0dKPUZZa253cGtpWUdEQkVFREdJSEM/QEBAQUFCQUE/Pjw9PkFAQD8+P0BFR0dHSUtMTk1OTUxNTUpLTVBVU05MTlFOTk1OTE1NTk9OTk1LS05OTk1OTkxUbnBwcnR0c3Fydnl5fX19fn1+fn5/gH5+gICAgICAgH9/gICAgH9/gH+BgIJ4UVFSVFJTUVNTUVFST0BAPT4/PD8+QEE/PT45Ozo7Ozk5Ojg4Ozw5Nzk7Oz49OjtGW25tYElBPkFAQ0ZEQ0NDPzs+PkBDQ0E/Pj9BPkBAQj9APD9CQEFDRUVFSktQT1BPTU1OTExMT1JRUFJOTExPTUtOT0xMTEtMS0tKS0tKTU1LS1xxcXF0c3VycXR4eHp9fn1+fn5+f39/fn5/gIGAgH+Af4CAgICAf4CAf4CAgXxSTU9RUFFSUlRSU1NOPDs8Ozs7P0BBQkA9PDk8PTw6Nzk6Ojk3OTo6Nzg6OTo7Ojc4VmQ/ODg8PD1AQUA9Ozs+PD09QEJDQT9BQkE9Pj09Oz0/Q0RCQD9BREJFR0pKSkpKTE1MTExNTExOVVNLTE1USVBKSU1KSUpLS0pJSEdKS0lKZnJxc3RzdXJydnl5e31+fn5+fX9+f39/f36AgICAf4CAgICAgIF/gIF/gYCBgFZMTlBQTlJRUFBRUU44PT88PDo9PkFAQT8+PkA/Pj48PT0/QD09PT9DOz09Pj09PTtFWTk7PD49Pj9AQUA+P0E/QEBBQEBAPT8/PTw6Oz09PD9AQUJCQUBCREZGRkdGR0dISUtMTExLTEtKS0lKSk1MTEpMS0lISUxMSklJSElLR01tcHF1dXR1c3V4eXl8fX5+fn5+fn5/gH9+gIB/f39/gH+AgYCAgYCBgICBgYCCYUtPT05OT1BPT1BQTzo8Pjw9Oz8+PkFBPz0/Q0NEQT89PkBBP0A7XW5APkRFPz9BPERbPT09Ozs9PkFBPz5AQD9BPz89PD48PTs7PD0+QUA/QD5AQ0NEQkRFSEVFR0hISEdGSUpJSUlJSUhKSkpKTEtKSklJSEhKSktMS0lLSkpIVnBwcXNzdHR1eXp7e3x+f35+fn5+f39/f39/f3+Af4CAgICAf4GBgICAgIGBgIJtTFBRTk9QTk5PUFBPPjw8PT4/P0A+QEA/Pz9CRkQ+PDw9QD04Ojttd0g4Ozo9PUE8SWA8PD08ODo7Pz49PD07PEA9PTw8Pjs9PD0+QUBCQUBAP0JEQ0RFRkZGQ0VHSElJSEhJS0tMTUpKSUpNTUpLSktJSEhISEpJSktKSk5MSUlfcHBycnJ0dXZ6e319fH5+fn5+fn5/f35/f36AgIB/gICAgICAgYGAgICAgIGAgnZNTk5NTk5MTE5QT0w+QTw8PT8+QkM/PkFBQUJBQFlSPD09SU1GRnZ3TTc4ODo7Pj5VZ0A7PDw6Ojs+Pz89PDg6Pjw9Pj89Oz4/QEJDQkJDQ0FCQkFCQkRCQkRCRENGSUdGRkhJSUtNSklKSktMSkpJSkVESUlGRkhISUpKTEpGRmdwb3FxdHZ2d3t8fH18fn59fX1+fn9/foB+fn+AgH+AgICAgICBgYCAgICAgICBek5JS0tMTExFSUxOTTw/PDw9PkBAQUE7QkNCQ0BDc3lJO11/g395fHdWPD0/PT0+RWl0Szo9Pj89PT5BQ0A8OTtBPz4+QT07P0JAQkNCQENDQUNBPT0+QD0/QUFBQENFRUBAQ0JDR0dFRENGRUZGR0VEQEFHR0ZDRkRHSEpHQz5IbG9wcHF0dXZ5fHx9fHx+fn1+fn5+fn5+f36Af3+AgICAgICAgIGAf4CAf4CBgIF+UUhLTU1NS0pLTE9RQD8+PkFBQEBBR0FCRENFQEhyeWtigoSDg4OAfV0+QENAQT1Jc3xZOj1BRUFCQkZIQz08QEREQUA/Pj1AQT4+Pj88PkBER0VAPkBBP0BDRkVDQkNDQEJEREJERUFCPkFCQkFCQEA9QUJDRENDQUNFR0E/PVZwcHFwcnV1d3p8e3t7fX9+fX19fX1+fX5+fn9/foB/f4CAgICAgYCAgIB/gIGAgX5SSEtNTUxLS05OUlVEQkBDQ0FBQkBCQ0BAQUFARm90fYKCgYN/fYR1TEFDRUA/Pll8gF0/Q0VJSklJTU1LRUNGR0dFR0VFRUREQ0E/QD4+QkZKSkdFRUdGRkpOTktKSUdHSEtMSUdHQ0REREVEQUJCQ0BDREVEREVERUZDQkFEZW9wcXF0dnV4e3x6fHx+f319fX19fn59f4B/f39/f39+gIGBf4CBgICAgH+AgICAfVJJSUpKSEpKTE9SU0dGRUdIREdIREA+PDs+QEVFaHN9gXx/hH55hXFCREVEQ1d1hoeHflhHSEpNTE5PT0xIR0hHSElJSEhHR0hIRUNFRUVFRkhKSkZFR0lKTU9PTU1LSktKTU5LSUhHSEhIR0ZFRkZGREZIR0VFSEhGSEdIRlFubnBxcnZ2eXt7e3p9fX5+fX19fX1+fn1/f39/fn5/gH+BgYGAgICAgICAf4GBgIB8UEhHSElGR0lKTU5OSkxJSUpLTE5KRkNBQkNGSkdge4B/d3+EhYOEimxBQVZ0h4mHh4eIg1dITE1MTU5MSUdHR0dER0dHR0ZIRkhFQ0RERkVEREhIQ0NDRklKS0xMTExMTElKS0pKSUlJSEpISEdISUhHR0hGRkZISklJSUlIXW9vcXJzdnd6e3t6e319fn59fX19fX5+fYB/f39+fn+BgIGAgYCAgICAgIB/gYCAgHxNR0ZIRkVGR0dKS0pMTUxLTU5NT0tJSEhKS0tMTE5bfIKCg4OFhoaIg1ZshIeGhoaHiIiHfFBLTEtIR0ZGREVDQ0BBQ0NDQ0ZGRUJAPj5AQUFAQkQ/Pj9ERkhERUdJSklKSEhIR0lJSkpJSEZKSkpKSUpJSkpKRklMTEtKS0tmb3BzcnR2eHl7e3t8fH1+fn19fX19fn59f39/f35/f4CAgICAgYCAgIGAgICAgICAfU9GRkdGR0hHRUZHR01NTUtMS0lHQ0NDRElLS0xMSlWBg4SEgoKFhoaEgoaFhISGhoaHh4aKdUlJRkI/P0A/Pz88PDw+Ozo8QUFAPjw5OTg8PD07Pjs5Oz9BQkBBQ0NCQEFCRERCQ0ZISUhISExNTEdJSk1NTk1KSktLSkxNU2xwcXRzc3d5e3t7fH19fn9+fX19fX1+fn5/foB/fn9/gICBgIGBgICAgYCAgIB/f39+UUZFRkdJSUdEQ0VGTk1MSklIRT85Oj5ARUhISkpJZYWEhIR/gYKDgoODhIWFhoiIiIiIiYyOZkJCPTg4Ojo5ODc4ODk2NDc5Ozw6ODU2Nzc4OTc4NzY4ODs7Oz1AOzk5OT08Pjs7PUFDRUhKTUxMR0lIT1JRUFBOTE1NT1Fdb3BydHN1eHp7e3x8fn5+f359fX59fX5+f39/gH9/f4CAgICAgYCAgICAgICAgIB/f39RR0ZHSEpIRkVGR0hMTEpJSUdDQjU2OjxDQENHSUlqhoSEgX6Bg4ODgoOEhomKjIyLiomKi4yJVDo4NjU2NzY2NjQ1NzczNTY4Ojg3NjU2NTY3Njc3ODo2Nzg4OTs3NTc4OTc5ODc2OjxAR0ZJRklGRUZPU1JTU1JPUFBSVGVwcXN0dHd5e3t7fH1+fn5/fn19fX19f39/f3+Afn+AgICAgICBgICAgICAgICAgH9/flJISEhJS0lHSUpJSkpLREVIRUJANTc4OD06PUVDQmaFg4GAgoODg4ODhYmLiomJioqKiouJiouBRzY3NjQ2ODg3NDU3ODU2NzY5OTc2Njc2NTo5Ojs6Ozg5ODk4Nzc3OTo5ODg3ODY4OTtBPT4+QkE/QUtMT1FQUU9PT1JXa3FydHR1d3p7e3t9fX5/fn9+fX19fX5/f4B+fn9/f4CAgH9/gICAgICAgH+AgICAf39+VEhHSUlMTUtKS0tMSUg/QEFAPDo1Nzk4OTc7Qjo9cYSAgYOEhISEhIaJioqIh4iIiIqKjIqJiYx6Pjk4ODs8PT45Ojo8OTo7OTo7Ojk5Ozo5PT09Pjs7PD06PTs5Ozs8Ozw8OTo8ODo6Ozo5OTk8Pzw9QUJESUpNS0lLTFdvcnN1c3Z4e3t8fHt9f39+f359fX19fn9/f35/f39/f3+Bf4CAgICAgICAf4CAgH+Af35URkVGSUxOTkxKSk1CPzo7PDs4OTk4OTo6Ojs/Pkh+hIKChIWFhYaIiYiHhoaGiImIiYuMi4mKioxsPDs+QkNFRUFBQEI+QEJAQD89PT5APz4/QD9APT0/Qj9BQT9BPz1AQEA+P0E9Pjw7Ojs5OTs/PTs8PT1BQUNBQkNBWHBxdHR0dnp7e3x9e31/fn9/fn19fX5+f35+fn9+f4B/f4CAgIB/gIGAf39/gICAf39/flJFQ0FHSk5PTElHSzo4Ojs5Ojo8PTo7Oz09P0BCUoKCgoSFhIWEhomJiIiGhoaHiImKi4uKioqLiotePkRHSUtKSUZHR0RGSEdFQ0BAQ0VDQkBCQ0I/QERIRUNFREVFQUZFRkRFRkRAQj88QD49P0A+Pz4/Pj8+Pjo7PTxgcXJ0dHV3enp7fX19fn5+f39+fX19fX5/fn5+fn5/gH9/gICAgICAgICAf4CAgIB/f4B+UERAPUNIT01HRkJEOTc6Pjo8Oz4/Pz89QUBDQ0ZXhIKDhIWFhoaHiYmIh4aGhoeJiYqLjI2MjIuKiohWSE1MTUtOSklLSUlKSklFQ0RGR0ZEQ0VGREJISUtIR0dGR0dFS0lLSUpLSkNGQ0NEQkFBQ0JEQ0NERENBPTs9QGhwc3R0dnd6eHt8fH19fn5/f359fX1+fn9+fn59fn+Af3+AgH9/f4CAgICAgICAgH+AgH9PQT49P0RMS0BCQkE5ODw+Ozw7PkA/QT5CQkdHSlmEgoOFhYaHiImJiIiHhoaGiIiIiYqMjYyMi4uKjH9QTlBOTE5LSkxKSUlISkZERkhISUVFSEZGRUxMTUlKR0dISUpOTU5MTE5LSEZHR0VFQ0ZGRkZERUhIRkNBP0BMbHB0dXZ4eXl5fHx8fX1+fn9+fn19fX1/f35+fn5+f39/f39/f3+AgICAgIB/gICAgICAf1FBPz4/RUdHPTxAQDg4PDs8PTo+QD4/QENGSUpRX4GDhYSFhoaHiIiIiIiIh4eIiIiJioyNjIyMjIuKjXJOUk9OTExMTEpIR0VJSURKSEdLSkhKR0dHS0xOTExISElKTVFOT05NT0tJR0lKSElESUhIRkZHR0hHQ0JBQ1VucHV3d3l7eHl6enx8fX5+f39+fn1+fX5+fn5/f36Af4B/f3+Af4CAgICAgICAgICAf39/VERBQUJHR0I/OD9AODo8OD0+Oz1BPj9BREhKTFVxg4SEhISFhoeIiIiIiIeGiIiIiImJjIyLjIyLi4uLi19SUlBNTk1LSkdFQkdKR0xKRktOS0tKSkxNTE9QTkhJS0xPUVFQUU9PSkhKSkxKS0ZHSEdFRklGRUVCQUJCXG9yd3h5enp5eXp6e3t+fn5/fn59fX19fn9+fn9+f4CAgIB/f39/gICAgICAgICAgH9/f39VRUNFRUdHRUQ7P0E7PTw5QD4+QEJHR0FHS0xQVnmFg4ODhISGiIiIiIiIh4eIiIiIiIqLi4uMjIyMi4uNfFhWUlJUUk9MS0pERUZLT05PV1VRUE9SU1JNU1RPTVNMUFNVVlJTUVBMSk1NTUtOR0dKRkZISkRERUVCRENjcHV5eXp6ent6e3p6fH59fX9+fX19fXx9fn5/gH9/gICAf39/f3+BgYCAf39/gIB/f39/f1VGRkdHR0dIRj5AQj0/PT1CP0JDR1ZORk5QUFRYe4aDhYWEhIeIiIiIiIiIiIiIiIiJiouKioyMjIyOi4uLaFdVa2FFUlFRUEk7O1JUUmB1XVVWVFZZWVJYWFJaZlBVV1pdUlRXUU9OUlBQUFFLTEtISEpIRUZJSUlISWlydnl4eXl6e3t8ent8fXx9gH59fX19fX1+f39/f3+AgIB/f39/f4CAgIB/f3+AgH9/f35+U0hKSUhHRkZFPz9BQUVBQ0dFREVMWFJNVFVWWFt8hoWHhoWGh4iIiIiIiIiIiIiIiIiIlJyMioqMfWGKi4uHbFtkVTpYWFhTUT9AVlVZW2NgVllicl1dVl1aVkVRWVpbWV9UWWdSVlZYVFRWVE9PTUpMSklJTE1LT01Tb3N2eHl4d3p5ent6e3x9e35/fn1+fX19fn1/f39+f4CAgH9/f3+AgICAgH9/gH+Af39+fn5WSkpJSEdFRERCQT9ITUlNUEtJS1BUU1NYWlpcXHiFhIWFhYWGh4eHiIiIiIiIiIiIiImcnaCPiY5nO36LiYqLem5wWFpcW1JTUlZWVFpadINZVX2QYFxYXV5XSVZdXVtbX1lIWVhZW11YWFlXUlFNUFFNTU9TUVFVUmFzc3Z3d3Z4eHh6e3p8fX19f39+fX59fX1+fn9/gH9/gIB/f3+Af3+AgICAf39/gIB/gHh5fVlOS0lJSEZCREBBOlBRUVdYUFBPUVNUVFhYWVpbboGCg4WEhYaHh4eHh4iIiIiIiIiIiJaanJeIioFuhomIh4OKfmZZWVxZVFVUV1JRV1ViloBRZXJYWldfaFBgZltbWFxnYUdPWmhnXFtcXV1XU05TUFBRVlZWVllabnJ0d3Z2dXh4eHt7fH19fX5/fn59fn18fn9/f3+Af39/gH+AgH9/gICBgYB/gH1yfX9/b3R8XVNQT01LSkVDP0A7UFBaWltSU1FPUlJSVVNWVFdfdXiAhYSEhYaGhoaHh4eHiIiIh4eIh4ORjomJiIaFiIiGfYB7XFBVWFRSVFJRUUxPTEtmeVtdVFlVVl1aTFRaVVNUXlpYV1dXemtYW1tcXlRRUVBJTk9XVlhbWmRwcnZ2dHR2eHl5e3t8fX19fn99fX1+fX1+f39/gIB/f3+Afn56eHd2c3V7f3+AgHRrfn5rcnleW1ZVU1JPS0ZDREFNXoNsVlJTTk9RT1FVUlNSUlRjZHaAgoKDhISEhIWFhISDhoaGhoeIhn6JiYiHhoOHh4d5bXFWSUtNTktNS0hKREZIRUM+VGRVf1JQUU5LUlRRTU9ZUk1OUVNVVU1RU1JQT01MSENJSFJUVVpcbHF1dnVzc3d6ent7e317fX19fn19fX59fn9/f39/f399fX5+f39/f4B+e3Zzd31+fmR1fWlxdF9kXV1bWVZQTElMSWFsknRQUVNOUVJRUltSU1JRUlZUYnN7fH+AgYKBgX99e3uAf4OChYaHgoaGhoGEgYaFhnVfXUtDP0NDQ0NCP0RQQkNAQz1DSUdWQEhOTEddaVBIRk9GREVGSUdIQ0RIR0hLR0RCQURATlFNUmRydHZ1c3R1enx6e3t7fH19fHt+fX19fn5/f3+AgIB/f3x8fX+Af39/f4CBgH12dHt/bWh8Z25xZmllZGJcWFNRUFVSc1dlW09PTkxRU1FVWVNVUVFUUk9WYGtscnZ7e3h5dHJuc3RzeXh+foOAg4OCgIKAgoGCa01HP0A6Oz5AQD8/PmpRS2FFRkhJRUI/R0xOR01RVUlCRT8+PD08PT0/PT9BQ0NAPzw9Qj5KTUdVbnR0dXN0dnh6fHp9e3x9fX19fH59fXx+fn9/f4CAf39/enl3eHd2dnh7foB+fXt4dnx1YXhnbHBqbGpqZmBbUVJaXFleSkpQUU5LTFFSUVRVVVdRUVdWUFhbYl1hZ21tbG9rZ2BucmptbHF1e3p9e3h6fHx4d3hlQ0BAQj06QkNBQURCXF1Pe05PTk5LTE1PT1FMS0xXTUhHQEI8OTc3NTk5PTs7Ozg5ODk/PEJIP1xzdHV2dXZ4enx8fH18fH19fn58fn19fX9/f39/fn9/f314dXZ6e3p3eXh1d3t8eXh1eXdjcWhpcG1ubW1oZl5PUF5cWklIUFFRT01QUU5RUlRWWFNSWVROWVpbV1ldXl5fZWBdXnF2a15gZ2t3b29sam9ubmxmYllIRkZIQkFHSUVFRkRNUlBhV1JXUVBTU1JVW09PUVdQTUlERj46OTY1ODc5Nzk6MzY1Nzk1PEI9ZXNzdnd3eXp7fX18fHt8fX5+fnt+fn19f39/fn5+fn9/e3d1eX18enh8fHx8dHd2d3Z1d2tuaWhxbm9vb2prYFVXXlpXTUxUVFNRUVVPTFJTVFdYVFRYUUxXWVpWWFhWWFldV1hYaHNrXVZhc2thYV9eZGFfXllUUU5OTkxJSEpLSUlGQ1FQU1tXVFROUVNZU1xlVU9TVFFOS0lIQz9BOTk5ODk3ODg1NzU3ODU5OUducnR4eHl7e31+fX18e318fn5+en1+fH1/f359fn5+f358dHR1e3hycW9vbnR4cXJzeHZ1cWZkZ3JucHBxbm1kXV9fWVdPUFhWVlNUVk9PVVZYWFlTVVRMS1RWVVVVV1BUVVdUVVJdbl5STllfW1ZZO0RWWFRbZkpMT1JST01NTk5NTEpGUVBVWVNUT0pOT1VTVFxWUlVTUk9NTElISEY/Pz06ODg3NjU5OTY3Njc1V3BwdHd5ent8fX59fnx8fXx+fX15fX18fn5+fXx8fX1+fXxydnF4eHJ2dXFxbnBwb3B1dnRuamRkanBwcXJwbmZlZGNcXlJUWlZXVVRXVFJYWFlZWVJVT0lHT1BPT01SSk9QT1BOTk9UTE1JUE9TVFUyPVhNSUBRPWNhUVNRUE5QUVBOTk1RTlRSUFJNSUxKT1JQUlJTVFFST0xMS0xMSENCQT06Ojg3NjtCNTU2Njpkb3J1eHh7fHx9fnx9fH19fX18e3h8ent9fX58e3l9fH18e3B1b3d1cHV0b3N2cHFxcHR1dmNqZ2VXaHRycnFuaWlocFZWVFVYVVdVUldWVVpZWFdVUVNGRUFGR0dIRkpESEpIR0VITEhLSUZMTVBNRy9FX1I+Mz8+am9hUlJRQEdVUVBRUFFOUU9QT0xKTExPUE5OUFFRTlBPSkxNTUtHRUVEQjs9PDw5PUc2Njc3RG1wdHZ6e3t8fX18enx8fX5+fXt5dnh3eXl8fXp6dn17fHp6b3Fud3JwdnFtcHNwb3Bzc3N0ZmdgaFpXa3JzcmxtbWtuYWVQU1RSU1RPV1ZWWVlWUVFRT0A9Oz0/QUJBQ0BCRERBQEdIR0hGRkhKTUxFR0NPUkM4RU5TXWZTUVNBR1VQT1FRUE1NTk1LTEtMTk9PUU1PT01ITExJS0tMS0dGRkVEPEFBPjtARTs8ODlTcHJ1eXt7e318fHt5fHp6fn58e3V0dXJ2dnp6eHpyfHt8eXltcW94cnF1bm5xcm9vb3Rzc3J1dGtnZ15lam1wa25xbWltY0xPT01RU0xUVVRYV1VNTEtJPDk4Nzs/QD48PUBAQj0+RUhHQ0ZGSUdKSkBGQUFARkhFSk9IUFJiXFFQUk5TT09QTExPTUtNTE1PTltXS01RT0dJSENISktMSkZGRkQ/QkM+PEJHP0I/QWRwdHd7enp7fHt6end7d3l+fnt7cXN0cHJzd3R4eHN6e3l2d2xxb3ZxdHRsb3Fybm5vc3ZydHNycmtsZW5zaG1ubWxtbGprSUxISE9RSlFTUVRTT0tIREQ9OTg3OT9CPjs/QkBAPkFESUVDR0dJRklFQkI/Pj1DQkFHSURNT2JlUU1OTldLTE1LTE1NTUxLTk5TZE5KTFJJSUlFQUhKTE1OSkdJRkJBQkA/RUZFSERLbm92eXl5e3t6fHp3dHh0eHx8eXpucXJtbm9ycnZyc3h8eHZ2bXBtc3B1dGxwcHJvb29ydnVyVlZucWdseYRqbXFybm5qaG9ISkNHTE1JTVBNUE9ISkQ/QT05OTk6P0I/PEBCQkFERUhLRkNISUdHSENDP0I/P0BBPkRFQ0tOUlRMSklNVEdJSUpMSktMSUpMTU9QUlBLR0NMR0NCSkpMTU9OSUpJR0NDQ0RJSk1MSVlybXd5eHp7e3l8dnJwdXJ0eHl2eGpxb2psbG50dG10dXtzdHhyb25xb3ZzbnBvcnBvcHN0eWpOYGdzanR8eWdvc3FpcWhkcUhLREdISEdKS0lKS0RHQj0+PTo6OjtBQj89QkJDQ0hHSkxKRElJRkdHQ0M7QUBCPkBAQkVDSU1QSEhLR0hLREhJS01ISkxISUpLSk1cUkhIRE5GQURLSk1NUE1LTUpLRkdHSk1OUU5MYm1pdnZ3e3h7en1xbWxza3B0dHR1aHBtamlra3RwbnR0eXByeXRvcnFvd3NvcXB0cnBydXR5a05WbXVscXt2aW5vaWt0Z2RvRktDRkVHRUZGR0VHQkNAPTw9OTo6OkFDQD5CQ0RFSUdLSkxGSUlHRkZEQjtCQ0M+QENDQ0VHTE5IS05IREhFSUxOTUhJTEdGR0lJTE5LSUhFTklCRk1MTk1PTU5OTUtJSElPUlFSTlJmZmZxb3N4dXt6fGxoam5la3Fsc3FmbWxoaWtsdG1wdXR3cW94dG90c3J2c3BxcnRzcnR1dXZ2WFZ1dWtvdHJrb3ZsaG1lX3BHSkRGRkVDQ0NFQERCPkA/Ojs7PTo9PkNBPkFDRUZKR0pIS0hHR0dGRUNAPUVFQj5CQ0NDRUdISUdNUEpGRkdLTk9LRkhKRkVERUlKSEtJRkhQS0NJTUxQTU9OT09OSkpITVJVVFJPV2RgYW1ncHJvcnl6Z2VoaGRpbGZxbGZsbWdpa2xzbHB2dXRwbnZyb3Nyc3V0cXNzdXRzdXZ2dnl2dXR3bGp1dW1ydnFsbmxlckxHRUVHQ0JBQkQ9QkE+QT05Oj0/Oj0+QEI+QEJER0pGSkZJSEZGR0VDQkFBRkZDQkNCREVFR0dIRkxRTElPSkpMTElHSEVHRkRDSUlIS0pHS1JNQk5PTVBPT09NTk9LS0tQVVdWVVRYX15caWFtaW5ocnNiZWZlZGloZm5pZm1taGtrbXJpcXZ1c3Ftdm5vcXJzd3Nyc3R1dnZ2dnd2d3Z2dHd1anN1bnV0c3FyamtzTUdIRkhCQkBERDxBQEBDPDg5PT45Pzw/QkBAQERGSEVIRkZIR0ZGRENFQ0RJRUNGRUJFR0VGR0dFSk1LSFFNSktISElFRkhJRkNJSklLTUtPU05EUVJQUVJOUE1OUE1MTVNXVldYVlhdWl1kYGhiamlna19lZWZjZ2dna2dna21rbWxwcmh0dHVyc252b3FwcnR4cXNzdXZ1gpF5dnZ0eHV1d3htb3VvcnN1cXFpb3lNSEdISEJCQkZFPD9CQkQ8Nzo+Pjo+OkBCPj8/QkVGREZEREhGREVDREVGR0pFRUpHQ0dIRkhHRUNGSkpHTUpMS0hKTEZJSUtIRUtLTE1OT1JUT0hTVVNQU09RTU5RTk1QV1pWWllWWl1aWGFgYGBeaGVjYGRmaGdqaWhqZmhubGxubXFwaXV1eHJycHVwcHBydXZwdXN1dnV7fn14dnR3dnZ2eHBsdXBtc3RucHJyeE5JSEdJQ0FDSEU8QEVCRD05Oj4+PTw8QUI8Pz5BQkZDRUNDSEVDRUVGR0dHSUZHS0hDSUhHSUdGREhLSUdLSE1LSktMSExLTUtKTkxPTk9SVVZPS1VXU1FTUVJMT1FQT1RZWllcWllbXl5eYGNeXGFja2JgZGdocoVoZ2pmam1ucG9uc3JqdHV4cnNzdHJucHF2cnF1cnV1c355jn11dXZ2dnZ4cmh1cWtydGxxdm90TUlLSEpGQkVHRTxAR0NEQDo8PkA/Pj9CQTxAPkFBRkNFRURJRUZFR0VISEZISElLSUVKSEhLSEZGTElISEpHTExMTUxJTUtNTU1PTFBQUVVWV09LVlZVU1NRUUxPU1JRVltbXV5bXF5fX2FgYWRdZGBlZmBlaGpjc3NmamhnbHBycW9zc25zd3dxdXZ0c21vcnVvcnNwdXJ2cnSBdnV1dXd2dXd0Z3Rya3Fya3J2bnZKS0xKTEdCRURFPEBGRERDOz8/QUBAQENBP0I/QUNIQ0ZFRkhGSUZGRElIR0lISk1ISEpKSUxKRkpLSElKSkdLS01NSkpNTE5OTlBMT1BSVFhWTU5UVlRSUlFQTE5UU1JXW15eX11dYF9gYWFfYWNlYmNoYmRpamd2i2xqaWdtb3NxcHFwcHJ5dnJ1dXRzbW1zc21xcm90dXRycHN3dHV1d3Z1dXRlcXNrcHFqcnZvd0tNTEtNR0RDQUQ8P0VFRUM9QUFDQkJDREFDREFBRUdDSEdISEdKR0RHSUdISkZJTEhJSk1LTUxHS0lIS0tOUUtSUU1TTUtOTk9QUE9UT1dYWFtOU1FXXFpSV1BOVFVUVFhaX2JiX2RhXmBiXmBlYWFjaW5nYmloaG54dmxoaW1vc3JwcXJycnZ0c3Vzc3Nua3NxbXByb3R2cnFxdXZ1c3d5d3V0dWNtdGtvcGpxdG93TE5MTExHRUFARD4+REVGQ0BDQUVEREZCQ0VHQ0NJRkNJSkpJSUtHREtKR0hKSUlLSEpKTkxOTElMSEpMS1pmSmRcS2xTSE9OX25Va3NbcXBid2NTUGJ2dWh1Y2F2YFhucWJkdmluemZbbHRgbGtUX3d2aWpnaWZnbG1qbW9qbW5zcnBycnFyc3Jzc3J0cm5sdG9ucHFxdXVxcXN0dnZ1dXl3dXR0YGt0a3Bwa3FycXlMTkpKSkZDP0BCPz1ERUZEQ0RDRUVERkJGRkdERUtFRUpNTUtMTEdHTUlHSktIS0tJS0tOTE1NTExJTE1MW3NiZHBebG1VTU5mc11mZXFsbnRncGlfYVlubmJwcGJrampnb3F0ZXRub1xvdWdwTUpyeXZrYmBrZWVteGxrdm1ucHNycHJxcHFycXJycnRybW1zbm5vcHJ1dHFzc3R1dXV0d3h2dXRibXVrcHBscnJxektMSUhHRURAQkJAPkNGR0JGQ0VFRkVEQ0hIR0RFS0hHTE1OTE1NRkpOSEpLSklMSkpKS0xNTk5NTUpNTU1bcm9vbnBwbGtNUFFsV05pYnRycGFtbnVcWWxRXG1tWnFta29teHh0c2lwXF9ya3FqVXV5eHBjXmtmYmdwcGpqb3BwcnNwcXBxcXJycXFycnRsbXJtbm5vcnV0cXRydHV1dHV1enZ1dGVudWtwb2xzcnJ5SUtHSEVFRUJCQj5AQEZHQkdESUVFRUJGSUhIRUdLSkdNTU5MTU5HTE5JTEtJSk1JSklKS09QT05NS05NTFxoZHVdbHFXbE5QUW1VWmtea2x2YWxkc1NlY05tWWxcdHBraWx4and1aHBdXnJraFdiY3d8b2NgZ2dhZGl0eWtubnFzc3BxcHFwcnFwcHBydWttcW1tbW9xc3Rxc3J0dnZzd3Z6dnV0aG91bHNvbXNydHZITUdJREVEQ0FCPUJBQkZESEdMSEVDQ0hLSEhGSkxMRk5MTFNSTEdMTEhOSkhITkhKSklITk9NTkxKTk1KWnNwcG9xcW1sT1FSbllxa2dvb3Fxb210XW5YYXRfbm9wb3Fyb251c3R0altddGN3eHJqbnpoYWFjZmJiam10dXBzdXZzcXBwcW9ydHt/fn13bGtxbmxtbnByc3F0dHN1dXR4eHl4dHVrb3VtdG9udHN2c0hLSElCRUVFQUA+RERCR0NISU1JRkNGSkxJR0ZLTUxGT0pLV1JLR0tKSk5JSEpMSUtKSUhKTU1NTUlLS0tTa2JbaV5faWNyclpfWWpvX2VlVWtfY1thYVFgbGhdalxuaWlkW3BmZHBdWlxrW21xY3BzbGRnY2RnYGBrbXBwb3R5cnVxb3BxbnmFiIeHhoWAdnNua21tb25xcnR0cnR1dXZ5eHhzdW5xdW53cXJ2dHdyR0dGSURFREZBQEJGRURHQkhKTEhGREdLTElFRkpPTElQSUxbUUpFSEhLTUlISkpKS0lISUdLS0tMR0hLS0xMTExKS01OVFtcVFBUTFBPTk9PVlFPT1FOT1FKSU5QUWRxaVRZV1xbXFVZWl1YXVxcY2ZhYWViY2ZfX2ZrbWhtdHlydHJvcHB0hoeGhoaFhYaHg3pwbW1sa3FzdHRydHZ0dXl4eHV2cXJ1b3ZydHN1dXNHQ0VHRkZBRUNAQ0hERkdDSUtMSEZER0tMSERHSFBLTE9LTFdMSUVFSElKSElLSExKSEZHR0lHSElFRkxJSktOTElQXFdeUFxbYF5NWFlTXFxiXk1ZWk1YYVJKWWFaUl9kXGFYW2RkVlZYXFlaWFxWWVxdYl5kYWFfZWhrZ210dHFxdHBxcoGGhoaFhoWFhYaGhoR9cmtpb3Jzc3N0d3l5eHl4d3h0cXhyeHNxcnVydE9CQ0VMTUJEREJFSUVHR0ZLSktIRUVKSktGRUhIUEpNTUpNU0hHRUFIRkpJS0xJTEpIRkVJRkRGR0VFSkhDSk1LTFVfWWBYYGFbYFRYWVReXlpfUllcUF5cWU5eXF5TWl5jXlpdYGNgWV9iW2BeW1RYV1leXWNiY2FjZmhla3Jwb3Bwbm93hoaFhYaCe4CFhYaGhYaFf3VxcHJyc3Z5eXp5eXh4eHdyeXZ4cnF4dnR2YVNKSk1JREJCQ0dIRUhHSEtJSUlERktLS0ZGSUpOS05MSExOR0hGPkdHTElLS0pMS0lHRUlEQ0REQkZKREBKTEpPW2NZX15hX1JUUldfYFxdWV5RWVxNVl9XS1FZW1BaX2FhXV5jYWBiYmJjY2VaUVlWVVxZXWNgX19jZGJob21ubGxsbHWFf4SDeXV8hIWFhYaGhYWGhoN9d3JydHd5eXl5f359eXV5dnZybnp3dnhYUUtGQ0dFQ0VISUZHSEhGRkpHSEZIS0lMRERLSk5NTExISkpISkc/R0ZOSktLTUtLS0lHR0NEQERBSElCP0lKSFBdYVpbZF1fVFFSWF1cXFxfWktXXExSXFlJTV5RT1xfYWNjY2NiXGRjYmRjZlhRVVRSW1daYF9eXmFhX2Rsa21qamxudn51gXp8hIWFhYWFhYaGhYaFhoaGgnpyc3V1e4WHh4eGhYSBfnhwend2eFxSTUNASUZDRktKRkZGSEdGSUdGRklMSk5GREtKTE5KTElLSkhJRkJISVFNS0tPTUtLSUhHRUQ/RUNISEFBR0ZFVF1ZXlhfWV9bXVVYWFBdXVFLSlZeWF5bXVVZYFJRX19iYmBgYmJgY2JhZGRiWE9RUVFbUltdXV1dXl9fZGhnbGpubnB7e3x+e4CCg4SFhYWFhYWEhIWDhISHh4FzcneFh4eHh4eHh4eHh4WDgHx4XFNLQ0FHRkRHTVJIQ1FKRkhISEVGS0pNUEVGSUpLTkxMSUxMSUlHREhLUU9NTVBMTUtLSElDREFFREhHQkFHRURXVUVcVF5TVl9YTlRVTlpaTUpLVGBhW19YXl5hXU5ZYlxgYF9iY2JdYWJXX19UUE5PUFhSXVtbXFxeYGJmZmVsZm9vd3x7gHt9f4CEhISEhIWFhYODhYKDgoWFhnpvgYaGhoeHiIeGhoaFhYSFg35JTkZERUZHRElSYlBDVl5JR0dIREZNSlBQRUlJS0tOTEtLTEtKSkdFSk1RUU5PUE1OTE5IS0FEQUNERkRDQUVGQk1IQktMUE9OTEZNRkdJSkhHTEtNT1BJTE9QT1NPTFFTUlVaWVdZWFhkV09TVFBQTk1PVVRbWFhaXVxgYWRlY2dja2xwc3J6eX97en+EhISEhISEhIKEgH57gYOBfXuFhIaGh4eHhYWFhISEgoGAfUtJRUVHRkdES01dTEdHWExHSEpIR01MUVFJTEtMS05NVU5PS0tMR0dLUFNTTlBPTk9OT0hLRmBFRF9MRGZjRU1bSV5bcm1PTVVtWUxDUGBVa1dnSl1YVV5ETVFVTExTVlFSVFhXVFhVVFxVUGZaaGhkWFNrU1ZWVFtcW2BgYWFhYmBmaGZua2hyenx9foGEhISEg4ODgX18enJ7gXp7f4KAg4SEhYWBhIWBg4N/fnp7TEhFR0ZIRUVLT1NJSkZgU0hKT0pJT01SUUtNTExPUlVST09KTE5HSE1RW1lPUFBOT1BPSUpRf1FJfFlZcXNYUG1IcW5vYVZQcXFzUENrc21xc3BTb19bblhdVlxYVWtoVV1WY1pgWVtgVlZYf2p0dXVfX3ZfWGFbXGZbX2FhYWFeYGJnbXBsYHB3dHiBgYKDg4J/fX6Adnh6bHZ+dHh+gHx+gIGChHyAg3p/gX9+d3dOSUVITU5CRExMRklLRVFWTEtPSUtSWFdRTk9PTVFUTk9RUEtLTkdNUFNbWlRRUk9QUFBKSFp4XVR4ZWhaUlRRdmd0bHBibmZqUXJPTXdtanJwc3JxcnBvb4BdZXp1eHFxenF+c31rdX1iUmh8ZXNzb3Nye3xvfXlvf3JfYGBiYVpgYGdrbmtibGZnbXd+gYCDfnt4d4B0dnppcn5udHx+d3h7foCDeHyAdXx/fHxzc05LRmBdR0FFTU1ISkpHSlBPTU1KTlZeWVVMUVNOWFpNU1NSTktPSVFSVFlXV1FUUFBQUUtIZ3hsY3hybVtLTVV5cHVtdWJudlBkZUpmdnFtd2+AamZ4eGlXclFoem1panp6fmx4en9vaG9ZdnZqdXVwgWByZ3xpbHh8b15fX2JhW15iZGdpaWRnYmNkbGxwcHN0c3NzeXFyeGJsdWdyeXtzc3V5foFzdXpufH15eHJuTktTdE5DQ0ZQUEhKS0pLUE9PT01QWmBaWEtUV1BhXlJWUVlSTE9JU1RVWFdXUFVQT05SSktyb3V1cXVxZGliV25McXBeRmh5V3ZUTGl5fXhgeXtzbmFdbW9jUmhxdW5teXB3bHZ0dHFsbV10fnprbXl8a3RsfGtwdnV4Xl9fYl5dX2RkaWdoZmVeYWJpaWlqa25va3FubWpwYWNmZG93eG9tcHN5fm5xcGp7enRzb21MTFtWSEdFR1JQSUxNSktQUVBQUFFXXFhVTVVZVWZYUlJZXlNMTklUVFZXWVdPU05OTlFIUm1IaXdLYGR2dlZYbE9ubHtzYWpnf3ZVTFdraH1sbWx4X1twenteYHpzY3JveHFoZHxpcntdVUxsYHZ1a2l1e3ttfnhrfHBdXl5iW19iZGRnZWVlYlpjY2lra3JzcndnbGloZGdgYWthZ3NybGdtbXJ8a21oa3t0bW1rbU9ISktISUhIUlBMTk9MS1JSUk9TUldSVlRQV1tWVlRUVGFgUE5NS1RTU1FVVk5OTE1PUEpIUU5QVUxLS1NUU1JUUFZVUVFOUVFYWVJOUFVUWFhYW1pVUlNXW1dYV1pPU1VXWFhSXVlXXVZUUFlSV1dXV1hfW2dyXltbWVxdX2NaX2NjZGZkY2NiWmNjZmZlbW5tdWVlZ2NhZl9dZ2BkbGhmZ2tocHpoZ2drdWpoZ2lsUUlLS0xNS0pTUU1RUE9MVlVUUFRVWFVZVVFaXVZVVFdVWVhQT0xNVlRQTlVTTk9NTFFQS0pSUUtRTUtLT1JVUlFRU1NJSExOT1FSUVFRVFZSWFdcV1NTUFFVVVZTWlFPU1JYVlRZVlRZVVRSVVRUVVdYV11aXmFdXFpaXFxgY1tdYmNkZmRkZGFZYGFjYWJoaGluY2FkXl9jXVpkXGJtYV5mZWZtc2RpaGtrZWRjZmhQSktMT09MTVNQTlNRUU1YV1VUVVdXV1pVU1xgVldWWVVYU1FQS09XU1BOVVBOUU5LU1BNT1VTTlJOTU5RVFBUUVNUVU5LTU9RVFRSUlFWV1RZWltZU1VSVFdXV1lbVE9UVVhVVVpVV1lVUlJYVlVXW1laX11VWF5cXl1cXWFhXltiYmNnZmRkYlhfYWJeYGhlZmRhXl9dXV5aWl9aX2dgXl1dYmhrYWdmaGZkYGJjYVBLTUxQUUxPVE9PU1FPUVpZWFdYWlpYWVZcamRWWFlaV1ZTVE9KTlZUUE9UUFBQTk1RUVBSWFRRUU9NT1NWTldSVFVVT05NUVNVVVRUUlRXVlpdXFpWV1FSV1hWW1tXUVRWVlZWWVRYWFVSUlhWVlpdWV1fXlZeXV5gXFxgX19fWmJiZGhnZGRiWWJgYV5eZmNjYGJdXFxcXFlaW1hbYVteXVxfYl9fYmRlYmRfX2BcUE1OTlJRTVJST1NUUVBVXFpaV1tbXFlaW2RxbWhkXltZVlVXUUxNVlNNTlJPUVJPTFBTUlVbVVNQUExQV1dSV1NTU1hNT1BSVFhWVVVTVVlYW15dW1tWUk9VVlZbW1dSVFdWV1hWVFhbVFNSWldXXF5aXl9gVWFcYWFeYGJfXWBdY2BjZ2hkZmBaY2BhX19lZF9gY1taXFtcWVpYWVdcWVxbYF5fW15eYWBeYlxZYFpRTk9OVlFQVFJPVVRTUFdcXVxYXlxfV1xeanF3eYBiXFtWVlhRTU9WU05RUVBSVFJLUVRUWVtXVU9STlNYV1RTVVJSWk9QU1NWW1ZWV1RWWlhdXltbXlZTTlRVVlxcVlJUVlZYWVNUWVxVU1NdWFpdXlxgYGBWYltjYl5hY19cYmFiX2NmaWRmXltkYGFgYWNkX2JfWVpeW1xbWVhZV1daWlphXF1bXVxcWl1gV1tbWlBPT09ZUFVVUlFXUlRQW15fXltgXGBVXF1panJ9c2xnXFVYV1BPUlpTUlFTUlRVVEtRV1ZbWlpTT1NSVlZWVE9XUlNaUlRUVFhdV1hYU1hcWF5dWVpdVFVOVldXXltYUlVVWVlZVVdZXFVTVl5ZXV1gXWJiXllfW2ViX2RkXl5jY2FeZWZpZGZeXmRhYGFhYmRgYl5YWl9bXFtYWFhYV1taXGBcW1tcW1haW15WXlldUE9PUlpQWlRVVlZUVFReXmBfXmJcYFVdXmJreXRsfWxaVVlVUVBTXFRVVFVUVllXTFJaV11bXVJPVVNYV1ZUUFhSU1dTVlVVW11YW1lVWl5YX15ZXFlSV1JZWFlfWlpUVVZaWVpXWFpcVlRaXlxeYGFfZGNcXl1dZWFhZmReXmRjYFxnZGhlZGJfZGFfYWBiYl9gXldYXlpcXFpZWVdWXVpdXlpZW1xbV1lcXVZYV11TT1BXWVFdVVZZV1dVWF9fYWFgY11gVF1fYmVldYF6aFhZWVNWU1ZcWFdXVlZXXVhPVV1aXl1dVFJXU1dWVVNUWFJTVlRYWFhdXlhdW1ZdX1hfX1hdVlFZVFlaWmFZXFZXWFtaW1lZWltYVl1fX15jYmFkZFxiXGBmYWRmZF9gZGJiW2ZjaGVjZmFmX19hYWFhYF9eVlVdWVtcW1lbWVldW1tbWFhZW1laWl1fXVRZXVVOVFpWU1xUVldZVlZcYGFiY2FjX19WW2BkYV96dW9oWVxaVVhUV1taWVxaWFlgV1BWXlxgYVxUVFhQVVdWVFZXUlNVV1paXF9eWl9cVl9fWl1eWV5WU1lXWVpdYlpeVldbXFtcW1taW1laX19gYGRiY2RlYmRaYmZjZ2ZlXmFiYGNeYmNpZGNnX2deYmJjYWFgXl9YVFtaWltbWFtYWFxbWltXV1lYV1xbXGBdVl1dU1BWWlZWWlVYVVhXWF1fYmFkYWRgXllZYWRiYGxmaF5cXVtWV1hZXFxcX1tZW2JWVFheXWFjXFJWWVBXVldXV1ZUVlRYXFxeYGBdYFxXYV5bXlxbXlhWWFhbW19gXF9YWV1cXV5fXFtdWFtgYV5gZGNkZWVmYlljZWVpZ2ReY2FgZWNdZWlkZWlfZl5jYmNhYWBfX1tYWVtZWlpYWVhXW1taW1dYWlRZXVxaYFxVXmJOU1dZVldaWFtcWFdZXmBiYWRhZGFdXllhY2JfYWBgXlxcXFdXW1tdXV9fXFpdY1haWF1gY2RfUlhZUFdXWFlZV1ZXVl1dXmBhYF9iXllhXV1eWV1eWVhWV1tcYF5dX1paXl1eXmFcW1taXF9iXmJkY2VmZWZiWmRmZ2pnY19jX2FmZVppaWNmaWNlXmJiY2FgYF9dXVpXW1lZWFhaWFdaW1pZV1hWVVtdXV1gYGJieExYV1xZV1xbXF1aV1xdX2BiZGJiYV1gWGJjYmFjYWJdW1xbWFdbXF9dYF9dW2BkXFxYWmJlY2BSXFpPWFhaW1taV1pZYF1gYmJgYWNfXGJdX11bXl5ZWVVYXV5fYF9fXFteXmBiY1xcV1xeYGJiY2VkZmRlZmRcZWZoamdjYWJcZGdgXGlpYmhpZmRgYmFjYV9gX11dW1lcWVhXWFlYV1xbWldXWE9YWl1hY2Zmcmt/SllXXVpaX1xbXlxYXVteX2FjYmFhXWJbYmRiYGJiYlxbW1pXWGlxYFxgX11cYWNfXllZY2VkYVNfWlJZWFxdXVtaW1tjYGJiY2BiZGFgY15gXF1eX1pYVltfXl1hYV9eW2BhYmViX11UXGBgY2RkZmVnZWZmZV5lZmhpZ2RkYFtlZ15haGhiaGhmY2BiYGNiX19fXV1cWltZWFhYVlpWXFpaVlZVTVhXXGdpa2h1eIF2dnZ2dnZ2dnZ2dnd3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d4eHh4eXl5enp6enp6e3p6ent7e3t7e3t7e3t7e3t7e3x7e3t7e3t7e3t7fHx8fHx8fHx8fHx8fHt7e3t8fHx8fHx8fHx8e3t7fHx8fHx7e3t7e3t7fYmIhoqHhYKBgoOCg4OCgoKCgoKCgoKCgoGAgYCBgICAgYCBgYGAfnx8fHx8fHx8fHx8fHx8fHZ2dnZ2dnZ2dnZ3dnd3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3h4eHh5eXl6enp6enp6ent7e3t7e3t7e3t7e3t7e3t7e3t7e3t6e3t7e3t7fHx8fHx8fHx8fHx7e3t7e3t7e3t7e3x7e3t7e3t7fHx8fHt7e3t7e3t8iYmHiYaFgoGCgoGCgoKCgYKCgoKCgoKBgYGAgICAgICAgIGBgYB9fHx8e3x8fHx8fHx8fHx8dnZ2dnZ2dnZ2dnZ3dnd3d3d3d3d3d3d3d3d3d3d3d3d3d3d4eHh4eHh5eXl5eXl5eXl5eXt7e3t7e3t7e3t7e3t7e3t7fHt7e3t7e3t7e3t8fHx8fHx8fHx8fHx7e3t7e3t7fHx8e3t7e3t7e3t7fHx8fHx7fHt7e3uHiYiJhYSDgYKCgoODgoKCgoKCgoKCgYGBgICAgICAgICAgYKBgH58fHx8fHx8fHx8fHx8fHx2dnZ2dnZ2dnZ2d3d3d3d3d3d3d3d3d3h4eHh4eHh4eHh4eHh4eHh4eHl5eXl5eXl5eXl5e3t7e3t7e3x8fHx8fHx8fHx7e3t7e3t7e3t7fHx8fHx8fHx8fHx8fHx8fHx8e3x8fHx8e3t7e3t7e3x8fHx8fHt7e3t7e4aJiYiFhYOBgoKCgoOCgYKCgoKCgoKBgYGAgICAgICAgIGBgYCAfnx8fHx8fHx8fHx9fX18fHVwb29vb29veX59fX19fYSMi4uLi454KSkqKiopKz0/Pj4+Pj5tgH5+f397pdfT09PT1r2GiYmJiYqCRT4/Pz8/PXWNiYmJiYmLjIyMjIyNiH9/f39/f359fHx8fHx8fHx8fHx8fHx8fHx7fHx8fHx8fHx8fHt7e3t7hIuHh4aHgoGDg4GCgoKCgoKCgoKCgoGBgYCAgICAgICAgYCBgIB+fHx8fHx8fHx9fXx8fH19dXBub29vb255gH9/f39+hpCPj4+Pk3kZGhoaGhocMTMzMzMzMmqCf4CAgHut6eTk5OToyomMjIyMjYM6MjMzMzMwc5CMjIyMjI+QkJCQkJCMf39/f39/f319fXx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx7e3uCjYeIh4eDgoSCgYKCgoKCgoOCgoKCgYGBgICAgICAgICAgICAgH58fHx8fHx8fXx8fH19fX12dXV1dXV1dHZ3d3d3d3d4eXl5enl6eG9wcHBwcHBycnJycnJyd3p5eXp6en6Dg4ODg4SBfHx8fHx8fHZ1dXV1dXV6fX19fHx8fH19fX19fX18fX19fX19fX19fX18fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx7e4CMhomHh4SDhIKCgoKDgYKCg4KCgoGBgYGBgYCAf4CAgICAgICAfnx8fHx8fHx8fX19fX19fXZ2dnZ2dnl3dnZ6e3h7eHd2d3p4enp5fXp5eXh4eHh5eXl5enp5eXl5enp6eXh4eXl5eXl7e3t7e3t7fHx8fHx8fHt7e3t7e3t7e3t7e3t7fHx8fHx9fX19fX19fX18fH19fX18fHx8fHx8fHx8fHx8fHx8fHx8fHx8f4uHi4qIhIODgoKCg4KBgoKDgoKCgYGBgYGAgIGAf4CAgH+AgYF+fX18fHx8fHx9fX19fX19d3d3dnZ3fXh3d316eH14d3d4fXl9fXp8e3h3d3d3eHh4eHh5eXl5eXp6ent7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7fHx8fHx8fHx8fHx8fHx9fX19fX19fX19fX19fX19fX19fHx8fHx8fHx7e3x8fHx8fHx8fHx+iomMjImFg4SEgoKDgoGCgoKCgoKBgYGBgYCAgICAgICAf4CAgH19fXx8fH19fX19fX19fX13d3d3d3p9eHt4fHx3e3h3d3d8en19eXx6eHh4eHh4eHh4eHh5eXl6enp6e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3x8fHx8fHx8fHx8fHx8fHx8fX19fXx9fX19fX19fX19fX19fHx8fHx8fHt7fHx8fHx8fHx8fH2Kio2NioWDg4SCgoKCgYGCgoKBgoGBgYKBgIGBgICAgIB/gIGAfXx9fX18fX19fX19fX19fXd3d3d3fX55d3d4e3p7eHd3d3x7fHt6fHt3eHh4eHh4eHh4eXl5enp6ent7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3x8fHt8fHx8fHx8fHx8fHx8fH19fX18fH18fH18fHx8fX19fX18fHx8fHx8fHx8fHx8fHx8fHx8foqJjo2JhISEg4KCgoKBgYKBgoKCgYGBgoGAgYKAgICAgH+BgIB8fH19fX18fX19fX19fn5+d3d3d3d5fHl7eHx9eXt5enp4e3p9fHt9e3h4eHh4eHh4eXl5eXp6enp7e3t7e3t7e3t7e3t7e3t7e3t7e3x8fHt7fHx7fHx8fHx8fHx8fXx8fX19fX19fXx8fHx8fHx8fXx9fX19fXx8fHx8fHx8fHx8fHx8fHx8fHx/iIeNioeFhoaDg4ODgoGBgoGCgoGBgYGCgYCAgoF/gICAf4CAgHx8fX19fX19fX19fX5+fn53d3d3d3Z4eHl3eXp4enh5eXh5eHp6eXt5eHh5eXh4eHh5eXl5enp7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t8fHx8fHx8fHx9fX19fX19fX19fX19fX18fH18fH19fX19fH19fX19fHx8fHx8fHx8fHx8fX+HiIyIhoeHhIKDhISCgYKBgYKCgoGBgYKBgIGBgYGAgIB/gIGAfHx9fX19fX19fX1+fn5+fnd3d3d3d3d3d3d3eHh4eHh4eHh4eHl5eHl5eXl5eXl5eXl6enp6ent7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7fHx8fHx8fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fHx8fHx8fX19fHx8gIeIi4eHiYaDg4SDg4KBgYGCgoGBgYKCgYGBgIGBgYCAgICBgX97fH19fX19fX19fn5+fn5+d3d3d3d3d3d4eHd4dnl5eHh4eHh5eXl5eXl5eXl5eXl5enp6enp6e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7fHx7fHx8fHx8fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fHx8fH19fXx9fXyBhoqKiYmIhIOFhISCgoGBgYGCgYGCgoGBgYCAgYGAgIGAgIGBf3x8fX19fX1+fn5+fn5+f394eHd4eHh4eHZxZGpeam15eXl4eHl5eXl5eXl5enp6enp6enp6enp7e3t8e3x8fHt7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3x8fHx9fHx8fH19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fIGFiYqJioeEhYWEg4KCgYGBgoKBgYKBgYGBgYCBgYCAgYCBgIF+fH1+fn5+fn5+fn5+fn9/f3h4eHh4eHh5bWRiZV9fXm95eXl5eXl5eXl5eXp6enp6enp6enp6e3t7e3t7fHx8fHx8fHt7e3t7e3t7e3t7e3t7e3t7e3t7e3t7fHx8fHx9fHx8fH19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18goWKiomJhISGhYSDg4KBgYKCgoGBgoGBgYKBgIGBgICAgICBgH58fX5+fn5+fn5+fn9/f39/eHh4eHh4eW5kZWdlZGJeZnh5eXl5enp6enp6enp6enp6enp6e3t7e3t7e3x8fHx8fHt8fHt7e3t7e3t7e3t7e3t7e3t7e3t7fHx8fHx8fHx8fHx9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXyChouJiIqEhYaEg4OEgoGBgYGCgYKCgYGBgYCAgYGBgIB/gIGBf3x8fn5+fn5+fn9/f39/f394eHh4eHl3Z2VkZWZkZWFfaXl6enp6enp6enp6enp6ent7e3t7e3t7e3t7e3t8fHx7e3t7e3t7e3t7e3t7e3t7e3t7e3t7fHt8fHx8fHx8fHx9fX19fX19fX19fX19fXx9fX19fX19fX19fX19fX19fX19fX19fX19fIKGi4eJh4SEhoSDg4WBgYGBgYKCgYGBgYKBgICAgYGAgYCAgYF+fHx/f35/f39/f39/f39/gHl5eXl5eWtlYWJlZWFlZV5ieHdze3p6enp6enp6enp6e3t7e3t7e3t7e3t7fHt7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t8fHx8fHx8fH18fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19g4aLhoiFhYaEgoOEhIKBgYGBgoKBgYKBgYGAgYGBgYGAgIGBgn98fH9/f39/f39/f3+AgICAeXl5eXl0Y2NlZGNmY2doZGZsZF5ze3p6enp6enp6enp6ent7e3t7e3t8fHx7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3x8fHx8fHx8fH19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX1+fn6DhouGhoaGhYODg4SDgYGBgYGCgoGBgYKBgYCAgYGBgYCAgYGBfnx8f39/f39/gICAgICAgIB5eXl6d2RhY2diYmRdW2VfYV1eYGFoeHp6enp6enp6enp6e3t7e3t7fHx8e3x7e3t7e3t7e3t7e3t7e3t7e3t7e3t8fHx8fHx8fHx8fH19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX1+fn5+fn5+foSFi4eGhoaGhIODg4KBgYGBgoKCgYKBgoGAgIGBgYGAgYGBgYF+fX1/gH+AgICAgICAgICAgHl5eW9vYmJiZF5jZ19dYWFgXF9kYlttfHp6enp6enp6enp7e3t7fHx8e3t7e3t7e3t7e3t7e3t7e3t7fHx7e3x7fHx8fHx8fHx8fH19fH19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX5+fn5+fn5+fn5/hIiLhoSHhoaEhIODgoGBgYGCgYGBgYKCgYCAgYGBgYGBgYGBgX5+fYCAgICAgICAgICAgICBeXpwXWJlZGJkXmZnZ2BZYmJhY2VfXF1ze3t6enp7e3t7e3t8fHx8fHx8fHt7e3t7e3t7e3t7e3t7fHx8fHx8e3x8fHx8fHx8fHx8fHx9fX19fX19fX19fX19fX19fX19fX19fX19fX19fn19fn5+fn5+fn5+fn5+foCFjIqEhYaGhYODg4SCgYGBgYKBgYGBgoKCgYCBgYGCgICAgIGBf35+gICAgICAgICAgIGBgYF5emxiZGdjYmdmYWBgZGFiZWRjZGNeXGJ1fHt7e3t7e3t7e3x8fHx7e3x8fHx7e3t7e3t7e3t7e3x8fHx8fHx8fHx8fHx8fHx8fHx8fH19fX19fX19fX19fX19fX19fX19fX19fX1+fn5+fn5+fn5+fn5+fn5+fn9/gYeMiYWGhoeFg4SDgoGBgYGBgYKBgoKCg4KBgIGBgYKBgYGCgoF/f36AgICAgICAgIGBgYGBgXp7dGdnZmZkZGZmYF5fYWNlaGRlXmJkYHR8e3t7e3t7fHx8fHx8fHx8fHt7fHt8fHt7e3t7fHx8fHx8fHx8fHx8fHx8fHx8fHx8fH19fH19fX19fX19fX19fX19fX19fX19fX19fX5+fn5+fn5+fn5+fn9/f39/f3+CiYqIhoaIhoWDhIOCgYGBgYGBgoGBgoKCgoGAgYGBgoKBgYKCgX9/f4GBgYGAgYGBgYGBgYGBenptaGNjZ2ZnZWdmZmdiZWRlYmdbYmVgdnx8e3x8fHx8fHx8fHx8e3t8fHx8e3x8fHt7fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx9fXx9fX19fX19fX19fX19fX19fX19fX19fn5+fn5+fn5+fn5+f39/f39/f39/f4SJioiGiYeFhYSEg4KBgYGBgYGCgYKCgYGBgYGBgYKBgoGBgICBgH9/gYGBgYGBgYGBgYGBgYF7emlpZGNqZmFgZmVjY2NnaWRjYmBiZGJ0fXx8fHx8fHt8fHx8fHx8e3x8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fH19fX19fX19fX19fn5+fn5+fn5+fn5+fn5+fn5/f39+fn9/f39/f39/f3+AhIqMiIeJhoSFhYOCgYGBgYGBgYKBgoGBgYGBgYGBgoKBgYGBgYGAgH+BgYGBgYGBgYGBgYGBgXZzZWRnY2RmZWJlZmdkZmhmZWNgYGNkYHF9fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fXx9fX18fHx9fX19fX19fX19fX19fn5+fn5+fn5+fn5+fn5/fn5+f35+f39/f39/f3+AgICFioyJiIqJhoaDgoKCgYGBgYGBgoGBgoGBgYGBgIGBgYGBgYGCgX+Af35/foCCgoKCgoKCgoKCc3NnZWRkZWlqaGZnZ2NhZmZlZmdmZWVjdX18fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fX19fX19fX19fX19fX1+fn5+fn5+fn5+fn5+fn5+fn5+f39/f39/f39/f39/gICAgICAgIWLioqJioeHhoSCgoGBgYGBgYKCgYKBgYGBgIGBgoKBgYGBgYGAf4B+dHRzdX1/goCAfn5/gYB0cmdkZWNmaWppZWNlY2BmZGRnZ2JiZWFwfXx8fHx8fHx8fHx8fHx8fHx9fX18fHx8fHx8fHx8fHx8fHx9fX19fX19fX19fX19fX19fX19fX1+fn5+fn5+fn5+fn5+fn9/f39/f39/f39/f39/f39/f4CAgICAgIB/houLiouLh4eHhIOCgYGBgYGBgYKBgoKBgYGBgYKCgYCBgYGBgoCAgH5zc3NzdHV4dXV0dHV2dXVwZmNmZWhoaWdoZ2VmZWJfZGVmY2BiZ3d8fHx8fX19fX18fHx8fH19fX19fX19fXx9fXx8fX19fX19fX19fX19fX19fX19fX19fX19fn5+fn5+fn5+fn5+fn5+fn5+f39/f39/f39/f39/gIB/f3+AgICAgICAgICHjIyIi4qHh4eEhIKBgYGBgYGBgoGCgoGBgICBgoGBgYKBgoKCgYCAfnNzc3Nzc3NzdHR0dHNzdW9jY2FnZWhoZ2pmZGVnZmhmY2JlYl5ieX18e3t8fX19fX18fHx9fX19fX19e3x9fX19fX19fX19fX19fX19fX19fX5+fn5+fn5+fn5+fn5+fn9/fn5+fn5+fn5/f39/f4CAgH9/gICBgICAgICAgYCAf4CAgYGAgIeLi4iNiYiJhoSFgYGBgYGBgYKCgYKCgYGBgIGCgoGBgYKBgoKBgIB+dHNzc3Nzc3Nzc3Nzc3N1cmdlZWRlamhoZ2ZpaGdjZWViZGNoZGd7eHVzc3R2dnl4dnR0dHZ3d3d2dHR0dXV4d3h4d3d6e3x9fXx9fn5+fn5+fn5+fn5+fn5+fn5+fn5/f39/f39/f35/f39/gH9+fHt7fX58eXl2dnZ5fHx6end2d3l7fXt4hIyMioyHh4iEhYSBgYGBgYGBgoGBgoGBgYGAgYKCgYGBgoGBgoGAgH51c3Nzc3Nzc3Nzc3Nzc3VzaGVnaGVrbGhqZ2lqZ2dnZmRkYmVkbnV0dHNzdHNzc3Nzc3Nzc3Nzc3NzdHNzc3Nzc3Nzc3N0dHV1c3V3eHl7fn59fn98f39/f39/f39/f314fH5+fXx4dXZ3eXd4dnRzc3N0dXRzc3Nzc3NzdHNzc3R0c3R0dHODjI2KiYeIhoOGg4GBgYGBgYGBgYGCgYGAgYGDgoKBgYCBgYGBgICAf3VzdHRzc3Nzc3Nyc3NzdnZpY2hqaGpsZWZpbGhgZmVkY2BkZGZ0dXV1dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHRzdHRzc3Nzc3R2dnV1d3V4fH9+fX9+fHp4dXN0dXV1dHNzc3Nzc3N0dHR0dHR0dHR1dXR0dHV1dHR1dXR1dXV1dIaMjYuIhoeEhIWCgYGBgYGBgYGCgoGAgYCBgYKCgoGBgIGBgYGAgIB/dnNzc3Nzc3Nzc3Nzc3N2dnNnZ2pmaGdmaGhmZGlnY2NnZWVmcHZ1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dHR1dHR0dHR0dHRzdHR0dnV1d3Z0c3R0dHR0dHR0dXV1dXV0dXV1dXV1dXV0dHNzc3N0dHNzdHR0dHR1dXR1iY6MjIqHh4SEhYKBgYGBgYGBgYKCgoGBgICAgoKCgoGBgYGBgYCAgH93c3Nzc3NycnJyc3NzcnZ2dW5kXWNnZWlraGVoZ2dqamlnZXB2dXV1dXV0dHRzdHR0dHR0dHV1dXV1dXV0dHV1dHR1dXV1dXV1dXV1dXR0dHV1dXV1dXV0dHV0dHV1dXV1dXV1dXV1dXV1dXV1dXV0dHNzc3Nzc3N0dHNzc3Nzc3R0dHR0dHWKjoyMiYaGhIeFgoGBgYGBgYGBgoKBgYGAgYGCgYKBgYGBgYKBgYCAf3hzc3Nzc3JycnJyc3NzdnZ3d2liaGhnamtpaGZkZGVmaWhwdXR0dHRzc3JxcnJ0dXV0dHR0dHR0c3NycXFxcXNzdHR0dHR0dHR0dHV0cnJyc3R0dHR0dXV1dXV1dXR0dXR0dHR0dHR0dHR0dHR0c3Nzc3Nzc3Nzc3Nzc3N0dHN0dHR0dHR0dYuOjImGhYWFh4SCgYGBgYGBgYGBgoKCgYGAgIKCgoGBgYGBgYGBgIB/eXNzc3NycXJycnJzc3N3d3d3bGpoZGhpa3Z6a2VmZWhnbXJzdHN0c3JwcHBxcnN1dXR0c3NycnJycXBvb29vcHFzc3NycnJyc3R0dHNxcHFyc3R0dHR0dHRzc3Rzc3NzdHR0dHRzdHR0dHR0dHRzdHR0c3NycnFxcnJzc3Nyc3NzdHR0dHN2jZCMh4eFhYSEgoGCgoGBgYGBgYGCgoKBgYGAgYGCgoGBgoKBgYGAf395c3NycnFxcnJycnNzc3d3d3dzc2pnaWloeX99cW51bG5wcXJycnFxcG9wcXFxc3R0c3RycXBwcG9ubm1ubW5ubnBxcnJycnJycnJzcXBvb3BxcnJzc3JxcnJycnJycnJycnJzc3Jzc3Nzc3Nzc3Nzc3Jxb29ubm9vcXJzc3Jyc3NycnNzcnaPj4uHhoWFhYOCgoKBgYGBgYGBgYGBgoGBgYGCgoKBgoGCgYGCgX9/f3hxcHBwcXFycnJyc3Nzd3d2dnd2cnF0c252f352c3hwcHBycnJycXFwcHFxcXJzc3Nzc3Jvfntvb25ubm5ub25vcHBxcXFxcXBwcXJwb25vcHFxcXFxcHBxcXFxcXJycnJycnJycnFxcnFxcnJycnFwb29ubm1ubW5vcXJycnJycnJyc3JxeI+OjYaDg4aEgoOCgoGCgYGBgYKBgYGCgYGBgYKCgoKCgoKBgYKBf4B/d29wb3BxcnJyc3Nzc3J2dnZ2dnZ3dnZ1c3l/fnd3d29wcXFxcXFxcHBwcXJycnN1cnJycHOYe29wb29vb29vb29wb3Bvb29vcHBxb29vcHBwcHBvcG9wcHFycXFxcnJycnFxcXFxcXFxcHBwcHBxb29ubm5tbW5tbm9wcXFxcXFxcXFxcXB7j42NhoODhYOCgoKCgYKBgYGBgoGCgYGCgoGCg4KBg4KBgYGAgYF/f392bm9wcHBxcXFxcXBwcHZ2dnZ2dXR0c3NxfYB9fX9zb3BxcXFwcHBwcXFwcXFxdJV8cHJviKB2cHBwb29wcG9vb29vb29vb3BxcXBub3Bwb29wb29wcnJycnFxcXBxcnFwcXFxcHBwcHBwcHBwb29ubm1ubm5ubm9ub3BwcHFxcXFxcXFxcIKRjoqEhIOFhIOCgoGBgoKBgYKBgYGBgYGCgoKCgoKCgYGBgYCBgX9/gHVvb29wcXFxcXBwcHBwdnZ2dXRzcnJycnGAgoCBeXBwcHBvcHBwcHFxcXFwcXJwlKF1cHOdoHZwcHBwb3BxcHBvb29wb29vcXFwcG9wcG9vb25vcHFxcHBwb3Bvb3BwcHBwcHBwcHBvb29vb29vbm5tbW1ubm5ub25vb3BvcHBwcHBwcHBwiZCMiISDhIaDg4KCgYGCgoKCgYGBgYCAgYGBgoKBgYGBgYGBgIGBgH+AdG5vb3BxcXFwcG9vcG92dnVzcnFxcXFxcICDg39ycHBwcHBwcHBwcHFxcHBxcW+JsZFufqSgdnBwcHFwcHBwcHBwcHBvcHBxcXBwcHFxb29vbm9wcHBvb29vcHBvb3BwcHBwcHBwcHBvb29vbm5ubm5ubW5ubm1ubm9wcG9vb29vb3BzcXWPj4uJg4KFh4ODgoKBgoGCgoKBgYKBgYGBgYGBgYGBgYCAgYGAgYGAf4B0b29vbm9vb29vb29vb3Z1dHNxcXFxcXJygIKCgXRxcXFxcXFxcXFxcXFxcXFycIOzqXyQr6N3cHFxcXFwcHBwcHFxcXBxcHBwcXBwcHBwcHBwcHBwcHBwcHFxcXBxcHBwcHFwcHFxcHFxcXFxcXJxcnFwcnRycnR0dHR1dnRzdHR0dXd3gpCPi4iDgoaHhISCg4GBgYKCgoGBgoGBgYKBgYGBgYGAgICBgYCBgYB/gHVvb29vb29vb25vb29vdXRzcnJycnJycnKDg4OCdnFycnFxcXJxcnJxcXJycnJwjbGnq6ivpHRycXFycXFxcXFxcXFxcXFwcXFxcXFxcnNzcnJyc3V1dHR0dHR0dHV2d3d3d3d3eHh4eHd3eHh4d3Z3dnV2dnZ2d3h6e3x7e3t6enp6enyGkI2LiIODiIeHhYODgoGCgYKBgYGBgYKCgoGBgYGAgYCAgYGAgIGBgH+Ad3FxcXFxcG5ucG9wcG92dHV1c3Nzc3NzdYiDgoN5cnNzcnJyc3Jyc3Nzc3Nzc3WfoqKzpZujenNzc3Nyc3N0dHV1dXV1dHV3eHd3d3d4eHh3eHh4eXl5eXl4eHl5eXp6e3t7e3t6enp5eXh3d3d1dnV2dnd5enp7fn5+fX1+fn5/f35+gIyQi4qHg4WIi4iEg4SDgYGCgYGBgoGBgoKCgoKAgYGBgYCBgYGAgIGAf4B8enp5eXx5eHh2dXZ2dHl2d3h3d3Z3dnZ6fnx+fnx2dnd3dnV4enh4eHh4d3h4gKWemqWfpKOPenl6eXh4eXl6enl5eXh4enp5eXh4eHh3dnd3eHh3eHh5eXp7e3p8fH1+fX9/f359e3t7e3p5enl5e3t/foB/fn5/fn19fX5+f35+fn6AjpCNioeEhoqLiIaGhIOBgoKBgYGCgYGCgoKCgoCBgoKBgYGCgYCBgIF/f4B/fn19fX9/f318e3t7eXh4eHh5eXl4eXh5eXl4enp6enp6e3t7fH1+fXx7fH2KopCQl5qXmZJ7e3l4eXh4ent6enp5eXp8fHt6enx8fHp6ent9fHx+fn+AgoGAgYKAgH9/gYGBgIB/f35+fn5/fX1+f4CAf35+f39+fn9/f39/gH+Af4OQjoyHhoWIi4yIh4aFg4GCgYGBgYKBgoKCgoKBgYKDgoGBgYGBgIGBgIB/goOCgoGBgX99f39/f4F6enh4d3h4eHh5eHh5enp5e358enx9fXt8fX19fX59foamqaSeoJuVlX9/f319fYCDgoCAf318fXx9fXt9fXx8fH19fX1+gYGChISDgoB/gYGBgH9/f4B/f39/f39+fn9/f39/f35+f3+Af39/gICAf4CAgICAhJCPi4eGhoiLi4mKhYaDgoKCgYGBgoGCgYKBgYGBgoOCgYCAgYGAgIGBgH+ChIKCgICAgH9+fn+AgH9/fn18fX19fYB/fX+Af35/gH9/fn9/gICBgICBgIGAirGoqaKhoaujgn6AgH5/f39+f4B/fn5+f39/gYB/f4CBgYCAgYOEgoGCgoGCgH+AgYCBgYGAgH+BgICAf39/gICAgYGBgIGBgYCAgICBgoGBgYCAgYGFjo6MiYaHiYyLi4qGhoOCgoKBgYGCgoOCgoKBgIGBgYKCgICBgYCAgYGAf4KFg4KBgYCAf39+fn+AfX5+fn19fX5/fn9/f35+fn+AgYCAgICAfn9/f4CAgIqnrp+oo6ChpamkjH98foB/fn5/f35/gIGBgoKDg4KCg4KBgYKDg4OCgYGBgYKBgoKCgYKBgoGBgYGBgoKCgYGCgYKCgoGBgoKBgYKCgoKCgYGBgoKCgoaPkY+KiImKjY6NiYaFgoKCgoKBgYKCg4KCgoGBgYGBgYF/gIGBgYCBgIF/gYWEg4KCgoGCgYCAgIB8fHx7fH18fH9+fn9+fn5+f35+f39/f39/gH+AgYiWqq6km6ShoKGhoamqn46BgIB/gIF/f39/f3+BgYGCgoCAgYKDg4SDg4ODgoKCgoKCgoKCgoKCgoGCgoKDg4OCg4ODgoKCgYKCgoODg4ODgoKCgoODg4KCh5KTkIuKi4uPj42Lh4SCgoKCgYGBgoKDgoKBgYGBgIGBgICAgYGBgIGAgYCAg4SDg4OEg4ODgoKCgXx9fHx9gn1+f4GCiIGCgoSCgYGDg4GBgYKDgoaMmqajnZyaoJSZoaCenZ6hn5KEgYCAgICAgH9/f3+AgICAgH9/gYODhYSEg4SDgoKCg4OCgoOCgoODg4ODg4SDg4KEhYWDg4SEgoKDhIOCg4ODg4OCgoODgoCKlJOPioqMj5GPjYuGg4KCgoKBgYGBgoOCgYGBgIGBgoGBgICBgYGAgYCAgH+BgoODg4SEhIOCgoKCfXx8fn6AgYOAg4OChIaFhoaFhIWFg4ODg4SBgoOKkpWYl5mYiJCdm5ucmJCJhYODg4KDg4ODgoGAgIKCgYOCgYKCg4OEhYWEg4OChISEhIOEhISDg4OEg4ODg4OEg4SDhIWEhISDg4ODgoKCgoKCgoKBgYKCgo+UlI+Njo6RkY6KiISCgoKCgYGBgYGCg4GBgIGBgYGBgYCBgIGBgYCBgICAgIKChIKChIOCg4ODgoJ9fX2AgH+AgoGDg4ODhIaEhIOEhYWDg4GBg4OCgIGCg4yWmZWJkZmckouHhYaGh4eGhoeHhoaEgoGCg4SDg4ODg4ODhISFhYWDhYSFhISEg4KBg4OCg4SEg4KCg4SCg4ODg4OCgoKCgoKCg4OEhIOFhYWFhoaIk5OTkI+Pj5KRjIqIgoKCgoKBgYGBgYKDgoKBgIGBgYGBgICAgYGBgICAgICAhISEgoKCgoGBgoKBgX+AgYOCgICAf4CCgoGDg4KCgYODg4SDg4GDhYSDgoKBgYSQl5OWmZCFh4eIiIiHh4eIiIiFhIOBgIGBgoKCg4GCg4SEhYSDg4OEg4OEhIOBgYGCg4OEhISDg4ODg4OEhIODgoSDg4ODhIWFhoeHh4eIiIiJiY6TkpKOj46RkY+LiYeCgoKCgoKBgYGBgoKCgoGBgIGBgYGAgICAgYGAgIGAgICDg4KCgYKCgYGAf4CBhYWFhoOCgYB+fn+BgoSCgYKDhIOCg4ODg4KChISDhISCg4OFkZeJhISDg4WFhYOEhIWFg4KBgH9/gIB/gIGEg4OEhYWEgoKCgoOCg4OFhIKDhISEhYaGhoaGhoWFhoeHhYaIh4aHiIeGhoaIiYeGhYaGhoeIkZKSj46QjpCRjImHhYGBgoKCgoGBgYGBgoOBgYGBgYGBgICAgICBgYCAgICAgISEg4KBgoGAgYGAgYKIh4aHhYSCgH99fX6AgH+AgYGBgYGBgoGAgYKDgYKCgoKCgoGIkYKDg4GCgICAf4GAgICAgH9+gIGBgYKCg4OEg4OEg4OCgoGBgoODg4SEg4SEhIOFhYaFh4eIh4eHh4eHh4eGhoaGh4WFhYaGhISEhIWEhYaSk5GOjo+OkI6JiIeEgoKCgoKCgoGBgIGCgoKCgoKCgYGBgYGAgYGBgICAgYGAgoSDg4KDgoGCgYKDg4iHh4iHhYSCgX5+gICAfn5/f4CBgYGCgoCBhI2DgH+AgICAgImTgIGCg4OAf39/gICAgICAgICDg4KDg4ODgoOBgYKCgoOCgYKCgoOCgoSDhISDg4SEhYWFhYaGhoaFhISEhYWEhIWFhYSEhISDhISEhISEipSTkpCQj46NiYaFhIOBgYKCgoKCgYGAgYKCgoKBgoKBgYCBgYCBgYGAgICAgYGAg4OCgoOCgoKBgoOCiImJiYiHhYSDgYKEhIOBgoKCg4SCgoSEgoOJloiEgoSCgn9/jZeCgoGChIOBgYGCgoODgoGDg4SDg4SEg4OCg4KDg4ODg4KCgoKCgoGDhISEhYSFhYWFhIWEhIWFhYWDg4OEhISEhYWFhISEhISEg4ODg4OOlZKQkZGPjYyHhYODg4GBgoKCgoKBgYCBgoOCgYCCgYGBgICAgIGBgYCAgICBgICDhYSEhIODg4SDhIOGh4mIhoWDhIODg4WDgYCDgoWFhISDg4OChI6YioOFhISEgoCTm4WCgoKEg4OCg4GBhIWEg4ODgoKDhISDg4ODg4SFhISDg4KCgoKCgoSEhYSFhYWFhYODhYWFhYaFhoWEhIWEhYWGhYWFhIWEhISDhIODhJGUkpKTj4yMioWEg4ODgYGCg4KCgoKBgYGCg4KBgYKBgYGBgICBgIGBgH+AgIGAgYaGhoaGhoaHh4aGhYSDhYaCgIGBgYGHgoB+f4GBj4yDgX9+fXx8i5yNgIKBgYKChZSUi4GCgYKDg4GBgYKDhYODg4KDg4OEgoKEhIOEhIWEg4OCgoKCgYKCg4ODg4SFhYWFhIOEhYWGhYWEhISEhIOEhIWFhYWFhIODhIOEg4KGlJSTlJKPjYyIhISEg4KBgoODgoKDg4GBgoKBgoKCgYGCgYGBgYCAgYGAgICAgICAhYWFhYaGh4aGhoWGg4ODg4GAgoKCgYKAf35/f4GVl4mAfX19fXuBl4uAg4GBgYCPk4yPgYKBgoKBgYKDgoODgoOCgoKCg4OBg4SDg4ODg4OEhIKCgoKDgoKDg4ODhIWEhISEg4OEhIODg4OEhIODg4ODg4SDg4ODg4KDg4KDgouUk5KTko2NioaDhIOEgYGCg4ODg4ODgoGBgoGCgoKCgoKBgYGBgICBgYCAf4CAgICDhISFhYSFhYWEhIWCg4KDgoKDg4OBgICAgICAgJWfin5+gH2Hin2EhYOEgoODgo6JhYyCgoOCgoKCg4ODgoODg4KCgoODgoKDg4KCg4KDg4WEg4ODg4SDg4SEhISEhYWEhIWEg4SEg4OEhISEhISEg4SEhYSDg4SEhIODgoKDkJSTkpKPi4yIhoSFg4OBgYKDg4ODg4OCgYGCgoKCgoKDgoCBgoGAgICAgIB/gICAgISDhYWEhYWFhYSFhYOEhIWDg4SEhIKCgoOCgoSBkaGKf4yFfYaJgH6FhYWEhYJ/fn19f4KEg4ODg4OEg4ODhISEg4OEhISEg4SEhIOEg4OFhoWFhYSFhYWFhYSFhoWGhoWFhYWFhYWFhYWGhoWGhoaFhoaGh4aFhYWFg4SEhIeTk5OSkoyLiIWGhYWCgoGBgoODg4OCg4KBgYKDg4ODgoKBgIGAgICAgICAgH+AgICAhYWFhYWGh4eGhYWFhISFhYSEhISEg4ODg4OEhYOKkYOEi4WCgYF+fYGHhoOAfn5/fn9+f4OEg4OEhISEhISEhISEhISFhYWEhYSGhYWGhYaGhoWGhYWGhYWHhoaGhoaFhIWFhYWFhIWGhoaHhoaGhoaHh4iIiIaFhYaEhYaGjZSTkpGQi4qHhoeGhIGCgYKDg4ODg4KDgoGBgoODg4KAgYGBgICAgICAgICAf4CAgICHh4eGhoeHiIeHhoaEg4ODhIODg4OEg4ODg4OEhISEgYKCgYmBf359foWBf39/f39/f36AgISFhIWGhoaFhYWFhoeHhoaFhoWFhoeHh4iHh4eGhoaHhoeGhoeHh4aGhYSDhIWFhoSFhYaGhoeHhoaGhoeHh4eIiIeGh4aHh4eRlJORkZCLiYiFhoSDgoKBgoODg4ODgoKDgoKCgoOCgYCBgICBgICAgIGAgIB/gICAf4aHiIeHh4eIiYmIiIODgoKDgoSEhIWEg4KCg4SEhIOBgICAhIR/fn5/gH9/f39/gIB/f4B/f4WFhoiIiIeHh4eIh4iHiIiIhoaHiImJiYmIh4aHh4iJiIeHh4eHhoeFhIOEhYaFhYWFhoaGh4eFhoeGh4aGh4eHh4eHh4eFh5OTkY+RkIuHhoWGhIKCgYGCg4ODg4ODgoKCgoGCg4KCgIGBgYCAgICAgICAf3+AgYB/hoiIiIiHh4iJiYmIg4KCg4ODhIWHh4aFg4OFhISEg4GAgIGMiYGAgYKCgYGBgYB/gH9/fnt6gIaHiIqKiYmJiImJiYmKi4qIiIiJiYqLioqIiIeIiIiHiIiIh4iGh4aEg4OFh4eHhoWFhISDhYWEhYWGhISEhYWFhoWGhYOJlJOQj5COioaEhoWDgYGCgYKDg4ODgoKCgoKCgoKCgYGBgYGBgYCAgICAgIB/gICBgH+GiYiIiYeIiImJiIiEgoKDg4KDhImKh4aEhIWEg4OCgICAhISCgoKCgoKCgH9+fX19fX59fHt8g4eJi4uKioqIiIqJiImLiomJiImIioqJi4mHhoaHh4WGiIiJiIaGh4SDgoSIiIiIh4WCgoGDg4KDg4SCgoKDgoGEg4SEgY6TkpCPj4uIhYSGhIKBgYGBgoODg4OCgoKCgoKCgoGBgYGBgIGAgICAgICAgH+AgIGAf4WIh4eHhoeIiIiHh4SCg4ODg4OFiYqJh4WHhYSFhYKAgYSEgoOCgoKDgX59fn5+fn5+fn1+fX19g4eJioqHh4WGh4eHh4iHiImHiIaIh4aJiYODhIOFhISFhYaIiIaFg4OCg4WHhoeGhoSCgoOEgoOEhIKBgoGBgYODhIOEkZKQjo+Oi4eEhoaEgoGAgYGDg4ODg4KCgoKCgoKCgYGBgIGBgYCAgIB/gIGAf39/gIB/hYaGhYaGhoeHiIeGgYKEhIODhYeIi4qGhIaEgoaGgoKEhIODg4OCgoF9fH1/gH9+fn59fH19fHl8g4aHh4SDgYODhIWFhYODhYSEhISFhIWEgoKCgoSEgYKDg4WGhYSCgYGCgoODhYSEhIWEhIaEg4SFg4KDgYKDg4SFhIeSkY+Nj4yJhoSFhIWCgYCBgYODg4ODgoKCgoKCgoKBgYGBgYGAgICAf4CAgYB/gICAgICDhIWEhIWFh4eHh4aAgYGFg4OEhYSHiIWCgIB/gX9/gYODg4ODgoJ/fX1/gICBf31+fn19fX17enp+hISEgoGBgIGBgoKBf36BgYGCgYOBgoGCgoKBg4OAf4CAgoOCgICAgICBgYGDgYGChIODhYSCg4SDgoKBgoSDhYWGi5ORj4+Pi4iFhYODhIGBgYGBgoODg4KCgoKCgoKCgoGBgYCBgYCBgH9/gIGBgICAgH+AgIKCg4OChIOEhYWGhn+BfoCBgICAgIGDgn9+fn5+fX+Cg4OCg4ODgn19fn+AgIGAfn19fX1+fXx6enqAgoKBf39/f35/f4B+fYB/f4CAgX+AgIF/f4CAgX59fX+AgX9/foCAgH+AgICAf4CCgICCgYGCgYGAgYGBgYKEg4aPkpCOj42Kh4eGg4ODgYGBgYGCg4ODgoKCgoKCgoOCgYGCgYGBgICAgH+AgICAgICAf39/gYKDhIGCgoOCg4SFgIB/fH19fn19foCAf31/fn1+gYODg4KCgYF/fX1+f4CAgH9+fX19fHt7e3p6enqAgH9/f39+fn1+f35/gH9+f3+Af4GAf35+fn9/fn18fn+Af35+f3+Af39/f4B/f4B/f4CBf4B+f39/gH9+f4B/hZKSj46Pi4uHiYWEg4KCgYGBgYKDg4ODg4OCgoKDg4KAgYKBgYGAgICAf3+AgIB/gIF/f36BgYSEgYKBg4OCg4OBgH98fn9/fX6Af4B/foF/f4GBhIOCgYB/f359fn5/gICAfn19fXx7e3x6enl5eXuAgH+Af39/fn5/foCAf35/f4CAgoB/fH5+f35+fXx/f4B/fn9/f4B/f35+f4CAfn5/f39+f35/f35+fn19fX2Fk5KOjIuKiImIhISEgoKCgYGBgoOCgoOCgoODg4ODgYCBgYGBgYCAf39/f4CAgICAgIB/foCBhIOCgYGDhISDhICBgICBgIGAgYKCgoGBgoCBg4ODgYGBgYCAfn19fn5+f359fX19fXx8fHt6eXl5eH2BgIGBgYF/f4B/f4F/gICAgYGCgoB+gH5/fn5+foGAgYF/f39/gIB/f4B/gYB+f3+Afn9/fn+Af31+fX17fIaTkYyLioeHioiGhoSDgoGBgYGCg4ODg4OCg4OCgoKBgICBgYGAgH9/f4B/gICAgICAgH9+fn+BgYGAgISGh4aHgoODhYOBg4ODhYSEhISEg4ODhIKCgoKCgX9+fX19fn6AfX19fX19fXx9e3p5eXl5eYCCgoKEg4CCg4GAgoGCgYGDgoODgYGCgIGAf4CBg4GEgoCAgYGBgYCAgYCCgn+BgIF/gIB/gICAfn9/fnx8ipOQiYmIiIiJiIaGhoSCgoGBgoKDg4ODg4KDg4KCgYCAgIGBgYGAf39/gICAgICAgIGBf359fn5/f39+g4aHh4iChYSFg4SFhIWGhoaGhoWGhYGBg4ODgoKAfX19fX19fn59fX19fX19fX18e3l5eXl4fIKDhIWCgYSDgoKDhYeCg4SDgYKCg4OCgoKCgYKFg4iFgoGCgYKDgYGBgYSDgoOCgoKCgYGBgIF/gIGAf36Ok4yHiIaIh4aGhYaGhIKDgoGCgoODg4ODg4OCgYGBgH+AgYCBgYB/gH9/gICAgH+AgYB/fn19fX5+f36Ag4SHiISGhoaFhoaHh4aHh4iHh4eGf32AgIGCgX59fX19fX19fX19fX18fH5+fnx7eXh3eHl5gIODf4ONhISEhISXl4ODhIF9foGCgoGCgYKBhIaIjIWDgoKBhIKDg4KDhYSEhYOCg4OCg4OCgoKCg4KCgpKQi4iIh4mHhoaEhoWFhISCgYKCg4ODg4ODgoGBgYCAgICBgIGBgH9/fn+AgYCAf4CAgH9/fn1+fn+Bf4CCgYWFhYeGh4eGh4eIhoeHh4eGh4V/fX18fX9+fX19fX19fX19fX19fXx7iJKCe3x6fIZ5eHl8gYF+iZaEg4OEhJSTgIGBf39/fn6Fi4B/gICEhpCJhYSCgoGFhYuDgYOFhYaGhIOFhYOEhIODhIOEhISIko+MiYiIiYeHh4WGhYSFhIKBgoKDg4ODg4OCgYGBgYB/gIGAgICAf39/f4CAgICAgYGBf39/f4CAgIGBgYGBg4OGh4aGh4aGiIeGhoaFhIOFhH59fHx8fX18fH19fX19fX19fX18fH+RlZaDe3qElHx4eXp7fICCg4GCgYOCgH59fn57iJF8fI6Wf31/f4KGioWDg4SDgYONiX9+f4OEhYWDhYaFhIWFg4SFhYaEhI6Rj4yKioyJiImHhYWFg4ODgYGCgoKDhIODgoGBgICBgICAgYGAgIB/f3+AgIB/gICAgX5+f4GBgoKCgoODgoOCgoWGhISFhYSGhIOEg4KBgIKAfn19fHx9fXx8fH18fH18fX19fHx8e4uRl4x6e3yAenp6e3x5eX19foB/gH98e3t+fn2ClZF/hIh9fH5/goR8fIGChIKAf4eDfYOBf4KCgIODhISEhISChIOEhYGEkZGOi4yLjoqJiYWFhYODg4KBgoODgoKDg4KCgYGAgIGAgICAgICAgH+Af3+Af357gICBenyAgYKDhYODhYWFhYODg4SCgYKDgoOCgoGBgIB/gX5+fX59fHx8fHx8fHx8fHx8fHx9fHx8fn6Kgnt6e3p4ent7fH17fn1+f319fX19fICBgH2Gj4F+fYJ+f36Agnx8gH+CgIKAfn17ioJ9gH9+gYCAgYKAgoCAgIGAf4uUj4yMjo6NiIiHhYWFhIOCgoKCg4OCgoODgYGBgICAgICAgH9+fXx7fHx9f3+AgHx6gYF4e4CCgYOFhIOFhYaHhISAhpSIgIKBgYGBgH9/f39/fn5+gHx8fHx8fHx8fHx8fHx9fHx8fHx8fHl7e3t4eHl7e3p8goCBfn+BfH5+f359gIKCgICAgX+CkYF/f4CAfoB+fn9+gIGBfXx9e319fXx9fHx9gH+AgH6Afn6ClJKNjY2Oj4qFhoaFhISFg4KDgoODg4OCgoGBgYGAgICBgICAf4CAf39/fXt6fICAgHh+gXd7gIF/goKCgoKEhoeGhn6IlYp+gYGAgIB/foB+f39/fn+Bfnx7e3x8fHx8fHx8fH59fHt8fHx8e3x8fHp6eXt8en2Fg4N/gYF+f35/gH6FgoF+gH9+foCFhoKAfn6Dhn99fX6AgIGAf39+fX19fX57fH1/f3+AfX9+f4yRjYyNj46Nh4SGhoWEhIODg4OCg4ODg4KBgYGBgICBgYGAgYGBgYGAgH9/f397en9/e3mAd3p/f31/f3+Af4KDhoaFf3+FgX5/gIB/gH5+f31/gIB/f4B/f319fHx9fn18fH19fX19fH58fXx7fXx8ent6fH19f4aEg4CAgX1+fX5/fouEgYZ+fXx8f36CgX99fX19gXx7fXx+gYSDgYB+fn5+fXx+f399foB+f36Eko2NjI+Ni4qGhIaEhISDg4OCg4KDgoOCgYGBgYGAgYGBgYB/fXx8fH1+f39/f397e399d352eH59fH19fX5+gYGCg4B6fX18fn6Af35/f35/fn+AgH+AgH9/fn9+fn5+fn1+fn99fH58fn1+fHt8fHx6e3p9f4CAhIOCf35/fHx8fXx8gYN+jH58e3t9fn1+fn17e3t9fHt7e3uAhoSChIOBf4B+f4KCgn9/goJ/gIuQjYyMjYuKiISEhIODg4ODgoKCgoKCgoKBgYGAgoGBgYKCf3+AgIB/fn18fH5/fn55fX52e3Z4fXx8fHt9fX6BgICAf31/f31+f39/foB/f39/f3+Af4GBgH99gH9/fn9+fn5/f3yCfX59fX17e319fHp8fH6AgoGAgIB9fH18fHx8fH18fnt/fnt7e3x8fH18e3t7e3x8enp9en6CfoKEhIKBgoGFhoWFhoaHhYGEkY+NioqLh4eFgoOEhISEg4KCgYGCgoKBgoGBgYGBgoGBgoKAgYKBgYCAgH9+e3x+fnx6fnh5dnd8fHx7e318f4GAf35/foB/f35/f35/gIB/f39/f39/gYKAfn6BgIB/f39/f39+fYN8fH19fH99fX19e3x+fn9/fn5/fnx9fXx8fHt+fnt8e3x8fHx9fH18fnx9fHt7e3x5e3x7e316fX5+f4CAg4eJiYmKiYuJhYiSj4yIiYeFhYOCgoOEhIOCgoKBgYKBgYKBgYGBgYKCgoGCgoCAgX98e3p6eXt9enx+fnl8eXh4dHx8fHx8fHx+gH9/f39/gIB/fn5+fX+AgH9/f3+Af4CDgoB/gIGAgIB/f4CBf358enx9fX59fX5+jIZ9fX57e4ODfX5+fX18fX19fX19fH18fXx9fX58fn19fX18e3t6fHt8fHt6e3t6enp7fn6DhYiHiIqLi4qJjJGQjoqIhoWEgoKCgoODg4OBgYGBgYGBgYGBgYGCgoOCgYKBgIGBf3+Af356eHl5en5+e3l6eH5zfHx8e3x8fH5+fn5/gH+AgIB/fn9+gIF/f4B/gIGAgoSEgYCAgYGAgX+AgYKBf39+f31+f357foGSjHx9f4qAjYx+fn19fX5+fX59fX18fn18fXx9fX1+fX1+fnx7e3t8fH18e3t7e3l6enh5e35/g4OEh4mKh4mOkI6MiYmFhISCgYKCgoKCgoGCgoKBgYGCgYKCgoGCgoKBgoKAgYGAfoCAf39+e3p5e319eHx6f3KBfXt7fXx8fn59fYGCf4GBgX9/gH+AgX9/gIGCgYGFg4SCgYGCgYKBgICBg4KAf4F/fX6Afnx/f4mCf36DkYSEg4F/fn18jYd9fX59fXx/fnx9fXx9fX5+fX5/fX19e3x9fnx8e3x9enp6eXl5e3t+foCBg4eEiI+Oi4qGhYSEg4KBgoKCgoGBgYGCgoKBgoKCgoKCgoKCgoGCgn+AgIB+f39/fn5/ent5fX16enp9cX6Cent9fX19fXp4f4KAgYKCgICBgYGBgICBgoKCgoaFhIKBgYGBg4F/gIKEgX9+gYB9foF+fX5/gIB9fn+EgH5+f31+fX2KhX1+f31+fn9/fX19fH5+fn99f4B9fX18fX9/fHx7fH17e3t6enp7e3x9fn2Ag4CJjouMiISFhYSDg4GCgoKCgYGBgoKBgoKCgoKCgoGBgoKBgYKCf4CAgH9/f39+fn59eXp6fXx5d3t0e4d8dHd9fn17e3Z2fYCBgoKBgYKCgoKBgYGDg4OChYaEg4GAgICDgX+AgYSBfn6Af31+gH59fn6AgH+Bf3+Af35/gH99f39/f3+Afn9/gH58fX18fn5+foF/gH2CgHx9gIB9e319fXx8fHx8e3t7fHt8fHx9fIqLiYiGhoWFhISDgYKBg4KAgIGCg4KCgoOCgoKCgoGCgoGBg4J/gIGAf39/fn5+fn57enp8fHt2e3R3f352cnt+fnt4dnd8gIGCgoKBgoODg4OCgoSDhIOFhoOCgX9/gIKAgICAg4F+foB/fX+AfX1+foCAf4J/gYGAgICBgH1/f3+AgICAgIB/fnx9fX19fn59g32AfoKAfX6AgX98fn59fX17fH58fXx8fHt8e3x9iYeHhYWHhYSFhIKCgoGDgYCAgoKDgoKCg4ODg4KBgYGBgYGCgH6AgYB/fn5+fn5+fn56e3p9goN9dXF6fHpxen59eXh0dICAgoKCgoKDhYOEg4KDhISEhIWEgYGAgH6AgoB+f36Bf35/f4B9foB9fX1+gH9/gYCBgYCAgIKBfn6Af4GAf4CAgH9+fX19fnx+fn19gYR/gH9+f4GBf31/f319fn1+fn1+fHt8enx7eoCHg4SEhYSEhIWDgYKBgYKBgICCgoOCgoOEg4SDg4KBgYKBgYOAfoCBf35+fn5+fX5+fnt7en6Jh354cnl9f3F6eHt4eXV1fYKDgoODg4OFhIWDg4OEhIODhIOBgH+Af4CBfn1+fn9+fn5+gH19f3x9fX6Af4CAgIKAgIGAg4KAf4B+gIF+gIGAgH9+fn5+fX1/fn6FhYGBgH+Ag4F/foGAf35/f4B/fn17ent6fHt6goWAg4KCgoKCg4GBgYCAgoGAgIKCg4KBg4SDhIKEgoGBgoGCgn9+gIF/fn1+fn5+fX59fXp7fIWEe3tzeXp8cHd1dnd5dXR6hISBhISDhIWFhoSDg4WEgoODgoCBf39/f4B9fX1+f31+f39/fn1+fH19foF/gIB/gIB/gIGDgoGAf36AgH+AgYCBgH9/f39/f4CAgIGCgoKBf4CDgn9/g4J/f4B/gX+Af3x7e3p8e3yCgH+Cf3+AgIKCgYF/f3+BgH6BgoKDgYGDg4KEgoSCgYGBf4GCgH6AgH9/fX5+fX19fn19e3t6gH94fHZ5eXtxdHh3dnh1cnmFhYKEhIKEhYWGhISChIOBg4GAgIF+f4B/gHx9fX6AfX5/f39+fX98fn5+gX+Bf39+f4B/gIOCg4B/f4GBgIKBgYGAgICAgIB/gIGAgIKDgYF/gISAfYGDhICAgX+BgYKBfXp7e3x8fH9+f4B9f399fYGAgH59fX9/foKBgYKBgIKCgoKBg4KCgYB/gYKAfn9/fn99fX1+fX19fX19ent7fHZ9eXh5enJ1eXl2d3dzdYaFg4WEgoSEhYSEhIGDgoGDgX+AgX5/gH6AfX19foB+f4B+fn99f3x/f3+BgIF/f3x+gH6AgYKDgYCAgYOEgoGAgYB/gYCAgYGAgYGBg4KBgX+Ag4B+goOEgICCgYKChIJ+e3t8fHx8fX1+fXp+fX14fn9/fHx8fn5+gYCBgYCAgoGBgYGDgoGBf4CAgoB9fn19f319fX59fH19fX16e3p8dnx6d3t4cnZ5e3Z2dnN0hoSEhYSChISFg4ODgYOBgYOBgIGBfX+BfoF9fX1/f39/gH5+f359fYB/gIGBgX9+fH5/fn5/gYJ/gYGCg4eFgX9/fn6Af4CAgICAgIKCgYCAfoCCf3+BgoOBgYOCg4OFgn99fX18e3x8eXp7en55e3l4f357fHt+fX1/f4F/gH6BgICAgoOCgYF/gIGBf31+fH1+fX19fX18fn58fXx5e3x4enx3endzeHd6c3Z2c3SGhISGg4KDhISDgoKCg4GCgoGAgYF9gIB+gH1+fX5/gIB/f39/f3x/f3+BgIGAf359f39+fn+BgH2AgIGDg4N/f359fn5/f4B/gIB/gYKBgH9+f4F+f4CCgYCBhIKEhIaEgH59fHx8fHp5dnl5enl2eXZ+fHt7e359e399gH99fX9/f3+BgoGBgX5/gYF+fX18fX19fX19fXx+jYF8fXl7e3p5fHd4eHR1dXhyd3d0doaEhIWEg4ODg4OCgYKDgoGDgn+Bf35/fn+AfX19fH6AgIB/f39/fIB/f4GAgYCAf3yAf35+fn9/fX5+gYGCgn5/fn5+fn5+f3+Af32AgIB+fn5/gX5+gIKCf4KDgoOEh4SAgH58fXx8e3x1eXl4eHh5d3t8e3t7foV9fn1/ent+fn59foGAgIGAfX6BgH59fXx9fX19fX18e32Dgnx8ent7e3p7d3Z4dXJzdnB4eXJ4hYWFhYOEhIOChIKBgYKBgIKBgIF/fn5+foB+fX58foCAgH+AgIB7gH6AgH+BgIB/fYF/fn5/f319fX6AgYKBfn9+fn59fX5/fn9+fH6Af35+fn+Cfn6AgIF+gYOCg4OGhICBfnx9fHx7fHh3e3h1eXd3eXx6e3t9kod9fH13en1+fn19f35+gH98foB/fn19fH19fX19fHt8ent9enp4e3x6ent4dHh1cXJ0cHh4cXmEhYWFg4SDgoODgoGBgoKAgoGAgIB9fn5/gH18fnyAgIGAgICAgHyAf4B+f4GAf39+gX9+f39/fX18f4CAgIB+f35+f318fn9/f358fYB/fn1+gIJ/foCAf36ChIKCg4WFgoJ+fX17e3x8eXd8eXd4d3d4e3t7e3yFin17end6fH19fHx9fX1/fnx9fn59fXx8fX5+fX18fHt6enx7e3p5enp7enhzd3VxcXNveHdxe4WGhYWDhYKBg4OBgoGBgoCBgICBgH5/fn9/fXx+fYCBgoGAgIGBfX6Af35/gX+Af3+BgH+Af319fH1/gICAgH9/f35/fXx+f39/f319f39+fn6CgYF/gIB/foGDgoGEg4SCgn5+fHx6fHt7eXt6d3N2d3h5e3p7eXp/fnt7d3p8fXx8fH59fH19fH19fXx8fX19fX99fXx9e3l7fHx7enp6enp6eHN2dXBwcm93dnJ7hYaEhYOEgoGDgoKBgYGCgYKBgYGAf4B/f399fX9+f4CBgYJ/goF9foF+fn+Bf4B/gIJ/gIB+fH58f3+BgICAf4B/f4B+fX5+f4B/f39/gH9/f4J/gICAgIB/gYGAgISBgoKAf39+f3x9fn56fYV+dHx9enp6enx5eXp6hoV3eXx8fHx8fXx8fHx8fX19fHx9fX19fn19fX16eX18fH16enp6enp5c3V1b29xb3d0c3yFhoOEgoOCgYKBgoKCgYKBgYGCgYCAgICAgH59gH+Af4GCgn+CgX+AgX5/gYB/f4CAgn+Bf319f35/f4KAgICAgIB/gIB+fn1/gH9+f4B/f39/gH+AgICAgH+AgYCBgYGCgYCAf39/fn1/fnqBk416fH18e315e3p6eHmBgXh5e3x8fXx8fHx8fHx9fX18fH18fn1+fn59fHp8fHt8fXt5enp6eXl0dXVvb3Fwd3N0fYWGg4OCg4KAgYCCgoGAgYGCgYKBgYCAgIGAfn6Af4GAgYKCgIKCgICCfoCBgX9/gX+BgIF/fH6Af3+AgoCAgICAf3+AgH9+fX6Afn2AgH9/f3+AgICAgYCAf4CAgYCBgYKCgICAf39/fX5/fIGGiXx8fnt7fnl6e3p7jn53d3l7fHt9fHx8fHt9fH19fX18fXx+fn5/f358enx9e3x9e3l6e3p5eXN0dW5zcXB4cnV6hYaDg4KDgoCAgIKCgX+CgYKBgoGBgYKAgYF/fn9/gYGCgYKBg4OAgYJ/gYGBf4CAgIB/gX99f4F/gICBgICAf4B+gICAf359foB+fn+Af39/gH9/gICBf4CBgH+BgIGCgoKAgICAgIB9foB9gIOCe35+e3x9e3p8fHyHeXh4eXx8fH17fHx9fX18fH19fn19fX5+f3+Af317fH18fHx7enl7e3l5c3J1bnZycHhxdXaFhYOEg4KCgYCBgoF/gIKCgoKDgYGDgoCCgYB/gICCgoKBg4KEhICBgX6BgoF/gICAgH+Cf36AgYCCgICAgIB/gH+AgIB/fn2Af39/f4CAgH+AgH+AgYGAgICAgIGAgYGBgYGAgYCAgH9/gH5/fX59fn57fXx9fHx8eHh1eHh5e3x8fXx7fHx8fX5/f39/fn19fn9/gIGAf3x9fHx9e3p7eXp8eHpzcnVud3FxenF2d4WFg4SDg4KCgYKDgICCgYSDg4SBgYOBgoKCgYCAgIKDgoCCgoSDf4GAfoKDgICBgICAf4CAf4GBgIKAf4CCgH9/gICAgIB/f4CAgH+AgICAgIB/f4CBgYCAgYCAgYGAgoOCgoCCgYGCgYB/gIB/gId+fnx7fXx7fX94d3Z5eXp8fXx8fXt8fH19fn5/gIGAfn1+gICAgoGAfH59fX58d3t6ent5eXNxdW53cHV6cXZ5hYWCg4KDg4KDhISAgIOBhoODg4GChICEg4KCgICCgoSBgYKBg4J/gIB/gYOCgYCBgYCAf4GBgYGAg4B/gIOCf35/goGAgH9+gYCBf4CAgYGBgYCAgIKBgYKBgX+BgYGBgoOCgoOBg4OCgYCBgH+AhH19fXx/fXp9f3t5dnp4eXt7fH19e3x9fX19fn+AgYGAgH+AgICDg4B9f35+fn15eXt6enp5c3J1b3dxd3lzd3uFgoKCgoOEgoOEg4CAg4OGg4ODgoKEgYSDgYOAgIKBg4GCgoGCgX6AgICCgYKCgYKCgIGAgICCgoGEgH6Bg4J/f4CDgoCBf4CCg4KAgYKBg4KDgoGBg4KChIGAgYOBgYKEg4KEhIODhIODgYGBgoCCf4B/fYB8enx/e3t3fHl5eXt6fX59fHx8fH1+foCBgYCAgIGBgYSEgH2Af39/f357e3t6e3p0cHhyeXR2eHR3e4SCg4KDg4SChIODgYKDhIaEgoOCgoSBhIOBg4CBg4KCgoKCgIKAf4GAgIKBgoGCgoKBgIGBgYKCgoOAfoGDgX9/gYSEgYN/goKBg4KCgoGEg4OEgYKEgoOCgoGCgoOBg4SDhIOEhISFg4SCgYOCgoOBgYGAgH58fIB9fHh8eXp5enx9f3x7fHx9fX18fICAgICAgYGBgYKBfoGAgICAf3t7e3p6enVweHd5dnV8dXZ8gICDgoODg4OEhISAgoOGhYWDg4KDhIKEhYKCgYKDg4GCgoKAgYB+gYCBgYKDgoKCgoGAgYKChIKCg4B/gIKBgICChIODgoGCgoGDgoKDg4ODg4SAgoSDg4OBgX+Bg4KDhYKEhISEhISDhISChIOEhIKBgoGBgHt9gX59eXx6enp9fHyBfXp8fH19fHp7fn5+gIB/gYGAgICAgIKBgIB/fX18fX18dnJ2eHh2dH92dX2Hh4OChIWDg4SFhICChYWEhIOCg4SEgYSFg4KCgoODgYOCgoCCgH2AgIGCg4KCgoKEgoGCgoOEgoKBgICBgoGAgYOFhIOCg4CCgoOCg4ODg4OEg4CCg4KEg4KCfoOBgoSEgoODhISEhIOEhIOEg4WEg4ODgoKAe4CBf3x8fXp6fH2AfX9/fHx6fH59fX19fn5/f39/gICAgH9+foCBgICAfnx9fX5/fn18fHh2f3Z3f4SHg4KDhoODhIaEgYKFhoWEhIODhISChIWFgoKDg4SCg4KDgoKBfoCAgoKDgoODg4SCgoKCg4OCg4GCgYGDgn+ChISDg4KEf4KEg4ODgoSDg4SCgIOEg4SDg4KCg4KChIOCg4OEhISEhIWEg4OEhYSFhIOBgoB9gYKAfXx8e3x8gH19foB+fn1/fnx8fX19fn5/fn+BgYGBgH99fX6BgYB+fn19fX59fX5+f3+AfH2AgYKCg4OGg4SDhoSBgoiHhYSDg4SEhYGFhYWDg4SDhIODgoOCg4F+gYGDg4SCg4OEhIOCg4KEg4ODgoKDgYOCf4KDg4ODgoOAgoWDg4ODhIODhIOBgoSEhYOCgoODgoGEg4GDg4SDg4SEhYSEhIWFhYWEg4ODf32BhIB9fXx8fHx/gX5/f39/fX99e3x9fX19fX5+f4CBgIGBgH59fH6Cf39+fn5+fX1/f39/gICAf4CEhIODg4WDhIOFf36CiouFhYSDgoOFgYaGhoOEhISEhIODg4OEgn+BgYODhYSFhIWEg4KEhISFhIODgoSDhYKBhISFhYaEgoCDh4SDg4OFhIWFhIGEg4OHgoOCg4GCgYSDgoODhYODhIWEhYWHh4aHhYSEhYSBf4GDf35+fH5+fX+BgH9+fHx/f358enx9fX19fX5+fn9/gIGBf319fIB/gH5+fn5+f3+BgYGBgYKAgYWFhIOEhIKEg4aAgoWFiomEhISEhYWCh4aGhISEhIWEhYSEg4SEgYKDg4OEhIaEhYSDg4SEg3yDhHuBhHd5g4F9hH5+cnWDgoF2foOFgH2BdYF6hH9/f3+FhIKDg4KBg4SDhISFg4SFhoSFhn2EeXx+f4N7hYOBhIOAf31+f31+gYOBfXt/fX6Afn18fHx9fX19fH19f4B/gYJ/fX18f4GBgICAgH+BgYGBgYKDg4KChoSEhIWEgYOEhYOEhYSKiIWFhYOFhYSGhoaDhISFhYWEhYWEhIWCgoOEhYWFhoSFhIOEhYWCaICFanx7cXF8gXOGc3R0fYKDdXNxg4ZzcHVyc3SDdnt9dYF/goOBgnZ5hYCDgIR/hYSChYWCaHpyc3N8gHKBg3+Dg32BfX5+fX6Cg4F8f4F9f4B9fXx8fHx9fHx8fn1+gX+BgX99fX2AgYKBgYGBgIGBgYKBgoKCgoSHhIWEhYSBgoSGhoOFg4aIhoaFg4aGhoeGh4OFhYaFg4KFhoSFhYODg4SEhoaGhIaEg4SFhn1xe4FweXZ+g3+CbnlwdXN8dnl5hnKEg3B2eHF2dHR1cnN0dml/gG5yb3R2bnVsd217c26Ah3ltfXJzdnN2bW53bHB5bHV9f398foGAgX2Af32Af4B/fX18fHx9fH1+f32Af4CAfnx/foCBgoCBgICAgYCAgIKDgoKEhYeGhoCChYODhYeGg4WFhYaHh4SDhoaIiYaHhIWGiIeEg4WGhYWEhIOFhIKFhoaFhoWEhoWHdnB0e3BydX+HhYNtdW92b3x1coR5eYd4cXR3bndod3pucHaCcoN+b3p5eW1vbnpvb213fXiGcHF6cHJ0ZoF1fm57eXNveX+Af31+gYB/e39+fIB+gIB+foCAgYB+fn9+foF/gH9+fYB9f4CBf4B+fn+BgH9+goOCgoSFh4eEfoeEg4OFh4aEhoWFhoaIhISGh4iIhoeEhoaLioWEhoeHhYOFhYWEgoWFhYWGhYWGhYZxdXByc29zenl+hHSIdHV+iHZugnKEhnluanJ/cW1zd3x/dXR8hH54cXV3bnl1enF2eHV6eYRyaW95eHBreXN6b3p3dnZwgYB/fn5/f356fn18f31/f359gIGDg4CCg4GBhIGBf4GBgH1/f4F+f35+f4GAfn6BgoCAgoSHhoODhoSFhYaHhoWFhYWGhoiFhYaFh4eFhoSGhomIhYSJi4iGhIaFhYWDhYWEhoaGhoaFg3iLeXKIentwcIWEeIV4eWtzfnl7a3KDh4N6fG16eXl0fYB2bm+AgG90fHV3cXl9fW1+dW+DhYZ6gHJye3x1cG96a3N8bnaCgYF+fn99fXp9e3x9fX9/fn1/f4KCf4GDgYGDgYB/gICAfn9+f31/fn1/gH58fYGAfn6Ag4iEhoSFhYWFhoeFhYWFhYeHiIaEhoWGhoWFhIWFhIWFhomKh4WEhoWGhoWGhoSGhoaGhoWGh4eHhoaEhoWGh4iHhYeGhoOHhoWFg4SFhoWGhIaEg4SEhoSEgYODhISFhIWEhYSGg4WGhYWEhIWHhoSEhYaFhX13hoOEhIOCgX1/fnt8e357fHx9f359fH9+gYB9f4F/f4GAfn5+gH5+f35+fX99fX5/fHt8f358fH+BiYaFhIaGhoWGhoWFhYWGhoeIhoSGhYeGhYWDhIWGhYSGhoaGhYSGhIWGhoaGhIeGh4eGhYeIiIiIhoSHhYaGiIaFiIeIhYeGhoiFhYaHhYaGhYOChYWGhYWDhYSEhIWEhoWEhYWDhoaFhYWEhoeGhISFhoOFhIKEg4OFg4OBfYB/e3t8fnt8fH1/fnx8fn2Afn1/gH5+gH99fXyAfX5+fn5+f3x8fX57fHx/fHt7fn+Ih4SEiIaGhYeGhYWEhoaGhoiHhIWGh4aFhIODhIaFhIeFhoaFhYaEhYaGh4eFh4aJiIaGiIeIiYiFhYiFhoeGh4aHhoeFh4eGh4WFhoeFh4aFgoOFhoaEhIOEhIOEhoSGhYWFhYOGhoWGhYSGhoWEhIWFg4SHhYOCg4SDhIJ+gYB8e31+e3x7fn59fHx+fX5+fX9+fX1+fnx9fH98fn58fYGAfHx8fXx8fH56e3t8foiHgoWIh4eGhoaGhISGhoeGiIaEhYSHhoSFh4OEhYSFh4SFhoaFhoSGhoeHhoaIh4mIhoaIh4iKiIWHiIWHh4WHhoeGh4WIiIeHhYaGh4WGhoWBhISFhoWFhISEg4SFhIaGhoWGhIaFhoaFhYaGhYSDhISDg4eDhIGChISDgoCAgHt7fn18fHx+fXx8fH19fH18fn18fX18fHx8fXx+fXt8gX99fH18fnx8fHp6fHx9iIeChoiHhoeGhoaEhYaFhoaGhYOFhIaFhIiJg4GEg4SGhIaGhoaGhIeHiIiHh4eIioiGh4iHiImIhYiHhYaGhoeHh4WHhoiIh4eFh4eHhYaHhIKEg4SGhYeFhISEhISFhoaGhoaFh4WFh4WGhYaFhIOEg4OEh4GDgIKDg4KCgn+Ae31/fXx8fH59fH19fH57fHx7fHx9fXt7e318e359e3x/fX18fX1+fXx6ent7fHyIh4KGhoaGh4aGhYSFhoWFhYWEg4WChoSDiId/enqChYaEhoaFh4aEh4eIiIiHhoiKh4aHh4eIiYeFiIeFh4eGhoeHhYeGiIiHhoWHh4iGhoeDg4SEg4aGh4WFhISEhYaGhoaGhYaHhoaHhoaEhoWDg4ODgoOGgYN+goKDgIOCf398f39+fHx9f318fX18fXt7e3p7fHx8e3t7fnt7fXt6e358fHx8fX5/fXt6fHp8fImHg4aFhoWGhoWEhIWFhYWFhIOBhIGGhIKEhHyAhn+ChYWGhYWGhYSHh4iIiIaFiYqHhYeGh4eIh4WIhYaHiIaGh4eGh4aIiIeFhoeGh4WFiIOEhoWDhoaHhoWEg4WFhoaGhoaFhoaHhoeHhYOFhYOBgoKBhIWCg36BgoF/g4F/fn5/fn98fH1/fXt9fXx9enp7eXt8fXt7e3t+fHx8fHp7fXx8fHx+fYF8e3t7e3x7iYeEhoSGhIaGhYSFhoWEhIOEgoCDgYaDgYJ/eoSMe4CEhYeGhoaFhIeIh4aHhYWHioeEh4WGhoiGhYeFhoeIhoaIiIeHhoeIhoSGhoaHhYWHg4SFhIeGhoeFhISDhYWGhoeGhoWGhoaFhoaEg4SFgoGCgYCEg4OCfYGBf36DgX5/f4B8f3x9fX59e319fH15enp5e319enp7e318fXx8enp9fHx9fH5+gHt7e3x+fXyIh4WGhYeEhoSFhYWFhYODgYOBgIKBhYJ/gH9/fXx7gYSFhoaEhYSEh4eGhoaFhIaJhoKGhIaGhoWFh4WHiImGhYiHiYeGhoeFhIaFhYeFhIeDhIWEiIaGh4WFhIKFhYaFhoaHhIaGhoaFhoKDg4WAgIGAgIOBg4B8gYB+foKAfYB/gXx/fH1+fX57fn18fHl6enl6fX15ent7fHt8e3t6e319fH18f35+fHt7fX59fIiGhYaGhoSFhYSFhYSDgoKAgoGAgIGDgn5+foB5en2Ag4OFh4WEg4OHhoOEhYSChYiFgoSDg4WFhYWHh4aIiIWFiIeJh4aFhYWDhoSFh4OEhoSEhYSHhoWGhYaEgoWFhoaGhoaEhYaGhYWFgoKDg39+gICAgYCDgHuBf31+gn5+gH6Afn99fX59f3t/fXt6eXp6eXp8fXl6ent7enx7e3t7fH19fXyAfn18fHx/fnx7h4WFhoaGhoSFhIWDhYKBgICAgYB+f4KCfX5/f3t/f4KDg4WGhYSDg4aDgYOEgoCFh4WCg4GBhIWEhIaGh4eHhYWIhomHhYSEhIKFg4SGgoOFhIWGhIeGhYWFhoOEhYSFhoWGhISFhIWDhYSAgIKDf35/f39/gIN/fIB+fX+CfYCBfn6Bfn5+fX1/e398e3p5enp5ent8eXp6e3t7fHp7e3t8fX59fYB9fXx8fYB/fXyGg4aGhoaFg4SDhoKFgYGAf3+AgH5/gYJ9fn9/foCAgoKChISDg4GChIGAg4KBgISFhIKBf4CCg4OEhYWHhoaEhYeFh4WGgoOCgoOCgoWBg4WEhIaEhoaHhoaFgoSEg4SGhYWDhIODhIKEhIB/goJ/fX5/fn5/hH57f3x8gIF9gYB9foN9fn59fX57fnt7enl7enl6ent5enp6e3t8enx8fHx+fn1/gXx9fHx9f4B+gIaEhYWEh4SEg4KGgoOAgYB+fn+AfX9/gXx9f39+fn+BgYKEg4KBgYKCf4CBgoCAgoWEgoB/gIGCgYOFhYeFhISGhoOFg4WBgoGBgoGCg4GChISEhYWGh4eGhYWEg4ODhIWFhIGDgYOChIODgH+AgX59fX5+fH6Dfnx+fHyBgH6Cf35/gnx/fn19fHx8e3t6enp6eXt5enp5enp6e3x5e317e35/f4GAfX59fX1/gICAhoSEhYSFgoSCgoSCgoCBgH59fn9+fn6AfX2Af35+foGBgoODgoSHgYF+gICBf3+ChIOBf35/gIJ/goWEhYOCg4WFgoSBg4CBgIGBgYKBgIGEg4OGhYWHh4WEhIWCgoKDhYSCgYGBgYCFg4F/foB/fnx9fn18foN9e358fYF/gIN9fYCBf35/fXx8fH17e3p5enl5e3l6enl6ent7e3p7fXx8f3+BgoB+gH+AgH+AgIDKysrKysrKysrKysrLy8vLy8vLy8vLy8zMzMzNzc3Nzc3Nzc3NzczMzMvLy8vLy8vLy8vLy8vLzMvLy8vLy8vLy8vLy8vMzMzMzM3Nzc7Oz8/Pz9DQ0NHR0dLS0tLS0tLT09PT0tLS0tLS0tPT09TU1NTU09PT09PT09PT09PT09PT09PT09PT09PT09PT09PS0tLS0tLS0tLS0tPT09PT1NTV1dXV1dXV1dXV1dXV1dXV1NTU1NTT09PT09PT09PT09TU09PU1NTU1NTU1NTU09PT09PS0tLS0tPT09TU1NTU1NPT09LS0tLS0tLR0dHR0dPHhnNlYFtLWWdVTUZIQD03Nzg5Nzw8PDo8Oz42Oj04PDs6OTg3ODs7Oj87PTs8PD47P0E/QkJBQ0RFREE+PTw7QENDQUBDQ0FBR0hHSUtSwtXS09PT09TU1NTU1NTU1NTU1NXV1dXV1dXV1dXVysrKysrKysrKysrKy8vLy8vLy8vLy8vMzMzMzMzNzc3Nzc3Nzc3MzMzMy8vLy8vLy8vLy8vLzMzMy8vLy8vLy8vLy8vLzMzMzc3Nzc3Oz8/P0NDQ0NHR0tLS0tLS09PT09PT09PT09PS09PT09TU1NTU1NTU09PT09PT09PT09PT09PT1NTU1NTU1NTT09PT09LS0tLS0tLT09PT09PU1NTU1dXV1dXV1dXV1dXV1dXV1dXV1NTU1NPT09PT09PT09PU1NPT09TU1NTU1NTU1NPT09PS0tLS0tPT09PU1NTU1NTU09PT09PS0tLS0tLR0dHSzIxyZ2BcTVllUktHSz87Mzc4Ozg5Pj05PDpBOjs9Nzs8PDo6Nzg6Oz0/Oz88PTw/Pj9BPUFBPkNDREJAQT46Oz9DREFDRERCQklHSEhJTr7V0tPT09TU1NTU1NTU1NTU1NXV1dXV1dXV1dXV1crKy8vKysrKysrKy8vLy8vLy8vLy8vLy8zMzMzMzM3Nzc3Nzc3NzMzMzMzMy8vLy8vMzMzMzMzMzMzLy8zMzMzLy8vLzMzMzc3Nzc3Ozs/P0NDQ0NDR0dLS0tLS09PT09PT09PU09PT09PT09TU1NXV1dTU1NTT09PU1NPT09PT09PT1NTU1NTU1NTU1NPT09PS0tLS0tLS0tPT09PT1NTV1dXV1dXV1dXV1dXV1tbV1dXV1dTU1NTT09PT09PT09PU1NTU09TU1NTU1NTU1NTT09PT0tLS0tLT09PU1NTU1NTU1NTU09PT09PT0tLS0tHR0s+Sd2hfXk9XZ01LRks9ODc2NTk5OTw+OT88Qzo7PDc5PD07OTc5Ojw9QDs+PT47PD48PT5BQD5EQ0NDP0E9Ojs9QkNFQ0NEQT9FSEpJSky61dPT09TU1NTU1NTU1NTV1dXV1dXV1dXV1dXV1dXLy8vLy8vLy8rKysvLy8vLy8vLy8zLy8vMzMzMzMzNzc3Nzc3Nzc3MzMzMzMzMzMzMzMzMzMzMzczMzMzMzMzMzMzMzMzMzc3Nzc3Ozs/Pz9DQ0NDQ0dHS0tPT09PT09PT09TU1NTU09TU1NTU1NTV1dXU1NTU1NPU1NTU09PT09TU1NTU1dTU1NTV1dTU09PT09LS0tLS0tLS09PT09TU1dXV1dbW1dXV1dXV1tbW1tXV1dXV1NTU1NTT09PT09PT1NTU1NTU1NTU1NTU1NTU09PT09LS0tLT09PU1NTU1dXV1dTU1NTT09PT09PT0tLS0dHRmn5nYWJOVWpKSElLPzw6OTM3Njc2PTs+Oj06Ojo4ODo7Ozg4Ojs7PD46PT09Ojw/PD0/QkA/Q0RDRD5APT08QENEQ0JEQkQ+REhJSUtMttfT09TU1NTU1NXV1dXV1dXV1dXV1dXV1dXV1dXVy8vLy8vLy8vLy8vLy8vLy8vLy8zMzMzMzMzMzMzNzc3Nzc3Nzc3Nzc3MzMzMzMzMzMzMzMzNzc3NzczMzMzMzMzMzMzMzc3Nzc3Ozs7Pz8/Q0NDQ0NHS0tLT09PT09PT1NTU1NTU1NTU1NTU1NTV1dXV1NTU1NPT1NTU1NTU1NTU1NTU1dXV1NXV1dXV1NTU09PT09PS0tLT09PT09PU1NXV1dbW1tXV1dbW1tbW1tbW1dXV1dXU1NTU1NTU1NTU1NTU1NTU1NTU1NXU1NTU1NTT09PT09PT09PU1NTU1dXV1dXV1dTU1NTU09PT09PS0tLR0p+DaV9kU1hsSEhIS0A9Nzg0NzY6Oj87RDw8Ojw8OTg6OTo6Ojs8Ojo7OT49Pjk9QDs/QUFCP0JCQUM9Pz8+PEBCRUNDQkBBO0ZJR01MSbLY09TU1NTU1NXV1dXV1dXV1dXW1tbW1tbV1dXW1svLy8vLy8vLy8vLy8vLy8vLy8vMzMzMzMzMzM3Nzc3Nzc3Nzc3Ozc3NzczMzMzMzMzMzc3Nzc3Nzc3Nzc3Nzc3Nzc3Mzc3Nzs7Ozs7Pz8/P0NDQ0NHS0tLS09PT09PT09TU1NTU1NTU1NTU1NTV1NXV1dTU1NTU1NTU1NTU1NTV1NTU1dXV1dXV1dXV1dTU1NTU1NPT09PT09PT09PU1NXV1dbW1tbW1tbW1tbW1tbW1tbV1dXV1dTU1NTU1NTU1NTU1NTV1NTU1NXV1dXU1NTU1NTT09PT09PT1NTU1dXV1dXV1dXU1NTU1NTT09PT09LS0tSjiGxfZlJWakdIR0lBPjM2Njo7PDhDPEJBPjtBPDg5Ojw6Ojw8PDk8PTo7PD09PD89QD9AQT9AQUBCPD4+PzxCQ0NDRkBBQT1ISklOTUeu2NPU1NTV1dXV1dXV1dXV1dbW1tbW1tbW1tbW1tbMzMvLy8rKysvLy8vLy8vLy8vMzMzNzc3Nzc3Nzc3Nzc3Nzc3Nzs7Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Ozs3Nzc3Nzc3Nzc3Nzs7Ozs7Oz8/P0NDQ0NHR0dLS0tPT09PT09TU1NTU1NTU1NTU1NTU1NTV1dXV1dXU1NTU1NTU1NTU1dXV1dXU1NXV1dXV1dXU1NTU1NTU09PT09TU1NTU1NXV1dbW1tbW1tbW1tbW1tbX19bW1tXV1dXV1dXV1dXV1dTU1NTU1dXV1dXV1dXU1NTU1NTU09PT09PT1NTU1NXV1dXV1dXV1dXV1NTU1NPT09PT0tLWroprY2VSWGhMSkdJQjg0OTQ6Ozo5QDk+Q0U/PDw5OTk9Oj07PDw6PTw7OTw9Ozs/PUA9PT5AQD9CQT5APD05QERDQkFBQj48SEpLTU5IqNnU1NXV1dXV1dXV1dXW1tbW1tbW1tbW1tbW1tbWzMzQ0dDQ0NDQ0dHR0dHR0c3Ky8vLzMzMzMzMzMzMzM3Nzc3Nzc7Ozs3Nzc3Nzc/Pz8/Pz8/Pz8/Pz9DQ0dHR0dHR0dHR0dHS0tHV2djY2NnZ2dra2tvb29vZ2dnZ2dna2tra2tra2tjW19fX19fX19jX19fX19XV1dXV1dXV1dXV1dXV2Nvc3dzc3Nzd3Nvb29vb2tra2tra2tra2trb3NzX1dXV1dXV1dXV1dXW1tbX1tbW1tbV1dXV1dXV1dXV1dTU1dXV1dXV1dXU1NTU1NTU1NTU09PU1NTU1NXV1dXW1dXV1dXV1dTU1NTT09PT09PS1bqKa2hoUlhlSUlMTkA5OTo0O0E8Nz05QUM9QD89ODo6Ozk9Oz4/Ojs8PDo7PDo7Pj1APT8/P0FAQUE/QTw8Oz5BRENBREA9PElJSk1ORqPa09TV1dXV1dXV1dXW1tbW1tbW1tbW1tbW1tbW1szNloSGhoaGhoeHh4eHh4Ky4t3d3t7e3t7e3t7e3t3S0NDQ0NDQ0NDQ0NDQ0ci5ubm5ubm5ubm5ubq6t6WkpKSkpKSkpKSkpKSnhmBjY2NjY2NjY2NkZGRlhIuKioqKioqKioqKioemuri4uLi4uLi4uLi4uLrR1NTU1NTU1NTU1NTU2K58gYKCgoKCgoGBgYGBg4uKioqKioqKioqKiouHvebh4uLi4uLi4uLj4+Pi2NfX1tbW1tbW1tbV1dXV1dXV1dXV1dbW1dXV1dXV1dTU1NTU1NTU1NTV1dXV1dXW1dXV1dXV1dXV1NTU1NTT09PT09XDkXFrak5TYkxMVk08Ojo3Nz5DPjg+Oj8/QTw/QDc7Ojs7PTs+Pjo7PD48Oz07PT8+QDw/Pz1AQEBBPj88PjxAQUVCQkZAQD9HSEpLT0ae2tXV1dXV1dXW1tbW1tbW1tbW1tbW19fX19fX19fMzm5QU1NTU1NUVFRUVFNMoPPr6+rq6urq6urq6uvp1dLS0tLS0tLS0tLS0tTEqaqqqqqqqqqqqqqqq6aGhIWFhYWFhYWFhYWFik4MEhISEhISEhISEhIRE0pUU1NTU1NTU1NTU1NPg6ejo6Ojo6Ojo6Ojo6KmztPS0tLS0tLS0tLS0tmRO0RERERERENDQ0REQ0ZTU1NTU1NTU1NTU1NTS6ry6+vr6+vr6+vr6+vr6dnX19fX1tbW1tbW1tbW1dXV1dXV1dbW1tbV1dXV1dXV1dXV1dTU1NTV1dXV1dXW1tXV1dXV1dXV1dXU1NTU1NTU1NPUy5h2bGlKTl9NUlVNPjw8Nzs/Qz42Ojc+Pzs8QkA4PDk9Ozw6PD07PTs9Ozs9PD0+PT07QT08QUBBQT08Pzw7QEJDQURFPUFAQ0ZLS09GmNzV1dXV1dbW1tbW1tbW1tbW1tfX19fX19fX19fXzM5xVFhXV1dYWFhYWFhXUKHx6enp6enp6enq6unq6dXS0tLS0tLS0tLS0tLUxaqrq6urq6urq6urq6yoiIeHh4eHh4eHh4eHh41SEhgYGBgYGBgYGBgYFxpOWVdXV1dXV1dXV1dXU4WopKSkpKSkpKSkpKSkp83T0tLS0tLS0tHR0dLZlEBISUlJSUlJSEhISEdKV1dXV1dXV1dXV1dXV0+r8erq6urq6urq6urq6unZ19jX19fX19fX1tbW1tbW1tbW1tbW1tbW1tbV1dXV1dXV1dXV1dXV1dXV1dXW1tbW1tXV1dXV1dXV1dXU1NTU1NTU1NGcenFpSlRdT1JVTkQ+Pzs/QEA4Ojs4PDw8PD46Ojs4Ozk5Ozw7Ojw5Ozs8Ozo9PT0+PUE/Pj8/Pj08PT88PEFBQ0FERTw+QEVGSktNRpPc1dXV1tbW1tbW1tbW1tbW1tfX19fX19fX19fX183OeF5hYGBgYGFhYWFgYFqk7ufn5+fn5+fn5+fn5+bV0dLS0tLS0tLS0tLS08Wtrq6urq6urq6urq6vq46NjY2NjY2NjY2NjY2SXSInJycnJycoKCgoKCcpWmNiYWJhYmJiYmJiYl6MrKmpqampqampqampqazO09LS0tLS0tLS0dLS2ZlNVFRUVFRUVFRUVFVUVmBiYmJiYmJiYmJiYmJbr+/p6enp6enp6enp6enn2djY2NjY19fX19fX19fX19fX19bW1tfX19fW1tbW1tbV1dXV1dXV1dXV1dXV1tbW1tbW1tbW1tbV1dXV1dXU1NTU1NTWo3txZElbYE5OVU9AQT89REI+Oz06OTs6PTw7PDs6OTg5OTs8Ozw8Ojo7PDo7QD08PTxAQTxBQTs7PEA/PD1CP0RDQ0U8PkJERkpMTEWN3NXV1tbW1tbW1tbW1tbX19fX19fX19fY2NjY2NjNzcfFxcXFxcXFxcXFxcXEy9DPz8/Pz8/Pz9DQ0NDQz87Ozs7Ozs7Ozs/Oz87NzMzMzMzMzMzMzMzMzMvJycrKysrKysrKysrKysfCw8PExMTExcXFxsbGxsvMy8zLzMzNzMzMzMzLz9HR0tLS0tLS0tLS0tLS1dXV1dXV1dXV1NTU1dXQy8vKysrKysvLysvLy8vNzc3Nzc3Nzc3Nzc3NzdTY2NnZ2dnZ2dnZ2dnZ2djY2NjY2NjY2NjY2NfX19fX19fX1tfX19fX19bW1tbW1tbW1tXV1dXV1dXV1dbV1dbW1tbW1tbW1tXV1dXV1dTU1NTU169/cF5GXmJQUVdOR0ZDQ0lBPz07PDo8N0BBPD04Ojo4OTg7Pzs8PDs7PDw8PD87PD46Pj44PkI8Pj1BPjw+QkBERUNAPD5APkNJSUtEh9zV1tbW1tbW1tbW1tbX19fX19fX19jY2NjY2NjYzs3Pz8/Pz8/Pz8/Pz9PPz87MzczP09LSzs3P0s7Ozs7Ozs7O09TQz87S1M/OztPTz8/Pz8/Pz8/Pz8/Pz8/P0NDQ0NDR0dHR0dHS09PU1NTU1dXV1tbW1tfW1tbX1tfX19fX19fX19bW1tbW1tbW1tbW1tbW1tbV1dXV1dXV1dTU1NTU1dfX19fX19fX19fX2NjX2NjY2NjZ2dnZ2dnZ2dnY19jY2NjY2NjY2NnZ2dnZ2dnZ2djY2NjY2NjY2NjY2NjX19fX19jY19fX1tbW1tbW1tbW1tbW1tbW1dbW1dbW1tbW1tbW1tbW1tXV1dXV1NTV1di4gm9XSl9jUlFaS0hBQTxCPT07Oj4+PD4/PT0/ODk6OTk3OD48PD47Ozw7PDs/PT0+OTs7OT0+P0A+QD07OkI/QkNCPz0+QD5CRUdKQoDc1tbW1tbW1tbW19fX19fX19fX2NjY2NjY2NjY2M7Ozs7Ozs7Nzc3Nzsqfys3Nzc3QuYOEi8fTwJrLz87Ozs7O0KaSxdHSqKDQz9GkodDOzs7Ozs7Ozs7Ozs7Oz8/Pz8/P0NDQ0NDQ0NDR0dHR0tLT09PU1NTU1NTV1dXV1dXV1dXV1dXV1dXV1dXW1tbV1dXV1dbW1tbV1dXV1dXV1NTU1NXV1dXV1dXV1dXW1tbW1tbW1tbX19fX19fX19fY2NjY2NjY2NjY2NnZ2dnZ2dnZ2dnZ2dnY2NjY2NjY2NjY2NjY2NjY2NfX19fX1tbW1tbW1tbW1tbW1tXV1tbW1tbW1tbW1tbW1tbW1dXV1dXV1dXYwIBuVU9gY1dZW0xMQ0A9PTs9Ojw9Qj5CQkA8Ojg5ODo6Ojc7Pz4/PDw7PDo5Pzw8PTg5PD9BPj09PUFAPTtBQkBCQz47QD9BQUlHSkF629bW1tbW1tbX19fX19fX19jY2NjY2NnZ2djY2dnOzs7Ozs7Ozs7OzdKpj63Rzs7Ozpu3tqSiwJOerNPOzs7O0qqdrJTOs56jp9avn6Gp0s7Ozs7Ozs7Ozs7Pz8/Pz8/Pz9DQ0NHR0dHR0dHS0tLT09TU1NTU1dXV1dXV1dXV1dXV1dXV1dXV1dXW1tbW1tXV1dbW1tbW1tXV1dXV1dXU1dXV1dXV1dXW1tbW1tbW1tbW1tfX19fX19jX19fY2NjY2NjY2djY2dnZ2dnZ2dnZ2dnZ2dnZ2djY2NjY2NjY2dnY2NjZ2NjY19fX19fX19bW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tXV1dXV1dXV18h/b1pTYWVeXVxPSkQ9QD8+PDc6Pjk/RD5AOTg3ODk7Ozw4OT89PTw9PD47OkE7OTs5OzxDQDw7PT5AQT49QkQ/QkM9PT8+Pz5ISUg/ddrW1tbX19fX19fX19fX2NjY2NjZ2dnZ2dnZ2dnZzs7Ozs7Ozs7Ozs/Inrym0tDQzsqgl36Cw6abr6fUz8/P0MmXmYWlq6Gak53AnpiVnMjQzs7Ozs7Ozs7Oz8/Pz8/Pz8/Q0NDR0dHR0dLS0tPT09TU1dXV1dXV1dXV1dXV1dXV1dXV1dXV1tbW1tbW1tbV1dXV1dXW1tbV1dXV1dXV1dXV1dXW1tbW1tbW1tbW1tbW1tfX19fX19jY2NjY2NjY2NjY2NjZ2dnZ2dna2dnZ2dnZ2dnZ2dnZ2djY2NjY2NnZ2dnZ2dnY2NjY2NfX19fX19fX19bW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1dbV1dXV1dfNiHNdWGloXl9gT0lGOkFAPj88PDk2P0I/Qjo2NDc6Ozo8Ojk+PD49PTs/PTxBPjw8Ojw8PTw6PEA9QEI+PkFCPUNDPT0+Oz9BRUtIQHDZ1tbX19fX19fX19fY2NjY2NjZ2dnZ2dnZ2dnZ2c/Pz8/Pz87Ozs7SrKWnqdXAvNLHnY+ey9PJipmq1M/Pz8/RpLC9mouboZy0mJyinbCy08/Pz8/Pz8/Pz8/Pz8/Pz8/Q0NDQ0dHS0tLS09PT1NTU1dXV1dXV1dbW1tbW1dbW1tbW1tbV1tbW1tbW1tbW1dXV1dXV1dXW1dXV1dXV1dXV1dXW1tbW1tbW1tfX19fX19fX19fX19jY2NjY2NjY2NjY2NnZ2dnZ2dnZ2tnZ2dnZ2dnZ2dnZ2dnZ2dnY2dnZ2dnZ2dnZ2dnY2NjY19fX19fX19fX19bW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbV1dXW0JB1W1tqaWFeXVNOSTxDQEE+QD46OEVAP0M6NzQ5Ojo5Ozs4Oz0/Pj49QT08P0A9Pjw8PDw8Oj1AQD8/PT5CQD9AQkA8QD0+QUVLRz9r19fX19fX19fX2NjY2NjY2NjZ2dnZ2dnZ2dnZ2tnPz8/Pz8/Pz8/QzJ2Nl6zQmpfKxZ6ynpbN1q2ZqtTPz8/Pz9DVuZyHnZatuYaelq+zqtXQ0M/Pz8/Pz8/Pz8/Pz8/P0NDQ0dHS0tLT09PT1NTU1NXV1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbV1dXV1dXV1dXV1dXV1dXV1dXW1tbW1tbW19fX19fX19fX19fY19fY2NjY2NjY2NjY2NjZ2dnZ2dnZ2drZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2djY2NjY2NfX19fX19fW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1dXV1tKUcl5ea2tqZV1PTEc/RENDQDo9OzxCPD09OTY0Ojk5Ojo5Nzs/QDs8PUA8PEE+PD07PTw/PDo8Q0A+PTs9QD5CPkBBPkA9QD9GSUQ/ZtXX19fX19fY2NjY2NjY2NnZ2dna2tra2tra2traz8/Pz8/Pz8/P07GigJuvyaCjv8qcpYynrdiqmarUz8/Pz8/Q0Zqij5yBoJZ4m4Sdk6TV0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NHR0tLT09PT1NTU1NXV1dbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1dXV1dXV1dbW1tXW1tbW1tbV1tbW1tbX19fX19fX19fX19fY2NjY2NjY2NjY2NjY2NjY2dnZ2dnZ2dna2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2djZ2djY2NjY2NfX19fX19bW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbSk3BgXnBoZmVaUUhHQkVDQEA3Ojo8Pjo8OTc2NTk6Njo8Ozc8QEA8Ojo9Ojw/Pj08OUA8PDo6OT9APT08PUBBQz9APz5BOz9ARkpCP2LS2NfX2NjY2NjY2NjY2dnZ2dnZ2tra29vb29vb28/Pz8/Pz8/P0M6fkGyclteqo9PSrqa1mJ/Vqpmq1M/Q0NDQ1aekpaybqIiceZ+phZmk1dHR0NDQ0dHQ0NDQ0NDQ0NDQ0NHR0tLT09PT1NTU1dXV1dbW1tbX19bW1tbW1tbW1tbX1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tfW1tfX19jY2NfX19fX2NjY2NjY2NjY2NnZ2dnZ2dnZ2dnZ2dna2tnZ2dnZ2dnZ2dnZ2dnZ2dnZ2djY2dnZ2dnZ2dnZ2dnZ2NjY2NjY2NjX19fX1tbW1tbW1tbW1tbW1tbX19fX19fW1tbW1tbX0pNuYFxxZGdkWlVKQENGQ0FBODs/PD07PDw3NTU4OTY4Ozo5PDo+Pzw9PTk8Pz49Ojo+OTw6Ojg+Pzw9PTw+QEFDQT48PDpCRERKRkJd0NnX19jY2NjY2NjY2dnZ2dna2trb29vb29vb29vPz8/Pz8/Pz9G9n8O31pfA09HQ0srSzZeb1KqZq9XRz9DQ0sCdosy2ta+mnIq9raaYr9bR0dHR0dHR0dHR0NDR0dHR0dHR0tLT09PU1NTV1dXV1tbW1tfX19fX19bW1tbW1tfX19fW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW19fX19fY2NjY2NjY2NjY2NjY2djZ2dnZ2dnZ2dnZ2dnZ2drZ2tnZ2dnZ2dnZ2dnZ2dnZ2djY2NjY2NjZ2dnZ2dnZ2dnZ2dnY2NjY2NjY2NfX19fX19fX19fW1tfX1tbX19fX19fX19fX19bW19GRbF1cb2doYl1PRj9ISEdFQDw8Pj48PT08NzU2Ojk2OTs6Ojs4QD86PDw5PD49Ozs6Pzk/Ojs5PT49Pjw7PTxAQ0I/Pz47Q0ZGR0hEWc3a2NjY2NjZ2dnZ2dnZ2dna2trb29vb29vb29vb0NDQz8/Pz8/Pz5V+e6WS1KKa08ySl6ObodirmavV0pem09SkoI+5wKOXl52lp5aYm7vV0dHR0dHR0dHR0dHR0dHR0tLS0tLS09PU1NTV1dXV1tbW19fX19fX19fX19fX19fX19fX1tbW1tbW1tbW1tbX19bW1tbW1tbW1tbW1tbW1tbW1tbW1tfX19fY2NjY2NjY2NjY2NjY2dnZ2dnZ2dnZ2dnZ2dnZ2tra2tra2tnZ2dnZ2dnZ2dnZ2djY2NjY2NjZ2dnZ2tnZ2dnZ2dnZ2djY2NjY2NjY2NjX19fX19fX19fX19fX19fX19fX19fX19fX1tfPjGRWXnBrXGBgTkVITUlJT0M+OkI9PUBDOzU1Nzw6Nzo7Ojo7OT09OTo6OT0+Pz07OT47PDo8Ozk+PD47PD0+QENCPz5BPEFDR0ZGRVXJ29jY2NnZ2dnZ2dnZ2dra2tvb29vb29zc3Nzc3NDQ0NDQ0M/Pz9DR1aeZrcmjqL7KnbGdo7XZqZup2LirocjGpr2Vkaijq6Sb0J+rpJzR09LS0tLS0tLS0tLR0dHS0tLT0tPT09PU1NTV1dbW1tbX19fX19fX19fX19fX19fX19fX19bW1tbW1tfX19fX19fW1tbW1tbW1tbX19fW1tbW1tbW1tbX19fX2NjY2NjY2NnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dra2tra2tra2trZ2dnZ2dnZ2dnZ2djY2NjY2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnY2dnY2NjY2NjX19fX19fX19fX19fX19fY2NfX19fX19fYzYZdV2JvZE9dVEtIRlNRS0xAPj1EPD9DRj01NTc7OTY6Ozo8PTo7Pzo6OTg6PT0/Pjs/Oz49Ojs5Pjs9PD0+QURCQD8+PzxAQUVHRURSxdvY2dnZ2dnZ2dnZ2tra2tvb29vb3Nzc3Nzc3NzQ0NDQ0NDQ0NDQ0NO5gL3Tm5bP1LWLkZ/T1LyBu9TOlKDUyo6Tl5CoyZCNt9fCj4281dLS0tLS0tLS0tLS0tLS0tLT09PT09PU1NXV1dbW1tfX19fX19fY2NjY19fX19fX19fX19fX19fW1tbX19fX19fW1tbW1tbW1tbW19fX1tbW1tbW1tbX19fX19jY2NjY2NnZ2dnZ2dnZ2dnZ2tnZ2tra2tra2tra29ra2tra2tnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2NjY2NjX19fX19fX19fY2NjY2NjY2NjY2NfX2ct+WlVqaltMX01KTEpVTEZCPDw/R0VHS0g9NjU3Ojk3OTo7Ojw9OT45OTo4Oz0+PkE+PTk8PDo9Pj46PTk5Oj9FQUA+PT8/QkBHRURFUMHc2dnZ2dnZ2dna2trb29vb29vb3Nzc3Nzc3dzc0NDQ0NDQ0NDQ0NDQ0cHR0crI0tDUxLjS0tHSwtLQ08fM0tTCr7Cz0NXHw9XR1cXE1dLS0tLS09PT09PT09LS0tPT09PU1NTU1NXV1dbW1tfX19fX19fX2NjY2NjX19fX2NfX19fX19fX19fX19fX19fX1tbW1tbW1tbW1tfX1tbW1tbW1tbW19fX19fY2NjY2NjY2dnZ2dnZ2dnZ2dra2tra2tra2tra29va2tra2tra2dnZ2dna2tnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dna2tnZ2dnZ2dnZ2djY2NjX19fX19fY2NjY2NjY2NjY2NjY19rHd1xSZ2laTlpOTFBRV0VKPz89P0FFTExBPjc3NTs4ODk5Ojs8Pjw+ODo6OTs+P0A9Pj46NTo6Oz0/Ojs5Ojw+QkJAPz8/P0FCR0RDRE683dnZ2dnZ2dna2tvb29vb29vb3Nzc3Nzc3d3d3dDR0dDQ0NDQ0NDQ0NDS0NDR0dDQ0dPU0dHR0dPR0dHS0tHR1NbW1tLS1NXT09PU1NLS0tPT09PT09PT09PT09PT09PU1NTU1dXV1dbW1tfX19fX2NjY2NjY2NjY2NfX19jY19fX19fX19fX19fX19fX19fX1tbW1tbW1tbX19bW1tbW1tbW1tfX19fX2NjY2NjY2NnZ2dna2tra2tra2tra2tra2tra2tvb2tra2tra2trZ2tra2tra2tra2tra2tnZ2dnZ2dnZ2dnZ2trZ2tra29ra2trZ2dnZ2dnZ2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjbwXNYVWlrU0xSTlBSWVRGSTw+Qz9BQkVKPj43ODY5Njc4OTk7Oz0/QDw9ODk7Ozs/Pjw8OTU6PT47OTk7PD8/P0JCQT1BPUBBQkZCQkJLtd7Z2dra2tra2tvb29vb29vc3Nzc3Nzd3d3d3d3R0dHR0dHR0dHR0dDQ0NDQ0NDQ0dHR0dHR0dHR0dHR0dHS0tLS0tLS0tPT09PT09PT09PT09PT09TU1NPT1NTU1NTU1NXV1dXV1dXW1tbX19fX2NjY2NjY2NjY2NjY19fY2NjX19fX19fX19fX19fX19fX19fX19fW1tbX19fX1tbW1tbW1tbX19fX19jY2NjY2NnZ2dna2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tnZ2dnZ2dnZ2NjY2NjY2NnZ2dnZ2dnZ2NjY2NjY3LxvVFRsbExLUkpUUlVLRkQ6PkdEREFERjw/ODk6OTY5OTo3PD07PkA9PTc5Ojs5Pjs5OTY2Oj1AQT47PDk6Pj9DQT4/Qj0+QkNFQkFCSrDe2dra2tvb29vb29vb29vc3Nzc3Nzd3d3d3d3d0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0tLS0tLS0tLS0tLS0tLS0tPT09PT09PT09PT09PT1NTU1NTU1NTU1NTU1dXV1dXV1tbW1tbW19fX19jY2NjY2NjY2NjY2NjY2NjY2NjY19fX19fX19fX19fX19fX19fX19fX19fX19fW1tbW1tfW19fX19jY2NjY2NjZ2dnZ2dra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2trZ2dnZ2dnZ2djZ2dnZ2dnZ2dnZ2dnZ2dnY2Ny2a1NbcGtLVVdSXFFXSEQ+PEJKRT1ISj89PDc4ODo1OTg5Njs+PD1APDw1OTk8Oj87OTk0ODw9PUFBPD47Ojw+QD89PkE9PUNGR0I/Qkmq39ra29vb29vb29vb3Nzc3Nzc3N3d3d3d3d3d3dHR0dHR0dHR0dHR0dHR0dHR0dHS0M/U0M7P0tLT0tLS0tLS0tLS0tPT09TU1NTU1NTU1NTU1NTU1NTU1NTU1NTV1dXV1dXV1dbW1tbW19fX19fY2NjY2NjY2NjY2NjY2NjY2NjY2NjX19fX19fX19jY2NfX19fX19fX19fX19fX19fX19fX19fX19jY2NjY2NjY2dnZ2dra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tvb29va2tra2tra2tra2tra2tra2tnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dndsGRTYXJfT1pUV19RUkdCPUVJS0FBTEQ/Pzs5ODg5Mzg2ODY5Pj0+Pz06Njo7Pjs9PTo5Njg6PTtAQDxAPz0/P0I+PD48PEJFSElCPkNJpODa29vb29vb3Nzc3Nzc3Nzc3N3d3d3d3d3d3t7S0tLS0tLS0tLS0dHR0dHR0dPT0bm7zLqbnLrQyNPT0tLS09PT09PT09PU1NTU1NTU1NTU1NTU1dXV1dXV1dXV1dXV1dbW1tbW1tbX19fX19fY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjX19fX19fX19fX19fX19fX19fX19jY2NjY2NjY2NjZ2dra2tra2tra2tra2tra2tra2tra2tra29va2tra29va2tvb2tra2tra2tra2tra2trb29vb29va2tra2tra2tra2tra2tra2tra2tnZ2dnZ2trZ2dnZ2dnZ2dnZ2dnZ3qpfVWBuW1VZUVpeT0xHQ0ZNSUZEREk7QUE7PDg4NjU4Njk4Nzw/QT89Ojc8Pz48Pz87OjY4OD09QEE9QD5BQD1AOjs6Pj1BRUdKQkBDR57h29vb29vc3Nzc3Nzc3Nzc3d3d3d3d3d7e3t7e0tLS0tLS0tLS0tLS0tLS0tO+wMqaoKKViJGeqpOpz9TT09PT09PT09PU1NTU1NTU1NTU1NTV1dXV1dXV1dXV1dXV1tbW1tbW1tbX19fX19fY2NjY2NnZ2dnZ2dnZ2dnZ2djY2djY2NjY2NjY2NjY2NjY2NjY2NjX19fX19fX19fX19fX19fX19fY2NjY2NjY2NjZ2dna2tra2tra2tra2tra2tra2tra29vb29vb29vb29vb29vb29vb29ra2tra2tra2tra2tvb29vb29va29vb29vb29va2tra2tra2tra2tra2tra2trZ2dnZ2dnZ2dnZ2d6iXFVeblheXU5aUFROQ0NMSUlJRkpEPEJBPDs4NzY3OTc3OTk9P0E/PDo5QD88PkI/Ojg3NzY9P0BAPUBBPz88PTs7OD48P0VJSEE/Q0aX4dvb29zc3Nzc3Nzc3N3d3d3d3d3d3t7e3t7e3tPT09PT0tLS0tLS0tLS0tTIlZyum5m1iX2TjIKBhMTV09PT09PT09PU1NTU1dXV1dXV1dXV1dXV1dXV1dXV1tbW1tbW1tbW1tfX19fX19fX2NjY2NjY2dnZ2dnZ2dnZ2dnZ2dnZ2NjY2NjY2NjY2NjY2NjY2NjY2NfX19fX19fX19fX19fX19fX2NjY2NjY2NjY2dnZ2dnZ2dna2tra2tra2tra2tra29vb29vb29vb29vb29vb29vb29vb2tra2tra2tra2tvb29vb29vb2tvb29vb29vb2tra2tra2tra2tra2tra2tra2tra2tra2tnZ2dndmlpYYW5ZYVdPV01QRUJETElNS0ZJRT5CRDk4ODY3OTc1Njk4PT1BPjo4OT4+PD9APzw1Njc2PD4/PjtAQEA/Pj4/Pjs/PkFCRkdCQENIkeLb29zc3Nzc3d3d3d3d3d3d3d7e3t7e3t7f39/U09PT09PT09PT09LS0tLTz6h+kayPko6MhoCIiYSQo8rU09PT09PU1NTU1dXV1dXV1dXV1dXV1dbW1tbW1tbW1tbW1tbW19fX19fX19fX2NjY2NjY2dnZ2dnZ2dnZ2dnZ2dnZ2dnY2NjY2NjY19jY2NjY2NjY2NjY2NjX19fX19fX19fX19fY2NjY2NjY2NjY2NnZ2dnZ2dna2tra2tra2tra2tra29vb29vb29vb29vb29vb29vb29vb29ra2tra2tra2tvb29vb29vb29vb29vb29vb29va2tra2tra2tra2tra29vb29ra2tra2tra2tna3JJaWWNuWlpSVV5QTDxAR05IUklIRT47SEY4OTc1Nzg3NTg5ODs+Pj07ODlBPj1AP0E+NzU5Njs+QUI/P0BAQUI/Pj8+QUBEQUZIQj9FSozi3Nzc3Nzc3d3d3d3d3d3e3t7e3t7f39/f39/f1NTU09PT09PT09PT09PWtaWaiIuQhYCFi4iBg4qLf4bC1tTU1NTU1NTV1dXV1dXV1dXV1dXW1tbW1tbW1tbX19fX19fX19fX2NjY2NjY2NjY2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2djY2NjY2NjY2NjY2NjY2NjY2NjY2NjX19fX19fX19fY2NjY2NjY2NjY2dnZ2dna2dra2tra2tra2tra2tra2tvb29vb29vb29vb29vb29vb29vb29vb29ra2tra2trb29vb29vb29vb29vb29vb29vb29vb2tra2tra2tra29vb29vb29vb29vb2tra29uIWltnalxYTFpfVkg6TEhMSkpDRUVDQExINzo3Njc4ODU4Nzg5PDw7Ozk4QD89Pj8/PDY3PDQ3P0JCQUBAPz8/QT09P0A+QEBGRT09REuI4tzc3Nzd3d3d3d7e3t7e3t7e3t/f39/f39/f39TU1NTU1NPT09PT09PUxZKCg4WGfYGCfXx5foGCg36k29bU1NTU1NTV1dXV1dXV1tbV1tbW1tbW1tfX19fX19fX19fX19fX19jY2NjY2NjZ2dnZ2dnZ2dna2tnZ2dnZ2dnZ2dnY2NnY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjX19fX19fY2NjY2NjY2NjY2dnZ2dna2tra2tra2tra2tra29vb29vb29vb29vc3Nzc3Nvb29vb29vb29vb29vb2tra2tra29vb29zb29zb29vb29vb29vb29vb29vb29va2tvb29vb29vb29vb29vb29vb2tvZgFpebWhaU0ldW1hKRE1ISlNMR0ZBQD9KQjg7NjY5OTc1ODY4Ozo7Ojw5OD09O0A9Ozo2NTw3Oz1CQEFBPD49QEE9PEA/Pz5CREU+PERLg+Lc3d3d3d3d3t7e3t7e3t7f39/f39/f39/f39/V1dTU1NTU1NPT09PT2LKEkKh9g3l2hIh/e3d5gn5+i67A1dTU1NXV1dXV1tbW1tbW1tbW1tbW1tfX19fX19fY2NjY2NjY2NjY2NjY2NjZ2dnZ2dnZ2dna2trZ2dnZ2dnZ2dnY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2dnZ2dna2tra2tra2trb2tra2tvb29vb29vb29vc3Nzc3Nzc29vb29vb29vb29vb29va2trb29vb29zc3Nzc3Nvb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vc1nlcWmxmWFJPYFFSQUhHSkZYTEZAQENDSz87Ozc4ODc2NTc2ODo5PDw6PTs/PTs9Pjw7ODg8OT0/QkFCQzw8P0FCPj1BQkNCREVDQDtDTH3h3d3d3d3e3t7e3t7e39/f39/f39/f39/g4ODg1dXV1NXU1NTU1NPU0ruen3WKeXuIgICChYGDcnOAhYOMrNfV1NXV1dXW1tbW1tbW1tbW1tbW19fX19fX2NjY2NjY2NjY2NjZ2dnZ2dnZ2dnY2NnZ2dna2tra2trZ2dnZ2dnZ2djY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2dnZ2dna2tra2tra29vb29ra2trb3Nzc3Nzc29zc3Nzc3Nzc3Nzb29vb29vb29vb29rb29vb29vb29zc3Nzc3Nzc3Nvb29zc3Nzc3Nvb29vb29vb29vb29vc3Nzc3Nzc3Nvb29vb3dByXV9wZVdLUGNPS0JHQ0pIS0ZBPEE9SFBBOjo3Nzg3Njc4Nzw6OD09PD47QD88Pz07Ojs5Ojk8QEJAQkNAPUFAPz1AQkNDQUBAP0A7RU144N3d3d7e3t/f39/f39/f39/f3+Dg4ODg4ODg4NXV1dXV1dXV1NXU18h4i4V8goh6g4SBfoKCc2l0hYuGkJ3U1tXU1dbW1tbW1tbW1tbW19fX19fX19jY2NjY2NjY2NjZ2dnZ2dnZ2dnZ2dnZ2dnZ2dra2tra2tra2dnZ2dnZ2dnY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2dnZ2dna2tra2tra2tra2tvb2tvb3Nzc3Nzc3Nvc3Nzc3Nzc3Nzc29zb29vb29vb29vb29vb29vb29vc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc29vb297KalxjcWVST1heSz9HTElPS0VAPkFCP0lPPjk6NzY7NzY6Ozc7Ojg6PDw+Oz09Oz48Ojs4OTo4OUFCQkFAQDtAQj06PkFCQz8+PT4/PUZOdN/e3t7e3t7f39/f39/f4ODg4ODg4ODg4ODg4OHV1dXV1dXV1dXV1s6dhpl+f5OTin+CgXx9gnNxm4mAgoOJwNnat7TQ19bW1tbX19fX19fX19fX2NjY2NjY2NjY2NjZ2dnZ2dnZ2dnZ2tnZ2dnZ2dra2tra2tra2trZ2dnZ2dnZ2dnZ2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NnZ2dna2tra2tra2tra2tra29vb3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nvb29vb29vb29vb29vb29vc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3NvfwGNaW21gVlBTU0pETEhNSEk8PkFEQ0ZORDw8OTc5OjY4Ozk3PDk4OTw9OzlAPjpBPzw3NTc7ODpAQUVBPz45PUI/Oz1CQkI6Pj07PT5GTnHe3t7e3t/f39/f39/g4ODg4ODg4ODg4OHh4eHh1tbW1tbW1tbV1tjLioCHhYOXjHh7e3lvfYF1a3ebdHZ7eInHxpiMrdjZ19fX19fX19fY2NjY2NjY2NjY2NjY2NjY2dnZ2drZ2dna2tra2tra2tra2tra2tra2tra2dnZ2dnZ2dnZ2dnZ2dnZ2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NnZ2dnZ2dnZ2dna2tra2tra2tra2tra29vb3Nzc3dzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nvb29vb29zb29vb3Nzc3Nzc3Nzd3dzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3d3d3d3d3Nzc3Nzc4LdjV1lrYlJNVVFMSktGS0ZDQD5CQT9FTT4+PTg5OTo3OTo3NT03Nzo+PDs7Qjw5Pz05NjY4PTk6QEJGQD49PEBCREA9QD9DO0A9PD4/Rk9t3N/e3t/f3+Dg4ODg4ODg4ODg4OHh4eHh4eHh4dbW1tbW1tbW1tfVrYZ6d32rn3l4entzdH+Dfm9xe3l6c3t2k4qFgImkzdnY19fX2NjY2NjY2NjY2NjY2NjY2NjY2NnZ2dna2tna2tra2tra2tra2tra2tra2tra2tnZ2dnZ2dnZ2dnZ2dnZ2dnZ2djY2NjY2NjY2NjY2NjY2NjY2NjY2dnZ2dnZ2dnZ2dra2tra2tra2tra29vb29vc3Nzc3N3d3d3c3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc29vb29vc3Nzb3Nzc3Nzc3N3d3d3d3d3d3dzc3Nzc3Nzd3d3c3Nzc3Nzc3N3d3d3d3d3d3d3d3dzc3OGtYVtebGJSTVZMTUdLS0RGQkI7QT08RUxCQT44Ojk6Nzc5NjY6NTs+QDs9Oz89PD89Ojk5Ojw5PEVDRkA/PkBDQkQ9OT0/QT1CPz1APkdPadvf3t/f3+Dg4ODg4ODh4eHh4eHh4eHh4eHi4uLW1tbW1tbW1tfQmH+Qh4N9eoN2e3Vzenl6kKqmd3JyfoeHh4CAfoKEhJHJzNnX19jY2NjY2NjY2NjY2NjY2NjY2NnZ2dnZ2tra2tra2tra2tra29va2tra2tra2tra2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2djZ2dnZ2dnZ2djY2NnZ2dnZ2dnZ2dnZ2tra2tra2tra2tra29vb29vb3Nzc3N3d3d3d3d3d3d3d3d3d3d3c3Nzc3Nzc3Nzb29vb3Nzc3Nzc3Nzc3Nzd3d3d3d3d3d3d3dzc3N3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3NzhpV9UYm1iUE9TSUhHRkpJSUJBPkJCPEVFREA+ODo4Ozc3Ojc4ODY+Pz07PDk9PDo+PTs6Njc7NjpEQUY+Pz8/PkNBPzs9PT47REM/PjxIT2fZ4N/f3+Dg4ODg4eHh4eHh4eHh4eLi4uLi4uLi1tbW1tbW19jYyH52doN+fnR2eIaCenl1d5yhu6GEgoCAfoeKinx/gYaMnKjO2NjY2NjY2NjY2djY2NjZ2djY2NjY2dnZ2dra2tra2trb29rb29rb2tra2tra2tra2tnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dna2tra2tra2tra2tra2trb29vb29zc3Nzc3N3d3d3d3d3d3d3d3d3d3d3d3dzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3e3t7e3t7e3d3d3d3c35pbT2drXFBRUElDT0pLR0xHSkJAP0FHREBBPDg8ODg1ODk3Njc3QEA/Ozw5Pj04PTw8Ojc4PTk/RENGPkE/QkBDPzw6Pj0/PkVEPz07S1Fj1+Hf4ODg4ODh4eHh4eHh4uLi4uLi4uLi4uLj49bW1tbW19XB3LRueHJze3B6eXaFiIR7eH2AgZiljH98fnuRhZaLhoGDgY6Rvd3Z2NjY2NjZ2dnZ2dnZ2dnZ2dnY2dnZ2dna2tra2trb29va2tva2tra2trb29ra2tra2tnZ2dnZ2dnZ2dnZ2dna2trZ2dnZ2dra2tra2tnZ2dnZ2dna2tra2tra2tra2tra2tra2trb29vc3Nzc3Nzc3N3d3d3d3d3d3d3d3d3d3d3d3d3d3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3e3t7e3t7e3t7e3t7e3t7e3t3d3d6NWFdobllQUUtISlNJTUhNSUtBQz9DRkJBRDo6PDg2NDg4NzY2Nj8+Pjo8OTw7Oj09PDw4Ozw8RERERT4/PkI+Qj84PT8/Q0NCQEE+O0xUY9Xh3+Dg4OHh4eHh4eLi4uLi4uLi4uLi4uPj4+PW1tbW1teslLZ6eHJvd5V7dHuLgHh1bn6Fg3t/hYhyfH2bnI6JioJ+g32Hk5rH1NjY2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dna2tra2trb29vb29vb29vb2tra2tra2tra2tra2tnZ2dnZ2dnZ2dna2tra2tra2tra2tra2tra2tra2tra2tra2trb2tra2tra2tra2trb29vc3Nzc3Nzc3Nzd3d3d3d3d3d3d3d3d3d3d3d3d3d3c3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3N3d3d3d3d3d3d3d3d3d3d3d3d3e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3d7Zf1lgaGxcUUtHR09LTk5PTURGQkg/Q0hEREA6Ozs4NzU3Nzc4NThAPkA7PDk8Ozw+Ojk7OTk7OUZERUI8QD4/PEBDOz5AP0A/Qj8+OjtKVWPV4eDg4eHh4eHi4uLi4uLi4uLi4uPj4+Pj4+Pj1tbX19vKhYR3cXJubniVhHt4hH95dnB4c3eLkY6CdnN9ioaId3d1d4ODfIiIk8Pb2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dra2trb2tvb29vb29vb29vb29rb2tra2tra2tra2tra2tnZ2dnZ2dna2tra2tra2tra2trb2tra2tra2tra2tra2trb29vb29ra2trb29vb29vb3Nzc3Nzc3Nzd3d3d3d3d3d3d3d3d3d3d3d7e3d3d3d3c3Nzc3Nzc3Nzc3Nzc3Nzc3d3d3d3d3d3d3d3d3d3d3d3d3d7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7f0nVZaGlqVk5KSE1OR01EUElGSD9FPUZMREM+Ozs8OTc3OTY2OTU4Pj4/PTs8QDs9PDo3Ozc5OThHREVCPUE9Qj8+QDw/QUE/QEJAPjs8S1Ri1OLg4eHh4eLi4uLi4uLi4+Pj4+Pj4+Pj4+Pj49fX19fEknuJf29sbnV2foSBg4qGfnVybWVtiIaKjoR7c4OHint4e4OPj4GEioqxztrZ2dnZ2dnZ2dna2tra2tra2tra2trb29vb29zc3Nzb29vb29vb29va2tra2tra2tra2tra2tra2tra2tra2tra2tra2tvb29va2tra2tra2tvb2tvb29vb29vb29vb29vb29vb29zc3Nzc3Nzc3d3d3d3d3d3d3d3d3d3d3t7e3t3d3d3d3d3d3d3d3dzc3Nzc3Nzc3d3d3d3d3d3e3t7e3t7e3t7e3t7e3t7e3t7e3t7f39/f39/f39/f39/f3t7e4clsW2pqalNOR0hOT0VIRk1JSUA7RD5ISUA9PDo6Ojg2ODo3Nzk0OD08PT07ODw8PDw4Njc4OTo6RUJFQT9APEI/Q0M+PkNEQUBAP0A8PUtRYdPj4OHh4uLi4uLi4uPj4+Pj4+Pj4+Pj4+Pj5OTX19fZqXaFfnx3bHB3eXh8jH2KhYB3anN0d3p9bot7fnl6foR/gIGDfnh8foeGlrbT2tnZ2dra2tra2tra2tra2tra2tvb29vb3Nzc3Nzc3Nvb29vb29vb29ra2tra2tra2tra2tra2tra2tra2tra29ra29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb3Nzc3Nzc3Nzc3d3d3d3d3d3d3d3d3d3d3d7e3t7d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3t7e3t7e3t7e3t7e3t7e3t7e3t7e39/f39/f39/f39/f39/f39/e3uO9amFpa2lRTkZNTEtKWE1OR0FAQE9BRD9AOzw4OTk5Njg2NjY4NDs+PD07OTY6Ojk6OTU4OTg5OkJERj8+Pj5AQEBCPzxBQD88Pj9BOT5KT17S4+Hh4eLi4uLi4+Pj4+Pj4+Pj4+Pj4+Tk5OTk19fX2sqKhIB5c29tcXN1d4CUeHaAfHWHhXd1cnWgmXp7d3Z5doR0bWxue3iAmouTu9za2tra2tra2trb29vb29vb29vb29zc3Nzc3Nzc3Nzc3Nzc29vb29vb2tra2tra2tra2tra2tra2tra2tra29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vc3Nzc3Nzc3Nzc3d3d3d3d3d3d3d3d3d3d3d3e3t7e3t3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3t7e3t7e3t7e3t7e3t7e3t7e3t/f39/f39/f39/f39/f39/f39/f397js2lpbmloUFBPTExPUk9LU0Y/RURERD48PDg7ODc5OTU2ODY2NzM6Pjs+PTc6Pjk5OTk2Ojo4NzxDRUc/Pzs/PkA9PkE9Oz0+OUFAQDhBTlFc0OTh4eLi4uLj4+Pj4+Pj4+Pj4+Pk5OTk5OTk5NjY2NjauY6AenZ1bmpveHCBfWt0cnZ3hIV5h4d5lY55eXp1d3pza298gHx2fYh8gLLe2tra2tvb29vb29vb29vc3Nzc3Nzc3Nzc3dzc3Nzc3Nzc3Nzb29vb29rb29vb29ra2tra2tra2tra29va29vb29vb29vb29zc3Nzb29vb29vb29vb29vc3Nvb3Nzc3Nzc3Nzc3Nzc3Nzc3d3d3d3d3t7e3t7e3d7e3t3d3t7e3t7e3t7d3d3d3d3d3d3d3d3d3d3d3d3d3t7e3t7e3t7e3t7f39/f39/f39/f39/f39/f39/f4ODg4ODg4N/f39/f4qpqa2hrZFNQT0ZQVFJOSFJLPkREQ0I7Ozk6Ojg2Nzg1NjY4ODg0Oz88Pzw5PDw3Ozo6Nzo6Nzo9Q0JDPUE+Pzw5PT5BQDs8PDtFQD47Q05TXNDk4eLi4uLj4+Pj4+Pj4+Pj5OTk5OTk5OTk5OTY2NjZ1p5vdntveHh2cG50d3BwdHBzb36Jc3qGhY2EenNtcoB6hn1vg5OBdnx9g4a13drb29vc29vc3Nzc3Nzc3Nzc3Nzc3Nzc3d3d3Nzc3Nzc3Nzc3Nzb29vb29vb29vb29ra2tra2tvb29vb29vb3Nzc3Nzc3Nzc3Nzc3Nzc3Nvb29vb29vc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzd3d3d3d3d3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3d3d3d3d3d7e3t7e3t7e3t7e3t7f39/f39/f39/f39/f39/f39/g4ODg4ODg4ODg4ODg4N/f3+KgbWhma2ZVVlJHUFFOS0xMRUJIRUc9OD08Ojo3Nzg2Nzc2NTY3NDg+PD09Ojg6OD46Ozc4Nzc6Oj5DRDtDQj49OD1AQUM/Pjw+RTw+PUJNUF/S4+Hi4uLj4+Pj4+Pj4+Pk5OTk5OTk5OTk5OTk2NjY3MB2doCCfnp4eHBsdXlya399bHNvdGdoaYB/aWl4c2d+iYl4cIKGe3d9foWKvd3b3Nzc3Nzc3Nzc3Nzc3Nzc3d3c3Nzc3N3d3dzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nvb29vb29vb29vb3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzd3d3d3d3d3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7f39/f39/f39/f39/f39/f4ODg4ODg4ODg4ODg4ODg4ODg4ODflGttZm5mU1NJUFlUTEhGTkZGRUJGPTs+PDs5Nzc4NTc5NjQ1NzU4PDs9Pjo6OztAOTs7ODc6OTlAQkE8QUE/Pzk/QEJFQ0FAQEM7Oz1ES01g1uTi4uLi4+Pj4+Pj4+Pk5OTk5OTk5OTk5OTk5NnZ2tmYc3uqhJaCcnR1dn14aGx8d2h4d25rcHR5gIJ3dHyBhIJ9c3CAin94gn95g8je3Nzc3Nzc3Nzc3Nzc3d3d3d3d3d3d3d3d3N3d3dzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nvb29zc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3N3d3d3d3d3d3d3d3d3d3d3d3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e39/f39/f39/f4N/f39/f3+Dg4ODg4ODg4ODg4ODg4ODg4ODg4ODh24tubWdzY1lRTVVbV0hDSUZOS0dCRD8/Qjo7OjY2NzU2NzY0ODc2Ozw7Pj86PDk8Qjg3OTo6Ojk6QUFCQUJDQEE+PT9CQ0NEQUJGOTg9REpOYtjk4uLi4+Pj4+Pj5OTk5OTk5OTk5OTk5OTk5OXZ2drcqHGCtXiRfnNsem6EgXaCfWtoan+DeHZ8dX2FhXRmcHl9d316gIqFe318foC03tzc3Nzc3N3d3d3d3d3d3d3d3d3d3d3d3dzd3d3d3dzc3N3c3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzd3Nzd3d3d3d3d3Nzc3Nzc3Nzc3Nzc3N3d3d3d3d3d3d3d3d3d3d3d3d3d3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e397e3t7e39/f39/f39/f39/g4ODg4ODg4ODg4ODg4ODg4ODg4ODg4eDg4ODg4ODg4tiFb3FrdWFWT1VVXE9ETUY+SkdKRUQ8P0I6PDk4Njg0NTY3NDc2NDk7Ozw7OD47PEE4ODo9OD04Oj09QEBAP0FCP0A+QENCQ0FBRTc2O0RMTmPa5OLi4+Pj4+Pj5OTk5OTk5OTk5OTk5OTk5OXl29ra3Z5sbnNxhY1ybXBuf391hH5rcnZ2enN4gXhzbnVwbWt2fHmFiIB/f392coODsd/c3Nzc3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3Nzd3d3c3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3N3d3d3d3d3d3d3d3d3d3d3d3d3c3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e39/f39/f39/f39/f39/f39/f39/f39/f39/f4ODg4ODg4ODg4ODg4ODg4ODg4OHh4eDg4eHh4eHh4eHh4OLXhW1xb3ZeUldTWlpRSkhDQFFAQkQ8OT9BOjw5NzU3NDU2NjQ3NTY9PDo9PTk+OjxAODo6PDY7OTs+PUJCQjtBQkBDQEBEREM8PUA3OjxFS01l3OPi4uPj4+Pj5OTk5OTk5OTk5OTk5OXl5eXl5dPOxsB+cWxveHt2b3VuanNzbZKGeG50dG5vdIZ/b2twboJ0bXZyfY2DdnF/d3mKgabf3Nzc3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3dzc3d3d3dzc3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3t7e3t7e3t7e3t7e3t/f3t7e3t7f39/f39/f39/f39/f39/f39/f39/f39/f39/f4ODg4ODg4ODg4ODg4ODg4ODg4ODg4eHh4eHh4eHh4eHh4eHh4eHi1oZucG1xYFJZUFdfWUpMTElSP0Q9OTtCRjs6OTc0NTY1NzU0NjY2Pj07Pz45PTk7Pjg9Ozo0ODtAQENCQ0FCRkE/Q0BBQkREOz0+OTs8QkxNZODl4+Pk5OTj4+Tk5OTk5OTk5OTk5eXl5eXl5eW5t7Woc3JscHd6dHd4bXFydXd/hHRyc2xsa3F8bnBudGuBf3GAd32Eg355gHNygYqg2d3c3d3d3d3d3d7e3t3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3e3t7e3t7e3t7d3d3d3t7e3t7e3t7e3t7f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f4ODg4ODg4ODg4ODg4ODg4ODg4OHh4eHh4eHh4eHh4eHh4eHh4eHh49WHcWxqbF5YWlVXYFZWUE9QTD1BOjs8RkE4Ojg3MzY1Njk2NTg1Nz89Oz8+OT04Ozw5PTs7NTo9Q0JCPENDREREQUE/PkJDQzw9Pjg5PENLS2PN0dnh1sjY4+Tk5OTk5OTk5OTk5eXl5eXl5eXltbW2q3J5cm59f3Z1d2hqaGlwb3Zta2tnZWZxdG15gG5teXd2iHhxa2podXV5dHV/wd/c3d3d3d3d3d3e3t7e3d3d3d7d3d3d3d3d3d3d3t7e3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3e3t7e3t7e3t3d3d3d3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f4ODg39/g4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4OHh4eHh4eHh4eHh4eHh4eHi4uHh4ePVhnFwY2lhV1NZV19MUk9STUtAPjg5O0E+ODc5NjQ3Njc6NjY2NDk+Pzo8Pzo/OTo6Nzo9PDk5PEFBPTtBQ0VDRkA+Pj5BRUQ+QEE3OD5GSEpesrW4wbm1u8jg5eXl5OTl5OXl5+fn5+fm5ebm5ra2tbWOfX5weoR1cnZnYmNlbGtyb2ZpbHZtd4Z9hXlsbHd4a3ZwfH14c3V5fHd2h7ng3d3d3d3d3d7e3t7e3t7d3t7e3t7d3d3d3d3d3t7e3t7d3t7e3t7e3t3d3d3d3d3d3d7e3t7e3t7e3t7d3d3d3d3d3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4OHh4eHh4eHh4eLi4uLi4uLi4uLi4eHj1Yd1bl5uY1pUU1hXS1NLSk1SR0E4Ozs+PDk4NzU2NTY2OTY4NjY5Pzw6PT07Pzo7Ozk8PDs5Oj4+Pjs8PUFEQkNBQEBBP0JDPDw9Nzs+REVKXrG1tLW2t7e2y9rJ3uXl3eDi3tXU1tPU4OPg39+2treuh3t/bnmNenJ1bWNobGxtaXR4enF5enqIh4N6aWh9cWRvcXyGgX55e318e4an2t7d3d3d3d7e3t7e3t7e3t7e3t7e3d3d3d3d3t7e3t7e3t7e3t7e3t7e3t3e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7f39/e3t7e3t7f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4OHh4eHh4eHh4eLi4uLi4uLi4uLi4uHh49aGdmxhb19dV1lcWlJQSEpXTEVHPUA9Ozs9OTY0NjU1NTg2NzY3OD87OT09PDw5OTw6Pjw6OTg+Qjs7Pj5AREBDRUFAQD0/QDw9PTU5PEJHRl2xtbW2uLm5ubq9uMPT0r3BwcC6u7y6u8TMxb/Dt7e3hGl1gX1ndYd5Z3Vxa2t5eHB3fH15bWl3e3h3bml1j4FwbHl4d3d9gXuGgnmAoNze3d3d3t7e3t7e3t7e3t7e3t7e3t3d3d3d3d7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t/f39/e3t7e3t/f39/f39/f39/f39/f39/f39/f39/f39/f39/f4ODg4ODg39/f39/f39/f3+Dg4N/f4ODg4ODg4ODg4ODg4ODg4ODg4ODh4OHh4eHh4eHh4eHh4eHh4eHh4uLi4uLi4uLi4uLi4uLi4ePXhXJrZ3RhW1hYX15TVVVRVUpMRj9JRDs5PTY2NDc3NTc4Nzc3ODk8PDo+PDg8Oj0+OTs8OTs5P0E8PT9DP0FARUJCQTw9Q0A6Pjw1NDlER0dasbW1tre5ubm5ubm3ubm4uLm5urq6urm5urm6u7e3uX9ucHN6b3B/eXNuc3Vsc3Z4cXFwb2tvcX6Bc2mHhIF9dHOHdW11hYmBgHJ2hafd3d3d3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7f39/f3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f4ODg4ODg4ODg39/f3+Dg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4eDg4eHh4eHh4eHh4eHh4eHh4eHh4eHh4uLi4uLi4uLi4uLi4uLi4uHj14lxa2xyW1dXXWBUUVVUUFJPSkNATUE9Ozk2NTM0NjQ2ODc3Nzk6Pjs8Pjs5PDo8PDk8PTw7PT0+PUNEREBDQkE/QD48PkE8OD06NjY6QkpIWLG1tLa2uLm5uLi5uLe3uLi5urq5ubi4uLi6uru3uKx7cnhxf3ZzfnBsbXpyZ29sbW50cHt3d3Jyd3pvhpJ2f3x8enZ5fH9zfYdyda3T393d3d7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e39/f39/f39/f39/e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f4ODg4ODg4ODg4ODg4ODg4ODf3+Dg4ODg4ODg4ODg4ODg4ODg4eHh4eDg4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4uLi4uLi4uLi4uLi4uLi4uLi49eHb2pxalVWV2FbT1FSUE5XSURESUo/Ojk6NzUzNDk1NzY2Nzg4Ojw7PD46PDo6PTw5PDw9Oz09PDs9REdEQ0E8PDw8Pj5AOzg8ODE1OkFGRVautbW1tre4uLm4uLi4uLe4ubq5uLi3t7i4ubq7t7mqcnB4d3x7e4J3aG5xam9qY2lyf21zcn54dHFsanaAeX2AgH91doB1a4qLgHaR1d/d3d7e39/f3t/f3t7e3t7e3t7e3t7e3t7e3t7e39/f39/f39/f39/f4N/e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t/f39/f39/f39/f39/f39/f39/f39/f3+Dg4ODg4ODf4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHi4uLi4uLi4uLi4uLi4uLi4uLi4uPYhm1sdGVWUFxnWE1YU1JRWUVDS1BOOzk4ODc1NTM5NTY2NzY4Nzk+OT0+OTw5OTw7Njg5OTo8QEA9PkBGQEJCQDo+PEE9Pzs7OzYxNjxCR0RQqLa1tba2tre4t7i4uLi4uLm6ubi4t7e3t7e5ure2tIlyd3h9iXxwem99c2hqbGdnbHRscXd0cWx2c3Fxd3FyfHl4g3Z7d2mLkYp9kM7f3d7e3tvY2drZ297f39/e3+De39/f3Nvc3N3e3uDg3+Dg4ODf3t7e39jS397f397e3t/f3t7f3t/f3t7e3t7e3t7e3t7e3t/f39/f39/f39/f39/f39/f39/f4ODf4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODh4eHh4eHh4eHh4eHh4eHh4eLi4eLi4uLi4uLi4uLi4uLj4+Lj4+Li4uPj4+Pi4uLi4+Lk14NoZ3VkVlVkZVdKWllXW1Q9RU1LSD04NzU3NjQzOTQ0Nzc1Njc5PTo9Pjw9PDk7PDk5Oj45PD4/PkFBQ0FFRUQ+OzxBPjw5PDs3Mzc+REhFSqG2tbW1tbW2tre4uLi4t7e4uLi3tra2tra3uLm2traLfXpsbHp/cGx5dm5qaGdlcXp4b2lvb3B1c21zd4Fnb32CgYNyf3lqcHJ6f6ng393Zy8a/vL2/vsLN0tDW3tnc4NfQzcPCw8PH1dfT2dzX1NjX0MfExce9vM/Kz87Y3djO3N3c2t3T0dze39/e397e3t7e4N/f39/f39/f39/f39/f39/f4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4OHh4eLi4uLi4uLf4uPi4eLg4d7W29/Sw8rJx9Hb3OLk4eHg2dre1sbExcTN2trf5OHi4trX3st9aWZxYVleZWFNTFRLUlpMO0hNSEZBPTc2NjUzNDY2NDg3NjU2OTw7Pj46Pjk5PDk3OTs7Oj49PEBAQ0RCR0ZCQT08Q0A9OTw7Nzc3P0RGRkaZtrS1tbW2tra4uLi4uLi3uLi3s7W2t7a3t7i5tba3opdxb29waW50dnFmZWNrbmdvcm1mZ2tygWVvdnyAeGRzj39zaHFyaWVlbm+w39HFv7u5ubm5ubq6uru6vc3Gw8e/urq6uru7u8HCvcHFvby/vry7urq5ubq6ubm6w8XDucDDwby/ube/z8/U3tjc3t/g3tLa4N/f4ODg39/f39/f39/f3+Dg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODh4eDg4ODg4ODg4ODh4eHh4uLi4eDh4uLi4uHa2t3RwsPCu8XT1uDdydPDrrnAsaqrq6uwtLbJ0sXRxLG4v7Srq6usr7S0vMzE1c60tLureGxtbWBdYl9ZS1NVVFFQREBRTUhEPzo3ODU3MzE1NjQ5ODQ2Njo8Oz08ODw5Njo6ODg5NzU8PDw/QEFAQkRDQkE8PkI/Pz09PTc1OD5DRUNAj7a0tLW1t7i4uLi4uLm5uLe1sautr7Oxs7OztLS0tqaei2tue3ZxeXhnY2hfcXdha25vaG99b25ja2lseHdsa4Z+bHB6dm1scG95sca8uru7urm5ubq6urq6urq6urq6urq6urq7u7q7u7y7urq6ubq7u7q6urq6urq6ubi3t7i4t7e2tbW1tbi3u8e+w8XHzcS4wMnH0tzZ2d/e3uDf39/f4ODh4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODh3Nji4uLi4eHh4OHg3tfGxtHQztTe3tPO0t/SuLi8sq2trKysrrG+ua63rKipqamqq6urqqqqq6ysuKyqqqqrq6urra6urq6urryzrayrpHlub21fXl1dVE1SU1xUSkE/UElIPjg5NjgzNzMwNTczNzg1NzY2Ojw/PDg5Ozo6Ojg5OjY1OTs8Pj9EP0NFQkNCP0BAQT9APjw3ODc6QUVEP4W4tLS1tbe4uLm5uLi3t7SurKuqqq2urq6vsLGzs7WjcG5ucm1wg311aWFlaGZkY2Rxc21td25naW1tZXBzb29zcXN8h4F6dX11n7u6uru7urm5ubm6urq6urq6ubq6urq5uLm5ubm6urq6u7q5ubm5ubq6ubm6ubm4uLi3t7e4uLe3t7a2tbW2tra1tbW1tba1t7e3t7rBvrzGycrb3+Dg3tvd3d7h4tDW4uHg4ODg4ODg4ODg4ODg4OHg4OHi0768zNjd3OLg0dnbxL23sLCxsa+zu7uzsLS9s66urq2tra2sq6qqqqmpqKmpqampqqurqqqqqamoqampqampqaqqqqytrq6urq6urq6sraR4aWJxZmFZWlZRUk5cU0Y9QlJEQTc8OzY5NTY1NDU2NTg3NTY1Nzg7Pjw7OTk5Ojg3Nzk3Njg8Oz47RD8/Q0BBREE+P0M9Pjw+Ojo3Nz9DRj54srCztLW2t7i3trKurq2sq6uqqaqtraysrq+xs7S1t4xucnRqaIB5ZmpmZWxdaG5waGxxYmNmcoJ+dmhobGpueoaBhXx4cXF5gK+6ubq6urm5uLm5ubm5ubm5ubm5ubm4uLe3t7e3uLm5ubm5uLe3t7i5ubi4uLi3t7a2tre3t7e3tra2trW0tLW1tbW2trW1tre3t7e3t7e3tre4v8bP0MS+v8DE19e8ydra4OHg4ODh4eDg4ODh4eDb3t7Uzby3tre6wMDJxLfIvrKwsLCwr7Cvrq6ur7Cwr66urq6uraytrKurq6qpqampqampqampqKmpqKmpqampqKmpqKmpqqqrraytra2ur66trK2heWpjbWdiXFhRUFFLVEpCOklRP0E3PDk0OjU2NTQ1NTY4ODY4Njs6OTw9PTs6ODY2ODg6ODY3Pj09PT5BQUVCQkNBQUBBOj09Pz05Ojc9QUc8bKqmqKutsLGwrqupqKqrq6mpqamrrKytra2usLO0tbilgIdvaWdzdGZrcG1qZGxvcm5rbWNrcHyJhG5qbHx4Y3uKfnNqc25rcY+7ubm5ubm5ubi4ubm5ubm5ubq5uLi4t7e3t7e3t7i5ubi4uLe2tra3t7e3t7a2t7a2tra3tra2tbW1tba1tLS0tbW1tra2tra3t7e3t7i4uLe2t7a2uLm4uLe3uL6+uLq9vcfb4OHg2Nnd4eHg3dfKwcPCurm5uLe4uLi3tbS0tLKysbGxsLCvr6+vr6+vr6+vr66ura2srKyrq6yqqqmoqKmppqepqaehpaipqamoop+hoZyip6inqausrK2ur7Cwrq2unXdwbGphY2BZUU1RTFJGQzlNUEU+ODs3Mjc5Njc0NDM1ODg3OTc7OTo9PTw6Ojk3NDo5ODY1OD8/QEI9RENDQ0FDQEJBQDtAP0A/PDw6O0NIPWOopaWlpqioqKenp6ipqqmoqKipqqqsra6wsLCztLW1taWYdn5xZmt4cW9tZmVsaGNsZ2ZpaX11bWlvfXZ5hWZod294b3Fvcninu7m5ubm5ubm4uLm6ubm5ubm5ubi3t7W1tba2tre3t7e3t7a2tba2tre2tbW1tra3t7e2tbS0tLS0tLS1tLS0tLW1tba2tra2t7e3t7e3t7a2tre2tre3uLe2t7i4t7i4uLi4wMXTyry8w83PyMC9urm5ubq6ubi4uLi4t7W0tLSzs7KysrGwr6+vr66urq+vr6+uraysrKurrKysq6ehoJ6gn5udoaGdlpmkpKaon5mZmZmanZ+gn56fpKqtrq+ura2srJl1cGlrY2FeXVVOU0tSREQ4TktHQTo4NTI2OTY1NDczNzc3ODk3OTo7PT0+ODg4NzU6OTk1OD9AQEFEPkZBQkNAQkNCQT88QEJCQD0+OjpERj5cpqWmpqampqanqKenqKioqKenqaurrKytra2ttLS0tbekc311bnONf3JmanFjaW1jaGZobG51aV9jZ3VzdnpuZ3Bwcn56cYihu7m5ubm6urq6urm2s7a1uLm2trW1tra1tbW1tbW3tra3tra2tbW2tbW1tbS0tLa2t7e3tbS0s7O0tLW1tLS0tbW1tra2tra2t7e3uLe3tra2trW2tbW2tra2tra2tra3tra3uLi3uri4uLi3uLi5ubm5urq6urm4t7e3t7W1tLS0s7OysrKxsbCwr66urq6urq+vra2srKuppaSmpqScmZubmpmampmXl5eXl5aZm5iZmJmZm52en5+dnJ6gpKWko6OioqKQdG5jcGFeXltUU1RIVEo/PFFCRkM7ODYzNzo1NTQ4Mzg5OTc4OTc7OTs9Ozc6NzU2OTk4NTg+Pz9ART5CPz9DPzxBQUI/PT9EQT8+PTk9Q0Y/VaSlpqanqKeoqamop6ioqKioqKiqrKuqqaipq7W1tba5o3eKcXKHhnd0cGh5a2JjYWVsaW5zal9jZWNjZWprYmRqbHaXjX6ovbm3tre5u7u6uLWxrKurqq6wrKyrq62tq6uvsLGvr7CytbW2t7W1trW1tbW1tbW2trSvr7O0tLSvra6vsrW0tbW1tbW2t7e3t7e3t7e3t7e3t7Owsra1tLa2tre3tra2tbW1tra3t7e5uLi4t7e3uLi4ubq6urq5uLi3t7e1tbS0tLS0tLS0s7OysbCvr6+vr66vr62oo6KgnJqampqZmZqbm5qampqbmpmZmZiXl5aYmZmZmpycnZ+foJ+goKChoaCgoJ+fi3RuaXRdYGZeUlRLRFRJPUVTSEVCOzo0NDY5NDQ1NzM4ODg3ODk5Ojs7Pz04OjkzNTg5NjM5PT5AP0A6QEJCQkA/QEJCPz0+QUFCPz06PkVDQFGjpqWlp6inqauqqKaoqKipp6ioqKinp6ioqaq1tbe3t7KZtH99kIx1Z2lqbGZjYGNoZW94cGlicXx5cGpmZmRma3NqhYystrKwra2ttLeysLCtrKuqqaiop6ipqampqKinqKipqaeoqqurra2sqqytraysrq6traunpaSnqqyopKOkpamwsbGztbW2t7i3t7W1tre4t7e3t7Kppaasq6ivtLa1s7W3t7a1tbW2tra3t7e3t7a2t7e3t7m6urq5uLi3t7Wxs7S0tLKxsK6sq6yurrCxsK2rqqmqqKijnJqZmJmYmJiYmZmZmZmZmpqZm5ubnJybmZeYmpqcnJydnJ2foKGhoqKioKGgoKCfnop1amtuWVxhVktPREdVRz5PV0hEPTw4MzQ0ODQ1NDgyODk4ODk6Ojw5OUA8Njk6MzY3OTE0PD8/QEBBOkNGRUJBREJDQTo7P0FCQz9APUBEQ0BPo6empaemqKqqqqakpqenqKioqKimpqaoq6uttba3t7e4rbJ1cHuDdmBiaWtiZWZhZGdmfYh5bHKAfXFvcXhjbW5xZo+srKurq6ysra6urK2trKyqp6WmpaWlpqioqKiopaeoqKeoqKeoqamqp6Wko6KioqOioKKioaKhoKChoaKjpKOjpaWlqLC0s7OzsKuqqaqztLa3trGopaOioaGipKiqqairs7Sxrq6xs7W2tra3uLi3t7e3t7e3t7a2uLe0sa6ppqerrKmnpqWkpKSkpKWnqaajoJ+enZycm5uampmZmJeXmZmZmJiZmpqampqampqbm5mYmpydnZ2dnZucoKGgoaOjoqCgoKCfnp2FdGtsaFdYU0pHTUVITUdAU1dGRz09OTM2Mzc0NTU3Mzg6Ojo6OTw9OjpBPDY9ODM3ODgzNztAPz9AQDpCRUNAQkRDQT87PEBDQkNBQDxBQ0A9TqKnpqanp6mqq6mkpaWlpaaoqKippqanqKmpqrW2tre3t7izc2h7c2JnamtpaWJhZGloXV1tfHJma3J/fHR8bm1zc36gqamrq6uqq62trKusq6mpqKWjpKampqWmp6eqqaamp6enqKiop6iop6WkpKKhoaGhn56en5+fn56foKGho6Wko6OkpKSmp6enpqWkpaampqeqraumpKKhoaChpKWlpaempaeoqKalpaivtLa3trW1tra1tbOwrKupqa6rqKWlpqampaSkpaWlpqWkpKSkpaKhoaGgnp2bm5ucm5qamZiXmJiYmJiZmpmZmZmYmZmZmZqZmZydnJycnJybnJ+fn6ChoaKgoKCfnZ2cgHNrbmReU0pITUZETEtFRFFTQ0c9PDgzNjI4NDY0NjQ4OTg6Ozk7Pjw5PTs5PTczNTk2NTY8QD0/QD88P0JDPkJCQj89Pj5CQ0FFQD86PkVAO0+jpqWkpqeoqaelpKWlpKWnp6eoqKanp6alpqa1tba2trW2uYptcW1vfHxxZ2pmYGFsYFROW2hqbm9tgYJ9cWdxdn6aqKeoqqmpqqurrKqqqqimpaWkoqOlpqalpaWmqaqppqWjpKWmpqSjo6Kio6Khn5+fnp6cnJycnJ2dnJ2en6CioaKjo6KhoqKkpaSioqOjpKSjpKSko6Ggn6GipKanp6ipqaelpaSipKSlqK2wsKyrqqusqqmnpaWmpaWlpaalpqioqailpaWkpKSlpKOjpKOioaGhoqKgnp2cnJubm5qZmJiYmJmam5mXl5eWlpeXmJiZmpqcm5qampubm5ucnJ6goKGgnp6enpycm356bnJiXlNNSlBFRk5NQkBPRT5JOz01MzYzODM2Njc1Ojs4OTs5Oj49Ozo5OT03NjY5NjU2PkI+PkE/PT5DQT5DQ0BAO0BAQkJCRUA+Oz5FPzxQoKSjpKOjo6SkoqSlpaSlpqamp6empqalpqaltLW1tbS0tbiBaHx9ZXOCemxwdWFfY1ROT1FbaGxpbGxxbW5xbnScoqSnqKioqauqqqqqqaempaSjo6OjpKSlpqalp6ytqaShnp2epKShn56foKCdnJ2dnJycmpqam5ucnJubm5ydnp6foKChoJ+goaOioKGjpKSjoqSlpaWkop+go6SkpKapqainpaGdnJ+jpaipqainqKioqaempaWkpKSlpqampqampqenpaWko6Ojo6KioqGhoqKhoqOkop+enZ2cmpubmpqZmJeXmJaWlZSUlJWVl5iYmpubnJuampqam5ucm5ucnp+fnpucnJyam5p/fnF0YFtUTUdNSEZMSj8/TkM8QDs8NDM4Mzc0NzY3ODs9ODo6OTk7PTs7ODk9Njc4OTU4OD9APT9BPjs9RD89REA/PzpAQUE/QUVAPjw8Qz88Tp2ioaKioKCipaSkpKWlpqenp6empqampaampbW1tbS0tLS3jHalsXdmc3Jvc2xjZGlYT1JRT09dgG1kYFptkZGSoqKjpaampqenqKiop6alpaOioaGhoaKjpaempqesq6emoJ2cm6Ghnpqbm52cmZiam5qampmZmZubm5uampqampucnZ6goaCfnp+hoJ6foqOko6Omp6inqKWioKGhoaGkpaWlpKCcmZmbnqOmpqampqanpqempaOlpKWlpqiop6enpaWlpaWkpKOjo6KhoqKioqKhoaKjo6Kgn56enZybnJubmZaUlJSTk5OTk5SUlJWWl5qam5ubm5qZmZqanJ2dnZ2dnZuampqamZqXf3dvc11aTkhKTkdFRklERU5APD09PDQ1OzQ2NDY1Njc5Ozg5OTg5OTw7PDc6Ozc4ODg1ODg/Qj9BQTw+P0A8PEJAQT49QT4/Pz1CQUA6OkA8PE+doqGfoJ+dn6OkpKSlpqeoqKenp6ampqampqW1tLS0tLS0tbSXtqd1Znh2Y2xjY2VjW1JTU1JNXqCMeFhodpajnp6hoaOjo6OjpKSlpqalpKSioaGko6OjoqOlpqamp6enp5+bmpuioJqVl5aam5qXl5iZmpqYmJqampqbm5qZmZmenZ2goqOjo6KkpKWinqGhoaKjpaampaSjoaCgn5+hoZ+goJ2amJiZmpygpKOjpKWmp6alpaOjpKSkpKWnp6ampqampaWmpKOjo6SjoqKjpKGfoKGhoKGgoaCfn56dnZyamJeVk5KSkpKSkpOTkpOUlZaZmpqbm5qampqbnZ6enp2cnJybm5qamZmZlH10bHReWk9IRUdGQkVORT9GOzo+Pzs0Njo2OTM2NDY4ODo4OTc4ODo8Ozw5Ozs6OjY3ODk5Pj9APjw9QD5AOjlAQT89QT8/QUE+QUE/Ojk9PjpQnaCfnZucnJufoqOlpaWlp6iop6ampqanpqantLS0tLOysrGwsK2rkHiGj36bmn93Yl1TUlFRTGKgootaiKCgn52YmZycnZ2eoaGgpKenpqWkoqGjp6alpaOipaampaanpqagm5mboaCWnqKSmJqcmpeXl5iampmampqam5qYmJmaoKCgoKGfoaKipKamop6gn5+goaOko6Khn56enpyanZuZmpqZmJeZnqChoaKioqKkpaWmpKSkpKKioqKkpaWlpaWlpaalpaOko6KioqGgoKGgnp+fn5+fnp+foJ+cm5qZl5WUlJSTkZCRkpKSkpKSk5SVl5iZmpmZmpqam5+fnp2cnJycmpmZmpiXl5F8cmdxXl1QRj9BRD9KT0JCRjhDRT4+OTg7Nzc0ODQ1OTo6Ozk3OTo8Ozo8PT48PDo2NzY5OD4/QT47Pz49PDg6PkFAQUE/P0FCP0RBPjo4PkE8U5ycm5uampycnaGio6KjoqSmp6alpaampqSjo7KysK2rp6amp6alpqiln6iop6qnoXmEXFFST0xcnKCAYpmgnp2clZOVlpeZmp2dnqGmpqampKOioqanp6ajpaampaSlqKemop6dn6GfnqmfkJSXm52YlpeWmJuZmpqampqZl5iam6Ghn56fnpybnJ6goJ6dn56fn6Cio6SjoqCfnp2ZlpeXl5iYmZubnqKioqKioqGio6WlpKOio6SioaGhoqOkpKSko6SkpKSioqKhoqGgn5+gnp2enp2dnZ2dnp6em5mYl5WTk5SUk5KQj5GSkZKSkZKTlJaXl5iYmZqampyenZ2dnJubmpiYmpmXlZaNempmamBiTkY+P0A9SkVAQ0A7QEE8Ozs5Ojc2NTg0Njc4OT04ODs6Oz87Ojs8Ojk6Nzc2ODs8Oz08Ojo8PTw3Oz5DQkRDPz1BQ0FEQT88OkBCO1eZmJqamZmam5ucnp2foqKhoqSlpKSlpqSioJ6op6alpqWlpaemp6ampqakpaanqKehqXJOUU1KVJahenKanJyenJeVlJWWmJiXl5qeoqKhoqOkpKOjpqalpaanpqWkpaampaOgoKGhnqd5jo+WmpmenJaXl5eZm5ycnJqamZeZm5uen52cnZyZmZqcnZydnp6fn5+hoaCgoaKgn56bl5WVlZeanZ2fn6GhoqKio6OhoaCgoJ2cnaGioqOkpKOioaSlpKOko6SjoqKioqKhoaGfn52cnZ2cnJ2dnJ2enpqXlpaVlJOTkpKSkpCRkpKSkpGSlJWWl5iYmJiam5ycnJycnJ2cm5mYmZiWlJWXi3hsY2RiZFFHQT1DO0tIRDo7Ozw+OTo6OTo3Mzc5NTo4ODg8OTg7OT09Ozo7Ojk8PDc2NDc/PDo9Ozw/Pjw7ODxBQ0FDQkI+P0NAQkFAOj9APztZmZiampqam5ubm5ydoKGhoaGhoqKioqKhn5+dpKWmpqenpaWmp6ampqWkpKalpKSkpaaGUFJQT0+PmHB6mpubnJ6cnJycm5ubmZiYm56dnp6foKOkoqGhoqKipKWkq7CjpKSjoqGhnKKWYZGVmZuZm56amJiYmJqcnpyam5iWmZybnJycnJydmpqbnJ2dnp6dnp6fn52cnJyhoaCblpWVlZacn6Ggn5+hoKKjoqOhnZuZlpaWlpicnqCip6ikoaCgoqOjoqKioKCgoJ+fnp+gnp2cm5ucnZydnJmanJuWk5KSkpKUk5KSkpKSkpOSkpKRkpSVlpeYmJiYmZqcm5qbm5ucnJqZmJiXlZWWl4d3ZGdoZGJNQ0U8RDlJSkU5Ojs9PTo6Nzg6NjQ3OTU8OTY4OTc5PDs7PDo6PDs6PDw4Nzg3Pj07Pj46Qj86Ojo/QURCQ0FBQD9EQUFAPjpAPj06W5qYmZqbmpubm5uen6CgoaKioKCgn5+enp2dnKWkpaanpqWlpqakoqKio6Oko6Kjo6KnllRYVVJOZ21rgZ6am5udn6Cgn56enp6dnJ2dnJ6enp+goaCfn6CgoKGio6qwq6KjoqGhnpqmc1+XmpmamZienpiYmZmam5qWlZeWlZicnJ2cm52dnpybnJ2cnZ6bmJqeoaGdm5udoKKhmpWVlpaZoKKfnZueoKGjop+em5eXlJKSlJeYmZ2goqenpaGgn56goaGioaCfnp2cnJubnJubmpqZmpydnJmXmZaVk5GQkJCPkZKSkpKSkZKTk5OTk5OTlJWWlpeXl5manJubnJucnJqamZeXlpaVlZSEcmZsYmRbREJMPT84RktCPEA+Pj05Ozk6PTg1ODg2Ozg1Njo4PDw7Ozw8Ozk8Oj09OTU4Nzw5PD88OkE/Ojo6QEBDQkRBQ0A/Q0FAPj08QD09Ol+al5mamJeYmpycn5+foaGhoJ+fn56foKCenZ2lpKSko6OioqOjoZ+foaGipKOio6SiradXXl1UV19ua42dmpqbnJ2dm5ucnZ+enZycnJydnZ+goKChoaGgoKGgoKGtkqiloaCenJudn11kmpuZmpyZnJ6ZlpaWl5eTjo6QlJabnJuam5udn52cnJycnJ6dlpSZnJ+in5ycnZ+hoJuXl5mZmpycnJubnZ6fnZqXlpaWlJOTlJiampqfoKGmpqWgn56fnqChoaCenJubnJybm5ybm5qZmJmZmZmXl5iVlJKQkJCQj5CSkpKSkZGTk5aYl5STkpSVlJWWlZaZmZmam52cnJyampmXlpaWlpaQgG9vZV5gV0BKSDg/N0lFP0VBPD07Ojo8Ozs3NTs4Njs3NDY6Oj47Oj0+Pj07Ozs+Ozo4Ojk5NkBBPTo8PTo6OT9BQ0JERUM+P0FBPz8+Pj89PDtgl5WXl5aVl5mbnqGhoKGioqCenp6enqCgn52bpaWkpKSioKCfoJ+dnZ+hoqOjo6OkobCjXWVkYGFua4GenJubm5ubmZianJ2enJubm5ycnJ6ipKGeoKGioqKhoaCgqJeBrJ+enZqYpIhYZpmcmp2em5manJiXlZWWkY6Nj5KYnZycm5ycnqCdnJucnJyempWVm56foZ+dnJyenp2cmpqampqampqbm5qXl5aTkpWVlpWTlZaam5qanZ6foqWjnp6fn5+en5+enZ6fnZycm5qbmpqbmpiZmJiYmJiYlZSTkZCRkJCQkZKTk5CRk5SYmZiVk5SVlZWWlZaXmZmXmZqenpyamJiXl5aWl5eYjX1ubV9lVlRFSzw3PjdSRUM+QkE4Ozw7OTg6ODY7Nzc6Njc5Oj0+Ojw8PT49PD06Pz06ODw9OTtAPj4/PT45OTs/QkNAQ0VDPT9DQj5AQD5APTw8YZWSlJWWlpeanJ6goKCgoaCgnp6enp6gn56em6WlpKSioJ+fnp2dm5mbnJydnp+gn56rmGNpbW5pZm2enZybm5ybmpmZmZqam5ucm5uam5ygo6SgnZ+en6ChoKCgoKOkb5uknZyamqV5YmaYnJuenpyZmJqamJiYmJKOj5OXnJ2bnJ2cnJycnZycnp6dnpqVl5ygoaGfnp2eoJ+cnJuampqbmpqYmpmVk5OTkpOWl5eVlJiYmZucnJydoJ+gnp6enp+fn56en6KjpKKgnp6cm5qam5uamJmZmJeXlpWUlJORkZCQkZKTk5OSkpOUmJmYlpWUlZaWlpaWl5iYmJiXmZqamZeXl5aXlpeWl4l4dmddX1dURUU5OTs8WT5AOEI/OTw8Pjk4Ozg6Ozc5OjU4OTs9PDk9Oz0+PD0+Oz8/Ozk+PDw+Pz5AQUE9ODc7QkNFP0FFQz1AREJBQEQ7Oz47PGKWk5SUlpWUlpiYmZubnJycnZ2cnJ2en56dnJqkpKSkoJ+enpybm5qZmJiYmZucnZ6cpolla3R4bVuFop2dnJydnJqbmpqampydnZ2bmpuboKKinpucnZycnJ2enp6ep3mHpJuanJ2geGtmk52cnZ6cm5qanZqam5yVkZOXm52dnJ2fnZycnJycnZ6fnp+cl5idn6GhoJ6cn6CfnJubm5qbmpmZmZmZl5WWlZaYl5eXlpaYmZuenp2dn6GhoJ+fnp6fn5+dn5+hoqKhoZ+fn5yZm5qcnZuampmXlpaYl5eXlpWTkpGTlJSTlJSUlJaZmJaVlZeZmJeYl5eXl5eYl5iXl5eXlpaYl5eVl5eDeHZfW11eUT1GOjk4P1VDQTtDQzo8Pz86Ojk3Ozg4ODc0ODk8Ozw4Ozs8PTo8Pjk/QT06PTw+PkA/PUBBPjk2PERDRUBBRUU9PkVERD9COzo8OTpkl5SVlZaUlJSUlJWXmJiamZqcnJydnp6dnZybo6Oko6CenJuamZqZmJiYmZiam5ubm6WJa3F2em9lmp+enp2dnJybnZ6dnJ2enp2dnJydm5ygoJuampubm5udnJubnKJ+gJyZm5udlXVqZ4+fnZydnpybmp+fm5ydm5mZmZudnZ2dn52dn5+dnJydn5+fn5uanZ+goJ+dnJ6gnpubm5ubm5yampuamZudnJqZmJeYmJiYmp2foKCgoJ+hoaGgoJ+en5+fnp6foaKhoJ+enp+enJqam5ubmpqZlpaXmZmYmJiWlJOUlJWVk5OVlZSVlpWVlZSYmZuamZaWl5WWmJiWl5OUlJGRk4yRkJOWfXhqYWJiXFA8QDw2OENWSERCOjg7Oj47Nzc5Nj06OTk2NDc6Ozw9OTo6Oz87PT08QD47Oz46PT89PkBBP0A8NztBQ0U/P0REPj9EREM+Qj07PDs6Z5aTk5OTk5OTlJSVlpeWl5aWl5mbm5ybm5uamaOjoqCfnpuamJeYl5eXmJmYmZybm5qkgGpqb3lzcZegnp2dnJydnp6enp+enp2cnJydnp2bnJuampqam5ubmZmZmpqqf32Jk5ycm4hxaGiOn52cnJ2cm5qdn5ucnJubnJubnZ2dnJydnp2enZydnZ2cnJ2dm5uenp6dnZybnpubnJycnJydnJubmpmbmpmYmZmYmpmZmpyfn5+jpaKfoaKioaGfnqCgn5+fnqCioaGhn5+fn52ZmpucnZqZmJWWl5aVlZaTkpOUk5STkJCSk5GUkY+OkJGOlZabmJWYlJmXlJiRjJCPk5yTkoyFjIeDhndxZ2pkW1xRQT44NkJHYEJFR0A+Ozw7Ojg4NjU8ODo4MzQ6Njk9PTk5Ojs9Ozw6PD48Oj5AOj5APjw/QD8+PDg6Q0FEPz5CRD8+Q0VCPUJAPDw8OmeYk5KSk5OSk5SVlJWXl5aWlZaXmZmZmpqampqkoqCfn52bmpmYmJiXl5iZmJmcnZ2cqH1nZXN7enOJop+enp2dnp6enZ2enZ6enp2dnZ6cm5ybmpubm5ycnJmYmZmYon+GgoKZnpyBcGJojp+enZ6dnZybm52bnJybnJ2dnZ2dnJ2dnp+fn52cnZ2dm5qbnJmZnJ2dnZ2dm5uanJ2dnJycnp2dnZybmZeVlZeXmJqam5ubnZ6foqOhoKGhnJucm5ubnZqcmZycn6CfnZiZmZmUkpKUl5SPj4+OkYyNiYuQi4mLjpGRj4mQmJiQkoyNi5KQj5iYoqiqpqWlrKOmoZqep6eyqKKVo6Cfl39wcWlsXFtcTUY8NzdHR1g+SE5URjk+Ojg5ODc1PTk4NzMzOTY6Pjw6Nzo8Ozo6Ojo8PDs/PjtAQD47PT5BPDw2N0A+QkA+QUY+PEFEQT1DQj49PDlmmJSTk5OTkpOUlZOVl5iYmJaXl5iZmZqampqaoqGfnp2cm5mYmJiYmJiYmZmZm5ybnKx/am16f3lxh6Genp2cnZ6enp6enp6dnp2dnZ6enJubnJubm5ubm5yZmJmZl6Cbm3x6m6ObgIdrZZCfnp6fnp2dnp6dnJydnJ2dnZ6fnZ2fn56goJ+enZ2dnZybnJ2em5qbm52enZ6dm5ubnJ2cnp2cnZqYl5SRjo+QkJGVmJSWlJiZmpudmJuYlY2Mjo6TkpKRj4mQjpGRjo+Ki42NjYiIi4+Lg42NkY+MkI2Qk5WVnJihoJySn6SipKmam5eanKOprb3Bwbq8uL26ucC8ubq3uru7tL2zwbV/bnVmZ1peWUxJRTo7TElTPFZSSUM6QTo7Ozc3NTo6OjgyNTY4Oz08OTk7Ozw5Nzo4Ojw6PT85PD8+PDw9QTs5NTg8O0A/QT9EPTxBQkA8REM9PT06YZOTkZCUlJOTk5OTlJeYlpeZmJmYmZqbmpqamp+gnp+fnJqZmpqampmYl5iZmZmZmZmphXB1e4B3b4mhnp6enp6fn56en56fn56dnp6fnp2dnJ2cm5ubm5ucmpiZmZupnIhnbq2qjGiDgWyUn56goJ6enZ6hoJ6dnp2enZ6fn56en6CenZ6enJydnZ2cm5qYnJuVmJqamJiYmJmSjJCXlKCXk4+MjYqKiImMiJORh5CPjYqKkJCLjoqMi4+IiImJjpGOjYaFiYaKhoWLiI+SkJCNkJKXlpKamJ2TlJ6kpqaqq7Gsr6+rpquqsbm5tbS0rqyvtMDIxcXBvsbDxMTDurW+t7a0s7C2tb6qcHRyXGZfXl1JRj8/RUtMVklcTEQ/PUI6Qzk5Nzc7OTk3MTc5ODo+ODg6PDw7OTc5OTs9Oj4/OT5BPDs+PD46OTY5PDpBPkNBQT08QkBAPkJEPj8+OVyHhIOHi42KiYaFgYqMkZOVmJiHlZaWkpiampmenZ+gn52ampubm5ycm5iWmJiXl5ibqo56dXZ7f3mCoJ+fnp+goKCfn5+foKCfnp2dnp+enp2dnJqbm5ybm5uYmZegpoh0X2WeloJXcnt6m5ybm56dnZycoaGfnZ6dnZ2dnp2dnJiWlpaYlZWSlpmWk5GKjI+PjI+NkIuLj4+WiYiEi5GZjn2Fi42PjYyHioyQm4yRj4+Lio6TjIyNjIiSi4yFiYyPhouIh42KhYyEj4qXkJOYmpWbnKOqoaKknKKrsbe0ubWxs62vsrKlp7O6sbq6vLa3tsDDw729vLa/urq8wbW4wL60r66mqa+3mm58Z1tjWl1fSEU+QUtJU1hZXkFGOTk9OkY/Pzo3Ozs7NjM6Nzo5Pjg6Ojw9OTk4Ozk7PDo+PTtAQDs8QjxAOjg0Nzw7Qj9BQj4+O0NEREBDQz0+PjlhmZWLkYWNj5aSiHl9e3+Fi4OKgoqJhmuAeJCLlpqRnZ2UlJGTlpeampiWk42Sk5KQm5uIdndzcX1/cpGgnZubm5yenZ2eoKGgm5uWlpucmpubnJuYmZqYmJmbmpuVop50Uk1vlYR4SVlwd5GUkY6SkY+Uk5KXm5mYm5ePjpCLjo2Ch4uLi4qLiI2RjIeHhoqIiZGKh4yEhYqNi4qNhI+UkIyDkJOUmZWQi5OTkZWRlpWOj5GMlI2Oj4qIj4ePhoeJiYmNiomJioWNh46JmJKUmpuXmKChp6Cko5qqqbO2sbWwqKmiqK6tn6qvsK21ubi8wr/BxLixtbCutrOwuL68ury+urOzp7G3wpB1gGNiXlpXUk1IRkVQSVlXX1tDUDpCQz1HRj84Nzo6NzU1OTc8OTw5ODo9Pjo6Nzs7Pjs7PTs9P0E7Pz48Pzo4NDM3OkFBQEI+PjpDREM/QUM7PT45Z6mloqKZn6CippeUiI2CiIJ1h4iKiIp7e3Z7enmPeoiSfn18en6CkYWBgH1zfH99fISHfnRweHZzfHaBj4iIiYeIioyMkZicl4iOhIuNi4iNkZCPi5GPi4yPkJGRj6eVUzlAdIlxZ0U6VW+Bh4aCjYuGiYp/iYqGiJiRiIOIg4KFfIuLjIaJi4iKkIyIi42PjI+Wh4mLio6NjY2Wk5OdnJyalpycm56bmpuYnZeTkZWWkJKRi4+LlpSMjYqDi4SEiYyQkIqOio2LipGJjZOTk5SVk5KcmZ6Xn6CfpaKvsamupKSfmKStpqa4t6ysu729wsPAv7+vpa2wsLS3uLO0uLa0ta6stK+4tLaBeXpjZmBeVlFRQUVMT0lcXl9UR0dCS0xCREA9ODg7OTU3Nzk3Ozc9PDk9Pj05Ozg6O0A8Oj06PkJBOD88Oj84NjQyOTtCQD9CPj04QEI/PkBEO0A+N2CloJqXnaGaoaCPl5efl5WCjaCfo6GdmpKOjIxycXBvdnFucG1ucHZub29waHBxcHR+c3FycXd7cnl2d3Jyd3Z6e3l8fXt/iIGEi3+PkYaNi4yGiouLiYeEgYaDgIqoeU5oVHSLd2VPVUNfd36AgpKQhoSEhY2DhIyPj4+IjY+Hi4iRkJWRjpCKk5eOj5WYp6SfnZWYlpaln5udq6aqt7W4srGnr6qnpqGfmp2WkpWVkYqPjImTjZuVjYuLhoaJjJWQkJCLmZKVlZSbkJiTlIyNkYyWl5WilZ6mqauno6OqsJucpp+mq6G0vb6zs7+5u7u6uby9rqiusa6wuLyztLGxqrCpqLGxsqild3J0X2hhYFRWUUlKSFZNXl5eVExKRVFKRUdDPTo5OTc0ODY4Mzg4PTo9PD47OTs4Ojs/PDw+OT9DPzg7Ojg8Nzc2Mzc5RT4/Qz89N0BAQT0/RDw+PThUj4yGh4eUjJWZl5yWmZaNlZyWlZydoKCdmpiWeHFubXJ4cXFsbnJwa3FvcG1yc3t1dnd5fnVxeHZ0d3tybn98gX15eH1/eYOGg4WCg5CLkIuLi46Pi4mJhYKCfn6CoF91jGJ/p56IXYZ7UWt/fYWOjYuGjZSSi5CXj5SXkpihlp6WlZunpp+goKawq6GjpbW0sqqmqq+isba5vcK7ucO+vLi9uLWxrLCspZuSk5mfm5SPk5WOmp2doJqfn5edo6qsoZ+em62hp6qwqaampJiRkZWUo6SirKSss7Szs6i3tru4sLKvra2yt7a6srW6s7e5u7i8urayr6yxsbKztLOxsa2us7Gzs6yhl3Zxc19jXlJRVE1PSUdYT1pcZFROR1VPRURKRD44Ojg3NTg4ODU5Nzo6PTw/Ojg8ODk5PTs9PTpCPj84Ozo5Ojk4NjI1N0I+P0RAQDY+P0I/PEM8PT46Tn98go6MjJOTl5eaj5SWjZaRkZSXk5qanqGdnHJvcnFxcXFxcG5zcW91dHJxdneAdXd8eYV+d3t8eX1/fICJiYmDfXp/h4GIiYGAgIGGiIKGi4eIhYSIiIqFgIJ9jJZjudSPvbqpt4d0fGlZf4aKjouNkJmclJSUoJqan6Ktsa2ppKWtr6ysrLWuvrmtrqm1sLexq7G2rK+9wsLAvrq8trKutraxtK66u7OurKepp6unoqmtoKmooq+wuLSxvLq6urK0ta+8tLezt7e7t7mtrbCprLW5sbeytLe2sLu7vLu6ury1vLi0wbWsqqqrtLG3uLm1trSzsKymrrCqq7Cxq6yusLKxtK6qo5N4dnJlZ1tMUlBFTUlTV1JlXmdUUExcUUhMUkNBOTk3OTU4ODY2Ozc5Ojs6Pjk4Ozo6Ojw8Pj08RD45Njs7ODg+OTUxNTZCRkREP0A3Pj5DPjpBP0BAO0t/gomXmJSdlpabmIuSlo6XkZGVl5SZl5+bmZx8dHV2dXl1c3RudnJzdHV2d319gX56gXyDfoJ/fYB/hIKFj52RiYF/go+Xjo6HgoCBiIuFfoqRjH+IjY2Mi4eSiZWCgc/EnNWtmrCeX4JxVHqRiYmQj42PlJSYkJWcmp2eqK6yr7C1tLOtsrW4sLy1tbGqsKqztbS7t7SztrS1r7i4t62noqassLCvtre3vrW5vLOysa61u7C0r6+yu7axuMC9tLS0s7izvLq2tLrAvbm6ubq+ubm5vrWysa+yr6q1tLGzsbSzrri4tb+vpKaoo6ussa+zrq6wsKytq6qroqKmqKKnrauqpaynoqeYeHlxZmVZT09NSVJNV01PX15cTlVVYlFEVE07Pzk8ODk1ODc1Nzk1Ojo6OTs4Ojw8Oj08Pj4/P0I9ODY6Ojk6QDs1MjY2QUZDQz4/Nz49Q0I5P0I/PjtLjpGTmJmVmZGTopiTkpKLk4uOkI+Vl5ablZSbhoJ9enh2dHRzdH53end2gIKDhouMhISFioaQiYeRk5aRjZaalY+IjI+emJaVkpCTl5qamZGeoZ2Tl5uhmp2bo6Gcbo+6pLjRsaiuk2yzp1V0lI+LmJqPj4yUmpecnZugnaSstLm6vK+2tLi0tLK3uLmzq6+qqKy1srK1rrGrrqa3s7OxpaGotbCvrayrtbqyu7q6tLK3ur67ubG4sLmtqLK4u66ttLS3tbu2trm5vLe0r7G0t7a5s7e1pq2pq6ior6yprq2up6KxtLG0q6aop6Cjq66oqq6orLKwr6+pqKGeoaGjpqOgopqlo56ol3J3bmdiVUpUT09KRFBLX2JYWlFcVGBNSFJJQUA5Ojg2Njc3NTg5NDs5Ozk8Nzs+Ojg8PD0/QkBBPTs2OTk5Oj87NjM3OD5GQkJAQjk+PUBDPkBGQj44R5OWkZWTkpSQkZ+ZnZmVkI+Sko6Mk5aWko6RlZGSkIaBeXJzdXuBhI6HhZGTkpicnJiVkJWYo5yaoaeqqZ+clpeVnaKioZyZnpmlqKyvramnqqqpp6KlqKmrqamwo3SNlX6xvLOrlYddlsRsb5yioaSem5qkp6Spq66spaSoq6+xtK6qrK6zr6ystLO0ua6urayqrLKwsK2wqKqmsrS0uK6qtrqwr6qurLC3s7i0t7W0u7y4tbWxtauyrKiys7uvrbGytLa1sbG0s7OvrKuvs7a0sayutKqqpqWnrauoqKupqqifqbOwqqeppaOio7CtqaatpairrayppaSioKWipaOYmZyVnqKippdudWVnZFdPWUtLSktTVHBiWWRXX1tcUlpQTEM8ODk6Njk4NzQ3NzQ4Ojw6PDg6PTk3PDw7PkM/QT47OTo5Ojs+PTg0NThBREVEQkM5PjtAPkI/R0Q+N0KSm5SVlZaVj46Wl5qZlZGKk5SSjo+SkYqKiY2Ul5qTjYmCho6VkZSfmpuin5+jnqGhn5ijpKelpaapqa2rqaKmpKilpKGfnqOjra2srairrq6rq6ykoaKlqaeoqq+Si3Z7p5eOj396am2Rem+Wo6inoKKhrqyrqqetrqilpKmpqqmmo6iqqaekp66wr7Ovq7Crqq+yr7Czua+rqLCxrrCyubO0r62vtbCss7GurLW1tLSzs7CvrKyqrKusr7G0s7CwrrCwsKyqrauqq6alrrCysKumqbCvqaOkqaunqKaopquwq6mvqaaoqaalo6iwraqpqKKpo6WnpKGhoKKloZ2el5aYlJugpKmUbnNeamlfVlpOUk5QT1NlXGVjW11ZXFBZT0tAPDs5Ojc6ODczNTMzODo9OTo4OTo5Oj08PEBEPkA9OTo8PDw+Oz45NTo8QkFFQUNBOT47P0BEQENCQDdAkZ6YlJeZlpGHi5SSl5GIg4mLk4+OkI2Hh4SFlZmWmJeZlpqeop2ZnKKkoaCdn5qfoKGgpqGgoKCjo6KlqKmrramqpqOmpaCloKaop6aoqaepqaSoppqdpKWjoaGrlHxbaZF+e4Byb2tzcXt7lJ2ioqChn6GhqKCcnqGloaCmo6KepKGspp6foaGkrKqnrKivq6e0sa6ur7WyrKqwq6mtrbWwrq6srreup6yqpKivsq+sq7Kvqqqpq6utqa6urrGxraqtqaunp6uoqauinaapqKilqKisqKilpKWop6iopqmsr6+oq6mhoqKlo6Opq6ymqKWjqKKhoKSdnZ+hoZ2bnZ+amZWcnKOqlG9zZm5yZF1dUFVPWE9eZGRsaGJiWlpSVE9NQTo9Ojo4Ozk1MTYzMjg4Ozk5OTk7OTk8Oz0/Qz5APTk7Ojs8QD0+PDk5PEFBRUFGQTo9Oz9BQUJBRUI4PYqWlJOYmpaPiISNjpGSjIiIiI+JiZCRjoqKiJubmZygpaKlnqKjoZqeoZyanZ6bnKOop6ugoKOYoJ2XnKGjo6WjoqKkrKilqaCepqmnq6mkoKKgo6ehpq2np6Ksp31sU1t3b3F2a2dkamZueIGPnqChoJ6doKOalpqYo6KipJ+ZnKGhoqCbmp6goaSgnaejqrGorqusqaSqqquorKalrKqws6+rq6mwq6appaWoq6ynpqevq6Wnq6upq6irqqqrrailqKOmpaesqayoopykoaOmo6qpqKano6SnqKanqKepqKupoaKoo5yepqWjqKino6WlpqmgpJ6inpeYnZ+doqKlnpiUlZ6go5d1d2t2eGJfXFVZUVVXW2Nfc19oX2NTUVlUSD48PTg7OTo4NTM3MzM0Nzo4OT05Ozo5PDxBQEM9PT44Ozw9PEA/Qj86ODo+P0NAREE6Oz49QD9DQ0VDOTyCmJmenZ2alZKKiZGRl5GQh4SJgoGNj4+Sj42cnZ+hpKmlqaeorK2moqGfmKSmo6Stsa6yp6asm56em5qjp6Cfo5+foq+rq6yoqKuvqaiqqKKgoaeprrS3trm2ro9qY09Wbmtrc2hiZGJbYGZvdoCNm6OloaGimJWem5+fpKGblZigoZ2enJudnZuZmZWen6Oonp2iqKGaoaOmoqSoqaqoq7CxqKWlp6eopKWpqaqnoqWmqKadnqWloqClpaOlpqCjpaOjpaelqamqpKekpqKmp6SrqaenpKGlqKynpqWlo6OopJWdo5+bnaCjqaeopqGjo6mooKiioJyVkZqfn6GmopuXkpCamqCVfHdvfXlmW1tgX1pcVlxoZG9jbWppYl5QUEA/Ozo4OTg8OzYzNDMzMzc5OTs8OTs7OT49QkBAPTs9ODw9QD08PENBPjo4PT9EP0M+Ojk/PEI/P0FEQjk6gJ6kp6Kem5+gmY+ZnaCWloqGj4iEi4qTl5SRo6Wnqq6trLOys7S4t62pqqevtLKxqq6usbKusa2lq7OssbGpq6+rq6y2sLSwq7GysaOgo6qqqbTCxsbIx7+zppJ1YmBKT29xbXRnYGdnWF1bYGdsb3V+iZOcpJ+hoZqWnqScm5aZoqefoJ+joJuUlpmWl5qfoJmVnqGZmJ2dpZ2gpKeqqaiqraylqaSlqqeqqaqsp6SkpKOimZmhnpqaoaCfpaWYnqSmpKqooqelpaGqp6mnp6ejqKWmpaGkqKesoqekoaalpaOVl52Ym5mVo6elpaSfnZ2lo6Kqo5+amZiXnJyaoaGakJOTl5ibjX93cnZ4amJbX15cYllgZG5ta25hX2RgUE9BQDs7OTs4Ojk2MTQzNjQ3Nzc6PTo8Ozk9PUI/Pj89PDo/OTo7PD5CRUA9OTtAQT5DPDs5PzlAQEBAQkM7OXuao6OcoJ2dop2Zn6KioJibmJaYkpSQm5qWl7S0rrW4s7S4tre0uLm3tbm4ub28uKqLnLK4vLS9urW7uru4s7q/uLe5u7G3r6iusq2inaCrssDY4d7VxreqnZF8Z2JfRlJqbnF4aGBiaVlbXltcXWFiYWBmfKG9vaikmKGko52goaKooaOgpaGck5mYmJmco56cmpudl5uZlqWam5+hqKmpqKuvr66pqKirrKytq6irp6WjoJyfo6Ojn6Cipammmpyip6Spn6GjoqKgpaanpqSooJ+ipKGjoqiop6OloaGopqalo5mbmJuTj6GknqKfmJiVoJuhpaCfm5udnJuamZugmo2YmZiTkYaAdnh4eGNbUllUX19hbWh2bHBoaWliWlNMQDw6Ozg5Nzk3NTU2Mjg1Njc3Ojw7Ozs7QD4/QD0+Pjk6PDk2Nz47QkZCPDg7P0NDRDw+OT43PkFCP0ZDOzhwkpqblJ6bm52Vl52doqajopaXnpaXl6GblJi+t7G4uba3t7i7l5S2vbu9vcDFtaK7mKC3v7+6wcm0nbu2sra/xcGooLa0urGqrrSxsLK0tba/ydXWx62YjoJ1ZWBjXEFRbGh1dm1iY2RaWVpbWFlbWVdnjbXAv7aus6CnqqynqqmlpqCnoKGmoZOWmJ2foqSjnZ6coaChnZekmpmdoKaqqqqtrq2tsLGrrK2sqamrrqimpaalpqSkpqaeo6eppKGcoKKjpqCio5+jpJ2foqWgpJyboZ6fo6GhpaSlqaOkpaKkp6ehn52elpOcoJiZko+MjJeWn5uWnJqdnJqSlpSUmJOQmp2YiouHgIB8gnhhXllUYWlgZnNvdGl0ZGlkYltMSz46OTg5ODg5NzM0NTI1NDY2OTw8Oz08P0E/QEA9Pj44OTs4Njc/OUJFQzw7PD5DREM9QDs9Nz1DQ0BFQjw3Z4yRk4qalZiblZWYm6Knq6aVl5iQlZmhnpeXvrWztLu6ubi5woeYt6u4u8DCxbOjw6e4s72/tMTHvbS7uL62wMTErqCworW2tb2+wcTHw8O5vb7ByNDNrYBmXVlXXFVCSnFobWdyZ2FfWFtXWVdUU2KOvMK4t7uwtbaor7Gwr6yqoqajrJ+fpquXmqifpaWfoJydoKuwsKyiq5yYm6Cor7Kys6uorre1sq2tqaalqKulpaStqaShn6Cnnp6mqKmmnp+anqGlpqmcnaObl6KmmpuanZ+cmqGcmZ2eoKijn6GfnaWioKOioZSZmpmTj4qLhI2Qk5uPjpiVm5eYkJORkomNl5iYk4uKi32AgIVwYGJfXmtjYm54dXZubVtiUlZcTUc7PDk3OTc5Ojc0NDQxNDM3Njg8Ozs8PEBAPUA/Pj8+Ojo5Ojc6Pz5FRUU8PT1AQkJCQUE7PDhAQ0NARD87NV+MjIaFlouUlZeYl5ifpqellpWVkZebn5ual7mxtrO5vLy5urWqsryxvsG0vMe5uLuuv6fGw7/KxsnIxcXJvMLHx7+xsKe8vL7FxMbJx8XGu8XBxcXBwcC9jmZWVVdSSER0a2Jgb2dZW1ldW15YY4y6xb6lpbG2q7WyrbOtqK6vp6awr7Ktqq+zpKu1qaeopKCgnqmyuL61tbWqqaausre4t7apq7i8ubexr66noqOop6SfqKOfnqCZoZydoqSnp6GelJuaoKGlnqChnpajnZSQlpiboZqflpORlpSin5qenJudoZ6kn56VnJiPkpOPjImTkJefiZCWkZuUmJGRlZaDjJWXlpKLjIh8foR/aWZoYWtsZ252cXJ1cWdeX1xSSUU/Ojo6Nzg0ODw3NjU0MjMzNjU3PDo7PDs9QD4/QD48PTk5OTs6PDw+QkRFPj49QENDQkREOzo4QUJCQUNAOTJbk4iEjZGKi5GRlZCSmp2fnJOSmJSdnZqXmpW2sbm1tb6+tri1uLO8vMTEusPHwb+0s8XFxr/CzcfLzsvLx8HDxsfIysXExcO7vLzBxcHFxL/Dw8bGwbGUx8q2hV5WVE9HYmiAi4xWVV1gYV1ig7HBua6yp6uoqKqtrKmlpZ6pr6uyu7q4u7e5t7O5uLOurLO0qrC1ub3Bur6+vL60urm4u7qysbS8u7q7s7Oyp6Smq6uioaCdmpudmpyXmpuenJygnZaclpuZnZ6io52UnJCNiY6OkZ6bnJWNh5KLmJiWmpybmJybnp6cmp6UjpiYmpSRmZeeoZWYmpKXlJWRlJqYk4+TnZaSi5F+enx+dGtsbmRvbWlxeG55aWlhXGdhUUZEQTw5OTc2NDQ6ODQ2NTMzMjY1Nj05OTs7PT47Pj49Oz05OTs7Oz89QUNBQkFAPEBDQ0NFQjs4OUQ/P0BCPzsyV5uQkZCQh4WSjo2IjZCTlZGPjZSUm5STlpqRs7e4uLi+u7C1sri2tbbAw8G+w8LAvru+u7u8xMzEzNDLxsa/xcfLyNTLysjGv7u7vsS+xcjGxsTExLm1wLa1yc+ja1VVUVNfmKmlUVZbXl5mlcC3pquzta2upaSjp6SgoKWZqrSxvsG+urm6uLW0srG0tLO6wL7Av769u7u9vsDCt7a3tru7sru+ubi3u7a3tKyoqamrpqijnpOampyYkZKZl5GRmJqXnpiWk5acm5+elJOJiX6GiIuWlJiZkYmVkZeWlZmbmpaYl5idnpyhmJWZmZyYl5ybn56jnJ6WmJeTl5yZmZyUlp2UlpOJdnl5e3Zua2lodVpmcnhzeWZmXmRbUlhJRj87Nzg4NzYxNjk3NDQzMzM2NDY7ODo8Oz08OD0+PDo7PDs9Ozs+PkRBQURCQEBBQkNDREM9OTlCQD8/QD89MkyWmpaSk4yKmJCKi4yOkpKKiIaNkJiKj5CUl7O7tba/vb2xtrjBvby0uL/Bsbi3vsHFvbu8wsbJv8jOyMHEwcfKysbKxczIzcbIxb/DwMvNz8rGxMPEwsW+t73Dyrp9VVRUTI+tnk1UV1dolru0sa2suLWyrKmjoa2prKatn6y1tL/Cvrm4vbawrausr7W0ur7Fv7u8urO5u7i5ubWtsLS9u7G/vLiytrmzubu0ra2orKyqqaeXnpualY2MmJSTi5WWlJyZl5WWmZKYn5mQiop+iYqKkY6Vl5OUn5mWkJSZmJmWmJOUm6GeoZiYmp2ZmZaenpibopqdnJuYmpuZlpeXlpyZlJyYfoB4eXV1ZWZpamhdam9ueXhjYmFgXlhXRkU4Ojg6OTc5NDQ5NzY2NTEyMzM0Ozo9Pzs9PTo6PTs8Pjo7Pz48QkBDQkJFQj0/Q0NDQ0RFQDk6QkFBQj5CQTVCkJeUlZmSj5qQjpKRjZSVi4qHjI2UiImPkpq2u7S8xsHEwr3BxcLAtLO9v6ywr7rDysPCvs3IxbfByMW/wcLIy8rCwsTJzM3Oz8zDx8bIycjIycfFycfIx7/Fx8PHwotYUUuGsJNJT1VooMG9v7m8ury6vKytpqm7urm3v7K1uLLAxrq3t8Gzsa2tqau1s7u2w7a2vbWxt762s7e4sLW2v7uwvbq0q7CxsbO8urOzrqutq62xnaOjoJqQjpiXlZCclpaYlpWSnJmTm5+clpGUjpWQiYyQlZOUm56YmZKSnJedlJmSk5aZmJ2VnJ6do5yVnZ+TnKKcnKCfnaOemJSVl5ebmpmgkH99cXRxb2NhZ3ZoaWl0bXlsXWRbVWBZTEhDNjw5OTg4OjUzOjY2NDQxMzUyNTs6PD47Ozw9PDs8PTw7PD49P0E/RUFCQ0M+QEFARUVERUE7Nz5DQkI+Q0I4O4+akZaalJKUjZCUlI6VlI6Pi4yJk4uIkJObt8C6xsXEw8zCwcS9vrWvt7uvr7O6wMfFxMHMy8W2ucDCwsTHytHLwsPExsnFzNDNx8zJwsLHwsvLyMfMyc3FxcTDxcfJp3RNerKKR054rczNxsTBxMfBvL60sbCwwr6+wca/vri2w8K6urbAvrWyrKmvsri+tMC0tLi0t7nEua+8vrm+v8K/tbq2q6qsrq+wt768trSura2utaSlqKimmpycnZyeopydmZOQkp2VmKCdmJiVmZmZl46MlH2QkJefmZmYk5GToI6Nko+VjpCUlaKdnKSem56elpyjoKGipKOkop6amZubnJ2enIN9cnx4cGdga2p3bGlldW50Y11iVFdVU01HOjc7OTk3Nzo3NDg3ODQ1MjM0MjU7Ojk+Oj08Pz04Oz05OTk9PEBBQEVCQUJBQT9AP0RFREVAPDk+QkNCQENBOjSAoZeUmZiVkImUk5aTiZGMlJGOiJaKi5CXnMXLw8O8wMPHwbm9vbu4tre3rrK3uLzAwsDCx8bHurzAwsTHyMbSycHDw7+/vsTLyMrLyby8yMfJzcjDyMnJxcXBwcDAxsvDk2R9ZEuDycnL0MW2v7/AwLq7vbWzs8C/ub/DucC3u8G8uri7ub27srCvsKy5wri9ube1t7q9xb24xsjCwcLGwr28tamurrCwr7O6t7m2sK+tr7OppquprqannqSlo6OjoqCblZiekZecl5GRlZeZlZmRlJiSlYyYo5qcnp2FiZ+TfJKWlZKUlJennaCipJ+en56foaGkoqKjoaOinJ2fnqOhppl5enl/cnBmZWdjamRiam1ub15ZXVZWTlBKRjk5Ozk3Njc3NjM3ODk1NjEzNTI3PDs8QDs/PDw6ODo8OTk4Pj1APz9GP0JBQz89QT5ARENDQTw5PENBQ0RBQDozbKKdlZedlo+PmJiZmIiSjZGVkI+Vjo6TlpbKy7u5urnBu7q3vsG8vLu5sa61uri4u8S6vsC+vru8wMXBxsK+xsK5u8O6uLm8vsHHwca7ucjIw8XEwMPBwcDEwcK9vMHAwMSTUElzyc7EyNDBr729uLm7u763tLG5vrO8vrG5tbi7tryztbm2uba5t7GtusG6vMG/t77Ev8bDw8fHwrvAwr/Cv7iys7O1tLGut7S3tbSxrK2xp6Wlp7CtqJ+nq6ajqKWmpqCgn5SYmZSRkZWUl5OYl5qhnZ6hnKGdoaWglpSbkZeXmJqTnpmZqaSlpKWdoqCanqCkoqOcoqGjoJ6cnp6ppaiVfXuDeG5mYWRiYWNjY2piZ2NbWlpdWVFPRT07OTo7Nzc5OTY0OTk6NTMxNDUyNzo7OkA9Pzw8OTc3Ozo5Ojw+QD8+RDxCQURAPz49QkRCQkI+OjlCP0FCPT44NVmfnJiTmZaRlZiYmpeQkZCQk5GTlJKSkpSUxce4tbq5wrm5vMPFwri7ubGxtry6tbnAu7u5tre0tLW/u72/ub66urTAuLW3sq66u7fAt7zKz8G7v8C8u8S9usDEv728uLu/xXlJoM3Ev7/Jv7DBv7q3u765tbe0uLy0vbi1tLCzvLG3tri/tr25vb65t7q+u7/Axb29y8PGw8TAw762ubq2v7i7v7y4trOyq7CwsrWzs66sq6emnqeurauiqKumpqqjp6iqo5+Ym52bmpicnJiXnJuhpZ2anqGhoKGmoJqbnJiboJ+dnJ+coKiho6SknaKfmqKgop+el6Shop+dmpieqKWhi3x5iH1xZGFiY2hqZ2dpZWleVlZUWU9TTEY4PzY7Ojc3OTs2NTo7PDYzMTM0MTc7OTg/PT47PDs3Njk5ODo7PUA/PkA9PT9CPjxAQUNDQT9DPTo2PEBBQDw9ODdJlJibj5OUkZWYlZGWkpWRkJGUlZSTk5OYlcHCwLq8ub62uL7EwMKxvbqytLO4vLW3vMC8vbS0sbC1t7W7wbi+ub+8vLe0t6+ut7W5v7vB1Y68vrvDtbrHt7a5u7y4ubW6xMqXTaXIwL+7wb65xr3Cv7zFuLa3tLi2tru7uba0t7q1tLi8vbm/ucPAwLu5vLu+vcjEvcfEw7rAvb62sra4srm0usLCureysaysq62yr7Kur6ijpJ6rrKyqpKakpKiqoqemraihoaGmn6Oiop6bnKKfoKOdnJuhn6KgpKCem5eZn6GdnZ6eoaWkoaKioZ6ho5yinqCZnZijn52eoJqZoKKmnYR6g4B4cW1lZWZwamVraFhZT0tLS1JKTEhEOT44PTs2Ojs5Njc8ODk4NjA0MzE3OTk7Pz0+Ojw6ODg5PDg6Ozs7PD1BPj09Q0E8P0NDREA/Pzw6Nz5CREE/QDg4P4mYmoyMkI+Tl5WMkpCakpGXmJaUlJKQmZTDvsbBwby8uLi6v7a8scK2tLyxtLa4s7q9v768sq2vrLGwt7y3u73BxLm3t7a1ubm6u7+80MV5rcu9x7e5uK22tLe5s7Wyu8XKn1Ckyb+/vr28v8jDxcW+xri1srK9uLi4vrq6uby6urS3u7q5v7zEwL+5uri/ubvFxr3Fw8Kyur27sa+2uLO3s7q+wLm2rLGrrqmqqa2qqq6mpKWnrq2ppaOio6GkpaWmoqato6Klo5+ho6Gcmpyhn6CloaCenZygnaWgnpeVmZ2fn52gn6KmpaCknpybn6Ofn5mcmZ2epJyWnKOcnqGcppZ+f4d8a25wZ3Brc2ZibmBcVEhLS0RKQ0NHPjo7OD48Nzs7OTc4Ozc8PDYyNzUxNjk8PD08QTs8Ojs6OT45Ojs9PUA+RD89PkRAPz9BRkQ/Pzw9OTc/QUNCQEI5Ojl3nJiLh4uQkpOWjY+TmpOQnZiSkY2PjpiSvbfHvsO+vbu+vL22uri9ure9s7OwuLi1uby7wLeqraSusLi7sr2+u8S2tbi1t7++xLzCxNiudoS+yM/CwLiutbW7vbe5sb7Dx5hRos7Dwr++vbzHzMfHxMe9tbW2wb27u7/CusDCv7y2t729vcHBwL+8ube8wru3v8W7wr++tbe8vK+vt7awtLO6ubq7r6mtq62rrKaqoqeuqKWqra2vp6Sgn6ajnqKjqKOjq6Oiop6dm5ublJaZnJyfpZ6fnpmYnpejoJyXmZqZmqOjop6jo6egpqCbnaCjnp2WoJmcoKCblJegn6WcmKKQgYaAcWZsaW50bndjZ2JcY1FLVUhFRUNHQjw7OTg9Ojc6PTo4OTs3PD01MzY1MDY4OTo8O0A9PDo+PDk+OTk9Pjs/PkM8Pz5APz4/P0ZEQEE/Pjo3P0BDQz9APTo4ZqGYj4uNlZKVlY6PlpmVl5uVjoyMjY+bk7m2wbS/vLm8w8C+wLq1trKywLmvsry8sLe7tru8qqqjsLm9vLK8vrzFuLG4ubzGycrCx8nRmXN3sdHRzMrEtbq/xMi+vrS/wMONVZbPxsK+wby/w8zKx8XGwLm9vMS/v7/CyL3Hx8XFvLrEv7vBv7rAvLu7wMS9t7nCub69t7S2uLqur7WxsLCytre0t6yurKqsrKuoq6Gms6qlra+trKippaOkp5+io6Onoaeiop6cnZyamYyQlpeZnaKZnpuVkp2UoaCdmZ6fmJimpqKfoqKmoqeloqCko6GbnaCbnKKfl5WVnp6kmpafiYGDgXRvbGx0bGxuX2NeYWJOSE4/RUA/REM7Ozo6Ozo4Ozw6OTw+Ojo+NDQ1NTE5OTo5PDtAPD89PTw4PDs6PDs7Pz5DPkI+QD89Pz9FRUJBQj87Nj9CRUQ9QUE6OlmfmJOSlZqVmpOQlpeclZuZlpSVkZKTnZm2uLaxuru6vsG5uca7trWypb69tLbBv66zvbS4wbGwsbS7xdDCur68xL63vMC/yc/HyMrKwod1d6jMzMvNysbCw8vOwby4vbq7gV2LzMbEwMC/xMDKycPDw8O5w769ub+8wsbCyc7Hxr66xr26v7m3wLm5vsDCvrW0vLi2u7CvsrK1r7Cvrqyus7CzsrirsbKxqrCrq6yrrLatqKyusqarrKmpoaWgpaakrKSmoaChnqGgnaCMlJeTm5+mmZ6emZOYnZ+gnp2eopuYp62ooqSgoKKqpqmhqKGlm6CgnZ2jn5SYmKKdp6Gfm4J7eod6bW14fGBxY1teX19UST5DRUlCQz5DOz42OTo7Ozs7Ozs7PT05PTU2NjIxODo5Ozs6QTs/PDw+Nzs8Ozw9PTw9Pz5BQUE/P0FCQUVDQkRAPDY+Q0RFPkJEPztTmZuZmJ6dmqCalpyZn5KdlZ2boJWWlJqYur20sLu8wcTCv8XGura5sqO7vbS3xLuwtbq2ucS4tLy3u7qt28K+tr7Avr66ppyqs7fEwKZ7eXyfxMbLyMHDwMDJysG/u7qyrnpsesfGxcS/wMG/y8fCwMjAusK7urO6usG+wMrOysS9tby8ub+5ubW1s7/Avre0s7S4rbeqr7CwsrGvq6+nr7ausrG5rra2uLSzsLGttrS6sa6srranrLKsraSjoaenqLKrqqWkp6elpaCml5ujn6SmraKeo6KanaWiop+foaWenrC0sKSlnp+kqaevp6mgq6CiopqipJ2anqGmp6+psZWCe32Cem5zeHRocF1cX1xaUUVFRE1JQUQ9SDs7NTk7Ojw8Ojs7Oz0/Oj01NDUxMjc4ODs8O0I8Pz46OzY6PTo7Pj0/QD87QUFBPj4/QkBBQkJFPjo1OkFCST9AQkA7TJqdnZ6fnZienZmampySoJWbnp+blZGRl8W+urbDvMbCvr/Ixbe1uLe2ubu0r7e3srWzt7m8u7a7u8W2ba/Ovba5wLyqfW5obm10gpeZdXp/nL6/xsC5wLy+xcS9vbixsaCGe3G8yMPDvL2/v8PDvr/HvLy/tLSutbW8vr/OzcvCt7K4t7e9ubuxtrLIwLu2tLGwt6yzqbCtrbS3r6uuqrG1r7Gvt7O6usC/tre2sru6wLWyrbO3rLC6r7KloqWrrK+5s7KosK+xr6qiqKGkraitrLOun6inpqWmq6Sknqaqo6ayuLOrpZyfp6anrquqpbClpaWbpKOYn6exrLW4sLKOhHl/fHdsdXtwbmlcX19ZU1BBRklHS0BFQ0g8PTY7OTk8Ozo6Ozo9Pzw9NTU2MTM2OTg8QT5AOz1AOzs5PD04Oj08QD46Oj49Pj09PkBCQkJBRD03NDU9REc9Q0I/PEWUnqCgoJyXmpiYlZmdmZ2fmp2bnJaRj5LDwMK9wrzEvLy7xbu3s7e2tru7s6CWtayvsbS0tLa4ucDNsXWCtL21tcGkhmlaXmBOU1tccHZ6haS4t8K6s7u3u72/uru7ra6in4qDr8XDw768v7u7uLbBwrW/urWur62wvcC5z8rJw7GwtbS0vbq+urq7ysO7uravsL2xuK+ys7C3vbaur66wt7CsrLK2vbzEwrq9t7bAv8G3tbC2srGzurGxr6err6u2v7e1qbqztbmxp6uop7ausrG1uaisrK+qr7CqqKessayytr20saykqKuoqKusq6i2qaaonqadmKOuvLG7wbSmiYF7gnpzdnZ3bnFhX2ZdW1VKPT8/R0Y9R0NDOTo1Ozk5Pjw8Ojo8Pj4+Pjg4MzE1Nzg5Pj9BPzs6Pz08Oz09OTs8OTs6Nzs+PT1DQT8/QUJEQkE8ODU4PUNGPUREPzw/iZ2en52Xl5WUk5aZnpubmpuYlJ2Uio6Owb7Dwr6+vrm2usCxtbGzt7fCtbOrrbOoqa61r620trnCyaaEd4uisLWcamZnVllfSUlNUFRve4upsLe+ubK1sry5vLa5vrKtsKmXlJXHx8PAvb+5s66yvLquu7Szpquorbq+uMvCv76sq7Cvs7q3ub67wMXBu7y3sLXEtb+0uLu0u8PCs7a2sbisqaWrsr23v7+7u7exvL28trGvq6uprbOvsLCrsLSpuMC2sqm0tbC3tq2spqu7s660uMKwsbG1sbK1saywsri4ubi+tLGzrqyxramvrqqyuK6trainoZ6ptr+4ur+wlol9gHxxdHd0d3JsX2NhXF5PSUI/PUlERk1EQDc3NTs6OT48PDk4PT47PT86ODMyNTc2OD8/Qj86OD4+PTw5PDk7Ozo8Ozs6PEA+QkI9QEE/QkI/PDs3OjxBRD5CQz8+QYqgm6GdlJiVlZKYmpyWm5WalY2bj4SIhru0vb+7vLm3s7y8rLOytLS2wLXAr7Kzqqqxt62pubO3v8aoh3t2jKGYX1NDWVVIYmpVT0VKZZGlr6+2urW0sqy8ubi1uMG9obGwpKN6v8jCv7m6ta6lrLOxprCtqJ2gn6WttrXCt7a0paiqqLC2s7K6tbu7u7W4trC1xLK+vL+8ubrFybq9vraxp6SeoamxrrW5trKxq7S2trGopp6gmaWmpKynq6y2qa+6sa2kpq2lq7GrrKmtuLawsrjBtrGxtbGvu7ayt7W1sry1urKwsbKutLKqrq2nuLWyta2uqqiosrq9wLa0qY6Ce393cHxvdnJuY11mWV1dU09OQT5KQkBLSkA2NjU7Nzg+Ojs4Nz4+PDs/OjkzMjc1NzU8PD48PDg+Pjw8OTk5Ozs7Pjs7OTw+P0E9PEJAPz9CQD47Njc6QERBQ0E/QUKJoJ2loJSWmJiVnqCcl5uYmZGMmYmDhoS1r7S7u7S1sLG2uq6wtLOvtbq1urC1s7KttrqvrbyzuLi/s5CBeYiPbk5LQGVZQk94gZNoTUNehbG1s7WytK+su7q4trm/xYy1v66tbqy+uLWysa2tn6Smp52kpZyWmZmZn6muuayrq5+lqKSrrq+nsKuvsbGtsa6usLmwtLy+uLm4x8W8vLu4qaKcmJufp6assq6zqaapqq6popqXl5GcmpijnqKir6ekrKaompqemqGnp6anqa+2squ0trCqsK+xqbm2sbWxrqy3s7avrquuq7S1ra+rq7GtsbKoraurs7W3ur2wq6GLeoJ5cnZzbXVpbF1balRdW1BOSERHTUJGTkY4NjY1OjU6Pjg7OTc8PTo7PTo5MjM2Nzc3Pjs9Pjo6Pz48PDw6Ojs5Oz47PTk8Pj1CPDtAP0A/QT8+OjU1OkBFQkRBQEJBiJ+ipqGYm56dmqWpmJudmpmUjJmHhoeGrq2uuLmxsqiur7iyq7CwqrK1ubm+tbK4tLm6trm7tbWzt7aVjIiEe1hGQU+HWElKWXiOg2NBVaO5s7SysLGtsLm4tru3ur6esLWur36ssKmrraujqKGdnZ6Xl6CVkpaXj5ifqK6ko6Sgoqaio6mpoaanpaqtp6ynqKesq6yyu7SztLm6trK2ramgmpaWm52fq6yqr6Oko6GpoJuTjo+QlJKSmZaanaSloJ+ep5iVkpSZnqSjoaWqrK2iqaqppKmtrqW0sa6xraqprq+wraWmqqSos66trKmmpqmrpqqnq7Ksr7Oxq6mWgX+Bd3J4aHV0bmVVYWNXXVFPTUhASVJETUM9ODg3NTo3PD46Ozw4OTw7Ozw7ODI0ODk3ODs7PDs4PD0+Oz08Ojk8Ojs9PTw6OkA9PDw7QD5CQEE/Pjk1ODs8RkFDRD9BQYijpqKjnqCfp6Coqpufm5yZmI6Xi42PjKqpqLGvsK2lp6ayr6mmq6CvsLu1vby4wMG+vLy8ua6sr7K8qZiZlGhNP1N5cU9JSUxonX9aRVWwurGss6+urK22trK0ta6ppZ2Zmpyep6ieoKipn6GnlpuXl46dlI+Qlo2Xm6SooKCioqKlpZ2jo6CepaCkrKWmqKSio6OrrLOuqa6urqeqraisoZyamJmYm6qoq6ufpqKbo5yVkIyPkJCTkJeVlpifnp6bmaaXk4+Slp2ioKWipqSnoKKko6Ghq6uksq2qrKyno6yuraufoaKkpK+srKmmo6KqpKqqpKmrpqmsq6ahiHiDfHZ/emN3bG5dUWlUUE5HUE1MQ1BRQD47PjQ5OjU7OT07Ojk9OTk8Ozw8OzkzNjk5Njo7Pz06ODs6Pjw6PDs5Oz07PDw9PjxAPT88ODtAQEE/Pz45NDk8N0FDQkQ9QEOOqqSjoqGinaulpqimoZ6dmZ2PmJWTkJWnpKGmqKmlpKChp6uhnKKbp6u1sry9wMLCwL7AuLSnpKyovcGqpbxmRFOcflBYSUthSVeNYmVlg6+1qrK0rqqrr7Cys62lnZGXk4+YoJ+ioJyjpJ+eqJSblpeMl5GNkJeTmJ2iqp+fn6Cjpaicn6ChnKKfo6ionKehoKSfrKisrKCpq6agpKimrKOenp6al5qrpqqxo6WonqCclZOQj5GRmZCWlZiXn5icmZujmZeUlZqdoJ2nqKWgo6Kho56doKmqpa6upqipoaKqrqqnoaCio6msq6eppqShqaKlqaalpKKmpKijkn58f3V2fW5re2RoVlJkTUpIR09TTktOSDxFQDwyPzg1OTs+Ozk5Ozg6PDs7Ozk5NDg7ODc7Oz48Ojk8Oj07Ozw9OTw8PD49PUE+QEJAPTc6P0FCQEA/ODU1PDpAQ0BEPkFGlq6koqWeo6KpqKipqqWmnp2imJiZmZWbop6bnqOioKOgoZqgmJeXlqGorK62t7q5ure3u66ooKGpoKvGv8qeTkF2mW5PbUpMZGZ2dGFdYnSSsq+us7WqpqyropuZlI2RlZaYmJyfoqKcnaSemqSXl5eWkJKRkZOal5ugpKqeoaGepqeqop+gp5+dn6SnqZ6jpp+qnaqtqq6nqLClo6Smp6ymoqWimpmer6iusqulqqqgm5iYmJWTlpqTlZWalpuXl5ihnpyclpuhmp6ao6eln6GioqOdm6Gmp6aoraOppZ6kp6mkpaWhpaSsrKmmq6eioKSjpKenoaCgpaKmoIl7gH13eXxleXlgYlNVYEhJSktTVElTUU05P0I2Nz02NTs6PDw5Ozs4Ojw9Ojs4NjU3OjY5Pj0+PDk5PTk9PTw+PTs7PDo+PTw/Pz9APT03Oj5AQEA/Pzg2NT08PkFCRkBAR6CupKaroaOqrK6tp6ypqKCipp6bm56aoJyalZmfn5uen56WlJOXk5KcnqSorq2sq6uvqq+pnpeepZykx8aLVlNKZqNZZn1vcltSa2NcZ2JgbZG0sLC4rKahnJ2alJeamZCOkZWRjI6Nk5minJejmZqXmJmUmZiWnZufpaapoKajnqeurqumorGjmqSmpqqioaqiqaSosquxsqu5qKarp6urqaysp6Cgo7GusrG0qrKuo5mcnZ6hmJubmpiZm5SWm5aZnKWhoJqjoZqcmZ+kop6gn6KmnZulpqWkpaijp6OepqOinqaloqWlqKykpq2noJ2eoJ6gpaGenqWgppmBe4F8dnZzaIJsZVtTW1lNUUpPT1ZNU01CNz5DNzg9NzY6PDw9Ojw5ODo7PDo7OTc2Oj01OTw7QD03ODs3PTs9PT06Ozw4Pj09QD5BPj4+ODg8P0BAPT43NTg9Pj1BQEZAQUihqqCrq6GkqquwramtqaelpaWkoKGfnqWXl5SYmZ6YnJ2blo+VmZKRnJihnaqip6Cep6Gln5ySm6Kan6qjjHlVaXF3dW9jd3ZYV2JgZGlbWldora6sr6efnqKglpCTm6CbmZeSk5+coaObnpuWn5qfl5uinqWhnqSfpKitraisqaSstLe2sKe0rKKtraOvpaSmoamorrWzsr22vrCssa6tqaq0sbCoq6iztrizuK2ytKSgnaWgrKGhoqGgmpiWlZ+bm5iloaCeo6GgnpucpaCfnZyhqJ+fp6meoaOkoKagnqehn5ymo5+ipaOooKmrpZ+dnZudmqainpyjnqeQgYKAfHh2and1Xm1bUmBIUlVIRlVXSkNNRz1LSDhGPDc3Oz49PDo8OTg6Ojs6PDk2Njo8Nzs+PT8+OTc9OT47PEA8OkA6OkA/O0A+QUA9PDk3Oj5APzo+NzU4PT0/QUBEQEJGnKueqamipamprqimqqWmp6aoqqGlpKOmkpOVmJacmpqcmpWTmZuNk5+ZqJ2un6eenKGdnpqZkpiem6GhoKN/b4JwYGNXS1tSWkxMUVlSSE9OSJmsqqmkn5+ZkpKUmJiWlpWMiIuOlZ2cnZ2el56Zpp+gqKWxqqeuo6uutrC0srGutri9v7qttbSwt7CutKmmpKWsqbmztbvDvMPBtrq2q66xubi8r7OwtcK8t76zs7WirKKpqLKpq6inqJqZnpqqp6CZp6Cfn6iopaSenaqiop6bn6igpKetmZ+jnp6nnqCmnpycoqGbo6KhnZympaWkn6KZnJukn6CboJyjiYWEfnZybWl3bWhtXFhbQ1dOSkdNR0NGTTw+TD40PDk2Oj0/PDs6Ojg4PDk6Ozs8NTQ6PDg5Pj4/Pjg4Pzk8Oz0/Oz1BPTo/PjxAPj8+Pz08Njs/QT07Pzg1ODw8QERCREFCQ5WqoKapo6mqqKmjoamgpqinrK6lqaWpqpSSl5mUmpqanJiYmZyamJmqoLGit6Swpp+enZ2XmJWZnpqco56ciWJXXmVgV01RRz0/QENEPz5CUnipramqpZ+en6KjnZ6dmpyblJOVlJ6dmJSFnZqgmqukq7KwubKysbKxur28vLm2uMO+v8K/trq7wMS5vbusr6exrbHCtrjCxsDIysDKv7C5ub25wr64s7vGxL3DvLezqrOtqrO0r7Ouqq+jnayotrGto7CmoKOwsa6wpKWvo6GgmqGnoaSqqpmdoJmao6CmqKGcnqKemaSenpiYo6OhpZ6mmZuipJ6fm5ubnIeGgXt0cmtrdXJxaFZcUUZVSERKUEk/RUE0Rkg5NTw+Nzs8Pjw8Ojo4OTw4OTs4Ojo4Ozw3Oz49Pj02OEA5Ozs9QDw9QDk3PD07Pj0+PUI+Pjc6QUA+PD45NTg9Oz1DQEFDQkGRqqGlqqelqqimn6KnnKasp7Gyq62jqayVkpWalJecoqGbnqCinJ+psqu7sr+rr6ylnqCgnJyYmp+gmqCflXxfXmVgUEZFO0I+Rjw+OTZOfqqyp6OjoqCepaulnpeclJGZnZmVjIqGiIZ4bYigpKKrrLS8tsO+vrO7wcPCxcC/wsbGxcPIwsDFx83QyMvDsre1vrK+xbu+zM3FzMzM08e+v8DCvsfGwrfDysnDwca+urW6u7W7t7C2sqq6sq67uL+7uqu4rauquLu1vK6uuaOmo56mpaKjqaaZm5+Zmp2nqqegoaGkmJSjlpSZkZydn6Sep5+en6KdmJmUmJSIhH16cWtjaW94a2VZW0ZLTEVEVExEQ0U3Oj86NTQ5OTc5Pj87PDs7OD48Njo9OTw9OTw9Ojs9Pj4+NztBOj45PT45PT44Nzs6Ojs/Pz1CPj83OkFAPTw9ODY2PDo8QT9BQUE+kqugp66ooqulpKKipaGlqquwsq2upKmmlJWWmpaUm6SmnaGqp6KrrLy8v8PBsrK4p6Ghq6qhnJ6hoZ2bmn1yaWFXTkU+SVl8b2FBPVyOrqygmZubnp6Zl5eXkoyOlpeTjo2QjIKDgndycW1wj6atrrS5xbvNx8u/wszNzczHydHMzMzHycXFzNDS1c7Tyb3Av8O7xsXIxdHTzdTQ09PMysLFxsbKyM/AydHMx8bIxcK8w8G+v7+2vrOtv8DDw8fFx8Svv7myuLzEwsK6vLy1rqenraigoqmlmpagmpmdqKupo6SknpePm4uQmYmVmJugn6OdnZeempOTi5WPhYB5dHNlYmdyb2ZeWlpDTkxERlBJRENANTU1ODlCPTY4OkE+Ozs+PDk+PTc6PTk6PDg8PDw7Pz8+PD0+Qzw7OkA9Ojs6Ojg4ODk7QT48QD8+OTtBQTs7Pjc4Njo8PkI+Q0FAPpOvn6ivpqiro6KloKampKuoq62qrqKqo5Kcl5ebmJuirJ2frqalsarFxszOzb+wwaikqKytqqCdo56cnpVpZlxUSURAP0qFnqSYg6CyraOenJ+amJeUkpSWkZCPjIeDg4iHg4CBgYB5cXJvbHmktrq5vsvB09LTyM3O0dPR0tHQ0dHNzs7Qxc7U1djR183Gx8nMw8XKz8rT19LX0tXW09TIzMfMzcrTzc7TzcXJysrBx8zHycnGv8Ozs8jFy8vLz8fKv76/vcHGxc3MycnAw8Cur7OonqKqo5qTnpyYnqaprKSlppaXipWFkZSHkpKSmZualpiQm5WQjIaQi4B6cnV2Z2NndmpkVldRRE5GQEpRQj5CPDoyMkE8RTw3OTxCPTs9Pzs7Pj05Oj48Oz44Ojk5Oj86Pj1APkA8Pjs+Ozk9PTw5Njo6Pj08PEA/Pjk6QEE6OT44Ojo6Oz4+PEE/QT6QrKKiqaanqKSfop2qqKOso6OnpqyiqZ+To5iWn56dpK6bn7CrqKyxyc3U18/Gu8esrbO3rK6jnqOinaGbYVNMSkRDP0NTsNK9sq+mnJycoKShnZqUk5WUiX14cGtlYmhyb3F7hYqAdXBucXRwhbPDvsXR0NfW1tLWztTW19TT0dPU1NPP0cPQ09bY1dbSy8nO0cvGzdHK0tXW2dbX09fYztLKz9HMz9DM09DAyMfKxMzMzM7PxcfItr/KwNLNzM/Gysi/xMPIzs3Q0c/NysjNuLe7qJ+lq6efmJ6jnp2qpa2pqKiSlYiQhIyRho2MiJOVmZCWjJiSj4aHjIR8eHN2cGNgZXJiXVJcSUpHQUVJSj47QTg9NTU4Njs4Njo8QD07Pjw7OUA7OTo8Ozs8Nz09Ozo+Oz08Pjw/Ojo8Ozs5Oz89OTU7PD48PD0/Pz46O0BCOzk/OTg7PT0+PzxBQEQ8hqugnKegp6Oim6CbqaSlqaCfoaGmn6ifmKSimqmmoqarmqOwsamotdDU19rSx8bLtLXBxbG1qKGkpaCioVlJQEFEQUZRdrKvp5qUl5+cmqCgnpucmZWJd2ljYV9fYF9eX19dYWx1c3Bwb2xycXWSxMjH1NbX19fT1tDV1NrU1M7P1dTU0dHM0M7U19bT1dDP0tPRydPRyNDY19jR19HX2dTVzM/Pys3Sy87RwMbDyMbPztHR0sjMzcDLzMbTz8zOyMTLx8fJzMrU1NHVz9LM08K5xbGlqLWup5uoq6Wdsqiws62sk4+TjoiLjoOPi4SQjpmNk4+Zj4+ChYx8enFzdG1hY2ltX1ZQX0pKQ0ZDUk1APD40Mzo9NTI4NTU8PEA8Ozw6OTpAOjg7Oj46PTg+Ojo8QD08OTs9Pzk6Pz07PTw9PTo2PD0/QD08PT0+OjxAQjs5PDc0Oj48P0A9RkFEPYKknKClnaWlo5mcnaSeo6OfnZ+doJqnnpyhqZ+vraqqq52lrreoq7fX1NXZ2dHO0L+8zMm2vq6mqqiho6tlQzg9PkRYgqqon5eVl5manJ+dmJyckn1wZWNiX19hX15hYF9gYF9gZW1wcG5rb3J2d5zMwdPV09jY1tnR0tLXz9POy9LN1dTRys/M09bS0dbNz9XV0cXR1MvQ1NXWztLQ2NjX2MvIzsTJz8zKzMDKwMjKzs7Qy9DOzszPz8jM0NDLzsrDysfJzcvM0tPN09LR0NDKvci5sK67ubWrtrCtqLits767sZqPoJSRjo2IjpCFkY2ZjJGRlY6RgIWIenZvcG9rYWVucGFXXFpJRkZETVhFO0A9MzM8PDg3ODU1Oz5APTk8PDg8Pjk8QDtAOj04Pjk4Oj88PTg7PkI6Oj08OkE9PTw6Nj08P0A9PDs9Pjg7QEE9Ojw4ODs+PD4+OkVCRT6Bn5mlp6Cfo6eam5+cl56eoZqdmpyappufpKefuLa1taykrK6+tLDA2NLX2tzWzs3Kw9LPwcGxqaytqaSxeUhGQjtXjqGblZOWm56enpyTlpeUiGteXl5hZGJgYGFhYGBhXl9fXlxibXJvb3N0dnZ5pL/M1dHW1NPY1s7O08vOzsXOytLSz8fOzc7UzM7SzcvX1tDM0dTLzNDS08rO0dXS1dXKwMrCxc3CyMrDzMTGycrLz8vOzdDO08zGyc/NyMfLxcfBxsrMzc/Rx9DPzc7M0MXHwbi5vcPDvcO4srK+sbvDw7WqmKWhmJaSlZWSi5SNmpGUlI+PlYKJhnlxcmttZ2BgcWhZWGhWTUdMSVBRQjtDPjs2ODo4Ojo1Nz09QTs6PD05PD05PT06Pjo8ODs9OTtAPD47Pj5BPDk9Pj1CPTs3NzU/PDw/PDw7PDw4O0FAPDo8OTs7Ozw9QTpFQUU+hJ6bqK2epKSqnJ6fmJKXm5+am56ZmaKVoamppcTCwb+7tbKxx8O4ytXW2drb2MzMz8jW1cTCta+0qJ+tl3hscHF5kJuNjJeVkJORkZWWlZCLfGVhYmJgXV5hY2FgYF9gYWFgX11bXWdycnByc3Ftcnmlx9PPy9DQ09TKxcnJxsa/w8XPzsfFx83K0sjLzs3G0dLQzszUysfLzs/Hx8/Sy9DPxrrEv8bKvcLHyc7Fw8fAx83IxMzLzM/IxMTQyMbCxsjEv8HHzMvLzsLLzMnHy9DExce7x8PIycLPwb28v7DByca5vaqwsqelnaKcmJCbkKOZl5mRlZiJj4J4b3Rka2BeZnFhW1dgR0hIR0lNVEc/Sj02NDM1NT09NDg9PT06Oz08OTo7OT89OTw7PDg6PDo6QD1APD09Pjw6Qz48Pz04ODk6QD4/Pjw7Ozs7ODo+Pzw7Ojc5PD49Oz49RkFDPYOgm6qupa6qq5qdoJeUjpedmpmgmpqcm6WysazJzcrIxL68uczMxtDV1dja29jQyc/P0dPIwre7u62jtn1og4Wkq5SOjZaPhYODg4F9hIR+c19bXl5eYF5gY2RjX11dXl9gYF9bWlxgbHJxb29rbG9vfbnRyMnKz8vNxLrAw7u7urq+ycbCw8DDyMrJyMrIwcXMxsjKzcnEwsvJwcHL0MXLyL+5wrvGx77Axs/LxMDDu8nHybvJx8XKwL7Cy8bFxL7GvbzBw8XMxcW8wMnDxcfSxcHJv8rJxsjG0cPDxsOvxMvHw8q3v7y6tKmspKWYn5iso6Gmm6Ogm5V8d3N0ZmlaYW5tWltYUkRMRkJHRUxERlNANTQzMzU/PDM6PDw7OTw8PDg7PTtBPTo8Ojs3Oz05Oz07PTs6OD4+PEI+Oz88OTk7Pz07QD48Ozk5OTk6Oz06PDo2OTw+PDs+O0NCRD5/pZypsqm0rrCdnp6YnImUm5man6Kfmp2ov7i8ys/RzMfCw8bNzs7M1c/V2djZz8vSzc3OyMG1w76xr7VsXnp8oZGLkpaGeoCFhX91eHVycF9bW11gYGJjZGRlZGBcXF1dX15gW1laXGJvcm9raWtwb3OPx73KxcvAxsKwtrqysrOyscK8vLy6uMHBwcS+vbm9v7nEysXGwr3GwLi7w8m/wcm7t7u6xsO/vMHOw8a+vrXBvcO7vca7w7q0vMbEwsK3v7a2vr+7zMO8tbrIur++y8PBxsLFycfJxtDGwszIssfJw87MwMXDv72yt7Cyp6ioubClrbCqrayUenZ3amRnYGhvY1ZeWUpGSkZIS0FFQkZKQDk6NjU4ODU0Ozo7PDk8PDs5Ozk6QD46Ojw6Nzo7Nzo7Oz88OjxAPUA/PT8/Oz07O0A8Pj4+Ojk5ODk3ODo8PDw7OTo8Pjs7PjpAQEU+fqygrLWqt7SyoZ6fl5qNlJaan52mop2et8XCxMjO0srKycbNzc7RyNDF1dTW183KzsXJxcfBucW9q66lX2R1g5OLiIuEeH+Ghn9+hHt0dGNcXF1eYGBiY2JiZGViXVxbXF5cXl1aW1xeaHNxbWdnbm9yeZ29zMDDusG4rbCxp6qtrKe4tLa0s7O0u7a9sbewta+yu8K8wcS8v7u1srq+wLjIubS7t8HCvbi9x8HEvLWvsra6v7TFt7u1q7i9vsC9sbq2sLe6s8a8t6+7v7W3tcW8vsPFwMTFxsfLxcDGxrvHy8DPycfDxsHDt8O9vba5vse/rLW7tbe2jnl0eGdnZWJrbl1WXmBGS0hISkZCREFFRT88OjU2NjYzMzs6Oz06Ozs6Oz44PEE9PDo7ODc5OTk7PDo+Ozk+Pz1APz5CQD1AOjo+Oz89PTk6Ojo4NTY7PT48PDo7OT49OT86PEBAPIi3pauzsby8sa2foJmUlJiXnqujr6qnpMbLzcjFyM3M0MzNyMnIysjKxM/N0s/NxcfBxsC/urfJtqqwmFtob4qPhYiJenh+hoZ2d4F8c2hdXV1dX2BfYGRhXmNlY19fXFteXF1eWltbXV9scG5pZmptbnJ8pMfAuLi1sKusp56iqaeeqqyzraqsqrSttrGzqa6nrLO7urbDubq6sau1ubu0wrqwwLG+vLu2vMi5w7atqqiwssC2uL2wsaexs7S7vKuutaautq67srGqubCuu667uLvAwL66w7/Gw8XAvMbBx8u4xcfFv8fDw7rExsK7xsnMy7O5wr27s4lzd3ZraWBibGhYV1dbQUxLTUpFQUM/RkE6OTo5OTY4NTQ6Ojk7PD07Ojs+ODtAPD05Ojc5Pjk7PDo4Ozs6Pj45QT0/QD87Pjo7PDo9PDw4OTg5NzY4PDw9Ozw6Ojs+PTs/Ozs+QDyKwKuouLe5w62zqZ2ZlJaZoZymsLWxt6bFztLLw8XBxNDHzcHDxr/ExMPDysLJyr/AvMK6s7W1w66qsJFban+Sh46Pe3h9iYV6e4SBd25eXVxcXV9gX19kY2JjZGJgX11aW1paXVpaWVpcZW5vaGZoaWtucoGturC1rqWlp6eaoKSgmpylq62kqKKrqqyrsKOmn6qttLaxvbmvt7Corri0s7y4tL2vuLm1srzBssCupaijq7Gys6i9qquoq6yttbOlqK6hpK+psqaoqK6lqLessbK3urq7sry+vr7Ev7XBwcfIt77AxLfEw7+7v8TCvsTIzMq/v8PAwKmHc3RzamlcYW9jV1ZYUEhZUlNLRkZFPj9AOjc4OTc3NjQzNzo5OTo8Ozs8PDc7PTs7Ozw4OT44PTs8Njo9Oz89N0E+P0A/Ojw8Oj05Ojs6Nzc3ODg3OTw7PDs5Ozo8OTc5Pjw+P0E7jMKvrry3ucSwtrCbmZWcmKqpsLGztb2vxdDPzMPHubnLwcu+u8m2vcO+usq3wcPBtLa8trGvtbutqKuSZG2Ig4eLgHp9f354dH58c3dlX11cXF5fYF5fY2NhYmBgX15dXFpYWVtbWVhaXF9ma2ZkZ2Voam9yhaqlrKWenKGklJ2kmpeRoaOpo6Ofpaanpq2gnZykpqyysLa3p7GtqKq0q7S6sba2rra5srC6urG3paCkn6axqKuouaqkp6eop7KtoKemn5ukpqyfn6ejoKGxra2ssrSztLC1vLa7wcCyu77DwbG5ucKzwb7Atbi8vb68wsfFw8S/wMSgg3hwbGJmYGtvYFVZX0hOZ09UR0ZLRjw9QD06Ozs4MjU1MzY5OTk7OTo6PDo3PD88PDs8ODg8OTw6Ozc4Ojo8OTg+Oj89OTg8Ojs+OTc3NzY3ODg2NjY7Ojo7OTo7PDg1OTw6Pj5AO43ItLa9uLrAur22oJ6UnaGmurars7O7s8TPycvDxri3x8DMv7jJt7vFuLPEuLO/wKy1vLKspa+zraGjkWlyhoWGgHx4dXNvbWppaXBpX2BdXFxcXl9fYWNiYGBgYF1cW1xcWFlYWFhWWFteX2RjYmVnZ2drbW+InamflpWaoZabopiVjJ6hoqecoJ+kpaKnnpujm6CrsK2xtaSpqqqsrKS0uK23sKyztq+zta+wqp+en6OisqWmqbitoqamoKitq5mgn56ZnZ+lmpqjnJyer6mrqKqrra2wsrivuLm6sLa8u7qrs7K5s720trGxtrW/tr7AvsPCu7q9l4R6c2tfZV5kZFhUV11JV1xLT0dKSkdBPD8/QDs/PDA0NTM1Ojs5Ozg5OTw8Nz4/Oz07Ozg4PDg5ODw3ODo7Ozo7Pzo9Ozc4PDo9PDc0Nzc2NzU3NDY2Ozc5Ojs6ODo5ODo7OTo8PzuJyba4vru3wcHBtKSkmZqkpsCyr7astLfFz8jIwMa7u8PDz765x7i3vreywrSxu7usubqxop6pq6eYno9tfoWGf3hybW9ta2JeYWZmXV1eXV1dXF1fYWFiY2NiYV9cW1taWllYWFdXV1hYWFpeYmRkZWZmaGlrco2nnJOUlJqXmqGWlpCboqGonpydpaeipZygoZuZr66ur7KhpaOuq6eitbCysqypr7OnurOmtqCin5yjoa2joqq2q6Ojpp6lpqOWmZ2XmZudoJqXnZydnK2hq6ejo6atq7KzqrWwsquzubSvqq+ysrO3s66pra6yuLG6trq9wLizsZSFeXVmX2ZeW1lWU1pVS1tRTElFSEtJQj0/QUFAQToyNDUyNDk5ODk7OTo9PDY9Pzs8Pjs3Ozs3Nzc+Njo+Ozo4Oj07PD06Ozw6PTs4Nzk3NDY1NTQ2Nzg1Ojo4Ojk5PDg3Ojg5PkA6gci9uL2/tr68v7OdpaOYpbHCtba9rbS4wczIxr/FtsHAx863wMS9s7m5s7+2sbm7rbK0r5+apKqglJqPeH+DhH94b3F0cWhlY2hkY1xcW1tdXVxbXmBhXl9fYF5cW1pcWllYVldXVlhXWFdWV2FkZWNkZWRkaGp2oJuTk4+TlpaelpiTl6CdoZyWoKGppJ+fqZ2bm6unr7CrnKOkuKqhoK6otqqnp62xpLiwpLego5yZmaqnoZqsua+ioaScoqCgk5ShlJaWm5iYlpeclZ+pnqmkop2jqqqxrai0rKqnrbOwpaqus7GwsK+vp6insq6xtK+8tLq4rqOUgXp2ZV9hVllYU1JTS01eTFBMR0hMS0U9QD49Qjw7NzY1MzQ5ODg5OTo5Pjo4Pj47PTw8Nz49Njc2PTc7PTs5Nzk7Ozw+OTk6Ozo4Njc2NTQ1MzEwNDU2Nzk6ODo5Ojo3Ojs5OT1AOnbAvLS5wrG+t72unaenoqq7wL3Aua60uMHMx8XCw73FuMjMssHCwa68u7W7vLW5ubCvsKqcmaGplJGKi4CAfHdxaWxydHBoaGVkZmFcXFpZWlxcXF1eXVxbXF5cW1xZW1taWFZXV1ZXWFdXV1ZbYmNiYmNiYmNmaYGVkpSLkZOTmpiclZacn5yflqCfp6akpqefnaCmoKqvpp+io7eooaGiqLOipailsKWxrqy1nqGdlpWpoaKUrbGxn6Ojnp6Ym5OLoZSRk5iYk5eYmJeep5unoqKapKWlq6SlsKelo6urraaorq+vq6iqqrOlpquvtLGuvLaxr6+gknp3cmVhXFtdWE5MUUhSYU1WUE9KTU9FQkQ/OT02OTo3NjQ1OTk7OTg4Nzs4OT0+Oz47PDY5Ojc7Njs3Ozs6ODU6Ozo7OzY8Ozg4NDc3NjMzMjEuLzI1NTY7Ojg7Nzg3Njw7Ojs7QTh4u7uxtb2wu7G3rJ6lpqy3u7zBxbqxubXEycnAw8bFx7bFxLPBv8Wrt7e9tr26u7Wyq62omZifo4uJdImIfnZuY2FmaWhmZ2lmaWxgXVxbWlpaWlxdXFtcXl9cWlpbWVlaW1dVWFdUVFZVUlRSVWBgX2BhX2FhY2RpgJKSiI+Nk5GSnJSVlqSZoJedoKWiraalpaOko52qq6Wan6WxqqChnqWrnqiin66sqamuraKiopWXopuckKupsJyfop+fl5mTip6RjZKTlpCYmJOcoaOdpKGilaCipaWbo6uloqSrpKuupa6yqaalpqa0pqmorbO1tLm6sKqsnoxycG9gW1dWVVJGUE5IWlxQUklUS1NMRUdKRDg7Oz08ODY2Nzo5Ozo5NzY5Nzc6Ozo9PDw2Ozw4PjU5ODo4ODY1OTo7PDk3Pzw5Njc4NDUyMTIxLi4xNDI2Ojg2OTg1OTg5ODk7OUA5e7W0rLS7srCrsq2dqKevubmzwMi6tcCvxcjMusHKzMi1ybyxvcPIrLG4wbW8wLy0taqsppWZm5uIgXKIg3t0aWlqbGdqbG1ramxlXVxcW1tcWlhaXVtbXmBgXFhYWllYV1hXVFZWVVRVVVJSTlFZXVxdXV5fX19iZG2Nj4OQhY6QjZmTlJKcmqKcm6GpqauorKeppqSZpa+llZmlr6mgnJmboZ6vmZyrs6Clpp+jpKGUk5uWlpKpqq2anaChoZuUkIyZjoyRjJKNlpWQnaKgpJ2bo5WboKOhmKKoo6Ooq6Crr6Stt6ajpKKsraqoq6+zt7K9tbOrr5iFdHNoW1hZU1VSRVhMUVtYTVROUExRUklOSUI9Pz9BPz03NTc5OTw8OTc3Ojc5Ojs8PT47Nzs7Oj02Nzo7ODk3Njk4OTo2Oj05OTU3NzU3MTE0MS0rLzQzNDk4ODo6ODo6NzQ4PTg/OX6zraezt6+oqK+um6morLe2q7zKu7a/rMvGxbjBzs/Is8S6t7vCyLCtuL+3vL27s7WmqaCWl5iWh3p0gHZ3bm1obW1tcGdnaWZkXVpbW1tbXFtZWltcXF5fX1xYWFlYV1hXVlVUU1VWVVVTU05QUVlaWlpdXVxeX2FkfYuAin2Kj4mSjZaRl5mioJugq6qmr6yosaWpmp+toZWWpainnZiQj5qerpeZqKqZn52UpaGfkpGSkZOVqKulmpmZnp6WjYyLk4aJjYOPi5KVkaCeoaSYlZ+VmqGinpSbpaaoqKigsbCmsb2on6OstKqup7C1sLm1wLGusauRfnJzYlZUVk5SSkdWUFJSTExXTUpNT1JHTUtBQ0ZERD5BNzU4ODk7OTo3Ojo3PD06O0A+Ojk7OTo/NzU5Ojk4NzY5NTg3Nzk7ODU1NzY2NjEzMjAtKi4xMDI4Nzc7OTk7ODk0ODs4QDh/s6ymsbeqpaKxq52qp6mysKS2xrS5urPKxbm6wcvQyrG2t7y9wcOxr7G3rbS0u7O0oqOdnZeXlIOAdmtnbG5xbnJrcGtkZWdlXlpZWllaWlpaWlpaXFxdXFpYWFhZWVdYV1VVVFJTVVNWVVJOTk5SV1hZWVlZXFxdYWp/eX50h4yGkImXiZSUmJuYnqmboKumpqyeqJqgppyTj5+jmpeXhYSSm6SQlaOdlpaWiKKbm5OLjoqQmqWnnJWVl5uRkoeUjouBjI2AkIuSkpKgmqGilpSYmJWippmNmaSmqaahoLSyp7K4oZyitqypraSysqa1vLWrrLGjiXlzbl1OUVFMT0NNTk5QS0ZOTkpKTk5RSE1KQUhMSEhDPjg1ODg4OTo7Njk6Njg7OTk+PDg6Pjk7Pzg3ODk6ODg2ODU3Njg4OTc0NTc3ODIwMzAxKyktLzEyODc2Ojk5OTk4NDk4OEE3d7ampLawpaekqqWgqaaks6qissO1tbKzxsa2usPKzMazrLm9tLjAr62psJ6mrrqvrZ+Zmp2VlId7g25fX2ZycHZxaW5pZWdoal9YWFhYWFlZWVpaWVtbXFxZWFhXWVlYVVZSU1JQUVRRU1VRTU1LTFNXV1ZYWFhYW11hbnF1b4OHgYd/kIOOipSRk52hj5qco6KkmaWXopyVjYeZmoxzjYN+jpeWhpGakJSOjnuZj52Mgol/ipigo56Qk5iWhY6ClH5+dIqNepCHk5CQnZuampGWkJ2Oo6OOiZqgoaSkm6K0r6ywrJ+YpbimprGhsK6csLyqqa+qmYN3c2NWTVJPUE1DU05MUE1CUFFISU5STUhKSkRLTUZLSz03NDk4ODg7OzY5Ozc6PDk6Ojs3OT85PkA3OTo8ODk3NjQ0NDU4NzQzMTI1ODUvMDEwMikoLC0wMjc2NDc4OTo6NjU6ODdBN3i3oaO0qaalqKOmpaamprOnpbTBuLC0sMnEt7nBzsa9s6y6waytw62noqaSnaa2raOgj5WWkpB9d35mV1ZfZ2ZpZ2huY2lpZ2JcWFdYWFhZWVlZWVlaW1tbWVlZVldXV1NUUE5QTk9PUFNUUk1NSkhOU1NTVFVVVllbXWlqcWt+hHtzTlhyj4KXho2cl4uUkZ+YnZWUlpWPlomAlIlfO1ZvfIyUioCMkoyQhoZzioWXgXmBe4aTnZSDlY6RkIOGfZN4cXCGjH2JgZGNkJeamJOLkIqdiJ+Yh4iWnpqhoJenrqmtqKielq2zoqaumayrmKi0o6mto5N/c25fW05TUldMRFRKUE1MRk5PSUVMUU1LT0pJTVBGSUk9NzU5OTk5OTo3Ojs6Pj44Oj09Nzo/OD4/NTg5Ozc5Njc1MzMzNzYwLi0vMzQ0MTEwLy8oKSsrLTM4NTQ3Nzk8Ojc5Ozg2QTl5t6CjrqGmpqqgpqmno6mvqKe0wrmwtbDHwrezvc+/ua+utcKnqsWqop2Yg5ScsaKamIaUj4uHfXN1XVBMUVVZWlddXmJnY19ZV1dXWFhYWVpZWFlYWVpaWllYWFZXV1VTUk5MS0hHYlxNT1JNS0hGSE5RUU1PUlRWWFpgbG5neoFzUEI/f5WSkX2IlYyEio2bjpaViZKIhpWGeYl/YEpRbniLkoR9hI2KhX9/bn9/lHh1dniEjZpwUY2IioZ8fniUdmh3hoh+iomWi46RkpaMhIqIlYSbjYKEkpqWnp2UpKOoqaWknpuwqqGkpJGmqZaiqpyipqiJdm1mXltIUVFTTUlVTVNJTEtPSUhGSk5MTVRLUVBPRklDPTc2OTo4Ojs7ODo7OD4/OTk+PTg7PDY7OzQ3ODs2Nzc1MzQ0Njk2LzMvLjEyNTIyMS8sJykrKiw0ODMzOTg5Ojk5Ojo6Oj85d7aco6edn6Gvoaeopaeor6yqtby2uLazwbu2qLnIuLaoqLW2qrK9pp6VjX+Jk6iWlYp+joOCfXdwb1hNS01NTkxNUVdbXFpYWlVVVlZWV1lZWFhZWFhZWVlaWFhWVldVU1BNSkVAQJtrc3NJTUtERERJTk9oWU5RU1RVWm6DcnV9aWhcVJCJlIh0foaBfIWMk4KSmouPe4aPgHaAeHNvdnB0jo6Ben6Kq4R5e2h2e45wcm14gYuNknh6gHuAdnNyknhndYSEhIV8lYqIio2KgH+Ei42AlIR8gI+YlJyWkZ+dqZ6foJ2gqaWenZiNp6SSoKCWnp+kgXNoYV1cSldQUkdLWFJPSkxNUkpKSkxQSExRTFJUTUVIQT03Nzs5OT49Ojs8OThAPzo6Pj03PT03OTkzNzc4NTY3NTI1MTQ3Mi8yLiwvLzIwMC8tKygoKS4xMjcyMTk4Nzo4Nzc1Ojw7N3aumaOhmJ2ftKmvqqWtq7Cxqr20sry4trq0sZ+3urKqnZ2sqaiysKGakY2UgY6cjpF+doZ4fHZvb2lYS0hJSEdFSEhQVFRUV1dTVFVVVVZXV1dYWFhYWFhYWVlXV1VWVVNQS0Y+OTNOPH6eTUhKREA9QURqlH5MT1FRU1ZedIJ7eGZ2jJaYjY58Z3mBdniAiZB9hJiSgXGHj3x3e29rfq19dJCLf3uGkoF8f3VmdnyGbG9nc3yJjIeAbHlxfXFtdo9xaHGBfo5wQ4uFgoOFfnd3eoyGfYx7dX2Oko+Yi5Kam6OWmZyanZ6hnJaNi6Wajp2XjpaYkHhvbWZjWlhYVVFKU1VUT1BOUFZLTktPT0pST0hOUExGRDw8Nzk7Ojo/PTk8Ojk5Pz87ODs9Nzw5OTk5MjY2ODU2NjMzNjExMjI0LiwsLS4uLTAtKyonJyouMTM2Mi84NzY5NjY1Mjc5OTV5ppegnpahprCsrquoqbGvsau8uKy7vrizrKebsKesm4+WnKWppKCYmY+FknmIjouKdXF7bXVwam1qWEtGR0VBQENESExMTVFSUFFTVFRUVVZWV1dYV1hZWVlZWVlWVlRTUUtENzhmNzA/qGlOSEM9OzpEioV6WkpOT1FUWF1lcHJsiKeqwH50eWJ7eG97eYmQen2Lhm9tjJJ5dHlqaoCCcZaRi4F+loBJkphuaHh+gm1pZGx5hZCShmtzbHxucnyGaW5wf3ONiYSGe35/e3ZvdHSGgnmBeXB8joyKk4OWl5iakJKWl5mXnZaMg4mekouSjYaQloBvam9ub1hWWFRSUVlPUlRUUlhVTU5ITUpNT0tDSU5HRkA6OTk7OTk6Pjw5PDs6Oj0+Ojg6PDk/ODY4NzI3NTY1NTQxNDMyLzAyNCorKiotListKigqKCcsLTEyNTAsNTU2NzQ4NUhBODk1d5mRm5man6WssKOtqqi1r66stL+rvMO/paKalaSYno2Ei5ShoZmZkZOLc456gIaMhnRvdGtwbGRsallOREZDQDw+PkFGRkdLS0tNUFJSUlRUVFRWVldXWFlaWVlaV1ZUU1BMRTFAmjMganNDmW87PDk1PICChl9JTU9PUldaUVlcX6eHYZppc3llfm9tf3qLiXaCiIZ0bJqSdHN8amqdj015hZOJhI5nMXaGc2x+fYN0ZmV1f4SEhYBmaWx1a3F/fGhxcXxuk42PfHR+fXFwbnVtgn93eXVqeYmCiImDlpKSkIuNkZSUjpeNgHmIl4iGioaAkIh3a2tvaGVYUlpXWVlbTVBVVllYTklIRUpKSEdCQEdFQ0c9OTk4Ozk6OTw6OTs6OjpAPDk6PDk4Pjc4NzcxNTIzNDUzMzY0NTAzMS4qKispLCwrKykoKycpLCwyMjYsLDQ3NzU0NzhpTzg7NW6SiJqRmZajqK2esZ6nuq+rsrDCsbvDx5qWj5SZi46FeoSQmJSNkIyPhnGHgnSHjIZ5cHJwb29kcGZfVEZJQz88Ozk6P0BBRENFR0lMT1FRUVFSU1RVVlZYWlpZWFZVVFNQS0U4MC9cYLNHOVhQOzk0NDGWuotITE1PUFFWTEFJUUlir7KgcXt4bH1scYOChYF6hIaGeXKhlXR4gHN1lIc1cZ2onY6hoYSihXZwh3yHfHSMro2JgGhnYmpucm1wgnVpb1h1cI6bkndsf3p9bXJucIB7c3ZuYnaDf4aAhZCQioqJkYuRi4uOg3V4io6AfoOAfY57c3FxbWBbXV5bWVhgX1JOW1pYV0xISkZKRz9DQUJIP0NEPTs5Nz07Ojs7OTo5OTs6Pzw4OD06ODs2NjY1MTEyMTI1MzQ3NDUzMS4vLCwrKSopKSoqKikoKikrLzNETTIxNjY2NDM8dlI3PTdikoGSiJaRnaSnn6+VpbSprrGuwbK7wcWWkIyUj4CIfG6BkJKJg4qHj4Z1goRslYiIe3R4eGx3bndjaV5KUEc+PzY0NDk7Ozs9PkBCRUhMTExMTlBRUlRVVldYWlhWVVRTUExFPDUqnUtbQC1nSTk0Lz+Sg6muX0dMTU5QTDdDTVJTREqGdoB8fHZ+bHaIiHx+hYN/jH51opl5foaBhJmEmpxhhqqfnYuDkI16d4h+iYmOc4uXj4R6XWRxdHp8d4ptaGpieW+FkIJ6boF3dIR6cHR5eGtuaV12hnyHfIeHjn+KkpeDjYWMhn1xhH+EfXV3e3yJd3BzdGZnYFtbXlNbZ15XUFRYW1VHSkpES0c/RkBEQz5BQT07OTc8Ozs9PDo6OTk7Oz0+Nzk+OTk4NTY1MzI0NDAwNDY0NTU1NC0sKSsoJycnJigoKSkoKCsrKy8wMFVxPTIzMzMxRX5XND05XIx4ioCUjJGcnZ+mkaCqoLGor8CxusW6lo6RlId7hnZrf4yRgn2KhI+MeIOAc6CEinx8gX9wgH56Z3ZrUldMQEUyMTEzNjY2ODg6PD5BRUdGR0pLTU9RUVNUVVdWVlZUU1BNRkA6Mj0gI5ZjjFs1MzExaT9Hb0lGSUxNT1JMS1RdWVJKaISIe4l5fHF8j4x6fYmHfpeHdqGZiIePkpSljayqSIaur6+LgYCTi4KLgoSSqYeAmJiKm3RtfIGGh32OaGdoeX9uhYeChXGEhkdsgHdyeXZobWtfdn2CiH+HhIt5lJ2ciYuIkX96dYt2fHhtb3d+gHR0cmxbXl5bY2NYZ2VbVE9QVllQRExLRk5JQ0ZDQ0BAQ0E9OTc4Ojo6Ozs6ODg4Ojo/PjY7Pjc1ODU3NzMzNDQyMzY2NTY3Njg7REZMTU1MQzcrIiUnKykrKywvMDArbnUyMjQyMEyBXDU9PF6EdHx9iYWHkY6Wl5KXoJ6soaa4r7O9s5eNkouYi310cH6Jkn59jIKSlH2Gfoakh4h/goiFeIeIfnOEeF9jV0tCNjAuLzIzMTI0NjY4Oj0+P0JFR0hKTU5RU1RVVFRWVVNRT0dDPzgwLCOHWz4/ODQuXZZwc6NVRklLTU5QV2BYcFlcXmmNk4eVgISChZGTfoWIkYGalYKhoZiVm5umrZOau7Gnu8fDqIuMoaWPlIqBkXxxg56fkZx/doaFi5CHkGpob4OBdI2HhIpxhYJ3h397doV9bnZ1Zn+UjoaJiIeIh6CropWJjpd/eoKIenlvZ2t4fnt+dGxlXVpbXWpdYWZgWk9LTldSUUlQSkROR0NKREJBRERBPDo4Nz08Ojw6ODg3Nzg6PT04PD02ODY1NjYyMzQ0NDU3Njg2NzxCQj88ODo+Q1FeZVxHMicmLCwtLS4xKD+LWy4zMTBPg180PztudXBmd4N7gIx/gZCOipqbpJ2hrKarr7CXkZGEoZSEeHd/jJR8fpKFkpV/ioCSm46DgIGMioKJjYN/ioBtcGpdQkA0LS0vLy4uMDIyMzQ3Nzg7PT9CREhJTlFSU1JTU1RSUE9IREI8ODcvOUQ+PDw2My5sk5dNUEhJS0tLTlZfY39nZ211nZuPmpKTi42OmoiSj52LoKCSo6qlo6yTqbaiqMHCrseveLqUmnyNoZ6ZhJOFgo6in5OYkoSKhY+ZkZZscHWJjIKWjI2Od4+EcW2FgYqWkYOFiHGIoJWGkomOj5aktambjZSig4eTg31/a2pqfIGBgnRiXmRfW2drXWxrXldLR05SUU1MTEZJUENETUZBQ0VGQj05OTc9PDo7Ojk4Nzc2Nzs6Nj06Nzg1NDU2MzQ0NTY2NjY4NTU2MzEwLiosLCkoKS46UGFcQCwoLSsrMCwncog3MjQwT4RiM0A8dW5nWW+Cb3WGcXaShn6XlpqUnp6cp6CplpOYnmdlpJp+hJKReX+SiJGSfYqEmJKQgoCAi4yJhZCHhYmFeHh+Z01SPi8uLiwvLi0vMDAwMjEyNDY3Oz9DRU5QUlRQUFFTUU5QSUVEPjs8OkNGPz48NzUyPD9SNUhISExMTU5SXm+KfHOBfaCdm6elopmhl6KUnJ6nnqirn6isqaq2l6u/q7bIyLfJ0c++m6Bwaaupn4STkoWcoZqbmaeRkYiVopubeHp+lJiSoZOXl4GUnnt3lZKrsoiNl598lJ2bjpKVmKOipravnZGZqIeWj42BiGxzc32AfXJpYF1hX2FnZGBnZltSRUpLUE9JSUxGRk1DSExGR0RCR0VBOjg1PDw4OTk5NzU2NTg+NzU9ODQ3NDU3NTQ1MzY5NTg6NjE2ODYzLzAuLSosLy4tJyMqO1hiQigqLDEtKEuXXjA2M1GFZjJBQGlhXlBwdGBtfWF3jn17lI6Oip+Sl56Wm6qYnqpCRH2HiYeYjXiCjYqOjXyKho+QjoGCgImLioSShYOGiYGAhnZeYlA0NjAtMS8sLjAwLy8uLjAwMTU+QUJNUVJTUVJTVFJOU0xFRUA8Pj1HR0BBQDg2NjI8OTtGSEdJSk5PUVlthZB3lYqjp6q0vbikraysp6i0q7C2srKtu7GzvZyzw6u6ycu3w7+4paKws6ytqqOLlpiFpqago5eBppmNoquopIiFlKShoKuhpKmPm7CLlaOmt7qboKOwkqKdop6Qo6Grr6yytKKUpKqImYmSiZV6en2Ff2hhaFxlYl1kZF5mZ19aT0NJSFNORkhMRkpHRkZIQUtGQ0ZGQTs4Nz08ODg6OTc0NjU4PDU0PDc2OjQ0NjQ0NzM5PDM4PDIwMjU1MS8xLi0qKi8sLSooKiYlNVhYLywwLCwwhIE4NzFQhWg1QUNbWFRMaGNXaW9YeoV2gZOFh4Kbg5KQjJLayJ2Wc1aXiI+InI98hoyOiop6h4KHkI6DhYCLhYaHkoaChImGiIeHcG5hQEU2NDwyLzExMC0sKy0xLi00P0NBTVVRUlNVVVZVTltQR0dEPD4+RkhDRUA4Ozw1Qzs9RktJR0hST1BXgZKghK6js6qywMfDqrPFtqyzv7O4vra/tMG2u7qjuMWotsnHtb65taijtK2wsZuZkpqfiKevq6WUdp+kl6GssrOYlqquqK62u7K6rK+1orGrsbW7t7SutKCnqKOnmqmvrbK5t7imm7aojKSOkZKfhniCg3ZaYmVXZmFhY2BgZmBbVElERExVUUhJSkRJR0VBQEBLREJNRzw4Njc7PDk3Ojk4NjU1NTcxMTw4ODk1NDY2NDk3Pj0zODkxLjAxMjExMzAsKiwuLCsrKyooJyopRVowMCovK2iSTzYwUodqNkFGV1FKTFtaUWJjV3l1cYGUfYSGk3WFf4CMe7+7o7yCtJSTjZuPhIiPkomIeYaAjJKMh4WBjn+BiY6GgIaIhYqHkXp4bl1WQEVOPDY6NDZBQjc2NC8vNkNIQ1FbT1FVV1VcVk9eVUlLSkFAP0dLRkZDOz5AN0Q3P0JKSkVGV1RQXo+kraOxtMO2uMHMyba7xL2zs8C2uMG1vq+3dLGzpbrEpLDGubGzsbSopLW2qrGgopabopKlsK6mraynpJigrLS7oqiyurW8v8y/xcW9vbPCt7q4vre6t7msrLCmsaqtvbC8u8HBq5m6qJOtj5eXqol9gn1rV2RiWWtlamVXXGNZVlNJR0ZMUUdDSElBSEQ+P0JCS0BATUQ5OTY2OTo/Njo5OTY2MjQ2LzE5NTk5MzY0NjI3Oz0/NjoxLi81ODo5NjUwKigsLS0tLCwqKCgrKyhFUy8qMDBKj2s1MlCHbTY/RlJMQUxSV1NZVVp2anB+joSAjYNuenN4h2K5oZmjiZSUlpKUk42QlpKHhnuGgY2VioCEgYp6fIqHhn2Kg4GKg5V9d3p1ZU9cZEdFTDtRY2FbXlNGPztIUEVaY1FSWVhaZ1lUYGBNU1BFQT9JSkhFRUFAQzxFNkI+SEdKTFNaVF2Trri1urjIv7q9ycy7vMC7t7W7ura9tLqxxmB1sqSxmp6rvaqlqKurpKKytaCrp5+Vlp+Yn66lp6aln6OUo6extKeys722wb7TycnTx8LFzMLKw8C+vb+7vLe0r7i3tsO5xb3CyK+euamhq46kqLaIgYBzYGNiXlhiYGlnUlhgVlFVSUVFTktAPkdEPUtBPUJAPUY+O0hANzk2Mzc5PjQ4OTo1NzA0NS8yNjM4OTM3NDQyNj84QD5HS1JUU1FQT1FRUEpBOS8sLCwqKygoLC0sL1A+KC40OIB9PDJLiHE5PkNLRUBJTVBSS1FdZ2xrcI+NhY9zbHJyc4fVwLWZoI2VmJmRjpeRlpaOhod9hoOMlot+g3+CeHuLg4d8i3mBioKXfnR9emtlcHVZXVxQZWRiYGVkXVtYV1xNZG1VUm1tX25fWGdkVVlVSkRCS0tIRkhISEdBSTlEP0hLVFRWXFpbk7jAuL23xsC7ucrKura5tbi5sre1tK62tphkdaicrXBeoqycmKCim6Seq6WUn5+QlI6WmJenn6WfnpqZg6SdrKWqsK24sL251NHO1tDJzNLMz87Kxr+/wsq9wbzBwMTExcq+yM6zpLuwtK+aq7i7mYB7bF5hXVleYVpjY1FbYFNQS0NBRUZFPEBFPkFIQUBEPTpFPj1KPzQ3NTM1Oz00Njg5NzcwMjIvMjQxNjk3NzU1NTVEM0VMTT41MS8wMDY6NDc3QElPSTstJioqKC0uLyxATSsvNTRtiUkwSIl0Pz5CREBDREZLT0RRXFloX2+XkpCUbmxvdXWHs6yhoJ+LmZyZjI2VkZuShYqKfoiHi5CLiHyBhHN7ioOFe4l0gYmHlX9ze3lrbXV7aHJlaWxpZmppaGBmaWhsWm1zlq2kvIiHZ1tvaF1aWlRIS05PSktQS1NRSExBSkdKT19eYmZpYZe3x7C4sru9tbHExrWwuLCvu6uysaert6yMtaedmqeaTpqdjI6flpGmmKWVipOTiZCJkJGRnZuhl5qVloeemqebrK+osKe0tNTU1NbSy8/U1c3Tz83FwsnQv8rJysnRx8zNwtDSuK/DvMS5pba6w6KDb2RdXV5ZYFdZZlpRXVdPUEJCSEVCSDtBQz5BRz8/QTg7RD5ASD00NjY1NTs6Njg3NjU0LzEwMTQ2Mjc4ODc1MzY3QzVCOD8tMC0xMzQ5PTk3LC4sMTtGSz0pLCguMDAwN0s/LTQ2VIhXMESHd0M7Qj5FQkFDSk0/VVlTZVZzkJCYgmhxb3l5g6CqnqWWjJqbl4uNlZGajn2Ji4WNioqKkId8hIJwf4iBhnuHcoORi499cXh1a3F4fnF7bnhzbGiBcG1jam1weGl3fH7Lv8Hfp25jeG5jW2FgSlBSVU5ZXlBdXE5QTlRRVVRcbm12gnGWrbistKavtqqsvMCwq7SmpLimq66gq7SijrGtmpeYjJGTkYSOm4GNppGciYOLhIqJhIuDlJWXl5OckZyYmZmfnquspKeirK3P0tXRzcvS09TQ1NHOyMPU0cfN0tPT18zR0cXS1sXAzsfHwqi+t8+eem9mXmJdV2BTXVpQUVRQT0g+QEZBQkU8QEI+RUQ+Pz86PT08PEpBNDU0NjU8ODg4NjY0NDEyLzAzNTI2NzY4NTMzOz08RT1AMTErLzI0OT41OTAxMDIyLTJETjMpLzMuMzI9TjIzOEN9XzJBhnREOj09ST5AQ0ZIPFZSTU5bdYaFindsd3B9fn+hnp6hi4yYk5OMi5OPloR5hZCQjYuKh5GHf4J7cn6AgYd5hHWFk5CIf292cmtzfHx3e3OBd3FqgHNyaXBxenlyer7Lmn6MsoR2coR2aGFrXUNaWltWZWNYZGpTWF1dYGReY3d6fouBmKmjpKGfoKilqrC4qqWzo6GtoaOtoaexn4mmmpOSkYmRj4iBlIlqlKKMmYSAhX6Rg4OTlq2LlY2Vmo6GkpGel6ewoaChpaSoyM7PyMLL0dTR1NPO083G1tLM1NjW1tjU19XJ1NrNydfX0cqsw8PMjHNvZGFgWFRZVFxQS0dKSkpAOzo7REFEPEJDPkdCPkJCOzw5PDpHQjQ2NTQ0PDU2ODc1NDMyNTAvMjU0Njc0NTU0NDw+PUU/QTYyLy0xNjs9MDgxLzI1NC8tLTtSMDE3LzUzMkZEMjg+bmI1PYF0TTk5QEk8QUQ/QTtQTEZLWXCAdX1oc3hygomAnZWdlIWLlYmPioiOh49/eIOUmIqNiIiLiX6CeHN7fYOHd396h5GWgINud3BtdX92eH10hXx5bId2dG59doR1eHudtYw7QYrFpX6MfGllV0lDZmNlY2dqZG54W15maGtuaW6Ag4iRi5ydoJ2Ql5ieo6OmsaOjs5+hpZ2gqaCjsZyGnpKSkpCKjouGg4+EfpybjI2ChIV6lH6CqZWjjJGKl5KLfZeKmpKrs5ianKicp73Dxrm2xs3S0NLQzNLLydTO0NXa19fY1NnYzdjbzsnZ2tHWvsvMtHl3b2VeW1NWUltWRkdKSUVFPTo3OkBAQjpHRD9EQ0FEQjs/Ozs3REM3NTY1NTswNjg5NDQzMzQxMDE0NTU4NzQ0NDQ5QD5EQkM8MzMuNkZUV09RSkFKRj8xKiguQlMzOTI1NC83Szc1PGBiQTxzdlY4N0FIOj9DPjw5UUVDSlRrbm5wYnBxdIaNfJeRnYt+h5KDiYaFiYKHfHiFlpaIjoOHhYZ6hHlxenuEhnV6hY6NnXmLcHxvb3p/cXuBcYOHgG6OenV3fXyCdX57hoevc1ipwraNkYJwbmI9XmhycHFwbnh2gWVob3J1eHF6i4aOk5GblZ+Vh4uTm6CbnqqfoKycoZqYn6aen6uZi5qMkJGNhH2Ih4OFi46gmZOIg4d+bZl5hJiGiJOMjZSMhnubiJSPrqqUlZefmaeutb2prb3Gy8nJzMvQycPSytTX2dfY19Xb19PZ29XQ29rR1sjUy5V6fGppXFtQU1ReSENGSUg+QT49Nzo9Pzs9Rz0/QUFBREE+Pjo4NkRCNzU1NDc5LjU2NjQzNTUzMjMyMzY0NzU1MzQ1N0VCRENFQjU2PEZOU01bbmZjbnNrYVY+LDRMRzg2NTQzNEJGND1XX2hMdXheODs/Rjw8Qjw6OkQ/Q0dSa19tZGJma3aAiHGRkJqAeoCNfoKCgYR/g3x8hJiOh4t+hoaAd4J5bnt7h4J0epKejaB2jnWCdHWBfXSAhG+Bj4FvkoV0fICEenaGe4m3xaTBybiClZuPd3BlTmZjgXqBd4aikIp4eXZ7g397hHZtk5aUlY+XkIOJjpaZl5alnJeflp6SkpejnZmrlZCQiY2RgoyFiYiBhpCRnpuZiYWMgYaXeoiIn5ePiI2Ki4J9oYmQi7yhmJOXmpyppqWun6i2v8DAucfJzc7FzcnR1tXV2dXX29TX2drb19va2tjO3MaHfHtoamZgVFhVVU1MRE5DOz09PDg6PD45PUA2PT9APD8+PDk4NjdDQTY0NTU9ODA2NjU1NDc3NDU2MTM4NTQ1NjQ1NTdISD1ESkU3OTI1O0g+Ozo6N0lQXVpSVVhLOVQ+Ozk1MzI3STg9TllNSHh4ZDU9PkM9PUA6Njo+PkBFUV9ZZWFdW2h0enlsiY2Sd3Z6int+gH5/fIR7foGRiYSFeoSHenV9dG18fYZ+c36SnZGeg5F8hn54jn14iopugpqAdJmGfYGIhHt9kHqPqI6Pw6C8jJyjnH2JhH2JcouKfnOmmpyYk4V7jpCIhGhHcaCknYyLkJKFiYqQkpWPnJqTlJCWjIuVn5yUoJSRjY2Pin6Qjo6LhImSlpqen4mMlJKdkYKLf6WZiISNg4aEgKWHi4u4mJ2RlJaip6Gdnp2jr7a6tazAxcrQyMfMz9PS0tjS1dfA19jZ29ja2tnZ19u4eXl5bWtmV2BcU1BPSUNMQj08Pjk5Ojo5OTs9Nj8+Pjw9OTo7OzM3RD84Mzc4PjcwNjg4MzU3PDM3ODA0OTc2NzU1NTQ2RlA1RE5JODkzOEFLPTszQ0BJPDlEV048TVRITj85NjMzMz5DO1tYPjVZeXBaPDxBPD0+ODU4OT89RFJTUlhfVlhmbW1taYGOinFyeYp7en98f3uHe3x7i4eBfnWDhXlyenNtgH6EfneFm6GanpSSgIyIf5iHgJuSboeohXqgi3yRjYKIhJt9mpCKjKOin5CjrqCLkYuFi4GThldyrYufq5uPg5ibj4+OW4KikYKMn5OUjIaIjJKTjJSUlI+Lj4mHlpudj5WWkIuSk4WAi4iSjYqKnZaZoqOGk52WoIqJiI2ckIOIj3+Dh4WkhoyQs5idkpSXoaGemZKcnaeyuKymvcLHzsfGz8zQzM7X0NHUrtbV2NrY2trX1tnZn3F+dWlnXl1YVFdYQ0BIQz4+Pjo0OTo7Nzo7OjM7Oz89Pjc7OToxOkg+OjM3PUA1MDY3NzI1NT82NTs1NTg1ODo1NzczNUhSN0dPSzk5ND1FSkI+MUZDTEI5ODpHWEA1SFdJNjYyMjM6RUNlWD8mX3lpX3o+Pjk8Ozk4OjtAO0JRS0tTWVBUY2J5bWJ+koNvbXeLeHl/eoF8hnx7d4aEf3NwhYJ6dXZ2dISDhX1+kqajn6WiloqdkJSXi4qol3KKsY2Ep5KEmZOEmYyilZ+Yk4manaKSqa+fkJWQjY6IloxujbeFmsTIspuhpZucmJaRspFkpM3HlY6Gh4mPko2Nk5SJhYqJhZaZm4+QlJOGlJeEf4+LmYiNkKqXl6OjiJmflpqIjoeXl4qEjoyBf4ePpYmNk6mal5OWmaGZn5mTnZuis7Slo7zBvsjFxcnIycLK083N1KnS0dbW1tja1NPazoNzgWlkX15eT0pVW0JBRkM7QT04Mzc7PDo4PTY0OTo8OjgyPzk6MjpJOj02N0JDMzI6OTYyNjQ+PTQ7PjY5NDk7NTc5NDRLUTxKUUs5QTdCR0lANjRKRUxGPjw4OEVUQTc+XDg2MjE0OjtFYFhBRmF0aExjWj41Ozo6NTs6PTpFTUZIUldTUkJjgUZ1go58fGx9iHh6fnqBgYJ+dnaAgntsbot/eXx4eHyEh4t+i6OzqKOrsqGWp6ClpJaVrqKDkLeVkrOZjaGgi6Sbr6KknZiQp5aoma2vpJeVlZSQi5iZlqDAjqPJuKuaoqWtmZGanLKdhoWoopyYhYiJjpWNi5OPh4GGh4iTmJSMi5OThpSYhoORkJx0kZmylpekoYicmZOPipCLl5qJipaOhn2MmJ+KkJCcmpmTmJiflKCdlZ+bobGuo6S3vrTFx8S9w8O/xs7KydKnzs3T0tDW2NLP2Ltze3deYVZhV1BISk9FQkNENT46NzY6Pzs8Nz00MjY2OTc3ND01PDU8TDw+OzxCQTc1PDs0Mjc3P0A2P0A3ODQ5ODc7PDU1T01EUFJMOEA9RUFHQTU6SkVORUQ6NkFAQlM+OURPMzIzNTc1PXZcPFJcdGlaTV1TPD04OTU2Nz06SkZER05bXFlKZ2E7SISLenpthYZ5fIR4gIWBfXB4fH18b3ONen2Be3iGi4mFhJKou62osr2vpa6zs6ijorCsipq0nqK4pZWspJeprbempKOfmamYqqOvsKmamZyUlZGXoJeZu7utyaBptrirsJSYnqKrkpe9o16qsoKJio2Vh5F8j459g4aNj5SUiIeSlouPlY2KjJaZkp2as5aVq56Lm5SSjZCSjJibipKekIyJlZ+ijZWOmJqdk5uYnpShoJScnKWvqKKls7irwsjEtbu9u8XIx8LRocbJzc3E1tbQy9OicXxqXltVX1JQRkQ+PUNBQTg/ODc0PkY8PDY8MzUzNTU0NTRCMzo6Qk06QTtBSEI7OkA8NzQ2PEI5P0BCODc0Ojo2Pjw0N1RLQ1VRSjc8OklBREA0QUpITkJBPzZEQTxKTkQvVD0yNTQ6RUpcWEpaUW1ncHBEaWBLSTY3NTc6PkpAQ0lQZUhiYGNwSkCLin6AcoaHfIGJdYKKgn5tfX18f3B3h3eNgYd7jY+Mhoyaq8LAsL7Gu7K0wby0rauztoyosq6uvaqbu6Sorbm3q6amoqKjo6mvsrGqnZykmJuYl56ipaWSo7muqMC7rK2yuaWkp32IhpytvbCDi4uLkIOPg5GPeoGHkI2OnIiIj5eNi5WXlJCalpynmrGakaudjpmPko6VkJCWl4+RoJGIlZukrJSWj5ScnpSgnpuYoKGUmp6op6Sho7CypsHGw7CwurbFxMK+zafHw8fDvNXQzcTKiXV0Y11bYVtOS0NMQEVGPkE/Qjs6ND5BPT01PTY+MzMzMjQyQTE3QEJOPkdAQ05DQT1DPTs4NkNDNUJJQjo4Nzg7NUI+NzlWS0RXT0Y4PTRLQEM+NEVLSE4+QUE2QkI/QlNFNThQMTQ1Ozw4O0Q+OUxqal07V1JkS2daVU83OUdFP0NGXGdHYGlnWl1bk4yMiHuHi4aDjHWGkIqBbn58gn9xfoF6lXqSlJSYkZOVp7TGycDCzMHDuci8uq+rubuXsra6s8CupcCkqrC7u6quq6KinqerrrWwqpugqpyinJWesLSni6K6urXBu6uonLKkpKiUhI6pw8SkgouOh4iEhpWUjXqDjJGPkaGMjJSRj4mYn5eTmZSXpqCunYyqnI6Vj5KRlZWOkJWRj6GUhpefoLOelJuUoKGZpJ+aoJyglJiepqSmp6SvraW/xMKuqbe1ycO+ts6yxb7DvLPRysjBtXZ6bl1ZXWtTTUlDTEpKSUBBPUNEPDVBRDs6Mz04QjMzMjI2MkEwNUlFTT5JQEhSQEg+Q0A7Pj1GQTVBVUA7OTk4PDdFPjg+VkpDV09HOD80TEBCOzVKS0NMP0I/PEJGPUFITDkrRzwzNjc0NjRBPzdPYU9hRS89PjZrbGpgQDpIPj9FQmdcTWVcZlRjapmNlomLiJKPhol5hpOQgXKAfI1+d4eBgpB6jaGWqJqamLq+yMjKwtLJysLNvMGzrbu+p7q/vrzDt6zBqayzu72qsKmkpaOrrrSutrWgn66fpqKYo7S9qZuovMCjtravq5KvrKqrloaaqaalkYKMk6WViYB1ipJ5hY2RkJ6fk46Ui4+NlKOZl5uUlKOeqZ+RpZqMj4+PlZaIfY+VkpKjmpWgopy1ppGfl6Wko6WenqaYnpWXm6Wjqaiisqyou8DEr6Wzt8zAua7Ds7u+wbitwsLBwJlvemNZV1xcTExNSUdEQ0hCQkFDSzo0REg6OzQ8N0UuMTIzNTJCMjZTSE48SkJKUUVLQ0RFOkVMQjw3RVY9Oz04OT88ST86RVVJQVdRRjdBOks6Qjc5Sk1CSUBDPjxERzxCQ089MjBIMzY2MTcwPUI6PWpqSks1UVMzU3BwZE47RD1ARj5rSV9YYVpkZVaej52Ol46ekomKf4mfkoR4hX+Vfn+QiIqQgJWgma6no5jCvcjEyMbTzc7Ny7zCt7C6vLS8yrzDwba2u62zv7m8ra+ooKmntq2uqbK3mp6toqihnau3uKmlr77Esb24s6eps7OtrpaVpaynoJGOkrHFp5WNfJGVfYeRmY+qmZiTk4+TlZOlnpOdmZOho6KcmJ+Zi4yPj56IWpCXl5KWpZpmmKOfs6WWo5asraunm5+nmJmWmZWhpKimnrarqbq8w7WltLbLwbiqtqyzuriuqLi6vbiDbm9bWFVWT0ZLU01LP0FIRURHRkc4NUZNOz43PkFKLjMyMDI1QjU1UFdOO0xGS1JMT0dHST5JUT86OElTOzs/Nzk+RExCQEhTS0BXUEY6QT9HNkE3O0hNQ0U7Qz00RkU6QkFCRzkvOkEzNjAzPkdEOTQ9dGRNRztFKzpmfGhXOz1AQkZCckZpSVJlYkxGppSclqGXqZaMkIOHpZKIgYeCnISDlZCRlI6aop+vvq6hx73FxMfHzs7O0sq+u7axuru8vs62xL23uLeysrWzuLKrppyrq7iqqaevsJejrqSnpKW0wLCqrLO+wrnAuLOnuLO3s66Vpa2urqSLk5WhjXPBmX2WmYSOlpqLsZWamZWSk5mZpqOVoJuWmqicm6GgmYuMj5adYEqWnJqUmqWXVJawn6+cn6WUr6+tpZqhppSTmZmOnaCnopm0qaqzvby7q7Cyx8C5pqurrbGxo6GysrSkcnBmXVtPUUxFUFBQUTtIS0lGSEFDPjlLVD9BOj1FTTA3NTQ0OkIzNE5XTzxKS05VTlFKUEhISk9CPD5NUjs+PTg6PENSPkRIUklCV05JQENBRjM+NThKS0NBPUM7NEVBOkE/PkhANSpCNTIsPmNdZzozNXRkZUBSNyYjM31pWDs6QkNAPVJFV1JzYldGSKuXmZ+hqa+YkJeHi6eWjoiShZ+IhJyXj56gm6Oltcm0qca7w8TIysjHzM7Hvrqzr7m4wMHNtci6wLm1urGvr7K0p6ObqrS0qqmmrqyZpK6lpamtur+oq7a2vsG/vrizscKvt72ro660rLiliJuXppt2vqCEmJyOk5mai6+WoZybl5Wbn6GpnqigmZqqmaGnnpeQjZGdg252k6KalZ2in5CusqOrlamqmKuupaSfpamSkpmbiJScop6WsKepq7q3vrOyrb25tp+jp6ilp5ycrKmpjWVnYV9STE1HR05KVkw9TURNSUpBQ0Q8UVU8QUFCRE8xOD03Nz9CNzVVWE4/SE5RWFJQUVRKUUpKRUFFTVE/Pz04PTtHUjxFRFFCR1lNS0FIREU6OjM5S0lCPkNCOTlDPjxAPjs7RzctMj4tMYJoTnpcLzBraGA8PUJCODZ6Zlc7Oj0uLlNhTVZIf2VeSEaslJyhn7uvmJSei5Oqm5GSk4mrjYeinoykrJSjo7bHvbTBusLCyMnFws7Iwb25sq+5tMDCyrbGscC8tLqrqa2sr6OimKq0uqappqyqnaivp6Srq767qKy8s7e9xry3tbjAsL2/s6m0tqu+pI+il5Gin7yfiZmgmZaenY+3n6mcpaObnKGaqKWzoZudpZyoqp6ZlY+UmouXiY2kopScop+gta+lpZOxq5qsrJ+epKOpkpWVoIOQnp+clamloqG0tbq1rai1srOenKKmmpeVmaqhnndiXmBeS0lGSE1RSU1FRkZCUkpIQURHQVZTREg8QUdRMTtCNzpCRjc5XFlLQUxQVFVTTVdSTlVKREBKSk5POUM/NT08TlFDPz9QP0VaTUpBS0RHQDUzPUlHPz1FQTk3QTs8QDw8M0A8Lyc7KkiRQjpTSjAsW29XNzE8Kh1CgGRUNDktMTpoXUZERJxvYkdFqJeknp7DrZuXpZeZqZyWmpqPqpaVqKaVrayZoaq2xMK8v7fBw8DHxL/Nxru+ubKwuLO/w8i1v6+8trm3pqOrq6ygoJqqqsSipaispp6sr6yiqqi+uKasvbC3tse2tLm4vrC+wba0srSvvqOWo5aTm5Stn5ChoqWjo5+QvqWpnaisnZ2hm6afvaKYpJ6iqauhnZaNlZ6Tn4ePhY2TnqSgnbWspZyWsqeZsKifmqqeoI2ZlZ+FjqGam5KlpJqYrLG2saqlqa2snJmgoZKOkJWpn5RpZFphXVBKR0tPTEhFQ0lAPU9IQDtHSUhbUk9LPUhOVTRCRjk+SEc1Q2JbS0NOUlVXVlFYVFJVSEA4UVFQTTpHQDRDSFFTSUM7Qz5HVktDQE8+SzwwNjtHRj47RkE1Nj85Oj85OzE1RDAtLDBNdlw0S1o1LE1uVzwtPSkeI3piUTVDS1E5b1JGPEt4ZWNXTKKao5uexayhn6ydna2fkqOelqSgp6qsl7awo6qztsTDvcC2v8K8yMK+ysi2uLW0sLO0t8HGtr6wuLS5tZ+mraqrnZ6fpaTBpaCqrqCkqa2voqanvbWlsbu3trXDsrO3ur6xw8C4uK2ztLWinKSVkZOgraCYoZ2pqKuimsOtqZ6srpubnpmmoL2hnaSYq6urpqGZjZqfkp6Jjld/lZ6moaC4qqeTmLajn7OioJuvl5+PmZSdgo+gl5aNoqSVkKausqupoqKlpZWVnZmLj5GTpJ+JY2VbZGBMSUpLTkZFQUZLPj1KQTk5SkpOXVFRSj1MV1w5Rkk9RE1JOEhjXExDTFBTWVlWV09aXklBPVdRSUs/SEA1SE1YU0hBOkBBRFBIPz5RPks3MDk5RkU7OEc/LjY+Nzg+NzcvMT85MSUxUVVtW0pPMTA9Z1dEMTc9LSt3YFM2U1prV3NIRTY9dWVcS06en6GYnsSnpaKzoZyyp5OqpJ+jn62prJ27sKistbLIw8HCs8LEvcbEvcTKvbCwtq6wta+/xbW5sLC6tayaqLCpqZqepqGnwq2brLGcqqKusKmkp723pra6va+3xK2zs8K/scazurertLatqqKllZWUo6uhn5+ZqKuwrq67sqagqamZmZeToqS4oaGkkq6vrKSmn5KhnpWej5GNlJ2ao5+ntKenjJi0nKOwmp6brpGflJeUmoCSopaPjqChk4umrbClp6KcoJ6SkpuUhYuSjZyegGNmW2hmS0lMSlNCQ0BJRzs7Rj85OU5NVV5SU0o+T15ePUhQQkxMSTlOZF1MRUxSVFlbU1VPXGJIQT9aUUFIQUtCN0ZFTEtOPjtCSEROQj07TkBBMy85N0NCOTdGOys2PDQ2PDM1LS80QDErJ1Z0U2VPPzEwNGJbTTIzPjA8dl1eP1tVXmZyQDg8SJZ3ZUE0n6Sfm5/CqKOqsaGjtKmWsqumoqSyrK6pu7KtsLS0xr/ExLbAxL7KxLXAyMK1q7WosLiswMS0t66strqlmauxq6mYn6aXrbu1m6iwm62frrSyp6q6s6e6sreyuMCqt7LCvLTFp76urbe1qaesoZeWkaWkoqKXmKSvuK2ytbagn6ikmZSVk6Oft6OkpZWusbKlqaWinpqampWXqJ+fmKKerrKipo2XrpmlrJeanqWRm46UmJqFlp+UjJCcnpSLqamroqehmZ6WjI+ZkIGGlomUn3lkaV1sak5QTU5UPUJBTkM7OklANzdRT11eUlZRQVdgXEJKU0hXS0g6VWRdTkZPTltXW1JQUVhdR0FCW1BCRz5OQzlIR0hOUD8/Q0lCTEI8MklBOTQxNzdCPjs3RTcrNjkxNDgwMi0vLjw2LSNCcWdzazIzLzFcY1ozMzgwNnBbYkgwNUpwaVZDV0aMeWZDO6SjnKGlv6aor6+hqbWqnbmvq6SqtLexsLm2sLe4uMW9w8e9vMTBx8C5wcbBuqq2pa27rcHDt7eqrbK8opWtsK2xlqWokaq5qqCnsJ2qn6+0s6qptrasu6uysrm3rLmwwbm9vqbDq7C3rqiqq6admJiqoaGgkZegsK6zq7C5mpupn5mWkpemoLappaKir7Gzq7Gnq5+boKCbnqScoZedo7Owm5+QlKaaoamblaKflpiKlZiTlpedk4mQm5mUjqmpp5+km5ibk4eOmYt+jZaGjptraW1hbW5YUVFaVEFDRVVAOzpJQTc6WFBkXlBWV0RZXl5NTFJOX0tKPlpkXk5JUU5bVVlQS1NXWkk/RFhQREY+Tj89SUdHUVBCPUNGQk0/OjJEPzc3NTQ3Pz05NUU0Kzc1LzI1MS4tLiwxPionKz1ccD0+MS4xZVtkQDE2NDdnWWBGKEA4bH1oXFY6iXtjQz2on5yhqb2hqrCqo7G4qaW1squhrbW9r7O4vLq9t7bBw7/JxLnFw8DAuMW9wbivtqert7K8v761qa6xt5+Xq62orZenqY6nu5+lrbOeq6KxsLOsqraztbytr7G1rLC1scC5xLarvK+xuKysqaKxpZ6kqJ+kl5CYn7Kqs6mqs5mdp5uZlI2gpaS0rqeirKyusaeyrLKpo5ufp6SdlKGYm6i1qZeZkZKfmZ+hnpCsn5iYhpWYi52anZOKjZaXmpempqOgnZaVlpSBj5WFe4+ShIyWZmxzaHByX0dZZlZEQ05YRFo5SEI2Pl1SaFxOWV1HW15dTk1SWGRKSkNcY2BQTE1OWFdYUEpWVldMPUVVSkVEQU0/QUZISFFQQTtGREZLPTg3Qj02ODcxOT48NjVEMCs4MC8wNS8qLC8tKj0sKyUyKyo1SzEuJ19eYVYxNTA9YFZeOClDM1lVXGdLNYx6ZkxApJqgpKy3o6yppa6utqqutLmmp7C4xbext77BwrW0u8W+zMW5w8G6v7rEuMG5s7Wsqrq3u7q+taqtsbaYmKirqqubrKuPq72eq66xo6qfsa2zrq62srm2qa2usae1sLO6vMmyqrW0sbSvrqahs5+aqKygpZWVmpmxoq2gpa+WoaSZmZKNoqWmsqmhprGrqrWkrbC1r6OYna2nmpeemZmsuKKYk5CPmJyhmZeUrJ+dlIGTmY2enJqWkIqUkp6apaOioJmWkpKWe4uQhXuMioOLkmtueW51fGFGYGpaSUhaWz17SkdFNkFiVGlaTVxhSltdWlJSU2JhTEtFYGFgUExJUFdWVU9HV1ZVTjpJVklIP0NLP0VESEhRTkE/SEhIRTw3PT46NzU2MDk/ODY2QiwtOCwvMDQsKCwvLSo3NikoOS4kOks1LiJUYFZhLjUoQ15RXC4qQS9KR1BbRzNjWVRLRJmXn6+osamspaOurrWptrS3o6y0t8m6tLu6v761tLfDwc3HvMS9t76/wLe/vbK9rqe6ure3wresrbG5lZemrquno7KqlK+6pK2ysaenorGzsbKxtbG4sqiuq7KnuK+1s8PFtqm0tauwramnorafnqaxoKSUm5mUsZ2nm5+pjaminZuVl6WlpLenorCzq6exp6ywtaykmaGsqJucnZuUqriclY6Oi5mdopiQl6ein5aDkpaQnZyYl5aIl4+XmqedpKCSlpGQlnaEkId7hYKEjIxucXh2fH9dS2VsXEpPY1w/YntHSThHZ1dlW0xeYk1YWVdUWFRpXVBPSGFdX1BKSFFWVVJLSFdVVk04TVpORUBGSz9IQkNLU00/P0xPSEA7Oj47NjswNDE8PTQ1OD8pMDcpMS4yKSksLC0rLTkkMDQyJTlCNy4jQU5JZzI3J0ZhTFYlLUIuPUVMUTwzcmtLREORmKStpK2tq6ajsLKzqrawtp+rtbnJua7Bu8O3s7K1wsPPxMDBvbS9wL+6v72zxKiqubG2t7+9r6uzs52gp7CtpaawpZ6ytayrsrCsqai0uay0s7WstKypq6isqbmtsbDHvrikua+pra2mqK2wpaOjrqOpnJ2bmq+ZoqOio5CsnqOgn6GppaW4pKu0tKSqq6isrravop2jqKqboJmakqS0mo+JjYeRo6CWjpSeoJWThY6Uk52bmZaUh5iSlZmnnKCfjZKRjpF3fo6FfHx9h4qJcXRzfn1+XFJkbl5OWmZdRkSWW0c6Tm1YYVtNYGJOVldWV1RZZ15RUkxkWltUS0dPVFNOR0lWU1xOO1BeSkJESEpBRT8/S1NPPjpOTUM8PD45OjU9KzMyPTYyNDk6KDQ1KS8sMSgpKywtKiY1Ki8mMCkzODoxJiozQ2U7NipIZEhKKzpJPzNDSVMsPo9rPkhJj5qpqqGosKSoo7O0sbS1sbGhrK29y7quwbvGsbSttMLD0cTGvsCyvsLCvL+4vMWorbess7i8wbCrsq2hpKetqaiksKOrsaqvq7Gurq2rs7unt7GyqbKpqqalo626rKmxwrm0rLmoqKitqaexpamkoq6qqKKem6KslaSdl56Yq52hp6ihrKWjray3sbGgqaKfqq2wrJ2epqepmaOYmI+gp5iGg46Ki5+hkIyNl52QkIaIkZWgnZWYlYaWk5OXpZydnIuRkI2Kf3+HhXx3f4eFh3Vzcol2bF9ZYG5jUXNyXEs8hHxGP1d1WGBZT2RcTlVWVVdQXGFfU09OaFhXVktHTE5SSEVJVlJdYzxQXUQ8RkhIQkc/PUpQTDo+T0o9OT89Mjo3OyozNT4xMDQ4NSg1LyosLjMwOyksLCclMjM0JCwyLTg2MCkoMTxeSjAuSWdERjg8QjA1RUtYMUCUXEBNRpWWrKehqrKcqaiwtay4tK6qpKurvcm7sb63w6+wrbPExM7Ow7+/tMDDxLrAtMnErK+3rrK6wL+zrq6rpaiqsKmmqLKltK2qsK6tsa+zrLO6pLi0rKyup6ugop6wt6uqrbq2pLW1pKmnrKyqrKGopqaxsqSmpaGhq5apoJOaoKaeo6KqpKyinqaxt6ysoqSimqmqramcoaWko5igmpWPmJ2UgYKQiIWdoI2Kjo2aj5GLhI2YpJySkZuMk5GRlKOam5qLjouLfIeBgoJ7dYCEgX51d4ujh3lrXmBuZ1dmh2ROQGeSTERieldiWFJlVU1WVVVUT1xdYVVLTmlXVlZJSkhJT0JHSVNRWW9BTVhAOkpHRkVHPj5FUUg4Q0tFODdDNzI6OjoqNDk/Li80NjMpNCsqLCsuIzQuLSsmKCs3OSomNis8LTIsJjA2WFouMEpnQUE8PEMrOkpPXjREhkFJSESWka+koqqwl6qorbWrtrCrpKuqqbzBwLi5s7y1prKvxMnL0b/Bu7nAwMK5wbrCxK6xtbK0vMG+s7KurausqLaqpa2wqrmvqLCwrrGrtaq2taa0tquspKmqnKOds7OoqKS0tKC2rqGpqKuoq6egqquoubapqqmpoamfrZuRqKGdoKSipqKpnZymtK6npamio5ekpqepnKKjo5+ZmJ+Rjo+Zjn6HjYeFnp6IhIqLj46RjYSGlaKajo2akZKRjpOfl5iWjYqDf3SHgX9/eHWDf3t4foCInY9wcmdncXhcYXOIaU9dmFZIbXlVZFZSY09MVVRVUU9YWmJWSFBqVFdTR1BZVUk+SUhPUVB4TE5WPTxLRD9AQTxAQ1VDOUFLPTU7RTEzOzk3KjQ6PSstMzQxKjgqKisqLCkqKC8qJiklMzssJDIpMjAyMSUvMlJjMDI/Zj1OWD9DLD9MVF8vSWs3UkU7lY2vn6WqrZmrpK2us7SuqqWvqam7vrvBsa+4raK1r8nHyNHAv726vMO9usPBwL+vsrOytr28wbKys6uzqaW1qKSts7O5r6KttbGvsbmquK6qrrarqp6qq6CjobauqKGer7KhtKqeqKeqo6qhoaytqL2vrK6soaenn6uYj6+imKKgqKeep5uZqbCoop+soaCSoaKjppiaqKWYmJidj4qHlYh9jYaEhaSXhoKCjIePjpGFhZWgl4iRnZCTkI2RnZWXj4qFhnhzgX99dXh6gHt0dHtqgoejdWleZWyBdWeIi3xSV3BeSnhzVGRTUV9NTVNaZ05MVlllWEdTalJSPkJOUWFROklITFNJcVBMUzs8ST87PD07QEBXPDw+SDczQ0IxNTo5My01OjopLTMxLS02KSgrLSw1MiMyKScsJS47LiYxLjAtMTQlLDBNaDozOF89YWQ/RjFDUFtbK0hPO1hCNI+OsJ+kpaqjpaOsprSzsKmksKequL7BvLCouaqnrrDJxsjQwr3Avrm+vrzJvMK5sbC1srq8ucCztLutuayjtaanrLK2ubKmp7q1rbS8r7ylra21q62cqa+kn6WsqqecnaqypLOomqqnqqSpnqKoqKm9q7SvrZ6po6Cum5qyopWkm6Sln6SamqiqpZ6aqaGbkZqgpJ2YlqmpkZmZk5CKgo+FfY+CgIiej4eAfoyHkY+QhYCUm5SFk6KMlJGLkZuSlYeJfoByenl+fGh3fHp1cHF+aYZ5hIhkYGhkcoV7bWd5XV5WQld7bVRhUFJYS0tNcHRdSFpbZ1lFVmdPQz5LTkRDQTlIR0tTP2phSVE4PUg8PDw+Ojw/VDY6P0M0NUg+Mjs1OTAyNzw1KC41Ly0xMSYvPktJMSUaOTAlLCwwOS8sLCs2JzE3Iy0vR2pJMTRYPWZiQUo3R1NgVSo9PEZcQCqOk7CZn5+ppaOhqqW3srGkqbGmrbnBvbWwo7mtqKiww8nJzMG3vcC1t7+6yLbDtbSztbK9ubq9tq25tr+torOmq6uvtbe0qp26u6ixv7K5oK+0tqmsnq2xo5ylqKminZyksKavoJ+rqaehqZyjqKCtu6eusa6hqqKjrZ6erKWXn5ugopyfm5miqqKamaOjlZaTn6GWm5amrIuekZCRjIKLgH+PgXualI2JfX6Mh5CPjIqFkpiRh5SkiZKSh5CakJOBiHx5bH12eXhie3pycHBzeGqCdGqCZ2NoYW5zjm1ianBgb0FdeWtWXk5QUUpJTFNZVk1cXm1XRFhhT15QSE1ERjs3SEVLTzxyaEpLOUFFOzs9PTs7PUo0OUI8MztHPDQ/MTgtNzg7MigwOS8sNS4uPS0qTD4qHTQ5JicuMzQuMCsvNCYsOiQ0MEFoWjEzUz1lX0RMNktWZE4pPTNRXT0jkpermJ+Xp6Ohn6ejuK+toq+vqau4wrqzrZ+5r6uotLrHyse/t8K+r7S+t8S2w7KwurKzwLW7vripubi9q6S1p6iqsK25sKmZubyjrr+0tKGut7Wnpqews6CfpaanoKWZnqyoqZ6gqq6noKaXoqifsLifpLGuoKyhrKSbpqaompqbnqOVnJyanammlpqeqJGXkpidk5mVoaqQmomNkId9iH+Cjnx8oYyNiXmDjYWKjY2FiJOajomVn4iRlYKMl42QfYR7c3B8cXN0YHl4am9wcXBqf3NjemxoZmRhZYeAYFtyanFNToBpWFpNUExKR1BSUUhNW19vVERYWlJnT0hLRUY1NkhCTEk1WmVKQDZFQjk6Pj0+OjpDNTk+OjNARjwyQDIzLzo7ODMmMjwwLDg1QiopLUMqLDQ7Tk5AOzczLS4rLTcqKjwlNTM9ZmQyNE0/ZV1GTz1SWmdIKj8wXFs1KJabpZiclayfn6GkobeqsKO0tKmpucW2sq6gt6ytrbC1xcfAt7/CubC1vLe/u7+vrL6ws7+xvcO5qbu6uKeotainq7Css7Cmmby2pKu6ta6fsbivqaWnr7KboaSgo6ShlpuvpqGfo6ivoaCik6Okorawoaaxq5+soq6Xm6qkqJ6Xmp2kk5qcmp2lqZmbm6SUlJeUnI6Tl6KpoZCJio+FeoR+hIp6j5eKjYd6goiEiYyOhY6TmIyOlpmKj5Z/hpeLj3qAenBxdm5wdF94d2VtbGxraYRuZnJpa2ZpXWN0gWBba3VpWkp/XltYT09LSEhSVUYyOV1ebVBEWFZZZU1ISUVFMDdGP0tCNklKSDs2Rjk0OT49PDk4QDg7ODo3QEk+ODw0LTM8PDc1KDU+MSw7QTEoKzY8IjhSPSoxMTM+RDUsLSc0Mio7KzEzOWNtNzRHQWZbSFREVV1oRC48MmNWLDKVoqGXlJupnKShoqG3qa6gurilrL3Fs7Cuo7Wvra2vtMPDvLO/urews7m4uri6r67As7S5sL/BuKy9urWlorOqp6myq62xoZrAtaSntbWonrK8qailqa+smaOnnKSllJehsqWZn6SoqZyioJOkn6O4qKSnrqadpaGokp+ooaGgmJqcoJKam5afoaqbmpiglJCTlpmNlJKjqKSQiYmPhnmEe4SGfZ2OiYqHeoGEh4mJkYWVk5OMkJWUjY6Ue4KXjot3fntsdHFsbHNhd3RoaGpnZ2+FZ2hoY2ZpamBqY2lnW2V7Y2BTdFRcW1NMSkdJT1NAISpoXmpMQ1ZVXmBLSUdFQy46QjxGPDZLUEQ4OkQzNTc9PTg5NT86OzQ+OEBLPT45Myk4Pjw6OSo2QDMuRTQoKyw/MC1OPy4rLTcsMTE5NSwmLjUtODA1NzZgdEEzQ0RnW0tXR1VgaEIzNzlnTycynqKjkY6jppuenp2jtaynqrq3p6zEwbawrKO1rqeur7fAv7yywbawrrK2tri2tq2qvbOusrG9v7iuvLuxpJ+2q6WltKmqrp6dwauopa+yqay1u56pqquxpZieqZ2npJGYpq2imJ6kqaGbopyWn52ntqWvqq6hoZ2doZSgpp+hoJmbmZyRmJ2UpZ2roZeWnJSSjJWXi4+YmqmgkYiJi4h5hXeCgoKdiIuCiX1/hYiGhpGElpWPjpCRkZGMknuDlY2Gc319Znhva2prZ3Vza2NnZGR2gGJlZmZlampka3JaX1ldbWRhTmlYW2BWSkdJS01SWD45X2xpSEJUU1xbSUhGRkEuPD85QTg5UkZANzpCMDM3PTc2OTI6PDk3OjlETT1CPDAqPEA7QT0tNUIzNz0rKiwwQSpKSy4vKiszNzIyKDU3JCs3LjcyNjg1XXlOMj5IaVpMWkpWYmZAOjNCaEglNZqjn5CLrKGYmJ+WpLOxorG9tqGxxry6sbGkt6yqrqm5vLu6rsCyrq6utq6yuLOoq7mxr66ztrq2sLi9raaetaqgoLCkqq+cosCgsaSusK63rrWera+traKanaeppZ6Vmqeln5mkoqmdmp+blJydrK+luqiuoqGamp2ZnqOapJ2XnpiblJmgkqiVqaeak5qakYuUmY2UlJmpp46NiomPfIJzgYGKmIWHfImJhYWKjIqShJSck5GPkJCWjpB/gIyNgnCAfmZ5bWhraWdxcmtcaGNjc4FhZmhqbmxnampobl1sbHRwYVVjaWRlWklGTE1PWFFRVmFlgVVAVlNZVEZIRkVALzw9Nz82PEZOYTg6PzI0OUAzNzgyOD83PTg+RkpARDkyLT1BPUE9MDVAOUAxLSsuMzw7SzYvLissLTI0OzYjMyopNi41NTQ2NVp8XTE5S2pbTVtLWGRkQEExSmZDJzSRoZqNj7CdmpOhmaiyr5+4v7agtMK7vbmxprawqK6lt7i3t627r6yqq7aqs7itpbO1sq6psLe2sbO1uqepn7WonZ6ooqmtmqe+mK2jrq+0ta2sn7GtsKminJyjq6iblJymo52aqaKklpqfnJCbo6uqqbufp6SgmJmZnaGPa6GWmZxwgpWao391kamnnpSUnpCIl5mAloqhkHiGlIyDbmp+doNxbIaLhn2EjIdwXmNhZ4SYhmuLj5SSdHeLhH6Dj39nhoBndWhlV1xoc25OUGpjZ3KEZ19kZm5tal5fYYqPg4RlTktEOUZUZ15KR1BQVFVLSFJgb3RlRlpRVVBGSEZDPjE7PTY9NjwzZlw1Ojw3NTtENDg2MDpCNz86PkZMQ0IzNDM9QEBAPTI4QEU9MSwrMDg+RzYwMS4qLiovNTY4LCMxJzIxNDoxNzVYgWwxNk9rW05cS1tmYj5HMVFkPSoui6OZhpSwm5yToJuqraqjvcWvqbfCuL28rae2sKWrpLezsbOxua2ppqy0pq+1oqi4traop6y3s660rbOiqZ+zqp6hpJump5irupWmpa+ytq2upKmuq6yloZ+doKenm5egpaWbm6ennZOfn5iQnqeqo7Wvo6OjnJaXl5ejiKGOkpqHoYeTnKB/pH+lqp6SkZqRiIRyeI2OhYihdoiMaZeIZn1yeKFviIeEfo59f6GgoJmAfIeedIeOdpuKbIeBg2xoZWN6a3FhU4VtY2xpmHFZanFvh1heaVtra1uIcW56coVnhoRaXkdOP0dfTUZSVlZRUVJXVGdeTVdJUlNPRUdHPjw0OT05PDc7MDw8Nzk5OjY9RjU4NjA8Qjs8OT1GUUc9LjU8O0A9QD41OUdBODIpLjE8STkvMDEuKi8oLTQ1ODMlJjIxMTU+MTw4WIN1MjVSa1tOXExcZ189SzFXYTcwKIumloOcq52ZmJ2fqqqnqr/Dr7G6vbfAv6qlt7CprKaztK6us7erqaWxraW0s5yttba0pqeos7Gtsqiunqugsqigo6KaoaOarbOUo6WltbynrKerqq2opaGgmKCmo5mZpaOkmJykqZaUo5yUk6SlpqG3o6OgpJiUk5eTm4iuj5iUiamLl6GbhbGAo6ydk5mdlHmC1KiAh5XBm8d5eLGlt5dkgMCcv3mEhHmQhHyQkJHKcZe8nMV6crWmu5B7gGyWsauweGhrWLGubmVpvJK8bmh6bnKP2H5TamK2sn+BcpV0mqGqkFdPV2JQVk5GVFtYUVBSjFxXXFBAXERRTkRHSTw8NTc9Ozo5Oi49Ozg3ODs5PkY2Ojc0PkA+Njk/RVJJOi41PjtCPD9BODpKPjUyKjIyQkUvLjMyLisvKS0vMTg2LSAvNDE2QTE9OleDdzIxVGtcT1tNXmdcPkwxW100MSGNppKAp6qfl5ydpa2yqLHCvbK1wLW3vsKrprOsrKmnr7Opr7a0p6emtKWnuK6cs7K2qqWkp7GurrGmqp6npLGjop+el5ufna6rlJ2in7O6o6qpoq2upaGdmpqhp5+Xm6egn5iep6eRnKeak52hpqKgsKKfn6OWlZKYkpmFr2pqio2qfmeDlYatZHCdnJOZpZRxrqGkfni7fWuhj3axX2q0W6WAZpyRYGaCemZ/anhrqWS+cmemjHWxanyxeHSSk2NtbaduW4SgRWhmh5ZFdZxgfmd8pKeCWV+Lq2mAlnh5aqc3Sq9cWFNsZFtLTldfXFdWO06JT1hXL0lUVElDRUY9PzQ2Pzs4OjkwPTg5OTk6PTxEODs6Nj1BQDY8QEhRRzkwNzxBQz5ARDhARz0xMy0zM0UzLi41My8rLyguMC46NS8nJDIwM0IvPTtVgnYyLVZqXE9ZTF9nWTpNNV9ZMzAbkKKVgqynpZ6jpKqyt6y0vb6wtsSyt7rCpqmwq66pqbCuo7C6r6OkrrKjqLionrOysKOloKqtr6yvpqefo6Kwm6Kbl5WXm5uspZaaoZ6zs6KrnKKtraCdmZegoaicmZ2jn5yZoaakj52jmpegn6qepqagm5+hlZWRlpGahbWbtXiFqZm1mXaGs5u3fpOVlqiUfmuBpnuChoiSlJJ3q2drsVure4+HlHSJcY+GgH+IkJd4goKLmIyDoI+EsHZ3n3Fra2x8i06kWEhjY5l+Y2imYHlydVOSh15QqW1jcX6HgGKcLlGhb1tTa2hgTEtbZFhcWkI+sXlYWEEjTWhFQkVBQEExOT44ODo4NDs6OTw5OkE6RTo6OzY6Q0I4PT9LTkc6NTpBRkJAQUQ8RkQ7MDIwMTtGLDAuOTQwLC4oLzMsPjgzMR8vMi1EMTw8U31uMytYalxPWE1fZ1g3SjhhVTUwG5WflYezpqahrqmnsqypu7bCsLvCrbi3wKqsra2upq2xqaGvvKqhp7Sto6u1pKazs6ejop2nqrKosKelnp+fr5afmJSVlZedrKGZmaSotK+iqY+pqKqbnZWYoKWnmp+cop+boKOko5Wbn5eZnaKpm6WZnJyioJeTkZOSnIPVk5m5cLDCfsWGfNaUm7t8mZWkj42cjaR7joejgqWCeqx5j51Wr3qIfp9quVq5doeEfaaCk3yYeqp5jZ2Qe7FujoR0kLyFb5RQr6fFilGgemNgqWN0cohtl4hgU7W0yIaAiXxjpDNCnXZdUGppZFBAWGdaZGFKSE5tTVtST1lmWUNEPkU/MD08NTk7NzQ8Ozg9OjxDOkY6Oz42OkBDOzZAT0xIPDo8REhDQkNEPEVGODEyMTFEQy4vMDQ4MystKS4zMjM5NzEjJTUqPjM9PVF3ajYqWWlbS11PX2ZUN0c6YVE3MSWbopOYsaiopbOqpbSppLy3wbC5wLG1tLuztaexsKOwsqafrraomqe5rqOvsaCztLCgpJ6fp6mwqbSopJydnqqXmJeWl5WVoKqcmZanrbCpo56PrKKolp2XnKGloZiioaGhmqGippueoZ6UmZumoJynlZubn6GZj5GUkZyIsm5otXGrh26OpnK0c3K2e5mXo4uPnY2jf5GhpX6wdoOR0tF2XK57hX+kb5uqpmuHhX2tfZeZj3uxc5Kdj3mzZZZ0hJ5vnmaUUsiLWsJcn3liX61gdnOHYpeIXlnKnW+/gXVNS7VTVcZkVFFqY2ZYQU9rX2xoT1VHSTg9VlFaV1hIQz9KPDI/OzU9PDQ2Pjs3Pjw9QztHOTtANzs+RDsuQ1JKRz4/PElKRkNFRD5ISTkxNzQ2QD4vLjI0MjUyLSkuMjYsNzQyJh82MDs1Oj1QcWg5J1dpXEJPVF9lUDVHPWFNNjIwoZ2Spa+tpKq8raa1pae2u7yyur+3tbS6urOltLShsbGin6ywpJemuq6ksbCctLiqn6adoamksqisqaSanJqonpWUmJiSkqKnn5aSpaqwpqKWk62fpZKUoJukpp+UmqWmoZqin62aoJ6dkJWboZ6cpZWdlpmin5WYlZGahax7d6h2o46IhqlvrYqCp4OYmKGJkpqKon+TmYmuhX+Cs1xys1KufYOCpH9x1314hX6PnoaZmXevhoqRnIh4s2GaZZqBgpRsklqwWEuadZh5ZmCtX3d3h2iYiGtdr3eVno94bDV5yK6yX0JTb15nYEVQbV9wbVZVTS5lY2hSWFE7QURATDo1PzkxPTwxNj85OEA9OkM6Rzs8Pzo+PkU5LUVVSkVAQzpNS0pCSEc+R0s5Nzw0Njo+LzA0MzMzLjIuLjE4Ki4zMiUhMDM3Njc9UGtlPiZWZ1xAPlZfY042R0NgSTo5OZ+dlJ+4sJe0wa2os6ipsrq3s7e/ubeytby1pLezn7Ssn5+orJ+Up7WrqLGxq620pJupoKCoobanpqmimZ2VpaGTkpuZkpSipJqSkKasr6aglZmpn6KOkaKZqKWglZqlqJ2cpJ6snaGdoI2UnpqdoZiZnJaXoaCTmJCmnoapfX2leKGPjoOqcK2LgaeGlZ+hiJeXiKOCkYiUqnyAi515b7FaqIKCiKB5dNh/doh0qIKOm42So3yWkJ+Ee7JenGSgfoOVbJJcq1tak3+Rf2hnqmRye4FrmIdzXaxaiaCOa29lT0pDoVxbTHRdYmZNW2FfcnRfSlY2SpuTWEhFPUdGQU0zNUE4Ljs+MDVBNzhAPDY9PEY/Ojw2Pz1CNy5IVkpFQUg2S0lOQElLQEVOOjpANC47PjEwMjE0NCsqMDUvNywmMjEoJCQ2NjcxPFBlZUEmVWZbPzJVX2JMN0ZJX0MyPzihnZmZv6uXtMKurK2pprSwt7G1v7m5srC3u6m6tJ+wpJ2lp6eek6qwqa+ptayqr6GYoaCmpaS6oqOroJebkaKglJOempSXnp+PjYuor6+mnZabqKafjJKkl6irp5SXqaeenqCjraShnqGNlaGYn6CSnZeclZ2hlZaOq5uPrm1ytHKpjHaKpnO0eHOzgJGkopGcjYmkh5B3uG+Me4uia2u2WqCFZZeXaaGip22TcrR0k5h/smqFkoita3WzYZ1mom+HkmqXXK1fTaF8h5FSc6Nten9+b5iHcVyvVjycd2VUb24uXKdPY1JrZWJtWmNdYXB7Y1NaUT4+bW8zQ0JAP0w5ITdANi47QDM3QzU4Pz8zOzxDREJKRk1JRjYySlRLRUJJNklKUD9ITkNGUD08RTUwOzswMTAvNzUsKyw0MjYvIzAwLCwdMjg5LzlOYGVEJ1VkWT4vVV5hTDVGTV44MUM4pZqbnbuhnLLArq6rq6e3qbivtcC1vLCvubirwbapqqCbpqOinZGqqqi2o7Knr6qgl5ynoKSruJ2jrZuWmY+lopWMnaGbmJyfkZOUq7Wwp5mUnKyql4yTpZmlraKRlqqxpJ+epquwmKGjkJmilp+blpyXoZKcqZyUkKqZh9SSmrtzsMOAw4Z+1ZabuHiHkJeMmIqMp4h6o7Z1fXd2woKasmCDunnAfHW4YrWBjIepfZWBrKlxe391vIinoGmdYaaOr6F+jHSHqn2+bnO8dLKDdXiBim6aiHFujaR0vV53fVthebxrWlZbanpeamFlZ2Jtd29ZW1lDQUByQENHKzVHIic7PzEwPD83OkI5OT1DNDxATlpeYGBfX19aUFBSS0VGSjRITFJASk5FRk9CPEU4ND05MDIwLjg3LSouLzE4MCItMSwzHiw8OjA4TFhhRidUY1g8L1ReYEs1O0xbLTdBOaebnqG8opexw7Ctqqqssae4r7bEsbmxrrqvrsCxq6SinqOinJuQqaOqsqS0pq2ln5aZqpmmrLmdo66YlKCQpaCSjJyjnpedm5CVkq+5sayVl6Onp5OQlqScpK2ekaCoq5+bn6ijs56jpY6nopShmpyYlaOYj7CgkpSpnoWQmbWAkJGMt5V4gpOatXdta25zbnqPhI6JdJ7Bu72ae4GyqHCAdJG4g3yGhoyGjXuKh42XfKS7ub2cdXqzo3R2l3V0sHWZnmaGaY21dHJwd7aMXoB6fYpog3lteWOLrHB1hX9aW6dqRWVaVGZgY11jUWdncGx0Qk1QTEQ6Wk0/SjM8MCA4PjsuMz1BOTk/PTs8QzZCVFlaWltbWlteYGJgXVNHR0g0RElUQktOR0VPRj9HPDc/NzA3MC85Oi4sLy0qOC8lJjIoNCQoPjcvN0xUX0cnU2JWOCpPXV09KzpWVic+OzynnqChv6WWtMK0rKqorKupu66wxa60sq63p7S4ramioaWeoJ2Zk6ukrammtainn5uWoKOdrKS+pqGql5SckKKbkY+iqKGTnZiTl5SytbetmJ2kpKKKkpKmm6Wqm5appKWcmqGopqajqaGRrZ6Wo56Xl5edno+wqJSbp6GOan5pnKZ4h3J9mo50emSHe72+wLpvkoJxlYdgcmpaXpuKYWOIjpVrYH+VY22dd2KVa4CalZRlXmBjcZqKaHKMfYWVZ2p+cnR4fX1iW3d0gWhQXG6EfXuLa1hseoJzSUpvhnBNdU1FV11nYUxaV2djX09bbXVqcVJPREVOO0hIPUw/Mi0yQT84LzU/Qzw5O0A7PUM+UlZWV1laW1xcXWBhYWFgXFVHNURGVUVKT0hGUElJSDs4PTUxOi4wOzouMC03Nj01JiIvKjIsJTs4LTdKUl9JJ1NgVjQpUF5MKDM9W08nPzI+qKCoocKjmrS5tqOspa6nqLWyq8irsLKrtKO+sbKmoKKonaObmZmspq+kpbWppZuXlaGapq2pvqeoppWTm5WgmpKXpKmokJ2Rj5icsLK/rJunnaeiiJORqZqoo5qbrJ+jmZqjp6yin6uimrGblaegl5Wdn52XsaSXoaiZnJGdnKKkmKaimpyampmPlYFnbX1xd5KXlJGFi7WqjYaYlY6KjJiXh5SVioSSlJGJjpKUmJSYl5qgopqclKGejYJ6pIZsanyQfIB0iYqBcYJ4eXZ2i4B7imtzgXSDdWR3fXdrcHttYGNdcGhNWFpmamBXWm95bm1mU09GUzlPWU1STygrOktCNjM1PUBBOTpDPjxFTlNTVFZXWFlaXF1gYmJhX15eW1RLQ1NHS05ER1BMT0k8OjszODksMjs4MjApNklSTzgiKSsvMiM0Oyo3Rk9bSiZSXlMxMFReOis9OFxLLDwtQLOhs6G/oaSxsregqaWyp6WwtarIq6ywpbWmwKe0oJ2kpJyjlZWgqqato6O2q5+ZlpWflq2ppcGeq6OVkpyXnpiTlKKfnqKnk5GZqKeyxK+aq5yrn5CWlqidqpucoKyYoZucoqSvpqGlqJ+umJennZmaoJ6enK+gnKGmlZiSmJOgoZWjnpegjpaTioqNjpatj3yVm4KSgouqqIaBmJaKhI+fiHuEkIeFmZKIhoqVj5uXjZCXnqOWmpORno1/jmahs6+FioR2epCKfHZ5em9mepGBgIlrdYF5iHNoc396dYOHgmt0ZHlmYGllY2Rma1lre3BpalxTTFBEX1RFQD8/LDRARjs0NTs+QTs8Pz4+SE5OT1BTVVZWWFpcX2FjYV9eXl1eXVhWSktMQklPTVJKOzw6Nzg2LzI5NjQuKCYkLTEuLykrKjclKzwoNkNNTUQvVF1RMDVNWzE3RTRcRzU8LEC0oLmvv6yrrrKxoKqmsa2irLOwxLCqq6OzrryjtJufpqKhnJmXp6WppqSls7WelZSdmZmwpq6+oKuikJGdmpmTkZWhnJeonISeqquis8izn6qkq5aWl5qnnaian6Srk56enaCpr6mlo6uirpufoKGYpJ6cn52vo5ieqJOYl5yRpJmYqJ2al2WCknxlfo2Zj2N5jWxoa3uSpKpqZZqYfmeGimVlaWh7jqGPa2iNl5Gid2tqi5ijnplzbG56hI2HelhlXoaCXmyLiYB2XGhzd3eSgIeCbniCeIBzbXmEdHeJiI6De2mGWV5rdGRdc4lpan1xa2NeUk5XSmRYQUo0PUY3P0ZENzE8PT9BRDs7REdISElMTlBSUlRXW15gYWFgXV1dXV5fXVpVT0RIT0tTTj0+PT02NTM1NTU0KiYmJSwqJS8qKyc2KiQ7Jy9BSltKLzdaTzYpRVkvRE8xWUM7Py49pZ+6vLmvrLOwqqWora2wp62tsLyxqaekra+wn62Xn6OdopmZpqucraOlp6myrZ6Vo5Cir6a2uaWuo46OmqGZkpKboJmZpZV7pa2iqLPEuKShp6+enZSeop6jnKOpqZKeoZ2gqrCqq6SqoKqbpp+ooKyWoZulsKSXm6qVoZ6bkqWXnqqYnn69g4dytHKEnYWtaHi5xLhxk6KjeqaZmXOqgnzLwMC7cYuiiIKffZWYiJ3AvYKWnZ2NncLBe4J8ko2aw8B9a6Wyb4yBb8p6f5t3koOOgXZ6gYB5cXp/h3F4hY2TeW13lGNmX3lkYGWCY150aGxkYlhMVklRWkhPRDJJRT9EQj4vPD8+QEE6OERDQkNFSElLTU5QU1ZZXl9fYF9eXl5eX19fXVxTTVBHVU5BPz89NjQ2ODI3NiomJSMpKiYuKyopMTAfOSojPklbTCojQlAvI0ZbM1BZL1VBQjsvOJajucO0sK/AqaiUo6+psK6tprK0r6mlpqaxq5+rmJqin5yaqqeinayipailpLSknaKTpq2ruLOnr6KRkZmdpZKRoKGYm5+dh6espKutwMCxoamvqZeRnp2hmaKjqqOToKGdna2uqayno6OnoaWlna2pkqSaqK2pm5ypnKyhlpallaGil5x/zpR4eqSBeJSWm1+uj16Op4GioHynlpt0q4KAr15jjap6p4eFoHSXk4izY4KrhqGNjbNqhK90fZeIuGGDrVmjzW2QdXvae3+ZcH6HknZ+ZXuIdnZrfIhvfoWRkn5tgo9gcmxwZ2BfeWRccWhqY2ZgUlRSV11LT0M1QUhFRDg+NjtAP0E7PThAPj8/QkRERklKTE5QUk9TXF5fX15dXV9gYF9fXVpXT1VKPT8+PDU1NzgxNjQoJyQhJywmJi8oJiszHTYwJDc7U0wrLC1KMCc7XDtMLSFQQEY0LjGtwsC/tbSwuJedkaSqqK2zq6WyrKyrpKumsKqgp5uZpZecoq+foJ+op6OloZ6wrJudlaeurbGqqKyglJKbn6WTj5+lmJ2no56upKuwqMDGs6ipsa6Wkp2boZefqaqflaCfnJ2tr6erqZynqKSiq5Oss5eloqqpnaOmpaGwoJKZppmgmpSUkZegcYWMl3SEqIdxsXydcax+oZ6BpY+ed6qCfa1/nHKtfquHhp92mJJ6fJd+qoiijJGMnX6re4mUj5+Ae61WnMR6j2+SwX2BlW11b4xtZXZlhm9hd25yb4qLkpCDbZKQZnB1dXBgZ21lX29paW5nY1dTXGFZUlNDOElJQEQ8PjxARkRDRUE9PDw8PkBAQUJFRkdFQENJU1dZWlxdXl5cXl9hX15eXVtaUkM+OzkxNDc4NDUyJiMfHCAxJyAxJyAnNB41LSY3PVdKLTwnPjEpM1ZARiEcRzpDMS4rsNTGxrK0oJ2jjqOjoqyvtq6osaaoqqetq6unoqOdmaKVoKWqn6GloKioop+dr6yYmpaop6+sqKapnpeUmqOikZShrZudpqOvrKOstKq5zbKtpq2slpWcnaKYnq6snZagmZ2fqbKpqqqbrKuko6ybr7GiqKuupZilqqmpsaKSlqOkmpSShaRqpHWJeql0erJwgqaKmYxxiKCah6RgYFKrhH+ug5t2roGmhoafepmWhntmgKOJpJmGgqR9qX+ClYeuXn2pVZ2ikoF6op+Ae8OvxYtyr7OzuXFiqa/CdGiNjJiPgW2alHBueXh4b2xmZWVxcGZ8aWJdV2BpWFhVTExRTENDQUI7Q0BAQkk8PTo5Ojw9Pj4/QT04NjtETFBSVFZYW15eXVxeYGFgX15dXF1bU0lCNjc5OTY2NCwmJCIgKCciKy0iJC4hMy0mQERXSCxHKzU2KjFQS0wjIEE5RDQsJ8PJ1tW/oZmrp6Gvop6wtLCvqa2ip6aqq6uppKagm6SenaanpqOcq5qirKGkn6+inZuTqqS1sK+gqZudlpSmo5CaoqigoKWcsKakqLGtt8iytaqrqZWRnZyimJ+ls52aoJScn6esrKSumq2qo6KqorOuoqqzsaGaqaiur7aikpaip5ibkXyqbJ6Eh3WreXywb4Kki4mflpaflIHSuLS4yYCBsl9flKmDo4iHoHqYlZp4qsl0maSVqKqRk5qMgJuKmcbGeGahgqVzgZ+Ogn2vXXC0YrB1S6OGbadHgpNkj5Ceknxxl5OAcXt1fntuW2ZqcnBlgWpfYVhkbVxeWUlOTEtFREFCPkE8Qj9KOzc5Nzk5Ojs7OzMuNjxBRklMTU9RU1daW1tbXV5fXl9fXlxcXFxcWE1CNzU2ODUvKSglJiUkJiksNEVOUFBNRktKVkYqTDAvPS01T1RRHRw7PEYyLCSnpMDGuK2ps62spaKcsrmsqqGmmqilqquqp6CmpZiqo5+vq52moKyanqmlnae1n6KXk6mqtrKsnKWcoJWQpayRmZyno6Cppq6hpKepsLXCsrOqraiTiZedpJqho66mmKGVmJylpqubsJ2uqKafrKS3rKCxua+dm66nsrOzpJSXp6KZn46CnU54moF/n3qDo32DpISGpp6cnpOEuHt8ebmCfszGwrZ4m6GRi59+mpaWinaemIqkmKSpf7CFnYWfhKx9mpRipWykcI+FkIF9loJyrGCjc3GAmmC8fVJVdY+SpJd7fpOSi3V7c4V/cVxtbnhyaoFvW2RfaG5iZF1LTFFUQUlIRkk6OUs+QjEwODg2Njg3Ny0qNT09P0JER0lMTlBUVlhZWltcX19eXV9fXFpaWllVU09IQDg4Mi4sKi4rKicmP1FUVldXV1lYWFdVT1VGPEUzOlBbVBwbNj9ILC0gi4eZqaukq7mqr6Cboayzs6WfoJWlrq2uqqedpqaao6ehs66iqaayoJmppJSjtqKilZeiqbW5o5uinaKTkKGxmZ6cp6Whoq+unaSoorayxLGtqa2pkYeQnKecoqScpZeemJmapqSpmq+irqWmmK+lvK2htretnZ21srixs6aXna+go52Fj9G1w7d5h46FkZOQgaZ4lKF3jKCRhKWBinGqhoS0bnJqmaOblYqefJiZhoePc6+CpZuijqaLk52KlZCabXCyXKVzk3qcbJl/e5l8balho3Fxf59ic7K4aHiQlKaYfYyNlI14fXmPgm1peGl5cm6AdV1lZG5tZmdgSltYWDxIR0BVM0BGPjwqKDYzLjAxMykmNDo7PD0+QENFSUtOUFJUVldXWV1fX15eX19dW1paWFVSUlFGOjIyMzAvKysoQFFSVFVUU1RWV1dYWFdVVVZUUU9RW1UlITJBSCQpJZNzjYqtv7+7urSelqekrbWhopmVo6inrqusmaain6agoLWnoqmnsKOUrKOOpK6jnZCamqq0tKSdpJyokZSXrqCgnaeknaectZqhqqS2rMOwqaupoYyEjpyhoKailZqanJibmaakppisqK6jpZutpr6slL2wrJ+isLO5q7Smmqixo6eXeqiQfXywd4qBpKWInG2yb6CHrXyhjoOnlZiArIiFroWflKmgoZeGn4CZlYB7kn6rgJ2alouqeJ2fkImTkoB5r12jgX2mp2SdgHyXc2qvXaVrcIWZXWBbjKBtlZKmmYKVjpiNe3uEmH9rbX9jfnRugHpgZ2VxbmhnZ0NaYVs+S1QzVThCQkM3JCQzKycnMywgLzY2NzQzNTlAQ0ZJS01OUVNTU1ZaXV9hYGFhYV1dW1pYU1BPTkk4MDUyLiosQVRWVlZUVFVVVVVUVFVUU1RWV1dYVlVVUUhGSUojKCi9kpqDqcbCtsGzn5qsoK64paOOm6Sjn7Cvqp+kn52tmZ65oKOroK+pmq6hkKuppJaJmpCusaymn6aarJeYj6yhoZ2loZqlna2YoKimtqnAr6WppJ+LgI2bmp+mnpKUmpqUmpqlpKSaqayspKWfqqi+pJbDrKqioauyuaqup6CzrqipmHavfpCLnIWHfLquiphlsIxlla19oY+DppWagayKhLCFppmkoaGRhaBbbGqBs2B/rXt7goGxbGdvmZiMiLBbfbRbpINryKJkn4B7vFh2tFqyfVKugHqsWIChbpiQqJuLl5GYmHx5j51+ZHR+YoR4dIB8YWpncW1mZWVPVWRcQlVfPkooPjk9NCEiLCUfMi4gKjEvMDQ1Nzk6PEFDRkhKTE5QUVJUV1peYGBgYWJeX1xbWFVQTkpGQzU1My4vQFVaWFdYV1hYV1dYV1ZXV1dXWFdXWFlaWlxcWFdXR0I70p+zsre9urTCs6ObrKaltqigi5qgn5yzs6mfo6CetZigtKiqrJ2vrZ6sm5WvqKKOiJuOr6yop6Kmma6SmY+omqGdpJ+ZpKOlmZ+jqrKpva+lqJ6djn2LmpWgoJmPkZqbkpqXqJ+hmqiuqKamo6Wpu56gxqakqKGrtLWsrqaeu62srJWAqZKjr46bgIekl5iQgYC4w7qDjpyThKeWnIKsioKviKabm6WqkX7VvcKqYqO/vX1+o4KD17q4tYWUk4Oevb6Da6OBb6uEbJx/erKwx4Nqq7C9rHh3or68dIGWjqeckJuRmJ16gpGbemN9e2SOZ3mCe2BsZWtqYlBhWlNqXEBVYUJOKj06NC8eHyQeJTIgHSQoMDQ5NjY3ODo+QUNGR0pLTU5OUVRXXWFcX19hXmBbXFlUUU1IQz88QT81PVNZWFhZWVpZWlpZWFdXWFlaWllZWFlbW11dXFpWWFRXWruVs7Sxv7mxvbKina6mpbKmnYyYpb+quLKoob+mp7KcnrGcuaiera+mppSUsKyXjIObka6loqyho5yqn5iLo5KmnqecmqGoopmeoaytqrmuqKObl5J7h5mRppuTjpGYmI+Yk6iaoJipqaGqp6GjqrueqMSioK6jqrO0qrCpoLqnrq6ac3WqpLeGZYmgcGetj4qPbW93pJCZn4F1rpiUcI+LcZWoo5uXrqRybW1tZYp4b26CmXGBempxaWeJlpWYcWlphIdncIZkXYhiam9ZXGd+d6ZfYXGOkW5lZICNk4+imJmZkZiffYeQlXZmh3hpjmt5f3lkbGNmbGJLZFhKbFo6UWVFUidLOisjHCAbIiwpGBsYLTIuNTo0NTc5PD9BQkRFSEtMTU9RU1ZdV1pcYGBhXV1bVFBMSEQ9OkFCN01YWlpZWVpZWFhZWFdXVldZXV5eXVxcXF1eXV5dW1tVV16ola2zqbm5srOqqaGunqOyqZiSvrLEyb62qp7ArKyjoaisoLqjpK6sraaNl66pkIyFlZatnqaroZ6jo5+Ri6SSp5momZajqqCWnKamp6+6rKyam5OSe4SXjaWYjZGRmJSNl5WolZ+YqaObsaaeoqu5n6/Ap6Sypaywsaqtq6e3o623loqgqKW2nYmWopiHqZqQlJ2SqbOZm6OroLGWoqCdn6KcoKWhlaunjZOSjIeTnJyVkJqTmJGOlYWBpJqXlY2Lk5KKj4aEfWeJfnSCdnSHi3GnbHqUkZOSgYGOkJCPnZWhlpqYooOIlY1yaZB3cYt4d3x6amxkY29kVWBYQGpbSGNhT1orRj0rJyE3NDAuHxwhJTIoKjY5OTQ2OTs+P0FCREVKS0tNUFBRWFVWWV5gYWNcXlVRSkVEPjk9QEFTWFtcWVdYWFhYWFlYWFpbW1xeX19gXl5eX19gYGBfWVlgpZapqqW1tq6uorCjrZ+gtbGQjqzHvcW7uauipp6bpp+xqKO2p52ptKeokZisoouHiY+bp5aspaCZp56ekpWjl6iaqJmUpqGjkJqnmaG1u6irmZqQjXuBlIuglIqVkZWQkJOXpZCfmqqgnLajnqert6euwa6jtqavr7CsqamzuKCuvJmRpaSmtqKSnaafjamfjZKfo6yvm6GjsKivl6OgnKOpnp6dnJarnZKZoZuUkJaqmY2ZmZaQlp6RiaCdlZSFkoyQjZSKgH1mi4V1hnV5iINznGqFkJSTkIl9jJaSkpeUopOemKKEiZmHe3KWc3qLf3J8f2pvZF5wamFbX1luY1BgZFBaOkdHRT4yPT04LysmKykmHSY0MDY2Njg6PT0/QUFDSUpHSktMTVNTU1VaYGBpYGVVUEpBQ0I6OUVNVlteXltaXFtbW1xdXV9fXV5fX2FhYmFhYWBiYmJkYlxbY5eVpKijsLOsrqOppq2gp7WqkJCdpbS8r62toqOaep2isaSlsamXm7imo5SZqpyOhoqJnKOPrp+ilaefoZKXmJuui6qWj6iZqIyYqY+fubalppibjYh5gpOLmpOKlZKUkI2Sl6KNnZ6onp+4o4CEr7Wir691pL2jsqB3eaCqsrqUdayknomAqn9kXGJ2oI6knoSXfW6Ts52jp62qo2Wdn5JzeZmWcICYqJdsf6KnimWcpZyRl5iWjJKckYadmpCVg5KHj46SiYR3ao6GdoZwe4aBgGFph4qUkotadZWRaGiPj3N7ppqZZXmZh4N4mGqEi4NveYBrcWVfdnBsa2hcZ2ViYnBTXD5OTk5TRz5AVEQ5MS8eHyY0OjMxNjY3ODw7PkBBQUZIQkdGSUtNVFRVWV1gaGZnV1FKPERHPDhVUltgYWJgXmBfYGFhX1xdX19gYWFiY2RhYmFhZWRjaGReXWablaajoa+xrKuppamuo6etpJKWq7awsqebq6asl3SMna+fqKqnk5e5n6CPnKSdkX+JiJuejauaopWnoZ2OlpGehHWuj4immqiRl6SJnLq0qKCZmIuJdXeTjZWTipSRkJSMkJOgjpugppmcspaAjJu1nbOMko+8p6B+p6J6oq62gY6Opp6Di4aQsamvjIqWo5p5gIushpydoqepp4eVhZh3pZt6h5uBl6eCgnucsXqKhqCXmZSYloKRl5aEmpljeYeQhI6PkYqDbXCOh3mAcICBhX+GdIaElZF4lmiSdKCadH2ZhKKeh5h/k4uDhJlrjo6FbHh7cXFnZHhvamxqXGZramV0XF9JVExRQEU1LlpUVTcpITA5PT42NDM1Njg7Oj0+PkBEST9JRUpLR1NYW1lbYWFpZllRSDlFSzw+YVZeYmRlZGBhYWBiYl9dYGFhYmJiY2ZnY2JhYGVkY2djYWFonJejn6atrquorKCosaanqaWZlK7IvrGil6eptZ6PhJ2snKeioI2Qvp6ajZ+aoJB8ho6ZmIisnKGWn6CRjZOJhoCRqI2Hop2jk5eehp+6sqeem5KOhXB1kImUkIqUj4+bi5CSn5KXoKSWnquHn7SJtJqtisqHqq6It4WMr4KwroOpjaWYjZ19qI9ye3ecj6eWaJWkebSMn56mqJKYwoF/q4iYoXKegJqlfZeFlbGAoX2hk6CQmJeBjpObipiRi3yFk4aNlJKJg21ykIV/eXGGgYR8hHWEgZaAj8Vmf6mHj6NrnoOjm4SagY6OhoqZcY6ThWh3dHx3aGh1cWhoa15kcG1nbVhnR11STTJFNDZOYWM3JjM8RUdEOjY0NjU4Ozg+PT0/Qk0/TklKTENQWl1cV2Feam1cUUU9TE1ASmRYXWNmaGdiYmJiY2NgX2JhYmNjY2VpaWNiYmJlY2FmY2JiaZSXop+wp6mopqugpLixqqunmpSgo6SrpJelqrejr4Chp5ylnp2JlL2Zk42hkp6PeYSWlpGIq5mbm5mhhY+Md5ucj5+QiJ6km5WZmIejua6lmpyMjH5ibY+Lk5CNkIyNmIyRkp+PlKChmaGnfqGnh62doJatj56cnZGFgKCNq66Go42pmYyaf6N1gJmUa4KsdU2reIeNnJGbqKeAqat9g6F7eqdpnn+Sa2eXhpe2iZ5+bmBkWYOXf4x7ZGiLcpl9eZVsXXuWbV9TcINcX2t5g2BZZYJ9g4CXcKeqa4OjbnKlcJ+FoGlmoG1bbop8Zlpgg39iV1Bvd2ZtdHJram9ea3BtbGlYaU9dWEY5QTRHRF5rNCxJQ1JNTj04NDg1OTs2QDs7PkJPPlFSTE1CSlxdX1deXmN2YE1EOk1PTVRiXFxmZmlpYmJkYmRkYmFiYGJkY2FjaWtkYmRkZ2RiZ2VhY2iXlp2guKCqpKaskaG1vKyuopmYoKKlrK6hna61oqiSoaCfppuZjZi0mZCLn4yVi3WBlJKNiqaWlZienn+ShYaspIebkIqYqZiZmpKIprGnopaaiImAaW6IiIuOjoqLjZKLkJKijJSeoJyhpH+TgY+joZSgd5yWj6eDoad/hqmshKV4inyEmn6icHOUiJZ7nox5bYebjJmQm6iaj4ede4Kic3amZp5+d6RfmHp9knOibpi3tLp0k4eCf7WoZIHGuHtwlbeLcYCapGJzrKtgfWmds35ufIaCjYKLmHF/o2xyo3SehICjYJ2Zs5ZxfJefs3RzW56yg2pib3R2cWlvWGtscnJmXWleYktFPUQ2UUFZcTM9U0dfSlI9PDM5NTo6NkQ7O0BKUD9VTU5RQEVfXltZWGBgfGRIQzhMV1VWY2FaZWZra2JiZWFkY2BhYmBkZF9gY2tuY2NkZGhkYmdmY2holJaVo7iZq5yToI2kt7WuraCbop2jo6aunJuxrayTmKGZoaSZmpSeq5uLiJJ4i4VxgJaNiY+hkJKUnZd9kImOqKCHmI6KkaOTnJuNi6mopZ6Ql4eFfmt7h359j42Di5CQiY+UoIOXnqCdoJ6LiXecmKKMn3Khi4eoiJulj5anqn6tjH56oJl6o5N4gXSWiI2cfZWfhpuOmZumhqJkoXyIlpCbjWyeaJqNbpqZe4CLp31yaHSrg56DdKpolZpdm4V2hJ1oqmqAuGZcqHCBnGCVjF6ndnWHiX6eaJp1hpOSl45/n26akG2nml2ofni7a36qW46EXbNnXG5yenhraVxxanh5Y2BmWGJBUUVPN1ZDUm81S1paX09aREAxNTE7OzZIPzpDSFU+WVJZXT5EYl5WYFFhY31qRUI5TltdWWVmWGZnbm1iYmVfYWFfX2BgZWNeYmRvcV9kZWVrZWNpaGdraZWciaq1m6eIY5Sbq7qysKydppycqZ+erpuesKisnZekmqGfmJaWoKOZhomNaoiAcnuXiIuWloSRlJiPeoqElqOdipSPhouekp2diZCpo6CajJKKgIBpgIZ4f5eMe4iOjoiPlpp/lKKfoKGTmHJon4qfj4xwkoyBqYeYnqKnn6d8r62joriXd6OzoqSAiJR5nXuqmn+ijp2bl4iXcaF8hY2vtX1rmpGheH6YtKOjq6iEmXybfZ2af3SqWl1ve5aLeJ5iTH56eoVjeZdCTJ5ZompyfI5tgIiEmXWbeIaJsbN/f5uTp3aCnW5zfZRvmXNrpF2VdkhlZGFzcX5+bmZgbGl2e2RlYlJeV11VV0BaRlFoRFNXXGJYXklEPUI4P0I6SUY4TEVYQVdRW1ZERmJcWmBLYG1+ckVDPFVfYlpmalZnaG1vYmZnXmFhXF1eYWhiX2VjdmxeZWdma2RmbGloa2mTnIGwrZmEVF6gprO5s7OpmqKMnKucnKmUoqukoaiPn56dmpmVmKGdloiHiXeGgW95lYWQm4t8kZOWiHJ/iJKhm3ORkIGJmZWgm4WOqZyalYuLinyDbISFcYGhjHiFjYiIk5iVfJOjoJ6jiK2GfbWEjp6ce6WWeqmBlZyPiqCcfKdod21+mXShc3F8noaZcJODrn2kg6aemYCjb16oZ3WiY2+lYZzTkHx7mXhyc2OihpB+o3Okj3ZrkLOMYIKYiXOqsqi8f3eDbX6+pqm0XpxufXGXbn9yonJdpGdzpmFopm2b1Jl9hZtwenqXa5t8eJdzbqmkZ2FleXCAhGtnZmRudXdnYGNUW2ZRUWJJV0pUYFdTW2VqXGVRRkNLTUpLQktFOE9AUU5YUllPU1FhZmVqUmN3eXdJRkVjXWVaaGlUaWhqb2NqZ2BjYFxdXV9oYmFoZXxkXmRnZGtkam1naGxol5t/sKtUXEt+qa+xtLCzo5uZhZmpoKCkjqWooJipipmYmJOZk5KgmI6HhntwfYRofY+DlJqBd5COj4lvf4aPkpJsl5N8iZGSpJaDjqqak5KLhYl6g3aHgG6Bn4Z4gJKGh5mil3uUo6San4mzoaK2i3qsp6SupXCogJqQhYCbkXukgKGZhphynoSjrq+Kl4x/jKSNlYOtoZR2tLW1yaFzlIqBn2Cdl6lteZWGoJt1oYd3oH6Sl4uBb0xmo5Jwm4dypHt6dGGDgWt+oGtxZF+ccX10l2l6abO1tMamc5h+ep1rnJurdYSbbXV4mGmaenWYclBFfbReanZreYdmamhidHVwblZeVFlpUFNoSVZNWVNWXWhrblZnV01LQUlNS0hKT0FRS1BlY2ltZXVzc395fG51iXt7VFBObF5oW2tpUmpoaWxnbGZjZV9cXVxeaWJkaWt7X11kaGNqZm9tZWlsZaGciK+mhGY/lKGzq6+vtqKikICYqqKipYylp52dpoKal5aNl5CPnJOOiIN5anmGZYOMf5egeXWOiIyBaYSFkoKMhZ2NeoyLlaaTg5epmIyRi4GJeoB9i3lwkKGGeYGVh4mWoJV/lKWnnJaWhGZueJxsomR8caV3m5hwZ6aAlot7pHqfloOXcp52gYqUlo+5bpCKomJ9maGViG1yaatqdaBtbqZfmmmLkGiWh5qVdaKAfZpgjIaNdW+IYmigZZ5+aZp1b2NmiIJtcqJaX1tioW1diYxve35zcmSlbXeiZGenaJlzjJlvom9TiZBvoF9lqFSLXlSYbm1za3KCbXBpa3lza29SWVdXZ1pUbUlZT11IWGlpc2pZa1ZRUkVWXExYU2FVaWtfd3R6fXB9fHKDe39zdo2AhHZeUXJiZ2JwZ1BqaGhrbG5oZGdfXV5dYGtiaml2dV1cY2ljampzbGZrbWOcpJimemV0bYunrqSpsLGmn4uAmKudn6aMoqGboqKAlpiTjZqPi5iQjop7hnGAiGiLi3yYm3N0iX2Qe2SCh5WKiZaZgnyIh5aokYGirJGGkIqCin6AgI5zaY+lhH2GlI2ImKCOiJOqpp2JpniVm36liJaMspiekIKvl5+ld5SHeal0pI6Emm6kooyShIyDu259pa+DhoaGk5Wcn3ylenGolaCWZp5+b6tjloqVkniobKmigYl2iIN3qpGmh2qRsGt2s4ypa4qGbW2fnpKVYH6ri6p2fn+MpZ52n32EpJWdoGqbiHesZ5+tjLZ0d76NpJNZg6aNq2F1cnRwfHVxY2p+bmhsU1dbVmFiXWtNXVJdSV5ubnZgW3FZW2BaZ3Rlbm9xYnF0YHd6fnlyeYNzhH+Be3uMgYKAdmJ4ZGNtc2RSa2dob2xyamZpYV9eXGJrYm1sem9cXGJpYmxqd21nbG5ilaWqnYGAnqSWqaqdqKeupJmJg5irmp6kiZulnamdhYyajoackYWSjYyNdIZ6iIRvjYR+mJN0dIZykoNtf4uSh4aTj317goWYpo5/paaOgY6JhZV2goeSb2yLqYCDi5SOiZyfiYyUqqOgj4B1lJaIfoF5lK6jf4GbcY+FeI+Kg357cqaMcX19epeWm4SOeHt+foeUlZOKdpCYn6CDen2Ja4yFW3l4cnpwaG5+kolxf3WBj5STcYaEgmWMf16Bf4t3dXOUdW95bm6HbYSFXnZoeI5lgICFjambfXR8lmqJiHCBdn2Gdm1tZ4xzeXuYeIVba1h5j2lud3JxcHh4cF1shm5pZ1ZbYFdcZWtjVWJVX1FfcHh4bGt2ZWpra3Z9cXJ0c2FvdWJ0e4F4dXmDdYCBf4F5i4WDfXttf2xkeG5eV25naHVreGppamVcYFpjaWZscXVuWltia2RsbHluaGxvYY2UuKimi6GimqakmaWcq6OhhISYrJKeoYmappqpmIOBm4p+lpOHjoqJjXKDfI99fo+Fe5eOc3KDcJWFe32Si4aGkIV4fYCGmaSOfKehi4aQkIWWg4aOmHdyhamFjpGdkIienoiMm6ifoKqDiY2Umn5+iZatqI+Spo93b5yQgnmRb32ohXB9lXFrcH2Bn4x/k46MaG1dg4uMnJuejnOVi4hxdGuBdnSAWHJuhpGBfX6Mal1qZHuFhImAYGl4ept7gouCdYGFgmd3ioZrYXBxgXZecoqBiI+mlYVljI+DbneLhHGGj3pwZmdle4N6lltcamdudlt7eXd1bnNzgmZcbYpra2JaWl9aWWxxXF9hWl5dZnR+enRvdGNra2p7fXN7eHRkbXVobXx+dnp8e3p6gIB+b4aKhHt9c355c39pVFxxaWx1b3Vna2hkXWFYa2hsa3FybVdbZW5sZ3N5b2hqbWCLi6qwoZCjoZqenpiemaijon6Dma2Nn5WInKKRpZV/e5iEfJKZiYiGh4pzfYGLdoWLgYSWinFvgHKYhoR+k4SDhoqBeoCDi5ugkIKnoYd4jpiJlYuLnJeFg3qsgpGXmZSKnp2HiKGrn6Kio4uIk5uco5mWqqGnpqCSm4eVjXt3jY6Ep35+kpGSk5yyppuVnpCNspOXhKWMjJWbn4mQm4KIkYprfI13eGWChpCLfImdhIeLkIiIgISEkHd8eXSZoYiGiZ6KhJR+fYqAgHVvc4SDf3eGhoqPppCDhY2Hg42QjH2IjIqRg3dsgoR9eplqcmhhdIpwfXp3d292dIFdXm+GaG5fXlpdXVNoclVjXFxhbGh1fHxzb3Bka2ppf3xueYBxanBwbGeBe3KCgHh/fX+Ee22CjIZ8enh8fXqDeU5kdmpybXB6ZWtlY2JgW3RmcGZycW1VXWx0bWl5enFnaWtkjIeduZ6XoqGYlZiZlJmkoZ58gJqrjp6NhqCci56WfXmUg3uOmYmGhISGbniAgHKBh36JlIRta356l4eEg5B/gIaEhn2HhI6bnZKHq5+EcouQhpORi52RfY17qoSNkpiWj5yWh4abpp+imp2Fg5GamZiQmqafpZ2dkJaAkIl2e4eOhKV7fI6QkYaYqqGdk52PjaqOkYCdjImTmp6Cjpd+ho6Db3iFcnRgf4OPhnWLmIGDj4KGhX6Fg5RteXV0kqGKi4WahISMc3+JfHxycnuHg3p4io6DkqaPhYOOgYOKiYp3homKjH1vbH6BfG5obG1nX3p/aH17dnR2dXt3XF9wfW50YGNbXV5RZ25UZFpeYmtpdnp+cWxsZGtqZ4CAbHOBbGx0b3lvhXluh4B2goB+hXZxgo2Ifnt7fH97gopgaXxqdWhpgmVqY2BpXGN1aG9idG1sVWNxeWVwenpzZWptbIuJnreaoaSfkpGWmIuan5+ee3iep5GcioellIuYmXl6jIV8iZGDjIKCgm57f3hzgYV9i5F9a2h9gpiJgYiOfH2GhId9j4GQm5uRiaicgHCMi4yTh6GiioWMfKiRiJCSl5OWk3iMo6CgnZaZf4CQmpiSjJqjoaOZl5Gbfo2FeICDjoagf36MjI98mKSgoZOZkI+mjY+CmpGJk5ebfpOSfoeOgXR0gnB2YH6AjYZxipV8iIxxjH+ChYaOZ3dxeIuYkY9+l32HinKBhnt8cXh6ioR6eZCMgpWlk4uFkHuFhoeFdoKEiYh7ZnJ8f3l7cWxqZl9+c2h8dXZzfHOAal5gc3Zwd2RjWV9eUmtpVGRZX2FoanZ5gXFma2RsaGWAgWttfmhvcWt9eIZ6a4yBc4GBfoF0doKNhn58en+BfX+PanKDbnNpYodobGJfcVZ0b21uYHhobVdqdHZjdXp7cmJqb3mJjZ6ykaSlnY6QmI+GnaCbnXx2paGOmICMooqImpZ4e4aHfoOJf4iCgX9xf3t0doKFfoqReGdjfYaXioKKjHh9gI2DeZaBlZiWjZagm35wjIKRlIamm4eNiYOmlYWTi5aXk5J3kZ2hoZeTlnl+jpiXjpaanaSdmJKUm3mPhYJ3hJaNnX6BiY2McpejnqGTmY6PooyLg5aYg5KVmX+YjHyIjYB2cX1uemSAfIqFcIaTf5CCbIeCgYCJhGV1b3uGkpeMfJN3ioh7gIV8e3F+d4iFeYSPiYqXopWBg4t3iISDgnd8goqGd2B5eH10f3hnbGVhf2lqd3N0dX1xfGJjYXNudHJtYVphXltsZVJjWGBhaWt2eYZxY2pjbWVofYNsaHVobG9pgHyBeW2QhnGAhIN/dHyDjIGAfnqCg358kG12iXR0bWWKbGpiY3VWhGlxbmB4Z2xianZwZnl8eXFfcWyGhY+crpemqJ6NjZeHhp+Tl5l9eKqcipl6l52LjJiQeXuAi318g3yAgoF4dHl6dH2AhH+Ji4BkXn2LlYd/hYd0fX6Kf32YhJeUl4ykoph/c4d7lJKKp4+MjoqSoJGDkZCUl5GLgY+Yn5qSkJBzf42SlImdnZ6mmJiNlZZzjY6Ka4WXj5l6h4iQiW+XnZqjk5WKjZ6MhoKSnH+SkpWHmYh8iomBeXF5a3VsfH6Lfm2FkoKUeHCCg31+in9kcml7gJaXhH6Nc4+Ig3iGfXZ3f3yFgHyCjISMlKSPeISCdImHfYB0doGJhG9he3V6cX1vYm9jZHtibm92c3h3c3RhdWBvbHVub1xcX15ea15QXVhjYWhtdHuIa19qZmpjaHeIbmZsaGpsaIF8endukIhzgYSEfXSBhol6g316gYR9fY5yeot4eG5sh2poX2lyYodocW9ldmdubGF5aWt9e3hwYXdti4CZmaqgo6ieioqRhoqei5WYfneumY2XfZ+TkZaUiHd9e4p8e4B2eH+AcHR0e2+FfYGAin98YVt+j5KGgISEc3qAh3qPkoiSkZyTpZyVgn2CfY6LkqSJjoqNl5qNhZGYk5aPioiMkpyTj4uMboOPj5GInpmioZeWiZaQboiZg2aFmI6TeoiEkIpwlZqUopKSiYuZjIJ/kJ59ko+SjJmOe4qEh3NydWtwbnV7i3RuhpCOknF1gHuBgYh8ZHBseH2Zk32EiHSQioBzh3luf32AhXuFi4iEjJWojHqHfH6LhXh+cXCBhoRjaHl0dXB8Yl9wYWt0XnBqe3l4bHNwZXhdbmxzbXNYWl9fYmtaUFdYZWNncXF+h2ZdaWhnYmdxjW5kaWdkaWiAend1b46FdIGCg3t1goiFd4V8eIOFeoCJd3+Le3pyeINqa19waHSAanJvbXFnb2xlfGNugHp3cWx3d4p+opehqKCmm4eMioGQnYeTnXWBqpWTjoehjZWTkIB0e3aFeHl/cnN7hWtycHptinaAgYducVtYfpGNiICAgHZ1gIB/oIaRi5KdmKGVmHiKgIGNiZyeio+GkpeWhYmVmY+Wi4uNjYydio2Pg22Ji5CQip2WoZyYlIWYh2qEo4JmhZ2KkH6Lg4uBd5OYkZ6RkImJlY1/fo+YfJGNj46akXyKgIJudXBsbW9we4Vpc4OOmIpxd4B1goiCeGZybnWBmY57iIR6k5F5dodzb4h7hYt6ioWCiI6bo4d7g3WBi394eG9sgYSCXnJ0cnBweFpecGBwal5van16cG1tamx2YHBvanFtWlhhYWJuWFFTWmZnY3VvhIJiXWttZGJma5JuYGZmX2drgXVxc3CLgHV/g4B4dYCLgHiFf3eHhneDhXyHjH97dop/anFjfGOGfG5xbHRqaG9sdnhfcX95fHR1dICCfqSVmq2eppaFjYR/l5SDkKB1i6CUk4aLm4yVjot6cnh0gnByhXNxdYhrb211bYh2g36AbW5VUYGrlYeCeIB3coJ6gqCCkoKTk5ick5p4knuDjZOkmpOOiZWYkoSGl5mMlIuJj4+InoSPinxyi4WJjoicmp+alpR/k35ohZyHZ4Wgh5KEkYKJcYORl4+bjo+MjI+NeHuSkHqOi4yRlox8iHyAa3ZqbmtsbHt+YXp+jpaCd3qAeIOMfHlnc2xzh5WKfoiGe5OPcXmDb3aMeomLeoh9gYuQnp2EfHt3got9d3FqbIKDemB4cG5scnRWXm9icmBfbG55cGhvZmZzdGhwa2F3ZV1WZmBgclNRTlxmZV55cIh8X1xocmJiZWaSal9oZFtncH5wa3F0in12fIWAdHV+jHl7hoF4iINzhoV+jY2De3mVeGZyaoNgiH1vb2t6YGpudH91X3R9eIZ4dHOFfHigj5mxnKWOgop/g5qHgIyef4uak46FiJeOjo+EdnR2c4Bwb4VzcHGDb2ppdm6Dbn19bXVzUk2C38iS1pN8cHWDdoOfg5N3lJGZnJCZe5RzhZCfoZOTkIqSm5OGfpaWiI2NiJGMiJx+joB3eox+iIyKnJydm5WTeo11Z4iRhmyIooSRiJeChWOMkZmOlYqXi42Ki3F6lIh7joiKk5GJeYV8fmx7ZXJva2t5eVyAeZCOgHt9fn+Gjnp6aHJqc4qPiYGFhHyUimt9fm5/i36Lh3yEeYGPlZqZinx2eIOQeHNtZ3GAhG1qdG9oanRuU15vZHBZX2txd2ZramJmeHJvcGNfd2BgVmtfXnZQTkthZ2NdenCJdFxcZXZgYWVljmNhZmJYaXNzbWpxdox9dHmGgnV2fotzgIZ/eol+comHgZGLiHx+mHZlc259ZYh+b3BrgFpsbnl5c2F2enuNdnJ3ind5noubr5ugkIKFd4iVfn2KnYeFoJGPhYyYhJKOh4F0d3B5cW6Eb21ufnJkZXhwfW16fWpoa2OkmsHcru+hc2x2hHaEooWSb5aRlaCVnIGScoWLo5eJjpWKkJ2Wg4CVkIWJj4CRiomWfod6dX+JeIaEjZybmJmOj3aKdm6FiIp9iqOEkYmchIVei5OXio6JjoqKhIlte5aBfYiFiZGPhnaFfX1rfWR4dWlueHNYiHqSh4V5foCAhYx+eGVyaX+JjomCgn+LloVrgXVth5CBj4R+gnp/kJWTmI91c3eIjXVzcWd1eoNidG1wYml2Z1JhcWdsVV9udHlhcmRfaH1wcm5aY3JhYlduWVx4Tk1MZGdiXndziW1cXGR5XmBkZYVgY2NeWWpya25rcneMfnR3hIF4d3uJcYOEfX6Ie3SLiYeWhox+fpdzaHVxeW2Lem50cIBXcXp2eXFld3mGjGh2gIlyf5yHmaeco5KFfXCMlHh5i52EhaGNjnyWjX+aiIR7cndwc2pvgWtpbXx1XmF4d3txdXtnYGR869q1ycPciHNsdIF2ipqJjmqYkI+dlpOBiXGFiaCNhIuVioyYk3yNk4iDiY97kIuFj4F/dniDhHKHgpObl5SXhox1h39whIGJhpihgpOMnoKJYYOUj4aJhomNh4GHan2UgH2DhImOjYJxhn5/cXdodnJpc3dsWox8koOFfX+DgISKgnVhc2uIgY+KgX5+kZB9bYFreIWOhZGDfIF8f5GSkJaIbnF6jIZ1bHFscnmBYHRpbl1rdmBSZXFpZlNgcHZ0YG9gXWiCcXNpV2doYmlYbVZbdUxLTGZnX2Jyc4VpW1xleV5eZGd7YGRfXVlrbmZvaXN4in5zc4F+enZ6iHOFg3yAh3Z3ioaOmYGMgnuTdWx3dXl4k3RueHt8WHqGcYBvZ3h3koJjdoaFcYqWhZmhmqKKh3Nvk4tyd46cfYqaiYl8n3+DmX+BeHFzbm9kcn5oZmx3eFtfeXt7cXGAamFnYX/Vto6QpnhucXd8cZKRjYdqmY6JnJKMhntph4uZhoGSkYaHmI18jY2BgYmNe4+NfYiEenR6gnpwhoCWmo6TlIGIdYOFdYN/ipKcnoaVj59+iGF/k4eEiISJjYCAg2d9kYB+f4KMjpB+bYJ8gnRrbXd0c3Z1a2ONgY9/hX58hH+EiH5vX3JwhHuOjIF8fpCIeXCDZnmCioaLgnuEfX+Tjo+Sg25veYx+dW1va2x7fmNoa2pZbnZaU2lyaWJRYnJ3bGJlXlpqg21zYltnX2RsX25UW3BOSE9nZVxnbnGAbFtbY3NgXGNsd2RlXV1aa2xibWp0d4Z/cXB/fH10eIZ4hYJ9f4d1eYmBkpZ8iIZ2iYFwd3l7hJNvbXyBd16Df3SBbWl6dJRzZ3OHfHKSkYOan5ughoh2dpV+bXaUl36IkYSKjpp8jJp2fXZxb2xqYXV8ZmJpdXpaX3d8em1xf2VkaGdXnY9ecXOWvMSEdnGUiZB+c5iMhp2TjIh0a4iPlYB7lIuBhJuMfIqGfXyJjH+UiHWJhXV2fYFxdYaBnpWGlY+CgnJ/h3SDe4mXnJeGk42cgIhlfZKCf4WDiYlygX1nfYt7eX9/h4uPfWmAfYN2Zm94eHN2c2xqjYWKgYp/eYKAhIN/al5xd3p9jImFe4CPf35ygGh4goaKhYN4g3yAl4yPjH1ubHqJfXd0b2lofXdlXXFjWHBzU1RucmliTmd0eGZgXVxYboBvc1llYl1qbWBwT1lsUkRUaGFaa25te29aW15sY1pjb3ZkZ1xdYGtqY2xpc3aBg3Fufnt/dHWDeoOCfIGFdn6JgZaReIOKdIGIcnl5f46Qb298gXFpgXl6fm1tfHaVa2p4hHRrlI2Fn5igmoWIbn2Mdmp4mI9/goqClZiKeY+Wb3pzcGxqZGB0emhfZXJ7WmFyfHlmcHphZWWOsbJ3SmJapNnQl3J7kYuReH6Vi4WZkY2GcGyGkpF6eZKGgYSZinyHf3h4iYqEloBviodxdH16aXmFg6WRhJONg39vfoJ2gniFmpiTipOPlIWHb3qSg32Dg4mDb4F4aICFeHJ/f4OKh3xlfX6DdWNwcoBoeHFvdZiNhYKKe3Z4gIR5gWpbcHxygIeFiH2FiHqIcoBtcIOGjoODcoN4gJiMjYR3bW5+hH93emVoan1yYFl3WllybU5YcnNmYEptdnRhXVtbWXR9cm9XZ11manBfb05XaVI/WWdfW3BqZ3lxXFpZa2VZY3B5X2hdXmVsaGZsaXF3f4dvbX99gHVwgXp/gX+Cf3aBhYmXinGCjXF7hnx6eoSUjHVqen9rb350f31vcnx7lHBvgH94ZpKKgqGYnJKChWeHhHBoepeJfn+FgpmKgXyNjGl4cmtsZl9hb3ltX2JveVxkbIN6YXF2X2Vl1eu+izI6PouOgHJ5hYiOjXaEl41/k46Nf25shY2MdX2Pf4WBlYh8g3hudoeEgpZ3boiEbHV7dGZ5goOnjIOPjIN9bn90doJ5hZuPi4+RkoyLhn57kod4gISNg2yAcml/fnhtfHuBioN4YXmEgXFkcWh+bXRxdIGbi4B/hX5zdX2Ac4BvW2t9dHiJgop7hn98iHh5cGuIgo+DiXKBeH+Wiop+dG1qdoCAdXVcaWl4cVlXfVNacWVMW3JyZVtKcHdvXVtaWV10fnRoWWJbZ2VuYmlNV2ZRPV5mXV12Zl90cFtZVW9kWmRweVpoXmBnbWdpbGlweH2ObGqChH95boB7fYB/gnp1goGMk4VwgItud36Ae3uIk4l/aHt+a3R7coZ7c3d9f4x6eIR+fGuMjIObnZaMgYBsjX5raX+PjXt+f4OUgn99iohrdXFnaGNbYmdzb19hbHNhaHCJemFzdF5jZJugkG5cNVmvtXVqgIl9koZ2hpeGdI+MindwbIWDh3R5iXiJfJOIen5yZ3aIfn2Xb3CGfWh2eW1leYiEpYeBh42Kfm19dn+AfIuYhoGTkJeIi4SJfI+IcXt9hXxpfm1qgHt6anp2goeAcmB3gX5xZHJndYJtdXuFlZGBfIJ/b3d5fHR+bVdtfnZzi4GGd4d1gYl5eHJtiICPgIRyfn19koiIem5taW2CgXVuXWhmdHJSW3tOXHFcT1xyb2RWS3N4aldZWVphcYB0YF1dYGZkaGhmTlpoTkFhZFtgdmFcdW1YWFN0YVpkbnJXal5iaGtnbWxpcHd8kmxphIp9fXB+fnuBf4J6d4CAiYuEcnuHb3F3g397io2Pg2p+e254eXaKd314gIKHf4N/fnpthYyImKONhIN7dox5a22EiZJ5fXuCkYCAfYqDcHFwY2ZeWWdfcHBgYGdwZmpvinVhdG9bYWRpdnt/vpymo8i4coWDc5R9eIeUg3SQjIhycnCEe4NzdYZ0iHeUiHl5cWN3hnmAkmhyhHVmd3ZjanyDiJ6CgH+Ojn1xfnOEeH+Rj4J3lY2Uj4eCiHqJiWt4eX51aHppa395c2l6doCDfWhgd4d+ampzaHuAaXaBjJCUfnp+fnF7dnt0fWFVdXxycomDgnyCcIaJd3hwb4KCi359eH18dY2Fg3ZocWhsiIJycF1oY3RuS2V2TF5vVVRZc21iUU90eGFSV1hcYXCCc1tgXGhlZGNqZFBbcUlEZGFcZHFeXHdoVVdWd15cZW5oVmxeYWpnZW9vaHB3e5NuaYiLeX5ye355goGCfHZ9g4iGg3B2g3Jtd4KDfomLlH9wgHx4eXqBi3SDeH+BgYKEeYB2b36Ji5ueiH2GeneHfGh0ho2Ren9/fImGhHaPgGdvbV9kXFhlWW1zYWBhcWxsaIluYHNpWV5kbYB3qdqqx4aHsnKKeHCNdXuHj4B6k4qAdXR1fneAb3F+bYV0lIZ4dGxgeoF5iI5lcYNvZ3VuW219gZCTgIF5kpJ9d3pthnV/kIuDc5WKkI6HhYV7f4VtdXZ/bmh3ZW18dm1qdnZ/f3xhYniGemh1dWN+emd0ho6MlXt0gHVxgHp8bH9ZVXJ9b3SDhn5/eGuIhnN4anR/g4N9enx4e3KKgHxzZ3NlbYuEbXRbal92ZUhub0xbYldXVnhtYlBTdHZYUFVYXmBxhG9cYGNtZGNebmJUXXJHQ2ZfXWZoXlp7YlJWXHVbW2drYVZrX2FuZmZscWhwdniOdGuOjXV/dnh9d4GDgXt0fYOIiINvcX90cXV+hoKJjYp7d394hHx9hYd4h3x9gX6EgHt+c3Z5jI6fjIl6iXd1g3lefoaajXmHg3SGhoR3iXtibmxbYltbYVZqdGNgW2hvcGeHcmFxZlddY2t/fMrOh7mia21ui21yhXJ9hYp/e5KFenl0eXV0emptdWOEdpKCd3BnXnyBeYuJZXGBampxY1hse4aciYOCc5eUd357bYdwgImKhnCWjpCIhYuDenl+cXFvfWdocmJteHJqbHF3fXx6XWV5gHdpdXhmgnZndIeMjZR8codpbn6AeW18XVdwfW1zf4p7gW5uiX9wdmd2foB+gXV7cXp0hnt5cWVyYW6MgmxzWGtfeFxJb2xNV1ZeVFV7a2FPVHVyUVFUVl5idIVoXGBramZiWW5hWGJwR0FoXWBmXl1We15PVmRwWltqaF1XZ2BfcmZqaHJncHN3hnhulYp0f3p3fnmDh4B1c3+GhY6CcHB7d3d1eYeFh4yGenx/dYt+fYaEhId/fn59h398eHV5d5GTn36MfYtudYB5ZIOIl4Z0kopvhYWCeoN0Y25qWV9bXV1UZ3NlYFlkcnJngXNia2RXW2Bpf3i+rnuft25ic4dodHxyeoOGe32NgHh4c3Zve3Zlam5hh3WOgXNqYl5+eHmKg2ZxfWhqa1pWb3iKo4GFf3GZk3GAeHSBbX+BkIZylIeMh4OIhX15dHJvaHlham1gbXZrZ2trend6d1tnfXx4ZXN9boR0ZXWGjYaVfnCLZmt6g3RsdGJbbntrdHyLeoFmdIZ9bXBndH53fX5xe2t6e4F5d3BlbGFtiX5tblZrYHdWS2tsT1JPaE5ZfGdiTlV1a01QVFVeZ3aDZl1hcGhnYFdpXVxraEpFalpiZFdZVXlaTldualldbGVcWWVjXnRmbGRyZ3JwdIB4cJmFdn9+eH98hYd9dXOCh4CVgm5zeHp6c3OFh4iIhHmBfXaPf3yEiY6DgYN7fouDe3d8d3eZnZd6ioOHaXZ+fGyEhZSAco+CcYaCfoJ/b2ZsZ1ddW1xbU2RwZV9YY3J1aXZwZWViV1xcaIBwb3KAc4llZXl/anR2c3ODhXiBhHp3dHVuanpwYmdrZ4Z0jYRuZl5ffG97iX5obHdmaWRVV3Jwjad8hHx2lpBzfHJ7eW16epCEdpd7h4aChoN9dXBybWd1XW1oX2x1ZGdmaXpve3JZZ4F2dWdwgHiCdWF3hYt8lIBui2pteoBwZXJlYGx5ZnJ2iXt9YXWDdmlrcXR6cHl4cnxmfn5+eHZuY2VhbYZ8bWtWamJxVExpa1BMTnBHXntmYU1VdGRKTlNXYWp3fmVdZ3NpZV9WY1dicF1LS2tYY2JVVFVzV0xZdmRaX2tgXFpjZV93Z21icGlzb3F+dXSZgXd/gHh/foWEen12goN+mIVucnR7enRxhYWPgoB6i3V1kYB9gZSOgIWEfH6Mhnp+gHZ7o6WKeYiGhWx1fHt1hIKMem+Fc3qFfYKDdW5qaGVWXVtbWlNjbmVbWGF0e2ppbWhfYldfWmmAaWtvgGdsYWh6eWt0dHRvhYF6f312dW56aGp5al9lbmiBd5CEZ2VYYndpfod6b2lvZmZdVVhvaI+ndoF6fJGOeHVvfm5ydHiOfneUdIWCf4WIdmpydmdob1xtZV5tc19nYWp4aHttW22Dc3Npb4B+eXdgdoSEeI+Ec4hxcHl/cWNxaFtudmRwc4h7eGFygHBnaXhzcWt3dnR2Y4N7fnd1cGNjY218fWtrVWliZ1RLbGhQR1JsRWF3ZmJNVHJdSkxUWWRrd3plX21waWRcVl9Vbm5XSlNoWGZeWE1VbFRLXHpfW19rXV1bYmVgemhsYW9vdW5vd3V6l313f4F5gH+Hhnp5eoN9gZOEcXR0fnl2dIWIkH2AfZBsc5WBe4KfhX+HfYB+hoKAint2hKyef3qIh4RscoJ5doGAgnRuhm98gHSKgGpwbWRkWF9aWlpVYmpnW1pfdYJpXm5sXGFWXFxrgWVydH1pal1sd3ZndHdyboZ7fn15dnNsemdpeGZdZHJneneSgWNjVGVvZ4KEd3ZmaGlgV1ZZaGSQp25+eICLjnpwcHxmeG55i3p2jnGDfX5/hm5kdnNkaGhdbGJdb29bZ15sdGV6aV10gG9ya3F7fnV1YXSFinqHh4B/d3J1fnRhb2xZcHJicXGEe3VkcoBsYGx6b2poend0cWWEdHl6dXFkYWRtc35qbFRpXl5VTHNjUUdXYkdjdmZhS1RwWEpLV1hna3Z6ZGVtcGZjWlhdWHZmVEpcY1hoWFlJV2VRSGJ5Wl1gbFteXGJkXoBpal9vdHhub252g5d5coGAfX+Ii4Z+dXaGeIaMfXN1dYF5enqCjI59foSJanSWgXuKnX1+hXmAen58hohzcY+tjHt7hpB+ZnGIenR9fXZyb4Zse35tj3picG9hZV5lVllZV2Nma2BdXXOGaVlxblteV1pcbHtjcXd2bWNbbXN0aHV2cW2FeX+AeXdub3RlaHRlW2d0ZnZ2kXpfXVJlZmqCgXR9YWNpXFRYXmJjkKVoeXSDhpB4bG55Z3dse4R6dIhygHh7eH9oZXZtYGZhX2pgXXRrWWVdb25iemZbeHxrbm5weHl0dGRyg5J/h4KIenZvcXxyYXdjWm5vYXBxgXxzZXGAZF5tdmljZnh6c21ugXRzfHNxYV5lbW99ZWlUaFlaVU55YFJLWllIYnRkYUlUbVNJS1pXaWxye2NsbHNjYVlaW2F2XFNLY11YaVNXSFlgTkdqdlhfYW1bW19iY12FaWhhbnh5bG9qdoGQeG2CfoCBkoiEgXZ1iXOLhnNxdnaBd3x9foyQgH6TfnB4loN9mZJ5gIB4eX5/c4iDc3CZoXt7gImVeWR1iHlzeXZrc3B/a3l8cJFyXnBvYGdibFRaWVdoY21mXFxyiWZTcm5bWVhYYGx2ZGp1ampfW210cW10dHRrhnx/gHx3b25sZGlxY1trcmR0do9zXFdUZGBxf35xglxhY11TWmBcY5OfZXJxhIOQdGtqeWxub3p6enGAd39yeXp6ZGZ1Z15iW2FoXF53aFdiXXBoYXhhW3t2amlyb3d0c3RpcIGUg4Z+hHZyanB7bWV2V1tqbWJwcoB6c2Vvfltgb3FiXmlvfGxrc31ycHhrcGBbZWtte2FnVGdVWFJRd1xTUFlSSGNzYmBHVmtRSE9aVWtra3xlbW9xYVtaWFlscFdST2ZXV2lTVEZaXE9IcnVZYGRtY1hhYGFejGpjZG15eGtvaXV5hntrg32AhZl8goR5fYdtj4Zxb3d6fHSCgn2Lj4OClnR4gpSFgZ+JdYF/gXR/gnCHgnVvopd0e4aLh3tmd4tvbnxwZnhxemxzdnONa150bmFnZWtSXVtWaGJsbFtccYxkTm9uXVZYVWdpdGhjdGVlXVpudW5wdXV6bId9gHyId5BzY2VrbmFcbm1jc3iHa1pUVmJjd3x8cIVcY19jVFtgWWKWlWNucIOEinNqZ3luZXJ1cnpreXR0bnp+dV9mc2NbXldiZFlhdWZVX2BtY2FxXV1+b2hpc3FzcHV1a2yEk4GIe4VxcmZue29xblNaZWplcXOAdnNibHZVYnFrW15uZHxla3V8cnJyam1fWWNpanheZlRlVVZQVW5YUldUT0hlcl9hRlhqTkhXVFZtaGR8aWt3amFXXFVbdGRTUlZoUVlmVFNIWltQTnh3W2BmbGlaYmBeXo9uYmZreXVubml2dn9+bYOAfoaXe3+HgYl+a5KIcmd0gHt1gIN+iY9/i5NyfYqRhYefhnt/hoxzgIZzfYJ1bqSMc4GNi3d4bnuNYGR8cWd6c3lsbXF2g2dkfGxjZmdoU19fVWdgbG9cXm6OaE1pbWBVVlNvZnNsZXhkZV1ZcXVtcnt4c22Je4B3nHt6bGFlbG1eYG5qZXB5fmdaVlhga3d7em+DXmJeZ1ZZYFdjnIhia3GBhnx3a2p2bFt2cGt5aXVybW57gHJYam5eWV1WYmRYZXFjVF5iaWJibVpgfmtma3N1bm13dmtohYt+iHqHbXFmb3tscWxiWF9oaG9zgHRzXmltU2VwZFVibmF5Ym91e3Vqb2xqX1hgZmh1XWVWYlZTT1lmU09dT09IZW9dY0daaU1JX0tYbWRfeGhufWRgVV5UXXRbVFJfZk5dYlRTSlxaUVp2dl1fZm1oWGJhW16OcWNnandxc21ndnN5g3OBg3uIjX58ioeOeW6QinRsc4Fzf3+IhYeShJWPen2Mj4iRm4SAfIyEcn+Bc3R3cW6Tk5OTk5OTk5OTkpKSkpKSkpKSkpKSk5OTkpKSkpKSkpKSkpKSkZGRkJCPj4+Pj4+Ojo6Pj46OjY2Njo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo2NjYyMjI2NjY2Njo6Ojo6OjY6OjY2Ojo6Oj4+Pjo2NjY2Oj4+Pj4+PjoKAfnp6fX5+fX1/fn59fn5+fn5+fn+Af4CAgIGAgIB/gIGBgYOHjI6Ojo6NjY2NjY2NjY2NjZKSkpOTkpKSkpKSkpKSkpGRkZGSkpKSkpKSkpKSkpKSkpKSkpGRkZCQkI+Pjo6Ojo6NjY6Ojo2NjY2Njo6Njo6OjY2NjY2Njo6Ojo6Ojo6NjYyMjY2MjIyNjY2Njo6Ojo6NjY2NjY2Njo6Ojo6OjY2NjY2Ojo6Ojo+Ogn99ent8fX59fX5+fn5+fn5+fn5+f4B/gICAgICAgH+BgYCBg4aMjY6NjY2NjY2NjIyMjIyMkpKSkpKSkpKSkpKSkpKSkZKSkpKSk5KSkpKRkZGRkZKSkpGRkZGQkJCQj4+Ojo6OjY2NjY2Njo6Ojo6Ojo6Ojo6OjY2NjY2Njo6Ojo6Ojo2NjIyMjIyMjIyNjY2NjY2NjY2NjY2NjY2Njo6Ojo2NjY2NjY2NjY6Ojo6Cf3x6fHx9fn19fn19fX59fn5+fn5+gH9/gICBgYGAf4CAgICDhouOjo2NjY2NjIyMjIyMjIySkpOTk5KTk5KSkpKSkZGSkpKSkpKSkpGRkZGRkZGRkJCQkJGRkZCQkJCPj46Pjo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6OjY2MjY2Ojo6Ojo6OjY2MjIyMjIyMjIyMjY2NjY2NjY2NjY2NjY2Njo6NjY2MjIyNjY2Njo6OjoN/fHp8e31+fH1+fXx9fn59fn5+fn5/f3+BgYGAgICAgYCAgIOGi42NjY2NjIyMjIyMjIyMjJFtZmdnZ2dnfYWEhISEiF0tMDAwMC1GoaGhoaGhoJqZmpqampqKg4SEhIOEd2VnZmZmaFxDREREREVCMS8wMDAwLlxwbm1ubm9qZmdnZ2dmb4SDg4ODg4OLjIyMjIyMjY2NjYyMjY2NjY2NjY2NjIyMjIyNjY2NjY2OhX19e3t6fX58fH59fX1+fX1+fn5+fn9/f4GBgYCAgICBgICAgoWKjI2MjIyMjIyMjIyMjIyMkWdfYGBgX155g4KCgoKGUxgdHR0dGTekpKSkpKSjnJycnJycnImBgoKBgYJyXV9fX19hUjQ1NTU1NTMeHBwcHR0bU2pnZ2dnaGNfX19fX15qgoGBgYGAgYqLi4yMjIyMjIyMjIyMjIyMjY2NjY2MjIyMjIyMjY2NjY2GfH16enp8fXt8fn19fX59fX5+fn5/f3+AgYCBgYGAgIGBgYGChYqNjYyMjIyMjIyMjIuLi4uRjo2NjY2NjY+QkJCQkJCMh4eIh4eHiZOTkpKSkpKRkZGRkZGRj46Ojo2NjYuJiYmJiYmIhYaFhYWGhYODg4SEhISIioqKiomKiYiIiIiIiImKioqKioqKi4uLi4uLi4uLjIyLi4yMjIyMjI2NjIyMjIyMjIyMjY2Njoh8f3l7ent8e319fX18fX19fX5+fn9/f4CBgYGBgYGAgYCAgYKFioyMjIyMjIyMjIuLi4uLi5GSkpKSko2QkpGJh46KkJKTkImQjo2RiI+RkZGRkJCQkJCPj4+Pj4+Ojo6Njo6Ojo2Njo2Njo6Ojo6Ojo6Oj4+Pj46NjY2NjY2NjY2MjIyMjIuLi4uLiouLi4uLi4uLi4uLi4uLjIyMjIyMjIyMjIyMjIyMjIyNjY2NiX59eHh5fH18fX19fHx9fX59fn5+f3+AgICBgYGBgYCBgIGCgoSKjIyMjIyMjIyLi4uLi4qLkJCRkZGPhI6QkIaKj4WNkJCMiIeHhomFiJCQkJCQkJCQkI+Pj4+Ojo6NjY2NjYyMjIyMjIyMjIyMjIyMjIyMjI2NjIyMjIyMjIyMi4uLi4uLi4uLi4qKiouLi4uLi4uLi4uLi4uLi4yMjIyMjIyMjIyMjIyMjIyMjI2Lfnx3dnh7fXx7fX18fH19fn5+fn5/f4CAgIGBgYGBgIGAgIGChIqMjIyMjIuLi4uLioqKioqQkJCQkIqFjoiOhoaPiY2QkJGNhoaFhYWHj4+Pj4+Qj5CPj4+Ojo6OjY2MjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMi4uLi4uLi4uLi4uLi4qKioqKi4qKi4qKi4uKioqKi4uLi4uLjIyMjIyMjIyMjIyMjIyMjIt+e3d2eHt8fHx9fX19fX1+fn5/fn9/f3+AgIGAgYGAgYCBgYGEiYyMi4uLi4uLioqKioqKipCQkJCPhYOMjpCOiYyKjpCQj4eLhIeEhoiPj4+Pj4+Pj4+Pjo6OjY2NjYyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIuLi4uLi4uLi4qKioqKioqKioqKioqKioqLi4uKioqKiouLi4uLi4yMjIyMjIyMjIyMjIyMin18dnZ4fHx7fHx9fX19fn5+fn5+fn9/f4CAgYCBgYGBgIGAgYSJi4yLi4uLi4qKiomJiYmJkJCQkJCMhoyJjoeFjYmOi4yMhIqGhoiDio+Pjo+Pj4+Pjo6OjY2NjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyLi4uLi4qKioqKioqKioqKioqKioqKioqKi4uLioqKioqKioqLi4uLi4uLjIyMjIyMi4uMjIyKf353eHp7enp8fHx7fX1+fn5+fn9+fn9/gICAgICBgICAgYCBhIqMi4uLioqKioqJiYmJiYmPj4+Pj5CMjouPjIqPjI6MjY2Ii4yLjomOj46Ojo6Ojo6Ojo6NjYyMjIyLi4uLi4uLjIyMjIyMjIyMjIyMjIyMjIyMjIyLi4uLioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi4uLi4uLi4uLi4uLjIiAfXh5enp6e318e3t9fn5+fn5/f35+f39/gICBgICAgIGBgIGEiouLioqKioqJiYmJiYmIiI+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pjo6Oj46Ojo6Ojo6Ojo2NjYyMjIyLi4uLi4uLi4uLjIyMjIyMjIyMjIyMjIyMjIyMjIuLi4uKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLi4uLioqKi4uLh4B8eHp6eXt8fHt8fH1+fn5+fn9/fn9/f39/gIB/gYGAgIB/gYSJi4qKioqJiYmJiYmJiIiIj4+Pj4+Pj4+Pj46Pj4+Oj4+Ojo6Ojo6Ojo6OjY2NjY2NjY2MjIyMjIuLi4uLi4uLi4uLi4uLi4uLjIyMjIyMjIyMjIyMi4uLi4qKioqKioqKioqKioqKioqKioqKioqKioqKiYmKioqKioqKioqKioqKioqKioqKi4uHgHt5eXh6fHx6e3t9fX5+fn5+f39+f39/f39/f3+BgYCAgH+BhIiLiomJiYmJiYmJiIiIiIiOjo6Ojo6Pj46MjI+Sj5COjo6Ojo6NjY2NjY2NjY2NjIyMjIyMjIuLi4uLioqKioqLi4uLi4uLi4uLi4uMjIyMjIyMjIyLi4uLi4qKioqKioqKioqKiomKiomJiYqKioqKioqJiYmJioqKioqKioqKioqKioqKioqKi4aBe3h5eHp8ent7fH19fn5+fn5/f35/f39+fn9/f4CAgYCAgIGEiIqJiYmJiYmJiIiIiIeHh46Ojo6Ojo6Ojo+MkJOQkI+Ojo6NjY2NjY2NjYyMjIyMjIyMjIuLi4uLi4qKioqKioqKi4uLi4uLi4uLi4uLi4uMjIyLi4uLi4uLioqKioqKioqKiYmJiYmJiYmJiYmKioqKiomJiYmJiYmJiYqKioqKiomJioqKioqKhYB6eHl5fHt6ent8fH1+fn1+fn9/fX9/f35/f39/gICBgICAgYSIiomJiYiIiIiIiIeHh4eHjY2Ojo6Ojo6Pj4+PjoyNkI2NjY2NjY2MjIyMjIyMjIyMi4uLi4uLioqKioqKioqKioqLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4qKioqKioqJiYmJiYmJiYmJiYmJiYmKioqJiYmJiYmJiYmJiYmKioqJiYmJiYmJioqFf3l6eXh7e3p7fHx7fn5+fX5+f39+f35/fn+Af3+AgICBgYCChIeKiYmIiIiIh4eHh4eHh4eNjY2Njo6Oi42Nj5WPiYyPjYyNjYyMjIyMjIyMjIuLi4uLi4uLi4qKioqKioqKioqKiouLi4uLi4uLi4uLi4uLi4uLi4uLi4uKioqJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYR+eXt5ent7ent9fHt+fn59fn1+f35/fn9+f3+AgICAf4CAgICEh4mIiIiHh4eHh4eHh4aGhoyNjY2NjY+MjImKj42IjJGPjY2NjIyMjIyMjIyLi4uLi4uKioqKioqKioqKioqKioqKiouLi4uLi4uLi4uLi4uLi4uLi4uKioqJiomJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJg355e3p8e3p7fX17fH9+fn5+fX5/fn9+f3+Af4CAgH+AgH9/f4OGiIiHh4eHh4aGhoaGhoaGjIyMjIyLiYyKiIeJhoyOjJCMjZGOjIyMi4uLi4uLi4uLi4qKioqKioqKioqKioqKioqKioqKiouLi4uLi4uLi4uLioqKioqKiomJiYmJiYmJiImJiYmJiYmJiYmJiYmJiYmJiYmIiImJiYmJiYmJiYmJiYiIiIiIiYmCf3h7e3t6enx9fHx9f39+fn19fn9/f39/f4F/gIB/gICAgICAg4aIh4eHhoaGhoaGhoaGhoWMjIyMi4yOjoyKioeEiIuKjIuNjo+Li4uLi4uLi4uLi4uLioqKiomJiYmKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiomJiYmJiYiIiIiIiIiIiImJiYmJiYmJiYmJiIiIiIiIiYmIiIiIiIiIiIiIiIiIiIJ/eHp7enp6e3x8fX1+f35+fX1+f39/fn+AgICAf3+Af4CAgYCDhYiHh4aGhoaGhoaFhYWFhYyMjI2NjJCSjI2Ii4mJi4uLi4mLjIqMi4uLi4uLioqLi4qKiomJiYmJiYmJiYqKioqKioqKioqKioqKioqKioqKioqKiYqJioqJiYmJiYmIiIiIiIiIiIiIiImJiYmJiYmJiYmIiIiIiIiIiIiIiIiIiIiIiIiIiIiHgXx4e3x5enp8fHx9fX9/fn59fX9/f39+fn+Af4B/f3+Af4CAgIKEh4eGhoaGhYWFhYWFhYWFjIyNkY+PjZGJjIaJjIuIiImMiYeNjo+NioqKioqKioqKiomJiYmJiYmJiYmJioqKioqKioqKioqKioqJioqKioqKiYmJiYmJiYmJiYmJiYiIiIiIiIiIiIiIiImJiYmJiYmJiIiIiIiIiIiIiIiIiIiHh4eHh4eHh4WAenl9e3t7enx8fHx9f39+fn19f39/f35+f4B/gH9/f4B/gH+AgoSHhoaGhYWFhYWFhYWFhISLi46PjoyLj4iHiYmMjYWFjo2KiYyNi46KioqKiomJiYmJiYmJiYmJiYmJiYmJiYmKioqKioqKiomJiYmJiYmJiYmJiYmJiYmJiYmJiYmIiIiIiIiIiIiHiIiIiIiIiIiIiIiIiIiIiIiHh4eHh4eHh4eHhoaHh4eHhH55eX16enp7fXt8fX5+f35+fX5/f39/fX5/f3+Af39/f39/f4CChIaFhoWFhYWFhYWFhISEhIuLjI6MjI2Lh4mIiomGgoiNjoiKi5GTj4uJiYmJiYmJiYmJiYmIiYmJiYmJiYmJiYmKioqKiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiIiIiIiIiIeHh4eHh4eIiIiIiIiIiIiIh4eHh4eHhoaGh4aGhoaGhoaGh4eDfXp5e3p5enx8e31+fn5/fn59fn9/fn9+fn+AgICAf35/f39/gIKEhoWFhYWFhISEhISEhISEioqOjYmIiIqKh4iHiomIioiIh4qGi5GPiomJiYmJiYiIiIiIiIiIiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmIiIiIiIiIiIiHh4iIh4eHh4eHh4eHh4eHh4eHh4eHh4eHhoaGhoaGhoaGhoaGhoaGh4J8eXl6eXp7e3t7fX5+fn5+fn59gH9/f39/f4CAgH9/fn9/gICAgoSGhYWFhISEhISEhISEhISKi5CPiYmJi4qHh4WHiYuKiYSLjYmOjYmJiYmJiIiIiIiIiIiIiIiIiYmJiYmJiYmJiYmJiYmJiYmJiIiIiImJiYmJiYiIiIiIiIiIiIiIiIeHh4eHh4eHh4eHh4eHh4eHh4eHh4eGhoaGhoaGhoaGhoaGhoaGhoaGgXt4enp4e3x7e3x+fn9+fn5+fX1/f39/f3+Af4B/f39/f3+Af4CChIaFhYSEhISEhISEhISEhI+Qj4+IiYuIhoeIiYuLjIuJioqNio6Oj4iJiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIh4eHh4eHh4eHh4eHh4eHh4aGhoaGhoaGhoaGhoaGhoaGhYWFhYWFhoaAe3h5eXh4enp8fX1+f35+fn59fn9/f39/gIB/gICAf39/gIB/gYKDhoiGiIaDhISEhIODg4ODkpKOioeKi4qLh4uNiYqJi4iHiouIio+SioiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIh4eHh4eHh4eHh4eHh4eGhoaGhoaGhoaGhoaGhoaGhoaGhoaFhYWFhYWGhn96eXh4eHl5eXx9fn5/fn5/fn1+f35/f3+Af39/f4CAgH+AgH+BgoOHjo+PjoiHhIWFhoaFhYWSkI6KiYmIiImKioiIh4aKjIiHiYmOkJGNh4iIiIiIiIiIiIiIiIiIiIiIh4iIiIiIiIiIiIiIiIiIiIiIiIiIh4eHh4eHh4eHh4eHh4eHh4eHh4aGh4eHh4aGhoaGhoaGhoaGhoaGhoaGhoaGhoWFhYWFhYWFhYWGf3l4d3d3eXp5e3x9fn9+f35+fn5+f35+fn+Af4CAgICAf3+Af4GBg4eOjo6Ojo6Mjo2OjY2MjZCQjomHhoiJiYeIiouIiYyJiYaKjY6PkYuIiIiIiIeHh4eIiIiIiIiHh4eHh4iIiIiIiIiIiIiIiIiIiIeHh4eHh4eHh4eHh4eHh4eHh4eHh4aGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaFhYWFhYWFhYWFhYZ+eXd5d3d6eXl8e31/fn5/fn5+fn5+fn9+f4B/fn+Af39/f39+gIGEiI6Ojo6Ojo6Ojo6Ojo2NkJGOi42JjIiIiYaHiYaIioiHi4yLjpCQiIeIiYmJiIeHh4iIiYmIh4eHh4iIiYiIiIiIh4iIiIiHh4eHh4eHh4eHh4eHh4eHh4aGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoWFhoaFhYaGhoWGhYSEhIWFhoaFhIWFhX55d3l2eHl4e3x7fn5+fn5+fn5+fn5+f39+f39+f39/f35/f3+AgYOGjY2Ojo6OjY6NjY6OjY2Qj42Ni46KhoiKhISLiYeDhYSDi4mLj42JjI6QkI+NjYyLjY6Pj42NjI2Nj4+Pjo6MjYyMjY2KiYiHiImHh4aHh4eHh4aGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoeHiYqKiIeJi4yNjo2LiImLi42OjYyJiImMgHl3d3Z6eXh7e3t+fn5+fn5+fn5+fn5/f39+fn5/f4B/f4B/f4CBg4aMjY2NjY2NjY2Qj4+Pj46NjI6KiYuMjIeFiY2Lh4aIh4aHh4uNjo6Pj4+Pjo+Pj4+Pj4+Pj4+Pj4+Ojo+Pj4+Pj4+Pj4+Oj46Oj46Mi4uJh4eHh4aIhoaGhoaGhoaGhoeLiYeHiIiLjY2Mi4yLjY2Ojo+Ojo6Pj46Ojo6Ojo6Ojo6Njo6NjY2AeHZ4eHp4enx6fH5+fn5+fn5+fn5+f39/fn59fn9/f39/gH9/gIGDhoyMjIyMjY+QkpOTk5KSjYyMjIqHioyKh4eJiYWCiouIiYWJjpCNjo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6NjI2NjI2LiYaHh4eHiYqLjY6NjYyNjY6OjY2OjY2NjY2NjY2NjY2NjY2OjIyNj4+OjY2MjIyLi313dXd5enp7e3p+fn5+fn5+f35+fn5/f39+fn1+f39/gICAf3+AgYOFj5KRkJGSk5OTk5OTkpKLi4uLiomMiouLiYuKhoeOjYiIjI6OjIuMjIyNj46Njo6Ojo2NjY2MjY2NjIyMjIyMjIyMjY2NjYyMjI2NjYyMjI2NjIyNjIyMi4yMi4yMjI2MjIyMjIyMjIyMjIyLi4uLi4yNjY6Sk5OSkpSRkJOVlZSTk5COjo6Oe3Z2d3h6ent7e31+fn5+fn5/fn5+fn5/f35+fn9/f39/gIB/f4CBgoSNkpKTkpOSkpOTkZKSkoqJioyJi4qJjIuKioiHiYqKi4mKjY2Mj46Nj5KUlJOUlJOTkpGSkI+Ojo2NjY2Pko+OkZGOjIuKioqLi4qKi5CPjoyMjIqKioqKioqKiouKioqKi4yLi4uMjIyKiouLi46RkpOTk5SUk5STk5SUlJOTk5KSkpKSk5F6dXZ2eHt7e3p6fX5+fn5+fn5+fn5+fX5/fn5+f39/f3+Af39/gIGChIuRkZGRkZKSkpGRkpGRiYmIiIqMiYiJiYuJhoSJhoyKh4ySkpKTk5OUlZWWlZWUk5OUlJSUlJSUlJSVlZWVlZWUlJOTkY+QkZKQjoyRlZWVk5KSjo+QjYqKi4qKi42OjY6RkpCRkpKSkpGRkpKSk5OTk5OTk5OTk5OTkpOSkpKSkpKSkpKSj3h1d3l6e3t7ent9fX19fn5/f35+fX5+fn5+f39/fn9/f4B/f3+AgYKEi5GQkJCSkpKRkZGRkZGIiIiIi4uJg4eLi4yMiIeHjYyNkpSSkpOTlJWWlpaVlZSSkpOTk5SUlJWVlZaXlpaWlpWUk5SUlJSVlJSUk5OVlZWUk5KTk5OTkJGSkZGSk5OTk5KSkpOSkpKSkpKSkpKSkpKSk5OTk5SUk5OSkpOTkpKSkpGRkZGPdnJ3enp7e3t8fX59fX1+fn9+fn9+fn5+fn6Af39/f3+Af3+Af4CBgoSKkJCRkZGRkZCQkJCQkIeHh4eIiIiFi4+KjI6Njo+OkJWUk5OTk5SUlZWVlJSVk5KSk5KTlZSUlZaWlpaWlpaWlpSTk5OTk5OUlJOSk5SVlZSTkpKSkpOTk5OTk5OTk5KSkpKSkpKSkpGSkpGRkZGRkZKTlJSUlJSTkpGRkZGRkZGRkZGRkYx0c3d6ent7e3x9fX1+fX5+f35+fn5+fn5+fn9/f39/fn9/f39/f4GDhIqQkJGRkJCQj4+Pj4+Ph4iKi4yNjYuOj42Mjo6RkpGSk5OSkpKSk5SUlJOSk5OTk5KSkZOShpOUk5WVlZWUlZWUk5OTk5KSk5OUk5KTlJSUk5KSkpKSk5OTkpKSkpKRkZKSkpKSkpKSkpKSkZKRkZGSkpOTlJSUk5OSkZGRkZGQkJCQkZCRinN0dnp8fHp7fXx9fn59f35/f35+fn9+f31+f39+fn59f39/gH+AgYKDipCQkZGQj5CPjo+Pjo+Oj4+Pj4+Pj4+PkI2OjpCRkpKSkpKRkpKTk5OTkpGSkpGOkZGSk4V8lJOSk5STk5OTlJOSk5OTk5OTk5OSk5OTkpKSkpKSkpKSkpGRkZGSkZCRkZGRkpKRkZGRkpGRkZGRkpKSkpKSkpKSkpKRkJCQkJCQkJCQkJGGc3V2e3x8e3x9fX1+fn1/f35/fn5/gH9+fX5/fX5/fn5/f3+Af3+BgYGKkI+PkI+Pj4+Pj4+Pj4+Oj46Oj4+Pj5CQiI2PkJGRkpKSkpOTk5OTkpKSk5KSknyEkpGSeH+Tk5GRkpKSkZKSkpKSkpKTk5KRkZKTkpGRkpKSkpKRkJCQkJGRkZGQkJGSkZGRkZGSkZGRkZGRkZGSkpKSkpKSkZCRkZCPj4+Pj4+Pj4+PkX9ydHh8fHx7fHx9fX5+fn9+fn5/f3+AgH99fn5+f39+f39/f4CAf4GBgYqPj4+Pjo6Ojo+Pj46Ojo6Ojo+PkI+Pj4+GjpCQkJCRkZGRkZGRkZGQkJCQkJCSgm2Nkolxf5GRkJCRkZCQkJGRkZGRkZGRkJCQkZGQkJGRkZGRkI+PkJCQkJGRkJCQkJCRkJCQkJCQkZCQkJCQkJCQkZCQkJCPj4+Pjo+Pj46Ojo+Pj4+PeHJ2eXx9fHp9fH19fn5+f35+f39/f4CAf39/fn5/f35/f39/gIB/gYGAio6Ojo6NjY2Ojo6Ojo6NjY2Oj4+Pj4+PjoiQkZCPj4+QkJCQkJCQkI+PkJCQj5CEZ32SgHR+kI+Pj4+PkI+PkJCQkJCQj4+Oj4+QkI+PkJCQkJCPjo+QkJCPj4+Pj4+PkJCQkI+PkI+Qj4+PkI+PkJCQkI+OkI+Pj46OjoyMjY2NjIqDiYhzc3Z4fX58eX18fX1+fn5/fX5/fn9/f39/f4B/f39/f4CAgH+AgH+BgYCJjY2Ojo6Ojo6OjY2OjoyNjY6Ojo6Ojo2NiJCRkI6Njo6Ojo6Ojo6Pjo6Ojo6Oj4ZocI98dHuOjo6OjY6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Pj46Oj4+Pj4+Pj4+Pjo+PjY2MjYyNjoyLi4mJiYiFhYSDgoKEgnR5fXp4dXJrZWltb2xmZmdncHNzd3l9fnl6e3x9fX1+fn59fn9/fn9/f39/gIB/f3+AgIGAgIB/f4CBgImNjY2NjY2MjYyMjIyMi4uLjYyMjIyMjIyGj5GRjIyMjIyMjIyMjIyMjIyMjIyOgV1pdm1le42MjY2MjIyNjY2NjYyMjI2MiomKi4uJh4KAh4iEgXt6gH57fXx8fXlzcnJycnV1cG1ramppZ2NkYV9bXF1eWFVXWFlTS0VJSkpLTE1PT0tgdHR3eX19eHp5e3x8fX5+fn1+f39+f35/f4CAgH+AgICBgYCAgICAgIGAf4OEhYSFiIuLjYyMjIuLi4yGiYqKioqKh4OOkJGNiouLi4uMiYmKioqKiouKi4hnZm1eaWd0hoWDhIeJiYWCg397fHl6e3pzcHFxcW1samdsbWdlZmVmZGNlZGVkZWVlZWRkZGNhYV5dXFpYWFdUUFFSU1JTTU1KSUZESEpHR0hHR0xOSWdzdXh6fXp4d3l8fHx8fn5+fn9/fn9/f39+f4CAgIB/gICBgICAgICBgYFnXmBjYWNucX17ent/fXd8fHZ4ent4eHpvcHt4eXt8e3h3e394dXd0dHZ1dXZ3cWB0bmFwdGplaGtsbm9tamlpaGhlZWRkZF9gYWJgYF5dWVhaWltdXV9gX2BfX19gYmFeXl5eWVldXF1bV1dWUlRSU1NOUUpISUZERUhMTEhGR0lLSklNbXJ0eHp7end3eXt6e3x+fn1+f39+f35/f35+gIGAf3+AgIGAgICAgICCgWdYW1pZXFtcY1xaXF5ga3FtcHBvbm5vbmtpbmxrbG9qaWtraWpraWZmZ2dnaGdjZm5tXWx1cGViY2JhYmBgXVhbW1dYV1RWUVBUU1NNSkxLTExOTk9UWFhXVVVUUlBQTU1QT05LTE1QUU9MTEpHSUlHSEhJSEhIR0ZHSEpKSEhISUlISVZwc3V5ent5dnZ5enp7fH59fX5/f35/fn5+f3+AgX9+f4B/gICAgICAgIGBbFtYVlZWWVlaWVlYVVZoamxubmxra2poaGloZGVkYlxiZl9fYWNfXF9dYF1eWl1mam9xcXN0ZVlZX1tYV1NOTUtLS0tMSUtNTktKS0tMSktQTEtLRkdHSUlGR0lISUZFSEdGRkVERUVEREVJSUlHSEdIRkZLTUtJSUlIR0hLTU1LTExMVXFzdnl6e3h2d3h3ent8fn1+fn9/f39+f3+AgIGAfn5/f4CAf4CAgIB/gYJoUlRVVlNVV1lZWVdXV1tbYWNfXlxbWFZWWVZSVFJRUVVUU1NUUE1KTU5QUk9OUV9jZW5vb25iT1FUUFBOTk9NSk1MS0xKSktLRklJSkxJR0pISUlFR0dGRkVFSElKR0ZHRkZHR0hKR0dISEpMSkpLSUlISktLSkhKS0pISUtMTU9QUEtUdHN1eHp6eHZ2d3d6enx+fX5+fn5/f35+fn+AgYB/f3+AgYB/gICAgH+AgmlQUlRXVVRWWVdYWFpbVFRTUlBRU1FRUU9OTlBQUU9MTlBPTk5NTEtNTk5PTE1QX2hnbW5sZ2FSTU5PT1BPTk5PTk5QTk1NS0lISEpJSUlJR0ZHR0dJSkhJSEhJSEhHSEdISElISUxLSklISkpJSkpIR0pMS0pJSUhKSktMTk1NTU9RTFVzcnN3enl3dnR2eHp7fX19fn5+fn9+fn5+gICBgICAf4GBgH+AgICAgICBbE9PTlRZVVVdW1lXV1hOTUpKSUZKT0xKSkdJSk1NS0pMTUpHSUlJSktLSEZJTlhmbWhsbWxqaGNcV1VRT09NTk9MTk5OUFBPTE1MTk1MTEpJSEdJSElISElJS0xLS0pJS0pJSklJSUlJR0dKSUdJSUpKTk1OTEhJSklJSk1PT01MT1JOWXBwcnd4d3d0c3R3enx+fX5+fn5+fn5+fn9/gICAgICAgYCAf39/gICAgIFvS0pNTlFOTlVXVlZSU0lFQ0VFUkREQT5CP0RAQD5CREFAQURHRkVIRUJQWltdZGlvaWtsamlqaWtrY1JISklKSUlLSkxQTk1MTU1MTU1NTElIREZGR0ZGRklKSUlLSkhMSklKSkpJSEhKS0tIRkdJSklLTU5OSktPTUxLTU1PUE5QT1BgcG9yd3h2dHJzdXd6fX19fn5+fn9+fn1/gICAgICAf4CAgIB/f3+AgICAgXNQUE5OUE1KS1BSUE5RQ0RCQUZRRT1DPT9FSDk6Oz0/PTxBRkA+Ojs+Pj1MXmdsa25rb21paWpsZVRJQ0RFRUZFR0dHR0pHSEpLR0NER0pHQ0RFQUFDR0hHSEdISktKSElMS0lISktLTU5MTUxMSkpMS0lLTU9PUFNRT1BQTk9QUlFNUGdwb3N2dXRycXR4eX19fX1+fn5+f4B+foCAgH9/gIB/f4CAgH+Af4B/gICCdlRVUVFQT0xNUFBOT09BQkFAQkE/Oz48Pj8/Ozg5ODs7OkA6Oz48Ozs8O0dLR11tbW54cWlqaFZIQUVGREdJSEM/QEBAQUFCQUE/Pjw9PkFAQD8+P0BFR0dHSUtMTk1OTUxNTUpLTVBVU05MTlFOTk1OTE1NTk9OTk1LS05OTk1OTkxUbnBwcnR0c3Fydnl5fX19fn1+fn5/gH5+gICAgICAgH9/gICAgH9/gH+BgIJ4UVFSVFJTUVNTUVFST0BAPT4/PD8+QEE/PT45Ozo7Ozk5Ojg4Ozw5Nzk7Oz47Ok9pcHpzbGNJPUBAQ0ZEQ0NDPzs+PkBDQ0E/Pj9BPkBAQj9APD9CQEFDRUVFSktQT1BPTU1OTExMT1JRUFJOTExPTUtOT0xMTEtMS0tKS0tKTU1LS1xxcXF0c3VycXR4eHp9fn1+fn5+f39/fn5/gIGAgH+Af4CAgICAf4CAf4CAgXxSTU9RUFFSUlRSU1NOPDs8Ozs7P0BBQkA9PDk8PTw6Nzk6Ojk3OTo6Nzg6OTk6OkFXdHFYPzc8PD1AQUA9Ozs+PD09QEJDQT9BQkE9Pj09Oz0/Q0RCQD9BREJFR0pKSkpKTE1MTExNTExOVVNLTE1USVBKSU1KSUpLS0pJSEdKS0lKZnJxc3RzdXJydnl5e31+fn5+fX9+f39/f36AgICAf4CAgICAgIF/gIF/gYCBgFZMTlBQTlJRUFBRUU44PT88PDo9PkFAQT8+PkA/Pj48PT0/QD09PT9DOz09PTw+OztXXzo6PD49Pj9AQUA+P0E/QEBBQEBAPT8/PTw6Oz09PD9AQUJCQUBCREZGRkdGR0dISUtMTExLTEtKS0lKSk1MTEpMS0lISUxMSklJSElLR01tcHF1dXR1c3V4eXl8fX5+fn5+fn5/gH9+gIB/f39/gH+AgYCAgYCBgICBgYCCYUtPT05OT1BPT1BQTzo8Pjw9Oz8+PkFBPz0/Q0NEQT89PkBBP0A7XW5APkRFPz9BO0ZYOz09Ozo9PkFBPz5AQD9BPz89PD48PTs7PD0+QUA/QD5AQ0NEQkRFSEVFR0hISEdGSUpJSUlJSUhKSkpKTEtKSklJSEhKSktMS0lLSkpIVnBwcXNzdHR1eXp7e3x+f35+fn5+f39/f39/f3+Af4CAgICAf4GBgICAgIGBgIJtTFBRTk9QTk5PUFBPPjw8PT4/P0A+QEA/Pz9CRkQ+PDw9QD04Ojttd0g4Ozo9PUE7SVs6PD08ODo7Pz49PD07PEA9PTw8Pjs9PD0+QUBCQUBAP0JEQ0RFRkZGQ0VHSElJSEhJS0tMTUpKSUpNTUpLSktJSEhISEpJSktKSk5MSUlfcHBycnJ0dXZ6e319fH5+fn5+fn5/f35/f36AgIB/gICAgICAgYGAgICAgIGAgnZNTk5NTk5MTE5QT0w+QTw8PT8+QkM/PkFBQUJBQFlRPD09SUxFRnV3TTc4ODo7Pj5QYDs7PTw6Ojs+Pz89PDg6Pjw9Pj89Oz4/QEJDQkJDQ0FCQkFCQkRCQkRCRENGSUdGRkhJSUtNSklKSktMSkpJSkVESUlGRkhISUpKTEpGRmdwb3FxdHZ1d3t8fH18fn59fX1+fn9/foB+fn+AgH+AgICAgICBgYCAgICAgICBek5JS0tMTExFSUxOTTw/PDw9PkBAQUE7QkNCQ0BDc3lJO11/g395fHdWPD0/PT0+Ql1qQTs9Pj89PT5BQ0A8OTtBPz4+QT07P0JAQkNCQENDQUNBPT0+QD0/QUFBQENFRUBAQ0JDR0dFRENGRUZGR0VEQEFHR0ZDRkRHSEpHQz5IbG9wcHF0dXZ5fHx8fHx+fn1+fn5+fn5+f36Af3+AgICAgICAgIGAf4CAf4CBgIF+UUhLTU1NS0pLTE9RQD8+PkFBQEBBR0FCRENFQUhyeWtigoSDgoOAfV0+QENAQD5GbnZNOj1BRUFCQkZIQz08QEREQUA/Pj1AQT4+Pj88PkBER0VAPkBBP0BDRkVDQkNDQEJEREJERUFCPkFCQkFCQEA9QUJDRENDQUNFR0E/PVZwcHFwcnV1d3p8e3t7fX9+fX19fX1+fX5+fn9/foB/f4CAgICAgYCAgIB/gIGAgX5SSEtNTUxLS05OUlVEQkBDQ0FBQkBCQ0BAQUFARm90fYKCgYN+fYR1TEFDRUA/P1d8gVw/Q0VJSklJTU1LRUNGR0dFR0VFRUREQ0E/QD4+QkZKSkdFRUdGRkpOTktKSUdHSEtMSUdHQ0REREVEQUJCQ0BDREVEREVERUZDQkFEZW9wcXF0dnV4e3x6fHx+f319fX19fn59f4B/f39/f39+gIGBf4CBgICAgH+AgICAfVJJSUpKSEpKTE9SU0dGRUdIREdIREA+PDs+QEVFaHN9gXx/hH55hXFCREVEQ1d1hoeHflhHSEpNTE5PT0xIR0hHSElJSEhHR0hIRUNFRUVFRkhKSkZFR0lKTU9PTU1LSktKTU5LSUhHSEhIR0ZFRkZGREZIR0VFSEhGSEdIRlFubnBxcnV2eXt7e3p9fX5/fX19fX1+fn1/f39/fn5/gH+BgYGAgICAgICAf4GBgIB8UEhHSElGR0lKTU5OSkxJSUpLTE5KRkNBQkNGSkdge4B/d3+EhYOEimxBQVZ0h4mHh4eIg1dITE1MTU5MSkdHR0dER0dHR0ZIRkhFQ0RERkVEREhIQ0NDRklKS0xMTExMTElKS0pKSUlJSEpISEdISUhHR0hGRkZISklJSUlIXW9vcXJzdnd6e3t6e319fn59fX19fX5+fYB/f39+fn+BgIGAgYCAgICAgIB/gYCAgHxNR0ZIRkVGR0dKS0pMTUxLTU5NT0tJSEhKS0tMTE5bfIKCg4OFhoaIg1VshIeGhoaHiIiHfFBLTEtIR0ZGREVDQ0BBQ0NDQ0ZGRUJAPj5AQUFAQkQ/Pj9ERkhERUdJSklJR0hIR0lJSkpJSEZKSkpKSUpJSkpKRklMTEpKS0tmb3BzcnR2eHl7e3t8fH1+fn19fX19fn59f39/f35/f4CAgICAgYCAgIGAgICAgICAfU9GRkdGR0hHRUZHR01NTUtMS0lHQ0NDRElLS0xMSlWBg4SEgoKFhoaDgoaFhISGhoaHh4aKdUlJRkI/P0A/Pz88PDw+Ojo8QUFAPjw5OTg8PD07Pjs5Oz9BQkBBQ0NCQEFCRERCQ0ZISUhISExNTEdJSk1NTk1KSktLSkxNU2xwcXRzc3d5e3t7fH19fn9+fX19fX1+fn5/foB/fn9/gICBgIGBgICAgYCAgIB/f39+UUZFRkdJSUdEQ0VGTk1MSklIRT85Oj5ARUhISkpJZYWEhIR/gYKDgoODhIWFhoeIiIiIiYyOZkJCPTg4Ojo5ODc4ODk2NDc5Ozw6ODU2NzY4OTc4NzY4ODs7Oz1AOzk5OT08Pjs7PUFDRUhKTUxMR0lIT1JRUFBOTE1NT1Fdb3BydHN1eHp7e3x8fn5+f359fX59fX5+f39/gH9/f4CAgICAgYCAgICAgICAgIB/f39RR0ZHSEpIRkVGR0hMTEpJSUdDQjU2OjxDQENHSUlqhoSEgX6Bg4ODgoOEhomKi4yLiomKi4yJVDo4NjU2NzY2NjQ1NzYzNDY4Ojg3NjU2NTY3Njc3ODo2Nzc4OTs3NTc4OTc5ODc2OjxAR0ZJRklGRUZPU1JTU1JPUFBSVGVwcXN0dHd5e3t7fH1+fn5/fn19fX19f39/f3+Afn+AgICAgICBgICAgICAgICAgH9/flJISEhJS0lHSUpJSkpLREVIRUJANTc4OD06PUVDQmaFg4GAgoODg4ODhYmLiomJioqKiouJioqBRzY3NjQ2ODg3NDU3ODU2NzY5OTc2Njc2NTo5Ojo6Ozg5ODk4Nzc3OTo5ODg3ODU4OTtBPT4+QkE/QUtMT1FQUU9PT1JXa3FydHR1d3p7e3t9fX5/fn9+fX19fX5/f4B+fn9/f4CAgH9/gICAgICAgH+AgICAf39+VEhHSUlMTUtKS0tMSUg/QEFAPDo1Nzk4OTc7Qjo9cYSAgYOEhISEhIaJioqIh4iIiIqKjIqJiYx6Pjk4ODs8PT45Ojo8OTo7OTo7Ojk5Ozo5PT09Pjs7PD06PTs5Ozs8Ozw8OTk8ODo6Ozo5OTk8Pzw9QUJESUpNS0lLTFdvcnN1c3Z4e3t8fHt9f39+f359fX19fn9/f35/f39/f3+Bf4CAgICAgICAf4CAgH+Af35URkVGSUxOTkxKSk1CPzo7PDs4OTk4OTo6Ojs/Pkh+hIKChIWFhYaIiYiHhoaGiImIiYuMi4mKioxsPDs+QkNFRUFBQEI+QEJAQD49PT5APz4/QD9APT0/Qj9BQT9BPz1AQEA+P0E9Pjw7Ojs5OTs/PTs8PT1BQUNBQkNBWHBxdHR0dnp7e3x9e31/fn9/fn19fX5+f35+fn9+f4B/f4CAgIB/gIGAf39/gICAf39/flJFQ0FHSk5PTElHSzo4Ojs5Ojo8PTo7Oz09P0BCUoKCgoSFhIWEhomJiIiGhoaHiImKi4uKioqLiotePkRHSUtKSUZHR0RGSEdFQ0BAQ0VDQkBCQ0I/QERIRENFQ0VFQUZFRkRFRkRAQj88QD49P0A+Pz4/Pj8+Pjo7PTxgcXJ0dHV3enp7fX19fn5+f39+fX19fX5/fn5+fn5/gH9/gICAgICAgICAf4CAgIB/f4B+UERAPUNIT01HRkJEOTc6Pjo8Oz4/Pz89QUBDQ0ZXhIKDhIWFhoaIiYmIh4aGhoeJiYqLjI2MjIuKiohWSE1MTUtOSklLSElKSklFQ0RGR0ZEQ0VGREJISUtIR0dGR0dFS0lLSUpLSkNGQ0NEQkFBQ0JEQ0NERENBPTs9QGhwc3R0d3d5eHt8fH19fn5/f359fX1+fn9+fn59fn+Af3+AgH9/gICAgICAgICAgH+AgH9PQT49P0RMS0BCQkE5ODw+Ozw7PkA/QT5CQkdHSlmEgoOFhYaHiImJiIiHhoaGiIiIiYqMjYyMi4uKjH9QTlBOTE5LSkxKSUlISkZER0hISUVFSEZGRUxMTUlKR0dISUpOTU5MTE5LSEZHR0VFQ0ZGRkZERUhIRkNBP0BMbHB0dXZ4eXl5fHx8fX1+fn9+fn19fX1/f35+fn5+f39/f39/f3+AgICAgIB/gICAgICAf1FBPz4/RUdHPTxAQDg3PDs8PTo/QD4/QENGSUpRX4GDhYSFhoaHiIiIiIiIh4eIiIiJioyNjIyMjIuKjXJOUk9OTExMTEpIR0VJSURKSEdLSkhKR0dHS0xOTExISElKTVBOUE5NT0tJR0lKSElESUhIRkZHR0hHQ0JBQ1VucHV3d3l7eHl6enx8fX5+f39+fn1+fX5+fn5/f36Af4B/f3+Af4CAgICAgICAgICAf39/VERBQUJHSEI/OD9AODo8OD0+Oz1BPj9BREhKTFVxg4SEhISFhoeIiIiIiIeGiIiIiImJjIyLjIyLi4uLi19SUlBNTk1LSkdFQkdKR0xKRktOS0tKSk1NTE9QTkhJS0xPUVFQUU9PSkhKSkxKS0ZHSEdFR0lGRUVCQUJCXG9yd3h5enl5eXp6e3t+fn5/fn59fX19fn9+fn9+f4CAgIB/f39/gICAgICAgICAgH9/f39VRUNFRUdHRUQ7P0E7PTw5QD4+QEJHR0FHS0xQVnmFg4ODhISGiIiIiIiIh4eIiIiIiIqLi4uMjIyMi4uNfFdWUlJUUk9MS0pERUZLT05PV1VRUE9RU1JNU1RPTVNMUFNVVlJTUVBMSk1NTUtOR0dKRkZISkRERUVCRENjcHV5eXp6ent6e3p6fH59fX9+fX19fXx9fn5/gH9/gICAf39/f3+BgYCAf39/gIB/f39/f1VGRkdHR0dIRj5AQj0/PT1CP0NCRlZORk5QUFRYe4aDhYWEhIeIiIiIiIiIiIiIiIiJiouKioyMjIyOi4uLaFdVa2FFUlFRUEk7O1FTUmB1XVVWVFZZWVJYWFJaZlBVV1pdUlRXUU9OUlBQUFFLS0tISEpIRUZJSUlISWlydnl4eXl6e3t8ent8fXx9gH59fX19fX1+f39/f3+AgIB/f39/f4CAgIB/f3+AgH9/f35+U0hKSUhHRkZFPz9BQUVBQ0dFREVMWFJNVFVWWFt8hoWHhoWGh4iIiIiIiIiIiIiIiIiIlJyMioqMfWGKi4uHbFtkVTpYWFhTUT9AVlVZW2NgVllicl1dVl1aVkVRWVpbWV9UWWdSVlZYVFRWVE9PTUpMSklJTE1LT01Tb3N2eHl4d3p5ent6enx9e35/fn1+fX19fn1/f39+f4CAgH9/f3+AgICAgH9/gH+Af39+fn5WSkpJSEdFRERCQT9ITUlNUEtJS1BUU1NYWlpcXHiFhIWFhYWGh4eHiIiIiIiIiIiIiImcnaCPiY5nO36LiYqLem5wWFpcW1JTUlZWVFpadINZVX2QYFxYXV5XSVZdXVtbX1lIWVhZW11YWFlXUlFNUFFNTU9TUVFVUmFzc3Z3d3Z4eHh6e3p8fX19f39+fX59fX1+fn9/gH9/gIB/f3+Af3+AgICAf39/gIB/gHh5fVlOS0lJSEZCREBBOlBRUVdYUFBPUVNUVFhYWVpbboGCg4WEhYaHh4eHh4iIiIiIiIiIiJaanJeIioFuhomIh4OKfmZZWVxZVFVUV1JRV1ViloBRZXJYWldfaFBgZltbWFxnYUdPWmhnXFtcXV1XU05TUFBRVlZWVllabnJ0d3Z2dXh4eHt7fH19fX5/fn59fn18fn9/f3+Af39/gH+AgH9/gICBgYB/gH1yfX9/b3R8XVNQT01LSkVDP0A7UFBaWltSU1FPUlJSVVNWVFdfdXiAhYSEhYaGhoaHh4eHiIiIh4eIh4ORjomJiIaFiIiGfYB7XFBVWFRSVFJRUUxPTEtmeVtdVFlVVl1aTFRaVVNUXlpYV1dXemtYW1tcXlRRUVBJTk9XVlhbWmRwcnZ2dHR2eHl5e3t8fH19fn99fX1+fX1+f39/gIB/f3+Afn56eHd2c3V7f3+AgHRrfn5rcnleW1ZVU1JPS0ZDREFNXoNsVlJTTk9RT1FVUlNSUlRjZHaAgoKDhISEhIWFhISDhoaGhoeIhn6JiYiHhoOHh4d5bXFWSUtNTktNS0hKREZIRUM+VGRVf1JRUU5LUlRRTU9ZUU1OUVNVVU1RU1JQT01MSENJSFJUVVpcbHF1dnVzc3d6ent7e317fX19fn19fX59fn9/f4B/f399fX5+f39/f4B+e3Zzd31+fmR1fWlxdF9kXV1bWVZQTElMSWFsknRQUVNOUVJRUltSU1JRUlZUYnN7fH+AgYKBgX99e3uAf4OChYaHgoaGhoGEgYaFhnVfXUtDP0NDQ0NCP0RQQkNAQz1DSUdWQEhOTEddaVBIRk5GREVGSUdIQ0RIR0hLR0RCQURATlFNUmRydHZ1c3R1enx6e3t7fHx9fHt+fX19fn5/f3+AgIB/f3x8fX+Af39/f4CBgH12dHt/bWh8Z25xZmllZGJcWFNRUFVSc1dlW09PTkxRU1FVWVNVUVFUUk9WYGtscnZ7e3h5dHJuc3RzeXh+foOAg4OCgIKAgoGCa01HP0A6Oz5AQD8/PmpRS2FFRkhJRUI/R0xOR01RVUlCRT8+PD08PT0/PT9BQ0NAPzw9Qj5KTUdVbnR0dXN0dnh6fHp9e3x9fX19fH59fXx+fn9/f4B/f39/enl3eHd2dnh7foB+fXt4dnx1YXhnbHBqbGppZmBbUVJaXFleSkpQUU5LTFFSUVRVVVdRUVdWUFhbYl1hZ21tbG9rZ2BucmptbHF1e3p9e3h6fHx4d3hlQ0BAQj06QkNBQURCXF1Pe05PTk5LTE1PT1FMS0xXTUhHQEI8OTc3NTk5PTs7Ozg5ODk/PEJIP1xzdHV2dXZ4enx8fH18fH19fn58fX19fX9/f39/fn9/f314dXZ6e3p3eXh1d3t8eXh1eXdjcWhpcG1ubW1oZl5PUF5cWklIUFJRT01QUU5RUlRWWFNSWVROWVpbV1ldXl5fZWBdXnF2a15gZ2t3b29sam9ubmxmYllIRkdIQkFHSUVFRkRNUlBhV1JXUVBTU1JVW09PUVdQTUlERj46OTY1ODc5Nzk6MzY1Nzk1PEI9ZXNzdnd3eXp7fX18fHt8fX5+fnt9fn19f39/fn5+fn9/e3d1eX18enh8fHx8dHd2d3Z1d2tuaWhxbm9vb2prYFVXXlpXTUtUVFNQUVVPTFJTVFdYVFRYUUxXWVpWWFhWWFldV1dYaHNrXVZhc2thYV9eZGFfXllUUU5OTkxJSEpLSUlGQ1FQU1tXVFROUVNZU1xlVU9TVFFOS0lIQz9BOTk4ODk3ODg1NzU3ODU5OUducnR4eHl7e31+fX18e318fn5+en1+fH1/f359fn59f358dHR1e3hycW9vbnR4cXJzeHZ1cWZkZ3JucHBxbm1kXV9fWVdPUFhWVlNUVk9PVVZYWFlTVVRMS1RWVVVVV1BUVVdUVVJdbl5STllfW1ZZO0RWWFRbZkpMT1JST01NTk5OTEpGUVBVWVNUT0pOT1VTVFxWUlVTUk9NTElISEY/Pj06Nzg3NjU5OTY3Njc1V3BwdHd5ent8fX59fnx8fXx+fX15fX18fn5+fXx8fX1+fXxydnF4eHJ2dXFxbnBwb3B1dnRuamRkanBwcXJwbmZlZGNcXlJUWlZXVVRXVFJYWFlZWVJVT0lHT1BPT01SSk9QT1BOTk9UTE1JUE9TVFUyPVhNSUBRPWNhUVNRUE5QUVBOTk1RTlRSUFJNSUxKT1JQUlJTVFFST0xMS0xMSENCQT06Ojg3NjtCNTU2Njpkb3J1eHh7fHx9fnx9fH19fX18e3h8ent9fX58e3l9fH18e3B1b3d1cHV0b3N2cHFxcHR1dmNqZ2VXaHRycnFuaWlocFZWVFVYVVdVUldWVVpZWFdVUVNGRUFGR0dIRkpESEpJR0VITEhLSUZMTVBNRy9FX1I+Mz8+am9hUlJRQEdVUVBRUFFOUU9QT0xKTExPUE5OUFFRTlBPSkxNTUtHRUVEQjs9PDw5PUc2Njc3RG1wdHZ6e3t8fX18enx8fX5+fXt5dnh3eXl8fXp6dn17fHp6b3Fud3JwdnFtcHNwb3Bzc3N0ZmdgaFpXa3JzcmxtbWtuYWVQU1RSU1RPV1ZWWVlWUVFRT0A9Oz0/QUJBQ0BCRURBQEdIR0hFRkhKTUtFR0NPUkM4RU5TXWZTUVNBR1VQT1FRUE1NTk1LTEtMTk9PUU1PT01ITExJS0tMS0dGRkVEPEFBPjtARTs8ODlTcHJ1eXt6e318fHt5fHp6fn58e3V0dXJ2dnp6eHpyfHt8eXltcW94cnF1bm5xcm9vb3Rzc3J1dGtnZ15lam1wa29xbWltY0xPT01RU0xUVVRYV1VNTEtJPDk4Nzs/QD48PUFAQj0+RUhHQ0ZGSUdKSkBGQUFARkhFSk9IUFJhXFFQUk5TT09QTExPTUtNTE1PTltXS01RT0dJSENISktMSkZGRkQ/QkM+PEJHP0I/QWRwdHd7enp7fHt6end7d3l+fnt7cXN0cHJzd3R4eHN6e3l2d2xxb3ZxdHRsb3Fybm5vc3ZydHNycmtsZW5zaG1ubWxtbGprSUxISE9RSlFTUVRTT0tIREQ9OTc3OT9CPjs/QkBAPkFESUVDR0dJRklFQkI/Pj1DQkFHSURNT2JlUU1OTldLTE1LTE1NTUxLTk5TZE5KTFJJSUlFQUhKTE1OSkdJRkJBQkA/RUZFSERLbm92eXl5e3t6fHp3c3h0eHx8eXpucXJtbm9ycnZyc3h8eHZ2bXBtc3B1dGxwcHJvb29ydnVyVlZucWdseYRqbXFybm5qaG9ISkNHTE1JTVBNUE9ISkQ/QT05OTk6P0I/PEBCQkFERUdLRkNISUdHSENDP0I/P0BBPkRFQ0tOUlRMSklNVEZJSUpMSktMSUpMTU9QUlBLR0NMR0NCSkpMTU9OSUpJR0NDQ0RJSk1MSVlybXd5eHp7e3l8dnJwdXJ0eHl2eGpxbmpsbG50dG10dXtzdHhyb25xb3ZzbnBvcnBvcHN0eWpOYGdzanR8eWdvc3FpcWhkcUhLREdISEdKS0lKS0RHQj0+PTo6OjtBQj89QkJDQ0dGSUxKRElJRkdHQ0M7QUBCPkBAQkVDSU1QSEhLR0hLREhJS01ISkxISUpLSk1cUkhIRE5GQURLSk1NUE1LTUpLRkdHSk1OUU5MYm1pdnZ3e3h7en1xbWxza3B0dHR1aHBtamlra3RwbnR0eXByeXRvcnFvd3NvcXB0cnBydXR5a05WbXVscXt2aW5vaWt0Z2RvRktDRkVHRUZGR0VHQkNAPTw9OTo6OkBDQD5CQ0RFSUVJSkxGSUlHRkZEQjtCQ0M+QENDQ0VHTE5IS05IREhFSUxOTUhJTEdGR0lJTE5LSUhFTklCRk1MTk1PTU5OTUtJSElPUlFSTlJmZmZxb3N4dXt6fGxoam5la3Fsc3FmbWxoaWtsdG1wdXR3cW94dG90c3J2c3BxcnRzcnR1dXZ2WFZ1dWtvdHJrb3ZsaG1lX3BHSkRGRkVDQ0NFQERCPkA/Ojs7PTo9PkNBPkFDRUZKRklIS0hHR0dGRUNAPUVFQj5CRENDRUdISUdNUEpGRkdLTk9LRkhKRkVERUlKSEtJRkhQS0NJTUxQTU9OT1BOSkpITVJVVFJPV2RgYW1ncHJvcnl6Z2VoaGRpbGZxbGZsbWdpa2xzbHB2dXRwbnZyb3Nyc3V0cXNzdXRzdXZ2dnl2dXR3bGp1dW1ydnFsbmxlckxHRUVHQ0JBQkQ9QkE+QT05Oj0/Oj0+QEI+QEJER0pGSkZJSEZGR0VDQkFBRkZDQkNCREVFR0dIRkxRTElPSkpMTElHSEVHRkRDSUlIS0pHS1JNQk5PTVBPT09NTk9LS0tQVVdWVVRYX15caWFtaW5ocnNiZWZlZGloZm5pZm1taGtrbXJpcXZ1c3Ftdm5vcXJzd3Nyc3R1dnZ2dnd2d3Z2dHd1anN1bnV0c3FyamtzTUdIRkhCQkBERDxBQEBDPDg5PT45Pzw/QkBAQERGSEVIRkZIR0ZGRENFQ0RJRUNGRUJFR0VGR0dFSk1LSFFNSktISElFRkhJRkNJSklLTUtPU05EUVJQUVJOUE1OUE1MTVNXVldYVlhdWl1kYGhiamlna19lZWZjZ2dna2dna21rbWxwcWd0dHVyc252b3FwcnR4cXNzdXZ1gpF5dnZ0eHV1d3htb3VvcnN1cXFpb3lNSEdISEJCQkZEPD9CQkQ8Nzo+Pjo+OkBCPj8/QkVGREZEREhGREVDREVGR0pFRUpHQ0dIRkhHRUNGSkpHTUpMS0hKTEZJSUtIRUtLTE1OT1JUT0hTVVNQU09RTU5RTk1QV1pWWllWWl1aWGFgYGBeaGVjYGRmaGdqaWhqZmhubGxubXFwaXV1eHJycHVwcHBydXZwdXN1dnV7fn14dnR3dnZ2eHBsdXBtc3RucHJyeE5JSEdJQ0FDSEU8QEVCRT04Oj4+PTw8QUI8Pz5BQkZDRUJDSEVDRUVGR0dHSUZHS0hDSUhHSUdGREhLSUdLSE1LSktMSExLTUtKTkxPTk9SVVZPS1VXU1FTUVJMT1FQT1RZWllcWllbXl5eYGNeXGFja2JgZGdocoVoZ2pmam1ucG9uc3JqdHV4cnNzdHJucHF2cnF1cnV1c355jn11dXZ2dnZ4cmh1cWtydGxxdm90TUlLSEpGQkVHRTxAR0NEQDo8PkA/Pj9CQTxAPkFBRkJFRERJRUZFR0VISEZISElLSUVKSEhLSEZGTElISEpHTExMTExJTUtNTU1PTFBQUVVWV09LVlZVU1NRUUxPU1JQVltbXV5bXF5fX2FgYWRdZGBlZmBlaGpjc3NmamhnbHBycW9zc25zd3dxdXZ0c21vcnVvcnNwdXJ2cnSBdnV1dXd2dXd0Z3Rya3Fya3J2bnZKS0xKTEdCRURFPEBGRERDOz8/QUBAQENBP0I/QUNIQkZFRkhGSUZGRElIR0lISk1ISEpKSUxKRkpLSElKSkdLS01NSkpNTE5OTlBMT1BSVFhWTU5UVlRSUlFQTE5UU1JXW15eX11dYF9gYWFfYWNlYmNoYmRpamd2i2xqaWdtb3NxcHFwcHJ5dnJ1dXRzbW1zc21xcm90dXRycHN3dHV1d3Z1dXRlcXNrcHFqcnZvd0tNTEtNR0RDQUQ8P0VFRUM9QUFDQkJDREFDREFBRUdDSEdHR0ZKR0RHSkdHSkZJTEhJSk1LTUxHS0lIS0tOUUtSUU1TTUtOTk9QUE9UT1dYWFtOU1FXXFpSV1BOVFVUVFhaX2JiX2RhXmBiXmBlYWFjaW5nYmloaG54dmxoaW1vc3JwcXJycnZ0c3Vzc3Nua3NxbXByb3R2cnFxdXZ1c3d5d3V0dWNtdGtvcGpxdG93TE5MTExHRUFARD4+REVGQ0BDQUVEREZCQ0VHQ0NIRUNISUlISUtHREtKR0hKSUlLSEpKTkxOTElMSEpMS1pmSmRcS2xTSE9OX25Va3NbcXBid2NTUGJ2dWh1Y2F2YFhucWJkdmluemZbbHRgbGtUX3d2aWpnaWZnbG1qbW9qbW5zcnBycnFyc3Jzc3J0cm5sdG9ucHFxdXVxcXN0dnZ1dXl3dXR0YGt0a3Bwa3FycXlMTkpKSkZDP0BCPz1ERUZEQ0RCRUVERkJGRkdEREpFRUpMTEpMTEdHTUlHSUtIS0tJS0tOTE1NTExJTE1MW3NiZHBebG1VTU5mc11nZXFsbnRncGlfYVlubmJwcGJrampnb3F0ZXRub1xvdWdwTUpyeXZrYmBrZWVteGxrdm1ucHNycHJxcHFycXJycnRybW1zbm5vcHJ1dHFzc3R1dXV0d3h2dXRibXVrcHBscnJxektMSUhHRURAQkJAPkNGR0JGQ0ZFRkVEQ0hIR0RFS0hHTE1OS01NRkpOSEpLSklMSkpKS0xNTk5NTUpNTU1bcm9vbnBwbGtNUFFsV05pYnRycGFtbnVcWWxRXG1tWnFta29teHh0c2lwXF9ya3FqVXV5eHBjXmtmYmdwcGpqb3BwcnNwcXBxcXJycXFycnRsbXJtbm5vcnV0cXRydHV1dHV1enZ1dGVudWtwb2xzcnJ5SUtHSEVFRUJCQj5AQEZHQkdESUVFRUJGSUhIRUdMSkdNTU5MTU5HTE1JTEtJSk1JSklKS09QT05NS05NTFxoZHVdbHFXbE5QUW1VWmtea2x2YWxkc1NlY05tWWxcdHBraWx4and1aHBdXnJraFdiY3d8b2NgZ2dhZGl0eWtubnFzc3BxcHFwcnFwcHBydWttcW1tbW9xc3Rxc3J0dnZzd3Z6dnV0aG91bHNvbXNydHZITUdJREVFQ0FCPEJBQkZESEdMSEVDQ0hLSEhGSkxMRk5LTFNSTEdMTEhOSkhITkhKSklITk9NTkxKTk1KWnNwcG9xcW1sT1FSbllxa2dvb3Fxb210XW5YYXRfbm9wb3Fyb251c3R0altddGN3eHJqbnpoYWFjZmJiam10dXBzdXZzcXBwcW9ydHt/fn13bGtxbmxtbnByc3F0dHN1dXR4eHl4dHVrb3VtdG9uc3N2c0hLSElCRUVFQUA9Q0RCR0NISU1JRkNGSkxJR0ZKTUxGT0pLV1JLR0tKSk5JSEpMSUtKSUhKTU1NTUlLS0tTa2JaaV5faWNyclpfWWpvX2VlVWtfY1thYVFgbGhdalxuaWlkW3BmZHBdWlxrW21xY3BzbGRnY2RnYGBrbXBwb3R5cnVxb3BxbnmFiIeHhoWAdnNua21tb25xcnR0cnR1dXZ5eHhzdW5xdW53cXJ2dHdyR0dGSURFREZBQEFFRURHQkhKTEhGREdLTElFRkpPTElQSUxbUUpFSEhLTUlISkpKS0lISUdLS0tMR0hLS0xMTEtJS01OVFtcVFBUTFBPTk9PVlFPT1FOT1FKSU5QUWRxaVRZV1xbXFVZWl1YXVxcY2ZhYWViY2ZfX2ZrbWhtdHlydHJvcHB0hoeGhoaFhYaHg3pwbW1sa3FzdHRydHZ0dXl4eHV2cXJ1b3ZydHN1dXNHQ0VHRkZBRUNAQ0hERkdDSUtMSEZER0tMSERHSVBLTE9LTFdMSUVFSElKSElLSExKSEZHR0lHSElFRkxJSktOTElQXFdeUFxbYF5NWFlTXFxiXk1ZWk1YYVJKWWFaUl9kXGFYW2RkVlZYXFlaWFxWWVxdYl5kYGFfZWhrZ210dHFxdHBxcoGGhoaFhoWFhYaGhoR9cmtpb3Jzc3N0d3l5eHl4d3h0cXhyeHNxcnVydE9CQ0VMTUJEREJFSUVHR0ZLSktIRUVKSktGRUhIUEpNTUpNU0hHRUFIRkpJS0tJTEpIRkVJRkRGR0VFSkhDSk1LTFVfWWBYYGFbYFRYWVReXlpfUllcUF5cWU5eXF5TWl5jXlpdYGNgWV9iW2BeW1RYV1leXWNiY2FjZmhla3Jwb3Bwbm93hoaFhYaCe4CFhYaGhYaFf3VxcHJyc3Z5eXp5eXh4eHdyeXZ4cnF4dnR2YVNKSk1JREJCQ0dIRUhHSEtJSUlERktLS0ZGSUpOS05MSExOR0hGPkdHTElLS0pMS0lHRUlEQ0REQkZKREBKTEpPW2NZX15hX1JUUldfYFxdWV5RWVxNVl9XS1FZW1BaX2FhXV5jYWBiYmJjY2VaUVlWVVxZXWNgX19jZGJob21ubGxsbHWFf4SDeXV8hIWFhYaGhYWGhoN9d3JydHd5eXl5f359eXV5dnZybnp3dnhYUUtGQ0dFQkVISUZHSEhGRkpHSEZIS0lMRERLSk1NTEtISkpISkY/R0ZOSktLTUtLS0lHR0NEQERBSElCP0lKSFBdYVpbZF1fVFFSWF1cXFxfWktXXExSXFlJTV5RT1xfYWNjY2NiXGRjYmRjZlhRVVRSW1daYF9eXmFhX2Rsa21qamxudn51gXp8hIWFhYWFhYaGhYaFhoaGgnpyc3V1e4WHh4eGhYSBfnhwend2eFxSTUNASUZDRktKRkZGSEdGSUZGRklMSk5GREtKTE5KTElLSkhJRkJISFFNS0tPTUtLSUhHRUQ/RUNISEFBR0ZFVF1ZXlhfWV9bXVVYWFBdXVFLSlZeWF5bXVVZYFJRX19iYmBgYmJgY2JhZGRiWE9RUVFaUltdXV1dXl9fZGhnbGpubnB7e3x+e4CCg4SFhYWFhYWEhIWDhISHh4FzcneFh4eHh4eHh4eHh4WDgHx4XFNLQ0FHRkRHTVJIQ1FKRkhISEVGS0pNUEVGSUpLTkxMSUxMSUlHREhLUU9NTVBMTUtLSElDREFFREhHQkFHRURXVUVcVF5TVl9YTlRVTlpaTUpLVGBhW19YXl5hXU5ZYlxgYF9iY2JdYWJXX19UUE5PT1dRXVtbXFxeYGJmZmVsZm9vd3x7gHt9f4CEhISEhIWFhYODhYKDgoWFhnpvgYaGhoeHiIeGhoaFhYSFg35JTkZERUZHRElSYlBDVl5JR0dIREZNSlBQRUlJS0tOTEtLTEtKSkdFSk1RUU5PUE1OTE5IS0FEQUNERkRDQUVGQk1IQktMUE9OTEZNRkdJSkhHTEtNT1BJTE9QT1NPTFFTUlVaWVdZWFhkV09TVFBQTk1PVFNbWFhaXVxgYWRlY2dja2xwc3J6eX97en+EhISEhISEhIKEgH57gYOBfXuFhIaGh4eHhYWFhISEgoGAfUtJRUVHRkdES01dTEdHWExHSEpIR01MUVFJTEtMS05NVU5PS0tMR0dLUFNTTlBPTk9OT0hLRmBFRF9MRGZjRU1bSV5bcm1PTVVtWUxDUGBVa1dnSl1XVV5ETFFVTExTVlFSVFhXVFhVVFxVUGZaaGhkWFJqU1dWVFtcW2BgYWFhYmBmaGZua2hyenx9foGEhISEg4ODgX18enJ7gXp7f4KAg4SEhYWBhIWBg4N/fnp7TEhFR0ZIRUVLT1NJSkZgU0hKT0pJT01SUUtNTExPUlVST09KTE5HSE1RW1lPUFBOT1BPSUpRf1FJfFlZcXNYUG1IcW5vYVZQcXFzUENrc21xc3BTb19bblhdVlxYVWtoVV1WY1pgWVtgVlZYf2p0dXVfX3ZfWGFbXGZbX2FhYWFeYGJnbXBsYHB3dHiBgYKDg4J/fX6Adnh6bHZ+dHh+gHx+gIGChHyAg3p/gX9+d3dOSUVITU5CRExMRklLRVFWTEtPSUtSWFdRTk9PTVFUTk9RUEtLTkdNUFNbWlRRUk9QUFBKSFp4XVR4ZWhaUlRRdmd0bHBibmZqUXJPTXdtanJwc3JxcnBvb4BdZXp1eHFxenF+c31rdX1iUmh8ZXNzb3Nye3xvfXlvf3JfYGBiYVpgYGdrbmtibGZnbXd+gYCDfnt4d4B0dnppcn5udHx+d3h7foCDeHyAdXx/fHxzc05LRmBdR0FFTU1ISkpHSlBPTU1KTlZeWVVMUVNOWFpNU1NSTktPSVFSU1lXV1FUUFBQUUtIZ3hsY3hybVtLTVV5cHVtdWJudlBkZUpmdnFtd2+AamZ4eGlXclFoem1panp6fWx4en9vaG9ZdnZqdXVwgWByZ3xpbHh8b15fX2JhW11iZGdpaWRnYmNkbGxwcHN0c3NzeXFyeGJsdWdyeXtzc3V5foFzdXpufH15eHJuTktTdE5DQkVQUEhKS0pLUE9PT01QWmBaWEtUV1BhXlJWUVlSTE9JU1RVWFdXUFVQT05SSktyb3V1cXVxZGliV25McXBeRmh5V3ZUTGl5fXhgeXtzbmFdbW9jUmhxdW5teXB3bHZ0dHFsbV10fnprbXl8a3RsfGtwdnV4Xl9fYl5dX2RkaWdoZWVeYWJpaWlqa25va3FubWpwYWNmZG93eG9tcHN5fm5xcGp7enRyb21MTFtWSEdFR1JQSUxNSktQUVBQUFFXXFhVTVVZVWZYUlJZXlNMTklUVFZXWVdPU05OTlFIUm1IaXdLYGR2dlZYbE9ubHtzYWpnfnZVTFdraH1sbWx4X1twenteYHpzY3JveHFoZXxpcntdVUxsYHZ1a2l1e3ttfnhrfHBdXl5iW19iZGRnZWVlYlpjY2lra3JzcndnbGloZGdgYWthZ3NybGdtbXJ8a21oa3t0bW1rbU9ISktISUlIUVBMTk9MS1JSUk9TUldSVlRQV1tWVlRUVGFgUE5NS1RTU1FVVk5OTE1PUEpIUU5QVUxLS1NUU1JUUFZVUVFOUVFYWFJOUFVUWFhYW1pVUlNXW1dYV1pPU1VXV1hSXVlXXVZUUFlSV1dXV1heW2dyXltbWVxdX2NaX2NjZGZkY2NiWmNjZmZlbW5tdWVlZ2NhZl9dZ2BkbGhmZ2tocHpoZ2drdWpoZ2lsUUlLTExNS0pTUU1RUE9MVlVUUFRVWFVZVVFaXVZVVFdVWVhQT0xNVlRQTlVTTk9NTFFQS0pSUUtRTUtLT1JVUlFRU1NJSExOT1FSUVFRVFZSWFdcV1NTUFFVVVZTWlFPU1JXVlRZVlRZVVRSVVRUVFdYV11aXmFdXFpaXFxgY1tdYmNkZmRlZGFZYGFjYWJoaGluY2FkXl9jXVpkXGJtYV5mZWZtc2RpaGtrZWRjZmhQSktMT09MTVNQTlNRUU1YV1VUVVdXV1pVU1xgVldWWVVYU1FQS09XU1BOVVBOUU5LU1BNT1VTTlJOTU5RVFBUUVNUVU5LTU9RVFRSUlFWV1RZWltZU1VSVFdXV1lbVE9UVVhVVVpVV1lVUlJYVlVXW1laX11VWF5cXl1cXWFhXltiYmNnZmRkYlhfYWJeYGhlZmRhXl9dXV5aWl9aX2dgXl1dYmhrYWdmaGZkYGJjYVBLTUxQUUxPVE9PU1FPUVpZWFdYWlpYWVZcamRWWFlaV1ZTVE9KTlZUUE9UUFBQTk1RUVBSWFRRUU9NT1NWTldSVFVVT05NUVNVVVRUUlRXVlpdXFpWV1FSV1hWW1tXUVRWVlZWWVRYWFVSUlhWVVpdWV1fXlZeXV5gXFxgX19fWmJiZGhnZGRiWWJgYl5eZmNjYGJdXFxcXFlaW1hbYVteXVxfYl9fYmRlYmRfX2BcUE1OTlJRTVJST1NUUVBVXFpaV1tbXFlaW2RxbWhkXltZVlVXUUxNVlNNTlJPUVJPTFBTUlVaVVNQUExQV1ZRV1NTU1hNT1BSVFhWVVVTVVlYW15dW1tWUk9VVlZbW1dSVFdWV1hWVFhbVFNSWldWXF5aXl9gVWFcYWFeYGJfXWBdY2BjZ2hkZmBaY2BhX19lZF9gY1taXFtcWVpYWVdcWVxbYF5fW15eYWBeYlxZYFpRTk9OVlFQVFJPVVRTUFdcXVxYXlxfV1xeanF3eYBiXFtWVlhRTU9WU05RUVBSVFJLUVRUWFpXVU9STlNYV1RTVVJSWk9QU1NWW1ZWV1RWWlhdXltbXlZTTlRVVlxcVlJUVlZYWVNUWVxUU1NdWFpdXlxgYGBWYltjYl5hY19cYmFiX2NmaWRmXltkYGFgYWNkX2JfWVpeW1xbWVhZV1daWlphXF1bXVxcWl1gV1tbWlBPT09ZUFVVUlFXUlRQW11eXltgXGBVXF1panJ9c2xnXFVYV1BOUlpTUlFTUlRVVEtRV1ZbWlpTT1NSVlZWVE9XUlNaUlRUVFhdV1hYU1hcWF5dWVpdVFVOVldXXltYUlVVWVlZVVdZXFRTVl5ZXV1gXWJiXllfW2ViX2RkXl5jY2FeZWZpZGZeXmRhYGFhYmRgYl5YWl9bXFtYWFhYV1taXGBcW1tcW1haW15WXlldUE9PUlpQWlRVVlZUVFReXmBfXmJcYFVdXmJreXRsfWxaVVlVUVBTXFRVVFVUVllXTFJaV11aXFJPVVNYVlZUUFhSU1dTVlVVW11YW1lVWl5YX15ZXFlSV1JZWFlfWlpUVVZaWVpXWFpcVlRaXlxeYGFfZGNcXl1dZWFhZmReXmRjYFxnZGhlZGJfZGFfYWBiYl9gXldYXlpcXFpZWVdWXVpdXlpZW1xbV1lcXVZYV11TT1BXWVFdVVZZV1dVWF9fYWFgY11gVF1fYmVldYF6aFhZWVNWU1ZcWFdXVlZXXVhPVV1aXl1dVFJXU1dWVFNUWFJTVlRYWFhdXlhdW1ZdX1hfX1hdVlFZVFlaWmFZXFVWWFtaW1lZWlpYVl1fX15jYmFkZFxiXGBmYWRmZF9gZGJiW2ZjaGVjZmFmX19hYWFhYF9eVlVdWVtcW1lbWVldW1tbWFhZW1laWl1fXVRZXVVOVFpWU1xUVldZVlZcYGFiY2FjXl9WW2BkYV96dW9oWVxaVVhUV1taWVxZWFlgV1BWXlxgYVxUVFhQVVdWVFZXUlNVV1paXF9eWl9cVl9fWl1eWV5WU1lXWVpdYlpeVldbXFtcW1tZWllaX19gYGRiY2RlYmRaYmZjZ2ZlXmFiYGNeYmNpZGNnX2deYmJjYWFgXl9YVFtaWltbWFtYWFxbWltXV1lYV1xbXGBdVl1dU1BWWlZWWlVYVVhXWF1fYmFkYWRgXllZYWRiYGxmaF5cXVtWV1hZXFxcX1tZW2JWVFheXWFjXFJWWVBXVldXV1ZUVlRYXFxeYGBdYVxXYV5bXlxbXlhWWFhbW19gXF9YWV1cXV5eXFpcWFtgYV5gZGNkZWVmYlljZWVoZ2ReY2FgZWNdZWlkZWlfZ15jYmNhYWBfX1tYWVtZWlpYWVhXW1taW1dYWlRZXVxaYFxVXmJOUldZVldaWFtcWFdZXmBiYWVhZGFdXllhY2JfYWBgXlxcXFdXW1tdXV9fXFpdY1haWF1gY2RfUlhZUFdXWFlZV1ZXVl1dXmBhYF9iXllhXV1eWV1eWVhWV1tcYF5dX1paXl1eXmFcW1taXF9iXmJkY2VmZWZiWmRmZmlnY19jX2FmZVppaWNmaWNlXmJiY2FgYF9dXVpXW1lZWFhaWFdaW1pZV1hWVVtdXV1gYGJieExXV1xZV1xbXF1aV1xdX2BiZGJiYV1gWGJjYmFjYWJdW1xbWFdbXF9dYF9dW2BkXFxYWmJlY2BSXFpPWFhaW1taV1pZYF1gYmJgYWNfXGJdX11bXl5ZWVVYXV5fYF9fXFpeXmBiY1xcV1xeYGJiY2VkZmRlZmRcZWZnaWZjYWJcZGdgXGlpYmhpZmVgYmFjYV9gX11dW1lcWVhXWFlYV1xbWldXWE9YWl1hY2Zmcmt/SllXXVpaX1xbXlxYXVteX2FjYmFhXWJbYmRiYGJiYlxbW1pXWGlxYFxgX11cYWNfXllZY2VkYVNfWlJZWFxdXVtaW1tjYGJiY2BiZGFgY15gXF1eX1pYVltfXl1hYV9dW2BhYmViX11UXGBgY2RkZmVnZWZmZV5lZmhoZ2RkYFtlZ15haGhiaGhmY2BiYGNiX19fXV1cWltZWFhYVlpWXFpaVlZVTVhXXGdpa2h1eIF2dnZ2dnZ2dnZ2dnd3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d4eHh4eXl5enp6enp6e3p6ent7e3t7e3t7e3t7e3t7e3x7e3t7e3t7e3t7fHx8fHx8fHx8fHx8fHt7e3t8fHx8fHx8fHx8e3t7fHx8fHx7e3t7e3t7fYmIhoqHhYKBgoOCg4OCgoKCgoKCgoKCgoGAgYCBgICAgYCBgYGAfnx8fHx8fHx8fHx8fHx8fHZ2dnZ2dnZ2dnZ3dnd3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3h4eHh5eXl6enp6enp6ent7e3t7e3t7e3t7e3t7e3t7e3t7e3t6e3t7e3t7fHx8fHx8fHx8fHx7e3t7e3t7e3t7e3x7e3t7e3t7fHx8fHt7e3t7e3t8iYmHiYaFgoGCgoGCgoKCgYKCgoKCgoKBgYGAgICAgICAgIGBgYB9fHx8e3x8fHx8fHx8fHx8dnV1dXV1dXV2dnZ3dnd3d3d3d3d3d3d3d3d3d3d3d3d3d3d4eHh4eHh5eXl5eXl5eXl5eXt7e3t7e3t7e3t7e3t7e3t7e3t7e3p6enp6ent7fHx8fHx8fHx8fHx7e3t7e3t7fHx8e3t7e3t7e3t7fHx8fHx7fHt7e3uHiYiJhYSDgYKCgoODgoKCgoKCgoKCgYGBgICAgICAgICAgYKBgH58fHx8fHx8fHx8fHx8fHx2dXR1dXV1dHV2d3d3d3d3d3d3d3d3d3h4eHh4eHh4eHh4eHh4eHh4eHl5eXl5eXl5eXl5e3t7e3t7e3t7e3t7e3t8e3p6enp6enp6enp6e3t8fHx8fHx8fHx8fHx8fHx8e3x8fHx8e3t7e3t7e3x8fHx8fHt7e3t7e4aJiYiFhYOBgoKCgoOCgYKCgoKCgoKBgYGAgICAgICAgIGBgYCAfnx8fHx8fHx8fHx9fX18fHjF1NLS0tLUk3t9fX19fYSMi4uLi454KSkqKiopKz0/Pj4+Pj5tgH5+f397pdfT09PT1r2GiYmJiYmJjI2NjY2Ni7DBvr6+vr3K09LS0tLWun1+f39/f359fHx8fHx8fHx8fHx8fHx8fHx7fHx8fHx8fHx8fHt7e3t7hIuHh4aHgoGDg4GCgoKCgoKCgoKCgoGBgYCAgICAgICAgYCBgIB+fHx8fHx8fHx9fXx8fH19eNXn5OTk5OeZe39/f39+hpCPj4+Pk3kZGhoaGhocMTMzMzMzMmqCf4CAgHut6eTk5OToyomMjIyMjIyPkJCQkJCOu87Ly8zMy9vm5eXl5enHfX5/f39/f319fXx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx7e3uCjYeIh4eDgoSCgYKCgoKCgoOCgoKCgYGBgICAgICAgICAgICAgH58fHx8fHx8fXx8fH19fX12fn9/f39/f3l3d3d3d3d4eXl5eXl6eG9vcHBwcHBycnJycnJyd3p5eXp6en6Dg4ODg4SBfHx8fHx8fX19fX19fH2AgoKCgoKChISEhISEhYJ8fX19fX19fX19fX18fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx7e4CMhomHh4SDhIKCgoKDgYKCg4KCgoGBgYGBgYCAf4CAgICAgICAfnx8fHx8fHx8fX19fX19fXZ0dHR0dHd0dnd6e3h7eHd2eHt4eXl5fXp5eXh4eHh5eXl5enp5eXl5enp6eXh4eXl5eXl7e3t7e3t7e3t7e3p6enp5eXl5eXp6enp6enp6e3x8fHx9fX19fX19fX18fH19fX18fHx8fHx8fHx8fHx8fHx8fHx8fHx8f4uHi4qIhIODgoKCg4KBgoKDgoKCgYGBgYGAgIGAf4CAgH+AgYF+fX18fHx8fHx9fX19fX19d3d3dnZ3fXh3d316eH14d3d5fHx7fHt9fHh3d3d3eHh4eHh5eXl5eXp6ent7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7fHx8fHx8fHx8fHx8fHx9fX19fX19fX19fX19fX19fX19fHx8fHx8fHx7e3x8fHx8fHx8fHx+iomMjImFg4SEgoKDgoGCgoKCgoKBgYGBgYCAgICAgICAf4CAgH19fXx8fH19fX19fX19fX13d3d3d3p9eHt4fHx3e3h3d3d5fX19fX59eHh4eHh4eHh4eHh5eXl6enp6e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3x8fHx8fHx8fHx8fHx8fHx8fX19fXx9fX19fX19fX19fX19fHx8fHx8fHt7fHx8fHx8fHx8fH2Kio2NioWDg4SCgoKCgYGCgoKBgoGBgYKBgIGBgICAgIB/gIGAfXx9fX18fX19fX19fX19fXd3d3d3fX55d3d4e3p7eHd3d3x6fXx9fnx4eHh4eHh4eHh4eXl5enp6ent7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3x8fHt8fHx8fHx8fHx8fHx8fH19fX18fH18fH18fHx8fX19fX18fHx8fHx8fHx8fHx8fHx8fHx8foqJjo2JhISEg4KCgoKBgYKBgoKCgYGBgoGAgYKAgICAgH+BgIB8fH19fX18fX19fX19fn5+d3d3d3d5fHl7eHx9eXt5enp6fnt8fHt+e3h4eHh4eHh4eXl5eXp6enp7e3t7e3t7e3t7e3t7e3t7e3t7e3x8fHt7fHx7fHx8fHx8fHx8fXx8fX19fX19fXx8fHx8fHx8fXx9fX19fXx8fHx8fHx8fHx8fHx8fHx8fHx/iIeNioeFhoaDg4ODgoGBgoGCgoGBgYGCgYCAgoF/gICAf4CAgHx8fX19fX19fX19fX5+fn53d3d3d3Z4eHl3eXp4enh5eXl8enp6eXx4eHh5eXh4eHh5eXl5enp7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t8fHx8fHx8fHx9fX19fX19fX19fX19fX18fH18fH19fX19fH19fX19fHx8fHx8fHx8fHx8fX+HiIyIhoeHhIKDhISCgYKBgYKCgoGBgYKBgIGBgYGAgIB/gIGAfHx9fX19fX19fX1+fn5+fnd3d3d3d3d3d3d3eHh4eHh4eHh4eHl5eXl5eXl5eXl5eXl6enp6ent7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7fHx8fHx8fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fHx8fHx8fX19fHx8gIeIi4eHiYaDg4SDg4KBgYGCgoGBgYKCgYGBgIGBgYCAgICBgX97fH19fX19fX19fn5+fn5+d3d3d3d3d3d4eHd4dnl5eHh4eHh5eXl5eXl5eXl5eXl5enp6enp6e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7fHx7fHx8fHx8fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fHx8fH19fXx9fXyBhoqKiYmIhIOFhISCgoGBgYGCgYGCgoGBgYCAgYGAgIGAgIGBf3x8fX19fX1+fn5+fn5+f394eHd4eHh4eHZxZGpeam15eXl4eHl5eXl5eXl5enp6enp6enp6enp7e3t8e3x8fHt7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3x8fHx9fHx8fH19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fIGFiYqJioeEhYWEg4KCgYGBgoKBgYKBgYGBgYCBgYCAgYCBgIF+fH1+fn5+fn5+fn5+fn9/f3h4eHh4eHh5bWRiZV9fXm95eXl5eXl5eXl5eXp6enp6enp6enp6e3t7e3t7fHx8fHx8fHt7e3t7e3t7e3t7e3t7e3t7e3t7e3t7fHx8fHx9fHx8fH19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18goWKiomJhISGhYSDg4KBgYKCgoGBgoGBgYKBgIGBgICAgICBgH58fX5+fn5+fn5+fn9/f39/eHh4eHh4eW5kZWdlZGJeZnh5eXl5enp6enp6enp6enp6enp6e3t7e3t7e3x8fHx8fHt8fHt7e3t7e3t7e3t7e3t7e3t7e3t7fHx8fHx8fHx8fHx9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXyChouJiIqEhYaEg4OEgoGBgYGCgYKCgYGBgYCAgYGBgIB/gIGBf3x8fn5+fn5+fn9/f39/f394eHh4eHl3Z2VkZWZkZWFfaXl6enp6enp6enp6enp6ent7e3t7e3t7e3t7e3t8fHx7e3t7e3t7e3t7e3t7e3t7e3t7e3t7fHt8fHx8fHx8fHx9fX19fX19fX19fX19fXx9fX19fX19fX19fX19fX19fX19fX19fX19fIKGi4eJh4SEhoSDg4WBgYGBgYKCgYGBgYKBgICAgYGAgYCAgYF+fHx/f35/f39/f39/f39/gHl5eXl5eWtlYWJlZWFlZV5ieHdze3p6enp6enp6enp6e3t7e3t7e3t7e3t7fHt7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t8fHx8fHx8fH18fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19g4aLhoiFhYaEgoOEhIKBgYGBgoKBgYKBgYGAgYGBgYGAgIGBgn98fH9/f39/f39/f3+AgICAeXl5eXl0Y2NlZGNmY2doZGZsZF5ze3p6enp6enp6enp6ent7e3t7e3t8fHx7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3x8fHx8fHx8fH19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX1+fn6DhouGhoaGhYODg4SDgYGBgYGCgoGBgYKBgYCAgYGBgYCAgYGBfnx8f39/f39/gICAgICAgIB5eXl6d2RhY2diYmRdW2VfYV1eYGFoeHp6enp6enp6enp6e3t7e3t7fHx8e3x7e3t7e3t7e3t7e3t7e3t7e3t7e3t8fHx8fHx8fHx8fH19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX1+fn5+fn5+foSFi4eGhoaGhIODg4KBgYGBgoKCgYKBgoGAgIGBgYGAgYGBgYF+fX1/gH+AgICAgICAgICAgHl5eW9vYmJiZF5jZ19dYWFgXF9kYlttfHp6enp6enp6enp7e3t7fHx8e3t7e3t7e3t7e3t7e3t7e3t7fHx7e3x7fHx8fHx8fHx8fH19fH19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX5+fn5+fn5+fn5/hIiLhoSHhoaEhIODgoGBgYGCgYGBgYKCgYCAgYGBgYGBgYGBgX5+fYCAgICAgICAgICAgICBeXpwXWJlZGJkXmZnZ2BZYmJhY2VfXF1ze3t6enp7e3t7e3t8fHx8fHx8fHt7e3t7e3t7e3t7e3t7fHx8fHx8e3x8fHx8fHx8fHx8fHx9fX19fX19fX19fX19fX19fX19fX19fX19fX19fn19fn5+fn5+fn5+fn5+foCFjIqEhYaGhYODg4SCgYGBgYKBgYGBgoKCgYCBgYGCgICAgIGBf35+gICAgICAgICAgIGBgYF5emxiZGdjYmdmYWBgZGFiZWRjZGNeXGJ1fHt7e3t7e3t7e3x8fHx7e3x8fHx7e3t7e3t7e3t7e3x8fHx8fHx8fHx8fHx8fHx8fHx8fH19fX19fX19fX19fX19fX19fX19fX19fX1+fn5+fn5+fn5+fn5+fn5+fn9/gYeMiYWGhoeFg4SDgoGBgYGBgYKBgoKCg4KBgIGBgYKBgYGCgoF/f36AgICAgICAgIGBgYGBgXp7dGdnZmZkZGZmYF5fYWNlaGRlXmJkYHR8e3t7e3t7fHx8fHx8fHx8fHt7fHt8fHt7e3t7fHx8fHx8fHx8fHx8fHx8fHx8fHx8fH19fH19fX19fX19fX19fX19fX19fX19fX19fX5+fn5+fn5+fn5+fn9/f39/f3+CiYqIhoaIhoWDhIOCgYGBgYGBgoGBgoKCgoGAgYGBgoKBgYKCgX9/f4GBgYGAgYGBgYGBgYGBenptaGNjZ2ZnZWdmZmdiZWRlYmdbYmVgdnx8e3x8fHx8fHx8fHx8e3t8fHx8e3x8fHt7fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx9fXx9fX19fX19fX19fX19fX19fX19fX19fn5+fn5+fn5+fn5+f39/f39/f39/f4SJioiGiYeFhYSEg4KBgYGBgYGCgYKCgYGBgYGBgYKBgoGBgICBgH9/gYGBgYGBgYGBgYGBgYF7emlpZGNqZmFgZmVjY2NnaWRjYmBiZGJ0fXx8fHx8fHt8fHx8fHx8e3x8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fH19fX19fX19fX19fn5+fn5+fn5+fn5+fn5+fn5/f39+fn9/f39/f39/f3+AhIqMiIeJhoSFhYOCgYGBgYGBgYKBgoGBgYGBgYGBgoKBgYGBgYGAgH+BgYGBgYGBgYGBgYGBgXZzZWRnY2RmZWJlZmdkZmhmZWNgYGNkYHF9fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fXx8fHx8fHx9fX19fX19fX19fX19fn5+fn5+fn5+fn5+fn5/fn5+f35+f39/f39/f3+AgICFioyJiIqJhoaDgoKCgYGBgYGBgoGBgoGBgYGBgIGBgYGBgYGCgX+Af35/foCCgoKCgoKCgoKCc3NnZWRkZWlqaGZnZ2NhZmZlZmdmZWVjdX18fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fX19fX19fH19fX19fX1+fn5+fn5+fn5+fn5+fn5+fn5+f39/f39/f39/f39/gICAgICAgIWLioqJioeHhoSCgoGBgYGBgYKCgYKBgYGBgIGBgoKBgYGBgYGAf4B+dHRzdX1/goCAfn5/gYB0cmdkZWNmaWppZWNlY2BmZGRnZ2JiZWFwfXx8fHx8fHx8fHx8fHx8fHx9fX18fHx8fHx8fHx8fHx8fHx9fX19fX19fX19fX19fX19fX19fX1+fn5+fn5+fn5+fn5+fn9/f39/f39/f39/f39/f39/f4CAgICAgIB/houLiouLh4eHhIOCgYGBgYGBgYKBgoKBgYGBgYKCgYCBgYGBgoCAgH5zc3NzdHV4dXV0dHV2dXVwZmNmZWhoaWdoZ2VmZWJfZGVmY2BiZ3d8fHx8fX19fX18fHx8fH19fX19fX19fXx9fXx8fX19fX19fX19fX19fX19fX19fX19fX19fn5+fn5+fn5+fn5+fn5+fn5+f39/f39/f39/f39/gIB/f3+AgICAgICAgICHjIyIi4qHh4eEhIKBgYGBgYGBgoGCgoGBgICBgoGBgYKBgoKCgYCAfnNzc3Nzc3NzdHR0dHNzdW9jY2FnZWhoZ2pmZGVnZmhmY2JlYl5ieX18e3t8fX19fX18fHx9fX19fX19e3x9fX19fX19fX19fX19fX19fX19fX5+fn5+fn5+fn5+fn5+fn9/fn5+fn5+fn5/f39/f4CAgH9/gICBgICAgICAgYCAf4CAgYGAgIeLi4iNiYiJhoSFgYGBgYGBgYKCgYKCgYGBgIGCgoGBgYKBgoKBgIB+dHNzc3Nzc3Nzc3Nzc3N1cmdlZWRlamhoZ2ZpaGdjZWViZGNoZGd7eHVzc3R2dnl4dnR0dHZ3d3d2dHR0dXV4d3h4d3d6e3x9fXx9fn5+fn5+fn5+fn5+fn5+fn5+fn5/f39/f39/f35/f39/gH9+fHt7fX58eXl2dnZ5fHx6end2d3l7fXt4hIyMioyHh4iEhYSBgYGBgYGBgoGBgoGBgYGAgYKCgYGBgoGBgoGAgH51c3Nzc3Nzc3Nzc3Nzc3VzaGVnaGVrbGhqZ2lqZ2dnZmRkYmVkbnV0dHNzdHNzc3Nzc3Nzc3Nzc3NzdHNzc3Nzc3Nzc3N0dHV1c3V3eHl7fn59fn98f39/f39/f39/f314fH5+fXx4dXZ3eXd4dnRzc3N0dXRzc3Nzc3NzdHNzc3R0c3R0dHODjI2KiYeIhoOGg4GBgYGBgYGBgYGCgYGAgYGDgoKBgYCBgYGBgICAf3VzdHRzc3Nzc3Nyc3NzdnZpY2hqaGpsZWZpbGhgZmVkY2BkZGZ0dXV1dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHRzdHRzc3Nzc3R2dnV1d3V4fH9+fX9+fHp4dXN0dXV1dHNzc3Nzc3N0dHR0dHR0dHR1dXR0dHV1dHR1dXR1dXV1dIaMjYuIhoeEhIWCgYGBgYGBgYGCgoGAgYCBgYKCgoGBgIGBgYGAgIB/dnNzc3Nzc3Nzc3Nzc3N2dnNnZ2pmaGdmaGhmZGlnY2NnZWVmcHZ1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dHR1dHR0dHR0dHRzdHR0dnV1d3Z0c3R0dHR0dHR0dXV1dXV0dXV1dXV1dXV0dHNzc3N0dHNzdHR0dHR1dXR1iY6MjIqHh4SEhYKBgYGBgYGBgYKCgoGBgICAgoKCgoGBgYGBgYCAgH93c3Nzc3NycnJyc3NzcnZ2dW5kXWNnZWlraGVoZ2dqamlnZXB2dXV1dXV0dHRzdHR0dHR0dHV1dXV1dXV0dHV1dHR1dXV1dXV1dXV1dXR0dHV1dXV1dXV0dHV0dHV1dXV1dXV1dXV1dXV1dXV1dXV0dHNzc3Nzc3N0dHNzc3Nzc3R0dHR0dHWKjoyMiYaGhIeFgoGBgYGBgYGBgoKBgYGAgYGCgYKBgYGBgYKBgYCAf3hzc3Nzc3JycnJyc3NzdnZ3d2liaGhnamtpaGZkZGVmaWhwdXR0dHRzc3JxcnJ0dXV0dHR0dHR0c3NycXFxcXNzdHR0dHR0dHR0dHV0cnJyc3R0dHR0dXV1dXV1dXR0dXR0dHR0dHR0dHR0dHR0c3Nzc3Nzc3Nzc3Nzc3N0dHN0dHR0dHR0dYuOjImGhYWFh4SCgYGBgYGBgYGBgoKCgYGAgIKCgoGBgYGBgYGBgIB/eXNzc3NycXJycnJzc3N3d3d3bGpoZGhpa3Z6a2VmZWhnbXJzdHN0c3JwcHBxcnN1dXR0c3NycnJycXBvb29vcHFzc3NycnJyc3R0dHNxcHFyc3R0dHR0dHRzc3Rzc3NzdHR0dHRzdHR0dHR0dHRzdHR0c3NycnFxcnJzc3Nyc3NzdHR0dHN2jZCMh4eFhYSEgoGCgoGBgYGBgYGCgoKBgYGAgYGCgoGBgoKBgYGAf395c3NycnFxcnJycnNzc3d3d3dzc2pnaWloeX99cW51bG5wcXJycnFxcG9wcXFxc3R0c3RycHBxcG9ubm1ubW5ubnBxcnJycnJycnJzcXBvb3BxcnJzc3JxcnJycnJycnJycnJzc3Jzc3Nzc3Nzc3Nzc3Jxb29ubm9vcXJzc3Jyc3NycnNzcnaPj4uHhoWFhYOCgoKBgYGBgYGBgYGBgoGBgYGCgoKBgoGCgYGCgX9/f3hxcHBwcXFycnJyc3Nzd3d2dnd2cnF0c252f352c3hwcHBycnJycXFwcHFxcXJzcnN0c3Fzg3Fvb25ubm5ub25vcHBxcXFxcXBwcXJwb25vcHFxcXFxcHBxcXFxcXJycnJycnJycnFxcnFxcnJycnFwb29ubm1ubW5vcXJycnJycnJyc3JxeI+OjYaDg4aEgoOCgoGCgYGBgYKBgYGCgYGBgYKCgoKCgoKBgYKBf4B/d29wb3BxcnJyc3Nzc3J2dnZ2dnZ3dnZ1c3l/fnd3d29wcXFxcXFxcHBwcXJycnN3c3Nyb4ORb29wb29vb29vb29wb3Bvb29vcHBxb29vcHBwcHBvcG9wcHFycXFxcnJycnFxcXFxcXFxcHBwcHBxb29ubm5tbW5tbm9wcXFxcXFxcXFxcXB7j42NhoODhYOCgoKCgYKBgYGBgoGCgYGCgoGCg4KBg4KBgYGAgYF/f392bm9wcHBxcXFxcXBwcHZ2dnZ2dXR0c3NxfYB9fX9zb3BxcXFwcHBwcXFwcXFycZGEcHJwl49ucHBwb29wcG9vb29vb29vb3BxcXBub3Bwb29wb29wcnJycnFxcXBxcnFwcXFxcHBwcHBwcHBwb29ubm1ubm5ubm9ub3BwcHFxcXFxcXFxcIKRjoqEhIOFhIOCgoGBgoKBgYKBgYGBgYGCgoKCgoKCgYGBgYCBgX9/gHVvb29wcXFxcXBwcHBwdnZ2dXRzcnJycnGAgoCBeXBwcHBvcHBwcHFxcXFwcXJwiKR1b3ukkG9wcHBwb3BxcHBvb29wb29vcXFwcG9wcG9vb25vcHFxcHBwb3Bvb3BwcHBwcHBwcHBvb29vb29vbm5tbW1ubm5ub25vb3BvcHBwcHBwcHBwiZCMiISDhIaDg4KCgYGCgoKCgYGBgYCAgYGBgoKBgYGBgYGBgIGBgH+AdG5vb3BxcXFwcG9vcG92dnVzcnFxcXFxcICDg39ycHBwcHBwcHBwcHFxcHBxcXCBr4xth6eScHFwcHFwcHBwcHBwcHBvcHBxcXBwcHFxb29vbm9wcHBvb29vcHBvb3BwcHBwcHBwcHBvb29vbm5ubm5ubW5ubm1ubm9wcG9vb29vb3BzcXWPj4uJg4KFh4ODgoKBgoGCgoKBgYKBgYGBgYGBgYGBgYCAgYGAgYGAf4B0b29vbm9vb29vb29vb3Z1dHNxcXFxcXJygIKCgXRxcXFxcXFxcXFxcXFxcXFycX2uonCPppVxcXFxcXFwcHBwcHFxcXBxcHBwcXBwcHBwcHBwcHBwcHBwcHFxcXBxcHBwcHFwcHFxcHFxcXFxcXJxcnFwcnRycnR0dHR1dnRzdHR0dXd3gpCPi4iDgoaHhISCg4GBgYKCgoGBgoGBgYKBgYGBgYGAgICBgYCBgYB/gHVvb29vb29vb25vb29vdXRzcnJycnJycnKDg4OCdnFycnFxcXJxcnJxcXJycnJxgrKpkKGxknBycXFycXFxcXFxcXFxcXFwcXFxcXFxcnNzcnJyc3V1dHR0dHR0dHV2d3d3d3d3eHh4eHd3eHh4d3Z3dnV2dnZ2d3h6e3x7e3t6enp6enyGkI2LiIODiIeHhYODgoGCgYKBgYGBgYKCgoGBgYGAgYCAgYGAgIGBgH+Ad3FxcXFxcG5ucG9wcG92dHV1c3Nzc3NzdYiDgoN5cnNzcnJyc3Jyc3Nzc3NzcnObqqKzp6uVcnRzc3Nyc3N0dHV1dXV1dHV3eHd3d3d4eHh3eHh4eXl5eXl4eHl5eXp6e3t7e3t6enp5eXh3d3d1dnV2dnd5enp7fn5+fX1+fn5/f35+gIyQi4qHg4WIi4iEg4SDgYGCgYGBgoGBgoKCgoKAgYGBgYCBgYGAgIGAf4B8enp5eXx5eHh2dXZ2dHl2d3h3d3Z3dnZ6fnx+fnx2dnd3dnV4enh4eHh4eHh3faego7CfnKGBe3l6eXh4eXl6enl5eXh4enp5eXh4eHh3dnd3eHh3eHh5eXp7e3p8fH1+fX9/f359e3t7e3p5enl5e3t/foB/fn5/fn19fX5+f35+fn6AjpCNioeEhoqLiIaGhIOBgoKBgYGCgYGCgoKCgoCBgoKBgYGCgYCBgIF/f4B/fn19fX9/f318e3t7eXh4eHh5eXl4eXh5eXl4enp6enp6e3t7fH1+fXx8fHyIppebrKCjooh6enl4eXh4ent6enp5eXp8fHt6enx8fHp6ent9fHx+fn+AgoGAgYKAgH9/gYGBgIB/f35+fn5/fX1+f4CAf35+f39+fn9/f39/gH+Af4OQjoyHhoWIi4yIh4aFg4GCgYGBgYKBgoKCgoKBgYKDgoGBgYGBgIGBgIB/goOCgoGBgX99f39/f4F6enh4d3h4eHh5eHh5enp5e358enx9fXt8fX19fX59foigkZCem5WYj35/f319fYCDgoCAf318fXx9fXt9fXx8fH19fX1+gYGChISDgoB/gYGBgH9/f4B/f39/f39+fn9/f39/f35+f3+Af39/gICAf4CAgICAhJCPi4eGhoiLi4mKhYaDgoKCgYGBgoGCgYKBgYGBgoOCgYCAgYGAgIGBgH+ChIKCgICAgH9+fn+AgH9/fn18fX19fYB/fX+Af35/gH9/fn9/gICBgICBgYGBhqipoZqemZiUfICBgH5/f39+f4B/fn5+f39/gYB/f4CBgYCAgYOEgoGCgoGCgH+AgYCBgYGAgH+BgICAf39/gICAgYGBgIGBgYCAgICBgoGBgYCAgYGFjo6MiYaHiYyLi4qGhoOCgoKBgYGCgoOCgoKBgIGBgYKCgICBgYCAgYGAf4KFg4KBgYCAf39+fn+AfX5+fn19fX5/fn9/f35+fn+AgYCAgICAfn9/f3+BgIKVsKWmoZ+iqqWJfn19fn9/fn5/f35/gIGBgoKDg4KCg4KBgYKDg4OCgYGBgYKBgoKCgYKBgoGBgYGBgoKCgYGCgYKCgoGBgoKBgYKCgoKCgYGBgoKCgoaPkY+KiImKjY6NiYaFgoKCgoKBgYKCg4KCgoGBgYGBgYF/gIGBgYCBgIF/gYWEg4KCgoGCgYCAgIB8fHx7fH18fH9+fn9+fn5+f35+f39/f39/gH+AgoePobKqnqahn6CiqKuglIuEgYB/gIF/f39/f3+BgYGCgoCAgYKDg4SDg4ODgoKCgoKCgoKCgoKCgoGCgoKDg4OCg4ODgoKCgYKCgoODg4ODgoKCgoODg4KCh5KTkIuKi4uPj42Lh4SCgoKCgYGBgoKDgoKBgYGBgIGBgICAgYGBgIGAgYCAg4SDg4OEg4ODgoKCgXx9fHx9gn1+f4GCiIGCgoSCgYGDg4GBgYKDgYaLmqmuqaOcpKGfoqGgoqSjno+CgYCAgICAgH9/f3+AgICAgH9/gYODhYSEg4SDgoKCg4OCgoOCgoODg4ODg4SDg4KEhYWDg4SEgoKDhIOCg4ODg4OCgoODgoCKlJOPioqMjpCPjYuGg4KCgoKBgYGBgoOCgYGBgIGBgoGBgICBgYGAgYCAgH+BgoODg4SEhIOCgoKCfXx8fn6AgYOAg4OChIaFhoaFhIWFg4ODg4SBgoOMmZ2Zmpqhm52ioJydmpOIg4KDg4KDg4ODgoGAgIKCgYOCgYKCg4OEhYWEg4OChISEhIOEhISDg4OEg4ODg4OEg4SDhIWEhISDg4ODgoKCgoKCgoKBgYKCgo+UlI+Njo6RkY6KiISCgoKCgYGBgYGCg4GBgIGBgYGBgYCBgIGBgYCBgICAgIKChIKChIOCg4ODgoJ9fX2AgH+AgoGDg4ODhIaEhIOEhYWDg4GBg4OCgIGEi5SWmZqMkp2bmpaMhoaHh4eGhoeHhoaEgoGCg4SDg4ODg4ODhISFhYWDhYSFhISEg4KBg4OCg4SEg4KCg4SCg4ODg4OCgoKCgoKCg4OEhIOFhYWFhoaIk5OTkI+Pj5KRjIqIgoKCgoKBgYGBgYKDgoKBgIGBgYGBgICAgYGBgICAgICAhISEgoKCgoGBgoKBgX+AgYOCgICAf4CCgoGDg4KCgYODg4SDg4GDhYSDgYKBhJCYlYiOmpqOh4eIiIiHh4eIiIiFhIOBgIGBgoKCg4GCg4SEhYSDg4OEg4OEhIOBgYGCg4OEhISDg4ODg4OEhIODgoSDg4ODhIWFhoeHh4eIiIiJiY6TkpKOj46RkY+LiYeCgoKCgoKBgYGBgoKCgoGBgIGBgYGAgICAgYGAgIGAgICDg4KCgYKCgYGAf4CBhYWFhoOCgYB+fn+BgoSCgYKDhIOCg4ODg4KChISDhISCgouWjZOXjIOCg4WFhYOEhIWFg4KBgH9/gIB/gIGEg4OEhYWEgoKCgoOCg4OFhIKDhISEhYaGhoaGhoWFhoeHhYaIh4aHiIeGhoaIiYeGhYaGhoeIkZKSj46QjpCRjImHhYGBgoKCgoGBgYGBgoOBgYGBgYGBgICAgICBgYCAgICAgISEg4KBgoGAgYGAgYKIh4aHhYSCgH99fX6AgH+AgYGBgYGBgoGAgYKDgYKCgoKCgYKQk4SCg4GCgICAf4GAgICAgH9+gIGBgYKCg4OEg4OEg4OCgoGBgoODg4SEg4SEhIOFhYaFh4eIh4eHh4eHh4eGhoaGh4WFhYaGhISEhIWEhYaSk5GOjo+OkI6JiIeEgoKCgoKCgoGBgIGCgoKCgoKCgYGBgYGAgYGBgICAgYGAgoSDg4KDgoGCgYKDg4iHh4iHhYSCgX5+gICAfn5/f4CBgYGCgoCBhI2DgH+AgICAf4iPf4GCg4OAf39/gICAgICAgICDg4KDg4ODgoOBgYKCgoOCgYKCgoOCgoSDhISDg4SEhYWFhYaGhoaFhISEhYWEhIWFhYSEhISDhISEhISEipSTkpCQj46NiIaFhIOBgYKCgoKCgYGAgYKCgoKBgoKBgYCBgYCBgYGAgICAgYGAg4OCgoOCgoKBgoOCiImJiYiHhYSDgYKEhIOBgoKCg4SCgoSEgoOJloiEgoSCgn+AipKAgoGChIOBgYGCgoODgoGDg4SDg4SEg4OCg4KDg4ODg4KCgoKCgoGDhISEhYSFhYWFhIWEhIWFhYWDg4OEhISEhYWFhISEhISEg4ODg4OOlZKQkZGPjYyHhYODg4GBgoKCgoKBgYCBgoOCgYCCgYGBgICAgIGBgYCAgICBgICDhYSEhIODg4SDhIOGh4mIhoWDhIODg4WDgYCDgoWFhISDg4OChI6YioOFhISEgoCOmIOCgoKEg4OCg4GBhIWEg4ODgoKDhISDg4ODg4SFhISDg4KCgoKCgoSEhYSFhYWFhYODhYWFhYaFhoWEhIWEhYWGhYWFhIWEhISDhIODhJGUk5KSj42MioWEg4ODgYGCg4KCgoKBgYGCg4KBgYKBgYGBgICBgIGBgH+AgIGAgYaGhoaGhoaHh4aGhYSDhYaCgIGBgYGHgoB+f4GBj4yDgX9+fXx9i5yNgIKBgYOCgZWahoKCgYKDg4GBgYKDhYODg4KDg4OEgoKEhIOEhIWEg4OCgoKCgYKCg4ODg4SFhYWFhIOEhYWGhYWEhISEhIOEhIWFhYWFhIODhIOEg4KGlJSSlJKPjYyIhISEg4KBgoODgoKDg4GBgoKBgoKCgYGCgYGBgYCAgYGAgICAgICAhYWFhYaGh4aGhoWGg4ODg4GAgoKCgYKAf35/f4GVl4mAfX19fXuBl4yAg4GBgYCLlZKOgIKBgoKBgYKDgoODgoOCgoKCg4OBg4SDg4ODg4OEhIKCgoKDgoKDg4ODhIWEhISEg4OEhIODg4OEhIODg4ODg4SDg4ODg4KDg4KDgouUk5KTko2NioaDhIOEgYGCg4ODg4ODgoGBgoGCgoKCgoKBgYGBgICBgYCAf4CAgICDhISFhYSFhYWEhIWCg4KDgoKDg4OBgICAgICAgJWfin5+gH2Hin2EhIOEgoODgo2JhY2CgoOCgoKCg4ODgoODg4KCgoODgoKDg4KCg4KDg4WEg4ODg4SDg4SEhISEhYWEhIWEg4SEg4OEhISEhISEg4SEhYSDg4SEhIODgoKDkJSSkpKPi4yIhoSFg4OBgYKDg4ODg4OCgYGCgoKCgoKDgoCBgoGAgICAgIB/gICAgISDhYWEhYWFhYSFhYOEhIWDg4SEhIKCgoOCgoSBkaGKf4yFfYaJgH6FhYWEhYJ/fX19f4KEg4ODg4OEg4ODhISEg4OEhISEg4SEhIOEg4OFhoWFhYSFhYWFhYSFhoWGhoWFhYWFhYWFhYWGhoWGhoaFhoaGh4aFhYWFg4SEhIeTk5OSkoyKiIWGhYWCgoGBgoODg4OCg4KBgYKDg4ODgoKBgIGAgICAgICAgH+AgICAhYWFhYWGh4eGhYWFhISFhYSEhISEg4ODg4OEhYOKkYOEi4WCgYF+fYGHhoOAfn5/fn9+f4OEg4OEhISEhISEhISEhISFhYWEhYSGhYWGhYaGhoWGhYWGhYWHhoaGhoaFhIWFhYWFhIWGhoaHhoaGhoaHh4iIiIaFhYaEhYWGjZSTkpGQi4qHhoeGhIGCgYKDg4ODg4KDgoGBgoODg4KAgYGBgICAgICAgICAf4CAgICHh4eGhoeHiIeHhoaEg4ODhIODg4OEg4ODg4OEhISEgYKCgYmBf359foWBf39/f39/f36AgISFhIWGhoaFhYWFhoeHhoaFhoWFhoeHh4iHh4eGhoaHh4eGhoeHhoaGhYSDhIWFhYSFhYaGhoeHhoaGhoeHh4eIiIeGhoaHh4eRlJORkZCLiYiFhoSDgoKBgoODg4ODgoKDgoKCgoOCgYCBgICBgICAgIGAgIB/gICAf4aHiIeHh4eIiYmIiIODgoKDgoSEhIWEg4KCg4SEhIOBgICAhIR/fn5/gH9/f39/gIB/f4B/f4WFhoiIiIeHh4eIh4iHiIiIhoaHiIiJiYmIh4aHh4eJiIaHh4eHhoeFhIOEhYaFhYWFhoaGh4eFhoeGh4aGh4eHh4eHh4eFh5OTkY+RkIuHhoWGhIKCgYGCg4ODg4ODgoKCgoGCg4KCgIGBgYCAgICAgICAf3+AgYB/hoiIiIiHh4iJiYmIg4KCg4ODhIWHh4aFg4OFhISDg4GAgIGMiYGAgYKCgYGBgYB/gH9/fnt6gIaHiIqKiYmJiImJiYmKi4qIiIiJiYqLioqIiIeIiIiHh4iIh4iGh4aEg4OFh4eHhoWFhISDhYWEhYWGhISEhYWFhoWGhYOJlJOQj5COioaEhoWDgYGCgoKDg4ODgoKCgoKCgoKCgYGBgYGBgYCAgICAgIB/gICBgH+GiYiIiYeIiImJiIiEgoKDg4KDhImKh4aEhIWEg4OCgICAhISCgoKCgoKCgH9+fX19fX5+fHt8g4eJi4uKioqIiIqJiImLiomJiImIioqJi4mHhoaGh4WGiIiJiIaGh4SDgoSIiIiIh4WCgoGDg4KDg4SCgYKDgoGEg4SDgY6TkpCPj4uIhYSGhIKBgYGBgoODg4OCgoKCgoKCgoGBgYGBgIGAgICAgICAgH+AgIGAf4WIh4eHhoeIiIiHh4SCg4OCgoOFiYqJh4WHhYSFhYKAgYOEgoOCgoKDgX59fX5+fn5+fn1+fX19g4eJioqHh4WGh4eHh4iHh4mGh4aIh4aJiYODhIOFhISFhYaIiIaFg4KCg4WHhoeGhoSCgoOEgoOEhIKBgoGBgYODhIODkZKQjo+Oi4eEhoaEgoGAgYGDg4ODg4KCgoKCgoKCgYGBgIGBgYCAgIB/gIGAf39/gIB/hYaGhYaGhoeHiIeGgYKEhIOChYeIi4qGhIaEgoaGgoKEhIODg4OCgoF9fH1/gH9+fn59fH19fHl8g4aGhoSDgYODhIWFhYODhYSEhISEhIWEgoKCgoSEgYKDg4WGhYSCgYGCgoODhYSEhIWEhIaEg4SFg4KDgYKDg4SFhIeSkY+Nj4yJhoSFhIWCgYCBgYODg4ODgoKCgoKCgoKBgYGBgYGAgICAf4CAgYB/gICAgICDhIWEhIWFh4eHh4aAgYGFg4OEhYSHiIWCgIB/gX9/gIODg4ODgoJ/fX1/gICBf31+fn19fX17enp+hISEgoCBgIGBgoKBf36BgYGCgYOBgoGCgoKBg4OAf4CAgoOCgICAgICBgYGDgYGChIODhYSCg4SDgoKBgoSDhYWGi5ORj4+Pi4iFhYODhIGBgYGBgoODg4KCgoKCgoKCgoGBgYCBgYCBgH9/gIGBgICAgH+AgIKCg4OChIOEhYWGhn+BfoCBgICAf4GDgn9+fn5+fX+Cg4OCg4KDgn19fn+AgIGAfn19fX1+fXx6enqAgoKBf39/f35/f4B+fYB/foCAgX+AgIF/f4CAgX59fX+AgX9/foCAgH+AgICAf4CCgICCgYGCgYGAgYGBgYKEg4aPkpCOj42Kh4eGg4ODgYGBgYGCg4ODgoKCgoKCgoOCgYGCgYGBgICAgH+AgICAgICAf39/gYKDhIGCgoOCg4SFgIB/fH19fn19foCAf31/fn1+gYODg4KCgYF/fX1+f4CAgH9+fX19fHt7e3p6enqAgH9/f39+fn1+f35/gH9+f3+Af4GAf359fn9/fn18fn+Af35+f3+Af39/f4B/f4B/f4CBf4B+f39/gH9+f4B/hZKSj46Pi4uHiYWEg4KCgYGBgYKDg4ODg4OCgoKDg4KAgYKBgYGAgICAf3+AgIB/gIF/f36BgYSEgYKBg4OCg4OBgH98fn9/fX6Af4B/foF/f4CBhIOCgYB/f359fn5/gICAfn19fXx7e3x6enl5eXuAgH+Af39/fn5/foCAf35/f4CAgoB/fH5+f35+fXx/f4B/fn9/f4B/f35/f4CAfn5/f39+f35/f35+fn19fX2Fk5KOjIuKiImIhISEgoKCgYGBgoOCgoOCgoODg4ODgYCBgYGBgYCAf39/f4CAgICAgIB/foCBhIOCgYGDhISDhICBgICBgIGAgYKCgoGBgoCBg4ODgYGBgYCAfn19fn5+f359fX19fXx8fHt6eXl5eH2BgICBgYF/f4B/f4F/gICAgYGCgoB+gH5/fn5+foGAgYF/f39/gIB/f4B/gYB+f3+Afn9/fn+Af31+fn17fIaTkYyLioeHioiGhoSDgoGBgYGCg4ODg4OCg4OCgoKBgICBgYGAgH9/f39/gICAgICAgH9+fn+BgYGAgISGh4aHgoODhYOBg4ODhYSEhISEg4ODhIKCgoKCgX9+fX19fn6AfX19fX19fX19e3p5eXl5eYCCgoKEg4CCg4GAgoCCgYGDgoODgYGCgIGAf4CBg4GEgoCAgYCBgYCAgYCCgn+BgIF/gIB/gICAfn9/fnx8ipOQiYmIiIiJiIaGhoSCgoGBgoKDg4ODg4KDg4KCgYCAgICBgYGAf39/f4CAgICAgIGBf359fn5/f39+g4aHh4iChYSFg4SFhIWGhYaGhoWGhYGBg4ODgoKAfX19fX19fn59fX19fX19fX18e3l5eXl4fIKDhIWCgYSDgoKDhYeCg4SDgYKCg4OCgoKCgYKFg4iFgoGCgYKDgYGBgYSDgoOCgoKCgYGBgIF/gIGAf36Ok4yHiIaIh4aGhYaGhIKDgoGCgoODg4ODg4OCgYGBgH+AgYCBgYB/gH9/gICAgH+AgYB/fn19fX5+f36Ag4SHiISGhoaFhoaHh4aHh4iHh4eGf32BgIGCgX59fX19fX19fX19fX18fH5+fnx7eXh3eHl5gIODf4ONhIOEhISXl4ODhIF9foGCgoGCgYKBg4aIjIWDgoKBhIKDg4KDhYSEhYOCg4OCg4OCgoKCg4KCgpKQi4iIh4mHhoaEhoWFhISCgYKCg4ODg4ODgoGBgYCAgICBgIGBgH9/fn+AgYCAf4CAgH9/fn1+fn+Bf4CCgYWFhYeGh4eGh4eIhoaHh4eGh4V+fX18fX9+fX19fX19fX19fX19fXx7iJKCe3x6fIZ5eHl8gYF+iZaEg4OEhJSTgIGBf39/fn6Fi4B/gICEhpCJhYSCgoGFhYuDgYKFhYaGhIOFhYOEhIODhIOFhISIko+MiYiIiYeHh4WGhYSFhIKBgoKDg4ODg4OCgYGBgYB/gIGAgICAf39/f4CAgICAgYGBf39/f4CAgIGBgYGBg4OGh4aGh4aGiIeGhoaFhIOFhH59fHx8fX18fH19fX19fX19fX18fH+RlZaDe3qElHx4eXp7fICCg4GCgYOCgH59fn57iJF8fI6Wf31/f4KGioWDg4SDgYONiX9+f4OEhYWDhYaFhIWFg4SFhYaEhI6Rj4yKioyJiImHhYWFg4ODgYGCgoKDhIODgoGBgICBgICAgYGAgIB/f3+AgIB/gICAgX5+f4GBgoKCgoODgoOCgoWGhISFhYSGhIOEg4KBgIKAfn19fHx9fXx8fH18fH18fX19fHx8e4uRl4x6e3yBenp6e3x5eX19foB/gH98e3t+fn2ClZF/hIh9fH5/goR8fIGChIKAf4eDfYKBf4KCgIODhISEhISChIOEhYGEkZGOi4yMjoqJiYWFhYODg4KBgoODgoKDg4KCgYGAgIGAgICAgICAgH+Af3+Af357gICBenyAgYKDhYODhYWFhYODg4SCgYKDgoOCgoGBgIB/gX5+fX59fHx8fHx8fHx8fHx8fHx9fHx8fn6Kgnt6e3p4ent7fH17fn1+f319fX19fH+BgX2Gj4F+fYJ+f36Agnx8gH+CgIKAfnx7ioJ9gH9+gYCAgYKBgoCAgIGAf4uUkIyLjo6MiIiHhYWEhIOCgoKCg4OCgoODgYGBgICAgICAgH9+fXx7fHx9f3+AgHx6gYF4e4CCgYOFhIOFhIaHhISAhpSIgIKBgYGBgH9/f39/fn5+gHx8fHx8fHx8fHx8fHx9fHx8fHx8fHl7e3t4eHl7e3p8goCBfn+BfH5+f359gIKCgICAgX+CkYF/f4CAfoB+fn9+gIGBfX19e319fXx9fHx9gH+AgH6Afn6ClJKNjY2Oj4qFhoaFhISFg4KDgoODg4OCgoGBgYGAgICBgICAf4CAf39/fXt6fICAgHh+gXd7gIF/goKCgoKEhoeGhn6IlYp+gYGAf4B/foB+f39/fn+Bfnx7e3x8fHx8fHx8fH59fHt9fHx8e3x8fHp6eXt8en2Fg4N/gYF+f35/gH6FgoF+gH9+foCFhoKAfn6Dhn9+fX6AgIGAf39+fX19fX57fH1/f3+AfX9+f4yRjYyNjo2Nh4SGhoWEhIODg4OCg4ODg4KBgYGBgYCAgYGAgYGBgYGAgH9/f397en9/e3mAd3p/f31/f3+Af4KDhoaFf3+FgX5/gIB/gH5+f31/gIB/f4B/f319fHx9fn18fH19fX19fH58fXx7fXx8ent6fH18f4aEg4CAgX1+fX5/fouEgYZ+fXx8f36CgX99fX19gXx7fXx+gYSDgYB+fn5+fXx+f399fn9+f36Eko2NjI+Ni4qGhIaEhIODg4OCg4KDgoOCgYGBgYGAgYGBgYB/fXx8fH1+f39/f397e399d352eH59fH18fX5+gYGCg4B6fX18fn6Af35/f35/fn+AgH+AgH9/fn9+fn5+fn1+fn99fH58fn1+fHt8fHx7e3p9fn+AhIOCf35/fHx8fXx8gYN+jH58e3t9fn1+fn17e3t9fHt7e3uAhoSChIOBf4B+f4KCgn9/goJ/gIuQjIyMjYuKiISEhIODg4ODgoKCgoKCgoKBgYGAgoGBgYKCf3+AgIB/fn18fH5/fn55fX52e3Z4fXx8fHt9fX6BgICAf31/f31+f39/foB/f39/f3+Af4GBgH99gH9/fn9+fn5/f3yCfX59fX17e319fHp8fH6AgoGAgIB9fH18fHx8fH18fnt/fnt7e3x8fH18e3t7e3x8enp9en6CfoKEhIKBgoGFhoWFhoaHhYGEkY+MioqLh4eFgoOEhISEg4KCgYGCgoKBgoGBgYGBgoGBgoKAgYKBgYCAgH9+e3x+fnx6fnh5dnd8fHx7e318f4GAf35/foB/f35/f35/gH9/f3+Af39/gYKAfn6BgIB/f39/f39+fYN8fH19fH99fX19e3x+fn9/fn5/fnx9fXx8fHt+fnt8e3x8fHx9fH18fnx9fHt7e3x5e3x7e316fX5+f4CAg4eJiYmKiYqJhYiSjouIiYeFhYOCgoOEhIOCgoKBgYKBgYKBgYGBgYKCgoGCgoCAgX98e3p6eXt9enx+fnl8eXh4dHx8fHt8fHx+gH9/f39/gIB/fn5+fX+AgH9/f3+Af4CDgoB/gIGAgIB/f4CAgH58enx9fX59fX5+jIZ9fX57e4ODfX5+fX18fX19fX19fH18fXx9fX58fn19fX18e3t6fHt8fHt6e3t6enp7fn6DhYiHiIqLi4qJjJGPjYqIhoWEgoKCgoODg4OBgYGBgYGBgYGBgYGCgoOCgYKBgIGBf3+Af356eHl5en5+e3l6eH5zfHx8e3x8fH5+fn5/gH+AgIB/fn9+gIF/f4B/gIGAgoSEgYCAgYGAgX+AgYKBf39+f31+gH57foGSjHx9f4qAjYx+fn19fX5+fX59fX18fn18fXx9fX1+fX1+fnx7e3t8fH18e3p7e3l6eXl5e35/hIOEh4mKh4mOkI2LiYmFhISCgYKCgoKCgoGCgoKBgYGCgYKCgoGCgoKBgoKAgYGAfoCAf39+e3p5e319eHx6f3KBfXt7fXx8fn59fYGCf4GBgX9/gH+AgX9/gIGCgYGFg4SCgYGCgYKCgICBg4KAf4F/fX6Afnx/f4mCf36DkYSEg4F/fn18jYd9fX59fXx/fnx9fXx9fX5+fX5/fX19e3x9fnx8e3x9enp5eXl5e3t+foCBg4eEiI+Oi4qGhYSEg4KBgoKCgoGBgYGCgoKBgoKCgoKCgoKCgoGCgn+AgIB+f39/fn5/ent5fX16enp9cX6Cent9fX19fXp4f4KAgYKCgICBgYGBgICBgoKCgoaFhIKBgYGBg4F/gIKEgX9+gYB9foF+fX5/gIB9fn+EgH5+f31+fX2KhX1+f31+fn9/fX19fH5+fn99f4B9fX18fX9/fHx7fH17e3t6enp7e3x9fn2Ag4CJjouMh4SFhYSDg4GCgoKCgYGBgoKBgoKCgoKCgoGBgoKBgYKCf4CAgH9/f39+fn59eXp6fXx5d3t0e4d8dHd9fn17e3Z2fYCBg4KBgYKCgoKBgYGDg4OChYaEg4GAgICDgX+AgYSBfn6Af31+gH59fn6AgH+Bfn+Af39/gH99f39/f3+Afn9/gH58fX18fn5+foF/gH2CgHx9gIB9e319fXx8fHx8e3t7fHt8fHx9fIqLiYiFhoWFhISDgYKBg4KAgIGCg4KCgoOCgoKCgoGCgoGBg4J/gIGAf39/fn5+fn57enp8fHt2e3R3f352cnt+fnt4dnd8gIGCgoKBgoODg4OCgoSDhIOFhoOCgX9/gIKAgICAg4F+foB/fX+AfX1+foCAf4J/gYGAgICBgH1/f3+AgICAgIB/fnx9fX19fn59g32AfoKAfX6AgX98fn59fX17fH58fXx8fHt8e3x9iYeGhIWHhYSFhIKCgoGDgYCAgoKDgoKCg4ODg4KBgYGBgYGCgH6AgYB/fn5+fn5+fn56e3p9goN9dXF6fHpxen59eXh0dICAgoKCg4KDhYOEg4KDhISEhIWEgYGAgH6AgoB+f36Bf35+f4B9foB9fX1+gH9/gYCBgYCAgIKBfn6Af4GAf4CAgH9+fX19fnx+fn19gYR/gH9+f4GBf31/f319fn1+fn1+fHt8enx7eoCHg4SEhYSEhIWDgYKBgYKBgICCgoOCgoOEg4SDg4KBgYKBgYOAfoCBf35+fn5+fX5+fnt7en6Jh354cnl9f3F6eHt4eXV1fYKDgoODg4OFhIWDg4OEhIODhIOBgH+Af4CBfn19foB+fn5+gH19f3x9fX6Af4CAgIKAgIGAg4KAf4B+gIF+gIGAgH9+fn5+fX1/fn6FhYGBgH+Ag4F/foGAf35/f4B/fn17ent6fHt6goWAg4KCgoKCg4GBgYCAgoGAgIKCg4KBg4SDhIKEgoGBgoGCgn9+gIF/fn1+fn5+fX59fXp7fIWEe3tzeXp8cHd1dnd5dXR6hISBhISDhIWFhoSDg4WEgoODgoCBf39/f4B9fX1+gH1+f39/fn1+fH19foF/gIB/gIB/gIGDgoGAf36AgH+AgYCBgH9/f39/f4B/gIGCgoKBf4CDgn9/g4J/f4B/gX+Af3x6fHp8e3yCgH+Cf3+BgIKCgYF/f3+BgH6BgoKDgYGDg4KEgoSCgYGBf4GCgH6AgH9/fX5+fX19fn19e3t6gH94fHZ5eXtxdHh3dnh1cnmFhYKEhIKEhYWGhISChIOBg4GAgIF+f4B/gHx9fX6AfX5/f39+fX98fn5+gX+Bf39+f4B/gIODg4B/f4GBgIKBgYGAgIGAgIB/gIGAgIKDgYF/gISAfYGDhICAgX+BgYKBfXp7e3x8fH9+f4B8f399fYGAgH59fX9/foKBgYKBgIKCgoKBg4KCgYB/gYKAfn9/fn99fX1+fX19fX19ent7fHZ9eXh5enJ1eXl2d3dzdYaFg4WEgoSEhYSEhIGDgoGDgX+AgX5/gH6AfX19foB+f4B+fn99f3x/f3+BgIF/f3x+gH6AgYKDgYCAgYOEgoGAgYB/gYCAgYGAgYGBg4KBgX+Ag4B+goOEgICCgYKChIJ+e3t8fHx8fX1+fXp+fX14fn9/fHx8fn5+gYCBgYCAgoGBgYGDgoGBf4CAgoB9fn19f319fX59fH19fX16e3p8dnx6d3t4cnZ5e3Z2dnN0hoSEhYSChISFg4ODgYOBgYOBgIGBfX+BfoF9fX1/f39/gH5+f359fYB/gIGBgX9+fH5/fn5/gYJ/gYGCg4eFgX9/fn6Af4CAgICAgIKCgYCAfoCCf3+BgoOBgYOCg4OFgn99fX18e3x8eXp7en55e3l4f357fHt+fX1/f4F/gH6BgICAgoOCgYF/gIGBf31+fH1+fX19fX18fn58fXx5e3x4enx3endzeHd6c3Z2c3SGhISGg4KDhISDgoKCg4GCgoGAgYF9gIB+gH1+fX5/gICAf39/f3x/f3+BgIGAf359f39+fn+BgH2AgIGDg4N/f359fn5/f4CAgIB/gYKBgH9+f4F+f4CCgYCBg4KEhIaEgH59fHx8fHp5dnl5enl2eXZ+fHt7e359e399gH99fX9/f3+BgoGBgX5/gYF+fX18fX19fX19fXx+jYF8fXl7e3p5fHd4eHR1dXhyd3d0doaEhIWEg4ODg4OCgYKDgoGDgn+Bf35/fn+AfX19fH6AgIB/f39/fIB/f4GAgYCAf3yAf35+fn9/fX5+gYGCgn5/fn1+fn5+f3+Af32AgIB+fn5/gX5+gIKCf4KDgoOEh4SAgH58fXx8e3x1eXl4eHh5d3t8e3t7foV9fn1/ent+fn59foGAgIGAfX6BgH59fXx9fX19fX18e32Dgnx8ent7e3p7d3Z4dXJzdnB4eXJ4hYWFhYOEhIOChIKBgYKBgIKBgIF/fn5+foB+fX58foCAgH+AgIB7gH6AgH+BgIB/fYF/fn5/f319fX6AgYKBfn9+fn59fX5/fn9+fH6Af35+fn+Cfn6AgIF+gYOCg4OGhICBfnx9fHx7fHh3e3h1eXd3eXx6e3t9kod9fH13en1+fn19f35+gH98foB/fn19fH19fX19fHt8ent9enp4e3x6ent4dHh1cXJ0cHh4cXmEhYWFg4SDgoODgoGBgoKAgYGAgIB9fn5/gH18fnx/gIGAf4CAgHyAf4B+f4GAf39+gX9+f39+fX18f4CAgIB+f35+fn18fn9/f358fYB/fn1+gIJ/foCAf36ChIKCg4WFgoJ+fXx7e3x8eXd8eXd4d3d4e3t7e3yFin17end6fH19fHx9fX1/fnx9fn59fXx8fX5+fX18fHt6enx7e3p5enp7enhzd3VxcXNveHdxe4WGhYWDhYKBg4OBgoGBgoCBgICBgH5/fn9/fXx+fYCBgoGAgIGBfX6Af35/gX+Af3+BgH6Af319fH1/gICAgH9/f35/fXx+f39/f319f39+fn6CgYF/gIB/foGDgoKEg4SCgn5+fHx6fHt7eXt6d3N2d3h5e3p7eXp/fnt7d3p8fXx8fH59fH19fH19fXx8fX19fX99fXx9e3l7fHx7enp6enp6eHN2dXBwcm93dnJ7hYaEhYOEgoGDgoKBgYGCgYKBgYGAf4B/f399fX9+f4CBgYF/goF9foF+fn+Bf4B/gIJ/gIB+fH58f3+BgICAf4B/f4B+fX5+f4B/f39/gH9/f4J/gICAgIB/gYGAgISBgoKAf39+f3x9fn56fYV+dHx9enp6enx5eXp6hoV3eXx8fHx8fXx8fHx8fX19fHx9fX19fn19fX16eX18fH16enp6enp5c3V1b29xb3d0c3yFhoOEgoOCgYKBgoKCgYKBgoCCgYCAgICAgH59gH+Af4GCgn+CgX+AgX5/gYB/f4CAgn+Bf319f35/f4KAgICAgIB/gIB+fn1/gH9/gIB/f39/gH+AgICAgH+AgYCBgYGCgYCAf39/fn1/fnuBk416fH18e315e3p6eHmBgXh5e3x8fXx8fHx8fHx9fX18fH18fn1+fn59fHp8fHt8fXt5enp6eXl0dXVvb3Fwd3N0fYWGg4OCg4KAgYCCg4KAgYGCgYKBgYCAgIGAfn6Af4GAgYKCgIKCgICCfoCBgX9/gX+BgIF/fH6Af3+AgoCAgICAf3+AgH9+fX6Afn2AgIB/f3+AgICAgYCAf4CAgYCBgYKCgICAf39/fX5+fIGGiXx8fnt7fnl6e3p7jn53d3l7fHt9fHx8fHt9fH19fX18fXx+fn5/f358enx9e3x9e3l6e3p5eXN0dW5zcXB4cnV6hYaDg4KDgoCAgIKCgX+CgYKBgoGBgYKAgYF/fn9/gYGCgYKBg4OAgYJ/gYGBf4CAgIB/gX99f4F/gICBgICAf4B+gICAf359foB+fn+Af39/gH9/gICBf4CBgH+BgIGCgoKAgICAgIB9foB9gIOCe35+e3x9e3p8fHyHeXh4eXx8fH17fHx9fX18fH19fn19fX5+f3+Af317fH18fHx7enl7e3l5c3J1bnZycHhxdXaFhYOEg4KCgYCBgoF/gIKCgoKDgYGDgoCCgYB/f4CCgoKBg4KEhICBgX6BgoF/gICAgH+Cf36AgYCCgICAgIB/gH+AgIB/fn2Af35/f4CAgH+AgH+AgYF/gICAgIGAgYGBgYGAgYCAgH9/gH5/fX59fn57fXx9e3x8d3h1eHh5e3x8fXx8fHx8fX5/f39/fn19fn9/gIGAf3x9fHx9e3p7eXp8eHpzcnVud3FxenF2d4WFg4SDg4KCgYKDgICCgYSDg4SBgYOBgoOCgYCAgIKDgoCCgoSDf4GAfoKDgICBgICAf4CAf4GBgIKAf4CCgH9/gICAgIB/f4CAgH+AgICAgIB/f4CBgYCAgICAgYGAgoOCgoCCgYGCgYB/f4B/gId+fnx7fXx7fX94d3Z5eXp8fXx8fXt8fH19fn5/gIGAfn1+gICAgoGAfH59fX58d3t6ent5eXNxdW53cHV6cXZ5hYWCg4KDg4KDhISAgIOBhoODg4GChICEg4KCgICCgoSBgYKBg4J/gIB/gYOCgYCBgYCAf4GBgYGAg4B/gIOCf35/goGAgH9+gYCBf4CAgYCBgYCAgIKBgYKBgX+BgYGBgoOCgoOBg4OCgYCBgH+AhH19fXx/fXp9f3t5dnp4eXt7fH19e3x9fX19fn+AgYGAgH+AgICDg4B9f35+fn15eXt6enp5c3J1b3dxd3lzd3uFgoKCgoOEgoOEg4CAg4OGg4ODgoKEgYSDgYOAgIKBhIGCgoGCgX6AgICCgYKBgYKCgIGAgICCgoGEgH6Bg4F/f4CDgoCBf4CCg4KAgYKBg4KDgoGBg4KChIGAgYOBgYKEg4KEhIODhIODgYGBgoCCf4B/fYB8enx/e3t3fHl5eXt6fX59fHx8fH1+foCBgYCAgIGBgYSEgH2Af39/f357e3t6e3p0cHhyeXR2eHR3e4SCg4KDg4SChIODgYKDhIaEgoODgoSChIOBg4CBg4KCgoKCgIKAf4GAgIKBgoGCgoKBgIGBgYOCgoOAfoGDgX9/gYSEgYN/goKBg4KCgoGEg4OEgYKEgoOCgoGCgoOBg4SDhISEhISFg4SCgYOCgoOBgYGAgH58fIB9fHh8eXp5enx9f3x7fHx9fX18fICAgICAgYGBgYKBfoGAgICAf3t7e3p6enVweHd5dnV8dXZ8gICDgoODg4OEhISAgoOGhYWDg4KDhIKEhYKCgYKDg4GCgoKAgYB+gYCBgYKDgoKCgoGAgYKCg4KCg4B/gYOBgICChIODgoGCgoGDgoKDg4ODg4SAgoSDg4OBgX+Bg4KDhYKEhISEhISDhISChIOEhIKBgoGBgHt+gX59eXx6enp9fHyBfXp8fH19fHp7fn5+gIB/gYGAgICAgIKBgIB/fX18fX18dnJ2eHh2dH92dX2Hh4OChIWDg4SFhICChYWEhIOCg4SEgYSFg4KCgoODgYOCgoCCgH2AgIGCg4KCgoKEgoGCgoOEgoKBgICBgoGAgYOFhIOCg4CCgoOCg4ODg4OEg4CCg4KEg4KCfoOBgoSEgoODhISEhIOEhIOEg4WEg4ODgoKAe4CBf3x8fXp6fH2AfX9/fHx6fH59fH19fn5/f39/gICAgH9+foCBgICAfnx9fX5/fn18fHh2f3Z3f4SHg4KDhoODhIaEgYKFhoWEhIODhISChIWFgoKDg4SCg4KDgoKBfoCAgoKDgoODg4SDgYKCg4OCg4GBgYGDgn+ChISDg4KEf4KEg4ODgoSDg4SCgIOEg4SDg4KCg4KChIOCg4OEhISEhIWEg4OEhYSFhIOBgoB9gYKAfXx8e3x8gH19foB+fn1/fnx8fH19fn5/fn+BgYGBgH99fX6BgYB+fn19fX59fX5+f3+AfH2AgYKCg4OGg4SDhoSBgoiHhYSDg4SEhYGFhYWDg4SDhIODgoOCg4F+gYGDg4SCg4OEhIOCg4KEg4ODgoKDgYOCf4KDg4ODgoOAgoWDg4ODhIODhIOBgoSEhYOCgoODg4GEg4GDg4SDg4SEhYSEhIWFhYWEg4ODf32BhIB9fXx8fHx/gX5/f39/fX99e3x9fX19fX5+f4CBgIGBgH59fH6Cf39+fn5+fX1/f39/gICAf4CEhIODg4WDhIOFf36CiouFhYSDgoOFgYaGhoOEhISEhIODg4OEgn+BgYODhYSFhIWEg4KEhISFhIODgoSDhYKBhISFhYaEgoCDh4SDg4OFhIWFhIGEg4OHgoOCg4GCgYSDgoODhYODhIWEhYWHh4aHhYSEhYSBf4GDf35+fH5+fX+BgH9+fHx/f358enx9fX19fX5+fn9/gIGBf319fIB/gH5+fn5+f3+BgYGBgYKAgYWFhIOEhIKEg4aAgoWFiomEhISEhYWCh4aGhISEhIWEhISEg4SDgYKDg4OEhIaEhYSDg4SEg3yDhHuBhHd5g4F9hH5+cnWDgoF2foOEgH2BdYF5g39/f36EhIKDg4KBg4SDg4SFg4SFhoSFhn2EeXx+f4N7hYOBhIOAf31+f31+gYOBfXt/fX6Afn18fHx9fX19fH19f4B/gYJ/fX18f4GBgICAgH+BgYGBgYKDg4KChoSEhIWEgYOEhYOEhYSKiIWFhYOFhYSGhoaDhISFhYWEhYWEhIWCgoOEhYWFhoSFhIOEhYWCaICFanx7cXF8gXOGc3R0fYKDdXNxg4ZzcHVyc3SDdnt9dYF/goOBgnZ5hYCDgIR/hYSChYWCaHpyc3N8gHKBg3+Dg32BfX5+fX6Cg4J8f4F9f4B9fXx8fHx9fHx8fn1+gX+BgX99fX2AgYKBgYGBgIGBgYKBgoKCgoSHhIWEhYSBgoSGhoOFg4aIhoaFg4aGhoeGh4OFhYaFg4KFhoSFhYODg4SEhoaGhIaEg4SFhn1xe4FweXZ+g3+CbnlwdXN8dnl5hnKEg3B2eHF2dHR1cnN0dml/gG5yb3R2bnVsd216c26Ah3ltfXJzdnN2bW53bHB5bHV9f398foGAgX2Af32Af4B/fX18fHx9fH1+f32Af4CAfnx/foCBgoCBgICAgYCAgIKDgoKEhYeGhoCChYODhYeGg4WFhYaHh4SDhoaIiYaHhIWGiIeEg4WGhYWEhIOFhIKFhoaFhoWEhoWHdnB0e3BydX+HhYNtdW92b3x1coR5eYd4cXR3bndod3pucHaCcoN+b3p5eW1vbnpvb213fXiGcHF6cHJ0ZoF1fm57eXNveX+Af31+gYB/e39+fIB+gIB+foCAgYB+fn9/foF/gH9+fYB9f4CBgIB+fn+BgH9+goOCgoSFh4eEfoeEg4OFh4aEhoWFhoaIhISGh4iIhoeEhoaLioWEhoeHhYOFhYWEgoWFhYWGhYWGhYZxdXByc29zenl+hHSIdHV+iHZugnKEhnluanJ/cW1zd3x/dXR8hH54cXV3bnl1enF2eHV6eYRyaW95eHBreXN6b3p3dnZwgYB/fn5/f356fn18f31/f359gIGDg4CCg4GBhIKBf4GBgH1/f4F+f35+f4GAfn6BgoCAgoSHhoODhoSEhIaHhoWFhYWGhoiFhYaFh4eFhoSGhomIhYSJi4iGhIaFhYWDhYWEhoaGhoaFg3iLeXKIentwcIWEeIV4eWtzfnl7a3KDh4N6fG16eXl0fYB2bm+AgG90fHV3cXl9fW1+dW+DhYZ6gHJye3x1cG96a3N8bnaCgYF+fn99fXp9e3x9fX9/fn1/f4KCf4GDgYGDgYB/gICAfn9+f31/fn1/gH58fYGAfn6Ag4iEhoSFhYWFhoeFhYWFhYeHiIaEhoWHhoaFhIWFhIWFhomKh4WEhoWGhoWGhoSGhoaGhoWGh4eHhoaEhoWGh4iHhYeGhoOHhoWFg4SFhoWGhIaEg4SEhoSEgYODhISFhIWEhYSGg4WGhYWEhIWHhoSEhYaFhX13hoOEhIOCgX1/fnt8e357fHx9f359fH9+gYB9f4F/f4GAfn5+gH5+f35+fX99fX5/fHt8f358fH+BiYaFhIaGhoWGhoWFhYWGhoeIhoSGhYeFhYWDhIWGhYSGhoaGhYSGhIWGhoaGhIeGh4eGhYeIiIiIhoSHhYaGiIaFiIeIhYeGhoiFhYaHhYaGhYOChYWGhYWDhYSEhIWEhoWEhYWDhoaFhoWEhoeGhISFhoOFhIKEg4OFg4OBfYB/e3t8fnt8fH1/fnx8fn2Afn1/gH5+gH99fXyAfX5+fn5+f3x8fX57fHx/fHt7fn+Ih4SEiIaGhYeGhYWEhoaGhoiHhIWGh4aFhIODhIaFhIeFhoaFhYaEhYaGh4eFh4aJiIaGiIeIiYiFhYiFhoeGh4aHhoeFh4eGh4WFhoeFh4aFgoOFhoaEhIOEhIOEhoSGhYWFhYOGhoWGhYSGhoWEhIWFg4SHhYOCg4SDhIJ+gYB8e31+e3x7fn59fHx+fX5+fX9+fX1+fnx9fH98fn58fYGAfHx8fXx8fH56e3t8foiHgoWIh4eGhoaGhISGhoeGiIaEhYSHhoSFh4OEhYSFh4SFhoaFhoSGhoeHhoaHh4mIhoaIh4iKiIWHiIWHh4WHhoeGh4WIiIeHhYaGh4WGhoSBhISFhoWFhISEg4SFhIaGhoWGhIaFhoaFhYaGhYSDhISDg4eDhIGChISDgoCAgHt7fn18fHx+fXx8fH19fH18fn18fX18fHx8fXx+fXt8gX99fH18fnx8fHp6fHx9iIeChoiHhoeGhoaDhYaFhoaGhYOFhIaFhIiJg4GEg4SGhIaGhoaGhIeHiIiHh4eIioiGh4iHiImIhYiHhYaGhoeHh4WHhoiIh4eFh4eHhYaHhIKEg4SGhYeFhISEhISFhoaGhoaFh4WFh4WGhYaFhIOEg4OEh4GDgIKDg4KCgn+Ae31/fXx8fH59fH19fH57fHx7fHx9fXt7e318e359e3x/fX18fX1+fXx6ent7fHyIh4KGhoaGh4aGhYOFhoWFhYWEg4WChoSDiId/enqChYaEhoaFh4aEh4eIiIiHhoiKh4aHh4eIiYeFiIeFh4eGhoeHhYeGiIiHhoWHh4iGhoeDg4SEg4aGh4WFhISEhYaGhoaGhYaHhoaIhoaEhoWDg4ODgoOGgYN+goKDgIOCf398f39+fHx9f318fX18fXt7e3p7fHx8e3t7fnt7fXt6e358fHx8fX5/fXt6fHp8fImHg4aFhoWGhoWEhIWFhYWFhIOBhIGGhIKEhHyAhn+ChYWGhYWGhYSHh4iIiIaFiYqHhYeGh4eIh4WIhYaHiIaGh4eGh4aIiIeFhoeGh4WFiIOEhoWDhoaHhoWEg4WFhoaGhoaFhoaHhoeHhYOFhYOBgoKBhIWCg36BgoF/g4F/fn5/fn98fH1/fXt9fXx9enp7eXt8fXt7e3t+fHx8fHp7fXx8fHx+fYF8e3t7e3x7iYeEhoSGhIaGhYSFhoWEhIOEgoCDgYaDgYJ/eoSMe4CEhYeGhoaFhIeIh4aHhYWHioeEh4WGhoiGhYeEhoeIhoaIh4eHhoeIhoSGhoaHhYWHg4SFhIeGhoeFhISDhYWGhoeGhoWGhoaFhoaEg4SFgoGCgYCEg4OCfYGBf36DgX5/f4B8f3x9fX59e319fH15enp5e319enp7e318fXx8enp9fHx9fH5+gHt7e3x+fXyIh4WGhYeEhoSFhYWFhYODgYOBgIKBhYJ/gH9/fXx7gYSFhoaEhYSDh4eGhoaFhIaJhoKGhIaGhoWFh4WHiImGhYiHiYeGhoeFhIaFhYeFhIeDhIWEiIaGh4WFhIKFhYaFhoaHhIaGhoaFhoKDg4WAgIGAgIOBg4B8gYB+foKAfYB/gXx/fH1+fX57fn18fHl6enl6fX15enp7fHt8e3t6e319fH18f35+fHt7fX59fIiGhYaGhoSFhYSFhYSDgoKAgoGAgIGDgX5+foB5en2Ag4OFh4WEg4OHhoOEhYSChYiFgoSDg4WFhYWHh4aIiIaFiIeJh4aFhYWDhoSFh4OEhoSEhYSHhoWGhYaEgoWFhoaGhoaEhYaGhYWFgoKDhH9+gICAgYCDgHuBf31+gn5+gH6Afn99fX59f3t/fXt6eXp6eXp8fXl6ent7enx7e3t7fH19fXyAfn18fHx/fnx7h4WFhoaGhoSFhIWDhYKBgICAgYB+f4KCfX1/f3t/f4KDg4WGhYSDgoaDgYOEgoCFh4WCg4GBg4SEhIaGh4eHhYWIhomHhYSEhIKFg4SGgoOFhISGhIeGhYWFhoOEhYSFhoWGhISFhIWDhYSAgIKDf35/f39/gIN/fIB9fX+CfYCBfn6Bfn5+fX1/e398e3p5enp5ent8eXp6e3t7fHp7e3t8fX19fYB9fXx8fYB/fXyGg4aGhoaFg4SDhoKFgYGAf3+AgH5/gYJ8fn9/foCAgoKChISDgoGChIGAg4KBgISFhIKBf4CCg4OEhYWHhoaEhYeFh4WGgoOCgoOCgoWBg4WEhYaEhoaHhoaFgoSEg4SFhYWDhIODhIKEhIB/goJ/fX5/fn5/hH57f3x8gIF9gYB9foN9fn59fX57fnt7enl7enl6ent5enp6e3t8enx8fHx+fn1/gXx9fHx9f4B+gIaEhYWEh4SEg4KGgoOAgYB+fn+AfX9/gnx9f39+fn+BgYKEg4KBgYKCf4CBgoCAgoWEgoB/gIGCgYOFhYeFhISGhoOFg4WBgoGBgoGCg4GChISEhYWGh4eGhYWDg4ODhIWFhIGDgYOChIODgH+AgX59fX5+fH6Dfnx+fHyBgH6Cf35/gnx/fn19fHx8e3t6enp6eXt5enp5enp6e3x5e317e35/f4GAfX59fX1/gICAhoSEhYSFgoSCgoSCgoCBgH59fn9+fn6AfX2Af35+foGBgoODgoSHgYF+gICBf3+ChIOBf35/gIJ/goWEhYOCg4WFgoSBg4CBgIGBgYKBgIGEg4OGhYWHh4WEhIWCgoKDhYSCgYGBgYCFg4F/foB/fnx9fn18foN9e358fYF/gIN9fYCBf35/fXx8fH17e3p5enl5e3l6enl6ent7e3p7fXx8f3+BgoB+gH+AgH+AgIDKysrKysrKysrKysrLy8vLy8vLy8vLy8zMzMzNzc3Nzc3Nzc3NzczMzMvLy8vLy8vLy8vLy8vLzMvLy8vLy8vLy8vLy8vMzMzMzM3Nzc7Oz8/Pz9DQ0NHR0dLS0tLS0tLT09PT0tLS0tLS0tPT09TU1NTU09PT09PT09PT09PT09PT09PT09PT09PT09PT09PS0tLS0tLS0tLS0tPT09PT1NTV1dXV1dXV1dXV1dXV1dXV1NTU1NTT09PT09PT09PT09TU09PU1NTU1NTU1NTU09PT09PS0tLS0tPT09TU1NTU1NPT09LS0tLS0tLR0dHR0dPHhnNlYFtLWWdVTUZIQD03Nzg5Nzw8PDo8Oz42Oj04PDs6OTg3ODs7Oj87PTs8PD47P0E/QkJBQ0RFREE+PTw7QENDQUBDQ0FBR0hHSUtSwtXS09PT09TU1NTU1NTU1NTU1NXV1dXV1dXV1dXVysrKysrKysrKysrKy8vLy8vLy8vLy8vMzMzMzMzNzc3Nzc3Nzc3MzMzMy8vLy8vLy8vLy8vLzMzMy8vLy8vLy8vLy8vLzMzMzc3Nzc3Oz8/P0NDQ0NHR0tLS0tLS09PT09PT09PT09PS09PT09TU1NTU1NTU09PT09PT09PT09PT09PT1NTU1NTU1NTT09PT09LS0tLS0tLT09PT09PU1NTU1dXV1dXV1dXV1dXV1dXV1dXV1NTU1NPT09PT09PT09PU1NPT09TU1NTU1NTU1NPT09PS0tLS0tPT09PU1NTU1NTU09PT09PS0tLS0tLR0dHSzIxyZ2BcTVllUktHSz87Mzc4Ozg5Pj05PDpBOjs9Nzs8PDo6Nzg6Oz0/Oz88PTw/Pj9BPUFBPkNDREJAQT46Oz9DREFDRERCQklHSEhJTr7V0tPT09TU1NTU1NTU1NTU1NXV1dXV1dXV1dXV1crKy8vKysrKysrKy8vLy8vLy8vLy8vLy8zMzMzMzM3Nzc3Nzc3NzMzMzMzMy8vLy8vMzMzMzMzMzMzLy8zMzMzLy8vLzMzMzc3Nzc3Ozs/P0NDQ0NDR0dLS0tLS09PT09PT09PU09PT09PT09TU1NXV1dTU1NTT09PU1NPT09PT09PT1NTU1NTU1NTU1NPT09PS0tLS0tLS0tPT09PT1NTV1dXV1dXV1dXV1dXV1tbV1dXV1dTU1NTT09PT09PT09PU1NTU09TU1NTU1NTU1NTT09PT0tLS0tLT09PU1NTU1NTU1NTU09PT09PT0tLS0tHR0s+Sd2hfXk9XZ01LRks9ODc2NTk5OTw+OT88Qzo7PDc5PD07OTc5Ojw9QDs+PT47PD48PT5BQD5EQ0NDP0E9Ojs9QkNFQ0NEQT9FSEpJSky61dPT09TU1NTU1NTU1NTV1dXV1dXV1dXV1dXV1dXLy8vLy8vLy8rKysvLy8vLy8vLy8zLy8vMzMzMzMzNzc3Nzc3Nzc3MzMzMzMzMzMzMzMzMzMzMzczMzMzMzMzMzMzMzMzMzc3Nzc3Ozs/Pz9DQ0NDQ0dHS0tPT09PT09PT09TU1NTT1NTU1NTU1NTV1dXU1NTU1NPU1NTU09PT09TU1NTU1dTU1NTV1dTU09PT09LS0tLS0tLS09PT09TU1dXV1dbW1dXV1dXV1tbW1tXV1dXV1NTU1NTT09PT09PT1NTU1NTU1NTU1NTU1NTU09PT09LS0tLT09PU1NTU1dXV1dTU1NTT09PT09PT0tLS0dHRmn5nYWJOVWpKSElLPzw6OTM3Njc3PTs+Oj06Ojo4ODo7Ozg4Ojs7PD46PT09Ojw/PD0/QkA/Q0RDRD5APT08QENEQ0JEQkQ+REhJSUtMttfT09TU1NTU1NXV1dXV1dXV1dXV1dXV1dXV1dXVy8vLy8vLy8vLy8vLy8vLy8vLy8zMzMzMzMzMzMzNzc3Nzc3Nzc3Nzc3MzMzMzMzMzMzMzMzNzc3NzczMzMzMzMzMzMzMzc3Nzc3Ozs7Pz8/Q0NDQ0NHS0tLT09PT09PT1NTU1NTU1NTU1NTU1NTV1dXV1NTU1NPT1NTU1NTU1NTU1NTU1dXV1NXV1dXV1NTU09PT09PS0tLT09PT09PU1NXV1dbW1tXV1dbW1tbW1tbW1dXV1dXU1NTU1NTU1NTU1NTU1NTU1NTU1NXU1NTU1NTT09PT09PT09PU1NTU1dXV1dXV1dTU1NTU09PT09PS0tLR0p+DaV9kU1hsSEhIS0A9Nzg0NzY6Oj87RDw8Ojw8OTg6OTo6Ojs8Ojo7OT49Pjk9QDs/QUFCP0JCQUM9Pz8+PEBCRUNDQkBBO0ZJR01MSbLY09TU1NTU1NXV1dXV1dXV1dXW1tbW1tbV1dXW1svLy8vLy8vLy8vLy8vLy8vLy8vMzMzMzMzMzM3Nzc3Nzc3Nzc3Ozc3NzczMzMzMzMzMzc3Nzc3Nzc3Nzc3Nzc3Nzc3Mzc3Nzs7Ozs7Pz8/P0NDQ0NHS0tLS09PT09PT09TU1NTU1NTU1NTU1NTV1NXV1dTU1NTU1NTU1NTU1NTV1NTU1dXV1dXV1dXV1dTU1NTU1NPT09PT09PT09PU1NXV1dbW1tbW1tbW1tbW1tbW1tbV1dXV1dTU1NTU1NTU1NTU1NTV1NTU1NXV1dXU1NTU1NTT09PT09PT1NTU1dXV1dXV1dXU1NTU1NTT09PT09LS0tSjiGxfZlJWakdIR0lBPjM2Njo7PDhDPEJBPjtBPDg5Ojw6Ojw8PDk8PTo7PD09PD89QD9AQT9AQUBCPD4+PzxCQ0NDRkBBQT1ISklOTUeu2NPU1NTV1dXV1dXV1dXV1dbW1tbW1tbW1tbW1tbMzMvLy8vLy8vLy8vLy8vLy8vMzMzNzc3Nzc3Nzc3Nzc3Nzc3Nzs7Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Ozs3Nzc3Nzc3Nzc3Nzs7Ozs7Oz8/P0NDQ0NHR0dLS0tPT09PT09TU1NTU1NTU1NTU1NTU1NTV1dXV1dXU1NTU1NTU1NTU1dXV1dXU1NXV1dXV1dXU1NTU1dXU0tPU1NTU1NTU1NTV1dbW1tbW1tbW1tbW1tbX19bW1tXV1dXV1dXV1dXV1dTU1NTU1dXV1dXV1dXU1NTU1NTU09PT09PT1NTU1NXV1dXV1dXV1dXV1NTU1NPT09PT0tLWroprY2VSWGhMSkdJQjg0OTQ6Ozo5QDk+Q0U/PDw5OTk9Oj07PDw6PTw7OTw9Ozs/PUA9PT5AQD9CQT5APD05QERDQkFBQj48SEpLTU5IqNnU1NXV1dXV1dXV1dXW1tbW1tbW1tbW1tbW1tbWzMzLy8vLy8vLy8vLy8vLy8rKy8vLzMzMzMzMzMzMzM3Nzc3Nzc7Ozs3Nzc3Nzc/Pz8/Pz8/Pz8/Pz9DQ0dHR0dHR0dHR0dHS0tHV2djY2NnZ2dra2tvb29vZ2dnZ2dna2tra2tra2tjW19fX19fX19jX19fX19XV1dXV1dXV1dXV1dXV2Nvc3dzc3Nzd3Nvb29za09LT09PT09TU1NTU1NbW1dXV1dXV1dXV1dXW1tbX1tbW1tbV1dXV1dXV1dXV1dTU1dXV1dXV1dXU1NTU1NTU1NTU09PU1NTU1NXV1dXW1dXV1dXV1dTU1NTT09PT09PS1bqKa2hoUlhlSUlMTkA5OTo0O0E8Nz05QUM+QD89ODo6Ozk9Oz4/Ojs8PDo7PDo7Pj1APT8/P0FAQUE/QTw8Oz5BRENBREA9PElJSk1ORqPa09TV1dXV1dXV1dXW1tbW1tbW1tbW1tbW1tbW1szMz9DPz8/Pz8/Pz8/Pz8/W3t3d3t7e3t7e3t7e3t3S0NDQ0NDQ0NDQ0NDQ0ci5ubm5ubm5ubm5ubq6t6WkpKSkpKSkpKSkpKSnhmBjY2NjY2NjY2NkZGRlhIuKioqKioqKioqKioemuri4uLi4uLi4uLi4uLrR1NTU1NTU1NTU1NTU2K58gYKCgoKCgoGBgYGAj9LS0tLS0tLT09PS09PT3OPi4uLi4uLi4uLj4+Pi2NfX1tbW1tbW1tbV1dXV1dXV1dXV1dbW1dXV1dXV1dTU1NTU1NTU1NTV1dXV1dXW1dXV1dXV1dXV1NTU1NTT09PT09XDkXFrak5TYkxMVk08Ojo3Nz5DPjg+Oj8/QT0/QDc7Ojs7PTs+Pjo7PD48Oz07PT8+QDw/Pz1AQEBBPj88PjxAQUVCQkZAQD9HSEpLT0ae2tXV1dXV1dXW1tbW1tbW1tbW1tbW19fX19fX19fMzNDS0tLS0tLS0tLS0tLR3uzr6+rq6urq6urq6uvp1dLS0tLS0tLS0tLS0tTEqaqqqqqqqqqqqqqqq6aGhIWFhYWFhYWFhYWFik4MEhISEhISEhISEhIRE0pUU1NTU1NTU1NTU1NPg6ejo6Ojo6Ojo6Ojo6Knz9PS0tLS0tLS0tLS0tmRO0RERERERENDQ0RDP1zT09LS0tLS0tLS0tLS0eDs6+vr6+vr6+vr6+vr6dnX19fX1tbW1tbW1tbW1dXV1dXV1dbW1tbV1dXV1dXV1dXV1dTU1NTV1dXV1dXW1tXV1dXV1dXV1dXU1NTU1NTU1NPUy5h2bGlKTl9NUlVNPjw8Nzs/Qz42Ojc+Pzs9Qj85PDk9Ozw6PD07PTs9Ozs9PD0+PT07QT08QUBBQT08Pzw7QEJDQURFPUFAQ0ZLS09GmNzV1dXV1dbW1tbW1tbW1tbW1tfX19fX19fX19fXzMzR0tLS0tLS0tLS0tLS0d3q6enp6enp6enq6unq6dXS0tLS0tLS0tLS0tLUxaqrq6urq6urq6urq6yoiIeHh4eHh4eHh4eHh41SEhgYGBgYGBgYGBgYFxpOWVdXV1dXV1dXV1dXU4WopKSkpKSkpKSkpKSjqM/T0tLS0tLS0tLS0tLZlEBISUlJSUlJSEhISENg0tPS0tLS0tLS0tLS0tHf6+rq6urq6urq6urq6unZ19jX19fX19fX1tbW1tbW1tbW1tbW1tbW1tbV1dXV1dXV1dXV1dXV1dXV1dXW1tbW1tXV1dXV1dXV1dXU1NTU1NTU1NGcenFpSlRdT1JVTkQ+Pzs/QEA4Ojs4PDs7PD86Ozs4Ozk5Ozw7Ojw5Ozs8Ozo9PT0+PUE/Pj8/Pj08PT88PEFBQ0FERTw+QEVGSktNRpPc1dXV1tbW1tbW1tbW1tbW1tfX19fX19fX19fX183N0NLS0tLS0tLS0dHR0dDc6Ofn5+fn5+fn5+fn5+bV0dLS0tLS0tLS0tLS08Wtrq6urq6urq6urq6vq46NjY2NjY2NjY2NjY2SXSInJycnJycoKCgoKCcpWmNiYWJhYmJiYmJiYl6MrKmpqampqampqampqazP09LS0tLS0tLS0tLT2ZlNVFRUVFRUVFRUVFVRatLT0tLS0tLS0tLS0tLS3+np6enp6enp6enp6enn2djY2NjY19fX19fX19fX19fX19bW1tfX19fW1tbW1tbV1dXV1dXV1dXV1dXV1tbW1tbW1tbW1tbV1dXV1dXU1NTU1NTWo3txZElbYE5OVU9AQT89REI+Oz06OTs6PT07PDs6OTg5OTs8Ozw8Ojo7PDo7QD08PTxAQTxBQTs7PEA/PD1CP0RDQ0U8PkJERkpMTEWN3NXV1tbW1tbW1tbW1tbX19fX19fX19fY2NjY2NjNzc7Ozs7Ozs7Ozc3Nzc3Nzs/Pz8/Pz8/Pz9DQ0NDQz87Ozs7Ozs7Ozs7Oz87NzMzMzMzMzMzMzMzMzMvJycrKysrKysrKysrKysfCw8PExMTExcXFxsbGxsvMy8zLzMzNzMzMzMzLz9HR0tLS0tLS0tLS0tLS1NXV1dXV1dXV1NTU1NXQy8vKysrKysvLysvMzMzT1NTV1dXV1dXW1dbW1tjY2NnZ2dnZ2dnZ2dnZ2djY2NjY2NjY2NjY2NfX19fX19fX1tfX19fX19bW1tbW1tbW1tXV1dXV1dXV1dbV1dbW1tbW1tbW1tXV1dXV1dTU1NTU169/cF5GXmJQUVdOR0ZDQ0lBPz07PDo8N0BBPD04Ojo4OTg7Pzs8PDs7PDw8PD87PD46Pj44PkI8Pj1BPjw+QkBERUNAPD5APkNJSUtEh9zV1tbW1tbW1tbW1tbX19fX19fX19jY2NjY2NjYzs3Nzc3Nzc3Nzc3NzdHNzc3NzczP09LSzs3P0s7Ozs7Ozs7O09TQzs7S1M/P0tTV1NDPz8/Pz8/Pz8/Pz8/P0NDQ0NDR0dHR0dHS09PU1NTU1dXV1tbW1tfW1tbX1tfX19fX19fX19bW1tbW1tbW1tbW1tbW1tXV1dXV1dXV1dTU1NTU1dfX19fX19fX19fX2NjX1tbW1tbX19fX19fX19fX19jY2NjY2NjY2NnZ2dnZ2dnZ2djY2NjY2NjY2NjY2NjX19fX19jY19fX1tbW1tbW1tbW1tbW1tbW1dbW1dbW1tbW1tbW1tbW1tXV1dXV1NTV1di4gm9XSl9jUlFaS0hBQTxCPT07Oj4+PD4/PT0/ODk6OTk3OD48PD47Ozw7PDs/PT0+OTs7OT0+P0A+QD07OkI/QkNCPz0+QD5CRUdKQoDc1tbW1tbW1tbW19fX19fX19fX2NjY2NjY2NjY2M7Ozs7Ozs7Nzc3Nzsqfys3Nzc3QuYOEi8fTwJrLz87Ozs7O0KaSxdHTuZ/Q0ZyChIrGz87Ozs7Ozs7Ozs7Oz8/Pz8/P0NDQ0NDQ0NDR0dHR0tLT09PU1NTU1NTV1dXV1dXV1dXV1dXV1dXV1dXW1tbV1dXV1dbW1tbV1dXV1dXV1NTU1NXV1dXV1dXV1dXW1tbW1tbW1tbX19fX19fX19fY2NjY2NjY2NjY2NnZ2dnZ2dnZ2dnZ2dnY2NjY2NjY2NjY2NjY2NjY2NfX19fX1tbW1tbW1tbW1tbW1tXV1tbW1tbW1tbW1tbW1tbW1dXV1dXV1dXYwIBuVU9gY1dZW0xMQ0A9PTs9Ojw+Qj5CQ0A8Ojg5ODo6Ojc7Pz4/PDw7PDo5Pzw8PTg5PD9BPj09PUFAPTtBQkBCQz47QD9BQUlHSkF629bW1tbW1tbX19fX19fX19jY2NjY2NnZ2djY2dnOzs7Ozs7Ozs7OzdKpj63Rzs7Ozpu3tqSiwJOerNPOzs7O0qqdrJTNs5eaurqVuLmvodLOzs7Ozs7Ozs7Pz8/Pz8/Pz9DQ0NHR0dHR0dHS0tLT09TU1NTU1dXV1dXV1dXV1dXV1dXV1dXV1dXW1tbW1tXV1dbW1tbW1tXV1dXV1dXU1dXV1dXV1dXW1tbW1tbW1tbW1tfX19fX19jX19fY2NjY2NjY2djY2dnZ2dnZ2dnZ2dnZ2dnZ2djY2NjY2NjY2dnY2NjZ2NjY19fX19fX19bW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tXV1dXV1dXV18h/b1pTYWVeXVxPSkQ9QD8+PDc6Pjk/RD5AOTg3ODk7Ozw4OT89PTw9PD47OkE7OTs5OzxDQDw7PT5AQT49QkQ/QkM9PT8+Pz5ISUg/ddrW1tbX19fX19fX19fX2NjY2NjZ2dnZ2dnZ2dnZzs7Ozs7Ozs7Ozs/Inrym0tDQzsqgl36Cw6abr6fUz8/P0MmXmYWlr6Cip7LRkn1+r7DRzs7Ozs7Ozs7Oz8/Pz8/Pz8/Q0NDR0dHR0dLS0tPT09TU1dXV1dXV1dXV1dXV1dbV1dXV1dXV1tbW1tbW1tbV1dXV1dXW1tbV1dXV1dXV1dXV1dXW1tbW1tbW1tbW1tbW1tfX19fX19jY2NjY2NjY2NjY2NjZ2dnZ2dna2dnZ2dnZ2dnZ2dnZ2djY2NjY2NnZ2dnZ2dnY2NjY2NfX19fX19fX19bW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1dbV1dXV1dfNiHNdWGloXl9gT0lGOkFAPj88PDo2P0JAQjk2NDc6Ozo8Ojk+PD49PTs/PTxBPjw8Ojw8PTw6PEA9QEI+PkFCPUNDPT0+Oz9BRUtIQHDZ1tbX19fX19fX19fY2NjY2NjZ2dnZ2dnZ2dnZ2c/Pz8/Pz87Ozs7SrKWnqdXAvNLHnY+ey9PJipmq1M/Pz8/RpLC9l6HHhpq11dPNnp7D0M/Pz8/Pz8/Pz8/Pz8/Pz8/Q0NDQ0dHS0tLS09PT1NTU1dXV1dXV1dbW1tbW1dbW1tbW1tbV1tbW1tbW1tbW1dXV1dXV1dXW1dXV1dXV1dXV1dXW1tbW1tbW1tfX19fX19fX19fX19jY2NjY2NjY2NjY2NnZ2dnZ2dnZ2tnZ2dnZ2dnZ2dnZ2dnZ2dnY2dnZ2dnZ2dnZ2dnY2NjY19fX19fX19fX19bW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbV1dXW0JB1W1tqaWFeXVNOSTxDQEE+QD46OEVAP0M6NzQ5Ojo5Ozs4Oz0/Pj49QT08P0A9Pjw8PDw8Oj1AQD8/PT5CQD9AQkA8QD0+QUVLRz9r19fX19fX19fX2NjY2NjY2NjZ2dnZ2dnZ2dnZ2tnPz8/Pz8/Pz8/QzJ2Nl6zQmpfKxZ6ynpbN1q2ZqtTPz8/Pz9DVuZik2qSZtdTTwKCg0M/Pz8/Pz8/Pz8/Pz8/Pz8/P0NDQ0dHS0tLT09PT1NTU1NXV1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbV1dXV1dXV1dXV1dXV1dXV1dXW1tbW1tbW19fX19fX19fX19fY19fY2NjY2NjY2NjY2NjZ2dnZ2dnZ2drZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2djY2NjY2NfX19fX19fW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1dXV1tKUcl5ea2tqZV1PTEc/RENDQDo9OzxCPD49OTY0Ojk5Ojo5Nzs/QDs8PUA8PEE+PD07PTw/PDo8Q0A+PTs9QD5CPkBBPkA9QD9GSUQ/ZtXX19fX19fY2NjY2NjY2NnZ2dna2tra2tra2traz8/Pz8/Pz8/P07GigJuvyaCjv8qcpYynrdiqmarUz8/Pz8/Q0Zqdt9iimbXU1K+iqdTQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NHR0tLT09PT1NTU1NXV1dbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1dXV1dXV1dbW1tXW1tbW1tbV1tbW1tbX19fX19fX19fX19fX2NjY2NjY2NjY2NjY2NjY2dnZ2dnZ2dna2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2djZ2djY2NjY2NfX19fX19bW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbSk3BgXnBoZmVaUUhHQkVDQEA3Ojo8Pjo8OTc2NTk6Njo8Ozc8QEA8Ojo9Ojw/Pj08OUA8PDo6OT9APj08PUBBQz9APz5BOz9ARkpCP2LS2NfX2NjY2NjY2NjY2dnZ2dnZ2tra29vb29vb28/Pz8/Pz8/P0M6fkGyclteqo9PSrqa1mJ/Vqpmq1M/Q0NDQ1aekoNLWopm11NSjobrU0dHR0NDQ0dHQ0NDQ0NDQ0NDQ0NHR0tLT09PT1NTU1dXV1dbW1tbX19bW1tbW1tbW1tbX1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tfW1tfX19jY2NfX19fX2NjY2NjY2NjY2NnZ2dnZ2dnZ2dnZ2dna2tnZ2dnZ2dnZ2dnZ2dnZ2dnZ2djY2dnZ2dnZ2dnZ2dnZ2NjY2NjY2NjX19fX1tbW1tbW1tbW1tbW1tbX19fX19fW1tbW1tbX0pNuYFxxZGdkWlVKQUNGREFCODs/PD07PDw4NTU4OTY4Ozo5PDo+Pzw9PTk8Pz49Ojo+OTw6Ojg+Pzw9PTw+QEFDQT48PDpCRERKRkJd0NnX19jY2NjY2NjY2dnZ2dna2trb29vb29vb29vPz8/Pz8/Pz9G9n8O31pfA09HQ0srSzZeb1KqZq9XRz9DQ0sCdosnU1aKattTOnp/J0tHR0dHR0dHR0dHR0NDR0dHR0dHR0tLT09PU1NTV1dXV1tbW1tfX19fX19bW1tbW1tfX19fW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW19fX19fY2NjY2NjY2NjY2NjY2djZ2dnZ2dnZ2dnZ2dnZ2drZ2tnZ2dnZ2dnZ2dnZ2dnZ2djY2NjY2NjZ2dnZ2dnZ2dnZ2dnY2NjY2NjY2NfX19fX19fX19fW1tfX1tbX19fX19fX19fX19bW19GRbF1cb2doYl1PRkBISUdFQDw8Pj48PT48NzU2Ojk2OTs6Ojs4QD86PDw5PD49Ozs6Pzk/Ojs5PT49Pjw7PTxAQ0I/Pz47Q0ZGR0hEWc3a2NjY2NjZ2dnZ2dnZ2dna2trb29vb29vb29vb0NDQz8/Pz8/Pz5V+e6WS1KKa08ySl6ObodirmavV0pem09SkoI+30NajmbbXw5+g0tHR0dHR0dHR0dHR0dHR0dHR0tLS0tLS09PU1NTV1dXV1tbW19fX19fX19fX19fX19fX19fX1tbW1tbW1tbW1tbX19bW1tbW1tbW1tbW1tbW1tbW1tbW1tfX19fY2NjY2NjY2NjY2NjY2dnZ2dnZ2dnZ2dnZ2dnZ2tra2tra2tnZ2dnZ2dnZ2dnZ2djY2NjY2NjZ2dnZ2tnZ2dnZ2dnZ2djY2NjY2NjY2NjX19fX19fX19fX19fX19fX19fX19fX19fX1tfPjGRWXnBrXGBgTkVITUlJT0M+OkI9PUBCOzU1Nzw6Nzo7Ojo7OT09Ojo6OT0+Pz07OT47PDo8Ozk+PD47PD0+QENCPz5BPEFDR0ZGRVXJ29jY2NnZ2dnZ2dnZ2dra2tvb29vb29zc3Nzc3NDQ0NDQ0M/Pz9DR1aeZrcmjqL7KnbGdo7XZqZup2LirocjGpr2Vkabaopq02bGkp9bS0tLS0tLS0tLS0tLR0dHS0tLT0tPT09PU1NTV1dbW1tbX19fX19fX19fX19fX19fX19fX19bW1tbW1tfX19fX19fW1tbW1tbW1tbX19fW1tbW1tbW1tbX19fX2NjY2NjY2NnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dra2tra2tra2trZ2dnZ2dnZ2dnZ2djY2NjY2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnY2dnY2NjY2NjX19fX19fX19fX19fX19fY2NfX19fX19fYzYZdV2JvZE9dVEtIRlNRS0xAPj1EPD9DRj01NTc7OTY6Ozo8PTo7Pzo6OTg6PT0/Pjs/Oz49Ojs5Pjs9PD0+QURCQD8+PzxAQUVHRURSxdvY2dnZ2dnZ2dnZ2tra2tvb29vb3Nzc3Nzc3NzQ0NDQ0NDQ0NDQ0NO5gL3Tm5bP1LWLkZ/T1LyBu9TOlKDUyo6Tl5Cm2rGDxta5g7/V0tLS0tLS0tLS0tLS0tLS0tLT09PT09PU1NXV1dbW1tfX19fX19fY2NjY19fX19fX19fX19fX19fW1tbX19fX19fW1tbW1tbW1tbW19fX1tbW1tbW1tbX19fX19jY2NjY2NnZ2dnZ2dnZ2dnZ2tnZ2tra2tra2tra29ra2tra2tnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2NjY2NjX19fX19fX19fY2NjY2NjY2NjY2NfX2ct+WlVqaltMX01KTEpVTEZCPD0/R0ZHS0g9NjU3Ojk3OTo7Ojw9OT45OTo4Oz0+PkE+PTk8PDo9Pj46PTk5Oj9FQUA+PT8/QkBHRURFUMHc2dnZ2dnZ2dna2trb29vb29vb3Nzc3Nzc3dzc0NDQ0NDQ0NDQ0NDQ0cHR0crI0tDUxLjS0tHSwtLQ08fM0tTCr7Cz0dPRw9TS0sLT0tLS0tLS09PT09PT09LS0tPT09PU1NTU1NXV1dbW1tfX19fX19fX2NjY2NjX19fX2NfX19fX19fX19fX19fX19fX1tbW1tbW1tbW1tfX1tbW1tbW1tbW19fX19fY2NjY2NjY2dnZ2dnZ2dnZ2dra2tra2tra2tra29va2tra2tra2dnZ2dna2tnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dna2tnZ2dnZ2dnZ2djY2NjX19fX19fY2NjY2NjY2NjY2NjY19rHd1xSZ2laTlpOTFBRV0VKPz89PkFFTExBPTc3NTs4ODk5Ojs8Pjw+ODo6OTs+P0A9Pj46NTo6Oz0/Ojs5Ojw+QkJAPz8/P0FCR0RDRE683dnZ2dnZ2dna2tvb29vb29vb3Nzc3Nzc3d3d3dDR0dDQ0NDQ0NDQ0NDS0NDR0dDQ0dPU0dHR0dPR0dHS0tHR1NbW1tPS0tXT09PV0tLS0tPT09PT09PT09PT09PT09PU1NTU1dXV1dbW1tfX19fX2NjY2NjY2NjY2NfX19jY19fX19fX19fX19fX19fX19fX1tbW1tbW1tbX19bW1tbW1tbW1tfX19fX2NjY2NjY2NnZ2dna2tra2tra2tra2tra2tra2tvb2tra2tra2trZ2tra2tra2tra2tra2tnZ2dnZ2dnZ2dnZ2trZ2tra29ra2trZ2dnZ2dnZ2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjbwXNYVWlrU0xSTlBSWVRGSTw+Qz9BQkVKPT43ODY5Njc4OTk7Oz0/QDw8ODk7Ozs/Pjw8OTU6PT47OTk7PD8/P0JCQT1BPUBBQkZCQkJLtd7Z2dra2tra2tvb29vb29vc3Nzc3Nzd3d3d3d3R0dHR0dHR0dHR0dDQ0NDQ0NDQ0dHR0dHR0dHR0dHR0dHS0tLS0tLS0tPT09PT09PT09PT09PT09TU1NPT1NTU1NTU1NXV1dXV1dXW1tbX19fX2NjY2NjY2NjY2NjY19fY2NjX19fX19fX19fX19fX19fX19fX19fW1tbX19fX1tbW1tbW1tbX19fX19jY2NjY2NnZ2dna2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tnZ2dnZ2dnZ2NjY2NjY2NnZ2dnZ2dnZ2NjY2NjY3LxvVFRsbExLUkpUUlVLRkQ6PkdEREFERjw/ODk6OTU5OTo3PD07PkA9PTc5Ojs5Pjs5OTY2Oj1AQT47PDk6Pj9DQT4/Qj0+QkNFQkFCSrDe2dra2tvb29vb29vb29vc3Nzc3Nzd3d3d3d3d0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0tLS0tLS0tLS0tLS0tLS0tPT09PT09PT09PT09PT1NTU1NTU1NTU1NTU1dXV1dXV1tbW1tbW19fX19jY2NjY2NjY2NjY2NjY2NjY2NjY19fX19fX19fX19fX19fX19fX19fX19fX19fW1tbW1tfW19fX19jY2NjY2NjZ2dnZ2dra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2trZ2dnZ2dnZ2djZ2dnZ2dnZ2dnZ2dnZ2dnY2Ny2a1NbcGtLVVdSXFFXSEQ+PEJKRT1ISj89PDc4ODo1OTg5Njs+PD1APDw1OTk8Oj87OTk0ODw9PUFBPD47Ojw+QD89PkE9PUNGR0I/Qkmq39ra29vb29vb29vb3Nzc3Nzc3N3d3d3d3d3d3dHR0dHR0dHR0dHR0dHR0dHR0dHS0M/U0M7P0tLT0tLS0tLS0tLS0tPT09TU1NTU1NTU1NTU1NTU1NTU1NTU1NTV1dXV1dXV1dbW1tbW19fX19fY2NjY2NjY2NjY2NjY2NjY2NjY2NjX19fX19fX19jY2NfX19fX19fX19fX19fX19fX19fX19fX19jY2NjY2NjY2dnZ2dra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tvb29va2tra2tra2tra2tra2tra2tnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dndsGRTYXJfT1pUV19RUkdCPUVJS0FBTEQ/Pzs5ODg5Mzg2ODY5Pj0+Pz06Njo7Pjs9PTo5Njg6PTtAQDxAPz0/P0I+PD48PEJFSElCPkNJpODa29vb29vb3Nzc3Nzc3Nzc3N3d3d3d3d3d3t7S0tLS0tLS0tLS0dHR0dHR0dPT0bm7zLqbnLrQyNPT0tLS09PT09PT09PU1NTU1NTU1NTU1NTU1dXV1dXV1dXV1dXV1dbW1tbW1tbX19fX19fY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjX19fX19fX19fX19fX19fX19fX19jY2NjY2NjY2NjZ2dra2tra2tra2tra2tra2tra2tra2tra29va2tra29va2tvb2tra2tra2tra2tra2trb29vb29va2tra2tra2tra2tra2tra2tra2tnZ2dnZ2trZ2dnZ2dnZ2dnZ2dnZ3qpfVWBuW1VZUVpeT0xHQ0ZNSUZEREk7QUE7PDg4NjQ4Njk4Nzw/QT89Ojc8Pz48Pz87OjY4OD09QEE9QD5BQD1AOjs6Pj1BRUdKQkBDR57h29vb29vc3Nzc3Nzc3Nzc3d3d3d3d3d7e3t7e0tLS0tLS0tLS0tLS0tLS0tO+wMqaoKKViJGeqpOpz9TT09PT09PT09PU1NTU1NTU1NTU1NTV1dXV1dXV1dXV1dXV1tbW1tbW1tbX19fX19fY2NjY2NnZ2dnZ2dnZ2dnZ2djY2djY2NjY2NjY2NjY2NjY2NjY2NjX19fX19fX19fX19fX19fX19fY2NjY2NjY2NjZ2dna2tra2tra2tra2tra2tra2tra29vb29vb29vb29vb29vb29vb29ra2tra2tra2tra2tvb29vb29va29vb29vb29va2tra2tra2tra2tra2tra2trZ2dnZ2dnZ2dnZ2d6iXFVeblheXU5aUFROQ0NMSUlJRkpEPEJBPDs4Nzc3OTc3OTk9P0E/PDo5QD88PkI/Ojg3NzY9P0BAPUBBPz88PTs7OD48P0VJSEE/Q0aX4dvb29zc3Nzc3Nzc3N3d3d3d3d3d3t7e3t7e3tPT09PT0tLS0tLS0tLS0tTIlZyum5m1iX2TjIKBhMTV09PT09PT09PU1NTU1dXV1dXV1dXV1dXV1dXV1dXV1tbW1tbW1tbW1tfX19fX19fX2NjY2NjY2dnZ2dnZ2dnZ2dnZ2dnZ2NjY2NjY2NjY2NjY2NjY2NjY2NfX19fX19fX19fX19fX19fX2NjY2NjY2NjY2dnZ2dnZ2dna2tra2tra2tra2tra29vb29vb29vb29vb29vb29vb29vb2tra2tra2tra2tvb29vb29vb2tvb29vb29vb2tra2tra2tra2tra2tra2tra2tra2tra2tnZ2dndmlpYYW5ZYVdPV01QRUJETElNS0ZJRT5CRDk4ODY4OTc1Njk4PT1BPjo4OT4+PD9APzw1Njc2PD4/PjtAQEA/Pj4/Pjs/PkFCRkdCQENIkeLb29zc3Nzc3d3d3d3d3d3d3d7e3t7e3t7f39/U09PT09PT09PT09LS0tLTz6h+kayPko6MhoCIiYSQo8rU09PT09PU1NTU1dXV1dXV1dXV1dXV1dbW1tbW1tbW1tbW1tbW19fX19fX19fX2NjY2NjY2dnZ2dnZ2dnZ2dnZ2dnZ2dnY2NjY2NjY19jY2NjY2NjY2NjY2NjX19fX19fX19fX19fY2NjY2NjY2NjY2NnZ2dnZ2dna2tra2tra2tra2tra29vb29vb29vb29vb29vb29vb29vb29ra2tra2tra2tvb29vb29vb29vb29vb29vb29va2tra2tra2tra2tra29vb29ra2tra2tra2tna3JJaWWNuWlpSVV5QTDxAR05IUklIRT47SEY4OTc1Nzg3NTg5ODs+Pj07ODlBPj1AP0E+NzU5Njs+QUI/P0BAQUI/Pj8+QUBEQUZIQj9FSozi3Nzc3Nzc3d3d3d3d3d3e3t7e3t7f39/f39/f1NTU09PT09PT09PT09PWtaWaiIuQhYCFi4iBg4qLf4bC1tTU1NTU1NTV1dXV1dXV1dXV1dXW1tbW1tbW1tbX19fX19fX19fX2NjY2NjY2NjY2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2djY2NjY2NjY2NjY2NjY2NjY2NjY2NjX19fX19fX19fY2NjY2NjY2NjY2dnZ2dna2dra2tra2tra2tra2tra2tvb29vb29vb29vb29vb29vb29vb29vb29ra2tra2trb29vb29vb29vb29vb29vb29vb29vb2tra2tra2tra29vb29vb29vb29vb2tra29uIWltnalxYTFpfVkg6TEhMSkpDRUVDQExINzo3Njc4ODU4Nzg5PDw7Ozk4QD89Pj8/PDY3PDQ3P0JCQUBAPz8/QT09P0A+QEBGRT09REuI4tzc3Nzd3d3d3d7e3t7e3t7e3t/f39/f39/f39TU1NTU1NPT09PT09PUxZKCg4WGfYGCfXx5foGCg36k29bU1NTU1NTV1dXV1dXV1tbV1tbW1tbW1tfX19fX19fX19fX19fX19jY2NjY2NjZ2dnZ2dnZ2dna2tnZ2dnZ2dnZ2dnY2NnY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjX19fX19fY2NjY2NjY2NjY2dnZ2dna2tra2tra2tra2tra29vb29vb29vb29vc3Nzc3Nvb29vb29vb29vb29vb2tra2tra29vb29zb29zb29vb29vb29vb29vb29vb29va2tvb29vb29vb29vb29vb29vb2tvZgFpebWhaU0ldW1hKRE1ISlNMR0ZBQD9KQjg7NjY5OTc1ODY4Ozo7Ojw5OD09O0A9Ozo2NTw3Oz1CQEFBPD49QEE9PEA/Pz5CREU+PERLg+Lc3d3d3d3d3t7e3t7e3t7f39/f39/f39/f39/V1dTU1NTU1NPT09PT2LKEkKh9g3l2hIh/e3d5gn5+i67A1dTU1NXV1dXV1tbW1tbW1tbW1tbW1tfX19fX19fY2NjY2NjY2NjY2NjY2NjZ2dnZ2dnZ2dna2trZ2dnZ2dnZ2dnY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2dnZ2dnZ2tra2tra2trb2tra2tvb29vb29vb29vc3Nzc3Nzc29vb29vb29vb29vb29va2trb29vb29zc3Nzc3Nvb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vc1nlcWmxmWFJPYFFSQUhHSkZYTEZAQENDSz87Ozc4ODc2NTc2ODo5PDw6PTs/PTs9Pjw7ODg8OT0/QkFCQzw8P0FCPj1BQkNCREVDQDtDTH3h3d3d3d3e3t7e3t7e39/f39/f39/f39/g4ODg1dXV1NXU1NTU1NPU0ruen3WKeXuIgICChYGDcnOAhYOMrNfV1NXV1dXW1tbW1tbW1tbW1tbW19fX19fX2NjY2NjY2NjY2NjZ2dnZ2dnZ2dnY2NnZ2dna2tra2trZ2dnZ2dnZ2djY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2dnZ2dna2tra2tra29vb29ra2trb3Nzc3Nzc29zc3Nzc3Nzc3Nzb29vb29vb29vb29rb29vb29vb29zc3Nzc3Nzc3Nvb29zc3Nzc3Nvb29vb29vb29vb29vc3Nzc3Nzc3Nvb29vb3dByXV9wZVdLUGNPS0JHQ0pIS0ZBPEE9SFBBOjo3Nzg3Njc4Nzw6OD09PD47QD88Pz07Ojs5Ojk8QEJAQkNAPUFAPz1AQkNDQUBAP0A7RU144N3d3d7e3t/f39/f39/f39/f3+Dg4ODg4ODg4NXV1dXV1dXV1NXU18h4i4V8goh6g4SBfoKCc2l0hYuGkJ3U1tXU1dbW1tbW1tbW1tbW19fX19fX19jY2NjY2NjY2NnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dra2tra2tra2dnZ2dnZ2dnY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2dnZ2dna2tra2tra2tra2tvb2tvb3Nzc3Nzc3Nvc3Nzc3Nzc3Nzc29zb29vb29vb29vb29vb29vb29vc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc29vb297KalxjcWVST1heSz9HTElPS0VAPkFCP0lPPjk6NzY7NzY6Ozc7Ojg6PDw+Oz09Oz48Ojs4OTo4OUFCQkFAQDtAQj06PkFCQz8+PT4/PUZOdN/e3t7e3t7f39/f39/f4ODg4ODg4ODg4ODg4OHV1dXV1dXV1dXV1s6dhpl+f5OTin+CgXx9gnNxm4mAgoOJwNnat7TQ19bW1tbX19fX19fX19fX2NjY2NjY2NjY2NjZ2dnZ2dnZ2dnZ2tnZ2dnZ2dra2tra2tra2trZ2dnZ2dnZ2dnZ2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NnZ2dna2tra2tra2tra2tra29vb3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nvb29vb29vb29vb29vb29vc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3NvfwGNaW21gVlBTU0pETEhNSEk8PkFEQ0ZORDw8OTc5OjY4Ozk3PDk4OTw9OzlAPjpBPzw3NTc7ODpAQUVBPz45PUI/Oz1CQkI6Pj07PT5GTnHe3t7e3t/f39/f39/g4ODg4ODg4ODg4OHh4eHh1tbW1tbW1tbV1tjLioCHhYOXjHh7e3lvfYF1a3ebdHZ7eInHxpiMrdjZ19fX19fX19fY2NjY2NjY2NjY2NjY2NjY2dnZ2drZ2dna2tra2tra2tra2tra2tra2tra2dnZ2dnZ2dnZ2dnZ2dnZ2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NnZ2dnZ2dnZ2dna2tra2tra2tra2tra29vb3Nzc3dzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nvb29vb29zb29vb3Nzc3Nzc3Nzd3dzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3d3d3d3d3Nzc3Nzc4LdjV1lrYlJNVVFMSktGS0ZDQD5CQT9FTT4+PTg5OTo3OTo3NT03Nzo+PDs7Qjw5Pz05NjY4PTk6QEJGQD49PEBCREA9QD9DO0A9PD4/Rk9t3N/e3t/f3+Dg4ODg4ODg4ODg4OHh4eHh4eHh4dbW1tbW1tbW1tfVrYZ6d32rn3l4entzdH+Dfm9xe3l6c3t2k4qFgImkzdnY19fX2NjY2NjY2NjY2NjY2NjY2NjY2NnZ2dna2tna2tra2tra2tra2tra2tra2tra2tnZ2dnZ2dnZ2dnZ2dnZ2dnZ2djY2NjY2NjY2NjY2NjY2NjY2NjY2dnZ2dnZ2dnZ2dra2tra2tra2tra29vb29vc3Nzc3N3d3d3c3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc29vb29vc3Nzb3Nzc3Nzc3N3d3d3d3d3d3dzc3Nzc3Nzd3d3c3Nzc3Nzc3N3d3d3d3d3d3d3d3dzc3OGtYVtebGJSTVZMTUdLS0RGQkI7QT08RUxCQT44Ojk6Nzc5NjY6NTs+QDs9Oz89PD89Ojk5Ojw5PEVDRkA/PkBDQkQ9OT0/QT1CPz1APkdPadvf3t/f3+Dg4ODg4ODh4eHh4eHh4eHh4eHi4uLW1tbW1tbW1tfQmH+Qh4N9eoN2e3Vzenl6kKqmd3JyfoeHh4CAfoKEhJHJzNnX19jY2NjY2NjY2NjY2NjY2NjY2NnZ2dnZ2tra2tra2tra2tra29va2tra2tra2tra2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2djZ2dnZ2dnZ2djY2NnZ2dnZ2dnZ2dnZ2tra2tra2tra2tra29vb29vb3Nzc3N3d3d3d3d3d3d3d3d3d3d3c3Nzc3Nzc3Nzb29vb3Nzc3Nzc3Nzc3Nzd3d3d3d3d3d3d3dzc3N3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3NzhpV9UYm1iUE9TSUhHRkpJSUJBPkJCPEVFREA+ODo4Ozc3Ojc4ODY+Pz07PDk9PDo+PTs6Njc7NjpEQUY+Pz8/PkNBPzs9PT47REM/PjxIT2fZ4N/f3+Dg4ODg4eHh4eHh4eHh4eLi4uLi4uLi1tbW1tbW19jYyH52doN+fnR2eIaCenl1d5yhu6GEgoCAfoeKinx/gYaMnKjO2NjY2NjY2NjY2djY2NjZ2djY2NjY2dnZ2dra2tra2trb29rb29rb2tra2tra2tra2tnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dna2tra2tra2tra2tra2trb29vb29zc3Nzc3N3d3d3d3d3d3d3d3d3d3d3d3dzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3e3t7e3t7e3d3d3d3c35pbT2drXFBRUElDT0pLR0xHSkJAP0FHREBBPDg8ODg1ODk3Njc3QEA/Ozw5Pj04PTw8Ojc4PTk/RENGPkE/QkBDPzw6Pj0/PkVEPz07S1Fj1+Hf4ODg4ODh4eHh4eHh4uLi4uLi4uLi4uLj49bW1tbW19XB3LRueHJze3B6eXaFiIR7eH2AgZiljH98fnuRhZaLhoGDgY6Rvd3Z2NjY2NjZ2dnZ2dnZ2dnZ2dnY2dnZ2dna2tra2trb29va2tva2tra2trb29ra2tra2tnZ2dnZ2dnZ2dnZ2dna2trZ2dnZ2dra2tra2tnZ2dnZ2dna2tra2tra2tra2tra2tra2trb29vc3Nzc3Nzc3N3d3d3d3d3d3d3d3d3d3d3d3d3d3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3e3t7e3t7e3t7e3t7e3t7e3t3d3d6NWFdobllQUUtISlNJTUhNSUtBQz9DRkJBRDo6PDg2NDg4NzY2Nj8+Pjo8OTw7Oj09PDw4Ozw8RERERT4/PkI+Qj84PT8/Q0NCQEE+O0xUY9Xh3+Dg4OHh4eHh4eLi4uLi4uLi4uLi4uPj4+PW1tbW1teslLZ6eHJvd5V7dHuLgHh1bn6Fg3t/hYhyfH2bnI6JioJ+g32Hk5rH1NjY2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dna2tra2trb29vb29vb29vb2tra2tra2tra2tra2tnZ2dnZ2dnZ2dna2tra2tra2tra2tra2tra2tra2tra2tra2trb2tra2tra2tra2trb29vc3Nzc3Nzc3Nzd3d3d3d3d3d3d3d3d3d3d3d3d3d3c3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3N3d3d3d3d3d3d3d3d3d3d3d3d3e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3d7Zf1lgaGxcUUtHR09LTk5PTURGQkg/Q0hEREA6Ozs4NzU3Nzc4NThAPkA7PDk8Ozw+Ojk7OTk7OUZERUI8QD4/PEBDOz5AP0A/Qj8+OjtKVWPV4eDg4eHh4eHi4uLi4uLi4uLi4uPj4+Pj4+Pj1tbX19vKhYR3cXJubniVhHt4hH95dnB4c3eLkY6CdnN9ioaId3d1d4ODfIiIk8Pb2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dra2trb2tvb29vb29vb29vb29rb2tra2tra2tra2tra2tnZ2dnZ2dna2tra2tra2tra2trb2tra2tra2tra2tra2trb29vb29ra2trb29vb29vb3Nzc3Nzc3Nzd3d3d3d3d3d3d3d3d3d3d3d7e3d3d3d3c3Nzc3Nzc3Nzc3Nzc3Nzc3d3d3d3d3d3d3d3d3d3d3d3d3d7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7f0nVZaGlqVk5KSE1OR01EUElGSEBFPUZMREM+Ozs8OTc3OTY2OTU4Pj4/PTs8QDs9PDo3Ozc5OThHREVCPUE9Qj8+QDw/QUE/QEJAPjs8S1Ri1OLg4eHh4eLi4uLi4uLi4+Pj4+Pj4+Pj4+Pj49fX19fEknuJf29sbnV2foSBg4qGfnVybWVtiIaKjoR7c4OHint4e4OPj4GEioqxztrZ2dnZ2dnZ2dna2tra2tra2tra2trb29vb29zc3Nzb29vb29vb29va2tra2tra2tra2tra2tra2tra2tra2tra2tra2tvb29va2tra2tra2tvb2tvb29vb29vb29vb29vb29vb29zc3Nzc3Nzc3d3d3d3d3d3d3d3d3d3d3t7e3t3d3d3d3d3d3d3d3dzc3Nzc3Nzc3d3d3d3d3d3e3t7e3t7e3t7e3t7e3t7e3t7e3t7f39/f39/f39/f39/f3t7e4clsW2pqalNOR0hOT0VIRk1JSUA8RD5ISUA9PDo6Ojg2ODo3Nzk0OD08PT07ODw8PDw4Njc4OTo6RUJFQT9APEI/Q0M+PkNEQUBAP0A8PUtRYdPj4OHh4uLi4uLi4uPj4+Pj4+Pj4+Pj4+Pj5OTX19fZqXaFfnx3bHB3eXh8jH2KhYB3anN0d3p9bot7fnl6foR/gIGDfnh8foeGlrbT2tnZ2dra2tra2tra2tra2tra2tvb29vb3Nzc3Nzc3Nvb29vb29vb29ra2tra2tra2tra2tra2tra2tra2tra29ra29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb3Nzc3Nzc3Nzc3d3d3d3d3d3d3d3d3d3d3d7e3t7d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3t7e3t7e3t7e3t7e3t7e3t7e3t7e39/f39/f39/f39/f39/f39/e3uO9amFpa2lRTkZNTEtKWE1OR0FAQE9BQz9AOzw4OTk5Njg2NjY4NDs+PD07OTY6Ojk6OTU4OTg5OkJERj8+Pj5AQEBCPzxBQD88Pj9BOT5KT17S4+Hh4eLi4uLi4+Pj4+Pj4+Pj4+Pj4+Tk5OTk19fX2sqKhIB5c29tcXN1d4CUeHaAfHWHhXd1cnWgmXp7d3Z5doR0bWxue3iAmouTu9za2tra2tra2trb29vb29vb29vb29zc3Nzc3Nzc3Nzc3Nzc29vb29vb2tra2tra2tra2tra2tra2tra2tra29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vc3Nzc3Nzc3Nzc3d3d3d3d3d3d3d3d3d3d3d3e3t7e3t3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3t7e3t7e3t7e3t7e3t7e3t7e3t/f39/f39/f39/f39/f39/f39/f397js2lpbmloUFBPTExPUk9LU0Y/RURERD48PDg7ODc5OTU2ODY2NzM6Pjs+PTc6Pjk5OTk2Ojo4NzxDRUc/Pzs/PkA9PkE9Oz0+OUFAQDhBTlFc0OTh4eLi4uLj4+Pj4+Pj4+Pj4+Pk5OTk5OTk5NjY2NjauY6AenZ1bmpveHCBfWt0cnZ3hIV5h4d5lY55eXp1d3pza298gHx2fYh8gLLe2tra2tvb29vb29vb29vc3Nzc3Nzc3Nzc3dzc3Nzc3Nzc3Nzb29vb29rb29vb29ra2tra2tra2tra29va29vb29vb29vb29zc3Nzb29vb29vb29vb29vc3Nvb3Nzc3Nzc3Nzc3Nzc3Nzc3d3d3d3d3t7e3t7e3d7e3t3d3t7e3t7e3t7d3d3d3d3d3d3d3d3d3d3d3d3d3t7e3t7e3t7e3t7f39/f39/f39/f39/f39/f39/f4ODg4ODg4N/f39/f4qpqa2hrZFNQT0ZQVFJOSFJLPkREQ0I7Ozk6Ojg2Nzg1NjY4ODg0Oz88Pzw5PDw3Ozo6Nzo6Nzo9Q0JDPUE+Pzw5PT5BQDs8PDtFQD47Q05TXNDk4eLi4uLj4+Pj4+Pj4+Pj5OTk5OTk5OTk5OTY2NjZ1p5vdntveHh2cG50d3BwdHBzb36Jc3qGhY2EenNtcoB6hn1vg5OBdnx9g4a13drb29vc29vc3Nzc3Nzc3Nzc3Nzc3Nzc3d3d3Nzc3Nzc3Nzc3Nzb29vb29vb29vb29ra2tra2tvb29vb29vb3Nzc3Nzc3Nzc3Nzc3Nzc3Nvb29vb29vc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzd3d3d3d3d3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3d3d3d3d3d7e3t7e3t7e3t7e3t7f39/f39/f39/f39/f39/f39/g4ODg4ODg4ODg4ODg4N/f3+KgbWhma2ZVVlJHUFFOS0xMRUJIRUc9OD08Ojo3Nzg2Nzc2NTY3NDg+PD09Ojg6OD46Ozc4Nzc6Oj5DRDtDQj49OD1AQUM/Pjw+RTw+PUJNUF/S4+Hi4uLj4+Pj4+Pj4+Pk5OTk5OTk5OTk5OTk2NjY3MB2doCCfnp4eHBsdXlya399bHNvdGdoaYB/aWl4c2d+iYl4cIKGe3d9foWKvd3b3Nzc3Nzc3Nzc3Nzc3Nzc3d3c3Nzc3N3d3dzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nvb29vb29vb29vb3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzd3d3d3d3d3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7f39/f39/f39/f39/f39/f4ODg4ODg4ODg4ODg4ODg4ODg4ODflGttZm5mU1NJUFlUTEhGTkZGRUJGPTs+PDs5Nzc4NTc5NjQ1NzU4PDs9Pjo6OztAOTs7ODc6OTlAQkE8QUE/Pzk/QEJFQ0FAQEM7Oz1ES01g1uTi4uLi4+Pj4+Pj4+Pk5OTk5OTk5OTk5OTk5NnZ2tmYc3uqhJaCcnR1dn14aGx8d2h4d25rcHR5gIJ3dHyBhIJ9c3CAin94gn95g8je3Nzc3Nzc3Nzc3Nzd3d3d3d3d3d3d3d3d3N3d3dzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nvb29zc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3N3d3d3d3d3d3d3d3d3d3d3d3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e39/f39/f39/f4N/f39/f3+Dg4ODg4ODg4ODg4ODg4ODg4ODg4ODh24tubWdzY1lRTVVbV0hDSUZOS0dCRD8/Qjo7OjY2NzU2NzY0ODc2Ozw7Pj86PDk8Qjg3OTo6Ojk6QUFCQUJDQEE+PT9CQ0NEQUJGOTg9REpOYtjk4uLi4+Pj4+Pj5OTk5OTk5OTk5OTk5OTk5OXZ2drcqHGCtXiRfnNsem6EgXaCfWtoan+DeHZ8dX2FhXRmcHl9d316gIqFe318foC03tzc3Nzc3N3d3d3d3d3d3d3d3d3d3d3d3dzd3d3d3dzc3N3c3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzd3Nzd3d3d3d3d3Nzc3Nzc3Nzc3Nzc3N3d3d3d3d3d3d3d3d3d3d3d3d3d3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e397e3t7e39/f39/f39/f39/g4ODg4ODg4ODg4ODg4ODg4ODg4ODg4eDg4ODg4ODg4tiFb3FrdWFWT1VVXE9ETUY+SkdKRUQ8P0I6PDk4Njg0NTY3NDc2NDk7Ozw7OD47PEE4ODo9OD04Oj09QEBAP0FCP0A+QENCQ0FBRTc2O0RMTmPa5OLi4+Pj4+Pj5OTk5OTk5OTk5OTk5OTk5OXl29ra3Z5sbnNxhY1ybXBuf391hH5rcnZ2enN4gXhzbnVwbWt2fHmFiIB/f392coODsd/c3Nzc3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3Nzd3d3c3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3N3d3d3d3d3d3d3d3d3d3d3d3d3c3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e39/f39/f39/f39/f39/f39/f39/f39/f39/f4ODg4ODg4ODg4ODg4ODg4ODg4OHh4eDg4eHh4eHh4eHh4OLXhW1xb3ZeUldTWlpRSkhDQFFAQkQ8OT9BOjw5NzU3NDU2NjQ3NTY9PDo9PTk+OjxAODo6PDY7OTs+PUJCQjtBQkBDQEBEREM8PUA3OjxFS01l3OPi4uPj4+Pj5OTk5OTk5OTk5OTk5OXl5eXl5dPOxsB+cWxveHt2b3VuanNzbZKGeG50dG5vdIZ/b2twboJ0bXZyfY2DdnF/d3mKgabf3Nzc3d3d3d3d3d3e3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3dzc3d3d3dzc3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3t7e3t7e3t7e3t7e3t/f3t7e3t7f39/f39/f39/f39/f39/f39/f39/f39/f39/f4ODg4ODg4ODg4ODg4ODg4ODg4ODg4eHh4eHh4eHh4eHh4eHh4eHi1oZucG1xYFJZUFdfWUpMTElSP0Q9OTtCRjs6OTc0NTY1NzU0NjY2Pj07Pz45PTk7Pjg9Ozo0ODtAQENCQ0FCRkE/Q0BBQkREOz0+OTs8QkxNZODl4+Pk5OTj4+Tk5OTk5OTk5OTk5eXl5eXl5eW5t7Woc3JscHd6dHd4bXFydXd/hHRyc2xsa3F8bnBudGuBf3GAd32Eg355gHNygYqg2d3c3d3d3d3d3d7e3t3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3e3t7e3t7e3t7d3d3d3t7e3t7e3t7e3t7f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f4ODg4ODg4ODg4ODg4ODg4ODg4OHh4eHh4eHh4eHh4eHh4eHh4eHh49WHcWxqbF5YWlVXYFZWUE9QTD1BOjs8RkE4Ojg3MzY1Njk2NTg1Nz89Oz8+OT04Ozw5PTs7NTo9Q0JCPENDREREQUE/PkJDQzw9Pjg5PENLS2PN0dnh1sjY4+Tk5OTk5OTk5OTk5eXl5eXl5eXltbW2q3J5cm59f3Z1d2hqaGlwb3Zta2tnZWZxdG15gG5teXd2iHhxa2podXV5dHV/wd/c3d3d3d3d3d3e3t7e3d3d3d7d3d3d3d3d3d3d3t7e3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3e3t7e3t7e3t3d3d3d3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f4ODg39/g4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4OHh4eHh4eHh4eHh4eHh4eHi4uHh4ePVhnFwY2lhV1NZV19MUk9STUtAPjg5O0E+ODc5NjQ3Njc6NjY2NDk+Pzo8Pzo/OTo6Nzo9PDk5PEFBPTtBQ0VDRkA+Pj5BRUQ+QEE3OD5GSEpesrW4wbm1u8jg5eXl5OTl5OXl5+fn5+fm5ebm5ra2tbWOfX5weoR1cnZnYmNlbGtyb2ZpbHZtd4Z9hXlsbHd4a3ZwfH14c3V5fHd2h7ng3d3d3d3d3d7e3t7e3t7d3t7e3t7d3d3d3d3d3t7e3t7d3t7e3t7e3t3d3d3d3d3d3d7e3t7e3t7e3t7d3d3d3d3d3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4OHh4eHh4eHh4eLi4uLi4uLi4uLi4eHj1Yd1bl5uY1pUU1hXS1NLSk1SR0E4Ozs+PDk4NzU2NTY2OTY4NjY5Pzw6PT07Pzo7Ozk8PDs5Oj4+Pjs8PUFEQkNBQEBBP0JDPDw9Nzs+REVKXrG1tLW2t7e2y9rJ3uXl3eDi3tXU1tPU4OPg39+2treuh3t/bnmNenJ1bWNobGxtaXR4enF5enqIh4N6aWh9cWRvcXyGgX55e318e4an2t7d3d3d3d7e3t7e3t7e3t7e3t7e3d3d3d3d3t7e3t7e3t7e3t7e3t7e3t3e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t/f39/e3t7e3t7f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4OHh4eHh4eHh4eLi4uLi4uLi4uLi4uHh49aGdmxhb19dV1lcWlJQSEpXTEVHPUA9Ozs9OTY0NjU1NTg2NzY3OD87OT09PDw5OTw6Pjw6OTg+Qjs7Pj5AREBDRUFAQD0/QDw9PTU5PEJHRl2xtbW2uLm5ubq9uMPT0r3BwcC6u7y6u8TMxb/Dt7e3hGl1gX1ndYd5Z3Vxa2t5eHB3fH15bWl3e3h3bml1j4FwbHl4d3d9gXuGgnmAoNze3d3d3t7e3t7e3t7e3t7e3t7e3t3d3d3d3d7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t/f39/f3t7e3t/f39/f39/f39/f39/f39/f39/f39/f39/f39/f4ODg4ODg39/f39/f39/f3+Dg4N/f4ODg4ODg4ODg4ODg4ODg4ODg4ODh4OHh4eHh4eHh4eHh4eHh4eHh4uLi4uLi4uLi4uLi4uLi4ePXhXJrZ3RhW1hYX15TVVVRVUpMRj9JRDs5PTY2NDc3NTc4Nzc3ODk8PDo+PDg8Oj0+OTs8OTs5P0E8PT9DP0FARUJCQTw9Q0A6Pjw1NDlER0dasbW1tre5ubm5ubm3ubm4uLm5urq6urm5urm6u7e3uX9ucHN6b3B/eXNuc3Vsc3Z4cXFwb2tvcX6Bc2mHhIF9dHOHdW11hYmBgHJ2hafd3d3d3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7f39/f3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f4ODg4ODg4ODg39/f3+Dg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4eDg4eHh4eHh4eHh4eHh4eHh4eHh4eHh4uLi4uLi4uLi4uLi4uLi4uHj14lxa2xyW1dXXWBUUVVUUFJPSkNATUE9Ozk2NTM0NjQ2ODc3Nzk6Pjs8Pjs5PDo8PDk8PTw7PT0+PUNEREBDQkE/QD48PkE8OD06NjY6QkpIWLG1tLa2uLm5uLi5uLe3uLi5urq5ubi4uLi6uru3uKx7cnhxf3ZzfnBsbXpyZ29sbW50cHt3d3Jyd3pvhpJ2f3x8enZ5fH9zfYdyda3T393d3d7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e39/f39/f39/f39/e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f4ODg4ODg4ODg4ODg4ODg4ODf3+Dg4ODg4ODg4ODg4ODg4ODg4eHh4eDg4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4uLi4uLi4uLi4uLi4uLi4uLi49eHb2pxalVWV2FbT1FSUE5XSURESUo/Ojk6NzUzNDk1NzY2Nzg4Ojw7PD46PDo6PTw5PDw9Oz09PDs9REdEQ0E8PDw8Pj5AOzg8ODE1OkFGRVautbW1tre4uLm4uLi4uLe4ubq5uLi3t7i4ubq7t7mqcnB4d3x7e4J3aG5xam9qY2lyf21zcn54dHFsanaAeX2AgH91doB1a4qLgHaR1d/d3d7e39/f3t/f3t7e3t7e3t7e3t7e3t7e3t7e39/f39/f39/f39/f4N/e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t/f39/f39/f39/f39/f39/f39/f39/f3+Dg4ODg4ODf4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHi4uLi4uLi4uLi4uLi4uLi4uLi4uPYhm1sdGVWUFxnWE1YU1JRWUVDS1BOOzk4ODc1NTM5NTY2NzY4Nzk+OT0+OTw5OTw7Njg5OTo8QEA9PkBGQEJCQDo+PEE9Pzs7OzYxNjxCR0RQqLa1tba2tre4t7i4uLi4uLm6ubi4t7e3t7e5ure2tIlyd3h9iXxwem99c2hqbGdnbHRscXd0cWx2c3Fxd3FyfHl4g3Z7d2mLkYp9kM7f3d7e3tvY2drZ297f39/e3+De39/f3Nvc3N3e3uDg3+Dg4ODf3t7e39jS397f397e3t/f3t7f3t/f3t7e3t7e3t7e3t7e3t/f39/f39/f39/f39/f39/f39/f4ODf4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODh4eHh4eHh4eHh4eHh4eHh4eLi4eLi4uLi4uLi4uLi4uLj4+Lj4+Li4uPj4+Pi4uLi4+Lk14NoZ3VkVlVkZVdKWllXW1Q9RU1LSD04NzU3NjQzOTQ0Nzc1Njc5PTo9Pjw9PDk7PDk5Oj45PD4/PkFBQ0FFRUQ+OzxBPjw5PDs3Mzc+REhFSqG2tbW1tbW2tre4uLi4t7e4uLi3tra2tra3uLm2traLfXpsbHp/cGx5dm5qaGdlcXp4b2lvb3B1c21zd4Fnb32CgYNyf3lqcHJ6f6ng393Zy8a/vL2/vsLN0tDW3tnc4NfQzcPCw8PH1dfT2dzX1NjX0MfExce9vM/Kz87Y3djO3N3c2t3T0dze39/e397e3t7e4N/f39/f39/f39/f39/f39/f4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4OHh4eLi4uLi4uLf4uPi4eLg4d7W29/Sw8rJx9Hb3OLk4eHg2dre1sbExcTN2trf5OHi4trX3st9aWZxYVleZWFNTFRLUlpMO0hNSEZBPTc2NjUzNDY2NDg3NjU2OTw7Pj46Pjk5PDk3OTs7Oj49PEBAQ0RCR0ZCQT08Q0A9OTw7Nzc3P0RGRkaZtrS1tbW2tra4uLi4uLi3uLi3s7W2t7a3t7i5tba3opdxb29waW50dnFmZWNrbmdvcm1mZ2tygWVvdnyAeGRzj39zaHFyaWVlbm+w39HFv7u5ubm5ubq6uru6vc3Gw8e/urq6uru7u8HCvcHFvby/vry7urq5ubq6ubm6w8XDucDDwby/ube/z8/U3tjc3t/g3tLa4N/f4ODg39/f39/f39/f3+Dg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODh4eDg4ODg4ODg4ODh4eHh4uLi4eDh4uLi4uHa2t3RwsPCu8XT1uDdydPDrrnAsaqrq6uwtLbJ0sXRxLG4v7Srq6usr7S0vMzE1c60tLureGxtbWBdYl9ZS1NVVFFQREBRTUhEPzo3ODU3MzE1NjQ5ODQ2Njo8Oz08ODw5Njo6ODg5NzU8PDw/QEFAQkRDQkE8PkI/Pz09PTc1OD5DRUNAj7a0tLW1t7i4uLi4uLm5uLe1sautr7Oxs7OztLS0tqaei2tue3ZxeXhnY2hfcXdha25vaG99b25ja2lseHdsa4Z+bHB6dm1scG95sca8uru7urm5ubq6urq6urq6urq6urq6urq7u7q7u7y7urq6ubq7u7q6urq6urq6ubi3t7i4t7e2tbW1tbi3u8e+w8XHzcS4wMnH0tzZ2d/e3uDf39/f4ODh4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODh3Nji4uLi4eHh4OHg3tfGxtHQztTe3tPO0t/SuLi8sq2trKysrrG+ua63rKipqamqq6urqqqqq6ysuKyqqqqrq6urra6urq6urryzrayrpHlub21fXl1dVE1SU1xUSkE/UElIPjg5NjgzNzMwNTczNzg1NzY2Ojw/PDg5Ozo6Ojg5OjY1OTs8Pj9EP0NFQkNCP0BAQT9APjw3ODc6QUVEP4W4tLS1tbe4uLm5uLi3t7SurKuqqq2urq6vsLGzs7WjcG5ucm1wg311aWFlaGZkY2Rxc21td25naW1tZXBzb29zcXN8h4F6dX11n7u6uru7urm5ubm6urq6urq6ubq6urq5uLm5ubm6urq6u7q5ubm5ubq6ubm6ubm4uLi3t7e4uLe3t7a2tbW2tra1tbW1tba1t7e3t7rBvrzGycrb3+Dg3tvd3d7h4tDW4uHg4ODg4ODg4ODg4ODg4OHg4OHi0768zNjd3OLg0dnbxL23sLCxsa+zu7uzsLS9s66urq2tra2sq6qqqqmpqKmpqampqqurqqqqqamoqampqampqaqqqqytrq6urq6urq6sraR4aWJxZmFZWlZRUk5cU0Y9QlJEQTc8OzY5NTY1NDU2NTg3NTY1Nzg7Pjw7OTk5Ojg3Nzk3Njg8Oz47RD8/Q0BBREE+P0M9Pjw+Ojo3Nz9DRj54srCztLW2t7i3trKurq2sq6uqqaqtraysrq+xs7S1t4xucnRqaIB5ZmpmZWxdaG5waGxxYmNmcoJ+dmhobGpueoaBhXx4cXF5gK+6ubq6urm5uLm5ubm5ubm5ubm5ubm4uLe3t7e3uLm5ubm5uLe3t7i5ubi4uLi3t7a2tre3t7e3tra2trW0tLW1tbW2trW1tre3t7e3t7e3tre4v8bP0MS+v8DE19e8ydra4OHg4ODh4eDg4ODh4eDb3t7Uzby3tre6wMDJxLfIvrKwsLCwr7Cvrq6ur7Cwr66urq6uraytrKurq6qpqampqampqampqKmpqKmpqampqKmpqKmpqqqrraytra2ur66trK2heWpjbWdiXFhRUFFLVEpCOklRP0E3PDk0OjU2NTQ1NTY4ODY4Njs6OTw9PTs6ODY2ODg6ODY3Pj09PT5BQUVCQkNBQUBBOj09Pz05Ojc9QUc8bKqmqKutsLGwrqupqKqrq6mpqamrrKytra2usLO0tbilgIdvaWdzdGZrcG1qZGxvcm5rbWNrcHyJhG5qbHx4Y3uKfnNqc25rcY+7ubm5ubm5ubi4ubm5ubm5ubq5uLi4t7e3t7e3t7i5ubi4uLe2tra3t7e3t7a2t7a2tra3tra2tbW1tba1tLS0tbW1tra2tra3t7e3t7i4uLe2t7a2uLm4uLe3uL6+uLq9vcfb4OHg2Nnd4eHg3dfKwcPCurm5uLe4uLi3tbS0tLKysbGxsLCvr6+vr6+vr6+vr66ura2srKyrq6yqqqmoqKmppqepqaehpaipqamoop+hoZyip6inqausrK2ur7Cwrq2unXdwbGphY2BZUU1RTFJGQzlNUEU+ODs3Mjc5Njc0NDM1ODg3OTc7OTo9PTw6Ojk3NDo5ODY1OD8/QEI9RENDQ0FDQEJBQDtAP0A/PDw6O0NIPWOopaWlpqioqKenp6ipqqmoqKipqqqsra6wsLCztLW1taWYdn5xZmt4cW9tZmVsaGNsZ2ZpaX11bWlvfXZ5hWZod294b3Fvcninu7m5ubm5ubm4uLm6ubm5ubm5ubi3t7W1tba2tre3t7e3t7a2tba2tre2tbW1tra3t7e2tbS0tLS0tLS1tLS0tLW1tba2tra2t7e3t7e3t7a2tre2tre3uLe2t7i4t7i4uLi4wMXTyry8w83PyMC9urm5ubq6ubi4uLi4t7W0tLSzs7KysrGwr6+vr66urq+vr6+uraysrKurrKysq6ehoJ6gn5udoaGdlpmkpKaon5mZmZmanZ+gn56fpKqtrq+ura2srJl1cGlrY2FeXVVOU0tSREQ4TktHQTo4NTI2OTY1NDczNzc3ODk3OTo7PT0+ODg4NzU6OTk1OD9AQEFEPkZBQkNAQkNCQT88QEJCQD0+OjpERj5cpqWmpqampqanqKenqKioqKenqaurrKytra2ttLS0tbekc311bnONf3JmanFjaW1jaGZobG51aV9jZ3VzdnpuZ3Bwcn56cYihu7m5ubm6urq6urm2s7a1uLm2trW1tra1tbW1tbW3tra3tra2tbW2tbW1tbS0tLa2t7e3tbS0s7O0tLW1tLS0tbW1tra2tra2t7e3uLe3tra2trW2tbW2tra2tra2tra3tra3uLi3uri4uLi3uLi5ubm5urq6urm4t7e3t7W1tLS0s7OysrKxsbCwr66urq6urq+vra2srKuppaSmpqScmZubmpmampmXl5eXl5aZm5iZmJmZm52en5+dnJ6gpKWko6OioqKQdG5jcGFeXltUU1RIVEo/PFFCRkM7ODYzNzo1NTQ4Mzg5OTc4OTc7OTs9Ozc6NzU2OTk4NTg+Pz9ART5CPz9DPzxBQUI/PT9EQT8+PTk9Q0Y/VaSlpqanqKeoqamop6ioqKioqKiqrKuqqaipq7W1tba5o3eKcXKHhnd0cGh5a2JjYWVsaW5zal9jZWNjZWprYmRqbHaXjX6ovbm3tre5u7u6uLWxrKurqq6wrKyrq62tq6uvsLGvr7CytbW2t7W1trW1tbW1tbW2trSvr7O0tLSvra6vsrW0tbW1tbW2t7e3t7e3t7e3t7e3t7Owsra1tLa2tre3tra2tbW1tra3t7e5uLi4t7e3uLi4ubq6urq5uLi3t7e1tbS0tLS0tLS0s7OysbCvr6+vr66vr62oo6KgnJqampqZmZqbm5qampqbmpmZmZiXl5aYmZmZmpycnZ+foJ+goKChoaCgoJ+fi3RuaXRdYGZeUlRLRFRJPUVTSEVCOzo0NDY5NDQ1NzM4ODg3ODk5Ojs7Pz04OjkzNTg5NjM5PT5AP0A6QEJCQkA/QEJCPz0+QUFCPz06PkVDQFGjpqWlp6inqauqqKaoqKipp6ioqKinp6ioqaq1tbe3t7KZtH99kIx1Z2lqbGZjYGNoZW94cGlicXx5cGpmZmRma3NqhYystrKwra2ttLeysLCtrKuqqaiop6ipqampqKinqKipqaeoqqurra2sqqytraysrq6traunpaSnqqyopKOkpamwsbGztbW2t7i3t7W1tre4t7e3t7Kppaasq6ivtLa1s7W3t7a1tbW2tra3t7e3t7a2t7e3t7m6urq5uLi3t7Wxs7S0tLKxsK6sq6yurrCxsK2rqqmqqKijnJqZmJmYmJiYmZmZmZmZmpqZm5ubnJybmZeYmpqcnJydnJ2foKGhoqKioKGgoKCfnop1amtuWVxhVktPREdVRz5PV0hEPTw4MzQ0ODQ1NDgyODk4ODk6Ojw5OUA8Njk6MzY3OTE0PD8/QEBBOkNGRUJBREJDQTo7P0FCQz9APUBEQ0BPo6empaemqKqqqqakpqenqKioqKimpqaoq6uttba3t7e4rbJ1cHuDdmBiaWtiZWZhZGdmfYh5bHKAfXFvcXhjbW5xZo+srKurq6ysra6urK2trKyqp6WmpaWlpqioqKiopaeoqKioqKeoqampp6Wko6KioqOioKKioaKhoKChoaKjpKOjpaWlqLC0s7OzsKuqqaqztLa3trGopaOioaGipKiqqairs7Sxrq6xs7W2tra3uLi3t7e3t7e3t7a2uLe0sa6ppqerrKmnpqWkpKSkpKWnqaajoJ+enZycm5uampmZmJeXmZmZmJiZmpqampqampqbm5mYmpydnZ2dnZucoKGgoaOjoqCgoKCfnp2FdGtsaFdYU0pHTUVITUdAU1dGRz09OTM2Mzc0NTU3Mzg6Ojo6OTw9OjpBPDY9ODM3ODgzNztAPz9AQDpCRUNAQkRDQT87PEBDQkNBQDxBQ0A9TqKnpqanp6mqq6mkpaWlpaaoqKippqanqKmpqrW2tre3t7izc2h7c2JnamtpaWJhZGloXV1tfHJma3J/fHR8bm1zc36gqamrq6uqq62trKusq6mpqKWjpKWmpqWmp6eqqaamp6enqKinp6iop6WjpKKhoaGhn56en5+fn56foKGho6Wko6OkpKSmp6enpqWkpaampqeqraumpKKhoaChpKWlpaenpaeoqKalpaivtLa3trW1tra1tbOwrKupqa6rqKWlpqampaSkpaWlpqWkpKSkpaKhoaGgnp2bm5ucm5qamZiXmJiYmJiZmpmZmZmYmZmZmZqZmZydnJycnJybnJ+fn6ChoaKgoKCfnZ2cgHNrbmReU0pITUZETEtFRFFTQ0c9PDgzNjI4NDY0NjQ4OTg6Ozk7Pjw5PTs5PTczNTk2NTY8QD0/QD88P0JDPkJCQj89Pj5CQ0FFQD86PkVAO0+jpqWkpqeoqaelpKWlpKWnp6eoqKanp6alpqa1tba2trW2uYptcW1vfHxxZ2pmYGFsYFROW2hqbm9tgYJ9cWdxdn6aqKeoqqmpqqurrKqqqqimpaWkoqOlpqalpaWmqaqppqWjpKWmpqWjo6KioqKhoJ+fnp6cnJycnJ2dnJ2en6CioaKjo6KhoqKkpaSioqOjpKSjpKSko6Ggn6GipKanp6ipqaelpaSipKSlqK2wsKyrqqusqqmnpaWmpaWlpaalpqioqailpaWkpKSlpKOjpKOioaGhoqKgnp2cnJubm5qZmJiYmJmam5mXl5eWlpeXmJiZmpqcm5qampubm5ucnJ6goKGgnp6enpycm356bnJiXlNNSlBFRk5NQkBPRT5JOz01MzYzODM2Njc1Ojs4OTs5Oj49Ozo5OT03NjY5NjU2PkI+PkE/PT5DQT5DQ0BAO0BAQkJCRUA+Oz5FPzxQoKSjpKOjo6SkoqSlpaSlpqamp6empqalpqaltLW1tbS0tbiBaHx9ZXOCemxwdWFfY1ROT1FbaGxpbGxxbW5xbnScoqSnqKioqauqqqqqqaempaSjo6OjpKSlpqalp6ytqaShnp2eo6Shnp6foKCenJ6dnJycmpqam5ucnJubm5ydnp6foKChoJ+goaOioKGjpKSjoqSlpaWkop+go6SkpKapqainpaGdnJ+jpaipqainqKioqaempaWkpKSlpqampqampqenpaWko6Ojo6KioqGhoqKhoqOkop+enZ2cmpubmpqZmJeXmJaWlZSUlJWVl5iYmpubnJuampqam5ucm5ucnp+fnpucnJyam5p/fnF0YFtUTUdNSEZMSj8/TkM8QDs8NDM4Mzc0NzY3ODs9ODo6OTk7PTs7ODk9Njc4OTU4OD9APT9BPjs9RD89REA/PzpAQUE/QUVAPjw8Qz88Tp2ioaKioKCipaSkpKWlpqenp6empqampaampbW1tbS0tLS3jHalsXdmc3Jvc2xjZGlYT1JRT09dgG1kYFptkZGSoqKjpaampqenqKiop6alpaSjoqGhoaKjpaempqesrKimoJ2cm6Ghnpuamp2cmZiam5qampmZmZubm5uampqampucnZ6goaCfnp+hoJ6foqOko6Omp6inqKWioKGhoaGkpaWlpKCcmZmbnqOmpqampqanpqempaOlpKWlpqiop6enpaWlpaWkpKOjo6KhoqKioqKhoaKjo6Kgn56enZybnJubmZaUlJSTk5OTk5SUlJWWl5qam5ubm5qZmZqanJ2dnZ2dnZuampqamZqXf3dvc11aTkhKTkdFRklERU5APD09PDQ1OzQ2NDY1Njc5Ozg5OTg5OTw7PDc6Ozc4ODg1ODg/Qj9BQTw+P0A8PEJAQT49QT4/Pz1CQUA6OkA8PE+doqGfoJ+dn6OkpKSlpqeoqKenp6ampqampqW1tLS0tLS0tbSXtqd1Znh2Y2xjY2VjW1JTU1JNXqCMeFhodpajnp6hoaOjo6OjpKSlpqalpKSioaGko6OjoqOlpqampqenpp+bmpuioJqWlpWam5qXl5iZmpqYmJqampqbm5qZmZmenZ2goqOjo6KkpKWinqGhoaKjpaampaSjoaCgn5+hoZ+goJ2amJeZmpygpKOjpKWmp6alpaOjpKSkpKWnp6ampqampaWmpKOjo6SjoqKjpKGfoKGhoKGgoaCfn56dnZyamJeVk5KSkpKSkpOTkpOUlZaZmpqbm5qampqbnZ6enp2cnJybm5qamZmZlH10bHReWk9IRUdGQkVORT9GOzo+Pzs0Njo2OTM2NDY4ODo4OTc4ODo8Ozw5Ozs6OjY3ODk5Pj9APjw9QD5AOjlAQT89QT8/QUE+QUE/Ojk9PjpQnaCfnZucnJufoqOlpaWlp6iop6ampqanpqantLS0tLOysrGwsK2rkHiGj36bmn93Yl1TUlFRTGKgootaiKCgn52YmZycnZ2eoaGgpKenpqWkoqGjp6alpaOipaampaanpqagm5mboZ+Wk5OSl5qcmpeXl5iampmampqam5qYmJmaoKCgoKGfoaKipKamop6gn5+goaOko6Khn56enpyanZuZmpqZmJeZnqChoaKioqKkpaWmpKSkpKKioqKkpaWlpaWlpaalpaOko6KioqGgoKGgnp+fn5+fnp+foJ+cm5qZl5WUlJSTkZCRkpKSkpKSk5SVl5iZmpmZmpqam5+fnp2cnJycmpmZmpiXl5F8cmdxXl1QRj9BRD9KT0JCRjhDRT4+OTg7Nzc0ODQ1OTo6Ozk3OTo8Ozo8PT48PDo2NzY5OD4/QT47Pz49PDg6PkFAQUE/P0FCQERBPjo4PkE8U5ycm5uampycnaGio6KjoqSmp6alpaampqSjo7KysK2rp6amp6alpqiln6iop6qnoXmEXFFST0xcnKCAYpmgnp2clZOVlpeZmp2dnqGmpqampKOioqanp6ajpaampaWmp6amop6cn6Cem5ORkJSXm52YlpeWmJuZmpqampqZl5iam6Ghn56fnpybnJ6goJ6dn56fn6Cio6SjoqCfnp2ZlpeXl5iYmZubnqKioqKioqGio6WlpKOio6SioaGhoqOkpKSko6SkpKSioqKhoqGgn5+gnp2enp2dnZ2dnp6em5mYl5WTk5SUk5KQj5GSkZKSkZKTlJaXl5iYmZqampyenZ2dnJubmpiYmpmXlZaNempmamBiTkY+P0A9SkVAQ0A7QEE8Ozs5Ojc2NTg0Njc4OT04ODs6Oz87Ojs8Ojk6Nzc2ODs8Oz08Ojo8PTw3Oz5DQkRDPz1BQ0BEQT88OkBCO1eZmJqamZmam5ucnp2foqKhoqSlpKSlpqSioJ6op6alpqWlpaemp6ampqakpaanqKehqXJOUU1KVJahenKanJyenJeVlJWWmJiXl5qeoqKhoqOkpKOjpaalpaanpqSlpqalpaOgoKGeqbWTkI+WmpmenJaXl5eZm5ycnJqamZeZm5uen52cnZyZmZqcnZydnp6fn5+hoaCgoaKgn56bl5WVlZeanZ6fn6GhoqKio6OhoaCgoJ2cnaGioqOkpKOioaSlpKOko6SjoqKioqKhoaGfn52cnZ2cnJ2dnJ2enpqXlpaVlJOTkpKSkpCRkpKSkpGSlJWWl5iYmJiam5ycnJycnJ2cm5mYmZiWlJWXi3hsY2RiZFFHQT1DO0tIRDo7Ozw+OTo6OTo3Mzc5NTo4ODg8OTg7OT09Ozo7Ojk8PDc2NDc/PDo9Ozw/Pjw7ODxBQ0FDQkI+P0JAQkFAOj9APztZmZiampqam5ubm5ydoKGhoaGhoqKioqKhn5+dpKWmpqenpaWmp6ampqWkpKalpKSkpaaGUFJQT0+PmHB6mpubnJ6cnJycm5ubmZiYm56dnp6foKOkoqGhoqKio6SkpaakpKSjoqGgna2jlpOUmJuam56amJiYmJqcnpyam5iWmZybnJycnJydmpqbnJ2dnp6dnp6fn52cnJyhoaCblpWVlZacoKGgn5+hoKKjoqOhnZuZlpaWlpicnqCip6ikoaCgoqOjoqKioKCgoJ+fnp+gnp2cm5ucnZydnJmanJuWk5KSkpKUk5KSkpKSkpOSkpKRkpSVlpeYmJiYmZqcm5qbm5ucnJqZmJiXlZWWl4d3ZGdoZGJNQ0U8RDlJSkU5Ojs9PTo6Nzg6NjQ3OTU8OTY4OTc5PDs7PDo6PDs6PDw4Nzg3Pj07Pj46Qj86Ojo/QURCQ0FBQD9EQUFAPjpAPj06W5qYmZqbmpubm5uen6CgoaKioKCgn5+enp2dnKWkpaanpqWlpqakoqKio6Oko6Kjo6KnllRYVVJOZ21rgZ6am5udn6Cgn56enp6dnJ2dnJ6enp+goaCfn6CgoKGio6OqqaOkoqGhnaONipuZmZiZmZienpiYmZmam5qWlZeWlZicnJ2cm52dnpybnJ2cnZ6bmJqeoaGdm5udoKKhmpWVlpaZoKKgnZueoKGjop+em5eXlJKSlJeYmZ2goqenpaGgn56goaGioaCfnp2cnJubnJubmpqZmpydnJmXmZaVk5GQkJCPkZKSkpKSkZKTk5OTk5OTlJWWlpeXl5manJubnJucnJqamZeXlpaVlZSEcmZsYmRbREJMPT84RktCPEA+Pj05Ozk6PTg1ODg2Ozg1Njo4PDw7Ozw8Ozk8Oj09OTU4Nzw5PD88OkE/Ojo6QEBDQkRBQ0A/Q0FAPj08QD09Ol+al5mamJeYmpycn5+foaGhoJ+fn56foKCenZ2lpKSko6OioqOjoZ+foaGipKOio6SiradXXl1UV19ua42dmpqbnJ6dm5ucnZ+enZycnJydnZ+goKChoaGgoKGgoKKirK+hoaCenJqnc4KenJqZmpuZnJ6ZlpaWl5eTjo6QlJabnJuam5udn52cnJycnJ6dlpSZnJ+in5ycnZ+hoJuXl5mZmpycnJubnZ6fnZqXlpaWlJOTlJiampqfoKGmpqWgn56fnqChoaCenJubnJybm5ybm5qZmJmZmZmXl5iVlJKQkJCQj5CSkpKSkZGTk5aYl5STkpSVlJWWlZaZmZmam52cnJyampmXlpaWlpaQgG9vZV5gV0BKSDg/N0lFP0VBPD07Ojo8Ozs3NTs4Njs3NDY6Oj47Oj0+Pj07Ozs+Ozo4Ojk5NkBBPTo8PTo6OT9BQ0JERUM+P0FBPz8+Pj89PDtgl5WXl5aVl5mbnqGhoKGioqCenp6enqCgn52bpaWkpKSioKCfoJ+dnZ+hoqOjo6OkobCjXWVkYGFua4GenJubm5ubmZianJ2enJubm5ycnJ6ipKGeoKGhoqKhoaChoaeipJ+enJmaoGF8n5ubmp2dm5manJiXlZWWkY6Nj5KYnZycm5ycnqCdnJucnJyempWVm56foZ+dnJyenp2cmpqampqampqbm5qXl5aTkpWVlpWTlZaam5qanZ6foqWjnp6fn5+en5+enZ6fnZycm5qcmpqbmpiZmJiYmJiYlZSTkZCRkJCQkZKTk5CRk5SYmZiVk5SVlZWWlZaXmZmXmZqenpyamJiXl5aWl5eYjX1ubV9lVlRFSzw3PjdSRUM+QkE4Ozw7OTg6ODY7Nzc6Njc5Oj0+Ojw8PT49PD06Pz06ODw9OTtAPj4/PT45OTs/QkNAQ0VDPT9DQj5AQD5APTw8YZWSlJWWlpeanJ6goKCgoaCgnp6enp6gn56em6WlpKSioJ+fnp2dm5mbnJydnp+gn56rmGNpbW5pZm2enZybm5ybmpmZmZqam5ucm5uam5ygo6SgnZ6en6CgoKCgoJ+nlqWfnZuanpNZeaCbm5ufnpyZmJqamJiYmJKOj5OXnJ2bnJ2cnJycnZycnp6dnpqVl5ygoaGfnp2eoJ+cnJuampqbmpqYmpmVk5OTkpOWl5eVlJiYmZucnJydoJ+gnp6enp+fn56en6KjpKKgnp6cm5qam5uamJmZmJeXlpWUlJORkZCQkZKTk5OSkpOUmJmYlpWUlZaWlpaWl5iYmJiXmZqamZeXl5aXlpeWl4l4dmddX1dURUU5OTs8WT5AOEI/OTw8Pjk4Ozg6Ozc5OjU4OTs9PDk9Oz0+PD0+Oz8/Ozk+PDw+Pz5AQUE9ODc7QkNFP0FFQz1AREJBQEQ7Oz47PGKWk5SUlpWUlpiYmZubnJycnZ2cnJ2en56dnJqkpKSkoJ+enpybm5qZmJiYmZucnZ6cpolla3R4bVuFop2dnJydnJqbmpqampydnZ2bmpuboKKinpucnZycnJ2enp2dpI6bnpyamqSGWHShm5ycnp6cm5qanZqam5yVkZOXm52dnJ2fnZycnJycnZ6fnp+cl5idn6GhoJ6cn6CfnJubm5qbmpmZmZmZl5WWlZaYl5eXlpaYmZuenp2dn6GhoJ+fnp6fn5+dn5+hoqKhoZ+fn5yZm5qcnZuampmXlpaYl5eXlpWTkpGTlJSTlJSUlJaZmJaVlZeZmJeYl5eXl5eYl5iXl5eXlpaYl5eVl5eDeHZfW11eUT1GOjk4P1VDQTtDQzo8Pz86Ojk3Ozg4ODc0ODk8Ozw4Ozs8PTo9Pjo/QT06PTw+PkA/PUBBPjk2PERDRUBBRUU9PkVERD9COzo8OTpkl5SVlZaUlJSUlJWXmJiamZqcnJydnp6dnZybo6Oko6CenJuamZqZmJiYmZiam5ubm6WJa3F2em9lmp+enp2dnJybnZ6dnJ2enp2dnJydm5ygoJuampubm5udnJqamaSPkJqbm5ykeV9vop2cnZydnpybmp+fm5ydm5mZmZudnZ2dn52dn5+dnJydn5+fn5uanZ+goJ+dnJ6gnpubm5ubm5yampuamZudnJqZmJeYmJiYmp2foKCgoJ+hoaGgoJ+en5+fnp6foaKhoJ+enp+enJqam5ybmpqZlpaXmZmYmJiWlJOUlJWVk5OVlZSVlpWVlZSYmZuamZaWl5WWmJiWl5OUlJGRk4yRkJOWfXhqYWJiXFA8QDw2OENWSERCOjg7Oj47Nzc5Nj06OTk2NDc6Ozw9OTo6Oz87PT08QD47Oz46PT89PkBBP0A8NztBQ0U/P0REPj9EREM+Qj07PDs6Z5aTk5OTk5OTlJSVlpeWl5aWl5mbm5ybm5uamaOjoqCfnpuamJeYl5eXmJmYmZybm5qkgGpqb3lzcZegnp2dnJydnp6enp+enp2cnJydnp2bnJuampqam5ubmZiYmZqjjo2VmZudoHhpaZyenJ2cnJ2cm5qdn5ucnJubnJubnZ2dnJydnp2enZydnZ2cnJ2dm5uenp6dnZybnpubnJycnJydnJubmpmbmpmYmZmYmpmZmpyfn5+jpaKfoaKioaGfnqCgn5+fnqCioaGhn5+fn52ZmpudnZqZmJWWl5aVlZaTkpOUk5STkJCSk5GUkY+OkJGOlZabmJWYlJmXlJiRjJCPk5yTkoyFjIeDhndxZ2pkW1xRQT44NkJHYEJFR0A+Ozw7Ojg4NjU8ODo4MzQ6Njk9PTk5Ojs9Ozw6PD48Oj5AOj5APjw/QD8+PDg6Q0FEPz5CRD8+Q0VCPUJAPDw8OmeYk5KSk5OSk5SVlJWXl5aWlZaXmZmZmpqampqkoqCfn52bmpmYmJiXl5iZmJmcnZ2cqH1nZXN7enOJop+enp2dnp6enZ2enZ6enp2dnZ6cm5ybmpubm5ycnJiYmZmYpY2Kj5abnZx4amWUn56enZ6dnZybm52bnJybnJ2dnZ2dnJ2dnp+fn52cnZ2dm5qbnJmZnJ2dnZ2dm5uanJ2dnJycnp2dnZybmZeVlZeXmJqam5ubnZ6foqOhoKGhnJucm5ubnZqcmZycn6CfnZiZmZmUkpKUl5SPj4+OkYyNiYuQi4mLjpGRj4mQmJiQkoyNi5KQj5iYoqiqpqWlrKOmoZqep6eyqKKVo6Cfl39wcWlsXFtcTUY8NzdHR1g+SE5URjk+Ojg5ODc1PTk4NzMzOTY6Pjw6Nzo8Ozo6Ojo8PDs/PjtAQD47PT5BPDw2N0A+QkA+QUY+PEFEQT1DQj49PDlmmJSTk5OTkpOUlZOVl5iYmJaXl5iZmZqampqaoqGfnp2cm5mYmJiYmJiYmZmZm5ybnKx/am16f3lxh6Genp2cnZ6enp6enp6dnp2dnZ6enJubnJubm5ubm5yZmZmYlqWPhImSnZ2Ud2pkj6Cenp+fnp2dnp6dnJydnJ2dnZ6fnZ2fn56goJ+enZ2dnZybnJ2em5qbm52enZ6dm5ubnJ2cnp2cnZqYl5SRjo+QkJGVmJSWlJiZmpudmJuYlY2Mjo6TkpKRj4mQjpGRjo+Ki42NjYiIi4+Lg42NkY+MkI2Qk5WVnJihoJySn6SipKmam5eanKOprb3Bwbq8uL26ucC8ubq3uru7tL2zwbV/bnVmZ1peWUxJRTo7TElTPFZSSUM6QTo7Ozc3NTo6OjgyNTY4Oz08OTk7Ozw5Nzo4Ojw6PT85PD8+PDw9QTs5NTg8O0A/QT9EPTxBQkA8REM9PT06YZOTkZCUlJOTk5OTlJeYlpeZmJmYmZqbmpqamp+gnp+fnJqZmpqampmYl5iZmZmZmZmphXB1e4B3b4mhnp6enp6fn56en56fn56dnp6fnp2dnJ2cm5ubm5ubmpiYmJafjICCip6eiXRoYoufnp6foJ+enZ6hoJ6dnp2enZ6fn56en6CenZ6enJydnZ2cm5qYnJuVmJqamJiYmJmSjJCXlKCXk4+MjYqKiImMiJORh5CPjYqKkJCLjoqMi4+IiImJjpGOjYaFiYaKhoWLiI+SkJCNkJKXlpKamJ2TlJ6kpqaqq7Gsr6+rpquqsbm5tbS0rqyvtMDIxcXBvsbDxMTDurW+t7a0s7C2tb6qcHRyXGZfXl1JRj8/RUtMVklcTEQ/PUI6Qzk5Nzc7OTk3MTc5ODo+ODg6PDw7OTc5OTs9Oj4/OT5BPDs+PD46OTY5PDpBPkNBQT08QkBAPkJEPj8+OVyHhIOHi42KiYaFgYqMkZOVmJiHlZaWkpiampmenZ+gn52ampubm5ycm5iWmJiXl5ibqo56dXZ7f3mCoJ+fnp+goKCfn5+foKCfnp2dnp+enp2dnJqbm5ybm5uYmJiXnop5enmcnIRsYl6NoJybm56dnZ2doaGfnZ6dnZ2dnp2dnJiWlpaYlZWSlpmWk5GKjI+PjI+NkIuLj4+WiYiEi5GZjn2Fi42PjYyHioyQm4yRj4+Lio6TjIyNjIiSi4yFiYyPhouIh42KhYyEj4qXkJOYmpWbnKOqoaKknKKrsbe0ubWxs62vsrKlp7O6sbq6vLa3tsDDw729vLa/urq8wbW4wL60r66mqa+3mm58Z1tjWl1fSEU+QUtJU1hZXkFGOTk9OkY/Pzo3Ozs7NjM6Nzo5Pjg6Ojw9OTk4Ozk7PDo+PTtAQDs8QjxAOjg0Nzw7Qj9BQj4+O0NEREBDQz0+PjlhmZWLkYWNj5aSiHl9e3+Fi4OKgoqJhmuAeJCLlpqRnZ2UlJGTlpeampiWk42Sk5KQm5uIdndzcX1/cpGgnZubm5yenZ2eoKGgm5uWlpucmpubnJuYmZqYmJmbmpqWi5mThHd3mJ6HbWFdipeSkY2SkY+Uk5KXm5mYm5ePjpCLjo2Ch4uLi4qLiI2RjIeHhoqIiZGKh4yEhYqNi4qNhI+UkIyDkJOUmZWQi5OTkZWRlpWOj5GMlI2Oj4qIj4ePhoeJiYmNiomJioWNh46JmJKUmpuXmKChp6Cko5qqqbO2sbWwqKmiqK6tn6qvsK21ubi8wr/BxLixtbCutrOwuL68ury+urOzp7G3wpB1gGNiXlpXUk1IRkVQSVlXX1tDUDpCQz1HRj84Nzo6NzU1OTc8OTw5ODo9Pjo6Nzs7Pjs7PTs9P0E7Pz48Pzo4NDM3OkFBQEI+PjpDREM/QUM7PT45Z6mloqKZn6CippeUiI2CiIJ1h4iKiIp7e3Z7enmPeoiSfn18en6CkYWBgH1zfH99fISHfnRweHZzfHaBj4iIiYeIioyMkZicl4iOhIuNi4iNkZCPi5GPi4yPkJCRjo2Zm4lykJychHt0ZIONhYeBjYuGiop/iYqGiJiRiIOIg4KFfIuLjIaJi4iKkIyIi42PjI+Wh4mLio6NjY2Wk5OdnJyalpycm56bmpuYnZeTkZWWkJKRi4+LlpSMjYqDi4SEiYyQkIqOio2LipGJjZOTk5SVk5KcmZ6Xn6CfpaKvsamupKSfmKStpqa4t6ysu729wsPAv7+vpa2wsLS3uLO0uLa0ta6stK+4tLaBeXpjZmBeVlFRQUVMT0lcXl9UR0dCS0xCREA9ODg7OTU3Nzk3Ozc9PDk9Pj05Ozg6O0A8Oj06PkJBOD88Oj84NjQyOTtCQD9CPj04QEI/PkBEO0A+N2CloJqXnaGaoaCPl5efl5WCjaCfo6GdmpKOjIxycXBvdnFucG1ucHZub29waHBxcHR+c3FycXd7cnl2d3Jyd3Z6e3l8fXt/iIGEi3+PkYaNi4yGiouLiYeEgYaCgIGSnYh4WoeTlmxue3OBh32AgZKQhoSEhY2DhIyPj4+IjY+Hi4iRkJWRjpCKk5eOj5WYp6SfnZWYlpaln5udq6aqt7W4srGnr6qnpqGfmp2WkpWVkYqPjImTjZuVjYuLhoaJjJWQkJCLmZKVlZSbkJiTlIyNkYyWl5WilZ6mqauno6OqsJucpp+mq6G0vb6zs7+5u7u6uby9rqiusa6wuLyztLGxqrCpqLGxsqild3J0X2hhYFRWUUlKSFZNXl5eVExKRVFKRUdDPTo5OTc0ODY4Mzg4PTo9PD47OTs4Ojs/PDw+OT9DPzg7Ojg8Nzc2Mzc5RT4/Qz89N0BAQT0/RDw+PThUj4yGh4eUjJWZl5yWmZaNlZyWlZydoKCdmpiWeHFubXJ4cXFsbnJwa3FvcG1yc3t1dnd5fnVxeHZ0d3tybn98gX15eH1/eYOGg4WCg5CLkIuLi46Pi4mJhYKBfX9ymJR0ZE91i4xgXHFzg3t9fIaOjYuGjZSSi5CXj5SXkpihlp6XlZunpp+goKawq6GjpbW0sqqmqq+isba5vcK7ucO+vLi9uLWxrLCspZuSk5mfm5SPk5WOmp2doJqfn5edo6qsoZ+em62hp6qwqaampJiRkZWUo6SirKSss7Szs6i3tru4sLKvra2yt7a6srW6s7e5u7i8urayr6yxsbKztLOxsa2us7Gzs6yhl3Zxc19jXlJRVE1PSUdYT1pcZFROR1VPRURKRD44Ojg3NTg4ODU5Nzo6PTw/Ojg8ODk5PTs9PTpCPj84Ozo5Ojk4NjI1N0I+P0RAQDY+P0I/PEM8PT46Tn98go6MjJOTl5eaj5SWjZaRkZSXk5qanqGdnHJvcnFxcXFxcG5zcW91dHJxdneAdXd8eYV+d3t8eX1/fICJiYmDfXp/h4GIiYGAgIGGiIKGi4eIhYSIiImEf4J+faCHX0tJdIN8Wkpha3qEhIWKj4yNkZmdlJSUoJqan6Ktsa2ppKWtr6ysrLWuvrmtrqm1sLexq7G2rK+9wsLAvrq8trKutraxtK66u7OurKepp6unoqmtoKmooq+wuLSxvLq6urK0ta+8tLezt7e7t7mtrbCprLW5sbeytLe2sLu7vLu6ury1vLi0wbWsqqqrtLG3uLm1trSzsKymrrCqq7Cxq6yusLKxtK6qo5N4dnJlZ1tMUlBFTUlTV1JlXmdUUExcUUhMUkNBOTk3OTU4ODY2Ozc5Ojs6Pjk4Ozo6Ojw8Pj08RD45Njs7ODg+OTUxNTZCRkREP0A3Pj5DPjpBP0BAO0t/gomXmJSdlpabmIuSlo6XkZGVl5SZl5+bmZx8dHV2dXl1c3RudnJzdHV2d319gX56gXyDfoJ/fYB/hIKFj52RiYF/go+Xjo6HgoCBiIuFfoqRjH+IjY2Li4eSiY+eeElCRXR4bVU+TGRzi4uNiYmQj46PlJSYkJWcmp2eqK6yr7C1tLOtsrW4sLy1tbGqsKqztbS7t7SztrS1r7i4t62noqassLCvtre3vrW5vLOysa61u7C0r6+yu7axuMC9tLS0s7izvLq2tLrAvbm6ubq+ubm5vrWysa+yr6q1tLGzsbSzrri4tb+vpKaoo6ussa+zrq6wsKytq6qroqKmqKKnrauqpaynoqeYeHlxZmVZT09NSVJNV01PX15cTlVVYlFEVE07Pzk8ODk1Nzc1Nzk1Ojo6OTs4Ojw8Oj08Pj4/P0I9ODY6Ojk6QDs1MjY2QUZDQz4/Nz49Q0I5P0I/PjtLjpGTmJmVmZGTopiTkpKLk4uOkI+Vl5ablZSbhoJ9enh2dHRzdH53end2gIKDhouMhISFioaQiYeRk5aRjZaalY+IjI+emJaVkpCTl5qamZGeoZ2Tl5uhmp2cop+glGFTW0p0cmNXRkVTbH+QkY6LmJqPj4yUmpecnZugnaSstLm6vK+2tLi0tLK3uLmzq6+qqKy1srK1rrGrrqa3s7OxpaGotbCvrayrtbqyu7q6tLK3ur67ubG4sLmtqLK4u66ttLS3tbu2trm5vLe0r7G0t7a5s7e1pq2pq6ior6yprq2up6KxtLG0q6aop6Cjq66oqq6orLKwr6+pqKGeoaGjpqOgopqlo56ol3J3bmdiVUtUT09KRFBLX2JYWlFcVGBNSFJJQUA5Ojg2Njc3NTg5NDs5Ozk8Nzs+Ojg8PD0/QkBBPTs2OTk5Oj87NjM3OD5GQkJAQjk+PUBDPkBGQj44R5OWkZWTkpSQkZ+ZnZmVkI+Sko6Mk5aWko6RlZGSkIaBeXJzdXuBhI6HhZGTkpicnJiVkJWYo5yaoaeqqZ+clpeVnaKioZyZnpmlqKyvramnqqqpp6KlqKmrqqmvpIRWgo1UdHxsXFltVV93lp+foaSem5qkp6Spq66spaSoq6+xtK6qrK6zr6ystLO0ua6urayqrLKwsK2wqKqmsrS0uK6qtrqwr6qurLC3s7i0t7W0u7y4tbWxtauyrKiys7uvrbGytLa1sbG0s7OvrKuvs7a0sayutKqqpqWnrauoqKupqqifqbOwqqeppaOio7CtqaatpairrayppaSioKWipaOYmZyVnqKippdudWVnZFdPWEtLSktTVHBiWWRXX1tcUlpQTEM8ODk6Njk4NzQ3NzQ4Ojw6PDg6PTk3PDw7PkM/QT47OTo5Ojs+PTg0NThBREVEQkM5PjtAPkI/R0Q+N0KSm5SVlZaVj46Wl5qZlZGKk5SSjo+SkYqKiY2Ul5qTjYmCho6VkZSfmpuin5+jnqGhn5ijpKelpaapqa2rqaKmpKilpKGfnqOjra2srairrq6rq6ykoaKlqaenqaN0asC9UH+Th29fe2tWbpuhoainoKKirqurqqetrqilpKmpqqmmo6iqqaekp66wr7Ovq7Crqq+yr7Czua+rqLCxrrCyubO0r62vtbCss7GurLW1tLSzs7CvrKyqrKusr7G0s7CwrrCwsKyqrauqq6alrrCysKumqbCvqaOkqaunqKaopquwq6mvqaaoqaalo6iwraqpqKKpo6WnpKGhoKKloZ2el5aYlJugpKmUbnNeamlfVVpOUk5QT1NlXGVjW11ZXFBZT0tAPDs5Ojc6ODczNTMzODo9OTo4OTo5Oj08PEBEPkA9OTo8PDw+Oz45NTo8QkFFQUNBOT47P0BEQENCQDdAkZ6YlJeZlpGHi5SSl5GIg4mLk4+OkI2Hh4SFlZmWmJeZlpqeop2anKKkoaCdn5qfoKGgpqGgoKCjo6KlqKmrramqpqOmpaCloKaop6aoqaepqaSoppqdpKaioaGbZYfGvWWpoZOXXnGDXWCXnJmioqCgn6ChqKCcnqGloaCmo6KfpKGspp6foaGkrKqnrKivq6e0sa6ur7WyrKqwq6mtrbWwrq6srreup6yqpKivsq+sq7Kvqqqpq6utqa6urrGxraqtqaunp6uoqauinaapqKilqKisqKilpKWop6iopqmsr6+oq6mhoqKlo6Opq6ymqKWjqKKhoKSdnZ+hoZ2bnZ+amZWcnKOqlG9zZm5yZF1cUFVPWE9eZGRsaGJiWlpSVE9NQTo9Ojo4Ozk1MTYzMjg4Ozk5OTk7OTk8Oz0/Qz5APTk7Ojs8QD0+PDk5PEFBRUFGQTo9Oz9BQUJBRUI4PYqWlJOYmpaPiISNjpGSjIiIiI+JiZCRjoqKiJubmZygpaKlnqKjoZqeoZyanZ6bnKOop6ugoKOYoJ2XnKGjo6WjoqKkrKilqaCepqmnq6mkoKKhoqehpq6mppyfmV+Ntb6byqSTqXVor3JXjZubn56gn56eoKOdl5qYo6KipJ+ZnKGhoqCbmp6goaSgnaejqrGorqusqaSqqquorKalrKqws6+rq6mwq6appaWoq6ynpqevq6Wnq6upq6irqqqrrailqKOmpaesqayoopykoaOmo6qpqKano6SnqKanqKepqKupoaKoo5yepqWjqKino6WlpqmgpJ6inpeYnZ+doqKlnpiUlZ6go5d1d2t2eGJfW1VZUVVXW2Nec19oX2NTUVlUSD48PTg7OTo4NTM3MzM0Nzo4OT05Ozo5PDxBQEM9PT44Ozw9PEA/Qj86ODo+P0NAREE6Oz49QD9DQ0VDOTyCmJmenZ2alZKKiZGRl5GQh4SJgoGNj4+Sj42cnZ+hpKmlqaeorK2moqKfmKSmo6Stsa6yp6asm56em5qjp6Cfo5+foq+rq6yoqKuvqaiqqKKgoaeprbGyr6ujo6RtgpWVqMadkqGERqyNWIahn52epaSloKSzpZWem5+fpKGblZigoZ2enJudnZuZmZWen6Oonp2iqKGaoaOmoqSoqaqoq7CxqKWlp6eopKWpqaqnoqWmqKadnqWloqClpaOlpqCjpaOjpaelqamqpKekpqKmp6SrqaenpKGlqKynpqWlo6OopJWdo5+bnaCjqaeopqGjo6mooKiioJyVkZqfoKGmopuXkpCamqCVfHdvfXlmW1tgX1pcVlxoZG9jbWppYl5QUEA/Ozo4OTg8OzYzNDMzMzc5OTs8OTs7OT49QkBAPTs9ODw9QD08PENBPjo4PT9EP0M+Ojk/PEI/P0FEQjk6gJ6kp6Kem5+gmY+ZnaCWloqGj4iEi4qTl5SRo6Wnqq6trLOys7S4t62pqqevtLKxqq6usbKusa2lq7OssbGpq6+rq6y2sLSwq7GysaOgo6qqp7jBvrm2t7OurK2vhH17bK27oJyagFeDgWeDqKGXnqWimZawvqCdoZqWnqScm5aZoqefoJ+joJuUlpmWl5qfoJmVnqGZmJ2dpZ2gpKeqqaiqraylqaSlqqeqqaqsp6SkpKOimZmhnpqaoaCfpaWYnqSmpKqooqelpaGqp6mnp6ejqKWmpaGkqKesoqekoaalpaOVl52Ym5mVo6elpaSfnZ2lo6Kqo5+amZiXnJyaoaGakJOTl5ibjX93cnZ4amJbX15cYllgZG5ta25hX2RgUE9BQDs7OTs4Ojk2MTQzNjQ3Nzc6PTo8Ozk9PUI/Pj89PDo/OTo7PD5CRUA9OTtAQT5DPDs5PzlAQEBAQkM7OXuao6OcoJ2dop2Zn6KioJibmJaYkpSQm5qWl7S0rrW4s7S4tre0uLm3tbm4ub28uKqLnLK4vLS9urW7uru4s7q/uLe5u7G3r6iusq2inaCrsrfP3t7Yzcm8t7m6r4l4ZGqno5qWintoa3J2eoeLhYWEdm+NuKmjq6almKGko52goaKooaOgpaGck5mYmJmco56cmpudl5uZlqWam5+hqKmpqKuvr66pqKirrKytq6irp6WjoJyfo6Ojn6Cipammmpyip6Spn6GjoqKgpaanpqSooJ+ipKGjoqiop6OloaGopqalo5mbmJuTj6GknqKfmJiVoJuhpaCfm5udnJuamZugmo2YmZiTkYaAdnh4eGNbUllUX19hbWh2bHBoaWliWlNMQDw6Ozg5Nzk3NTU2Mjg1Njc3Ojw7Ozs7QD4/QD0+Pjk6PDk2Nz47QkZCPDg7P0NDRDw+OT43PkFCP0ZDOzhwkpqblJ6bm52Vl52doqajopaXnpaXl6GblJi+t7G4uba3t7i7l5S2vbu9vcDFtaK7mKC3v7+6wcm0nbu2sra/xcGooLa0urGqrrSxsLK0tba7w9fg2M7Gvbq2rpp4alBjlISDhHpybWhobmtsbGtmX1p3srSqtbWus6CnqqynqqmlpqCnoKGmoZOWmJ2foqSjnZ6coaChnZekmpmdoKaqqqqtrq2tsLGrrK2sqamrrqimpaalpqSkpqaeo6eppKGcoKKjpqCio5+jpJ2foqWgpJyboZ6fo6GhpaSlqaOkpaKkp6ehn52elpOcoJiZko+MjJeWn5uWnJqdnJqSlpSUmJOQmp2YiouHgIB8gnhhXllUYWlgZnNvdGl0ZGlkYltMSz46OTg5ODg5NzM0NTI1NDY2OTw8Oz08P0E/QEA9Pj44OTs4Njc/OUJFQzw7PD5DREM9QDs9Nz1DQ0BFQjw3Z4yRk4qalZiblZWYm6Knq6aVl5iQlZmhnpeXvrWztLu6ubi5woeYt6u4u8DCxbOjw6e4s72/tMTHvbS7uL62wMTErqCworW2tb2+wcTHw8O5vb/E1M+5rqmknpSAZF9KXHxucHdvaWhiXV9eYWBeWlRut7KqtLywtbaor7Gwr6yqoqajrJ+fpquXmqifpaWfoJydoKuwsKyiq5yYm6Cor7Kys6uorre1sq2tqaalqKulpaStqaShn6Cnnp6mqKmmnp+anqGlpqmcnaObl6KmmpuanZ+cmqGcmZ2eoKijn6GfnaWioKOioZSZmpmTj4qLhI2Qk5uPjpiVm5eYkJORkomNl5iYk4uKi32AgIVwYGJfXmtjYm54dXZubVtiUlZcTUc7PDk3OTc5Ojc0NDQxNDM3Njg8Ozs8PEBAPUA/Pj8+Ojo5Ojc6Pz5FRUU8PT1AQkJCQUE7PDhAQ0NARD87NV+MjIaFlouUlZeYl5ifpqellpWVkZebn5ual7mxtrO5vLy5urWqsryxvsG0vMe5uLuuv6fGw7/KxsnIxcXJvMLHx7+xsKe8vL7FxMbJx8XGu8XBxcnMxqGRjoh8aFdYSVNrZWZuaGJlYFlbWFpaWVVss7miprG2q7WyrbOtqK6vp6awr7Ktqq+zpKu1qaeopKCgnqmyuL61tbWqqaausre4t7apq7i8ubexr66noqOop6SfqKOfnqCZoZydoqSnp6GelJuaoKGlnqChnpajnZSQlpiboZqflpORlpSin5qenJudoZ6kn56VnJiPkpOPjImTkJefiZCWkZuUmJGRlZaDjJWXlpKLjIh8foR/aWZoYWtsZ252cXJ1cWdeX1xSSUU/Ojo6Nzg0ODw3NjU0MjMzNjU3PDo7PDs9QD4/QD48PTk5OTs6PDw+QkRFPj49QENDQkREOzo4QUJCQUNAOTJbk4iEjZGKi5GRlZCSmp2fnJOSmJSdnZqXmpW2sbm1tb6+tri1uLO8vMTEusPHwb+0s8XFxr/CzcfLzsvLx8HDxsfIysXExcO7vLzBxcHFxL/Dw8bGwMKvlHRtZFpWV0VOZ2JhamRgZ2ZZWllYWFRms7yypqqpqKqtrKmlpZ6pr6uyu7q4u7e5t7O5uLOurLO0qrC1ub3Bur6+vL60urm4u7qysbS8u7q7s7Oyp6Smq6uioaCdmpudmpyXmpuenJygnZaclpuZnZ6io52UnJCNiY6OkZ6bnJWNh5KLmJiWmpybmJybnp6cmp6UjpiYmpSRmZeeoZWYmpKXlJWRlJqYk4+TnZaSi5F+enx+dGtsbmRvbWlxeG55aWlhXGdhUUZEQTw5OTc2NDQ6ODQ2NTMzMjY1Nj05OTs7PT47Pj49Oz05OTs7Oz89QUNBQkFAPEBDQ0NFQjs4OUQ/P0BCPzsyV5uQkZCQh4WSjo2IjZCTlZGPjZSUm5STlpqRs7e4uLi+u7C1sri2tbbAw8G+w8LAvru+u7u8xMzEzNDLxsa/xcfLyNTLysjGv7u7vsS+xcjGxsTExLm0x7qAWVNTV1VAT2ZkYWlkYGZpW1hXWFNiqbiztayupaSjqKSgn6WZqrSxvsG+urm6uLW0srG0tLO6wL7Av769u7u9vsDCt7a3tru7sru+ubi3u7a3tKyoqamrpqijnpOampyYkZKZl5GRmJqXnpiWk5acm5+elJOJiX6GiIuWlJiZkYmVkZeWlZmbmpaYl5idnpyhmJWZmZyYl5ybn56jnJ6WmJeTl5yZmZyUlp2UlpOJdnl5e3dua2lodVpmcnhzeWZmXWRbUlhJRj87Nzg4NzYxNjk3NDQzMzM2NDY7ODo8Oz08OD0+PDo7PDs9Ozs+PkRBQURCQEBBQkNDREM9OTlCQD8/QD89MkyWmpaSk4yKmJCKi4yOkpKKiIaNkJiKj5CUl7O7tba/vb2xtrjBvby0uL/Bsbi3vsHFvbu8wsbJv8jOyMHEwcfKysbKxczIzcbIxb/DwMvNz8rGxMPEwsTCsnlRS05PPVFjYmVtZl9kaF5ZV1dkqruquLWzrKmjoa2prKatn6y1tL/Cvrm4vbawrausr7W0ur7Fv7u8urO5u7i5ubWtsLS9u7G/vLiytrmzubu0ra2orKyqqaeXnpualY2MmJSTi5WWlJyZl5WWmZKYn5mQiop+iYqKkY6Vl5OUn5mWkJSZmJmWmJOUm6GeoZiYmp2ZmZaenpibopqdnJuYmpuZlpeXlpyZlJyYfoB4eXV1ZWZpamhdam9ueXhjYmBgXlhXRkU4Ojg6OTc5NDQ5NzY2NTEyMzM0Ozo9Pzs9PTo6PTs8Pjo7Pz48QkBDQkJFQj0/Q0NDQ0RFQDk6QkFBQj5CQTVCkJeUlZmSj5qQjpKRjZSVi4qHjI2UiImPkpq2u7S8xsHEwr3BxcLAtLO9v6ywr7rDysPCvs3IxbfByMW/wcLIy8rCwsTJzM3Oz8zDx8bIycjIycfFycfIx8K9gk9NTUBNZ15na2pgYmFeXFlkpcG7ury6vKytpqq7urm3wLK1uLLAxrq3t8Gzsa2tqau1s7u2w7a2vbWxt762s7e4sLW2v7uwvbq0q7CxsbO8urOzrqutq62xnaOjoJqQjpiXlZCclpaYlpWSnJmTm5+clpGUjpWQiYyQlZOUm56YmZKSnJedlJmSk5aZmJ2VnJ6do5yVnZ+TnKKcnKCfnaOemJSVl5ebmpmgkH99cXRxb2NhZ3ZoaWl0bXlsXWRbVWBZTEhDNjw5OTg4OjUzOjY2NDQxMzUyNTs6PD47Ozw9PDs8PTw7PD49P0E/RUFCQ0M+QEFARUVERUE7Nz5DQkI+Q0I4O4+akZaalJKUjZCUlI6VlI6Pi4yJk4uIkJObt8C6xsXEw8zCwcS9vrWvt7uvr7O6wMfFxMHMy8W2ucDCwsTHytHLwsPExsnFzNDNx8zJwsLHwsvLyMfMyc7FyL98U05FR29gYWFsYlxdXltdm8fCxMfBvL60sbCwwb6+wca/vri2w8K6urbAvrWyrKmvsri+tMC0tLi0t7nEua+8vrm+v8K/tbq2q6qsrq+wt768trSura2utaSlqKimmpycnZyeopydmZOQkp2VmKCdmJiVmZmZl46MlH2QkJefmZmYk5GToI6Nko+VjpCUlaKdnKSem56elpyjoKGipKOkop6amZubnJ2enIN9cnx4cGdga2p3bGlldW50Yl1iVFdVU01HOjc7OTk3Nzo3NDg3ODQ1MjM0MjU7Ojk+Oj08Pz04Oz05OTk9PEBBQEVCQUJBQT9AP0RFREVAPDk+QkNCQENBOjSAoZeUmZiVkImUk5aTiZGMlJGOiJaKi5CXnMXLw8O8wMPHwbm9vbu4tre3rrK3uLzAwsDCx8bHurzAwsTHyMbSycHDw7+/vsTLyMrLyby8yMfJzcjDyMnJxcXDrn9UTUhqY1xfbl1UWllbksi3v7/AwLq7vbWzs7+/ub/DucC3u8G8uri7ub27srCvsKy5wri9ube1t7q9xb24xsjCwcLGwr28tamurrCwr7O6t7m2sK+tr7OppquprqannqSlo6OjoqCblZiekZecl5GRlZeZlZmRlJiSlYyYo5qcnp2FiZ+TfJKWlZKUlJennaCipJ+en56foaGkoqKjoaOinJ2fnqOhppl5enl/cnBmZWdjamRiam1ub15ZXVZWTlBKRjk5Ozk3Njc3NjM3ODk1NjEzNTI3PDs8QDs/PDw6ODo8OTk4Pj1APz9GP0JBQz89QT5ARENDQTw5PENBQ0RBQDozbKKdlZedlo+PmJiZmIiSjZGVkI+Vjo6TlpbKy7u5urnBu7q3vsG8vLu5sa61uri4u8S6vsC+vru8wMXBxsK+xsK5u8O6uLm8vsHHwca7ucjIw8XEwMPBwcDEwcO7hlRJWV5teYFQUFNWhsjDr729uLm7u763tLC5vrO8vrG5tbi7tryztbm2uba5t7GtusG6vMG/t77Ev8bDw8fHwrvAwr/Cv7iys7O1tLGut7S3tbSxrK2xp6Wlp7CtqJ+nq6ajqKWmpqCgn5SYmZSRkZWUl5OYl5qhnZ6hnKGdoaWglpSbkZeXmJqTnpmZqaSlpKWdoqCanqCkoqOcoqGjoJ6cnp6ppaiVfXuDeG5mYWRiYWNkY2pjZ2NbWlpcWVFPRT07OTo7Nzc5OTY0OTk6NTMxNDUyNzo7OkA9Pzw8OTc3Ozo5Ojw+QD8+RDxCQURAPz49QkRCQkI+OjlCP0FCPT44NVmfnJiTmZaRlZiYmpeQkZCQk5GTlJKSkpSUxce4tbq5wrm5vMPFwri7ubGxtry6tbnAu7u5tre0tLW/u72/ub66urTAuLW3sq66u7fAt7zKz8G7v8C8u8S9usDEwbqLV0dOf5WSRUtafrjLvrDBv7q3u766tbe0uLy0vbi1tLCzvLG3tri/tr25vb65t7q+u7/Axb29y8PGw8TAw762ubq2v7i7v7y4trOyq7CwsrWzs66sq6emnqeurauiqKumpqqjp6iqo5+Ym52bmpicnJiXnJuhpZ2anqGhoKGmoJqbnJiboJ+dnJ+coKiho6SknaKfmqKgop+el6Shop+dmpieqKWhi3x5iH1xZGFiY2hqZ2dqZmldVlZUWU9TTEY4PzY7Ojc3OTs2NTo7PDYzMTM0MTc7OTg/PT47PDs3Njk5ODo7PUA/PkA9PT9CPjxAQUNDQT9DPTo2PEBBQDw9ODdJlJibj5OUkZWYlZGWkpWRkJGUlZSTk5OYlcHCwLq8ub62uL7EwMKxvbqytLO4vLW3vMC8vbS0sbC1t7W7wbi+ub+8vLe0t6+ut7W5v7vB1o67vrvDtrnHt7W3ury6uZZuSnidkUBakLa8wb65xrzCv7zFuLa3tLi2tru7uba0t7q1tLi8vbm/ucPAwLu5vLu+vcjEvcfEw7rAvb62sra4srm0usLCureysaysq62yr7Kur6ijpJ6rrKyqpKakpKiqoqemraihoaGmn6Oiop6bnKKfoKOdnJuhn6KgpKCem5eZn6GdnZ6eoaWkoaKioZ6ho5yinqCZnZijn52eoJqZoKKmnYR6g4F5cW1lZWZvaWVsaFhYTktLS1JKTEhEOT44PTs2Ojs5Njc8ODk4NjA0MzE3OTk7Pz0+Ojw6ODg5PDg6Ozs7PD1BPj09Q0E8P0NDREA/Pzw6Nz5CREE/QDg4P4mYmoyMkI+Tl5WMkpCakpGXmJaUlJKQmZTDvsbBwby8uLi6v7a8scK2tLyxtLa4s7q9v768sq2vrLGwt7y3u73BxLm3t7a1ubm6u7+80MV4rMu9x7i5uK22s7a5s7a0tIZ8m4lWoL/Avr28v8jDxcW+xri1srK9uLi4vrq6uby6urS3u7q5v7zEwL+5uri/ubvFxr3Fw8Kyur27sa+2uLO3s7q+wLm2rLGrrqmqqa2qqq6mpKWnrq2ppaOio6GkpaWmoqato6Klo5+ho6Gcmpyhn6CloaCenZygnaWgnpeVmZ2fn52gn6KmpaCknpybn6Ofn5mcmZ2epJyWnKOcnqGcppZ+f4d8a25wZ3Brc2ZibWBcVElLSkRKQ0NHPjo7OD48Nzs7OTc4Ozc8PDYyNzUxNjk8PD08QTs8Ojs6OT45Ojs9PUA+RD89PkRAPz9BRkQ/Pzw9OTc/QUNCQEI5Ojl3nJiLh4uQkpOWjY+TmpOQnZiSkY2PjpiSvbfHvsO+vbu+vL22uri9ure9s7OwuLi1uby7wLeqraSusLi7sr2+u8S2tbi1t7++xLzCxNetdYK9yM/CwLiutbS6vbe4sb+/m5WBl83Dwr++vbzHzMfHxMe9tbW2wb27u7/CusDCv7y2t729vcHBwL+8ube8wru3v8W7wr++tbe8vK+vt7awtLO6ubq7r6mtq62rrKaqoqeuqKWqra2vp6Sgn6ajnqKjqKOjq6Oiop6dm5ublJaZnJyfpZ6fnpmYnpejoJyXmZqZmqOjop6jo6egpqCbnaCjnp2WoJmcoKCblJegn6WcmKKQgYaAcWZsaW50bnhjZ2JcY1FLVEhFRUNHQjw7OTg9Ojc6PTo4OTs3PD01MzY1MDY4OTo8O0A9PDo+PDk+OTk9Pjs/PkM8Pz5APz4/P0ZEQEE/Pjo3P0BDQz9APTo4ZqGYj4uNlZKVlY6PlpmVl5uVjoyMjY+bk7m2wbS/vLm8w8C+wLq1trKywLmvsry8sLe7tru8qqqjsLm9vLK8vrzFuLG4ubzGycrCx8nRmHF1sNHRzMrEtbq/w8i+vrS/w698abXMxcK+wby/w8zKx8XGwLm+vMS/v7/CyL3Hx8XFvLrEv7vBv7rAvLu7wMS9t7nCub69t7S2uLqur7WxsLCytre0t6yurKqsrKuoq6Gms6qlra+trKippaOkp5+io6Onoaeiop6cnZyamYyQlpeZnaKZnpuVkp2UoaCdmZ6fmJimpqKfoqKmoqeloqCko6GbnaCbnKKfl5WVnp6kmpafiYGDgXRvbGx0a2xuX2NeYGFOSU0/RUA/REM7Ozo6Ozo4Ozw6OTw+Ojo+NDQ1NTE5OTo5PDtAPD89PTw4PDs6PDs7Pz5DPkI+QD89Pz9FRUJBQj87Nj9CRUQ9QUE6OlmfmJOSlZqVmpOQlpeclZuZlpSVkZKTnZm2uLaxuru6vsG5uca7trWypb69tLbBv66zvbS4wbGwsbS7xdDCur68xL63vMC/yc/HyMrKwYVzdKjMzMvNysbCw8vOwby4vLq5dVi2yMbEwMC/xMDKysPDw8O5w769ub+8wsbCyc7Hxr66xr26v7m3wLm5vsDCvrW0vLi2u7CvsrK1r7Cvrqyus7CzsrirsbKxqrCrq6yrrLatqKyusqarrKmpoaWgpaakrKSmoaChnqGgnaCMlJeTm5+mmZ6emZOYnZ+gnp2eopuYp62ooqSgoKKqpqmhqKGlm6CgnZ2jn5SYmKKdp6Gfm4J7eod6bW14fGBxY1teX19UST5DRUlCQz5DOz42OTo7Ozs7Ozs7PT05PTU2NjIxODo5Ozs6QTs/PDw+Nzs8Ozw9PTw9Pz5BQUE/P0FCQUVDQkRAPDY+Q0RFPkJEPztTmZuZmJ6dmqCalpyZn5KdlZ2boJWWlJqYur20sLu8wcTCv8XGura5sqO7vbS3xLuwtbq2ucS4tLy3u7qt28K+tr7Avr66ppyqs7fEwKV5d3qexMbLyMHDwMDJysG/u7qwtnZWtcbFxcS/wMG/y8fCwMjAusK7urO6usG+wMrOysS9tby8ub+5ubW1s7/Avre0s7S4rbeqr7CwsrGvq6+nr7ausrG5rra2uLSzsLGttrS6sa6srranrLKsraSjoaenqLKrqqWkp6elpaCml5ujn6SmraKeo6KanaWiop+foaWenrC0sKSlnp+kqaevp6mgq6CiopqipJ2anqGmp6+psZWCe32Cem5zeHNocF1bXl1ZUkZEQ01JQUQ9SDs7NTk7Ojw8Ojs7Oz0/Oj01NDUxMjc4ODs8O0I8Pz46OzY6PTo7Pj0/QD87QUFBPj4/QkBBQkJFPjo1OkFCST9AQkA7TJqdnZ6fnZienZmampySoJWbnp+blZGRl8W+urbDvMbCvr/Ixbe1uLe2ubu0r7e3srWzt7m8u7a7u8W0ba/Ovba5wLyqfW5obm10gpeYc3l+mr6/x8C5wLy+xcS9vbiyr65uVKnFxsPDvL2/v8PDvr/HvLy/tLSutbW8vr/OzcvCt7K4t7e9ubuxtrLIwLu2tLGwt6yzqbCtrbS3r6uuqrG1r7Gvt7O6usC/tre2sru6wLWyrbO3rLC6r7KloqWrrK+5s7KosK+xr6qiqKGkraitrLOun6inpqWmq6Sknqaqo6ayuLOrpZyfp6anrquqpbClpaWbpKOYn6exrLW4sLKOhHl/fHdsdXtwbmlbX19ZU1BBRkhHS0BFQ0g8PTY7OTk8Ozo6Ozo9Pzw9NTU2MTM2OTg8QT5AOz1AOzs5PD04Oj08QD46Oj49Pj09PkBCQkJBRD03NDU9REc9Q0I/PEWUnqCgoJyXmpiYlZmdmZ2fmp2bnJaRj5LDwMK9wrzEvLy7xbu3s7e2tru7s6CWtayvsbS0tLa4ucDNsHWCtL21tcGkhmlaXmBOU1tccHR4hKO4t8K6s7u3u72/uru7ra+sbFecxcPDw768v7u7uLXBwrW/urWur62wvcC5z8rJw7GwtbS0vbq+urq7ysO7uravsL2xuK+ys7C3vbaur66wt7CsrLK2vbzEwrq9t7bAv8G3tbC2srGzurGxr6err6u2v7e1qbqztbmxp6uop7ausrG1uaisrK+qr7CqqKessayytr20saykqKuoqKusq6i2qaaonqadmKOuvLG7wbSmiYF8gnpzdnZ3bnFgX2ZdW1RKPT8/R0Y9R0NDOTo1Ozk5Pjw8Ojo8Pj4+Pjg4MzE1Nzg5Pj9BPzs6Pz08Oz09OTs8OTs6Nzs+PT1DQT8/QUJEQkE8ODU4PUNGPUREPzw/iZ2en52Xl5WUk5aZnpubmpuYlJ2Uio6Owb7Dwr6+vrm2usCxtbGzt7fCtbOrrbOoqa61r620trnCyaWEeIyisLWcamZnVVlfSUlNUVRueYmosLe+ubK1sry5vLa5vrG0qG9fisHDx8PAvb+5s6+yvbquu7Szpquorbq+uMvCv76sq7Cvs7q3ub67wMXBu7y3sLXEtb+0uLu0u8PCs7a2sbisqaWrsr23v7+7u7exvL28trGvq6uprbOvsLCrsLSpuMC2sqm0tbC3tq2spqu7s660uMKwsbG1sbK1saywsri4ubi+tLGzrqyxramvrqqyuK6trainoZ6ptr+4ur+wlol9gHxxdHd0d3JsX2NiXF5PSUI/PUlERk1DQDc3NTs6OT48PDk4PT47PT86ODMyNTc2OD8/Qj86OD4+PTw5PDk7Ozo8Ozs6PEA+QkI9QEE/QkI/PDs3OjxBRD5CQz8+QYqgm6GdlJiVlZKYmpyWm5WalY2bj4SIhru0vb+7vLm3s7y8rLOytLS2wLXAr7Kzqqqxt62pubO3v8anh3t2jaKXYFNDWVVIYmpVT0VKZZCjrq+2urW0sqy8ubi1uMG6upx/bHq8wsfCv7m6ta6lrLOxprCtqJ6goKWttrXCt7a0pairqLC2s7K6tru7u7W4trC1xLK+vL+8ubrFybq9vraxp6SeoamxrrW5trKxq7S3trGopp6gmaWmpKynq6y2qa+6sa2kpq2lq7GrrKmtuLawsrjBtrGxtbGvu7ayt7W1sry1urKwsbKutLKqrq2nuLWyta2uqqiosrq9wLa0qY6Ce393cHxvdnJuY11nWF1dU09NQT5KQkFKSUA2NjU7Nzg+Ojs4Nz4+PDs/OjkzMjc1NzU8PD48PDg+Pjw8OTk5Ozs7Pjs7OTw+P0E9PEJAPz9CQD47Njc6QERBQ0E/QUKJoJ2loJSWmJiVnqCcl5uYmZGMmYmDhoS1r7S7u7S1sLG2uq6wtLOvtbq1urC1s7KttrqvrbyzuLi/s5CBeYiPbk5KQGVZQlB4gJNoTENeg7G1s7WytK+su7q4trm/xLOfloJ6qLy7uLWysa2tn6Smp52kpZ2WmZman6muuayrq5+lqKSrrq+nsKyvsbGtsa6usLmwtLy+uLm4x8W8vLu4qaKcmJufp6assq6zqaapqq6popqXl5GcmpijnqKir6ekrKaompqemqGnp6anqa+2squ0trCqsK+xqbm2sbWxrqy3s7avrquuq7S1ra+rq7GtsbKoraurs7W3ur2wq6GLeoJ5cnZzbXVpbF1balRdXFBOSERGTEJGTkY4NjY1OjU6Pjg7OTc8PTo7PTo5MjM2Nzc3Pjs9Pjo6Pz48PDw6Ojs5Oz47PTk8Pj1CPDtAP0A/QT8+OjU1OkBFQkRBQEJBiJ+ipqGYm56dmqWpmJudmpmUjJmHhoeGrq2uuLmxsqiur7iyq7CwqrK1ubm+tbK4tLm6trm7tbWzuLWVjIiEe1hGQlGIWElKWXiOgmJBVaS5s7SysLGtsLm4tru3ur+tsbKqn6C5rqmrraujqKGdnZ6XmKGVkpaXkJifqK6ko6Sgoqeio6mpoaanpaqtp6ynqKesq6yyu7SztLm6trK2ramgmpaWm52fq6yqr6Oko6GpoJuTjo+QlJKSmZaanaSloJ+ep5iVkpSZnqSjoaWqrK2iqaqppKmtrqW0sa6xraqprq+wraWmqqSos66trKmmpqmrpqqnq7Ksr7Oxq6mWgX+Bd3J5aXV0bmRVYWNXXFFOTEhASFFETUM9ODg3NTo3PD46Ozw4OTw7Ozw7ODI0ODk3ODs7PDs4PD0+Oz08Ojk8Ojs9PTw6OkA9PDw7QD5CQEE/Pjk1ODs8RkFDRD9BQYijpqKjnqCfp6Coqpufm5yZmI6Xi42PjKqpqLGvsK2lp6ayr6mmq6CvsLu1vby4wMG+vLy8ua6sr7K7qZiZlGhNQFR5cU9JSUtonX9aRVaxu7Gss6+urK22trK0ta6pop6bm52ep6eeoKipn6GnlpuXl4+dlI+Qlo6Xm6SooKCioqGlpZ2jo6CepaCkrKWmqKSio6OrrLOuqa6urqeqraisoZyamJmYm6moq6ufpqKbo5yVkIyPkJCTkJeVlpifnp6bmaaXk4+Slp2ioKWipqSnoKKko6Ghq6uksq2qrKyno6yuraufoaKkpK+srKmmo6KqpKqqpKmrpqmsq6agiHiDfHZ/emN3bG5dUWhUUE5HUE1MQlBRQD47PjQ5OjU7OT07Ojk9OTk8Ozw8OzkzNjk5Njo7Pz06ODs6Pjw6PDs5Oz07PDw9PjxAPT88ODtAQEE/Pz45NDk8N0FDQkQ9QEOOqqSjoqGinaulpqimoZ6dmZ2PmJWTkJWnpKGmqKmlpKChp6uhnKKbp6u1sry9wMLCwL7AuLSnpKyovcGqpb1mRFOhhFBYSUtgSViNYWVlhK+1qrK0rqqrr7Cys62lnZGXk4+YoJ6ioJyjpJ+dqJSblpeMl5GNkJeTmJ2iqp+fn6Cjpaicn6ChnKKfo6ionKehoKSfrKisrKCpq6agpKimrKOdnp6al5qrpqqxo6WonqCclZOQj5GRmZCWlZiXn5icmZukmZeUlpqdoJ2nqKWgo6Kho56doKmqpa6upqipoaKqrqqnoaCio6msq6eppqShqaKlqaalpKKmpKijkn18gHV2fW1re2RoVlJkTUpIR09STkpOSDxFQDwyQDg1OTs+Ozk5Ozg6PDs7Ozk5NDg7ODc7Oz48Ojk8Oj07Ozw9OTw8PD49PUE+QEJAPTc6P0FCQEA/ODU1PDpAQ0BEPkFGlq6koqWeo6KpqKipqqWmnp2imJiZmZWbop6bnqOioKOgoZqgmJeXlqGorK62t7q5ure3u66ooKGpoKvGv8ueTkF1nG9QbkpMY2Z2dWFdYnOSsq+us7WqpqyropuZlI2RlZaYmJyfoqKcnaSemqSXl5eWkJKRkZOal5ugpKqeoaGepqeqop+gp5+dn6SnqZ6jpp+qnaqtqq6nqLClo6Smp6ymoaWim5ier6iusqulqqqgm5iYmJWTlpqTlZWalpuXl5ihnpycl5uhmp6ao6eln6GioqOdm6Gmp6aoraOppZ6kp6mkpaWhpaSsrKmmq6eioKSjpKenoaCgpaKmoIl7gH13eHxkeXlgYlNVYEhJSktTVElSUU05P0I2Nzw2NTs6PDw5Ozs4Ojw9Ojs4NjU3OjY5Pj0+PDk5PTk9PTw+PTs7PDo+PTw/Pz9APT03Oj5AQEA/Pzg2NT08PkFCRkBAR6CupKaroaOqrK6tp6ypqKCipp6bm56aoJyalZmfn5uen56WlJOXk5KcnqSorq2sq6uvqq+pnpeepZykx8aLVlJLZqNYZ31vcltSa2NcZ2JhbZG0sLC4rKahnJ2alJeamZCOkZWRjI6Nk5minJejmZqXmJmUmZiWnZufpaapoKaknqeurqumorGjmqSmpqqioaqiqaSosquxsqu6qKarp6urqaysp6Cgo7GusrG0qrKuo5mcnZ6hmZubmpiZm5SWm5aZnKWhoJqjoZqcmZ+kop6gn6KmnZulpqWkpaijp6OepqOinqaloqWlqKykpq2noJ2dn56gpaGenqWgppmBe4F8dnZzaIJsZltTWlpNUUpPT1VMU01CNz5CNzg9NzY6PDw9Ojw5ODo7PDo7OTc2Oj01OTw7QD03ODs3PTs9PT06Ozw4Pj09QD5BPj4+ODg8P0BAPT43NTg9Pj1BQEZAQUihqqCrq6GkqquwramtqaelpaWkoKGfnqWXl5SYmZ6YnJ2blo+VmZKRnJihnaqip6Cep6Gln5ySm6Kan6qjjHlVaXF3dW9kd3ZYV2JgZGlbWldora6sr6efnqKglpCTm6CbmZeSk5+coaObnpuWn5qfl5uinqWhnqSfpKitraisqaSstLe2sKe0rKKtraOvpaSmoamorrWzsr23v7Cssa6tqaq0sbCoq6iytrizuK2ytKSgnaWfrKGhoqGgmpiWlp+bm5iloaCeo6GgnpucpaCfnZyhqJ+fp6meoaOkoKagnqehn5ymo5+ipaOooKmrpZ+dnZudmqainpyjnqeQgYJ/fHh1and1Xm1bUmBIUlVIRlVWSkNNRz1LSDhGPDc3Oz49PDo8OTg6Ojs6PDk2Njo8Nzs+PT8+OTc9OT47PEA8OkA6OkA/O0A+QUA9PDk3Oj5APzo+NzU4PT0/QUBEQEJGnKueqamipamprqimqqWmp6aoqqGlpKOmkpOVmJacmpqcmpWTmZuNk5+ZqJ2un6eenKGdnpqZkpiem6GhoKN/b4JwYGNXTFtTWkxMUVlSSE9OSJmsqqmkn5+ZkpGTmJiWlpWMiIuOlZ2cnZ2el56Zp6CgqKWxqqeuo6uutrC0srGutri9wLqttbSwt7CutKmmpKWsqbmztbvDvMPBtrq2q6+xube8r7OwtcK8t76zs7WirKKpqLKpqqinqJqZnpqqp6CZp6Cfn6eopaSfnaqiop6bn6igpKetmZ+jnp6nnqCmnpycoqGbo6KhnZympaWkn6KZnJukn6CboJyjiYWEfnZybWl2bWhtXFhcQ1dOSkdNR0NGTTw+TD40PDk2Oj0/PDs6Ojg4PDk6Ozs8NTQ6PDg5Pj4/Pjg4Pzk8Oz0/Oz1BPTo/PjxAPj8+Pz08Njs/QT07Pzg1ODw8QERCREFCQ5WqoKapo6mqqKmjoamgpqinrK6lqaWpqpSSl5mUmpqanJiYmZyamJmqoLGit6Swpp+enZ2XmJWZnpqco56ciWJXXmVgV01RRz0/QENEPz5DUnipramqpZ+enqKjnZ6dmpyblJOVlJ2dmJSFnZqhm6ukq7KwubKysbKxur28vLm2uMO+v8K/trq7wMS5vbusr6exrbHCtrjCxsDIysDKv7C5ub25wr64s7vGxL3DvLezqrOtqrO1r7Ouqq+jnayotrGto7CmoKOvsa6wpKWvo6GgmqGnoaSqqpmdoJmao6CmqKGcnqKemaSenpiYo6OhpZ6mmZuipJ6fm5ubnIeGgXt0cmtrdHJxaFZcUUZUSURKUEk/RUE0Rkg5NTw+Nzs8Pjw8Ojo4OTw4OTs4Ojo4Ozw3Oz49Pj02OEA5Ozs9QDw9QDk3PD07Pj0+PUI+Pjc6QUA+PD45NTg9Oz1DQEFDQkGRqqGlqqelqqimn6KnnKasp7Gyq62jqayVkpWalJecoqGbnqCinJ+psqu7sr+rr6ylnqCgnJyYmp+gmqCflXxfXmVgUEZFO0I+Rjw+OTZOfqqzp6OjoqCepaulnpeclJGZnZiUjIqGiIZ4bYigpKKrrLS8tsO+vrO7wcPCxcC/wsbGxcPIwsDFx83QyMvDsre1vrK+xbu+zM3FzMzM0se+v8DCvsfGwrfEysnDwca+urW6u7W7t7C2sqq6sq67t7+7uqu4rauquLu1vK6uuaOmo56mpaKjqaaZm5+Zmp2nqqegoaGkmJSjlpSZkZydn6Sep5+en6KdmJmUmJSIhH16cWtjaG94a2VaW0ZLTEVEVE1EQ0U3Oj87NTQ5OTc5Pj87PDs7OD48Njo9OTw9OTw9Ojs9Pj4+NztBOj45PT45PT44Nzs6Ojs/Pj1CPj83OkFAPTw9ODY2PDo8QT9BQUE+kqugp66ooqulpKKipaGlqquwsq2upKmmlJWWmpaUm6SmnaGqp6KrrLy8v8PBsrK4p6Ghq6qhnJ6hoZ2bmn1yaWFXTkU+SVp8b2FBPVyOrqygmZubnp6Zl5eXkoyOlpaTjo2Qi4KDgndycW1wj6atrrS5xbvNx8u/wszNzczHydHMzczHycXFzNDS1c7Tyb3Av8O7xsXIxdHTzdPQ09PMysLFxsbKyM6/yNHMx8XHxcK8w8G/v7+2vrOuv8DDw8fEx8Suv7iyuLzEwsK6vLy1rqenraigoqmlmpagmpmdqKupo6SknpePm4yQmYmVmJugn6OdnZeempOTi5WPhYB5dHNlYmdyb2ZeWllDTkxERlBJRENANTU1ODlCPTY4OkE+Ozs+PDk+PTc6PTk6PDg8PDw7Pz8+PD0+Qzw7OkA9Ojs6Ojg4ODk7QT88QD8+ODtBQTs7Pjc4Njo8PkI+Q0FAPpOvn6ivpqiro6KloKampKuoq62qrqKqo5Kcl5ebmJuirJ2frqalsarFxszOzb+wwaikqKytqqCdo56cnpVpZlxUSURAP0qGnqSYg6CyraOenJ+amJeUkpSWkZCPjIeDg4iHg4CBgYB5cXJvbHmktrq5vsvB09LTyM3O0dPR0tHQ0dHNzs7Qxc7U1dfR183Gx8nMw8XKz8rT19LX0tXW09TIzMbMzcnSzc7TzcXIysrBx8zHycjGv8Ozs8jEy8vLz8fKv76/vcHHxc3MycnAw8Cur7OonqKqo5qTnpyYnqaprKSlppaXipWFkZSHkpKSmZualpiQm5WQjIaRi4B6cnV2Z2NndmlkVldRRE5GQEpRQj5CPDoyMkE8RTw3OTxCPTs9Pzs7Pj05Oj48Oz44Ojk5Oj86Pj1APkA8Pjs+Ozk9PTw5Njo6Pj08PEE/Pjk6QEE6OT45Ojo6Oz4+PEE/QT6QrKKiqaanqKSfop2qqKOso6OnpqyiqZ+To5iWn56dpK6bn7CrqKyxyc3U18/Gu8esrbO3rK6jnqOinaGbYVNMSkRDP0NUsdG9sq+mnJycoKShnZqUk5WUiX14cGtlYmhxb3F7hYqAdXBucXRwhbPDvsXR0NfW1tLWztTW19TT0dPU1NPP0cPQ09bY1dbSy8nO0cvGzdLK0tXW2dbX09bYztLKz9HMz9DM09C/yMfKxMzMzM7PxcbHtr/Kv9LNzNDGycjAxMPIzs3Q0c/NysjNuLe7qJ+lq6efmJ6jnp2qpa2pqKiSlYiQhIyRho2MiJOVmZCWjJiSj4aHjIR8eHN2cGNgZHJiXVJcSUpHQUVJSj47QTg9NTU4Njs4NTo8QD07Pjw7OUA7OTo8Ozs8Nz09Ozo+Oz08Pjw/Ojo8Ozs5Oz89OTU7PD48PD0/Pz46O0BCOzk/OTg7PT0+PzxBQEQ8hqugnKegp6Oim6CbqaSlqaCfoaGmn6ifmKSimqmmoqarmqOwsamotdDU19rSx8bLtLXBxbG1qKGkpaCioVlJQEFEQUZRdrKvp5qUl5+cmqCgnpucmZWJd2ljYV9fYF9eX19dYmx1dHBwb2xycXWSxMjG1NbX19fT1tDV1NrU1M7P1dTU0dHM0M3T19bT1dDP0tPRydPRyNDX19jR19LY2dTWzM/Pys3Sy87QwMbCyMbOztHR0sjLzcDKzMbTz8zOyMXKx8fIzMrU1NHVz9LM08K5xbGlqLWup5uorKWdsqiws6ysk4+TjoiKj4OPi4SQjpmNk4+Zj4+ChYx8enFzdG1hY2ltX1ZQX0pKQ0ZDUk0/PD40Mzo9NTI4NTU8PEA8Ozw6OTpAOjg7Oj46PTg+Ojo8QD08OTs9Pzk6Pz07PTw9PTo2PD0/QD08PT0+OjxAQjs5PDc0Oj48Pz89RkFEPYKknKClnaWlo5mcnaSeo6OfnZ+doJqnnpyhqZ+vraqqq52lrreoq7fY1NXZ2dHO0L+8zMm2vq6mqqiho6tlQzg9PkRYgqqon5eVl5manJ+dmJyckn1wZWNiX19hX19hYV9gYF9gZm5wcG5rb3J3d5zMwdLV09jY1tnR0tLXz9POy9LN1dTSys/M09bS0dXNz9XV0cXR1MrQ1NXWztLQ2NjY18vIzsTJz8zKzMDJwMjKzc7Qy9DNzsvOz8jL0NDLzsrCycfJzMvM0tPN09LR0NDKvci5sK67ubWrtrCtqLits767sZqPoJSRjo2IjpCFkY2ZjJGRlY6RgIWIenZvcG9rYWRucGFXXFpJRkZETVhFO0A9MzM8PDg3ODU1Oz5APTk8PDg8Pjk8QDtAOj04Pjk4Oj88PTg7PkI6Oj08OkE9PTw6Nj08P0A9PDs9Pjg7QEE9Ojw4ODs+PD4+OkVCRT6Bn5mlp6Cfo6eam5+cl56eoZqdmpyappufpKefuLa1taylrK6+tLDA2NLX2tzWzs3Kw9LPwcGxqaytqaSxeUhGQjtXjqGblZOWm56enpyTlpeUiGteXl5hZGJgYGBgYGBhXl9fXlxibXJvb3N0dnZ5pL/M1dHW1NPY1s7O08vOzsXOytLSz8fOzc3UzM7TzcvX1tDM0dTLzNDS08rO0dXS1dXKwMrCxc3CyMnDzMPFyMrLz8rNzdDO08zGyc/NyMfLxcfBxsrMzdDRx9DPzs3M0MXHwbi5vcPCvcO5srK+sbvDw7WqmKWhmJaSlZWSi5SNmpGUlI+PlYKJhnlxcmttZ2BgcWhZWGhWTUdMSVBRQjtDPjs2ODk4Ojo1Nz09QTs6PD05PD05PT06Pjo8ODs9OTtAPD47Pj5BPDk9Pj1CPTs3NzU/PDw/Ozw7PD04O0FAPDo8OTs7Ozw9QTpFQUU+hJ6bqK2epKSqnJ6fmJKXm5+am56ZmaKVoamppcTCwb+7tbKxx8K4y9XV2drb2MzMz8jW1cTCta+0qJ+tl3hscHJ7kZqNjJeVkJORkZWWlZCLfGVhYmJgXV5hY2JgX19gYWFgX11bXWdycXFyc3Btcnmlx9PPy9DQ09TKxcnJxse/w8XPzsfFx83K0sjLzs7G0dLQzczUysfLzs/Hx8/Sy9DPxrrEv8bKvcLHyc7EwsfAx83IxMzKzM/IxMTQyMbCxsjFv8HHzMzMz8LLzMnHy9DExce7x8PJycLPwb28v7DByca5vaqwsqelnaKcmJCbkKOZl5mRlZiJj4J4b3Rka2BeZnFhW1dgR0hIR0lNVEc/Sj02NDM1NT09NDg9PT06Oz08OTo7OT89OTw7PDg6PDo6QD1APD09Pjw6Qz48Pz04ODk6QD4/Pjw7Ozs7ODo+Pzw7Ojc5PD49Oz49RkFDPYOgm6qupa6qq5qdoJeUjpedmpmgmpqcm6WysazJzcrIxL69uc3MxtDV1dna29jQyc/P0dPIwre7u62jtn1og4Wkq5SOjZaPhYODg4F9hIR+c19bXl5eYF5gY2RjX1xdXl9gYF9bWlxga3Jyb29rbG9vfbnRyMnKz8vNxLrAw7u7u7q+ycbCw8DDyMrJyMrIwcXMxsjLzcnEwsrJwcHL0MXLyL+5wrvGx76/xs/Lw7/Du8nHybvIx8XKwL7Cy8bFxL7GvbzAw8XMxcW8wMrDxcfSxcHJv8rJxsjG0MPDxsOvxMvHw8q3v7y6tKmspKWYn5iso6Gmm6Ogm5V8d3N0ZmlaYW5tWltYUkRMRkJHRExERlNANTQzMzU/PDM6PDw7OTw8PDg7PTtBPTo8Ojs3Oz05Oz07PTs6OD4+PEI+Oz88OTk7Pz07QD48Ozk5OTk6Oz06PDo2OTw+PDs+O0NCRD5/pZypsqm0rrCdnp6YnImUm5man6Kfmp2ov7i8ys/RzMfCw8bNzs7M1c/V2djZz8vSzc3OyMG1w76yr7ZsXnl9opGLkpaGeoCFhX92eHVycF9aW11gYGJjZGRlZGBbXF1dX15gW1laXGJvcm9raWxwb3OPx73KxcvAxsKwtrqysrOyscK8vLy6uMHBwcS+vbm9v7nEysXGwr3GwLi7w8m/wcm7t7u6xsO/vMHNw8a+vrXBvcO7vca8w7q0vMbEwsO3wLa2vr+7zMO8trrIur++y8PBxsLFycfJxtDGwszIssfJw87MwcXDv72yt7Cyp6ioubClrbCqrayUenZ3amRnYGhvZFZeWUpGSkVHS0FFQkZKQDk6NjQ4ODU0Ozo7PDk8PDs5Ozk6QD46Ojw6Nzo7Nzo7Oz88OjxAPUA/PT8/Oz07O0A8Pj4+Ojk5ODk3ODo8PDw7OTo8Pjs7PjpAQEU+fqygrLWqt7SyoZ6fl5qNlJaan52mop2et8XCxMjO0srKysfNzc7RyNDG1dTW183KzsXJxcfBucW9rK6lX2R1hJOLiIuEeH+Ghn9+hHt0dGNcXF1eYGBiY2JhZGViXVxbXF5cXl1aW1xeaHNxbWdnbm9yeZ29zMDDusC4rbCxp6qtrKe4tLa0s7O0u7W+sbawta+yvMK8wcS8wLu1srq+wLjIubS7t8HCvbe8xsHDvLWusrW6v7TFt7u1q7i9vsC9sbu2sLa6s8W8t6+7v7W3tMW8vsLFwMPFxsfLxcDGxrvHy8DPycfDxsHDt8O9vba5vse/rLW7tbe2jnl0eGdnZWJrbl5WXmBGS0hISkZCREFFRT88OjU2NTYzMzs6Oz06Ozs6Oz44PEE9PDo7ODc5OTk7PDo+Ozk+Pz1APz5CQD1AOjo+Oz89PTk6Ojo4NTY7PT48PDo7OT49OT86PEBAPIi3pauzsby8sa2foJmUlJiXnqujr6qnpMbLzcjFyM3M0MzNyMrIysnKxNDN0s/NxcfBxsC/urjJtqqwmFtob4qPhYiJenh+hoZ2d4F8c2hdXV1dX2BfYGRhXmNlY19fXFteXF1eWltbXV9scG5oZmtubnJ8pMfAuLi1sKutp56iqaeeqqyzraqsqbSut7Gzqa6mrLO8urbDubq6sau1ubu0wrqwwLG+vLu2vMe5wretqqiwssC2uL2wsaixs7W7vKyutaautq67srGqubCtu667uLvAwL65w7/Gw8XBvMbCyMu4xcfFv8fDw7rExsK7xsnMy7O5w727s4lzd3ZraWFibGhZV1dbQUxLTUpFQUM/RkE6OTo5OTU4NTQ6Ojk7PD07Ojs+ODtAPD05Ojc5PTk7PDo4Ozs6Pj45QT0/QD87Pjo7PDo9PDw4OTg5NzY4PDw9Ozw6Ojs+PTs/Ozs+QDyKwKuouLe5w62zqZ2ZlJaZoZymsLWxt6bFztLLw8XBxc/HzcHDxr/ExMPDysLJyr/AvMK6s7W1w66qsJFban+Sh46Pe3h9iYV6e4SAd25eXVxcXV9gX19kY2FkY2JgX11aW1paXVpaWlpcZW5vaGZnaWtucoGturC1rqWkp6eaoKSgmpylq62kqKKrqqyrsKOmn6qttbaxvbmvt7Corri0tLy4tL2vuLm1srzAssCvpaijq7Gys6i9qquoq6yttbSmqK6hpK+psqaoqK6mqLetsbK3urq7sry+vr7Ev7XCwcfIt76/xbfEw7+7v8TCvsTIzMq/v8TAwKmHc3RzamldYW9kV1ZYUEhZUlNLRkZFPj5AOjc4OTc3NjQzNzo5OTo8Ozs8PDc7PTs7Ozw4OT44PTs8Njo9Oz89N0E+P0A/Ojw8Oj05Ojs6Nzc3ODg3OTw7PDs5Ozo8OTc5Pjw+P0E7jMKvrry3ucSwtrCbmZWcmKqpsLGztb2vxdDPzMPIurrLwcq+u8m2vcO+usq3wcPBtLa8trGvtbutqKuSZG2Ig4eLgHp9f354dH58c3dlX11cXF5fYF5fY2NhYmBgX11dXFpYWVtbWVhaXF9ma2ZkZ2Voam9yhaqlrKWenKGklJ2km5eRoaOpo6Ofpaanpq2gnZykpqyysLa3p7GtqKq1q7S5sba2rra5srC6urG3paCkn6axqKuouaqkpqeop7KtoKemn5ukpqyen6ejoKGxra2ssrSztLC1vba7wcCyur7DwbG5ucKzwb7Atbi8vb68wsfEw8S/wMSgg3hwbGJmYGtvYFVZXkhOZ09UR0ZLRjw9Pz06Ozs4MjU1MzY5OTk7OTo6PDo3PD88PDs8ODg8OTs6Ozc4Ojo8OTg+Oj89OTg8Ojs9Ojc3NzY3ODg2NjY7Ojo7OTo7PDg1OTw6Pj5AO43ItbW9uLrAur22oJ6UnaGmurars7O7s8TPycvCxri2x8DMv7jJt7vFuLPEuLO/wKy2vLKspa+zraGjkWlyhoWGgHx4dXNvbWpqaXBpXmBdXFxcXl9fYWNiYGBgYV1cW1xcWFlYWFhWWFteX2RjYmVnZ2drbW+HnamflZWaoZabo5iVjZ6hoqecoJ+kpaKnnpujm6CrsK2xtaSpqqqsrKS0uK23sKyztq+zta+wqp+en6OisqWmqbitoqamoKisq5mgn56ZnZ+lmpmjm5yesKmrp6urrK2wsrivuLm6sLa8u7qrs7K5s760trKxtrW/tr7AvcPCu7q9l4R6c2tfZV5kZFhUV11JV1xLUEdKSkdBPD8/QDs/PDA0NTM1Ojs5Ozg5OTw8Nz4/Oz07Ozg4PDg5ODw3ODo7Ozo7Pzo9Ozc4PDo9PDc0Nzc2NzU3NDY2Ozc5Ojs6ODo5ODo7OTo8PzuJyba4vru3wcHBtKSkmZqkpsCyr7astLfGz8jIwMa7u8PDz766x7i4v7eywrSxu7usurqxop6pq6eYnpBtfoWGf3hybW9ta2JeYmZmXV1eXV1dXF1fYGFiY2NiYV9cW1taWllYWFdXV1hYWFpeYmRkZWZmaGlrcYyonJOUlJqXmqGWlpCboqGonpydpaeipZygoZuZr66ur7KhpaOuq6eitbCysqypr7OnurOmtqCinpyjoa2joqq2q6Ojpp6lpqOWmZ2XmZudoJqXnZydnK2iq6eko6atq7KzqrWwsquyubSvqq+ysrO4s66prK6yuLC6trq9wLizsZSFeXVmX2ZeW1lWU1pVS1tRS0lFSEtJQj0/QUFAQToyNDUyNDk5ODk7OTo9PDY9Pzs8Pjs3Ozs3Nzc+Njo+Ozo4Oj07PD06Ozw6PTs4Nzk3NDY1NTQ2Nzg1Ojo4Ojk5PDg3Ojg5PkA6gci9t72/tr68v7KdpaOYpbHCtba9rbS4wszIxr/FtsHAx863wMS9s7m5s7+2sbm7rbK0r5+apKqglJqPeH+DhH94b3F0cWhlZGhkY1xcW1tdXVxbXmBhXl9fYF5cW1pcWllYVldXVlhXWFdWV2FkZWNkZWRkaGp2oZuTk4+Ulpafl5mUl6CeoZyWoKGppJ+fqZ2bm6unr7Crm6OkuKqhoK6otqqnp62xpLiwpLegopuZmaqnoZqsua+ioaScop+gk5ShlJaWm5iXlpeclZ+qnqmkop2jqqqwrai0rKqnrbOwpauus7GwsK6vp6iosq2xtLC8tLq4rqOUgXp2ZV9hVllYU1JTS01eTE9LR0dMTEU9QT48Qjw7NzY1MzQ5ODg5OTo5Pjo4Pj47PTw8Nz49Njc2PTc7PTs5Nzk7Ozw+OTk6Ozo4Njc2NTQ1MzEwNDU2Nzk6ODo5Ojo3Ojs5OT1AOnbAvLS5wrG+uLyunaenoqq7wL3Aua60uMHMx8XCw73FuMjMssHCwa28u7W7vLW5ubCvsKqcmaGplJGKi4CAfHdxaWxydHBoaGVkZmJcXFpZWlxcXF1eXVxbXF5cW1xZW1taWFZXV1ZXWFdXV1ZbYmNiYmNiY2RmaYGVkpSLkZOUmpiclZacoJyflqCfp6akpqefnaCmoKqvpp+io7eooaGiqLOipailsKWxrqy1nqGdlZWpoaKUrbGxn6OjnZ6Ym5OLoZSRk5iYk5eXmZeep5ynoaKapKWlq6SlsKelo6urraaprq+vq6iqqrOmpqyvtLGuvLWxr6+gknp3c2VhXFtdWE5MUUdRYU1WUE9KTU9FQkQ/OT02OTo3NjQ1OTk7OTg4Nzs4OT0+Oz47PDY5Ojc7Njs3Ozs6ODU6Ozo7OzY8Ozg4NDc3NjMzMjEuLzI1NTY7Ojg7Nzg3Njw7Ojs7QTh4u7uxtb2wu7G3rJ6lpqy4u7zBxbqxubXEycnAw8bFx7bFxLPCv8Wrt7e9tr26urWyq62omZifo4uJdImIfnZuY2FmaWhmZ2lmam1gXVxbWlpaWlxdXFtcXl9cWllbWVlaW1dVWFdVVFZVUlRSVWBgX2BhX2FhYmVpgJKSiJCOk5KTnJSVlqOZoJedoKWiraalpaOko5yqq6Wan6WxqqChnqWqnqiin66sqamuraKiopWXopuckKupsJyfop+el5mTip6RjZKTlpCYmJOcoaOdpKGilaChpKWbo6uloqSqo6uupa6yqaalpqa0pqmorbO1tLm6sKqsnoxycHBgW1dWVlJGUU5IWVtPUklUS1NMRUZJRDg7Oz08ODY2Nzo5Ozo5NzY5Nzc6Ozo9PDw2Ozw4PjY5ODo4ODY1OTo7PDk3Pzw5NTc4NDUyMTIxLi4xNDI2Ojg2OTg1OTg5ODk7OUA5e7W0rbS7srCrsq2dqKevubmzwMm6tcCvxcjMusHKzMi1ybyxvsPIrLG4wbW8wLu0tKqsppWam5uIgXKIg3t0aWlpbGdqbG1ramxlXVxcW1tcWlhaXVtbXmBgXFhYWllYV1hXVFVWVVRVVVJSTlFZXVxdXV5fX19iZG2NjoOQho+QjpmTlJKcmqOcm6GoqauorKeppqSZpa+llZmlr6mgnJmboJ6vmZyrs6Clpp+jpKGUk5uWlpKpqq2anaChoJuUkIyZjoyRjJKNlpWQnqKhpJ2bo5WboKOhl6Koo6Ooq6CrsKStt6ajpKKsraqoq6+zt7O+tbOrr5iFdHNoW1hZU1VSRVhMUVtYTVROUExRUklOSUI9Pz9BPz03NTc5OTw8OTc3Ojc5Ojs8PT47Nzs7Oj01ODo7ODk3Njk4OTo2Oj05OTU3NzU3MDE0MS0rLzQzNDk4ODo6ODo6NzQ4PTg/OX6zraezt66pqK+um6morLe2rLzKu7a/rMvGxbjBzs/Is8S6t7vCyLCtuL+3vL27s7WmqaCWl5iWh3p0gHZ3bm1obW1tcGdnaWZkXVpbW1tbXFtZWltcXF5fX1xYWFlYV1hXVlVUU1VWVVVTU05QUVlaWlpdXVxeX2FkfYuAin6Kj4mSjZeRl5mioJugq6qmr6yosKWpmp+toJWWpamnnZiQj5qerpeYqKqZn52UpaGfkpGSkZOVqKulmpmZnp6WjYyLk4aIjYOPi5KVkaCeoaSYlZ+VmqGinpSbpaaoqKigsbCmsb2on6OstKqup7C1sLm1wLGusauRfnJzYlZUVk5SSkdWUFNRTExXTUpNT1JHTUtBQ0ZEQz5BNzU4ODk7OTo3Ojo3PD06O0A+Ojk7OTo/NzU5Ojk4NzY5NTg3Nzk7ODU1NzY3NjEzMjAtKi4xMDI4Nzc7OTk7ODk0ODs4QDh/s6ylsbeqpqOxq52qp6mysaS2xrS5urPKxbm6wcvQyrG2t7y9wcOxr7G3rbS0u7O0oqOdnZeXlIOAdmtnbG5xbnFqcGtkZWdlXlpZWllaWlpaWlpaXFxdXFpYWFhZWVdYV1VVVFJTVVNWVVJOTk5SV1hZWVlZXF1dYWp/eX90iIyGkImXiZSTmJuYnqmboKumpqyeqJqgppyTj5+jmpeXhYSSm6OQlaOdlpaWiKKbm5OLjoqQmqSnnJWVl5uRkoeUjouBi46AkIuSkpKgmqGilpSYmJWippmNmaSmqaahoLSyp7K3oZyitqypraSysqa1vLWrrLGjiXlzbl1OUVFMT0NNTk5QS0ZOTkpKTk5RSE1KQUdLSEhDPjg1ODg4OTo7Njk6Njg7OTk+PDg6Pjk7Pzg3ODk6ODg2ODU3Njg4OTc0NTc3ODIwMzAxKyktLzEyODc2Ojk5OTk4NDk4OEE3d7anpLawpaekqqWgqKals6qissO1tbKzxsa2usPKzMazrLm9tLjAr62psJ6mrrqvrp+Zmp2VlId7g25fX2ZycHVxaW5pZWdoal9YWFhYWFlZWVpaWVtbXFxZWFhXWVlYVVZSU1JQUVRRU1VRTU1LTFNXV1ZYWFhYW11hbnJ1b4OHgYiAkYSOipSRk56hj5uco6KkmaWXopyVjYeZmoxzjYN+jpeWhpGakJSOjnuZj52Mgol/ipigo56Qk5iWhY2ClH5+c4mOepCHk5CQnZuampGWkJ2Oo6OOiZqgoaSkm6K0r6yvrZ+YpbimprGhsK6csLyqqa+qmYN3c2NWTVJPUE5DU05MUExCUFFISU5STUhKSkRKTEZKSz03NDk4ODg7OzY5Ozc6PDk6Ojs3OT85PkA3OTo8ODk3NjQ0NDU4NzQzMTI1ODUvMDEwMikoLC0wMjc2NDc4OTo6NjU6ODdBN3i3oaO0qaamqKOmpaamprOnpbTBuLC0sMnEt7nBzsa9s6y6waytw62noqaSnaa2rKOgj5WWkpB9d35mV1ZfZ2ZpZ2huY2poZ2JcWFdYWFhZWVlZWVlaW1tbWVlZVldXV1NUUE5QTk9PUFNUUk1NSkhOU1NTVFVVVllbXWlrcWt+hHtzTlhyj4KXho2cl4uUkZ+YnZWUlpWPlomAlIlfO1ZvfIyUiYCMkoyQhoZzioWXgXmBe4aTnZSDlY6RkIOGfZN4cXCFjH2JgZGNkJeamJOLkImdiJ+Yh4iWnpqioJenrqmtqKiel62zoqaumayrmKi0oqmto5N/c25fW05TUldMRFRKUExMRk5PSUVMUU1LT0pJTFBGSUk9NzU5OTk5OTo3Ojs6Pj44Oj09Nzo/OD4/NTg5Ozc5Njc1MzMzNzYwLi0vMzQ0MTEwLy8oKSsrLTM4NTQ3Nzk8Ojc5Ozg2QTl5t6CjrqGmpqqgp6mno6mwqKe0wrmwtbDHwrezvc+/ua+utcKnqsWqo52Yg5ScsaKamIaUj4uHfXN1XVBMUVVZWlddXmJnY19ZV1dXWFhYWVpZWFlYWVpaWllYWFZXV1VTUk5MS0hHYlxNT1JNS0hGSE5RUU1QUlRWWFpgbG5oeoF0T0I/f5WSkX2IlI2Eio2bjpaViZKIhpWGeYl/YEpRbniLkoR9hI2KhX9/bn9/lHh1dniEjZpwUY2IioZ7fniUdmd3hoh+iomWi46RkpaMhImIlYSbjYKEkpqWn52UpKOoqaWknpuwqqGkpJGmqpaiqpyipqiJdm1mXltIUVFTTUlVTVJJTEtPSUhGSk5MTVRLUVBPRklDPDc2ODo4Ojs7ODo7OD4/OTk+PTg7PDY7OzQ3ODs3Nzc1MzQ0Njk2LzMvLjEyNTIyMS8sJykqKiw0ODMzOTg5Ojk5Ojo6Oj85d7aco6edn6Gvoqeopaeor62qtby2t7ezwbu2qLrIuLaoqLW2qrK9p56VjX+Jk6iWlYp+joOCfXdwb1hNS01NTkxNUVdbXFpYWlVVVlZWV1lZWFhZWFhZWVlaWFhWVldVU1BNSkVAQJtrc3NJTUtERERJTk9oWU5RU1RVWm6DcnV+aWhcVI+JlIl0f4aBfIWMk4KSmouPe4aPgHaAeHNvdnF0jo6Ben6Kq4R5e2h2e45wcm14gYuNknh6gHuAdnNykndodYSEhIV8lYqIio2KgH+Ei42AlIR8gI+YlJyWkZ+dqZ6foJ2gqaWenZiMp6SSoKCWnp+kgHNoYV1dSldQUkdLWFJPSkxNUkpKSkxQSExRTFJUTUVIQTw3ODs5OT49Ojs8OThAPzo6Pj03PT03OTkzNzc4NTY3NTI1MjQ3Mi8yLiwvLzIwMC8tKygoKS4xMjcyMTk4Nzo4Nzc1Ojw7N3aumaOhmJ2ftKmvqaWtrLCxqr20sru4trq0sZ+3urKqnZ2sqaiysKGakY2UgY6cjpF/doZ4fHZvb2lYS0hJSEdFSEhQVFRUV1dTVFVVVVZXV1dYWFhYWFhYWVlXV1VWVVNQS0Y+OTNOPH6eTUhKREA9QURqlH5MT1FRU1ZedIJ7eGZ2jZaYjY59Z3mBdniAiZB9hJiSgXGHj3x3e29rfq19dJCLf3uGkoF8f3VmdnyFbG9nc3yJjIeAbHlxfXFtdo9xaHGBfo5wQ4uFgoOFf3d3eoyGfYx7dX2Oko+Yi5Kam6OWmZ2anZ6hnJaNiqSbjp6XjpaYkHdvbWZiWlhYVVFKU1VUT1BOUFZLTktPT0pRT0hOUExGRDw7Nzk7Ojo/PTk8Ojk5Pz87ODw9Nzw5OTk5MjY2ODU2NjMzNjIxMjI0LiwsLS4uLTAtKyonJyouMTM2Mi84NzY5NjY1Mjc5OTV5ppegnpahprCtrquoqbGvsau8uKy7vrizrKebsKesm4+WnKWppKCXmY+FknmIjouKdXF7bXVwam1qWEtGR0VBQENESExMTVFSUFFTVFRUVVZWV1dYV1hZWVlZWVlWVlRTUUtENzhmNzA/qGlOSEM9OzpEioV6WkpOUFFUWF1lcHJsiKeqwH50eWJ7eG98eYmQen2Lhm9tjJJ5dHlqaoCCcZaRi4F+loBJkphuaHh+gm1pZGx5hZCShmtzbHxucnyGaW5wf3OMiYSGe35/e3ZvdHSGgnmBeXB8joyKk4OWl5iakJKWl5mXnZaMg4mekYuSjYaQloBuaW9vb1hWWFRSUVlPUlRUUlhVTU5ITkpNTktDSE1HRUA6ODk7OTk6Pjw5PDs6Oj0+Ojg6PDk/ODY4NzI3NTY1NTQxNDMyLzAyNCorKiotListKigqKCcsLTEyNTAsNTU2NzQ4NUhBODk1d5mRm5man6WtsKKtqqi1r66stL+rvMO/paKalaSXno2Ei5ShoZmYkZOLc456gIaMhnRvdGtwbGRsallOREZDQDw+PkFGRkdLS0tNUFJSUlRUVFRWVldXWFlaWVlaV1ZUU1BMRTFAmjMganNDmW87PDk1PICChl9JTU9PUldaUVlcX6eIYpppc3llfnBtf3qLiXaCiIZ0bJqSdHN8amqdj015hZOJhI5nMXaGc2x+foN0ZmV1f4SEhYBmaWx1a3F/fGhxcXxuko2PfHR+fXFwbnVtgn93eXVqeYmCiImDlpKSkIuNkZSUjpeNgHmIl4iGioaAkIh3a2tvaGVYUVpXWVlbTVBVVllYTklIRUpKSEdCQEdEQ0c9OTk4Ozk6OTw6OTs6OjpAPDk6PDk4Pjc4NzcxNTIzNDUzMzY0NTAzMS8qKispLCwrKykoKycpLCwyMjYsLDQ3NzU0NzhpTzg7NW6SiJqRmZakqK6fsp6nuq+rsrDCsbvDx5qWj5SZi46GeYSQmJSNkIyPhnGHgnSHjIZ5cHJwb29kcGZfVEZJQz88Ozk6P0BBRENFR0lMT1FRUVFSU1RVVlZYWlpZWFZVVFNQS0U4MC9cYLNHOVhQOzk0NDGWuotITE1PT1FWTEFJUUlir7OgcXt4bH1scYOChYF6hIaGeXKhlXR4gHN1lIc1cZ2onY6hoYSihXZxh3yHfHSMro6JgGhnYmpucm1wg3VpcFh1cI6bkndsf3t9bXJucIB7c3ZuYnaDf4aAhZCQioqJkYuRjIuOg3V4io6AfoOAfY97cnBwbGBbXV5cWVhgX1JOW1pYV0xISkZJRz9CQUJIP0NEPTs5Nz07Ojs7OTo5OTs6Pzw4OD06ODs2NjY1MTEyMTI1MzQ3NDUzMS4vLCwrKSopKSoqKikoKikrLzNETTIxNjY2NDM8dlI3PTdikoGSiJaRnqWnn6+VpbSprrGuwbK7wcaWkIyUj4CIfW6BkJKJg4qHj4Z1goRslYiIe3R4eGx3bndjaV5KUEc+QDc0NDk7Ozs9PkBCRUhMTExMTlBRUlRVVldYWlhWVVRTUExFPDUqnUtbQC1nSTk0Lz+Sg6muX0dMTU5QTDdDTVJTREqGdoB8fHZ+bHeIiHx+hYN/jH51opl5foaBhZmEmpxhhqqfnYuDkI56d4l+iYiOc4uXkIR6XWRydHp8d4ptaGpieW+GkIJ6b4F3dIR6cHR5eGtuaV12h32HfIeHjn+KkpeDjYWMhn1xhH+DfXV3e3yJd3BzdGZnYFtbXlRcZl5XUFRYW1VHSktES0c/RkBEQz5BQT07OTc8Ozs9PDo6OTk7Oz0+Nzk+OTk4NTY1MzI0NDAwNDY0NTU1NC0sKSsoJycnJigoKSkoKCsrKy8wMFVxPTIzMzMxRX5XND05XIx4ioCUjJGdnZ+mkaCqoLGor8CxusW6lo6RlId6hXZrf4yRgn2KhI+MeIOAc6CEin18gX9wgH56Z3ZrUldMQEUyMTEzNjc2ODg6PD5BRUdGR0pLTU9RUVNUVVdWVlZUU1BNRkA6Mj0gI5ZjjFs1MzExaT9Hb0lGSUxNT1JMS1RdWVJKaISJe4l5fHF8j4x6fYmHfpeHdqGZiIePkpSljayqSIaur6+LgYCTioKLgoSSqYeAmJiKm3RtfYGGh32OaGdoeX9uhoeChXGEhkdsgHdyeXZobWtfdn2DiH+IhIt5lJ2ciYuIkX96dYt2fHhtb3d9f3R0cmxbXl1bY2NYZ2VcVVBQVllQRExLRk5JQ0ZDQ0BAQ0E9OTg4Ojo6Ozs6ODg4Ojo/PjY7Pjc1OTU3NzMzNDQyMzY2NTY3Njg7REZMTU1MQzcrIiUnKykrKysvMDArbnUyMjQyMEyBXDU9PF6EdHx+iYWIkY6Wl5KXoJ2soaa4r7O9s5eNkouYi310cH+Jkn59jIKSlH2Gfoakh4h/goiFeIeIfnOEeF9jV0tCNjAuLzIzMTIzNjY4Oj0+P0JFR0hKTU5RU1RVVFRWVVNRT0dDPzgwLCOHWz4/OTQuXZZwc6NVRklLTU5QV2BYcFlcXmmNk4eVgISChZGTfoWIkYGalYKhoZiVm5umrZOau7Gnu8fDqIuMoaWPlImBkXxxg56fkZx/doWFi5CIkGlob4OAdY2HhItxhoJ3h397doV9bnZ1ZoCUjoaJiIeIh6CropaJjph/eoKJenlvZ2t4fnp/c2xlXlpbXWpdYWZgWU9LTldSUUlQSkROR0NKREJBRERBPDo4Nz08Ojw6ODg3Nzg6PT04PD02ODc1NjYyMzQ0NDU3Njg2NzxCQj88ODo+Q1FeZVxHMicmLCwtLS4xKD+LWy4zMTBPg180PztudXBmeIN7gIx/gZCOipqbpJ2hrKarr7GXkZGEoZSEeHd/jJR8fpKFkpV/ioCSm46DgIGMioKJjYN/iX9tcGpdQkA0LS0vLy4vMDIyMzQ3Nzg7PT9CREhKTlFSU1JTU1RSUE9IREI8ODcvOUQ+PDw2My5sk5dNUEhKS0tLTlZfY39nZ211nZuPmpKTi42OmoiSj52LoKCSo6qlo6yTqbaiqMHDrseveLqUmnyNoZ6ZhJOFgo+in5OYkoSLhY+akZZscHWJi4KWjI2Pd4+EcW2FgYqWkYOFiHKIoJWGkomOj5aktambjZWig4eTg36Aa2prfICBgnRiXmRfW2drXWxrXldLR09SUU5MTEZJUENETUZBQ0VGQj06OTc9PDo7Ojk4Nzc2Nzs6Nj06Nzg1NDU2MzQ0NTY2NjY4NTU2MzEwLiosLCkoKS46UGFcQCwoLSsrMCwncog3MjQwT4RiM0A8dW5nWXCCcHWGcXaShn6XlpqVnp6cp6CqlpOYnmdlpJp+hJKReX+SiJGSfYqEmJKRgoCAi4yJhpCGhIiFeHh+Z01SPi8uLiwvLi0vMDAwMjEyNDY3Oz9DRU5QUlRQUFFTUU5QSUVEPjs8OkNGPz48NzUyPD9SNUhISExMTU5SXm+KfHOBfaCdnKelopmhl6KUnJ6nnqirn6isqaq2l6u/q7bIyLfJ0c++m6Bwaaupn4STkoWcoZqbmaeRkYmWopqad3p+lJiSoZKWmIGUnnt3lZKrsoiNl599lJ2bjpKVmKOiprawnZGZqIiWj42BiWxzcnx/fXJpYF1hX2FnZGBnZltSRUpLUE9JSUxGRk1DSExGR0RCR0VBOjg1PDw4OTk5NzU2NTg+NzU9ODQ3NDU3NTQ1MzY5NTg6NjE2ODYzLzAuLSosLy4tJyMqO1hiQigqLDEtKEuXXjA2M1GFZjJBQGlhXlBwdWBufWF3jn17lI6Oip+Sl56Wm6qYnqpCRH2HiYeYjXiCjYqOjXyKho+QjoGCgImLioSShYOGiYGAhnZeYlA0NjAtMS8sLjAwLy8uLjAwMTU+QUJNUVJTUVJTVFJOU0xFRUA8Pj1HR0BBQDg2NjI8OTtGSEdJSk5PUVlthZB3lYqjp6q0vbikrqysp6i0q7C2srKtu7GzvZyzw6y7ycu3w7+4paOwsqytqqOLlpiFpqago5eBppmNoquopIiFlKShoKqgpKmPnLGLlaOnt7qboKOwkqKdop6Qo6Grr6yytaKUpKqImYmSipZ6en2Ff2hhaFxlYl1kY15mZ19aT0RJSFNORkhMRkpHRkZIQUtGQ0ZGQTs4Nz08ODg6OTc0NjU4PDU0PDc2OjQ0NjQ0NzM5PDM4PDIwMjU1MS8xLi0qKi8sLSooKiYlNVhYLywwLCwwhIE4NzFQhWg1QUNbWFRMaWNXam9YeoV2gZOFiIKbg5KRjJLayJ2Wc1aXiI+InI98hoyOiop6h4KHkI6DhYGMhYaHkoaChImGiIeHcG5hQEU2NDwyLzExMC0sKy0xLi0zP0RBTVVRUlNVVVZVTltQR0dEPD4+RkhDREA4Ozw1Qzs9RktJR0hST1BXgZKghK6js6qywMfDqrPFtqyzv7O4vra/tMG2u7qjuMWotsnHtb65tKijtK2xsZuakpqfiaevq6WUdp+kl6GssrOYlqqtqK62u7K6rK+1orGssbW7t7WutaCnp6OnmqmvrbK5t7inm7apjKWOkZOghniCg3ZaYmVXZmFhY19gZmBbVElERExVUUhJSkRJR0VBQEBLREJNRzw4Njc7PDk3Ojk4NjU1NTcxMTw4ODk1NDY2NDk3Pj0zODkxLjAxMjExMzAsKiwuLCsrKyooJyopRVowMCovK2iSTzYwUodqNkFGV1FKTFtaUWJjV3l1cYGUfYSGknWFf4GMe7+7o7yCtJSTjZuPhIiPkomIeYaAjJKMh4WBjn+BiY6Gf4aJhYqHkXp4bl1WQEVOPDY6NDZBQjc2NC8vNkNIQ1FcT1FVV1VcVk9eVUlLSkFAPkdLRkVEOz5AN0Q3P0JKSkVGV1RQXo+kraOxtMK2uMHMyba7xL2zs8C3uMG1vq+3dLGzpbrFpLDGubGzsbSopLW2qrGgopaaopKlsK2mraynpJigrLS6oqmyurW7vsy/xcW9vbPCt7q4vre6t7msrLCmsaqtvbC8usLCrJm6qJSuj5eYq4l+gn1rV2RiWWtlamVXW2NZVlNJR0ZMUUdDSElBSEQ+P0JCS0BATUQ5OTY2OTo/Njo5OTY2MjQ2LzE5NTk5MzY0NjI3Oz0/NjoxLi81ODo5NjUwKigsLS0tLCwqKCgrKyhFUy8qMDBKj2s1MlCHbTY/RlJMQUxSV1NZVVp2anB+joSBjYNuenN4h2K5oZmjiZWUlpOUk42QlpKHhnuGgY2VioGEgYp6fIuHhn2Kg4GKg5V9d3l1ZU9cZEdFTDtRY2FbXlNGPztIUEVbY1FSWVhaZ1lUYGBNU1BFQT9JSkhFRkFAQzxFNkI+SEdLTFNaVF6Tr7i1urjJv7q9ycy7vMC8t7W7u7e9tLqxxmB1sqWxmp6rvaqlqKuqo6KytaGrqJ6Vlp+Zn66lp6aln6SUoqextKeys722wb7TycnTx8LFzMLKw8C+vb+7vLe0r7i3tsO5xb3DyLCeuaqhq46kp7aJgYBzYGJiXlhiYGlmUlhgVlJVSUVFTktBPkdEPUtCPUJAPUY+O0hANzk2Mzc5PjQ4OTo1NzA0NS8yNjM4OTM3NDQyNj84QD5HS1JUU1FQT1FRUEpBOS8sLCwqKygoLC0sL1A+KC40OIB9PDJLiHE5PkNLRUBJTVBSS1FdZ2xrcI+NhY9zbHJyc4fVwLWZoI2VmZmRjpeSlpaOhod9hoOMlot/g3+CeHuLg4d8i3mBioKXf3N9emtlcHVZXVxQZWViYGVkXVtYV1xNZW1VUm1tX25fWGdlVVlVSkRCS0pIRkhISEdCSTlEP0hLVFRWXFpbk7nAuL23xsC7ucrKura6tri5sre1tK62tplkdaidrXBeoqycmKCjm6SeqqWUoJ+QlI6WmJeon6WfnpqZg6SdrKWqsK23sL251NHO19DJzNLMz87Kx8C/wsq9wbzBwMTExcq/yM6zpLuwtK+bq7i8mYB6bF5hXVleYVpjY1FcYFNQS0NBRUZFPEBFPkFIQUBEPTpFPj1KPzQ3NTM1Oz00Njg5NzcwMjIvMjQxNjk3NzU1NTVEM0VMTT41MS8wMDY6NDc3QElPSTstJioqKC0uLyxATSsvNTRtiUkwSIl0Pz5CREBDREZLT0RRXFloX2+XkpCUbmxvdXWHs6yhoJ+LmZyZjI2VkZuShYqKfoiHi5CLiHyBhHN7ioOFe4l0gYmGlX9ze3hrbXV7aHJlaWxpZmppaGBmaWhsWm50lq2kvIiHZ1tvaF1aWlRIS05PSktQS1NRSExBSkZLUF9eYmZqYpi3x7C4s7u9tbHExrWwubCwu6uysaeqt6yNtaedm6eaT5qdjI6flpGmmKWVipOTiZCJj5GRnpuhl5qVloaemqebrK+osKi0tNTU1NbSy9DU1c3Tz83FwsnQvsrJysnRx8zNw9DSuLDDvMS5pba6w6KDcGRdXV5ZYFhZZlpRXVdPUEJCR0RCSDtBQz5BRz8/QTg7RD5ASD00NjY1NTs6Njg3NjU0LzEwMTQ2Mjc4ODc1MzY3QzVCOD8tMC0xMzQ5PTk3LC4sMTtGSz0pLCguMDAwN0s/LTQ2VIhXMESHd0M7Qj5FQkFDSk0/VVlTZVZzkJCYgmhxb3l5g6CqnqWWjJubl4uNlZGajn2Ji4WNioqKkId8hIJwf4iBhnuHcoORi499cXh1a3F4fnF7bnhzbGmBcG1jaW1weGl3fH7Lv8Lfp25jd29jW2FgSlBSVU5ZXlBdXE5QTlRRVVRbbm12gnGWrbiss6ewtqqsvMCwq7WmpLimq66gq7SjjrGtmpiYjJGTkYSOm4GNppGciYOLhIqJhIuDk5WXlpOckZyYmZmfnquspKeirK3P0tXRzczS09PQ1NHOyMPU0cfN0tPT183R0cXS1sXAzsfHw6i+t8+eem9mXmNeV2BTXVpQUVVQTkg+QEZBQkU8QEI/RUQ+Pz86PT08PEpBNDU0NjU8ODg4NjY0NDEyLzAzNTI2NzY4NTMzOz08RT1AMTErLzI0OT41OTAxMDIyLTJETjMpLzMuMzI9TjIzOEN9XzJBhnREOj09ST5AQ0ZIPFZSTU5bdYaFindsd3B9fn+hnp6hi4yZk5OMi5OPloR5hZCQjYuKiJGHf4J7cn6AgYd5hHWFkpGJf292cmtzfHx3e3OBd3FrgHNyaXBxenlyer7Lmn6MsoR2coR3aGFqXUNaWltWZWNYZGpTWF1cYGReY3d6fouBmamkpKGfoKilqrC4qqW0o6GtoaOtoaexn4mmmpOSkYmRj4iBlIlqlaKMmYSAhX2Rg4OTlq2LlY2Vmo6GkpGel6ewoaChpaSoyM7PyMLL0dTR1NPO083G1tPM1NjW1tjV19XJ1NrNydfX0cqsw8PMjHNwY2FgWFRaVFxQS0dKSkpAOzo7REFEPEJDPkhCPkJCOzw5PDpHQjQ2NTQ0PDU2ODc1NDMyNTAvMjU0Njc0NTU0NDw+PUU/QTYyLy0xNjs9MDgxLzI1NC8tLTtSMDE3LzUzMkZEMjg+bmI1PYF0TTk5QEk8QUQ/QTtQTEZLWXCAdX1oc3hygomAnZWdlIWLlomPioiOh49/d4OUmIqNiIiLiX6CeHN7fYOId396h5GWgINueHBtdX92eH10hXx5bYd2dG59doR1eHydtYw7QYvFpX6MfGllVklDZmNlY2dqZG54W19maGtuaW6Ag4iRi52eoJ2Ql5ifo6SmsqOks6ChpZ2gqaCisZyGnpKSkpCLj4uGg4+EfpybjI2DhIV6lH6CqZWjjJKKl5KLfZeKm5Krs5ianKicp73Dxrm2xs3S0NLQzNLLydTO0dXa19fY1NnYzdjbzsna2tLVvsvMtHl3b2VeWlNWUltXRkdKSUVFPTo3OkBBQjpHREBFQ0FEQjs/Ozs3REM3NTY1NTswNjg5NDQzMzQxMDE0NTU4NzQ0NDQ5QD5EQkM8MzMuNkZUV09RSkFKRj8xKiguQlMzOTI1NC83Szc1PGBiQTxzdlY4N0FIOj9DPjw5UUVDSlRrbm5wYnBxdIaNfJeRnYt+h5KDiYaFiYKHfHiFl5eJj4OHhYd6hHlxenuEhnV6hY6NnHqMcHxvb3p/cXyBcYOHgG6OenV3fXyCdX97hoewdFipwraNkYJwbmI9XmhycHFwbnh2gWVpb3J1eHF6i4eOk5GblaCVh4yTm6Cbn6qfoK2coZqZn6Wen6uZi5qMkJGNhH2Ih4OFi46gmZOIhId+bZl5hJiGiJOMjZSMhnubiJSPrqqUlZefmaeutb2prb3Gy8jJzMvPycPRytTX2dfY19Xb19PZ29bP29rR1snUy5V6fGppXFtQU1ReSENFSUg+QT09Nzo9Pzs9Rz0/QUFBREE+Pjo4NkRCNzU1NDc5LjU2NjQzNTUzMjMyMzY0NzU1MzQ1N0VCRENFQjU2PEZOU01bbmZjbnNrYVY+LDRMRzg2NTQzNEJGND1XX2hMdXheODs/Rjw8Qjw6OkQ/Q0dSa19tZGJma3aAiHGRkJqAeoCNfoKCgYR/hHx8hJiOh4t+hoaAd4J5b3t7hoF1epKejaB2jnWCdHWBfXSAhG+Bj4FvkoR0fICFenaGe4m3xqXCybiClpuPd3BlTmZjgXqBd4aikIp4eXZ7g397hHVtk5aUlY+XkIOJj5eal5alnJegl5+SkpejnZmrlZCRio2RgoyFiYiBhpCRnpyZiYaMgYaYeoiIn5ePiI2KjIJ8oYmQi7yhmJOXmpyppqWun6i2v8DAucfJzc7FzcrR1tXV2dXX29TW2drb19va2tjO3MaHfHpoaWVgVFhWVU1MRE5DOz09PDk6PD45PUA2PT9APD8+PDk4NjdDQTY0NTU9ODA2NjU1NDc3NDU2MTM4NTQ1NjQ1NjdISD1ESkU3OTI1O0g+Ozo6N0lQXVpSVVhLOVQ+Ozk1MzI3STg9TllNSHh4ZDU9PkM9PUA6Njo+PkBFUV9ZZWFdW2h0enlsiY2Sd3Z6int+gH6AfIV7foGRiYWFeoSHe3V9dG18fYZ+c36SnZGeg5F8hn54jn15iopugpqAdJiFfYGIhXt9kHqPqY6Pw6C8jJyknH2JhH2JcoyKfnOmmpyYk4V7j5CIhGhHcKCknYyLkJKFiYuQkpWPnJqSlJGWjYuVn52UoJSRjo2Qi36Qjo6LhImSlpqfn4mMlJKdkYKLf6WZiISNg4WEgaWHi4u4mJ2RlJaip6Gdnp2jr7a6tazAxcrQyMfMz9PS0tjS1dfA19jZ29ja2tnZ19u4eXl5bWpmV2BcVFBPSENMQj09Pjk5Ojo5OTs9Nj8+Pjw9OTo7OzM3RD84Mzc4PjcwNjg4MzU3PDM3ODA0OTc2NzU1NTQ2RlA1RE5JODkzOEFLPTszQ0BJPDlEV048TVRITj85NjMzMz5DO1tYPjVZeXBaPDxBPD0+ODU4OT89RFJTUlheVVhmbW1taYGOinFyeYp7en98f3uIenx7i4eCfnWDhXlzenNtgH6EfXeFm6GanZSSgIyIf5iHgJuSboeohXqgi3yRjoKIg5x9mpGKjKOin5Ckr6CLkYuFi4GShldyrYufq5uPg5ibj4+OW4KikYKMn5OVjIeIjJKSjJSUlI+Mj4qHlpudj5WWkYuSk4WAi4iSjYqKnZaZoqKGk52WoIqJiI2ckIOIj3+Dh4WkhoyQs5idkpSXoaGemZKcnaeyuKymvcLHzsfGz8zQzM7X0NHUrtbV2NrY2trX1tnZn3F+dWhnXl1YVFdYQ0BIQz4+Pjo0OTo7Nzo7OjM7Oz88Pjc7OToxOkg+OjM3PUA1MDY3NzI1NT82NTs1NTg1ODo1NzczNUhSN0dPSzk5ND1FSkI+MUZDTEI5ODpHWEA1SFdJNjYyMjM6RUNlWD8mX3lpX3o+Pjk8Ozk4OjtAO0JRS0tTWVBUY2J5bWJ+koNvbXeLeHl/eoF9hnt7d4aEf3NwhYJ6dXZ2dISDhX1/kqajn6WiloqdkJSXi4qol3KKsYyEp5GEmZOFmYyilqCYk4mbnqKSqa+gkZWQjY6IlYtujbeFmsTIspuhpZucmJaQspBkpM3Hlo+Gh4mPko6Nk5SJhYqJhZaam4+QlJOGlJeDf4+LmYiNkKqXl6OjiJmfl5uIj4eXl4qEjoyBf4ePpYmNk6mal5OWmaGZn5mTnZuis7Slo7zBvsjFxcnIycLK083N1KnS0dbW1tja1NPazoN0gWlkX15eTktUWkJBR0M7QT04Mzc7PDo4PjY0OTo8OjgyPzk6MjpJOj02N0JDMzI6OTYyNjQ+PTQ7PjY5NDk7NTc5NDRLUTxKUUs5QTdCR0lANjRKRUxGPjw4OEVUQTc+XDg2MjE0OjtFYFhBRmF0aExjWj41Ozo6NTs6PTpFTUZIUldTUkJjgUZ1go58fGx9iHh6fnqBgYJ+dnaAg3xsb4t/eXx4eHyEh4t9iqOzqKOrs6GWp6ClpJaVrqKDkLeVkrOZjaGgjKSbr6KknZiQp5aoma2vpJeVlpSQi5iZlqDAjqPJuKuboqatmZGanLKdhoWoopyYhYiJjpWNi5OOiIGGh4iSmJSMi5OThpSYhoORkJx0kZmylpekoYicmpSPipCLl5qJipaOhn2MmJ+KkJCcmpmTmJiflKCdlZ+bobGuo6S3vrTFx8S9w8O/xs7KydKnzs3T0tDW2NLP2Ltze3deYVZhV1FJSU9FQUJFNT46NzY6Pzs8Nz00MjY2OTc3ND01PDU8TDw+OzxCQTc1PDs0Mjc3P0A2P0A3ODQ5ODc7PDU1T01EUFJMOEA9RUFHQTU6SkVORUQ6NkFAQlM+OURPMzIzNTc1PXZcPFJcdGlaTV1TPD04OTU2Nz06SkZER05bXFlKZ2A7SISLenpthYZ6fIR4gIWAfXB4fH18b3ONen2Be3iGi4mFg5Knu62osr2vpa6zs6ijorCsipq0naO4pJWspJaprbempKOfmamYqqOvsKqamZyUlZGXn5eZu7utyaBptrirsJSYnqOrkpe9o16qsoKJio2Uh5F8jo59g4aNj5SViIeSlouQlY2KjJeYkp2Zs5aVqp6Lm5SSjZCSjJmbipKekIuJlZ+ijZWNmJqdk5yZnpShoJScnKWvqKKls7irwsjEtbu9u8XIx8LRocbJzc3E1tbQy9SicXxqXltUX1JQR0Q+PENBQjg/ODc0PkY8PDY8MzUzNDU0NTNCMzo6Qk06QTtBSEI7OkA8NzQ2PEI5P0BCODc0Ojk2Pj00N1RLQ1VRSjc8OklBREA0QUpITkJBPzZEQTxKTkQvVD0yNTQ6RUpcWEpaUW1ncHBEaWBLSTY3NTc6PkpAQ0lQZUdiYGNwSkCLin+BcoaHfYGJdYKKg39tfX18f3B3h3eOgoZ7jY+Mhoyaq8LAr73Gu7K0wby0rauztoyosq6uvaqbu6Sorbm3q6amoqKjo6mvsrGrnZykmJuYl56ipaWSo7muqL+7rK2yuaWjpn2IhpytvbCDi4yLkIOPg5GPeoGHkI2OnIiIj5eNi5WXlJGalp2nmrGakaudjpqPko6VkJCWl4+RoJGJlZujrJSWj5ScnpSgnpuYoKGVmp6np6ShpLCypsHGw7CwurbFxMK+zafHw8fDvNXQzcTKiHRzY11bYVtOS0JMQEVGPkE/Qjs6ND5BPT01PDY+MzMzMjQyQTE3QEJOPkdAQ05DQT1DPTs4NkNDNUJJQjo4Nzg7NUI+NzlWS0RXT0Y4PTRLQEM+NEVLSE4+QUE2QkI/QlNFNThQMTQ1Ozw4O0Q+OUxqal07V1JkS2daVU83OUdFP0NGXGZGYGlnWl1bk4yMiHuHi4eDjHWGkIqBb358gn9xfoF6lXqRlJSYkJOWp7TGyb/CzMHDuci8uq+rubuXsra6ssCupcCkqq+7u6qtq6Kinqerr7WwqpugqpyinJWesLSni6K6ubXBu6uonLKko6iThY2pw8SkgouPh4iEhpWUjXqDjJGPkaGMjJSRj4mXn5iTmZSXpqCunYyqnI6Wj5KRlZWOkJWRj6GUhpefoLOelJqUoKGZpJ+aoJuglJiepqSmp6SvraXAxMKuqbe1ycO+ts6yxb7EvLPRycjBtXV5bV1ZXWtTTUlDTEtLSUBBPUNEPDVBRDs6Mz04QjMzMjI2MkEwNUlFTT5JQEhSQEg+Q0A7Pj1GQTVBVUA7OTk4PDdFPjg+VkpDV09HOD80TEBCOzVKS0NMP0I/PEJGPUFITDkrRzwzNjc0NjRBPzdPYU9hRS89PjZrbGpgQDpIPj9FQmZbTWVcZlRjapmNl4qLiJOQhol5hpOQgXKAfI1/eIeCgpB6jaGWqJmamLq+x8jKwtLJysLNvcGzrLu+p7q/vbvDuKzBqayzu72qsKqjpaOrrrSttrWgn66fpqKYo7S9qZuovMGjtravq5KvrKqrloaZqaalkYKMk6WViYF1ipJ5hY2RkJ6fk4+Ui5CNlKOZl5uUlKOeqZ+RpZqMj4+QlZaIfY+VkpKjm5Wgopy1ppCflqWko6WenqaYnpWXm6WjqaiisqyovMDEr6Wzt8zAua7Ds7u+wriswsLBwJluemJZWF1cTExNSkdEQ0hCQkFDSzo0REg5OzQ8N0UuMTIzNTJCMjZTSE48SkJKUUVLQ0RFOkVMQjw3RVY9Oz04OT88ST86RVVJQVdRRjdBOks6Qjc5Sk1CSUBDPjxERzxCQ089MjBIMzY2MTcwPUI6PWpqSks1UVMzU3BwZE47RD1ARj5rSV9YYVpkZFaekJ2Ol46ekomKf4ifk4R4hX+Vfn+QiIqRgJWhmq6mpJjDvsjDyMXTzc7Ny7vCt6+6vbS8yrzDwba2vK2zv7m8rq+ooKmntq2uqbK3mp6toqihnau3uKmlr77Dsb25s6eps7OsrZaWpKunoJGOkrHFp5WOfJGVfYeRmY+qmZiTk4+TlZOlnpOdmZOho6KcmJ+Zi42Pj56IWpCXl5KWpZpmmKOfs6WWopasraunm5+ml5mWmZWhpKimnrarqbq8xLWltLbLwbiptqyzu7iuqLi6vbiDbm9bWFVWT0ZLU05LP0FIRURIRkc5NUZNOz43PkFKLjMyMDI1QjU1T1ZOO0xGS1JMT0dHST5JUT86OElTOzs/Nzk+RExCQEhTS0BXUEY6QT9HNkE3O0hNQ0U7Qz00RkU6QkFCRzkvOkEzNjAzPkdEOTQ9dGRNRztFKzpmfGhXOz1AQkZCckZpSVJlYkxGppSclqGXqZaNkIOHpZKIgYeCnISDlZCRlI6aop+vvq6hx73FxMfGzs7O0sq+u7axuru8vs62xL23uLeysrWzt7Osppyrq7irqaevsJejr6SopKW0wLCqrLO+wrnAubOnt7O3sq6VpKyurqSLk5WhjXTBmn2WmYSOlpqLsZWamZWSk5mZpqOVoJuWmqicm6GgmYuNj5adYEqWnJqUmqWXVJawn6+cn6WUr6+spZqhpZSTmZmOnaCnopm0qaqzvLy7q7Cyx8C5paurrbGxo6GysrSkcW9mXFtPUUxFUFBRUTtIS0lGSEJDPjlLVD9BOj1FTTA3NTQ0OkIzNE5XTzxKS05VTlFKUEhISk9CPD5NUjs+PTg6PENSPkRIUklCV05JQENBRjM+NThKS0NBPUM7NEVBOkE/PkhANSpCNTIsPmNdZzozNXRkZUBSNyYjM31pWDs6QkNAPVFFV1JzYldGSKuXmaCiqK+ZkJeHi6eWjoiShZ+IhJ2Xj56gmqOktci0qca7w8PIysnHzM7Hvrqyrrm4wMHNtci6wLm1ubGvr7K0p6ObqrS0q6mmrqyZpK6lpamsur+oq7a2vsG/vriyssKwuLyro660rLiliJuXppt2vqCEmJyOk5mai6+WoZybl5Wbn6GpnqigmZqpmaGnnpeQjZGdg252kqKalZ2in5CtsqOrlamqmKuupaSgpKiSkpmciJScop6Xsaepq7q3vrOyrb25tqCjp6ilp5ycrKmpjGVmYV9STE1HR05KVkw9TURNSUpBQ0Q8UFU8QUFCRE8xOD03Nz9CNzVVWE4/SE5RWFJQUVRKUUpKRUFFTVE/Pz04PTtHUjxFRFFCR1lNS0FIREU6OjM5S0lCPkNCOTlDPjxAPjs7RzctMj4tMYJoTnpcLzBraGA8PUJCODZ6Zlc7Oj0uLlNhTVVIf2VeSEWslZyhn7uumZSejJOqm5GSk4mrjYeinoykrZSjo7bGvbTBusLCyMjFws7Iwr25sq+4tMDCyrbGscG8tLqrqK2sr6Oimaq0u6appquqnaivp6Srqr28qK28s7e9xry2tbfAr72/s6i0tqu+pI+jl5Gin7yfiZmgmZaenY+3n6mcpaObnKGaqKWzoZudpZyoqZ6ZlY+Um4uXiY2koZSco56gtK+lpZOwq5mrrJ6epKOpkZWVoIOQnp+clamloqG0tLq1rai1srOfnKKmmpeVmaqhnndhXmBeSklGSE1RSU5FRkZCUktJQURHQVZSREg9QUdRMTtCNzpCRjc5XFlLQUxQVFVTTVdSTlVKREBKSk5POUM/NT08TlFDPz9QP0VaTUpBS0RHQDUzPUlHPz1FQTk3QTs8QDw8M0A8Lyc7KkiRQjpTSjAsW29XNzE8Kh1CgGRUNDktMTpnXEZDQ5xvYkdFp5ekn5/DrJyXpJeZqZyWmpqPqpaWqKaVra2Zoau2xMK7vrfBw8DHxL7Nx7u+ubKwuLO/w8i1v6+8trq3pqSqq6ygoJqqq8Sipairpp6rr6uiqai+uKatvbC3tse2tbm4vrC+wba0srSvvaOXo5aTm5Sun5ChoqWjo5+QvqWpnaisnZ2hm6afvaKZo56iqauhnZeNlZ6Tn4ePhY2SnqSgnbWsppyVsqeZsKefmqqeoI2ZlZ+EjqGam5OlpJqYrLG2sqqlqa2snJmgoZKOkJapn5RpZFphXU9KSEtPTUhFRElBPU9IQTtHSUhbUk9LPUhPVTRCRjk+SEc1Q2JbS0NOUlVXVlFYVFJVSEA4UVFQTTpHQDRDSFFTSUM7Qz5HVktDQE8+SzwwNjtHRj47RkE1Nj85Oj85OzE1RDAtLDBNdlw0S1o1LE1uVzwtPSkeI3piUTVDS1E5b1JGPEt4ZWNXTKKao5uexayhn6ydnK6fkqOelqSgp6qsl7awo6qztsTCvb+2wMK8yMK+ysi2uLW0sLO0t8HGtr6wuLS5tZ+mrKqrnZ6fpaTBpaCpraCkqa2voqanvbWlsby3tbXDsrO3ub6xw8C3t62ztLWinKSVkZOgraCYoZ2oqauimsOtqZ6srpubnpmmoL6hnaSYq6urpqGZjZqfkp6Jjlh/lZ6loaC4qqeTmLajn7OhoJuvl56OmZSdgo+fl5aOoqSVkKausqupoqKlpZaVnZmLj5GTpJ+JY2VbZGBMSUpLT0ZFQUZKPz1KQjk5SktOXVFRST1MV1w5Rkk9RE1JOEhjXExDTFBTWVlWV09aXklBPVdRSUs/SEA1SE1YU0hBOkBBRFBIPz5RPks3MDk5RkU7OEc/LjY+Nzg+NzcvMT85MSUxUVVtW0pPMTA9Z1dEMTc9LSt3YFM2U1prV3NIRTY9dWVcS06en6GYnsOnpaKzoJyyp5OqpJ+jn62prJ27sKmstbLHw8HCs8LEvcbEvMXKvLCwtq6wta+/xbW5sLC6tayaqLCpqZqepqGnwq2brLCcqqKusKmkp723pra6vK62w62zs8K/scazurartLWtqqKllZWUo6uhnp+aqKuwrq+7sqagqamZmZeToqS5oKGkkq6vrKWmn5KhnpWej5GOlZ2Zo5+ntKanjZi0nKOvmp6brpGelJeUmoCSoZWPjqChk4umrLClp6KcoJ6TkpuUhYuSjZyegGNmW2hlS0lMSlNCQ0BIRzs7Rj85OU5NVV5SU0o+T15ePUhQQkxMSTlOZF1MRUxSVFlbU1VPXGJIQT9aUUFIQUtCN0ZFTEtOPjtCSEROQj07TkBBMy85N0NCOTdGOys2PDQ2PDM1LS80QDErJ1Z0U2VPPzEwNGJbTTIzPjA8dl1eP1tVXmZyQDg8SJZ3ZUE0n6Sfm6DCqKOqsqGjtamWsqumoqWyrK6pu7KtsLW0xr/ExLXAxb7KxLbAyMK1q7WosLiswMS0t66strmlmauyq6qXn6aXrbu1m6iwm62frrSxp6q6sqe5s7eyuMCqt7LCvLPFp76urbe0qaesoZeWkaWkoqKXmKSuuK2xtbagn6ikmZSVk6Sgt6KkpZatsbKlqqahnpqam5aYqJ+fmKKer7Kipo2XrpmlrJeZnqWRm46UmJqFlp+UjJCcnpSLqamqoqehmZ6WjI+ZkIGGlomUn3llaV1saU5QTU5UPUNBTUM6OklANzdRT11eUlZRQVdgXEJKU0hWS0g6VWRdTkZPTltXW1JQUVhdR0FCW1BCRz5OQzlIR0hOUD8/Q0lCTEI8MklBOTQxNzdCPjs3RTcrNjkxNDgwMi0vLjw2LSNCcWdzazIzLzFbYlozMzgwNnBbYkgwNUpwaVZDV0aMeWZDO6SjnaGmv6anr6+gqbWrnbmvq6SqtLexsLm3sLe4uMW9w8e9vMTBx8C5wcbBuqq2pa27rcHDt7iqrbK7opWtsK2ylqWnkau5qqCnsJ2qn7C0sqqptrWsu6yysrm3rLmwwrq9vqbCqrC3r6mqq6admJiqoaGgkZigsK6zq7C5mpupn5mWkpemoLappaKir7Gzq7Gnq5+boKCbnqWcoZedo7Owmp+Qk6WaoamalaKflpiJlJiTlpedk4iQm5mUjqmop5+jnJibk4eOmYt+jZaFj5traW1hbW5YUVFaVUFDRVRAOztIQTc6WFBkXlBWV0RZXl5NTFJOXktKPlpkXk5IUE5bVVlQS1NXWkk/RFhQREY+Tj89SUdHUVBCPUNGQk0/OjJEPzc3NTQ3Pz05NUU0Kzc1LzI1MS4tLiwxPionKz1ccD0+MS4xZVtkQDE2NDdnWWBGKD84bH1oW1Y6iXtjQz2on5yhqb2hqrCqo7G4qaW1squhrbW9r7O4vLq9t7bBwr/JxLnFw8DAuMS+wbivtqirt7K8v7+0qa6xt5+Xq62orZenqY+nu5+lrbOeq6KxsLOsqbaztbytr7G1rLC1scC6xLarvK6xuKusqaKxpZ6kqZ+jl5CZn7Kqs6mqs5mdp5uZlI2gpqS0rqehrKytsaeyrLKppJufqKSelKGYm6i1qZeZkpKfmZ6hnpCsn5iYhpWYi52anJOKjZaXmpempaOgnZaVlpSBj5WFe4+Sg4yXZmxzaHByX0dZZlZEQ05YRFo5SEI2Pl1RaFxOWV1HW15dTk1SWGRKSkNcY2BQS01OWFdYUEpWVldMPUVVSkVEQU0/QUZISFFQQTtGREZLPTg3Qj02ODcxOT48NjVEMCs4MC8wNS8qLC8tKj0sKyUyKyo1SzEuJ19eYVUxNTA9YFZeOClDM1lVXGdLNYx6ZkxApJqgpKy3pKyppa6utqmus7mmp7G4xrext77BwrW0usW+zMW5w8C6v7rEuMG5srWsqrq3urq+taqtsbaZmKerqqubrKuPq72eq66xo6qfsK2zrq62sbm2qa2usKe2sLO7vMmyqrW0sbSvrqahs5+aqK2gpZWVmpmxo62gpa+WoaSZmZKNoqWnsqmhprGrqbWlrrC1r6OZna2nmpeemZmsuKOYlJGPmJyhmJeUrJ+dlIGTmY2enZqWkIqUk56apaOioJmWkpKWe4uQhXuMi4OMk2tueG51fGFGYGpZSUhaWz17SkdFNkFiVGlaTVxhSltdWlJSUmJgTEtFX2FgUExJUFdWVU9HV1ZVTjpJVklIP0NLP0VESEhRTkE/SEhIRTw3PT46NzU2MDk/ODY2QiwtOCwvMDQsKCwvLSo3NikoOS4kOks1LiJUYFZhLjUoQ15RXC4qQi9KR1BbSDNjWVVLRJmXoLCosamspaOurrWpt7S4o6y0t8q7tLu6v760tLfDwc3Hu8O9t76/wLi/vbG9rqe6ube3wresrbG5lZemrquno7KplK+6pK2ysaenorKzsLKwtLG3sqiuq7GmuK+1s8PFtqm0tauwramnorafnqaxoKSUm5mUsZ6nm5+pjaminZuVl6WlpbenorGzq6exp6ywtaykmaGsqJucnZuUqrmclY6Oi5mdopiQl6ahn5aEkpeQnZyYlpaIl5CXm6idpKCSlpGQlnaEkId8hYKEjYxucXh2fH9dS2VsXEtPY1w/YntHSThHZ1dlW0xeYk1YWVdUWFRpXVBPSGFeX1BKSFFWVVJLSFdVVk04TVpORUBGSz9IQkNLU00/P0xPSEA7Oj47NjswNDE8PTQ1OD8pMDcpMS4yKSksLC0rLTkkMDQyJTlCNy4jQU5JZzI3J0ZhTFYlLUIuPUVNUTwzcmtKREORmaStpK2tq6eksLKzqrewtp+rtbnJua7Bu8K3s7K1wsPPxMDBvrW9wL+6v72zxKiqubC2t8C9r6yzs5ygp7CtpaawpZ6ytayrsrCsqai0uay0srWss6yprKisqbmusbDHvrilua+pra2mqK2wpaOjrqOpnJ2cmq+ZoqOio5CsnqOfn6Gqpqa4pau0tKSpq6irr7auop2jqKqboJqakqS0mo+JjYiSo6CVjZSdoJSThY6Uk52bmJaVh5iSlZmnnKCfjZKRjpF3fo6FfXx9h4qKcXRyfn1+XFJkb15OWmZdRkSWW0c6Tm1YYVtNYGFOVldWV1RZZ15RUkxjWltUS0dPVFNOR0lWU1xOO1BeSkJESEpBRT8/S1NPPjpOTUM8PD45OjU9KzMyPTYyNDk6KDQ1KS8sMSgpKywtKiY1Ki8mMCkzODoxJiozQ2Q7NipIZEhKKzpJPzNCSVMsPo9rPUdIj5upqqKpr6SopLO0sbS1sbGhrK29zLquwbzHsbSttMLD0cXGvsCyvsHCvL+4vMWorbess7i8wbCssq2gpKetqaiksKOqsaqvq7Gur62rs7unt7GyqbKpq6Wlo626rKqxwrm0rLqoqKitqaixpamkoq6qqKKem6KslaSdl56Yq52hp6mhrKWirKu3sbGgqKKfqq6wrJ2epqepmaOYmY+gp5iGg46Ki5+gj4uMlpyPj4aIkZWgnZaYlYaWk5OXpZydnIyRkI2Kf3+IhX13f4eFh3Rzcol2bF9ZYG5jUXNyXEs8hHxGP1d1WGBZTmNcTlVWVVdQXGJeU09OZ1hXVktHTE5SSEVJVlJdYzxQXUQ8RkhIQkc/PUpQTDo+T0o9OT89Mjo3OyozNT4xMDQ4NSg1LyosLjMwOyksLCclMjM0JCwyLTg2MCkoMTxeSjAuSWdERjg8QjA1RUtYMUCUWz9NRpWXrKeiqrKcqamwtqy4ta6qpaurvcm8sb63w6+xrbPExM7Ow7+/tMDDxLrAtMnErK+3rrK5wL+zrq6rpaeqsKmnqLGltK2qsK6tsa+zrLO7pLi0rKyup6ufo56wt6uqrbq2pLa1pKmnrKyqraGopqaxsqSmpaGhq5apoJSaoKaepKKqpKyinqaxt6ytoqSimqiqramcoaWkpJmgmZWPmJ2UgYKQiIWdoI2LjoyZj5CLhI2YpJySkZuMk5KSlKOam5qLjouLfIeBgoN7dICEgn50eIykh3lrXmBuZ1dmh2ROQGeSTERieVdiWFJlVU1WVVZUT1xdYVVLTmlXVlZJSkhJT0JHSVNRWW9BTVhAOkpHRkVHPj5FUUg4Q0tFODdDNzI6OjoqNDk/Li80NjMpNCsqLCsuIzQuLSsmKCs3OSomNis8LTIsJjA2V1ouMEpnQUE8PEMrOkpPXjREhkBISESXkq+ko6qwl6qprbWrtrGrpKuqqbzBwLi5s7y1prOvxMnL0b7Bu7nAv8K5wbrCxK6xtbKzu8G+s7Kurausp7aqpa2vq7mvqLCwrrGrtaq2tae1tquspKmqnKOds7OoqKS0tKC2rqGpqKuorKegq6youbapqqmpoamfrZuRqKGdoKSipqKpnZymtK6npamio5ekpqapnKKko5+ZmZ+Rjo+Zjn6HjYeFnp6IhYqLj46QjYSGlaOajo2bkZKRj5Kfl5mWjYqDf3SHgX9/eHWDf3t4foCJno9vcWdncXhcYXSIaU9dmFZIbXhVZFZRYk9MVVRVUU9YW2JWSFBqVFdUR1BZVUk+SUhPUVB4TE5WPTxLRD9AQTxAQ1VDOUFLPTU7RTEzOzk3KjQ6PSstMzQxKjgqKisqLCkqKC8qJiklMzssJDIpMjAyMSYvMlJjMDI/Zj1OWD9DLD5MVF8vSWs2UUU7lY2voKWqrZmrpK2vs7SuqqWvqam6vrvBsa+4rqK2r8nHyNHAv726vMO+usPBwL+vsrOytb28wbKys6uzqaW1qKSts7O5r6OttbGvsbmquK6qrrarqp6qq5+joLatqaGfr7OhtKqeqKeqo6qhoaytqL2vrK6soaenn6uYj6+imKKgqKeep5uZqrCoop+soaGSoaKjppiaqKaXl5idj4qHlYh9jYaFhKSXhYKCjIePjpGEhZShl4iRnZCTkY2RnZWXj4qFhnh0gX99dXl6gHt0dHtqgoejdWleZWyCdWeIi3xSV3BeSnhzU2RTUV5NTVJaZ05MVlllWEdTaVJRPkJOUWFROklITFNJcVBMUzs8ST87PD07QEBXPDw+SDczQ0IxNTo5My01OjopLTMxLS02KSgrLSw1MiMyKScsJS47LiYxLjAtMTQlLDBMaDozOF89YWQ/RjFDUFtbK0hPOldCNJCOsZ+kpqujpqSsprSzsKmjsKequL7AvLCouaqnrrDJxsjQwr3Avrm+v7zJvMK5sLC1srq8ucCztLutua2jtaanrLG2ubKnp7q1rbW8r7ylra21q62cqa+jn6Wsq6ecnqqzpLOomqqnqaSpnaOpqKm9rLSvrp2po6Cum5qyo5akm6Sln6SamqiqpZ6aqaGbkZqgpZ2YlqmpkZiZk5CKgo+FfY+CgIiej4Z/foyHkY+QhICTm5SFk6KMlJGLkZuTlYeJfoByenl+fGl3fHp1cHF+aYZ5hIhkYGhjc4V6bWd5XV5VQld6bFRhUFJZS0tNcHRdSFpbZ1lFVmZQQz5LTkRDQTlIR0tTP2phSVE4PUg8PDw+Ojw/VDY6P0M0NUg+Mjs1OTAyNzw1KC41Ly0xMSYvPktJMSUaOTAlLCwwOS8sLCs2JzE3Iy0vR2pJMTRYPWZiQUo3R1NgVSo9PEZbQCqPk7GZn5+opaShq6S3srKkqLCnrLjBvbWwo7msqKiww8nJzMG3vcC1t7+6yLbDtbSztbK9ubq9tq25tr+torOmq6uvtbi0qp26u6iyv7K6oK+0tqmsnq2wopylqKmjnpyksaawoJ+qqaeiqpujqKCtvKiusK6hq6Kjrp6erKaXn5uho5yfm5qjqaKamaOjlZaTn6GWm5amrIuekZCRjIKLgH+OgXualI2JfH+LhpCPjImFkpiRh5SjipKSh5CakJOBiHx5bH12eXhie3pycHBzeGqCdGqDZ2RoYW9zjm1ianBgb0FceGtVXk5QUUpJTFNaV01cXm1XRFdgT15QSE1ERjs3SEVLTzxyaEpLOUFFOzs9PTs7PUo0OUI8MztHPDQ/MTgtNzg7MigwOS8sNS4uPS0qTD4qHTQ5JicuMzQuMCsvNCYsOiQ0MEFoWjEzUz1lX0RMNktWZE8pPTNRXD0jkpirmJ+Xp6Sin6ikuK+uoq+vqau4wrqyrZ+4r6uotLrHyse/t8K+sLS+t8S2w7KvurKzwLW7vripubi+q6S1p6iqsK25sKmZubyjrr+0tKGuuLWnpqews6CfpKanoaWZn62oqZ6gqq+noKaXo6mgsLifpLGvoauhrKSbpqapmpqbnqOVnJyanammlpqep5GXkpidk5mVoaqQmomNkId9h36CjXx8oYyNiXmDjIWKjI2FiJOajomVn4iRlYKLl42QfYV7c3B8cXN0YHl4am9wcXBqf3NjemxpZmRhZoaAYFtyanFMTX9pWFpNUExKSFBSUUlNW19vVERYWlJnT0hLRUY1NkhCTEk1WmVKQDZFQjk6Pj0+OjpDNTk+OjNARjwyQDIzLzo7ODMmMjwwLDg1QiopLUMqLDQ7Tk5AOzczLS4rLTcqKjwlNTM9ZmQyNE0/ZV1GTz1SWmdIKj8wXFo1KJacpZiclq2gn6GkobersKO0tKmoucW2sq6gt6ytrLC1xcfAt7/CurG1vbe/u7+vrL6wtL+yvcO5qbu7uKeotainq7Css7Cmmby2pKu7ta6fsbiwqaWnr7KboaSgo6ShlpywpqGfoqevoqCik6Olorewoaaxq5+soq6YnKqkqJ6Xmp2kk5qcmp2lqZmcm6SUlJeUnI6Tl6KpoZCJi4+GeoR9hIp5jpeKjYd6goiEiIyOhY2UmYyOlpmKj5d+hpeLj3qAenBxdm9vdF94d2VtbGxqaYRuZnJpbGZpXWRzgWBba3VpWkl9XVtYT09LSEdSVUYyOV1ebVBEV1ZZZU1ISUVFMDdGP0tCNklKSDs2Rjk0OT49PDk4QDg7ODo3QEk+ODw0LTM8PDc1KDU+MSw7QTEoKzY8IjhSPSoxMTM+RDUsLSc0Mio7KzEzOWRtODRHQWZbSFREVV1oRC48MmNWLDKVoqGXlJuqnaShoqC4qq6gurimrL3Fs7Cvo7Wwra2vtMPDvLO/urixs7m4uri6r67As7S5sL/BuKy9u7WmorOqp6myq62xoZrAtaSntbWonrK8qaimqa+smaOnnKOmlJihsqWZn6OoqZyioJOkoKS4qKSnrqaepaCokp+ooqGgmJudoJKam5agoaqbm5ihlJGUlpmNlJKjqKSQiYqPhnmEe4SGfZ2NioqHeoGEiIiIkYWVk5OMkJWUjY6Ue4OXjot3fntsdHFsbHNheHRoaGpnZ3CGZ2hpZGZpamBqYmpnW2V7Y2BTc1RcW1NMSkdJT1NAISpoXWpMQ1ZVXmBLSUdFQy46QjxGPDZLUEQ4OkQzNTc9PTg5NT86OzQ+OEBLPT45Myk4Pjw6OSo2QDMuRTQoKyw/MC1OPy4rLTcsMTE5NSwmLjUtODA1NzZgdEIzQ0RnW0tXR1VgaEIzNzlnTycynqOjkY6jp5udnp2jta2mqrm3p6zDwbawrKO1rqeur7fAv7yxwbaxrrK2tri3tq2qvbSvsrG9v7iuvLyxpZ+2q6WltKmqrp+dwauopbCyqay1u56pqquxpZieqp2mpJGZp62imJ6kqaGbop2XoJ2ntqWvqq+hoZ2doZSgpp+hoJmbmZySmZ2UpZ2roZeWnZSTjZWXi4+YmqigkoiKi4h5hXeCgoKciIuCiXx/hIiGhZGElpWPjpCRkZGMk3uDlY2Fc319Znhva2psZ3Vza2NnZGR2gGJlZmZlampka3FaXlldbWRhTmhXWmBWSkdIS01SWD45X2xpSEJUU1xbSUhGRUEuPD85QTg5UkZANzpCMDM3PTc2OTI6PDk3OjlETT1CPDAqPEA7QT0tNUIzNz0rKiwwQSpKSy4vKiszNzIyKDU3JCs3LjcyNjg1XXlOMj5IaVpMWkpWYmZAOjNCaEglNZujn5CLrKGYmKCWpbSxobG9t6Gxxry6sbGkt6yrrqm5vLu6rb+xr66utq+zuLOorLqxr660trq2r7m+raaetaugoLCkq6+dosCgsaOusK63rrWera+sraKanaeppZ6Vm6iln5mkoqmdmqCblJyerK+luqiuoqGamp2ZnqOapJ2XnpiblJmgkqiWqqeak5qakYuUmY2UlJmpp46OiomPfIJzgYGLmIWHfImJhIWKjIqThJOckpKQkJGWjpB/gIyNg3CAfmZ5bWhramdxcmtcaGRjc4FhZmhqbmxna2pobVxsa3RxYVRiaGRlWklGTE1PWFFRVmFlgVRAVlNZVEZIRkVALzw9Nz82PEZOYTg6PzI0OUAzNzgyOD83PTg+RkpARDkyLT1BPUE9MDVAOUAxLSsuMzw7SzYvLissLTI0OzYjMyopNi41NTQ2NVp8XTE5S2pbTVtLWGRkQEExSmZDJzSSoZqNjrCdmpOhmqmyr5+4v7agtMK7vbmxprawqK6lt7i3t6y6rq2qq7eqtLmuprO1sq6psbe2sbO1uqepn7apnZ6poqmtmqe+mK2jrq+1ta2sn7Gtr6minJyjq6iblZyno52aqaKklpqgnJGcpKuqqbufp6SgmJmZnaGPa6GWmZxxgpWao4B1kqmnnpSUnpCIl5mAloqhkHiGlIyDbmp+doNxbIaLhn2Ei4ZvXmNhZ4SXhmuLj5STdXeLhH6DkH9nhoBodWlmV1xoc25OUGpkZ3KEZ19kZm5tal5gYYqQhIVlTktEOEZUZ15KR1BQVFVLSFNhb3RlRlpRVVBGSEZDPjE7PTY9NjwzZlw1Ojw3NTtENDg2MDpCNz86PkZMQ0IzNDM9QEBAPTI4QEU9MSwrMDg+RzYwMS4qLiovNTY4LCMxJzIxNDoxNzZZgWwxNk9rW05cS1tmYj5HMVFkPSsujKSZhpWwm5yToZuqraqjvcSvqbfCuL28rae2sKWrpLezsbOwuK2qp6y0prC1o6i4trWop6y3s660rbOiqp+0q56hpJymp5irupWmpa+yt62upKmuq6yloZ+coKenm5ehpaWbm6ennZOfn5iQnqiqo7Wvo6OjnJaXl5ejiKGOkpqHoYeTnaB/pX+mqp6SkZqRiIRyeI2OhYihdomNaZeIZn1yeKFwiIeEfo18f6GgoJmAe4eedIiOdpuKbIeBg21oZWN6bHFiVIZtY2xpmHFZanFvh1heaVtra1uIcW56coZnhoRaXkZNP0dfTUZSVlZRUVJXVWdeTVdJUlNPRUdHPjw0OT05PDc7MDw8Nzk5OjY9RjU4NjA8Qjs8OT1GUUc9LjU8O0A9QD41OUdBODIpLjE8STkvMDEuKi8oLTQ1ODMlJjIxMTU+MTw4WIN1MjVSa1tOXExcZ189SzFXYTcwKIuml4Ocq52ZmZ2fqqqnqb7DrrK6vLfAv6qkt7CprKaztK6us7arqaWxraW1tJyutra0paeps7Gtsqivn6uhsqmgo6OaoaOarbOUo6SltrynrKerqqyopaGgmKCmo5mZpqOkmJykqZaUo5yUk6SlpqG3o6OgpJiUk5eTm4iuj5iUiamLl6KbhbGAo6ydk5mdlHmC1KiAh5XBm8d5eLGlt5dkgMCcv3mEhHmQhHyQkJHKcZa8nMV7cramu5B7gGyWsauweGhrWLGubmVpvJK8bmh6bnKP2H5TamK2sn6BcpR0mqGqkFdPV2FPVk5GVFtYUVBSjFxXXFBAXERRTkVHSTw8NTc9Ozo5Oi49Ozg3ODs5PkY2Ojc0PkA+Njk/RVJJOi41PjtCPD9BODpKPjUyKjIyQkUvLjMyLisvKS0vMTg2LSAvNDE2QTE9OleDdzIxVGtcT1tNXmdcPkwxW100MSGNppKBpqmfl5yepa2yqLDCvbK1wLW3v8KrprOsrKmnr7Opr7azqKimtaanuK+cs7K2qqWkqLGurrGmqp6npLGkoaCel5ugna6rlJ2hn7S6o6qpoq2upaKdmpqhp5+Xm6ign5iep6eRnKeblJ2hpqKgsKKfn6OWlZKYkpmFr2pqio2qfmeElYatZHCdnJOZpZRxrqGkfni7fWuhkHaxX2q0W6WAZpyRYGaCemZ/anhrqWS+cmemjHaxanyxeHSSk2NtbaduW4SgRWhnh5ZFdZxgfmd8pKeCWV+Lq2mAlXh5aqc3Sq9cV1NtY1tLTldfXFdWO06JT1dXL0lUU0lERUY9PzQ2Pzs4OjkwPTg5OTk6PTxEODs6Nj1BQDY8QEhRRzkwNzxBQz5ARDhARz0xMy0zM0UzLi41My8rLyguMC46NS8nJDIwM0IvPTtVgnYyLVZqXE9ZTF9nWTpNNV9ZMzEbkaGVg6ynpZ6jpaqyuKy0vb6vtsSyt7rCpqiwq66pqbCuo7G6r6SlrrOjqbmonrOysKOloKqtr6yvpqefo6Kwm6Kbl5WXm5uspZaboZ60s6KrnKKtraCempegoqidmZ6kn5yaoaekj52jmpegn6qepqagm5+hlZWRlpGahbWbtXiFqZm1mXeHs5u3fpOVlqiUfmuBpnuChoiSlJJ4q2drsVure4+HlHSIcY+GgH+IkJd4g4KLmIyDoI+EsHZ3n3Fra2x8i06kWEhjY5l+Y2imYHlydVOSh15QqW1jcX6HgGKcLlGib1tTa2hgTEtbZFhcWkI+sXhXWEEjTWhFQ0RBQEExOT44ODo4NDs6OTw5OkE6RTo6OzY6Q0I4PT9LTkc6NTpBRkJAQUQ8RkQ7MDIwMTtGLDAuOTQwLC4oLzMsPjgzMR8vMi1EMTw8U31uMytYalxPWE1fZ1g3SjhhVTUwG5WflIizpqahrqmns6yqu7bCsLvCrbi3waqsra6upq6yqaGvvKqhp7StpKu1pKays6ejoZ2oqrKosKilnp+fr5afmZSVlpidrKKamaSotK+iqY+pqKqbnpWYoKWnmp+cop+boKOlo5WbnpianaKqm6WZnJuioJaTkZOSnIPVk5m5cLDCfsaGfNaUm7t8mZWkj42cjaR7joejgqWCeqx5j51Wr3qIfp9quVq5d4aDfKaCk3yYeqp5jZ2Qe7FujoR0kLyFb5RQr6fFilGgemNgqWN0cohtl4hgU7W0yIaAiXxjpDNCnXZdUGppZFBAWGdaZGFKSE1sS1tST1lmWUNEPkU/MDw8NTk7NzQ8Ozg9OjxDOkY6Oz42OkBDOzZAT0xIPDo8REhDQkNEPEVGODEyMTFEQy4vMDQ4MystKS4zMjM5NzEjJTUqPjM9PVF3ajYqWWlbS11PX2ZUN0c6YVE3MiWboZOYsaiopbOqpbWopLy3wbC5wLG1tLuztaexsKOwsqafrraom6i5rqOvsaCztLCgpJ6fqKqxqbSppJydnqqXmJeWl5WWoKmdmpaorbCpo56PrKKolp6XnKGloZiioaGhmqKip5ueoZ6VmZumoJynlZubn6GYj5KUkZyIsm5otXGrh2+OpnK0c3K2e5mXo4uOnI2ifpGhpX6wdoOR0tF2XK57hX+kb5uqpmuHhHytfZeZj3uxc5Kdj3mzZZZ0hJ5vnmaUUsiLWsJcn3liX61gdnOHYpeIXlnKnW+/gXVNS7VTVcZkVFFqZGZYQU9rX2xoT1VHSTk9VlJbWFhJQz9KPDI/OzU9PDQ2Pjs3Pjw9QztHOTtANzs+RDsuQ1JKRz4/PElKRkNFRD5ISTkxNzQ2QT4vLjI0MjUyLSkuMjYsNzQyJh82MDs1Oj1QcWg5J1dpXEJPVF9lUDVHPWFNNjIwoZyRpbCtpKq8raa1pae2u7yyur+3trS6urOltLOhsbGin6yvpJimuq6ksbGctLiqn6adoqqksqisqqSanJqonpWUmJiSkqKnn5aSpauwpqKWk62fpZKUoZukpp+UmqWmoZqjn62aoJ6dkJaboZ2cpZWdlpmin5WYlpKahax7d6h2o46Jh6lvrYqCp4OYmKGJkpqKon+TmYmuhX+Cs1xys1KufYOCpH9x1314hX2OnoaZmnevhoqRnIh4s2GaZZqBgpRsklqwWEuadZh5ZmCtX3d3h2iYiGter3eVno94bDV5yK6yX0JUb15nYEVQbV9wbVZVTS5lY2lTWVE7QkRBTDo1PzkxPTwxNj85OEA9OkM6Rzs8Pzo+PkU5LUVVSkVAQzpNS0pCSEc+R0s5Nzw0Njo+LzA0MzMzLjIuLjE4Ki4zMiUhMDM3Njc9UGtlPiZWZ1xAPlZfY042R0NgSTk4OJ+dlKC4sJe0wa2os6ipsrq3s7i/ubeytby1pbezn7Ssn5+oq5+Vp7arqLGxq620pJupoKCoobanpqqjmZ6VpaGUk5uZkpSipZqSkKasr6aglZmpn6KPkaKZqKWglZqlqJ2cpJ6tnaGdoI2UnpudoZiZnJaWoqCTmJCmnYapfX2leKGPjoOqcK2LgaeGlZ+hiJeXiKOCkYiUqnyAi515b7FaqIKCiKB5dNh/dodzp4GOm42SpHyWkJ+Ee7JenGSgfoOVbJJcq1tak3+Rf2hnqmRye4FrmIdzXaxaiaCOa29lT0pDoVxbTHRdYmZNW2FfcnRfSlY2SpuTWEhFPUhGQU0zNUE4Ljs+MDVBNzhAPDY9PEY/Ojw2Pz1CNy5IVkpFQUg2S0lOQElLQEVOOjpANC47PjAwMjE0NCsqMDUvNywmMjEoJCQ2NjcxPFBlZUEmVWZbPzJVX2JMN0ZJX0MxPzihnZmZv6uXtMKuq62pprSwt7C1v7m5srC3vKm6tJ+wpJ6lp6eek6qwqbCptayrr6GYoaCmpaS6oqOroJebkaKglZSempSYnqCPjYuor6+mnZabqKafjJKkl6irp5SXqaeen6CjraShnqGNlaGZn6CSnZeclZ6hlZaOq5uPrm1ytHKpjHaKpnO0eHOzgJGkopGcjYmkh5B3uG+Me4uia2u2WqCFZZeXaaGip22TcrR0k5h/smqFkoita3WzYZ1mom+HkmqXXK1gTaF8h5FSc6Nten9+b5iHcVyvVjycd2VUb24uXKdPY1JrZWJtWmNdYHB7Y1RaUT4+bW8zQkJAP005ITdANi47QDM3QzU4Pz8zOzxDREJKRk1JRjYySlRLRUJJNklKUD9ITkNGUD08RTUwOzwwMTAvNzUsKyw0MjYvIzAwLCwdMjg5LzlOYGVEJ1VkWT4vVV5hTDVGTV44MUM4pZqbnbqhnLLArq2rq6e3qbivtcC1vLCvubirwbapqqCbpqShnZGqqqi2o7Kor6qgl5ynoKSruJ2jrZuWmY+lo5WNnaGbmJyfkJOUq7Wwp5mUnKyql4yTpZmlraKRlqqxo6Cep6uwmKGjkJmil5+blpyXoZOcqpyUkKuZh9SSmrtzsMOAw4Z+1ZabuHiHkJeMmIqMp4h6o7Z1fXd2woKasmCDunnAfHW4YrWBjIepfZaBrKlxe391vIinoGmdYaaOr6F+jHSHqn2+bnO8dLKDdXiBi26aiHFujaR0vV53fVthebxrWlZbanpeamFmZ2Jtd29ZW1lDQUByP0NHKzVIIic7PzEwPD83OkI5OT1DNDxATlpeYGBfX19aUFBSS0VGSjRITFJASk5FRk9CPEU4ND05MDIwLjg3LSouLzE4MCItMSwzHiw8OjA4TFhhRidUY1g8L1ReYEs1O0xbLTZBOaeanqG8opexw7Ctqqqssae4r7bFsbqxrruwrsGyrKSinqOhnJuRqaSqsqS1pq2kn5aaqpmmrLido66YlaGQpaCSjJyjnpedmpCVkq+5sayVl6Onp5SRlqSdpK2dkKCoq5+bn6mjs56jpY6nopWimpyXlaOYj7CgkpSqnoWQmbWAkJGMt5V4gpOatXdta25zbnmPhI6JdJ7Bu72ae4GyqHCAdJG4g3yGhoyGjXuLho2XfKS7ub2cdXq0o3R2l3V0sHWZnmaGaY22dHJwd7aMXoB6fYpog3lueWOLrHB1hX9ZW6dqRWRZU2ZgY11jUWdmcW11Qk1QTUQ7Wk0+SjM8MCA4PjsuMz1BOTk/PTs8QzZCVFlaWltbWlteYGJgXVNHR0g0RElUQktOR0VPRj9HPDc/NzA3MC85Oi4sLy0qOC8lJjIoNCQoPjcvN0xUX0cnU2JWOCpPXV09KzpWVic+OzynnqCgv6WWtMO0rKunrKupu66wxq+1s663p7S4ramioaWeoJ2ZlKukraqmtainn5uWoKOerKS+p6Gql5SdkKKbkY+iqKGTnZeTl5SytbetmJ2jpKKLkpGmnKarm5aopKWcmqGopqejqaGRrZ6XpJ6Xl5edno+wqJScp6KOan5pnKZ4h3N9mo90emWHer2+wLpvkoJxlYdfcmpaXpqJYWOIjpVrYH+VY22dd2KVa4CalZRlXmBjcZuKaXKMfYaVZ2p+cnR4fX1iW3d0gWhQXG6EfXuLa1hse4JzSUpvhnBOdU1FV11mYExbWGdjX09bbXVpcVJQREVOPEhJPUw/MiwyQT84LzU/Qzw5O0A7PUM+UlZWV1laW1xcXWBhYWFgXFVHNURGVUVKT0hGUElJSDs4PTUxOi4wOzouMC03Nj01JiIvKjIsJTs4LTdKUl9JJ1NgVjQpUF5MKDM9W08nPzI+qJ+oocGjm7S6tqOspa6nqLWxrMisr7OrtaO+sbKnoKKpnaKbmpmspq6kpbWppZuYlaGbp62pvqipppWUnJWgmpKXpKmokJ2Rj5ecsLK/rJunnaeiiZORqZuppJubq6CjmZqjp6yjn6uimrCblaeglpWdn52XsaSYoaiZnJGdnKOjmaaimpyampmPloFnbX1xd5KXlJGFirWqjYaYlY+KjJiXh5SVioSSlJGJjpKUmJSYl5qgopqclKGdjYJ6pYZsanyQfIB0iYqBcYJ4eXZ2i4B7imtzgXSDdWR3fXdrcHttYGNdcGdNWVlmamBXWnB6bmxmU09GUzlPWk1STygrOktCNjM1PUBBOTpDPjxFTlNTVFZXWFlaXF1gYmJhX15eW1RLQ1NHS05ER1BMT0k8OjszODksMjs4MjApNklSTzgiKSsvMiM0Oyo3Rk9bSiZSXlMxMFReOis9OFxLLDwuQLOgs6K/oaOxsregqaWyp6WwtarJq6yxpbWmwKi0oZ2kpZyjlZagqqaso6O3q5+Zlpafl62qpsGfrKSVkpyXnpiTlKKfnqKmk5GZqKeyxK+aq5yqn4+Wlqmeq5ycoKyYoZucoqSvp6KlqJ6umJennZmaoZ6enLCgnKKmlZiTmJOgoZWjnpegjpaTioqNjpatj3yVm4KSgouqqIaBmJaKhI+fiHuEkIeFmZKIhoqVj5uXjZCXnqOWmpORnY1+jmahs6+FioR2epCKfHZ5em9mepGBgIlrdYF5iHJoc396doOIgmt0ZHlmYGplY2Rma1lre3BpalxTTFBEX1VFQD8/LDRARjs0NTs+QTs8Pz4+SE5OT1BTVVZWWFpcX2FjYV9eXl1eXVhWSktMQklPTVJKOzw6Nzg2LzI5NjQuKCYkLTEuLykrKjclKzwoNkNNTUQvVF1RMDVNWzE3RTRcRzU8LEC0oLmvvqyrrrKyoKqmsa2irLOwxbCqrKOzrryktJyfpaKhnZmXqKWppqSls7WelZSdmZmwpq6+oKyikJGempmTkZWhnJeonISeqauis8izn6qjqpeWl5qnnaibnqSrk56fnaCpr6qmo6uirZufoKGZpJ6cnp2vo5ieqJOYl5yRpJmYqJ2al2WCknxlfo2Zj2N5jWxoa3qRpKtrZZqYfmeFimVlaWh7jqGPa2iNl5GjeGtqi5ijnphzbG56hI2HelhlXoWCXmyLioB2XGhzd3eSgIeCbniCeIBzbXmEdHeJiI6De2mGWV5rdGRdc4lpanxxbGNeUk5XSmRYQUo0PUY3P0ZENzE8PT9BRDs7REdISElMTlBSUlRXW15gYWFgXV1dXV5fXVpVT0RIT0tTTj0+PT02NTM1NTU0KiYmJSwqJS8qKyc2KiQ7Jy9BSltKLzdaTzYpRVkvRE8xWUM7Py49pZ+6vLmvrLOwqqWora2wp66tsL2xqaekra+wn62Xn6OdoZqZp6ucraOlqKmyrp6Vo5Cir6a3uaWuo46OmqGZkpKboJmZpZV7payiqLTEuKShp66fnpWeo56jnKOqqJKeoZ2gqrCqq6OqoKmbpp+ooayWoZulsKSXnKuVoZ6bkqWXnqqYnn69g4dytHKEnYataHi5xLhxk6Kje6aYmXOqgnzLwMC7cYuiiIKffZWYiZ7AvYKWnZ2NncLBe4J7ko2aw8B9aqWxb4yBb8p6f5t3koOOgXZ6gYB5cXp/h3F4hY2TeW13lGNmX3hkYGWCY150Z21kYlhMVklRWkhPRDJJRT9EQj4vPD8+QEE6OERDQkNFSElLTU5QU1ZZXl9fYF9eXl5eX19fXVxTTVBHVU5BPz89NjQ2ODI3NiomJSMpKiYuKyopMTAfOSojPklbTCojQlAvI0ZbM1BZL1VBQjsvOJajuMO1sK/AqaiUo6+psK6tprK1r6mlpqawq6CrmJqin5ybqqeinKyjpailpLSknaKSpq6ruLOnr6KRkZqdpZKRoKGXm5+dh6arpKutwMCwoKmvqZeSn52imaGjqqOToKGdna2uqaymo6OnoaWmnq2pkqSbqa2pm52qnKyhlpellqGjl5x/zpR4eqSBeZWWm1+uj16Op4GioHynlZt0q4OAr15jjap6p4eFoHSXk4izY4KrhqCOjbNqhK50fZeHuGGDrVmjzW6QdXvae3+ZcH6IknZ+ZXuIdnZrfYhufoWRkn5tgo9gcWtwZ2BfeWRccWhqY2ZgUlRSV15LT0M1QUhFRDk+NjtAP0E7PThAPj8/QkRERklKTE5QUk9TXF5fX15dXV9gYF9fXVpXT1VKPT8+PDU1NzgxNjQoJyQhJywmJi8oJiszHTYwJDc7U0wrLC1KMCc7XDtMLSFQQEY0LjGtwr+/tbSwt5edkaSqqK2zq6WyrKyrpKunr6qgp5uZpJecoq+foJ6op6OloZ6wrJuelaeurbGqqKyglJKbn6WTj5+ll52no56tpKqwqMDGs6ipsa6Wkp2copefqaqflKGfnJ2tr6erqZynqKSiq5KttJemoqqpnaOmpaGwoJKap5qgmpSUkZegcYWMl3SEqIdxsXydcax+oZ6BpY+ed6qCfa1/nHKtfquHhp92mJJ6fJd+qoiijJGMnX6re4mUj5+Ae61WnMR6j2+SwX2BlW11cIxtZXZlhm9hd25yb4qLkpCDbZGRZXB0dXBgZ21lYG9paW5mY1dTXWFZUlNDOUpJQEQ8PjxARkRDRUE9PDw8PkBAQUJFRkdFQENJU1dZWlxdXl5cXl9hX15eXVtaUkM+OzkxNDc4NDUyJiMfHCAxJyAxJyAnNB41LSY3PVdKLTwnPjEpM1ZARiEcRzpDMS4rsNTGxrK0n52jjqOjoayvtq6psaeoqqetq6unoqOdmaKVoKarn6GloKioop+dsKyYmpaop6+sqKepnpeUmqOikZShrZudpqOvrKOrtKq6zbKtpq6slpScnaKZn66snZagmZ2fqbKpqqqbrKuko6ybsLGiqKyupZimqqmpsaKSlqOlmpSShKRqpHWJeql0erJwgqWJmYxxiKCah6RgYFKrhH+ug5t2roGmhoafepmWhntmgKOJpJmFgqN9qX6BlYeuX3yoVZ2ikoF6op+Ae8OvxYxzr7OzuXFiqa/CdGiNjZiPgW2ak3BueXh3b2xmZWVycGZ8aWJdV2BpWFhVTE1RTENDQUI7Q0BAQkk8PTo5Ojw9Pj4/QT04NjtETFBSVFZYW15eXVxeYGFgX15dXF1bU0lCNjc5OTY3NCwmJCIgKCciKy0iJC4hMy0mQERXSCxHKzU2KjFQS0wjIEE5RDQsJ8PJ1tW/oZmrp6Gvop6wtLCvqa2ip6aqq6uppKagm6WfnKanpqOcrJqirKGkn6+inZqSqqS1sK6gqZudlpSnpJCaoqigoKWcsaajp7GstsiytaqsqpWRnZyimaCls52aoJScn6esq6Sumq2qo6KrorOuoqqzsaGaqaiur7ajk5ajp5ibkXyqbJ6Eh3WreXywb4KkiomflpWflIHSuLS4yYCBsl9flKmDpIiHoHmYlZp4qsl0maOVp6mQk5qMf5uKmsbGeGWhgqVzgZ+Ogn2vXnC1Y7F1S6OGbadHgpNkj5Ceknxwl5OAcXt1fXtuW2Zqc3FmgWpfYVlkbVxeWUlOTUtFREFCPkE8Qj9KOzc5Nzk5Ojs7OzMuNjxBRklMTU9RU1daW1tbXV5fXl9fXlxcXFxcWE1CNzU3ODUvKSglJiUkJiksNEVOUFBNRktKVkYqTDAvPi01T1RRHRw7PEYyLCSnpMHGuK2psq2spaKcsrmsqqGmm6ilqquqp6CmpZiqo5+uq52moKyanqmlnae2n6KXk6iqtrKsm6acoJWQpayRmZyno5+ppq6ho6epsLTCsrOqraiTiZedpJqho6+ml6GUmJylpqubsJ6uqKafrKO3raGyua+dm66nsrOzpJSXp6OZn46CnU54moF/n3qDo32DpISHp5+cnpOEuHt8ebmCfszGwrZ4m6GRi599mpaWinaemIqkmKOofrCFnYWfhKx9mpRhpWyjcI+FkIF9l4NyrGCkc3GAmmC8fVJVdY6SpJd8fZOSi3V6c4V/cVxtb3hyaoJvWmRfaG5jZF1LTVFUQklIRkk6OUs+QjEwODg2Njg3Ny0qNT09P0JER0lMTlBUVlhZWltcX19eXV9fXFpaWllVU09IQDg4Mi4sKi4rKicmP1FUVldXV1lYWFdVT1VGPEUzOlBbVBwbNj9ILC0gi4eZqaukq7irr6Cboayzs6afoJWmrq2uqqedpqabo6egsq6iqaayoJmqpJSjtqKilZeiqbS4pJyinaKTkKGxmZ6cp6Whoq+unaSoobayw7Gtqa2pkYeQnKecoqScpZadmJmapqSpmq+irqWmmK+lvK2ht7etnp21sriws6aYna+ho56Fj9G1w7d5h46FkZOQgaZ4lKJ3jKCRhKWBinGqhoS0bnJqmaOblYqffJiZhoePc6+CpZuijaaLk52JlZCabXCyXKVzk3qcbJl/e5l9bqlho3Fxf59ic7K4aHiPlKaZfoyNk4x4fXmOgm1peGp5c26AdF1kZG5tZmdgSltZWDxIR0BVM0BGPjwqKDYzLjAxMykmNDo7PD0+QENFSUtOUFJUVldXWV1fX15eYGBdW1paWFVSUlFGOjIyMzAvKysoQFFSVFVUU1RWV1dYWFdVVlZUUU9RW1UlITJBSCQpJZNzjYqtv7+7urWelqekrbWho5mVo6mnrqqrmaain6ahoLWno6mnsKOUrKOOpK2jnZCamqq0tKSdpJyokZSXrqCgnqajnKectJqhqqO2q8OwqaupoYyEjpyhoKailZqam5ibmaakppisqK6jpZutp76slL2wrJ+isLK5q7OnmqixpKeYeqiQfXywd4qBpKWInG2yb6GHrXyhjoOolZiArIiFroWflKmgoZaGn4CZlYB7kn6rgJ2alouqeJ2gj4mUkoB5r12jgXymp2SdgHyXdGuvXaVrcIWZXWBbjKBtlZKnmYOUjZeMe3uDl39rbH9jfnVtgHpgZ2VxbmhnaENaYVs9S1QzVThCQkM3JCQzKycnMywgLzY2NzQzNTlAQ0ZJS01OUVNTU1ZaXV9hYGFhYV1dW1pYU1BPTkk4MDUyLiosQVRWVlZUVFVVVVVUVFVUU1RWVldYVlVVUUhGSUojKCi9kpqEqcbCtsG0n5qsoK64paOOm6Sin7Cvqp+kn52tmZ64oKOroK+pmq6hkKuppJaJmo+usKynn6earJeYj6yioZ2loZqknK2Yn6imtqnAr6WppJ+LgI6bmp+mnpKVmpqUmpqmpKSaqayspKWgqqi/pZfDrKqioauyuaqup6CzrqipmHavfpCLnIWHfLquiphlsIxlla19oY+DppWagayKhLCFpZmkoaGRhaBbbGqBs2B/rXt7goGxbGdvmZeMiLFbfbRbpINryKJln4B7u1l2tVqyfVKvgHqsWIChbpiQqJuLl5GXl3x5j51+ZHN+YoR4dIB8YWpncW1mZWVPVWRcQlVfPkooPjk9NCEiLCUfMi4gKjEvMDQ1Nzk5PEFDRkhKTE5QUFJUV1peYF9gYWJeX1xbWFVQTkpGQzU1My4vQFVaWFdYV1hYV1dYV1ZXV1dXWFdXWFlaWltcWFdXR0I70p+zsre9u7TBs6ObrKaltqigi5qgn5yzs6mfo5+dtZigs6iqq56vrZ6sm5WvqaKOiJuOr6yop6Knma6SmY+omaKdpZ+Zo6KlmZ+jqrKpva+lqJ6djn2Lm5WgoJmQkpqbkZqYqaChmaiup6amo6Wpu5+gxqelqaGrtLWsrqaeu62srJWAqZKjr46bgIekl5iQgYC4w7qDjpyThKeWnIKsioKviKabm6WqkX7VvcKqYqO/vX1+o4KD17q4tYWUk4Oevb6EaqOBb6uEbZ1/erKwx4Nqq7C9rHh3or68dIGWjqeckJuRmJ16gpGbemN9e2SNZ3mCe2BrZWtqYlBhW1NqXEBVYUNOKj06NC8eHyQeJTIgHSQoMDQ5NjY3Nzs+QUNGR0pLTU5OUVRXXWFcX19hXmBbXFlUUU1IQz88QT81PVNZWFhZWVpZWlpZWFdXWFlaWllZWFlbW11dXFpWWFRXWruVs7Sxv7mxvbKina6mpbKmnYyYpb+quLGoob+mprKcnrGcuaiera+lp5SUsKyXjIObka6mo6yhpJypn5iLo5KmnqecmqCoopieoKytqrmuqKObl5J7h5mRppuTj5GYmI+YlKmaoJipqaGqp6Giq7ueqcWjoK+jqrO0qq+poLqnrq6ac3WqpLeGZYmgcGetj4qPbW94pI+Zn4F1rpmVcI+LcZWoo5uXrqRybW1tZYp4b22CmXGBempxaWeJlpWYcWlphIZncIZkXYljam9ZXWd+d6ZgYnGOkW9mZICNk4+imJiZkpeffYePlXZmh3hojmt5f3lkbGNmbGJLZFdKbFk6UWVFUidLOisjHCAaIywpGBsYLTIuNTo0NTc6PD9BQkRFSEtMTU9RU1ZdV1pcYGBhXV1bVFBMSEQ9OkFCN01YWlpZWVpZWFhZWFdXVldZXV5eXVxcXF1eXV5dW1tVV16pla2zqbm5srOqqaGunqOyqZiSvrLDyL62qp7Aq6yjoKesn7qjpK2sraaNl66pkIyFlZatnqaroZ+jo6CRi6SSp5momZajqaCWnKamqK+6rKyam5OSe4SWjaWYjZGSmJSOmJWolZ+YqaObsaeeo6y6n7DBp6Szpqywsaqtq6e4o623loqgqKW2nYmWopiHqZqQlJ2TqrOZm6OroLGWoaGdn6KcoKShlaunjZOSjIeSnJyUkJqTmJGOlYWBpJmXlY2Lk5KKj4aEfWeKf3SCdnSHjHGnbXuUkZSSgYGOkJCPnZShlpmXooOIlY1yaZB3cIt4d3x6amxkY29kVWBYQGlbSGNhT1orRj0rJyE3NDAuHxwhJTIoKjY5OTQ2OTs+P0FCREZKS0tNUFBRWFVWWV5gYWNcXlVRSkVEPjk9QEFTWFtcWVdYWFhYWFlYWFpbW1xeX19gXl5eX19gYGBfWVlgpZapqqW1tq6uorCkrZ+gtbGQjqzGvcS7uKqipZ6bpp6wqKO2p52ptaaokZisoouIiY+cp5aspaCZp56ek5WjlqiaqJmUpqGjkJuomaG1u6irmZqQjXyBlIuhlIqVkpWQkJSXpZCfmqqgnLajnqist6euwa6jt6evr7CsqamyuKCuvJmRpaSmtqKSnaafjamfjZKfo6yvm6GjsKivl6OgnKOpnp6dnJarnZKZoZuUkJaqmY2ZmZaQlp6RiaCdlZSFkoyQjZSKgH1mi4Z1hnZ5iINznGqGkJSUkIl9jJaSkpeToZOdl6KEiZmHenKWc3qKf3J8f2pvZF5wamFbX1luY1BgZVBaOkdHRT4yPT43LysmKykmHSY0MDY2NTg6PT0/QUFDSUpHSktMTVNTU1VaYGBpYGVVUEpBQ0I6OUVNVlteXltaXFtbW1xdXV9fXV5fYGFhYmFhYWBiYmJkYlxbY5eVpKijsLOsrqOpp62gp7WqkJCdpbO7r6ysoqOaep2isaSlsKmWm7imo5OZqpyOhoqJnKOQrp+jlaefoJKWmJuuiqqWj6iZp4yZqI+fubalppmcjYl5gpOLmpOKlZKUkI2Sl6KNnp6pnp+4pICEr7WisK91pL6jsqB3eaCqsbuUdayknomAqn9kXGJ2oI6knoSXfm6Ts52jp62qo2Wdn5JzeZmXcICYqJdsf6KoimWcpZyRl5iWjJKckIadmpCVg5KGj46SiYR3ao6HdoZxfIaAgGFpiIqUkotadpWRaGiPjnJ6ppqZZXmZh4J4mGqDioNveYBrcWVfdnBsa2hcZmViYnBTXD5OTk5TRz5AVEM6MS8eHyY0OjMxNjY3ODw7PkBBQkZIQkdGSUtNVFRVWV1gaGZnV1FKPERHOzhVUltgYWJgXmBfYGFhX1xdX19fYWFiY2RhYmFhZWRjaGReXWablaajoa+xrKuppamuo6etpZKWq7awsqaaqqerl3OMnbCfqKunk5e5oKCPnKSdkX+IiJuejauaopSnoZ6Ol5GehXWuj4immqiRl6SJnLq0qKCZmIuJdXeTjZaTipSRkJSMkJOgjpugp5mcspaAjJy1nbOMko+8p6B+p6J6oq63gY6Opp6Di4aQsamvjIqWo5p5gYushpydoqepp4eVhZh3pZt6h5uBl6aCgnucsXqKhaCXmZSYlYKRl5aEmpljeYeQhI6PkYqDbXCPh3mAcYCBhX+GdIaElZJ4lmiSdKCadH2ZhKGeh5h/k4qDg5lrjo2FbHh7cXFnZHhvamxqW2VramZ0XF9JVExRQEU1LllVVTcpITA5PT42NDM1Njg7Oj0+PkBESUBKRUpLR1NYWllbYWBoZllRSDlFTDs+YlZeYmRlZGBhYWBiYl9dYGFhYmJiY2ZnY2JhYGVkY2djYWFonJejn6aurquorKCosaanqqWZlK7IvrChlqaptZ6QhJ2snKeioI2Qvp6ajZ+aoJB9ho+Zl4isnKGWn6CRjZOIhoCRqI2Hopyjk5eehp+6sqeem5KOhXB1kImVkIqUj4+bi4+Sn5KXoKSWnqyIn7SJtJqtisqHqq6It4WMr4KwroOpjaWYjZ18qI9ye3ecj6eWaJWkebSLn56mqJKYwoF/q4iYoXGegJmkfZeFlbGAoXyhlKCQmJaAjpObipiRi3yFkoaNlJKJg21zkIV/enKGgYR8hHWEgZeAj8Vmf6mHj6NrnoOim4SagY2OhYqZcY6ThWh3dHx3aGh1cWdoa15kcG1nbVhoR11STTJFNDZOYWM3JjM8REdEOTY0NjU4Ozg+PT0+Qkw/TklKTENQWl1cV2FdamxcUUU9S01ASmRZXWNmaGdiYmJiY2NgX2JhYmNjY2VpaWNiYmJlY2FmY2JiaZSXop+wqKmopaugpLmxqqummpSgo6Sqo5alqrejr4Chp5ylnp2JlL2ak42hkZ2QeYSWlpGIq5mbm5mhhY+Mdpucj5+QiJ6km5WZmIejua6kmZyMjH5ibY+Lk5CNkIyNmIuQkp+PlKChmaGofqGnh62doJatj56cnZGFgKCNqq6Go42pmYyafqJ1gJmUa4KsdU2reIeNnZGbqKeAqat9g6F7eqdpnn+Sa2eXhpe2iZ59bmBkWYOWf4x7ZGiLcpl9eZVsXXuWbV9TcINcX2t5g2BZZYJ9g4CXcKeqa4OjbnKlcJ+En2lmoG1bbop8Zlpgg39iV1Bvd2ZtdHJram9eanBtbGpYaU9dWEY5QTRHRF9rNCxJQ1FNTj04NDg1OTs2QDs7PUFPPlFSTE1CSlxdX1deXmJ2YE1EOk1PTVRiXFxmZmlpYmJkYmRkYmFiYGNkY2FjaWtkYmRkZ2RiZ2VhY2iXlp2guaGqo6askaG2vKyuo5mXoKKlrK2hna61o6iSoaCgppuZjZi0mZCLn4yVjHWBlJKMiqaWlZienn+ShYWspIebkIqYqZiZmpKIprGnopWaiImAaW6IiIuOjoqLjZKLkJKijJSeoJyipX+TgY+joZSgd5yWj6eDoad/hqmshKV4inyEmn2icHOUiJZ7nox5bYecjJmQm6iaj4ede4Kic3amZp5+dqRfmHp9knOibpi3tLp0koeCf7WoZIHGuHtwlbeLcYCapGNzrKtgfWqds35ufIaCjoKLmHF/o2xyo3OehICkYJ2Zs5ZxfJeftHRzW56yg2pib3R2cmhvWGtsc3NmXWleYktFPUQ1UUFacjI9U0dfSlI9PDM5NTo6NkQ7O0BJUT9VTU5RQEVfXltZWGBgfGRIQzhMV1VWYmFaZmZra2JiZWFkY2BhYmBkZF9gY2tuY2NkZGhkYmdmY2holJaVo7iZq5yToI2kt7WuraCbopyjo6atnJuxrayTl6GZoaSZmpSeq5uLiZJ4i4ZwgJaNiY+hkJKUnZd9kImOqKCHmI6KkaOTnJuNjKmopZ6QloeEfmt7h399kI2Di5CQiY+UoIOXnqCdoJ+LiXecmKKMn3Khi4eoiJulj5anqn6tjH56oJl6o5N4gXSWiI2cfZagh5uOmZumhqJkoXyIlpCbjWyeaJuNbpqZe4CKp31yaHSrg52DdKpolZpdm4V2hJ1oqmqAuGZcqHCBnGGVjF6ndnaIiX+eaJp1hpOSl45/n26akG2nml2pfni7a36qW46EXbRnXG5yeXhraVxxanl5Y2BmWGJBUUVPN1ZDUm40S1paX05aREAxNTE7OzdIPzpDSFU/WVJZXT5EYl5WYFFhY31pRUI5TltdWGRmWGZnbm1iYmVfYmFfX2BgZWNeYmRvcV9kZWVrZWNpaGdraZWciaq1m6eJY5Sbq7qysKydppycqJ+erpuesKisnZekmqGfmJaWoKOZhomNaoiAcnuXiIuWloSRlJiPeoqElqOdipSPhouekp2ciZCpo6CajJGKgIBpgIZ5f5eMe4iOjoiPlpp/k6KfoKGTmHJon4qfj4xwkoyBqYeYnqKnn6d8r62joriXd6OzoqSAiJR5nXurmn+ijp2bl4iXcaF8hY2vtX1rmpGheH6YtKOjq6iEmXybfZ2ZfnSqWl1ve5aLeJ5iTH56eoVjeZdCTJ5ZompxfI5tgYmEmXWbeIaJsbN/f5uTp3aCnW5zfZRvmXNrpF2VdkhlY2BzcX5/bmZgbGl2e2RlYlJeV11VV0BZRlFnRFNXW2JYXklEPUI4P0E6SUU4TEVXQVZRW1ZERmJcWmBLYG1+cUVDPFVfYlplalZnaG1vYmZnXmFhXF1eYWhiX2VjdmxeZWdma2RmbGloa2mTnYGxrZmEVF6gprO5s7OpmqKMnKucnKmUoaukoqiPn56dmpmVmKCdloiHiXeFgW55lYWQm4t8kZOWiHJ/iJKhm3ORkIGJmZWgm4WOqZyalYuLinyEbISFcYKhjHiFjYiIkpiVfJOjoZ6iiK6GfbWEjp6ce6WWeqmBlZyPiqCcfKdod21+mXShc3F8noaZcJODrn2kg6aemoCjb16oZ3WjY2+lYZzTkHx7mXhyc2OihZB+o3Ojj3VrkLOMYIKYiXOqsqi8f3eDbX6+pqm0XpxufXGXboBzonJdpGdzpmFopm2b1Jl9hZtweXqXa5t7eJdzbqmkZ2BleXCAhGtnZmRudndnYGNTW2ZRUWJJV0lUYFdTW2VqXGVRRkNLTUpLQkpFOFBAUU5XUllPU1FgZmVpU2N3eXdJRkVjXmVaaGlUaWhqb2NqZ2BjYFxdXV9oYmFoZXxkXmRnZGtkam1naGxol5t/satUXEt+qa+xtLCzo5uZhZmooKCkjqSooJipipmYmJOZk5KgmI6IhntwfYRofY+DlJqBd5GOj4lvf4aPk5Jsl5N8iJGSpJaDjqqalJKLhYl5g3eIgG6Cn4d3gJOGiJmil3uUoqSan4mzoaK2i3qsp6SupXCogJqQhYCbkXukgKGZhphynoSjrq+Kl4yAjKSNloOuoZR2tbW1yaFzlIqBn2Cdl6lteZWGoJt1oYd3oH6Sl4qAb0xmo5Jwm4dypHt5dGGDgmt+oGtxZGCccn50l2l6abO1tMamc5h+ep1rnJurdYSbbXV3mGmaenWYclBFfbReanZreYhmamhidHVwblZeVFlpUFNoSVVMWVNVXWhrblZnV01LQUpNS0hKTkFRS1BlY2ltZXVzc395fG51iXt7VFBObF5oW2tpUmpoaWxnbGZjZV9cXVxeaWJkaWt7X11kaGNqZm9tZWlsZaGciK+mhGY/lKGzq6+vtqKikICXqaKipYylp52dpoKal5aNl5CPnJOOiIN5anmGZYOMf5egeXWPiYyBaYSFkoOMhZ2NeoyKlaaTg5epmIyRi4GJeoB9i3lwkKGGeYGVh4mWoJZ/lKWonJaWhGZueJxsomR8caV3m5hwZ6aAlot7pHqfloOXcp52gYqUlo+5bpCKomJ9maGViG1yaatqdaBtbqZfmmmLkGiWh5qVdaKAfZpgjIaMdG+IYmigZZ5+aZp1b2NmiIJtcqJaX1tjoW1diYxve35zcmSlbXeiZGenaJlzjJlvom9TiZBvoF9lqFSLXlSYbm1za3KCbXBpa3lza29SWVdXZlpTbUlYT11JWGloc2pZa1ZRUkVWXExYUmFVaGpfd3R6fXB8fHKDe39zdo2AhHZeUXJiZ2JwZ1BqaGhrbG5oZGdfXV5dYGtjaml2dV1cY2ljampzbGZrbWOcpJimemV0bYunrqSpsLGmn4uAl6udn6WMoqGaoqKAlpiTjZqPi5iQjop7hnGAiGiLi3yYm3N0iX2Qe2SCh5WKiZWZgnyIhpaokIGirJGGkIqCin6AgI5zaI+lhH2GlI2JmKCOiJOqp52JpniWm3+kiJaMspiekIKvl5+ld5SHeal0pI6Emm6kooyShIyDu259pa+ChoaGk5acn3ylenGolaCWZp5+b6tjloqVkneobKmigYl1h4J3q5Gmh2qRsGt2s4ypa4qGbW2fnpKVYX+ri6p2f3+MpZ52n32EpJWdoGqbiHesZ5+tjbZ0d76NpJNZg6aNq2F1cnRwfHRxY2p+bmhsU1ZbVmFiXWtNXVJdSV1tbXZgW3FZXGBaZ3Rlbm9xY3F0YHh6fnlyeYNzhH6Ae3uMgYKAdmJ4ZGNtc2RSa2dob2xyamZpYV9eXGJrYm1se29cXGJpYmxqd21nbG5ilaWqnYGAnqSWqaqdqKeupJmJg5irmp6kiZqlnamdhYyajoackYWSjYyNdIZ6iIRvjYR+mJN0dIZykoNtf4uSh4aTj3x7gYWYpo5/paaOgY6JhZV2goeSb2yLqYGDi5SOiZyfiY2Uq6Ogj4B1lJaIfoF5lK6jf4GbcY+FeI+Kg357cqaMcX19epeWm4SOeHt+foeUlZOKdpCYn6CDen2Ja4yFW3l4cnpwaG5+kolxf3SCj5STcYWDgmWMf16Bf4t3dXOUdW95bm6HbYSFXnZoeI5lgIGFjqmbfXR8lmqJiG+Adn2Gdm1tZ4xzeXuYeIVba1h5j2lud3Jxb3h4cF1shm5qZ1ZaYFddZWtjVmFVX1FfcHh5bGt2ZWpranZ8cXJ0c2FvdWJ0e4F4dXqDdoCAf4B4i4WDfXttf2xkeG5eV25naHVreGppamRcYFpjamVscXVuWltia2RsbHltaGxvYY6UuKimi6GimqakmaWcq6KhhISYrJKeoYmappupmIOBm4p+lpOHjoqJjXKDfI99fo+Fe5eOc3KEcJWFe32Si4aGkIV4fn+GmaSOfKehi4aQkIWWg4aOmHdyhamGjpKdkIienoiMm6ifoKqDiY2Umn5+iZatqI+Spo93b52RgnmRb32ohXB9lXFrcH2Bn4x/k46MaG1dg4uMnJuejnOVi4hxdGuBdnSBWXJuh5GBfX6Mal1qZHqFg4iAX2l4ept7gouCdYGGgmd3ioZrYXBygnZfcouBiY+mlYVmjI+DbneLhHGGj3pwZmdke4N6lltcamdudlt7eXd1bnNzgmZcbYprbGNZWV5bWWxxXF9hWl5dZnR+e3VvdGNra2p7fXJ7eHRkbXRobXx+dnp8fHp6gIB+b4aKhHt9c355c39pVFxxaWx1b3Vna2hkXWFYa2hsa3FybVdbZW1sZ3N5b2hqbWCLi6mwoZCjoZqenpiemaijon6DmK2Nn5WIm6KRpZV/e5iEfJKZiYiGh4pzfYCLdoWLgYSWinFvgHKYhoR+k4SDhoqBeoCDi5ugkIKnooh4jpiJlYuLnZeFg3qtgpGYmZSKnp2HiKGrn6Kio4uHk5uco5mWqqGnpqCSm4eVjXt3jY6Ep35/kpGSk5yyppuVnpCNspOYhKWMjJWbn4mQm4KIkYprfI13eGWChpCKfImdhIeLkIiIgIWEkHd8eXSaoYiGiZ6KhJR+fYuBgXVwc4WDf3eHh4qQppGEhY2Hg42QjH2Ii4mQgndsgoR9eplqcmhhdIpwfXp3dm92dIFdXm+HaG9gXlpcXVNoclVjXFxhbGh1fHxzb3Bka2ppf3xueX9xaXBwbGaAe3KCgHh/fX+Fe22CjIZ8enh8fXqDeU5kdmpybXB6ZGtlYmJgW3RmcGZycW1VXWx0bWl5enFnaWtljIeduZ6XoqGYlZmYlJmkoZ58f5qrjp6NhqCci56WfXmUg3uOmYmGhISGbniAgHKBh36JlIRta356l4eEg5B/gIaEhn2Gg46bnZKHq5+DcoqQhpORjJ2RfY16qoSNkpiWj5yXh4abpp+imp2Gg5GamZmQmqagpZ2dkJaAkIp2e4eOhKV7fI6QkYaYqqGdk52PjaqOkYCejImTmp6Cjpd+ho6Db3eFcXVhfoKPhnWLmICDj4KGhX6Fg5RteHV0kqKKjIWZhYSNdICJfH1ycnuHhHt4i46EkqaPhoOPgYSKiop3hoiKjHxva36BfG5obG1nXnp/aH17dnR2dXt3XGBwfW51YGNbXV5RZ25UZVteYWtpdnp+cWxsZGtqaICAbHOBbGx0b3lvhXlth4B2goB+hXZxgo2Ifnt7fH97gopgaXtqdWhpgmVqY2BpXGR1aG9idG1sVWNxeWVwenpyZWptbYuJnreaoaSfkpGWl4uan5+ee3iep5GcioellIuYmXl6jIV8iZGDjIKCgm58f3hzgYV9i5F9a2h9gpiJgYiOfH6GhId9j4GQm5uRiKedf3CLi4yTh6GhioWNfKiRiJCSl5OWk3iMo6ChnZaaf4GQmpiSjJqjoaOal5Gbfo2FeICDjoegf32MjZB8mKSgoZOZkI+mjZCBm5GJk5ebfZKSfoeOgXRzgnB2YH1/jYZyipV8iIxxjH+ChYaOaHdxeIyYkY9/ln6HinKBhnx8cXl7i4R6epGMg5alk4uGkHyGhoeFdoKEiYh6ZXJ8f3h6cWxqZl5+c2h8dXZ0fHOAal5gdHZweGRjWV9eUmtoVGVZX2FoanZ4gXFma2RsaGaAgWtufmhvcWt+eIZ6a4yBc4GBfoF0doKNhn58en+BfX+PanKDbnNpYodobGJfcVZ0b21uYHhobVdqdHZjdXt6cmJrb3mJjZ6ykaSlnY6QmI+GnaGbnXx2paGOmICMooqImpZ4e4aHfoOJf4mCgX9xf3t0doKFfoqReGdjfYaXioKKjXh9gIyDeZaBlZiWjZagm35vjIKRlIamm4eNiYSmlYWTi5aXk5J3kZ2hoZeUl3p+jpiXjpaanaSdmJKUm3mPhYJ3hJaNnX6BiY2Mc5ejnqGTmY6PooyMg5eYg5KWmX6YjXyIjYF2cX1uemSAfIqFcIaSf5CCbIeCgYCJhGV1b3uHkpeMfJN4i4l7f4Z8e3F+d4mFeYSQiouXopWChIx3iISDgnd8goqGdmB4eH10fnhnbGRhf2lqd3N0dX1xfGJjYXNudXNtYVphXltsZVJjWGBhaWt2eYZxYmpjbWVpfYNsaHVobG9pgH2BeW2QhnGAg4N/dHyDjIGAfnqCg358kG12iXR0bWWKbGpiY3VWhGlxbmB4Z2xianZwZnl7eXFfcmyGhY+crpemqJ6NjZeHhp+Tl5l9eKqdipl6l52LjJiQeXuBi318g3uAg4F4dHl6c32AhH+Ji4BkXn2LlYd/hYd1fX6Kf32YhJeUl4ykoZh/cod7lJKKp4+MjoqToJKDkpCUl5GLgY+YoJqSkJFzf42SlImdnZ6ml5eNlZZzjY6Ka4WXj5l6h4iQiW+XnZqjk5WKjZ+Mh4KSnH+TkpWGmYh8iomBenF5a3Vse32Lfm2FkoKUd3CCg31+in9kcml7gJaXhH6Nc5CIg3iHfnZ4gH2GgHyDjYSMlKSPeYSCdImHfYB0doGJhG5he3V6cX1vYW9jZHtibm92c3h3c3RhdV9vbHVub1xbX15ea15QXVhjYWhtdHuIa19qZmpjaXeIbmZsaGpsaIF9e3dvkIhzgYOEfXSBhol6g316gYR9fY5yeot4eG5sh2toX2lyYodocm9mdmdubGF5aWt9e3hwYXhti4CZmaqgo6ieiouShoqei5WYfXeumY2XfZ+UkZaUiHd+e4p8e4B2d3+AcHR0e2+FfYGAin58YVx+kJKGgISEc3qAhnqPkoiSkZyTpZyVgn6BfY6LkqSJjoqNmJqNhpGYk5aPioiMkpyTkIyNboOPj5GJnpmioZeWiZaRboiZhGaFmI6UeomFkItwlZqUopKSiYuajIJ/kZ59ko+Si5mOe4qEh3NydWtxbnR7i3RuhZCNknF0gHuBgYh8ZHBseH2Zk32EiHSQioBziHlvgH2AhnyFjImEjJWojHuIfH6LhXh+cXCBhoRjaHl0dXB8Yl5wYGt0XnBqe3l4bHNwZXhdbWxzbXNYWl5fYmtaUFdYZWNncXF/h2ZdaWhnYmdxjm5kaWdkaWiBend1b46FdIGCg3t1g4mFd4V8eISFeoCKd3+Le3tyeINqa19waHSAa3JvbXFnb2xlfGNugHl2cWx3d4p+opehqKCmm4eMi4GQnIeTnHWBqpWTjoehjZaTkIB0e3aFeHl/cnN7hWtycHptinaAgYducVtZfpKNiICAgHZ1gICAoIaQi5KdmKGUmHiKf4GNiZyeio+GkpiWhYmVmY+Wi4uNjY2dio6Qg22Ji5CRiZyWoZyYlYWXiGmEo4JmhZ2KkX6Lg4uBd5OYkZ6RkImJlY5/fpCYfJGNj42aknyKgIJudXBsbW9we4Vpc4OOmIpwd390goiCeGZyb3WBmY58iIR6lJF5doh0cIl7hYx6i4aDiY6bo4h8hHaCi394eG9sgYSCXnJzcnFweFpecGBwal5van16cG1tamx2YHBvanJtWlhhYWJuWFFUWmZnY3VwhIJiXWttZGJma5NuYGZmX2drgXVyc3CLgHV/g4B4dYCLgHiFf3eHhneDhXyGjH97dop/anFjfGOGfG9xbXRqaG9sdnhfcX95e3R1dICCfqSVmq2eppaFjIR/l5SDkJ91i6CUk4aLm4yVjYt6cnh0gnByhXRxdYhrb211bYh2g36AbW5VUYGrlYeCeIB3c4J6gqCCkoKTk5ickpp4knuDjZOkmpOOiZWZkoSHl5mMlIuJj4+InoSQinxzi4WJjoicmp+alpSAk39ohZyHZ4Wgh5KDkYOJcYORl4+bjo+MjJCNeHuSkHqOi4yRlox8iHyAa3ZqbmtrbHp/YXp+jpaCdnqAeIOMfHlnc2x0h5WLfoiGe5OQcXqEcHaMeomMeol9goyQnp2FfHx3gox9d3FqbIKDemB4b21scnRWXm9icmBfbG55cGhvZmZzdGhwa2F3ZV1WZmBgclNRTlxmZV15cIh8X1xocmJiZWaSal9oZFtncH5wa3B0in12fIWAdHV/jHl7hoF4iINzhoV+jIyEe3mVeGZyaoNgiH5vb2t7YGpudH91X3R9eIZ4dHOFfHigj5mwnKWPgop/g5qIgIyff4uak46FiJeOjo+EdnR3c4Bwb4V0cHGDcGppdm6Dbn18bXVzUk2C38iS1pN8cHWDdoOfgpN3lJGZnJCZe5RzhZCfoZOTkIqTm5SGfpaWiI2NiJGMiJx/joB3eox+iIuKnJydm5WTeo12Z4mSh2yIo4SSh5eDhmOMkZmOlYqXjI2Ki3F7lIh7joiKk5GKeoV8fmx7ZXJvamt5eVyAeZCOgXp9fn+Gjnp6aHNqc4qOiYGFhX2Vi2t+f26Ai36Lh3yEeoKPlZqainx2eIOQeXNtZ3GAhG1qdG9oanRuU15vZHBZX2tyeGZramJmeHJvcGNfd2BgVmtfXndQTkthZ2NdenGJdFxcZXZgYWVlj2RgZWJYaXNzbmtxdox9dHmGgXV2fotzgIZ/e4l+comHgZGKiHx+mHZlc258ZYd+b3Brf1psbnl5c2F2enuNdnN3ind5n4ubr5ugkIKFd4iVfn2KnYeFn5GOhYyXhJOOh4F0d3B5cW6Eb21ufnJkZHhxfW15fWpobGOkmsHcru+hc2x1hHaEooWSb5aQlaCVnIGScYaLo5eJjpWKkJ2Wg4CVkIWJj4CRiomWfod6dX+JeIaEjZybmJmOj3aKdm6GiYt9iqOEkYmdhYVei5OXio+JjouLhIptfJaBfYiFiZGPhnaFfX1rfWR4dWlueHNYiHqShoZ5foCAhYt+eGZzan+JjomCgoCMloVrgXZuiJCCj4R+gXp/kJWTmZB0c3iIjXVzcWd1eoNidG1wYmp2Z1JgcWdsVV9udHlhcmNfaH1wcm5bY3JgYlduWlx4Tk1MZGdhXnZziW1cXGR5XmBkZoVgY2JeWWpya25rcneMfnR3hIF4d3uJcYOEfX6Ie3SLiYiWh4x+fphzaHVxeWyLem50cYFXcXp2eXFld3mGjGl3gIlyf5yHmaeco5KEfXCMlHh5i52EhaGNjXuWjX+ZiIR7cndwc2pvgWtpbXx0XmB4d3txdXtnYWV869q1ycPciHNsdIF3ipqIjWmYkI+dlpOBiXGFiaCNhIuVioyYlHyNk4iDiY97kIuFj4J/dniDhHKHgpOblpSYhox1h39whIKJh5ihg5SMn4OJYYOUj4eKhoqNh4GHaX2Uf32DhImOjoJxhn5/cXdodnJpc3dsWox8koKGfX+DgISJgnVhc2uIgY+KgX5/kpB9bYJseIaPhpKDfIB9gJGTkJaIb3F6jIZ1bHFscnmBYHRpbl1rdmBSZXJpZlNfcHZ0YG9gXWiCcHJqV2doYmlYbVZcdU1LTGVnXmJyc4VpW1xleV5eZGd7YGRfXFlrbmZvaXN4in5zc4F+enZ6iHOFg32Ah3Z3ioaOmIGMgXuTdmx3dXl4k3RueHt9WXqGcYBvZ3h3koJkdoaFcYqVhZmhmqKKh3Rvk4tyd46cfYqaiYl8n3+DmX+BeHFzbm9kcn5pZmx3eFteeXt7cXGAamFnYX/Vto6Qp3hvcXd8cZKQjIdqmY6JnJKMhntpiIuah4GSkYaHmI18jY2BgYmNe4+NfomFenR7gnpwhoCWmY6TlIKJdYOGdoN/ipOcn4aVj59+iGGAk4eFiISKjoB/g2d9kYB+f4KMj5B+bYJ8gnRrbXZ0c3Z1a2KNgY9/hX58hH6Dh35vX3JwhXuOjIF8fpGIenCDZnmDioaLg3yEfoCUj5CShG5veox+dW5va2x7fmNoa2pZbnZaUmlyamJRYnJ4bGJlXVpqg21zYVtnX2RsX25UW3BOSE9nZVxnbnGAbFtbY3NgXGNsd2RlXV1abGxibWp0d4Z/cW9/fHx0eIZ4hYJ9gId1eYmBkpZ8iIZ2iYFwd3l7g5NvbXyBd16Df3SBbWl6dJRzZ3OHfHKRkYOan5ughoh2dpV+bXaUl36IkIOKjZp8i5p2fXZxb2xqYXV8Z2JpdXpaX3h8em1xf2VkaGdXnY9ecXOXvMWEdnGUiZB+cpeMhp2TjIh0a4mPloF7lIuBhJuMfIuGfXyJjH+UiHWJhXZ2fYFxdYaBnpSGlY+Dg3F/iHSDe4mYnJeGk46dgIhlfZOCgIaEiYlygX1nfYt7eX9/h4yPfWmAfYN2Zm94eHN2c2xqjYWKgYp/eIKAg4J/al5xeHp9jImFe4GPgH5ygWl4goeLhYR5g3yBmIyPjH1ubHuJfXd0b2lofXdlXXFjWG9zU1Nuc2lhTmZ0eGZgXVxYboBuc1llYl1qbWBwT1lsUkRUaGFaa25te29aW15tY1pib3djZlxdYGtqY2xpc3aBg3Fufnt/dHWDeoOCfIGFdn6JgZaReIOKdIGIcnl5fo2Qb298gXFpgXl6fm1tfHaVa2p4hHRsk42Fn5igmYWIbn2Mdmp4mI9/goqClZeKeY+Wb3pzcGxqZGBzemlgZXJ7WmByfHlncHphZWWOsbJ3SmJapNrQl3J7kYuQeH6Vi4WZkY2Gb2yGkpJ6eZKGgYSYinyHf3h4iYqEloBviodxdH56aXmFg6WRhJONg39vfoN2g3iFm5iTipKQlIWHcHuSg32Dg4mDb4F4aICFeHJ/f4OLh3xlfX6DdmNwc4BoeHBvdJiMhYKKe3Z4f4N5gWpccH1ygIeFiH2GiXqIcoFucYOGjoSEc4R4gJmMjYR4bm5+hH93e2Voan1yYFl3Wllxbk5YcnNnYEpsdnRhXVtbWXR9cm9XZ11manBfb05XaVI/WWZfWnBrZ3lxW1tYa2VZY3B5X2hcXmVsaGZsaXF3f4dvbH99gHVwgXqAgX+Cf3aBhYmXinGCjXF7hnx6eYSTjHRqen9rb350f31vcnx7lG9ugH94Z5KKgqGZnJKChmeHhHBoepaJfn+FgpmKgXyNjGl4cmtsZl9hb3htX2JveVxkbIN6YXF2X2Vl1Oq+ijI6PouOgHJ5hYiOjXaDl41+k46Nf25shY2Mdn2Pf4WClYl8g3hudoaEg5d3boiEa3V7dGZ5goOnjIOPjIR9bn90doN5hZuQi5CRkoyLhn57kod4gISNg2yAcml/fnhtfHuBioR4YXmEgXFkcWh+bXRxdYGbi4B/hX5zdn2AcoBvW2x+dHiJgop7hn98iHh6cWyIg4+DinKBeX+Wi4p+dG1rdoCAdXZdaWl4cVlXfFNacWVMW3JyZVtKcHdvXFtaWV10fnRoWWJbZ2VuY2lNV2ZRPV5mXF12ZV90cFtZVW9kWWVweVpoXl9nbWdqbGlweH2ObGmChH95boB7fYF/gnp1goGMk4VwgItud36Ae3uIk4l/aHt+anR7coZ7c3d9f4x5eIR+fGuMjIObnZaMgYBsjn5raX+OjXt+f4OUgn99iohrdXFnaGNbYmdyb19hbHNhaHCJemFzdF5jZJugj25cNVmvtXVqgIl9koZ2hpeGdI+LindwbYWDh3V5iniJfZOIen9zZ3aIfn6Yb3CGfWh2eW1leYiFpYeBh42Kfm5+dX+AfIuZh4KTkJiIi4SJfI+JcXt9hXxpfm1rgHt6anp2goeAcmB3gX5xZHJndYJtdXuFlJGBfIF/b3d5fHR+bFdvfnZzi4GGd4d1gYl6eHJuiYCPgIVyfn1+koiJem5uaW2CgnVuXWhmdHJSW3tOXHFcT1xycGNWS3N4aldZWVphcYB0YF1dYGdkaGlmTlpoTkFhZFtgdmFcdG1YWFN0YVpkbnJXal5haGtnbWxpcHd8kmtohIl8fXB+fnuBf4J6d4CAiYuEcnuHb3F3g397io2Pg2p+e253eXaKd314gIKHf4N/fnpthIyImKONhIN7dox6a22EiZF5fXuCkYCAfoqDcHJwY2ZeWWdfcHBgYGdwZmpvinVhdG9bYWRqdnt/vpymo8i4cYWEc5R9eIaUgnSQjYhycnCEe4N0dYd0iHeUiHl5cWN3hnqAk2lyhHVmd3ZjanyDiJ6CgH+Pj31yf3OEeH+RkIJ4lo2Uj4eCiHuJiWx4eX51aHppa395c2l6doCDfWhgd4d9amt0aHt/aXaBi5CUfnp+fnB7dntzfmJVdnxycomDgnyCcIaJd3hwcIOCjH59eX58dY6FgnVpcWlsiIJycF5oY3NuS2V1TF5vVVRZc25iUE9zeGFSV1hcYXCCc1thXGhlZGNqZFBbcUlEZGFcZHFeXXdoVVdWd15cZW5oVmteYWpnZW9vaXB3e5NuaYiMeX5ze354goGCfHZ9g4iGg3B2g3Jud4KDfomLk39wgHx4eXqBjHSDeH+BgYKEeYB2b36Ji5qeiH2FeneHfGh0ho2Ren9/fImGhHaPgGdvbV9kXFhlWW1yYWBhcWxraIluYHNpWV5kbYB3qdqpx4aHsnGJeHCNdXuHj4B6k4qAdXR1fneAcHF/bYV0lIZ4dWxgeoJ5iI5mcYNvZ3VuW219gZCTgIF5kpN9eHtth3WAkIuDc5aKkY6HhYV7gIVtdXZ/bmh3ZW17dm1qdnZ/f3xhYniGemh0dWN9emd1ho6MlXt0gHVxgHp8bH9ZVnN9b3SDhn5/eGuIhnN5a3R/g4N9en14e3KLgHxyZ3RlbYuDbXRba191ZUhubkxbYldXVnhtYk9TdHZYUFVYXmFxhG9cYGNtZGNdbmJUXXJHQ2ZfXWZoXVp6Y1JWXHVbW2drYVZqX2BuZmZrcWhwdniOdGuOjHV/dnh+d4GDgXt0foOIiINvcX90cXV+hoKJjYp7d394hHx8hYd4h3x9gX6FgHt+c3Z5jI6fjYl6inZ1g3lefoaajHmHg3SFhoV3iXpibmxbYltbYVZqc2NgW2dub2eHcmFxZlddY2t/fMrOh7miam1timxxhHF8hIp+e5KFenl0eXV1e2ptdWOEdpKCd3BnXn2CeYuJZXGBa2pxY1hse4aciYOCc5eUd357bodxgYmLh3GWjpCIhYuDe3l+cXFvfWdocmJueHFqbHF4fXx6XWV5gHdpdXhmgnZndIeLjZR8codpb36AeG18XVhxfm1zf4p7gW5uiX9xdmd3f4F/gXZ8cXp0hnx5cmZzYW6LgmxzWGtfd1xJb2tOV1ZeVFV7a2FPVHVyUVFUVl5idIVoXGBramZiWW5hWGJwR0FoXWBmXl1Ve15PVmRwWVtqaF1XZ2BfcmZrZ3JncHN3hnhulYp0f3p4fnmCh4B1c4CGhY6CcHB7d3d1eoeGh4yGenx/dYt+fYWEhId/fn59h398eHV5d5GTn3+MfYttdYB5ZIOIl4ZzkopvhYWBeoN0Y25qWV9bXV1UZ3NlYFlkcnJngXNia2VXWmBpf3e+rnuft25ic4ZodHxyeoOGen2Mf3h4c3Zve3Zlam5hh3WOgXNqYl5+eHmKg2ZxfWhqa1pWb3iKo4GFf3GZk3GAeHWBbYCBkIdylIiMh4OIhX15dXJvaHlham1gbXZqZ2tsend6d1tnfXx4ZXJ9boR0ZXWFjIaVf2+LZmt6g3RsdGJcb3xrdHyLeoFmdIZ9bXFodX54fX9yfGx6eoF6d3BlbGJtiX5tblZrYHdWS2prT1JPaE5ZfGhiTlV1akxQVFVeZnaDZl1hcGhnYFdpXVtraEpFalpiZFdZVXlaTldualldbGVcWWVjXnRmbWRxZnJwdIB3cJqEdn9+eH98hYd9dXOCiH+Vgm5zeHp6c3OFh4mIhHiAfXaPf32EiY6EgoR7fouDe3d8d3eanZd6ioOHaXd+fGyEhZSAco+CcYaCfoJ/b2ZsZ1ddW1xbVGRwZV9YY3N1aXVwZGVjV1xcaIBwb3KAc4lkZXh+aXR2c3ODhXiBhHl3dHVua3twYmhrZ4Z0jYRuZl1ffW97iX1obHdmaWRVV3Jwjad8hHx2lpBzfHN7eW17epCEdpd8h4aChoN9dXBybWd1XW1oX2x1ZGdmaXpve3JZZ4F3dGdwgHiCdWJ3hYp8lIBui2pteoBwZXJlYGx5ZnJ2iXt9YXWDdmlrcXR6cHl4cn1mfn9/eHZuY2VhbYZ8bWtWa2NxU0xpa1BMTnBHXntmYU1VdGNKTlNXYGp3fWVdZ3NpZV9WY1dhcF1MS2tYY2FVVFVzV01YdWRaX2tgXFpjZV93Zm1icGlzb3J+dHSZgXd/gHh/foaEen12goR+mIVucnR7enRxhYWPgoB6i3V0kX99gZSOgIWEfH6Mhnp+gHZ7o6WKeYiGhWx1fHt1hIKMem6Fc3qFfYGDdW5qaGVWXVtbWlNibmVbWGF0e2pobWhfYldfW2mAamtvgGdsYWh5eWt0dHRvhYF6f312dW56aGp5al9lbmiBd4+EZ2VYYndpfoZ6b2lvZmZdVVhvaI+ndoF6fJCOeXVvfm9ydXmOf3eUdIWCf4WIdWpydmdob1xtZV5tc19nYWp4aHttW22Dc3Npb4B+eXdhd4SEeI+Ec4hxb3l/cWJwaFtudmRwc4h7eGFygHBnanhzcWt3dnR3Y4N7fnd2cGRjY258fWtrVWpjZ1NLbGhQR1JsRWF4ZWFNU3JdSk1UWWVrd3plXm1waWRdVl9Vbm5XS1NoWGZeWE1VbFVLXHlfW19rXV1bYmVgemhsYW9vdW5vd3V6l313gIF6gH+Hhnp5eoN+gZOEcXR0fnp3dIWIkH2AfZBsc5WBe4KfhX+HfYB+hoKAint2hKyff3qIh4RscoJ6doGAgXVuh298gHOJgGpvbWRkWF9aWlpVYmpnW1pfdYJpXm1sXGFWXFxrgWZydH1pal1rdnZodHdyboZ7fn15dnJtemhpd2ZdZHJneneSgWNjVGVvZoKEd3ZmaGlgV1ZZaGSQp25+eICLjnpwcHxmeG55i3p2jnGDfX5/hm5kdnNkaGhdbGJdb29bZ19tdWV6aF10gG9ya3F7fnV1YnSFinqHhoB/d3J1fnRhcGxZcHJicXGEe3VkcoBsYWx6b2poeXd0cmaFdXp6dXFkYWRuc35qbFRpX15UTHNjUUdXYkdidmVgS1RwWEpMWFhna3Z6ZGVucGZjWlhdWHZlVEpcY1hoWFlJV2VRSGJ4Wl1fbFteXGJkXoBpal9vdHltb252g5d5coGAfX+Ii4Z9dnaGeIeMfXN1dYF5enqCjI59foSJanSWgXuKnX1+hXmAen58hohzcY+ujHt7hpB+ZnKIenR9fXZyb4Zse35sj3picG9hZV5lVllZV2Nma2BdXXOGaVhwbVtfV1tcbHtjcHd2bGJbbXN0Z3V2cW2FeX+AeXdub3RlaXRlW2d0ZnZ2kXpfXVJmZmqCgXR9YWNpXFRYXmJjkKVoeXSChZB4bW55Z3dte4R6dIhygHh8eH9oZXZtYGZhX2pgXXRrWWVdb29iemVbd3xrbm5weHh0dGRyg5J+h4KIenZvcX1yYXdkWm5vYXBxgXxzZXGAZF5udmljZnl6dG1ugXVzfXNxYl5mbm99ZWlUaVlZVE54X1JKWllIYnRjYElUbVRJTFpWaWxye2JsbHNiYVlaW2F2W1NLZF1YaVNXSFlgTkdpdVheYW1bW19iY12FaWhhbnh5bG9rdoGQeG2DfoCBkoiEgXZ1iXSMhnNxdnaBd3x9foyPgH6TfnB4loN9mZJ5gIB4eX5/c4iDc3CZont6f4mVeWR1iHlzeHZsdG9+bHl8cJFyXnBuYGdibFRaWldoY21lXFxyiWZScm1bWlhYYGx2ZGl1ampeWm1zcWx0dHRrhnx+gHx3b25sZGlxY1trcmR0do9zW1dUZGByf35yglxhY11TWmBcZJOfZXJxhYSRdGxqeWxvb3p7e3GAdn9yenp6ZGV1Z15iW2FoXF53aFdiXW9oYXdhW3x2amlyb3d0c3RocIGUgoZ+hHZyanB7bGZ2V1xqbWJwcoB6c2VvfltgcHFiXmlwfGxsdH5ycXhrcGBcZWxte2FnVGdVV1JQdltTUFpSSGNzYmBHVmtRSVBaVWtra3xlbW9xYFtaWFlscFdSUGZXV2hTVEZaXE9IcnVYX2NtY1hhYGFejGpjZG15eGtvaXV5hntrg32AhZl8goR5fYhuj4Zxb3d6fHSCgnyLj4OClnR4gpSFgZ+JdYGAgXR/gnCHgnVvopd0e4aLh3tmeItvbntvZnhwemxzdnONa150bmFnZWtTXVtVZ2JsbFtccYxkTm9tXFZYVWdpdGhidGVlXVpudW5wdXV6bId8f3yId5BzY2Vrb2Fcbm1jc3iHa1pUVmNjd3x8cIVcY19jVFtgWmOWlWNucIOFinNqaHpuZXJ2c3treXR1b3p+dV9mcmNbXldiZFlhdWZVX2BtZGFxXV1+cGhpc3FzcHV1a22Ek4GIe4VxcmZufG9xblNaZWplcXOAdnNibHZVYnFrW15uZXxlbHV8cnJyam1gWWRqanheZlRlVVZQVW5YUVdUUEhlcl9hRldqT0hYVFZtaWR8aWt3a2FXXFVbdGNTUldpUVlmVFNIWltQTnh3W19mbGlaYmBeXo9uYmZreXVub2l2dn9+bYOAfoeXe3+HgYp/a5OIcmd0gHt1gIN9iY9/i5NyfYqRhYefhnt/hoxzgIZzfYJ1bqWMc4GNjHd4bnuNYGR8cWZ6c3lsbXF2g2dkfGxjZmdoU19fVGdgbG9cXm6OaE1pbGBVVlNvZnNrZXhkZV1ZcHRtcnt4c22Ie4B3nHt6bGFlbG1eYG5qZXB5fmdaVlhga3h7e2+DXmJeZ1ZZYFhknIhia3GBh313a2p3bFt2cWt5aXVybW97gHJYam1fWV1WYmRYZXFjVF5haWJibFpgfmxma3N1bm13dmtohYx/iHqHbXFlb3tscWxiWF9oaG9zgHRzXmltU2VwZVVibmF5YnB1e3Vrb2xqX1hhZ2h1XWVWYlZTTllmU09dT09IZW9dY0dZaU1JX0tYbWRfeGhufWRgVV5UXXRbVFJgZk5dYVRTSlxaUVp1dV1fZm1oWGJhW16OcWNnandxc25odnN5g3OCg3uIjX58ioeOem6QinRsc4J0f3+IhYeShJWPen2Mj4iRm4SAfIyEcn+Bc3R3cW6Tk5OTk5OTk5OTkpKSkpKSkpKSkpKSk5OTkpKSkpKSkpKSkpKSkZGRkJCPj4+Pj4+Ojo6Pj46OjY2Njo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo2NjYyMjI2NjY2Njo6Ojo6OjY6OjY2Ojo6Oj4+Pjo2NjY2Oj4+Pj4+PjoKAfnp6fX5+fX1/fn59fn5+fn5+fn+Af4CAgIGAgIB/gIGBgYOHjI6Ojo6NjY2NjY2NjY2NjZKSkpOTkpKSkpKSkpKSkpGRkZGSkpKSkpKSkpKSkpKSkpKSkpGRkZCQkI+Pjo6Ojo6NjY6Ojo2NjY2Njo6Njo6OjY2NjY2Njo6Ojo6Ojo6NjYyMjY2MjIyNjY2Njo6Ojo6NjY2NjY2Njo6Ojo6OjY2NjY2Ojo6Ojo+Ogn99ent8fX59fX5+fn5+fn5+fn5+f4B/gICAgICAgH+BgYCBg4aMjY6NjY2NjY2NjIyMjIyMkpKSkpKSkpKSkpKSkpKSkZKSkpKSk5KSkpKRkZGRkZKSkpGRkZGQkJCQj4+Ojo6OjY2NjY2Njo6Ojo6Ojo6Ojo6OjY2NjY2Njo6Pj4+Pjo6NjIyMjIyMjIyNjY2NjY2NjY2NjY2NjY2Njo6Ojo2NjY2NjY2NjY6Ojo6Cf3x6fHx9fn19fn19fX59fn5+fn5+gH9/gICBgYGAf4CAgICDhouOjo2NjY2NjIyMjIyMjIySk5OTk5OTk5OSkpKSkZGSkpKSkpKSkpGRkZGRkZGRkJCQkJGRkZCQkJCPj46Pjo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6OjY2MjY2Njo+Pj46Ojo2MjIyMjIyMjIyMjY2NjY2NjY2NjY2NjY2Njo6NjY2MjIyNjY2Njo6OjoN/fHp8e31+fH1+fXx9fn59fn5+fn5/f3+BgYGAgICAgYCAgIOGi42NjY2NjIyMjIyMjIyMjJA+LjExMTEvb4eEhISEiF0tMDAwMC1GoaGhoaGhoJqZmpqampqKg4SEhIOEd2VnZmZmaFxDREREREVCMS8wMDAwLlxwbm1ubnFJLDAwLy8sSYWDg4ODg4OLjIyMjIyMjY2NjYyMjY2NjY2NjY2NjIyMjIyNjY2NjY2OhX19e3t6fX58fH59fX1+fX1+fn5+fn9/f4GBgYCAgICBgICAgoWKjI2MjIyMjIyMjIyMjIyMjy0aHR0dHBpohoKCgoKGUxgdHR0dGTekpKSkpKSjnJycnJycnImBgoKBgYJyXV9fX19hUjQ1NTU1NTMeHBwcHR0bU2pnZ2dnazwYHBwdHRg7g4GBgYGAgYqLi4yMjIyMjIyMjIyMjIyMjY2NjY2MjIyMjIyMjY2NjY2GfH16enp8fXt8fn19fX59fX5+fn5/f3+AgYCBgYGAgIGBgYGChYqNjYyMjIyMjIyMjIuLi4uRiYeIiIiIho2QkJCQkJCMh4eIh4eHiZKTkpKSkpKRkZGRkZGRj46Ojo2NjYuJiYmJiYmIhYaFhYWGhYODg4SEhISIioqKiomJhoKCgoKCgoSKioqKioqKi4uLi4uLi4uLjIyLi4yMjIyMjI2NjIyMjIyMjIyMjY2Njoh8f3l7ent8e319fX18fX19fX5+fn9/f4CBgYGBgYGAgYCAgYKFioyMjIyMjIyMjIuLi4uLi5GTk5OTk46SkpGJh46KkJKTkIqQjY6OhYqRkZGRkJCQkJCPj4+Pj4+Ojo6Njo6Ojo2Njo2Njo6Ojo6Ojo6Oj4+Pj46NjY2NjY2Njo6NjY2NjIuLi4uLiouLi4uLi4uLi4uLi4uLjIyMjIyMjIyMjIyMjIyMjIyNjY2NiX59eHh5fH18fX19fHx9fX59fn5+f3+AgICBgYGBgYCBgIGCgoSKjIyMjIyMjIyLi4uLi4qLkJCRkZGPhI6QkIaKj4WNkJCMiIiIiY6IiZCQkJCQkJCQkI+Pj4+Ojo6NjY2NjYyMjIyMjIyMjIyMjIyMjIyMjI2NjIyMjIyMjIyMi4uLi4uLi4uLi4qKiouLi4uLi4uLi4uLi4uLi4yMjIyMjIyMjIyMjIyMjIyMjI2Lfnx3dnh7fXx7fX18fH19fn5+fn5/f4CAgIGBgYGBgIGAgIGChIqMjIyMjIuLi4uLioqKioqQkJCQkIqFjoiOhoaPiY2QkJGNiI2JkImLkI+Pj4+Qj5CPj4+Ojo6OjY2MjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMi4uLi4uLi4uLi4uLi4qKioqKi4qKi4qKi4uKioqKi4uLi4uLjIyMjIyMjIyMjIyMjIyMjIt+e3d2eHt8fHx9fX19fX1+fn5/fn9/f3+AgIGAgYGAgYCBgYGEiYyMi4uLi4uLioqKioqKipCQkJCPhYOMjpCOiYyKjpCQj4eNjImPho2Pj4+Pj4+Pj4+Pjo6OjY2NjYyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIuLi4uLi4uLi4qKioqKioqKioqKioqKioqLi4uKioqKiouLi4uLi4yMjIyMjIyMjIyMjIyMin18dnZ4fHx7fH19fH19fn5+fn5/fn9/f4CAgYCBgYGBgIGAgYSJi4yLi4uLi4qKiomJiYmJkJCQkJCMhoyJjoeFjYmOi4yMhIuMiY2Gj4+Pjo+Pj4+Pjo6OjY2NjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyLi4uLi4qKioqKioqKioqKioqKioqKioqKi4uLioqKioqKioqLi4uLi4uLjIyMjIyMi4uMjIyKf353eHp7enp8fHx7fX1+fn5+fn9+fn9/gICAgICBgICAgYCBhIqMi4uLioqKioqJiYmJiYmPj4+Pj5CMjouPjIqPjI6MjY2Ii46MjYuOj46Ojo6Ojo6Ojo6NjYyMjIyLi4uLi4uLjIyMjIyMjIyMjIyMjIyMjIyMjIyLi4uLioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi4uLi4uLi4uLi4uLjIiAfXh5enp6e318e3t9fn5+fn5/f35+f39/gICBgICAgIGBgIGEiouLioqKioqJiYmJiYmIiI+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pjo6Ojo6Ojo6Ojo6Ojo2NjYyMjIyLi4uLi4uLi4uLjIyMjIyMjIyMjIyMjIyMjIyMjIuLi4uKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLi4uLioqKi4uLh4B8eHp6eXt8fHt7fH1+fn5+fn9/fn9/f39/gIB/gYGAgIB/gYSJi4qKioqJiYmJiYmJiIiIj4+Pj4+Pj4+Pj46Pj4+Oj4+Ojo6Ojo6Ojo6OjY2NjY2NjY2MjIyMjIuLi4uLi4uLi4uLi4uLi4uLjIyMjIyMjIyMjIyMi4uLi4qKioqKioqKioqKioqKioqKioqKioqKioqKiYmKioqKioqKioqKioqKioqKioqKi4uHgHt5eXh6fHx6e3t9fX5+fn5+f39+f39/f39/f3+BgYCAgH+BhIiLiomJiYmJiYmJiIiIiIiOjo6Ojo6Pj46MjI+Sj5COjo6Ojo6NjY2NjY2NjY2NjIyMjIyMjIuLi4uLioqKioqLi4uLi4uLi4uLi4uMjIyMjIyMjIyLi4uLi4qKioqKioqKioqKiomKiomJiYqKioqKioqJiYmJioqKioqKioqKioqKioqKioqKi4aBe3h5eHp8ent7fH19fn5+fn5/f35/f39+fn9/f4CAgYCAgIGEiIqJiYmJiYmJiIiIiIeHh46Ojo6Ojo6Ojo+MkJOQkI+Ojo6NjY2NjY2NjYyMjIyMjIyMjIuLi4uLi4qKioqKioqKi4uLi4uLi4uLi4uLi4uMjIyLi4uLi4uLioqKioqKioqKiYmJiYmJiYmJiYmKioqKiomJiYmJiYmJiYqKioqKiomJioqKioqKhYB6eHl5fHt6ent8fH1+fn1+fn9/fX9/f35/f39/gICBgICAgYSIiomJiYiIiIiIiIeHh4eHjY2Ojo6Ojo6Pj4+PjoyNkI2NjY2NjY2MjIyMjIyMjIyMi4uLi4uLioqKioqKioqKioqLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4qKioqKioqJiYmJiYmJiYmJiYmJiYmKioqJiYmJiYmJiYmJiYmKioqJiYmJiYmJioqFf3l6eXh7e3p7fHx7fn5+fX5+f39+f35/fn+Af3+AgICBgYCChIeKiYmIiIiIh4eHh4eHh4eNjY2Njo6Oi42Nj5WPiYyPjYyNjYyMjIyMjIyMjIuLi4uLi4uLi4qKioqKioqKioqKiouLi4uLi4uLi4uLi4uLi4uLi4uLi4uKioqJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYR+eXt5ent7ent9fHt+fn59fn1+f35/fn9+f3+AgICAf4CAgICEh4mIiIiHh4eHh4eHh4aGhoyNjY2NjY+MjImKj42IjJGPjY2NjIyMjIyMjIyLi4uLi4uKioqKioqKioqKioqKioqKiouLi4uLi4uLi4uLi4uLi4uLi4uKioqJiomJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJg355e3p8e3p7fX17fH9+fn5+fX5/fn9+f3+Af4CAgH+AgH9/f4OGiIiHh4eHh4aGhoaGhoaGjIyMjIyLiYyKiIeJhoyOjJCMjZGOjIyMi4uLi4uLi4uLi4qKioqKioqKioqKioqKioqKioqKiouLi4uLi4uLi4uLioqKioqKiomJiYmJiYmJiImJiYmJiYmJiYmJiYmJiYmJiYmIiImJiYmJiYmJiYmJiYiIiIiIiYmCf3h7e3t6enx9fHx9f39+fn19fn9/f39/f4F/gIB/gICAgICAg4aIh4eHhoaGhoaGhoaGhoWMjIyMi4yOjoyKioeEiIuKjIuNjo+Li4uLi4uLi4uLi4uLioqKiomJiYmKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiomJiYmJiYiIiIiIiIiIiImJiYmJiYmJiYmJiIiIiIiIiYmIiIiIiIiIiIiIiIiIiIJ/eHp7enp6e3x8fX1+f35+fX1+f39/fn+AgICAf3+Af4CAgYCDhYiHh4aGhoaGhoaFhYWFhYyMjI2NjJCSjI2Ii4mJi4uLi4mLjIqMi4uLi4uLioqLi4qKiomJiYmJiYmJiYqKioqKioqKioqKioqKioqKioqKioqKiYqJioqJiYmJiYmIiIiIiIiIiIiIiImJiYmJiYmJiYmIiIiIiIiIiIiIiIiIiIiIiIiIiIiHgXx4e3x5enp7e3x9fX9/fn59fX9/f39+fn+Af4B/f3+Af4CAgIKEh4eGhoaGhYWFhYWFhYWFjIyNkY+PjZGJjIaJjIuIiImMiYeNjo+NioqKioqKioqKiomJiYmJiYmJiYmJioqKioqKioqKioqKioqJioqKioqKiYmJiYmJiYmJiYmJiYiIiIiIiIiIiIiIiImJiYmJiYmJiIiIiIiIiIiIiIiIiIiHh4eHh4eHh4WAenl9e3t7enx8fHx9f39+fn19f39/f35+f4B/gH9/f4B/gH+AgoSHhoaGhYWFhYWFhYWFhISLi46PjoyLj4iHiYmMjYWFjo2KiYyNi46KioqKiomJiYmJiYmJiYmJiYmJiYmJiYmKioqKioqKiomJiYmJiYmJiYmJiYmJiYmJiYmJiYmIiIiIiIiIiIiHiIiIiIiIiIiIiIiIiIiIiIiHh4eHh4eHh4eHhoaHh4eHhH55eX16enp7fXx8fX5+f35+fX5/f39/fX5/f3+Af39/f39/f4CChIaFhoWFhYWFhYWFhISEhIuLjI6MjI2Lh4mIiomGgoiNjoiKi5GTj4uJiYmJiYmJiYmJiYmIiYmJiYmJiYmJiYmKioqKiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiIiIiIiIiIeHh4eHh4eIiIiIiIiIiIiIh4eHh4eHhoaGh4aGhoaGhoaGh4eDfXp5e3p5enx8e31+fn5/fn59fn9/fn9+fn+AgICAf35/f39/gIKEhoWFhYWFhYSEhISEhISEioqOjYmIiIqKh4iHiomIioiIh4qGi5GPiomJiYmJiYiIiIiIiIiIiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmIiIiIiIiIiIiHh4iIh4eHh4eHh4eHh4eHh4eHh4eHh4eHhoaGhoaGhoaGhoaGhoaGh4J8eXl6eXp7e3t8fX5+fn5+fn59gH9/f39/f4CAgH9/fn9/gICAgoSGhYWFhISEhISEhISEhISKi5CPiYmJi4qHh4WHiYuKiYSLjYmOjYqJiYmJiIiIiIiIiIiIiIiIiYmJiYmJiYmJiYmJiYmJiYmJiIiIiImJiYmJiYiIiIiIiIiIiIiIiIeHh4eHh4eHh4eHh4eHh4eHh4eHh4eGhoaGhoaGhoaGhoaGhoaGhoaGgXt4enp4e3x7e3x+fn9+fn5+fX1/f39/f3+Af4B/f39/f3+Af4CChIaFhYSEhISEhISEhISEhI+Qj4+IiYuIhoeIiYuLjIuJioqNio6Oj4iJiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIh4eHh4eHh4eHh4eHh4eHh4aGhoaGhoaGhoaGhoaGhoaGhYWFhYWFhoaAe3h5eXh4enp8fX1+f35+fn59fn9/f39/gIB/gICAf39/gIB/gYKDhoiGiIaDhISEhIODg4ODkpKOioeKi4qLh4uNiYqJi4iHiouIio+SioiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIh4eHh4eHh4eHh4eHh4eGhoaGhoaGhoaGhoaGhoaGhoaGhoaFhYWFhYWGhn96eXh4eHl5eXx9fn5/fn5/fn1+f35/f3+Af39/f4CAgH+AgH+BgoOHjo+PjoiHhIWFhoaFhYWSkI6KiYmIiImKioiIh4aKjIiHiYmOkJGNh4iIiIiIiIiIiIiIiIiIiIiIh4iIiIiIiIiIiIiIiIiIiIiIiIiIh4eHh4eHh4eHh4eHh4eHh4eHh4aGh4eHh4aGhoaGhoaGhoaGhoaGhoaGhoaGhoWFhYWFhYWFhYWGf3l4d3d3eXp5e3x9fn9+f35+fn5+f35+fn+Af4CAgICAf3+Af4GBg4eOjo6Ojo6Mjo2OjY2MjZCQjomHhoiJiYeIiouIiYyJiYaKjY6PkYuIiIiIiIeHh4eIiIiIiIiHh4eHh4iIiIiIiIiIiIiIiIiIiIeHh4eHh4eHh4eHh4eHh4eHh4eHh4aGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaFhYWFhYWFhYWFhYZ+eXd5d3d6eXl8e31/fn5/fn5+fn5+fn9+f4B/fn+Af39/f39+gIGEiI6Ojo6Ojo6Ojo6Ojo2NkJGOi42JjIiIiYaHiYaIioiHi4yLjpCQiIeIiYmJiIeHh4iIiYmIh4eHh4iIiYiIiIiIh4iIiIiHh4eHh4eHh4eHh4eHh4eHh4aGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoWFhoaFhYaGhoWGhYSEhIWFhoaFhIWFhX55d3l2eHl4e3x7fn5+fn5+fn5+fn5+f39+f39+f39/f35/f3+AgYOGjY2Ojo6OjY6NjY6OjY2Qj42Ni46KhoiKhISLiYeDhYSDi4mLj42JjI6QkI+NjYyLjY6Pj42NjI2Nj4+Pjo6MjYyMjY2KiYiHiImHh4aHh4eHh4aGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoeHiYqKiIeJi4yNjo2LiImLi42OjYyJiImMgHl3d3Z6eXh7e3t+fn5+fn5+fn5+fn5/f39+fn5/f4B/f4B/f4CBg4aMjY2NjY2NjY2Qj4+Pj46NjI6KiYuMjIeFiY2Lh4aIh4aHh4uNjo6Pj4+Pjo+Pj4+Pj4+Pj4+Pj4+Ojo+Pj4+Pj4+Pj4+Oj46Oj46Mi4uJh4eHh4aIhoaGhoaGhoaGhoeLiYeHiIiLjY2Mi4yLjY2Ojo+Ojo6Pj46Ojo6Ojo6Ojo6Njo6NjY2AeHZ4eHp4enx6fH5+fn5+fn5+fn5+f39/fn59fn9/f39/gH9/gIGDhoyMjIyMjY+QkpOTk5KSjYyMjIqHioyKh4eJiYWCiouIiYWJjpCNjo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6NjI2NjI2LiYaHh4eHiYqLjY6NjYyNjY6OjY2OjY2NjY2NjY2NjY2NjY2OjIyNj4+OjY2MjIyLi313dXd5enp7e3p+fn5+fn5+f35+fn5/f39+fn1+f39/gICAf3+AgYOFj5KRkJGSk5OTk5OTkpKLi4uLiomMiouLiYuKhoeOjYiIjI6OjIuMjIyNj46Njo6Ojo2NjY2MjY2NjIyMjIyMjIyMjY2NjYyMjI2NjYyMjI2NjIyNjIyMi4yMi4yMjI2MjIyMjIyMjIyMjIyLi4uLi4yNjY6Sk5OSkpSRkJOVlZSTk5COjo6Oe3Z2d3h6ent7e31+fn5+fn5/fn5+fn5/f35+fn9/f39/gIB/f4CBgoSNkpKTkpOSkpOTkZKSkoqJioyJi4qJjIuKioiHiYqKi4mKjY2Mj46Nj5KUlJOUlJOTkpGSkI+Ojo2NjY2Pko+OkZGOjIuKioqLi4qKi5CPjoyMjIqKioqKioqKiouKioqKi4yLi4uMjIyKiouLi46RkpOTk5SUk5STk5SUlJOTk5KSkpKSk5F6dXZ2eHt7e3p6fX5+fn5+fn5+fn5+fX5/fn5+f39/f3+Af39/gIGChIuRkZGRkZKSkpGRkpGRiYmIiIqMiYiJiYuJhoSJhoyKh4ySkpKTk5OUlZWWlZWUk5OUlJSUlJSUlJSVlZWVlZWUlJOTkY+QkZKQjoyRlZWVk5KSjpCPjYqKi4qKi42OjY6RkpCRkpKSkpGRkpKSk5OTk5OTk5OTk5OTkpOSkpKSkpKSkpKSj3h1d3l6e3t7ent9fX19fn5/f35+fX5+fn5+f39/fn9/f4B/f3+AgYKEi5GQkJCSkpKRkZGRkZGIiIiIi4uJg4eLi4yMiIeHjYyNkpSSkpOTlJWWlpaVlZSSkpOTlJSUlZWVlZaXlpaWlpWUk5SUlJSVlJSUk5OVlZWUk5KTk5OTkJGSkZGSk5OTk5KSkpOSkpKSkpKSkpKSkpKSk5OTk5SUk5OSkpOTkpKSkpGRkZGPdnJ3enp7e3t8fX59fX1+fn9+fn9+fn5+fn6Af39/f3+Af3+Af4CBgoSKkJCRkZGRkZCQkJCQkIeHh4eIiIiFi4+KjI6Njo+OkJWUk5OTk5SUlZWVlJSUk5KSk5KTlZSUlZaWlpaWlpaWlpSTk5OTk5OUlJOSk5SVlZSTkpKSkpOTk5OTk5OTk5KSkpKSkpKSkpGSkpGRkZGRkZKTlJSUlJSTkpGRkZGRkZGRkZGRkYx0c3d6ent7e3x9fX1+fX5+f35+fn5+fn5+fn9/f39/fn9/f39/f4GDhIqQkJGRkJCQj4+Pj4+Ph4iKi4yNjYuOj42Mjo6RkpGSk5OSkpKSk5SUlJOSk5OTkpKSkpOUkpOTk5WVlZWUlZWUk5OTk5KSk5OUk5KTlJSUk5KSkpKSk5OTkpKSkpKRkZKSkpKSkpKSkpKSkZKRkZGSkpOTlJSUk5OSkZGRkZGQkJCQkZCRinN0dnp8fHp7fXx9fn59f35/f35+fn9+f31+f39+fn59f39/gH+AgYKDipCQkZGQj5CPjo+Pjo+Oj4+Pj4+Pj4+PkI2OjpCRkpKSkpKRkpKTk5OTkpGSkpKSkpGSkoOQk5OSk5STk5OTlJOSk5OTk5OTk5OSk5OTkpKSkpKSkpKSkpGRkZGSkZCRkZGRkpKRkZGRkpGRkZGRkpKSkpKSkpKSkpKRkJCQkJCQkJCQkJGGc3V2e3x8e3x9fX1+fn1/f35/fn5/gH9+fX5/fX5/fn5/f3+Af3+BgYGKkI+PkI+Pj4+Pj4+Pj4+Oj46Oj4+Pj5CQiI2PkJGRkpKSkpOTk5OTkpKSkpKSkouKkpKNepGSkpGRkpKSkZKSkpKSkpKTk5KRkZKTkpGRkpKSkpKRkJCQkJGRkZGQkJGSkZGRkZGSkZGRkZGRkZGSkpKSkpKSkZCRkZCPj4+Pj4+Pj4+PkX9ydHh8fHx7fHx9fX5+fn9+fn5/f3+AgH99fn5+f39+f39/f4CAf4GBgYqPj4+Pjo6Ojo+Pj46Ojo6Ojo+PkI+Pj4+GjpCQkJCRkZGRkZGRkZGQkJCQkJGSiHeRkoR3j5GRkJCRkZCQkJGRkZGRkZGRkJCQkZGQkJGRkZGRkI+PkJCQkJGRkJCQkJCRkJCQkJCQkZCQkJCQkJCQkZCQkJCPj4+Pjo+Pj46Ojo+Pj4+PeHJ2eXx9fHp9fH19fn5+f35+f39/f4CAf39/fn5/f35/f39/gIB/gYGAio6Ojo6NjY2Ojo6Ojo6NjY2Oj4+Pj4+PjoiQkZCPj4+QkJCQkJCQkI+PkJCQj4+LboqRenWMkI+Pj4+PkI+PkJCQkJCQj4+Oj4+QkI+PkJCQkJCPjo+QkJCPj4+Pj4+PkJCQkI+PkI+Qj4+PkI+PkJCQkI+OkI+Pj46OjoyMjY2NjIqDiYhzc3Z4fX58eX18fX1+fn5/fX5/fn9/f39/f4B/f39/f4CAgH+AgH+BgYCJjY2Ojo6Ojo6OjY2OjoyNjY6Ojo6Ojo2NiJCRkI6Njo6Ojo6Ojo6Pjo6Ojo6Pj4pogI92dYmPjo6OjY6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Pj46Oj4+Pj4+Pj4+Pjo+PjY2MjYyNjoyLi4mJiYiFhYSDgoKEgnR5fXp4dXJrZWltb2xmZmdncHNzd3l9fnl6e3x9fX1+fn59fn9/fn9/f39/gIB/f3+AgIGAgIB/f4CBgImNjY2NjY2MjYyMjIyMi4uLjYyMjIyMjIyGj5GRjIyMjIyMjIyMjIyMjIyMjIyNiWl3jHV1ho2NjY2MjIyNjY2NjYyMjI2MiomKi4uJh4KAh4iEgXt6gH57fXx8fXlzcnJycnV1cG1ramppZ2NkYV9bXF1eWFVXWFlTS0VJSkpLTE1PT0tgdHR3eX19eHp5e3x8fX5+fn1+f39+f35/f4CAgH+AgICBgYCAgICAgIGAf4OEhYSFiIuLjYyMjIuLi4yGiYqKioqKh4OOkJGNiouLi4uMiYmKioqKiouLi4eAaG2BcXOBhYWEhIeJiYWCg397fHl6e3pzcHFxcW1samdsbWdlZmVmZGNlZGVkZWVlZWRkZGNhYV5dXFpYWFdUUFFSU1JTTU1KSUZESEpHR0hHR0xOSWdzdXh6fXp4d3l8fHx8fn5+fn9/fn9/f39+f4CAgIB/gICBgICAgICBgYFnXmBjYWNucX17ent/fXd8fHZ4ent4eHpvcHt4eXt8e3h3e394dXd0dHZ1dXZ3dWhgZ2BkaW5naGtsbm9tamlpaGhlZWRkZF9gYWJgYF5dWVhaWltdXV9gX2BfX19gYmFeXl5eWVldXF1bV1dWUlRSU1NOUUpISUZERUhMTEhGR0lLSklNbXJ0eHp7end3eXt6e3x+fn1+f39+f35/f35+gIGAf3+AgIGAgICAgICCgWdYW1pZXFtcY1xaXF5ga3FtcHBvbm5vbmtpbmxrbG9qaWtraWpraWZmZ2dnaGhmX2tsYGpoaWdjY2JhYmBgXVhbW1dYV1RWUVBUU1NNSkxLTExOTk9UWFhXVVVUUlBQTU1QT05LTE1QUU9MTEpHSUlHSEhJSEhIR0ZHSEpKSEhISUlISVZwc3Z5ent5dnZ5enp7fH59fX5/f35/fn5+f3+AgX9+f4B/gICAgICAgIGBbFtYVlZWWVlaWVlYVVZoamxubmxra2poaGloZGVkYlxiZl9fYWNfXF9dYF1eWlxjdG1lcXBlXVpZX1tYV1NOTUxLS0tMSUtNTktKS0tMSktQTEtLRkdHSUlGR0lISUZFSEdGRkVERUVEREVJSUlHSEdIRkZLTUtJSUlIR0hLTU1LTExMVXFzdnl6e3l2d3h3ent8fn1+fn9/f39+f3+AgIGAfn5/f4CAf4CAgIB/gYJoUlRVVlNVV1lZWVdXV1tbYWNfXlxbWFZWWVZSVFJRUVVUU1NUUE1KTU5QUk9NUmhwbGFwdWtUUFFUUFBOTk9NS01MS0xKSktLRklJSkxJR0pISUlFR0dGRkVFSElKR0ZHRkZHR0hKR0dISEpMSkpLSUlISktLSkhKS0pISUtMTU9QUEtUdHN1eHp6eHZ2d3d6enx+fX5+fn5/f35+fn+AgYB/f3+AgYB/gICAgH+AgmlQUlRXVVRWWVdYWFpbVFRTUlBRU1FRUU9OTlBQUU9MTlBPTk5NTEtNTk5QTU5UZmxuY29zcldOTk5PUFFPTk5PTk5QTk1NS0lISEpJSUlJR0ZHR0dJSkhJSEhJSEhHSEdISElISUxLSklISkpJSkpIR0pMS0pJSUhKSktMTk1NTU9RTFVzcnN3enl3dnR2eHp7fX19fn5+fn9+fn5+gICBgICAf4GBgH+AgICAgICBbE9PTlRZVVVdW1lXV1hOTUpKSUZKT0xKSkdJSk1NS0pMTUpHSUlJSktLRkJFSU1haGtxcW9uWUxOUlZQT09NTk9MTk5OUFBPTE1MTk1MTEpJSEdJSElISElJS0xLS0pJS0pJSklJSUlJR0dKSUdJSUpKTk1OTEhJSklJSk1PT01MT1JOWXBwcnd4d3d0c3R3enx+fX5+fn5+fn5+fn9/gICAgICAgYCAf39/gICAgIFvS0pNTlFOTlVXVlZSU0lFQ0VFUkREQT5CP0RAQD5CREFAQURHRkVIRUFLT0dITmFoZnBva2hjXmNoV0hISklKSUlLSkxQTk1MTU1MTU1NTElIREZGR0ZGRklKSUlLSkhMSklKSkpJSEhKS0tIRkdJSklLTU5OSktPTUxLTU1PUE5QT1BgcG9yd3h2dHJzdXd6fX19fn5+fn9+fn1/gICAgICAf4CAgIB/f3+AgICAgXNQUE5OUE1KS1BSUE5RQ0RCQUZRRT1DPT9FSDk6Oz0/PTxBRkA+Ojs+PkBUXlldaG1pbm1sampsbFZGQkRFRUZFR0dHR0pHSEpLR0NER0pHQ0RFQUFDR0hHSEdISktKSElMS0lISktLTU5MTUxMSkpMS0lLTU9PUFNRT1BQTk9QUlFNUGdwb3N2dXRycXR4eX19fX1+fn5+f4B+foCAgH9/gIB/f4CAgH+Af4B/gICCdlRVUVFQT0xNUFBOT09BQkFAQkE/Oz48Pj8/Ozg5ODs7OkA6Oz48Ozs8PEVZZmlrb2ptbWpqa2xXQkZGREdJSEM/QEBAQUFCQUE/Pjw9PkFAQD8+P0BFR0dHSUtMTk1OTUxNTUpLTVBVU05MTlFOTk1OTE1NTk9OTk1LS05OTk1OTkxUbnBwcnR1c3Fydnh5fX19fn1+fn5/gH5+gICAgICAgH9/gICAgH9/gH+BgIJ4UVFSVFJTUVNTUVFST0BAPT4/PD8+QEE/PT45Ozo7Ozk5Ojg4Ozw5Nzk7OzxOaW5va21saWlsVUA/Q0ZEQ0NDPzs+PkBDQ0E/Pj9BPkBAQj9APD9CQEFDRUVFSktQT1BPTU1OTExMT1JRUFJOTExPTUtOT0xMTEtMS0tKS0tKTU1LS1xxcXF0c3VycXR4eHp9fn1+fn5+f39/fn5/gIGAgH+Af4CAgICAf4CAf4CAgXxSTU9RUFFSUlRSU1NOPDs8Ozs7P0BBQkA9PDk8PTw6Nzk6Ojk3OTo6Nzg6ODdJaW9tcG5ra1c8Oz1AQUA9Ozs+PD09QEJDQT9BQkE9Pj09Oz0/Q0RCQD9BREJFR0pKSkpKTE1MTExNTExOVVNLTE1USVBKSU1KSUpLS0pJSEdKS0lKZnJxc3RzdXJydnl5e31+fn5+fX9+f39/f36AgICAf4CAgICAgIF/gIF/gYCBgFZMTlBQTlJRUFBRUU44PT88PDo9PkFAQT8+PkA/Pj48PT0/QD09PT9DOz09PTxKZ3J3c2xcPz09Pj9AQUA/P0E/QEBBQEBAPT8/PTw6Oz09PD9AQUJCQUBCREZGRkdGR0dISUtMTExLTEtKS0lKSk1MTEpMS0lISUxMSklJSElLR01tcHF1dHR1c3V4eXl8fX5+fn5+fn5/gH9+gIB/f39/gH+AgYCAgYCBgICBgYCCYUtPT05OT1BPT1BQTzo8Pjw9Oz8+PkFBPz0/Q0NEQT89PkBBP0A7XW5APkRFPz5HW3lyVEA8Ozo9PkFBPz5AQD9BPz89PD48PTs7PD0+QUA/QD5AQ0NEQkRFSEVFR0hISEdGSUpJSUlJSUhKSkpKTEtKSklJSEhKSktMS0lLSkpIVnBwcXNzdHR1eXp7e3x+f35+fn5+f39/f39/f3+Af4CAgICAf4GBgICAgIGBgIJtTFBRTk9QTk5PUFBPPjw8PT4/P0A+QEA/Pz9CRkQ+PDw9QD04Ojttdkg4Ozo9PkA9Z1w5PD08ODo7Pz49PD07PEA9PTw8Pjs9PD0+QUBCQUBAP0JEQ0RFRkZGQ0VHSElJSEhJS0tMTUpKSUpNTUpLSktJSEhISEpJSktKSk5MSUlfcHBycnJ0dXZ6e319fH5+fn5+fn5/f35/f36AgIB/gICAgICAgYGAgICAgIGAgnZNTk5NTk5MTE5QT0w+QTw8PT8+QkM/PkFBQUJBQFlRPD09SUxFRnZ2TTc4ODo8Pz9TVTk7PTw6Ojs+Pz89PDg6Pjw9Pj89Oz4/QEJDQkJDQ0FCQkFCQkRCQkRCRENGSUdGRkhJSUtNSklKSktMSkpJSkVESUlGRkhISUpKTEpGRmdwb3FxdHZ1d3t8fH18fn59fX1+fn9/foB+fn+AgH+AgICAgICBgYCAgICAgICBek5JS0tMTExFSUxOTTw/PDw9PkBAQUE7QkNCQ0BDc3lJO11/g395fHdWPD0/PT4/QlVbOjs9Pj89PT5BQ0A8OTtBPz4+QT07P0JAQkNCQENDQUNBPT0+QD0/QUFBQENFRUBAQ0JDR0dFRENGRUZGR0VEQEFHR0ZDRkRHSEpHQz5IbG9wcHF0dXZ5fHx9fHx+fn1+fn5+fn5+f36Af3+AgICAgICAgIGAf4CAf4CBgIF+UUhLTU1NS0pLTE9RQD8+PkFBQEBBR0FCRENFQUhyeWtigoSDgoOAfV0+QENAQD8+WmM+Oz1BRUFCQkZIQz08QERDQUE/Pj1AQT4+Pj88PkBER0VAPkBBP0BDRkVDQkNDQEJEREJERUFCPkFCQkFCQEA9QUJDRENDQUNFR0E/PVZwcHFwcnV1d3p8e3t7fX9+fX19fX1+fX5+fn9/foB/f4CAgICAgYCAgIB/gIGAgX5SSEtNTUxLS05OUlVEQkBDQ0FBQkBCQ0BAQUFARm90fYKCgYN+fYV1TEFDRUA/P1Bydkw/Q0VJSklJTU1LRURGR0hGR0VFRUREQ0E/QD4+QkZKSkdFRUdGRkpOTktKSUdHSEtMSUdHQ0REREVEQUJCQ0BDREVEREVERUZDQkFFZW9wcXF0dnV4e3x6fHx+f319fX19fn59f4B/f39/f39+gIGBf4CBgICAgH+AgICAfVJJSUpKSEpKTE9SU0dGRUdIREdIREA+PDs+QEVFaHN9gXx/hH55hXFCREVEQ1d1h4iIf1hHSEpNTE5PT0xIR0hHSElJSEhHR0hIRUNFRUVFRkhKSkZFR0lKTU9PTU1LSktKTU5LSUhHSElIR0ZFRkZGREZIR0VFSEhGSEdIRlFubnBxcnZ2eXt7e3p9fX5+fX19fX1+fn1/f39/fn5/gH+BgYGAgICAgICAf4GBgIB8UEhHSElGR0lKTU5OSkxJSUpLTE5KRkNBQkNGSkdge4B/d3+EhYOEimxBQVV0h4mHh4eIg1dITE1MTU5MSkdHR0dER0dHR0ZIRkhFQ0RERkVEREhIQ0NDR0pKS0xMTExMTElKS0pKSUlJSEpISEdISUhIR0hGRkZISklJSUlIXW9vcXJ0dnd6e3t6e319fn59fX19fX5+fYB/f39+fn+BgIGAgYCAgICAgIB/gYCAgHxNR0ZIRkVGR0dKS0pMTUxLTU5NT0tJSEhKS0tMTE5bfIKCg4OFhoaIg1VshYeGhoaHiIiHfFBLTEtIR0ZGREVDQ0BBQ0NDQ0ZGRUJAPT5AQUFAQkQ/Pj9ERkhERUdJSklJSEhJR0lJSkpJSEZKSkpKSUpJSkpKRklMTEpKS0tmb3BzcnR2eHl7e3t8fH1+fn19fX19fn59f39/f35/f4CAgICAgYCAgIGAgICAgICAfU9GRkdGR0hHRUZHR01NTUtMS0lHQ0NDRElLS0xMSlWBg4SEgoKFhoaDgoaFhIWGhoaHiIaKdUlJRkI/P0A/Pz48PDw+Ojo8QUFAPjw5OTg8PD07Pjs5Oj9BQkBBQ0NCQEFCRERCQ0ZISUhISExNTEdJSk1NTk1KSktLSkxMU2xwcXRzc3d5e3t7fH19fn9+fX19fX1+fn5/foB/fn9/gICBgIGBgICAgYCAgIB/f4B+UUZFRkdJSUdEQ0VGTk1MSklIRT85Oj5ARUhISkpJZYWEhIR/gYKDgoOEhIWFhoeIiIiJiYyOZkJCPjg4Ojo5ODc4ODk2NDc5Ozw6ODU2Nzc4OTc4NzY4ODs7Oz1AOzk5OT08Pjs7PUFDRUhKTUxMR0lIT1JRUFBOTE1NT1Fdb3BydHN1eHp7e3x8fn5+f359fX59fX5+f39/gH9/f4CAgICAgYCAgICAgICAgIB/f39RR0ZHSEpIRkVGR0hMTEpJSUdDQjU2OjxDQENHSUlqhoSEgX6Bg4ODgoOEhomKi4yLiomKi4yJVDo4NjU2NzY2NjQ2NzYzNTY4Ojg3NjU2NTY3Njc3ODo3Nzc4OTs3NTc4OTc5ODc2OjxAR0ZJRklGRUZPU1JTU1JPUFBSVGVwcXN0dHd5e3x7fH1+fn5/fn19fX19f39/f3+Afn+AgICAgICBgICAgICAgICAgH9/flJISEhJS0lHSUpJSkpLREVIRUJANTc4OD06PUVDQmaFg4GAgYODg4ODhYmKiomJioqKiouJiYqBSDY3NjQ2ODg3NDU3ODQ2NzY6OTc2Njc2NTo5Ojs6Ozg5ODk4Nzc3OTo5ODg3ODU4OTtBPT4+QkE/QUtMT1FQUU9PT1JXa3FydHR1d3l7ent9fX5/fn9+fX19fX5/f4B+fn9/f4CAgH9/gICAgICAgH+AgICAf39+VEhHSUlMTUtKS0tMSUg/QEFAPDo1Nzk4OTc7Qjo9cYSAgYOEhISEhIaJioqIh4iIiYqKjIqJiYx6Pjk4ODs8PT45Ojs7ODk7OTo7Ojk5Ozo5PT09Pjs7PD06Pjs5Ozs8Ozw8OTk8ODo6Ozo5OTk8Pzw8QUJESUpNS0lLTFdvcnN1dHZ4e3t8fHt9f39+f359fX19fn9/f35/f39/f3+Af4CAgICAgICAf4CAgH+Af35URkVGSUxOTkxKSk1CPzo7PDo4OTk4OTo6Ojs/Pkh+hIKChIWFhYaIiYiHhoaGiImIiYuMi4mKioxsPDs+QUNFRUFBQUI+QEJAQD49PT5APz8/QD9APT0/Qj9BQT9BQD1AQEA+P0E9Pjw7Ojs5OTs/PTs7PT1BQUNBQkNBWHBxdHR0dnl7e3x9e31/fn9/fn19fX5+f35+fn9+f4B/f4CAgIB/gIGAf39/gICAf39/flJFQ0FHSk5PTElHSzo4Ojs5Ojo8PTo7Oz09P0BCUoKCgoSFhIWEhomJiIiGhoaHiImKi4uLioqLiotePkNHSUtKSUZHR0RGSEdFQkBAQ0VDQkFCQ0I/QERIRENFREVFQkZFRkRFRkRAQj88QD49P0A+Pz8/Pj8+Pjo7PTxgcXF0dHV3enp6fX19fn5+f39+fX19fX5/fn5+fn5/gH9/gICAgICAgICAf4CAgIB/f4B+UERAPUNIT01HRkJEOTc6Pjo8Oz4/Pz89QUBDREZYhYKDhIWFhoaHiYmIh4aGhoeJiYqLjI2MjIuKiohXR0xNTUtOSUlLSUlKSklFQ0RGR0ZEQ0VGREJISUtIR0dGR0dFS0lLSUpLSkNGQ0NEQkBBQ0JEQ0NERENAPTs9QGhwc3R0d3d6eHt8fH19fn5/f359fX1+fn9+fn59fn+Af3+AgH9/f4CAgICAgICAgH+AgH9PQT49P0RMS0BCQkE5ODw+Ozw7PkA/QT9CQkdHSVmFgoOFhYaHiImJiIiHhoaGiIiIiYqMjYyMi4uKjH9QTU9OTE5LSkxKSUlISkZER0hISUVFSEZGRUxMTUlKR0dISUpOTU5MTE5LSEZHR0VFQ0ZGRkZERUhIRkNBP0BMbHB0dXZ4eXl5fHx8fX1+fn9+fn19fX1/f35+fn5+f39/f39/f3+AgICAgIB/gICAgICAf1FBPz4/RUdHPTxAQDk4PDs7PTo/QD4/QENGSUlQX4KDhYSFhoaHiIiIiIiIh4eIiIiJioyNjIyMjIuKjXJOUU9OTExLTEpIR0VKSURKSEdLSkhKR0dHS0xOTExISElKTVBOUE5NT0tJR0lKSElESUhIRkZHR0lHQ0JBQ1VucHV3d3l7eHl6enx8fX5+f39+fn1+fX5+fn5/f36Af4B/f3+Af4CAgICAgICAgICAf39/VERBQUJHSEI/OD9AOTo8OD0+Oz1BPj9BREhKTFVxg4SEhIWFhoeIiIiIiIeGiIiIiImJjIyLjIyLi4uLi19SUlBNTk1LSkdGQkdKR0xKRktOS0pKSk1NTE9QTkhJS0xPUVFQUU9PSkhKSk1KTEZHSEdGR0hGRUVCQUJCXG9yd3h5enl5eXp6e3x+fn5/fn59fX19fn9+fn9+f4CAgIB/f39/gICAgICAgICAgH9/f39VRUNFRUdHRUQ7P0E7PTw5QD4+QEJHR0FHS0xQVnmFg4ODhISGiIiIiIiIh4eIiIiIiIqLi4uMjIyMi4uNfFhWUlJUUk9MS0pERUZLT05PV1VRUE9RU1JNU1RPTVJMUFNVVlJTUVBMSk1NTUtOR0dKRkZJSkRERUVCRENjcHV5eXp6ent6e3p7fH59fX9+fX19fXx9fn5/gH9/gICAf39/f3+BgYCAf39/gIB/f39/f1VGRkdIR0dIRj5AQj0/PT1CP0NDRlZORk5PUFRYe4aDhYWEhIeIiIiIiIiIiIiIiIiJiouKioyMjIyOi4uLaFdWa2FFUlFRUEk7O1FTUmB1XVVWVFZZWVJZWFJaZlBVV1pdUlRXUVBOUlFQUFFLTEtISEpIRUZJSUlISWlydnl5enl6e3t8ent8fXx9gH59fX19fX1+f39/f3+AgIB/f39/f4CAgIB/f3+AgH9/f35+U0hKSUlHRkZFPz9BQUVCQ0dFREVMWFJNVFVWWFt8hoWHhoWGh4iIiIiIiIiIiIiIiIiIlJyMioqMfWGKi4uHbFtkVTpYWFhTUT9AVlVZXGRgVllicl1dVl1aVkVRWVpbWV9UWmdSVlZYVVRWVE9PTUpMS0lJTE1LT01Tb3N2eHl4d3p5ent6e3x9fH5/fn1+fX19fn1/f39+f4CAgH9/f3+AgICAgH9/gH+Af39+fn5WSkpJSEdFRERCQT9ITUlNUEtJS1BUU1NYWlpcXHiFhIWFhYWGh4eHiIiIiIiIiIiIiImcnaCPiY5nO36MiYqLeW5wWFpbWlJUUlZWVFpadYNZVX2QYFxYXV9XSVZdXVtbX1lJWVhZW11YWFlXUlFNUFFNTU9TUVFVUmFzc3Z3d3Z4eHh6e3t8fX19f39+fX59fX1+fn9/gH9/gIB/f3+Af3+AgICAf39/gIB/gHh5fVlOS0lJSEZCREBBOlBRUVdYUFBPUVNUVFhYWVpbboGCg4WEhYaHh4eHh4iIiIiIiIiIiJaanJeIioFuhomIh4OKf2ZZWVxZU1VUV1JRV1ZjloBRZXJYWldfZ1BgZltbWFxnYUdPWmhnXFtcXV1XU05TUFBRVlZWVllabnJ0d3Z2dXh4eHt7fH19fX5/fn59fn18fn9/f3+Af39/gH+AgH9/gICBgYB/gH1yfX9/b3R8XVNQT01LSkVDP0A7UFBaWltSU1FPUlJSVVNWVFdfdXiAhYSEhYaGhoaHh4eHiIiIh4eIh4ORjomJiIaFiIiGfYB7XFBVWFRSVFJRUUxPTUtmeVtdVFlVVl1aTFRaVFNUXlpYV1dXemtYW1tcXlRRUVBJTk9XVlhbWmRxc3Z2dHR2eHl5e3t8fX19fn99fX1+fX1+f39/gIB/f3+Afn57eHd2c3V7f3+AgHRrfn5rcnleW1ZVVFJPS0ZDREFNXoNsVlJTTk9RT1FVUlNSUlRjZHaAgoKDhISEhIWFhISDhoaGhoeIhn6JiYmHhoOHh4d5bXFWSUtNTktNS0hKREZIRUM+VGNVf1JRUU5LUlRRTU9ZUU1OUVNVVU1RU1JQT01MSENJSFJUVVpcbXJ1dnV0dHd7enp7e317fX19fn19fX59fn9/f39/f399fX5+f39/f4B+e3Zzd31+fmR1fWlxdF9kXV5bWVZQTElMSWFsknRQUVNOUVJRUltSU1JRUlZUYnN7fH+AgYKBgX99e3uAf4OChYaHgoaGhoGEgYaFhnVfXUtDP0NDQ0NCP0RQQkNAQz5CSEdWQEhOTUddaVFIRk9GREVGSEdIQ0RIR0hLR0RCQURBT1FNU2RzdHZ1c3R2enx6e3t7fHx9fHt+fX19fn5/f3+AgIB/f3x8fX+Af39/f4CBgH12dHt/bWh8Z25xZmllZGJcWFNRUFVSc1dlW09PT0xRU1FVWVNVUVFUUk9WYGtscnZ7e3h5dHJuc3RzeXh+foOAg4OCgIKAgoGCbE1HPj87Oz5AQD8/PmpRS2FFRkhJRUI/R0xNR01RVUlCRT8/PD08PT0/PT9BQ0NAPzw9Qj5KTUdVbnV1dXN0dnh6fHt9fHx9fX19fH59fXx+fn9/f4B/f39/enl3eHd2dnh7foB+fXt4dnx1YXhnbHBqbGppZmBbUVJaXFleSkpQUU5LTFFSUVRVVFdRUVdVUFhbYl1hZ21tbG9rZ2BucmptbHF1e3p9e3h6fHx4d3hlQ0BAQj06QkNBQURCXF1Pe05PTk5LTE1PT1FMS0xXTUhHQEE8OTc3NTk5PTs7Ozg5ODk/O0JIP1xzdHV2dXZ4enx8fH18fH19fX58fX19fX9/f39/fn9/f314dXZ6e3p3eXh1d3t8eXh1eXdjcWhpcG1ubW1oZl5PUF5cWklIUFJRT01QUU5RUlRWWFNSWVROWVpbV1ldXl5fZWBdXnF2a15gZ2t3b29sam9ubmxmYllIRkZIQkFHSUVFRkRNUk9hV1JXUVBTU1JVW09PUVdQTUlERj46OTY1ODc5Nzk6MzY2Nzk1PEI9ZXN0dnh3eXp7fX18fHt8fX1+fnt9fn19f39/fn5+fn9/e3d1eX18enh8fHx8dHd2d3Z1d2tuaWhxbm9vb2prYFVXXlpXTUxUVFNRUVVPTFJTVFdYVFRYUkxYWVpWWFhWWFldV1hYaHNrXVZhc2thYV9eZGFfXllVUU1PTkxJSEpLSUhGQ1FQU1tXVFROUVNZU1xlVU9TVFFOS0lIQz9BOTk4ODk3ODg1NzU3ODU5OUdtcXR4eHp7e31+fX18e318fn5+en1+fH1/f359fn59f358dHR1e3hycW9vbnR4cXJzeHZ1cWZkZ3JucHBxbm1kXV9fWVdPUFhWVlNUVk9PVFZYWFlTVlRMS1RVVVVVV1BUVVdUVVJdbl5STllfW1ZZO0RWWFRbZkpMUFJST01NTk5OTEpGUVBVWVNUTkpPT1VTVFxWUlVTUk9NTElISEY/Pj06Nzg3NjU5OTY3Njc1V3Bwc3d5ent8fX19fXx9fXx9fX15fX18fn5+fXx8fX1+fXxydnF4eHJ2dXFxbnBwb3B1dnRuamRkanBwcXJwb2ZlZGNcXlJUWlZXVVRXVFJYWFlZWVJVT0lHT1BPT01SSk9QUFBOTk9UTE1JUE9TVFUyPVhNSUFRPWNhUVNRUE5QUVBOTk1RTlRSUFJNSUxLT1FQUlJTVFFST0xMS0xMSENCQT06Ojg3NjtCNDU2Njpkb3F1d3h7fHx9fnx9fH19fX18e3h8ent9fX58e3l9fH18e3B1b3d1cHV0b3N2cHFxcHR1dmNqZ2VXaHRycnFuaWlocFZWVFVYVVZVUldWVVpZWFdVUVNGRkFGR0dIRkpESEpIR0VITEhLSUZMTVBNRy9FX1I+M0A+am9hUlJRQEZVUVBRUFFOUU9QT0xKTExPUE5OUFFRTlBPSkxNTUtHRUVEQjs9PTw5PUc2Njc3RG1wdHZ5e3t8fH18enx8fX5+fXt5dnh3eXl8fXp6dn17fHp6b3Fud3JwdnFtcHNwb3Bzc3N0ZmdgaFpXa3JzcmxtbWtuYWVQU1RSU1RPV1dWWVlWUVFRT0A+Oz0/QUJBQ0BCRURBQEdIR0hGRkhKTUtFR0NPUkM4RU5TXWZTUVNBR1VQT1FRUE1NTk1LTEtMTk9PUU1PT01ITExJS0tMS0dGRkVEPEFBPjtARTs8ODlTcHJ1eXt7e318fHt5fHp6fn58e3V0dXJ2dnp6eHpyfHt8eXltcW94cnF1bm5xcm9vb3Rzc3J1dGtnZ15lam1wa25xbWltY0xPT01RU0xUVlRXV1VMTEtJPTk4Nzs/QD48PUFAQj0+RUhHQ0ZGSUdKSkBGQUFARkhFSk9IUFJiXFFQUk5TT09QTExPTUtNTE1PTltXS01RT0dJSENJSkxMSkZGRkU/QkM+PEJGP0I/QWRwdHd7ent7fHt6end8d3l9fnt7cXN0cHJzd3R4eHN6e3l2d2xxb3ZxdHRsb3Fybm5vc3ZydHNycmtsZW5zaG1ubWxtbGprSUxISE9RSlFTUVRTT0tIQ0U9OTg3OT9CPjs/QkBAPkFESUVDSEdJRklFQkI/Pj1DQkFHSkVNT2JlUU1OTldLTE1LTE1NTUxLTk5TZE1KTFJJSUlFQUhKTE1OSkdJRkJBQkA/RUZFSERLbm92eXl5e3t6e3p3dHh0eHx8eXpucXJtbm9ycnZyc3h8eHZ2bXBtc3B1dGxwcHJvb29ydnVyVlZucWdseYRqbXFybm5qaG9ISkNHTE1JTVBNUE9IS0U/Qj05OTk6P0I/PEBCQkFERUdLRkNISUdHSENDP0I/P0BBPkRFQ0tOUVRMSklNVEdJSUpMSktMSUpMTU9QUlBLR0NMR0NCSkpMTU9NSUpJR0NDQ0RISk1MSVlybXd5eHp7e3l8dnJwdXJ0eXl2eGpxbmtsbG50dG10dXtzdHhyb25xb3ZzbnBvcnBvcHN0eWpOYGdzanR8eWdvc3FpcWhlcUhKQ0dISEdKS0lKS0RHQj0+PTo6OjtAQj89QkJCQ0hGSkxKRElJRkdHQ0M7QUBCPkBAQ0RDSU1QR0lLR0hLREhJS01ISkxISUpLSk1dUkhIRE5GQUNLS01NUE5LTUpLRkdHSk1OUU5MYm1pdnZ3e3l7en1xbWxza3B0dHR1aHBtamlra3RwbnR0eXByeXRvcnFvd3NvcXB0cnBydXR5a05WbXVscXt2aW5vaWp0aGRvRktERkVHRUZGR0VHQkNAPTw9OTo6OkBDQD5CQ0RFSUZKSkxGSElHRkZEQjtCQ0M+QEREQ0VHTE5IS05IREhFSUxOTUhJTEdGR0lJTE5LSkhFTklCRk1MT01PTU5OTUtJSElPUlFSTlJmZmZxb3N4dXt6fGxoam5ma3Btc3FmbWxoaWtsdG1wdXR3cW94dG90c3J2c3BxcnRzcnR1dXZ2WFZ1dWtvdHJrb3ZsaG1lX3BHSkNFRkVCQ0JFQERCPkA/Ojs7PTo9PkNBPkFDRUdKRklIS0hHR0dGRUNAPUVFQj5CRENDRUdISUdNUEpGRkdLTk9LRkhJRkVERUlKSEtJR0hQS0RJTUxQTU9OT09OS0pITVJVVVJPV2RgYW1ncHJvcnl6Z2VoaGRpbGdxbGZsbWdpa2xzbHB2dXRwbnZyb3Nyc3V0cXNzdXRzdXZ2dnl2dXR3bGp1dW1ydnFsbmxlckxIREVHQ0JAQkQ9QkE+QD06Oj0/Oz4+QEI+QUJER0tGSUZJSEZGR0VDQ0FBRkZDQkNCREVFR0dIRkxRTElPSkpMTElHSEVGRURDSUlIS0pHS1JNQk5PTVBPT09OT09LS0tPVVdWVVRYX15caWFtaW5ocnNiZWZlZGloZm5pZm1taGtrbXJpcXZ1c3Ftdm5vcXJzd3Nyc3R1dnZ2dnd2d3Z2dHd1anN1bnV0c3FyamtzTUdHRkhCQkBERTxBQEBDPDg5PT45Pzw/QkBAQERGSEVIRkZIR0VFRENFQ0RJRkNGRUJFR0VGR0dFSk1LSFFNSktISElFRkhJRkNJSklLTUtQU05EUVJQUVJOT01OUE1MTVNXVldYVlhdWl1kYGhiamlna19lZWZjZ2dna2dna21rbWxwcWd0dHVyc252b3FwcnR4cXNzdXZ1gpF5dnZ0eHV1d3htb3VvcnN1cXFpb3pNSEdISEJCQkZFPEBCQkQ8Nzo+PTo+OkBCPj8/Q0VGREZEREhGREVDREVFR0pFRUpHQ0dIRkhHRUNGSkpHTUpMS0hKTEZJSUtIRUtLTExPT1JUT0lTVVNRU1BRTU5RTk1QV1pWWllWWl1aWGFgYGBeaGVjYGRmaGdpaWhqZmhubGxubXFwaXV1eHJycHVwcHBydXZwdXN1dnV7fn14dnR3dnZ2eHBsdXBtc3VucHJzeU5JSUdJREFDSEU8QEVCRT04Oj4+PTw8QUI9Pz5BQkZDRUJDSEVDRUVGR0dHSUZIS0hDSUhHSUhGREhLSUdLSE1MSktMSExLTUtKTkxPTlBSVVZPS1VXVFFUUVJMT1FQT1RZWlpcWllcXl5eYGNeXGFja2JgZGdocoVoZ2pmam1ucG9uc3JqdHV4cnNzdHJucHF2cnF1cnV1c355jn11dXZ2dnZ4cmh1cWtydGxxdnB1TUlLSEpGQkVHRTxAR0NEQDo8PkA/Pj9CQjxAPkFBRkNFRERJRUZFR0VISEZIR0lLSkZKSEhLSEZGTEhISEpHTExMTExJTUtNTU1PTFBQUVVWV09LVlZVU1NSUUxPUlJRVltbXV5bXF5fX2FgYWRdZGBlZmBlaGpjc3NmamhnbHBycW9zc25zd3dxdXZ0c21vcnVvcnNwdXJ2cnSBdnV1dXd2dXd0Z3Rya3Fya3J3b3ZKS0xKTEdCRURFPEBGRERDOz8/QUBAQERBP0I/QUNIQkZFRkhGSUZGRElIR0lISk1ISEpKSUxKRkpLSElKSkdLS01NSkpNTE5OTlBLT1BSVVhWTU5UVlRTUlFQTE5UU1JXW15eX11dYF9gYWFfYWNlYmNoYmRpamd2i2xraWdtb3NxcHFwcHJ5dnJ1dXRzbW1zc21xcm90dXRycHN3dHV1d3Z1dXRlcXNrcHFqcnZvd0tNTExNR0NDQUQ8P0VFRUM9QUFDQkJDRUFCREFBRUdDR0hHR0ZKR0NHSkdHSkZJTEhJSk1LTUxHS0lIS0tOUUtSUU1TTUtOTk9QUE9UT1dYWFtOU1FXXFpTVlBOVFVUVFhaX2JiX2RhXmBiXmBlYWFjaW5nYmloaG54dmxoaW1vc3JwcXJycnZ0c3Vzc3Nua3NxbXByb3R2cnFxdXZ1c3d5d3V0dWNtdGtvcGpxdG93TE5MTExHRUFARD4+REVGQ0BDQUVEREZCQkVHQ0NJRkNISkpJSUtHREtKR0hKSUlLSEpKTkxOTElMSEpMS1pmSmRcS2xTSE9OX25Va3NbcXBid2NSUGF2dWh1Y2F2YFhucWJkdmluemZbbHRgbGpUX3d2aWpnaWZnbG1qbW9qbW5zcnBycnFyc3Jzc3J0cm5sdG9ucHFxdXVxcXN0dnZ1dXl3dXR0YGt0a3Bwa3FycXlMTkpLSkZCP0BCPz1ERUZEQ0NCRUVERkJFRkhDREpFRUpMTUtMTEdHTUlHSUtIS0tJS0pOTE1NTExJTE1MW3NiZHBebG1VTU5mc11nZXFsbnRncGlfYVlubmJwcGJrampnb3F0ZXRub1xvdWdwTUpyeXZrYmBrZWVteG1rdm1ucHNycHJxcHFycXJycnRybW1zbm5vcHJ1dHFzc3R1dXV0d3h2dXRibXVrcHBscnJxektMSUlHRURAQUI/PkJGR0JGQ0VERUVEQ0hIR0RFS0dHTE1OS01NR0pOSEpLSklMS0pKS0xNTk5NTUpNTU1bcm9vbnBwbGtNUFFsV05pYnRycGFtb3ZcWWxRXG1tWnFta29teHh0c2lwXF9ya3FqVXV5eHBjXmtmYmdwcGppb3BwcnNwcXBxcXJycXFycnRsbXJtbm5vcnV0cXRydHV1dHV1enZ1dGVudWtwb2xzcnJ5SktHSEVFRUJCQj1AQEZHQkdESUVFREJGSUhIRUdLSkdNTU5LTU5HTE1JTEtJSk1JSkpKS09QT05NS05NTFxoZHVdbHFXbE5QUW1VWmtea2x2YWxkdFRlY05tWWxcdHBraWx4and1aHBdXnJraFdiY3d8b2NgZ2dhZGl0eWtubnFzc3BxcHFwcnFwcHBydWttcW1tbW9xc3Rxc3J0dnZzd3Z6dnV0aG91bHNvbXNydHZJTUdJREVFQ0FCPEJAQkZER0ZMSEVDQ0hLSEhGSkxMRk5LTFNSTEdMTEhOSkhITkhKSklITk9NTkxKTk1KWnNwcG9xcW1sT1FSbllxa2dvb3Fxb210Xm5YYXRfbm9wb3Fyb251c3R0altddGN3eHJqbnpoYWFjZmJiam10dXBzdXZzcXBwcW9ydHt/fn13bGtxbmxtbnByc3F0dHN1dXR4eHl4dHVrb3VtdG9uc3N2c0hLSElCRUVFQUA+Q0RCR0NISU1JRkNGSkxJR0ZKTUxGT0pLV1JLR0tKSk5JSEpMSUtKSUhKTU1NTElLS0tTa2JaaV5faWNyclpfWWpvX2VlVWtfY1thYVFgbGhdalxvamlkW3BmZHBdWlxrW21xY3BzbGRnY2RnYGBrbXBwb3R5cnVxb3BxbnmFiIeHhoWAdnNua21tb25xcnR0cnR1dXZ5eHhzdW5xdW53cXJ1dHdySEhGSURFREZBQEFFRURHQkhKTEhGREdLTElFRkpPTElQSUxbUUpGSEhLTUlISklLS0lISUdLS0xMRkhLS0xMTEtJS0xOVFtcVFBUTFBPTk9PVlFPT1FOT1FKSU5QUWVyaVRZV1xbXFVZWl1YXVxcY2ZhYWViY2VfX2ZrbWhtdHlydHJvcHB0hoeGhoaFhYaHg3pwbW1sa3FzdHRydHZ0dXl4eHV2cXJ1b3ZydHN1dXNIQ0VHRkZBRUM/Q0hERkdESUtMSEZER0tMSERHSFBLTE9LTFdMSUZFSElKSElLSUxKSEZHR0lHSElFRkxJSktOTElPXFdeUFxbYF5PWFlTXFxiXk1ZWk1YYVJKWWFaU2BkXGFYW2RkVlZYXFlaWFxWWVxdYl5kYGFfZWhrZ210dHFxdHBxcoGGhoaFhoWFhYaGhoR9cmtpb3Jzc3N0d3l5eHl4d3h0cXhyeHNxcnVydE9CQ0RMTUJDREJFSUVHR0ZLSktIRUVKSkpHRUhIUEpNTUpNU0lIRkFIRkpJS0xJTEpIRkVJR0RGR0VFSkhDSk1KS1RfWWBYYGFbYFVYWVReXlpfUllcUF5cWU5eXF5TW15jXlpdYGNgWV9iW2BeW1RYV1leXWNiY2FjZmlla3Jwb3Bwbm93hoaFhYaCe4CFhYaGhYaFf3VxcHJyc3Z5eXp5eXh4eHdyeXZ4cnF4dnR2YVNKSk1JRUNCQ0dHRUhHSEtJSUlERktLS0ZGSUpOS05MSExOSEhGPkdHTElLTEpLS0lHRUlEQ0REQkdKREBKTEpPW2NZX15hX1JUUldfYFxdWV5RWVxNVl9XS1FZW1BaX2FhXl5jYWBiYmJjY2VaUVlWVVxaXWNgX19jZWJob21ubGxsbHWFf4SDeXV8hIWFhYaGhYWGhoN9d3JydHd5eXl5f359eXV5dnZybnp3dnhYUUtGQ0dFQkVISUZHSEhGRkpHSEZIS0lMRERLSk1NTExISkpISkc/R0ZOSktLTUtLS0lHR0NEQERBSElCP0lKSE9dYVpbZF1fVFFSWF1cXFxfWktXXExSXFlJTl5RT1xfYWNkY2NiXGRjYmRjZlhRVVRSW1haYV9eXmFhX2Rsa21qamxudn51gXp8hIWFhYWFhYaGhYaFhoaGgnpyc3V1e4WHh4eGhYSBfnhwend2eFxSTUNASUZDRUtKRkZGSEdHSUZGRklMSk5FREtKTE5KTElLSkhJRkJISFFNS0tPTUtLSUhHRUQ/RUNJSEFBR0ZFVF1ZXlhfWV9bXVVYWFBdXVFLSlZeWF5bXVZZYFJRX19hYmFgYmJgY2JhZGRiWE9RUVFbU1tdXV1dXl9fZGhnbGpubnB7e3x+e4CCg4SFhYWFhYWEhIWDhISHh4FzcneFh4eHh4eHh4eHh4WDgHx4XFNLQ0FHRkRHTVJIQ1FKRkhISEVGS0pNUEVHSUpLTkxMSUxLSUlHREhLUU9NTVBMTUtLSElDREFFREhHQkFHRUNXVUVcVF5TVl9YTlRVTlpbTUpLVGBhW19YXl5hXU9ZYlxgYF9iY2JdYWJXX19UUE5PUFhSXVtbXFxeYGJmZmVsZm9vd3x7gHt9f4CEhISEhIWFhYODhYKDgoWFhnpvgYaGhoeHiIeGhoaFhYSFg35JTkZERUZHRElSYlBDVl5JR0dIREZNSlBQRUlJS0tOTEtLTUxKSkdFSk1RUU5PUE1OTE5IS0FEQUNERkRDQUVGQk1IQktMUE9OTEZNRkdJSkhHTExNT1BJTE9QT1NQTFFTUlVaWVdZWFhkV09TVFBQTk1PVVRbWVlbXVxgYWRlY2dja2xwc3N6eX97en+EhISEhISEhIKEgH57gYOBfXuFhIaGh4eHhYWFhISEgoGAfUtJRUVHRkdES01dTEdHWE1HSEpIR01MUVFJTEtMS05OVU5PS0tMR0dLUFRTTlBPTk9OT0hLRmBFRF9MRGZjRU1bSV5bcm1PTVVtWUxDUGBVbFdnSl1XVV5ETFFVTE1UVlFSVFhXVFhVVFxVUGZaaGhkWFNrU1ZWVVtcW2BgYWFhYmBmaGZubGhyenx9foGEhISEg4ODgX18enJ7gXp7f4KAg4SEhYWBhIWBg4N/fnp7TElFRkZIRUVLT1NJS0ZgVEhKT0pJT01SUUtNTExPUlVST09KTE5HSE1RW1lPUFBOT1BPSUpRf1FJfFlZcnNYUG1IcW5vYVZQcXFzUENrc21xdHBTb19bblhdVlxYVWtoVV1WY1pgWVtgVlVXf2p0dXVfX3ZfWGFcXGZbX2FhYWFeYGJnbXBsYHB3dHiBgYKDg4J/fX6Adnh6bHZ+dHh+gHx+gIGChHyAg3p/gX9+d3dOSUVITU5CRExMRkpMRlJWTEtOSUtSWFdRTk9PTVFUTk9RUEtLTkdNUFNbWlRRUk9QUFBKSFp4XVR4ZWhZUlRRdmd0bHBibmZqUXJPTXdtanJwc3JxcnBvb4BdZnp1eHFxenF+c31rdX1iUmd8ZXNzb3Nye3xvfXlvf3JfYGBiYVpgYGdrbmtibGZnbXd+gYCDfnt4d4B0dnppcn5udHx+d3h7foCDeHyAdXx/fHxzc05LRmBdR0FFTU1IS0tISlBOTU1KTlZeWVVMUVNOWVpNU1NSTkxPSVFSVFlXV1BUUFBQUUtIZ3hsY3hybVpLTVV5cHVtdWJudlBkZUpmdnFtd2+AamZ4eGlXclJpe2xpanp6fWx4en9waG9YdnZqdXVwgGByZ31pbHh8b15fX2JhW11iZGdpamRnYmNkbGxwcHN0c3NzeXFyeGJsdWdyeXtzc3V5foFzdXpufH15eHJuTktTdE5DQkVQUEhKS0pMUU9PT01QWmBaWEtUV1BhXlJWUVlTTE9JU1RVWFdXUFVQT05SSktyb3V1cXVxZGliV25McXBeRmh5V3ZUS2h4fXhgeXtzbmFebW9jUmdxdW5teXB3bHZ0dHFsbVx0fnprbXl8a3RtfGtwdnV4Xl9fYl5dX2RkaWdoZWVeYWJpaWlqa25va3FubWpwYWNmZG93eG9tcHN5fm5xcGp7enRyb21MTFtWSEdFR1JQSUxNS0xRUVFQUFFXXFlVTVVZVWZYUlJZXlRNTklUVFZXWVdPU05OTlFIUm1IaXdLYGR2dlZYbE9ubHtzYWpnf3ZVS1draH1sbWx4YFtwenteYHpzY3JveHFoZXxpcnxdVEtsYHZ1a2l2fHttfnhrfHBdXl5iW19iZGRnZWVlYlpjY2lra3JzcndnbWloZGdgYWxhZ3NybGdtbXJ8a21oa3t0bW1rbU9ISktISUlIUVBMTk9MS1NTU09TUldSVlRQV1tWVlRUVGFgUE5OS1RTU1FVVk5OTE1PUEpIUU5QVUxLS1NUU1JUUFZVUVFOUVFYWFFOUFVUWFhYW1tVUlNXW1dYV1pPU1VXV1hSXVlXXVZUT1lSV1dXWFleW2dyXltbWVxdX2NaX2NjZGZkY2NiWmNjZmZmbW5tdWZmZ2NgZl9dZ2BkbGhmZ2tocHpoZ2drdWpoZ2lsUUlLTExNS0pTUU1RUE9MVlVUUFRVWFVZVVFaXVZVVFdVWVhQT0xNVlRRTlVTTk9NTFFQS0pSUktRTUtLT1JVUlFRU1NJSExOT1FSUVFRVFZSWFdcV1NTUFFVVlZTWlFPU1JXVlRZVlRZVVRSVVRUVFdYV11aXmFdXFpaXFxgY1xdYmNkZmRlZGFZYGFjYWJoaGluY2FkXl9jXVpkXGJtYV5mZWZtc2RpaGtrZWRjZmhQSktMT09MTVNQTlNRUU1YV1VUVVdXV1pVU1xgVldWWVVYVFFQS09XU1BOVVBOUU5LU1BNT1ZUTlFOTU5RVFBVUVNUVU5LTU9RVFRSUlFWV1VZWltZU1VSVFdXV1lbVE9UVVhVVVpVV1lVUlJYVlVXW1laX11VWV5cXl1cXWBhXltiYmNnZmRkYlhfYWJeYGhlZmRhXl9dXV5aWl9aX2dgXl1dYmhrYWdmaGZkYGJjYVBLTUxQUUxPVE9PU1FPUVpZWFdYWlpYWVZcamRWWFlaV1ZUVFBLT1ZUUE9UUFBQTk1RUVBSWFRRUU9NT1NWTldSVFVVT05NUVNVVVRUUlRYVlpdXFpWV1FSV1hWW1tXUVRWVlZWWVRXWFVTUlhWVVpdWV1fXlZeXV5gXFxgX19fWmJiZGhnZGRhWWJgYl5eZmNjYGJdXFxcXFlaW1hbYVteXVxfYl9fYmRlYmRfX2BcUE1OTlJRTVJST1NUUVBVXFpaV1tbXFlaW2RxbWhkX1tZVlZYUkxNVlNNTlJPUVJPTFBTUlVaVVNQUExQV1ZSV1NTU1hNT1BSVFhVVVVTVVlYW15dW1tWUk9VVlZbW1dSVFdWV1hWVFhbVFNSWldWXF5aXl9gVWFcYWFdYGJgXWBdY2FjZ2hkZmBZY2BhX19lZF9gY1taXFtcWVpYWVdcWVxbYF5fW15eYWBfYlxZYFpRTk9OVlFQVFJPVVRTUFdcXVxYXlxfV1xeanF3eYBjXFtWVllRTk9WU05RUVBSVFJLUVRUWVpXVU9STlNYV1RTVFJSWk9RU1NWW1ZWV1RWWlhdXlxcXlZTTlRVVlxcVlJUVlZYWVNUWVxUU1NdWFpdXlxgYGBWYltjYl5hY19dYmFiX2RmaWRmXltkYGFgYWNlX2JfWVpeW1xbWVhZV1daWlphXF1bXVxcWl1gV1tbWlBPT09ZUFVVUlFXUlRQW11eXltgXGBVXF1panJ9c2xnXFVYV1FPUlpTUlFUUlRVVEtRV1ZbWlpTT1NSVlZWVE9WUlNaUlRVVFhdV1hYU1hcWF5dWVpdVFVOVldXX1tYUlVVWVlZVVdZW1RTVl5ZXV1gXWJiXllgW2ViX2RkX15jY2FdZWZpZGZdXmRhYGFiY2RfYl5YWl9bXFtYWFhYV1taXGBcW1tcW1haW15WXlldUE9PUlpQWlRVVlZUVFReXmBfXmJcYFVdXmJreXVtfWxaVVlVUVFTXFRVVFVUVllXTFJaV11aXFJPVVNYVlZUUFhSU1dTVlVVW11YW1lVWl5YX15ZXFlSV1JZWFlfWlpUVVZaWVpXWFlcVlRaXlxeYGFfZGNcXl1dZWFiZmReX2RjYFxnZGhlZGJfZGFfYWBiYl9gXldYXlpcXFpZWVdWXVpdXlpZW1xbV1lcXVZYV11TT1BXWVFdVVZZV1dVWF9gYWFgY11fVF1fYmVldoJ7aFhZWVNWU1ZcV1dXVlZXXVhQVV1aXl1dVFNYU1dWVFNUWFJTVlRYWFhdXlhdW1ZdX1hfX1hdVlFZVFlaWmFZXFVWWFtaW1lZWlpYVl1eX15jYmFkZFxiXGBmYWRmZF9gZGJiW2ZjaGVjZmFmX19hYWFhYF9eVlVdWVtcW1lbWVldW1tbWFhZW1laWl1fXVRZXVVOVFpWU1xUVldZV1ZcYGFiY2FjXl9WW2BkYV96dW9oWVxaVVdVV1taWVxZWFlgV1BWXlxgYVxUVVhQVVdVU1dWUlNVV1paXF9eWl9cVl9fWl1eWV5WU1lXWVpdYlpeVldbXFtcW1tZWllZXl9gYGRiY2VlYmRaYmZjZ2ZlXmFiYGNeY2NpZGRnX2deYmJjYWFgXl9YVFpaWltbWFtYWFxbWltXV1lYV1xbXGBdVl1dU1BWWlZWWlVYVVhXWF1fYmFkYWRgXllZYWRiYGtmaF5cXVtWV1hZXFxcX1tZW2JWVFheXWFjXFJWWVFXVldWV1ZUVlRYXVxeYGBdYVxXYV5bXlxbXlhWWFhbW19gXF9YWV1cXV1eXFpcWFtfYV5gZGNkZmZmYlljZWVoZ2ReY2BgZWNdZmlkZWlfZ15jYmNhYWBfX1tYWVtZWlpYWVhXW1taW1dYWlRZXVxaYFxVXmJOUldZVldaWFtcWFdZXmBiYWVhZGFdXlliY2JfYWBhXlxcXFdXW1tdXV9fXFpdY1haWF1gY2RfUlhZUFhXWFlZV1ZYVl1dXmBhYF9iXllhXV1eWV1eWVhWV1tcYF5dX1paXl1eXmFcW1taXGBiXmJkY2VmZWZiWmRmZ2lnY19jXmFmZFppaWJmaWNlXmJiY2FgYF9dXVpXW1lZWFhaWFdaW1pZV1hWVVtdXV1gYGJieExXV1xZV1xbXF1aV1xdX2BiZGJiYV1gWGJjYmBjYWJdW1xbWFdbXF9dYF9dW2BkXFxYWmNlY2BSXFlPWFhaW1paV1pZYF1gYmJgYWNfXGJdX11bXl5ZWVVYXV5fYF9fXFpeXmBiY1xcV1xeYGJiY2VkZ2VlZmRcZWZoaWZjYmJcY2dgXGlpYmhpZmVgYmFjYV9gX11dW1lcWVhXWFlYV1xbWldXWFBYWl1hY2Zmcmt/SllXXVtaX1xbXlxYXVteX2FjYmFhXWJbYmRiYGNjYlxbW1pXWGlxYFxgX11cYWNfXllZZGVkYVNfWlFZWFxdXFtaW1tjYGNiY2BiZGFgY15gXF5eX1pYVltfXl1hYV9dW2BhYmViX11UXGBgY2RkZmRnZmVmZV5lZmhoZ2RkYFtmZ15haGhjaGhmY2BiYGNiX19fXV1cWltZWFhYVlpWXFpaVlZVTVhXXGdpa2h1eIF2dnZ2dnZ2dnZ2dnd3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d4eHh4eXl5enp6enp6e3p6ent7e3t7e3t7e3t7e3t7e3x7e3t7e3t7e3t7fHx8fHx8fHx8fHx8fHt7e3t8fHx8fHx8fHx8e3t7fHx8fHx7e3t7e3t7fYmIhoqHhYKBgoOCg4OCgoKCgoKCgoKCgoGAgYCBgICAgYCBgYGAfnx8fHx8fHx8fHx8fHx8fHZ2dnZ2dnZ2dnZ3dnd3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3h4eHh5eXl6enp6enp6ent7e3t7e3t7e3t7e3t7e3t7e3t7e3t6e3t7e3t7fHx8fHx8fHx8fHx7e3t7e3t7e3t7e3x7e3t7e3t7fHx8fHt7e3t7e3t8iYmHiYaFgoGCgoGCgoKCgYKCgoKCgoKBgYGAgICAgICAgIGBgYB9fHx8e3x8fHx8fHx8fHx8dnZ2dnZ2dnZ2dnZ3dnd3d3d3d3d3d3d3d3d3d3d3d3d3d3d4eHh4eHh5eXl5eXl5eXl5eXt7e3t7e3t7e3t7e3t7e3t7e3t7ent7e3t7e3t8fHx8fHx8fHx8fHx7e3t7e3t7fHx8e3t7e3t7e3t7fHx8fHx7fHt7e3uHiYiJhYSDgYKCgoODgoKCgoKCgoKCgYGBgICAgICAgICAgYKBgH58fHx8fHx8fHx8fHx8fHx2dnV2dnZ2dXZ2d3d3d3d3d3d3d3d3d3h4eHh4eHh4eHh4eHh4eHh4eHl5eXl5eXl5eXl5e3t7e3t7e3t7e3t7e3t8e3p6enp6ent7e3t7fHx8fHx8fHx8fHx8fHx8fHx8e3x8fHx8e3t7e3t7e3x8fHx8fHt7e3t7e4aJiYiFhYOBgoKCgoOCgYKCgoKCgoKBgYGAgICAgICAgIGBgYCAfnx8fHx8fHx8fHx9fX18fHaIi4uLi4uLgX19fX19fYSMi4uLi454KSkqKiopKz0/Pj4+Pj5tgH5+f397pdfT09PT1r2GiYmJiYmJjI2NjY2Ni7DBvr6+vsGiioyMjIyNiX5/f39/f359fHx8fHx8fHx8fHx8fHx8fHx7fHx8fHx8fHx8fHt7e3t7hIuHh4aHgoGDg4GCgoKCgoKCgoKCgoGBgYCAgICAgICAgYCBgIB+fHx8fHx8fHx9fXx8fH19doyQj4+Pj5CDfn9/f39+hpCPj4+Pk3kZGhoaGhocMTMzMzMzMmqCf4CAgHut6eTk5OToyomMjIyMjI2PkJCQkJCOu87Ly8zMz6qNkJCQkJKLf39/f39/f319fXx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx7e3uCjYeIh4eDgoSCgYKCgoKCgoOCgoKCgYGBgICAgICAgICAgICAgH58fHx8fHx8fXx8fH19fX12eHh5eHh4eHd3d3d3d3d4eXl5eXl6d29wcHBwcHBycnJycnJyd3p5eXp6en6Dg4ODg4SBfHx8fHx8fX19fX19fHyAg4KCgoKCgHx9fX19fX18fX19fX19fX19fX18fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx7e4CMhomHh4SDhIKCgoKDgYKCg4KCgoGBgYGBgYCAf4CAgICAgICAfnx8fHx8fHx8fX19fX19fXZ2dnZ1dXl2dnZ6e3h7eHd2eHt4eXl6fnx5eXh4eHh5eXl5enp5eXl5enp6eXh4eXl5eXl7e3t7e3t7e3t7e3p6enp6eXl5eXp6fHt8fHx7fHx8fHx9fX19fX19fX18fH19fX18fHx8fHx8fHx8fHx8fHx8fHx8fHx8f4uHi4qIhIODgoKCg4KBgoKDgoKCgYGBgYGAgIGAf4CAgH+AgYF+fX18fHx8fHx9fX19fX19d3d3dnZ3fXh3d316eH14d3d5fHt7e3l8e3h3d3d3eHh4eHh5eXl5eXp6ent7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7fHx8fHx8fHx8fHx8fHx9fX19fX19fX19fX19fX19fX19fHx8fHx8fHx7e3x8fHx8fHx8fHx+iomMjImFg4SEgoKDgoGCgoKCgoKBgYGBgYCAgICAgICAf4CAgH19fXx8fH19fX19fX19fX13d3d3d3p9eHt4fHx3e3h3d3d5fHp7eHt6eHh4eHh4eHh4eHh5eXl6enp6e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3x8fHx8fHx8fHx8fHx8fHx8fX19fXx9fX19fX19fX19fX19fHx8fHx8fHt7fHx8fHx8fHx8fH2Kio2NioWDg4OCgoKCgYGCgoKBgoGBgYKBgIGBgICAgIB/gIGAfXx9fX18fX19fX19fX19fXd3d3d3fX55d3d4e3p7eHd3d3x5eXt3fHl4eHh4eHh4eHh4eXl5enp6ent7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3x8fHt8fHx8fHx8fHx8fHx8fH19fX18fH18fH18fHx8fX19fX18fHx8fHx8fHx8fHx8fHx8fHx8foqJjo2JhISEg4KDgoKBgYKBgoKCgYGBgoGAgYKAgICAgH+BgIB8fH19fX18fX19fX19fn5+d3d3d3d5fHl7eHx9eXt5enp6f3t5e3l8eHh4eHh4eHh4eXl5eXp6enp7e3t7e3t7e3t7e3t7e3t7e3t7e3x8fHt7fHx7fHx8fHx8fHx8fXx8fX19fX19fXx8fHx8fHx8fXx9fX19fXx8fHx8fHx8fHx8fHx8fHx8fHx/iIeNioeFhoaDg4ODgoGBgoGCgoGBgYGCgYCAgoF/gICAf4CAgHx8fX19fX19fX19fX5+fn53d3d3d3Z4eHl3eXp4enh5eXl8e3l5eXl4eHh5eXh4eHh5eXl5enp7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t8fHx8fHx8fHx9fX19fX19fX19fX19fX18fH18fH19fX19fH19fX19fHx8fHx8fHx8fHx8fX+HiIyIhoeHhIKDhISCgYKBgYKCgoKBgYKBgIGBgYGAgIB/gIGAfHx9fX19fX19fX1+fn5+fnd3d3d3d3d3d3d3eHh4eHh4eHh4eHl5eXl5eXl5eXl5eXl6enp6ent7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7fHx8fHx8fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fHx8fHx8fX19fHx8gIeIi4eHiYaDg4SDg4KBgYGCgoGBgYKCgYGBgIGBgYCAgICBgX97fH19fX19fX19fn5+fn5+d3d3d3d3d3d4eHd4dnl5eHh4eHh5eXl5eXl5eXl5eXl5enp6enp6e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7fHx7fHx8fHx8fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fHx8fH19fXx9fXyBhoqKiYmIhIOFhISCgoGBgYGCgYGCgoGBgYCAgYGAgIGAgIGBf3x8fX19fX1+fn5+fn5+f394eHd4eHh4eHZxZGpeam15eXl4eHl5eXl5eXl5enp6enp6enp6enp7e3t8e3x8fHt7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3x8fHx9fHx8fH19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fIGFiYqJioeEhYWEg4KCgYGBgoKBgYKBgYGBgYCBgYCAgYCBgIF+fH1+fn5+fn5+fn5+fn9/f3h4eHh4eHh5bWRiZV9fXm95eXl5eXl5eXl5eXp6enp6enp6enp6e3t7e3t7fHx8fHx8fHt7e3t7e3t7e3t7e3t7e3t7e3t7e3t7fHx8fHx9fHx8fH19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18goWKiomJhISGhYSDg4KBgYKCgoGBgoGBgYKBgIGBgICAgICBgH58fX5+fn5+fn5+fn9/f39/eHh4eHh4eW5kZWdlZGJeZnh5eXl5enp6enp6enp6enp6enp6e3t7e3t7e3x8fHx8fHt8fHt7e3t7e3t7e3t7e3t7e3t7e3t7fHx8fHx8fHx8fHx9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXyChouJiIqEhYaEg4OEgoGBgYGCgYKCgYGBgYCAgYGBgIB/gIGBf3x8fn5+fn5+fn9/f39/f394eHh4eHl3Z2VkZWZkZWFfaXl6enp6enp6enp6enp6ent7e3t7e3t7e3t7e3t8fHx7e3t7e3t7e3t7e3t7e3t7e3t7e3t7fHt8fHx8fHx8fHx9fX19fX19fX19fX19fXx9fX19fX19fX19fX19fX19fX19fX19fX19fIKGi4eJh4SEhoSDg4WBgYGBgYKCgYGBgYKBgICAgYGAgYCAgYF+fHx/f35/f39/f39/f39/gHl5eXl5eWtlYWJlZWFlZV5ieHdze3p6enp6enp6enp6e3t7e3t7e3t7e3t7fHt7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t8fHx8fHx8fH18fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19g4aLhoiFhYaEgoOEhIKBgYGBgoKBgYKBgYGAgYGBgYGAgIGBgn98fH9/f39/f39/f3+AgICAeXl5eXl0Y2NlZGNmY2doZGZsZF5ze3p6enp6enp6enp6ent7e3t7e3t8fHx7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3x8fHx8fHx8fH19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX1+fn6DhouGhoaGhYODg4SDgYGBgYGCgoGBgYKBgYCAgYGBgYCAgYGBfnx8f39/f39/gICAgICAgIB5eXl6d2RhY2diYmRdW2VfYV1eYGFoeHp6enp6enp6enp6e3t7e3t7fHx8e3x7e3t7e3t7e3t7e3t7e3t7e3t7e3t8fHx8fHx8fHx8fH19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX1+fn5+fn5+foSFi4eGhoaGhIODg4KBgYGBgoKCgYKBgoGAgIGBgYGAgYGBgYF+fX1/gH+AgICAgICAgICAgHl5eW9vYmJiZF5jZ19dYWFgXF9kYlttfHp6enp6enp6enp7e3t7fHx8e3t7e3t7e3t7e3t7e3t7e3t7fHx7e3x7fHx8fHx8fHx8fH19fH19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX5+fn5+fn5+fn5/hIiLhoSHhoaEhIODgoGBgYGCgYGBgYKCgYCAgYGBgYGBgYGBgX5+fYCAgICAgICAgICAgICBeXpwXWJlZGJkXmZnZ2BZYmJhY2VfXF1ze3t6enp7e3t7e3t8fHx8fHx8fHt7e3t7e3t7e3t7e3t7fHx8fHx8e3x8fHx8fHx8fHx8fHx9fX19fX19fX19fX19fX19fX19fX19fX19fX19fn19fn5+fn5+fn5+fn5+foCFjIqEhYaGhYODhISCgYGBgYKBgYGBgoKCgYCBgYGCgICAgIGBf35+gICAgICAgICAgIGBgYF5emxiZGdjYmdmYWBgZGFiZWRjZGNeXGJ1fHt7e3t7e3t7e3x8fHx7e3x8fHx7e3t7e3t7e3t7e3x8fHx8fHx8fHx8fHx8fHx8fHx8fH19fX19fX19fX19fX19fX19fX19fX19fX1+fn5+fn5+fn5+fn5+fn5+fn9/gYeMiYWGhoeFg4SDgoGBgYGBgYKBgoKCg4KBgIGBgYKBgYGCgoF/f36AgICAgICAgIGBgYGBgXp7dGdnZmZkZGZmYF5fYWNlaGRlXmJkX3R8e3t7e3t7fHx8fHx8fHx8fHt7fHt8fHt7e3t7fHx8fHx8fHx8fHx8fHx8fHx8fHx8fH19fH19fX19fX19fX19fX19fX19fX19fX19fX5+fn5+fn5+fn5+fn9/f39/f3+CiYqIhoaIhoWDhIOCgYGBgYGBgoGBgoKCgoGAgYGBgoKBgYKCgX9/f4GBgYGAgYGBgYGBgYGBenptaGNjZ2ZnZWdmZmdiZWRlYmdbYmVgd3x7e3t8fHx8fHx8fHx8e3t8fHx8e3x8fHt7fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx9fXx9fX19fX19fX19fX19fX19fX19fX19fn5+fn5+fn5+fn5+f39/f39/f39/f4SJioiGiYeFhYSEg4KBgYGBgYGCgYKCgYGBgYGBgYKBgoGBgICBgH9/gYGBgYGBgYGBgYGBgYF7emlpZGNqZmFgZmVjY2NnaWRjYmBiZGJ1fXx8fHx8fHt8fHx8fHx8e3x8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fH19fX19fX19fX19fn5+fn5+fn5+fn5+fn5+fn5/f39+fn9/f39/f39/f3+AhIqMiIeJhoSFhYOCgYGBgYGBgYKBgoGBgYGBgYGBgoKBgYGBgYGAgH+BgYGBgYGBgYGBgYGBgXZzZWRnY2RmZWJlZmdkZmhmZWNgYGNkYHF9fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fXx8fX18fHx9fX19fX19fX19fX19fn5+fn5+fn5+fn5+fn5/fn5+f35+f39/f39/f3+AgICFioyJiIqJhoaDgoKCgYGBgYGBgoGBgoGBgYGBgIGBgYGBgYGCgX+Af35/foCCgoKCgoKCgoKCc3NnZWRkZWlqaGZnZ2NhZmZlZmdmZWVjdX18fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fX19fX19fH19fX19fX1+fn5+fn5+fn5+fn5+fn5+fn5+f39/f39/f39/f39/gICAgICAgIWLioqJioeHhoSCgoGBgYGBgYKCgYKBgYGBgIGBgoKBgYGBgYGAf4B+dHRzdX1/goCAfn5/gYB0cmdkZWNmaWppZWNlY2BmZGRnZ2JiZWFwfXx8fHx8fHx8fHx8fHx8fHx9fX18fHx8fHx8fHx8fHx8fHx9fX19fX19fX19fX19fX19fX19fX1+fn5+fn5+fn5+fn5+fn9/f39/f39/f39/f39/f39/f4CAgICAgIB/houLiouLh4eHhIOCgYGBgYGBgYKBgoKBgYGBgYKCgYCBgYGBgoCAgH5zc3NzdHV4dXV0dHV2dXVwZmNmZWhoaWdoZ2VmZWJfZGVmY2BiZ3d8fHx8fX19fX18fHx8fH19fX19fX19fXx9fXx8fX19fX19fX19fX19fX19fX19fX19fX19fn5+fn5+fn5+fn5+fn5+fn5+f39/f39/f39/f39/gIB/f3+AgICAgICAgICHjIyIi4qHh4eEhIKBgYGBgYGBgoGCgoGBgICBgoGBgYKBgoKCgYCAfnNzc3Nzc3NzdHR0dHNzdW9jY2FnZWhoZ2pmZGVnZmhmY2JlYl5ieX18e3t8fX19fX18fHx9fX19fX19e3x9fX19fX19fX19fX19fX19fX19fX5+fn5+fn5+fn5+fn5+fn9/fn5+fn5+fn5/f39/f4CAgH9/gICBgICAgICAgYCAf4CAgYGAgIeLi4iNiYiJhoSFgYGBgYGBgYKCgYKCgYGBgIGCgoGBgYKBgoKBgIB+dHNzc3Nzc3Nzc3Nzc3N1cmdlZWRlamhoZ2ZpaGdjZWViZGNoZGd7eHVzc3R2dnl4dnR0dHZ3d3d2dHR0dXV4d3h4d3d6e3x9fXx9fn5+fn5+fn5+fn5+fn5+fn5+fn5/f39/f39/f35/f39/gH9+fHt7fX58eXl2dnZ5fHx6end2d3l7fXt4hIyMioyHh4iEhYSBgYGBgYGBgoGBgoGBgYGAgYKCgYGBgoGBgoGAgH51c3Nzc3Nzc3Nzc3Nzc3VzaGVnaGVrbGhqZ2lqZ2dnZmRkYmVkbnV0dHNzdHNzc3Nzc3Nzc3Nzc3NzdHNzc3Nzc3Nzc3N0dHV1c3V3eHl7fn59fn98f39/f39/f39/f314fH5+fXx4dXZ3eXd4dnRzc3N0dXRzc3Nzc3NzdHNzc3R0c3R0dHODjI2KiYeIhoOGg4GBgYGBgYGBgYGCgYGAgYGDgoKBgYCBgYGBgICAf3VzdHRzc3Nzc3Nyc3NzdnZpY2hqaGpsZWZpbGhgZmVkY2BkZGZ0dXV1dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHRzdHRzc3Nzc3R2dnV1d3V4fH9+fX9+fHp4dXN0dXV1dHNzc3Nzc3N0dHR0dHR0dHR1dXR0dHV1dHR1dXR1dXV1dIaMjYuIhoeEhIWCgYGBgYGBgYGCgoGAgYCBgYKCgoGBgIGBgYGAgIB/dnNzc3Nzc3Nzc3Nzc3N2dnNnZ2pmaGdmaGhmZGlnY2NnZWVmcHZ1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dHR1dHR0dHR0dHRzdHR0dnV1d3Z0c3R0dHR0dHR0dXV1dXV0dXV1dXV1dXV0dHNzc3N0dHNzdHR0dHR1dXR1iY6MjIqHh4SEhYKBgYGBgYGBgYKCgoGBgICAgoKCgoGBgYGBgYCAgH93c3Nzc3NycnJyc3NzcnZ2dW5kXWNnZWlraGVoZ2dqamlnZXB2dXV1dXV0dHRzdHR0dHR0dHV1dXV1dXV0dHV1dHR1dXV1dXV1dXV1dXR0dHV1dXV1dXV0dHV0dHV1dXV1dXV1dXV1dXV1dXV1dXV0dHNzc3Nzc3N0dHNzc3Nzc3R0dHR0dHWKjoyMiYaGhIeFgoGBgYGBgYGBgoKBgYGAgYGCgYKBgYGBgYKBgYCAf3hzc3Nzc3JycnJyc3NzdnZ3d2liaGhnamtpaGZkZGVmaWhwdXR0dHRzc3JxcnJ0dXV0dHR0dHR0c3NycXFxcXNzdHR0dHR0dHR0dHV0cnJyc3R0dHR0dXV1dXV1dXR0dXR0dHR0dHR0dHR0dHR0c3Nzc3Nzc3Nzc3Nzc3N0dHN0dHR0dHR0dYuOjImGhYWFh4SCgYGBgYGBgYGBgoKCgYGAgIKCgoGBgYGBgYGBgIB/eXNzc3NycXJycnJzc3N3d3d3bGpoZGhpa3Z6a2VmZWhnbXJzdHN0c3JwcHBxcnN0dXR0c3NycnNycXBvb29vcHFzc3NycnJyc3R0dHNxcHFyc3R0dHR0dHRzc3Rzc3NzdHR0dHRzdHR0dHR0dHRzdHR0c3NycnFxcnJzc3Nyc3NzdHR0dHN2jZCMh4eFhYSEgoGCgoGBgYGBgYGCgoKBgYGAgYGCgoGBgoKBgYGAf395c3NycnFxcnJycnNzc3d3d3dzc2pnaWloeX99cW51bG5wcXJycnJxcG9wcXFxc3Rzc3NycXFwcG9ubm1ubW5ubnBxcnJycnJycnJzcXBvb3BxcnJzc3JxcnJycnJycnJycnJzc3Jzc3Nzc3Nzc3Nzc3Jxb29ubm9vcXJzc3Jyc3NycnNzcnaPj4uHhoWFhYOCgoKBgYGBgYGBgYGBgoGBgYGCgoKBgoGCgoGCgX9/f3hxcHBwcXFycnJyc3Nzd3d2dnd2cnF0c252f352c3hvcHBycnJycXFwcHFxcXJyc3Nzc3FxcnBvb25ubm5ub25vcHBxcXFxcXBwcXJwb25vcHFxcXFxcHBxcXFxcXJycnJycnJycnFxcnFxcnJycnFwb29ubm1ubm5vcXJycnJycnJyc3JxeI+OjYaDg4aEgoOCgoGCgYGBgYKBgYGCgYGBgYKCgoKCgoKBgYKBf4B/d29wb3BxcnJyc3Nzc3J2dnZ2dnZ3dnZ1c3l/fnd3d29wcXFxcXFxcHBwcXJxcnJzcnJycYVzb29wb29vb29vb29wb3Bvb29vcHBxb29vcHBwcHBvcG9wcHFycXFxcnJycnFxcXFxcXFxcHBwcHBxb29ubm5tbW5tbm9wcXFxcXFxcXFxcXB7j42NhoODhYOCgoKCgYKBgYGBgoGCgYGCgoGCg4KBg4KBgYGAgYF/f392bm9wcHBxcXFxcXBwcHZ2dnZ2dXR0c3NxfYB9fX9zb3BxcXFwcHBwcXFwcHFycnp7cXF4lnFvb3Bwb29wcG9vb29vb29vb3BxcXBub3Bwb29wb29wcnJycnFxcXBxcnFwcXFxcHBwcHBwcHBwb29ubm1ubm5ubm9ub3BwcHFxcXFxcXFxcIKRjoqEhIOFhIOCgoGBgoKBgYKBgYGBgYGCgoKCgoKCgYGBgYCBgX9/gHVvb29wcXFxcXBwcHBwdnZ2dXRzcnJycnGAgoCBeXBwcHBvcHBwcHFxcXFwcXJwfpZxb4Occm9wcHBwb3BxcHBvb29wb29vcXFwcG9wcG9vb25vcHFxcHBwb3Bvb3BwcHBwcHBwcHBvb29vb29vbm5tbW1ubm5ub25vb3BvcHBwcHBwcHBwiZCMiISDhIaDg4KCgYGCgoKCgYGBgYCAgYGBgoKBgYGBgYGBgIGBgH+AdG5vb3BxcXFwcG9vcG92dnVzcnFxcXFxcICDg39ycHBwcHBwcHBwcHFxcHBxcXB2pHtukJ92b3BwcHFwcHBwcHBwcHBvcHBxcXBwcHFxb29vbm9wcHBvb29vcHBvb3BwcHBwcHBwcHBvb29vbm5ubm5ubW5ubm1ubm9wcG9vb29vb3BzcXWPj4uJg4KFh4ODgoKBgoGCgoKBgYKBgYGBgYGBgYGBgYCAgYGAgYGAf4B0b29vbm9vb29vb29vb3Z1dHNxcXFxcXJygIKCgXRxcXFxcXFxcXFxcXFxcXFxcHaqiG+ZoXpvcXBxcXFwcHBwcHFxcXBxcHBwcXBwcHBwcHBwcHBwcHBwcHFxcXBxcHBwcHFwcHFxcHFxcXFxcXJxcnFwcnRycnR0dHR1dnRzdHR0dXd3gpCPi4iDgoaHhISCg4GBgYKCgoGBgoGBgYKBgYGBgYGAgICBgYCBgYB/gHVvb29vb29vb25vb29vdXRzcnJycnJycnKDg4OCdnFycnFxcXJxcnJxcXJycnJwdquVcZ2ifXBycXFycXFxcXFxcXFxcXFwcXFxcXFxcnNzcnJyc3V1dHR0dHR0dHV2d3d3d3d3eHh4eHd3eHh4d3Z3dnV2dnZ2d3h6e3x7e3t6enp6enyGkI2LiIODiIeHhYODgoGCgYKBgYGBgYKCgoGBgYGAgYCAgYGAgIGBgH+Ad3FxcXFxcG5ucG9wcG92dHV1c3Nzc3NzdYiDgoN5cnNzcnJyc3Jyc3Nzc3Nzc3R6q6J7nqJ9cnRzc3Nyc3N0dHV1dXV1dHV3eHd3d3d4eHh3eHh4eXl5eXl4eHl5eXp6e3t7e3t6enp5eXh3d3d1dnV2dnd5enp7fn5+fX1+fn5/f35+gIyQi4qHg4WIi4iEg4SDgYGCgYGBgoGBgoKCgoKAgYGBgYCBgYGAgIGAf4B8enp5eXx5eHh2dXZ2dHl2d3h3d3Z3dnZ6fnx+fnx2dnd3dnV4enh4eHh4eHh4eJSypaSrp357e3l6eXh4eXl6enl5eXh4enp5eXh4eHh3dnd3eHh3eHh5eXp7e3p8fH1+fX9/f359e3t7e3p5enl5e3t/foB/fn5/fn19fX5+f35+fn6AjpCNioeEhoqLiIaGhIOBgoKBgYGCgYGCgoKCgoCBgoKBgYGCgYCBgIF/f4B/fn19fX9/f318e3t7eXh4eHh5eXl4eXh5eXl4enp6enp6e3t7fH1+fXx8fH1/pqaisqSoi3p7e3p4eXh4ent6enp5eXp8fHt6enx8fHp6ent9fHx+fn+AgoGAgYKAgH9/gYGBgIB/f35+fn5/fX1+f4CAf35+f39+fn9/f39/gH+Af4OQjoyHhoWIi4yIh4aFg4GCgYGBgYKBgoKCgoKBgYKDgoGBgYGBgIGBgIB/goOCgoGBgX99f39/f4F6enh4d3h4eHh5eHh5enp5e358enx9fXt8fX19fX19foaonKOrmp6bfn9/f3x8fYCDgoCAf319fXx9fXt9fXx8fH19fX1+gYGChISDgoB/gYGBgH9/f4B/f39/f39+fn9/f39/f35+f3+Af39/gICAf4CAgICAhJCPi4eGhoiLi4mKhYaDgoKCgYGBgoGCgYKBgYGBgoOCgYCAgYGAgIGBgH+ChIKCgICAgH9+fn+AgH9/fn18fX19fYB/fX+Af35/gH9/fn9/gICBgICBgIGBjaOToK2foZ+Ef4CBgH5+f39+f39/fn5+f39/gYB/f4CBgYCAgYOEgoGCgoGCgH+AgYCBgYGAgH+BgICAf39/gICAgYGBgIGBgYCAgICBgoGBgYCAgYGFjo6MiYaHiYyLi4qGhoOCgoKBgYGCgoOCgoKBgIGBgYKCgICBgYCAgYGAf4KFg4KBgYCAf39+fn+AfX5+fn19fX5/fn9/f35+fn+AgYCAgICAfn9/f3+BgYCKnoyUrpyWm4d9fn1+f39+fn9/f35/gIGBgoKDg4KCg4KBgYKDg4OCgYGBgYKBgoKCgYKBgoGBgYGBgoKCgYGCgYKCgoGBgoKBgYKCgoKCgYGBgoKCgoaPkY+KiImKjY6NiYaFgoKCgoKBgYKCg4KCgoGBgYGBgYF/gIGBgYCBgIF/gYWEg4KCgoGCgYCAgIB8fHx7fH18fH9+fn9+fn5+f35+f39/f39/gH5/g4OAfoilopmfm5aclIOFiY2Ff4B/gIF/f39/f3+BgYGCgoCAgYKDg4SDg4ODgoKCgoKCgoKCgoKCgoGCgoKDg4OCg4ODgoKCgYKCgoODg4ODgoKCgoODg4KCh5KSkIuKi4uPj42Lh4SCgoKCgYGBgoKDgoKBgYGBgIGBgICAgYGBgIGAgYCAg4SDg4OEg4ODgoKCgXx9fHx9gn1+f4GCiIGCgoSCgYGDg4GBgYKDgYSLkJaYpK6mopudoKepoaGgkoF/gYCAgICAgH9/f3+AgICAgH9/gYODhYSEg4SDgoKCg4OCgoOCgoODg4ODg4SDg4KEhYWDg4SEgoKDhIOCg4ODg4OCgoODgoCKlJOPioqMjpCPjYuGg4KCgoKBgYGBgoOCgYGBgIGBgoGBgICBgYGAgYCAgH+BgoODg4SEhIOCgoKCfXx8fn6AgYOAg4OChIaFhoaFhIWFg4ODg4SBgoSUqbCwpJ2inZ6foaKjn5KCg4KDg4KDg4ODgoGAgIKCgYOCgYKCg4OEhYWEg4OChISEhIOEhISDg4OEg4ODg4OEg4SDhIWEhISDg4ODgoKCgoKCgoKBgYKCgo+UlI+Njo6RkY6KiISCgoKCgYGBgYGCg4GBgIGBgYGBgYCBgIGBgYCBgICAgIKChIKChIOCg4ODgoJ9fX2AgH+AgoGDg4ODhIaEhIOEhYWDg4GBg4OCgIKUn5+dmaGdnaCfnZ2Th4eHh4eGhoeHhoaEgoGCg4SDg4ODg4ODhISFhYWDhYSFhISEg4KBg4OCg4SEg4KCg4SCg4ODg4OCgoKCgoKCg4OEhIOFhYWFhoaIk5OTkI+Pj5KRjIqHgoKCgoKBgYGBgYKDgoKBgIGBgYGBgICAgYGBgICAgICAhISEgoKCgoGBgoKBgX+AgYOCgICAf4CCgoGDg4KCgYODg4SDg4GDhYSCgYKNlJWXn52eoZ6blYiHiYiHh4eIiIiFhIOBgIGBgoKCg4GCg4SEhYSDg4OEg4OEhIOBgYGCg4OEhISDg4ODg4OEhIODgoSDg4ODhIWFhoeHh4eIiIiJiY6TkpKOj46RkY+LiYeCgoKCgoKBgYGBgoKCgoGBgIGBgYGAgICAgYGAgIGAgICDg4KCgYKCgYGAf4CBhYWFhoOCgYB+fn+BgoSCgYKDhIOCg4ODg4KChISEhISIk5adl5qenJKEg4WFhYKEhIWFg4KBgH9/gIB/gIGEg4OEhYWEgoKCgoOCg4OFhIKDhISEhYaGhoaGhoWFhoeHhYaIh4aHiIeGhoaIiYeGhYaGhoeIkZKSj46QjpCRjImHhYGBgoKCgoGBgYGBgoOBgYGBgYGBgICAgICBgYCAgICAgISEg4KBgoGAgYGAgYKIh4aHhYSCgH99fX6AgH+AgYGBgYGBgoGAgYKDgoKCgoKLlZeLkZyWhIGCgICAf4GAgICAgH9+gIGBgYKCg4OEg4OEg4OCgoGBgoODg4SEg4SEhIOFhYaFh4eIh4eHh4eHh4eGhoaGh4WFhYaGhISEhIWEhYaSk5GOjo+OkI6JiIeEgoKCgoKCgoGBgIGCgoKCgoKCgYGBgYGAgYGBgICAgYGAgoSDg4KDgoGCgYKDg4iHh4iHhYSCgX5+gICAfn5/f4CBgYGCgoCBhI2DgX+AgH+HkoqPkoWBg4OAf39/gICAgICAgICDg4KDg4ODgoOBgYKCgoOCgYKCgoOCgoSDhISDg4SEhYWFhYaGhoaFhISEhYWEhIWFhYSEhISDhISEhISEipSTkpCQj46NiIaFhIOBgYKCgoKCgYGAgYKCgoKBgoKBgYCBgYCBgYGAgICAgYGAg4OCgoOCgoKBgoOCiImJiYiHhYSDgYKEhIOBgoKCg4SCgoSEgoOKloiEgoSCgX6CiYyCgoKChIOBgYGCgoODgoGDg4SDg4SEg4OCg4KDg4ODg4KCgoKCgoGDhISEhYSFhYWFhIWEhIWFhYWDg4OEhISEhYWFhISEhISEg4ODg4OOlZKQkZGPjYyHhYODg4GBgoKCgoKBgYCBgoOCgYCCgYGBgICAgIGBgYCAgICBgICDhYSEhIODg4SDhIOGh4mIhoWDhIODg4WDgYCDgoWFhISDg4OChI6Zi4OFhISEgoCKjoCCgoKEg4OCg4GBhIWEg4ODgoKDhISDg4ODg4SFhISDg4KCgoKCgoSEhYSFhYWFhYODhYWFhYaFhoWEhIWEhYWGhYWFhIWEhISDhIODhJGUk5KSj4yMioSEg4ODgYGCg4KCgoKBgYGCg4KBgYKBgYGBgICBgIGBgH+AgIGAgYaGhoaGhoaHh4aGhYSDhYaCgIGBgYGHgoB+f4GAj4yDgX9+fXx9jJyNgIKBgoKDgI+TgYKCgoKDg4GBgYKDhYODg4ODg4SEgoKEhIOEhIWEg4OCgoKCgYKCg4ODg4SFhYWFhIOEhYWGhYWEhISEhIOEhIWFhYWFhIODhIOEg4KGlJSSlJKPjYyIhISEg4KBgoODgoKDg4GBgoKBgoKCgYGCgYGBgYCAgYGAgICAgICAhYWFhYaGh4aGhoWGg4ODg4GAgoKCgYKAf35/f4GVl4mAfX19fXuBl4yAg4GBgYGCmZmEgYKBgoKBgYKDgoODgoOCgoKCg4OBg4SDg4ODg4OEhIKCgoKDgoKDg4ODhIWEhISEg4OEhIODg4OEhIODg4ODg4SDg4ODg4KDg4KDgouUk5KTko2NioeDg4OEgYGCg4ODg4ODgoGBgoGCgoKCgoKBgYGBgICBgYCAf4CAgICDhISFhYSFhYWEhIWCg4KDgoKDg4OBgICAgICAgJWfin5+gH2Hin6EhIOEgoODg4WNjYWCgoODgoODg4ODgoODhIKCgoODgoKDg4KCg4KDg4WEg4ODg4SDg4SEhISEhYWEhIWEg4SEg4OEhISEhISEg4SEhYSDg4SEhIODgoKDkJSTkpKPi4yIhoSFg4OBgYKDg4ODg4OCgYGCgoKCgoKDgoCBgoGAgICAgIB/gICAgISDhYWEhYWFhYSFhYOEhIWDg4SEhIKCgoOCgoSBkaGKf4yFfYaJgH6FhYWFhYKAfn19f4KEg4ODg4OEg4ODhISEg4OEhISEg4SEhIOEg4OFhoWFhYSFhYWFhYSGhoWGhoWFhYWFhYWFhYWGhoWGhoaFhoaGh4aFhYWFg4SEhIeTk5OSkoyLiIWFhYWCgoGBgoODg4OCg4KBgYKDg4ODgoKBgIGAgICAgICAgH+AgICAhYWFhYWGh4eGhYWFhISFhYSEhISEg4ODg4OEhYOKkYOEi4WCgYF+fYGHhoSAfn5/f39/f4OEg4OEhISEhISEhISEhISFhYWEhYSGhYWGhYaGhoWGhYaGhYWGhYaGhoaFhIWFhYWFhIWGhoaHhoaGhoaHh4iIiIaFhYaFhYWGjZSTkpGQi4qHhoeGhIGCgYKDg4ODg4KDgoGBgoODg4KAgYGBgICAgICAgICAf4CAgICHh4eGhoeHiIeHhoaEg4ODhIODg4OEg4ODg4OEhISEgYKCgYmBf359foWCf39/f39/f36AgISFhIWGhoaFhYWFhoaHhoaFhoWFhoeHh4iHh4eGhoaHhoeGhoaGh4aGhYSDhIWFhYSFhYaGhoeHhoaGhoeHh4eIiIeGhoaHh4eRlJORkZCLiYiFhoSDgoKBgoODg4ODgoKDgoKCgoOCgYCBgICBgICAgIGAgIB/gIGAf4aHiIeHh4eIiYmIiIODgoKDgoSEhIWEg4KCg4SEhISBgICAhIR/fn5/gH9/f39/gIB/f4B/f4WFhoeIiIeHh4eIh4iHiIiIhoaHiIiJiYmIh4aHh4eJiIaHhoeHhoeFhIOEhYaFhYWFhoaGh4eFhoeGh4aGh4eHh4eHh4eFh5OTkY+RkIyHhoWGhIKCgYGCg4ODg4ODgoKCgoGCg4KCgIGBgYCAgICAgICAf3+AgYB/hoiIiIiHh4iJiYmIg4KCg4ODhIWHh4aFg4OFhISEg4GAgIGMiYGAgYKCgYGBgYB/gH9/fnt6gIaIiIqKiYmJiImJiYmKi4qIiIiJiYuLioqIh4eIiIiHh4iIh4iGh4aEg4OFh4eHhoWFhISDhYWEhYWGhISEhYWFhoWGhYOJlJOQjpCOioaEhoWDgYGCgYKDg4ODgoKCgoKCgoKCgYGBgYGBgYCAgICAgIB/gICBgH+GiYiIiYeIiImJiIiEgoKDg4KDhImKh4aEhIWEg4OCgICBhISCgoKCgoKCgH9+fX19fX59fHt8g4eJi4uKioqIiIqJiImLiomJiImIioqJiomHhoaGh4WGiIiJiIeGh4SDgoSIiIiIh4WCgoGDg4KDg4SCgoKDgoGEg4SDgY6TkpCPj4uIhYSGhIKBgYGBgoODg4OCgoKCgoKCgoGBgYGBgIGAgICAgICAgH+AgIGAf4WIh4eHhoeIiIiHh4SCg4OCg4OFiYqJh4WHhYSFhYKAgYOEgoOCgoKDgX59fn5+fn5+fn1+fX19g4eJioqHh4WGh4eHh4iHh4mGiIaIh4eJiIODhIOFhISFhYaIiIaFg4KCg4WHhoeGhoSCgoOEgoOEhIKBgYGBgYODhIODkZKQjo+Oi4eEhoaDgoGAgYGDg4ODg4KCgoKCgoKCgYGBgIGBgYCAgIB/gIGAf39/gIB/hYaGhYaGhoeHiIeGgYKEhIOChYeJi4qGhIaEgoaGgoKEhIODg4OCgoF+fX1/gH5+fn59fH19fHl8g4aGh4SDgYODhIWFhYODhYSEhISEhIWEgoKCgoSEgYKDg4WGhYSCgoGCgoODhYOEhIWEhIaEhISFg4KDgYKDg4SFhIeSkY+Nj4yKhYSFhIWCgYCBgYODg4ODgoKCgoKCgoKBgYGBgYGAgICAf4CAgYB/gICAgICDhIWEhYWFh4eHh4aAgYGFg4OEhYSHiIWCgIB/gX9/gYODg4ODgoJ/fX5/gICBf31+fn19fX17enp+hISEgoGBgIGBgoKBf36BgYGCgYOBgoGCgoKBg4OAf4CAgoOCgICAgYCBgYGCgYGChIODhYSCg4SDgoKBgoSDhYWGi5ORj4+Pi4iFhYODhIGBgYGBgoODg4KCgoKCgoKCgoGBgYCBgYCBgH9/gIGBgICAgH+AgIKCg4OChIOEhYWGhn+BfoCBgICAf4GDgn9+fn5+fn+Cg4OCg4ODgn19fn+AgIGAfn19fX1+fXx6enp/goKBf39/f35/f4B+fYB/f4CAgX+AgIF/f3+AgX59fX+AgYB/foCAgH+AgICAf4CCgICCgYGCgYGAgYGBgYKEg4aPkpCOj42Kh4eGg4ODgYGBgYGCg4ODgoKCgoKCgoOCgYGCgYGBgICAgH+AgICAgICAf39/gYKDhIGCgoOCg4SFgIB/fH19fn19fn+Af31/fn1+gYODg4KCgYF/fX1+f4CAgH9+fX19fHt7e3p6enqAgIB/f39+fn1+f35/gH9+f3+Af4GAf35+fn9/fn18fn+Af35+f3+Af39/f4CAf4B+f4CBf4B+f39/gH9+f4B/hZKSj46Pi4uHiYWEhIKCgYGBgYKDg4ODg4OCgoKDg4KAgYKBgYGAgICAf3+AgIB/gIF/f36BgoSEgYKBg4OCg4OBgH98fn9/fX6Af4B/foF/f4GBhIOCgYB/f359fn5/gICAfn19fXx7e3x6enl5eXuAgH+Af39/fn5/foCAf35/f4CAgoB/fH5+f35+fXx/f4B/fn5/f4B/f35/f4CAf36Af39+fn5/f35+fn18fH2Fk5KOjIuKiImIhISEgoKCgYGBgoOCgoOCgoODg4ODgYCBgYGBgYCAf39/f4CAgICAgIB/foCBhIOCgYGDhISDhICBgICBgIGAgYKCgoGBgoCBg4ODgYGBgYCAfX19fn5+f359fX19fXx8fHt6eXl5eX2BgIGBgYF/f4B/f4F/gICAgYGCgoB+gH5/fn5+foGAgYF/f39/gIB/f4B/gYB+f3+Afn9/fn+Af31+fn17fIaTkYyLioeHioiGhoSDgoGBgYGCg4ODg4OCg4OCgoKBgICBgYGAgH9/f39/gICAgICAgH9+fn+BgYGAgISGh4aHgoODhYOBg4ODhYSEhISEg4ODhIKCgoKCgX5+fX19fn6AfX19fX19fX19e3p5eXl5eYCCgoKEg4GCgoF/gYCBgYGDgoKDgYGCgIGAf4CBg4GEgoCAgYCBgYCAgX+Cgn+BgIF/gH9/gICAfn9/fnx8ipOQiomIiIiJiIaGhoSCgoGBgoKDg4ODg4KDgoKCgYCAgICBgYGAf39/f4CAgICAgIGBf359fn5/f39+g4aHh4iChYSFg4SFhIWGhYaGhoWGhYGBg4ODgoKAfX19fX19fn59fX19fX19fX18e3l5eXl4fIKDhIWCgYSDgoKDhYaCg4SDgYKCg4OCgoKCgYKFg4iFgoGCgYKDgYGBgYSDgoOCgoKCgYGBgIF/gIGAf36Ok4yHiIaIh4aGhYaGhIKDgoGCgoODg4ODg4OCgYGBgH+AgYCBgYB/gH9/gICAgH+AgYB/fn19fX5+f36Ag4SHiISGhoaFhoaHh4aGh4iHh4eGf32AgIGCgX59fX19fX19fX19fX18fH5+fnx7eXh3eHl5gIODf4OMhIOEhISXl4ODhIF9foGCgoGBgYKBg4aIjIWDgoKBhIKEg4KDhYSEhYOChIOCg4OCgoKCg4KCgpKQi4iJh4mHhoaEhoWFhISCgYKCg4ODg4ODgoGBgYCAgICBgIGBgH9/fn+AgYCAf4CAgH9/fn1+fn+Bf4CCgYWFhYeGh4eGh4iIhoaHh4eGh4V/fX18fX9+fX19fX19fX19fX19fXx7iJKCe3x6fIZ5eHl9gYF+iZaEg4OEhJSTgIGBf39/fn6Fi4B/gICEhpCJhYSCgoGFhYuDgYKFhYaGhIOFhYOEhIODhIOEhISIko+MiYiIiYeHh4WGhYSFhIKBgoKDg4ODg4OCgYGBgYB/gICAgICAf39/f4CAgICAgYGBf39/f4CAgIGBgYGBg4OGh4aGh4aGiIeGhoaFhIOFhH59fHx8fX18fH19fX19fX19fX18fH+RlZaDe3qElHx4eXp7fICCg4GCgYOCgH59fn57iJF8fI6WgH1+f4KGioWDg4SCgYONiX9+f4OEhYWDhYaFhIWFg4SFhYaEhI6Rj4yKioyJiImHhYWFg4ODgYGCgoKDhIODgoGBgICBgICAgYGAgIB/f3+AgIB/gICAgX5+f4GBgoKCgoODgoOCgoWGhISFhYSGhIOEg4KBgIKAfn19fHx9fXx8fH18fH18fX19fHx8e4uRl4x6e3yBenp6e3x5eX19foB/gH98e3t+fn2ClZF/hIh9fH5/g4R8fIGChIKAf4eDfYOBf4KCgYODhISEhISChIOEhYGEkZGOi4yMjoqJiYWFhYODgoKBgoODgoKDg4KCgYGAgIGAgICAgICAgH+Af3+Af357gICBenyAgoKDhYODhIWFhYODg4SCgYKDgoOCgoGBgIB/gX5+fX59fHx8fHx8fHx8fHx8fHx9fHx8fn6Kgnt6e3p4ent7fH18fn1+f319fX18fH+BgX2Gj4F+fYJ+fn6Agnx8gH+CgIKAfn17ioJ9gH9+gYCAgYKBgoCAgYGAf4uUkIyLjo6NiIeHhYWEhIOCgoKCg4OCgoODgYGBgICAgICAgH9+fXx7fHx9f39/gHx6gYF4e4CCgYOFhIOFhYaHhIWAhpSIgIKBgYGBgH9/f39/fn5+gHx8fHx8fHx8fHx8fHx9fHx8fHx8fHl7e3t4eHl7enp8goCBfn+BfH5+f399gIKCgICAgX+CkYF/f4CAfoB+fn9+gIGBfX19e319fXx9fHx9gH+AgH6Afn6BlJKNjI2Oj4qFhoaFhISFg4KDgoODg4OCgoGBgYGAgICBgICAgICAf39/fXt6fYCAgHh+gXd7gIF/gYKCgoKEhoeGhn6IlYp+gIGAgIB/foB+f39/fn+Bfnx7e3x8fHx8fHx8fH59fHt9fHx8e3x8fHp6eXt8en2Fg4OAgYF+f35/gH6FgoF+gH9+foCFhoKAfn6Dhn9+fH6AgIGAf39+fX19fX57fH1/f3+AfX9+gIyRjo2Njo2Nh4SGhoWEhIODg4OCg4ODg4KBgYGBgYCAgYGAgYGBgYGAgH9/f397en9/e3mAd3p/f31+f3+Af4KEhoaFf3+FgX5/gIB/gH5+f31/gIB/f4B/f319fHx9fn18fH19fX19fH58fXx7fXx8ent6fH19f4aEg4CAgX1+fX5/foyEgYZ+fXx8f36CgX99fX19gXx7fXx+gYSDgYB+fn5+fXx+f399foB+f36Eko2MjI+Ni4qGhIaEhISDg4OCg4KDgoOCgYGBgYGAgYGBgYB/fXx8fH1+f39/f397e399d352eH59fH18fX5+gYGCg4B6fX18fn+Af35/f35/fn+AgH+AgH9/fn9+fn5+fn1+fn99fH59fn1+fHt8fHx7e3p9f4CAhIOCf35/fH18fXx8gYN+jH58e3t9fn1+fn17e3t9fHp7e3uAhoSChIOBf4B+f4KCgn9/goJ/gIuQjYyMjYuKiISEhIOEhIODgoKCgoKCgoKBgYGAgoGBgYKCf3+AgIB/fn18fH5/fn55fX52e3Z4fXx8fHt9fX6BgICAf31/f31+f39/foB/f39/f3+Af4GBgH99gH9/fn9+fn5/f3yCfn59fX17e319fHp8fH6AgoGAgIB8fH17fHx8fH18fnt/fnt7e3x8fH18e3t7e3x8enp9en6CfoKEhIKBgoGFhoWGhoaHhYGEkY+NioqLh4iFgoOEhISEg4KCgYGCgoKBgoGBgYGBgoGBgoKAgYKBgYCAgH9+e3x+fnx6fnh5dnd8fHx7e318f4GAf35/foB/f35/f35/gH9/f39/f39/gYKAfn6BgIB/f39/f39+fYN8fH19fH99fX19e3x+fn9/fn5+fnx8fHx8fXx+fnt8e3x8fHx9fH18fnx9fHt7e3x6e3x7e316fX5+f4CAg4eJiYmKiYqJhYiRjoyIiYeFhYOCgoOEhIOCgoKBgYKBgYKBgYGBgYKCgoGCgoCAgX98e3p6eXt9enx+fnl8eXh4dHx8fHt8fHx+gH9/f39/gIB/fn5+fYCAgH9/f3+Af4CDgoB/gIGAgIB/f4CAgH58enx9fX59fX5+jIZ9fX57e4ODfX5+fX18fX19fH1+fH17fXx9fX58fn19fX18e3t6fHt8fHt6e3t6enp7fn6DhYiHh4uLi4qJjJGPjYqIhoWEgoKCgoODg4OBgYGBgYGBgYGBgYGCgoOCgYKBgIGBf3+Af356eHl5en5+e3l6eH5zfHx8e3x8fH5+fn5/gH+AgIB/fn9+gIF/f4B/gIGAgoSDgYCAgYGAgX+AgYKCf39+f31+gH57foGSjHx9f4qAjYx+fn19fX59fX59fHx8fX18fXx9fX1+fX1+fnx7e3t8fH18e3p7e3l6eXh5e35/g4OEh4mKh4mOkI2LiYmFhISCgYKCgoKCgoGCgoKBgYGCgYKCgoGCgoKBgoKAgYGAfoCAf39+e3p5e319eHx6f3KBfXt7fXx8fn59fYGCf4GBgX9/gH+AgX9/gIGCgYGFg4SCgYGCgYKCgICBg4KAf4F/fX2Afnx/f4mDf36DkISEg4F/fn18jYd9fX59fXx/fnx9fXx9fX5+fX5/fX19e3x9fnx8e3x9enp5eXl5e3t+foCBg4eEiI6OioqGhYSEg4KBgoKCgoGBgYGCgoKBgoKCgoKCgoKCgoGCgn+AgIB+f39/fn5/ent5fX16enp9cX6Cent9fX19fXp4f4KAgYKCgICBgYGBgICBgoKCgoWFhIKBgYGBg4F/gIKEgX9+gYB9foF+fX5/gIB9fn+EgH5+f31+fX2KhX1+f31+foB/fX19fH5+fn99f4B9fX18fX9/fHx7fH17e3t6enp7e3x9fn2AgoCJjYqLh4WFhYSDg4KCgoKCgYGBgoKBgoKCgoKCgoGBgoKBgYKCf4CAgH9/f39+fn59eXp6fXx5d3t0e4d8dHd9fn17e3Z2fYCBg4KBgYKCgoKBgYGDg4OChYaEg4GAgICDgX+AgYSBfn6Af35+gH59fn6AgX+Bfn+Af35/gH99f39/f3+Afn9/gH58fXx8fn5+foF/gH2CgHx9gIB9e319fXx8fHx8e3t7fHt8fHx9fIqKiIiFhoWFhISDgYKBg4KAgIGCg4KCgoOCgoKCgoGCgoGBg4J/gIGAf39/fn5+fn57enp8fHt2e3R3f352cnt+fnt4dnd8gIGCgoKBgoSDg4OCgoSDhIOFhoOCgX9/gIOAgICAg4F+foB/fX+AfX1+foCAf4J/gYGAgICBgH1/f3+AgIGAgIB/fnx9fX19fn59gn2AfoKAfX6AgX98fn59fX17fH58fXx8fHp8e3x9iYeHhYWHhYSFhIKCgoGDgYCAgoKDgoKCg4ODg4KBgYGBgYGCgH6AgYB/fn5+fn5+fn56e3p9goN9dXF6fHpxen59eXh0dICAgoKCg4KDhYOEg4KDhISEhIWEgYGAgH6AgoB+f36Bf35/f4B9foB9fX1+gH9/gYCCgYCAgIKBfn5/f4GAf4CAgH9+fX19fnx+fn19gYR/gH9+f4GBf31/f319fn1+fn1+fHt8enx7eoCHg4SEhYSEg4WDgYKBgYKBgICCgoOCgoOEg4SDg4KBgYKBgYOAfoCBf35+fn5+fX5+fnt7en6Jh354cnl9f3F5eHt4eXV1fYKDgoODg4OFhIWDg4OEhIODhIOBgH+Af4CBfn19foB+fn5+gH19f3x9fX6Af4CAgIKAgIGAg4KAf4B+gIF+gIGAgH9+fn5+fX1/fn6FhYGBgH+Ag4F/foGAf35/foB/fn17ent6fHt6goWAg4KCgoOCg4GBgYCAgoGAgIKCg4KBg4SDhIKEgoGBgoGCgn9+gIF/fn1+fn5+fX59fXp7fIWEe3tzeXp8cHd1dnd5dXR6hISBhISDhIWFhoSDg4WEgoODgoCBf39/f4B9fX1+gH1+f39/fn1+fH19foF/gIB/gIB/gIGDgoGAf36AgH+AgYCAgH9/f39/f4B/gIGCgoKBf4CDgn9/g4J/f4B/gX+Af3x6fHp8e3yCgH+Cf3+BgIKCgYF/f3+BgH6BgoKDgYGDg4KEgoSCgYGBf4GCgH6AgH9/fX5+fX19fn19e3t6gH94fHZ5eXtxdHh3dnh1cnmFhYKEhIKEhYWGhISChIOBg4GAgIF+f4B/gHx9fX6AfX5/f39+fX98fn5+gX+Bf39+f4B/gIODg4B/f4GBgIKBgYGAgIGAgICAgIGBgYKDgYF/gISAfYGDhICAgX+BgYKBfXp7e3x8fH9+f4B9f399fYGAgH59fX9/foKBgYKBgIKCgoKBg4KCgYB/gYKAfn9/fn99fX1+fX19fX19ent7fHZ9eXh5enJ1eXl2d3dzdYaFg4WFgYSEhYSEhIGDgoGDgX+AgX5/gH6AfX19fn9+f4B+fn99f3x/f3+BgIF/f3x+gH6AgYKDgYCAgoOEgoGAgYB/gYCAgYGAgYGCg4KBgX+Ag4B+goKEgICCgYKChIJ+e3t8fHx8fX1+fXp+fX14fn9/fHx8fn5+gYCBgYCAgoGBgYGDgoGBf4CAgoB9fn19f319fX59fH19fX16e3p8dnx6d3t4cnZ5e3Z3dnN0hoSEhYSChISFg4ODgYOBgYOBgIGBfX+BfoF9fX1/f39/gH5+f359fYB/gIGBgX5+fH5/fn5/gYJ/gYGCg4eFgX9/fn6AgIGBgICAgIGCgYCAfoCCf36BgoOBgYOCg4OFg399fX18e3x8eXp7en55e3l4f357e3t+fX1/f4F/gH6BgICAgoOCgYF/gIGBf31+fH1+fX19fX18fn58fXx5e3x4enx3endzeHd6c3Z2c3SGhISGg4KDhISDgoKCg4GCgoGAgYF9gIB+gH1+fX5/gIB/f39/f3x/f3+BgIGAf359f39+fn+BgH2AgIGDg4N/f359fn5/f4CAgH9/gYKAgH99gIF+f4CCgoCBg4KEhYaEgH59fHx8fHp5dnl5enl2eXZ+fHt7e358e399gH99fX9/f3+BgoGBgX5/gYF+fX18fX19fX19fXx+jYF8fXl7e3p5fHd4eHR1dXhyd3d0doaEhIWEg4ODg4OCgYKDgoGDgn+Bf35/fn+AfX19fX+AgIB/f39/fIB/f4GAgYCAf3yAf35+fn9/fX5+gYGCgn5/fn1+fn5+f3+Af32AgIB+fn1/gX5+gIKBf4KDgoOEh4SAgH58fXx8e3x1eHl4eHh5d3t8e3t7foV9fn1/ent+fn59foGAgIGAfX6BgH59fXx9fX19fX18e32Dgnx8ent7e3p7d3Z4dXJzdnB4eXJ4hYWFhYOEhIOChIKBgYKBgIKBgIF/fn5+foB+fX58foCAgICAgIB7gH6AgH+BgIB/fYF/fn5/f319fX6AgYKBfn9+fn59fX5/fn9+fH+Af35+fn+Cfn6AgIF/gYODg4OGhICBfnx9fHx7fHh3e3h1eXd3eXx6e3t9kod9fH13en1+fn19f35+gH98foB/fn19fH19fX19fHt8ent9enp4e3x6ent4dHh1cXJ0cHh4cXmEhYaFg4SDgoODgoGBgoKAgYGAgIB9fn5/gH18fn1/gIGAf4CAgHyAf4B+f4GAf39+gX9+f39+fX18gICAgIB+f35+fn18fn9/f358fYB/fX1+gIJ/foCAf36ChIKCg4WFgoJ+fX17e3x8end8eXd4d3d4e3t6e3yFin17end6fH19fHx9fX1/fnx9fn59fXx8fX5+fX18fHt6enx7e3p5enp7enhzd3VxcXNveHdxe4WGhIWDhYKBg4OBgYGBgoCBgICBgH5/fn9/fXx+fYCAgoGAgIGBfX6Af35/gX+Af3+BgH6Af319fH1/gICAgH9/f35/fXx+f39/f319f39+fn6CgYF/gIB/foGDgoGEg4SCgn5+fHx6fHt7eXt6d3N2d3h5e3p7eXp/fnt7d3p8fXx8fH59fH19fH19fXx8fX19fX99fXx9e3l7fHx7enp6enp6eHN2dXBwcm93dnJ7hYaDhYOEgoGDgoKCgYGCgYKBgYGAf4B/f399fX9+f4CBgYJ/goF9foF+fn+Bf4B/gIJ/gIB+fH58f3+BgICAf4B/f4B+fX5+f4B/f39/gH9/f4J/gICAgIB/gYGAgISBgoKAf39+f3x9fn56fYV+dHx9enp6enx5eXp6hoV3eXx8fHx8fXx8fHx8fX19fHx9fX19fn19fX16eX18fH16enp6enp5c3V1b29xb3d0c3yFhoOEgoOCgYKBgoKCgYKBgoGBgYCAgICAgH59gH+Af4GCgn+CgX+AgX5/gYB/f4CAgn+Bf319f35/f4KAgICAgIB/gIB+fn1/gH9/gIB/f39/gH+AgICAgH+AgYCBgYGCgYCAf39/fn1/fnuBk416fH18e315e3p6eHmBgXh5e3x8fXx8fHx8fHx9fX18fH18fn1+fn59fHp8fHt8fXt5enp6eXl0dXVvb3Fwd3N0fYWGg4OCg4KAgYCCg4KAgYGCgYKBgYCAgIGAfn6Af4GAgYKCgIKCgICCfoCBgX9/gX+BgIF/fH6Af3+AgoCAgICAf3+AgH9+fX6Afn2AgIB/f3+AgICAgYCAf4CAgYCBgYKCgICAf39/fX5+fIGGiXx8fnt7fnl6e3p7jn53d3l7fHt9fHx8fHt9fH19fX18fXx+fn5/f358enx9e3x9e3l6e3p5eXN0dW5zcXB4cnV6hYaDg4KDgoCAgIKCgX+CgYKBgoGBgYKAgYF/fn9/gYGCgYKBg4OAgYJ/gYGBf4CAgIB/gX99f4F/gICBgICAf4B+gICAf359foB+fn+Af39/gH9/gICBf4CBgH+BgIGCgoKAgICAgIB9foB9gIOCe35+e3x9e3p8fHyHeXh4eXx8fH17fHx9fX18fH19fn19fX5+f3+Af317fH18fHx7enl7e3l5c3J1bnZycHhxdXaFhYOEg4KCgYCBgoF/gIKCgoKDgYGDgoCCgYB/gICCgoKBg4KEhICBgX6BgoF/gICAgH+Cf36AgYCCgICAgIB/gH+AgIB/fn2Af39/f4CAgH+AgH+AgYF/gICAgIGBgYGBgYGAgYCAgH9/gH5/fX59fn57fXx9e3x8d3h1eHh5e3x8fXx8fHx8fX5/f39/fn19fn9/gIGAf3x9fHx9e3p7eXp8eHpzcnVud3FxenF2d4WFg4ODg4KCgYKDgH+CgYSDg4SBgYOBgoOBgYCAgIKDgoCCgoSDf4GAfoKDgICBgICAf4CAf4GBgIKAf4CCgH9/gICAgICAf4CAgH+AgICAgIB/f4CBgYCAgICAgYKAgoOCgoCCgYGCgYB/f4B/gId+fnx6fXx7fX94d3Z5eXp8fXx8fXt8fH19fn5/gIGAfn1+gICAgoGAfH59fX58d3t6ent5eXNxdW53cHV6cXZ5hYWCg4KDg4KDhISAgIOBhoOEg4GChICEg4KCgICCgoSBgYKChIJ/gIB/gYOCgYCBgYCAf4GBgYGAg4F+gIOCf35/goGAgIB+gYCBf4CAgYGBgYCAgIKBgYKBgYCBgYGBgoOCgoOBg4OCgYCBgH+AhH19fXx/fXp9f3t5dnp4eXt7fH19e3x9fX19fn+AgYGAgH+AgICDg4B9f35+fn15eXt6enp5c3J1b3dxd3lzd3uFgoKDgoOEgoOEg4CAg4OGg4ODgoKEgYSDgYKAgIKBhIGCgoGCgX+BgICCgYKBgYKCgIGAgICBgoGEgH6Bg4F/f4CDgoCBfoCCg4KAgYGBg4KDgoGBg4KChIGAgYOBgYKEg4KEhIODhIODgYGBgYCCf4B/fYB8enx/e3t3fHl5eXt6fX59fHx8fH1+foCBgYCAgIGBgYSEgH2Af39/f357e3t6e3p0cHhyeXR2eHR3e4SCg4KDg4SChIODgYKDhYaEgoODg4SChIOBg4CBg4KCgoKCgIKAf4GAgIKBgoGCgoKBgIGBgYOCgoOAfoGDgX9/gYSEgYN/goKBg4KCgoGEg4OEgYKEgoOCgoGCgoOBg4SDhISEhISFg4SCgYOCgoOBgYGAgH58fIB9fHh8eXp5enx9f3x7fHx9fX18fICAgICAgYGBgYKBfoGAgICAf3t7e3p6enVweHd5dnV8dXZ8gICDgoODg4OEhISAgoOGhYWDg4KDhIKEhYKCgYKDg4GCgoKAgYB+gYCBgYKDgoKCgoGAgYKCg4KCg4B/gYOBgICChIODgoGCgoGDgoKDg4ODg4SAgoSDg4OBgX+Bg4KDhYKEhISEhISDhISChIOEhIKBgoGBgHt+gX59eXx6enp9fHyBfXp8fH19fHp7fn5+gIB/gYGAgICAgIGBgIB/fX18fX18dnJ2eHh2dH92dX2Hh4OChIWDg4SFhICChYWEhIOCg4SEgYSFg4KCgoODgYOCgoCCgH2AgIGCg4KCgoKEgoGCgoOEgoKBgICBgoGAgYOFhIOCg4CCgoOCg4ODg4OEg4CCg4KEg4KCfoOBgoSEgoODhISEhIOEhIOEg4WEg4ODgoKAfICBf3x8fXp6fH6AfX9/fHx6fH59fH19fn5/f39/gICAgH9+foCBgICAfnx9fX5/fn18e3h2f3Z3f4SHg4KDhYODhIaEgYKFhoWEhIODhISChIWFgoKDg4SCg4KDgoKBfoCAgoKDgoODg4SDgYKCg4OCg4GBgYGDgn+ChISDg4KEf4KEg4ODgoSDg4SCgIOEg4SDg4KCg4KChIOCg4OEhISEhIWEg4OEhYSFhIOBgoB9gYKAfXx8e3x8gH19foB+fn1/fnx8fH19fn5/fn+BgYGBgH99fX6BgYB+fn19fX59fX5+f3+AfH2AgYKCg4OGg4SDhoSBgoiHhYSDg4SEhYGFhYWDg4SDhIODgoOCg4F+gYGDg4SCg4OEhIOCg4KEg4ODgoKDgYOCf4KDg4ODgoOAgoWDg4ODhIODhIOBgoSEhYOCgoODg4GEg4GDg4SDg4SEhYSEhIWFhYWEg4ODf32BhIB9fXx8fHx/gX5/f39/fX99e3x9fX19fX5+f4CBgIGBgH59fH6Cf39+fn5+fX1/f39/gICAf4CEhIODhIWDhIOFf36CiouFhISDgoOFgoaGhoOEhISEhIODg4OEgn+BgYODhYSFhIWEg4KEhISFhIODgoSDhYKBhISFhYaEgoCDh4SDg4OFhIWFhIGEg4OHgoOCg4GCgYSDgoODhYODhIWEhYWHh4aHhYSEhYSBf4GDf35+fH5+fX+BgH9+fHx/f358enx9fX19fX5+fn9/gIGBf319fIB/gH5+fn5+f3+AgYGBgYKAgYWFhIOEhIKEg4aAgoWFiomEhISEhYWDh4aGhISEhIWEhISEg4SDgYKDg4OEhIaEhYSDg4SEg3yDhHuBhHd5g4F9hH5+cnWDgoF2foOEgH2BdYF5g39/f36EhIKDg4KBg4SDg4SFg4SFhoSFhn2EeXx+f4N7hYOBhIOAf31+f31+gYOBfXt/fX6Afn18fHx9fX19fH19f4B/gYJ/fX18f4GBgICAgH+BgYGCgYKDg4KChoSEhIWEgYOEhYOEhoSKiIWFhYOFhYSGhoaDhISFhYWEhYWEhIWCgoOEhYWFhoSFhIOEhYWCaICFanx7cXF8gXOGc3R0fYKDdXNxg4ZzcHVyc3SDdnt9dYF/goOBgnZ5hYCDgIR/hYSChYWCaHpyc3N8gHKBg3+Dg32BfX5+fX6Cg4J8f4F9f4B9fXx8fHx9fHx8fn1+gH+BgX99fX2AgYKBgYGBgIGBgYKCgoKCgoSHhIWEhYSBgoSGhoOFg4aIhoaFg4aGhoeGh4OFhYaFg4KFhoSFhYODg4SEhoaGhIaEg4SFhn1xe4FweXZ+g3+CbnlwdXN8dnl5hnKEg3B2eHF2dHR1cnN0dml/gG5yb3R2bnVsd217c26Ah3ltfXJzdnN2bW53bHB5bHV9f398foGAgX2Af32Af4B/fX18fHx9fH1+f32Af4CAfnx/foCBgoCBgICAgYCAgIKDgoKEhYeGhoCChYODhYeGg4WFhYaHh4SDhoaIiYaHhIWGiIeEg4WGhYWEhIOFhIKFhoaFhoWEhoWHdnB0e3BydX+HhYNtdW92b3x1coR5eYd4cXR3bndod3pucHaCcoN+b3p5eW1vbnpvb213fXiGcHF6cHJ0ZoF1fm57eXNveX+Af31+gYB/e39+fIB+gIB+foCAgYB+fn9/foF/gH9+fYB9f4CBgIB+fn+BgH9+goOCgoSFh4eEfoeEg4OFh4aEhoWFhoaIhISGh4iIhoeEhoaLioWEhoeHhYOFhYWEgoWFhYWGhYWGhYZxdXByc29zenl+hHSIdHV+iHZugnKEhnluanJ/cW1zd3x/dXR8hH54cXV3bnl1enF2eHV6eYRyaW95eHBreXN6b3p3dnZwgYB/fn5/f356fn18f31/f359gIGDg4CCg4GBhIKBf4GBgH1/f4F+f35+f4GAfn6BgoCAgYSHhoODhoSEhIaHhoWFhYWGhoiFhYaFh4eFhoSGhomIhYSJi4iGhIaFhYWDhYWEhoaGhoaFg3iLeXKIentwcIWEeIV4eWtzfnl7a3KDh4N6fG16eXl0fYB2bm+AgG90fHV3cXl9fW1+dW+DhYZ6gHJye3x1cG96a3N8bnaCgYF+fn99fXp9e3x9fX9/fn1/f4KCf4GDgYGDgYB/gICAfn9+f31/fn1/gH58fYGAfn6Ag4iFhoOFhYWFhoeFhYWFhYeHiIaEhoWHhoaFhIWFhIWFhomKh4WEhoWGhoWGhoSGhoaGhoWGh4eHhoaEhoWGh4iHhYeGhoOHhoWFg4SFhoWGhIaEg4SEhoSEgYODhISFhIWEhYSGg4aHhYWEhIWHhoSEhYaFhX13hoOEhIKBgX1/fnt8e357fHx9f359fH5+gYB9f4F/f4GAfn5+gH5+f35+fX99fX5/fHt8f358fH+BiYaFhIaGhoWGhoWFhYWGhoeIhoSGhYaGhYWDhIWGhYSGhoaGhYSGhIWGhoaGhIeGh4eGhYeIiIiIhoSHhYaGiIaFiIeIhYeGhoiFhYaHhYaGhYOChYWGhYWDhYSEhIWEhoWEhYWDhoaFhoWEhoeGhISFhoOFhIKEg4OFg4OCfYB/e3t8fnt8fH1/fnx8fn2Af31/gH5+gH99fXyAfX5+fn5+f3x8fX57fHx/fHt7fn+Ih4SEiIaGhoeGhYWEhoaGhoiHhIWGh4aFhIODhIaFhIeFhoaFhYaEhYaGh4eFh4aJiIaGiIeIiYiFhYiFhoeGh4aHhoeFh4eGh4WFhoeFh4aFgoOFhoaEhIOEhIOEhoSGhYWFhYOGhoWGhYWGhoWEhIWFg4SHhYOCg4SDhIF+gIB8e31+e3x7fn59fHx+fX5+fX9+fX1+fnx9fH98fn58fYGAfHx8fXx8fH56e3t8foiHgoWIh4eGhoaGhISGhoeGiIaEhYSGhoSFh4OEhYSFh4SFhoaFhoSGhoeHhoaHh4mIhoaIh4iKiIWHiIWHh4WHhoeGh4WIiIeHhYaGh4WGhoSBhISFhoWFhISEg4SFhIaGhoWGhIaFhoaFhYaGhYSDhISDg4eDhIGChISDgoCAgHt7fn18fHx+fXx8fH19fH18fn18fX18fHx8fXx+fXt8gX99fH18fnx8fHp6fHx9iIeChoiHhoeGhoaDhYaFhoaGhYOFhIaFhIiJg4GEg4SGhIaGhoaGhIeHiIiHh4eIioiGh4iHiImIhYiHhYaGhoeHh4WHhoiIh4eFh4eHhYaHhIKEg4SGhYeFhISEhISFhoaGhoaFh4WFh4WGhYaFhIOEg4OEh4GDgIKDg4KCgn+Ae31+fXx8fH59fH19fH57fHx7fHx9fXt7e318e359e3x/fX18fX1+fXx6ent7fHyIh4KGhoaGh4aGhYOFhoWFhYWEg4WChoSDiId/enqChYaEhoaFh4aEh4eIiIiHhoiKh4aHh4eIiYeFiIeFh4eGhoeHhYeGiIiHhoWHhoiGhoeDg4SEg4aGh4WFhISEhYaGhoaGhYaHhoaIhoaEhoWDg4ODgoOGgYN+goKDgIOCf398f35+fHx9f318fX18fXt7e3p7fHx8e3t7fnt7fXt6e358fHx8fX5/fXt6fHp8fImHg4aFhoWGhoWEhIWFhYWFhIOBhIGGhIKEhHyAhn+ChYWGhYWGhYSHh4iIiIaFiYqHhYeGh4eIh4WIhYaHiIaGh4eGh4aIiIeFhoeGh4WFiIOEhoWEhoaHhoWEg4WFhoaGhoaFhoaHhoeHhYOFhYOBg4KBhIWCg36BgYF/g4F/fn5/fX98fH1/fXt9fXx+enl6eXt8fXt7e3t+fHx8fHp7fXx8fHx+fYF8e3t7e3x7iYeEhoSGhIaGhYSFhoWEhIOEgoCDgYaDgYJ/eoSMe4CEhYeGhoaFhIeIh4aHhYWHiYeEh4WGhoiGhYeEhoeIhoaIh4eHhoeIhoSGhoaHhYWHg4SFhIaGhoeFhISDhYWGhoeGhoWGhoaFhoeEg4SFgoGCgYCEg4OCfYGBgH6DgX5/f4B8f3x9fX59e359fH15eXp5e319enp7e318fXx8ent9fHx9fH5+gHt7e3x+fXyIh4WGhYeEhoSFhYWFhYODgYOBgIKBhYJ/gH9/fXx7gYSFhoaEhYSDh4eGhoaFhIaJhoKGhIaGhoWFh4WHiImGhYiHiYeGhoeFhIaFhYeFhIeDhIWEiIaGh4WFhIKFhYaFhoaHhIaGhoaFhoODg4WAgIGAgIOBg4B8gYB+foKAfYB/gXx/fH1+fX57fn18fHl6enl6fX15enp7fHt8e3t7e319fH18f35+fHt7fX59fIiGhYaGhoSFhYSFhYSDgoKAgoGAgICDgX5+foB5en2Ag4OFh4WEg4OHhoOEhYSChYiFgoSDg4WFhYWHh4aIiIaFiIeJh4aFhYWDhoSFh4OEhoSEhYSHhoWGhYaEgoWFhoaGhoaEhYaGhYWFgoKDhH9+gICAgYCDgHuBf31+gn5+gH6Afn99fX59f3t/fXt6eXp6eXp8fXl6ent7enx6e3t7fH19fXyAfn18fH1/fnx7h4WFhoaGhoSFhIWDhYKBgICAgYB+f4KCfX1/f3t/f4KDg4WGhYSDg4aDgYOEgoCFh4WCg4GBg4SEhIaGh4iHhYWIhomHhYSEhIKFg4SGgoOFhISGhIeGhYWFhoOEhYSFhoWGhIOEhYWDhYSBgYODf35/gH9/gIN/fIB9fX+CfYCBfn6Bfn5+fX1/e398e3p5enp5ent8eXp6e3t7fHp7e3t8fX19fYB9fXx8fYB/fXyGg4aGhoaFg4SDhoKFgYGAf3+AgH5/gYJ8fn9/foCAgoKChIWDgoGChIGAg4KBgISFhYKBf4CCg4OEhYWHhoaEhYeFh4WGgoOCgoOCgoWBg4WEhYaEhoaHhoaFgoSEg4SFhYWDhIODhIKEhIB/goJ/fX5/fn5/hH57f318gIF9gYB9foN9fn59fX57fnt7enl7enl6ent5enp6e3t8ent8fHx+fn1/gXx9fHx9f4B+gIaEhYWEh4SEg4KGgoOAgYB+fn+AfX5/gnx9f39+fn+BgYKEg4KBgYKCf4CBgoCAgoWEgoB/gIGCgYOFhYeFhISGhoOFg4WBgoGBgoGCg4GChISEhYWGh4eGhYSDg4ODhIWFhIGDgoOChIODgH+AgX59fX5+fH6Dfnx+fHyBgH6Cf35/gnx/fn19fHx8e3t6enp6eXt6enp5enp6e3x5e317e35/f4GAfX59fX1/gICAhoSEhYSFgoSCgoSCgoCBgH59fn9+fn6AfX2Af35+foGBgoODgoSHgYF+gICBf3+ChIOBf35/gIJ/goWEhYOCg4WFgoSBg4CBgIGBgYKBgIGEg4OGhYWHh4WEhIWCgoKDhYSCgYGBgYCFg4F/foB/fnx9fn18foN9e318fYF/gIN9fYCBf35/fXx8fH17e3p5enl5e3l6enl6ent7e3p7fXx8f3+BgoB+gH+AgH+AgIDKysrKysrKysrKysrLy8vLy8vLy8vLy8zMzMzNzc3Nzc3Nzc3NzczMzMvLy8vLy8vLy8vLy8vLzMvLy8vLy8vLy8vLy8vMzMzMzM3Nzc7Oz8/Pz9DQ0NHR0dLS0tLS0tLT09PT0tLS0tLS0tPT09TU1NTU09PT09PT09PT09PT09PT09PT09PT09PT09PT09PS0tLS0tLS0tLS0tPT09PT1NTV1dXV1dXV1dXV1dXV1dXV1NTU1NTT09PT09PT09PT09TU09PU1NTU1NTU1NTU09PT09PS0tLS0tPT09TU1NTU1NPT09LS0tLS0tLR0dHR0dPHhnNlYFtLWWdVTUZIQD03Nzg5Nzw8PDo8Oz42Oj04PDs6OTg3ODs7Oj87PTs8PD47P0E/QkJBQ0RFREE+PTw7QENDQUBDQ0FBR0hHSUtSwtXS09PT09TU1NTU1NTU1NTU1NXV1dXV1dXV1dXVysrKysrKysrKysrKy8vLy8vLy8vLy8vMzMzMzMzNzc3Nzc3Nzc3MzMzMy8vLy8vLy8vLy8vLzMzMy8vLy8vLy8vLy8vLzMzMzc3Nzc3Oz8/P0NDQ0NHR0tLS0tLS09PT09PT09PT09PS09PT09TU1NTU1NTU09PT09PT09PT09PT09PT1NTU1NTU1NTT09PT09LS0tLS0tLT09PT09PU1NTU1dXV1dXV1dXV1dXV1dXV1dXV1NTU1NPT09PT09PT09PU1NPT09TU1NTU1NTU1NPT09PS0tLS0tPT09PU1NTU1NTU09PT09PS0tLS0tLR0dHSzIxyZ2BcTVllUktHSz87Mzc4Ozg5Pj05PDpBOjs9Nzs8PDo6Nzg6Oz0/Oz88PTw/Pj9BPUFBPkNDREJAQT46Oz9DREFDRERCQklHSEhJTr7V0tPT09TU1NTU1NTU1NTU1NXV1dXV1dXV1dXV1crKy8vKysrKysrKy8vLy8vLy8vLy8vLy8zMzMzMzM3Nzc3Nzc3NzMzMzMzMy8vLy8vMzMzMzMzMzMzLy8zMzMzLy8vLzMzMzc3Nzc3Ozs/P0NDQ0NDR0dLS0tLS09PT09PT09PU09PT09PT09TU1NXV1dTU1NTT09PU1NPT09PT09PT1NTU1NTU1NTU1NPT09PS0tLS0tLS0tPT09PT1NTV1dXV1dXV1dXV1dXV1tbV1dXV1dTU1NTT09PT09PT09PU1NTU09TU1NTU1NTU1NTT09PT0tLS0tLT09PU1NTU1NTU1NTU09PT09PT0tLS0tHR0s+Sd2hfXk9XZ01LRks9ODc2NTk5OTw+OT88Qzo7PDc5PD07OTc5Ojw9QDs+PT47PD48PT5BQD5EQ0NDP0E9Ojs9QkNFQ0NEQT9FSEpJSky61dPT09TU1NTU1NTU1NTV1dXV1dXV1dXV1dXV1dXLy8vLy8vLy8rKysvLy8vLy8vLy8zLy8vMzMzMzMzNzc3Nzc3Nzc3MzMzMzMzMzMzMzMzMzMzMzczMzMzMzMzMzMzMzMzMzc3Nzc3Ozs/Pz9DQ0NDQ0dHS0tPT09PT09PT09TU1NTU09TU1NTU1NTV1dXU1NTU1NPU1NTU09PT09TU1NTU1dTU1NTV1dTU09PT09LS0tLS0tLS09PT09TU1dXV1dbW1dXV1dXV1tbW1tXV1dXV1NTU1NTT09PT09PT1NTU1NTU1NTU1NTU1NTU09PT09LS0tLT09PU1NTU1dXV1dTU1NTT09PT09PT0tLS0dHRmn5nYWJOVWpKSElLPzw6OTM3Njc3PTs+Oj06Ojo4ODo7Ozg4Ojs7PD46PT09Ojw/PD0/QkA/Q0RDRD5APT08QENEQ0JEQkQ+REhJSUtMttfT09TU1NTU1NXV1dXV1dXV1dXV1dXV1dXV1dXVy8vLy8vLy8vLy8vLy8vLy8vLy8zMzMzMzMzMzMzNzc3Nzc3Nzc3Nzc3MzMzMzMzMzMzMzMzNzc3NzczMzMzMzMzMzMzMzc3Nzc3Ozs7Pz8/Q0NDQ0NHS0tLT09PT09PT1NTU1NTU1NTU1NTU1NTV1dXV1NTU1NPT1NTU1NTU1NTU1NTU1dXV1NXV1dXV1NTU09PT09PS0tLT09PT09PU1NXV1dbW1tXV1dbW1tbW1tbW1dXV1dXU1NTU1NTU1NTU1NTU1NTU1NTU1NXU1NTU1NTT09PT09PT09PU1NTU1dXV1dXV1dTU1NTU09PT09PS0tLR0p+DaV9kU1hsSEhIS0A9Nzg0NzY6Oj87RDw8Ojw8OTg6OTo6Ojs8Ojo7OT49Pjk9QDs/QUFCP0JCQUM9Pz8+PEBCRUNDQkBBO0ZJR01MSbLY09TU1NTU1NXV1dXV1dXV1dXW1tbW1tbV1dXW1svLy8vLy8vLy8vLy8vLy8vLy8vMzMzMzMzMzM3Nzc3Nzc3Nzc3Ozc3NzczMzMzMzMzMzc3Nzc3Nzc3Nzc3Nzc3Nzc3Mzc3Nzs7Ozs7Pz8/P0NDQ0NHS0tLS09PT09PT09TU1NTU1NTU1NTU1NTV1NXV1dTU1NTU1NTU1NTU1NTV1NTU1dXV1dXV1dXV1dTU1NTU1NPT09PT09PT09PU1NXV1dbW1tbW1tbW1tbW1tbW1tbV1dXV1dTU1NTU1NTU1NTU1NTV1NTU1NXV1dXU1NTU1NTT09PT09PT1NTU1dXV1dXV1dXU1NTU1NTT09PT09LS0tSjiGxfZlJWakdIR0lBPjM2Njo7PDhDPEJBPjtBPDg5Ojw6Ojw8PDk8PTo7PD09PD89QD9AQT9AQUBCPD4+PzxCQ0NDRkBBQT1ISklOTUeu2NPU1NTV1dXV1dXV1dXV1dbW1tbW1tbW1tbW1tbMzMvLy8vLy8vLy8vLy8vLy8vMzMzNzc3Nzc3Nzc3Nzc3Nzc3Nzs7Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Ozs3Nzc3Nzc3Nzc3Nzs7Ozs7Oz8/P0NDQ0NHR0dLS0tPT09PT09TU1NTU1NTU1NTU1NTU1NTV1dXV1dXU1NTU1NTU1NTU1dXV1dXV1dXV1dXV1dXU1NTU1NTU09PT09TU1NTU1NXV1dbW1tbW1tbW1tbW1tbX19bW1tXV1dXV1dXV1dXV1dTU1NTU1dXV1dXV1dXU1NTU1NTU09PT09PT1NTU1NXV1dXV1dXV1dXV1NTU1NPT09PT0tLWroprY2VSWGhMSkdJQjg0OTQ6Ozo5QDk+Q0U/PDw5OTk9Oj07PDw6PTw7OTw9Ozs/PUA9PT5AQD9CQT5APD05QERDQkFBQj48SEpLTU5IqNnU1NXV1dXV1dXV1dXW1tbW1tbW1tbW1tbW1tbWzMzR09PT09PT09PT09PT087Ky8vLzMzMzMzMzMzMzM3Nzc3Nzc7Ozs3Nzc3Nzc/Pz8/Pz8/Pz8/Pz9DQ0dHR0dHR0dHR0dHS0tHV2djY2NnZ2dra2tvb29vZ2dnZ2dna2tra2tra2tjW19fX19fX19jX19fX19XV1dXV1dXV1dXV1dXV1tfX19fX19fX1tbW1tbX2tra2tra2tra2trb3NzX1dXV1dXV1dXV1dXW1tbX1tbW1tbV1dXV1dXV1dXV1dTU1dXV1dXV1dXU1NTU1NTU1NTU09PU1NTU1NXV1dXW1dXV1dXV1dTU1NTT09PT09PS1bqKa2hoUlhlSUlMTkA5OTo0O0E8Nz05QUM+QD89ODo6Ozk9Oz4/Ojs8PDo7PDo7Pj1APT8/P0FAQUE/QTw8Oz5BRENBREA9PElJSk1ORqPa09TV1dXV1dXV1dXW1tbW1tbW1tbW1tbW1tbW1szNhG1wcHBwcHBwcHBwcGqn493d3t7e3t7e3t7e3t3S0NDQ0NDQ0NDQ0NDQ0ci5ubm5ubm5ubm5ubq6t6WkpKSkpKSkpKSkpKSnhmBjY2NjY2NjY2NkZGRlhIuKioqKioqKioqKioemuri4uLi4uLi4uLi4uLrR1NTU1NTU1NTU1NTU1cm7vb29vb29vb29vb2+tIqKioqKioqKioqKiouHvebh4uLi4uLi4uLj4+Pi2NfX1tbW1tbW1tbV1dXV1dXV1dXV1dbW1dXV1dXV1dTU1NTU1NTU1NTV1dXV1dXW1dXV1dXV1dXV1NTU1NTT09PT09XDkXFrak5TYkxMVk08Ojo3Nz5DPjg+Oj8/QT0/QDc7Ojs7PTs+Pjo7PD48Oz07PT8+QDw/Pz1AQEBBPj88PjxAQUVCQkZAQD9HSEpLT0ae2tXV1dXV1dXW1tbW1tbW1tbW1tbW19fX19fX19fMzk4mKysrKysrKysrKysiivTr6+rq6urq6urq6uvp1dLS0tLS0tLS0tLS0tTEqaqqqqqqqqqqqqqqq6aGhIWFhYWFhYWFhYWFik4MEhISEhISEhISEhIRE0pUU1NTU1NTU1NTU1NPg6ejo6Ojo6Ojo6Ojo6Knz9PS0tLS0tLS0tLS0tS/qKqqqqqqqqqqqqqqrJtTUlNTU1NTU1NTU1NTS6ry6+vr6+vr6+vr6+vr6dnX19fX1tbW1tbW1tbW1dXV1dXV1dbW1tbV1dXV1dXV1dXV1dTU1NTV1dXV1dXW1tXV1dXV1dXV1dXU1NTU1NTU1NPUy5h2bGlKTl9NUlVNPjw8Nzs/Qz42Ojc+Pzs9Qj85PDk9Ozw6PD07PTs9Ozs9PD0+PT07QT08QUBBQT08Pzw7QEJDQURFPUFAQ0ZLS09GmNzV1dXV1dbW1tbW1tbW1tbW1tfX19fX19fX19fXzc5SKzExMTExMTExMTExJ43z6enp6enp6enq6unq6dXS0tLS0tLS0tLS0tLUxaqrq6urq6urq6urq6yoiIeHh4eHh4eHh4eHh41SEhgYGBgYGBgYGBgYFxpOWVdXV1dXV1dXV1dXU4WopKSkpKSkpKSkpKSjqM/T0tLS0tLS0tLS0tLUwamrq6urq6urq6urq66dWFdXV1dXV1dXV1dXV0+r8erq6urq6urq6urq6unZ19jX19fX19fX1tbW1tbW1tbW1tbW1tbW1tbV1dXV1dXV1dXV1dXV1dXV1dXW1tbW1tXV1dXV1dXV1dXU1NTU1NTU1NGcenFpSlRdT1JVTkQ+Pzs/QEA4Ojs4PDs7PD86Ozs4Ozk5Ozw7Ojw5Ozs8Ozo9PT0+PUE/Pj8/Pj08PT88PEFBQ0FERTw+QEVGSktNRpPc1dXV1tbW1tbW1tbW1tbW1tfX19fX19fX19fX183PXDk9PT09PT09PT09PTWT8Ofn5+fn5+fn5+fn5+bV0dLS0tLS0tLS0tLS08Wtrq6urq6urq6urq6vq46NjY2NjY2NjY2NjY2SXSInJycnJycoKCgoKCcpWmNiYWJhYmJiYmJiYl6MrKmpqampqampqampqazP09LS0tLS0tLT09PT1cKtr6+vr6+vr6+vr6+xoWJhYmJiYmJiYmJiYmJbr+/p6enp6enp6enp6enn2djY2NjY19fX19fX19fX19fX19bW1tfX19fW1tbW1tbV1dXV1dXV1dXV1dXV1tbW1tbW1tbW1tbV1dXV1dXU1NTU1NTWo3txZElbYE5OVU9AQT89REI+Oz06OTs6PT07PDs6OTg5OTs8Ozw8Ojo7PDo7QD08PTxAQTxBQTs7PEA/PD1CP0RDQ0U8PkJERkpMTEWN3NXV1tbW1tbW1tbW1tbX19fX19fX19fY2NjY2NjNzcXCw8PDw8PDw8PDw8PCydDPz8/Pz8/Pz9DQ0NDQz87Ozs7Ozs7Ozs7Oz87NzMzMzMzMzMzMzMzMzMvJycrKysrKysrKysrKysfCw8PExMTExcXFxsbGxsvMy8zLzMzNzMzMzMzLz9HR0tLS0tLS0tLS0tLS1NXV1dXV1dXV1NPT09TT0tLS0tLS0tLS0tLT09HNzc3Nzc3Nzc3Nzc3NzdTY2NnZ2dnZ2dnZ2dnZ2djY2NjY2NjY2NjY2NfX19fX19fX1tfX19fX19bW1tbW1tbW1tXV1dXV1dXV1dbV1dbW1tbW1tbW1tXV1dXV1dTU1NTU169/cF5GXmJQUVdOR0ZDQ0lBPz07PDo8N0BBPD04Ojo4OTg7Pzs8PDs7PDw8PD87PD46Pj44PkI8Pj1BPjw+QkBERUNAPD5APkNJSUtEh9zV1tbW1tbW1tbW1tbX19fX19fX19jY2NjY2NjYzs3P0NDPz8/Pz8/P0NTQ0M7MzczP09LSzs3P0s7Ozs7Ozs7O09TQz9DU0s/Pz9PSz8/Pz8/Pz8/Pz8/Pz8/P0NDQ0NDR0dHR0dHS09PU1NTU1dXV1tbW1tfW1tbX1tfX19fX19fX19bW1tbW1tbW1tbW1tbW1tXV1dXV1dXV1dTU1NTU1NbV1tbW1tbW1tbW19bW2NjY2NjZ2dnZ2dnZ2dnY19jY2NjY2NjY2NnZ2dnZ2dnZ2djY2NjY2NjY2NjY2NjX19fX19jY19fX1tbW1tbW1tbW1tbW1tbW1dbW1dbW1tbW1tbW1tbW1tXV1dXV1NTV1di4gm9XSl9jUlFaS0hBQTxCPT07Oj4+PD4/PT0/Nzk6OTk3OD48PD47Ozw7PDs/PT0+OTs7OT0+P0A+QD07OkI/QkNCPz0+QD5CRUdKQoDc1tbW1tbW1tbW19fX19fX19fX2NjY2NjY2NjY2M7Ozs7Ozs7Nzc3Nzsqfys3Nzc3QuYOEi8fTwJrLz87Ozs7O0KaSxdPIlKfS0ceSq9HOzs7Ozs7Ozs7Ozs7Oz8/Pz8/P0NDQ0NDQ0NDR0dHR0tLT09PU1NTU1NTV1dXV1dXV1dXV1dXV1dXV1dXW1tbV1dXV1dbW1tbV1dXV1dXV1NTU1NXV1dXV1dXV1dXW1tbW1tbW1tbX19fX19fX19fY2NjY2NjY2NjY2NnZ2dnZ2dnZ2dnZ2dnY2NjY2NjY2NjY2NjY2NjY2NfX19fX1tbW1tbW1tbW1tbW1tXV1tbW1tbW1tbW1tbW1tbW1dXV1dXV1dXYwIBuVU9gY1dZW0xMQ0A9PTs9Ojw+Qj5CQ0A8Ojg5ODo6Ojc7Pz4/PDw7PDo5Pzw8PTg5PD9BPj09PUFAPTtBQkBCQz47QD9BQUlHSkF629bW1tbW1tbX19fX19fX19jY2NjY2NnZ2djY2dnOzs7Ozs7Ozs7OzdKpj63Rzs7Ozpu3tqSiwJOerNPOzs7O0qqdrJTJmqycsNGZrJqy0s7Ozs7Ozs7Ozs7Pz8/Pz8/Pz9DQ0NHR0dHR0dHS0tLT09TU1NTU1dXV1dXV1dXV1dXV1dXV1dXV1dXW1tbW1tXV1dbW1tbW1tXV1dXV1dXU1dXV1dXV1dXW1tbW1tbW1tbW1tfX19fX19jX19fY2NjY2NjY2djY2dnZ2dnZ2dnZ2dnZ2dnZ2djY2NjY2NjY2dnY2NjZ2NjY19fX19fX19bW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tXV1dXV1dXV18h/b1pTYWVeXVxPSkQ9QD8+Ozc6Pjk/RD5AOTg3ODk7Ozw4OT89PTw9PD47OkE7OTs5OzxDQDw7PT5AQT49QkQ/QkM9PT8+Pz5ISUg/ddrW1tbX19fX19fX19fX2NjY2NjZ2dnZ2dnZ2dnZzs7Ozs7Ozs7Ozs/Inrym0tDQzsqgl36Cw6abr6fUz8/P0MmXmYWmp5eInJ7EkoadnM7Pzs7Ozs7Ozs7Oz8/Pz8/Pz8/Q0NDR0dHR0dLS0tPT09TU1dXV1dXV1dXV1dXV1dXV1dXV1dXV1tbW1tbW1tbV1dXV1dXW1tbV1dXV1dXV1dXV1dXW1tbW1tbW1tbW1tbW1tfX19fX19jY2NjY2NjY2NjY2NjZ2dnZ2dna2dnZ2dnZ2dnZ2dnZ2djY2NjY2NnZ2dnZ2dnY2NjY2NfX19fX19fX19bW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1dbV1dXV1dfNiHNdWGloXl9gT0lGOkFAPj88PDo2P0JAQjk2NDc6Ozo8Ojk+PD49PTs/PTxBPjw8Ojw8PTw6PEA9QEI+PkFCPUNDPT0+Oz9BRUtIQHDZ1tbX19fX19fX19fY2NjY2NjZ2dnZ2dnZ2dnZ2c/Pz8/Pz87Ozs7SrKWnqdXAvNLHnY+ey9PJipmq1M/Pz8/RpLC9l6LAyZiYxbzJl5nG0M/Pz8/Pz8/Pz8/Pz8/Pz8/Q0NDQ0dHS0tLS09PT1NTU1dXV1dXV1dbW1tbW1dbW1tbW1tbV1tbW1tbW1tbW1dXV1dXV1dXW1dXV1dXV1dXV1dXW1tbW1tbW1tfX19fX19fX19fX19jY2NjY2NjY2NjY2NnZ2dnZ2dnZ2tnZ2dnZ2dnZ2dnZ2dnZ2dnY2dnZ2dnZ2dnZ2dnY2NjY19fX19fX19fX19bW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbV1dXW0JB1W1tqaWFeXVNOSTxDQEE+QD46OEVAP0M6NzQ5Ojo5Ozs4Oz0/Pj49QT08P0A9Pjw8PDw8Oj1AQD8/PT5CQD9AQkA8QD0+QUVLRz9r19fX19fX19fX2NjY2NjY2NjZ2dnZ2dnZ2dnZ2tnPz8/Pz8/Pz8/QzJ2Nl6zQmpfKxZ6ynpbN1q2ZqtTPz8/Pz9DVuZim1pSWn87RkpmgztDQ0M/Pz8/Pz8/Pz8/Pz8/P0NDQ0dHS0tLT09PT1NTU1NXV1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbV1dXV1dXV1dXV1dXV1dXV1dXW1tbW1tbW19fX19fX19fX19fY19fY2NjY2NjY2NjY2NjZ2dnZ2dnZ2drZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2djY2NjY2NfX19fX19fW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1dXV1tKUcl5ea2tqZV1PTEc/RENDQDo9OzxCPD49OTY0Ojk5Ojo5Nzs/QDs8PUA8PEE+PD07PTw/PDo8Q0A+PTs9QD5CPkBBPkA9QD9GSUQ/ZtXX19fX19fY2NjY2NjY2NnZ2dna2tra2tra2traz8/Pz8/Pz8/P07GigJuvyaCjv8qcpYynrdiqmarUz8/Pz8/Q0Zqdu7Ofw5varaO/ntXQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NHR0tLT09PT1NTU1NXV1dbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1dXV1dXV1dbW1tXW1tbW1tbV1tbW1tbX19fX19fX19fX19fY2NjY2NjY2NjY2NjY2NjY2dnZ2dnZ2dna2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2djZ2djY2NjY2NfX19fX19bW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbSk3BgXnBoZmVaUUhHQkVDQEA3Ojo8Pjo8OTc2NTk6Njo8Ozc8QEA8Ojo9Ojw/Pj08OUA8PDo6OT9APj08PUBBQz9APz5BOz9ARkpCP2LS2NfX2NjY2NjY2NjY2dnZ2dnZ2tra29vb29vb28/Pz8/Pz8/P0M6fkGyclteqo9PSrqa1mJ/Vqpmq1M/Q0NDQ1aekoNPNipKex8uIlZ7I0tHR0NDQ0dHQ0NDQ0NDQ0NDQ0NHR0tLT09PT1NTU1dXV1dbW1tbX19bW1tbW1tbW1tbX1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tfW1tfX19jY2NfX19fX2NjY2NjY2NjY2NnZ2dnZ2dnZ2dnZ2dna2tnZ2dnZ2dnZ2dnZ2dnZ2dnZ2djY2dnZ2dnZ2dnZ2dnZ2NjY2NjY2NjX19fX1tbW1tbW1tbW1tbW1tbX19fX19fW1tbW1tbX0pNuYFxxZGdkWlVKQENGQ0FCODs/PD07PDw4NTU4OTY4Ozo5PDo+Pzw9PTk8Pz49Ojo+OTw6Ojg+Pzw9PTw+QEFDQT48PDpCRERKRkJd0NnX19jY2NjY2NjY2dnZ2dna2trb29vb29vb29vPz8/Pz8/Pz9G9n8O31pfA09HQ0srSzZeb1KqZq9XRz9DQ0sCdosjVzdulmbPQ26OZtdXR0dHR0dHR0dHR0NDR0dHR0dHR0tLT09PU1NTV1dXV1tbW1tfX19fX19bW1tbW1tfX19fW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW19fX19fY2NjY2NjY2NjY2NjY2djZ2dnZ2dnZ2dnZ2dnZ2drZ2tnZ2dnZ2dnZ2dnZ2dnZ2djY2NjY2NjZ2dnZ2dnZ2dnZ2dnY2NjY2NjY2NfX19fX19fX19fW1tfX1tbX19fX19fX19fX19bW19GRbF1cb2doYl1PRkBISUdFQDw8Pj48PT48NzU2Ojk2OTs6Ojs4QD86PDw5PD49Ozs6Pzk/Ojs5PT49Pjw7PTxAQ0I/Pz47Q0ZGR0hEWc3a2NjY2NjZ2dnZ2dnZ2dna2trb29vb29vb29vb0NDQz8/Pz8/Pz5V+e6WS1KKa08ySl6ObodirmavV0pem09SkoI+4yI+nmqCtkKeYnrvV0dHR0dHR0dHR0dHR0dHR0tLS0tLS09PU1NTV1dXV1tbW19fX19fX19fX19fX19fX19fX1tbW1tbW1tbW1tbX19bW1tbW1tbW1tbW1tbW1tbW1tbW1tfX19fY2NjY2NjY2NjY2NjY2dnZ2dnZ2dnZ2dnZ2dnZ2tra2tra2tnZ2dnZ2dnZ2dnZ2djY2NjY2NjZ2dnZ2tnZ2dnZ2dnZ2djY2NjY2NjY2NjX19fX19fX19fX19fX19fX19fX19fX19fX1tfPjGRWXnBrXGBgTkVITUlJT0M+OkI9PUBCOzU1Nzw6Nzo7Ojo7OT09OTo6OT0+Pz07OT47PDo8Ozk+PD47PD0+QENCPz5BPEFDR0ZGRVXJ29jY2NnZ2dnZ2dnZ2dra2tvb29vb29zc3Nzc3NDQ0NDQ0M/Pz9DR1aeZrcmjqL7KnbGdo7XZqZup2LirocjGpr2VlIynpaigr6eiqZ3Q09LS0tLS0tLS0tLR0dHS0tLT0tPT09PU1NTV1dbW1tbX19fX19fX19fX19fX19fX19fX19bW1tbW1tfX19fX19fW1tbW1tbW1tbX19fW1tbW1tbW1tbX19fX2NjY2NjY2NnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dra2tra2tra2trZ2dnZ2dnZ2dnZ2djY2NjY2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnY2dnY2NjY2NjX19fX19fX19fX19fX19fY2NfX19fX19fYzYZdV2JvZE9dVEtIRlNRS0xAPj1EPD9DRj01NTc7OTY6Ozo8PTo7Pzo6OTg6PT0/Pjs/Oz49Ojs5Pjs9PD0+QURCQD8+PzxAQUVHRURSxdvY2dnZ2dnZ2dnZ2tra2tvb29vb3Nzc3Nzc3NzQ0NDQ0NDQ0NDQ0NO5gL3Tm5bP1LWLkZ/T1LyBu9TOlKDUyo6Tl5CooZKNutWako6+1tLS0tLS0tLS0tLS0tLS0tLT09PT09PU1NXV1dbW1tfX19fX19fY2NjY19fX19fX19fX19fX19fW1tbX19fX19fW1tbW1tbW1tbW19fX1tbW1tbW1tbX19fX19jY2NjY2NnZ2dnZ2dnZ2dnZ2tnZ2tra2tra2tra29ra2tra2tnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2NjY2NjX19fX19fX19fY2NjY2NjY2NjY2NfX2ct+WlVqaltMX01KTEpVTEZCPD0/R0ZHS0g9NjU3Ojk3OTo7Ojw9OT45OTo4Oz0+PkE+PTk8PDo9Pj46PTk5Oj9FQUA+PT8/QkBHRURFUMHc2dnZ2dnZ2dna2trb29vb29vb3Nzc3Nzc3dzc0NDQ0NDQ0NDQ0NDQ0cHR0crI0tDUxLjS0tHSwtLQ08fM0tTCr7Cz0tS5x9XT07nI1dLS0tLS09PT09PT09LS0tPT09PU1NTU1NXV1dbW1tfX19fX19fX2NjY2NjX19fX2NfX19fX19fX19fX19fX19fX1tbW1tbW1tbW1tfX1tbW1tbW1tbW19fX19fY2NjY2NjY2dnZ2dnZ2dnZ2dra2tra2tra2tra29va2tra2tra2dnZ2dna2tnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dna2tnZ2dnZ2dnZ2djY2NjX19fX19fY2NjY2NjY2NjY2NjY19rHd1xSZ2laTlpOTFBRV0VKPz89P0FFTExBPjc3NTs4ODk5Ojs8Pjw+ODo6OTs+P0A9Pj46NTo6Oz0/Ojs5Ojw+QkJAPz8/P0FCR0RDRE683dnZ2dnZ2dna2tvb29vb29vb3Nzc3Nzc3d3d3dDR0dDQ0NDQ0NDQ0NDS0NDR0dDQ0dPU0dHR0dPR0dHS0tHR1NbW1tLS1dTT09PW1NLS0tPT09PT09PT09PT09PT09PU1NTU1dXV1dbW1tfX19fX2NjY2NjY2NjY2NfX19jY19fX19fX19fX19fX19fX19fX1tbW1tbW1tbX19bW1tbW1tbW1tfX19fX2NjY2NjY2NnZ2dna2tra2tra2tra2tra2tra2tvb2tra2tra2trZ2tra2tra2tra2tra2tnZ2dnZ2dnZ2dnZ2trZ2tra29ra2trZ2dnZ2dnZ2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjbwXNYVWlrU0xSTlBSWVRGSTw+Qz9BQkVKPj43ODY5Njc4OTk7Oz0/QDw9ODk7Ozs/Pjw8OTU6PT47OTk7PD8/P0JCQT1BPUBBQkZCQkJLtd7Z2dra2tra2tvb29vb29vc3Nzc3Nzd3d3d3d3R0dHR0dHR0dHR0dDQ0NDQ0NDQ0dHR0dHR0dHR0dHR0dHS0tLS0tLS0tPT09PT09PT09PT09PT09TU1NPT1NTU1NTU1NXV1dXV1dXW1tbX19fX2NjY2NjY2NjY2NjY19fY2NjX19fX19fX19fX19fX19fX19fX19fW1tbX19fX1tbW1tbW1tbX19fX19jY2NjY2NnZ2dna2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tnZ2dnZ2dnZ2NjY2NjY2NnZ2dnZ2dnZ2NjY2NjY3LxvVFRsbExLUkpUUlVLRkQ6PkdEREFERjw/ODk6OTY5OTo3PD07PkA9PTc5Ojs5Pjs5OTY2Oj1AQT47PDk6Pj9DQT4/Qj0+QkNFQkFCSrDe2dra2tvb29vb29vb29vc3Nzc3Nzd3d3d3d3d0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0tLS0tLS0tLS0tLS0tLS0tPT09PT09PT09PT09PT1NTU1NTU1NTU1NTU1dXV1dXV1tbW1tbW19fX19jY2NjY2NjY2NjY2NjY2NjY2NjY19fX19fX19fX19fX19fX19fX19fX19fX19fW1tbW1tfW19fX19jY2NjY2NjZ2dnZ2dra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2trZ2dnZ2dnZ2djZ2dnZ2dnZ2dnZ2dnZ2dnY2Ny2a1NbcGtLVVdSXFFXSEQ+PEJKRT1ISj89PDc4ODo1OTg5Njs+PD1APDw1OTk8Oj87OTk0ODw9PUFBPD47Ojw+QD89PkE9PUNGR0I/Qkmq39ra29vb29vb29vb3Nzc3Nzc3N3d3d3d3d3d3dHR0dHR0dHR0dHR0dHR0dHR0dHS0M/U0M7P0tLT0tLS0tLS0tLS0tPT09TU1NTU1NTU1NTU1NTU1NTU1NTU1NTV1dXV1dXV1dbW1tbW19fX19fY2NjY2NjY2NjY2NjY2NjY2NjY2NjX19fX19fX19jY2NfX19fX19fX19fX19fX19fX19fX19fX19jY2NjY2NjY2dnZ2dra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tvb29va2tra2tra2tra2tra2tra2tnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dndsGRTYXJfT1pUV19RUkdCPUVJS0FBTEQ/Pzs5ODg5Mzg2ODY5Pj0+Pz06Njo7Pjs9PTo5Njg6PTtAQDxAPz0/P0I+PD48PEJFSElCPkNJpODa29vb29vb3Nzc3Nzc3Nzc3N3d3d3d3d3d3t7S0tLS0tLS0tLS0dHR0dHR0dPT0bm7zLqbnLrQyNPT0tLS09PT09PT09PU1NTU1NTU1NTU1NTU1dXV1dXV1dXV1dXV1dbW1tbW1tbX19fX19fY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjX19fX19fX19fX19fX19fX19fX19jY2NjY2NjY2NjZ2dra2tra2tra2tra2tra2tra2tra2tra29va2tra29va2tvb2tra2tra2tra2tra2trb29vb29va2tra2tra2tra2tra2tra2tra2tnZ2dnZ2trZ2dnZ2dnZ2dnZ2dnZ3qpfVWBuW1VZUVpeT0xHQ0ZNSUZEREk7QUE7PDg4NjQ4Njk4Nzw/QT89Ojc8Pz48Pz87OjY4OD09QEE9QD5BQD1AOjs6Pj1BRUdKQkBDR57h29vb29vc3Nzc3Nzc3Nzc3d3d3d3d3d7e3t7e0tLS0tLS0tLS0tLS0tLS0tO+wMqaoKKViJGeqpOpz9TT09PT09PT09PU1NTU1NTU1NTU1NTV1dXV1dXV1dXV1dXV1tbW1tbW1tbX19fX19fY2NjY2NnZ2dnZ2dnZ2dnZ2djY2djY2NjY2NjY2NjY2NjY2NjY2NjX19fX19fX19fX19fX19fX19fY2NjY2NjY2NjZ2dna2tra2tra2tra2tra2tra2tra29vb29vb29vb29vb29vb29vb29ra2tra2tra2tra2tvb29vb29va29vb29vb29va2tra2tra2tra2tra2tra2trZ2dnZ2dnZ2dnZ2d6iXFVeblheXU5aUFROQ0NMSUlJRkpEPEJBPDs4NzY3OTc3OTk9P0E/PDo5QD88PkI/Ojg3NzY9Pz9APUBBPz88PTs7OD48P0VJSEE/Q0aX4dvb29zc3Nzc3Nzc3N3d3d3d3d3d3t7e3t7e3tPT09PT0tLS0tLS0tLS0tTIlZyum5m1iX2TjIKBhMTV09PT09PT09PU1NTU1dXV1dXV1dXV1dXV1dXV1dXV1tbW1tbW1tbW1tfX19fX19fX2NjY2NjY2dnZ2dnZ2dnZ2dnZ2dnZ2NjY2NjY2NjY2NjY2NjY2NjY2NfX19fX19fX19fX19fX19fX2NjY2NjY2NjY2dnZ2dnZ2dna2tra2tra2tra2tra29vb29vb29vb29vb29vb29vb29vb2tra2tra2tra2tvb29vb29vb2tvb29vb29vb2tra2tra2tra2tra2tra2tra2tra2tra2tnZ2dndmlpYYW5ZYVdPV01QRUJETElNS0ZJRT5CRDk4ODY3OTc1Njk4PT1BPjo4OT4+PD9APzw1Njc2PD4/PjtAQEA/Pj4/Pjs/PkFCRkdCQENIkeLb29zc3Nzc3d3d3d3d3d3d3d7e3t7e3t7f39/U09PT09PT09PT09LS0tLTz6h+kayPko6MhoCIiYSQo8rU09PT09PU1NTU1dXV1dXV1dXV1dXV1dbW1tbW1tbW1tbW1tbW19fX19fX19fX2NjY2NjY2dnZ2dnZ2dnZ2dnZ2dnZ2dnY2NjY2NjY19jY2NjY2NjY2NjY2NjX19fX19fX19fX19fY2NjY2NjY2NjY2NnZ2dnZ2dna2tra2tra2tra2tra29vb29vb29vb29vb29vb29vb29vb29ra2tra2tra2tvb29vb29vb29vb29vb29vb29va2tra2tra2tra2tra29vb29ra2tra2tra2tna3JJaWWNuWlpSVV5QTDxAR05IUklIRT47SEY4OTc1Nzg3NTg5ODs+Pj07ODlBPj1AP0E+NzU5Njs+QUI/P0BAQUI/Pj8+QUBEQUZIQj9FSozi3Nzc3Nzc3d3d3d3d3d3e3t7e3t7f39/f39/f1NTU09PT09PT09PT09PWtaWaiIuQhYCFi4iBg4qLf4bC1tTU1NTU1NTV1dXV1dXV1dXV1dXW1tbW1tbW1tbX19fX19fX19fX2NjY2NjY2NjY2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2djY2NjY2NjY2NjY2NjY2NjY2NjY2NjX19fX19fX19fY2NjY2NjY2NjY2dnZ2dna2dra2tra2tra2tra2tra2tvb29vb29vb29vb29vb29vb29vb29vb29ra2tra2trb29vb29vb29vb29vb29vb29vb29vb2tra2tra2tra29vb29vb29vb29vb2tra29uIWltnalxYTFpfVkg6TEhMSkpDRUVDQExINzo3Njc4ODU4Nzg5PDw7Ozk4QD89Pj8/PDY3PDQ3P0JCQUBAPz8/QT09P0A+QEBGRT09REuI4tzc3Nzd3d3d3d7e3t7e3t7e3t/f39/f39/f39TU1NTU1NPT09PT09PUxZKCg4WGfYGCfXx5foGCg36k29bU1NTU1NTV1dXV1dXV1tbV1tbW1tbW1tfX19fX19fX19fX19fX19jY2NjY2NjZ2dnZ2dnZ2dna2tnZ2dnZ2dnZ2dnY2NnY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjX19fX19fY2NjY2NjY2NjY2dnZ2dna2tra2tra2tra2tra29vb29vb29vb29vc3Nzc3Nvb29vb29vb29vb29vb2tra2tra29vb29zb29zb29vb29vb29vb29vb29vb29va2tvb29vb29vb29vb29vb29vb2tvZgFpebWhaU0ldW1hKRE1ISlNMR0ZBQD9KQjg7NjY5OTc1ODY4Ozo7Ojw5OD09O0A9Ozo2NTw3Oz1CQEFBPD49QEE9PEA/Pz5CREU+PERLg+Lc3d3d3d3d3t7e3t7e3t7f39/f39/f39/f39/V1dTU1NTU1NPT09PT2LKEkKh9g3l2hIh/e3d5gn5+i67A1dTU1NXV1dXV1tbW1tbW1tbW1tbW1tfX19fX19fY2NjY2NjY2NjY2NjY2NjZ2dnZ2dnZ2dna2trZ2dnZ2dnZ2dnY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2dnZ2dnZ2tra2tra2trb2tra2tvb29vb29vb29vc3Nzc3Nzc29vb29vb29vb29vb29va2trb29vb29zc3Nzc3Nvb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vc1nlcWmxmWFJPYFFSQUhHSkZYTEZAQENDSz87Ozc4ODc2NTc2ODo5PDw6PTs/PTs9Pjw7ODg8OT0/QkFCQzw8P0FCPj1BQkNCREVDQDtDTH3h3d3d3d3e3t7e3t7e39/f39/f39/f39/g4ODg1dXV1NXU1NTU1NPU0ruen3WKeXuIgICChYGDcnOAhYOMrNfV1NXV1dXW1tbW1tbW1tbW1tbW19fX19fX2NjY2NjY2NjY2NjZ2dnZ2dnZ2dnY2NnZ2dna2tra2trZ2dnZ2dnZ2djY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2dnZ2dna2tra2tra29vb29ra2trb3Nzc3Nzc29zc3Nzc3Nzc3Nzb29vb29vb29vb29rb29vb29vb29zc3Nzc3Nzc3Nvb29zc3Nzc3Nvb29vb29vb29vb29vc3Nzc3Nzc3Nvb29vb3dByXV9wZVdLUGNPS0JHQ0pIS0ZBPEE9SFBBOjo3Nzg3Njc4Nzw6OD09PD47QD88Pz07Ojs5Ojk8QEJAQkNAPUFAPz1AQkNDQUBAP0A7RU144N3d3d7e3t/f39/f39/f39/f3+Dg4ODg4ODg4NXV1dXV1dXV1NXU18h4i4V8goh6g4SBfoKCc2l0hYuGkJ3U1tXU1dbW1tbW1tbW1tbW19fX19fX19jY2NjY2NjY2NjZ2dnZ2dnZ2dnZ2dnZ2dnZ2dra2tra2tra2dnZ2dnZ2dnY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2dnZ2dna2tra2tra2tra2tvb2tvb3Nzc3Nzc3Nvc3Nzc3Nzc3Nzc29zb29vb29vb29vb29vb29vb29vc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc29vb297KalxjcWVST1heSz9HTElPS0VAPkFCP0lPPjk6NzY7NzY6Ozc7Ojg6PDw+Oz09Oz48Ojs4OTo4OUFCQkFAQDtAQj06PkFCQz8+PT4/PUZOdN/e3t7e3t7f39/f39/f4ODg4ODg4ODg4ODg4OHV1dXV1dXV1dXV1s6dhpl+f5OTin+CgXx9gnNxm4mAgoOJwNnat7TQ19bW1tbX19fX19fX19fX2NjY2NjY2NjY2NjZ2dnZ2dnZ2dnZ2tnZ2dnZ2dra2tra2tra2trZ2dnZ2dnZ2dnZ2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NnZ2dna2tra2tra2tra2tra29vb3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nvb29vb29vb29vb29vb29vc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3NvfwGNaW21gVlBTU0pETEhNSEk8PkFEQ0ZORDw8OTc5OjY4Ozk3PDk4OTw9OzlAPjpBPzw3NTc7ODpAQUVBPz45PUI/Oz1CQkI6Pj07PT5GTnHe3t7e3t/f39/f39/g4ODg4ODg4ODg4OHh4eHh1tbW1tbW1tbV1tjLioCHhYOXjHh7e3lvfYF1a3ebdHZ7eInHxpiMrdjZ19fX19fX19fY2NjY2NjY2NjY2NjY2NjY2dnZ2drZ2dna2tra2tra2tra2tra2tra2tra2dnZ2dnZ2dnZ2dnZ2dnZ2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NnZ2dnZ2dnZ2dna2tra2tra2tra2tra29vb3Nzc3dzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nvb29vb29zb29vb3Nzc3Nzc3Nzd3dzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3d3d3d3d3Nzc3Nzc4LdjV1lrYlJNVVFMSktGS0ZDQD5CQT9FTT4+PTg5OTo3OTo3NT03Nzo+PDs7Qjw5Pz05NjY4PTk6QEJGQD49PEBCREA9QD9DO0A9PD4/Rk9t3N/e3t/f3+Dg4ODg4ODg4ODg4OHh4eHh4eHh4dbW1tbW1tbW1tfVrYZ6d32rn3l4entzdH+Dfm9xe3l6c3t2k4qFgImkzdnY19fX2NjY2NjY2NjY2NjY2NjY2NjY2NnZ2dna2tna2tra2tra2tra2tra2tra2tra2tnZ2dnZ2dnZ2dnZ2dnZ2dnZ2djY2NjY2NjY2NjY2NjY2NjY2NjY2dnZ2dnZ2dnZ2dra2tra2tra2tra29vb29vc3Nzc3N3d3d3c3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc29vb29vc3Nzb3Nzc3Nzc3N3d3d3d3d3d3dzc3Nzc3Nzd3d3c3Nzc3Nzc3N3d3d3d3d3d3d3d3dzc3OGtYVtebGJSTVZMTUdLS0RGQkI7QT08RUxDQT44Ojk6Nzc5NjY6NTs+QDs9Oz89PD89Ojk5Ojw5PEVDRkA/PkBDQkQ9OT0/QT1CPz1APkdPadvf3t/f3+Dg4ODg4ODh4eHh4eHh4eHh4eHi4uLW1tbW1tbW1tfQmH+Qh4N9eoN2e3Vzenl6kKqmd3JyfoeHh4CAfoKEhJHJzNnX19jY2NjY2NjY2NjY2NjY2NjY2NnZ2dnZ2tra2tra2tra2tra29va2tra2tra2tra2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2djZ2dnZ2dnZ2djY2NnZ2dnZ2dnZ2dnZ2tra2tra2tra2tra29vb29vb3Nzc3N3d3d3d3d3d3d3d3d3d3d3c3Nzc3Nzc3Nzb29vb3Nzc3Nzc3Nzc3Nzd3d3d3d3d3d3d3dzc3N3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3NzhpV9UYm1iUE9TSUhHRkpJSUJBPkJCPEVFREA+ODo4Ozc3Ojc4ODY+Pz07PDk9PDo+PTs6Njc7NjpEQUY+Pz8/PkNBPzs9PT47REM/PjxIT2fZ4N/f3+Dg4ODg4eHh4eHh4eHh4eLi4uLi4uLi1tbW1tbW19jYyH52doN+fnR2eIaCenl1d5yhu6GEgoCAfoeKinx/gYaMnKjO2NjY2NjY2NjY2djY2NjZ2djY2NjY2dnZ2dra2tra2trb29rb29rb2tra2tra2tra2tnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dna2tra2tra2tra2tra2trb29vb29zc3Nzc3N3d3d3d3d3d3d3d3d3d3d3d3dzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3e3t7e3t7e3d3d3d3c35pbT2drXFBRUElDT0pLR0xHSkJAP0FHREBBPDg8ODg1ODk3Njc3QEA/Ozw5Pj04PTw8Ojc4PTk/RENGPkE/QkBDPzw6Pj0/PkVEPz07S1Fj1+Hf4ODg4ODh4eHh4eHh4uLi4uLi4uLi4uLj49bW1tbW19XB3LRueHJze3B6eXaFiIR7eH2AgZiljH98fnuRhZaLhoGDgY6Rvd3Z2NjY2NjZ2dnZ2dnZ2dnZ2dnY2dnZ2dna2tra2trb29va2tva2tra2trb29ra2tra2tnZ2dnZ2dnZ2dnZ2dna2trZ2dnZ2dra2tra2tnZ2dnZ2dna2tra2tra2tra2tra2tra2trb29vc3Nzc3Nzc3N3d3d3d3d3d3d3d3d3d3d3d3d3d3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3e3t7e3t7e3t7e3t7e3t7e3t3d3d6NWFdobllQUUtISlNJTUhNSUtBQz9DRkJBRDo6PDg2NDg4NzY2Nj8+Pjo8OTw7Oj09PDw4Ozw8RERERT4/PkI+Qj84PT8/Q0NCQEE+O0xUY9Xh3+Dg4OHh4eHh4eLi4uLi4uLi4uLi4uPj4+PW1tbW1teslLZ6eHJvd5V7dHuLgHh1bn6Fg3t/hYhyfH2bnI6JioJ+g32Hk5rH1NjY2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dna2tra2trb29vb29vb29vb2tra2tra2tra2tra2tnZ2dnZ2dnZ2dna2tra2tra2tra2tra2tra2tra2tra2tra2trb2tra2tra2tra2trb29vc3Nzc3Nzc3Nzd3d3d3d3d3d3d3d3d3d3d3d3d3d3c3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3N3d3d3d3d3d3d3d3d3d3d3d3d3e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3d7Zf1lgaGxcUUtHR09LTk5PTURGQkg/Q0hEREA6Ozs4NzU3Nzc4NThAPkA7PDk8Ozw+Ojk7OTk7OUZERUI8QD4/PEBDOz5AP0A/Qj8+OjtKVWPV4eDg4eHh4eHi4uLi4uLi4uLi4uPj4+Pj4+Pj1tbX19vKhYR3cXJubniVhHt4hH95dnB4c3eLkY6CdnN9ioaId3d1d4ODfIiIk8Pb2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dra2trb2tvb29vb29vb29vb29rb2tra2tra2tra2tra2tnZ2dnZ2dna2tra2tra2tra2trb2tra2tra2tra2tra2trb29vb29ra2trb29vb29vb3Nzc3Nzc3Nzd3d3d3d3d3d3d3d3d3d3d3d7e3d3d3d3c3Nzc3Nzc3Nzc3Nzc3Nzc3d3d3d3d3d3d3d3d3d3d3d3d3d7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7f0nVZaGlqVk5KSE1OR01EUElGSD9FPUZMREM+Ozs8OTc3OTY2OTU4Pj4/PTs8QDs9PDo3Ozc5OThHREVCPUE9Qj8+QDw/QUE/QEJAPjs8S1Ri1OLg4eHh4eLi4uLi4uLi4+Pj4+Pj4+Pj4+Pj49fX19fEknuJf29sbnV2foSBg4qGfnVybWVtiIaKjoR7c4OHint4e4OPj4GEioqxztrZ2dnZ2dnZ2dna2tra2tra2tra2trb29vb29zc3Nzb29vb29vb29va2tra2tra2tra2tra2tra2tra2tra2tra2tra2tvb29va2tra2tra2tvb2tvb29vb29vb29vb29vb29vb29zc3Nzc3Nzc3d3d3d3d3d3d3d3d3d3d3t7e3t3d3d3d3d3d3d3d3dzc3Nzc3Nzc3d3d3d3d3d3e3t7e3t7e3t7e3t7e3t7e3t7e3t7f39/f39/f39/f39/f3t7e4clsW2pqalNOR0hOT0VIRk1JSUA7RD5ISUA9PDo6Ojg2ODo3Nzk0OD08PT07ODw8PDw4Njc4OTo6RUJFQT9APEI/Q0M+PkNEQUBAP0A8PUtRYdPj4OHh4uLi4uLi4uPj4+Pj4+Pj4+Pj4+Pj5OTX19fZqXaFfnx3bHB3eXh8jH2KhYB3anN0d3p9bot7fnl6foR/gIGDfnh8foeGlrbT2tnZ2dra2tra2tra2tra2tra2tvb29vb3Nzc3Nzc3Nvb29vb29vb29ra2tra2tra2tra2tra2tra2tra2tra29ra29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb3Nzc3Nzc3Nzc3d3d3d3d3d3d3d3d3d3d3d7e3t7d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3t7e3t7e3t7e3t7e3t7e3t7e3t7e39/f39/f39/f39/f39/f39/e3uO9amFpa2lRTkZNTEtKWE1OR0FAQE9BQz9AOzw4OTk5Njg2NjY4NDs+PD07OTY6Ojk6OTU4OTg5OkJERj8+Pj5AQEBCPzxBQD88Pj9BOT5KT17S4+Hh4eLi4uLi4+Pj4+Pj4+Pj4+Pj4+Tk5OTk19fX2sqKhIB5c29tcXN1d4CUeHaAfHWHhXd1cnWgmXp7d3Z5doR0bWxue3iAmouTu9za2tra2tra2trb29vb29vb29vb29zc3Nzc3Nzc3Nzc3Nzc29vb29vb2tra2tra2tra2tra2tra2tra2tra29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vc3Nzc3Nzc3Nzc3d3d3d3d3d3d3d3d3d3d3d3e3t7e3t3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3t7e3t7e3t7e3t7e3t7e3t7e3t/f39/f39/f39/f39/f39/f39/f397js2lpbmloUFBPTExPUk9LU0Y/RURERD48PDg7ODc5OTU2ODY2NzM6Pjs+PTc6Pjk5OTk2Ojo4NzxDRUc/Pzs/PkA9PkE9Oz0+OUFAQDhBTlFc0OTh4eLi4uLj4+Pj4+Pj4+Pj4+Pk5OTk5OTk5NjY2NjauY6AenZ1bmpveHCBfWt0cnZ3hIV5h4d5lY55eXp1d3pza298gHx2fYh8gLLe2tra2tvb29vb29vb29vc3Nzc3Nzc3Nzc3dzc3Nzc3Nzc3Nzb29vb29rb29vb29ra2tra2tra2tra29va29vb29vb29vb29zc3Nzb29vb29vb29vb29vc3Nvb3Nzc3Nzc3Nzc3Nzc3Nzc3d3d3d3d3t7e3t7e3d7e3t3d3t7e3t7e3t7d3d3d3d3d3d3d3d3d3d3d3d3d3t7e3t7e3t7e3t7f39/f39/f39/f39/f39/f39/f4ODg4ODg4N/f39/f4qpqa2hrZFNQT0ZQVFJOSFJLPkREQ0I7Ozk6Ojg2Nzg1NjY4ODg0Oz88Pzw5PDw3Ozo6Nzo6Nzo9Q0JDPUE+Pzw5PT5BQDs8PDtFQD47Q05TXNDk4eLi4uLj4+Pj4+Pj4+Pj5OTk5OTk5OTk5OTY2NjZ1p5vdntveHh2cG50d3BwdHBzb36Jc3qGhY2EenNtcoB6hn1vg5OBdnx9g4a13drb29vc29vc3Nzc3Nzc3Nzc3Nzc3Nzc3d3d3Nzc3Nzc3Nzc3Nzb29vb29vb29vb29ra2tra2tvb29vb29vb3Nzc3Nzc3Nzc3Nzc3Nzc3Nvb29vb29vc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzd3d3d3d3d3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3d3d3d3d3d7e3t7e3t7e3t7e3t7f39/f39/f39/f39/f39/f39/g4ODg4ODg4ODg4ODg4N/f3+KgbWhma2ZVVlJHUFFOS0xMRUJIRUc9OD08Ojo3Nzg2Nzc2NTY3NDg+PD09Ojg6OD46Ozc4Nzc6Oj5DRDtDQj49OD1AQUM/Pjw+RTw+PUJNUF/S4+Hi4uLj4+Pj4+Pj4+Pk5OTk5OTk5OTk5OTk2NjY3MB2doCCfnp4eHBsdXlya399bHNvdGdoaYB/aWl4c2d+iYl4cIKGe3d9foWKvd3b3Nzc3Nzc3Nzc3Nzc3Nzc3d3c3Nzc3N3d3dzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nvb29vb29vb29vb3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzd3d3d3d3d3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7f39/f39/f39/f39/f39/f4ODg4ODg4ODg4ODg4ODg4ODg4ODflGttZm5mU1NJUFlUTEhGTkZGRUJGPTs+PDs5Nzc4NTc5NjQ1NzU4PDs9Pjo6OztAOTs7ODc6OTlAQkE8QUE/Pzk/QEJFQ0FAQEM7Oz1ES01g1uTi4uLi4+Pj4+Pj4+Pk5OTk5OTk5OTk5OTk5NnZ2tmYc3uqhJaCcnR1dn14aGx8d2h4d25rcHR5gIJ3dHyBhIJ9c3CAin94gn95g8je3Nzc3Nzc3Nzc3Nzc3d3d3d3d3d3d3d3d3N3d3dzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nvb29zc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3N3d3d3d3d3d3d3d3d3d3d3d3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e39/f39/f39/f4N/f39/f3+Dg4ODg4ODg4ODg4ODg4ODg4ODg4ODh24tubWdzY1lRTVVbV0hDSUZOS0dCRD8/Qjo7OjY2NzU2NzY0ODc2Ozw7Pj86PDk8Qjg3OTo6Ojk6QUFCQUJDQEE+PT9CQ0NEQUJGOTg9REpOYtjk4uLi4+Pj4+Pj5OTk5OTk5OTk5OTk5OTk5OXZ2drcqHGCtXiRfnNsem6EgXaCfWtoan+DeHZ8dX2FhXRmcHl9d316gIqFe318foC03tzc3Nzc3N3d3d3d3d3d3d3d3d3d3d3d3dzd3d3d3dzc3N3c3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzd3Nzd3d3d3d3d3Nzc3Nzc3Nzc3Nzc3N3d3d3d3d3d3d3d3d3d3d3d3d3d3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e397e3t7e39/f39/f39/f39/g4ODg4ODg4ODg4ODg4ODg4ODg4ODg4eDg4ODg4ODg4tiFb3FrdWFWT1VVXE9ETUY+SkdKRUQ8P0I6PDk4Njg0NTY3NDc2NDk7Ozw7OD47PEE4ODo9OD04Oj09QEBAP0FCP0A+QENCQ0FBRTc2O0RMTmPa5OLi4+Pj4+Pj5OTk5OTk5OTk5OTk5OTk5OXl29ra3Z5sbnNxhY1ybXBuf391hH5rcnZ2enN4gXhzbnVwbWt2fHmFiIB/f392coODsd/c3Nzc3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3Nzd3d3c3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3N3d3d3d3d3d3d3d3d3d3d3d3d3c3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e39/f39/f39/f39/f39/f39/f39/f39/f39/f4ODg4ODg4ODg4ODg4ODg4ODg4OHh4eDg4eHh4eHh4eHh4OLXhW1xb3ZeUldTWlpRSkhDQFFAQkQ8OT9BOjw5NzU3NDU2NjQ3NTY9PDo9PTk+OjxAODo6PDY7OTs+PUJCQjtBQkBDQEBEREM8PUA3OjxFS01l3OPi4uPj4+Pj5OTk5OTk5OTk5OTk5OXl5eXl5dPOxsB+cWxveHt2b3VuanNzbZKGeG50dG5vdIZ/b2twboJ0bXZyfY2DdnF/d3mKgabf3Nzc3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3dzc3d3d3dzc3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3t7e3t7e3t7e3t7e3t/f3t7e3t7f39/f39/f39/f39/f39/f39/f39/f39/f39/f4ODg4ODg4ODg4ODg4ODg4ODg4ODg4eHh4eHh4eHh4eHh4eHh4eHi1oZucG1xYFJZUFdfWUpMTElSP0Q9OTtCRjs6OTc0NTY1NzU0NjY2Pj07Pz45PTk7Pjg9Ozo0ODtAQENCQ0FCRkE/Q0BBQkREOz0+OTs8QkxNZODl4+Pk5OTj4+Tk5OTk5OTk5OTk5eXl5eXl5eW5t7Woc3JscHd6dHd4bXFydXd/hHRyc2xsa3F8bnBudGuBf3GAd32Eg355gHNygYqg2d3c3d3d3d3d3d7e3t3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3e3t7e3t7e3t7d3d3d3t7e3t7e3t7e3t7f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f4ODg4ODg4ODg4ODg4ODg4ODg4OHh4eHh4eHh4eHh4eHh4eHh4eHh49WHcWxqbF5YWlVXYFZWUE9QTD1BOjs8RkE4Ojg3MzY1Njk2NTg1Nz89Oz8+OT04Ozw5PTs7NTo9Q0JCPENDREREQUE/PkJDQzw9Pjg5PENLS2PN0dnh1sjY4+Tk5OTk5OTk5OTk5eXl5eXl5eXltbW2q3J5cm59f3Z1d2hqaGlwb3Zta2tnZWZxdG15gG5teXd2iHhxa2podXV5dHV/wd/c3d3d3d3d3d3e3t7e3d3d3d7d3d3d3d3d3d3d3t7e3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3e3t7e3t7e3t3d3d3d3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f4ODg39/g4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4OHh4eHh4eHh4eHh4eHh4eHi4uHh4ePVhnFwY2lhV1NZV19MUk9STUtAPjg5O0E+ODc5NjQ3Njc6NjY2NDk+Pzo8Pzo/OTo6Nzo9PDk5PEFBPTtBQ0VDRkA+Pj5BRUQ+QEE3OD5GSEpesrW4wbm1u8jg5eXl5OTl5OXl5+fn5+fm5ebm5ra2tbWOfX5weoR1cnZnYmNlbGtyb2ZpbHZtd4Z9hXlsbHd4a3ZwfH14c3V5fHd2h7ng3d3d3d3d3d7e3t7e3t7d3t7e3t7d3d3d3d3d3t7e3t7d3t7e3t7e3t3d3d3d3d3d3d7e3t7e3t7e3t7d3d3d3d3d3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4OHh4eHh4eHh4eLi4uLi4uLi4uLi4eHj1Yd1bl5uY1pUU1hXS1NLSk1SR0E4Ozs+PDk4NzU2NTY2OTY4NjY5Pzw6PT07Pzo7Ozk8PDs5Oj4+Pjs8PUFEQkNBQEBBP0JDPDw9Nzs+REVKXrG1tLW2t7e2y9rJ3uXl3eDi3tXU1tPU4OPg39+2treuh3t/bnmNenJ1bWNobGxtaXR4enF5enqIh4N6aWh9cWRvcXyGgX55e318e4an2t7d3d3d3d7e3t7e3t7e3t7e3t7e3d3d3d3d3t7e3t7e3t7e3t7e3t7e3t3e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7f39/e3t7e3t7f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4OHh4eHh4eHh4eLi4uLi4uLi4uLi4uHh49aGdmxhb19dV1lcWlJQSEpXTEVHPUA9Ozs9OTY0NjU1NTg2NzY3OD87OT09PDw5OTw6Pjw6OTg+Qjs7Pj5AREBDRUFAQD0/QDw9PTU5PEJHRl2xtbW2uLm5ubq9uMPT0r3BwcC6u7y6u8TMxb/Dt7e3hGl1gX1ndYd5Z3Vxa2t5eHB3fH15bWl3e3h3bml1j4FwbHl4d3d9gXuGgnmAoNze3d3d3t7e3t7e3t7e3t7e3t7e3t3d3d3d3d7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t/f39/e3t7e3t/f39/f39/f39/f39/f39/f39/f39/f39/f39/f4ODg4ODg39/f39/f39/f3+Dg4N/f4ODg4ODg4ODg4ODg4ODg4ODg4ODh4OHh4eHh4eHh4eHh4eHh4eHh4uLi4uLi4uLi4uLi4uLi4ePXhXJrZ3RhW1hYX15TVVVRVUpMRj9JRDs5PTY2NDc3NTc4Nzc3ODk8PDo+PDg8Oj0+OTs8OTs5P0E8PT9DP0FARUJCQTw9Q0A6Pjw1NDlER0dasbW1tre5ubm5ubm3ubm4uLm5urq6urm5urm6u7e3uX9ucHN6b3B/eXNuc3Vsc3Z4cXFwb2tvcX6Bc2mHhIF9dHOHdW11hYmBgHJ2hafd3d3d3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7f39/f3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f4ODg4ODg4ODg39/f3+Dg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4eDg4eHh4eHh4eHh4eHh4eHh4eHh4eHh4uLi4uLi4uLi4uLi4uLi4uHj14lxa2xyW1dXXWBUUVVUUFJPSkNATUE9Ozk2NTM0NjQ2ODc3Nzk6Pjs8Pjs5PDo8PDk8PTw7PT0+PUNEREBDQkE/QD48PkE8OD06NjY6QkpIWLG1tLa2uLm5uLi5uLe3uLi5urq5ubi4uLi6uru3uKx7cnhxf3ZzfnBsbXpyZ29sbW50cHt3d3Jyd3pvhpJ2f3x8enZ5fH9zfYdyda3T393d3d7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e39/f39/f39/f39/e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f4ODg4ODg4ODg4ODg4ODg4ODf3+Dg4ODg4ODg4ODg4ODg4ODg4eHh4eDg4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4uLi4uLi4uLi4uLi4uLi4uLi49eHb2pxalVWV2FbT1FSUE5XSURESUo/Ojk6NzUzNDk1NzY2Nzg4Ojw7PD46PDo6PTw5PDw9Oz09PDs9REdEQ0E8PDw8Pj5AOzg8ODE1OkFGRVautbW1tre4uLm4uLi4uLe4ubq5uLi3t7i4ubq7t7mqcnB4d3x7e4J3aG5xam9qY2lyf21zcn54dHFsanaAeX2AgH91doB1a4qLgHaR1d/d3d7e39/f3t/f3t7e3t7e3t7e3t7e3t7e3t7e39/f39/f39/f39/f4N/e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t/f39/f39/f39/f39/f39/f39/f39/f3+Dg4ODg4ODf4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHi4uLi4uLi4uLi4uLi4uLi4uLi4uPYhm1sdGVWUFxnWE1YU1JRWUVDS1BOOzk4ODc1NTM5NTY2NzY4Nzk+OT0+OTw5OTw7Njg5OTo8QEA9PkBGQEJCQDo+PEE9Pzs7OzYxNjxCR0RQqLa1tba2tre4t7i4uLi4uLm6ubi4t7e3t7e5ure2tIlyd3h9iXxwem99c2hqbGdnbHRscXd0cWx2c3Fxd3FyfHl4g3Z7d2mLkYp9kM7f3d7e3tvY2drZ297f39/e3+De39/f3Nvc3N3e3uDg3+Dg4ODf3t7e39jS397f397e3t/f3t7f3t/f3t7e3t7e3t7e3t7e3t/f39/f39/f39/f39/f39/f39/f4ODf4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODh4eHh4eHh4eHh4eHh4eHh4eLi4eLi4uLi4uLi4uLi4uLj4+Lj4+Li4uPj4+Pi4uLi4+Lk14NoZ3VkVlVkZVdKWllXW1Q9RU1LSD04NzU3NjQzOTQ0Nzc1Njc5PTo9Pjw9PDk7PDk5Oj45PD4/PkFBQ0FFRUQ+OzxBPjw5PDs3Mzc+REhFSqG2tbW1tbW2tre4uLi4t7e4uLi3tra2tra3uLm2traLfXpsbHp/cGx5dm5qaGdlcXp4b2lvb3B1c21zd4Fnb32CgYNyf3lqcHJ6f6ng393Zy8a/vL2/vsLN0tDW3tnc4NfQzcPCw8PH1dfT2dzX1NjX0MfExce9vM/Kz87Y3djO3N3c2t3T0dze39/e397e3t7e4N/f39/f39/f39/f39/f39/f4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4OHh4eLi4uLi4uLf4uPi4eLg4d7W29/Sw8rJx9Hb3OLk4eHg2dre1sbExcTN2trf5OHi4trX3st9aWZxYVleZWFNTFRLUlpMO0hNSEZBPTc2NjUzNDY2NDg3NjU2OTw7Pj46Pjk5PDk3OTs7Oj49PEBAQ0RCR0ZCQT08Q0A9OTw7Nzc3P0RGRkaZtrS1tbW2tra4uLi4uLi3uLi3s7W2t7a3t7i5tba3opdxb29waW50dnFmZWNrbmdvcm1mZ2tygWVvdnyAeGRzj39zaHFyaWVlbm+w39HFv7u5ubm5ubq6uru6vc3Gw8e/urq6uru7u8HCvcHFvby/vry7urq5ubq6ubm6w8XDucDDwby/ube/z8/U3tjc3t/g3tLa4N/f4ODg39/f39/f39/f3+Dg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODh4eDg4ODg4ODg4ODh4eHh4uLi4eDh4uLi4uHa2t3RwsPCu8XT1uDdydPDrrnAsaqrq6uwtLbJ0sXRxLG4v7Srq6usr7S0vMzE1c60tLureGxtbWBdYl9ZS1NVVFFQREBRTUhEPzo3ODU3MzE1NjQ5ODQ2Njo8Oz08ODw5Njo6ODg5NzU8PDw/QEFAQkRDQkE8PkI/Pz09PTc1OD5DRUNAj7a0tLW1t7i4uLi4uLm5uLe1sautr7Oxs7OztLS0tqaei2tue3ZxeXhnY2hfcXdha25vaG99b25ja2lseHdsa4Z+bHB6dm1scG95sca8uru7urm5ubq6urq6urq6urq6urq6urq7u7q7u7y7urq6ubq7u7q6urq6urq6ubi3t7i4t7e2tbW1tbi3u8e+w8XHzcS4wMnH0tzZ2d/e3uDf39/f4ODh4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODh3Nji4uLi4eHh4OHg3tfGxtHQztTe3tPO0t/SuLi8sq2trKysrrG+ua63rKipqamqq6urqqqqq6ysuKyqqqqrq6urra6urq6urryzrayrpHlub21fXl1dVE1SU1xUSkE/UElIPjg5NjgzNzMwNTczNzg1NzY2Ojw/PDg5Ozo6Ojg5OjY1OTs8Pj9EP0NFQkNCP0BAQT9APjw3ODc6QUVEP4W4tLS1tbe4uLm5uLi3t7SurKuqqq2urq6vsLGzs7WjcG5ucm1wg311aWFlaGZkY2Rxc21td25naW1tZXBzb29zcXN8h4F6dX11n7u6uru7urm5ubm6urq6urq6ubq6urq5uLm5ubm6urq6u7q5ubm5ubq6ubm6ubm4uLi3t7e4uLe3t7a2tbW2tra1tbW1tba1t7e3t7rBvrzGycrb3+Dg3tvd3d7h4tDW4uHg4ODg4ODg4ODg4ODg4OHg4OHi0768zNjd3OLg0dnbxL23sLCxsa+zu7uzsLS9s66urq2tra2sq6qqqqmpqKmpqampqqurqqqqqamoqampqampqaqqqqytrq6urq6urq6sraR4aWJxZmFZWlZRUk5cU0Y9QlJEQTc8OzY5NTY1NDU2NTg3NTY1Nzg7Pjw7OTk5Ojg3Nzk3Njg8Oz47RD8/Q0BBREE+P0M9Pjw+Ojo3Nz9DRj54srCztLW2t7i3trKurq2sq6uqqaqtraysrq+xs7S1t4xucnRqaIB5ZmpmZWxdaG5waGxxYmNmcoJ+dmhobGpueoaBhXx4cXF5gK+6ubq6urm5uLm5ubm5ubm5ubm5ubm4uLe3t7e3uLm5ubm5uLe3t7i5ubi4uLi3t7a2tre3t7e3tra2trW0tLW1tbW2trW1tre3t7e3t7e3tre4v8bP0MS+v8DE19e8ydra4OHg4ODh4eDg4ODh4eDb3t7Uzby3tre6wMDJxLfIvrKwsLCwr7Cvrq6ur7Cwr66urq6uraytrKurq6qpqampqampqampqKmpqKmpqampqKmpqKmpqqqrraytra2ur66trK2heWpjbWdiXFhRUFFLVEpCOklRP0E3PDk0OjU2NTQ1NTY4ODY4Njs6OTw9PTs6ODY2ODg6ODY3Pj09PT5BQUVCQkNBQUBBOj09Pz05Ojc9QUc8bKqmqKutsLGwrqupqKqrq6mpqamrrKytra2usLO0tbilgIdvaWdzdGZrcG1qZGxvcm5rbWNrcHyJhG5qbHx4Y3uKfnNqc25rcY+7ubm5ubm5ubi4ubm5ubm5ubq5uLi4t7e3t7e3t7i5ubi4uLe2tra3t7e3t7a2t7a2tra3tra2tbW1tba1tLS0tbW1tra2tra3t7e3t7i4uLe2t7a2uLm4uLe3uL6+uLq9vcfb4OHg2Nnd4eHg3dfKwcPCurm5uLe4uLi3tbS0tLKysbGxsLCvr6+vr6+vr6+vr66ura2srKyrq6yqqqmoqKmppqepqaehpaipqamoop+hoZyip6inqausrK2ur7Cwrq2unXdwbGphY2BZUU1RTFJGQzlNUEU+ODs3Mjc5Njc0NDM1ODg3OTc7OTo9PTw6Ojk3NDo5ODY1OD8/QEI9RENDQ0FDQEJBQDtAP0A/PDw6O0NIPWOopaWlpqioqKenp6ipqqmoqKipqqqsra6wsLCztLW1taWYdn5xZmt4cW9tZmVsaGNsZ2ZpaX11bWlvfXZ5hWZod294b3Fvcninu7m5ubm5ubm4uLm6ubm5ubm5ubi3t7W1tba2tre3t7e3t7a2tba2tre2tbW1tra3t7e2tbS0tLS0tLS1tLS0tLW1tba2tra2t7e3t7e3t7a2tre2tre3uLe2t7i4t7i4uLi4wMXTyry8w83PyMC9urm5ubq6ubi4uLi4t7W0tLSzs7KysrGwr6+vr66urq+vr6+uraysrKurrKysq6ehoJ6gn5udoaGdlpmkpKaon5mZmZmanZ+gn56fpKqtrq+ura2srJl1cGlrY2FeXVVOU0tSREQ4TktHQTo4NTI2OTY1NDczNzc3ODk3OTo7PT0+ODg4NzU6OTk1OD9AQEFEPkZBQkNAQkNCQT88QEJCQD0+OjpERj5cpqWmpqampqanqKenqKioqKenqaurrKytra2ttLS0tbekc311bnONf3JmanFjaW1jaGZobG51aV9jZ3VzdnpuZ3Bwcn56cYihu7m5ubm6urq6urm2s7a1uLm2trW1tra1tbW1tbW3tra3tra2tbW2tbW1tbS0tLa2t7e3tbS0s7O0tLW1tLS0tbW1tra2tra2t7e3uLe3tra2trW2tbW2tra2tra2tra3tra3uLi3uri4uLi3uLi5ubm5urq6urm4t7e3t7W1tLS0s7OysrKxsbCwr66urq6urq+vra2srKuppaSmpqScmZubmpmampmXl5eXl5aZm5iZmJmZm52en5+dnJ6gpKWko6OioqKQdG5jcGFeXltUU1RIVEo/PFFCRkM7ODYzNzo1NTQ4Mzg5OTc4OTc7OTs9Ozc6NzU2OTk4NTg+Pz9ART5CPz9DPzxBQUI/PT9EQT8+PTk9Q0Y/VaSlpqanqKeoqamop6ioqKioqKiqrKuqqaipq7W1tba5o3eKcXKHhnd0cGh5a2JjYWVsaW5zal9jZWNjZWprYmRqbHaXjX6ovbm3tre5u7u6uLWxrKurqq6wrKyrq62tq6uvsLGvr7CytbW2t7W1trW1tbW1tbW2trSvr7O0tLSvra6vsrW0tbW1tbW2t7e3t7e3t7e3t7e3t7Owsra1tLa2tre3tra2tbW1tra3t7e5uLi4t7e3uLi4ubq6urq5uLi3t7e1tbS0tLS0tLS0s7OysbCvr6+vr66vr62oo6KgnJqampqZmZqbm5qampqbmpmZmZiXl5aYmZmZmpycnZ+foJ+goKChoaCgoJ+fi3RuaXRdYGZeUlRLRFRJPUVTSEVCOzo0NDY5NDQ1NzM4ODg3ODk5Ojs7Pz04OjkzNTg5NjM5PT5AP0A6QEJCQkA/QEJCPz0+QUFCPz06PkVDQFGjpqWlp6inqauqqKaoqKipp6ioqKinp6ioqaq1tbe3t7KZtH99kIx1Z2lqbGZjYGNoZW94cGlicXx5cGpmZmRma3NqhYystrKwra2ttLeysLCtrKuqqaiop6ipqampqKinqKipqaeoqqurra2sqqytraysrq6traunpaSnqqyopKOkpamwsbGztbW2t7i3t7W1tre4t7e3t7Kppaasq6ivtLa1s7W3t7a1tbW2tra3t7e3t7a2t7e3t7m6urq5uLi3t7Wxs7S0tLKxsK6sq6yurrCxsK2rqqmqqKijnJqZmJmYmJiYmZmZmZmZmpqZm5ubnJybmZeYmpqcnJydnJ2foKGhoqKioKGgoKCfnop1amtuWVxhVktPREdVRz5PV0hEPTw4MzQ0ODQ1NDgyODk4ODk6Ojw5OUA8Njk6MzY3OTE0PD8/QEBBOkNGRUJBREJDQTo7P0FCQz9APUBEQ0BPo6empaemqKqqqqakpqenqKioqKimpqaoq6uttba3t7e4rbJ1cHuDdmBiaWtiZWZhZGdmfYh5bHKAfXFvcXhjbW5xZo+srKurq6ysra6urK2trKyqp6WmpaWlpqioqKiopaeoqKeoqKeoqampp6Wko6KioqOioKKioaKhoKChoaKjpKOjpaWlqLC0s7OzsKuqqaqztLa3trGopaOioaGipKiqqairs7Sxrq6xs7W2tra3uLi3t7e3t7e3t7a2uLe0sa6ppqerrKmnpqWkpKSkpKWnqaajoJ+enZycm5uampmZmJeXmZmZmJiZmpqampqampqbm5mYmpydnZ2dnZucoKGgoaOjoqCgoKCfnp2FdGtsaFdYU0pHTUVITUdAU1dGRz09OTM2Mzc0NTU3Mzg6Ojo6OTw9OjpBPDY9ODM3ODgzNztAPz9AQDpCRUNAQkRDQT87PEBDQkNBQDxBQ0A9TqKnpqanp6mqq6mkpaWlpaaoqKippqanqKmpqrW2tre3t7izc2h7c2JnamtpaWJhZGloXV1tfHJma3J/fHR8bm1zc36gqamrq6uqq62trKusq6mpqKWjpKampqWmp6eqqaamp6enqKinp6iop6WjpKKhoaGhn56en5+fn56foKGho6Wko6OkpKSmp6enpqWkpaampqeqraumpKKhoaChpKWlpaenpaeoqKalpaivtLa3trW1tra1tbOwrKupqa6rqKWlpqampaSkpaWlpqWkpKSkpaKhoaGgnp2bm5ucm5qamZiXmJiYmJiZmpmZmZmYmZmZmZqZmZydnJycnJybnJ+fn6ChoaKgoKCfnZ2cgHNrbmReU0pITUZETEtFRFFTQ0c9PDgzNjI4NDY0NjQ4OTg6Ozk7Pjw5PTs5PTczNTk2NTY8QD0/QD88P0JDPkJCQj89Pj5CQ0FFQD86PkVAO0+jpqWkpqeoqaelpKWlpKWnp6eoqKanp6alpqa1tba2trW2uYptcW1vfHxxZ2pmYGFsYFROW2hqbm9tgYJ9cWdxdn6aqKeoqqmpqqurrKqqqqimpaWkoqOlpqalpaWmqaqppqWjpKWmpqWjo6KioqKhoJ+fnp6cnJycnJ2dnJ2en6CioaKjo6KhoqKkpaSioqOjpKSjpKSko6Ggn6GipKanp6ipqaelpaSipKSlqK2wsKyrqqusqqmnpaWmpaWlpaalpqioqailpaWkpKSlpKOjpKOioaGhoqKgnp2cnJubm5qZmJiYmJmam5mXl5eWlpeXmJiZmpqcm5qampubm5ucnJ6goKGgnp6enpycm356bnJiXlNNSlBFRk5NQkBPRT5JOz01MzYzODM2Njc1Ojs4OTs5Oj49Ozo5OT03NjY5NjU2PkI+PkE/PT5DQT5DQ0BAO0BAQkJCRUA+Oz5FPzxQoKSjpKOjo6SkoqSlpaSlpqamp6empqalpqaltLW1tbS0tbiBaHx9ZXOCemxwdWFfY1ROT1FbaGxpbGxxbW5xbnScoqSnqKioqauqqqqqqaempaSjo6OjpKSlpqalp6ytqaShnp2eo6Shnp6foKCenJ6dnJycmpqam5ucnJubm5ydnp6foKChoJ+goaOioKGjpKSjoqSlpaWkop+go6SkpKapqainpaGdnJ+jpaipqainqKioqaempaWkpKSlpqampqampqenpaWko6Ojo6KioqGhoqKhoqOkop+enZ2cmpubmpqZmJeXmJaWlZSUlJWVl5iYmpubnJuampqam5ucm5ucnp+fnpucnJyam5p/fnF0YFtUTUdNSEZMSj8/TkM8QDs8NDM4Mzc0NzY3ODs9ODo6OTk7PTs7ODk9Nzc4OTU4OD9APT9BPjs9RD89REA/PzpAQUE/QUVAPjw8Qz88Tp2ioaKioKCipaSkpKWlpqenp6empqampaampbW1tbS0tLS3jHalsXdmc3Jvc2xjZGlYT1JRT09dgG1kYFptkZGSoqKjpaampqenqKiop6alpaSjoqGhoaKjpaempqesrKemoJ2cm6Ghnpuamp2cmZiam5qampmZmZubm5uampqampucnZ6goaCfnp+hoJ6foqOko6Omp6inqKWioKGhoaGkpaWlpKCcmZmbnqOmpqampqanpqempaOlpKWlpqiop6enpaWlpaWkpKOjo6KhoqKioqKhoaKjo6Kgn56enZybnJubmZaUlJSTk5OTk5SUlJWWl5qam5ubm5qZmZqanJ2dnZ2dnZuampqamZqXf3dvc11aTkhKTkdFRklERU5APD09PDQ1OzQ2NDY1Njc5Ozg5OTg5OTw7PDc6Ozc4ODg1ODg/Qj9BQTw+P0A8PEJAQT49QT4/Pz1CQUA6OkA8PE+doqGfoJ+dn6OkpKSlpqeoqKenp6ampqampqW1tLS0tLS0tbSXtqd1Znh2Y2xjY2VjW1JTU1JNXqCMeFhodpajnp6hoaOjo6OjpKSlpqalpKSioaGko6OjoqOlpqampqenpp+bmpuioJqWlpWam5qXl5iZmpqYmJqampqbm5qZmZmenZ2goqOjo6KkpKWinqGhoaKjpaampaSjoaCgn5+hoZ+goJ2amJeZmpygpKOjpKWmp6alpaOjpKSkpKWnp6ampqampaWmpKOjo6SjoqKjpKGfoKGhoKGgoaCfn56dnZyamJeVk5KSkpKSkpOTkpOUlZaZmpqbm5qampqbnZ6enp2cnJybm5qamZmZlH10bHReWk9IRUdGQkVORT9GOzo+Pzs0Njo2OTM2NDY4ODo4OTc4ODo8Ozw5Ozs6OjY3ODk5Pj9APjw9QD5AOjlAQT89QT8/QUE+QUE/Ojk9PjpQnaCfnZucnJufoqOlpaWlp6iop6ampqanpqantLS0tLOysrGwsK2rkHiGj36bmn93Yl1TUlFRTGKgootaiKCgn52YmZycnZ2eoaGgpKenpqWkoqGjp6alpaKipaampaanpqagm5mboZ+XkpOSl5qcmpeXl5ibmpmampqam5qYmJmaoKCgoKGfoaKipKamop6gn5+goaOko6Khn56enpyanZuZmpqZmJeZnqChoaKioqKkpaWmpKSkpKKioqKkpaWlpaWlpaalpaOko6KioqGgoKGgnp+fn5+fnp+foJ+cm5qZl5WUlJSTkZCRkpKSkpKSk5SVl5iZmpmZmpqam5+fnp2cnJycmpmZmpiXl5F8cmdxXl1QRj9BRD9KT0JCRjhDRT4+OTg7Nzc0ODQ1OTo6Ozk3OTo8Ozo8PT48PDo2NzY5OD4/QT47Pz49PDg6PkFAQUE/P0FCQERBPjo4PkE8U5ycm5uampycnaGio6KjoqSmp6alpaampqSjo7KysK2rp6amp6alpqiln6iop6qnoXmEXFFST0xcnKCAYpmgnp2clZOVlpeZmp2dnqGmpqampKOioqanp6ajpaampaWmp6amop2cn6Gfl5GRkJSXmp2YlpaWmJuZmpqampqZl5iam6Ghn56fnpybnJ6goJ6dn56fn6Cio6SjoqCfnp2ZlpeXl5iYmZubnqKioqKioqGio6WlpKOio6SioaGhoqOkpKSko6SkpKSioqKhoqGgn5+gnp2enp2dnZ2dnp6em5mYl5WTk5SUk5KQj5GSkZKSkZKTlJaXl5iYmZqampyenZ2dnJubmpiYmpmXlZaNempmamBiTkY+P0A9SkVAQ0A7QEE8Ozs5Ojc2NTg0Njc4OT04ODs6Oz87Ojs8Ojk6Nzc2ODs8Oz08Ojo8PTw3Oz5DQkRDPz1BQ0FEQT88OkBCO1eZmJqamZmam5ucnp2foqKhoqSlpKSlpqSioJ6op6alpqWlpaemp6ampqakpaanqKehqXJOUU1KVJahenKanJyenJeVlJWWmJiXl5qeoqKhoqOkpKOjpaalpaanpqSlpqalpaOgoKGhoJmSkI+WmpmenJaXl5eZm5ycnJqamZeZm5uen52cnZyZmZqcnZydnp6fn5+hoaCgoaKgn56bl5WVlZeanZ6fn6GhoqKio6OhoaCgoJ2cnaGioqOkpKOioaSlpKOko6SjoqKioqKhoKGfn52cnZ2cnJ2dnJ2enpqXlpaVlJOTkpKSkpCRkpKSkpGSlJWWl5iYmJiam5ycnJycnJ2cm5mYmZiWlJWXi3hsY2RiZFFHQT1DO0tIRDo7Ozw+OTo6OTo3Mzc5NTo4ODg8OTg7OT09Ozo7Ojk8PDc2NDc/PDo9Ozw/Pjw7ODxBQ0FDQkI+P0NAQkFAOj9APztZmZiampqam5ubm5ydoKGhoaGhoqKioqKhn5+dpKWmpqenpaWmp6ampqWkpKalpKSkpaaGUFJQT0+PmHB6mpubnJ6cnJycm5ubmZiYm56dnp6foKOkoqGhoqKio6SkpaalpKSjoqGhnpyblZOUmJuam56amJiYmJqcnpyam5iWmZybnJycnJydmpqbnJ2dnp6dnp6fn52cnJyhoaCblpWVlZacoKGgn5+hoKKjoqOhnZuZlpaWlpicnqCip6ikoaCgoqOjoqKioKCgoJ+fn5+gnp2cm5ucnZydnJmanJuWk5KSkpKUk5KSkpKSkpOSkpKRkpSVlpeYmJiYmZqcm5qbm5ucnJqZmJiXlZWWl4d3ZGdoZGJNQ0U8RDlJSkU5Ojs9PTo6Nzg6NjQ3OTU8OTY4OTc5PDs7PDo6PDs6PDw4Nzg3Pj07Pj46Qj86Ojo/QURCQ0FBQD9EQUFAPjpAPj06W5qYmZqbmpubm5uen6CgoaKioKCgn5+enp2dnKWkpaanpqWlpqakoqKio6Oko6Kjo6KnllRYVVJOZ21rgZ6am5udn6Cgn56enp6dnJ2dnJ6enp+goaCfn6CgoKGio6OjpKSkoqGhnpuamZiZmZiZmZienpiYmZmam5qWlZeWlZicnJ2cm52dnpybnJ2cnZ6bmJqeoaGdm5udoKKhmpWVlpaZoKKgnZueoKGjop+em5eXlJKSlJeYmZ2goqenpaGgn56goaGioaCfnp2cnJubnJubmpqZmpydnJmXmZaVk5GQkJCPkZKSkpKSkZKTk5OTk5OTlJWWlpeXl5manJubnJucnJqamZeXlpaVlZSEcmZsYmRbREJMPT84RktCPEA+Pj05Ozk6PTg1ODg2Ozg1Njo4PDw7Ozw8Ozk8Oj09OTU4Nzw5PD88OkE/Ojo6QEBDQkRBQ0A/Q0FAPj08QD09Ol+al5mamJeYmpycn5+foaGhoJ+fn56foKCenZ2lpKSko6OioqOjoZ+foaGipKOio6SiradXXl1UV19ua42dmpqbnJ6dm5ucnZ+enZycnJydnZ+goKChoaGgoKGgoKGioaGhoZ+enJubmpubnJqZmpuZnJ6ZlpaWl5eTjo6QlJabnJuam5udn52cnJycnJ6dlpSZnJ+in5ycnZ+hoJuXl5mZmpycnJubnZ6fnZqXlpaWlJOTlJiampqfoKGmpqWgn56fnqChoaCenJubnJybm5ybm5qZmJmZmZmXl5iVlJKQkJCQj5CSkpKSkZGTk5aYl5STkpSVlJWWlZaZmZmam52cnJyampmXlpaWlpaQgG9vZV5gV0BKSDg/N0lFP0VBPD07Ojo8Ozs3NTs4Njs3NDY6Oj47Oj0+Pj07Ozs+Ozo4Ojk5NkBBPTo8PTo6OT9BQ0JERUM+P0FBPz8+Pj89PDtgl5WXl5aVl5mbnqGhoKGioqCenp6enqCgn52bpaWkpKSioKCfoJ+dnZ+hoqOjo6OkobCjXWVkYGFua4GenJubm5ubmZianJ2enJubm5ycnJ6ipKGeoKGhoqKhoKCgoaGfn5+enJmZop2bm5ybmp2dm5manJiXlZWWkY6Nj5KYnZycm5ycnqCdnJucnJyempWVm56foZ+dnJyenp2cmpqampqampqbm5qXl5aTkpWVlpWTlZaam5qanZ6foqWjnp6fn5+en5+enZ6fnZycm5qcmpqbmpiZmJiYmJiYlZSTkZCRkJCQkZKTk5CRk5SYmZiVk5SVlZWWlZaXmZmXmZqenpyamJiXl5aWl5eYjX1ubV9lVlRFSzw3PjdSRUM+QkE4Ozw7OTg6ODY7Nzc6Njc5Oj0+Ojw8PT49PD06Pz06ODw9OTtAPj4/PT45OTs/QkNAQ0VDPT9DQj5AQD5APTw8YZWSlJWWlpeanJ6goKCgoaCgnp6enp6gn56em6WlpKSioJ+fnp2dm5mbnJydnp+gn56rmGNpbW5pZm2enZybm5ybmpmZmZqam5ucm5uam5ygo6SgnZ6en6CgoJ+gn5+goKCgnpuZnLGempucm5ufnpyZmJqamJiYmJKOj5OXnJ2bnJ2cnJycnZycnp6dnpqVl5ygoaGfnp2eoJ+cnJuampqbmpqYmpmVk5OTkpOWl5eVlJiYmZucnJydoJ+gnp6enp+fn56en6KjpKKgnp6cm5qampuZmJmZmJeXlpWUlJORkZCQkZKTk5OSkpOUmJmYlpWUlZaWlpaWl5iYmJiXmZqamZeXl5aXlpeWl4l4dmddX1dURUU5OTs8WT5AOEI/OTw8Pjk4Ozg6Ozc5OjU4OTs9PDk9Oz0+PD0+Oz8/Ozk+PDw+Pz5AQUE9ODc7QkNFP0FFQz1AREJBQEQ7Oz47PGKWk5SUlpWUlpiYmZubnJycnZ2cnJ2en56dnJqkpKSkoJ+enpybm5qZmJiYmZucnZ6cpolla3R4bVuFop2dnJydnJqbmpqampydnZ2bmpuboKKinpucnZycnJ2enp2cnaSin5yamaOsnpycnJycnp6cm5qanZqam5yVkZOXm52dnJ2fnZycnJycnZ6fnp+cl5idn6GhoJ6cn6CfnJubm5qbmpmZmZmZl5WWlZaYl5eXlpaYmZuenp2dn6GhoJ+fnp6fn5+dn5+hoqKhoZ+fn5yZm5qcnZuampmXlpaYl5eXlpWTkpGTlJSTlJSUlJaZmJaVlZeZmJeYl5eXl5eYl5iXl5eXlpaYl5eVl5eDeHZfW11eUT1GOjk4P1VDQTtDQzo8Pz86Ojk3Ozg4ODc0ODk8Ozw4Ozs8PTo9Pjo/QT06PTw+PkA/PUBBPjk2PERDRUBBRUU9PkVERD9COzo8OTpkl5SVlZaUlJSUlJWXmJiamZqcnJydnp6dnZybo6Oko6CenJuamZqZmJiYmZiam5ubm6WJa3F2em9lmp+enp2dnJybnZ6dnJ2enp2dnJydm5ygoJuampubm5udnJqam5upo5uampyji56dnZ2cnZydnpybmp+fm5ydm5mZmZudnZ2dn52dn5+dnJydn5+fn5uanZ+goJ+dnJ6gnpubm5ubm5yampuamZudnJqZmJeYmJiYmp2foKCgoJ+hoaGgoJ+en5+fnp6foaKhoJ+enp+enJqam5ubmpqZlpaXmZmYmJiWlJOUlJWVk5OVlZSVlpWVlZSYmZuamZaWl5WWmJiWl5OUlJGRk4yRkJOWfXhqYWJiXFA8QDw2OENWSERCOjg7Oj47Nzc5Nj06OTk2NDc6Ozw9OTo6Oz87PT08QD47Oz46PT89PkBBP0A8NztBQ0U/P0REPj9EREM+Qj07PDs6Z5aTk5OTk5OTlJSVlpeWl5aWl5mbm5ybm5uamaOjoqCfnpuamJeYl5eXmJmYmZybm5qkgGpqb3lzcZegnp2dnJydnp6enp+enp2cnJydnp2bnJuampqam5ubmZiYmZuapqKamZuel3SenJ2enJ2cnJ2cm5qdn5ucnJubnJubnZ2dnJydnp2enZydnZ2cnJ2dm5uenp6dnZybnpubnJycnJydnJubmpmbmpmYmZmYmpmZmpyfn5+jpaKfoaKioaGfnqCgn5+fnqCioaGhn5+fn52ZmpudnZqZmJWWl5aVlZaTkpOUk5STkJCSk5GUkY+OkJGOlZabmJWYlJmXlJiRjJCPk5yTkoyFjIeDhndxZ2pkW1xRQT44NkJHYEJFR0A+Ozw7Ojg4NjU8ODo4MzQ6Njk9PTk5Ojs9Ozw6PD48Oj5AOj5APjw/QD8+PDg6Q0FEPz5CRD8+Q0VCPUJAPDw8OmeYk5KSk5OSk5SVlJWXl5aWlZaXmZmZmpqampqkoqCfn52bmpmYmJiXl5iZmJmcnZ2cqH1nZXN7enOJop+enp2dnp6enZ2enZ6enp2dnZ6cm5ybmpubm5ycnJiYmZmamaOemZmboY5km52dn56enZ6dnZybm52bnJybnJ2dnZ2dnJ2dnp+fn52cnZ2dm5qbnJmZnJ2dnZ2dm5uanJ2dnJycnp2dnZybmZeVlZeXmJqam5ubnZ6foqOhoKGhnJucm5ubnZqcmZycn6CfnZiZmZmUkpKUl5SPj4+OkYyNiYuQi4mLjpGRj4mQmJiQkoyNi5KQj5iYoqiqpqWlrKOmoZqep6eyqKKVo6Cfl39wcWlsXFtcTUY8NzdHR1g+SE5URjk+Ojg5ODc1PTk4NzMzOTY6Pjw6Nzo8Ozo6Ojo8PDs/PjtAQD47PT5BPDw2N0A+QkA+QUY+PEFEQT1DQj49PDlmmJSTk5OTkpOUlZOVl5iYmJaXl5iZmZqampqaoqGfnp2cm5mYmJiYmJiYmZmZm5ybnKx/am16f3lxh6Genp2cnZ6enp6enp6dnp2dnZ6enJubnJubm5ubm5uZmZmYmJihmpeanKOCXJignZ6enp+fnp2dnp6dnJydnJ2dnZ6fnZ2fn56goJ+enZ2dnZybnJ2em5qbm52enZ6dm5ubnJ2cnp2cnZqYl5SRjo+QkJGVmJSWlJiZmpudmJuYlY2Mjo6TkpKRj4mQjpGRjo+Ki42NjYiIi4+Lg42NkY+MkI2Qk5WVnJihoJySn6SipKmam5eanKOprb3Bwbq8uL26ucC8ubq3uru7tL2zwbV/bnVmZ1peWUxJRTo7TElTPFZSSUM6QTo7Ozc3NTo6OjgyNTY4Oz08OTk7Ozw5Nzo4Ojw6PT85PD8+PDw9QTs5NTg8O0A/QT9EPTxBQkA8REM9PT06YZOTkZCUlJOTk5OTlJeYlpeZmJmYmZqbmpqamp+gnp+fnJqZmpqampmYl5iZmZmZmZmphXB1e4B3b4mhnp6enp6fn56en56fn56dnp6fnp2dnJ2cm5ubm5ubmpiYmJiYopWUm5yjeFqQop2dnp6foJ+enZ6hoJ6dnp2enZ6fn56en6CenZ6enJydnZ2cm5qYnJuVmJqamJiYmJmSjJCXlKCXk4+MjYqKiImMiJORh5CPjYqKkJCLjoqMi4+IiImJjpGOjYaFiYaKhoWLiI+SkJCNkJKXlpKamJ2TlJ6kpqaqq7Gsr6+rpquqsbm5tbS0rqyvtMDIxcXBvsbDxMTDurW+t7a0s7C2tb6qcHRyXGZfXl1JRj8/RUtMVklcTEQ/PUI6Qzk5Nzc7OTk3MTc5ODo+ODg6PDw7OTc5OTs9Oj4/OT5BPDs+PD46OTY5PDpBPkNBQT08QkBAPkJEPj8+OVyHhIOHi42KiYaFgYqMkZOVmJiHlZaWkpiampmenZ+gn52ampubm5ycm5iWmJiXl5ibqo56dXZ7f3mCoJ+fnp+goKCfn5+foKCfnp2dnp+enp2dnJqbm5ybm5uYmJiXl6KRjp2boXFbhaWenpybm56dnZycoaGfnZ6dnZ2dnp2dnJiWlpaYlZWSlpmWk5GKjI+PjI+NkIuLj4+WiYiEi5GZjn2Fi42PjYyHioyQm4yRj4+Lio6TjIyNjIiSi4yFiYyPhouIh42KhYyEj4qXkJOYmpWbnKOqoaKknKKrsbe0ubWxs62vsrKlp7O6sbq6vLa3tsDDw729vLa/urq8wbW4wL60r66mqa+3mm58Z1tjWl1fSEU+QUtJU1hZXkFGOTk9OkY/Pzo3Ozs7NjM6Nzo5Pjg6Ojw9OTk4Ozk7PDo+PTtAQDs8QjxAOjg0Nzw7Qj9BQj4+O0NEREBDQz0+PjlhmZWLkYWNj5aSiHl9e3+Fi4OKgoqJhmuAeJCLlpqRnZ2UlJGTlpeampiWk42Sk5KQm5uIdndzcX1/cpGgnZubm5yenZ2eoKGgm5uWlpucmpubnJuYmZqYmJmbmpqWjJKdjoiZlZxvYnaelpWSkY2SkY+Uk5KXm5mYm5ePjpCLjo2Ch4uLi4qLiI2RjIeHhoqIiZGKh4yEhYqNi4qNhI+UkIyDkJOUmZWQi5OTkZWRlpWOj5GMlI2Oj4qIj4ePhoeJiYmNiomJioWNh46JmJKUmpuXmKChp6Cko5qqqbO2sbWwqKmiqK6tn6qvsK21ubi8wr/BxLixtbCutrOwuL68ury+urOzp7G3wpB1gGNiXlpXUk1IRkVQSVlXX1tDUDpCQz1HRj84Nzo6NzU1OTc8OTw5ODo9Pjo6Nzs7Pjs7PTs9P0E7Pz48Pzo4NDM3OkFBQEI+PjpDREM/QUM7PT45Z6mloqKZn6CippeUiI2CiIJ1h4iKiIp7e3Z7enmPeoiSfn18en6CkYWBgH1zfH99fISHfnRweHZzfHaBj4iIiYeIioyMkZicl4iOhIuNi4iNkJCPi5GPi4yPkJCRjoqIlo1+i4qOdGhpi4iMhYeBjYuGiop/iYqGiJiRiIOIg4KFfIuLjIaJi4iKkIyIi42PjI+Wh4mLio6NjY2Wk5OdnJyalpycm56bmpuYnZeTkZWWkJKRi4+LlpSMjYqDi4SEiYyQkIqOio2LipGJjZOTk5SVk5KcmZ6Xn6CfpaKvsamupKSfmKStpqa4t6ysu729wsPAv7+vpa2wsLS3uLO0uLa0ta6stK+4tLaBeXpjZmBeVlFRQUVMT0lcXl9UR0dCS0xCREA9ODg7OTU3Nzk3Ozc9PDk9Pj05Ozg6O0A8Oj06PkJBOD88Oj84NjQyOTtCQD9CPj04QEI/PkBEO0A+N2CloJqXnaGaoaCPl5efl5WCjaCfo6GdmpKOjIxycXBvdnFucG1ucHZub29waHBxcHR+c3FycXd7cnl2d3Jyd3Z6e3l8fXt/iIGEi3+PkYaNi4uGiouLiYeEgYaCgIKJlZCJeop/hXZqZIKAh32AgZKQhoSEhY2DhIyPj4+IjY+Hi4iRkJWRjpCKk5eOj5WYp6SfnZWYlpaln5udq6aqt7W4srGnr6qnpqGfmp2WkpWVkYqPjImTjZuVjYuLhoaJjJWQkJCLmZKVlZSbkJiTlIyNkYyWl5WilZ6mqauno6OqsJucpp+mq6G0vb6zs7+5u7u6uby9rqiusa6wuLyztLGxqrCpqLGxsqild3J0X2hhYFRWUUlKSFZNXl5eVExKRVFKRUdDPTo5OTc0ODY4Mzg4PTo9PD47OTs4Ojs/PDw+OT9DPzg7Ojg8Nzc2Mzc5RT4/Qz89N0BAQT0/RDw+PThUj4yGh4eUjJWZl5yWmZaNlZyWlZydoKCdmpiWeHFubXJ4cXFsbnJwa3FvcG1yc3t1dnd5fnVxeHZ0d3tybn98gX15eH1/eYOGg4WCg5CLkIuLi46Pi4mJhYKBfX9zfI2MhHqLhIVzamCGinl9fIaNjYuGjZSSi5CXj5SXkpihlp6XlZunpp+goKawq6GjpbW0sqqmqq+isba5vcK7ucO+vLi9uLWxrLCspZuSk5mfm5SPk5WOmp2doJqfn5edo6qsoZ+em62hp6qwqaampJiRkZWUo6SirKSss7Szs6i3tru4sLKvra2yt7a6srW6s7e5u7i8urayr6yxsbKztLOxsa2us7Gzs6yhl3Zxc19jXlJRVE1PSUdYT1pcZFROR1VPRURKRD44Ojg3NTg4ODU5Nzo6PTw/Ojg8ODk5PTs9PTpCPj84Ozo5Ojk4NjI1N0I+P0RAQDY+P0I/PEM8PT46Tn98go6MjJOTl5eaj5SWjZaRkZSXk5qanqGdnHJvcnFxcXFxcG5zcW91dHJxdneAdXd8eYV+d3t8eX1/fICJiYmDfXp/h4GIiYGAgIGGiIKGi4aIhoSIiIqEf4J/enuGh353h4CCb2dbgouChIWKj4uNkZmdlJSUoJqan6Ktsa2ppKWtr6ysrLWuvrmtrqm1sLexq7G2rK+9wsLAvrq8trKutraxtK66u7OurKepp6unoqmtoKmooq+wuLSxvLq6urK0ta+8tLezt7e7t7mtrbCprLW5sbeytLe2sLu7vLu6ury1vLi0wbWsqqqrtLG3uLm1trSzsKymrrCqq7Cxq6yusLKxtK6qo5N4dnJlZ1tMUlBFTUlTV1JlXmdUUExcUUhMUkNBOTk3OTU4ODY2Ozc5Ojs6Pjk4Ozo6Ojw8Pj08RD45Njs7ODg+OTUxNTZCRkREP0A3Pj5DPjpBP0BAO0t/gomXmJSdlpabmIuSlo6XkZGVl5SZl5+bmZx8dHV2dXl1c3RudnJzdHV2d319gX56gXyDfoJ/fYB/hIKFj52RiYF/go+Xjo6HgoCBiIuFfoqQi3+HjY2Li4eSioeGloh2bIGFfmhjWH+OjoqNiYmQj46PlJSYkJWcmp2eqK6yr7C1tLOtsrW4sLy1tbGqsKqztbS7t7SztrS1r7i4t62noqassLCvtre3vrW5vLOysa61u7C0r6+yu7axuMC9tLS0s7izvLq2tLrAvbm6ubq+ubm5vrWysa+yr6q1tLGzsbSzrri4tb+vpKaoo6ussa+zrq6wsKytq6qroqKmqKKnrauqpaynoqeYeHlxZmVZT09NSVJNV01PX15cTlVVYlFEVE07Pzk8ODk1Nzc1Nzk1Ojo6OTs4Ojw8Oj08Pj4/P0I9ODY6Ojk6QDs1MjY2QUZDQz4/Nz49Q0I5P0I/PjtLjpGTmJmVmZGTopiTkpKLk4uOkI+Vl5ablZSbhoJ9enh2dHRzdH53end2gIKDhouMhISFioaQiYeRk5aRjZaalY+IjI+emJaVkpCTl5qamZCdoJ2Tl5qhmp2coqGVj6GLc2x+mIhlYFmBkZGOkY6LmJqPj4yUmpecnZugnaSstLm6vK+2tLi0tLK3uLmzq6+qqKy1srK1rrGrrqa3s7OxpaGotbCvrayrtbqyu7q6tLK3ur67ubG4sLmtqLK4u66ttLS3tbu2trm5vLe0r7G0t7a5s7e1pq2pq6ior6yprq2up6KxtLG0q6aop6Cjq66oqq6orLKwr6+pqKGeoaGjpqOgopqlo56ol3J3bmdiVUtUT09KRFBLX2JYWlFcVGBNSFJJQUA5Ojg2Njc3NTg5NDs5Ozk8Nzs+Ojg8PD0/QkBBPTs2OTk5Oj87NjM3OD5GQkJAQjk+PUBDPkBGQj44R5OWkZWTkpSQkZ+ZnZmVkI+Sko6Mk5aWko6RlZGSkIaBeXJzdXuBhI6HhZGTkpicnJiVkJWYo5yaoaeqqZ+clpeVnaKioZyZnpmlqKyvramnqqmpp6KlqKmsqqmvoJ2mkXx7i52acmJfh5eUl5+foaSem5qkp6Spq66spaSoq6+xtK6qrK6zr6ystLO0ua6urayqrLKwsK2wqKqmsrS0uK6qtrqwr6qurLC3s7i0t7W0u7y4tbWxtauyrKiys7uvrbGytLa1sbG0s7OvrKuvs7a0sayutKqqpqWnrauoqKupqqifqbOwqqeppaOio7CtqaatpairrayppaSioKWipaOYmZyVnqKippdudWVnZFdPWEtLSktTVHBiWWRXX1tcUlpQTEM8ODk6Njk4NzQ3NzQ4Ojw6PDg6PTk3PDw7PkM/QT47OTo5Ojs+PTg0NThBREVEQkM5PjtAPkI/R0Q+N0KSm5SVlZaVj46Wl5qZlZGKk5SSjo+SkYqKiY2Ul5qTjYmCho6VkZSfmpuin5+jnqGhn5ijpKelpaapqa2rqaKmpKilpKGfnqOjra2srairrq6rqqykoaKlqaenqKipnI14e5aOlnhwbZOdl56hoainoKKirqurqqetrqilpKmpqqmmo6iqqaekp66wr7Ovq7Crqq+yr7Czua+rqLCxrrCyubO0r62vtbCss7GurLW1tLSzs7CvrKyqrKusr7G0s7CwrrCwsKyqrauqq6alrrCysKumqbCvqaOkqaunqKaopquwq6mvqaaoqaalo6iwraqpqKKpo6WnpKGhoKKloZ2el5aYlJugpKmUbnNeamlfVVpOUk5QT1NlXGVjW11ZXFBZT0tAPDs5Ojc6ODczNTMzODo9OTo4OTo5Oj08PEBEPkA9OTo8PDw+Oz45NTo8QkFFQUNBOT47P0BEQENCQDdAkZ6YlJeZlpGHi5SSl5GIg4mLk4+OkI2Hh4SFlZmWmJeZlpqeop2anKKkoaCdn5qfoKGgpqGgoKCjo6KlqKmrramqpqOmpaCloKaop6aoqaepqKSnppmdpKaioaCkpop6ZmGNg4VjcHOLnZafmpmioqCgn6ChqKCcnqGloaCmo6KfpKGspp6foaGkrKqnrKivq6e0sa6ur7WyrKqwq6mtrbWwrq6srreup6yqpKivsq+sq7Kvqqqpq6utqa6urrGxraqtqaunp6uoqauinaapqKilqKisqKilpKWop6iopqmsr6+oq6mhoqKlo6Opq6ymqKWjqKKhoKSdnZ+hoZ2bnZ+amZWcnKOqlG9zZm5yZF1cUFVPWE9eZGRsaGJiWlpSVE9NQTo9Ojo4Ozk1MTYzMjg4Ozk5OTk7OTk8Oz0/Qz5APTk7Ojs8QD0+PDk5PEFBRUFGQTo9Oz9BQUJBRUI4PYqWlJOYmpaPiISNjpGSjIiIiI+JiZCRjoqKiJubmZygpaKlnqKjoZqeoZyanZ6bnKOop6ugoKOYoJ2XnKGjo6WjoqKkrKilqaCepqmnq6mkn6Kgoqahpq2nppydppx6ZlZOfnt5Tl9qeJqbnJmbn56gn56eoKOZlpqYo6KipJ+ZnKGhoqCbmp6goaSgnaejqrGorqusqaSqqquorKalrKqws6+rq6mwq6appaWoq6ynpqevq6Wnq6upq6irqqqrrailqKOmpaesqayoopykoaOmo6qpqKano6SnqKanqKepqKupoaKoo5yepqWjqKino6WlpqmgpJ6inpeYnZ+doqKlnpiUlZ6go5d1d2t2eGJfW1VZUVVXW2Nec19oX2NTUVlUSD48PTg7OTo4NTM3MzM0Nzo4OT05Ozo5PDxBQEM9PT44Ozw9PEA/Qz86ODo+P0NAREE6Oz49QD9DQ0VDOTyCmJmenZ2alZKKiZGRl5GQh4SJgoGNj4+Sj42cnZ+hpKmlqaeorK2moqKfmKSmo6Stsa6yp6asm56em5qjp6Cfo5+foq+rq6yoqKuvqaiqqKKgoaiqrrGzrquioaySa1FKSXd0b0VRYWuQo52dn52epKKioaCimJWem5+fpKGblZigoZ2enJudnZuZmZWen6Oonp2iqKGaoaOmoqSoqaqoq7CxqKWlp6eopKWpqaqnoqWmqKadnqWloqClpaOlpqCjpaOjpaelqamqpKekpqKmp6SrqaenpKGlqKynpqWlo6OopJWdo5+bnaCjqaeopqGjo6mooKiioJyVkZqfoKGmopuXkpCamqCVfHdvfXlmW1tgX1pcVlxoZG9jbWppYl5QUEA/Ozo4OTg8OzYzNDMzMzc5OTs8OTs7OT49QkBAPTs9ODw9QD08PENBPjo4PT9EP0M+Ojk/PEI/P0FEQjk6gJ6kp6Kem5+gmY+ZnaCWloqGj4iEi4qTl5SRo6Wnqq6trLOys7S4t62pqqevtLKxqq6usbKusa2lq7OssbGpq6+rq6y2sLSwq7GysaOgoqqqp6+3trW1trOuq6+rglxIQ0dyaWZDRlhmfp+anJuWoqelp6mfo5ueoZqWnqScm5aZoqefoJ+joJuUlpmWl5qfoJmVnqGZmJ2dpZ2gpKeqqaiqraylqaSlqqeqqaqsp6SkpKOimZmhnpqaoaCfpaWYnqSmpKqooqelpaGqp6mnp6ejqKWmpaGkqKesoqekoaalpaOVl52Ym5mVo6elpaSfnZ2lo6Kqo5+amZiXnJyaoaGakJOTl5ibjX93cnZ4aWJbX15cYllgZG5ta25hX2RgUE9BQDs7OTs4Ojk2MTQzNjQ3Nzc6PTo8Ozk9PUI/Pj89PDo/OTo7PD5BRUA9OTtAQT5DPDs5PzlAQEBAQkM7OXuao6OcoJ2dop2Zn6KioJibmJaYkpSQm5qWl7S0rrW4s7S4tre0uLm3tbm4ub28uKqLnLK4vLS9urW7uru4s7q/uLe5u7G3r6iusq2inaCqsri9vby7ur+0rrG8nnFQV01Eb2FfSERPYG+VlpOalqOrqLatoqOkq6almKGko52goaKooaOgpaGck5mYmJmco56cmpudl5uZlqWam5+hqKmpqKuvr66pqKirrKytq6irp6WjoJyfo6Ojn6Cipammmpyip6Spn6GjoqKgpaanpqSooJ+ipKGjoqiop6OloaGopqalo5mbmJuTj6GknqKfmJiVoJuhpaCfm5udnJuamZugmo2YmZiTkYaAdnh4eGNbUllUX19hbWh2bHBoaWliWlNMQDw6Ozg5Nzk3NTU2Mjg1Njc3Ojw7Ozs7QD4/QD0+Pjk6PDk2Nz47QkZCPDg7P0NDRDw+OT43PkFCP0ZDOzhwkpqblJ6bm52Vl52doqajopaXnpaXl6GblJi+t7G4uba3t7i7l5S2vbu9vcDFtaK7mKC3v7+6wcm0nbu2sra/xcGooLa0urGqrrSxsLG0tba8wcjAu73Gurm4vI1hWY5yQ2xgX05SV1pmkZ+WoqSop6C6pqqrtbWus6CnqqynqqmlpqCnoKGmoZOWmJ2foqSjnZ6coaChnZekmpmdoKaqqqqtrq2tsLGrrK2sqamrrqimpaalpqSkpqaeo6eppKGcoKKjpqCio5+jpJ2foqWgpJyboZ6fo6GhpaSlqaOkpaKkp6ehn52elpOcoJiZko+MjJeWn5uWnJqdnJqSlpSUmJOQmp2YiouHgIB8gnhhXllUYWlgZnRvdGl0ZGlkYltMSz46OTg5ODg5NzM0NTI1NDY2OTw8Oz08P0E/QEA9Pj44OTs4Njc/OUJFQzw7PD5DREM9QDs9Nz1DQ0BFQjw3Z4yRk4qalZiblZWYm6Knq6aVl5iQlZmhnpeXvrWztLu6ubi5woeYt6u4u8DCxbOjw6e4s72/tMTHvbS7uL62wMTErqCworW2tb2+wcTHw8O5vcPU1sfAwry7urqIVnvCqk5ubmdRW2RdXIisqKesoouUtaartLywtbaor7Gwr6yqoqajrJ+fpquXmqifpaWfoJydoKuwsKyiq5yYm6Cor7Kys6uorre1sq2tqaalqKulpaStqaShn6Cnnp6mqKmmnp+anqGlpqmcnaObl6KmmpuanZ+cmqGcmZ2eoKijn6GfnaWioKOioZSZmpmTj4qLhI2Qk5uPjpiVm5eYkJORkomNl5iYk4uKi32AgIVwYGJfXmtjYm54dXZubVtiUlZcTUc7PDk3OTc5Ojc0NDQxNDM3Njg8Ozs8PEBAPUA/Pj8+Ojo5Ojc6Pz5FRUU8PT1AQkJCQUE7PDhAQ0NARD87NV+MjIaFlouUlZeYl5ifpqellpWVkZebn5ual7mxtrO5vLy5urWqsryxvsG0vMe5uLuuv6fGw7/KxsnIxcXJvMLHx7+xsKe8vL7FxMbJx8XGu8TC1eDayrW8vMDAklCLwL9hfYJ5XUppcFN6s7ionIJvlrCjprG2q7WyrbOtqK6vp6awr7Ktqq+zpKu1qaeopKCgnqmyuL61tbWqqaausre4t7apq7i8ubexr66noqOop6SfqKOfnqCZoZydoqSnp6GelJuaoKGlnqChnpajnZSQlpiboZqflpORlpSin5qenJudoZ6kn56VnJiPkpOPjImTkJefiZCWkZuUmJGRlZaDjJWXlpKLjIh8foR/aWZoYWtsZ251cXJ1cWdeX1xSSUU/Ojo6Nzg0ODw3NjU0MjMzNjU3PDo7PDs9QD4/QD48PTk5OTs6PDw+QkRFPj49QENDQkREOzo4QUJCQUNAOTJbk4iEjZGKi5GRlZCSmp2fnJOSmJSdnZqXmpW2sbm1tb6+tri1uLO8vMTEusPHwb+0s8XFxr/CzcfLzsvLx8HDxsfIysXExcO7vLzBxcHFxL/Dwsvb2cqzwbzAxqVVgqKicJyPhXxFd45Va6uwlHpjcau0pqqpqKqtrKmlpZ6pr6uyu7q4u7e5t7O5uLOurLO0qrC1ub3Bur6+vL60urm4u7qysbS8u7q7s7Oyp6Smq6uioaCdmpudmpyXmpuenJygnZaclpuZnZ6io52UnJCNiY6OkZ6bnJWNh5KLmJiWmpybmJybnp6cmp6UjpiYmpSRmZeeoZWYmpKXlJWRlJqYk4+TnZaSi5F+enx+dGtsbmRvbWlxeG55aWlhXGdhUUZEQTw5OTc2NDQ6ODQ2NTMzMjY1Nj05OTs7PT47Pj49Oz05OTs7Oz89QUNBQkFAPEBDQ0NFQjs4OUQ/P0BCPzsyV5uQkZCQh4WSjo2IjZCTlZGPjZSUm5STlpqRs7e4uLi+u7C1sri2tbbAw8G+w8LAvru+u7u8xMzEzNDLxsa/xcfLyNTLysjGv7u7vsS+xcjGxsTEzc/Dvbi4vsWvY3R7a4u3koiZV3uPXWuQhXJhWo23tayupaSjqKSgn6WZqrSxvsG+urm6uLW0srG0tLO6wL7Av769u7u9vsDCt7a3tru7sru+ubi3u7a3tKyoqamrpqijnpOampyYkZKZl5GRmJqXnpiWk5acm5+elJOJiX6GiIuWlJiZkYmVkZeWlZmbmpaYl5idnpyhmJWZmZyYl5ybn56jnJ6WmJeTl5yZmZyUlp2UlpOJdnl5e3dua2lndVpmcnhzeWZmXWRbUlhJRj87Nzg4NzYxNjk3NDQzMzM2NDY7ODo8Oz08OD0+PDo7PDs9Ozs+PkRBQURCQEBBQkNDREM9OTlCQD8/QD89MkyWmpaSk4yKmJCKi4yOkpKKiIaNkJiKj5CUl7O7tba/vb2xtrjBvby0uL/Bsbi3vsHFvbu8wsbJv8jOyMHEwcfKysbKxczIzcbIxb/DwMvNz8rGxMXLwquprbK3nnBxbVykuJCInWhncmhoamVeV2ikurWzrKmioa2prKatn6y1tL/Cvrm4vbawrausr7W0ur7Fv7u8urO5u7i5ubWtsLS9u7G/vLiytrmzubu0ra2orKyqqaeXnpualY2MmJSTi5WWlJyZl5WWmZKYn5mQiop+iYqKkY6Vl5OUn5mWkJSZmJmWmJOUm6GeoZiYmp2ZmZaenpibopqdnJuYmpuZlpeXlpyZlJyYfoB4eXV1ZWVpamddam9ueHdjYmBgXlhXRkU4Ojg6OTc5NDQ5NzY2NTEyMzM0Ozo9Pzs9PTo6PTs8Pjo7Pz48QkBDQkJFQj0/Q0NDQ0RFQDk6QkFBQj5CQTVCkJeUlZmSj5qQjpKRjZSVi4qHjI2UiImPkpq2u7S8xsHEwr3BxcLAtLO9v6ywr7rDysPCvs3IxbfByMW/wcLIy8rCwsTJzM3Oz8zDx8bIycjIycfFy8uvl5mcnY52cGNgqqqMi5RwYGRnYV1cWFWLu7y6vKytpqq7urm3wLK1uLLAxrq3t8Gzsa2tqau1s7u2w7a2vbWxt762s7e4sLW2v7uwvbq0q7CxsbO8urOzrqutq62xnaOjoJqQjpiXlZCclpaYlpWSnJmTm5+clpGUjpWQiYyQlZOUm56YmZKSnJedlJmSk5aZmJ2VnJ6do5yVnZ+TnKKcnKCfnaOemJSVl5ebmpmgkH99cXRxb2NhZ3ZoaWl0bXhsXWRbVWBZTEhDNjw5OTg4OjUzOjY2NDQxMzUyNTs6PD47Ozw9PDs8PTw7PD49P0E/RUFCQ0M+QEFARUVERUE7Nz5DQkI+Q0I4O4+akZaalJKUjZCUlI6VlI6Pi4yJk4uIkJObt8C6xsXEw8zCwcS9vrWvt7uvr7O6wMfFxMHMy8W2ucDCwsTHytHLwsPExsnFzNDNx8zJwsLHwsvLyMfOw5uGiIN5Z19NYKGZh4yLc2VgXlhXWFVntMnAvL60sLCwwb6+wca/vri2w8K6urbAvrWyrKmvsri+tMC0tLi0t7nEua+8vrm+v8K/tbq2q6qsrq+wt768trSura2utaSlqKimmpycnZyeopydmZOQkp2VmKCdmJiVmZmZl46MlH2QkJefmZmYk5GToI6Nko+VjpCUlaKdnKSem56elpyjoKGipKOkop6amZubnJ2enIN9cnx4cGdgamp2bGlldW50Yl1iVFdVU01HOjc7OTk3Nzo3NDg3ODQ1MjM0MjU7Ojk+Oj08Pz04Oz05OTk9PEBBQEVCQUJBQT9AP0RFREVAPDk+QkNCQENBOjSAoZeUmZiVkImUk5aTiZGMlJGOiJaKi5CXnMXLw8O8wMPHwbm9vbu4tre3rrK3uLzAwsDCx8bHurzAwsTHyMbSycHDw7+/vsTLyMrLyby8yMfJzcjDyMq0fnFqXVFQQlyMgn+CfW9mW1hUVVVUicLAwLq6vbWzs7+/ub/DucC3u8G8uri7ub27srCvsKy5wri9ube1t7q9xb24xsjCwcLGwr28tamurrCwr7O6t7m2sK+tr7OppquprqannqSlo6OjoqCblZiekZecl5GRlZeZlZmRlJiSlYyYo5qcnp2FiZ+TfJKWlZKUlJennaCipJ+en56foaGkoqKjoaOinJ2fnqOhppl5enl/cnBmZWZjamRiam1ub15ZXVZWTlBKRjk5Ozk3Njc3NjM3ODk1NjEzNTI3PDs8QDs/PDw6ODo8OTk4Pj1APz9GP0JBQz89QT5ARENDQTw5PENBQ0RBQDozbKKdlZedlo+PmJiZmIiSjZGVkI+Vjo6TlpbKy7u5urnBu7q3vsG8vLu5sa61uri4u8S6vsC+vru8wMXBxsK+xsK5u8O6uLm8vsHHwca7ucjIw8XEwMPCwZJeUk1IS0FVdmluc29oZ11YVFZTYKnAuLm7u763tLC5vrO8vrG5tbi7tryztbm2uba5t7GtusG6vMG/t77Ev8bDw8fHwrvAwr/Cv7iys7O1tLGut7S3tbSxrK2xp6Wlp7CtqJ+nq6ajqKWmpqCgn5SYmZSRkZWUl5OYl5qhnZ6hnKGdoaWglpSbkZeXmJqTnpmZqaSlpKWdoqCanqCkoqOcoqGjoJ6cnp6ppaiVfXuDeG5mYWRiYWNjY2piZ2NbWlpcWVFPRT07OTo7Nzc5OTY0OTk6NTMxNDUyNzo7OkA9Pzw8OTc3Ozo5Ojw+QD8+RDxCQURAPz49QkRCQkI+OjlCP0FCPT44NVmfnJiTmZaRlZiYmpeQkZCQk5GTlJKSkpSUxce4tbq5wrm5vMPFwri7ubGxtry6tbnAu7u5tre0tLW/u72/ub66urTAuLW3sq66u7fAt7zKz8G7v8C8u8avbklGREhATWRZYGdmYmhkWVNSW4y/v7q3u765tbi0uLy0vbi1tLCzvLG3tri/tr25vb65t7q+u7/Axb29y8PGw8TAw762ubq2v7i7v7y4trOyq7CwsrWzs66sq6emnqeurauiqKumpqqjp6iqo5+Ym52bmpicnJiXnJuhpZ2anqGhoKGmoJqbnJiboJ+dnJ+coKiho6SknaKfmqKgop+el6Shop+dmpieqKWhi3x5iH1xZGFiY2hqZmdpZWleVlZUWU9TTEY4PzY7Ojc3OTs2NTo7PDYzMTM0MTc7OTg/PT47PDs3Njk5ODo7PUA/PkA9PT9CPjxAQUNDQT9DPTo2PEBBQDw9ODdJlJibj5OUkZWYlZGWkpWRkJGUlZSTk5OYlcHCwLq8ub62uL7EwMKxvbqytLO4vLW3vMC8vbS0sbC1t7W7wbi+ub+8vLe0t6+ut7W5v7vC1426vrrDtbnHt5xgQUBFO0pcU1hhYWBnaFxSU360xbzBv7zEt7a3tLi2tru7uLa0t7q1tLi8vbm/ucPAwLu5vLu+vcjEvcfEw7rAvb62sra4srm0usLCureysaysq62yr7Kur6ijpJ6rrKyqpKakpKiqoqemraihoaGmn6Oiop6bnKKfoKOdnJuhn6KgpKCem5eZn6GdnZ6eoaWkoaKioZ6ho5yinqCZnZijn52eoJqZoKKmnYR6g4F5cW1lZWZvaWVsaFhYTktLS1JKTEhEOT44PTs2Ojs5Njc8ODk4NjA0MzE3OTk7Pz0+Ojw6ODg5PDg6Ozs7PD1BPj09Q0E8P0NDREA/Pzw6Nz5CREE/QDg4P4mYmoyMkI+Tl5WMkpCakpGXmJaUlJKQmZTDvsbBwby8uLi6v7a8scK2tLyxtLa4s7q9v768sq2vrLGwt7y3u73BxLm3t7a1ubm6u7+80MR1qsu9x7i5t623j1BAQThMWFNTXV9eZWhdU2GhwcjDxMW+xri1srK9uLi4vrq6uby6urS3u7q5v7zEwL+5uri/ubvFxr3Fw8Kyur27sa+2uLO3s7q+wLm2rLGrrqmqqa2qqq6mpKWnrq2ppaOio6GkpaWmoqato6Klo5+ho6Gcmpyhn6CloaCenZygnaWgnpeVmZ2fn52gn6KmpaCknpybn6Ofn5mcmZ2epJyWnKOcnqGcppZ+f4d8a25wZ3Frc2ZibWBcVElLSkRKQ0NHPjk7OD48Nzs7OTc4Ozc8PDYyNzUxNjk8PD08QTs8Ojs6OT45Ojs9PUA+RD89PkRAPz9BRkQ/Pzw9OTc/QUNCQEI5Ojl3nJiLh4uQkpOWjY+TmpOQnZiSkY2PjpiSvbfHvsO+vbu+vL22uri9ure9s7OwuLi1uby7wLeqraSusLi7sr2+u8S2tbi1t7++xLzCxNescoC9yM/CwLetta19Tz84TVVSU15gW2FiXlWMuL3Hy8fHxMe9tbW2wb27u7/CusDCv7y2t729vcHBwL+8ube8wru3v8W7wr++tbe8vK+vt7awtLO6ubq7r6mtq62rrKaqoqeuqKWqra2vp6Sgn6ajnqKjqKOjq6Oiop6dm5ublJaZnJyfpZ6fnpmYnpejoJyXmZqZmqOjop6jo6egpqCbnaCjnp2WoJmcoKCblJegn6WcmKKQgYaAcWZsaW50bnhjZ2JcY1FLVEhFRUNHQjw7OTg9Ojc6PTo4OTs3PD01MzY1MDY4OTo8O0A9PDo+PDk+OTk9Pjs/PkM8Pz5APz4/P0ZEQEE/Pjo3P0BDQz9APTo4ZqGYj4uNlZKVlY6PlpmVl5uVjoyMjY+bk7m2wbS/vLm8w8C+wLq1trKywLmvsry8sLe7tru8qqqjsLm9vLK8vrzFuLG4ubzGycrCx8nSlm5yrtLRzMrEtbq/roJMPExXT1RfYFlaW1Zvt73Aw8zKx8XGwLm+vMS/v7/CyL3Hx8XFvLrEv7vBv7rAvLu7wMS9t7nCub69t7S2uLqur7WxsLCytre0t6yurKqsrKuoq6Gms6qlra+trKippaOkp5+io6Onoaeiop6cnZyamYyQlpeZnaKZnpuVkp2UoaCdmZ6fmJimpqKfoqKmoqeloqCko6GbnaCbnKKfl5WVnp6kmpafiYGDgXRvbGx0a2xuX2NeYGFOSU0/RUA/REM7Ozo6Ozo4Ozw6OTw+Ojo+NDQ1NTE5OTo5PDtAPD89PTw4PDs6PDs7Pz5DPkI+QD89Pz9FRUJBQj87Nj9CRUQ9QUE6OlmfmJOSlZqVmpOQlpeclZuZlpSVkZKTnZm2uLaxuru6vsG5uca7trWypb69tLbBv66zvbS4wbGwsbS7xdDCur68xL63vMC/yc/HyMrKwYRwcqbMzMvNysbCwsm+dUdHXlBSWmJWUVJcosK/xcDKycLDw8O5w769ub+8wsbCyc7Hxr66xr26v7m3wLm5vsDCvrW0vLi2u7CvsrK1r7Cvrqyus7CzsrirsbKxqrCrq6yrrLatqKyusqarrKmpoaWgpaakrKSmoaChnqGgnaCMlJeTm5+mmZ6emZOYnZ+gnp2eopuYp62ooqSgoKKqpqmhqKGlm6CgnZ2jn5SYmKKdp6Gfm4J7eod6bW13fGBxY1teX19UST5DRUlCQz5DOz42OTo7Ozs7Ozs7PT05PTU2NjIxODo5Ozs6QTs/PDw+Nzs8Ozw9PTw9Pz5BQUE/P0FCQUVDQkRAPDY+Q0RFPkJEPztTmZuZmJ6dmqCalpyZn5KdlZ2boJWWlJqYur20sLu8wcTCv8XGura5sqO7vbS3xLuwtbq2ucS4tLy3u7mt28K+tr7Avr66ppyqs7fEwKV2dHedxMbLyMHDwL/Jy6ZsS11SUFZmTkpZj8TAwMG/ysfCwMjAusK7urO6usG+wMrOysS9tby8ub+5ubW1s7/Avre0s7S4rbeqr7CwsrGvq6+nr7ausrG5rra2uLSzsLGttrS6sa6srranrLKsraSjoaenqLKrqqWkp6elpaCml5ujn6SmraKeo6KanaWiop+foaWenrC0sKSlnp+kqaevp6mgq6CiopqipJ2anqGmp6+psZWCe32Cem5zeHNocF1bXl1ZUkZEQ01JQUQ9SDs7NTk7Ojw8Ojs7Oz0/Oj01NDUxMjc4ODs8O0I8Pz46OzY6PTo7Pj0/QD87QUFBPj4/QkBBQkJFPjo1OkFCST9AQkA7TJqdnZ6fnZienZmampySoJWbnp+blZGRl8W+urbDvMbCvr/Ixbe1uLe2ubu0r7e3srWzt7m8u7a7u8W0ba/Ovba5wLyqfW5obm10gpiXcHd8mL6/xsC4v7y9xMO8qHRmWFZjcE1bkMDEvL2/v8PCvr7HvLy/tLSutbW8vr/OzcvCt7K4t7e9ubuxtrLIwLu2tLGwt6yzqbCtrbS3r6uuqrG1r7Gvt7O6usC/tre2sru6wLWyrbO3rLC6r7KloqWrrK+5s7KosK+xr6qiqKGkraitrLOun6inpqWmq6Sknqaqo6ayuLOrpZyfp6anrquqpbClpaWbpKOYn6exrLW4sLKOhHl/fHZsdXtwbmlbX19ZU1BBRkhHS0BFQ0g8PTY7OTk8Ozo6Ozo9Pzw9NTU2MTM2OTg8QT5AOz1AOzs5PD04Oj08QD46Oj49Pj09PkBCQkJBRD03NDU9REc9Q0I/PEWUnqCgoJyXmpiYlZmdmZ2fmp2bnJaRj5LDwMK9wrzEvLy7xbu3s7e2tru7s6CWtayvsbS0tLa4ucDNsHWCtL21tcGkhmlZXmBOU1tcb3J2gqC4t8K6s7q3ury+ur2xjW5mdIRvmb/Ewr27vrq6uLXBwrW/urWur62wvcC5z8rJw7GwtbS0vbq+urq7ysO7uravsL2xuK+ys7C3vbaur66wt7CsrLK2vbzEwrq9t7bAv8G3tbC2srGzurGxr6err6u2v7e1qbqztbmxp6uop7ausrG1uaisrK+qr7CqqKessayytr20saykqKuoqKusq6i2qaaonqadmKOuvLG7wbSmiYF8gnpzdnZ3bnFgX2ZdW1RKPT8/R0Y9R0NDOTo1Ozk5Pjw8Ojo8Pj4+Pjg4MzE1Nzg5Pj9BPzs6Pz08Oz09OTs8OTs6Nzs+PT1DQT8/QUJEQkE8ODU4PUNGPUREPzw/iZ2en52Xl5WUk5aZnpubmpuYlJ2Uio6Owb7Dwr6+vrm2usCxtbGzt7fCtbOrrbOoqa61r620trnCyaWEeIyisLWcamZnVVlfSUlNUVRsdYemsLe+ubK1sbu4u7W5wK+fdnmarb3DxcPAvL+5s66yvLquu7Szpquorbq+uMvCv76sq7Cvs7q3ub67wMXBu7y3sLXEtb+0uLu0u8PCs7a2sbisqaWrsr23v7+7u7exvL28trGvq6uprbOvsLCrsLSpuMC2sqm0tbC3tq2spqu7s660uMKwsbG1sbK1saywsri4ubi+tLGzrqyxramvrqqyuK6trainoZ6ptr+4ur+wlol9gHxxdHd0d3JsX2NiXF5PSUI/PUlERk1DQDc3NTs6OT48PDk4PT47PT86ODMyNTc2OD8/Qj86OD4+PTw5PDk7Ozo8Ozs6PEA+QkI9QEE/QkI/PDs3OjxBRD5CQz8+QYqgm6GdlJiVlZKYmpyWm5WalY2bj4SIhru0vb+7vLm3s7y8rLOytLS2wLXAr7Kzqqqxt62pubO3v8anh3t2jaGXX1NDWVVIYmpVTkRJZI6hrK+2urWzsau7uLi0uMG7u4J1m7e8wcbCvrm5ta2lrLOxprCtqJ6gn6WttrXCt7a0pairqLC2s7K6tru7u7W4trC1xLK+vL+8ubrFybq9vraxp6SeoamxrrW5trKxq7S3trGopp6gmaWmpKynq6y2qa+6sa2kpq2lq7GrrKmtuLawsrjBtrGxtbGvu7ayt7W1sry1urKwsbKutLKqrq2nuLWyta2uqqiosrq9wLa0qY6Ce393b3tvdnJuY11nWF1dU09NQT5KQkFKSUA2NjU7Nzg+Ojs4Nz4+PDs/OjkzMjc1NzU8PD48PDg+Pjw8OTk5Ozs7Pjs7OTw+P0E9PEJAPz9CQD47Njc6QERBQ0E/QUKJoJ2loJSWmJiVnqCcl5uYmZGMmYmDhoS1r7S7u7S1sLG2uq6wtLOvtbq1urC1s7KttrqvrbyzuLi/s5CBeYiPbU1KQGVZQlB4gZNnTEJdgrC1s7WytK+su7m4trm/wreNdYSutbq7uLWysa2sn6Smp52jpZ2WmZman6muuayrq5+lqKSrrq+nsKyvsbGtsa6usLmwtLy+uLm4x8W8vLu4qaKcmJufp6assq6zqaapqq6popqXl5GcmpijnqKir6ekrKaompqemqGnp6anqa+2squ0trCqsK+xqbm2sbWxrqy3s7avrquuq7S1ra+rq7GtsbKoraurs7W3ur2wq6GLeoJ5cnZzbXVpbF1balRdXFBOSERGTEJGTkY4NjY1OjU6Pjg7OTc8PTo7PTo5MjM2Nzc3Pjs9Pjo6Pz48PDw6Ojs5Oz47PTk8Pj1CPDtAP0A/QT8+OjU1OkBFQkRBQEJBiJ+ipqGYm56dmqWpmJudmpmUjJmHhoeGrq2uuLmxsqiur7iyq7CwqrK1ubm+tbK4tLm6trm7tbWzuLWVjIiFe1dFQlGIWElKWHiNgWFAVqS5s7SzsLGtsLm4tru3ur6xrKqkrq24rqmqrKujqKGdnZ2Xl6GVkpWXkJifqK6ko6Sgoqeio6mpoaanpaqtp6ynqKesq6yyu7SztLm6trK2ramgmpaWm52fq6yqr6Oko6GpoJuTjo+Qk5KSmZaanaSloJ+ep5iVkpSZnqSjoaWqrK2iqaqppKmtrqW0sa6xraqprq+wraWmqqSos66trKmmpqmrpqqnq7Ksr7Oxq6mWgX+Bd3J4aHRzbmRVYWNXXFFOTEhASFFETUM9ODg3NTo3PD46Ozw4OTw7Ozw7ODI0ODk3ODs7PDs4PD0+Oz08Ojk8Ojs9PTw6OkA9PDw7QD5CQEE/Pjk1ODs8RkFDRD9BQYijpqKjnqCfp6Coqpufm5yZmI6Xi42PjKqpqLGvsK2lp6ayr6mmq6CvsLu1vby4wMG+vLy8ua6sr7K7qZiZlGdMP1R5cU5JSUtonX5YRVizu7Gss6+urK22trK0ta6oop2bm5ucp6een6ipn6GnlpuXl4+dk4+Qlo6Xm6SooKCioqKlpZ2jo6CepaCkrKSmqKSio6OrrLOuqa6urqeqraisoZyamJmYm6moq6ufpqKbo5yVkIyPj5CTkJeVlpifnp6amaaXk4+Slp2ioKWipqSnoKKko6Ghq6uksq2qrKyno6yuraufoaKkpK+srKmmo6KqpKqqpKmrpqmsq6agiHiDfHZ/emN3bG5dUWhUUE5HUE1MQlBRQD47PjQ5OjU7OT07Ojk9OTk8Ozw8OzkzNjk5Njo7Pz06ODs6Pjw6PDs5Oz07PDw9PjxAPT88ODtAQEE/Pz45NDk8N0FDQkQ9QEOOqqSjoqGinaulpqimoZ6dmZ2PmJWTkJWnpKGmqKmlpKChp6uhnKKbp6u1sry9wMLCwL7AuLSnpKyovcGqpb1mRVOhhFBXSUtfSViLYGVmhK+1qrK0rqqrr7Cys62lnJCWko6Xn56hoJyjpJ+eqJSblpeMl5GNkJeTmJ2iqp+fn6Cjpaicn6ChnKKfo6innKehoKSfrKisrKCpq6agpKimrKOdnp6al5qrpqqxo6WonqCclZOQj5GQmJCWlZiXn5icmZukmZeUlpqdoJ2nqKWgo6Kho56doKmqpa6upqipoaKqrqqnoaCio6msq6eppqShqaKlqaalpKKmpKijkn18gHV2fW1re2RoVVJkTUpIR09STkpOSDxFQDwyPzg1OTs+Ozk5Ozg6PDs7Ozk5NDg7ODc7Oz48Ojk8Oj07Ozw9OTw8PD49PUE+QEJAPTc6P0FCQEA/ODU1PDpAQ0BEPkFGlq6koqWeo6KpqKipqqWmnp2imJiZmZWbop6bnqOioKOgoZqgmJeXlqGorK62t7q5ure3u66ooKGpoKzGv8ueTkF1nG5PbUpNY2Z2dGBdYnORsq+us7WqpqyropuZlI2QlZaYl5ufoaGbnaSemqSXl5eWkJKRkZOal5ugpKqeoaGepqeqop+gp5+dn6SnqZ6jpp+qnaqtqq6nqLClo6Smp6ymoaWim5ier6iusqulqqqgm5iYmJWTlpqTlZWalpuXl5ihnpycl5uhmp6ao6eln6GioqOdm6Gmp6aoraOppZ6kp6mkpaWhpaSsrKmmq6eioKSjpKenoaCgpaKmoIl7gH13eHxkeXlgYlNVYEhJSktTVElSUU05P0I2Nzw2NTs6PDw5Ozs4Ojw9Ojs4NjU3OjY5Pj0+PDk5PTk9PTw+PTs7PDo+PTw/Pz9APT03Oj5AQEA/Pzg2NT08PkFCRkBAR6CupKaroaOqrK6tp6ypqKCipp6bm56aoJyalZmfn5uen56WlJOXk5KcnqSorq2sq6uvqq+pnpeepZylx8aLVlJLZqNYZn1vcltRa2NcZ2JgbJG0sLC4rKahnJ2alJeamY+NkJWRi42Nk5minJejmZqXmJmUmZiWnZufpaapoKajnqeurqumorGjmqSmpqqioaqiqaSosquxsqu5qKarp6urqaysp6Cgo7GusrC0qrKuo5mcnZ6hmZubmpiZm5SWm5aZnKWhoJqjoZqcmZ+kop6gn6KmnZulpqWkpaijp6OepqOinqaloqWlqKykpq2noJ2dn56gpaGenqWgppmBe4F8dnZzaIJsZVtTWlpNUUpPT1VMU01CNz5CNzg9NzY6PDw9Ojw5ODo7PDo7OTc2Oj01OTw7QD03ODs3PTs9PT06Ozw4Pj09QD5BPj4+ODg8P0BAPT43NTg9Pj1BQEZAQUihqqCrq6GkqquwramtqaelpaWkoKGfnqWXl5SYmZ6YnJ2blo+VmZKRnJihnaqip6Cep6Gln5ySm6Kan6qji3hUanF3dm9kd3ZYV2JgZGlbW1Znra6sr6efnqKglpCTm6CbmJeRkp+coaObnpuWn5qfl5uinqWhnqSfpKitraisqKSstLe2sKe0rKKtraOvpaSmoamorrWzsr23vrCssa6tqaq0sbCoq6iytbezuK2ytKSgnaWfrKGhoqCgmpiWlp+bm5ikoaCeo6GgnpqcpaCfnZyhqJ+fp6meoaOkoKagnqehn5ymo5+ipaOooKmrpZ+dnZudmqainpyjnqeQgYJ/fHh1and1XW1aUWBIUlVIRlVWSkNNRz1LSDhGPDc3Oz49PDo8OTg6Ojs6PDk2Njo8Nzs+PT8+OTc9OT47PEA8OkA6OkA/O0A+QUA9PDk3Oj5APzo+NzU4PT0/QUBEQEJGnKueqamipamprqimqqWmp6aoqqGlpKOmkpOVmJacmpqcmpWTmZuNk5+ZqJ2un6eenKGdnpqZkpiem6GhoKN+boJwYGNXTFtSWkxMUVlSSE9NR5qsqqmkn5+ZkpGTmJiWlZWMiIqOlZ2cnZ2elp6apqCgqKWxqqeuo6uutrC0srGutri9wLqttbSwt7CutKmmpKWsqbmztbvDvMPBtrq2q6+xube8r7OwtcG8t72zs7WirKKpqLKpq6inqJqZnpqqp6CZp6Cfn6enpaSfnaqiop6bn6igpKetmZ+jnp6nnqCmnpycoqGbo6KhnZympaWkn6KZnJukn6CboJyjiYWEfnZybWl2bWhtXFhcQ1dOSkdNR0NGTTw+TD40PDk2Oj0/PDs6Ojg4PDk6Ozs8NTQ6PDg5Pj4/Pjg4Pzk8Oz0/Oz1BPTo/PjxAPj8+Pz08Njs/QT07Pzg1ODw8QERCREFCQ5WqoKapo6mqqKmjoamgpqinrK6lqaWpqpSSl5mUmpqanJiYmZyamJmqoLGit6Swpp+enZ2XmJWZnpqco56biGFXXmVgV01RRj0/QENEPz5CUXepramqpZ+enqKjnZ6dmpyblJOUlJ2dmJSFnZqhm6ukq7KwubKysbKxur28vLm2uMO+v8K/trq7wMS5vbusr6exrbHCtrjCxsDIysDKv7C5ub25wr64s7vGxL3DvLezqrOtqrO1r7Ouqq+jnauntrKtorCmoKOvsa6wpKWvo6GgmqGnoaSqqpmdoJmao6CmqKGcnqKemaSenpiYo6OhpZ6mmZuipJ6fm5ubnIeGgXt0cmtrdHJxaFZcUUZUSURKUEk/RUE0Rkg5NTw+Nzs8Pjw8Ojo4OTw4OTs4Ojo4Ozw3Oz49Pj02OEA5Ozs9QDw9QDk3PD07Pj0+PUI+Pjc6QUA+PD45NTg9Oz1DQEFDQkGRqqGlqqelqqimn6KnnKasp7Gyq62jqayVkpWalJecoqGbnqCinJ+psqu7sr+rr6ylnqCgnJyYmp+gmqCflXxfXmVgUEZFO0I+Rjw+OTZOfqqzp6OjoaCepaulnpeclJGZnZiUjIqGiIZ4bYigpKKrrLS8tsO+vrO7wcPCxcC/wsbGxcPIwsDFx83QyMvDsre1vrK+xbu+zM3FzMzM0se+v8DCvsfGwrfEysnDwca+urW6u7W7t7C1sqq6sq67t7+7uqu4rauquLq1vK6uuaOmo56mpaKjqaaZm5+Ymp2nqqegoaGkmJSjlpSZkZydn6Sep5+en6KdmJmUmJSIhH16cWtjaG94a2VaW0ZLTEVEU01EQkU3Oj87NTQ5OTc5Pj87PDs7OD48Njo9OTw9OTw9Ojs9Pj4+NztBOj45PT45PT44Nzs6Ojs/Pz1CPj83OkFAPTw9ODY2PDo8QT9BQUE+kqugp66ooqulpKKipaGlqquwsq2upKmmlJWWmpaUm6SmnaGqp6KrrLy8v8PBsrK4p6Ghq6qhnJ6hoZ2bmn1yaWFXTkU+SVp8b2FBPVyOrqygmZubnp6Zl5eXkoyOlpeTjo2Qi4KDgndycW1wj6atrrS5xbvNx8u/wszNzczHydHMzczHycXFzNDS1c7Tyb3Av8O7xsXIxdHTzdPQ09PMysLFxsbKyM6/yNHMx8XHxcK8w8G/v7+2vrOuv8DDw8fEx8Suv7iyuLzEwsK6vLy1rqenraigoqmlmpagmpmdqKupo6SknpePm4yQmYmVmJugn6OdnZeempOTi5WPhYB5dHNlYmdyb2ZeWllDTkxERVBJRENANTU1ODlCPTY4OkE+Ozs+PDk+PTc6PTk6PDg8PDw7Pz8+PD0+Qzw7OkA9Ojs6Ojg4ODk7QT48QD8+ODtBQTs7Pjc4Njo8PkI+Q0FAPpOvn6ivpqiro6KloKampKuoq62qrqKqo5Kcl5ebmJuirJ2frqalsarFxszOzb+wwaikqKytqqCdo56cnZVpZlxUSURAP0qHnqSYg6CyraOenJ+al5aUkpSWkZCPjIeDg4iHg4CBgYB5cXJvbHmktrq5vsvB09LTyM3O0dPR0tHQ0dHNzs7Qxc7U1djS183Gx8nMw8XKz8rT19LX0tXW09TIzMbMzcnSzc7TzcXIysrBx8zHycjGv8Ozs8jEy8vLz8fKv76/vcHHxc3MyMnAw7+tr7OonqKqo5qTnpyYnqaprKSlppaXipWFkZSHkpKSmZualpiQm5WQjIaRi4B6cnV2Z2NndmlkVldRRE1GQElRQj1CPDoyMkE8RTw3OTxCPTs9Pzs7Pj05Oj48Oz44Ojk5Oj86Pj1APkA8Pjs+Ozk9PTw5Njo6Pj08PEE/Pjk6QEE6OT44Ojo6Oz4+PEE/QT6QrKKiqaanqKSfop2qqKOso6OnpqyiqZ+To5iWn56dpK6bn7CrqKyxyc3U18/Gu8esrbO3rK6jnqOinaGbYVNMSkRDP0NUsdG9sq+mnJycoKShnZqUk5WUiX13cGtlYmhxb3F7hYqAdXBucXRwhbPDvsXR0NfW1tLWztTW19TT0dPU1NPP0sPQ09bY1dbSy8nO0cvGzdLK0tXW2dbX09fYztLKz9HMz9DM09C/yMfKxMzMzM7PxcbHtr/Kv9LNzNDGycjAxMPIzs3Q0c/NysjNuLe7qJ+lq6efmJ6jnp2qpa2pqKiSlYiQhIyRho2MiJOVmZCWjJiSj4aHjIR8eHN2cGNgZHJiXVJcSUpHQUVJSj47QTg9NTU4Njs4NTo8QD07Pjw7OUA7OTo8Ozs8Nz09Ozo+Oz08Pjw/Ojo8Ozs5Oz89OTU7PD48PD0/Pz46O0BCOzk/OTg7PT0+PzxBQEQ8hqugnKegp6Oim6CbqaSlqaCfoaGmn6ifmKSimqmmoqarmqOwsamotdDU19rSx8bLtLXBxbG1qKGkpaCioFlJQEFEQUZRd7Kvp5qUl5+cmqCgnpucmZWJd2ljYF9fYF9eX19dYmx1dHBwb2xycXWSxMjG1NbX19fT1tDV1NrU1M7P1dTU0dHM0M3T19bT1dDP0tPRydPRyNDX19jR19LY2dTWzM/Pys3Sy87QwMbCyMbOztHR0sjLzcDKzMbTz8zOyMXKx8fIzMrU1NHVz9LM08K5xbGlqLWup5uorKWdsqiws6ysk4+TjoiKj4OPi4SQjpmNk4+Zj4+ChYx8enFzdG1hY2ltX1ZQX0pKQ0ZDUk0/PD40Mzo9NTI4NTU8PEA8Ozw6OTpAOjg7Oj46PTg+Ojo8QD08OTs9Pzk6Pz07PTw9PTo2PD0/QD08PT0+OjxAQjs5PDc0Oj48Pz89RkFEPYKknKClnaWlo5mcnaSeo6OfnZ+doJqnnpyhqZ+vraqqq52lrreoq7fX1NXZ2dHO0L+8zMm2vq6mqqiho6plQzg9PkRYgqqon5eVl5manJ+dmJyckn1wZWNiX19hX15hYF9gYF9gZm1wcG5rb3J3d5zMwdLV09jY1tnR0tLXz9POy9LN1dTRys/M09bS0dbNz9XV0cXR1MrQ1NXWztLQ2NjX18vIzsTJz8zKzMDJwMjKzc7Qy9DNzszOz8jL0NDLzsrCycfJzMvM0tPN09HR0NDKvci5sK67ubWrtrCtqLits767sZqPoJSRjo2IjpCFkY2ZjJGRlY6RgIWIenZvcG9rYWRucGFXXFpJRkZETVhFO0A9MzM8PDg3ODY1Oz5APTk8PDg8Pjk8QDtAOj04Pjk4Oj88PTg7PkI6Oj08OkE9PTw6Nj08P0A9PDs9Pjg7QEE9Ojw4ODs+PD4+OkVCRT6Bn5mlp6Cfo6eam5+cl56eoZqdmpyappufpKefuLa1taylrK6+tLDA2NLX2tzWzs3Kw9LPwcCwqaytqaSxeUhGQjtXjqGblZOWm56enpyTlpeUiGteXl5hZGJgYGBhYGBhXl9fXlxibXJvb3N0dnZ5pL/M1dHW1NPY1s7O08vOzsXOytLSz8fOzc3UzM7TzcvX1tDM0dTLzNDS08rO0dXS1dXKwMrCxczCyMnDzMPFyMrLz8rNzdDO08zGyc/NyMfLxcbBxsrMzdDRxtDOzs3M0MXHwbi5vcPCvcO5srK+sbvDw7WqmKWhmJaSlZWSi5SNmpGUlI+PlYKJhnlxcmttZ2BgcGhZWGhWTUdMSVBRQjtDPjs2ODo4Ojo1Nz09QTs6PD05PD05PT06Pjo8ODs9OTtAPD47Pj5BPDk9Pj1CPTs3NzU/PDw/PDw7PDw4O0FAPDo8OTs7Ozw9QTpFQUU+hJ6bqK2epKSqnJ6fmJKXm5+am56ZmaKVoamppcTCwb+7tbKxx8K4y9XV2drb2MzMz8jW1cTCta+0qJ+tl3hscHJ7kZqNjJeVkJORkZWWlZCLfGVhYmJgXV5hY2JgX19gYWFgX11bXWdycXFyc3Btcnmlx9PPy9DQ09TKxcnJxsa/w8XPzsfFx83K0sjLzs7G0dLQzczUysfLzs/Hx8/Sy9DPxrrEv8bJvcLHyc7EwsfAx83IxMzKzM/IxMTQyMbCxsjEv8HHzMzMz8LKy8nHy9DExce7x8PJycLPwb28v7DByca5vaqwsqelnaKcmJCbkKOZl5mRlZiJj4J3b3Rka2BeZnBhW1dgR0hIR0lNVEc/Sj02NDM1NT09NDg9PT06Oz08OTo7OT89OTw7PDg6PDo6QD1APD09Pjw6Qz48Pz04ODk6QD4/Pjw7Ozs7ODo+Pzw7Ojc5PD49Oz49RkFDPYOgm6qupa6qq5qdoJeUjpedmpmgmpqcm6WysazJzcrIxL69uc3MxtDV1dna29jQyc/P0dPIwra7u62jtn1og4Wkq5SOjZaPhYODg4F9hIR+c19bXl5eYF5gY2RjX1xdXl9gYF9bWlxha3Jyb29rbG9vfbnRyMnKz8vNxLrAw7u7urq+ycbCw8DDyMrJyMrIwcXMxsjLzcnEwsrJwcHL0MXLyL+5wbvGx76/xs/Lw7/Du8nHybvIx8XKwL7Cy8bFxL7GvbzAw8XMxcW8wMnDxcfSxcHJv8rJxsjG0MPDxsOvxMvHw8q3v7y6tKmspKWYn5iso6Gmm6Ogm5V7d3J0ZmlaYW5tWlxYUkRMRkJHRExERlNANTQzMzQ/PDM6PDw7OTw8PDg7PTtBPTo8Ojs3Oz05Oz07PTs6OD4+PEI+Oz88OTk7Pz07QD48Ozk5OTk6Oz06PDo2OTw+PDs+O0NCRD5/pZypsqm0rrCdnp6YnImUm5man6Kfmp2ov7i8ys/RzMfCw8bNzs7M1c/V2djZz8vSzc3OyMG1w76xr7ZsXnl9opGLkpaGeoCFhX92eHVycF9aW11gYGJjZGRlZGBbXF1dX15gW1laXGJvcm9raWxwb3OPx73KxcvAxsKwtrqysrOyscK8vLy6uMHBwcS+vbm9v7nEysXGwr3GwLi7w8m/wcm7t7u7xsO/vMHNw8a+vrXBvcO7vca7w7qzvMXEwsO3v7W2vr+7zMO8tbrIur++y8PBxsLFycfJxtDGwszHssfJw87MwcXDv72yt7Cyp6ioubClrbCqrayUenZ3amRnYGhvY1ZeWUpGSkVHS0FFQkZKQDk6NjQ3ODU0Ozo7PDk8PDs5Ozk6QD46Ojw6Nzo7Nzo7Oz88OjxAPUA/PT8/Oz07O0A8Pj4+Ojk5ODk3ODo8PDw7OTo8Pjs7PjpAQEU+fqygrLWqt7SyoZ6fl5qNlJaan52mop2et8XCxMjO0srKysfNzc7RyNDG1dTW183KzsXJxcfBucW9q62lX2R1hJOLiIuEeH+Ghn9+hHt0dGNcXF1eYGBiY2FhZGViXVxbXF5cXl1aW1xeaHNxbWdnbm9yeZ29zMDDusC4rbCxp6qtrKe4tLa0s7O0u7W+sbawta+yvMK8wcS8wLu1srq+wLjHubS7tsHCvbe8xsHDvLWusrW6v7TEt7u1q7i9vsC9sbq2sLa6s8W8tq67v7W3tMW8vsLFwMPFxsfLxcDFxrvHy8DPycfDxsHDt8O9vba5vse/rLW7tbe2jnl0eGdnZWJrbl5WXmBGS0hISkZCREFFRT88OjU2NTYzMzs6Oz06Ozs6Oz44PEE9PDo7ODc5OTk7PDo+Ozk+Pz1APz5CQD1AOjo+Oz89PTk6Ojo4NTY7PT48PDo7OT49OT86PEBAPIi3pauzsby8sa2foJmUlJiXnqujr6qnpMbLzcjFyM3M0MzNyMrIysnKxNDN0s/NxcfBxsC/urfJtqqwmFtob4qPhYiJenh+hoZ3d4F8c2hdXV1dX2BfYGRhXmNlY19fXFteXF1eWltbXV9scG5oZmtubnJ8pMfAuLi1sKutp56iqaeeqqyzraqsqbSut7Gzqa6mrLO8urbDubq6sau1ubuzwrqwwLG+vLy2vMe5wretqqiwssC2uL2wsaixs7W7vKuutaautq+7srCqubCtu667uLvAwL65w7/Gw8XBvMbCyMq4xcfFv8fDw7rExsK7xsnMy7O5wr27s4lzdnZraWFibGhZV1dbQUxLTUpFQUM/RkE6OTo5OTU3NTQ6Ojk7PD07Ojs+ODtAPD05Ojc5Pjk7PDo4Ozs6Pj45QT0/QD87Pjo7PDo9PDw4OTg5NzY4PDw9Ozw6Ojs+PTs/Ozs+QDyKwKuouLe5w62zqZ2ZlJaZoZymsLWxt6bFztLLw8XBxc/HzcHDxr/ExMPDysLJyr/AvMK6s7S1w66psJFban+Sh46Pe3h9iYV6e4SAd25eXVxcXV9gX19kY2JkY2JgX11aW1paXVpaWVpcZW5vaGZnaWtucoGturC1rqWkp6eaoKSgmpylq62kqKKrqqyrsKOmn6qttbaxvbmvt7Corri0tLy4tLyvuLm1srzAssCvpaijq7Gys6i9qquoq6yttLOmqK6hpK+psqanqK6lqLetsbK3urq7sry+vr7Ev7XCwcfIt76/xbfEw7+7v8TCvsTIzMq/v8PAwKmHc3RyamldYW9jV1ZYUEhZUlNLRkZFPj5AOjc4OTc3NjQzNzo5OTo8Ozs8PDc7PTs7Ozw4OT44PTs8Njo9Oz89N0E+P0A/Ojw8Oj05Ojs6Nzc3ODg3OTw7PDs5Ozo8OTc5Pjw+P0E7jMKvrry3ucSwtrCbmZWcmKqpsLGztb2vxdDPzMPIurrLwcu+u8m2vcO+usq3wcPBtLa8trGvtbutqKuSZG2Ig4eLgHp9f354dH58c3dlX11cXF5fYF5fY2NhYmBhX15dXFpYWVtbWVhaXF9ma2ZkZ2Voam9yhaqlrKWenKGklJ2km5eRoaOpo6Ofpaanpq2gnZykpqyysLa3p7GtqKq1q7S5sba2rra5srC6urG2paCkn6axp6uouaqkp6eop7KtoKemn5ukpqyen6ejoKGxra2ssrSztLC1vba7wcCyur7DwbG5ucKzwb7Atbi8vb68wsfEw8S/wMSgg3hwbGJmX2tvYFVZXkhOZ09UR0ZLRjw9Pz06Ozs4MjU1MzY5OTk7OTo6PDo3PD88PDs8ODg8OTw6Ozc4Ojo8OTg+Oj89OTg8Ojs9Ojc3NzY3ODg2NjY7Ojo7OTo7PDg1OTw6Pj5AO43ItbW9uLrAur22oJ6UnaGmurars7O7s8TPycvCxri2x8DMv7jJt7vFuLPEuLO/wKy1vLKspa+zraGjkmlyhoWGgHx4dXNvbWpqaXBpXmBdXFxcXl9fYWNiYGBgYF1cW1xcWFlYWFhWWFteX2RjYmVnZ2drbW+HnamflZWaoZabopiVjZ6hoqecoJ+kpaKnnpujm6CrsK2xtaSpqqqsrKS0uK23sKyzta6zta6wqp+en6OisqSmqbitoqamoKisq5mgn56ZnZ+lmpmjnJuesKmrp6urrK2wsrivuLm6sLa8u7qrs7K5s760trKxtrW/tr7AvcPCu7q9l4R6c2tfZV5kZFhUV11JV1xLUEdKSkdBPD8/QDs/PDA0NTM1Ojs5Ozg5OTw8Nz4/Oz07Ozg4PDg5ODw3ODo7Ozo7Pzo9Ozc4PDo9PDc0Nzc2NzU3NDY2Ozc5Ojs6ODo5ODo7OTo8PzuJyba4vru3wcHBtKSkmZqkpsCyr7astLfGz8jIwMa7u8PDz766x7i4v7eywrSxu7yrubqxop6pq6eYnpBtfoWGf3hybW9ta2JeYWZmXV1eXV1dXF1fYGFiY2NiYV9cW1taWllYWFdXV1hYWFpeYmRkZWZmaGlrcYyonJOUlJqXmqGWlpCboqGonpydpaeipZygoZuZr66ur7KhpaOuq6eitbCysqyor7OnurOmtqCinpyjoa2joqq2q6Ojpp6lpqOWmZ2XmZudoJqXnZydnK2iq6eko6atq7KzqrWwsquyubSvqq+ysrO4s66prK6yuLC6trq9wLizsZSFenVmXmVeW1lWU1pVS1tRS0lFSEtJQj0/QUFAQToyNDUyNDk5ODk7OTo9PDY9Pzs8Pjs3Ozs3Nzc+Njo+Ozo4Oj07PD06Ozw6PTs4Nzk3NDY1NTQ2Nzg1Ojo4Ojk5PDg3Ojg5PkA6gci9t72/tr68v7KdpaOYpbHCtba9rbS4wszIxr/FtsHAxs63wMS9s7m5s7+2sbm7rLK0r5+apKqglJqPeH+DhH94b3F0cWhlY2hkY1xcW1tdXVxbXmBhXl9fYF5cW1pcWllYVldXVlhXWFdWV2FkZWNkZWRkaGp2oZuTk4+Ulpafl5mUl6CeoZyWoKGppJ+fqZ2bm6unr7Crm6OkuKqhoK6otqqnp62xpLiwpLegopuZmaqmoZqsua+ioaScop+gk5ShlJaWm5iXlpeclZ+qnqmkop2jqqqwrai0q6qnrbOwpauus7GwsK6vp6iosq2xtLC8tLq4rqOUgXp2ZF5hVllYU1JTS01eTE9LR0dMTEU9QT48Qjw7NzY1MzQ5ODg5OTo5Pjo4Pj47PTw8Nz49Njc2PTc7PTs5Nzk7Ozw+OTk6Ozo4Njc2NTQ1MzEwNDU2Nzk6ODo5Ojo3Ojs5OT1AOnbAvLS5wrG+uLyunaenoqq7wL3Aua60uMHMx8XCw73FuMjLssHCwa28u7W7vLW5ubCvsKqcmaGplJGKi4CAfHdxaWxydHBoaGVkZmJcXFpZWlxcXF1eXVxbXF5cW1xZW1taWFZXV1ZXWFdXV1ZbYmNiYmNiY2RmaYGVkpSLkZOUmpiclZacoJyflqCfp6akpqefnaCmoKqvpp+io7eooaGiqLOipailsKWwrqy0nqGdlZWpoaKUrbGxn6OjnZ6Ym5OLoZSRk5iYk5eXmZeep5ynoaKapKWlq6SlsKelo6urraaprq+vq6iqqrOmpqyvtLGuvLWxr6+gknp3cmVhXFpdWE5MUUdRYU1WUE9KTU9FQkQ/OT02OTo3NjQ1OTk7OTg4Nzs4OT0+Oz47PDY5Ojc7Njs3Ozs6ODU6Ozo7OzY8Ozg4NDc3NjMzMjEuLzI1NTY7Ojg7Nzg3Njw7Ojs7QTh4u7uxtb2wu7G3rJ6lpqy4u7zBxbqxubXEycnAw8bFx7bFxLLCv8Wrt7e9tr26urWyq62omZifo4uJdImIfnZuY2FmaWhmZ2lmam1gXVxbWlpaWlxdXFtcXl9cWllbWVlaW1dVWFdUVFZVUlRSVWBgX2BhX2FhY2VpgJKSiJCOk5KTnJSVlqOZoJedoKWiraalpaOko52qq6Wan6WxqqChnqWqnqiinq2sqamuraKiopWXopuckKupsJyfop+el5mTip6RjZKTlpCYmJOcoaOdpKGilaChpKWbo6uloqSqo6uupa6yqaalpqa0pqmorbO1tLm6sKqsnoxycG9gW1dWVVJGUU5IWVtPUklUS1NMRUZJRDg7Oz08ODY2Nzo5Ozo5NzY5Nzc6Ozo9PDw2Ozw4PjU5ODo4ODY1OTo7PDk3Pzw5Njc4NDUyMTIxLi4xNDI2Ojg2OTg1OTg5ODk7OUA5e7W0rbS7srCrsq2dqKevubmzwMi6tcCvxcjMusHKzMi1ybyxvsPIrLG4wbW8wLu0tKqsppWam5yIgXKIg3t0aWlqbGdqa21ramxlXVxcW1tcWlhaXVtbXmBgXFhYWllYV1hXVFZWVVRVVVJSTlFZXVxdXV5fX19iZG2NjoOQho+QjpmTlJKcmqOcm6GpqauorKeppqSZpa+llZmlr6mgnJmboJ6vmZyrs6Clpp+jpKGUk5uWlpKpqq2anJ+hoJuUkIyZjoyRjJKNlpWQnqKgo52bo5WboKOhl6Goo6Ooq6CrsKStt6ajpKKsraqoq6+zt7O+tbOrr5iFdHNoW1hZU1VSRVhMUVtYTVROUExQUUlOSUI9Pz9BPz03NTc5OTw8OTc3Ojc5Ojs8PT47Nzs7Oj02Nzo7ODk3Njk4OTo2Oj05OTU3NzU3MTE0MS0rLzQzNDk4ODo6ODo6NzQ4PTg/OX6zraeztq6oqK+um6morLe2rLzKu7a/rMvGxbjBzs/Is8S6t7vCyLCtuL+3vL27s7WlqaCWl5iXh3p0gHZ3bm1obW1tcGdnaWZkXVpbW1tbXFtZWltcXF5fX1xYWFlYV1hXVlVUU1VWVVVTU05QUVlaWlpdXVxeX2BkfYuAin6Kj4mSjZeRl5mioJugq6qmr6yosKWpmp+toJWWpKmnnZiQj5qerpeYqKqZn52UpaGekpGSkZOVp6qlmpmZnp6WjYyLk4aIjYOPi5KVkaCeoaSYlZ+VmqGinpSbpaWoqKigsbCmsb2on6OstKqup7C1sLm1wLGusaqRfnJzYlZUVU5SSkdWUFJRTExXTUpMTlJHTUtBQ0ZEQz5BNzU4ODk7OTo3Ojo3PD06O0A+Ojk7OTo/NzU5Ojk4NzY5NTg3Nzk7ODU1NzY2NjEzMjAtKi4xMDI4Nzc7OTk7ODk0ODs4QDh/s6ylsbeqpaKxq52qp6mysaS2xrS5urPKxbm6wcvQyrG2t7y9wcOxr7G3rbS0u7O0oqOcnZeXlIOAdmtnbG5xbnFqcGtkZWdlXlpZWllaWlpaWlpaXFxdXFpYWFhZWVdYV1VVVFJTVVNWVVJOTk5SV1hZWVlZXFxdYWp/eX90iIyGkImXiZSTmJuYnqmboKumpqyeqJqgppyTj5+jmpeXhYSSm6OQlaOdlpaWiKKbm5OLjoqQmqSnnJWVl5uRkoeUjouBi46AkIuSkpKgmqCilpSYmJWippmNmaSmqKahoLSyp7K3oZyitqypraSysqa1vLWrq7GjiXlzbl1OUVFMT0NNTk5QS0ZOTkpKTU5RSE1KQUdLSEhDPjg1ODg4OTo7Njk6Njg7OTk+PDg6Pjk7Pzg3ODk6ODg2ODU3Njg4OTc0NTc3ODIwMzAxKyktLzEyODc2Ojk5OTk4NDk4OEE3d7ampLawpaekqqWgqKals6qissO1tbKzxsa2usPKzMazrLm9tLfAr62psJ6mrrqvrp+Zmp2VlId7g25fX2ZycHVxaW5pZWdoal9YWFhYWFlZWVpaWVtbXFxZWFhXWVlYVVZSU1JQUVRRU1VRTU1LTFNXV1ZYWFhYW11hbnF1b4OHgYiAkYSOipSRk56hj5uco6KkmaWXopyVjYeZmoxzjYN+jpeWhpGakJSOjnuZj52Mgol/ipifo56Qk5iWhY2ClH5+c4mOepCHk5CQnJuampGWkJ2Oo6OOiZqgoaOkm6K0r6yvrZ+YpbimprGhsK6csLyqqa+qmYN3c2NWTVJPUE5DU05MUExCUFFISU1STUhKSkRKTEZKSz03NDk4ODg7OzY5Ozc6PDk6Ojs3OT85PkA3OTo8ODk3NjQ0NDU4NzQzMTI1ODUvMDEwMikoLC0wMjc2NDc4OTo6NjU6ODdBN3i3oaO0qaalqKOmpaamprOnpbTBuLC0sMnEt7nBzsa9s6y6waytw62noaaSnaa2rKOgj5WWko9+eH5mV1ZfZ2ZpZ2huY2poZ2JcWFdYWFhZWVlZWVlaW1tbWVlZVldXV1NUUE5QTk9PUFNUUk1NSkhOU1NTVFVVVllbXWlqcWt+hHtzTlhyj4KXho2cl4uUkZ+YnZWUlpWPlomAlIlfO1ZvfIyUiYCMkoyQhoZzioWXgXmBe4aTnZODlY6RkIOGfZN4cXCFjH2JgZGNj5eamJOLkImdiJ+Yh4iWnpqhoJenrqmtqKiel62zoqatmayrmKi0oqmto5N+dG5fW05TUldMRFRKUExMRk5PSUVMUU1LT0pJTFBGSUk9NzU5OTk5OTo3Ojs6Pj44Oj09Nzo/OD4/NTg5Ozc5Njc1MzMzNzYwLi0vMzQ0MTEwLy8oKSsrLTM4NTQ3Nzk8Ojc5Ozg2QTl5t6CjrqGmpqqgp6mno6mwqKe0wrmwtbDHwrezvc+/ua+utcKnqsWpo52Yg5ScsaKamIaUj4uHfXN1XVBMUVVZWlddXmJnY19ZV1dXWFhYWVpZWFlYWVpaWllYWFZXV1VTUk5MS0hHYlxNT1JNS0hGSE5RUU1QUlRWWFpgbG5oeoF0T0I/f5WSkX2IlI2Eio2bjpaViZKIhpWGeYl/YEpRbniLkoR9hI2KhX9/bn5/lHh1dniEjZlvUY2IioZ7fniUdmd3hoh+iomWi46RkpaMg4mIlYSbjYKEkpqWnp2UpKOoqaWknpuwqqGkpJGmqpaiqpyipqiJdW1mXltIUVFTTUlVTVNJTEtPSUhGSk5MTVRLUVBPRklDPDc2OTo4Ojs7ODo7OD4/OTk+PTg7PDY7OzQ3ODs2Nzc1MzQ0Njk2LzMvLjEyNTIyMS8sJykrKiw0ODMzOTc5Ojk5Ojo6Oj85d7aco6edn6Gvoaeopaeor62qtby2t7ezwbu2qLrIuLaoqLW2qrK9pp6VjX+Jk6iWlYp+joOCfXhwblhNS01NTkxNUVdbXFpYWlVVVlZWV1lZWFhZWFhZWVlaWFhWVldVU1BNSkVAQJtrc3NJTUtERERJTk9oWU5RU1RVWm6Dc3V+aWhcVI+JlIl0f4aBfIWMk4KSmouPe4aPgHaAeHNvdnB0jo6Ben6Kq4R5e2h2e45wcm14gYuNknh6gHuAdnNykndodYSEhIV7lYqIio2KgH+Ei42AlIR8gI+YlJyWkZ+dqZ6foJ2gqaWenZiMp6SSoKCWnp+kgHJoYV1dSldQUkhLWFJPSkxNUkpKSkxQSExRTFJUTUVIQTw3ODs5OT49Ojs8OThAPzo6Pj03PT03OTkzNzc4NTY3NTI1MTQ3Mi8yLiwvLzIwMC8tKygoKS4xMjcyMTk4Nzo4Nzc1Ojw7N3aumaOhmJyftKmvqaWtrLCxqr20sru4trq0sZ+3urKqnZ2sqaiysKGakY2UgY6cjpF/doZ4fHZvb2lYS0hJSEdFSEhQVFRUV1dTVFVVVVZXV1dYWFhYWFhYWVlXV1VWVVNQS0Y+OTNOPH6eTUhKREA9QURqlH5MT1FRU1ZedIJ7eGZ2jZaYjY59Z3mBdniAiZB9hJiSgXGHj3x3e29rfq19dJCLf3uGkoF8f3VmdnyFbG9nc3yJjIeAbHlxfXFtdo9xaHGBfo5wQ4uEgoOFf3d3eoyGfYx7dX2Oko+Yi5Kam6OWmZ2anZ6hnJaNiqSbjp6XjpaYkHdvbWZiWlhYVVFKU1VUT1BOUFZLTktOT0pRT0hOUExGRDw7Nzk7Ojo/PTk8Ojk5Pz87ODw9Nzw5OTk5MjY2ODU2NjMzNjExMjI0LiwsLS4uLTAtKyonJyouMTM2Mi84NzY5NjY1Mjc5OTV5ppegnpagpq+srquoqbGvsau8uKy7vrizrKebsKesm4+WnKWppKCXmY+FknmIjouKdXF7bXVwam1qWEtGR0VBQENESExMTVFSUFFTVFRUVVZWV1dYV1hZWVlZWVlWVlRTUUtENzhmNzA/qGlOSEM9OzpEioV6WkpOT1FUWF1lcHJsiKeqwH50eWJ7eG98eYmQen2Lhm9tjJJ5dHlqaoCCcZaRi4F+loBJkphuaHh+gm1pZGx5hZCShmtzbHxucnyGaW5wf3OMiYSGe31+e3ZvdHSFgnmBeXB8joyKk4OWl5iakJKWl5mXnZaMg4mekYuSjYaQloBuaW9vb1hWWFRSUVlPUlRUUlhVTE5ITUpNTktDSE1HRUA6ODk7OTk6Pjw5PDs6Oj0+Ojg6PDk/ODY4NzI3NTY1NTQxNDMyLzAyNCorKiotListKigqKCcsLTEyNTAsNTU2NzQ4NUhBODk1d5mRm5man6WtsKOtqqi1r66stL+rvMO/paKZlaSXno2Ei5ShoZmYkZOLc456gIaMhnRvdGtwbGRsallOREZDQDw+PkFGRkdLS0tNUFJSUlRUVFRWVldXWFlaWVlaV1ZUU1BMRTFAmjMganNDmW87PDk1PICChl9JTU9PUldaUVlcX6eIYpppc3llfnBtf3qLiXaCiIZ0bJqSdHN8amqdj015hZOJhI5nMXaGc2x+foN0ZmV1f4SEhYBmaWx1a3F/fGhxcXxuko2PfHN9fHFwbnVtgn53eXVqeYiCiImDlpKSkIuNkZSUjpeNgHmIl4iGioaAkIh3a2tvaGVYUVpXWVlbTVBVVllYTkhIRUpKSEdCQEdEQ0c9OTk4Ozk6OTw6OTs6OjpAPDk6PDk4Pjc4NzcxNTIzNDUzMzY0NTAzMS4qKispLCwrKykoKycpLCwyMjYsLDQ3NzU0NzhpTzg7NW6SiJqRmZajqK6esp6nuq+rsrDCsbvDx5qWj5SZi46GeYSQmJSNkIyPhnGHgnSHjIZ5cHJwb29kcGZfVEZJQz88Ozk6P0BBRENFR0lMT1FRUVFSU1RVVlZYWlpZWFZVVFNQS0U4MC9cYLNHOVhQOzk0NDGWuotITE1PT1FWTEFJUUlir7OgcXt4bH1scYOChYF6hIaGeXKhlXR4gHN1lIc1cZ2onY6hoYSihHZxhnyHfHSMrY6JgGdnYmpucm1wg3VpcFh1cI6bkndsf3p9bXJucIB7c3ZuYnaDf4aAhZCQioqJkYuRjIuOg3V4io6AfoOAfY97cnBwbGBbXV5cWVhgX1JOW1pYV0xISUZKRz5CQUJIP0NEPTs5Nz07Ojs7OTo5OTs6Pzw4OD06ODs2NjY1MTEyMTI1MzQ3NDUzMS4vLCwrKSopKSoqKikoKikrLzNETTIxNjY2NDM8dlI3PTdikoGSiJaRnaSnnq+VpbSprrGuwbK7wcaWkIyUj4CIfW6BkJKJg4qHj4Z1goRslYiIe3R4eGx3bndjaV5KUEc+QDc0NDk7Ozs9PkBCRUhMTExMTlBRUlRVVldYWVhWVVRTUExFPDUqnUtbQC1nSTk0Lz+Sg6muX0dMTU5QTDdDTVJTREqGdoB8fHZ+bHeIiHx+hYN/jH51opl5foaBhZmEmpxhhqqfnYuDkI16d4h+iYiOc4qXj4N6XWRydHp8d4ptaGpieW+GkIJ6boF3dIR6cHR5eGtuaV12h3yHfIeHjn+KkpeDjYWMhn1xhH+DfXV3e3yJd3BzdGZnYFtbXlRcZl5XUFRYW1VHSktES0c/RkBEQz5BQT07OTc8Ozs9PDo6OTk7Oz0+Nzk+OTk4NTY1MzI0NDAwNDY0NTU1NC0sKSsoJycnJigoKSkoKCsrKy8wMFVxPTIzMzMxRX5XND05XIx4ioCUjJGdnZ+mkaCqoLGor8CxusW6lo6RlId6hXZrf4yRgn2KhI+MeIOAc6CEinx8gX9wgH56Z3ZrUldMQEUyMTEzNjc2ODg6PD5BRUdGR0pLTU9RUVNUVVdWVlZUU1BNRkA6Mj0gI5ZjjFs1MzExaT9Hb0lGSUxNT1JMS1RdWVJKaISIe4l5fHF8j4x6fYmHfpeHdqGZiIePkpSljayqSIaur6+LgYCTioKLgoSSqYeAmJiKm3RtfYGGh32OaGdoeX9uhoeChXGEhkdsgHdyeXZobWtfdn2CiH+HhIt5lJ2ciYuIkX96dYt2fHhtb3d9f3R0cmxbXl1bY2NYZ2VcVVBQVllQRExLRk5JQ0ZDQ0BAQ0E9OTc4Ojo6Ozs6ODg4Ojo/PjY7Pjc1ODU3NzMzNDQyMzY2NTY3Njg7REZMTU1MQzcrIiUnKykrKywvMDArbnUyMjQyMEyBXDU9PF6EdHx+iYWIkY6Wl5KXoJ2soaa4r7O8s5eNkouYi310cH+Jkn59jIKSlH2Gfoakh4h/goiFeIeIfnOEeF9jV0tCNjAuLzIzMTIzNjY4Oj0+P0JFR0hKTE5RU1RVVFRWVVNRT0dDPzgwLCOHWz4/ODQuXZZwc6NVRklLTU5QV2BYcFlcXmmNk4eVgISChZGTfoWIkYGalYKhoZiVm5umrZOau7Gnu8fDqIuMoaWPlImBkXxxg56fkZx/doWFi5CIkGlob4OAdY2HhItxhYJ3h397doV9bnZ1ZoCUjoaJiIeIh6GropaJjph/eoKJenlvZ2t4fnp+c2xlXlpbXWpdYWZfWU9LTldSUUlQSkROR0NKREJBRERBOzo4Nz08Ojw6ODg3Nzg6PT04PD02ODY1NjYyMzQ0NDU3Njg2NzxCQj88ODo+Q1FeZVxHMicmLCwtLS4xKD+LWy4zMTBPg180PztudXBmeIN7gIx/gZCOipqbpJ2hrKarr7CXkZGEoZSEeHd/jJR8fpKFkpV/ioCSm46DgIGMioKJjYN/iX9tcGpdQkA0LS0vLy4vMDIyMzQ3Nzg7PT9CREhKTlFSU1JTU1RSUE9IREI8ODcvOUQ+PDw2My5sk5dNUEhJS0tLTlZfY39nZ211nZuPmpKTi42OmoiSj52LoKCSo6qlo6yTqbaiqMHDrseveLqUmnyNoZ6ZhJOFgo+hn5OYkoSLhY+akZZscHWJi4KWjI2Pd4+EcW2FgYqWkYOFiHKIoJaGkomOj5aktambjZWig4eTg31/a2prfICBgnNiXmRfW2drXGxsXldLR09SUU5MTEZJUENETUZBQ0VGQj06OTc9PDo7Ojk4Nzc2Nzs6Nj06Nzg1NDU2MzQ0NTY2NjY4NTU2MzEwLiosLCkoKS46UGFcQCwoLSsrMCwncog3MjQwT4RiM0A8dW5nWXCCcHWGcXaShn6XlpqVnp6cp6CplpOYnmdlpJp+hJKReX+SiJGSfYqEmJKRgoCAi4yJhpCGhIiFeHh+Z01SPi8uLiwvLi0vMDAwMjEyNDY3Oz9DRU5QUlRQUFFTUU5QSUVEPjs8OkNGPz48NzUyPD9SNUhISExMTU5SXm+KfHOBfaCdnKelopmhl6KUnJ6nnqirn6isqaq2l6u+q7bIyLfJ0c++m6Bwaaupn4STkoWcoZqbmaeRkYmWopqad3p+lJiSoZKWmIGUnnt3lZKrsoiNl599lJ2bjpKVmKSiprWwnZGZqIiWj42BiGxzcnx/fXFoX11hX2FnZGBnZltRRUpLUE9JSUxGRkxDSExGRkNCR0VBOjg1PDw4OTk5NzU2NTg+NzU9ODQ3NDU3NTQ1MzY5NTg6NjE2ODYzLzAuLSosLy4tJyMqO1hiQigqLDEtKEuXXjA2M1GFZjJBQGlhXlBwdWBufGF3jn17lI6Oip+Sl56Wm6qYnqpCRH2HiYeYjXiCjYqOjXyKho+QjoGCgImLioSShYOGiYGAhnZeYlA0NjAtMS8sLjAwLy8uLjAwMTU+QUFNUVJTUVJTVFJOU0xFRUA8Pj1HR0BBQDg2NjI8OTtGSEdJSk5PUVlthZB3lYqjp6q0vbikrqysp6i0q7C2srKtu7GzvZyzw6y7ycu3w7+4paOwsqytqqOLlpiFpqago5eBppmNoquopIiFlKShoKqgpKmPnLGLlaOnt7qboKOwkqKdo56Qo6Grr6yytaKUpKqImYmSipV5en2Ff2hhaFxlYl1kY15nZl9aT0RJSFNORkhMRkpHRUZIQUtGQ0ZGQTs4Nz08ODg6OTc0NjU4PDU0PDc2OjQ0NjQ0NzM5PDM4PDIwMjU1MS8xLi0qKi8sLSooKiYlNVhYLywwLCwwhIE4NzFQhWg1QUNbWFRMaWNXam9YeoV2gZOFiIKbg5KRjJLayJ2Wc1aXiI+InI98hoyOiop6h4KHkI6DhYGMhYaHkoaChImGiIeHcG5hQEU2NDwyLzExMC0sKy0xLi0zP0NBTVVRUlNVVVZVTltQR0dEPD4+RkhDREA4Ozw1Qzs9RktJR0hST1BXgZKghK6js6qywMfDqrPFtqyzv7O4vra/tMG2u7qjuMWotsnHtb65tKijtK2xsZuakpqfiaevq6WUdp+kl6GssrOYlqqtqK62u7K6rK+1orGssbW7t7WutaCnp6OomqmvrbK5t7inm7apjKWOkZOfhniCg3VaYmRWZmFhY19gZl9bVElERExVUUhJSkRJR0VBQEBKREJNRjw4Njc7PDk3Ojk4NjU1NTcxMTw4ODk1NDY2NDk3Pj0zODkxLjAxMjExMzAsKiwuLCsrKyooJyopRVowMCovK2iSTzYwUodqNkFGV1FKTFtaUWJjV3l1cYGUfYSGknWFf4CMe7+7o7yCtJSTjZuPhIiPkomIeYaAjJKMh4WBjn+BiY6GgIaJhYqHkXp4bl1WQEVNPDY6NDZBQjc2NC8vNkNIQ1FcT1FVV1VcVk9eVUlLSkFAPkdLRkVEOz5AN0Q3P0JKSkVGV1RQXo+kraOxtMK2uMHMyba7xL2zs8C3t8G1vq+3dLGzpbrFo7DGubGzsbSopLW2qrGgopaaopKlsK2mraunpJigrLS7oqmyurS7vsy/xcW9vbPCt7q4vre6t7msrLCmsKqtvbC9u8LCrJm6qJSuj5eYq4l9gn1rV2NiWWplamVXW2NZVlNJR0ZMUUdDSElBSEQ+P0JCS0BATUM5OTY2OTo/Njo5OTY2MjQ2LzE5NTk5MzY0NjI3Oz0/NjoxLi81ODo5NjUwKigsLS0tLCwqKCgrKyhFUy8qMDBKj2s1MlCHbTY/RlJMQUxSV1NZVVp2anB+joSBjYNuenN5h2K4oZmjiZWTlpOUk42QlpKHhnuGgY2VioGEgYp6fIqHhnyKg4GKg5V9d3l1ZU9cZEdFTDpRY2FbXlNGPztIUERbY1FSWVhaZ1lUYGBNU1BFQT9JSkhFRkFAQzxFNkI+SEdKTFNaVF2Tr7i1urjJv7q9ycy7vMC8t7W7u7a9tLqxxmB1sqWxmp6qvaqlqKuqo6KytaGrqJ6Vlp+Zn66lp6aln6OUoqextKeys722wb7TycnTxsLFzMLKw8C+vb+7vLe0r7i3tsO6xr3DyLCeuamhq46kp7aJgH9yYGJiXlhhX2lnUlhgVlFVSUVFTktBPkdEPUtBPUJAPUY+O0hANzk2Mzc5PjQ4OTo1NzA0NS8yNjM4OTM3NDQyNj84QD5HS1JUU1FQT1FRUEpBOS8sLCwqKygoLC0sL1A+KC40OIB9PDJLiHE5PkNLRUBJTVBSS1FdZ2xrcI+NhY9zbHJyc4fVwLWZoI2VmJmRjpeSlpaOhod9hoOMlot/g3+DeHuLg4d7i3mBioKXf3R9emtlcHVZXVxQZWViYGVkXVtYV1xNZW1VUm1tX25fWGdlVVlVSkRCS0tIRkhISEdCSTlEP0hLVFRWXFpbkrnAuL23xsC7ucrKura6tri5sre1tK62tplkdaicrXBeoa2cmKCim6SeqqWUoJ+QlI6WmJeon6Wfnpqag6SdrKWqsK23sL251NHP18/JzNLMz87KxsC/wsq9wbzBwMTExcq/yM6zpLuwtK+bq7i8mX96bF5hXFldYVpjY1FcYFNQS0NCRUZFPEBFPkFIQUBEPTpFPj1KPzQ3NTM1Oz00Njg5NzcwMjIvMjQxNjk3NzU1NTVEM0VMTT41MS8wMDY6NDc3QElPSTstJioqKC0uLyxATSsvNTRtiUkwSIl0Pz5CREBDREZLT0RRXFloX2+XkpCUbmxvdXWHs6yhoZ+LmZyZjI2VkZuShYqKfoiGjJCLiHyBhHN7ioOFe4l0gYmGlX9ze3hrbXV7aHJlaWxpZmppaGBmaWhsWm50lq2kvIiHZ1tvaF1aWlRIS05PSktQS1NRSExBSkZLUF9eYmZpYpi3x7C4s7u9tbHExrWwubCwu6uysaeqt6yNtaedm6eaT5qdjI6flZGmmKWVipOTiZCJj5GRnpuhl5qVloaemqebrK+osKeztNTU1NbSy9DU1c3Tz83FwsnQvsrJysnRx8zNwtDSuLDDvMS5pba6w6KCb2RdXV5ZYFhZZVpRXVdPT0JCR0RCSDtBQz5BRz8/QTg7RD5ASD00NjY1NTs6Njg3NjU0LzEwMTQ2Mjc4ODc1MzY3QzVCOD8tMC0xMzQ5PTk3LC4sMTtGSz0pLCguMDAwN0s/LTQ2VIhXMESHd0M7Qj5FQkFDSk0/VVlTZVZzkJCYgmhxb3l5g6CqnqWXjJubl4uNlZGajn2Ji4SOioqLkId7hIJwf4iBhnuHcoORi499cXh1a3F4fnF7bXhzbGmBcG1jaW1weGl3fH7Lv8Lfp25jd29jW2FgSlBSVU5ZXlBdXE5QTlRRVVRbbm12gnGWrbiss6ewtqqsvMCwq7WmpLimq66gq7SjjrGtmpiYjJGTkYSOm4GNppGciYOLhIqJhIuDk5WXlpObkZyYmZmfnquspKeirK3P0tXRzczS09PQ1NHOyMPU0cfN0tPT183S0cXS1sXAzsfHwqi+t8+eem9mXmJeV19TXVpPUFRQTkg+QEZBQkU8QEI+RUQ+Pz86PT08PEpBNDU0NjU8ODg4NjY0NDEyLzAzNTI2NzY4NTMzOz08RT1AMTErLzI0OT41OTAxMDIyLTJETjMpLzMuMzI9TjIzOEN9XzJBhnREOj09ST5AQ0ZIPFZSTU5bdYaFindsd3B9fn+hnp6gi4yZk5OMi5OPloR5hY+QjYuKiJGHf4J7cn6AgYd5hHWFkpGJf292cmtzfHx3e3OBd3FrgHNyaXBxenlyer7Lmn6MsoR2coR3aGFqXUNaWltWZWNYZGpTWF1cYGReY3d6fouBmamkpKGfoKilqrC4qqW0o6GtoaOtoaexn4mmmpOSkYmRj4iBlIlqlaKMmYSAhX2Rg4OTlq2LlY2Vmo6GkpGdl6ewoaChpaSoyM7PyMLL0dTR1NPO083G1tPM1NjW1tjU19XJ1NrNydfX0cqsw8PLjHNvY2BfWFRZU1xQS0dKSkpAOzo7REFEPEJDPkhCPkJCOzs5PDpHQjQ2NTQ0PDU2ODc1NDMyNTAvMjU0Njc0NTU0NDw+PUU/QTYyLy0xNjs9MDgxLzI1NC8tLTtSMDE3LzUzMkZEMjg+bmI1PYF0TTk5QEk8QUQ/QTtQTEZLWXCAdX1oc3hygomAnZWdlIWLlomPioiOh49/d4OTmYqNiIiLiX6DeHN7fYOId396h5GWgINueHBtdX92eH10hXx5bYd2dG59doR1eHydtYw8QYvFpX6MfGllVklDZmNlY2dqZG54W19maGtuaW6Ag4iRi52eoJ2Ql5ifo6SmsqOks6ChpZ2gqaCisZyGnpKSkpCLjouGg4+EfpybjI2DhIV6lH6CqZWjjJKKl5KLfZeKmpGrs5iam6ecp73Dxrm2xs3S0NLQy9LLydTO0dXa19fY1NnYzdjbzsna2tLVvsvMtHh3b2VdWlJWUVpXRkdKSUVFPTo3OUBBQjlHREBFQ0FEQjs/Ozs3REM3NTY1NTswNjg5NDQzMzQxMDE0NTU4NzQ0NDQ5QD5EQkM8MzMuNkZUV09RSkFKRj8xKiguQlMzOTI1NC83Szc1PGBiQTxzdlY4N0FIOj9DPjw5UUVDSlRrbm5wYnBxdIaNfJeRnYt+h5KCiYaFiYGHfHiFlpaIj4OHhYd6hHlxenuEhnV6hY6NnHqMcHxvb3p/cXyBcYOHgG6OenV3fXyCdX97hoewdFipwraNkYJwbmI9XmhycHFwbnh2gWVpb3J1eHF6i4eOk5GblaCVh4yTm6Cbn6qfoK2coZqZn6Wen6uZi5qMkJGNhH2Ih4OFi46fmZOIhId+bZl5hJiGiJOMjZSMhnubiJSPrqqUlZefmaeutb2prb3Gy8jJzMvPycPRytTX2dfY19Tb19PZ29bP29rR1snUy5V6e2loXFpQU1RdSENFSUg+QT09Nzo9Pzs9Rz0/QUFBREE+Pjo4NkRCNzU1NDc5LjU2NjQzNTUzMjMyMzY0NzU1MzQ1N0VCRENFQjU2PEZOU01bbmZjbnNrYVY+LDRMRzg2NTQzNEJGND1XX2hMdXheODs/Rjw8Qjw6OkQ/Q0dSa19tZGJma3aAiHGRkJqAeoCNfoKCgYR+g3x8hJiOh4t+hoaAd4J5bnt7hoF1epKejaB2jnWCdHWBfXSAhG+Bj4FvkoR0fICFenaGe4m3xqXCybiClpuPd3BlTmZjgXqBd4aikIp4eXZ7g397hHVtk5aUlY+XkIOJj5eal5alnJegl5+SkpejnZmrlZCQio2RgoyFiYiBhpCRnpyZiYWLgYaYeoiIn5ePiI2KjIJ8oYmQi7yhmJOXmpyppqWun6i2v8DAucfJzc7FzcrR1tXV2dXX29TX2drb19va2tjO3MaHfHpoaWVgVFhWVU1MRE5DOz08PDk6PD45PUA2PT9APD8+PDk4NjdDQTY0NTU9ODA2NjU1NDc3NDU2MTM4NTQ1NjQ1NjdISD1ESkU3OTI1O0g+Ozo6N0lQXVpSVVhLOVQ+Ozk1MzI3STg9TllNSHh4ZDU9PkM9PUA6Njo+PkBFUV9ZZWFdW2h0enlsiY2Sd3Z6int+gH5/fIV7foGRiYSFeoSHe3V9dG18fYZ+c36SnZGeg5F8hn54jn15iopugpqAdJiFfYGIhXt9kHqPqY6Pw6C8jJyjnH2JhH2JcoyKfnOmmpyYk4V7jpCIhGhHcKCknYyLkJKFiYqRkpWPnJqSlJGWjYuVn52UoJSRjY2Qi36Qjo6LhImSlpqfn4mMlJKdkYKLf6WZiISNg4WEgaWHi4u4mJ2RlJaip6Gdnp2jr7a6tazAxcrQyMfMz9PS0tjS1dfA19jZ29ja2tnZ19u4eXl5bWpmV2BcVFBPSENMQj09Pjk5Ojo5OTs8Nj8+Pjw9OTo7OzM3RD84Mzc4PjcwNjg4MzU3PDM3ODA0OTc2NzU1NTQ2RlA1RE5JODkzOEFLPTszQ0BJPDlEV048TVRITj85NjMzMz5DO1tYPjVZeXBaPDxBPD0+ODU4OT89RFJTUlheVVhmbW1taYGOinFyeYp7en98f3uIenx7i4eCfnWDhXlzenNtgH6EfXeFm6GbnZSSgIuIf5iHgJuSboeohXqgi3yRjoKIg5x9mpGKjKOin5CkrqCLkYuFi4GShldyrYufq5uPg5ibj4+NW4KikYKMn5OVjIeIjJKSjJSUlI+Mj4qHlpudj5WWkYuSk4WAi4iSjYqKnZaZoqKGkp2WoIqJiI2ckIOIj3+Dh4WkhoyQs5idkpSXoaGemZKcnaeyuKymvcLHzsfGz8zQzM7X0NHUrtbV2NrY2trX1tnZn3F+dWhnXl1YVFdYQ0BIQz4+Pjo0OTo7Nzo7OjM7Oz88Pjc7OToxOkg+OjM3PUA1MDY3NzI1NT82NTs1NTg1ODo1NzczNUhSN0dPSzk5ND1FSkI+MUZDTEI5ODpHWEA1SFdJNjYyMjM6RUNlWD8mX3lpX3o+Pjk8Ozk4OjtAO0JRS0tTWVBUY2J4bWJ+koNvbXeLeHl/eoF8hnt7d4aEf3NwhYJ6dXZ2dISDhX1/kqajn6Wilomdj5SXi4qol3KKsYyEp5GEmZOFmYyilqCYk4mbnaKSqa+fkZSQjY6IlYtujbeFmsTIspyhpZucmJaQspBkpM3Hlo+Gh4mPko6Nk5SJhYqJhZaam4+QlJOGlJeDf4+LmYiNkKqXl6OjiJmel5uIj4eXl4qEjoyBf4ePpYmNk6mal5OWmaGZn5mTnZuis7Slo7zAvsjFxcnIycLK083N1KnS0dbW1tja1NPaz4NzgGlkX15eTktUWkJBR0M7QT04Mzc7PDo4PTY0OTo8OjgyPzk6MjpJOj02N0JDMzI6OTYyNjQ+PTQ7PjY5NDk7NTc5NDRLUTxKUUs5QTdCR0lANjRKRUxGPjw4OEVUQTc+XDg2MjE0OjtFYFhBRmF0aExjWj41Ozo6NTs6PTpFTUZIUldTUkJjgUZ1go58fGx9iHh6fnqBgYN+dnaAg3xsbot/eXx4eHyEh4t9iqOzp6OqsqGWp5+lpJaVrqKDkLeVkrOZjaGgjKSbr6KknZiQp5aoma2vpJeUlpSQi5iZlqDAjqPJuKuaoqatmJGanLKdhoWoopyYhYiJjpWNi5OOiIGGh4iSmJSMi5OThpSYhoORkJx0kZmylpekoYicmpOPipCLl5qJipaOhn2MmJ+KkJCcmpmTmJiflKCdlZ+bobGuo6S3vbTFx8S9w8O/xs7KydKnzs3T0tDW2NLP2Ltze3deYVZhV1FJSU9FQUJFNT46NzY6Pzs8Nz00MjY2OTc3ND01PDU8TDw+OzxCQTc1PDs0Mjc3P0A2P0A3ODQ5ODc7PDU1T01EUFJMOEA9RUFHQTU6SkVORUQ6NkFAQlM+OURPMzIzNTc1PXZcPFJcdGlaTV1TPD04OTU2Nz06SkZER05bXFlJZmA7SISLenpthYZ6fIR4gIWAfXB4fH18b3KNen2Be3iGi4mFg5Knu62osr2vpK2zs6ijorCsipq0naO4pJWspJaprbempKOfmamXqaOvsKqamJyUlZGXn5eZu7utyaBptrirsJSYnqOrkpe9o16qsoKJio2Uh5F8jo59g4aNj5SViIeSlouPlY2KjJeYkp2as5aVq56Lm5SSjZCSjJmbipKekIuJlZ+ijZWNmJqdk5yZnpShoJScnKWvqKKls7erwsjEtbq9u8XIx8LRocbJzc3E1tbQy9SicXxpXltUX1JQRkQ+PENBQTg/ODc0PkY8PDY8MzUzNTU0NTRCMzo6Qk06QTtBSEI7OkA8NzQ2PEI5P0BCODc0Ojo2Pjw0N1RLQ1VRSjc8OklBREA0QUpITkJBPzZEQTxKTkQvVD0yNTQ6RUpcWEpaUW1ncHBEaWBLSTY3NTc6PkpAQ0lQZUdiYGJwSUCLin+Bc4aHfYGIdYKKg39tfX18f3B3hneNgYd7jY+MhoyZqsLAr73Gu7K0wby0rauztoyosq6uvaqbu6Sorbm3q6amoqKjo6mvsrGqnZykmJqXl56ipaWSo7muqL+7rK2yuaWjpn2IhpytvbCDi4yLkIOPg5GPeoGHkIyOnIiIj5eNi5WXlJGalp2nmrGakaudjpmPko6VkJCWl46RoJGJlZujrJSWj5ScnpSgnpuYoKGVmp6np6SipLCypsHHw7CwurbFxMK+zafHw8fDvNXQzcTKiHRzY11aYFtOS0JLQERGPkE/Qjs6ND5BPT01PTY+MzMzMjQyQTE3QEJOPkdAQ05DQT1DPTs4NkNDNUJJQjo4Nzg7NUI+NzlWS0RXT0Y4PTRLQEM+NEVLSE4+QUE2QkI/QlNFNThQMTQ1Ozw4O0Q+OUxqal07V1JkS2daVU83OUdFP0NGXGZGYGlnWl1bk4yMiHuHi4eDjHWGkIqBb358gn9xfoF6lXqRlJSYkJOVp7TGyb/CzMHDuce8uq+rubuXsra6ssCupcCkqq+7u6qtq6Kinqerr7Wwqpufqpuhm5Wer7Oni6K6ubXBu6uonLKko6iThY2pw8SkgouPh4iEhpWUjXqDjJGOkaGMjJSRj4mXn5iTmZSXpqCunYyqnI6Vj5KRlZWOkJWRj6GUhpefoLOelJqUoKGZpJ+aoJuglJiepqSmp6SvraXAxMKuqLe1ycO+ts6yxb7EvLPRycjBtXV5bV1ZXGpTTUlDTEtKSkBBPUJEPDVBRDs6Mz04QjMzMjI2MkEwNUlFTT5JQEhSQEg+Q0A7Pj1GQTVBVUA7OTk4PDdFPjg+VkpDV09HOD80TEBCOzVKS0NMP0I/PEJGPUFITDkrRzwzNjc0NjRBPzdPYU9hRS89PjZrbGpgQDpIPj9FQmZbTWVcZlRjapmNl4qLiJOQhol5hpOQgXKAfI1/eIeCgpB5jaGWqJqamLq+x8jKwtLIysLNvcGzrLu+p7q/vbvDuKzBqayzu72qsKqjpaOsrbSttrWgn66epqKYo7O8qZuovMGjtravq5KvrKqrloaZqaalkYKMk6WViYF1ipJ5hY2RkJ2fk4+Ui5CNlKOZl5uUlKOeqZ+RpZqMj4+QlZaIfY+VkpKjm5Wgopy1ppCflqWko6WenqaYnpWXm6WjqaiisqyovMDEr6Wzt8zAua7Ds7u+wriswsLBwJluemJZV11bTEtNSkdEQ0lCQkFDSzo0REg5OzQ8N0UuMTIzNTJCMjZTSE48SkJKUUVLQ0RFOkVMQjw3RVY9Oz04OT88ST86RVVJQVdRRjdBOks6Qjc5Sk1CSUBDPjxERzxCQ089MjBIMzY2MTcwPUI6PWpqSks1UVMzU3BwZE47RD1ARj5rSV9YYVpkZFaekJ2Nl46ekomKf4ifk4R3hX+Vfn+QiIqQf5Whmq6mo5jCvcjDyMXTzM7Ny7vCt6+6vbS8yrzDwba2vK2zv7m8rq+ooKmntq2uqbK3mp6toqihnaq3t6mkr77Dsb25s6eps7OsrZaWpKunoJGOkrHFp5WOfJGVfYeRmY+qmZiTk4+TlZOlnpOdmZOho6KcmJ+Zi42Pj56IWpCXl5KWpZpmmKOfs6WWopasraunm5+ml5iWmZWhpKimnrarqbq7xLWltLbLwbiptqyzu7iuqLi6vbiDbm9bWFVWT0ZLU05LP0FIRURIRkc4NUZNOz43PkFKLjMyMDI1QjU1T1ZOO0xGS1JMT0dHST5JUT86OElTOzs/Nzk+RExCQEhTS0BXUEY6QT9HNkE3O0hNQ0U7Qz00RkU6QkFCRzkvOkEzNjAzPkdEOTQ9dGRNRztFKzpmfGhXOz1AQkZCckZpSVJlYkxGpZSclqGXqZaNkIOHpZKIgYeCnISDlZCQlI6aop+vvq6hxr3FxMfGzs7O0sq+u7axuru8vs62xL23uLeysrWzt7Osppyrq7iqqKevsJejrqSnpKS0wLCqrLO+wrnAubOnt7O3sq6VpKyurqSLk5WhjXTBmn2WmYSOlpqLsZWamZWSk5mZpqOVoJuWmqicm6GgmYuNj5adYEqWnJqUmqWXVJawn6+cn6WUr6+spZqhpZSTmZmOnaCnopm0qaqzvLy7q7Cyx8C5paurrbGxo6GysrSkcW9mXFtPUUxFUFBQUTtHS0hGSEJDPjlLVD9BOj1FTTA3NTQ0OkIzNE5XTzxKS05VTlFKUEhISk9CPD5NUjs+PTg6PENSPkRIUklCV05JQENBRjM+NThKS0NBPUM7NEVBOkE/PkhANSpCNTIsPmNdZzozNXRkZUBSNyYjM31pWDs6QkNAPVFFV1JzYldGSKuXmKCiqK+ZkJeHi6eWjoiShZ+IhJ2Xjp6gmqOktci0qca6w8PIysjHzM7Gvrqyrrm4wMHNtci6wLm1ubGvr7K0p6ObqrS0qqmmrqyZpK6lpaisur+oq7a2vsG/vriyssKwuLyro660rLiliJuXppt2vqCEmJyOk5mai6+WoZybl5Wbn6GpnqigmZqpmaGnnpeQjZGdg252kqKalZ2in5CtsqOrlamqmKuupaSgpKiSkpmciJScop6Xsaepq7q2vrOyrb25tqCjp6ilp5ycrKmpjGRmYV9SS0xHR05KVkw9TURNSUtBQ0Q8UFU8QUFCRE8xOD03Nz9CNzVVWE4/SE5RWFJQUVRKUUpKRUFFTVE/Pz04PTtHUjxFRFFCR1lNS0FIREU6OjM5S0lCPkNCOTlDPjxAPjs7RzctMj4tMYJoTnpcLzBraGA8PUJCODZ6Zlc7Oj0uLlNhTVVIf2VeSEWrlZyhn7uumZSejJOqm5GSk4mqjYeinoykrZSjo7bGvbTBusHCx8jFws7Iwb25sq+5tMDCyrbGscG8tLqrqK2sr6Oimaq0u6appquqnaivp6Sqqr28p6y8s7e9xry2tbfAr72/s6i0tqu+pY+il5Gin7yfiZmgmZaenY+3n6mcpaObnKGaqKWzoZudpZyoqZ6ZlY+Um4uXiYykoZScop6gtK+lpZOwq5mrrJ6epKOpkZWVoIOQnp+clamloqG0tLq1rai0srKenKKmmpeVmaqhnndhXmBeSklGSE1RSU5FRkZCUktJQURHQFZSREg9QUdRMTtCNzpCRjc5XFlLQUxQVFVTTVdSTlVKREBKSk5POUM/NT08TlFDPz9QP0VaTUpBS0RHQDUzPUlHPz1FQTk3QTs8QDw8M0A8Lyc7KkiRQjpTSjAsW29XNzE8Kh1CgGRUNDktMTpnXEZDQ5xvYkdFp5ekn5/DrJyXpJeZqZyWm5qPqpaWp6aVrayZoqu2xMK7vrfBwsDHxL7Nx7u9ubKwuLO/w8i1v6+8trq3pqSrq6ygoJqqq8Sipairpp6rr6uiqai+uKatvbC3tse2tbm4vrC+wba0srSvvaOWo5aTm5Sun5ChoqWjo5+QvaWpnamsnZ2hm6afvaKZo56iqauhnZeNlZ6TnoePhI2TnqSgnbWsppyVsqeZsKefmqqeoI2ZlZ+EjqGam5KlpJqYrLG2sqqlqa2snJigoZKOkJapn5RpZFphXU9KR0tPTEhFRElBPU9IQTtHSUhbUk9LPUhPVTRCRjk+SEc1Q2JbS0NOUlVXVlFYVFJVSEA4UVFQTTpHQDRDSFFTSUM7Qz5HVktDQE8+SzwwNjtHRj47RkE1Nj85Oj85OzE1RDAtLDBNdlw0S1o1LE1uVzwtPSkeI3piUTVDS1E5b1JGPEt4ZWNXTKKao5uexayhn6ydnK6fkqOelqSgp6mrl7awo6qytcTCvb+2wMK7yMK+ysi2uLW0sbO0t8HGtr6wuLS5tZ+mrKqrnZ6fpaTBpaCpraCkqa2voqanvbWlsby3tbXDsrO3ub6xw8C3t62ztLWinKSVkZOgraCYoZ2oqauimsOtqZ6srZubnpmmoL2hnaSYq6urpqGZjZqfkp6Jjld/lZ6loaC4qqeTmLajn7OhoJuvl56OmZSdgo+fl5aOoqSVkKWusqupoqKlpZaVnJmLj5GTpJ+JYmVbZGBMSUpKT0ZFQUZLPj1KQjk5SktOXVFRST1MVlw5Rkk9RE1JOEhjXExDTFBTWVlWV09aXklBPVdRSUs/SEA1SE1YU0hBOkBBRFBIPz5RPks3MDk5RkU7OEc/LjY+Nzg+NzcvMT85MSUxUVVtW0pPMTA9Z1dEMTc9LSt3YFM2U1prV3NIRTY9dWVcS06en6GYnsOnpaKzoJyyp5OrpKCjn62prJ27sKistbHIw8HCs8LEvcbDvMXKvLCwtq6wta+/xbW5sLC6tayaqLCpqZqepqGnwq2brLCcqqKusKmkp723pra6vK62w62zs8K/scazurartLWtqaGllZWUo6uhnp+aqKuwrq+7sqagqamZmZeToqS4oKGkkq6vrKWmn5KhnpWej5CNlZ2Zo5+ntKanjZi0nKOvmp6brpGelJeUmoCSoZWPjp+hk4umrLClpqKcoJ6TkpqUhYuSjZyegGJmW2hlS0lMSlNCQ0BIRzs7Rj85OU5NVV5SU0o+T15ePUhQQkxMSTlOZF1MRUxSVFlbU1VPXGJIQT9aUUFIQUtCN0ZFTEtOPjtCSEROQj07TkBBMy85N0NCOTdGOys2PDQ2PDM1LS80QDErJ1Z0U2VPPzEwNGJbTTIzPjA8dl1eP1tVXmZyQDg8SJZ3ZUE0n6Sfm6DCqKOqsqGjtamVsqunoqWyrK6pu7KssLW0xr/ExLXAxL7KxLbAyMK1q7WosLiswMS0t66strmlmauyq6qXn6aXrbu1m6iwm62frrSxp6q6sqe5s7eyuMCqt7LCvLPFp76urbe0qaeroZaWkaWkoqKXmKSuuK2xtbagn6ikmZSVk6Ogt6KkpZatsbKlqqahnpqampaYqJ+fmKKer7Kipo2XrpmlrJeZnqWRm46UmJqFlp+UjJCcnpSLqamqoqegmZ6WjI+ZkIGGlomUn3lkaV1saU5QTU5UPUNBTUM6OklANzdRT11eUlZRQVdgXEJKU0hWS0g6VWRdTkZPTltXW1JQUVhdR0FCW1BCRz5OQzlIR0hOUD8/Q0lCTEI8MklBOTQxNzdCPjs3RTcrNjkxNDgwMi0vLjw2LSNCcWdzazIzLzFbYlozMzgwNnBbYkgwNUpwaVZDV0aMeWZDO6SjnaGmv6anr6+gqbWqnbmvq6OqtLexsLm3r7a4t8S9w8e9vMPBx8C5wcbBuqq2pa27rcHDt7iqrbK7opWtsK2ylqWnkau5qqCnsJ2qn7C0sqqptrWsu6yysrm3rLmwwrq9vqbCqrC3r6mqq6admJiqoaGgkZigsK+zq7C5mpupn5mWkpemoLappaKir7Gzq7Gnq5+boKCbnqWcoZedo7Owmp+Qk6WaoamalaKflpiJlJiTlpedk4iQm5mUj6mop5+jm5ebk4eOmYt+jZaFj5traW1hbW5YUVFaVEFDRVRAOztIQTc6WFBkXlBWV0RZXl5NTFJOXktKPlpkXk5IUE5bVVlQS1NXWkk/RFhQREY+Tj89SUdHUVBCPUNGQk0/OjJEPzc3NTQ3Pz05NUU0Kzc1LzI1MS4tLiwxPionKz1ccD0+MS4xZVtkQDE2NDdnWWBGKD84bH1oW1Y6iXtjQz2nn5yhqb2hqrCqo7G4qaW0s6uhrbW9r7O4vLq9trbAwr/JxLjEwsDAuMS9wbivtqirt7K8v7+0qa6xt5+Xq62orZenqY+nu5+lrbOeq6KxsLOsqbaztbytr7G1rLC1scC6xLarvK+xuKusqaKxpZ6kqZ+jl5CZn7Kqs6mqs5mdp5uZlI2gpqS0rqehrKytsaeyrLKppJufqKOdlKGYm6i1qZeZkpKemZ6hnpCsn5iYhpWYi52anJOKjZaXmpempaOgnZaVl5SAj5SFe4+Sg4yWZmxyaHByX0dZZlZEQ05YRFo5SEI2Pl1RaFxOWV1HW15dTk1SWGRKSkNcYmBQS01OWFdYUEpWVldMPUVVSkVEQU0/QUZISFFQQTtGREZLPTg3Qj02ODcxOT48NjVEMCs4MC8wNS8qLC8tKj0sKyUyKyo1SzEuJ19eYVUxNTA9YFZeOClDM1lVXGdLNYx6ZkxApJqgpKy3pKyppa6utqmvs7mmprC3xbextr7BwrW0usW+zMW5w8C6v7rEuMG5srWsqrq3urq+taqtsbaZmKerqqubrKuPq7ydrK6xo6qfsK2zrq62sbm2qa2usKe1r7O7vMmyqrW0sbSvrqags5+aqK2gpZWVmpmxo62fpa+WoaSZmZKNoqWnsqmhprGrqbWlrrC1r6OZna2nmpeemZmruKOXk5GPmJyhmJeUrJ+dlIGTmY2dnZqWkIqUk56apaOioJmWkpOWe4uQhXuMi4OLkmtueG51fGFGYGpZSUhZWj17SkdFNkFiVGlaTVxhSltdWlJSUmJgTEtFX2FgUExJUFdWVU9HV1ZVTjpJVklIP0NLP0VESEhRTkE/SEhIRTw3PT46NzU2MDk/ODY2QiwtOCwvMDQsKCwvLSo3NikoOS4kOks1LiJUYFZhLjUoQ15RXC4qQi9KR1BbSDNjWVVLRJmWoLCosamspaOurrWpt7S4o6u0t8q7tLu6v760tLfDwc3Hu8O9t76/wLi/vbG9rqe6ube3wrerrbG5lZemrquno7KplK+7pK2ysaenorKzsLKwtLG3sqiuq7GmuK+1s8PFtqi0tauwramnorafnqaxoKSUm5mUsZ6nm5+pjaminZuVl6WlpbenorGzq6exp6ywtaykmaCsqJucnZuUqriblI6Oi5icopiQl6ahn5aEkpaQnZyYlpaIl5CXm6idpKCSlpGRl3aEkId8hYKEjYxucXh2fH9dS2VsXEtPY1w/YntHSThHZ1dlW0xeYk1YWVdUWFRpXVBPSGFeX1BKSFFWVVJLSFdVVk04TVpORUBGSz9IQkNLU00/P0xPSEA7Oj47NjswNDE8PTQ1OD8pMDcpMS4yKSksLC0rLTkkMDQyJTlCNy4jQU5JZzI3J0ZhTFYlLUIuPUVNUTwzcmtKREOQmaStpK2tq6eksLKzqrewtp+rtbnJua7Bu8K3s7K1wsPPxMDBvrW9wL+6v72zxKiqubC2t7+9r6uzs5ygp7CtpaawpZ6yta2rsrCsqai0uay0srWss6yprKisqbmtsbDHvrekua+pra2lqK2wpaOjrqOpnJ2cmq+ZoqOio5CsnqOfn6Gqpqa4pau0tKSpq6irr7auop2jqKqboJmakqS0mY+JjYeRoqCVjZSdoJSThY+Ukp2bmJaVh5iSlZmnnKCfjZKRjpF3fo6FfXx9h4qKcXRyfn1+XFJkb15OWmZdRkSWW0c6Tm1YYVtNYGFOVldWV1RZZ15RUkxjWltUS0dPVFNOR0lWU1xOO1BeSkJESEpBRT8/S1NPPjpOTUM8PD45OjU9KzMyPTYyNDk6KDQ1KS8sMSgpKywtKiY1Ki8mMCkzODoxJiozQ2Q7NipIZEhKKzpJPzNCSVMsPo9rPUdIj5upqqGpr6SopLO0sbS1sbGhq628y7quwLvHsbSttMLD0cXGvsCyvsHCvL+4vMWorbess7i8wLCrsq2gpKetqaiksKOqsaqvrLCur62rs7qmtrCyqbKpq6Wlo626rKqxwrm0q7moqKitqaixpamkoq6qqKKem6KslaSdl52Yq52hp6mhrKWirKu3sbGgqKKfqq6wrJ2epqeomaOYmI+gp5iGg46Ki56hj4uMlpyPj4aHkJWfnZaYlYaWk5OXpJydnIuRj46Kf3+HhX13f4eFh3Rzcol2bF9ZYG5jUXNyXEs7hHxGP1d1WGBZTmNcTVVWVVdQXGJeU09OZ1hXVktHTE5SSEVJVlJdYzxQXUQ8RkhIQkc/PUpQTDo+T0o9OT89Mjo3OyozNT4xMDQ4NSg1LyosLjMwOyksLCclMjM0JCwyLTg2MCkoMTxeSjAuSWdERjg8QjA1RUtYMUCUWz9NRpWXrKeiqrKcqamwtqy4ta6qpauqvcm7sL63wq+xrbPEw87Ow7+/tMDDxLrAtMnErK+3rrK5wL+zra2rpaeqsKmnqLGltK2rsK6tsa+zrLO6pLizrKyup6ufo56wt6uqrbq2pLW1pKmnrKyqraGopqaxsqSmpaGhq5apoJOaoKadpKKqpKyinqaxt6ysoqSimqiqramcoaWko5igmZWPmJ2TgYKQiIWcoI2LjoyZj5CLhI2Yo5uSkZuMk5KSlKKZm5qLjYuLfIaBgYN7dICEgn50eIykh3lrXmBuZ1dmh2ROQGeSTERieVdiWFJlVU1WVVVUT1xdYVVLTmlXVlZJSkhJT0JHSVNRWW9BTVhAOkpHRkVHPj5FUUg4Q0tFODdDNzI6OjoqNDk/Li80NjMpNCsqLCsuIzQuLSsmKCs3OSomNis8LTIsJjA2WFouMEpnQUE8PEMrOkpPXjREhkBISESWkq+koqqwl6qprbWrtrGrpKuqqbzAwLi5s7y1prOvxMnL0b7Bu7nAv8K5wbrCxK6xtbKzu8G+s7Gurausp7aqpa2vq7mvqLGxrrGrtaq2tae0tquspKmqnKOds7OoqKS0tKC1raGpqKuprKegq6youbapqqmpoamfrZuRqKGdoKSipqKpnZymtK6npamio5ekpqepnKKko5+ZmJ+Rjo+ZjX6HjIeEnp6IhYqLj46QjYSGlaKajo2bkZKRj5Kfl5mWjIqDf3SGgX9/eHWDf3t4foCJno9vcWdncXhcYXSIaU9dmFZIbXhVZFZRYk9MVVRVUU9YW2JWSFBqVFZUR1BZVUk+SUhPUVB4TE5WPTxLRD9AQTxAQ1VDOUFLPTU7RTEzOzk3KjQ6PSstMzQxKjgqKisqLCkqKC8qJiklMzssJDIpMjAyMSUvMlJjMDI/Zj1OWD9DLD5MVF8vSWs2UUU7lY2voKWqrZmrpK2vs7SuqqWvqam6vrvAsa+4rqK2sMnHyNDAv727vMO+usPBwL+vsrOytb28wrKys6uzqaW1qaWts7O5r6OutrGvsbmquK6qrrasqp6qq5+joLatqKGer7OhtKqeqKeqo6qhoaytqL2vrK6soaenn6uYj6+imKGgqKeep5uZqrCoop+soaGSoaKjppiaqKWXl5idj4qHlYh8jYaFhKSXhYKCjIePjpGEhZSgl4iRnZCTkY2RnJWXj4qFhnh0gX99dXh6gHp0dHppgoejdWleZWyCdWeIi31SV3BeSnhzU2RTUV5NTVJaZ05MVlllWEdTaVJRPkJOUWFROklITFNJcVBMUzs8ST87PD07QEBXPDw+SDczQ0IxNTo5My01OjopLTMxLS02KSgrLSw1MiMyKScsJS47LiYxLjAtMTQlLDBNaDozOF89YWQ/RjFDUFtbK0hPOlZCNJCOsZ+kpqujpqSsprSzsKmjsKequL7AvLCouaqnrrDJxsjRw73Avrm+v7zJvMK5sLC1srq8ucGztLutua2jtaanrLG2ubKnp7q1rbW8r7ylra21q62cqa+jn6WsqqecnqqzpLOomqqnqaSpnaOpqKm9rLSvrp2po6Cum5qyo5Wkm6Sln6SamqiqpZ6aqaGbkZqgpJ2YlqmpkZiZk5CKgo+FfY+CgIiej4Z/foyHkY+QhICTm5SFk6KMlJGLkZuTlYeJfoByenl+fGl3fXp1cXF9aIZ5hIhkYGhjc4V6bWd5XV5VQld6bFRhUFJZS0tNcHRdSFpbZ1lFVmZQQz5LTkRDQTlIR0tTP2phSVE4PUg8PDw+Ojw/VDY6P0M0NUg+Mjs1OTAyNzw1KC41Ly0xMSYvPktJMSUaOTAlLCwwOS8sLCs2JzE3Iy0vR2pJMTRYPWZiQUo3R1NgVSo9O0VaPyqPk7CZn5+opaShq6S3srKkqLCnrLjBvbWwo7msqKiww8nJzMG3vcC1t7+6yLbDtbSztbK9ubq+t625tr+torOmqquvtbi0qp67u6iyv7K6oK+0tqmrnq2wopylqKminpyksaawoJ+qqaeiqpujqKCtvKiusK6hq6Kjrp6erKaXnpqho5yfm5qjqaKamaOjlZaTnqGWm5amrIuekZCRjIKLgH+OgXualI2JfH+LhpCPjImFkpiRh5SjipKSh5CakJOBiHx5bH12eXhie3pxcHBzeGmBdGqDZ2RoYW9zjm1ianBgb0FceGtVXk5QUUpJTFNaV01dXm1XRFdgT15QSE1ERjs3SEVLTzxyaEpLOUFFOzs9PTs7PUo0OUI8MztHPDQ/MTgtNzg7MigwOS8sNS4uPS0qTD4qHTQ5JicuMzQuMCsvNCYsOiQ0MEFoWjEzUz1lX0RMNktWZE8pPDJQWz0jkpirmJ+Xp6Sin6ikuK+uoq+vqau4wrqyrZ+4r6uotLrHy8e/t8K+sLS+t8S2w7KvurKzwLa7vripubi+q6S1p6iqsK25sKmaurykrr+0tKGut7WnpqewsqCfpKanoKWZn62oqJ6gqq+noKaXo6mfsLifpLGvoauhrKSbpqapmpqbnqOVnJyanammlpqep5GXkpidk5mVoaqQmomNkId9h36CjXx8oYyNiXmDjIWKjI2FiJOajomVn4iRlYKLl42QfYV7c3B8cXN0YHl4aW9wcW9qf3NjemxpZmRhZoaAYFtyanFMTX9pWFpNUExKSFBSUUlOXF9vVERYWlJnT0hLRUY1NkhCTEk1WmVKQDZFQjk6Pj0+OjpDNTk+OjNARjwyQDIzLzo7ODMmMjwwLDg1QiopLUMqLDQ7Tk5AOzczLS4rLTcqKjwlNTM9ZmQyNE0/ZV1GTz1SWmdIKj8wWlo1KJacpZiclq2gn6GkobersKO0tKmoucW2sq6gt6ytrLC1xsjAt7/CurG1vbe/u7+vrL2wtL+yvcO6qbu7uKeotqinq7Css7Cmmry3pKu7ta6fsLivqaWmr7GboaSgo6OhlpuwpqGeoqevoqCik6Olorewoaaxq5+soq6YnKqkqJ6Xmp2kk5qcmp2lqZmcm6SUlJeUnI6Tl6KpoZCJio+FeoR9hIp5jpeKjYd6goiEiIyOhY2UmYyOlpmKj5d+hpeLj3qAenBxdm9vdF94d2VsbGxqaYRuZnJpbGZpXWRzgWBba3VpWkl9XVtYT09LSEdSVUYyOV5ebVBEV1ZZZU1ISUVFMDdGP0tCNklKSDs2Rjk0OT49PDk4QDg7ODo3QEk+ODw0LTM8PDc1KDU+MSw7QTEoKzY8IjhSPSoxMTM+RDUsLSc0Mio7KzEzOWNsODRHQWZbSFREVV1oRC48MmJWLDKVoqGXlJuqnaShoqC3qq6gurimrL3Fs7Cvo7Wwra2vtcTEvLO/urixs7m4uri6r67As7S4sL/BuKy9urWmorOqp6myq62xoZvAtqSntbWonrK8qaimqK+smaOnnKOmlJiisqWZnqOoqZyioJOkoKS4qKSnrqaepaCokp+ooqGgmJudoJKam5agoaqbm5ihlJGUlpmNk5KjqKSQiIqOhXmEe4SGfZ2NioqHeoGEiIiIkYWVk5OMkJWUjY6Ue4OXjot3fntsdHFsbHNheHRoaWpnZm+GZ2hpZGZpamBpYmpnW2V7Y2BTc1RcW1NLSkdJT1NAISppXmpMQ1ZVXmBLSUdFQy46QjxGPDZLUEQ4OkQzNTc9PTg5NT86OzQ+OEBLPT45Myk4Pjw6OSo2QDMuRTQoKyw/MC1OPy4rLTcsMTE5NSwmLjUtODA1NzZgdEIzQ0RnW0tXR1VgaEIzNzlmTycynqOjkY6jp5udnp2jta2mqrm3p6zDwbawrKO1rqeur7fAwLyywbexrrK3tri3tq2qvbOvsrG9v7iuvLyxpZ+2q6Wls6mqrp+ewauopbCyqay1u56pqquxpZeeqp2mpJGZp62imJ6kqaGcop2XoJ2ntqavqq+hoZ2doZSgpZ+hoJmbmZySmZ2UpZ2roZeWnZSTjZWXi4+YmqigkoiKioh5hXeCgoGciIuCiXx/hIiGhZGElpWPjo+RkZGMknuDlY2Fc319Znhva2psZ3Vza2NnZWR1gGJlZmZlampka3FaXlldbWRhTmhXWmBWSkdJS01SWD45X2xpSEJUU1xbSUhGRkEuPD85QTg5UkZANzpCMDM3PTc2OTI6PDk3OjlETT1CPDAqPEA7QT0tNUIzNz0rKiwwQSpKSy4vKiszNzIyKDU3JCs3LjcyNjg1XXlOMj5IaVpMWkpWYmZAOjNBZkglNZujn5CLrKGYmKCWpbOxobG9t6Gxxry6sbGktqurrqm5vbu7rsCyr66ttq+zuLOoq7mxr660trq2sLm+raaetaugoLCkq66do8GgsaOusK63rrWera+sraKZnKeppJ6Vm6iln5mkoqidmqCblJydrLCmuaiuoqGamp2YnaOapJ2XnpiblJmgkqiWqqeak5qakYuUmY2UlJmpp46OiomPe4JzgYGKmIWHfImJhIWKjIqThJOckpKPkJGWjpCAgIyNg3CAfmZ4bWhramdxcmtcaGNjc4FhZmhqbmxna2pnbVxsa3RxYVRiaGRlWklGTE1PWFFRVmFkgVRAVlNZVEZIRkVALzw9Nz82PEZOYTg6PzI0OUAzNzgyOD83PTg+RkpARDkyLT1BPUE9MDVAOUAxLSsuMzw7SzYvLissLTI0OzYjMyopNi41NTQ2NVp8XTE5S2pbTVtLWGRkQEExSmVDJzSSoZqNjrCdmpOhmamyr5+4v7agtMK7vbmxprawqK6kt7i3t627r62qq7eqtLmuprO1sq6psbe2sbO1uqepn7apnZ6poqmsm6i/mK2jrq+1ta2tn7Gtr6mim5yjq6iblZyno52aqaKklpqgnJCbo6uqqbufp6SgmJmZnaCPa6GWmJxxgpWao4B1kqmnnpSUnpCIl5mAloqhkHiGlIyDbmp+doNxbIaLhn2Ei4ZvXmNhZ4SXhmuLj5STdXeLhH6DkIBnhoBodWlmV1xoc25OUGpjZ3KEZ19kZm5sal5gYYqQhIVlTktEOEZUZ15KR1BQVFVLSFNhb3RlRltRVVBGSEZDPjE7PTY9NjwzZlw1Ojw3NTtENDg2MDpCNz86PkZMQ0IzNDM9QEBAPTI4QEU9MSwrMDg+RzYwMS4qLiovNTY4LCMxJzIxNDoxNzZYgWwxNk9rW05cS1tmYj5HMVFkPSsvjKOZhpWwm5yToZuqraqjvcSvqbfCuL28rae2sKWrpLizsrOxua2qp6y0prC1o6i4trWop6y3s660rbOjqp+0q56hpJymp5msu5Wmpa+yt62upamtq6yloZ+coKemm5ehpaWbm6ennZOen5iQnqeqo7Wvo6OjnJaXmJejiKGOkpqHoYeTnaB/pX+mqp6SkZqRiINyeIyOhYihdomNaZeIZn1yeKFviIeEfo18f6GgoJmAe4eedIiOdpuKbIeBgm1oZWN6bHFhVIZtY2xpmHFYanBvh1heaVtra1uIcW56coZnhoRaXkZNP0dfTUZSVlZRUVJXVWdeTVhKUlJPRUdHPjw0OT05PDc7MDw8Nzk5OjY9RjU4NjA8Qjs8OT1GUUc9LjU8O0A9QD41OUdBODIpLjE8STkvMDEuKi8oLTQ1ODMlJjIxMTU+MTw4WIN1MjVSa1tOXExcZ189SzFXYTcvKIuml4Ocq52ZmZ2fqqqnqb7DrrK6vLfAv6qkt7CprKayta6vs7arqaWxraW1s5yttba0paeps7Gtsqivn6uhsqmgo6KaoaKbrrSVo6SltrymraerqqyopaGgmKCmo5mZpqKkmJykqZaUo5yUk6SlpqG3o6OgpJiUk5iTnIiuj5iUiamLl6KbhbGAo6ydk5mdlHmC1Kh/h5XBm8d5eLGlt5dkgMCcv3mEhHmQhHyQkJHKcZa8nMV7cramu5B7gGyWsauweWhrWLGubmVpvJK8bmh6bnKP2H5TamK2sn6BcpR0mqGqkFdPV2FPVk5GVFtYUVBSjFxXXFBAXERRTkVHSTw8NTc9Ozo5Oi49Ozg3ODs5PkY2Ojc0PkA+Njk/RVJJOi41PjtCPD9BODpKPjUyKjIyQkUvLjMyLisvKS0vMTg2LSAvNDE2QTE9OleDdzIxVGtcT1tNXmdcPkwxW100MSGNpZOApqmfl5yepa2yqLDCvbK1wLW3v8KrprOsrKmnr7Opr7azqKimtaanuK+cs7K2qqWkqLGurrGmqp6npLGkoaCel5ufna6slJ2hn7S6oqqooa2upaKdmpmhp5+Xm6egn5iep6eRnKealJ2hpqKgsKKfn6OWlZKYkpmFr2pqio2qfmeElYatZHCdnJOZpZRxrqGkfni7fWuhkHaxX2q0W6WAZpyRYGaCemZ/anhrqWS+cmemjHaxanyxeHSSlGNtbadtW4SgRWhnh5ZFdZxgfWd8pKeCWV+Lq2mAlXh5aqc3Sq9cV1NtY1tLTldfXFdWO06JT1dXL0lUU0lERUY9PzQ2Pzs4OjkwPTg5OTk6PTxEODs6Nj1BQDY8QEhRRzkwNzxBQz5ARDhARz0xMy0zM0UzLi41My8rLyguMC46NS8nJDIwM0IvPTtVgnYyLVZqXE9ZTF9nWTpNNV9ZMzEbkaGUgqynpZ6jpaqyt6y0vb6vtsSyt7rCpqiwq66pqbCuo7G6r6SlrrOjqbmonrOysKOloKqtr6yvpqefo6Kwm6Kbl5WXmputpZaboZ60s6Grm6KtraCemZagoaicmJ6kn5yZoaekj52impegn6qepqagm5+hlZWRlpGahbWbtXiFqZm1mXeHs5u3fpOVlqiUfmuBpnqChoiSlJJ4q2drsVure4+HlHSIcY+GgH+IkJd4g4KLl4yDoI+EsHZ3n3Fra2x8i06kWEhjY5l+Y2imYHlydVOSh15QqW1jcX6HgGKcLlGib1tTa2hgTEtbZFhcWkI+sXhXWEEjTWhFQ0RBQEExOT44ODo4NDs6OTw5OkE6RTo6OzY6Q0I4PT9LTkc6NTpBRkJAQUQ8RkQ7MDIwMTtGLDAuOTQwLC4oLzMsPjgzMR8vMi1EMTw8U31uMytYalxPWE1fZ1g3SjhhVTUwG5WflIizpqahrqmns6ypurbCsLvCrbi3waqsra6upq6yqaGvvKqhp7StpKu1pKays6ejoZ2oqrKosKilnp+fr5afmZSVlpidrKGamaOotK6iqY+pqKqbnpWXoKSnmp6cop+boKOlo5abnpiZnaKqm6WanJuioJaTkZOSnIPVk5m5cLDCfsaGfNaUm7t8mZWkj42cjaR7joekgqWCeqx5j51Wr3qIfp9quVq5d4aDfKaCk3yYeqp5jZ2Qe7FujoR0kLyFb5RQr6fFilGgemNgqmJzcohtl4hgU7W0yIaAiXxjpDNCnXZdUGloZFBAWGdaZGFKSE1sS1tST1lmWUNEPkU/MDw8NTk7NzQ8Ozg9OjxDOkY6Oz42OkBDOzZAT0xIPDo8REhDQkNEPEVGODEyMTFEQy4vMDQ4MystKS4zMjM5NzEjJTUqPjM9PVF3ajYqWWlbS11PX2ZUN0c6YVE3MiWbopOYsaiopbSqpbWopLu3wbC5wLG1tLuztaexsKOwsqafrraom6i5rqOvsaCztLCgpJ6fqKqxqbSppJydnqqXmJeWl5WWoKmdmpanrbCoo5+PrKKolp6Xm6GloZiioaGhmqKip5ueoZ6VmZumoJunlZubn6GYj5KUkZyIsm5otXGrh2+OpnK0c3K2e5mXo4uOnI2ifpGgpX6wdoOR0tF2XK57hX+kb5uqpmuGhHytfZeZj3uxc5Kdj3mzZZZ0hJ5vnmaUUsiLWsJcn3liX61gdnOHYpeIXlnKnW+/gXVNS7VTVcZkU1FqY2ZYQU9rX2xoT1VHSTk9VlJbV1hIQz9KPDI/OzU9PDQ2Pjs3Pjw9QztHOTtANzs+RDsuQ1JKRz4/PElKRkNFRD5ISTkxNzQ2QT4vLjI0MjUyLSkuMjYsNzQyJh82MDs1Oj1QcWg5J1dpXEJPVF9lUDVHPWFNNjIwoZyRpbCtpKq7raa1pae2u7yyur+3trS6urOltLOhsbGin6yvpJimuq6ksbGctLiqn6adoaqksqisqqSanJqonpWUmJiSkqKnn5aSpauvpqKWk6yfpZKUoJukpp+UmqWmoZqjn62aoZ+ekJaboZ2cpZWdlZmin5WYlpKahax7d6h2o46Jh6lvrYqCp4OYmKGJkpqKon+TmYiuhX+Cs1xys1KufYOCpH9x1313hH2OnoaZmXevhoqRnIh4s2GaZZqBgpRsklqwWEuadZh5ZmCtXnd3h2iYiGter3eVno94bDV5yK6yX0FUb15nYEVQbF9wbVZVTS5lY2lTWVE6QURATDo1PzkxPTwxNj85OEA9OkM6Rzs8Pzo+PkU5LUVVSkVAQzpNS0pCSEc+R0s5Nzw0Njo+LzA0MzMzLjIuLjE4Ki4zMiUhMDM3Njc9UGtlPiZWZ1xAPlZfY042R0NgSTk4OJ+dlKC4sJe0wa2os6ipsrq4tLi/ubeytby1pbezn7Ssn5+oq5+Vp7arqLGxq620pJupoKCoobanpqqjmZ6VpaGUk5uZkpSipZqSkKasrqahlZqpn6KPkaKZqKWglZqlqJ2cpJ6tnaGdoI2UnpudoJiZnJaXoqCTmJCmnYapfX2leKGPjoOqcK2LgaeGlZ+hiJeXiKOCkYiUqnyAi515b7FaqIKCiKB5dNh/dodzp4GOm42SpHyWkJ+Ee7JenGSgfoOVbJJcq1tak3+Rf2hnqmRye4FrmIdzXaxaiaCOa29lT0pDoVxaTHRdYmZNW2FfcnRfSlY2SpuTWEhFPUhGQUwzNUE4Ljs+MDVBNzhAPDY9PEY/Ojw2Pz1CNy5IVkpFQUg2S0lOQElLQEVOOjpANC47PjAwMjE0NCsqMDUvNywmMjEoJCQ2NjcxPFBlZUEmVWZbPzJVX2JMN0ZJX0MxPzihnZmZv6uXtMKuq62ppbSwt7G1v7m5srC3vKm6tJ+wpJ6lp6eek6qwqbCptayrr6GYoaCmpaS6oqOroJebkaKglZSempSYnqCPjYuor6+mnZebp6afjJKkl6eqp5SXqaeen6CjraShnqGNlaGZn6CSnZeclZ6hlZaOq5uPrm1ytHKpjHaKpnO0eHOzgJGkopGcjYmkh5B3uG+Me4uia2u2WqCFZZeXaaGip22TcrR0k5h/smqFkoita3WzYZ1mom+HkmqXXK1gTaF8h5FSc6Nten9+b5iHcVyvVjycd2VUb24uXKdPYlJrZWJsWmNdYHB7Y1RaUT4+bW8zQkJAP0w5ITdANi47QDM3QzU4Pz8zOzxDREJKRk1JRjYySlRLRUJJNklKUD9ITkNGUD08RTUwOzwwMTAvNzUsKyw0MjYvIzAwLCwdMjg5LzlOYGVEJ1VkWT4vVV5hTDVGTV44MUM4pZqbnbqhnLLArq2rq6e3qbivtcC1vLCvubirwbapqqCbpqShnZGqqqi2o7Kor6qgl5ynoKSruJ2jrZuWmY+lo5WNnaCbmJyfkJOUq7Wvp5mUm6ypl4yTpZikrKKRlqqxo6Cep6uxmaGjkJmil5+blpyXoZOcqpyUkKuZh9SSmrtzsMOAw4Z+1ZabuHiHkJeMmIqMp4h6o7Z1fXd2woKasmCDunnAfHW4YrWBjIepfZaBrKlxe391vIinoGmdYaaOr6F+jHSHq32+bnO8dLKDdXiBim6aiHFujaR0vV53fVthebxrWlZbanpeamFmZ2Jtd29ZW1lDQUByP0NHKzVIIic7PzEwPD83OkI5OT1DNDxATlpeYGBfX19aUFBSS0VGSjRITFJASk5FRk9CPEU4ND05MDIwLjg3LSouLzE4MCItMSwzHiw8OjA4TFhhRidUY1g8L1ReYEs1O0xbLTZBOaeanqG8opexw7Ctqqqssae4r7bFsbqxrruwrsGxq6SinqOhnJuRqaSqsqS1pq2kn5aaqpmmrLido66YlaGQpaCSjZyjnpedmpCVkq+5sayVl6Onp5SRlqSco6yekaCoq5+cn6mjs56jpY6nopWimpyXlaOYj7CgkpSpnoWQmbWAkJGMt5V4gpOatXdta25zbnmPhI6JdJ7Bu72ae4GyqHCAdJG4g3yGhoyGjXuKho2XfKS7ub2cdXq0o3R2l3V0sHWZnmaGaY21dHJwd7aMXoB6fYlog3lteWOLrHB1hX9ZW6dqRGRZU2ZgY11jUWdmcW11Qk1QTUQ7Wk0+SjM8MCA4PjsuMz1BOTk/PTs8QzZCVFlaWltbWlteYGJgXVNHR0g0RElUQktOR0VPRj9HPDc/NzA3MC85Oi4sLy0qOC8lJjIoNCQoPjcvN0xUX0cnU2JWOCpPXV09KzpWVic9OzynnqCgv6WWtMO0rKunrKupu66wxq+1s663p7S4ramioaWeoJ2ZlKukraqmtainn5uWoKOerKS9pqGql5SdkKKbko+iqKKTnZeTl5SytbatmJ2jpKKLkpGmm6Wqm5aopKWcmqGpp6ejqaGRrZ6XpJ6Xl5edno+wqJSbp6GOan5pnKZ4h3N9mo90emWHer2+wLpvkoJxlYdfcmpaXpqJYWOIjpVrYH+VY22dd2KVa3+alZRlXmBjcZuKaXKMfYaVZ2p+cnR4fX1iW3d0gWhQXG6EfXuLa1hseoJzSUpvhnBOdE1FV11mYExbWGZjX09bbXVpcVJPREVNPEhJPUw/MiwyQT84LzU/Qzw5O0A7PUM+UlZWV1laW1xcXWBhYWFgXFVHNURGVUVKT0hGUElJSDs4PTUxOi4wOzouMC03Nj01JiIvKjIsJTs4LTdKUl9JJ1NgVjQpUF5MKDM9W08nPzI+qJ+oocGjm7S6tqOspa6nqLWxrMisr7OrtaO+sbKnoKKpnaKbmpmspq6kpbWppZuYlaGbp62pvqepppWUnJWgmpOXpamokJ2Rj5ecsLK/rJunnaeiiZORqZqoo5ubq6Cjmpujp62jn6uimrCblaeglpWdn52XsaSYoaeYnJGdnKOjmaaimpyampmPloFnbX1xd5KXlJGFirWqjYaYlY+KjJiXh5SVioSSlJGJjpGTmJSYl5qgopqclKGdjYJ6pYZsanyQfIB0iYqBcYJ4eXZ2i4B8imtzgXSDdWR3fXdrcHptYGNdcGdNWVlmaWBXWnB6bmxmU09GUzlPWk1STygrOkpCNjM1PUBBOTpDPjxFTlNTVFZXWFlaXF1gYmJhX15eW1RLQ1NHS05ER1BMT0k8OjszODksMjs4MjApNklSTzgiKSsvMiM0Oyo3Rk9bSiZSXlMxMFReOis9OFxLLDwtQLOgs6K/oaOxsregqaWyp6WwtarJq6yxpbWmwKe0oZ2kpZyjlZagqqaso6O3q5+Zlpafl62ppcGeq6SVkpyXnpiTlKKfnqKnk5GZqKeyw6+aq5yqn4+WlqmdqpycoKyYoZudoqWwp6KlqJ6umJennZmaoZ6enLCgnKKmlZiTmJOgoZWjnpegjpaTioqNjpatj3yVm4KSgouqqIaBmJaKhI+fiHuEkIeFmZKIhoqVjpuXjZCXnqOWmpORnY1+jmahs6+FioR2eo+KfHZ5em9mepGBgIlrdYF5iHJoc396doOHgmt0ZHlmYGplY2Rma1lre3BpalxSTFBEX1VFQD8/LDRARjs0NTs+QTs8Pz4+SE5OT1BTVVZWWFpcX2FjYV9eXl1eXVhWSktMQklPTVJKOzw6Nzg2LzI5NjQuKCYkLTEuLykrKjclKzwoNkNNTUQvVF1RMDVNWzE3RTRcRzU8LEC0oLmvvqyrrrKyoKqmsa2irLOwxbCqrKOzrryktJyfpaKhnZmXqKWppqSls7WelZSdmZmwpq2+oKyikJGempmUkZWhnJeonISeqauis8izn6qjqpeWl5qnnaibnqSrk56fnaCqr6qmo6uirZufoKGZpJ6cnp2vo5ifqJOYl5yRpJmYqJ2al2WCknxlfo2Zj2N5jWxoa3qRpKtrZZqYfmeFimVlaWh7jqGPa2iNl5Gid2tqi5ijnphzbG56hI2HelhlXoWCXmyKiYB2XGhzd3eSgIeCbniCeIBzbXmEdHeJiI6De2mGWV5rdGRdc4lpanxxbGNdUk5YSmRYQUo0PUY3P0ZENzE8PT9BRDs7REdISElMTlBSUlRXW15gYWFgXV1dXV5fXVpVT0RIT0tTTj0+PT02NTM1NTU0KiYmJSwqJS8qKyc2KiQ7Jy9BSltKLzdaTzYpRVkvRE8xWUM7Py49pZ+6vLmvrLOwqqWora2wp66tsL2xqaekra+wn62Xn6OdoZqZp6ucraOlqKmyrp6Vo5Cir6a3uaWuo46OmqGZk5KboJmYpJV7payiqLPDt6Shp66fnpWeo56jnKOqqJKeoZ6gqrGqq6OqoKmbpp+ooayWoZulsKSXnKqVoZ6bkqWXnqqYnn69g4dytHKEnYataHi5xLhxk6Kje6aYmXOqgnzLwMC7cYuih4KffZWYiZ7AvYKWnZ2NncLBe4J7koyaw8B9aqWxb4yAb8p6f5t3koOOgXZ6gX95cXp/h3F4hY2TeW12k2NmX3hkYGWCY150Z21kYlhMVklRWkhPRDJJRT9EQj4vPD8+QEE6OERDQkNFSElLTU5QU1ZZXl9fYF9eXl5eX19fXVxTTVBHVU5BPz89NjQ2ODI3NiomJSMpKiYuKyopMTAfOSojPklbTCojQlAvI0ZbM1BZL1VBQjsvOJajuMO1sK/AqaiUo6+psK6tprK1r6mlpqawq5+rmJqin5ybqqeinKyjpailpLSknaKSpq6ruLOnr6KRkZqdpZKRoKGXm5+dh6arpKutv8CxoKmvqZeSn52imaGjqqOToKGenq2vqaymo6OnoaWmnq2pkqSbqa2pnJ2qnKyhlpellqGjl5x/zpR4eqSBeZWWm1+uj16Op4GioHynlZt0q4OAr15jjap6p4eFoHSXkoizY4KrhqCOjbNqhK50fZaHuGGDrVmjzW6PdXvae3+ZcH6IknZ+ZXuIdnZrfYhufoWRkn5tgY9gcWtwZ2BfeWRccWhqY2ZgUlRSV15LT0M1QUhFRDg+NjtAP0E7PThAPj8/QkRERklKTE5QUk9TXF5fX15dXV9gYF9fXVpXT1VKPT8+PDU1NzgxNjQoJyQhJywmJi8oJiszHTYwJDc7U0wrLC1KMCc7XDtMLSFQQEY0LjGtwr+/tbSwt5edkaSqqK2zq6WyrKyrpKunr6qgp5uZpJecoq+foJ6op6OloZ6wrJuelaeurbGqqKyglJKbn6WTj5+ll52no56tpKqwqMDGs6ipsa6Wkp2copefqaqflKGfnZ2usKirqZynp6Siq5KttJemoqqpnaOnpaGwoJKap5qgmpSUkZegcYWMl3SEqIdxsXydcax+oZ6BpY+ed6qCfa1/nHKtfquHhp92mJJ6fJd+qoiijJGMnX6re4mTj5+Ae61WnMR6j2+SwX2BlW11cIxtZXZlhm9hd25yb4qLkpCDbZGRZXB0dXBgZ21lX29paW5mY1dTXWFZUlNDOUlJQEQ8PjxARkRDRUE9PDw8PkBAQUJFRkdFQENJU1dZWlxdXl5cXl9hX15eXVtaUkM+OzkxNDc4NDUyJiMfHCAxJyAxJyAnNB41LSY3PVdKLTwnPjEpM1ZARiEcRzpDMS4rsNTGxrK0n52jjqOjoayvtq6psaeoqqetq6unoqOdmaKVoKarn6GloKioop+dsKyXmpaop6+sqKepnpeVmqOikZShrZudpqOvrKOrtKq6zbGtpq6rlpScnaKYn66snZagmZ6fqrOpqqqbq6qko6ybsLGiqKyupZimqqmpsaKSlqOlmpSShKRqpHWJeql0erJwgqWJmYxxiKCah6RgYFKrhH+ug5t2roGmhoafepmWhntmgKOJpJmFgqN9qX6BlIeuXnypVZ2ikoF6op+Ae8OvxYxzr7OzuXFiqa/CdGiNjZiPgW2ak3BueXh3b2xmZWVycGZ8aWJdV2BpWFhVTU1RTENDQUI7Q0BAQkk8PTo5Ojw9Pj4/QT04NjtETFBSVFZYW15eXVxeYGFgX15dXF1bU0lCNjc5OTY3NCwmJCIgKCciKy0iJC4hMy0mQERXSCxHKzU2KjFQS0wjIEE5RDQsJ8PJ1tW/oZmrp6Gvop6wtLCvqa2ip6aqq6uppKagm6WfnKanpqOcrJqirKGkn6+inZqSqqS1sK6gqZudlpSmo5CaoqigoKWcsaajp7GstsiytaqsqZWRnZyimaCls52aoJSdn6esrKSumqyqo6KrorOuoqqzsaGaqqiur7ajk5ajp5ibkXyqbJ6Eh3WreXywb4KkiomflpWflIHSuLS4yYCBsl9flKmDpIiHoHmYlZp4qsl0maOVp6mQk5qMf5uJmsbGeGWhgqVzgZ+Ogn2vXnC1Y7F1S6OGbadHgpNkj5Ceknxwl5OAcXt1fXtuW2Vqc3FmgWpfYVlkbVxeWUlNTEtFREFCPkE8Qj9KOzc5Nzk5Ojs7OzMuNjxBRklMTU9RU1daW1tbXV5fXl9fXlxcXFxcWE1CNzU2ODUvKSglJiUkJiksNEVOUFBNRktKVkYqTDAvPi01T1RRHRw7PEYyLCSnpMHGuK2psq2spaKcsrmsqqGmm6ilqquqp6CmpZiqo5+uq52moKyanqmlnae2n6KXk6iqtrKsm6acoJWQpayRmZyno5+ppq6ho6epsLTCsbOqraiTiZecpJqho6+mmKGVmZylpqubsJ6tqKeerKO3raGyua+dm6+ns7OzpJSXp6OZn46CnU54moF/n3qDo32DpISHp5+cnpOEuHt8ebmCfszGwrZ4m6GRi599mpaWinaemIqkmKOofrCFnYWehKx9mZRhpWyjcI+FkIF9l4NyrGCkc3GAmmC8fVJVdY6SpJd8fZOSi3V6c4V/cVxtb3hyaoJvWmRfaG5jZF1LTVFUQklIRkk6OUs+QjEwODg2Njg3Ny0qNT09P0JER0lMTlBUVlhZWltcX19eXV9fXFpaWllVU09IQDc3Mi4sKi4rKicmP1FUVldXV1lYWFdVT1VGPEUzOlBbVBwbNj9ILC0gi4eZqaukq7irr6Cboayzs6afoJWmrq2uqqedpqaao6egsq6iqaayoJmqpJSjtqKilZeiqbS4pJyinaKTkKGxmZ6cp6Whoq+unaSoobayw7Guqa2pkYeQnKecoqScpZeemZqapqSpmq+irqWmmK+lvK2ht7etnZ21sriws6aYna+ho56Fj9G1w7d5h46FkZOQgaZ4lKJ3jKCRhKWBinGqhoS0bnJqmaOblYqffJiZhoePc6+CpZuijaaLk52JlJCbbXCyXKVzk3qcbJl/e5l9bqlho3Fxf59ic7K4aHiPlKaZfoyNk4x4fXmOgm1peGl5c26AdF1kZG5tZmdgSltYWDxIR0BVM0BGPjwqKDYzLjAxMykmNDo7PD0+QENFSUtOUFJUVldXWV1fX15eYGBdW1paWFVSUlFGOjIyMzAvKysoQFFSVFVUU1RWV1dYWFdVVlZUUU9RW1UlITJBSCQpJZNzjYqtv7+7urWelqekrbWho5mVo6mnrqqrmaain6ahoLWno6mnsKOUrKOOpK2jnZCamqq0tKSdpJypkZSXraCgnqajnKectJqhqqO2q8OvqaupoYyEjpyhoKailZqanJmbmaelppisqK6jpZuup76slL2wrJ+isLO5q7SnmqixpKeYeqiQfXywd4qBpKWInG2yb6GHrXyhjoOnlZiArIiFroWflKmgoZaGn4CZlYB7kn6rgJ2alouqeJ2gj4mTkoB5r12jgXymp2SdgHyXdGuuXaVrcIWZXWBbjKBtlZKnmYOUjZeMe3uDl39rbH9ifnRtgHpgZ2VxbmhnaENaYVs9S1QyVThCQkM3JCQzKycnMywgLzY2NzQzNTlAQ0ZJS01OUVNTU1ZaXV9hYGFhYV1dW1pYU1BPTkk3MDUyLiosQVRWVlZUVFVVVVVUVFVUU1RWVldYVlVVUUhGSUojKCi9kpqEqcbCtsG0n5qsoK24paOOm6Sin7Cvqp+kn52tmZ64oKOroK+pmq6hkKuppJaJmo+usKymn6earJeYj6yioZ2loZqknK2Yn6imtqnAr6Wpo5+LgI6bmp+mnpKVmpqUmpqmpaSaqayso6Sgqqi/pJfDrKqioauyuaqup6CzrqipmHavfpCLnIWHfLquiphlsIxlla19oY+DppWagayKhLCFpZmkoaGRhaBbbGqBs2B/rXt7goGxbGdvmZeMiLBbfbRbpINryKJln4B7vFl2tVqyfVKvgHqsWIChbpiQqJuLl5GXl3x5jp1+ZHN+YoR4dIB8YWpncW1mZWVPVWRcQVRfPkooPjk9NCEiLCUfMi4gKjEvMDQ1Nzk5PEFDRkhKTE5QUFJUV1peYGBgYWJeX1xbWFVQTUpHQzU1My4vQFVaWFdYV1hYV1dYV1ZXV1dXWFdXWFlaWltcWFdXR0I70p+zsre9u7TBs6ObrKaltqigi5qgn5yzs6mfo5+dtZigs6iqq56vrZ6sm5WvqKKOiJuOr6yop6Knma6SmY+omaKdpZ+Zo6KlmZ+jqbKovK+lqJ6djn2Lm5WgoJmPkpqbkZqYqaChmaiup6Wmo6Wpu5+gxqelqaGrtLWsrqaeu62srJWAqZKjr46bgIekl5iQgYC4w7qDjpyThKeWnIKsioKviKabm6WqkX7VvcKqYqO/vX1+o4KD17q4tYWUk4Oevb6EaqOBb6uEbZ1/erKwx4Nqq7C9rHh3or68dIGWjqeckJuRmJ16gpGbemN9e2SNZ3mCe2BrZWtqYlBhW1NqXEBVYUNOKj06NC8eHyQeJTIgHSQoMDQ5NjY3Nzs+QUNGR0pLTU5OUVRXXWFcX19hXmBbXFlUUU1IQz88QT81PVNZWFhZWVpZWlpZWFdXWFlaWllZWFlbW11dXFpWWFRXWryVs7Sxv7mxvbKina6mpbKmnYyYpb+quLGoob+mprKcnrGcuaiera+lp5SUsKuXjIObka6mo6yhpJypn5iLo5KmnqecmqCoopieoKytqrmuqKOal5J7h5mRppuSjpGYmI+YlKmaoJipqaGqp6Giq7ueqcWjoK+jqrO0qq+poLqnrq6ac3WqpLeGZYmgcGetj4qPbW94pI+Zn4F1rpmVcI+LcZWoo5uXrqRybW1tZYp4b22CmXGAeWlxaWeJlpWYcWhphIZncIZkXYljam9ZXWd+d6ZgYnGOkW9lZICNk4+imJiZkpeffYeOlXZmh3hojmt5f3lkbGNmbGJLZFdKbFk6UWVFUidLOisjHCAbIywpGBsYLTIuNTo0NTc6PD9BQkRFSEtMTU9RU1ZdV1pcYGBhXV1bVFBMSEQ9OkFCN01YWlpZWVpZWFhZWFdXVldZXV5eXVxcXF1eXV5dW1tVV16ola2zqbm5srOqqaGunqOyqZiSvrLDyL62qp7Aq6yjoKesn7qjpK2sraaNl66pkIyFlZatnqaqoZ+jo6CRi6SSp5momZajqaCWnKWmp6+6q6yam5KSe4SXjaWYjZGRmJSOmJWolZ+YqaObsaeeo6y6n7DBp6Szpqywsaqtq6e4o623loqgqKW2nYmWopiHqZqQlJ2TqrOZm6OroLGWoaGdn6KcoKShlaunjZOSjIeSnJyUkJqTmJCOlYWBpJqXlY2LkpKKj4aEfWeKf3SCdnSHi3CnbXuUkZOSgYGOkJCPnZShlpmXooOIlI1yaZB3cIt4d3x6amxkZG9kVWBYQGlbSGNhT1orRj0rJyE3NDAuHxwhJTIoKjY5OTQ2OTs+P0FCREZKS0tNUFBRWFVWWV5gYWNcXlVRSkVEPjk9QEFTWFtcWVdYWFhYWFlYWFpbW1xeX19gXl5eX19gYGBfWVlgppapqqW1tq6uorCkrZ+gtbGQjqzGvcS7uKqipZ6bpp6wqKO2p52ptaaokZisoouIiY+cp5aspKCZp56ek5WjlqiaqJmUpqGjkJuomaG1uqermJqQjXyBlIuglIqUkZWQkJSXpZCfmqqgnLajnaest6euwa6jt6evr7CsqamyuKCuvJmRpaSmtqKSnaafjamfjZKfo6yvm6GjsKivl6OgnKOpnp6dnJarnZKZoZuUkJaqmY2ZmZaQlp6RiaCdlZSFkoyQjZSKgH1mi4Z1hnZ5iINznGqGkJSUkIl9jJaSkpeToZOdl6KEiJiHenKWc3qKf3J8f2pvZF5wamBbX1luY1BgZVBbOkdHRT4yPT03LysmKykmHSY0MDY2NTg6PT0/QUFDSUpHSktMTVNTU1VaYGBpYGVWUEpBQ0I6OUVNVlteXltaXFtbW1xdXV9fXV5fYGFhYmFhYWBiYmJkYlxbY5eVpKijsLOsrqOpp62gp7WqkJCdpbO7r6ysoqOaep2isaSlsKmWm7imo5OZqpyOhoqJnKOQrp+jlaefoJKWmJuuiqqWj6iZp4yZqI+eubakpZibjYl5gpOLmpOJlZKUkI2Sl6KNnp6pnp64pICEr7WisK91pL6jsqB3eaCqsbuUdayknomAqn9kXGJ2oI6knoSXfm6Ts52jp62qo2Wdn5JzeZmXcICYqJdsf6KoimWcpZyRl5iVi5GckIadmpCVg5KGj46SiYR3ao6HdoZxfIaAgGFph4qUkotadZWQaGiPjnJ6ppmZZXmZh4J4mGqDioNveYBrcWVfdnBsa2hcZmViYnBTXD5NTk5TRz5AVEM6MS8eHyY0OjMxNjY3ODw7PkBBQkZIQkdGSUtNVFRVWV1gaGZnV1BKPERHOzhVUltgYWJgXmBfYGFhX1xdX19fYWFiY2RhYmFhZWRjaGReXWablaajoa+xrKuppamuo6etpZKWq7awsqaaqqerl3OMnbCfqKunk5e5oKCPnKSdkX+IiJuejayaopSnoZ6Ol5GehHWuj4immqiRl6SIm7q0p6CZmIuJdXeTjZaTipSRkJSMkJOgjpugp5mcspaAjJy1nbOMko+8p6B+p6J6oq63gY6Opp6Di4aQsamvjIqWo5p5gYushpydoqepp4eVhZh3pZt6h5uBl6aCgnucsXqKhaCXmZSYlYGRl5aEmZljeYeQhI6PkYqDbXCPh3mAcYCBhX+GdIaElZJ4lmiSdKCadH2ZhKGeh5h+kouDg5lrjo2FbHh7cXFnZHhuamxqW2VramZ0XF9IVExRQEU1LllVVTcpITA5PT42NDM1Njg7Oj0+PkBESUBKRUpLR1NYW1lbYWBoZllRSDlFTDs+YlZeYmRlZGBhYWBiYl9dYGFhYmJiY2ZnY2JhYGVkY2djYWFonJejn6aurquorKCosaanqqWZlK7IvrChlqaptZ6Pg52snKeioI2Qvp6ajZ+aoJB9ho+Zl4isnKGWn6CRjZOIhoCRqI2Hopyjk5eehp66sqeem5KOhXB1kImVkIqUj4+bi4+Sn5KXoKSWnqyIn7SJtJqtisqHqq6It4WMr4KwroOpjaWYjZ18qI9ye3ecj6eWaJWkebSLn56mqJKYwoF/q4iYoXGegJmkfZeFlbGAoXyhlKCQmJaAjpObipeRi3yFkoaNlJKJg21zkIV/enKGgYR8hHWEgZeAj8Vmf6mHj6NrnoOim4OagIyOhYqZcI6ThWh3dHx3aGh1cWdoa15kb21nbVhoR11STTJFNDZOYWM3JjM8REdEOTY0NjU4Ozg+PT0+Qkw/TklKTENQWl1cV2FdamxcUUU9S01ASmRZXWNmaGdiYmJiY2NgX2JhYmNjY2VpaWNiYmJlY2FmY2JiaZSXop+wqKmopaugpLmxqqummpSgo6Sqo5alqrejr3+hp5ylnp2JlL2ak42hkZ2QeYSWlpGIq5mbm5mhhY+Mdpucj5+QiJ6km5WZmIaiua6kmZyMjH5ibY+Lk5CNkIyNmIuQkp+PlKChmaGofqGnh62doJatj56cnZGFgKCNqq6Go42pmYyafqJ2gJmUa4KsdU2reIeNnZGbqKeAqat9g6F7eqdpnn+Sa2eXhpe2iZ59bmBkWYOWf4x7ZGiKcpl9eZVsXXuWbV9TcINcX2t5g2BZZYJ9g4CXcKeqa4OjbnKlcJ+En2lln2xbbop8Zlpgg39iV1Bvd2ZtdHJram9eanBtbGpYaU9dWEY5QTRHRF9rNCxJQ1FNTj04NDg1OTs2QDs7PUFPPlFSTE1CSlxdX1deXmJ2YE1EOk1PTVRiXFxmZmlpYmJkYmRkYmFiYGNkY2FjaWtkYmRkZ2RiZ2VhY2iXlp2guaGqo6askaG2vKyuo5mXoKKlrK2hna61oqiSoaCfppuZjZi0mZCLn4yVjHWBlJKMiqaWlZienn+ShYWspIebkIqYqJiZmpGHpbGnopWaiImAaW6IiIuOjoqLjZKLkJKijJSeoJyipX+TgY+joZSgd5yWj6eDoad/hqmshKV4inyEmn2icHKTiJZ7nox5bYecjJmQm6iaj4ede4Kic3amZp5+dqRfmHp9knOibpi3tLp0koeCf7WoZIHGuHtwlbeLcYCapGNzrKtgfWqds35ufIaCjoKLmHF/o2xyo3OehICkYJyYs5ZxfJeftHRzW56yg2pib3R2cmhvWGtsc3NmXWleYktFPUQ1UUFacjI9U0dfSlI9PDM5NTo6NkQ7O0BJUT9VTU5RQEVfXltZWGBgfGRIQzhMV1VWYmFaZmZra2JiZWFkY2BhYmBkZF9gY2tuY2NkZGhkYmdmY2holJaVo7iZq5yToI2kt7WuraCbopyjo6atnJuxrayTl6GZoaSZmpSeq5uLiZJ4i4ZwgJaNiY+hkJKUnZd9kImOqKCHmI6KkaKTm5qMiqiopZ6PloeEfmt7h399kI2Di5CQiY+UoIOXnqCdoJ+LiXecmKKMn3Khi4eoiJulj5anqn6tjH56oJl6o5N4gXSWiI2cfZagh5uOmZumhqJkoXyIlpCbjWyeaJuNbpqZe4CKp31yaHSrg52DdKpnlJpdm4V2hJ1oqmqAuGZcqHCBnGGVjF6ndnaIiX+eaJp1hpOSl45/n26akG2nmV2ofni7a36qW46EXbRnXG5yeXhraVxxanl5Y2BmWGJBUUVON1ZDUm40S1paX05aREAxNTE7OzdIPzpDSFU/WVJZXT5EYl5WYFFhY31pRUI5TltdWGRmWGZnbm1iYmVfYWFfX2BgZWNeYmRvcV9kZWVrZWNpaGdraZWciaq1m6eJY5Sbq7qysKydppycqJ+erpuesKisnZekmqGfmJaWoKOZhomNaoiAcnuXiIuWloSRlJiPeoqElqOdipSPhYudkZyciI+oo6CZi5GKgIBpgIZ5f5eMe4iOjoiPlpp/k6KfoKGTmHJon4qfj4xwkoyBqYeYnqKnn6d8r62joriXd6OzoqSAiJR5nXurmn+ijp2bl4iXcaF8hY2vtX1rmpGheH6YtKOjq6iEmXybfZ2ZfnSqWl1ve5aLeJ5iTH56eoVjeZdCTJ5ZompxfI5tgYmEmXWbeIaJsbN/f5uTp3aBnW1yfZRvmXNqpF2VdkhlY2BzcX5/bmZgbGl2e2RlYlJeV11VVkBZRlFnRFNXW2JYXklEPUI4P0E6SUU4TEVXQVZRW1ZERmJcWmBLYG1+cUVDPFVfYlplalZnaG1vYmZnXmFhXF1eYWhiX2VjdmxeZWdma2RmbGloa2mTnYGxrZmEVF6gprO5s7OpmqKMnKucnKmUoaukoaiPn56dmpmVmKCdloiHiXeFgW55lYWQm4t8kZOWiHJ/iJKhm3ORkICImJSfmoSOqZyalIqLinyDbISFcYKhjHiFjYiIkpiVfJOjoZ6iiK6GfbWEjp6ce6WWeqmBlZyPiqCcfKdod21+mXShc3F8noaZcJODrn2kg6aemoCjb16oZ3WjY2+lYZzTkHx7mXhyc2OihZB+o3Ojj3VrkLOLYIKYiXOqsqi8f3eDbX6+pqm0XpxufXGXboBzonJdpGdzpmFopm2b1Jl9hJpveHqXa5t7d5dzbamkZ2BleXCAhGtnZmRudndnYGNTW2ZRUWFIV0lUYFdTW2VqXGVRRkNLTUpLQkpFOFBAUU5XUllPU1FgZmVpU2N3eXdJRkVjXmVaaGlUaWhqb2NqZ2BjYFxdXV9oYmFoZXxkXmRnZGtkam1naGxol5t/satUXEt+qa+xtLCzo5uZhZmooKCkjqSooJipipmYmJOZk5KgmI6IhntwfYRofY+DlJqBd5GOjolvf4aQk5Jsl5N8iJGRo5WDjqqalJKLhYl5g3aIgG6Cn4d3gJOGiJmilnqToqSan4mzoaK2i3qsp6SupXCogJqQhYCbkXukgKGZhphynoSjrq+Kl4x/jKSNloOuoZR2tLW1yaFzlIqBn2Cdl6lteZWGoJt1oYd3oH6RloqAb0xmo5Jwm4dypHt5dGGDgWt+oGtxZGCccn50l2l6abO1tMamc5h+ep1rnJurdYSbbXV3mGmaenWYcVBFfbReanZreYhmamhidHVwblZeVFlpUFNoSVVMWVNVXWhrblZnV01KQUpNS0hKTkFRS1BlY2ltZXVzc395fG51iXt7VFBObF5oW2tpUmpoaWxnbGZjZV9cXVxeaWJkaWt7X11kaGNqZm9tZWlsZaGciK+mhGY/lKGyq6+vtqKikICXqaKipYylp52dpoKal5aNl5CPnJOOiIN5anmGZYOMf5egeXWPiYyBaYSFkoOMhZ2NeoyKlaWSg5epl4yRi4GJeoB9i3lwkKGGeYGVh4mWoJV/lKWonJaWhGZueJxsomR8caV3m5hwZ6aAlot7pHqfloOXcp52gYqUlo+5bpCKomJ9maGViG1yaatqdaBtbqZfmmmLkGiWh5qVdaKAfZpgi4WMdG+IYmigZZ5+aZp1b2NmiIJtcqJaX1tjoW1diYxve35zcmSlbXeiZGenaJlzjJlvom9TiZBvoF9lp1SLXlSYbm1za3KCbXBpa3lza29SWVdXZlpTbUlYT11JWGloc2pZa1ZRUkVWXExYUmFVaGpfd3R6fXB8fHKDe39zdo2AhHZeUXJiZ2JwZ1BqaGhrbG5oZGdfXV5dYGtjaml2dV1cY2ljampzbGZrbWOcpJimemV0bYunrqSpsLGmn4uAl6udn6WMoqGaoqKAlpiTjZqPi5iQjop7hnGAiGiLi3yYm3N0iX2Qe2SCh5WKiZWZgnyIhpankIChrJCFkIqCin2AgI5zaI+lhH2GlI2ImKCOiJOqp52JpniWm3+kiJaMspiekIKvl5+ld5SHeal0pI6Emm6kooyShIyDu259pa+ChoaGk5acoHylenGolaCWZp5+b6tjloqVkneobKmigYl1h4J3q5Gmh2qRsGt2s4ypa4qGbW2fnpKVYX+ri6p2f3+MpZ52n32EpJWdoGqbiHesZ5+tjbZ0d76NpJNZg6aNq2F1cnRwfHRxY2p+bmhsU1ZbVmFiXWtNXVJdSV1tbXZgW3FZW2BaZ3Rlbm9xY3F0YHh6fnlyeYNzhH6Ae3uMgYKAdmJ4ZGNtc2RSa2dob2xyamZpYV9eXGJrYm1sem9cXGJpYmxqd21nbG5ilaWqnYGAnqSWqaqdqKeupJmJg5irmp6kiZqlnamdhYyajoackYWSjYyNdIZ6iIRvjYR+mJN0dIZykoNtf4uSh4aTj3x7gYWXpY1/paaOgY6JhZV2goeSb2yLqYGDi5SOiZyfiY2Uq6Ogj4B1lJaIfoF5lK6jf4GbcY+FeI+Kg357cqaMcX19epeWm4SOeHt+foeUlZOKdpCYn6CDen2Ja4yFW3l4cnpwaG5+kolxf3SCj5STcYWDgmWMf16Bf4t3dXOUdW95bm6HbYSFXnZoeI5lgIGFjqmbfXR8lmqJiG+Adn2Gdm1tZ4xzeXuYeIRba1h5j2lud3Jxb3h4cF1shm5qZ1ZaYFddZWtjVmFVX1FfcHh5bGt2ZWpranZ8cXJ0c2FvdWJ0e4F4dXqDdoCAf4B4i4WDfXttf2xkeG5eV25naHVreGppamRcYFpjamVscXVuWltia2RsbHltaGxvYY6UuKimi6GimqakmaScq6KhhISYrJKeoYmappupmIOBm4p+lpOHjoqJjXKDfI99fo+Fe5eOc3KEcJWFe32Si4aGkIV4fn+GmKONe6ehi4aQkIWWg4aOmHdyhamGjpKckIienoeMm6ifoKqDiY2Umn5+iZatqI+Spo93b52RgnmRb32ohXB9lXFrcH2Bn4x/k46MaG1dg4uMnJuejnOVi4hxdGuBdnSBWXJuh5GBfX6Mal1qZHqFg4iAX2l4ept7gouCdoGGgmd3ioZrYXBygnZfcouBiY+mlYVmjI+DbneLhHGGj3pwZmdke4N6lltcamdudlt7eXd1bnNzgmZcbYprbGNZWV5bWWxxXF9hWl5dZnR+e3VvdGNra2p7fXJ7eHRkbXRobXx+dnp8fHp6gIB+b4aKhHt9c355c39pVFxxaWx1b3Vna2hkXWFYa2hsa3FybVdbZW1sZ3N5b2hqbWCLi6mwoZCjoZqenpiemaijon6DmK2Nn5WIm6KRpZV/e5iEfJKZiYiGh4pzfYCLdoWLgYSWinFvgHKYhoN+k4SDhoqBeoCDi5ufj4KnoYd4jpiJlYuLnZeFg3qtgpGYmZSKnp2HiKGrn6Kio4uIk5uco5mWqqGnpqCSm4eVjXt3jY6Ep35/kpGSk5yxppuVnpCNspOYhKWMjJWbn4mQm4KIkYprfI13eGWChpCKfImdhIeLkIiIgIWEkHd8eXSaoYiGiZ6KhJR+fYuBgXVwc4WDf3eHh4qQppGEhY2Hg42QjH2Ii4mQgndsgoR9eplqcmhhdIpwfXp3dm92dIFdXm+HaG9gXlpcXVNoclVjXFxhbGh1fHxzb3Bka2ppf3xueX9xaXBwbGaBe3KCgHh/fX+Fe22CjIV8enh8fXqDeU5kdmpybXB6ZGtlYmJgW3RmcGZycW1VXWx0bWl5enFnaWtljIeduZ6WoqGYlZmYlJmkoZ58f5qrjp6NhqCci56WfXmUg3uOmYmGhISGbniAgHKBh36JlIRta356l4aDg5B/gIaEhnyGg42bnZKHqp+DcoqQhpORi52RfY16qoSNkpiWj5yXh4ebpp+imp2Gg5GamZmQmqagpZ2dkJaAkIp2e4eOhKV7fI6QkYaYqqGek52QjquOkYCejIiTmp6Cjpd+ho2Cb3eFcXVhfoKPhnWLmIGDj4KGhH6Fg5RteHV0kqKKjIWZhYSNdICJfH1ycnuHhHt4i46EkqaPhoOPgYSKiop3hoiJjHxva36BfG5obG1nXnp/aHx7dnR2dXt3XGBwfW51YGNbXV5RZ25UZVteYWtpdnp+cWxsZGtqZ4CAbHOAa2x0b3lvhHlthoB2goB9hHZxgo2Hfnt7fH97gopgaXtqdWhpgmVqY2BpXGR1aG9idG1sVWNxeWVwenpyZWltbYuJnreaoaOfkpGWl4uan5+ee3ieppGbioellIuYmXl6jIV8iZGDjIKCgm58f3hzgYV9i5F9a2h9gZeIgYiOfH2FhId8j4CPm5uRiKedf3CLi4yTh6GhioWNfKiRiJCSl5OWk3iMo6ChnZaaf4CQmpiSjJqjoaOal5Gbfo2EeICDjoegf32MjY98mKSgoZOZkJCnjZCBm5GJkpebfZKSfoaNgXRzgnB2YH1/jYZyipV8iIxxjH+ChYaOaHdxeIyYkY9/ln6HinKBhnx9cHh7i4R6epGMg5alk4uGkHyGhoeFdoKEiIh6ZXJ8f3h6cWxqZl5+c2h8dXZ0fHOAal5gdHZweGRjWV9eUmtoVGVZX2FoanZ4gXFma2NsaGV/gWttfWhvcWt9eIZ6a4uBc4GBfoF0doKNhn58en+BfX+PanKDbnNpYYdobGJfcVZ0b21uYHhobVdqdHZjdXt6cmJqbnmJjZ6ykqWlnI6QmI+GnaGbnXx2pKCOl3+NooqImpZ4e4aHfoOJf4mCgX9xf3t0doKFfoqReGdjfYaXioKKjXh9gIyDeZaAlZeWjZWgm35vjIKRlIamm4eNiYSmlYWTi5aXk5J3kZ2hoZeUl3p+jpiXjpaanaSdmJKUm3mPhYJ3hJaNnX6BiY2Mc5einqKTmY6PooyMg5eYg5KWmX6YjXyIjYF2cX1uemSAfIqFcIaSf5CCbIeCgYCJhGV1b3uHkpeMfJN4i4l7f4Z8e3F+d4mFeYSQiouXopWChIx3iISDgnd8gomFdmB4eH10fnhnbGRhf2lqd3N0dX1xfGJjYXNudXNtYVphXltsZVJjWGBhaWt2eYZxYmpjbWVofYNsaHRobG9pgHyBeW2QhnGAg4N/dHyDjIF/fnqCg358kG12iXR0bWWKbGpiY3VWg2lxbmB4Z2xianZwZnl7eXFfcmyGhY+crpemqJ6NjZeHhp+Tl5l9eKqcipl6l52LjJiQeXuAi318g3uAg4F4dHh6c32AhH+Ji4BkXn2LlYd+hYd0fX6Jf32XhJeTloyjoZh/cod7lJKKp4+MjoqToJKDkpCUl5GLgY+YoJqSkJFzf42SlImdnZ6ml5eNlZZzjY6Ka4WXj5l6h4iQiW+XnZqjk5WKjZ+Mh4KSnH+SkpWGmYh8iYmBeXF5a3Vse32Lfm2FkoKUd3CCg31+in9kcml7gJaXhH6Nc5CIg3iHfnV4gH2GgHyDjISMlKSPeYSCdImHfYB0doGIhG5he3V6cX1vYW9jZHtibm92c3h3c3RhdV9vbHVub1xbX15ea15QXVhjYWhtdHuIa19qZWpjaHeIbmZsaGpsaIF8e3dvkIdzgYOEfXOBhol6gn16gYR9fY5yeot4eG5sh2toX2lyYodocm9ldmdubGF5aGt9e3hwYXdti4CZmaqgo6idiouShoqei5WYfXeumIyXfZ6UkZaUiHd+e4p8e4B2d3+AcHRze2+FfYGAin98YVx+j5GGf4SEc3qAhnqPkYeSkZuSpZyVgn6BfY6LkqSJjoqNmJqNhpGYk5aOioiMkpyTkIyMboOPj5GJnpmioZeWiZaRboiZhGaFmI6UeomFkItwlpqUopKSiYuajIJ/kZ58ko+Si5mOe4qEh3NydWtxbnR7i3RuhZCNknF0gHuBgYh8ZHBseH2Zk32EiHSQioBziHlvgH2AhnyFjIiEjJWojHuIfH6LhXh+cXCAhYNjaHl0dXB8Yl5wYGt0XnBqe3l4a3NwZXhdbWxzbXNYWl5fYmtaUFdYZWNncXF/h2ZdaWhnYmdxjW9kaWdkaWiAend0bo6FdIGCg3t1gomFd4V8eISFeoCJd3+Le3tyeYNqa19waHSAa3JvbXFnb2xlfGNugHl2cWx3d4p+opehqKCmm4eMi4GQnIeTnHWBqpSSjoegjZaTkIB0e3aFd3h/cnN7hWtycHptinaAgYducVtYfpGNiICAgHZ1gIB/oIaQipKcl6GUmHiKf4GNiZyeio+GkpiWhYmVmY+Wi4uNjY2dio6Qg22IipCRiZyWoZyYlYWXiGqEo4JmhZ2KkX6Lg4uBd5OYkp+SkYmJlY5/fpCYe5GNj42aknyKf4JudXBsbW9we4Vpc4OOmIpwd390goiCeGZyb3WBmY58iIR6lJF5doh0cIl7hYx6i4aDiY6bo4h8hHaCi394eG9rgYOBXnJzcnFweFpecGBwal5vaXx6cG1tamx2YHBvanJtWlhhYWJuWFFUWmZnY3VwhIJiXWttZGJma5NtYGZmX2drgXVxcnCLgHV/g4B4dYCLgHiFf3eHhneDhXuGjH97doqAanFjfGOGfG9xbXRqaG9sdndfcX95e3R1dICCfqSVmq2eppaFjIN/l5SDkJ91i5+Uk4aLmoyVjYt6cnh0gnByhXRxdYhrb211bYh2g36AbW5VUYGrlIeCeIB2coJ5gaCCkYGTkpickpp4knuDjZOkmpOOiZWZkoSHl5mMlIuJj4+InoSQinxyioWJjoicmp+alpSAk35ohZyHZ4Wgh5KDkYOJcYORl4+bjpCNjJCNeHuSkHqOi4yRlox8iHyAa3ZqbmtrbHp/YXp+jpaCdnqAeIOMfHlnc2x0h5WLfoiGe5OQcXqEcHaMeomMe4l9goyQnp2FfHx3gox9d3FqbIGCeWB4b21scnRWXm9icmBfbG55cGdwZmZzdGhwa2F3ZV1WZmBgclNRTlxmZV15cIh8X1xocmJiZWaSal9oZFtncH5wa3Bzin12fIWAdHV/jHl7hoF4iINzhoV+jIyEe3mVeGdyaoNgiH5vb2t6YGpudH90X3R9eIZ4dHOFfHigj5mwnKWPgop/g5qIgIyff4uak46FiJeOjo+EdnR2c4Bwb4VzcHGDcGppdm6Dbn18bXVzUk2C38iS1pN8cHWDdYOggpN3lZGZm5CZe5RzhZCfoZOUkIqTm5SGfpaWiI2NiJGNiJx/joB3eox+iIuKnJydmpWTeo12Z4mRh2yIo4SSh5eDhmOMkZmOlYqXjI2Ki3F7lIh7joiKkpGJeYV7fmx7ZXJvamt5eVyAeZCOgXp9fn+Gjnp5aHNqc4uPiYGFhX2Vi2t+fm6Ai36Lh32EeoGPlZqainx2eIOQeXNtZnCAg21qdG9oanRuU15vZHBZX2tyeGZramJmeHJvcGNfeGBgVmtfXnZQTktgZ2NdenGJdFxcZXZgYWVlj2RgZWFYaXNzbWpxdox8dHmGgnV2fotzf4Z/e4l+comHgZGKiHx+mHZlc258ZYd+b3Brf1lsbnl5c2F2enuNdnN3ind5n4ubr5ugkIKFd4iVfn2KnYeFn5GOhYyXhJOOh4F0d3B5cW6Eb21ufnJkZHhxfW15fWpobGOkmsHcru+hc2t1g3WEooWSb5aQlaCVnIGRcYaLo5eJjpaLkJ2Wg4CVkIWJj4CSiomWfod6dX+JeIaEjZybmJiOj3aKdm6GiYt9iqOEkYmdhYVei5OXio+JjouLhIptfJaBfYiFiZCPhnaFfX1rfWR4dWlueHNYiHqShoZ5foCAhYt+eGVzan+JjomCgoCMloVrgXZuiJCCj4R/gnp/kJWTmZB0c3iHjXVzcWd1eoNidG1wYmp2Z1JgcWdsVV9udHlhcmNfaH1wcm5bY3JhYlduWlx4TU1MZGdhXnZziW1cXGR5XmBkZoVgY2JeWWpya25rc3eLfXR3hIF4d3uJcYOEfX6Ie3SLiYiWh4x+fphzaHVxeWyLem50cIBXcXp2eXFld3mGjGl3gIlyf5yHmaeco5KEfXCMlHh5i52EhaGNjXuWjX+ZiIR7cndwc2pvgWtpbXx0XmB4d3txdXtnYWV869q1ycPciHNsdIF2ipqIjWmYj4+dlZOBiXGFiaCNhIuWioyYlHyNk4iDiY97kYuFj4J/dniDg3KHgpOblpSYhox1h39whIKJhpihg5SMn4OJYYOUj4eKhoqNh4GHaX2Uf32DhImOjYJxhn5/cXdodnJpc3dsWox8koKGfX+DgISJgnVhc2uIgY+Kgn5/kpB9bYJseIaPhpGDfYF9gJKTkJaIb3F6jIZ1bHFscniBX3Rpbl1rdmBSZXJpZlNfcHZ0YG9gXWiCcHJqV2doY2lYbVZcdUxLTGVnXmJyc4VpW1xleV5eZGd7YGRfXFlrbmZuaXR3in5zc4F+enZ6iHOFgnyAh3Z3ioaOmIGMgXuTdmx3dXl4k3RueHp9WHmFcYBvZ3h3koJkdoaFcYqVhZmhmqKKh3Rvk4tyd46cfYqaiYl8n3+DmX+BeHFzbW9kcn5pZmx3eFteeXt7cXGAamFnYX/Vto6QpnhucXd7cJKQjIdqmY6InJKMhXtpiIuah4GSkYaHmI18jY2BgYmOe5CNfomFenR7gnpwhoCWmY6TlIGIdYOGdoN/ipKcn4aVj59+iGGAk4eFiISKjoB/g2d9kYB+f4KMjpB+bYJ8gnRrbXZ0c3Z1a2KNgY9/hX58hH+EiH5vX3JwhXuPjIJ8fpGIenCDZnmDioaLg3yEfoCUj5CShG5veYx+dW5va2x6fWNoa2pZbnZaUmlyamJRYnJ4bGJlXVpqg21zYVtnX2RsX25UW3BOSE9nZVxnbnGAbFtbY3NgXGNsd2RlXV1abGxibWpzdod/cW9/fHx0eIZ4hYJ9gId1eYmBkpZ8iIZ2iYFwd3l7g5NvbXyBd16Df3SBbWl6dJRzZ3OHfHKRkYOan5ughoh2dpV+bXaUl36IkIOKjZp8i5p2fXZxb2xqYXV8Z2JpdXpaX3h8em1xf2VkaGdXnY9ecXKWvMSEdnGUiZB+cpeMhpyTjIhza4mPloF7lIuBhJuMfIuGfXyJjH+UiHWJhXZ2fYFxdYaBnpSGlY+DgnF/iHSDe4mYnJeGk46dgIhlfZOCgIaEiYlygX1nfYt7eX9/h4uPfGmAfYN2Zm94eHN2c2xqjYWKgYp/eIKAhIN/al5xeHp9jImFe4GPgH5ygWl4goeLhYR4g3yBmIyPjH1ubXuJfXd0b2hofXZkXHFjWG9zU1Nuc2lhTmZ0eGZgXVxYboBuc1llYl1qbWBwT1lsUkRUaGFaa25te29aW15tY1pib3djZlxdYGtqY2xpc3aBg3Fufnt/dHWDeoOCfIGFdn6JgZaReIOKdIGIcnl5fo2Qb298gXFpgXl6fm1tfHaVa2p4hHRsk42Fn5igmYWIbn2Mdmp4mI9/goqClZeKeY+Wb3pzcGxqZGBzemhfZXJ7WmByfHlncHphZWWOsbJ3SmJapNnQl3F7kYuQeH2Vi4WZkY2Gb2yGkpJ6eZKGgYSYinyHf3h4iYqEloBviodxdH56aXmFg6WRhJONg39vfoN2g3iFm5iTipKQlIWHcHuSg32Dg4mDb4F4aICFeHJ/f4OKh3xlfX6DdmNwc4BoeHBvdJiMhYKKe3Z4gIR5gWpccH1ygIeFiX2GiXqIcoFucYOGjoSEc4R4gJmMjYR4bm5+hH93e2Voan1xYFl3Wllxbk5YcnNnYEtsdnRhXVtbWXR9cm9XZ11manBfb05XaVI/WWZfWnBrZ3lxW1tYa2VZY3B5X2hcXmVsaGZsaXB3f4dubH99gHVwgXqAgX+Cf3aBhYmXinGCjXF7hnx6eYSTjHRqen9rb350f31vcnx7lG9ugH94Z5KKgqGZnJKChmeHhHBoepaJfn+FgpmKgXyNjGh4cmtsZl9hb3htX2JveVxkbIN6YXF2X2Vl1Oq+ijI6PouOgHJ5hYiOjXaDl41+k46Nf25shY2Mdn2Pf4WClYl8g3hudoeEg5d3boiEbHV7dGZ5goOnjIOPi4R9bn90doN5hZuQi5CRkoyLhn57kod4gISNg2yAcml/fnhtfHuCioR4YXmEgXFkcWh+bXRxdYGbi4B/hX5zdn2Ac4BvW2x+dHiKgot7hoB8iHh6cWyIg4+DinKBeX+Wi4p+dG1rdoCAdXZdaWl4cFlXfFNacWVMW3JyZVtKcHdvXFtaWV10fnRoWWJbZ2VuY2lNV2ZRPV5mXF12Zl90cFtZVG9kWWVweVpoXl9nbWdqbGlvd32ObGmChH55boB7fIB/gnp1goGMk4VwgItud36Ae3uIk4l/aHt9anR7coZ7c3d9f4x5eIR9fGuMjIObnZaMgYBsjn5raX+OjXt+f4OUgn99iohrdXFnaGNbYmdyb2BhbHNhaHCJemFzdF5jZJugj25cNVmvtXVqgIl9koZ2hpeGdI+LindwbYWDh3V5iXiJfZOIen9zZ3aIfn6Yb3CGfWh2eW1leYiEpYeBh42Jfm5+dX+AfIuZh4KTkJiIi4SJfI+IcXt9hHxpfm1rgHt6anp2goeAcmB3gX5xZHJndYJtdXuFlJGBfIF/b3d5fHR+bFdvfnZ0i4GGd4d1gol6eHJuiYCOgIVyfn1+koiJem5uaW2CgnVuXWhmdHJSW3tOXHFcT1xycGNWS3N4aldZWVphcYB0YF1dYGdkaGlmTlpoTkBhZFtgdmFcdG1YV1N0YVpkbnJXal5haGtnbWxpcHd8kmtohIl8fHB+fnuBf4J6d4CAiYuEcXuHb3F3g397io2Pg2p+e253eXaKd314gIKHf4N+fnpthIyImKONhIN7dox6a22EiZF5fXuCkYCAfoqDcHJwY2ZeWWdfcHBgYGdwZmpvinVhdG9bYWRqdnt/vpymo8i4cYWEc5R9eIaUgnSQjYhycnCEe4N0dYd0iHeUiHl5cWN3hnqAk2lyhHVmd3ZjanyDiJ6CgH+Pj31yfnOEeH+RkIJ4lo2Uj4eCiHqJiWx4eX91aHtpa395c2l6doCDfWhgd4d9amt0aHt/aXaBi5CUfnp+fnB7dntzfmJVdnxyc4qEgn2DcIaKd3hwcIOCjH59eX58dY6FgnVpcWlsh4JycF5oY3NuS2V1TF5vVVRZc25iUE9zeGFSV1hcYXCCc1thXGhlZGNqZFBbcUlEZGFcY3FeXXdoVVdVd11bZW5oVmteYWpnZW9vaXB2e5NuaYiMeX1ye354goGCfHZ9g4iGg3B2g3Jud4KDfomLk39wgHx4eXqBjHSDeH+BgYKEeoB1b36Ji5qeiH2FeneHfGh0ho2Ren9/fImGhHaPgGdvbV9kXFhlWW1yYWBhcWxraIluYHNpWV5kbYB3qdqpx4aHsnGJeHCNdXuHj4B6k4qAdXR1fneAcHF/bYR0lIZ4dWxgeoJ5iI5mcYNvZ3VuW219gJCTgIF5kpJ9eHtth3WAkIuDc5aKkY6HhYV7gIVtdXZ/bmh3ZW17dm1qdnZ/f3xhYniGemh0dWN9emd1ho6MlXt0gHVxgHp8bH9ZVnN9b3SEh3+AeWuIhnN5a3R/g4N9en14e3KLgHxyZ3RlbYqDbXRba191ZUhubkxbYldXVnhtYk9TdHZYUFVYXmFxhG9cYGNtZGNdbmJUXXJHQ2ZfXWZoXVp6Y1JVXHVbW2drYVZqX2BuZmZrcWhwdXiOdGuOjHV/dnh+d4GDgXt0foOIiINvcX90cXV+hoKJjYp7d394hHx8hYd4h3x9gX6FgHt+c3Z5jI6fjYl6inZ1g3lefoaajHmHg3SFhoV3iXpibmxbYltbYVZqc2NgW2dub2eHcmFxZlddY2t/fMrOh7miam1timxxhHF8hIp+e5KFenl0eXV1e2ptdWOEdZGCd3BnXn2CeYuJZXGBa2pxY1hse4aciIKCc5eUd357bodxgYmLh3GWjpCIhYuDe3l+cXFvfmdocmJueHFqbHF3fXx6XWV5gHdpdXhmgnZndIeLjZR8codpb36AeG18XVhxfm1zgIt8gW5viX9xdmd3f4F/gXZ8cXp0hnx5cmZzYW6LgmxzWGtfd1xJb2tOV1ZeVFV7a2FPVHVyUVFUVl5idIVoXGBramZiWW5hWGJwR0FoXWBmXl1Ve15PVmRwWVtqaF1XZ2BfcmZrZ3JncHJ3hnhulYp0f3p3fnmCh4B1c4CGhY6CcHB7d3d1eoeGh4yGenx/dYt+fYWEhId/fn59h398eHZ5d5GTn3+MfYttdYB5ZIOIl4ZzkopvhYWBeoN0Y25qWV9bXV1UZ3NlYFlkcnJngXNia2VXWmBpf3e+rnuft25ic4ZodHxyeoOGen2Mf3h4c3Zve3Zlam5gh3WOgXNqYl5+eHmKg2ZxfWhqa1pWb3iKpIGFf3GZk3GAeHWBbYCBkIdylIiMh4OIhX15dHJvaHpham1gbXZqZ2treXd6d1tnfXx4ZXJ9boR0ZXWFjIaVf2+LZmt6g3RsdGJcb3xrdHuLe4JmdYd9bXFndX54fX9yfGx6eoF6d3BlbGJtiX5tblZrYHdWS2prT1JPaE5ZfGhiTlV1akxQVFVeZnaDZl1hcGhnYFdpXVtraEpFa1piZFdZVXlaTlZtalldbGVcWWVjXnRmbWRxZnJvdIB3cJqFdn9+d398hYd9dXOCiH+Ugm5zeHp6c3OFh4mIhHiAfXaPf3yEiY6EgoR7fouDe3d8d3eanZd6ioOHaXd+fGyEhZSAco+CcYaCfoJ/b2ZsZ1ddW1xbVGRwZV9YY3N1aXZwZWViV1xcaIBwb3KAc4lkZXh+aXR2c3ODhXiBhHl3dHVua3txYWdrZ4Z0jYRuZl1ffW97iX1obHdmaWRVV3JwjaZ8hHx2lpBzfHN7eW17epCEdph8h4aChoN9dXBybGd1XW1oX2x1ZGdmaXpve3JZZ4F3dWdwgHiCdWJ3hYp8lIBui2pteoBwZXJlYGx5ZnJ3int+YnWDdmlrcXR6cHl4cn1mfn9/eHZuY2VhbYZ8bWtWa2NxU0xpa1BMT3BHXntmYU1VdGNKTlNXYGp2fWVdZ3NpZV9WY1dhcF1MS2tYY2FVVFRzV0xYdWRaX2tgXFpjZV93Zm1icGlzbnF+dHSZgXd/gHd/foaEen11goR+l4VucnR7enRxhYWPgoB6i3V0kIB9gZSOgIWEfH6Mhnp+gHZ7o6WKeYiFhGx1fHt1hIKMem6Fc3qFfYGDdW5qaGVWXVtaWlNibmVbWGF0e2pobWlfYldfWmmAamtvgGdsYWh5eWt0dHRuhYF6f312dW56aGp5al9lbmmBd4+EZ2VYYndpfod6b2lvZmZdVVhvaI+ndoF6fJCOeXVvfm9ydXmOf3eUdIWCf4WIdWpydmdob1xtZV5tc19nYWl4aHttW22CcnNpb4B+eXdhd4SEeI+Ec4hxb3l/cWJwaFtud2Rwc4h8eWJzgHBnanhzcmt3dnR3Y4N7fnd2cGRjY258fWtsVmpjZ1NLbGhQR1JsRWF4ZmFNU3FdSU1UWWVrd3plXm1waWRdVl9Vbm5XS1NoWGZeWE1VbFVKXHlfW19rXV1aYmVgemhsYW9vdW5vd3V6mH13gIF6gH+Hhnp5eoN+gZOEcXR0fnp2dIWIkH2AfZBsc5SBe4KfhX+HfYB+hoKAint2hKyff3qIh4RscoJ6doGAgXVuh298gHOJgGpvbWRkWF9aWVpVYmpnW1pfdYJpXm1sXGFWXFxrgWZydH1pal1rdnZodHdxbYZ7fn15dnJsemhpd2ZdZHNoeneSgWNjVGVvZoKEd3ZmaGlgV1ZZaGSQp25+eICLjnpwcHxmeG55i3t2jnGEfX5/hm5kdnNkaGhda2Jdb29bZ19sdWV6aF10gG9ya3F7fnV1YnSFinqHhoB/d3J1fnRhcGxZcHNicXKFfHRkcoBsYWx6b2poeXd0cWaFdXp6dXBkYWRuc35qbFVqXl5UTHNjUUdXYkdidmZhS1RvV0pMWFhna3Z6ZGVucGZjWlhdWHZlVEpcY1hoWFlIV2VRSGJ4Wl1fbFteXGFkXn9pamBvdHhtb252g5d5coGAfX+Ii4Z9dnaGeIeMfXN1dYF4enqCjI59foSJanSWgXuKnX1+hXmAen58hohzcY+ujHt7hpB+ZnKIenR9fXZyb4Zse35sj3picG9hZV5lVllZV2Nma19dXXOFaFlwblpeV1pcbHtjcHd2bGJbbXN0Z3V1cG2FeX+AeXdub3RlaXRlW2d1ZnZ2kXpfXVJmZmqCgXN9YWNpXFRYXmJjkKVoeXSChZB4bW55Z3dte4R6dYhygHh8eH9oZXZtYGZhX2pgXXRrWWVdb29iemVbd3trbm5weHh0dGRyg5J+h4KIenZvcX1yYXdkWm5wYXBxgnxzZnKAZF5udmljZnl6dG1ugXVzfHNxYl5mbm99ZWpUaVlZVE54X1JKWllIYnRjYUlUbVNJTFpWaWxye2JsbHNiYVlaW2F2XFNLZF1YaVNXR1lgTkdpdVheYW1bW19iYl2FaGhhbnh5bG5qdoGQeW6DfoCBkoiEgXZ0iXSMhnNxd3aBd3x9foyPgH6TfnB4loN9mZJ5gIB4eX5/c4iDc3CZont6f4mVeWR1iHlzeHZsdG9+bHl8cJFyXnBuYGdibFRaWVdoY21lXFxxiWVTcm5bWlhYYGx2ZGl1ampeWm1zcWx0c3Rqhnx+gHx3b25sZGlxY1tqcmR0do9zW1ZTZGBxf35xgVxhY11TWmBcY5KfZXJxhYSRdGxqeWxvb3p7enGAdn5yenp6ZGV1Z15iWmFnXF53aFdiXW9oYXdhW3t2amlyb3d0c3RocIGUgoZ+hHZyanB7bGZ2V1tqbWJwc4F6c2ZvfltgcHFiXmlwfGxrc35ycXhrcGBcZWxte2FoVGdVV1JQdltTUFpSSGNzYmBHVWpQSE9aVWtra3xlbW9xYFtaWFlscFdSUGZXV2lTVEZaXE9IcnVYX2NtY1hhYGFdi2ljZG15eGtuaXV5hntrg31/hJl8goR5fYhuj4Zxb3d6fHSCgnyLj4OClnR4gpSFgZ+JdYCAgXR/gnCHgnVvopd0e4aLh3tmeItvbntvZnhwemxzdnONa150bmFnZWtSXVtVZ2JsbFtccYxkT29uXVZYVWdpdGhidGVlXVpudW5wdXV6a4d8f3yId5BzY2Vrb2Fcbm1jc3iHa1pUVmJjd3x8cIVcY19jVFtgWWOWlWNucIOFinNqaHpuZXJ2c3tsenR1b3p+dV9mcmNbXldiZFlhdWVVX2BtZGFxXV1+cGhpc3FzcHV1a22Ek4GIe4VxcmZufG9xblNaZWplcXSBdnNibXZVYnFrW15uZXxlbHV8cnJyam1gWWRqanhfZ1RlVVZQVW5YUVdUUEhlcl9hRldpTkhYVFZtaWR8aWt3a2FXXFVbdGNTUldoUVlmVFNIWlpQTnh3W19mbGlaYmBeXo9uYmZreXVub2h2dn9+bYOAfoaXe3+HgYp/a5OIcmd0gHt1gIN9iY9/i5NyfYqRhYefhnt/hoxzgIZzfYJ1bqWMc4GNi3d4bnqMYGR8cWZ6c3lsbXF2g2dkfGxjZmdoU19eVGdgbG9cXm6OaE5pbWBUVlNvZnNrZXhkZV1ZcHRtcnp4c22Ie4B3nHt6a2FlbG1eYG9qZXB5fmdaVlhga3d7e2+DXmJeZ1ZZYFdknIhia3GBh313a2p3bFt2cWt5aXVybW97gHJYam1fWV1WYmNYZXFjU15haWJibFpgfmxma3N1bm13dmtohYx/iHqHbXFlb3tscWxiWF9oaG90gXNyXmltU2VwZVVibmF5YnB2e3Vrb2xqX1hhZ2h1XWVWYlZTTllmU09dT09IZW9dY0dZaU1JX0tYbWRfeGhufWRgVV5UXXRbVFJgZk5dYVRTSlxaUVl1dV1fZm1oWGJhW16OcWNnandxc21odnR5g3OCg3qIjX58ioeOem6QinRsc4J0f3+IhYeShJWPen2Mj4iRm4SAfIyEcn+Bc3R3cW6Tk5OTk5OTk5OTkpKSkpKSkpKSkpKSk5OTkpKSkpKSkpKSkpKSkZGRkJCPj4+Pj4+Ojo6Pj46OjY2Njo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo2NjYyMjI2NjY2Njo6Ojo6OjY6OjY2Ojo6Oj4+Pjo2NjY2Oj4+Pj4+PjoKAfnp6fX5+fX1/fn59fn5+fn5+fn+Af4CAgIGAgIB/gIGBgYOHjI6Ojo6NjY2NjY2NjY2NjZKSkpOTkpKSkpKSkpKSkpGRkZGSkpKSkpKSkpKSkpKSkpKSkpGRkZCQkI+Pjo6Ojo6NjY6Ojo2NjY2Njo6Njo6OjY2NjY2Njo6Ojo6Ojo6NjYyMjY2MjIyNjY2Njo6Ojo6NjY2NjY2Njo6Ojo6OjY2NjY2Ojo6Ojo+Ogn99ent8fX59fX5+fn5+fn5+fn5+f4B/gICAgICAgH+BgYCBg4aMjY6NjY2NjY2NjIyMjIyMkpGRkZGRkZGSkpKSkpKSkZKSkpKSk5KSkpKRkZGRkZKSkpGRkZGQkJCQj4+Ojo6OjY2NjY2Njo6Ojo6Ojo6Ojo6OjY2NjY2NjY6Ojo6Ojo2NjIyMjIyMjIyNjY2NjY2NjY2NjY2NjY2Njo6Ojo2NjY2NjY2NjY6Ojo6Cf3x6fHx9fn19fn19fX59fn5+fn5+gH9/gICBgYGAf4CAgICDhouOjo2NjY2NjIyMjIyMjIySkZCQkJCQkJKSkpKSkZGSkpKSkpKSkpGRkZGRkZGRkJCQkJGRkZCQkJCPj46Pjo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6MjI2NjY2Njo6Ojo6OjY2MjIyMjIyMjIyMjY2NjY2NjY2NjY2NjY2Njo6NjY2MjIyNjY2Njo6OjoN/fHp8e31+fH1+fXx9fn59fn5+fn5/f3+BgYGAgICAgYCAgIOGi42NjY2NjIyMjIyMjIyMjJTO2tjY2NjamoGEhISEiF0tMDAwMC1GoaGhoaGhoJqZmpqampqKg4SEhIOEd2VnZmZmaFxDREREREVCMS8wMDAvLICkoKCgoKOAY2dnZ2dmb4SDg4ODg4OLjIyMjIyMjY2NjYyMjY2NjY2NjY2NjIyMjIyNjY2NjY2OhX19e3t6fX58fH59fX1+fX1+fn5+fn9/f4GBgYCAgICBgICAgoWKjI2MjIyMjIyMjIyMjIyMlNvp5+fn5+qcfoKCgoKGUxgdHR0dGTekpKSkpKSjnJycnJycnImBgoKBgYJyXV9fX19hUjQ1NTU1NTMeHBwcHBwYfqmkpKSkp3xcX19fX15qgoGBgYGAgYqLi4yMjIyMjIyMjIyMjIyMjY2NjY2MjIyMjIyMjY2NjY2GfH16enp8fXt8fn19fX59fX5+fn5/f3+AgYCBgYGAgIGBgYGChYqNjYyMjIyMjIyMjIuLi4uSl5iYmJiZmZKPkJCQkJCMh4eIh4eHiZOTkpKSkpKRkZGRkZGRj46Ojo2NjYuJiYmJiYmIhYaFhYWGhYODg4SEhIOMkI+Pj4+Pi4iIiIiIiImKioqKioqKi4uLi4uLi4uLjIyLi4yMjIyMjI2NjIyMjIyMjIyMjY2Njoh8f3l7ent8e319fX18fX19fX5+fn9/f4CBgYGBgYGAgYCAgYKFioyMjIyMjIyMjIuLi4uLi5GQj5CQkIuOkZGJh46KkJKTkIqPjI6Ph4+RkZGRkJCQkJCPj4+Pj4+Ojo6Njo6Ojo2Njo2Njo6Ojo6Ojo6Oj4+Pj42MjIyMjIyMjY2MjIyMjIuLi4uLiouLi4uLi4uLi4uLi4uLjIyMjIyMjIyMjIyMjIyMjIyNjY2NiX59eHh5fH18fX19fHx9fX59fn5+f3+AgICBgYGBgYCBgIGCgoSKjIyMjIyMjIyLi4uLi4qLkJCRkZGPhI6QkIaKj4WNkJCMiIeKho2GiZCQkJCQkJCQkI+Pj4+Ojo6NjY2NjYyMjIyMjIyMjIyMjIyMjIyMjI2NjIyMjIyMjIyMi4uLi4uLi4uLi4qKiouLi4uLi4uLi4uLi4uLi4yMjIyMjIyMjIyMjIyMjIyMjI2Lfnx3dnh7fXx7fX18fH19fn5+fn5/f4CAgIGBgYGBgIGAgIGChIqMjIyMjIuLi4uLioqKioqQkJCQkIqFjoiOhoaPiY2QkJGNiIqFjoaLj4+Pj4+Qj5CPj4+Ojo6OjY2MjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMi4uLi4uLi4uLi4uLi4qKioqKi4qKi4qKi4uKioqKi4uLi4uLjIyMjIyMjIyMjIyMjIyMjIt+e3d2eHt8fHx9fX19fX1+fn5/fn9/f3+AgIGAgYGAgYCBgYGEiYyMi4uLi4uLioqKioqKipCQkJCPhYOMjpCOiYyKjpCQj4eNjIaMiIiPj4+Pj4+Pj4+Pjo6OjY2NjYyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIuLi4uLi4uLi4qKioqKioqKioqKioqKioqLi4uKioqKiouLi4uLi4yMjIyMjIyMjIyMjIyMin18dnZ4fHx7fH19fH19fn5+fn5+fn9/f4CAgYCBgYGBgIGAgYSJi4yLi4uLi4qKiomJiYmJkJCQkJCMhoyJjoeFjYmOi4yMhImHhoiFiY+Pjo+Pj4+Pjo6OjY2NjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyLi4uLi4qKioqKioqKioqKioqKioqKioqKi4uLioqKioqKioqLi4uLi4uLjIyMjIyMi4uMjIyKf353eHp7enp8fHx8fX1+fn5+fn9+fn9/gICAgICBgICAgYCBhIqMi4uLioqKioqJiYmJiYmPj4+Pj5CMjouPjIqPjI6MjY2IioqLjYqOj46Ojo6Ojo6Ojo6NjYyMjIyLi4uLi4uLjIyMjIyMjIyMjIyMjIyMjIyMjIyLi4uLioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi4uLi4uLi4uLi4uLjIiAfXh5enp6e318e3t9fn5+fn5/f35+f39/gICBgICAgIGBgIGEiouLioqKioqJiYmJiYmIiI+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj46Oj46Ojo6Ojo6Ojo2NjYyMjIyLi4uLi4uLi4uLjIyMjIyMjIyMjIyMjIyMjIyMjIuLi4uKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLi4uLioqKi4uLh4B8eHp6eXt8fHt8fH1+fn5+fn9/fn9/f39/gIB/gYGAgIB/gYSJi4qKioqJiYmJiYmJiIiIj4+Pj4+Pj4+Pj46Pj4+Oj4+Ojo6Ojo6Ojo6OjY2NjY2NjY2MjIyMjIuLi4uLi4uLi4uLi4uLi4uLjIyMjIyMjIyMjIyMi4uLi4qKioqKioqKioqKioqKioqKioqKioqKioqKiYmKioqKioqKioqKioqKioqKioqKi4uHgHt5eXh6fHx6e3t9fX5+fn5+f39+f39/f39/f3+BgYCAgH+BhIiLiomJiYmJiYmJiIiIiIiOjo6Ojo6Pj46MjI+Sj5COjo6Ojo6NjY2NjY2NjY2NjIyMjIyMjIuLi4uLioqKioqLi4uLi4uLi4uLi4uMjIyMjIyMjIyLi4uLi4qKioqKioqKioqKiomKiomJiYqKioqKioqJiYmJioqKioqKioqKioqKioqKioqKi4aBe3h5eHp8ent7fH19fn5+fn5/f35/f39+fn9/f4CAgYCAgIGEiIqJiYmJiYmJiIiIiIeHh46Ojo6Ojo6Ojo+MkJOQkI+Ojo6NjY2NjY2NjYyMjIyMjIyMjIuLi4uLi4qKioqKioqKi4uLi4uLi4uLi4uLi4uMjIyLi4uLi4uLioqKioqKioqKiYmJiYmJiYmJiYmKioqKiomJiYmJiYmJiYqKioqKiomJioqKioqKhYB6eHl5fHt6ent8fH1+fn1+fn9/fX9/f35/f39/gICBgICAgYSIiomJiYiIiIiIiIeHh4eHjY2Ojo6Ojo6Pj4+PjoyNkI2NjY2NjY2MjIyMjIyMjIyMi4uLi4uLioqKioqKioqKioqLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4qKioqKioqJiYmJiYmJiYmJiYmJiYmKioqJiYmJiYmJiYmJiYmKioqJiYmJiYmJioqFf3l6eXh7e3p7fHx7fn5+fX5+f39+f35/fn+Af3+AgICBgYCChIeKiYmIiIiIh4eHh4eHh4eNjY2Njo6Oi42Nj5WPiYyPjYyNjYyMjIyMjIyMjIuLi4uLi4uLi4qKioqKioqKioqKiouLi4uLi4uLi4uLi4uLi4uLi4uLi4uKioqJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYR+eXt5ent7eXt9fHt+fn59fn1+f35/fn9+f3+AgICAf4CAgICEh4mIiIiHh4eHh4eHh4aGhoyNjY2NjY+MjImKj42IjJGPjY2NjIyMjIyMjIyLi4uLi4uKioqKioqKioqKioqKioqKiouLi4uLi4uLi4uLi4uLi4uLi4uKioqJiomJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJg355e3p8e3p7fX17fH9+fn5+fX5/fn9+f3+Af4CAgH+AgH9/f4OGiIiHh4eHh4aGhoaGhoaGjIyMjIyLiYyKiIeJhoyOjJCMjZGOjIyMi4uLi4uLi4uLi4qKioqKioqKioqKioqKioqKioqKiouLi4uLi4uLi4uLioqKioqKiomJiYmJiYmJiImJiYmJiYmJiYmJiYmJiYmJiYmIiImJiYmJiYmJiYmJiYiIiIiIiYmCf3h7e3t6enx9fHx9f39+fn19fn9/f39/f4F/gIB/gICAgICAg4aIh4eHhoaGhoaGhoaGhoWMjIyMi4yOjoyKioeEiIuKjIuNjo+Li4uLi4uLi4uLi4uLioqKiomJiYmKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiomJiYmJiYiIiIiIiIiIiImJiYmJiYmJiYmJiIiIiIiIiYmIiIiIiIiIiIiIiIiIiIJ/eHp7enp6e3x8fX1+f35+fX1+f39/fn+AgICAf3+Af4CAgYCDhYiHh4aGhoaGhoaFhYWFhYyMjI2NjJCSjI2Ii4mJi4uLi4mLjIqMi4uLi4uLioqLi4qKiomJiYmJiYmJiYqKioqKioqKioqKioqKioqKioqKioqKiYqJioqJiYmJiYmIiIiIiIiIiIiIiImJiYmJiYmJiYmIiIiIiIiIiIiIiIiIiIiIiIiIiIiHgXx4e3x5enp8fHx9fX9/fn59fX9/f39+fn+Af4B/f3+Af4CAgIKEh4eGhoaGhYWFhYWFhYWFjIyNkY+PjZGJjIaJjIuIiImMiYeNjo+NioqKioqKioqKiomJiYmJiYmJiYmJioqKioqKioqKioqKioqJioqKioqKiYmJiYmJiYmJiYmJiYiIiIiIiIiIiIiIiImJiYmJiYmJiIiIiIiIiIiIiIiIiIiHh4eHh4eHh4WAenl9e3t7enx8fHx9f39+fn19f39/f35+f4B/gH9/f4B/gH+AgoSHhoaGhYWFhYWFhYWFhISLi46PjoyLj4iHiYmMjYWFjo2KiYyNi46KioqKiomJiYmJiYmJiYmJiYmJiYmJiYmKioqKioqKiomJiYmJiYmJiYmJiYmJiYmJiYmJiYmIiIiIiIiIiIiHiIiIiIiIiIiIiIiIiIiIiIiHh4eHh4eHh4eHhoaHh4eHhH55eX16enp7fXt8fX5+f35+fX5/f39/fX5/f3+Af39/f39/f4CChIaFhoWFhYWFhYWFhISEhIuLjI6MjI2Lh4mIiomGgoiNjoiKi5GTj4uJiYmJiYmJiYmJiYmIiYmJiYmJiYmJiYmKioqKiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiIiIiIiIiIeHh4eHh4eIiIiIiIiIiIiIh4eHh4eHhoaGh4aGhoaGhoaGh4eDfXp5e3p5enx8e31+fn5/fn59fn9/fn9+fn+AgICAf35/f39/gIKEhoWFhYWFhISEhISEhISEioqOjYmIiIqKh4iHiomIioiIh4qGi5GPiomJiYmJiYiIiIiIiIiIiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmIiIiIiIiIiIiHh4iIh4eHh4eHh4eHh4eHh4eHh4eHh4eHhoaGhoaGhoaGhoaGhoaGh4J8eXl6eXp7e3t7fX5+fn5+fn59gH9/f39/f4CAgH9/fn9/gICAgoSGhYWFhISEhISEhISEhISKi5CPiYmJi4qHh4WHiYuKiYSLjYmOjYqJiYmJiIiIiIiIiIiIiIiIiYmJiYmJiYmJiYmJiYmJiYmJiIiIiImJiYmJiYiIiIiIiIiIiIiIiIeHh4eHh4eHh4eHh4eHh4eHh4eHh4eGhoaGhoaGhoaGhoaGhoaGhoaGgXt4enp4e3x7e3x+fn9+fn5+fX1/f39/f3+Af4B/f39/f3+Af4CChIaFhYSEhISEhISEhISEhI+Qj4+IiYuIhoeIiYuLjIuJioqNio6Oj4iJiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIh4eHh4eHh4eHh4eHh4eHh4aGhoaGhoaGhoaGhoaGhoaGhYWFhYWFhoaAe3h5eXh4enp8fX1+f35+fn59fn9/f39/gIB/gICAf39/gIB/gYKDhoiGiIaDhISEhIODg4ODkpKOioeKi4qLh4uNiYqJi4iHiouIio+SioiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIh4eHh4eHh4eHh4eHh4eGhoaGhoaGhoaGhoaGhoaGhoaGhoaFhYWFhYWGhn96eXh4eHl5eXx9fn5/fn5/fn1+f35/f3+Af39/f4CAgH+AgH+BgoOHjo+PjoiHhIWFhoaFhYWSkI6KiYmIiImKioiIh4aKjIiHiYmOkJGNh4iIiIiIiIiIiIiIiIiIiIiIh4iIiIiIiIiIiIiIiIiIiIiIiIiIh4eHh4eHh4eHh4eHh4eHh4eHh4aGh4eHh4aGhoaGhoaGhoaGhoaGhoaGhoaGhoWFhYWFhYWFhYWGf3l4d3d3eXp5e3x9fn9+f35+fn5+f35+fn+Af4CAgICAf3+Af4GBg4eOjo6Ojo6Mjo2OjY2MjZCQjomHhoiJiYeIiouIiYyJiYaKjY6PkYuIiIiIiIeHh4eIiIiIiIiHh4eHh4iIiIiIiIiIiIiIiIiIiIeHh4eHh4eHh4eHh4eHh4eHh4eHh4aGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaFhYWFhYWFhYWFhYZ+eXd5d3d6eXl8e31/fn5/fn5+fn5+fn9+f4B/fn+Af39/f39+gIGEiI6Ojo6Ojo6Ojo6Ojo2NkJGOi42JjIiIiYaHiYaIioiHi4yLjpCQiIeIiYmJiIeHh4iIiYmIh4eHh4iIiYiIiIiIh4iIiIiHh4eHh4eHh4eHh4eHh4eHh4aGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoWFhoaFhYaGhoWGhYSEhIWFhoaFhIWFhX55d3l2eHl4e3x7fn5+fn5+fn5+fn5+f39+f39+f39/f35/f3+AgYOGjY2Ojo6OjY6NjY6OjY2Qj42Ni46KhoiKhISLiYeDhYSDi4mLj42JjI6QkI+NjYyLjY6Pj42NjI2Nj4+Pjo6MjYyMjY2KiYiHiImHh4aHh4eHh4aGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoeHiYqKiIeJi4yNjo2LiImLi42OjYyJiImMgHl3d3Z6eXh7e3t9fn5+fn5+fn5+fn5/f39+fn5/f4B/f4B/f4CBg4aMjY2NjY2NjY2Qj4+Pj46NjI6KiYuMjIeFiY2Lh4aIh4aHh4uNjo6Pj4+Pjo+Pj4+Pj4+Pj4+Pj4+Ojo+Pj4+Pj4+Pj4+Oj46Oj46Mi4uJh4eHh4aIhoaGhoaGhoaGhoeLiYeHiIiLjY2Mi4yLjY2Ojo+Ojo6Pj46Ojo6Ojo6Ojo6Njo6NjY2AeHZ4eHp4enx6fH5+fn5+fn5+fn5+f39/fn59fn9/f39/gH9/gIGDhoyMjIyMjY+QkpOTk5KSjYyMjIqHioyKh4eJiYWCiouIiYWJjpCNjo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6NjI2NjI2LiYaHh4eHiYqLjY6NjYyNjY6OjY2OjY2NjY2NjY2NjY2NjY2OjIyNj4+OjY2MjIyLi313dXd5enp7e3p+fn5+fn5+f35+fn5/f39+fn1+f39/gICAf3+AgYOFj5KRkJGSk5OTk5OTkpKLi4uLiomMiouLiYuKhoeOjYiIjI6OjIuMjIyNj46Njo6Ojo2NjY2MjY2NjIyMjIyMjIyMjY2NjYyMjI2NjYyMjI2NjIyNjIyMi4yMi4yMjI2MjIyMjIyMjIyMjIyLi4uLi4yNjY6Sk5OSkpSRkJOVlZSTk5COjo6Oe3Z2d3h6ent7e31+fn5+fn5/fn5+fn5/f35+fn9/f39/gIB/f4CBgoSNkpKTkpOSkpOTkZKSkoqJioyJi4qJjIuKioiHiYqKi4mKjY2Mj46Nj5KUlJOUlJOTkpGSkI+Ojo2NjY2Pko+OkZGOjIuKioqLi4qKi5CPjoyMjIqKioqKioqKiouKioqKi4yLi4uMjIyKiouLi46RkpOTk5SUk5STk5SUlJOTk5KSkpKSk5F6dXZ2eHt7e3p6fX5+fn5+fn5+fn5+fX5/fn5+f39/f3+Af39/gIGChIuRkZGRkZKSkpGRkpGRiYmIiIqMiYiJiYuJhoSJhoyKh4ySkpKTk5OUlZWWlZWUk5OUlJSUk5SUlJSVlZWVlZWUlJOTkY+QkZKQjoyRlZWVk5KSjo+QjYqKi4qKi42OjY6RkpCRkpKSkpGRkpKSk5OTk5OTk5OTk5OTkpOSkpKSkpKSkpKSj3h1d3l6e3t7ent9fX19fn5/f35+fX5+fn5+f39/fn9/f4B/f3+AgYKEi5GQkJCSkpKRkZGRkZGIiIiIi4uJg4eLi4yMiIeHjYyNkpSSkpOTlJWWlpaVlZSSkpOTlJSUlJWVlZaXlpaWlpWUk5SUlJSVlJSUk5OVlZWUk5KTk5OTkJGSkZGSk5OTk5KSkpOSkpKSkpKSkpKSkpKSk5OTk5SUk5OSkpOTkpKSkpGRkZGPdnJ3enp7e3t8fX59fX1+fn9+fn9+fn5+fn6Af39/f3+Af3+Af4CBgoSKkJCRkZGRkZCQkJCQkIeHh4eIiIiFi4+KjI6Njo+OkJWUk5OTk5SUlZWVlJSVk5KSk5KTlZSUlZaWlpaWlpaWlpSTk5OTk5OUlJOSk5SVlZSTkpKSkpOTk5OTk5OTk5KSkpKSkpKSkpGSkpGRkZGRkZKTlJSUlJSTkpGRkZGRkZGRkZGRkYx0c3d6ent7e3x9fX1+fX5+f35+fn5+fn5+fn9/f39/fn9/f39/f4GDhIqQkJGRkJCQj4+Pj4+Ph4iKi4yNjYuOj42Mjo6RkpGSk5OSkpKSk5SUlJOSk5OTkpKSkpOUk5OTk5WVlZWUlZWUk5OTk5KSk5OUk5KTlJSUk5KSkpKSk5OTkpKSkpKRkZKSkpKSkpKSkpKSkZKRkZGSkpOTlJSUk5OSkZGRkZGQkJCQkZCRinN0dnp8fHp7fXx9fn59f35/f35+fn9+f31+f39+fn59f39/gH+AgYKDipCQkZGQj5CPjo+Pjo+Oj4+Pj4+Pj4+PkI2OjpCRkpKSkpKRkpKTk5OTkpGSkpKRkZGSk5KSk5OSk5STk5OTlJOSk5OTk5OTk5OSk5OTkpKSkpKSkpKSkpGRkZGSkZCRkZGRkpKRkZGRkpGRkZGRkpKSkpKSkpKSkpKRkJCQkJCQkJCQkJGGc3V2e3x8e3x9fX1+fn1/f35/fn5/gH9+fX5/fX5/fn5/f3+Af3+BgYGKkI+PkI+Pj4+Pj4+Pj4+Oj46Oj4+Pj5CQiI2PkJGRkpKSkpOTk5OTkpKSkpKSkZGRkZKTk5KTkpGRkpKSkZKSkpKSkpKTk5KRkZKTkpGRkpKSkpKRkJCQkJGRkZGQkJGSkZGRkZGSkZGRkZGRkZGSkpKSkpKSkZCRkZCPj4+Pj4+Pj4+PkX9ydHh8fHx7fHx9fX5+fn9+fn5/f3+AgH99fn5+f39+f39/f4CAf4GBgYqPj4+Pjo6Ojo+Pj46Ojo6Ojo+PkI+Pj4+GjpCQkJCRkZGRkZGRkZGQkJCQkJGRkJGRko2QkpGRkJCRkZCQkJGRkZGRkZGRkJCQkZGQkJGRkZGRkI+PkJCQkJGRkJCQkJCRkJCQkJCQkZCQkJCQkJCQkZCQkJCPj4+Pjo+Pj46Ojo+Pj4+PeHJ2eXx9fHp9fH19fn5+f35+f39/f4CAf39/fn5/f35/f39/gIB/gYGAio6Ojo6NjY2Ojo6Ojo6NjY2Oj4+Pj4+PjoiQkZCPj4+QkJCQkJCQkI+PkJCPj4+PiI+QfYyQkI+Pj4+PkI+PkJCQkJCQj4+Oj4+QkI+PkJCQkJCPjo+QkJCPj4+Pj4+PkJCQkI+PkI+Qj4+PkI+PkJCQkI+OkI+Pj46OjoyMjY2NjIqDiYhzc3Z4fX58eX18fX1+fn5/fX5/fn9/f39/f4B/f39/f4CAgH+AgH+BgYCJjY2Ojo6Ojo6OjY2OjoyNjY6Ojo6Ojo2NiJCRkI6Njo6Ojo6Ojo6Pjo6Ojo6Pjo57jYx2io+Ojo6OjY6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Pj46Oj4+Pj4+Pj4+Pjo+PjY2MjYyNjoyLi4mJiYiFhYSDgoKEgnR5fXp4dXJrZWltb2xmZmdncHNzd3l9fnl6e3x9fX1+fn59fn9/fn9/f39/gIB/f3+AgIGAgIB/f4CBgImNjY2NjY2MjYyMjIyMi4uLjYyMjIyMjIyGj5GRjIyMjIyMjIyMjIyMjIyMjIyMjnOHinOFjoyNjY2MjIyNjY2NjYyMjI2MiomKi4uJh4KAh4iEgXt6gH57fXx8fXlzcnJycnV1cG1ramppZ2NkYV9bXF1eWFVXWFlTS0VJSkpLTE1PT0tgdHR3eX19eHp5e3x8fX5+fn1+f39+f35/f4CAgH+AgICBgYCAgICAgIGAf4OEhYSFiIuLjYyMjIuLi4yGiYqKioqKh4OOkJGNiouLi4uMiYmKioqKiouLi4eDboKCcH+IhYWEhIeJiYWCg397fHl6e3pzcHFxcW1samdsbWdlZmVmZGNlZGVkZWVlZWRkZGNhYV5dXFpYWFdUUFFSU1JTTU1KSUZESEpHR0hHR0xOSWdzdXh6fXp4d3l8fHx8fn5+fn9/fn9/f39+f4CAgIB/gICBgICAgICBgYFnXmBjYWNucX17ent/fXd8fHZ4ent4eHpvcHt4eXt8e3h3e394dXd0dHZ1dXZ3dXFmbWpxc29naGtsbm9tamlpaGhlZWRkZF9gYWJgYF5dWVhaWltdXV9gX2BfX19gYmFeXl5eWVldXF1bV1dWUlRSU1NOUUpISUZERUhMTEhGR0lLSklNbXJ0eHp7end3eXt6e3x+fn1+f39+f35/f35+gIGAf3+AgIGAgICAgICCgWdYW1pZXFtcY1xaXF5ga3FtcHBvbm5vbmtpbmxrbG9qaWtraWpraWZmZ2dnaGhnbGdpZnJuaGdjYmJhYmBgXVhbW1dYV1RWUVBUU1NNSkxLTExOTk9UWFhXVVVUUlBQTU1QT05LTE1QUU9MTEpHSUlHSEhJSEhIR0ZHSEpKSEhISUlISVZwc3V5ent5dnZ5enp7fH59fX5/f35/fn5+f3+AgX9+f4B/gICAgICAgIGBbFtYVlZWWVlaWVlYVVZoamxubmxra2poaGloZGVkYlxiZl9fYWNfXF9dYF1eWl5cZWZecmxdXlpZX1tYV1NOTUxLS0tMSUtNTktKS0tMSktQTEtLRkdHSUlGR0lISUZFSEdGRkVERUVEREVJSUlHSEdIRkZLTUtJSUlIR0hLTU1LTExMVXFzdnl6e3h2d3h3ent8fn1+fn9/f39+f3+AgIGAfn5/f4CAf4CAgIB/gYJoUlRVVlNVV1lZWVdXV1tbYWNfXlxbWFZWWVZSVFJRUVVUU1NUUE1KTU5QUk9OUFNhYllrZFRRUVFUUFBOTk9MSk1MS0xKSktLRklJSkxJR0pISUlFR0dGRkVFSElKR0ZHRkZHR0hKR0dISEpMSkpLSUlISktLSkhKS0pISUtMTU9QUEtUdHN1eHp6eHZ2d3d6enx+fX5+fn5/f35+fn+AgYB/f3+AgYB/gICAgH+AgmlQUlRXVVRWWVdYWFpbVFRTUlBRU1FRUU9OTlBQUU9MTlBPTk5NTEtNTk5QTU9QWWhoYmliUU9PTk9QUFFPTk5PTk5QTk1NS0lISEpJSUlJR0ZHR0dJSkhJSEhJSEhHSEdISElISUxLSklISkpJSkpIR0pMS0pJSUhKSktMTk1NTU9RTFVzcnN3enl3dnR2eHp7fX19fn5+fn9+fn5+gICBgICAf4GBgH+AgICAgICBbE9PTlRZVVVdW1lXV1hOTUpKSUZKT0xKSkdJSk1NS0pMTUpHSUlJSktLRkNGSk1jcmtncGpVTk1MTU9PT09NTk9MTk5OUFBPTE1MTk1MTEpJSEdJSElISElJS0xLS0pJS0pJSklJSUlJR0dKSUdJSUpKTk1OTEhJSklJSk1PT01MT1JOWXBwcnd4d3d0c3R3enx+fX5+fn5+fn5+fn9/gICAgICAgYCAf39/gICAgIFvS0pNTlFOTlVXVlZSU0lFQ0VFUkREQT5CP0RAQD5CREFAQURHRkVIRUJAP0BCUGxzbWlzcV9PS0tSTEhISklKSUlLSkxQTk1MTU1MTU1NTElIREZGR0ZGRklKSUlLSkhMSklKSkpJSEhKS0tIRkdJSklLTU5OSktPTUxLTU1PUE5QT1BgcG9yd3h2dHJzdXd6fX19fn5+fn9+fn1/gICAgICAf4CAgIB/f3+AgICAgXNQUE5OUE1KS1BSUE5RQ0RCQUZRRT1DPT9FSDk6Oz0/PTxBRkA+Ojs+PUJJQjxPaXBtZHJ0ZkVKXlRGQkRFRUZFR0dHR0pHSEpLR0NER0pHQ0RFQUFDR0hHSEdISktKSElMS0lISktLTU5MTUxMSkpMS0lLTU9PUFNRT1BQTk9QUlFNUGdwb3N2dXRycXR4eX19fX1+fn5+f4B+foCAgH9/gIB/f4CAgH+Af4B/gICCdlRVUVFQT0xNUFBOT09BQkFAQkE/Oz48Pj8/Ozg5ODs7OkA6Oz48Ozs7QVlRPkVmbWlgcHFpUmFmRUVGREdJSEM/QEBAQUFCQUE/Pjw9PkFAQD8+P0BFR0dHSUtMTk1OTUxNTUpLTVBVU05MTlFOTk1OTE1NTk9OTk1LS05OTk1OTkxUbnBwcnR1c3Fydnl5fX19fn1+fn5/gH5+gICAgICAgH9/gICAgH9/gH+BgIJ4UVFSVFJTUVNTUVFST0BAPT4/PD8+QEE/PT45Ozo7Ozk5Ojg4Ozw5Nzk6R1tTU2Nqam5xbWpobVQ+Q0ZEQ0NDPzs+PkBDQ0E/Pj9BPkBAQj9APD9CQEFDRUVFSktQT1BPTU1OTExMT1JRUFJOTExPTUtOT0xMTEtMS0tKS0tKTU1LS1xxcXF0c3VycXR4eHp9fn1+fn5+f39/fn5/gIGAgH+Af4CAgICAf4CAf4CAgXxSTU9RUFFSUlRSU1NOPDs8Ozs7P0BBQkA9PDk8PTw6Nzk6Ojk3OTo6Nzg6TWNjaWxqcm9ta2xjQD1AQUA9Ozs+PD09QEJDQT9BQkE9Pj09Oz0/Q0RCQD9BREJFR0pKSkpKTE1MTExNTExOVVNLTE1USVBKSU1KSUpLS0pJSEdKS0lKZnJxc3RzdXJydnl5e31+fn5+fX9+f39/f36AgICAf4CAgICAgIF/gIF/gYCBgFZMTlBQTlJRUFBRUU44PT88PDo9PkFAQT8+PkA/Pj48PT0/QD09PT9DOz0+XW1vcG1xbmxrbE87Pj8/QUA+P0E/QEBBQEBAPT8/PTw6Oz09PD9AQUJCQUBCREZGRkdGR0dISUtMTExLTEtKS0lKSk1MTEpMS0lISUxMSklJSElLR01tcHF1dXR1c3V4eXl8fX5+fn5+fn5/gH9+gIB/f39/gH+AgYCAgYCBgICBgYCCYUtPT05OT1BPT1BQTzo8Pjw9Oz8+PkFBPz0/Q0NEQT89PkBBP0A7XW0/PkNLZnJxb3BuamtdPDo9PkFBPz5AQD9BPz89PD48PTs7PD0+QUA/QD5AQ0NEQkRFSEVFR0hISEdGSUpJSUlJSUhKSkpKTEtKSklJSEhKSktMS0lLSkpIVnBwcXNzdHR1eXp7e3x+f35+fn5+f39/f39/f3+Af4CAgICAf4GBgICAgIGBgIJtTFBRTk9QTk5PUFBPPjw8PT4/P0A+QEA/Pz9CRkQ+PDw9QD04Ojttdkg4PDlLa3JvcG5rZ0c7ODo7Pz49PD07PEA9PTw8Pjs9PD0+QUBCQUBAP0JEQ0RFRkZGQ0VHSElJSEhJS0tMTUpKSUpNTUpLSktJSEhISEpJSktKSk5MSUlfcHBycnJ0dXZ6e319fH5+fn5+fn5/f35/f36AgIB/gICAgICAgYGAgICAgIGAgnZNTk5NTk5MTE5QT0w+QTw8PT8+QkM/PkFBQUJBQFlRPD09SUxFRnV2TTc4OThKbHJycG1TOzw6Ojs+Pz89PDg6Pjw9Pj89Oz4/QEJDQkJDQ0FCQkFCQkRCQkRCRENGSUdGRkhJSUtNSklKSktMSkpJSkVESUlGRkhISUpKTEpGRmdwb3FxdHZ1d3t8fH18fn59fX1+fn9/foB+fn+AgH+AgICAgICBgYCAgICAgICBek5JS0tMTExFSUxOTTw/PDw9PkBAQUE7QkNCQ0BDc3lJO11/g395e3dWPD4/PT1KZndtUj09Pj89PT5BQ0A8OTtBPz4+QT07P0JAQkNCQENDQUNBPT0+QD0/QUFBQENFRUBAQ0JDR0dFRENGRUZGR0VEQEFHR0ZDRkRHSEpHQz5IbG9wcHF0dXZ5fHx8fHx+fn1+fn5+fn5+f36Af3+AgICAgICAgIGAf4CAf4CBgIF+UUhLTU1NS0pLTE9RQD8+PkFBQEBBR0FCRENFQUhyeWtigoSDgoOAfV0+QENAQT5FdFY7PD1ARUFCQkZIQz08QERDQUE/Pj1AQT4+Pj88PkBER0VAPkBBP0BDRkVDQkNDQEJEREJERUFCPkFCQkFCQEA9QUJDRENDQUNFR0E/PVZwcHFwcnV1d3p8e3t7fX9+fX19fX1+fX5+fn9/foB/f4CAgICAgYCAgIB/gIGAgX5SSEtNTUxLS05OUlVEQkBDQ0FBQkBCQ0BAQUFARm90fYKCgYN+fYR1TUFDRUBAQU52akhAQ0VJSUlJTU1LRUNGR0hFR0VFRUREQ0E/QD4+QkZKSkdFRUdGRkpOTktKSUdHSEtMSUdHQ0REREVEQUJCQ0BDREVEREVERUZDQkFEZW9wcXF0dnV4e3x6fHx+f319fX19fn59f4B/f39/f39+gIGBf4CBgICAgH+AgICAfVJJSUpKSEpKTE9SU0dGRUdIREdIREA+PDs+QEVFaHN9gXx/hH55hXBCREVEQ1h1hoiJflhHSUpMTE5PT0xIR0hHSElJSEhHR0hIRUNFRUVFRkhKSkZFR0lKTU9PTU1LSktKTU5LSUhHSElIR0ZFRkZGREZIR0VFSEhGSEdIRlFubnBxcnV2eXt7e3p9fX5/fX19fX1+fn1/f39/fn5/gH+BgYGAgICAgICAf4GBgIB8UEhHSElGR0lKTU5OSkxJSUpLTE5KRkNBQkNGSkdge4B/d3+EhYOEiWxBQVZ0h4mHh4eIg1dITE1MTU5MSkdHR0dER0dHR0ZIRkhFQ0RERkVEREhIQ0NDR0pKS0xMTExMTElKS0pKSUlJSEpISEdISUhHR0hGRkZISklJSUlIXW9vcXJzdnd6e3t6e319fn59fX19fX5+fYB/f39+fn+BgIGAgYCAgICAgIB/gYCAgHxNR0ZIRkVGR0dKS0pMTUxLTU5NT0tJSEhKS0tMTE5bfIKCg4OFhoaIg1VshIeGhoaHh4iHfFBLTEtIR0ZGREVDQ0BBQ0NDQ0ZGRUJAPj5AQUFAQkQ/Pj9ERkhERUdJSklJSEhJR0lJSkpJSEZKSkpKSUpJSkpKRklMTEpKS0tmb3BzcnR2eHl7e3t8fH1+fn19fX19fn59f39/f35/f4CAgICAgYCAgIGAgICAgICAfU9GRkdGR0hHRUZHR01NTUtMS0lHQ0NDRElLS0xMSlWBg4SEgoKFhoaDgoaFhISGhoaHiIaKdUlJRkI/P0A/Pz88PDw+Ojo8QUFAPjw5OTg8PD07Pjs5Oz9BQkBBQ0NCQEFCRERCQ0ZISUhISExNTEdJSk1NTk1KSktLSkxNU2xvcXRzc3d5e3t7fH19fn9+fX19fX1+fn5/foB/fn9/gICBgIGBgICAgYCAgIB/f39+UUZFRkdJSUdEQ0VGTk1MSklIRT85Oj5ARUhISkpJZYWEhIR/gYKDgoOEhIWFhoeIiIiJiYyOZkJCPTg4Ojo5ODc4ODk2NDc5Ozw6ODU2Nzc4OTc4NzY4ODs7Oz1AOzk5OT08Pjs7PUFDRUhKTUxMR0lIT1JRUFBOTE1NT1Fdb3BydHN1eHp7e3x8fn5+f359fX59fX5+f39/gH9/f4CAgICAgYCAgICAgICAgIB/f39RR0ZHSEpIRkVGR0hMTEpJSUdDQjU2OjxDQENHSUlqhoSEgX6Bg4ODgoOEhomKi4yLiomKi4yJVDs4NjU2NzY2NjQ1NzYzNDY4Ojg3NjU2NTY3Njc3ODo3Nzc4OTs3NTc4OTc5ODc2OjxAR0ZJRklGRUZPU1JTU1JPUFBSVGVwcXN0dHd5e3t7fH1+fn5/fn19fX19f39/f3+Afn+AgICAgICBgICAgICAgICAgH9/flJISEhJS0lHSUpJSkpLREVIRUJANTc4OD06PUVDQmaFg4GAgoODg4ODhYmKiomJioqKiouJiYqBSDY3NjQ2ODg3NDU3ODQ2NzY5OTc2Njc2NTo5Ojs6Ozg5ODk3Nzc3OTo5ODg3ODU4OTtBPT4+QkE/QUtMT1FQUU9PT1JXa3FydHR1d3l7ent9fX5/fn9+fX19fX5/f4B+fn9/f4CAgH9/gICAgICAgH+AgICAf39+VEhHSUlMTUtKS0tMSUg/QEFAPDo1Nzk4OTc7Qjo9cYSAgYOEhISEhIaJioqIh4iIiIqKjIqJiYx6Pjk4ODs8PT45Ojs8ODk7OTo7Ojk5Ozo5PT09Pjs7PD06Pjs5Ozs8Ozw8OTk8ODo6Ozo5OTk8Pzw9QUJESUpNS0lLTFdvcnN1dHZ4e3t8fHt9f39+f359fX19fn9/f35/f39/f3+Bf4CAgICAgICAf4CAgH+Af35URkVGSUxOTkxKSk1CPzo7PDs4OTk4OTo6Ojs/Pkh+hIKChIWFhYaIiYiHhoaGiImIiYuMi4mKioxsPDs+QkNFRUFBQUI+QEJAQD49PT5APz8/QD9APT0/Qj9BQT9BQD1AQEA+P0E9Pjw7Ojs5OTs/PTs7PT1BQUNBQkNBWHBxdHR0dnl7e3x9e31/fn9/fn19fX5+f35+fn9+f4B/f4CAgIB/gIGAf39/gICAf39/flJFQ0FHSk5PTElHSzo4Ojs5Ojo8PTo7Oz09P0BCUoKCgoSFhIWEhomJiIiGhoaHiImKi4uKioqLiotePkNHSUtKSUZHR0RGSEdFQkBAQ0VDQ0FCQ0I/QERIRENFREVFQUZFRkRFRkRAQj88QD49P0A+Pz8/Pj8+Pjo7PTxgcXJ0dHV3enp6fX19fn5+f39+fX19fX5/fn5+fn5/gH9/gICAgICAgICAf4CAgIB/f4B+UERAPUNIT01HRkJEOTc6Pjo8Oz4/Pz89QUBDREZYhYKDhIWFhoaIiYmIh4aGhoeJiYqLjI2MjIuKiohXR0xNTUtOSklLSElKSklFQ0RGR0ZEQ0VGREJISUtIR0dGR0dFS0lLSUpLSkNGQ0NEQkFBQ0JEQ0NERENBPTs9QGhwc3R0d3d6eHt8fH19fn5/f359fX1+fn9+fn59fn+Af3+AgH9/gICAgICAgICAgH+AgH9PQT49P0RMS0BCQkE5ODw+Ozw7PkA/QT9CQkdHSVmFgoOFhYaHiImJiIiHhoaGiIiIiYqMjYyMi4uKjH9QTVBNS05LSkxKSUlISkZER0hISUVFSEZGRUxMTUlKR0dISUpOTU5MTE5LR0ZHR0VFQ0ZGRkZERUhIRkNBP0BMbHB0dXZ4eXl5fHx8fX1+fn9+fn19fX1/f35+fn5+f39/f39/f3+AgICAgIB/gICAgICAf1FBPz4/RUdHPTxAQDk4PDs8PTo/QD4/QENGSUlQX4KDhYSFhoaHiIiIiIiIh4eIiIiJioyNjIyMjIuKjXJOUU9NTExLTEpISEVKSURKSEdLSkhKR0dHS0xOTExISElKTVBOUE5NT0tJR0lKSElESUhIRkZHR0lGQ0JBQ1VucHV3d3l7eHl6enx8fX5+f39+fn1+fX5+fn5/f36Af4B/f3+Af4CAgICAgICAgICAf39/VERBQUJHSEI/OD9AOTo8OD0+Oz1BPj9BREhKTFVxg4SEhISFhoeIiIiIiIeGiIiIiImJjIyLjIyLi4uLi19SUlBNTk1LSkdGQkdKR0xKRktOS0tKSk1NTE9QTkhJS0xPUVFQUU9PSkhKSkxKS0ZHSEdFR0hGRUVCQUJCXG9yd3h5enl5eXp6e3t+fn5/fn59fX19fn9+fn9+f4CAgIB/f39/gICAgICAgICAgH9/f39VRUNFRUdHRUQ7P0E7PTw5QD4+QEJHR0FHS0xQVnmFg4ODhISGiIiIiIiIh4eIiIiIiIqLi4uMjIyMi4uNfFhWUlJUUk9MS0pERUZLT05PV1VRUE9RU1JNU1RPTVNMUFNVVlJTUVBMSk1NTUtOR0dKRkZJSkRERUVCRENjcHV5eXp6ent6e3p7fH59fX9+fX19fXx9fn5/gH9/gICAf39/f3+BgYCAf39/gIB/f39/f1VGRkdHR0dIRj5AQj0/PT1CP0NCRlZORk5QUFRYe4aDhYWEhIeIiIiIiIiIiIiIiIiJiouKioyMjIyOi4uLaFZVa2FFUlFRUEk7O1FTUmB1XVVWVFZZWVJZWFJaZlBVV1pdUlRXUVBOUlBQUFFLS0tISEpIRUZJSUlISWlydnl5enl6e3t8ent8fXx9gH59fX19fX1+f39/f3+AgIB/f39/f4CAgIB/f3+AgH9/f35+U0hKSUlHRkZFPz9BQUVCQ0dFREVMWFJNVFVWWFt8hoWHhoWGh4iIiIiIiIiIiIiIiIiIlJyMioqMfWGKi4uHbFtkVTpYWFhTUT9AVlVZXGRgVllicl1dVl1aVkVRWVpbWV9UWmdSVVZYVFRWVE9PTUpMSklJTE1LT01Tb3N2eHl4d3p5ent6e3x9fH5/fn1+fX19fn1/f39+f4CAgH9/f3+AgICAgH9/gH+Af39+fn5WSkpJSEdFRERCQT9ITUlNUEtJS1BUU1NYWlpcXHiFhIWFhYWGh4eHiIiIiIiIiIiIiImcnaCPiY5nO36MiYqLem5wWFpbWlJUUlZWVFpadYNZVX2QYFxYXV9XSVZdXVtbX1lJWVhZW11YWFlXUlFNUFFNTU9TUVFVUmFzc3Z3d3Z4eHh6e3p8fX19f39+fX59fX1+fn9/gH9/gIB/f3+Af3+AgICAf39/gIB/gHh5fVlOS0lJSEZCREBBOlBRUVdYUFBPUVNUVFhYWVpbboGCg4WEhYaHh4eHh4iIiIiIiIiIiJaanJeIioFuhomIh4OKfmZZWVxZU1VUV1JRV1ZjloBRZXJYWldfZ1BgZltbWFxnYUdPWmhnXFtcXV1XU05TUFBRVlZWVllabnJ0d3Z2dXh4eHt7fH19fX5/fn59fn18fn9/f3+Af39/gH+AgH9/gICBgYB/gH1yfX9/b3R8XVNQT01LSkVDP0A7UFBaWltSU1FPUlJSVVNWVFdfdXiAhYSEhYaGhoaHh4eHiIiIh4eIh4ORjomJiIaFiIiGfYB7XFBVWFRSVFJRUUxPTUtmeVpdVFlVVl1aTFRaVFNUXlpYV1dXemtYWltcXlRRUVBJTk9XVlhaWmRxc3Z2dHR2eHl5e3t8fH19fn99fX1+fX1+f39/gIB/f3+Afn56eHd2c3V7f3+AgHRrfn5rcnleW1ZVVFJPS0ZDREFNXoNsVlJTTk9RT1FVUlNSUlRjZHaAgoKDhISEhIWFhISDhoaGhoeIhn6JiYiHhoOHh4d5bXFWSUtNTktNS0hKREZIRUM+U2NVf1JRUU5LUlRRTU9ZUU1OUVNVVU1RU1JQT01MSENJSFJUVVpcbXJ1dnV0c3d7ent7e317fX19fn19fX59fn9/f4B/f399fX5+f39/f4B+e3Zzd31+fmR1fWlxdF9kXV5bWVZQTElMSWFsknRQUVNOUVJRUltSU1JRUlZUYnN7fH+AgYKBgX99e3uAf4OChYaHgoaGhoGEgYaFhnVfXUtDP0NDQ0NCP0RQQkNAQz5CSEdWQEhOTUddaVFIRk9GREVGSEdIQkNIR0hLR0RCQURBT1BNU2RzdHZ1c3R2enx6e3t7fHx9fHt+fX19fn5/f3+AgIB/f3x8fX+Af39/f4CBgH12dHt/bWh8Z25xZmllZGJcWFNRUFVSc1dlW09PTkxRU1FVWVNVUVFUUk9WYGtscnZ7e3h5dHJuc3RzeXh+foOAg4OCgIKAgoGBa0xHPz87Oz5AQD8/PmpRS2FFRkhJRUI/R0xNR01RVUlCRT8/PD08PT0/PT9BQ0NAPzw9Qj5KTUZVbnV1dXN0dnh6fHp9fHx9fX19fH59fXx+fn9/f4B/f39/enl3eHd2dnh7foB+fXt4dnx1YXhnbHBqbGppZmBbUVJaXFleSkpQUU5LTFFSUVRVVVdRUVdWUFhbYl1hZ21tbG9rZ2BucmptbHF1e3p9e3h6fHx4d3hkQkBAQj06QkNBQURCXF1Pe05PTk5LTE1PT1FMS0xXTUhHQEI8OTc3NTk5PTs7Ozg5ODk/O0JIP1xzdHV2dXZ4enx8fH18fH19fn58fX19fX9/f39/fn9/f314dXZ6e3p3eXh1d3t8eXh1eXdjcWhpcG1ubW1oZl5PUF5cWklIUFJRT01QUU5RUlRWWFNSWVROWVpbV1ldXl5gZWBdXnF2a15gZ2t3b29sam9ubmxmYlhHRkZIQkFHSUVFRkRNUlBhV1JXUVBTU1JVW09PUVdQTUlERj46OTY1ODc5Nzk6MzY2Nzk1PEI9ZXNzdnd3eXp7fX18fHt8fX5+fnt9fn19f39/fn5+fn9/e3d1eX18enh8fHx8dHd2d3Z1d2tuaWhxbm9vb2prYFVXXlpXTUtUVFNRUVVPTFJTVFdYVFRYUkxXWVpWWFhWWFldV1dYaHNrXVZhc2thYV9eZGFfXllVUE1PTkxJSEpLSUhGQ1FQU1pXVFROUVNZU1xlVU9TVFFOS0lIQz9BOTk4ODk3ODg1NzU3ODU5OUducXR3eHp7e31+fX18e318fn5+en1+fH1/f359fn59f358dHR1e3hycW9vbnR4cXJzeHZ1cWZkZ3JucHBxbm1kXV9fWVdPUFhWVlNUVk9PVVZYWFlTVVRMS1RVVVVVV1BUVVdUVVJdbl5STllfW1ZZO0RWWFRbZkpMUFJST01NTk5OTEpGUVBVWVNUTkpPT1VTVFxWUlVTUk9NS0lISEY/Pj06Nzg3NjU5OTY3Njc1V3Bwc3d5ent8fX59fnx8fXx+fX15fX18fn5+fXx8fX1+fXxydnF4eHJ2dXFxbnBwb3B1dnRuamRkanBwcXJwbmZlZGNcXlJUWlZXVVRXVFJYWFlZWVJVT0lHT1BPT01SSk9QUFBOTk9UTE1JUE9TVFUyPFhNSUFRPWNhUVNRUE5QUVBOTk1RTlRSUFJNSUxLT1JQUlJTVFFST0xMS0xMSENCQT06Ojg3NjtCNDU2Njpkb3F1d3h7fHx9fnx9fH19fX18e3h8ent9fX58e3l9fH18e3B1b3d1cHV0b3N2cHFxcHR1dmNqZ2VXaHRycnFuaWlocFZWVFVYVVdVUldWVVpZWFdVUVNGRkFGR0dIRkpESEpIR0VITEhLSEZMTVBNRy9FX1I+M0A+am9hUlJRQEZVUVBRUFFOUU9QT0xKTExPUE5OUFFRTlBPSkxNTUtHRUVEQjs9PDw5PUc2Njc3RG1wdHZ5e3t8fX18enx8fX5+fXt5dnh3eXl8fXp6dn17fHp6b3Fud3JwdnFtcHNwb3Bzc3N0ZmdgaFpXa3JzcmxtbWtuYWVQU1RSU1RPV1ZWWVlWUVFRT0A+Oz0/QEJBQ0BCRURBQEdIR0hFRkhKTUtFR0NPUkM4RU5TXWZTUVNBR1VQT1FRUE1NTk1LTEtMTk9PUU1PT01ITExJS0tMS0dGRkVEPEFBPjtARTs8ODlTcHJ0eHt6e318fHt5fHp6fn58e3V0dXJ2dnp6eHpyfHt8eXltcW94cnF1bm5xcm9vb3Rzc3J1dGtnZ15lam1wa29xbWltY0xPT01RU0xUVVRXV1VMTEtIPTk4Nzs/QD48PUFAQj0+RUhHQ0ZGSUdKSkBGQUFARkhFSk9IUFJhXFFQUk5TT09QTExPTUtNTE1PTltXS01RT0dJSENJSkxMSkZGRkQ/QkM+PEJGP0I/QWRwc3d6ent7fHt6end8d3l+fnt7cXN0cHJzd3R4eHN6e3l2d2xxb3ZxdHRsb3Fybm5vc3ZydHNycmtsZW5zaG1ubWxtbGprSUxISE9RSlFTUVRTT0tIQ0U9OTg3OT9CPjs/QkBAPkFESUVDR0dJRklFQkI/Pj1DQkFHSkVNT2JlUU1OTldLTE1LTE1NTUxLTk5TZE1KTFJJSUlFQUhKTE1OSkdJRkJBQkA/RUZFSERLbm92eXl5e3t6fHp3c3h0eHx8eXpucXJtbm9ycnZyc3h8eHZ2bXBtc3B1dGxwcHJvb29ydnVyVlZucWdseYRqbXFybm5qaG9ISkNHTE1JTVBNUE9IS0U/Qj05OTk6P0I/PEBCQkFERUdLRkNJSUdHSENDP0I/P0BBPkRFQ0tOUVRMSklNVEZJSUpMSktMSUpMTU9QUlBLR0NLR0NCSkpMTU9NSUpJR0NDQ0RJSk1MSVlybXd5eHp7e3l8dnJwdXJ0eXl2eGpxbmpsbG50dG10dXtzdHhyb25xb3ZzbnBvcnBvcHN0eWpOYGdzanR8eWdvc3FpcWhlcUhLQ0dISEdKS0lKS0RHQj0+PTo6OjtAQj89QkJCQ0hGSkxKRElJRkdHQ0M7QUBCPkBAQ0RDSU1QR0lLR0hLREhJS01ISkxISUpLSk1dUkhIRE1HQURLS01NUE5LTUpLRkdHSk1OUU5MYm1pdnZ3e3h7en1xbWxza3B0dHR1aHBtamlra3RwbnR0eXByeXRvcnFvd3NvcXB0cnBydXR5a05WbXVscXt2aW5vaWp0aGRvRktERkVHRUZGR0VHQkNAPjw9OTo6OkBDQD5CQ0RFSUZKSkxGSUlHRkZEQjtCQ0M+QEREQ0VHTE5IS05IREhFSUxOTUhJTEdGR0lJTE5LSkhFTklCRk1MT01PTU5OTUtJSElPUlFSTlJmZmZxb3N4dXt6fGxoam5la3Btc3FmbWxoaWtsdG1wdXR3cW94dG90c3J2c3BxcnRzcnR1dXZ2WFZ1dWtvdHJrb3ZsaG1lX3BHSkNFRkVCQ0JFQERCPkA+Ojs7PTo9PkNBPkFDRUdKRklIS0hHR0dGRUNAPUVFQj5CRENDRUdISUdNUEpGRkdLTk9LRkhKRkVERUlKSEtJRkhQS0RJTUxQTU9OT09OS0pITVJVVFJPV2RgYW1ncHJvcnl6Z2VoaGNpbGdxbGZsbWdpa2xzbHB2dXRwbnZyb3Nyc3V0cXNzdXRzdXZ2dnl2dXR3bGp1dW1ydnFsbmxlck1IREVHQ0JAQkQ9QkE+QT06Oj0/Oz4+QEI+QEJER0tGSUZJSEZGR0VDQkFBRkZDQkNCREVFR0dIRkxRTElPSkpMTElHSEVGRURDSUlIS0pHS1JNQk5PTVBPT09OT09LS0tPVVdWVVRYX15caWFtaW5ocnNiZWZlZGloZm5pZm1taGtrbXJpcXZ1c3Ftdm5vcXJzd3Nyc3R1dnZ2dnd2d3Z2dHd1anN1bnV0c3FyamtzTUdHRkhCQkBERTxBQEBDPDg5PT45Pzw/QkBAQERGSEVIRkZHRkVFRENFQ0RJRkNGRUJFR0VGR0dFSk1LSFFNSktISElFRkhJRkNJSklLTUtPU05EUVJQUVJOT01OUE1MTVNXVldYVlhdWl1kYGhiamlna19lZWZjZ2dna2dna21rbWxwcWd0dHVyc252b3FwcnR4cXNzdXZ1gpF5dnZ0eHV1d3htb3VvcnN1cXFpb3pNSEdISEJCQkZFPD9CQkQ8Nzo+Pjo+OkBCPj8/Q0VGREZEREdFREVDREVGR0pFRUlHQ0dIRkhHRUNGSkpHTUpMS0hKTEZJSUtIRUtLTExPT1JUT0hTVVNRU1BRTU5RTk1QV1pWWllWWl1aWGFgYGBeaGVjYGRmaGdqaWhqZmhubGxubXFwaXV1eHJycHVwcHBydXZwdXN1dnV7fn14dnR3dnZ2eHBsdXBtc3RucHJyeU5JSEdJREFDSEU8QEVCRT04Oj4+PTw8QUI8Pz5BQkZDRUJDSUVDRUVGR0dHSUZHS0hDSEhHSUdGREhLSUdLSE1LSktMSExLTUtKTkxPTlBSVVZPS1VXVFFUUVJMT1FQT1RZWllcWllbXl5eYGNeXGFja2JgZGdocoVoZ2pmam1ucG9uc3JqdHV4cnNzdHJucHF2cnF1cnV1c355jn11dXZ2dnZ4cmh1cWtydGxxdnB1TUlLSEpFQkVHRTxAR0NEQDo8PkA/Pj9DQjxAPkFBRkNFRERJRUZFR0VISEZIR0lLSUZKSEhLSEZGTEhISEpHTExMTExJTUtNTU1PTFBQUVVWV09LVlZVU1NSUUxPUlJQVltbXV5bXF5fX2FgYWRdZGBlZmBlaGpjc3NmamhnbHBycW9zc25zd3dxdXZ0c21vcnVvcnNwdXJ2cnSBdnV1dXd2dXd0Z3Rya3Fya3J3b3ZKS0xKTEdCRURFPEBGRERCOz8/QUBAQENBP0I/QUNIQkZFRkhGSUZGRElIR0lISkxISEpKSUxKRkpLSElKSkdLS01NSkpNTE5OTk9LT1BSVVhWTU5UVlRTUlFQTE5UU1JXW15eX11dYF9gYWFfYWNlYmNoYmRpamd2i2xqaWdtb3NxcHFwcHJ5dnJ1dXRzbW1zc21xcm90dXRycHN3dHV1d3Z1dXRlcXNrcHFqcnZvd0tNTExNR0NDQUQ8P0VFRUM9QUFDQkJDRUFCREFBRUdDR0hHR0ZKR0NISUdHSkZJTEhJSk1LTUxHS0lITEtOUUtSUU1TTUtOTk9QUE9UT1dYWFtOU1FXXFpTVlBOVFVUVFhaX2JiX2RhXmBiXmBlYWFjaW5nYmloaG54dmxoaW1vc3JwcXJycnZ0c3Vzc3Nua3NxbXByb3R2cnFxdXZ1c3d5d3V0dWNtdGtvcGpxdG93TE5MTExHRUFARD4+REVGQ0BDQUVEREZCQkVHQ0NJRkNISkpJSUtHREtKR0hKSUlLSEpKTkxOTElMSEpNS1pmSmRcS2xTSE9OX25Va3NbcXBid2NSUGF2dWh1Y2F2YFhucWJkdmluemZbbHRgbGpUX3d2aWpnaWZnbG1qbW9qbW5zcnBycnFyc3Jzc3J0cm5sdG9ucHFxdXVxcXN0dnZ1dXl3dXR0YGt0a3Bwa3FycXlMTkpLSkZDP0BCPz1ERUZEQ0RCRUVFRkJFRkhDREpFRUpMTUtMTEdHTUpHSUtIS0tJS0pOTE1NTExJTE1MW3NiZHBebG1VTU5mc11nZXFsbnRncGlfYVlubmJwcGJrampnb3F0ZXRub1xvdWdwTUpyeXZrYmBrZWVteG1sdmxucHNycHJxcHFycXJycnRybW1zbm5vcHJ1dHFzc3R1dXV0d3h2dXRibXVrcHBscnJxektMSUlHRUQ/QkI/PkJGR0JGQ0VERUVEQ0hIR0RFS0dHTE1OS01NR0pOSEpLSklMS0pKS01NTk5NTUpNTU1bcm9vbnBwbGtNUFFsV05pYnRycGFtb3ZcWWxRXG1tWnFta29teHh0c2lwXF9ya3FqVXV5eHBjXmtmYmdwcGppb3Bwc3NwcXBxcXJycXFycnRsbXJtbm5vcnV0cXRydHV1dHV1enZ1dGVudWtwb2xzcnJ5SktHSEVFRUJCQj1AQEZHQkdESUVFREJGSUhIRUdLSkdNTU5LTU5HTE5JTEtJSk1JSkpKS09QT05NS05NTFxoZHVdbHFXbE5QUW1VWmtea2x2YWxkdFRlY05tWWxcdHBraWx4and1aHBdXnJraFdiY3d8b2NgZ2dhZGl0eWtubnFzc3BxcHFwcnFwcHBydWttcW1tbW9xc3Rxc3J0dnZzd3Z6dnV0aG91bHNvbXNydHZJTUdJREVFQ0FCPEJAQkZER0ZMSEVDQ0hLSEhGSkxMRk5LTFNSTEdMTUhOSkhITkhKSklITk9NTkxKTk1KWnNwcG9xcW1sT1FSbllxa2dvb3Fxb210Xm5YYXRfbm5vb3Fyb251c3R0altedGN3eHJqbnpoYWFjZmJiam10dXBzdXZzcXBwcW9ydHt/fn13bGtxbmxtbnByc3F0dHN1dXR4eHl4dHVrb3VtdG9uc3N2c0hLSElCRUVFQUA+Q0RCR0NISU1JRkNGSkxJR0ZKTUxGT0pLV1JLR0tKSk5JSEpMSUtKSUhKTU1NTElLS0tTa2JaaV5faWNyclpfWWpvX2VlVWtfY1thYVFgbGhdalxvamlkW3BmZHBcWlxrW21xY3BzbGRnY2RnYGBrbXBwb3R5cnVxb3BxbnmFiIeHhoWAdnNua21tb25xcnR0cnR1dXZ5eHhzdW5xdW53cXJ1dHdySEhGSURFREZBQEFFRURHQkhKTEhGREdLTElFRkpPTElQSUxbUUpGSEhLTUlISklLS0lISUdLS0xMRkhLS0xMTEtJS0xOVFtcVFBUTFBPTk9PVlFPT1FOT1FKSU5QUWVyaVRZV1tbXFVZWl1YXVxcY2ZhYWViY2VfX2ZrbWhtdHlydHJvcHB0hoeGhoaFhYaHg3pwbW1sa3FzdHRydHZ0dXl4eHV2cXJ1b3ZydHN1dXNIQ0VHRkZBRUM/Q0hERkdDSUtMSEZER0tMSERHSFBLTE9LTFdMSUVFSElKSElLSUxKSEZHR0lHSElFRkxJSktOTElPXFdeUFxbYF5PWFlTXFxiXk1ZWk1YYVJKWWFaU2BkXGFYW2RkVlZYXFlaWFxWWVxdYl5kYGFfZWhrZ210dHFxdHBxcoGGhoaFhoWFhYaGhoR9cmtpb3Jzc3N0d3l5eHl4d3h0cXhyeHNxcnVydE9CQ0RMTUJDREJFSUVHR0ZLSktIRUVKSkpHRUhIUEpNTUpNU0lIRkFIRkpJS0xJTEpIRkVJR0RGR0VFSkhDSk1KS1RfWWBYYGFbYFVYWVReXlpfUllcUF5cWU5eXF5TW15jXlpdYGNgWV9iW2BeW1RYV1leXWNiY2FjZmlla3Jwb3Bwbm93hoaFhYaCe4CFhYaGhYaFf3VxcHJyc3Z5eXp5eXh4eHdyeXZ4cnF4dnR2YVNKSk1JRUNCQ0dHRUhHSEtJSUlERktLS0ZGSUpOS05MSExOSEhGPkdHTElLS0pLS0lHRUlEQ0REQkZKREBKTEpPW2NZX15hX1JUUldfYFxdWV5RWVxNVl9XS1FZW1BaX2FhXl5jYWBiYmJjY2VaUVlWVVxaXWNgX19jZWJob21ubGxsbHWFf4SDeXV8hIWFhYaGhYWGhoN9d3JydHd5eXl5f359eXV5dnZybnp3dnhYUUtGQ0dFQkVISUZHSEhGRkpHSEZIS0lMRERLSk5NTEtISkpISkc/R0ZOSktLTUtLS0lHR0NEQERBSElCP0lKSE9dYVpbZF1fVFFSWF1cXFxfWktXXExSXFlJTl5RT1xfYWNkY2NiXGRjYmRjZlhRVVRSW1haYV9eXmFhX2Rsa21qamxudn51gXp8hIWFhYWFhYaGhYaFhoaGgnpyc3V1e4WHh4eGhYSBfnhwend2eFxSTUNASUZDRUtKRkZGSEdHSUZGRklMSk5FREtKTE5KTElLSkhJRkJISFFNS0tPTUtLSUhHRUQ/RUNISEFBR0ZFVF1ZXlhfWV9bXVVYWFBdXVFLSlZeWF5bXVZZYFJRX19hYmFgYmJgY2JhZGRiWE9RUVFbU1tdXV1dXl9fZGhnbGpubnB7e3x+e4CCg4SFhYWFhYWEhIWDhISHh4FzcneFh4eHh4eHh4eHh4WDgHx4XFNLQ0FHRkRHTVJIQ1FKRkhISEVGS0pNUEVHSEpLTkxMSUxLSUlHREhLUU9NTVBMTUtLSElDREFFREhHQkFHRUNXVUVcVF5TVl9YTlRVTlpbTUpLVGBhW19YXl5hXU9ZYlxgYF9iY2JdYWJXX19UUE5PUFhSXVtbXFxeYGJmZmVsZm9vd3x7gHt9f4CEhISEhIWFhYODhYKDgoWFhnpvgYaGhoeHiIeGhoaFhYSFg35JTkZERUZHRElSYlBDVl5JR0dIREZNSlBQRUlJSktOTEtLTUxKSkdESk1RUU5OT01OTE5IS0FEQUNERkRDQUVGQk1IQktMUE9OTEZNRkdJSkhHTExNT1BJTE9QT1NQTFFTUlVaWVdZWFhkV09TVFBQTk1PVVRbWVlbXVxgYWRlY2dja2xwc3N6eX97en+EhISEhISEhIKEgH57gYOBfXuFhIaGh4eHhYWFhISEgoGAfUtJRUVHRkdES01dTEdHWE1HSEpIR01MUVFJTEtLS05OVU5PS0tMR0ZLUFNTTlBPTk9OT0hLRWBFRF9MRGZjRU1bSV5bcm1PTVVtWUxDUGBVbFdnSl1XVV5ETFFVTE1UVlFSVFhXVFhVVFxVUGZaaGhkWFNrU1ZWVVtcW2BgYWFhYmBmaGZubGhyenx9foGEhISEg4ODgX18enJ7gXp7f4KAg4SEhYWBhIWBg4N/fnp7TElFRkZIRUVLT1NJS0ZgVEhKT0pJT01SUUtNTExPUlVST09KTE5HSE1RW1lPUFBOT1BPSUpQf1FJfFlZcnNYUG1IcW5vYVZQcXFzUENrc21xdHBTb19bblhdVlxYVWtoVV1WY1pgWVtgVlVXf2p0dXVfX3ZfWGFcXGZbX2FhYWFeYGJnbXBsYHB3dHiBgYKDg4J/fX6Adnh6bHZ+dHh+gHx+gIGChHyAg3p/gX9+d3dOSUVITU5CRExMRkpMRlFWTEtOSUtSWFdRTk9PTVFUTk9RUEtLTkdNUFNbWlRRUk9QUFBKSFp4XVR4ZWhZUlRRdmd0bHBibmZqUXJPTXdtanJwc3JxcnBvb4BdZnp1eHFxenF+c31rdX1iUmd8ZXNzb3Nye3xvfXlvf3JfYGBiYVpgYGdrbmtibGZnbXd+gYCDfnt4d4B0dnppcn5udHx+d3h7foCDeHyAdXx/fHxzc05LRmBdR0FFTU1IS0tISlBOTU1KTlZeWVVMUVNOWVpNU1NSTkxPSVFSVFlXV1BUUFBQUUtHZnhsY3hybVpLTVV5cHVtdWJudlBkZUpmdnFtd2+AamZ4eGlXclJpe2xpanp6fWx4en9vZ29YdnZqdXVwgGByZ31pbHh8b15fX2JhW11iZGdpamRnYmNkbGxwcHN0c3NzeXFyeGJsdWdyeXtzc3V5foFzdXpufH15eHJuTktTdE5DQkVQUEhKS0pMUU9PT01QWmBaWEtUV1BhXlJWUVlTTE9JU1RVWFdXUFVQT05SSktyb3V1cXVxZGliV25McXBeRmh5V3ZUS2h4fXhgeXtzbmFebW9jUmdxdW5teXB3bHZ0dHFsbVx0fnprbXl8a3RtfGtwdnV4Xl9fYl5dX2RkaWdoZWVeYWJpaWlqa25va3FubWpwYWNmZG93eG9tcHN5fm5xcGp7enRyb21MTFtWSEdFR1JQSUxNS0xRUVFQUFFXXFlVTVVZVWZYUlJZXlRNTklUVFZXWVdPU05OTlFIUm1IaXdLYGR2dlZYbE9ubHtzYWpnf3ZVS1draH1sbWx4YFtwenteYHpzY3JveHFoZXxpcnxdVEtsYHZ1a2l2fHttfnhrfHBdXl5iW19iZGRnZWVlYlpjY2lra3JzcndnbWloZGdgYWxhZ3NybGdtbXJ8a21oa3t0bW1rbU9ISktISUlIUVBMTk9MS1NTU09TUldSVlRQV1tWVlRUVGFgUE5OS1RTU1FVVk5OTE1PUEpIUU5QVUxLS1NUU1JUUFZVUVFOUVFYWFFOUFVUWFhYW1tVUlNXW1dYV1pPU1VXV1hSXVlXXVZUT1lSV1dXWFleW2dyXltbWVxdX2NaX2NjZGZkY2NiWmNjZmZmbW5tdWZmZ2NgZl9dZ2BkbGhmZ2tocHpoZ2drdWpoZ2lsUUlLTExNS0pTUU1RUE9MVlVUUFRVWFVZVVFaXVZVVFdVWVhQT0xNVlRRTlVTTk9NTFFQS0pRUktRTUtLT1JUUlFRU1NJSExOT1FSUVFRVFZSWFdcV1NTUFFVVVZTWlFPU1JXVlRZVlRZVVRSVVRUVFdYV11aXmFdXFpaXFxgY1xdYmNkZmRlZGFZYGFjYWJoaGluY2FkXl9jXVpkXGJtYV5mZWZtc2RpaGtrZWRjZmhQSktMT09MTVNQTlNRUU1YV1VUVVdXV1pVU1xgVldWWVVYVFFQS09XU1BOVVBOUU5LU1BNT1VUTlFOTU5RU1BUUVNUVU5LTU9RVFRSUlFWV1VZWltZU1VSVFdXV1lbVE9UVVhVVVpVV1lVUlJYVlVXW1laX11VWV5cXl1cXWBhXltiYmNnZmRkYlhfYGJdYGhlZmRhXl9dXV5aWl9aX2dgXl1dYmhrYWdmaGZkYGJjYVBLTUxQUUxPVE9PU1FPUVpZWFdYWlpYWVZcamRWWFlaV1ZUVFBLT1ZUUE9UUFBQTk1RUVBSWFRRUU9NT1NWTldSVFVVT05NUVNVVVRUUlRYVlpdXFpWV1FSV1hWW1tXUVRWVlZWWVRYV1RTUlhWVVpdWV1fXlZeXV5gXFxgX19fWmJiZGhnZGRhWWJgYl5eZmNjYGJdXFxcXFlaW1hbYVteXVxfYl9fYmRlYmRfX2BcUE1OTlJRTVJST1NUUVBVXFpaV1tbXFlaW2RxbWhkX1tZVlZYUUxNVlNNTlJPUVJPTFBTUlVaVVNQUExQV1ZSV1NTU1hNT1BSVFhVVVVTVVlYW15dW1tWUk9VVlZbW1dRVFdWV1hWVFhaVFNSWldWXF5aXl9gVWFcYWFdYGJgXWBdY2FjZ2hkZmBZY2BhX19lZF9gY1taXFtcWVpYWVdcWVxbYF5fW15eYWBfYlxZYFpRTk9OVlFQVFJPVVRTUFdcXVxYXlxfV1xeanF3eYBjXFtWVlhRTk9WU05RUVBSVFJLUVRUWVpXVU9STlNYV1RTVFJSWk9RU1NWW1ZWV1RWWlhdXlxcXlZTTlRVVlxcVlJUVlZYWVNUWVxUU1NdWFpdXlxgYGBWYltjYl5hY19dYmFiX2RmaWRmXltkYGFgYWNlX2JfWVpeW1xbWVhZV1daWlphXF1bXVxcWl1gV1tbWlBPT09ZUFVVUlFXUlRQW11eXltgXGBVXF1panJ9c2xnXFVYV1FPUlpTUlFUUlRVVEtRV1ZbWVpTT1NSVlZWVE9WUlNaUlRVVFhdV1hYU1hcWF5dWVpdVFVOVldXX1tYUVRVWVlZVVdZW1RTVl5ZXV1gXWJiXllgW2ViX2RkX15jY2FdZWZpZGZdXmRhYGFiY2RfYl5YWl9bXFtYWFhYV1taXGBcW1tcW1haW15WXlldUE9PUlpQWlRVVlZUVFReXmBfXmJcYFVdXmJreXVtfWxaVVlVUVFTXFRVVFVUVllXTFJaV11bXFJPVVNYVlZUUFhSU1dTVlVVW11YW1lVWl5YX15ZXFlSV1JZWFlfWlpTVFZaWVpWWFlcVlRaXlxeYGFfZGNcXl1dZWFiZmReX2RjYFxnZGhlZGJfZGFfYWBiYl9gXldYXlpcXFpZWVdWXVpdXlpZW1xbV1lcXVZYV11TT1BXWVFdVVZZV1dVWF9gYWFgY11fVF1eYmVldoJ7aFhZWVNWU1ZcV1dXVlZXXVhQVV1aXl1dVFJYU1dWVFNUWFJTVlRYWFhdXlhdW1ZdX1hfX1hdVlFZVFlaWmFZXFVWWFtaW1hZWVpYVl1eX15jYmFkZFxiXGBmYWRmZF9gZGJiW2ZjaGVjZmFmX19hYWFhYF9eVlVdWVtcW1lbWVldW1tbWFhZW1laWl1fXVRZXVVOVFpWU1xUVldZV1ZcYGFiY2FjXl9WW2BkYV96dW9oWVxaVVdVV1taWVxZWFlgV1BWXlxgYVxUVVhQVVdVU1dWUlNVVlpaXF9eWl9cVl9fWl1eWV5WU1lXWVpdYlpeVldbXFtcW1tZWllZXl9gYGRiY2VlYmRaYmZjZ2ZlXmFiYGNeY2NpZGRnX2deYmJjYWFgXl9YVFpaWltbWFtYWFxbWltXV1lYV1xbXGBdVl1dU1BWWlZWWlVYVVhXWF1fYmFkYWRgXllZYWRiYGtmaF5cXVtWV1hZXFxcX1tZW2JWVFheXWFjXFJWWFFXVldWV1ZTVlRYXFxeYGBdYVxXYV5bXlxbXlhWWFhbW19gXF9YWV1cXV1eXFpcWFtfYV5gZGNkZmZmYlljZWVoZ2ReY2BgZWNdZmlkZWlfZ15jYmNhYWBfX1tYWVtZWlpYWVhXW1taW1dYWlRZXVxaYFxVXmJOUldZVldaWFtcWFdZXmBiYWVhZGFdXllhY2JfYWBhXlxcXFdXW1tdXV9fXFpdY1haWF1gY2RfUlhZUFhXWFlZV1ZYVl1dXmBhYF9iXllhXV1eWV1eWVhWV1tcYF9dX1paXl1eXmFcW1taXGBhXmJkY2VmZWZiWmRmZ2lnY19jXmFmZFppaWJmaWNlXmJiY2FgYF9dXVpXW1lZWFhaWFdaW1pZV1hWVVtdXV1gYGJieExXV1xZV1xbXF1aV1xdX2BiZGJiYV1gWGJjYmBjYWJdW1xbWFdbXF9dYF9dW2BkXFxYWmNlY2BSXFlPWFhaW1pZWFpZYF1gYmJgYWNfXGJdX11bXl5ZWVVYXV5fYF9fXFpeXmBiY1xcWFteYGJhY2VkZ2VlZmRcZWZoaWZjYmJcY2dgXGlpYmhpZmVgYmFjYV9gX11dW1lcWVhXWFlYV1xbWldXWFBYWl1hY2Zmcmt/SllXXVpaX1xbXlxYXVteX2FjYmFhXWJbYmRiYGNjYlxbW1pXWGlxYFxgX11cYWNfXllZY2VkYVNfWlFZWFxdXFtaW1tjYGNiY2BiZGFgY15gXF5eX1pYVltfXl1hYV9dW2BhYmViX11UXGBgY2RkZmRnZmVmZV5lZmhoZ2RkYFtmZ15haGhjaGhmY2BiYGNiX19fXV1cWltZWFhYVlpWXFpaVlZVTVhXXGdpa2h1eIF2dnZ2dnZ2dnZ2dnd3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d4eHh4eXl5enp6enp6e3p6ent7e3t7e3t7e3t7e3t7e3x7e3t7e3t7e3t7fHx8fHx8fHx8fHx8fHt7e3t8fHx8fHx8fHx8e3t7fHx8fHx7e3t7e3t7fYmIhoqHhYKBgoOCg4OCgoKCgoKCgoKCgoGAgYCBgICAgYCBgYGAfnx8fHx8fHx8fHx8fHx8fHZ2dnZ2dnZ2dnZ3dnd3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3h4eHh5eXl6enp6enp6ent7e3t7e3t7e3t7e3t7e3t7e3t7e3t6e3t7e3t7fHx8fHx8fHx8fHx7e3t7e3t7e3t7e3x7e3t7e3t7fHx8fHt7e3t7e3t8iYmHiYaFgoGCgoGCgoKCgYKCgoKCgoKBgYGAgICAgICAgIGBgYB9fHx8e3x8fHx8fHx8fHx8dnZ2dnZ2dnZ2dnZ3dnd3d3d3d3d3d3d3d3d3d3d3d3d3d3d4eHh4eHh5eXl5eXl5eXl5eXt7e3t7e3t7e3t7e3t7e3x8fHx7fHt6enp6ent7fHx8fHx8fHx8fHx7e3t7e3t7fHx8e3t7e3t7e3t7fHx8fHx7fHt7e3uHiYiJhYSDgYKCgoODgoKCgoKCgoKCgYGBgICAgICAgICAgYKBgH58fHx8fHx8fHx8fHx8fHx2dnZ2dnZ2d3d2d3d3d3d3d3d3d3d3d3h4eHh4eHh4eHh4eHh4eHh4eHl5eXl5eXl5eXl5e3t7e3t7e3t7e3t7e3t8fX18fHx9fHp6enp6e3t8fHx8fHx8fHx8fHx8fHx8e3x8fHx8e3t7e3t7e3x8fHx8fHt7e3t7e4aJiYiFhYOBgoKCgoOCgYKCgoKCgoKBgYGAgICAgICAgIGBgYCAfnx8fHx8fHx8fHx9fX18fHVwb29vb3Bwen59fX19fYSMi4uLi454KSkqKiopKz0/Pj4+Pj5tgH5+f397pdfT09PT1r2GiYmJiYmJjI2NjY2NkEYoKioqKiKL29LS0tLWun1+f39/f359fHx8fHx8fHx8fHx8fHx8fHx7fHx8fHx8fHx8fHt7e3t7hIuHh4aHgoGDg4GCgoKCgoKCgoKCgoGBgYCAgICAgICAgYCBgIB+fHx8fHx8fHx9fXx8fH19dXBub29vb296gH9/f39+hpCPj4+Pk3kZGhoaGhocMTMzMzMzMmqCf4CAgHut6eTk5OToyomMjIyMjI2PkJCQkJCUOxYaGhobEI/v5eXl5enHfX5/f39/f319fXx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx7e3uCjYeIh4eDgoSCgYKCgoKCgoOCgoKCgYGBgICAgICAgICAgICAgH58fHx8fHx8fXx8fH19fX12dXV1dXV1dXZ3d3d3d3d4eXl5eXl6eG9wcHBwcHBycnJycnJyd3p5eXp6en6Dg4ODg4SBfHx8fHx8fX19fX19fX12c3Nzc3NzfYWEhISEhYJ8fX19fX19fX19fX18fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx7e4CMhomHh4SDhIKCgoKCgYKCg4KCgoGBgYGBgYCAf4CAgICAgICAfnx8fHx8fHx8fX19fX19fXZ2dnZ2dnl3dnZ6e3h7eHd2eHt4enl5fXp5eXh4eHh5eXl5enp5eXl5enp6eXh4eXl5eXl7e3t7e3t7e3t7e3p6enx9fX19fX17enp6enp6e3x8fHx9fX19fX19fX18fH19fX18fHx8fHx8fHx8fHx8fHx8fHx8fHx8f4uHi4qIhIODgoKCg4KBgoKDgoKCgYGBgYGAgIGAf4CAgH+AgYF+fX18fHx8fHx9fX19fX19d3d3dnZ3fXh3d316eH14d3d5fHx7fXp8e3h3d3d3eHh4eHh5eXl5eXp6ent7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7fHx8fHx8fHx8fHx8fHx9fX19fX19fX19fX19fX19fX19fHx8fHx8fHx7e3x8fHx8fHx8fHx+iomMjImFg4SEgoKDgoGCgoKCgoKBgYGBgYCAgICAgICAf4CAgH19fXx8fH19fX19fX19fX13d3d3d3p9eHt4fHx3e3h3d3d5fHt+eXx6eHh4eHh4eHh4eHh5eXl6enp6e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3x8fHx8fHx8fHx8fHx8fHx8fX19fXx9fX19fX19fX19fX19fHx8fHx8fHt7fHx8fHx8fHx8fH2Kio2NioWDg4OCgoKCgYGCgoKBgoGBgYKBgIGBgICAgIB/gIGAfXx9fX18fX19fX19fX19fXd3d3d3fX55d3d4e3p7eHd3d3x5eXx6fHt3eHh4eHh4eHh4eXl5enp6ent7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3x8fHt8fHx8fHx8fHx8fHx8fH19fX18fH18fH18fHx8fX19fX18fHx8fHx8fHx8fHx8fHx8fHx8foqJjo2JhISEg4KDgoKBgYKBgoKCgYGBgoGAgYKAgICAgH+BgIB8fH19fX18fX19fX19fn5+d3d3d3d5fHl7eHx9eXt5enp6f3t7fHt9e3h4eHh4eHh4eXl5eXp6enp7e3t7e3t7e3t7e3t7e3t7e3t7e3x8fHt7fHx7fHx8fHx8fHx8fXx8fX19fX19fXx8fHx8fHx8fXx9fX19fXx8fHx8fHx8fHx8fHx8fHx8fHx/iIeNioeFhoaDg4ODgoGBgoGCgoGBgYGCgYCAgoF/gICAf4CAgHx8fX19fX19fX19fX5+fn53d3d3d3Z4eHl3eXp4enh5eXl8e3p6eXt5eHh5eXh4eHh5eXl5enp7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t8fHx8fHx8fHx9fX19fX19fX19fX19fX18fH18fH19fX19fH19fX19fHx8fHx8fHx8fHx8fX+HiIyIhoeHhIKDhISCgYKBgYKCgoGBgYKBgIGBgYGAgIB/gIGAfHx9fX19fX19fX1+fn5+fnd3d3d3d3d3d3d3eHh4eHh4eHh4eHl5eHl5eXl5eXl5eXl6enp6ent7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7fHx8fHx8fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fHx8fHx8fX19fHx8gIeIi4eHiYaDg4SDg4KBgYGCgoGBgYKCgYGBgIGBgYCAgICBgX97fH19fX19fX19fn5+fn5+d3d3d3d3d3d4eHd4dnl5eHh4eHh5eXl5eXl5eXl5eXl5enp6enp6e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7fHx7fHx8fHx8fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fHx8fH19fXx9fXyBhoqKiYmIhIOFhISCgoGBgYGCgYGCgoGBgYCAgYGAgIGAgIGBf3x8fX19fX1+fn5+fn5+f394eHd4eHh4eHZxZGpeam15eXl4eHl5eXl5eXl5enp6enp6enp6enp7e3t8e3x8fHt7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3x8fHx9fHx8fH19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fIGFiYqJioeEhYWEg4KCgYGBgoKBgYKBgYGBgYCBgYCAgYCBgIF+fH1+fn5+fn5+fn5+fn9/f3h4eHh4eHh5bWRiZV9fXm95eXl5eXl5eXl5eXp6enp6enp6enp6e3t7e3t7fHx8fHx8fHt7e3t7e3t7e3t7e3t7e3t7e3t7e3t7fHx8fHx9fHx8fH19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18goWKiomJhISGhYSDg4KBgYKCgoGBgoGBgYKBgIGBgICAgICBgH58fX5+fn5+fn5+fn9/f39/eHh4eHh4eW5kZWdlZGJeZnh5eXl5enp6enp6enp6enp6enp6e3t7e3t7e3x8fHx8fHt8fHt7e3t7e3t7e3t7e3t7e3t7e3t7fHx8fHx8fHx8fHx9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXyChouJiIqEhYaEg4OEgoGBgYGCgYKCgYGBgYCAgYGBgIB/gIGBf3x8fn5+fn5+fn9/f39/f394eHh4eHl3Z2VkZWZkZWFfaXl6enp6enp6enp6enp6ent7e3t7e3t7e3t7e3t8fHx7e3t7e3t7e3t7e3t7e3t7e3t7e3t7fHt8fHx8fHx8fHx9fX19fX19fX19fX19fXx9fX19fX19fX19fX19fX19fX19fX19fX19fIKGi4eJh4SEhoSDg4WBgYGBgYKCgYGBgYKBgICAgYGAgYCAgYF+fHx/f35/f39/f39/f39/gHl5eXl5eWtlYWJlZWFlZV5ieHdze3p6enp6enp6enp6e3t7e3t7e3t7e3t7fHt7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t8fHx8fHx8fH18fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19g4aLhoiFhYaEgoOEhIKBgYGBgoKBgYKBgYGAgYGBgYGAgIGBgn98fH9/f39/f39/f3+AgICAeXl5eXl0Y2NlZGNmY2doZGZsZF5ze3p6enp6enp6enp6ent7e3t7e3t8fHx7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3x8fHx8fHx8fH19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX1+fn6DhouGhoaGhYODg4SDgYGBgYGCgoGBgYKBgYCAgYGBgYCAgYGBfnx8f39/f39/gICAgICAgIB5eXl6d2RhY2diYmRdW2VfYV1eYGFoeHp6enp6enp6enp6e3t7e3t7fHx8e3x7e3t7e3t7e3t7e3t7e3t7e3t7e3t8fHx8fHx8fHx8fH19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX1+fn5+fn5+foSFi4eGhoaGhIODg4KBgYGBgoKCgYKBgoGAgIGBgYGAgYGBgYF+fX1/gH+AgICAgICAgICAgHl5eW9vYmJiZF5jZ19dYWFgXF9kYlttfHp6enp6enp6enp7e3t7fHx8e3t7e3t7e3t7e3t7e3t7e3t7fHx7e3x7fHx8fHx8fHx8fH19fH19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX5+fn5+fn5+fn5/hIiLhoSHhoaEhIODgoGBgYGCgYGBgYKCgYCAgYGBgYGBgYGBgX5+fYCAgICAgICAgICAgICBeXpwXWJlZGJkXmZnZ2BZYmJhY2VfXF1ze3t6enp7e3t7e3t8fHx8fHx8fHt7e3t7e3t7e3t7e3t7fHx8fHx8e3x8fHx8fHx8fHx8fHx9fX19fX19fX19fX19fX19fX19fX19fX19fX19fn19fn5+fn5+fn5+fn5+foCFjIqEhYaGhYODg4SCgYGBgYKBgYGBgoKCgYCBgYGCgICAgIGBf35+gICAgICAgICAgIGBgYF5emxiZGdjYmdmYWBgZGFiZWRjZGNeXGJ1fHt7e3t7e3t7e3x8fHx7e3x8fHx7e3t7e3t7e3t7e3x8fHx8fHx8fHx8fHx8fHx8fHx8fH19fX19fX19fX19fX19fX19fX19fX19fX1+fn5+fn5+fn5+fn5+fn5+fn9/gYeMiYWGhoeFg4SDgoGBgYGBgYKBgoKCg4KBgIGBgYKBgYGCgoF/f36AgICAgICAgIGBgYGBgXp7dGdnZmZkZGZmYF5fYWNlaGRlXmJkYHR8e3t7e3t7fHx8fHx8fHx8fHt7fHt8fHt7e3t7fHx8fHx8fHx8fHx8fHx8fHx8fHx8fH19fH19fX19fX19fX19fX19fX19fX19fX19fX5+fn5+fn5+fn5+fn9/f39/f3+CiYqIhoaIhoWDhIOCgYGBgYGBgoGBgoKCgoGAgYGBgoKBgYKCgX9/f4GBgYGAgYGBgYGBgYGBenptaGNjZ2ZnZWdmZmdiZWRlYmdbYmVgdnx8e3x8fHx8fHx8fHx8e3t8fHx8e3x8fHt7fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx9fXx9fX19fX19fX19fX19fX19fX19fX19fn5+fn5+fn5+fn5+f39/f39/f39/f4SJioiGiYeFhYSEg4KBgYGBgYGCgYKCgYGBgYGBgYKBgoGBgICBgH9/gYGBgYGBgYGBgYGBgYF7emlpZGNqZmFgZmVjY2NnaWRjYmBiZGJ0fXx8fHx8fHt8fHx8fHx8e3x8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fH19fX19fX19fX19fn5+fn5+fn5+fn5+fn5+fn5/f39+fn9/f39/f39/f3+AhIqMiIeJhoSFhYOCgYGBgYGBgYKBgoGBgYGBgYGBgoKBgYGBgYGAgH+BgYGBgYGBgYGBgYGBgXZzZWRnY2RmZWJlZmdkZmhmZWNgYGNkYHF9fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fXx8fHx8fHx9fX19fX19fX19fX19fn5+fn5+fn5+fn5+fn5/fn5+f35+f39/f39/f3+AgICFioyJiIqJhoaDgoKCgYGBgYGBgoGBgoGBgYGBgIGBgYGBgYGCgX+Af35/foCCgoKCgoKCgoKCc3NnZWRkZWlqaGZnZ2NhZmZlZmdmZWVjdX18fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fX19fX19fH19fX19fX1+fn5+fn5+fn5+fn5+fn5+fn5+f39/f39/f39/f39/gICAgICAgIWLioqJioeHhoSCgoGBgYGBgYKCgYKBgYGBgIGBgoKBgYGBgYGAf4B+dHRzdX1/goCAfn5/gYB0cmdkZWNmaWppZWNlY2BmZGRnZ2JiZWFwfXx8fHx8fHx8fHx8fHx8fHx9fX18fHx8fHx8fHx8fHx8fHx9fX19fX19fX19fX19fX19fX19fX1+fn5+fn5+fn5+fn5+fn9/f39/f39/f39/f39/f39/f4CAgICAgIB/houLiouLh4eHhIOCgYGBgYGBgYKBgoKBgYGBgYKCgYCBgYGBgoCAgH5zc3NzdHV4dXV0dHV2dXVwZmNmZWhoaWdoZ2VmZWJfZGVmY2BiZ3d8fHx8fX19fX18fHx8fH19fX19fX19fXx9fXx8fX19fX19fX19fX19fX19fX19fX19fX19fn5+fn5+fn5+fn5+fn5+fn5+f39/f39/f39/f39/gIB/f3+AgICAgICAgICHjIyIi4qHh4eEhIKBgYGBgYGBgoGCgoGBgICBgoGBgYKBgoKCgYCAfnNzc3Nzc3NzdHR0dHNzdW9jY2FnZWhoZ2pmZGVnZmhmY2JlYl5ieX18e3t8fX19fX18fHx9fX19fX19e3x9fX19fX19fX19fX19fX19fX19fX5+fn5+fn5+fn5+fn5+fn9/fn5+fn5+fn5/f39/f4CAgH9/gICBgICAgICAgYCAf4CAgYGAgIeLi4iNiYiJhoSFgYGBgYGBgYKCgYKCgYGBgIGCgoGBgYKBgoKBgIB+dHNzc3Nzc3Nzc3Nzc3N1cmdlZWRlamhoZ2ZpaGdjZWViZGNoZGd7eHVzc3R2dnl4dnR0dHZ3d3d2dHR0dXV4d3h4d3d6e3x9fXx9fn5+fn5+fn5+fn5+fn5+fn5+fn5/f39/f39/f35/f39/gH9+fHt7fX58eXl2dnZ5fHx6end2d3l7fXt4hIyMioyHh4iEhYSBgYGBgYGBgoGBgoGBgYGAgYKCgYGBgoGBgoGAgH51c3Nzc3Nzc3Nzc3Nzc3VzaGVnaGVrbGhqZ2lqZ2dnZmRkYmVkbnV0dHNzdHNzc3Nzc3Nzc3Nzc3NzdHNzc3Nzc3Nzc3N0dHV1c3V3eHl7fn59fn98f39/f39/f39/f314fH5+fXx4dXZ3eXd4dnRzc3N0dXRzc3Nzc3NzdHNzc3R0c3R0dHODjI2KiYeIhoOGg4GBgYGBgYGBgYGCgYGAgYGDgoKBgYCBgYGBgICAf3VzdHRzc3Nzc3Nyc3NzdnZpY2hqaGpsZWZpbGhgZmVkY2BkZGZ0dXV1dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHRzdHRzc3Nzc3R2dnV1d3V4fH9+fX9+fHp4dXN0dXV1dHNzc3Nzc3N0dHR0dHR0dHR1dXR0dHV1dHR1dXR1dXV1dIaMjYuIhoeEhIWCgYGBgYGBgYGCgoGAgYCBgYKCgoGBgIGBgYGAgIB/dnNzc3Nzc3Nzc3Nzc3N2dnNnZ2pmaGdmaGhmZGlnY2NnZWVmcHZ1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dHR1dHR0dHR0dHRzdHR0dnV1d3Z0c3R0dHR0dHR0dXV1dXV0dXV1dXV1dXV0dHNzc3N0dHNzdHR0dHR1dXR1iY6MjIqHh4SEhYKBgYGBgYGBgYKCgoGBgICAgoKCgoGBgYGBgYCAgH93c3Nzc3NycnJyc3NzcnZ2dW5kXWNnZWlraGVoZ2dqamlnZXB2dXV1dXV0dHRzdHR0dHR0dHV1dXV1dXV0dHV1dHR1dXV1dXV1dXV1dXR0dHV1dXV1dXV0dHV0dHV1dXV1dXV1dXV1dXV1dXV1dXV0dHNzc3Nzc3N0dHNzc3Nzc3R0dHR0dHWKjoyMiYaGhIeFgoGBgYGBgYGBgoKBgYGAgYGCgYKBgYGBgYKBgYCAf3hzc3Nzc3JycnJyc3NzdnZ3d2liaGhnamtpaGZkZGVmaWhwdXR0dHRzc3JxcnJ0dXV0dHR0dHR0c3NycXFxcXNzdHR0dHR0dHR0dHV0cnJyc3R0dHR0dXV1dXV1dXR0dXR0dHR0dHR0dHR0dHR0c3Nzc3Nzc3Nzc3Nzc3N0dHN0dHR0dHR0dYuOjImGhYWFh4SCgYGBgYGBgYGBgoKCgYGAgIKCgoGBgYGBgYGBgIB/eXNzc3NycXJycnJzc3N3d3d3bGpoZGhpa3Z6a2VmZWhnbXJzdHN0c3JwcHBxcnN0dXR0c3NycnNycXBvb29vcHFzc3NycnJyc3R0dHNxcHFyc3R0dHR0dHRzc3Rzc3NzdHR0dHRzdHR0dHR0dHRzdHR0c3NycnFxcnJzc3Nyc3NzdHR0dHN2jZCMh4eFhYSEgoGCgoGBgYGBgYGCgoKBgYGAgYGCgoGBgoKBgYGAf395c3NycnFxcnJycnNzc3d3d3dzc2pnaWloeX99cW51bG5wcXJycnFxcG9wcXFxc3Rzc3NycXFwcG9ubm1ubW5ubnBxcnJycnJycnJzcXBvb3BxcnJzc3JxcnJycnJycnJycnJzc3Jzc3Nzc3Nzc3Nzc3Jxb29ubm9vcXJzc3Jyc3NycnNzcnaPj4uHhoWFhYOCgoKBgYGBgYGBgYGBgoGBgYGCgoKBgoGCgYGCgX9/f3hxcHBwcXFycnJyc3Nzd3d2dnd2cnF0c252f352c3hwcHBycnJycXFwcHFxcXFyc3Nzc3FwcXBvb25ubm5ub25vcHBxcXFxcXBwcXJwb25vcHFxcXFxcHBxcXFxcXJycnJycnJycnFxcnFxcnJycnFwb29ubm1ubW5vcXJycnJycnJyc3JxeI+OjYaDg4aEgoOCgoGCgYGBgYKBgYGCgYGBgYKCgoKCgoKBgYKBf4B/d29wb3BxcnJyc3Nzc3J2dnZ2dnZ3dnZ1c3l/fnd3d29wcXFxcXFxcHBwcXJxcnJzc3JycHBwb29wb29vb29vb29wb3Bvb29vcHBxb29vcHBwcHBvcG9wcHFycXFxcnJycnFxcXFxcXFxcHBwcHBxb29ubm5tbW5tbm9wcXFxcXFxcXFxcXB7j42NhoODhYOCgoKCgYKBgYGBgoGCgYGCgoGCg4KBg4KBgYGAgYF/f392bm9wcHBxcXFxcXBwcHZ2dnZ2dXR0c3NxfYB9fX9zb3BxcXFwcHBwcXFwcHFxcnJxcXFwcHBvb3Bwb29wcG9vb29vb29vb3BxcXBub3Bwb29wb29wcnJycnFxcXBxcnFwcXFxcHBwcHBwcHBwb29ubm1ubm5ubm9ub3BwcHFxcXFxcXFxcIKRjoqEhIOFhIOCgoGBgoKBgYKBgYGBgYGCgoKCgoKCgYGBgYCBgX9/gHVvb29wcXFxcXBwcHBwdnZ2dXRzcnJycnGAgoCBeXBwcHBvcHBwcHFxcXFwcXFxcXFxcHVycHBwcHBwb3BxcHBvb29wb29vcXFwcG9wcG9vb25vcHFxcHBwb3Bvb3BwcHBwcHBwcHBvb29vb29vbm5tbW1ubm5ub25vb3BvcHBwcHBwcHBwiZCMiISDhIaDg4KCgYGCgoKCgYGBgYCAgYGBgoKBgYGBgYGBgIGBgH+AdG5vb3BxcXFwcG9vcG92dnVzcnFxcXFxcICDg39ycHBwcHBwcHBwcHFxcHBxcXFxenFvi3ZvcHBwcHFwcHBwcHBwcHBvcHBxcXBwcHFxb29vbm9wcHBvb29vcHBvb3BwcHBwcHBwcHBvb29vbm5ubm5ubW5ubm1ubm9wcG9vb29vb3BzcXWPj4uJg4KFh4ODgoKBgoGCgoKBgYKBgYGBgYGBgYGBgYCAgYGAgYGAf4B0b29vbm9vb29vb29vb3Z1dHNxcXFxcXJygIKCgXRxcXFxcXFxcXFxcXFxcXFxcXGNc3OYeHBxcXBxcXFwcHBwcHFxcXBxcHBwcXBwcHBwcHBwcHBwcHBwcHFxcXBxcHBwcHFwcHFxcHFxcXFxcXJxcnFwcnRycnR0dHR1dnRzdHR0dXd3gpCPi4iDgoaHhISCg4GBgYKCgoGBgoGBgYKBgYGBgYGAgICBgYCBgYB/gHVvb29vb29vb25vb29vdXRzcnJycnJycnKDg4OCdnFycnFxcXJxcnJxcXJycnJxcJd7dqB/cHJycXFycXFxcXFxcXFxcXFwcXFxcXFxcnNzcnJyc3V1dHR0dHR0dHV2d3d3d3d3eHh4eHd3eHh4d3Z3dnV2dnZ2d3h6e3x7e3t6enp6enyGkI2LiIODiIeHhYODgoGCgYKBgYGBgYKCgoGBgYGAgYCAgYGAgIGBgH+Ad3FxcXFxcG5ucG9wcG92dHV1c3Nzc3NzdYiDgoN5cnNzcnJyc3Jyc3NycnJycnN0n4J7pIdxdHRzc3Nyc3N0dHV1dXV1dHV3eHd3d3d4eHh3eHh4eXl5eXl4eHl5eXp6e3t7e3t6enp5eXh3d3d1dnV2dnd5enp7fn5+fX1+fn5/f35+gIyQi4qHg4WIi4iEg4SDgYGCgYGBgoGBgoKCgoKAgYGBgYCBgYGAgIGAf4B8enp5eXx5eHh2dXZ2dHl2d3h3d3Z3dnZ6fnx+fnx2dnd3dnV4enh4eHh3d3d3eH+njIimkHd8e3l5eXh4eXl6enl5eXh4enp5eXh4eHh3dnd3eHh3eHh5eXp7e3p8fH1+fX9/f359e3t7e3p5enl5e3t/foB/fn5/fn19fX5+f35+fn6AjpCNioeEhoqLiIaGhIOBgoKBgYGCgYGCgoKCgoCBgoKBgYGCgYCBgIF/f4B/fn19fX9/f318e3t7eXh4eHh5eXl4eXh5eXl4enp6enp6e3t7fH1+fHt7e3x9fqmShqWVent7e3l4eXh4ent6enp5eXp8fHt6enx8fHp6ent9fHx+fn+AgoGAgYKAgH9/gYGBgIB/f35+fn5/fX1+f4CAf35+f39+fn9/f39/gH+Af4OQjoyHhoWIi4yIh4aFg4GCgYGBgYKBgoKCgoKBgYKDgoGBgYGBgIGBgIB/goOCgoGBgX99f39/f4F6enh4d3h4eHh5eHh5enp5e358enx9fXt8fX19fXx8f3yCq5yKopV9fX9/f3x8fYCDgYCAf318fXx9fXt9fXx8fH19fX1+gYGChISDgoB/gYGBgH9/f4B/f39/f39+fn9/f39/f35+f3+Af39/gICAf4CAgICAhJCPi4eGhoiLi4mKhYaDgoKCgYGBgoGCgYKBgYGBgoOCgYCAgYGAgIGBgH+ChIKCgICAgH9+fn+AgH9/fn18fX19fYB/fX+Af35/gH9/fn9/gICBgICAgICCgJqvqKenlX9/f4CBgH5+f39+f39/fn5+f39/gYB/f4CBgYCAgYOEgoGCgoGCgH+AgYCBgYGAgH+BgICAf39/gICAgYGBgIGBgYCAgICBgoGBgYCAgYGFjo6MiYaHiYyLi4qGhoOCgoKBgYGCgoOCgoKBgIGBgYKCgICBgYCAgYGAf4KFg4KBgYCAf39+fn+AfX5+fn19fX5/fn9/f35+fn+AgYCAgICAfn9/f3+BgYCFrKalr6afgn9+f35+fn9/fn9/f35/gIGBgoKDg4KCg4KBgYKDg4OCgYGBgYKBgoKCgYKBgoGBgYGBgoKCgYGCgYKCgoGBgoKBgYKCgoKCgYGBgoKCgoaPkY+KiImKjY6NiYaFgoKCgoKBgYKCg4KCgoGBgYGBgYF/gIGBgYCBgIF/gYWEg4KCgoGCgYCAgIB8fHx7fH18fH9+fn9+fn5+f35+f39/f39/gH5+f4F/fo+pmaKqm6OPf4B+f4B/gIB/gIF/f39/f3+BgYGCgoCAgYKDg4SDg4ODgoKCgoKCgoKCgoKCgoGCgoKDg4OCg4ODgoKCgYKCgoODg4ODgoKCgoODg4KCh5KTkIuKi4uPj42Kh4SCgoKCgYGBgoKDgoKBgYGBgIGBgICAgYGBgIGAgYCAg4SDg4OEg4ODgoKCgXx9fHx9gn1+f4GCiIGCgoSCgYGDg4GBgYKDgYODgoGBn6GTn6SYn5iAgISOgn+AgYCAgICAgH9/f3+AgICAgH9/gYODhYSEg4SDgoKCg4OCgoOCgoODg4ODg4SDg4KEhYWDg4SEgoKDhIOCg4ODg4OCgoODgoCKlJOPioqMjpCPjYuGg4KCgoKBgYGBgoOCgYGBgIGBgoGBgICBgYGAgYCAgH+BgoODg4SEhIOCgoKCfXx8fn6AgYOAg4OChIaFhoaFhIWFg4ODg4SBg4uLhYGYnYqdqpudmoSIm5KCg4KDg4KDg4ODgoGAgIKCgYOCgYKCg4OEhYWEg4OChISEhIOEhISDg4OEg4ODg4OEg4SDhIWEhISDg4ODgoKCgoKCgoKBgYKCgo+UlI+Njo6RkY6KiISCgoKCgYGBgYGCg4GBgIGBgYGBgYCBgIGBgYCBgICAgIKChIKChIOCg4ODgoJ9fX2AgH+AgoGDg4ODhIaEhIOEhYWDg4GBg4OBhZWbjJKdk52umZOen5+aiIeHh4eGhoeHhoaEgoGCg4SDg4ODg4ODhISFhYWDhYSFhISEg4KBg4OCg4SEg4KCg4SCg4ODg4OCgoKCgoKCg4OEhIOFhYWFhoaIk5OTkI+Pj5KRjIqIgoKCgoKBgYGBgYKDgoKBgIGBgYGBgICAgYGBgICAgICAhISEgoKCgoGBgoKBgX+AgYOCgICAf4CCgoGDg4KCgYODg4SDg4GDhYSCjaWqrKmjnaWZnaSinZCHiIiHh4eIiIiFhIOBgIGBgoKCg4GCg4SEhYSDg4OEg4OEhIOBgYGCg4OEhISDg4ODg4OEhIODgoSDg4ODhIWFhoeHh4eIiIiJiY6TkpKOj46RkY+LiYeCgoKCgoKBgYGBgoKCgoGBgIGBgYGAgICAgYGAgIGAgICDg4KCgYKCgYGAf4CBhYWFhoOCgYB+fn+BgoSCgYKDhIOCg4ODg4KChISDk6aooZyfmpuen56WhISFhYKEhIWFg4KBgH9/gIB/gIGEg4OEhYWEgoKCgoOCg4OFhIKDhISEhYaGhoaGhoWFhoeHhYaIh4aHiIeGhoaIiYeGhYaGhoeIkZKSj46QjpCRjImHhYGBgoKCgoGBgYGBgoOBgYGBgYGBgICAgICBgYCAgICAgISEg4KBgoGAgYGAgYKIh4aHhYSCgH99fX6AgH+AgYGBgYGBgoGAgYKDgoKEkZeWmJ2ZnJ6cmoyAgICAfoGAgICAgH9+gIGBgYKCg4OEg4OEg4OCgoGBgoODg4SEg4SEhIOFhYaFh4eIh4eHh4eHh4eGhoaGh4WFhYaGhISEhIWEhYaSk5GOjo+OkI6JiIeEgoKCgoKCgoGBgIGCgoKCgoKCgYGBgYGAgYGBgICAgYGAgoSDg4KDgoGCgYKDg4iHh4iHhYSCgX5+gICAfn5/f4CBgYGCgoCBhI2DgX+DjZKWmpeboJ2ThIOAf39/gICAgICAgICDg4KDg4ODgoOBgYKCgoOCgYKCgoOCgoSDhISDg4SEhYWFhYaGhoaFhISEhYWEhIWFhYSEhISDhISEhISEipSTkpCQj46NiIaFhIOBgYKCgoKCgYGAgYKCgoKBgoKBgYCBgYCBgYGAgICAgYGAg4OCgoOCgoKBgoOCiImJiYiHhYSDgYKEhIOBgoKCg4SCgoSEgoOJl4iEgoWGkJaZl5yfm4iBhIOBgYCBgoOCgoGDg4SDg4SEg4OCg4KDg4ODg4KCgoKCgoGDhISEhYSFhYWFhIWEhIWFhYWDg4OEhISEhYWFhISEhISEg4ODg4OOlZKQkZGPjYyHhYODg4GBgoKCgoKBgYCBgoOCgYCCgYGBgICAgIGBgYCAgICBgICDhYSEhIODg4SDhIOGh4mIhoWDhIODg4WDgYCDgoWFhISDg4OChI6Zi4OFhISKk5mVmpyQgoKEg4OCgoGBhIWEg4ODgoKDhISDg4ODg4SFhISDg4KCgoKCgoSEhYSFhYWFhYODhYWFhYaFhoWEhIWEhYWGhYWFhIWEhISDhIODhJGUk5KSj4yMioWEg4ODgYGCg4KCgoKBgYGCg4KBgYKBgYGBgICBgIGBgH+AgIGAgYaGhoaGhoaHh4aGhYSDhYaCgIGBgYGHgoB+f4GBj4yDgX9+fXx9jJyNgIKBgoOHko2RjoOBgYKDg4GBgYKDhYODg4KDg4OEgoKEhIOEhIWEg4OCgoKCgYKCg4ODg4SFhYWFhIOEhYWGhYWEhISEhIOEhIWFhYWFhIODhIOEg4KGlJSSlJKPjYyIhISEg4KBgoODgoKDg4GBgoKBgoKCgYGCgYGBgYCAgYGAgICAgICAhYWFhYaGh4aGhoWGg4ODg4GAgoKCgYKAf35/f4GVl4mAfX19fXuBmIyAg4CBgoCEiYiBgYKBgYKBgYKDgoODgoOCgoKCg4OBg4SDg4ODg4OEhIKCgoKDgoKDg4ODhIWEhISEg4OEhIODg4OEhIODg4ODg4SDg4ODg4KDg4KDgouUk5KTko2NioeDg4OEgYGCg4ODg4ODgoGBgoGCgoKCgoKBgYGBgICBgYCAf4CAgICDhISFhYSFhYWEhIWCg4KDgoKDg4OBgICAgICAgJWfin5+gH2Hin6EhIOEgoODg4KEg4CCgoODgoKDg4ODgoODhIKCgoODgoKDg4KCg4KDg4WEg4ODg4SDg4SEhISEhYWEhIWEg4SEg4OEhISEhISEg4SEhYSDg4SEhIODgoKDkJSSkpKPi4yIhoOFg4OBgYKDg4ODg4OCgYGCgoKCgoKDgoCBgoGAgICAgIB/gICAgISDhYWEhYWFhYSFhYOEhIWDg4SEhIKCgoOCgoSBkaGKf4yFfYaJgH6FhYWEhYJ/fn59f4OEg4ODg4OEg4ODhISEg4OEhISEg4SEhIOEg4OFhoWFhYSFhYWFhYSFhoWGhoWFhYWFhYWFhYWGhoWGhoaFhoaGh4aFhYWFg4SEhIeTk5OSkoyKiIWFhYWCgoGBgoODg4OCg4KBgYKDg4ODgoKBgIGAgICAgICAgH+AgICAhYWFhYWGh4eGhYWFhISFhYSEhISEg4ODg4OEhYOKkYOEi4WCgYF+fYGHhoOAfn5/f39/f4OEg4OEhISEhISEhISEhISFhYWEhYSGhYWGhYaGhoWGhYWGhYWGhYaGhoaFhIWFhYWFhIWGhoaHhoaGhoaHh4iIiIaFhYaEhYWGjZSTkpGQi4qHhoeGhIGCgYKDg4ODg4KDgoGBgoODg4KAgYGBgICAgICAgICAf4CAgICHh4eGhoeHiIeHhoaEg4ODhIODg4OEg4ODg4OEhISEgYKCgYmBf359foWBf39/f39/f35/gISFhIWGhoaFhYWFhoaHhoaFhoWFhoeHh4iHh4eGhoaHh4eGhoaGhoaGhYSDhIWFhYSFhYaGhoeHhoaGhoeHh4eIiIeGhoaHh4eRlJORkZCLiYiFhoSDgoKBgoODg4ODgoKDgoKCgoOCgYCBgICBgICAgIGAgIB/gICAf4aHiIeHh4eIiYmIiIODgoKDgoSEhIWEg4KCg4SEhIOBgICAhIR/fn5/gH9/f39/gIB/f4B/f4WFhoeIiIeHh4eIh4iHiIiIhoaHiIiJiYmIh4aHh4eJiIaHhoeHhoaFhIOEhYaFhYWFhoaGh4eFhoeGh4aGh4eHh4eHh4eFh5OTkY+RkIuHhoWGhIKCgYGCg4ODg4ODgoKCgoGCg4KCgIGBgYCAgICAgICAf3+AgYB/hoiIiIiHh4iJiYmIg4KCg4ODhIWHh4aFg4OFhISDg4GAgIGMiYGAgYKCgYGBgYB/gH9/fnt6gIaIiIqKiYmIiImJiYmKi4qIiIiJiYuLioqIiIeIiIiHh4iIh4iGh4aEg4OFh4eHhoWFhISDhYWEhYWGhISEhYWFhoWGhYOJlJOQj5COioaFhoWDgYGCgoKDg4ODgoKCgoKCgoKCgYGBgYGBgYCAgICAgIB/gICBgH+GiYiIiYeIiImJiIiEgoKDg4KDhImKh4aEhIWEg4OCgICAhISCgoKCgoKCgH9+fX19fX5+fHt8g4eJi4uKioqIiIqJiImLiomJiImIioqJi4mHhoaGh4WGiIiJiIeGh4SDgoSIiIiIh4WCgoGDg4KDg4SCgoKDgoGEg4SDgY6TkpCPj4uIhYSGhIKBgYGBgoODg4OCgoKCgoKCgoGBgYGBgIGAgICAgICAgH+AgIGAf4WIh4eHhoeIiIiHh4SCg4OCgoOFiYqJh4WHhYSFhYKAgYOEgoOCgoKDgX59fn5+fn5+fn1+fX19g4eJioqHh4WGh4eHh4iHh4mGiIaIh4aJiYODhIOFhISFhYaIh4aFg4KCg4WHhoeGhoOCgoOEgoODhIKBgoGBgYODhIODkZKQjo+Oi4eEhoaEgoGAgYGDg4ODg4KCgoKCgoKCgYGBgIGBgYCAgIB/gIGAf39/gIB/hYaGhYaGhoeHiIeGgYKEhIOChYeIi4qGhIaEgoaGgoKEhIODg4OCgoF+fX1/gH5+fn59fH19fHl8g4aGh4SDgYODhIWFhYODhYSEhISEhIWEgoKCgYSEgYKDg4WGhYSCgYGCgoODhYOEhIWEhIaDhISFg4KDgYKDg4SFhIeSkY+Nj4yJhoSFhIWCgYCBgYODg4ODgoKCgoKCgoKBgYGBgYGAgICAf4CAgYB/gICAgICDhIWEhYWFh4eHh4aAgYGFg4OEhYSHiIWCgIB/gn9/gIODg4ODgoJ/fX5/gICBf31+fn19fX17enp+hISEgoGBgIGBgoKBf36BgYGCgYOBgoGCgoKBg4OAf4CAgoOCgICAgICBgYGCgYGChIODhYSCg4SDgoKBgoSDhYWGi5ORj4+Pi4iFhYODhIGBgYGBgoODg4KCgoKCgoKCgoGBgYCBgYCBgH9/gIGBgICAgH+AgIKCg4OChIOEhYWGhn+BfoCBgICAgIGDgn9+fn5+fYCCg4OCg4KDgn19fn+AgIGAfn19fX1+fXx6enqAgoKBf39/f35/f4B+fYB/foCAgX+AgIF/f3+AgX59fX+AgX9/foCAgH+AgICAf4CCgICCgYGCgYGAgYGBgYKEg4aPkpCOj42Kh4eGg4ODgYGBgYGCg4ODgoKCgoKCgoOCgYGCgYGBgICAgH+AgICAgICAf39/gYKDhIGCgoOCg4SFgIB/fH19fn19foCAf31/fn1+gYODg4KCgYF/fX1+f4CAgH9+fX19fHt7e3p6enqAgIB+f35+fn1+f35/gH9+f3+Af4GAf359fn9/fn18fn+Af35+f3+Af39/f4B/f4B+f4CBf4B+f39/gH9+f4B/hZKSj46Pi4uHiYWEhIKCgYGBgYKDg4ODg4OCgoKDg4KAgYKBgYGAgICAf3+AgIB/gIF/f36BgYSEgYKBg4OCg4OBgH98fn9/fX6Af4B/foF/f4CBhIOCgYB/f359fn5/gICAfn19fX17e3x6enl5eXuAgH9/f39/fn5/foCAf35/f4CAgoB/fH5+f35+fXx/f4B/fn9/f4B/f35/foCAf36Af39+fn5/f35+fn18fH2Fk5KOjIuKiImIhISEgoKCgYGBgoOCgoOCgoODg4ODgYCBgYGBgYCAf39/f4CAgICAgIB/foCBhIOCgYGDhISDhICBgICBgIGAgYKCgoGBgoCBg4ODgYGBgYCAfX19fn5+f359fX19fXx8fHt6eXl5eX2BgICBgYF/f4B/f4F/gICAgYGCgoB+gH5/fn5+foGAgYF/f39/gIB/f39/gYB+f3+Afn9/fn+Af31+fn17fIaTkYyLioeHioiGhoSDgoGBgYGCg4ODg4OCg4OCgoKBgICBgYGAgH9/f39/gICAgICAgH9+fn+BgYGAgISGh4aHgoODhYOBg4ODhYSEhISEg4ODhIKCgoKCgX5+fX19fn6AfX19fX19fX19e3p5eXl5eYCCgoKEg4GCg4F/gYCBgYGDgoODgYGCgIGAf4CBg4GDgoCAgYCBgYCAgYCCgn+BgIF/gIB/gICAfn9/fnx8iZOQiomIiIiJiIaGhoSCgoGBgoKDg4ODg4KDg4KCgYCAgICBgYGAf39/f4CAgICAgIGBf359fn5/f39+g4aHh4iChYSFg4SFhIWGhYaGhoWGhYGBg4ODgoKAfX19fX19fn59fX19fX19fX18e3l5eXl4fIKDhIWCgYSDgoKDhYaCg4SDgYKCg4OCgoKCgYKFgoiFgoGBgYKDgYGBgYSDgoOCgoKCgYGBgIF/gIGAf36Ok4yHiIaIh4aGhYaGhIKDgoGCgoODg4ODg4OCgYGBgH+AgYCBgYB/gH9/gICAgH+AgYB/fn19fX5+f36Ag4SHiISGhoaFhoaHh4aHh4iHh4eGf32BgIGCgX59fX19fX19fX19fX18fH5+fnx7eXh3eHl5gIODf4OMhIOEhISXl4ODhIF9foGCgoGCgYKBg4aIjIWDgoKBhIKEg4KDhYSEhYOCg4OCg4OCgoKCg4KCgpKQi4iJh4mHhoaEhoWFhISCgYKCg4ODg4ODgoGBgYCAgICBgIGBgH9/fn+AgYCAf4CAgH9/fn1+fn+Bf4CCgYWFhYeGh4eGh4eIhoaHh4eGh4V+fX18fX9+fX19fX19fX19fX19fXx7iJKCe3x6fIZ5eHl8gYF+iZaEg4OEhJSTgIGBf39/fn6Fi4B/gICEhpCJhYSCgoGFhYuDgYKFhYaGhIOFhYOEhIODhIOFhISIko+MiYiIiYeHh4WGhYSFhIKBgoKDg4ODg4OCgYGBgYB/gIGAgICAf39/f4CAgICAgYGBf39/f4CAgIGBgYGBg4OGh4aGh4aGiIeGhoaFhIOFhH59fHx8fX18fH19fX19fX19fX18fH+RlZaDe3qElHx4eXp7fICCg4GCgYOCgH58fn57iJF8fI6Wf31/f4KGioWDg4SDgYONiX9+f4OEhYWDhYaFhIWFg4SFhYaEhI6Rj4yKioyJiImHhYWFg4ODgYGCgoKDhIODgoGBgICBgICAgYGAgIB/f3+AgIB/gICAgX5+f4GBgoKCgoODgoOCgoWGhISFhYSGhIOEg4KBgIKAfn19fHx9fXx8fH18fH18fX19fHx8e4uRl4x6e3yBenp6e3x5eX19foB/gH98e3t+fn2ClZF/hIh+fH5/goR8fIGChIKAf4eDfYKBf4KCgIODhISEhISChIOEhYGEkZKOi4yMjoqJiYWFhYODgoKBgoODgoKDg4KCgYGAgIGAgICAgICAgH+Af3+Af357gICBenyAgYKDhYODhYWFhYODg4SCgYKDgoOCgoGBgIB/gX5+fX59fHx8fHx8fHx8fHx8fHx9fHx8fn6Kgnt6e3p4ent7fH17fn1+f319fX18fH+BgH2Gj4F+fYJ+fn6Agnx8f3+CgIKAfnx7ioJ9gH9+gYCAgIKBgoCAgYGAf4uUj4yLjo6MiIeHhYWEhIOCgoKCg4OCgoODgYGBgICAgICAgH9+fXx7fHx9f3+AgHx6gYF4e4CCgYOFhIOFhIaHhISAhpSIgIKBgYGBgH9/f39/fn5+gHx8fHx8fHx8fHx8fHx9fHx8fHx8fHl7e3t4eHl7enp8goCBfn+BfH5+f399gIKBgICAgX+CkYF/f4CAfoB+fn9+gIGBfX19e319fXx9fHx9gH+AgH6Afn6ClJKMjI2Oj4qFhoaFhISFg4KDgoODg4OCgoGBgYGAgICBgICAf4CAf39/fXt6fICAgHh+gXd7gIF/gYKCgoKEhoeGhn6IlYp+gYGAf4B/foB+f39/fn+Bfnx7e3x8fHx8fHx8fH59fHt9fHx8e3x8fHp6eXt8en2Fg4N/gYF+f35/gH6FgoF+gH9+foCFhoKAfn6Dhn9+fH6AgIGAf39+fX19fX57fH1/f3+AfX9+f4yRjoyNjo2Nh4SGhoWEhISDgoOCg4ODg4KBgYGBgYCAgYGAgYGBgYGAgH9/f397en9/e3mAd3p/f31/f3+Af4KDhoaFf3+FgX5/gIB/gH5+f31/gIB/f4B/f319fHx9fn18fH19fX19fH58fXx7fXx8ent6fH19f4aEg4CAgX1+fX5/fouEgYZ+fXx8f36CgX99fX19gHx7fXx+gYSDgYB+fn5+fX1+f399foB+f36Eko2MjI+Ni4qGhIaEhIODg4OCg4KDgoOCgYGBgYGAgYGBgYB/fXx8fH1+f39/f397e399d352eH59fH18fX5+gYGCg4B6fX18fn+Af35/f35/fn+AgH+AgH9/fn9+fn5+fn1+fn99fH59fn1+fHt8fHx7e3p9foCAg4OCf35/fH18fXx8gYN+jH58e3t9fn1+fn17e3t9fHp7e3uAhoSChIOBf4B+f4KCgn9/goJ/gIuQjYyLjYuJh4SEhIODg4ODgoKCgoKCgoKBgYGAgoGBgYKCf3+AgIB/fn18fH5/fn55fX52e3Z4fXx8fHt9fX6BgICAf31/f31+f39/foB/f39+f3+Af4GBgH99gH9/fn9+fn5/f3yCfn59fX17e319fHp8fH6AgoF/gIB8fH17fHx8fH18fnt/fnt7e3x8fH18e3t7e3x8enp9en6CfoKEhIKBgoGFhoWFhoaHhYGEkY+NiomLh4eFgoOEhISEg4KCgYGCgoKBgoGBgYGBgoGBgoKAgYKBgYCAgH9+e3x+fnx6fnh5dnd8fHx7e318f4GAf35/foB/f35/f35/gH9/f3+Af39/gYKAfn6BgIB/f39/f39+fYN8fH19fH99fX19e3x+fn9/fn1/fnx8fHx8fXx+fnt8e3x8fHx9fH18fnx9fHt7e3x5e3x7e316fX5+f4CAg4eJiYmKiYqJhYiSjoyIiYeFhYOCgoOEhIOCgoKBgYKBgYKBgYGBgYKCgoGCgoCAgX98e3p6eXt9enx+fnl8eXh4dHx8fHt8fHx+gH9/f39/gIB/fn5+fX+AgH9/f3+Af4CDgoB/gIGAgIB/f4CAgH58enx9fX59fX5+jIZ9fX57e4ODfX19fX18fX19fH1+fH18fXx9fX58fn19fX18e3t6fHt8fHt6e3t6enp7fn6DhYiHiIqLi4qJjJGPjYqIhoWEgoKCgoODg4OBgYGBgYGBgYGBgYGCgoOCgYKBgIGBf3+Af356eHl5en5+e3l6eH5zfHx8e3x8fH5+fn5/gH+AgIB/fn9+gIF/f4B/gIGAgoSDgYCAgYGAgX+AgYKBf39+f31+gH57foGSjHx9f4qAjYx+fn19fX59fX59fHx8fX18fXx9fX1+fX1+fnx7e3t8fH18e3p7e3l6eXl5e35/hIOEh4mKh4mOj42LiYmFhISCgYKCgoKCgoGCgoKBgYGCgYKCgoGCgoKBgoKAgYGAfoCAf39+e3p5e319eHx6f3KBfXt7fXx8fn59fYGCf4GBgX9/gH+AgX9/gIGCgYGFg4SCgYGCgYKCgICBg4KAf4F/fX6Afnx/f4mCf36DkISEg4F/fn18jYd9fX59fHx/fnx9fXx9fX5+fX5/fX19e3x9fnx8e3x9enp5eXl5e3t+foCBg4eEiI6NioqGhYSEg4KBgoKCgoGBgYGCgoKBgoKCgoKCgoKCgoGCgn+AgIB+f39/fn5/ent5fX16enp9cX6Cent9fX19fXp4f4KAgYKCgICBgIGBgICBgoKCgoaFhIKBgYGBg4F/gIKEgX9+gYB9foF+fX5/gIB9fn+EgH5+f31+fX2KhX1+f31+foB/fX19fH5+fn99f4B9fX18fX9/fHx7fH17e3t6enp7e3x9fn2Ag4CJjYqLh4WFhYSDg4KCgoKCgYGBgoKBgoKCgoKCgoGBgoKBgYKCf4CAgH9/f39+fn59eXp6fXx5d3t0e4d8dHd9fn17e3Z2fYCBg4KBgYKCgoKBgYGDg4OChYaEg4GAgICDgX+AgYSBfn6Af35+gH59fn6AgH+Bfn+Af39/gH99f39/f3+Afn9/gH58fX18fn5+foF/gH2CgHx9gIB9e319fXx8fHx8e3t7fHt8fHx9fIqKiIiFhYWFhISDgYKBg4KAgIGCg4KCgoOCgoKCgoGCgoGBg4J/gIGAf39/fn5+fn57enp8fHt2e3R3f352cnt+fnt4dnd8gIGCgoKBgoODg4OCgoSDhIOFhoOCgX9/gIKAgICAg4F+foB/fX+AfX1+foCAf4J/gYGAgICBgH1/f3+AgIGAgIB/fnx9fX19fn59g32AfoKAfX6AgX98fn59fX17fH58fXx8fHp8e3x9iYeHhYWHhYWFhIKCgoGDgYCAgoKDgoKCg4ODg4KBgYGBgYGCgH6AgYB/fn5+fn5+fn56e3p9goN9dXF6fHpxen59eXh0dICAgoKCg4KDhYOEg4KDhISEhIWEgYGAgH6AgoB+f36Bf35/f4B9foB9fX1+gH9/gYCCgYCAgIKBfn6Af4GAf4CAgH9+fX19fnx+fn19gYR/gH9+f4GBf31/f319fn1+fn1+fHt8enx7eoCHg4SEhYSEg4SDgYKBgYKBgICCgoOCgoOEg4SDg4KBgYKBgYOAfoCBf35+fn5+fX5+fnt7en6Jh354cnl9f3F6eHt4eXV1fYKDgoODg4OFhIWDg4OEhIODhIKBgH+Af4CBfn19foB+fn5+gH19f3x9fX6Af4CAgIKAgIGAgoGAf4B+gIF+gIGAgH9+fn5+fX1/fn6FhYGBgH+Ag4F/foGAf35/f4B/fn17ent6fHt6goWAg4KCgoOCg4GBgYCAgoGAgIKCg4KBg4SDhIKEgoGBgoGCgn9+gIF/fn1+fn5+fX59fXp7fIWEe3tzeXp8cHd1dnd5dXR6hISBhISDhIWFhoSDg4WEgoODgoCBf39/f4B9fX1+gH1+f39/fn1+fH19foF/gIB/gIB/gIGDgoGAf36AgH+AgYCBgH9/f39/f4CAgIGCgoKBf4CDgn9/g4J/f4B/gX+Af3x7e3p8e3yCgH+Cf3+BgIKCgYF/f3+BgH6BgoKDgYGDg4KEgoSCgYGBf4GCgH6AgH9/fX5+fX19fn19e3t6gH94fHZ5eXtxdHh3dnh1cnmFhYKEhIKEhYWGhISChIOBg4GAgIF+f4B/gHx9fX6AfX5/f39+fX98fn5+gX+Bf39+f4B/gIODg4B/f4GBgIKBgYGAgICAgICAgIGAgYKDgYF/gISAfYGDhICAgX+BgYKBfXp7e3x8fH9+f4B8f399fYGAgH59fX9/foKBgYKBgIKCgoKBg4KCgYB/gYKAfn9/fn99fX1+fX19fX19ent7fHZ9eXh5enJ1eXl2d3dzdYaFg4WFgYSEhYSEhIGDgoGDgX+AgX5/gH6AfX19fn9+f4B+fn99f3x/f3+BgIF/f3x+gH6AgYKDgYCAgYOEgoGAgYB/goCAgYGAgYGCg4KBgX+Ag4B+goKEgICCgYKChIJ+e3t8fHx8fX1+fXp+fX14fn9/fHx8fn5+gYCBgYCAgoGBgYGDgoGBf4CAgoB9fn19f319fX59fH19fX16e3p8dnx6d3t4cnZ5e3Z2dnN0hoSEhYSChISFg4ODgYOBgYOBgIGBfX+BfoF9fX1/f39/gH5+f359fYB/gIGBgX5+fH5/fn5/gYJ/gYGCg4eFgX9/fn6Af4CBgICAgIGCgYCAfoCCf36BgoKBgYOCg4OFgn99fX18e3x8eXp7en55e3l4f357e3t+fX1/f4F/gH6BgICAgoOCgYF/gIGBf31+fH1+fX19fX18fn58fXx5e3x4enx3endzeHd6c3Z2c3SGhISGg4KDhISDgoKCg4GCgoGAgYF9gIB+gH1+fX5/gICAf35/f3x/f3+BgIGAf359f39+fn+BgH2AgIGDg4N/f359fn5+f4CAgIB/gYKBgH9+f4F+f4CCgoCBg4KEhIaEgH59fHx8fHp5dnl5enl2eXZ+fHt7e359e399gH99fX9/f3+BgoGBgX5/gYF+fX18fX19fX19fXx+jYF8fXl7e3p5fHd4eHR1dXhyd3d0doaEhIWEg4ODg4OCgYKDgoGDgn+Bf35/fn+AfX19fX+AgIB/f39/fIB/f4GAgYCAf3yAf35+fn9/fX5+gYGCgn5/fn1+fn5+f3+Af32AgIB+fn5/gX5+gIKBf4KDgoOEh4SAgH58fXx8e3x1eXl4eHh5d3t8e3t7foV9fn1/ent+fn59foGAgIGAfX6BgH59fXx9fX19fX18e32Dgnx8ent7e3p7d3Z4dXJzdnB4eXJ4hYWFhYOEhIOChIKBgYKBgIKBgIF/fn5+foB+fX58foCAgH+AgIB7gH6AgH+BgYB/fYB+fn5/f319fX6AgYKBfn9+fn59fX5/fn9+fH+Af35+fn+Cfn6AgIF/gYODg4OGhICBfnx9fHx7fHh3e3h1eXd3eXx6e3t9kod9fH13en1+fn19f35+gH98foB/fn19fH19fX19fHt8ent9enp4e3x6ent4dHh1cXJ0cHh4cXmEhYWFg4SDgoODgoGBgoKAgYGAgIB9fn5/gH18fn1/gIGAf4CAgHyAf4B+f4GAf39+gX9+f39+fX18gICAgIB+f35+fn18fn9/f358fYB/fn1+gIJ/foCAf36ChIKCg4WFgoJ+fXx7e3x8eXd8eXd4d3d4e3t7e3yFin17end6fH19fHx9fX1/fnx9fn59fXx8fX5+fX18fHt6enx7e3p5enp7enhzd3VxcXNveHdxe4WGhIWDhYKBg4OBgYGBgoCBgICBgH5/fn9/fXx+fYCAgoGAgIGBfX6Af35/gX+Af3+BgH9/f31+fH1/gICAgH9/f35/fXx+f39/f319f39+fn6CgYF/gIB/foGDgoKEg4SCgn5+fHx6fHt7eXt6d3N2d3h5e3p7eXp/fnt7d3p8fXx8fH59fH19fH19fXx8fX19fX99fXx9e3l7fHx7enp6enp6eHN2dXBwcm93dnJ7hYaEhYOEgoGDgoKCgYGCgYKBgYGAf4B/f399fX9+f4CBgYJ/goF9foF+fn+Bf4B/gIJ/gIB+fH58f3+BgICAf4B/f4B+fX5+f4B/f39/gH9/f4J/gICAgIB/gYGAgISBgoKAf39+f3x9fn56fYV+dHx9enp6enx5eXp6hoV3eXx8fHx8fXt8fHx8fX19fHx9fX19fn19fX16eX18fH16enp6enp5c3V1b29xb3d0c3yFhoOEgoOCgYKBgoKCgYKBgoGBgYCAgICAgH59gH+Af4GCgn+CgX+AgX5/gYB/f4CAgn+Bf319f35/f4KAgICAgIB/gIB+fn1/gH9/gIB/f39/gH+AgICAgH+AgYCBgYGCgYCAf39/fn1/fnuBk416fH18e315e3p6eHmBgXh5e3x8fXx8e3x8fHx9fX18fH18fn1+fn59fHp8fHt8fXt5enp6eXl0dXVvb3Fwd3N0fYWGg4OCg4KAgYCCg4KAgYGCgYKBgYCAgIGAfn6Af4GAgYKCgIKCgICCfoCBgX9/gX+BgIF/fH6Af3+AgoCAgICAf3+AgH9+fX6Afn2AgIB/f3+AgICAgYCAf4CAgYCBgYKCgICAf39/fX5+fIGGiXx8fnt7fnl6e3p7jn53d3l7fHt9fHx8fHt9fH19fX18fXx+fn5/f358enx9e3x9e3l6e3p5eXN0dW5zcXB4cnV6hYaDg4KDgoCAgIKCgX+CgYKBgoGBgYKAgYF/fn9/gYGCgYKBg4OAgYJ/gYGBf4CAgIB/gX99f4F/gICBgICAf4B+gICAf359foB+fn+Af39/gH9/gICBf4CBgH+BgIGCgoKAgICAgIB9foB9gIOCe35+e3x9e3p8fHyHeXh4eXx8fH17fHx9fX18fH19fn19fX5+f3+Af317fH18fHx7enl7e3l5c3J1bnZycHhxdXaFhYOEg4KCgICBgoF/gIKCgoKDgYGDgoCCgYB/gICCgoKBg4KEhICBgX6BgoF/gICAgH+Cf36AgYCCgICAgIB/gH+AgIB/fn2Af39/f4CAgH+AgH+AgYF/gICAgIGBgYGBgYGAgYCAgH9/gH5/fX59fn57fXx9e3x8d3h1eHh5e3x8fXx8fHx8fX5/f39/fn19fn9/gIGAf3x9fHx9e3p7eXp8eHpzcnVud3FxenF2d4WFg4ODg4KBgYKDgH+CgYSDg4SBgYOBgoOBgYCAgIKDgoCCgoSDf4GAfoKDgICBgICAf4CAf4GBgIKAf4CCgH9/gICAgICAf4CAgH+AgICAgIB/f4CBgYCAgICAgYKAgoOCgoCCgYGCgYB/f4B/gId+fnx6fXx7fX94d3Z5eXp8fXx8fXt8fH19fn5/gIGAfn1+gICAgoGAfH59fX58d3t6ent5eXNxdW53cHV6cXZ5hYWCg4KDg4KDhISAgIOBhoOEg4GChICEg4KCgICCgoSBgYKChIJ/gIB/gYOCgYCBgYCAf4GBgYGAg4F+gIOCf35/goGAgIB+gYCBf4CAgYGBgYCAgIKBgYKBgYCBgYGBgoOCgoOBg4OCgYCBgH+AhH19fXx/fXp9f3t5dnp4eXt7fH19e3x9fX19fn+AgYGAgH+AgICDg4B9f35+fn15eXt6enp5c3J1b3dxd3lzd3uFgoKDgoOEgoOEg4CAgoOGg4ODgoKEgYSDgYKAgIKBhIGCgoGCgX6BgICCgYKBgYKCgIGAgICBgoGEgH6Bg4F/f4CDgoCBfoCCg4KAgYGBg4KDgoGBg4KChIGAgYOBgYKEg4KEhIODhIODgYGBgYCCf4B/fYB8enx/e3t3fHl5eXt6fX59fHx8fH1+foCBgYCAgIGBgYSEgH2Af39/f357e3t6e3p0cHhyeXR2eHR3e4SCg4KDg4SChIODgYKDhIaEgoODg4SChIOBg4CBg4KCgoKCgIKAf4GAgIKBgoGCgoKBgIGBgYOCgoOAfoGDgX9/gYSEgYN/goKBg4KCgoGEg4OEgYKEgoOCgoGCgoOBg4SDhISEhISFg4SCgYOCgoOBgYGAgH58fIB9fHh8eXp5enx9f3x7fHx9fX18fICAgICAgYGBgYKBfoGAgICAf3t7e3p6enVweHd5dnV8dXZ8gICDgoODg4OEhISAgoOGhYWDg4KDhIKEhYKCgYKDg4GCgoKAgYB+gYCBgYKDgoKCgoGAgYKCg4KCg4B/gYOBgICChIODgoGCgoGDgoKDg4ODg4SAgoSDg4OBgX+Bg4KDhYKEhISEhISDhISChIOEhIKBgoGBgHt+gX59eXx6enp9fHyBfXp8fH19fHp7fn5+gIB/gYGAgICAgIGBgIB/fX18fX18dnJ2eHh2dH92dX2Hh4OChIWDg4SFhICChYWEhIOCg4SEgYSFg4KCgoODgYOCgoCCgH2AgIGCg4KCgoKEgoGCgoOEgoKBgICBgoGAgYOFhIOCg4CCgoOCg4ODg4OEg4CCg4KEg4KCfoOBgoSEgoODhISEhIOEhIOEg4WEg4ODgoKAe4CBf3x8fXp6e32AfX9/fHx6fH59fH19fn5/f39/gICAgH9+foCBgICAfnx9fX5/fn18e3h2f3Z3f4SHg4KDhYODhIaEgYKFhoWEhIODhISChIWFgoKDg4SCg4KDgoKBfoCAgoKDgoODg4SDgYKCg4OCg4GBgYGDgn+ChISDg4KEf4KEg4ODgoSDg4SCgIOEg4SDg4KCg4KChIOCg4OEhISEhIWEg4OEhYSFhIOBgoB9gYKAfXx8e3x8gH19foB+fn1/fnx8fH19fn5/fn+BgYGBgH99fX6BgYB+fn19fX59fX5+f3+AfH2AgYKCg4OGg4SDhoSBgoiHhYSDg4SEhYGEhYWDg4SDhIODgoOCg4F+gYGDg4SCg4OEhIOCg4KEg4ODgoKDgYOCf4KDg4ODgoOAgoWDg4ODhIODhIOBgoSEhYOCgoODg4GEg4GDg4SDg4SEhYSEhIWFhYWEg4ODf32BhIB9fXx8fHx/gX5/f39/fX99e3x9fX19fX5+f4CBgIGBgH59fH6Cf39+fn5+fX1/f39/gICAf4CEhIODhIWDhIOFf36CiouFhISDgoOFgYaGhoOEhISEhIODg4OEgn+BgYODhYSFhIWEg4KEhISFhIODgoSDhYKBhISFhYaEgoCDh4SDg4OFhIWFhIGEg4OHgoOCg4GCgYSDgoODhYODhIWEhYWHh4aHhYSEhYSBf4GDf35+fH5+fX+BgH9+fHx/f358enx9fX19fX5+fn9/gIGBf319fIB/gH5+fn5+f3+AgYGBgYKAgYWFhIOEhIKEg4aAgoWFiomEhISEhYWCh4aGhISEhIWEhISEg4SDgYKDg4OEhIaEhYSDg4SEg3yDhHuBhHd5g4F9hH5+cnWDgoF2foOEgH2BdYF5g39/f36EhIKDg4KBg4SDg4SFg4SFhoSFhn2EeXx+f4N7hYOBhIOAf31+f31+gYOBfXt/fX6Afn18fHx9fX19fH19f4B/gYJ/fX18f4GBgICAgH+BgYGCgYKDg4KChoSEhIWEgYOEhYOEhYOKiIWFhYOFhYSGhoaDhISFhYWEhYWEhIWCgoOEhYWFhoSFhIOEhYWCaICFanx7cXF8gXOGc3R0fYKDdXNxg4ZzcHVyc3SDdnt9dYF/goOBgnZ5hYCDgIR/hYSChYWCaHpyc3N8gHKBg3+Dg32BfX5+fX6Cg4J8f4F9f4B9fXx8fHx9fHx8fn1+gH+BgX99fX2AgYKBgYGBgIGBgYKCgoKCgoSHhIWEhYSBgoSGhoOFg4aIhoaFg4aGhoeGh4OFhYaFg4KFhoSFhYODg4SEhoaGhIaEg4SFhn1xe4FweXZ+g3+CbnlwdXN8dnl5hnKEg3B2eHF2dHR1cnN0dml/gG5yb3R2bnVsd217c26Ah3ltfXJzdnN2bW53bHB5bHV9f398foGAgX2Af32Af4B/fX18fHx9fH1+f32Af4CAfnx/foCBgoCBgICAgYCAgIKDgoKEhYeGhoCChYODhYeGg4WFhYaHh4SDhoaIiYaHhIWGiIeEg4WGhYWEhIOFhIKFhoaFhoWEhoWHdnB0e3BydX+HhYNtdW92b3x1coR5eYd4cXR3bndod3pucHaCcoN+b3p5eW1vbnpvb213fXiGcHF6cHJ0ZoF1fm57eXNveX+Af31+gYB/e39+fIB+gIB+foCAgYB+fn9/foF/gH9+fYB9f4CBgIB+fn+BgH9+goOCgoSFh4eEfoeEg4OFh4aEhoWFhoaIhISGh4iIhoeEhoaLioWEhoeHhYOFhYWEgoWFhYWGhYWGhYZxdXByc29zenl+hHSIdHV+iHZugnKEhnluanJ/cW1zd3x/dXR8hH54cXV3bnl1enF2eHV6eYRyaW95eHBreXN6b3p3dnZwgYB/fn5/f356fn18f31/f359gIGDg4CCg4GBhIKBf4GBgH1/f4F+f35+f4GAfn6BgoCAgYSHhoODhoSEhIaHhoWFhYWGhoiFhYaFh4eFhoSGhomIhYSJi4iGhIaFhYWDhYWEhoaGhoaFg3iLeXKIentwcIWEeIV4eWtzfnl7a3KDh4N6fG16eXl0fYB2bm+AgG90fHV3cXl9fW1+dW+DhYZ6gHJye3x1cG96bHN8bnaCgYF+fn99fXp9e3x9fX9/fn1/f4KCf4GDgYGDgYB/gICAfn9+f31/fn1/gH58fYGAfn6Ag4iFhoOFhYWFhoeFhYWFhYeHiIaEhoWHhoaFhIWFhIWFhomKh4WEhoWGhoWGhoSGhoaGhoWGh4eHhoaEhoWGh4iHhYeGhoOHhoWFg4SFhoWGhIaEg4SEhoSEgYODhISFhIWEhYSGg4aHhYWEhIWHhoSEhYaFhX13hYOEhIKBgX1/fnt8e357fHx9f359fH5+gYB9f4F/f4GAfn5+gH5+f35+fX99fX5/fHt8f358fH+BiYaFhIaGhoWGhoWFhYWGhoeIhoSGhYaGhYWDhIWGhYSGhoaGhYSGhIWGhoaGhIeGh4eGhYeIiIiIhoSHhYaGiIaFiIeIhYeGhoiFhYaHhYaGhYOChYWGhYWDhYSEhIWEhoWEhYWDhoaFhoWEhoeGhISFhoOFhIKEg4OFg4OCfYB/e3t8fnt8fH1/fnx8fn2Af31/gH5+gH99fXyAfX5+fn5+f3x8fX57fHx/fHt7fn+Ih4SEiIaGhoeGhYWEhoaGhoiHhIWGh4aFhIODhIaFhIeFhoaFhYaEhYaGh4eFh4aJiIaGiIeIiYiFhYiFhoeGh4aHhoiFh4eGh4WFhoeFh4aFgoOFhoaEhIOEhIOEhoSGhYWFhYOGhoWGhYWGhoWEhIWFg4SHhYOCgoWDhIF+gIB8e31+e3x7fn59fHx+fX5+fX9+fX1+fnx9fH98fn58fYGAfHx8fXx8fH56e3t8foiHgoWIh4eGhoaGhISGhoeGiIaEhYSGhoSFh4OEhYSFh4SFhoaFhoSGhoeHhoaHh4mIhoaIh4iKiIWHiIWHh4WHhoeGh4WIiIeHhYaGh4WGhoSBhISFhoWFhISEg4SFhIaGhoWGhIaFhoaFhYaGhYSDhISDg4eDhIGChISDgoCAgHt7fn18fHx+fXx8fH19fH18fn18fX18fHx8fXx+fXt8gX99fH18fnx8fHp6fHx9iIeChoiHhoeGhoaDhYaFhoaGhYOFhIaFhIiJg4GEg4SGhIaGhoaGhIeHiIiHh4eIioiGh4iHiImIhYiHhYaGhoeHh4WHhoiIh4eFh4eHhYaHhIKEg4SGhYeFhISEhISFhoaGhoWFh4WFh4WGhYaFhIOEg4OEh4GDgIKDg4KCgn+Ae31+fXx8fH59fH19fH57fHx7fHx9fXt7e318e359e3x/fX18fX1+fXx6ent7fHyIh4KGhoaGh4aGhYOFhoWFhYWEg4WChoSDiId/enqChYaEhoaFh4aEh4eIiIiHhoiKh4aHh4eIiYeFiIeFh4eGhoeHhYeGiIiHhoWHhoiGhoeDg4SEg4aGh4WFhISEhYaGhoaGhYaHhoaIhoaEhoWDg4ODgoOGgYN+goKDgIOCf398f35+fHx9f318fX18fXt7e3p7fHx8e3t7fnt7fXt6e358fHx8fX5/fXt6fHp8fImHg4aFhoWGhoWEhIWFhYWFhIOBhIGGhIKEhHyAhn+ChYWGhYWGhYSHh4iIiIaFiYqHhYeGh4eIh4WIhYaHiIaGh4eGh4aIiIeFhoeGh4WFiIOEhoWEhoaHhoWEg4WFhoaGhoaFhoaHhoeHhYOFhYOBg4KAg4WCg36BgYF/g4F/fn5/fX98fH1/fXt9fXx+enl6eXt8fXt7e3t+fHx8fHp7fXx8fHx+fYF8e3t7e3x7iYeEhoSGhIaGhYSFhoWEhIOEgoCDgYaDgYJ/eoSMe4CEhYeGhoaFhIeIh4aHhYWHiYeEh4WGhoiGhYeEhoeIhoaIh4eHhoeIhoSGhoaHhYWHg4SFhIaGhoeFhISDhYWGhoeGhoWGhoaFhoaEg4SFgoGCgYCDg4OCfYGBgH6DgX5/f4B8f3x9fX59e359fH15eXp5e319enp7e318fXx8ent9fHx9fH5+gHt7e3x+fXyIh4WGhYeEhoSFhYWFhYODgYOBgIKBhYJ/gH9/fXx7gYSFhoaEhYSDh4eGhoaFhIaJhoKGhIaGhoWFh4WHiImGhYiHiYeGhoeFhIaFhYeFhIeDhIWEiIaGh4WFhIKFhYaFhoaHhIaGhoaFhoODg4WAgIGAgIOBg4B8gYB+foKAfYB/gXx/fH1+fX57fn18fHl6enl6fX15enp7fHt8e3t6e319fH18f35+fHt7fX59fIiGhYaGhoSFhYSFhYSDgoKAgoGAgICDgX5+foB5en2Ag4OFh4WEg4OHhoOEhYSChYiFgoSDg4WFhYWHh4aIiIaFiIeJh4aFhYWDhoSFh4OEhoSEhYSHhoWGhYaEgoWFhoaGhoaEhYaGhYWFgoKDhH9+gICAgYCDgHuBf31+gn5+gH6Afn99fX59f3t/fXt6eXp6eXp8fXl6ent7enx6e3t7fH19fXyAfn18fH1/fnx7h4WFhoaGhoSFhIWDhYKBgICAgYB+f4KCfX1/f3t/f4KDg4WGhYSDg4aDgYOEgoCFh4WCg4GBg4SEhIaGh4iHhYWIhomHhYSEhIKFg4SGgoOFhISGhIeGhYWFhoOEhYSFhoWGhIOEhYWDhYSAgIODf35/gH9/gIN/fIB9fX+CfYCBfn6Bfn5+fX1/e398e3p5enp5ent8eXp6e3t7fHp7e3t8fX19fYB9fXx8fYB/fXyGg4aGhoaFg4SDhoKFgYGAf3+AgH5/gYJ8fn9/foCAgoKChIWDgoGChIGAg4KBgISFhYKBf4CCg4OEhYWHhoaEhYeFh4WGgoOCgoOCgoWBg4WEhYaEhoaHhoaFgoSEg4SFhYWDhIODhIKEhIB/goJ/fX5/fn5/hH57f3x8gIF9gYB9foN9fn59fX57fnt7enl7enl6ent5enp6e3t8ent8fHx+fn1/gXx9fHx9f4B+gIaEhYWEh4SEg4KGgoOAgYB+fn+AfX9/gnx9f39+fn+BgYKEg4KBgYKCf4CBgoCAgoWEgoB/gIGCgYOFhYeFhISGhoOFg4WBgoGBgoGCg4GChISEhYWGh4eGhYSDg4ODhIWFhIGDgoOChIODgH+AgX59fX5+fH6Dfnx+fHyBgH6Cf35/gnx/fn19fHx8e3t6enp6eXt6enp5enp6e3x5e317e35/f4GAfX59fX1/gICAhoSEhYSFgoSCgoSCgoCBgH59fn9+fn6AfX2Af35+foGBgoODgoSHgYF+gICBf3+ChIOBf35/gIJ/goWEhYOCg4WFgoSBg4CBgIGBgYKBgIGEg4OGhYWHh4WEhIWCgoKDhYSCgYGBgYCFg4F/foB/fnx9fn18foN9e358fYF/gIN9fYCBf35/fXx8fH17e3p5enl5e3l6enl6ent7e3p7fXx8f3+BgoB+gH+AgH+AgIDKysrKysrKysrKysrLy8vLy8vLy8vLy8zMzMzNzc3Nzc3Nzc3NzczMzMvLy8vLy8vLy8vLy8vLzMvLy8vLy8vLy8vLy8vMzMzMzM3Nzc7Oz8/Pz9DQ0NHR0dLS0tLS0tLT09PT0tLS0tLS0tPT09TU1NTU09PT09PT09PT09PT09PT09PT09PT09PT09PT09PS0tLS0tLS0tLS0tPT09PT1NTV1dXV1dXV1dXV1dXV1dXV1NTU1NTT09PT09PT09PT09TU09PU1NTU1NTU1NTU09PT09PS0tLS0tPT09TU1NTU1NPT09LS0tLS0tLR0dHR0dPHhnNlYFtLWWdVTUZIQD03Nzg5Nzw8PDo8Oz42Oj04PDs6OTg3ODs7Oj87PTs8PD47P0E/QkJBQ0RFREE+PTw7QENDQUBDQ0FBR0hHSUtSwtXS09PT09TU1NTU1NTU1NTU1NXV1dXV1dXV1dXVysrKysrKysrKysrKy8vLy8vLy8vLy8vMzMzMzMzNzc3Nzc3Nzc3MzMzMy8vLy8vLy8vLy8vLzMzMy8vLy8vLy8vLy8vLzMzMzc3Nzc3Oz8/P0NDQ0NHR0tLS0tLS09PT09PT09PT09PS09PT09TU1NTU1NTU09PT09PT09PT09PT09PT1NTU1NTU1NTT09PT09LS0tLS0tLT09PT09PU1NTU1dXV1dXV1dXV1dXV1dXV1dXV1NTU1NPT09PT09PT09PU1NPT09TU1NTU1NTU1NPT09PS0tLS0tPT09PU1NTU1NTU09PT09PS0tLS0tLR0dHSzIxyZ2BcTVllUktHSz87Mzc4Ozg5Pj05PDpBOjs9Nzs8PDo6Nzg6Oz0/Oz88PTw/Pj9BPUFBPkNDREJAQT46Oz9DREFDRERCQklHSEhJTr7V0tPT09TU1NTU1NTU1NTU1NXV1dXV1dXV1dXV1crKy8vKysrKysrKy8vLy8vLy8vLy8vLy8zMzMzMzM3Nzc3Nzc3NzMzMzMzMy8vLy8vMzMzMzMzMzMzLy8zMzMzLy8vLzMzMzc3Nzc3Ozs/P0NDQ0NDR0dLS0tLS09PT09PT09PU09PT09PT09TU1NXV1dTU1NTT09PU1NPT09PT09PT1NTU1NTU1NTU1NPT09PS0tLS0tLS0tPT09PT1NTV1dXV1dXV1dXV1dXV1tbV1dXV1dTU1NTT09PT09PT09PU1NTU09TU1NTU1NTU1NTT09PT0tLS0tLT09PU1NTU1NTU1NTU09PT09PT0tLS0tHR0s+Sd2hfXk9XZ01LRks9ODc2NTk5OTw+OT88RDo7PDc5PD07OTc5Ojw9QDs+PT47PD48PT5BQD5EQ0NDP0E9Ojs9QkNFQ0NEQT9FSEpJSky61dPT09TU1NTU1NTU1NTV1dXV1dXV1dXV1dXV1dXLy8vLy8vLy8rKysvLy8vLy8vLy8zLy8vMzMzMzMzNzc3Nzc3Nzc3MzMzMzMzMzMzMzMzMzMzMzczMzMzMzMzMzMzMzMzMzc3Nzc3Ozs/Pz9DQ0NDQ0dHS0tPT09PT09PT09TU1NTT1NTU1NTU1NTV1dXU1NTU1NPU1NTU09PT09TU1NTU1dTU1NTV1dTU09PT09LS0tLS0tLS09PT09TU1dXV1dbW1dXV1dXV1tbW1tXV1dXV1NTU1NTT09PT09PT1NTU1NTU1NTU1NTU1NTU09PT09LS0tLT09PU1NTU1dXV1dTU1NTT09PT09PT0tLS0dHRmn5nYWJOVWpKSElLPzw6OTM3Njc3PTs+Oj06Ojo4ODo7Ozg4Ojs7PD46PT09Ojw/PD0/QkA/Q0RDRD5APT08QENEQ0JEQkQ+REhJSUtMttfT09TU1NTU1NXV1dXV1dXV1dXV1dXV1dXV1dXVy8vLy8vLy8vLy8vLy8vLy8vLy8zMzMzMzMzMzMzNzc3Nzc3Nzc3Nzc3MzMzMzMzMzMzMzMzNzc3NzczMzMzMzMzMzMzMzc3Nzc3Ozs7Pz8/Q0NDQ0NHS0tLT09PT09PT1NTU1NTU1NTU1NTU1NTV1dXV1NTU1NPT1NTU1NTU1NTU1NTU1dXV1NXV1dXV1NTU09PT09PS0tLT09PT09PU1NXV1dbW1tXV1dbW1tbW1tbW1dXV1dXU1NTU1NTU1NTU1NTU1NTU1NTU1NXU1NTU1NTT09PT09PT09PU1NTU1dXV1dXV1dTU1NTU09PT09PS0tLR0p+DaV9kU1hsSEhIS0A9Nzg0NzY6Oj87RDw8Ojw8OTg6OTo6Ojs8Ojo7OT49Pjk9QDs/QUFCP0JCQUM9Pz8+PEBCRUNDQkBBO0ZJR01MSbLY09TU1NTU1NXV1dXV1dXV1dXW1tbW1tbV1dXW1svLy8vLy8vLy8vLy8vLy8vLy8vMzMzMzMzMzM3Nzc3Nzc3Nzc3Ozc3NzczMzMzMzMzMzc3Nzc3Nzc3Nzc3Nzc3Nzc3Mzc3Nzs7Ozs7Pz8/P0NDQ0NHS0tLS09PT09PT09TU1NTU1NTU1NTU1NTV1NXV1dTU1NTU1NTU1NTU1NTV1NTU1dXV1dXV1dXV1dTU1NTU1NPT09PT09PT09PU1NXV1dbW1tbW1tbW1tbW1tbW1tbV1dXV1dTU1NTU1NTU1NTU1NTV1NTU1NXV1dXU1NTU1NTT09PT09PT1NTU1dXV1dXV1dXU1NTU1NTT09PT09LS0tSjiGxfZlJWakdIR0lBPjM2Njo7PDhDPEJBPjxBPDg5Ojw6Ojw8PDk8PTo7PD09PD89QD9AQT9AQUBCPD4+PzxCQ0NDRkBBQT1ISklOTUeu2NPU1NTV1dXV1dXV1dXV1dbW1tbW1tbW1tbW1tbMzMvLy8rKysvLy8vLy8vLy8vMzMzNzc3Nzc3Nzc3Nzc3Nzc3Nzs7Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Ozs3Nzc3Nzc3Nzc3Nzs7Ozs7Oz8/P0NDQ0NHR0dLS0tPT09PT09TU1NTU1NTU1NTU1NTU1NTV1dXV1dXU1NXV1NTU1NTV1dXV1dXV1dXV1dXV1dXU1NTU1NTT0tPU1NTU1NTU1NTV1dbW1tbW1tbW1tbW1tbX19bW1tXV1dXV1dXV1dXV1dTU1NTU1dXV1dXV1dXU1NTU1NTU09PT09PT1NTU1NXV1dXV1dXV1dXV1NTU1NPT09PT0tLWroprY2VSWGhMSkdJQjg0OTQ6Ozo5QDk+Q0U/PDw5OTk9Oj07PDw6PTw7OTw9Ozs/PUA9PT5AQD9CQT5APD05QERDQkFBQj48SEpLTU5IqNnU1NXV1dXV1dXV1dXW1tbW1tbW1tbW1tbW1tbWzMzQ0dDQ0NDQ0dHR0dHR0c3Ky8vLzMzMzMzMzMzMzM3Nzc3Nzc7Ozs3Nzc3Nzc/Pz8/Pz8/Pz8/Pz9DQ0dHR0dHR0dHR0dHS0tHV2djY2NnZ2dra2tvb29vZ2dnZ2dna2tra2tra2tjW19fX19fX19jX19fX19XV1dTU1NTV1dXV1dXV1tfX19fX19fX1tbW1tbW09LT09PT09TU1NTU1NbW1dXV1dXV1dXV1dXW1tbX1tbW1tbV1dXV1dXV1dXV1dTU1dXV1dXV1dXU1NTU1NTU1NTU09PU1NTU1NXV1dXW1dXV1dXV1dTU1NTT09PT09PS1bqKa2hoUlhlSUlMT0A5OTo0O0E8Nz05QUM+QD89ODo6Ozk9Oz4/Ojs8PDo7PDo7Pj1APT8/P0FAQUE/QTw8Oz5BRENBREA9PElJSk1ORqPa09TV1dXV1dXV1dXW1tbW1tbW1tbW1tbW1tbW1szNloSGhoaGhoeHh4eHh4Ky4t3d3t7e3t7e3t7e3t3S0NDQ0NDQ0NDQ0NDQ0ci5ubm5ubm5ubm5ubq6t6WkpKSkpKSkpKSkpKSnhmBjY2NjY2NjY2NkZGRlhIuKioqKioqKioqKioemuri4uLi4uLi4uLi4uLrR09PT09PT09PT1NTU1cm7vb29vb29vb29vb28v9LS0tLS0tLT09PS09PT3OPi4uLi4uLi4uLj4+Pi2NfX1tbW1tbW1tbV1dXV1dXV1dXV1dbW1dXV1dXV1dTU1NTU1NTU1NTV1dXV1dXW1dXV1dXV1dXV1NTU1NTT09PT09XDkXFrak5TYkxMVk48Ojo3Nz5DPjg+Oj8/QT0+QDc7Ojs7PTs+Pjo7PD48Oz07PT8+QDw/Pz1AQEBBPj88PjxAQUVCQkZAQD9HSEpLT0ae2tXV1dXV1dXW1tbW1tbW1tbW1tbW19fX19fX19fMzm5QU1NTU1NUVFRUVFNMoPPr6+rq6urq6urq6uvp1dLS0tLS0tLS0tLS0tTEqaqqqqqqqqqqqqqqq6aGhIWFhYWFhYWFhYWFik4MEhISEhISEhISEhIRE0pUU1NTU1NTU1NTU1NPg6ejo6Ojo6Ojo6Ojo6Knz9PS0tLS0tLS0tLS0tS/qKqqqqqqqqqqqqqqqLDS0tLS0tLS0tLS0tLS0eDs6+vr6+vr6+vr6+vr6dnX19fX1tbW1tbW1tbW1dXV1dXV1dbW1tbV1dXV1dXV1dXV1dTU1NTV1dXV1dXW1tXV1dXV1dXV1dXU1NTU1NTU1NPUy5h2bGlKTl9NUlVNPjw8Nzs/Qz42Ojc+Pzs9Qj85PDk9Ozw6PD07PTs9Ozs9PD0+PT07QT08QUBBQT08Pzw7QEJDQURFPUFAQ0ZLS09GmNzV1dXV1dbW1tbW1tbW1tbW1tfX19fX19fX19fXzM5xVFhXV1dYWFhYWFhXUKHx6enp6enp6enq6unq6dXS0tLS0tLS0tLS0tLUxaqrq6urq6urq6urq6yoiIeHh4eHh4eHh4eHh41SEhgYGBgYGBgYGBgYFxpOWVdXV1dXV1dXV1dXU4WopKSkpKSkpKSkpKSjqM/T0tLS0tLS0tLS0tLUwamrq6urq6urq6urq6qx0dLS0tLS0tLS0tLS0tHf6+rq6urq6urq6urq6unZ19jX19fX19fX1tbW1tbW1tbW1tbW1tbW1tbV1dXV1dXV1dXV1dXV1dXV1dXW1tbW1tXV1dXV1dXV1dXU1NTU1NTU1NGcenFpSlRdT1JVTkQ+Pzs/QEA4Ojs4PDs8PD86Ozs4Ozk5Ozw7Ojw5Ozs8Ozo9PT0+PUE/Pj8/Pj08PT88PEFBQ0FERTw+QEVGSktNRpPc1dXV1tbW1tbW1tbW1tbW1tfX19fX19fX19fX183OeF5hYGBgYGFhYWFgYFqk7ufn5+fn5+fn5+fn5+bV0dLS0tLS0tLS0tLS08Wtrq6urq6urq6urq6vq46NjY2NjY2NjY2NjY2SXSInJycnJycoKCgoKCcpWmNiYWJhYmJiYmJiYl6MrKmpqampqampqampqazP09LS0tLS0tLT09PT1cKtr6+vr6+vr6+vr6+uttLS0tLS0tLS0tLS0tLS3+np6enp6enp6enp6enn2djY2NjY19fX19fX19fX19fX19bW1tfX19fW1tbW1tbV1dXV1dXV1dXV1dXV1tbW1tbW1tbW1tbV1dXV1dXU1NTU1NTWo3txZElbYE5OVU9AQT89REI+Oz06OTs6PT07PDs6OTg5OTs8Ozw8Ojo7PDo7QD08PTxAQTxBQTs7PEA/PD1CP0RDQ0U8PkJERkpMTEWN3NXV1tbW1tbW1tbW1tbX19fX19fX19fY2NjY2NjNzcfFxcXFxcXFxcXFxcXEy9DPz8/Pz8/Pz9DQ0NDQz87Ozs7Ozs7Ozs/Oz8/NzMzMzMzMzMzMzMzMzMvJycrKysrKysrKysrKysfCw8PExMTExcXFxsbGxsvMy8zLzMzNzMzMzMzLz9HR0tLS0tLS0tLS0tLS1NXV1dXV1dXV1NPT09TT0tLS0tLS0tLS0tLT09LV1NTV1dXV1dXW1dbW1tjY2NnZ2dnZ2dnZ2dnZ2djY2NjY2NjY2NjY2NfX19fX19fX1tfX19fX19bW1tbW1tbW1tXV1dXV1dXV1dbV1dbW1tbW1tbW1tXV1dXV1dTU1NTU169/cF5GXmJQUVdOR0ZDQ0lBPz07PDo8OEBCPD04Ojo4OTg7Pzs8PDs7PDw8PD87PD46Pj44PkI8Pj1BPjw+QkBERUNAPD5APkNJSUtEh9zV1tbW1tbW1tbW1tbX19fX19fX19jY2NjY2NjYzs3Pz8/Pz8/Pz8/Pz9PPz87MzczP09LSzs3P0s7Ozs7Ozs7O09TQztHU1NPOztPTz8/Pz8/Pz8/Pz8/Pz8/P0NDQ0NDR0dHR0dHS09PU1NTU1dXV1tbW1tfW1tbX1tfX19fX19fX19bW1tbW1tbW1tbW1tbW1tXV1dXV1dXV1dTU1NTU1NbV1tbW1tbW1tbW19bW1tbW1tbX19fX19fX19fX19jY2NjY2NjY2NnZ2dnZ2dnZ2djY2NjY2NjY2NjY2NjX19fX19jY19fX1tbW1tbW1tbW1tbW1tbW1dbW1dbW1tbW1tbW1tbW1tXV1dXV1NTV1di4gm9XSl9jUlFaS0hBQTxCPT07Oj4+PD4/PT0/Nzk6OTk3OD48PD47Ozw7PDs/PT0+OTs7OT0+P0A+QD07OkI/QkNCPz0+QD5CRUdKQoDc1tbW1tbW1tbW19fX19fX19fX2NjY2NjY2NjY2M7Ozs7Ozs7Nzc3Nzsqfys3Nzc3QuYOEi8fTwJrLz87Ozs7O0KaSxdStg4OVz9KkodDOzs7Ozs7Ozs7Ozs7Oz8/Pz8/P0NDQ0NDQ0NDR0dHR0tLT09PU1NTU1NTV1dXV1dXV1dXV1dXV1dXV1dXW1tbV1dXV1dbW1tbV1dXV1dXV1NTU1NXV1dXV1dXV1dXW1tbW1tbW1tbX19fX19fX19fY2NjY2NjY2NjY2NnZ2dnZ2dnZ2dnZ2dnY2NjY2NjY2NjY2NjY2NjY2NfX19fX1tbW1tbW1tbW1tbW1tXV1tbW1tbW1tbW1tbW1tbW1dXV1dXV1dXYwIBuVU9gY1dZW0xMQ0A9PTs9Ojw+Qj5CQ0A9Ojg5ODo6Ojc7Pz4/PDw7PDo5Pzw8PTg5PD9BPj09PUFAPTtBQkBCQz47QD9BQUlHSkF629bW1tbW1tbX19fX19fX19jY2NjY2NnZ2djY2dnOzs7Ozs7Ozs7OzdKpj63Rzs7Ozpu3tqSiwJOerNPOzs7O0qqdrJXDm7y4mbSzn6Gp0s7Ozs7Ozs7Ozs7Pz8/Pz8/Pz9DQ0NHR0dHR0dHS0tLT09TU1NTU1dXV1dXV1dXV1dXV1dXV1dXV1dXW1tbW1tXV1dbW1tbW1tXV1dXV1dXU1dXV1dXV1dXW1tbW1tbW1tbW1tfX19fX19jX19fY2NjY2NjY2djY2dnZ2dnZ2dnZ2dnZ2dnZ2djY2NjY2NjY2dnY2NjZ2NjY19fX19fX19bW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tXV1dXV1dXV18h/b1pTYWVeXVxPSkQ9QD8+Ozc6Pjk/RD5BOTg3ODk7Ozw4OT89PTw9PD47OkE7OTs5OzxDQDw7PT5AQT49QkQ/QkM9PT8+Pz5ISUg/ddrW1tbX19fX19fX19fX2NjY2NjZ2dnZ2dnZ2dnZzs7Ozs7Ozs7Ozs/Inrym0tDQzsqgl36Cw6abr6fUz8/P0MmXmYWmn6iOgI3FnZiVnMjQzs7Ozs7Ozs7Oz8/Pz8/Pz8/Q0NDR0dHR0dLS0tPT09TU1dXV1dXV1dXV1dXV1dbV1dXV1dXV1tbW1tbW1tbV1dXV1dXW1tbV1dXV1dXV1dXV1dXW1tbW1tbW1tbW1tbW1tfX19fX19jY2NjY2NjY2NjY2NjZ2dnZ2dna2dnZ2dnZ2dnZ2dnZ2djY2NjY2NnZ2dnZ2dnY2NjY2NfX19fX19fX19bW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1dbV1dXV1dfNiHNdWGloXl9gT0lGOkFAPj88PTo2P0JAQzo2NDc6Ozo8Ojk+PD49PTs/PTxBPjw8Ojw8PTw6PEA9QEI+PkFCPUNDPT0+Oz9BRUtIQHDZ1tbX19fX19fX19fY2NjY2NjZ2dnZ2dnZ2dnZ2c/Pz8/Pz87Ozs7SrKWnqdXAvNLHnY+ey9PJipmq1M/Pz8/RpLC9moyjiazWupiinbCy08/Pz8/Pz8/Pz8/Pz8/Pz8/Q0NDQ0dHS0tLS09PT1NTU1dXV1dXV1dbW1tbW1dbW1tbW1tbV1tbW1tbW1tbW1dXV1dXV1dXW1dXV1dXV1dXV1dXW1tbW1tbW1tfX19fX19fX19fX19jY2NjY2NjY2NjY2NnZ2dnZ2dnZ2tnZ2dnZ2dnZ2dnZ2dnZ2dnY2dnZ2dnZ2dnZ2dnY2NjY19fX19fX19fX19bW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbV1dXW0JB1W1tqaWFeXVNOSTxDQEE+QD46OEZBP0M6NzQ5Ojo5Ozs4Oz0/Pj49QT08P0A9Pjw8PDw8Oj1AQD8/PT5CQD9AQkA8QD0+QUVLRz9r19fX19fX19fX2NjY2NjY2NjZ2dnZ2dnZ2dnZ2tnPz8/Pz8/Pz8/QzJ2Nl6zQmpfKxZ6ynpbN1q2ZqtTPz8/Pz9DVuZuLq62bpbKZlq+zqtXQ0M/Pz8/Pz8/Pz8/Pz8/P0NDQ0dHS0tLT09PT1NTU1NXV1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbV1dXV1dXV1dXV1dXV1dXV1dXW1tbW1tbW19fX19fX19fX19fY19fY2NjY2NjY2NjY2NjZ2dnZ2dnZ2drZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2djY2NjY2NfX19fX19fW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1dXV1tKUcl5ea2tqZV1PTEc/RENDQDo9OzxCPD49OTY0Ojk5Ojo5Nzs/QDs8PUA8PEE+PD07PTw/PDo8Q0A+PTs9QD5CPkBBPkA9QD9GSUQ/ZtXX19fX19fY2NjY2NjY2NnZ2dna2tra2tra2traz8/Pz8/Pz8/P07GigJuvyaCjv8qcpYynrdiqmarUz8/Pz8/Q0ZqgpaSclqeQmoSdk6TV0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NHR0tLT09PT1NTU1NXV1dbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1dXV1dXV1dbW1tXW1tbW1tbV1tbW1tbX19fX19fX19fX19fX2NjY2NjY2NjY2NjY2NjY2dnZ2dnZ2dna2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2djZ2djY2NjY2NfX19fX19bW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbSk3BgXnBoZmVaUUhHQkVDQEA3Ojo8Pjo8OTc2NTk6Njo8Ozc8QEA8Ojo9Ojw/Pj08OUA8PDo6OT9APj08PUBBQz9APz5BOz9ARkpCP2LS2NfX2NjY2NjY2NjY2dnZ2dnZ2tra29vb29vb28/Pz8/Pz8/P0M6fkGyclteqo9PSrqa1mJ/Vqpmq1M/Q0NDQ1aekoNWktKuff6CphZmk1dHR0NDQ0dHQ0NDQ0NDQ0NDQ0NHR0tLT09PT1NTU1dXV1dbW1tbX19bW1tbW1tbW1tbX1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tfW1tfX19jY2NfX19fX2NjY2NjY2NjY2NnZ2dnZ2dnZ2dnZ2dna2tnZ2dnZ2dnZ2dnZ2dnZ2dnZ2djY2dnZ2dnZ2dnZ2dnZ2NjY2NjY2NjX19fX1tbW1tbW1tbW1tbW1tbX19fX19fW1tbW1tbX0pNuYFxxZGdkWlVKQENGQ0FCODs/PD07PDw4NTU4OTY4Ozo5PDo+Pzw9PTk8Pz49Ojo+OTw6Ojg+Pzw9PTw+QEFDQT48PDpCRERKRkJd0NnX19jY2NjY2NjY2dnZ2dna2trb29vb29vb29vPz8/Pz8/Pz9G9n8O31pfA09HQ0srSzZeb1KqZq9XRz9DQ0sCdosjXytnBnIC8raaYr9bR0dHR0dHR0dHR0NDR0dHR0dHR0tLT09PU1NTV1dXV1tbW1tfX19fX19bW1tbW1tfX19fW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW19fX19fY2NjY2NjY2NjY2NjY2djZ2dnZ2dnZ2dnZ2dnZ2drZ2tnZ2dnZ2dnZ2dnZ2dnZ2djY2NjY2NjZ2dnZ2dnZ2dnZ2dnY2NjY2NjY2NfX19fX19fX19fW1tfX1tbX19fX19fX19fX19bW19GRbF1cb2doYl1PRkBISUdFQDw8Pj48PT48NzU2Ojk2OTs6Ojs4QD86PDw5PD49Ozs6Pzk/Ojs5PT49Pjw7PTxAQ0I/Pz47Q0ZGR0hEWc3a2NjY2NjZ2dnZ2dnZ2dna2trb29vb29vb29vb0NDQz8/Pz8/Pz5V+e6WS1KKa08ySl6ObodirmavV0pem09SkoI+5w4+hn5+ZqJaYm7vV0dHR0dHR0dHR0dHR0dHR0tLS0tLS09PU1NTV1dXV1tbW19fX19fX19fX19fX19fX19fX1tbW1tbW1tbW1tbX19bW1tbW1tbW1tbW1tbW1tbW1tbW1tfX19fY2NjY2NjY2NjY2NjY2dnZ2dnZ2dnZ2dnZ2dnZ2tra2tra2tnZ2dnZ2dnZ2dnZ2djY2NjY2NjZ2dnZ2tnZ2dnZ2dnZ2djY2NjY2NjY2NjX19fX19fX19fX19fX19fX19fX19fX19fX1tfPjGRWXnBrXGBgTkVITUlJT0M+OkI9PUBCOzU1Nzw6Nzo7Ojo7OT09OTo6OT0+Pz07OT47PDo8Ozk+PD47PD0+QENCPz5BPEFDR0ZGRVXJ29jY2NnZ2dnZ2dnZ2dra2tvb29vb29zc3Nzc3NDQ0NDQ0M/Pz9DR1aeZrcmjqL7KnbGdo7XZqZup2LirocjGpr2Vk5Ooq6Kfw6CrpJzR09LS0tLS0tLS0tLR0dHS0tLT0tPT09PU1NTV1dbW1tbX19fX19fX19fX19fX19fX19fX19bW1tbW1tfX19fX19fW1tbW1tbW1tbX19fW1tbW1tbW1tbX19fX2NjY2NjY2NnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dra2tra2tra2trZ2dnZ2dnZ2dnZ2djY2NjY2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnY2dnY2NjY2NjX19fX19fX19fX19fX19fY2NfX19fX19fYzYZdV2JvZE9dVEtIRlNRS0xBPj1EPD9DRj01NTc7OTY6Ozo8PTo7Pzo6OTg6PT0/Pjs/Oz49Ojs5Pjs9PD0+QURCQD8+PzxAQUVHRURSxdvY2dnZ2dnZ2dnZ2tra2tvb29vb3Nzc3Nzc3NzQ0NDQ0NDQ0NDQ0NO5gL3Tm5bP1LWLkZ/T1LyBu9TOlKDUyo6Tl5Cqq42PrNjCj4281dLS0tLS0tLS0tLS0tLS0tLT09PT09PU1NXV1dbW1tfX19fX19fY2NjY19fX19fX19fX19fX19fW1tbX19fX19fW1tbW1tbW1tbW19fX1tbW1tbW1tbX19fX19jY2NjY2NnZ2dnZ2dnZ2dnZ2tnZ2tra2tra2tra29ra2tra2tnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2NjY2NjX19fX19fX19fY2NjY2NjY2NjY2NfX2ct+WlVqaltMX01KTEpVTEZCPD0/R0ZHS0g9NjU3Ojk3OTo7Ojw9OT45OTo4Oz0+PkE+PTk8PDo9Pj46PTk5Oj9FQUA+PT8/QkBHRURFUMHc2dnZ2dnZ2dna2trb29vb29vb3Nzc3Nzc3dzc0NDQ0NDQ0NDQ0NDQ0cHR0crI0tDUxLjS0tHSwtLQ08fM0tTCr7Cz0NbAv9bS1cXE1dLS0tLS09PT09PT09LS0tPT09PU1NTU1NXV1dbW1tfX19fX19fX2NjY2NjX19fX2NfX19fX19fX19fX19fX19fX1tbW1tbW1tbW1tfX1tbW1tbW1tbW19fX19fY2NjY2NjY2dnZ2dnZ2dnZ2dra2tra2tra2tra29va2tra2tra2dnZ2dna2tnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dna2tnZ2dnZ2dnZ2djY2NjX19fX19fY2NjY2NjY2NjY2NjY19rHd1xSZ2laTlpOTFBRV0VKPz89P0FFTExBPjc3NTs4ODk5Ojs8Pjw+ODo6OTs+P0A9Pj46NTo6Oz0/Ojs5Ojw+QkJAPz8/P0FCR0RDRE683dnZ2dnZ2dna2tvb29vb29vb3Nzc3Nzc3d3d3dDR0dDQ0NDQ0NDQ0NDS0NDR0dDQ0dPU0dHR0dPR0dHS0tHR1NbW1tLS1dXT09PU1NLS0tPT09PT09PT09PT09PT09PU1NTU1dXV1dbW1tfX19fX2NjY2NjY2NjY2NfX19jY19fX19fX19fX19fX19fX19fX1tbW1tbW1tbX19bW1tbW1tbW1tfX19fX2NjY2NjY2NnZ2dna2tra2tra2tra2tra2tra2tvb2tra2tra2trZ2tra2tra2tra2tra2tnZ2dnZ2dnZ2dnZ2trZ2tra29ra2trZ2dnZ2dnZ2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjbwXNYVWlrU0xSTlBSWVRGSTw+Qz9BQkVLPj43ODY5Njc4OTk7Oz0/QDw9ODk7Ozs/Pjw8OTU6PT47OTk7PD8/P0JCQT1BPUBBQkZCQkJLtd7Z2dra2tra2tvb29vb29vc3Nzc3Nzd3d3d3d3R0dHR0dHR0dHR0dDQ0NDQ0NDQ0dHR0dHR0dHR0dHR0dHS0tLS0tLS0tPT09PT09PT09PT09PT09TU1NPT1NTU1NTU1NXV1dXV1dXW1tbX19fX2NjY2NjY2NjY2NjY19fY2NjX19fX19fX19fX19fX19fX19fX19fW1tbX19fX1tbW1tbW1tbX19fX19jY2NjY2NnZ2dna2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tnZ2dnZ2dnZ2NjY2NjY2NnZ2dnZ2dnZ2NjY2NjY3LxvVFRsbExLUkpUUlVLRkQ6PkdEREFERjw/ODk6OTY5OTo3PD07PkA9PTc5Ojs5Pjs5OTY2Oj1AQT47PDk6Pj9DQT4/Qj0+QkNFQkFCSrDe2dra2tvb29vb29vb29vc3Nzc3Nzd3d3d3d3d0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0tLS0tLS0tLS0tLS0tLS0tPT09PT09PT09PT09PT1NTU1NTU1NTU1NTU1dXV1dXV1tbW1tbW19fX19jY2NjY2NjY2NjY2NjY2NjY2NjY19fX19fX19fX19fX19fX19fX19fX19fX19fW1tbW1tfW19fX19jY2NjY2NjZ2dnZ2dra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2trZ2dnZ2dnZ2djZ2dnZ2dnZ2dnZ2dnZ2dnY2Ny2a1NbcGtLVVdSXFFXSEQ+PEJKRT1ISj89PDc4ODo1OTg5Njs+PD1APDw1OTk8Oj87OTk0ODw9PUFBPD47Ojw+QD89PkE9PUNGR0I/Qkmq39ra29vb29vb29vb3Nzc3Nzc3N3d3d3d3d3d3dHR0dHR0dHR0dHR0dHR0dHR0dHS0M/U0M7P0tLT0tLS0tLS0tLS0tPT09TU1NTU1NPU1NTU1NTU1NTU1NTU1NTV1dXV1dXV1dbW1tbW19fX19fY2NjY2NjY2NjY2NjY2NjY2NjY2NjX19fX19fX19jY2NfX19fX19fX19fX19fX19fX19fX19fX19jY2NjY2NjY2dnZ2dra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tvb29va2tra2tra2tra2tra2tra2tnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dndsGRTYXJfT1pUV19RUkdCPUVJTEFBTEQ/Pzs5ODg5Mzg2ODY5Pj0+Pz06Njo7Pjs9PTo5Njg6PTtAQDxAPz0/P0I+PD48PEJFSElCPkNJpODa29vb29vb3Nzc3Nzc3Nzc3N3d3d3d3d3d3t7S0tLS0tLS0tLS0dHR0dHR0dPT0bm7zLqbnLrQyNPT0tLS09PT09PT09PU1NTU1NTU1NTU1NTU1dXV1dXV1dXV1dXV1dbW1tbW1tbX19fX19fY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjX19fX19fX19fX19fX19fX19fX19jY2NjY2NjY2NjZ2dra2tra2tra2tra2tra2tra2tra2tra29va2tra29va2tvb2tra2tra2tra2tra2trb29vb29va2tra2tra2tra2tra2tra2tra2tnZ2dnZ2trZ2dnZ2dnZ2dnZ2dnZ3qpfVWBuW1VZUVpeT0xHQ0ZNSUZEREo7QUE7PDg4NjQ4Njk4Nzw/QT89Ojc8Pz48Pz87OjY4OD09QEE9QD5BQD1AOjs6Pj1BRUdKQkBDR57h29vb29vc3Nzc3Nzc3Nzc3d3d3d3d3d7e3t7e0tLS0tLS0tLS0tLS0tLS0tO+wMqaoKKViJGeqpOpz9TT09PT09PT09PU1NTU1NTU1NTU1NTV1dXV1dXV1dXV1dXV1tbW1tbW1tbX19fX19fY2NjY2NnZ2dnZ2dnZ2dnZ2djY2djY2NjY2NjY2NjY2NjY2NjY2NjX19fX19fX19fX19fX19fX19fY2NjY2NjY2NjZ2dna2tra2tra2tra2tra2tra2tra29vb29vb29vb29vb29vb29vb29ra2tra2tra2tra2tvb29vb29va29vb29vb29va2tra2tra2tra2tra2tra2trZ2dnZ2dnZ2dnZ2d6iXFVeblheXU5aUFROQ0NMSUlJRkpEPEJBPDs4Nzc3OTc3OTk9P0E/PDo5QD88PkI/Ojg3NzY9Pz9APUBBPz88PTs7OD48P0VJSEE/Q0aX4dvb29zc3Nzc3Nzc3N3d3d3d3d3d3t7e3t7e3tPT09PT0tLS0tLS0tLS0tTIlZyum5m1iX2TjIKBhMTV09PT09PT09PU1NTU1dXV1dXV1dXV1dXV1dXV1dXV1tbW1tbW1tbW1tfX19fX19fX2NjY2NjY2dnZ2dnZ2dnZ2dnZ2dnZ2NjY2NjY2NjY2NjY2NjY2NjY2NfX19fX19fX19fX19fX19fX2NjY2NjY2NjY2dnZ2dnZ2dna2tra2tra2tra2tra29vb29vb29vb29vb29vb29vb29vb2tra2tra2tra2tvb29vb29vb2tvb29vb29vb2tra2tra2tra2tra2tra2tra2tra2tra2tnZ2dndmlpYYW5ZYVdPV01QRUJETElNS0ZJRT5CRDk4ODY4OTc1Njk4PT1BPjo4OT4+PD9APzw1Njc2PD4/PjtAQEA/Pj4/Pjs/PkFCRkdCQENIkeLb29zc3Nzc3d3d3d3d3d3d3d7e3t7e3t7f39/U09PT09PT09PT09LS0tLTz6h+kayPko6MhoCIiYSQo8rU09PT09PU1NTU1dXV1dXV1dXV1dXV1dbW1tbW1tbW1tbW1tbW19fX19fX19fX2NjY2NjY2dnZ2dnZ2dnZ2dnZ2dnZ2dnY2NjY2NjY19jY2NjY2NjY2NjY2NjX19fX19fX19fX19fY2NjY2NjY2NjY2NnZ2dnZ2dna2tra2tra2tra2tra29vb29vb29vb29vb29vb29vb29vb29ra2tra2tra2tvb29vb29vb29vb29vb29vb29va2tra2tra2tra2tra29vb29ra2tra2tra2tna3JJaWWNuWlpSVV5QTDxAR05IUklIRT47SEY4OTc1Nzg3NTg5ODs+Pj07ODlBPj1AP0E+NzU5Njs+QUI/P0BAQUI/Pj8+QUBEQUZIQj9FSozi3Nzc3Nzc3d3d3d3d3d3e3t7e3t7f39/f39/f1NTU09PT09PT09PT09PWtaWaiIuQhYCFi4iBg4qLf4bC1tTU1NTU1NTV1dXV1dXV1dXV1dXW1tbW1tbW1tbX19fX19fX19fX2NjY2NjY2NjY2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2djY2NjY2NjY2NjY2NjY2NjY2NjY2NjX19fX19fX19fY2NjY2NjY2NjY2dnZ2dna2dra2tra2tra2tra2tra2tvb29vb29vb29vb29vb29vb29vb29vb29ra2tra2trb29vb29vb29vb29vb29vb29vb29vb2tra2tra2tra29vb29vb29vb29vb2tra29uIWltnalxYTFpfVkg6TEhMSkpDRUVDQExINzo3Njc4ODU4Nzg5PDw7Ozk4QD89Pj8/PDY3PDQ3P0JCQUBAPz8/QT09P0A+QEBGRT09REuI4tzc3Nzd3d3d3d7e3t7e3t7e3t/f39/f39/f39TU1NTU1NPT09PT09PUxZKCg4WGfYGCfXx5foGCg36k29bU1NTU1NTV1dXV1dXV1tbV1tbW1tbW1tfX19fX19fX19fX19fX19jY2NjY2NjZ2dnZ2dnZ2dna2tnZ2dnZ2dnZ2dnY2NnY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjX19fX19fY2NjY2NjY2NjY2dnZ2dna2tra2tra2tra2tra29vb29vb29vb29vc3Nzc3Nvb29vb29vb29vb29vb2tra2tra29vb29zb29zb29vb29vb29vb29vb29vb29va2tvb29vb29vb29vb29vb29vb2tvZgFpebWhaU0ldW1hKRE1ISlNMR0ZBQD9KQjg7NjY5OTc1ODY4Ozo7Ojw5OD09O0A9Ozo2NTw3Oz1CQEFBPD49QEE9PEA/Pz5CREU+PERLg+Lc3d3d3d3d3t7e3t7e3t7f39/f39/f39/f39/V1dTU1NTU1NPT09PT2LKEkKh9g3l2hIh/e3d5gn5+i67A1dTU1NXV1dXV1tbW1tbW1tbW1tbW1tfX19fX19fY2NjY2NjY2NjY2NjY2NjZ2dnZ2dnZ2dna2trZ2dnZ2dnZ2dnY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2dnZ2dnZ2tra2tra2trb2tra2tvb29vb29vb29vc3Nzc3Nzc29vb29vb29vb29vb29va2trb29vb29zc3Nzc3Nvb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vc1nlcWmxmWFJPYFFSQUhHSkZYTEZAQENDSz87Ozc4ODc2NTc2ODo5PDw6PTs/PTs9Pjw7ODg8OT0/QkFCQzw8P0FCPj1BQkNCREVDQDtDTH3h3d3d3d3e3t7e3t7e39/f39/f39/f39/g4ODg1dXV1NXU1NTU1NPU0ruen3WKeXuIgICChYGDcnOAhYOMrNfV1NXV1dXW1tbW1tbW1tbW1tbW19fX19fX2NjY2NjY2NjY2NjZ2dnZ2dnZ2dnY2NnZ2dna2tra2trZ2dnZ2dnZ2djY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2dnZ2dna2tra2tra29vb29ra2trb3Nzc3Nzc29zc3Nzc3Nzc3Nzb29vb29vb29vb29rb29vb29vb29zc3Nzc3Nzc3Nvb29zc3Nzc3Nvb29vb29vb29vb29vc3Nzc3Nzc3Nvb29vb3dByXV9wZVdLUGNPS0JHQ0pIS0ZBPEE9SFBBOjo3Nzg3Njc4Nzw6OD09PD47QD88Pz07Ojs5Ojk8QEJAQkNAPUFAPz1AQkNDQUBAP0A7RU144N3d3d7e3t/f39/f39/f39/f3+Dg4ODg4ODg4NXV1dXV1dXV1NXU18h4i4V8goh6g4SBfoKCc2l0hYuGkJ3U1tXU1dbW1tbW1tbW1tbW19fX19fX19jY2NjY2NjY2NnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dra2tra2tra2dnZ2dnZ2dnY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2dnZ2dna2tra2tra2tra2tvb2tvb3Nzc3Nzc3Nvc3Nzc3Nzc3Nzc29zb29vb29vb29vb29vb29vb29vc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc29vb297KalxjcWVST1heSz9HTElPS0VAPkFCP0lPPjk6NzY7NzY6Ozc7Ojg6PDw+Oz09Oz48Ojs4OTo4OUFCQkFAQDtAQj06PkFCQz8+PT4/PUZOdN/e3t7e3t7f39/f39/f4ODg4ODg4ODg4ODg4OHV1dXV1dXV1dXV1s6dhpl+f5OTin+CgXx9gnNxm4mAgoOJwNnat7TQ19bW1tbX19fX19fX19fX2NjY2NjY2NjY2NjZ2dnZ2dnZ2dnZ2tnZ2dnZ2dra2tra2tra2trZ2dnZ2dnZ2dnZ2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NnZ2dna2tra2tra2tra2tra29vb3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nvb29vb29vb29vb29vb29vc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3NvfwGNaW21gVlBTU0pETEhNSEk8PkFEQ0ZORDw8OTc5OjY4Ozk3PDk4OTw9OzlAPjpBPzw3NTc7ODpAQUVBPz45PUI/Oz1CQkI6Pj07PT5GTnHe3t7e3t/f39/f39/g4ODg4ODg4ODg4OHh4eHh1tbW1tbW1tbV1tjLioCHhYOXjHh7e3lvfYF1a3ebdHZ7eInHxpiMrdjZ19fX19fX19fY2NjY2NjY2NjY2NjY2NjY2dnZ2drZ2dna2tra2tra2tra2tra2tra2tra2dnZ2dnZ2dnZ2dnZ2dnZ2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NnZ2dnZ2dnZ2dna2tra2tra2tra2tra29vb3Nzc3dzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nvb29vb29zb29vb3Nzc3Nzc3Nzd3dzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3d3d3d3d3Nzc3Nzc4LdjV1lrYlJNVVFMSktGS0ZDQD5CQT9FTT4+PTg5OTo3OTo3NT03Nzo+PDs7Qjw5Pz05NjY4PTk6QEJGQD49PEBCREA9QD9DO0A9PD4/Rk9t3N/e3t/f3+Dg4ODg4ODg4ODg4OHh4eHh4eHh4dbW1tbW1tbW1tfVrYZ6d32rn3l4entzdH+Dfm9xe3l6c3t2k4qFgImkzdnY19fX2NjY2NjY2NjY2NjY2NjY2NjY2NnZ2dna2tna2tra2tra2tra2tra2tra2tra2tnZ2dnZ2dnZ2dnZ2dnZ2dnZ2djY2NjY2NjY2NjY2NjY2NjY2NjY2dnZ2dnZ2dnZ2dra2tra2tra2tra29vb29vc3Nzc3N3d3d3c3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc29vb29vc3Nzb3Nzc3Nzc3N3d3d3d3d3d3dzc3Nzc3Nzd3d3c3Nzc3Nzc3N3d3d3d3d3d3d3d3dzc3OGtYVtebGJSTVZMTUdLS0RGQkI7QT08RUxDQT44Ojk6Nzc5NjY6NTs+QDs9Oz89PD89Ojk5Ojw5PEVDRkA/PkBDQkQ9OT0/QT1CPz1APkdPadvf3t/f3+Dg4ODg4ODh4eHh4eHh4eHh4eHi4uLW1tbW1tbW1tfQmH+Qh4N9eoN2e3Vzenl6kKqmd3JyfoeHh4CAfoKEhJHJzNnX19jY2NjY2NjY2NjY2NjY2NjY2NnZ2dnZ2tra2tra2tra2tra29va2tra2tra2tra2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2djZ2dnZ2dnZ2djY2NnZ2dnZ2dnZ2dnZ2tra2tra2tra2tra29vb29vb3Nzc3N3d3d3d3d3d3d3d3d3d3d3c3Nzc3Nzc3Nzb29vb3Nzc3Nzc3Nzc3Nzd3d3d3d3d3d3d3dzc3N3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3NzhpV9UYm1iUE9TSUhHRkpJSUJBPkJCPEVFREA+ODo4Ozc3Ojc4ODY+Pz07PDk9PDo+PTs6Njc7NjpEQUY+Pz8/PkNBPzs9PT47REM/PjxIT2fZ4N/f3+Dg4ODg4eHh4eHh4eHh4eLi4uLi4uLi1tbW1tbW19jYyH52doN+fnR2eIaCenl1d5yhu6GEgoCAfoeKinx/gYaMnKjO2NjY2NjY2NjY2djY2NjZ2djY2NjY2dnZ2dra2tra2trb29rb29rb2tra2tra2tra2tnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dna2tra2tra2tra2tra2trb29vb29zc3Nzc3N3d3d3d3d3d3d3d3d3d3d3d3dzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3e3t7e3t7e3d3d3d3c35pbT2drXFBRUElDT0pLR0xHSkJAP0FHREBBPDg8ODg1ODk3Njc3QEA/Ozw5Pj04PTw8Ojc4PTk/RENGPkE/QkBDPzw6Pj0/PkVEPz07S1Fj1+Hf4ODg4ODh4eHh4eHh4uLi4uLi4uLi4uLj49bW1tbW19XB3LRueHJze3B6eXaFiIR7eH2AgZiljH98fnuRhZaLhoGDgY6Rvd3Z2NjY2NjZ2dnZ2dnZ2dnZ2dnY2dnZ2dna2tra2trb29va2tva2tra2trb29ra2tra2tnZ2dnZ2dnZ2dnZ2dna2trZ2dnZ2dra2tra2tnZ2dnZ2dna2tra2tra2tra2tra2tra2trb29vc3Nzc3Nzc3N3d3d3d3d3d3d3d3d3d3d3d3d3d3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3e3t7e3t7e3t7e3t7e3t7e3t3d3d6NWFdobllQUUtISlNJTUhNSUtBQz9DRkJBRDo6PDg2NDg4NzY2Nj8+Pjo8OTw7Oj09PDw4Ozw8RERERT4/PkI+Qj84PT8/Q0NCQEE+O0xUY9Xh3+Dg4OHh4eHh4eLi4uLi4uLi4uLi4uPj4+PW1tbW1teslLZ6eHJvd5V7dHuLgHh1bn6Fg3t/hYhyfH2bnI6JioJ+g32Hk5rH1NjY2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dna2tra2trb29vb29vb29vb2tra2tra2tra2tra2tnZ2dnZ2dnZ2dna2tra2tra2tra2tra2tra2tra2tra2tra2trb2tra2tra2tra2trb29vc3Nzc3Nzc3Nzd3d3d3d3d3d3d3d3d3d3d3d3d3d3c3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3N3d3d3d3d3d3d3d3d3d3d3d3d3e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3d7Zf1lgaGxcUUtHR09LTk5PTURGQkg/Q0hEREA6Ozs4NzU3Nzc4NThAPkA7PDk8Ozw+Ojk7OTk7OUZERUI8QD4/PEBDOz5AP0A/Qj8+OjtKVWPV4eDg4eHh4eHi4uLi4uLi4uLi4uPj4+Pj4+Pj1tbX19vKhYR3cXJubniVhHt4hH95dnB4c3eLkY6CdnN9ioaId3d1d4ODfIiIk8Pb2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dra2trb2tvb29vb29vb29vb29rb2tra2tra2tra2tra2tnZ2dnZ2dna2tra2tra2tra2trb2tra2tra2tra2tra2trb29vb29ra2trb29vb29vb3Nzc3Nzc3Nzd3d3d3d3d3d3d3d3d3d3d3d7e3d3d3d3c3Nzc3Nzc3Nzc3Nzc3Nzc3d3d3d3d3d3d3d3d3d3d3d3d3d7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7f0nVZaGlqVk5KSE1OR01EUElGSD9FPUZMREM+Ozs8OTc3OTY2OTU4Pj4/PTs8QDs9PDo3Ozc5OThHREVCPUE9Qj8+QDw/QUE/QEJAPjs8S1Ri1OLg4eHh4eLi4uLi4uLi4+Pj4+Pj4+Pj4+Pj49fX19fEknuJf29sbnV2foSBg4qGfnVybWVtiIaKjoR7c4OHint4e4OPj4GEioqxztrZ2dnZ2dnZ2dna2tra2tra2tra2trb29vb29zc3Nzb29vb29vb29va2tra2tra2tra2tra2tra2tra2tra2tra2tra2tvb29va2tra2tra2tvb2tvb29vb29vb29vb29vb29vb29zc3Nzc3Nzc3d3d3d3d3d3d3d3d3d3d3t7e3t3d3d3d3d3d3d3d3dzc3Nzc3Nzc3d3d3d3d3d3e3t7e3t7e3t7e3t7e3t7e3t7e3t7f39/f39/f39/f39/f3t7e4clsW2pqalNOR0hOT0VIRk1JSUA7RD5ISUA9PDo6Ojg2ODo3Nzk0OD08PT07ODw8PDw4Njc4OTo6RUJFQT9APEI/Q0M+PkNEQUBAP0A8PUtRYdPj4OHh4uLi4uLi4uPj4+Pj4+Pj4+Pj4+Pj5OTX19fZqXaFfnx3bHB3eXh8jH2KhYB3anN0d3p9bot7fnl6foR/gIGDfnh8foeGlrbT2tnZ2dra2tra2tra2tra2tra2tvb29vb3Nzc3Nzc3Nvb29vb29vb29ra2tra2tra2tra2tra2tra2tra2tra29ra29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb3Nzc3Nzc3Nzc3d3d3d3d3d3d3d3d3d3d3d7e3t7d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3t7e3t7e3t7e3t7e3t7e3t7e3t7e39/f39/f39/f39/f39/f39/e3uO9amFpa2lRTkZNTEtKWE1OR0FAQE9BQz9AOzw4OTk5Njg2NjY4NDs+PD07OTY6Ojk6OTU4OTg5OkJERj8+Pj5AQEBCPzxBQD88Pj9BOT5KT17S4+Hh4eLi4uLi4+Pj4+Pj4+Pj4+Pj4+Tk5OTk19fX2sqKhIB5c29tcXN1d4CUeHaAfHWHhXd1cnWgmXp7d3Z5doR0bWxue3iAmouTu9za2tra2tra2trb29vb29vb29vb29zc3Nzc3Nzc3Nzc3Nzc29vb29vb2tra2tra2tra2tra2tra2tra2tra29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vc3Nzc3Nzc3Nzc3d3d3d3d3d3d3d3d3d3d3d3e3t7e3t3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3t7e3t7e3t7e3t7e3t7e3t7e3t/f39/f39/f39/f39/f39/f39/f397js2lpbmloUFBPTExPUk9LU0Y/RURERD48PDg7ODc5OTU2ODY2NzM6Pjs+PTc6Pjk5OTk2Ojo4NzxDRUc/Pzs/PkA9PkE9Oz0+OUFAQDhBTlFc0OTh4eLi4uLj4+Pj4+Pj4+Pj4+Pk5OTk5OTk5NjY2NjauY6AenZ1bmpveHCBfWt0cnZ3hIV5h4d5lY55eXp1d3pza298gHx2fYh8gLLe2tra2tvb29vb29vb29vc3Nzc3Nzc3Nzc3dzc3Nzc3Nzc3Nzb29vb29rb29vb29ra2tra2tra2tra29va29vb29vb29vb29zc3Nzb29vb29vb29vb29vc3Nvb3Nzc3Nzc3Nzc3Nzc3Nzc3d3d3d3d3t7e3t7e3d7e3t3d3t7e3t7e3t7d3d3d3d3d3d3d3d3d3d3d3d3d3t7e3t7e3t7e3t7f39/f39/f39/f39/f39/f39/f4ODg4ODg4N/f39/f4qpqa2hrZFNQT0ZQVFJOSFJLPkREQ0I7Ozk6Ojg2Nzg1NjY4ODg0Oz88Pzw5PDw3Ozo6Nzo6Nzo9Q0JDPUE+Pzw5PT5BQDs8PDtFQD47Q05TXNDk4eLi4uLj4+Pj4+Pj4+Pj5OTk5OTk5OTk5OTY2NjZ1p5vdntveHh2cG50d3BwdHBzb36Jc3qGhY2EenNtcoB6hn1vg5OBdnx9g4a13drb29vc29vc3Nzc3Nzc3Nzc3Nzc3Nzc3d3d3Nzc3Nzc3Nzc3Nzb29vb29vb29vb29ra2tra2tvb29vb29vb3Nzc3Nzc3Nzc3Nzc3Nzc3Nvb29vb29vc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzd3d3d3d3d3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3d3d3d3d3d7e3t7e3t7e3t7e3t7f39/f39/f39/f39/f39/f39/g4ODg4ODg4ODg4ODg4N/f3+KgbWhma2ZVVlJHUFFOS0xMRUJIRUc9OD08Ojo3Nzg2Nzc2NTY3NDg+PD09Ojg6OD46Ozc4Nzc6Oj5DRDtDQj49OD1AQUM/Pjw+RTw+PUJNUF/S4+Hi4uLj4+Pj4+Pj4+Pk5OTk5OTk5OTk5OTk2NjY3MB2doCCfnp4eHBsdXlya399bHNvdGdoaYB/aWl4c2d+iYl4cIKGe3d9foWKvd3b3Nzc3Nzc3Nzc3Nzc3Nzc3d3c3Nzc3N3d3dzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nvb29vb29vb29vb3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzd3d3d3d3d3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7f39/f39/f39/f39/f39/f4ODg4ODg4ODg4ODg4ODg4ODg4ODflGttZm5mU1NJUFlUTEhGTkZGRUJGPTs+PDs5Nzc4NTc5NjQ1NzU4PDs9Pjo6OztAOTs7ODc6OTlAQkE8QUE/Pzk/QEJFQ0FAQEM7Oz1ES01g1uTi4uLi4+Pj4+Pj4+Pk5OTk5OTk5OTk5OTk5NnZ2tmYc3uqhJaCcnR1dn14aGx8d2h4d25rcHR5gIJ3dHyBhIJ9c3CAin94gn95g8je3Nzc3Nzc3Nzc3Nzd3d3d3d3d3d3d3d3d3N3d3dzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nvb29zc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3N3d3d3d3d3d3d3d3d3d3d3d3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e39/f39/f39/f4N/f39/f3+Dg4ODg4ODg4ODg4ODg4ODg4ODg4ODh24tubWdzY1lRTVVbV0hDSUZOS0dCRD8/Qjo7OjY2NzU2NzY0ODc2Ozw7Pj86PDk8Qjg3OTo6Ojk6QUFCQUJDQEE+PT9CQ0NEQUJGOTg9REpOYtjk4uLi4+Pj4+Pj5OTk5OTk5OTk5OTk5OTk5OXZ2drcqHGCtXiRfnNsem6EgXaCfWtoan+DeHZ8dX2FhXRmcHl9d316gIqFe318foC03tzc3Nzc3N3d3d3d3d3d3d3d3d3d3d3d3dzd3d3d3dzc3N3c3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzd3Nzd3d3d3d3d3Nzc3Nzc3Nzc3Nzc3N3d3d3d3d3d3d3d3d3d3d3d3d3d3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e397e3t7e39/f39/f39/f39/g4ODg4ODg4ODg4ODg4ODg4ODg4ODg4eDg4ODg4ODg4tiFb3FrdWFWT1VVXE9ETUY+SkdKRUQ8P0I6PDk4Njg0NTY3NDc2NDk7Ozw7OD47PEE4ODo9OD04Oj09QEBAP0FCP0A+QENCQ0FBRTc2O0RMTmPa5OLi4+Pj4+Pj5OTk5OTk5OTk5OTk5OTk5OXl29ra3Z5sbnNxhY1ybXBuf391hH5rcnZ2enN4gXhzb3VwbWt2fHmFiIB/f392coODsd/c3Nzc3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3Nzd3d3c3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3N3d3d3d3d3d3d3d3d3d3d3d3d3c3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e39/f39/f39/f39/f39/f39/f39/f39/f39/f4ODg4ODg4ODg4ODg4ODg4ODg4OHh4eDg4eHh4eHh4eHh4OLXhW1xb3ZeUldTWlpRSkhDQFFAQkQ8OT9BOjw5NzU3NDU2NjQ3NTY9PDo9PTk+OjxAODo6PDY7OTs+PUJCQjtBQkBDQEBEREM8PUA3OjxFS01l3OPi4uPj4+Pj5OTk5OTk5OTk5OTk5OXl5eXl5dPOxsB+cWxveHt2b3VuanNzbZKGeG50dG5vdIZ/b2twboJ0bXZyfY2DdnF/d3mKgabf3Nzc3d3d3d3d3d3e3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3dzc3d3d3dzc3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3t7e3t7e3t7e3t7e3t/f3t7e3t7f39/f39/f39/f39/f39/f39/f39/f39/f39/f4ODg4ODg4ODg4ODg4ODg4ODg4ODg4eHh4eHh4eHh4eHh4eHh4eHi1oZucG1xYFJZUFdfWUpMTElSP0Q9OTtCRjs6OTc0NTY1NzU0NjY2Pj07Pz45PTk7Pjg9Ozo0ODtAQENCQ0FCRkE/Q0BBQkREOz0+OTs8QkxNZODl4+Pk5OTj4+Tk5OTk5OTk5OTk5eXl5eXl5eW5t7Woc3JscHd6dHd4bXFydXd/hHRyc2xsa3F8bnBudGuBf3GAd32Eg355gHNygYqg2d3c3d3d3d3d3d7e3t3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3e3t7e3t7e3t7d3d3d3t7e3t7e3t7e3t7f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f4ODg4ODg4ODg4ODg4ODg4ODg4OHh4eHh4eHh4eHh4eHh4eHh4eHh49WHcWxqbF5YWlVXYFZWUE9QTD1BOjs8RkE4Ojg3MzY1Njk2NTg1Nz89Oz8+OT04Ozw5PTs7NTo9Q0JCPENDREREQUE/PkJDQzw9Pjg5PENLS2PN0dnh1sjY4+Tk5OTk5OTk5OTk5eXl5eXl5eXltbW2q3J5cm59f3Z1d2hqaGlwb3Zta2tnZWZxdG15gG5teXd2iHhxa2podXV5dHV/wd/c3d3d3d3d3d3e3t7e3d3d3d7d3d3d3d3d3d3d3t7e3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3e3t7e3t7e3t3d3d3d3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f4ODg39/g4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4OHh4eHh4eHh4eHh4eHh4eHi4uHh4ePVhnFwY2lhV1NZV19MUk9STUtAPjg5O0E+ODc5NjQ3Njc6NjY2NDk+Pzo8Pzo/OTo6Nzo9PDk5PEFBPTtBQ0VDRkA+Pj5BRUQ+QEE3OD5GSEpesrW4wbm1u8jg5eXl5OTl5OXl5+fn5+fm5ebm5ra2tbWOfX5weoR1cnZnYmNlbGtyb2ZpbHZtd4Z9hXlsbHd4a3ZwfH14c3V5fHd2h7ng3d3d3d3d3d7e3t7e3t7d3t7e3t7d3d3d3d3d3t7e3t7d3t7e3t7e3t3d3d3d3d3d3d7e3t7e3t7e3t7d3d3d3d3d3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4OHh4eHh4eHh4eLi4uLi4uLi4uLi4eHj1Yd1bl5uY1pUU1hXS1NLSk1SR0E4Ozs+PDk4NzU2NTY2OTY4NjY5Pzw6PT07Pzo7Ozk8PDs5Oj4+Pjs8PUFEQkNBQEBBP0JDPDw9Nzs+REVKXrG1tLW2t7e2y9rJ3uXl3eDi3tXU1tPU4OPg39+2treuh3t/bnmNenJ1bWNobGxtaXR4enF5enqIh4N6aWh9cWRvcXyGgX55e318e4an2t7d3d3d3d7e3t7e3t7e3t7e3t7e3d3d3d3d3t7e3t7e3t7e3t7e3t7e3t3e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t/f39/e3t7e3t7f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4OHh4eHh4eHh4eLi4uLi4uLi4uLi4uHh49aGdmxhb19dV1lcWlJQSEpXTEVHPUA9Ozs9OTY0NjU1NTg2NzY3OD87OT09PDw5OTw6Pjw6OTg+Qjs7Pj5AREBDRUFAQD0/QDw9PTU5PEJHRl2xtbW2uLm5ubq9uMPT0r3BwcC6u7y6u8TMxb/Dt7e3hGl1gX1ndYd5Z3Vxa2t5eHB3fH15bWl3e3h3bml1j4FwbHl4d3d9gXuGgnmAoNze3d3d3t7e3t7e3t7e3t7e3t7e3t3d3d3d3d7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t/f39/f3t7e3t/f39/f39/f39/f39/f39/f39/f39/f39/f39/f4ODg4ODg39/f39/f39/f3+Dg4N/f4ODg4ODg4ODg4ODg4ODg4ODg4ODh4OHh4eHh4eHh4eHh4eHh4eHh4uLi4uLi4uLi4uLi4uLi4ePXhXJrZ3RhW1hYX15TVVVRVUpMRj9JRDs5PTY2NDc3NTc4Nzc3ODk8PDo+PDg8Oj0+OTs8OTs5P0E8PT9DP0FARUJCQTw9Q0A6Pjw1NDlER0dasbW1tre5ubm5ubm3ubm4uLm5urq6urm5urm6u7e3uX9ucHN6b3B/eXNuc3Vsc3Z4cXFwb2tvcX6Bc2mHhIF9dHOHdW11hYmBgHJ2hafd3d3d3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7f39/f3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f4ODg4ODg4ODg39/f3+Dg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4eDg4eHh4eHh4eHh4eHh4eHh4eHh4eHh4uLi4uLi4uLi4uLi4uLi4uHj14lxa2xyW1dXXWBUUVVUUFJPSkNATUE9Ozk2NTM0NjQ2ODc3Nzk6Pjs8Pjs5PDo8PDk8PTw7PT0+PUNEREBDQkE/QD48PkE8OD06NjY6QkpIWLG1tLa2uLm5uLi5uLe3uLi5urq5ubi4uLi6uru3uKx7cnhxf3ZzfnBsbXpyZ29sbW50cHt3d3Jyd3pvhpJ2f3x8enZ5fH9zfYdyda3T393d3d7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e39/f39/f39/f39/e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f4ODg4ODg4ODg4ODg4ODg4ODf3+Dg4ODg4ODg4ODg4ODg4ODg4eHh4eDg4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4uLi4uLi4uLi4uLi4uLi4uLi49eHb2pxalVWV2FbT1FSUE5XSURESUo/Ojk6NzUzNDk1NzY2Nzg4Ojw7PD46PDo6PTw5PDw9Oz09PDs9REdEQ0E8PDw8Pj5AOzg8ODE1OkFGRVautbW1tre4uLm4uLi4uLe4ubq5uLi3t7i4ubq7t7mqcnB4d3x7e4J3aG5xam9qY2lyf21zcn54dHFsanaAeX2AgH91doB1a4qLgHaR1d/d3d7e39/f3t/f3t7e3t7e3t7e3t7e3t7e3t7e39/f39/f39/f39/f4N/e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t/f39/f39/f39/f39/f39/f39/f39/f3+Dg4ODg4ODf4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHi4uLi4uLi4uLi4uLi4uLi4uLi4uPYhm1sdGVWUFxnWE1YU1JRWUVDS1BOOzk4ODc1NTM5NTY2NzY4Nzk+OT0+OTw5OTw7Njg5OTo8QEA9PkBGQEJCQDo+PEE9Pzs7OzYxNjxCR0RQqLa1tba2tre4t7i4uLi4uLm6ubi4t7e3t7e5ure2tIlyd3h9iXxwem99c2hqbGdnbHRscXd0cWx2c3Fxd3FyfHl4g3Z7d2mLkYp9kM7f3d7e3tvY2drZ297f39/e3+De39/f3Nvc3N3e3uDg3+Dg4ODf3t7e39jS397f397e3t/f3t7f3t/f3t7e3t7e3t7e3t7e3t/f39/f39/f39/f39/f39/f39/f4ODf4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODh4eHh4eHh4eHh4eHh4eHh4eLi4eLi4uLi4uLi4uLi4uLj4+Lj4+Li4uPj4+Pi4uLi4+Lk14NoZ3VkVlVkZVdKWllXW1Q9RU1LSD04NzU3NjQzOTQ0Nzc1Njc5PTo9Pjw9PDk7PDk5Oj45PD4/PkFBQ0FFRUQ+OzxBPjw5PDs3Mzc+REhFSqG2tbW1tbW2tre4uLi4t7e4uLi3tra2tra3uLm2traLfXpsbHp/cGx5dm5qaGdlcXp4b2lvb3B1c21zd4Fnb32CgYNyf3lqcHJ6f6ng393Zy8a/vL2/vsLN0tDW3tnc4NfQzcPCw8PH1dfT2dzX1NjX0MfExce9vM/Kz87Y3djO3N3c2t3T0dze39/e397e3t7e4N/f39/f39/f39/f39/f39/f4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4OHh4eLi4uLi4uLf4uPi4eLg4d7W29/Sw8rJx9Hb3OLk4eHg2dre1sbExcTN2trf5OHi4trX3st9aWZxYVleZWFNTFRLUlpMO0hNSEZBPTc2NjUzNDY2NDg3NjU2OTw7Pj46Pjk5PDk3OTs7Oj49PEBAQ0RCR0ZCQT08Q0A9OTw7Nzc3P0RGRkaZtrS1tbW2tra4uLi4uLi3uLi3s7W2t7a3t7i5tba3opdxb29waW50dnFmZWNrbmdvcm1mZ2tygWVvdnyAeGRzj39zaHFyaWVlbm+w39HFv7u5ubm5ubq6uru6vc3Gw8e/urq6uru7u8HCvcHFvby/vry7urq5ubq6ubm6w8XDucDDwby/ube/z8/U3tjc3t/g3tLa4N/f4ODg39/f39/f39/f3+Dg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODh4eDg4ODg4ODg4ODh4eHh4uLi4eDh4uLi4uHa2t3RwsPCu8XT1uDdydPDrrnAsaqrq6uwtLbJ0sXRxLG4v7Srq6usr7S0vMzE1c60tLureGxtbWBdYl9ZS1NVVFFQREBRTUhEPzo3ODU3MzE1NjQ5ODQ2Njo8Oz08ODw5Njo6ODg5NzU8PDw/QEFAQkRDQkE8PkI/Pz09PTc1OD5DRUNAj7a0tLW1t7i4uLi4uLm5uLe1sautr7Oxs7OztLS0tqaei2tue3ZxeXhnY2hfcXdha25vaG99b25ja2lseHdsa4Z+bHB6dm1scG95sca8uru7urm5ubq6urq6urq6urq6urq6urq7u7q7u7y7urq6ubq7u7q6urq6urq6ubi3t7i4t7e2tbW1tbi3u8e+w8XHzcS4wMnH0tzZ2d/e3uDf39/f4ODh4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODh3Nji4uLi4eHh4OHg3tfGxtHQztTe3tPO0t/SuLi8sq2trKysrrG+ua63rKipqamqq6urqqqqq6ysuKyqqqqrq6urra6urq6urryzrayrpHlub21fXl1dVE1SU1xUSkE/UElIPjg5NjgzNzMwNTczNzg1NzY2Ojw/PDg5Ozo6Ojg5OjY1OTs8Pj9EP0NFQkNCP0BAQT9APjw3ODc6QUVEP4W4tLS1tbe4uLm5uLi3t7SurKuqqq2urq6vsLGzs7WjcG5ucm1wg311aWFlaGZkY2Rxc21td25naW1tZXBzb29zcXN8h4F6dX11n7u6uru7urm5ubm6urq6urq6ubq6urq5uLm5ubm6urq6u7q5ubm5ubq6ubm6ubm4uLi3t7e4uLe3t7a2tbW2tra1tbW1tba1t7e3t7rBvrzGycrb3+Dg3tvd3d7h4tDW4uHg4ODg4ODg4ODg4ODg4OHg4OHi0768zNjd3OLg0dnbxL23sLCxsa+zu7uzsLS9s66urq2tra2sq6qqqqmpqKmpqampqqurqqqqqamoqampqampqaqqqqytrq6urq6urq6sraR4aWJxZmFZWlZRUk5cU0Y9QlJEQTc8OzY5NTY1NDU2NTg3NTY1Nzg7Pjw7OTk5Ojg3Nzk3Njg8Oz47RD8/Q0BBREE+P0M9Pjw+Ojo3Nz9DRj54srCztLW2t7i3trKurq2sq6uqqaqtraysrq+xs7S1t4xucnRqaIB5ZmpmZWxdaG5waGxxYmNmcoJ+dmhobGpueoaBhXx4cXF5gK+6ubq6urm5uLm5ubm5ubm5ubm5ubm4uLe3t7e3uLm5ubm5uLe3t7i5ubi4uLi3t7a2tre3t7e3tra2trW0tLW1tbW2trW1tre3t7e3t7e3tre4v8bP0MS+v8DE19e8ydra4OHg4ODh4eDg4ODh4eDb3t7Uzby3tre6wMDJxLfIvrKwsLCwr7Cvrq6ur7Cwr66urq6uraytrKurq6qpqampqampqampqKmpqKmpqampqKmpqKmpqqqrraytra2ur66trK2heWpjbWdiXFhRUFFLVEpCOklRP0E3PDk0OjU2NTQ1NTY4ODY4Njs6OTw9PTs6ODY2ODg6ODY3Pj09PT5BQUVCQkNBQUBBOj09Pz05Ojc9QUc8bKqmqKutsLGwrqupqKqrq6mpqamrrKytra2usLO0tbilgIdvaWdzdGZrcG1qZGxvcm5rbWNrcHyJhG5qbHx4Y3uKfnNqc25rcY+7ubm5ubm5ubi4ubm5ubm5ubq5uLi3t7e3t7e3t7i5ubi4uLe2tra3t7e3t7a2t7a2tra3tra2tbW1tba1tLS0tbW1tra2tra3t7e3t7i4uLe2t7a2uLm4uLe3uL6+uLq9vcfb4OHg2Nnd4eHg3dfKwcPCurm5uLe4uLi3tbS0tLKysbGxsLCvr6+vr6+vr6+vr66ura2srKyrq6yqqqmoqKmppqepqaehpaipqamoop+hoZyip6inqausrK2ur7Cwrq2unXdwbGphY2BZUU1RTFJGQzlNUEU+ODs3Mjc5Njc0NDM1ODg3OTc7OTo9PTw6Ojk3NDo5ODY1OD8/QEI9RENDQ0FDQEJBQDtAP0A/PDw6O0NIPWOopaWlpqioqKenp6ipqqmoqKipqqqsra6wsLCztLW1taWYdn5xZmt4cW9tZmVsaGNsZ2ZpaX11bWlvfXZ5hWZod294b3Fvcninu7m5ubm5ubm4uLm6ubm5ubm5ubi3t7W1tba2tre3t7e3t7a2tba2tre2tbW1tra3t7e2tbS0tLS0tLS1tLS0tLW1tba2tra2t7e3t7e3t7a2tre2tre3uLe2t7i4t7i4uLi4wMXTyry8w83PyMC9urm5ubq6ubi4uLi4t7W0tLSzs7KysrGwr6+vr66urq+vr6+uraysrKurrKysq6ehoJ6gn5udoaGdlpmkpKaon5mZmZmanZ+gn56fpKqtrq+ura2srJl1cGlrY2FeXVVOU0tSREQ4TktHQTo4NTI2OTY1NDczNzc3ODk3OTo7PT0+ODg4NzU6OTk1OD9AQEFEPkZBQkNAQkNCQT88QEJCQD0+OjpERj5cpqWmpqampqanqKenqKioqKenqaurrKytra2ttLS0tbekc311bnONf3JmanFjaW1jaGZobG51aV9jZ3VzdnpuZ3Bwcn56cYihu7m5ubm6urq6urm2s7a1uLm2trW1tra1tbW1tbW3tra3tra2tbW2tbW1tbS0tLa2t7e3tbS0s7O0tLW1tLS0tbW1tra2tra2t7e3uLe3tra2trW2tbW2tra2tra2tra3tra3uLi3uri4uLi3uLi5ubm5urq6urm4t7e3t7W1tLS0s7OysrKxsbCwr66urq6urq+vra2srKuppaSmpqScmZubmpmampmXl5eXl5aZm5iZmJmZm52en5+dnJ6gpKWko6OioqKQdG5jcGFeXltUU1RIVEo/PFFCRkM7ODYzNzo1NTQ4Mzg5OTc4OTc7OTs9Ozc6NzU2OTk4NTg+Pz9ART5CPz9DPzxBQUI/PT9EQT8+PTk9Q0Y/VaSlpqanqKeoqamop6ioqKioqKiqrKuqqaipq7W1tba5o3eKcXKHhnd0cGh5a2JjYWVsaW5zal9jZWNjZWprYmRqbHaXjX6ovbm3tre5u7u6uLWxrKurqq6wrKyrq62tq6uvsLGvr7CytbW2t7W1trW1tbW1tbW2trSvr7O0tLSvra6vsrW0tbW1tbW2t7e3t7e3t7e3t7e3t7Owsra1tLa2tre3tra2tbW1tra3t7e5uLi4t7e3uLi4ubq6urq5uLi3t7e1tbS0tLS0tLS0s7OysbCvr6+vr66vr62oo6KgnJqampqZmZqbm5qampqbmpmZmZiXl5aYmZmZmpycnZ+foJ+goKChoaCgoJ+fi3RuaXRdYGZeUlRLRFRJPUVTSEVCOzo0NDY5NDQ1NzM4ODg3ODk5Ojs7Pz04OjkzNTg5NjM5PT5AP0A6QEJCQkA/QEJCPz0+QUFCPz06PkVDQFGjpqWlp6inqauqqKaoqKipp6ioqKinp6ioqaq1tbe3t7KZtH99kIx1Z2lqbGZjYGNoZW94cGlicXx5cGpmZmRma3NqhYystrKwra2ttLeysLCtrKuqqaiop6ipqampqKinqKipqaeoqqurra2sqqytraysrq6traunpaSnqqyopKOkpamwsbGztbW2t7i3t7W1tre4t7e3t7Kppaasq6ivtLa1s7W3t7a1tbW2tra3t7e3t7a2t7e3t7m6urq5uLi3t7Wxs7S0tLKxsK6sq6yurrCxsK2rqqmqqKijnJqZmJmYmJiYmZmZmZmZmpqZm5ubnJybmZeYmpqcnJydnJ2foKGhoqKioKGgoKCfnop1amtuWVxhVktPREdVRz5PV0hEPTw4MzQ0ODQ1NDgyODk4ODk6Ojw5OUA8Njk6MzY3OTE0PD8/QEBBOkNGRUJBREJDQTo7P0FCQz9APUBEQ0BPo6empaemqKqqqqakpqenqKioqKimpqaoq6uttba3t7e4rbJ1cHuDdmBiaWtiZWZhZGdmfYh5bHKAfXFvcXhjbW5xZo+srKurq6ysra6urK2trKyqp6WmpaWlpqioqKiopaeoqKioqKeoqampp6Wko6KioqOioKKioaKhoKChoaKjpKOjpaWlqLC0s7OzsKuqqaqztLa3trGopaOioaGipKiqqairs7Sxrq6xs7W2tra3uLi3t7e3t7e3t7a2uLe0sa6ppqerrKmnpqWkpKSkpKWnqaajoJ+enZycm5uampmZmJeXmZmZmJiZmpqampqampqbm5mYmpydnZ2dnZucoKGgoaOjoqCgoKCfnp2FdGtsaFdYU0pHTUVITUdAU1dGRz09OTM2Mzc0NTU3Mzg6Ojo6OTw9OjpBPDY9ODM3ODgzNztAPz9AQDpCRUNAQkRDQT87PEBDQkNBQDxBQ0A9TqKnpqanp6mqq6mkpaWlpaaoqKippqanqKmpqrW2tre3t7izc2h7c2JnamtpaWJhZGloXV1tfHJma3J/fHR8bm1zc36gqamrq6uqq62trKusq6mpqKWjpKWmpqWmp6eqqaamp6enqKinp6iop6WjpKKhoaGhn56en5+fn56foKGho6Wko6OkpKSmp6enpqWkpaampqeqraumpKKhoaChpKWlpaenpaeoqKalpaivtLa3trW1tra1tbOwrKupqa6rqKWlpqampaSkpaWlpqWkpKSkpaKhoaGgnp2bm5ucm5qamZiXmJiYmJiZmpmZmZmYmZmZmZqZmZydnJycnJybnJ+fn6ChoaKgoKCfnZ2cgXNrbmReU0pITUZETEtFRFFTQ0c9PDgzNjI4NDY0NjQ4OTg6Ozk7Pjw5PTs5PTczNTk2NTY8QD0/QD88P0JDPkJCQj89Pj5CQ0FFQD86PkVAO0+jpqWkpqeoqaelpKWlpKWnp6eoqKanp6alpqa1tba2trW2uYptcW1vfHxxZ2pmYGFsYFROW2hqbm9tgYJ9cWdxdn6aqKeoqqmpqqurrKqqqqimpaWkoqOlpqalpaWmqaqppqWjpKWmpqSjo6KioqKhoJ+fnp6cnJycnJ2dnJ2en6CioaKjo6KhoqKkpaSioqOjpKSjpKSko6Ggn6GipKanp6ipqaelpaSipKSlqK2wsKyrqqusqqmnpaWmpaWlpaalpqioqailpaWkpKSlpKOjpKOioaGhoqKgnp2cnJubm5qZmJiYmJmam5mXl5eWlpeXmJiZmpqcm5qampubm5ucnJ6goKGgnp6enpycm356bnJiXlNNSlBFRk5NQkBPRT5JOz01MzYzODM2Njc1Ojs4OTs5Oj49Ozo5OT03NjY5NjU2PkI+PkE/PT5DQT5DQ0BAO0BAQkJCRUA+Oz5FPzxQoKSjpKOjo6SkoqSlpaSlpqamp6empqalpqaltLW1tbS0tbiBaHx9ZXOCemxwdWFfY1ROT1FbaGxpbGxxbW5xbnScoqSnqKioqauqqqqqqaempaSjo6OjpKSlpqalp6ytqaShnp2eo6Shnp6foKCenJ6dnJycmpqam5ucnJubm5ydnp6foKChoJ+goaOioKGjpKSjoqSlpaWkop+go6SkpKapqainpaGdnJ+jpaipqainqKioqaempaWkpKSlpqampqampqenpaWko6Ojo6KioqGhoqKhoqOkop+enZ2cmpubmpqZmJeXmJaWlZSUlJWVl5iYmpubnJuampqam5ucm5ucnp+fnpucnJyam5p/fnF0YFtUTUdNSEZMSj8/TkM8QDs8NDM4Mzc0NzY3ODs9ODo6OTk7PTs7ODk9Nzc4OTU4OD9APT9BPjs9RD89REA/PzpAQUE/QUVAPjw8Qz88Tp2ioaKioKCipaSkpKWlpqenp6empqampaampbW1tbS0tLS3jHalsXdmc3Jvc2xjZGlYT1JRT09dgG1kYFptkZGSoqKjpaampqenqKiop6alpaSjoqGhoaKjpaempqesrKemoJ2cm6Ghnpuamp2cmZiam5qampmZmZubm5uampqampucnZ6goaCfnp+hoJ6foqOko6Omp6inqKWioKGhoaGkpaWlpKCcmZmbnqOmpqampqanpqempaOlpKWlpqiop6enpaWlpaWkpKOjo6KhoqKioqKhoaKjo6Kgn56enZybnJubmZaUlJSTk5OTk5SUlJWWl5qam5ubm5qZmZqanJ2dnZ2dnZuampqamZqXf3dvc11aTkhKTkdFRklERU5APD09PDQ1OzQ2NDY1Njc5Ozg5OTg5OTw7PDc6Ozc4ODg1ODg/Qj9BQTw+P0A8PEJAQT49QT4/Pz1CQUA6OkA8PE+doqGfoJ+dn6OkpKSlpqeoqKenp6ampqampqW1tLS0tLS0tbSXtqd1Znh2Y2xjY2VjW1JTU1JNXqCMeFhodpajnp6hoaOjo6OjpKSlpqalpKSioaGko6OjoqOlpqWmpqenpp+bmpuioJmWlpWam5qXl5iZmpqYmJqampqbm5qZmZmenZ2goqOjo6KkpKWinqGhoaKjpaampaSjoaCgn5+hoZ+goJ2amJeZmpygpKOjpKWmp6alpaOjpKSkpKWnp6ampqampaWmpKOjo6SjoqKjpKGfoKGhoKGgoaCfn56dnZyamJeVk5KSkpKSkpOTkpOUlZaZmpqbm5qampqbnZ6enp2cnJybm5qamZmZlH10bHReWk9IRUdGQkVORT9GOzo+Pzs0Njo2OTM2NDY4ODo4OTc4ODo8Ozw5Ozs6OjY3ODk5Pj9APjw9QD5AOjlAQT89QT8/QUE+QUE/Ojk9PjpQnaCfnZucnJufoqOlpaWlp6iop6ampqanpqantLS0tLOysrGwsK2rkHiGj36bmn93Yl1TUlFRTGKgootaiKCgn52YmZycnZ2eoaGgpKenpqWkoqGjp6alpaKipaampaanpqagm5mboaCXk5OSl5qcmpeXl5ibmpmampqam5qYmJmaoKCgoKGfoaKipKamop6gn5+goaOko6Khn56enpyanZuZmpqZmJeZnqChoaKioqKkpaWmpKSkpKKioqKkpaWlpaWlpaalpaOko6KioqGgoKGgnp+fn5+fnp+foJ+cm5qZl5WUlJSTkZCRkpKSkpKSk5SVl5iZmpmZmpqam5+fnp2cnJycmpmZmpiXl5F8cmdxXl1QRj9BRD9KT0JCRjhDRT4+OTg7Nzc0ODQ1OTo6Ozk3OTo8Ozo8PT48PDo2NzY5OD4/QT47Pz49PDg6PkFAQUE/P0FCQERBPjo4PkE8U5ycm5uampycnaGio6KjoqSmp6alpqampqSjo7KysK2rp6amp6alpqiln6iop6qnoXmEXFFST0xcnKCAYpmgnp2clZOVlpeZmp2dnqGmpqampKOioqanp6ajpaampaWmp6amop2cnqGfl5GRkJSXmp2YlpeWmJuZmpqampqZl5iam6Ghn56fnpybnJ6goJ6dn56fn6Cio6SjoqCfnp2ZlpeXl5iYmZubnqKioqKioqGio6WlpKOio6SioaGhoqOkpKSko6SkpKSioqKhoqGgn5+gnp2enp2dnZ2dnp6em5mYl5WTk5SUk5KQj5GSkZKSkZKTlJaXl5iYmZqampyenZ2dnJubmpiYmpmXlZaOe2pmamBiTkY+P0A9SkVAQ0A7QEE8Ozs5Ojc2NTg0Njc4OT04ODs6Oz87Ojs8Ojk6Nzc2ODs8Oz08Ojs8PTw3Oz5DQkRDPz1BQ0FEQT88OkBCO1eZmJqamZmam5ucnp2foqKhoqSlpKSlpqSioJ6op6alpqWlpaemp6ampqakpaanqKehqXJOUU1KVJahenKanJyenJeVlJWWmJiXl5qeoqKhoqOkpKOjpaalpaanpqSlpqalpaOgoKGhn5mSkI+WmpmenJaXl5eZm5ycnJqamZeZm5uen52cnZyZmZqcnZydnp6fn5+hoaCgoaKgn56bl5WVlZeanZ6fn6GhoqKio6OhoaCgoJ2cnaGioqOkpKOioaSlpKOko6SjoqKioqKhoKGfn52cnZ2cnJ2dnJ2enpqXlpaVlJOTkpKSkpCRkpKSkpGSlJWWl5iYmJiam5ycnJycnJ2cm5mYmZiWlJWXi3hsY2RiZFFHQT1DO0tIRDo7Ozw+OTo6OTo3Mzc5NTo4ODg8OTg7OT09Ozo7Ojk8PDc2NDc/PDo9Ozw/Pjw7ODxBQ0FDQkI+P0NAQkFAOj9APztZmZiampqam5ubm5ydoKGhoaGhoqKioqKhn5+dpKWmpqenpaWmp6ampqWkpKalpKSkpaaGUFJQT0+PmHB6mpubnJ6cnJycm5ubmZiYm56dnp6foKOkoqGhoqKio6SkpaalpKOjoaGhnpyalZOUmJuam56amJiYmJqcnpyam5iWmZybnJycnJydmpqbnJ2dnp6dnp6fn52cnJyhoaCblpWVlZacoKGgn5+hoKKjoqOhnZuZlpaWlpicnqCip6ikoaCgoqOjoqKioKCgoJ+fn5+gnp2cm5ucnZydnJmanJuWk5KSkpKUk5KSkpKSkpOSkpKRkpSVlpeYmJiYmZqcm5qbm5ucnJqZmJiXlZWWl4d3ZGdoZGJNQ0U8RDlJSkU5Ojs9PTo6ODg6NjQ3OTU8OTY4OTc5PDs7PDo6PDs6PDw4Nzg3Pj07Pj46Qj86Ojo/QURCQ0FBQD9EQUFAPjpAPj06W5qYmZqbmpubm5uen6CgoaKioKCgn5+enp2dnKWkpaanpqWlpqakoqKio6Oko6Kjo6KnllRYVVJOZ21rgZ6am5udn6Cgn56enp6dnJ2dnJ6enp+goaCfn6CgoKGio6Ojo6OkoqGgnpuZmZiZmZmZmZienpiYmZmam5qWlZeWlZicnJ2cm52dnpybnJ2cnZ6bmJqeoaGdm5udoKKhmpWVlpaZoKKgnZueoKGjop+em5eXlJKSlJeYmZ2goqenpaGgn56goaGioaCfnp2cnJubnJubmpqZmpydnJmXmZaVk5GQkJCPkZKSkpKSkZKTk5OTk5OTlJWWlpeXl5manJubnJucnJqamZeXlpaVlZSEcmZsYmRbREJMPT84RktCPEA+Pj05Ozk6PTg1ODg2Ozg1Njo4PDw7Ozw8Ozk8Oj09OTU4Nzw5PD87OkE/Ojo6QEBDQkRBQ0A/Q0FAPj08QD09Ol+al5mamJeYmpycn5+foaGhoJ+fn56foKCenZ2lpKSko6OioqOjoZ+foaGipKOio6SiradXXl1UV19ua42dmpqbnJ6dm5ucnZ+enZycnJydnZ+goKChoaGgoKGgoKGioaGhoZ+enJuampqbnJqZmpuZnJ6ZlpaWl5eTjo6QlJabnJuam5udn52cnJycnJ6dlpSZnJ+in5ycnZ+hoJuXl5mZmpycnJubnZ6fnZqXlpaWlJOTlJiampqfoKGmpqWgn56fnqChoaCenJubnJybm5ybm5qZmJmZmZmXl5iVlJKQkJCQj5CSkpKSkZGTk5aYl5STkpSVlJWWlZaZmZmam52cnJyampmXlpaWlpaQgG9vZV5gV0BKSDg/N0lFP0VBPD07Ojo8Ozs3NTs4Njs3NDY6Oj47Oj0+Pj07Ozs+Ozo4Ojk5NkBBPTo8PTo6OT9BQ0JERUM+P0FBPz8+Pj89PDtgl5WXl5aVl5mbnqGhoKGioqCenp6enqCgn52bpaWkpKSioKCfoJ+dnZ+hoqOjo6OkobCjXWVkYGFua4GenJubm5ubmZianJ2enJubm5ycnJ6ipKGeoKGhoqKhoKCgoaGgn5+enJqZmpubm5ybmp2dm5manJiXlZWWkY6Nj5KYnZycm5ycnqCdnJucnJyempWVm56foZ+dnJyenp2cmpqampqampqbm5qXl5aTkpWVlpWTlZaam5qanZ6foqWjnp6fn5+en5+enZ6fnZycm5qcmpqbmpiZmJiYmJiYlZSTkZCRkJCQkZKTk5CRk5SYmZiVk5SVlZWWlZaXmZmXmZqenpyamJiXl5aWl5eYjX1ubV9lVlRFSzw3PjdSRUM+QkE4Ozw7OTg6ODY7Nzc6Njc5Oj0+Ojw8PT49PD06Pz06ODw9OTtAPj4/PT45ODs/QkNAQ0VDPT9DQj5AQD5APTw8YZWSlJWWlpeanJ6goKCgoaCgnp6enp6gn56em6WlpKSioJ+fnp2dm5mbnJydnp+gn56rmGNpbW5pZm2enZybm5ybmpmZmZqam5ucm5uam5ygo6SgnZ6en6CgoKCgn6ChoKCfnpuamZqam5qbm5ufnpyZmJqamJiYmJKOj5OXnJ2bnJ2cnJycnZycnp6dnpqVl5ygoaGfnp2eoJ+cnJuampqbmpqYmpmVk5OTkpOWl5eVlJiYmZucnJydoJ+gnp6enp+fn56en6KjpKKgnp6cm5qampuZmJmZmJeXlpWUlJORkZCQkZKTk5OSkpOUmJmYlpWUlZaWlpaWl5iYmJiXmZqamZeXl5aXlpeWl4l4dmddX1dURUU5OTs8WT5AOEI/OTw8Pjk4Ozg6Ozc5OjU4OTs9PDk9Oz0+PD0+Oz8/Ozk+PDw+Pz5AQUE9ODc7QkNFP0FFQz1AREJBQEQ7Oz47PGKWk5SUlpWUlpiYmZubnJycnZ2cnJ2en56dnJqkpKSkoJ+enpybm5qZmJiYmZucnZ6cpolla3R4bVuFop2dnJydnJqbmpqampydnZ2bmpuboKKinpucnZybnJ2enp2dnZ2fnpuampucnZybm5ycnp6cm5qanZqam5yVkZOXm52dnJ2fnZycnJycnZ6fnp+cl5idn6GhoJ6cn6CfnJubm5qbmpmZmZmZl5WWlZaYl5eXlpaYmZuenp2dn6GhoJ+fnp6fn5+dn5+hoqKhoZ+fn5yZm5qcnZuampmXlpaYl5eXlpWTkpGTlJSTlJSUlJaZmJaVlZeZmJeYl5eXl5eYl5iXl5eXlpaYl5eVl5eDeHZfW11eUT1GOjk4P1VDQTtDQzo8Pz86Ojk3Ozg4ODc0ODk8Ozw4Ozs8PTo9Pjo/QT06PTw+PkA/PUBBPjk2PERDRUBBRUU9PkVERD9COzo8OTpkl5SVlZaUlJSUlJWXmJiamZqcnJydnp6dnZybo6Oko6CenJuamZqZmJiYmZiam5ubm6WJa3F2em9lmp+enp2dnJybnZ6dnJ2enp2dnJydm5ygoJuampubmpudnJqampucnJuamZycnJ2dnZ2dnZ2dnpybmp+fm5ydm5mZmZudnZ2dn52dn5+dnJydn5+fn5uanZ+goJ+dnJ6gnpubm5ubm5yampuamZudnJqZmJeYmJiYmp2foKCgoJ+hoaGgoJ+en5+fnp6foaKhoJ+enp+enJqam5ubmpqZlpaXmZmYmJiWlJOUlJWVk5OVlZSVlpWVlZSYmZuamZaWl5WWmJiWl5OUlJGRk4yRkJOWfXhqYWJiXFA8QDw2OENWSERCOjg7Oj47Nzc5Nj06OTk2NDc6Ozw9OTo6Oz87PT08QD47Oz46PT89PkBBP0A8NztBQ0U/P0REPj9EREM+Qj07PDs6Z5aTk5OTk5OTlJSVlpeWl5aWl5mbm5ybm5uamaOjoqCfnpuamJeYl5eXmJmYmZybm5qkgGpqb3lzcZegnp2dnJydnp6enp+enp2cnJydnp2bnJuampqam5ubmZiYmpqamZmZmZqdm5ydnZ2dnJ2cnZ2cm5qdn5ucnJubnJubnZ2dnJydnp2enZydnZ2cnJ2dm5uenp6dnZybnpubnJycnJydnJubmpmbmpmYmZmYmpmZmpyfn5+jpaKfoaKioaGfnqCgn5+fnqCioaGhn5+fn52ZmpudnZqZmJWWl5aVlZaTkpOUk5STkJCSk5GUkY+OkJGOlZabmJWYlJmXlJiRjJCPk5yTkoyFjIeDhndxZ2pkW1xRQT44NkJHYEJFR0A+Ozw7Ojg4NjU8ODo4MzQ6Njk9PTk5Ojs9Ozw6PD48Oj5AOj5APjw/QD8+PDg6Q0FEPz5CRD8+Q0VCPUJAPDw8OmeYk5KSk5OSk5SVlJWXl5aWlZaXmZmZmpqampqkoqCfn52bmpmYmJiXl5iZmJmcnZ2cqH1nZXN7enOJop+enp2dnp6enZ2enZ6enp2dnZ6cm5ybmpubm5ucm5iYmJmZmJiZmZibnZycnZ6enp6enp6dnZybm52bnJybnJ2dnZ2dnJ2dnp+fn52cnZ2dm5qbnJmZnJ2dnZ2dm5uanJ2dnJycnp2dnZybmZeVlZeXmJqam5ubnZ6foqOhoKGhnJucm5ubnZqcmZycn6CfnZiZmZmUkpKUl5SPj4+OkYyNiYuQi4mLjpGRj4mQmJiQkoyNi5KQj5iYoqiqpqWlrKOmoZqep6eyqKKVo6Cfl39wcWlsXFtcTUY8NzdHR1g+SE5URjk+Ojg5ODc1PTk4NzMzOTY6Pjw6Nzo8Ozo6Ojo8PDs/PjtAQD47PT5BPDw2N0A+QkA+QUY+PEFEQT1DQj49PDlmmJSTk5OTkpOUlZOVl5iYmJaXl5iZmZqampqaoqGfnp2cm5mYmJiYmJiYmZmZm5ybnKx/am16f3lxh6Genp2cnZ6enp6enp6dnp2dnZ6enJubnJubm5ubm5uZmJiYmJiYmJmZnJ2dnJyenp6enp+fnp6dnp6dnJydnJ2dnZ6fnZ2fn56goJ+enZ2dnZybnJ2em5qbm52enZ6dm5ubnJ2cnp2cnZqYl5SRjo+QkJGVmJSWlJiZmpudmJuYlY2Mjo6TkpKRj4mQjpGRjo+Ki42NjYiIi4+Lg42NkY+MkI2Qk5WVnJihoJySn6SipKmam5eanKOprb3Bwbq8uL26ucC8ubq3uru7tL2zwbV/bnVmZ1peWUxJRTo7TElTPFZSSUM6QTo7Ozc3NTo6OjgyNTY4Oz08OTk7Ozw5Nzo4Ojw6PT85PD8+PDw9QTs5NTg8O0A/QT9EPTxBQkA8REM9PT06YZOTkZCUlJOTk5OTlJeYlpeZmJmYmZqbmpqamp+gnp+fnJqZmpqampmYl5iZmZmZmZmphXB1e4B3b4mhnp6enp6fn56en56fn56dnp6fnp2dnJ2cm5ubm5ubmpiYmJiZmZiam52cnJ2dnp2dnp6goJ+enZ6hoJ6dnp2enZ6fn56en6CenZ6enJydnZ2cm5qYnJuVmJqamJiYmJmSjJCXlKCXk4+MjYqKiImMiJORh5CPjYqKkJCLjoqMi4+IiImJjpGOjYaFiYaKhoWLiI+SkJCNkJKXlpKamJ2TlJ6kpqaqq7Gsr6+rpquqsbm5tbS0rqyvtMDIxcXBvsbDxMTDurW+t7a0s7C2tb6qcHRyXGZfXl1JRj8/RUtMVklcTEQ/PUI6Qzk5Nzc7OTk3MTc5ODo+ODg6PDw7OTc5OTs9Oj4/OT5BPDs+PD46OTY5PDpBPkNBQT08QkBAPkJEPj8+OVyHhIOHi42KiYaFgYqMkZOVmJiHlZaWkpiampmenZ+gn52ampubm5ycm5iWmJmXl5ibqo56dXZ7f3mCoJ+fnp+goKCfn5+foKCfnp2dnp+enp2dnJqbm5ybm5uYmJiXl5iYm5ucnKGdnp6enpybm52dnZycoaGfnZ6dnZ2dnp2dnJiWlpaYlZWSlpmWk5GKjI+PjI+NkIuLj4+WiYiEi5GZjn2Fi42PjYyHioyQm4yRj4+Lio6TjIyNjIiSi4yFiYyPhouIh42KhYyEj4qXkJOYmpWbnKOqoaKknKKrsbe0ubWxs62vsrKlp7O6sbq6vLa3tsDDw729vLa/urq8wbW4wL60r66mqa+3mm58Z1tjWl1fSEU+QUtJU1hZXkFGOTk9OkY/Pzo3Ozs7NjM6Nzo5Pjg6Ojw9OTk4Ozk7PDo+PTtAQDs8QjxAOjg0Nzw7Qj9BQj4+O0NEREBDQz0+PjlhmZWLkYWNj5aSiHl9e3+Fi4OKgoqJhmuAeJCLlpqRnZ2UlJGTlpeampiWk42Sk5KQm5uIdndzcX1/cpGgnZubm5yenZ2eoKGgm5uWlpucmpybnJuYmZqYmJmampqWi5CUmZmYlZumlpucl5WSkY2SkZCUk5KXm5mYm5ePjpCLjo2Ch4uLi4qLiI2RjIeHhoqIiZGKh4yEhYqNi4qNhI+UkIyDkJOUmZWQi5OTkZWRlpWOj5GMlI2Oj4qIj4ePhoeJiYmNiomJioWNh46JmJKUmpuXmKChp6Cko5qqqbO2sbWwqKmiqK6tn6qvsK21ubi8wr/BxLixtbCutrOwuL68ury+urOzp7G3wpB1gGNiXlpXUk1IRkVQSVlXX1tDUDpCQz1HRj84Nzo6NzU1OTc8OTw5ODo9Pjo6Nzs7Pjs7PTs9P0E7Pz48Pzo4NDM3OkFBQEI+PjpDREM/QUM7PT45Z6mloqKZn6CippeUiI2CiIJ1h4iKiIp7e3Z7enmPeoiSfn18en6CkYWBgH1zfH99fISHfnRweHZzfHaBj4iIiYeIioyMkZicl4iOhIuNi4iNkI+Pi5GPi4yOj5CQjouEjJaLjIqRnIuOi4eMhYaBjYuGiop/iYqGiJiRiIOIg4KFfIuLjIaJi4iKkIyIi42PjI+Wh4mLio6NjY2Wk5OdnJyalpycm56bmpuYnZeTkZWWkJKRi4+LlpSMjYqDi4SEiYyQkIqOio2LipGJjZOTk5SVk5KcmZ6Xn6CfpaKvsamupKSfmKStpqa4t6ysu729wsPAv7+vpa2wsLS3uLO0uLa0ta6stK+4tLaBeXpjZmBeVlFRQUVMT0lcXl9UR0dCS0xCREA9ODg7OTU3Nzk3Ozc9PDk9Pj05Ozg6O0A8Oj06PkJBOD88Oj84NjQyOTtCQD9CPj04QEI/PkBEO0A+N2CloJqXnaGaoaCPl5efl5WCjaCfo6GdmpKOjIxycXBvdnFucG1ucHZub29waHBxcHR+c3FycXd7cnl2d3Jyd3Z6e3l8fXt/iIGEi3+PkYaNi4uGiouLiYaEgYaCgIKJkI6Wgox+jpKMiIWAh32AgZKQhoSEho2DhIyPj4+IjY+Hi4iRkJWRjpCKk5eOj5WYp6SfnZWYlpaln5udq6aqt7W4srGnr6qnpqGfmp2WkpWVkYqPjImTjZuVjYuLhoaJjJWQkJCLmZKVlZSbkJiTlIyNkYyWl5WilZ6mqauno6OqsJucpp+mq6G0vb6zs7+5u7u6uby9rqiusa6wuLyztLGxqrCpqLGxsqild3J0X2hhYFRWUUlKSFZNXl5eVExKRVFKRUdDPTo5OTc0ODY4Mzg4PTo9PD47OTs4Ojs/PDw+OT9DPzg7Ojg8Nzc2Mzc5RT4/Qz89N0BAQT0/RDw+PThUj4yGh4eUjJWZl5yWmZaNlZyWlZydoKCdmpiWeHFubXJ4cXFsbnJwa3FvcG1yc3t1dnd5fnVxeHZ0d3tybn98gX15eH1/eYOGg4WCg5CLkIuLi42Pi4mJhYKBfX9zfYaNmZuQhIx7jYqPinp9fYaOjYqGjZSSi5CXj5SXkpihlp6XlZunpp+goKawq6GjpbW0sqqmqq+isba5vcK7ucO+vLi9uLWxrLCspZuSk5mfm5SPk5WOmp2doJqfn5edo6qsoZ+em62hp6qwqaampJiRkZWUo6SirKSss7Szs6i3tru4sLKvra2yt7a6srW6s7e5u7i8urayr6yxsbKztLOxsa2us7Gzs6yhl3Zxc19jXlJRVE1PSUdYT1pcZFROR1VPRURKRD44Ojg3NTg4ODU5Nzo6PTw/Ojg8ODk5PTs9PTpCPj84Ozo5Ojk4NjI1N0I+P0RAQDY+P0I/PEM8PT46Tn98go6MjJOTl5eaj5SWjZaRkZSXk5qanqGdnHJvcnFxcXFxcG5zcW91dHJxdneAdXd8eYV+d3t8eX1/fICJiYmDfXp/h4GIiYGAgIGGiIKGi4aIhYSIiImEf4J/enx6iZWRkIKFaYaFi4qDhIWKj4yNkZmdlJSUoJqan6Ktsa2ppKWtr6ysrLWuvrmtrqm1sLexq7G2rK+9wsLAvrq8trKutraxtK66u7OurKepp6unoqmtoKmooq+wuLSxvLq6urK0ta+8tLezt7e7t7mtrbCprLW5sbeytLe2sLu7vLu6ury1vLi0wbWsqqqrtLG3uLm1trSzsKymrrCqq7Cxq6yusLKxtK6qo5N4dnJlZ1tMUlBFTUlTV1JlXmdUUExcUUhMUkNBOTk3OTU4ODY2Ozc5Ojs6Pjk4Ozo6Ojw8Pj08RD45Njs7ODg+OTUxNTZCRkREP0A3Pj5DPjpBP0BAO0t/gomXmJSdlpabmIuSlo6XkZGVl5SZl5+bmZx8dHV2dXl1c3RudnJzdHV2d319gX56gXyDfoJ/fYB/hIKFj52RiYF/go+Xjo6HgoCBiIuFfomQi3+HjYyLioeSioeGjZuWi5GIf1+GhYiMjouOiomQj46PlJSYkJWcmp2eqK6yr6+1tLOtsrW4sLy1tbGqsKqztbS7t7SztrS1r7i4t62noqassLCvtre3vrW5vLOysa61u7C0r6+yu7axuMC9tLS0s7izvLq2tLrAvbm6ubq+ubm5vrWysa+yr6q1tLGzsbSzrri4tb+vpKaoo6ussa+zrq6wsKytq6qroqKmqKKnrauqpaynoqeYeHlxZmVZT09NSVJNV0xPX15cTlVVYlFEVE07Pzk8ODk1Nzc1Nzk1Ojo6OTs4Ojw8Oj08Pj4/P0I9ODY6Ojk6QDs1MjY2QUZDQz4/Nz49Q0I5P0I/PjtLjpGTmJmVmZGTopiTkpKLk4uOkI+Vl5ablZSbhoJ9enh2dHRzdH53end2gIKDhouMhISFioaQiYeRk5aRjZaalY+IjI+emJaVkpCTl5qamZCdoJ2Tl5qgmZ2boqGVkJuskZObmHtZho+JkZGOko6LmJqPj4yUmpecnZugnaSstLm6vK+2tLi0tLK3uLmzq6+qqKy1srK1rrGrrqa3s7OxpaGotbCvrayrtbqyu7q6tLK3ur67ubG4sLmtqLK4u66ttLS3tbu2trm5vLe0r7G0t7a5s7e1pq2pq6ior6yprq2up6KxtLG0q6aop6Cjq66oqq6orLKwr6+pqKGeoaGjpqOgopqlo56ol3J3bmdiVUtUT09KQ1BLX2JYWlFcVGBNSFJJQUA5Ojg2Njc3NTg5NDs5Ozk8Nzs+Ojg8PD0/QkBBPTs2OTk5Oj87NjM3OD5GQkJAQjk+PUBDPkBGQj44R5OWkZWTkpSQkZ+ZnZmVkI+Sko6Mk5aWko6RlZGSkIaBeXJzdXuBhI6HhZGTkpicnJiVkJWYo5yaoaeqqZ+clpeVnaKioZyZnpmlqKyvramnqqmop6GlqKirqqmvoZqgrIqOoZ92WYOZjZiUmKCgoaSem5qlp6Spq6+spaOoq6+xtK6qrK6zr6ystLO0ua6urayqrLKwsK2wqKqmsrS0uK6qtrqwr6qurLC3s7i0t7W0u7y4tbWxtauyrKiys7uvrbGytLa1sbG0s7OvrKuvs7a0sayutKqqpqWnrauoqKupqqifqbOwqqeppaOio7CtqaatpairrayppaSioKWipaOYmZyVnqKippdudWVnZFdPWEtLSktTVHBiWWRXX1tcUlpQTEM8ODk6Njk4NzQ3NzQ4Ojw6PDg6PTk3PDw7PkM/QT47OTo5Ojs+PTg0NThBREVEQkM5PjtAPkI/R0Q+N0KSm5SVlZaVj46Wl5qZlZGKk5SSjo+SkYqKiY2Ul5qTjYmCho6VkZSfmpuin5+jnqGhn5ijpKelpaapqa2rqaKmpKilpKGfnqOjra2srairrq+qqqukoaKkqaemqaiipqSFhqejdFtzoJmdmJ+hoqmnoKKirqyrqqetr6ilpKmpqqmmo6iqqaekp66wr7Ovq7Crqq+yr7Czua+rqLCxrrCyubO0r62vtbCss7GurLW1tLSzs7CvrKyqrKusr7G0s7CwrrCwsKyqrauqq6alrrCysKumqbCvqaOkqaunqKaopquwq6mvqaaoqaalo6iwraqpqKKpo6WnpKGhoKKloZ2el5aYlJugpKmUbnNeamlfVVpOUk5QT1JkXGVjW11ZXFBZT0tAPDs5Ojc6ODczNTMzODo9OTo4OTo5Oj08PEBEPkA9OTo8PDw+Oz45NTo8QkFFQUNBOT47P0BEQENCQDdAkZ6YlJeZlpGHi5SSl5GIg4mLk4+OkI2Hh4SFlZmWmJeZlpqeop2anKKkoaCdn5qfoKGgpqGgoKCjo6KlqKmrramqpqOmpaCloKaop6WnqaepqKOnppmcpKaioaGhoaWcgoKhonJjZpmfnpafm5qioqChn6GiqKCcn6GloaCmo6KfpKGspp6foaGkrKqnrKivq6e0sa6ur7WyrKqwq6mtrbWwrq6srreup6yqpKivsq+sq7Kvqqqpq6utqa6urrGxraqtqaunp6uoqauinaapqKilqKisqKilpKWop6iopqmsr6+oq6mhoqKlo6Opq6ymqKWjqKKhoKSdnZ+hoZ2bnZ+amZWcnKOqlG9zZm5yZF1cUFVPV09eZGRsaGJiWlpSVE9NQTo9Ojo4Ozk1MTYzMjg4Ozk5OTk7OTk8Oz0/Qz5APTk7Ojs8QD0+PDk5PEFBRUFGQTo9Oz9BQUJBRUI4PYqWlJOYmpaPiISNjpGSjIiIiI+JiZCRjoqKiJubmZygpaKlnqKjoZqeoZyanZ6bnKOop6ugoKOYoJ2XnKGjo6WjoqKkrKilqaCepqmnrKmkn6Kgoqahpq6mpp2fn5+lkoB+nZ1xaF+NoqGbnJqcoJ6hn56eoKOZlpuYpKKipJ+ZnKGhoqCbmp6goaSgnaejqrGorqusqaSqqquorKalrKqws6+rq6mwq6appaWoq6ynpqevq6Wnq6upq6irqqqrrailqKOmpaesqayoopykoaOmo6qpqKano6SnqKanqKepqKupoaKoo5yepqWjqKino6WlpqmgpJ6inpeYnZ+doqKlnpiUlZ6go5d1d2t2eGJfXFVZUVVXW2Nec19oX2NTUVlUSD48PTg7OTo4NTM3MzM0Nzo4OT05Ozo5PDxBQEM9PT44Ozw9PEA/Qz86ODo+P0NAREE6Oz49QD9DQ0VDOTyCmJmenZ2alZKKiZGRl5GQh4SJgoGNj4+Sj42cnZ+hpKmlqaeorK2moqKfmKSmo6Stsa6yp6asm56em5qjp6Cfo5+foq+rq6yoqKuwqaiqqKGfoKeprbCyr6yjoqahrop8fqWeb2pchKSlop6doJ6fpaKinp+imJWem5+fpKGblZigoZ2enJudnZuZmZWen6Oonp2iqKGaoaOmoqSoqaqoq7CxqKWlp6eopKWpqaqnoqWmqKadnqWloqClpaOlpqCjpaOjpaelqamqpKekpqKmp6SrqaenpKGlqKynpqWlo6OopJWdo5+bnaCjqaeopqGjo6mooKiioJyVkZqfoKGmopuXkpCamqCVfHdvfXlmW1pgX1pcVlxoZG5jbmppYl5QUEA/Ozo4OTg8OzYzNDMzMzc5OTs8OTs7OT49QkBAPTs9ODw9QD08PENBPjo4PT9EP0M+Ojk/PEI/P0FEQjk6gJ6kp6Kem5+gmY+ZnaCWloqGj4iEi4qTl5SRo6Wnqq6trLOys7S4t62pqqevtLKxqq6usbKusa2lq7OssbGpq6+rq6y2sLSwq7GysaOfoqqpp663trS0trOvrKuuq7mDd32ypmxpWH6loqOanJyXoqiloZ+eo5udoZqWnaScm5aZoqefoJ+joJuUlpmWl5qfoJmVnqGZmJ2dpZ2gpKeqqaiqraylqaSlqqeqqaqsp6SkpKOimZmhnpqaoaCfpaWYnqSmpKqooqelpaGqp6mnp6ejqKWmpaGkqKesoqekoaalpaOVl52Ym5mVo6elpaSfnZ2lo6Kqo5+amZiXnJyaoaGakJOTl5ibjX93cnZ5amJbX15cYllgZG5ta25hX2RgUE9BQDs7OTs4Ojk2MTQzNjQ3Nzc6PTo8Ozk9PUI/Pj89PDo/OTo7PD5BRUA9OTtAQT5DPDs5PzlAQEBAQkM7OXuao6OcoJ2dop2Zn6KioJibmJaYkpSQm5qWl7S0rrW4s7S4tre0uLm3tbm4ub28uKqLnLK4vLS9urW7uru4s7q/uLe5u7G3r6iusq2inJ+qsri8vL27ur+0r7GztbS4enJxsK9nZlSBpZ6flpWal6SqpqahpKOkq6almaGko52goaKooaOgpaGck5mYmJmco56cmpudl5uZlqWam5+hqKmpqKuvr66pqKirrKytq6irp6WjoJyfo6Ojn6Cipammmpyip6Spn6GjoqKgpaanpqSooJ+ipKGjoqiop6OloaGopqalo5mbmJuTj6GknqKfmJiVoJuhpaCfm5udnJuamZugmo2YmZiTkYaAdnh4eGNbUllUX19hbWh1a3FoaWlhWVNMQDw6Ozg5Nzk3NTU2Mjg1Njc3Ojw7Ozs7QD4/QD0+Pjk6PDk2Nz47QkZCPDg7P0NDRDw+OT43PkFCP0ZDOzhwkpqblJ6bm52Vl52doqajopaXnpaXl6GblJi+t7G4uba3t7i7l5S2vbu9vcDFtaK7mKC3v7+6wcm0nbu2sra/xcGooLa0urGqrrSxsLG0tbW8vL68vL7Guri3ur20rnduZay3a2BSja2lpZ2XpKSnqKSupKurtbWvs6CnqqynqqmlpqCnoKGmoZOWmJ2foqSjnZ6coaChnZekmpmdoKaqqqqtrq2tsLGrrK2sqamrrqimpaalpqSkpqaeo6eppKGcoKKjpqCio5+jpJ2foqWgpJyboZ6fo6GhpaSlqaOkpaKkp6ehn52elpOcoJiZko+MjJeWn5uWnJqdnJqSlpSUmJOQmp2YiouHgIB8gnhhXllUYWlgZnNvc2l0ZGlkYltMSz46ODg5ODg5NzM0NTI1NDY2OTw8Oz08P0E/QEA9Pj44OTs4Njc/OUJFQzw7PD5DREM9QDs9Nz1DQ0BFQjw3Z4yRk4qalZiblZWYm6Knq6aVl5iQlZmhnpeXvrWztLu6ubi5woeYt6u4u8DCxbOjw6e4s72/tMTHvbS7uL62wMTErqCworW2tb2+wcPGwsO5vb/AwL2/xL28ur2+tql+dWmitnVgVpy1rq6qqqesp6ekr6eqtLyxtLWor7Gwr6yqoqajrJ+fpquXmqifpaWfoJydoKuwsKyiq5yYm6Cor7Kys6uorre1sq2tqaalqKulpaStqaShn6Cnnp6mqKmmnp+anqGlpqmcnaObl6KmmpuanZ+cmqGcmZ2eoKijn6GfnaWioKOioZSZmpmTj4qLhI2Qk5uPjpiVm5eYkJORkomNl5iYk4uKi32AgIVwYGFeXmtjYm53dXZubFtiUVZcTUc7PDk3OTc5Ojc0NDQxNDM3Njg8Ozs8PEBAPUA/Pj8+Ojo5Ojc6Pz5FRUU8PT1AQkJCQUE7PDhAQ0NARD87NV+MjIaFlouUlZeYl5ifpqellpWVkZebn5ual7mxtrO5vLy5urWqsryxvsG0vMe5uLuuv6fGw7/KxsnIxcXJvMLHx7+xsKe8vL7FxMbJx8XGu8TAxcbAua+9vMC+vremiX59laOEbWqqvKyvr7Spqqaqo62kp7G2q7WyrbOtqK6vp6awr7Ktqq+zpKu1qaeopKCgnqmyuL61tbWqqaausre4t7apq7i8ubexr66noqOop6SfqKOfnqCZoZydoqSnp6GelJuaoKGlnqChnpajnZSQlpiboZqflpORlpSin5qenJudoZ6kn56VnJiPkpOPjImTkJefiZCWkZuUmJGRlZaDjJWXlpKLjIh8f4N/amZoYWttZm51cXJ1cWdeX1xSSUU/Ojo6Nzg0ODw3NjU0MjMzNjU3PDo7PDs9QD4/QD48PTk5OTs6PDw+QkRFPj49QENDQkREOzo4QUJCQUNAOTJbk4iEjZGKi5GRlZCSmp2fnJOSmJSdnZqXmpW2sbm1tb6+tri1uLO8vMTEusPHwb+0s8XFxr/CzcfLzsvLx8HDxsfIysXExcO7vLzBxcHFxb/DwsbFwLGTvrq/w8mwloh7hoyRiXmAobiwn5qwrqykrbC0p6qpqKqtrKmmpZ6pr6uyu7q4u7e5t7O5uLOurLO0qrC1ub3Bur6+vL60urm4u7qysbS8u7q7s7Oyp6Smq6uioaCdmpudmpyXmpuenJygnZaclpuZnZ6io52UnJCNiY6OkZ6bnJWNh5KLmJiWmpybmJybnp6cmp6UjpiYmpSRmZeeoZWYmpKXlJWRlJqYk4+TnZaSi5F+enx/dGtsbmRvbWlxeG55aWlhXGdhUUZEQTw5OTc2NDQ6ODQ2NTMzMjY1Nj05OTs7PT47Pj49Oz05OTs7Oz89QUNBQkFAPEBDQ0NFQjs4OUQ/P0BCPzsyV5uQkZCQh4WSjo2IjZCTlZGPjZSUm5STlpqRs7e4uLi+u7C1sri2tbbAw8G+w8LAvru+u7u8xMzEzNDLxsa/xcfLyNTLysjGv7y7vsS+xcjGxsTExLm0wLe0u8XLnYJ4ZnaEhnxsfIamtqqZorewprC7tayupaSjqKSgoKWZqrSxvsG+urm6uLW0srG0tLO6wL7Av769u7u9vsDCt7a3tru7sru+ubi3u7a3tKyoqamrpqijnpOampyYkZKZl5GRmJqXnpiWk5acm5+elJOJiX6GiIuWlJiZkYmVkZeWlZmbmpaYl5idnpyhmJWZmZyYl5ybn56jnJ6WmJeTl5yZmZyUlp2UlpOJdnl6e3Zua2lndVpmcnhzeWZmXWRbUlhJRj87Nzg4NzYxNjk3NDQzMzM2NDY7ODo8Oz08OD0+PDo7PDs9Ozs+PkRBQURCQEBBQkNDREM9OTlCQD8/QD89MkyWmpaSk4yKmJCKi4yOkpKKiIaNkJiKj5CUl7O7tba/vb2xtrjBvby0uL/Bsbi3vsHFvbu8wsbJv8jOyMHEwcfKysbKxczIzcbJxb/DwMvNz8rHxMPEwsS+uL3KvYluYVNifX5pVWdwjbOqnaa0s6yywLWzrKmjoa2prKatn6y1tL/Cvrm4vbawrausr7W0ur7Fv7u8urO5u7i5ubWtsLS9u7G/vLiytrmzubu0ra2orKyqqaeXnpualY2MmJSTi5WWlJyZl5WWmZKYn5mQiop+iYqKkY6Vl5OUn5mWkJSZmJmWmJOUm6GeoZiYmp2ZmZaenpibopqdnJuYmpuZlpeXlpyZlJyYfoB4eXV1ZWZpamhda29ueHdjYmBgXlhXRkU4Ojg6OTc5NDQ5NzY2NTEyMzM0Ozo9Pzs9PTo6PTs8Pjo7Pz48QkBDQkJFQj0/Q0NDQ0RFQDk6QkFBQj5CQTVCkJeUlZmSj5qQjpKRjZSVi4qHjI2UiImPkpq2u7S8xsHEwr3BxcLAtLO9v6ywr7rDysPCvs3IxbfByMW/wcLIy8rCwsTJzM7Pz8zDx8bIycjHys7KycfIx7/Gy6R5Xk5IVHd1XkRZYnmnt8C+vrmsucG6vKytpqq7urm3wLK1uLLAxrq3t8Gzsa2tqau1s7u2w7a2vbWxt762s7e4sLW2v7uwvbq0q7CxsbO8urOzrqutq62xnaOjoJqQjpiXlZCclpaYlpWSnJmTm5+clpGUjpWQiYyQlZOUm56YmZKSnJedlJmSk5aZmJ2VnJ6do5yVnZ+TnKKcnKCfnaOemJSVl5ebmpmgkH99cXRxb2NhZ3Zoaml0bXhsXWRbVmBZTEhDNjw5OTg4OjUzOjY2NDQxMzUyNTs6PD47Ozw9PDs8PTw7PD49P0E/RUFCQ0M+QEFARUVERUE7Nz5DQkI+Q0I4O4+akZaalJKUjZCUlI6VlI6Pi4yJk4uIkJObt8C6xsXEw8zCwcS9vrWvt7uvr7O6wMfFxMHMy8W2ucDCwsTHytHLwsPExsnFzNDOx8zJwsLHwczV183Lys7FybyKa1BFP05waFg9TlxslcTMxsawmbrEu760sLCwwb6+wca/vri2w8K6urbAvrWyrKmvsri+tMC0tLi0t7nEua+8vrm+v8K/tbq2q6qsrq+wt768trSura2utaSlqKimmpycnZyeopydmZOQkp2VmKCdmJiVmZmZl46MlH2QkJefmZmYk5GToI6Nko+VjpCUlaKdnKSem56elpyjoKGipKOkop6amZubnJ2enIN9cnx4cGdgamp2bGlldW50Yl1iVFdVU01HOjc7OTk3Nzo3NDg3ODQ1MjM0MjU7Ojk+Oj08Pz04Oz05OTk9PEBBQEVCQUJBQT9AP0RFREVAPDk+QkNCQENBOjSAoZeUmZiVkImUk5aTiZGMlJGOiJaKi5CXnMXLw8O8wMPHwbm9vbu4tre3rrK3uLzAwsDCx8bHurzAwsTHyMbSycHDxL+/vsTLyMrLyby8yMbJ1dvVzcnJxcmndlpMV0VKaF1WPUlWY3u80MawkIm5wru6vbWzs7+/ub/DucC3u8G8uri7ub27srCvsKy5wri9ube1t7q9xb24xsjCwcLGwr28tamurrCwr7O6t7m2sK+tr7OppquprqannqSlo6OjoqCblZiekZecl5GRlZeZlZmRlJiSlYyYo5qcnp2FiZ+TfJKWlZKUlJennaCipJ+en56foaGkoqKjoaOinJ2fnqOhppl5enl/cnBmZWZjamRiam1ub15ZXFZWTlBKRjk5Ozk3Njc3NjM3ODk1NjEzNTI3PDs8QDs/PDw6ODo8OTk4Pj1APz9GP0JBQz89QT5ARENDQTw5PENBQ0RBQDozbKKdlZedlo+PmJiZmIiSjZGVkI+Vjo6TlpbKy7u5urnBu7q3vsG8vLu5sa61uri4u8S6vsC+vru8wMXBxsK+xsK5u8O6uLm8vsHHwca7ucjJw8vZ08jDwsHGomlMYpVqSGFWWEFNVV5pr9a9k3aFvLq7u763tLC5vrO8vrG5tbi7tryztbm2uba5t7GtusG6vMG/t77Ev8bDw8fHwrvAwr/Cv7iys7O1tLGut7S3tbSxrK2xp6Wlp7CtqJ+nq6ajqKWmpqCgn5SYmZSRkZWUl5OYl5qhnZ6hnKGdoaWglpSbkZeXmJqTnpmZqaSlpKWdoqCanqCkoqOcoqGjoJ6cnp6ppaiVfXuDeG5mYWRiYWNkZGpjZ2NbWlpcWVFPRT07OTo7Nzc5OTY0OTk6NTMxNDUyNzo7OkA9Pzw8OTc3Ozo5Ojw+QD8+RDxCQURAPz49QkRCQkI+OjlCP0FCPT44NVmfnJiTmZaRlZiYmpeQkZCQk5GTlJKSkpSUxce4tbq5wrm5vMPFwri7ubGxtry6tbnAu7u5tri0tLW/u72/ub66urTAuLW3sq66u7fAt7zK0cG9z9O8tLy9va5sRoC+j0pgV1pEVF9bX6LGo3tok8O3u765tbe0uLy0vbi1tLCzvLG3tri/tr25vb65t7q+u7/Axb29y8PGw8TAw762ubq2v7i7v7y4trOyq7CwsrWzs66sq6emnqeurauiqKumpqqjp6iqo5+Ym52bmpicnJiXnJuhpZ2anqGhoKGmoJqbnJiboJ+dnJ+coKiho6SknaKfmqKgop+el6Shop+dmpieqKWhi3x5iH1xY2BiY2hqZ2dpZmldVlZUWU9TTEY4PzY7Ojc3OTs2NTo7PDYzMTM0MTc7OTg/PT47PDs3Njk5ODo7PUA/PkA9PT9CPjxAQUNDQT9DPTo2PEBBQDw9ODdJlJibj5OUkZWYlZGWkpWRkJGUlZSTk5OYlcHCwLq8ub62uL7EwMKxvbqytLO4vLW3vMC8vbS1sbC1t7W7wbi+ub+8vLe0t6+ut7W5v7vC1ou6v8LZuaGlr7S4d0mDq45MaGVjQlVzYFeRn4JsZajGv7zFuLa3tLi2tru7uLa0t7q1tLi8vbm/ucPAwLu5vLu+vcjEvcfEw7rAvb62sra4srm0usLCureysaysq62yr7Kur6ijpJ6rrKyqpKakpKiqoqemraihoaGmn6Oiop6bnKKfoKOdnJuhn6KgpKCem5eZn6GdnZ6eoaWkoaKioZ6ho5yinqCZnZijn52eoJqZoKKmnYR6g4F4cW1lZWZvaWVsaFhYTktLS1JJTEhDOT44PTs2Ojs5Njc8ODk4NjA0MzE3OTk7Pz0+Ojw6ODg5PDg6Ozs7PD1BPj09Q0E8P0NDREA/Pzw6Nz5CREE/QDg4P4mYmoyMkI+Tl5WMkpCakpGXmJaUlJKQmZTDvsbBwby8uLi6v7a8scK2tLyxtLa4s7q9v768sq2vrLGwt7y3u73BxLm3t7a1ubm6u7+80MRzqcu+3M2aj5aisIFNcX5wV394cU5WgWVVeHZrY27BxsW+xri1srK9uLi4vrq6uby6urS3u7q5v7zEwL+5uri/ubvFxr3Fw8Kyur27sa+2uLO3s7q+wLm2rLGrrqmqqa2qqq6mpKWnrq2ppaOio6GkpaWmoqato6Klo5+ho6Gcmpyhn6CloaCenZygnaWgnpeVmZ2fn52gn6KmpaCknpybn6Ofn5mcmZ2epJyWnKOcnqGcppZ+f4d8a25wZ3Brc2ZibWBcVElLSkRKQkNHPzo7OD48Nzs7OTc4Ozc8PDYyNzUxNjk8PD08QTs8Ojs6OT45Ojs9PUA+RD89PkRAPz9BRkQ/Pzw9OTc/QUNCQEI5Ojl3nJiLh4uQkpOWjY+TmpOQnZiSkY2PjpiSvbfHvsO+vbu+vL22uri9ure9s7OwuLi1uby8wLeqraSusLi7sr2+u8S2tbi1t8C+xLzCxNircH+8yNTesoSFj5l9VWNmVnKZgn5uVXRjWmNiYVyF0sfHxMe9tbW2wb27u7/CusDCv7y2t729vcHBwL+8ube8wru3v8W7wr++tbe8vK+vt7awtLO6ubq7r6mtq62rrKaqoqeuqKWqra2vp6Sgn6ajnqKjqKOjq6Oiop6dm5ublJaZnJyfpZ6fnpmYnpejoJyXmZqZmqOjop6jo6egpqCbnaCjnp2WoJmcoKCblJegn6WcmKKQgYaAcmZsaW50bnhjZ2JcY1FLVEhFRUNIQzw7OTg9Ojc6PTo4OTs3PD01MzY1MDY4OTo8O0A9PDo+PDk+OTk9Pjs/PkM8Pz5APz4/P0ZEQEE/Pjo3P0BDQz9APTo4ZqGYj4uNlZKVlY6PlpmVl5uVjoyMjY+bk7m2wbS/vLm8w8C+wLq1trKywLmvsry8sLe7tru8qqqjsLm9vLK8vrzFuLG4ub3HysrDx8nSlGxxrdHQ29SSdnx/dF5iXU6VpYOEiVRdXVxZWVhhqtLJx8XGwLm9vMS/v7/CyL3Hx8XFvLrEv7vBv7rAvLu7wMS9t7nCub69t7S2uLqur7WxsLCytre0t6yurKqsrKuoq6Gms6qlra+trKippaOkp5+io6Onoaeiop6cnZyamYyQlpeZnaKZnpuVkp2UoaCdmZ6fmJimpqKfoqKmoqeloqCko6GbnaCbnKKfl5WVnp6kmpafiYGDgXRvbGx0a2xuX2NeYGFOSU0/RUA/REM7Ozo6Ozo4Ozw6OTw+Ojo+NDQ1NTE5OTo5PDtAPD89PTw4PDs6PDs7Pz5DPkI+QD89Pz9FRUJBQj87Nj9CRUQ9QUE6OlmfmJOSlZqVmpOQlpeclZuZlpSVkZKTnZm2uLaxuru6vsG5uca7trWypb69tLbBv66zvbS4wbGwsbS7xtPDur68xL63vMC/ydDHyMrKwIJub6PLy8/guHNqa2dgYFdVqKGAg5JeWFlWUVVSecbLycPDw8O5w769ub+8wsbCyc7Hxr66xr26v7m3wLm5vsDCvrW0vLi2u7CvsrK1r7Cvrqyus7CzsrirsbKxqrCrq6yrrLatqKyusqarrKmpoaWgpaakrKSmoaChnqGgnaCMlJeTm5+mmZ6emZOYnZ+gnp2eopuYp62ooqSgoKKqpqmhqKGlm6CgnZ2jn5SYmKKdp6Gfm4J7eoh6bW13e19wY1teX19UST5DRUlCQz5DOz42OTo7Ozs7Ozs7PT05PTU2NjIxODo5Ozs6QTs/PDw+Nzs8Ozw9PTw9Pz5BQUE/P0FCQUVDQkRAPDY+Q0RFPkJEPztTmZuZmJ6dmqCalpyZn5KdlZ2boJWWlJqYur20sLu8wcTCv8XGura5sqO7vbS3xLuwtbq2ucS4tLy2u7mq28O+tr7Avr63opimr7PCwKN0cnSZxMfK1teGV1VRT1BFW5+ReYOJZ1pUT05PVpzJy8bCwMjAusK7urO6usG+wMrOysS9tby8ub+5ubW1s7/Avre0s7S4rbeqr7CwsrGvq6+nr7ausrG5rra2uLSzsLGttrS6sa6srranrLKsraSjoaenqLKrqqWkp6elpaCml5ujn6SmraKeo6KanaWiop+foaWenrC0sKSlnp+kqaevp6mgq6CiopqipJ2anqGmp6+psZWCe32Cem5zeHNncF1bXl1ZUkVEQ01JQUU9SDs7NTk7Ojw8Ojs7Oz0/Oj01NDUxMjc4ODs8O0I8Pz46OzY6PTo7Pj0/QD87QUFBPj4/QkBBQkJFPjo1OkFCST9AQkA7TJqdnZ6fnZienZmampySoJWbnp+blZGRl8W+urbDvMbCvr/Ixbe1uLe2ubu0r7e3srWzt7m8u7a7u8a1bKvNvLW5wLynemxnbmpyf5WWbXR3lb2/xsHVqFVCQD5COVqJfXF/f2lbU0xMTna3wMHCvr/HvLy/tLSutbW8vr/OzcvCt7K4uLi9ubuxtrLIwLu2tLGwt6yzqbCtrbS3r6uuqrG1r7Gvt7O6usC/tre2sru6wLWyrbO3rLC6r7KloqWrrK+5s7KosK+xr6qiqKGkraitrLOun6inpqWmq6Sknqaqo6ayuLOrpZyfp6anrquqpbClpaWbpKOYn6exrLW4sLKOhHl/fXZsdXtwbmlbX19aU1BBRkhHS0BEQ0g8PTY7OTk8Ozo6Ozo9Pzw9NTU2MTM2OTg8QT5AOz1AOzs5PD04Oj08QD46Oj49Pj09PkBCQkJBRD03NDU9REc9Q0I/PEWUnqCgoJyXmpiYlZmdmZ2fmp2bnJaRj5LDwMK9wrzEvLy7xbu3s7e2tru7s6CWtayvsbS0tLa4ucDOsXaAsry1tsGhhWlaX19MUltbbW5yfZ24t8K4vbtzRDU1OTRScmpqc3BkX1dMS1ygwLq5t7bBwrW/urWur62wvcC5z8rJw7GwtbS0vbq+ubq7ysO7uravsL2xuK+ys7C3vbaur66wt7CsrLK2vbzEwrq9t7bAv8G3tbC2srGzurGxr6err6u2v7e1qbqztbmxp6uop7ausrG1uaisrK+qr7CqqKessayytr20saykqKuoqKusq6i2qaaonqadmKOuvLG7wbSmiYF8gnpzdXZ3bnFgX2ZdW1RKPT8/RkY9RkNDOTo1Ozk5Pjw8Ojo8Pj4+Pjg4MzE1Nzg5Pj9BPzs6Pz08Oz09OTs8OTs6Nzs+PT1DQT8/QUJEQkE8ODU4PUNGPUREPzw/iZ2en52Xl5WUk5aZnpubmpuYlJ2Uio6Owb7Dwr6+vrm2usCxtbGzt7fCtbOrrbOoqa61r620trnCyqaEd4qhr7SYaGNmVVlgSkpNUFRqc4Sjr7e+ubO2nmg3MDUzRl1VXmRiYGJdT0x2tL+4sq6yvLquu7Szpquorbq+uMvCv76sq7Cvs7u3ub67wMXBu7y3sLXEtb+0uLu0u8PCs7a2sbisqaWrsr23v7+7u7exvL28trGvq6uprbOvsLCrsLSpuMC2sqm0tbC3tq2spqu7s660uMKwsbG1sbK1saywsri4ubi+tLGzrqyxramvrqqyuK6trainoZ6ptr+4ur+wlol9gHxxdHd0d3JsX2NiW15PSEI/PUhDRk1DQDc3NTs6OT48PDk4PT47PT86ODMyNTc2OD8/Qj86OD4+PTw5PDk7Ozo8Ozs6PEA+QkI9QEE/QkI/PDs3OjxBRD5CQz8+QYqgm6GdlJiVlZKYmpyWm5WalY2bj4SIhru0vb+7vLm3s7y8rLOytLS2wLXAr7Kzqqqxt62pubO3v8aniHt2jaGUXlNCWVRIYmxXUEZJY4ufqq+2urW0sq2UUDMxMUFQRlFXWFhgYFBcmLm6tK2lrLOwprCtqJ6gn6WttrXCt7a0pairqLC2s7K6tbu7u7W4trC1xLK+vL+8ubrFybq9vraxp6SeoamxrrW5trKxq7S3trGopp6gmaWmpKynq6y2qa+6sa2kpq2lq7GrrKmtuLawsrjBtrGxtbGvu7ayt7W1sry1urKwsbKutLKqrq2nuLWyta2uqqiosrq9wLa0qY6Ce393b3tvdXJtY11nWFxdUk5OQT5KQkFKSUA2NjU7Nzg+Ojs4Nz4+PDs/OjkzMjc1NzU8PD48PDg+Pjw8OTk5Ozs7Pjs7OTw+P0E9PEJAPz9CQD47Njc6QERBQ0E/QUKJoJ2loJSWmJiVnqCcl5uYmZGMmYmDhoS1r7S7u7S1sLG2uq6wtLOvtbq1urC1s7KttrqvrbyzuLi/s5CBeYiOa05KQGhYQk93g5ZsTEJXfrC0s7WytK+urXdMMDA/RTtFVldRWF1RfLCysaysnqSnp52jpp2WmZman6muuayrq5+lqKSrrq6nr6yvsbGtsa6usLmwtLy+uLm4x8W8vLu4qaKcmJufp6assq6zqaapqq6popqXl5GcmpijnqKir6ekrKaompqemqGnp6anqa+2squ0trCqsK+xqbm2sbWxrqy3s7avrquuq7S1ra+rq7GtsbKoraurs7W3ur2wq6GLeoJ5cnZzbXRpbF1balRdXFBNSERGTEJGTkY4NjY1OjU6Pjg7OTc8PTo7PTo5MjM2Nzc3Pjs9Pjo6Pz48PDw6Ojs5Oz47PTk8Pj1CPDtAP0A/QT8+OjU1OkBFQkRBQEJBiJ+ipqGYm56dmqWpmJudmpmUjJmHhoeGrq2uuLmxsqiur7iyq7CwqrK1ubm+tbK4tLm6trm7tbWzuLWVjYmEeVZGQVKIV0pKVnaMgGE/Vae4s7SysLGtsLmke0AtPlp7l6eiknNVWpWrrKujp6CdnZ6XmKGVkpWXkJifqK6ko6Sgoqeio6mpoaanpaqtp6ynqKesq6yyu7SztLm6trK2ramgmpaWm52fq6yqr6Oko6GpoJuTjo+Qk5KSmZaanaSloJ+ep5iVkpSZnqSjoaWqrK2iqaqppKmtrqW0sa6xraqprq+wraWmqqSos66trKmmpqmrpqqnq7Ksr7Oxq6mWgX+Bd3J4aHRzbmRVYWNXXFFOTEhASFFETUM9ODg3NTo3PD46Ozw4OTw7Ozw7ODI0ODk3ODs7PDs4PD0+Oz08Ojk8Ojs9PTw6OkA9PDw7QD5CQEE/Pjk1ODs8RkFDRD9BQYijpqKjnqCfp6Coqpufm5yZmI6Xi42PjKqpqLGvsK2lp6ayr6mmq6CvsLu1vby4wMG+vLy8ua6sr7K7qZiZlWhNQFZ6bk9JSUxmmn9XRVWvu7Gss6+urK21t6BmZ5Opp5+am56gf3ednqepn6GnlpuXl4+dk4+Qlo6Xm6SooKCioqKlpZ2jo6CepaCkrKSmqKSio6OrrLOuqa6urqeqraisoZyamJmYm6moq6ufpqObo5yVkIyPj5CTkJeVlpifnp6amaaXk4+Slp2ioKWipqSnoKKko6Ghq6uksq2qrKyno6yuraufoaKkpK+srKmmo6KqpKqqpKmrpqmsq6agiHiDfHZ/emN3bG5cUWhUUE5HUE1MQk9RQD47PjQ5OjU7OT07Ojk9OTk8Ozw8OzkzNjk5Njo7Pz06ODs6Pjw6PDs5Oz07PDw9PjxAPT88ODtAQEE/Pz45NDk8N0FDQkQ9QEOOqqSjoqGinaulpqimoZ6dmZ2PmJWTkJWnpKGmqKmlpKChp6uhnKKbp6u1sry9wMLCwL7AuLSnpKyovcGqpr1kRVWig1BZSUthSliJY2Zmgay1qrK0rqqqrrCtq7CnnI+WkY2WnqCgn5qjpJ+eqJSblpeMl5GNkJeTmJ2iqp+fn6Cjpaicn6ChnKKfo6innKehoKSfrKisrKCpq6agpKimrKOdnp2Zl5qrpqqxo6WonqCclZOQj5GQmJCWlZiXn5ibmZukmZeUlpqdoJ2nqKWgo6Kho56doKmqpa6upqipoaKqrqqnoaCio6msq6eppqShqaKlqaalpKKmpKijkn18gHV2fW1re2RoVVFjTUpIR09STUpORzxFQDwyQDg1OTs+Ozk5Ozg6PDs7Ozk5NDg7ODc7Oz48Ojk8Oj07Ozw9OTw8PD49PUE+QEJAPTc6P0FCQEA/ODU1PDpAQ0BEPkFGlq6koqWeo6KpqKipqqWmnp2imJiZmZWbop6bnqOioKOgoZqgmJeXlqGorK62t7q5ure3u66ooKGpoKzGwMqaTkJ3nW5Pb0tOYmZ1cmBfZnSNsK+us7WqpquqopyYkoyPlJWWl5qeoqGbnKSemqSXl5eWkJKRkZOal5ugpKqeoaGepqeqop+gp5+dn6SnqZ6jpp+qnaqtqq6nqLClo6Smp6ymoaShm5ier6iusqulqqqgmpiYmJWTlpqTlZWalpuXl5ihnpycl5uhmp6ao6eln6GioqOdm6Gmp6aoraOppZ6kp6mkpaWhpaSsrKmmq6eioKSjpKenoaCgpaKmoIl7gH13eHxkeXlgYlJVYEhJSktTVElSUEw5P0E2Nzw2NTs6PDw5Ozs4Ojw9Ojs4NjU3OjY5Pj0+PDk5PTk9PTw+PTs7PDo+PTw/Pz9APT03Oj5AQEA/Pzg2NT08PkFCRkBAR6CupKaroaOqrK6tp6ypqKCipp6bm56aoJyalZmfn5uen56WlJOXk5KcnqSorq2sq6uvqq+pnpeepZylxsaIV1JLZqJeaX5ydllSa2NdaWZlaou0sLC4rKagm52ZlJeZmI6NkJSQio2Nk5iinJejmZqXmJmUmZiWnZufpaapoKajnqeurqumorGjmqSmpqqioaqiqaSosquxsqu5qKarp6urqaysp6Cgo7GusrC0qrKuopmcnZ6hmZubmpiZm5SWm5aZnKWhoJqjoZqcmZ+kop6gn6KmnZulpqWkpaijp6OepqOinqaloqWlqKykpq2noJ2dn56gpaGenqWgppmBe4F8dnZzaIJsZVtTWlpNUUpPT1VMU0xBNz5DNzg9NzY6PDw9Ojw5ODo7PDo7OTc2Oj01OTw7QD03ODs3PTs9PT06Ozw4Pj09QD5BPj4+ODg8P0BAPT43NTg9Pj1BQEZAQUihqqCrq6GkqquwramtqaelpaWkoKGfnqWXl5SYmZ6YnJ2blo+VmZKRnJihnaqip6Cep6Gln5ySm6Kan6qjjXlVbHJ1dW1idXJYWWBfZGldYFhirK6sr6efnaGflpCTm5+amJaRkp6boaObnpuWn5qfl5uinqWhnqSfpKitraisqKSstLe2sKe0rKKtraOvpaSmoamorrWzsr23vrCssa6tqaq0sbCoq6iytbezuK2ytKSgnaWfrKGhoqCgmpiWlqCbm5ikoaCeo6GgnpqcpaCfnZyhqJ+fp6meoaOkoKagnqehn5ymo5+ipaOooKmrpZ+dnZudmqainpyjnqeQgYJ/fHh1and1XWxaUmBIUlVIRlVWSkJMRz1LSDhGPDc3Oz49PDo8OTg6Ojs6PDk2Njo8Nzs+PT8+OTc9OT47PEA8OkA6OkA/O0A+QUA9PDk3Oj5APzo+NzU4PT0/QUBEQEJGnKueqamipamprqimqqWmp6aoqqGlpKOmkpOVmJacmpqcmpWTmZuNk5+ZqJ2un6eenKGdnpqZkpiem6GhoKN+b4FuYGRXTVtSWEtLUVdRSVJPQ5esqqmkn56YkpKTmJeVlJSLh4qNlJ2cnZ2el56Zpp+gqKWxqqeuo6uttrC0srGutri9wLqttbSwt7CutKmmpKWsqbmztbvDvMPBtrq2q6+xube8r7OwtcG8t72zs7WirKKpqLKpq6inqJqZnpqqp6CZp6Cfn6enpaSfnaqiop6bn6igpKetmZ+jnp6nnqCmnpycoqGbo6KhnZympaWkn6KZnJukn6CboJyjiYWEfnZybWl2bWhtXFhcQ1dOSkdNR0NGTTw+TD40PDk2Oj0/PDs6Ojg4PDk6Ozs8NTQ6PDg5Pj4/Pjg4Pzk8Oz0/Oz1BPTo/PjxAPj8+Pz08Njs/QT07Pzg1ODw8QERCREFCQ5WqoKapo6mqqKmjoamgpqinrK6lqaWpqpSSl5mUmpqanJiYmZyamJmqoLGit6Swpp+enZ2XmJWZnpuco5+ciGFXX2ZgVk1PRTw+P0NDPj1CUXeoramqpZ+dnaKjnZ+dmZubk5KUk52dmJSFnZqgmqukq7KwubKysbKxur28vLm2uMO+v8K/trq7wMS5vbusr6exrbHCtrjCxsDIysDKv7C5ub25wr64s7vGxL3DvLezqbOtqrO1r7Ouqq+jnauntrGtorCmoaOvsa2wpKWvo6GgmqGnoaSqqpmdoJmao6CmqKGcnqKemaSenpiYo6OhpZ6mmZuipJ6fm5ubnIeGgXt0cmtrdHJxaFZcUUZUSERKUEk/RUE0Rkg5NTs+Njs8Pj08Ojo4OTw4OTs4Ojo4Ozw3Oz49Pj02OEA5Ozs9QDw9QDk3PD07Pj0+PUI+Pjc6QUA+PD45NTg9Oz1DQEFDQkGRqqGlqqelqqimn6KnnKasp7Gyq62jqayVkpWalJecoqGbnqCinJ+psqu7sr+rr6ylnqCgnJyYmp+gmp+fk3tgXmVfUEVFOkRARjw+OTZOfqqzp6OjoaCepaulnpeclJGZnZiUjIqGiIZ4bYigo6KrrLS8tsO+vrO7wcPCxcC/wsbGxcPIwsDFx83QyMvDsre1vrK+xbu+zM3FzMzM0se+v8DCvsfGwrfEysnDwca+urS6urW7t7C1sqq6sq67t7+7uqu4rauquLq0vK6uuaOmo56mpaKjqaaZm5+Ymp2nqqegoaGkmJSjlpSZkZydn6Sep5+en6KdmJmUmJSIhH16cWtjaG94a2VaW0ZLTEVEU01EQkU3Oj87NTQ5OTc5Pj87PDs7OD48Njo9OTw9OTw9Ojs9Pj4+NztBOj45PT45PT44Nzs6Ojs/Pz1CPj83OkFAPTw9ODY2PDo8QT9BQUE+kqugp66ooqulpKKipaGlqquwsq2upKmmlJWWmpaUm6SmnaGqp6KrrLy8v8PBsrK4p6Ghq6qhnJ6hoZ2cmXtyaWBVTkQ+Slx9cGJBPVyOrqygmZubnp6Zl5eXkoyOlpeTjo2Qi4KDgndycW1wj6atrrS5xbvNx8u/wszOzczHydHMzczHycXFzNHS1c7Tyb3Av8O7xsXIxdHTzdPQ09PMysLFxsbKyM6/yNHMx8bHxcG8w8G/v7+2vrOuv8DDw8fEx8Suv7iyuLzDwsK6vLy1rqenraigoqmlmpagmpmdqKupo6SknpePm4yQmYmVmJugn6OdnZeempOTi5WPhYB5dHNlYmdyb2ZeWllDTkxERVBJRENANTU1ODpCPTY4OkE+Ozs+PDk+PTc6PTk6PDg8PDw7Pz8+PD0+Qzw7OkA9Ojs6Ojg4ODk7QT48QD8+ODtBQTs7Pjc4Njo8PkI+Q0FAPpOvn6ivpqiro6KloKampKuoq62qrqKqo5Kcl5ebmJuirJ2frqalsarFxszOzb+wwaikqKytqqCdo56cnpVoZFtTSERAP0yKoamag6CyraOenJ+al5aUkpSWkZCPjIeDg4iHg4CBgYB5cXJvbHmktrq5vsvB09LTyM3O0dPR0tHQ0dHNzs7Qxc7U1djS183Gx8nMw8XKz8rT19LX0tXW09TIzMbMzcnSzc7TzcXIysrBxsvHycjGv8Ozs8jEy8vLz8fKv76/vcHHxMzMyMnAw7+tr7OonqKqo5qTnpyYnqaprKSlppaXipWFkZSHkpKSmZualpiQm5WQjIaRi4B6cnV2Z2NndmlkVldRRE1GQElRQj1CPDoyMkE8RTw3OTxCPTs9Pzs7Pj05Oj48Oz44Ojk5Oj86Pj1APkA8Pjs+Ozk9PTw5Njo6Pj08PEE/Pjk6QEE6OT44Ojo6Oz4+PEE/QT6QrKKiqaanqKSfop2qqKOso6OnpqyiqZ+To5iWn56dpK6bn7CrqKyxyc3U18/Gu8esrbO3rK6jnqOinaGbYlNLSURCP0RWs9K9srCmnJycoKShnZqUk5WUiX13cGtlYmhxb3F7hYqAdXBucXRwhbPDvsXR0NfW1tLWzdTW19TT0dPU1NPP0cPQ09bY1dbSy8nO0cvGzdLK0tXW2dbX09fYztLKz9HMz9DN09C/yMfKxMzMzM7PxcbHtr/Kv9LNzNDGycjAxMPIzs3Q0c/NysjNuLe7qJ+lq6eemJ6jnp2qpa2pqKiSlYiQhIyRho2MiJOVmZCWjJiSj4aHjIR8eHN2cGNgZHJiXVJcSUpHQUVJSj47QTg9NDU4Njs4Njo8QD07Pjw7OUA7OTo8Ozs8Nz09Ozo+Oz08Pjw/Ojo8Ozs5Oz89OTU7PD48PD0/Pz46O0BCOzk/OTg7PT0+PzxBQEQ8hqugnKegp6Oim6CbqaSlqaCfoaGmn6ifmKSimqmmoqarmqOwsamotdDU19rSx8bLtLXBxbG1qKGkpaCioFlJQEFEQEdRebKup5qUl5+cmqCgnpucmZWJd2ljYF9fYF9eX19dYmx1dHBwb2xycXWSxMjG1NbX19fT1tDV1NrU1M7P1dTU0dHM0c3T19bT1dDP0tPRydPRyNDX19jR19LY2dTWzM/Pys3Sy87QwcbDyMbOzdHR0snMzcDKzMbTz8zOyMXKx8fIzMrU1NHVz9LM08K5xbGlqLWup5uorKWdsqiws6ysk4+TjoiKj4OPi4SQjpmNk4+Zj4+ChYx8enFzdG1hY2ltX1ZQX0pKQ0ZDUk0/PD41NDo9NTI4NTU8PEA8Ozw6OTpAOjg7Oj46PTg+Ojo8QD08OTs9Pzk6Pz07PTw9PTo2PD0/QD08PT0+OjxAQjs5PDc0Oj48Pz89RkFEPYKknKClnaWlo5mcnaSeo6OfnZ+doJqnnpyhqZ+vraqqq52mrreoq7fX1NXZ2dHO0L+8zMm2vq6mqqiho6tlQzg9PkVYgqqon5iVl5manJ+dmJyckn1wZWNiX19hX19hYF9gYF9gZm5wcG5rb3J3d5zMwdLV09jY1tnR0tLXz9POy9LN1dTSys/M09bS0dbNz9XV0cXR1MrQ1NXWztLQ2NjX18vIzsTJz83KzMDKwMjKzc7Qy9DOzszOz8jL0NDLzsrCycfJzMvM0tPN09HR0NDKvci5sK67uLWqtrCtqLits767sZqPn5SRjo2IjpCFkY2ZjJGRlY6RgIWIenZvcG9rYWRucGFXXFpJRkZETVhFO0A9MzM8PTg3ODU1Oz5APTk8PDg7Pjk8QDtAOj04Pjk4Oj88PTg7PkI6Oj08OkE9PTw6Nj08P0A9PDs9Pjg7QEE9Ojw4ODs+PD4+OkVCRT6Bn5mlp6Cfo6eam5+cl56eoZqdmpyappufpKefuLa1taykrK6+tLDA2NLX2tzWzs3Kw9LPwcCwqaytqaSxekpIQz1YjKGblZOXm56enpyTlpeUiGteXl5hZGJgYGFhYGBhXl9fXlxibXJvb3N0dnZ5pL/M1dHW1NPY1s7O1MvOzsXOytLSz8fOzc3Uy87TzcvX1tDM0dTLzNDS08rO0dTS1dXKwMrCxczCyMnDzMPFyMrKz8rNzNDO08zGyM/MyMfLxcbBxsrMzdDRxtDOzc3Mz8XHwbi5vcPDvcO5srK+sbvDw7WqmKWhmZaRlZWSi5SNmpGUlI+PlIKJhnlxcmttZ2BgcGhZWGhWTEZMSVBQQjtDPjs2Nzo4Ojo1Nz09QTw6PDw5PD05PT06Pjo8ODs9OTtAPD47Pj5BPDk9Pj1CPTs3NzU/PDw/PDw7PDw4O0FAPDo8OTs7Ozw9QTpFQUU+hJ6bqK2epKSqnJ6fmJKXm5+am56ZmaKVoamppcTCwb+7tbKxx8K4y9XV2drb2MzMz8jW1cTCta+0qJ+ulXhvc3WCkpmNjJeVkJORkZWWlZCLfGVhYmJgXV5hY2JgX19gYWFgX11bXWdycnFyc3Btcnmlx9PPy9DP09TKxcnJxsa/w8bPzsfFx83K0sjLzs7G0dLQzczUysfLzs/Ix8/Sy9HPxrrEv8bJvcLHyc7FwsjAx83IxMzKzM/IxMTQyMbCxsjEv8HHzMzMz8LKy8jHy9DExce7x8PIycLPwb28v7DByca5vaqxsqelnaKcmJCbkKOZl5mRlZiJj4J3b3Rka2BeZnBhW1dgR0hIR0lNVEc/Sj02NDM1NT09NDg9PT06Oz08OTo7OT89OTw7PDg6PDo6QD1APD09Pjw6Qz48Pz04ODk6QD4/Pjw7Ozs7ODo+Pzw7Ojc5PD49Oz49RkFDPYOgm6qupa6qq5qdoJeUjpedmpmgmpqcm6WysazJzcrIxL68us3NxtDV1dna29jQyc/P0dPIwra7u62jtn1og4Slq5ONjZaPhYODg4F9hIR+c2BbXl5eYF5gY2RjX1xdXl9gYF9bWlxga3Jyb29rbG9wfbnRyMnKz8vNxLrAw7u7urq+ycbCw8DDyMvJyMrIwcXMxsjLzcnEwsrJwcLM0MXLyL+5wbvGyL6/xs/Lw7/Du8nHyLvIxsXKwL3Cy8bFxL7GvbzAw8XMxcW8wMrCxcfSxcDJv8rJxsjG0MPDxsOvxMvHw8q3v7y6tKmspKWYn5iso6Glm6Ogm5R7d3J0ZmlaYW5sWlxYUkRMRkJHRExERlNANTQzMzQ/PTM6PDw7OTw8PDg7PTtBPTo8Ojs3Oz05Oz07PTs6OD4+PEI+Oz88OTk7Pz07QD48Ozk5OTk6Oz06PDo2OTw+PDs+O0NCRD5/pZypsqm0rrCdnp6YnImUm5man6Kfmp2ov7i8ys/RzMfCw8bNzs7M1c/V2djZz8vSzc3OyMG1w76xr7VsX3p+pJCKkpaGeoCFhX92eHVycF9bW11gYGJjZGRlZGBbXF1dX15gW1laXGJvcm9raWxwb3OPx73JxczAxsKwtrqysrOyscK8vLy6uMHBwcW+vbm9v7nEysXGwr3GwLi7xMm/wcm7t7u7xsO/vMHNw8a+vrXBvcO6vca7w7qzvMXEwsK3v7W2vr+7zMO8tbrIur++y8TBxsLFycbJxtDGwszHssfJw87MwcXDwL2zt7Cyp6ioubClrbCqrayUenZ3amRnYGhvY1deWUpGSkZISkFFQkVJQDk6NjQ4ODU0Ozo7PDk8PDs5Ozk6QD46Ojw6Nzo7Nzo7Oz88OjxAPUA/PT8/Oz07O0A8Pj4+Ojk5ODk3ODo8PDw7OTo8Pjs7PjpAQEU+fqygrLWqt7SyoZ6fl5qNlJaan52mop2et8XCxMjO0srKysfNzc7RyNDG1dTW183Kz8XJxcfBucW9q62lX2V1hpOLiIuEeH+Ghn9+hHt0dGNcXF1eYGBiY2FhZGViXVxbXF5cXl1aW1xeaHNxbWdnbnByeZ29zMDDusC4rrCxp6qtrKe4tLe0s7O0u7W+srewta+yvMK8wcS8wLu1srq+wLjHubS7tsHCvLi9xsHDu7Wvsra6v7TEt7u1q7i9vcC9sbq2sLa6s8W8tq67v7W3tMW8vsPFwMPFxsjLxcDGxrvHy8DPycfDxsLDt8O9vba5vse/rLW6tbe2jnl0eGdnZWJrbl5WXmBGS0hISkZCREFFRT88OjU2NTYzMzs6Oz06Ozs6Oz44PEE9PDo7ODc5OTk7PDo+Ozk+Pz1APz5CQD1AOjo+Oz89PTk6Ojo4NTY7PT48PDo7OT49OT86PEBAPIi3pauzsby8sa2foJmUlJiXnqujr6qnpMbLzcjFyM3M0MzNyMrIysnKxNDN0s/NxcfBxcC/urfJtqqwmVtpcYyPhYiJenh+hoZ3d4F8c2hdXV1dX2BfYGRhXmNlY19fXFteXF1eWltbXV9scG5oZmtubnJ8pMe/ubi1sKutp56iqaeeq62zraqsqbSut7Gzqa6mrLO8urbDubq6sau1ubu0wrqwwLG+vLu2u8e5wratqqiwssC2uL2wsaiys7W7vKuutaautq+7srCqubCtu667uLvAwL65wr/Hw8XAvMbCyMq4xcfFv8fEw7rExsK7xsnMy7O5wr27s4lzdnZraWFibGhZWFdbQUxLTUlFQUM/RkE6OTo5OTU4NTQ6Ojk7PD07Ojs+ODtAPD05Ojc5Pjk7PDo4Ozs6Pj05QT0/QD87Pjo7PDo9PDw4OTg5NzY4PDw9Ozw6Ojs+PTs/Ozs+QDyKwKuouLe5w62zqZ2ZlJaZoZymsLWxt6bFztLLw8XBxdDHzcHDxr/ExMPDysLJyr/AvMK6s7S1w66psJFban+Sh46Pe3h9iYV6e4SAd25eXVxcXV9gX19kY2FkY2JgX11aW1paXVpaWlpcZW5vaGZnaWtucoGtubC1rqWkp6eaoKShmpylrK6kqKKrqq2rsKOmn6qttbaxvbmvt6+orri0tLy4tLyvuLm1srzBssCupamjq7Gys6i9qquoq62ttLOmqK2hpK+psqanqK6mqLessbK3urq8sby9vr7Ev7XCwcfIt7/AxbfEw7+7v8TCvsTIzMq/v8TAwKmHc3RyamldYW9jV1ZYUEhZUlNLRkZFPj5AOjc4OTc3NjQzNzo5OTo8Ozs8PDc7PTs7Ozw4OT44PTs8Njo9Oz89N0E+P0A/Ojw8Oj05Ojs6Nzc3ODg3OTw7PDs5Ozo8OTc5Pjw+P0I7jMKvrry3ucSwtrCbmZWcmKqpsLGztb2vxdDPzMPIurrLwcq+u8m2vcO+usq3wcPBtLa8trGvtbutqKuTZW2Ig4eLgHt9f354dH58c3dlX11cXF5fYF5fY2NhYmBhX11dXFpYWVtbWVhaXF9ma2ZkZ2Voam9yhamlq6Wem6GllJ6lm5iRoaOqo6Ogpaanpq2gnZykpqyysLa3p7CsqKq0q7S6sba2rra5sq+6urG2paCkn6axp6uouaqkp6eop7KtoKemn5ukpqyen6ekoKGxra2ssrSztLC1vLa7wcCyur7DwbK5ucOzwb3Atbi8vb68wsfEw8S/wMSgg3hwbGJmX2tvYFVZXkhOZ09USEVLRjw9Pz06Ozs4MjU1MzY5Ojg7OTo6PDo3PD88PDs8ODg8OTw6Ozc4Ojo8OTg+Oj89OTg8Ojs9Ojc3NzY3ODg2NjY7Ojo7OTo7PDg1OTw6Pj5AO43ItbW9uLrAur22oJ6VnaGmurars7O7s8TPycvCxri2x8DMv7jJt7vFuLPEuLO/wKy1vLKspa+zraGjkmlxhoWGgHx5dXNvbWpqaXBpXmBdXFxcXl9fYWNiYGBgYF1cW1xcWFlYWFhWWFteX2RjYmVnZ2dqbW+HnaiflZWaoZaco5mWjZ+ho6ecoKCkpaKnnpujm6CrsK2xtqOpqqqsrKS0ua23sKyzta6zta6wqp+en6OisqSmqbitoqamoKisq5mfoJ6ZnZ+lmpmjnJudr6mrp6qsrK2xsrivuLm7sLa8vLqrs7O5s760trKxtrW/tr7AvcPCu7q9l4R6c2xfZV5kZFhUV11JV1xLUEdJSkdBPD8/QDs/PDA0NTM1Ojs5Ojg5OTw8Nz4/Oz07Ozg4PDg5ODw3ODo7Ozo7Pzo9Ozc4PDo9PDc0Nzc2NzU3NDY2Ozc5Ojs6ODo5ODo7OTo8PzuJyba4vru3wcHBtKSkmZqkpsCyr7astLfGz8jIwMa7u8PDz766x7i4v7eywrSxu7yrubqxop6pq6eXnpBtfoWGf3hybW9ta2JeYWZmXV1eXV1dXF1fYGFiY2NiYV9cW1taWllYWFdXV1hYWFpeYmRkZWZmaGlrcY2nnJOUlJuYm6KXlpGcoqKonpydpaeipZygoZuZr66urrKgpqKuq6eitbGysqyor7OnurOmtqCinpyjoa2joqq1qqKjpp6lpqOWmZ6XmZudoJqXnZ2dnK2iq6ekpKatq7O0qrWws6uyubSvqq+ysrO4s66prK6yuLC7trq9wLizsZSFeXVmXmVeW1lWU1pVS1tRS0lFSEtJQj0/QUFAQToyNDUyNDk5ODk7OTo9PDY9Pzs8Pjs3Ozs3Nzc+Njo+Ozo4Oj07PD06Ozw6PTs4Nzk3NDY1NTQ2Nzg1Ojo4Ojk5PDg3Ojg5PkA6gci9t72/tr68v7OdpaOYpbHCtba9rbS4wszIxr/FtsHAxs63wMS9s7m5s7+2sbm7rLK0r5+apKmflJqPeH+DhH94b3F0cWhlY2hkY1xcW1tdXVxbXmBhXl9fYF5cW1pcWllYVldXVlhXWFdWV2FkZWNkZWRkaGp2oZuTlI+Ul5egl5mVl6CeoZ2WoKGppJ+fqZ2bm6unr7Crm6OkuKqhoK6otqqnp62xpLiwpLegopuZmaqmoZqsuK+ioaScop+gk5ShlJaWm5iXlpeclZ+qnqmkop2jqqqwrqi0q6qnrbOwpauus7GwsK6vp6iosq2xtLC8tLq4rqOUgXl1ZF5hVllYU1JUS01eTE9LR0dMTEU9QT48Qjw7NzY1MzQ5ODg5OTo5Pjo4Pj47PTw8Nz49Njc2PTc7PTs5Nzk7Ozw+OTk6Ozo4Njc2NTQ1MzEwNDU2Nzk6ODo5Ojo3Ojs5OT1AOnbAvLS5wrG+uLyunaeoo6q7wL3Aua60uMHMx8XCw73FuMjLssHCwa28u7W7vLW5ubCvsKqcmaGolJGKi4CAfHdxaWxydHBoaGVkZmJcXFpZWlxcXF1eXVxbXF5cW1xZW1taWFZXV1ZXWFdXV1ZbYmNjYmNiY2RmaYGWk5WLkpSUnJmdlpacoJyflqCfp6akpqefnaCmoKqvpp+ipLeooaGiqLSipailsKWxrqy0nqGdlZWpoaKUrbGxn6KjnZ6Ym5OLoZSRk5iYk5eXmJeep5ynoaKapKWlq6SlsKelo6urraaprq+uq6iqqrOmpqyvtLGvvLWxr6+gknp3cmVhXFpdWE5MUkhSYU1WUE9KTU9FQkQ/OT02OTo3NjQ1OTk7OTg4Nzs4OT0+Oz47PDY5Ojc7Njs3Ozs6ODU6Ozo7OzY8Ozg4NDc3NjMzMjEuLzI1NTY7Ojg7Nzg3Njw7Ojs7QTh4u7uxtb2wu7G4rJ6lp623u7zBxbqxubXEycnAw8bFx7bFxLLCv8Wrt7e9tr26urWyq62omZifo4uJdImIfnZuY2FmaWhmZ2lmam1gXVxbWlpaWlxdXFtcXl9cWllbWVlaW1dVWFdUVFZVU1VSVWBgX2BhX2FhYmVqgJOTiZCOlJOUnZWWl6SZoJedoKWiraalpaOko5yqq6Wan6WxqqChnqWrnqiinq2sqamuraKiopWYo5uckKupsJygop+el5mTip6RjZKTlpCYmJScoaOdpKGilaCipKabo6uloqSqo6uupa6yqaalpqa0pqmorbO1tLm6r6qsnoxycW9gW1dWVlJHUU9IWltPUklUS1NMRUZJRDg7Oz08ODY2Nzo5Ozo5NzY5Nzc6Ozo9PDw2Ozw4PjU5ODo4ODY1OTo7PDk3Pzw5NTc4NDUyMTIxLi4xNDI2Ojg2OTg1OTg5ODk7OUA5e7W0rbS7srCrsq2dqKevubmzwMi6tcCvxcjMusHKzMi1ybyxvsPIrLG4wbW7wLu0tKqsppWam5yIgHKIg3t0aWlqbGdqa21ram1lXVxcW1tcWlhaXVtbXmBgXFhYWllYV1hXVFZWVVRVVVJTT1FZXVxdXl5fX19iZG2Oj4SRh4+QjpqTlZKcm6Ocm6GoqauorKeppqSZpa+llZmlr6qgnJmboJ6vmZyrs6Clpp+jpKGUk5uWlpKpqq2anKChoJuUkIyZjoyQjJGNlpWQnaKgo52co5WboKOhl6Koo6Koq6CrsKStt6WjpKKtraqoq6+zt7O+tbOrr5iFdHNoW1lZU1VSRVhMUVtYTVROUExQUUlOSUI9Pz9BPz03NTc5OTw8OTg3Ojc5Ojs8PT47Nzs7Oj02Nzo7ODk3Njk4OTo2Oj05OTU3NzU3MDE0MS0rLzQzNDk4ODo6ODo6NzQ4PTg/OX6zraeztq6oqK+um6morLe2rLzKu7a/rMvGxbjBzs/Is8S6t7vCyLCtuL+3vL27s7WlqaCWl5iXh3p0gHZ3bm1obW1tcGdnaWdkXVpbW1tbXFtZWltcXF5fX1xYWFlYV1hXVlVUU1VWVVVTU05QUVlaWlpdXVxeX2BkfoyBi3+Lj4mSjZeRl5mioJugrKqmr6yosKWpmp+toJWWpKmonZiQj5qerpeYqKqZn52UpaGekpGSkZOVp6qlmpmZnp6WjYyLk4aJjYOPi5KVkaCeoaSYlZ+VmqGinpSbpaWnqKigsbGmsbynn6Kstauup7C1sLi1wLGtsauRfnJzYlZUVU5SSkdWUFJRTExXTUpMTlJHTUtBQ0ZEQz5BNzU4ODk7OTo3Ojo3PD06O0A+Ojk7OTo/NzU5Ojk4NzY5NTg3Nzk7ODU1NzY3NjEzMjAtKi4xMDI4Nzc7OTk7ODk0ODs4QDl/s6ylsbeqpaKxq52qp6mysaS2xrS5urPKxbm6wcvQyrG2uLu9wcOxr7G3rbSzu7O0oqOcnZeXlIN/d2tnbG5xbnFqcGtkZWdlXlpZWllaWlpaWlpaXFxdXFpYWFhZWVdYV1VVVFJTVVNWVVJOTk5SV1hZWVlZXFxdYWqAen91iIyGkIqXiZSTmJuZnqmboKumpqyeqJqgppyTj5+jm5eXhYSSm6OQlaOdlpaWiKKbm5SLjoqQmqSnnJWVl5uRkoeUjouBi42AkIqSkpKgmqCilpSYmZWippmNmaSmqKahoLSyp7K3oZyit6yqrqSysqa1vLWsq7GjiXlzbV1OUVFMT0NNTk5QS0ZOTkpKTU5RSE1KQUdLSEhDPTg1ODg4OTo7Njk6Njg7OTk+PDg6Pjk7Pzg3ODk6ODg2ODU3Njg4OTc0NTc3ODIwMzAxKyktLzEyODc2Ojk5OTk4NDk4OEE3d7ampLawpKekqqWgqKals6qissO1tbKzxsa3usPKzMazrLq9tLfAr62psJ6mrbqvrp+Zmp2VlId7g25fX2ZycHVxaW5pZWdoal9YWFhYWFlZWVpaWVtbXFxZWFhXWVlYVVZSU1JQUVRRU1VRTU1LTFNXV1ZYWFhYW11hb3N2cISIgoiAkYSOipSRlJ6hj5uco6KkmKWXopyVjYeZmox0jYN+jpeWhpGakJSOjnuZj52Mgol/iZifo56Qk5iWhY2ClH5+dIqOepCHk5CQnZuampKWkJ2Oo6OOiZqgoaOkm6K0r6yvrZ+YpbimprGhsK6csLuqqa+qmYN3c2NWTVJPUE5DU05MUUxCUFFISU1STUhKSkRKTEZKSj03NDk4ODg7OzY5Ozc6PDk6Ojs3OT85PkA3OTo8ODk3NjQ0NDU4NzQzMTI1ODUvMDEwMikoLC0xMjc2NDc4OTo6NjU6ODdBN3i3oaO0qKalqKOmpaemp7OnpbTBuLC0sMnEt7nBzsa9s6y6wautw62noaaSnaa2rKOgj5WWko9+eH5lV1ZfZ2ZpZ2huY2poZ2JcWFdYWFhZWVlZWVlaW1tbWVlZVldXV1NUUE5QTk9PUFNUUU1NSkhOU1NTVFVVVllbXWlscmx/hXx0Tlhyj4KXho2dl4uUkZ+YnZWUlpWPlomAk4pfO1dvfIyUiYCMkoyQhoZzioWXgXmBe4aTnZODlY6RkIOGfZN4cXCFjX2JgZGNj5eamZOLkImdiJ+YiIeWnpqhoJenrqmtqaielq2zoqatmayrmKizoqmto5N+cm5gW05TUldMRFRKUExMRk5PSUVMUU1LT0pJTFBGSUk9NzU5OTk5OTo3Ojs6Pj44Oj09Nzo/OD4/NTg5Ozc5Njc1MzMzNzYwLi0vMzQ0MTEwLy8oKSsrLTM4NTQ3Nzk8Ojc5Ozg2QTl5t6CjraGmpqqgp6moo6qwqKe0wbmwtbDHwrezvc+/ua+utcKnqsWpo52Yg5SbsaKamIaUj4uHfXN1XVBMUlVZWlddXmJnY19ZV1dXWFhYWVpZWFlYWVpaWllYWFZXV1VTUk5MS0hHYlxNT1JNS0hGSE5RUU1QUlRWWFpgbW9pe4J0UUJAf5WSkX2JlY2Eio2bjpaViZKIhpWGeYl/YEpRbniLkoR9hI2KhX9/bn5/lHh1dniEjZlvUY2IioZ7fniUdmd3hoh9iomVi42RkpeMhIqIlYSajIKEkpqWnp2UpKOoqaWknpqwq6GkpJGmqpaiqpyipqiJdW1mXltIUVFTTUlVTVNJTEtPSUhGSk5MTVRLUVBPRklDPDc2ODo4Ojs7ODo7OD4/OTk+PTg7PDY7OzQ3ODs2Nzc1MzQ0Njk2LzMvLjEyNTIyMS8sJykrKiw0ODMzOTc5Ojk5Ojo6Oj85d7abo6edn6GvoaeopaeosK2qtry2t7ezwbu2p7rIuLaoqLW2qrK8pp6VjX+Jk6iWlYp+joOCfXhwblhNS01NTktNUVdbXFpYWlVVVlZWV1lZWFhZWVhZWVlaWFhWVldVU1BNSkVAQJtrc3NJTUpERERJTk9oWU5RU1RVWm6Dc3Z+amlcVY+JlIl0f4aBfIWMk4KSmouPe4aPgHaAeHNvdnF0jY6Ben6Kq4V5emh2e45wcm14gYuNknh6gHuAdnJykndodYSEhIV7lYmIio2LgH+Ei4yAlIN8gI+YlJyWkZ6dqZ6foJ2gqaWenZiMp6SToaCWnp+kgHJoYVxdSldQUkdKWFJPSkxNUkpKSkxQSUxRTFJUTUVIQTw3ODs5OT49Ojs8OThAPzo6Pj03PT03OTkzNzc4NTY3NTI1MTQ3Mi8yLiwvLzIwMC8tKygoKS4xMjcyMTk4Nzk4Nzc1Ojw7N3aumaOimJyftKmvqaWtrLCyqr20sru4trq0sZ+3urKqnZ2sqaiyr6GakY2UgI6cjpF/doZ4fHZvb2lYS0hJSEdFSEhQVFRUV1dTVFVVVVZXV1dYWFhYWFhYWVlXV1VWVVNQS0Y+OTNOPH6eTUhKREA9QURqlH5MT1FRU1ZedIJ7eGZ3jZeYjY99aHmBdniAiZB9hJiSgXKHj3x3e29rfq18c5CKf3uGkoF9f3RmdnyGbG9oc32JjIiAbHlxfXFtdo9xaHGBfo5wQ4uEgoOFf3d3eouFfYx7dX6Oko+YipKam6OWmZ2anZ6hnJaNiqSbjp6XjpaYkHdvbWViWlhYVVFKU1VUT1BOUFZLTktOT0pRTkhPT0xGRDw7Nzk7Ojo/PTk8Ojk5Pz87ODs9Nzw5OTk5MjY2ODU2NjMzNjExMjI0LiwsLS4uLTAtKyonJyouMTM2Mi84NzY5NjY1Mjc5OTV5ppegnpagpq+srquoqbGvsau8uKy7vrmzrKebsKesm4+WnKWppKCXmY6FknmIjouKdXF8bXVwam1qWEtGR0VBQENESUxMTVFSUFFTVFRUVVZWV1dYV1hZWVlZWVlWVlRTUUtENzhmNzA/qGlOSEM9OzpEioV6WkpOT1FUWF1lcHJsiKeqwH51eWN8eG98eYiQen2Lhm9tjJJ5dHhqaoCCcZaRi4F+loBJk5huaHd+gmxpY2x5hZCShmtzbHxucnuGaW1wf3ONiYSGe31+e3ZvdHOFgnmBeXB8joyKlIOWl5iakJKVl5mXnZaMg4mekYuSjYaQloBvam5vblhWWFRSUVlPUlRUU1hVTU5ITktNTktDSE5HRT86ODk7OTk6Pjw5PDs6Oj0+Ojg6PDk/ODY4NzI3NTY1NTQxNDMyLzAyNCorKiotListKigqKCcsLTEyNTAsNTU2NzQ4NUhBODk1d5mRm5man6WtsKOsqqi1r66stL+rvMK/pqKZlaSXno2Ei5ShoZiYkZOLc456gIaMhnRvdGtxbGRsallOREZDQDw+PkFGRkdLS0tNUFJSUlRUVFRWVldXWFlaWVlaV1ZUU1BMRTFAmjMganNDmW87PDk1PICChl9JTU9PUldaUVlcYKeIYpppdHplfnBtf3qLiXaCiIZ0bJqRdHN8amudj015hZKJhI5nMXaGc2x+foN0ZmV0foSEhYBmaWx1a3F/fGhxcXxuk46PfHN9fHFwbnZtgn93eXVqeYmCiImElpKSkIuNkZSUjpeNgHmIl4iGioaAkIh3a2tvaGVYUVpXWVlbTVBVVllYTklIRUpKSEdCQEZEQ0c9OTk4Ozk6OTw6OTs6OjpAPDk6PDk4Pjc4NzcxNTIzNDUzMzY0NTAzMS4qKispLCwrKykoKycpLCwyMjYsLDU3NzU0NzhpTzg7NW6SiJqRmZakqK6esp+nu6+rsrDCsbvDx5qWj5SZi46GeYSQmJSNkIyPhnGHgnSHjIZ6cHJwb29kcGZfVEZJQz88Ozk6P0BBRENFR0lMT1FRUVFSU1RVVlZYWlpZWFZVVFNQS0U4MC9cYLNHOVhQOzk0NDGWuotITE1PT1FWTEFJUUlir7Ogcnx4bX1scYOChYF6hIaGeXKhlXR4gHN1lIc1cZ2onY6hoYSihHZwhnyHfHOMrY2JgGdnYmpucm1wg3Vpb1h1cI6bkndsf3p9bXJucIB6c3ZuYnaDfoaAhZCQioqJkYuRjIuOg3V4io6AfoOAfY97cnBwbGBbXF5cWVhhX1JOW1pYV0xISkZKRz5CQUJHPkNEPTs5Nz07Ojs7OTo5OTs6Pzw4OD06ODs2NjY1MTEyMTI1MzQ3NDUzMS4vLCwrKSopKSoqKikoKikrLzNETTIxNjY2NDM8dlI3PTdikoGTiJaRnaSnnq+VpbWqrrGuwbK7wcaWkIyUj4CIfW6BkJKJg4qHj4V1goRslYiIe3R4eGx3bndjaV5KUEc+QDc0NDk7Ozs9PkBCRUhMTExMTlBRUlVVVldYWVhWVVRTUExFPDUqnUtbQC1nSTk0Lz+Sg6muX0dMTU5QTDdDTVJTREqGdoB8fHZ+bHeIiHx+hYN/jH52opl5foaBhZmFm5xhhqqfnYuDkI16d4h+iYiNc4qXkIN6XWRydHp8d4ptaGpieW+GkIJ6boF3dIR6cHR5d2tuaV13h3yHfIeHj3+LkpeDjYWMhn1xhH+DfXV3e3yJd3BzdGVnX1tbXlRcZ15XUVVYW1VHSkpETEc/RkBEQz5BQT06OTc8Ozs9PDo6OTk7Oz0+Nzk+OTk4NTY1MzI0NDAwNDY0NTU1NC0sKSsoJycnJigoKSkoKCsrKy8wMFVxPTIzMzMxRX5XND05XIx4ioCUjJKcnZ+mkaCroLGor8CxusW6lo6RlId6hXZrf4yRgn2KhI6MeIOAc6GEi319gX9wgH56Z3ZrUldMQEUyMTEzNjc2ODg6PD5BRUdGR0pLTU9QUVNUVVdWVlZUU1BNRkA6Mj0gI5ZjjFs1MzExaT9Hb0lGSUxNT1JMS1RdWVJKaYSIe4l5fHF8j4x6fYmHfpeHdqGZiIePkpSljaypSIaur6+LgYCTioKLgYSSqIeAmJiKm3RtfIGGh32OaGdoeH9uhYeChXGEhkdsgHdyeXZobWtfd32DiX+IhYt6lZ2biYuIkX96dYt2fHhtb3d9f3R0cmxbXV1bY2NYZ2ZcVU9QVllQRExLRk5JQ0ZDQ0FAQ0E9OTg4Ojo6Ozs6ODg4Ojo/PjY7Pjc1OTU3NzMzNDQyMzY2NTY3Njg7REZMTU1MQzcrIiUnKykrKywvMDArbnUyMjQyMEyBXDU9PF6EdHx9iYWIkY+WmJKXoZ2soaa4r7O8s5eNkouYi310cH+Jkn59jIKSlH2Gfoakh4h/goiFeIeIfnOEeF9jV0tCNjAuLzIzMTIzNjY4Oj0+P0JFR0hKTE5RU1RVVFRWVVNRT0dDPzgwLCOHWz4/ODQuXZZwc6NVRklLTU5QV2BZcFpcXmqNk4eVgISChZGTfoWIkYGalYKhoZiVm5qlrZOau7Gnu8fDqIuMoaWPlImBkXxxg56fkZx/doWFipCIkGlob4OAdIyHhItxhYJ3h397doV9bnZ1ZoCUj4aJiYeIh6GqopaJjph/eoKJenlvZ2t4fnp+cmpkXlpaXWpdYWZgWU9LTldSUUhQSkROR0NKREJARERBPDo4Nz08Ojw6ODg3Nzg6PT04PD02ODc1NjYyMzQ0NDU3Njg2NzxCQj88ODo+Q1FeZVxHMicmLCwtLS4xKD+LWy4zMjBPg180PztudXBmeIN7gIyAgZGOipqbpJ2hrKarr7CXkZGEoZSEeHd/jJR8f5KGkpV/ioCSm46DgIGMi4KJjYN/iX9tcGpdQkE0LS0vLy4vMDIyMzQ3Nzk7PT9CREhKTlFSU1JTVFRSUE9IREI8ODcvOUQ+PDw2My5sk5dNUEhJS0tLTlZgY39nZ211nZqPmpOTi42OmoiTj52LoKCSo6qlo6yTqLaiqMHDrseveLqUmnyNoZ6ZhJOFgo+hn5OYkoSLhY+ZkZZscHWJi4KWjI2Pd4+EcW2FgYqWkYOFiHKIoZaHk4mOj5altambjZWig4eTg31/a2prfICBgXNhXWNeWmZrXGxrXldLR09SUU5NTEZJUENETUZBQ0VHQj46OTc9PDo7Ojk4Nzc2Nzs6Nj06Nzg1NDU2MzQ1NTY2NjY4NTU2MzEwLiosLCkoKS46UGFcQCwoLSsrMCwncog3MjQwT4RiM0A8dW5nWXCCcHWHcXaShn6XlpqVnp6cp6CplpOYnmdlpJp+hJKReYCSiJCSfYqEmJKRgoCAi42JhZCGhIiFeHh+Z01SPi8uLiwvLi0vMDAwMjEyNDU3Oz9DRU5QUlRQUVFTUU5QSUVEPjs8OkNGPz48NzUyPD9SNUhISExMTU5SXm+KfHOBfaCdnKilopmhl6KVnZ+onqiroKisqaq1l6u/q7bIyLfJ0c++m6Bwaaupn4STkoWcoZqbmaeRkYmVopqaeHp+lJiSoZKWmIGUnnt3lZKrs4iNl599lJ6cjpOWmaSiprawnZGZqIiWj42BiGxzcnx/fHFoYFxgXmJnY2BoZ1tSRUpLUE9JSkxGRk1DSExGRkNCR0VBOjg1PDw4OTk5NzU2NTg+NzU9ODQ3NDU3NTQ1MzY5NTg6NjE2ODYzLzAuLSosLy4tJyMqO1hiQigqLDEtKEuXXjA2M1GFZjJBQGlhXlBwdWBufWF3jn17lI6Oip+Sl56Wm6qYnqpCRH2HiYeYjXiCjYqOjXyKho+QjoGCgImMioSShYOGiYGAhndfYlA0NjAtMS8sLjAwLy8uLjAwMTU+QUFNUVJTUFJTVVJOU0xFRUA8Pj1HR0BBQDg2NjI8OTtGSEdJSk5PUVlthpB3lYujp6q0vbikrqysp6i0q7C2srKtu7Gzvpyzw6y7ycu3w7+4paOwsqytqqOLlpiFpqago5eBppmNoqqopIiFlKShoKqhpKmPnLGLlaOnt7uboKOwk6Odo56RpKKrr62ztaKUpKqImYmSipV5en6FfmdgaFxlYl1kY19mZl9aT0RJSFNPRkhMRkpHRUZIQUtFQ0ZHQTs4Nz08ODg6OTc0NjU4PDU0PDc2OjQ0NjQ0NzM5PDM4PDIwMjU1MS8xLi0qKi8sLSooKiYlNVhYLywwLCwwhIE4NzFQhWg1QUNbWFRMaWNXanBYeoV2gZOFiIKbg5KRjJLayJ2Wc1aXiI+InI98hoyOiop6h4KHkY+DhYCLhYaHkoaChImGiIeHcW5hQEU2NDwyLzExMC0sKy0xLi0zP0RBTVVRUlNVVVdVTltQR0dFPD4+RkhDREA4Ozw1Qzs9RktJR0hST1BXgZOghK6js6qxwcfDqrPFtqyzv7O4vra/tMG2u7ukuMaotsnHtb65tKijtK2xsZuZkpqfiaivq6WUdp+kl6GrsbOZlqqtqK62u7K6rK+1orGssbW8t7WutaCnp6OomqmwrbK6uLinm7apjKWOkZOfhniCg3VZYWRWZWFhY2BhZl9bVElERExVUUhJSkRJR0VBQEBKREJNRjw4Njc7PDk3Ojk4NjU1NTcxMTw4ODk1NDY2NDk3Pj0zODkxLjAxMjExMzAsKiwuLCsrKyooJyopRVowMCovK2iSTzYwUodqNkFGV1FKTFtaUWNkV3l1cYGUfYWHk3aFf4CMe7+7o7yCtJSTjZuPhIiPkomJeYaAjJONh4SBjn+BiY6GgIaJhYqHkXp4bl1WQEVNPDY6NDZBQjc2NC8vNkNIQ1FbT1FVV1VcVk9eVUlLSkFAPkdLRkVEOz5AN0Q3P0JKSkVGV1RQXo+lrqOxtMO2uMHMyba7xL2zs8C3t8G1v7C3dLGzprrFpLDGubGzsbSopLW2qrGgopabopKlsK6mraunpJigrLO6oqmyurS7vsy/xcW9vbPCt7q4v7e6t7msrLCmsKqtvrC9u8LCrJm6qJSuj5eXq4l9gnxqV2JhV2plamVXW2RZVlNJR0ZMUUdDR0lBSEQ+P0JCS0BATUM5OTY2OTo/Njo5OTY2MjQ2LzE5NTk5MzY0NjI3Oz0/NjoxLi81ODo5NjUwKigsLS0tLCwqKCgrKyhFUy8qMDBKj2s1MlCHbTY/RlJMQUxSV1RZVVp2anB/j4SBjoRuenN5h2K4oZmiiJWTlpOUk42QlpKHh3uGgY2WioCEgYp6fIuHhnyKg4GKg5V9eHp1ZU9cZEdFTDpRY2FbXlNGPztIUERaY1FRWVhaZ1lUYGBNU1BFQT9JSkhFRkFAQzxFNkI+SEdKTFNaVF2Tr7i1urjJv7q9ycy7vMG8t7W7u7e9tLqxxmF1sqWxmp6qvaqlqKuqo6KytaGrqJ+Vlp+Yn66lp6aln6OUoqaxtKeysr22wb3TycrTxsLFy8HKw8C+vb+7vLe0r7i3tsO6xb3DyLCeuaqiq46lqLaJgX9yX2FiXVdhX2hmUlhhVlJVSUVFTktBPkdEPUtCPUJAPUY9O0hANzk2Mzc5PjQ4OTo1NzA0NS8yNjM4OTM3NDQyNj84QD5HS1JUU1FQT1FRUEpBOS8sLCwqKygoLC0sL1A+KC40OIB9PDJLiHE5PkNLRUBJTVBSTFFdZ2xscZCNhZBzbHJyc4jVwLWZoI2VmJmRjpeSlpaOhod9hoOMlop/g3+DeHuLg4d7i3mBioKXf3R9emtlcHVZXVxQZWViYGVkXVtYV1xNZG1VUm1tX25fWGdlVVlVS0RBS0tIRklISEdCSTlEP0hLVFRWXFpbkrnAuL23xsC7ucrKure6tri5sre1tK62tplkdaicrXBeoa2cmKCim6SeqqWUoJ+QlI6WmJeon6WfnpqahKSdrKWqsKy3sL251NHP18/JzNHMz87KxsC+wsq9wbzBwMTExcq/yM60pLuwtK+bq7m8mn96bF1gXFleYVljY1FcYFNQS0NCRUdFPEBFPkFIQUBEPTpFPj1KPzQ3NTM1Oz00Njg5NzcwMjIvMjQxNjk3NzU1NTVEM0VMTT41MS8wMDY6NDc3QElPSTstJioqKC0uLyxATSsvNTRtiUkwSIl0Pz5CREBDREZLT0RSXFlpX3CXkpCUb2xvdXWHs6yhoZ+LmZyZjI2VkZuShYqKfoiGjJCLiXyBhHN7ioOGe4l0gYmGlX9ze3hrbXV7aHJlaWxpZmppaGBmaWhsWm50l62kvIiHZ1tvaF1aWlRIS05PSktRS1RRSExBSkdLUF9eYmZpYZe3x7C4s7u9tbHEx7WwubCwu6uysaeqt6yNtqedm6eaT5qdjI6glpGmmKWVipOTiZCJj5GRnpuhl5qVloeemqabrK+or6eztNTU1NbSy8/U1c7Tz83FwsnQv8rJysnRx8zNwtDSuLDDvMS5pba6xKKCb2NcXF5YYVhZZVpRXVdPT0JCSEVCSTtBQz5BRz8/QTg7RD5ASD00NjY1NTs6Njg3NjU0LzEwMTQ2Mjc4ODc1MzY3QzVCOD8tMC0xMzQ5PTk3LC4sMTtGSz0pLCguMDAwN0s/LTQ2VIhXMESHd0M7Qj5FQkFDSk0/VVlTZVdzkJCYgmhxb3l5g6CqnqaXjJubl4uOlZGajn2Ji4SOioqLkId8hIJwf4eBhnuHcoORi49+cXh1a3F4fnF7bXhzbGmBcG1jaW5weGl3fH7Lv8Lfp21jeG5jW2FgSlBSVU5ZXlBeXU1QTlRRVVRcbm52gnKXrbiss6ewtqqsvMCxq7WmpLimq66hq7SjjrGumpiYjJGTkYSOm4GNp5KciYOLhIqJhIuDk5WYl5ObkZyYmZmenquspKehrK3P0tXRzczS09TQ1NHOyMPU0cjN0tPT183S0cXS1sXAzsfHw6i+t9Ceem9mXWJdV2BTXVtPUFRQTkg+QUZBQkU8QEI+RUQ+Pz86PT08PEpBNDU0NjU8ODg4NjY0NDEyLzAzNTI2NzY4NTMzOz08RT1AMTErLzI0OT41OTAxMDIyLTJETjMpLzMuMzI9TjIzOEN9XzJBhnREOj09ST5AQ0ZIPFZSTU9bdYaFindsd3B9fn+hnp6hi42Zk5OMjJOPloV5hY+QjYuKiJGHf4J7cn6AgYd5hHWFkpGJf292cmtzfHt3fHOBd3FrgHNyaG9xenlye77Lm36MsoN2coR2aGFqXUNaWltXZmRYZWtTWF1dYGReY3h7fouBmaqkpKGfoKilqrC4qqW0o6GtoaOtoqexn4mmmpSSkYmRjoiBlIlrlaKNmYSAhX2Rg4OTlq2LlY2VmY6FkpCdl6ewoaChpKSoyM7PyMLL0dTR1NPO083G1tLM1NjW1tjU19XJ1NrNydfX0cqsxMPLi3NvY2BfWFRaU1xQSkdJSkpAOzo7RUJEPEJDPkhCPkJCOzs5PDpHQjQ2NTQ0PDU2ODc1NDMyNTAvMjU0Njc0NTU0NDw+PUU/QTYyLy0xNjs9MDgxLzI1NC8tLTtSMDE3LzUzMkZEMjg+bmI1PYF0TTk5QEk8QUQ/QTtQTEZLWXCAdX1oc3hygomAnZWdlIWLlomPioiOh49/eISTmYqNiIiLiX6CeHN7fYOHd396h5GWgINueHBtdX92eH50hXx5bYd2dG59doR1eXudtow8QYvGpX6NfGllVklDZmNlY2hqZG94W19maWtuaW6Ag4mRi52eoJ2Ql5ifo6SmsqSks6ChpZ2gqaCisZyGnpKSkpCLjouGg5CEfpybjI2DhIV6lH6CqZWjjJKKl5KLfZeKmpGqs5iam6ecp73Dxrm2xs3S0NLQzNLLydTO0NXa19fY1NnYzdjbzsna2tLVv8vMtHh2b2VdWVJWUVpWRkdKSUVFPTo3OUBBQjlHREBFQ0FEQjs/Ozs3REM3NTY1NTswNjg5NDQzMzQxMDE0NTU4NzQ0NDQ5QD5EQkM8MzMuNkZUV09RSkFKRj8xKiguQlMzOTI1NC83Szc1PGBiQTxzdlY4N0FIOj9DPjw5UUVDSlRsbm9wYXFxc4aNfJeRnYt+h5KCiYaFioGHfHiFlpaIj4OHhYd6hHhxenuEhnV6hY6NnHqMcHxvb3p/cXyBcYOHgG6OenV3fXyCdX98h4iwdFmpwraMkoJwbmI9XmhycHFwbnh3gWVpb3J1eHJ6i4eOlJKblaCVh4yTm6Cbn6qfoK2coZqZn6Wen6yZi5qMkZGNhH2Ih4OFi46fmZOIhId+bZl5hJiGiJOMjpSMhnubiJOPrqqUlZeemKeutb2prb3Gy8jJzMvPyMPRytTW2NfY19Xb19PZ29bQ29rR1snUy5V5e2lpW1pQUlReSEJFSUk+QT09Nzo9Pzs9Rz0/QUFBREE+Pjo4NkRCNzU1NDc5LjU2NjQzNTUzMjMyMzY0NzU1MzQ1N0VCRENFQjU2PEZOU01bbmZjbnNrYVY+LDRMRzg2NTQzNEJGND1XX2hMdXheODs/Rjw8Qjw6OUQ/Q0dSa19tZGJma3aAiHGRkJqAeoCNfoKCgYR+g3x8hJeOh4t+hoaAd4J5bnt7hoF1epKejaB2j3WCdHWBfXSAhG+Bj4FvkoR0fIGFenaGe4m3xqXCybeBlpuPd3BlTmZjgXqBd4aikIt4eXd7g398hHVuk5aUlY+YkIOKj5aal5elnJegl5+TkpejnZmrlZCQio2RgoyFiYiBhZCRnpyZiYWLgYaYeomIn5ePiI6KjIJ8oYmQi7yhmJOXmpyppqWun6i1vsDAucfJzc7FzcnR1tbV2dXX29TX2drb19va2djO3MaGenpoaWRgVFdWVU1KRE5EOz08PDk6PD45PUA2PT9APD8+PDk4NjdDQTY0NTU9ODA2NjU1NDc3NDU2MTM4NTQ1NjQ1NjdISD1ESkU3OTI1O0g+Ozo6N0lQXVpSVVhLOVQ+Ozk1MzI3STg9TllNSHh4ZDU9PkM9PUA6Njo+PkBFUV9ZZWFdW2h0enlsiY2Sd3Z6i3x+gH5/fIV7foGRiYSFeoSIe3V9dG18fYZ+c36SnZGeg5J8hn54jn15iopugpqAdJiFfoGJhXx+kHqPqY+Qw6C8jJyjnH2JhH2Jc4yKfnOmmpyYlIV7j5CJhGhHcKCknYyLkJKFiYuQkpWPnJqSlJGXjYyVn52UoZSRjY2Qi36Qjo6LhIiSlZqfn4mMlJKekYKLf6WZiISOg4aEgKWGiou4mJ2RlZaip6Gdnp2jrra6tau/xsrQyMfMz9PS0tjS1dfA19jZ29ja2tnZ19y3eHh4bGpkV2BbVFBOR0NMQj09Pjk5Ojo5OTs9Nj8+Pjw9OTo7OzM3REA4Mzc4PjcwNjg4MzU3PDM3ODA0OTc2NzU1NTQ2RlA1RE5JODkzOEFLPTszQ0BJPDlEV048TVRITj85NjMzMz5DO1tYPjVZeXBaPDxBPD0+ODU4OT89RFJTUlheVVhmbW1taYGOinFyeYp7en98f3uIe3x7i4eCfnWDhnlzenNtgH6EfXeFm6GbnZSSgIuIf5iHgJySboeohXqgi3yRjoOIhJx+mpGKjaOin5CkrqCLkYuFi4GShldyrYufq5uPg5ibkJCOW4KikYKMn5OVjIeIjJKTjJSUlI+Mj4qIlpudj5WWkYuSlIaAi4iSjYmKnJaZoqKGkp2WoYuKiI2ckIOIj4CDh4WkhoyQs5idkpSXoaGemZKcnqexuKylvMLHzcfGz8zQzM7Xz9HUrtbV2NrY2trX1tnan298dWhnXF1YU1dYQ0BJRD4+Pjo0OTo7Nzo7OjM7Oz88Pjc7OToxOUc9OjM3PUA1MDY3NzI1NT82NTs1NTg1ODo1NzczNUhSN0dPSzk5ND1FSkI+MUZDTEI5ODpHWEA1SFdJNjYyMjM6RUNlWD8mX3lpX3o+Pjk8Ozk4OjxAO0JRS0tTWVBUY2J4bWJ+koNvbXeLeHl/eoF8hnx7d4aEf3NwhYJ6dXZ2dISDhX1/kqajn6Wilomdj5SXi4qol3KKsYyEp5GEmZOFmYuilqCYk4mbnaGSqa+fkZSQjY2IlYtujbeFmsTIspyhpZucmJaQspBkpM3Hlo+Fh4mQko6Nk5SJhYqKhpaam4+QlJOGlJeEf4+LmYiNkKqXl6OjiJmelpuJj4eXl4qEjo2Bf4ePpYmNk6mal5OWmaGZn5mTnZujs7Slo7zBvsfFxcnIycLK08zN1KjS0dbW1tja1NPazoJyf2hjX11eTkpUWkJBR0Q7QT04Mzc7PDo4PTY0OTo8OjgyPzk6MjlJOj42N0JDMzI6OTYyNjQ+PTQ7PjY5NDk7NTc5NDRLUTxKUUs5QTdCR0lANjRKRUxGPjw4OEVUQTc+XDg2MjE0OjtFYFhBRmF0aExjWj41Ozo6NTs6PjpFTUZIUldTUkJjgUZ1go99fG1+iHh6fnqBgYN+dnaAg3xsbot/eXx4eHyEh4t9iqOzp6OqsqGWp5+lpJaVrqKDkLiVkrOZjaGgjKWbr6OknZiQp5anma2vpJeUlpSQi5iZlqDAjqTJuKuboqatmJGanLKdhoWoopyYhYiJjpWNi5OOiIGGh4iTmJSMi5OThpSYhoSRkJx0kZmylpekoYicmZOPipCLl5qJipaOhn2MmJ6JkJCcmpmTmJiglKCdlZ+bobGuoqS3vrTFx8S9w8O/xs3KydKnzs3T0tDW2NPQ2LtyeXZcYFVfV1BISU5FQkNFNj46NzY6Pzs8Nz00MjY2OTc3ND01PDU8TDw+OzxCQTc1PDs0Mjc3P0A2P0A3ODQ5ODc7PDU1T01EUFJMOEA9RUFHQTU6SkVORUQ6NkFAQlM+OURPMzIzNTc1PXZcPFJcdGlaTV1TPD04OTU2Nj06SkZER05bXFlJZmA7SISLenpthYZ6fIR4gIWBfnB4fH18b3KNen2Be3iGi4mFg5Knu62osr2vpa2zs6ijorCsipq1naO4pJWtpJaprbempKOfmamYqaOvsKqamJyUlZGXn5eZu7utyaBptrirsJSYnqOrk5e+o16qsoKJio2Uh5F8jo59g4aOj5SViIeSlouPlY2LjJeYkp2ZtJaVq56Lm5SSjZCSjJmbipKekIuJlaChjZSNmJqdk5yZnpShoJScnaWvqKGls7irwsjEtbq9u8XHx8LRocbJzc3E19bRy9OhcHpoXVlTXlJPRkQ+PENBQjg/ODc0PkY8PDY8MzUzNTU0NTRCMzo6Qk06QTtBSEI7OkA8NzQ2PEI5P0BCODc0Ojo2Pjw0N1RLQ1VRSjc8OklBREA0QUpITkJBPzZEQTxKTkQvVD0yNTQ6RUpcWEpaUW1ncHBEaWBLSTY3NTc6PkpAQ0lQZUdiYGJwSUCLin6Bc4aHfYGIdYKKg39tfX18f3B3hneNgYd7jY+MhoyZqsLAr73Gu7O0wby0rauztoyosq6uvKqbu6Sorbm4q6amoqGjo6ivsrGrnZykmJuYl56ipaWRo7muqL+8rK2yuaWjp32IhpytvbCDi4yLkIOPg5GPeoGHkIyOnIiHj5eNi5WXlJGalp2nmrGakaydjpqPko6VkJCWl46RoJGJlZujrJSWj5ScnpSgnpuYoKGVmp6np6SipLCypsHHw7CwurbFxMK+zafHw8fDvNXRzcTKiHRzYlxaYFtNSkJMQEVHP0E/Qjs6ND5BPD01PTY+MzMzMjQxQTE3QEJOPkdAQ05DQT1DPTs4NkNDNUJJQjo4Nzg7NUI+NzlWS0RXT0Y4PTRLQEM+NEVLSE4+QUE2QkI/QlNFNThQMTQ1Ozw4O0Q+OUxqal07V1JkS2daVU83OUdFP0NGXGZGYGlnWl1bk4yMiHuHi4aDjHWGkIqBb358gn9xfoF6lXqRlJSYkJOVp7TGyb/CzMHDuce8uq+rubuXsra6ssCupcCkq6+7vKqtq6KinaeqrrSwqpufqpuhm5WfsLSni6K6ubXBu6upnLKlpKiUhY2pw8SkgouPh4iEhpWUjXqDjJGOkaGMjJSRj4mXn5eTmZWXpqCunYyqnI6Wj5KRlZWOkJWRj6GUhpefoLKelJqUoKGZpJ+aoJyglJiepqSmp6SvraXAxMOuqLe1ycO+ts6yxL7EvLPRysjCtXR5bVxYXGpTTUhETEtLSkFBPUNEPDVBRDs6Mz04QjMzMjI2M0EwNUlFTT5JQEhSQEg+Q0A7Pj1GQTVBVUA7OTk4PDdFPjg+VkpDV09HOD80TEBCOzVKS0NMP0I/PEJGPUFITDkrRzwzNjc0NjRBPzdPYU9hRS89PjZrbGpgQDpIPj9FQmZaTWVcZlRjapmNl4qMiJKQhol5hpSQgXKAfI1/eIeCgpB5jaGWqJqamLq+yMjKwdLJysLMvcGzrLu+p7q/vbzEt6zBqayyu72qsKmjpaOsrbOttrWgn6+epaKYo7S8qZuovMGjtravq5KvrKusl4aZqaalkYKMk6WViYF1ipJ5hY2RkJ6fk4+Ui5CNlKOZl5yVlKOeqZ+RpZqMj4+QlZaIfY+VkpKjm5Wgopy1ppCel6Wko6WenqaYnpWXm6WjqaiisqyovMDEr6Wzt8zAua7Es7u+wriswsPCwJhteWFYV1xbS0tNSkZERElCQkFDSzo0REg5OzQ8N0UuMTIzNTJCMjZTSE48SkJKUUVLQ0RFOkVMQjw3RVY9Oz04OT88ST86RVVJQVdRRjdBOks6Qjc5Sk1CSUBDPjxERzxCQ089MjBIMzY2MTcwPUI6PWpqSks1UVMzU3BwZE47RD1ARj5qSF9YYVpkZFaej52Nl46ekomKf4mfk4R3hX+Vf3+QiIqQf5Whmq6mo5jCvcjDx8XTzc7Ny7vCt6+6vbS8yrzDwbW2vK2zv7m8rq+ooKintq2tqbG3mp6toqehnau3t6mlr77Dsb25s6eqtLOtrpaWpKunoJGOkrHFp5WOfJGVfYeRmY+qmZiTk4+TlZOlnpOdmZOho6KcmJ+Zi42Qj56IWpCXl5KWpZllmKOesqWWopasraunm5+ml5iWmZWhpKmmn7arqbq8xLWltLbLwbiptqyyuriuqLi6vbiDbG5aV1RVTkZKU05LP0JIRURIR0c5NUZNOz43PkFKLjMyMDI1QjU1UFZOPExGS1JMT0hHST5JUT86OElTOzs/Nzk+RExCQEhTS0BXUEY6QT9HNkE3O0hNQ0U7Qz00RkU6QkFCRzkvOkEzNjAzPkdEOTQ9dGRNRztFKzpmfGhXOz1AQkZCcUZpSVJlYkxGpZSclqGXqZaNkIOHppOIgYeCnISDlZCQlI6aop+vvq6hxr3FxMbGzs7O0sq+u7axuru8vs62xL23ubeysrWzuLOsppyrq7iqqKevsJejrqSnpKS0wLCqrLO+wrnAubOnuLS4sq6VpKyurqSLk5WhjXTBmn2WmYSOlpqLsZWamZWSk5mZpqOVn5uWmqicnKGgmouNkJadYEqWnJqVmqWWVJawn6+cn6WUr6+sppqhppSTmZmOnaCnopm0qaqzvLy7q7Cyx8C4paurrbGxo6GysrSkcW5mXFpOUEtEUFBQUTtHSklHSEJDPjlLVT9BOj1FTTA3NTQ0OkIzNE5XTzxKS05VTlFKUEhISk9CPD5NUjs+PTg6PENSPkRIUklCV05JQENBRjM+NThKS0NBPUM7NEVBOkE/PkhANSpCNTIsPmNdZzozNXRkZUBSNyYjM31pWDs6QkNAPVFFV1JzYldGSKqXmaCiqK+ZkZeHi6eWjoiShZ+HhJ2Xjp6gmqOktci0qca6w8PHysjIzM3Gvrqyrrm4wMHNtsi6wbm2urGvrrK0p6ObqrO0qqimrayZpK6lpKisur+oq7a2vsG/vriyssOxub2so660rLiliJuXppt2vqCEmJyOk5mai66XoZybl5Wbn6GpnqigmZqpmaKnnpiQjZGdg252kqKalZ2inpCtsqOrlaiqmKuupaSfpamTkpmciJWcop6Xsaapq7q2vrOyrb25tqCjp6ilp5ycrKmpjGNlYV9SS01HSE5JVUw9TUROSktCQ0Q8UVU9QUFCRE8xOD03Nz9CNzVVWE4/SE5RWVNQUVRKUUpKRUFFTVE/Pz04PTtHUjxFRFFCR1lNS0FIREU6OjM5S0lCPkNCOTlDPjxAPjs7RzctMj4tMYJoTnpcLzBraGA8PUJCODZ6Zlc7Oj0uLlJgTVVIf2VeSEWrlJyhn7uvmZSejJOqm5GSk4mrjYeinoykrZSjo7bGvbTBusLCx8jFwc3Iwb25sq+5tMDCyrXGscG8tbqrqK2ssKOimaq0uqappquqnaivp6Oqqr28p6y8s7e9xry3tbjAsL3As6i0tqu+pY+il5Gin7yfiZmgmZaenY+3n6mcpaObnKGaqKWzoZudpZyoqp6ZlY+Um4uXiYylopSdop6gtK+lpZOwq5mrrJ6epKOpkZWVoIOQnp+clqmkoqG0tbu1rai1srOenKKlmpeVmaqhnndhXWBdSklGSE1RSU1FRkdCUkxJQUVHQFZSREg9QUdRMTtCNzpCRjc5XFlLQUxQVFVTTVdSTlVKREBKSk5POUM/NT08TlFDPz9QP0VaTUpBS0RHQDUzPUlHPz1FQTk3QTs8QDw8M0A8Lyc7KkiRQjpTSjAsW29XNzE8Kh1CgGRUNDktMTpnXEZDQ5xwYkdFp5ekn5/DrJuXpJeZqZyWm5qPqpaWp6aVra2Zoau2xMK7vrfBwsDHw73Nx7u9ubKvuLO/w8i1v6+8trq3pqOqrK2goJqqqsSipairpp6rr6yiqai+uKatvbC3tse2tbm4v7C+wba0srSvvaOWo5aTm5Sun5ChoqWjo5+QvaWpnamsnZ2hm6afvaKZo56iqauhnZaNlZ6TnoePhI2TnqSgnbWsppyVsqeZsKefmqqeoI2ZlZ+EjqGam5OlpJqYrLG2sqqlqq2snJigoJKOkJapn5RoY1piXU5JSEtPTEhFRElBPVBJQTxHSUhbUk9LPUhPVTRCRjk+SEc1Q2JbS0NOUlVXVlFYVFJVSEA4UVFQTTpHQDRDSFFTSUM7Qz5HVktDQE8+SzwwNjtHRj47RkE1Nj85Oj85OzE1RDAtLDBNdlw0S1o1LE1uVzwtPSkeI3piUTVDS1E5b1JGPEt4ZWNXTaKao5yexayhn6ydnK6fkqOelqWgp6mrl7awoqqytcTCvb+2wMK7yMK9ysi2uLW0sLO0t8HGtr6wuLS5tZ+mrKqrnZ2epaPBpaCpraCkqa2voqanvbWlsby3trXDsrO3ur6xw8C3t62ztLWinKSVkZOgraCYoZ2oqauimsOtqZ6srZubnpmmoL2hnaSYq6uspqGZjZqfkp6Jjld/lp6loaC4qqeTmLajn7OhoJuvl56OmZSdgo+fl5aOoqSVkKWusqupoqKmpZWVnJiLj5GTpJ+JYmVbZGBMSUpLT0ZFQUZLPj1KQjk5SktOXVFRST1MVlw5Rkk9RE1JOEhjXExDTFBTWVlWV09aXklBPVdRSUs/SEA1SE1YU0hBOkBBRFBIPz5RPks3MDk5RkU7OEc/LjY+Nzg+NzcvMT85MSUxUVVtW0pPMTA9Z1dEMTc9LSt3YFM2U1prV3NIRTY9dWVcS06en6GZnsOnpaKzoJyyp5OrpKCkn62prJ27sKistbHHw8HCs8LEvcbDvMTKvK+xtq2wta+/xbW5sbC6tayaqLCpqZqdpaGnwq2brLCcqqKusKmkp723pra6vK62w62zs8K/scazurartLWtqaGllZWUo6uhnp+aqKuwrq+7sqagqamZmZiToqS4oKGkkq6vrKWnn5KhnpWej5CNlJ2aop+ntKanjZi0nKOvmp6brpGelJeUmoCSoZaPjp+hk4umrLClp6KcoZ6SkpqThYuSjZyegGJmW2hmSklMSlNCQ0BJRzs7Rz85OU5NVV5SU0o+T15dPUhQQkxMSTlOZF1MRUxSVFlbU1VPXGJIQT9aUUFIQUtCN0ZFTEtOPjtCSEROQj07TkBBMy85N0NCOTdGOys2PDQ2PDM1LS80QDErJ1Z0U2VPPzEwNGJbTTIzPjA8dl1eP1tVXmZyQDg8SJZ3ZUE0n6Sfm6DDqKSqsqGjtamVsqunoqSyrK6pu7KssLW0xr/ExLXAxL3Iw7bAyMK1q7WosLiswMS0t66strmlmauxq6qYn6aXrbu1m6iwm62frrSxp6q6sqe5s7eyuMCqt7LCvLPFp76urbe0qaeroZaWkaWkoqKXmKSuuK2xtbagn6ikmZWVk6Sgt6KkpZausrKmqqahnpuampaYqJ6emKGer7Kipo2XrpmlrJeZnqWRm46TmJqFlp+UjJCcnpSLqamqoqegmZ6WjI6ZkIKGlomUn3lkaV1rak1QTk5UPUNBTkM6OklANzdRT11eUlZRQVdgXEJKU0hWS0g6VWVdTkZPTltXW1JQUVhdR0FCW1BCRz5OQzlIR0hOUD8/Q0lCTEI8MklBOTQxNzdCPjs3RTcrNjkxNDgwMi0vLjw2LSNCcWdzazIzLzFbYlozMzgwNnBbYkgwNUpwaVZDV0aMeWZDO6SknaGmv6aor6+gqbWqnbmvq6OqtLexsLm3r7a4uMW9w8e9vMPBxsC5wcbBuqq2pK27rcHDuLiqrbK7opWtsK2ylqWnkKq5qqCnsJ2qoLC0sqqptrWsu6yysrm3rLmwwrq9vqbCqrC3r6mqq6admJiqoaGgkZigsK+zq7C5mpupoJmWkpemobeppaKir7G0q7Koq5+boKCbnqWboZedo7Owmp+Qk6WaoamalaKflpiJlJiTlpedk4iQm5mUj6mop5+jm5ebk4eOmYt+jZaFj5traW1hbG5XUFJaVEFDRVRAOztJQTc6WFBkXlBWV0RZXl1NTFJOXktKPlpkXk5IUE5bVVlQS1NXWkk/RFhQREY+Tj89SUdHUVBCPUNGQk0/OjJEPzc3NTQ3Pz05NUU0Kzc1LzI1MS4tLiwxPionKz1ccD0+MS4xZVtkQDE2NDdnWWBGKD84bH1oW1Y7iXtjQz2nn5yiqb2hqrCqo7G4qaW0s6uhrbW9r7O4vLq9trbAwr/JxLjEwr/AuMS+wbevtairt7K8v7+1qa6xt5+Xq62orZanqI6nu5+lrbOeq6KxsLOsqbaztb2tr7G1rLC1scC6xLarvK+xuKusqaKxpZ6kqZ+jl5CZn7Kqs6mqs5mdp5ualY2gpqS0rqehrKytsaezrbKpo5yfqKOdk6CYm6i1qZeZkpKfmZ+hnpCsn5iYhpWYi52anZOKjZaXmpempaOgnZaVl5SBj5SFe4+Sg4yWZmxyZ3ByX0dZZlZEQ01YRFo5SEI2Pl1RaFxOWV1HW15dTk1SWGRKSkNcYmBQS01OWFdYUEpWVldNPUVVSkVEQU0/QUZISFFQQTtGREZLPTg3Qj02ODcxOT48NjVEMCs4MC8wNS8qLC8tKj0sKyUyKyo1SzEuJ19fYVUxNTA9YFZeOClDM1lVXGdLNYx6ZkxApJmgpKy3pKyppa6utqmvs7mmprC3xbext77BwrW0usW+zMW4wr+6v7rEuMG5srWsqrq3urq+tKqusLWYmKerqqubrKuPq7ydrK6xo6qfsK2zrq62sbm3qa2usae1r7O7vMmyqrW0sbSvrqags5+aqK2gpZWVmpmxo62fpa+WoaSZmZKNoqWnsqmhprGrqbWlr7G1r6OZna2nmpeemZmsuKOXk5CPmJyhmJeUrJ+dlIGTmY2dnZqWkIqTkp6apaGhoJmWkpOWe4uQhnuMioOLkmtueG52fGFGYWpZSUhZWz17SkdFNkFiVGlaTVxhSltdWlJSUmJgTEtFX2FgUExJUFdWVU9HV1ZVTjpJVklIP0NLP0VESEhRTkE/SEhIRTw3PT46NzU2MDk/ODY2QiwtOCwvMDQsKCwvLSo3NikoOS4kOks1LiJUYFVgLzUoQ15RXC4qQi9KR1BbSDNjWVVLRJmWoLCosamspaOurrWpt7S4o6u0t8m7tLu7v760tLfDwc3Hu8O8tr6/wLi/vLG9rqe6ube3wbarrbG4lJemrquno7KplK+7pK2ysaenorKzsLKwtLG4s6muq7KnuK+1s8PFtqi0tauwramnorafnqaxoKSUm5mUsZ6nm5+pjaminZuVl6WlpbenorGzq6exqK6wtaykmaCsqJubnJuUqbiclI6Oi5mcopiQl6ahn5aEkpaQnZyYlpaIlo+Xm6eco6CSlpGRl3aEkId7hYGEjYxucXd2fH9dTGVsXEtOY1w/YntHSThHZ1dlW0xeYk1YWVdUWFRpXU9PSGFeX1BKSFFWVVJLSFdVVk04TVpORUBGSz9IQkNLU00/P0xPSEA7Oj47NjswNDE8PTQ1OD8pMDcpMS4yKSksLC0rLTkkMDQyJTlCNy4jQU5IZjI3J0ZhTFYlLUIuPUVNUTwzcmtKREOQmaWupK2tq6eksLKzqrewtp+rtbnJua7BvMK3s7K1wsPPxL/BvbS9wL+6v7yzxKipubC2tr+8r6yzspygp7CtpaawpZ6yta2rsrCsqai0uay0srWttKypq6isqbmtsbDHvrekua+pra2lqK2wpaOjrqOpnJ2cmq+ZoqOio5CsnqOfn6Gqpaa5pau0tKSpq6msr7auop2jqKqbn5makqS0mo+JjYeRoqCWjZSeoJSThY6Ukp2bmJaVh5eSlZmmm5+fjZKRjpF3fo6FfHx9h4qKcnRyfn1+XFNkb15OWmZdRkSWW0g7Tm1YYVtNYGFOVldWV1RZZ15RUkxjWltUS0dPVFNOR0lWU1xOO1BeSUJESEpBRT8/S1NPPjpOTUM8PD45OjU9KzMyPTYyNDk6KDQ1KS8sMSgpKywtKiY1Ki8mMCkzODoxJiozQmM7NipIZEhKKzpJPzNCSVMsPo9rPUhIj5uqqqKpr6Soo7K0sbS1sbGhq628y7quwLvHsbSttMLD0cXFvsCyvsHCvL+3vMSnrbess7i8wLCrsq2gpKetqaiksKOqsaqvrLCur62rs7qmtrCyqbKpq6alo626rKqxwrm0q7moqKitqaixpamkoq6qqKKem6KslaSdl56Yq52hp6mhrKWjray3sbGgqKKgq66wrJ2fp6ipmaSYmY+gp5iGg46Ji5+hj4uMlpyPj4aHkJWgnZaYlYeWk5OXpJydnIuRj46Kf3+Ihnx3f4eFh3Rzcol2bF9ZYG5jUXNxXEs7hHxGPld1WGBZTmNcTVVWVVdQXGJeU09OZ1hXVktHTE5SSEVJVlJdYzxQXUQ8RkhIQkc/PUpQTDo+T0o9OT89Mjo3OyozNT4xMDQ4NSg1LyosLjMwOyksLCclMjM0JCwyLTg2MCkoMTxdSjAuSWdERjg8QjA1RUtYMUCUWz9NRpWYraeiqrKcqaivtqy4ta6qpauqvcm7sL64w6+xrbPEw87Ow76/tMDDxLrAtMnErK+3rrK5wL+0rq6rpaeqsKmnqLGltK2rsK6tsa+zrLO6pLizrKyup6ugop6wt6uqrbq2pLW1pKmnrKyqraGopqaxsqSmpaGhq5apoJOaoKaepKKqpKyin6ext6ysoqSim6mqramcoqWkpJigmZaPmJ2TgYKPiIWcoIyKjoyZj5CLhI2YpJuSkZuMk5KRlKKZm5mKjouLfIaBgoN6dICEgn50d4ykh3lrXmBuZ1dlh2ROQGeSTERieVdiWFJlVU1WVVVUT1xdYVVLTmlXVlZJSkhJT0JHSVNRWW9BTVhAOkpHRkVHPj5FUUg4Q0tFODdDNzI6OjoqNDk/Li80NjMpNCsqLCsuIzQuLSsmKCs3OSomNis8LTIsJjA2V1ouMEpnQUE8PEMrOkpPXjREhkBISESXkq+ko6qwl6qorLWrtrGrpKuqqbzAwLi5s7y1prOvxMnL0b/Bu7nAv8O5wbrBxK6xtbKzu8G+s7GurKurqLaqpa2vq7mvqLGxrrGrtaq2tae0tquspKmqnaOds7OoqKS0tKC1raGpqKuprKegq6youbapqqmpoamfrZuRqKGdoKSipqKpnZymtK6npamio5ikpqapnKKko5+ZmJ+Rjo+Zjn6Hi4aEnp6IhYuLjo6QjYSGlaOajo2bkZKRj5Kfl5iWjIqDf3SGgX9/eHWDf3t4f4GInY9vcWdncXhcYHOIak9dmFZIbXhVZFZRYk9MVVRVUE9YW2JVSFBqVFZUR1BZVUk+SUhPUVB4TE1WPTxLRD9AQTxAQ1VDOUFLPTU7RTEzOzk3KjQ6PSstMzQxKjgqKisqLCkqKC8qJiklMzssJDIpMjAyMSUvMlFjMDI/Zj1OWD9DLD5MVF8vSms2UEU7lY6woKWqrZmrpKyus7SuqqWvqam6vrvAsa+4rqK2sMnHyNDAvr27vMK9usPBwL+usrKytb28wrKys6qzqKS1qKSss7O5r6OutrGvsbmquK6qrrasq56qrJ+joLatqKGer7OhtKqeqKeqpKqhoaytqL2vrK6soaenn6uYj6+imKKgqKeep5uZqrCpo5+soqGToqKjppiZqaWXl5idj4qHlYh9jYaEhKSWhYKCi4aOjpGEhZSgl4iRnZCTkI2RnJSWj4qFhXh0gX99dXh5gHt0c3ppgoejdWleZWyCdWeIjH1SWHBeSnhzU2RTUV5NTVJZZk5MVlllWUZTaVJSP0JOUWFROklITFNJcVFMUzs8ST87PD07QEBXPDw+SDczQ0IxNTo5My01OjopLTMxLS02KSgrLSw1MiMyKScsJS47LiYxLjAtMTQlLDBMaDo0OF89YWQ/RjFDUFtbK0hPOlZCNJCPsaCkpqujpqSsprSzsKmjsKequL7AvLCouaqnrrDJxsjRwr2/vrm+v7zJvMK5sLC0sbq7ucGztLusuKyjtaamq7G2ubKnp7q1rbW8r7ylra21q62cqa+jn6WsqqecnqqzpLOomqqnqaSpnaOpqKm9rLSvrp2po6Cum5qyo5Wkm6Sln6SamqirpZ6bqqGbkpugpJ2YlqmpkZiZk5CKgo+FfY+CgIiej4Z/fYuGkI+QhICTm5SFk6KMlJKLkZqRlIeJfn9xenl+fGl3fHp1cXF9aIZ4hIdkYGhjcoV6bWd5XV5WQld6bVRhUFJZS0tOcXRdSFpbZ1lFVWZQRD5LTkRDQTlIR0tTP2phSVE4PUg8PDw+Ojw/VDY6P0M0NUg+Mjs1OTAyNzw1KC41Ly0xMSYvPktIMSUaOTAlLCwwOS8sLCs2JzE3Iy0vR2pJMTRYPWZiQUo3R1NgVSo9O0VaPyqPk7GZn5+opaShq6S3srKkqLCnrLjBvbWwo7msqKiww8nJzMG2vb+1t7+6yLbDtbSztbG9uLq+t625tb+tobOmqaqvtbi0qp67u6iyv7K6oK+0tqmsn66wopylqKminpyksaavoJ+qqaiiqpujqKCtvKiusK6hq6Kjrp6erKaXnpqho5yfm5qjqqKamqSklZaUn6GWm5amrIuekZCRjIKLgH+OgXualI2JfH6LhY6PjImFkpiRh5SjiZKSh5CZj5OBiHx5a312eXhie3pxcHFzeGmBc2qDZ2RoYW9zjm1ianBgcEFceGtWXk5QUUpKTVNZVk1dXm1XRFhgT15QSE1ERjs3SEVLTzxyaEpLOUFFOzs9PTs7PUo0OUI8MztHPDQ/MTgtNzg7MigwOS8sNS4uPS0qSz4qHTQ5JicuMzQuMCsvNCYsOiQ0MEJoWTEzUz1lX0RMNktXZU8pPDNQWz0jkpismZ+Xp6Sin6ikuK+uoq+vqau4wrqyrZ+4r6uotLrHy8e/t8G+r7S+t8S2w7GuubKywLW7vripube9q6S1p6epsK25sKmaurykrr+0tKGut7Wnp6ews6CfpKanoKWZnq2nqJ6gqa6noKaXo6mfsLifpLGvoauhrKSbpqapmpqbnqOVnJyanammlpufqJKYk5idk5mVoaqQmomNkId9h36CjXx8oYyMiHmDjISJjI2Eh5OajomVn4mRlYKLloyQfYR7c299cXN0YHl4aW9wcW9qf3JkemxpZmRhZoaAYFtzanJNTX9pWFpNUExKSFBSUElOXF9vVERYWlJnT0hLRUY1NkhCTEk1WmVKQDZFQjk6Pj0+OjpDNTk+OjNARjwyQDIzLzo7ODMmMjwwLDg1QiopLUMqLDQ7Tk5AOzczLS4rLTcqKjwlNTM9ZmQyNE0/ZV1GTz1SWmhIKj8wWlk1KJadpZiclq2gn6GkobersKO0tKmoucW2sq6gt6ytrLC1xsjAt7/BubC0vbe/u7+vq72wtL+xvcO6qbu6t6eotqimqrCss7Cmmry3pKu7ta6fsLivqaanr7GboaSgo6OhlpyvpqGfoqevoqCik6Olorewoaaxq5+soq6YnKqkqJ6Xmp2kk5qcmp2mqpmcnKSVlZeVnI6Tl6KpoZCJio+FeoR9hIp5jpeKjYZ5goeEiIyOhIyTmYyOlpmKj5Z+hpeLj3qAenByd29vdF94d2RsbGxqaYRuZnNpa2ZpXWRzgWBba3VpWkl9XltYT09LSEdSVUYyOV5ebVBEWFZZZU1JSUVFMDdGP0tCNklKSDs2Rjk0OT49PDk4QDg7ODo3QEk+ODw0LTM8PDc1KDU+MSw7QTEoKzY8IzhSPSoxMTM+RDUsLSc0Mio7KzEzOWNsODRHQWZbSFREVV1oRS48MmJVLDKWo6GXlJuqnaShoqC3qq6gurimrL3Fs7Cvo7Wwra2vtcTEvLO/urews7m4uri6rq2/s7S4r7/BuKy9urWmorOqpqiyq62xoZvAtaSntbWonrK8qqimqa+smaOnnKOmlJiisqSZn6SoqZyioJOkoKS4qKSnrqaepaCokp+ooqGgmJudoJKam5agoaqbm5mhlJGUlpmNlJKjqKSQiYqOhXmEe4SGfZ2NioqGeYCEiIiIkYSUk5OMkJWUjY6Ue4OXjot3fntsdHJsbHNheHRoaGpnZm+FZ2hpY2ZpamBpYmpnW2V7Y2BTc1RbW1NLSkdJT1NAISppXmpMQ1ZVXmBLSUhFQy46QjxGPDZLUEQ4OkQzNTc9PTg5NT86OzQ+OEBLPT45Myk4Pjw6OSo2QDMuRTQoKyw+MC1OPy4rLTcsMTE5NSwmLjUtODA1NzZgdEIzQ0RnW0tXR1VgaEIzNzllTycynqOjkY6jp5udnp2jta2mqrm3p6zDwbawrKO1rqeur7fAwLyywbaxrrK2tri3tqypvbOvsrG9v7iuu7yxpZ+2q6WktKmrrp+ewquopbCyqay0u56pqquxpZieqp2mpJGZpq2imJ6kqaGcop2XoJ2ntqavqq+hoJ2doZSgpZ+hoJmbmZySmZ2UpZ2sopiWnZSTjZWXi4+YmqigkYiJi4h5hXeCgoGciIuCiXx/hIiGhZGDlZWPjpCRkZGNknuDlY2Fc319Znhva2psZ3Vza2NnZGR1gGJlZmZlampka3FaXlldbWRhTmhXWmBWSkdJS01SWD45X2xpSEJUU1xbSUhGRUEuPD85QTg5UkdANzpCMDM3PTc2OTI6PDk3OjlETT1CPDAqPEA7QT0tNUIzNz0rKiwwQSpKSy4vKiszNzIyKDU3JCs3LjcyNjg1XHlOMj5IaVpMWUpWYmZBOjNBZ0glNZqjnpCLrKGYmKCWpbOxorG9t6Gxxru5sbGktqurrqm5vbu7rsCyr66ttq+zuLOoq7mxr620trq2sLm+raaetaugoLClq66epMKgsqOusK63rbWera+sraKZnKeppJ6Vm6iln5mlo6idmqCblJydrbCmuaiuoqCamp6ZnqOapJ2XnpiblJqgkqiWqqeak5qakYuVmY2UlJmpp46NiomPfIJ0goGKmIWHfImJhISKjIiShJOckpKPkJGWjpB/gIyNgnCAf2Z5bmhramdxcmtcaGNjc4FhZmhqbmxna2pnbVxsbHVxYVRiaGRlWklGTE1PWFFRVmFlgVRAVlNZVEZIRkVALzw9Nz82PEZOYTg6PzI0OUAzNzgyOD83PTg+RkpARDkyLT1BPUE9MDVAOUAxLSsuMzw7SzYvLissLTI0OzYjMyopNi41NTQ2NVp8XTE5S2pbTVtLWGRkQEExSmVDJzSSoJqOjrCdmpOhmamysJ+4wLagtMK7vbmxprawqK6kt7i3t627r62qq7eqtLmupbO1sa6psbe2sbO1uqepn7apnZ6po6qtnKnAma2jrq+1ta2tn7Gtr6mim5yjq6iblZyno52aqaKklpqgnJCbo6uqqbufqKSfl5qZnqGPa6KWmJxxgpabpIB1kqmnnpSUnpCIl5mAloqhkHiGlIyDbmp+d4NxbIaLhn2Ei4ZvXmNgZ4SXhmuLkJSTdXeLhH6Dj39nhoBodWlmV1xoc25OUGpjZ3KEZ19kZm5sal5gYIqQhIZnT0tEOEZUZ15KR1FQVVVLSFNhb3RlRltRVVBGSEZDPjE7PTY9NjwzZlw1Ojw3NTtENDg2MDpCNz86PkZMQ0IzNDM9QEBAPTI4QEU9MSwrMDg+RzYwMS4qLiovNTY4LCMxJzIxNDoxNzZYgWwxNk9rW05cS1tmYj5HMVFkPSsvjKOZh5Swm5yToZuqraujvcWvqbfCuL29rae2sKWrpLizsrOxua2qp6y0prC1o6i4trWop6y3s660rbOjqp+0q56hpJynp5msu5Wmpa+yt62upaiuq6yloZ+coKemm5ehpaWbm6ennZOen5iQnqiqo7Wvo6Ojm5aXmJejiKGOkpqHoYeUnaF/pX+mqp6SkZqRiINyeI2OhYihdomNaZeIZn1zeKFviIeEfo18f6Ggn5mAe4eedIiOdpuKbIeBg2xoZWN6bHFiVIZtY2xpmHFYanBvh1heaVtra1uIcW56coZoh4RaXkZNP0dfTUZSVlZRUVJXVGdeTVhKUlJPRUdHPjw0OT05PDc7MDw8Nzk5OjY9RjU4NjA8Qjs8OT1GUUc9LjU8O0A9QD41OUdBODIpLjE8STkvMDEuKi8oLTQ1ODMlJjIxMTU+MTw4WIN1MjVSa1tOXExcZ189SzFXYTcvKIyml4Ocq52ZmZ2fqqqnqb/DrrG6vLfAv6qlt7CprKayta6vs7arqaWxraW1s5yttba0pqeps7Gtsqivn6uhsqmgo6OaoqOcrrWVpKSltrymrKeqqqyopaGgmKCmo5mZpqOkmJykqZaUopyUk6SlpqC2o6Ogo5iUkpeTm4iuj5iUiamLl6KbhbGAo6ydk5mdlHmC1Kh/h5XBm8d5eLGlt5dkgMCcv3mEhHmQhHyQkJHKcZa8nMV7cranupB6gWyWsauweWhrWLGubmVpvJK8bmh6bnKP2H5TamK2sn+BcpR1mqGqkFdPV2FPVk5GVFtYUVBSjFxXXFBAXERRTkVHSTw8NTc9Ozo5Oi49Ozg3ODs5PkY2Ojc0PkA+Njk/RVJJOi41PjtCPD9BODpKPjUyKjIyQkUvLjMyLisvKS0vMTg2LSAvNDE2QTE9OleDdzIxVGtcT1tNXmdcPkwxW100MSGNppOBpqmfl5yepa2yqLDCvbK1wLW3v8KrprOsrKmnr7Oqr7azqKimtaanuK+ds7K2qqWkp7GurrGmqp6npLGkoaCel5ygnq+tlZ6hn7S6oqqooa2upaKdmpmhp5+Xm6egn5iep6eRnKeblJ2hpqKgr6Kfn6OWlpKXkZiFr2pqio2qfmeElYetZHCdnJOZpZRxrqGkfni7fWuhj3axX2q0W6WAZpyRYGaCemZ/anhqqWW+cmemjHayanyxeHSSk2NtbadtW4SgRWhnh5ZFdZxgfWh8pKeCWV+Lq2mAlXh6aqc3Sq9bV1NtY1tLT1hfXFdWO06IT1dXL0lUU0lERUY9PzQ2Pzs4OjkwPTg5OTk6PTxEODs6Nj1BQDY8QEhRRzkwNzxBQz5ARDhARz0xMy0zM0UzLi41My8rLyguMC46NS8nJDIwM0IvPTtVgnYyLVZqXE9ZTF9nWTpNNV9ZMzEbkaKVgqynpZ6jpaqyt6y0vb6wtsSyuLvCp6mwq66pqbCupLC6r6SlrrOjqbmpnrOysKOloKqtr6ywpqefo6Kwm6Kbl5WXmpytppeboZ60s6Grm6KtraCempagoaicmJ6koJyZoaekkJ2jmpegn6ufpqafmp+hlpWQlpCZhbWbtXiFqZm1mXeHs5u3fpOVlqiUfmuBpnqChoiSlJJ3q2drsVuse4+HlHSIcY+GgICIkJd4g4KLl4yDoI+EsHZ3n3Fra2x8i06kWEhjY5l+Y2imYHlydVOSh15QqW1jcX6HgGKdLlGibltTa2hgTEtcZFhcWkI+sHhXWEEjTWhFQ0RBQEExOT44ODo4NDs6OTw5OkE6RTo6OzY6Q0I4PT9LTkc6NTpBRkJAQUQ8RkQ7MDIwMTtGLDAuOTQwLC4oLzMsPjgzMR8vMi1EMTw8U31uMytYalxPWE1fZ1c3SjlhVTUwG5WflIizpqahrqmns6ypu7bCsLvCrbi3waqsra6upq6yqaGvvKqhp7StpKu1paays6ejop6oqrKosKilnp+fr5afmZWVlpieraKamqOotK6hqY+pqKqbnpWXoKSnmp6do5+boKOlo5Wbn5ianaKqm6aZm5uioJaSkZOTnIPVk5m5cLDCfsaGfNaUm7t8mZWkj42cjaR7joekgqWCeqx5j51Wr3uJfp9quVq5d4aDfKaCk3yYeqp5jZyQe7FtjoR0kLyFb5RQr6fFilGgemNgqmJzcohtl4hgU7W0yIaAiXxjpDNCnXZdUWpoZFBAWGdaZGFKSE1sS1tTT1lmWkNEP0U/MDw8NTk7NzQ8Ozg9OjxDOkY6Oz42OkBDOzZAT0xIPDo8REhDQkNEPEVGODEyMTFEQy4vMDQ4MystKS4zMjM5NzEjJTUqPjM9PVF3ajYqWWlbS11PX2ZUN0c6YVE3MiWbopOYsaiopbSqpbSopLy3wbC5wLG2tbyztaexsKOwsqafrraom6i5rqOvsaCztLCgpJ6fqKqxqbSppJydnqqXmJeWl5WWoaudm5anrbCoo56PrKKolp6Xm6GloZihoaKhmqKip5ueoZ6VmZumoJynlJuan6GYj5KVkZ2Ism5otXGrh2+OpnK0c3K2e5mXo4uOnI2ifpGhpX6wdoOR0tF2XK58hn+kb5uqpmuGhHytfZeZj3uxc5Odj3mzZZZ0hJ5vnmaUUsiLWsJcn3liX61gdnOHYpeIXlnKnW+/gXVNS7VTVcZkVFFqY2ZYQU9rX2xoT1VHSTk9V1JbV1hIQz9KPDI/OzU9PDQ2Pjs3Pjw9QztHOTtANzs+RDsuQ1JKRz4/PElKRkNFRD5ISTkxNzQ2QT4vLjI0MjUyLSkuMjYsNzQyJh82MDs1Oj1QcWg5J1dpXEJPVF9lUDVHPWFNNjIwoZyRpbCtpKq7raa0pae2u7yyur+3trW6urOltLShsbGin6ywpJimuq6ksbGdtLiqn6adoqqlsqitqqSanJqonpWUmJiSkqOooJeSpauvpqKWk62fpZKUoZukpp+UmqamoZqjn62aoJ6dkJaboZ2cpZSclZmin5WZlpKbhax7d6h2o46Jh6lvrYqCp4OYmKGJkpqKon+TmYmuhX+Cs1xys1KufYOCpH9x1313hH2OnYeZmXevhoqRnIh4s2GaZZqBgpRsklqwWEuadZh5ZmCtXnd3h2iYiGter3eVno94bDV5yK6yX0FUb15nYEVQbF9wbVZVTS5lY2lTWVE6QURATDo1PzkxPTwxNj85OEA9OkM6Rzs8Pzo+PkU5LUVVSkVAQzpNS0pCSEc+R0s5Nzw0Njo+LzA0MzMzLjIuLjE4Ki4zMiUhMDM3Njc9UGtlPiZWZ1xAPlZfY042R0NgSTk4OJ+dlKC4sJe0wa2osqiqsrq4tLi/ubeytry1pLezn7Ssn5+oq5+Vp7arqLGxq660pJupoKCoobanpqqjmZ6VpaGUk5uZkpSipZqTkKasrqaglZmpn6KPkaKZqKWglZmlqJ2cpJ6tnaGdoI2UnpudoJiZnJWXoqCTmJGmnYapfX2leKGPjoOqcK2LgaeGlZ+hiJeXiKOCkYiUqnyAi515b7FaqIKCiKB5dNh/dod0p4GOm42SpHyWkJ+Ee7JenGSgfoOVbJJcq1tak3+Rf2hnqmRye4FrmIdzXaxaiaCOa25lT0pDoVxaTHReYmZNWmFfcnRfSlY2SpqTWUhFPUhGQUwzNUE4Ljs+MDVBNzhAPDY9PEY/Ojw2Pz1CNy5IVkpFQUg2S0lOQElLQEVOOjpANC47PjAwMjE0NCsqMDUvNywmMjEoJCQ2NjcxPFBlZUEmVWZbPzJVX2JMN0ZJX0MxPzihnZmZv6uXtMKuq62ppbSwuLG1v7m6s7G3vKm6tJ+wpJ6lp6eelKqxqbCptayrr6GYoaCmpKS6oqOroJebkaKglZSempSYnqCPjYyor6+mnZabqKafjJKkl6eqp5SXqaeen6CjraShnqGNlaGZn6CSnZeclZ6hlZaPq5uPrm1ytHKpjHaKpnO0eHOzgJGkopGcjYmkh5B3uG+Me4uia2u2WqCFZZeXaaGip22TcrR0k5h/smqFk4ita3WzYZ1mom+HkmqXXK1gTaF8h5FSc6Nten9+b5iHcVyvVjycd2ZUb24uXKdPYlJrZWFtWWJcYXB7Y1RaUT4+bXAzQkJAP0w5ITdANi47QDM3QzU4Pz8zOzxDREJKRk1JRjYySlRLRUJJNklKUD9ITkNGUD08RTUwOzwwMTAvNzUsKyw0MjYvIzAwLCwdMjg5LzlOYGVEJ1VkWT4vVV5hTDVGTV44MUM4pZqbnbqhnLLArq2rq6e3qbivtcC1vLGvubiqwLWpqqCbpqOhnZKqqqi2o7Korqqgl5ynoKWruJ2jrZuWmY+lo5WNnaCbmJyfkJOUq7Wvp5mUnKyql4yTpZmkrKKRl6qypKCep6uwmKGjkJmil6CblpuXoZOcqpyUkauZh9SSmrtzsMOAw4Z+1ZabuHiHkJeMmIqMp4h6o7Z1fXd2woKasmCDunnAfHW4YrWBjIepfZaBrKlxe391vIinoGmdYaaOr6F+jHSHq32+bnO8dLKDdXiBim6aiHFujaR0vV13fVthebxrWlZbanpeamBkZmJtd29ZW1lDQUByP0NHKzVIIic7PzEwPD83OkI5OT1DNDxATlpeYGBfX19aUFBSS0VGSjRITFJASk5FRk9CPEU4ND05MDIwLjg3LSouLzE4MCItMSwzHiw8OjA4TFhhRidUY1g8L1ReYEs1O0xbLTdBOaeanqG8opexw7Ctqqqssae5r7bEsbqyrruwrsCxrKSinqOhnJuRqaSqsqS1pq2kn5aaqpmmrLicoq6YlaGQpaCSjZyjnpidm5CVkq+5sayVl6Onp5SRlqSco6yekaCoq5+bn6iis56ipY6nopShmpyXlqSYj7CgkpSqnoWQmbWAkJGMt5V4gpOatXdta25zbnmPhI6JdJ7Bu72ae4GyqHCAdJG4g3yGhouHjXuKho2XfKS7ub2cdXq0o3R2l3V0sHWZnmaGaY21dHJwd7aMXn96fYlog3lteWKLrHB1hX9ZW6dqRGRZU2ZgY11jUGdmcW11Qk5QTEQ7Wkw+SjM8MCA4PjsuMz1BOTk/PTs8QzZCVFlaWltbWlteYGJgXVNHR0g0RElUQktOR0VPRj9HPDc/NzA3MC85Oi4sLy0qOC8lJjIoNCQoPjcvN0xUX0cnU2JWOCpPXV09KzpWVic9OzynnqCgv6WWs8O0rKunrKupu66wxq+1s663p7S4ramioaWeoJ2ZlKukraqmtainn5uWoKOerKS+pqGrl5SdkKKbko+iqKKTnZeTl5SytbatmJ2jpKKLkpGmm6Wqm5aopKWcmqGopaajqaGSrZ+Xo56Xlpedno+wqZSbp6GOan5pnKZ4h3N+mo90emWHer2+wLpvkoJxlYdfcmpaXpqJYWOIjpVrYH+VY22cdmKUa3+alZRlXmBjcZuKaXKMfYaVZ2p+cnR4fX1iW3d0gWhQXG6DfHuLa1hseoJySUpvhXBNdE1FV11mYExbWGdjXk9bbXVpcVFPREVNO0hJPEw/MiwyQT84LzU/Qzw5O0A7PUM+UlZWV1laW1xcXWBhYWFgXFVHNURGVUVKT0hGUElJSDs4PTUxOi4wOzouMC03Nj01JiIvKjIsJTs4LTdKUl9JJ1NgVjQpUF5MKDM9W08nPzI+qJ+oocGjm7S6tqOtpa6nqLWxrMissLOrtaO+sbKnoKKpnaKbmpmspq6kpbWppZuYlaGbp62ovqepppWUnJWgmpOYpamnkZ2Rj5ecsLK/rJunnaeiiZORqZqopJubq6CjmZujpqyin6qimrCblaaglpWdn52XsaWYoaeYnJGdnKOjmaaimpyampmPloFnbX1xd5KXlJGFirWqjYaYlY+KjJiXh5SVioSSk5GJjZGTmJSYl5qgopqclKGdjoJ6pYVsanyQfIB0iYqBcYJ4eXZ2ioB7iWpzgXSDdWN3fXZrcHttYGNdcGdNWVllal9XWnB6bm1mU09GUzlPWk5STygrOkpCNjM1PUBBOTpDPjxFTlNTVFZXWFlaXF1gYmJhX15eW1RLQ1NHS05ER1BMT0k8OjszODksMjs4MjApNklSTzgiKSsvMiM0Oyo3Rk9bSiZSXlMxMFReOis9OFxLLDwtQLOgs6K/oqSxsregqqWyp6WwtarJq62xpbWmwKe0oZ2kpZyjlZagqqaso6O3q5+Zlpafl62ppcCeq6SVkpyXnpiTlKKfnaKnk5GZqKeyw6+aq5yqn4+WlqmdqpuboK2YoZucoqSvpqGkqJ6tmJemnZmaoZ6enbCgnKKmlZiSmJOgoZWjnpegjpaTioqNjpatj3yVm4KSgouqqIaBmJaKhI+fiHuEkIeFmZCHhomVjpuXjZCYnqSWmpORnY1/jWahs6+FiYR2eo+KfHZ5em9neZCBgIlrdYF5iHJoc396doOIgmt0ZHlmYGlkYmRmallre3BpalxTTFBEX1VGQD8/LDRARjs0NTs+QTs8Pz4+SE5OT1BTVVZWWFpcX2FjYV9eXl1eXVhWSktMQklPTVJKOzw6Nzg2LzI5NjQuKCYkLTEuLykrKjclKzwoNkNNTUQvVF1RMDVNWzE3RTRcRzU8LEC0oLmvvqyrrrKyoKqmsa2irLOwxbCqrKOzrryktJyfpaKhnZmXqKWppqSls7WelZSdmZmwpq6+oKujkJGempmUkZWhnJaonISeqauis8izn6qjqpeWl5qnnaianaOrk56fnaCqrqmlo6uhrZufoKGZpZ6cnp2wpJifqJOYl5yRpJmYqJ2al2aDknxlfo2Zj2N5jWxoa3qRpKtrZZqYfmeFimVlaWh7jqGOa2iMl5Gid2tqi5ijn5lzbG56hIyHelhlXoWBXmyKiYB2XGhzd3eRgIeCbniCeIBzbXmDdHeIiI6De2qGWV5rdGRdc4lpanxxbGNdUU1XSmRYQEo0PUY3P0ZENzE8PT9BRDw8REdISElMTlBSUlRXW15gYWFgXV1dXV5fXVpVT0RIT0tTTj0+PT02NTM1NTU0KiYmJSwqJS8qKyc2KiQ7Jy9BSltKLzdaTzYpRVkvRE8xWUM7Py49pZ+6vLmvrLOxqqWora6wpq6tsL2xqaekra+wn62Xn6OdoZqZp6ucraOlqKmyrp6Vo5Cir6a2uaWuo4+OmqGZk5KboJmYpJV7payiqLPDt6Shp66fnpWeo56jm6KpqZKeoZ6gqq+qq6Oqn6ibpp+ooayWoZulsKSXnKqVoZ6bkqWXnqqYnn6+g4dytHKEnYataHi5xLhxk6Kje6aYmXOqgnzLwMC7cYuih4KffJWYiZ7AvYKWnZ6NncLBe4F7ko2aw8B9a6Wxb4yAb8p6f5t3kYOOgXZ6gX95cXp/h3F4hYyTeW13k2JmX3hkX2WCY150aG1kYlhMVklRWkhPRDJJRT9EQj4vPD8+QEE6OERDQkNFSElLTU5QU1ZZXl9fYF9eXl5eX19fXVxTTVBHVU5BPz89NjQ2ODI3NiomJSMpKiYuKyopMTAfOSojPklbTCojQlAvI0ZbM1BZL1VBQjsvOJajuMO1sK/AqaiUo6+psK6tprK1r6qlpqawq5+rmJqin5ybqqeinKyjpailpLSknaKTpq2st7Onr6KSkZqdpZKRoKGXm5+ch6arpKutv8CxoKmvqZeSn52imaGiqaOToKGdnq2uqKymo6KnoKWlnq2pkaSbqa2qnJ2qnKyhlpellaGjl5x/zpR4eqSBeZWWm1+uj16Op4GioHynlZt0q4OAr15jjap6p4eFoHSXkoizY4KrhqGOjbNqhK50fZaHuGGCrVmjzW6PdXvae3+ZcH6Ik3Z+ZXuIdnZrfYhufoWRkn5tgY9gcWtwZ2BfeWRccWhqZGZgUlRSV15LT0M1QUhFRDg+NjtAP0E7PTdAPj8/QkRERklKTE5QUk9TXF5fX15dXV9gYF9fXVpXT1VKPT8+PDU1NzgxNjQoJyQhJywmJi8oJiszHTYwJDc7U0wrLC1KMCc7XDtMLSFQQEY0LjGtwsC/tbSwt5eekaSqqK2zq6ayrK2spKunsKqgp5uZpZecoq+foJ6op6OmoZ6wrJuelaeurbGqqKyglJKbn6WTj5+ll56oo56tpKqwqMDGs6ipsa6Wkp2copeeqKqflaCfnJ2ur6eqqZunp6Shq5KstJamoqqpnaOnpaGwoZOap5qgmpSUkZegcYWMl3SEqIdxsXydcax+oZ6BpY+ed6uCfa1/nHKtfquHhp92mJJ6fJd+qoiijJGLnX6re4mTj5+Ae61WnMR6j2+SwX2BlW11cIxtZXZlhm9hd25yb4qLkpCDbZGQZG90dXBgZ21lX29paW5mY1dTXWFZUlNDOUlJQEQ8PjxARkRDRUE9PDw8PkBAQUJFRkdFQENJU1dZWlxdXl5cXl9hX15eXVtaUkM+OzkxNDc4NDUyJiMfHCAxJyAxJyAnNB41LSY3PVdKLTwnPjEpM1ZARiEcRzpDMS4rsNTGxrK0n52jjqOjoayvtq6osKepqqiuq6unoqSdmaKVn6arn6GloKioop+dsKyXmpaop6+sqKepnpeUmqOikpShrZudpqOvrKOrtKq6zbGtpq6rlpScnaKZnqysnZagmZ2eqbGpqambq6mjoqybr7GiqKyupZimqqmpsaKSl6OlmpSShKRqpHWJeql0erJwgqWJmYxxiKCah6RgYFKshH+ug5t2roGmhoafepmWhntmgKOJpJmGgaN9qX6BlIeuXnypVZ2ikoF6op+Ae8OvxYxzr7OzuXFiqa/CdGiNjZiPgW2ak29teXh3b2xmZWVxcGZ8aWJdV2BpWFhVTU1RTENDQUI7Q0BAQkk8PTo5Ojw9Pj4/QT04NjtETFBSVFZYW15eXVxeYGFgX15dXF1bU0lCNjc5OTY3NCwmJCIgKCciKy0iJC4hMy0mQERXSCxHKzU2KjFQS0wjIEE5RDQsJ8PJ1tXAoZmrqKGvop6wtLCvqayjqKaqqquppKagm6SenaWnpqOcrJqirKGkn6+inZqSqqS1sK6gqZudlpSno5CaoqifoKacsaajp7GstsiytaqsqZWRnZyimZ+ks52aoJScn6erq6OumqypoqGqo7OtoqqzsaGaqqiur7ajk5ajp5ibkXyqbJ6Eh3WreXywb4Kki4mflpWflIHSuLS4yYCBsl9flKmDpIiHoHmYlZp4qsl0maOVp6mQkpuMf5uJmsbGeGWhgqVzgZ+Ogn2vXnC1Y7F1S6OGbadHgpNkj5Ceknxwl5N/cHt1fXtuW2VqcnFmgWpfYVlkbVxeWUlNTEtFREFCPkE8Qj9KOzc5Nzk5Ojs7OzMuNjxBRklMTU9RU1daW1tbXV5fXl9fXlxcXFxcWE1CNzU2ODUvKSglJiUkJiksNEVOUFBNRktKVkYqTDAvPi01T1RRHRw7PEYyLCSnpMHGua2psq2spaKcsrmsqqGmm6imqqyppqCmpZiro5+uq52moKyanqmlnae2n6KXk6iqtrKsm6acoJWQpa2RmZymoqCqpq6ho6epsLTCsbOqraiTiZecpJqgoq6mmKGVmJylpquar52tqKaerKO3rKGyua+dm6+ns7OzpZSYp6OZn46CnU54moF/n3qDo32DpISHp5+cnpOEuHt8ebmCfszGwrZ4m6GRi599mpaWinaemIqkmKOofrCFnIWehKx9mZRhpWyjcI+FkIF9l4NyrGCkc3GAmmC8fVJVdY6SpJd7fZOSi3V6c4V/cVxtbndyaoFvWmRfaG5jZF1LTVFUQklIRkk6OUs+QjEwODg2Njg3Ny0qNT09P0JER0lMTlBUVlhZWltcX19eXV9fXFpaWllVU09IQDc3Mi4sKi4rKicmP1FUVldXV1lYWFdVT1VGPEUzOlBbVBwbNj9ILC0gi4eZqaukq7irr6Ccoayzs6afoJWlrq2uqqedpqaao6ehsq6iqaayoJmppJSjtqKilZeiqbS4pJyinaOTkKGxmZ6cpqShoq+unaSoobayw7Guqa2pkYeQnKecoqKcpZeemJmZpaSomq6hrqWml7ClvK2ht7etnZ21sriws6eYnq+ho56Fj9G1w7d5h46FkZOQgaZ4lKJ3jKCShKWBinGqhoS0bnJqmaOblYqffJiZhoePc6+CpZuijaaLk52JlJCbbXCyXKVzk3qcbJl/e5l9bqlhonFxf59ic7K4aHiPlKaYfoyNk4t4fXmOgm1peGl4c25/dF1kZG5tZmdgSltYWDxIR0BVM0BGPjwqKDYzLjAxMykmNDo7PD0+QENFSUtOUFJUVldXWV1fX15eYGBdW1paWFVSUlFGOjIyMzAvKysoQFFSVFVUU1RWV1dYWFdVVlZUUU9RW1UlITJBSCQpJZNzjYqtv7+7urWel6ikrbWho5mVo6mnrqqrmaWin6WgoLWmoqmnsKOUrKOPpa2jnZCamqq0tKSdpJ2pkpSXrqCgnaajnKectJqhqqO2q8OvqaupoYyEjpyhoKWhlZqanJiamaakppirp62ipJutp76slb2wrJ+isLO5q7Snm6mxpKeYeqiQfXywd4qBpKWInG2yb6GHrXyhj4OolZiArIiFroWflKmgoZaGn4CZlYB7kn6rgJ2aloqqeJ2gj4mTkoB5r12jgXymp2SdgHyXdGuuXaVrcYWZXWBbjKBtlZKnmYKUjZeMe3uDl39rbH9ifXRtgHpgZ2VxbmhnaENaYVs9S1QyVThCQkM3JCQzKycnMywgLzY2NzQzNTlAQ0ZJS01OUVNTU1ZaXV9hYGFhYV1dW1pYU1BPTkk3MDUyLiosQVRWVlZVVFVVVVVUVFVUU1RWVldYVlVVUUhGSUojKCi9kpqEqcbCtsG0n5qsoK64paSOm6SjoK+vqp+kn52tmZ64oKOroK+qmq6hkKqppJaJm5CusKynn6ebrZiYj6yioZ2loZmknK2Yn6imtqnAr6Wpo56LgI2bmp+mnZKVmpqUmpqlo6SaqKyso6Sfqqi+pJfDrKqioayyuquup6CzrqipmHavfpCLnIWHfLquiphlsIxlla19oY+DppWagayKhLCFpZmkoaGQhaBbbGqBs2B/rXt7goCxbGdumZeMiLBbfbRbpINryKJln4B7vFl2tVqyfVKvgHqsWIChbZiPqJuLmJGWlnt5jp1+ZHN+YoN3dIB8YWpmcW1mZWVPVWRcQlRePkkoPjk9NCEiLSUfMi4gKjEvMDQ1Nzk5PEFDRkhKTE5QUFJUV1peYF9gYWJeX1xbWFVQTkpHQzU1My8vQFVaWFdXV1hYV1dYV1ZXV1dXWFdXWFlaWltcWFdXR0I70p+zsre9u7TCs6ObrKaltqihi5qgn52zs6meo6CdtZigs6iqq56vrp+rm5WvqKKOiJuOr6ypp6Knma6TmY+omqKdpZ+Zo6KlmZ+jqbKovK+lqJ2cjn2Lm5WgoJmPkpqbkpmXqJ6hmaiup6amo6Wpu5+gxqelqaGrtLatrqaeu62srJWAqZKjr4+bgIekl5iQgYC4w7qDjp2ThKeWnIKsioKviKabm6WqkH7VvcKqYqO/vX1+o4KD17q4tYWUk4Oevb6EaqOBb6uEbZ1/erKwx4Nqq7C9rHh3or67dICWjqadkJyRl5x5gpGbemN9e2SMZnmCe2BrZWtqYlBiW1NqXEBUYUJOKT06NC8eHyQeJTIgHSQoMDQ5NjY3Nzs+QURGR0pLTU5OUVRXXWFcX19hXmBbXFlUUU1JQz88QT81PVNZWFhZWVpZWlpZWFdXWFlaWllZWFlbW11dXFpWWFRXWryVs7Sxv7myvbKina6mpbOmnouYpb6pt7Goob+mprKcnrGcuaiera+mp5WUsKyXjIObka6mo62hpJyqoJiLo5KnnqecmqCoopieoKytqrmuqKOalpJ7h5mRppuSjpGYmI+Yk6iZoJipqaGqp6Gjq7ueqcWjoK+jq7O1q6+poLqnrq6ac3WqpLeGZYmgcGetj4qPbW93pJCZn4F1rpmVcI+LcZWoo5uXrqRybW1tZYp4b22CmXGAeWlxaWeJlpWYcWhphIZncIZkXYljam9ZXWd+d6ZgYnGOkW9mZICNko6imJiZkZaefIeOlXZmh3hojWp5fnlkbGNmbGJLZVhKbFk6UWVFUidLOisjHCAbIywpGBsYLTIuNTo0NTc6PD9BQkRFSEtMTU9RU1ZdV1pcYGBhXV1bVFBMSEQ9OkFCN01YWlpZWVpZWFhZWFdXVldZXV5eXVxcXF1eXV5dW1tVV16ola2zqrq5srOqqaGunqSyqZiSvbLEyL62qp7Aq6yjoaesn7qjpK2sraaOlq6pkIyFlZetnqaqop+jo6CRjKSSp5momZajqaCWnKWmp6+6q6yam5KSe4SXjaWYjZGRmJSNmJWnlJ+YqaObsaeeo6y6n7DBp6Szpqyxsqutq6e4o623loqhqKW2nYmWopiHqZqQlJ2TqrOZm6OroLGWoaGdoKKcoKShlaumjJKSjIeSnJyUkJqTmJCNlYaBpJqXlY2Lk5KKj4aEfmeKf3SCdnSHjHGnbXuUkZSTgYGPj4+PnZShlpmXooKIlI1yaZB3cIt3dnx6amxkZG9jVWBZQGlbSGNhT1orRj0rJiE3NDAuHxwhJTIoKjY5OTQ2OTs+P0FCREZKS0tNT1BRWFRWWV5fYWNdXlVRSkVEPjk9QEFTWFtcWVdYWFhYWFlYWFpaW1xeX19gXl5eX19gYGBfWVlgppapqqW1t66uorCkraCgtbGQjqvGvcS6uKqipZ2bpp6xqaO2p52ptaeokZisoouIiY+cqJaspKGZp56ek5Wjl6iaqJmUpqGjkJuomaG1uqirmZqQjXyBlIuglIqUkZWQkJOXpY+fmqqgnLajnaest6evwa6jt6avr7CtqamyuKCuvJmRpqOmtqKSnaafjamfjZKfo6yvmqGjsaivl6OgnKOpnp6dnJarnJKZoZuUkJaqmY2ZmZaQlZ6RiaCdlZSFkoyQjJSKgH5mjIZ1hnZ5iINznGqGkJSUkYp9jJaSkpiToZOel6KEiJiHenKWc3qKf3F7f2puZF9waWBbYFptY1BgZFBbOkdHRD0yPT03LiomKykmHSY0MDY2NTg6PT0/QUFDSEpHSktMTVNTU1VaYGBpYGVWUEpBQ0I6OUVNVlteXltaXFtbW1xdXV9fXV5fYGFhY2FhYWBiYmJkYlxbY5eVpKijsLOsrqOpp62gqLWqkJCdprS7r6ysoqOaep2isaSlsKmWm7mno5SZqpyOhoqJnKOQrp+jlqigoZKXmJuvi6qWj6iZp4yZqI+eubakpZmbjYl5gpOLmpOJlZKUkI2RlqKMnp6pnp+4pICEr7WisK90pL6jsqB4eqCqsbuUdayknomAqn5kXGJ2oI6knoSXfm6Ts5yjp66qo2Wdn5NzeZmXcICYqJdsf6KoimWcpZyRl5iWi5GbkYadmpCVgpKHjo6SiYV3a4+HdoZxfIaAgGFph4qUkotbdpWRZ2iQjnJ7ppmZZXmZh4J4mGqEioJueX9rcGVgdm9ra2hcZmViYm9TXD5OTk5SRz1AVEI5MS8eHyY0OjMxNjY3ODw7PkBBQkZIQkZGSUtNVFRVWVxfaGZnV1FKPERHOzhVUltgYWJgXmBfYGFhX1xdX19fYWFiY2RhYmFhZWRjaGReXWablaajobCxrKuppaito6etpJKVq7awsqaaqqerl3OMnbCfqKunk5e5oKCPnKSdkX+IiJuejauao5Wnop6Ol5GehXWukIimmqiRl6SInLq0qKCZmIuJdXeTjJWSiZORkJSMj5Ogjpugp5mcs5aAjJy1nbOMko+8p6F+p6J6oq63gY6Npp6Di4WPsamvjIqWo5p5gYushpydoqepp4eVhZh3pZt6h5uBl6aCgXucsXqKhaCXmZSYloGQlpaEmZljeYeQhI2PkoqDbXCPh3mAcYCBhX+GdIaElZJ4lmiTdKCadH2ZhKGdh5h+kouDg5lrjo2Fa3h7cXBnZHduaWxqW2VramVzXF5JVExRQEU1LllUVTYpITA5PT42NDM1Njg7Oj0+PkBESD9JRUpLR1NYWllbYWFoZllRSDlFTDs+YlZeYmRlZGBhYWBiYl9dYGFhYmJiY2ZnY2JhYGVkY2djYWFonJejn6aurquorKCosKanqaWZlK7HvrChlqaptZ6Pg52snKeioI2Qvp6ZjZ+aoJB9ho+Zl4irnaKWn6CRjZOJhoCRqI6Hopyjk5eehp66sqeem5KOhXB1kIiTj4mTj4+bi4+RnpGXoaSWnqyIn7SJtJqti8qHqq6It4WNsIKwroOpjaaZjZ18qI9ye3ecj6eWaJWkebSLn56mqJKZwoF/q4iYoXGegJmkfZeFlbGAoXyhlKCQmJaAjpObipeRi3yFk4aNlZOJg21zkYV/enKGgYR8hHSFgpeBj8VmgKmHj6NrnoOimoOagIyOhYqZcI2ThWh3dHt2Z2h1cGdnbF5jb2xnbVhoR11RTDJFNDZNYGM3JjM8REdEOjY0NjU4Ozg+PT0+Qkw/TklKTENQWl1cV2JeamxcUUU9S01ASmRZXWNmaGdiYmJiZGNgX2JhYmNjY2RpaWNiYmJlY2FmY2JiaZSXop+wqKmopaugpLmwqqummpSgpKWro5alqrejr3+hp5ylnp2JlL2ak42hkZ2QeYSWlpGHq5mbm5mhhY+Md5ucj6CRiJ6km5WZmIaiua6kmZyMjH9ibY+Kko+Mj4yNmIuQkZ6OlKChmaGofqGnh62doJauj56dnZGGgaCNqq6GpI2qmoyafqJ2gJmUa4KsdU2reIeNnZGbqKeAqqt9g6F7eqdpnn+Sa2eXhpe2iZ59bmBkWYOWf4x7ZGiKcpl9eZVsXXuXbV9TcIRcX2x5g2BZZYJ9hIGYcaeqa4OjbnKlcJ+En2pln2xbbop8Zlpfg39iV1BvdmVtdHFqam9eam9tbGpYaU9dWEU5QTRHQ15rNCxJQ1FNTj04NDg1OTs2QDs7PkJPPlFSTE1CSlxdX1deX2N2YE1EOk1PTVRiXFxmZmlpYmJkYmRkYmFiYGNkY2FiaWtkYmRkZ2RiZ2VhY2iXlp2guaGqo6askqG2vKuuopmXoKKmra2hna61oqiSoaCgppyZjpi0mZCLnoyVjHWBlJKNiqaWlZienn+ShYaspIeckYqYqZiZmpKHpbGnopWaiImAaW6Ih4qNjYmLjZKLkJKhi5SeoJyipX+TgY+joZSgd5yWj6eDoad/hqmshKV5in2Emn2icHKTiJZ7nox5bYecjJmQm6iaj4edfIKic3amZp5+dqRfmHp9knOibpi3tLp0koeCf7WoZIHGuHtwlbeLcYCbpGNzrKtgfWqds35ufYeDjoKLl3GAo2xzpHOehICkYJ2Zs5ZxfJeftHRzW56yg2pib3R1cWhvWGtscnNmXWleYktEPUQ1UUFZcTM9U0dfSlI9PDM5NTo6NkQ7O0BJUD9UTU5RQEVfXltaV2BgfGRIQzhMV1VWYmFaZmZra2JiZWFkY2BhYmBkZF9gY2tuY2NkZGhkYmdmY2holJaVo7iZq5yToI2kuLWuraCbopyjo6atnJuxrayTl6GZoaSZmpSeq5uLiZJ4i4ZwgJaNio+gkJOUnZd9kImOqKCHmI+KkaKTm5qMi6iopZ6PloeEfmt7h359j42Di5CQiY+UoIKWnqCdoJ+LiXecmKKMoHKii4ipiJymkJanqn6ujH16oJl6o5N4gXSWiI2cfZagh5uOmZumhqJkoXyIlpCbjWyeaJuNbpqZe4CKp31yaHSrg52DdKpnlJpdm4V2hJ1oqmqAuGZcqHCBnGGVjF6ndnWJin+eaJp1h5OSmI5/n26akG2nmV2ofni7a36qW46EXbRnXG5xenhraVtxanh5Y2BmWGJBUEVON1ZCUm40S1paX05aQ0AxNTE7OzdIPzpDR1Q/WVJZXT5EYl5WYFFhY31pRUI5TltdWGRmWGZnbm1iYmVfYWFfX2BgZWNeYmRvcV9kZWVrZWNpaGdraZWciaq1m6eJY5SbrLqysKydppycqJ+erpuesKisnZekmqGfmJaWoKOZhomNaoiAcnuXiIuWloSRlJiPeoqElqSdipSPhYudkZyciY+oo6CZi5GKgIBpgYd4f5aLe4iOjoiPlpp/lKOfoKKTmHJon4qfj4xxkoyBqYiZn6Onn6d8sK2joriXd6OzoqSAiJR5nXurmn+ijp2bl4mXcaF8hY2vtX1rmpGheH6YtKOjq6iEmXybfZ2afnSqWl1ve5aLeJ5iTH56eoVjeZdCTZ9ZompxfI5tgYmEmXWbeYeJsbN/f5uTp3WBnW5yfZRvmXNqpF2VdkhlY2BzcX5+bmVgbGh2fGRlYlJeV11UVkBZRVFnRFNXW2JYXklEPUI4P0I6SUU4TERXQVZRW1ZERmJcWmBLYG1+cUVDPFVfYlplalZnaG1vYmZmXmFhXF1eYWhiX2VkdmxeZWdma2RmbGloa2mTnYGxrZmEVF+gp7O5s7OpmqKMnKucnKmUoaukoaiPn56dmpmVmKCdloiHiXeFgW55lYWQm4t8kZOWiHKAiZOhnHORkIGImJSfmoSOqZyalIqLinyDbISFcYGgi3iFjYiHkpmVfJOjoZ+jiK6GfbWEjp6de6WWeqmBlp2QiqCcfKdodm1+mXShc3F8noaZcJODrn2kg6aemoGjb16oZ3WjY2+lYZzTkHx6mXhyc2OihZB+o3Ojj3VrkLOLYIKYiXOqsqi8f3eDbX6+pqm0XpxufXGXb4FzonJdo2d0pmFopm2b1Jl8hJtveHqXa5t7d5dybamkZ2BleXCAhGtnZmRtdXhnYGNUW2ZRUWJJV0lUX1dTW2VqXGRQRUNLTUpLQkpFOFA/UE1XU1hPUlJgZmVpUmN3eXdJRkVjXWRaaGlUaWhqb2NqZ2BjYFxdXV9oYmFoZXxkXmRnZGtkam1naGxol5uAsatUXEt+qa+xtLCzo5yZhZmooKCjjaSooJipipmYmJOZk5KgmI6IhntwfYRofY+DlJqBd5GNjolvf4aQk5Jsl5R9iJGRo5WDjqqalJKLhYl5g3aHgG6Cn4Z4gJOGiJmil3qToqSaoImzoaK2i3qsp6SupXCpgJqPhoGcknykgKKZhphynoSjra6Kl4yAjKSNloOuopV2tbW1yaFzlIqBn2Cdl6lteZWGn5p1oYd3oH6RloqAb0xmo5JwmodypHt5dGGDgmx+oGtxZGCccn90l2l7abO1tMamc5h+e51qm5urdYOabHR3l2maenWYclBEfbNeanZreYdmamdidHRxblZeVFloT1FoSVVMWVNVXWhrblZnV01KQUpNS0hKTkFRSlBkY2ltZXRyc355e251iXt7VFBPbF5oW2tpUmpoaWxnbGdjZV9cXVxeaWJkaGt7X11kaGNqZm9tZWlsZaGcibCnhGY/lKGyq6+vtqKikICXqaKipYylp52dpoKal5aNl5CPnJOOiIN5anmGZYOMf5egeXWPiIyBaYSFkoOMhZ2NeoyKlaWSg5epl4yRi4GJeoB9i3hwkKGHeYGVh4mWoJZ/lKWonJaWhGdueJxsomR8caV3m5hwZ6eBl4x7pXqfloOXcp52gYmUlo+5bpCKomJ9maKViG1yaatqdaBtbqZgm2mLkGiWh5qVdaKAfZpgi4WMdG+IYmigZZ5+aZp1b2NmiIJucqJaX1tjoW5diYxve39zcmSlbXeiZGenaJhzi5huoW9TiI9voF9lp1SLXVSYbW1za3KCbHBoa3hza29SWFdWZllSbUlYT11JWGloc2pZa1ZRUkVWXExYUmFUaGped3V6fHB8fHKDe39ydo2AhHZeUXJiZ2JwZ1BqaGhrbG5nZGdfXV5dYGtjaml2dV1cY2ljampzbGZrbWOcpZmmemV0bYunrqSpsLGmn4uAl6udnqWMoqGaoqKAlpiTjZqPi5iQjop7h3GAiGiLi3yYm3N0in2QfGSCh5WKipWZgnyIhpankIGirJCFkIqCin2AgI9zaI+mhH2GlI2JmKCOiJKqp52JpniWnH6liZaMspiekIKvl5+leJWIeql0pY+Emm6kooyShIyDu259pa+ChoaHk5acn3ylenGolaCWZ55+b6tjloqVkneobKmigYl1h4J3q5GmiGuRsGt2s4ypa4qGbm2fnpKVYX+ri6p2gH+Mpp93n32FpZWdoGmah3asZ56tjLdzd76NpJNZg6aNq2F1cnRwfHRxYmp+bmhtU1ZbVWFhXGtNXVJdSV1tbXZgW3FZW2BaZ3Nlbm9xY3F0YHd6fnlyeYNzhH+Ae3uMgYKAdmJ4ZGNtc2RSbGdob2xyaWZpYV9eXGJrYm1sem9cXGJpYmxqd21nbG5ilaaqnYGAnqSWqaqdqKeupJmJg5irmp6kiZqlnamdhYyajoackYWSjYyNdIZ6iIRvjYR+mJN0dIZykoNtf4uSh4aUj3x7gYWXpY1/paaOgY6JhZV2goeSb2yLqYGDjJSOiZyfiY2Tq6OgkIB1lJeIfoF5lK6jf4GbcY+FeZCLhH97cqaMcX19epeWm4SOeHt+foeUlZOKdpCYn6CDen2JbIyFW3l4cXlwaG5+kolxf3SCj5STcYWDgmWNf1+Bf4t3dXOUdW95bm6HbYSGXndpeI1mgYKGjqmbfnR8l2qJiG+Adn2Gdm1sZ4xzeXuYeIRba1h5j2hud3Jxb3h4b11shm5pZ1ZaYFdcZWtjVmFVX1FfcHh5bGt2ZWpranZ8cXJ0c2FvdWJze4F4dXmCdYCAf4B4i4WDfXttf2xkeG5eV25naHVreGppamRcYFpjamVscHVuWltia2RsbHltaGxvYY6Uuamni6GimqakmaScq6KhhISYrJKdoImappupmIOBm4p+lpOHjoqJjXKDfI99fo+Fe5eOdHKDcJaFe32Si4aGkIV4fn+GmKONe6ehi4aQkIWWg4aOl3ZyhaqGjpKckIienoiMm6igoKuDiY6Umn5+iZatqI+Tpo93b52Rg3qSb36ohXB9lXFrcHyBn4x/k46MaG1dg4uMm5uejnOVi4hxdGuCdnOAWXJuh5GBfX6Mal1qZHuFg4iAX2l4e5t7gouCdoGGgmh5i4drYXFyg3dfc4yCiZCnlYZmjI+DbneLhHGGj3pvZWdkeoN6lltcamdudlt7eHd1bnNzgmZcbYprbGJZWV5aWGxyXF9hWl5dZnR+e3VvdGNra2p7fHJ7eHRkbXRnbHt+dnp8e3p6f39+b4aKhHt9c355c39pVFxxaWx1b3Vna2hkXWFYa2hranFybVdbZW5sZ3N5b2hqbWCLjKqxopCjoZqenpeemaijon6DmK2Nn5SHm6KRpZV/e5iEfJKZiYiGh4pzfYCLdoWLgYSWinFvgHKYhoR+koSDhoqBeoCDi5ufj4KmoYd4jpiJlYuLnJeEg3qtgpGYmZSKnp2HiKGroKKio4uIk5uco5mWqqGnpqCSm4eWjnt4jo6Ep35/kpGSk5yxppuVnpCNspOYhKWMjJWbn4mQm4KJkYprfI12d2WChpCKe4mdhIeLj4iIgIWEkHd8eXWaoYiGip+LhZR/foyBgHZwdIaEf3iIh4uQppCEhY2Ig42QjH2Ii4mQgXZsgoR8eZlqcmhhdIpwfXp3dm92dIFdXm+GaG5fXlpcXVNoclZjXFxhbGh1fHxzb3Bka2ppf3tteH9xaW9wbGaAe3KCgHh/fYCEem2DjIZ8enh8fXqDeU5kdmtzbXB6ZGtlYmJgW3RmcGZycm1VXWx0bWl5enFnaWtljIidup+WoqGYlZmYlJmkoJ57f5qrjp6NhZ+di56WfXmUg3uOmYmGhISGbniAgHKBiH6JlIRta356l4aEg5B/gIaEhnyHg42bnZKHqp+DcoqQhpOSjJ2RfY17qoSNkpiWj5yXhoabp6Cimp2Gg5GamZmQmqagpp2dkJaAkIp2fIeOhKV7fI6QkYaYqqGek52QjquOkYCejImTmp6Cjpd+ho2Cb3iFcXRgf4KPhnWLl4CDj4KGhH6Fg5RueHV0kqGLjIWahYSNdICJfHxycnuIhHt5i46Ek6ePhoSPgoSKiop3hoiJi3xva36Ae25obG1nXnp/aHx7dnR2dXt3XGBwfW51YGNaXV5RZ21TZVteYWtpdnp+cWxsZGtqZ4B/bHOAbGx0b3huhHluh4B2goB9hHZxgo2Ifnt7fH97gopgaXtqdWhpgmRqY2BpXGR1aG9idW1sVGNxeWVwenpyZWltbYuKn7eaoaOfkpGWl4uan5+ee3ieppCbioaklIuYmXl6jYV8iZGDjIKBgm18f3hzgYV9i5F9a2h9gZeIgYiOfH6GhId8j4CPm5uRiKedf3CLi4yTh6GhioWNfKiRiJCSl5OWk3iMo6Ghnpaaf4CQmpiTjJujoaSal5Gbfo2EeH+Dj4eggH2MjI98mKSgoZOZkJCnjY+Bm5GJkpebfZKSfoaNgXV0gnB2YH1/jYZyipV8iItyjH+ChYaOaHdxeIyYko9/l36Ii3KBhnx9cHh7i4R6epGNg5amk4uGkXyGhoeFdoKEiYh6ZXJ7f3l6cWxqZl5+c2h8dXZ0fHOAal5gdHZweGRjWV9eU2toVGRZX2FoanZ4gXFma2NsaGV/gGptfmhucWt9d4Z6a4yBc4GBfYF0doKNhn58e3+BfX+PanKDbnNpYYdobGJfcVZ0b21uYHhobVdqdHZjdXt7cmJqbnmJjZ+ykqWlnI6QmI+GnKCbnHx2pKCNl3+MooqImpZ4e4aHfoOJf4mCgH9xf3t0doOFfoqReGdjfYaXioKKjXh9gIyDeZaAlZeWjZagm35vjIKRlIamm4iNiYSmlYWTi5aXk5J2kZ6hoZiUl3p+jpiXjpabnaSdmJKUm3mPhYJ3hJeNnX6BiY2Mc5einqKTmY6PooyMg5eYg5KWmX6YjXyIjYF2cX1uemSAfIqFcIaTf5CCbIeCgYCJhGV1b3yHkpeNfZN4i4l7f4Z8e3F+d4mFeYSQiouYopWBhI13iISDgnd8gomGdl94d310fnhnbGRhf2lqd3N0dX1xfGJjYXNudXNtYVphXltrZFJiWGBhaWt2eYZxY2pjbWVofINsaHRobG9of3yCeW2QhnGAg4N/dHyDjIF/fnqCg358kG12iXR0bWWKbGphY3VWhGlxbmB5Z2xianZwZnl8enFgcmyGhZCcrZemqJ6NjZeHhp+Tl5h9eKqcipl6l5yLjJiQeXuBi318g3uAgoB4dHh6c32AhH+Ji4BkXn2LlYd/hYd0fX6Kf32XhJeTloyjoZh/cod7k5KKp4+MjoqToZKEkpCUl5GLgY+YoJqSkJF0f42SlImdnZ6nmJiNlZZzjY6Ka4WYj5l6h4iQiW+XnZqjk5WKjZ+Mh4KSnH+SkpWGmYh8iYmBenF5a3Vse32Lfm6FkoKUd2+Cg31+in9kcmp7gJaXhH+NdJCJg3iHfnV4gH2GgHyDjIWNlKSQeYWCdImHfYB0doGIhG5ge3V6cX1vYW9jZHtibm92c3h3c3Rhdl9vbHVub1xcX15eal5PXVhjYWhtdHuIa19qZWpjaHeHbWZsaGlsaIB8endvkIdzgYOEfXOBhol6gn16gYR9fY5yeot4eG5sh2toX2lxY4docW9ld2hubGF5aGt9e3hwYXdti4GZmqqgpKidioqRhoqeipWXfXeumIyXfp6TkZaUiHd+e4p9e4B2eH+AcHRze2+GfYGAin98YVx+j5GGf4OEc3qAhnqPkYeSkZuSpZuVgn6BfI6LkqSJjoqNmJuNhpGYk5aOiYmMk52TkIyNboOQj5GJnpmioZeWipeRboiZhGaGmY6TeomFkIpwlpqUopKSiYuajIJ/kZ58ko+Si5mOe4qEh3RzdWtxbnR7i3RuhZCOknF0gHuBgoh8ZHFseX2ZlH2EiHSQi4BziHlvgH2AhnyFjIiFjZWojXuIfX6LhXh+cXCAhYNjaHh0dXB8Yl5wYGt0XnFqenh4a3NwZXhdbWxzbXNZWl5gYmpaUFdYZWNncXF/h2ZdaWhnYmdxjm9kaWdlamiAend0bo6FdIGBgnt1gomFd4V8eISFeoCJd3+Le3pyeYNqa19waHSAa3JvbXFnb2xlfGNugHl2cWx3d4p/opiiqKGmm4eMioGQnIaTnHWBqpSSjoegjJaTkIB0fHaFd3h/cnN7hWtyb3puinaAgYducVtZfpGNiH+AgHZ1gIB/oIaQipKcl6GUmHiKf4GNiZ2eio+GkpiWhYmVmY+WjIuNjo2dio6Qg22IipCRiZyWoZuYlYaYiGmEo4JmhZ2KkX6Lg4uBd5OYkp+SkYmJlY5/fpCXfJGNj42akn2Kf4JudnBsbW9we4Vpc4OOl4pwd390gomCeGZzb3aBmY58iYR6lJF5doh0cIl7hYx6i4aDiY+co4h8hHeCi394eG9rgYOBXXJzcXBweFpecGBwal5vaXx6cG1tamx2YHBvanJtWlhhYWJuWFFTWmZnY3VwhIJiXWptZGJma5JtYGZmX2hqgXVxcnCLgHV/goB4dYCLgHiFf3eHhneDhXuGjH97dop/anFjfGKGfG9xbHRqaG9sdndfcX95e3R1dICCfqSVmq2fp5aFjYN/l5SDkJ91i5+Uk4aLm4yVjYt6cnh0gnByhXRxdYhsb2x1bYh3g36AbW5VUYGrlIeCeIB2coJ5gaCCkYGTkpickpp4knuDjZOkmpOOiZWZk4WHl5mMlIyJj4+InoWQinxyioWJjoicmp+blpSAlH9ohZyHZ4agiJKEkYOJcYORl4+bjpCNjJCNeHuSkHqOi4yRlox8iHyAa3ZqbmtrbHp/YXl+jpWBdnqAd4ONfHlndGx0h5WLf4iGe5SQcXqEcHaMeomMe4l9goyRn52FfXx4gox9d3FqbIGCeV93b21scnNWXm9icmBfbG55cGdwZmZzdGhxa2F3ZV1WZmFgclNQTlxmZV15cIh8X11ocmJiZWaSaV9oZFtncH5wa3Bzin12fIWAdHV/jHl7hoB4iINzhoV+jIyEe3mVd2ZyaoNgiH5vb2t6YGpudH90X3R9eYZ4dHOFfHigj5mwnKWOgop/g5qIgIyef4uak4+EiJiOjo+EdnR2c4Bwb4VzcHGDcGtpdm6Dbn18bXVzUk6C38iS1pN8b3SEdoOggpN3lZGZm5Cae5RzhZCfoZOTkIqTm5SGfpaViI2NiJGNiZyAjoF4eox+iIyKnJydm5WTeY12Z4iRh2yIo4SSh5eDhmOMkZmOlYqXjI2Ki3F7lIh7joiKkpGJeYV7fmx7ZXJva2t5eVyAeY+OgHp9fn+Gjnp5aHNrc4uPiYKFhX2VjGt+fm6Ai36Lh32EeoGPlpqain13eIOQeXNtZ3CAhG1qdG9oanRuU15vZHBZX2tyeGZramJmeHJwcGNfeGBgVmtfXnZPTkxgZ2NdeXGJdFxcZXZgYWVlj2RgZmFYaXNzbmtxdox8dHmGgnV2fotzf4Z/e4l+comHgZGKiHx+mHZlc218ZYh+b3BsgFpsbnl5c2F2enuNdnN3ind5n4ubrpugkIKFd4iVfn2KnYeFn5GOhYyXhJOOh4F0d3B5cW6Eb21ufnJkZHhxfW16fWpobGOkmsHcru+hc2t1hHaFooWSb5aQlaCUnIGScYaLo5eJjpWKkJ2Wg4CVkIWJj4CSioqXf4d7dX+JeIaEjZybmJmPj3aKdm6GiIt9iqOEkYmdhYVei5SXio+JjouLhIptfJaBfYiFiZCPhnaFfX1rfWR4dWpueHNYiHqSh4V6fn+AhYt+eGVzan+JjomCgoCMloVrgXZuiJCCj4R/gnp/kJaTmZB1dHiIjXVzcWd1eoNidG1vYml2Z1JgcWdsVV9udHlhcmNfaH1wcm5bY3JhYlduWlx3TU1MZGdhXnZziW1cXGR5XmBkZoVgY2JeWWpya25rcnaMfXR3hIF4d3uJcYOEfX6Ie3SLiYiWh4x+fphzaHVxeW2Lem50cIFYcXp2eXFld3mGjGl3gIlyf5yHmaeco5KEfHCMlHh5i52EhaGNjnuVjX+ZiIR7cndwc2pvgWtpbHx0XmB4d3txdXtnYWV869q1ycPciHNsc4F3ipqIjWmYj4+dlZOBiXGFiaCNhIuVioyYlHyNk4iDiY97kYuGkIJ/dniDg3KHgpOblpSYhox2h39whIGJh5mhg5SMnoOJYYOVj4eJhoqNh4GHaX2Uf32DhImOjYJxhn5/cXdodnJpc3dsWox8koKFfH+DgISKgnVhdGyIgY+Kgn5/kpB9bYJseIaPhpGDfYF9gJKTkJeJb3J6jYZ1bHFscniBX3NpblxrdmBSZHJpZlNfcHZ0YG9gXWiCcXNqV2doY2lYbVZbdUxKTGVnXmJyc4VpW1xleV5eZGd7YGRfXFlrbmVvanN3in5zc4F+enZ6iHOFgnyAh3Z3ioaOmIGMgXuTdmx2dXl4k3RueHp9WHmFcYBvZ3l3koJkdoaFcYqVhZmhm6KKhnNvkotyd46cfYqaiYl8n3+DmX+BeHFzbm9kcn5oZmx3d1tfeXt7cXGAaWFnYX/Vto6QpnhucXd7cJKQjIdqmY6InJKMhXtpiIuah4GSkYaHmI18jY2BgYmOfJCNfoqFenV7gnpwhoCWmY6TlIGIdYOGdoN/ipOdnoaVj59+iGGAk4eFiISKjoB/g2d9kYB+f4KMj5B+bYJ8gnRrbXZ0c3Z1a2KNgY9/hX58hH+Eh35wX3NxhXuPjIJ8fpGIenCDZnmDioaLg3yEfoCUj5GThG5weox/dW5va2x6fWJoamlYbXZaUmlyamJRYnJ4bGJlXVlqg21zYlxnX2RsX25UW29OSE9nZVxnbnGAbFtcY3NgXGNsd2RlXV1abGxibWpzdod/cW9/fHx0eIZ4hYJ9gId1eYmBkpZ8iIZ2iYFvd3l7hJNwbXyBd16Df3SBbWl7c5RzZ3OHfHKRkYOan5ughod2dpR+bXaUl36IkYOKjZp8i5p2fXZxb2xqYXR8Z2JpdXpaX3h8em1xf2VkaGhXnY9ecXKWvMODdXGUiZB+cpeMhpyTjIhza4mPloF7lIuBhJuMfIuGfXyJjH+UiHWJhXZ3fYFxdYaBnpSGlY+DgnJ/iHWEe4mYnJeGk46dgIhlfZOCgIaEiYlygX1nfYt7eX9/h4uOfGmAfIN2Zm94eHN2c2xqjYWKgYp/eIGAhIN/a15yeHp9jImFe4GPgH5ygWl4goeLhYR4g3yBl42QjH1ubXuJfXd1b2hofXZkXHBiV3BzU1Nuc2lhTmZ0eGZgXVxYboBvc1llYl1qbWBwT1lrUURTZ2Faa25te29aW15tY1pib3djZlxdYGxqY21qc3aCg3Fufnt/dHWDeoOCfIGFdn6JgZaReIOKdIGIcnh5fo2Qb298gXFpgXl6fm1tfHaVa2p4hHRsk4yGn5igmYWIbn2Mdmp4mI9/goqDlZeJeY6Wb3pzcGxqZGB0emhgZXF6WmFyfXlncHphZWWPsbJ3SmJapNnQlnF7kIuQeH2Vi4WZkY2Gb2yGkpJ6eZKGgYSYinyHf3h4iYqEloBwjIhxdH16aXmFg6WRhJONg39vfoN2g3eFm5iTipKQlIWHcHuSg32Dg4mDb4F4aICFeHJ/f4OKhntlfX6EdWRwc4BoeHBvdZiMhYKKe3Z4gIR5gWtccX1ygIeFiX2GiXqIcoFucYOGjoSEc4R4gJmNjYR4bm9/hH93e2Voan1xYFl3Wlhxbk5XcnNnYEtsdnRhXVtbWXR9cm9XZ11manFfb05XaFE/WWZfWnBrZ3lxW1tYa2VZY3B5X2hcXmVtaGZsaXF3f4dvbH99gHVwgXqAgX+Cf3aBhYmXinGCjXF7hnx5eYOTjHVqen9rb350f31vcnx7lG9ugH94Z5KKgqGZnZGChmeHg29oepaKfoCFgpmKgXyNjGl4cmtsZl9hb3ltX2JveVxka4J6YXF2X2Vm1Oq+ijI6PouOgHJ5hYiOjXaDl41+k46Nf25shY2Mdn2Pf4WClYl8g3hudoeEg5d3b4mFbHV7dGZ5goOnjIOPi4R9bn90doN5hpyQi5CRkoyLhn57kod4gISNg2yAcml/fnhtfHuBioN3YXmEgXFkcWh+bXRxdYGbi4B/hX5ydX2AcoBvW21+dHiKgot7hn98iHh6cWyIg4+DinKBeX+Wi4t/dG5rd4CAdXVcaWl3cFlXfFNacWVMW3JyZVtKcHdvXFtaWV10fnVoWWJbZ2ZuY2lMV2ZRPV5mXF11ZV90cFtZVW9kWWRxeVpoXl9nbWdqa2lwd32ObGmChH55boB7fIB/gnp1goGMk4VwgItueH6AenuIkol/aHt+a3R7coZ7c3d9f4x5eIR9fGuMjIObnZaMgYBsjn5raH6OjXt+f4OUgn99iohrdXFnaGNbYmdyb2BhbHRhaHCJeWJzdF5jZJugj25cNVmvtXVqgIl9koZ2hpeGdI+LindwbYWDh3V5iXiJfZOIen9zZ3aIfn6Yb3GGfmh2eW1leYiEpYeAh42Jfm5+dX+AfYyZh4KTkJiIi4SJfI+IcXt9hHxpfm1rgHt6anp2gYeBcmB3gX5xZHJndYJtdHuFlJGBfIF/bnd5fHR+bFhvf3Z0i4GGd4d1gYl6eHNuiYCOgIVyfn1+k4mJem5uam6CgnVuXWdmc3FRW3tOXHFcT1xycGRWS3N4aldZWVphcYB0YF1dYGdkaGlmTlloTUBhZFtgdmFcdG1YWFN0YVpkb3JXal5haGtnbWxpcHd8kmtohIl8fHB+fnuBf4J6d4CAiYuEcXuHb3F3g397iY2Pg2p+e253eXaKd314gIKHf4N+fnpthYyImKONhIN7dYt5a2yEiZJ5fXuCkYCAfoqDcHJwY2ZeWWdfcHBgYGdwZmpvinRhdG9bYWRqdnt/vpymo8i4cYWEc5R9eIaUgnSQjYhycnCEe4N0dYd0iHeUiHl5cWN3hnqAk2lyhHZmd3ZjanyDiJ6Cf3+Ojn1yfnOEeYCRkIJ4lo2Uj4iCiHqJiWx4eX91aHtpa395c2l6doCCfWhgd4d9amt0aHt/aXaBjJCUfnp+fnB7dntzfmJWd31yc4qEgnyCcIaJd3hwcIOCjH59eX58dY6Gg3ZpcWltiIJycF1oY3NuSmV1TF5vVlRZc25iUU9zeGFSWFhdYnCCc1thXWhlZGNqZFFacElEZGFbY3BeXXdoVVdWd15cZW5oVmteYWpnZW9vaHB2epJuaYiMeX1ye354goGCfHZ9g4iGg3B2g3Jud4KCfomLk39wgHx4eXqBjHWDeH+BgYKEeoB1b36Ji5qeiH2FeneGe2d0hYyQen9/fImGhHaPgGdvbl9kXFhlWW1yYWBhcWxraIluYHNpWV5kbYB3qdqpx4aHsnGJeHCNdXuHj4B6k4qAdXR1fneAcHF/bYR0lIZ4dWxgeoJ5iI9mcYNvZ3ZuW219gJCTgIB4kpJ9eHtth3WAkIuDc5aKkY6HhYV7gIVtdXZ/bmh3ZW17dm1qdnd/f3xgYniGemh0dWN+emd0hY6MlXt0f3VxgHp8bH9ZVnR9b3SEh3+AeGuIhnN4a3V/g4N9en14e3KLgX1zZ3RlbouEbXRbal91ZEhubkxbYldXVnhtYlBTdHZYUFVYXmFxhG9cYGNtZWNebmJUXHJHQmZfXWZoXVp6Y1JWXHVbW2drYVZqX2BvZmZrcWhwdXiNdGuOjHV/dnh+d4GDgXt0foOIiINvcX90cXV+hYKJjYp7d394hHx8hYd4h3x9gX6EgHt+c3Z5jI6fjYl6iXZ0g3lefYWZjHmHg3SFhoV3iXtibmxbYltbYVZqc2NgXGdub2aHcWFxZlddY2t/fMrOiLmiam1timxxhHJ8hIp+e5KFenl0eXV1e2psdWOEdZGCd3BnXn2CeouJZXKCa2pxY1hse4aciIKBc5eUd357bodxgYqLh3GWjpCIhYuDe3l+cXFvfmdocmJueHFqa3F3fHx5XGV5gHdpdXhmgnZndIeLjZR8coZpb36AeG18XVhxfmxzgIt8gW5uiX9xdmh3f4F/gXZ8cXp0h3x6cmZzYW6MgmxzWGtfd1tJbmtNVlVeVFV7a2FPVHVyUVFUVl5idIVoXGBsamZjWW5hWGJwR0FoXWBmX11Ve15PVmRwWltqaF1XZ19ecmZrZ3JncHJ2hXhulYp0f3p4fnmCh4B1c4CGhY6CcHB7eHZ0eYaGhouGenx/dYt+fYWEhId/fn59h398eHZ5d5KTn3+MfIttdoB5Y4OHl4ZzkopvhYWBeoN0Y25qWV9bXV1UZ3NlYFlkcnJmgXNia2VXW2Bpf3e+rnugt21ic4ZodHxyeoOGen2Mf3h4c3Zve3Zlam5gh3WOgXNqYl5+eHmLhGZxfmhqa1pWb3iKpIGFf3GZk3GAeHWBbYCCkYdylIiMh4OIhX15dHJvaHpham1gbXZrZ2preXd6d1tnfXx4ZXJ9boR0ZXWFjIaVf2+LZmt6g3RsdGJcb3tqdHuLe4FldIZ9bXFndX54fX9yfGx6eoF6eHBmbGJuin5tblZrYHdVSmprT1JPaE5ZfGhiTlV2akxQVFVfZ3aDZl1gcWhnYVdpXVtraEpFa1piZFdZVXlaTldualldbGVcWmRiXnRmbWRxZ3JvdIB3cJmFdn9+d398hYd9dXOCiH+Ugm5zeHp5cnKFh4iIhHmBfXaPf3yEiY6EgoR7fouDe3d8d3eanZd6ioOGaXd9fGyDhJOAco+CcYaCfoF/b2ZsZ1ddW1xbVGRwZV9YY3N1aXZwZWViV1xcaIBwb3KAdIllZXh+aXR2c3ODhHiBhHl3dHVua3twYWdrZ4Z0jYRuZl1ffXB7iX5pbXdmaWRVV3JwjaZ8hHx2lpBzfHN7eW17e5GEdph8h4aDhoN9dXBybGd1XW1oX2x1ZGdmaXpve3JZZ4F3dWdwgHeCdWJ3hYp8lIBui2pteoBwZXJlYG15ZnJ3int+YnWCdmlrcXR6cHl4cn1mfn9/eXduY2ViboZ8bWtWamJwU0tpa09MT3BHXntmYU1VdGNKTlNXYWp2fmVcZ3NpZWBWY1dicF1MS2tYY2FVVFVzV0xZdWRaX2thXFtjZF93Zm1icGlzbnF+dHSZgXd/gHd/foaFen11goR+l4VucnR7enRwhIWPgYB6i3V0kYB9gZSOgIWEfX6Mhnt+gHZ7o6WKeYiFhGx1fHt1g4KMem6Fc3qEfYGDdW5qaGVWXVtaWlNibmVbWGJze2pobWlfYldfWmmAamtvgGhsYWh5eGt0dHRuhYF7f312dW16aGp5al9lbmiBdo+EZ2VYYndpfod7b2lvZ2ZdVVhvaI+ndoF6fJCOeXVvfm9ydXiOf3eUdIWCf4WIdmpydmdob1xtZV5tc19nYWl4aHttW22CcnNpb4B+eXdhd4SEeI+Ec4hxb3l/cWJwaFxvd2Rxc4h8eGJzgHBnanhzcmt3dnR3Y4N7f3d2b2RjY258fWtsVWliZlNLbWhPR1JsRWF4ZmFNU3JdSU1UWWVrd3plXm1waWRcVl9Vbm5XS1RoWGZeWE1VbFRKXHlfW19rXV1aYmVgemhsYW9vdW5vd3V6mH13gIF6gH+Hhnp5eoN+gZOEcXR0fnp2dIWIkH2AfZBsc5WBfIOfhX+HfYB+hoKAint2hKyff3qIh4RscoJ6doCAgXVuh298f3OJgGpvbWRkWF9aWVpVYmpnW1pedYFpXm1sXGFWXFxrgWZydH1qal1rdnZndHdxbYV7fX15dnJsemhpeGZdZHNoeneSgWNjVGVwZ4KFd3dmaGpgV1ZZaGSQp25+eICLjnpwcHxmeG55i3t2jnGEfX5/hm5kdnNkaGhda2Jdb29bZ19sdWV6aF10gG9ya3F7fXV1YnSFinqHhoB/d3J1fnRhcGxZcXRicXKFfHRkcn9sYWx6b2poeXd0cWaFdXp6dXBkYWRuc35pbFRpXl1US3NjUUdXYkdidmZhS1RvV0pMWFhnbHZ6ZGVucGZjWlddWHZlVEpcY1hoWFlJV2VRSGJ4Wl1fbFteXGFkXn9pamBvdHhtb252g5h5coGAfX+Ii4Z9dXaGeIeMfXN1dYJ4enqCjI59foSJanSXgXuLnX1+hXqBen58hohzcY+ujHt7hpB+ZnKIenR8fHZyb4Zse35sj3picG9hZV1lVllZVmNma2BdXHOFaVlwblpeV1pcbHtjcHd2bGJbbXN0Z3V1cG2EeH6AeXdubnRlaXRlW2d1ZnZ2kXpfXVJlZmqCgnR9YmNpXFRYXmJjkKVoeXSChZB4bW55Z3dte4R6dYhygHh8eH9oZXZtYGZhX2pgXXRrWWVdb29iemVbd3trbm5wd3hzdGRyg5J+h4KIenZvcn1yYXdkW29wYnBxgnxzZnGAZF5udmljZnl6dG1ugXV0fXNxYl5mbm99ZGpTaFhZVE13X1FKWllIYnRjYUlUbVNJTFpXaWxye2JsbHNiYVlaW2F2W1NLZF1YaVNXSFlgTkdpdVheYW1bW19iYl2FaGhhbnh5bG5qdoGQeW6DfoCBkoiEgXZ0iXSMhnNxd3aBd3x9foyPgH6TfnB4loN9mZJ5gIB4eX1/dIiDc3CZont6f4mVeWR1iHlzeHVsdG9+bHl8cJFyXnBuYGdibFRbWldoY21mXFxxiGVTcm5bWlhYYG13ZGl1ampeWm1zcW10c3RqhXx+f3x3bm5sZGlxY1tqcmR0do9zW1dTZGFygH9ygl1iY11TWmBbY5OfZXJxhYSRdGxqeWxvb3p7enGAdn5yenp6ZGZ2Z15iWmFnXF53aFdiXm9oYXdhW3t2amlybndzc3RocIGUgoZ+hHZzanB8bGZ2V1xrbWJwc4F6c2Zvfltgb3FiX2lwfGxrc35ycXhrcGBbZWxtemFnU2dVV1JQdltSUFpSSGNzYmBHVWpQSE9aVmtsa3xlbW9xYFtaWFlscFdSUGZXV2lTVEZaXE9IcnVYX2NtY1hhYGFdi2pjZG15eGtuaXV5hntrg31/hJl8goR5fYhuj4Zxb3d6fHSCgnyLj4OClnR4gpSFgZ+JdYCAgXN/gXCHgnVvopd0e4aLh3tmeItvbntvZnhwemxzdnKMa150bmFnZWtSXVtWZ2JsbFpccYxkT29uXVZYVWdqdWhidGVlXVpudW5xdXV6a4d8f3yId5BzZGRrbmFcbm1jc3iHa1pUVmJjeH19cYVdY19jVFtgWWOWlWNucIOFinNqaHpuZXJ2c3tsenR1b3p+dV9mcmNbXldiZFlhdWVVX2BtZGFxXV1+cGhpc3FzcHV1a22Ek4GIe4VxcmZufG9xblNbZmpmcXSBdnNibHZVYnFqW19uZXxlbHV8cnJzam1gWWRqandeZlRkVVZQVG1XUVdUUEhlcl9hRldpTkhYVFZuaWR8aWt3a2FXXFVbdGRTUldoUVlmVFNIWlpQTXh3W19lbGlaYmBeXo9uYmZreXVub2h2dn9/bYOAfoaXe3+IgYp/a5OIcmd0gHt1gIN9iY9/i5NyfYqRhYefhnt/hoxzgIZzfYN2bqWMc4GNi3d4bnqMYGR8cGZ6c3lsbXF2gmdke2xjZmdoU15eVGdgbG9bXm6NaE5pbWBUVlNvZ3RsZXhkZV1ZcHRtcnp4c22Ie4B2nHt6a2FlbG1eYG9qZXB5fmdaVlhga3h8e3CEX2JeZ1ZZYFdknIhia3GBh313a2p3bFt2cWt5aXVybW97gHJYam5fWV1WYmNYZXFjU15haWJibFpgfmxma3N1bm13dmtohYx/iHqHbXFmcHxscWxjWWBoaW90gXNyXmlsUmVxZFRibmF5YnB2e3VrcG1rX1hhZ2h0XGVWYVZTTlhlUk9cT09IZW9dY0dZaU1JX0tYbWRgeGhufWRgVV5UXXRbVFJgZk5dYVRTSlxZUFl1dl1fZm1oWGNhW16OcGNnandxc21odnR6g3OCg3qIjX58ioeOem6QinRsc4J0f3+IhYeShJWPen2Mj4iRm4SAfIyEc3+Bc3R4cW6Tk5OTk5OTk5OTkpKSkpKSkpKSkpKSk5OTkpKSkpKSkpKSkpKSkZGRkJCPj4+Pj4+Ojo6Pj46OjY2Njo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo2NjYyMjI2NjY2Njo6Ojo6OjY6OjY2Ojo6Oj4+Pjo2NjY2Oj4+Pj4+PjoKAfnp6fX5+fX1/fn59fn5+fn5+fn+Af4CAgIGAgIB/gIGBgYOHjI6Ojo6NjY2NjY2NjY2NjZKSkpOTkpKSkpKSkpKSkpGRkZGSkpKSkpKSkpKSkpKSkpKSkpGRkZCQkI+Pjo6Ojo6NjY6Ojo2NjY2Njo6Njo6OjY2NjY2Njo6Ojo6Ojo6NjYyMjY2MjIyNjY2Njo6Ojo6NjY2NjY2Njo6Ojo6OjY2NjY2Ojo6Ojo+Ogn99ent8fn59fX5+fn5+fn5+fn5+f4B/gICAgICAgH+BgYCBg4aMjY6NjY2NjY2NjIyMjIyMkpKSkpKSkpKSkpKSkpKSkZKSkpKSk5KSkpKRkZGRkZKSkpGRkZGQkJCQj4+Ojo6OjY2NjY2Njo6Ojo6Ojo6Ojo6OjY2NjY2NjY6Pj4+Pjo6NjIyMjIyMjIyNjY2NjY2NjY2NjY2NjY2Njo6Ojo2NjY2NjY2NjY6Ojo6Cf3x6fHx9fn19fn19fX59fn5+fn5+gH9/gICBgYGAf4CAgICDhouOjo2NjY2NjIyMjIyMjIySkpOTk5KTk5KSkpKSkZGSkpKSkpKSkpGRkZGRkZGRkJCQkJGRkZCQkJCPj46Pjo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6MjI2NjY2NjY+Pjo6OjY6MjIyMjIyMjIyMjY2NjY2NjY2NjY2NjY2Njo6NjY2MjIyNjY2Njo6OjoN/fHp8fH1+fH1+fXx9fn59fn5+fn5/f3+BgYGAgICAgYCAgIOGi42NjY2NjIyMjIyMjIyMjJFtZmdnZ2dnfYWEhISEiF0tMDAwMC1GoaGhoaGhoJqZmpqampqKg4SEhIOEd2VnZmZmaFxDREREREVCMS8vLy8vLICkoKCgoKVeKi8vLzAsSIWDg4ODg4OLjIyMjIyMjY2NjYyMjY2NjY2NjY2NjIyMjIyNjY2NjY2OhX19e3t6fX58fH59fX1+fX1+fn5+fn9/f4GBgYCAgICBgICAgoWKjI2MjIyMjIyMjIyMjIyMkWdfYGBgX155g4KCgoKGUxgdHR0dGTekpKSkpKSjnJycnJycnImBgoKBgYJyXV9fX19hUjQ1NTU1NTMfHR0dHRwYfqmkpKSkqlYVHBwcHBc6g4GBgYGAgYqLi4yMjIyMjIyMjIyMjIyMjY2NjY2MjIyMjIyMjY2NjY2GfH16e3p8fXt8fn19fX59fX5+fn5/f3+AgYCBgYGAgIGBgYGChYqNjYyMjIyMjIyMjIuLi4uRjo2NjY2NjY+QkJCQkJCMh4eIh4eGiZOTkpKSkpKRkZGRkZGRj46Ojo2NjYuJiYmJiYmIhYaFhYWGhYODg4SEhIOMkI+Pj4+PiIKDg4KCgoWKioqKioqKi4uLi4uLi4uLjIyLi4yMjIyMjI2NjIyMjIyMjIyMjY2Njoh8f3l7ent8e319fX18fX19fX5+fn9/f4CBgYGBgYGAgYCAgYKFioyMjIyMjIyMjIuLi4uLi5GSkpKSko2QkpGJh46KkJKTkIqPi4qQiY+RkZGRkJCQkJCPj4+Pj4+Ojo6Njo6Ojo2Njo2Njo6Ojo6Ojo6Oj4+Pj42MjIyMjIyNjo6NjY2NjIuLi4uLiouLi4uLi4uLi4uLi4uLjIyMjIyMjIyMjIyMjIyMjIyNjY2NiX59eHh5fH18fX19fHx9fX59fn5+f3+AgICBgYGBgYCBgIGCgoSKjIyMjIyMjIyLi4uLi4qLkJCRkZGPhI6QkIaKj4WNkJCMiIaFiYmFiJCQkJCQkJCQkI+Pj4+Ojo6NjY2NjYyMjIyMjIyMjIyMjIyMjIyMjI2NjIyMjIyMjIyMi4uLi4uLi4uLi4qKiouLi4uLi4uLi4uLi4uLi4yMjIyMjIyMjIyMjIyMjIyMjI2Lfnx3dnh7fXx7fX18fH19fn5+fn5/f4CAgIGBgYGBgIGAgIGChIqMjIyMjIuLi4uLioqKioqQkJCQkIqFjoiOhoaPiY2QkJGNhoaHhYWHj4+Pj4+Qj5CPj4+Ojo6OjY2MjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMi4uLi4uLi4uLi4uLi4qKioqKi4qKi4qKi4uKioqKi4uLi4uLjIyMjIyMjIyMjIyMjIyMjIt+e3d2eHt8fHx9fX19fX1+fn5/fn9/f3+AgIGAgYGAgYCBgYGEiYyMi4uLi4uLioqKioqKipCQkJCPhYOMjpCOiYyKjpCQj4eMjYmEhoiPj4+Pj4+Pj4+Pjo6OjY2NjYyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIuLi4uLi4uLi4qKioqKioqKioqKioqKioqLi4uKioqKiouLi4uLi4yMjIyMjIyMjIyMjIyMin18dnZ4fHx7fH19fH19fn5+fn5+fn9/f4CAgYCBgYGBgIGAgYSJi4yLi4uLi4qKiomJiYmJkJCQkJCMhoyJjoeFjYmOi4yMhIqGhoiDio+Pjo+Pj4+Pjo6OjY2NjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyLi4uLi4qKioqKioqKioqKioqKioqKioqKi4uLioqKioqKioqLi4uLi4uLjIyMjIyMi4uMjIyKf353eHp7enp8fHx8fX1+fn5+fn9+fn9/gICAgICBgICAgYCBhIqMi4uLioqKioqJiYmJiYmPj4+Pj5CMjouPjIqPjI6MjY2IiomKjomOj46Ojo6Ojo6Ojo6NjYyMjIyLi4uLi4uLjIyMjIyMjIyMjIyMjIyMjIyMjIyLi4uLioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi4uLi4uLi4uLi4uLjIiAfXh5enp6e318e3t9fn5+fn5/f35+f39/gICBgICAgIGBgIGEiouLioqKioqJiYmJiYmIiI+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Oj46Ojo6Ojo6Ojo2NjYyMjIyLi4uLi4uLi4uLjIyMjIyMjIyMjIyMjIyMjIyMjIuLi4uKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLi4uLioqKi4uLh4B8eHp6eXt8fHt8fH1+fn5+fn9/fn9/f39/gIB/gYGAgIB/gYSJi4qKioqJiYmJiYmJiIiIj4+Pj4+Pj4+Pj46Pj4+Oj4+Ojo6Ojo6Ojo6OjY2NjY2NjY2MjIyMjIuLi4uLi4uLi4uLi4uLi4uLjIyMjIyMjIyMjIyMi4uLi4qKioqKioqKioqKioqKioqKioqKioqKioqKiYmKioqKioqKioqKioqKioqKioqKi4uHgHt5eXh6fHx6e3t9fX5+fn5+f39+f39/f39/f3+BgYCAgH+BhIiLiomJiYmJiYmJiIiIiIiOjo6Ojo6Pj46MjI+Sj5COjo6Ojo6NjY2NjY2NjY2NjIyMjIyMjIuLi4uLioqKioqLi4uLi4uLi4uLi4uMjIyMjIyMjIyLi4uLi4qKioqKioqKioqKiomKiomJiYqKioqKioqJiYmJioqKioqKioqKioqKioqKioqKi4aBe3h5eHp8ent7fH19fn5+fn5/f35/f39+fn9/f4CAgYCAgIGEiIqJiYmJiYmJiIiIiIeHh46Ojo6Ojo6Ojo+MkJOQkI+Ojo6NjY2NjY2NjYyMjIyMjIyMjIuLi4uLi4qKioqKioqKi4uLi4uLi4uLi4uLi4uMjIyLi4uLi4uLioqKioqKioqKiYmJiYmJiYmJiYmKioqKiomJiYmJiYmJiYqKioqKiomJioqKioqKhYB6eHl5fHt6ent8fH1+fn1+fn9/fX9/f35/f39/gICBgICAgYSIiomJiYiIiIiIiIeHh4eHjY2Ojo6Ojo6Pj4+PjoyNkI2NjY2NjY2MjIyMjIyMjIyMi4uLi4uLioqKioqKioqKioqLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4qKioqKioqJiYmJiYmJiYmJiYmJiYmKioqJiYmJiYmJiYmJiYmKioqJiYmJiYmJioqFf3l6eXh7e3p7fHx7fn5+fX5+f39+f35/fn+Af3+AgICBgYCChIeKiYmIiIiIh4eHh4eHh4eNjY2Njo6Oi42Nj5WPiYyPjYyNjYyMjIyMjIyMjIuLi4uLi4uLi4qKioqKioqKioqKiouLi4uLi4uLi4uLi4uLi4uLi4uLi4uKioqJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYR+eXt5ent7eXt9fHt+fn59fn1+f35/fn9+f3+AgICAf4CAgICEh4mIiIiHh4eHh4eHh4aGhoyNjY2NjY+MjImKj42IjJGPjY2NjIyMjIyMjIyLi4uLi4uKioqKioqKioqKioqKioqKiouLi4uLi4uLi4uLi4uLi4uLi4uKioqJiomJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJg355e3p8e3p7fX17fH9+fn5+fX5/fn9+f3+Af4CAgH+AgH9/f4OGiIiHh4eHh4aGhoaGhoaGjIyMjIyLiYyKiIeJhoyOjJCMjZGOjIyMi4uLi4uLi4uLi4qKioqKioqKioqKioqKioqKioqKiouLi4uLi4uLi4uLioqKioqKiomJiYmJiYmJiImJiYmJiYmJiYmJiYmJiYmJiYmIiImJiYmJiYmJiYmJiYiIiIiIiYmCf3h7e3t6enx9fHx9f39+fn19fn9/f39/f4F/gIB/gICAgICAg4aIh4eHhoaGhoaGhoaGhoWMjIyMi4yOjoyKioeEiIuKjIuNjo+Li4uLi4uLi4uLi4uLioqKiomJiYmKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiomJiYmJiYiIiIiIiIiIiImJiYmJiYmJiYmJiIiIiIiIiYmIiIiIiIiIiIiIiIiIiIJ/eHp7enp6e3x8fX1+f35+fX1+f39/fn+AgICAf3+Af4CAgYCDhYiHh4aGhoaGhoaFhYWFhYyMjI2NjJCSjI2Ii4mJi4uLi4mLjIqMi4uLi4uLioqLi4qKiomJiYmJiYmJiYqKioqKioqKioqKioqKioqKioqKioqKiYqJioqJiYmJiYmIiIiIiIiIiIiIiImJiYmJiYmJiYmIiIiIiIiIiIiIiIiIiIiIiIiIiIiHgXx4e3x5enp8fHx9fX9/fn59fX9/f39+fn+Af4B/f3+Af4CAgIKEh4eGhoaGhYWFhYWFhYWFjIyNkY+PjZGJjIaJjIuIiImMiYeNjo+NioqKioqKioqKiomJiYmJiYmJiYmJioqKioqKioqKioqKioqJioqKioqKiYmJiYmJiYmJiYmJiYiIiIiIiIiIiIiIiImJiYmJiYmJiIiIiIiIiIiIiIiIiIiHh4eHh4eHh4WAenl9e3t7enx8fHx9f39+fn19f39/f35+f4B/gH9/f4B/gH+AgoSHhoaGhYWFhYWFhYWFhISLi46PjoyLj4iHiYmMjYWFjo2KiYyNi46KioqKiomJiYmJiYmJiYmJiYmJiYmJiYmKioqKioqKiomJiYmJiYmJiYmJiYmJiYmJiYmJiYmIiIiIiIiIiIiHiIiIiIiIiIiIiIiIiIiIiIiHh4eHh4eHh4eHhoaHh4eHhH55eX16enp7fXt8fX5+f35+fX5/f39/fX5/f3+Af39/f39/f4CChIaFhoWFhYWFhYWFhISEhIuLjI6MjI2Lh4mIiomGgoiNjoiKi5GTj4uJiYmJiYmJiYmJiYmIiYmJiYmJiYmJiYmKioqKiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiIiIiIiIiIeHh4eHh4eIiIiIiIiIiIiIh4eHh4eHhoaGh4aGhoaGhoaGh4eDfXp5e3p5enx8e31+fn5/fn59fn9/fn9+fn+AgICAf35/f39/gIKEhoWFhYWFhYSEhISEhISEioqOjYmIiIqKh4iHiomIioiIh4qGi5GPiomJiYmJiYiIiIiIiIiIiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmIiIiIiIiIiIiHh4iIh4eHh4eHh4eHh4eHh4eHh4eHh4eHhoaGhoaGhoaGhoaGhoaGh4J8eXl6eXp7e3t7fX5+fn5+fn59gH9/f39/f4CAgH9/fn9/gICAgoSGhYWFhISEhISEhISEhISKi5CPiYmJi4qHh4WHiYuKiYSLjYmOjYqJiYmJiIiIiIiIiIiIiIiIiYmJiYmJiYmJiYmJiYmJiYmJiIiIiImJiYmJiYiIiIiIiIiIiIiIiIeHh4eHh4eHh4eHh4eHh4eHh4eHh4eGhoaGhoaGhoaGhoaGhoaGhoaGgXt4enp4e3x7e3x+fn9+fn5+fX1/f39/f3+Af4B/f39/f3+Af4CChIaFhYSEhISEhISEhISEhI+Qj4+IiYuIhoeIiYuLjIuJioqNio6Oj4iJiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIh4eHh4eHh4eHh4eHh4eHh4aGhoaGhoaGhoaGhoaGhoaGhYWFhYWFhoaAe3h5eXh4enp8fX1+f35+fn59fn9/f39/gIB/gICAf39/gIB/gYKDhoiGiIaDhISEhIODg4ODkpKOioeKi4qLh4uNiYqJi4iHiouIio+SioiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIh4eHh4eHh4eHh4eHh4eGhoaGhoaGhoaGhoaGhoaGhoaGhoaFhYWFhYWGhn96eXh4eHl5eXx9fn5/fn5/fn1+f35/f3+Af39/f4CAgH+AgH+BgoOHjo+PjoiHhIWFhoaFhYWSkI6KiYmIiImKioiIh4aKjIiHiYmOkJGNh4iIiIiIiIiIiIiIiIiIiIiIh4iIiIiIiIiIiIiIiIiIiIiIiIiIh4eHh4eHh4eHh4eHh4eHh4eHh4aGh4eHh4aGhoaGhoaGhoaGhoaGhoaGhoaGhoWFhYWFhYWFhYWGf3l4d3d3eXp5e3x9fn9+f35+fn5+f35+fn+Af4CAgICAf3+Af4GBg4eOjo6Ojo6Mjo2OjY2MjZCQjomHhoiJiYeIiouIiYyJiYaKjY6PkYuIiIiIiIeHh4eIiIiIiIiHh4eHh4iIiIiIiIiIiIiIiIiIiIeHh4eHh4eHh4eHh4eHh4eHh4eHh4aGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaFhYWFhYWFhYWFhYZ+eXd5d3d6eXl8e31/fn5/fn5+fn5+fn9+f4B/fn+Af39/f39+gIGEiI6Ojo6Ojo6Ojo6Ojo2NkJGOi42JjIiIiYaHiYaIioiHi4yLjpCQiIeIiYmJiIeHh4iIiYmIh4eHh4iIiYiIiIiIh4iIiIiHh4eHh4eHh4eHh4eHh4eHh4aGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoWFhoaFhYaGhoWGhYSEhIWFhoaFhIWFhX55d3l2eHl4e3x7fn5+fn5+fn5+fn5+f39+f39+f39/f35/f3+AgYOGjY2Ojo6OjY6NjY6OjY2Qj42Ni46KhoiKhISLiYeDhYSDi4mLj42JjI6QkI+NjYyLjY6Pj42NjI2Nj4+Pjo6MjYyMjY2KiYiHiImHh4aHh4eHh4aGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoeHiYqKiIeJi4yNjo2LiImLi42OjYyJiImMgHl3d3Z6eXh7e3t9fn5+fn5+fn5+fn5/f39+fn5/f4B/f4B/f4CBg4aMjY2NjY2NjY2Qj4+Pj46NjI6KiYuMjIeFiY2Lh4aIh4aHh4uNjo6Pj4+Pjo+Pj4+Pj4+Pj4+Pj4+Ojo+Pj4+Pj4+Pj4+Oj46Oj46Mi4uJh4eHh4aIhoaGhoaGhoaGhoeLiYeHiIiLjY2Mi4yLjY2Ojo+Ojo6Pj46Ojo6Ojo6Ojo6Njo6NjY2AeHZ4eHp4enx6fH5+fn5+fn5+fn5+f39/fn59fn9/f39/gH9/gIGDhoyMjIyMjY+QkpOTk5KSjYyMjIqHioyKh4eJiYWCiouIiYWJjpCNjo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6NjI2NjI2LiYaHh4eHiYqLjY6NjYyNjY6OjY2OjY2NjY2NjY2NjY2NjY2OjIyNj4+OjY2MjIyLi313dXd5enp7e3p+fn5+fn5+f35+fn5/f39+fn1+f39/gICAf3+AgYOFj5KRkJGSk5OTk5OTkpKLi4uLiomMiouLiYuKhoeOjYiIjI6OjIuMjIyNj46Njo6Ojo2NjY2MjY2NjIyMjIyMjIyMjY2NjYyMjI2NjYyMjI2NjIyNjIyMi4yMi4yMjI2MjIyMjIyMjIyMjIyLi4uLi4yNjY6Sk5OSkpSRkJOVlZSTk5COjo6Oe3Z2d3h6ent7e31+fn5+fn5/fn5+fn5/f35+fn9/f39/gIB/f4CBgoSNkpKTkpOSkpOTkZKSkoqJioyJi4qJjIuKioiHiYqKi4mKjY2Mj46Nj5KUlJOUlJOTkpGSkI+Ojo2NjY2Pko+OkZGOjIuKioqLi4qKi5CPjoyMjIqKioqKioqKiouKioqKi4yLi4uMjIyKiouLi46RkpOTk5SUk5STk5SUlJOTk5KSkpKSk5F6dXZ2eHt7e3p6fX5+fn5+fn5+fn5+fX5/fn5+f39/f3+Af39/gIGChIuRkZGRkZKSkpGRkpGRiYmIiIqMiYiJiYuJhoSJhoyKh4ySkpKTk5OUlZWWlZWUk5OUlJSUk5SUlJSVlZWVlZWUlJOTkY+QkZKQjoyRlZWVk5KSjo+QjYqKi4qKi42OjY6RkpCRkpKSkpGRkpKSk5OTk5OTk5OTk5OTkpOSkpKSkpKSkpKSj3h1d3l6e3t7ent9fX19fn5/f35+fX5+fn5+f39/fn9/f4B/f3+AgYKEi5GQkJCSkpKRkZGRkZGIiIiIi4uJg4eLi4yMiIeHjYyNkpSSkpOTlJWWlpaVlZSSkpOTlJSUlJWVlZaXlpaWlpWUk5SUlJSVlJSUk5OVlZWUk5KTk5OTkJGSkZGSk5OTk5KSkpOSkpKSkpKSkpKSkpKSk5OTk5SUk5OSkpOTkpKSkpGRkZGPdnJ3enp7e3t8fX59fX1+fn9+fn9+fn5+fn6Af39/f3+Af3+Af4CBgoSKkJCRkZGRkZCQkJCQkIeHh4eIiIiFi4+KjI6Njo+OkJWUk5OTk5SUlZWVlJSVk5KSkpKTlZSUlZaWlpaWlpaWlpSTk5OTk5OUlJOSk5SVlZSTkpKSkpOTk5OTk5OTk5KSkpKSkpKSkpGSkpGRkZGRkZKTlJSUlJSTkpGRkZGRkZGRkZGRkYx0c3d6ent7e3x9fX1+fX5+f35+fn5+fn5+fn9/f39/fn9/f39/f4GDhIqQkJGRkJCQj4+Pj4+Ph4iKi4yNjYuOj42Mjo6RkpGSk5OSkpKSk5SUlJKSk5OTk5OSkpOUk5OTk5WVlZWUlZWUk5OTk5KSk5OUk5KTlJSUk5KSkpKSk5OTkpKSkpKRkZKSkpKSkpKSkpKSkZKRkZGSkpOTlJSUk5OSkZGRkZGQkJCQkZCRinN0dnp8fHp7fXx9fn59f35/f35+fn9+f31+f39+fn59f39/gH+AgYKDipCQkZGQj5CPjo+Pjo+Oj4+Pj4+Pj4+PkI2OjpCRkpKSkpKRkpKTk5OTkpGSkpKRkZKSk5OSk5OSk5STk5OTlJOSk5OTk5OTk5OSk5OTkpKSkpKSkpKSkpGRkZGSkZCRkZGRkpKRkZGRkpGRkZGRkpKSkpKSkpKSkpKRkJCQkJCQkJCQkJGGc3V2e3x8e3x9fX1+fn1/f35/fn5/gH9+fX5/fn5/fn5/f3+Af3+BgYGKkI+PkI+Pj4+Pj4+Pj4+Oj46Oj4+Pj5CQiI2PkJGRkpKSkpOTk5OTkpKSkpKSkZGRkZKSk5KTkpGRkpKSkZKSkpKSkpKTk5KRkZKTkpGRkpKSkpKRkJCQkJGRkZGQkJGSkZGRkZGSkZGRkZGRkZGSkpKSkpKSkZCRkZCPj4+Pj4+Pj4+PkX9ydHh8fHx7fHx9fX5+fn9+fn5/f3+AgH99fn5+f35+f39/f4CAf4GBgYqPj4+Pjo6Ojo+Pj46Ojo6Ojo+PkI+Pj4+GjpCQkJCRkZGRkZGRkZGQkJCQkZGRkZGRkZGRkZGQkJCRkZCQkJGRkZGRkZGRkJCQkZGQkJGRkZGRkI+PkJCQkJGRkJCQkJCRkJCQkJCQkZCQkJCQkJCQkZCQkJCPj4+Pjo+Pj46Ojo+Pj4+PeHJ2eXx9fHp9fH19fn5+f35+f39/f4CAf39/fn5/f35/f39/gIB/gYGAio6Ojo6NjY2Ojo6Ojo6NjY2Oj4+Pj4+PjoiQkZCPj4+QkJCQkJCQkI+PkJCQj4+Pj5CQkJCQkJCPj4+PkI+PkJCQkJCQj4+Oj4+QkI+PkJCQkJCPjo+QkJCPj4+Pj4+PkJCQkI+PkI+Qj4+PkI+PkJCQkI+OkI+Pj46OjoyMjY2NjIqDiYhzc3Z4fX58eX18fX1+fn5/fX5/fn9/f39/f4B/f39/f4CAgH+AgH+BgYCJjY2Ojo6Ojo6OjY2OjoyNjY6Ojo6Ojo2NiJCRkI6Njo6Ojo6Ojo6Pjo6Ojo6Ojo6Pjo6Ojo6Ojo6OjY6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Pj46Oj4+Pj4+Pj4+Pjo+PjY2MjYyNjoyLi4mJiYiFhYSDgoKEgnR5fXp4dXJrZWltb2xmZmdncHNzd3l9fnl6e3x9fX1+fn59fn9/fn9/f39/gIB/f3+AgIGAgIB/f4CBgImNjY2NjY2MjYyMjIyMi4uLjYyMjIyMjIyGj5GRjIyMjIyMjIyMjIyMjIyMjIyNjY2MjI2MjYyMjY2MjIyNjY2NjYyMjI2MiomKi4uJh4KAh4iEgXt6gH57fXx8fXlzcnJycnV1cG1ramppZ2NkYV9bXF1eWFVXWFlTS0VJSkpLTE1PT0tgdHR3eX19eHp5e3x8fX5+fn1+f39+f35/f4CAgH+AgICBgYCAgICAgIGAf4OEhYSFiIuLjYyMjIuLi4yGiYqKioqKh4OOkJGNiouLi4uMiYmKioqKiouLi4eDioqHh4mGhYWEhIeJiYWCg397fHl6e3pzcHFxcW1samdsbWdlZmVmZGNlZGVkZWVlZWRkZGNhYV5dXFpYWFdUUFFSU1JTTU1KSUZESEpHR0hHR0xOSWdzdXh6fXp4d3l8fHx8fn5+fn9/fn9/f39+f4CAgIB/gICBgICAgICBgYFnXmBjYWNucX17ent/fXd8fHZ4ent4eHpvcHt4eXt8e3h3e394dXd0dHZ0dXZ3dXJwcWtscnBnaGtsbm9tamlpaGhlZWRkZF9gYWJgYF5dWVhaWltdXV9gX2BfX19gYmFeXl5eWVldXF1bV1dWUlRSU1NOUUpISUZERUhMTEhGR0lLSklNbXJ0eHp7end3eXt6e3x+fn1+f39+f35/f35+gIGAf3+AgIGAgICAgICCgWdYW1pZXFtcY1xaXF5ga3FtcHBvbm5vbmtpbmxrbG9qaWtraWpraWZmZ2dnaGhnbWVqZmhlaGdjYmJhYmBgXVhbW1dYV1RWUVBUU1NNSkxLTExOTk9UWFhXVVVUUlBQTU1QT05LTE1QUU9MTEpHSUlHSEhJSEhIR0ZHSEpKSEhISUlISVZwc3V5ent5dnZ5enp7fH59fX5/f35/fn5+f3+AgX9+f4B/gICAgICAgIGBbFtYVlZWWVlaWVlYVVZoamxubmxra2poaGloZGVkYlxiZl9fYWNfXF9dYF1eWl5cXV5iaWBdXlpZX1tYV1NOTUtLS0tMSUtNTktKS0tMSktQTEtLRkdHSUlGR0lISUZFSEdGRkVERUVEREVJSUlHSEdIRkZLTUtJSUlIR0hLTU1LTExMVXFzdnl6e3l2d3h3ent8fn1+fn9/f39+f3+AgIGAfn5/f4CAf4CAgIB/gYJoUlRVVlNVV1lZWVdXV1tbYWNfXlxbWFZWWVZSVFJRUVVUU1NUUE1KTU5QUk9NUFBcV15sV1VSUVFUUFBOTk9MSk1MS0xKSktLRklJSkxJR0pISUlFR0dGRkVFSElKR0ZHRkZHR0hKR0dISEpMSkpLSUlISktLSkhKS0pISUtMTU9QUEtUdHN1eHp6eHZ2d3d6enx+fX5+fn5/f35+fn+AgYB/f3+AgYB/gICAgH+AgmlQUlRXVVRWWVdYWFpbVFRTUlBRU1FRUU9OTlBQUU9MTlBPTk5NTEtNTk5QTU9QUGBXXXJVT09PTk9QUFFPTk5PTk5QTk1NS0lISEpJSUlJR0ZHR0dJSkhJSEhJSEhHSEdISElISUxLSklISkpJSkpIR0pMS0pJSUhKSktMTk1NTU9RTFVzcnN3enl3dnR2eHp7fX19fn5+fn9+fn5+gICBgICAf4GBgH+AgICAgICBbE9PTlRZVVVdW1lXV1hOTUpKSUZKT0xKSkdJSk1NS0pMTUpHSUlJSktMRkRGSktMY1RbdFZLUE1MTE5PT09NTk9MTk5OUFBPTE1MTk1MTEpJSEdJSElISElJS0xLS0pJS0pJSklJSUlJR0dKSUdJSUpKTk1OTEhJSklJSk1PT01MT1JOWXBwcnd4d3d0c3R3enx+fX5+fn5+fn5+fn9/gICAgICAgYCAf39/gICAgIFvS0pNTlFOTlVXVlZSU0lFQ0VFUkREQT5CP0RAQD5CREFAQURHRkVIRUJBQEBDQ0dmVFV1U0pQTElJSkhISklKSUlLSkxQTk1MTU1MTU1NTElIREZGR0ZGRklKSUlLSkhMSklKSkpJSEhKS0tIRkdJSklLTU5OSktPTUxLTU1PUE5QT1BgcG9yd3h2dHJzdXd6fX19fn5+fn9+fn1/gICAgICAf4CAgIB/f3+Af4CAgXNQUE5OUE1KS1BSUE5RQ0RCQUZRRT1DPT9FSDk6Oz0/PTxBRkA+Ojs+PjxFRD0/SmNbVXBLREZIR0ZHQkREREZFR0dHR0pHSEpLR0NER0pHQ0RFQUFDR0hHSEdISktKSElMS0lISktLTU5MTUxMSkpMS0lLTU9PUFNRT1BQTk9QUlFNUGdwb3N2dXRycXR4eX19fX1+fn5+f4B+foCAgH9/gIB/f4CAgH+Af4B/gICCdlRVUVFQT0xNUFBOT09BQkFAQkE/Oz48Pj8/Ozg5ODs7OkA7Oz48Ozs8PEhMPT5VZGJeZ09BRUVGREZGREZJSEM/QEBAQUFCQUE/Pjw9PkFAQD8+P0BFR0dHSUtMTk1OTUxNTUpLTVBVU05MTlFOTk1OTE1NTk9OTk1LS05OTk1OTkxUbnBwcnR1c3Fydnh5fX19fn1+fn5/gH5+gICAgICAgH9/gICAgH9/gH+BgYJ4UVFSVFJTUVNTUVFST0BAPT4/PD8+QEE/PT45Ozo7Ozk5Ojg4Ozw5Nzk7Oz48SGJtaGZsYEZDP0xDQ0ZEQ0NDPzs+PkBDQ0E/Pj9BPkBAQj9APD9CQEFDRUVFSktQT1BPTU1OTExMT1JRUFJOTExPTUtOT0xMTEtMS0tKS0tKTU1LS1xxcXF1c3VycXR4eHp9fn1+fn5+f39/fn5/gIGAgH+Af4CAgICAf4CAf4CAgXxSTU9RUFFSUlRSU1NOPDs8Ozs7P0BBQkA9PDk8PTw6Nzk6Ojk3OTo6Nz09ODlVbHJranBrTjVKWD5AQUA9Ozs+PD09QEJDQT9BQkE9Pj09Oz0/Q0RCQD9BREJFR0pKSkpKTE1MTExNTExOVVNLTE1USVBKSU1KSUpLS0pJSEdKS0lKZnJxc3VzdXJydnl5e31+fn5+fX9+f39/f36AgICAf4CAgICAgIF/gIF/gYCBgFZMTlBQTlJRUFBRUU44PT88PDo9PkFAQT8+PkA/Pj48PT0/QD09PT9DQE9CPFhucW5sc3FbQ2NVPT9AQUA+P0E/QEBBQEBAPT8/PTw6Oz09PD9AQUJCQUBCREZGRkdGR0dISUtMTExLTEtKS0lKSk1MTEpMS0lISUxMSklJSElLR01tcHF1dXR1c3V4eXl8fX5+fn5+fn5/gH9+gIB/f39/gH+AgYCAgYCBgICBgYCCYUtPT05OT1BPT1BQTzo8Pjw9Oz8+PkFBPz0/Q0NEQT89PkBBP0A7XW0/UllKUmtva2dycmZfakg7PkFBPz5AQD9BPz89PD48PTs7PD0+QUA/QD5AQ0NEQkRFSEVFR0hISEdGSUpJSUlJSUhKSkpKTEtKSklJSEhKSktMS0lLSkpIVnBwcXNzdHR1eXp7e3x+f35+fn5+f39/f39/f3+Af4CAgICAf4GBgICAgIGBgIJtTFBRTk9QTk5PUFBPPjw8PT4/P0A+QEA/Pz9DRkQ+PDw9QD04OjtudkdBYl1caW5oY3Fua2xmPjk7Pz49PD07PEA9PTw8Pjs9PD0+QUBCQUBAP0JEQ0RFRkZGQ0VHSElJSEhJS0tMTUpKSUpNTUpLSktJSEhISEpJSktKSk5MSUlfcHBycnJ0dXZ6e319fX5+fn5+fn5/f35/f36AgIB/gICAgICAgYGAgICAgIGAgnZNTk5NTk5MTE5QT0w+QTw8PT8+QkM/PkFBQUJBQFpRPDw9S05ISHZ2TThXamhrbmpvcW5tbFY6Ojs+Pz89PDg6Pjw9Pj89Oz4/QEJDQkJDQ0FCQkFCQkRCQkRCRENGSUdGRkhJSUtNSklKSktMSkpJSkVESUlGRkhISUpKTEpGRmdwb3FxdHZ1d3t8fH18fn59fX1+fn9/foB+fn+AgH+AgICAgICBgYCAgICAgICBek5JS0tMTExFSUxOTTw/PDw9PkBAQUE7QkNCQ0BDc3lIPF+Ag4B6e3dWO0Ngc3Ryb3Vxbm9gQT89PT5BQ0A8OTtBPz4+QT07P0JAQkNCQENDQUNBPT0+QD0/QUFBQENFRUBAQ0JDR0dFRENGRUZGR0VEQEFHR0ZDRkRHSEpHQz5IbG9wcHF0dXZ5fHx8fHx+fn1+fn5+fn5+f36Af3+AgICAgICAgIGAf4CAf4CBgIF+UUhLTU1NS0pLTE9RQD8+PkFBQEBBR0FCRENFQEhyeWtlg4SDg4OAfV0+P0doeHVyc3BtbEw+RUJCQkZIQz08QERDQUE/Pj1AQT4+Pj88PkBER0VAPkBBP0BDRkVDQkNDQEJEREJERUFCPkFCQkFCQEA9QUJDRENDQUNFR0E/PVZwcHFwcnV0d3p8e3x7fX9+fX19fX1+fX5+fn9/foB/f4CAgICAgYCAgIB/gIGAgX5SSEtNTUxLS05OUlVEQkBDQ0FBQkBCQ0BAQUFARm90foKCgYR+fYR1TEJDQ09sd3h7enFfRUVJSUlJTU1LRUNGR0hFR0VFRUREQ0E/QD4+QkZKSkdFRUdGRkpOTktKSUdHSEtMSUdHQ0REREVEQUJCQ0BDREVEREVERUZDQkFEZW9wcXF0dnV4e3x6fHx+f319fX19fn59f4B/f39/f39+gIGBf4CBgICAgH+AgICAfVJJSUpKSEpKTE9SU0dGRUdIREdIREA+PDs+QEVFaHN9gXx/hH55hXJDREVFQ2SCh4eIhV5GSUpMTE5PT0xIR0hHSElJSEhHR0hIRUNFRUVFRkhKSkZFR0lKTU9PTU1LSktKTU5LSUhHSElIR0ZFRkZGREZIR0VFSEhGSEdIRlFubnBxcnZ2eXt7e3p9fX5/fX19fX1+fn1/f39/fn5/gH+BgYGAgICAgICAf4GBgIB8UEhHSElGR0lKTU5OSkxJSUpLTE5KRkNBQkNGSkdge4CAeICEhYOEiW1BQVd1hYiHh4eJgldITE1MTU5MSkdHR0dER0dHR0ZIRkhFQ0RERkVEREhIQ0NDR0pKS0xMTExMTElKS0pKSUlJSEpISEdISUhHR0hGRkZISklJSUlIXW9vcXJzd3d6e3t6e319fn59fX19fX5+fYB/f39+fn+BgIGAgYCAgICAgIB/gYCAgHxNR0ZIRkVGR0dKS0pMTUxLTU5NT0tJSEhKS0tMTE5bfIKCg4OFhoaIg1VthoiGh4aHiImIfFBLTEtIR0ZGREVDQ0BBQ0NDQ0ZGRUJAPj5AQUFAQkQ/Pj9ERkhERUdJSklJSEhJR0lJSkpJSEZKSkpKSUpJSkpKRklMTEpKS0tmb3BzcnR2eHl7e3t8fH1+fn19fX19fn59f39/f35/f4CAgICAgYCAgIGAgICAgICAfU9GRkdGR0hHRUZHR01NTUtMS0lHQ0NDRElLS0xMSlaBhISEgoKGhoaEgoaFhYWGhoaHiIaKdUlJRkI/P0A/Pz88PDw+Ojo8QUFAPjw5OTg8PD07Pjs5Oz9BQkBBQ0NCQEFCRERCQ0ZISUhISExNS0dJSk1NTk1KSktLSkxNU2xvcXRzc3d5e3t7fH19fn9+fX19fX1+fn5/foB/fn9/gICBgIGBgICAgYCAgIB/f39+UUZFRkdJSUdEQ0VGTk1MSklIRT85Oj5ARUhISkpJZoWEhIR/gYODgoOEhIWFhoeIiIiIiYyOZkJCPTg4Ojo5ODc4ODk2NDc5Ozw6ODU2Nzc4OTc4NzY4ODs7Oz1AOzk5OT08Pjs7PUFDRUhKTUxMR0lIT1JRUFBOTE1NT1Fdb3BydHN1eHp7e3x8fn5+f359fX59fX5+f39/gH9/f4CAgICAgYCAgICAgICAgIB/f39RR0ZHSEpIRkVGR0hMTEpJSUdDQjU2OjxDQENHSUlphoSEgX6Bg4ODgoOEhomKi4uLiomKi4yJVDo4NjU2NzY2NjQ1NzYzNDY4Ojg3NjU2NTY3Njc3ODo3Nzc4OTs3NTc4OTc5ODc2OjxAR0ZJRklGRUZPU1JTU1JPUFBSVGVwcXN0dHd5e3x7fH1+fn5/fn19fX19f39/f3+Afn+AgICAgICBgICAgICAgICAgH9/flJISEhJS0lHSUpJSkpLREVIRUJANTc4OD06PUVDQmaFg4GAgYODg4ODhYmKiomJioqKiouJiYqBSDY3NjQ2ODg3NDU3ODQ2NzY5OTc2Njc2NTo6Ojo6Ozg5ODk4Nzc3OTo5ODg3ODU4OTtBPT4+QkE/QUtMT1FQUU9PT1JXa3FydHR1d3l7ent8fX5/fn9+fX19fX5/f4B+fn9/f4CAgH9/gICAgICAgH+AgICAf39+VEhHSUlMTUtKS0tMSUg/QEFAPDo1Nzk4OTc7Qjo9coSAgYOEhISEhIaJioqIh4iIiYqKjIqJiYx6Pjk4ODs8PT45Ojs8ODk7OTo7Ojk5Ozo5PT09Pzs7PD06Pjs5Ozs8Ozw8OTo8ODo6Ozo5OTk8Pzw9QUJESUpNS0lLTFdvcnN1dHZ4e3t7fHt9f39+f359fX19fn9/f35/f39/f3+Bf4CAgICAgICAf4CAgH+Af35URkVGSUxOTkxKSk1CPzo7PDo4OTk4OTo6Ojs/Pkh+hIKChIWFhYaIiYiHhoaGiImIiYuMi4mKioxsPDs+QkNFRUFBQUI+QEJAQD49Pj5APz8/QD9APT0/Qj9BQT9BPz1AQEA+P0E9Pjw7Ojs5OTs/PTs7PT1BQUNBQkNBWHBxdHR0dnl7e3x9e31/fn9/fn19fX5+f35+fn9+f4B/f4CAgIB/gIGAf39/gICAf39/flJFQ0FHSk5PTElHSzo4Ojs5Ojo8PTo7Oz09P0BCUoOCgoSFhIWEhomJiIiGhoaHiImKi4yLioqLiotePkRHSUtKSUZHR0RGSEdFQkBAQ0VDQ0FCQ0I/QERIRUNFREVFQUZFRkRFRkRAQj88QD49P0A+Pz8/Pj8+Pjo7PTxgcXJ0dHZ3enl6fX19fn5+f39+fX19fX5/fn5+fn5/gH9/gICAgICAgICAf4CAgIB/f4B+UERAPUNIT01HRkJEOTc6Pjo8Oz4/Pz89QUBDQ0ZYhYKDhIWGhoaIiYmIh4aGhoeJiYqLjI2MjIuKiohXSExNTUtOSklLSElKSklFQ0RGR0ZEQ0VGREJISUtIR0dGR0dFS0lLSUpLSkNGQ0NEQkFBQ0JEQ0NERENBPTs9QGhwc3R0d3d6eHt8fH19fn5/f359fX19fn9+fn59fn+Af3+AgH9/f4CAgICAgICAgH+AgH9PQT49P0RMS0BCQkE5ODw+Ozw7PkA/QT9CQkdHSlmFgoOFhYeHiImJiIiHhoaGiIiIiYqMjYyMi4uKjH9QTU9NS05LSkxKSUlISkZER0hISUVFSEZGRUxMTUlKR0dISUpPTU5MTE5LR0dHR0VFQ0ZGRkZERUhIRkNBP0BMbHB0dXZ4eXl5fHx8fX1+fn9+fn19fX1/f35+fn5+f39/f39/f3+AgICAgIB/gICAgICAf1FBPz4/RUdHPTxAQDg4PDs8PTo/QT5AQENGSUpRYIKDhYSFhoaHiIiIiIiIh4eIiIiJioyNjIyMjIuKjXFNUU9NTExLTEpIR0VKSERKSEdLSkhKR0dHS0xOTExISElKTVBOUE5NT0tJR0lKSElESUhIRkZHR0hGQ0JBQ1VucHV3d3l7eHl6enx8fX5+f39+fn1+fX5+fn5/f36Af4B/f3+Af4CAgICAgICAgICAf39/VERBQUJHR0I/OD9AODo8OD0+Oz1BPj9AREhKTFVxg4SEhISFhoeIiIiIiIeGiIiIiImJjIyLjIyLi4uLi19SUlBNTk1LSkdGQkdKR0xKRktPTEtKSk1NTE9QTkhJS0xPUVBQUU9PSklKSkxKTEZHSEdFR0lGRUVCQEJCXG9yd3h5enl5eXp6e3x+fn5/fn59fX19fn9+fn9+f4CAgIB/f39/gICAgICAgICAgH9/f39VRUNFRUdHRUQ7P0E7PTw5QD4+QEJHR0FHS0xQVnmFg4ODhISGiIiIiIiIh4eIiIiIiIqLi4uMjIyMi4uNfFdWUlJUUk9MS0pERUZLT05PV1ZRUE9RU1JNU1RPTVNMUFNVV1JTUVBMSk1NTUtOR0dKRkZISkRERUVCRENjcHV5eXp6ent6e3p7fH59fX9+fX19fXx9fn5/gH9/gICAf39/f3+BgYCAf39/gIB/f39/f1VGRkdHR0dIRj5AQj0/PT1CP0NDRlZORk5QUFRYe4aDhYWEhIeIiIiIiIiIiIiIiIiJiouKioyMjIyPi4uLZ1ZVa2FFUlFRUEk7O1FTUmB1XVVWVFZZWVJZWFJaZlBVV1pdUlRXUVBOUlBQUFFLS0tISEpIRUZJSElISWlydnl5enl6e3t8ent8fXx9f359fX19fX1+f39/f3+AgIB/f39/f4CAgIB/f3+AgH9/f35+U0hKSUlHR0ZFPz9BQUVCQ0dFREVMWFJNVFVWWFt8hoWHhoWGh4iIiIiIiIiIiIiIiIiIlJyMioqMfWGKi4uHbFtkVTpYWFhTUT9AVlVZXGRgVllicl5dVl1aVkVRWVpbWV9UWmdSVVZYVFRWVE9PTUpMSklJTE1LT01Tb3N2eHl4d3p5ent6e3x9fH5/fn1+fX19fn1/f39+f4CAgH9/f3+AgICAgH9/gH+Af39+fn5WSkpJSEdGRERCQT9ITUlNUEtJS1BUU1NYWlpcXHiFhIWFhYWGh4eHiIiIiIiIiIiIiImcnaCPiY5nO36MiYqLeW5wWFpbWlJUUlZWVFpadYNZVX2QYVxYXV5XSVZdXVtbX1lJWVhZW11YWFlXUlFOUFFNTU9TUVFVUmFzc3Z3d3Z4eHh6e3t8fX19f39+fX59fX1+fn9/gH9/gIB/f3+Af3+AgICAf39/gIB/gHh5fVlOS0lJSUZCREBBOlBRUVdYUFBPUVNUVFhYWVpbboGCg4WEhYaHh4eHh4iIiIiIiIiIiJaanJeIioFuhomIh4OKf2ZZWVxZU1VUV1JRV1ZjloBRZXJYWldfaFBgZltbWFxnYUdPWmhnXFtcXV1XUk9TUFBRVlZWVllabnJ0d3Z2dHd4eHt7fH19fX5/fn59fn18fn9/f3+Af39/gH+AgH9/gICBgYB/gH1yfX9/b3R8XVNQT01LSkVDP0A7UFBaWltTU1FPUlJSVVNWVFdfdXiAhYSEhYaGhoaHh4eHiIiIh4eIh4ORjomJiIaFiIiGfYB7XFBVWFRSVFJRUUxPTUtmeVpdVFlVVl1aTFRaVFNUXlpYV1dXemtYWltcXlRRUVBJTk9XVlhaWmRxc3Z2dHR2eHl5e3t8fX19fn99fX1+fX1+f39/gIB/f3+Afn56eHd2c3V7f3+AgHRrfn5rcnleW1ZVVFJPS0ZDREFNXoNsVlJTTk9RT1FVUlNSUlRjZHaAgoKDhISEhIWFhISDhoaGhoeIhn6JiYiHhoOHh4d5bXFWSUtNTktNS0hKREZIRUM+U2NVf1JRUU1LUlRRTU9ZUU1OUVNVVU1RU1JQT01MSENJSFJUVVpcbXJ1dnVzc3d7enp7e317fX19fn19fX59fn9/f39/f399fX5+f39/f4B+e3Zzd31+fmR1fWlxdF9kXV5bWVZQTElMSWFsknRQUVNOUVJRUltSU1JRUlZVYnN7fH+AgYKBgX99e3uAf4OChYaHgoaGhoGEgYaFhnVfXUtDP0NDQ0NCP0RQQkRAQz5CSEdWQEhOTUddaVFIR09GREVGSEdIQkNIR0hLR0RBQURAT1BNU2RzdHV1c3R1enx6e3t7fH19fHt+fX19fn5/f3+AgIB/f3x8fX+Af39/f4CBgH12dHt/bWh8Z25xZmllZGJbWFNRUFVSc1dlW09PTkxRU1FVWVNVUVFUU09WYGtscnZ7e3h5dHJuc3RzeXh+foOAg4OCgIKAgoGBa0xHPz87Oz5AQD8/PmtRS2FFRkhJRUI/R0xNR01RVUlCRT8+PD08PT0/PT9BQ0M/Pjw9Qj5KTUZVbnV1dXN0dnh6fHt9fHx9fX19fH59fXx+fn9/f4B/f39/enl3eHd2dnh7foB+fXt4dnx1YXhnbHBqbGpqZmBbUVJaXFleSUpQUU5LTFFSUVRWVFdSUVdWUFhbYl1hZ21tbG9raGBucmptbHF1e3p9e3h6fHx4d3hkQkBAQj06QkNBQURCXF1Pe05PT05LTE1PT1FMS0xXTkhHQEI8OTc3NTk5PTs7Ozg5ODk/O0JIP1x0dHV2dXZ4enx8fH18fH19fn58fn19fX9/f39/fn9/f314dXZ6e3p3eXh1d3t8eXh1eXdjcWhpcG1ubW1oZl5PUF5cWklHUFJRT01QUU5RUlRWWFNSWVROWVpbV1ldXl5gZWBdXnF2a15gZ2t3b29sam9ubmxmYlhHRkZIQkFHSUVFRkRNUlBhV1JYUVBTU1JVW09PUVdQTUpDRj46OjY0ODc5Nzk6MzY2Nzk1PEI9ZXNzdnd3eXp7fX18fHt8fX5+fnt+fn19f39/fn5+fn9/e3d1eX18enh8fHx8dHd2d3Z1d2tuaWhxbm9vb2prYFVXXlpXTUxUVFNRUVVPTFJTVFdYVFRYUUxYWVpWWFhWWFldV1dYaHNrXVZhc2thYV9dZGFfXllVUE1PTkxJSEpLSUhGQ1FQU1pXVFROUVNZU1xlVU9TVFFOTElIQz9BOTk4ODk3ODg1NzU3ODU5OUducnR4eHp7e31+fX18e318fn5+en1+fH1/f359fn59f358dHR1e3hycW9vbnR4cXJzeHZ1cWZkZ3JucHBxbm1kXV9fWVdPUFhWVlNUVk9PVVZYWFlTVVRMS1RVVVVVV1BUVVdUVVJdbl5STllfW1ZZO0RWWFRbZkpMUFJST01NTk5OTEpGUVBVWVNUTkpPT1RTVFxWUlVTUk9NS0lISEY/Pz06Nzg3NjU5OTY3NjY1V3BxdHd5ent8fX59fXx9fXx9fX15fX18fn5+fXx8fX1+fXxydnF4eHJ2dXFxbnBwb3B1dnRuamRkanBwcXJwb2ZlZGNcXlJUWlZXVVRXVFJYWFlZWVJVT0lHT1BPT01SSk9QUFBOTk9UTE1JUE9TVFUyPFhNSUFRPWNhUVNRUE5QUVBOTk1RTlRSUFJNSUxLT1FQUlJTVFFST0xNS0xMSENCQT06Ojg3NjtCNDU2NjtlcHJ2d3h7fHx9fnx9fH19fX18e3h8ent9fX58e3l9fH18e3B1b3d1cHV0b3N2cHFxcHR1dmNqZ2VXaHRycnFuaWlocFZWVFVYVVdVUldWVVpZWFdVUVNGRkFGR0dIRkpESEpIR0VITEhLSEZMTVBNRy9FX1I+M0A+am9hUlJRQEZVUVBRUFFOUU9QT0xKTExPUE5OUFFRTlBPSkxNTUtHRUVEQjs9PDw5PUc2Njc2RG5xdXd6e3t8fH18enx8fX5+fXt5dnh3eXl8fXp6dn17fHp6b3Fud3JwdnFtcHNwb3Bzc3N0ZmdgaFpXa3JzcmxtbWtuYmVQU1RSU1VPV1ZWWVlWUVFRT0A+Oz0/QEJBQ0BCRURBQEdIR0hFRkhKTktFR0NPUkM4RU5TXWZTUVNBR1VQT1FRUE1NTk1LTEtMTk9PUU1PT01ITExJS0tMS0hGRkVEPEFBPjtARTs8ODlUcXJ0eXt7e318fHt5fHp6fn58e3V0dnJ2dnp6eHpyfHt8eXltcW94cnF1bm5xcm9vb3Rzc3J1dGtnZ15lam1wa25xbWltY0xPT01RU0xUVVRXV1VMTEtIPTk4Nzs/QD48PUBAQj0+RUhHREZGSUdLSkBGQUFARkhFSk9IUFJhXFFQUk5TT09QTExPTUtNTE1PTltXS01RT0dJSENJSkxMSkZGRkU/QkM+PEJGP0I/QWRxdXd7ent7fHt6end8d3l+fnt7cXN0cHJzd3R4eHN6e3l2d2xxb3ZxdHRsb3Fybm5vc3ZydHNycmtsZW5zaG1ubWxtbGprSUxISE9RSlFTUVRTT0tIQ0U9OTg3OT9CPjs/QUBAPkFESUVDSEhJR0lFQkI/Pj1DQkFISkVNT2JlUU1OTldLTE1LTE1NTUxLTk5TZE1KTFJJSUlFQUhKTE1OSkdJRkJBQkA/RUZFSERLb3B3enl5e3t6e3p3dHh1eHx8eXpucXJtbm9ycnZyc3h8eHZ2bXBtc3B1dGxwcHJvb29ydnVyVlZucWdseYRqbXFybm5qaG9ISkNHTE1JTVBNUE9IS0U/Qj05OTk6P0I/PEBCQUFERUdLRkNJSUdHSENDP0I/P0BBPkRFQ0tOUVRMSklNVEdJSUpMSktMSUpMTU9QUlBLR0NLR0NCSkpMTU9NSUpJR0NDQ0RJSk1MSVpzbXh5eHp7e3l8dnJwdXJ0eXl2eGpxb2tsbG50dG10dXtzdHhyb25xb3ZzbnBvcnBvcHN0eWpOYGdzanR8eWdvc3FqcWhlcUhLREdISEdKS0lKS0RHQj0+PTo6OjtAQj89QkJCQ0hGSkxKRElJRkdHQ0M7QUBCPkBAQ0RDSU1QR0lLR0hLREhJS01ISkxISUpMS01dUklIRE1HQURLS05NUE5LTUpLRkdHSk1OUU5MY25pd3Z3e3h7en1xbWxza3B0dHR1aHBtamlra3RwbnR0eXByeXRvcnFvd3NvcXB0cnBydXR5a05WbXVscXt2aW5vaWp0aGRvRktERkVHRUZGR0VHQkNAPjw9OTo6OkBEQD5CQ0RFSUZKSkxGSUlHRkZEQjtCQ0M+QEREQ0VHTE5IS05IREhFSUxOTUhJTEdGR0lJTE5LSkhFTklCRk1MT01PTU5OTUtISEpPUlFSTlJmZ2Zyb3N4dXt6fGxoam5la3Btc3FmbWxoaWtsdG1wdXR3cW94dG90c3J2c3BxcnRzcnR1dXZ2WFZ1dWtvdHJrb3ZsaG1lX3BHSkNFRkVCQ0JFQERCPkA+Ojs7PTo9PkNBPkFDRUdKRklIS0hHR0dGRUNAPUVFQj5CQ0NDRUdISUdNUEpGRkdLTk9LRkhKRkVERUlJSEtJRkhQS0RJTUxQTU9OT09OSkpJTVJVVFJPV2RgYW1ncHJvcnl6Z2VoaGNpbGdxbGZsbWdpa2xzbHB2dXRwbnZyb3Nyc3V0cXNzdXRzdXZ2dnl2dXR2bGt1dW1ydnFsbmxlck1HRUVHQ0JAQkQ8QkE+QT06Oj0/Oz4+QEI+QEJER0tGSUZJSEZGR0VDQkFBRkZDQkNCREVFR0dIRkxRTElPSkpMTElHSEVGRURDSUhIS0pHS1JNQ05PTVFPT09OT09LS0tPVVdWVVRYYF5caWFtaW5ocnNiZWZlZGloZm5pZm1taGtrbXJpcXZ1c3Ftdm5vcXJzd3Nyc3R1dnZ2dnd2d3Z2dHd1a3N1bnV0c3FyamtzTUdHRkhCQkBERTxBQUBDPDg5PT45Pzw/QkBAQERGSEVIRkZHRkVFRENFQ0RJRUNGRUJFR0VGR0dFSk1LSFFNSktISElFRkhJRkNJSUpLTUtPU05EUVJQUVJOT01OUE1MTlNXVldYVlhdWl1kYGhiamlna19lZWZjZ2dna2dna21rbWxwcWd0dHVyc252b3FwcnR4cXNzdXZ1gpF5dnZ0eHV1d3hub3VvcnN1cXFpb3pNSEdISEJCQkZFPEBCQkQ8Nzo+Pjo+OkBCPj8/Q0VGREZEREdFREVDREVGR0pFRUlHQ0dIRkhHRUNGSkpHTUpMS0hKTEZJSUtIRUtLTE1PT1JUT0lTVVRRU1BRTU5RTk1RV1pWWllWWl1aWGFgYGBeaGVjYGRmaGdqaGhqZmhubGxubXFwaXV1eHJycHVwcHBydXZwdXN1dnV7fn14dnR3dnZ2eHBsdXBtc3VucHJzeU5JSEdJREFDSEU8QEVCRT04Oj4+PTw8QUI9Pz5BQkZDRUJDSUVDRUVGR0dHSUZHS0hDSEhHSUdGREhLSUdLSE1LSktMSExLTUtKTkxPTlBSVVZPS1VWVFFUUVJMT1FQT1RZWlpcWllbXl9eYGJeXGFja2JgZGdocoVoZ2lmam1ucG9uc3FqdHV4cnNzdHJucHF2cnF1cnV1c355jn11dXZ2dnZ4cmh1cWtydGxxdnF1TUlLSEpFQkVHRTxAR0NEQDo8PkA/Pj9CQjxAPkFBRkNFRERJRUZFR0VISEZIR0lLSUZKSEhLSEZGTEhISEpHTExMTExJTUtNTU1PTFBQUVVWV09LVlZVU1NSUUxPUlJRVltbXV5bXF5fX2FgYWRdZGBlZmBlaGpjc3NmamhnbHBycW9zc25zd3dxdXZ0c21vcnVvcnNwdXJ2cnSBdnV1dXd2dXd0Z3Rya3Fya3J2b3ZKS0xKTEdCRURFPEBGRERCOz8/QUBAQERBP0I/QUNIQkZFRkhGSUZGRElJR0lISkxISEpKSUxKRkpLSElKSkdLS01NSkpOTE5OTlBLT1BSVVhWTU5UVlVTUlFQTE5UU1JXW15eX11dYF9hYWFgYmRlYWNoYmRpamd2i2xraWdtb3NxcHFwcHJ5dnJ1dXRzbW1zc21xcm90dXRycHN3dHV1d3Z1dXVlcXNrcHFqcnZvd0pNTExNR0REQUQ8P0VFRUM9QUFDQkJDRUJCREFBRUdDR0hIR0ZKR0NHSUdHSkZJTEhJSk1LTUxHS0lITEtOUUtSUUxTTUtOTk9QUE9UT1dYWFtOU1FXXFpTVlBOVFVUVFhaX2JiX2RhXmBiXmBlYWFiaG1nYmloaG14dmxoaW1vc3JwcXJycnZ0c3Vzc3Nua3NxbXByb3R2cnFxdXZ1c3d5d3V0dWNtdGtvcGpxdG93TE1MTExHRUFARD4+REVGQ0BDQUVEREZDQ0VHQ0NJRkNISkpJSUtHRUtKR0hKSUlLSEpKTktOTElMSEpNS1pmSmRcS2xTSE9OX25Va3NbcXBid2NSUGJ2dWh1Y2F2YFhucWJkdmluemZbbHRgbGpUYHd1aGpnaWZnbG1qbW9qbW5zcnBycnFyc3Jzc3J0cm5sdG9ucHFxdXVxcXN0dnZ1dXl3dXR0YGt0a3Bwa3FycXlLTkpLSkZDP0BCPz1ERUZEQ0NCRUVFRkJGRkhDREpFRUpNTUtMTEdHTUlHSUtIS0tJS0pOTE1NTExJTExMW3NiZHBebG1VTU5mc11mZXFsbnRncGlfYVlubmJwcGJrampnb3F0ZXRub1xvdWdwTUpyeXZrYmBrZWVteW1rdmxucHNycHJxcHFycXJycnRybW1zbm5vcHJ1dHFzc3R1dXV0d3h2dXRibXVrcHBscnJxektMSUlHRURAQkI/PkNGR0JGQ0VERUVEQ0hIR0RFS0dHTE1OS01NR0pOSEpLSklMS0pKS01NTk5NTUpNTU1bcm9vbnBwbGtNUFFsV05pYnRycGFtb3ZcWWxRXG1tWnFta29teHh0c2lwXF9ya3FqVXV5eHBjXmtmYmdxcGppb3Bwc3NwcXBxcXJycXFycnRsbXJtbm5vcnV0cXRydHV1dHV1enZ1dGVudWtwb2xzcnJ5SktHSEVFRUJCQj1AQEZHQkdESUVFREJGSUhIRUdLSkdNTU5LTU5HTE5JTEtJSk1JS0pKS09QT05NS05NTFxoZHVdbHFXbE5QUW1VWmtea2x2YWxkdFRlY05tWWxcdHBraWx4and1aHBdXnJraFdiY3d8b2NgZ2dhZGp1eWtubnFzc3BxcHFwcnFwcHBydWttcW1tbW9xc3Rxc3J0dnZzd3Z6dnV0aG91bHNvbXNydHZJTUdJREVEQ0FCPEJBQkdER0ZMSEVDQ0hLSEhGSkxMRk5LTFNSTEdMTEhOSkhITkhKSklITk9NTkxKTk1KWnNwcG9xcW1sT1FSbllxa2dvb3Fxb210Xm5YYXRfbm5vb3Fyb251c3R0altddGN3eHJqbnpoYWFjZmJiam10dXBzdXZzcXBwcW9ydHt/fn13bGtxbmxtbnByc3F0dHN1dXR4eHl5dHVrb3VtdG9uc3N2c0hLSElCRUVFQUA+Q0RCR0NISU1JRkNGSkxJR0ZLTUxGT0pLV1JLR0tKSk5JSEpMSUtKSUhKTU1NTUlLS0tTa2JaaV5faWNyclpfWWpvX2VlVWtfY1thYlFgbGhdalxuaWlkW3BmZHBdWlxrW21xY3BzbGRnY2RnYGBrbXBwb3R5cnVxb3BxbnmFiIeHhoWAdnNua21tb25xcnR0cnR1dXZ5eHhzdW5xdW52cXJ1dHdySEhGSURFREZBQEFFRURHQkhKTEhGREdLTElFRkpPTElPSUxbUUpGSEhLTUlISklLS0lISUdLS0xLRkhLS0xMTEtJS0xOVFtcVFBUTFBPTk9PVlFPT1FPT1FKSU5QUWRxaVRZV1tbXFVZWl1YXVxcY2ZhYWZiY2VfX2ZrbWhtdHlydHJvcHB0hoeGhoaFhYaHg3pwbW1sa3FzdHRydHZ0dXl4eHV2cXJ1b3ZydHN1dXNIREVHRkZBRUM/Q0hERkdDSUtMSEZER0tMSERHSFBLTE9LTFdMSUVFSElKSElLSExKSEZIR0pHSElFRkxJSktOTElPXFdeUFxbYF5PWFlTXFxiXk1ZWk1YYVJKWWFaU2BkXGFYW2RkVlZYXFlaWFxWWVxdYl9kYGFfZWhrZ210dHFxdHBxcoGGhoaFhoWFhYaGhoR9cmtpb3Jzc3N0d3l5eHl4d3h0cXhyeHNxcnVydE9CQ0RMTUFDREJESUVHR0ZLSktIRUVKSkpHRUhIUEpNTUpNU0lIRkFIRkpJS0xJTEpIRkVKR0RGR0VGSkhDSk1KS1RfWWBYYGFbYFVYWVReXlpfUllcUF5cWU5eXF5TW15jXlpdYGNgWV9iW2BeW1RYWFleXWNiYmFjZWlla3Jwb3Bwbm93hoaFhYaCe4CFhYaGhYaFf3VxcHJyc3Z5eXp5eXh4eHdyeXZ4cnF4dnR2YVNKSk1JREJCQ0ZHRUdHSUtKSUlERktLS0ZGSUpOSk5MSExOSEhGPkdHTElLS0pMS0lHRUlEQ0NFQUZKREBKTEpPW2NZX15hX1JUU1dfYFxdWV5RWVxNVl9XS1FZW1BaX2FhXl5jYWBiYmJjY2VaUVlWVVxZXWNgX19jZWJob21tbGxsbHWFf4SDeXV8hIWFhYaGhYWGhoN9d3JydHd5eXl5f359eXV5dnZybnp3dnhYUUtHQ0dFQkVHSEZHSElGR0pHSEZIS0lMRERLS05NTExISkpISkc/R0ZOS0tLTUtLS0lHR0NEQERBSElCP0lKSE9dYVpbZF1fVFFTWF1cXFxfWktXXExSXFlJTV5QT1xfYWNkY2NiXGRjYmRjZlhRVVRTW1haYV5eXmFhX2Rsa21qamxudn51gXp8hIWFhYWFhYaGhYaFhYaGgnpyc3V1e4WHh4eGhYSBfnhwend2eFxSTUNASUZDRktJRkZHSUdHSUZGRklMSk5FREtKTE5KTElLSkhJR0JISFFNS0tPTEtLSUhHRUQ/RUNISEFBR0ZFVF1ZXlhfWV9bXVVYWFBdXVFLSldeWF5bXVZaYFJRX19iYmFgYmJgY2JhZGRiWE9RUVJbU1tdXV1dX19fZGhnbGpubnB7e3x+e4CCg4SFhYWFhYWEhIWDhISHh4FzcneFh4eHh4eHh4eHh4WDgHx4XFNLQkFHRkRHTVJIQ1JLRkhISEVGS0pNUEVHSUpLTkxMSUxLSUlIREhLUU9NTVBMTUtLSElDREFFREhHQkFHRUNXVUVcVF1TVl9YTlRVTlpbTUpLVWBhW19YX15hXU9ZYl1gYF9iY2JdYWJXX19UUE5QUVhSXVtbXFxeYGJmZmVsZm9vd3x7gHt9f4CEhISEhIWFhYODhYKDgoWFhnpvgYaGhoeHiIeGhoaFhYSFg35JTkZERUZHRElSYlBEV19JR0dIREZNSlBQRkpJSktOTEtLTUxKSkdFSk1RUU5OT01OTE5IS0FEQUNERkRDQUVGQk1IQ0xMUE9PTEZNRkdJSkhHTExNT1BJTE9QUFNQTFBUU1VaWVdZWFhkV09TVFBQT05QVVRbWFlaXVxgYWRlY2dja2xwc3N6eX97en+EhISEhISEhIKEgH57gYOBfXuFhIaGh4eHhYWFhISEgoGAfUtJRUVHRkdES01dTEdIWU1HSEpIR05MUVFJTEpLS05OVU5PS0tMR0dLUFNTTlBPTk9OT0hLRWBFRF9MRGZjRU1bSV9cc21PTVZtWUxDUGBVbFdnSl1XVV5ETVFVTE1UVlFTVFhXVFhVVFxVUGZaaGhkWFNrU1ZWVVtcW2BgYWJiYmBmaGZubGhyenx9foGEhISDg4ODgX18enJ7gXp7f4KAg4SEhYWBhIWBg4N/fnp7TElFRkZIRUVLT1NJS0ZgVEhKT0pJT01SUUtMS0xPUlVST09KTE5HSE1RW1lPUFBOT1BPSUpQf1FJfFlZcnNYUG1IcW5wYVZQcXFzUEJrc21xc3BTb19bblhdVlxYVWtoVV1WY1pgWVtgVlVXf2p0dXVfYHdgWGFcXGZbX2FhYWFeYGJnbXBsYHB3dHiBgYKDg4J/fX6Adnh6bHZ+dHh+gHx+gIGChHyAg3p/gX9+d3dOSUVITU1CRExMRkpMRlFWTEtPSUtSWFdRTk5OTFFUTk9RUEtMT0dNUFNbWlRRUU9QUFBKSFp4XVR4ZWhZUlRRdmd0bHBibmZqUXJPTXdtanJwc3JxcnBvcIFdZnp1eHFxenF+c31rdX1iUmd8ZXNzb3NzfH1vfXlvf3JfYGBiYlpgYGdrbmtibGZnbXd+gYCDfnt4d4B0dnppcn5udHx+d3h7foCDeHyAdXx/fHxzc05LRmBdR0FFTU1IS0tISlBPTU1KTlZeWVVMUVNOWFpMU1NSTkxQSVFSVFlXV1FUUFBQUUtIZnhsY3hybVpLTVV5cHVtdWJudlBkZUlmdnFtd2+AamZ4eGlYc1Jpe21panp6fmx4en9vZ29YdnZqdXVwgGBzaHxpbHh8b19fX2NiWl5jZGZpamRnYmNkbGxwcHN0c3NzeXFyeGJsdWdyeXtzc3V5foFzdXpufH15eHJuTktTdE5DQkVQUEhKS0pMUU9PT01QWmBaWEtUV1BhXlJWUVlTTVBJU1RVWFdXT1VQT05SSktyb3V1cXVxZGliV25McXBeRmh5V3ZUTGh4fXhgeXtzbmFebW9kUmdydW5teXB3bHZ0dHFsbVx0fnprbXl8bHVtfGtwdnV4Xl9fYl5dX2VkaWdoZmVeYWJpaWlqa25va3FubWpwYWNmZG93eG9tcHN5fm5xcGp7enRyb21MTFtWSEdFR1JQSkxNS0xRUVFQUFFXXFlVTlZZVWZYUlJZXlRNTklUVFZXWVdPU05OTlFIUm1IaXdLYGR2dlZYbE9ubHtzYWpnf3ZVS1draH1sbWx4YFtwenteYHpzY3JveHFoZXxpcntdVEtsYHZ1a2l1e3ttfnhrfHBdXl5iW15iZGRnZWVlYlpjY2lra3JzcndnbWloZGdgYWxhZ3Nya2htbXJ8a21oa3t0bW1rbU9ISktISUlIUlBMTk9MS1NTU09TUldSVlRQV1pWVlRUVGFgUU9OS1RTU1FVVk5OTE1PUEpIUU5QVUxLS1NUU1JUUFZVUVFOUVFYWFFOUFVUWFhYW1tVUlNXW1dYV1pPU1VXV1hSXVlXXVZUT1lSV1dXWFlfW2dyXltbWVxdX2NaX2NjZGZkY2NiWmNjZmZmbW5tdWZmZ2NgZl9dZ2BkbGhmZ2tocHpoZ2drdWpoZ2lsUUlLS0xNS0pTUU1RUE9MVlZUUFRVWFVZVVJaXVZVVFdVWVhQT0xNVlRRTlVTTk9NTFFPSklRUktRTUtLT1JUUlFRU1NJSExOT1FSUVFRVFZSWFdcV1NTUVJVVVZTWlFPU1JXVlRZVlRZVVRSVVRUVFdYV11aXmFdXFpaXFxgY1xdYmNkZ2VlZGFZYGFjYWJoaGluY2FkXl9jXVpkXGJtYV5mZmdtc2RpaGtrZWRkZmhQSktMT09MTVRQTlNRUU1YWFVUVVdXV1pWVFxgVldWWVVYVFFQS09XU1BOVVBOUU5LU1BMTlVUTlFOTU5RU1BUUVNUVU5LTU9RVFRSUlFWV1VZWltZUlVSVFdXV1lbVE9UVVhVVVpVV1lVUlJYVlVXW1laX11VWV5cXl1cXWBhXltiYmNoZmVkYlhfYGJdYGhlZmRhXl9dXV5aWl9aX2dgXl1dY2hrYWdmaGZkYGJjYVBLTUxQUUxPVE9PU1FPUVtaWFdYWlpYWFZdamRWWFlaV1ZUVE9LT1ZUUE9UUFBQTk1RUU9RWFRSUU9NT1NWTldSVFVVT05NUVNVVVRUUlRYVlpdXFpWVlFSV1hWW1tXUVRWVlZWWVRYV1RTUlhWVVpdWV1fXlZeXV5gXFxgX19fWmJiZGhoZWRhWWJgYl5eZmRjYGJdXFxcXFlaW1hbYVteXV1fYl9fYmRkYmRfX2BcUE1OTlJRTVJST1NUUVBVXFpaV1tbXFlaW2RxbWhkX1tZVlZYUk1NVlNNTlJPUVJPTFBTUVVaVVRQUExQV1ZSV1NTU1hNT1BSVFhVVVVTVVlYW15dW1tWUk9VVlZbW1dRVFdWV1hWVFhaVFNSWldWXF5aX19gVWFcYWFdYGJfXGBdY2FjZ2lkZWBZY2BhX19lZV9gY1taXFtcWVpZWVdcWVxbYF5gW15eYWBfYlxZYFpRTk9OVlFQVFFPVVRTUFdcXFxYXlxfV1xeanF3eYBjXFtWVlhSTk9XU05RUVBSVFJLUVRUWVpXVU9STlNYVlRTVFJSWk9RU1NWW1ZWV1RWWlhdXlxcXlZTTlRVVlxcVlJUVlZYWVNUWVxUUlJdWFpdXlxgYWBXYltjYl5hY19cYmFiX2RnamRmXltkYGFgYWNlX2JfWVpeW1xbWVhZV1daWlphXF1bXVxcWl1gV1tbWlBPT09ZUFVVUlJXUlRQW11eXVtgXGBVXF1panJ9c2xnXFVZV1FPUltTUlFUUlRVVEtRV1ZbWVpTT1NSVlZVU09WUlNaUlRVVFhdV1hYU1hcWF5dWVpdVVVOVldXXltYUVRVWVlZVVdZW1RTVl5ZXV1gXWJjX1lgW2ViX2RkXl5jY2FdZWdqZGZeXmRhYGFiY2RfYl5YWl9bXFtYWFhYV1taXGBdW1tcW1haW15WXlldUE9PUlpQWlRVVlZTVFReXmBeXmJcYVVdXmJreXRsfWxaVVpVUVFTXFRVVFZUVllXTFJaVl1bXFJPVVNYV1ZTUFhSU1dTVlVVW11YW1lVWl5YX15ZXFlSV1JZWFlfWlpTVFZaWVpWWFlcVlVaXlxeYGFfZGRdXl1dZWFiZmReXmRjYFxnZWhlZGJfZGFgYWBiYl9gXldYXlpcXFpZWVdWXVpdXlpZW1xbV1lcXVZYV11TT1BXWVFdVVZZV1dVWF9gYWFgY11gVV1eYmVldYF6aFhZWlRWU1ZcWFdXVlZXXVhQVVxZXl1dVFJYUldWVFJUWFJTVlRYWFhdXlhdW1VeX1hfX1hdVlFZVFlaWmFZXFVWWFtaWlhZWVpYVl1eX15jYmFlZVxiXGBmYmRmZF9fZGJiW2ZjaGVjZmFmX19hYWFhYF9eVlVdWVtcW1lbWVldW1tbWFhZW1laWl1fXVRZXVVOU1pWU1xUVldZV1ZcYGFiY2FkX19WW2BkYV96dW9oWVxaVVdVV1taWVxZWFlgV1BVXltgYVxUVVhQVVdVU1ZWUlNVVlpaXF9eWl9cVl9fWl1eWV5WU1lXWVpdYlpeVldbXFtcW1tZWllZXl9gYGRiY2VlYmRaYmZjZ2ZlXmFiYGNeY2NpZGRnX2deYmJjYWFgXl9YVFpaWltbWFtYWFxbWltXV1lYV1xbXGBdVl1dU1BWWlZWWlVYVVhXWF1fYmFkYWRhXllZYWRiYGxmaF5cXVtWV1hZXFxcX1tZW2JWVFdeXWFjXFJWWFFXVldWVlZTVlRYXFxeYGBdYV1XYV5bXlxbXlhWWFhbW19gXF9YWV1cXV5eXFpcWFtfYV5gZGNkZmZmYlljZWVoZ2ReY2BfZWNdZmlkZWlfZl5jYmNhYWBfX1tYWVtZWlpYWVhXW1taW1dYWlRZXVxaYFxVXmJOUldZVldaWVtcWVdZXmBiYWRhZGFdXllhY2JfYWBhX1xcXVhXW1tdXV9fXFpdY1haWF1gY2RfUlhZUFdWWFlZV1ZXVlxdXmBhYF9iXllhXV1eWV1dWVhWV1tcYF9dX1paXl1eXmFcW1taW19hXmJkY2VmZWZiWmRmZ2lnY19jXmFmZVppaWJmaWNlXmJiY2FgYF9dXVpXW1lZWFhaWFdaW1pZV1hWVVtdXV1gYGJieExXV1xZV11cXF1aV1xdX2BiZGJiYV1gWGJjYmBjYWJeXFxcWFdbXV9dYF9dW2BkXFxYWmNlY2BSXFlPWFdZW1pZWFpZYF1gYmJgYWNfXGJdX11bXl5ZWVVYXV5fYF9fXFpeXmBiY1xcWFtdYGJhY2VkZ2VlZmRcZWZoaWZjYmJcY2dgXGlpYmhpZmVgYmFjYV9gX11dW1lcWVhXWFlYV1xbWldXWFBYWl1hY2Zmcmt/SllXXVpaX11cXlxZXVteX2FjYmFhXWJbYmRiYGNjYl1cW1pXWGlxYFxgX11cYWNfXllZY2VkYVNfWlFYV1xdXFtaW1tjYGNiY2BiZGFgY15gXF5eX1pYVltfXl1hYV9dW2BhYmViX11UXF9gY2RkZmRnZmVmZV5lZmhoZ2RkYFtmZ15haGhjaGhmY2BiYGNiX19fXV1cWltZWFhYVlpWXFpaVlZVTVhXXGdpa2h1eIF2dnZ2dnZ2dnZ2dnd3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d4eHh4eXl5enp6enp6e3p6ent7e3t7e3t7e3t7e3t7e3x7e3t7e3t7e3t7fHx8fHx8fHx8fHx8fHt7e3t8fHx8fHx8fHx8e3t7fHx8fHx7e3t7e3t7fYmIhoqHhYOBg4OCg4OCgoKCgoKCgoKCgoGAgYCBgICAgYCBgYGAfnx8fHx8fHx8fHx8fHx8fHZ2dnZ2dnZ2dnZ3dnd3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3h4eHh5eXl6enp6enp6ent7e3t7e3t7e3t7e3t7e3t7e3t7e3t6e3t7e3t7fHx8fHx8fHx8fHx7e3t7e3t7e3t7e3x7e3t7e3t7fHx8fHt7e3t7e3t8iYmHiYaFgoGCgoGCgoKCgYKCgoKCgoKBgYGAgICAgICAgIGBgYB9fHx8e3x8fHx8fHx8fHx8dnV1dXV1dXV2dnZ3dnd3d3d3d3d3d3d3d3d3d3d3d3d3d3d4eHh4eHh5eXl5eXl5eXl5eXt7e3t7e3t7e3t7e3t7e3x8fHx8fHt7e3t7e3t8fHx8fHx8fHx8fHx7e3t7e3t7fHx8e3t7e3t7e3t7fHx8fHx7fHt7e3uHiYiJhYSDgYKCgoODgoKCgoKCgoKCgYGBgICAgICAgICAgYKBgH58fHx8fHx8fHx8fHx8fHx2dXR1dXV1dHV2d3d3d3d3d3d3d3d3d3h4eHh4eHh4eHh4eHh4eHh4eHl5eXl5eXl5eXl5e3t7e3t7e3t7e3t7e3t8fX19fXx8fHt7e3t7fHx8fHx8fHx8fHx8fHx8fHx8e3x8fHx8e3t7e3t7e3x8fHx8fHt7e3t7e4aJiYiFhYOBgoKCg4OCgYKCgoKCgoKBgYGAgICAgICAgIGBgYCAfnx8fHx8fHx8fHx9fX18fHjF1NLS0tLUk3t9fX19fYSMi4uLi454KSkqKiopKz0/Pj4+Pj5tgH5+f397pdfT09PT1r2GiYmJiYmJjY2NjY2NkEYoKysrKiVjkoyMjY2OiX5/f39/f359fHx8fHx8fHx8fHx8fHx8fHx7fHx8fHx8fHx8fHt7e3t7hIuHh4aHgoGDg4GCgoKCgoKCgoKCgoGBgYCAgICAgICAgYCBgIB+fHx8fHx8fHx9fXx8fH19eNXn5OTk5OeZe39/f39+hpCPj4+Pk3kZGhoaGhocMTMzMzMzMmqCf4CAgHut6eTk5OToyomMjIyMjIyPkJCQkJCUOxYbGxsbFF2Wj4+QkJCLf39/f39/f319fXx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx7e3uCjYeIh4eDgoSCgYKCgoKCgoOCgoKCgYGBgICAgICAgICAgICAgH58fHx8fHx8fXx8fH19fX12fn9/f39/f3l3d3d3d3d4eXl5eXl7eG5vb29wcHBycnJycnJyd3p5eXp6en6Dg4ODg4SBfHx8fHx8fX19fX19fX12c3Nzc3NzeX19fX19fX18fX19fX19fX19fX18fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx7e4CMhomHh4SDhIKCgoKCgYKCg4KCgoGBgYGBgYCAf4CAgICAgICAfnx8fHx8fHx8fX19fX19fXZ0dHR0dHd0dnd6e3h7eHd2eHt5e3p5fXl4eHl4eHh5eXl5enp5eXl5enp6eXh4eXl5eXl7e3t7e3t7e3t7e3p6enx9fX19fX18e3t7e3t8fHx8fHx9fX19fX19fX18fH19fX18fHx8fHx8fHx8fHx8fHx8fHx8fHx8f4uHi4qIhIODgoKCg4KBgoKDgoKCgYGBgYGAgIGAf4CAgH+AgYF+fX18fHx8fHx9fX19fX19d3d3dnZ3fXh3d316eH14d3d5fH1+ent9e3d3d3d3eHh4eHh5eXl5eXp6ent7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7fHx8fHx8fHx8fHx8fHx9fX19fX19fX19fX19fX19fX19fHx8fHx8fHx7e3x8fHx8fHx8fHx+iomMjImFg4SEgoKDgoGCgoKCgoKBgYGBgYCAgICAgICAf4CAgH19fXx8fH19fX19fX19fX13d3d3d3p9eHt4fHx3e3h3d3d5fXx8fX58d3h4eHh4eHh4eHh5eXl6enp6e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3x8fHx8fHx8fHx8fHx8fHx8fX19fXx9fX19fX19fX19fX19fHx8fHx8fHt7fHx8fHx8fHx8fH2Kio2NioWDg4OCgoKCgYGCgoKBgoGBgYKBgIGBgICAgIB/gIGAfXx9fX18fX19fX19fX19fXd3d3d3fX55d3d4e3p8eXd3d3x5eXt9fnx4eHh4eHh4eHh4eXl5enp6ent7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3x8fHt8fHx8fHx8fHx8fHx8fH19fX18fH18fH18fHx8fX19fX18fHx8fHx8fHx8fHx8fHx8fHx8foqJjo2JhISEg4KDgoKBgYKBgoKCgYGBgoGAgYKAgICAgH+BgIB8fH19fX18fX19fX19fn5+d3d3d3d5fHl7eHx9eXt5enp6f3t8fHx+e3h4eHh4eHh4eXl5eXp6enp7e3t7e3t7e3t7e3t7e3t7e3t7e3x8fHt7fHx7fHx8fHx8fHx8fXx8fX19fX19fXx8fHx8fHx8fXx9fX19fXx8fHx8fHx8fHx8fHx8fHx8fHx/iIeNioeFhoaDg4ODgoGBgoGCgoGBgYGCgYCAgoF/gICAf4CAgHx8fX19fX19fX19fX5+fn53d3d3d3Z4eHl3eXp4enh5eXl8e3t6eXx4eHh5eXh4eHh5eXl5enp7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t8fHx8fHx8fHx9fX19fX19fX19fX19fX18fH18fH19fX19fH19fX19fHx8fHx8fHx8fHx8fX+HiIyIhoeHhIKDhISCgYKBgYKCgoGBgYKBgIGBgYGAgIB/gIGAfHx9fX19fX19fX1+fn5+fnd3d3d3d3d3d3d3eHh4eHh4eHh4eHl5eHl5eXl5eXl5eXl6enp6ent7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7fHx8fHx8fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fHx8fHx8fX19fHx8gIeIi4eHiYaDg4SDg4KBgYGCgoGBgYKCgYGBgIGBgYCAgICBgX97fH19fX19fX19fn5+fn5+d3d3d3d3d3d4eHd4dnl5eHh4eHh5eXl5eXl5eXl5eXl5enp6enp6e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7fHx7fHx8fHx8fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fHx8fH19fXx9fXyBhoqKiYmIhIOFhISCgoGBgYGCgYGCgoGBgYCAgYGAgIGAgIGBf3x8fX19fX1+fn5+fn5+f394eHd4eHh4eHZxZGpeam15eXl4eHl5eXl5eXl5enp6enp6enp6enp7e3t8e3x8fHt7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3x8fHx9fHx8fH19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fIGFiYqJioeEhYWEg4KCgYGBgoKBgYKBgYGBgYCBgYCAgYCBgIF+fH1+fn5+fn5+fn5+fn9/f3h4eHh4eHh5bWRiZV9fXm95eXl5eXl5eXl5eXp6enp6enp6enp6e3t7e3t7fHx8fHx8fHt7e3t7e3t7e3t7e3t7e3t7e3t7e3t7fHx8fHx9fHx8fH19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18goWKiomJhISGhYSDg4KBgYKCgoGBgoGBgYKBgIGBgICAgICBgH58fX5+fn5+fn5+fn9/f39/eHh4eHh4eW5kZWdlZGJeZnh5eXl5enp6enp6enp6enp6enp6e3t7e3t7e3x8fHx8fHt8fHt7e3t7e3t7e3t7e3t7e3t7e3t7fHx8fHx8fHx8fHx9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXyChouJiIqEhYaEg4OEgoGBgYGCgYKCgYGBgYCAgYGBgIB/gIGBf3x8fn5+fn5+fn9/f39/f394eHh4eHl3Z2VkZWZkZWFfaXl6enp6enp6enp6enp6ent7e3t7e3t7e3t7e3t8fHx7e3t7e3t7e3t7e3t7e3t7e3t7e3t7fHt8fHx8fHx8fHx9fX19fX19fX19fX19fXx9fX19fX19fX19fX19fX19fX19fX19fX19fIKGi4eJh4SEhoSDg4WBgYGBgYKCgYGBgYKBgICAgYGAgYCAgYF+fHx/f35/f39/f39/f39/gHl5eXl5eWtlYWJlZWFlZV5ieHdze3p6enp6enp6enp6e3t7e3t7e3t7e3t7fHt7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t8fHx8fHx8fH18fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19g4aLhoiFhYaEgoOEhIKBgYGBgoKBgYKBgYGAgYGBgYGAgIGBgn98fH9/f39/f39/f3+AgICAeXl5eXl0Y2NlZGNmY2doZGZsZF5ze3p6enp6enp6enp6ent7e3t7e3t8fHx7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3x8fHx8fHx8fH19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX1+fn6DhouGhoaGhYODg4SDgYGBgYGCgoGBgYKBgYCAgYGBgYCAgYGBfnx8f39/f39/gICAgICAgIB5eXl6d2RhY2diYmRdW2VfYV1eYGFoeHp6enp6enp6enp6e3t7e3t7fHx8e3x7e3t7e3t7e3t7e3t7e3t7e3t7e3t8fHx8fHx8fHx8fH19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX1+fn5+fn5+foSFi4eGhoaGhIODg4KBgYGBgoKCgYKBgoGAgIGBgYGAgYGBgYF+fX1/gH+AgICAgICAgICAgHl5eW9vYmJiZF5jZ19dYWFgXF9kYlttfHp6enp6enp6enp7e3t7fHx8e3t7e3t7e3t7e3t7e3t7e3t7fHx7e3x7fHx8fHx8fHx8fH19fH19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX5+fn5+fn5+fn5/hIiLhoSHhoaEhIODgoGBgYGCgYGBgYKCgYCAgYGBgYGBgYGBgX5+fYCAgICAgICAgICAgICBeXpwXWJlZGJkXmZnZ2BZYmJhY2VfXF1ze3t6enp7e3t7e3t8fHx8fHx8fHt7e3t7e3t7e3t7e3t7fHx8fHx8e3x8fHx8fHx8fHx8fHx9fX19fX19fX19fX19fX19fX19fX19fX19fX19fn19fn5+fn5+fn5+fn5+foCFjIqEhYaGhYODg4SCgYGBgYKBgYGBgoKCgYCBgYGCgICAgIGBf35+gICAgICAgICAgIGBgYF5emxiZGdjYmdmYWBgZGFiZWRjZGNeXGJ1fHt7e3t7e3t7e3x8fHx7e3x8fHx7e3t7e3t7e3t7e3x8fHx8fHx8fHx8fHx8fHx8fHx8fH19fX19fX19fX19fX19fX19fX19fX19fX1+fn5+fn5+fn5+fn5+fn5+fn9/gYeMiYWGhoeFg4SDgoGBgYGBgYKBgoKCg4KBgIGBgYKBgYGCgoF/f36AgICAgICAgIGBgYGBgXp7dGdnZmZkZGZmYF5fYWNlaGRlXmJkYHR8e3t7e3t7fHx8fHx8fHx8fHt7fHt8fHt7e3t7fHx8fHx8fHx8fHx8fHx8fHx8fHx8fH19fH19fX19fX19fX19fX19fX19fX19fX19fX5+fn5+fn5+fn5+fn9/f39/f3+CiYqIhoaIhoWDhIOCgYGBgYGBgoGBgoKCgoGAgYGBgoKBgYKCgX9/f4GBgYGAgYGBgYGBgYGBenptaGNjZ2ZnZWdmZmdiZWRlYmdbYmVgdnx8e3t8fHx8fHx8fHx8e3t8fHx8e3x8fHt7fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx9fXx9fX19fX19fX19fX19fX19fX19fX19fn5+fn5+fn5+fn5+f39/f39/f39/f4SJioiGiYeFhYSEg4KBgYGBgYGCgYKCgYGBgYGBgYKBgoGBgICBgH9/gYGBgYGBgYGBgYGBgYF7emlpZGNqZmFgZmVjY2NnaWRjYmBiZGJ0fXx8fHx8fHt8fHx8fHx8e3x8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fH19fX19fX19fX19fn5+fn5+fn5+fn5+fn5+fn5/f39+fn9/f39/f39/f3+AhIqMiIeJhoSFhYOCgYGBgYGBgYKBgoGBgYGBgYGBgoKBgYGBgYGAgH+BgYGBgYGBgYGBgYGBgXZzZWRnY2RmZWJlZmdkZmhmZWNgYGNkYHF9fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fXx8fX18fHx9fX19fX19fX19fX19fn5+fn5+fn5+fn5+fn5/fn5+f35+f39/f39/f3+AgICFioyJiIqJhoaDgoKCgYGBgYGBgoGBgoGBgYGBgIGBgYGBgYGCgX+Af35/foCCgoKCgoKCgoKCc3NnZWRkZWlqaGZnZ2NhZmZlZmdmZWVjdX18fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fX19fX19fH19fX19fX1+fn5+fn5+fn5+fn5+fn5+fn5+f39/f39/f39/f39/gICAgICAgIWLioqJioeHhoSCgoGBgYGBgYKCgYKBgYGBgIGBgoKBgYGBgYGAf4B+dHRzdX1/goCAfn5/gYB0cmdkZWNmaWppZWNlY2BmZGRnZ2JiZWFwfXx8fHx8fHx8fHx8fHx8fHx9fX18fHx8fHx8fHx8fHx8fHx9fX19fX19fX19fX19fX19fX19fX1+fn5+fn5+fn5+fn5+fn9/f39/f39/f39/f39/f39/f4CAgICAgIB/houLiouLh4eHhIOCgYGBgYGBgYKBgoKBgYGBgYKCgYCBgYGBgoCAgH5zc3NzdHV4dXV0dHV2dXVwZmNmZWhoaWdoZ2VmZWJfZGVmY2BiZ3d8fHx8fX19fX18fHx8fH19fX19fX19fXx9fXx8fX19fX19fX19fX19fX19fX19fX19fX19fn5+fn5+fn5+fn5+fn5+fn5+f39/f39/f39/f39/gIB/f3+AgICAgICAgICHjIyIi4qHh4eEhIKBgYGBgYGBgoGCgoGBgICBgoGBgYKBgoKCgYCAfnNzc3Nzc3NzdHR0dHNzdW9jY2FnZWhoZ2pmZGVnZmhmY2JlYl5ieX18e3t8fX19fX18fHx9fX19fX19e3x9fX19fX19fX19fX19fX19fX19fX5+fn5+fn5+fn5+fn5+fn9/fn5+fn5+fn5/f39/f4CAgH9/gICBgICAgICAgYCAf4CAgYGAgIeLi4iNiYiJhoSFgYGBgYGBgYKCgYKCgYGBgIGCgoGBgYKBgoKBgIB+dHNzc3Nzc3Nzc3Nzc3N1cmdlZWRlamhoZ2ZpaGdjZWViZGNoZGd7eHVzc3R2dnl4dnR0dHZ3d3d2dHR0dXV4d3h4d3d6e3x9fXx9fn5+fn5+fn5+fn5+fn5+fn5+fn5/f39/f39/f35/f39/gH9+fHt7fX58eXl2dnZ5fHx6end2d3l7fXt4hIyMioyHh4iEhYSBgYGBgYGBgoGBgoGBgYGAgYKCgYGBgoGBgoGAgH51c3Nzc3Nzc3Nzc3Nzc3VzaGVnaGVrbGhqZ2lqZ2dnZmRkYmVkbnV0dHNzdHNzc3Nzc3Nzc3Nzc3NzdHNzc3Nzc3Nzc3N0dHV1c3V3eHl7fn59fn98f39/f39/f39/f314fH5+fXx4dXZ3eXd4dnRzc3N0dXRzc3Nzc3NzdHNzc3R0c3R0dHODjI2KiYeIhoOGg4GBgYGBgYGBgYGCgYGAgYGDgoKBgYCBgYGBgICAf3VzdHRzc3Nzc3Nyc3NzdnZpY2hqaGpsZWZpbGhgZmVkY2BkZGZ0dXV1dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHRzdHRzc3Nzc3R2dnV1d3V4fH9+fX9+fHp4dXN0dXV1dHNzc3Nzc3N0dHR0dHR0dHR1dXR0dHV1dHR1dXR1dXV1dIaMjYuIhoeEhIWCgYGBgYGBgYGCgoGAgYCBgYKCgoGBgIGBgYGAgIB/dnNzc3Nzc3Nzc3Nzc3N2dnNnZ2pmaGdmaGhmZGlnY2NnZWVmcHZ1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dHR1dHR0dHR0dHRzdHR0dnV1d3Z0c3R0dHR0dHR0dXV1dXV0dXV1dXV1dXV0dHNzc3N0dHNzdHR0dHR1dXR1iY6MjIqHh4SEhYKBgYGBgYGBgYKCgoGBgICAgoKCgoGBgYGBgYCAgH93c3Nzc3NycnJyc3NzcnZ2dW5kXWNnZWlraGVoZ2dqamlnZXB2dXV1dXV0dHRzdHR0dHR0dHV1dXV1dXV0dHV1dHR1dXV1dXV1dXV1dXR0dHV1dXV1dXV0dHV0dHV1dXV1dXV1dXV1dXV1dXV1dXV0dHNzc3Nzc3N0dHNzc3Nzc3R0dHR0dHWKjoyMiYaGhIeFgoGBgYGBgYGBgoKBgYGAgYGCgYKBgYGBgYKBgYCAf3hzc3Nzc3JycnJyc3NzdnZ3d2liaGhnamtpaGZkZGVmaWhwdXR0dHRzc3JxcnJ0dXV0dHR0dHR0c3NycXFxcXNzdHR0dHR0dHR0dHV0cnJyc3R0dHR0dXV1dXV1dXR0dXR0dHR0dHR0dHR0dHR0c3Nzc3Nzc3Nzc3Nzc3N0dHN0dHR0dHR0dYuOjImGhYWFh4SCgYGBgYGBgYGBgoKCgYGAgIKCgoGBgYGBgYGBgIB/eXNzc3NycXJycnJzc3N3d3d3bGpoZGhpa3Z6a2VmZWhnbXJzdHN0c3JwcHBxcnN0dXR0c3NycnNycXBvb29vcHFzc3NycnJyc3R0dHNxcHFyc3R0dHR0dHRzc3Rzc3NzdHR0dHRzdHR0dHR0dHRzdHR0c3NycnFxcnJzc3Nyc3NzdHR0dHN2jZCMh4eFhYSEgoGCgoGBgYGBgYGCgoKBgYGAgYGCgoGBgoKBgYGAf395c3NycnFxcnJycnNzc3d3d3dzc2pnaWloeX99cW51bG5wcXJycnFxcG9wcXFxc3Rzc3NycXFwcG9ubm1ubW5ubnBxcnJycnJycnJzcXBvb3BxcnJzc3JxcnJycnJycnJycnJzc3Jzc3Nzc3Nzc3Nzc3Jxb29ubm9vcXJzc3Jyc3NycnNzcnaPj4uHhoWFhYOCgoKBgYGBgYGBgYGBgoGBgYGCgoKBgoGCgYGCgX9/f3hxcHBwcXFycnJyc3Nzd3d2dnd2cnF0c252f352c3hwcHBycnJycXFwcHFxcXFyc3Nzc3FwcXBvb25ubm5ub25vcHBxcXFxcXBwcXJwb25vcHFxcXFxcHBxcXFxcXJycnJycnJycnFxcnFxcnJycnFwb29ubm1ubW5vcXJycnJycnJyc3JxeI+OjYaDg4aEgoOCgoGCgYGBgYKBgYGCgYGBgYKCgoKCgoKBgYKBf4B/d29wb3BxcnJyc3Nzc3J2dnZ2dnZ3dnZ1c3l/fnd3d29wcXFxcXFxcHBwcXJxcnJzc3JycXBwb29wb29vb29vb29wb3Bvb29vcHBxb29vcHBwcHBvcG9wcHFycXFxcnJycnFxcXFxcXFxcHBwcHBxb29ubm5tbW5tbm9wcXFxcXFxcXFxcXB7j42NhoODhYOCgoKCgYKBgYGBgoGCgYGCgoGCg4KBg4KBgYGAgYF/f392bm9wcHBxcXFxcXBwcHZ2dnZ2dXR0c3NxfYB9fX9zb3BxcXFwcHBwcXFwcHBxcnJxcXFwb3Bvb3Bwb29wcG9vb29vb29vb3BxcXBub3Bwb29wb29wcnJycnFxcXBxcnFwcXFxcHBwcHBwcHBwb29ubm1ubm5ubm9ub3BwcHFxcXFxcXFxcIKRjoqEhIOFhIOCgoGBgoKBgYKBgYGBgYGCgoKCgoKCgYGBgYCBgX9/gHVvb29wcXFxcXBwcHBwdnZ2dXRzcnJycnGAgoCBeXBwcHBvcHBwcHFxcXFwcXFxcXFxcG9vcHBwcHBwb3BxcHBvb29wb29vcXFwcG9wcG9vb25vcHFxcHBwb3Bvb3BwcHBwcHBwcHBvb29vb29vbm5tbW1ubm5ub25vb3BvcHBwcHBwcHBwiZCMiISDhIaDg4KCgYGCgoKCgYGBgYCAgYGBgoKBgYKBgYGBgIGBgH+AdG5vb3BxcXFwcG9vcG92dnVzcnFxcXFxcICDg39ycHBwcHBwcHBwcHFxcHBxcXFxcXBwcHBwcHBwcHFwcHBwcHBwcHBvcHBxcXBwcHFxb29vbm9wcHBvb29vcHBvb3BwcHBwcHBwcHBvb29vbm5ubm5ubW5ubm1ubm9wcG9vb29vb3BzcXWPj4uJg4KFh4ODgoKBgoGCgoKBgYKBgYGBgYGBgYGBgYCAgYGAgYGAf4B0b29vbm9vb29vb29vb3Z1dHNxcXFxcXJygIKCgXRxcXFxcXFxcXFxcXFxcXFxcXBxcXFxcHFwcXBxcXFwcHBwcHFxcXBxcHBwcXBwcHBwcHBwcHBwcHBwcHFxcXBxcHBwcHFwcHFxcHFxcXFxcXJxcnFwcnRycnR0dHR1dnRzdHR0dXd3gpCPi4iDgoaHhISCg4GBgYKCgoGBgoGBgYKBgYGBgYGAgICBgYCBgYB/gHVvb29vb29vb25vb29vdXRzcnJycnJyc3KDg4OCdnFycnFxcXJxcnJxcXJycnFxcXFxcnFxcXJycXFycXFxcXFxcXFxcXFwcXFxcXFxcnNzcnJyc3V1dHR0dHR0dHV2d3d3d3d3eHh4eHd3eHh4d3Z3dnV2dnZ2d3h6e3x7e3t6enp6enyGkI2LiIODiIeHhYODgoGCgYKBgYGBgYKCgoGBgYGAgYCAgYGAgIGBgH+Ad3FxcXFxcG5ucG9wcG92dHV1c3Nzc3NzdYiDgoN5cnNzcnJyc3Jyc3NycnJycnN1c3N0dnN0c3Nzc3Nyc3N0dHV1dXV1dHV3eHd3d3d4eHh3eHh4eXl5eXl4eHl5eXp6e3t7e3t6enp5eXh3d3d1dnV2dnd5enp7fn5+fX1+fn5/f35+gIyQi4qHg4WIi4iEg4SDgYGCgYGBgoGBgoKCgoKAgYGBgYCBgYGAgIGAf4B8enp5eXx5eHh2dXZ2dHl2d3h3d3Z3d3Z6f3x+fnx2dnd3dnV4enh4eHh3d3d2eH2DeoaIeXl8e3l5eXh4eXl6enl5eXh4enp5eXh4eHh3dnd3eHh3eHh5eXp7e3p8fH1+fX9/f359e3t7e3p5enl5e3t/foB/fn5/fn19fX5+f35+fn6AjpCNioeEhoqLiIaGhIOBgoKBgYGCgYGCgoKCgoCBgoKBgYGCgYCBgIF/f4B/fn19fX9/f318e3t7eXh4eHh5eXl4eHh5eXl4enp6enp6e3t7fH1+fHt7ent8e5J/jJJ5e3t7enl4eXh4ent6enp5eXp8fHt6enx8fHp6ent9fHx+fn+AgoGAgYKAgH9/gYGBgIB/f35+fn5/fX1+f4CAf35+f39+fn9/f39/gH+Af4OQjoyHhoWIi4yIh4aFg4GCgYGBgYKBgoKCgoKBgYKDgoGBgYGBgIGBgIB/goOCgoGBgX99f39/f4F6enh4d3h4eHh5eHh5enp5e358enx9fXt8fX19fHx7fn18moWQmn9+fX9/f3x8fYCDgYCAf318fXx9fXt9fXx8fH19fX1+gYGChISDgoB/gYGBgH9/f4B/f39/f39+fn9/f39/f35+f3+Af39/gICAf4CAgICAhJCPi4eGhoiLi4mKhYaDgoKCgYGBgoGCgYKBgYGBgoOCgYCAgYGAgIGBgH+ChIKCgICAgH9+fn+AgH9/fn18fX19fYB/fX+Af35/gH9/fn9/gICBgIB/foCCgYGih5OfhYB/f4CBf35+f39+f39/fn5+f39/gYB/f4CBgYCAgYOEgoGCgoGCgH+AgYCBgYGAgH+BgICAf39/gICAgYGBgIGBgYCAgICBgoGBgYCAgYGFjo6MiIaHiYyLi4qGhoOCgoKBgYGCgoOCgoKBgIGBgYKCgICBgYCAgYGAf4KFg4KBgYCAf39+fn+AfX5+fn19fX5/fn9/f35+fn+AgYCAgICAfn9/fn6AgICAg6aJlqKHfn9+fn59fn9/fn9/f35/gIGBgoKDg4KCg4KBgYKDg4OCgYGBgYKBgoKCgYKBgoGBgYGBgoKCgYGCgYKCgoGBgoKBgYKCgoKCgYGBgoKCgoaPkY+KiImKjY6MiYaFgoKCgoKBgYKCg4KCgoGBgYGBgYF/gIGBgYCBgIF/gYWEg4KCgoGCgYCAgIB8fHx7fH18fH9+fn9+fn5+f35+f39/f39/f35+f4B/f3+EqIyUo4l+gIB+fn5/gIB/gIF/f39/f3+BgYGCgoCAgYKDg4SDg4ODgoKCgoKCgoKCgoKCgoGCgoKDg4OCg4ODgoKCgYKCgoODg4ODgoKCgoODg4KCh5KSkIqKi4uPj42Kh4SCgoKCgYGBgoKDgoKBgYGBgIGBgICAgYGBgIGBgYCAg4SDg4OEg4ODgoKCgXx9fHx9gn1+f4GCiIGCgoSCgYGDg4GBgYKDgYGBgoKBf4WpkZCiiX6BgX9/f3+AgYCAgICAgH9/f3+AgICAgH9/gYODhYSEg4SDgoKCg4OCgoOCgoODg4ODg4SDg4KEhYWDg4SEgoKDhIOCg4ODg4OCgoODgoCKlJOPioqMjpCPjYuGg4KCgoKBgYGBgoOCgYGBgIGBgoGBgICBgYGAgYCAgH+BgoODg4SEhIOCgoKCfXx8fn6AgYOAg4OChIaFhoaFhIWFg4ODg4SBgYKFhYODlqujoaCHgYKCgoOCg4KDg4KDg4ODgoGAgIKCgYOCgYKCg4OEhYWEg4OChISEhIOEhISDg4OEg4ODg4OEg4SDhIWEhISDg4ODgoKCgoKCgoKBgYKCgo+UlI+Njo6RkY6KiISCgoKCgYGBgYGCg4GBgIGBgYGBgYCBgIGBgYCBgICAgIKChIKChIOCg4ODgoJ9fX2AgH+AgoGDg4ODhIaEhIOEhYWDg4GBg4OBgIOEgY2sqauwpZKHh4aJiIeIh4eGhoeHhoaEgoGCg4SDg4ODg4ODhISFhYWDhYSFhISEg4KBg4OCg4SEg4KCg4SCg4ODg4OCgoKCgoKCg4OEhIOFhYWFhoaIk5OTkI+Pj5KRjIqHgoKCgoKBgYGBgYKDgoKBgIGBgYGBgICAgYGBgICAgICAhISEgoKCgoGBgoKBgX+AgYOCgICAf4CCgoGDg4KCgYODg4SDg4KDhYSEgYKCm6idpaqgoIuGiZOLiIiHh4eIiIiFhIOBgIGBgoKCg4GCg4SEhYSDg4OEg4OEhIOBgYGCg4OEhISDg4ODg4OEhIODgoSDg4ODhIWFhoeHh4eIiIiJiY6TkpKOj46Rko+LiYeCgoKCgoKBgYGBgoKCgoGBgIGBgYGAgICAgYGAgIGAgICDg4KCgYKCgYGAf4CBhYWFhoOCgYB+fn+BgoSCgYKDhIOCg4ODg4KChIuKhIWknZSgopehlYORmIaFhYKEhIWFg4KBgH9/gIB/gIGEg4OEhYWEgoKCgoOCg4OFhIKDhISEhYaGhoaGhoWFhoeHhYaIh4aHiIeGhoaIiYeGhYaGhoeIkZKSkI6QjpCRjImHhYGBgoKCgoGBgYGBgoOBgYGBgYGBgICAgICBgYCAgICAgISEg4KBgoGAgYGAgYKIh4aHhYSCgH99fX6AgH+AgYGBgYGBgoGAgYKCh5eSg5mXjpyfl56ZkZ2SgIGAf4GAgICAgH9+gIGBgYKCg4OEg4OEg4OCgoGBgoODg4SEg4SEhIOFhYaFh4eIh4eHh4eHh4eGhoaGh4WFhYaGhISEhIWEhYaSk5GOjo+OkI6JiIeEgoKCgoKCgoGBgIGCgoKCgoKCgYGBgYGAgYGBgICAgYGAgoSDg4KDgoGCgYKDg4iHh4iHhYSCgX5+gICAfn5/f4CBgYGCgoCBhI2Dk6mYlJaQoKaXmJ6hnIt/gH9/gICAgICAgICDg4KDg4ODgoOBgYKCgoOCgYKCgoOCgoSDhISDg4SEhYWFhYaGhoaFhISEhYWEhIWFhYSEhISDhISEhISEipSTkpCQj46NiIaFhIOBgYKCgoKCgYGAgYKCgoKBgoKBgYCBgYCBgYGAgICAgYGAg4OCgoOCgoKBgoOCiImJiYiHhYSDgYKEhIOBgoKCg4SCgoSEgoOKl4iHnqupn5qhq5aZn52Zh4KBgYGBgoOCgoGDg4SDg4SEg4OCg4KDg4ODg4KCgoKCgoGDhISEhYSFhYWFhIWEhIWFhYWDg4OEhISEhYWFhISEhISEg4ODg4OOlZKQkZGOjYyHhYODg4GBgoKCgoKBgYCBgoOCgYCCgYGBgICAgIGBgYCAgICBgICDhYSEhIODg4SDhIOGh4mIhoWDhIODg4WDgYCDgoWGhISDg4OChI6Zi4SPoKKgnJ+jmZydnJOEg4OCgoGBhIWEg4ODgoKDhISDg4ODg4SFhISDg4KCgoKCgoSEhYSFhYWFhYODhYWFhYaFhoWEhIWEhYWGhYWFhIWEhISDhIODhJGUk5KSj4yMioWEhIODgYGCg4KCgoKBgYGCg4KBgYKBgYGBgICBgIGBgH+AgIGAgYaGhoaGhoaHh4aGhYSDhYaCgIGBgYGHgoB+f4GBj4yDgX9+fXx9jJyPgYeRkpOWnJmbnJqTg4KDg4GCgYKDhYODg4KDg4OEgoKEhIOEhIWEg4OCgoKCgYKCg4ODg4SFhYWFhIOEhYWGhYWEhISEhIOEhIWFhYWFhIODhIOEg4KGlJSSlJKPjYyIhISEg4KBgoODgoKDg4GBgoKBgoKCgYGCgYGBgYCAgYGAgICAgICAhYWFhYaGh4aGhoWGg4ODg4GAgoKCgYKAf35/f4GWl4mAfX19fXyCl4uBg4ONkJOXl5yfmYmBgYKBgYKDgoODgoOCgoKCg4OBg4SDg4ODg4OEhIKCgoKDgoKDg4ODhIWEhISEg4OEhIODg4OEhIODg4ODg4SDg4ODg4KDg4KDgouUk5KTko2NioeDg4OEgYGCg4ODg4ODgoGBgoGCgoKCgoKBgYGBgICBgYCAf4CAgICDhISFhYSFhYWEhIWCg4KDgoKDg4OBgICAgICAgJWfi35/gH2Hi36EhIOEgomOko6JjpyUg4OCgoKDg4ODgoODhIKCgoODgoKDg4KCg4KDg4WEg4ODg4SDg4SEhISEhYWEhIWEg4SEg4OEhISEhISEg4SEhYSDg4SEhIODgoKDkJSSkpKPi4yIhoOFg4OBgYKDg4ODg4OCgYGCgoKCgoKDgoCBgoGAgICAgIB/gICAgISDhYWEhYWFhYSFhYOEhIWDg4SEhIKCgoOCgoSBkaGKgIuFfYaJgX+GhYWFhoeDfn59g4eEhIODg4OEg4ODhISEg4OEhISEg4SEhIOEg4OFhoWFhYSFhYWFhYSFhoWGhoWFhYWFhYWFhYWGhoWGhoaFhoaGh4aFhYWFg4SEhIeTk5OSkoyKiIWFhYWCgoGBgoODg4OCg4KBgYKDg4ODgoKBgIGAgICAgICAgH+AgICAhYWFhYWGh4eGhYWFhISFhYSEhISEg4ODg4OEhYOKkYOEi4WDgoF/foKHhoSBf3+AgICAgISEg4OEhISEhISEhISEhISFhYWEhYSGhYWGhYaGhoWGhYWHhYWGhYaGhoaFhIWFhYWFhIWGhoaHhoaGhoaHh4iIiIaFhYaEhYWGjZSTkpGQi4qHhoeGhIGCgYKDg4ODg4KDgoGBgoODg4KAgYGBgICAgICAgICAf4CAgICHh4eGhoeHiIeHhoaEg4ODhIODg4OEg4ODg4OEhISEgYKCgYmBf39+foWCgICAgICAgH+BgYSFhIWGhoaFhYWFhoaHhoaFhoWFhoeHh4iHh4eGhoaHhoeGhoaGhoaGhYSDhIWFhoSFhYaGhoeHhoaGhoeHh4eIiIeGhoaHh4eRlJORkZCLiIiFhoSDgoKBgoODg4ODgoKDgoKCgoOCgYCBgICBgICAgIGAgIB/gICAf4aHiIeHh4eIiYmIiIODgoKDgoSEhIWEg4KCg4SEhIOBgICAhYV/f35/gH+AgICAgICAgIGAf4WFhoeIiIeHh4eIh4iHiIiIhoaHiIiJiYmIh4aHh4eJiIaHhoeHhoaFhIOEhYaFhYWFhoaGh4eFhoeGh4aGh4eHh4eHh4eFh5OTkY+RkIuHhoWGhIKCgYGCg4ODg4ODgoKCgoGCg4KCgIGBgYCAgICAgICAf3+AgYB/hoiIiIiHh4iJiYmIg4KCg4ODhIWHh4aFg4OFhISEg4GAgIGNiIGAgYKCgYGBgYB/gH9/fnt6gIaIiIqKiYmIiImJiYmKi4qIiIiJiYqLioqIiIeIiIiHh4iHh4iGh4aEg4OFh4eHhoWFhISEhYWEhYWGhISEhYWFhoWGhYOJlJOQj5COioaFhoWDgYGBgYKDg4ODgoKCgoKCgoKCgYGBgYGBgYCAgICAgIB/gICBgH+GiYiIiYeIiImJiIiEgoKDg4KDhImKh4aEhIWEg4OCgICBhISCgoKCgoKCgH9+fX19fX9+fHt8g4eJi4uKioqIiIqJiImLiomJiImIioqJi4mHhoaGh4WGiIiJiIeGh4SDgoSIiIiIh4WCgoGDg4KDg4SCgoKDgoGEg4SEgY6TkpCPj4uIhYSGhIKBgYGBgoODg4OCgoKCgoKCgoGBgYGBgIGAgICAgICAgH+AgIGAf4WIh4eHhoeIiIiHh4SCg4OCg4OFiYqJh4WHhYSFhYKAgYOEgoOCgoKDgX59fn5+fn5+fn1+fX19g4eJioqHh4WGh4eHh4iHh4mGiIaIh4aJiYODhIOFhISFhYaIiIaFg4KCg4WHhoeGhoSDgoOEgoOEhIKBgYGBgYODhIODkZKQjo+Oi4eEhoaEgoGAgYGDg4ODg4KCgoKCgoKCgYGBgIGBgYCAgIB/gIGAf39/gIB/hYaGhYaGhoeHiIeGgYKEhIOChYeIi4qGhIaEgoaGgoKEhIODg4OCgoF9fH1/gH5+fn59fH19fHl8g4aHh4SDgoODhIWFhYODhYSEhISEhIWEgoKDgoSEgYKDg4WGhYSCgYGCgoODhYOEhIWEhIaDhISFg4KDgYKDg4SFhIeSkY+Nj4yJhoSFhIWCgYCBgYODg4ODgoKCgoKCgoKBgYGBgYGAgICAf4CAgYB/gICAgICDhIWEhYWFh4eHh4aAgYGFg4OEhYSHiIWCgIB/gn9/gYODg4ODgoJ/fX1/gICBf31+fn19fX17enp+hISEgoGBgIGBgoKBf36BgYGCgYOAgoGCgoKBg4SAf4CAgoOCgICAgICBgYGCgYGChIODhYSCg4SDgoKBgoSDhYWGi5ORj4+Pi4iFhYOChIKBgYGBgoODg4KCgoKCgoKCgoGBgYCBgYCBgH9/gIGBgICAgH+AgIKCg4OChIOEhYWGhn+BfoCBgICAgIGDgn9+fn5+fYCCg4OCg4KDgn19fn+AgIGAfn19fX19fXx6enqAgoKBf39/f35/f4B+fYB/f4CAgX+AgIGAf4CBgX59fX+AgX9/foCAgH+AgICAf4CCgICCgYGCgYGAgYGBgYKEg4aPkpCOj42Kh4eGg4ODgYGBgYGCg4ODgoKCgoKCgoOCgYGCgYGBgICAgH+AgICAgICAf39/gYKDhIGCgoODg4SFgIB/fH19fn19foCAf31/fn1+gYODg4KCgYF/fX1+f4CAgH9+fX19fHt7e3p6enqAgH9+f39+fn1+f35/gH9+f3+Af4CAf35+fn9/fn18fn+Af35+f3+Af39/f4B/f4B+f4CBf4B+f39/gH9+f4B/hZKSj46Pi4uHiYWEhIKCgYGBgYKDg4ODg4OCgoKDg4KAgYKBgYGAgICAf3+AgIB/gIF/f36BgYSEgYKBg4OCg4OBgH98fn5/fX6Af4B/foF/f4CBhIOCgYB/f359fn5/gICAfn19fXx7e3x6enl5eXuAgH9/f39+fn5+foCAf35/f4CAgoB/fH5+f35+fXx/f4B/fn9/f4B/f35/foCAf36Af39+fn5/f35+fn18fH2Fk5KOjIuKiImIhISEgoKCgYGBgoOCgoODgoODg4ODgYCBgYGBgYCAf39/f4CAgICAgIB/foCBhIOCgYGDhISDhICBgICBgIGAgYKCgoGBgoCBg4ODgYGBgYCAfX19fn5+f359fX19fXx8fHt6enl5eX2BgICBgYF/f4B/f4F/gICAgYGCgoB+gH5/fn5/foGAgoF/f39/gIB/f4B/gYB+f4CAfn9/fn+Af31+fn17fIaTkYyLioeHioiGhoSDgoGBgYGCg4OCg4OCg4OCgoKBgICBgYGAgH9/f39/gICAgICAgH9+fn+BgYGAgISGh4aHgoSDhYOBg4ODhYSEhISEg4ODhIKCgoKCgX5+fX19fn6AfX19fX19fX19e3p5eXl5eYCCgoKEg4GCgoF/gYCBgYGDgoKDgYGCgIGAf4CBg4GEgoCAgYCBgYCAgYCCgn+BgIF/gIB/gICAfn9/fnx8ipOQiomIiIiJiIaGhoSCgoGBgoKDg4ODg4KDg4KCgYCAgICBgYGAf39/f4CAgICAgIGBf359fn5/f39+g4aHh4iChYSFg4SFhIWGhYaGhoWGhYGBg4ODgoKAfX19fX19fn59fX19fX19fX18e3l5eXl4fIKDhIWCgYSDgoKDhYaCg4SDgYKCg4OCgoKCgYKFg4iFgoGBgYKDgYGBgYSDgoOCgoKCgYGBgIF/gIGAf36Ok4yHiIaIh4aGhYaGhIKDgoGCgoODg4ODg4OCgYGBgH+AgYCBgYB/gH9/gICAgH+AgYB/fn19fX5+f36Ag4SHiISGhoaFhoaHh4aHh4iHh4eGf32BgIGCgX59fX19fX19fX19fX18fH5+fnx7eXh3eHl5gIKDf4OMhIOEhISXl4ODhIF9foGCgoGCgYKBg4aIjIWDgoKBhIKEg4KDhYSEhYOCg4OCg4OCgoKCg4OCgpKQi4iJh4mHhoaEhoWEhISCgYKCg4ODg4ODgoGBgYCAgICBgIGBgH9/fn+AgYCAf4CAgH9/fn1+fn+Bf4CCgYWFhYeGh4eGh4eIhoaHh4eGh4V/fX18fX9+fX19fX19fX19fX19fXx7iJKCe3x6fIZ5eHl8gYF+iZaEg4OEhJSTgIGBf39/fn6Fi4B/gICEhpCJhYSCgoGFhYuDgYOFhYaGhIOFhYOFhIODhIOEhISIko6MiYiIiYeHh4WGhYSFhIKBgoKDg4ODg4OCgYGBgYB/gIGAgICAf39/f4CAgICAgYGBf39/f4CAgIGBgYGBg4OGh4aGh4aGiIeGhoaFhIOFhH59fHx8fX18fH19fX19fX19fX18fH+RlZaDe3qElHx4eXp7fICCg4GCgYOCgH59fn57iJF8fI6Wf31/f4KGioWDg4SDgYONiX99f4OEhYWDhYaFhIWFg4SFhYaEhI6Rj4yKioyJiImHhYWFg4ODgYGCgoKDhIODgoGBgICBgICAgYGAgIB/f3+AgIB/gICAgX5+f4GBgoKCgoODgoOCgoWGhISFhYSGhIOEg4KBgIKAfn19fHx9fXx8fH18fH18fX19fHx8e4uRl4x6e3yBenp6e3x5eX19foB/gH98e3t+fn2ClZF/hIh+fH5/goR8fIGChIKAf4eDfYKBf4KCgIODhISEhISChIOEhYGEkpGOi4yMjoqJiYWFhYODgoKBgoODgoKDg4KCgYGAgIGAgICAgICAgH+Af3+Af357gICBenyAgoKDhYODhYWFhYODg4SCgYKDgoOCgoGBgIB/gX5+fX59fHx8fHx8fHx8fHx8fHx9fHx8fn6Kgnt6e3p4ent7fH17fn1+f319fX18fH+BgX2Gj4F+fYJ+fn6Agnx8f3+CgIKAfnx7ioJ9gH9+gYCAgIKBgoCBgYGAf4uUj4yLjo6NiIeHhYWFhIOCgoKCg4OCgoODgYGBgICAgICAgH9+fXx7fHx9f3+AgHx6gYF4e4CCgYOFhIOFhIaHhISAhpSIgIKBgYGBgH9/f39/fn5+gHx8fHx8fHx8fHx8fHx9fHx8fHx8fHl7e3t4eHl7enp8gn+Afn+BfH5+f399gIKCgICAgX+CkYF/f4CAfoB+fn9+gIGBfX19e319fXx9fHx9gH+AgH6Afn6BlJGMjI2OjoqFhoaFhISFg4ODgoODg4OCgoGBgYGAgICBgICAf4CAf39/fXt6fICAgHh+gXd7gIF/gYKCgoKEhoeGhn6IlYp+gYGAf4B/foB+f39/fn+Bfnx7e3x8fHx8fHx8fH59fHt9fHx8e3x8fHp6eXt8en2Fg4J/gYF+f35/gH6FgoF+gH9+foCFhoKAfn6Dhn9+fH6AgIGAf39+fX19fX57fH1/f3+AfX9+gIyRjYyNjo2Nh4SGhoWEhIODg4OCg4ODg4KBgYGBgYCAgYGAgYGBgYGAgH9/f397en9/e3mAd3p/f31+f3+Af4KDhoaFf3+FgX5/gIB/gH5+f31/gIB/f4B/f319fHx9fn18fH19fX19fH58fXx7fXx8ent6fH19f4aEg4CAgX1+fX5/foyEgYZ+fXx8f36CgX99fX19gHx7fXx+gYSDgYB+fn5+fX1/f399foB+fn6Eko2MjI+Ni4mGhIaEhISDg4OCg4KDgoOCgYGBgYGAgYGBgYB/fXx8fH1+f39/f397e399d352eH59fH18fX5+gYGCg4B6fX18fn+Af35/f35/fn+AgH+AgH9/fn9+fn5+fn1+fn99fH59fn1+fHt8fHx6e3p9f4CAg4OCf35/fH18fXx8gYN+jH58e3t9fn1+fn17e3t9fHp7e3uAhoSChIOCf4B+f4KCgn9/goJ/gIuQjYyLjYyKh4SEhIODg4ODgoKCgoKCgoKBgYGAgoGBgYKCf3+AgIB/fn18fH5/fn55fX52e3Z4fXx8fHt9fX6BgICAf31/f31+f39/foB/f39+f3+Af4GBgH99gH9/fn9+fn5/f3yCfn59fX17e319fHp8fH6AgoGAgIB8fH18fHx8fH18fnt/fnt7e3x8fH18e3t7e3x8enp9en6CfoGDhIKBgoGFhoWFhoaHhYGEkY+Ni4qLh4eFgoOEhISEg4KCgYGCgoKBgoGBgYGBgoGBgoKAgYKBgYCAgH9+e3x+fnx6fnh5dnd8fHx7e318f4GAf35/foB/f35/f35/gH9/f39/f39/gYKAfn6BgIB/f39+f39+fYN8fH19fH99fX19e3x+fn9+fn5/fnx8fHx8fXx+fnt8e3x8fHx9fH18fnx9fHt7e3x5e3x7fH16fX5+f4CAg4eJiYmKiIqJhYiRjoyIiYeFhYOCgoOEhIOCgoKBgYKBgYKBgYGBgYKCgoGCgoCAgX98e3p6eXt9enx+fnl8eXh4dHx8fHt8fHx+gH9/f39/gIB/fn9+fX+AgH9/f3+Af4CDgoB/gIGAgIB/f3+Af358enx9fX59fX5+jIZ9fX58e4OCfX19fH18fX19fH1+fH17fXx9fX58fn19fX18e3t6fHt8fHt6e3t6enp7fn6DhYiHiIqLi4uJjZGOjYmIhoWEgoKCgoODg4OBgYGBgYGBgYGBgYGCgoOCgYKBgIGBf3+Af356eHl5en5+e3l6eH5zfHx8e3x8fH5+fn5/gH+AgIB/fn9+gIF/f4B/gIGAgoSDgYCAgYGAgX+AgYKBf39+f31+gH57foGSjHx9f4qAjYx+fn19fX59fX59fHx8fn18fXx9fX1+fX1+fnx7e3t8fH18e3p7fHl6eXh5e35/g4OEh4mKiImOkI2LiIiFhISCgYKCgoKCgoGCgoKBgYGCgYKCgoGCgoKBgoKAgYGAfoCAf39+e3p5e319eHx6f3KBfXt7fHx8fn59fYGCf4GBgX9/gH+AgX9/gIGCgYGFg4SCgYGCgYKBgICBg4KAf4F/fX6Afnx/f4mCf36CkISEg4F/fn18jYd9fX59fXx/fnx9fXx9fX5+fX5/fH19e3x9fnx8e3x9enp5eXl5e3t+foCBg4eEiI6NioqGhYSEg4KBgoKCgoGBgYGCgoKBgoKCgoKCgoKCgoGCgn+AgIB+f39/fn5/ent5fX16enp9cX6Cent9fX19fXp4f4KAgYKCgICBgYGBgICBgoKCgoWFhIKBgYGBg4F/gIKEgX9+gYB9foF+fX5/gIB9fn+EgH5+f31+fX2KhX1+fn1+foB/fX19fH5+fn99f4B9fn18fX9/fHx7fH17e3t6enp7e3x9fn2Ag4CJjYqLh4WFhYSDg4KCgoKCgYGBgoKBgoKCgoKCgoGBgoKBgYKCf4CAgH9/f39+fn59eXp6fXx5d3t0e4d8dHd9fn17e3Z2fYCBg4KBgYKCgoKBgYGDg4OChYaEg4CAgICDgX+AgYSBfn6Af35+gH59fn6AgX+Bfn+Af39/gH99f39/f4CAfn9/gH58fX18fn5+foF/gH2CgHx9gIB9e319fXx8e3x8e3t7fHt8fHx9fIqKiIiFhYWFhISDgYKBg4KAgIGCg4KCgoOCgoKCgoGCgoGBg4J/gIGAf39/fn5+fn57enp8fHt2e3R3f352cnt+fnt4dnd8gIGCgoKBgoODg4OCgoSDhIOFhoOCgX9/gIKAgICAg4F+foB/fX+AfX1+foCAf4J/gYGAgICBgH1/f3+AgIGAgIB/fnx9fX19fn59g32AfoKAfX6AgX98fn59fX17fH58fXx8fHp8e3x9iYaGhYWHhYSFhIKBgoGDgYCAgoKDgoKCg4ODg4KBgYGBgYGCgH6AgYB/fn5+fn5+fn56e3p9goN9dXF6fHpxen59eXh0dICAgoKCgoKDhYOEg4KDhISEhIWEgYGAgH6AgoB+f36Bf35/f4B9foB9fX1+gH9/gYCBgYCAgIKBfn6Af4GAf4CAgH9+fX19fnx+fn19gYR/gH9+f4GBf31/f319fn1+fn1+fHt8enx7eoCHgoSEhYSEg4WDgoKBgYKBgICCgoOCgoOEg4SDg4KBgYKBgYOAfoCBf35+fn5+fX5+fnt7en6Jh354cnl9f3F6eHt4eXV1fYKDgoODg4OFhIWDg4OEhIODhIKBgH+Af4CBfn19foB+fn5/gH19f3x9fX6Af4CAgIKAgIGAgoGAf4B+gIF+gIGAgH9+fn5+fn5/fn6FhYGBgH+Ag4F/foGAf35/f4B/fn17ent6fHt6goR/g4KCgoKChIKBgYCAgoGAgIKCg4GBg4SDhIKEgoGBgoGCgn9+gIF/fn1+fn5+fX59fXp7fIWEe3tzeXp8cHd1dnd5dXR6hISBhISDhIWFhoSDg4WEgoODgoCBf39/f4B9fX1+gH1+f39/fn1+fH19foF/gIB/gIB/gIGDgoGAf36AgH+AgYCBgH9/f39/f4CAgIGCgoKBf4GDgX+Ag4J/f4B/gX+Af3x7e3p8e3yCgH+Cf3+BgIKCgYF/fn+BgH6BgoKDgYGDg4KEgoSCgYGBf4GCgH6AgH9/fX5+fX19fn19e3t6gH94fHZ5eXtxdHh3dnh1cnmFhYKEhIKEhYWGhISChIOBg4GAgIF+f4B/gHx9fX6Afn5/f39+fX98fn5+gX+Bf39+f4B/gIODg4B/f4GBgIKBgYGAgICAgICAgIGAgYKDgYF/gISBfYGDhICAgX+BgYKBfXp7e3x8fH9+f4B9f399fYGAgH59fYB/foKBgYKBgIKCgoKBg4KCgYB/gYKAfn9/fn99fX1+fX19fX19ent7fHZ9eXh5enJ1eXl2d3dzdYaFg4WFgoSEhYSEhIKDgoGDgX+AgX5/gH6AfX19fn9+f4B+fn99f3x/f3+BgIF/f3x+gH6AgYKDgYCAgoOEgoGAgYB/goCAgYGAgYGCg4KBgX+Ag4B+goKEgICCgYKChIJ+e3t8fHx8fX1+fXp+fX14fn9/fHx8fn5+gYCBgYCAgoGBgYGDgoGBf4CAgoB9fn19f319fX59fH19fX16e3p8dnx6d3t4cnZ5e3Z2dnN0hoSEhYSBhISFg4ODgYOBgYOBgIGBfX+BfoF9fX1/f39/gH5+f359fYB/gIGBgX9+fH5/fn5/gYJ/gYGCg4eFgX9/fn6Af4CBgICAgIKCgYCAfoCCf3+BgoOBgYOCg4OFg399fX18e3x8eXp7en55fHl4f357e3t+fX1/f4F/gH6BgICAgoOCgYF/gIGBf31+fH1+fX19fX18fn58fXx5e3x4enx3endzeHd6c3Z2c3SGhISGg4KDhISDgoKCg4GCgoGAgYF9gIB+gH1+fX5/gIB/f35/f3x/f3+BgIGAf359f39+fn+BgH2AgIGDg4N/f359fn5+f4CAgIB/gYKAgH9+gIF+f4CCgoCBg4KEhYaEgH59fHx8fHt5dnl5enl3eXZ+fHt7e358e399gH99fX9/f3+BgoGBgX5/gYF+fX18fX19fX19fXx+jYF8fXl7e3p5fXd4eHR1dXhyd3d0doaEhIWEg4ODg4OCgYKDgoGDgn+Bf35/fn+AfX19fX+AgIB/f39/fIB/f4GAgYCAf3yAf31+fn9/fX5+gYGCgn5/fn1+fn5+f3+Af32AgIB+fn1/gX5+gIKBf4KDgoOFh4SAgH58fXx8e3x1eXl4eHh5d3t8e3t7foV9fn1/ent+fn59foGAgIGAfX6BgH59fXx9fX19fX18e32Dgnx8ent7e3p7d3Z4dXJzdnB4eXJ4hYWFhYOEhIOChIKBgYKBgIKBgIF/fn5+foB+fX58foCAgH+AgIB7gH6AgH+BgYB/fYB+fn5/f319fX6AgYKBfn9+fn59fX5/fn9+fH+Af35+fn+Cfn6AgIF/gYOCg4OGhICBfnx9fHx7fXh3e3h1eXd3eXx6e3t9kod9fH13en1+fn19f35+gH98foB/fn19fH19fX19fHt8ent9enp4e3x6ent4dHh1cXJ0cHh4cnmEhYWFg4SDgoODgoGBgoKAgYGAgIB9fn5/gH18fn2AgIGAf3+AgHyAf4B+f4GAf39+gX9+f39+fX18gICAgIB+f35+fn18fn9/f358fYB/fn1+gIJ/foCAf36BhIKCg4WFgoJ+fX17e3x8eXd8eXd4d3d4e3t7e3yFin17end6fH19fHx9fX1/fnx9fn59fXx8fX5+fX18fHt6enx7e3p5enp7enhzd3VxcXJveHdxe4WGhIWDhYKBg4OBgYGBgoCBgICBgH5/fn9/fXx+fYCAgoGAgIGBfX6Af35/gX+Af3+BgH+Af31+fH1/gICAgH9/f35+fXx+f39/f319f39+fn6CgYF/gIB/foGDgoKEg4SCgn5+fHx6fHt7eXt6d3N2d3h5e3p7eXp/fnt7d3p8fXx8fH59fH19fH19fXx8fX19fX99fXx9e3l7fHx7enp6enp6eHN2dXBwcm93dnJ7hYaEhYOEgoGDgoKCgYGCgYKBgYGAf4B/f399fX9+f4CBgYJ/goF9foF+fn+Bf4B/gIJ/gIB+fH58f3+BgICAf4B/f4B+fX5+f4B/f39/gH9/f4J/gICAgIB/gYGAgISBgoKAf39+f3x9fn56fYV+dHx9enp6enx5eXp6hoV3eXx8fHx8fXx8fHx8fX19fHx9fX19fn19fX16eX18fH16enp6enp5c3V1b29xb3d0c3yFhoOEgoOCgYKBgoKCgYKBgoGCgYCAgICAgH59gH+Af4GCgn+CgX+AgX5/gYB/f4CAgn+Bf319f35/f4KAgICAgIB/gIB+fn1/gH9+f4B/f39/gH+AgICAgH+BgICBgYGCgYCAf39/fn1/fnuBk416fH18e315e3p6eHmBgXh5e3x8fXx8fHx8fHx9fX18fH18fn1+fn59fHp8fHt8fXt5enp6eXlzdXVvb3Fwd3N0fYWGg4OCg4KAgYCCgoGAgYGCgYKBgYCAgIGAfn6Af4GAgYKCgIKCgICCfoCBgX9/gX+BgIF/fX6Af3+AgoCAgICAf3+AgH9+fX6Afn2AgH9/f3+AgICAgYCAf4CAgYCBgYKCgICAf39/fX5/fIGGiXx8fnt7fnl6e3p7jn54d3l7fHt9fHx8fHt9fH19fX18fXx+fn5/f358enx9e3x9e3l5e3p5eXN0dW5zcXB4cnV6hYaDg4KDgoCAgIKCgX+CgYKBgoGBgYKAgYF/fn9/gYGCgYKBg4OAgYJ/gYGBf4CAgIB/gX99f4F/gICBgICAf4B+gICAf359foB+fn+Af39/gH9/gICBf4CBgH+BgIGBgoKAgICAgIB9foB9gIOCe35+e3x9e3p8fHyHeXh4eXx8fH17fHx9fX18fH19fn19fX5+f3+Af317fH18fHx7enl7e3l5c3J1bnZycHhxdXaFhYOEg4KCgICBgoF/gIKCgoKDgYGDgoCCgYB/gICCgoKBg4KEhICBgX6BgoF/gICAgH+Cf36AgYCCgICAgIB/gH+AgIB/fn2Af39/f4CAgH+AgH+AgYGAgICAgIGBgIGCgYGAgYCAgH9/gH5/fX59fn57fXx9e3x8eHh2eHh5e3x8fXx8fHx8fX5/f39/fn19fn9/gIGAf3x9fHx9e3p7eXp8eHpzcnVud3FxenF2d4WFg4ODg4KBgYKDgH+CgYSDg4SBgYOBgoKCgYCAgIKDgoCCgoSDf4GAfoKDgICBgICAf4CAf4GBgIJ/f4CCgH9/gICAgICAf4CAgH+AgICAgIB/f4CBgYCAgICAgYKAgoKCgoCCgYGBgYB/f4B/gId+fnx6fXx7fX94d3Z5eXp8fXx8fXt8fH19fn5/gIGAfn1+gICAgoGAfH59fX58d3t6ent5eXNxdW53cHV6cXZ5hYWCg4KDg4KDhISAgIOBhoOEg4GChICEg4KCgICCgoSBgYKBhIJ/gIB/gYOCgYCBgYCAf4GBgYGAg4F+gIOCf35/goGAgIB+gYCBf4CAgYGBgYCAgIKBgYKBgYCBgYCBgoOCgoOBg4OCgYCBgH+AhH19fXx/fXp9f3p5dnp4eXt7fH19e3x9fX19fn+AgYGAgH+AgICDg4B9f35+fn15eXt6enp5c3J1b3dxd3lzd3uFgoKDgoOEgoOEg4CAgoOGg4ODgoKEgYSDgYKAgIKBhIGCgoGCgX6BgICCgYKBgYKBgIGAgICBgoGEgH6Bg4J/foCDgoCBfoCCg4KAgYGBgoKDgoGBg4KChIGAgYOBgYKEg4KEhIODhIODgYGBgYCCf4B/fYB8enx/e3t3fHl5eXt6fX59fHx8fH1+foCBgYCAgIGBgYSEgH2Af39/f357e3t6e3p0cHhyeXR2eHR3e4SCg4KDg4SChIODgYKChYaEgoODgoSChIOBg4CBg4KCgoKCgIKAf4GAgIKBgoGCgoKBgIGBgoOCgoOAfoGDgX9/gYSEgYN/goKBg4KCgoGDg4OEgYKEgoOCgoGCgoOBg4SDhISEhISFg4SCgYOCgoOBgYGAgH58fIB8fHh8eXp5enx9f3x7fHx9fX18fICAgICAgYGBgYKBfoGAgICAf3t7e3p6enVweHd5dnV8dXZ8gICDgoODg4OEhISAgoOGhYWDg4KDhIKEhYKCgYKDg4GCgoKAgYB+gYCBgYKDgoKCgoGAgYKCg4KCg4B/gYKBgICChIODgoGCgoGDgoKDg4SDg4SAgoSDg4OBgX+Bg4KDhYKEhISEhISDhISChIOEhIKBgoGBgHt+gX59eXx6enp9fHyBfnp8fH19fHp7fn5+gIB/gYGAgICAgIGBgIB/fX18fX18dnJ2eHh2dH92dX2Hh4OChIWDg4SFhICChYWEhIOCg4SEgYSFg4KCgoODgYOCgoCCgH2AgIGCg4KCgoKEgoGCgoOEgoKBgICBgoGAgYOFhIOCg4CCgoOCg4ODg4OEg4CCg4KEg4KCfoOBgoSEgoODhISEhIOEhIOEg4WEg4ODgoKAe4CBf3x8fXp6e32AfX9/fHx6fH59fH19fn5/f39/gICAgH9+foCBgICAfnx9fX5/fn18e3h2f3Z3f4SHg4KDhYODhIaEgYKFhoWEhIODhISChIWFgoKDg4SCg4KDgoKBfoCAgoKDgoODg4SDgYKCg4OCg4GCgYGDgn+ChISDg4KEf4KEg4ODg4SDg4SCgIOEg4SDg4KCg4KChIOCg4SEhISEhIWEg4OEhYSFhIOBgoB9gYJ/fXx8e3x8gH19foB+fn1/fnx8fH19fn5/fn+BgYGBgH99fX6BgYB+fn19fX59fX5+f3+AfH2AgYKCg4OGg4SDhoSBgoiHhYSDg4SEhYGFhYWDg4SDhIODgoOCg4F+gYGDg4SCg4OEhIOCg4KEg4ODgoKDgYOCf4KDg4ODgoOAgoWDg4ODhIODhIOAgoSEhYOCgoODg4GEg4GDg4SDg4SEhYSEhIWFhYWEg4ODf32BhIB9fXx8fHx/gX5/f39/fX99e3x9fX19fX5+f4CBgIGBgH59fH6Cf39+fn5+fX1/f39/gICAf4CEhIODhIWDhIOFf36CiouFhISDgoOFgYaGhoOEhISEhIODg4OEgn+BgYODhYSFhIWEg4KEhISFhIODgoSDhYKBhISFhYaEgoCDh4SDg4OFhIWFhIGEg4OGgoOCg4GCgYSDgoODhYODhIWEhYWHh4aHhYWEhYSBf4GDf35+fH5+fX+BgH9+fHx/f358enx9fX19fX5+fn9/gIKBf319fIB/gH5+fn5+f3+AgYGBgYKAgYWFhIOEhIKEg4aAgoWFiomEhISEhIWCh4aGhIWEhIWEhYSEhISDgYKDg4OEhIaEhYSDg4SEg3yDhHuBhHd5g4F9hH5+cnWDgoF2foOFgH2BdYF5g39/f36EhIKDg4KBg4SDg4SFg4SFhoSFhn2EeXx+f4N7hYOAhIOAf319fn5+gYOBfXt/fX6Afn18fHx9fX19fH19f4B/gYJ/fX18f4GBgICAgH+BgYGCgYKDg4KChoSEhIWEgYOEhYOEhYSKiIWFhYOFhYSGhoaDhIWFhYWEhYWEhIWCgoOEhYWFhoSFhIOEhYWCaICFanx7cXF8gXOGc3R0fYKDdXNxg4ZzcHVyc3SDdnt9dYF/goOBgnZ5hYCDgIR/hYSChYWCaHpyc3N8gHKBg36Dg32BfX5+fX6Cg4J8f4F9f4B9fXx8fHx9fHx8fn1+gH+BgX99fX2AgYKBgYGBgIGBgYKBgoKCgoSHhIWEhYSBgoSGhoOFg4aIhoaFg4aGhoeGh4OFhYaFg4KFhoSFhYODg4SEhoaGhIaEg4SFhn1xe4FweXZ+g3+CbnlwdXN8dnl5hnOEg3B2eHF2dHR1cnN0dml/gG5yb3R2bnVsd217c26Ah3ltfXJzdnN2bW53bHB5bHV9f399foGAgX2Af32Af4B/fX18fH19fH1+f32Af4CAfnx/foCBgoCBgICAgYCAgIKDgoKEhYiGhoCChYODhIeGg4WFhYaHh4SDhoeIiYaHhIWGiIeEg4WGhYWEhIOFhIKFhoaFhoWEhoWHdnB0e3BydX+HhYNtdW92b3x1coR5eYd4cXR3bndod3pucHaCcoN+b3p5eW1vbnpvb213fXiGcHF6cHJ0ZoF1fm57eXNveX+Af319gYB/e39+fIB+gIB+foCAgYB+fn9/foF/gH9+fYB9f4CBf4B+fn+BgH9+goOCgoSFh4eEfoeEg4OFh4aEhoWFhoaIhISGh4iIhoeEhoaLiYWEhoeHhYOFhYWEgoWFhYWGhYWGhYZxdXByc29zenl+g3SIdHV+iHZugnKEhnluanJ/cW1zd3x/dXR8hH54cXV3bnl1enF2eHV6eYRxam95eHBreXN6b3p3dnZwgYB/fn5/f356fn18f31/f359gIGDg4CCg4GBhIKBgIGBgH1/f4F+f359foGAfn6BgoCAgYSHhoODhoSFhIaHhoWFhYWGhoiFhYaFh4eFhoSGhomIhYSJi4iGhIaFhYWDhYWEhoaGhoaFg3iLeXKIentwcIWFeIV4eWtzfnl7a3KDh4N6fG17eXl0foB2bm+AgG90fHV3cXl9fW1+dW+DhYZ6gHJye3x1cG96bHN8bneCgYF+fn99fXp9e3x9fX9/fX1/f4KCf4GDgYGDgYB/gICAfn9+f31/fn1/gH58fYGAfn6Ag4iFhoOFhYWFhoeFhYWFhYeHiIaEhoWHhoaFhIWFhYWFhomKh4WEhoWGhoWGhoSGhoaGhoWGh4eHhoaEhoWGh4iHhYeHhoOHhoWFg4SGhoWGhIaEg4SEhoSEgYODhISFhIWEhYSGg4aHhYaEhIaHhoSEhYaEhX13hYSEhIKBgX1/fnt8e357fHx9f359fH59gIB9f4F/f4GAfn5+gH5+f35+fX99fX5/fHt8f358fH+BiYaFhIaGhoWGhoWFhYWGhoeIhoSGhYaGhYWDhIWGhYSGhoaGhYSGhIWGhoaGhIeGh4eGhYeIiIiIhoSHhYaGiIaFiIeIhYeGhoiFhYaGhYaGhYODhYWGhYWDhYSEhIWEhYWEhYWDhoaGhoWEhoeGhISFhoOFhIKEg4OFg4OCfYB/fHt8fnt8fH1/fnx8fn2Af31/gH5+gH99fXyAfX5/fn5+fnx9fX57fHx/fHt7fn+Ih4SEiIaGhoeGhYWEhoaGhoiHhIaGh4aFhIODhIaFhIeFhoaFhYaEhYaGh4eFh4aJiIaGiIeIiYiFhYiFhoeGh4aHhoiFh4eGh4WFhoeFh4aFgoOFhoaEhIOEhIOEhoSFhYWFhYOGhoWGhYWGhoWEhIWFg4SHhYOCgoWDhIF+gIB8e31+e3x7fn59e3x+fX5+fX9+fX1+fn19fH98fn58fYGAfHx8fXx8fH56e3t8foiHgoWIh4eGh4aGhISGhoeGiIaEhYWGhoSFh4OEhYSFh4SFhoaFhoSGhoeHhoaIh4mIhoaIh4iKiIWHiIWHh4WHhoeGh4WIiIeHhYaGh4WGhoSBhISFhoWFhISEg4SFhIaGhoWGhIaFhoaFhYaGhYSDhISDg4eDhIGChISDgYCAgHt7fn18fHx+fXx8fH19fH18fn18fX18fHx8fXx+fXt8gX99fH18fnx8fHp6fHx9iIeChoiHhoeGhoaEhYaFhoWGhYOFhIaFhIiJg4GEg4SGhIaGhoaGhIeHiIiHh4eIioiGh4iHiImIhYiHhYeGhYeGh4WHhoiIh4eFh4eHhoaHhIKEg4SGhYeFhISEhISFhoaGhoaFh4WFh4WFhYeFhIOEg4ODh4GDgIKDg4KCgn+Ae31+fXt8fH59fH19fH57fHx7fHx8fXt7e318e358e3x/fX18fX1+fXx6ent7fHyIh4KGhoaGh4aGhYSFhoWFhYWEg4WChoSDiId/enqChYaEhoaFh4aEh4eIiIiHhoiKh4aHh4eIiYeFiIeGh4eGhoeHhYeGiIiHhoWHh4eGhoeDg4SEg4aGh4WFhISEhYaGhoaGhYaHhoaHhoaEhoWDg4ODgoOGgYN+goKDgIOCf398f35+fHx9f318fX18fXt7e3p7fHx8e3t7fnt8fXt6e358fHx8fX5/fXt6fHp8fImHg4aFhoWGhoWEhIWFhYWFhIOBhYGGhIKEhHyAhn+ChYWGhYWGhYSHh4iIiIaFiIqHhYeGh4eIh4WIhYaHiIaGh4eGh4eIiIeFhoeGh4WFh4OEhoWEhoaHhoWEg4WFhoaGhoaFhoaHhoeHhYOGhYOBg4KAg4WCg36BgYF/g4F/fn5/fn58fH1/fXt9fXx9enl6eXt8fXt7e3t+fHx8fHp7fXx8fHx+fYF8e3t7e3x7iYeEhoSGhIaGhYSFhYWEhIOEgoCDgYWCgYJ/eoSMe4CEhYeGhoaFhIeIh4aHhYWHioeDh4WGhoiGhYeEhoeJhoaIiIeHhoeIhoSGhoaHhYWHg4SFhIaGhoeFhISDhYWGhoeGhoWGhoaFhoaEg4SFgoGCgYCDg4KCfYGBgH6DgX5/f4B8f3x9fX59e319fH15eXp5e319enp7e318fXx8ent9fHx9fH5+gHx7e3x+fXyIh4WGhYeEhoSFhYWFhYODgYOBgIGBhYKAgH9/fXx7gYSFhoaEhYSDh4eGhoaFhIaJhoKGhIaGhoWFh4aHiImGhYiHiIeGhoeFhIaFhYeFhIeDhIWEiIaGh4WFhIKFhYaFhoaHhIaGhoaFhoODg4WBgIGAgIOBg4B8gYB+foKAfYB/gXx/fH1+fX57fn18fHl6enl6fX15enp7fHt8e3t6e319fH18f35+fHt7fX59fIiGhYaGhoSFhYSFhYSDgoKAgoGAgICDgX5+foB5en2Ag4OFh4WEg4OHhoOEhYSChYiFgoSDg4WFhYWHh4aIiIWFiIeJh4aFhYWDhoSFh4OEhoSEhYSHhoWGhYaEgoWFhoaGhoaEhYaGhYWGgoKDhH9+gICAgYCDgHuBf31+gn5+gH6Afn99fX59f3t/fXt6eXp6eXp8fXl6ent7enx6e3t7fH19fXyAfn18fH1/fnx7h4WFhoaGhoSFhIWDhYKBgICAgYB+gIKCfX5/f3t/f4KDg4WGhYSDg4aDgYOEgoCFh4WCg4GBg4SEhIWGh4iHhYWIhomHhYSEhIKFg4SGgoOFhIWGhIeGhYWFhoOEhYSFhoWGhIOEhYWDhYWBgIODf35/gH9/gIN/e4B9fX+CfoCBfX6Bfn5+fX1/e398e3p5enp5ent8eXp6ent7fHp7e3t7fX59fYB9fXx8fYB/fXyGg4WGhoaGg4SDhYKFgYGAf3+AgH5/gYJ8fn9/foCAgoKChIWDgoGChIGAg4KBgISFhYKBf4CCg4OEhYWHhoaEhYeFh4WGgoOCgoOCgoWBg4WEhYaEhoaHhoaFgoSEg4SFhYWDhIODhIKEhIB/goJ+fX5/fn5/hH57f3x8gIF9gYB9foN8fn59fX57fnx7enl6enl6ent5enp6e3t8ent8e3t+fn1/gXx9fHx9f4B+gIaEhYWEh4SDg4KGgoOAgYB+fn+AfX9/gnx9f39+fn+BgYKEg4KBgYKCf4CBgoCAgoWEgoB/gIGCgYOFhYeFhISGhoOFg4WBgoGBgoGCg4GChISEhYWGh4eGhYSDg4ODhIWFhIGDgoOChIODgH+AgX59fX5+fH6Dfnx+fHyBgH6Cf35/gnx/fn19fHx8e3t6enp6eXt6enp5enp6e3x5e317e35/f4GAfX59fX1/gICAhoSEhYSFgoSCgoSCgoCBgH59fn9+fn6AfX2Af35+foGBgoODgoSHgYF+gICBf3+ChIOBf35/gIJ/goWEhYOCg4WFgoSBg4CBgIGBgYKBgIGEg4OGhYWHh4WEhIWCgoKDhYSCgYGBgYCFg4F/foB/fnx9fn18foN9e358fYF/gIN9fYCBf35/fXx8fH17e3p6enl5e3l6enl6ent7e3p7fXx8f3+BgoB+gH+AgH+AgYDKysrKysrKysrKysrLy8vLy8vLy8vLy8zMzMzNzc3Nzc3Nzc3NzczMzMvLy8vLy8vLy8vLy8vLzMvLy8vLy8vLy8vLy8vMzMzMzM3Nzc7Oz8/Pz9DQ0NHR0dLS0tLS0tLT09PT0tLS0tLS0tPT09TU1NTU09PT09PT09PT09PT09PT09PT09PT09PT09PT09PS0tLS0tLS0tLS0tPT09PT1NTV1dXV1dXV1dXV1dXV1dXV1NTU1NTT09PT09PT09PT09TU09PU1NTU1NTU1NTU09PT09PS0tLS0tPT09TU1NTU1NPT09LS0tLS0tLR0dHR0dPHhnNlYFtLWWdVTUZIQD03Nzg5Nzw8PDo8Oz42Oj04PDs6OTg3ODs7Oj87PTs8PD47P0E/QkJBQ0RFREE+PTw7QENDQUBDQ0FBR0hHSUtSwtXS09PT09TU1NTU1NTU1NTU1NXV1dXV1dXV1dXVysrKysrKysrKysrKy8vLy8vLy8vLy8vMzMzMzMzNzc3Nzc3Nzc3MzMzMy8vLy8vLy8vLy8vLzMzMy8vLy8vLy8vLy8vLzMzMzc3Nzc3Oz8/P0NDQ0NHR0tLS0tLS09PT09PT09PT09PS09PT09TU1NTU1NTU09PT09PT09PT09PT09PT1NTU1NTU1NTT09PT09LS0tLS0tLT09PT09PU1NTU1dXV1dXV1dXV1dXV1dXV1dXV1NTU1NPT09PT09PT09PU1NPT09TU1NTU1NTU1NPT09PS0tLS0tPT09PU1NTU1NTU09PT09PS0tLS0tLR0dHSzIxyZ2BcTVllUktHSz87Mzc4Ozg5Pj05PDpBOjs9Nzs8PDo6Nzg6Oz0/Oz88PTw/Pj9BPUFBPkNDREJAQT46Oz9DREFDRERCQklHSEhJTr7V0tPT09TU1NTU1NTU1NTU1NXV1dXV1dXV1dXV1crKy8vKysrKysrKy8vLy8vLy8vLy8vLy8zMzMzMzM3Nzc3Nzc3NzMzMzMzMy8vLy8vMzMzMzMzMzMzLy8zMzMzLy8vLzMzMzc3Nzc3Ozs/P0NDQ0NDR0dLS0tLS09PT09PT09PU09PT09PT09TU1NXV1dTU1NTT09PU1NPT09PT09PT1NTU1NTU1NTU1NPT09PS0tLS0tLS0tPT09PT1NTV1dXV1dXV1dXV1dXV1tbV1dXV1dTU1NTT09PT09PT09PU1NTU09TU1NTU1NTU1NTT09PT0tLS0tLT09PU1NTU1NTU1NTU09PT09PT0tLS0tHR0s+Sd2hfXk9XZ01LRks9ODc2NTk5OTw+OT88RDo7PDc5PD07OTc5Ojw9QDs+PT47PD48PT5BQD5EQ0NDP0E9Ojs9QkNFQ0NEQT9FSEpJSky61dPT09TU1NTU1NTU1NTV1dXV1dXV1dXV1dXV1dXLy8vLy8vLy8rKysvLy8vLy8vLy8zLy8vMzMzMzMzNzc3Nzc3Nzc3MzMzMzMzMzMzMzMzMzMzMzczMzMzMzMzMzMzMzMzMzc3Nzc3Ozs/Pz9DQ0NDQ0dHS0tPT09PT09PT09TU1NTT1NTU1NTU1NTV1dXU1NTU1NPU1NTU09PT09TU1NTU1dTU1NTV1dTU09PT09LS0tLS0tLS09PT09TU1dXV1dbW1dXV1dXV1tbW1tXV1dXV1NTU1NTT09PT09PT1NTU1NTU1NTU1NTU1NTU09PT09LS0tLT09PU1NTU1dXV1dTU1NTT09PT09PT0tLS0dHRmn5nYWJOVWpKSElLPzw6OTM3Njc3PTs+Oj06Ojo4ODo7Ozg4Ojs7PD46PT09Ojw/PD0/QkA/Q0RDRD5APT08QENEQ0JEQkQ+REhJSUtMttfT09TU1NTU1NXV1dXV1dXV1dXV1dXV1dXV1dXVy8vLy8vLy8vLy8vLy8vLy8vLy8zMzMzMzMzMzMzNzc3Nzc3Nzc3Nzc3MzMzMzMzMzMzMzMzNzc3NzczMzMzMzMzMzMzMzc3Nzc3Ozs7Pz8/Q0NDQ0NHS0tLT09PT09PT1NTU1NTU1NTU1NTU1NTV1dXV1NTU1NPT1NTU1NTU1NTU1NTU1dXV1NXV1dXV1NTU09PT09PS0tLT09PT09PU1NXV1dbW1tXV1dbW1tbW1tbW1dXV1dXU1NTU1NTU1NTU1NTU1NTU1NTU1NXU1NTU1NTT09PT09PT09PU1NTU1dXV1dXV1dTU1NTU09PT09PS0tLR0p+DaV9kU1hsSEhIS0A9Nzg0NzY6Oj87RDw8Ojw8OTg6OTo6Ojs8Ojo7OT49Pjk9QDs/QUFCP0JCQUM9Pz8+PEBCRUNDQkBBO0ZJR01MSbLY09TU1NTU1NXV1dXV1dXV1dXW1tbW1tbV1dXW1svLy8vLy8vLy8vLy8vLy8vLy8vMzMzMzMzMzM3Nzc3Nzc3Nzc3Ozc3NzczMzMzMzMzMzc3Nzc3Nzc3Nzc3Nzc3Nzc3Mzc3Nzs7Ozs7Pz8/P0NDQ0NHS0tLS09PT09PT09TU1NTU1NTU1NTU1NTV1NXV1dTU1NTU1NTU1NTU1NTV1NTU1dXV1dXV1dXV1dTU1NTU1NPT09PT09PT09PU1NXV1dbW1tbW1tbW1tbW1tbW1tbV1dXV1dTU1NTU1NTU1NTU1NTV1NTU1NXV1dXU1NTU1NTT09PT09PT1NTU1dXV1dXV1dXU1NTU1NTT09PT09LS0tSjiGxfZlJWakdIR0lBPjM2Njo7PDhDPEJBPjxBPDg5Ojw6Ojw8PDk8PTo7PD09PD89QD9AQT9AQUBCPD4+PzxCQ0NDRkBBQT1ISklOTUeu2NPU1NTV1dXV1dXV1dXV1dbW1tbW1tbW1tbW1tbMzMvLy8vLy8vLy8vLy8vLy8vMzMzNzc3Nzc3Nzc3Nzc3Nzc3Nzs7Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Ozs3Nzc3Nzc3Nzc3Nzs7Ozs7Oz8/P0NDQ0NHR0dLS0tPT09PT09TU1NTU1NTU1NTU1NTU1NTV1dXV1dXU1NXV1NTU1NTV1dXV1dXV1dTU1dXV1dXU1NTU1NTU09PT09TU1NTU1NXV1dbW1tbW1tbW1tbW1tbX19bW1tXV1dXV1dXV1dXV1dTU1NTU1dXV1dXV1dXU1NTU1NTU09PT09PT1NTU1NXV1dXV1dXV1dXV1NTU1NPT09PT0tLWroprY2VSWGhMSkdJQjg0OTQ6Ozo5QDk+Q0U/PDw5OTk9Oj07PDw6PTw7OTw9Ozs/PUA9PT5AQD9CQT5APD05QERDQkFBQj48SEpLTU5IqNnU1NXV1dXV1dXV1dXW1tbW1tbW1tbW1tbW1tbWzMzLy8vLy8vLy8vLy8vLy8rKy8vLzMzMzMzMzMzMzM3Nzc3Nzc7Ozs3Nzc3Nzc/Pz8/Pz8/Pz8/Pz9DQ0dHR0dHR0dHR0dHS0tHV2djY2NnZ2dra2tvb29vZ2dnZ2dna2tra2tra2tjW19fX19fX19jX19fX19XV1dTU1NTV1dXV1dXV1djY19fX19jX19fX19bX2tra2tra2tra2trb3NzX1dXV1dXV1dXV1dXW1tbX1tbW1tbV1dXV1dXV1dXV1dTU1dXV1dXV1dXU1NTU1NTU1NTU09PU1NTU1NXV1dXW1dXV1dXV1dTU1NTT09PT09PS1bqKa2hoUlhlSUlMT0A5OTo0O0E8Nz05QUM+QD89ODo6Ozk9Oz4/Ojs8PDo7PDo7Pj1APT8/P0FAQUE/QTw8Oz5BRENBREA9PElJSk1ORqPa09TV1dXV1dXV1dXW1tbW1tbW1tbW1tbW1tbW1szMz9DPz8/Pz8/Pz8/Pz8/W3t3d3t7e3t7e3t7e3t3S0NDQ0NDQ0NDQ0NDQ0ci5ubm5ubm5ubm5ubq6t6WkpKSkpKSkpKSkpKSnhmBjY2NjY2NjY2NkZGRlhIuKioqKioqKioqKioemuri4uLi4uLi4uLi4uLrR09PT09PT09PT1NTU1ce3ubm4uLi4uLi4uLi5sIqKioqKioqKioqKiouHvebh4uLi4uLi4uLj4+Pi2NfX1tbW1tbW1tbV1dXV1dXV1dXV1dbW1dXV1dXV1dTU1NTU1NTU1NTV1dXV1dXW1dXV1dXV1dXV1NTU1NTT09PT09XDkXFrak5TYkxMVk48Ojo3Nz5DPjg+Oj8/QT0+QDc7Ojs7PTs+Pjo7PD48Oz07PT8+QDw/Pz1AQEBBPj88PjxAQUVCQkZAQD9HSEpLT0ae2tXV1dXV1dXW1tbW1tbW1tbW1tbW19fX19fX19fMzNDS0tLS0tLS0tLS0tLR3uzr6+rq6urq6urq6uvp1dLS0tLS0tLS0tLS0tTEqaqqqqqqqqqqqqqqq6aGhIWFhYWFhYWFhYWFik4MEhISEhISEhISEhIRE0pUU1NTU1NTU1NTU1NPg6ejo6Ojo6Ojo6Ojo6Knz9PS0tLS0tLS0tLS0tS9oKOjo6Ojo6Ojo6OjpZVTUlNTU1NTU1NTU1NTS6ry6+vr6+vr6+vr6+vr6dnX19fX1tbW1tbW1tbW1dXV1dXV1dbW1tbV1dXV1dXV1dXV1dTU1NTV1dXV1dXW1tXV1dXV1dXV1dXU1NTU1NTU1NPUy5h2bGlKTl9NUlVNPjw8Nzs/Qz42Ojc+Pzs9Qj85PDk9Ozw6PD07PTs9Ozs9PD0+PT07QT08QUBBQT08Pzw7QEJDQURFPUFAQ0ZLS09GmNzV1dXV1dbW1tbW1tbW1tbW1tfX19fX19fX19fXzMzR0tLS0tLS0tLS0tLS0d3q6enp6enp6enq6unq6dXS0tLS0tLS0tLS0tLUxaqrq6urq6urq6urq6yoiIeHh4eHh4eHh4eHh41SEhgYGBgYGBgYGBgYFxpOWVdXV1dXV1dXV1dXU4WopKSkpKSkpKSkpKSjqM/T0tLS0tLS0tLS0tLVvqKlpaSkpKSkpKSkpKaXV1dXV1dXV1dXV1dXV0+r8erq6urq6urq6urq6unZ19jX19fX19fX1tbW1tbW1tbW1tbW1tbW1tbV1dXV1dXV1dXV1dXV1dXV1dXW1tbW1tXV1dXV1dXV1dXU1NTU1NTU1NGcenFpSlRdT1JVTkQ+Pzs/QEA4Ojs4PDs8PD86Ozs4Ozk5Ozw7Ojw5Ozs8Ozo9PT0+PUE/Pj8/Pj08PT88PEFBQ0FERTw+QEVGSktNRpPc1dXV1tbW1tbW1tbW1tbW1tfX19fX19fX19fX183N0NLS0tLS0tLS0dHR0dDc6Ofn5+fn5+fn5+fn5+bV0dLS0tLS0tLS0tLS08Wtrq6urq6urq6urq6vq46NjY2NjY2NjY2NjY2SXSInJycnJycoKCgoKCcpWmNiYWJhYmJiYmJiYl6MrKmpqampqampqampqazP09LS0tLS0tLT09PT1cCmqKipqampqampqamrnmJhYmJiYmJiYmJiYmJbr+/p6enp6enp6enp6enn2djY2NjY19fX19fX19fX19fX19bW1tfX19fW1tbW1tbV1dXV1dXV1dXV1dXV1tbW1tbW1tbW1tbV1dXV1dXU1NTU1NTWo3txZElbYE5OVU9AQT89REI+Oz06OTs6PT07PDs6OTg5OTs8Ozw8Ojo7PDo7QD08PTxAQTxBQTs7PEA/PD1CP0RDQ0U8PkJERkpMTEWN3NXV1tbW1tbW1tbW1tbX19fX19fX19fY2NjY2NjNzc7Ozs7Ozs7Ozc3Nzc3Nzs/Pz8/Pz8/Pz9DQ0NDQz87Ozs7Ozs7Oz87Oz87NzMzMzMzMzMzMzMzMzMvJycrKysrKysrKysrKysfCw8PExMTExcXFxsbGxsvMy8zLzMzNzMzMzMzLz9HR0tLS0tLS0tLS0tLS1NXV1dXV1dXV1NPT09TT0tLS0tLS0tLS0tLS0tHNzc3Nzc3Nzc3Nzc3NzdTY2NnZ2dnZ2dnZ2dnZ2djY2NjY2NjY2NjY2NfX19fX19fX1tfX19fX19bW1tbW1tbW1tXV1dXV1dXV1dbV1dbW1tbW1tbW1tXV1dXV1dTU1NTU169/cF5GXmJQUVdOR0ZDQ0lBPz07PDo8OEBCPD04Ojo4OTg7Pzs8PDs7PDw8PD87PD46Pj44PkI8Pj1BPjw+QkBERUNAPD5APkNJSUtEh9zV1tbW1tbW1tbW1tbX19fX19fX19jY2NjY2NjYzs3Nzc3Nzc3Nzc3NzdHNzc3NzczP09LSzs3P0s7Ozs7Ozs7O09TQz87Q09DO0tTV1NDPz8/Pz8/Pz8/Pz8/P0NDQ0NDR0dHR0dHS09PU1NTU1dXV1tbW1tfW1tbX1tfX19fX19fX19bW1tbW1tbW1tbW1tbW1tXV1dXV1dXV1dTU1NTU1NbW1tbW1tbW1tbW19fW2NjY2NjZ2dnZ2dnZ2dnY19jY2NjY2NjY2NnZ2dnZ2dnZ2djY2NjY2NjY2NjY2NjX19fX19jY19fX1tbW1tbW1tbW1tbW1tbW1dbW1dbW1tbW1tbW1tbW1tXV1dXV1NTV1di4gm9XSl9jUlFaS0hBQTxCPT07Oj4+PD4/PT0/Nzk6OTk3OD48PD47Ozw7PDs/PT0+OTs7OT0+P0A+QD07OkI/QkNCPz0+QD5CRUdKQoDc1tbW1tbW1tbW19fX19fX19fX2NjY2NjY2NjY2M7Ozs7Ozs7Nzc3Nzsqfys3Nzc3QuYOEi8fTwJrLz87Ozs7O0KaSxdHSuY++1JyChIrGz87Ozs7Ozs7Ozs7Oz8/Pz8/P0NDQ0NDQ0NDR0dHR0tLT09PU1NTU1NTV1dXV1dXV1dXV1dXV1dXV1dXW1tbV1dXV1dbW1tbV1dXV1dXV1NTU1NXV1dXV1dXV1dXW1tbW1tbW1tbX19fX19fX19fY2NjY2NjY2NjY2NnZ2dnZ2dnZ2dnZ2dnY2NjY2NjY2NjY2NjY2NjY2NfX19fX1tbW1tbW1tbW1tbW1tXV1tbW1tbW1tbW1tbW1tbW1dXV1dXV1dXYwIBuVU9gY1dZW0xMQ0A9PTs9Ojw+Qj5CQ0A9Ojg5ODo6Ojc7Pz4/PDw7PDo5Pzw8PTg5PD9BPj09PUFAPTtBQkBCQz47QD9BQUlHSkF629bW1tbW1tbX19fX19fX19jY2NjY2NnZ2djY2dnOzs7Ozs7Ozs7OzdKpj63Rzs7Ozpu3tqSiwJOerNPOzs7O0qqdrJTNwZSwnLGWuLmvodLOzs7Ozs7Ozs7Pz8/Pz8/Pz9DQ0NHR0dHR0dHS0tLT09TU1NTU1dXV1dXV1dXV1dXV1dXV1dXV1dXW1tbW1tXV1dbW1tbW1tXV1dXV1dXU1dXV1dXV1dXW1tbW1tbW1tbW1tfX19fX19jX19fY2NjY2NjY2djY2dnZ2dnZ2dnZ2dnZ2dnZ2djY2NjY2NjY2dnY2NjZ2NjY19fX19fX19bW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tXV1dXV1dXV18h/b1pTYWVeXVxPSkQ9QD8+Ozc6Pjk/RD5BOTg3ODk7Ozw4OT89PTw9PD47OkE7OTs5OzxDQDw7PT5AQT49QkQ/QkM9PT8+Pz5ISUg/ddrW1tbX19fX19fX19fX2NjY2NjZ2dnZ2dnZ2dnZzs7Ozs7Ozs7Ozs/Inrym0tDQzsqgl36Cw6abr6fUz8/P0MmXmYWlsKagi5HDk31+r7DRzs7Ozs7Ozs7Oz8/Pz8/Pz8/Q0NDR0dHR0dLS0tPT09TU1dXV1dXV1dXV1dXV1dbV1dXV1dXV1tbW1tbW1tbV1dXV1dXW1tbV1dXV1dXV1dXV1dXW1tbW1tbW1tbW1tbW1tfX19fX19jY2NjY2NjY2NjY2NjZ2dnZ2dna2dnZ2dnZ2dnZ2dnZ2djY2NjY2NnZ2dnZ2dnY2NjY2NfX19fX19fX19bW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1dbV1dXV1dfNiHNdWGloXl9gT0lGOkFAPj88PTo2P0JAQzo2NDc6Ozo8Ojk+PD49PTs/PTxBPjw8Ojw8PTw6PEA9QEI+PkFCPUNDPT0+Oz9BRUtIQHDZ1tbX19fX19fX19fY2NjY2NjZ2dnZ2dnZ2dnZ2c/Pz8/Pz87Ozs7SrKWnqdXAvNLHnY+ey9PJipmq1M/Pz8/RpLC9mJuch5261NLNnp7D0M/Pz8/Pz8/Pz8/Pz8/Pz8/Q0NDQ0dHS0tLS09PT1NTU1dXV1dXV1dbW1tbW1dbW1tbW1tbV1tbW1tbW1tbW1dXV1dXV1dXW1dXV1dXV1dXV1dXW1tbW1tbW1tfX19fX19fX19fX19jY2NjY2NjY2NjY2NnZ2dnZ2dnZ2tnZ2dnZ2dnZ2dnZ2dnZ2dnY2dnZ2dnZ2dnZ2dnY2NjY19fX19fX19fX19bW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbV1dXW0JB1W1tqaWFeXVNOSTxDQEE+QD46OEZBP0M6NzQ5Ojo5Ozs4Oz0/Pj49QT08P0A9Pjw8PDw8Oj1AQD8/PT5CQD9AQkA8QD0+QUVLRz9r19fX19fX19fX2NjY2NjY2NjZ2dnZ2dnZ2dnZ2tnPz8/Pz8/Pz8/QzJ2Nl6zQmpfKxZ6ynpbN1q2ZqtTPz8/Pz9DVuZqYnZCfoNLTwKCg0M/Pz8/Pz8/Pz8/Pz8/Pz8/P0NDQ0dHS0tLT09PT1NTU1NXV1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbV1dXV1dXV1dXV1dXV1dXV1dXW1tbW1tbW19fX19fX19fX19fY19fY2NjY2NjY2NjY2NjZ2dnZ2dnZ2drZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2djY2NjY2NfX19fX19fW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1dXV1tKUcl5ea2tqZV1PTEc/RENDQDo9OzxCPD49OTY0Ojk5Ojo5Nzs/QDs8PUA8PEE+PD07PTw/PDo8Q0A+PTs9QD5CPkBBPkA9QD9GSUQ/ZtXX19fX19fY2NjY2NjY2NnZ2dna2tra2tra2traz8/Pz8/Pz8/P07GigJuvyaCjv8qcpYynrdiqmarUz8/Pz8/Q0ZqgoayvkaG516+iqdTQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NHR0tLT09PT1NTU1NXV1dbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1dXV1dXV1dbW1tXW1tbW1tbV1tbW1tbX19fX19fX19fX19fY2NjY2NjY2NjY2NjY2NjY2dnZ2dnZ2dna2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2djZ2djY2NjY2NfX19fX19bW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbSk3BgXnBoZmVaUUhHQkVDQEA3Ojo8Pjo8OTc2NTk6Njo8Ozc8QEA8Ojo9Ojw/Pj08OUA8PDo6OT9APj08PUBBQz9APz5BOz9ARkpCP2LS2NfX2NjY2NjY2NjY2dnZ2dnZ2tra29vb29vb28/Pz8/Pz8/P0M6fkGyclteqo9PSrqa1mJ/Vqpmq1M/Q0NDQ1aeko7uemq2bqdijobrU0dHR0NDQ0dHQ0NDQ0NDQ0NDQ0NHR0tLT09PT1NTU1dXV1dbW1tbX19bW1tbW1tbW1tbX1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tfW1tfX19jY2NfX19fX2NjY2NjY2NjY2NnZ2dnZ2dnZ2dnZ2dna2tnZ2dnZ2dnZ2dnZ2dnZ2dnZ2djY2dnZ2dnZ2dnZ2dnZ2NjY2NjY2NjX19fX1tbW1tbW1tbW1tbW1tbX19fX19fW1tbW1tbX0pNuYFxxZGdkWlVKQENGQ0FCODs/PD07PDw4NTU4OTY4Ozo5PDo+Pzw9PTk8Pz49Ojo+OTw6Ojg+Pzw9PTw+QEFDQT48PDpCRERKRkJd0NnX19jY2NjY2NjY2dnZ2dna2trb29vb29vb29vPz8/Pz8/Pz9G9n8O31pfA09HQ0srSzZeb1KqZq9XRz9DQ0sCdosvFlqbFmKLRnp/J0tHR0dHR0dHR0dHR0NDR0dHR0dHR0tLT09PU1NTV1dXV1tbW1tfX19fX19bW1tbW1tfX19fW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW19fX19fY2NjY2NjY2NjY2NjY2djZ2dnZ2dnZ2dnZ2dnZ2drZ2tnZ2dnZ2dnZ2dnZ2dnZ2djY2NjY2NjZ2dnZ2dnZ2dnZ2dnY2NjY2NjY2NfX19fX19fX19fW1tfX1tbX19fX19fX19fX19bW19GRbF1cb2doYl1PRkBISUdFQDw8Pj48PT48NzU2Ojk2OTs6Ojs4QD86PDw5PD49Ozs6Pzk/Ojs5PT49Pjw7PTxAQ0I/Pz47Q0ZGR0hEWc3a2NjY2NjZ2dnZ2dnZ2dna2trb29vb29vb29vb0NDQz8/Pz8/Pz5V+e6WS1KKa08ySl6ObodirmavV0pem09SkoI+4y5ucm5utx5+h0tHR0dHR0dHR0dHR0dHR0dHR0tLS0tLS09PU1NTV1dXV1tbW19fX19fX19fX19fX19fX19fX1tbW1tbW1tbW1tbX19bW1tbW1tbW1tbW1tbW1tbW1tbW1tfX19fY2NjY2NjY2NjY2NjY2dnZ2dnZ2dnZ2dnZ2dnZ2tra2tra2tnZ2dnZ2dnZ2dnZ2djY2NjY2NjZ2dnZ2tnZ2dnZ2dnZ2djY2NjY2NjY2NjX19fX19fX19fX19fX19fX19fX19fX19fX1tfPjGRWXnBrXGBgTkVITUlJT0M+OkI9PUBCOzU1Nzw6Nzo7Ojo7OT09OTo6OT0+Pz07OT47PDo8Ozk+PD47PD0+QENCPz5BPEFDR0ZGRVXJ29jY2NnZ2dnZ2dnZ2dra2tvb29vb29zc3Nzc3NDQ0NDQ0M/Pz9DR1aeZrcmjqL7KnbGdo7XZqZup2LirocjGpr2Vkaqpq6SexbSkptbS0tLS0tLS0tLS0tLR0dHS0tLT0tPT09PU1NTV1dbW1tbX19fX19fX19fX19fX19fX19fX19bW1tbW1tfX19fX19fW1tbW1tbW1tbX19fW1tbW1tbW1tbX19fX2NjY2NjY2NnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dra2tra2tra2trZ2dnZ2dnZ2dnZ2djY2NjY2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnY2dnY2NjY2NjX19fX19fX19fX19fX19fY2NfX19fX19fYzYZdV2JvZE9dVEtIRlNRS0xBPj1EPD9DRj01NTc7OTY6Ozo8PTo7Pzo6OTg6PT0/Pjs/Oz49Ojs5Pjs9PD0+QURCQD8+PzxAQUVHRURSxdvY2dnZ2dnZ2dnZ2tra2tvb29vb3Nzc3Nzc3NzQ0NDQ0NDQ0NDQ0NO5gL3Tm5bP1LWLkZ/T1LyBu9TOlKDUyo6Tl5Cnz5KQp9e5g7/V0tLS0tLS0tLS0tLS0tLS0tLT09PT09PU1NXV1dbW1tfX19fX19fY2NjY19fX19fX19fX19fX19fW1tbX19fX19fW1tbW1tbW1tbW19fX1tbW1tbW1tbX19fX19jY2NjY2NnZ2dnZ2dnZ2dnZ2tnZ2tra2tra2tra29ra2tra2tnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2NjY2NjX19fX19fX19fY2NjY2NjY2NjY2NfX2ct+WlVqaltMX01KTEpVTEZCPD0/R0ZHS0g9NjU3Ojk3OTo7Ojw9OT45OTo4Oz0+PkE+PTk8PDo9Pj46PTk5Oj9FQUA+PT8/QkBHRURFUMHc2dnZ2dnZ2dna2trb29vb29vb3Nzc3Nzc3dzc0NDQ0NDQ0NDQ0NDQ0cHR0crI0tDUxLjS0tHSwtLQ08fM0tTCr7Cz0NXLvdXS0cLT0tLS0tLS09PT09PT09LS0tPT09PU1NTU1NXV1dbW1tfX19fX19fX2NjY2NjX19fX2NfX19fX19fX19fX19fX19fX1tbW1tbW1tbW1tfX1tbW1tbW1tbW19fX19fY2NjY2NjY2dnZ2dnZ2dnZ2dra2tra2tra2tra29va2tra2tra2dnZ2dna2tnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dna2tnZ2dnZ2dnZ2djY2NjX19fX19fY2NjY2NjY2NjY2NjY19rHd1xSZ2laTlpOTFBRV0VKPz89P0FFTExBPjc3NTs4ODk5Ojs8Pjw+ODo6OTs+P0A9Pj46NTo6Oz0/Ojs5Ojw+QkJAPz8/P0FCR0RDRE683dnZ2dnZ2dna2tvb29vb29vb3Nzc3Nzc3d3d3dDR0dDQ0NDQ0NDQ0NDS0NDR0dDQ0dPU0dHR0dPR0dHS0tHR1NbW1tPS09XT09PV0tLS0tPT09PT09PT09PT09PT09PU1NTU1dXV1dbW1tfX19fX2NjY2NjY2NjY2NfX19jY19fX19fX19fX19fX19fX19fX1tbW1tbW1tbX19bW1tbW1tbW1tfX19fX2NjY2NjY2NnZ2dna2tra2tra2tra2tra2tra2tvb2tra2tra2trZ2tra2tra2tra2tra2tnZ2dnZ2dnZ2dnZ2trZ2tra29ra2trZ2dnZ2dnZ2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjbwXNYVWlrU0xSTlBSWVRGSTw+Qz9BQkVLPj43ODY5Njc4OTk7Oz0/QDw9ODk7Ozs/Pjw8OTU6PT47OTk7PD8/P0JCQT1BPUBBQkZCQkJLtd7Z2dra2tra2tvb29vb29vc3Nzc3Nzd3d3d3d3R0dHR0dHR0dHR0dDQ0NDQ0NDQ0dHR0dHR0dHR0dHR0dHS0tLS0tLS0tPT09PT09PT09PT09PT09TU1NPT1NTU1NTU1NXV1dXV1dXW1tbX19fX2NjY2NjY2NjY2NjY19fY2NjX19fX19fX19fX19fX19fX19fX19fW1tbX19fX1tbW1tbW1tbX19fX19jY2NjY2NnZ2dna2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tnZ2dnZ2dnZ2NjY2NjY2NnZ2dnZ2dnZ2NjY2NjY3LxvVFRsbExLUkpUUlVLRkQ6PkdEREFERjw/ODk6OTY5OTo3PD07PkA9PTc5Ojs5Pjs5OTY2Oj1AQT47PDk6Pj9DQT4/Qj0+QkNFQkFCSrDe2dra2tvb29vb29vb29vc3Nzc3Nzd3d3d3d3d0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0tLS0tLS0tLS0tLS0tLS0tPT09PT09PT09PT09PT1NTU1NTU1NTU1NTU1dXV1dXV1tbW1tbW19fX19jY2NjY2NjY2NjY2NjY2NjY2NjY19fX19fX19fX19fX19fX19fX19fX19fX19fW1tbW1tfW19fX19jY2NjY2NjZ2dnZ2dra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2trZ2dnZ2dnZ2djZ2dnZ2dnZ2dnZ2dnZ2dnY2Ny2a1NbcGtLVVdSXFFXSEQ+PEJKRT1ISj89PDc4ODo1OTg5Njs+PD1APDw1OTk8Oj87OTk0ODw9PUFBPD47Ojw+QD89PkE9PUNGR0I/Qkmq39ra29vb29vb29vb3Nzc3Nzc3N3d3d3d3d3d3dHR0dHR0dHR0dHR0dHR0dHR0dHS0M/U0M7P0tLT0tLS0tLS0tLS0tPT09TU1NTU1NPU1NTU1NTU1NTU1NTU1NTV1dXV1dXV1dbW1tbW19fX19fY2NjY2NjY2NjY2NjY2NjY2NjY2NjX19fX19fX19jY2NfX19fX19fX19fX19fX19fX19fX19fX19jY2NjY2NjY2dnZ2dra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tvb29va2tra2tra2tra2tra2tra2tnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dndsGRTYXJfT1pUV19RUkdCPUVJTEFBTEQ/Pzs5ODg5Mzg2ODY5Pj0+Pz06Njo7Pjs9PTo5Njg6PTtAQDxAPz0/P0I+PD48PEJFSElCPkNJpODa29vb29vb3Nzc3Nzc3Nzc3N3d3d3d3d3d3t7S0tLS0tLS0tLS0dHR0dHR0dPT0bm7zLqbnLrQyNPT0tLS09PT09PT09PU1NTU1NTU1NTU1NTU1dXV1dXV1dXV1dXV1dbW1tbW1tbX19fX19fY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjX19fX19fX19fX19fX19fX19fX19jY2NjY2NjY2NjZ2dra2tra2tra2tra2tra2tra2tra2tra29va2tra29va2tvb2tra2tra2tra2tra2trb29vb29va2tra2tra2tra2tra2tra2tra2tnZ2dnZ2trZ2dnZ2dnZ2dnZ2dnZ3qpfVWBuW1VZUVpeT0xHQ0ZNSUZEREo7QUE7PDg4NjQ4Njk4Nzw/QT89Ojc8Pz48Pz87OjY4OD09QEE9QD5BQD1AOjs6Pj1BRUdKQkBDR57h29vb29vc3Nzc3Nzc3Nzc3d3d3d3d3d7e3t7e0tLS0tLS0tLS0tLS0tLS0tO+wMqaoKKViJGeqpOpz9TT09PT09PT09PU1NTU1NTU1NTU1NTV1dXV1dXV1dXV1dXV1tbW1tbW1tbX19fX19fY2NjY2NnZ2dnZ2dnZ2dnZ2djY2djY2NjY2NjY2NjY2NjY2NjY2NjX19fX19fX19fX19fX19fX19fY2NjY2NjY2NjZ2dna2tra2tra2tra2tra2tra2tra29vb29vb29vb29vb29vb29vb29ra2tra2tra2tra2tvb29vb29va29vb29vb29va2tra2tra2tra2tra2tra2trZ2dnZ2dnZ2dnZ2d6iXFVeblheXU5aUFROQ0NMSUlJRkpEPEJBPDs4NzY3OTc3OTk9P0E/PDo5QD88PkI/Ojg3NzY9Pz9APUBBPz88PTs7OD48P0VJSEE/Q0aX4dvb29zc3Nzc3Nzc3N3d3d3d3d3d3t7e3t7e3tPT09PT0tLS0tLS0tLS0tTIlZyum5m1iX2TjIKBhMTV09PT09PT09PU1NTU1dXV1dXV1dXV1dXV1dXV1dXV1tbW1tbW1tbW1tfX19fX19fX2NjY2NjY2dnZ2dnZ2dnZ2dnZ2dnZ2NjY2NjY2NjY2NjY2NjY2NjY2NfX19fX19fX19fX19fX19fX2NjY2NjY2NjY2dnZ2dnZ2dna2tra2tra2tra2tra29vb29vb29vb29vb29vb29vb29vb2tra2tra2tra2tvb29vb29vb2tvb29vb29vb2tra2tra2tra2tra2tra2tra2tra2tra2tnZ2dndmlpYYW5ZYVdPV01QRUJETElNS0ZJRT5CRDk4ODY3OTc1Njk4PT1BPjo4OT4+PD9APzw1Njc2PD4/PjtAQEA/Pj4/Pjs/PkFCRkdCQENIkeLb29zc3Nzc3d3d3d3d3d3d3d7e3t7e3t7f39/U09PT09PT09PT09LS0tLTz6h+kayPko6MhoCIiYSQo8rU09PT09PU1NTU1dXV1dXV1dXV1dXV1dbW1tbW1tbW1tbW1tbW19fX19fX19fX2NjY2NjY2dnZ2dnZ2dnZ2dnZ2dnZ2dnY2NjY2NjY19jY2NjY2NjY2NjY2NjX19fX19fX19fX19fY2NjY2NjY2NjY2NnZ2dnZ2dna2tra2tra2tra2tra29vb29vb29vb29vb29vb29vb29vb29ra2tra2tra2tvb29vb29vb29vb29vb29vb29va2tra2tra2tra2tra29vb29ra2tra2tra2tna3JJaWWNuWlpSVV5QTDxAR05IUklIRT47SEY4OTc1Nzg3NTg5ODs+Pj07ODlBPj1AP0E+NzU5Njs+QUI/P0BAQUI/Pj8+QUBEQUZIQj9FSozi3Nzc3Nzc3d3d3d3d3d3e3t7e3t7f39/f39/f1NTU09PT09PT09PT09PWtaWaiIuQhYCFi4iBg4qLf4bC1tTU1NTU1NTV1dXV1dXV1dXV1dXW1tbW1tbW1tbX19fX19fX19fX2NjY2NjY2NjY2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2djY2NjY2NjY2NjY2NjY2NjY2NjY2NjX19fX19fX19fY2NjY2NjY2NjY2dnZ2dna2dra2tra2tra2tra2tra2tvb29vb29vb29vb29vb29vb29vb29vb29ra2tra2trb29vb29vb29vb29vb29vb29vb29vb2tra2tra2tra29vb29vb29vb29vb2tra29uIWltnalxYTFpfVkg6TEhMSkpDRUVDQExINzo3Njc4ODU4Nzg5PDw7Ozk4QD89Pj8/PDY3PDQ3P0JCQUBAPz8/QT09P0A+QEBGRT09REuI4tzc3Nzd3d3d3d7e3t7e3t7e3t/f39/f39/f39TU1NTU1NPT09PT09PUxZKCg4WGfYGCfXx5foGCg36k29bU1NTU1NTV1dXV1dXV1tbV1tbW1tbW1tfX19fX19fX19fX19fX19jY2NjY2NjZ2dnZ2dnZ2dna2tnZ2dnZ2dnZ2dnY2NnY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjX19fX19fY2NjY2NjY2NjY2dnZ2dna2tra2tra2tra2tra29vb29vb29vb29vc3Nzc3Nvb29vb29vb29vb29vb2tra2tra29vb29zb29zb29vb29vb29vb29vb29vb29va2tvb29vb29vb29vb29vb29vb2tvZgFpebWhaU0ldW1hKRE1ISlNMR0ZBQD9KQjg7NjY5OTc1ODY4Ozo7Ojw5OD09O0A9Ozo2NTw3Oz1CQEFBPD49QEE9PEA/Pz5CREU+PERLg+Lc3d3d3d3d3t7e3t7e3t7f39/f39/f39/f39/V1dTU1NTU1NPT09PT2LKEkKh9g3l2hIh/e3d5gn5+i67A1dTU1NXV1dXV1tbW1tbW1tbW1tbW1tfX19fX19fY2NjY2NjY2NjY2NjY2NjZ2dnZ2dnZ2dna2trZ2dnZ2dnZ2dnY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2dnZ2dnZ2tra2tra2trb2tra2tvb29vb29vb29vc3Nzc3Nzc29vb29vb29vb29vb29va2trb29vb29zc3Nzc3Nvb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vc1nlcWmxmWFJPYFFSQUhHSkZYTEZAQENDSz87Ozc4ODc2NTc2ODo5PDw6PTs/PTs9Pjw7ODg8OT0/QkFCQzw8P0FCPj1BQkNCREVDQDtDTH3h3d3d3d3e3t7e3t7e39/f39/f39/f39/g4ODg1dXV1NXU1NTU1NPU0ruen3WKeXuIgICChYGDcnOAhYOMrNfV1NXV1dXW1tbW1tbW1tbW1tbW19fX19fX2NjY2NjY2NjY2NjZ2dnZ2dnZ2dnY2NnZ2dna2tra2trZ2dnZ2dnZ2djY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2dnZ2dna2tra2tra29vb29ra2trb3Nzc3Nzc29zc3Nzc3Nzc3Nzb29vb29vb29vb29rb29vb29vb29zc3Nzc3Nzc3Nvb29zc3Nzc3Nvb29vb29vb29vb29vc3Nzc3Nzc3Nvb29vb3dByXV9wZVdLUGNPS0JHQ0pIS0ZBPEE9SFBBOjo3Nzg3Njc4Nzw6OD09PD47QD88Pz07Ojs5Ojk8QEJAQkNAPUFAPz1AQkNDQUBAP0A7RU144N3d3d7e3t/f39/f39/f39/f3+Dg4ODg4ODg4NXV1dXV1dXV1NXU18h4i4V8goh6g4SBfoKCc2l0hYuGkJ3U1tXU1dbW1tbW1tbW1tbW19fX19fX19jY2NjY2NjY2NnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dra2tra2tra2dnZ2dnZ2dnY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2dnZ2dna2tra2tra2tra2tvb2tvb3Nzc3Nzc3Nvc3Nzc3Nzc3Nzc29zb29vb29vb29vb29vb29vb29vc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc29vb297KalxjcWVST1heSz9HTElPS0VAPkFCP0lPPjk6NzY7NzY6Ozc7Ojg6PDw+Oz09Oz48Ojs4OTo4OUFCQkFAQDtAQj06PkFCQz8+PT4/PUZOdN/e3t7e3t7f39/f39/f4ODg4ODg4ODg4ODg4OHV1dXV1dXV1dXV1s6dhpl+f5OTin+CgXx9gnNxm4mAgoOJwNnat7TQ19bW1tbX19fX19fX19fX2NjY2NjY2NjY2NjZ2dnZ2dnZ2dnZ2tnZ2dnZ2dra2tra2tra2trZ2dnZ2dnZ2dnZ2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NnZ2dna2tra2tra2tra2tra29vb3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nvb29vb29vb29vb29vb29vc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3NvfwGNaW21gVlBTU0pETEhNSEk8PkFEQ0ZORDw8OTc5OjY4Ozk3PDk4OTw9OzlAPjpBPzw3NTc7ODpAQUVBPz45PUI/Oz1CQkI6Pj07PT5GTnHe3t7e3t/f39/f39/g4ODg4ODg4ODg4OHh4eHh1tbW1tbW1tbV1tjLioCHhYOXjHh7e3lvfYF1a3ebdHZ7eInHxpiMrdjZ19fX19fX19fY2NjY2NjY2NjY2NjY2NjY2dnZ2drZ2dna2tra2tra2tra2tra2tra2tra2dnZ2dnZ2dnZ2dnZ2dnZ2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NnZ2dnZ2dnZ2dna2tra2tra2tra2tra29vb3Nzc3dzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nvb29vb29zb29vb3Nzc3Nzc3Nzd3dzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3d3d3d3d3Nzc3Nzc4LdjV1lrYlJNVVFMSktGS0ZDQD5CQT9FTT4+PTg5OTo3OTo3NT03Nzo+PDs7Qjw5Pz05NjY4PTk6QEJGQD49PEBCREA9QD9DO0A9PD4/Rk9t3N/e3t/f3+Dg4ODg4ODg4ODg4OHh4eHh4eHh4dbW1tbW1tbW1tfVrYZ6d32rn3l4entzdH+Dfm9xe3l6c3t2k4qFgImkzdnY19fX2NjY2NjY2NjY2NjY2NjY2NjY2NnZ2dna2tna2tra2tra2tra2tra2tra2tra2tnZ2dnZ2dnZ2dnZ2dnZ2dnZ2djY2NjY2NjY2NjY2NjY2NjY2NjY2dnZ2dnZ2dnZ2dra2tra2tra2tra29vb29vc3Nzc3N3d3d3c3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc29vb29vc3Nzb3Nzc3Nzc3N3d3d3d3d3d3dzc3Nzc3Nzd3d3c3Nzc3Nzc3N3d3d3d3d3d3d3d3dzc3OGtYVtebGJSTVZMTUdLS0RGQkI7QT08RUxDQT44Ojk6Nzc5NjY6NTs+QDs9Oz89PD89Ojk5Ojw5PEVDRkA/PkBDQkQ9OT0/QT1CPz1APkdPadvf3t/f3+Dg4ODg4ODh4eHh4eHh4eHh4eHi4uLW1tbW1tbW1tfQmH+Qh4N9eoN2e3Vzenl6kKqmd3JyfoeHh4CAfoKEhJHJzNnX19jY2NjY2NjY2NjY2NjY2NjY2NnZ2dnZ2tra2tra2tra2tra29va2tra2tra2tra2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2djZ2dnZ2dnZ2djY2NnZ2dnZ2dnZ2dnZ2tra2tra2tra2tra29vb29vb3Nzc3N3d3d3d3d3d3d3d3d3d3d3c3Nzc3Nzc3Nzb29vb3Nzc3Nzc3Nzc3Nzd3d3d3d3d3d3d3dzc3N3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3NzhpV9UYm1iUE9TSUhHRkpJSUJBPkJCPEVFREA+ODo4Ozc3Ojc4ODY+Pz07PDk9PDo+PTs6Njc7NjpEQUY+Pz8/PkNBPzs9PT47REM/PjxIT2fZ4N/f3+Dg4ODg4eHh4eHh4eHh4eLi4uLi4uLi1tbW1tbW19jYyH52doN+fnR2eIaCenl1d5yhu6GEgoCAfoeKinx/gYaMnKjO2NjY2NjY2NjY2djY2NjZ2djY2NjY2dnZ2dra2tra2trb29rb29rb2tra2tra2tra2tnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dna2tra2tra2tra2tra2trb29vb29zc3Nzc3N3d3d3d3d3d3d3d3d3d3d3d3dzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3e3t7e3t7e3d3d3d3c35pbT2drXFBRUElDT0pLR0xHSkJAP0FHREBBPDg8ODg1ODk3Njc3QEA/Ozw5Pj04PTw8Ojc4PTk/RENGPkE/QkBDPzw6Pj0/PkVEPz07S1Fj1+Hf4ODg4ODh4eHh4eHh4uLi4uLi4uLi4uLj49bW1tbW19XB3LRueHJze3B6eXaFiIR7eH2AgZiljH98fnuRhZaLhoGDgY6Rvd3Z2NjY2NjZ2dnZ2dnZ2dnZ2dnY2dnZ2dna2tra2trb29va2tva2tra2trb29ra2tra2tnZ2dnZ2dnZ2dnZ2dna2trZ2dnZ2dra2tra2tnZ2dnZ2dna2tra2tra2tra2tra2tra2trb29vc3Nzc3Nzc3N3d3d3d3d3d3d3d3d3d3d3d3d3d3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3e3t7e3t7e3t7e3t7e3t7e3t3d3d6NWFdobllQUUtISlNJTUhNSUtBQz9DRkJBRDo6PDg2NDg4NzY2Nj8+Pjo8OTw7Oj09PDw4Ozw8RERERT4/PkI+Qj84PT8/Q0NCQEE+O0xUY9Xh3+Dg4OHh4eHh4eLi4uLi4uLi4uLi4uPj4+PW1tbW1teslLZ6eHJvd5V7dHuLgHh1bn6Fg3t/hYhyfH2bnI6JioJ+g32Hk5rH1NjY2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dna2tra2trb29vb29vb29vb2tra2tra2tra2tra2tnZ2dnZ2dnZ2dna2tra2tra2tra2tra2tra2tra2tra2tra2trb2tra2tra2tra2trb29vc3Nzc3Nzc3Nzd3d3d3d3d3d3d3d3d3d3d3d3d3d3c3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3N3d3d3d3d3d3d3d3d3d3d3d3d3e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3d7Zf1lgaGxcUUtHR09LTk5PTURGQkg/Q0hEREA6Ozs4NzU3Nzc4NThAPkA7PDk8Ozw+Ojk7OTk7OUZERUI8QD4/PEBDOz5AP0A/Qj8+OjtKVWPV4eDg4eHh4eHi4uLi4uLi4uLi4uPj4+Pj4+Pj1tbX19vKhYR3cXJubniVhHt4hH95dnB4c3eLkY6CdnN9ioaId3d1d4ODfIiIk8Pb2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dra2trb2tvb29vb29vb29vb29rb2tra2tra2tra2tra2tnZ2dnZ2dna2tra2tra2tra2trb2tra2tra2tra2tra2trb29vb29ra2trb29vb29vb3Nzc3Nzc3Nzd3d3d3d3d3d3d3d3d3d3d3d7e3d3d3d3c3Nzc3Nzc3Nzc3Nzc3Nzc3d3d3d3d3d3d3d3d3d3d3d3d3d7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7f0nVZaGlqVk5KSE1OR01EUElGSD9FPUZMREM+Ozs8OTc3OTY2OTU4Pj4/PTs8QDs9PDo3Ozc5OThHREVCPUE9Qj8+QDw/QUE/QEJAPjs8S1Ri1OLg4eHh4eLi4uLi4uLi4+Pj4+Pj4+Pj4+Pj49fX19fEknuJf29sbnV2foSBg4qGfnVybWVtiIaKjoR7c4OHint4e4OPj4GEioqxztrZ2dnZ2dnZ2dna2tra2tra2tra2trb29vb29zc3Nzb29vb29vb29va2tra2tra2tra2tra2tra2tra2tra2tra2tra2tvb29va2tra2tra2tvb2tvb29vb29vb29vb29vb29vb29zc3Nzc3Nzc3d3d3d3d3d3d3d3d3d3d3t7e3t3d3d3d3d3d3d3d3dzc3Nzc3Nzc3d3d3d3d3d3e3t7e3t7e3t7e3t7e3t7e3t7e3t7f39/f39/f39/f39/f3t7e4clsW2pqalNOR0hOT0VIRk1JSUA7RD5ISUA9PDo6Ojg2ODo3Nzk0OD08PT07ODw8PDw4Njc4OTo6RUJFQT9APEI/Q0M+PkNEQUBAP0A8PUtRYdPj4OHh4uLi4uLi4uPj4+Pj4+Pj4+Pj4+Pj5OTX19fZqXaFfnx3bHB3eXh8jH2KhYB3anN0d3p9bot7fnl6foR/gIGDfnh8foeGlrbT2tnZ2dra2tra2tra2tra2tra2tvb29vb3Nzc3Nzc3Nvb29vb29vb29ra2tra2tra2tra2tra2tra2tra2tra29ra29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb3Nzc3Nzc3Nzc3d3d3d3d3d3d3d3d3d3d3d7e3t7d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3t7e3t7e3t7e3t7e3t7e3t7e3t7e39/f39/f39/f39/f39/f39/e3uO9amFpa2lRTkZNTEtKWE1OR0FAQE9BQz9AOzw4OTk5Njg2NjY4NDs+PD07OTY6Ojk6OTU4OTg5OkJERj8+Pj5AQEBCPzxBQD88Pj9BOT5KT17S4+Hh4eLi4uLi4+Pj4+Pj4+Pj4+Pj4+Tk5OTk19fX2sqKhIB5c29tcXN1d4CUeHaAfHWHhXd1cnWgmXp7d3Z5doR0bWxue3iAmouTu9za2tra2tra2trb29vb29vb29vb29zc3Nzc3Nzc3Nzc3Nzc29vb29vb2tra2tra2tra2tra2tra2tra2tra29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vc3Nzc3Nzc3Nzc3d3d3d3d3d3d3d3d3d3d3d3e3t7e3t3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3t7e3t7e3t7e3t7e3t7e3t7e3t/f39/f39/f39/f39/f39/f39/f397js2lpbmloUFBPTExPUk9LU0Y/RURERD48PDg7ODc5OTU2ODY2NzM6Pjs+PTc6Pjk5OTk2Ojo4NzxDRUc/Pzs/PkA9PkE9Oz0+OUFAQDhBTlFc0OTh4eLi4uLj4+Pj4+Pj4+Pj4+Pk5OTk5OTk5NjY2NjauY6AenZ1bmpveHCBfWt0cnZ3hIV5h4d5lY55eXp1d3pza298gHx2fYh8gLLe2tra2tvb29vb29vb29vc3Nzc3Nzc3Nzc3dzc3Nzc3Nzc3Nzb29vb29rb29vb29ra2tra2tra2tra29va29vb29vb29vb29zc3Nzb29vb29vb29vb29vc3Nvb3Nzc3Nzc3Nzc3Nzc3Nzc3d3d3d3d3t7e3t7e3d7e3t3d3t7e3t7e3t7d3d3d3d3d3d3d3d3d3d3d3d3d3t7e3t7e3t7e3t7f39/f39/f39/f39/f39/f39/f4ODg4ODg4N/f39/f4qpqa2hrZFNQT0ZQVFJOSFJLPkREQ0I7Ozk6Ojg2Nzg1NjY4ODg0Oz88Pzw5PDw3Ozo6Nzo6Nzo9Q0JDPUE+Pzw5PT5BQDs8PDtFQD47Q05TXNDk4eLi4uLj4+Pj4+Pj4+Pj5OTk5OTk5OTk5OTY2NjZ1p5vdntveHh2cG50d3BwdHBzb36Jc3qGhY2EenNtcoB6hn1vg5OBdnx9g4a13drb29vc29vc3Nzc3Nzc3Nzc3Nzc3Nzc3d3d3Nzc3Nzc3Nzc3Nzb29vb29vb29vb29ra2tra2tvb29vb29vb3Nzc3Nzc3Nzc3Nzc3Nzc3Nvb29vb29vc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzd3d3d3d3d3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3d3d3d3d3d7e3t7e3t7e3t7e3t7f39/f39/f39/f39/f39/f39/g4ODg4ODg4ODg4ODg4N/f3+KgbWhma2ZVVlJHUFFOS0xMRUJIRUc9OD08Ojo3Nzg2Nzc2NTY3NDg+PD09Ojg6OD46Ozc4Nzc6Oj5DRDtDQj49OD1AQUM/Pjw+RTw+PUJNUF/S4+Hi4uLj4+Pj4+Pj4+Pk5OTk5OTk5OTk5OTk2NjY3MB2doCCfnp4eHBsdXlya399bHNvdGdoaYB/aWl4c2d+iYl4cIKGe3d9foWKvd3b3Nzc3Nzc3Nzc3Nzc3Nzc3d3c3Nzc3N3d3dzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nvb29vb29vb29vb3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzd3d3d3d3d3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7f39/f39/f39/f39/f39/f4ODg4ODg4ODg4ODg4ODg4ODg4ODflGttZm5mU1NJUFlUTEhGTkZGRUJGPTs+PDs5Nzc4NTc5NjQ1NzU4PDs9Pjo6OztAOTs7ODc6OTlAQkE8QUE/Pzk/QEJFQ0FAQEM7Oz1ES01g1uTi4uLi4+Pj4+Pj4+Pk5OTk5OTk5OTk5OTk5NnZ2tmYc3uqhJaCcnR1dn14aGx8d2h4d25rcHR5gIJ3dHyBhIJ9c3CAin94gn95g8je3Nzc3Nzc3Nzc3Nzd3d3d3d3d3d3d3d3d3N3d3dzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nvb29zc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3N3d3d3d3d3d3d3d3d3d3d3d3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e39/f39/f39/f4N/f39/f3+Dg4ODg4ODg4ODg4ODg4ODg4ODg4ODh24tubWdzY1lRTVVbV0hDSUZOS0dCRD8/Qjo7OjY2NzU2NzY0ODc2Ozw7Pj86PDk8Qjg3OTo6Ojk6QUFCQUJDQEE+PT9CQ0NEQUJGOTg9REpOYtjk4uLi4+Pj4+Pj5OTk5OTk5OTk5OTk5OTk5OXZ2drcqHGCtXiRfnNsem6EgXaCfWtoan+DeHZ8dX2FhXRmcHl9d316gIqFe318foC03tzc3Nzc3N3d3d3d3d3d3d3d3d3d3d3d3dzd3d3d3dzc3N3c3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzd3Nzd3d3d3d3d3Nzc3Nzc3Nzc3Nzc3N3d3d3d3d3d3d3d3d3d3d3d3d3d3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e397e3t7e39/f39/f39/f39/g4ODg4ODg4ODg4ODg4ODg4ODg4ODg4eDg4ODg4ODg4tiFb3FrdWFWT1VVXE9ETUY+SkdKRUQ8P0I6PDk4Njg0NTY3NDc2NDk7Ozw7OD47PEE4ODo9OD04Oj09QEBAP0FCP0A+QENCQ0FBRTc2O0RMTmPa5OLi4+Pj4+Pj5OTk5OTk5OTk5OTk5OTk5OXl29ra3Z5sbnNxhY1ybXBuf391hH5rcnZ2enN4gXhzb3VwbWt2fHmFiIB/f392coODsd/c3Nzc3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3Nzd3d3c3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3N3d3d3d3d3d3d3d3d3d3d3d3d3c3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e39/f39/f39/f39/f39/f39/f39/f39/f39/f4ODg4ODg4ODg4ODg4ODg4ODg4OHh4eDg4eHh4eHh4eHh4OLXhW1xb3ZeUldTWlpRSkhDQFFAQkQ8OT9BOjw5NzU3NDU2NjQ3NTY9PDo9PTk+OjxAODo6PDY7OTs+PUJCQjtBQkBDQEBEREM8PUA3OjxFS01l3OPi4uPj4+Pj5OTk5OTk5OTk5OTk5OXl5eXl5dPOxsB+cWxveHt2b3VuanNzbZKGeG50dG5vdIZ/b2twboJ0bXZyfY2DdnF/d3mKgabf3Nzc3d3d3d3d3d3e3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3dzc3d3d3dzc3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3t7e3t7e3t7e3t7e3t/f3t7e3t7f39/f39/f39/f39/f39/f39/f39/f39/f39/f4ODg4ODg4ODg4ODg4ODg4ODg4ODg4eHh4eHh4eHh4eHh4eHh4eHi1oZucG1xYFJZUFdfWUpMTElSP0Q9OTtCRjs6OTc0NTY1NzU0NjY2Pj07Pz45PTk7Pjg9Ozo0ODtAQENCQ0FCRkE/Q0BBQkREOz0+OTs8QkxNZODl4+Pk5OTj4+Tk5OTk5OTk5OTk5eXl5eXl5eW5t7Woc3JscHd6dHd4bXFydXd/hHRyc2xsa3F8bnBudGuBf3GAd32Eg355gHNygYqg2d3c3d3d3d3d3d7e3t3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3e3t7e3t7e3t7d3d3d3t7e3t7e3t7e3t7f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f4ODg4ODg4ODg4ODg4ODg4ODg4OHh4eHh4eHh4eHh4eHh4eHh4eHh49WHcWxqbF5YWlVXYFZWUE9QTD1BOjs8RkE4Ojg3MzY1Njk2NTg1Nz89Oz8+OT04Ozw5PTs7NTo9Q0JCPENDREREQUE/PkJDQzw9Pjg5PENLS2PN0dnh1sjY4+Tk5OTk5OTk5OTk5eXl5eXl5eXltbW2q3J5cm59f3Z1d2hqaGlwb3Zta2tnZWZxdG15gG5teXd2iHhxa2podXV5dHV/wd/c3d3d3d3d3d3e3t7e3d3d3d7d3d3d3d3d3d3d3t7e3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3e3t7e3t7e3t3d3d3d3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f4ODg39/g4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4OHh4eHh4eHh4eHh4eHh4eHi4uHh4ePVhnFwY2lhV1NZV19MUk9STUtAPjg5O0E+ODc5NjQ3Njc6NjY2NDk+Pzo8Pzo/OTo6Nzo9PDk5PEFBPTtBQ0VDRkA+Pj5BRUQ+QEE3OD5GSEpesrW4wbm1u8jg5eXl5OTl5OXl5+fn5+fm5ebm5ra2tbWOfX5weoR1cnZnYmNlbGtyb2ZpbHZtd4Z9hXlsbHd4a3ZwfH14c3V5fHd2h7ng3d3d3d3d3d7e3t7e3t7d3t7e3t7d3d3d3d3d3t7e3t7d3t7e3t7e3t3d3d3d3d3d3d7e3t7e3t7e3t7d3d3d3d3d3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4OHh4eHh4eHh4eLi4uLi4uLi4uLi4eHj1Yd1bl5uY1pUU1hXS1NLSk1SR0E4Ozs+PDk4NzU2NTY2OTY4NjY5Pzw6PT07Pzo7Ozk8PDs5Oj4+Pjs8PUFEQkNBQEBBP0JDPDw9Nzs+REVKXrG1tLW2t7e2y9rJ3uXl3eDi3tXU1tPU4OPg39+2treuh3t/bnmNenJ1bWNobGxtaXR4enF5enqIh4N6aWh9cWRvcXyGgX55e318e4an2t7d3d3d3d7e3t7e3t7e3t7e3t7e3d3d3d3d3t7e3t7e3t7e3t7e3t7e3t3e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t/f39/e3t7e3t7f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4OHh4eHh4eHh4eLi4uLi4uLi4uLi4uHh49aGdmxhb19dV1lcWlJQSEpXTEVHPUA9Ozs9OTY0NjU1NTg2NzY3OD87OT09PDw5OTw6Pjw6OTg+Qjs7Pj5AREBDRUFAQD0/QDw9PTU5PEJHRl2xtbW2uLm5ubq9uMPT0r3BwcC6u7y6u8TMxb/Dt7e3hGl1gX1ndYd5Z3Vxa2t5eHB3fH15bWl3e3h3bml1j4FwbHl4d3d9gXuGgnmAoNze3d3d3t7e3t7e3t7e3t7e3t7e3t3d3d3d3d7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t/f39/f3t7e3t/f39/f39/f39/f39/f39/f39/f39/f39/f39/f4ODg4ODg39/f39/f39/f3+Dg4N/f4ODg4ODg4ODg4ODg4ODg4ODg4ODh4OHh4eHh4eHh4eHh4eHh4eHh4uLi4uLi4uLi4uLi4uLi4ePXhXJrZ3RhW1hYX15TVVVRVUpMRj9JRDs5PTY2NDc3NTc4Nzc3ODk8PDo+PDg8Oj0+OTs8OTs5P0E8PT9DP0FARUJCQTw9Q0A6Pjw1NDlER0dasbW1tre5ubm5ubm3ubm4uLm5urq6urm5urm6u7e3uX9ucHN6b3B/eXNuc3Vsc3Z4cXFwb2tvcX6Bc2mHhIF9dHOHdW11hYmBgHJ2hafd3d3d3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7f39/f3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f4ODg4ODg4ODg39/f3+Dg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4eDg4eHh4eHh4eHh4eHh4eHh4eHh4eHh4uLi4uLi4uLi4uLi4uLi4uHj14lxa2xyW1dXXWBUUVVUUFJPSkNATUE9Ozk2NTM0NjQ2ODc3Nzk6Pjs8Pjs5PDo8PDk8PTw7PT0+PUNEREBDQkE/QD48PkE8OD06NjY6QkpIWLG1tLa2uLm5uLi5uLe3uLi5urq5ubi4uLi6uru3uKx7cnhxf3ZzfnBsbXpyZ29sbW50cHt3d3Jyd3pvhpJ2f3x8enZ5fH9zfYdyda3T393d3d7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e39/f39/f39/f39/e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f4ODg4ODg4ODg4ODg4ODg4ODf3+Dg4ODg4ODg4ODg4ODg4ODg4eHh4eDg4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4uLi4uLi4uLi4uLi4uLi4uLi49eHb2pxalVWV2FbT1FSUE5XSURESUo/Ojk6NzUzNDk1NzY2Nzg4Ojw7PD46PDo6PTw5PDw9Oz09PDs9REdEQ0E8PDw8Pj5AOzg8ODE1OkFGRVautbW1tre4uLm4uLi4uLe4ubq5uLi3t7i4ubq7t7mqcnB4d3x7e4J3aG5xam9qY2lyf21zcn54dHFsanaAeX2AgH91doB1a4qLgHaR1d/d3d7e39/f3t/f3t7e3t7e3t7e3t7e3t7e3t7e39/f39/f39/f39/f4N/e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t/f39/f39/f39/f39/f39/f39/f39/f3+Dg4ODg4ODf4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHi4uLi4uLi4uLi4uLi4uLi4uLi4uPYhm1sdGVWUFxnWE1YU1JRWUVDS1BOOzk4ODc1NTM5NTY2NzY4Nzk+OT0+OTw5OTw7Njg5OTo8QEA9PkBGQEJCQDo+PEE9Pzs7OzYxNjxCR0RQqLa1tba2tre4t7i4uLi4uLm6ubi4t7e3t7e5ure2tIlyd3h9iXxwem99c2hqbGdnbHRscXd0cWx2c3Fxd3FyfHl4g3Z7d2mLkYp9kM7f3d7e3tvY2drZ297f39/e3+De39/f3Nvc3N3e3uDg3+Dg4ODf3t7e39jS397f397e3t/f3t7f3t/f3t7e3t7e3t7e3t7e3t/f39/f39/f39/f39/f39/f39/f4ODf4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODh4eHh4eHh4eHh4eHh4eHh4eLi4eLi4uLi4uLi4uLi4uLj4+Lj4+Li4uPj4+Pi4uLi4+Lk14NoZ3VkVlVkZVdKWllXW1Q9RU1LSD04NzU3NjQzOTQ0Nzc1Njc5PTo9Pjw9PDk7PDk5Oj45PD4/PkFBQ0FFRUQ+OzxBPjw5PDs3Mzc+REhFSqG2tbW1tbW2tre4uLi4t7e4uLi3tra2tra3uLm2traLfXpsbHp/cGx5dm5qaGdlcXp4b2lvb3B1c21zd4Fnb32CgYNyf3lqcHJ6f6ng393Zy8a/vL2/vsLN0tDW3tnc4NfQzcPCw8PH1dfT2dzX1NjX0MfExce9vM/Kz87Y3djO3N3c2t3T0dze39/e397e3t7e4N/f39/f39/f39/f39/f39/f4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4OHh4eLi4uLi4uLf4uPi4eLg4d7W29/Sw8rJx9Hb3OLk4eHg2dre1sbExcTN2trf5OHi4trX3st9aWZxYVleZWFNTFRLUlpMO0hNSEZBPTc2NjUzNDY2NDg3NjU2OTw7Pj46Pjk5PDk3OTs7Oj49PEBAQ0RCR0ZCQT08Q0A9OTw7Nzc3P0RGRkaZtrS1tbW2tra4uLi4uLi3uLi3s7W2t7a3t7i5tba3opdxb29waW50dnFmZWNrbmdvcm1mZ2tygWVvdnyAeGRzj39zaHFyaWVlbm+w39HFv7u5ubm5ubq6uru6vc3Gw8e/urq6uru7u8HCvcHFvby/vry7urq5ubq6ubm6w8XDucDDwby/ube/z8/U3tjc3t/g3tLa4N/f4ODg39/f39/f39/f3+Dg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODh4eDg4ODg4ODg4ODh4eHh4uLi4eDh4uLi4uHa2t3RwsPCu8XT1uDdydPDrrnAsaqrq6uwtLbJ0sXRxLG4v7Srq6usr7S0vMzE1c60tLureGxtbWBdYl9ZS1NVVFFQREBRTUhEPzo3ODU3MzE1NjQ5ODQ2Njo8Oz08ODw5Njo6ODg5NzU8PDw/QEFAQkRDQkE8PkI/Pz09PTc1OD5DRUNAj7a0tLW1t7i4uLi4uLm5uLe1sautr7Oxs7OztLS0tqaei2tue3ZxeXhnY2hfcXdha25vaG99b25ja2lseHdsa4Z+bHB6dm1scG95sca8uru7urm5ubq6urq6urq6urq6urq6urq7u7q7u7y7urq6ubq7u7q6urq6urq6ubi3t7i4t7e2tbW1tbi3u8e+w8XHzcS4wMnH0tzZ2d/e3uDf39/f4ODh4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODh3Nji4uLi4eHh4OHg3tfGxtHQztTe3tPO0t/SuLi8sq2trKysrrG+ua63rKipqamqq6urqqqqq6ysuKyqqqqrq6urra6urq6urryzrayrpHlub21fXl1dVE1SU1xUSkE/UElIPjg5NjgzNzMwNTczNzg1NzY2Ojw/PDg5Ozo6Ojg5OjY1OTs8Pj9EP0NFQkNCP0BAQT9APjw3ODc6QUVEP4W4tLS1tbe4uLm5uLi3t7SurKuqqq2urq6vsLGzs7WjcG5ucm1wg311aWFlaGZkY2Rxc21td25naW1tZXBzb29zcXN8h4F6dX11n7u6uru7urm5ubm6urq6urq6ubq6urq5uLm5ubm6urq6u7q5ubm5ubq6ubm6ubm4uLi3t7e4uLe3t7a2tbW2tra1tbW1tba1t7e3t7rBvrzGycrb3+Dg3tvd3d7h4tDW4uHg4ODg4ODg4ODg4ODg4OHg4OHi0768zNjd3OLg0dnbxL23sLCxsa+zu7uzsLS9s66urq2tra2sq6qqqqmpqKmpqampqqurqqqqqamoqampqampqaqqqqytrq6urq6urq6sraR4aWJxZmFZWlZRUk5cU0Y9QlJEQTc8OzY5NTY1NDU2NTg3NTY1Nzg7Pjw7OTk5Ojg3Nzk3Njg8Oz47RD8/Q0BBREE+P0M9Pjw+Ojo3Nz9DRj54srCztLW2t7i3trKurq2sq6uqqaqtraysrq+xs7S1t4xucnRqaIB5ZmpmZWxdaG5waGxxYmNmcoJ+dmhobGpueoaBhXx4cXF5gK+6ubq6urm5uLm5ubm5ubm5ubm5ubm4uLe3t7e3uLm5ubm5uLe3t7i5ubi4uLi3t7a2tre3t7e3tra2trW0tLW1tbW2trW1tre3t7e3t7e3tre4v8bP0MS+v8DE19e8ydra4OHg4ODh4eDg4ODh4eDb3t7Uzby3tre6wMDJxLfIvrKwsLCwr7Cvrq6ur7Cwr66urq6uraytrKurq6qpqampqampqampqKmpqKmpqampqKmpqKmpqqqrraytra2ur66trK2heWpjbWdiXFhRUFFLVEpCOklRP0E3PDk0OjU2NTQ1NTY4ODY4Njs6OTw9PTs6ODY2ODg6ODY3Pj09PT5BQUVCQkNBQUBBOj09Pz05Ojc9QUc8bKqmqKutsLGwrqupqKqrq6mpqamrrKytra2usLO0tbilgIdvaWdzdGZrcG1qZGxvcm5rbWNrcHyJhG5qbHx4Y3uKfnNqc25rcY+7ubm5ubm5ubi4ubm5ubm5ubq5uLi3t7e3t7e3t7i5ubi4uLe2tra3t7e3t7a2t7a2tra3tra2tbW1tba1tLS0tbW1tra2tra3t7e3t7i4uLe2t7a2uLm4uLe3uL6+uLq9vcfb4OHg2Nnd4eHg3dfKwcPCurm5uLe4uLi3tbS0tLKysbGxsLCvr6+vr6+vr6+vr66ura2srKyrq6yqqqmoqKmppqepqaehpaipqamoop+hoZyip6inqausrK2ur7Cwrq2unXdwbGphY2BZUU1RTFJGQzlNUEU+ODs3Mjc5Njc0NDM1ODg3OTc7OTo9PTw6Ojk3NDo5ODY1OD8/QEI9RENDQ0FDQEJBQDtAP0A/PDw6O0NIPWOopaWlpqioqKenp6ipqqmoqKipqqqsra6wsLCztLW1taWYdn5xZmt4cW9tZmVsaGNsZ2ZpaX11bWlvfXZ5hWZod294b3Fvcninu7m5ubm5ubm4uLm6ubm5ubm5ubi3t7W1tba2tre3t7e3t7a2tba2tre2tbW1tra3t7e2tbS0tLS0tLS1tLS0tLW1tba2tra2t7e3t7e3t7a2tre2tre3uLe2t7i4t7i4uLi4wMXTyry8w83PyMC9urm5ubq6ubi4uLi4t7W0tLSzs7KysrGwr6+vr66urq+vr6+uraysrKurrKysq6ehoJ6gn5udoaGdlpmkpKaon5mZmZmanZ+gn56fpKqtrq+ura2srJl1cGlrY2FeXVVOU0tSREQ4TktHQTo4NTI2OTY1NDczNzc3ODk3OTo7PT0+ODg4NzU6OTk1OD9AQEFEPkZBQkNAQkNCQT88QEJCQD0+OjpERj5cpqWmpqampqanqKenqKioqKenqaurrKytra2ttLS0tbekc311bnONf3JmanFjaW1jaGZobG51aV9jZ3VzdnpuZ3Bwcn56cYihu7m5ubm6urq6urm2s7a1uLm2trW1tra1tbW1tbW3tra3tra2tbW2tbW1tbS0tLa2t7e3tbS0s7O0tLW1tLS0tbW1tra2tra2t7e3uLe3tra2trW2tbW2tra2tra2tra3tra3uLi3uri4uLi3uLi5ubm5urq6urm4t7e3t7W1tLS0s7OysrKxsbCwr66urq6urq+vra2srKuppaSmpqScmZubmpmampmXl5eXl5aZm5iZmJmZm52en5+dnJ6gpKWko6OioqKQdG5jcGFeXltUU1RIVEo/PFFCRkM7ODYzNzo1NTQ4Mzg5OTc4OTc7OTs9Ozc6NzU2OTk4NTg+Pz9ART5CPz9DPzxBQUI/PT9EQT8+PTk9Q0Y/VaSlpqanqKeoqamop6ioqKioqKiqrKuqqaipq7W1tba5o3eKcXKHhnd0cGh5a2JjYWVsaW5zal9jZWNjZWprYmRqbHaXjX6ovbm3tre5u7u6uLWxrKurqq6wrKyrq62tq6uvsLGvr7CytbW2t7W1trW1tbW1tbW2trSvr7O0tLSvra6vsrW0tbW1tbW2t7e3t7e3t7e3t7e3t7Owsra1tLa2tre3tra2tbW1tra3t7e5uLi4t7e3uLi4ubq6urq5uLi3t7e1tbS0tLS0tLS0s7OysbCvr6+vr66vr62oo6KgnJqampqZmZqbm5qampqbmpmZmZiXl5aYmZmZmpycnZ+foJ+goKChoaCgoJ+fi3RuaXRdYGZeUlRLRFRJPUVTSEVCOzo0NDY5NDQ1NzM4ODg3ODk5Ojs7Pz04OjkzNTg5NjM5PT5AP0A6QEJCQkA/QEJCPz0+QUFCPz06PkVDQFGjpqWlp6inqauqqKaoqKipp6ioqKinp6ioqaq1tbe3t7KZtH99kIx1Z2lqbGZjYGNoZW94cGlicXx5cGpmZmRma3NqhYystrKwra2ttLeysLCtrKuqqaiop6ipqampqKinqKipqaeoqqurra2sqqytraysrq6traunpaSnqqyopKOkpamwsbGztbW2t7i3t7W1tre4t7e3t7Kppaasq6ivtLa1s7W3t7a1tbW2tra3t7e3t7a2t7e3t7m6urq5uLi3t7Wxs7S0tLKxsK6sq6yurrCxsK2rqqmqqKijnJqZmJmYmJiYmZmZmZmZmpqZm5ubnJybmZeYmpqcnJydnJ2foKGhoqKioKGgoKCfnop1amtuWVxhVktPREdVRz5PV0hEPTw4MzQ0ODQ1NDgyODk4ODk6Ojw5OUA8Njk6MzY3OTE0PD8/QEBBOkNGRUJBREJDQTo7P0FCQz9APUBEQ0BPo6empaemqKqqqqakpqenqKioqKimpqaoq6uttba3t7e4rbJ1cHuDdmBiaWtiZWZhZGdmfYh5bHKAfXFvcXhjbW5xZo+srKurq6ysra6urK2trKyqp6WmpaWlpqioqKiopaeoqKioqKeoqampp6Wko6KioqOioKKioaKhoKChoaKjpKOjpaWlqLC0s7OzsKuqqaqztLa3trGopaOioaGipKiqqairs7Sxrq6xs7W2tra3uLi3t7e3t7e3t7a2uLe0sa6ppqerrKmnpqWkpKSkpKWnqaajoJ+enZycm5uampmZmJeXmZmZmJiZmpqampqampqbm5mYmpydnZ2dnZucoKGgoaOjoqCgoKCfnp2FdGtsaFdYU0pHTUVITUdAU1dGRz09OTM2Mzc0NTU3Mzg6Ojo6OTw9OjpBPDY9ODM3ODgzNztAPz9AQDpCRUNAQkRDQT87PEBDQkNBQDxBQ0A9TqKnpqanp6mqq6mkpaWlpaaoqKippqanqKmpqrW2tre3t7izc2h7c2JnamtpaWJhZGloXV1tfHJma3J/fHR8bm1zc36gqamrq6uqq62trKusq6mpqKWjpKampqWmp6eqqaamp6enqKinp6iop6WjpKKhoaGhn56en5+fn56foKGho6Wko6OkpKSmp6enpqWkpaampqeqraumpKKhoaChpKWlpaenpaeoqKalpaivtLa3trW1tra1tbOwrKupqa6rqKWlpqampaSkpaWlpqWkpKSkpaKhoaGgnp2bm5ucm5qamZiXmJiYmJiZmpmZmZmYmZmZmZqZmZydnJycnJybnJ+fn6ChoaKgoKCfnZ2cgHNrbmReU0pITUZETEtFRFFTQ0c9PDgzNjI4NDY0NjQ4OTg6Ozk7Pjw5PTs5PTczNTk2NTY8QD0/QD88P0JDPkJCQj89Pj5CQ0FFQD86PkVAO0+jpqWkpqeoqaelpKWlpKWnp6eoqKanp6alpqa1tba2trW2uYptcW1vfHxxZ2pmYGFsYFROW2hqbm9tgYJ9cWdxdn6aqKeoqqmpqqurrKqqqqimpaWkoqOlpqalpaWmqaqppqWjpKWmpqSjo6KioqKhoJ+fnp6cnJycnJ2dnJ2en6CioaKjo6KhoqKkpaSioqOjpKSjpKSko6Ggn6GipKanp6ipqaelpaSipKSlqK2wsKyrqqusqqmnpaWmpaWlpaalpqioqailpaWkpKSlpKOjpKOioaGhoqKgnp2cnJubm5qZmJiYmJmam5mXl5eWlpeXmJiZmpqcm5qampubm5ucnJ6goKGgnp6enpycm356bnJiXlNNSlBFRk5NQkBPRT5JOz01MzYzODM2Njc1Ojs4OTs5Oj49Ozo5OT03NjY5NjU2PkI+PkE/PT5DQT5DQ0BAO0BAQkJCRUA+Oz5FPzxQoKSjpKOjo6SkoqSlpaSlpqamp6empqalpqaltLW1tbS0tbiBaHx9ZXOCemxwdWFfY1ROT1FbaGxpbGxxbW5xbnScoqSnqKioqauqqqqqqaempaSjo6OjpKSlpqalp6ytqaShnp2eo6Shnp6foKCenJ6dnJycmpqam5ucnJubm5ydnp6foKChoJ+goaOioKGjpKSjoqSlpaWkop+go6SkpKapqainpaGdnJ+jpaipqainqKioqaempaWkpKSlpqampqampqenpaWko6Ojo6KioqGhoqKhoqOkop+enZ2cmpubmpqZmJeXmJaWlZSUlJWVl5iYmpubnJuampqam5ucm5ucnp+fnpucnJyam5p/fnF0YFtUTUdNSEZMSj8/TkM8QDs8NDM4Mzc0NzY3ODs9ODo6OTk7PTs7ODk9Nzc4OTU4OD9APT9BPjs9RD89REA/PzpAQUE/QUVAPjw8Qz88Tp2ioaKioKCipaSkpKWlpqenp6empqampaampbW1tbS0tLS3jHalsXdmc3Jvc2xjZGlYT1JRT09dgG1kYFptkZGSoqKjpaampqenqKiop6alpaSjoqGhoaKjpaempqesrKemoJ2cm6Ghnpuamp2cmZiam5qampmZmZubm5uampqampucnZ6goaCfnp+hoJ6foqOko6Omp6inqKWioKGhoaGkpaWlpKCcmZmbnqOmpqampqanpqempaOlpKWlpqiop6enpaWlpaWkpKOjo6KhoqKioqKhoaKjo6Kgn56enZybnJubmZaUlJSTk5OTk5SUlJWWl5qam5ubm5qZmZqanJ2dnZ2dnZuampqamZqXf3dvc11aTkhKTkdFRklERU5APD09PDQ1OzQ2NDY1Njc5Ozg5OTg5OTw7PDc6Ozc4ODg1ODg/Qj9BQTw+P0A8PEJAQT49QT4/Pz1CQUA6OkA8PE+doqGfoJ+dn6OkpKSlpqeoqKenp6ampqampqW1tLS0tLS0tbSXtqd1Znh2Y2xjY2VjW1JTU1JNXqCMeFhodpajnp6hoaOjo6OjpKSlpqalpKSioaGko6OjoqOlpqWmpqenpp+bmpuioJmWlpWam5qXl5iZmpqYmJqampqbm5qZmZmenZ2goqOjo6KkpKWinqGhoaKjpaampaSjoaCgn5+hoZ+goJ2amJeZmpygpKOjpKWmp6alpaOjpKSkpKWnp6ampqampaWmpKOjo6SjoqKjpKGfoKGhoKGgoaCfn56dnZyamJeVk5KSkpKSkpOTkpOUlZaZmpqbm5qampqbnZ6enp2cnJybm5qamZmZlH10bHReWk9IRUdGQkVORT9GOzo+Pzs0Njo2OTM2NDY4ODo4OTc4ODo8Ozw5Ozs6OjY3ODk5Pj9APjw9QD5AOjlAQT89QT8/QUE+QUE/Ojk9PjpQnaCfnZucnJufoqOlpaWlp6iop6ampqanpqantLS0tLOysrGwsK2rkHiGj36bmn93Yl1TUlFRTGKgootaiKCgn52YmZycnZ2eoaGgpKenpqWkoqGjp6alpaKipaampaanpqagm5mboaCXk5OSl5qcmpeXl5ibmpmampqam5qYmJmaoKCgoKGfoaKipKamop6gn5+goaOko6Khn56enpyanZuZmpqZmJeZnqChoaKioqKkpaWmpKSkpKKioqKkpaWlpaWlpaalpaOko6KioqGgoKGgnp+fn5+fnp+foJ+cm5qZl5WUlJSTkZCRkpKSkpKSk5SVl5iZmpmZmpqam5+fnp2cnJycmpmZmpiXl5F8cmdxXl1QRj9BRD9KT0JCRjhDRT4+OTg7Nzc0ODQ1OTo6Ozk3OTo8Ozo8PT48PDo2NzY5OD4/QT47Pz49PDg6PkFAQUE/P0FCQERBPjo4PkE8U5ycm5uampycnaGio6KjoqSmp6alpaampqSjo7KysK2rp6amp6alpqiln6iop6qnoXmEXFFST0xcnKCAYpmgnp2clZOVlpeZmp2dnqGmpqampKOioqanp6ajpaampaWmp6amop2cnqGfl5GRkJSXmp2YlpeWmJuZmpqampqZl5iam6Ghn56fnpybnJ6goJ6dn56fn6Cio6SjoqCfnp2ZlpeXl5iYmZubnqKioqKioqGio6WlpKOio6SioaGhoqOkpKSko6SkpKSioqKhoqGgn5+gnp2enp2dnZ2dnp6em5mYl5WTk5SUk5KQj5GSkZKSkZKTlJaXl5iYmZqampyenZ2dnJubmpiYmpmXlZaNempmamBiTkY+P0A9SkVAQ0A7QEE8Ozs5Ojc2NTg0Njc4OT04ODs6Oz87Ojs8Ojk6Nzc2ODs8Oz08Ojo8PTw3Oz5DQkRDPz1BQ0FEQT88OkBCO1eZmJqamZmam5ucnp2foqKhoqSlpKSlpqSioJ6op6alpqWlpaemp6ampqakpaanqKehqXJOUU1KVJahenKanJyenJeVlJWWmJiXl5qeoqKhoqOkpKOjpaalpaanpqSlpqalpaOgoKGhn5mSkI+WmpmenJaXl5eZm5ycnJqamZeZm5uen52cnZyZmZqcnZydnp6fn5+hoaCgoaKgn56bl5WVlZeanZ6fn6GhoqKio6OhoaCgoJ2cnaGioqOkpKOioaSlpKOko6SjoqKioqKhoKGfn52cnZ2cnJ2dnJ2enpqXlpaVlJOTkpKSkpCRkpKSkpGSlJWWl5iYmJiam5ycnJycnJ2cm5mYmZiWlJWXi3hsY2RiZFFHQT1DO0tIRDo7Ozw+OTo6OTo3Mzc5NTo4ODg8OTg7OT09Ozo7Ojk8PDc2NDc/PDo9Ozw/Pjw7ODxBQ0FDQkI+P0NAQkFAOj9APztZmZiampqam5ubm5ydoKGhoaGhoqKioqKhn5+dpKWmpqenpaWmp6ampqWkpKalpKSkpaaGUFJQT0+PmHB6mpubnJ6cnJycm5ubmZiYm56dnp6foKOkoqGhoqKio6SkpaalpKOjoaGhnpyalZOUmJuam56amJiYmJqcnpyam5iWmZybnJycnJydmpqbnJ2dnp6dnp6fn52cnJyhoaCblpWVlZacoKGgn5+hoKKjoqOhnZuZlpaWlpicnqCip6ikoaCgoqOjoqKioKCgoJ+fn5+gnp2cm5ucnZydnJmanJuWk5KSkpKUk5KSkpKSkpOSkpKRkpSVlpeYmJiYmZqcm5qbm5ucnJqZmJiXlZWWl4d3ZGdoZGJNQ0U8RDlJSkU5Ojs9PTo6ODg6NjQ3OTU8OTY4OTc5PDs7PDo6PDs6PDw4Nzg3Pj07Pj46Qj86Ojo/QURCQ0FBQD9EQUFAPjpAPj06W5qYmZqbmpubm5uen6CgoaKioKCgn5+enp2dnKWkpaanpqWlpqakoqKio6Oko6Kjo6KnllRYVVJOZ21rgZ6am5udn6Cgn56enp6dnJ2dnJ6enp+goaCfn6CgoKGio6Ojo6OkoqGgnpuZmZiZmZmZmZienpiYmZmam5qWlZeWlZicnJ2cm52dnpybnJ2cnZ6bmJqeoaGdm5udoKKhmpWVlpaZoKKgnZueoKGjop+em5eXlJKSlJeYmZ2goqenpaGgn56goaGioaCfnp2cnJubnJubmpqZmpydnJmXmZaVk5GQkJCPkZKSkpKSkZKTk5OTk5OTlJWWlpeXl5manJubnJucnJqamZeXlpaVlZSEcmZsYmRbREJMPT84RktCPEA+Pj05Ozk6PTg1ODg2Ozg1Njo4PDw7Ozw8Ozk8Oj09OTU4Nzw5PD88OkE/Ojo6QEBDQkRBQ0A/Q0FAPj08QD09Ol+al5mamJeYmpycn5+foaGhoJ+fn56foKCenZ2lpKSko6OioqOjoZ+foaGipKOio6SiradXXl1UV19ua42dmpqbnJ6dm5ucnZ+enZycnJydnZ+goKChoaGgoKGgoKGioaGhoZ+enJuampqbnJqZmpuZnJ6ZlpaWl5eTjo6QlJabnJuam5udn52cnJycnJ6dlpSZnJ+in5ycnZ+hoJuXl5mZmpycnJubnZ6fnZqXlpaWlJOTlJiampqfoKGmpqWgn56fnqChoaCenJubnJybm5ybm5qZmJmZmZmXl5iVlJKQkJCQj5CSkpKSkZGTk5aYl5STkpSVlJWWlZaZmZmam52cnJyampmXlpaWlpaQgG9vZV5gV0BKSDg/N0lFP0VBPD07Ojo8Ozs3NTs4Njs3NDY6Oj47Oj0+Pj07Ozs+Ozo4Ojk5NkBBPTo8PTo6OT9BQ0JERUM+P0FBPz8+Pj89PDtgl5WXl5aVl5mbnqGhoKGioqCenp6enqCgn52bpaWkpKSioKCfoJ+dnZ+hoqOjo6OkobCjXWVkYGFua4GenJubm5ubmZianJ2enJubm5ycnJ6ipKGeoKGhoqKhoKCgoaGgn5+enJqZmpubm5ybmp2dm5manJiXlZWWkY6Nj5KYnZycm5ycnqCdnJucnJyempWVm56foZ+dnJyenp2cmpqampqampqbm5qXl5aTkpWVlpWTlZaam5qanZ6foqWjnp6fn5+en5+enZ6fnZycm5qcmpqbmpiZmJiYmJiYlZSTkZCRkJCQkZKTk5CRk5SYmZiVk5SVlZWWlZaXmZmXmZqenpyamJiXl5aWl5eYjX1ubV9lVlRFSzw3PjdSRUM+QkE4Ozw7OTg6ODY7Nzc6Njc5Oj0+Ojw8PT49PD06Pz06ODw9OTtAPj4/PT45ODs/QkNAQ0VDPT9DQj5AQD5APTw8YZWSlJWWlpeanJ6goKCgoaCgnp6enp6gn56em6WlpKSioJ+fnp2dm5mbnJydnp+gn56rmGNpbW5pZm2enZybm5ybmpmZmZqam5ucm5uam5ygo6SgnZ6en6CgoKCgn6ChoKCfnpuamZqam5qbm5ufnpyZmJqamJiYmJKOj5OXnJ2bnJ2cnJycnZycnp6dnpqVl5ygoaGfnp2eoJ+cnJuampqbmpqYmpmVk5OTkpOWl5eVlJiYmZucnJydoJ+gnp6enp+fn56en6KjpKKgnp6cm5qampuZmJmZmJeXlpWUlJORkZCQkZKTk5OSkpOUmJmYlpWUlZaWlpaWl5iYmJiXmZqamZeXl5aXlpeWl4l4dmddX1dURUU5OTs8WT5AOEI/OTw8Pjk4Ozg6Ozc5OjU4OTs9PDk9Oz0+PD0+Oz8/Ozk+PDw+Pz5AQUE9ODc7QkNFP0FFQz1AREJBQEQ7Oz47PGKWk5SUlpWUlpiYmZubnJycnZ2cnJ2en56dnJqkpKSkoJ+enpybm5qZmJiYmZucnZ6cpolla3R4bVuFop2dnJydnJqbmpqampydnZ2bmpuboKKinpucnZybnJ2enp2dnZ2fnpuampucnZybm5ycnp6cm5qanZqam5yVkZOXm52dnJ2fnZycnJycnZ6fnp+cl5idn6GhoJ6cn6CfnJubm5qbmpmZmZmZl5WWlZaYl5eXlpaYmZuenp2dn6GhoJ+fnp6fn5+dn5+hoqKhoZ+fn5yZm5qcnZuampmXlpaYl5eXlpWTkpGTlJSTlJSUlJaZmJaVlZeZmJeYl5eXl5eYl5iXl5eXlpaYl5eVl5eDeHZfW11eUT1GOjk4P1VDQTtDQzo8Pz86Ojk3Ozg4ODc0ODk8Ozw4Ozs8PTo9Pjo/QT06PTw+PkA/PUBBPjk2PERDRUBBRUU9PkVERD9COzo8OTpkl5SVlZaUlJSUlJWXmJiamZqcnJydnp6dnZybo6Oko6CenJuamZqZmJiYmZiam5ubm6WJa3F2em9lmp+enp2dnJybnZ6dnJ2enp2dnJydm5ygoJuampubmpudnJqampucnJuamZycnJ2dnZ2dnZ2dnpybmp+fm5ydm5mZmZudnZ2dn52dn5+dnJydn5+fn5uanZ+goJ+dnJ6gnpubm5ubm5yampuamZudnJqZmJeYmJiYmp2foKCgoJ+hoaGgoJ+en5+fnp6foaKhoJ+enp+enJqam5ubmpqZlpaXmZmYmJiWlJOUlJWVk5OVlZSVlpWVlZSYmZuamZaWl5WWmJiWl5OUlJGRk4yRkJOWfXhqYWJiXFA8QDw2OENWSERCOjg7Oj47Nzc5Nj06OTk2NDc6Ozw9OTo6Oz87PT08QD47Oz46PT89PkBBP0A8NztBQ0U/P0REPj9EREM+Qj07PDs6Z5aTk5OTk5OTlJSVlpeWl5aWl5mbm5ybm5uamaOjoqCfnpuamJeYl5eXmJmYmZybm5qkgGpqb3lzcZegnp2dnJydnp6enp+enp2cnJydnp2bnJuampqam5ubmZiYmpqamZmZmZqdm5ydnZ2dnJ2cnZ2cm5qdn5ucnJubnJubnZ2dnJydnp2enZydnZ2cnJ2dm5uenp6dnZybnpubnJycnJydnJubmpmbmpmYmZmYmpmZmpyfn5+jpaKfoaKioaGfnqCgn5+fnqCioaGhn5+fn52ZmpudnZqZmJWWl5aVlZaTkpOUk5STkJCSk5GUkY+OkJGOlZabmJWYlJmXlJiRjJCPk5yTkoyFjIeDhndxZ2pkW1xRQT44NkJHYEJFR0A+Ozw7Ojg4NjU8ODo4MzQ6Njk9PTk5Ojs9Ozw6PD48Oj5AOj5APjw/QD8+PDg6Q0FEPz5CRD8+Q0VCPUJAPDw8OmeYk5KSk5OSk5SVlJWXl5aWlZaXmZmZmpqampqkoqCfn52bmpmYmJiXl5iZmJmcnZ2cqH1nZXN7enOJop+enp2dnp6enZ2enZ6enp2dnZ6cm5ybmpubm5ucm5iYmJmZmJiZmZibnZycnZ6enp6enp6dnZybm52bnJybnJ2dnZ2dnJ2dnp+fn52cnZ2dm5qbnJmZnJ2dnZ2dm5uanJ2dnJycnp2dnZybmZeVlZeXmJqam5ubnZ6foqOhoKGhnJucm5ubnZqcmZycn6CfnZiZmZmUkpKUl5SPj4+OkYyNiYuQi4mLjpGRj4mQmJiQkoyNi5KQj5iYoqiqpqWlrKOmoZqep6eyqKKVo6Cfl39wcWlsXFtcTUY8NzdHR1g+SE5URjk+Ojg5ODc1PTk4NzMzOTY6Pjw6Nzo8Ozo6Ojo8PDs/PjtAQD47PT5BPDw2N0A+QkA+QUY+PEFEQT1DQj49PDlmmJSTk5OTkpOUlZOVl5iYmJaXl5iZmZqampqaoqGfnp2cm5mYmJiYmJiYmZmZm5ybnKx/am16f3lxh6Genp2cnZ6enp6enp6dnp2dnZ6enJubnJubm5ubm5uZmJiYmJiYmJmZnJ2dnJyenp6enp+fnp6dnp6dnJydnJ2dnZ6fnZ2fn56goJ+enZ2dnZybnJ2em5qbm52enZ6dm5ubnJ2cnp2cnZqYl5SRjo+QkJGVmJSWlJiZmpudmJuYlY2Mjo6TkpKRj4mQjpGRjo+Ki42NjYiIi4+Lg42NkY+MkI2Qk5WVnJihoJySn6SipKmam5eanKOprb3Bwbq8uL26ucC8ubq3uru7tL2zwbV/bnVmZ1peWUxJRTo7TElTPFZSSUM6QTo7Ozc3NTo6OjgyNTY4Oz08OTk7Ozw5Nzo4Ojw6PT85PD8+PDw9QTs5NTg8O0A/QT9EPTxBQkA8REM9PT06YZOTkZCUlJOTk5OTlJeYlpeZmJmYmZqbmpqamp+gnp+fnJqZmpqampmYl5iZmZmZmZmphXB1e4B3b4mhnp6enp6fn56en56fn56dnp6fnp2dnJ2cm5ubm5ubmpiYmJiZmZiam52cnJ2dnp2dnp6goJ+enZ6hoJ6dnp2enZ6fn56en6CenZ6enJydnZ2cm5qYnJuVmJqamJiYmJmSjJCXlKCXk4+MjYqKiImMiJORh5CPjYqKkJCLjoqMi4+IiImJjpGOjYaFiYaKhoWLiI+SkJCNkJKXlpKamJ2TlJ6kpqaqq7Gsr6+rpquqsbm5tbS0rqyvtMDIxcXBvsbDxMTDurW+t7a0s7C2tb6qcHRyXGZfXl1JRj8/RUtMVklcTEQ/PUI6Qzk5Nzc7OTk3MTc5ODo+ODg6PDw7OTc5OTs9Oj4/OT5BPDs+PD46OTY5PDpBPkNBQT08QkBAPkJEPj8+OVyHhIOHi42KiYaFgYqMkZOVmJiHlZaWkpiampmenZ+gn52ampubm5ycm5iWmJmXl5ibqo56dXZ7f3mCoJ+fnp+goKCfn5+foKCfnp2dnp+enp2dnJqbm5ybm5uYmJiXl5iZm5ucnJydnp6enpybm52dnZycoaGfnZ6dnZ2dnp2dnJiWlpaYlZWSlpmWk5GKjI+PjI+NkIuLj4+WiYiEi5GZjn2Fi42PjYyHioyQm4yRj4+Lio6TjIyNjIiSi4yFiYyPhouIh42KhYyEj4qXkJOYmpWbnKOqoaKknKKrsbe0ubWxs62vsrKlp7O6sbq6vLa3tsDDw729vLa/urq8wbW4wL60r66mqa+3mm58Z1tjWl1fSEU+QUtJU1hZXkFGOTk9OkY/Pzo3Ozs7NjM6Nzo5Pjg6Ojw9OTk4Ozk7PDo+PTtAQDs8QjxAOjg0Nzw7Qj9BQj4+O0NEREBDQz0+PjlhmZWLkYWNj5aSiHl9e3+Fi4OKgoqJhmuAeJCLlpqRnZ2UlJGTlpeampiWk42Sk5KQm5uIdndzcX1/cpGgnZubm5yenZ2eoKGgm5uWlpucmpybnJuYmZqYmJmampqWi5CTlpmYlZiYlpucl5WSkY2SkZCUk5KXm5mYm5ePjpCLjo2Ch4uLi4qLiI2RjIeHhoqIiZGKh4yEhYqNi4qNhI+UkIyDkJOUmZWQi5OTkZWRlpWOj5GMlI2Oj4qIj4ePhoeJiYmNiomJioWNh46JmJKUmpuXmKChp6Cko5qqqbO2sbWwqKmiqK6tn6qvsK21ubi8wr/BxLixtbCutrOwuL68ury+urOzp7G3wpB1gGNiXlpXUk1IRkVQSVlXX1tDUDpCQz1HRj84Nzo6NzU1OTc8OTw5ODo9Pjo6Nzs7Pjs7PTs9P0E7Pz48Pzo4NDM3OkFBQEI+PjpDREM/QUM7PT45Z6mloqKZn6CippeUiI2CiIJ1h4iKiIp7e3Z7enmPeoiSfn18en6CkYWBgH1zfH99fISHfnRweHZzfHaBj4iIiYeIioyMkZicl4iOhIuNi4iNkI+Pi5GPi4yOj5CQjouFhYeLjIyHiIuOi4eMhYaBjYuGiop/iYqGiJiRiIOIg4KFfIuLjIaJi4iKkIyIi42PjI+Wh4mLio6NjY2Wk5OdnJyalpycm56bmpuYnZeTkZWWkJKRi4+LlpSMjYqDi4SEiYyQkIqOio2LipGJjZOTk5SVk5KcmZ6Xn6CfpaKvsamupKSfmKStpqa4t6ysu729wsPAv7+vpa2wsLS3uLO0uLa0ta6stK+4tLaBeXpjZmBeVlFRQUVMT0lcXl9UR0dCS0xCREA9ODg7OTU3Nzk3Ozc9PDk9Pj05Ozg6O0A8Oj06PkJBOD88Oj84NjQyOTtCQD9CPj04QEI/PkBEO0A+N2CloJqXnaGaoaCPl5efl5WCjaCfo6GdmpKOjIxycXBvdnFucG1ucHZub29waHBxcHR+c3FycXd7cnl2d3Jyd3Z6e3l8fXt/iIGEi3+PkYaNi4uGiouLiYaEgYaCgIKJkYOAg4x/ho+LiYWAh32AgZKQhoSEho2DhIyPj4+IjY+Hi4iRkJWRjpCKk5eOj5WYp6SfnZWYlpaln5udq6aqt7W4srGnr6qnpqGfmp2WkpWVkYqPjImTjZuVjYuLhoaJjJWQkJCLmZKVlZSbkJiTlIyNkYyWl5WilZ6mqauno6OqsJucpp+mq6G0vb6zs7+5u7u6uby9rqiusa6wuLyztLGxqrCpqLGxsqild3J0X2hhYFRWUUlKSFZNXl5eVExKRVFKRUdDPTo5OTc0ODY4Mzg4PTo9PD47OTs4Ojs/PDw+OT9DPzg7Ojg8Nzc2Mzc5RT4/Qz89N0BAQT0/RDw+PThUj4yGh4eUjJWZl5yWmZaNlZyWlZydoKCdmpiWeHFubXJ4cXFsbnJwa3FvcG1yc3t1dnd5fnVxeHZ0d3tybn98gX15eH1/eYOGg4WCg5CLkIuLi42Pi4mJhYKBfX9zfYiAfpyQhIWFiYuPinp9fYaOjYqGjZSSi5CXj5SXkpihlp6XlZunpp+goKawq6GjpbW0sqqmqq+isba5vcK7ucO+vLi9uLWxrLCspZuSk5mfm5SPk5WOmp2doJqfn5edo6qsoZ+em62hp6qwqaampJiRkZWUo6SirKSss7Szs6i3tru4sLKvra2yt7a6srW6s7e5u7i8urayr6yxsbKztLOxsa2us7Gzs6yhl3Zxc19jXlJRVE1PSUdYT1pcZFROR1VPRURKRD44Ojg3NTg4ODU5Nzo6PTw/Ojg8ODk5PTs9PTpCPj84Ozo5Ojk4NjI1N0I+P0RAQDY+P0I/PEM8PT46Tn98go6MjJOTl5eaj5SWjZaRkZSXk5qanqGdnHJvcnFxcXFxcG5zcW91dHJxdneAdXd8eYV+d3t8eX1/fICJiYmDfXp/h4GIiYGAgIGGiIKGi4aIhYSIiImEf4J/enx8fX6SkH+IeIGFi4qDhIWKj4yNkZmdlJSUoJqan6Ktsa2ppKWtr6ysrLWuvrmtrqm1sLexq7G2rK+9wsLAvrq8trKutraxtK66u7OurKepp6unoqmtoKmooq+wuLSxvLq6urK0ta+8tLezt7e7t7mtrbCprLW5sbeytLe2sLu7vLu6ury1vLi0wbWsqqqrtLG3uLm1trSzsKymrrCqq7Cxq6yusLKxtK6qo5N4dnJlZ1tMUlBFTUlTV1JlXmdUUExcUUhMUkNBOTk3OTU4ODY2Ozc5Ojs6Pjk4Ozo6Ojw8Pj08RD45Njs7ODg+OTUxNTZCRkREP0A3Pj5DPjpBP0BAO0t/gomXmJSdlpabmIuSlo6XkZGVl5SZl5+bmZx8dHV2dXl1c3RudnJzdHV2d319gX56gXyDfoJ/fYB/hIKFj52RiYF/go+Xjo6HgoCBiIuFfomQi3+HjYyLioeSioeGjZGTkZGEh319g4iMjouOiomQj46PlJSYkJWcmp2eqK6yr6+1tLOtsrW4sLy1tbGqsKqztbS7t7SztrS1r7i4t62noqassLCvtre3vrW5vLOysa61u7C0r6+yu7axuMC9tLS0s7izvLq2tLrAvbm6ubq+ubm5vrWysa+yr6q1tLGzsbSzrri4tb+vpKaoo6ussa+zrq6wsKytq6qroqKmqKKnrauqpaynoqeYeHlxZmVZT09NSVJNV0xPX15cTlVVYlFEVE07Pzk8ODk1Nzc1Nzk1Ojo6OTs4Ojw8Oj08Pj4/P0I9ODY6Ojk6QDs1MjY2QUZDQz4/Nz49Q0I5P0I/PjtLjpGTmJmVmZGTopiTkpKLk4uOkI+Vl5ablZSbhoJ9enh2dHRzdH53end2gIKDhouMhISFioaQiYeRk5aRjZaalY+IjI+emJaVkpCTl5qamJCdoJ2Tl5qgmZ2boqGVkJugpKOak42IiIuJkZGOko6LmJqPj4yUmpecnZugnaSstLm6vK+2tLi0tLK3uLmzq6+qqKy1srK1rrGrrqa3s7OxpaGotbCvrayrtbqyu7q6tLK3ur67ubG4sLmtqLK4u66ttLS3tbu2trm5vLe0r7G0t7a5s7e1pq2pq6ior6yprq2up6KxtLG0q6aop6Cjq66oqq6orLKwr6+pqKGeoaGjpqOgopqlo56ol3J3bmdiVUtUT09KQ1BLX2JYWlFcVGBNSFJJQUA5Ojg2Njc3NTg5NDs5Ozk8Nzs+Ojg8PD0/QkBBPTs2OTk5Oj87NjM3OD5GQkJAQjk+PUBDPkBGQj44R5OWkZWTkpSQkZ+ZnZmVkI+Sko6Mk5aWko6RlZGSkIaBeXJzdXuBhI6HhZGTkpicnJiVkJWYo5yaoaeqqZ+clpeVnaKioZyZnpmlqKyvramnqqmop6GlqKirqqmvoZufoaOjoJqeoJyUjZiUmKCgoaSem5qlp6Spq6+spaOoq6+xtK6qrK6zr6ystLO0ua6urayqrLKwsK2wqKqmsrS0uK6qtrqwr6qurLC3s7i0t7W0u7y4tbWxtauyrKiys7uvrbGytLa1sbG0s7OvrKuvs7a0sayutKqqpqWnrauoqKupqqifqbOwqqeppaOio7CtqaatpairrayppaSioKWipaOYmZyVnqKippdudWVnZFdPWEtLSktTVHBiWWRXX1tcUlpQTEM8ODk6Njk4NzQ3NzQ4Ojw6PDg6PTk3PDw7PkM/QT47OTo5Ojs+PTg0NThBREVEQkM5PjtAPkI/R0Q+N0KSm5SVlZaVj46Wl5qZlZGKk5SSjo+SkYqKiY2Ul5qTjYmCho6VkZSfmpuin5+jnqGhn5ijpKelpaapqa2rqaKmpKilpKGfnqOjra2srairrq+qqqukoaKkqaemqaijop2bm6ShpaijoJidmJ+hoqmnoKKirqyrqqetr6ilpKmpqammo6iqqaekp66wr7Ovq7Crqq+yr7Czua+rqLCxrrCyubO0r62vtbCss7GurLW1tLSzs7CvrKyqrKusr7G0s7CwrrCwsKyqrauqq6alrrCysKumqbCvqaOkqaunqKaopquwq6mvqaaoqaalo6iwraqpqKKpo6WnpKGhoKKloZ2el5aYlJugpKmUbnNeamlfVVpOUk5QT1JkXGVjW11ZXFBZT0tAPDs5Ojc6ODczNTMzODo9OTo4OTo5Oj08PEBEPkA9OTo8PDw+Oz45NTo8QkFFQUNBOT47P0BEQENCQDdAkZ6YlJeZlpGHi5SSl5GIg4mLk4+OkI2Hh4SFlZmWmJeZlpqeop2anKKkoaCdn5qfoKGgpqGgoKCjo6KlqKmrramqpqOmpaCloKaop6WnqaepqKOnppmcpKaioaGhoaCemZmfoKamo6Kenpafm5qioqChn6GiqKCcn6GloaCmo6KfpKGspp6foaGkrKqnrKivq6e0sa6ur7WyrKqwq6mtrbWwrq6srreup6yqpKivsq+sq7Kvqqqpq6utqa6urrGxraqtqaunp6uoqauinaapqKilqKisqKilpKWop6iopqmsr6+oq6mhoqKlo6Opq6ymqKWjqKKhoKSdnZ+hoZ2bnZ+amZWcnKOqlG9zZm5yZF1cUFVPV09eZGRsaGJiWlpSVE9NQTo9Ojo4Ozk1MTYzMjg4Ozk5OTk7OTk8Oz0/Qz5APTk7Ojs8QD0+PDk5PEFBRUFGQTo9Oz9BQUJBRUI4PYqWlJOYmpaPiISNjpGSjIiIiI+JiZCRjoqKiJubmZygpaKlnqKjoZqeoZyanZ6bnKOop6ugoKOYoJ2XnKGjo6WjoqKkrKilqaCepqmnrKmkn6Kgoqahpq6mpp2fn5+gqp6ZnJuqpKGkn6GbnJqcoJ6hn56eoKOZlpuYpKKipJ+ZnKGhoqCbmp6goaSgnaejqrGorqusqaSqqquorKalrKqws6+rq6mwq6appaWoq6ynpqevq6Wnq6upq6irqqqrrailqKOmpaesqayoopykoaOmo6qpqKano6SnqKanqKepqKupoaKoo5yepqWjqKino6WlpqmgpJ6inpeYnZ+doqKlnpiUlZ6go5d1d2t2eGJfXFVZUVVXW2Nec19oX2NTUVlUSD48PTg7OTo4NTM3MzM0Nzo4OT05Ozo5PDxBQEM9PT44Ozw9PEA/Qz86ODo+P0NAREE6Oz49QD9DQ0VDOTyCmJmenZ2alZKKiZGRl5GQh4SJgoGNj4+Sj42cnZ+hpKmlqaeorK2moqKfmKSmo6Stsa6yp6asm56em5qjp6Cfo5+foq+rq6yoqKuwqaiqqKGfoKeprbCyr6yjoqahqrKhpKKjq6KlpKKlo56doJ6fpaKinp+imJWem5+fpKGblZigoZ2enJudnZuZmZWen6Oonp2iqKGaoaOmoqSoqaqoq7CxqKWlp6eopKWpqaqnoqWmqKadnqWloqClpaOlpqCjpaOjpaelqamqpKekpqKmp6SrqaenpKGlqKynpqWlo6OopJWdo5+bnaCjqaeopqGjo6mooKiioJyVkZqfoKGmopuXkpCamqCVfHdvfXlmW1pgX1pcVlxoZG5jbmppYl5QUEA/Ozo4OTg8OzYzNDMzMzc5OTs8OTs7OT49QkBAPTs9ODw9QD08PENBPjo4PT9EP0M+Ojk/PEI/P0FEQjk6gJ6kp6Kem5+gmY+ZnaCWloqGj4iEi4qTl5SRo6Wnqq6trLOys7S4t62pqqevtLKxqq6usbKusa2lq7OssbGpq6+rq6y2sLSwq7GysaOfoqqpp663trS0trOvrKuuq7e1pLKxsJuip56io6ObnZyXoqiloZ+eo5udoZqWnaScm5aZoqefoJ+joJuUlpmWl5qfoJmVnqGZmJ2dpZ2gpKeqqaiqraylqaSlqqeqqaqsp6SkpKOimZmhnpqaoaCfpaWYnqSmpKqooqelpaGqp6mnp6ejqKWmpaGkqKesoqekoaalpaOVl52Ym5mVo6elpaSfnZ2lo6Kqo5+amZiXnJyaoaGakJOTl5ibjX93cnZ5amJbX15cYllgZG5ta25hX2RgUE9BQDs7OTs4Ojk2MTQzNjQ3Nzc6PTo8Ozk9PUI/Pj89PDo/OTo7PD5BRUA9OTtAQT5DPDs5PzlAQEBAQkM7OXuao6OcoJ2dop2Zn6KioJibmJaYkpSQm5qWl7S0rrW4s7S4tre0uLm3tbm4ub28uKqLnLK4vLS9urW7uru4s7q/uLe5u7G3r6iusq2inJ+qsri8vL27ur+0r7GztbO4sp62tLl/naqkop+gl5Wal6SqpqahpKOkq6almaGko52goaKooaOgpaGck5mYmJmco56cmpudl5uZlqWam5+hqKmpqKuvr66pqKirrKytq6irp6WjoJyfo6Ojn6Cipammmpyip6Spn6GjoqKgpaanpqSooJ+ipKGjoqiop6OloaGopqalo5mbmJuTj6GknqKfmJiVoJuhpaCfm5udnJuamZugmo2YmZiTkYaAdnh4eGNbUllUX19hbWh1a3FoaWlhWVNMQDw6Ozg5Nzk3NTU2Mjg1Njc3Ojw7Ozs7QD4/QD0+Pjk6PDk2Nz47QkZCPDg7P0NDRDw+OT43PkFCP0ZDOzhwkpqblJ6bm52Vl52doqajopaXnpaXl6GblJi+t7G4uba3t7i7l5S2vbu9vcDFtaK7mKC3v7+6wcm0nbu2sra/xcGooLa0urGqrrSxsLG0tbW8vL68vL7Guri3ur20sKyTsbu5a4+4sqqmpp+YpKSnqKSupKurtbWvs6CnqqynqqmlpqCnoKGmoZOWmJ2foqSjnZ6coaChnZekmpmdoKaqqqqtrq2tsLGrrK2sqamrrqimpaalpqSkpqaeo6eppKGcoKKjpqCio5+jpJ2foqWgpJyboZ6fo6GhpaSlqaOkpaKkp6ehn52elpOcoJiZko+MjJeWn5uWnJqdnJqSlpSUmJOQmp2YiouHgIB8gnhhXllUYWlgZnNvc2l0ZGlkYltMSz46ODg5ODg5NzM0NTI1NDY2OTw8Oz08P0E/QEA9Pj44OTs4Njc/OUJFQzw7PD5DREM9QDs9Nz1DQ0BFQjw3Z4yRk4qalZiblZWYm6Knq6aVl5iQlZmhnpeXvrWztLu6ubi5woeYt6u4u8DCxbOjw6e4s72/tMTHvbS7uL62wMTErqCworW2tb2+wcPGwsO5vb/AwL2/xL28ur2+s6mlh67Bt2F6vsCzr6+qqqitp6ekr6eqtLyxtLWor7Gwr6yqoqajrJ+fpquXmqifpaWfoJydoKuwsKyiq5yYm6Cor7Kys6uorre1sq2tqaalqKulpaStqaShn6Cnnp6mqKmmnp+anqGlpqmcnaObl6KmmpuanZ+cmqGcmZ2eoKijn6GfnaWioKOioZSZmpmTj4qLhI2Qk5uPjpiVm5eYkJORkomNl5iYk4uKi32AgIVwYGFeXmtjYm53dXZubFtiUVZcTUc7PDk3OTc5Ojc0NDQxNDM3Njg8Ozs8PEBAPUA/Pj8+Ojo5Ojc6Pz5FRUU8PT1AQkJCQUE7PDhAQ0NARD87NV+MjIaFlouUlZeYl5ifpqellpWVkZebn5ual7mxtrO5vLy5urWqsryxvsG0vMe5uLuuv6fGw7/KxsnIxcXJvMLHx7+xsKe8vL7FxMbJx8XGu8TAxcbAua+9vMC+vrCvnoCtvLJeabbDuq2vsLWqq6aqo62kp7G2q7WyrbOtqK6vp6awr7Ktqq+zpKu1qaeopKCgnqmyuL61tbWqqaausre4t7apq7i8ubexr66noqOop6SfqKOfnqCZoZydoqSnp6GelJuaoKGlnqChnpajnZSQlpiboZqflpORlpSin5qenJudoZ6kn56VnJiPkpOPjImTkJefiZCWkZuUmJGRlZaDjJWXlpKLjIh8f4N/amZoYWttZm51cXJ1cWdeX1xSSUU/Ojo6Nzg0ODw3NjU0MjMzNjU3PDo7PDs9QD4/QD48PTk5OTs6PDw+QkRFPj49QENDQkREOzo4QUJCQUNAOTJbk4iEjZGKi5GRlZCSmp2fnJOSmJSdnZqXmpW2sbm1tb6+tri1uLO8vMTEusPHwb+0s8XFxr/CzcfLzsvLx8HDxsfIysXExcO7vLzBxcHFxb/DwsbFwLGTvrq/w8K1u5R9qrWlXmGgvLuxoJuxr6ykrK60p6qpqKqtrKmmpZ6pr6uyu7q4u7e5t7O5uLOurLO0qrC1ub3Bur6+vL60urm4u7qysbS8u7q7s7Oyp6Smq6uioaCdmpudmpyXmpuenJygnZaclpuZnZ6io52UnJCNiY6OkZ6bnJWNh5KLmJiWmpybmJybnp6cmp6UjpiYmpSRmZeeoZWYmpKXlJWRlJqYk4+TnZaSi5F+enx/dGtsbmRvbWlxeG55aWlhXGdhUUZEQTw5OTc2NDQ6ODQ2NTMzMjY1Nj05OTs7PT47Pj49Oz05OTs7Oz89QUNBQkFAPEBDQ0NFQjs4OUQ/P0BCPzsyV5uQkZCQh4WSjo2IjZCTlZGPjZSUm5STlpqRs7e4uLi+u7C1sri2tbbAw8G+w8LAvru+u7u8xMzEzNDLxsa/xcfLyNTLysjGv7y7vsS+xcjGxsTEw7i0wLe0vMHCucGHe7PFomFhhrm7tqybo7ewpqy0tayupaSjqKSgoKWZqrSxvsG+urm6uLW0srG0tLO6wL7Av769u7u9vsDCt7a3tru7sru+ubi3u7a3tKyoqamrpqijnpOampyYkZKZl5GRmJqXnpiWk5acm5+elJOJiX6GiIuWlJiZkYmVkZeWlZmbmpaYl5idnpyhmJWZmZyYl5ybn56jnJ6WmJeTl5yZmZyUlp2UlpOJdnl6e3Zua2lndVpmcnhzeWZmXWRbUlhJRj87Nzg4NzYxNjk3NDQzMzM2NDY7ODo8Oz08OD0+PDo7PDs9Ozs+PkRBQURCQEBBQkNDREM9OTlCQD8/QD89MkyWmpaSk4yKmJCKi4yOkpKKiIaNkJiKj5CUl7O7tba/vb2xtrjBvby0uL/Bsbi3vsHFvbu8wsbJv8jOyMHEwcfKysbKxczIzcbJxb/DwMvNz8rGxMPDwcS+uL7Bw8G6fXy/1aZkYnKxs7Sqn6e0sq6ruLWzrKmjoa2prKatn6y1tL/Cvrm4vbawrausr7W0ur7Fv7u8urO5u7i5ubWtsLS9u7G/vLiytrmzubu0ra2orKyqqaeXnpualY2MmJSTi5WWlJyZl5WWmZKYn5mQiop+iYqKkY6Vl5OUn5mWkJSZmJmWmJOUm6GeoZiYmp2ZmZaenpibopqdnJuYmpuZlpeXlpyZlJyYfoB4eXV1ZWZpamhda29ueHdjYmBgXlhXRkU4Ojg6OTc5NDQ5NzY2NTEyMzM0Ozo9Pzs9PTo6PTs8Pjo7Pz48QkBDQkJFQj0/Q0NDQ0RFQDk6QkFBQj5CQTVCkJeUlZmSj5qQjpKRjZSVi4qHjI2UiImPkpq2u7S8xsHEwr3BxcLAtLO9v6ywr7rDysPCvs3IxbfByMW/wcLIy8rCwsTJzM7Pz8zDx8bIycjIycfFycfIx7/Fx8THsnR2vdekZWNmrrS3t8C+vrq9ury6vKytpqq7urm3wLK1uLLAxrq3t8Gzsa2tqau1s7u2w7a2vbWxt762s7e4sLW2v7uwvbq0q7CxsbO8urOzrqutq62xnaOjoJqQjpiXlZCclpaYlpWSnJmTm5+clpGUjpWQiYyQlZOUm56YmZKSnJedlJmSk5aZmJ2VnJ6do5yVnZ+TnKKcnKCfnaOemJSVl5ebmpmgkH99cXRxb2NhZ3Zoaml0bXhsXWRbVmBZTEhDNjw5OTg4OjUzOjY2NDQxMzUyNTs6PD47Ozw9PDs8PTw7PD49P0E/RUFCQ0M+QEFARUVERUE7Nz5DQkI+Q0I4O4+akZaalJKUjZCUlI6VlI6Pi4yJk4uIkJObt8C6xsXEw8zCwcS9vrWvt7uvr7O6wMfFxMHMy8W2ucDCwsTHytHLwsPExsnFzNDOx8zJwsLHwsvLyMbMys7FxsXDyKpscLLXn2NjXrXEwcjMxsTBxMfBvL60sLCwwb6+wca/vri2w8K6urbAvrWyrKmvsri+tMC0tLi0t7nEua+8vrm+v8K/tbq2q6qsrq+wt768trSura2utaSlqKimmpycnZyeopydmZOQkp2VmKCdmJiVmZmZl46MlH2QkJefmZmYk5GToI6Nko+VjpCUlaKdnKSem56elpyjoKGipKOkop6amZubnJ2enIN9cnx4cGdgamp2bGlldW50Yl1iVFdVU01HOjc7OTk3Nzo3NDg3ODQ1MjM0MjU7Ojk+Oj08Pz04Oz05OTk9PEBBQEVCQUJBQT9AP0RFREVAPDk+QkNCQENBOjSAoZeUmZiVkImUk5aTiZGMlJGOiJaKi5CXnMXLw8O8wMPHwbm9vbu4tre3rrK3uLzAwsDCx8bHurzAwsTHyMbSycHDxL+/vsTLyMrLyby8yMfJzcjDyMnJxcXDwsKjZWmf0ppgYV6+z8fLzsS3v7/AwLu6vbWzs7+/ub/DucC3u8G8uri7ub27srCvsKy5wri9ube1t7q9xb24xsjCwcLGwr28tamurrCwr7O6t7m2sK+tr7OppquprqannqSlo6OjoqCblZiekZecl5GRlZeZlZmRlJiSlYyYo5qcnp2FiZ+TfJKWlZKUlJennaCipJ+en56foaGkoqKjoaOinJ2fnqOhppl5enl/cnBmZWZjamRiam1ub15ZXFZWTlBKRjk5Ozk3Njc3NjM3ODk1NjEzNTI3PDs8QDs/PDw6ODo8OTk4Pj1APz9GP0JBQz89QT5ARENDQTw5PENBQ0RBQDozbKKdlZedlo+PmJiZmIiSjZGVkI+Vjo6TlpbKy7u5urnBu7q3vsG8vLu5sa61uri4u8S6vsC+vru8wMXBxsK+xsK5u8O6uLm8vsHHwca7ucjJw8XEwMPBwsHDwsPBnGRjh8eeW15jxM3FyNDBrr2+uLm7u763tLC5vrO8vrG5tbi7tryztbm2uba5t7GtusG6vMG/t77Ev8bDw8fHwrvAwr/Cv7iys7O1tLGut7S3tbSxrK2xp6Wlp7CtqJ+nq6ajqKWmpqCgn5SYmZSRkZWUl5OYl5qhnZ6hnKGdoaWglpSbkZeXmJqTnpmZqaSlpKWdoqCanqCkoqOcoqGjoJ6cnp6ppaiVfXuDeG5mYWRiYWNkZGpiZ2NbWlpcWVFPRT07OTo7Nzc5OTY0OTk6NTMxNDUyNzo7OkA9Pzw8OTc3Ozo5Ojw+QD8+RDxCQURAPz49QkRCQkI+OjlCP0FCPT44NVmfnJiTmZaRlZiYmpeQkZCQk5GTlJKSkpSUxce4tbq5wrm5vMPFwri7ubGxtry6tbnAu7u5tri0tLW/u72/ub66urTAuLW3sq66u7fAt7zK0sC7wMG8u8W9u8HExKNpZHi9o1tca8bFwMDJv7DBv7u4u765tbe0uLy0vbi1tLCzvLG3tri/tr25vb65t7q+u7/Axb29y8PGw8TAw762ubq2v7i7v7y4trOyq7CwsrWzs66sq6emnqeurauiqKumpqqjp6iqo5+Ym52bmpicnJiXnJuhpZ2anqGhoKGmoJqbnJiboJ+dnJ+coKiho6SknaKfmqKgop+el6Shop+dmpieqKWhi3x5iH1xY2BiY2hqZ2dpZWleVlZUWU9TTEY4PzY7Ojc3OTs2NTo7PDYzMTM0MTc7OTg/PT47PDs3Njk5ODo7PUA/PkA9PT9CPjxAQUNDQT9DPTo2PEBBQDw9ODdJlJibj5OUkZWYlZGWkpWRkJGUlZSTk5OYlcHCwLq8ub62uL7EwMKxvbqytLO4vLW3vMC8vbS1sbC1t7W7wbi+ub+8vLe0t6+ut7W5v7vB2YqywrvDtbrHt7a5u8CmdnJ3pp1oaYDGwL+7wb65xrzCwLzFuLa3tLi2tru7uLa0t7q1tLi8vbm/ucPAwLu5vLu+vcjEvcfEw7rAvb62sra4srm0usLCureysaysq62yr7Kur6ijpJ6rrKyqpKakpKiqoqemraihoaGmn6Oiop6bnKKfoKOdnJuhn6KgpKCem5eZn6GdnZ6eoaWkoaKioZ6ho5yinqCZnZijn52eoJqZoKKmnYR6g4F4cW1lZWZvaWVsaFhYTktLS1JJTEhDOT44PTs2Ojs5Njc8ODk4NjA0MzE3OTk7Pz0+Ojw6ODg5PDg6Ozs7PD1BPj09Q0E8P0NDREA/Pzw6Nz5CREE/QDg4P4mYmoyMkI+Tl5WMkpCakpGXmJaUlJKQmZTDvsbBwby8uLi6v7a8scK2tLyxtLa4s7q9v768sq2vrLGwt7y3u73BxLm3t7a1ubm6u7+80cZ2oMy9x7e5uK63tb6xnYWEgpOVe3+ZxcC/vr28v8nCx8i+xri1srK9uLi4vrq6uby6urS3u7q5v7zEwL+5uri/ubvFxr3Fw8Kyur27sa+2uLO3s7q+wLm2rLGrrqmqqa2qqq6mpKWnrq2ppaOio6GkpaWmoqato6Klo5+ho6Gcmpyhn6CloaCenZygnaWgnpeVmZ2fn52gn6KmpaCknpybn6Ofn5mcmZ2epJyWnKOcnqGcppZ+f4d8a25wZ3Brc2ZibWBcVElLSkRKQkNHPzo7OD48Nzs7OTc4Ozc8PDYyNzUxNjk8PD08QTs8Ojs6OT45Ojs9PUA+RD89PkRAPz9BRkQ/Pzw9OTc/QUNCQEI5Ojl3nJiLh4uQkpOWjY+TmpOQnZiSkY2PjpiSvbfHvsO+vbu+vL22uri9ure9s7OwuLi1uby8wLeqraSusLi7sr2+u8S2tbi1t8C+xLzCxNitcnu2yc/CwLivtb6/oI6EfYeEj4GEmbDCwr++vbzHxsvKxMe9tbW2wb27u7/CusDCv7y2t729vcHBwL+8ube8wru3v8W7wr++tbe8vK+vt7awtLO6ubq7r6mtq62rrKaqoqeuqKWqra2vp6Sgn6ajnqKjqKOjq6Oiop6dm5ublJaZnJyfpZ6fnpmYnpejoJyXmZqZmqOjop6jo6egpqCbnaCjnp2WoJmcoKCblJegn6WcmKKQgYaAcmZsaW50bnhjZ2JcY1FLVEhFRUNIQzw7OTg9Ojc6PTo4OTs3PD01MzY1MDY4OTo8O0A9PDo+PDk+OTk9Pjs/PkM8Pz5APz4/P0ZEQEE/Pjo3P0BDQz9APTo4ZqGYj4uNlZKVlY6PlpmVl5uVjoyMjY+bk7m2wbS/vLm8w8C+wLq1trKywLmvsry8sLe7tru8qqqjsLm9vLK8vrzFuLG4ur3HysnCyMnSlm9wqdLRzMrEtbvJr4h4cGV9eYVvc4CItcS+wbzAv7fKycXGwLm9vMS/v7/CyL3Hx8XFvLrEv7vBv7rAvLu7wMS9t7nCub69t7S2uLqur7WxsLCytre0t6yurKqsrKuoq6Gms6qlra+trKippaOkp5+io6Onoaeiop6cnZyamYyQlpeZnaKZnpuVkp2UoaCdmZ6fmJimpqKfoqKmoqeloqCko6GbnaCbnKKfl5WVnp6kmpafiYGDgXRvbGx0a2xuX2NeYGFOSU0/RUA/REM7Ozo6Ozo4Ozw6OTw+Ojo+NDQ1NTE5OTo5PDtAPD89PTw4PDs6PDs7Pz5DPkI+QD89Pz9FRUJBQj87Nj9CRUQ9QUE6OlmfmJOSlZqVmpOQlpeclZuZlpSVkZKTnZm2uLaxuru6vsG5uca7trWypb69tLbBv66zvbS4wbGwsbS7x9LCub68xL63vMG/yM/GyMrKwIRwcqLNy8vNysbFwZVwYllPbHN7V1hocpm/wcC/xKikyMTDxMO5w769ub+8wsbCyc7Hxr66xr26v7m3wLm5vsDCvrW0vLi2u7CvsrK1r7Cvrqyus7CzsrirsbKxqrCrq6yrrLatqKyusqarrKmpoaWgpaakrKSmoaChnqGgnaCMlJeTm5+mmZ6emZOYnZ+gnp2eopuYp62ooqSgoKKqpqmhqKGlm6CgnZ2jn5SYmKKdp6Gfm4J7eoh6bW13e19wY1teX19UST5DRUlCQz5DOz42OTo7Ozs7Ozs7PT05PTU2NjIxODo5Ozs6QTs/PDw+Nzs8Ozw9PTw9Pz5BQUE/P0FCQUVDQkRAPDY+Q0RFPkJEPztTmZuZmJ6dmqCalpyZn5KdlZ2boJWWlJqYur20sLu8wcTCv8XGura5sqO7vbS3xLuwtbq2ucS4tLy2u7iu3MK+tr7Avr20npSiq6+/vqN2dHei0MnLyMHDw6Z4XE1GQV9vcElFWGF9qsW/wbKImcjDwMjAusK7urO6usG+wMrOysS9tby8ub+5ubW1s7/Avre0s7S4rbeqr7CwsrGvq6+nr7ausrG5rra2uLSzsLGttrS6sa6srranrLKsraSjoaenqLKrqqWkp6elpaCml5ujn6SmraKeo6KanaWiop+foaWenrC0sKSlnp+kqaevp6mgq6CiopqipJ2anqGmp6+psZWCe32Cem5zeHNncF1bXl1ZUkZEQ01JQUU9SDs7NTk7Ojw8Ojs7Oz0/Oj01NDUxMjc4ODs8O0I8Pz46OzY6PTo7Pj0/QD87QUFBPj4/QkBBQkJFPjo1OkFCST9AQkA7TJqdnZ6fnZienZmampySoJWbnp+blZGRl8W+urbDvMbCvr/Ixbe1uLe2ubu0r7e3srWzt7m8u7a7u8itbLHNvbW5wLykdmpnbGhvfJGUbnR5otHGyMG4v72HYkxCQTpUaGRFOk5YaJLDwLSQcp7Ivr/HvLy/tLSutbW8vr/OzcvCt7K4uLi9ubuxtrLIwLu2tLGwt6yzqbCtrbS3r6uuqrG1r7Gvt7O6usC/tre2sru6wLWyrbO3rLC6r7KloqWrrK+5s7KosK+xr6qiqKGkraitrLOun6inpqWmq6Sknqaqo6ayuLOrpZyfp6anrquqpbClpaWbpKOYn6exrLW4sLKOhHl/fXZsdXtwbmlbX2BZU1BBRkhHS0BEQ0g8PTY7OTk8Ozo6Ozo9Pzw9NTU2MTM2OTg8QT5AOz1AOzs5PD04Oj08QD46Oj49Pj09PkBCQkJBRD03NDU9REc9Q0I/PEWUnqCgoJyXmpiYlZmdmZ2fmp2bnJaRj5LDwMK9wrzEvLy7xbu3s7e2tru7s6CWtayvsbS0tLa4ucDQqXKDtL22tb+ehGhZX15LUVpaa29yfaPNvrq5tL20eFBAUWVAS1xZRzlHU1x7vLmccmmsvLXBwrW/urWur62wvcC5z8rJw7GwtbS0vbq+ubq7ysO7uravsL2xuK+ys7C3vbaur66wt7CsrLK2vbzEwrq9t7bAv8G3tbC2srGzurGxr6err6u2v7e1qbqztbmxp6uop7ausrG1uaisrK+qr7CqqKessayytr20saykqKuoqKusq6i2qaaonqadmKOuvLG7wbSmiYF8gnpzdXZ3bnFgX2ZdW1RKPT8/RkY9RkNDOTo1Ozk5Pjw8Ojo8Pj4+Pjg4MzE1Nzg5Pj9BPzs6Pz08Oz09OTs8OTs6Nzs+PT1DQT8/QUJEQkE8ODU4PUNGPUREPzw/iZ2en52Xl5WUk5aZnpubmpuYlJ2Uio6Owb7Dwr6+vrm2usCxtbGzt7fCtbOrrbOoqa61r620trnCy6CCdouisLORZmBlVVlfS0pNT1Nsc4Slx7uio624sIRFQHCWUUVSUUs6SlJVbKqhf2Rytq+yvLquu7Szpquorbq+uMvCv76sq7Cvs7u3ub67wMXBu7y3sLXEtb+0uLu0u8PCs7a2sbisqaWrsr23v7+7u7exvL28trGvq6uprbOvsLCrsLSpuMC2sqm0tbC3tq2spqu7s660uMKwsbG1sbK1saywsri4ubi+tLGzrqyxramvrqqyuK6trainoZ6ptr+4ur+wlol9gHxxdHd0d3JsX2NhW15PSEI/PUhDRk1DQDc3NTs6OT48PDk4PT47PT86ODMyNTc2OD8/Qj86OD4+PTw5PDk7Ozo8Ozs6PEA+QkI9QEE/QkI/PDs3OjxBRD5CQz8+QYqgm6GdlJiVlZKYmpyWm5WalY2bj4SIhru0vb+7vLm3s7y8rLOytLS2wLXAr7Kzqqqxt62pubO3v8Wihnl1jaKOW1JBWFRHYW1ZU0dJY42jqsPGmYSQo7ClQkd7ml9CUFFOOVNaUmGLf2lfibelrLOwprCtqJ6gn6WttrXCt7a0pairqLC2s7K6tbu7u7W4trC1xLK+vL+8ubrFybq9vraxp6SeoamxrrW5trKxq7S3trGopp6gmaWmpKynq6y2qa+6sa2kpq2lq7GrrKmtuLawsrjBtrGxtbGvu7ayt7W1sry1urKwsbKutLKqrq2nuLWyta2uqqiosrq9wLa0qY6Ce393b3tvdXJtY11mWFxdUk5OQT5KQkFKSUA2NjU7Nzg+Ojs4Nz4+PDs/OjkzMjc1NzU8PD48PDg+Pjw8OTk5Ozs7Pjs7OTw+P0E9PEJAPz9CQD47Njc6QERBQ0E/QUKJoJ2loJSWmJiVnqCcl5uYmZGMmYmDhoS1r7S7u7S1sLG2uq6wtLOvtbq1urC1s7KttrqvrbyzuLjCsI5/eIeOaE5JQWtXQk91hZlwTUNWfbC70a56doKhpkZIaHdYQlhYWzxWY1Jab2hgX6GznqSnp52jpp2WmZman6muuayrq5+lqKSrrq6nr6yvsbGtsa6usLmwtLy+uLm4x8W8vLu4qaKcmJufp6assq6zqaapqq6popqXl5GcmpijnqKir6ekrKaompqemqGnp6anqa+2squ0trCqsK+xqbm2sbWxrqy3s7avrquuq7S1ra+rq7GtsbKoraurs7W3ur2wq6GLeoJ5cnZzbXRpbF1balRdXFBNSERGTEJGTkY4NjY1OjU6Pjg7OTc8PTo7PTo5MjM2Nzc3Pjs9Pjo6Pz48PDw6Ojs5Oz47PTk8Pj1CPDtAP0A/QT8+OjU1OkBFQkRBQEJBiJ+ipqGYm56dmqWpmJudmpmUjJmHhoeGrq2uuLmxsqiur7iyq7CwqrK1ubm+tbK4tLm6trm7tbWzuLOSjIiDd1VFQFSJVkpKU3WLf2JAWam5ssfPkmdsg4RLRlNVSWSRn6mel3tRVl5cV3Kvp6GdnZ6XmKGVkpWXkJifqK6ko6Sgoqeio6mpoaanpaqtp6ynqKesq6yyu7SztLm6trK2ramgmpaWm52fq6yqr6Oko6GpoJuTjo+Qk5KSmZaanaSloJ+ep5iVkpSZnqSjoaWqrK2iqaqppKmtrqW0sa6xraqprq+wraWmqqSos66trKmmpqmrpqqnq7Ksr7Oxq6mWgX+Bd3J4aHRzbmRUYGNXXFFOTEhASFFETUM9ODg3NTo3PD46Ozw4OTw7Ozw7ODI0ODk3ODs7PDs4PD0+Oz08Ojk8Ojs9PTw6OkA9PDw7QD5CQEE/Pjk1ODs8RkFDRD9BQYijpqKjnqCfp6Coqpufm5yZmI6Xi42PjKqpqLGvsK2lp6ayr6mmq6CvsLu1vby4wMG+vLy8ua6sr7K6p5iZlmhMP2CAak5JSU1nmn9WR1mturGv0rpyW2FkUUVQcJWppZ6anJ6fgVRQU1OUr5+nlpuXl4+dk4+Qlo6Xm6SooKCioqKlpZ2jo6CepaCkrKSmqKSio6OrrLOuqa6urqeqraisoZyamJmYm6moq6ufpqObo5yVkIyPj5CTkJeVlpifnp6amaaXk4+Slp2ioKWipqSnoKKko6Ghq6uksq2qrKyno6yuraufoaKkpK+srKmmo6KqpKqqpKmrpqmsq6agiHiDfHZ/emN3bG5cUWhUUE5HUE1MQk9RQD47PjQ5OjU7OT07Ojk9OTk8Ozw8OzkzNjk5Njo7Pz06ODs6Pjw6PDs5Oz07PDw9PjxAPT88ODtAQEE/Pz45NDk8N0FDQkQ9QEOOqqSjoqGinaulpqimoZ6dmZ2PmJWTkJWnpKGmqKmlpKChp6uhnKKbp6u1sry9wMLCwL7AuLSnpKyovcGppr1hQlyjfU9aSUthS1uJZm1zjq+1qbzSl1VPT1BuorCnnI+VkY6XnqKOU0lcpaSdqJSblpeMl5GNkJeTmJ2iqp+fn6Cjpaicn6ChnKKfo6innKehoKSfrKisrKCpq6agpKimrKOdnp2Zl5qrpqqxo6WonqCclZOQj5GQmJCWlZiXn5ibmZukmZeUlpqdoJ2nqKWgo6Kho56doKmqpa6upqipoaKqrqqnoaCio6msq6eppqShqaKlqaalpKKmpKijkn18gHV2fW1re2RoVVFjTUpIR09STUpORzxFQDwyPzg1OTs+Ozk5Ozg6PDs7Ozk5NDg7ODc7Oz48Ojk8Oj07Ozw9OTw8PD49PUE+QEJAPTc6P0FCQEA/ODU1PDpAQ0BEPkFGlq6koqWeo6KpqKipqqWmnp2imJiZmZWbop6bnqOioKOgoZqgmJeXlqGorK62t7q5ure3u66ooKGpoKvFwMmWTkJ2nWtRcUxQYWd3cF9ga4GZsLCuxrpdPmCUpZ6YkoyPlJWXl5ufpotQcqCemqSXl5eWkJKRkZOal5ugpKqeoaGepqeqop+gp5+dn6SnqZ6jpp+qnaqtqq6nqLClo6Smp6ymoaShm5ier6iusqulqqqgmpiYmJWTlpqTlZWalpuXl5ihnpycl5uhmp6ao6eln6GioqOdm6Gmp6aoraOppZ6kp6mkpaWhpaSsrKmmq6eioKSjpKenoaCgpaKmoIl7gH13eHxkeXlgYlJVYEhJSktTVElSUEw5P0E2Nzw2NTs6PDw5Ozs4Ojw9Ojs4NjU3OjY5Pj0+PDk5PTk9PTw+PTs7PDo+PTw/Pz9APT03Oj5AQEA/Pzg2NT08PkFCRkBAR6CupKaroaOqrK6tp6ypqKCipp6bm56aoJyalZmfn5uen56WlJOXk5KcnqSorq2sq6uvqq+pnpeepZykxsaGV1JNZJ9ebn11eVdRa2NeamdseI60r7TCf4Shn52ZlJeZmI+NkJSQi42QgYqhnZejmZqXmJmUmZiWnZufpaapoKajnqeurqumorGjmqSmpqqioaqiqaSosquxsqu5qKarp6urqaysp6Cgo7GusrC0qrKuopmcnZ6hmZubmpiZm5SWm5aZnKWhoJqjoZqcmZ+kop6gn6KmnZulpqWkpaijp6OepqOinqaloqWlqKykpq2noJ2dn56gpaGenqWgppmBe4F8dnZzaIJsZVtTWlpNUUpPT1VMU0xBNz5DNzg9NzY6PDw9Ojw5ODo7PDo7OTc2Oj01OTw7QD03ODs3PTs9PT06Ozw4Pj09QD5BPj4+ODg8P0BAPT43NTg9Pj1BQEZAQUihqqCrq6GkqquwramtqaelpaWkoKGfnqWXl5SYmZ6YnJ2blo+VmZKRnJihnaqip6Cep6Gln5ySm6Kan6qjj3lXc3VydGlfcm5YWV1eZGdZYl9orK6rsKijn6KglpCTm6CamJaRkp6boaWbnpuWn5qfl5uinqWhnqSfpKitraisqKSstLe2sKe0rKKtraOvpaSmoamorrWzsr23vrCssa6tqaq0sbCoq6iytbezuK2ytKSgnaWfrKGhoqCgmpiWlqCbm5ikoaCeo6GgnpqcpaCfnZyhqJ+fp6meoaOkoKagnqehn5ymo5+ipaOooKmrpZ+dnZudmqainpyjnqeQgYJ/fHh1and1XWxaUmBIUlVIRlVWSkJMRz1LSDhGPDc3Oz49PDo8OTg6Ojs6PDk2Njo8Nzs+PT8+OTc9OT47PEA8OkA6OkA/O0A+QUA9PDk3Oj5APzo+NzU4PT0/QUBEQEJGnKueqamipamprqimqqWmp6aoqqGlpKOmkpOVmJacmpqcmpWTmZuNk5+ZqJ2un6eenKGdnpqZkpiem6GhoKJ+b3tpYGNXTVtSVUhKT1VQR1JTSpmsqqmkn5+ZkpGTmJiWlZSLh4qNlJ2cnZ2el56Zpp+gqKWxqqeuo6uttrC0srGutri9wLqttbSwt7CutKmmpKWsqbmztbvDvMPBtrq2q6+xube8r7OwtcG8t72zs7WirKKpqLKpq6inqJqZnpqqp6CZp6Cfn6enpaSfnaqiop6bn6igpKetmZ+jnp6nnqCmnpycoqGbo6KhnZympaWkn6KZnJukn6CboJyjiYWEfnZybWl2bWhtXFhcQ1dOSkdNR0NGTTw+TD40PDk2Oj0/PDs6Ojg4PDk6Ozs8NTQ6PDg5Pj4/Pjg4Pzk8Oz0/Oz1BPTo/PjxAPj8+Pz08Njs/QT07Pzg1ODw8QERCREFCQ5WqoKapo6mqqKmjoamgpqinrK6lqaWpqpSSl5mUmpqanJiYmZyamJmqoLGit6Swpp+enZ2XmJWZnpqco5+ciF9WX2ZfVUxMRDo+PkJDPj5DU3ipramqpZ+en6KjnZ6dmpybk5KUk52dmJSFnZqgmqukq7KwubKysbKxur28vLm2uMO+v8K/trq7wMS5vbusr6exrbHCtrjCxsDIysDKv7C5ub25wr64s7vGxL3DvLezqbOtqrO1r7Ouqq+jnauntrGtorCmoaOvsa2wpKWvo6GgmqGnoaSqqpmdoJmao6CmqKGcnqKemaSenpiYo6OhpZ6mmZuipJ6fm5ubnIeGgXt0cmtrdHJxaFZcUUZUSERKUEk/RUE0Rkg5NTs+Njs8Pjw8Ojo4OTw4OTs4Ojo4Ozw3Oz49Pj02OEA5Ozs9QDw9QDk3PD07Pj0+PUI+Pjc6QUA+PD45NTg9Oz1DQEFDQkGRqqGlqqelqqimn6KnnKasp7Gyq62jqayVkpWalJecoqGbnqCinJ+psqu7sr+rr6ylnqCgnJyYmp+gmp+fk3tgYGZeTkRFPEpFSDw/OjZOfqqzp6OjoaCepaulnpeclJGZnZiUjIqGiIZ4bYigpKKrrLS8tsO+vrO7wcPCxcC/wsbGxcPIwsDFx83QyMvDsre1vrK+xbu+zM3FzMzM0se+v8DCvsfGwrfEysnDwca+urS6urW7t7C1sqq6sq67t7+7uqq4rauquLq0vK6uuaOmo56mpaKjqaaZm5+Ymp2nqqegoaGkmJSjlpSZkZydn6Sep5+en6KdmJmUmJSIhH16cWtjaG94a2VaW0ZLTEVEU01EQkU3Oj87NTQ5OTc5Pj87PDs7OD48Njo9OTw9OTw9Ojs9Pj4+NztBOj45PT45PT44Nzs6Ojs/Pz1CPj83OkFAPTw9ODY2PDo8QT9BQUE+kqugp66ooqulpKKipaGlqquwsq2upKmmlJWWmpaUm6SmnaGqp6KrrLy8v8PBsrK4p6Ghq6qhnJ6hoZ2cmXtyaV9UTEQ+S2CCc2VCPVyOrqygmZubnp6Zl5eXkoyOlpeTjo2Qi4KDgndycW1wj6atrrS5xbvNx8u/wszOzczHydHMzczHycXFzNHS1c7Tyb3Av8O7xsXIxdHTzdPQ09PMysLFxsbKyM6/yNHMx8bHxcG8w8G/v7+2vrOuv8DDw8fEx8Suv7iyuLzDwsK6vLy1rqenraigoqmlmpagmpmdqKupo6SknpePm4yQmYmVmJugn6OdnZeempOTi5WPhYB5dHNlYmdyb2ZeWllDTkxERVBJRENANTU1ODlCPTY4OkE+Ozs+PDk+PTc6PTk6PDg8PDw7Pz8+PD0+Qzw7OkA9Ojs6Ojg4ODk7QT48QD8+ODtBQTs7Pjc4Njo8PkI+Q0FAPpOvn6ivpqiro6KloKampKuoq62qrqKqo5Kcl5ebmJuirJ2frqalsarFxszOzb+wwaikqKytqqCdo56cnpVoZFtTSENAQE2Qp7Ccg6CyraOenJ+al5aUkpSWkZCPjIeDg4iHg4CBgYB5cXJvbHmktrq5vsvB09LTyM3O0dPR0tHQ0dHNzs7Qxc7U1djS183Gx8nMw8XKz8rT19HX0tXW09TIzMbMzcnSzc7TzcXIysrBxsvHycjGv8Ozs8jEy8vLz8bKv76/vcHHxMzMyMnAw7+tr7OonqKqo5qTnpyYnqaprKSlppaXipWFkZSHkpKSmZualpiQm5WQjIaRi4B6cnV2Z2NndmlkVldRRE1GQElRQj1CPDoyMkE8RTw3OTxCPTs9Pzs7Pj05Oj48Oz44Ojk5Oj86Pj1APkA8Pjs+Ozk9PTw5Njo6Pj08PEE/Pjk6QEE6OT44Ojo6Oz4+PEE/QT6QrKKiqaanqKSfop2qqKOso6OnpqyiqZ+To5iWn56dpK6bn7CrqKyxyc3U18/Gu8esrbO3rK6jnqOinaGbYFJLSERDQEZYttK8sq+mnJycoKShnZqUk5WUiX13cGtlYmhxb3F7hYqAdXBucXRwhbPDvsXR0NfW1tLWzdTW19TT0dPU1NPP0cPQ09bY1dbSy8nO0cvGzdLK0tXW2dXX09fYztLKz9HMz9DN09C/yMfKxMzMzM7PxcbHtr/Kv9LNzM/Gyci/xMPIzs3Q0c/NysjNuLe7qJ+lq6eemJ6jnp2qpa2pqKiSlYiQhIyRho2MiJOVmZCWjJiSj4aHjIR8eHN2cGNgZHJiXVJcSUpHQUVJSj47QTg9NDU4Njs4Njo8QD07Pjw7OUA7OTo8Ozs8Nz09Ozo+Oz08Pjw/Ojo8Ozs5Oz89OTU7PD48PD0/Pz46O0BCOzk/OTg7PT0+PzxBQEQ8hqugnKegp6Oim6CbqaSlqaCfoaGmn6ifmKSimqmmoqarmqOwsamotdDU19rSx8bLtLXBxbG1qKGkpZ+ioVlJP0FDQUlTfLKtppmUl5+cmqCgnpucmZWJd2ljYF9fYF9eX19dYmx1dHBwb2xycXWSxMjG1NbX19fT1tDV1NrU1M7P1dTU0dHM0c3T19bT1dDP0tPRydPRyNDX19jR19LY2dTWzM/Pys3Sy87QwcbDyMbOzdHR0snMzcDKzMbTz8zOyMTKx8fIzMrU1NHVz9LM08K5xbGlqLWup5uorKWdsqiws6ysk4+TjoiKj4OPi4SQjpmNk4+Zj4+ChYx8enFzdG1hY2ltX1ZQX0pKQ0ZDUk0/PD41NDo9NTI4NTU8PEA8Ozw6OTpAOjg7Oj46PTg+Ojo8QD08OTs9Pzk6Pz07PTw9PTo2PD0/QD08PT0+OjxAQjs5PDc0Oj48Pz89RkFEPYKknKClnaWlo5mcnaSeo6OfnZ+doJqnnpyhqZ+vraqqq52mrreoq7fX1NXZ2dHO0L+8zMm2vq6mqqiho6tnQzk9Pkdag6unn5eVl5manJ+dmJyckn1wZWNiX19hX19hYF9gYF9gZm5wcG5rb3J3d5zMwdLV09jY1tnR0tLXz9POy9LN1dTSys/M09bS0dbNz9XV0cXR1MrQ1NXWztLQ2NjX18vIzsTJz83KzMDKwMjKzc7Qy9DOzszOz8jL0NDLzsrCycfJzMvM0tPN09HR0NDKvci5sK67uLWqtrCtqLits767sZqPoJSRjo2IjpCFkY2ZjJGRlY6RgIWIenZvcG9rYWRucGFXXFpJRkZETVhFO0A9MzM8PDg3ODY1Oz5APTk8PDg8Pjk8QDtAOj04Pjk4Oj88PTg7PkI6Oj08OkE9PTw6Nj08P0A9PDs9Pjg7QEE9Ojw4ODs+PD4+OkVCRT6Bn5mlp6Cfo6eam5+cl56eoZqdmpyappufpKefuLa1taykrK6+tLDA2NLX2tzWzs3Kw9LPwcCwqaytqaSwektKRT9ajaGblZOXm56enpyTlpeUiGteXl5hZGJgYGBhYGBhXl9fXlxibXJvb3N0dnZ5pL7M1dHW1NPY1s7O1MvOzsXOytLSz8fOzc3Uy87TzcvX1tDM0dTLzNDS08rO0dXS1dXKwMrCxczCyMnDzMPFyMrKz8rNzNDN08vGyM/MyMfLxcbBxsrMzdDRxtDOzc3Mz8XHwbi5vcPDvcO5srK+sbvDxLWqmKWimZaRlZWSi5SNmpGUlI+PlIKJhnlxcmttZ2BgcGhZWGhWTEZMSVBRQjtDPjs2Nzo4Ojo1Nz09QDs6PD05PD05PT06Pjo8ODs9OTtAPD47Pj5BPDk9Pj1CPTs3NzU/PDw/PDw7PDw4O0FAPDo8OTs7Ozw9QTpFQUU+hJ6bqK2epKSqnJ6fmJKXm5+am56ZmaKVoamppcTCwb+7tbKxx8K4y9XV2drb2MzMz8jW1cTCta+0qKCuk3hydnuLlZqNjJeVkJORkZWWlZCLfGVhYmJgXV5hY2JgX19gYWFgX11bXWdycnFyc3BtcnmkxtPPy9DP09TKxcnJxsa/w8bPzsfFx83K0sjLzs7G0dLQzczUysfLzs/Ix8/Sy9HPxrrEv8bJvcLHyc7FwsjAx83IxMzKy8/IxMTQyMbCxsjEv8HHzMzMz8LKy8jHy9DExce7x8PIycLPwb28v7DByca5vaqwsqelnaKcmJCbkKOZl5mRlZiJj4J3b3Rka2BeZnBhW1dgR0hIR0lNVEc/Sj02NDM1NT09NDg9PT06Oz08OTo7OT89OTw7PDg6PDo6QD1APD09Pjw6Qz48Pz04ODk6QD4/Pjw7Ozs7ODo+Pzw7Ojc5PD49Oz49RkFDPYOgm6qupa6qq5qdoJeUjpedmpmgmpqcm6WysazJzcrIxL68us3NxtDV1dna29jQyc/P0dPIwra7u62jtnxmg4OnrJOOjZaPhYODg4F9hIR+c2BbXl5eYF5gY2RjX1xdXl9gYF9bWlxha3Jyb29rbG9vfbjRyMnKz8vNxLrAw7u7urq+ycbCw8DDyMvJyMrIwcXMxsjLzcnEwsrJwcLM0MXLyL+5wbvGyL6/xs/Lw7/Du8nHyLvIxsXKwL3Cy8bFxL7GvbzAw8XMxcW8wMrCxcfSxcDJv8rJxsjG0MPDxsOvxMvHxMq3v7y6tKmspKWYn5iso6Glm6Ogm5R7d3J0ZmlaYW5sWlxYUkRMRkJHRExERlNANTQzMzQ/PTM6PDw7OTw8PDg7PTtBPTo8Ojs3Oz05Oz07PTs6OD4+PEI+Oz88OTk7Pz07QD48Ozk5OTk6Oz06PDo2OTw+PDs+O0NCRD5/pZypsqm0rrCdnp6YnImUm5man6Kfmp2ov7i8ys/RzMfCw8bNzs7M1c/V2djZz8vSzc3OyMG1w76xr7VrX3l/ppCKkpaGeoCFhX92eHVycF9bW11gYGJjZGRlZGBbXF1dX15gW1laXGJvcm9raWxwb3OPxrzJxczAxsKwtrqysrOyscK8vLy6uMHBwcW+vbm9v7nEysXGwr3GwLi7xMm/wcm7t7u7xsO/vMHNw8a+vrXBvcO6vca7wrqzvMXEwsK3v7W2vr+7zMO8tbrIur++y8TBxsLFycbJxtDGwszHssfJw87NwcXDwL2zt7Cyp6ioubClrbCqrayUenZ3amRnYGhvY1ZeWUpGSkZISkFFQkVJQDk6NjQ4ODU0Ozo7PDk8PDs5Ozk6QD46Ojw6Nzo7Nzo7Oz88OjxAPUA/PT8/Oz07O0A8Pj4+Ojk5ODk3ODo8PDw7OTo8Pjs7PjpAQEU+fqygrLWqt7SyoZ6fl5qNlJaan52mop2et8XCxMjO0srKysfNzc7RyNDG1dTW183Kz8XJxcfBucW9q62kX2V0h5OLiIuEeH+Ghn9+hHt0dGNcXF1eYGBiY2FhZGViXVxbXF5cXl1aW1xeaHNxbWdnbm9yeZ29zMDDusC4rrCxp6qtrKe4tLe0s7O0u7W+srewta+yvMK8wcS8wLu1srq+wLjHubS7tsHCvLi9xsHDu7Wvsra6v7TEt7u0q7i9vcC9sbq2sLa6s8W8tq67v7W3tMW8vsPFwMPFxsjLxcDGxrvHy8DPysfDxsLDt8O9vba5vse/rLW6tbe2jnl0eGdnZWJrbl5WXmBGS0hISkZCREFFRT88OjU2NTYzMzs6Oz06Ozs6Oz44PEE9PDo7ODc5OTk7PDo+Ozk+Pz1APz5CQD1AOjo+Oz89PTk6Ojo4NTY7PT48PDo7OT49OT86PEBAPIi3pauzsby8sa2foJmUlJiXnqujr6qnpMbLzcjFyM3M0MzNyMrIysnKxNDN0s/NxcfBxcC/urfJtqqwmFtocYyPhYiJenh+hoZ3d4F8c2hdXV1dX2BfYGRhXmNlY19fXFteXF1eWlxbXV9scG5oZmttbnJ8pMe/ubi1sKutp56jqqeeq62zraqsqbSut7Gzqa6mrLO8urbDubq6sau1ubu0wrqwwLG+vLu2u8e5wratqqiwssC2uL2wsKeys7W7vKuutaautq+7srCqubCtu667uLvAwL65wr/Hw8XAvMbCyMq4xcfGv8fEw7rExsK7xsnMy7O5wr27s4lzdnZraWFibGhZWFdbQUxLTUlFQUM/RkE6OTo5OTU4NTQ6Ojk7PD07Ojs+ODtAPD05Ojc5Pjk7PDo4Ozs6Pj45QT0/QD87Pjo7PDo9PDw4OTg5NzY4PDw9Ozw6Ojs+PTs/Ozs+QDyKwKuouLe5w62zqZ2ZlJaZoZymsLWxt6bFztLLw8XBxdDHzcHDxr/ExMPDysLJyr/AvMG6s7S1w66psJFcan6Sh46Pe3h9iYV6e4SAd25eXVxcXV9gX19kY2FkY2JgX11aW1paXVpaWlpcZW5vaGZnaWtucYGtubC1rqalqKeaoKWhmpylrK6kqKKrqq2rsKSmn6qttbaxvbmvt6+orri0tLy4tLyvuLm1srzBssCupamjq7Gys6i9qquoq62ttLOmqK2hpK+psqanqK6mqLessbK3urq8sby9vr7Ev7XCwcfIt7/AxbfEw7+7v8TCvsTIzMq/vsTAwKmHc3RyamldYW9jV1ZYUEhZUlNLRkZFPj5AOjc4OTc3NjQzNzo5OTo8Ozs8PDc7PTs7Ozw4OT44PTs8Njo9Oz89N0E+P0A/Ojw8Oj05Ojs6Nzc3ODg3OTw7PDs5Ozo8OTc5Pjw+P0E7jMKvrry3ucSwtrCbmZWcmKqpsLGztb2vxdDPzMPIurrLwcq+u8m2vcO+usq3wcPBtLa8trGvtbutqKuTZWyIg4eLgHt9f354dH58c3dlX11cXF5fYF5fY2NhYmBhX11dXFpYWVtbWVhaXF9ma2ZkZ2Voam9yhamlq6WgnKKllJ6lm5iRoaOqo6Ogpaanpq2gnZykpq2ysLa3p7CsqKq0q7S6sba2rra6sq+6urG2paCkoKaxp6uouaqkp6eop7KtoKemn5ukpqyen6ekoKGxra2ssrSztLC1vLa7wcCyur7DwbK5ucOzwb2/tbi8vb+8wsfEw8O+wMSgg3hwbGJmX2tvYFVZXkhOZ09UR0VLRjw9Pz06Ozs4MjU1MzY5OTk7OTo6PDo3PD88PDs8ODg8OTw6Ozc4Ojo8OTg+Oj89OTg8Ojs9OjY2NzY3ODg2NjY7Ojo7OTo7PDg1OTw6Pj5AO43ItbW9uLrAur22oJ6VnaGmurars7O7s8TPycvCxri2x8DMv7jJt7vFuLPEuLO/wKy1vLKspa+zraGjkmlxhoWGgHx5dXNvbWpqaXBpXmBdXFxcXl9fYWNiYGBgYF1cW1xcWFlYWFhWWFteX2RjYmVnZ2dqbW+Hnamgl5abopaco5mWjZ+ho6ecoKCkpaKnnpujm6CrsK2xtqOpqqqsrKS0ua23sKyzta6zta6wqp+en6SisqSmqbitoqamoKisq5mfoJ6ZnZ+lmpmjnJudr6mrp6qsrK2xsrivuLm7sLa8vLqrs7O5s760trKxtrW/tr7AvcPBu7u9l4R6c2xfZV5kZFhUV11JV1xLUEdJSkdBPD8/QDs/PDA0NTM1Ojs5Ozg5OTw8Nz4/Oz07Ozg4PDg5ODw3ODo7Ozo7Pzo9Ozc4PDo9PDc0Nzc2NzU3NDY2Ozc5Ojs6ODo5ODo7OTo8PzuJyba4vru3wcHBtKSkmZqkpsCyr7astLfGz8jIwMa7u8PDz766x7i4v7eywrSxu7yrubqxop6pq6eXnpBtfoWGf3hybW9ta2JeYWZmXV1eXV1dXF1fYGFiY2NiYV9cW1taWllYWFdXV1hYWFpeYmRkZWZmaGlrcY2nnZSVlZuYm6KXlpGcoqKonpydpaeipZygoZuZrq6urrKgpqKuq6eitbGysqyor7OnurOmtqCin5yjoa2joqq1qqKjpp6lpqOWmZ6XmZudoJqXnZ2dnK2iq6ekpKatq7O0qrWws6uyubSvqq+ysrO4s66prK6yuLG7trq9v7ezsZSFeXVmXmVeW1lWU1pVS1tRS0lFSEtJQj0/QUFAQToyNDUyNDk5ODk7OTo9PDY9Pzs8Pjs3Ozs3Nzc+Njo+Ozo4Oj07PD06Ozw6PTs4Nzk3NDY1NTQ2Nzg1Ojo4Ojk5PDg3Ojg5PkA6gci9t72/tr68v7OdpaOYpbHCtba9rbS4wszIxr/FtsHAxs63wMS9s7m5s7+2sbm7rLK0rZ6apKmflJqPeH+DhH94b3F0cWhlY2hkY1xcW1tdXVxbXmBhXl9fYF5cW1pcWllYVldXVlhXWFdWV2FkZWNkZWRkaGp2oZyTlZCVl5egl5mVl6CeoZ2WoKGppJ+fqZ2cmqunr7Crm6OkuKqhoK6otqqnp62xpLiwpLego5uZmaqmoZqsuK+ioaScop+gk5ShlJaWm5iXlpeclZ+qnqmkop2jqqqwrqi0q6qnrbOwpauus7Gwr66vpqiosq2xtLC8tLm3rqOUgXl1ZF5hVllYU1JUS01eTE9LR0dMTEU9QT48Qjw7NzY1MzQ5ODg5OTo5Pjo4Pj47PTw8Nz49Njc2PTc7PTs5Nzk7Ozw+OTk6Ozo4Njc2NTQ1MzEwNDU2Nzk6ODo5Ojo3Ojs5OT1AOnbAvLS5wrG+uLyunaeoo6q7wL3Aua60uMHMx8XCw73FuMjLssHCwa28u7W7vLW5ubCvsKmbmaGolJGKi4CAfHdxaWxydHBoaGVkZmJcXFpZWlxcXF1eXVxbXF5cW1xZW1taWFZXV1ZXWFdXV1ZbYmNiYmNiY2RmaYGWk5aMkpSUm5mdlpacoJyflqCfp6akpqefnZ+moKqvpp+ipLeooaGiqLSipailsKWxrqy0nqGdlZWpoaKUrbGxn6KjnZ6Ym5OLoZSRk5iYk5eXmJeep5ynoaKapKWlq6SlsKelo6urraaprq+uq6iqqbOmpqyvtLGvvLWxr6+gknp3cmVhXFpdWE5MUkhSYU1WUE9KTU9FQkQ/OT02OTo3NjQ1OTk7OTg4Nzs4OT0+Oz47PDY5Ojc7Njs3Ozs6ODU6Ozo7OzY8Ozg4NDc3NjMzMjEuLzI1NTY7Ojg7Nzg3Njw7Ojs7QTh4u7uxtb2wu7G4rJ6lp623u7zBxbqxubXEycnAw8bFx7bFxLLCv8Wrt7e9tr26urWyq6ynmJifo4uJdImIfnZuY2FmaWhmZ2lmam1gXVxbWlpaWlxdXFtcXl9cWllbWVlaW1dVWFdUVFZVU1VSVWBgX2BhX2FhY2VqgJSTipCOlJOUnZWWl6SZoJedoKWiraalpaOjopyqq6Wan6WxqqChnqWrnqiinq2sqamuraKiopWYo5uckKupsJygop+el5mTip6RjZKTlpCYmJScoaOdpKGilaCipKabo6uloqSqo6uupa6yqaalpqa0pqmorbO1tLm6r6msnoxycW9gW1dWVlJHUU9IWltPUkpUS1NMRUZJRDg7Oz08ODY2Nzo5Ozo5NzY5Nzc6Ozo9PDw2Ozw4PjU5ODo4ODY1OTo8PDk3Pzw5Njc4NDUyMTIxLi4xNDI2Ojg2OTg1OTg5ODk7OUA5e7W0rbS7srCrsq2dqKevubmzwMi6tcCvxcjMusHKzMi1ybyxvsPIrLG4wbW7wLu0tKqsppWam5yIgHKIg3t0aWlqbGdqa21ram1lXVxcW1tcWlhaXVtbXmBgXFhYWllYV1hXVFZWVVRVVVJTT1FZXVxdXV5fX19iZG2OkISRh4+Rj5qTlZOcm6Ocm6GpqauorKeppqSZpa+llZmlr6qgnJmboJ6vmZyrs6Clpp+jpKGVk5uWlpKpqq2anJ+hoJuUkIyZjoyRjJGNlpWQnaKgo52co5WboKOhl6Koo6Koq6CrsKStt6WjpKKtraqoq6+zt7O+tbKrr5iFdHNoW1lZU1VSRVhMUVtYTVROUExQUUlOSUI9Pz9BPz03NTc5OTw8OTg3Ojc5Ojs8PT47Nzs7Oj02Nzo7ODk3Njk4OTo2Oj05OTU3NjU3MDE0MS0rLzQzNDk4ODo6ODo6NzQ4PTg/OX6zraeztq6oqK+um6morLe2rLzKu7a/rMvGxbjBzs/Is8S6t7vCyLCtuL+3vL27s7WmqaCWl5iXh3p0gHZ3bm1obW1tcGdnaWdkXVpbW1tbXFtZWltcXF5fX1xYWFlYV1hXVlVUU1VWVVVTU05QUVlaWlpdXVxeX2BkfoyBi3+LkIqSjZeRl5mioJugq6qmr6yosKWpmp+toJWWpKmonZiQj5qerpeYqKqZn52UpaGekpGSkZOVp6qlmpmZnp6WjYyLk4aJjYOPi5KVkaCeoaSYlZ+VmqGinpSbpaWnqKigsbGmsbynn6Ostauup7C1sLi1wLGtsauRfnJzYlZUVU5SSkdWUFJRTExXTUpMTlJHTUtBQ0ZEQz5BNzU4ODk7OTo3Ojo3PD06O0A+Ojk7OTo/NzU5Ojk4NzY5NTg3Nzk7ODU1NzY2NjEzMjAtKi4xMDI4Nzc7OTk7ODk0ODs4QDh/s6ylsbeqpaKxq52qp6mysaS2xrS5urPKxbm6wcvQyrG2uLu9wcOxr7G3rbSzu7OzoqOcnZeXlIN/d2tnbG5xbnFqcGtkZWdlXlpZWllaWlpaWlpaXFxdXFpYWFhZWVdYV1VVVFJTVVNWVVJOTk5SV1hZWVlZXFxdYWqAen91iY2HkIqXiZSUmJuZnqmboKumpqyeqJqgppyTj5+jm5eXhYSSm6OQlaOdlpaWiKKbm5SLjoqQmqSnnJWVl5uRkoeUjouBi42AkIqSkpKgmqCilpSYmZWippmNmaSmqKahoLSyp7K3oZyit6yqraSysqa1vLWsq7GjiXlzbV1OUVFMT0NNTk5QS0ZOTkpKTk1RSE1KQUdLSEhDPTg1ODg4OTo7Njk6Njg7OTk+PDg6Pjk7Pzg3ODk6ODg2ODU3Njg4OTc0NTc3ODIwMzAxKyktLzEyODc2Ojk5OTk4NDk4OEE3d7ampLawpKekqqWgqKals6qissO1tbKzxsa3usPKzMazrLq9tLfAr62psJ6mrbqvrZ+Zmp2VlId7g25fX2ZycHVxaW5pZWdoal9YWFhYWFlZWVpaWVtbXFxZWFhXWVlYVVZSU1JQUVRRU1VRTU1LTFNXV1ZYWFhYW11hb3N2cISIgoiAkYSPi5SRlJ6hj5uco6KkmaWXopyVjYeZmoxzjYN+jpeWhpGakJSOjnuZj52Mgol/iZifo56Qk5iWhY2ClH5+dIqOepCHk5CQnZuampKWkJ2Oo6OOiZqgoaOkm6K0r6yvrZ+YpbimprGhsK6csLuqqa+qmYN3c2NWTVJPUE5DU05MUUxCUFFISU5STUhKSkRKTEZKSj03NDk4ODg7OzY5Ozc6PDk6Ojs3OT85PkA3OTo8ODk3NjQ0NDU4NzQzMTI1ODUvMDEwMikoLC0xMjc2NDc4OTo6NjU6ODdBN3i3oaO0qKalqKOmpaemp7OnpbTBuLC0sMnEt7nBzsa9s6y6wautw62noaaSnaa2rKOfj5WWko9+eH5lV1ZfZ2ZpZ2huY2poZ2JcWFdYWFhZWVlZWVlaW1tbWVlZVldXV1NUUE5QTk9PUFNUUk1NSkhOU1NTVFVVVllbXWlscmx/hXx0TlhykIOXh46dl4uUkZ+YnZWUlpWPlomAk4pfO1dvfIyUiYCMkoyQhoZzioWXgXmBe4aTnZODlY6RkIOGfZN4cXCFjX2JgZGNj5eamZOLkImdiJ+YiIeWnpqhoJenrqmtqaielq2zoqatmayrmKizoqmto5N+cm5gW05TUldMRFRKUExMRk5PSUVMUU1LT0pJTFBGSUk9NzU5OTk5OTo3Ojs6Pj44Oj09Nzo/OD4/NTg5Ozc5Njc1MzMzNzYwLi0vMzQ0MTEwLy8oKSsrLTM4NTQ3Nzk8Ojc5Ozg2QTl5t6CjraGmpqqgp6moo6qwqKe0wbmwtbDHwrezvc+/ua+utcKnqsWpo52Yg5SbsKKZl4aUj4uHfXN1XVBMUlVZWlddXmJnY19ZV1dXWFhYWVpZWFlYWVpaWllYWFZXV1VTUk5MS0hHYlxNT1JNS0hGSE5RUU1QUlRWWFpgbW9pe4J0UUJAf5WSkn2JlY2Eio2bjpaViZKIhpWGeYl/YEpRbniLkoR9hI2KhX9/bn5/lHh1dniEjZlvUY2IioZ7fniUdmd3hoh9iomVi42RkpeMhIqIlYSajIKEkpqWnp2UpKOoqaWknpqwq6GkpJGmqpaiqpyipqiJdW1mXltIUVFTTUlVTVNJTEtPSUhGSk5MTVRLUVBPRklDPDc2OTo4Ojs7ODo7OD4/OTk+PTg7PDY7OzQ3ODs2Nzc1MzQ0Njk2LzMvLjEyNTIyMS8sJykrKiw0ODMzOTc5Ojk5Ojo6Oj85d7abo6edn6GvoaeopaeosK2qtry2t7ezwbu2p7rIuLaoqLW2qrK8pp6VjX+Jk6iWlYp+joOCfXhwblhNS01OT0xNUVdbXFpYWlVVVlZWV1lZWFhZWFhZWVlaWFhWVldVU1BNSkVAQJtrc3NJTUtERERJTk9oWU5RU1RVWm6DdHd+amlcVY+JlIl0f4eBfIWMk4KSmouPe4aPgHaAeHNvdnB0jY6Ben6Kq4V5emh2e45wcm14gYuNknh6gHuAdnJykndodYSEhIV7lYqIio2LgH+Ei4yAlIN8gI+YlJyWkZ6dqZ6foJ2gqaWfnZiMp6SToaCWnp+kgHJoYVxdSldQUkhKWFJPSkxNUkpKSkxQSExRTFJUTUVIQTw3ODs5OT49Ojs8OThAPzo6Pj03PT03OTkzNzc4NTY3NTI1MTQ3Mi8yLiwvLzIwMC8tKygoKS4xMjcyMTk4Nzk4Nzc1Ojw7N3aumaOimJyftKmvqaWtrLCyqr20sru4trq0sZ+3urKqnZ2sqaiyr6GakY2UgY6cjpF/doZ4fHZvb2lYS0hJSEdFSEhQVFRUV1dTVFVVVVZXV1dYWFhYWFhYWVlXV1VWVVNQS0Y+OTNOPH6eTUhKREA9QURqlH5MT1FRU1ZedYN8eGZ3jZeYjY99aHmBdniAiZB9hJiSgXKHj3x3e29rfq18c5CKf3uGkoF9f3RmdnyGbG9oc32JjIiAbHlxfXFtdo9xaHGBfo5wQ4uEgoOFf3d3eouFfYx7dX6Oko+YipKam6OWmZ2anZ6hnJaNiqSbjp6XjpaYkHdvbWViWlhYVVFKU1VUT1BOUFZLTktOT0pRTkhPT0xGRDw7Nzk7Ojo/PTk8Ojk5Pz87ODs9Nzw5OTk5MjY2ODU2NjMzNjExMjI0LiwsLS4uLTAtKyonJyouMTM2Mi84NzY5NjY1Mjc5OTV5ppegnpagpq+srquoqbGvsau8uKy7vrmzrKebsKesm4+WnKWppKCXmY6FknmIjouKdXF8bXVwam1qWEtGR0VBQENESUxMTVFSUFFTVFRUVVZWV1dYV1hZWVlZWVlWVlRTUUtENzhmNzA/qGlOSEM9OzpEioV6WkpOT1FUWF1lcHJtiKeqwH51eWN8eG98eYiQen2Lhm9tjJJ5dHhqaoCCcZaRi4F+loBJk5huaHd+gmxpY2x5hZCShmtzbHxucnuGaW1wf3ONiYSGe31+e3ZvdHOFgnmBeXB8joyKlIOWl5iakJKVl5mXnZaMg4mekYuSjYaQloBvam5vblhWWFRSUVlPUlRUU1hVTU5ITktNTktDSE5HRT86ODk7OTk6Pjw5PDs6Oj0+Ojg6PDk/ODY4NzI3NTY1NTQxNDMyLzAyNCorKiotListKigqKCcsLTEyNTAsNTU2NzQ4NUhBODk1d5mRm5man6WtsKOsqqi1r66stL+rvMK/pqKZlaSXno2Ei5ShoZiYkZOLc456gIaMhXRvdGtxbGRsallORUZDQDw+PkFGRkdLS0tNUFJSUlRUVFRWVldXWFlaWVlaV1ZUU1BMRTFAmjMganNDmW87PDk1PICChl9JTU9PUldaUVlcYKeIYpppdHplf3Btf3qLiXaCiIZ0bJqRdHN8amudj015hZKJhI5nMXaGc2x+foN0ZmV0foSEhYBmaWx1a3F/fGhxcXxuk46PfHN9fHFwbnZtgn93eXVqeYmCiImElpKSkIuNkZSUjpeNgHmIl4iGioaAkIh3a2tvaGVYUVpXWVlbTVBVVllYTklIRUpKSEdCQEZEQ0c9OTk4Ozk6OTw6OTs6OjpAPDk6PDk4Pjc4NzcxNTIzNDUzMzY0NTAzMS4qKispLCwrKykoKycpLCwyMjYsLDU3NzU0NzhpTzg7NW6SiJqRmZakqK6esp+nu6+rsrDCsbvDx5qWj5SZi46GeYSQmJSNkIyPhnGHgnSHjIZ6cHJwb29kcGZfVEZJQz88Ozk6P0BBRENFR0lMT1FRUVFSU1RVVlZYWlpZWFZVVFNQS0U4MC9cYLNHOVhQOzk0NDGWuotITE1PT1FWTEFJUUlir7Ogcnx4bH1tcoOChYF6hIaGeXKhlXR4gHN1lIc1cZ2onY6hoYSihHZwhnyHfHOMrY2JgGdnYmpucm1wg3Vpb1h1cI6bkndsf3p9bXJucIB6c3ZuYnaDfoaAhZCQioqJkYuRjIuOg3V4io6AfoOAfY97cnBwbGBbXF5cWVhhX1JOW1pYV0xISkZKRz5CQUJHPkNEPTs5Nz07Ojs7OTo5OTs6Pzw4OD06ODs2NjY1MTEyMTI1MzQ3NDUzMS4vLCwrKSopKSoqKikoKikrLzNETTIxNjY2NDM8dlI3PTdikoGTiJaRnaSnnq+VpbWqrrGuwbK7wcaWkIyUj4CIfW6BkJKJg4qHj4V1goRslYiIe3R4eGx3bndjaV5JUEc+QDc0NDk7Ozs9PkBCRUhMTExMTlBRUlVVVldYWVhWVVRTUExFPDUqnUtbQC1nSTk0Lz+Sg6muX0dMTU5QTDdDTVJTREqGdoB8fHZ+bXeIiHx+hYN/jH52opl5foaBhZmEm5xhhqqfnYuDkI16d4h+iYiNc4qXkIN6XWRydHp8d4ptaGpieW+GkIJ6boF3dIR6cHR5d2tuaV13h3yHfIeHj3+LkpeDjYWMhn1xhH+DfXV3e3yJd3BzdGVnX1tbXlRcZ15XUVVYW1VHSkpETEc/RkBEQz5BQT06OTc8Ozs9PDo6OTk7Oz0+Nzk+OTk4NTY1MzI0NDAwNDY0NTU1NC0sKSsoJycnJigoKSkoKCsrKy8wMFVxPTIzMzMxRX5XND05XIx4ioCUjJKcnZ+mkaCroLGor8CxusW6lo6RlId6hXZrf4yRgn2KhI6MeIOAc6GEi319gX9wgH56Z3ZrUldMQEUyMTEzNjc2ODg6PD5BRUdGR0pLTU9QUVNUVVdWVlZUU1BNRkA6Mj0gI5ZjjFs1MzExaT9Hb0lGSUxNT1JMS1RdWVJKaYSIe4l5fHJ8j4x6fYmHfpeHdqGZiIePkpSljaypSIaur6+LgYCTioKLgYSSqIeAmJiKm3RtfIGGh32OaGdoeH9uhYeChXGEhkdsgHdyeXZobWtfd32DiX+IhYt6lZ2biYuIkX96dYt2fHhtb3d9f3R0cmxbXV1bY2NYZ2ZcVU9QVllQRExLRk5JQ0ZDQ0FAQ0E9OTc4Ojo6Ozs6ODg4Ojo/PjY7Pjc1ODU3NzMzNDQyMzY2NTY3Njg7REZMTU1MQzcrIiUnKykrKywvMDArbnUyMjQyMEyBXDU9PF6EdHx9iYWIkY+WmJKXoZ2soaa4r7O8s5eNkouYi310cH+Jkn59jIKSlH2Gfoakh4h/goiFeIeIfnOEeF9jV0tCNjAuLzIzMTIzNjY4Oj0+P0JFR0hKTE5RU1RVVFRWVVNRT0dDPzgwLCOHWz4/ODQuXZZwc6NVRklLTU5QV2BZcFpcXmqNk4eVgISChZGTfoWIkYGalYKhoZiVm5qlrZOau7Gnu8fDqIuMoaWPlImBkXxxg56fkZx/doWFipCIkGlob4OAdIyHhItxhYJ3h397doV9bnZ1ZoCUj4aJiYeIh6GqopaJjph/eoKJenlvZ2t4fnp+cmpkXlpaXWpdYWZgWU9LTldSUUhQSkROR0NKREJARERBPDo4Nz08Ojw6ODg3Nzg6PT04PD02ODY1NjYyMzQ0NDU3Njg2NzxCQj88ODo+Q1FeZVxHMicmLCwtLS4xKD+LWy4zMTBPg180PztudXBmeIN7gIyAgZGOipqbpJ2hrKarr7CXkZGEoZSEeHd/jJR8f5KGkpV/ioCSm46DgIGMi4KJjYN/iX9tcGpdQkE0LS0vLy4vMDIyMzQ3Nzg7PT9CREhKTlFSU1JTVFRSUE9IREI8ODcvOUQ+PDw2My5sk5dNUEhJS0tLTlZgY39nZ211nZqPmpOTi42OmoiTj52LoKCSo6qlo6yTqLaiqMHDrseveLqUmnyNoZ6ZhJOFgo+hn5OYkoSLhY+ZkZZscHWJi4KWjI2Pd4+EcW2FgYqWkYOFiHKIoZaHk4mOj5altambjZWig4eTg31/a2prfICBgXNhXWNeWmZrXGxrXldLR09TUU5NTEZJUENETUZBQ0VHQj46OTc9PDo7Ojk4Nzc2Nzs6Nj06Nzg1NDU2MzQ1NTY2NjY4NTU2MzEwLiosLCkoKS46UGFcQCwoLSsrMCwncog3MjQwT4RiM0A8dW5nWXCCcHWHcXaShn6XlpqVnp6cp6CplpOYnmdlpJp+hJKReYCSiJCSfYqEmJKRgoCAi42JhZCGhIiFeHh+Z01SPi8uLiwvLi0vMDAwMjEyNDU3Oz9DRU5QUlRQUVFTUU5QSUVEPjs8OkNGPz48NzUyPD9SNUhISExMTU5SXm+KfHOBfaCdnKilopmhl6KVnZ+onqiroKisqaq1l6u/q7bIyLfJ0c++m6Bwaaupn4STkoWcoZqbmaeRkYmVopqaeHp+lJiSoZKWmIGUnnt3lZKrs4iNl599lJ6cjpOWmaSiprawnZGZqIiWj42BiGxzcnx/fHFoYFxgXmJnY2BoZ1tSRUpLUE9JSkxGRk1DSExGRkNCR0VBOjg1PDw4OTk5NzU2NTg+NzU9ODQ3NDU3NTQ1MzY5NTg6NjE2ODYzLzAuLSosLy4tJyMqO1hiQigqLDEtKEuXXjA2M1GFZjJBQGlhXlBwdWBufWF3jn17lI6Oip+Sl56Wm6qYnqpCRH2HiYeYjXiCjYqOjXyKho+QjoGCgImMioSShYOGiYGAhndfYlA0NjAtMS8sLjAwLy8uLjAwMTU+QUFNUVJTUFJTVVJOU0xFRUA8Pj1HR0BBQDg2NjI8OTtGSEdJSk5PUVlthpB3lYujp6q0vbikrqysp6i0q7C2srKtu7Gzvpyzw6y7ycu3w7+4paOwsqytqqOLlpiFpqago5eBppmNoqqopIiFlKShoKqhpKmPnLGLlaOnt7uboKOwk6Odo56RpKKrr62ztaKUpKqImYmSipV5en6FfmdgaFxlYl1kY19mZl9aT0NJSFRPRkhMRkpHRUZIQUtGQ0ZGQTo4Nz08ODg6OTc0NjU4PDU0PDc2OjQ0NjQ0NzM5PDM4PDIwMjU1MS8xLi0qKi8sLSooKiYlNVhYLywwLCwwhIE4NzFQhWg1QUNbWFRMaWNXanBYeoV2gZOFiIKbg5KRjJLayJ2Wc1aXiI+InI98hoyOiop6h4KHkY+DhYCLhYaHkoaChImGiIeHcW5hQEU2NDwyLzExMC0sKy0xLi0zP0RBTVVRUlNVVVdVTltQR0dFPD4+RkhDREA4Ozw1Qzs9RktJR0hST1BXgZOghK6js6qxwcfDqrPFtqyzv7O4vra/tMG2u7ukuMaotsnHtb65tKijtK2xsZuZkpqfiaivq6WUdp+kl6GrsbOZlqqtqK62u7K6rK+1orGssbW8t7WutaCnp6OomqmwrbK6uLinm7apjKWOkZOfhniCg3VZYWRWZWFhY2BhZl9bVEpERUxVUUhJSkRJR0VBQEBLREJNRjw4Njc7PDk3Ojk4NjU1NTcxMTw4ODk1NDY2NDk3Pj0zODkxLjAxMjExMzAsKiwuLCsrKyooJyopRVowMCovK2iSTzYwUodqNkFGV1FKTFtaUWNkV3l1cYGUfYWHk3aFf4CMe7+7o7yCtJSTjZuPhIiPkomJeYaAjJONh4SBjn+BiY6GgIaJhYqHkXp4bl1WQEVNPDY6NDZBQjc2NC8vNkNIQ1FbT1FVV1VcVk9eVUlLSkFAPkdLRkVEOz5AN0Q3P0JKSkVGV1RQXo+lrqOxtMO2uMHMyba7xL2zs8C3t8G1v7C3dLGzprrFpLDGubGzsbSopLW2qrGgoZabopKlsK6mraunpJigrLO6oqmyurS7vsy/xcW9vbPCt7q4v7e6t7msrLCmsaqtvrC9u8LCrJm6qJSuj5eXq4l9gnxqV2JhV2plamVXW2RZVlRJR0dMUUdDSElBSEQ+P0JCS0BATUM5OTY2OTo/Njo5OTY2MjQ2LzE5NTk5MzY0NjI3Oz0/NjoxLi81ODo5NjUwKigsLS0tLCwqKCgrKyhFUy8qMDBKj2s1MlCHbTY/RlJMQUxSV1RZVVp2anB/j4SBjoRuenN5h2K4oZmjiZWTlpOUk42QlpKHhnuGgY2WioGEgYp6fIqHhnyKg4GKg5V9eHp1ZU9cZEdFTDpRY2FbXlNGPztIUERaY1FRWVhaZ1lUYGBNU1BFQT9JSkhFRkFAQzxFNkI+SEdKTFNaVF2Tr7i1urnJv7q9ycy7vMG8t7W7u7e9tLqxxmF1sqWxmp6qvaqlqKuqo6KytaGrqJ6Vlp+Yn66lp6aln6OUoqaxtKeysr22wb3TycrTxsLFy8HKw8C+vb+7vLe0sLm3tsO6xb3DyLCeuaqiq46lqLaJgH9xX2JiXVdhX2hmUlhhVlJVSUVFTktBPkdEPUtCPUJAPUY+O0hANzk2Mzc5PjQ4OTo1NzA0NS8yNjM4OTM3NDQyNj84QD5HS1JUU1FQT1FRUEpBOS8sLCwqKygoLC0sL1A+KC40OIB9PDJLiHE5PkNLRUBJTVBSTFFdZ2xscZCNhZBzbHJyc4jVwLWZoI2VmJmRjpeSlpaOhod9hoOMlop/g3+DeHuLg4d7i3mBioKXf3R9emtlcHVZXVxQZWViYGVkXVtYV1xNZG1VUm1tX25fWGdlVVlVS0RBS0tIRklISEdCSTlEP0hLVFRWXFpbkrnAub23xsC6uMrLure6tri5sre1tK62tplkdaicrXBeoa2cmKCim6SeqqWUoJ+QlI6WmJeon6WfnpqahKSdrKWqsKy3sL251NHP18/JzNHMz87KxsC+wsq9wbzBwMTExcq/yM60pLuwtK+bq7m8mn95bF1gXFleYVljY1FcYFNQS0NCRUdFPEBFPkJIQkBEPTpFPj1KPzQ3NTM1Oz00Njg5NzcwMjIvMjQxNjk3NzU1NTVEM0VMTT41MS8wMDY6NDc3QElPSTstJioqKC0uLyxATSsvNTRtiUkwSIl0Pz5CREBDREZLT0RSXFlpX3CXkpCUb2xvdXWHs6yhoZ+LmZyZjI2VkZuShYqKfoiHjJCLiXyBhHN7ioOFe4l0gYmGlX9ze3hrbXV7aHJlaWxpZmppaGBmaWhsWm50l62kvIiHZ1tvaF1aWlRIS05PSktRS1RRSExBSkdLUF9eYmZpYZe3x7C5s7u+tbHEx7WwubCwu6uysaeqt6yNtqedm6eaT5qdjI6glpGmmKWVipOTiZCJj5GRnpuhl5qVloeemqabrK+or6eztNTU1NbSy8/U1c7Tz83FwsnQv8rJysnSx8zNwtDSuLDDvMS5pba6xKKCbmNcXF5YYVhZZVpRXVdPT0JCSEVCSTtBRD5BRz8/Qjc7Qz5ASD00NjY1NTs6Njg3NjU0LzEwMTQ2Mjc4ODc1MzY3QzVCOD8tMC0xMzQ5PTk3LC4sMTtGSz0pLCguMDAwN0s/LTQ2VIhXMESHd0M7Qj5FQkFDSk0/VVlTZVdzkJCYgmhxb3l5g6CqnqaXjJubl4uOlZGajn2Ji4WOioqLkId8hIJwf4iBhnuHcoOSi49+cXh1a3F4fnF7bXhzbGmBcG1jaW5weGl3fH7Lv8Lfp21jeG5jW2FgSlBSVU5ZXlBeXU1QTlRRVVRcbm52gnKXrbistKewtqusvMCxq7WmpLimq66hq7SjjrGumpiYjJGTkYSOm4GNp5KciYOLhIqJhIuDk5WYl5ObkZyYmZmenquspKehrK3P0tXRzczS09TQ1NHOyMPU0cjN0tPT183S0cXS1sXAzsfHw6i+t9Ceem5lXWJdV2BTXVtPUFRQTkg+QUZBQkU8QEI+RUQ+QD86PT08PEpBNDU0NjU8ODg4NjY0NDEyLzAzNTI2NzY4NTMzOz08RT1AMTErLzI0OT41OTAxMDIyLTJETjMpLzMuMzI9TjIzOEN9XzJBhnREOj09ST5AQ0ZIPFZSTU9bdYaFindsd3B9fn+hnp6hi42Zk5OMjJOPloV5hY+QjYuKiJGHf4J7cn6AgYd5hHWFk5GJf292cmtzfHt3fHOBd3FrgHNyaG9xenlye77Lm36MsoN2coR2aGFqXUNaWltXZmRYZWtTWF1dYGReY3h7fouBmaqkpKGgoaimqrC4qqW0o6GtoaOtoqexn4mmmpSSkYmRjoiBlIlrlaKNmYSAhX2Rg4OTlq2LlY2VmY6FkpCdl6ewoaChpKSoyM7PyMLL0dTR1NPO083G1tLM1NjW1tjU19XJ1NrNydfX0cqsxMPLi3NvYmBfWFRaU1xQSkdJSUpAOzo7RUJEPEJEPkhCP0JDOzs5PDpHQjQ2NTQ0PDU2ODc1NDMyNTAvMjU0Njc0NTU0NDw+PUU/QTYyLy0xNjs9MDgxLzI1NC8tLTtSMDE3LzUzMkZEMjg+bmI1PYF0TTk5QEk8QUQ/QTtQTEZLWXCAdX1oc3hygomAnZWdlIWLlomPioiOh49/eISUmYqNiIiLiX6CeHN7fYOHd396h5GWgINueHBtdX92eH50hXx5bYd2dG59doR1eXudtow8QYvGpX6NfGllVklDZmNlY2hqZG94W19maWtuaW6Ag4mRi52eoJ2Ql5ifo6SmsqSks6ChpZ2gqaCisZyGnpKSkpCLjouGg5CEfpybjI2DhIV6lH6CqZWjjJKKl5KLfZeKmpGqs5iam6ecp73Dxrm2xs3S0NLQzNLLydTO0NXa19fY1NnYzdjbzsna2tLVv8vMtHh2bmRdWVJWUVpWRkdKSkVFPTo3OUBBQjpIREBFQ0FEQjs/Ozs3REM3NTY1NTswNjg5NDQzMzQxMDE0NTU4NzQ0NDQ5QD5EQkM8MzMuNkZUV09RSkFKRj8xKiguQlMzOTI1NC83Szc1PGBiQTxzdlY4N0FIOj9DPjw5UUVDSlRsbm9wYXFxc4aNfJeRnYt+h5KCiYaFioGHfHiFlpaIj4OHhYd6hHlxenuEhnV6hY6NnXqMcHxvb3p/cXyBcYOHgW6OenV3fXyCdX98h4iwdFmpwraMkoJwbmI9XmhycHFwbnh3gWVpb3J1eHJ7i4eOlJKblaCVh4yTm6Cbn6qfoK2coZqZn6Wen6yZi5qMkZGNhH2Ih4OFi46gmZOIhId+bZl5hJiGiJOMjpSMhnubiJOPrqqUlZeemKeutb2prb3Gy8jJzMvPyMPRytTW2dfY19Tb19PZ29bP29rR1snUy5V5e2hoW1lQUlReSENFSUk+QT49Nzo9Pzs+SD0/QUFBREE+Pjo4NkRCNzU1NDc5LjU2NjQzNTUzMjMyMzY0NzU1MzQ1N0VCRENFQjU2PEZOU01bbmZjbnNrYVY+LDRMRzg2NTQzNEJGND1XX2hMdXheODs/Rjw8Qjw6OUQ/Q0dSa19tZGJma3aAiHGRkJqAeoCNfoKCgYR+g3x8hJeOh4t+hoaAd4J5bnt7h4F1epKejaB2j3WCdHWBfXSAhG+Bj4JvkoR0fIGFenaGe4m3xqXCybeBlpuPd3BlTmZjgXqBd4aikIt4eXd7g398hHZulJaUlY+YkIOKj5aal5emnJegl5+TkpejnZmrlpGQio2RgoyFiYiBhZCRnpyZiYWLgYaYeomJn5ePiI6Ki4J8oYmQi7yhmJOXmpyppqWun6i1vsDAucfJzc7FzcrR1tbV2dXX29TX2drb19va2djO3MaGenlnaGVgVFdWVU1LRE5EOzw9PDk6PD45PUA2PT9APD8+PDk4NjdDQTY0NTU9ODA2NjU1NDc3NDU2MTM4NTQ1NjQ1NjdISD1ESkU3OTI1O0g+Ozo6N0lQXVpSVVhLOVQ+Ozk1MzI3STg9TllNSHh4ZDU9PkM9PUA6Njo+PkBFUV9ZZWFdW2h0enlsiY2Sd3Z6i3x+gH5/fIV7foGRiYSFeoSIe3V9dG58fYZ+dH6SnZGeg5J8hn54jn15iopugpqAdJiFfoGJhXx+kHqPqY+Qw6C8jJyjnH2JhH2Jc4yKfnOmmpyYlIV7j5CJhGhHcaGknYyLkJKFiYuQkpWPnZqTlZGXjYyVn52UoZSSjo2Qi36Qjo6LhIiSlpqfn4mMlJKekYKLgKaZiISOg4aEgKWGiou4mJ2RlZaip6Gdnp2jrra6tau/xsrQyMfMz9PS0tjS1dfA19jZ29ja2tnZ19y3eHh3a2lkV2BbVFBPSERMQj09Pjk5Ojo5OTs9Nj8+Pjw9OTo7OzM3REA4Mzc4PjcwNjg4MzU3PDM3ODA0OTc2NzU1NTQ2RlA1RE5JODkzOEFLPTszQ0BJPDlEV048TVRITj85NjMzMz5DO1tYPjVZeXBaPDxBPD0+ODU4OT89RFJTUlheVVhmbW1taYGOinFyeYp7en98f3uIe3x7i4eCfnWDhnlzenNtgX6FfXeFm6GbnZSSgIuIf5iHgJySboeohXqgi3yRjoOIhJx+mpGKjaOin5CkrqCLkYuFi4GShldyrYufq5uPg5ibkJCOXIKikYKMn5OVjIeIjJKTjJSUlI+Mj4qIlpudj5WWkYuSlIaAi4iSjYmKnJaZo6OGkp2WoYuKiI6ckIOIj4CDh4WkhoyQs5idkpSXoaGemZKcnqexuKylvMLHzcfGz8zPzM7Xz9HUrtbV2NrY2trX1tnan298dGdnXF1YU1dYQ0BJRD4+Pjo0OTo7Nzo7OjM7Oz89Pjc7OToxOUc9OjM3PUA1MDY3NzI1NT82NTs1NTg1ODo1NzczNUhSN0dPSzk5ND1FSkI+MUZDTEI5ODpHWEA1SFdJNjYyMjM6RUNlWD8mX3lpX3o+Pjk8Ozk4OjxAO0JRS0tTWVBUY2J4bWJ+koNvbXeLeHl/eoF8hnx7d4aEf3NwhYJ6dXZ2dISDhX1/kqajn6Wilomdj5SXi4qol3KKso2Ep5GEmZOFmYuilqCYk4mbnaGSqa+fkZSQjY2IlYtujbeFmsTIspyhpZucmJaRspFkpM3Hlo+Fh4mQko2Nk5SKhYqKhpaam4+QlJOGlZeEf4+LmYiNkKqXl6SjiJmelpuJj4eXl4qEj42Bf4ePpYmNk6mal5OWmaGZn5mTnZujs7Slo7zBvsfFxcnIycLK08zN1KjS0dbW1tja1NPazoJyf2hjX11eTkpUWkJBR0Q7QT04Mzc7PDo4PTY0OTo8OjgyPzk6MjlJOj42N0JDMzI6OTYyNjQ+PTQ7PjY5NDk7NTc5NDRLUTxKUUs5QTdCR0lANjRKRUxGPjw4OEVUQTc+XDg2MjE0OjtFYFhBRmF0aExjWj41Ozo6NTs6PjpFTUZIUldTUkJjgUZ1go99fG1+iHh6fnqBgYN+dnaAg3xsbot/eXx4eHyEh4t9iqOzp6OqsqGWp5+lpJaVrqKDkLiVkrOZjaGgjKWbr6OknZiQp5anma2vpJeUlpSQi5iZlqDAjqTJuKuboqatmJGbnLKdhoWoopyYhYiJjpWNi5OPiIGGh4iTmJSMi5OThpSYhoSRkJx0kZmzlpeloYicmZOPipCLl5qJipaOhn2MmJ6JkJCcmpmTmJiglKCdlZ+bobGuoqS3vrTFx8S9w8O/xs3KydKnzs3T0tDW2NPQ2LtyeXZcYFVfV1BISU5FQkNFNT46NzY6Pzs8Nz00MjY2OTc3ND01PDU8TDw+OzxCQTc1PDs0Mjc3P0A2P0A3ODQ5ODc7PDU1T01EUFJMOEA9RUFHQTU6SkVORUQ6NkFAQlM+OURPMzIzNTc1PXZcPFJcdGlaTV1TPD04OTU2Nj06SkZER05bXFlJZmA7SISLenpuhYZ6fIR4gIWBfnB4fH18b3KNen2Be3iGi4mGg5Knu62osr2vpa2zs6ijorCsipq0nqO4pJWtpJaprbempKOfmamYqaOvsKqamJyUlZGXn5eZu7utyaFptrirsJSYnqOrk5e+o16qsoKJio2Uh5F8jo59g4aOj5SViIeTl4yQlY2LjJeYkp2ZtJeWq56Lm5SSjZCSjJmbipKekIuJlaChjZSNmJqdk5yZnpShoJScnaWvqKGls7irwsjEtbq9u8XHyMLRocbJzc3E19bRy9OhcHpoXVlTXlJPRkQ+PENBQjg/ODc0PkY8PDY8MzUzNDU0NTRCMzo6Qk06QTtBSEI7OkA8NzQ2PEI5P0BCODc0Ojo2Pjw0N1RLQ1VRSjc8OklBREA0QUpITkJBPzZEQTxKTkQvVD0yNTQ6RUpcWEpaUW1ncHBEaWBLSTY3NTc6PkpAQ0lQZUdiYGJwSUCLin6Bc4aHfYGIdYKKg39tfX18f3B3h3eNgYd7jY+MhoyZqsLAr73Gu7O0wby0rauztoyosq6uvKqbu6Sorbm4q6amoqGjo6ivsrGrnZykmJuYl56ipaWSo7muqMC7rK2yuaWkp32Ih5ysvbCDjIyLkIOPg5GPeoGHkIyOnIiHj5eNi5WXlJGalp2nmrGakaydjpqPko6UkJCWl46RoJGJlZujrJSWj5ScnpSgnZuYoKGVmp6np6SipLCypsHHw6+wurbFxMK+zafHw8fDvNXRzcTKiHRzYlxZX1tNSkJMQEVHP0E/Qjs6ND5BPD01PTY+MzMzMjQxQTE3QEJOPkdAQ05DQT1DPTs4NkNDNUJJQjo4Nzg7NUI+NzlWS0RXT0Y4PTRLQEM+NEVLSE4+QUE2QkI/QlNFNThQMTQ1Ozw4O0Q+OUxqal07V1JkS2daVU83OUdFP0NGXGZGYGlnWl1bk4yMiHuHi4aDjHWGkIqBb358gn9xfoF6lXqRlJSYkJOVp7TGyb/CzMHDuce8uq+rubuXsra6ssCupcCkq6+7vKqtq6KinaeqrrSwqpufqpuhm5WfsLSni6K6urXBu6upnLKlpKiUhY6qw8SkgouPh4iEhpWUjXqDjJGOkaGMjJSRj4mXn5eTmZWYpqCunYyqnI6Wj5KRlJWOkJWRj6GUhpefoLKelJqUoKGZpJ+aoJyglJmepqSmp6SvraXAxMOuqLe1ycO+ts6yxL7EvLPRysjCtXR5bVxYXGlTTEhETEtLSkFBPUNEPDVBRDs6Mz04QjMzMjI2M0EwNUlFTT5JQEhSQEg+Q0A7Pj1GQTVBVUA7OTk4PDdFPjg+VkpDV09HOD80TEBCOzVKS0NMP0I/PEJGPUFITDkrRzwzNjc0NjRBPzdPYU9hRS89PjZrbGpgQDpIPj9FQmZaTWVcZlRjapmNl4qMiJKQhol5hpSQgXKAfI1/eIeCgpB5jaGWqJqamLq+yMjKwdLJysLMvMGzrbu+p7q/vbzEt6zBqayyu72qsKmjpaOsrbOttrWgn6+epaKYo7S8qZuovMGjtravq5Kwrausl4aaqqalkYKMk6WViYB1ipJ5hY2SkJ6fk4+Ui5CNlKOZl5yVlKOfqp+RpZqMj4+QlZaIfI+VkpKjm5Wgopy1ppCel6Wko6WenqaYnpWXm6WjqaiisqyovMDEr6Wzt8zAua7Es7u+wriswsPCwJhteWFYV1xbS0tNSkZERElCQkFDSzo0REg5OzQ8N0UuMTIzNTJCMjZTSE48SkJKUUVLQ0RFOkVMQjw3RVY9Oz04OT88ST86RVVJQVdRRjdBOks6Qjc5Sk1CSUBDPjxERzxCQ089MjBIMzY2MTcwPUI6PWpqSks1UVMzU3BwZE47RD1ARj5qSF9YYVpkZFaej52Nl46ekomKf4mfk4R3hX+Vf3+QiIqQf5Whmq6mo5jCvcjDx8XTzc7Ny7vBt6+6vbS8yrzDwbW2vK2zv7m8rq+ooKintq2tqbG3mp6toqehnau3t6mlr77Dsb25s6eqtLOtrpaWpayooJGOkrHFp5WOfJGVfYeRmI6pmZiTk4+TlZOlnpOdmZOho6KcmJ+Zi42Qj56IWpCWl5KWpZllmKOesqWWopasraunm5+ml5iXmZWhpKmmn7arqbq8xLWltLXLwbiptqyyuriuqLi6vbiDbG5aV1RVTkZKU05LP0JIRURIR0c5NUZNOz43PkFKLjMyMDI1QjU1UFZOPExGS1JMT0hHST5JUT86OElTOzs/Nzk+RExCQEhTS0BXUEY6QT9HNkE3O0hNQ0U7Qz00RkU6QkFCRzkvOkEzNjAzPkdEOTQ9dGRNRztFKzpmfGhXOz1AQkZCcUZpSVJlYkxGpZSclqGXqZaNkIOHppOIgYeCnISDlZCQlI6aop+vvq6hxr3FxMbGzs7O0sq+u7Wxuru8vs62xL23ubeysrWzuLOsppyrq7iqqKevsJejrqSnpKS0wLCqrLS+wrnAubOnuLS4sq6Vpa2vrqWLk5WhjXTBmn6XmYWOlpmKsZWamZWSk5mZpqOVn5uWmqmdnKGgmouNkJadYEqWnJqVmqWWVJawn6+cn6WUr6+sppqhppSTmZmOnaCnopm0qaqzvLy7q7Cyx8C4paurrbGxo6GysrSkcW5mXFpOUEtEUFBQUTtHSklHSEJDPjlLVT9BOj1FTTA3NTQ0OkIzNE5XTzxKS05VTlFKUEhISk9CPD5NUjs+PTg6PENSPkRIUklCV05JQENBRjM+NThKS0NBPUM7NEVBOkE/PkhANSpCNTIsPmNdZzozNXRkZUBSNyYjM31pWDs6QkNAPVFFV1JzYldGSKqXmaCiqK+ZkZeHi6eWjoiShZ+HhJ2Xj56gmqOktci0qca6w8PHysjIzM3Gvrqzrrm4wMHNtsi6wbm2urGvrrK0p6ObqrO0qqimrayZpK6lpKisur+oq7a3v8G/vriyssOxub2so661rLmmiJyYppt2v6CFmZ2Ok5mZiq6XoZybl5Wbn6GpnqigmZqqmqKnnpiQjZGdg252kqKalZ2inpCtsqOrlaiqmKuupaSfpamTkpmciJWcop6Xsaapq7q2vrOyrb65tqCjp6ilp5ycrKmpjGNlYV9SS01HSE5JVUw9TUROSktCQ0Q8UVU9QUFCRE8xOD03Nz9CNzVVWE4/SE5RWVNQUVRKUUpKRUFFTVE/Pz04PTtHUjxFRFFCR1lNS0FIREU6OjM5S0lCPkNCOTlDPjxAPjs7RzctMj4tMYJoTnpcLzBraGA8PUJCODZ6Zlc7Oj0uLlJgTVVIf2VeSEWrlJyhn7uvmZSejJOqm5GSk4mrjYeinoykrZSjo7bGvbTBusLCx8jFws3Iwr25sq+5tMDCyrXGscG8tLqrqK2ssKOimaq0uqappquqnaivp6Oqqr68p6y8s7e9xry3tbjAsb3As6m1t6u+pY+jl5Gin7yfiZqgmZaenY63n6mcpaObnKGaqKWzoZudppyoqp6ZlY+Um4uXiYylopSdop6gtK+lpZOwq5mrrJ6epKOpkZWVoIOQnp+clqmkoqG0tbu1rai1srOenKKlmpeVmaqhnndhXF9dSkhGR01RSU1FRkdCUkxJQUVHQFZSREg9QUdRMTtCNzpCRjc5XFlLQUxQVFVTTVdSTlVKREBKSk5POUM/NT08TlFDPz9QP0VaTUpBS0RHQDUzPUlHPz1FQTk3QTs8QDw8M0A8Lyc7KkiRQjpTSjAsW29XNzE8Kh1CgGRUNDktMTpnXEZDQ5xwYkdFp5ekn5/DrJuXpJeZqZyWmpqPqpaWp6aVra2Zoau2xMK7vrfBwsDHxL7Nx7u9ubKvuLO/w8i1v6+8trm3pqOqrK2goJqqqsShpKirpp6rr6yiqai/uKatvbC3tse2tbm4v7G/wba0s7SvvqOXo5aTm5StoJGhoqWjo5+QvqWpnamsnZ2hm6afvaKZo5+iqauhnZaNlZ6TnoePhY2TnqSgnbWsppyVsqeZsKifmqqeoI2ZlZ+EjqGam5OlpJqYrLG2sqqlqq2snJigoJKOkJapn5RoY1lhXU5JR0pOS0hFRElBPVBJQTxHSUhbUk9LPUhPVTRCRjk+SEc1Q2JbS0NOUlVXVlFYVFJVSEA4UVFQTTpHQDRDSFFTSUM7Qz5HVktDQE8+SzwwNjtHRj47RkE1Nj85Oj85OzE1RDAtLDBNdlw0S1o1LE1uVzwtPSkeI3piUTVDS1E5b1JGPEt4ZWNXTKKao5yexayhn6ydnK6gk6Ofl6Wgp6mrl7awoqqytcTDvcC2v8K7yMK+ysi2uLW0sLOzt8HGtr6wuLS5tZ+mrKqrnZ2epaPBpaCpraCkqa2voqanvbamsby3trXDsrO3ub6yw8C3uK6ztbWjnaSVkZOgraCZop2pqKujmsOtqZ6srZubnpmmoL2inaWYq6uspqGZjZqfkp6Jjld/lp6loaC4qqeTmLajn7OhoJuvl56OmZSdgo6fl5aOoqSVkKaus6upoqKmpZWVnJiLj5GTpJ+JYmVaY2BMSEpKTkZFQUZLPj1KQjk5SktOXVFRST1MVlw5Rkk9RE1JOEhjXExDTFBTWVlWV09aXklBPVdRSUs/SEA1SE1YU0hBOkBBRFBIPz5RPks3MDk5RkU7OEc/LjY+Nzg+NzcvMT85MSUxUVVtW0pPMTA9Z1dEMTc9LSt3YFM2U1prV3NIRTY9dWVcS06en6GZnsOnpaKzoJyyp5OqpKCkn62prJ27sKistbHHxMHCs8LDvMbDvMTKva+xtq2wtK+/xbW5sbC5tayaqLCpqZqdpaGnwqybrLGcqqKusKmkp723pre6vK62w62zs8K/ssazurestLatqqKmlpWUo6yin5+aqKuwr6+8sqagqamZmZiToqS4oKGkk6+vrKWnn5KhnpWej5CNlZ2aop+ntKanjZi0nKOvmp6brpGelJeUmoCSoZaPjp+hk4umrLClp6KcoZ6SkpqThYuSjZyegGJmW2dlSklMSlJBQ0BJRzs7Rz85OU5NVV5SU0o+T15dPUhQQkxMSTlOZF1MRUxSVFlbU1VPXGJIQT9aUUFIQUtCN0ZFTEtOPjtCSEROQj07TkBBMy85N0NCOTdGOys2PDQ2PDM1LS80QDErJ1Z0U2VPPzEwNGJbTTIzPjA8dl1eP1tVXmZyQDg8SJZ3ZUE0n6Sfm6DDqKSqsqGjtamWsqumoqSyrK6pu7KssLW0xr/ExLXAxL3JxLXAyMK1q7WosLiswMS0t66strmlmauxq6qYn6aXrbu0m6iwm62frrSyp6q6s6e6s7eyuMCqt7LCvLTFp76urbe1qqisoZeWkaaloqOYmKWvuK6ytbagn6ikmZWVk6Sgt6KlppausrKmqqahnpuampaYqJ+gmKGer7Kipo2XrpmlrJeanqWRm46Tl5mFlp+UjJCcnpSLqamqoqegmZ6WjI6ZkIKGlomUn3lkaV1rak1QTU5UPUNBTkM6OklANzdRT11eUlZRQVdgXEJKU0hWS0g6VWVdTkZPTltXW1JQUVhdR0FCW1BCRz5OQzlIR0hOUD8/Q0lCTEI8MklBOTQxNzdCPjs3RTcrNjkxNDgwMi0vLjw2LSNCcWdzazIzLzFbYlozMzgwNnBbYkgwNUpwaVZDV0aMeWZDO6SknaGmv6aor6+gqbWqnbmvqqOqtLexsLm3r7a4uMW9w8e9vMPBxsC4wcbBuqq2pK27rcHDuLiqrbG7opWtsK2ylqWnkKq5qaCnsJ2qoLC0sqqptrWsvKyysrm3rLmwwrq9vqbDq7C3r6mrq6aemJiroqKgkZihsa+zq7G6m5ypoJmWkpemobeppaOir7G0q7Koq5+boKCbnqWcopado7Owmp+Qk6WaoamalaKflpiJlJiTlpedk4iQm5mUj6mop5+jm5ebk4eOmYt+jZaFj5traW1hbG5XUFFaVEFDRVRAOztJQTc6WFBkXlBWV0RZXl1NTFJOXktKPlpkXk5IUE5bVVlQS1NXWkk/RFhQREY+Tj89SUdHUVBCPUNGQk0/OjJEPzc3NTQ3Pz05NUU0Kzc1LzI1MS4tLiwxPionKz1ccD0+MS4xZVtkQDE2NDdnWWBGKD84bH1oW1Y7iXtjQz2nn5yiqb2hqrCqo7G4qaW0squhrbW9r7O4vLq9trbAwr/JxLnEwcDAuMS9wbevtairt7K8v7+1qa6xtp6Xq62orZanqI6nu5+krbOeq6KxsLOsqba0tb2tr7G1rLC1scC6xLarvK+xuKutqqOxpp6kqqCkl5CZn7Oqs6qrs5qdp5ualY2gpqS0rqeira2usaezrbKppJyfqKSelaGYm6i1qZeZkpKfmZ6hnpGsn5iYhZWYi52anZOKjZaXmpempaOgnZaVl5SBj5SFe4+Sg4yWZmxyZ3ByX0ZZZlZEQ01YRFo5SEI2Pl1RaFxOWV1HW15dTk1SWGRKSkNcYmBQS01OWFdYUEpWVldNPUVVSkVEQU0/QUZISFFQQTtGREZLPTg3Qj02ODcxOT48NjVEMCs4MC8wNS8qLC8tKj0sKyUyKyo1SzEuJ19fYVUxNTA9YFZeOClDM1lVXGdLNYx6ZkxApJmgpKy3pKyppa6utqmvs7mmprC3xbext77AwbW0usW+zMW5wr+6v7nEuMG5srWsqrq2u7m+taqtsbaZmKerqqubrKuPq72erK6xo6qfsK2zrq62sbm3qa2usai1r7O7vMmyqrW0sbSvrqehs6CaqK2gpZWVmpmyo62gpq+WoaSampKNoqWnsqmip7Ksqralr7G1r6SZna2nmpifmZmsuKOXk5CPmJyhmJeUrJ+dlIGTmY2dnZqWkIqUk56apaKioJmVkZOVeouQhnuMioOLkmtueG52e2BFYWpZSUhZWz17SkdFNkFiVGlbTVxhSltdWlJSUmJgTEtFX2BgUExJUFdWVU9HV1ZVTjpJVklIP0NLP0VESEhRTkE/SEhIRTw3PT46NzU2MDk/ODY2QiwtOCwvMDQsKCwvLSo3NikoOS4kOks1LiJUYFVgLzUoQ15RXC4qQi9KR1BbSDNjWVVLRJmWoLCosqmtpaOurrWpt7S4o6u0t8m7tLu7v760tLfDwMzIu8O8tr6+wLi/vLG9rqe6ube2w7errbK5lZemrquno7GqlK+7pK2ysqenorKzsLGxtbG4s6muq7GnuK+1tMPFtqm0tauwraqno7afn6eyoKSUm5mUsp6nnKCqjamjnpuWmKWlpbenorK0rKexp62wtaylmaCsqJucnZuUqbiclI6Oi5mcopiQl6ahn5aDkpaQnZyYlpaIl5CXm6idpKCSlZCQlnaEkId7hYGEjYxucXd2fH5cS2VsXEtOY1w/YntHSThHZ1dlW0xeYk1YWVdUWFRpXU9PSGFdX1BKSFFWVVJLSFdVVk04TVpORUBGSz9IQkNLU00/P0xPSEA7Oj47NjswNDE8PTQ1OD8pMDcpMS4yKSksLC0rLTkkMDQyJTlCNy4jQU5IZjI3J0ZhTFYlLUIuPUVNUTwzcmtKREOQmaWupa2uq6eksLKzqrewtp+rtbnJua7BvMK3s7G1wsPOxb/BvbS9v7+6v7yzxKipubC2tsC9r6uzs5ygp7CtpaawpZ6ytq2rsrCsqai0uay0srWttKyprKisqbmusbHHv7ikua+pra2mqK2wpqSkrqOpnJ2bmrCZoqOio5CsnqSgn6Kqpqa5pay1taSpq6msr7avo56jqKqboJqakqS0mo+JjYeRoqCWjZSeoJSThY6Tkp2bmJaViJiTlZmnnKCfjJKQjZB3fo6FfHx9h4qKcnRyfn19W1Jkb15OWmZdRkSWW0g7Tm1YYVtNYGJOVldWV1RZZ15RUkxjWltUS0dPVFNOR0lWU1xOO1BeSUJESEpBRT8/S1NPPjpOTUM8PD45OjU9KzMyPTYyNDk6KDQ1KS8sMSgpKywtKiY1Ki8mMCkzODoxJiozQmM7NipIZEhKKzpJPzNCSVMsPo9rPUhIj5uqqqKqsKSopLO0sbS1sbGhq628y7quwLvHsbSttMLC0cXFvsCyvsHCvL+3vMSnrLess7i8wLCrsq2gpKetqaiksKOrsaqvrLCur66rs7qntrCyqbKpq6WlpK+6rKqxwrm1q7moqKisqqixpaqkoq6qqKKem6KslaSdmJ6ZrJ2ip6miraajray3sbKgqaKgq66wrJ6fp6ipmaSYmY+gp5iGg4+Ki5+hj4uMlpyPj4aHkJWgnZaYlYeWk5OXpJydnIuRj42Jf36Ihnx3f4eFh3Rzcol2bF9ZYG5jUXNxXEs7hHxGPld1WGBaT2NcTlVWVVdQXGJeU09OaFhXVktHTE5SSEVJVlJdYzxQXUQ8RkhIQkc/PUpQTDo+T0o9OT89Mjo3OyozNT4xMDQ4NSg1LyosLjMwOyksLCclMjM0JCwyLTg2MCkoMTxdSjAuSWdERjg8QjA1RUtYMUCUWz9NRpWXraeiqrKcqamwtqy4ta6qpauqvcm7sL63wq+wrLPEw87Ow76/tMDCxLrBtMnErK+3rbK4v76zra6rpaeqsKmnqLGltK6rsK6tsbCzrLO6pLizrKyup6ufop+xuKuqrbq3pbW1o6mnrKyqraGpp6axsqOmpaGhrJaqoZSboKaepKKrpK2jn6ext62to6Wim6mqrqmdoqWkpJigmZaPmJ2TgYKQiYWcoIyKjoyZj5CLhI2YpJuSkZuMk5KRlKKZm5qKjoqKfIaBgoN6dICEgn50d4ykh3lrXmBuZ1dlh2ROQGeSTERieVdiWFJlVU1WVVVUT1xdYVVLTWlXVlZJSkhJT0JHSVNRWW9BTVhAOkpHRkVHPj5FUUg4Q0tFODdDNzI6OjoqNDk/Li80NjMpNCsqLCsuIzQuLSsmKCs3OSomNis8LTIsJjA2V1ouMEpnQUE8PEMrOkpPXjREhkBISESXkq+ko6qwmKuprbWrtrGrpKuqqbzAwLi5s7u1pbKvxMnL0b/Bu7nAv8K5wbrBxK6ytbGzu8C+s7GurKurqLaqpa2wq7mwqbGxr7Kttqq2tae0tqyspKmqnKOftbOoqKS0tKC1raGpqKupq6egq6uoubapqqmpoqmgrZuSqaGdoKSipqOqnp2mta6opqqio5elp6eqnKKko5+ZmJ+Rjo+Zjn6HjIeEnp6IhYuLj46QjYSGlaOajo2bkZKRj5Kfl5mWjIqDf3SGgX9/eHWDf3t4f4GInY9vcWdncXhcYHOIak9dmFZIbXhVZFZSY1BNVVRVUE9YW2JVSFBpVFZUR1BZVUk+SUhPUVB4TE1WPTxLRD9AQTxAQ1VDOUFLPTU7RTEzOzk3KjQ6PSstMzQxKjgqKisqLCkqKC8qJiklMzssJDIpMjAyMSUvMlFjMDI/Zj1OWD9DLD5MVF8vSms2UEU7lY6woKWrrZqrpa2us7SvqqWvqam6vrvAsa64rqG1r8nHyNHAvr27vMK9usPBv7+usrKxtb28wrGys6qzqKS1qaWts7O5sKOttrKvsrmquK6qrrWrq56qrJ+joLatqKGfr7OhtKqeqKeqpKuhoqytqL2vrK6toaeon6uZkK+hmKKhqKefqJuZqrCpo5+soqGToqOjp5iaqKWXl5mdj4qHlYh9jYWEhKSWhYKCi4ePjpGEhJSgl4iRnZCTkY2RnZSXj4qFhXh0gX99dXh5gHt0c3ppgoekdWleZWyCdWeIjH1SWHBeSnhzU2RTUV5NTVJZZk5MVlllWUZTaVJSP0JOUWFROklITFNJcVFMUzs8ST87PD07QEBXPDw+SDczQ0IxNTo5My01OjopLTMxLS02KSgrLSw1MiMyKScsJS47LiYxLjAtMTQlLDBMaDo0OF89YWQ/RjFDUFtbK0hPOlZCNJCPsaCkpqujpqSsprSzsaqksKequL7AvK+muKqnrrDJxsjRw72/vrm+v7zJvMG4sLC0sbq7ucGztLusuKyitKanrLK2ubOnpru1rbW8r7ymray1q62cqa+koKWsqqecnqqzpLOomqqnqaSpnqOpqKm9rLSvrp2ppKCunJuyo5WknKSln6SamqirpZ6bqqGbkpuhpZ2Yl6mpkZiak5CKgo+Ffo+Cf4iej4Z/fYyHkY+QhH+Tm5SFk6KMlJGLkZuSlYeIfn9xenl+fGl3fHp1cXF9aIZ5hYhkYGhjcoV6bWd5XV5WQld6bVRhT1JYS0xOcXRdSFpbZ1lFVWZQRD5LTkRDQTlIR0tTP2phSVE4PUg8PDw+Ojw/VDY6P0M0NUg+Mjs1OTAyNzw1KC41Ly0xMSYvPktIMSUaOTAlLCwwOS8sLCs2JzE3Iy0vR2pJMTRYPWZiQUo3R1NgVSo9O0VaPyqPk7GZn5+ppaShq6S3srKlqbCnrLjBvbWvormtqKiww8nJzMG2vb+1t7+6yLbDtbSztbG9uLq+t625tb+tobOmqquwtbi0qp27vKiyv7K5oK+ztaqsn66wo5ylqKminpylsaavoJ+qqaiiqpykqaCtvKiusK6hq6Okrp6eraaXn5uho5yfm5qjqqKamqSklZaUn6KWm5amrIuekZCRjIKLgYCOgHqalI2JfH6Lho+PjIqEkpiRh5SjipKSh5Caj5OBh3x5a312eXhie3pxcHFzeGmBdGuDZ2RoYW9zjm1ianBgcEFceGtWXk5RUUpKTVNZVk1dXm1XRFhgT15QSE1ERjs3SEVLTzxyaEpLOUFFOzs9PTs7PUo0OUI8MztHPDQ/MTgtNzg7MigwOS8sNS4uPS0qSz4qHTQ5JicuMzQuMCsvNCYsOiQ0MEJoWTEzUz1lX0RMNktXZU8pPDNQWz0jkpismZ+Xp6Sin6ikuK+uoq+vqKq4wrmyrZ+5r6uotLrHysi/t8G+r7S+t8S2w7GvurKywLW7vripube9q6S0p6iqsK65saqZur2kr7+0tKCut7Wmp6ews6CepKanoaWZnq2nqJ6gqa6noaeXo6mgsLifpLGvoaygrKScpqepmpqbn6OVnZyanammlpufqJKYk5idkpmWoaqQmomOkId9iH+Cjnx7oYyMiHmDjIWKjI2Fh5KajomVn4iRlYKLl4yRfYR7c299cXN0YHl4aW9wcW9qf3Nke2xpZmRhZoaAYFtzanJNTX9pWFpNUExKSFBSUUlOXF9uU0RYWlJnT0hLRUY1NkhCTEk1WmVKQDZFQjk6Pj0+OjpDNTk+OjNARjwyQDIzLzo7ODMmMjwwLDg1QiopLUMqLDQ7Tk5AOzczLS4rLTcqKjwlNTM9ZmQyNE0/ZV1GTz1SWmhIKj8wWlk1KJadpZiclq2gn6GkobersKS0s6ioucS1sa6gt6yurbC1xsjAt7/BubC0vbe/u7+vq72wtL+xvcO6qbu6t6eotainq7Cts7Gnmby3pKu7tq+fsbewqaWnr7KboaSgo6Shl5uvpqGfoqevoqCik6Slorewoaaxq5+soq6XnKqlqZ6Xmp2lk5ucmp2mqpmcnKSVlZeVnI6Tl6KpoZCJipCGeoR+hIp5jpeKjYZ5goeEiIyOhY2TmIyOlpmKj5d+hpeLj3qAenByd25vdF94d2RsbGxqaYRuZnNpa2ZpXWRzgWBba3VpWkl9XltYT09KSEhSVUYyOV9ebFBEWFZZZU1JSUVFMDdGP0tCNklKSDs2Rjk0OT49PDk4QDg7ODo3QEk+ODw0LTM8PDc1KDU+MSw7QTEoKzY8IzhSPSoxMTM+RDUsLSc0Mio7KzEzOWNsODRHQWZbSFREVV1oRS48MmJVLDKWo6GXlJyqnaWhoqC3qq6gurilq73Fsq+uo7WvrK2vtcTEvLO/urews7m4uri7rq3As7S4r7/BuKy9urWmorOqp6qzq62yoprAtqWntLWpnrK7qaemqa+smaKnnKOmlJiisqSZn6SoqZyioJOloKS4qKSnrqeepaCnkp+poqGgmZudoJKbnJagoaubm5mhlJGUlpqOlJKjqKSQiIqPhnmEfIWGfZ2NioqGeYCEiIiIkYWVk5KMkJWUjY6Ue4OYj4t3fntsdHJsbHNheHRoaGpnZm+FZ2hpY2ZpamBpYmpnW2V7Y2BTc1RbW1NMSUdJT1NAISppXmpMQ1ZVXmBLSUhFQy46QjxGPDZLUEQ4OkQzNTc9PTg5NT86OzQ+OEBLPT45Myk4Pjw6OSo2QDMuRTQoKyw+MC1OPy4rLTcsMTE5NSwmLjUtODA1NzZgdEIzQ0RnW0tXR1VgaEIzNzllTycynqOjkY6kp5uenp2jta2mqrq3pqvDwbavrKO1rqevr7fAwLyywbaxrrK2tri3taypvbOvsrG9v7iuu7uxpZ62q6WltKmrrqCewquopa+zqqy1u52oqquxpZieqp6mpJGZpq2imJ6kqaGcop2XoJ2ntaavqq6hoZ6coZWgpp+hoJmbmZySmZ2UpZ2sopiWnpSTjZWXjI+YmqmgkYiKi4l5hXeCgoGciIuCiXx/hIiGhZGElpWPjpCRkZGMknuDlY6Gcn19Znhva2psZ3Vza2NnZWR1gGJlZmZlampka3FaXlldbWRhTmhXWmBWSkdJS01SWD45YGxpR0JUU1xbSUlHRkEuPD85QTg5UkdANzpCMDM3PTc2OTI6PDk3OjlETT1CPDAqPEA7QT0tNUIzNz0rKiwwQSpKSy4vKiszNzIyKDU3JCs3LjcyNjg1XHlOMj5IaVpMWUpWYmZBOjNBZkglNZqjnpCLrKGYmKCWpbSxorG9tqCwxru5sbGkt6yqrqm5vbu7rcCyr66ttq+zt7Kmqrmxr620trq2sLi9raadtaqfoLClq66epMKgsqSusa+3rbWera+trqKZnaiqpZ6Vm6iln5mlo6idmqCblJydrK+luaetoqGam56ZnqOapJ2XnpiblJqgkqiWqqeak5uckoyVmY2UlJmop42NiomPfIJ0goGKmIWHfImJhISKjIiShJOckpKPkJGWjpB/gIyNg2+Af2Z5bmhramdxcmtcaGNjc4FhZWhqbmxna2pnbVxsbHVxYVRiaGRlWklGTE1PWFFRVmFlgVRAVlNZVUZIRkVALzw9Nz82PEZOYTg6PzI0OUAzNzgyOD83PTg+RkpARDkyLT1BPUE9MDVAOUAxLSsuMzw7SzYvLissLTI0OzYjMyopNi41NTQ2NVp8XTE5S2pbTVtLWGRkQEExSmVDJzSSoJqOjrCdmpOhmqmysJ+4wLWfs8K7vbmxpravqK6lt7i3t6y7r62qq7eqtLitpLG1sa6psbe2sbO1uqeon7apnJ6po6qtnKnAma2krrC2ta2tn7GtsKqim5ykrKiblZyno52aqaKklpqgnJCbo6qpqbuepqSgmJqZnqGPa6KWmJxxgpabpIB1kqmnnpSVn5GJl5mAloqgj3mGlIyDbmp+d4NxbIaLhn2Ei4ZvXmNgZ4SXhmuLkJSTdXeLhH6Dj39mhoBodWlmV1xpc25OUGpjZ3KEZ19kZm5sal5gYIqQhIZnT0tEOEVUZ15KR1FQVVVLSFNhb3RlRltRVVBGSEZDPjE7PTY9NjwzZlw1Ojw3NTtENDg2MDpCNz86PkZMQ0IzNDM9QEBAPTI4QEU9MSwrMDg+RzYwMS4qLiovNTY4LCMxJzIxNDoxNzZYgWwxNk9rW05cS1tmYj5HMVFkPSsvjKOZh5Swm5yToJuqraujvcWvqLbCuL29rae2sKWrpLizsrOwua2qp6y0prC0oqe3tbWop6y3s660rbOiqZ+0q52hpJynp5msu5Wmpa+zuK2upaiuq6yloZ+coaemm5ihpqWbm6ennZOen5iQnqiporWvo6KjnZaXmJejiKGOkpqHoYeUnaF/pX+mqp2SkpuSiIRyeI2OhIihdoiNaZeIZn1zeKFviIeEfo17f6Ggn5mAe4eedIiOdpuKbIeBg21oZWN6bHFiVIZtY2xpmHFYanBvh1heaVtra1uIcW56coZoh4RaXkZOPkZfTUZSVlZRUVJXVGdeTFhKUlJQRUdHPjw0OT05PDc7MDw8Nzk5OjY9RjU4NjA8Qjs8OT1GUUc9LjU8O0A9QD41OUdBODIpLjE8STkvMDEuKi8oLTQ1ODMlJjIxMTU+MTw4WIN1MjVSa1tOXExcZ189SzFXYTcvKIyml4Ocq52ZmZ2fqqqnqb/DrrG6vLfAv6qlt7CprKayta6vs7arqaWxraW1spustLa0pqeps7Gtsqevn6qgsqmgpKOaoqOcrrWVpKWmtr2nraeqqqyopqKgmKCno5mZpqOkmJykqZaUopyUk6SlpqC2o6Sgo5iVk5iTnIiuj5iUiamLl6KbhbGAo6yck5qelXmC1Kh/h5TBm8d5eLGlt5dkgMCcv3mEhHmPg3yQkJHKcZa8nMV7cranupB6gWyWsauweWhrWLGub2VpvJK8bmh6bnKP2H5TamK2sn+BcpR1mqGqkFdPV2FPVk5GVFtYUVBSjFxXXFBAXERQTkVHSTw8NTc9Ozo5Oi49Ozg3ODs5PkY2Ojc0PkA+Njk/RVJJOi41PjtCPD9BODpKPjUyKjIyQkUvLjMyLisvKS0vMTg2LSAvNDE2QTE9OleDdzIxVGtcT1tNXmdcPkwxW100MSGNppOBpqmfl5yepa2yqbDCvbK1wLW3v8KrprStramnr7Oqr7a0qKimtaanuK2csrC1qqWkp7GurrGmqp6npLGkoqGel5ygnq+tlZ6in7S6o6upoa2upaKdm5qiqJ+Ym6ign5iep6eRnKeblJ2hpqKgr6Kfn6OWlpOYkpmFr2pqio2qfmeElYetZHCdnJSappVxrqGkfne7fGuhj3axX2q0W6WAZpyRYGaBemZ/anhqqWW+cmemjHayanyxeHSSk2NtbadtW4SgRWlnh5ZFdZxgfWd7pKeCWV+Lq2mAlXh6aqc3Sq9bV1RsY1tLT1hfXFdWO06IT1dWL0hTU0pERUY9PzQ2Pzs4OjkwPTg5OTk6PTxEODs6Nj1BQDY8QEhRRzkwNzxBQz5ARDhARz0xMy0zM0UzLi41My8rLyguMC46NS8nJDIwM0IvPTtVgnYyLVZqXE9ZTF9nWTpNNV9ZMzEbkaKVgqynpZ6jpaqyuKy0vb6wtsSyt7rCp6mwq6+pqbCupLC6sKSlrrOjqbionrKxsKOloKqtr6ywpqefo6KwnKOcmJWXm5ytppebop60s6GsnKKtraCempegoqmcmZ6koJyZoaekkJ2jmpegn6ufpqafmp+hlpWRl5GahbWbtXiFqZm1mXeHs5u3fpOWlqmUfmuBpnqChYiTlJJ3q2drsVuse4+HlHSIcI+GgH+IkJd4g4KLl4yDoI+EsHZ3n3Fra2x8i06kWEhjY5l+Y2imYHlydVOSh15QqW1jcX6HgGKdLlGhbltUa2dgTEtcZFhcWkI+sHhXWEEjTGhFQ0RBQEExOT44ODo4NDs6OTw5OkE6RTo6OzY6Q0I4PT9LTkc6NTpBRkJAQUQ8RkQ7MDIwMTtGLDAuOTQwLC4oLzMsPjgzMR8vMi1EMTw8U31uMytYalxPWE1fZ1c3SjlhVTUwHJWflIizpqahrqmns6ypu7bCsLzCrbi3waqsra6upq6yqaGvvKqhp7StpKu1paaysqejop6oqrKosKilnp+frpafmZWVlpieraKamqSota+hqY+pqKqbnpWYoKWomp+co5+boKOlo5Wbn5ianaKqm6aanZuioJeTkZOTnIPVk5m5cLDCfsaGfNaUm7t8mZWkj42cjaR7joekgqWCeqx5j51Wr3uJfp9quVq5d4eEfaaCk3yYeqp5jZyPe7FtjoR0kLyFb5RQr6fFilGgemNgqmJzcodtl4hgU7W0yIaAiXxjpDNCnXZdUWpoY1BAWGZaZGFKSE1sS1tTT1lmWkNEP0U/MDw8NTk7NzQ8Ozg9OjxDOkY6Oz42OkBDOzZAT0xIPDo8REhDQkNEPEVGODEyMTFEQy4vMDQ4MystKS4zMjM5NzEjJTUqPjM9PVF3ajYqWWlbS1xQX2ZUN0c6YVE3MiWbopOYsaeopbOqpbSopLy3wbC6wLG1tbyztaexsKOwsqafrraom6i5rqOvsaCzs6+gpJ6fp6mwqLSppJydnqqXmJeWl5WWoaqdm5eorbCpo5+PrKKnlp6XnKGloZihoaKhmqKip5ueoZ6VmZumoJynlZybn6GZkJKVkZ2Ism5otXGrh2+OpnK0c3K2e5mXo4uOnI2ifpGgpX6wdoOR0tF2XK58hn+kb5uqpmuGhX2tfZeZj3uxc5OdjnizZZZ0hJ5vnmaUUsiLWsJcn3liX61fdnOHYpeIXlnKnW+/gXVNS7VTVcZkVFFqY2ZYQU9qX2xpT1VHSTk9V1JbV1hIQz9KPDI/OzU9PDQ2Pjs3Pjw9QztHOTtANzs+RDsuQ1JKRz4/PElKRkNFRD5ISTkxNzQ2QT4vLjI0MjUyLSkuMjYsNzQyJh82MDs1Oj1QcWg5J1dpXEJOVF9lUDVHPWFNNjIvoZyRpa+spKq7raa0pae2u7yyur+3trW6urOltLShsbGin6ywpJimuq6ksbGdtLeon6adoqqksaesqaSanJqonpWUmJiSkqOooJeTpquwpqKWk62fpZKUoZukpqCUmqamoZqjn62aoJ6dkJaboZ2cpZWdlZqin5aZlpKbhax7d6h2o46Jh6lvrYqCp4OYmKGJkpqKon+TmYmuhX+Cs1xys1KufYOCpH9x1313hX+PnYaZmXevhoqRnId3tGGaZZqBgpRsklqwWEuadZh5ZmCtXnZ3h2iYiGter3eVno94bDV5yK6yX0FUb15nYEVQbF9xbVZVTS5lY2lTWVE6QURATDo1PzkxPTwxNj85OEA9OkM6Rzs8Pzo+PkU5LUVVSkVAQzpNS0pCSEc+R0s5Nzw0Njo+LzA0MzMzLjIuLjE4Ki4zMiUhMDM3Njc9UGtlPiZWZ1xAPVZfY042R0NgSTo4OJ+dlKC4sJe0wa2osqipsrq4tLi/ubeytr21pbizn7Ssn5+oq5+Vp7arqLGyq620o5upoKCoobWmpqqjmZ6VpaGUk5yZkpWipZqTkKesr6aglZmpn6KPkaKZqKaglZmlqJ2cpJ6tnaGdoI2UnpudoJiZnJaXoqCTmJGmnYapfX2leKGPjoOqcK2LgaeGlZ+hiJeXiKOCkYiUqnyAi515b7FaqIKCiKB5dNh/dod0p4GOm42SpHyWkJ+Ee7JenGSgfoOVbJJcq1tak3+Rf2hnqmNye4FrmIdyXaxaiaCOa25lT0pDoVxaTHReYmVNWmFfcnNfSlY2SpqTWUhFPUhGQUwzNUE4Ljs+MDVBNzhAPDY9PEY/Ojw2Pz1CNy5IVkpFQUg2S0lOQElLQEVOOjpANC47PjAwMjE0NCsqMDUvNywmMjEoJCQ2NjcxPFBlZUEmVWZbPzFVX2JMN0ZJX0MxPjihnZmZvquXtMKuq62ppbSwuLG1v7m6s7G3vKq7tJ+wpJ6lp6eelKqxqbCqtayrr6GYoaCmpKO5oqOroJebkaKglZSfmpSYn6CPjYypsK+mnZabqKafjJKkl6irp5SXqaeen6CjraShnqGNlaGZn6CSnZeclZ6hlZaPq5uPrm1ytHKpjHaKpnO0eHOzgJGkopGcjYmkh5B3uG+Me4uia2u2WqCFZZeXaaGip22TcrR0k5h/smqFk4ita3WzYZ1mom+HkmqXXK1gTaF8h5FSc6NseX9+b5iHcVyvVjycd2ZUb24uXKdPYlJrZWFsWWJcYHB7Y1RaUT4+bXAzQkJAP0w5ITdANi47QDM3QzU4Pz8zOzxDREJKRk1JRjYySlRLRUJJNklKUD9ITkNGUD08RTUwOzwwMTAvNzUsKyw0MjYvIzAwLCwdMjg5LzlOYGVEJ1VkWT4vVV9hTDVGTV44MUI4pZqbnbqhm7LArq2rq6e3qbivtMC1vLGvubirwbapqqCbpqShnZKqqqe2o7Korqqgl5ynoKWruZ2jrZuWmY+lo5WNnaGbmZyfkJOUq7avp5mUnKyql4yTpZmlrKORl6qypKCep6uwmKGjkJmil6CblpuXoZOcqpyUkauZh9SSmrtzsMOAw4Z+1ZabuHiHkJeMmIqMp4h6o7Z1fXd2woKasmCDunnAfHW4YrWBjIepfZaBrKlxe391vIinoGmdYaaOr6F+jHSHq32+bnO8dLKDdXiAim6aiHFujaR0vV13fVthebxrWlZbanpeamBkZmJtd29ZW1lDQUByP0NHKzVIIic7PzEwPD83OkI5OT1DNDxATlpeYGBfX19aUFBSS0VGSjRITFJASk5FRk9CPEU4ND05MDIwLjg3LSouLzE4MCItMSwzHiw8OjA4TFhhRidUY1g8L1ReYEs1O0xbLTdBOaeanqG8opexw7Ctqqqssae5r7bFsbqyrruwrsGyrKSinqOhnJuRqqSqsqS0pq2kn5aaqpmmrLicoq6YlaGQpaCSjZyjnpidmpCWk6+5sayVl6Oop5SRlqScpK2ekaCoq5+bn6mjs56ipY6nopShmpyXlaSYj7CgkpWqnoWQmbaAkJGMt5V4gpObtXdua25zbnmPhI6Jc57Bu72ae4GyqHCAdJG4g3yGhouHjXuKho2XfKS7ub2cdXq0o3R2l3V0sHWZnmaGaY21dHJwd7aMXn95fYlog3lteWKLrHB1hX9ZW6dqRGRZU2ZgY11jUWdmcWx1Qk5QTEQ7Wkw+SjM8MCA4PjsuMz1BOTk/PTs8QzZCVFlaWltbWlteYGJgXVNHR0g0RElUQktOR0VPRj9HPDc/NzA3MC85Oi4sLy0qOC8lJjIoNCQoPjcvN0xUX0cnU2JWOCpPXV09KzpWVic9OzynnqCgv6WWtMO0rKunrKupu66wxq+1s663p7W4ramjoaWeoJ2ZlKykraqmtaion5uWoKOerKS+pqGrl5SdkKKbko+iqKKTnZeSmJSytbatmJ2kpKKLkpGmm6Wrm5aopKWcmqGppqejqaGSrZ+Xo56Xlpedno+wqZScp6KOan5pnKZ4h3N+mo90emWHer6+wLpukoNxlIZfcmpaXpqJYWSIjpVrYH+VY22cdmKUa3+alZRlXmBjcZuKaXKMfYaVZ2p+cnR4fX1iW3d0gWhQXG6DfHuLa1hseoJySUpvhXBNdE1FV11mYExbWGdjXk9bbXVpcVFPREVNO0hJPEw/MiwyQT84LzU/Qzw5O0A7PUM+UlZWV1laW1xcXWBhYWFgXFVHNURGVUVKT0hGUElJSDs4PTUxOi4wOzouMC03Nj01JiIvKjIsJTs4LTdKUl9JJ1NgVjQpUF5MKDM9W08nPzI+qJ+oocGjm7S6tqOtpa6nqLWxrMissLOstaO+sbKmoKKpnaKbmpmsp66kpLWppZuXlaGbp62ovqepppWUnJWgmpOYpamnkZ6Qj5icsLK/rJumnqeiiZORqZqopJqbq5+jmZujp62in6qimrCblaaglpWdn52XsaWYoqiZnJGdnKOjmaaimpyampqQloFnbX1xd5GXlJGFirWqjYaYlY6KjJiXh5SVioOSk5GJjZGTmJSYl5qgopqclKGdjoJ6pYVsanyQfIB0iYqBcYJ4eXZ2ioB7iWpzgXSDdWN3fXZrcHttYGNdcGdNWVllal9XWm96bW1mU09GUzlPWk5STygrOkpCNjM1PUBBOTpDPjxFTlNTVFZXWFlaXF1gYmJhX15eW1RLQ1NHS05ER1BMT0k8OjszODksMjs4MjApNklSTzgiKSsvMiM0Oyo3Rk9bSiZSXlMxMFReOis9OFxLLDwtQLOgs6K/oqSxsregqqWyp6WwtarJq62xpbWmwKi0oZ6kpZyjlZagq6aso6O2rKCZlpafl62ppcCeq6SVkpyXnpiTlKKfnqKnk5GYqKeyw6+aq52rno+WlqmeqpycoKyYoZqcoqWvpqGkqJ6tmJemnZmaoZ6enbCgnaKmlZiTmJSgoZWjnpegjpaUi4qNjpatj3yVm4KSgouqqIaBmJaKhI+fiHuEkIaFmZCHhomVjpuXjZCYnqSWmpORnY1/jWahs6+FiYR2eo+KfHZ5em9neZCBgIlrdYF5iHJoc396doOIgmt0ZHlmYGlkYmRmallre3BpalxTTFBEX1VGQD8/LDRARjs0NTs+QTs8Pz4+SE5OT1BTVVZWWFpcX2FjYV9eXl1eXVhWSktMQklPTVJKOzw6Nzg2LzI5NjQuKCYkLTEuLykrKjclKzwoNkNNTUQvVF1RMDVNWzE3RTRcRzU8LEC0oLmvvqyrrrKyoKqmsa2irLOwxbCqraOzrryktJyfp6OhnZmXqKappqSms7WelZSdmZmwpq6+oKujkJGempmUkZWhnJepnISeqayis8izn6qkq5aWl5qnnaibn6SrlJ6fnaCqrqmlo6uhrZufoKGZpZ6cnp2wpJmfqJOYmJ2RpZmYqJ2al2aDknxlfo6Zj2N5jWxoa3qRpKtrZZqYfmeFimVlaWh6jaGOa2iMl5Gid2tqi5ijn5lzbG56hIyHelhlXoWBXmyKiYB2XGhzd3eRgIeCbniCeIBzbXmDdHeIiI6De2qGWV5rdGRdc4lpanxxbGNdUU1XSmRYQEo0PUY3P0ZENzE8PT9BRDw8REdISElMTlBSUlRXW15gYWFgXV1dXV5fXVpVT0RIT0tTTj0+PT02NTM1NTU0KiYmJSwqJS8qKyc2KiQ7Jy9BSltKLzdaTzYpRVkvRE8xWUM7Py49pZ+6vLmvrLOxqqWora6wpq6tsL2xqaikra+xn62Xn6SeoZqZpqucrKOmqKmyrp6Vo5Cir6a2uaWuo4+OmqGZk5KboJmZpZZ7payiqLPDt6Sip6+enpWeo56jnKOqqJGeoZ6gqq+qq6Oqn6ibpp+ooayWoZulsKSYnKqVoZ6ak6WXnqqYnn6+g4hytHKEnYataHi5xLhxk6Kje6aYmXOqgnzLwMC7cYuih4KffJWYiZ7AvYKWnZ6NncLBe4F7ko2aw8B9a6Wxb4yAb8p6f5t3kYOOgXZ6gX95cXp/h3F4hYyTeW13k2JmX3hkX2WCY150aG1kYlhMVklRWkhPRTJJRT9EQj4vPD8+QEE6OERDQkNFSElLTU5QU1ZZXl9fYF9eXl5eX19fXVxTTVBHVU5BPz89NjQ2ODI3NiomJSMpKiYuKyopMTAfOSojPklbTCojQlAvI0ZbM1BZL1VBQjsvOJajuMO1sK/AqaiUo6+psK+tprK1r6qmpqaxq5+rmJujoJybqqeinauipailpLSjnaKTpq2st7Onr6KSkZqdpZKRoKGXnJ+dh6erpKutv8CwoamvqZeSn52imaKjqqOSoKGdnq2uqKymo6OnoaWlnq2pkaSbqa2qnJ2qnKyhlpellqGjl5x/zpR5eqSBeZWWm1+uj16Op4GioHynlZt0q4OAr15jjal6p4eFoHSXkoizY4KrhqGOjbNqhK50fZaHuGGCrVmjzW6PdXvae3+ZcH6Ik3Z+ZXuHdnZrfYhufoWRkn5tgY9gcWtwZ2BfeWRbcGhqZGZgUlRSV15LT0M1QUhFRDg+NjtAP0E7PTdAPj8/QkRERklKTE5QUk9TXF5fX15dXV9gYF9fXVpXT1VKPT8+PDU1NzgxNjQoJyQhJywmJi8oJiszHTYwJDc7U0wrLC1KMCc7XDtMLSFQQEY0LjGtwsC/tbSwuJiekaSqqK20q6ayrK2spKunsKqgp5uZpZecoq+foJ6op6OmoZ6wrJuelaeurbGqqKyglJKbn6WTj5+ll56oo56upKuwqMDGs6ipsa6Wkp2copefqaqelKGfnJ2ur6eqqZunp6Siq5KstJamoquqnqOnpqGwoJOap5qgmpSUkZegcIWMl3SEqIdxsXydcax+oZ6BpY+ed6uCfa1/nHKtfquHhp92mJJ6fJd+qoiijJGLnX6re4mTj5+Ae61WnMR6j2+SwX2BlW11cIxtZXZlhm9hd25yb4qLkpCDbZCQZW90dXBgZ21kX29paW5mY1dTXGFaUVFCOUlJQEQ8PjxARkRDRUE9PDw8PkBAQUJFRkdFQENJU1dZWlxdXl5cXl9hX15eXVtaUkM+OzkxNDc4NDUyJiMfHCAxJyAxJyAnNB41LSY3PVdKLTwnPjEpM1ZARiEcRzpDMS4rsNTGxrK0n52jjqOjoa2vtq6osKepqqiuq6unoqSdmaKVn6arn6KloKioop+dsKyXmpaop6+sqKepnpeUmqOikpShrZudpqOvrKOstaq6zbGtp66slpScnaKYn66snJagmZ2eqbGpqambq6qko6ybr7GiqKyuppmmq6qqsaKSl6OkmpSShKRqpHWJeql0erJxgqWJmYxxiKCah6RgYFKshH+ug5t2roGmhoafepiWhntmgKOJpJmGgaN9qX6BlIeuXnypVZ2ikoF6op+Ae8OvxYxzr7OzuXFiqa/CdGiNjZiPgW2aknBueXd3b2xmZGVxcGZ7aGNdV2BqWFhUS01RTENDQUI7Q0BAQkk8PTo5Ojw9Pj4/QT04NjtETFBSVFZYW15eXVxeYGFgX15dXF1bU0lCNjc5OTY3NCwmJCIgKCciKy0iJC4hMy0mQERXSCxHKzY2KjFQS0wjIEE5RDQsJ8PJ1tXAoZmrqKGvop6wtbCvqayjqKaqqquppKagm6SenaWnpqOcrJqirKGkn6+inZqSqqS1sK6gqZudlpSno5CaoqifoKacsaajp7GstsiytaqsqZWRnZyimaCls52aoZScn6erq6Oumqyqo6Kro7OtoqqzsaGbqqivsLajk5ajp5ibkXyqbJ6Eh3WreXywb4Kki4mflpWflIHSuLS4yYCBsl9flKmDpIiHoHmYlZp4qsl0maOVp6mQkpuMf5uJmsbGeGWhgqVzgZ+Ogn2vXnC1Y7F1S6OGbadHgpNkj5Ceknxwl5KAcHp0fHttW2ZqcnFmgWpeYlljbVxeWEhNTEtFREFCPkE8Qj9KOzc5Nzk5Ojs7OzMuNjxBRklMTU9RU1daW1tbXV5fXl9fXlxcXFxcWE1CNzU2ODUvKSglJiUkJiksNEVOUFBNRktKVkYqTDAvPi01T1RRHRw7PEYyLCSnpMHGua2ps66spaKcsrmsqqGmm6imqqyppqCmpZiro5+uq52loKyanqmlnaa1n6KXk6iqtrKsm6acoJWQpa2RmZyno6Cqp66io6eqsLTCsrOqraiTiZedpZuho66ml6GVmZ2lpquar52tqKeerKO3rKGyua+dm6+ns7SzpJSYqKSan46CnU54moF/n3qDo3yCpISHp5+cnpOEuHt8ebmCfszGwrZ4m6GRi599mZaXinaemIqkmKOofrCFnIWehKx9mZRhpWyjcI+FkIF9l4NyrGCkc3GAmmC8fVJVdY6SpJd8fpKRinR6c4R+cFttbndyaoFvWmRfaG5jZF1LTVFUQklIRkk6OUs+QjEwODg2Njg3Ny0qNT09P0JER0lMTlBUVlhZWltcX19eXV9fXFpaWllVU09IQDc3Mi4sKi4rKicmP1FUVldXV1lYWFdVT1VGPEUzOlBbVBwbNj9ILC0gi4eZqaykq7mrr6Ccoayzs6afoJWlrq2uqqedpqaao6ehsq6iqKayoJmppJSitaKjlZeiqbS4pJyinaOTkKGxmZ6cp6ahoq+unaSoorWyw7Gtqq2qkYeQnKedo6ScpZeemZmapqSomq6hrqWmmLClvK2ht7etnp21srmxs6eYnrCipJ6Fj9G1w7d5h46FkZOPf6Z4lKJ3jKCShKWBinGqhoS0bnJqmaOblYqfe5aYhoePc6+CpZuijaaLk52JlJCbbXCyXKVzk3qcbJl/e5l9bqlhonFxf59ic7K4aHiPlKaYfoyMk4p3fHmNgW1peGl4c25/dF1kZG5tZmhgSltYWDxIR0BVM0BGPjwqKDYzLjAxMykmNDo7PD0+QENFSUtOUFJUVldXWV1fX15eYGBdW1paWFVSUlFGOjIyMzAvKysoQFFSVFVUU1RWV1dYWFdVVlZUUU9RW1UlITJBSCQpJZNzjYqtv7+7urWel6ikrbWho5mVo6mnrqqrmaWin6WgoLWmoqinsKOUq6OOpK2jnZCamqq0tKSdpJ2pkpSXrqCgnqaknKectZqgqqO1q8OwqaupooyEjpyioaailZqbnJmcmaakppirp62jpZutp76slb6wrZ+jsLO6rLSnm6mxpaeYeqiQfXywd4qBpKWIm2yxb6GHrXyhj4OolZiArIiFroWflKmgoZaGn4CYlYB7kn6rgJ2aloqqeJ2gj4mTkoB5r12jgXymp2SdgHyXdGuuXaVrcYWZXWBbjKBtlZGnmYOUjJaLenqCln5rbH9ifXRtf3pgZ2Vxb2hnaENZYFs9S1QyVThCQkM3JCQzKycnMywgLzY2NzQzNTlAQ0ZJS01OUVNTU1ZaXV9hYGFhYV1dW1pYU1BPTkk3MDUyLiosQVRWVlZUVFVVVVVUVFVUU1RWVldYVlVVUUhGSUojKCi9kpqEqcbCt8G0n5utoK64paSOm6SjoK+vqp+kn52tmZ65oKKqoK+qmq2hkKqopJaJm5CusKynn6ebrZiYj6yioZ2lopqlnK2Yn6imtqnAr6WqpJ+LgI6cmp+mnpKVmpqUm5umpKSaqKyso6Sgqqi+pJfDrKqioayyuquup6Czr6mqmHavfpCLnIWHfbqtiphksIxlla19oY+DppWagayKhLCFpZmkoaGPhKBbbGqBs2B/rXt7goCxbGdumZeMiLBbfbRbpINryKJln4B7vFl2tVqyfVKvgHqsWIChbZiPqJqKl5GWlnt4jZx+ZHN+YoN3dIB8YWpmcW5mZWVPVWNbQlRePkkoPjk9NCEiLSUfMi4gKjEvMDQ1Nzk5PEFDRkhKTE5QUFJUV1peYGBgYWJeX1xbWFVQTkpHQzU1My4vQFVaWFdYV1hYV1dYV1ZXV1dXWFdXWFlaWltcWFdXR0I70p+zsre9u7TCs6OcrKaltqihi5qgn52zs6meo6CdtZigs6iqq52vrp+rm5WvqKKOiJuOr6ypp6Knma6TmY+omqKepZ+ao6OlmZ+jqbKovK+lqJ6djn2Lm5WgoJmPkpqbkpuYqZ+hmaiup6Wmo6Wpu5+gxqelqaGrtLatrqefvK2trJWBqZKjr4+bgIakl5iQgYC4w7qDjp2ThKeWnIKsioKviKabm6Wpj37VvcKqYqO/vX1+o4KD17q4tYWUk4Oevb6EaqOBb6uEbZ1/erKwx4Nqq7C9rXh3or67dICWjqacj5uSl516gZCbemN9e2SMZnmCe2BrZWtqYlBiW1NqXEBUYUJOKT06NC8eHyQeJTIgHSQoMDQ5NjY3Nzs+QUNGR0pLTU5OUVRXXWFcX19hXmBbXFlUUU1JQz88QT81PVNZWFhZWVpZWlpZWFdXWFlaWllZWFlbW11dXFpWWFRXWryVs7Sxv7myvbOina6mpbOmnouYpb6pt7Goob+mprKcnrGcuaiera+mp5WUsKyXjIObka6mo6yhpJyqoZiLo5KnnqecmqGoopieoKytqrmuqKObl5N7h5mRppuSjpGYmI+ZlKqaoJipqaGqp6Gjq7ueqcWjoK+jq7O1q7CqoLuor6+ac3WqpLeGZYmfcGetj4qPbW93pJCZn4F1rpmVcI+LcZWoo5uXraNybW1tZYp4b22CmXGAeWlwaWeJlpWYcWhphIZncIZkXYljam9ZXWd+d6ZgYnGOkm9mZICNko6imJeZkZaffYeOlXZmh3hojWp5fnlkbGNmbGJLZFhKa1k6UWVFUidLOisjHCAbIywpGBsYLTIuNTo0NTc6PD9BQkRFSEtMTU9RU1ZdV1pcYGBhXV1bVFBMSEQ9OkFCN01YWlpZWVpZWFhZWFdXVldZXV5eXVxcXF1eXV5dW1tVV16ola2zqrq5srOrqaKunqSyqZiSvbHDyL62qp7Aq6yjoaesn7qjpK2sraaOlq6pkIyFlZetnqaqop+jo6CRjKSSp5mpmZajqqCWnKWmp6+6q6yam5OTe4SXjaWYjZGRmJSOmJaolJ+YqaObsaeeo6y6n7DBp6SzpqyxsquurKi5pK64loqhqKW2nYmWopeHqZqQlJ2TqrOZm6OroLGWoaGdoKKcoKShlaqmjJKSjIeSnJyUkJqTmJCOlYaBpJmXlY2Lk5KKj4aEfmeKf3SCdnSHjHGnbHuVkZSTgYGPj4+PnZSglpiWoYOHk41xaZB3cIp3dnx6amxkZG9jVWBYQGlbSGNhT1orRj0rJiE3NDAuHxwhJTIoKjY5OTQ2OTs+P0FCREZKS0tNT1BRWFVWWV5fYWNdXlVRSkVEPjk9QEFTWFtcWVdYWFhYWFlYWFpaW1xeX19gXl5eX19gYGBfWVlgpZapqqW1t66uorCkrZ+gtbGQjqvFvMS7uKqipZ2bpp6xqaO2p52ptaeokZisoouIiY+cp5aspKGZp56ek5Wjl6iaqZmUpqGjkJuomaG1uqirmZqQjXyBlIuglIqUkZWQkJOXpY+fmqqgnLajnaest6evwa6jt6avr7CtqqqzuaGvvZmSpqOmtqKSnaaejamfjZKfo6yvmqGjsaivl6OgnKOpnp6dnJarnZKZoZuUkJaqmY2ZmZaQlp+RiaCdlZSFkoyQjJSKgH5mjIZ1hnZ5iINznGqGkZSUkYp9jJaSkpiToZOdlqCDh5eHenKWc3mJf3F7f2puZF9waWBbYFltY1BgZFBbOkdHRD0yPT03LiomKykmHSY0MDY2NTg6PT0/QUFDSEpHSktMTVNTU1VaYGBpYGVWUEpBQ0I6OUVNVlteXltaXFtbW1xdXV9fXV5fYGFhYmFhYWBiYmJkYlxbY5eVpKijsLOsrqOpp62gqLWqkJCdpLO7r6ysoqOaep2isaSlsKiWm7ino5SZqpyOhoqJnKOQrp+jlqigoZKXmJuui6uWj6iZp4yZqI+eubakpZmbjYl5gpSLmpOJlZKUkI2RlqKMnp6pnp+4pICEr7WisK90pL6jsqB4eqCqsruVdq2kn4qAqn5kXGJ2n46knoSXfm6Ts5yjp66qo2Wdn5NzeZmXcICYqJdsf6KoimWcpZyRl5iVi5KckYadmpCVgpKHjo6SiYV3a4+HdoZxfIaAgGFpiIuVk4tbdpWRZ2iQjnJ7pZiYZHmYhoJ4mGmDioJueX9rcGVgdm9ra2hbZmViYm9TXD5OTk5SRz1AVEI5MS8eHyY0OjMxNjY3ODw7PkBBQkZIQkZGSUtNVFRVWVxfaGZnV1FKPERHOzhVUltgYWJgXmBfYGFhX1xdX19fYWFiY2RhYmFhZWRjaGReXWablqajobCxrKuppaito6etpJKWq7Wvsqaaqqarl3OMnbCfqKqmlJa5oKCPnKSdkX+IiJuejauao5Wnop6Ol5GehXWukIimmqiRl6SInLq0qKCZmIuJdXeTjJaTipSRkJSMj5Ogjpugp5mcs5aAjJy1nbOMko+8p6F+p6J6o6+3gY6Opp6Ei4WPsamvjImWo5p5gYushpydoqepp4eVhZh3pZt6h5uBl6aCgXucsXqKhaCXmZSYloKRl5aEmZljeYeQhI2PkoqDbXCPh3mAcYCBhX+GdIaElpJ4lmiTdKCadHyZg6Cchph+komCg5lqjYyFa3h7cXBnZHduaWxrW2VramVzXF5JVExRQEU1LllUVTYpITA5PT42NDM1Njg7Oj0+PkBESD9JRUpLR1NYWllbYWFoZllRSDlFTDs+YlZeYmRlZGBhYWBiYl9dYGFhYmJiY2ZnY2JhYGVkY2djYWFonJijn6aurquorKCosKanqaWZlK7GvbChlqaptZ6Pg52snKeioI2Qvp6ZjZ+aoJB9hY6Zl4irnaKWoKGSjZOJhoCRqI6Hopyjk5eehp66sqeem5KOhXB1kImVkIqUj4+bi4+Rn5KXoKSWnqyIn7SJtJqti8qHqq6It4WNsIOxroOpjaaYjZ18qI9ye3ebj6eWaJWkebSLn56mqJKZwoF/q4iYoXGegJmkfZeFlbGAoXyhlKCQmJaAjpObipeRi3yFk4aNlZOJg21zkYV/enKGgYR8hHSFgpeBj8VmgKmHj6NrnoOhmYOagIyMg4mYcI6ShWh3dHt2Z2h1cGdnbF5jb2xnbVhnR11RTDJFNDZNYGM3JjM8REdEOjY0NjU4Ozg+PT0+Qkw/TklKTENQWl1cV2JeamxcUUU9S01ASmRZXWNmaGdiYmJiZGNgX2JhYmNjY2RpaWNiYmJlY2FmY2JiaZWXop+wqKmopaugpLmwqqummpSgo6SqpJalqbajr3+hp5ylnp2JlL2ak42hkZ2QeYSWlpGHq5mbm5qihY+Md5ucj6CRiJ6km5WZmIaiua6lmpyMjH9ibY+Lk5CNkIyNmIuQkZ+PlKChmaGofqGnh62doJauj56dnZGGgaCNq6+GpI2qmoyafqJ2gJmTaoKsdU2reIeNnZGbqKeAqqt9g6F7eqdpnn+Sa2eXhpe2iZ59bmBkWYOWf4x7ZGiKcpl9eZVsXXuXbV9TcIRcX2x5g2BZZYJ9hIGYcaeqa4OjbnKlcJ+Dnmlln2xbbYl7ZVlfg39iV1BvdmVtdHJqam9eam9tbGpYaU9dV0U5QTRHQ15rNCxJQ1FNTj04NDg1OTs2QDs7PkJPPlFSTE1CSlxdX1deX2N2YE1EOk1PTVRiXFxmZmlpYmJkYmRkYmFiYGNkY2FiaWtkYmRkZ2RiZ2VhY2iYlp2guaGqo6askqG2vKuuopmXoKGlra2hna21oqiSoaCgppyZjpi0mZCLnoyVi3WBlJGNiqaWlZien3+ShYaspIeckYqYqZiZmpKHpbGnopWaiImAaW6Ih4uOjoqLjZKLkJKijJSeoJyipX+TgY+joZSgd5yWj6eDoad/hqmthaV5in2Emn2icHKTh5Z7nox5bYecjJmQm6iaj4edfIKic3amZp5+dqRfmHp9knOibpi3tLp0koeCf7WoZIHGuHtwlbeLcYCbpGNzrKtgfWqds35ufYeDjoKLl3GAo2xzpHOeg3+kYJ2Zs5VwfJeetHRzW56yg2pib3N1cWhvWGtscnNmXWleYktEPUQ1UUFZcTM9U0dfSlI9PDM5NTo6NkQ7O0BJUD9UTU5RQEVfXltaV2BgfGRIQzhMV1VWYmFaZmZra2JiZWFkY2BhYmBkZF9gY2tuY2NkZGhkYmdmY2holJaVo7mZq5yToI2kuLWuraCbopyjo6aunJuxrayTl6GZoaSZmpSeq5uLiZJ4i4VwgJaNio+gkJOUnZd9kImOqKCHmI+KkaKTm5qMi6iopZ6PloeEfmt7h399j42Di5CQiY+UoIKWnqCdoJ+LiXecmKKMoHKii4ipiJymkJaoq3+ujH16oJl6o5N4gHOWiI2cfZagh5uOmZumhqJkoXyIlpCbjWyeaJuNbpqZe4CKp31yaHSrg52DdKpnlJpdm4V2hJ1oqmqAuGZcqHCBnGGVjF6ndnWJin+eaJp1h5OSmI5/n26akG2nmV2ofne7a36qW46EXbRnXG5xeXdraVtxanh5Y2BmWGJBUEVON1ZCUm40S1paX05aQ0AxNTE7OzdIPzpDR1Q/WVJZXT5EYl5WYFFhY31pRUI5TltdWGRmWGZnbm1iYmVfYWFfX2BgZWNeYmRvcV9kZWVrZWNpaGdraZWciaq2m6iJY5SbrLqysKydppycqJ+erpuesKirnZekmqGfmJaWoKOZhomNaoiAcXuXiIuWloSRlJiPeoqElqSdipSPhYudkZyciY+oo6CZi5GKgIBpgYZ5f5eMe4iOjoiPlpp/lKOfoKKTmHJon4qfj4xxkoyBqYiZn6OooKh9sK2joriXd6OzoqN/iJR5nXurmn+ijp2bl4mXcaF8hY2vtX1rmpGheH6YtKOjq6iEmXybfZ2afnSqWl1ve5aLeJ5iTH56eoVjeZdCTZ9ZompxfI5tgYmEmXWbeYeJsbN/f5uTp3WBnW5yfJRvmXJqpF2VdkhlY2BzcH19bmVgbGh2fGRkYVFeVl1UVkBZRVFnRFNXW2JYXklEPUI4P0I6SUU4TERXQVZRW1ZERmJcWmBLYG1+cUVDPFVfYlplalZnaG1vYmZmXmFhXF1eYWhiX2VkdmxeZWdma2RmbGloa2mTnYCxrpmEU1+gp7O5s7OpmqKMnKucnKmUoaukoaiPn56dmpmVmKCdloiHiXeFgW55lYWQmot8kZOWiHKAiZOhnHORkIGImJSfmoSOqZyalIqLinyDbISFcYGhjHiFjYiHkpmVfJOkoZ+jiK6GfbWEjp6de6WWeqmClp2QiqGdfadodm1+mXShc3F8nYWZcJODrn2kg6aemoGjb16oZ3WjY2+lYZzSkHx6mXhyc2OihZB+o3Ojj3VrkLOLYIKYiXOqsqi8f3eDbX6+pqm0XpxufXGXb4FzonJdo2d0pmFopm2b1Jl8hJtveHmXa5t6d5dybamkZ2BleXB/g2tnZmRtdXdnYGJTW2VRUWFJV0lUX1dTW2VqXGRQRUNLTUpLQkpFOFA/UE1XU1hPUlJgZmVpUmN3eXdJRkVjXWRaaGlUaWhqb2NqZ2BjYFxdXV9oYmFoZXxkXmRnZGtkam1naGxol5uAsatUXEt+qa+xtLCzo5yYhZmooKCjjaSooJipiZmYmJOZk5KgmI6IhntwfYRofY+ClJqBd5GNjolvf4aQk5Jsl5R9iJGRo5WDjqqalJKLhYl5g3aIgG6Cn4Z3gJOGiJmil3qUo6Wan4mzoaK2i3qsp6SupXCpgJqQhYGcknykgKKZhphynoSira6Jl4yAjKSNloOtoZR2tbW1yaFzlIqBn2CdlqlteZWGn5p1oYd3oH6RloqAb0xmo5JwmodypHt5dGGDgmx+oGtxZGCccn90l2l7arS1tMamc5h+e51qm5urdYOabHR3l2maenWYclBEfbNeanZreIdmamdidHRxblZeVFloT1JoSVVMWVNVXWhrblZnV01KQUpNS0hKTkFRSlBkY2ltZXRyc355e251iXt7VFBPbF5oW2tpUmpoaWxnbGZjZV9cXVxeaWJkaGt7X11kaGNqZm9tZWlsZaGcibCnhGY/lKGyq6+vtaKjkICXqaKipYylp52cpYKal5aNl5CPnJOOiIN5anmGZYOMf5egeXWPiIyBaYSFkoOMhZ2NeoyKlaWSg5epl4yRi4GJeoB9i3lwkKGGeYGVh4mWoJZ/laapnJaWhGdueJxsomR8caV3nJhwZ6eBl4x7pXqfloOXcp52gYmUlo+5bpCKomJ9mKGViG1yaatqdaBtbqZgm2iKkGiWh5qVdaKAfZpgi4WMdG+IYmigZZ5+aZp1b2NmiIJucqJaX1tjoW5diYxve39zcmSlbXeiZGenaJhzi5huoW9TiI9voF9lp1SLXVSYbW1za3GBbXBoa3hza29SWFdWZllTbUlYT11IWGloc2pZa1ZRUkVWXExYUmFUaGped3V6fHB8fHKDe39ydo2AhHZeUXJiZ2JwZ1BqaGhrbG5nZGdfXV5dYGtjaml2dV1cY2ljampzbGZrbWOcpZmmemV0bYunrqSpsLGmn4uAl6udnqWMoqGaoqKAlpiTjZqPi5iQjop7h3GAiGiLi3yYm3N0in2QfGSCh5WKipWZgnyIhpankIGirJCFkIqCin2AgI5zaI+mhH2GlI2JmKCOiJOrp52JpniWnH+liZaMspiekIOvl5+leJWIeql0pY+Emm6kooyShIyDvG58pa+ChoWGkpacn3ylenGolaCWZ559bqtjloqVkneobKmigYl1h4J3q5GmiGuRsGt2s4ypa4qGbm2fnpKVYX+ri6p2gH+Mpp93n32FpZWdoGmah3asZ56tjLdzd76NpJNZg6aNq2F1cnNve3RxYmp+bmhtU1ZbVWFhXGtNXVJdSV5tbXZgW3FZW2BaZ3Nlbm9xY3F0YHd6fnlyeYNzhH+Ae3uMgYKAdmJ4ZGNtc2RSbGdob2xyaWZpYV9eXGJrYm1sem9cXGJpYmxqd21nbG5ilaaqnYGAnqSWqaqdqKeupJmKg5irmp6kiZqlnamchIyajoackYWSjYyNdIZ6iIRvjYR+mJN0dIZykoNtf4uSh4aUj3x7gYWXpY1/paaOgY6JhZV2goeSb2yLqYGDi5SOiZyfiY2Uq6SgkIB1lJeJf4F5lK6jf4GbcY+GeZCLhH97cqaMcX19epeWm4SOeHt+foiUlZOKdpCYn6CDen2JbIyFW3l4cXlxaG5+kolxf3SCj5STcYWDgmWNf1+Bf4t3dXOUdW95bm6HbYSGXndpeI1mgYKGjqmbfnR8l2qJiG+Adn2Fdm1sZ4xzeXuYeIRba1h5j2hud3Jxb3d4b11shm5pZ1ZaYFdcZWtjVWFVX1JfcHh5bGt2ZWpranZ8cXJ0c2FvdWJze4F4dXmCdYCAf4B4i4WDfXttf2xkeG5eV25naHVreGppamRcYFpjamVscHVuWltia2RsbHluaGxvYY6Uuamni6GimqakmaScq6OhhISYrJKdoImappqomIKBm4p+lpOHjoqJjXKDfI99fo+Fe5eOdHKDcJaFe32Si4aGkIV4fn+GmKONe6ehi4aQkIWWg4aOmHdyhaqGjpKckIienoiMm6igoKuDiY6Um4B+iZatqI+TppB4b52Rg3qSb36ohXB9lXFrcHyBn4t/ko6MaG1dg4uMm5uejnOVi4hxdGuCdnOAWXJuh5GBfX6Mal1qZHuFg4iAX2l4e5t7gouCdoGGgmh5i4drYXFyg3dfc4yCiZCnlYZmjI+DbneLhHGFjXlvZWdkeoN6lltcamdudlt7eHd0bXNygmZcbYprbGJZWV5aWGxxW19hWl5dZnR+e3VvdGNra2p7fHJ7eHRkbXRnbHt+dnp8e3p6f39+b4aKhHt9c355c39pVFxxaWx1b3Vna2hkXWFYa2hranFybVdbZW5sZ3N6b2hqbWCLjKqxoZCjoZqenpiemaijon6DmK2Nn5SHm6KQpZV/e5iEfJKZiYiGh4pzfYCLdoWLgYSWinFvgHKYhoR+k4SDhoqBeoCDi5ufj4KmoYd4jpiJlYuLnZeFg3qtgpGYmZSKnp2HiKGroKKio4uIk5ydo5mWqqGnpqCSm4iXjnx4jo6Ep35/kpGSk5yxppuUnpCNspOYhKWMjJWbn4mQm4KJkYprfI12d2WChpCKe4mdhIeLj4iIgIWEkHd8eXWaoYiGip+LhZR/foyBgHZwdIaEf3iIh4uQppGEhY2Ig42QjH2Ii4iPgXZsgoR8eZlqcmhhdIpwfXp3dm93dIFdXm+GaG5fXlpcXVNocVVjXFxhbGl1fHxzb3Bka2ppf3tteH9xaW9wbGaAe3KCgHh/fYCEem2DjIZ8enh8fXqDeU5kdmtzbXB6ZGtlYmJgW3RmcGZycm1VXWx0bWh5enFnaWtljYidup+XoqGYlZmYlJmkoJ57f5qrjp6NhZ+ci56WfXmUg3uOmYmGhISGbniAgHKBiH6IlIRtbH56l4aEg5B/gIaEhnyHg42bnZKHqp+DcoqQhpOSjJ2RfY17qoSNkpiVj5yXhoabp6Cimp2Gg5GampmQmqagpp2dkJaBkYp3fIiOhKV7fI6QkYaYqaGdk52PjauNkYCejImTmp6Cjpd+ho2Cb3iFcXRgf4KPhnWLl4CDj4KGhH6Fg5RueXV0kqKLjIWahYSNdICKfHxycnuIhHt5jI+Ek6ePhoSPgoSKiop3hoiJi3xva36Ae21obG1nXnl/aHx7dnR1dXt3XGBwfW51YGNaXV5RZm1TZVpeYWtpdnp+cWxsZGtqZ4B/bHOAbGx0b3huhHluh4B2goB9hHZyg42Ifnt7fH97gopgaXtqdWhpgmRqY2BpXGR1aG9idW5sVGNxeWVwenpzZWltbYuKn7eboqSfkpGWl4uan5+ee3ieppCbioaklIuYmXl6jYV8iZGDjIKBgm18f3hzgYV9ipF9a2h9gZeIgYiOfH6GhId8j4CPm5uRiKedf3CLi4yTh6GhioWNfKiRiI+Sl5OWk3iMo6Ghnpaaf4CQmpiTjJujoaSal5Gbf46FeYCDj4eggH2MjI98l6SgoJOZkI+mjY+Bm5GJkpebfpKSfoaNgXV0gnB2YH1/jYZyipV8iItyjH+ChYaOaHdxeIyYko9/l36Ii3OCh3x8cHl7jIR6e5KNg5amk4uGkXyGhoeFdoKDiId6ZXJ7fnh6cGxqZl59c2h8dXVzfHKAal5gdHZweGRjWV9eU2toVGRZX2FnanZ4gXFma2NsaGV/gGptfmhucWt9d4Z6a4yBc4GBfYF0doKNhn58e3+BfX+PanKDbnNpYYdobGJfcVZ0b21uYHhobVdqdHZjdXt7cmJqbnmJjZ+ykqalnI6QmI+GnKCbnHx2pKCNl3+MooqImpZ4e4aHfoOJfoiCgH9xf3t0doKFfoqReGdjfYaXioKKjXh9gIyDeZaAlZeWjZagm35vjIKRlIamm4iNiYSmlYWSi5aXk5J2kZ6hoZiUl3p+jpiXjpabnaSdmZOUnHqQhoN4hZeNnX6BiY2Mc5einqGTmY6PooyLg5aYg5KWmX6YjXyIjYF2cX1uemR/fIqFcIaTf5CCbIeCgYCJhGV1b3yHkpeNfZN4i4l8gId8e3F+eIqFeYWRiouYopWBhI13iISDgnd8gYmGdl94d31zfXdmbGRhfmlqd3N0dH1xfGJjYXNudXNtYVphXltrZFJiV2BhaGt2eYZxYmpjbWVofINsaHRobG9of3yCeW2QhnGAg4N/c3yDjIF/fnqCg358kG12iHR0bWWKbGphY3VWhGlxbmB5Z2xianZwZnl8enFgcmyGhZCcrpemqJ6NjZeHhp+Tl5h9eKqciph5l5yLjJiQeXuBi318g3uAgoB4dHl6c32AhH+Ji4BkXn2LlYd/hYd0fX6Kf32XhJeTloyjoZh/cod7k5KKp4+MjoqToZKDkZCUl5GLgY+YoJqSkJF0f42SlImdnZ6nmJiNlZZ0jo6LbIaYj5l6h4iQiW+XnZqjk5WKjZ+MhoGSnH+SkpWGmYh8iYmBenF5a3Vse32Lfm6FkoKUd2+Cg31+in9kcmp7gJaXhH+NdJCJg3mHfnV4gH2HgHyEjoWMlKSQeYWCdImHfYB0doGHg25ge3V6cXxvYW5jZXtibm92cnd3c3Rhdl9vbHVub1xcX15eal5PXVdjYWhtdHuJa19qZWpjaHeHbWZsaGlsaIB8endvkIdzgYOEfXOBhol6gn16gYR9fY5yeop4eG5sh2toX2lxY4docW9ld2hubGF5aGt9e3hwYXdti4GZmqqgo6idioqRhoqeipWXfXeumIyWfZ6TkZaUiHd+e4p9fIB2d3+AcHV0e2+GfYGAin98YVx+j5GGf4OEc3qAhnqPkYeSkZuSpZuVgn6BfI6LkqSJjoqNmJuNhpGYk5aOiYmMk52TkIyNboOQj5GJnpmioZeWipeRb4iZhGeGmY6UeomFkIpwlZqUoZKSiIuZjIJ/kJ58ko+Si5mOe4qEh3RzdWtxbnV7i3RuhZCOknF0gHuBgoh8ZHFseX2ZlH2EiHSQi4F0iHlvgH6Bh3yFjYqFjZWojXuIfX6LhXh+cXCAhYNjaHh0dnB7Yl5wYWt1XnFqenh4bHJwZXhdbWxzbXNZWl5gYmpaUFdXZWNncXF/h2ZdaWhnYmdxjm9kaWdlamiAend0bo6FdIGBgnt1goiFd4V8eISFeoCJd3+Le3pyeYNqa19waHSAa3JvbXFnb2xlfGNugHl2cWx3d4p/opiiqKCmm4eMioGQnIaTnHWBqpSSjYagjJaTkIB0fHaFd3h/cnN7hWtzcHpuinaAgYducVtZfpGNiH+AgHZ1gIB/oIaQipKcl6GUmHiKf4GNiZ2eio+GkpiWhYmVmY+XjIuNjo2dio6Qg22IipCRiZyWoZuYlYaYiGqFo4Nnhp2KkX6Lg4uBd5OYkZ6RkIiJlY1/fo+XfJGNj42aknyKf4JudnBsbW5we4Vpc4OOl4pwd390gomCeGZzb3aBmY58iYR6lJF6d4h0cIl7ho16i4eEiY+co4h8hHeCi394eG9rgYKBXXJzcXFxeFpecGBxa15vaXx5cG1tamx2YHBvanJtWlhhYWJuWFFTWmZnY3VwhIJiXWptZGJma5JtYGZmX2hqgXVxcnCLgHV/goB4dYCLgHiFf3eHhneDhXuGjH97dop/anFjfGKGfG9xbHRqaG9sdndfcX95e3R1dICCfqSVmq2eppaFjIN/l5SDj591i5+Uk4WKm4yVjYt6cnh0gnByhHNxdYhscG11bYh3g36AbW5VUYGrlIeCeIB2coJ5gaCCkYGTkpickpp4knuDjZOkmpOOiZWZk4WHl5mMlIyJj4+InoWQinxyioWJjoicmp+blpSBlH9php2IZ4ahiJKEkYOJcYORl4+ajY+Mi4+Nd3uSkHqOi4yRlox8iHyAa3ZqbmtrbHp+YXl+jpWBdnqAd4ONfHlndGx0h5WLf4iGe5SQcXqEcHeMeoqMeol+g4yRn52FfXx4gox9d3FqbIGCeV93b21scnNWXm9icmFfbG55cGdwZmZzdGhxa2F3ZV1XZmFgclNQTlxmZV14cIh8X1xocmJiZWaSaV9oZFtncH5wa3Bzin12fIWAdHV/jHl7hoF4iINzhoV+jIyDe3mVd2ZyaoNgiH5vb2t6YGpudH90X3R9eYZ4dHOFfHigj5mwnKWPgop/g5qIf4uef4uak4+EiJiOjo+EdnR2c4Bwb4VzcHGDb2tpdm2Cbn18bXVzUk6C38iS1pN8b3SEdoOggpN3lZGZm5Cae5RzhZCfoZOTkImTm5SGfpaViI2NiJGNiJyAjoF4eox+iIyKnJydm5WTeo52aImSh2yIo4WSh5eDhmOMkZmPlYmWjI2Ki3F7lIl6jYiKkpGJeYV7fmx7ZXJva2t5eVyAeY+NgHp9fn+Gjnp5aHNrc4uPioKFhX2VjGt+fm6AjH+Mh32Ee4OQlZqainx3eIOReXNtZnB/g2xqdG9oanRtU15vZHBZYGtxd2ZramJmeHJwcGNfeGBgVmtfXnZPTktgZmNdeXGJdFxcZXZgYWVlj2RgZmFYaXNzbmtxdox8dHmGgnV2fotzf4Z/e4l+comHgZCKiHx+mHZlc218ZYh+b3BsgFpsbnl5c2F2enuNdnN3ind5n4ubrpugkIKFd4iVfnyJnIeFn5GOhYyXhJOOh4F0d3B5cW6Eb21ufnJkZHhwfG16fWpobGOkmsHcru+hc2t1hHaFooWSb5aQlaCUnIGScYaLo5eJjZWKkJ2Wg4CVkIWJj4CSioqXf4d7dX+JeIaEjZybmJmPj3eMdm6GiYt9iqOEkYmdhYVei5SXio+IjouLhIlsfJaBfYiFiZCPhnaFfX1rfWR4dWpueHNYiHqRhoV6fn+AhYt+eGVzan+KjoqDgn+MloVrgXZuiJGCkIV/gnuAkZaTmZB1dHiIjXVzcWd1eYJidG1vYml2Z1JgcWdsVV9udHlgcmNfaH1wcm5bY3JhYlduWlx3TU1MZGZhXnZziW1cXGR5XmBkZoVgY2JeWWpya25rcnaMfXR3hIF4d3uJcYOEfX6Ie3SLiYiVhox+fphzaHVxeW2Lem50cIFYcXp2eXFld3mGjGl3gIlyf5yHmKeco5KEfHCMlHh5i52EhaGNjnuVjX+ZiIR7cndwc2pvgWtpbHx0XmB4dntwdXtnYWV869q1ycPciHNsc4F3ipqIjWmYj4+dlZOBiXGFiaCOhYqVio2YlHyNk4iDiY97kYuGkIJ/dniDg3KHgpOblpSYhox3iH9whYKJh5mig5SMnoOJYYOVj4eJhomNh4CHaX2Uf32DhImOjYJxhn5/cXdodnJpc3dsWox9koGFfH+DgISKgnVhdGyIgY+Lgn5/kpF9bYJseIaQhpOEfYF+gZKTkJeJb3J6jYZ1bHFrcniAX3NpblxrdmBSZHJpZlNfcHZ0YG9gXWiCcXNqV2doY2lYbVdbdUxKTGVnX2Jyc4VpW1xleV5eZGd7YGRfXFlrbmVvanN3in5zc4F+enZ6iHOFgnyAh3Z3ioaPmIKMgXuTdmx2dXl4k3RueHp9WHmFcYBvZ3l3koJkdoaFcYqWhZmhm6KKhnNvkotyd46cfYqaiYl8n3+DmX+BeHFzbm9kcn5oZmx3d1tfeXt6cXGAaWFnYX/Vto6QpnhucXd7cJKQjIdqmY6InJKMhXtpiIuah4GSkYaHmI18jY2BgYmOfJCNfoqFenV7gnpwhoCWmY6TlIGIdYOGdoOAi5Odn4aVj59+iGGAk4eFiISJjX9/g2d9kH9+f4KLj5B+bYJ8gnRrbXZ0c3Z1a2KNgY5/hX58hH+Eh35wX3NxhXyPjYJ8f5KJenCDZnmDioeMg3yEfoCUkJGThG5weox/dW5vamx6fWJoamlYbHVaUmlyamJRYnJ4bGFlXVpqg21zYlxnX2RsX25UW29OSE9nZVxnbnGAbFpbY3NgXGNsd2RlXV1abGxibWpzdod/cW9/fHx0eIZ4hYJ9gId1eYmBkpV8iIZ2iYFvd3l7hJNwbXyBd16Df3SBbWl7c5RzZ3OHfHKSkYOan5ughod2dpR+bXaTl36IkYOKjZp8i5p2fXZxb2xqYXR8Z2JpdXpaX3d8em1xf2VkaGhXnY9ecXKWvMODdXGUiZB+cpeMhpyTjIhza4mPloF7lIyBhJuMfIuGfXyJjH+UiHWJhXZ3fYFxdYaBnpSGlY+DgnJ/iHWEfImYnZiHk46dgIhlfZOCgIWDiYlygX1nfot7eH5/h4uOfGmAfIN2Zm94eHN2c2xqjYWKgYp/eIGAhIN/a15yeHp+jYqFe4KPgH5ygGl4g4eLhoR4g3yBl42QjH1ubXuJfXd1b2hnfHZjXHBiV29yU1Nuc2lhTmZ0eGVgXVxYboBvc1llYl1qbWBwT1lrUURTZ2Faa25te29aW15tY1pib3dkZlxdYGxqY21qc3aCg3Fufnt/dHWDeoOCfIGFdn6JgZaQeIOKdIGIcnh5fo2Qb298gXFpgXl6fm1tfHaVa2p4hHRslI2FnpigmYWIbn2Mdmp4mI5/goqClZeJeY6Wb3pzcGxqZGB0e2hgZXF6WmFyfXlncXphZWWPsbJ3SmJapNnQlnF7kIuQeH6Vi4WZkY2Gb2yGkpJ6eZKGgISYinyHf3h4iYqEloBvi4hxdH16aXmFg6WRhJONg39vfoN2hHmFm5iTi5KQlIWHcHuSg32Dg4mDboF4aICEeHJ/f4KKhntlfX6EdWRwc4BoeHBvdZiNhYKKe3Z4gIR5gWtccX1ygYiFiX2GiXqIcoBucYSHjoSFc4R4gJmNjYR4bm9/hH93e2Voan1wX1l3WlhxbU5XcnNnYEtsdnRgXVtbWXR9cm9XZ11manFfb05XaFE/WWdfW3BqZ3lxW1tYa2VZY3B5X2hcXmVtaGZsaXF3f4dvbH99gHVwgXp/gX6Cf3aBhYmXinGCjXF7hnx5eYOTjHVqen9rb350f31vcnx7lG9ugH94Z5KKgqGZnZGChmeHg29nepWJfn+FgZmKgXyNjGl4cmtsZl9hb3ltX2JveVxka4J6YXF2X2Vm1Oq+ijI6PouOgHJ5hYiOjXaDl4x+ko6Nf25shY2Mdn2Pf4WClYl8g3hudoaEg5d3b4iFa3V7dGZ5goOnjIOPi4R9bn90doN5hpyQjJCRkoyLhn57kod4gISNg2yAcml/fnhtfHuBioN3YnmEgXFkcWh+bXRxdYGbi4B/hX5ydX2AcoFwW21+dHiKg4t7h4B8iHh6cWyIg4+Ei3KBeX+Xi4t/dG5rd4CAdXVcaWh3cFlXfFNacGVMWnJyZVtKcHdvXFpaWV10fnVoWWJbZ2ZuY2lMV2ZRPV5mXF11ZV90b1pZVG9kWWRxeVpoXl9nbWdqbGlwd32ObGmChH55boB7fYF/gnp1goGNk4VwgItueH6AenuIkol/aHt9anR7coZ7c3d9f4x5eIR9fGuMjIObnZaMgYBsjn5raH6OjHt+f4OUgn99iohrdXFnaGNbYmdyb2BhbHRhaHCJeWJzdF5jZJugj25cNVmvtXVqgIl9koZ2hZaFc46LindwbYWDh3V5iXiJfZOIen9zZ3aIfn6Yb3GGfmh2eW1leYiEpYeAh42Jfm5+dn+AfIyZh4KTkJiIi4SJfI+IcXt9hHxpfm1rgHt6aXp2gYeBcmB3gX5xZHJndYJtdHuFlJGBfIF/bnd5fHR+bVhvf3Z0jIKGd4h2gol6eHNuiYGPgYVyfn1+k4mJem5uam6CgnVuXGdmc3FRW3tOXHBcT1tycGRWS3N4aldZWVphcYB0YF1dYGdkaGlmTlloTUBhZFtgdmFcdGxXV1N0YVpkb3JXal5haGtnbWxpcHd8kmtohIl8fHB+fnuBgIJ6d4CAiouDcXuHb3F3g397iY2Pg2p+e253eXaKd314gIKHf4N+fnpthYyImKONhIN7dYt5a2yEiJF4fXuBkYCAfoqDcHJwY2ZeWWdfcHBgYGdwZmpvinRhdG9bYWRqdnt/vpymo8i4cYWEc5R9eIaTgnORjYhycnCEe4N0dYd0iHeUiHl5cWN3hnqAk2lyhHZmd3ZjanyDiJ6Cf3+Ojn1yfnOEeYCRkIJ4lo2Uj4iCiHuJiWx5eX91aHtpa395c2l6doCCfWhgd4d9amt0aHt/aXaBjJCUfnp+fnB7dnt0fmJWd31yc4qEgnyDcYaKd3hwcIOCjX99eX59do6Gg3ZpcWltiIJycF1oY3NuSmV1TF5uVVRZc25iUU9zeGFSWFhdYnCCc1thXWhlZGNqZFFacElEZGFbY3BeXXdnVFZWd11bZW5oVmteYWpnZW9vaHB2epJuaYiMeX1ye354gYGBfHZ9hIiGg3B2g3Jud4KCfomLk39wgHt3eXqBjHWDeH+BgYKEeoB1b36Ji5qeiH2FeneGe2d0hYyQen9/e4mGhHaPgGdvbl9kXFhlWW1yYWBhcWxraIluYHNpWV5kbYB3qdqpx4aHsnGJeHCNdXuHj4B6k4qAdXR1fneAcHF/bYR0lIZ4dWxgeoJ5iI9mcYNvZ3ZuW219gJCTgIB4kpJ9eHtth3WAkIuEdJaKkY6HhYV7f4VsdXZ/bWh3ZW17dm1qdnd/f3xgYniGemh0dWN+emd0hY6MlXt0f3VxgHp8bX9ZVnR+b3WEh3+AeWyIhnR4a3V/g4R9e314e3KLgX1zZ3RlbouEbXRbal91ZEhubkxbYldWVXhtYlBTdHZYUFVYXmFxhG9cYGNtZWNebmJUXHJHQmZfXWZoXVp6YlFVXHVbW2drYVZqX2BuZmZrcWhwdXiOdGuOjXV/dnh+d4GDgXt0foSIh4NvcX90cXV+hYKJjYp7d394g3x8hYd4h3x9gX6EgHt+c3Z5jI6fjYl6iXZ0g3lefYWZjHmGg3SFhoV3iXtibmxbYltbYVZqc2NgXGdub2aHcWFxZlddY2t/fMrOiLmiam1timxxhHJ8hYp/e5GFenl0eXV1e2psdWOEdZGCd3BnXn2CeouJZXKCa2pxY1hse4aciIKBc5eUd357bohxgYqLh3GXjpCIhYuDe3l+cXFvfWZocmJueHFqa3F3fHx5XGV5gHdpdXhmgnZndIeLjZR8coZpb36AeW58XVhyf210gIt8gm9viX9xdmh3f4F/gXZ9cXp0h3x6cmZzYW6MgmxzWGtfd1tJbmtNVlVeVFV7a2FPVHVyUVFUVl5idIVoXGBsamZjWW5hWGJwR0FoXWBmX11Ve15PVmRwWVtqaF1XaGBfcmZraHJncHJ3hnhulYp0f3p4fnmCiIB1c4CGhY2CcHB7eHd1eYaGhouGenx/dYt+fYWEhId/fn59h398eHZ5d5KTn3+MfIttdoB5Y4OHl4ZzkotvhYWBeoN0Y25qWV9bXV1UZ3NlYFlkcnJmgXNia2VXW2Bpf3e+rnugt21ic4ZodHxyeoOGe32Mf3h4c3Zve3Zlam5gh3WOgXNqYl5+eHmLhGZxfmhqa1pWb3iKpIGFf3GZk3GAeHWCbYCCkYdzlYiMh4SIhX14dHJuaHlgam1gbXZrZ2preXd6d1tnfXx4ZXJ9boR0ZXWFjIaVf2+LZmt6g3VtdGJcb3xrdXyMfIFmdYd9bXFndX54fn9yfWx6eoF6eHBmbGJuin5tblZrYHdVSmprT1JOaE5ZfGhiTlV2akxQVFVfZ3aDZl1gcWhnYVdpXVtraEpFa1piZFdZVXlaTlZtalldbGVcWmVjXnRmbWRxZ3JvdYF3cJmFdn9+d398hYd9dXOCiH+Vgm5zeHp6c3OFh4iIhHmBfXaPf3yEiY6EgoR7fouDe3d8d3eanZd6ioOGaXd9fGyDhJOAco+CcYWCfoF/b2ZsZlddW1xbVGRxZV9YY3N1aXVwZWVjV1xcaIBwb3KAdIllZXh+aXR2c3ODhXiAhHl3dHVua3twYWdrZ4Z0jYRuZl1ffXB7iX5pbXdmaWRVV3JwjaZ8hHx2lpBze3N8em57e5CFdph8h4aDhoN8dHBybGd1XG1oX2x0ZGdmaXpve3JZZ4F3dGdwgHeCdWJ3hYp8lIBui2pteoFxZnNlYG16Z3N3inx+YnWDdmlrcXR6cHl5c31mfn9/eXduY2ZiboZ8bWtWamJwU0tpa09MTnBHXntmYU1VdGNKTlNXYWp2fmVcZ3NpZmBWY1dicF1MS2tYY2FVVFVzVkxYdWRaX2thXFtjZV93Zm1icGlzbnJ/dHSagXd/gHd/foaFen11goR+l4VucnR7enVxhIWPgYB6i3V0kYB9gZSOgIWEfX6Mhnt+gHZ7o6WKeYiFhGx1fHt1g4KMem6Fc3qEfYGDdW5qaGVWXVtaWlRibmRbWGJze2lobWlgYldfWmmAamtvgGhsYWh5eGt0dHRuhYF7f312dW16aGp5al9lbmiBdo+EZ2VYYndpfod7b2lvZ2ZdVVhvaI+ndoF6fJCOeXVvfm9zdXmPgHeVdIWCf4WIdmpydmdobltsZF1sc19nYWl4aHttWm2CcnNpb4B+eXdhd4SEeI+Ecohxb3l/cmNxaFxvd2Rxc4h8eGJzgHBnanhzcmx4d3V3ZIN7f3d2b2RkY258fWtsVWliZlNLbWhPR1JrRWF4Z2FNU3FdSU1UWWVrd3tlXm1xaWRdVl9Vbm5XS1RoWGZeWE5VbFRKXHlfW19rXV1aYmVgemhsYW9vdW5vd3V6mH13gIF6gH+Hhnp4eoN+gZOEcXR0fnp2dIWIkH2AfZBsc5WBfIOfhX+HfYB+hoKAint2hKyff3qIh4RscoJ6doCAgXVuh298f3OJgGpvbWRkWF9aWVpVYmpnW1pedYFpXm5sXGJWXFxrgWZydH1pal1rdnZndHdxbYV7fX15dnJsemhpeGZdZHNoeneSgWNjVGVwZ4KFd3dmaGpgV1ZZaGSQp25+eICLjnpwcHxmeW96jHt2jnGEfX5/hm5kdnNkaGhca2Jdb29bZ19sdWR6aF10gG9ya3F7fXV1YnSFinqHhn9/d3J1f3VhcGxZcXRicXKFfHVkcn9sYWx6b2ppenh1cmaFdXp6dXBkYWRuc35pbFRpXl1US3NjUUdWYUdidmZhS1RvV0pMWFhnbHZ6ZGVucWZjWlddWHZlVEpcY1hoWFlJV2VRSGJ4Wl1fbFteXGFkXn9pamBvdHhtb252g5h5coGAfH+Ii4Z9dXaGeIeMfXR1dYJ4enqCjI59foSJanSXgXuLnX1+hXqBen58hohzcY+ujHt7hpB+ZnKIenR8fHZyb4Zse35sj3picG9iZV1lVllZV2Rma2BdXHOFaFhxblpeV1pcbHtjcHd2bGJbbXN0Z3V1cG2EeH6AeXdubnRlaXRlW2d1ZnZ2kXpfXVJlZmqCgnR9YmNpXFRYXmJjkKVoeXSChZB4bW55Z3htfIV7dYhygHh8eH9oZXZtYGZgXmpfXXNrWWVdb29iemVbd3trbm5wd3hzdGRyg5J+h4KIenZvcn1yYnhkW29wYnFxgnxzZnGAZF5udmlkZ3l6dG5vgXV0fXNxYl9mbm99ZGpTaFhZVE13X1FKWVlIYnRkYUlUbVNJTFpXaWxye2JsbHNjYVpaW2F2W1NLZF1YaVNXR1lgTkdpdVheYW1bW19iYl2FaGhhbnh5bG5qdoGQeW6DfoCBkoiEgXZ0iXSMhnRyd3aBd3x9foyPgH6TfnB4loN9mZJ5gIB4eX1/dIiDc3CZont6f4mVeWR1iHlzeHVsdG9+bHl8cJFyXnBvYGdibFRbWldoY21mXFxxiGVScm5bWlhYYGx3ZGl1ampeWm1zcW10c3RqhXx+f3x3bm5sZGlxY1tqcmR0do9zW1dTZGFygH9ygl1iY11TWmBbY5OfZXJxhYSRdGxqeWxvcHp8e3GAd39yenp6ZGZ2Z11iWmFnW153aFdiXm9oYXdgW3t2amlybndzc3RocIGUgoZ+hHZyanB8bWZ3V1xrbWJxc4F6c2Zvfltgb3FiX2pxfWxsdH5zcXhrcGFcZWxsemFnU2dVV1JQdltSUFlSSWNzYmBHVWpQSE9aVmtsa3xmbW9xYVxaWFlscFdSUGZXV2lTVEZaXE9IcnVYX2NtY1hhYGFdi2pjZG15eGtuaXV5hntrg32AhJl8goR5fYhuj4Zxb3d6fHSCgnyLj4OClnR4gpSFgZ+JdYCAgXN/gXCHgnVvopd0e4aLh3tmeItvbntvZnhwemxzdnKMa150bmFnZWtSXVtWZ2JsbFpccYxkT29uXVZYVWdqdGhidGVlXVpudW5xdXV5a4d8f3yId5BzZGRrbmFcbm1jc3iHa1pUVmJjeH19cYVdY19jVFtgWWOWlWNucIOFinNqaHpuZXN2c3xsenR1b3p+dV9mcmNbXlZiZFhhdWVVX2BtZGFxXV1+cGhpc3FzcHV1a22Ek4GIe4RxcmZufXByb1NbZmpmcXSBd3NibHZVYnFqW19uZXxlbXZ8c3Jzam1gWmRqandeZlRkVVZQVG1XUVdTUEhlcl9hRlhpTkhYVFZuaWR8aWt4a2JXXFVbdGRTUldoUVlmVFNIWlpQTXh3W19lbGlaYmBeXo9uYmZreXVub2h2dn9/bIOAfYaXe3+IgYp/a5OIcmd0gHt1gIN9iI5/i5NyfYqRhYefhnt/hoxzgIZzfYN2bqWMc4GNi3d4bnqMYGR8cGZ6c3lsbXF2gmdke2xjZmdoU15eVGdgbG9bXm6NaE5qbWBUVlNvZ3RrZXhkZV1ZcHRtcnp4c22Ie4B2nHt6a2FlbG1eYG9qZXB5fmdaVlhga3h8e3CEX2JeZ1ZZYFdknIhia3GBh313a2t4bFt2cWx6aXZzbm97gHJYam5fWV1VYWNXZHFjU15haWJibFpgfmxma3N1bm13dmtohYx/iHqHbXFmcHxtcm1jWWBoaW90gXRyXmlsUmVxZFRibmJ6Y3F2e3VrcG1rX1hhZ2h0XGVWYVZTTlhlUk9cT09IZXBdY0ZZaU1JX0tYbWRgeGhufmRgVV5UXXRbVFJgZk5dYVRTSlxZUFl1dl1fZm1oWGNhW16OcGNnandxc21odnR6g3OBg3qIjX58ioeOem6QinRsc4J0f3+IhYaRhJWPen2Mj4iRm4SAfIyEc3+Bc3R4cW6Tk5OTk5OTk5OTkpKSkpKSkpKSkpKSk5OTkpKSkpKSkpKSkpKSkZGRkJCPj4+Pj4+Ojo6Pj46OjY2Njo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo2NjYyMjI2NjY2Njo6Ojo6OjY6OjY2Ojo6Oj4+Pjo2NjY2Oj4+Pj4+PjoKAfnp6fX5+fX1/fn59fn5+fn5+fn+Af4CAgIGAgIB/gIGBgYOHjI6Ojo6NjY2NjY2NjY2NjZKSkpOTkpKSkpKSkpKSkpGRkZGSkpKSkpKSkpKSkpKSkpKSkpGRkZCQkI+Pjo6Ojo6NjY6Ojo2NjY2Njo6Njo6OjY2NjY2Njo6Ojo6Ojo6NjYyMjY2MjIyNjY2Njo6Ojo6NjY2NjY2Njo6Ojo6OjY2NjY2Ojo6Ojo+Ogn99ent8fn59fX5+fn5+fn5+fn5+f4B/gICAgICAgH+BgYCBg4aMjY6NjY2NjY2NjIyMjIyMkpKSkpKSkpKSkpKSkpKSkZKSkpKSk5KSkpKRkZGRkZKSkpGRkZGQkJCQj4+Ojo6OjY2NjY2Njo6Ojo6Ojo6Ojo6Ojo6Ojo2Ojo6Ojo6Ojo2NjIyMjIyMjIyNjY2NjY2NjY2NjY2NjY2Njo6Ojo2NjY2NjY2NjY6Ojo6Cf3x6fHx9fn19fn19fX59fn5+fn5+gH9/gICBgYGAf4CAgICDhouOjo2NjY2NjIyMjIyMjIySk5OTk5OTk5OSkpKSkZGSkpKSkpKSkpGRkZGRkZGRkJCQkJGRkZCQkJCPj46Pjo6Ojo6Ojo6Ojo6Ojo6Oj4+Pjo6Njo6Ojo6Ojo6Ojo6OjY2MjIyMjIyMjIyMjY2NjY2NjY2NjY2NjY2Njo6NjY2MjIyNjY2Njo6OjoN/fHp8fH1+fH1+fXx9fn59fn5+fn5/f3+BgYGAgICAgYCAgIOGi42NjY2NjIyMjIyMjIyMjJA+LjExMTEvb4eEhISEiF0tMDAwMC1GoaGhoaGhoJqZmpqampqKg4SEhIOEd2VnZmZmaFxDREREREVCMS8vMDAwLz5ERERERENYaGdnZ2dmb4SDg4ODg4OLjIyMjIyMjY2NjYyMjY2NjY2NjY2NjIyMjIyNjY2NjY2OhX19e3t6fX58fH59fX1+fX1+fn5+fn9/f4GBgYCAgICBgICAgoWKjI2MjIyMjIyMjIyMjIyMjy0aHR0dHBpohYKCgoKGUxgdHR0dGTekpKSkpKSjnJycnJycnImBgoKBgYJyXV9fX19hUjQ1NTU1NTMfHR0dHBwcLjc1NTU1NE1hX19fX15qgoGBgYGAgYqLi4yMjIyMjIyMjIyMjIyMjY2NjY2MjIyMjIyMjY2NjY2GfH16e3p8fXt8fn19fX59fX5+fn5/f3+AgYCBgYGAgIGBgYGChYqNjYyMjIyMjIyMjIuLi4uRiYeHiIiIh46QkJCQkJCMh4eIh4eHiZKTkpKSkpKRkZGRkZGRj46Ojo2NjYuJiYmJiYmIhYaFhYWGhYODg4SEhISFhYaFhYWFh4mIiIiIiImKioqKioqKi4uLi4uLi4uLjIyLi4yMjIyMjI2NjIyMjIyMjIyMjY2Njoh8f3l7ent8e319fX18fX19fX5+fn9/f4CBgYGBgYGAgYCAgYKFioyMjIyMjIyMjIuLi4uLi5GTk5OTk46RkpGJh46KkJKTkImQj4yOhYqRkZGRkJCQkJCPj4+Pj4+Ojo6Njo6Ojo2Njo2Njo6Ojo6Ojo6Oj4+Pj46Ojo6Ojo6NjY2MjIyMjIuLi4uLiouLi4uLi4uLi4uLi4uLjIyMjIyMjIyMjIyMjIyMjIyNjY2NiX59eHh5fH18fX19fHx9fX59fn5+f3+AgICBgYGBgYCBgIGCgoSKjIyMjIyMjIyLi4uLi4qLkJCRkZGPhI6QkIaKj4WNkJCMiIeHiI2IiZCQkJCQkJCQkI+Pj4+Ojo6NjY2NjYyMjIyMjIyMjIyMjIyMjIyMjI2NjIyMjIyMjIyMi4uLi4uLi4uLi4qKiouLi4uLi4uLi4uLi4uLi4yMjIyMjIyMjIyMjIyMjIyMjI2Lfnx3dnh7fXx7fX18fH19fn5+fn5/f4CAgIGBgYGBgIGAgIGChIqMjIyMjIuLi4uLioqKioqQkJCQkIqFjoiOhoaPiY2QkJGNhoWGj4mMkI+Pj4+Qj5CPj4+Ojo6OjY2MjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMi4uLi4uLi4uLi4uLi4qKioqKi4qKi4qKi4uKioqKi4uLi4uLjIyMjIyMjIyMjIyMjIyMjIt+e3d2eHt8fHx9fX19fX1+fn5/fn9/f3+AgIGAgYGAgYCBgYGEiYyMi4uLi4uLioqKioqKipCQkJCPhYOMjpCOiYyKjpCQj4eLh4iMiI6Pj4+Pj4+Pj4+Pjo6OjY2NjYyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIuLi4uLi4uLi4qKioqKioqKioqKioqKioqLi4uKioqKiouLi4uLi4yMjIyMjIyMjIyMjIyMin18dnZ4fHx7fH19fH19fn5+fn5+fn9/f4CAgYCBgYGBgIGAgYSJi4yLi4uLi4qKiomJiYmJkJCQkJCMhoyJjoeFjYmOi4yMhIuHhoyIj4+Pjo+Pj4+Pjo6OjY2NjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyLi4uLi4qKioqKioqKioqKioqKioqKioqKi4uLioqKioqKioqLi4uLi4uLjIyMjIyMi4uMjIyKf353eHp7enp8fHx8fX1+fn5+fn9+fn9/gICAgICBgICAgYCBhIqMi4uLioqKioqJiYmJiYmPj4+Pj5CMjouPjIqPjI6MjY2Ii4yLjYyOj46Ojo6Ojo6Ojo6NjYyMjIyLi4uLi4uLjIyMjIyMjIyMjIyMjIyMjIyMjIyLi4uLioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi4uLi4uLi4uLi4uLjIiAfXh5enp6e318e3t9fn5+fn5/f35+f39/gICBgICAgIGBgIGEiouLioqKioqJiYmJiYmIiI+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pjo+Ojo6Ojo6Ojo6Ojo2NjYyMjIyLi4uLi4uLi4uLjIyMjIyMjIyMjIyMjIyMjIyMjIuLi4uKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLi4uLioqKi4uLh4B8eHp6eXt8fHt8fH1+fn5+fn9/fn9/f39/gIB/gYGAgIB/gYSJi4qKioqJiYmJiYmJiIiIj4+Pj4+Pj4+Pj46Pj4+Oj4+Ojo6Ojo6Ojo6OjY2NjY2NjY2MjIyMjIuLi4uLi4uLi4uLi4uLi4uLjIyMjIyMjIyMjIyMi4uLi4qKioqKioqKioqKioqKioqKioqKioqKioqKiYmKioqKioqKioqKioqKioqKioqKi4uHgHt5eXh6fHx6e3t9fX5+fn5+f39+f39/f39/f3+BgYCAgH+BhIiLiomJiYmJiYmJiIiIiIiOjo6Ojo6Pj46MjI+Sj5COjo6Ojo6NjY2NjY2NjY2NjIyMjIyMjIuLi4uLioqKioqLi4uLi4uLi4uLi4uMjIyMjIyMjIyLi4uLi4qKioqKioqKioqKiomKiomJiYqKioqKioqJiYmJioqKioqKioqKioqKioqKioqKi4aBe3h5eHp8ent7fH19fn5+fn5/f35/f39+fn9/f4CAgYCAgIGEiIqJiYmJiYmJiIiIiIeHh46Ojo6Ojo6Ojo+MkJOQkI+Ojo6NjY2NjY2NjYyMjIyMjIyMjIuLi4uLi4qKioqKioqKi4uLi4uLi4uLi4uLi4uMjIyLi4uLi4uLioqKioqKioqKiYmJiYmJiYmJiYmKioqKiomJiYmJiYmJiYqKioqKiomJioqKioqKhYB6eHl5fHt6ent8fH1+fn1+fn9/fX9/f35/f39/gICBgICAgYSIiomJiYiIiIiIiIeHh4eHjY2Ojo6Ojo6Pj4+PjoyNkI2NjY2NjY2MjIyMjIyMjIyMi4uLi4uLioqKioqKioqKioqLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4qKioqKioqJiYmJiYmJiYmJiYmJiYmKioqJiYmJiYmJiYmJiYmKioqJiYmJiYmJioqFf3l6eXh7e3p7fHx7fn5+fX5+f39+f35/fn+Af3+AgICBgYCChIeKiYmIiIiIh4eHh4eHh4eNjY2Njo6Oi42Nj5WPiYyPjYyNjYyMjIyMjIyMjIuLi4uLi4uLi4qKioqKioqKioqKiouLi4uLi4uLi4uLi4uLi4uLi4uLi4uKioqJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYR+eXt5ent7eXt9fHt+fn59fn1+f35/fn9+f3+AgICAf4CAgICEh4mIiIiHh4eHh4eHh4aGhoyNjY2NjY+MjImKj42IjJGPjY2NjIyMjIyMjIyLi4uLi4uKioqKioqKioqKioqKioqKiouLi4uLi4uLi4uLi4uLi4uLi4uKioqJiomJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJg355e3p8e3p7fX17fH9+fn5+fX5/fn9+f3+Af4CAgH+AgH9/f4OGiIiHh4eHh4aGhoaGhoaGjIyMjIyLiYyKiIeJhoyOjJCMjZGOjIyMi4uLi4uLi4uLi4qKioqKioqKioqKioqKioqKioqKiouLi4uLi4uLi4uLioqKioqKiomJiYmJiYmJiImJiYmJiYmJiYmJiYmJiYmJiYmIiImJiYmJiYmJiYmJiYiIiIiIiYmCf3h7e3t6enx9fHx9f39+fn19fn9/f39/f4F/gIB/gICAgICAg4aIh4eHhoaGhoaGhoaGhoWMjIyMi4yOjoyKioeEiIuKjIuNjo+Li4uLi4uLi4uLi4uLioqKiomJiYmKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiomJiYmJiYiIiIiIiIiIiImJiYmJiYmJiYmJiIiIiIiIiYmIiIiIiIiIiIiIiIiIiIJ/eHp7enp6e3x8fX1+f35+fX1+f39/fn+AgICAf3+Af4CAgYCDhYiHh4aGhoaGhoaFhYWFhYyMjI2NjJCSjI2Ii4mJi4uLi4mLjIqMi4uLi4uLioqLi4qKiomJiYmJiYmJiYqKioqKioqKioqKioqKioqKioqKioqKiYqJioqJiYmJiYmIiIiIiIiIiIiIiImJiYmJiYmJiYmIiIiIiIiIiIiIiIiIiIiIiIiIiIiHgXx4e3x5enp8fHx9fX9/fn59fX9/f39+fn+Af4B/f3+Af4CAgIKEh4eGhoaGhYWFhYWFhYWFjIyNkY+PjZGJjIaJjIuIiImMiYeNjo+NioqKioqKioqKiomJiYmJiYmJiYmJioqKioqKioqKioqKioqJioqKioqKiYmJiYmJiYmJiYmJiYiIiIiIiIiIiIiIiImJiYmJiYmJiIiIiIiIiIiIiIiIiIiHh4eHh4eHh4WAenl9e3t7enx8fHx9f39+fn19f39/f35+f4B/gH9/f4B/gH+AgoSHhoaGhYWFhYWFhYWFhISLi46PjoyLj4iHiYmMjYWFjo2KiYyNi46KioqKiomJiYmJiYmJiYmJiYmJiYmJiYmKioqKioqKiomJiYmJiYmJiYmJiYmJiYmJiYmJiYmIiIiIiIiIiIiHiIiIiIiIiIiIiIiIiIiIiIiHh4eHh4eHh4eHhoaHh4eHhH55eX16enp7fXt8fX5+f35+fX5/f39/fX5/f3+Af39/f39/f4CChIaFhoWFhYWFhYWFhISEhIuLjI6MjI2Lh4mIiomGgoiNjoiKi5GTj4uJiYmJiYmJiYmJiYmIiYmJiYmJiYmJiYmKioqKiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiIiIiIiIiIeHh4eHh4eIiIiIiIiIiIiIh4eHh4eHhoaGh4aGhoaGhoaGh4eDfXp5e3p5enx8e31+fn5/fn59fn9/fn9+fn+AgICAf35/f39/gIKEhoWFhYWFhISEhISEhISEioqOjYmIiIqKh4iHiomIioiIh4qGi5GPiomJiYmJiYiIiIiIiIiIiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmIiIiIiIiIiIiHh4iIh4eHh4eHh4eHh4eHh4eHh4eHh4eHhoaGhoaGhoaGhoaGhoaGh4J8eXl6eXp7e3t7fX5+fn5+fn59gH9/f39/f4CAgH9/fn9/gICAgoSGhYWFhISEhISEhISEhISKi5CPiYmJi4qHh4WHiYuKiYSLjYmOjYqJiYmJiIiIiIiIiIiIiIiIiYmJiYmJiYmJiYmJiYmJiYmJiIiIiImJiYmJiYiIiIiIiIiIiIiIiIeHh4eHh4eHh4eHh4eHh4eHh4eHh4eGhoaGhoaGhoaGhoaGhoaGhoaGgXt4enp4e3x7e3x+fn9+fn5+fX1/f39/f3+Af4B/f39/f3+Af4CChIaFhYSEhISEhISEhISEhI+Qj4+IiYuIhoeIiYuLjIuJioqNio6Oj4iJiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIh4eHh4eHh4eHh4eHh4eHh4aGhoaGhoaGhoaGhoaGhoaGhYWFhYWFhoaAe3h5eXh4enp8fX1+f35+fn59fn9/f39/gIB/gICAf39/gIB/gYKDhoiGiIaDhISEhIODg4ODkpKOioeKi4qLh4uNiYqJi4iHiouIio+SioiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIh4eHh4eHh4eHh4eHh4eGhoaGhoaGhoaGhoaGhoaGhoaGhoaFhYWFhYWGhn96eXh4eHl5eXx9fn5/fn5/fn1+f35/f3+Af39/f4CAgH+AgH+BgoOHjo+PjoiHhIWFhoaFhYWSkI6KiYmIiImKioiIh4aKjIiHiYmOkJGNh4iIiIiIiIiIiIiIiIiIiIiIh4iIiIiIiIiIiIiIiIiIiIiIiIiIh4eHh4eHh4eHh4eHh4eHh4eHh4aGh4eHh4aGhoaGhoaGhoaGhoaGhoaGhoaGhoWFhYWFhYWFhYWGf3l4d3d3eXp5e3x9fn9+f35+fn5+f35+fn+Af4CAgICAf3+Af4GBg4eOjo6Ojo6Mjo2OjY2MjZCQjomHhoiJiYeIiouIiYyJiYaKjY6PkYuIiIiIiIeHh4eIiIiIiIiHh4eHh4iIiIiIiIiIiIiIiIiIiIeHh4eHh4eHh4eHh4eHh4eHh4eHh4aGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaFhYWFhYWFhYWFhYZ+eXd5d3d6eXl8e31/fn5/fn5+fn5+fn9+f4B/fn+Af39/f39+gIGEiI6Ojo6Ojo6Ojo6Ojo2NkJGOi42JjIiIiYaHiYaIioiHi4yLjpCQiIeIiYmJiIeHh4iIiYmIh4eHh4iIiYiIiIiIh4iIiIiHh4eHh4eHh4eHh4eHh4eHh4aGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoWFhoaFhYaGhoWGhYSEhIWFhoaFhIWFhX55d3l2eHl4e3x7fn5+fn5+fn5+fn5+f39+f39+f39/f35/f3+AgYOGjY2Ojo6OjY6NjY6OjY2Qj42Ni46KhoiKhISLiYeDhYSDi4mLj42JjI6QkI+NjYyLjY6Pj42NjI2Nj4+Pjo6MjYyMjY2KiYiHiImHh4aHh4eHh4aGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoeHiYqKiIeJi4yNjo2LiImLi42OjYyJiImMgHl3d3Z6eXh7e3t9fn5+fn5+fn5+fn5/f39+fn5/f4B/f4B/f4CBg4aMjY2NjY2NjY2Qj4+Pj46NjI6KiYuMjIeFiY2Lh4aIh4aHh4uNjo6Pj4+Pjo+Pj4+Pj4+Pj4+Pj4+Ojo+Pj4+Pj4+Pj4+Oj46Oj46Mi4uJh4eHh4aIhoaGhoaGhoaGhoeLiYeHiIiLjY2Mi4yLjY2Ojo+Ojo6Pj46Ojo6Ojo6Ojo6Njo6NjY2AeHZ4eHp4enx6fH5+fn5+fn5+fn5+f39/fn59fn9/f39/gH9/gIGDhoyMjIyMjY+QkpOTk5KSjYyMjIqHioyKh4eJiYWCiouIiYWJjpCNjo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6NjI2NjI2LiYaHh4eHiYqLjY6NjYyNjY6OjY2OjY2NjY2NjY2NjY2NjY2OjIyNj4+OjY2MjIyLi313dXd5enp7e3p+fn5+fn5+f35+fn5/f39+fn1+f39/gICAf3+AgYOFj5KRkJGSk5OTk5OTkpKLi4uLiomMiouLiYuKhoeOjYiIjI6OjIuMjIyNj46Njo6Ojo2NjY2MjY2NjIyMjIyMjIyMjY2NjYyMjI2NjYyMjI2NjIyNjIyMi4yMi4yMjI2MjIyMjIyMjIyMjIyLi4uLi4yNjY6Sk5OSkpSRkJOVlZSTk5COjo6Oe3Z2d3h6ent7e31+fn5+fn5/fn5+fn5/f35+fn9/f39/gIB/f4CBgoSNkpKTkpOSkpOTkZKSkoqJioyJi4qJjIuKioiHiYqKi4mKjY2Mj46Nj5KUlJOUlJOTkpGSkI+Ojo2NjY2Pko+OkZGOjIuKioqLi4qKi5CPjoyMjIqKioqKioqKiouKioqKi4yLi4uMjIyKiouLi46RkpOTk5SUk5STk5SUlJOTk5KSkpKSk5F6dXZ2eHt7e3p6fX5+fn5+fn5+fn5+fX5/fn5+f39/f3+Af39/gIGChIuRkZGRkZKSkpGRkpGRiYmIiIqMiYiJiYuJhoSJhoyKh4ySkpKTk5OUlZWWlZWUk5OUlJSUk5SUlJSVlZWVlZWUlJOTkY+QkZKQjoyRlZWVk5KSjo+QjYqKi4qKi42OjY6RkpCRkpKSkpGRkpKSk5OTk5OTk5OTk5OTkpOSkpKSkpKSkpKSj3h1d3l6e3t7ent9fX19fn5/f35+fX5+fn5+f39/fn9/f4B/f3+AgYKEi5GQkJCSkpKRkZGRkZGIiIiIi4uJg4eLi4yMiIeHjYyNkpSSkpOTlJWWlpaVlZSSkpOTlJSUlJWVlZaXlpaWlpWUk5SUlJSVlJSUk5OVlZWUk5KTk5OTkJGSkZGSk5OTk5KSkpOSkpKSkpKSkpKSkpKSk5OTk5SUk5OSkpOTkpKSkpGRkZGPdnJ3enp7e3t8fX59fX1+fn9+fn9+fn5+fn6Af39/f3+Af3+Af4CBgoSKkJCRkZGRkZCQkJCQkIeHh4eIiIiFi4+KjI6Njo+OkJWUk5OTk5SUlZWVlJSVk5KSkpKTlZSUlZaWlpaWlpaWlpSTk5OTk5OUlJOSk5SVlZSTkpKSkpOTk5OTk5OTk5KSkpKSkpKSkpGSkpGRkZGRkZKTlJSUlJSTkpGRkZGRkZGRkZGRkYx0c3d6ent7e3x9fX1+fX5+f35+fn5+fn5+fn9/f39/fn9/f39/f4GDhIqQkJGRkJCQj4+Pj4+Ph4iKi4yNjYuOj42Mjo6RkpGSk5OSkpKSk5SUlJKSk5OTk5OSkpOUk5OTk5WVlZWUlZWUk5OTk5KSk5OUk5KTlJSUk5KSkpKSk5OTkpKSkpKRkZKSkpKSkpKSkpKSkZKRkZGSkpOTlJSUk5OSkZGRkZGQkJCQkZCRinN0dnp8fHp7fXx9fn59f35/f35+fn9+f31+f39+fn59f39/gH+AgYKDipCQkZGQj5CPjo+Pjo+Oj4+Pj4+Pj4+PkI2OjpCRkpKSkpKRkpKTk5OTkpGSkpKRkZKSk5OSk5OSk5STk5OTlJOSk5OTk5OTk5OSk5OTkpKSkpKSkpKSkpGRkZGSkZCRkZGRkpKRkZGRkpGRkZGRkpKSkpKSkpKSkpKRkJCQkJCQkJCQkJGGc3V2e3x8e3x9fX1+fn1/f35/fn5/gH9+fX5/fX5/fn5/f3+Af3+BgYGKkI+PkI+Pj4+Pj4+Pj4+Oj46Oj4+Pj5CQiI2PkJGRkpKSkpOTk5OTkpKSk5KSkZGRkZKSk5KTkpGRkpKSkZKSkpKSkpKTk5KRkZKTkpGRkpKSkpKRkJCQkJGRkZGQkJGSkZGRkZGSkZGRkZGRkZGSkpKSkpKSkZCRkZCPj4+Pj4+Pj4+PkX9ydHh8fHx7fHx9fX5+fn9+fn5/f3+AgH99fn5+f39+f39/f4CAf4GBgYqPj4+Pjo6Ojo+Pj46Ojo6Ojo+PkI+Pj4+GjpCQkJCRkZGRkZGRkZGQkJCQkZGRkZGRkZGRkZGQkJCRkZCQkJGRkZGRkZGRkJCQkZGQkJGRkZGRkI+PkJCQkJGRkJCQkJCRkJCQkJCQkZCQkJCQkJCQkZCQkJCPj4+Pjo+Pj46Ojo+Pj4+PeHJ2eXx9fHp9fH19fn5+f35+f39/f4CAf39/fn5/f35/f39/gIB/gYGAio6Ojo6NjY2Ojo6Ojo6NjY2Oj4+Pj4+PjoiQkZCPj4+QkJCQkJCQkI+PkJCQj4+Pj5CQkJCQkJCPj4+PkI+PkJCQkJCQj4+Oj4+QkI+PkJCQkJCPjo+QkJCPj4+Pj4+PkJCQkI+PkI+Qj4+PkI+PkJCQkI+OkI+Pj46OjoyMjY2NjIqDiYhzc3Z4fX58eX18fX1+fn5/fX5/fn9/f39/f4B/f39/f4CAgH+AgH+BgYCJjY2Ojo6Ojo6OjY2OjoyNjY6Ojo6Ojo2NiJCRkI6Njo6Ojo6Ojo6Pjo6Ojo6Ojo6Pjo6Ojo6Ojo6OjY6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Pj46Oj4+Pj4+Pj4+Pjo+PjY2MjYyNjoyLi4mJiYiFhYSDgoKEgnR5fXp4dXJrZWltb2xmZmdncHNzd3l9fnl6e3x9fX1+fn59fn9/fn9/f39/gIB/f3+AgIGAgIB/f4CBgImNjY2NjY2MjYyMjIyMi4uLjYyMjIyMjIyGj5GRjIyMjIyMjIyMjIyMjIyMjIyNjY2MjIyMjYyMjY2MjIyNjY2NjYyMjI2MiomKi4uJh4KAh4iEgXt6gH57fXx8fXlzcnJycnV1cG1ramppZ2NkYV9bXF1eWFVXWFlTS0VJSkpLTE1PT0tgdHR3eX19eHp5e3x8fX5+fn1+f39+f35/f4CAgH+AgICBgYCAgICAgIGAf4OEhYSFiIuLjYyMjIuLi4yGiYqKioqKh4OOkJGNiouLi4uMiYmKioqKiouLi4eDi4qIiYmGhYWEhIeJiYWCg397fHl6e3pzcHFxcW1samdsbWdlZmVmZGNlZGVkZWVlZWRkZGNhYV5dXFpYWFdUUFFSU1JTTU1KSUZESEpHR0hHR0xOSWdzdXh6fXp4d3l8fHx8fn5+fn9/fn9/f39+f4CAgIB/gICBgICAgICBgYFnXmBjYWNucX17ent/fXd8fHZ4ent4eHpvcHt4eXt8e3h3e394dXd0dHZ0dXZ3dXFycW5wcnBnaGtsbm9tamlpaGhlZWRkZF9gYWJgYF5dWVhaWltdXV9gX2BfX19gYmFeXl5eWVldXF1bV1dWUlRSU1NOUUpISUZERUhMTEhGR0lLSklNbXJ0eHp7end3eXt6e3x+fn1+f39+f35/f35+gIGAf3+AgIGAgICAgICCgWdYW1pZXFtcY1xaXF5ga3FtcHBvbm5vbmtpbmxrbG9qaWtraWpraWZmZ2dnaGhnbWdqZ2hlaGdjYmJhYmBgXVhbW1dYV1RWUVBUU1NNSkxLTExOTk9UWFhXVVVUUlBQTU1QT05LTE1QUU9MTEpHSUlHSEhJSEhIR0ZHSEpKSEhISUlISVZwc3V5ent5dnZ5enp7fH59fX5/f35/fn5+f3+AgX9+f4B/gICAgICAgIGBbFtYVlZWWVlaWVlYVVZoamxubmxra2poaGloZGVkYlxiZl9fYWNfXF9dYF1eWl5dWVleYmFeXlpZX1tYV1NOTUxLS0tMSUtNTktKS0tMSktQTEtLRkdHSUlGR0lISUZFSEdGRkVERUVEREVJSUlHSEdIRkZLTUtJSUlIR0hLTU1LTExMVXFzdnl6e3h2d3h3ent8fn1+fn9/f39+f3+AgIGAfn5/f4CAf4CAgIB/gYJoUlRVVlNVV1lZWVdXV1tbYWNfXlxbWFZWWVZSVFJRUVVUU1NUUE1KTU5QUk9NUFFRUVFSVlZSUVFUUFBOTk9MSk1MS0xKSktLRklJSkxJR0pISUlFR0dGRkVFSElKR0ZHRkZHR0hKR0dISEpMSkpLSUlISktLSkhKS0pISUtMTU9QUEtUdHN1eHp6eHZ2d3d6enx+fX5+fn5/f35+fn+AgYB/f3+AgYB/gICAgH+AgmlQUlRXVVRWWVdYWFpbVFRTUlBRU1FRUU9OTlBQUU9MTlBPTk5NTEtNTk5QTU9QUFJRT05NT09PTk9QUFFPTk5PTk5QTk1NS0lISEpJSUlJR0ZHR0dJSkhJSEhJSEhHSEdISElISUxLSklISkpJSkpIR0pMS0pJSUhKSktMTk1NTU9RTFVzcnN3enl3dnR2eHp7fX19fn5+fn9+fn5+gICBgICAf4GBgH+AgICAgICBbE9PTlRZVVVdW1lXV1hOTUpKSUZKT0xKSkdJSk1NS0pMTUpHSUlJSktMRkRGSktKTklOTkxNT01MTE5PT09NTk9MTk5OUFBPTE1MTk1MTEpJSEdJSElISElJS0xLS0pJS0pJSklJSUlJR0dKSUdJSUpKTk1OTEhJSklJSk1PT01MT1JOWXBwcnd4d3d0c3R3enx+fX5+fn5+fn5+fn9/gICAgICAgYCAf39/gICAgIFvS0pNTlFOTlVXVlZSU0lFQ0VFUkREQT5CP0RAQD5CREFAQURHRkVIRUJBQEBDQ0VTQlVQSEtPS0lJSkhISklKSUlLSkxQTk1MTU1MTU1NTElIREZGR0ZGRklKSUlLSkhMSklKSkpJSEhKS0tIRkdJSklLTU5OSktPTUxLTU1PUE5QT1BgcG9yd3h2dHJzdXd6fX19fn5+fn9+fn1/gICAgICAf4CAgIB/f3+AgICAgXNQUE5OUE1KS1BSUE5RQ0RCQUZRRT1DPT9FSDk6Oz0/PTxBRkA+Ojs+PjxFRD0/RllDW1Y+RUVHR0dHQkREREZFR0dHR0pHSEpLR0NER0pHQ0RFQUFDR0hHSEdISktKSElMS0lISktLTU5MTUxMSkpMS0lLTU9PUFNRT1BQTk9QUlFNUGdwb3N2dXRycXR4eX19fX1+fn5+f4B+foCAgH9/gIB/f4CAgH+Af4B/gICCdlRVUVFQT0xNUFBOT09BQkFAQkE/Oz48Pj8/Ozg5ODs7OkA7Oz48Ozs8PEhMPT1DXUReYT5BRERGQ0ZGREZJSEM/QEBAQUFCQUE/Pjw9PkFAQD8+P0BFR0dHSUtMTk1OTUxNTUpLTVBVU05MTlFOTk1OTE1NTk9OTk1LS05OTk1OTkxUbnBwcnR1c3Fydnl5fX19fn1+fn5/gH5+gICAgICAgH9/gICAgH9/gH+BgIJ4UVFSVFJTUVNTUVFST0BAPT4/PD8+QEE/PT45Ozo7Ozk5Ojg4Ozw5Nzk7PD49OkNgPlxrQ0FCP0FAQ0ZEQ0NDPzs+PkBDQ0E/Pj9BPkBAQj9APD9CQEFDRUVFSktQT1BPTU1OTExMT1JRUFJOTExPTUtOT0xMTEtMS0tKS0tKTU1LS1xxcXF1c3VycXR4eHp9fn1+fn5+f39/fn5/gIGAgH+Af4CAgICAf4CAf4CAgXxSTU9RUFFSUlRSU1NOPDs8Ozs7P0BBQkA9PDk8PTw6Nzk6Ojk3OTo6Njk6OTk6RmdAXG0/OTg8PD1AQUA9Ozs+PD09QEJDQT9BQkE9Pj09Oz0/Q0RCQD9BREJFR0pKSkpKTE1MTExNTExOVVNLTE1USVBKSU1KSUpLS0pJSEdKS0lKZnJxc3RzdXJydnl5e31+fn5+fX9+f39/f36AgICAf4CAgICAgIF/gIF/gYCBgFZMTlBQTlJRUFBRUU44PT88PDo9PkFAQT8+PkA/Pj48PT0/QD09PT9EOz49PjtGaUtcbT46PD49Pz9AQUA+P0E/QEBBQEBAPT8/PTw6Oz09PD9AQUJCQUBCREZGRkdGR0dISUtMTExLTEtKS0lKSk1MTEpMS0lISUxMSklJSElLR01tcHF1dXR1c3V4eXl8fX5+fn5+fn5/gH9+gIB/f39/gH+AgYCAgYCBgICBgYCCYUtPT05OT1BPT1BQTzo8Pjw9Oz8+PkFBPz0/Q0NEQT89PkBBP0A7XXBCPkRGP01kWF1lPj09Ozw+PkFBPz5AQD9BPz89PD48PTs7PD0+QUA/QD5AQ0NEQkRFSEVFR0hISEdGSUpJSUlJSUhKSkpKTEtKSklJSEhKSktMS0lLSkpIVnBwcXNzdHR1eXp7e3x+f35+fn5+f39/f39/f3+Af4CAgICAf4GBgICAgIGBgIJtTFBRTk9QTk5PUFBPPjw8PT4/P0A+QEA/Pz9DRkQ+PDw9QD04Ojpud0o3PDlFWmNgYGRJOzw9RDo7Pz49PD07PEA9PTw8Pjs9PD0+QUBCQUBAP0JEQ0RFRkZGQ0VHSElJSEhJS0tMTUpKSUpNTUpLSktJSEhISEpJSktKSk5MSUlfcHBycnJ0dXZ6e319fH5+fn5+fn5/f35/f36AgIB/gICAgICAgYGAgICAgIGAgnZNTk5NTk5MTE5QT0w+QTw8PT8+QkM/PkFBQUJBQFtRPDw9TFBJSHZ3Tzc4OVRobWdobGBBO05ROTs+Pz89PDg6Pjw9Pj89Oz4/QEJDQkJDQ0FCQkFCQkRCQkRCRENGSUdGRkhJSUtNSklKSktMSkpJSkVESUlGRkhISUpKTEpGRmdwb3FxdHZ1d3t8fH18fn59fX1+fn9/foB+fn+AgH+AgICAgICBgYCAgICAgICBek5JS0tMTExFSUxOTTw/PDw9PkBAQUE7QkNCQ0BFdXlIPGGBhIB6e3dcRj1BZXJ0bG1ybU9GZk86PT5BQ0A8OTtBPz4+QT07P0JAQkNCQENDQUNBPT0+QD0/QUFBQENFRUBAQ0JDR0dFRENGRUZGR0VEQEFHR0ZDRkRHSEpHQz5IbG9wcHF0dXZ5fHx8fHx+fn1+fn5+fn5+f36Af3+AgICAgICAgIGAf4CAf4CBgIF+UUhLTU1NS0pLTE9RQD8+PkFBQEBBR0FCRENFQUlzeWtmhISDgoOAfWBYUUZicXJxb3VxYGBpSkBCQkZIQz08QERDQUE/Pj1AQT4+Pj88PkBER0VAPkBBP0BDRkVDQkNDQEJEREJERUFCPkFCQkFCQEA9QUJDRENDQUNFR0E/PVZwcHFwcnV1d3p8e3x7fX9+fX19fX1+fX5+fn9/foB/f4CAgICAgYCAgIB/gIGAgX5SSEtNTUxLS05OUlVEQkBDQ0FBQkBCQ0BAQUFAR3B0fYKCgYN+fYR0SlNmWGFxcnR2fHRrbWNJSklJTU1LRUNGR0hFR0VFRUREQ0E/QD4+QkZKSkdFRUdGRkpOTktKSUdHSEtMSUdHQ0REREVEQUJCQ0BDREVEREVERUZDQkFEZW9wcXF0dnV4e3x6fHx+f319fX19fn59f4B/f39/f39+gIGBf4CBgICAgH+AgICAfVJJSUpKSEpKTE9SU0dGRUdIREdIREA+PDs+QEVFaXN9gXx/hH55hnFCSGRtbHaBhoeHhHRrVklNTE5PT0xIR0hHSElJSEhHR0hIRUNFRUVFRkhKSkZFR0lKTU9PTU1LSktKTU5LSUhHSElIR0ZFRkZGREZIR0VFSEhGSEdIRlFubnBxcnZ2eXt7e3p9fX5/fX19fX1+fn1/f39/fn5/gH+BgYGAgICAgICAf4GBgIB8UEhHSElGR0lKTU5OSkxJSUpLTE5KRkNBQkNGSkdge4B/eICEhYOEim1AT3OBhYeHh4eIhmdKTE1MTU5MSkdHR0dER0dHR0ZIRkhFQ0RERkVEREhIQ0NDR0pKS0xMTExMTElKS0pKSUlJSEpISEdISUhHR0hGRkZISklJSUlIXW9vcXJzd3d6e3t6e319fn59fX19fX5+fYB/f39+fn+BgIGAgYCAgICAgIB/gYCAgHxNR0ZIRkVGR0dKS0pMTUxLTU5NT0tJSEhKS0tMTE5bfIKDhIOFh4WHglZshIeHh4aHiImIfFFLTEtIR0ZGREVDQ0BBQ0NDQ0ZGRUJAPj5AQUFAQkQ/Pj9ERkhERUdJSklJSEhJR0lJSkpJSEZKSkpKSUpJSkpKRklMTEpKS0tmb3BzcnR2eHl7e3t8fH1+fn19fX19fn59f39/f35/f4CAgICAgYCAgIGAgICAgICAfU9GRkdGR0hHRUZHR01NTUtMS0lHQ0NDRElLS0xMSlaChISEgoKGhoWDgoWFhYWGhoaHiIaKdUlJRkI/P0A/Pz88PDw+Ojo8QUFAPjw5OTg8PD07Pjs5Oz9BQkBBQ0NCQEFCRERCQ0ZISUhISExNTEdJSk1NTk1KSktLSkxNU2xvcXRzc3d5e3t7fH19fn9+fX19fX1+fn5/foB/fn9/gICBgIGBgICAgYCAgIB/f39+UUZFRkdJSUdEQ0VGTk1MSklIRT85Oj5ARUhISkpJZoWEhIR/gIODgoOEhIWFhoeIiIiIiYuOZkJCPTg4Ojo5ODc4ODk2NDc5Ozw6ODU2Nzc4OTc4NzY4ODs7Oz1AOzk5OT08Pjs7PUFERUhKTUxMR0lIT1JRUFBOTE1NT1Fdb3BydHN1eHp7e3x8fn5+f359fX59fX5+f39/gH9/f4CAgICAgYCAgICAgICAgIB/f39RR0ZHSEpIRkVGR0hMTEpJSUdDQjU2OjxDQENHSUlqhoSEgX6Bg4ODgoOEhomKi4uLiomKi4yJVDs4NjU2NzY2NjQ1NzYzNDY4Ojg3NjU2NTY3Njc3ODo3Nzc4OTs3NTc4OTc5ODc2OjxAR0ZJRklGRUZPU1JTU1JPUFBSVGVwcXN0dHd5e3x7fH1+fn5/fn19fX19f39/f3+Afn+AgICAgICBgICAgICAgICAgH9/flJISEhJS0lHSUpJSkpLREVIRUJANTc4OD06PUVDQmaFg4GAgYODg4ODhYmKiomJioqKiouJiYqBSDY3NjQ2ODg3NDU3ODQ2NzY5OTc2Njc2NTo5Ojo6Ozg5ODk4Nzc3OTo5ODg2ODU4OTtBPT4+QkE/QUtMT1FQUU9PT1JXa3FydHR1d3l7ent8fX5/fn9+fX19fX5/f4B+fn9/f4CAgH9/gICAgICAgH+AgICAf39+VEhHSUlMTUtKS0tMSUg/QEFAPDo1Nzk4OTc7Qjo9coSAgYOEhISEhIaJioqIh4iIiYqKjIqJiYx6Pjo4ODs8PT45Ojs8ODk7OTo7Ojk5Ozo5PT09Pzs7Oz06Pjs5Ozs8Ozw8OTo8ODo6Ozo5OTk8Pzw9QUJESUpNS0lLTFdvcnN1dHV4e3t7fHt9f39+f359fX19fn9/f35/f39/f3+Bf4CAgICAgICAf4CAgH+Af35URkVGSUxOTkxKSk1CPzo7PDs4OTk4OTo6Ojs/Pkh+hIKChIWFhYaIiYiHhoaGiImIiYuMi4mKioxsPDs+QkNFRUFBQUI+QEJAQD49Pj5APz8/QD9APT0/Qj9BQT9BPz1AQEA+P0E9Pjw7Ojs5OTs/PTs7PT1BQUNBQkNBWHBxdHR0dnl7e3x9e31/fn9/fn19fX5+f35+fn9+f4B/f4CAgIB/gIGAf39/gICAf39/flJFQ0FHSk5PTElHSzo4Ojs5Ojo8PTo7Oz09P0BCUoOCgoSFhIWEhomJiIiGhoaHiImKi4uLioqLiotePkRHSUtKSUZHR0RGSEdFQkFAQ0VDQ0FCQ0I/QERIRUNFREVFQUZFRkRFRkRAQj88QD49P0A+Pz8/Pj8+Pjo7PTxgcXJ0dHV3enp6fX19fn5+f39+fX19fX5/fn5+fn5/gH9/gICAgICAgICAf4CAgIB/f4B+UERAPUNIT01HRkJEOTc6Pjo8Oz4/Pz89QUBDQ0ZYhYKDhIWGhoaIiYmIh4aGhoeJiYqLjI2MjIuKiohXSExNTUtOSklLSElKSklFQ0RGR0ZEQ0VGREJISUtIR0dGR0dFS0lLSUpLSkNGQ0NEQkFBQ0JEQ0NERENBPTs9QGhwc3R0d3d6eHt8fH19fn5/f359fX1+fn9+fn59fn+Af3+AgH9/gICAgICAgICAgH+AgH9PQT49P0RMS0BCQkE5ODw+Ozw7PkA/QT9CQkdHSlmFgoOFhYeHiImJiIiHhoaGiIiIiYqMjYyMi4uKjH9QTVBNS05LSkxKSUlISkZER0hISUVFSEZGRUxMTUlKR0dISUpPTU5MTE5LR0dHR0VFQ0ZGRkZERUhIRkNBP0BMbHB0dXZ4eXl5fHx8fX1+fn9+fn19fX1/f35+fn5+f39/f39/f3+AgICAgIB/gICAgICAf1FBPz4/RUdHPTxAQDg4PDs8PTo/QT5AQENGSUpRYIKDhYSFhoaHiIiIiIiIh4eIiIiJioyNjIyMjIuKjXFNUU9NTExLTEpISEVKSURKSEdLSkhKR0dHS0xOTExISElKTVBOUE5NT0tJR0lKSElESUhIRkZHR0lHQ0JBQ1VucHV3d3l7eHl6enx8fX5+f39+fn1+fX5+fn5/f36Af4B/f3+Af4CAgICAgICAgICAf39/VERBQUJHSEI/OD9AODo8OD0+Oz1BPj9ARUhKTFdyg4SEhISFhoeIiIiIiIeGiIiIiImJjIyLjIyMi4uLi19SUlBNTk1LSkdGQkdKR0xKRktPTEtKSk1NTE9QTkhJS0xPUVFRUU9PSklKSkxKTEZHSEdFR0lGRUVCQEJCXG9yd3h5enl5eXp6e3t+fn5/fn59fX19fn9+fn9+f4CAgIB/f39/gICAgICAgICAgH9/f39VRUNFRUdHRUQ7P0E7PTw5QD4+QEJHR0FIS0xQV3mFg4ODhISGiIiIiIiIh4eIiIiIiIqLi4uMjIyMi4uNfFdWUlJUUk9MS0pERUZLT05PV1ZRUE9RU1JNU1RPTVNMUFNVV1JTUVBMSk1NTUtOR0dKRkZISkRERUVCRENjcHV5eXp6ent6e3p7fH59fX9+fX19fXx9fn5/gH9/gICAf39/f3+BgYCAf39/gIB/f39/f1VGRkdHR0dIRj5AQj0/PT1CP0NCRlZORk9QUFRZfIaDhYWEhIeIiIiIiIiIiIiIiIiJiouKioyMjIyPi4uLZ1ZVa2FFUlFRUEk7O1FTUmB1XVVWVFZZWVJZWFJaZlBVV1pdUlRXUVBOUlBQUFFLS0tISEpIRUZJSElISWlydnl5enl6e3t8ent8fXx9gH59fX19fX1+f39/f3+AgIB/f39/f4CAgIB/f3+AgH9/f35+U0hKSUlHR0ZFPz9BQUVCQ0dFREVMWFJNVFZWWFt8hoWHhoWGh4iIiIiIiIiIiIiIiIiIlJyMioqMfWGKi4uHbFtkVTpYWFhTUT9AVlVZXGRgVllicl5dVl1aVkVRWVpbWV9UWmdSVVZYVFRWVE9PTUpMSklJTE1LT01Tb3N2eHl4d3p6ent6e3x9fH5/fn1+fX19fn1/f39+f4CAgH9/f3+AgICAgH9/gH+Af39+fn5WSkpJSEdGRERCQT9ITUlNUEtJS1BUU1NYWlpcXHmFhIWFhYWGh4eHiIiIiIiIiIiIiImcnaCPiY5nO36MiYqLem5wWFpbWlJUUlZWVFpadYNZVX2QYVxYXV5XSVZdXVtbX1lJWVhZW11YWFlXUlFOUFFNTU9TUVFVUmFzc3Z3d3Z4eHh6e3t8fX19f39+fX59fX1+fn9/gH9/gIB/f3+Af3+AgICAf39/gIB/gHh5fVlOS0lJSUZCREBBOlBRUVdYUFBPUVNUVFhYWVpbboGCg4WEhYaHh4eHh4iIiIiIiIiIiJaanJeIioFuhomIh4OKfmZZWVxZU1VUV1JRV1ZjloBRZXJYWldfaFBgZltbWFxnYUdPWmhnXFtcXV1XUk9TUFBRVlZWVllabnJ0d3Z2dHd4eHt7fH19fX5/fn59fn18fn9/f3+Af39/gH+AgH9/gICBgYB/gH1yfX9/b3R8XVNQT01LSkVDP0A7UFBaWltSU1FPUlJSVVNWVFdfdXiAhYSEhYaGhoaHh4eHiIiIh4eIh4ORjomJiIaFiIiGfYB7XFBVWFRSVFJRUUxPTUtmeVpdVFlVVl1aTFRaVFNUXlpYV1dXemtYWltcXlRRUVBJTk9XVlhaWmRxc3Z2dHR2eHl5e3t8fH19fn99fX1+fX1+f39/gIB/f3+Afn56eHd2c3V7f3+AgHRrfn5rcnleW1ZVVFJPS0ZDREFNXoNsVlJTTk9RT1FVUlNSUlRjZHaAgoKDhISEhIWFhISDhoaGhoeIhn6JiYiHhoOHh4d5bXFWSUtNTktNS0hKREZIRUM+U2NVf1JRUU5LUlRRTU9ZUU1OUVNVVU1RU1JQT01MSENJSFJUVVpcbXJ1dnVzc3d7ent7e317fX19fn19fX59fn9/f4B/f399fX5+f39/f4B+e3Zzd31+fmR1fWlxdF9kXV5bWVZQTElMSWFsknRQUVNOUVJRUltSU1JRUlZVYnN7fH+AgYKBgX99e3uAf4OChYaHgoaGhoGEgYaFhnVfXUtDP0NDQ0NCP0RQQkRAQz5CSEdWQEhOTUddaVFIRk9GREVGSEdIQkNIR0hLR0NCQURAT1BNU2RzdHV1c3R1enx6e3t7fHx9fHt+fX19fn5/f3+AgIB/f3x8fX+Af39/f4CBgH12dHt/bWh8Z25xZmllZGJbWFNRUFVSc1dlW09PTkxRU1FVWVNVUVFUU09WYGtscnZ7e3h5dHJuc3RzeXh+foOAg4OCgIKAgoGBa0xHPz87Oz5AQD8/PmtRS2FFRkhJRUI/R0xNR01RVUlCRT8+PD08PT0/PT9BQ0M/Pjw9Qj5KTUZVbnV1dXN0dnh6fHp9fHx9fX19fH59fXx+fn9/f4B/f39/enl3eHd2dnh7foB+fXt4dnx1YXhnbHBqbGppZmBbUVJaXFleSUpQUU5LTFFSUVRVVVdRUVdWUFhbYl1hZ21tbG9raGBucmptbHF1e3p9e3h6fHx4d3hkQkBAQj06QkNBQURCXF1Pe05PT05LTE1PT1FMS0xXTUhHQEI8OTc3NTk5PTs7Ozg5ODk/O0JIP1x0dHV2dXZ4enx8fH18fH19fn58fX19fX9/f39/fn9/f314dXZ6e3p3eXh1d3t8eXh1eXdjcWhpcG1ubW1oZl5PUF5cWklHUFJRT01QUU5RUlRWWFNSWVROWVpbV1ldXl5gZWBdXnF2a15gZ2t3b29sam9ubmxmYlhHRkZIQkFHSUVFRkRNUlBhV1JYUVBTU1JVW09PUVdQTUpDRj46OjY0ODc5Nzk6MzY2Nzk1PEI9ZXNzdnd3eXp7fX18fHt8fX5+fnt9fn19f39/fn5+fn9/e3d1eX18enh8fHx8dHd2d3Z1d2tuaWhxbm9vb2prYFVXXlpXTUxUVFNRUVVPTFJTVFdYVFRYUUxYWVpWWFhWWFldV1dYaHNrXVZhc2thYV9dZGFfXllVUE1PTkxISEpLSUhGQ1FQU1pXVFROUVNZU1xlVU9TVFFOS0lIQz9BOTk4ODk3ODg0NzU3ODU5OUducXR3eHp7e31+fX18e318fn5+en1+fH1/f359fn59f358dHR1e3hycW9vbnR4cXJzeHZ1cWZkZ3JucHBxbm1kXV9fWVdPUFhWVlNUVk9PVVZYWFlTVVRMS1RVVVVVV1BUVVdUVVJdbl5STllfW1ZZO0RWWFRbZkpMUFJST01NTk5OTEpGUFBVWVNUTkpPT1RTVFxWUlVTUk9NS0lISEY/Pz06Nzg3NjU5OTY3NjY1V3Bwc3d5ent8fX59fnx8fXx+fX15fX18fn5+fXx8fX1+fXxydnF4eHJ2dXFxbnBwb3B1dnRuamRkanBwcXJwbmZlZGNcXlJUWlZXVVRXVFJYWFlZWVJVT0lHT1BPT01SSk9QUFBOTk9UTE1JUE9TVFUyPFhNSUFRPWNhUVNRUE5QUVBOTk1QTlRSUFJNSUxLT1FQUVJTVFFST0xNS0xMSENCQT06Ojg3NjtCNDU2NjtlcHF0d3h7fHx9fnx9fH19fX18e3h8ent9fX58e3l9fH18e3B1b3d1cHV0b3N2cHFxcHR1dmNqZ2VXaHRycnFuaWlocFZWVFVYVVdVUldWVVpZWFdVUVNGRkFGR0dIRkpESEpIR0VITEhLSEZMTVBNRy9FX1I+M0A+am9hUlJRQEZVUVBRUFFOUU9QT0xKTExPUE5OUFFRTlBPSkxNTUtHRUVEQjs9PDw5PUc2Njc2RG5xdHZ5e3t8fX18enx8fX5+fXt5dnh3eXl8fXp6dn17fHp6b3Fud3JwdnFtcHNwb3Bzc3N0ZmdgaFpXa3JzcmxtbWtuYmVQU1RSU1VPV1ZWWVlWUVFRT0A+Oz0/QEJBQ0BCRURBQEdIR0hFRkhKTktFR0NPUkM4RU5TXWZTUVNBR1VQT1FRUE1NTkxKTEtMTk9PUU1PT01ITExJS0tMS0dGRkVEPEFBPjtARTs8ODlUcXN1eXt7e318fHt5fHp6fn58e3V0dXJ2dnp6eHpyfHt8eXltcW94cnF1bm5xcm9vb3Rzc3J1dGtnZ15lam1wa29xbWltY0xPT01RU0xUVVRXV1VMTEtIPTk4Nzs/QD48PUFAQj0+RUhHREZGSUdKSkBGQUFARkhFSk9IUFJhXFFQUk5TT09QTExPTUtNTE1PTltXS01RT0dJSENJSkxMS0ZGRkQ/QkM+PEJGP0I/QWRxdXh7ent7fHt6end8d3l9fnt7cXN0cHJzd3R4eHN6e3l2d2xxb3ZxdHRsb3Fybm5vc3ZydHNycmtsZW5zaG1ubWxtbGprSUxISE9RSlFTUVRTT0tIQ0U9OTg3OT9CPjs/QkBAPkFESUVDSEdJR0lFQkI/Pj1DQkFHSURNT2JlUU1PTldLTE1LTE1NTExLTk5TZE1KTFJJSUlFQUhKTE1OSkdJRkJBQkA/RUZFSERLb3B3enl5e3t6fHp3c3h0eHx8eXpucXJtbm9ycnZyc3h8eHZ2bXBtc3B1dGxwcHJvb29ydnVyVlZucWdseYRqbXFybm5qaG9ISkNHTE1JTVBNUE9IS0U/Qj05OTk6P0I/PEBCQkFERUdLRkRJSUdHSENDP0I/P0BBPkNFQ0tOUVRMSklNVEZJSUpMSktLSUlMTU9QUlBLR0NLR0NCSkpMTU9NSUpJR0NDQ0RJSk1MSVpzbXh5eHp7e3l8dnJwdXJ0eXl2eGpxbmpsbG50dG10dXtzdHhyb25xb3ZzbnBvcnBvcHN0eWpOYGdzanR8eWdvc3FqcWhlcUhLREdISEdKS0lKS0RHQj0+PTo6OjtAQj89QkJDQ0dGSkxKRUlJRkdIQ0M7QUBCPkBAQ0VESU1QR0lLR0hLREhJS01ISkxISEpMS01dUklIRE1GQURLS05NUE5LTUpLRkdHSk1OUU5MY25pdnZ3e3h7en1xbWxza3B0dHR1aHBtamlra3RwbnR0eXByeXRvcnFvd3NvcXB0cnBydXR5a05WbXVscXt2aW5vaWp0aGRvRktERkVHREVFR0VHQkNAPjw9Ojs6OkBEQD5CQ0RFSUZKSkxGSUlHRkZEQjtCQ0M+QENDQ0VHTE5IS05IREhFSUxOTUhJTEdFRklJTE5LSkhFTkhDR01MT01PTU5OTUxJSEpPUlFSTlJmZ2Zyb3N4dXt6fGxoam5la3Btc3FmbWxoaWtsdG1wdXR3cW94dG90c3J2c3BxcnRzcnR1dXZ2WFZ1dWtvdHJrb3ZsaG1lX3BHSkRGRkVCQkJFQERCPj8+Ojs7PTo9PkNBP0FDRUdKRklJTEhHR0dGRUNAPUVFQj5CRENDRUdISUdNUEpGRkdLTk9LRkhKRkVERUlJSEtJRkhQS0RJTUxQTU9OT09OSkpJTVJVVFJPV2RgYW1ncHJvcnl6Z2VoaGNpbGdxbGZsbWdpa2xzbHB2dXRwbnZyb3Nyc3V0cXNzdXRzdXZ2dnl2dXR2bGt1dW1ydnFsbmxlck1HRUVHQ0JBQkQ8QkE+QT06Oj0/Oz4+QEI/QEJER0tGSUdJSEZGR0VDQkFBRkZDQkNCREVER0dIRkxRTElPSkpMS0lHSEVGRURDSUhIS0pHS1JNQk5PTVFPT09OT09LS0tQVVdWVVRYYF5caWFtaW5ocnNiZWZmZGloZm5pZm1taGtrbXJpcXZ1c3Ftdm5vcXJzd3Nyc3R1dnZ2dnd2d3Z2dHd1a3N1bnV0c3FyamtzTUdHRkhCQkBERTxBQUBDPDg5PT45Pzw/Qj9AQERGSEVIRkZHRkVFRENFQ0RJRkNGRUJFR0VFRkdFSk1LSFFNSktISElFRkhJRUNJSUpLTUtPU05EUVJQUVJOT01OUE1MTlNXVldYVlhdWl1kYGhiamlna19lZWdjZ2dna2dna21rbWxwcWd0dHVyc252b3FwcnR4cXNzdXZ1gpF5dnZ0eHV1d3hub3VvcnN1cXFpb3pNSEdISEJCQkZFPEBCQkQ8Nzo9Pjo+OkBCPj8/Q0VGREZEREdFQ0VDREVGR0pFRUlHQ0dIRkhGRUNGSkpHTUpMS0lKTEZJSUtIRUtLTE1OT1JUT0lTVVRRU1BRTU5RTk1RV1pWWllWWl1aWGFgYGBeaGVjYGRlaGdqaWhqZmhubGxubXFwaXV1eHJycHVwcHBydXZwdXN1dnV7fn14dnR3dnZ2eHBsdXBtc3RucHJzeU5JSEdJREFDSEU8QEVCRT04Oj4+PTw8QUI8Pz5BQkZDRUJDSERDRUVGR0dHSUZHS0hDSEhHSUdGREhLSUdLSE1LSktMSExLTUtJTUxPTk9SVVZPS1VWVFFUUVJMT1FQT1RZWllcWllbXl9eYGJeXGFja2JgZGdocoVoZ2lmam1ucG9uc3FqdHV4cnNzdHJucHF2cnF1cnV1c355jn11dXZ2dnZ4cmh1cWtydGxxdnF1TUlLSEpFQkVHRTxAR0REQDo8PkA/Pj9DQjxAPkFBRkNFRERIREZER0VISEZIR0lLSkZKSEhLSEZGTEhISEpHTExMTExJTUtNTU1PTFBQUVVWV09LVlZVU1NSUUxPU1JRVltbXV5bXF5fX2FgYWRdZGBlZmBlaGpjc3NmamhnbHBycW9zc25zd3dxdXZ0c21vcnVvcnNwdXJ2cnSBdnV1dXd2dXd0Z3Rya3Fya3J2b3ZKS0xKTEdCRURFPEBGRERCOz8/QUBAQERBP0I/QUNIQkZFRkdFSUVGRElJR0lISk1ISEpKSUxKRkpLSElKSkdLS01NSkpOTE5OTk9LT1BSVVhWTU5UVlVTUlFQTE5UU1JXW15eX11dYF9hYWFgYmNlYWNoYmRpamd2i2xraWdtb3NxcHFwcHJ5dnJ1dXRzbW1zc21xcm90dXRycHN3dHV1d3Z1dXRlcXNrcHFqcnZvd0pNTExNR0REQUQ8P0VFRUM9QUFDQkJDRUJCREFBRUdDSEhIR0ZKRkNHSUdHSkZJTEhKSk1LTUxHS0lITEtOUUtSUUxTTUtOTk9QUE9UT1dYWFtOU1FXXFpTVlBOVFVUVFhaX2JiX2RhXmBiXmBlYWFiZ25oYmloaG14dmxoam1vc3JwcXJycnZ0c3Vzc3Nua3NxbXByb3R2cnFxdXZ1c3d5d3V0dWNtdGtvcGpxdG93TE1MTExHRUFARD4+REVGQ0BDQUVEREZDQ0VHQ0NJRkNISkpJSUtGREtKR0hKSUlLR0pKTktOTElMSEpNS1pmSmRcS2xTSE9OX25Va3NbcXBid2NSUGJ2dWh1Y2F2YFhucWJkdmluemZbbHRgbGpUYHd1aWpnaWZnbG1qbW9qbW5zcnBycnFyc3Jzc3J0cm5sdG9ucHFxdXVxcXN0dnZ1dXl3dXR0YGt0a3Bwa3FycXlLTkpLSkZDP0BCPz1ERUZEQ0RCRUVFRkJGRkhDREpFRUpMTUtMTUdHTUlISUtIS0pJS0pOTE1NTExJTE1MW3NiZHBebG1VTU5mc11nZXFsbnRncGlfYVlubmJwcGJrampnb3F0ZXRub1xvdWdwTUpyeXZrYmBrZWVteW1rdmxucHNycHJxcHFycXJycnRybW1zbm5vcHJ1dHFzc3R1dXV0d3h2dXRibXVrcHBscnJxektMSUlHRUQ/QkI/PUNGR0JGQ0VERUVEQ0hIR0RFS0dHTE1NS01NR0pOSEpLSklMS0pKS01NTk5NTUpNTU1bcm9vbnBwbGtNUFFsV05pYnRycGFtb3ZcWWxRXG1tWnFta29teHh0c2lwXF9ya3FqVXV5eHBjXmtmYmdxcGppb3Bwc3NwcXBxcXJycXFycnRsbXJtbm5vcnV0cXRydHV1dHV1enZ1dGVudWtwb2xzcnJ5SktHSEVFRUJCQj0/QEZHQkdESUVFREJGSUhIRUdLSkdNTU5MTU5ITE1JTEtISk1JS0pKS09QT05NS05NTFxoZHVdbHFXbE5QUW1VWmtea2x2YWxkdFRlY05tWWxcdHBraWx4and1aHBdXnJraFdiY3d8b2NgZ2hhZGp1eWtubnFzc3BxcHFwcnFwcHBydWttcW1tbW9xc3Rxc3J0dnZzd3Z6dnV0aG91bHNvbXNydHdJTUdJREVFQ0FCPEJBQkZER0ZMSEVDQ0hLSEhGSkxMRk5LTFNSTEhMTEhOSklITkhKSklITk9NTkxKTk1KWnNwcG9xcW1sT1FSbllxa2dvb3Fxb210Xm5YYXRfbm9wb3Fyb251c3R0altddGN3eHJqbnpoYWFjZ2Jiam10dXBzdXZzcXBwcW9ydHt/fn13bGtxbmxtbnByc3F0dHN1dXR4eHl5dHVrb3VtdG9uc3N2dEhLSElCRUVFQUA+Q0NCR0NISU1JRkNGSkxJR0ZKTUxGT0pLV1JLR0tKSk5JSEpMSUtKSUhKTU1NTUlLS0tTa2JaaV5famNyclpfWWpvX2VlVWtfY1thYlFgbGhdalxuaWlkW3BmZHBdWlxrW21xY3BzbGRnY2RnYGBrbXBwb3R5cnVxb3BxbnmFiIeHhoWAdnNua21tb25xcnR0cnR1dXZ5eHhzdW5xdW53cXJ1dHdySEhGSURFREZBQEFFRERHQkhKTEhGREdLTElFRkpPTElPSUxbUUpGSEhLTUlISkpLS0lISUdLS0xLRkhLS0xMTEtJS0xOVFtcVFBUTFBPTk9PVlFPT1FPT1FKSU5QUWRxaVRZV1tbXFVZWl1YXVxcY2ZhYWZiY2VfX2ZrbWhtdHlydHJvcHB0hoeGhoaFhYaHg3pwbW1sa3FzdHRydHZ0dXl4eHV2cXJ1b3ZydHN1dXNIQ0VHRkZBRUM/Q0dDRUdDSUtMSEZER0tMSERHSFBLTE9LTFdMSUVFSElKSElLSUxKSEZIR0pHSElFRkxJSUtOTElPXFdeT1xbYF5PWFlTXFxiXk1ZWk1YYVJKWWFaU2BkXGFYW2RkVlZYXFlaWFxWWVxdYl9kYGFfZWhrZ210dHFxdHBxcoGGhoaFhoWFhYaGhoR9cmtpb3Jzc3N0d3l5eHl4d3h0cXhyeHNxcnVydE9CQ0RMTUJDREJESURHR0ZLSktIRUVKSkpHRUhIUEpNTUpNU0lIRkFHRkpJS0tJTEpJRkVKR0RGR0VFSkhDSk1KS1RfWWBYYGFbYFVYWVReXlpfUllcUF5cWU5eXF5TW15jXlpdYGNgWV9iW2BeW1RYWFleXWNjYmFjZWlla3Jwb3Bwbm93hoaFhYaCe4CFhYaGhYaFf3VxcHJyc3Z5eXp5eXh4eHdyeXZ4cnF4dnR2YVNKSk1JRUNCQ0ZHRUdHSUpKSUlERktLS0ZGSUpOSk5MSExOR0hGPkdHTElLS0pLS0lHRUlEQ0NFQUZKREBKTEpPW2NZXl5hX1JUU1dfYFxdWV5RWVxNVl9XS1FZW1BaX2FhXl5jYWBiYmJjY2VaUVlWVVxZXmRgX19jZWJob21tbGxsbHWFf4SDeXV8hIWFhYaGhYWGhoN9d3JydHd5eXl5f359eXV5dnZybnp3dnhYUUtHQ0dFQkVHSEZHSElGR0pHSEZIS0lMRERLS05NTExISkpISkc/R0ZOSktLTUtLS0lHR0NEQERBSElBP0lKSE9dYVpbZF1fVFFTWF1cXFxfWktXXExSXFlJTV5QT1xfYWNkY2NiXGRjYmRjZlhRVVRTW1haYV5eXmFhX2Rsa21qamxudn51gXp8hIWFhYWFhYaGhYaFhoaGgnpyc3V1e4WHh4eGhYSBfnhwend2eFxSTUNASUZDRktJRkZHSEdHSUZGRklMSk5FREtKTE5KTElLSkhJR0JISFFNS0tPTUtLSUhHRUQ/RUNISEFBR0ZFVF1ZXlhfWV9bXVVYWFBdXVFLSldeWF5bXVZaYFJRX19iYmFgYmJgY2JiZGRiWE9RUVJbU1teXV1dXl9fZGhnbGpubnB7e3x+e4CCg4SFhYWFhYWEhIWDhISHh4FzcneFh4eHh4eHh4eHh4WDgHx4XFNLQkFHRkRHTVJIQ1JLRkhISEVGS0pNUEVHSUpLTkxMSUxLSUlIREhLUU9NTVBMTUtLSElDREFFREhHQkFHRUNXVUVcVF1TVl9YTlRVTlpbTUpLVWBhW19YX15hXU9ZYl1gYF9iY2JdYmJXX19UUE5QUVhSXVxbXFxeYGJmZmVsZm9vd3x7gHt9f4CEhISEhIWFhYODhYKDgoWFhnpvgYaGhoeHiIeGhoaFhYSFg35JTkZERUZHRElSYlBEV19JR0dIREZNSlBQRkpJSktOTEtLTEtKSkdFSk1RUU5OT01OTE5IS0FEQUNERkRDQUVGQk1IQ0xMUE9PTEZNRkdJSkhHTExNT1BJTE9QUFNQTFBUU1VaWVdZWFhkVk9TVFBQT05QVVRcWVlaXVxgYWRlY2dja2xwc3N6eX97en+EhISEhISEhIKEgH57gYOBfXuFhIaGh4eHhYWFhISEgoGAfUtJRUVHRkdES01dTEdIWU1HSEpIR05MUVFJS0tLS05OVU5PS0tMR0dLUFNTTlBPTk9OT0hLRWBFRF9MRGZjRU1bSV9cc21PTVZtWUxDUGBVbFdnSl1XVV5ETFFVTE1UVlFTVFhXVFhVVFxUUGZaaGhkWFNrVFdWVVtcW2BgYWJiYmBmaGZubGhyenx9foGEhISDg4ODgX18enJ7gXp7f4KAg4SEhYWBhIWBg4N/fnp7TElFRkZIRUVLT1NJS0dgVEhKT0pJT01SUUtMS0xPUlVST09KTE5HSE1RW1lPUFBOT1BPSUpQf1FJfFlZcnNXUG1IcW5wYVZQcXFzUENrc21xc3BTb19bblhdVlxYVWtoVV1WY1pgWVtgVlVXf2p0dXVfYHdgWGFcXGZbX2FhYWFeYGJnbXBsYHB3dHiBgYKDg4J/fX6Adnh6bHZ+dHh+gHx+gIGChHyAg3p/gX9+d3dOSUVITU1CRExMRkpMRlJWTEtOSUtSWFdRTk5OTFFUTk9RUEtMT0dNUFNbWlRRUk9QUFBKSFp4XVR4ZWhZUlRRdmd0bHBibmZqUXJPTXdtanJwc3JxcnBvcIFdZnp1eHFxenF+c31rdX1iUmd8ZXNzb3NzfH1vfXlvf3JfYGBiYlpgYGdrbmtibGZnbXd+gYCDfnt4d4B0dnppcn5udHx+d3h7foCDeHyAdXx/fHxzc05LRmBdR0FFTU1IS0tISlBOTU1KTlZeWVVMUVNOWFpMU1NSTkxQSVFSVFlXV1BUUFBQUUtHZnhsY3hybVpLTFV5cHVtdWJudlBkZUlmdnFtd2+AamZ4eGlYc1Jpe21panp6fWx4en9vZ29YdnZqdXVwgGBzaHxpbHh8b15fX2NiWl1iZGdpamVnYmNkbGxwcHN0c3NzeXFyeGJsdWdyeXtzc3V5foFzdXpufH15eHJuTktTdE5DQkVQUEhKS0pMUE9PUE1QWmBaWEtUV1BhXlJWUVlTTVBJU1RVWFdXUFVQT05SSktyb3V1cXVxZGliV25McXBeRmh5V3ZUTGh4fXhgeXtzbmFebW9kUmdydW5teXB3bHZ0dHFsbVx0fnprbXl8bHVtfGtwdnV4Xl9fYl5dX2VkaWdoZmVeYWJpaWlqa25va3FubWpwYWNmZG93eG9tcHN5fm5xcGp7enRyb21MTFtWSEdFR1JQSkxNS0xRUVFRUFFXXFlVTlZZVWZYUlJZXlRNTklUVFZXWVdPU05OTlFIUm1IaXdLYGR2dlZYbE9ubHtzYWpnf3ZVS1draH1sbWx4YFtwenteYHpzY3JveHFoZXxpcntdVEtsYHZ1a2l1e3ttfnhrfHBdXl5iW15iZGRnZWVlYlpjY2lra3JzcndnbWloZGdgYWxhZ3Nya2htbXJ8a21oa3t0bW1rbU9ISktISUlIUlFMTk9NTFRTU09UUldSVlRQV1pWVlRUVGFgUU9OS1RTU1FVVk5OTE1PUEpIUU5QVUxLS1NUU1JUUFZVUVFOUVFYWFFOUFVUWFhYW1tVUlNXW1dYV1pPU1VXV1hSXVlXXVZUT1lSV1dXWFlfW2dyXltbWVxdX2NaX2NjZGZkY2NiWmNjZmZmbW5tdWZmZ2NgZl9dZ2BkbGhmZ2tocHpoZ2drdWpoZ2lsUUlLTExNS0pTUU1RUE9MVlZUUFRVWFVZVVJaXVZVVFdVWVhQT0xNVlRRTlVTTk9NTFFQS0pRUktRTUtLT1JUUlFRU1NJSExOT1FSUVFRVFZSWFdcV1NTUVJVVVZTWlFPU1JXVVRZVlRZVVRSVVRUVFdYV11aXmFdXFpaXFxgY1xdYmNkZ2VlZGFZYGFjYWJoaGluY2FkXl9jXVpkXGJtYV5mZmdtc2RpaGtrZWRjZmhQSktMT09MTVRQTlNRUU1YWFVUVVdXV1pWVFxgVldWWVVYVFFQS09XU1BOVVBOUU5LU1BNT1VUTlFOTU5RU1BUUVNUVU5LTU9RVFRSUlFWV1VZWltZU1VSVFdXV1lbVE9UVVhVVFlVV1lVUlJYVlVXW1laX11VWF9dXl1cXWFhXltiYmNoZmVkYlhfYGJdYGhlZmRhXl9dXV5aWl9aX2dgXl1dYmhrYWdmaGZkYGJjYVBLTUxQUUxPVE9PU1FPUVtaWFdYWlpYWVZdamRWWFlaV1ZUVE9LT1ZUUE9UUFBQTk1RUVBSWFRSUU9NT1NVT1dSVFVVT05NUVNVVVRUUlRYVlpdXFpWVlFSV1hWW1tXUVRWVlVWWFRXV1RTUlhWVVpdWV1fXlZeXV5gXFxgYF9fWmJiZGhoZWRhWWJgYl5eZmRjYGJdXFxcXFlaW1hbYVteXVxfYl9fYmRkYmRfX2BcUE1OTlJRTVJST1NUUVBVXFpaV1tbXFlaW2RxbWhkX1tZVlZYUk1NVlNNTlJPUVJPTFBTUlVaVVRQUExQV1ZSV1NTU1hNT1BSVFhVVVVTVVlYW15dXFtWUk9VVlZbW1dRVFdVV1hWVFhaVFNRWldWXF5aX19gVWFcYGFdYGJfXGBdY2FjZ2hkZmBZY2BhX19lZV9gY1taXFtcWlpZWVdcWVxbYF5gW15eYWBfYlxZYFpRTk9OVlFQVFJPVVRTUFdcXFxYXlxfV1xeanF3eYBjXFtWVlhSTk9XU05RUVBSVFJLUVRUWVpXVU9STlNYVlRTVFJSWk9RU1NWW1ZWV1RWWlhdXlxcXlZTTlRVVlxcVlJUVlZYWVNUWVxUUlJcV1pdXl1hYWBXYltjYl5hY19cYmFiX2RmaWRmXltkYGFgYWNlX2JfWVpeW1xbWVhZV1daWlphXF1bXVxcWl1gV1tbWlBPT09ZUFVVU1JXUlRQW11eXVtgXGBVXF1panJ9c2xnXFVZV1FPUltTUlFUUlRVVEtRV1ZbWVpTT1NSVlZVU09WUlNaUlRVVFhcV1hYU1hcWF5dWVpdVFVOVldXXltYUVRVWFlZVVdZW1RTVl1ZXV1gXWJjXllgW2ViX2RkXl5jY2FdZWZpZGZdXmRhYGFiY2RfYl5YWl9bXFtYWFhYV1taXGBdW1tcW1haW15WXlldUE9PUlpQWlVVVlZUVFReXmBeXmJcYVVdXmJreXRsfWxaVVpVUVFTXFRVVFVUVllXTFJaVl1bXFJPVVNYV1ZTUFhSU1dTV1ZVW11YW1lVWl5YX15ZXFlSV1JZWFlfWlpTVFZaWVpWWFlcVlVaXVxeYWFfZGRdXl1dZWFiZmReXmRjYFxnZGhlZGJfZGFfYWBiYl9gXldYXlpcXFpZWldWXVpdXlpZW1xbV1lcXVZYV11TT1BXWVFdVVZZV1dVWF9gYWFgY11gVV1eYmVldYF6aFhZWlRWU1ZcWFdXVlZXXVhQVVxZXl1dVFJYUldWVFJUWFJTVlRZWFldXlhdW1VeX1hfX1hdVlFZVFlaWmFZXFVWWFtaWlhZWVpYVl1eX15jYmFlZV1iXGBmYmRmZF9fZGJiW2ZjaGVjZmFmX19hYWFhYF9eVlVdWVtcW1lcWVldW1tbWFhZW1laWl1fXVRZXVVOU1pWU1xUVldZV1ZcYGFiY2FkX19WW2BkYV96dW9oWVxaVlhVV1taWVxZWFlgV1BVXltgYVxUVVhQVVZVU1ZWUlNVV1taXF9eWl9cVl9fWl1eWV5WU1lXWVpdYlpeVldbXFtcW1tZW1lZXl9gYGRiY2VlYmRaYmZjZ2ZlXmFiYGNeY2NpZGRnX2deYmJjYWFgXl9YVFpaWltbWFtYWFxbWltXV1lYV1xbXGBdVl1dU1BWWlZWWlVYVlhXWF1fYmFkYWRhXllZYWRiYGxmaF5cXVtXWFhZXFxcX1tZW2JWVFdeXWFjXFJWWFFXVlZWVlZTVlRYXFxfYGBdYF1XYV5bXlxbXlhWWFhbW19gXF9YWV1cXV1eXFpcWFtfYV5gZGNkZmZmYlljZWVoZ2ReY2BfZWNdZmlkZWlfZ15jYmNhYWBfX1tYWVtZWlpYWVhXW1taW1dYWlRZXVxaYFxVXmJOUldZVldaWVtcWVdZXmBiYWVhZGFdXllhY2JfYWBhX1xcXVhXW1tdXV9fXFpdY1haWF1gY2RfUlhZUFhXWFlZV1ZYVl1dXmBhYV9iXllhXV1eWV1eWVhWV1tcYF9dX1lZXl1eXmFcW1pZXF9iX2JkY2VmZWZiWmRmZ2lnY19jXmFmZFppaWJmaWNlXmJiY2FgYF9dXVpXW1lZWFhaWFdaW1pZV1hWVVtdXV1gYGJieExXV1xZV11cXF1aV1xdX2BiZGJiYV1gWGJjYmBjYWJeXFxcWFdbXV9dYF9dW2BkXFxYWmNlY2BSXFlPWFdZW1pZWFpZYF1gYmJgYWNfXGJdX11bXl5aWVVYXV1fYF9fW1peXmBiY1xcV1tdYGJhY2VkZ2VlZmRcZWZoaWZjYmJcY2dgXGlpYmhpZmVgYmFjYV9gX11dW1lcWVhXWFlYV1xbWldXWFBYWl1hY2Zmcmt/SllXXVpaX11cXlxZXVteX2FjYmFhXWJbYmRiYGNjYl1cW1pXWGlxYFxgX11cYWNfXllZY2VkYVNfWlFZV1xdXFtaW1tjYGNiY2BiZGFgY15gXF1eX1pYVltfXl1hYV9dW2BhYmViX11TXF9gY2RkZmRnZmVmZV5lZmhoZ2RkYFtmZ15haGhjaGhmY2BiYGNiX19fXV1cWltZWFhYVlpWXFpaVlZVTVhXXGdpa2h1eIF2dnZ2dnZ2dnZ2dnd3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d4eHh4eXl5enp6enp6e3p6ent7e3t7e3t7e3t7e3t7e3x7e3t7e3t7e3t7fHx8fHx8fHx8fHx8fHt7e3t8fHx8fHx8fHx8e3t7fHx8fHx7e3t7e3t7fYmIhoqHhYOBg4OCg4OCgoKCgoKCgoKCgoGAgYCBgICAgYCBgYGAfnx8fHx8fHx8fHx8fHx8fHZ2dnZ2dnZ2dnZ3dnd3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3h4eHh5eXl6enp6enp6ent7e3t7e3t7e3t7e3t7e3t7e3t7e3t6e3t7e3t7fHx8fHx8fHx8fHx7e3t7e3t7e3t7e3x7e3t7e3t7fHx8fHt7e3t7e3t8iYmHiYaFgoGCgoGCgoKCgYKCgoKCgoKBgYGAgICAgICAgIGBgYB9fHx8e3x8fHx8fHx8fHx8dnZ2dnZ2dnZ2dnZ3dnd3d3d3d3d3d3d3d3d3d3d3d3d3d3d4eHh4eHh5eXl5eXl5eXl5eXt7e3t7e3t7e3t7e3t7e3t7fHt7e3t6enp6ent7fHx8fHx8fHx8fHx7e3t7e3t7fHx8e3t7e3t7e3t7fHx8fHx7fHt7e3uHiYiJhYSDgYKCgoODgoKCgoKCgoKCgYGBgICAgICAgICAgYKBgH58fHx8fHx8fHx8fHx8fHx2dnV2dnZ2dXZ2d3d3d3d3d3d3d3d3d3h4eHh4eHh4eHh4eHh4eHh4eHl5eXl5eXl5eXl5e3t7e3t7e3t8fHx7e3t8fHx7e3t7e3p6enp6e3t8fHx8fHx8fHx8fHx8fHx8e3x8fHx8e3t7e3t7e3x8fHx8fHt7e3t7e4aJiYiFhYOBgoKCg4OCgYKCgoKCgoKBgYGAgICAgICAgIGBgYCAfnx8fHx8fHx8fHx9fX18fHaIi4uLi4uLgX19fX19fYSMi4uLi454KSkqKiopKz0/Pj4+Pj5tgH5+f397pdfT09PT1r2GiYmJiYmJjY2NjY2NjYuJiYmJiYaz1tLS0tLWun1+f39/f359fHx8fHx8fHx8fHx8fHx8fHx7fHx8fHx8fHx8fHt7e3t7hIuHh4aHgoGDg4GCgoKCgoKCgoKCgoGBgYCAgICAgICAgYCBgIB+fHx8fHx8fHx9fXx8fH19doyQj4+Pj5CDfn9/f39+hpCPj4+Pk3kZGhoaGhocMTMzMzMzMmqCf4CAgHut6eTk5OToyomMjIyMjIyQkJCQkJCQjYyMjIyMiL/p5eXl5enHfX5/f39/f319fXx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx7e3uCjYeIh4eDgoSCgYKCgoKCgoOCgoKCgYGBgICAgICAgICAgICAgH58fHx8fHx8fXx8fH19fX12eHh4eHh3eHd3d3d3d3d4eXl5eXl5d29wcHBwcHBycnJycnJyd3p5eXp6en6Dg4ODg4SBfHx8fHx8fX19fX19fX18fHx8fHx7gYSEhISEhYJ8fX19fX19fX19fX18fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx7e4CMhomHh4SDhIKCgoKCgYKCg4KCgoGBgYGBgYCAf4CAgICAgICAfnx8fHx8fHx8fX19fX19fXZ2dnV1dXl2dnZ6e3h7eHd2eHt4eXp6fnx5eXh4eHh5eXl5enp5eXl5enp6eXh4eXl5eXl7e3t7e3t7e3t7e3p6enp7e3t7e3t6enp6enp6e3x8fHx9fX19fX19fX18fH19fX18fHx8fHx8fHx8fHx8fHx8fHx8fHx8f4uHi4qIhIODgoKCg4KBgoKDgoKCgYGBgYGAgIGAf4CAgH+AgYF+fX18fHx8fHx9fX19fX19d3d3dnZ3fXh3d316eH14d3d5fHx9enl8e3h3d3d3eHh4eHh5eXl5eXp6ent7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7fHx8fHx8fHx8fHx8fHx9fX19fX19fX19fX19fX19fX19fHx8fHx8fHx7e3x8fHx8fHx8fHx+iomMjImFg4SEgoKDgoGCgoKCgoKBgYGBgYCAgICAgICAf4CAgH19fXx8fH19fX19fX19fX13d3d3d3p9eHt4fHx3e3h3d3d5fX59eXt6eHh4eHh4eHh4eHh5eXl6enp6e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3x8fHx8fHx8fHx8fHx8fHx8fX19fXx9fX19fX19fX19fX19fHx8fHx8fHt7fHx8fHx8fHx8fH2Kio2NioWDg4OCgoKCgYGCgoKBgoGBgYKBgIGBgICAgIB/gIGAfXx9fX18fX19fX19fX19fXd3d3d3fX55d3d4e3p8eXd3d3x6fHx6fHl4eHh4eHh4eHh4eXl5enp6ent7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3x8fHt8fHx8fHx8fHx8fHx8fH19fX18fH18fH18fHx8fX19fX18fHx8fHx8fHx8fHx8fHx8fHx8foqJjo2JhISEg4KDgoKBgYKBgoKCgYGBgoGAgYKAgICAgH+BgIB8fH19fX18fX19fX19fn5+d3d3d3d5fHl7eHx9eXt5enp6fnt9fXp8eHh4eHh4eHh4eXl5eXp6enp7e3t7e3t7e3t7e3t7e3t7e3t7e3x8fHt7fHx7fHx8fHx8fHx8fXx8fX19fX19fXx8fHx8fHx8fXx9fX19fXx8fHx8fHx8fHx8fHx8fHx8fHx/iIeNioeFhoaDg4ODgoGBgoGCgoGBgYGCgYCAgoF/gICAf4CAgHx8fX19fX19fX19fX5+fn53d3d3d3Z4eHl3eXp4enh5eXl8enp7eXl4eHh5eXh4eHh5eXl5enp7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t8fHx8fHx8fHx9fX19fX19fX19fX19fX18fH18fH19fX19fH19fX19fHx8fHx8fHx8fHx8fX+HiIyIhoeHhIKDhISCgYKBgYKCgoGBgYKBgIGBgYGAgIB/gIGAfHx9fX19fX19fX1+fn5+fnd3d3d3d3d3d3d3eHh4eHh4eHh4eHh5eXl5eXl5eXl5eXl6enp6ent7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7fHx8fHx8fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fHx8fHx8fX19fHx8gIeIi4eHiYaDg4SDg4KBgYGCgoGBgYKCgYGBgIGBgYCAgICBgX97fH19fX19fX19fn5+fn5+d3d3d3d3d3d4eHd4dnl5eHh4eHh5eXl5eXl5eXl5eXl5enp6enp6e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7fHx7fHx8fHx8fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fHx8fH19fXx9fXyBhoqKiYmIhIOFhISCgoGBgYGCgYGCgoGBgYCAgYGAgIGAgIGBf3x8fX19fX1+fn5+fn5+f394eHd4eHh4eHZxZGpeam15eXl4eHl5eXl5eXl5enp6enp6enp6enp7e3t8e3x8fHt7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3x8fHx9fHx8fH19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fIGFiYqJioeEhYWEg4KCgYGBgoKBgYKBgYGBgYCBgYCAgYCBgIF+fH1+fn5+fn5+fn5+fn9/f3h4eHh4eHh5bWRiZV9fXm95eXl5eXl5eXl5eXp6enp6enp6enp6e3t7e3t7fHx8fHx8fHt7e3t7e3t7e3t7e3t7e3t7e3t7e3t7fHx8fHx9fHx8fH19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18goWKiomJhISGhYSDg4KBgYKCgoGBgoGBgYKBgIGBgICAgICBgH58fX5+fn5+fn5+fn9/f39/eHh4eHh4eW5kZWdlZGJeZnh5eXl5enp6enp6enp6enp6enp6e3t7e3t7e3x8fHx8fHt8fHt7e3t7e3t7e3t7e3t7e3t7e3t7fHx8fHx8fHx8fHx9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXyChouJiIqEhYaEg4OEgoGBgYGCgYKCgYGBgYCAgYGBgIB/gIGBf3x8fn5+fn5+fn9/f39/f394eHh4eHl3Z2VkZWZkZWFfaXl6enp6enp6enp6enp6ent7e3t7e3t7e3t7e3t8fHx7e3t7e3t7e3t7e3t7e3t7e3t7e3t7fHt8fHx8fHx8fHx9fX19fX19fX19fX19fXx9fX19fX19fX19fX19fX19fX19fX19fX19fIKGi4eJh4SEhoSDg4WBgYGBgYKCgYGBgYKBgICAgYGAgYCAgYF+fHx/f35/f39/f39/f39/gHl5eXl5eWtlYWJlZWFlZV5ieHdze3p6enp6enp6enp6e3t7e3t7e3t7e3t7fHt7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t8fHx8fHx8fH18fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19g4aLhoiFhYaEgoOEhIKBgYGBgoKBgYKBgYGAgYGBgYGAgIGBgn98fH9/f39/f39/f3+AgICAeXl5eXl0Y2NlZGNmY2doZGZsZF5ze3p6enp6enp6enp6ent7e3t7e3t8fHx7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3x8fHx8fHx8fH19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX1+fn6DhouGhoaGhYODg4SDgYGBgYGCgoGBgYKBgYCAgYGBgYCAgYGBfnx8f39/f39/gICAgICAgIB5eXl6d2RhY2diYmRdW2VfYV1eYGFoeHp6enp6enp6enp6e3t7e3t7fHx8e3x7e3t7e3t7e3t7e3t7e3t7e3t7e3t8fHx8fHx8fHx8fH19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX1+fn5+fn5+foSFi4eGhoaGhIODg4KBgYGBgoKCgYKBgoGAgIGBgYGAgYGBgYF+fX1/gH+AgICAgICAgICAgHl5eW9vYmJiZF5jZ19dYWFgXF9kYlttfHp6enp6enp6enp7e3t7fHx8e3t7e3t7e3t7e3t7e3t7e3t7fHx7e3x7fHx8fHx8fHx8fH19fH19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX5+fn5+fn5+fn5/hIiLhoSHhoaEhIODgoGBgYGCgYGBgYKCgYCAgYGBgYGBgYGBgX5+fYCAgICAgICAgICAgICBeXpwXWJlZGJkXmZnZ2BZYmJhY2VfXF1ze3t6enp7e3t7e3t8fHx8fHx8fHt7e3t7e3t7e3t7e3t7fHx8fHx8e3x8fHx8fHx8fHx8fHx9fX19fX19fX19fX19fX19fX19fX19fX19fX19fn19fn5+fn5+fn5+fn5+foCFjIqEhYaGhYODg4SCgYGBgYKBgYGBgoKCgYCBgYGCgICAgIGBf35+gICAgICAgICAgIGBgYF5emxiZGdjYmdmYWBgZGFiZWRjZGNeXGJ1fHt7e3t7e3t7e3x8fHx7e3x8fHx7e3t7e3t7e3t7e3x8fHx8fHx8fHx8fHx8fHx8fHx8fH19fX19fX19fX19fX19fX19fX19fX19fX1+fn5+fn5+fn5+fn5+fn5+fn9/gYeMiYWGhoeFg4SDgoGBgYGBgYKBgoKCg4KBgIGBgYKBgYGCgoF/f36AgICAgICAgIGBgYGBgXp7dGdnZmZkZGZmYF5fYWNlaGRlXmJkYHR8e3t7e3t7fHx8fHx8fHx8fHt7fHt8fHt7e3t7fHx8fHx8fHx8fHx8fHx8fHx8fHx8fH19fH19fX19fX19fX19fX19fX19fX19fX19fX5+fn5+fn5+fn5+fn9/f39/f3+CiYqIhoaIhoWDhIOCgYGBgYGBgoGBgoKCgoGAgYGBgoKBgYKCgX9/f4GBgYGAgYGBgYGBgYGBenptaGNjZ2ZnZWdmZmdiZWRlYmdbYmVgdnx8e3t8fHx8fHx8fHx8e3t8fHx8e3x8fHt7fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx9fXx9fX19fX19fX19fX19fX19fX19fX19fn5+fn5+fn5+fn5+f39/f39/f39/f4SJioiGiYeFhYSEg4KBgYGBgYGCgYKCgYGBgYGBgYKBgoGBgICBgH9/gYGBgYGBgYGBgYGBgYF7emlpZGNqZmFgZmVjY2NnaWRjYmBiZGJ0fXx8fHx8fHt8fHx8fHx8e3x8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fH19fX19fX19fX19fn5+fn5+fn5+fn5+fn5+fn5/f39+fn9/f39/f39/f3+AhIqMiIeJhoSFhYOCgYGBgYGBgYKBgoGBgYGBgYGBgoKBgYGBgYGAgH+BgYGBgYGBgYGBgYGBgXZzZWRnY2RmZWJlZmdkZmhmZWNgYGNkYHF9fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fXx8fHx8fHx9fX19fX19fX19fX19fn5+fn5+fn5+fn5+fn5/fn5+f35+f39/f39/f3+AgICFioyJiIqJhoaDgoKCgYGBgYGBgoGBgoGBgYGBgIGBgYGBgYGCgX+Af35/foCCgoKCgoKCgoKCc3NnZWRkZWlqaGZnZ2NhZmZlZmdmZWVjdX18fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fX19fX19fH19fX19fX1+fn5+fn5+fn5+fn5+fn5+fn5+f39/f39/f39/f39/gICAgICAgIWLioqJioeHhoSCgoGBgYGBgYKCgYKBgYGBgIGBgoKBgYGBgYGAf4B+dHRzdX1/goCAfn5/gYB0cmdkZWNmaWppZWNlY2BmZGRnZ2JiZWFwfXx8fHx8fHx8fHx8fHx8fHx9fX18fHx8fHx8fHx8fHx8fHx9fX19fX19fX19fX19fX19fX19fX1+fn5+fn5+fn5+fn5+fn9/f39/f39/f39/f39/f39/f4CAgICAgIB/houLiouLh4eHhIOCgYGBgYGBgYKBgoKBgYGBgYKCgYCBgYGBgoCAgH5zc3NzdHV4dXV0dHV2dXVwZmNmZWhoaWdoZ2VmZWJfZGVmY2BiZ3d8fHx8fX19fX18fHx8fH19fX19fX19fXx9fXx8fX19fX19fX19fX19fX19fX19fX19fX19fn5+fn5+fn5+fn5+fn5+fn5+f39/f39/f39/f39/gIB/f3+AgICAgICAgICHjIyIi4qHh4eEhIKBgYGBgYGBgoGCgoGBgICBgoGBgYKBgoKCgYCAfnNzc3Nzc3NzdHR0dHNzdW9jY2FnZWhoZ2pmZGVnZmhmY2JlYl5ieX18e3t8fX19fX18fHx9fX19fX19e3x9fX19fX19fX19fX19fX19fX19fX5+fn5+fn5+fn5+fn5+fn9/fn5+fn5+fn5/f39/f4CAgH9/gICBgICAgICAgYCAf4CAgYGAgIeLi4iNiYiJhoSFgYGBgYGBgYKCgYKCgYGBgIGCgoGBgYKBgoKBgIB+dHNzc3Nzc3Nzc3Nzc3N1cmdlZWRlamhoZ2ZpaGdjZWViZGNoZGd7eHVzc3R2dnl4dnR0dHZ3d3d2dHR0dXV4d3h4d3d6e3x9fXx9fn5+fn5+fn5+fn5+fn5+fn5+fn5/f39/f39/f35/f39/gH9+fHt7fX58eXl2dnZ5fHx6end2d3l7fXt4hIyMioyHh4iEhYSBgYGBgYGBgoGBgoGBgYGAgYKCgYGBgoGBgoGAgH51c3Nzc3Nzc3Nzc3Nzc3VzaGVnaGVrbGhqZ2lqZ2dnZmRkYmVkbnV0dHNzdHNzc3Nzc3Nzc3Nzc3NzdHNzc3Nzc3Nzc3N0dHV1c3V3eHl7fn59fn98f39/f39/f39/f314fH5+fXx4dXZ3eXd4dnRzc3N0dXRzc3Nzc3NzdHNzc3R0c3R0dHODjI2KiYeIhoOGg4GBgYGBgYGBgYGCgYGAgYGDgoKBgYCBgYGBgICAf3VzdHRzc3Nzc3Nyc3NzdnZpY2hqaGpsZWZpbGhgZmVkY2BkZGZ0dXV1dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHRzdHRzc3Nzc3R2dnV1d3V4fH9+fX9+fHp4dXN0dXV1dHNzc3Nzc3N0dHR0dHR0dHR1dXR0dHV1dHR1dXR1dXV1dIaMjYuIhoeEhIWCgYGBgYGBgYGCgoGAgYCBgYKCgoGBgIGBgYGAgIB/dnNzc3Nzc3Nzc3Nzc3N2dnNnZ2pmaGdmaGhmZGlnY2NnZWVmcHZ1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dHR1dHR0dHR0dHRzdHR0dnV1d3Z0c3R0dHR0dHR0dXV1dXV0dXV1dXV1dXV0dHNzc3N0dHNzdHR0dHR1dXR1iY6MjIqHh4SEhYKBgYGBgYGBgYKCgoGBgICAgoKCgoGBgYGBgYCAgH93c3Nzc3NycnJyc3NzcnZ2dW5kXWNnZWlraGVoZ2dqamlnZXB2dXV1dXV0dHRzdHR0dHR0dHV1dXV1dXV0dHV1dHR1dXV1dXV1dXV1dXR0dHV1dXV1dXV0dHV0dHV1dXV1dXV1dXV1dXV1dXV1dXV0dHNzc3Nzc3N0dHNzc3Nzc3R0dHR0dHWKjoyMiYaGhIeFgoGBgYGBgYGBgoKBgYGAgYGCgYKBgYGBgYKBgYCAf3hzc3Nzc3JycnJyc3NzdnZ3d2liaGhnamtpaGZkZGVmaWhwdXR0dHRzc3JxcnJ0dXV0dHR0dHR0c3NycXFxcXNzdHR0dHR0dHR0dHV0cnJyc3R0dHR0dXV1dXV1dXR0dXR0dHR0dHR0dHR0dHR0c3Nzc3Nzc3Nzc3Nzc3N0dHN0dHR0dHR0dYuOjImGhYWFh4SCgYGBgYGBgYGBgoKCgYGAgIKCgoGBgYGBgYGBgIB/eXNzc3NycXJycnJzc3N3d3d3bGpoZGhpa3Z6a2VmZWhnbXJzdHN0c3JwcHBxcnN0dXR0c3NycnNycXBvb29vcHFzc3NycnJyc3R0dHNxcHFyc3R0dHR0dHRzc3Rzc3NzdHR0dHRzdHR0dHR0dHRzdHR0c3NycnFxcnJzc3Nyc3NzdHR0dHN2jZCMh4eFhYSEgoGCgoGBgYGBgYGCgoKBgYGAgYGCgoGBgoKBgYGAf395c3NycnFxcnJycnNzc3d3d3dzc2pnaWloeX99cW51bG5wcXJycnFxcG9wcXFxc3Rzc3NycXFwcG9ubm1ubW5ubnBxcnJycnJycnJzcXBvb3BxcnJzc3JxcnJycnJycnJycnJzc3Jzc3Nzc3Nzc3Nzc3Jxb29ubm9vcXJzc3Jyc3NycnNzcnaPj4uHhoWFhYOCgoKBgYGBgYGBgYGBgoGBgYGCgoKBgoGCgYGCgX9/f3hxcHBwcXFycnJyc3Nzd3d2dnd2cnF0c252f352c3hwcHBycnJycXFwcHFxcXFyc3Nzc3FwcXBvb25ubm5ub25vcHBxcXFxcXBwcXJwb25vcHFxcXFxcHBxcXFxcXJycnJycnJycnFxcnFxcnJycnFwb29ubm1ubW5vcXJycnJycnJyc3JxeI+OjYaDg4aEgoOCgoGCgYGBgYKBgYGCgYGBgYKCgoKCgoKBgYKBf4B/d29wb3BxcnJyc3Nzc3J2dnZ2dnZ3dnZ1c3l/fnd3d29wcXFxcXFxcHBwcXJxcnJzc3JycXBwb29wb29vb29vb29wb3Bvb29vcHBxb29vcHBwcHBvcG9wcHFycXFxcnJycnFxcXFxcXFxcHBwcHBxb29ubm5tbW5tbm9wcXFxcXFxcXFxcXB7j42NhoODhYOCgoKCgYKBgYGBgoGCgYGCgoGCg4KBg4KBgYGAgYF/f392bm9wcHBxcXFxcXBwcHZ2dnZ2dXR0c3NxfYB9fX9zb3BxcXFwcHBwcXFwcHBxcnJxcXFwb3Bvb3Bwb29wcG9vb29vb29vb3BxcXBub3Bwb29wb29wcnJycnFxcXBxcnFwcXFxcHBwcHBwcHBwb29ubm1ubm5ubm9ub3BwcHFxcXFxcXFxcIKRjoqEhIOFhIOCgoGBgoKBgYKBgYGBgYGCgoKCgoKCgYGBgYCBgX9/gHVvb29wcXFxcXBwcHBwdnZ2dXRzcnJycnGAgoCBeXBwcHBvcHBwcHFxcXFwcXFxcXFxcG9vcHBwcHBwb3BxcHBvb29wb29vcXFwcG9wcG9vb25vcHFxcHBwb3Bvb3BwcHBwcHBwcHBvb29vb29vbm5tbW1ubm5ub25vb3BvcHBwcHBwcHBwiZCMiISDhIaDg4KCgYGCgoKCgYGBgYCAgYGBgoKBgYGBgYGBgIGBgH+AdG5vb3BxcXFwcG9vcG92dnVzcnFxcXFxcICDg39ycHBwcHBwcHBwcHFxcHBxcXFxcXBwcHBwcHBwcHFwcHBwcHBwcHBvcHBxcXBwcHFxb29vbm9wcHBvb29vcHBvb3BwcHBwcHBwcHBvb29vbm5ubm5ubW5ubm1ubm9wcG9vb29vb3BzcXWPj4uJg4KFh4ODgoKBgoGCgoKBgYKBgYGBgYGBgYGBgYCAgYGAgYGAf4B0b29vbm9vb29vb29vb3Z1dHNxcXFxcXJygIKCgXRxcXFxcXFxcXFxcXFxcXFxcXBxcXFxcHFwcXBxcXFwcHBwcHFxcXBxcHBwcXBwcHBwcHBwcHBwcHBwcHFxcXBxcHBwcHFwcHFxcHFxcXFxcXJxcnFwcnRycnR0dHR1dnRzdHR0dXd3gpCPi4iDgoaHhISCg4GBgYKCgoGBgoGBgYKBgYGBgYGAgICBgYCBgYB/gHVvb29vb29vb25vb29vdXRzcnJycnJycnKDg4OCdnFycnFxcXJxcnJxcXJycnFxcXFxcnFxcXJycXFycXFxcXFxcXFxcXFwcXFxcXFxcnNzcnJyc3V1dHR0dHR0dHV2d3d3d3d3eHh4eHd3eHh4d3Z3dnV2dnZ2d3h6e3x7e3t6enp6enyGkI2LiIODiIeHhYODgoGCgYKBgYGBgYKCgoGBgYGAgYCAgYGAgIGBgH+Ad3FxcXFxcG5ucG9wcG92dHV1c3Nzc3NzdYiDgoN5cnNzcnJyc3Jyc3NycnJycnN0cnJzcnNzc3Nzc3Nyc3N0dHV1dXV1dHV3eHd3d3d4eHh3eHh4eXl5eXl4eHl5eXp6e3t7e3t6enp5eXh3d3d1dnV2dnd5enp7fn5+fX1+fn5/f35+gIyQi4qHg4WIi4iEg4SDgYGCgYGBgoGBgoKCgoKAgYGBgYCBgYGAgIGAf4B8enp5eXx5eHh2dXZ2dHl2d3h3d3Z3dnZ6f3x+fnx2dnd3dnV4enh4eHh3d3d2eHx5eXx6eXl8e3l5eXh4eXl6enl5eXh4enp5eXh4eHh3dnd3eHh3eHh5eXp7e3p8fH1+fX9/f359e3t7e3p5enl5e3t/foB/fn5/fn19fX5+f35+fn6AjpCNioeEhoqLiIaGhIOBgoKBgYGCgYGCgoKCgoCBgoKBgYGCgYCBgIF/f4B/fn19fX9/f318e3t7eXh4eHh5eXl4eXh5eXl4enp6enp6e3t7fH1+fHt7ent8e318e3t7e3t7e3l4eXh4ent6enp5eXp8fHt6enx8fHp6ent9fHx+fn+AgoGAgYKAgH9/gYGBgIB/f35+fn5/fX1+f4CAf35+f39+fn9/f39/gH+Af4OQjoyHhoWIi4yIh4aFg4GCgYGBgYKBgoKCgoKBgYKDgoGBgYGBgIGBgIB/goOCgoGBgX99f39/f4F6enh4d3h4eHh5eHh5enp5e358enx9fXt8fX19fHx7fnx9fn5+fn5+fX9/f3x8fYCDgYCAf318fXx9fXt9fXx8fH19fX1+gYGChISDgoB/gYGBgH9/f4B/f39/f39+fn9/f39/f35+f3+Af39/gICAf4CAgICAhJCPi4eGhoiLi4mKhYaDgoKCgYGBgoGCgYKBgYGBgoOCgYCAgYGAgIGBgH+ChIKCgICAgH9+fn+AgH9/fn18fX19fYB/fX+Af35/gH9/fn9/gIGBgIB/fn+BgICAf4CBgYB/f4CBf35+f39+f39/fn5+f39/gYB/f4CBgYCAgYOEgoGCgoGCgH+AgYCBgYGAgH+BgICAf39/gICAgYGBgIGBgYCAgICBgoGBgYCAgYGFjo6MiYaHiYyLi4qGhoOCgoKBgYGCgoOCgoKBgIGBgYKCgICBgYCAgYGAf4KFg4KBgYCAf39+fn+AfX5+fn19fX5/fn9/f35+fn+AgYCAgICAfn9/fn6Af3+AgIR/g4F+f39+fn59fn9/fn9/f35/gIGBgoKDg4KCg4KBgYKDg4OCgYGBgYKBgoKCgYKBgoGBgYGBgoKCgYGCgYKCgoGBgoKBgYKCgoKCgYGBgoKCgoaPkY+KiImKjY6NiYaFgoKCgoKBgYKCg4KCgoGBgYGBgYF/gIGBgYCBgIF/gYWEg4KCgoGCgYCAgIB8fHx7fH18fH9+fn9+fn5+f35+f39/f39/f35+foB+fn9/jH6NhX5/f39+fn5/gIB/gIF/f39/f3+BgYGCgoCAgYKDg4SDg4ODgoKCgoKCgoKCgoKCgoGCgoKDg4OCg4ODgoKCgYKCgoODg4ODgoKCgoODg4KCh5KTkIuKi4uPj42Kh4SCgoKCgYGBgoKDgoKBgYGBgIGBgICAgYGBgIGAgYCAg4SDg4OEg4ODgoKCgXx9fHx9gn1+f4GCiIGCgoSCgYGDg4GBgYKDgYKBgYCAf4GXgpSMfn+AgX9/f3+AgYCAgICAgH9/f3+AgICAgH9/gYODhYSEg4SDgoKCg4OCgoOCgoODg4ODg4SDg4KEhYWDg4SEgoKDhIOCg4ODg4OCgoODgoCKlJOPioqMjpCPjYuGg4KCgoKBgYGBgoOCgYGBgIGBgoGBgICBgYGAgYCAgH+BgoODg4SEhIOCgoKCfXx8fn6AgYOAg4OChIaFhoaFhIWFg4ODg4SBgYKEhIKChp6Gl5SAgoGBgoKCg4KDg4KDg4ODgoGAgIKCgYOCgYKCg4OEhYWEg4OChISEhIOEhISDg4OEg4ODg4OEg4SDhIWEhISDg4ODgoKCgoKCgoKBgYKCgo+UlI+Njo6RkY6KiISCgoKCgYGBgYGCg4GBgIGBgYGBgYCBgIGBgYCBgICAgIKChIKChIOCg4ODgoJ9fX2AgH+AgoGDg4ODhIaEhIOEhYWDg4GBg4OBgIGDgYKKoYiZmoeHhoaGhoeIh4eGhoeHhoaEgoGCg4SDg4ODg4ODhISFhYWDhYSFhISEg4KBg4OCg4SEg4KCg4SCg4ODg4OCgoKCgoKCg4OEhIOFhYWFhoaIk5OTkI+Pj5KRjIqIgoKCgoKBgYGBgYKDgoKBgIGBgYGBgICAgYGBgICAgICAhISEgoKCgoGBgoKBgX+AgYOCgICAf4CCgoGDg4KCgYODg4SDg4KDhYSDgYGBgYujipqciYaGh4eHiIiHh4eIiIiFhIOBgIGBgoKCg4GCg4SEhYSDg4OEg4OEhIOBgYGCg4OEhISDg4ODg4OEhIODgoSDg4ODhIWFhoeHh4eIiIiJiY6TkpKOj46Rko+LiYeCgoKCgoKBgYGBgoKCgoGBgIGBgYGAgICAgYGAgIGAgICDg4KCgYKCgYGAf4CBhYWFhoOCgYB+fn+BgoSCgYKDhIOCg4ODg4KChISDg4KAjaOJl5yIhISDg4SFhYKEhIWFg4KBgH9/gIB/gIGEg4OEhYWEgoKCgoOCg4OFhIKDhISEhYaGhoaGhoWFhoeHhYaIh4aHiIeGhoaIiYeGhYaGhoeIkZKSj46QjpCRjImHhYGBgoKCgoGBgYGBgoOBgYGBgYGBgICAgICBgYCAgICAgISEg4KBgoGAgYGAgYKIh4aHhYSCgH99fX6AgH+AgYGBgYGBgoGAgYKDgoKCgoGNo4+WmYSCg4GBgYGAfoGAgICAgH9+gIGBgYKCg4OEg4OEg4OCgoGBgoODg4SEg4SEhIOFhYaFh4eIh4eHh4eHh4eGhoaGh4WFhYaGhISEhIWEhYaSk5GOjo+OkI6JiIeEgoKCgoKCgoGBgIGCgoKCgoKCgYGBgYGAgYGBgICAgYGAgoSDg4KDgoGCgYKDg4iHh4iHhYSCgX5+gICAfn5/f4CBgYGCgoCBhI6EgYCAhZ+mqaiXgoKBg4aDf39/gICAgICAgICDg4KDg4ODgoOBgYKCgoOCgYKCgoOCgoSDhISDg4SEhYWFhYaGhoaFhISEhYWEhIWFhYSEhISDhISEhISEipSTkpCQj46NiIaFhIOBgYKCgoKCgYGAgYKCgoKBgoKBgYCBgYCBgYGAgICAgYGAg4OCgoOCgoKBgoOCiImJiYiHhYSDgYKEhIOBgoKCg4SCgoSEgoOKl4mEg4SYraerrKCOgYKEkISBgYCBgoOCgoGDg4SDg4SEg4OCg4KDg4ODg4KCgoKCgoGDhISEhYSFhYWFhIWEhIWFhYWDg4OEhISEhYWFhISEhISEg4ODg4OOlZKQkZGOjYyHhYODg4GBgoKCgoKBgYCBgoOCgYCCgYGBgICAgIGBgYCAgICBgICDhYSEhIODg4SDhIOGh4mIhoWDhIODg4WDgYCDgoWGhISDg4OChI6Zj4WFiaWhmaWjm56JgpSVhIOCgYGBhIWEg4ODgoKDhISDg4ODg4SFhISDg4KCgoKCgoSEhYSFhYWFhYODhYWFhYaFhoWEhIWEhYWGhYWFhIWEhISDhIODhJGUk5KSj4yMioWEhIODgYGCg4KCgoKBgYGCg4KBgYKBgYGBgICBgIGBgH+AgIGAgYaGhoaGhoaHh4aGhYSDhYaCgIGBgYGHgoB+f4GBj4yDgX9+fXx9jZ2Zk4SIn5SQn5yUnZWSno6Cg4GCgYKDhYODg4KDg4OEgoKEhIOEhIWEg4OCgoKCgYKCg4ODg4SFhYWFhIOEhYWGhYWEhISEhIOEhIWFhYWFhIODhIOEg4KGlJSSlJKPjYyIhISEg4KBgoODgoKDg4GBgoKBgoKCgYGCgYGBgYCAgYGAgICAgICAhYWFhYaGh4aGhoWGg4ODg4GAgoKCgYKAf35/f4GWl4mAfX19fnyCl5OhnYyTko2YmpSZoaGbh4GBgYKDgoODgoOCgoKCg4OBg4SDg4ODg4OEhIKCgoKDgoKDg4ODhIWEhISEg4OEhIODg4OEhIODg4ODg4SDg4ODg4KDg4KDgouUk5KTko2NioeDg4OEgYGCg4ODg4ODgoGBgoGCgoKCgoKBgYGBgICBgYCAf4CAgICDhISFhYSFhYWEhIWCg4KDgoKDg4OBgICAgICAgJafi35/gH2Hi3+EhpWopZ+SkZWPiZWgnZmEgoKDg4ODgoODhIKCgoODgoKDg4KCg4KDg4WEg4ODg4SDg4SEhISEhYWEhIWEg4SEg4OEhISEhISEg4SEhYSDg4SEhIODgoKDkJSSkpKPi4yIhoOFg4OBgYKDg4ODg4OCgYGCgoKCgoKDgoCBgoGAgICAgIB/gICAgISDhYWEhYWFhYSFhYOEhIWDg4SEhIKCgoOCgoSBkqCKgIyFfYaIgYCGiZyhopCDf35+gpadkYKDg4OEg4ODhISEg4OEhISEg4SEhIOEg4OFhoWFhYSFhYWFhYSFhoWGhoWFhYWFhYWFhYWGhoWGhoaFhoaGh4aFhYWFg4SEhIeTk5OSkoyKiIWFhYWCgoGBgoODg4OCg4KBgYKDg4ODgoKBgIGAgICAgICAgH+AgICAhYWFhYWGh4eGhYWFhISFhYSEhISEg4ODg4OEhYOKkIKEioWDgoF/f4OIj4+GgH9/gIB/go6Gg4OEhISEhISEhISEhISFhYWEhYSGhYWGhYaGhoWGhYWHhYWGhYaGhoaFhIWFhYWFhIWGhoaHhoaGhoaHh4iIiIaFhYaEhYWGjZSTkpGQi4qHhoeGhIGCgYKDg4ODg4KDgoGBgoODg4KAgYGBgICAgICAgICAf4CAgICHh4eGhoeHiIeHhoaEg4ODhIODg4OEg4ODg4OEhISEgYKCgYiBf4CAf4aCf3+AgICAgICAgIOFhIWGhoaFhYWFhoaHhoaFhoWFhoeHh4iHh4eGhoaHh4eGhoaGhoaGhYSDhIWFhYSFhYaGhoeHhoaGhoeHh4eIiIeGhoaHh4eRlJORkZCLiIiFhoSDgoKBgoODg4ODgoKDgoKCgoOCgYCBgICBgICAgIGAgIB/gICAf4aHiIeHh4eIiYmIiIODgoKDgoSEhIWEg4KCg4SEhIOBgICAhYV/f39/gICAgICAgICAgIF/f4WFhoeIiIeHh4eIh4iHiIiIhoaHiIiJiYmIh4aHh4eJiIaHhoeHhoaFhIOEhYaFhYWFhoaGh4eFhoeGh4aGh4eHh4eHh4eFh5OTkY+RkIuHhoWGhIKCgYGCg4ODg4ODgoKCgoGCg4KCgIGBgYCAgICAgICAf3+AgYB/hoiIiIiHh4iJiYmIg4KCg4ODhIWHh4aFg4OFhISDg4GAgIGMiIGAgYKCgYGBgYB/gH9/fnt6gIaIiIqKiYmIiImJiYmKi4qIiIiJiYuLioqIiIeIiIiHh4iIh4iGh4aEg4OFh4eHhoWFhISDhYWEhYWGhISEhYWFhoWGhYOJlJOQj5COioaFhoWDgYGBgoKDg4ODgoKCgoKCgoKCgYGBgYGBgYCAgICAgIB/gICBgH+GiYiIiYeIiImJiIiEgoKDg4KDhImKh4aEhIWEg4OCgICAhISCgoKCgoKCgH9+fX19fX9+fHt8g4eJi4uKioqIiIqJiImLiomJiImIioqJi4mHhoaGh4WGiIiJiIeGh4SDgoSIiIiIh4WCgoGDg4KDg4SCgoKDgoGEg4SEgY6TkpCPj4uIhYSGhIKBgYGBgoODg4OCgoKCgoKCgoGBgYGBgIGAgICAgICAgH+AgIGAf4WIh4eHhoeIiIiHh4SCg4OCgoOFiYqJh4WHhYSFhYKAgYOEgoOCgoKDgX59fn5+fn5+fn1+fX19g4eJioqHh4WGh4eHh4iHh4mGiIaIh4aJiYODhIOFhISFhYaIh4aFg4KCg4WHhoeGhoSCgoOEgoODhIKBgYGBgYODhIODkZKQjo+Oi4eEhoaDgoGAgYGDg4ODg4KCgoKCgoKCgYGBgIGBgYCAgIB/gIGAf39/gIB/hYaGhYaGhoeHiIeGgYKEhIOChYeIi4qGhIaEgoaGgoKEhIODg4OCgoF9fH1/gH5+fn59fH19fHl8g4aHh4SDgYODhIWFhYODhYSEhISEhIWEgoKDgoSEgYKDg4WGhYSCgYGCgoODhYOEhIWEhIaDhISFg4KDgYKDg4SFhIeSkY+Nj4yJhoSFhIWCgYCBgYODg4ODgoKCgoKCgoKBgYGBgYGAgICAf4CAgYB/gICAgICDhIWEhYWFh4eHh4aAgYGFg4OEhYSHiIWCgIB/gn9/gYODg4ODgoJ/fX1/gICBf31+fn18fX17enp+hISEgoGBgIGBgoKBf36BgYGCgYOAgoGCgoKBg4SAf4CAgYOCgICAgICBgYGCgYGChIODhYSCg4SDgoKBgoSDhYWGi5ORj4+Pi4iFhYOChIGBgYGBgoODg4KCgoKCgoKCgoGBgYCBgYCBgH9/gIGBgICAgH+AgIKCg4OChIOEhYWGhn+BfoCBgICAgIGDgn9+fn5+fYCCg4OCg4KDgn19fn+AgIGAfn19fX1+fXx6enqAgoKBf39/f35/f4B+fYB/f4CAgX+AgIF/f4CBgX59fX+AgX9/foCAgH+AgICAf4CCgICCgYGCgYGAgYGBgYKEg4aPkpCOj42Kh4eGg4ODgYGBgYGCg4ODgoKCgoKCgoOCgYGCgYGBgICAgH+AgICAgICAf39/gYKDhIGCgoODg4SFgIB/fH19fn19foCAf31/fn1+gYODgoKCgYF/fX1+f4CAgH9+fX19fHt7e3p6eXqAgIB+f39+fn1+f35/gH9+f3+Af4CAf35+fn9/fn18fn+Af35+f3+Af39/f4B/f4B+f4CBf4B+f39/gH9+f4B/hZKSj46Pi4uHiYWEhIKCgYGBgYKDg4ODg4OCgoKDg4KAgYKBgYGAgICAf3+AgIB/gIF/f36BgYSEgYKBg4OCg4OBgH98fn5/fX6Af4B/foF/f4CBhIOCgYB/f359fn5/gICAfn19fX17e3x6enl5eXuAgH9/f39+fn5/foCAf35/f4CAgoB/fH5+f35+fXx/f4B/fn9/f4B/f35/foCAf36Af39+fn5/f35+fn18fH2Fk5KOjIuKiImIhISEgoKCgYGBgoOCgoODgoODg4ODgYCBgYGBgYCAf39/f4CAgICAgIB/foCBhIOCgYGDhISDhICBgICBgIGAgYKCgoGBgoCBg4ODgYGBgYCAfX19fn5+f359fX19fXx8fHt6eXl5eX2BgICBgYF/f4B/f4F/gICAgYGCgoB+gH5/fn5+foGAgYF/f39/gIB/f39/gYB+f4CAfn9/fn+Af31+fn17fIaTkYyLioeHioiGhoSDgoGBgYGCg4ODg4OCg4OCgoKBgICBgYGAgH9/f39/gICAgICAgH9+fn+BgYGAgISGh4aHgoSDhYOBg4ODhYSEhISEg4ODhIKCgoKCgX5+fX19fn6AfX19fX19fX19e3p6eXl5eYCCgoKEg4GCg4F/gYCBgYGDgoODgYGCgIGAf4CBg4GEgoCAgYCBgYCAgYCCgn+BgIF/gIB/gICAfn9/fnx8ipOQiomIiIiJiIaGhoSCgoGBgoKDg4ODg4KDg4KCgYCAgICBgYGAf39/f4CAgICAgIGBf359fn5/f39+g4aHh4iChYSFg4SFhIWGhoaGhoWGhYGBg4ODgoKAfX19fX19fn59fX19fX19fX18e3l5eXl4fIKDhIWCgYSDgoKDhYaCg4SDgYKCg4OCgoKCgYKFg4iFgoGBgYKDgYGBgYSDgoOCgoKCgYGBgIF/gIGAf36Ok4yHiIaIh4aGhYaGhIKDgoGCgoODg4ODg4OCgYGBgH+AgYCBgYB/gH9/gICAgH+AgYB/fn19fX5+f36Ag4SHiISGhoaFhoaHh4aHh4iHh4eGf32BgIGCgX59fX19fX19fX19fX18fH5+fnx7eXh3eHl5gIODf4OMhIOEhISXl4ODhIF9foGCgoGCgYKBg4aIjIWDgoKBhIKEg4KDhYSEhYOCg4OCg4OCgoKCg4OCgpKQi4iJh4mHhoaEhoWEhISCgYKCg4ODg4ODgoGBgYCAgICBgIGBgH9/fn+AgYCAf4CAgH9/fn1+fn+Bf4CCgYWFhYeGh4eGh4eIhoaHh4eGh4V+fX18fX9+fX19fX19fX19fX19fXx7iJKCe3x6fIZ5eHl8gYF+iZaEg4OEhJSTgIGBf39/fn6Fi4B/gICEhpCJhYSCgoGFhYuDgYKFhYaGhIOFhYOFhIODhIOFhISIko6MiYiIiYeHh4WGhYSFhIKBgoKDg4ODg4OCgYGBgYB/gIGAgICAf39/f4CAgICAgYGBf39/f4CAgIGBgYGBg4OGh4aGh4aGiIeGhoaFhIOFhH59fHx8fX18fH19fX19fX19fX18fH+RlZaDe3qElHx4eXp7fICCg4GBgYOCgH58fn57iJF8fI6Wf31/f4KGioWDg4SDgYONiX9+f4OEhYWDhYaFhIWFg4SFhYaEhI6Rj4yKioyJiImHhYWFg4ODgYGCgoKDhIODgoGBgICBgICAgYGAgIB/f3+AgIB/gICAgX5+f4GBgoKCgoODgoOCgoWGhISFhYSGhIOEg4KBgIKAfn19fHx9fXx8fH18fH18fX19fHx8e4uRl4x6e3yBenp6e3x5eX19foB/gH98e3t+fn2ClZF/hIh+fH5/goR8fIGChIKAf4eDfYKBf4KCgIODhISEhISChIOEhYGEkpKOi4yMjoqJiYWFhYODgoKBgoODgoKDg4KCgYGAgIGAgICAgICAgH+Af3+Af357gICBenyAgYKDhYODhYWFhYODg4SCgYKDgoOCgoGBgIB/gX5+fX59fHx8fHx8fHx8fHx8fHx9fHx8fn6Kgnt6e3p4ent7fH17fn1+f319fX18fH+BgX2Gj4F+fYJ+fn6Agnx8f3+CgIKAfnx7ioJ9gH9+gYCAgIKBgoCAgYGAf4uUj4yLjo6NiIeHhYWEhIOCgoKCg4OCgoODgYGBgICAgICAgH9+fXx7fHx9f3+AgHx6gYF4e4CCgYOFhIOFhIaHhISAhpSIgIKBgYGBgH9/f39/fn5+gHx8fHx8fHx8fHx8fHx9fHx8fHx8fHl7e3t4eHl7enp8gn+Afn+BfH5+f399gIKCgICAgX+CkYF/f4CAfoB+fn9+gIGBfX19e319fXx9fHx9gH+AgH6Afn6ClJGMjI2OjoqFhoeFhISFg4ODgoODg4OCgoGBgYGAgICBgICAf4CAf39/fXt6fICAgHh+gXd7gIF/gYKCgoKEhoeGhn6IlYp+gYGAf4B/foB+f39/fn+Bfnx7e3x8fHx8fHx8fH59fHt9fHx8e3x8fHp6eXt8en2Fg4J/gYF+f35/gH6FgoF+gH9+foCFhoKAfn6Dhn9+fH6AgIGAf39+fX19fX57fH1/f3+AfX9+gIyRjYyNjo2Nh4SGhoWEhISDg4OCg4ODg4KBgYGBgYCAgYGAgYGBgYGAgH9/f397en9/e3mAd3p/f31/f3+Af4KDhoaFf3+FgX5/gIB/gH5+f31/gIB/f4B/f319fHx9fn18fH19fX19fH58fXx7fXx8ent6fH19f4aEgoCAgX1+fX5/fouEgYZ+fXx8f36CgX99fX19gHx7fXx+gYSDgYB+fn5+fX1/f399foB+fn6Eko2MjI+Ni4qGhIaEhIODg4OCg4KDgoOCgYGBgYGAgYGBgYB/fXx8fH1+f39/f397e399d352eH59fH18fX5+gYGCg4B6fX18fn+Af36Af35/fn+AgH+AgH9/fn9+fn5+fn1+fn99fH59fn19fHt8fHx6e3p9f4CAg4OCf35/fH18fXx8gYN+jH58e3t9fn1+fn17e3t9fHp7e3uAhoWChIOCf4B+f4KCgn9/goJ/gIqPjIyLjYyLiISEhIODg4ODgoKCgoKCgoKBgYGAgoGBgYKCf3+AgIB/fn18fH5/fn55fX52e3Z4fXx8fHt9fX6BgICAf31/f31+f39/foB/f39+f3+Af4GBgH99gH9/fn9+fn5/f3yCfn59fX17e319fHp8fH6AgoGAgIB8fH18fHx8fH18fnt/fnt7e3x8fH18e3t7e3x8enp9en6CfoGDhIKBgoGFhoWFhoaHhYGEkY6Mi4qLh4eFgoOEhISEg4KCgYGCgoKBgoGBgYGBgoGBgoKAgYKBgYCAgH9+e3x+fnx6fnh5dnd8fHx7e318f4GAf35/foB/f35/f35/gH9/f3+Af3+AgYKAfn6BgIB/f39/f39+fYN8fH19fH99fX19e3x+fn9+fn5+fnx8fHx8fXx+fnt8e3x8fHx9fH18fnx9fHt7e3x5e3x7e316fX5/f4CAg4eJiYmKiYqJhYiRjYuIiYeFhYOCgoOEhIOCgoKBgYKBgYKBgYGBgYKCgoGCgoCAgX98e3p6eXt9enx+fnl8eXh4dHx8fHt8fHx+gH9/f39/gIB/fn5+fX+AgH9/f3+Af4CDgoB/gIGAgIB/f4CAgH58enx9fX59fX5+jIZ9fX57e4OCfX19fX18fX19fH1+fH18fXx9fX58fn19fX18e3t6fHt8fHt6e3t6enp7fn6ChYiHiIqLi4uJjZGOjYmIhoWEgoKCgoODg4OBgYGBgYGBgYGBgYGCgoOCgYKBgIGBf3+Af356eHl5en5+e3l6eH5zfHx8e3x8fH5+fn5/gH+AgIB/fn9+gIF/f4B/gIGAgoSDgYCAgYGAgX+AgYKBf39+f31+gH57foGSjHx9f4qAjYx+fn19fX59fX59fHx8fX18fXx9fX1+fX1+fnx7e3t8fH18e3p7fHl6eXh5e35/hIOEh4mKiImOkI2LiIiFhISCgYKCgoKCgoGCgoKBgYGCgYKCgoGCgoKBgoKAgYGAfoCAf39+e3p5e319eHx6f3KBfXt7fHx8fn59fYGCf4GBgX9/gH+AgX9/gIGCgYGFg4SCgYGCgYKCgICBg4KAf4F/fX6Afnx/f4mCf36DkISEg4F/fn18jYd9fX59fHx/fnx9fXx9fX5+fX5/fX19e3x9fnx8e3x9enp5eXl5e3t+foCBg4eEiI6NioqGhYSEg4KBgoKCgoGBgYGCgoKBgoKCgoKCgoKCgoGCgn+AgIB+f39/fn5/ent5fX16enp9cX6Cent9fX19fXp4f4KAgYKCgICBgIGBgICBgoKCgoaFhIKBgYGBg4F/gIKEgX9+gYB9foF+fX5/gIB9fn+EgH5+f31+fX2KhX1+f31+foB/fX18fH5+fn99f4B9fn18fX9/fHx7fH17e3t6enp7e3x9fn2Ag4CJjYqLh4WFhYSDg4KCgoKCgYGBgoKBgoKCgoKCgoGBgoKBgYKCf4CAgH9/f39+fn59eXp6fXx5d3t0e4d8dHd9fn17e3Z2fYCBg4KBgYKCgoKBgYGDg4OChYaEg4CAgICDgX+AgYSBfn6Af35+gH59fn6AgH+Bfn+Af39/gH99f39/f3+Afn9/gH58fX18fn5+foF/gH2CgHx9gIB9e319fXx8e3x8e3t7fHt8fHx9fIqKiIiFhYWFhISDgYKBg4KAgIGCg4KCgoOCgoKCgoGCgoGBg4J/gIGAf39/fn5+fn57enp8fHt2e3R3f352cnt+fnt4dnd8gIGCgoKBgoODg4OCgoSDhIOFhoOCgX9/gIKAgICAg4F+foB/fX+AfX1+foCAf4J/gYGAgICBgH1/f3+AgIGAgIB/fnx9fX19fn59gn2AfoKAfX6AgX98fn59fX17fH58fXx8fHp8e3x9iYaGhYWHhYWFhIKBgoGDgYCAgoKDgoKCg4ODg4KBgYGBgYGCgH6AgYB/fn5+fn5+fn56e3p9goN9dXF6fHpxen59eXh0dICAgoKCg4KDhYOEg4KDhISEhIWEgYGAgH6AgoB+f36Bf35/f4B9foB9fX1+gH9/gYCCgYCAgIKBfn6Af4GAf4CAgH9+fX19fnx+fn19gYR/gH9+f4GBf31/f319fn1+fn1+fHt8enx7eoCHgoSEhYSEg4WDgoKBgYKBgICCgoOCgoOEg4SDg4KBgYKBgYOAfoCBf35+fn5+fX5+fnt7en6Jh354cnl9f3F6eHt4eXV1fYKDgoODg4OFhYWDg4OEhIODhIKBgH+Af4CBfn19fn9+fn5/gH19f3x9fX6Af4CAgIKAgIGAgoGAf4B+gIF+gIGAgH9+fn5+fn5/fn6FhYGBgH+Ag4F/foGAf35/f4B/fn17ent6fHt6goR/g4KCgoOChIKBgYCAgoGAgIKCg4KBg4SDhIKEgoGBgoGCgn9+gIF/fn1+fn5+fX59fXp7fIWEe3tzeXp8cHd1dnd5dXR6hISBhISDhIWFhoSDg4WEgoODgoCBf39/f4B9fX1+f31+f39/fn1+fH19foF/gIB/gIB/gIGDgoGAf36AgH+AgYCBgH9/f39/f4CAgIGCgoKBf4CDgX+Ag4J/f4B/gX+Af3x7e3p8e3yCgH+Cf3+BgIKCgYF/f3+BgH6BgoKDgYGDg4KEgoSCgYGBf4GCgH6AgH9/fX5+fX19fn19e3t6gH94fHZ5eXtxdHh3dnh1cnmFhYKEhIKEhYWGhISChIOBg4GAgIF+f4B/gHx9fX6AfX5/f39+fX98fn5+gX+Bf39+f4B/gIODg4B/f4GBgIKBgYGAgICAgICAgIGAgYKDgYF/gISBfYGDhICAgX+BgYKBfXp7e3x8fH9+f4B8f399fYGAgH59fYB/foKBgYKBgIKCgoKBg4KCgYB/gYKAfn9/fn99fX1+fX19fX19ent7fHZ9eXh5enJ1eXl2d3dzdYaFg4WFgoSEhYSEhIKDgoGDgX+AgX5/gH6AfX19fn9+f4B+fn99f3x/f3+BgIF/f3x+gH6AgYKDgYCAgYOEgoGAgYB/goCAgYGAgYGCg4KBgX+Ag4B+goKEgICCgYKChIJ+e3t8fHx8fX1+fXp+fX14fn9/fHx8fn5+gYCBgYCAgoGBgYGDgoGBf4CAgoB9fn19f319fX59fH19fX16e3p8dnx6d3t4cnZ5e3Z2dnN0hoSEhYSChISFg4ODgoOBgYOBgIGBfX+BfoF9fX1/f39/gH5+f359fYB/gIGBgX5+fH5/fn5/gYJ/gYGCg4eFgX9/fn6Af4CBgICAgIKCgYCAfoCCf36BgoOBgYOCg4OFgn99fX18e3x8eXp7en55e3l4f357e3t+fX1/f4F/gH6BgICAgoOCgYF/gIGBf31+fH1+fX19fX18fn58fXx5e3x4enx3endzeHd6c3Z2c3SGhISGg4KDhISDgoKCg4GCgoGAgYF9gIB+gH1+fX5/gICAf39/f3x+f3+BgIGAf359f39+fn+BgH2AgIGDg4N/f359fn5+f4CAgIB/gYKBgH9+f4F+f4CCgoCBg4KEhIaEgH59fHx8fHt5dnl5enl2eXZ+fHt7e358e399gH99fX9/f3+BgoGBgX5/gYF+fX18fX19fX19fXx+jYF8fXl7e3p5fHd4eHR1dXhyd3d0doaEhIWEg4ODg4OCgYKDgoGDgn+Bf35/fn+AfX19fX+AgIB/f39/fIB/f4GAgYCAf3yAf31+foB/fX5+gYGCgn5/fn1+fn5+f3+Af32AgIB+fn5/gX5+gIKBf4KDgoOEh4SAgH58fXx8e3x1eHl4eHh5d3t8e3t7foV9fn1/ent+fn59foGAgIGAfX6BgH59fXx9fX19fX18e32Dgnx8ent7e3p7d3Z4dXJzdnB4eXJ4hYWFhYOEhIOChIKBgYKBgIKBgIF/fn5+foB+fX58foCAgICAgX97gH6AgH+BgYB/fYB+fn5/f319fX6AgYKBfn9+fn59fX5/fn9+fH+Af35+fn+Cfn6AgIF/gYODg4OGhICBfnx9fHx7fXh3e3h1eXd3eXx6e3t9kod9fH13en1+fn19f35+gH98foB/fn19fH19fX19fHt8ent9enp4e3x6ent4dHh1cXJ0cHh4cnmEhYWFg4SDgoODgoGBgoKAgYGAgIB9fn5/gH18fn1/gIGAf3+BgHyAf4B+f4GAf39+gX9+f39+fX18gICAgIB+f35+fn18fn9/f358fYB/fn1+gIJ/foCAf36ChIKCg4WFgoJ+fXx7e3x8eXd8eXd4d3d4e3t7e3yFin17end6fH19fHx9fX1/fnx9fn59fXx8fX5+fX18fHt6enx7e3p5enp7enhzd3VxcXJveHdxe4WGhIWDhYKBg4OBgYGBgoCBgICBgH5/fn+AfXx+fYCAgoGAgIGBfX6Af35/gX+Af3+BgH9/f31+fH1/gICAgH9/f35/fXx+f39/f319f39+fn6CgYF/gIB/foGDgoKEg4SCgn5+fHx6fHt7eXt6d3N2d3h5e3p7eXp/fnt7d3p8fXx8fH59fH19fH19fXx8fX19fX99fXx9e3l7fHx7enp6enp6eHN2dXBwcm93dnJ7hYaEhYOEgoGDgoKCgYGCgYKBgYGAf4B/f399fX9+f4CBgYJ/goF9foF+fn+Bf4B/gIJ/gIB+fH58f3+BgICAf4B/f4B+fX5+f4B/f39/gH9/f4J/gICAgIB/gYGAgISBgoKAf39+f3x9fn56fYV+dHx9enp6enx5eXp6hoV3eXx8fHx8fXx8fHx8fX19fHx9fX19fn19fX16eX18fH16enp6enp5c3V1b29xb3d0c3yFhoOEgoOCgYKBgoKCgYKBgoGBgYCAgICAgH59gH+Af4GCgn+CgX+AgX5/gYB/f4CAgn+Bf319f35/f4KAgICAgIB/gIB+fn1/gH9/gIB/f39/gH+AgICAgH+BgYCBgYGCgYCAf39/fn1/fnuBk416fH18e315e3p6eHmBgXh5e3x8fXx8fHx8fHx9fX18fH18fn1+fn59fHp8fHt8fXt5enp6eXlzdXVvb3Fwd3N0fYWGg4OCg4KAgYCCg4KAgYGCgYKBgYCAgIGAfn6Af4GAgYKCgIKCgICCfoCBgX9/gX+BgIF/fH6Af3+AgoCAgICAf3+AgH9+fX6Afn2AgIB/f3+AgICAgYCAf4CAgYCBgYKCgICAf39/fX5/fIGGiXx8fnt7fnl6e3p7jn53d3l7fHt9fHx8fHt9fH19fX18fXx+fn5/f358enx9e3x9e3l6e3p5eXN0dW5zcXB4cnV6hYaDg4KDgoCAgIKCgX+CgYKBgoGBgYKAgYF/fn9/gYGCgYKBg4OAgYJ/gYGBf4CAgIB/gX99f4F/gICBgICAf4B+gICAf359foB+fn+Af39/gH9/gICBf4CBgH+BgIGBgoKAgICAgIB9foB9gIOCe35+e3x9e3p8fHyHeXh4eXx8fH17fHx9fX18fH19fn19fX5+f3+Af317fH18fHx7enl7e3l5c3J1bnZycHhxdXaFhYOEg4KCgICBgoF/gIKCgoKDgYGDgoCCgYB/gICCgoKBg4KEhICBgX6BgoF/gICAgH+Cf36AgYCCgICAgIB/gH+AgIB/fn2Af39/f4CAgH+AgH+AgYF/gICAgIGAgIGBgYGAgYCAgH9/gH5/fX59fn57fXx9e3x8eHh1eHh5e3x8fXx8fHx8fX5/f39/fn19fn9/gIGAf3x9fHx9e3p7eXp8eHpzcnVud3FxenF2d4WFg4ODg4KBgYKDf3+CgYSDg4SBgYOBgoOBgYCAgIKDgoCCgoSDf4GAfoKDgICBgICAf4CAf4GBgIKAf4CCgH9/gICAgICAf4CAgH+AgICAgIB/f4CBgYCAgICAgYGAgoOCgoCCgYGCgYB/f4B/gId+fnx6fXx7fX94d3Z5eXp8fXx8fXt8fH19fn5/gIGAfn1+gICAgoGAfH59fX58d3t6ent5eXNxdW53cHV6cXZ5hYWCg4KDg4KDhIR/gIOBhoOEg4GChICEg4KCgICCgoSBgYKChIJ/gIB/gYOCgYCBgYCAf4GBgYGAg4F+gIOCf35/goGAgIB+gYCBf4CAgYGBgYCAgIKBgYKBgYCBgYGBgoOCgoOBg4OCgYCBgH+AhH19fXx/fXp9f3p5dnp4eXt7fH19e3x9fX19fn+AgYGAgH+AgICDg4B9f35+fn15eXt6enp5c3J1b3dxd3lzd3uFgoKDgoOEgoOEg4CAgoOGg4ODgoKEgYSDgYKAgIKBhIGCgoGCgX6BgICCgYKBgYOBgIGAgICBgoGEgH6Bg4F/f4CDgoCBfoCCg4KAgYGBg4KDgoGBg4KChIGAgYOBgYKEg4KEhIODhIODgYGBgYCCf4B/fYB8enx/e3t3fHl5eXt6fX59fHx8fH1+foCBgYCAgIGBgYSEgH2Af39/f357e3t6e3p0cHhyeXR2eHR3e4SCg4KDg4SChIODgYKChYaEgoODg4SChIOBg4CBg4KCgoKCgIKAf4GAgIKBgoGCgoKBgIGBgYOCgoOAfoGDgX9/gYSEgYN/goKBg4KCgoGEg4OEgYKEgoOCgoGCgoOBg4SDhISEhISFg4SCgYOCgoOBgYGAgH58fIB8fHh8eXp5enx9f3x7fHx9fX18fICAgICAgYGBgYKBfoGAgICAf3t7e3p6enVweHd5dnV8dXZ8gICDgoODg4OEhISAgoOGhYWDg4KDhIGEhYKCgYKDg4GCgoKAgYB+gYCBgYKDgoKCgoGAgYKCg4KCg4B/gYOBgICChIODgoGCgoGDgoKDg4ODg4SAgoSDhIOBgX+Bg4KDhYKEhISEhISDhISChIOEhIKBgoGBgHt+gX59eXx6enp9fHyBfXp8fH19fHp7fn5+gIB/gYGAgICAgIGBgIB/fX18fX18dnJ2eHh2dH92dX2Hh4OChIWDg4SFhICChYWEhIOCg4SEgISFg4KCgoODgYOCgoCCgH2AgIGCg4KCgoKEgoGCgoOEgoKBgICBgoGAgYOFhIOCg4CCgoOCg4ODg4OEg4CCg4KEg4KCfoOBgoSEgoODhISEhIOEhIOEg4WEg4ODgoKAe4CBf3x8fXp6e32AfX9/fHx6fH59fH19fn5/f39/gICAgH9+foCBgICAfnx9fX5/fn18e3h2f3Z3f4SHg4KDhYODhIaEgYKFhoWEhIODhISBhIWFgoKDg4SCg4KDgoKBfoCAgoKDgoODg4SDgYKCg4OCg4GBgYGDgn+ChISDg4KEf4KEg4ODgoSDg4SCgIOEg4SDg4KCg4KChIOCg4OEhISEhIWEg4OEhYSFhIOBgoB9gYKAfXx8e3x8gH19foB+fn1/fnx8fH19fn5/fn+BgYGBgH99fX6BgYB+fn19fX59fX5+f3+AfH2AgYKCg4OGg4SDhoSBgoiHhYSDg4SEhYGFhYWDg4SDhIODgoOCg4F+gYGDg4SCg4OEhIOCg4KEg4ODgoKDgYOCf4KEg4ODgoOAgoWDg4ODhIODhIOAg4SEhYOCgoODgoGEg4GDg4SDg4SEhYSEhIWFhYWEg4ODf32BhIB9fXx8fHx/gX5+fn9/fX99e3x9fX19fX5+f4CBgIGBgH59fH6Cf39+fn5+fX1/f39/gICAf4CEhIODhIWDhIOFf36CiouFhISDgoOFgYaGhoOEhISEhIODg4OEgn+BgYODhYSFhIWEg4KEhISFhIODgoSDhYKBhISFhYaEgoCDh4SDg4OFhIWFhIGEg4OHgoOCg4GCgYSDgoODhYODhIWEhYWHh4aHhYSEhYSBf4GDf35+fH5+fX+BgH9+fHx/f358enx9fX19fX5+fn9/gIKBf319fIB/gH5+fn5+f3+AgYGBgYKAgYWFhIOEhIKEg4aAgoWFiomEhISEhIWCh4aGhISEhIWEhISEg4SDgYKDg4OEhIaEhYSDg4SEg3yDhHuBhHd5g4F9hH5+cnWDgoF2foOEgH2BdYF5g39/f36EhIKDg4KBg4SDg4SFg4SFhoSFhn2EeXx+f4N7hYOBhIOAf319fn5+gYOBfXt/fX6Afn18fHx9fX19fH19f4B/gYJ/fX18f4GBgICAgH+BgYGCgYKDg4KChoSEhIWEgYOEhYOEhYSKiIWFhYOFhYSGhoaDhIWFhYWEhYWEhIWCgoOEhYWFhoSFhIOEhYWCaICFanx7cXF8gXOGc3R0fYKDdXNxg4ZzcHVyc3SDdnt9dYF/goOBgnZ5hYCDgIR/hYSChYWCaHpyc3N8gHKBg3+Dg32BfX5+fX6Cg4J8f4F9f4B9fXx8fHx9fHx8fn1+gH+BgX99fX2AgYKBgYGBgIGBgYKBgoKCgoSHhIWEhYSBgoSGhoOFg4aIhoaFg4aGhoeGh4OFhYaFg4KFhoSFhYODg4SEhoaGhIaEg4SFhn1xe4FweXZ+g3+CbnlwdXN8dnl5hnOEg3B2eHF2dHR1cnN0dml/gG5yb3R2bnVsd217c26Ah3ltfXJzdnN2bW53bHB5bHV9f399foGAgX2Af32Af4B/fX18fH19fH1+f32Af4CAfnx/foCBgoCBgICAgYCAgIKDgoKEhYiGhoCChYODhIeGg4WFhYaHh4SDhoeIiYaHhIWGiIeEg4WGhYWEhIOFhIKFhoaFhoWEhoWHdnB0e3BydX+HhYNtdW92b3x1coR5eYd4cXR3bndod3pucHWCcoN+b3p5eW1vbnpvb213fXiGcHF6cHJ0ZoF1fm57eXNveX+Af319gYB/e399fIB+gIB+foCAgYB+fn9/foF/gH9+fYB9f4CBgIB+fn+BgH9+goOCgoSFh4eEfoeEg4OFh4aEhoWFhoaIhISGh4iIhoeEhoaLioWEhoeHhYOFhYWEgoWFhYWGhYWGhYZxdXByc29zenl+g3SIdHV+iHZugnKEhnluanJ/cW1zd3x/dXR8hH54cXV3bnl1enF2eHV6eYRyam95eHBreXN6b3p3dnZwgYB/fn5/f356fn18f31/f359gIGDg4CCg4GBhIKBgIGBgH1/f4F+f35+f4GAfn6BgoCAgYSHhoODhoSEhIaHhoWFhYWHhoiFhYaFh4eFhoSGhomIhYSJi4iGhIaFhYWDhYWEhoaGhoaFg3iLeXKIentwcIWFeIV4eWtzfnl7a3KDh4N6fG17enl0fYB2bm+AgG90fHV3cXl9fW1+dW+DhYZ6gHJye3x1cG96bHN8bneCgIF+fn99fXp9e3x9fX9/fn1/f4KCf4GDgYGDgYB/gICAfn9+f31/fn1/gH58fYGAfn6Ag4iFhoOFhYWFhoeFhYWFhYeHiIaEhoWHhoaFhIWFhIWFhomKh4WEhoWGhoWGhoSGhoaGhoWGh4eHhoaEhoWGh4iHhYeGhoOHhoWFg4SFhoWGhIaEg4SEhoSDgYODhISFhIWEhYSGg4aHhYaEhIaHhoSEhYaEhX13hYOEhIKBgX1/fnt8e357fHx9f359fH59gIB9f4F/f4GAfn5+gH5+f35+fX99fX5/fHt8f358fH+BiYaFhIaGhoWGhoWFhYWGhoeIhoSGhYaGhYWDhIWGhYSGhoaGhYSGhIWGhoaGhIeGh4eGhYeIiIiIhoSHhYaGiIaFiIeIhYeGhoiFhYaHhYaGhYOChYWGhYWDhYSEhIWEhYWEhYWDhoaGhoWEhoeGhISFhoOFhIKEg4OFg4OCfYB/e3t8fnt8fH1/fnx8fn2Af31/gH5+gH99fXyAfX5+fn5+f3x8fX57fHx/fHt7fn+Ih4SEiIaGhoeGhYWEhoaGhoiHhIWGh4aFhIODhIaFhIeFhoaFhYaEhYaGh4eFh4aJiIaGiIeIiYiFhYiFhoeGh4aHhoeFh4eGh4WFhoeFh4aGgoOFhoaEhIOEhIOEhoSFhYWFhYOGhoWGhYWGhoWEhIWFg4SHhYOCgoWDhIF+gIB8e31+e3x7fn59fHx+fX5+fX9+fX1+fnx9fH98fn58fYGAfHx8fXx8fH56e3t8foiHgoWIh4eGh4aGhISGhoeGiIaEhYSHhoSFh4OEhYSFh4SFhoaFhoSGhoeHhoaHh4mIhoaIh4iKiIWHiIWHh4WHhoeGh4WIiIeHhYaGh4WGhoSBhISFhoWFhISEg4SFhIaGhoWGhIaFhoaFhYaGhYSDhISDg4eDhIGChISDgYCAgHt7fn18fHx+fXx8fH19fH18fn18fX18fHx8fXx+fXt8gX99fH18fnx8fHp6fHx9iIeChoiHhoeGhoaDhYaFhoaGhYOFhIaFhIiJg4GEg4SGhIaGhoaGhIeHiIiHh4eIioiGh4iHiImIhYiHhYeGhoeHh4WHhoiIh4eFh4eHhYaHhIKEg4SGhYeFhISEhISFhoaGhoWFh4WFh4WGhYeFhIOEg4OEh4GDgIKDg4KCgn+Ae31+fXt8fH59fH19fH57fHx7fHx9fXt7e318e358e3x/fX18fX1/fXx6ent7fHyIh4KGhoaGh4aGhYOFhoWFhYWEg4WChoSDiId/enqChYaEhoaFh4aEh4eIiIiHhoiKh4aHh4eIiYeFiIeGiIeGhoeHhYeGiIiHhoWHhoiGhoeDg4SEg4aGh4WFhISEhYaGhoaGhYaHhoaIhoaEhoWDg4ODgoOGgYN+goKDgIOCf398f35+fHx9f318fX18fXt7e3p7fHx8e3t7fnt7fXt6e358fHx8fX5/fXt6fHp8fImHg4aFhoWGhoWEhIWFhYWFhIOBhYGGhIKEhHyAhn+ChYWGhYWGhYSHh4iIiIaFiIqHhYeGh4eIh4WIhYaHiIaGh4eGh4eIiIeFhoeGh4WFh4OEhoWEhoaHhoWEg4WFhoaGhoaFhoaHhoeHhYOGhYOBg4KAg4WCg36BgYF/g4F/fn5/fX98fH1/fXt9fXx+enl6eXt8fXt7e3t+fHx8fHp7fXx8fHx+fYF8e3t7e3x7iYeEhoSGhIaGhYSFhoWEhIOEgoCDgYWDgYJ/eoSMe4CEhYeGhoaFhIeIh4aHhYWHioeDh4WGhoiGhYeEhoeIhoaIh4eHhoeIhoSGhoaHhYWHg4SFhIaGhoeFhISDhYWGhoeGhoWGhoaFhoaEg4SFgoGCgYCDg4OCfYGBgH6DgX5/f4B8f3x9fX59e359fH15eXp5e319enp7e318fXx8ent9fHx9fH5+gHx7e3x+fXyIh4WGhYeEhoSFhYWFhYODgYOBgIKBhYJ/gH9/fXx7gYSFhoaEhYSDh4eGhoaFhIaJhoKGhIaGhoWFh4WHiImGhYiHiYeGh4eFhIaFhYeFhIeDhIWEiIaGh4WFhIKFhYaFhoaHhIaGhoaFhoODg4WAgIGAgIOBg4B8gYB+foKAfYB/gXx/fH1+fX57fn18fHl6enl6fX15enp7fHt8e3t6e319fH18f35+fHt7fX59fIiGhYaGhoSFhYSFhYSDgoKAgoGAgICDgX5+foB5en2Ag4OFh4WEg4OHhoOEhYSChYiFgoSDg4WFhYWHh4aIiIaFiIeJh4aFhoWDhoSFh4OEhoSEhYSHhoWGhYaEgoWFhoaGhoaEhYaGhYWGgoKDhH9+gICAgYCDgHuBf31+gn5+gH6Afn99fX59f3t/fXt6eXp6eXp8fXl6ent7enx6e3t7fH19fXyAfn18fH1/fnx7h4WFhoaGhoSFhIWDhYKBgICAgYB+f4KCfX1/f3t/f4KDg4WGhYSDg4aDgYOEgoCFh4WCg4GBg4SEhIaGh4iHhYWIhomHhYSEhIKFg4SGgoOFhISGhIeGhYWFhoOEhYSFhoWGhIOEhYWDhYWBgIODf35/gH9/gIN/fIB9fX+CfYCBfn6Bfn5+fX1/e398e3p5enp5enp8eXp6e3t7fHp7e3t7fX59fYB9fXx8fYB/fXyGg4aGhoaGg4SDhoKFgYGAf3+AgH5/gIJ8fn9/foCAgoKChIWDgoGChIGAg4KBgISFhYKBf4CCg4OEhYWHhoWEhoeFh4WGgoOCgoOCgoWBg4WEhYaEhoaHhoaFgoSEg4SGhYWDhIODhIOFhIB/goJ/fX5/fn5/hH57f3x8gIF9gYB9foN9fn59fX57fnt7enl7enl6ent5enp6e3t8ent8e3t+fn1/gXx9fHx9f4B+gIaEhYWEh4SDg4KGgoOAgYB+fn+AfX9/gnx9f39+fn+BgYKEg4KBgYKCf4CBgoCAgoWEgoB/gIGCgYOFhYeFhISGhoOFg4WBgoGBgoGCg4GChISEhYWGh4eGhYSDg4ODhIaFhIGDgoOChIODgH+AgX59fX5+fH6Dfnx+fHyBgH6Cf35/gnx/fn19fHx8e3t6enp6eXt6enp5eXp6e3x5e317fH5/f4GAfX59fX1/gICAhoSEhYSFgoSCgoSCgoCBgH59fn9+fn6AfX2Af35+foGBgoODgoSHgYF+gICBf3+ChIOBf35/gIJ/goWEhYOCg4WFgoSBg4CBgIGBgYKBgIGEg4OGhYWHh4WEhIWCgoKDhYSCgYGBgYCFg4F/foB/fnx9fn18foN9e358fYF/gIN9fYCBf35/fXx8fH17e3p6enl5e3l6enl6ent7e3p7fXx8f3+BgoB+gH+AgH+AgYDKysrKysrKysrKysrLy8vLy8vLy8vLy8zMzMzNzc3Nzc3Nzc3NzczMzMvLy8vLy8vLy8vLy8vLzMvLy8vLy8vLy8vLy8vMzMzMzM3Nzc7Oz8/Pz9DQ0NHR0dLS0tLS0tLT09PT0tLS0tLS0tPT09TU1NTU09PT09PT09PT09PT09PT09PT09PT09PT09PT09PS0tLS0tLS0tLS0tPT09PT1NTV1dXV1dXV1dXV1dXV1dXV1NTU1NTT09PT09PT09PT09TU09PU1NTU1NTU1NTU09PT09PS0tLS0tPT09TU1NTU1NPT09LS0tLS0tLR0dHR0dPHhnNlYFtLWWdVTUZIQD03Nzg5Nzw8PDo8Oz42Oj04PDs6OTg3ODs7Oj87PTs8PD47P0E/QkJBQ0RFREE+PTw7QENDQUBDQ0FBR0hHSUtSwtXS09PT09TU1NTU1NTU1NTU1NXV1dXV1dXV1dXVysrKysrKysrKysrKy8vLy8vLy8vLy8vMzMzMzMzNzc3Nzc3Nzc3MzMzMy8vLy8vLy8vLy8vLzMzMy8vLy8vLy8vLy8vLzMzMzc3Nzc3Oz8/P0NDQ0NHR0tLS0tLS09PT09PT09PT09PS09PT09TU1NTU1NTU09PT09PT09PT09PT09PT1NTU1NTU1NTT09PT09LS0tLS0tLT09PT09PU1NTU1dXV1dXV1dXV1dXV1dXV1dXV1NTU1NPT09PT09PT09PU1NPT09TU1NTU1NTU1NPT09PS0tLS0tPT09PU1NTU1NTU09PT09PS0tLS0tLR0dHSzIxyZ2BcTVllUktHSz87Mzc4Ozg5Pj05PDpBOjs9Nzs8PDo6Nzg6Oz0/Oz88PTw/Pj9BPUFBPkNDREJAQT46Oz9DREFDRERCQklHSEhJTr7V0tPT09TU1NTU1NTU1NTU1NXV1dXV1dXV1dXV1crKy8vKysrKysrKy8vLy8vLy8vLy8vLy8zMzMzMzM3Nzc3Nzc3NzMzMzMzMy8vLy8vMzMzMzMzMzMzLy8zMzMzLy8vLzMzMzc3Nzc3Ozs/P0NDQ0NDR0dLS0tLS09PT09PT09PU09PT09PT09TU1NXV1dTU1NTT09PU1NPT09PT09PT1NTU1NTU1NTU1NPT09PS0tLS0tLS0tPT09PT1NTV1dXV1dXV1dXV1dXV1tbV1dXV1dTU1NTT09PT09PT09PU1NTU09TU1NTU1NTU1NTT09PT0tLS0tLT09PU1NTU1NTU1NTU09PT09PT0tLS0tHR0s+Sd2hfXk9XZ01LRks9ODc2NTk5OTw+OT88RDo7PDc5PD07OTc5Ojw9QDs+PT47PD48PT5BQD5EQ0NDP0E9Ojs9QkNFQ0NEQT9FSEpJSky61dPT09TU1NTU1NTU1NTV1dXV1dXV1dXV1dXV1dXLy8vLy8vLy8rKysvLy8vLy8vLy8zLy8vMzMzMzMzNzc3Nzc3Nzc3MzMzMzMzMzMzMzMzMzMzMzczMzMzMzMzMzMzMzMzMzc3Nzc3Ozs/Pz9DQ0NDQ0dHS0tPT09PT09PT09TU1NTT1NTU1NTU1NTV1dXU1NTU1NPU1NTU09PT09TU1NTU1dTU1NTV1dTU09PT09LS0tLS0tLS09PT09TU1dXV1dbW1dXV1dXV1tbW1tXV1dXV1NTU1NTT09PT09PT1NTU1NTU1NTU1NTU1NTU09PT09LS0tLT09PU1NTU1dXV1dTU1NTT09PT09PT0tLS0dHRmn5nYWJOVWpKSElLPzw6OTM3Njc3PTs+Oj06Ojo4ODo7Ozg4Ojs7PD46PT09Ojw/PD0/QkA/Q0RDRD5APT08QENEQ0JEQkQ+REhJSUtMttfT09TU1NTU1NXV1dXV1dXV1dXV1dXV1dXV1dXVy8vLy8vLy8vLy8vLy8vLy8vLy8zMzMzMzMzMzMzNzc3Nzc3Nzc3Nzc3MzMzMzMzMzMzMzMzNzc3NzczMzMzMzMzMzMzMzc3Nzc3Ozs7Pz8/Q0NDQ0NHS0tLT09PT09PT1NTU1NTU1NTU1NTU1NTV1dXV1NTU1NPT1NTU1NTU1NTU1NTU1dXV1NXV1dXV1NTU09PT09PS0tLT09PT09PU1NXV1dbW1tXV1dbW1tbW1tbW1dXV1dXU1NTU1NTU1NTU1NTU1NTU1NTU1NXU1NTU1NTT09PT09PT09PU1NTU1dXV1dXV1dTU1NTU09PT09PS0tLR0p+DaV9kU1hsSEhIS0A9Nzg0NzY6Oj87RDw8Ojw8OTg6OTo6Ojs8Ojo7OT49Pjk9QDs/QUFCP0JCQUM9Pz8+PEBCRUNDQkBBO0ZJR01MSbLY09TU1NTU1NXV1dXV1dXV1dXW1tbW1tbV1dXW1svLy8vLy8vLy8vLy8vLy8vLy8vMzMzMzMzMzM3Nzc3Nzc3Nzc3Ozc3NzczMzMzMzMzMzc3Nzc3Nzc3Nzc3Nzc3Nzc3Mzc3Nzs7Ozs7Pz8/P0NDQ0NHS0tLS09PT09PT09TU1NTU1NTU1NTU1NTV1NXV1dTU1NTU1NTU1NTU1NTV1NTU1dXV1dXV1dXV1dTU1NTU1NPT09PT09PT09PU1NXV1dbW1tbW1tbW1tbW1tbW1tbV1dXV1dTU1NTU1NTU1NTU1NTV1NTU1NXV1dXU1NTU1NTT09PT09PT1NTU1dXV1dXV1dXU1NTU1NTT09PT09LS0tSjiGxfZlJWakdIR0lBPjM2Njo7PDhDPEJBPjxBPDg5Ojw6Ojw8PDk8PTo7PD09PD89QD9AQT9AQUBCPD4+PzxCQ0NDRkBBQT1ISklOTUeu2NPU1NTV1dXV1dXV1dXV1dbW1tbW1tbW1tbW1tbMzMvLy8vLy8vLy8vLy8vLy8vMzMzNzc3Nzc3Nzc3Nzc3Nzc3Nzs7Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Ozs3Nzc3Nzc3Nzc3Nzs7Ozs7Oz8/P0NDQ0NHR0dLS0tPT09PT09TU1NTU1NTU1NTU1NTU1NTV1dXV1dXU1NXV1NTU1NTV1dXV1dXV1dTU1dXV1dXU1NTU1NTT0tPT09TU1NTU1NTV1dbW1tbW1tbW1tbW1tbX19bW1tXV1dXV1dXV1dXV1dTU1NTU1dXV1dXV1dXU1NTU1NTU09PT09PT1NTU1NXV1dXV1dXV1dXV1NTU1NPT09PT0tLWroprY2VSWGhMSkdJQjg0OTQ6Ozo5QDk+Q0U/PDw5OTk9Oj07PDw6PTw7OTw9Ozs/PUA9PT5AQD9CQT5APD05QERDQkFBQj48SEpLTU5IqNnU1NXV1dXV1dXV1dXW1tbW1tbW1tbW1tbW1tbWzMzR09PT09PT09PT09PT087Ky8vLzMzMzMzMzMzMzM3Nzc3Nzc7Ozs3Nzc3Nzc/Pz8/Pz8/Pz8/Pz9DQ0dHR0dHR0dHR0dHS0tHV2djY2NnZ2dra2tvb29vZ2dnZ2dna2tra2tra2tjW19fX19fX19jX19fX19XV1dTU1NTV1dXV1dXV1djY19fX19jX19fX19fW09LS09PU1NPT09PU1NXV1dXV1dXV1dXV1dXW1tbX1tbW1tbV1dXV1dXV1dXV1dTU1dXV1dXV1dXU1NTU1NTU1NTU09PU1NTU1NXV1dXW1dXV1dXV1dTU1NTT09PT09PS1bqKa2hoUlhlSUlMT0A5OTo0O0E8Nz05QUM+QD89ODo6Ozk9Oz4/Ojs8PDo7PDo7Pj1APT8/P0FAQUE/QTw8Oz5BRENBREA9PElJSk1ORqPa09TV1dXV1dXV1dXW1tbW1tbW1tbW1tbW1tbW1szNhG1wcHBwcHBwcHBwcGqn493d3t7e3t7e3t7e3t3S0NDQ0NDQ0NDQ0NDQ0ci5ubm5ubm5ubm5ubq6t6WkpKSkpKSkpKSkpKSnhmBjY2NjY2NjY2NkZGRlhIuKioqKioqKioqKioemuri4uLi4uLi4uLi4uLrR09PT09PT09PT1NTU1ce3ubm4uLi4uLi4uLi3vdPS0tPT0tLS0tLS09PT2+Lh4uLi4uLi4uLj4+Pi2NfX1tbW1tbW1tbV1dXV1dXV1dXV1dbW1dXV1dXV1dTU1NTU1NTU1NTV1dXV1dXW1dXV1dXV1dXV1NTU1NTT09PT09XDkXFrak5TYkxMVk48Ojo3Nz5DPjg+Oj8/QT0+QDc7Ojs7PTs+Pjo7PD48Oz07PT8+QDw/Pz1AQEBBPj88PjxAQUVCQkZAQD9HSEpLT0ae2tXV1dXV1dXW1tbW1tbW1tbW1tbW19fX19fX19fMzk4mKysrKysrKysrKysiivTr6+rq6urq6urq6uvp1dLS0tLS0tLS0tLS0tTEqaqqqqqqqqqqqqqqq6aGhIWFhYWFhYWFhYWFik4MEhISEhISEhISEhIRE0pUU1NTU1NTU1NTU1NPg6ejo6Ojo6Ojo6Ojo6Knz9PS0tLS0tLS0tLS0tS9oKOjo6Ojo6Ojo6OjoavS0tLT0tLS0tLS0tLS0N/r6+vr6+vr6+vr6+vr6dnX19fX1tbW1tbW1tbW1dXV1dXV1dbW1tbV1dXV1dXV1dXV1dTU1NTV1dXV1dXW1tXV1dXV1dXV1dXU1NTU1NTU1NPUy5h2bGlKTl9NUlVNPjw8Nzs/Qz42Ojc+Pzs9Qj85PDk9Ozw6PD07PTs9Ozs9PD0+PT07QT08QUBBQT08Pzw7QEJDQURFPUFAQ0ZLS09GmNzV1dXV1dbW1tbW1tbW1tbW1tfX19fX19fX19fXzc5SKzExMTExMTExMTExJ43z6enp6enp6enq6unq6dXS0tLS0tLS0tLS0tLUxaqrq6urq6urq6urq6yoiIeHh4eHh4eHh4eHh41SEhgYGBgYGBgYGBgYFxpOWVdXV1dXV1dXV1dXU4WopKSkpKSkpKSkpKSjqM/T0tLS0tLS0tLS0tLVvqKlpaSkpKSkpKSkpKOt0tLS0tLS0tLS0tLT0tDf6+rq6urq6urq6urq6unZ19jX19fX19fX1tbW1tbW1tbW1tbW1tbW1tbV1dXV1dXV1dXV1dXV1dXV1dXW1tbW1tXV1dXV1dXV1dXU1NTU1NTU1NGcenFpSlRdT1JVTkQ+Pzs/QEA4Ojs4PDs8PD86Ozs4Ozk5Ozw7Ojw5Ozs8Ozo9PT0+PUE/Pj8/Pj08PT88PEFBQ0FERTw+QEVGSktNRpPc1dXV1tbW1tbW1tbW1tbW1tfX19fX19fX19fX183PXDk9PT09PT09PT09PTWT8Ofn5+fn5+fn5+fn5+bV0dLS0tLS0tLS0tLS08Wtrq6urq6urq6urq6vq46NjY2NjY2NjY2NjY2SXSInJycnJycoKCgoKCcpWmNiYWJhYmJiYmJiYl6MrKmpqampqampqampqazP09LS0tLS0tLT09PT1cCmqKipqampqampqamosNLS0tLS0tLS0tLS09PR3+rp6enp6enp6enp6enn2djY2NjY19fX19fX19fX19fX19bW1tfX19fW1tbW1tbV1dXV1dXV1dXV1dXV1tbW1tbW1tbW1tbV1dXV1dXU1NTU1NTWo3txZElbYE5OVU9AQT89REI+Oz06OTs6PT07PDs6OTg5OTs8Ozw8Ojo7PDo7QD08PTxAQTxBQTs7PEA/PD1CP0RDQ0U8PkJERkpMTEWN3NXV1tbW1tbW1tbW1tbX19fX19fX19fY2NjY2NjNzcXCw8PDw8PDw8PDw8PCydDPz8/Pz8/Pz9DQ0NDQz87Ozs7Ozs7Ozs7Oz87NzMzMzMzMzMzMzMzMzMvJycrKysrKysrKysrKysfCw8PExMTExcXFxsbGxsvMy8zLzMzNzMzMzMzLz9HR0tLS0tLS0tLS0tLS1NXV1dXV1dXV1NPT09TT0tLS0tLS0tLS0tLS0tPU1dbW1tbW1tbW1tbW1tjY2NnZ2dnZ2dnZ2dnZ2djY2NjY2NjY2NjY2NfX19fX19fX1tfX19fX19bW1tbW1tbW1tXV1dXV1dXV1dbV1dbW1tbW1tbW1tXV1dXV1dTU1NTU169/cF5GXmJQUVdOR0ZDQ0lBPz07PDo8OEBCPD04Ojo4OTg7Pzs8PDs7PDw8PD87PD46Pj44PkI8Pj1BPjw+QkBERUNAPD5APkNJSUtEh9zV1tbW1tbW1tbW1tbX19fX19fX19jY2NjY2NjYzs3P0NDPz8/Pz8/P0NTQ0M7MzczP09LSzs3P0s7Ozs7Ozs7O09TQz8/T08/Pz9PSz8/Pz8/Pz8/Pz8/Pz8/P0NDQ0NDR0dHR0dHS09PU1NTU1dXV1tbW1tfW1tbX1tfX19fX19fX19bW1tbW1tbW1tbW1tbW1tXV1dXV1dXV1dTU1NTU1NbW1tbW1tbW1tbW19fW1tbW1tbX19fX19fX19fX19jY2NjY2NjY2NnZ2dnZ2dnZ2djY2NjY2NjY2NjY2NjX19fX19jY19fX1tbW1tbW1tbW1tbW1tbW1dbW1dbW1tbW1tbW1tbW1tXV1dXV1NTV1di4gm9XSl9jUlFaS0hBQTxCPT07Oj4+PD4/PT0/Nzk6OTk3OD48PD47Ozw7PDs/PT0+OTs7OT0+P0A+QD07OkI/QkNCPz0+QD5CRUdKQoDc1tbW1tbW1tbW19fX19fX19fX2NjY2NjY2NjY2M7Ozs7Ozs7Nzc3Nzsqfys3Nzc3QuYOEi8fTwJrLz87Ozs7O0KaSxdLQoZbL08eSq9HOzs7Ozs7Ozs7Ozs7Oz8/Pz8/P0NDQ0NDQ0NDR0dHR0tLT09PU1NTU1NTV1dXV1dXV1dXV1dXV1dXV1dXW1tbV1dXV1dbW1tbV1dXV1dXV1NTU1NXV1dXV1dXV1dXW1tbW1tbW1tbX19fX19fX19fY2NjY2NjY2NjY2NnZ2dnZ2dnZ2dnZ2dnY2NjY2NjY2NjY2NjY2NjY2NfX19fX1tbW1tbW1tbW1tbW1tXV1tbW1tbW1tbW1tbW1tbW1dXV1dXV1dXYwIBuVU9gY1dZW0xMQ0A9PTs9Ojw+Qj5CQ0A9Ojg5ODo6Ojc7Pz4/PDw7PDo5Pzw8PTg5PD9BPj09PUFAPTtBQkBCQz47QD9BQUlHSkF629bW1tbW1tbX19fX19fX19jY2NjY2NnZ2djY2dnOzs7Ozs7Ozs7OzdKpj63Rzs7Ozpu3tqSiwJOerNPOzs7O0qqdrJTOqKCrn8+ZrJqy0s7Ozs7Ozs7Ozs7Pz8/Pz8/Pz9DQ0NHR0dHR0dHS0tLT09TU1NTU1dXV1dXV1dXV1dXV1dXV1dXV1dXW1tbW1tXV1dbW1tbW1tXV1dXV1dXU1dXV1dXV1dXW1tbW1tbW1tbW1tfX19fX19jX19fY2NjY2NjY2djY2dnZ2dnZ2dnZ2dnZ2dnZ2djY2NjY2NjY2dnY2NjZ2NjY19fX19fX19bW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tXV1dXV1dXV18h/b1pTYWVeXVxPSkQ9QD8+Ozc6Pjk/RD9BOTg3ODk7Ozw4OT89PTw9PD47OkE7OTs5OzxDQDw7PT5AQT49QkQ/QkM9PT8+Pz5ISUg/ddrW1tbX19fX19fX19fX2NjY2NjZ2dnZ2dnZ2dnZzs7Ozs7Ozs7Ozs/Inrym0tDQzsqgl36Cw6abr6fUz8/P0MmXmYWmpJ+WkKG0lYadnM7Pzs7Ozs7Ozs7Oz8/Pz8/Pz8/Q0NDR0dHR0dLS0tPT09TU1dXV1dXV1dXV1dXV1dbV1dXV1dXV1tbW1tbW1tbV1dXV1dXW1tbV1dXV1dXV1dXV1dXW1tbW1tbW1tbW1tbW1tfX19fX19jY2NjY2NjY2NjY2NjZ2dnZ2dna2dnZ2dnZ2dnZ2dnZ2djY2NjY2NnZ2dnZ2dnY2NjY2NfX19fX19fX19bW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1dbV1dXV1dfNiHNdWGloXl9gT0lGOkFAPj88PTo2P0JAQjo2NDc6Ozo8Ojk+PD49PTs/PTxBPjw8Ojw8PTw6PEA9QEI+PkFCPUNDPT0+Oz9BRUtIQHDZ1tbX19fX19fX19fY2NjY2NjZ2dnZ2dnZ2dnZ2c/Pz8/Pz87Ozs7SrKWnqdXAvNLHnY+ey9PJipmq1M/Pz8/RpLC9moqdoKeZtL/Jl5nG0M/Pz8/Pz8/Pz8/Pz8/Pz8/Q0NDQ0dHS0tLS09PT1NTU1dXV1dXV1dbW1tbW1dbW1tbW1tbV1tbW1tbW1tbW1dXV1dXV1dXW1dXV1dXV1dXV1dXW1tbW1tbW1tfX19fX19fX19fX19jY2NjY2NjY2NjY2NnZ2dnZ2dnZ2tnZ2dnZ2dnZ2dnZ2dnZ2dnY2dnZ2dnZ2dnZ2dnY2NjY19fX19fX19fX19bW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbV1dXW0JB1W1tqaWFeXVNOSTxDQEE+QD46OEZBP0M6NzQ5Ojo5Ozs4Oz0/Pj49QT08P0A9Pjw8PDw8Oj1AQD8/PT5CQD9AQkA8QD0+QUVLRz9r19fX19fX19fX2NjY2NjY2NjZ2dnZ2dnZ2dnZ2tnPz8/Pz8/Pz8/QzJ2Nl6zQmpfKxZ6ynpbN1q2ZqtTPz8/Pz9DVuZmdpZ6MoMTSkpmgztDQ0M/Pz8/Pz8/Pz8/Pz8/P0NDQ0dHS0tLT09PT1NTU1NXV1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbV1dXV1dXV1dXV1dXV1dXV1dXW1tbW1tbW19fX19fX19fX19fY19fY2NjY2NjY2NjY2NjZ2dnZ2dnZ2drZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2djY2NjY2NfX19fX19fW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1dXV1tKUcl5ea2tqZV1PTEc/RENDQDo9OzxCPD49OTY0Ojk5Ojo5Nzs/QDs8PUA8PEE+PD07PTw/PDo8Q0A+PTs9QD5CPkBBPkA9QD9GSUQ/ZtXX19fX19fY2NjY2NjY2NnZ2dna2tra2tra2traz8/Pz8/Pz8/P07GigJuvyaCjv8qcpYynrdiqmarUz8/Pz8/Q0ZqdvZvFyZTZraO/ntXQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NHR0tLT09PT1NTU1NXV1dbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1dXV1dXV1dbW1tXW1tbW1tbV1tbW1tbX19fX19fX19fX19fY2NjY2NjY2NjY2NjY2NjY2dnZ2dnZ2dna2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2djZ2djY2NjY2NfX19fX19bW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbSk3BgXnBoZmVaUUhHQkVDQEA3Ojo8Pjo8OTc2NTk6Njo8Ozc8QEA8Ojo9Ojw/Pj08OUA8PDo6OT9APj08PUBBQz9APz5BOz9ARkpCP2LS2NfX2NjY2NjY2NjY2dnZ2dnZ2tra29vb29vb28/Pz8/Pz8/P0M6fkGyclteqo9PSrqa1mJ/Vqpmq1M/Q0NDQ1aekosadk5aju82IlZ7I0tHR0NDQ0dHQ0NDQ0NDQ0NDQ0NHR0tLT09PT1NTU1dXV1dbW1tbX19bW1tbW1tbW1tbX1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tfW1tfX19jY2NfX19fX2NjY2NjY2NjY2NnZ2dnZ2dnZ2dnZ2dna2tnZ2dnZ2dnZ2dnZ2dnZ2dnZ2djY2dnZ2dnZ2dnZ2dnZ2NjY2NjY2NjX19fX1tbW1tbW1tbW1tbW1tbX19fX19fW1tbW1tbX0pNuYFxxZGdkWlVKQENGQ0FCODs/PD07PDw4NTU4OTY4Ozo5PDo+Pzw9PTk8Pz49Ojo+OTw6Ojg+Pzw9PTw+QEFDQT48PDpCRERKRkJd0NnX19jY2NjY2NjY2dnZ2dna2trb29vb29vb29vPz8/Pz8/Pz9G9n8O31pfA09HQ0srSzZeb1KqZq9XRz9DQ0sCdos2ym66znaXQ26OZtdXR0dHR0dHR0dHR0NDR0dHR0dHR0tLT09PU1NTV1dXV1tbW1tfX19fX19bW1tbW1tfX19fW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW19fX19fY2NjY2NjY2NjY2NjY2djZ2dnZ2dnZ2dnZ2dnZ2drZ2tnZ2dnZ2dnZ2dnZ2dnZ2djY2NjY2NjZ2dnZ2dnZ2dnZ2dnY2NjY2NjY2NfX19fX19fX19fW1tfX1tbX19fX19fX19fX19bW19GRbF1cb2doYl1PRkBISUdFQDw8Pj48PT48NzU2Ojk2OTs6Ojs4QD86PDw5PD49Ozs6Pzk/Ojs5PT49Pjw7PTxAQ0I/Pz47Q0ZGR0hEWc3a2NjY2NjZ2dnZ2dnZ2dna2trb29vb29vb29vb0NDQz8/Pz8/Pz5V+e6WS1KKa08ySl6ObodirmavV0pem09SkoI+7rJ+aoZyckaeYnrvV0dHR0dHR0dHR0dHR0dHR0tLS0tLS09PU1NTV1dXV1tbW19fX19fX19fX19fX19fX19fX1tbW1tbW1tbW1tbX19bW1tbW1tbW1tbW1tbW1tbW1tbW1tfX19fY2NjY2NjY2NjY2NjY2dnZ2dnZ2dnZ2dnZ2dnZ2tra2tra2tnZ2dnZ2dnZ2dnZ2djY2NjY2NjZ2dnZ2tnZ2dnZ2dnZ2djY2NjY2NjY2NjX19fX19fX19fX19fX19fX19fX19fX19fX1tfPjGRWXnBrXGBgTkVITUlJT0M+OkI9PUBCOzU1Nzw6Nzo7Ojo7OT09OTo6OT0+Pz07OT47PDo8Ozk+PD47PD0+QENCPz5BPEFDR0ZGRVXJ29jY2NnZ2dnZ2dnZ2dra2tvb29vb29zc3Nzc3NDQ0NDQ0M/Pz9DR1aeZrcmjqL7KnbGdo7XZqZup2LirocjGpr2Vk5ihqZ+inqiiqZ3Q09LS0tLS0tLS0tLR0dHS0tLT0tPT09PU1NTV1dbW1tbX19fX19fX19fX19fX19fX19fX19bW1tbW1tfX19fX19fW1tbW1tbW1tbX19fW1tbW1tbW1tbX19fX2NjY2NjY2NnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dra2tra2tra2trZ2dnZ2dnZ2dnZ2djY2NjY2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnY2dnY2NjY2NjX19fX19fX19fX19fX19fY2NfX19fX19fYzYZdV2JvZE9dVEtIRlNRS0xBPj1EPD9DRj01NTc7OTY6Ozo8PTo7Pzo6OTg6PT0/Pjs/Oz49Ojs5Pjs9PD0+QURCQD8+PzxAQUVHRURSxdvY2dnZ2dnZ2dnZ2tra2tvb29vb3Nzc3Nzc3NzQ0NDQ0NDQ0NDQ0NO5gL3Tm5bP1LWLkZ/T1LyBu9TOlKDUyo6Tl5Cqs42QpdSako6+1tLS0tLS0tLS0tLS0tLS0tLT09PT09PU1NXV1dbW1tfX19fX19fY2NjY19fX19fX19fX19fX19fW1tbX19fX19fW1tbW1tbW1tbW19fX1tbW1tbW1tbX19fX19jY2NjY2NnZ2dnZ2dnZ2dnZ2tnZ2tra2tra2tra29ra2tra2tnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2NjY2NjX19fX19fX19fY2NjY2NjY2NjY2NfX2ct+WlVqaltMX01KTEpVTEZCPD0/R0ZHS0g9NjU3Ojk3OTo7Ojw9OT45OTo4Oz0+PkE+PTk8PDo9Pj46PTk5Oj9FQUA+PT8/QkBHRURFUMHc2dnZ2dnZ2dna2trb29vb29vb3Nzc3Nzc3dzc0NDQ0NDQ0NDQ0NDQ0cHR0crI0tDUxLjS0tHSwtLQ08fM0tTCr7Cz0dbAvdbU07nI1dLS0tLS09PT09PT09LS0tPT09PU1NTU1NXV1dbW1tfX19fX19fX2NjY2NjX19fX2NfX19fX19fX19fX19fX19fX1tbW1tbW1tbW1tfX1tbW1tbW1tbW19fX19fY2NjY2NjY2dnZ2dnZ2dnZ2dra2tra2tra2tra29va2tra2tra2dnZ2dna2tnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dna2tnZ2dnZ2dnZ2djY2NjX19fX19fY2NjY2NjY2NjY2NjY19rHd1xSZ2laTlpOTFBRV0VKPz89P0FFTExBPjc3NTs4ODk5Ojs8Pjw+ODo6OTs+P0A9Pj46NTo6Oz0/Ojs5Ojw+QkJAPz8/P0FCR0RDRE683dnZ2dnZ2dna2tvb29vb29vb3Nzc3Nzc3d3d3dDR0dDQ0NDQ0NDQ0NDS0NDR0dDQ0dPU0dHR0dPR0dHS0tHR1NbW1tLS1NXT09PW1NLS0tPT09PT09PT09PT09PT09PU1NTU1dXV1dbW1tfX19fX2NjY2NjY2NjY2NfX19jY19fX19fX19fX19fX19fX19fX1tbW1tbW1tbX19bW1tbW1tbW1tfX19fX2NjY2NjY2NnZ2dna2tra2tra2tra2tra2tra2tvb2tra2tra2trZ2tra2tra2tra2tra2tnZ2dnZ2dnZ2dnZ2trZ2tra29ra2trZ2dnZ2dnZ2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjbwXNYVWlrU0xSTlBSWVRGSTw+Qz9BQkVLPj43ODY5Njc4OTk7Oz0/QDw9ODk7Ozs/Pjw8OTU6PT47OTk7PD8/P0JCQT1BPUBBQkZCQkJLtd7Z2dra2tra2tvb29vb29vc3Nzc3Nzd3d3d3d3R0dHR0dHR0dHR0dDQ0NDQ0NDQ0dHR0dHR0dHR0dHR0dHS0tLS0tLS0tPT09PT09PT09PT09PT09TU1NPT1NTU1NTU1NXV1dXV1dXW1tbX19fX2NjY2NjY2NjY2NjY19fY2NjX19fX19fX19fX19fX19fX19fX19fW1tbX19fX1tbW1tbW1tbX19fX19jY2NjY2NnZ2dna2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tnZ2dnZ2dnZ2NjY2NjY2NnZ2dnZ2dnZ2NjY2NjY3LxvVFRsbExLUkpUUlVLRkQ6PkdEREFERjw/ODk6OTY5OTo3PD07PkA9PTc5Ojs5Pjs5OTY2Oj1AQT47PDk6Pj9DQT4/Qj0+QkNFQkFCSrDe2dra2tvb29vb29vb29vc3Nzc3Nzd3d3d3d3d0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0tLS0tLS0tLS0tLS0tLS0tPT09PT09PT09PT09PT1NTU1NTU1NTU1NTU1dXV1dXV1tbW1tbW19fX19jY2NjY2NjY2NjY2NjY2NjY2NjY19fX19fX19fX19fX19fX19fX19fX19fX19fW1tbW1tfW19fX19jY2NjY2NjZ2dnZ2dra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2trZ2dnZ2dnZ2djZ2dnZ2dnZ2dnZ2dnZ2dnY2Ny2a1NbcGtLVVdSXFFXSEQ+PEJKRT1ISj89PDc4ODo1OTg5Njs+PD1APDw1OTk8Oj87OTk0ODw9PUFBPD47Ojw+QD89PkE9PUNGR0I/Qkmq39ra29vb29vb29vb3Nzc3Nzc3N3d3d3d3d3d3dHR0dHR0dHR0dHR0dHR0dHR0dHS0M/U0M7P0tLT0tLS0tLS0tLS0tPT09TU1NTU1NPU1NTU1NTU1NTU1NTU1NTV1dXV1dXV1dbW1tbW19fX19fY2NjY2NjY2NjY2NjY2NjY2NjY2NjX19fX19fX19jY2NfX19fX19fX19fX19fX19fX19fX19fX19jY2NjY2NjY2dnZ2dra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tvb29va2tra2tra2tra2tra2tra2tnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dndsGRTYXJfT1pUV19RUkdCPUVJTEFBTEQ/Pzs5ODg5Mzg2ODY5Pj0+Pz06Njo7Pjs9PTo5Njg6PTtAQDxAPz0/P0I+PD48PEJFSElCPkNJpODa29vb29vb3Nzc3Nzc3Nzc3N3d3d3d3d3d3t7S0tLS0tLS0tLS0dHR0dHR0dPT0bm7zLqbnLrQyNPT0tLS09PT09PT09PU1NTU1NTU1NTU1NTU1dXV1dXV1dXV1dXV1dbW1tbW1tbX19fX19fY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjX19fX19fX19fX19fX19fX19fX19jY2NjY2NjY2NjZ2dra2tra2tra2tra2tra2tra2tra2tra29va2tra29va2tvb2tra2tra2tra2tra2trb29vb29va2tra2tra2tra2tra2tra2tra2tnZ2dnZ2trZ2dnZ2dnZ2dnZ2dnZ3qpfVWBuW1VZUVpeT0xHQ0ZNSUZEREo7QUE7PDg4NjQ4Njk4Nzw/QT89Ojc8Pz48Pz87OjY4OD09QEE9QD5BQD1AOjs6Pj1BRUdKQkBDR57h29vb29vc3Nzc3Nzc3Nzc3d3d3d3d3d7e3t7e0tLS0tLS0tLS0tLS0tLS0tO+wMqaoKKViJGeqpOpz9TT09PT09PT09PU1NTU1NTU1NTU1NTV1dXV1dXV1dXV1dXV1tbW1tbW1tbX19fX19fY2NjY2NnZ2dnZ2dnZ2dnZ2djY2djY2NjY2NjY2NjY2NjY2NjY2NjX19fX19fX19fX19fX19fX19fY2NjY2NjY2NjZ2dna2tra2tra2tra2tra2tra2tra29vb29vb29vb29vb29vb29vb29ra2tra2tra2tra2tvb29vb29va29vb29vb29va2tra2tra2tra2tra2tra2tnZ2dnZ2dnZ2dnZ2d6iXFVeblheXU5aUFROQ0NMSUlJRkpEPEJBPDs4NzY3OTc3OTk9P0E/PDo5QD88PkI/Ojg3NzY9Pz9APUBBPz88PTs7OD48P0VJSEE/Q0aX4dvb29zc3Nzc3Nzc3N3d3d3d3d3d3t7e3t7e3tPT09PS0tLS0tLS0tLS0tTIlZyum5m1iX2TjIKBhMTV09PT09PT09PU1NTU1dXV1dXV1dXV1dXV1dXV1dXV1tbW1tbW1tbW1tfX19fX19fX2NjY2NjY2dnZ2dnZ2dnZ2dnZ2dnZ2NjY2NjY2NjY2NjY2NjY2NjY2NfX19fX19fX19fX19fX19fX2NjY2NjY2NjY2dnZ2dnZ2dna2tra2tra2tra2tra29vb29vb29vb29vb29vb29vb29vb2tra2tra2tra2tvb29vb29vb2tvb29vb29vb2tra2tra2tra2tra2tra2tra2tra2tra2tnZ2dndmlpYYW5ZYVdPV01QRUJETElNS0ZJRT5CRDk4ODY3OTc1Njk4PT1BPjo4OT4+PD9APzw1Njc2PD4/PjtAQEA/Pj4/Pjs/PkFCRkdCQENIkeLb29zc3Nzc3d3d3d3d3d3d3d7e3t7e3t7f39/U09PT09PT09PT09LS0tLTz6h+kayPko6MhoCIiYSQo8rU09PT09PU1NTU1dXV1dXV1dXV1dXV1dbW1tbW1tbW1tbW1tbW19fX19fX19fX2NjY2NjY2dnZ2dnZ2dnZ2dnZ2dnZ2dnY2NjY2NjY19jY2NjY2NjY2NjY2NjX19fX19fX19fX19fY2NjY2NjY2NjY2NnZ2dnZ2dna2tra2tra2tra2tra29vb29vb29vb29vb29vb29vb29vb29ra2tra2tra2tvb29vb29vb29vb29vb29vb29va2tra2tra2tra2tra29vb29ra2tra2tra2tna3JJaWWNuWlpSVV5QTDxAR05IUklIRT47SEY4OTc1Nzg3NTg5ODs+Pj07ODlBPj1AP0E+NzU5Njs+QUI/P0BAQUI/Pj8+QUBEQUZIQj9FSozi3Nzc3Nzc3d3d3d3d3d3e3t7e3t7f39/f39/f1NTU09PT09PT09PT09PWtaWaiIuQhYCFi4iBg4qLf4bC1tTU1NTU1NTV1dXV1dXV1dXV1dXW1tbW1tbW1tbX19fX19fX19fX2NjY2NjY2NjY2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2djY2NjY2NjY2NjY2NjY2NjY2NjY2NjX19fX19fX19fY2NjY2NjY2NjY2dnZ2dna2dra2tra2tra2tra2tra2tvb29vb29vb29vb29vb29vb29vb29vb29ra2tra2trb29vb29vb29vb29vb29vb29vb29vb2tra2tra2tra29vb29vb29vb29vb2tra29uIWltnalxYTFpfVkg6TEhMSkpDRUVDQExINzo3Njc4ODU4Nzg5PDw7Ozk4QD89Pj8/PDY3PDQ3P0JCQUBAPz8/QT09P0A+QEBGRT09REuI4tzc3Nzd3d3d3d7e3t7e3t7e3t/f39/f39/f39TU1NTU1NPT09PT09PUxZKCg4WGfYGCfXx5foGCg36k29bU1NTU1NTV1dXV1dXV1tbV1tbW1tbW1tfX19fX19fX19fX19fX19jY2NjY2NjZ2dnZ2dnZ2dna2tnZ2dnZ2dnZ2dnY2NnY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjX19fX19fY2NjY2NjY2NjY2dnZ2dna2tra2tra2tra2tra29vb29vb29vb29vc3Nzc3Nvb29vb29vb29vb29vb2tra2tra29vb29zb29zb29vb29vb29vb29vb29vb29va2tvb29vb29vb29vb29vb29vb2tvZgFpebWhaU0ldW1hKRE1ISlNMR0ZBQD9KQjg7NjY5OTc1ODY4Ozo7Ojw5OD09O0A9Ozo2NTw3Oz1CQEFBPD49QEE9PEA/Pz5CREU+PERLg+Lc3d3d3d3d3t7e3t7e3t7f39/f39/f39/f39/V1dTU1NTU1NPT09PT2LKEkKh9g3l2hIh/e3d5gn5+i67A1dTU1NXV1dXV1tbW1tbW1tbW1tbW1tfX19fX19fY2NjY2NjY2NjY2NjY2NjZ2dnZ2dnZ2dna2trZ2dnZ2dnZ2dnY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2dnZ2dnZ2tra2tra2trb2tra2tvb29vb29vb29vc3Nzc3Nzc29vb29vb29vb29vb29va2trb29vb29zc3Nzc3Nvb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vc1nlcWmxmWFJPYFFSQUhHSkZYTEZAQENDSz87Ozc4ODc2NTc2ODo5PDw6PTs/PTs9Pjw7ODg8OT0/QkFCQzw8P0FCPj1BQkNCREVDQDtDTH3h3d3d3d3e3t7e3t7e39/f39/f39/f39/g4ODg1dXV1NXU1NTU1NPU0ruen3WKeXuIgICChYGDcnOAhYOMrNfV1NXV1dXW1tbW1tbW1tbW1tbW19fX19fX2NjY2NjY2NjY2NjZ2dnZ2dnZ2dnY2NnZ2dna2tra2trZ2dnZ2dnZ2djY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2dnZ2dna2tra2tra29vb29ra2trb3Nzc3Nzc29zc3Nzc3Nzc3Nzb29vb29vb29vb29rb29vb29vb29zc3Nzc3Nzc3Nvb29zc3Nzc3Nvb29vb29vb29vb29vc3Nzc3Nzc3Nvb29vb3dByXV9wZVdLUGNPS0JHQ0pIS0ZBPEE9SFBBOjo3Nzg3Njc4Nzw6OD09PD47QD88Pz07Ojs5Ojk8QEJAQkNAPUFAPz1AQkNDQUBAP0A7RU144N3d3d7e3t/f39/f39/f39/f3+Dg4ODg4ODg4NXV1dXV1dXV1NXU18h4i4V8goh6g4SBfoKCc2l0hYuGkJ3U1tXU1dbW1tbW1tbW1tbW19fX19fX19jY2NjY2NjY2NnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dra2tra2tra2dnZ2dnZ2dnY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2dnZ2dna2tra2tra2tra2tvb2tvb3Nzc3Nzc3Nvc3Nzc3Nzc3Nzc29zb29vb29vb29vb29vb29vb29vc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc29vb297KalxjcWVST1heSz9HTElPS0VAPkFCP0lPPjk6NzY7NzY6Ozc7Ojg6PDw+Oz09Oz48Ojs4OTo4OUFCQkFAQDtAQj06PkFCQz8+PT4/PUZOdN/e3t7e3t7f39/f39/f4ODg4ODg4ODg4ODg4OHV1dXV1dXV1dXV1s6dhpl+f5OTin+CgXx9gnNxm4mAgoOJwNnat7TQ19bW1tbX19fX19fX19fX2NjY2NjY2NjY2NjZ2dnZ2dnZ2dnZ2tnZ2dnZ2dra2tra2tra2trZ2dnZ2dnZ2dnZ2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NnZ2dna2tra2tra2tra2tra29vb3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nvb29vb29vb29vb29vb29vc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3NvfwGNaW21gVlBTU0pETEhNSEk8PkFEQ0ZORDw8OTc5OjY4Ozk3PDk4OTw9OzlAPjpBPzw3NTc7ODpAQUVBPz45PUI/Oz1CQkI6Pj07PT5GTnHe3t7e3t/f39/f39/g4ODg4ODg4ODg4OHh4eHh1tbW1tbW1tbV1tjLioCHhYOXjHh7e3lvfYF1a3ebdHZ7eInHxpiMrdjZ19fX19fX19fY2NjY2NjY2NjY2NjY2NjY2dnZ2drZ2dna2tra2tra2tra2tra2tra2tra2dnZ2dnZ2dnZ2dnZ2dnZ2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NnZ2dnZ2dnZ2dna2tra2tra2tra2tra29vb3Nzc3dzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nvb29vb29zb29vb3Nzc3Nzc3Nzd3dzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3d3d3d3d3Nzc3Nzc4LdjV1lrYlJNVVFMSktGS0ZDQD5CQT9FTT4+PTg5OTo3OTo3NT03Nzo+PDs7Qjw5Pz05NjY4PTk6QEJGQD49PEBCREA9QD9DO0A9PD4/Rk9t3N/e3t/f3+Dg4ODg4ODg4ODg4OHh4eHh4eHh4dbW1tbW1tbW1tfVrYZ6d32rn3l4entzdH+Dfm9xe3l6c3t2k4qFgImkzdnY19fX2NjY2NjY2NjY2NjY2NjY2NjY2NnZ2dna2tna2tra2tra2tra2tra2tra2tra2tnZ2dnZ2dnZ2dnZ2dnZ2dnZ2djY2NjY2NjY2NjY2NjY2NjY2NjY2dnZ2dnZ2dnZ2dra2tra2tra2tra29vb29vc3Nzc3N3d3d3c3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc29vb29vc3Nzb3Nzc3Nzc3N3d3d3d3d3d3dzc3Nzc3Nzd3d3c3Nzc3Nzc3N3d3d3d3d3d3d3d3dzc3OGtYVtebGJSTVZMTUdLS0RGQkI7QT08RUxDQT44Ojk6Nzc5NjY6NTs+QDs9Oz89PD89Ojk5Ojw5PEVDRkA/PkBDQkQ9OT0/QT1CPz1APkdPadvf3t/f3+Dg4ODg4ODh4eHh4eHh4eHh4eHi4uLW1tbW1tbW1tfQmH+Qh4N9eoN2e3Vzenl6kKqmd3JyfoeHh4CAfoKEhJHJzNnX19jY2NjY2NjY2NjY2NjY2NjY2NnZ2dnZ2tra2tra2tra2tra29va2tra2tra2tra2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2djZ2dnZ2dnZ2djY2NnZ2dnZ2dnZ2dnZ2tra2tra2tra2tra29vb29vb3Nzc3N3d3d3d3d3d3d3d3d3d3d3c3Nzc3Nzc3Nzb29vb3Nzc3Nzc3Nzc3Nzd3d3d3d3d3d3d3dzc3N3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3NzhpV9UYm1iUE9TSUhHRkpJSUJBPkJCPEVFREA+ODo4Ozc3Ojc4ODY+Pz07PDk9PDo+PTs6Njc7NjpEQUY+Pz8/PkNBPzs9PT47REM/PjxIT2fZ4N/f3+Dg4ODg4eHh4eHh4eHh4eLi4uLi4uLi1tbW1tbW19jYyH52doN+fnR2eIaCenl1d5yhu6GEgoCAfoeKinx/gYaMnKjO2NjY2NjY2NjY2djY2NjZ2djY2NjY2dnZ2dra2tra2trb29rb29rb2tra2tra2tra2tnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dna2tra2tra2tra2tra2trb29vb29zc3Nzc3N3d3d3d3d3d3d3d3d3d3d3d3dzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3e3t7e3t7e3d3d3d3c35pbT2drXFBRUElDT0pLR0xHSkJAP0FHREBBPDg8ODg1ODk3Njc3QEA/Ozw5Pj04PTw8Ojc4PTk/RENGPkE/QkBDPzw6Pj0/PkVEPz07S1Fj1+Hf4ODg4ODh4eHh4eHh4uLi4uLi4uLi4uLj49bW1tbW19XB3LRueHJze3B6eXaFiIR7eH2AgZiljH98fnuRhZaLhoGDgY6Rvd3Z2NjY2NjZ2dnZ2dnZ2dnZ2dnY2dnZ2dna2tra2trb29va2tva2tra2trb29ra2tra2tnZ2dnZ2dnZ2dnZ2dna2trZ2dnZ2dra2tra2tnZ2dnZ2dna2tra2tra2tra2tra2tra2trb29vc3Nzc3Nzc3N3d3d3d3d3d3d3d3d3d3d3d3d3d3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3e3t7e3t7e3t7e3t7e3t7e3t3d3d6NWFdobllQUUtISlNJTUhNSUtBQz9DRkJBRDo6PDg2NDg4NzY2Nj8+Pjo8OTw7Oj09PDw4Ozw8RERERT4/PkI+Qj84PT8/Q0NCQEE+O0xUY9Xh3+Dg4OHh4eHh4eLi4uLi4uLi4uLi4uPj4+PW1tbW1teslLZ6eHJvd5V7dHuLgHh1bn6Fg3t/hYhyfH2bnI6JioJ+g32Hk5rH1NjY2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dna2tra2trb29vb29vb29vb2tra2tra2tra2tra2tnZ2dnZ2dnZ2dna2tra2tra2tra2tra2tra2tra2tra2tra2trb2tra2tra2tra2trb29vc3Nzc3Nzc3Nzd3d3d3d3d3d3d3d3d3d3d3d3d3d3c3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3N3d3d3d3d3d3d3d3d3d3d3d3d3e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3d7Zf1lgaGxcUUtHR09LTk5PTURGQkg/Q0hEREA6Ozs4NzU3Nzc4NThAPkA7PDk8Ozw+Ojk7OTk7OUZERUI8QD4/PEBDOz5AP0A/Qj8+OjtKVWPV4eDg4eHh4eHi4uLi4uLi4uLi4uPj4+Pj4+Pj1tbX19vKhYR3cXJubniVhHt4hH95dnB4c3eLkY6CdnN9ioaId3d1d4ODfIiIk8Pb2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dra2trb2tvb29vb29vb29vb29rb2tra2tra2tra2tra2tnZ2dnZ2dna2tra2tra2tra2trb2tra2tra2tra2tra2trb29vb29ra2trb29vb29vb3Nzc3Nzc3Nzd3d3d3d3d3d3d3d3d3d3d3d7e3d3d3d3c3Nzc3Nzc3Nzc3Nzc3Nzc3d3d3d3d3d3d3d3d3d3d3d3d3d7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7f0nVZaGlqVk5KSE1OR01EUElGSD9FPUZMREM+Ozs8OTc3OTY2OTU4Pj4/PTs8QDs9PDo3Ozc5OThHREVCPUE9Qj8+QDw/QUE/QEJAPjs8S1Ri1OLg4eHh4eLi4uLi4uLi4+Pj4+Pj4+Pj4+Pj49fX19fEknuJf29sbnV2foSBg4qGfnVybWVtiIaKjoR7c4OHint4e4OPj4GEioqxztrZ2dnZ2dnZ2dna2tra2tra2tra2trb29vb29zc3Nzb29vb29vb29va2tra2tra2tra2tra2tra2tra2tra2tra2tra2tvb29va2tra2tra2tvb2tvb29vb29vb29vb29vb29vb29zc3Nzc3Nzc3d3d3d3d3d3d3d3d3d3d3t7e3t3d3d3d3d3d3d3d3dzc3Nzc3Nzc3d3d3d3d3d3e3t7e3t7e3t7e3t7e3t7e3t7e3t7f39/f39/f39/f39/f3t7e4clsW2pqalNOR0hOT0VIRk1JSUA7RD5ISUA9PDo6Ojg2ODo3Nzk0OD08PT07ODw8PDw4Njc4OTo6RUJFQT9APEI/Q0M+PkNEQUBAP0A8PUtRYdPj4OHh4uLi4uLi4uPj4+Pj4+Pj4+Pj4+Pj5OTX19fZqXaFfnx3bHB3eXh8jH2KhYB3anN0d3p9bot7fnl6foR/gIGDfnh8foeGlrbT2tnZ2dra2tra2tra2tra2tra2tvb29vb3Nzc3Nzc3Nvb29vb29vb29ra2tra2tra2tra2tra2tra2tra2tra29ra29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb3Nzc3Nzc3Nzc3d3d3d3d3d3d3d3d3d3d3d7e3t7d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3t7e3t7e3t7e3t7e3t7e3t7e3t7e39/f39/f39/f39/f39/f39/e3uO9amFpa2lRTkZNTEtKWE1OR0FAQE9BQz9AOzw4OTk5Njg2NjY4NDs+PD07OTY6Ojk6OTU4OTg5OkJERj8+Pj5AQEBCPzxBQD88Pj9BOT5KT17S4+Hh4eLi4uLi4+Pj4+Pj4+Pj4+Pj4+Tk5OTk19fX2sqKhIB5c29tcXN1d4CUeHaAfHWHhXd1cnWgmXp7d3Z5doR0bWxue3iAmouTu9za2tra2tra2trb29vb29vb29vb29zc3Nzc3Nzc3Nzc3Nzc29vb29vb2tra2tra2tra2tra2tra2tra2tra29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vc3Nzc3Nzc3Nzc3d3d3d3d3d3d3d3d3d3d3d3e3t7e3t3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3t7e3t7e3t7e3t7e3t7e3t7e3t/f39/f39/f39/f39/f39/f39/f397js2lpbmloUFBPTExPUk9LU0Y/RURERD48PDg7ODc5OTU2ODY2NzM6Pjs+PTc6Pjk5OTk2Ojo4NzxDRUc/Pzs/PkA9PkE9Oz0+OUFAQDhBTlFc0OTh4eLi4uLj4+Pj4+Pj4+Pj4+Pk5OTk5OTk5NjY2NjauY6AenZ1bmpveHCBfWt0cnZ3hIV5h4d5lY55eXp1d3pza298gHx2fYh8gLLe2tra2tvb29vb29vb29vc3Nzc3Nzc3Nzc3dzc3Nzc3Nzc3Nzb29vb29rb29vb29ra2tra2tra2tra29va29vb29vb29vb29zc3Nzb29vb29vb29vb29vc3Nvb3Nzc3Nzc3Nzc3Nzc3Nzc3d3d3d3d3t7e3t7e3d7e3t3d3t7e3t7e3t7d3d3d3d3d3d3d3d3d3d3d3d3d3t7e3t7e3t7e3t7f39/f39/f39/f39/f39/f39/f4ODg4ODg4N/f39/f4qpqa2hrZFNQT0ZQVFJOSFJLPkREQ0I7Ozk6Ojg2Nzg1NjY4ODg0Oz88Pzw5PDw3Ozo6Nzo6Nzo9Q0JDPUE+Pzw5PT5BQDs8PDtFQD47Q05TXNDk4eLi4uLj4+Pj4+Pj4+Pj5OTk5OTk5OTk5OTY2NjZ1p5vdntveHh2cG50d3BwdHBzb36Jc3qGhY2EenNtcoB6hn1vg5OBdnx9g4a13drb29vc29vc3Nzc3Nzc3Nzc3Nzc3Nzc3d3d3Nzc3Nzc3Nzc3Nzb29vb29vb29vb29ra2tra2tvb29vb29vb3Nzc3Nzc3Nzc3Nzc3Nzc3Nvb29vb29vc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzd3d3d3d3d3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3d3d3d3d3d7e3t7e3t7e3t7e3t7f39/f39/f39/f39/f39/f39/g4ODg4ODg4ODg4ODg4N/f3+KgbWhma2ZVVlJHUFFOS0xMRUJIRUc9OD08Ojo3Nzg2Nzc2NTY3NDg+PD09Ojg6OD46Ozc4Nzc6Oj5DRDtDQj49OD1AQUM/Pjw+RTw+PUJNUF/S4+Hi4uLj4+Pj4+Pj4+Pk5OTk5OTk5OTk5OTk2NjY3MB2doCCfnp4eHBsdXlya399bHNvdGdoaYB/aWl4c2d+iYl4cIKGe3d9foWKvd3b3Nzc3Nzc3Nzc3Nzc3Nzc3d3c3Nzc3N3d3dzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nvb29vb29vb29vb3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzd3d3d3d3d3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7f39/f39/f39/f39/f39/f4ODg4ODg4ODg4ODg4ODg4ODg4ODflGttZm5mU1NJUFlUTEhGTkZGRUJGPTs+PDs5Nzc4NTc5NjQ1NzU4PDs9Pjo6OztAOTs7ODc6OTlAQkE8QUE/Pzk/QEJFQ0FAQEM7Oz1ES01g1uTi4uLi4+Pj4+Pj4+Pk5OTk5OTk5OTk5OTk5NnZ2tmYc3uqhJaCcnR1dn14aGx8d2h4d25rcHR5gIJ3dHyBhIJ9c3CAin94gn95g8je3Nzc3Nzc3Nzc3Nzd3d3d3d3d3d3d3d3d3N3d3dzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nvb29zc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3N3d3d3d3d3d3d3d3d3d3d3d3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e39/f39/f39/f4N/f39/f3+Dg4ODg4ODg4ODg4ODg4ODg4ODg4ODh24tubWdzY1lRTVVbV0hDSUZOS0dCRD8/Qjo7OjY2NzU2NzY0ODc2Ozw7Pj86PDk8Qjg3OTo6Ojk6QUFCQUJDQEE+PT9CQ0NEQUJGOTg9REpOYtjk4uLi4+Pj4+Pj5OTk5OTk5OTk5OTk5OTk5OXZ2drcqHGCtXiRfnNsem6EgXaCfWtoan+DeHZ8dX2FhXRmcHl9d316gIqFe318foC03tzc3Nzc3N3d3d3d3d3d3d3d3d3d3d3d3dzd3d3d3dzc3N3c3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzd3Nzd3d3d3d3d3Nzc3Nzc3Nzc3Nzc3N3d3d3d3d3d3d3d3d3d3d3d3d3d3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e397e3t7e39/f39/f39/f39/g4ODg4ODg4ODg4ODg4ODg4ODg4ODg4eDg4ODg4ODg4tiFb3FrdWFWT1VVXE9ETUY+SkdKRUQ8P0I6PDk4Njg0NTY3NDc2NDk7Ozw7OD47PEE4ODo9OD04Oj09QEBAP0FCP0A+QENCQ0FBRTc2O0RMTmPa5OLi4+Pj4+Pj5OTk5OTk5OTk5OTk5OTk5OXl29ra3Z5sbnNxhY1ybXBuf391hH5rcnZ2enN4gXhzb3VwbWt2fHmFiIB/f392coODsd/c3Nzc3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3Nzd3d3c3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3N3d3d3d3d3d3d3d3d3d3d3d3d3c3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e39/f39/f39/f39/f39/f39/f39/f39/f39/f4ODg4ODg4ODg4ODg4ODg4ODg4OHh4eDg4eHh4eHh4eHh4OLXhW1xb3ZeUldTWlpRSkhDQFFAQkQ8OT9BOjw5NzU3NDU2NjQ3NTY9PDo9PTk+OjxAODo6PDY7OTs+PUJCQjtBQkBDQEBEREM8PUA3OjxFS01l3OPi4uPj4+Pj5OTk5OTk5OTk5OTk5OXl5eXl5dPOxsB+cWxveHt2b3VuanNzbZKGeG50dG5vdIZ/b2twboJ0bXZyfY2DdnF/d3mKgabf3Nzc3d3d3d3d3d3e3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3dzc3d3d3dzc3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3t7e3t7e3t7e3t7e3t/f3t7e3t7f39/f39/f39/f39/f39/f39/f39/f39/f39/f4ODg4ODg4ODg4ODg4ODg4ODg4ODg4eHh4eHh4eHh4eHh4eHh4eHi1oZucG1xYFJZUFdfWUpMTElSP0Q9OTtCRjs6OTc0NTY1NzU0NjY2Pj07Pz45PTk7Pjg9Ozo0ODtAQENCQ0FCRkE/Q0BBQkREOz0+OTs8QkxNZODl4+Pk5OTj4+Tk5OTk5OTk5OTk5eXl5eXl5eW5t7Woc3JscHd6dHd4bXFydXd/hHRyc2xsa3F8bnBudGuBf3GAd32Eg355gHNygYqg2d3c3d3d3d3d3d7e3t3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3e3t7e3t7e3t7d3d3d3t7e3t7e3t7e3t7f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f4ODg4ODg4ODg4ODg4ODg4ODg4OHh4eHh4eHh4eHh4eHh4eHh4eHh49WHcWxqbF5YWlVXYFZWUE9QTD1BOjs8RkE4Ojg3MzY1Njk2NTg1Nz89Oz8+OT04Ozw5PTs7NTo9Q0JCPENDREREQUE/PkJDQzw9Pjg5PENLS2PN0dnh1sjY4+Tk5OTk5OTk5OTk5eXl5eXl5eXltbW2q3J5cm59f3Z1d2hqaGlwb3Zta2tnZWZxdG15gG5teXd2iHhxa2podXV5dHV/wd/c3d3d3d3d3d3e3t7e3d3d3d7d3d3d3d3d3d3d3t7e3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3e3t7e3t7e3t3d3d3d3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f4ODg39/g4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4OHh4eHh4eHh4eHh4eHh4eHi4uHh4ePVhnFwY2lhV1NZV19MUk9STUtAPjg5O0E+ODc5NjQ3Njc6NjY2NDk+Pzo8Pzo/OTo6Nzo9PDk5PEFBPTtBQ0VDRkA+Pj5BRUQ+QEE3OD5GSEpesrW4wbm1u8jg5eXl5OTl5OXl5+fn5+fm5ebm5ra2tbWOfX5weoR1cnZnYmNlbGtyb2ZpbHZtd4Z9hXlsbHd4a3ZwfH14c3V5fHd2h7ng3d3d3d3d3d7e3t7e3t7d3t7e3t7d3d3d3d3d3t7e3t7d3t7e3t7e3t3d3d3d3d3d3d7e3t7e3t7e3t7d3d3d3d3d3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4OHh4eHh4eHh4eLi4uLi4uLi4uLi4eHj1Yd1bl5uY1pUU1hXS1NLSk1SR0E4Ozs+PDk4NzU2NTY2OTY4NjY5Pzw6PT07Pzo7Ozk8PDs5Oj4+Pjs8PUFEQkNBQEBBP0JDPDw9Nzs+REVKXrG1tLW2t7e2y9rJ3uXl3eDi3tXU1tPU4OPg39+2treuh3t/bnmNenJ1bWNobGxtaXR4enF5enqIh4N6aWh9cWRvcXyGgX55e318e4an2t7d3d3d3d7e3t7e3t7e3t7e3t7e3d3d3d3d3t7e3t7e3t7e3t7e3t7e3t3e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t/f39/e3t7e3t7f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4OHh4eHh4eHh4eLi4uLi4uLi4uLi4uHh49aGdmxhb19dV1lcWlJQSEpXTEVHPUA9Ozs9OTY0NjU1NTg2NzY3OD87OT09PDw5OTw6Pjw6OTg+Qjs7Pj5AREBDRUFAQD0/QDw9PTU5PEJHRl2xtbW2uLm5ubq9uMPT0r3BwcC6u7y6u8TMxb/Dt7e3hGl1gX1ndYd5Z3Vxa2t5eHB3fH15bWl3e3h3bml1j4FwbHl4d3d9gXuGgnmAoNze3d3d3t7e3t7e3t7e3t7e3t7e3t3d3d3d3d7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t/f39/f3t7e3t/f39/f39/f39/f39/f39/f39/f39/f39/f39/f4ODg4ODg39/f39/f39/f3+Dg4N/f4ODg4ODg4ODg4ODg4ODg4ODg4ODh4OHh4eHh4eHh4eHh4eHh4eHh4uLi4uLi4uLi4uLi4uLi4ePXhXJrZ3RhW1hYX15TVVVRVUpMRj9JRDs5PTY2NDc3NTc4Nzc3ODk8PDo+PDg8Oj0+OTs8OTs5P0E8PT9DP0FARUJCQTw9Q0A6Pjw1NDlER0dasbW1tre5ubm5ubm3ubm4uLm5urq6urm5urm6u7e3uX9ucHN6b3B/eXNuc3Vsc3Z4cXFwb2tvcX6Bc2mHhIF9dHOHdW11hYmBgHJ2hafd3d3d3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7f39/f3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f4ODg4ODg4ODg39/f3+Dg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4eDg4eHh4eHh4eHh4eHh4eHh4eHh4eHh4uLi4uLi4uLi4uLi4uLi4uHj14lxa2xyW1dXXWBUUVVUUFJPSkNATUE9Ozk2NTM0NjQ2ODc3Nzk6Pjs8Pjs5PDo8PDk8PTw7PT0+PUNEREBDQkE/QD48PkE8OD06NjY6QkpIWLG1tLa2uLm5uLi5uLe3uLi5urq5ubi4uLi6uru3uKx7cnhxf3ZzfnBsbXpyZ29sbW50cHt3d3Jyd3pvhpJ2f3x8enZ5fH9zfYdyda3T393d3d7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e39/f39/f39/f39/e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f4ODg4ODg4ODg4ODg4ODg4ODf3+Dg4ODg4ODg4ODg4ODg4ODg4eHh4eDg4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4uLi4uLi4uLi4uLi4uLi4uLi49eHb2pxalVWV2FbT1FSUE5XSURESUo/Ojk6NzUzNDk1NzY2Nzg4Ojw7PD46PDo6PTw5PDw9Oz09PDs9REdEQ0E8PDw8Pj5AOzg8ODE1OkFGRVautbW1tre4uLm4uLi4uLe4ubq5uLi3t7i4ubq7t7mqcnB4d3x7e4J3aG5xam9qY2lyf21zcn54dHFsanaAeX2AgH91doB1a4qLgHaR1d/d3d7e39/f3t/f3t7e3t7e3t7e3t7e3t7e3t7e39/f39/f39/f39/f4N/e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t/f39/f39/f39/f39/f39/f39/f39/f3+Dg4ODg4ODf4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHi4uLi4uLi4uLi4uLi4uLi4uLi4uPYhm1sdGVWUFxnWE1YU1JRWUVDS1BOOzk4ODc1NTM5NTY2NzY4Nzk+OT0+OTw5OTw7Njg5OTo8QEA9PkBGQEJCQDo+PEE9Pzs7OzYxNjxCR0RQqLa1tba2tre4t7i4uLi4uLm6ubi4t7e3t7e5ure2tIlyd3h9iXxwem99c2hqbGdnbHRscXd0cWx2c3Fxd3FyfHl4g3Z7d2mLkYp9kM7f3d7e3tvY2drZ297f39/e3+De39/f3Nvc3N3e3uDg3+Dg4ODf3t7e39jS397f397e3t/f3t7f3t/f3t7e3t7e3t7e3t7e3t/f39/f39/f39/f39/f39/f39/f4ODf4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODh4eHh4eHh4eHh4eHh4eHh4eLi4eLi4uLi4uLi4uLi4uLj4+Lj4+Li4uPj4+Pi4uLi4+Lk14NoZ3VkVlVkZVdKWllXW1Q9RU1LSD04NzU3NjQzOTQ0Nzc1Njc5PTo9Pjw9PDk7PDk5Oj45PD4/PkFBQ0FFRUQ+OzxBPjw5PDs3Mzc+REhFSqG2tbW1tbW2tre4uLi4t7e4uLi3tra2tra3uLm2traLfXpsbHp/cGx5dm5qaGdlcXp4b2lvb3B1c21zd4Fnb32CgYNyf3lqcHJ6f6ng393Zy8a/vL2/vsLN0tDW3tnc4NfQzcPCw8PH1dfT2dzX1NjX0MfExce9vM/Kz87Y3djO3N3c2t3T0dze39/e397e3t7e4N/f39/f39/f39/f39/f39/f4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4OHh4eLi4uLi4uLf4uPi4eLg4d7W29/Sw8rJx9Hb3OLk4eHg2dre1sbExcTN2trf5OHi4trX3st9aWZxYVleZWFNTFRLUlpMO0hNSEZBPTc2NjUzNDY2NDg3NjU2OTw7Pj46Pjk5PDk3OTs7Oj49PEBAQ0RCR0ZCQT08Q0A9OTw7Nzc3P0RGRkaZtrS1tbW2tra4uLi4uLi3uLi3s7W2t7a3t7i5tba3opdxb29waW50dnFmZWNrbmdvcm1mZ2tygWVvdnyAeGRzj39zaHFyaWVlbm+w39HFv7u5ubm5ubq6uru6vc3Gw8e/urq6uru7u8HCvcHFvby/vry7urq5ubq6ubm6w8XDucDDwby/ube/z8/U3tjc3t/g3tLa4N/f4ODg39/f39/f39/f3+Dg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODh4eDg4ODg4ODg4ODh4eHh4uLi4eDh4uLi4uHa2t3RwsPCu8XT1uDdydPDrrnAsaqrq6uwtLbJ0sXRxLG4v7Srq6usr7S0vMzE1c60tLureGxtbWBdYl9ZS1NVVFFQREBRTUhEPzo3ODU3MzE1NjQ5ODQ2Njo8Oz08ODw5Njo6ODg5NzU8PDw/QEFAQkRDQkE8PkI/Pz09PTc1OD5DRUNAj7a0tLW1t7i4uLi4uLm5uLe1sautr7Oxs7OztLS0tqaei2tue3ZxeXhnY2hfcXdha25vaG99b25ja2lseHdsa4Z+bHB6dm1scG95sca8uru7urm5ubq6urq6urq6urq6urq6urq7u7q7u7y7urq6ubq7u7q6urq6urq6ubi3t7i4t7e2tbW1tbi3u8e+w8XHzcS4wMnH0tzZ2d/e3uDf39/f4ODh4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODh3Nji4uLi4eHh4OHg3tfGxtHQztTe3tPO0t/SuLi8sq2trKysrrG+ua63rKipqamqq6urqqqqq6ysuKyqqqqrq6urra6urq6urryzrayrpHlub21fXl1dVE1SU1xUSkE/UElIPjg5NjgzNzMwNTczNzg1NzY2Ojw/PDg5Ozo6Ojg5OjY1OTs8Pj9EP0NFQkNCP0BAQT9APjw3ODc6QUVEP4W4tLS1tbe4uLm5uLi3t7SurKuqqq2urq6vsLGzs7WjcG5ucm1wg311aWFlaGZkY2Rxc21td25naW1tZXBzb29zcXN8h4F6dX11n7u6uru7urm5ubm6urq6urq6ubq6urq5uLm5ubm6urq6u7q5ubm5ubq6ubm6ubm4uLi3t7e4uLe3t7a2tbW2tra1tbW1tba1t7e3t7rBvrzGycrb3+Dg3tvd3d7h4tDW4uHg4ODg4ODg4ODg4ODg4OHg4OHi0768zNjd3OLg0dnbxL23sLCxsa+zu7uzsLS9s66urq2tra2sq6qqqqmpqKmpqampqqurqqqqqamoqampqampqaqqqqytrq6urq6urq6sraR4aWJxZmFZWlZRUk5cU0Y9QlJEQTc8OzY5NTY1NDU2NTg3NTY1Nzg7Pjw7OTk5Ojg3Nzk3Njg8Oz47RD8/Q0BBREE+P0M9Pjw+Ojo3Nz9DRj54srCztLW2t7i3trKurq2sq6uqqaqtraysrq+xs7S1t4xucnRqaIB5ZmpmZWxdaG5waGxxYmNmcoJ+dmhobGpueoaBhXx4cXF5gK+6ubq6urm5uLm5ubm5ubm5ubm5ubm4uLe3t7e3uLm5ubm5uLe3t7i5ubi4uLi3t7a2tre3t7e3tra2trW0tLW1tbW2trW1tre3t7e3t7e3tre4v8bP0MS+v8DE19e8ydra4OHg4ODh4eDg4ODh4eDb3t7Uzby3tre6wMDJxLfIvrKwsLCwr7Cvrq6ur7Cwr66urq6uraytrKurq6qpqampqampqampqKmpqKmpqampqKmpqKmpqqqrraytra2ur66trK2heWpjbWdiXFhRUFFLVEpCOklRP0E3PDk0OjU2NTQ1NTY4ODY4Njs6OTw9PTs6ODY2ODg6ODY3Pj09PT5BQUVCQkNBQUBBOj09Pz05Ojc9QUc8bKqmqKutsLGwrqupqKqrq6mpqamrrKytra2usLO0tbilgIdvaWdzdGZrcG1qZGxvcm5rbWNrcHyJhG5qbHx4Y3uKfnNqc25rcY+7ubm5ubm5ubi4ubm5ubm5ubq5uLi3t7e3t7e3t7i5ubi4uLe2tra3t7e3t7a2t7a2tra3tra2tbW1tba1tLS0tbW1tra2tra3t7e3t7i4uLe2t7a2uLm4uLe3uL6+uLq9vcfb4OHg2Nnd4eHg3dfKwcPCurm5uLe4uLi3tbS0tLKysbGxsLCvr6+vr6+vr6+vr66ura2srKyrq6yqqqmoqKmppqepqaehpaipqamoop+hoZyip6inqausrK2ur7Cwrq2unXdwbGphY2BZUU1RTFJGQzlNUEU+ODs3Mjc5Njc0NDM1ODg3OTc7OTo9PTw6Ojk3NDo5ODY1OD8/QEI9RENDQ0FDQEJBQDtAP0A/PDw6O0NIPWOopaWlpqioqKenp6ipqqmoqKipqqqsra6wsLCztLW1taWYdn5xZmt4cW9tZmVsaGNsZ2ZpaX11bWlvfXZ5hWZod294b3Fvcninu7m5ubm5ubm4uLm6ubm5ubm5ubi3t7W1tba2tre3t7e3t7a2tba2tre2tbW1tra3t7e2tbS0tLS0tLS1tLS0tLW1tba2tra2t7e3t7e3t7a2tre2tre3uLe2t7i4t7i4uLi4wMXTyry8w83PyMC9urm5ubq6ubi4uLi4t7W0tLSzs7KysrGwr6+vr66urq+vr6+uraysrKurrKysq6ehoJ6gn5udoaGdlpmkpKaon5mZmZmanZ+gn56fpKqtrq+ura2srJl1cGlrY2FeXVVOU0tSREQ4TktHQTo4NTI2OTY1NDczNzc3ODk3OTo7PT0+ODg4NzU6OTk1OD9AQEFEPkZBQkNAQkNCQT88QEJCQD0+OjpERj5cpqWmpqampqanqKenqKioqKenqaurrKytra2ttLS0tbekc311bnONf3JmanFjaW1jaGZobG51aV9jZ3VzdnpuZ3Bwcn56cYihu7m5ubm6urq6urm2s7a1uLm2trW1tra1tbW1tbW3tra3tra2tbW2tbW1tbS0tLa2t7e3tbS0s7O0tLW1tLS0tbW1tra2tra2t7e3uLe3tra2trW2tbW2tra2tra2tra3tra3uLi3uri4uLi3uLi5ubm5urq6urm4t7e3t7W1tLS0s7OysrKxsbCwr66urq6urq+vra2srKuppaSmpqScmZubmpmampmXl5eXl5aZm5iZmJmZm52en5+dnJ6gpKWko6OioqKQdG5jcGFeXltUU1RIVEo/PFFCRkM7ODYzNzo1NTQ4Mzg5OTc4OTc7OTs9Ozc6NzU2OTk4NTg+Pz9ART5CPz9DPzxBQUI/PT9EQT8+PTk9Q0Y/VaSlpqanqKeoqamop6ioqKioqKiqrKuqqaipq7W1tba5o3eKcXKHhnd0cGh5a2JjYWVsaW5zal9jZWNjZWprYmRqbHaXjX6ovbm3tre5u7u6uLWxrKurqq6wrKyrq62tq6uvsLGvr7CytbW2t7W1trW1tbW1tbW2trSvr7O0tLSvra6vsrW0tbW1tbW2t7e3t7e3t7e3t7e3t7Owsra1tLa2tre3tra2tbW1tra3t7e5uLi4t7e3uLi4ubq6urq5uLi3t7e1tbS0tLS0tLS0s7OysbCvr6+vr66vr62oo6KgnJqampqZmZqbm5qampqbmpmZmZiXl5aYmZmZmpycnZ+foJ+goKChoaCgoJ+fi3RuaXRdYGZeUlRLRFRJPUVTSEVCOzo0NDY5NDQ1NzM4ODg3ODk5Ojs7Pz04OjkzNTg5NjM5PT5AP0A6QEJCQkA/QEJCPz0+QUFCPz06PkVDQFGjpqWlp6inqauqqKaoqKipp6ioqKinp6ioqaq1tbe3t7KZtH99kIx1Z2lqbGZjYGNoZW94cGlicXx5cGpmZmRma3NqhYystrKwra2ttLeysLCtrKuqqaiop6ipqampqKinqKipqaeoqqurra2sqqytraysrq6traunpaSnqqyopKOkpamwsbGztbW2t7i3t7W1tre4t7e3t7Kppaasq6ivtLa1s7W3t7a1tbW2tra3t7e3t7a2t7e3t7m6urq5uLi3t7Wxs7S0tLKxsK6sq6yurrCxsK2rqqmqqKijnJqZmJmYmJiYmZmZmZmZmpqZm5ubnJybmZeYmpqcnJydnJ2foKGhoqKioKGgoKCfnop1amtuWVxhVktPREdVRz5PV0hEPTw4MzQ0ODQ1NDgyODk4ODk6Ojw5OUA8Njk6MzY3OTE0PD8/QEBBOkNGRUJBREJDQTo7P0FCQz9APUBEQ0BPo6empaemqKqqqqakpqenqKioqKimpqaoq6uttba3t7e4rbJ1cHuDdmBiaWtiZWZhZGdmfYh5bHKAfXFvcXhjbW5xZo+srKurq6ysra6urK2trKyqp6WmpaWlpqioqKiopaeoqKioqKeoqampp6Wko6KioqOioKKioaKhoKChoaKjpKOjpaWlqLC0s7OzsKuqqaqztLa3trGopaOioaGipKiqqairs7Sxrq6xs7W2tra3uLi3t7e3t7e3t7a2uLe0sa6ppqerrKmnpqWkpKSkpKWnqaajoJ+enZycm5uampmZmJeXmZmZmJiZmpqampqampqbm5mYmpydnZ2dnZucoKGgoaOjoqCgoKCfnp2FdGtsaFdYU0pHTUVITUdAU1dGRz09OTM2Mzc0NTU3Mzg6Ojo6OTw9OjpBPDY9ODM3ODgzNztAPz9AQDpCRUNAQkRDQT87PEBDQkNBQDxBQ0A9TqKnpqanp6mqq6mkpaWlpaaoqKippqanqKmpqrW2tre3t7izc2h7c2JnamtpaWJhZGloXV1tfHJma3J/fHR8bm1zc36gqamrq6uqq62trKusq6mpqKWjpKampqWmp6eqqaamp6enqKinp6iop6WjpKKhoaGhn56en5+fn56foKGho6Wko6OkpKSmp6enpqWkpaampqeqraumpKKhoaChpKWlpaenpaeoqKalpaivtLa3trW1tra1tbOwrKupqa6rqKWlpqampaSkpaWlpqWkpKSkpaKhoaGgnp2bm5ucm5qamZiXmJiYmJiZmpmZmZmYmZmZmZqZmZydnJycnJybnJ+fn6ChoaKgoKCfnZ2cgHNrbmReU0pITUZETEtFRFFTQ0c9PDgzNjI4NDY0NjQ4OTg6Ozk7Pjw5PTs5PTczNTk2NTY8QD0/QD88P0JDPkJCQj89Pj5CQ0FFQD86PkVAO0+jpqWkpqeoqaelpKWlpKWnp6eoqKanp6alpqa1tba2trW2uYptcW1vfHxxZ2pmYGFsYFROW2hqbm9tgYJ9cWdxdn6aqKeoqqmpqqurrKqqqqimpaWkoqOlpqalpaWmqaqppqWjpKWmpqSjo6KioqKhoJ+fnp6cnJycnJ2dnJ2en6CioaKjo6KhoqKkpaSioqOjpKSjpKSko6Ggn6GipKanp6ipqaelpaSipKSlqK2wsKyrqqusqqmnpaWmpaWlpaalpqioqailpaWkpKSlpKOjpKOioaGhoqKgnp2cnJubm5qZmJiYmJmam5mXl5eWlpeXmJiZmpqcm5qampubm5ucnJ6goKGgnp6enpycm356bnJiXlNNSlBFRk5NQkBPRT5JOz01MzYzODM2Njc1Ojs4OTs5Oj49Ozo5OT03NjY5NjU2PkI+PkE/PT5DQT5DQ0BAO0BAQkJCRUA+Oz5FPzxQoKSjpKOjo6SkoqSlpaSlpqamp6empqalpqaltLW1tbS0tbiBaHx9ZXOCemxwdWFfY1ROT1FbaGxpbGxxbW5xbnScoqSnqKioqauqqqqqqaempaSjo6OjpKSlpqalp6ytqaShnp2eo6Shnp6foKCenJ6dnJycmpqam5ucnJubm5ydnp6foKChoJ+goaOioKGjpKSjoqSlpaWkop+go6SkpKapqainpaGdnJ+jpaipqainqKioqaempaWkpKSlpqampqampqenpaWko6Ojo6KioqGhoqKhoqOkop+enZ2cmpubmpqZmJeXmJaWlZSUlJWVl5iYmpubnJuampqam5ucm5ucnp+fnpucnJyam5p/fnF0YFtUTUdNSEZMSj8/TkM8QDs8NDM4Mzc0NzY3ODs9ODo6OTk7PTs7ODk9Nzc4OTU4OD9APT9BPjs9RD89REA/PzpAQUE/QUVAPjw8Qz88Tp2ioaKioKCipaSkpKWlpqenp6empqampaampbW1tbS0tLS3jHalsXdmc3Jvc2xjZGlYT1JRT09dgG1kYFptkZGSoqKjpaampqenqKiop6alpaSjoqGhoaKjpaempqesrKemoJ2cm6Ghnpuamp2cmZiam5qampmZmZubm5uampqampucnZ6goaCfnp+hoJ6foqOko6Omp6inqKWioKGhoaGkpaWlpKCcmZmbnqOmpqampqanpqempaOlpKWlpqiop6enpaWlpaWkpKOjo6KhoqKioqKhoaKjo6Kgn56enZybnJubmZaUlJSTk5OTk5SUlJWWl5qam5ubm5qZmZqanJ2dnZ2dnZuampqamZqXf3dvc11aTkhKTkdFRklERU5APD09PDQ1OzQ2NDY1Njc5Ozg5OTg5OTw7PDc6Ozc4ODg1ODg/Qj9BQTw+P0A8PEJAQT49QT4/Pz1CQUA6OkA8PE+doqGfoJ+dn6OkpKSlpqeoqKenp6ampqampqW1tLS0tLS0tbSXtqd1Znh2Y2xjY2VjW1JTU1JNXqCMeFhodpajnp6hoaOjo6OjpKSlpqalpKSioaGko6OjoqOlpqWmpqenpp+bmpuioJmWlpWam5qXl5iZmpqYmJqampqbm5qZmZmenZ2goqOjo6KkpKWinqGhoaKjpaampaSjoaCgn5+hoZ+goJ2amJeZmpygpKOjpKWmp6alpaOjpKSkpKWnp6ampqampaWmpKOjo6SjoqKjpKGfoKGhoKGgoaCfn56dnZyamJeVk5KSkpKSkpOTkpOUlZaZmpqbm5qampqbnZ6enp2cnJybm5qamZmZlH10bHReWk9IRUdGQkVORT9GOzo+Pzs0Njo2OTM2NDY4ODo4OTc4ODo8Ozw5Ozs6OjY3ODk5Pj9APjw9QD5AOjlAQT89QT8/QUE+QUE/Ojk9PjpQnaCfnZucnJufoqOlpaWlp6iop6ampqanpqantLS0tLOysrGwsK2rkHiGj36bmn93Yl1TUlFRTGKgootaiKCgn52YmZycnZ2eoaGgpKenpqWkoqGjp6alpaKipaampaanpqagm5mboaCXk5OSl5qcmpeXl5ibmpmampqam5qYmJmaoKCgoKGfoaKipKamop6gn5+goaOko6Khn56enpyanZuZmpqZmJeZnqChoaKioqKkpaWmpKSkpKKioqKkpaWlpaWlpaalpaOko6KioqGgoKGgnp+fn5+fnp+foJ+cm5qZl5WUlJSTkZCRkpKSkpKSk5SVl5iZmpmZmpqam5+fnp2cnJycmpmZmpiXl5F8cmdxXl1QRj9BRD9KT0JCRjhDRT4+OTg7Nzc0ODQ1OTo6Ozk3OTo8Ozo8PT48PDo2NzY5OD4/QT47Pz49PDg6PkFAQUE/P0FCQERBPjo4PkE8U5ycm5uampycnaGio6KjoqSmp6alpaampqSjo7KysK2rp6amp6alpqiln6iop6qnoXmEXFFST0xcnKCAYpmgnp2clZOVlpeZmp2dnqGmpqampKOioqanp6ajpaampaWmp6amop2cnqGfl5GRkJSXmp2YlpeWmJuZmpqampqZl5iam6Ghn56fnpybnJ6goJ6dn56fn6Cio6SjoqCfnp2ZlpeXl5iYmZubnqKioqKioqGio6WlpKOio6SioaGhoqOkpKSko6SkpKSioqKhoqGgn5+gnp2enp2dnZ2dnp6em5mYl5WTk5SUk5KQj5GSkZKSkZKTlJaXl5iYmZqampyenZ2dnJubmpiYmpmXlZaNempmamBiTkY+P0A9SkVAQ0A7QEE8Ozs5Ojc2NTg0Njc4OT04ODs6Oz87Ojs8Ojk6Nzc2ODs8Oz08Ojo8PTw3Oz5DQkRDPz1BQ0FEQT88OkBCO1eZmJqamZmam5ucnp2foqKhoqSlpKSlpqSioJ6op6alpqWlpaemp6ampqakpaanqKehqXJOUU1KVJahenKanJyenJeVlJWWmJiXl5qeoqKhoqOkpKOjpaalpaanpqSlpqalpaOgoKGhn5mSkI+WmpmenJaXl5eZm5ycnJqamZeZm5uen52cnZyZmZqcnZydnp6fn5+hoaCgoaKgn56bl5WVlZeanZ6fn6GhoqKio6OhoaCgoJ2cnaGioqOkpKOioaSlpKOko6SjoqKioqKhoKGfn52cnZ2cnJ2dnJ2enpqXlpaVlJOTkpKSkpCRkpKSkpGSlJWWl5iYmJiam5ycnJycnJ2cm5mYmZiWlJWXi3hsY2RiZFFHQT1DO0tIRDo7Ozw+OTo6OTo3Mzc5NTo4ODg8OTg7OT09Ozo7Ojk8PDc2NDc/PDo9Ozw/Pjw7ODxBQ0FDQkI+P0NAQkFAOj9APztZmZiampqam5ubm5ydoKGhoaGhoqKioqKhn5+dpKWmpqenpaWmp6ampqWkpKalpKSkpaaGUFJQT0+PmHB6mpubnJ6cnJycm5ubmZiYm56dnp6foKOkoqGhoqKio6SkpaalpKOjoaGhnpyalZOUmJuam56amJiYmJqcnpyam5iWmZybnJycnJydmpqbnJ2dnp6dnp6fn52cnJyhoaCblpWVlZacoKGgn5+hoKKjoqOhnZuZlpaWlpicnqCip6ikoaCgoqOjoqKioKCgoJ+fn5+gnp2cm5ucnZydnJmanJuWk5KSkpKUk5KSkpKSkpOSkpKRkpSVlpeYmJiYmZqcm5qbm5ucnJqZmJiXlZWWl4d3ZGdoZGJNQ0U8RDlJSkU5Ojs9PTo6ODg6NjQ3OTU8OTY4OTc5PDs7PDo6PDs6PDw4Nzg3Pj07Pj46Qj86Ojo/QURCQ0FBQD9EQUFAPjpAPj06W5qYmZqbmpubm5uen6CgoaKioKCgn5+enp2dnKWkpaanpqWlpqakoqKio6Oko6Kjo6KnllRYVVJOZ21rgZ6am5udn6Cgn56enp6dnJ2dnJ6enp+goaCfn6CgoKGio6Ojo6OkoqGgnpuZmZiZmZmZmZienpiYmZmam5qWlZeWlZicnJ2cm52dnpybnJ2cnZ6bmJqeoaGdm5udoKKhmpWVlpaZoKKgnZueoKGjop+em5eXlJKSlJeYmZ2goqenpaGgn56goaGioaCfnp2cnJubnJubmpqZmpydnJmXmZaVk5GQkJCPkZKSkpKSkZKTk5OTk5OTlJWWlpeXl5manJubnJucnJqamZeXlpaVlZSEcmZsYmRbREJMPT84RktCPEA+Pj05Ozk6PTg1ODg2Ozg1Njo4PDw7Ozw8Ozk8Oj09OTU4Nzw5PD88OkE/Ojo6QEBDQkRBQ0A/Q0FAPj08QD09Ol+al5mamJeYmpycn5+foaGhoJ+fn56foKCenZ2lpKSko6OioqOjoZ+foaGipKOio6SiradXXl1UV19ua42dmpqbnJ6dm5ucnZ+enZycnJydnZ+goKChoaGgoKGgoKGioaGhoZ+enJuampqbnJqZmpuZnJ6ZlpaWl5eTjo6QlJabnJuam5udn52cnJycnJ6dlpSZnJ+in5ycnZ+hoJuXl5mZmpycnJubnZ6fnZqXlpaWlJOTlJiampqfoKGmpqWgn56fnqChoaCenJubnJybm5ybm5qZmJmZmZmXl5iVlJKQkJCQj5CSkpKSkZGTk5aYl5STkpSVlJWWlZaZmZmam52cnJyampmXlpaWlpaQgG9vZV5gV0BKSDg/N0lFP0VBPD07Ojo8Ozs3NTs4Njs3NDY6Oj47Oj0+Pj07Ozs+Ozo4Ojk5NkBBPTo8PTo6OT9BQ0JERUM+P0FBPz8+Pj89PDtgl5WXl5aVl5mbnqGhoKGioqCenp6enqCgn52bpaWkpKSioKCfoJ+dnZ+hoqOjo6OkobCjXWVkYGFua4GenJubm5ubmZianJ2enJubm5ycnJ6ipKGeoKGhoqKhoKCgoaGgn5+enJqZmpubm5ybmp2dm5manJiXlZWWkY6Nj5KYnZycm5ycnqCdnJucnJyempWVm56foZ+dnJyenp2cmpqampqampqbm5qXl5aTkpWVlpWTlZaam5qanZ6foqWjnp6fn5+en5+enZ6fnZycm5qcmpqbmpiZmJiYmJiYlZSTkZCRkJCQkZKTk5CRk5SYmZiVk5SVlZWWlZaXmZmXmZqenpyamJiXl5aWl5eYjX1ubV9lVlRFSzw3PjdSRUM+QkE4Ozw7OTg6ODY7Nzc6Njc5Oj0+Ojw8PT49PD06Pz06ODw9OTtAPj4/PT45ODs/QkNAQ0VDPT9DQj5AQD5APTw8YZWSlJWWlpeanJ6goKCgoaCgnp6enp6gn56em6WlpKSioJ+fnp2dm5mbnJydnp+gn56rmGNpbW5pZm2enZybm5ybmpmZmZqam5ucm5uam5ygo6SgnZ6en6CgoKCgn6ChoKCfnpuamZqam5qbm5ufnpyZmJqamJiYmJKOj5OXnJ2bnJ2cnJycnZycnp6dnpqVl5ygoaGfnp2eoJ+cnJuampqbmpqYmpmVk5OTkpOWl5eVlJiYmZucnJydoJ+gnp6enp+fn56en6KjpKKgnp6cm5qampuZmJmZmJeXlpWUlJORkZCQkZKTk5OSkpOUmJmYlpWUlZaWlpaWl5iYmJiXmZqamZeXl5aXlpeWl4l4dmddX1dURUU5OTs8WT5AOEI/OTw8Pjk4Ozg6Ozc5OjU4OTs9PDk9Oz0+PD0+Oz8/Ozk+PDw+Pz5AQUE9ODc7QkNFP0FFQz1AREJBQEQ7Oz47PGKWk5SUlpWUlpiYmZubnJycnZ2cnJ2en56dnJqkpKSkoJ+enpybm5qZmJiYmZucnZ6cpolla3R4bVuFop2dnJydnJqbmpqampydnZ2bmpuboKKinpucnZybnJ2enp2dnZ2fnpuampucnZybm5ycnp6cm5qanZqam5yVkZOXm52dnJ2fnZycnJycnZ6fnp+cl5idn6GhoJ6cn6CfnJubm5qbmpmZmZmZl5WWlZaYl5eXlpaYmZuenp2dn6GhoJ+fnp6fn5+dn5+hoqKhoZ+fn5yZm5qcnZuampmXlpaYl5eXlpWTkpGTlJSTlJSUlJaZmJaVlZeZmJeYl5eXl5eYl5iXl5eXlpaYl5eVl5eDeHZfW11eUT1GOjk4P1VDQTtDQzo8Pz86Ojk3Ozg4ODc0ODk8Ozw4Ozs8PTo9Pjo/QT06PTw+PkA/PUBBPjk2PERDRUBBRUU9PkVERD9COzo8OTpkl5SVlZaUlJSUlJWXmJiamZqcnJydnp6dnZybo6Oko6CenJuamZqZmJiYmZiam5ubm6WJa3F2em9lmp+enp2dnJybnZ6dnJ2enp2dnJydm5ygoJuampubmpudnJqampucnJuamZycnJ2dnZ2dnZ2dnpybmp+fm5ydm5mZmZudnZ2dn52dn5+dnJydn5+fn5uanZ+goJ+dnJ6gnpubm5ubm5yampuamZudnJqZmJeYmJiYmp2foKCgoJ+hoaGgoJ+en5+fnp6foaKhoJ+enp+enJqam5ubmpqZlpaXmZmYmJiWlJOUlJWVk5OVlZSVlpWVlZSYmZuamZaWl5WWmJiWl5OUlJGRk4yRkJOWfXhqYWJiXFA8QDw2OENWSERCOjg7Oj47Nzc5Nj06OTk2NDc6Ozw9OTo6Oz87PT08QD47Oz46PT89PkBBP0A8NztBQ0U/P0REPj9EREM+Qj07PDs6Z5aTk5OTk5OTlJSVlpeWl5aWl5mbm5ybm5uamaOjoqCfnpuamJeYl5eXmJmYmZybm5qkgGpqb3lzcZegnp2dnJydnp6enp+enp2cnJydnp2bnJuampqam5ubmZiYmpqamZmZmZqdm5ydnZ2dnJ2cnZ2cm5qdn5ucnJubnJubnZ2dnJydnp2enZydnZ2cnJ2dm5uenp6dnZybnpubnJycnJydnJubmpmbmpmYmZmYmpmZmpyfn5+jpaKfoaKioaGfnqCgn5+fnqCioaGhn5+fn52ZmpudnZqZmJWWl5aVlZaTkpOUk5STkJCSk5GUkY+OkJGOlZabmJWYlJmXlJiRjJCPk5yTkoyFjIeDhndxZ2pkW1xRQT44NkJHYEJFR0A+Ozw7Ojg4NjU8ODo4MzQ6Njk9PTk5Ojs9Ozw6PD48Oj5AOj5APjw/QD8+PDg6Q0FEPz5CRD8+Q0VCPUJAPDw8OmeYk5KSk5OSk5SVlJWXl5aWlZaXmZmZmpqampqkoqCfn52bmpmYmJiXl5iZmJmcnZ2cqH1nZXN7enOJop+enp2dnp6enZ2enZ6enp2dnZ6cm5ybmpubm5ucm5iYmJmZmJiZmZibnZycnZ6enp6enp6dnZybm52bnJybnJ2dnZ2dnJ2dnp+fn52cnZ2dm5qbnJmZnJ2dnZ2dm5uanJ2dnJycnp2dnZybmZeVlZeXmJqam5ubnZ6foqOhoKGhnJucm5ubnZqcmZycn6CfnZiZmZmUkpKUl5SPj4+OkYyNiYuQi4mLjpGRj4mQmJiQkoyNi5KQj5iYoqiqpqWlrKOmoZqep6eyqKKVo6Cfl39wcWlsXFtcTUY8NzdHR1g+SE5URjk+Ojg5ODc1PTk4NzMzOTY6Pjw6Nzo8Ozo6Ojo8PDs/PjtAQD47PT5BPDw2N0A+QkA+QUY+PEFEQT1DQj49PDlmmJSTk5OTkpOUlZOVl5iYmJaXl5iZmZqampqaoqGfnp2cm5mYmJiYmJiYmZmZm5ybnKx/am16f3lxh6Genp2cnZ6enp6enp6dnp2dnZ6enJubnJubm5ubm5uZmJiYmJiYmJmZnJ2dnJyenp6enp+fnp6dnp6dnJydnJ2dnZ6fnZ2fn56goJ+enZ2dnZybnJ2em5qbm52enZ6dm5ubnJ2cnp2cnZqYl5SRjo+QkJGVmJSWlJiZmpudmJuYlY2Mjo6TkpKRj4mQjpGRjo+Ki42NjYiIi4+Lg42NkY+MkI2Qk5WVnJihoJySn6SipKmam5eanKOprb3Bwbq8uL26ucC8ubq3uru7tL2zwbV/bnVmZ1peWUxJRTo7TElTPFZSSUM6QTo7Ozc3NTo6OjgyNTY4Oz08OTk7Ozw5Nzo4Ojw6PT85PD8+PDw9QTs5NTg8O0A/QT9EPTxBQkA8REM9PT06YZOTkZCUlJOTk5OTlJeYlpeZmJmYmZqbmpqamp+gnp+fnJqZmpqampmYl5iZmZmZmZmphXB1e4B3b4mhnp6enp6fn56en56fn56dnp6fnp2dnJ2cm5ubm5ubmpiYmJiZmZiam52cnJ2dnp2dnp6goJ+enZ6hoJ6dnp2enZ6fn56en6CenZ6enJydnZ2cm5qYnJuVmJqamJiYmJmSjJCXlKCXk4+MjYqKiImMiJORh5CPjYqKkJCLjoqMi4+IiImJjpGOjYaFiYaKhoWLiI+SkJCNkJKXlpKamJ2TlJ6kpqaqq7Gsr6+rpquqsbm5tbS0rqyvtMDIxcXBvsbDxMTDurW+t7a0s7C2tb6qcHRyXGZfXl1JRj8/RUtMVklcTEQ/PUI6Qzk5Nzc7OTk3MTc5ODo+ODg6PDw7OTc5OTs9Oj4/OT5BPDs+PD46OTY5PDpBPkNBQT08QkBAPkJEPj8+OVyHhIOHi42KiYaFgYqMkZOVmJiHlZaWkpiampmenZ+gn52ampubm5ycm5iWmJmXl5ibqo56dXZ7f3mCoJ+fnp+goKCfn5+foKCfnp2dnp+enp2dnJqbm5ybm5uYmJiXl5iZm5ucnJydnp6enpybm52dnZycoaGfnZ6dnZ2dnp2dnJiWlpaYlZWSlpmWk5GKjI+PjI+NkIuLj4+WiYiEi5GZjn2Fi42PjYyHioyQm4yRj4+Lio6TjIyNjIiSi4yFiYyPhouIh42KhYyEj4qXkJOYmpWbnKOqoaKknKKrsbe0ubWxs62vsrKlp7O6sbq6vLa3tsDDw729vLa/urq8wbW4wL60r66mqa+3mm58Z1tjWl1fSEU+QUtJU1hZXkFGOTk9OkY/Pzo3Ozs7NjM6Nzo5Pjg6Ojw9OTk4Ozk7PDo+PTtAQDs8QjxAOjg0Nzw7Qj9BQj4+O0NEREBDQz0+PjlhmZWLkYWNj5aSiHl9e3+Fi4OKgoqJhmuAeJCLlpqRnZ2UlJGTlpeampiWk42Sk5KQm5uIdndzcX1/cpGgnZubm5yenZ2eoKGgm5uWlpucmpybnJuYmZqYmJmampqWi5CTlpmYlZiYlpucl5WSkY2SkZCUk5KXm5mYm5ePjpCLjo2Ch4uLi4qLiI2RjIeHhoqIiZGKh4yEhYqNi4qNhI+UkIyDkJOUmZWQi5OTkZWRlpWOj5GMlI2Oj4qIj4ePhoeJiYmNiomJioWNh46JmJKUmpuXmKChp6Cko5qqqbO2sbWwqKmiqK6tn6qvsK21ubi8wr/BxLixtbCutrOwuL68ury+urOzp7G3wpB1gGNiXlpXUk1IRkVQSVlXX1tDUDpCQz1HRj84Nzo6NzU1OTc8OTw5ODo9Pjo6Nzs7Pjs7PTs9P0E7Pz48Pzo4NDM3OkFBQEI+PjpDREM/QUM7PT45Z6mloqKZn6CippeUiI2CiIJ1h4iKiIp7e3Z7enmPeoiSfn18en6CkYWBgH1zfH99fISHfnRweHZzfHaBj4iIiYeIioyMkZicl4iOhIuNi4iNkI+Pi5GPi4yOj5CQjouFhYeLjIyHiIuOi4eMhYaBjYuGiop/iYqGiJiRiIOIg4KFfIuLjIaJi4iKkIyIi42PjI+Wh4mLio6NjY2Wk5OdnJyalpycm56bmpuYnZeTkZWWkJKRi4+LlpSMjYqDi4SEiYyQkIqOio2LipGJjZOTk5SVk5KcmZ6Xn6CfpaKvsamupKSfmKStpqa4t6ysu729wsPAv7+vpa2wsLS3uLO0uLa0ta6stK+4tLaBeXpjZmBeVlFRQUVMT0lcXl9UR0dCS0xCREA9ODg7OTU3Nzk3Ozc9PDk9Pj05Ozg6O0A8Oj06PkJBOD88Oj84NjQyOTtCQD9CPj04QEI/PkBEO0A+N2CloJqXnaGaoaCPl5efl5WCjaCfo6GdmpKOjIxycXBvdnFucG1ucHZub29waHBxcHR+c3FycXd7cnl2d3Jyd3Z6e3l8fXt/iIGEi3+PkYaNi4uGiouLiYaEgYaCgIKJkYOAg4x/ho+LiYWAh32AgZKQhoSEho2DhIyPj4+IjY+Hi4iRkJWRjpCKk5eOj5WYp6SfnZWYlpaln5udq6aqt7W4srGnr6qnpqGfmp2WkpWVkYqPjImTjZuVjYuLhoaJjJWQkJCLmZKVlZSbkJiTlIyNkYyWl5WilZ6mqauno6OqsJucpp+mq6G0vb6zs7+5u7u6uby9rqiusa6wuLyztLGxqrCpqLGxsqild3J0X2hhYFRWUUlKSFZNXl5eVExKRVFKRUdDPTo5OTc0ODY4Mzg4PTo9PD47OTs4Ojs/PDw+OT9DPzg7Ojg8Nzc2Mzc5RT4/Qz89N0BAQT0/RDw+PThUj4yGh4eUjJWZl5yWmZaNlZyWlZydoKCdmpiWeHFubXJ4cXFsbnJwa3FvcG1yc3t1dnd5fnVxeHZ0d3tybn98gX15eH1/eYOGg4WCg5CLkIuLi42Pi4mJhYKBfX9zfYiAfpyQhIWFiYuPinp9fYaOjYqGjZSSi5CXj5SXkpihlp6XlZunpp+goKawq6GjpbW0sqqmqq+isba5vcK7ucO+vLi9uLWxrLCspZuSk5mfm5SPk5WOmp2doJqfn5edo6qsoZ+em62hp6qwqaampJiRkZWUo6SirKSss7Szs6i3tru4sLKvra2yt7a6srW6s7e5u7i8urayr6yxsbKztLOxsa2us7Gzs6yhl3Zxc19jXlJRVE1PSUdYT1pcZFROR1VPRURKRD44Ojg3NTg4ODU5Nzo6PTw/Ojg8ODk5PTs9PTpCPj84Ozo5Ojk4NjI1N0I+P0RAQDY+P0I/PEM8PT46Tn98go6MjJOTl5eaj5SWjZaRkZSXk5qanqGdnHJvcnFxcXFxcG5zcW91dHJxdneAdXd8eYV+d3t8eX1/fICJiYmDfXp/h4GIiYGAgIGGiIKGi4aIhYSIiImEf4J/enx8fX6SkH+IeIGFi4qDhIWKj4yNkZmdlJSUoJqan6Ktsa2ppKWtr6ysrLWuvrmtrqm1sLexq7G2rK+9wsLAvrq8trKutraxtK66u7OurKepp6unoqmtoKmooq+wuLSxvLq6urK0ta+8tLezt7e7t7mtrbCprLW5sbeytLe2sLu7vLu6ury1vLi0wbWsqqqrtLG3uLm1trSzsKymrrCqq7Cxq6yusLKxtK6qo5N4dnJlZ1tMUlBFTUlTV1JlXmdUUExcUUhMUkNBOTk3OTU4ODY2Ozc5Ojs6Pjk4Ozo6Ojw8Pj08RD45Njs7ODg+OTUxNTZCRkREP0A3Pj5DPjpBP0BAO0t/gomXmJSdlpabmIuSlo6XkZGVl5SZl5+bmZx8dHV2dXl1c3RudnJzdHV2d319gX56gXyDfoJ/fYB/hIKFj52RiYF/go+Xjo6HgoCBiIuFfomQi3+HjYyLioeSioeGjZGTkZGEh319g4iMjouOiYmQj46PlJSYkJWcmp2eqK6yr6+1tLOtsrW4sLy1tbGqsKqztbS7t7SztrS1r7i4t62noqassLCvtre3vrW5vLOysa61u7C0r6+yu7axuMC9tLS0s7izvLq2tLrAvbm6ubq+ubm5vrWysa+yr6q1tLGzsbSzrri4tb+vpKaoo6ussa+zrq6wsKytq6qroqKmqKKnrauqpaynoqeYeHlxZmVZT09NSVJNV0xPX15cTlVVYlFEVE07Pzk8ODk1Nzc1Nzk1Ojo6OTs4Ojw8Oj08Pj4/P0I9ODY6Ojk6QDs1MjY2QUZDQz4/Nz49Q0I5P0I/PjtLjpGTmJmVmZGTopiTkpKLk4uOkI+Vl5ablZSbhoJ9enh2dHRzdH53end2gIKDhouMhISFioaQiYeRk5aRjZaalY+IjI+emJaVkpCTl5qamJCdoJ2Tl5qgmZ2boqGVkJugpKOak42IiIuJkZGOkY6LmJqPj4yUmpecnZugnaSstLm6vK+2tLi0tLK3uLmzq6+qqKy1srK1rrGrrqa3s7OxpaGotbCvrayrtbqyu7q6tLK3ur67ubG4sLmtqLK4u66ttLS3tbu2trm5vLe0r7G0t7a5s7e1pq2pq6ior6yprq2up6KxtLG0q6aop6Cjq66oqq6orLKwr6+pqKGeoaGjpqOgopqlo56ol3J3bmdiVUtUT09KQ1BLX2JYWlFcVGBNSFJJQUA5Ojg2Njc3NTg5NDs5Ozk8Nzs+Ojg8PD0/QkBBPTs2OTk5Oj87NjM3OD5GQkJAQjk+PUBDPkBGQj44R5OWkZWTkpSQkZ+ZnZmVkI+Sko6Mk5aWko6RlZGSkIaBeXJzdXuBhI6HhZGTkpicnJiVkJWYo5yaoaeqqZ+clpeVnaKioZyZnpmlqKyvramnqqmop6GlqKirqqmvoZufoaOjoJqfoJyUjZiUmKCgoaSem5qlp6Spq6+spaOoq6+xtK6qrK6zr6ystLO0ua6urayqrLKwsK2wqKqmsrS0uK6qtrqwr6qurLC3s7i0t7W0u7y4tbWxtauyrKiys7uvrbGytLa1sbG0s7OvrKuvs7a0sayutKqqpqWnrauoqKupqqifqbOwqqeppaOio7CtqaatpairrayppaSioKWipaOYmZyVnqKippdudWVnZFdPWEtLSktTVHBiWWRXX1tcUlpQTEM8ODk6Njk4NzQ3NzQ4Ojw6PDg6PTk3PDw7PkM/QT47OTo5Ojs+PTg0NThBREVEQkM5PjtAPkI/R0Q+N0KSm5SVlZaVj46Wl5qZlZGKk5SSjo+SkYqKiY2Ul5qTjYmCho6VkZSfmpuin5+jnqGhn5ijpKelpaapqa2rqaKmpKilpKGfnqOjra2srairrq+qqqukoaKkqaemqaijopybm6SgpaijoJidmJ+hoqmnoKKirqyrqqetr6ilpKmpqammo6iqqaekp66wr7Ovq7Crqq+yr7Czua+rqLCxrrCyubO0r62vtbCss7GurLW1tLSzs7CvrKyqrKusr7G0s7CwrrCwsKyqrauqq6alrrCysKumqbCvqaOkqaunqKaopquwq6mvqaaoqaalo6iwraqpqKKpo6WnpKGhoKKloZ2el5aYlJugpKmUbnNeamlfVVpOUk5QT1JkXGVjW11ZXFBZT0tAPDs5Ojc6ODczNTMzODo9OTo4OTo5Oj08PEBEPkA9OTo8PDw+Oz45NTo8QkFFQUNBOT47P0BEQENCQDdAkZ6YlJeZlpGHi5SSl5GIg4mLk4+OkI2Hh4SFlZmWmJeZlpqeop2anKKkoaCdn5qfoKGgpqGgoKCjo6KlqKmrramqpqOmpaCloKaop6WnqaepqKOnppmcpKaioaGhoaCcmJmfoKGkpKKenpagm5qioqChn6GiqKCcn6GloaCmo6KfpKGspp6foaGkrKqnrKivq6e0sa6ur7WyrKqwq6mtrbWwrq6srreup6yqpKivsq+sq7Kvqqqpq6utqa6urrGxraqtqaunp6uoqauinaapqKilqKisqKilpKWop6iopqmsr6+oq6mhoqKlo6Opq6ymqKWjqKKhoKSdnZ+hoZ2bnZ+amZWcnKOqlG9zZm5yZF1cUFVPV09eZGRsaGJiWlpSVE9NQTo9Ojo4Ozk1MTYzMjg4Ozk5OTk7OTk8Oz0/Qz5APTk7Ojs8QD0+PDk5PEFBRUFGQTo9Oz9BQUJBRUI4PYqWlJOYmpaPiISNjpGSjIiIiI+JiZCRjoqKiJubmZygpaKlnqKjoZqeoZyanZ6bnKOop6ugoKOYoJ2XnKGjo6WjoqKkrKilqaCepqmnrKmkn6Kgoqahpq6mpp2fn5+fn5manJyhoKGkn6GbnZqcoJ6hn56eoKOZlpuYpKKipJ+ZnKGhoqCbmp6goaSgnaejqrGorqusqaSqqquorKalrKqws6+rq6mwq6appaWoq6ynpqevq6Wnq6upq6irqqqrrailqKOmpaesqayoopykoaOmo6qpqKano6SnqKanqKepqKupoaKoo5yepqWjqKino6WlpqmgpJ6inpeYnZ+doqKlnpiUlZ6go5d1d2t2eGJfXFVZUVVXW2Nec19oX2NTUVlUSD48PTg7OTo4NTM3MzM0Nzo4OT05Ozo5PDxBQEM9PT44Ozw9PEA/Qz86ODo+P0NAREE6Oz49QD9DQ0VDOTyCmJmenZ2alZKKiZGRl5GQh4SJgoGNj4+Sj42cnZ+hpKmlqaeorK2moqKfmKSmo6Stsa6yp6asm56em5qjp6Cfo5+foq+rq6yoqKuwqaiqqKGfoKeprbCyr6yjoqahqaWepKOipqClpKKlo56doJ6fpaKinp+imJWem5+fpKGblZigoZ2enJudnZuZmZWen6Oonp2iqKGaoaOmoqSoqaqoq7CxqKWlp6eopKWpqaqnoqWmqKadnqWloqClpaOlpqCjpaOjpaelqamqpKekpqKmp6SrqaenpKGlqKynpqWlo6OopJWdo5+bnaCjqaeopqGjo6mooKiioJyVkZqfoKGmopuXkpCamqCVfHdvfXlmW1pgX1pcVlxoZG5jbmppYl5QUEA/Ozo4OTg8OzYzNDMzMzc5OTs8OTs7OT49QkBAPTs9ODw9QD08PENBPjo4PT9EP0M+Ojk/PEI/P0FEQjk6gJ6kp6Kem5+gmY+ZnaCWloqGj4iEi4qTl5SRo6Wnqq6trLOys7S4t62pqqevtLKxqq6usbKusa2lq7OssbGpq6+rq6y2sLSwq7GysaOfoqqpp663trS0trOvrKuuq7awqbKxra6npp6io6ObnZyXoqiloZ+eo5udoZqWnaScm5aZoqefoJ+joJuUlpmWl5qfoJmVnqGZmJ2dpZ2gpKeqqaiqraylqaSlqqeqqaqsp6SkpKOimZmhnpqaoaCfpaWYnqSmpKqooqelpaGqp6mnp6ejqKWmpaGkqKesoqekoaalpaOVl52Ym5mVo6elpaSfnZ2lo6Kqo5+amZiXnJyaoaGakJOTl5ibjX93cnZ5amJbX15cYllgZG5ta25hX2RgUE9BQDs7OTs4Ojk2MTQzNjQ3Nzc6PTo8Ozk9PUI/Pj89PDo/OTo7PD5BRUA9OTtAQT5DPDs5PzlAQEBAQkM7OXuao6OcoJ2dop2Zn6KioJibmJaYkpSQm5qWl7S0rrW4s7S4tre0uLm3tbm4ub28uKqLnLK4vLS9urW7uru4s7q/uLe5u7G3r6iusq2inJ+qsri8vL27ur+0r7GztbS3t6+1tLWysKikop+gl5Wal6SqpqahpKOkq6almaGko52goaKooaOgpaGck5mYmJmco56cmpudl5uZlqWam5+hqKmpqKuvr66pqKirrKytq6irp6WjoJyfo6Ojn6Cipammmpyip6Spn6GjoqKgpaanpqSooJ+ipKGjoqiop6OloaGopqalo5mbmJuTj6GknqKfmJiVoJuhpaCfm5udnJuamZugmo2YmZiTkYaAdnh4eGNbUllUX19hbWh1a3FoaWlhWVNMQDw6Ozg5Nzk3NTU2Mjg1Njc3Ojw7Ozs7QD4/QD0+Pjk6PDk2Nz47QkZCPDg7P0NDRDw+OT43PkFCP0ZDOzhwkpqblJ6bm52Vl52doqajopaXnpaXl6GblJi+t7G4uba3t7i7l5S2vbu9vcDFtaK7mKC3v7+6wcm0nbu2sra/xcGooLa0urGqrrSxsLG0tbW8vL68vL7Guri3ur20r7Wxsbq4t7Kzsqqmpp+YpKSnqKSupKurtbWvs6CnqqynqqmlpqCnoKGmoZOWmJ2foqSjnZ6coaChnZekmpmdoKaqqqqtrq2tsLGrrK2sqamrrqimpaalpqSkpqaeo6eppKGcoKKjpqCio5+jpJ2foqWgpJyboZ6fo6GhpaSlqaOkpaKkp6ehn52elpOcoJiZko+MjJeWn5uWnJqdnJqSlpSUmJOQmp2YiouHgIB8gnhhXllUYWlgZnNvc2l0ZGlkYltMSz46ODg5ODg5NzM0NTI1NDY2OTw8Oz08P0E/QEA9Pj44OTs4Njc/OUJFQzw7PD5DREM9QDs9Nz1DQ0BFQjw3Z4yRk4qalZiblZWYm6Knq6aVl5iQlZmhnpeXvrWztLu6ubi5woeYt6u4u8DCxbOjw6e4s72/tMTHvbS7uL62wMTErqCworW2tb2+wcPGwsO5vb/AwL2/xL28ur2+tKeqmLHAvbi1ucCzr6+qqqitp6ekr6eqtLyxtLWor7Gwr6yqoqajrJ+fpquXmqifpaWfoJydoKuwsKyiq5yYm6Cor7Kys6uorre1sq2tqaalqKulpaStqaShn6Cnnp6mqKmmnp+anqGlpqmcnaObl6KmmpuanZ+cmqGcmZ2eoKijn6GfnaWioKOioZSZmpmTj4qLhI2Qk5uPjpiVm5eYkJORkomNl5iYk4uKi32AgIVwYGFeXmtjYm53dXZubFtiUVZcTUc7PDk3OTc5Ojc0NDQxNDM3Njg8Ozs8PEBAPUA/Pj8+Ojo5Ojc6Pz5FRUU8PT1AQkJCQUE7PDhAQ0NARD87NV+MjIaFlouUlZeYl5ifpqellpWVkZebn5ual7mxtrO5vLy5urWqsryxvsG0vMe5uLuuv6fGw7/KxsnIxcXJvMLHx7+xsKe8vL7FxMbJx8XGu8TAxcbAua+9vMC+vrOrqoyzu760tbfCuq2vsLWqq6aqo62kp7G2q7WyrbOtqK6vp6awr7Ktqq+zpKu1qaeopKCgnqmyuL61tbWqqaausre4t7apq7i8ubexr66noqOop6SfqKOfnqCZoZydoqSnp6GelJuaoKGlnqChnpajnZSQlpiboZqflpORlpSin5qenJudoZ6kn56VnJiPkpOPjImTkJefiZCWkZuUmJGRlZaDjJWXlpKLjIh8f4N/amZoYWttZm51cXJ1cWdeX1xSSUU/Ojo6Nzg0ODw3NjU0MjMzNjU3PDo7PDs9QD4/QD48PTk5OTs6PDw+QkRFPj49QENDQkREOzo4QUJCQUNAOTJbk4iEjZGKi5GRlZCSmp2fnJOSmJSdnZqXmpW2sbm1tb6+tri1uLO8vMTEusPHwb+0s8XFxr/CzcfLzsvLx8HDxsfIysXExcO7vLzBxcHFxb/DwsbFwLGTvrq/w8K2trqptLO0qauzu7uxn5uxr6ykrK60p6qpqKqtrKmmpZ6pr6uyu7q4u7e5t7O5uLOurLO0qrC1ub3Bur6+vL60urm4u7qysbS8u7q7s7Oyp6Smq6uioaCdmpudmpyXmpuenJygnZaclpuZnZ6io52UnJCNiY6OkZ6bnJWNh5KLmJiWmpybmJybnp6cmp6UjpiYmpSRmZeeoZWYmpKXlJWRlJqYk4+TnZaSi5F+enx/dGtsbmRvbWlxeG55aWlhXGdhUUZEQTw5OTc2NDQ6ODQ2NTMzMjY1Nj05OTs7PT47Pj49Oz05OTs7Oz89QUNBQkFAPEBDQ0NFQjs4OUQ/P0BCPzsyV5uQkZCQh4WSjo2IjZCTlZGPjZSUm5STlpqRs7e4uLi+u7C1sri2tbbAw8G+w8LAvru+u7u8xMzEzNDLxsa/xcfLyNTLysjGv7y7vsS+xcjGxsTEw7i0wLe0vMHCucK3t7/Au66lrre8t62co7ewpqy0tayupaSjqKSgoKWZqrSxvsG+urm6uLW0srG0tLO6wL7Av769u7u9vsDCt7a3tru7sru+ubi3u7a3tKyoqamrpqijnpOampyYkZKZl5GRmJqXnpiWk5acm5+elJOJiX6GiIuWlJiZkYmVkZeWlZmbmpaYl5idnpyhmJWZmZyYl5ybn56jnJ6WmJeTl5yZmZyUlp2UlpOJdnl6e3Zua2lndVpmcnhzeWZmXWRbUlhJRj87Nzg4NzYxNjk3NDQzMzM2NDY7ODo8Oz08OD0+PDo7PDs9Ozs+PkRBQURCQEBBQkNDREM9OTlCQD8/QD89MkyWmpaSk4yKmJCKi4yOkpKKiIaNkJiKj5CUl7O7tba/vb2xtrjBvby0uL/Bsbi3vsHFvbu8wsbJv8jOyMHEwcfKysbKxczIzcbJxb/DwMvNz8rGxMPDwcS+uL7Bw8DEv8HPz87Hq6+2tLWroKe0s66ruLWzrKmjoa2prKatn6y1tL/Cvrm4vbawrausr7W0ur7Fv7u8urO5u7i5ubWtsLS9u7G/vLiytrmzubu0ra2orKyqqaeXnpualY2MmJSTi5WWlJyZl5WWmZKYn5mQiop+iYqKkY6Vl5OUn5mWkJSZmJmWmJOUm6GeoZiYmp2ZmZaenpibopqdnJuYmpuZlpeXlpyZlJyYfoB4eXV1ZWZpamhdam9teHdjYmBgXlhXRkU4Ojg6OTc5NDQ5NzY2NTEyMzM0Ozo9Pzs9PTo6PTs8Pjo7Pz48QkBDQkJFQj0/Q0NDQ0RFQDk6QkFBQj5CQTVCkJeUlZmSj5qQjpKRjZSVi4qHjI2UiImPkpq2u7S8xsHEwr3BxcLAtLO9v6ywr7rDysPCvs3IxbfByMW/wcLIy8rCwsTJzM7Pz8zDx8bIycjIycfFycfIx7/Fx8TEyczK0s/Tzry4trS4uMG+vrq9ury6vKytpqq7urm3wLK1uLLAxrq3t8Gzsa2tqau1s7u2w7a2vbWxt762s7e4sLW2v7uwvbq0q7CxsbO8urOzrqutq62xnaOjoJqQjpiXlZCclpaYlpWSnJmTm5+clpGUjpWQiYyQlZOUm56YmZKSnJedlJmSk5aZmJ2VnJ6do5yVnZ+TnKKcnKCfnaOemJSVl5ebmpmgkH99cXRxb2NhZ3Zoaml0bXhsXWRbVmBZTEhDNjw5OTg4OjUzOjY2NDQxMzUyNTs6PD47Ozw9PDs8PTw7PD49P0E/RUFCQ0M+QEFARUVERUE7Nz5DQkI+Q0I4O4+akZaalJKUjZCUlI6VlI6Pi4yJk4uIkJObt8C6xsXEw8zCwcS9vrWvt7uvr7O6wMfFxMHMy8W2ucDCwsTHytHLwsPExsnFzNDOx8zJwsLHwsvLyMbMys7FxsXDxcrHytDN0MzHxMDDwsnNx8XBxMfBvL60sLCwwb6+wca/vri2w8K6urbAvrWyrKmvsri+tMC0tLi0t7nEua+8vrm+v8K/tbq2q6qsrq+wt768trSura2utaSlqKimmpycnZyeopydmZOQkp2VmKCdmJiVmZmZl46MlH2QkJefmZmYk5GToI6Nko+VjpCUlaKdnKSem56elpyjoKGipKOkop6amZubnJ2enIN9cnx4cGdgamp2bGlldW50Yl1iVFdVU01HOjc7OTk3Nzo3NDg3ODQ1MjM0MjU7Ojk+Oj08Pz04Oz05OTk9PEBBQEVCQUJBQT9AP0RFREVAPDk+QkNCQENBOjSAoZeUmZiVkImUk5aTiZGMlJGOiJaKi5CXnMXLw8O8wMPHwbm9vbu4tre3rrK3uLzAwsDCx8bHurzAwsTHyMbSycHDxL+/vsTLyMrLyby7yMbIzcjDyMnJxcXDwsDFtcLJysi+xcfIzcbLz8W3wMDAwLu6vbWzs7+/ub/DucC3u8G8uri7ub27srCvsKy5wri9ube1t7q9xb24xsjCwcLGwr28tamurrCwr7O6t7m2sK+tr7OppquprqannqSlo6OjoqCblZiekZecl5GRlZeZlZmRlJiSlYyYo5qcnp2FiZ+TfJKWlZKUlJennaCipJ+en56foaGkoqKjoaOinJ2fnqOhppl5enl/cnBmZWZjamRham1ub15ZXFZWTlBKRjk5Ozk3Njc3NjM3ODk1NjEzNTI3PDs8QDs/PDw6ODo8OTk4Pj1APz9GP0JBQz89QT5ARENDQTw5PENBQ0RBQDozbKKdlZedlo+PmJiZmIiSjZGVkI+Vjo6TlpbKy7u5urnBu7q3vsG8vLu5sa61uri4u8S6vsC+vru8wMXBxsK+xsK5u8O6uLm8vsHHwca7ucfQysTEwMPBwsHDwsO+v6G3wcHBoLrHzMvFyNHCsL6+uLq7u763tLC5vrO8vrG5tbi7tryztbm2uba5t7GtusG6vMG/t77Ev8bDw8fHwrvAwr/Cv7iys7O1tLGut7S3tbSxrK2xp6Wlp7CtqJ+nq6ajqKWmpqCgn5SYmZSRkZWUl5OYl5qhnZ6hnKGdoaWglpSbkZeXmJqTnpmZqaSlpKWdoqCanqCkoqOcoqGjoJ6cnp6ppaiVfXuDeG5mYWRiYWNkY2piZ2NbWlpcWVFPRT07OTo7Nzc5OTY0OTk6NTMxNDUyNzo7OkA9Pzw8OTc3Ozo5Ojw+QD8+RDxCQURAPz49QkRCQkI+OjlCP0FCPT44NVmfnJiTmZaRlZiYmpeQkZCQk5GTlJKSkpSUxce4tbq5wrm5vMPFwri7ubGxtry6tbnAu7u5tri0tLW/u72/ub66urTAuLW3sq66u7fAt7zL1Le7wMG8u8W9u8HEv7+Sp73Cu3qpwMnEwMDKwLHBv7u3u765tbe0uLy0vbi1tLCzvLG3tri/tr25vb65t7q+u7/Axb29y8PGw8TAw762ubq2v7i7v7y4trOyq7CwsrWzs66sq6emnqeurauiqKumpqqjp6iqo5+Ym52bmpicnJiXnJuhpZ2anqGhoKGmoJqbnJiboJ+dnJ+coKiho6SknaKfmqKgop+el6Shop+dmpieqKWhi3x5iH1xY2BiY2hqZ2ZpZWleVlZUWU9TTEY4PzY7Ojc3OTs2NTo7PDYzMTM0MTc7OTg/PT47PDs3Njk5ODo7PUA/PkA9PT9CPjxAQUNDQT9DPTo2PEBBQDw9ODdJlJibj5OUkZWYlZGWkpWRkJGUlZSTk5OYlcHCwLq8ub62uL7EwMKxvbqytLO4vLW3vMC8vbS1sbC1t7W7wbi+ub+8vLe0t6+ut7W5v7vB3pd+ybzDtbrHt7a5u729ipu9xrZglcDFwL+8wb64xrzCv7zFuLa3tLi2tru7uLa0t7q1tLi8vbm/ucPAwLu5vLu+vcjEvcfEw7rAvb62sra4srm0usLCureysaysq62yr7Kur6ijpJ6rrKyqpKakpKiqoqemraihoaGmn6Oiop6bnKKfoKOdnJuhn6KgpKCem5eZn6GdnZ6eoaWkoaKioZ6ho5yinqCZnZijn52eoJqZoKKmnYR6g4F4cW1lZWZvaWVraFhYTktLS1JJTEhDOT44PTs2Ojs5Njc8ODk4NjA0MzE3OTk7Pz0+Ojw6ODg5PDg6Ozs7PD1BPj09Q0E8P0NDREA/Pzw6Nz5CREE/QDg4P4mYmoyMkI+Tl5WMkpCakpGXmJaUlJKQmZTDvsbBwby8uLi6v7a8scK2tLyxtLa4s7q9v768sq2vrLGwt7y3u73BxLm3t7a1ubm6u7+80Mt9gLjEx7e5uK63tbi9tYCRvcisVnzAxsDAv728v8jDxcW+xri1srK9uLi4vrq6uby6urS3u7q5v7zEwL+5uri/ubvFxr3Fw8Kyur27sa+2uLO3s7q+wLm2rLGrrqmqqa2qqq6mpKWnrq2ppaOio6GkpaWmoqato6Klo5+ho6Gcmpyhn6CloaCenZygnaWgnpeVmZ2fn52gn6KmpaCknpybn6Ofn5mcmZ2epJyWnKOcnqGcppZ+f4d8a25wZ3Brc2ZhbWBcVElLSkRKQkNHPzo7OD48Nzs7OTc4Ozc8PDYyNzUxNjk8PD08QTs8Ojs6OT45Ojs9PUA+RD89PkRAPz9BRkQ/Pzw9OTc/QUNCQEI5Ojl3nJiLh4uQkpOWjY+TmpOQnZiSkY2PjpiSvbfHvsO+vbu+vL22uri9ure9s7OwuLi1uby8wLeqraSusLe7sr2+u8S2tbi1t8C+xLzCxNaqdHeQxs/CwLivtbW7w6p5ib/JnVVmtcvDwr+/vr3HzMfHxMe9tbW2wb27u7/CusDCv7y2t729vcHBwL+8ube8wru3v8W7wr++tbe8vK+vt7awtLO6ubq7r6mtq62rrKaqoqeuqKWqra2vp6Sgn6ajnqKjqKOjq6Oiop6dm5ublJaZnJyfpZ6fnpmYnpejoJyXmZqZmqOjop6jo6egpqCbnaCjnp2WoJmcoKCblJegn6WcmKKQgYaAcmZsaW50bnhjZ2JbY1FLVEhFRUNIQzw7OTg9Ojc6PTo4OTs3PD01MzY1MDY4OTo8O0A9PDo+PDk+OTk9Pjs/PkM8Pz5APz4/P0ZEQEE/Pjo3P0BDQz9APTo4ZqGYj4uNlZKVlY6PlpmVl5uVjoyMjY+bk7m2wbS/vLm8w8C+wLq1trKywLmvsry8sLe7tru8qqqjsbm8vbK8vrzFuLG3ub7KysjDxsvOinN0jszRzMrEtbrAxM6XcYXBx5BYWpfOxsK/wrzAw8zKx8XGwLm9vMS/v7/CyL3Hx8XFvLrEv7vBv7rAvLu7wMS9t7nCub69t7S2uLqur7WxsLCytre0t6yurKqsrKuoq6Gms6qlra+trKippaOkp5+io6Onoaeiop6cnZyamYyQlpeZnaKZnpuVkp2UoaCdmZ6fmJimpqKfoqKmoqeloqCko6GbnaCbnKKfl5WVnp6kmpafiYGDgXRvbGx0a2xuX2JeYGJOSU0/RUA/REM7Ozo6Ozo4Ozw6OTw+Ojo+NDQ1NTE5OTo5PDtAPD89PTw4PDs6PDs7Pz5DPkI+QD89Pz9FRUJBQj87Nj9CRUQ9QUE6OlmfmJOSlZqVmpOQlpeclZuZlpSVkZKTnZm2uLaxuru6vsG5uca7trWypb69tLbBv66zvbS4wbGwsbS8z8y8ur68xL63vbywr7+9wcvJsXp1eo3GzMvNysbCxMvThG2Cv76GXlh6ysbEwcG/xcDKycPDxMO5w769ub+8wsbCyc7Hxr66xr26v7m3wLm5vsDCvrW0vLi2u7CvsrK1r7Cvrqyus7CzsrirsbKxqrCrq6yrrLatqKyusqarrKmpoaWgpaakrKSmoaChnqGgnaCMlJeTm5+mmZ6emZOYnZ+gnp2eopuYp62ooqSgoKKqpqmhqKGlm6CgnZ2jn5SYmKKdp6Gfm4J7eoh6bW13e19wY1tdX19UST5DRUlCQz5DOz42OTo7Ozs7Ozs7PT05PTU2NjIxODo5Ozs6QTs/PDw+Nzs8Ozw9PTw9Pz5BQUE/P0FCQUVDQkRAPDY+Q0RFPkJEPztTmZuZmJ6dmqCalpyZn5KdlZ2boJWWlJqYur20sLu8wcTCv8XGura5sqO7vbS3xLuwtbq2ucS4tLy2wLjL2L2+tr/Av6+Fdm97doSXtJlxeXuPv8fLyMHDwcDJy3Npe7m0fGFXaMbGxcS/wMG/y8fCwMjAusK7urO6usG+wMrOysS9tby8ub+5ubW1s7/Avre0s7S4rbeqr7CwsrGvq6+nr7ausrG5rra2uLSzsLGttrS6sa6srranrLKsraSjoaenqLKrqqWkp6elpaCml5ujn6SmraKeo6KanaWiop+foaWenrC0sKSlnp+kqaevp6mgq6CiopqipJ2anqGmp6+psZWCe32Cem5zeHNncF1bXl1ZUkVEQ01JQUU9SDs7NTk7Ojw8Ojs7Oz0/Oj01NDUxMjc4ODs8O0I8Pz46OzY6PTo7Pj0/QD87QUFBPj4/QkBBQkJFPjo1OkFCST9AQkA7TJqdnZ6fnZienZmampySoJWbnp+blZGRl8W+urbDvMbCvr/Ixbe1uLe2ubu0r7e3srWzt7m8u7a7u8VyfMHMvLa5w62HZ1tjXlBbX3B/b3Z8krq/xsC5wLy+xsJlYXKts3VhVmHBx8PDvL2/v8PDvr/HvLy/tLSutbW8vr/OzcvCt7K4uLi9ubuxtrLIwLu2tLGwt6yzqbCtrbS3r6uuqrG1r7Gvt7O6usC/tre2sru6wLWyrbO3rLC6r7KloqWrrK+5s7KosK+xr6qiqKGkraitrLOun6inpqWmq6Sknqaqo6ayuLOrpZyfp6anrquqpbClpaWbpKOYn6exrLW4sLKOhHl/fXZsdXtwbmlbX2BZU1BBRkhHS0BEQ0g8PTY7OTk8Ozo6Ozo9Pzw9NTU2MTM2OTg8QT5AOz1AOzs5PD04Oj08QD46Oj49Pj09PkBCQkJBRD03NDU9REc9Q0I/PEWUnqCgoJyXmpiYlZmdmZ2fmp2bnJaRj5LDwMK9wrzEvLy7xbu3s7e2tru7s6CWtayvsbS0tLa4ucXKdGeGtb22tp5uamdVX1tJTFFTXm9zgZ64uMK6s7u3u769YVpkoLR3XVRnwsPEw768v7u6uLbBwrW/urWur62wvcC5z8rJw7GwtbS0vbq+ubq7ysO7uravsL2xuK+ys7C3vbaur66wt7CsrLK2vbzEwrq9t7bAv8G3tbC2srGzurGxr6err6u2v7e1qbqztbmxp6uop7ausrG1uaisrK+qr7CqqKessayytr20saykqKuoqKusq6i2qaaonqadmKOuvLG7wbSmiYF8gnpzdXZ3bnFgX2ZdW1RKPT8/RkY9RkNDOTo1Ozk5Pjw8Ojo8Pj4+Pjg4MzE1Nzg5Pj9BPzs6Pz08Oz09OTs8OTs6Nzs+PT1DQT8/QUJEQkE8ODU4PUNGPUREPzw/iZ2en52Xl5WUk5aZnpubmpuYlJ2Uio6Owb7Dwr6+vrm2usCxtbGzt7fCtbOrrbOoqa61r620tbfHxnx0aYWltphiU0VfUU1pZVNMSFBxeIihsLe+ubK1sry6u2dVV5i8flNQcsHExsTAvb+5s6+xvLquu7Szpquorbq+uMvCv76sq7Cvs7u3ub67wMXBu7y3sLXEtb+0uLu0u8PCs7a2sbisqaWrsr23v7+7u7exvL28trGvq6uprbOvsLCrsLSpuMC2sqm0tbC3tq2spqu7s660uMKwsbG1sbK1saywsri4ubi+tLGzrqyxramvrqqyuK6trainoZ6ptr+4ur+wlol9gHxxdHd0d3JsX2NhW15PSEI/PUhDRk1DQDc3NTs6OT48PDk4PT47PT86ODMyNTc2OD8/Qj86OD4+PTw5PDk7Ozo8Ozs6PEA+QkI9QEE/QkI/PDs3OjxBRD5CQz8+QYqgm6GdlJiVlZKYmpyWm5WalY2bj4SIhru0vb+7vLm3s7y8rLOytLS2wLXAr7Kzqqqxt62pubO3w7mFem5ujqBvT0lCa1JDXHuHh1tGV4imp7C2urW0sqy8urp0VVCFt4FMVIK/wcfDv7m6ta2lrbaxprCtqJ6gn6WttrXCt7a0pairqLC2s7K6tbu7u7W4trC1xLK+vL+8ubrFybq9vraxp6SeoamxrrW5trKxq7S3trGopp6gmaWmpKynq6y2qa+6sa2kpq2lq7GrrKmtuLawsrjBtrGxtbGvu7ayt7W1sry1urKwsbKutLKqrq2nuLWyta2uqqiosrq9wLa0qY6Ce393b3tvdXJtY11mWFxdUk5OQT5KQkFKSUA2NjU7Nzg+Ojs4Nz4+PDs/OjkzMjc1NzU8PD48PDg+Pjw8OTk5Ozs7Pjs7OTw+P0E9PEJAPz9CQD47Njc6QERBQ0E/QUKJoJ2loJSWmJiVnqCcl5uYmZGMmYmDhoS1r7S7u7S1sLG2uq6wtLOvtbq1urC1s7KttrqvrbyzuLq9kYF3coV+V0ZCV4hRS05hfYd+UUNPhrqys7WytK+su7q6hGZbeJ+BXHGXubu9uLaysa2roK2uqJ2jpp2WmZman6muuayrq5+lqKSrrq6nr6yvsbGtsa6usLmwtLy+uLm4x8W8vLu4qaKcmJufp6assq6zqaapqq6popqXl5GcmpijnqKir6ekrKaompqemqGnp6anqa+2squ0trCqsK+xqbm2sbWxrqy3s7avrquuq7S1ra+rq7GtsbKoraurs7W3ur2wq6GLeoJ5cnZzbXRpbF1balRdXFBNSERGTEJGTkY4NjY1OjU6Pjg7OTc8PTo7PTo5MjM2Nzc3Pjs9Pjo6Pz48PDw6Ojs5Oz47PTk8Pj1CPDtAP0A/QT8+OjU1OkBFQkRBQEJBiJ+ipqGYm56dmqWpmJudmpmUjJmHhoeGrq2uuLmxsqiur7iyq7CwqrK1ubm+tbK4tLm6trm7tbWyv6GHg4R9ZkxAVXpwTEpMToerb1Y/c765s7SysLGtsLq3q46DdIWlqampra64r6qrrayjqKy0p52XmKGVkpWXkJifqK6ko6Sgoqeio6mpoaanpaqtp6ynqKesq6yyu7SztLm6trK2ramgmpaWm52fq6yqr6Oko6GpoJuTjo+Qk5KSmZaanaSloJ+ep5iVkpSZnqSjoaWqrK2iqaqppKmtrqW0sa6xraqprq+wraWmqqSos66trKmmpqmrpqqnq7Ksr7Oxq6mWgX+Bd3J4aHRzbmRUYGNXXFFOTEhASFFETUM9ODg3NTo3PD46Ozw4OTw7Ozw7ODI0ODk3ODs7PDs4PD0+Oz08Ojk8Ojs9PTw6OkA9PDw7QD5CQEE/Pjk1ODs8RkFDRD9BQYijpqKjnqCfp6Coqpufm5yZmI6Xi42PjKqpqLGvsK2lp6ayr6mmq6CvsLu1vby4wMG+vLy8ua6sr7Wqk42Qm2NFVp15UldIUWFJfH9jY3euubKss6+urK23qZWNnaSppJ+cnJ2dp6ieoKiooam3sZ+Wl4+dk4+Qlo6Xm6SooKCioqKlpZ2jo6CepaCkrKSmqKSio6OrrLOuqa6urqeqraisoZyamJmYm6moq6ufpqObo5yVkIyPj5CTkJeVlpifnp6amaaXk4+Slp2ioKWipqSnoKKko6Ghq6uksq2qrKyno6yuraufoaKkpK+srKmmo6KqpKqqpKmrpqmsq6agiHiDfHZ/emN3bG5cUWhUUE5HUE1MQk9RQD47PjQ5OjU7OT07Ojk9OTk8Ozw8OzkzNjk5Njo7Pz06ODs6Pjw6PDs5Oz07PDw9PjxAPT88ODtAQEE/Pz45NDk8N0FDQkQ9QEOOqqSjoqGinaulpqimoZ6dmZ2PmJWTkJWnpKGmqKmlpKChp6uhnKKbp6u1sry9wMLCwL7AuLSnpKyqubKeorVRQXqdd1hrSlVjaXZ1ZGp6nbK0qrK0rqqrqZKUq6+nnZCXk4+YoJ6hoJykpa2nqaCalpeMl5GNkJeTmJ2iqp+fn6Cjpaicn6ChnKKfo6innKehoKSfrKisrKCpq6agpKimrKOdnp2Zl5qrpqqxo6WonqCclZOQj5GQmJCWlZiXn5ibmZukmZeUlpqdoJ2nqKWgo6Kho56doKmqpa6upqipoaKqrqqnoaCio6msq6eppqShqaKlqaalpKKmpKijkn18gHV2fW1re2RoVVFjTUpIR09STUpORzxFQDwyPzg1OTs+Ozk5Ozg6PDs7Ozk5NDg7ODc7Oz48Ojk8Oj07Ozw9OTw8PD49PUE+QEJAPTc6P0FCQEA/ODU1PDpAQ0BEPkFGlq6koqWeo6KpqKipqqWmnp2imJiZmZWbop6bnqOioKOgoZqgmJeXlqGorK62t7q5ure3u66ooKGooLDBub18T0tsqlxqfnF2U15vYWBtaICWsa+us7Wqp6Gho52ZlI2QlZeYmJyfoqKbn62qkJeXl5eWkJKRkZOal5ugpKqeoaGepqeqop+gp5+dn6SnqZ6jpp+qnaqtqq6nqLClo6Smp6ymoaShm5ier6iusqulqqqgmpiYmJWTlpqTlZWalpuXl5ihn5ycl5uhmp6ao6eln6GioqOdm6Gmp6aoraOppZ6kp6mkpaWhpaSsrKmmq6eioKSjpKenoaCgpaKmoIl7gH13eHxkeXlgYlJVYEhJSktTVElSUEw5P0E2Nzw2NTs6PDw5Ozs4Ojw9Ojs4NjU3OjY5Pj0+PDk5PTk9PTw+PTs7PDo+PTw/Pz9APT03Oj5AQEA/Pzg2NT08PkFCRkBAR6CupKaroaOqrK6tp6ypqKCipp6bm56aoJyalZmfn5uen56WlJOXk5KcnqSorq2sq6uvqq+pnpeepZ2hw8GAVVZmcH12bWZ6clRfYmRqbGJscJS0sLC4rKahnZ6alZiamZCOkZWRjI6OlJyjjHaXmpqXmJmUmZiWnZufpaapoKajnqeurqumorGjmqSmpqqioaqiqaSosquxsqu5qKarp6urqaysp6Cgo7GusrC0qrKuopmcnZ6hmZubmpiZm5SWm5aZnaWhoJqjoZqcmZ+kop6gn6KmnZulpqWkpaijp6OepqOinqaloqWlqKykpq2noJ2dn56gpaGenqWgppmBe4F8dnZzaIJsZVtTWlpNUUpOT1VMU0xBNz5DNzg9NzY6PDw9Ojw5ODo7PDo7OTc2Oj01OTw7QD03ODs3PTs9PT06Ozw4Pj09QD5BPj4+ODg8P0BAPT43NTg9Pj1BQEZAQUihqqCrq6GkqquwramtqaelpaWkoKGfnqWXl5SYmZ6YnJ2blo+VmZKRnJihnaqip6Cep6Gln5ySm6KanrGlkHtthnBiZVdRXFVXS05VWlRPX1lstLOrr6efnqKgl5GUm6CbmJeSk5+coaSYhmx1nZufl5uinqWhnqSfpKitraisqKSstLe2sKe0rKKtraOvpaSmoamorrWzsr23vrCssa6tqaq0sbCoq6iytbezuK2ytKSgnaWfrKGhoqCgmpiWlqCbm5ikoaCeo6GgnpqcpaCfnZyhqJ+fp6meoaOkoKagnqehn5ymo5+ipaOooKmrpZ+dnZudmqainpyjnqeQgYJ/fHh1and1XWxaUmBIUlVIRlVWSkJMRz1LSDhGPDc3Oz49PDo8OTg6Ojs6PDk2Njo8Nzs+PT8+OTc9OT47PEA8OkA6OkA/O0A+QUA9PDk3Oj5APzo+NzU4PT0/QUBEQEJGnKueqamipamprqimqqWmp6aoqqGlpKOmkpOVmJacmpqcmpWTmZuNk5+ZqJ2un6eenKGdnpqZkpiem6GhoaKEZFpfaWFWTlBGPz9BREVCR1JMT6i2qqmkn5+ZkpKUmJiWlZWMiIuOlZ2dnnlhhp+Zpp+gqKWxqqeuo6uttrC0srGutri9wLqttbSwt7CutKmmpKWsqbmztbvDvMPBtrq2q6+xube8r7OwtcG8t72zs7WirKKpqLKpq6inqJqZnpqqp6CZp6Cfn6enpaSfnaqiop6bn6igpKetmZ+jnp6nnqCmnpycoqGbo6KhnZympaWkn6KZnJukn6CboJyjiYWEfnZybWl2bWhtXFhcQ1dOSkdNR0JGTTw+TD40PDk2Oj0/PDs6Ojg4PDk6Ozs8NTQ6PDg5Pj4/Pjg4Pzk8Oz0/Oz1BPTo/PjxAPj8+Pz08Njs/QT07Pzg1ODw8QERCREFCQ5WqoKapo6mqqKmjoamgpqinrK6lqaWpqpSSl5mUmpqanJiYmZyamJmqoLGit6Swpp+enZ2XmJWZnpuco5+ZgV9eZmBSRUU8SzxGPEI/PkBBTXqpramqpZ+enqKjnp+dmpyblJOVlJ2emJZ9dJOimqukq7KwubKysbKxur28vLm2uMO+v8K/trq7wMS5vbusr6exrbHCtrjCxsDIysDKv7C5ub25wr64s7vGw7zDvLezqbOtqrO1r7Ouqq+jnauntrGtorCmoaOvsa2wpKWvo6GgmqGnoaSqqpmdoJmao6CmqKGcnqKemaSenpiYo6OhpZ6mmZuipJ6fm5ubnIeGgXt0cmtrdHJxaFZcUUZUSERKUEk/RUE0Rkg5NTs+Nzs8Pzw8Ojo4OTw4OTs4Ojo4Ozw3Oz49Pj02OEA5Ozs9QDw9QDk3PD07Pj0+PUI+Pjc6QUA+PD45NTg9Oz1DQEFDQkGRqqGlqqelqqimn6KnnKasp7Gyq62jqayVkpWalJecoqGbnqCinJ+psqu7sr+rr6ylnqCgnJyYmp+gmp+giXZqYVdORD9MX35sX0M8MzVLe6qyp6OjoaCepaulnpeclJGZnZiUjIqGiIZ4b4KdpKKrrLS8tsO+vrO7wcPCxcC/wsbGxcPIwsDFx83QyMvDsre1vrK+xbu+zM3FzMzM0se+v8DCvsfGwrfEycnDwca+urS6urW7t7C1sqq6sq67t7+7uqq4rauquLq0vK6uuaOmo56mpaKjqaaZm5+Ymp2nqqegoaGkmJSjlpSZkZydn6Sep5+en6KdmJmUmJSIhH16cWtjaG94a2VaW0ZLTEVEU01EQkU3Oj87NTQ5OTc5Pj87PDs7OD48Njo9OTw9OTw9Ojs9Pj4+NztBOj45PT45PT44Nzs6Ojs/Pz1CPj83OkFAPTw9ODY2PDo8QT9BQUE+kqugp66ooqulpKKipaGlqquwsq2upKmmlJWWmpaUm6SmnaGqp6KrrLy8v8PBsrK4p6Ghq6qhnJ6hoZ2cmXFqYFVJRUBBUo2epIpQR16NrqyhmZubnp6Zl5eXkoyOlpeTjo2Qi4KDgndycW1xjqatrrS5xbvNx8u/wszOzczHydHMzczHycXFzNHS1c7Tyb3Av8O7xsXIxdHTzdPQ09PMysLFxsbKyM6/yNHMx8XHxcG8w8G/v7+2vrOuv8DDw8fEx8Suv7iyuLzDwsK6vLy1rqenraigoqmlmpagmpmdqKupo6SknpePm4yQmYmVmJugn6OdnZeempOTi5WPhYB5dHNlYmdyb2ZeWllDTkxERVBJRENANTU1ODlCPTY4OkE+Ozs+PDk+PTc6PTk6PDg8PDw7Pz8+PD0+Qzw7OkA9Ojs6Ojg4ODk7QT48QD8+ODtBQTs7Pjc4Njo8PkI+Q0FAPpOvn6ivpqiro6KloKampKuoq62qrqKqo5Kcl5ebmJuirJ2frqalsarFxszOzb+wwaikqKytqqCdo56cnpRlWFBMRURBRl6+1sOjk6OzrqOenJ+al5aUkpSWkZCPjIeDg4iHg4CBgYB5cXJvbHmktrq5vcvB09LTyM3O0dPR0tHQ0dHNzs7Qxc7U1djS183Gx8nMw8XKz8rT19HX0tXW09TIzMbMzcnSzc7TzcXIycrBxsvHycjGv8Ozs8jEy8vLz8bKv76/vcHHxMzMyMnAw7+tr7OonqKqo5qTnpyYnqaprKSlppaXipWFkZSHkpKSmZualpiQm5WQjIaRi4B6cnV2Z2NndmlkVldRRE1GQElRQj1CPDoyMkE8RTw3OTxCPTs9Pzs7Pj05Oj48Oz44Ojk5Oj86Pj1APkA8Pjs+Ozk9PTw5Njo6Pj08PEE/Pjk6QEE6OT44Ojo6Oz4+PEE/QT6QrKKiqaanqKSfop2qqKOso6OnpqyiqZ+To5iWn56dpK6bn7CrqKyxyc3U18/Gu8esrbO3rK6jnqOinaGbXExDREZES1V4urirr6+mnJycoKShnZqUk5WUiX13cGtlYmhxb3F7hYqAdXBucXRwhbPCvcTR0NfW1tLWzdTW19TT0dPU1NPP0cPQ09bY1dbSy8nO0cvGzdLK0tXW2dXX09fYztLKz9HMz9DN09C/yMfKxMzMzM7PxcbHtr/Kv9LNzM/Gyci/xMPIzs3Q0c/NysjNuLe7qJ+lq6eemJ6jnp2qpa2pqKiSlYiQhIyRho2MiJOVmZCWjJiSj4aHjIR8eHN2cGNgZHJiXVJcSUpHQUVJSj47QTg9NDU4Njs4Njo8QD47Pjw7OUA7OTo8Ozs8Nz09Ozo+Oz08Pjw/Ojo8Ozs5Oz89OTU7PD48PD0/Pz46O0BCOzk/OTg7PT0+PzxBQEQ8hqugnKegp6Oim6CbqaSlqaCfoaGmn6ifmKSimqmmoqarmqOwsamotdDU19rSx8bLtLXBxbG1qKGkpZ+io15FO0FCSVpsmq6sqJuUl5+cmqCgnpucmZWJd2ljYF9fX19eX19dYmx1dHBwb2xycXWSxMfF1NbX19fT1tDV1NrU1M7P1dTU0dHM0c3T19bT1dDP0tPRydPRyNDX19jR19LY2dTWzM/Pys3Sy87QwMbDyMbOzdHR0snMzcDKzMbTz8zOyMTKx8fIzMrU1NHVz9LM08K5xbGlqLWup5uorKWdsqiws6ysk4+TjoiKj4OPi4SQjpmNk4+Zj4+ChYx8enFzdG1hY2ltX1ZQX0pKQ0ZDUk0/PD41NDo9NTI4NTU8PEA8Ozw6OTpAOjg7Oj46PTg+Ojo8QD08OTs9Pzk6Pz07PTw9PTo2PD0/QD08PT0+OjxAQjs5PDc0Oj48Pz89RkFEPYKknKClnaWlo5mcnaSeo6OfnZ+doJqnnpyhqZ+vraqqq52mrreoq7fX1NXZ2dHO0L+8zMm2vq6mqqiho7BzREBBP1NtnbCon5eVl5manJ+dmJyckn1wZWNiX19hX19hYF9gYF9gZm5wcG5rb3J3d5zLwNLV09jY1tnR0tLXz9POy9LN1dTSys/M09bS0dbNz9XV0cXR1MrQ1NXWztLQ2NjX18vIzsTJz83KzMDJwMjKzc7Qy9DOzszOz8jL0NHLzsrCycfJzMvM0tPN09HR0NDKvci5sK67uLWqtrCtqLits767sZqPoJSRjo2IjpCFkY2ZjJGRlY6RgIWIenZvcG9rYWRucGFXXFpJRkZETVhFO0A9MzM8PDg3ODY1Oz5APTk8PDg8Pjk8QDtAOj04Pjk4Oj88PTg7PkI6Oj08OkE9PTw6Nj08P0A9PDs9Pjg7QEE9Ojw4ODs+PD4+OkVCRT6Bn5mlp6Cfo6eam5+cl56eoZqdmpyappufpKefuLa1taykrK6+tLDA2NLX2tzWzs3Kw9LPwcCwqaytqaWqf2JnYmmHnZ+blZOWm56enpyTlpeUiGteXl5hZGJgYGBhYGBhXmBfXlxibXJvb3N0dnZ5pL3L1dHW1NPY1s7O1MvOzsXOytLSz8fOzc3Uy87TzcvX1tDM0dTLzNDS08rO0dXS1dXKwMrCxczCyMnDzMPFyMrKz8rNzNDN08vGyM/NyMfLxcbBxsrMzdDRxtDOzc3Mz8XHwbi5vcPDvcO5srK+sbvDxLWqmKWimZaRlZWSi5SNmpGUlI+PlIKJhnlxcmttZ2BgcGhZWGhWTEZMSVBRQjtDPjs2Nzo4Ojo1Nz09QTw6PD05PD05PT06Pjo8ODs9OTtAPD47Pj5BPDk9Pj1CPTs3NzU/PDw/PDw7PDw4O0FAPDo8OTs7Ozw9QTpFQUU+hJ6bqK2epKSqnJ6fmJKXm5+am56ZmaKVoamppcTCwb+7tbKxx8K4y9XV2drb2MzMz8jW1cTCta+0qJ+tiXOEh6HDqpaMjJeVkJORkZWWlZCLfGVhYmJgXV5hY2JgYF9gYWFgX11bXWdycnFyc3BtcnmkxtPPy9DP09TKxcnJxsa/w8bPzsfFx83K0sjLzs7G0dLQzczUysfLzs/Ix8/Sy9HPxrrEv8bJvcLHyc7FwsjAx83IxMzKy8/IxMTQyMbCxsjEv8HHzMzMz8LKy8jHy9DExce7x8PIycLPwb28v7DByca5vaqwsqelnaKcmJCbkKOZl5mRlZiJj4J3b3Rka2BeZnBhW1dgR0hIR0lNVEc/Sj02NDM1NT09NDg9PT06Oz08OTo7OT89OTw7PDg6PDo6QD1APD09Pjw6Qz48Pz04ODk6QD4/Pjw7Ozs7ODo+Pzw7Ojc5PD49Oz49RkFDPYOgm6qupa6qq5qdoJeUjpedmpmgmpqcm6WysazJzcrIxL68us3NxtDV1dna29jQyc/P0dPIwra7u62ktXNjf4C2rJCOjZaPhYODg4F9hIR+c2BbXl5eYF5gY2RjX11dXl9gYF9bWlxha3Jyb29rbG9wfbjRyMnKz8vNxLrAw7u7urq+ycbCw8DDyMvJyMrIwcXMxsjLzcnEwsrJwcLM0MXLyL+5wbvGyL6/xs/Lw7/Du8nHyLvIxsXKwL3Cy8bFxL7GvbzAw8XMxcW8wMrCxcfSxcDJv8rJxsjG0MPDxsOvxMvHxMq3v7y6tKmspKWYn5iso6Glm6Ogm5R7d3J0ZmlaYW5sWlxYUkRMRkJHRExERlNANTQzMzQ/PTM6PDw7OTw8PDg7PTtBPTo8Ojs3Oz05Oz07PTs6OD4+PEI+Oz88OTk7Pz07QD48Ozk5OTk6Oz06PDo2OTw+PDs+O0NCRD5/pZypsqm0rrCdnp6YnImUm5man6Kfmp2ov7i8ys/RzMfCw8bNzs7M1c/V2djZz8vSzc3OyMG1w76xsLFlZXqLtpCLkpaGeoCFhX92eHVycF9bW11gYGJjZGRlZGBcXF1dX15gW1laXGJvcm9raWxwb3OPxrzJxczAxsKwtrqysrOyscK8vLy6uMHBwcW+vbm9v7nEysXGwr3GwLi7xMm/wcm7t7u7xsO/vMHNw8a+vrXBvcO6vca7wrqzvMXEwsK3v7W2vr+7zMO8tbrIur++y8TBxsLFycbJxtDGwszHssfJw87NwcXDwL2zt7Cyp6ioubClrbCqrayUenZ3amRnYGhvY1deWUpGSkZISkFFQkVJQDk6NjQ4ODU0Ozo7PDk8PDs5Ozk6QD46Ojw6Nzo7Nzo7Oz88OjxAPUA/PT8/Oz07O0A8Pj4+Ojk5ODk3ODo8PDw7OTo8Pjs7PjpAQEU+fqygrLWqt7SyoZ6fl5qNlJaan52mop2et8XCxMjO0srKysfNzc7RyNDG1dTW183Kz8XJxcfAucW9q6+eXGlyl5SLiIqEeH+Ghn9+hHt0dGNcXF1eYGBiY2JiZWViXVxbXF5cXl1aW1xeaHNxbWdnbnByeZ29zMDDusC4rrCxp6qtrKe4tLe0s7O0u7W+srewta+yvMK8wcS8wLu1srq+wLjHubS7tsHCvLi9xsHDu7Wvsra6v7TEt7u0q7i9vcC9sbu2sLa6s8W8tq67v7W3tMW8vsPFwMPFxsjLxcDGxrvHy8DPysfDxsLDt8O9vba5vse/rLW6tbe2jnl0eGdnZWJrbl5WXmBGS0hISkZCREFFRT88OjU2NTYzMzs6Oz06Ozs6Oz44PEE9PDo7ODc5OTk7PDo+Ozk+Pz1APz5CQD1AOjo+Oz89PTk6Ojo4NTY7PT48PDo7OT49OT86PEBAPIi3pauzsby8sa2foJmUlJiXnqujr6qnpMbLzcjFyM3M0MzNyMrIysnKxNDN0s/NxcfBxb++ubfJtqqxklxtdZGOhomJenh+hoZ3d4F8c2hdXV1dX2BfYGRhX2RlY19fXFteXF1eWlxbXV9scG5oZmttbnJ8pMe/ubi1sKutp56jqqeeq62zraqsqbSut7Gzqa6mrLO8urbDubq6sau1ubu0wrqwwLG+vLu2u8e5wratqqiwssC2uL2wsKeys7W7vKuutaautq+7srCqubCtu667uLvAwL65wr/Hw8XAvMbCyMq4xcfGv8fEw7rExsK7xsnMy7O5wr27s4lzdnZraWFibGhZWFdbQUxLTUlFQUM/RkE6OTo5OTU4NTQ6Ojk7PD07Ojs+ODtAPD05Ojc5Pjk7PDo4Ozs6Pj45QT0/QD87Pjo7PDo9PDw4OTg5NzY4PDw9Ozw6Ojs+PTs/Ozs+QDyKwKuouLe5w62zqZ2ZlJaZoZymsLWxt6bFztLLw8XBxdDHzcHDxr/ExMPDysLJyr7AvMG6srS0w66psI5fb4CQiI6Qe3h9iYV6e4SAd25eXVxcXV9gX19kYmJjY2JgX15aW1paXVpaWlpcZW5vaGZnaWtucYGtubC1rqakp6eaoKWhmpylq66kqKKsqq2rsKSmn6qttbaxvbmvt6+prri0tLy4tLyvuLm1srzBssCupamjq7Gys6i9qquoq62ttLOmqK6hpK+psqanqK6mqLessbK3urq8sby9vr7Ev7XCwcfIt7/AxbfEw7+7v8TCvsTIzMq/vsTAwKmHc3RyamldYW9jV1ZYUEhZUlNLRkZFPj5AOjc4OTc3NjQzNzo5OTo8Ozs8PDc7PTs7Ozw4OT44PTs8Njo9Oz89N0E+P0A/Ojw8Oj05Ojs6Nzc3ODg3OTw7PDs5Ozo8OTc5Pjw+P0I7jMKvrry3ucSwtrCbmZWcmKqpsLGztb2vxdDPzMPIurrLwcq+u8m2vcO+usq3wcPBtLW7tbCutLutp6qRaWmHhIeLgHt9f354dH58c3dlX11cXF5fYF5fY2NhYmBhX15dXFpYWVtbWVhaXF9ma2ZkZ2Voam9yhamlq6Wgm6GllJ6lm5iRoaOqo6OgpqWopa2gnZykpqyysLa3p7CsqKq0q7S6sba2rra5srC6urG2paCkoKaxp6uouaqkp6eop7KtoKemn5ukpqyen6ekoKGxra2ssrSztLC1vLa7wcCyur7DwbK5ucOzwb2/tbi8vb+8wsfEw8O+wMSgg3hwbGJmX2tvYFVZXkhOZ09UR0VLRjw9Pz06Ozs4MjU1MzY5OTk7OTo6PDo3PD88PDs8ODg8OTw6Ozc4Ojo8OTg+Oj89OTg8Ojs9Ojc2NzY3ODg2NjY7Ojo7OTo7PDg1OTw6Pj5AO43ItbW9uLrAur22oJ6VnaGmurars7O7s8TPycvCxri2x8DMv7jJt7vFuLPEuLO+wKu1u7GrpK6zrZ+hkGdshoaGgHx5dXNvbWpqaXBpXmBdXFxcXl9fYWNiYGBgYF1cW1xcWFlYWFhWWFteX2RjYmVnZ2dqbW+Hnamgl5WaoZaco5mWjZ+ho6ecoKCkpqKnnpuim5+rsK2xtqOpqqqsrKS0ua23sKyzta6zta6wqp+en6SisqSmqbitoqamoKisq5mfoJ6ZnZ+lmpmjnJudr6mrp6qsrK2xsrivuLm7sLa8vLqrs7O5s760trKxtrW/tr7AvcPBu7u9l4R6c2xfZV5kZFhUV11JV1xLUEdJSkdBPD8/QDs/PDA0NTM1Ojs5Ozg5OTw8Nz4/Oz07Ozg4PDg5ODw3ODo7Ozo7Pzo9Ozc4PDo9PDc0Nzc2NzU3NDY2Ozc5Ojs6ODo5ODo7OTo8PzuJyba4vru3wcHBtKSkmZqkpsCyr7astLfGz8jIwMa7u8PDz766x7i4v7eywrSxu7uruLmwoZ6oq6eWnZBrfYaGf3hybW9ta2JeYWZmXV1eXV1dXF1fYGFiY2NiYV9cW1taWllYWFdXWFhYWFpeYmRkZWZmaGlrcY2onZOUlJuYm6KXlpGcoqKonpydpaaipZygoJuZrq6urrKgpqKuq6eitbGysqyor7KnurOmtqCin5yjoa2joqq1qqKjpp6lpqOWmZ6XmZudoJqXnZ2dnK2iq6ekpKatq7O0qrWws6uyubSvqq+ysrO4s66prK6yuLG7trq9v7ezsZSFeXVmXmVeW1lWU1pVS1tRS0lFSEtJQj0/QUFAQToyNDUyNDk5ODk7OTo9PDY9Pzs8Pjs3Ozs3Nzc+Njo+Ozo4Oj07PD06Ozw6PTs4Nzk3NDY1NTQ2Nzg1Ojo4Ojk5PDg3Ojg5PkA6gci9t72/tr68v7OdpaOYpbHCtba9rbS4wszIxr/FtsHAxs63wMS9s7m5s7+2sbi6rLG0rp6Zo6mfk5mNdICEhH94b3F0cWhlY2hkY1xcW1tdXVxbXmBhXl9fYF5cW1pcWllYVldXVlhXWFdWV2FkZWNkZWRkaGp2oZyTlZCVl5egl5mVl6CeoZ2WoaGppJ+eqJ2cmqunr7Crm6OkuKqhoK6otqqmp62wpLiwpLego5uZmaqmoZqsuK+ioaScop+gk5ShlJaWm5iXlpeclZ+qnqmkop2jqqqwrqi0q6qnrbOwpauus7Gwr66vpqiosq2xtLC8tLm3rqOUgXl1ZF5hVllYU1JUS01eTE9LR0dMTEU9QT48Qjw7NzY1MzQ5ODg5OTo5Pjo4Pj47PTw8Nz49Njc2PTc7PTs5Nzk7Ozw+OTk6Ozo4Njc2NTQ1MzEwNDU2Nzk6ODo5Ojo3Ojs5OT1AOnbAvLS5wrG+t72unaeoo6q7wL3Aua60uMHMx8XCw73FuMjLssHCwa28u7W7vLW4ua+ur6mbmKColJCJiH+BfXdxaWxydHBoaGVkZmJcXFpZWlxcXF1eXVxbXF5cW1xZW1taWFZXV1ZXWFdXV1ZbYmNjYmNiY2RmaYGWk5aMkpSUm5mdlpacoJyflqGgpqakpqefnZ+moKqvpp+ipLeooaGiqLSipailsKWxrqy0nqGdlZWpoaKUrbGxn6KjnZ6Ym5OLoZSRk5iYk5eXmJeep5ynoaKapKWlq6SlsKelo6urraaprq+uq6iqqbOmpqyvtLGvvLWxr6+gknp3cmVhXFpdWE5MUkhSYU1WUE9KTU9FQkQ/OT02OTo3NjQ1OTk7OTg4Nzs4OT0+Oz47PDY5Ojc7Njs3Ozs6ODU6Ozo7OzY8Ozg4NDc3NjMzMjEuLzI1NTY7Ojg7Nzg3Njw7Ojs7QTh4u7uxtb2wu7G4rJ6lp623u7zBxbqxubXEycnAw8bFx7bFxLLCv8Wrt7e9tr26urWyq6ynmJeeo4uIc4mIf3duY2FmaWhmZ2lmam1gXVxbWlpaWlxdXFtcXl9cWllbWVlaW1dVWFdUVFZVU1VSVWBgX2BhX2FhY2VqgJSTipGOlJOUnZWWl6SZoJedoaWhraakpKOjopyqq6Wan6WxqqChnaWrnqihnq2sqamuraKiopWYo5uckKupsJygop+el5mTip6RjZKTlpCYmJScoaOdpKGilaCipKabo6uloqSqo6uupa6yqaalpqa0pqmorbO1tLm6r6msnoxycW9gW1dWVlJHUU9IWltPUkpUS1NMRUZJRDg7Oz08ODY2Nzo5Ozo5NzY5Nzc6Ozo9PDw2Ozw4PjU5ODo4ODY1OTo7PDk3Pzw5Njc4NDUyMTIxLi4xNDI2Ojg2OTg1OTg5ODk7OUA5e7W0rbS7srCrsq2dqKevubmzwMi6tcCvxcjMusHKzMi1ybyxvsPIrLG4wbW7wLu0s6mrppWam5yIgHKIg3t0aWlqbGdqa21ram1lXVxcW1tcWlhaXVtbXmBgXFhYWllYV1hXVFZWVVRVVVJTT1FZXVxdXV5fX19iZG2OkISRh4+Rj5qTlZOcm6Ocm6GpqauorKeopqSZpa+llZmlr6qgnJmboJ6vmpyrs6Clpp+jpKGVk5uWlpKpqq2anJ+hoJuUkIyZjoyRjJGNlpWQnaKgo52co5WboKOhl6Koo6Koq6CrsKStt6WjpKKtraqoq6+zt7O+tbKrr5iFdHNoW1lZU1VSRVhMUVtYTVROUExQUUlOSUI9Pz9BPz03NTc5OTw8OTg3Ojc5Ojs8PT47Nzs7Oj02Nzo7ODk3Njk4OTo2Oj05OTU3NjU3MTE0MS0rLzQzNDk4ODo6ODo6NzQ4PTg/OX6zraeztq6oqK+um6morLe2rLzKu7a/rMvGxbjBzs/Is8S6t7vCyLCtuL+3vL26srSlqaCWl5iXh3p0gHZ3bm1obW1tcGdnaWdkXVpbW1tbXFtZWltcXF5fX1xYWFlYV1hXVlVUU1VWVVVTU05QUVlaWlpdXVxeX2BkfoyBi3+MkYqSjZeRl5mioJugq6qmrqyosKSpmp+toJWWpKmonZiQj5qerpeYqKqZn52UpaGekpGSkZOVp6qlmpmZnp6WjYyLk4aJjYOPi5KVkaCeoaSYlZ+VmqGinpSbpaWnqKigsbGmsbynn6Ostauup7C1sLi1wLGtsauRfnJzYlZUVU5SSkdWUFJRTExXTUpMTlJHTUtBQ0ZEQz5BNzU4ODk7OTo3Ojo3PD06O0A+Ojk7OTo/NzU5Ojk4NzY5NTg3Nzk7ODU1NzY2NjEzMjAtKi4xMDI4Nzc7OTk7ODk0ODs4QDh/s6ylsbeqpaKxq52qp6mysaS2xrS5urPKxbm6wcvQyrG2uLu9wcOxr7G3rbSzurKyoaKcnZeXlIN/d2tnbG5xbnFqcGtkZWdlXlpZWllaWlpaWlpaXFxdXFpYWFhZWVdYV1VVVFJTVVNWVVJOTk5SV1hZWVlZXFxdYWqAen92iY6HkIqXiZSUmJuZnqmboKqmpayeqJqgppyTj5+jm5eXhYSSm6OQlaOdlpaWiKKbm5SLjoqQmqSnnJWVl5uRkoeUjouBi42AkIqSkpKgmqCilpSYmZWippmNmaSmqKahoLSyp7K3oZyit6yqraSysqa1vLWsq7GjiXlzbV1OUVFMT0NNTk5QS0ZOTkpKTk1RSE1KQUdLSEhDPTg1ODg4OTo7Njk6Njg7OTk+PDg6Pjk7Pzg3ODk6ODg2ODU3Njg4OTc0NTc3ODIwMzAxKyktLzEyODc2Ojk5OTk4NDk4OEE3d7ampLawpKekqqWgqKals6qissO1tbKzxsa3usPKzMazrLq9tLfAr62psJ6mrbqvrJ6YmZyUk4d7g25fX2ZycHVxaW5pZWdoal9YWFhYWFlZWVpaWVtbXFxZWFhXWVlYVVZSU1JQUVRRU1VRTU1LTFNXV1ZYWFhYW11hb3N2cYWIgoiAkYSPi5SRlJ6hj5uco6KkmaWXopyVjYeZmoxzjYN+jZeWhpGakJSOjnuZj52Mgol/iZifo56Qk5iWhY2ClH5+dIqOepCHk5CQnZuampKWkJ2Oo6OOiZqgoaOkm6K0r6yvrZ+YpbimprGhsK6csLuqqa+qmYN3c2NWTVJPUE5DU05MUUxCUFFISU5STUhKSkRKTEZKSj03NDk4ODg7OzY5Ozc6PDk6Ojs3OT85PkA3OTo8ODk3NjQ0NDU4NzQzMTI1ODUvMDEwMikoLC0xMjc2NDc4OTo6NjU6ODdBN3i3oaO0qKalqKOmpaemp7OnpbTBuLC0sMnEt7nBzsa9s6y6wautw62noqaSnaa2raKejpSVkY5+eH5lV1ZfZ2ZpZ2huY2poZ2JcWFdYWFhZWVlZWVlaW1tbWVlZVldXV1NUUE5QTk9PUFNUUk1NSkhOU1NTVFVVVllbXWlscm1/hXx0TlhykIOXh46dl4uUkZ+YnZWUlpWPlomAk4pfO1dvfIuUiYCMkoyQhoZzioWXgXmBe4aTnZODlY6RkIOGfZN4cXCFjX2JgZGNj5eamZOLkImdiJ+YiIeWnpqhoJenrqmtqaielq2zoqatmayrmKizoqmto5N+cm5gW05TUldMRFRKUExMRk5PSUVMUU1LT0pJTFBGSUk9NzU5OTk5OTo3Ojs6Pj44Oj09Nzo/OD4/NTg5Ozc5Njc1MzMzNzYwLi0vMzQ0MTEwLy8oKSsrLTM4NTQ3Nzk8Ojc5Ozg2QTl5t6CjraGmpqqgp6moo6qwqKe0wbmwtbDHwrezvc+/ua+utcKnqsWpo52Yg5SbsKKZloWTjoqGfXN1XVBMUlVZWlddXmJnY19ZV1dXWFhYWVpZWFlYWVpaWllYWFZXV1VTUk5MS0hHYlxNT1JNS0hGSE5RUU1QUlRWWFpgbXBpe4J0UUJAf5WSkn2JlY2Eio2bjpaViZKIhpWGeYl/YEpRbniKkYR9hI2KhX9/bn5/lHh1dniEjZlvUY2IioZ7fniUdmd3hoh9iomVi42RkpeMhIqIlYSajIKEkpqWnp2UpKOoqaWknpqwq6GkpJGmqpaiqpyipqiJdW1mXltIUVFTTUlVTVNJTEtPSUhGSk5MTVRLUVBPRklDPDc2OTo4Ojs7ODo7OD4/OTk+PTg7PDY7OzQ3ODs2Nzc1MzQ0Njk2LzMvLjEyNTIyMS8sJykrKiw0ODMzOTc5Ojk5Ojo6Oj85d7abo6edn6GvoaeopaeosK2qtry2t7ezwbu2p7rIuLaoqLW2qrK8pp6Wjn+Jk6iVlIl9jYOBfHdwblhNS01OT0xNUVdbXFpYWlVVVlZWV1lZWFhZWVhZWVlaWFhWVldVU1BNSkVAQJtrc3NJTUtERERJTk9oWU5RU1RVWm6DdHd+amlcVY+JlIl0f4eBfIWMk4KSmouPe4aPgHaAeHNvdnF0jY2Ben6Kq4V5emh2e45wcm14gYuNknh6gHuAdnJykndodYSEhIV7lYqIio2LgH+Ei4yAlIN8gI+YlJyWkZ6dqZ6foJ2gqaWfnZiMp6SToaCWnp6kgHJoYVxdSldQUkhKWFJPSkxNUkpKSkxQSExRTFJUTUVIQTw3ODs5OT49Ojs8OThAPzo6Pj03PT03OTkzNzc4NTY3NTI1MTQ3Mi8yLiwvLzIwMC8tKygoKS4xMjcyMTk4Nzk4Nzc1Ojw7N3aumaOimJyftKmvqaWtrLCyqr20sru4trq0sZ+3urKqnZ2sqaiyr6GakY6UgY2bjZB+doV3e3VubmlZS0hJSEdFSEhQVFRUV1dTVFVVVVZXV1dYWFhYWFhYWVlXV1VWVVNQS0Y+OTNOPH6eTUhKREA9QURqlH5MT1FRU1ZedYN8eGZ3jZeYjY99aHmBdniAiY99hJiSgXKHj3x3e29rfq18c5CKf3uGkoF9f3RmdnyGbG9oc32JjIiAbHlxfXFtdo9xaHGBfo5wQ4uEgoOFf3d3eouFfYx7dX2Oko+YipKam6OWmZ2anZ6hnJaNiqSbjp6XjpaYj3dvbWViWlhYVVFKU1VUT1BOUFZLTktOT0pRTkhPT0xGRDw7Nzk7Ojo/PTk8Ojk5Pz87ODs9Nzw5OTk5MjY2ODU2NjMzNjExMjI0LiwsLS4uLTAtKyonJyouMTM2Mi84NzY5NjY1Mjc5OTV5ppegnpagpq+srquoqbGvsau8uKy7vrmzrKebsKesm4+WnKWppKCXmY+FknqIjYqJdXB7bXRwaWxqWEtGR0VBQENESUxMTVFSUFFTVFRUVVZWV1dYV1hZWVlZWVlWVlRTUUtENzhmNzA/qGlOSEM9OzpEioV6WkpOT1FUWF1lcHJtiKeqwH51eWN8eG98eYiQen2Lhm9tjJJ5dHhqaoCCcZaRi4F+loBJk5huaHd+gmxpY2x5hZCShmtzbHxucnuGaW1wf3ONiYSGe31+e3ZvdHOFgnmBeHB8joyKlIOWl5iakJKVl5mXnZaMg4mekYuSjYaQln9uaW5vblhWWFRSUVlPUlRUU1hVTU5ITktNTktDSE5HRT86ODk7OTk6Pjw5PDs6Oj0+Ojg6PDk/ODY4NzI3NTY1NTQxNDMyLzAyNCorKiotListKigqKCcsLTEyNTAsNTU2NzQ4NUhBODk1d5mRm5man6WtsKOsqqi1r66stL+rvMK/pqKZlaSXno2Ei5ShoZiYkZOLc456gIWLhXRudGtwbGRrallORUZDQDw+PkFGRkdLS0tNUFJSUlRUVFRWVldXWFlaWVlaV1ZUU1BMRTFAmjMganNDmW87PDk1PICChl9JTU9PUldaUVlcYKeIYpppdHplf3Btf3qLiXaBiIZ0bJqRdHN8amudj015hZKJhI5nMXaGc2x+foN0ZmV0foSEhYBmaWx1a3F/fGhxcXxuk46PfHN9fHFwbnVtgn93eXVqeYmCiImElpKSkIuNkZSUjpeNgHmIl4iGioaAkIh2ampvaGVYUVpXWVlbTVBVVllYTklIRUpKSEdCQEZEQ0c9OTk4Ozk6OTw6OTs6OjpAPDk6PDk4Pjc4NzcxNTIzNDUzMzY0NTAzMS4qKispLCwrKykoKycpLCwyMjYsLDU3NzU0NzhpTzg7NW6SiJqRmZakqK6esp+nu6+rsrDCsbvDx5qWj5SZi46GeYSQmJSNkIyPhnGHgnSHjIV6b3Jwbm9kcGZfVEZJQz88Ozk6P0BBRENFR0lMT1FRUVFSU1RVVlZYWlpZWFZVVFNQS0U4MC9cYLNHOVhQOzk0NDGWuotITE1PT1FWTEFJUUlir7Ogcnx4bH1tcoOChYF6hIaGeXKhlXR4gHN1lIc1cZ2onY6hoYSihHZwhnyHfHOMrY2JgGdnYmpucmxwg3Vpb1h1cI6bkndsf3t9bXFtcIB6c3VuYnaDfoaAhZCQioqJkYuRjIuOg3V4io6AfoOAfY96cXBva2BbXF5cWVhhX1JOW1pYV0xISkZKRz5CQUJHPkNEPTs5Nz07Ojs7OTo5OTs6Pzw4OD06ODs2NjY1MTEyMTI1MzQ3NDUzMS4vLCwrKSopKSoqKikoKikrLzNETTIxNjY2NDM8dlI3PTdikoGTiJaRnaSnnq+VpbWqrrGuwbK7wcaWkIyUj4CIfW6BkJKJg4qHj4V1goRslYiHe3R4eGx3bndjaV5JUEc+QDc0NDk7Ozs9PkBCRUhMTExMTlBRUlVVVldYWVhWVVRTUExFPDUqnUtbQC1nSTk0Lz+Sg6muX0dMTU5QTDdDTVJTREqGdoB8fHZ+bXeIiHx+hYN/jH52opl5foaAhJmEm5xhhqqfnYuDkI16d4h+iYiNc4qXkIN6XWRydHp7d4ptaGpieW+GkIJ6boF3dIR6cHR5d2tuaV13h3yHfIeHj3+LkpeDjYWMhn1xhH+DfXV3e3yJdnBzdGVnX1tbXlRcZ15XUVVYW1VHSkpETEc/RkBEQz5BQT06OTc8Ozs9PDo6OTk7Oz0+Nzk+OTk4NTY1MzI0NDAwNDY0NTU1NC0sKSsoJycnJigoKSkoKCsrKy8wMFVxPTIzMzMxRX5XND05XIx4ioCUjJKcnZ+mkaCroLGor8CxusW6lo6RlId6hXZrf4yRgn2KhI6MeIOAc6GEi319gX5wgH56Z3ZrUldMQEUyMTEzNjc2ODg6PD5BRUdGR0pLTU9QUVNUVVdWVlZUU1BNRkA6Mj0gI5ZjjFs1MzExaT9Hb0lGSUxNT1JMS1RdWVJKaYSIe4l5fHJ8j4x6fYmHfpeHdqGZiIePkpSljaypSIaur6+LgYCTioKLgYSSqIeAmJiKm3RtfIGGh32OaGdoeH9uhYeChXGEhUdsgHdyeXZobWtfd32DiH+IhYt6lZ2biYuIkX96dYt2fHhtb3d9f3NzcmxbXV1bY2NYZ2ZcVU9QVllQRExLRk5JQ0ZDQ0FAQ0E9OTg4Ojo6Ozs6ODg4Ojo/PjY7Pjc1ODU3NzMzNDQyMzY2NTY3Njg7REZMTU1MQzcrIiUnKykrKywvMDArbnUyMjQyMEyBXDU9PF6EdHx9iYWIkY+WmJKXoZ2soaa4r7O8s5eNkouYi310cH+Jkn59jIKSlH2Gfoakh4h/goiFeIeIfnOEeF9jV0tCNjAuLzIzMTIzNjY4Oj0+P0JFR0hKTE5RU1RVVFRWVVNRTkdDPzgwLCOHWz4/ODQuXZZwc6NVRklLTU5QV2BZcFpcXmqNk4eVgISChZGTfoWIkYGalYKhoZiVm5qlrZOau7Gnu8fDqIuMoaWPlImBkXxxg56fkZx/doWFipCIkGlob4OAdIyHhItxhYJ3h397doV9bnZ1ZoCUj4aJiYeIh6GqopaJjph/eoKJenlvZ2t4fnp+cmpkXlpaXWpdYWZgWU9LTldSUUhQSkROR0NKREJARERBPDo4Nz08Ojw6ODg3Nzg6PT04PD02ODY1NjYyMzQ0NDU3Njg2NzxCQj88ODo+Q1FeZVxHMicmLCwtLS4xKD+LWy4zMTBPg180PztudXBmeIN7gIyAgZGOipqbpJ2hrKarr7CXkZGEoZSEeHd/jJR8f5KGkpV/ioCSm46DgIGMi4KJjYN/iX9tcGpdQkE0LS0vLy4vMDIyMzQ3Nzg7PT9CREhKTlFSU1JTVFRSUE9IREI8ODcvOUQ+PDw2My5sk5dNUEhJS0tLTlZgY39nZ211nZqPmpOTi42OmoiTj52LoKCSo6qlo6yTqLaiqMHDrseveLqUmnyNoZ6ZhJOFgo+hn5OYkoSLhY+ZkZZscHWJi4KWjI2Pd4+EcW2FgYqWkYOFiHKIoZaHk4mOj5altambjZWig4eTg31/a2prfICBgXNhXWNeWmZrXGxrXldLR09TUU5NTEZJUENETUZBQ0VHQj46OTc9PDo7Ojk4Nzc2Nzs6Nj06Nzg1NDU2MzQ1NTY2NjY4NTU2MzEwLiosLCkoKS46UGFcQCwoLSsrMCwncog3MjQwT4RiM0A8dW5nWXCCcHWHcXaShn6XlpqVnp6cp6CplpOYnmdlpJp+hJKReYCSiJCSfYqEmJKRgoCAi42JhZCGhIiFeHh+Z01SPi8uLiwvLi0vMDAwMjEyNDU3Oz9DRU5QUlRQUVFTUU5QSUVEPjs8OkNGPz48NzUyPD9SNUhISExMTU5SXm+KfHOBfaCdnKilopmhl6KVnZ+onqiroKisqaq1l6u/q7bIyLfJ0c++m6Bwaaupn4STkoWcoZqbmaeRkYmVopqaeHp+lJiSoZKWmIGUnnt3lZKrs4iNl599lJ2cjpOWmaSiprawnZGZqIiWj42BiGxzcnx/fHFoYFxgXmJnY2BoZ1tSRUpLUE9JSkxGRk1DSExGRkNCR0VBOjg1PDw4OTk5NzU2NTg+NzU9ODQ3NDU3NTQ1MzY5NTg6NjE2ODYzLzAuLSosLy4tJyMqO1hiQigqLDEtKEuXXjA2M1GFZjJBQGlhXlBwdWBufWF3jn17lI6Oip+Sl56Wm6qYnqpCRH2HiYeYjXiCjYqOjXyKho+QjoGCgImMioSShYOGiYGAhndfYlA0NjAtMS8sLjAwLy8uLjAwMTU+QUFNUVJTUFJTVVJOU0xFRUA8Pj1HR0BBQDg2NjI8OTtGSEdJSk5PUVlthpB3lYujp6q0vbikrqysp6i0q7C2srKtu7Gzvpyzw6y7ycu3w7+4paOwsqytqqOLlpiFpqago5eBppmNoqqopIiFlKShoKqhpKmPnLGLlaOnt7uboKOwk6Kdo56RpKKrr62ztaKUpKqImYmSipV5en6FfmdgaFxlYl1kY19mZl9aT0NJSFRPRkhMRkpHRUZIQUtGQ0ZHQTs4Nz08ODg6OTc0NjU4PDU0PDc2OjQ0NjQ0NzM5PDM4PDIwMjU1MS8xLi0qKi8sLSooKiYlNVhYLywwLCwwhIE4NzFQhWg1QUNbWFRMaWNXanBYeoV2gZOFiIKbg5KRjJLayJ2Wc1aXiI+InI98hoyOiop6h4KHkY+DhYCLhYaHkoaChImGiIeHcW5hQEU2NDwyLzExMC0sKy0xLi0zP0RBTVVRUlNVVVdVTltQR0dFPD4+RkhDREA4Ozw1Qzs9RktJR0hST1BXgZOghK6js6qxwcfDqrPFtqyzv7O4vra/tMG2u7ukuMaotsnHtb65tKijtK2xsZuZkpqfiaivq6WUdp+kl6GrsbOZlqqtqK62u7K6rK+1orGssbW8t7WutaCnp6OomqmwrbK6uLinm7apjKWOkZOfhniCg3VZYWRWZWFhY2BhZl9bVEpERUxVUUhJSkRJR0VBQEBLREJNRjw4Njc7PDk3Ojk4NjU1NTcxMTw4ODk1NDY2NDk3Pj0zODkxLjAxMjExMzAsKiwuLCsrKyooJyopRVowMCovK2iSTzYwUodqNkFGV1FKTFtaUWNkV3l1cYGUfYWHk3aFf4CMe7+7o7yCtJSTjZuPhIiPkomJeYaAjJONh4SBjn+BiY6GgIaJhYqHkXp4bl1WQEVNPDY6NDZBQjc2NC8vNkNIQ1FbT1FVV1VcVk9eVUlLSkFAPkdLRkVEOz5AN0Q3P0JKSkVGV1RQXo+lrqOxtMO2uMHMyba7xL2zs8C3t8G1v7C3dLGzprrFpLDGubGzsbSopLW2qrGgoZabopKlsK6mraunpJigrLO6oqmyurS7vsy/xcW9vbPCt7q4v7e6t7msrLCmsaqtvrC9u8LCrJm6qJSuj5eXq4l9gnxqV2JhWGplamVXW2RZVlRJR0dMUUdDSElBSEQ+P0JCS0BATUM5OTY2OTo/Njo5OTY2MjQ2LzE5NTk5MzY0NjI3Oz0/NjoxLi81ODo5NjUwKigsLS0tLCwqKCgrKyhFUy8qMDBKj2s1MlCHbTY/RlJMQUxSV1RZVVp2anB/j4SBjoRuenN5h2K4oZmjiZWTlpOTk42QlpKHhnuGgY2WioGEgYp6fIuHhnyKg4GKg5V9eHp1ZU9cZEdFTDpRY2FbXlNGPztIUERaY1FRWVhaZ1lUYGBNU09FQT9JSkhFRkFAQzxFNkI+SEdKTFNaVF2Tr7i1urnJv7q9ycy7vMG8t7W7u7e9tLqxxmF1sqWxmp6qvaqlqKuqo6KytaGrqJ6Vlp+Yn66lp6aln6OUoqaxtKeysr22wb3TycrTxsLFy8HKw8C+vb+7vLe0sLm3tsO6xb3DyLCeuaqiq46lqLaJgH9xX2FiXVdhX2hmUlhhVlJVSUVFTktBPkdEPUtCPUJAPUY+O0hANzk2Mzc5PjQ4OTo1NzA0NS8yNjM4OTM3NDQyNj84QD5HS1JUU1FQT1FRUEpBOS8sLCwqKygoLC0sL1A+KC40OIB9PDJLiHE5PkNLRUBJTVBSTFFdZ2xscZCNhZBzbHJyc4jVwLWZoI2VmJmRjpeSlpaOhod9hoOMlop/g4CDeHuLg4d7i3mBioKXf3R9emtlcHVZXVxQZWViYGVkXVtYV1xNZG1VUm1tX25fWGdlVVlUSkRBS0tIRklISEdCSTlEP0hLVFRWXFpbkrnAub23xsC6uMrLure6tri5sri1tK62tplkdaicrXBeoa2cmKCim6Seq6WUoJ+QlI6WmJeon6WfnpqahKSdrKWqsKy3sL251NHP18/JzNHMz87KxsC/wsq9wbzBwMTExcq/yM60pLuwtK+bq7m8mn95bF1fXFhdYFljY1FcYFNQS0NCRUdFPEBFPkJIQkBEPTpFPj1KPzQ3NTM1Oz00Njg5NzcwMjIvMjQxNjk3NzU1NTVEM0VMTT41MS8wMDY6NDc3QElPSTstJioqKC0uLyxATSsvNTRtiUkwSIl0Pz5CREBDREZLT0RSXFlpX3CXkpCUb2xvdXWHs6yhoZ+LmZyZjI2VkZuShYqKfoiHjJCLiXyBhHN7ioOFe4l0gYmGlX9ze3hrbXV7aHJlaWxpZmppaGBmaWhsWm50l62kvIiHZ1tvaF1aWVRIS05PSktRS1RRSExBSkdLUF9eYmZpYZe3x7C5s7u+tbHEx7WwubCwu6uzsaeqt6yNtqedm6eaT5qdjI6glpGmmKWVipOTiZCJj5GRnpuhl5qVloeemqabrK+or6eztNTU1NbSy8/U1c7Tz83FwsnQv8rJysnSx8zNwtDSuLDDvMS5pba6xKKCbmNcXF1YYFdYZlpRXVdPT0JCSEVCSTtBRD5BRz8/Qjc7Qz5ASD00NjY1NTs6Njg3NjU0LzEwMTQ2Mjc4ODc1MzY3QzVCOD8tMC0xMzQ5PTk3LC4sMTtGSz0pLCguMDAwN0s/LTQ2VIhXMESHd0M7Qj5FQkFDSk0/VVlTZVdzkJCYgmhxb3l5g6CqnqaXjZubl4uOlZGajn2Ji4WOioqLkId8hIJwf4iBhnuHcoOSi49+cXh1a3F4fnF7bXhzbGmBcG1jaW5weGl3fH7Lv8Lfp21jeG5jW2FgSlBSVU5ZXlBeXU1QTlRRVVVcbm52gnKXrbistKewtqusvMCxq7WmpbinrK6hq7SjjrGumpiYjJGTkYSOm4GNp5KciYOLhIqJhIuDk5WYl5ObkZyYmZmenquspKehrK3P0tXRzczS09TQ1NHOyMPU0cjN0tPT183S0cXS1sXAzsfHw6i+t9Ceem5lXWJcVmBSXVtPUFRQTkg+QUZBQkU8QEI+RUQ+QD86PT08PEpBNDU0NjU8ODg4NjY0NDEyLzAzNTI2NzY4NTMzOz08RT1AMTErLzI0OT41OTAxMDIyLTJETjMpLzMuMzI9TjIzOEN9XzJBhnREOj09ST5AQ0ZIPFZSTU9bdYaFindsd3B9fn+hnp6hi42Zk5OMjJOPloV5hY+QjYuKiJGHf4J7cn6AgYd5hHWFk5GJf292cmtzfHt3fHOBd3FrgHNyaG9xenlye77Lm36MsoN2coR2aGFqXUNaWltXZmRYZWtTWF1dYGReY3h7fouBmaqkpKGgoaimqrC4qqW0o6GtoqOtoqexn4mmmpSSkYmRjoiBlIlrlaKNmYSAhX2Rg4OTlq2LlY2VmY6FkpCdl6ewoaChpKSoyM7PyMLL0dTR1NLO083G1tLM1NjW1tjU19XJ1NrNydfX0cqsxMPLi3NvYmBfWFRZUlxQSkdJSUpAOzo7RUJEPEJEPkhCP0JDOzs5PDpHQjQ2NTQ0PDU2ODc1NDMyNTAvMjU0Njc0NTU0NDw+PUU/QTYyLy0xNjs9MDgxLzI1NC8tLTtSMDE3LzUzMkZEMjg+bmI1PYF0TTk5QEk8QUQ/QTtQTEZLWXCAdX1oc3hygomAnZWdlIWLlomPioiOh49/eISUmYqNiIiLiX6DeHR7fYOHd396h5GWgINueHBtdX92eH50hXx5bYd2dG59doR1eXudto08QYvGpX6NfGllVklDZmNlY2hqZG94W19maWtuaW6Ag4mRi52eoJ2Ql5ifo6SmsqSks6ChpZ6hqaCisZyGnpKSkpCLjouGg5CEfpybjI2DhIV6lH6CqZWjjJKKl5KLfZeKmpGqs5iam6ecp73Dxrm2xs3S0NLQzNLLydTO0NXa19fY1NnYzdjbzsna2tLVv8vMtHh2bmRdWVJVUFpWRkdKSkVFPTo3OUBBQjpIREBFQ0FEQjs/Ozs3REM3NTY1NTswNjg5NDQzMzQxMDE0NTU4NzQ0NDQ5QD5EQkM8MzMuNkZUV09RSkFKRj8xKiguQlMzOTI1NC83Szc1PGBiQTxzdlY4N0FIOj9DPjw5UUVDSlRsbm9wYXFxc4aNfJeRnYt+h5KCiYaFioKHfHiFlpeIj4OHhYd6hHlxenuEhnV6hY6NnXqMcHxvb3p/cXyBcYOHgW6OenV3fXyCdX98h4iwdFmpwraMkoJwbmI9XmhycHFwbnh3gWVpb3J1eHJ7i4eOlJKblaCVh4yTm6Cbn6qfoK2copqZn6Wen6yZi5qMkZGNhH2Ih4OFi46gmZOIhId+bZl5hJiGiJOMjpSMhnubiJOPrqqUlZeemKeutb2prb3Gy8jJy8vPyMPRytTW2NfY19Tb19PZ29bP29rR1snUy5V5e2hoW1lQUlNeSENFSUk+QT49Nzo9Pzs+SD0/QUFBREA+Pjo4NkRCNzU1NDc5LjU2NjQzNTUzMjMyMzY0NzU1MzQ1N0VCRENFQjU2PEZOU01bbmZjbnNrYVY+LDRMRzg2NTQzNEJGND1XX2hMdXheODs/Rjw8Qjw6OUQ/Q0dSa19tZGJma3aAiHGRkJqAeoCNfoKCgoR+hHx8hJeOh4t+hoaAd4J5bnt7h4F1epKejaB2j3WCdHWBfXSAhG+Bj4JvkoR0fIGFenaGfIm3xqXCybeBlpuPd3BlTmZjgXqBd4aikIt4eXd7g398hHZtk5aUlY+YkIOKj5aal5emnJegl5+TkpejnZmrlpGQio2RgoyFiYiBhZCRnpyZiYWLgYaYeomJn5ePiI6Ki4J8oYmQi7yhmJOXmZyppqaun6i1vsDAucfJzc7FzcrR1tbV2dXX29TX2drb19va2djO3MaGenlnaGVgVFdWVU1LRE5DOzw9PDk6PD45PUA2PT9APD8+PDk4NjdDQTY0NTU9ODA2NjU1NDc3NDU2MTM4NTQ1NjQ1NjdISD1ESkU3OTI1O0g+Ozo6N0lQXVpSVVhLOVQ+Ozk1MzI3STg9TllNSHh4ZDU9PkM9PUA6Njo+PkBFUV9ZZWFdW2h0enlsiY2Sd3Z6i3x+gH+AfYV7foGRiYSFeoSIe3V9dG58fYZ+dH6SnpGfg5J8hn54jn15iopugpqAdJiFfoGJhXx+kHqPqY+Qw6C8jJyjnH2JhH2Jc4yKfnOmmpyYlIV7j5CJhGhHcKCknYyLkJKFiYuQkpWPnZqTlZGXjYyVn52UoZSSjo2Qi36Qjo6LhIiSlpqfn4mMlJKekYKLgKaZiISOg4aEgKWGiou4mJ2SlZaip6Gdnp2jrra6tau/xsrQyMfMz9PS0tjS1dfA19jZ29ja2tnZ19y3eHh3a2lkV2BbVFBPSERNQj09Pjk5Ojo5OTs9Nj8+Pjw9OTo7OzM3REA4Mzc4PjcwNjg4MzU3PDM3ODA0OTc2NzU1NTQ2RlA1RE5JODkzOEFLPTszQ0BJPDlEV048TVRITj85NjMzMz5DO1tYPjVZeXBaPDxBPD0+ODU4OT89RFJTUlheVVhmbW1taYCOinFyeYp7en99f3yIenx7i4eCfnWDhnlzenNtgX6FfXeFm6GbnpSSgIuIf5iHgJySboeohXqgi3yRjoOIhJx+mpGKjaOin5CkrqCLkYuFi4GShldyrYufq5yPg5ibkJCOXIKikYKMn5OVjIeIjJKTjJSUlJCMj4qIlpudj5WWkYuSlIaAi4iSjYmKnJaZo6OGkp2WoYuKiI6ckIOIj4CDh4WkhoyQs5idkpSXoaGfmZKcnqexuKylvMLHzcfGz8zPzM7Xz9HUrtbV2NrY2trX1tnan298dGdnXF1YU1dYQ0BJRD4+Pjo0OTo7Nzo7OjM7Oz89Pjc7OToxOUc9OjM3PUA1MDY3NzI1NT82NTs1NTg1ODo1NzczNUhSN0dPSzk5ND1FSkI+MUZDTEI5ODpHWEA1SFdJNjYyMjM6RUNlWD8mX3lpX3o+Pjk8Ozk4OjxAO0JRS0tTWVBUY2J4bWJ+koNubXeLeHl/eoF8hnx7d4aEf3NwhYJ6dXZ2dISDhX1/kqajn6Wilomdj5SXi4qol3KKso2Ep5GEmZOFmYuilqCYk4mbnaGSqa+fkZWQjY2IlYtujbeFmsTIspyhpZucmJaRspFkpM3Hlo+Fh4mQko2Nk5SKhYqKhpaam4+QlJOGlZeEf4+LmYiNkKqXl6SjiJmelpuJj4iXl4qEj42Bf4ePpYmNk6mal5OWmaGYn5mTnZujs7Slo7zBvsfFxcnIycLK08zN1KjS0dbW1tja1NPazoJyf2hjX11eTkpUWkJBR0Q7QT04Mzc7PDo4PTY0OTo8OjgyPzk6MjlJOj42N0JDMzI6OTYyNjQ+PTQ7PjY5NDk7NTc5NDRLUTxKUUs5QTdCR0lANjRKRUxGPjw4OEVUQTc+XDg2MjE0OjtFYFhBRmF0aExjWj41Ozo6NTs6PjpFTUZIUldTUkJjgUZ1gY59fG1+iHh6fnqBgYN+dnaAg3xsbot/eXx4eHyEh4t9iqOzp6Oqs6GWp5+lpJaVrqKDkLiVkrOZjaGgjKWbr6OknZiQp5anma2vpJeVlpSQi5iZlqDAjqTJuKuboqatmJGbnbKdhoWoopyYhYiJjpWNi5OPiIGGh4iTmJSMi5OThpSYhoSRkJx0kZmzlpeloYicmZOPipCLl5qJipaOhn2MmJ6JkJCcmpmTmJiflKCdlZ+bobGuoqS3vrTFx8S9w8O/xs3KydKnzs3T0tDW2NPQ2LtyeXZcYFVfV1BISU5FQkNFNT46NzY6Pzs8Nz00MjY2OTc3ND01PDU8TDw+OzxCQTc1PDs0Mjc3P0A2P0A3ODQ5ODc7PDU1T01EUFJMOEA9RUFHQTU6SkVORUQ6NkFAQlM+OURPMzIzNTc1PXZcPFJcdGlaTV1TPD04OTU2Nj06SkZER05bXFlJZmA7SISLentuhYZ6fIR4gIWBfnB4fH19b3ONen2Be3iGi4mGg5Knu6yosr2vpa2zs6ijorCsipq0nqO4pJWtpJaprbempKOfmamYqaOvsKqamZyUlZGXn5eZu7utyaFptrirsJSYnqOrk5e+o16qsoKJio2Uh5F8jo59g4aOj5SViIeTl4yQlY2LjJeYkp2ZtJeWq56Lm5SSjZCSjJmbipKekIuJlaChjZSNmJqdk5uYnpShoJScnaWvqKGls7irwsjEtbq9u8XHyMLRocbJzc3E19bRy9OhcHpoXVlTXlJPRkQ+PENBQTg/ODc0PkY8PDY8MzUzNTU0NTRCMzo6Qk06QTtBSEI7OkA8NzQ2PEI5P0BCODc0Ojo2Pjw0N1RLQ1VRSjc8OklBREA0QUpITkJBPzZEQTxKTkQvVD0yNTQ6RUpcWEpaUW1ncHBEaWBLSTY3NTc6PkpAQ0lQZUdiYGJwSUCLin6Bc4aHfYGIdYKKg39tfX18f3B3h3eNgYd7jY+MhoyZqsLAr73Gu7O0wby0rauzt4yosq6uvKqbu6Sorbm4q6amoqGjo6ivsrGrnZykmJuYl56ipaWSo7muqMC7rK2yuaWkp32Ih5ysvbCDjIyLkIOPg5GPeoGHkIyOnIiHj5iNi5WXlJCalp2nmrGakaydjpqPko6UkJCWl46RoJGJlZujrJSWj5ScnpSgnZuYoKGUmp6npqSipLCypsHHw6+wurbFxMK+zafHw8fDvNXRzcTKiHRzYlxZX1tNSkJMQEVHP0E/Qjs6ND5BPD01PTY+MzMzMjQxQTE3QEJOPkdAQ05DQT1DPTs4NkNDNUJJQjo4Nzg7NUI+NzlWS0RXT0Y4PTRLQEM+NEVLSE4+QUE2QkI/QlNFNThQMTQ1Ozw4O0Q+OUxqal07V1JkS2daVU83OUdFP0NGXGZGYGlnWl1bk4yMiHuHi4aDjHWGkIqBb358gn9xfoF6lXqRlJSYkJOVp7TGyb/CzMHDuce8uq+rubuXsra6ssCupcCkq6+7vKqtq6KinaeqrrSwqpufqpuhm5WfsLSni6K6urXBu6upnLKlpKiUhY6qw8SkgouPh4iEhpWUjXqDjJGOkaGMjJSSj4mXn5eTmZWYpqCvnYyqnI6Wj5KRlJWNkJWRj6GUhpefoLKelJqUoKGZpJ+aoJyglJiepqSmpqSvraXAxMOuqLe1ycO+ts6yxL7EvLPRysjCtXR5bVxYXGlTTEhETEtLSkFBPUNEPDVBRDs6Mz04QjMzMjI2M0EwNUlFTT5JQEhSQEg+Q0A7Pj1GQTVBVUA7OTk4PDdFPjg+VkpDV09HOD80TEBCOzVKS0NMP0I/PEJGPUFITDkrRzwzNjc0NjRBPzdPYU9hRS89PjZrbGpgQDpIPj9FQmZaTWVcZlRjapmNl4qMiJKQhol5hpSQgXKAfI1/eIeCgpB5jaGWqJqamLq+yMjKwdLJysLMvMGzrbu+p7q/vbzEt6zBqayyu72qsKmjpaOsrbOttrWgn6+epaKYo7S8qZuovMGjtravq5Kwrausl4aaqqalkYKMk6WViYB1ipJ6hY2RkJ6fk4+Ui5CNlKOZl5yVlKOfqp+RpZqMj4+QlZaIfI+VkpKjm5Wgopy1ppCel6Wko6WenqaYnpWXm6WjqKeisqyovMDEr6Wzt8zAua7Es7u+wriswsPCwJhteWFYV1xbS0tNSkZERElCQkFDSzo0REg5OzQ8N0UuMTIzNTJCMjZTSE48SkJKUUVLQ0RFOkVMQjw3RVY9Oz04OT88ST86RVVJQVdRRjdBOks6Qjc5Sk1CSUBDPjxERzxCQ089MjBIMzY2MTcwPUI6PWpqSks1UVMzU3BwZE47RD1ARj5qSF9YYVpkZFaej52Nl46ekomKf4mfk4R3hX+Vf3+QiIqQf5Whmq6mo5jCvcjDx8XTzc7Ny7vBt6+6vLS8y7zDwbW2vK2zv7m8rq+ooKintq2tqbG3mp6toqehnau3t6mlr77Dsb25s6eqtbOtrpaWpayooJGOkrHFp5WOfJGVfYiRmY+qmZiTk4+TlZOlnpOdmZOho6KcmJ+Zi42Qj56IWpCWl5KWpZllmKOesqWWopasrKunm56ml5iXmJWhpKimn7arqbq8xLWltLXLwbiptqyyuriuqLi6vbiDbG5aV1RVTkZKU05LP0FHRERIRkc5NUZNOz43PkFKLjMyMDI1QjU1UFZOPExGS1JMT0hHST5JUT86OElTOzs/Nzk+RExCQEhTS0BXUEY6QT9HNkE3O0hNQ0U7Qz00RkU6QkFCRzkvOkEzNjAzPkdEOTQ9dGRNRztFKzpmfGhXOz1AQkZCcUZpSVJlYkxGpZSclqGXqZaNkIOHppOIgYeCnISDlZCQlI6aop+vvq6hxr3FxMbGzs7O0sq+u7Wxuru8vs+2xL23ubeysbWzuLOsppyrq7iqqKevsJejr6SnpKS0wLCqrLS+wrnAubOnubW4sq6Vpa2vrqWLk5WhjXTBmn6XmYWPlpqMsZWamZWTk5mZpaOVn5uWmqmdnKGgmouNkJadYEqWnJqVmqWWVJawn6+cn6WUr66sppqgpZSTmZmOnJ+nopm0qaqzvLy7q7Cyx8C4paurrbGxo6GysrSkcW5mXFpOUEtEUFBQUTtHSklHSEJEPjlLVT9BOj1FTTA3NTQ0OkIzNE5XTzxKS05VTlFKUEhISk9CPD5NUjs+PTg6PENSPkRIUklCV05JQENBRjM+NThKS0NBPUM7NEVBOkE/PkhANSpCNTIsPmNdZzozNXRkZUBSNyYjM31pWDs6QkNAPVFFV1JzYldGSKqXmaCiqK+ZkZeHi6eWjoiShZ+HhJ2Xj56gmqOktci0qca6w8PHysjIzM3Gvrqzrrm4wcHNtsi6wbi1urGvrrK0p6ObqrO0qqimrayZpK6lpKisur+oq7a3v8G/vriyssOxub2so661rLqmiJyYppt2v6CFmZ2Ok5mai6+XoZybl5Wbn6GpnqigmZqqmqKnnpiQjZGdg252kqKalZ2inpCtsqOrlaiql6qupaSfpamTkpmciJScop6Wsaapq7q2vrOyrb65tqCjp6ilp5ycrKmpjGNlYV9SS01HSE5JVUw9TEROSktCQ0Q8UVU9QUFCRE8xOD03Nz9CNzVVWE4/SE5RWVNQUVRKUUpKRUFFTVE/Pz04PTtHUjxFRFFCR1lNS0FIREU6OjM5S0lCPkNCOTlDPjxAPjs7RzctMj4tMYJoTnpcLzBraGA8PUJCODZ6Zlc7Oj0uLlJgTVVIf2VeSEWrlJyhn7uvmZSfi5Oqm5GSk4mrjYein4ykrZSjo7bGvbTBusLCx8jFws3Iwr25sq+5tMHCyrXGscG8tLqrqK2ssKOimaq0uqappquqnaivp6Oqqr68p6y8s7e9xry3tbjAsb3As6m1t6u/pY+jmJGioLyfiZqgmZeeno+3n6mcpaObnKGaqKWzoZudppyoqp6ZlY+Um4uXiYylopSdop6gtK+lpZOwq5mrrJ6eo6OpkZWVoIOQnp6clamkoqG0tLq1rai1srOenKKlmpeVmaqhnndgXF9dSkhGR01RSU1FRkZCUkxKQUVHQFZSREg9QUdRMTtCNzpCRjc5XFlLQUxQVFVTTVdSTlVKREBKSk5POUM/NT08TlFDPz9QP0VaTUpBS0RHQDUzPUlHPz1FQTk3QTs8QDw8M0A8Lyc7KkiRQjpTSjAsW29XNzE8Kh1CgGRUNDktMTpnXEZDQ5xwYkdFp5ekn5/DrJuXpJeZqZyWmpqPqpaWqKaVra2Zoau2xMK7vrfBwsDHxL7Nx7u9ubKvuLO/w8i1v6+8trm3pqOqrK2goJqqqsShpKirpp6rr6yiqai/uKatvbC3tse2tbm4v7G/wba0s7SvvqOXpJeUnJSuoJGhoqWjo5+QvqWpnaisnZ2hm6afvaKZo5+iqauhnZaNlZ6TnoePhY2TnqSgnbWsppyVsqeZr6ifmqmeoI2ZlZ+EjqGam5OlpJqYrLG2saqlqq2snJigoJKOkJaonpRoYllhXU5JR0pOS0hFRElBPVBJQTxHSUhbUk9LPUhPVTRCRjk+SEc1Q2FbS0NOUlVXVlFYVFJVSEA4UVFQTTpHQDRDSFFTSUM7Qz5HVktDQE8+SzwwNjtHRj47RkE1Nj85Oj85OzE1RDAtLDBNdlw0S1o1LE1uVzwtPSkeI3piUTVDS1E5b1JGPEt4ZWNXTKKao5yexayhn6ydna6gk6Ofl6Wgp6mrl7axo6qytcTDvcC2v8K7yMK+ysi2uLW0sLOzt8HGtr6wuLS5tZ+mrKqrnZ2epaPBpaCprZ+kqa2voqanvbamsby3trXDsrO3ub6yw8C3uK6ztbWjnaWWkpShrqCZop2pqKujmsOtqZ6srZubnpmmoL2inaWYq6uspqGZjZqfkp6Jjld/lp6loaC4qqeTmLajn7KhoJuulp6OmZSdgo6fl5WOoqSVkKatsqupoaKlpZWVnJiLj5GTpJ6JYWRaY2BMSEpKTkZFQUZLPj1KQjk5SktOXVFRST1MVlw5Rkk9RE1JOEhiXExDTFBTWVlWV09aXklBPVdRSUs/SEA1SE1YU0hBOkBBRFBIPz5RPks3MDk5RkU7OEc/LjY+Nzg+NzcvMT85MSUxUVVtW0pPMTA9Z1dEMTc9LSt3YFM2U1prV3NIRTY9dWVcS06en6GZnsOnpaKzoZyzp5OqpKCkn62prJ27sKistbHHxMHCs8LDvMbDvMTKva+xtq2wtK+/xbW5sbC5tayaqLCpqZqdpaGnwqybrLGbqqKusKmkp723pre6vK62w62zs8K/ssazurestLatqqKmlpWVpKyin5+aqKuwr6+8sqagqamZmZiToqS4oKGkk6+vrKWnn5KhnpWej5CNlZ2aop+ntKanjZi0nKOvmp6brpCek5eUmoCSoZWPjp+hk4umrLClpqGcoJ6SkpqThYuSjZyef2FlW2dlSklMSlJBQ0BJRzs7Rz85OU5NVV5SU0o+T15dPUhQQkxMSTlNY11MRUxSVFlbU1VPXGJIQT9aUUFIQUtCN0ZFTEtOPjtCSEROQj07TkBBMy85N0NCOTdGOys2PDQ2PDM1LS80QDErJ1Z0U2VPPzEwNGJbTTIzPjA8dl1eP1tVXmZyQDg8SJZ3ZUE0n6Sfm6DDqKSqsqGktamVsqynoqSyrK6pu7KssLW0xr/ExLXAxL3JxLXAyMK1q7WosLiswMS0t66strmlmauxq6qYn6aXrbu0m6iwm62frrSyp6q6s6e6s7eyuMCqt7LCvLTFp76urbe1qqisoZeXkqaloqOYmKWvuK6ytbagn6ikmZWVk6Sgt6KlppausrKmqqahnpuampaYqJ+gmKGer7Kipo2Xrpmlq5eanaSRm46Tl5mFlp+UjJCcnpSLqamqoqegmJ2UjI6ZkIKGlomUn3hjaF1rak1QTU5UPUNBTkM6OklANzdRT11eUlZRQVdgXEJKU0hWS0g6VGRdTkZPTltXW1JQUVhdR0FCW1BCRz5OQzlIR0hOUD8/Q0lCTEI8MklBOTQxNzdCPjs3RTcrNjkxNDgwMi0vLjw2LSNCcWdzazIzLzFbYlozMzgwNnBbYkgwNUpwaVZDV0aMeWZDO6SknaGmv6aor6+hqbWqnbmwq6OqtLexsLm3r7a4uMW9w8e9vMPBxsC4wcbBuqq2pK27rcHDuLiqrbG7opWtsK2ylqWnkKq5qaCnsJ2qoLC0sqqptrWsvKyysrm3rLmwwrq9vqbDq7C3r6mrq6eemJmroqKgkZihsa+zq7G6m5ypoJmWkpemobeppaOir7G0q7Koq5+boKCbnqWcopado7Owmp+Qk6WaoKialaGelZiJlJiTlpeck4iQm5mUjqmop5+jm5eakoaOmYt+jZaFj5tqaGxhbG5XUFFaVEFDRVRAOztJQTc6WFBkXlBWV0RZXl1NTFJOXktKPlpkXk5IUE5bVVlQS1NXWkk/RFhQREY+Tj89SUdHUVBCPUNGQk0/OjJEPzc3NTQ3Pz05NUU0Kzc1LzI1MS4tLiwxPionKz1ccD0+MS4xZVtkQDE2NDdnWWBGKD84bH1oW1Y7iXtjQz2nn5yiqb2hqq+ro7G4qaW1s6yhrbW9rrO4vLq9trbAwr/JxLnEwcDAuMS9wbevtairt7K8v7+0qa6xtp6Xq62orZanqI6nu5+krbOeq6KxsLOsqba0tb2tr7G1rLC1scC6xLervK+xuKutqqOxpp6lqqCkl5CZn7Oqs6qrs5qdp5ualY2gpqS0rqeira2usaezrbKppJyfqKSelaGYm6i1qZeZkpKfmZ6gnpCrnpeXhZWYi52ZnJOKjZaXmpempaKgnZWVlpOAj5SFe4+Sg4yWZWxyZ3ByX0ZZZlZEQ01YRFo5SEI2Pl1RaFxOWV1HW15dTk1SWGRKSkNcYl9QTE1OWFdYUEpWVldNPUVVSkVEQU0/QUZISFFQQTtGREZLPTg3Qj02ODcxOT48NjVEMCs4MC8wNS8qLC8tKj0sKyUyKyo1SzEuJ19fYVUxNTA9YFZeOClDM1lVXGdLNYx6ZkxApJmgpKy3pKyppq6utqmvtLqnprC3xbextr7AwbW0usW+zMW5wr+6v7nEuMG5srWsqrq2u7m9tKqtsLWYmKerqqubrKuOq72eq66xo6ugsa2zrq62sbm3qa2usai1r7O7vMmyqrW0sbSvrqehs6CaqK2gpZWWmpqyo62gpq+WoaSampKNoqWnsqmip7Ksqralr7G1r6SZna2nmpifmZmsuKOXk5CPmJyhmJeUq56ck4CTmI2dnJqWkYqUk56apaGhoJiVkZOVeouQhXuMioOLkmtueG51e2BFYWpZSUhZWz17SkdFNkFiVGlbTVxgSltdWlJSUmJgTEtFX2BgUUxJUFdWVU9HV1ZVTjpJVklIP0NLP0VESEhRTkE/SEhIRTw3PT46NzU2MDk/ODY2QiwtOCwvMDQsKCwvLSo3NikoOS4kOks1LiJUYFVgLzUoQ15RXC4qQi9KR1BbSDNjWVVLRJmWoLCosqmtpaSurrWpt7S4pKu0t8m7tLq6v760tLfDwMzIu8O8tr6+wLi/vLG9rqe6ube2wbarrbG4lJemrquno7GqlK+7pKyysqeoo7KzsLGxtbG4s6iuq7GnuK+1tMPFtqm0tauwraqno7afn6eyoKSVm5qVsp6nnKCqjamjnpuWmKWlpbenorK0rKexp66wtaylmaCsqJucnZuUqbiclI6Oi5mcopeQmKWgnpWDkZWQnZyYlpWIl5CXm6eco6CSlZCQlnaEkId7hYGEjYttcXd1fH5cS2VsXEtOY1w/YntHSThHZ1dlW01eYk1YWVdUWFRpXU9PSGFdX1BKSFFWVVJLSFdVVk04TVpORUBGSz9IQkNLU00/P0xPSEA7Oj47NjswNDE8PTQ1OD8pMDcpMS4yKSksLC0rLTkkMDQyJTlCNy4jQU5IZjI3J0ZhTFYlLUIuPUVNUTwzcmtKREOQmaWupa2uq6eksLKzqrewtp+rtbnJua7BvMK3s7G1wsPOxb/BvbS9v7+6v7yzxKipubC2tr+8r6uzspygp7CtpaWwpZ6ytayrsrCsqai0uay0srWstK2prKirqbmtsbHHv7ikua+pra2mqK2wpqSkrqOpnJ6cm7CaoqOjo5GsnqSgn6Kqpqa5pay1taWqq6isr7avo56jqKqboJqakqS0mo+JjYeRoqCVjZSdn5OShI6Skp2bmJWUh5iTlZmmm5+fjJKQjZB3fo6FfHx9h4qJcXRyfn19XFNkb15OWmZdRkSWW0g7Tm1YYVtNYGJOVldWV1RZZ15RUkxjWltUS0dPVFNOR0lWU1xOO1BeSUJESEpBRT8/S1NPPjpOTUM8PD45OjU9KzMyPTYyNDk6KDQ1KS8sMSgpKywtKiY1Ki8mMCkzODoxJiozQmM7NipIZEhKKzpJPzNCSVMsPo9rPUhIj5uqqqKqsKSopLO0sbS1sbGhq629y7quwLvHsbSttMLC0cXFvsCyvsHCvL+3vMSnrLess7i7wLCrsq2gpKetqaiksKOqsaqvrLCurq2ss7untrCyqbKpq6Wlo626rKqxwrm1q7moqKisqqixpaqkoq6qqKKenKOslaSdmJ6ZrJ2ip6miraajray4sbKhqaKgq66wrJ6fp6ipmaSYmY+gp5iGg4+Ki5+gj4uMlpuOjoWHkJWgnZaXlYaWk5OXpJydnIqRj42Jf36Ihnx3f4eFhnRzcYl2bF9ZYG5jUXNxXEs7hHxGPld1WGFZTmNbTlVWVVdQXGJeU09OaFhXV0tHTE5SSEVJVlJdYzxQXUQ8RkhIQkc/PUpQTDo+T0o9OT89Mjo3OyozNT4xMDQ4NSg1LyosLjMwOyksLCclMjM0JCwyLTg2MCkoMTxdSjAuSWdERjg8QjA1RUtYMUCUWz5NRpSXraeiqrKcqamvtqy4ta6qpauqvci7sL23wq+wrLPEw87Ow76/tMDCxLrBtMnErK+3rbK4v76zra6rpaeqsKmnqLGltK6rsK6tsa+yrbO7pLizrKyup6ufop6wt6uqrbq2pbW1o6mnrKyqraGpp6axsqSmpqGhrJaqoZSboKaepKKrpK2jn6ext62to6Wim6mqrqmdoqWkpJigmZaPmJ2TgYKQiYWcoIyKjoyZjZCLg4yXo5uSkJuMk5KRlKKZm5mKjoqKfIaBgoN6dICEgn50d4ukiHlrXmBuZ1dlh2ROQGeSTERieVdiWFJlVE1WVVVUT1xdYVVLTWlXVVdJSkhJT0JHSVNRWW9BTVhAOkpHRkVHPj5FUUg4Q0tFODdDNzI6OjoqNDk/Li80NjMpNCsqLCsuIzQuLSsmKCs3OSomNis8LTIsJjA2V1ouMEpnQUE8PEMrOkpPXjREhkBISESWkq+ko6qwmKuprbWrtrGrpayqqbzAwLi4s7u1pbKvxMnL0b/Bu7nAv8K5wbrBxK6ytbGzu8C+s7GurKurqLaqpa2vq7mwqLGxr7Grtaq2tae0tqyspKmqnKOes7OoqKS0tKC1raGpqKuoq6egq6uoubapqqqqoqmgrZuSqaGdoKSipqOqnp2mta6opqqio5elp6eqnKKko5+ZmJ+Rjo+Zjn6HjIeEnp6HhIqKjo2QjISGlaKajoyakZKRj5Kfl5iWi4qDf3SGgX9/eHWDf3t4foCInY9vcWdncXhcYHOIak9dmFZIbXhVZFZSYlBNVVRVUE9YW2JVSFBpVFZTR1BZVUk+SUhPUVB4TE1WPTxLRD9AQTxAQ1VDOUFLPTU7RTEzOzk3KjQ6PSstMzQxKjgqKisqLCkqKC8qJiklMzssJDIpMjAyMSUvMlFjMDI/Zj1OWD9DLD5MVF8vSWs3UEU7lY6woKWqrZmrpayus7SvqqWvqai6vrzAsK64rqG1r8nHyNHAvr27vMK9usPBv7+usrKxtby8wrGys6qzqKS1qaWts7O5sKOutrGvsrqrua6qrrWrqp6pq5+ioLatqKGfr7OhtKqeqKeqo6qhoqytqL2urK6toaeon6uZkK+hmKKhqKefqJuZqrCpo5+soqGToqOjp5iaqKWXl5mdj4qHlYh9jYaFhKSWhYKCi4aOjZCEhJOgloiRnZCTkI2RnJSXj4mFhXh0gX99dXh5gHt0dHppgYajdWleZWyCdWeIi3xSWHBeSnhzU2RTUV5NTVJZZk5MVlllWUZTaVJRP0JOUWFROklITFNJcVFMUzs8ST87PD07QEBXPDw+SDczQ0IxNTo5My01OjopLTMxLS02KSgrLSw1MiMyKScsJS47LiYxLjAtMTQlLDBMaDo0OF89YWQ/RjFDUFtbK0hPOlZCNJCPsaCkpqujpqSsprSzsaqksKequL7Bu6+nuaqnrrDJxsjRwry/vrm+v7zJvMG4sLC0sbq7uMCys7usuKyitKanrLK2ubOnp7u1rba9sLymray1q62cqa+jn6WsqqecnqqzpLOomqqnqaSpnaOpp6m9qrOvrp2ppKCunJuyo5WknKSln6SamqirpZ6bqqGbkpuhpZ2Yl6mpkZiak5CKgo+Ffo+CgIiej4Z/fYuHkI6PhH+Tm5OFk6KMlJKLkZuSlYeIfn9xenl+fGl3fHp1cXF9aIZ4hIdkYGhjcoV6bWd5XV5WQld6bVRhT1JYS0xOcXRdSFpbZ1lFVWZQRD5KTkRDQTlIR0tTP2phSVE4PUg8PDw+Ojw/VDY6P0M0NUg+Mjs1OTAyNzw1KC41Ly0xMSYvPktIMSUaOTAlLCwwOS8sLCs2JzE3Iy0vR2pJMTRYPWZiQUo3R1NgVSo9O0VaPyqPlLGZn5+ppaShq6S3srKlqLGnrLjBvbWwo7mtqKiww8nJzMG2vb+1t7+6yLbDtbSztbG9uLq+tq25tb+tobOmqquwtbi0q568vKiywLO6oK+ztaqsnq6wo5ylqKminpylsaavoJ+qqaiiqZukqKCtu6etsK6hq6Okrp6eraaXn5uho5yfm5qjqqKamqSklZaUn6KWm5amrIuekZCRjIKLgYCPgXualY2JfH6Lho6Ni4qEkpiRh5SjiZKSh5Caj5OBh3x5a312eXhie3pxcHFzeGmBc2qDZ2RoYW9zjW1iaXBgcEFceGtWXk5RUUpKTVNZVk1dXm1XRFhgT15QSE1ERjs3SEVLTzxyaEpLOUFFOzs9PTs7PUo0OUI8MztHPDQ/MTgtNzg7MigwOS8sNS4uPS0qSz4qHTQ5JicuMzQuMCsvNCYsOiQ0MEJoWTEzUz1lX0RMNktXZU8qPDJQWz0jkpmsmZ+Xp6Sin6ejuK+uoq+vqau4wrqzrZ+5r6uotLrHysi/t8G+r7S+t8S2w7GvurKywLW7vrepube9q6S0p6iqsK65saqbu72ksMC1tKGut7Wmp6exs6CepKanoaWZnq2nqJ6gqa6noKaXo6igsLiforGvoayhrKScpqepmpqbn6OVnZyanammlpufqJKYk5idkpmWoaqQmomOkId9iH+Cjn18oY2NiHmDjIWJjIyFh5KajomVn4mRlYKLl4yRfYR7c299cXN0YHl4aW9wcW9qf3JjemxpZmRhZoZ/YFtyanJNTX9pWFpNUExKSFBSUUlOXF9uU0RYWlJnT0hLRUY1NkhCTEk1WmVKQDZFQjk6Pj0+OjpDNTk+OjNARjwyQDIzLzo7ODMmMjwwLDg1QiopLUMqLDQ7Tk5AOzczLS4rLTcqKjwlNTM9ZmQyNE0/ZV1GTz1SWmhIKj4vWlk1KJedpZiclq2gn6GkobersaS0tKmoucS1sq6gt6yurbC1xsjAt7/BubC0vbe/u7+vq72wtL+xvcO5qbu6t6eotainq7Cts7Gnmr23pK28tq+fsbewqKWnr7GboKSgo6Shl5uvpqGfoqevoqCik6Sko7ewoaaxq5+so6+YnKqlqZ6Xmp2lk5ucmp2mqpmcnKSVlZeVnI6Tl6OpoZCJipCGeoR+hIp6j5eKjYZ5goeEiIuOhY2TmIyOlpmKj5Z+hpeLj3qAenByd25vdF94d2RsbGxqaYRtZXJpa2ZpXWRzgF9aa3VpWkl9XltYT09KSEhSVUYyOV9ebFBEWFZZZU1JSUVFMDdGP0tCNklKSDs2Rjk0OT49PDk4QDg7ODo3QEk+ODw0LTM8PDc1KDU+MSw7QTEoKzY8IzhSPSoxMTM+RDUsLSc0Mio7KzEzOWNsODRHQWZbSFREVV1oRS47MmJVLDKWo6GXlJyqnaWhoqC3qq6gurimrL3Fs6+uorWvrK2vtMPEvLO/urews7m4uri7rq3As7S4r7/BuKy8urWmorOqp6mzq62yopzBtqWotbWpnrK7qqemqa+smaKnnKOmlJiisqSZn6SoqZyioJOloKS5qKSnrqeepaGokp+poqGgmZudoJKbnJagoaubm5mhlJGUlpqOlJOjqKSQiIqPhnmEfIWGfZ2NiouGeYCEh4iHkYWVk5KMkJWUjY6Ue4OYj4t3fntsdHJsbHNheHRoaGpnZm+FZ2doY2ZpamBpYmlmWmV7Y2BTc1RbW1NMSUdJT1NAISppXmpMQ1ZVXmBLSUhFQy46QjxGPDZLUEQ4OkQzNTc9PTg5NT86OzQ+OEBLPT45Myk4Pjw6OSo2QDMuRTQoKyw+MC1OPy4rLTcsMTE5NSwmLjUtODA1NzZgdEIzQ0RnW0tXR1VgaEIzNzllTycynqSjkY6kp5uenp2jtaynqrm3p6zDwbawrKK1rqevr7fAwLyywbaxrrK2tri3tqyqvbOvsrG9v7euu7uxpZ62q6WltKmrrqCfwquopbCzqqy1u52oqquxpZidqp6mpJGZpq2imJ6kqaGcop2XoJ2ntqavqq6hoZ6doZWgpp+hoJmbmZySmZ2UpZ2sopiXnpSTjZWXjI+YmqmgkYiJi4l5hXeCgoKdh4uCiXx/hIiGhJCElpWPjpCRkZGNk3uDlY6Gcn19Znhva2psZ3Vza2NnZGR1f2FkZmZlampjanFZXlhebWRhTmhXWmBWSUdIS01SWD45YGxpR0JUU1xbSUlHRUEuPD85QTg5UkdANzpCMDM3PTc2OTI6PDk3OjlETT1CPDAqPEA7QT0tNUIzNz0rKiwwQSpKSy4vKiszNzIyKDU3JCs3LjcyNjg1XHlOMj5IaVpMWkpWYmZBOjNBZkglNZukn5CMraGZmKCWpLSxorG9t6Gxxru5sLGjt6yqrqm5vbu7rcCyr66ttq+zuLOoq7mxr660tru2r7i9raadtaugobClq66epMKgsqSusa+3rbWera+trqKZnaiqpZ6Vm6iln5mlo6idmqCclJydrbCmuaiuo6Gamp6ZnqOapJ2XnpiblJqgkqiVqqebk5uckoyVmY2UlJmop42NiomPfIJ0goGLmIWHfImJhISKjIiShJOckpKPkJGWjpB/gIyNg2+Af2Z5bmhramdxcmtcaGNicn9hZWhqbmxnamlmbFxsbXVxYVRiaGRlWUlGTE1PWFFRVmFlgVRAVlNZVUZIRkVALzw9Nz82PEZOYTg6PzI0OUAzNzgyOD83PTg+RkpARDkyLT1BPUE9MDVAOUAxLSsuMzw7SzYvLissLTI0OzYjMyopNi41NTQ2NVp8XTE5S2pbTVtLWGRkQEExSWVDJzSTopqOjrCdmpOhmqmysJ+4wLagtMK7vbmxpbavqK6lt7i3t6y7r62qq7eqtLmupbO1sa6psba2sLK1uqeon7apnp6poqqtnKnAma2krrC2ta2tn7GtsKqim5yjrKiblZyno52aqaKklpqgnJGbo6uqqbufqKSgmJqZnqGPa6KWmJxxgpabpIB2kamnnpWVn5GJl5mAloqgj3mGlI2Dbmp+d4NxbIaLhn2Ei4ZvXmNgZ4SXhmuLkJSTdXeLhH6Dj39mhoBodWlmV1xpc25OUGpjZnGEZ19kZm5saV5fX4mQhIZnT0tEOEVUZ15KR1BQVVVLSFNhb3RlRltRVVBGSEZDPjE7PTY9NjwzZlw1Ojw3NTtENDg2MDpCNz86PkZMQ0IzNDM9QEBAPTI4QEU9MSwrMDg+RzYwMS4qLiovNTY4LCMxJzIxNDoxNzZYgWwxNk9rW05cS1tmYj5HMVBkPSsvjaSZh5Wwm5yToJuqrqujvcWvqbfCuL28raa2sKWrpLizsrOwua2qp6y0prC1o6i4trWop6y2sq60rbOiqZ+0q56ipJynqJqsu5Wmpa+zuK2upaiuq6yloZ6coKemm5ihpqWbm6ennZOeoJmQnqiqo7Wwo6OjnZaXmJejiKGOkpqHoYeUnaF/pX+mqp6SkpuSiIRyeI2OhIihdoiNaZeIZn1zeKFviIeEfo17f6Ggn5mAe4eedIiOdpuKbIeBg21oZWN6bHFiVIZtY2xpmHFYam9uhlheaVtraluIcG15coZoh4RaXkZOPkZeTUVSVlZRUVJXVGdeTFhKUlJQRUdHPjw0OT05PDc7MDw8Nzk5OjY9RjU4NjA8Qjs8OT1GUUc9LjU8O0A9QD41OUdBODIpLjE8STkvMDEuKi8oLTQ1ODMlJjIxMTU+MTw4WIN1MjVSa1tOXExcZ189SzFXYTcvKIyml4OcrJ2ZmZ2fqqqnqb/DrrG6vLfAvqqkt7CprKayta6vs7arqaWxraW1s5yttba0pqeps7Gtsqevn6qgsqifpKOaoaOcrrWVpKWmtr2mrKeqqqyopqKgmKCno5mZpqOkmJykqZaUopyVk6OlpqC3pKSgo5iVk5iTnIiuj5iUiamLl6KbhbGApKyck5mdlXmC1Kh/h5TBm8d5d7Glt5dkgMCcv3mEhHmPg3yQkJHKcZa8nMV7cranupB6gWyWsauweWhrWLGub2VpvJK8bmh5bXKP2H5TamO2sn+BcZR1mqGqkFdPV2FPVk5GVFtYUVBSjFxXXFBAXUVRTkVHSTw8NTc9Ozo5Oi49Ozg3ODs5PkY2Ojc0PkA+Njk/RVJJOi41PjtCPD9BODpKPjUyKjIyQkUvLjMyLisvKS0vMTg2LSAvNDE2QTE9OleDdzIxVGtcT1tNXmdcPkwxXF00MSGNppOBpqmfl5ydpayyqLDCvbK1wLW3vsKrprStramnr7Oqr7a0qKimtaanuK+ds7K2qqWkp7GurbGmqp6npLGkoqGel5ugnq+tlZ6in7S6oqqooa2upaKdm5qiqJ+Ym6ign5iep6eRnKeblJ2hp6KgsKOfn6OWlpOYkpmFr2pqio2qfmeElYetZXGdnJSZpZVxrqGkfne7fGuhj3axX2q0W6WAZpyRYGaBemZ/anhqqWW+cmemjHayanyxeHSSk2NtbadtW4SgRWlnh5ZFdZxgfWd7pKeCWV+Lq2mBlXh6aqc3Sq9bV1RsY1tLTldfXFdWO06IT1dWL0lUVEpERUY9PzQ2Pzs4OjkwPTg5OTk6PTxEODs6Nj1BQDY8QEhRRzkwNzxBQz5ARDhARz0xMy0zM0UzLi41My8rLyguMC46NS8nJDIwM0IvPTtVgnYyLVZqXE9ZTF9nWTpNNV9ZMzEbkaKVgqynpZ6jpKmxt6yzvb6wt8SyuLrCp6mwq6+pqbCvpLC6sKSlrrOjqbmpnrOysKOloKqtr6uvpqefo6KwnKOcmJWXm5ytppeboZ60s6Grm6KtraCemZegoqmcmZ6koJyZoaekkJ2jmpehn6yfpqegm5+hlpWRl5GahbWbtXiFqZm1mXeHs5u3fpOVlaiUfmuBpnqChYiSlJJ3q2drsVuse4+HlHSIcI+GgICIkJd4g4KLl4yDoI+EsHZ3n3Fra2x8i06kWEhjY5l+Y2imYHlydVOSh15QqW1jcX6HgGKdLlGhbltUa2dgTEtbZFhcWkI+sHhXWEEjTWlFQ0RBQEExOT44ODo4NDs6OTw5OkE6RTo6OzY6Q0I4PT9LTkc6NTpBRkJAQUQ8RkQ7MDIwMTtGLDAuOTQwLC4oLzMsPjgzMR8vMi1EMTw8U31uMytYalxPWE1fZ1g3SjlhVTUwHJWflIizpaahrqmns6ypu7bCsLzCrbi3waqsra6upq6yqaGvvKqhp7StpKu1paays6ejop6oqrKosKelnp+fr5afmZWVlpifraKamqSota+hqY+pqKqbnpWYoKWomp+co5+boKOlo5Wbn5ianaOrm6aanZuioJeTkpOTnIPVk5m5cLDCfsaGfNaUm7t8mZWlj42cjaR7joekgqWCeqx5j51Wr3uJfp9quVq5d4aEfaaCk3yYeqp5jpyPe7FtjoR0kLyFb5RQr6fFilGgemNgqmJzcodsl4hgU7W0yIaAiXxjpDNCnXZdUWpoY1BAWGZaZGFKSE1sS1tTT1lmWkNEP0U/MDw8NTk7NzQ8Ozg9OjxDOkY6Oz42OkBDOzZAT0xIPDo8REhDQkNEPEVGODEyMTFEQy4vMDQ4MystKS4zMjM5NzEjJTUqPjM9PVF3ajYqWWlbS1xQX2ZUN0c6YVE3MiWbopOYsaeopbOqpbSopLu3wbC6wLG1tbyztaexsKOws6afrraom6i5rqOvsaCztLCgpJ6fp6mwqLSppJydnqqXmJeWl5WWoauempeorbCpo5+PrKKnlp6XnKGloZehoaKhm6Kip5ueoZ6VmZumoJynlZybn6GZkJKVkZ2Ism5otXGrh2+OpnK0c3K2e5mYpIyPnI2ifpGgpX6wdoOR0tF2XK58hn+kb5uqpmuGhX2tfZeZj3uxc5OdjnizZZZ0hJ5vnmaUUsiLWsJcn3liX61fdnOHYpeIXlnKnW+/gXVNS7VTVcZkVFFqY2ZYQU9qX2xpT1VGSTk9V1JbV1hIQz9KPDI/OzU9PDQ2Pjs3Pjw9QztHOTtANzs+RDsuQ1JKRz4/PElKRkNFRD5ISTkxNzQ2QT4vLjI0MjUyLSkuMjYsNzQyJh82MDs1Oj1QcWg5J1dpXEJOVF9lUDVHPWFNNjIvoZyRpa+spKq7raa0pae2u7yyur+3trW6urOltLShsbKjn6ywpJimuq6ksbGdtLiqn6adoqqksaesqaSanJqonpWUmJiSkqOooJeTpqqxpqKWk62fpZKUoZukpp+UmqamoZujn62aoJ6dkJacop6cpZWdlZqin5aZlpKbhax7d6h2o46Jh6lvrYqCp4OYmaGJkpqKon+TmYmuhX+Cs1xys1KufYOCpH9x1313hX+PnYaZmXevhoqRnId3tGGaZZqBgpRsklqwWEuadZh5ZmCtXnZ3h2eYiGter3eVno94bDV5yK6yX0FUb15nYEVQbF9xbVZVTS5lY2lTWVE6QURATDo1PzkxPTwxNj85OEA9OkM6Rzs8Pzo+PkU5LUVVSkVAQzpNS0pCSEc+R0s5Nzw0Njo+LzA0MzMzLjIuLjE4Ki4zMiUhMDM3Njc9UGtlPiZWZ1xAPVZfY042R0NgSTo4OJ+dlKC4sJe0wa2os6ipsrq4s7i/ubeytr21pbizn7Ssn6Coq5+Vp7arqLGyq660pJupoKCoobWmpqqjmZ6VpaGUk5yZkpWipZqTkKesr6aglZmpn6KPkaKZqKWflJmlqJ2cpZ6snaGdoI2Un5ueoJiZnJaXoqCTmJGmnYapfX2leKGPjoOqcK2LgaeGlaChiZeXiKOCkYiUqnyAi515b7FaqIKCiKB5dNh/dod0p4GOm42SpHyWkJ+Ee7JenGSgfoOVbJJcq1tak3+Rf2hnqmNye4FrmIdxXaxaiaCOa25lT0pDoVxaTHReYmVNWmFfcnNfSlU2SpqTWUhFPUhGQUwzNUE4Ljs+MDVBNzhAPDY9PEY/Ojw2Pz1CNy5IVkpFQUg2S0lOQElLQEVOOjpANC47PjAwMjE0NCsqMDUvNywmMjEoJCQ2NjcxPFBlZUEmVWZbPzFVX2JMN0ZJX0MxPjihnZmZvquXtMKuq62ppbSwuLG1v7m6s7G3vKq7tJ+wpJ6lp6eelKqxqbCqtayrr6GYoaCmpKO5oqOroJebkaKglZSfmpSYn6CPjYypsK+mnZebqKafjJKkl6iqppOXqaeen6GjraShnqGNlKGYn6CSnZeclZ6hlZaPq5uPrm1ytHKpjHaKpnO0eHOzgJGkopKcjYmkh5B3uG+Me4uia2u2WqCFZZeXaaGip22TcrR0k5h/smqFk4itanWzYZ1mom+HkmqXXK1gTaF8h5FSc6NseX9+b5iGcFyvVjycd2ZUb24uXKdPYlJrZWFsWWJcYHB7Y1NZUT4+bXAzQkJAP0w5ITdANi47QDM3QzU4Pz8zOzxDREJKRk1JRjYySlRLRUJJNklKUD9ITkNGUD08RTUwOzwwMTAvNzUsKyw0MjYvIzAwLCwdMjg5LzlOYGVEJ1VkWT4vVV9hTDVGTV44MUI4pZqbnbqhm7LArq2rq6e3qbivtMC1vLGvubirwbapqqCbpqShnZKqqqe2o7Korqqgl5ynoKWruZ2jrZuWmY+lo5WNnaGbmZyfkZOUq7avp5mUnKyql4yTpZmlrKGRl6qypKCeqKuwmKGjkJmil6CblpuXoZOcqpyUkauZh9SSmrtzsMOAw4Z+1ZabuHiIkJeMmIqMp4h6o7Z1fXd2woKasmCDunnAfHW4YrWBjIepfZaBrKlxe391vIinoGmdYaaOr6F+jHSHq32+bnO8dLKDdXiAim6aiHFujaR0vV13fVthebxrWlZbanpeamBkZmJtd29ZW1lDQUByP0NHKzVIIic7PzEwPD83OkI5OT1DNDxATlpeYGBfX19aUFBSS0VGSjRITFJASk5FRk9CPEU4ND05MDIwLjg3LSouLzE4MCItMSwzHiw8OjA4TFhhRidUY1g8L1ReYEs1O0xbLTdBOaeanqG8opexw7Ctqqqrsae5r7bEsbqyrruwrsGyrKWinqOhnJuRqqSqsqS0p62kn5aaqpmmrLicoq6YlaGQpaCSjZyjnpidmpCWk6+5sKuVl6Oop5SQlqScpKydkaCoq5+bn6mjs56ipY6nopShmpyXlaSYj7CgkpWqnoWQmbaAkJGMuJV4gpObtXdua25zbnmPhI6Jc57Bu72ae4GyqHB/dJG4g3yGhouHjXuKho2XfKS7ub2cdXq0o3R2l3V0sHWZnmaGaY21dHJwd7aMXn95fYlog3lteWKLrHB1hX9ZW6dqRGRZU2ZgY11jUWdmcWx1Qk5QTEQ7Wkw+SjM8MCA4PjsuMz1BOTk/PTs8QzZCVFlaWltbWlteYGJgXVNHR0g0RElUQktOR0VPRj9HPDc/NzA3MC85Oi4sLy0qOC8lJjIoNCQoPjcvN0xUX0cnU2JWOCpPXV09KzpWVic9OzynnqCgv6WWtMO0rKunrKupu66wxq+1s663p7W4ramjoqaeoJ2ZlKykraqmtaion5uWoKOerKS+pqGrl5SdkKKbko+iqKKTnZeSmJSytbatmJ2kpKKLkpGmm6Wrm5aopKWcmqGppqejqaGSrZ+Xo56Yl5edno+wqZScp6KOan5pnKd4iXN+mo90emWHer6+wLpukoNxlIZfcmpaXpqJYWSHjpVrYH+VY22cdmKUa3+alZRlXmBjcZuKaXKMfYaVZ2p+cnR4fX1iW3d0gWhQXG6DfHuLa1hseoJySUpvhXBNdE1FV1xmYExbWGdjXk9bbXVpcVJPREVNO0hJPEw/MiwyQT84LzU/Qzw5O0A7PUM+UlZWV1laW1xcXWBhYWFgXFVHNURGVUVKT0hGUElJSDs4PTUxOi4wOzouMC03Nj01JiIvKjIsJTs4LTdKUl9JJ1NgVjQpUF5MKDM9W08nPzI+qJ+oocGjm7S6tqOtpa6nqLWxrMissLOstaO+sbKmoKOpnaObmpmsp66kpLWppZuXlaGbp62ovqepppWUnJWgmpOYpamnkZ6Qj5icsLK/rJumnqeiiZORqZqopJqbq5+jmZujp62in6qimrCblaagl5Wdn52XsKWYoqiZnJGdnKOkmaejmpyampqQloFnbX1xd5GXlJGFirWqjYaYlY6KjJeXh5SVioOSk5GJjZGTmJSYl5qgopqclKGdjoJ6pYVsanyQfIB0iYqBcYJ4eXZ2ioB7iWpzgXSDdWN3fXZrcHttYGNccGdNWVllal9XWm96bW1mU09GUzlPWk5STygrOkpCNjM1PUBBOTpDPjxFTlNTVFZXWFlaXF1gYmJhX15eW1RLQ1NHS05ER1BMT0k8OjszODksMjs4MjApNklSTzgiKSsvMiM0Oyo3Rk9bSiZSXlMxMFReOis9OFxLLDwtQLKgs6K/oqSxsregqqWyp6WwtarJq62xpbWmwKi0oJ6kpZyklpagq6aso6O2rKCZlpagl62ppcCeq6SVkpyXnpiTlKKfnqKnk5GYqKeyw6+aq52rno+WlqmeqpycoKyYoZqcoqWvpqGkqJ6tmJemnZmaoZ6enLCgnaKmlZiTmJSgopajnpegjpaUi4qNjpatj3yVm4KSgouqqIaBmJaKhI6fiHuEkIaFmZCHhomVjpuXjZCYnqSWmpORnY1/jWahs6+FiYR2eo+KfHZ5em9neZCBgIlrdYF5iHJoc396doOIgmt0Y3lmYGlkYmRmallre3BpalxTTFBEX1VGQD8/LDRARjs0NTs+QTs8Pz4+SE5OT1BTVVZWWFpcX2FjYV9eXl1eXVhWSktMQklPTVJKOzw6Nzg2LzI5NjQuKCYkLTEuLykrKjclKzwoNkNNTUQvVF1RMDVNWzE3RTRcRzU8LEC0oLmvvqyrrrKyoKqmsa2irLOwxbCqraOzrryktJygpqKhnZmXqKappqSms7WelZSdmZmwpq6+oKujkJGempmUkZWhnJepnISeqayis8izn6qkq5aWl5qnnaibn6SrlJ6fnaCqrqmlo6uhrZufoKGZpZ6cn52vo5mfqJOYmJ2RpZmYqZ6al2aDknxlfo6Zj2N5jWxoa3qRpKtrZZqYfmeFimVlaWh6jaGOa2iMl5Gid2tqi5ijn5lzbG56hIyHelhlXoWBXmyKiYB2XGhzd3eRgIeCbniCeIBzbXmDdHeIiI6De2qFWV5rdGRdc4hoanxxbGNdUU1XSmRYQEo0PUY3P0ZENzE8PT9BQzs7REdISElMTlBSUlRXW15gYWFgXV1dXV5fXVpVT0RIT0tTTj0+PT02NTM1NTU0KiYmJSwqJS8qKyc2KiQ7Jy9BSltKLzdaTzYpRVkvRE8xWUM7Py49pZ+6vLmvrLOxqqWora6wpq6tsL2xqaikra+xn62Xn6OeoZqZpqucrKOmqKmyrp6Vo5Cir6a2uaWuo4+OmqGZk5KboJmZpZZ7payiqLPDt6Sip6+enpWeo56jnKOpqJGeoZ6gqq+qq6Oqn6ibpp+ooayWoZulsKSYnKqVoZ6ak6WYnquZnn6+g4hytHKEnYataHi5xLhxk6Kje6aYmXOqgnzLwMC7cYuih4KffJWYiZ7AvYKWnZ6NncLBe4F7ko2aw8B9a6Wxb4yAb8p6f5t3kYOOgXd6gX95cXp/h3F4hYyTeW12kmJmX3hkX2SAYl50aG1kYlhMVklRWkhPRDJJRT9EQj4vPD8+QEE6OERDQkNFSElLTU5QU1ZZXl9fYF9eXl5eX19fXVxTTVBHVU5BPz89NjQ2ODI3NiomJSMpKiYuKyopMTAfOSojPklbTCojQlAvI0ZbM1BZL1VBQjsvOJajuMO1sK/AqaiUo6+psK+tprK1r6qmpqaxq5+rmJqioJybqqeinauipailpLSjnaKTpq2st7Onr6KSkZqdpZKRoKGXnJ+dh6erpKutv8CwoamvqZeSn52imaKjqqOSoKGdnq2uqKymo6KnoKWlnq2pkaSbqa2qnJ2qnKyhlpellqGjmJx/zpR5eqSBeZWWm1+uj16Op4GioHynlZt0q4OAr15jjal6p4eFoHSXkoizY4KrhqGOjbNqhK50fZaHuGGCrVmjzW6PdXvae3+ZcH6Ik3Z/ZXuIdnZrfYhufoWRkn5tgY5gcWtwZ2BfeGRbcGhqZGZgUlRSV15LT0M1QUhFRDg+NjtAP0E7PThAPj8/QkRERklKTE5QUk9TXF5fX15dXV9gYF9fXVpXT1VKPT8+PDU1NzgxNjQoJyQhJywmJi8oJiszHTYwJDc7U0wrLC1KMCc7XDtMLSFQQEY0LjGtwsC/tbSwuJiekaSqqK20q6ayrK2spKunsKqgp5uZpZecoq+foJ6op6OloZ+wrJuelaeurbGrqKyglJKbn6WTj5+ll56oo56upKuwqMDGs6ipsa6Wkp2copegqaqelKGfnJ2ur6eqqZunp6Shq5KttJamoquqnqOnpqGwoJKap5qhm5SUkZegcIWMl3WEqIdxsXydcax+oZ6BpY+ed6uCfa1/nHKtfquHhp92mJJ6fJd+qoiijJGLnX6re4mTj5+Ae61WnMR6j2+SwX2BlW11cIxtZXZlhm9hd25yb4mKkZCDbZCPZG90dXBgZ21kX29paW5mY1dTXGFaUlNDOUlJQEQ8PjxARkRDRUE9PDw8PkBAQUJFRkdFQENJU1dZWlxdXl5cXl9hX15eXVtaUkM+OzkxNDc4NDUyJiMfHCAxJyAxJyAnNB41LSY3PVdKLTwnPjEpM1ZARiEcRzpDMS4rsNTGxrK0n52jjqOjoa2vtq6osKepqqiuq6unoqSdmaKVn6arn6KloKioop+dsKyXmpaop6+sqKepnpeUmqOikpShrZudpqOvrKOstaq6zbGtp66slpScnaKYn66snJagmZ2eqbGpqambq6mjoqybr7GiqKyuppmmq6qqsaKSl6Olm5SShaRqpHWJeql0erJwgqWJmYxxiKCah6RgYFKshH+ug5t2roGmhoafepiWhntmgKOJpJmGgaN9qX6BlIeuXnypVZ2ikoF6op+Ae8OvxYxzr7OzuXFiqa/CdGiNjJiPgW2akm9teXd3b2xmZGVxcGZ7aGNdV2BqWFhVTU1RTENDQUI7Q0BAQkk8PTo5Ojw9Pj4/QT04NjtETFBSVFZYW15eXVxeYGFgX15dXF1bU0lCNjc5OTY3NCwmJCIgKCciKy0iJC4hMy0mQERXSCxHKzY2KjFQS0wjIEE5RDQsJ8PJ1tXAoZmrqKGvop6wtbCvqayjqKaqqquppKagm6SenaWnpqOcrJqiq6Gkn6+inZqSqqS1sK+gqZudlpSno5CaoqifoKacsaajp7GstsiytaqsqpWRnJyhmZ+ls52aoZScn6erq6OumqypoqGqo7OtoqqzsaKbqqivsLajk5akp5ibkXyqbJ6Eh3WreXywb4Kki4mflpWflIHSuLS4yYCBsl9flKmDpIiHoHmYlZp4qsl0maOVp6mQkpuMf5uJmsbGeGWhgqVzgZ+Ogn2vXnC1Y7F1S6OGbadHgpNkj5Cek3xwl5J/cHp0fHttW2ZqcnFmgWpeYlljbVxeWUlNTEtFREFCPkE8Qj9KOzc5Nzk5Ojs7OzMuNjxBRklMTU9RU1daW1tbXV5fXl9fXlxcXFxcWE1CNzU2ODUvKSglJiUkJiksNEVOUFBNRktKVkYqTDAvPi01T1RRHRw7PEYyLCSnpMHGua2ps66spaKcsrmsqqGmm6imqqyppqCmpZiro5+uq52loKyanqilnaa1n6KXk6iqtrKsm6WdoJWQpa2RmZyno6Cqp66io6eqsLTCsrOqraiTiZecpJqho66ml6GVmJylpquar52tqKaerKO3rKGyua+em6+ns7SzpZSXp6OZn46CnU54moF/n3qEo3yCpISHp5+cnpOEuHt8ebmCfszGwrZ4m6GRi599mpaXinaemIqkmKOofrCFnIWehKx9mZRhpWyjcI+FkIF9l4NyrGCkc3GAmmC8fVJVdY6Ro5d8fpKRinR6c4R+cFttbndyaoFvWmRfaG5iZF1LTVFUQklIRkk6OUs+QjEwODg2Njg3Ny0qNT09P0JER0lMTlBUVlhZWltcX19eXV9fXFpaWllVU09IQDc3Mi4sKi4rKicmP1FUVldXV1lYWFdVT1VGPEUzOlBbVBwbNj9ILC0gi4eZqaykq7mrr6Ccoayzs6afoJWlrq2uqqedpqaao6ehsq6iqKayoJmppJSitaKjlZehqbS5pJujnaOTkKGymZ6cp6ahoq+unaSoorWyw7Gtqq2qkYeQnKaco6ScpZeemZmZpaSomq6hrqWml7ClvK2ht7etnp61srmxs6eYna+ho56Gj9G1w7d5h46FkZOPgKZ4lKJ3jKCShKWBinGqhoS0bnJqmaOblYqffJiZhoePc6+CpZuijaaLk52JlJCbbXCyXKVzk3qcbJl/e5l9bqlhonFxf59ic7K4aHiPk6aYfoyMk4p3fHmNgW1peGl4c25/dF1kZG5tZmhgSlpYWDxIR0BVM0BGPjwqKDYzLjAxMykmNDo7PD0+QENFSUtOUFJUVldXWV1fX15eYGBdW1paWFVSUlFGOjIyMzAvKysoQFFSVFVUU1RWV1dYWFdVVlZUUU9RW1UlITJBSCQpJZNzjYqtv7+7urWel6ikrbWho5mVo6mnrqqrmaWin6WgoLWmoqinsKOUq6OOpK2jnZCamqq0tKSdpZ2pkpSXrqCgnqeknKectZqgqqO2q8OwqaupooyEjpyhoKailZqbnJmamaakppirp62ipZutp76slb6wrZ+jsLO6rLSnm6ixpKeYeqiQfXywd4qBpKWInG2yb6GHrXyhj4OolZiArIiFroWflKmgoZaGn4CZlYB7kn6rgJ2aloqqeJ2gj4mTkoB5r12jgXymp2SdgHyXdGuvXaVrcYWZXWBbjKBulZGmmYOUjZaLenqCln9rbH9ifXRtf3pgZ2Vxb2hnaENZYFs9S1QyVThCQkM3JCQzKycnMywgLzY2NzQzNTlAQ0ZJS01OUVNTU1ZaXV9hYGFhYV5dW1pXU1BPTkk3MDUyLiosQVRWVlZVVFVVVVVUVFVUU1RWVldYVlVVUUhGSUojKCi9kpqEqcbCt8G0n5utn664paSOm6SjoK+vqp+kn52tmJ65oKKqoK+pma2hkKqopJaJm5CusKymn6ebrZiYj6yioZ2mopqlna2Yn6imtqnAr6WqpJ+LgI2bmqCmnpKVmpqUmpqlo6OZqKuro6Sfqai+pJfDrKqioayyuquup6Czr6mqmHavfpCLnIWHfbqtiphlsIxlla19oY+DppWagayKhLCFpZmkoaGQhaBbbGqBs2B/rXt7goCxbGdumZeMiLBbfbRbpINryKJln4B7vFl2tVqyfVKvgHqsWIChbZiPqJqKl5CWlnt4jZx9ZHN9YoN3dIB8YWpmcW5mZWVPVWNbQlRePkkoPjk9NCEiLCUfMi4gKjEvMDQ1Nzk5PEFDRkhKTE5QUFJUV1peX2BgYWJeX1xbWFVQTkpHQzU1My4vQFVaWFdYV1hYV1dYV1ZXV1dXWFdXWFlaWltcWFdXR0I70p+zsre9u7TBs6Ocraaltqihi5qgn52zs6meo6CdtJigs6iqq52vrZ2rm5WvqaKOiJuOr6ypp6Knma6TmY+omqKepZ+Zo6OlmZ6jqbKovK+lqJ6djnyLmpWhoJmQkpqbkpmXqJ6gmKitp6Wlo6Wpu5+gxqelqaGrtLatrqefvK2trJWBqZKjr4+bgIakl5iQgYC4w7qDjp2ThaeXnIKsioKviKabmqWqkH7VvcKqYqO/vX1+o4KD17q4tYWUk4Oevb6EaqOBb6uEbZ1/erKwx4Nqq7C9rXh3or67dICWjqacj5qRlpx5gZCaeWN9emSMZnmCe2BrZWtqYlBiW1NqXEBUYUJOKT06NC8eHyQeJTIgHSQoMDQ5NjY3Nzs+QUNGR0pLTU5OUVRXXWFcX19hXmBbXFlUUU1JQz88QT81PVNZWFhZWVpZWlpZWFdXWFlaWllZWFlbW11dXFpWWFRXWryVs7Sxv7myvbOina6mpbOmnYuYpb6pt7Goob+mprKbnrGcuaiera6lppWUsKyXjIObka6mo6yhpJyqoZiLo5KnnqicmqGpopmeoKutqbmuqKObl5N7h5mRppuTj5GYmI+Yk6mZn5ipqKCqpqGjq7ueqcWjoK+jq7O1q7CqoLuor6+ac3WqpLeGZYmfcGetj4qPbW93pJCZn4F1rpmVcI+LcZWno5uYrqRybW1tZYp4b22CmXGAeWlxaWeJlpWYcWhphIZncIZkXYljam9ZXWd+d6ZgYnGOkm9mZICNko6imJeYkJWefIeOlHVmhndojWp5fnlkbGNmbGJLZFhKa1k6UWVFUidLOisjHCAbIywpGBsYLTIuNTo0NTc6PD9BQkRFSEtMTU9RU1ZcV1pcYGBhXV1bVFBMSEQ9OkFCN01YWlpZWVpZWFhZWFdXVldZXV5eXVxcXF1eXV5dW1tVV16ola2zqrq5srOrqaKunqOyqZiSvbHDyL62qp7Aq6yjoKesn7qjpK2srKaOlq6pkIyFlZetnqaqop+jo6CRjKSSp5mpmZajqqCWnKWlp6+6q6yam5KSe4SWjaWXjZGRmJSNmJWnlJ6XqKKasKaeoqy6n7DBp6Szpqyxsqutq6e5pK64loqhqKW2nYmWopeHqZqQlJ2TqrOZm6OroLKWoqGdoKKcoKShlaumjJKSjIeSnJyUkJqTmJCNlYaBpJmXlY2Lk5KKj4aEfmeKf3SCdnSHjHGnbHuVkZSTgYGPj4+PnZSglZiWoIKHk4xwaI92cIp3dnx6amxkZG9jVWBYQGlbSGNhT1orRj0rJiE3NDAuHxwhJTIoKjY5OTQ2OTs+P0FCREZKS0tNUFBRV1RWWV5fYWNdXlVRSkVEPjk9QEFTWFtcWVdYWFhYWFlYWFpbW1xeX19gXl5eX19gYGBfWVlgpZapqqW1t66uorCkrZ+gtbGQjqvFvMS7uKqipZ2bpZ2wqaO2p52ptKankZisoouIiY+cp5aspKGZp56ek5Wjl6iaqZmUpqGjj5qnmaG1uqirmZqQjXyBlIuhlIqVkZWQkJOXpY+emaifnLajnaest6evwa6jt6avr7CtqamzuaGvvZmSpqOmtqKSnaaejamfjZKfo6yvmqGjsaivl6SgnKOpnp6dnJernJKZoZuTkJaqmY2ZmZaQlZ6RiaCdlZSFkoyQjJSKgH5mjIZ1hnZ5iINznGqGkZSUkYp9jJaSkpiToZOdlqCDh5eGeXGVcnmJf3F7f2puZF9waWBbYFltY1BgZFBbOkdHRD0yPT03LiomKykmHSY0MDY2NTg6PT0/QUFDSEpHSktMTVNTU1VaYGBpYGVWUEpBQ0I7OUVNVlteXltaXFtbW1xdXV9fXV5fYGFhY2FhYWBiYmJkYlxbY5eVpKijsLOsrqOpp62gqLWqkJCdpLO7r6ysoqOaep2isaSlsKiWm7imopSZqpyOhoqJnKOQrp+jlqigoZKXmJuui6uWj6iaqIyYqI+eubakpZmbjYl5gZOMmpOKlZGUkI2RlqKMnZ6onp+4pH+Er7WisK90pL6jsqB4ep+psruVdq2kn4qAqn5kXGJ2n46knoSXfm6Ts5yjp66romWen5NzeZmXcICYqJdsf6KniWWcpZyRl5iWi5GbkYadmpCVgpKHjo6SiYV3a4+HdoZxfIaAgGFpiIuVk4tbdpWRZ2iQjnJ7pZiYZHmYhoF3l2mDioJueX9rcGVgdm9ra2hbZmViYm9TWz5OTk5SRz1AVEI5MS8eHyY0OjMxNjY3ODw7PkBBQkZIQkZGSUtMU1RVWVxfaGZnV1FKPERHOzhVUltgYWJgXmBfYGFhX1xdX19fYWFiY2RhYmFhZWRjaGReXWablqajobCxrKuppaito6etpJKWq7Wvsaaaqqarl3OMnK+fqKqmlJa4oKCPnKOdkX+IiJuejauao5Wnop6Ol5GehXWukIimmqeRlqOIm7q0qKCZmIuJdXeTjZaTipSRkJSMj5OgjpqfppmcspaAjJy1nbOMko+8p6F+p6J6oq63gY6Opp6Ei4WPsamvjImWo5p5gYushpydoqepqIeVhph2pZt6h5uBl6aCgXucsXqKhaCXmZSYloGQlpaEmZljeYeQhI2PkoqDbXCPh3mAcYCBhX+GdIaElpJ4lmiTdKCadH2Zg6Cchph+kYmBg5hqjYyFa3h7cXBnZHduaWxrW2VramVzW15JVExRQEU1LllUVTYpITA5PT42NDM1Njg7Oj0+PkBESD9JRUpLR1JYWllbYWFoZllRSDlFTDs+YlZeYmRlZGBhYWBiYl9dYGFhYmJiY2ZnY2JhYGVkY2djYWFonJijn6aurquorKCosKanqaWZlK7GvbChlqaotZ6Pg5yrnKahn42Qvp6ZjZ+aoJB9hY6Zl4irnaKWoKGSjZOJhoCRqI6Hopyjk5adhp+5sqeem5KOhXB1kImVkIqUj4+bi4+Rn5KWn6SWnqyIn7SJtJqtisqHqq6It4WNsIOxroOpjaaYjZ18qI9ye3ebjqaWaJWkebSLn56mqJKZwoF/q4iYoXGegJmkfZeFlbGAoXyhlKCQmJaAjpObipeRi3yFk4aNlZOJg21zkYV/enKGgYR8hHSFgpeBj8VmgKmHj6NrnoOhmYKZgIuMg4mYcI6ShWh3dHt2Z2h1cGdnbF5jb2xnbFhnR11RTDJFNDZNYGM3JjM8REdEOjY0NjU4Ozg+PT0+Qkw/TklKTENQWl1cV2JeamxcUUU9S01ASmRZXWNmaGdiYmJiZGNgX2JhYmNjY2RpaWNiYmJlY2FmY2JiaZWXop+wqKmopaugpLmwqqummpSgo6Sqo5akqbajr3+gp5ylnp2Jk7yZk42gkZ2QeYSWlpGHq5mbm5qihY+Md5ucj6CRiJ6km5WYl4aiuK2lmpyMjH9ibY+Lk5CNkIyNmIuQkZ+Pk5+hmaGofqGnh62doJauj56dnZGGgaCNq6+GpI2qmoyafqJ2gJmTaoGrdU2reIeNnZGbqKeAqqt9g6F7eqdpnn+Sa2eXhpe2iZ59bmBkWYOWfox7ZGiKcpl9eZVsXXuXbV9TcIRcX2x5g2BZZYJ9hIGYcaeqa4OjbnKlcJ+Dnmlln2xbbYl7ZVlfg39iV1BvdmVtdHJqam9eam9tbGlYaU9dV0U5QTRHQ15rNCxJQ1FNTj04NDg1OTs2QDs7PkJPPlFSTE1CSlxdX1deX2N2YE1EOk1PTVRiXFxmZmlpYmJkYmRkYmFiYGNkY2FiaWtkYmRkZ2RiZ2VhY2iYlp2guaGqo6askqG2vKuuopmXoKGlra2gnK21oqiSoJ+fppuZjpi0mZCKnoyVi3WBlJGNiqaWlZien3+ShYaspIeckYqYqJeZmpGHpbCmopWaiImAaW6Ih4uOjoqLjZKLkJKijJOeoJyipX+TgY+joZSgd5yWj6eDoad/hqmthaV5in2Emn2icHKTh5V6nYx5bYecjJmQm6iaj4edfIKic3amZp5+dqRfmHp9knOibpi3tLpzkoeBf7WoZIHGuHtwlbeLcYCbpGNzrKtgfWqds35ufYeDjoKLl3GAo2xzpHOeg3+kX52Zs5VwfJeetHRzW56yg2pib3N1cWhvWGtscnNmXGleYktEPUQ1UUFZcTM9U0dfSlI9PDM5NTo6NkQ7O0BJUD9UTU5RQEVfXltaV2BgfGRIQzhMV1VWYmFaZmZra2JiZWFkY2BhYmBkZF9gY2tuY2NkZGhkYmdmY2holJaVo7mZq5yToI2kuLWuraCbopyjo6WunJuxrayTl6CYoKSZmpOeq5uLiJF4i4VwgJaNio+gkJOUnZd9kImOqKCHmI+KkaKTm5qMi6iopJ6PloeEfmt7h399j42Di5CRiY+UoIKWnaCdoJ+LiXecmKKMoHKii4ipiJymkJaoq3+ujH16oJl6o5N4gHOWh4ycfZagh5uOmZumhqJkoXyIlpCbjWyeaJuNbpqZe4CKp31yaHOpgpyCc6pnlJpdm4V2hJ1oqmqAuGZcqHCBnGGVjF6ndnWJin+eaJp1h5OSmI5/n26akGynmVyofne7a36qW46EXbRnXG5xeXdraVtxanh5Yl9mWGJBUEVON1ZCUm40S1paX05aQ0AxNTE7OzdIPzpDR1Q/WVJZXT5EYl5WYFFhY31pRUI5TltdWGRmWGZnbm1iYmVfYWFfX2BgZWNeYmRvcV9kZWVrZWNpaGdraZWciaq2m6iJY5SbrLqysKydppycqJ+erpudsKirnZeimaGfmJaWoKOZhomMaoiAcXuXiIuWloSRlJiPeoqElqSdipSPhYudkZybiY+oo6CZi5GKgIBpgYZ5f5eMe4iOj4iPlpp/k6KfoKKTmHJon4qfj4xwkoyBqYiZn6OooKh9sK2joriXd6OzoqN/iJR4nXqrmn+ijp2bl4mXcaF8hY2vtX1rmpGheH6YtKOjq6iEmXyafJyZfnOqWl1ve5aLeJ5iTH56eoVjeZdCTZ9ZompxfI5tgYmEmXWbeYeJsbN/f5uTp3WAnW1xfJRvmXJqpF2VdkhlY2BzcH19bmVgbGh2fGNkYVFeVl1UVkBZRVFnRFNXW2JYXklEPUI4P0I6SUU4TERXQVZRW1ZERmJcWmBLYG1+cUVDPFVfYlplalZnaG1vYmZmXmFhXF1eYWhiX2VkdmxeZWdma2RmbGloa2mTnYCxrpmEU1+gp7O5s7OpmqKMnKucnKmToaukoaiPnp2cmpmVmKGdloeGiXeFgW55lYWQmot8kZOWiHKAiZOhnHORkIGImJSfmoSOqJyalIqLinyDbIWFcYGhjHiFjYiIkpmVfJKkoZ+jiK6GfbWEjp6de6WWeqmClp2QiqGdfadodm1+mXShc3F8nYWYb5OCrn2kg6aemoGjb16oZ3WjY2+lYZzTkHx6mXhyc2OjhZB+onKijnVrj7OLYIKYiXOqsqi8f3eDbX6+pqm0XpxufXGXb4FzonJdo2d0pmFopm2b1Jl8g5tvd3mXa5t6d5dzbamkZ2BleXB/g2tnZmRtdXhnYGJTW2VRUWJJV0lUX1dTW2VqXGRQRUNLTUpLQkpFOFA/UE1XU1hPUlJgZmVpUmN3eXdJRkVjXWRaaGlUaWhqb2NqZ2BjYFxdXV9oYmFoZXxkXmRnZGtkam1naGxol5t/satUXEt+qa+xtLCzo5yYhZiooKCjjaSooJipiZmXmJOZkpKgmI6HhXtwfYRofY+ClJqBd5GNjolvf4aQk5Jsl5R9iJCRo5WDjqqZlJKKhYl5g3aHgG6Cn4Z3gJOGiJmil3mToqSan4mzoaK2i3qsp6SupXCpgZqQhYGcknykgKKZhphynoSira6Jl4t/jKSNloOuopR2tba1yaFzlIqBn2Cdl6lteZWGn5p1oYd3oH6RloqAb0xmo5JwmodypHt5dGGDgmx+oGtxZGCccn90l2l7abO1tMamc5h+e51qm5urdYOabHR3l2maenWYclBEfbNeanZreIdmamdidHRxblZeVFloT1JoSVVMWVJVXWhrblZnV01KQUpNS0hKTkFRSlBkY2ltZXRyc355e251iXt7VFBPbF5oW2tpUmpoaWxnbGZjZV9cXVxeaWJkaGt7X11kaGNqZm9tZWlsZaGcibCnhGY/lKGyq6+vtaKjj4CXqaKipYylp52cpYKZl5aNl5CPm5KOiIJ5anmGZYOMfpageXWPiIyBaYSFkoOMhZ2NeoyKlKWSg5eol4yQioGJeoB9i3hwkKGGeYGVh4mWoJZ/lKWonJaWhGdueJxsomR8caV3nJhwZ6eBl4x7pXqfloOXcp52gYmUlo+5bpCKomJ9maKViG1yaatqdaBtbqZgm2mLkGiWh5qVdaKAfZpgi4WMdW+IYmigZZ5+aZp1b2NmiIJucqJaX1tjoW5diYxve39zcmSlbXeiZGenaJhzi5huoW9TiI9voF9lp1SLXVSYbW1za3GBbXBoa3hza29SWFdWZllTbUlYT11IWGloc2pZa1ZRUkVWXExYUmFUaGped3V6fHB8fHKDe39ydo2AhHZeUXJiZ2JwZ1BqaGhrbG5nZGdfXV5dYGtjaml2dV1cY2ljampzbGZrbWOcpZmmemV0bYunrqSpsLGmn4uAl6ucnqWMoqGaoqKAlZiTjZqPipeQjot7h3GAiGiLi3uXmnN0in2Qe2SCh5WKipWZgnyIhZamj4Ghq5CFj4mCin2AgI9zaI+mhH2GlI2ImKCOiJKqp52JpniWnH6liZaMspiekIOvl5+leJaIeql0pY+Emm6kooyShIyDvG58pa+ChoaHk5acn3ylenGolaCWZ55+b6tjloqVkneobKmigYl1h4J3q5GmiGuRsGt2s4ypa4qGbm2fnpKVYX+ri6p2gH+Mpp93n32FpZWdoGmah3asZ56tjLdzd76NpJNZg6aNq2F1cnNve3RxYmp+bmhtU1ZbVWFhXGtNXFJdSV1tbXdgW3FZW2BaZ3Nlbm9xY3F0YHd6fnlyeYNzhH+Ae3uMgYKAdmJ4ZGNtc2RSbGdob2xyaWZpYV9eXGJrYm1sem9cXGJpYmxqd21nbG5ilaaqnYGAnqSWqaqdqKeuo5mJgpermp6kiZqlnamchIyajoackYWSjYuMdIZ6iIRvjIR9l5N0dIZykoJtf4uSh4aUj3x7gYWXpI1/paWOgY2JhJR1goeSb2yLqYGDi5SOiZyfiY2Tq6OgkIB1lJeIfoF5lK6jf4GbcY+GeZCMhH97cqaMcX19epeWm4SOeHt+foiUlZOKdpCYn6CDen2JbIyFW3l4cXlwaG5+kolxf3SCj5STcYWEgmWNf1+Bf4t3dXOUdW95bm6HbYSGXndpeI1mgYKGjqmbfnR8l2qJiHCAdnyFdm1sZ4xzeXuYeIRba1h5j2hud3Jxb3d4b11shm5pZ1ZaYFdcZWtjVWFVX1FfcHh5bGt2ZWpranZ8cXJ0c2FvdWJze4F4dXmCdYCAf4B4i4WDfXttf2xkeG5eV25naHVreGppamRcYFpjamVscHVuWltia2RsbHluaGxvYY6Uuamni6GimqakmaScq6KghISXrJKdoImappqomIKBm4p+lpOHjomIjXKCfI99fo6EepePdHKDcJWFe32Ti4aGkIV4fn+GmKKMe6agi4WPkISVgoaOl3dyhaqGjpKckIienoiMm6igoKuDiY6Umn5+iZatqI+TppB4cJ2Rg3uSb36ohXB9lXFrcHyBn4t/ko6MaG1dg4uMm5uejnOVi4hxdGuCdnOAWXJuh5CBfX6Mal1qZHuFg4iAX2l4e5t7gouCdoGGgmh5i4drYXFyg3dfc4yCiZCnlYZmjI+DbneLhHCFjXlvZWdkeoN6lltcamdudlt7eHd0bXNygmZcbYprbGJZWV5aWGxxW19gWl5dZnR+e3VvdGNra2p7fHJ7eHRkbXRnbHt+dnp8e3p6f39+b4aKhHt9c355c39pVFxxaWx1b3Vna2hkXWFYa2hranFybVdbZW5sZ3N6b2hqbWCMjKqxopCjoZqenpiemaiioX2CmK2Nn5SHm6KQpZV/e5eEfJKYiIiGhopyfICLdoWLgYSVinFvgHKYhoR+koSDhoqBeoCDi5qej4KmoIZ4jpeIlYuLnZeEg3qtgpGYmZSKnp2HiKGroKKio4uIk5uco5mWqqGnpqCSm4iXjnx4jo6Ep35/kpGSk5yxppuUnpCNspOYhKWMjJWbn4mQm4KJkYprfI12d2WChZCKfImdhIeLj4iIgIWEkHd8eXWaoYiGip+LhZR/foyBgHZwdIaEf3iIh4uQppCEhY2Ig42QjHyHioiPgXZsgoR8eZlqcmhhdIpwfXp3dm93dIFdXm+GaG5fXlpcXVNocVVjW1xhbGh1fHxzb3Bka2ppf3tteH9xaW9wbGaAe3KCgHh/fYCEem2DjIZ8enh8fXqDeU5kdmtzbXB6ZGtlYmJgW3RmcGZycm1VXWx0bWh5enFnaWtljYidup+WoqGYlZmYlJmkoJ57f5mrjp6NhZ+cip6WfHiUgnuOmYmGhISGbXiAgHKBh36Ik4RtbH56l4aEg5B/gIaEhnyHg42anJKGqZ6DcoqPhZKRi52RfY17qoSNkpiVj5yXhoabp6Cimp2Gg5GamZmQmqagpp2dkJaBkYp3fIeOhKV7fI6QkYaYqaGdk5yPjaqOkYCejImTmp6Cjpd+ho2Cb3iFcXRgfoKPhnWLl4CDj4KGhH6Fg5RueXV0kqKLjIWahISNdICKfHxycnuIhHt5jI6Ek6ePhoSPgYSLiop3hYeJi3xva36Ae21obG1nXnl/aHx7dnR1dXt3XGBwfW51YGNaXV5RZm1TZVpdYWppdnl+cWtsZGtqZ4B/bHOAbGx0b3huhHluh4B2goB9hHZygo2Ifnt7fH97gopgaXtqdWhpgmRqY2BpXGR1aG9idW5sVGNxeWVwenpzZWltbYuKn7eaoaOfkpGWl4uan5+ee3idppCbioaklIuYmXh6jYV7iZGDjIKBgm18fnhzgIV9ipB8a2h9gZeIgYiOfH6GhId8j4CPmpuRiKacf3CLiouSh6ChioWMfKiRiI+Sl5OWk3iMo6Ghnpaaf4CQmpiTjJujoaSal5Gbfo6FeYCDj4eggH2MjI98l6SgoJKZkI+mjY+Bm5GJkpebfpKSfoaNgXV0gnB2YH1/jYZyipV8iItyjH+ChYaOaHdxeIyYko9/l36IinOCh3x8cHl7jIV6e5GNg5amk4uGkXyGh4eFdYKDiId6ZXJ7fnh6cGxqZl59c2h8dXVzfHKAal5gdHZweGRjWV9eUmtoVGRZX2FnanZ4gXFma2NsaGV/gGptfmhucWt9d4Z6a4yBc4GBfYF0doKNhn58e3+BfX+PanKDbnNpYYdobGJfcVZ0b21uYHhobVdqdHZjdXt7cmJqbnmJjZ+ykqWlnI6QmI+GnKCbnHx2pKCNl3+MooqImpZ4e4aHfoOJfoiCgH9xf3p0dYKFfomQeGdjfYaXioKKjXh9gIyDeZaAlZeVjJafmn1vi4GRk4amm4eMiYSmlYWSi5aXk5J2kZ6hoZiUl3p+jpiXjpabnaSdmZOUnHqQhYN4hJeNnX6BiY2Mc5einqGSmI6PooyLg5aYg5KWmX6YjXyIjYF2cX1uemR/fIqFcIaTf5CCbIeCgX+JhGV1b3yHkpeNfZN4i4l8gId8e3F+eIqGeYWRiouYopWBhI13iYWDgnZ7gYmGdl94d31zfXdmbGRhfmlqd3N0dH1xfGJjYXNudXNtYVpgXltrZFJiV2BhaGt1eIZwYmpjbWVofINsaHRobG9of3yCeW2QhnGAg4N/c3yDjIF/fnqCg358kG12iHR0bWWKbGphY3VWhGlxbmB5Z2xianZwZnl8enFgcmyGhZCcrZemqJ6NjZeHhp+Tl5h9d6qciph5l5yLi5iPeXuAi318g3uAgoB4dHh6c32Ag3+Ii4BkXn2LlYd/hYd0fX2Jf32XhJaTloyjoJd+cod6k5GKp4+MjoqToJGDkZCUl5GLgY+YoJqSkJF0f42SlImdnZ6nmJeNlZZ0jo+KbIaYj5l6h4iQiW+XnZqjk5WKjZ+MhoGSnH+SkpWGmYh8iYmBenF5a3Vse32Lfm6FkoKUd2+Cg31+in9kcmp7gJaXhH+NdJCJg3mHfnV4gH2HgX2DjYWNlKSQeIWCdImHfYBzdYCHg25ge3V6cXxvYW5jZHtibm92cnd3c3Rhdl9vbHVub1xbX11eal5PXVdjYWhtc3qJa19qZWpjaHeHbWZsaGlsaIB8endvkIdzgYOEfXOBhol6gn16gYR9fY5yeop4eG5sh2toX2lxY4docW9ld2hubGF5aGt9e3hwYXdti4GZmqqgpKidioqRhoqeipWXfXeumIyWfZ6TkZaTiHd9e4p8fIB2d3+AcHRzem+FfIGAin58YFx+j5GGf4OEc3p/hnqPkYeRkZuSpJuUgX2Ae42KkqSJjYqNmJqMhpGYk5aOiYmMk52TkIyNboOQj5GJnpmioZeWiZaRb4iahGeGmY6TeomFkIpwlZqUoZKSiIuZjIJ/kJ58ko+Si5mOe4qEh3RzdWtxbnV7i3RuhZCOknF0gHuBgYh8ZHFseX2ZlH2EiHSQi4F0iHlvgH6Bh3yFjImFjZWojXuIfX6LhXd+cG+AhYNjaHh0dW97Yl5wYGp0XnFqenh4bHJwZXhdbWxzbXNYWl5fYWpaUFdXZWNncXF/h2ZdaWhnYmdxjm9kaWdlamiAend0bo6FdIGBgnt1goiFd4V8eISFeoCJd3+Le3pyeYNqa19waHSAa3JvbXFnb2xlfGNugHl2cWx3d4p/opiiqKGmm4eMioGQnIaTnHSBqpSSjYagjJaTkH90e3aFd3h/cnN7hWtyb3ltinaAgIZucVtZfpGNiH+AgXZ1gH9/oIaPipGcl6CTl3eJfoCMiJ2eio+GkpiWhYmVmY+XjIuNjo2dio6Qg22IipCRiZyWoZuYlYWXiGqFo4Nnhp2KkX6Lg4uBd5OYkZ6RkIiJlY1/fo+XfJGNj42aknyKf4JudnBsbW5we4Vpc4OOl4pwd390gomCeGZzb3aBmY58iYR6lJF6d4h0cIl7ho17i4aEiY+co4h8hHeCi4B4eG5qgIKBXXJzcXBveFpecGBwal5vaXx5cG1tamx2YHBvanJtWVhhYWFuWFFTWmZnY3VwhIJiXWptZGJma5JtYGZmX2hqgXVxcnCLgHV/goB4dYCLgHiFf3eHhneDhXuGjH97dop/anFjfGKGfG9xbHRqaG9sdndfcX95e3R1dICCfqSVmq2fp5aFjIN/l5SDj591ip+UkoaKm4yVjYt6cnh0gXByhHNxdYhsb2x1bYh2g31/bW5VUYGrlIeCeIB2coJ5gaCBkYGSkpebkZp4kXqCjJKkmpOOiZWZkoSHl5mMlIyJj4+InoWQinxyioWJjoicmp+blpR/lH9php2IZ4ahiJKEkYOJcYORl4+ajY+Mi4+Nd3uSkHqOi4yRlox8iHyAa3ZqbmtrbHp+YXl+jpWBdnqAd4ONfHlndGx0h5WLf4iGe5SQcXqEcHeMeoqNe4l+g4yRn52FfXx4gox9dnBpa4GCeV93b21rcXNWXm9icWFfbG55cGdwZmZzdGhxa2F3ZV1WZmFgclNQTlxmZV14cIh8X1xocmJiZWaSaV9oZFtncH5wa3Bzin12fIWAdHV/jHl7hoF4iINzhoV+jIyDe3mVd2ZyaoJgiH5vb2t6YGpudH90X3R9eYZ4dHOFfHigj5mwnKWPgop/g5qIf4uef4qZk46EiJiOjo+EdnR2c4Bwb4VzcHGDb2tpdm2Cbn18bXRzUk6C38iS1pN8cHSCdYOfgpN3lJCYmo+Ye5NyhZCfoZOTkImTm5SGfpaViI2NiJGNiJyAjoF4eox+iIyJnJudm5WTeY12aImSh2yIo4WSh5eDhmOMkZiOlYmWjI2Ki3F7lIl6jYiKkpGJeYV7fmx7ZXJvamt5eVuAeY+NgHp9fn+Gjnp5aHNrc4uPioKFhX2VjGx+f2+AjH+Mh32EeYGPlpqainx3eIOQeXNtZnB/g2xqdG9oaXNtU15vZHBZYGtxd2ZramJmeHJwcGNfeGBgVmtfXXZQTktgZmNdeXGJdF1cZXZgYWVlj2RgZmFYaXNzbmtxdox8dHmGgnV2fotzf4Z/e4l+comHgZCKiHx+mHZlc217ZYd+b3BsgFpsbnl5c2F2enuNdnJ3ind5n4ubrpugkIKFd4iVfnyJnIeFn5COhYyXhJOOh4F1d3B5cW6Eb21ufnJkZHhwfG16fWpobGOkmsHcru+hc2t1g3WEooWRbpWPlJ+Tm4GRcIWLo5eJjZWKkJ2Wg4CVkIWJj4CSioqXf4d7dX+JeIaEjZubmJmPj3aKdm6GiYt9iqOEkYmdhYVei5SXio6IjouLhIlsfJaBfYiFiZCPhnaFfX1rfWR3dWpteHNXiHqRhoV6fn+AhYt+eGVzan+KjoqDgn+MloVrgnVuiJGCkYV/gnl/kJaTmZB1dHiIjXVzcWd1eYJidG1vYmh1Z1JgcWdsVV9udHlgcmNfaH1wcm5bY3JhYlduWVx3TU1MZGZhXnZziW1cXGR5XmBkZoVgY2JeWGpya25rcnaMfXR3hIF4d3uJcYOEfX6Ie3SLiYiVhox+fphzaHVweGyLem50cIFYcXp2eXFld3mGjGl2gIlyf5yHmKeco5KEfHCMlHh5i52EhaGNjnuVjX+ZiIR7cndwc2pvgWtpbHx0XmB4dntwdXtnYGV869q1ycPciHNsc4B2ipqIjWmXj46clJKBiHCFiKCOhYqVio2YlHyNk4iDiY97kYuGkIJ/dniDg3KHgpKblpSYhox2h39whYKJh5mig5SMnoOJYYOVj4aJhomNh4CHaX2Uf32DhImOjYJxhn5/cXdodXJpc3drWox9koGFfH+DgISKgnVhdGyIgY+Lgn5/kpF9boJseYaQhpOEfYF8f5KTkJeJb3J6jYZ1bHBrcniAX3NpblxqdmBSZHJpZlNfcHZ0YG9gXWiCcXNqV2doY2lYbVdbdUxKTGVnX2Jyc4VpW1xleV5eZGd7YGRfXFlrbmVvanN3in5zc4F+enZ6iHOFgnx/hnZ3ioaPmIKMgXuTdmx2dXh4k3RueHp9WHmFcYBvZ3l3koJkdoaFcYqWhZmhm6KKhnNvkotyd46cfYqaiIl7n3+DmX+BeHFzbm9kcn5oZmx3d1tfeXt6cXF/aWFnYX/Vto6QpnhucXd7cJKQjIdqmI2Im5GLhXtoh4uZhoGSkYaHmI18jY2BgYmOfJCMfoqFenV7gnpwhoCVmY6TlIGIdYOGdoOAi5Odn4aVj59+iGF/k4eEiISJjX9/g2d9kH9+f4KLj5B+bYJ8gnRrbXZ0c3Z1a2ONgY5/hX58hH+Eh35wX3NxhXyPjYJ8f5KJenGDZnqEioeMg3yFfX+UkJGThG5weox/dW1uamx6fWJoamlYbHVaUmlyamJRYnJ4bGFlXVpqg21zYlxnX2RsX25UWm9OSE9nZVxnbnF/a1pbY3NgXGNsd2RlXVxabGxibWpzdod/cW9/fHx0eIZ4hYJ9f4d1eYmBkpV8iIZ2iYFvd3l7hJNwbXyBd16Df3SBbWl7c5RzZ3KIfXKSkYOan5ughod2dpR+bXaTl32HkIOKjZp8i5p2fXZxb2xqYXR8Z2JpdXpaX3d8em1xfmVjaGhXnY9ecXKWvMODdXGUiJB+cpaLhpyTjIdyaoiPloB7lIyBhJuMfIuGfXyJjH+UiHWJhXZ3fYFxdYaBnpSGlY+DgnJ/iHWEfImYnZiHk46dgIhmfZOCf4WDiYlygX1nfot7eH5/h4uOfGmAfIN2ZW94eHJ2c2xqjYWKgYp/eIGAhIN/a15yeHp+jYqFe4KPgH5ygGl5g4eLhoR5hHyAl42QjH1ubXuJfXd0bmhnfHZjXHBiV29yU1Nuc2lhTmZ0eGVgXVxYboBvc1llYl1qbWBwT1lrUURTZ2Faa25te25ZW15tY1pjb3dkZlxdYGxqY2xqc3aCg3Fufnt/dHWDe4OCfIGFdn6JgZaQeIOKdIGIcnh5fo2Qb298gXFpgXl6fm1tfHaVa2p3hHRslI2FnpigmYWIbn2Mdmp4mI5+gYqClZeKeY6Wb3pzcGxqZGB0e2hfZXF6WmByfXlncXphZWWPsbJ3SmJapNnQlnF7kIqQd32Ui4SZkYuFbmuFkpJ6eZKGgISYinyHf3h4iYqEloBvjIhxdH16aXmFg6WQhJONg39vfoN2hHmFm5iTi5KQlIWHcHuSgn2Cg4mDboF4aICFeHJ/f4KKhntlfX6EdWNwcn9oeHBvdZiNhYKKe3Z4gIR5gWtccX1ygYiFiX2GiXqIcoFucYSHjoSFc4R4gJmNjYR4bm9/hH92emVoan1wX1l3WlhxbU5XcnNnYEtsdnRgXVtbWXR9cm9XZ11manFfbk5XaFE/WWdfW3BqZ3hwWlpZa2VZY3B5X2hcXmVtaGZsaXF3f4dvbH99gHVvgnt/gX6Cf3aBhYmXinGCjXF7hnx5eYOTjHVqen9sb350f31vcnx7lG9ugX94ZpKKgqGZnZGChmeHg29nepWJfn+FgZmKgXyNjGl4cmtsZl9hb3htX2JveFxka4J6YXF2X2Vl1Oq+ijI6PouOgHF5hYeOjXaDlox+ko2Mf21shY2Mdn2Pf4WClYl8g3hudoaEg5d3b4iFa3V7dGZ5goOnjIOPi4R9bn90doN5hpyQjJCRkoyLhn57koZ3f4SNg2yAcml/fnhtfHuBioN3YnmEgXFkcWh+bXRxdYGbi4B/hX5ydX2AcoFwW21+dHiKg4t7h4B8iHh6cWyIg5CEi3KBeX+Xi4t/dG5rdn+AdXVcaWh3cFlXfFNacGVMWnJyZVtKcHduXFpaWV10fnVoWWJbZ2ZuY2lMV2ZRPV5mXF11ZV90cFpZVG9kWWRxeVpoXl9nbWdqbGlwd32ObGmChH55boB8fYF/gnp1goGNk4VwgItueH6AenuIkol/aHt9anR7coZ7c3d9f4x5eIR9fGuMjIObnZaMgYBsjn5raH6OjHt+f4OUgn99iohrdXFnaGNbYmdybmBha3NhaHCJeWFzdF5jZJugj25cNVmvtXRpgIh8koZ2hZaFc46KiXdwbYWDh3V5iXiJfZOIen9zZ3aIfn6Yb3GGfmh2eW1leYiEpYeAh42Jfm5+dn+AfIyZh4KTkJiIi4SJfI+IcHt9hHtofm1rgHt6aXp2gYeBcmB3gX5xZHJndYJtdHuFlJGBfIF/bnd5fHR+bVhvf3Z0jIKGd4h2gol6eHNuiYGPgYVyfn1+k4mJem5uam2BgnVuXWdmc3FRW3tOXHBcT1tycGRWS3N4aVdZWVphcYB0YF1dYGdkaGlmTlloTUBhZFtgdmFddW1YV1N0YVpkb3JXal5haGtnbWxpcHd8kmtohIl8fHB+fnuBgIJ6d4CAiouDcXuHb3F3g397iY2Pg2p+e253eXaKd314gIKHf4N+fnpthYyImKONhIN7dYt5a2yEiJF4fXuBkYCAfoqDcHJwY2ZeWWdfb3BgYGdwZmpvinRhdG9bYWRqdnt/vpymo8i4cYWDc5N8eIaTgnORjIdycnCEe4N0dYd0iHeUiHl5cWN3hnqAk2lyhHZmd3ZjanyDiJ6Cf3+Ojn1yfnOEeYCRkIJ4lo2Uj4iCiHuIiWt4eX51Z3poa395c2l6doCCfWhgd4d9amt0aHt/aXaBjJCUfnp+fnB7dnt0fmJWd31yc4qEgnyDcYaKd3hwcIOCjX99eX59do6Gg3ZpcWlsh4JycF1oY3NuSmV1TF5uVVRZc25iUU9zeGBSWFhdYnCCc1thXWhlZGNqZFFacElEZGFbY3BeXXdoVVdVd11bZW5oVmteYWpnZW9vaHB2epJuaYiMeX1ye354gYGBfHZ9hIiGg3B2g3Jud4KCfomLk39wgHt3eXqBjHSDeH+BgYKEeoB1b36Ji5qeiH2FeneGe2d0hYyQen9/e4mGhHaPgGdvbl9kXFhlWW1yYGBgcGxraIluYHNpWV5kbYB3qdqpx4aHsnGJeG+MdXuGjoB6k4l/dXR1fneAcHF/bYR0lIZ4dWxgeoJ5iI9mcYNvZ3ZuW219gJCTgIB4kpJ9eHtth3WAkIuEdJaKkY6HhYV7f4VsdHZ/bWd3ZW17dW1qdnd/f3xgYniGemh0dWN+emd0hY6MlXt0f3VxgHp8bX9ZVnR+b3WEh3+AeWyIhnR4a3V/g4R9e314e3OLgX1zZ3RlbYqEbXRbal91ZEhubkxbYldWVXhtYlBTdHZXUFVYXmFxhG9cYGNtZWRebmJUXHJHQmZeXWZoXlt7YlFVXHVbW2drYVZqX2BuZmZrcWhwdXiOdGuOjXV/dnh+d4GDgXt0foSIh4NvcX90cXV+hYKJjYp7d394g3x8hYd4h3x9gX6EgHt+c3Z5jI6fjYl6iXZ0g3lefYWZjHmGg3SFhoV3iXtibmxbYltbYVZqc2NgW2dub2aHcWFxZlddY2t/fMrOiLmiam1timxxhHF8hIl+e5GEeXl0eXV1e2psdWOEdZGCd3BnXn2CeouJZXKCa2pxY1hse4aciIKBc5eUd357bohxgYqLh3GXjpCIhYuDe3l+cXFvfWZocWJteHFqa3F3fHx5XGV5gHdpdXhmgnZndIeLjZR8coZpb36AeW58XVhyf210gIt8gm9viX9xdmh3f4F/gXd9cXp0h3x6cmZzYW6MgmxzWGtfd1tJbmtNVlVeVFV7a2FPVHVyUFFUVl5idIVoXGBsamZjWW5hWGJwR0FoXF9lX11We15PVmRwWVtqaF1XaGBfcmZraHJncHJ3hnhulYp0f3p4fnmCiIB1c4CGhY2CcHB7eHd1eYaGhouGenx/dYt+fYWEhId/fn59h398eHZ5d5KTn3+MfIttdoB5Y4OHl4ZzkotvhYWBeoN0Y25qWV9bXV1UZ3NlYFlkcXFmgXNia2VXW2Bpf3e+rnugt21ic4Zoc3txeYKFe32Mfnd4c3Zve3Zlam5gh3WOgXNqYl5+eHmLhGZxfmhqa1pWb3iKpIGFf3GZk3GAeHWCbYCCkYdzlYiMiISIhX14dHJuaHlgam1gbXZqZ2preXd6d1tnfXx4ZXJ9boR0ZHWFjIaVf2+LZmt6g3VtdGJcb3xrdXyLfIFmdYd9bXFndX54fn9yfWt6eoF6eHBmbGJuiX5tblZrYHdVSmprT1JOaE5ZfGhiTlV1akxQVFVfZ3aDZl1gcWhnYVdpXVtraEpFa1lhY1dZVXlaTlZtalldbGVcWmVjXnRmbWRxZ3JvdYF3cJmFdn9+d398hYd9dXOCiH+Vgm5zeHp6c3OFh4iIhHmBfXaPf3yEiY6EgoR7fouDe3d8d3eanZd6ioKGaXd9fGyDhJOAco+CcYWCfoF/b2ZsZlddW1xbVGRwZF9XY3J1aXVwZWVjV1xcaIBwb3KAdIlkZHh+aXR1c3OChHiAhHl2dHVua3twYWdrZ4Z0jYRuZl1ffXB7iX5pbXdmaWRVV3JwjaZ8hHx2lpBze3N8em57e5CFdph8h4aDhoN8dHBybGd1XG1oX2x0ZGdmaXpve3JZZ4F3dWdwgHeCdWJ3hIp8lIBui2pteoFxZnNlYG16Z3N3inx+YnWDdmlrcXR6cXl5c31mfn9/eXduY2ZiboZ8bWtWamJwU0tpa09MTnBHXntmYU1VdGNKTlNXYWp2fmVcZ3NpZmBWY1dicF1MS2tYY2FVVFVzVkxYdWRaX2thXFtjZV93Zm1icGlzbnF+dHSagXd/gHd/foaFen11goR+l4VucnR7enVxhIWPgYB6i3V0kYB9gZSOgIWEfX6Mhnt+gHZ7o6WKeYmFg2t1fHt1g4KMem6Fc3mEfYGDdW5qaGVWXVtaWlRjbmVbWGJze2lobWlgYldfWmmAamtvgGhsYWh5eGpzdHRthIF7f312dW16aGp5al9lbmiBdo+EZ2VYYndpfod7b2lvZ2ZdVVhvaI+ndoF6fJCOeXVvfm9zdXmPgHeVdIWCf4WIdmpydmdobltsZF1sc19nYWl4aHttWm2CcnNpb4B+eXdgd4SEeI+Ecohxb3l/cmNxaFxvd2Rxc4h8eGJzgHBnanhzcmx4d3V3ZIN7f3d2b2RkY258fWtsVWliZlNLbWhPR1JrRWF4Z2FNU3FcSU1UWWVrd3tlXm1xaWRdVl9Vbm5XS1RoV2ZeWE5VbFRKXHlfW19rXV1aYmVgemhsYW9vdW1vdnV6mH13gIF6gH+Hhnp4eoN+gZOEcXR0fnp2dIWIkH2AfZBrc5WBfIOfhX+HfYB+hoKAint2hKyff3qIh4NrcoJ6doCAgXVuh298f3OJgGpvbWRkWF9aWVpVYmpnW1pedYFpXm5sXGFWXFxrgWZydH1pal1rdnVndHdxbIV7fX15dnJsemhpeGZdZHNoeneSgWNjVGVwZ4KFd3dmaGpgV1ZZaGSQp25+eICLjnpwcHxmeW96jHt2jnGEfX5/hm5kdnNkaGhca2Jdb29bZ19sdWR6aF10gG9ya3F7fXV1YXSFinqHhn9/d3J1f3VhcGxZcXRicXKFfHVkcn9sYWx6b2ppenh1cmaFdXp6dXBkYWRuc35pbFRpXl1US3NjUUdWYUdidmZhS1RvV0pMV1hna3Z6ZGVucWZjWlddWHZlVEpcY1doWFlJV2VRSGJ4Wl1fbFteXGFkXn9pamBvdHhtb212g5h5coGAfH+Ii4Z9dXaGeIeMfXR1dYJ4enqCjI59foSIanOXgXuLnX1+hXqBen58hohzcY+ujHt7h499ZXKIenR8fHZyb4Zse31sj3picG9iZV1lVllZV2Rma2BdXHOFaFhxblpeV1pcbHtjcHd2bGJbbHJzZ3R1cGyEeX6AeXdubnRlaXRlW2d1ZnZ2kXpfXVJlZmqCgnR9YmNpXFRYXmJjkKVoeXSChZB4bW55Z3htfIV7dYhygHh8eH9oZXZtYGZgXmpfXXNrWWVdb29iemVbd3trbm5wd3hzdGRyg5J+h4KIenZvcn1yYnhkW29wYXFxgnxzZnGAZF5udmlkZ3l6dG5vgXV0fXNxYl9mbm99ZGpTaFhZVE13X1FKWVlIYnRkYUlUbVNJTFpXaWxxe2JsbHNjYVpaW2F2W1NLZF5YaVNXR1lgTkdpdVheYW1bW19iYl2FaGhhbnh5bG9qdoGQeW2DfoCBkoiEgXZ0iXSMhnRyd3aBd3x9foyPgH6TfnB4loN9mZJ5gIB4eX1/dIiDc3CZont7f4iUeGR1iHlzeHVsdG9+bHl8cJFyXnBvYGdibFRbWldoY21mXFxxiGVScm5bWlhYYGx3ZGl1ampeWm1zcWxzc3NqhXx+f3x3bm5sZGlxY1tqcmR0do9zW1dTZGFygH9ygl1iY11TWmBbY5OfZXJxhYSRdGxqeWxvcHp8e3GAdn9yenp6ZGZ2Z11iWmFnW153aFdiXW9oYXdgW3t2amlybndzc3RocIGUgoZ+hHZyanB8bWZ3V1xrbWJxc4F6c2Zvfltgb3FiX2pxfWxsdH5zcXhrcGFcZWxsemFnU2dVV1JQdltSUFlSSWNzYmBHVWpQSFBaVWtra3xlbW9xYVxaWFlscFdSUGZWV2lTVEZaXE9IcnRYX2NtY1hhYGFdi2pjZG15eGtvaXV5hntrg32AhJl8goR5fYhuj4Zxb3d6fHSCgnyLj4OCl3R3gpSFgZ+JdYCAgXN/gXCHgnVvopd0e4aLhntleItvbntvZnhwemxzdnKMa150bmFnZWtSXVtWZ2JsbFpccYxkT29uXVZYVWdqdGhidGVlXVltdG1wdXV5aod8f3yId5BzZGRrbmFcbm1jc3iHa1pUVmJjeH19cYVdY19jVFtgWWOWlWNucIOFinNqaHpuZXN2c3xsenR1b3p+dV9mcmNbXlZiZFhhdWVVX2BtZGFxXV1+cGhpc3FzcHV1am2Ek4GIe4RxcmZufXByb1NbZmpmcXSBd3NibHZVYnFqW19uZXxlbXZ8c3Jzam1gWmRqandeZlRkVVZQVG1XUVdTUEhlcl9hRlhpTkhXVFZtaGR8aWt4a2JXXFVbdGRTUldoUVlmVFNIWlpQTXh3W19lbGlaYmBeXo9uYmZreXVub2h2dn9/bIOAfYaXe3+IgYp/a5OIcmd0gHt1gIN9iI5/jJNzfIqRhYefhnt/hoxzgIZzfYN2bqWMc4GNi3Z3bXqMYGR8cGZ6c3lsbXF2gmdke2xjZmdoU15eVGdgbG9bXm6NaE5qbWBUVlNvZ3NrZXhkZV1Yb3Rscnp3cmyIe4B2nHt6a2FlbG1eYG9qZXB5fmdaVlhga3h8e3CEX2JeZ1ZZYFdknIhia3GBh313a2t4bFt2cWx6aXVzbm97gHJYam5fWV1VYWNXZHFjU15haWFibFpgfmxma3N1bm13dmtohYx/iHqHbXFmcHxtcm1jWWFoaW90gXRyXmlsUmVxZFRibmJ6Y3F2e3VrcG1rX1hhZ2h0XGVWYVZTTlhlUk9cT09IZXBdY0ZZaU1JX0tYbWRfeGhufmRgVV5UXXRbVFJgZk5dYVRTSlxZUFl1dl1fZm1oWGNhW16OcGNnandxc25ndnR6g3KBg3qIjX58ioeOem6QinRsc4J0f3+IhYaRhJWPeX6Mj4iRm4SAfIyEc3+Bc3R4cW6Tk5OTk5OTk5OTkpKSkpKSkpKSkpKSk5OTkpKSkpKSkpKSkpKSkZGRkJCPj4+Pj4+Ojo6Pj46OjY2Njo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo2NjYyMjI2NjY2Njo6Ojo6OjY6OjY2Ojo6Oj4+Pjo2NjY2Oj4+Pj4+PjoKAfnp6fX5+fX1/fn59fn5+fn5+fn+Af4CAgIGAgIB/gIGBgYOHjI6Ojo6NjY2NjY2NjY2NjZKSkpOTkpKSkpKSkpKSkpGRkZGSkpKSkpKSkpKSkpKSkpKSkpGRkZCQkI+Pjo6Ojo6NjY6Ojo2NjY2Njo6Njo6OjY2NjY2Njo6Ojo6Ojo6NjYyMjY2MjIyNjY2Njo6Ojo6NjY2NjY2Njo6Ojo6OjY2NjY2Ojo6Ojo+Ogn99ent8fn59fX5+fn5+fn5+fn5+f4B/gICAgICAgH+BgYCBg4aMjY6NjY2NjY2NjIyMjIyMkpGRkZGRkZGSkpKSkpKSkZKSkpKSk5KSkpKRkZGRkZKSkpGRkZGQkJCQj4+Ojo6OjY2NjY2Njo6Ojo6Ojo6Ojo6Ojo6Ojo2Ojo6Pj4+Pjo6NjIyMjIyMjIyNjY2NjY2NjY2NjY2NjY2Njo6Ojo2NjY2NjY2NjY6Ojo6Cf3x6fHx9fn19fn19fX59fn5+fn5+gH9/gICBgYGAf4CAgICDhouOjo2NjY2NjIyMjIyMjIySkZCQkJCQkJKSkpKSkZGSkpKSkpKSkpGRkZGRkZGRkJCQkJGRkZCQkJCPj46Pjo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Njo6Ojo6Oj4+Ojo+Pjo6MjIyMjIyMjIyMjY2NjY2NjY2NjY2NjY2Njo6NjY2MjIyNjY2Njo6OjoN/fHp8fH1+fH1+fXx9fn59fn5+fn5/f3+BgYGAgICAgYCAgIOGi42NjY2NjIyMjIyMjIyMjJTO2tjY2NjamoGEhISEiF0tMDAwMC1GoaGhoaGhoJqZmpqampqKg4SEhIOEd2VnZmZmaFxDREREREVCMS8vLy8wLz5EREREREU4Li8vMDAsSIWDg4ODg4OLjIyMjIyMjY2NjYyMjY2NjY2NjY2NjIyMjIyNjY2NjY2OhX19e3t6fX58fH59fX1+fX1+fn5+fn9/f4GBgYCAgICBgICAgoWKjI2MjIyMjIyMjIyMjIyMlNvp5+fn5+qcfoKCgoKGUxgdHR0dGTekpKSkpKSjnJycnJycnImBgoKBgYJyXV9fX19hUjQ1NTU1NTMfHRwcHBwcLjc1NTU1NicbHBwdHRg6g4GBgYGAgYqLi4yMjIyMjIyMjIyMjIyMjY2NjY2MjIyMjIyMjY2NjY2GfH16e3p8fXt8fn19fX59fX5+fn5/f3+AgYCBgYGAgIGBgYGChYqNjYyMjIyMjIyMjIuLi4uSl5iYmJiZmZKPkJCQkJCMh4eIh4eHiZOTkpKSkpKRkZGRkZGRj46Ojo2NjYuJiYmJiYmIhYaFhYWGhYODg4ODg4OFhYaFhYWFhIOCgoKCgoSKioqKioqKi4uLi4uLi4uLjIyLi4yMjIyMjI2NjIyMjIyMjIyMjY2Njoh8f3l7ent8e319fX18fX19fX5+fn9/f4CBgYGBgYGAgYCAgYKFioyMjIyMjIyMjIuLi4uLi5GQj5CQkIuOkZGJh46KkJKTkImPjo2Ph4+RkZGRkJCQkJCPj4+Pj4+Ojo6Njo6Ojo2Njo2Njo6Ojo6Ojo6Oj4+Pj46Ojo6Ojo6Ojo6NjY2NjIuLi4uLiouLi4uLi4uLi4uLi4uLjIyMjIyMjIyMjIyMjIyMjIyNjY2NiX59eHh5fH18fX19fHx9fX59fn5+f3+AgICBgYGBgYCBgIGCgoSKjIyMjIyMjIyLi4uLi4qLkJCRkZGPhI6QkIaKj4WNkJCMiIaGh4yGiZCQkJCQkJCQkI+Pj4+Ojo6NjY2NjYyMjIyMjIyMjIyMjIyMjIyMjI2NjIyMjIyMjIyMi4uLi4uLi4uLi4qKiouLi4uLi4uLi4uLi4uLi4yMjIyMjIyMjIyMjIyMjIyMjI2Lfnx3dnh7fXx7fX18fH19fn5+fn5/f4CAgIGBgYGBgIGAgIGChIqMjIyMjIuLi4uLioqKioqQkJCQkIqFjoiOhoaPiY2QkJGNh4aFjoaLj4+Pj4+Qj5CPj4+Ojo6OjY2MjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMi4uLi4uLi4uLi4uLi4qKioqKi4qKi4qKi4uKioqKi4uLi4uLjIyMjIyMjIyMjIyMjIyMjIt+e3d2eHt8fHx9fX19fX1+fn5/fn9/f3+AgIGAgYGAgYCBgYGEiYyMi4uLi4uLioqKioqKipCQkJCPhYOMjpCOiYyKjpCQj4eLh4eMiIiPj4+Pj4+Pj4+Pjo6OjY2NjYyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIuLi4uLi4uLi4qKioqKioqKioqKioqKioqLi4uKioqKiouLi4uLi4yMjIyMjIyMjIyMjIyMin18dnZ4fHx7fH19fH19fn5+fn5+fn9/f4CAgYCBgYGBgIGAgYSJi4yLi4uLi4qKiomJiYmJkJCQkJCMhoyJjoeFjYmOi4yMhIqGhoiFiY+Pjo+Pj4+Pjo6OjY2NjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyLi4uLi4qKioqKioqKioqKioqKioqKioqKi4uLioqKioqKioqLi4uLi4uLjIyMjIyMi4uMjIyKf353eHp7enp8fHx8fX1+fn5+fn9+fn9/gICAgICBgICAgYCBhIqMi4uLioqKioqJiYmJiYmPj4+Pj5CMjouPjIqPjI6MjY2Ii4qKjIqOj46Ojo6Ojo6Ojo6NjYyMjIyLi4uLi4uLjIyMjIyMjIyMjIyMjIyMjIyMjIyLi4uLioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi4uLi4uLi4uLi4uLjIiAfXh5enp6e318e3t9fn5+fn5/f35+f39/gICBgICAgIGBgIGEiouLioqKioqJiYmJiYmIiI+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pjo+Oj46Ojo6Ojo6Ojo2NjYyMjIyLi4uLi4uLi4uLjIyMjIyMjIyMjIyMjIyMjIyMjIuLi4uKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLi4uLioqKi4uLh4B8eHp6eXt8fHt8fH1+fn5+fn9/fn9/f39/gIB/gYGAgIB/gYSJi4qKioqJiYmJiYmJiIiIj4+Pj4+Pj4+Pj46Pj4+Oj4+Ojo6Ojo6Ojo6OjY2NjY2NjY2MjIyMjIuLi4uLi4uLi4uLi4uLi4uLjIyMjIyMjIyMjIyMi4uLi4qKioqKioqKioqKioqKioqKioqKioqKioqKiYmKioqKioqKioqKioqKioqKioqKi4uHgHt5eXh6fHx6e3t9fX5+fn5+f39+f39/f39/f3+BgYCAgH+BhIiLiomJiYmJiYmJiIiIiIiOjo6Ojo6Pj46MjI+Sj5COjo6Ojo6NjY2NjY2NjY2NjIyMjIyMjIuLi4uLioqKioqLi4uLi4uLi4uLi4uMjIyMjIyMjIyLi4uLi4qKioqKioqKioqKiomKiomJiYqKioqKioqJiYmJioqKioqKioqKioqKioqKioqKi4aBe3h5eHp8ent7fH19fn5+fn5/f35/f39+fn9/f4CAgYCAgIGEiIqJiYmJiYmJiIiIiIeHh46Ojo6Ojo6Ojo+MkJOQkI+Ojo6NjY2NjY2NjYyMjIyMjIyMjIuLi4uLi4qKioqKioqKi4uLi4uLi4uLi4uLi4uMjIyLi4uLi4uLioqKioqKioqKiYmJiYmJiYmJiYmKioqKiomJiYmJiYmJiYqKioqKiomJioqKioqKhYB6eHl5fHt6ent8fH1+fn1+fn9/fX9/f35/f39/gICBgICAgYSIiomJiYiIiIiIiIeHh4eHjY2Ojo6Ojo6Pj4+PjoyNkI2NjY2NjY2MjIyMjIyMjIyMi4uLi4uLioqKioqKioqKioqLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4qKioqKioqJiYmJiYmJiYmJiYmJiYmKioqJiYmJiYmJiYmJiYmKioqJiYmJiYmJioqFf3l6eXh7e3p7fHx7fn5+fX5+f39+f35/fn+Af3+AgICBgYCChIeKiYmIiIiIh4eHh4eHh4eNjY2Njo6Oi42Nj5WPiYyPjYyNjYyMjIyMjIyMjIuLi4uLi4uLi4qKioqKioqKioqKiouLi4uLi4uLi4uLi4uLi4uLi4uLi4uKioqJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYR+eXt5ent7eXt9fHt+fn59fn1+f35/fn9+f3+AgICAf4CAgICEh4mIiIiHh4eHh4eHh4aGhoyNjY2NjY+MjImKj42IjJGPjY2NjIyMjIyMjIyLi4uLi4uKioqKioqKioqKioqKioqKiouLi4uLi4uLi4uLi4uLi4uLi4uKioqJiomJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJg355e3p8e3p7fX17fH9+fn5+fX5/fn9+f3+Af4CAgH+AgH9/f4OGiIiHh4eHh4aGhoaGhoaGjIyMjIyLiYyKiIeJhoyOjJCMjZGOjIyMi4uLi4uLi4uLi4qKioqKioqKioqKioqKioqKioqKiouLi4uLi4uLi4uLioqKioqKiomJiYmJiYmJiImJiYmJiYmJiYmJiYmJiYmJiYmIiImJiYmJiYmJiYmJiYiIiIiIiYmCf3h7e3t6enx9fHx9f39+fn19fn9/f39/f4F/gIB/gICAgICAg4aIh4eHhoaGhoaGhoaGhoWMjIyMi4yOjoyKioeEiIuKjIuNjo+Li4uLi4uLi4uLi4uLioqKiomJiYmKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiomJiYmJiYiIiIiIiIiIiImJiYmJiYmJiYmJiIiIiIiIiYmIiIiIiIiIiIiIiIiIiIJ/eHp7enp6e3x8fX1+f35+fX1+f39/fn+AgICAf3+Af4CAgYCDhYiHh4aGhoaGhoaFhYWFhYyMjI2NjJCSjI2Ii4mJi4uLi4mLjIqMi4uLi4uLioqLi4qKiomJiYmJiYmJiYqKioqKioqKioqKioqKioqKioqKioqKiYqJioqJiYmJiYmIiIiIiIiIiIiIiImJiYmJiYmJiYmIiIiIiIiIiIiIiIiIiIiIiIiIiIiHgXx4e3x5enp8fHx9fX9/fn59fX9/f39+fn+Af4B/f3+Af4CAgIKEh4eGhoaGhYWFhYWFhYWFjIyNkY+PjZGJjIaJjIuIiImMiYeNjo+NioqKioqKioqKiomJiYmJiYmJiYmJioqKioqKioqKioqKioqJioqKioqKiYmJiYmJiYmJiYmJiYiIiIiIiIiIiIiIiImJiYmJiYmJiIiIiIiIiIiIiIiIiIiHh4eHh4eHh4WAenl9e3t7enx8fHx9f39+fn19f39/f35+f4B/gH9/f4B/gH+AgoSHhoaGhYWFhYWFhYWFhISLi46PjoyLj4iHiYmMjYWFjo2KiYyNi46KioqKiomJiYmJiYmJiYmJiYmJiYmJiYmKioqKioqKiomJiYmJiYmJiYmJiYmJiYmJiYmJiYmIiIiIiIiIiIiHiIiIiIiIiIiIiIiIiIiIiIiHh4eHh4eHh4eHhoaHh4eHhH55eX16enp7fXt8fX5+f35+fX5/f39/fX5/f3+Af39/f39/f4CChIaFhoWFhYWFhYWFhISEhIuLjI6MjI2Lh4mIiomGgoiNjoiKi5GTj4uJiYmJiYmJiYmJiYmIiYmJiYmJiYmJiYmKioqKiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiIiIiIiIiIeHh4eHh4eIiIiIiIiIiIiIh4eHh4eHhoaGh4aGhoaGhoaGh4eDfXp5e3p5enx8e31+fn5/fn59fn9/fn9+fn+AgICAf35/f39/gIKEhoWFhYWFhISEhISEhISEioqOjYmIiIqKh4iHiomIioiIh4qGi5GPiomJiYmJiYiIiIiIiIiIiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmIiIiIiIiIiIiHh4iIh4eHh4eHh4eHh4eHh4eHh4eHh4eHhoaGhoaGhoaGhoaGhoaGh4J8eXl6eXp7e3t7fX5+fn5+fn59gH9/f39/f4CAgH9/fn9/gICAgoSGhYWFhISEhISEhISEhISKi5CPiYmJi4qHh4WHiYuKiYSLjYmOjYqJiYmJiIiIiIiIiIiIiIiIiYmJiYmJiYmJiYmJiYmJiYmJiIiIiImJiYmJiYiIiIiIiIiIiIiIiIeHh4eHh4eHh4eHh4eHh4eHh4eHh4eGhoaGhoaGhoaGhoaGhoaGhoaGgXt4enp4e3x7e3x+fn9+fn5+fX1/f39/f3+Af4B/f39/f3+Af4CChIaFhYSEhISEhISEhISEhI+Qj4+IiYuIhoeIiYuLjIuJioqNio6Oj4iJiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIh4eHh4eHh4eHh4eHh4eHh4aGhoaGhoaGhoaGhoaGhoaGhYWFhYWFhoaAe3h5eXh4enp8fX1+f35+fn59fn9/f39/gIB/gICAf39/gIB/gYKDhoiGiIaDhISEhIODg4ODkpKOioeKi4qLh4uNiYqJi4iHiouIio+SioiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIh4eHh4eHh4eHh4eHh4eGhoaGhoaGhoaGhoaGhoaGhoaGhoaFhYWFhYWGhn96eXh4eHl5eXx9fn5/fn5/fn1+f35/f3+Af39/f4CAgH+AgH+BgoOHjo+PjoiHhIWFhoaFhYWSkI6KiYmIiImKioiIh4aKjIiHiYmOkJGNh4iIiIiIiIiIiIiIiIiIiIiIh4iIiIiIiIiIiIiIiIiIiIiIiIiIh4eHh4eHh4eHh4eHh4eHh4eHh4aGh4eHh4aGhoaGhoaGhoaGhoaGhoaGhoaGhoWFhYWFhYWFhYWGf3l4d3d3eXp5e3x9fn9+f35+fn5+f35+fn+Af4CAgICAf3+Af4GBg4eOjo6Ojo6Mjo2OjY2MjZCQjomHhoiJiYeIiouIiYyJiYaKjY6PkYuIiIiIiIeHh4eIiIiIiIiHh4eHh4iIiIiIiIiIiIiIiIiIiIeHh4eHh4eHh4eHh4eHh4eHh4eHh4aGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaFhYWFhYWFhYWFhYZ+eXd5d3d6eXl8e31/fn5/fn5+fn5+fn9+f4B/fn+Af39/f39+gIGEiI6Ojo6Ojo6Ojo6Ojo2NkJGOi42JjIiIiYaHiYaIioiHi4yLjpCQiIeIiYmJiIeHh4iIiYmIh4eHh4iIiYiIiIiIh4iIiIiHh4eHh4eHh4eHh4eHh4eHh4aGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoWFhoaFhYaGhoWGhYSEhIWFhoaFhIWFhX55d3l2eHl4e3x7fn5+fn5+fn5+fn5+f39+f39+f39/f35/f3+AgYOGjY2Ojo6OjY6NjY6OjY2Qj42Ni46KhoiKhISLiYeDhYSDi4mLj42JjI6QkI+NjYyLjY6Pj42NjI2Nj4+Pjo6MjYyMjY2KiYiHiImHh4aHh4eHh4aGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoeHiYqKiIeJi4yNjo2LiImLi42OjYyJiImMgHl3d3Z6eXh7e3t9fn5+fn5+fn5+fn5/f39+fn5/f4B/f4B/f4CBg4aMjY2NjY2NjY2Qj4+Pj46NjI6KiYuMjIeFiY2Lh4aIh4aHh4uNjo6Pj4+Pjo+Pj4+Pj4+Pj4+Pj4+Ojo+Pj4+Pj4+Pj4+Oj46Oj46Mi4uJh4eHh4aIhoaGhoaGhoaGhoeLiYeHiIiLjY2Mi4yLjY2Ojo+Ojo6Pj46Ojo6Ojo6Ojo6Njo6NjY2AeHZ4eHp4enx6fH5+fn5+fn5+fn5+f39/fn59fn9/f39/gH9/gIGDhoyMjIyMjY+QkpOTk5KSjYyMjIqHioyKh4eJiYWCiouIiYWJjpCNjo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6NjI2NjI2LiYaHh4eHiYqLjY6NjYyNjY6OjY2OjY2NjY2NjY2NjY2NjY2OjIyNj4+OjY2MjIyLi313dXd5enp7e3p+fn5+fn5+f35+fn5/f39+fn1+f39/gICAf3+AgYOFj5KRkJGSk5OTk5OTkpKLi4uLiomMiouLiYuKhoeOjYiIjI6OjIuMjIyNj46Njo6Ojo2NjY2MjY2NjIyMjIyMjIyMjY2NjYyMjI2NjYyMjI2NjIyNjIyMi4yMi4yMjI2MjIyMjIyMjIyMjIyLi4uLi4yNjY6Sk5OSkpSRkJOVlZSTk5COjo6Oe3Z2d3h6ent7e31+fn5+fn5/fn5+fn5/f35+fn9/f39/gIB/f4CBgoSNkpKTkpOSkpOTkZKSkoqJioyJi4qJjIuKioiHiYqKi4mKjY2Mj46Nj5KUlJOUlJOTkpGSkI+Ojo2NjY2Pko+OkZGOjIuKioqLi4qKi5CPjoyMjIqKioqKioqKiouKioqKi4yLi4uMjIyKiouLi46RkpOTk5SUk5STk5SUlJOTk5KSkpKSk5F6dXZ2eHt7e3p6fX5+fn5+fn5+fn5+fX5/fn5+f39/f3+Af39/gIGChIuRkZGRkZKSkpGRkpGRiYmIiIqMiYiJiYuJhoSJhoyKh4ySkpKTk5OUlZWWlZWUk5OUlJSUk5SUlJSVlZWVlZWUlJOTkY+QkZKQjoyRlZWVk5KSjo+QjYqKi4qKi42OjY6RkpCRkpKSkpGRkpKSk5OTk5OTk5OTk5OTkpOSkpKSkpKSkpKSj3h1d3l6e3t7ent9fX19fn5/f35+fX5+fn5+f39/fn9/f4B/f3+AgYKEi5GQkJCSkpKRkZGRkZGIiIiIi4uJg4eLi4yMiIeHjYyNkpSSkpOTlJWWlpaVlZSSkpOTlJSUlJWVlZaXlpaWlpWUk5SUlJSVlJSUk5OVlZWUk5KTk5OTkJGSkZGSk5OTk5KSkpOSkpKSkpKSkpKSkpKSk5OTk5SUk5OSkpOTkpKSkpGRkZGPdnJ3enp7e3t8fX59fX1+fn9+fn9+fn5+fn6Af39/f3+Af3+Af4CBgoSKkJCRkZGRkZCQkJCQkIeHh4eIiIiFi4+KjI6Njo+OkJWUk5OTk5SUlZWVlJSVk5KSkpKTlZSUlZaWlpaWlpaWlpSTk5OTk5OUlJOSk5SVlZSTkpKSkpOTk5OTk5OTk5KSkpKSkpKSkpGSkpGRkZGRkZKTlJSUlJSTkpGRkZGRkZGRkZGRkYx0c3d6ent7e3x9fX1+fX5+f35+fn5+fn5+fn9/f39/fn9/f39/f4GDhIqQkJGRkJCQj4+Pj4+Ph4iKi4yNjYuOj42Mjo6RkpGSk5OSkpKSk5SUlJKSk5OTk5OSkpOUk5OTk5WVlZWUlZWUk5OTk5KSk5OUk5KTlJSUk5KSkpKSk5OTkpKSkpKRkZKSkpKSkpKSkpKSkZKRkZGSkpOTlJSUk5OSkZGRkZGQkJCQkZCRinN0dnp8fHp7fXx9fn59f35/f35+fn9+f31+f39+fn59f39/gH+AgYKDipCQkZGQj5CPjo+Pjo+Oj4+Pj4+Pj4+PkI2OjpCRkpKSkpKRkpKTk5OTkpGSkpKRkZKSk5OSk5OSk5STk5OTlJOSk5OTk5OTk5OSk5OTkpKSkpKSkpKSkpGRkZGSkZCRkZGRkpKRkZGRkpGRkZGRkpKSkpKSkpKSkpKRkJCQkJCQkJCQkJGGc3V2e3x8e3x9fX1+fn1/f35/fn5/gH9+fX5/fX5/fn5/f3+Af3+BgYGKkI+PkI+Pj4+Pj4+Pj4+Oj46Oj4+Pj5CQiI2PkJGRkpKSkpOTk5OTkpKSk5KSkZGRkZKSk5KTkpGRkpKSkZKSkpKSkpKTk5KRkZKTkpGRkpKSkpKRkJCQkJGRkZGQkJGSkZGRkZGSkZGRkZGRkZGSkpKSkpKSkZCRkZCPj4+Pj4+Pj4+PkX9ydHh8fHx7fHx9fX5+fn9+fn5/f3+AgH99fn5+f39+f39/f4CAf4GBgYqPj4+Pjo6Ojo+Pj46Ojo6Ojo+PkI+Pj4+GjpCQkJCRkZGRkZGRkZGQkJCQkZGRkZGRkZGRkZGQkJCRkZCQkJGRkZGRkZGRkJCQkZGQkJGRkZGRkI+PkJCQkJGRkJCQkJCRkJCQkJCQkZCQkJCQkJCQkZCQkJCPj4+Pjo+Pj46Ojo+Pj4+PeHJ2eXx9fHp9fH19fn5+f35+f39/f4CAf39/fn5/f35/f39/gIB/gYGAio6Ojo6NjY2Ojo6Ojo6NjY2Oj4+Pj4+PjoiQkZCPj4+QkJCQkJCQkI+PkJCQj4+Pj5CQkJCQkJCPj4+PkI+PkJCQkJCQj4+Oj4+QkI+PkJCQkJCPjo+QkJCPj4+Pj4+PkJCQkI+PkI+Qj4+PkI+PkJCQkI+OkI+Pj46OjoyMjY2NjIqDiYhzc3Z4fX58eX18fX1+fn5/fX5/fn9/f39/f4B/f39/f4CAgH+AgH+BgYCJjY2Ojo6Ojo6OjY2OjoyNjY6Ojo6Ojo2NiJCRkI6Njo6Ojo6Ojo6Pjo6Ojo6Ojo6Pjo6Ojo6Ojo6OjY6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Pj46Oj4+Pj4+Pj4+Pjo+PjY2MjYyNjoyLi4mJiYiFhYSDgoKEgnR5fXp4dXJrZWltb2xmZmdncHNzd3l9fnl6e3x9fX1+fn59fn9/fn9/f39/gIB/f3+AgIGAgIB/f4CBgImNjY2NjY2MjYyMjIyMi4uLjYyMjIyMjIyGj5GRjIyMjIyMjIyMjIyMjIyMjIyNjY2MjIyMjYyMjY2MjIyNjY2NjYyMjI2MiomKi4uJh4KAh4iEgXt6gH57fXx8fXlzcnJycnV1cG1ramppZ2NkYV9bXF1eWFVXWFlTS0VJSkpLTE1PT0tgdHR3eX19eHp5e3x8fX5+fn1+f39+f35/f4CAgH+AgICBgYCAgICAgIGAf4OEhYSFiIuLjYyMjIuLi4yGiYqKioqKh4OOkJGNiouLi4uMiYmKioqKiouLi4eDi4qIiYmGhYWEhIeJiYWCg397fHl6e3pzcHFxcW1samdsbWdlZmVmZGNlZGVkZWVlZWRkZGNhYV5dXFpYWFdUUFFSU1JTTU1KSUZESEpHR0hHR0xOSWdzdXh6fXp4d3l8fHx8fn5+fn9/fn9/f39+f4CAgIB/gICBgICAgICBgYFnXmBjYWNucX17ent/fXd8fHZ4ent4eHpvcHt4eXt8e3h3e394dXd0dHZ0dXZ3dXFycW5wcnBnaGtsbm9tamlpaGhlZWRkZF9gYWJgYF5dWVhaWltdXV9gX2BfX19gYmFeXl5eWVldXF1bV1dWUlRSU1NOUUpISUZERUhMTEhGR0lLSklNbXJ0eHp7end3eXt6e3x+fn1+f39+f35/f35+gIGAf3+AgIGAgICAgICCgWdYW1pZXFtcY1xaXF5ga3FtcHBvbm5vbmtpbmxrbG9qaWtraWpraWZmZ2dnaGhnbWdqZ2hlaGdjYmJhYmBgXVhbW1dYV1RWUVBUU1NNSkxLTExOTk9UWFhXVVVUUlBQTU1QT05LTE1QUU9MTEpHSUlHSEhJSEhIR0ZHSEpKSEhISUlISVZwc3V5ent5dnZ5enp7fH59fX5/f35/fn5+f3+AgX9+f4B/gICAgICAgIGBbFtYVlZWWVlaWVlYVVZoamxubmxra2poaGloZGVkYlxiZl9fYWNfXF9dYF1eWl5dWVleYmFeXlpZX1tYV1NOTUxLS0tMSUtNTktKS0tMSktQTEtLRkdHSUlGR0lISUZFSEdGRkVERUVEREVJSUlHSEdIRkZLTUtJSUlIR0hLTU1LTExMVXFzdnl6e3h2d3h3ent8fn1+fn9/f39+f3+AgIGAfn5/f4CAf4CAgIB/gYJoUlRVVlNVV1lZWVdXV1tbYWNfXlxbWFZWWVZSVFJRUVVUU1NUUE1KTU5QUk9NUFFRUVFRVlZRUVFUUFBOTk9MSk1MS0xKSktLRklJSkxJR0pISUlFR0dGRkVFSElKR0ZHRkZHR0hKR0dISEpMSkpLSUlISktLSkhKS0pISUtMTU9QUEtUdHN1eHp6eHZ2d3d6enx+fX5+fn5/f35+fn+AgYB/f3+AgYB/gICAgH+AgmlQUlRXVVRWWVdYWFpbVFRTUlBRU1FRUU9OTlBQUU9MTlBPTk5NTEtNTk5QTU9QUFJRUE5OT05PTk9QUFFPTk5PTk5QTk1NS0lISEpJSUlJR0ZHR0dJSkhJSEhJSEhHSEdISElISUxLSklISkpJSkpIR0pMS0pJSUhKSktMTk1NTU9RTFVzcnN3enl3dnR2eHp7fX19fn5+fn9+fn5+gICBgICAf4GBgH+AgICAgICBbE9PTlRZVVVdW1lXV1hOTUpKSUZKT0xKSkdJSk1NS0pMTUpHSUlJSktMRkRGSktLS0hKTExMT01MTE5PT09NTk9MTk5OUFBPTE1MTk1MTEpJSEdJSElISElJS0xLS0pJS0pJSklJSUlJR0dKSUdJSUpKTk1OTEhJSklJSk1PT01MT1JOWXBwcnd4d3d0c3R3enx+fX5+fn5+fn5+fn9/gICAgICAgYCAf39/gICAgIFvS0pNTlFOTlVXVlZSU0lFQ0VFUkREQT5CP0RAQD5CREFAQURHRkVIRUJBQEBDQ0RFQUNFSEtPS0lJSkhISklKSUlLSkxQTk1MTU1MTU1NTElIREZGR0ZGRklKSUlLSkhMSklKSkpJSEhKS0tIRkdJSklLTU5OSktPTUxLTU1PUE5QT1BgcG9yd3h2dHJzdXd6fX19fn5+fn9+fn1/gICAgICAf4CAgIB/f3+AgICAgXNQUE5OUE1KS1BSUE5RQ0RCQUZRRT1DPT9FSDk6Oz0/PTxBRkA+Ojs+PjxFRD0/RUE/QEFAREVHR0dHQkREREZFR0dHR0pHSEpLR0NER0pHQ0RFQUFDR0hHSEdISktKSElMS0lISktLTU5MTUxMSkpMS0lLTU9PUFNRT1BQTk9QUlFNUGdwb3N2dXRycXR4eX19fX1+fn5+f4B+foCAgH9/gIB/f4CAgH+Af4B/gICCdlRVUVFQT0xNUFBOT09BQkFAQkE/Oz48Pj8/Ozg5ODs7OkA7Oz48Ozs8PEhMPT1BQEBDRD1BRERGQ0ZGREZJSEM/QEBAQUFCQUE/Pjw9PkFAQD8+P0BFR0dHSUtMTk1OTUxNTUpLTVBVU05MTlFOTk1OTE1NTk9OTk1LS05OTk1OTkxUbnBwcnR1c3Fydnl5fX19fn1+fn5/gH5+gICAgICAgH9/gICAgH9/gH+BgIJ4UVFSVFJTUVNTUVFST0BAPT4/PD8+QEE/PT45Ozo7Ozk5Ojg4Ozw5Nzk7PD49Ozw7ODpAQEFCP0FAQ0ZEQ0NDPzs+PkBDQ0E/Pj9BPkBAQj9APD9CQEFDRUVFSktQT1BPTU1OTExMT1JRUFJOTExPTUtOT0xMTEtMS0tKS0tKTU1LS1xxcXF1c3VycXR4eHp9fn1+fn5+f39/fn5/gIGAgH+Af4CAgICAf4CAf4CAgXxSTU9RUFFSUlRSU1NOPDs8Ozs7P0BBQkA9PDk8PTw6Nzk6Ojk3OTo6Njk6OTo7PD83PTs6Ojg8PD1AQUA9Ozs+PD09QEJDQT9BQkE9Pj09Oz0/Q0RCQD9BREJFR0pKSkpKTE1MTExNTExOVVNLTE1USVBKSU1KSUpLS0pJSEdKS0lKZnJxc3RzdXJydnl5e31+fn5+fX9+f39/f36AgICAf4CAgICAgIF/gIF/gYCBgFZMTlBQTlJRUFBRUU44PT88PDo9PkFAQT8+PkA/Pj07PD0/QD09PT9RPj09PTxBTDtMQjk7PD49Pj9AQUA+P0E/QEBBQEBAPT8/PTw6Oz09PD9AQUJCQUBCREZGRkdGR0dISUtMTExLTEtKS0lKSk1MTEpMS0lISUxMSklJSElLR01tcHF1dXR1c3V4eXl8fX5+fn5+fn5/gH9+gIB/f39/gH+AgYCAgYCBgICBgYCCYUtPT05OT1BPT1BQTzo8Pjw9Oz8+PkFBPz0/Q0NEQD08PkBBP0E7WnlPPUNFPkRYPFlOOzw8Ozo9PkFBPz5AQD9BPz89PD48PTs7PD0+QUA/QD5AQ0NEQkRFSEVFR0hISEdGSUpJSUlJSUhKSkpKTEtKSklJSEhKSktMS0lLSkpIVnBwcXNzdHR1eXp7e3x+f35+fn5+f39/f39/f3+Af4CAgICAf4GBgICAgIGBgIJtTFBRTk9QTk5PUFBPPjw8PT4/P0A+QEA/Pz9DRkQ+PDs9QD05Ojpvd1k3Ozo8R149YFw5Ozw7ODk7Pz49PD07PEA9PTw8Pjs9PD0+QUBCQUBAP0JEQ0RFRkZGQ0VHSElJSEhJS0tMTUpKSUpNTUpLSktJSEhISEpJSktKSk5MSUlfcHFycnJ0dXZ6e319fX5+fn5+fn5/f35/f36AgIB/gICAgICAgYGAgICAgIGAgnZNTk5NTk5MTE5QT0w+QTw8PT8+QkM/PkFBQUJBQ19JPDtGY2dfV3d3WDc4ODhNYkJlaDw7PDs6Ojs+Pz89PDg6Pjw9Pj89Oz4/QEJDQkJDQ0FCQkFCQkRCQkRCRENGSUdGRkhJSUtNSklKSktMSkpJSkVESUlGRkhISUpKTEpGRmdwb3FxdHZ1d3t8fH18fn59fX1+fn9/foB+fn+AgH+AgICAgICBgYCAgICAgICBek5JS0tMTExFSUxOTTw/PDw9PkBAQUE7QkNCQ0BPfHRGRnWGhoaCfHdZPD0/PFNqR2drPjs9Pj89PT5BQ0A8OTtBPz4+QT07P0JAQkNCQENDQUNBPT0+QD0/QUFBQENFRUBAQ0JDR0dFRENGRUZGR0VEQEFHR0ZDRkRHSEpHQz5IbG9wcHF0dXZ5fHx8fHx+fn1+fn5+fn5+f36Af3+AgICAgICAgIGAf4CAf4CBgIF+UUhLTU1NS0pLTE9RQD8+PkFBQEBBR0FCRENFQFV2enB2hIODgYKAfVk+QEM+U29MZGg9Oz1BRUFCQkZIQz08QERDQUE/Pj1AQT4+Pj88PkBER0VAPkBBP0BDRkVDQkNDQEJEREJERUFCPkFCQkFCQEA9QUJDRENDQUNFR0E/PVZwcHFwcnV1d3p8e3x7fX9+fX19fX1+fX5+fn9/foB/f4CAgICAgYCAgIB/gIGAgX5SSEtNTUxLS05OUlVEQkBDQ0FBQkBCQ0BAQUFAUHRzf4OAgYR8fIVtRkJDREJSaWRzcklAQ0VISUlJTU1LRUNGR0hFR0VFRUREQ0E/QD4+QkZKSkdFRUdGRkpOTktKSUdHSEtMSUdHQ0REREVEQUJCQ0BDREVEREVERUZDQkFEZW9wcXF0dnV4e3x6fHx+f319fX19fn59f4B/f39/f39+gIGBf4CBgICAgH+AgICAfVJJSUpKSEpKTE9SU0dGRUdIREdIREA+PDs+QEVHbHN9gHl/hYB9hnNGQ0RETWd9h4iIflhHSFFQTE5PT0xIR0hHSElJSEhHR0hIRUNFRUVFRkhKSkZFR0lKTU9PTU1LSktKTU5LSUhHSElIR0ZFRkZGREZIR0VFSEhGSEdIRlFubnBxcnZ2eXt7e3p9fX5/fX19fX1+fn1/f39/fn5/gH+BgYGAgICAgICAf4GBgIB8UEhHSElGR0lKTU5OSkxJSUpLTE5KRkNBQkNGSkdgen+AfIKEhoWFi2xAQFZ3hoiHh4eIglhSXk5MTU5MSkdHR0dER0dHR0ZIRkhFQ0RERkVEREhIQ0NDR0pKS0xMTExMTElKS0pKSUlJSEpISEdISUhHR0hGRkZISklJSUlIXW9vcXJzd3d6e3t6e319fn59fX19fX5+fYB/f39+fn+BgIGAgYCAgICAgIB/gYCAgHxNR0ZIRkVGR0dKS0pMTUxLTU5NT0tJSEhKS0tMS05cfIOFhISEhYaIgFZshYeGh4aHiIiHfmlWS0tIR0ZGREVDQ0BBQ0NDQ0ZGRUJAPj5AQUFAQkQ/Pj9ERkhERUdJSklJSEhJR0lJSkpJSEZKSkpKSUpJSkpKRklMTEpKS0tmb3BzcnR2eHl7e3t8fH1+fn19fX19fn59f39/f35/f4CAgICAgYCAgIGAgICAgICAfU9GRkdGR0hHRUZHR01NTUtMS0lHQ0NDRElLS0xMSlqDhISFgIGFh4aDgoWFhIWGhoaHiIaJe0tJRkI/P0A/Pz88PDw+Ojo8QUFAPjw5OTg8PD07Pjs5Oz9BQkBBQ0NCQEFCRERCQ0ZISUhISExNTEdJSk1NTk1KSktLSkxNU2xvcXRzc3d5e3t7fH19fn9+fX19fX1+fn5/foB/fn9/gICBgIGBgICAgYCAgIB/f39+UUZFRkdJSUdEQ0VGTk1MSklIRT85Oj5ARUhISkpJaIWEhYR/gIODgoOEhIWFhoeIiIiJiYyNZkJCPTg4Ojo5ODc4ODk2NDc5Ozw6ODU2Nzc4OTc4NzU4ODs7Oz1AOzk5OT08Pjs7PUFERUhKTUxMR0lIT1JRUFBOTE1NT1Fdb3BydHN1eHp7e3x8fn5+f359fX59fX5+f39/gH9/f4CAgICAgYCAgICAgICAgIB/f39RR0ZHSEpIRkVGR0hMTEpJSUdDQjU2OjxDQENHSUlphoWEgYCChIODgoOEhomKi4uLiomKi4yJVDo4NjU2NzY2NjQ1NzYzNDY4Ojg3NjU2NTY3Njc3ODo3Nzc4OTs3NTc4OTc5ODc2OjxAR0ZJRklGRUZPU1JTU1JPUFBSVGVwcXN0dHd5e3x7fH1+fn5/fn19fX19f39/f3+Afn+AgICAgICBgICAgICAgICAgH9/flJISEhJS0lHSUpJSkpLREVIRUJANTc4OD06PUVDQmiFg4GBgoODg4ODhYmKiomJioqKiouJiYqBSDY3NjQ2ODg3NDU3ODQ2NzY5OTc2Njc2NTo6Ojo6Ozg5ODk4Nzc3OTo5ODg3ODU4OTtBPT4+QkE/QUtMT1FQUU9PT1JXa3FydHR1d3l7e3t9fX5/fn9+fX19fX5/f4B+fn9/f4CAgH9/gICAgICAgH+AgICAf39+VEhHSUlMTUtKS0tMSUg/QEFAPDo1Nzk4OTc7Qjo+doSBgoODhISEhIaJioqIh4iIiYqKjIqJiYx6Pjo4ODs8PT45Ojs8ODk7OTo7Ojk5Ozo5PT09Pzs7Oz06Pjs5Ozs8Ozw8OTo8ODo6Ozo5OTk8Pzw9QUJESUpNS0lLTFdvcnN1dHZ4e3t7fHt9f39+f359fX19fn9/f35/f39/f3+Bf4CAgICAgICAf4CAgH+Af35URkVGSUxOTkxKSk1CPzo7PDs4OTk4OTo6Ojs/PUqBg4KChIWFhYaIiYiHhoaGiImIiYuMi4mKioxsPDs+QkNFRUFBQUI+QEJAQD49Pj5APz8/QD9APT0/Qj9BQT9BPz1AQEA+P0E9Pjw7Ojs5OTs/PTs7PT1BQUNBQkNBWHBxdHR0dnl7e3x9e31/fn9/fn19fX5+f35+fn9+f4B/f4CAgIB/gIGAf39/gICAf39/flJFQ0FHSk5PTElHSzo4Ojs5Ojo8PTo7Oz09P0BCVYSCgoSFhIWEhomJiIiGhoaHiImKi4uLioqLiotePkRHSUtKSUZHR0RGSEdFQkFAQ0VDQ0FCQ0I/QERIRUNFREVFQUZFRkRFRkRAQj88QD49P0A+Pz8/Pj8+Pjo7PTxgcXJ0dHV3enp6fX19fn5+f39+fX19fX5/fn5+fn5/gH9/gICAgICAgICAf4CAgIB/f4B+UERAPUNIT01HRkJEOTc6Pjo8Oz4/Pz89QUBDQ0VahYKDhIWGhoaIiYmIh4aGhoeJiYqLjI2MjIuKiohXSExNTUtOSklLSElKSklFQ0RGR0ZEQ0VGREJISUtIR0dGR0dFS0lLSUpLSkNGQ0NEQkFBQ0JEQ0NERENBPTs9QGhwc3R0dnd6eHt8fH19fn5/f359fX19fn9+fn59fn+Af3+AgH9/gICAgICAgICAgH+AgH9PQT49P0RMS0BCQkE5ODw+Ozw7PkA/QT9CQ0dHSluFgoOFhYeHiImJiIiHhoaGiIiIiYqMjYyMi4uKjH9QTU9NS05LSkxJSUlISkZER0hISUVFSEZGRUxMTUlKR0dISUpPTU5MTE5LR0dHR0VFQ0ZGRkZERUhIRkNBP0BMbHB0dXZ4eXl5fHx8fX1+fn9+fn19fX1/f35+fn5+f39/f39/f3+AgICAgIB/gICAgICAf1FBPz4/RkdHPTxAQDg4PDs8PTo/QT5AQENGSUpRYIKDhYSFhoeHiIiIiIiIh4eIiIiJioyNjIyMjIuKjXFNUU9NTExLTEpISEVKSURKSEdLSkhKR0dHS0xOTExISElKTVBOUE5NT0tJR0lKSElESUhIRkZHR0lHQ0JBQ1VucHV3d3l7eHl6enx8fX5+f39+fn1+fX5+fn5/f36Af4B/f3+Af4CAgICAgICAgICAf39/VERBQUJHSEI/OD9AODo8OD0+Oz1BPj9ARUlLTVZyg4SEhISFhoeIiIiIiIeGiIiIiImJjIyLjIyMi4uLi19SUlBNTk1LSkdGQkdKR0xKRktPTEtKSk1NTE9QTkhJS0xPUVFRUU9PSklKSkxKTEZHSEdFR0lGRUVCQEJCXG9yd3h5enl5eXp6e3x+fn5/fn59fX19fn9+fn9+f4CAgIB/f39/gICAgICAgICAgH9/f39VRUNFRUdHRUQ7P0E7PTw5QD4+QEJHR0FITE1RV3mFg4ODhISGiIiIiIiIh4eIiIiIiIqLi4uMjIyMi4uNfFdWUlJUUk9MS0pERUZLT05PV1ZRUE9RU1JNU1RPTVNMUFNVV1JTUVBMSk1NTUtOR0dKRkZISkRERUVCRENjcHV5eXp6ent6e3p7fH59fX9+fX19fXx9fn5/gH9/gICAf39/f3+BgYCAf39/gIB/f39/f1VGRkdHR0dIRj5AQj0/PT1CP0JDR1ZORk9RUVVZfIaDhYWEhIeIiIiIiIiIiIiIiIiJiouKioyMjIyPi4uLZ1ZVa2FFUlFRUEo7O1FTUmB1XVVWVFZZWVJZWFJaZlBVV1pdUlRXUVBOUlBQUFFLS0tISEpIRUZJSElISWlydnl5enl6e3t8ent8fXx9f359fX19fX1+f39/f3+AgIB/f39/f4CAgIB/f3+AgH9/f35+U0hKSUlHR0ZFPz9BQUVCQ0dFREVMWFJNVFZWWFt8hoWHhoWGh4iIiIiIiIiIiIiIiIiIlJyMioqMfWGKi4uHbFtkVTpYWFhTUD5AVlVZXGRgVllicl5dVl1aVkVRWVpbWV9UWmdSVVZYVFRWVE9PTUpMSklJTE1LT01Tb3N2eHl4d3p6ent6e3x9fH5/fn1+fX19fn1/f39+f4CAgH9/f3+AgICAgH9/gH+Af39+fn5WSkpJSEdGRERCQT9ITUlNUEtJS1BUU1NYWlpcXHiFhIWFhYWGh4eHiIiIiIiIiIiIiImcnaCPiY5nO36MiYqLem5wWFpbWlJTUlZWVFpadYNZVX2QYVxYXV5XSVZdXVtbX1lJWVhZW11YWFlXUlFOUFFNTU9TUVFVUmFzc3Z3d3Z4eHh6e3t8fX19f39+fX59fX1+fn9/gH9/gIB/f3+Af3+AgICAf39/gIB/gHh5fVlOS0lJSUZCREBBOlBRUVdYUFBPUVNUVFhYWVpbboGCg4WEhYaHh4eHh4iIiIiIiIiIiJaanJeIioFuhomIh4OKfmZZWVxZU1ZUV1JRV1ZjloBRZXJYWldfaFBgZltbWFxnYUdPWmhnXFtcXV1XUk9TUFBRVlZWVllabnJ0d3Z2dHd4eHt7fH19fX5/fn59fn18fn9/f3+Af39/gH+AgH9/gICBgYB/gH1yfX9/b3R8XVNQT01LSkVDP0A7UFBaWltSU1FPUlJSVVNWVFdfdXiAhYSEhYaGhoaHh4eHiIiIh4eIh4ORjomJiIaFiIiGfYB7XFBVWFRSVFJRUUxPTUtmeVpdVFlVVl1aTFRaVFNUXlpYV1dXemtYWltcXlRRUVBJTk9XVlhaWmRxc3Z2dHR2eHl5e3t8fH19fn99fX1+fX1+f39/gIB/f3+Afn56eHd2c3V7f3+AgHRrfn5rcnleW1ZVVFJPS0ZDREFNXoNsVlJTTk9RT1FVUlNSUlRjZHaAgoKDhISEhIWFhISDhoaGhoeIhn6JiYiHhoOHh4d5bXFWSUtNTktNS0hKREZIRUM+U2NVf1JRUU5LUlRRTU9ZUU1OUVNVVU1RU1JQT01MSENJSFJUVVpcbXJ1dnVzc3d7ent7e317fX19fn19fX59fn9/f4B/f399fX5+f39/f4B+e3Zzd31+fmR1fWlxdF9kXV5bWVZQTElMSWFsknRQUVNOUVJRUltSU1JRUlZVYnN7fH+AgYKBgX99e3uAf4OChYaHgoaGhoGEgYaFhnVfXUtDP0NDQ0NCP0RQQkRAQz5CSEdWQEhOTUddaVFIRk9GREVGSEdIQkNIR0hLR0NCQURAT1BNU2RzdHV1c3R1enx6e3t7fHx9fHt+fX19fn5/f3+AgIB/f3x8fX+Af39/f4CBgH12dHt/bWh8Z25xZmllZGJbWFNRUFVSc1dlW09PT0xRU1FVWVNVUVFUU09WYGtscnZ7e3h5dHJuc3RzeXh+foOAg4OCgIKAgoGBa0xHPz87Oz5AQD8/PmtRS2FFRkhJRUI/R0xNR01RVUlCRT8+PD08PT0/PT9BQ0M/Pjw9Qj5KTUZVbnV1dXN0dnh6fHp9fHx9fX19fH59fXx+fn9/f4B/f39/enl3eHd2dnh7foB+fXt4dnx1YXhnbHBqbGppZmBbUVJaXFleSUpQUU5LTFFSUVRVVVdRUVdWUFhbYl1hZ21tbG9raGBucmptbHF1e3p9e3h6fHx4d3hkQkBAQj06QkNBQURCXF1Pe05PT05LTE1PT1FMS0xXTUhHQEI8OTc3NTk5PTs7Ozg5ODk/O0JIP1x0dHV2dXZ4enx8fH18fH19fn58fX19fX9/f39/fn9/f314dXZ6e3p3eXh1d3t8eXh1eXdjcWhpcG1ubW1oZl5PUF5cWklHUFJRT01QUU5RUlRWWFNSWVROWVpbV1ldXl5gZWBdXnF2a15gZ2t3b29sam9ubmxmYlhHRkZIQkFGSUVFRkRNUlBhV1JYUVBTU1JVW09PUVdQTUpDRj46OjY0ODY5Nzk6MzY2Nzk1PEI9ZXNzdnd3eXp7fX18fHt8fX5+fnt9fn19f39/fn5+fn9/e3d1eX18enh8fHx8dHd2d3Z1d2tuaWhxbm9vb2prYFVXXlpXTUxUVFNRUVVPTFJTVFdYVFRYUUxYWVpWWFhWWFldV1dYaHNrXVZhc2thYV9dZGFfXllVUE1PTkxISEpLSUhGQ1FQU1pXVFROUVNZU1xlVU9TVFFOS0lIQz9BOTk4ODk3ODg1NzU3ODU5OUducXR4eHp7e31+fX18e318fn5+en1+fH1/f359fn59f358dHR1e3hycW9vbnR4cXJzeHZ1cWZkZ3JucHBxbm1kXV9fWVdPUFhWVlNUVk9PVVZYWFlTVVRMS1RVVVVVV1BUVVdUVVJdbl5STllfW1ZZO0RWWFRbZkpMUFJST01NTk5OTEpGUFBVWVNUTkpPT1RTVFxWUlVTUk9NS0lISEY/Pz06Nzg3NjU5OTY3NjY1V3Bwc3h5ent8fX19fnx8fXx+fX15fX18fn5+fXx8fX1+fXxydnF4eHJ2dXFxbnBwb3B1dnRuamRkanBwcXJwbmZlZGNcXlJUWlZXVVRXVFJYWFlZWVJVT0pIT1BPT01SSk9QUFBOTk9UTE1JUE9TVFUyPFhNSUFRPWNhUVNRUE5QUVBOTk1QTlRSUFJNSUxLT1FQUVJTVFFST0xNS0xMSENCQT06Ojg3NjtCNDU2NjtlcHF1eHh7fHx9fnx9fH19fX18e3h8ent9fX58e3l9fH18e3B1b3d1cHV0b3N2cHFxcHR1dmNqZ2VXaHRycnFuaWlocFZWVFVYVVdVUldWVVpZWFdVUVNGRkJGR0dIRkpESEpIR0VITEhLSEZMTVBNRy9FX1I+M0A+am9hUlJRQEZVUVBRUFFOUU9QT0xKTExPUE5OUFFRTlBPSkxNTUtHRUVEQjs9PDw5PUc2Njc2RG5xdHZ6e3t8fX18enx8fX5+fXt5dnh3eXl8fXp6dn17fHp6b3Fud3JwdnFtcHNwb3Bzc3N0ZmdgaFpXa3JzcmxtbWtuYmVQU1RSU1VPV1ZWWVlWUVFRT0A+Oz0/QEJBQ0BCRURBQEdIR0hFRkhKTktFR0NPUkM4RU5TXWZTUVNBR1VQT1FRUE1NTkxKTEtMTk9PUU1PT01ITExJS0tMS0hGRkVEPEFBPjtARTs8ODlUcXN1eXt7e318fHt5fHt6fn58e3V0dXJ2dnp6eHpyfHt8eXltcW94cnF1bm5xcm9vb3Rzc3J1dGtnZ15lam1wa29xbWltY0xPT01RU0xUVVRXV1VMTEtIPTk4Nzs/QD48PUBAQj0+RUhHREZGSUdKSkBGQUFARkhFSk9IUFJhXFFQUk5TT09QTExPTUtNTE1PTltXS01RT0dJSENJSkxMSkZGRkQ/QkM+PEJGP0I/QWRxdXh7ent7fHt6end8eHl9fnt7cXN0cHJzd3R4eHN6e3l2d2xxb3ZxdHRsb3Fybm5vc3ZydHNycmtsZW5zaG1ubWxtbGprSUxISE9RSlFTUVRTT0tIQ0U9OTg3OT9CPjs/QUBAPkFESUVDSEhJR0lFQkI/Pj1DQUFHSURNT2JlUU1PTldLTE1LTE1NTExLTk5TZE1KTFJJSUlFQUhKTE1OSkdJRkJBQkA/RUZFSERLb3B3enl5e3t6fHp3c3h0eHx8eXpucXJtbm9ycnZyc3h8eHZ2bXBtc3B1dGxwcHJvb29ydnVyVlZucWdseYRqbXFybm5qaG9ISkNHTE1JTVBNUE9IS0U/Qj05OTk6P0I/PEBCQUFERUdLRkRJSUdHSENDP0I/P0BBPkNFQ0tNUVRMSklNVEZJSUpMSktLSUlMTU9QUlBLR0NLR0NCSkpMTU9NSUpJR0NDQ0RJSk1MSVpzbXh5eHp7e3l8dnJwdXJ0eXl2eGpxb2psbG50dG10dXtzdHhyb25xb3ZzbnBvcnBvcHN0eWpOYGdzanR8eWdvc3FqcWhlcUhLREdISEdKS0lKS0RHQj0+PTo6OjtAQj89QkJDQ0dGSkxKRUlJRkdIQ0M7QUBCPkBAQ0VDSU1QR0lLRkhLREhJS01ISkxISEpMS01dUklIRE1GQURLSk5NUE5LTUpLRkdHSk1OUU5MY25pdnZ3e3h7en1xbWxza3B0dHR1aHBtamlra3RwbnR0eXByeXRvcnFvd3NvcXB0cnBydXR5a05WbXVscXt2aW5vaWp0aGRvRktERkVHREVFR0VHQkNAPjw9Ojs6OkBEQD5CQ0RFSUZKSkxGSUlHRkZEQjtCQ0M+P0NDQ0VHTE5IS05IREhFSUxOTUhJTEdFRklJTE5LSkhFTkhDR01MT01PTU5OTUxJSEpPUlFSTlJmZ2Zyb3N4dXt6fGxoam9la3Btc3FmbWxoaWtsdG1wdXR3cW94dG90c3J2c3BxcnRzcnR1dXZ2WFZ1dWtvdHJrb3ZsaG1lX3BHSkRGRkVCQkJFQERCPj8+Ojs7PTo9PkNBP0FDRUdKRkpJTEhHR0dGRUNAPUVFQj5BQ0NDRUdJSUdNUElGRkdLTk9LRkhKRkVERUlJSEtJRkhQS0RJTUxQTU9OT09OSkpJTVJVVFJPV2RgYW1ncHJvcnl6Z2VoaGNpbGdxbGZsbWdpa2xzbHB2dXRwbnZyb3Nyc3V0cXNzdXRzdXZ2dnl2dXR2bGt1dW1ydnFsbmxlck1HRUVHQ0JBQkQ9QkE+QT06Oj0/Oz4+QEI/QEJER0tGSUdJSEZGR0VDQkFBRkZDQkNCREVER0dIRkxRTElPSkpMS0lHSEVGRURDSUhIS0pHS1JNQ05PTVFPT09OT09LS0tQVVdWVVRYYF5caWFtaW5ocnNiZWZmZGloZm5pZm1taGtrbXJpcXZ1c3Ftdm5vcXJzd3Nyc3R1dnZ2dnd2d3Z2dHd1a3N1bnV0c3FyamtzTUdHRkhCQkFERDxBQUBDPDg5PT45Pzw/Qj9AQERGSEVIRkZHRkZFRENFQ0RJRkNGRUJFR0VFRkdFSk1LSFFNSktISElFRkhIRUNJSUpLTUtPU05EUVJQUVFOT01OUE1MTlNXVldYVlhdWl1kYGhiamlna19lZWdjZ2dna2dna21rbWxwcWd0dHVyc252b3FwcnR4cXNzdXZ1gpF5dnZ0eHV1d3hub3VvcnN1cXFpb3pNSEdISEJCQkZFPEBCQkQ8Nzo9Pjo+OkBCPj8/Q0VGREZEREdFQ0VEREVGR0pFRUlHQ0dIRkhGRUNGSkpHTUpMS0hKTEZJSUtIRUtLTE1OT1JUT0lTVVRRU1BRTU5RTk1RV1pWWllWWl1aWGFgYGBeaGVjYGRlaGdqaWhqZmhubGxubXFwaXV1eHJycHVwcHBydXZwdXN1dnV7fn14dnR3dnZ2eHBsdXBtc3Vub3JzeU5JSEdJREFDSEU8QEVCRT04Oj4+PTw8QUI8Pz5BQkZDRUJCR0RDRUVGR0dHSUZHS0hDSEhHSUdGREhLSUdLSE1LSktMSExLTUtJTUxPTk9SVVZPS1VWVFFUUVJMT1FQT1RZWllcWllbXl9eYGNeXGFja2JgZGdocoVoZ2lmam1ucG9uc3FqdHV4cnNzdHJucHF2cnF1cnV1c355jn11dXZ2dnZ4cmh1cWtydGxxdnF1TUlLSEpFQkVHRTxAR0NEQDk8PkA/Pj9DQjxAPkFBRkNFRENIREZER0VISEZIR0lLSkZKSEhLSEZGTEhISEpHTExMTExJTUtNTU1PTFBQUVVWV09LVlZVU1NSUUxPUlJRVltbXV5bXF5fX2FgYWRdZGBlZmBlaGpjc3NmamhnbHBycW9zc25zd3dxdXZ0c21vcnVvcnNwdXJ2cnSBdnV1dXd2dXd0Z3Rya3Fya3J2b3ZKS0xKTEdCRURFPEBGRERCOz8/QUBAQERBP0I/QUNIQkVERkhFSUVGRElIRklISkxISEpKSUxKRkpLSElKSkdLS01NSkpOTE5OTlBMT1BSVVhWTU5UVlVTUlFQTE5UU1JXW15eX11dYF9hYWFgYmRlYWNoYmRpamd2i2xraWdtb3NxcHFwcHJ5dnJ1dXRzbW1zc21xcm90dXRycHN3dHV1d3Z1dXRlcXNrcHFqcnZvd0pNTExMR0RDQUQ8P0VFRUM9QUFDQkJDRUJCREFBRUdDSEdIR0ZKRkNHSUdHSkZJTEhKSk1LTUxHS0lITEtOUUtSUUxTTUtOTk9QUE9UT1dYWFtOU1FXXFpTVlBOVFVUVFhaX2JiX2RhXmBiXmBlYWFiZ25oYmloaG14dmxoaW1vc3JwcXJycnZ0c3Vzc3Nua3NxbXByb3R2cnFxdXZ1c3d5d3V0dWNtdGtvcGpxdG93TE1MS0xHRUFARD4+REVGQ0BDQUVEREZDQ0VHQ0JJRkNISklISUtGREtKR0hKSUlLR0pKTktOTElMSEpNS1pmSmRcS2xTSE9OX25Va3NbcXBid2NSUGJ2dWh1Y2F2YFhucWJkdmluemZbbHRgbGpUYHd1aWpnaWZnbG1qbW9qbW5zcnBycnFyc3Jzc3J0cm5sdG9ucHFxdXVxcXN0dnZ1dXl3dXR0YGt0a3Bwa3FycXlLTkpLSkZDP0BCPz1ERUZEQ0RCRUVFRkJGRkhEREpFRUpMTEpMTUdHTUlISUtIS0pJS0pOTE1NTExJTExMW3NiZHBebG1VTU5mc11nZXFsbnRncGlfYVlubmJwcGJrampnb3F0ZXRub1xvdWdwTUpyeXZrYmBrZWVteW1rdmxucHNycHJxcHFycXJycnRybW1zbm5vcHJ1dHFzc3R1dXV0d3h2dXRibXVrcHBscnJxektMSUlHRURAQkI/PUNGR0JGQ0VERUVEQ0hIR0RFS0dHTE1NS01NR0pOSEpLSklMS0pKS01NTk5NTUpNTU1bcm9vbnBwbGtNUFFsV05pYnRycGFtb3ZcWWxRXG1tWnFta29teHh0c2lwXF9ya3FqVXV5eHBjXmtmYmdxcGppb3Bwc3NwcXBxcXJycXFycnRsbXJtbm5vcnV0cXRydHV1dHV1enZ1dGVudWtwb2xzcnJ5SktHR0VFRUJCQj0/QEZHQkdESUVFREJGSUhIRUdLSkdNTU5LTU5ITE1JTEtISk1JS0pKS09QT05NS05NTFxoZHVdbHFXbE5QUW1VWmtea2x2YWxkdFRlY05tWWxcdHBraWx4and1aHBdXnJraFdiY3d8b2NgZ2hhZGp1eWtubnFzc3BxcHFwcnFwcHBydWttcW1tbW9xc3Rxc3J0dnZzd3Z6dnV0aG91bHNvbXNydHdJTUdJREVEQ0FCPEJBQkZER0ZMSEVDQ0hLSEhGSkxMRk5LTFNSTEdMTEhOSklITkhKSklITk9NTkxKTk1KWnNwcG9xcW1sT1FSbllxa2dvb3Fxb210Xm5YYXRfbm9wb3Fyb251c3R0altddGN3eHJqbnpoYWFjZ2Jiam10dXBzdXZzcXBwcW9ydHt/fn13bGtxbmxtbnByc3F0dHN1dXR4eHl5dHVrb3VtdG9uc3N2dEhLSElCRUVFQUA+Q0NCR0NISU1JRkNGSkxJR0ZLTUxGT0pLV1JLR0tKSk5JSEpMSUtKSUhKTE1NTUlLSktTa2JaaV5famNyclpfWWpvX2VlVWtfY1thYlFgbGhdalxuaWlkW3BmZHBdWlxrW21xY3BzbGRnY2RnYGBrbXBwb3R5cnVxb3BxbnmFiIeHhoWAdnNua21tb25xcnR0cnR1dXZ5eHhzdW5xdW53cXJ1dHdySEhGSURFREZBQEFFRERHQkhKTEhGREdLTElFRkpPTElPSUxbUUpGSEhLTUlISkpLS0lISUdLS0xLRkhKSkxMTEtJS0xOVFtcVFBUTFBPTk9PVlFPT1FPT1FKSU5QUWRxaVRZV1tbXFVZW11YXVxcY2ZhYWZiY2VfX2ZrbWhtdHlydHJvcHB0hoeGhoaFhYaHg3pwbW1sa3FzdHRydHZ0dXl4eHV2cXJ1b3ZydHN1dXNIREVHRkZBRUM/Q0dDRUdDSUtMSEZER0tMSERHSFBLTE9LTFdMSUVFSElKSElLSUxKSEZIR0pHSElFRkxISUtOTElPXFdeT1xbYF5PWFlTXFxiXk1ZWk1YYVJKWWFaU2BkXGFYW2RkVlZZXFlaWFxWWVxdYl9kYGFfZWhrZ210dHFxdHBxcoGGhoaFhoWFhYaGhoR9cmtpb3Jzc3N0d3l5eHl4d3h0cXhyeHNxcnVydFBCQ0RMTUJDREJESURHR0ZLSktIRUVKSkpGRUhIUEpMTUpNU0lIRkFHRkpJS0tKTEpJRkVKR0RGR0VFSkdDSk1KS1RfWWBYYGFbYFVYWVReXlpfUllcUF5cWU5eXF5TW15jXlpdYGNgWV9iW2BeW1RYWFleXWNjYmFjZWlla3Jwb3Bwbm93hoaFhYaCe4CFhYaGhYaFf3VxcHJyc3Z5eXp5eXh4eHdyeXZ4cnF4dnR2YVNKSk1JRUNCQ0ZHRUdHSUpKSUlERktLS0VFSElOSk5MSExOR0hGPkdHTElLS0pLS0lHRUlEQ0NFQUZKREBKS0lPW2NZXl5hX1JUU1dfYFxdWV5RWVxNVl9XS1FZW1BaX2FhXl5jYWBiYmJjY2VaUVlWVVxZXmRgX19jZWJob21tbGxsbHWFf4SDeXV8hIWFhYaGhYWGhoN9d3JydHd5eXl5f359eXV5dnZybnp3dnhYUUtHQ0dFQkVHSEZHSElGR0pHSEZIS0lMRERLS05NTExISkpISkc/R0ZOS0tLTUtLS0lHR0NEQERBSElBP0lKR09dYVpbZF1fVFFTWF1cXFxfWktXXExSXFlJTV5QT1xfYWNkY2NiXGRjYmRjZlhRVVRTW1haYV5eXmFhX2Rsa21qamxudn51gXp8hIWFhYWFhYaGhYaFhYaGgnpyc3V1e4WHh4eGhYSBfnhwend2eFxSTUNASUZDRktJRkZHSEdHSkZGRklMSk5FREtKTE5KTElLSkhJR0JISFFNS0tPTUtLSUhHRUQ/RUNISEFBR0ZFVF1ZXlhfWV9bXVVYWFBdXVFLSldeWF5bXVZaYFJRX19iYmFgYmJgY2JiZGRiWE9RUVJbU1teXV1dXl9fZGhnbGpubnB7e3x+e4CCg4SFhYWFhYWEhIWDhISHh4FzcneFh4eHh4eHh4eHh4WDgHx4XFNLQkFHRkRHTVJIQ1JLRkhISEVGS0pNUEVHSUpLTkxMSUxLSUlHREhLUU9NTVBMTUtLSElDREFFREhHQkFGRURXVUVcVF1TVl9YTlRVTlpbTUpLVWBhW19YX15hXU9ZYl1gYF9iY2JdYmJXX19UUE5QUVhSXVxbXFxeYGJmZmVsZm9vd3x7gHt9f4CEhISEhIWFhYODhYKDgoWFhnpvgYaGhoeHiIeGhoaFhYSFg35JTkZERUZHRElSYlBEV19JR0dIREZNSlBQRkpJSktOTEtLTEtKSkdFSk1RUU5PUE1OTE5IS0FEQUNERkRDQURGQk1IQ0xMUE9PTEZNRkdJSkhHTExNT1BJTE9QUFNQTFBUU1VaWVdZWFhkVk9TVFBQT05QVVRcWVlaXVxgYWRlY2hja2xwc3N6eX97en+EhISEhISEhIKEgH57gYOBfXuFhIaGh4eHhYWFhISEgoGAfUtJRUVHRkdES01dTEdIWU1HSEpIR05MUVFJS0tLS05OVU5PS0tMR0dLUFNTTlBPTk9OT0hLRWBFRF9MRGZjRE1bSV9cc21PTVZtWUxDUGBVbFdnSl1XVV5ETVFVTE1UVlFTVFhXVFhVVFxUUGZaaGhkWFRrVFdWVVtcW2BgYWJiYmBmaGZubGhyenx9foGEhISEg4ODgX18enJ7gXp7f4KAg4SEhYWBhIWBg4N/fnp7TElFRkZIRUVLT1NJS0dgVEhKT0pJT01SUUtMS0xPUlVST09KTE5HSE1RW1lPUFBOT1BPSUpQf1FJfFlZcnNXUG1IcW5wYVZQcXFzUEJrc21xc3BTb19bblhdVlxYVWtoVV1WY1pgWVtgVlVXf2p0dXVfYHdgWGFcXGZbX2FhYWFeYGJnbXBsYHB3dHiBgYKDg4J/fX6Adnh6bHZ+dHh+gHx+gIGChHyAg3p/gX9+d3dOSUVITU1CRExMRkpMRlJWTEtPSUtSWFdRTk5OTFFUTk9RUEtMT0dNUFNbWlRRUk9QUFBKSFp4XVR4ZWhZUlRRdmd0bHBibmZqUXJPTXdtanJwc3JxcnBvcIFdZXp1eHFxenF+c31rdX1iUmd8ZXNzb3NzfH1vfXlvf3JfYGBiYlpgYGdrbmtibGZnbXd+gYCDfnt4d4B0dnppcn5udHx+d3h7foCDeHyAdXx/fHxzc05LRmBdR0FFTU1IS0pISlBOTU1KTlZeWVVMUVNOWFpMU1NSTkxQSVFSVFlXV1BUUFBQUUtHZnhsY3hybVpKTFV5cHVtdWJudlBkZUpmdnFtd2+AamZ4eGlYc1Foem1panp6fmx4en9vZ29YdnZqdXVwgGBzaHxpbHh8b15fX2NiW11iZGdpamRnYmNkbGxwcHN0c3NzeXFyeGJsdWdyeXtzc3V5foFzdXpufH15eHJuTktTdE5DQkVQUEhKS0pMUE9PUE1QWmBaWEtUV1BhXlJWUVlTTVBJU1RWWFdXUFVQT05SSktyb3V1cXVxZGhgVm5McXBeRmh5V3ZUTGh4fXhgeXtzbmFebW9kUmdydW5teXB3bHZ0dHFsbVx0fnprbXl8bHVtfGtwdnV4Xl9fYl5dX2VkaWdoZWVeYmJpaWlqa25va3FubWpwYWNmZG93eG9tcHN5fm5xcGp7enRyb21MTFtWSEdFR1JQSkxNS0xRUVFRUFFXXFlVTlZZVWZYUlJZXlRNTklUVFdXWVdPU05OTlFIUm1IaXdLYGR2dlVXbE9ubHtzYWpnf3ZVS1draH1sbWx4YFtwenteYHpzY3JveHFoZXxpcntdVEtsYHZ1a2l1e3ttfnhrfHBdXl5iW15iZGRnZWVlYlpjY2lra3JzcndnbWloZGdgYWxhZ3Nya2hsbXJ8a21oa3t0bW1rbU9ISktISUlIUlBMTk9NTFRTU09UUldSVlRQV1pWVlRUVGFgUU9OS1RUU1FVVk5OTE1PUEpIUU5QVUxLS1NUU1JUUFZVUVFOUVFYWFFOUFVUWFhYW1tVUlNXW1dYV1pPU1VXV1hSXVlXXVZUT1lSV1dXWFlfW2dyXltbWlxdX2NaX2NjZGZkY2NiWmNjZmZmbW5tdWZmZ2NgZl9dZ2BkbGhmZ2tob3poZ2drdWpoZ2lsUUlLS0xNS0pTUU1RUE9MVlZUUFRVWFVZVVJaXVZVVFdVWVhQT0xNVlRRTlVTTk9NTFFQS0pRUktRTUtLT1JUUlFRU1NJSExOT1FSUVFRVFZSWFdcV1NTUVJVVVZTWlFPU1JXVVRZVlRZVVNSVVNUVFhZV11aX2FdXFpaXFxgY1xdYmNkZ2VkZGFZYGFjYWJoaGluY2FkXl9jXVpkXGJtYV5mZmdtc2RpaGtrZWRjZmhQSktMT09MTVRQTlNRUU1YV1VUVVdXV1pWVFxgVldWWVVYVFFQS09XU1BOVVBOUU5LU1BNT1VUTlFOTU5RU1BUUVNUVU5LTU9RVFRSUlFWV1VZWltZU1VSVFdXV1lbVE9UVVhVVFlVV1lUUlJXVVVXXFpbX11WWV9dXl1cXWFhXltiYmNoZmVkYlhfYGJdYGhlZmRhXl9dXV5aWl9aX2dgXl1dY2hrYWdmaGZkYGJjYVBLTUxQUUxPVE9PU1FPUVpZWFdYWlpYWVZdamRWWFlaV1ZUVE9LT1ZUUE9UUFBQTk1RUVBSWFRSUU9NT1NVT1dSVFVVT05NUVNVVVRUUlRYVlpdXFpWVlFSV1hWW1tXUVRWVlZWWVRXV1RSUlhWVVpfWl1fX1dfXV5gXFxgYF9fWmJiZGhoZWRhWWJgYl5eZmRkYGJdXFxcXFlaW1hbYVteXVxfYl9fYmRkYmRfX2BcUE1OTlJRTVJST1NUUU9VXFpaV1tbXFlaW2RxbWhkX1tZVlZYUk1NVlNNTlJPUVJPTFBTUlVaVVRQUExQV1ZSV1NTU1hNT1BSVFhVVVVTVVlYW15dXFtWUk9VVlZbXFdRVFdVVlhWVFhaVFNRWldWXF5bX19gVmJcYGFdYGJfXGBdY2FjZ2lkZmBZY2BhX19lZV9gY1taXFtcWlpZWVdcWVxbYF5gW15eYWBfYlxZYFpRTk9OVlFQVFJPVVRTUFdcXFxYXlxfV1xeanF3eYBjXFtWVlhSTk9XU05RUVBSVFJLUVRTWVpXVU9STlNYVlRTVFJSWk9RU1NWW1ZWV1RWWlhdXlxcXlZTTlRVVlxcVlJUVlZYWVNUWVxUUlJcV1pdXl1hYWBXYltjYl5hY19cYmFiX2RnaWRmXltkYGFgYWNlX2JfWVpeW1xbWVhZV1daWlphXF1bXVxcWl1gV1tbWlBPT09ZUFVVU1JXUlRQW11eXVtgXGBVXF1panJ9c2xnXFVZV1FPUltTUlFUUlRVVEtSVlVbWVpTT1NSVlZVU09WUlNaUlRVVFhcV1hYU1hcWF5dWVpdVVVOVldXXltYUVRVWFhYVVdZW1RTVl1ZXV1gXWJjXllgW2ViX2RkXl5jY2FdZWZpZGZeXWRhYGFhY2RfYl5YWl9bXFtYWFhYV1taXGBdW1tcW1hZW15WXlldUE9PUlpQWlVVVlZUVFReXmBeXmJcYFVdXmJreXRsfWxaVVpVUVFTXFRVVFZUVllXTFJaVl1bXFJPVVNYV1ZTUFhSU1dTVlZVW11YW1lVWl5YX15ZXFlSV1JZWFlfWlpTVFZaWVpWWFlcVlVaXVxeYGFfZGRdXl1dZWFiZmReXmRjYFxnZGhlZGJfZGFfYWBiYl9gXldYXlpcXFpZWlhWXVpdXlpZW1xbV1lcXVZYV11TT1BXWVFdVVZZV1dVWF9gYWFgY11gVV1eYmVldYF6aFhZWlRWU1ZcV1dXVlZXXVhQVVxZXl1dVFJYUldWVFJUWFJTVlRZWFldXlhdW1VeX1hfX1hdVlFZVFlaWmFZXFVWWFtaWlhZWlpYVl1eX15jYmFlZV1iXGBmYmRmZF9fZGJiW2ZjaGVjZmFmX19hYWFhYF9eVlVdWVtcW1lcWVldW1tbWFhZW1laWl1fXVRZXVVOU1pWU1xUVldZV1ZcYGFiY2FkX19WW2BkYV96dW9oWVxaVlhVV1taWVxZWFlgV1BVXltgYVxUVVhQVVZVU1ZWUlNVV1taXF9eWl9cVl9fWl1eWV5WU1lXWVpdYlpeVldbXFtcW1tZW1lZXl9gYGRiY2VlYmRaYmZjZ2ZlXmFiYGNeY2NpZGRnX2deYmJjYWFgXl9YVFpaWltbWFtYWFxbWltXV1lYV1xbXGBdVl1dU1BWWlZWWlVYVVhXWF1fYmFkYWRhXllZYWRiYGxmaF5cXVtXWFhZXFxcX1tZW2JWVFdeXWFjXFJWWFFXVlZWVlZTVlRYXFxfYGBdYV1XYV5bXlxbXlhWWFhbW19gXF9YWV1cXV5eXFpcWFtfYV5gZGNkZmZmYlljZWVoZ2ReY2BfZWNdZmlkZWlfZ15jYmNhYWBfX1tYWVtZWlpYWVhXW1taW1dYWlRZXVxaYFxVXmJOUldZVldaWVtcWVdZXmBiYWVhZGFdXllhY2JfYWBhX1xcXVhXW1tdXV9fXFpdY1haWF1gY2RfUlhZUFhXWFlZV1ZYVl1dXmBhYV9iXllhXV1eWV1eWVhWV1tcYF9dX1lZXl1eXmFcW1pZXF9hX2JkY2VmZWZiWmRmZ2lnY19jXmFmZFppaWJmaWNlXmJiY2FgYF9dXVpXW1lZWFhaWFdaW1pZV1hWVVtdXV1gYGJieExXV1xZV11cXF1aV1xdX2BiZGJiYV1gWGJjYmBjYWJeXFxcWFdbXV9dYF9dW2BkXFxYWmNlY2BSXFlPWFdZW1pZWFpZYF1gYmJgYWNfXGJdX11bXl5aWVVYXV1fX19fW1peXmBiY1xcV1tdYGJhY2VkZ2VlZmRcZWZoaWZjYWJcY2dgXGlpYmhpZmVgYmFjYV9gX11dXFlcWVhXWFlYV1xbWldXWE9YWl1hY2Zmcmt/SllXXVpaX11cXlxYXVteX2FjYmFhXWJbYmRiYGNjYl1cW1pXWGlxYFxgX11cYWNfXllZY2VkYVNfWlFZV1xdXFtaW1tjYGNiY2BiZGFgY15gXF1eX1pYVltfXl1hYV9dW2BhYmViX11TXF9gY2RkZmRnZmVmZV5lZmhoZ2RkYFtmZ15haGhjaGhmY2BiYGNiX19fXV1bWltZWFhYVlpWXFpaVlZVTFhXXGdpa2h1eIF2dnZ2dnZ2dnZ2dnd3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d4eHh4eXl5enp6enp6e3p6ent7e3t7e3t7e3t7e3t7e3x7e3t7e3t7e3t7fHx8fHx8fHx8fHx8fHt7e3t8fHx8fHx8fHx8e3t7fHx8fHx7e3t7e3t7fYmIhoqHhYOBg4OCg4OCgoKCgoKCgoKCgoGAgYCBgICAgYCBgYGAfnx8fHx8fHx8fHx8fHx8fHZ2dnZ2dnZ2dnZ3dnd3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3h4eHh5eXl6enp6enp6ent7e3t7e3t7e3t7e3t7e3t7e3t7e3t6e3t7e3t7fHx8fHx8fHx8fHx7e3t7e3t7e3t7e3x7e3t7e3t7fHx8fHt7e3t7e3t8iYmHiYaFgoGCgoGCgoKCgYKCgoKCgoKBgYGAgICAgICAgIGBgYB9fHx8e3x8fHx8fHx8fHx8dnZ2dnZ2dnZ2dnZ3dnd3d3d3d3d3d3d3d3d3d3d3d3d3d3d4eHh4eHh5eXl5eXl5eXl5eXt7e3t7e3t7e3t7e3t7e3t7fHt7e3t7e3t7e3t8fHx8fHx8fHx8fHx7e3t7e3t7fHx8e3t7e3t7e3t7fHx8fHx7fHt7e3uHiYiJhYSDgYKCgoODgoKCgoKCgoKCgYGBgICAgICAgICAgYKBgH58fHx8fHx8fHx8fHx8fHx2dnZ2dnZ2d3d2d3d3d3d3d3d3d3d3d3h4eHh4eHh4eHh4eHh4eHh4eHl5eXl5eXl5eXl5e3t7e3t7e3t7e3t7e3t8fHx7e3t7ent7e3t7e3x8fHx8fHx8fHx8fHx8fHx8e3x8fHx8e3t7e3t7e3x8fHx8fHt7e3t7e4aJiYiFhYOBgoKCg4OCgYKCgoKCgoKBgYGAgICAgICAgIGBgYCAfnx8fHx8fHx8fHx9fX18fHVwb29vb3Bwen59fX19fYSMi4uLi454KSkqKiopKz0/Pj4+Pj5tgH5+f397pdfT09PT1r2GiYmJiYmJjIyMjIyNjYuJiYmJiYmLjIyMjIyNiH5/f39/f359fHx8fHx8fHx8fHx8fHx8fHx7fHx8fHx8fHx8fHt7e3t7hIuHh4aHgoGDg4GCgoKCgoKCgoKCgoGBgYCAgICAgICAgYCBgIB+fHx8fHx8fHx9fXx8fH19dXBub29vb296gH9/f39+hpCPj4+Pk3kZGhoaGhocMTMzMzMzMmqCf4CAgHut6eTk5OToyomMjIyMjI2Pj4+Pj5CQjYyMjIyMjI+QkJCQkJGLf39/f39/f319fXx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx7e3uCjYeIh4eDgoSCgYKCgoKCgoOCgoKCgYGBgICAgICAgICAgICAgH58fHx8fHx8fXx8fH19fX12dXV1dXV1dXZ3d3d3d3d4eXl5eXl6eG9vb29wcHBycnJycnJyd3p5eXp6en6Dg4ODg4SBfHx8fHx8fX19fX19fX18fHx8fHx8fH19fX19fX18fX19fX19fX19fX18fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx7e4CMhomHh4SDhIKCgoKCgYKCg4KCgoGBgYGBgYCAf4CAgICAgICAfnx8fHx8fHx8fX19fX19fXZ2dnZ2dnl2dnZ6e3h7eHd2eHt4enp5fXl4eHl4eHh5eXl5enp5eXl5enp6eXh4eXl5eXl7e3t7e3t7e3t7e3p6enp7e3t7e3t7e3t7e3t7fHx8fHx9fX19fX19fX18fH19fX18fHx8fHx8fHx8fHx8fHx8fHx8fHx8f4uHi4qIhIODgoKCg4KBgoKDgoKCgYGBgYGAgIGAf4CAgH+AgYF+fX18fHx8fHx9fX19fX19d3d3dnZ3fXh3d316eH14d3d5fHx9fXp8e3d3d3d3eHh4eHh5eXl5eXp6ent7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7fHx8fHx8fHx8fHx8fHx9fX19fX19fX19fX19fX19fX19fHx8fHx8fHx7e3x8fHx8fHx8fHx+iomMjImFg4SEgoKDgoGCgoKCgoKBgYGBgYCAgICAgICAf4CAgH19fXx8fH19fX19fX19fX13d3d3d3p9eHt4fHx3e3h3d3d5fH19eXx6d3h4eHh4eHh4eHh5eXl6enp6e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3x8fHx8fHx8fHx8fHx8fHx8fX19fXx9fX19fX19fX19fX19fHx8fHx8fHt7fHx8fHx8fHx8fH2Kio2NioWDg4OCgoKCgYGCgoKBgoGBgYKBgIGBgICAgIB/gIGAfXx9fX18fX19fX19fX19fXd3d3d3fX55d3d4e3p8eXd3d3x6fHx6fHt3eHh4eHh4eHh4eXl5enp6ent7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3x8fHt8fHx8fHx8fHx8fHx8fH19fX18fH18fH18fHx8fX19fX18fHx8fHx8fHx8fHx8fHx8fHx8foqJjo2JhISEg4KDgoKBgYKBgoKCgYGBgoGAgYKAgICAgH+BgIB8fH19fX18fX19fX19fn5+d3d3d3d5fHl7eHx9eXt5enp6fnx9fHt9e3h4eHh4eHh4eXl5eXp6enp7e3t7e3t7e3t7e3t7e3t7e3t7e3x8fHt7fHx7fHx8fHx8fHx8fXx8fX19fX19fXx8fHx8fHx8fXx9fX19fXx8fHx8fHx8fHx8fHx8fHx8fHx/iIeNioeFhoaDg4ODgoGBgoGCgoGBgYGCgYCAgoF/gICAf4CAgHx8fX19fX19fX19fX5+fn53d3d3d3Z4eHl3eXp4enh5eXl8e3p6eXt5eHh5eXh4eHh5eXl5enp7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t8fHx8fHx8fHx9fX19fX19fX19fX19fX18fH18fH19fX19fH19fX19fHx8fHx8fHx8fHx8fX+HiIyIhoeHhIKDhISCgYKBgYKCgoGBgYKBgIGBgYGAgIB/gIGAfHx9fX19fX19fX1+fn5+fnd3d3d3d3d3d3d3eHh4eHh4eHh4eHl5eHl5eXl5eXl5eXl6enp6ent7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7fHx8fHx8fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fHx8fHx8fX19fHx8gIeIi4eHiYaDg4SDg4KBgYGCgoGBgYKCgYGBgIGBgYCAgICBgX97fH19fX19fX19fn5+fn5+d3d3d3d3d3d4eHd4dnl5eHh4eHh5eXl5eXl5eXl5eXl5enp6enp6e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7fHx7fHx8fHx8fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fHx8fH19fXx9fXyBhoqKiYmIhIOFhISCgoGBgYGCgYGCgoGBgYCAgYGAgIGAgIGBf3x8fX19fX1+fn5+fn5+f394eHd4eHh4eHZxZGpeam15eXl4eHl5eXl5eXl5enp6enp6enp6enp7e3t8e3x8fHt7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3x8fHx9fHx8fH19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fIGFiYqJioeEhYWEg4KCgYGBgoKBgYKBgYGBgYCBgYCAgYCBgIF+fH1+fn5+fn5+fn5+fn9/f3h4eHh4eHh5bWRiZV9fXm95eXl5eXl5eXl5eXp6enp6enp6enp6e3t7e3t7fHx8fHx8fHt7e3t7e3t7e3t7e3t7e3t7e3t7e3t7fHx8fHx9fHx8fH19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18goWKiomJhISGhYSDg4KBgYKCgoGBgoGBgYKBgIGBgICAgICBgH58fX5+fn5+fn5+fn9/f39/eHh4eHh4eW5kZWdlZGJeZnh5eXl5enp6enp6enp6enp6enp6e3t7e3t7e3x8fHx8fHt8fHt7e3t7e3t7e3t7e3t7e3t7e3t7fHx8fHx8fHx8fHx9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXyChouJiIqEhYaEg4OEgoGBgYGCgYKCgYGBgYCAgYGBgIB/gIGBf3x8fn5+fn5+fn9/f39/f394eHh4eHl3Z2VkZWZkZWFfaXl6enp6enp6enp6enp6ent7e3t7e3t7e3t7e3t8fHx7e3t7e3t7e3t7e3t7e3t7e3t7e3t7fHt8fHx8fHx8fHx9fX19fX19fX19fX19fXx9fX19fX19fX19fX19fX19fX19fX19fX19fIKGi4eJh4SEhoSDg4WBgYGBgYKCgYGBgYKBgICAgYGAgYCAgYF+fHx/f35/f39/f39/f39/gHl5eXl5eWtlYWJlZWFlZV5ieHdze3p6enp6enp6enp6e3t7e3t7e3t7e3t7fHt7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t8fHx8fHx8fH18fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19g4aLhoiFhYaEgoOEhIKBgYGBgoKBgYKBgYGAgYGBgYGAgIGBgn98fH9/f39/f39/f3+AgICAeXl5eXl0Y2NlZGNmY2doZGZsZF5ze3p6enp6enp6enp6ent7e3t7e3t8fHx7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3x8fHx8fHx8fH19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX1+fn6DhouGhoaGhYODg4SDgYGBgYGCgoGBgYKBgYCAgYGBgYCAgYGBfnx8f39/f39/gICAgICAgIB5eXl6d2RhY2diYmRdW2VfYV1eYGFoeHp6enp6enp6enp6e3t7e3t7fHx8e3x7e3t7e3t7e3t7e3t7e3t7e3t7e3t8fHx8fHx8fHx8fH19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX1+fn5+fn5+foSFi4eGhoaGhIODg4KBgYGBgoKCgYKBgoGAgIGBgYGAgYGBgYF+fX1/gH+AgICAgICAgICAgHl5eW9vYmJiZF5jZ19dYWFgXF9kYlttfHp6enp6enp6enp7e3t7fHx8e3t7e3t7e3t7e3t7e3t7e3t7fHx7e3x7fHx8fHx8fHx8fH19fH19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX5+fn5+fn5+fn5/hIiLhoSHhoaEhIODgoGBgYGCgYGBgYKCgYCAgYGBgYGBgYGBgX5+fYCAgICAgICAgICAgICBeXpwXWJlZGJkXmZnZ2BZYmJhY2VfXF1ze3t6enp7e3t7e3t8fHx8fHx8fHt7e3t7e3t7e3t7e3t7fHx8fHx8e3x8fHx8fHx8fHx8fHx9fX19fX19fX19fX19fX19fX19fX19fX19fX19fn19fn5+fn5+fn5+fn5+foCFjIqEhYaGhYODg4SCgYGBgYKBgYGBgoKCgYCBgYGCgICAgIGBf35+gICAgICAgICAgIGBgYF5emxiZGdjYmdmYWBgZGFiZWRjZGNeXGJ1fHt7e3t7e3t7e3x8fHx7e3x8fHx7e3t7e3t7e3t7e3x8fHx8fHx8fHx8fHx8fHx8fHx8fH19fX19fX19fX19fX19fX19fX19fX19fX1+fn5+fn5+fn5+fn5+fn5+fn9/gYeMiYWGhoeFg4SDgoGBgYGBgYKBgoKCg4KBgIGBgYKBgYGCgoF/f36AgICAgICAgIGBgYGBgXp7dGdnZmZkZGZmYF5fYWNlaGRlXmJkYHR8e3t7e3t7fHx8fHx8fHx8fHt7fHt8fHt7e3t7fHx8fHx8fHx8fHx8fHx8fHx8fHx8fH19fH19fX19fX19fX19fX19fX19fX19fX19fX5+fn5+fn5+fn5+fn9/f39/f3+CiYqIhoaIhoWDhIOCgYGBgYGBgoGBgoKCgoGAgYGBgoKBgYKCgX9/f4GBgYGAgYGBgYGBgYGBenptaGNjZ2ZnZWdmZmdiZWRlYmdbYmVgdnx8e3x8fHx8fHx8fHx8e3t8fHx8e3x8fHt7fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx9fXx9fX19fX19fX19fX19fX19fX19fX19fn5+fn5+fn5+fn5+f39/f39/f39/f4SJioiGiYeFhYSEg4KBgYGBgYGCgYKCgYGBgYGBgYKBgoGBgICBgH9/gYGBgYGBgYGBgYGBgYF7emlpZGNqZmFgZmVjY2NnaWRjYmBiZGJ0fXx8fHx8fHt8fHx8fHx8e3x8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fH19fX19fX19fX19fn5+fn5+fn5+fn5+fn5+fn5/f39+fn9/f39/f39/f3+AhIqMiIeJhoSFhYOCgYGBgYGBgYKBgoGBgYGBgYGBgoKBgYGBgYGAgH+BgYGBgYGBgYGBgYGBgXZzZWRnY2RmZWJlZmdkZmhmZWNgYGNkYHF9fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fXx8fHx8fHx9fX19fX19fX19fX19fn5+fn5+fn5+fn5+fn5/fn5+f35+f39/f39/f3+AgICFioyJiIqJhoaDgoKCgYGBgYGBgoGBgoGBgYGBgIGBgYGBgYGCgX+Af35/foCCgoKCgoKCgoKCc3NnZWRkZWlqaGZnZ2NhZmZlZmdmZWVjdX18fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fX19fX19fH19fX19fX1+fn5+fn5+fn5+fn5+fn5+fn5+f39/f39/f39/f39/gICAgICAgIWLioqJioeHhoSCgoGBgYGBgYKCgYKBgYGBgIGBgoKBgYGBgYGAf4B+dHRzdX1/goCAfn5/gYB0cmdkZWNmaWppZWNlY2BmZGRnZ2JiZWFwfXx8fHx8fHx8fHx8fHx8fHx9fX18fHx8fHx8fHx8fHx8fHx9fX19fX19fX19fX19fX19fX19fX1+fn5+fn5+fn5+fn5+fn9/f39/f39/f39/f39/f39/f4CAgICAgIB/houLiouLh4eHhIOCgYGBgYGBgYKBgoKBgYGBgYKCgYCBgYGBgoCAgH5zc3NzdHV4dXV0dHV2dXVwZmNmZWhoaWdoZ2VmZWJfZGVmY2BiZ3d8fHx8fX19fX18fHx8fH19fX19fX19fXx9fXx8fX19fX19fX19fX19fX19fX19fX19fX19fn5+fn5+fn5+fn5+fn5+fn5+f39/f39/f39/f39/gIB/f3+AgICAgICAgICHjIyIi4qHh4eEhIKBgYGBgYGBgoGCgoGBgICBgoGBgYKBgoKCgYCAfnNzc3Nzc3NzdHR0dHNzdW9jY2FnZWhoZ2pmZGVnZmhmY2JlYl5ieX18e3t8fX19fX18fHx9fX19fX19e3x9fX19fX19fX19fX19fX19fX19fX5+fn5+fn5+fn5+fn5+fn9/fn5+fn5+fn5/f39/f4CAgH9/gICBgICAgICAgYCAf4CAgYGAgIeLi4iNiYiJhoSFgYGBgYGBgYKCgYKCgYGBgIGCgoGBgYKBgoKBgIB+dHNzc3Nzc3Nzc3Nzc3N1cmdlZWRlamhoZ2ZpaGdjZWViZGNoZGd7eHVzc3R2dnl4dnR0dHZ3d3d2dHR0dXV4d3h4d3d6e3x9fXx9fn5+fn5+fn5+fn5+fn5+fn5+fn5/f39/f39/f35/f39/gH9+fHt7fX58eXl2dnZ5fHx6end2d3l7fXt4hIyMioyHh4iEhYSBgYGBgYGBgoGBgoGBgYGAgYKCgYGBgoGBgoGAgH51c3Nzc3Nzc3Nzc3Nzc3VzaGVnaGVrbGhqZ2lqZ2dnZmRkYmVkbnV0dHNzdHNzc3Nzc3Nzc3Nzc3NzdHNzc3Nzc3Nzc3N0dHV1c3V3eHl7fn59fn98f39/f39/f39/f314fH5+fXx4dXZ3eXd4dnRzc3N0dXRzc3Nzc3NzdHNzc3R0c3R0dHODjI2KiYeIhoOGg4GBgYGBgYGBgYGCgYGAgYGDgoKBgYCBgYGBgICAf3VzdHRzc3Nzc3Nyc3NzdnZpY2hqaGpsZWZpbGhgZmVkY2BkZGZ0dXV1dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHRzdHRzc3Nzc3R2dnV1d3V4fH9+fX9+fHp4dXN0dXV1dHNzc3Nzc3N0dHR0dHR0dHR1dXR0dHV1dHR1dXR1dXV1dIaMjYuIhoeEhIWCgYGBgYGBgYGCgoGAgYCBgYKCgoGBgIGBgYGAgIB/dnNzc3Nzc3Nzc3Nzc3N2dnNnZ2pmaGdmaGhmZGlnY2NnZWVmcHZ1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dHR1dHR0dHR0dHRzdHR0dnV1d3Z0c3R0dHR0dHR0dXV1dXV0dXV1dXV1dXV0dHNzc3N0dHNzdHR0dHR1dXR1iY6MjIqHh4SEhYKBgYGBgYGBgYKCgoGBgICAgoKCgoGBgYGBgYCAgH93c3Nzc3NycnJyc3NzcnZ2dW5kXWNnZWlraGVoZ2dqamlnZXB2dXV1dXV0dHRzdHR0dHR0dHV1dXV1dXV0dHV1dHR1dXV1dXV1dXV1dXR0dHV1dXV1dXV0dHV0dHV1dXV1dXV1dXV1dXV1dXV1dXV0dHNzc3Nzc3N0dHNzc3Nzc3R0dHR0dHWKjoyMiYaGhIeFgoGBgYGBgYGBgoKBgYGAgYGCgYKBgYGBgYKBgYCAf3hzc3Nzc3JycnJyc3NzdnZ3d2liaGhnamtpaGZkZGVmaWhwdXR0dHRzc3JxcnJ0dXV0dHR0dHR0c3NycXFxcXNzdHR0dHR0dHR0dHV0cnJyc3R0dHR0dXV1dXV1dXR0dXR0dHR0dHR0dHR0dHR0c3Nzc3Nzc3Nzc3Nzc3N0dHN0dHR0dHR0dYuOjImGhYWFh4SCgYGBgYGBgYGBgoKCgYGAgIKCgoGBgYGBgYGBgIB/eXNzc3NycXJycnJzc3N3d3d3bGpoZGhpa3Z6a2VmZWhnbXJzdHN0c3JwcHBxcnN0dXR0c3NycnNycXBvb29vcHFzc3NycnJyc3R0dHNxcHFyc3R0dHR0dHRzc3Rzc3NzdHR0dHRzdHR0dHR0dHRzdHR0c3NycnFxcnJzc3Nyc3NzdHR0dHN2jZCMh4eFhYSEgoGCgoGBgYGBgYGCgoKBgYGAgYGCgoGBgoKBgYGAf395c3NycnFxcnJycnNzc3d3d3dzc2pnaWloeX99cW51bG5wcXJycnFxcG9wcXFxc3Rzc3NycXFwcG9ubm1ubW5ubnBxcnJycnJycnJzcXBvb3BxcnJzc3JxcnJycnJycnJycnJzc3Jzc3Nzc3Nzc3Nzc3Jxb29ubm9vcXJzc3Jyc3NycnNzcnaPj4uHhoWFhYOCgoKBgYGBgYGBgYGBgoGBgYGCgoKBgoGCgYGCgX9/f3hxcHBwcXFycnJyc3Nzd3d2dnd2cnF0c252f352c3hwcHBycnJycXFwcHFxcXFyc3Nzc3FwcXBvb25ubm5ub25vcHBxcXFxcXBwcXJwb25vcHFxcXFxcHBxcXFxcXJycnJycnJycnFxcnFxcnJycnFwb29ubm1ubW5vcXJycnJycnJyc3JxeI+OjYaDg4aEgoOCgoGCgYGBgYKBgYGCgYGBgYKCgoKCgoKBgYKBf4B/d29wb3BxcnJyc3Nzc3J2dnZ2dnZ3dnZ1c3l/fnd3d29wcXFxcXFxcHBwcXJxcnJzc3JycXBwb29wb29vb29vb29wb3Bvb29vcHBxb29vcHBwcHBvcG9wcHFycXFxcnJycnFxcXFxcXFxcHBwcHBxb29ubm5tbW5tbm9wcXFxcXFxcXFxcXB7j42NhoODhYOCgoKCgYKBgYGBgoGCgYGCgoGCg4KBg4KBgYGAgYF/f392bm9wcHBxcXFxcXBwcHZ2dnZ2dXR0c3NxfYB9fX9zb3BxcXFwcHBwcXFwcHBxcnJxcXFwb3Bvb3Bwb29wcG9vb29vb29vb3BxcXBub3Bwb29wb29wcnJycnFxcXBxcnFwcXFxcHBwcHBwcHBwb29ubm1ubm5ubm9ub3BwcHFxcXFxcXFxcIKRjoqEhIOFhIOCgoGBgoKBgYKBgYGBgYGCgoKCgoKCgYGBgYCBgX9/gHVvb29wcXFxcXBwcHBwdnZ2dXRzcnJycnGAgoCBeXBwcHBvcHBwcHFxcXFwcXFxcXFxcG9vcHBwcHBwb3BxcHBvb29wb29vcXFwcG9wcG9vb25vcHFxcHBwb3Bvb3BwcHBwcHBwcHBvb29vb29vbm5tbW1ubm5ub25vb3BvcHBwcHBwcHBwiZCMiISDhIaDg4KCgYGCgoKCgYGBgYCAgYGBgoKBgYGBgYGBgIGBgH+AdG5vb3BxcXFwcG9vcG92dnVzcnFxcXFxcICDg39ycHBwcHBwcHBwcHFxcHBxcXFxcXBwcHBwcHBwcHFwcHBwcHBwcHBvcHBxcXBwcHFxb29vbm9wcHBvb29vcHBvb3BwcHBwcHBwcHBvb29vbm5ubm5ubW5ubm1ubm9wcG9vb29vb3BzcXWPj4uJg4KFh4ODgoKBgoGCgoKBgYKBgYGBgYGBgYGBgYCAgYGAgYGAf4B0b29vbm9vb29vb29vb3Z1dHNxcXFxcXJygIKCgXRxcXFxcXFxcXFxcXFxcXFxcXBxcXFxcHFwcXBxcXFwcHBwcHFxcXBxcHBwcXBwcHBwcHBwcHBwcHBwcHFxcXBxcHBwcHFwcHFxcHFxcXFxcXJxcnFwcnRycnR0dHR1dnRzdHR0dXd3gpCPi4iDgoaHhISCg4GBgYKCgoGBgoGBgYKBgYGBgYGAgICBgYCBgYB/gHVvb29vb29vb25vb29vdXRzcnJycnJycnKDg4OCdnFycnFxcXJxcnJxcXJycnFxcXFxcnFxcXJycXFycXFxcXFxcXFxcXFwcXFxcXFxcnNzcnJyc3V1dHR0dHR0dHV2d3d3d3d3eHh4eHd3eHh4d3Z3dnV2dnZ2d3h6e3x7e3t6enp6enyGkI2LiIODiIeHhYODgoGCgYKBgYGBgYKCgoGBgYGAgYCAgYGAgIGBgH+Ad3FxcXFxcG5ucG9wcG92dHV1c3Nzc3NzdYiDgoN5cnNzcnJyc3Jyc3NycnJycnN0cnJzcnNzc3Nzc3Nyc3N0dHV1dXV1dHV3eHd3d3d4eHh3eHh4eXl5eXl4eHl5eXp6e3t7e3t6enp5eXh3d3d1dnV2dnd5enp7fn5+fX1+fn5/f35+gIyQi4qHg4WIi4iEg4SDgYGCgYGBgoGBgoKCgoKAgYGBgYCBgYGAgIGAf4B8enp5eXx5eHh2dXZ2dHl2d3h3d3Z3dnZ6f3x+fnx2dnd3dnV4enh4eHh3d3d2eHx5eXx6eXl8e3l5eXh4eXl6enl5eXh4enp5eXh4eHh3dnd3eHh3eHh5eXp7e3p8fH1+fX9/f359e3t7e3p5enl5e3t/foB/fn5/fn19fX5+f35+fn6AjpCNioeEhoqLiIaGhIOBgoKBgYGCgYGCgoKCgoCBgoKBgYGCgYCBgIF/f4B/fn19fX9/f318e3t7eXh4eHh5eXl4eXh5eXl4enp6enp6e3t7fH1+fHt7ent8e318e3t7e3t7enl4eXh4ent6enp5eXp8fHt6enx8fHp6ent9fHx+fn+AgoGAgYKAgH9/gYGBgIB/f35+fn5/fX1+f4CAf35+f39+fn9/f39/gH+Af4OQjoyHhoWIi4yIh4aFg4GCgYGBgYKBgoKCgoKBgYKDgoGBgYGBgIGBgIB/goOCgoGBgX99f39/f4F6enh4d3h4eHh5eHh5enp5e358enx9fXt8fX19fHx7fnx9fn5+fn59fH9/f3x8fYCDgYCAf318fXx9fXt9fXx8fH19fX1+gYGChISDgoB/gYGBgH9/f4B/f39/f39+fn9/f39/f35+f3+Af39/gICAf4CAgICAhJCPi4eGhoiLi4mKhYaDgoKCgYGBgoGCgYKBgYGBgoOCgYCAgYGAgIGBgH+ChIKCgICAgH9+fn+AgH9/fn18fX19fYB/fX+Af35/gH9/fn9/gIGBgIB/fn+BgICAf4CBgX9+f4CBf35+f39+f39/fn5+f39/gYB/f4CBgYCAgYOEgoGCgoGCgH+AgYCBgYGAgH+BgICAf39/gICAgYGBgIGBgYCAgICBgoGBgYCAgYGFjo6MiYaHiYyLi4qGhoOCgoKBgYGCgoOCgoKBgIGBgYKCgICBgYCAgYGAf4KFg4KBgYCAf39+fn+AfX5+fn19fX5/fn9/f35+fn+AgYCAgICAfn9/fn6Af3+Af39/f35/f35+fn59fn9/fn9/f35/gIGBgoKDg4KCg4KBgYKDg4OCgYGBgYKBgoKCgYKBgoGBgYGBgoKCgYGCgYKCgoGBgoKBgYKCgoKCgYGBgoKCgoaPkY+KiImKjY6NiYaFgoKCgoKBgYKCg4KCgoGBgYGBgYF/gIGBgYCBgIF/gYWEg4KCgoGCgYCAgIB8fHx7fH18fH9+fn9+fn5+f35+f39/f39/f35+foB+fn9+fn9/fn9+f39+fn5/gIB/gIF/f39/f3+BgYGCgoCAgYKDg4SDg4ODgoKCgoKCgoKCgoKCgoGCgoKDg4OCg4ODgoKCgYKCgoODg4ODgoKCgoODg4KCh5KTkIuKi4uPj42Kh4SCgoKCgYGBgoKDgoKBgYGBgIGBgICAgYGBgIGAgYCAg4SDg4OEg4ODgoKCgXx9fHx9gn1+f4GCiIGCgoSCgYGDg4GBgYKDgYKBgYCAf39/gICAf3+AgX9/f3+AgYCAgICAgH9/f3+AgICAgH9/gYODhYSEg4SDgoKCg4OCgoOCgoODg4ODg4SDg4KEhYWDg4SEgoKDhIOCg4ODg4OCgoODgoCKlJOPioqMjpCPjYuGg4KCgoKBgYGBgoOCgYGBgIGBgoGBgICBgYGAgYCAgH+BgoODg4SEhIOCgoKCfXx8fn6AgYOAg4OChIaFhoaFhIWFg4ODg4SBgYKEhIKDgoeDg4KAgoGBgoKCg4KDg4KDg4ODgoGAgIKCgYOCgYKCg4OEhYWEg4OChISEhIOEhISDg4OEg4ODg4OEg4SDhIWEhISDg4ODgoKCgoKCgoKBgYKCgo+UlI+Njo6RkY6KiISCgoKCgYGBgYGCg4GBgIGBgYGBgYCBgIGBgYCBgICAgIKChIKChIOCg4ODgoJ9fX2AgH+AgoGDg4ODhIaEhIOEhYWDg4GBg4OBgIGDgYKEhYWFhoaHhoaGhoeIh4eGhoeHhoaEgoGCg4SDg4ODg4ODhISFhYWDhYSFhISEg4KBg4OCg4SEg4KCg4SCg4ODg4OCgoKCgoKCg4OEhIOFhYWFhoaIk5OTkI+Pj5KRjIqIgoKCgoKBgYGBgYKDgoKBgIGBgYGBgICAgYGBgICAgICAhISEgoKCgoGBgoKBgX+AgYOCgICAf4CCgoGDg4KCgYODg4SDg4KDhYSDgYGBgoWHhoeHh4aGh4eHiIiHh4eIiIiFhIOBgIGBgoKCg4GCg4SEhYSDg4OEg4OEhIOBgYGCg4OEhISDg4ODg4OEhIODgoSDg4ODhIWFhoeHh4eIiIiJiY6TkpKOj46Rko+LiYeCgoKCgoKBgYGBgoKCgoGBgIGBgYGAgICAgYGAgIGAgICDg4KCgYKCgYGAf4CBhYWFhoOCgYB+fn+BgoSCgYKDhIOCg4ODg4KChISDg4OCho2DjIeFhYSDg4SFhYKEhIWFg4KBgH9/gIB/gIGEg4OEhYWEgoKCgoOCg4OFhIKDhISEhYaGhoaGhoWFhoeHhYaIh4aHiIeGhoaIiYeGhYaGhoeIkZKSj46QjpCRjImHhYGBgoKCgoGBgYGBgoOBgYGBgYGBgICAgICBgYCAgICAgISEg4KBgoGAgYGAgYKIh4aHhYSCgH99fX6AgH+AgYGBgYGBgoGAgYKDgoGCgoGIk4CSiIGCg4GBgYGAf4GAgICAgH9+gIGBgYKCg4OEg4OEg4OCgoGBgoODg4SEg4SEhIOFhYaFh4eIh4eHh4eHh4eGhoaGh4WFhYaGhISEhIWEhYaSk5GOjo+OkI6JiIeEgoKCgoKCgoGBgIGCgoKCgoKCgYGBgYGAgYGBgICAgYGAgoSDg4KDgoGCgYKDg4iHh4iHhYSCgX5+gICAfn5/f4CBgYGCgoCCg5GHgH+Af4uagJWOf4KCg4OAgH9/gICAgICAgICDg4KDg4ODgoOBgYKCgoOCgYKCgoOCgoSDhISDg4SEhYWFhYaGhoaFhISEhYWEhIWFhYSEhISDhISEhISEipSTkpCQj46NiIaFhIOBgYKCgoKCgYGAgYKCgoKBgoKBgYCBgYCBgYGAgICAgYGAg4OCgoOCgoKBgoOCiImJiYiHhYSDgYKEhIOBgoKCg4SCgoODgoOJmYyDgoSBj5yDmJKCgoGChIOBgYGBgoOCgoGDg4SDg4SEg4OCg4KDg4ODg4KCgoKCgoGDhISEhYSFhYWFhIWEhIWFhYWDg4OEhISEhYWFhISEhISEg4ODg4OOlZKQkZGOjYyHhYODg4GBgoKCgoKBgYCBgoOCgYCCgYGBgICAgIGBgYCAgICBgICDhYSEhIODg4SDhIOGh4mIhoWDhIODg4WDgYCDg4WFhIODgYB/g4+aj4OFhIKSnISXlISCgoKEg4OCgoGBhIWEg4ODgoKDhISDg4ODg4SFhISDg4KCgoKCgoSEhYSFhYWFhYODhYWFhYaFhoWEhIWEhYWGhYWFhIWEhISDhIODhJGUk5KSj4yMioWEhIODgYGCg4KCgoKBgYGCg4KBgYKBgYGBgICBgIGBgH+AgIGAgYaGhoaGhoaHh4aGhYSDhYaCgIGBgYGHgoB+f4CEkImDgH58fHt7jJ2OgIKCgZGbhJWVhIKCgYKDg4GCgYKDhYODg4KDg4OEgoKEhIOEhIWEg4OCgoKCgYKCg4ODg4SFhYWFhIOEhYWGhYWEhISEhIOEhIWFhYWFhIODhIOEg4KGlJSSlJKPjYyIhISEg4KBgoODgoKDg4GBgoKBgoKCgYGCgYGBgYCAgYGAgICAgICAhYWFhYaGh4aGhoWGg4ODg4GAgoKCgYKAf35/f4WblIh/fX18gYCBlYiAg4J/j5ySmJSBgYKBgYKBgYKDgoODgoOCgoKCg4OBg4SDg4ODg4OEhIKCgoKDgoKDg4ODhIWEhISEg4OEhIODg4OEhIODg4ODg4SDg4ODg4KDg4KDgouUk5KTko2NioeDg4OEgYGCg4ODg4ODgoGBgoGCgoKCgoKBgYGBgICBgYCAf4CAgICDhISFhYSFhYWEhIWCg4KDgoKDg4OBgICAgICAhJueiX6DgX2JiX6Cg4OEgoifoKGTiYGCgoGEh4KDg4ODgoODhIKCgoODgoKDg4KCg4KDg4WEg4ODg4SDg4SEhISEhYWEhIWEg4SEg4OEhISEhISEg4SEhYSDg4SEhIODgoKDkJSSkpKPi4yIhoOFg4OBgYKDg4ODg4OCgYGCgoKCgoKDgoCBgoGAgICAgIB/gICAgISDhYWEhYWFhYSFhYOEhIWDg4SEhIKCgoOCgoSClaCIgo2FfoOFf3+GhoWFnJ+Gfn19f4KDh5aMg4OEg4ODhISEg4OEhISEg4SEhIOEg4OFhoWFhYSFhYWFhYSFhoWGhoWFhYWFhYWFhYWGhoWGhoaFhoaGh4aFhYWFg4SEhIeTk5OSkoyKiIWFhYWCgoGBgoODg4OCg4KBgYKDg4ODgoKBgIGAgICAgICAgH+AgICAhYWFhYWGh4eGhYWFhISFhYSEhISEg4ODg4OEhYOLkoKEhoSJgX9/foKIhoWIf3x+f39/f4idmoSEhISEhISEhISEhISFhYWEhYSGhYWGhYaGhoWGhYWHhYWGhYaGhoaFhIWFhYWFhIWGhoaHhoaGhoaHh4iIiIaFhYaEhYWGjZSTkpGQi4qHhoeGhIGCgYKDg4ODg4KDgoGBgoODg4KAgYGBgICAgICAgICAf4CAgICHh4eGhoeHiIeHhoaEg4ODhIODg4OEg4ODg4OEhISEgoGAgYSBf39+gIqCfn9/f39/f35/hZ6Ng4WGhoaFhYWFhoaHhoaFhoWFhoeHh4iHh4eGhoaHh4eGhoaGhoaGhYSDhIWFhYSFhYaGhoeHhoaGhoeHh4eIiIeGhoaHh4eRlJORkZCLiIiFhoSDgoKBgoODg4ODgoKDgoKCgoOCgYCBgICBgICAgIGAgIB/gICAf4aHiIeHh4eIiYmIiIODgoKDgoSEhIWEg4KCg4SEhISBgICBjIeAfn5/gX9/gH9/gIB/f4B+g4eFhoeIiIeHh4eIh4iHiIiIhoaHiIiJiYmIh4aHh4eJiIaHhoeHhoaFhIOEhYaFhYWFhoaGh4eFhoeGh4aGh4eHh4eHh4eFh5OTkY+RkIuHhoWGhIKCgYGCg4ODg4ODgoKCgoGCg4KCgIGBgYCAgICAgICAf3+AgYB/hoiIiIiHh4iJiYmIg4KCg4ODhIWHh4aFg4OFhISEg4GAgIOJhYKAgYKCgYGBgYB/gH9/fnt5gIaIiIqKiYmIiImJiYmKi4qIiIiJiYuLioqIiIeIiIiHh4iIh4iGh4aEg4OFh4eHhoWFhISDhYWEhYWGhISEhYWFhoWGhYOJlJOQj5COioaFhoWDgYGBgoKDg4ODgoKCgoKCgoKCgYGBgYGBgYCAgICAgIB/gICBgH+GiYiIiYeIiImJiIiEgoKDg4KDhImKh4aEhIWEg4OCf4CChYSCgoKCgoKCgH9+fX19fX9+fHt8g4eJi4uKioqIiIqJiImLiomJiImIioqJi4mHhoaGh4WGiIiJiIeHh4SDgoSIiIiIh4WCgoGDg4KDg4SCgoKDgoGEg4SDgY6TkpCPj4uIhYSGhIKBgYGBgoODg4OCgoKCgoKCgoGBgYGBgIGAgICAgICAgH+AgIGAf4WIh4eHhoeIiIiHh4SCg4OCgoOFiYqJh4WHhYSFhYOBgoSEg4OCgoKDgX59fn5+fn5+fXx+fX19g4eJioqHh4WGh4eHh4iHh4mGiIaIh4aJiYODhIOFhISFhYaIiIaFg4KCg4WHhoeGhoSDgoOEgoODhIKBgoGBgYODhIOEkZKRjo+Oi4eFhoaEgoGAgYGDg4ODg4KCgoKCgoKCgYGBgIGBgYCAgIB/gIGAf39/gIB/hYaGhYaGhoeHiIeGgYKEhIOChYeIi4qGhIaEgoaGgYKEhIODg4OCgoF9fH1/gH9+fn59fH19fHl8g4aHh4SDgYODhIWFhYODhYSEhISFhIWEgoKDgoSEgYKDg4WGhYSCgYGCgoODhYOEhIWEhIaDhISFg4KDgYKDg4SFhIeSkY+Nj4yJhoSFhIWCgYCBgYODg4ODgoKCgoKCgoKBgYGBgYGAgICAf4CAgYB/gICAgICDhIWEhYWFh4eHh4aAgYGFg4OEhYSHiIWCgIB/gX9/gYODg4ODgoJ/fX1/gICBf31+fn19fX17enp+hISEgoGBgIGBgoKBf36BgYGCgYOAgoGCgoKBg4SAf4CAgYOCgICAgICBgYGCgYGChIODhYSCg4SDgoKBgoSDhYWGi5ORjo+Pi4iFhYOChIKBgYGBgoODg4KCgoKCgoKCgoGBgYCBgYCBgH9/gIGBgICAgH+AgIKCg4OChIOEhYWGhn+BfoCBgICAgIGDgn9+fn5+foCCg4OCg4KDgn19fn+AgIGAfn19fX19fXx6enqAgoKBf39/f35/f4B+fYB/f4CAgX+AgIGAf4CBgX59fX+AgX9/foCAgH+AgICAf4CCgICCgYGCgYGAgYGBgYKEg4aPkpCOj42Kh4eGg4ODgYGBgYGCg4ODgoKCgoKCgoOCgYGCgYGBgICAgH+AgICAgICAf3+AgYKDhIGCgoODg4SFgIB/fH19fn19fn+Af31/fn1+gYODg4KCgYF/fX1+f4CAgH9+fX19fHt7e3p6eXqAgIB+f39+fn1+f35/gH9+f3+Af4GAf35+fn9/fn18fn+Af35+f3+Af39/f4B/f4B+f4CBf4B+f39/gH9+f4B/hZKSj46Pi4uHiYWEhIKCgYGBgYKDg4ODg4OCgoKDg4KAgYKBgYGAgICAf3+AgIB/gIF/f36BgYSEgYKBg4OCg4OBgH98fn5/fX6Af4B/foF/f4CBhIOCgYB/f359fn5/gICAfn19fX17e3x6enl5eXuAgH9/f39+fn5/foCAf35/f4CAgoB/fH5+f35+fXx/f4B/fn9/f4B/f35/foCAf36Af39+fn5/f35+fn18fH2Fk5KOjIuKiImIhISEgoKCgYGBgoOCgoODgoODg4ODgYCBgYGBgYCAf39/f4CAgICAgIB/foCBhIOCgYGDhISDhICBgICBgIGAgYKCgoGBgoCBg4ODgYGBgYCAfX19fn5+f359fX19fXx8fHt6eXl5eX2BgICBgYF/f4B/f4F/gICAgYGCgoB+gH5/fn5+foGAgYF/f39/gIB/f39/gYB+f4CAfn9/fn+Af31+fn17fIaTkYyLioeHioiGhoSDgoGBgYGCg4ODg4OCg4OCgoKBgICBgYGAgH9/f39/gICAgICAgH9+fn+BgYGAgISGh4aHgoSDhYOBg4ODhYSEhISEg4ODhIKCgoKCgX5+fX19fn6AfX19fX19fX19e3p6eXl5eYCCgoKEg4GCgoF/gYCBgYGDgoODgYGCgIGAf4CBg4GEgoCAgYCBgYCAgYCCgn+BgIF/gIB/gICAfn9/fnx8ipOQiomIiIiJiIaGhoSCgoGBgoKDg4ODg4KDg4KCgYCAgICBgYGAf39/f4CAgICAgIGBf359fn5/f39+g4aHh4iChYSFg4SFhIWGhYaGhoWGhYGBg4ODgoKAfX19fX19fn59fX19fX19fX18e3l5eXl4fIKDhIWCgYSDgoKDhYaCg4SDgYKCg4OCgoKCgYKFg4iFgoGBgYKDgYGBgYSDgoOCgoKCgYGBgIF/gIGAf36Ok4yHiIaIh4aGhYaGhIKDgoGCgoODg4ODg4OCgYGBgH+AgYCBgYB/gH9/gICAgH+AgYB/fn19fX5+f36Ag4SHiISGhoaFhoaHh4aHh4iHh4eGf32BgIGCgX59fX19fX19fX19fX18fH5+fnx7eXh3eHl5gIODf4OMhIOEhISXl4ODhIF9foGCgoGCgYKBg4aIjIWDgoKBhIKEg4KDhYSEhYOCg4OCg4OCgoKCg4OCgpKQi4iJh4mHhoaEhoWEhISCgYKCg4ODg4ODgoGBgYCAgICBgIGBgH9/fn+AgYCAf4CAgH9/fn1+fn+Bf4CCgYWFhYeGh4eGh4eIhoaHh4eGh4V/fX18fX9+fX19fX19fX19fX19fXx7iJKCe3x6fIZ5eHl8gYF+iZaEg4OEhJSTgIGBf39/fn6Fi4B/gICEhpCJhYSCgoGFhYuDgYOFhYaGhIOFhYOFhIODhIOFhISIko6MiYiIiYeHh4WGhYSFhIKBgoKDg4ODg4OCgYGBgYB/gIGAgICAf39/f4CAgICAgYGBf39/f4CAgIGBgYGBg4OGh4aGh4aGiIeGhoaFhIOFhH59fHx8fX18fH19fX19fX19fX18fH+RlZaDe3qElHx4eXp7fICCg4GBgYOCgH58fn57iJF8fI6Wf31/f4KGioWDg4SCgYONiX99f4OEhoWDhYaFhIWFg4SFhYaEhI6Rj4yKioyJiImHhYWFg4ODgYGCgoKDhIODgoGBgICBgICAgYGAgIB/f3+AgIB/gICAgX5+f4GBgoKCgoODgoOCgoWGhISFhYSGhIOEg4KBgIKAfn19fHx9fXx8fH18fH18fX19fHx8e4uRl4x6e3yBenp6e3x5eX19foB/gH98e3t+fn2ClZF/hIh+fH5/goR8fIGChIKAf4eDfIKBf4KCgIODhISEhISChIOEhYGEkZGOi4yMjoqJiYWFhYODgoKBgoODgoKDg4KCgYGAgIGAgICAgICAgH+Af3+Af357gICBenyAgYKDhYODhYWFhYODg4SCgYKDgoOCgoGBgIB/gX5+fX59fHx8fHx8fHx8fHx8fHx9fHx8fn6Kgnt6e3p4ent7fH17fn1+f319fX18fH+BgX2Gj4F+fYJ+fn6Agnx8f3+CgIKAfnx7ioJ9gH9+gYCAgIKBgoCAgYGAf4uUj4yLjo6NiIeIhYWEhIOCgoKCg4OCgoODgYGBgICAgICAgH9+fXx7fHx9f3+AgHx6gYF4e4CCgYOFhIOFhIaHhISAhpSIgIKBgYGBgH9/f39/fn5+gHx8fHx8fHx8fHx8fHx9fHx8fHx8fHl7e3t4eHl7enp8gn+Afn+BfH5+f399gIKCgICAgX+CkYF/f4CAfoB+fn9+gIGBfX19e319fX19fHx9gH+AgH6Afn6ClJGMjI2OjoqFhoeFhISFg4ODgoODg4OCgoGBgYGAgICBgICAf4CAf39/fXt6fICAgHh+gXd7gIF/gYKCgoKEhoeGhn6IlYp+gIGAf4B/foB+f39/fn+Bfnx7e3x8fHx8fHx8fH59fHt8fHx8e3x8fHp6eXt8en2Fg4J/gYF+f35/gH6FgoF+gH9+foCFhoKAfn6Dhn9+fH6AgIGAf39+fX19fX57fH1/f3+AfX9+gIyRjYyNjo2Nh4SGhoWEhISDg4OCg4ODg4KBgYGBgYCAgYGAgYGBgYGAgH9/f397en9/e3mAd3p/f31/f3+Af4KDhoaFf3+FgX5/gIB/gH5+f31/gIB/f4B/f319fHx9fn18fH19fX19fH58fXx7fXx8ent6fH19f4aEgoCAgX1+fX5/fouEgYZ+fXx8f36CgX99fX19gHx7fXx+gYSDgYB+fn5+fX1/f399foB+fn6Eko2MjI+Ni4qGhIaEhIODg4OCg4KDgoOCgYGBgYGAgYGBgYB/fXx8fH1+f39/f397e399d352eH59fH18fX5+gYGCg4B6fX18fn+Af36Af35/fn+AgH+AgH9/fn9+fn5+fn1+fn99fH59fn19fHt8fHx6e3p9fn+Ag4OCf35/fH18fXx8gYN+jH58e3t9fn1+fn17e3t9fHp7e3uAhoWChIOCf4B+f4KCgn9/goJ/gIuQjYyLjYyLiISEhIODg4ODgoKCgoKCgoKBgYGAgoGBgYKCf3+AgIB/fn18fH5/fn55fX52e3Z4fXx8fHt9fX6BgICAf31/f31+f39/foB/f39+f3+Af4GBf399gH9/fn9+fn5/f3yCfn59fX17e319fHp8fH6AgoGAgIB8fH18fHx8fH18fnt/fnt7e3x8fH18e3t7e3x8enp9en6CfoGDhIKBgoGFhoWFhoaHhYGEkY+Ni4qLh4eFgoOEhISEg4KCgYGCgoKBgoGBgYGBgoGBgoKAgYKBgYCAgH9+e3x+fnx6fnh5dnd8fHx7e318f4GAf35/foB/f35/f35/gH9/f3+Af3+AgYKAfn6BgIB/f39/f39+fYN8fH19fH99fX19e3x+fn9/fn5+fnx8fHx8fXx+fnt8e3x8fHx9fH18fnx9fHt7e3x5e3x7fH16fX5+f4CAg4eJiYmKiYqJhYiRjoyIiYeFhYOCgoOEhIOCgoKBgYKBgYKBgYGBgYKCgoGCgoCAgX98e3p6eXt9enx+fnl8eXh4dHx8fHt8fHx+gH9/f39/gIB/fn5+fX+AgH9/f3+Af4CDg4B/gIGAgIB/f4CBf358enx9fX59fX5+jIZ9fX57e4OCfX19fX18fX19fH1+fH18fXx9fX58fn19fX18e3t6fHt8fHt6e3t6enp7fn6DhYiHiIqLi4uJjZGOjYmIhoWEgoKCgoODg4OBgYGBgYGBgYGBgYGCgoOCgYKBgIGBf3+Af356eHl5en5+e3l6eH5zfHx8e3x8fH5+fn5/gH+AgIB/fn9+gIF/f4B/gIGAgoSDgYCAgYGAgX+AgYKBf39+f31+gH57foGSjHx9f4qAjYx+fn19fX59fX59fHx8fX18fXx9fX1+fX1+fnx7e3t8fH18e3p7fHl6eXh5e35/hIOEh4mKiImOkI2LiIiFhISCgYKCgoKCgoGCgoKBgYGCgYKCgoGCgoKBgoKAgYGAfoCAf39+e3p5e319eHx6f3KBfXt7fHx8fn59fYGCf4GBgX9/gH+AgX9/gIGCgYGFhISCgYGCgYKBgICBg4KAf4F/fX6Afnx/f4mCf36DkISEg4F/fn18jYd9fX59fHx/fnx9fXx9fX5+fX5/fX19e3x9fnx8e3x9enp5eXl5e3t+foCBg4eEiI6NioqGhYSEg4KBgoKCgoGBgYGCgoKBgoKCgoKCgoKCgoGCgn+AgIB+f39/fn5/ent5fX16enp9cX6Cent9fX19fXp4f4KAgYKCgICBgIGBgICBgoKCgoaFhIKBgYGBg4F/gIKEgX9+gYB9foF+fX5/gIB9fn+EgH5+f31+fX2KhX1+f31+foB/fX18fH5+fn99f4B9fn18fX9/fHx7fH17e3t6enp7e3x9fn2Ag4CJjYqLh4WFhYSDg4KCgoKCgYGBgoKBgoKCgoKCgoGBgoKBgYKCf4CAgH9/f39+fn59eXp6fXx5d3t0e4d8dHd9fn17e3Z2fYCBg4KBgYKCgoKBgYGDg4OChYaEg4CAgICDgX+AgYSBfn6Af35+gH59fn6AgH+Bfn+Af35/gH98f39/f3+Afn9/gH58fX18fn5+foF/gH2CgHx9gIB9e319fXx8e3x8e3t7fHt8fHx9fIqKiIiFhYWFhISDgYKBg4KAgIGCg4KCgoOCgoKCgoGCgoGBg4J/gIGAf39/fn5+fn57enp8fHt2e3R3f352cnt+fnt4dnd8gIGCgoKBgoODg4OCgoSDhIOFhoOCgX9/gIOBgICAg4F+foB/fX+AfX1+foCAf4J/gYGAgICBf31/f3+AgIGAgIB/fnx9fX19fn59g32AfoKAfX6AgX98fn59fX17fH58fXx8fHp8e3x9iYaGhYWHhYWFhIKBgoGDgYCAgoKDgoKCg4ODg4KBgYGBgYGCgH6AgYB/fn5+fn5+fn56e3p9goN9dXF6fHpxen59eXh0dICAgoKCg4KDhYOEg4ODhISEhIWEgYGAgH6AgoB+f36Bf35/f4B9foB9fX1+gH9/gYCCgYCAgIKBfn6Af4GAf4CAgH9+fX19fnx+fn19gYR/gH9+f4GBf31/f319fn1+fn1+fHt8enx7eoCHgoSEhYSEg4WDgoKBgYKBgICCgoOCgoOEg4SDg4KBgYKBgYOAfoCBf35+fn5+fX5+fnt7en6Jh354cnl9f3F6eHt4eXV1fYKDgoODg4OFhIWDg4OEhIODhIKBgH+Af4CBfn19foB+fn5/gH19f3x9fX6Af4CAgIKAgIGAgoGAf4B+gIF+gIGAgH9+fn5+fn5/fn6FhYGBgH+Ag4F/foGAf35/f4B/fn17ent6fHt6goR/g4KCgoOChIKBgYCAgoGAgIKBg4GBg4SDhIKEgoGBgoGCgn9+gIF/fn1+fn5+fX59fXp7fIWEe3tzeXp8cHd1dnd5dXR6hISBhISDhIWFhoSDg4WEgoODgoCBf39/f4B9fX1+gH1+f39/fn1+fH19foF/gIB/gIB/gIGDgoGAf36AgH+AgYCBgH9/f39/f4CAgIGCgoKBf4GDgX+Ag4J/f4B/gX+Af3x7e3p8e3yCgH+Cf3+BgIKCgYF/fn+BgH6BgoKDgYGDg4KEgoSCgYGBf4GCgH6AgH9/fX5+fX19fn19e3t6gH94fHZ5eXtxdHh3dnh1cnmFhYKEhIKEhYWGhISChIOBg4GAgIF+f4B/gHx9fX6Afn5/f39+fX98fn5+gX+Bf39+f4B/gIOCg4B/f4GBgIKBgYGAgICAgICAgIGAgYKDgYF/gISBfYGDhICAgX+BgYKBfXp7e3x8fH99f4B8f399fYGAgH59fYB/foKBgYKBgIKCgoKBg4KCgYB/gYKAfn9/fn99fX1+fX19fX19ent7fHZ9eXh5enJ1eXl2d3dzdYaFg4WFgoSEhYSEhIKDgoGDgX+AgX5/gH6AfX19fn9+f4B+fn99f3x/f3+BgIF/f3x+gH6AgYKDgYCAgoOEgoGAgYB/goCAgYGAgYGCg4KBgX+Ag4B+goKEgICCgYKChIJ+e3t8fHx8fX1+fXp+fX14fn9/fHx8fn5+gYCBgYCAgoGBgYGDgoGBf4CAgoB9fn19f319fX59fH19fX16e3p8dnx6d3t4cnZ5e3Z2dnN0hoSEhYSChISFg4OCgYOBgYOBgIGBfX+BfoF9fX1/f39/gH5+f359fYB/gIGBgX5+fH5/fn5/gYJ/gYGCg4eFgX9/fn6Af4CBgICAgIKCgYCAfoCCf36BgoKBgYOCg4OFgn99fX18e3x8eXp7en55fHl4f357e3t+fX1/f4F/gH6BgICAgoOCgYF/gIGBf31+fH1+fX19fX18fn58fXx5e3x4enx3endzeHd6c3d2c3SGhISGg4KDhISDgoKCg4GCgoGAgYF9gIB+gH1+fX5/gICAf35/f3x+f3+BgIGAf359f39+fn+BgH2AgIGDg4N/f359fn5+f4CAgIB/gYKAgH9+gIF+f4CCgoCBg4KEhYaEgH59fHx8fHp5dnl5enl3eXZ+fHt7e358e399gH99fX9/f3+BgoGBgX5/gYF+fX18fX19fX19fXx+jYF8fXl7e3p5fXd4eHR1dXhyd3d0doaEhIWEg4ODg4OCgYKDgoGDgn+Bf35/fn+AfX19fX+AgIB/f39/fIB/f4GAgYCAf3yAf31+fn9/fX5+gYGCgn5/fn1+fn5+f3+Af32AgIB+fn5/gX5+gIKBf4KDgoOEh4SAgH58fXx8e3x1eXl4eHh5d3t8e3t7foV9fn1/ent+fn59foGAgIGAfX6BgH59fXx9fX19fX18e32Dgnx8ent7e3p7d3Z4dXJzdnB4eXJ4hYWFhYOEhIOChIKBgYKBgIKBgIF/fn5+foB+fX58foCAgH+AgX97gH6AgH+BgYB/fYB+fn5/f319fX6AgYKBfn9+fn59fX5/fn9+fH+Af35+fn+Dfn6AgIF/gYOCg4OGhICBfnx9fHx7fXh3e3h1eXd3eXx6e3t9kod9fH13en1+fn19f35+gH98foB/fn19fH19fX19fHt8ent9enp4e3x6ent4dHh1cXJ0cHh4cnmEhYWFg4SDgoODgoGBgoKAgYGAgIB9fn5/gH18fn1/gIGAf4CBgHyAf4B+f4GAf39+gX9+f39+fX18gICAgIB+f35+fn18fn9/f358fYB/fX1+gIJ/foCAf36ChIKCg4WFgoJ+fXx7e3x8eXd8eXd4d3d4e3t7e3yFin17end6fH19fHx9fX1/fnx9fn59fXx8fX5+fX18fHt6enx7e3p5enp6enhzd3VxcXJweHdxe4WGhIWDhYKBg4OBgYGBgoCBgICBgH5/fn9/fXx+fYCAgoGAgIGBfX6Af35/gX+Af3+BgH9/f31+fH1/gICAgH9/f35+fXx+f39/f319f39+fn6CgYF/gIB/foGDgoKEg4SCgn5+fHx6fHt7eXt6d3N2d3h5e3p7eXp/fnt7d3p8fXx8fH59fH19fH19fXx8fX19fX99fXx9e3l7fHx7enp6enp6eHN2dXBwcm93dnJ7hYaEhYOEgoGDgoKCgYGCgYKBgYGAf4B/f399fX9+f4CBgYJ/goF9foF+fn+Bf4B/gIJ/gIB+fH58f3+BgICAf4B/f4B+fX5+f4B/f39/gH9/f4J/gICAgIB/gYGAgISBgoKAf39+f3x9fn56fYV+dHx9enp6enx5eXp6hoV3eXx8fHx8fXx8fHx8fX19fHx9fX19fn19fX16eX18fH16enp6enp5c3V1b29xb3d0c3yFhoOEgoOCgYKBgoKCgYKBgYGCgYCAgICAgH59gH+Af4GCgn+CgX+AgX5/gYB/gICAgn+Bf319f35/f4KAgICAgIB/gIB+fn1/gH9/gIB/f39/gH+AgICAgH+BgYCBgYGCgYCAf39/fn1/fnuBk416fH18e315e3p6eHmBgXh5e3x8fXx8fHx8fHx9fX18fH18fn1+fn59fHp8fHt8fXt5enp6eXlzdXVvb3Fwd3N0fYWGg4OCg4KAgYCCgoGAgYGCgYKBgYCAgIGAfn5/f4GAgYKCgIKCgICCfoCBgX9/gX+BgIF/fH6Af3+AgoCAgICAf3+AgH9/fX6Afn2AgIB/f3+AgICAgYCAf4CAgYCBgYKCgICAf39/fX5/fIGGiXx8fnt7fnl6e3p7jn53d3l7fHt9fHx8fHt9fH19fX18fXx+fn5/f358enx9e3x9e3l6e3p5eXN0dW5zcXB4cnV6hYaDg4KDgoCAgIKCgX+CgYKBgoGBgYKAgYF/fn9/gYGCgYKBg4OAgYJ/gYGBf4CAgIB/gX99f4F/gICBgICAf4B+gICAf359foB+fn+Af39/gH9/gIGBf4CBgH+BgIGCgoKAgICAgIB9foB9gIOCe35+e3x9e3p8fHyHeXh4eXx8fH17fHx9fX18fH19fn19fX5+f3+Af317fH18fHx7enl7e3l5c3J1bnZycHhxdnaFhYOEg4KCgICBgoF/gIKCgoKDgYGDgoCCgYB/gICCgoKBg4KEhICBgX6BgoB/gICAgH+Cf36AgYCCgICAgIB/gH+AgIB/fn2Af39/f4CAgH+Af3+AgYF/gICAgIGAgIGBgYGAgYCAgH9/gH5/fX59fn57fXx9e3x8eHh1eHh5e3x8fXx7fHx8fX5/f39/fn19fn9/gIGAf3x9fHx9e3p7eXp8eHpzcnVud3FxenF2d4WFg4ODg4KBgYKDf3+CgYSDg4SBgYOAgoKCgYCAgIKDgoCCgoSDf4GAfoKDgICBgICAf4CAf4GBgIJ/f4CCgH9/gICAgICAf4CAgH+AgICAgIB/f4CBgYCAgICAgYGAgoOCgoCCgYGCgYB/f4B/gId+fnx6fXx7fX94d3Z5eXp8fXx8fXt8fH19fn5/gIGAfn1+gICAgoGAfH59fX58d3t6ent5eXNxdW53cHV6cXZ5hYWCg4KDg4KDhIR/gIOBhoOEg4GChICEg4KCgICCgoSBgYKChIJ/gIB/gYOCgYCBgYCAf4GBgYGAg4F+gIOCf35/goGAgIB+gYCBf4CAgYGBgYCAgIKBgYKBgYCBgYGBgoOCgoOBg4OCgYCBgH+AhH19fXx/fXt9f3p5dnp4eXt7fH19e3x9fX19fn+AgYGAgH+AgICDg4B9f35+fn15eXt6enp5c3J1b3dxd3lzd3uFgoKDgoOEgoOEg4CAgoOGg4ODgoKEgYSDgYKAgIKBhIGCgoGCgX6BgICCgYKBgYOBgIGAgICBgoGEgH6Bg4J/foCDgoCBfoCCg4KAgYGBgoKDgoGBg4KChIGAgYOBgYKEg4KEhIODhIODgYGBgYCCf4B/fYB8enx/e3t3fHl5eXt6fX59fHx8fH1+foCBgYCAgIGBgYSEgH2Af39/f357e3t6e3p0cHhyeXR2eHR3e4SCg4KDg4SChIODgYKChYaEgoODgoSBhISBg4CBg4KCgoKCgIKAf4GAgIKBgoGCgoKBgIGBgoOCgoOAfoGDgX9/gYSEgYN/goKBg4KCgoGDg4OEgYKEgoOCgoGCgoOBg4SDhISEhISFg4SCgYOCgoOBgYGAgH58fIB8fHh8eXp5enx9f3x7fHx9fX18fICAgICAgYGBgYKBfoGAgICAf3t7e3p6enVweHd5dnV8dXZ8gICDgoODg4OEhISAgoOGhYWDg4KDhIGEhYKCgYKDg4GCgoKAgYB+gYCBgYKDgoKCgoGAgYKCg4KCg4B/gYKBgICChIODgoGCgoGDgoKDg4SDg4SAgoSDg4OBgX+Bg4KDhYKEhISEhISDhISChIOEhIKBgoGBgHt+gX59eXx6enp9fHyBfnp8fH19fHp7fn5+gIB/gYGAgICAgIGBgIB/fX18fX18dnJ2eHh2dH92dX2Hh4OChIWDg4SFhICChYWEhIOCg4SEgISFg4KCgoODgYOCgoCCgH2AgIGCg4KCgoKEgoGCgoOEgoKBgICBgoGAgYOFhIOCg4CCgoOCg4ODg4OEg4CCg4KEg4KCfoOBgoSEgoODhISEhIOEhIOEg4WEg4ODgoKAe4CBf3x8fXp6e32AfX9/fHx6fH59fH19fn5/f39/gICAgH9+foCBgICAfnx9fX5/fn18e3h2f3Z3f4SHg4KDhYODhIaEgYKFhoWEhIODhISBhIWFgoKDg4SCg4KDgoKBfoCAgoKDgoODg4SDgYKCg4OCg4GCgYGDgn+ChISDg4KEf4KEg4ODg4SDg4SCgIOEg4SDg4KCg4KChIOCg4OEhISEhIWEg4OEhYSFhIOBgoB9gYKAfXx8e3x8gH19foB+fn1/fnx8fH19fn5/fn+BgYGBgH99fX6BgYB+fn19fX59fX5+f3+AfH2AgYKCg4OGg4SDhoSBgoiHhYSDg4SEhYGFhYWDg4SDhIODgoOCg4F+gYGDg4SCg4OEhIOCg4KEg4ODgoKDgYOCf4KEg4ODgoOAgoWDg4ODhIODhIOBgoSEhYOCgoODg4GEg4GDg4SDg4SEhYSEhIWFhYWEg4ODf32BhIB9fXx8fHx/gX5/f39/fX99e3x9fX19fX5+f4CBgIGBgH59fH6Cf39+fn5+fX1/f39/gICAf4CEhIODhIWDhIOFf36CiouFhISDgoOFgYaGhoOEhISEhIODg4OEgn+BgYODhYSFhIWEg4KEhISFhIODgoSDhYKBhISFhYaEgoCDh4SDg4OFhIWFhIGEg4OGgoOCg4GCgoSDgoODhYODhYWEhYWHh4aHhYSEhYSBf4GDf35+fH5+fX+BgH9+fHx/f358enx9fX19fX5+fn9/gIGBf319fIB/gH5+fn5+f3+AgYGBgYKAgYWFhIOEhIKEg4aAgoWFiomEhISEhYWCh4aGhIWFhIWEhISEg4SDgYKDg4OEhIaEhYSDg4SEhHyDhHuBhHd5g4F9hH5+cnWDgoF2foOFgH2BdYF6hH9/f36EhIKDg4KBg4SDg4SFg4SFhoSFhn2EeXx+f4N7hYOBhIOAf319fn5+gYOBfXt/fX6Afn18fHx9fX19fH19f4B/gYJ/fX18f4GBgICAgH+BgYGCgYKDg4KChoSEhIWEgYOEhYOEhYSKiIWFhYOFhYSGhoaDhIWFhYWEhYWEhIWCgoOEhYWFhoSFhIOEhYWCaICFanx7cXF8gXOGc3R0fYKDdXNxg4ZzcHVyc3SDdnt9dYF/goOBgnZ5hYCDgIR/hYSChYWCaHpyc3N8gHKBg3+Dg32BfX5+fX6Cg4J8f4F9f4B9fXx8fHx9fHx8fn1+gH+BgX99fX2AgYKBgYGBgIGBgYKBgoKCgoSHhIWEhYSBgoSGhoOFg4aIhoaFg4aGh4eGh4OFhYaFg4KFhoSFhYODg4SEhoaGhIaEg4SFhn1xe4FweXZ+g3+CbnlwdXN8dnl5hnOEg3B2eHF2dHR1cnN0dml/gG5yb3R2bnVsd217c26Ah3ltfXJzdnN2bW53bHB5bHV9f399foGAgX2Af32Af4B/fX18fHx9fH1+f32Af4CAfnx/foCBgoCBgICAgYCAgIKDgoKEhYiGhoCChYODhIeGg4WFhYaHh4SDhoeIiYaHhIWGiIeEg4WGhYWEhIOFhIKFhoaFhoWEhoWHdnB0e3BydX+HhYNtdW92b3x1coR5eYd4cXR3bndod3pucHaCcoN+b3p5eW1vbnpvb213fXiGcHF6cHJ0ZoF1fm57eXNveX+Af319gYB/e399fIB+gIB+foCAgYB+fn9+foF/gH9+fYB9f4CBf4B+fn+BgH9+goOCgoSFh4eEfoeEg4OFh4aEhoWFhoaIhISGh4iIhoeEhoaLioWEhoeHhYOFhYWEgoWFhYWGhYWGhYZxdXByc29zenl+hHSIdHV+iHZugnKEhnluanJ/cW1zd3x/dXR8hH54cXV3bnl1enF2eHV6eYRxam95eHBreXN6b3p3dnZwgYB/fn5/f356fn18f31/f359gIGDg4CCg4GBhIGBf4GBgH1/f4F+f35+f4GAfn6BgoCAgYSHhoODhoSEhIaHhoWFhYWHhoiFhYaFh4eFhoSGhomIhYSJi4iGhIaFhYWDhYWEhoaGhoaFg3iLeXKIentwcIWEeIV4eWtzfnl7a3KDh4N6fG17enl0fYB2bm+AgG90fHV3cXl9fW1+dW+DhYZ6gHJye3x1cG96bHN8bneCgIF+fn99fXp9e3x9fX9/fn1/f4KCf4GDgYGDgYB/gICAfn9+f31/fn1/gH58fYGAfn6Ag4iFhoOFhYWFhoeFhYWFhYeHiIaEhoWHhoaFhIWFhYWFhomKh4WEhoWGhoWGhoSGhoaGhoWGh4eHhoaEhoWGh4iHhYeHhoOHhoWFg4SFhoWGhIaEg4SEhoSEgYODhISFhIWEhYSGg4aHhYaEhIWHhoSEhYaEhX13hYOEhIKBgX1/fnt8e357fHx9f359fH59gIB9f4F/f4GAfn5+gH5+f35+fX99fX5/fHt8f358fH+BiYaFhIaGhoWGhoWFhYWGhoeIhoSGhYaGhYWDhIWGhYSGhoaGhYSGhIWGhoaGhIeGh4eGhYeIiIiIhoSHhYaGiIaFiIeIhYeGhoiFhYaHhYaGhYOChYWGhYWDhYSEhIWEhYWEhYWDhoaGhoWEhoeGhISFhoOFhIKEg4OFg4OCfYB/e3t8fnt8fH1/fnx8fn2Af31/gH5+gH99fXyAfX5/fn5+f3x8fX57fHx/fHt7fn+Ih4SEiIaGhoeGhYWEhoaGhoiHhIWGh4aFhIODhIaFhIeFhoaFhYaEhYaGh4eFh4aJiIaGiIeIiYiFhYiFhoeGh4aHhoeFh4eGh4WFhoeFh4aFgoOFhoaEhIOEhIOEhoSFhYWFhYOGhoWGhYWGhoWEhIWFg4SHhYOCgoWDhIF+gIB8e31+e3x7fX59fHx+fX5+fX9+fX1+fn19fH98fn58fYGAfHx8fXx8fH56e3t8foiHgoWIh4eGh4aGhISGhoeGiIaEhYSGhoSFh4OEhYSFh4SFhoaFhoSGhoeHhoaHh4mIhoaIh4iKiIWHiIWHh4WHhoeGh4WIiIeHhYaGh4WGhoWBhISFhoWFhISEg4SFhIaGhoWGhIaFhoaFhYaGhYSDhISDg4eDhIGChISDgYCAgHt7fn18fHx9fXx8fH19fH18fn18fX18fHx8fXx+fXt8gX99fH18fnx8fHp6fHx9iIeChoiHhoeGhoaEhYaFhoaGhYOFhIaFhIiJg4GEg4SGhIaGhoaGhIeHiIiHh4eIioiGh4iHiImIhYiHhYeGhoeHh4WHhoiIh4eFh4eHhYaHhIKEg4SGhYeFhISEhISFhoaGhoaFh4WFh4WGhYeFhIOEg4OEh4GDgIKDg4KCgn+Ae31+fXt8fH59fH19fH57fHx7fHx9fXt7e318e358e3x/fX18fX1/fXx6ent7fHyIh4KGhoaGh4aGhYSFhoWFhYWEg4WChoSDiId/enqChYaEhoaFh4aEh4eIiIiHhoiKh4aHh4eIiYeFiIeGiIeGhoeHhYeGiIiHhoWHhoiGhoeDg4SEg4aGh4WFhISEhYaGhoaGhYaHhoaIhoaEhoWDg4ODgoOGgYN+goKDgIOCf398f35+fHx9f318fX18fXt7e3p7fHx8e3t7fnt7fXt6e358fHx8fX5/fXt6fHp8fYmHg4aFhoWGhoWEhIWFhYWFhIOBhYGGhIKEhHyAhn+ChYWGhYWGhYSHh4iIiIaFiYqHhYeGh4eIh4WIhYaHiIaGh4eGh4aIiIeFhoeGh4WFh4OEhoWEhoaHhoWEg4WFhoaGhoaFhoaHhoeHhYOGhYOBg4KAg4WCg36BgYF/g4F/fn5/fn58fH1/fXt9fXx9enl6eXt8fXt7e3t+fHx8fHp7fXx8fHx+fYF8e3t7e3x7iYeEhoSGhIaGhYSFhoWEhIOEgoCDgYWDgYJ/eoSMe4CEhYeGhoaFhIeIh4aHhYSHioeDh4WGhoiGhYeEhoeIhoaIh4eHhoeIhoSGhoaHhYWHg4SFhIaGhoeFhISDhYWGhoeGhoWGhoeFhoaEg4SFgoGCgYCDg4KCfYGBgH6DgX5/f4B8f3x9fX59e359fH15eXp5e319enp7e318fXx8ent9fHx9fH5+gHx7e3x+fXyIh4WGhYeEhoSFhYWFhYODgYOBgIKBhYKAgH9/fXx7gYSFhoaEhYSDh4eGhoaFhIaJhoKGhIaGhoWFh4aHiImGhYiHiYeGhoeFhIaFhYeFhIeDhIWEiIaGh4WFhIKFhYaFhoaHhIaGh4aFhoODg4WBgIGAgIOBg4B8gYB+foKAfYB/gXx/fH1+fX57fn18fHl6enl6fX15ent7fHt8e3t6e319fH18f35+fHt7fX59fIiGhYaGhoSFhYSFhYSDgoKAgoGAgICDgX5+foB5en2Ag4OFh4WEg4OHhoOEhYSChYiFgoSDg4WFhYWHh4aIiIWFiIeJh4aFhoWDhoSFh4OEhoSEhYSHhoWGhYaEgoWFhoaGhoaEhYaGhYWGgoKDg39+gICAgYCDgHuBf31+gn5+gH6Afn99fX59f3t/fXt6eXp6eXp8fXl6ent7enx6e3t7fH19fXyAfn18fH1/fnx7h4WFhoaGhoSFhIWDhYKBgICAgYB+gIKCfX5/f3t/f4KDg4WGhYSDg4aDgYOEgoCFh4WCg4GBg4SEhIaGh4iHhYWIhomHhYSEhIKFg4SGgoOFhISGhIeGhYWFhoOEhYSFhoWGhIOEhYWDhYWBgIODf35/gH9/gIN/fIB9fX+CfYCBfn6Bfn5+fX1/e398e3p5enp5ent8eXp6e3t7fHp7e3t7fX59fYB9fXx8fYB/fXyGg4WGhoaGg4SDhYKFgYGAf3+AgH5/gIF8fn9/foCAgoKChIWDgoGChIGAg4KBgISFhYKBf4CCg4OEhYWHhoWEhoeFh4WGgoOCgoOCgoWBg4WEhYaEhoaHhoaFgoSEg4SGhYWDhIODhIOFhIB/goJ/fX5/fn5/hH57f3x8gIF9gYB9foN8fn59fX57fnt7enl6enl6ent5enp6e3t8ent8e3t+fn1/gXx9fHx9f4B+gIaEhYWEh4SDg4KGgoOAgYB+fn+AfX9/gXx9f39+fn+BgYKEg4KBgYKCf4CBgoCAgoWEgoB/gIGCgYOFhYeFhISGhoOFg4WBgoGBgoGCg4GChISEhYWGh4eGhYSDg4ODhIaFhIGDgoOChIODgH+AgX59fX5+fH6Dfnx+fHyBgH6Cf35/gnx/f319fHx8e3t6enp6eXt6enp5eXp6e3x5e317fH5/f4GAfX59fX1/gICAhoSEhYSFgoSCgoSCgoCBgH59fn9+fn6AfX2Af35+foGBgoODgoSHgYF+gICBf3+ChIOBf35/gIJ/goWEhYOCg4WFgoSBg4CBgIGBgYKBgIGEg4OGhYWHh4WEhIWCgoKDhYSCgYGBgYCFg4F/foB/fnx9fn18foN9e358fYF/gIN9fYCBf35/fXx8fH17e3p6enl5e3l6enl6ent7e3p7fXx8f3+BgoB+gH+AgH+AgYDKysrKysrKysrKysrLy8vLy8vLy8vLy8zMzMzNzc3Nzc3Nzc3NzczMzMvLy8vLy8vLy8vLy8vLzMvLy8vLy8vLy8vLy8vMzMzMzM3Nzc7Oz8/Pz9DQ0NHR0dLS0tLS0tLT09PT0tLS0tLS0tPT09TU1NTU09PT09PT09PT09PT09PT09PT09PT09PT09PT09PS0tLS0tLS0tLS0tPT09PT1NTV1dXV1dXV1dXV1dXV1dXV1NTU1NTT09PT09PT09PT09TU09PU1NTU1NTU1NTU09PT09PS0tLS0tPT09TU1NTU1NPT09LS0tLS0tLR0dHR0dPHhnNlYFtLWWdVTUZIQD03Nzg5Nzw8PDo8Oz42Oj04PDs6OTg3ODs7Oj87PTs8PD47P0E/QkJBQ0RFREE+PTw7QENDQUBDQ0FBR0hHSUtSwtXS09PT09TU1NTU1NTU1NTU1NXV1dXV1dXV1dXVysrKysrKysrKysrKy8vLy8vLy8vLy8vMzMzMzMzNzc3Nzc3Nzc3MzMzMy8vLy8vLy8vLy8vLzMzMy8vLy8vLy8vLy8vLzMzMzc3Nzc3Oz8/P0NDQ0NHR0tLS0tLS09PT09PT09PT09PS09PT09TU1NTU1NTU09PT09PT09PT09PT09PT1NTU1NTU1NTT09PT09LS0tLS0tLT09PT09PU1NTU1dXV1dXV1dXV1dXV1dXV1dXV1NTU1NPT09PT09PT09PU1NPT09TU1NTU1NTU1NPT09PS0tLS0tPT09PU1NTU1NTU09PT09PS0tLS0tLR0dHSzIxyZ2BcTVllUktHSz87Mzc4Ozg5Pj05PDpBOjs9Nzs8PDo6Nzg6Oz0/Oz88PTw/Pj9BPUFBPkNDREJAQT46Oz9DREFDRERCQklHSEhJTr7V0tPT09TU1NTU1NTU1NTU1NXV1dXV1dXV1dXV1crKy8vKysrKysrKy8vLy8vLy8vLy8vLy8zMzMzMzM3Nzc3Nzc3NzMzMzMzMy8vLy8vMzMzMzMzMzMzLy8zMzMzLy8vLzMzMzc3Nzc3Ozs/P0NDQ0NDR0dLS0tLS09PT09PT09PU09PT09PT09TU1NXV1dTU1NTT09PU1NPT09PT09PT1NTU1NTU1NTU1NPT09PS0tLS0tLS0tPT09PT1NTV1dXV1dXV1dXV1dXV1tbV1dXV1dTU1NTT09PT09PT09PU1NTU09TU1NTU1NTU1NTT09PT0tLS0tLT09PU1NTU1NTU1NTU09PT09PT0tLS0tHR0s+Sd2hfXk9XZ01LRks9ODc2NTk5OTw+OT88RDo7PDc5PD07OTc5Ojw9QDs+PT47PD48PT5BQD5EQ0NDP0E9Ojs9QkNFQ0NEQT9FSEpJSky61dPT09TU1NTU1NTU1NTV1dXV1dXV1dXV1dXV1dXLy8vLy8vLy8rKysvLy8vLy8vLy8zLy8vMzMzMzMzNzc3Nzc3Nzc3MzMzMzMzMzMzMzMzMzMzMzczMzMzMzMzMzMzMzMzMzc3Nzc3Ozs/Pz9DQ0NDQ0dHS0tPT09PT09PT09TU1NTU09TU1NTU1NTV1dXU1NTU1NPU1NTU09PT09TU1NTU1dTU1NTV1dTU09PT09LS0tLS0tLS09PT09TU1dXV1dbW1dXV1dXV1tbW1tXV1dXV1NTU1NTT09PT09PT1NTU1NTU1NTU1NTU1NTU09PT09LS0tLT09PU1NTU1dXV1dTU1NTT09PT09PT0tLS0dHRmn5nYWJOVWpKSElLPzw6OTM3Njc3PTs+OT06Ojo4ODo7Ozg4Ojs7PD46PT09Ojw/PD0/QkA/Q0RDRD5APT08QENEQ0JEQkQ+REhJSUtMttfT09TU1NTU1NXV1dXV1dXV1dXV1dXV1dXV1dXVy8vLy8vLy8vLy8vLy8vLy8vLy8zMzMzMzMzMzMzNzc3Nzc3Nzc3Nzc3MzMzMzMzMzMzMzMzNzc3NzczMzMzMzMzMzMzMzc3Nzc3Ozs7Pz8/Q0NDQ0NHS0tLT09PT09PT1NTU1NTU1NTU1NTU1NTV1dXV1NTU1NPT1NTU1NTU1NTU1NTU1dXV1NXV1dXV1NTU09PT09PS0tLT09PT09PU1NXV1dbW1tXV1dbW1tbW1tbW1dXV1dXU1NTU1NTU1NTU1NTU1NTU1NTU1NXU1NTU1NTT09PT09PT09PU1NTU1dXV1dXV1dTU1NTU09PT09PS0tLR0p+DaV9kU1hsSEhIS0A9Nzg0NzY6Oj87RDw8OTw8OTg6OTo6Ojs8Ojo7OT49Pjk9QDs/QUFCP0JCQUM9Pz8+PEBCRUNDQkBBO0ZJR01MSbLY09TU1NTU1NXV1dXV1dXV1dXW1tbW1tbV1dXW1svLy8vLy8vLy8vLy8vLy8vLy8vMzMzMzMzMzM3Nzc3Nzc3Nzc3Ozc3NzczMzMzMzMzMzc3Nzc3Nzc3Nzc3Nzc3Nzc3Mzc3Nzs7Ozs7Pz8/P0NDQ0NHS0tLS09PT09PT09TU1NTU1NTU1NTU1NTV1NXV1dTU1NTU1NTU1NTU1NTV1NTU1dXV1dXV1dXV1dTU1NTU1NPT09PT09PT09PU1NXV1dbW1tbW1tbW1tbW1tbW1tbV1dXV1dTU1NTU1NTU1NTU1NTV1NTU1NXV1dXU1NTU1NTT09PT09PT1NTU1dXV1dXV1dXU1NTU1NTT09PT09LS0tSjiGxfZlJWakdIR0lBPjM2Njo7PDhDPEJBPjxBPDg5Ojw6Ojw8PDk8PTo7PD09PD89QD9AQT9AQUBCPD4+PzxCQ0NDRkBBQT1ISklOTUeu2NPU1NTV1dXV1dXV1dXV1dbW1tbW1tbW1tbW1tbMzMvLy8rKysvLy8vLy8vLy8vMzMzNzc3Nzc3Nzc3Nzc3Nzc3Nzs7Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Ozs3Nzc3Nzc3Nzc3Nzs7Ozs7Oz8/P0NDQ0NHR0dLS0tPT09PT09TU1NTU1NTU1NTU1NTU1NTV1dXV1dTU1NTU1NTU1NTU1dXV1dXV1dXU1dTU1NXU1NTU1NTU09PT09TU1NTU1NXV1dbW1tbW1tbW1tbW1tbX19bW1tXV1dXV1dXV1dXV1dTU1NTU1dXV1dXV1dXU1NTU1NTU09PT09PT1NTU1NXV1dXV1dXV1dXV1NTU1NPT09PT0tLWroprY2VSWGhMSkdJQjg0OTQ6Ozo5QDk+Q0U/PDw5OTk9Oj07PDw6PTw7OTw9Ozs/PUA9PT5AQD9CQT5APD05QERDQkFBQj48SEpLTU5IqNnU1NXV1dXV1dXV1dXW1tbW1tbW1tbW1tbW1tbWzMzQ0dDQ0NDQ0dHR0dHR0c3Ky8vLzMzMzMzMzMzMzM3Nzc3Nzc7Ozs3Nzc3Nzc/Pz8/Pz8/Pz8/Pz9DQ0dHR0dHR0dHR0dHS0tHV2djY2NnZ2dra2tvb29vZ2dnZ2dna2tra2tra2tjW19fX19fX19jX19fX19vb29vb29vb29vb29vb3Nzc29zb29vb3Nvb29vb2tra2tra2tra2trb3NzX1dXV1dXV1dXV1dXW1tbX1tbW1tbV1dXV1dXV1dXV1dTU1dXV1dXV1dXU1NTU1NTU1NTU09PU1NTU1NXV1dXW1dXV1dXV1dTU1NTT09PT09PS1bqKa2hoUlhlSUlMT0A5OTo0O0E8Nz05QUM+QD89ODo6Ozk9Oz4/Ojs8PDo7PDo7Pj1APT8/P0FAQUE/QTw8Oz5BRENBREA9PElJSk1ORqPa09TV1dXV1dXV1dXW1tbW1tbW1tbW1tbW1tbW1szNloSGhoaGhoeHh4eHh4Ky4t3d3t7e3t7e3t7e3t3S0NDQ0NDQ0NDQ0NDQ0ci5ubm5ubm5ubm5ubq6t6WkpKSkpKSkpKSkpKSnhmBjY2NjY2NjY2NkZGRlhIuKioqKioqKioqKioemuri4uLi4uLi4uLi4ubSPjIyMjIyMjIyMjIyMjYiBgoGBgYGBgYGBgYGBg4uKioqKioqKioqKiouHvebh4uLi4uLi4uLj4+Pi2NfX1tbW1tbW1tbV1dXV1dXV1dXV1dbW1dXV1dXV1dTU1NTU1NTU1NTV1dXV1dXW1dXV1dXV1dXV1NTU1NTT09PT09XDkXFrak5TYkxMVk48Ojo3Nz5DPjg+Oj8/QT0/QDc7Ojs7PTs+Pjo7PD48Oz07PT8+QDw/Pz1AQEBBPj88PjxAQUVCQkZAQD9HSEpLT0ae2tXV1dXV1dXW1tbW1tbW1tbW1tbW19fX19fX19fMzm5QU1NTU1NUVFRUVFNMoPPr6+rq6urq6urq6uvp1dLS0tLS0tLS0tLS0tTEqaqqqqqqqqqqqqqqq6aGhIWFhYWFhYWFhYWFik4MEhISEhISEhISEhIRE0pUU1NTU1NTU1NTU1NPg6ejo6Ojo6Ojo6Ojo6ScWlVWVlZWVlZWVlZWVldOQ0NDQ0NERENDQ0REQ0ZTU1NTU1NTU1NTU1NTS6ry6+vr6+vr6+vr6+vr6dnX19fX1tbW1tbW1tbW1dXV1dXV1dbW1tbV1dXV1dXV1dXV1dTU1NTV1dXV1dXW1tXV1dXV1dXV1dXU1NTU1NTU1NPUy5h2bGlKTl9NUlVNPjw8Nzs/Qz42Ojc+Pjs9Qj85PDk9Ozw6PD07PTs9Ozs9PD0+PT07QT08QUBBQT08Pzw7QEJDQURFPUFAQ0ZLS09GmNzV1dXV1dbW1tbW1tbW1tbW1tfX19fX19fX19fXzM5xVFhXV1dYWFhYWFhXUKHx6enp6enp6enq6unq6dXS0tLS0tLS0tLS0tLUxaqrq6urq6urq6urq6yoiIeHh4eHh4eHh4eHh41SEhgYGBgYGBgYGBgYFxpOWVdXV1dXV1dXV1dXU4WopKSkpKSkpKSkpKSlnl9ZWlpaWlpaWlpaWlpbU0hISEhISEhISEhISEdKV1dXV1dXV1dXV1dXV0+r8erq6urq6urq6urq6unZ19jX19fX19fX1tbW1tbW1tbW1tbW1tbW1tbV1dXV1dXV1dXV1dXV1dXV1dXW1tbW1tXV1dXV1dXV1dXU1NTU1NTU1NGcenFpSlRdT1JVTkQ+Pzs/QEA4Ojs4PDs7PD86Ozs4Ozk5Ozw7Ojw5Ozs8Ozo9PT0+PUE/Pj8/Pj08PT88PEFBQ0FERTw+QEVGSktNRpPc1dXV1tbW1tbW1tbW1tbW1tfX19fX19fX19fX183OeF5hYGBgYGFhYWFgYFqk7ufn5+fn5+fn5+fn5+bV0dLS0tLS0tLS0tLS08Wtrq6urq6urq6urq6vq46NjY2NjY2NjY2NjY2SXSInJycnJycoKCgoKCcpWmNiYWJhYmJiYmJiYl6MrKmpqampqampqampqqNoZGVlZWVlZWVlZGRlZV1TVFRUVFRVVFRUVFVUVmBiYmJiYmJiYmJiYmJbr+/p6enp6enp6enp6enn2djY2NjY19fX19fX19fX19fX19bW1tfX19fW1tbW1tbV1dXV1dXV1dXV1dXV1tbW1tbW1tbW1tbV1dXV1dXU1NTU1NTWo3txZElbYE5OVU9AQT89REI+Oz06OTs6PT07PDs6OTg5OTs8Ozw8Ojo7PDo7QD08PTxAQTxBQTs7PEA/PD1CP0RDQ0U8PkJERkpMTEWN3NXV1tbW1tbW1tbW1tbX19fX19fX19fY2NjY2NjNzcfFxcXFxcXFxcXFxcXEy9DPz8/Pz8/Pz9DQ0NDQz87Ozs7Ozs/Ozs/Oz87NzMzMzMzMzMzMzMzMzMvJycrKysrKysrKysrKysfCw8PExMTExcXFxsbGxsvMy8zLzMzNzMzMzMzLz9HR0tLS0tLS0tLS0tLRzczMzMzMzMzMzMzMzMzMy8vLy8vLy8vLysvMy8vNzc3Nzc3Nzc3Nzc3NzdTY2NnZ2dnZ2dnZ2dnZ2djY2NjY2NjY2NjY2NfX19fX19fX1tfX19fX19bW1tbW1tbW1tXV1dXV1dXV1dbV1dbW1tbW1tbW1tXV1dXV1dTU1NTU169/cF5GXmJQUVdOR0ZDQ0lBPz07PDo8OEBCPD04Ojo4OTg7Pzs8PDs7PDw8PD87PD46Pj44PkI8Pj1BPjw+QkBERUNAPD5APkNJSUtEh9zV1tbW1tbW1tbW1tbX19fX19fX19jY2NjY2NjYzs3Pz8/Pz8/Pz8/Pz9PPz87MzczP09LSzs3P0s7Ozs7Ozs7Q1NLPz87S1M/OztPTz8/Pz8/Pz8/Pz8/Pz8/P0NDQ0NDR0dHR0dHS09PU1NTU1dXV1tbW1tfW1tbX1tfX19fX19fX19bW1tbW1tbW1tbW1tbW1tfX1tfX19fX1tbW1tbW1tfX19fX19fX19fX2NjX2NjY2NjZ2dnZ2dnZ2dnY19jY2NjY2NjY2NnZ2dnZ2dnZ2djY2NjY2NjY2NjY2NjX19fX19jY19fX1tbW1tbW1tbW1tbW1tbW1dbW1dbW1tbW1tbW1tbW1tXV1dXV1NTV1di4gm9XSl9jUlFaS0hBQTxCPT07Oj4+PD4/PT0/Nzk6OTk3OD48PD47Ozw7PDs/PT0+OTs7OT0+P0A+QD07OkI/QkNCPz0+QD5CRUdKQoDc1tbW1tbW1tbW19fX19fX19fX2NjY2NjY2NjY2M7Ozs7Ozs7Nzc3Nzsqfys3Nzc3QuYOEi8fTwJrLz87Ozs7Pypal0c/SqKDQz9GkodDOzs7Ozs7Ozs7Ozs7Oz8/Pz8/P0NDQ0NDQ0NDR0dHR0tLT09PU1NTU1NTV1dXV1dXV1dXV1dXV1dXV1dXW1tbV1dXV1dbW1tbV1dXV1dXV1NTU1NXV1dXV1dXV1dXW1tbW1tbW1tbX19fX19fX19fY2NjY2NjY2NjY2NnZ2dnZ2dnZ2dnZ2dnY2NjY2NjY2NjY2NjY2NjY2NfX19fX1tbW1tbW1tbW1tbW1tXV1tbW1tbW1tbW1tbW1tbW1dXV1dXV1dXYwIBuVU9gY1dZW0xMQ0A9PTs9Ojw+Qj5CQ0A8Ojg5ODo6Ojc7Pz4/PDw7PDo5Pzw8PTg5PD9BPj09PUFAPTtBQkBCQz47QD9BQUlHSkF629bW1tbW1tbX19fX19fX19jY2NjY2NnZ2djY2dnOzs7Ozs7Ozs7OzdKpj63Rzs7Ozpu3tqSiwJOerNPOzs7Pz5yqnazWsp6jp9avn6Gp0s7Ozs7Ozs7Ozs7Pz8/Pz8/Pz9DQ0NHR0dHR0dHS0tLT09TU1NTU1dXV1dXV1dXV1dXV1dXV1dXV1dXW1tbW1tXV1dbW1tbW1tXV1dXV1dXU1dXV1dXV1dXW1tbW1tbW1tbW1tfX19fX19jX19fY2NjY2NjY2djY2dnZ2dnZ2dnZ2dnZ2dnZ2djY2NjY2NjY2dnY2NjZ2NjY19fX19fX19bW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tXV1dXV1dXV18h/b1pTYWVeXVxPSkQ9QD8+Ozc6Pjk/RD9BOTg3ODk7Ozw4OT89PTw9PD47OkE7OTs5OzxDQDw7PT5AQT49QkQ/QkM9PT8+Pz5ISUg/ddrW1tbX19fX19fX19fX2NjY2NjZ2dnZ2dnZ2dnZzs7Ozs7Ozs7Ozs/Inrym0tDQzsqgl36Cw6abr6fUz8/P0MuUiJqdyJ6ak53AnpiVnMjQzs7Ozs7Ozs7Oz8/Pz8/Pz8/Q0NDR0dHR0dLS0tPT09TU1dXV1dXV1dXV1dXV1dXV1dXV1dXV1tbW1tbW1tbV1dXV1dXW1tbV1dXV1dXV1dXV1dXW1tbW1tbW1tbW1tbW1tfX19fX19jY2NjY2NjY2NjY2NjZ2dnZ2dna2dnZ2dnZ2dnZ2dnZ2djY2NjY2NnZ2dnZ2dnY2NjY2NfX19fX19fX19bW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1dbV1dXV1dfNiHNdWGloXl9gT0lGOkFAPj88PDo2P0JAQjo2NDc6Ozo8Ojk+PD49PTs/PTxBPjw8Ojw8PTw6PEA9QEI+PkFCPUNDPT0+Oz9BRUtIQHDZ1tbX19fX19fX19fY2NjY2NjZ2dnZ2dnZ2dnZ2c/Pz8/Pz87Ozs7SrKWnqdXAvNLHnY+ey9PJipmq1M/Pz8/RvciZm6yaoZy0mJyinbCy08/Pz8/Pz8/Pz8/Pz8/Pz8/Q0NDQ0dHS0tLS09PT1NTU1dXV1dXV1dbW1tbW1dbW1tbW1tbV1tbW1tbW1tbW1dXV1dXV1dXW1dXV1dXV1dXV1dXW1tbW1tbW1tfX19fX19fX19fX19jY2NjY2NjY2NjY2NnZ2dnZ2dnZ2tnZ2dnZ2dnZ2dnZ2dnZ2dnY2dnZ2dnZ2dnZ2dnY2NjY19fX19fX19fX19bW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbV1dXW0JB1W1tqaWFeXVNOSTxDQEE+QD46OEZBP0M6NzQ5Ojo5Ozs4Oz0/Pj49QT08P0A9Pjw8PDw8Oj1AQD8/PT5CQD9AQkA8QD0+QUVLRz9r19fX19fX19fX2NjY2NjY2NjZ2dnZ2dnZ2dnZ2tnPz8/Pz8/Pz8/QzJ2Nl6zQmpfKxZ6ynpbN1q2ZqtTPz8/Pz9KXlKKtmpatuYaelq+zqtXQ0M/Pz8/Pz8/Pz8/Pz8/P0NDQ0dHS0tLT09PT1NTU1NXV1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbV1dXV1dXV1dXV1dXV1dXV1dXW1tbW1tbW19fX19fX19fX19fY19fY2NjY2NjY2NjY2NjZ2dnZ2dnZ2drZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2djY2NjY2NfX19fX19fW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1dXV1tKUcl5ea2tqZV1PTEc/RENDQDo9OzxCPD49OTY0Ojk5Ojo5Nzs/QDs8PUA8PEE+PD07PTw/PDo8Q0A+PTs9QD5CPkBBPkA9QD9GSUQ/ZtXX19fX19fY2NjY2NjY2NnZ2dna2tra2tra2traz8/Pz8/Pz8/P07GigJuvyaCjv8qcpYynrdiqmarUz8/Pz9Ozm8SdrZiBoJZ4m4Sdk6TV0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NHR0tLT09PT1NTU1NXV1dbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1dXV1dXV1dbW1tXW1tbW1tbV1tbW1tbX19fX19fX19fX19fY2NjY2NjY2NjY2NjY2NjY2dnZ2dnZ2dna2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2djZ2djY2NjY2NfX19fX19bW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbSk3BgXnBoZmVaUUhHQkVDQEA3Ojo8Pjo8OTc2NTk6Njo8Ozc8QEA8Ojo9Ojw/Pj08OUA8PDo6OT9APj08PUBBQz9APz5BOz9ARkpCP2LS2NfX2NjY2NjY2NjY2dnZ2dnZ2tra29vb29vb28/Pz8/Pz8/P0M6fkGyclteqo9PSrqa1mJ/Vqpmq1M/Q0NDRzo2Qo5ydqIiceZ+phZmk1dHR0NDQ0dHQ0NDQ0NDQ0NDQ0NHR0tLT09PT1NTU1dXV1dbW1tbX19bW1tbW1tbW1tbX1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tfW1tfX19jY2NfX19fX2NjY2NjY2NjY2NnZ2dnZ2dnZ2dnZ2dna2tnZ2dnZ2dnZ2dnZ2dnZ2dnZ2djY2dnZ2dnZ2dnZ2dnZ2NjY2NjY2NjX19fX1tbW1tbW1tbW1tbW1tbX19fX19fW1tbW1tbX0pNuYFxxZGdkWlVKQENGQ0FCODs/PD07PDw4NTU4OTY4Ozo5PDo+Pzw9PTk8Pz49Ojo+OTw6Ojg+Pzw9PTw+QEFDQT48PDpCRERKRkJd0NnX19jY2NjY2NjY2dnZ2dna2trb29vb29vb29vPz8/Pz8/Pz9G9n8O31pfA09HQ0srSzZeb1KqZq9XRz9DQ0cvaqJyRua+mnIq9raaYr9bR0dHR0dHR0dHR0NDR0dHR0dHR0tLT09PU1NTV1dXV1tbW1tfX19fX19bW1tbW1tfX19fW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW19fX19fY2NjY2NjY2NjY2NjY2djZ2dnZ2dnZ2dnZ2dnZ2drZ2tnZ2dnZ2dnZ2dnZ2dnZ2djY2NjY2NjZ2dnZ2dnZ2dnZ2dnY2NjY2NjY2NfX19fX19fX19fW1tfX1tbX19fX19fX19fX19bW19GRbF1cb2doYl1PRkBISUdFQDw8Pj48PT48NzU2Ojk2OTs6Ojs4QD86PDw5PD49Ozs6Pzk/Ojs5PT49Pjw7PTxAQ0I/Pz47Q0ZGR0hEWc3a2NjY2NjZ2dnZ2dnZ2dna2trb29vb29vb29vb0NDQz8/Pz8/Pz5V+e6WS1KKa08ySl6ObodirmavV0pem1cmOpZqgpaaXl52lp5aYm7vV0dHR0dHR0dHR0dHR0dHR0tLS0tLS09PU1NTV1dXV1tbW19fX19fX19fX19fX19fX19fX1tbW1tbW1tbW1tbX19bW1tbW1tbW1tbW1tbW1tbW1tbW1tfX19fY2NjY2NjY2NjY2NjY2dnZ2dnZ2dnZ2dnZ2dnZ2tra2tra2tnZ2dnZ2dnZ2dnZ2djY2NjY2NjZ2dnZ2tnZ2dnZ2dnZ2djY2NjY2NjY2NjX19fX19fX19fX19fX19fX19fX19fX19fX1tfPjGRWXnBrXGBgTkVITUlJT0M+OkI9PUBCOzU1Nzw6Nzo7Ojo7OT09OTo6OT0+Pz07OT47PDo8Ozk+PD47PD0+QENCPz5BPEFDR0ZGRVXJ29jY2NnZ2dnZ2dnZ2dra2tvb29vb29zc3Nzc3NDQ0NDQ0M/Pz9DR1aeZrcmjqL7KnbGdo7XZqZup2Lirocq7oaannM2gq6Sb0J+rpJzR09LS0tLS0tLS0tLR0dHS0tLT0tPT09PU1NTV1dbW1tbX19fX19fX19fX19fX19fX19fX19bW1tbW1tfX19fX19fW1tbW1tbW1tbX19fW1tbW1tbW1tbX19fX2NjY2NjY2NnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dra2tra2tra2trZ2dnZ2dnZ2dnZ2djY2NjY2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnY2dnY2NjY2NjX19fX19fX19fX19fX19fY2NfX19fX19fYzYZdV2JvZE9dVEtIRlNRS0xAPj1EPD9DRj01NTc7OTY6Ozo8PTo7Pzo6OTg6PT0/Pjs/Oz49Ojs5Pjs9PD0+QURCQD8+PzxAQUVHRURSxdvY2dnZ2dnZ2dnZ2tra2tvb29vb3Nzc3Nzc3NzQ0NDQ0NDQ0NDQ0NO5gL3Tm5bP1LWLkZ/T1LyBu9TOlKDT056QjbbXxZCNt9fCj4281dLS0tLS0tLS0tLS0tLS0tLT09PT09PU1NXV1dbW1tfX19fX19fY2NjY19fX19fX19fX19fX19fW1tbX19fX19fW1tbW1tbW1tbW19fX1tbW1tbW1tbX19fX19jY2NjY2NnZ2dnZ2dnZ2dnZ2tnZ2tra2tra2tra29ra2tra2tnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2NjY2NjX19fX19fX19fY2NjY2NjY2NjY2NfX2ct+WlVqaltMX01KTEpVTEZCPD0/R0ZHS0g9NjU3Ojk3OTo7Ojw9OT45OTo4Oz0+PkE+PTk8PDo9Pj46PTk5Oj9FQUA+PT8/QkBHRURFUMHc2dnZ2dnZ2dna2trb29vb29vb3Nzc3Nzc3dzc0NDQ0NDQ0NDQ0NDQ0cHR0crI0tDUxLjS0tHSwtLQ08fM0tHSusTV0dTHw9XR1cXE1dLS0tLS09PT09PT09LS0tPT09PU1NTU1NXV1dbW1tfX19fX19fX2NjY2NjX19fX2NfX19fX19fX19fX19fX19fX1tbW1tbW1tbW1tfX1tbW1tbW1tbW19fX19fY2NjY2NjY2dnZ2dnZ2dnZ2dra2tra2tra2tra29va2tra2tra2dnZ2dna2tnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dna2tnZ2dnZ2dnZ2djY2NjX19fX19fY2NjY2NjY2NjY2NjY19rHd1xSZ2laTlpOTFBRV0VKPz89P0FFTExBPjc3NTs4ODk5Ojs8Pjw+ODo6OTs+P0A9Pj46NTo6Oz0/Ojs5Ojw+QkJAPz8/P0FCR0RDRE683dnZ2dnZ2dna2tvb29vb29vb3Nzc3Nzc3d3d3dDR0dDQ0NDQ0NDQ0NDS0NDR0dDQ0dPU0dHR0dPR0dHS0tHR0tXU0tLS1NXT09PU1NLS0tPT09PT09PT09PT09PT09PU1NTU1dXV1dbW1tfX19fX2NjY2NjY2NjY2NfX19jY19fX19fX19fX19fX19fX19fX1tbW1tbW1tbX19bW1tbW1tbW1tfX19fX2NjY2NjY2NnZ2dna2tra2tra2tra2tra2tra2tvb2tra2tra2trZ2tra2tra2tra2tra2tnZ2dnZ2dnZ2dnZ2trZ2tra29ra2trZ2dnZ2dnZ2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjbwXNYVWlrU0xSTlBSWVRGSTw+Qz9BQkVKPj43ODY5Njc4OTk7Oz0/QDw9ODk7Ozs/Pjw8OTU6PT47OTk7PD8/P0JCQT1BPUBBQkZCQkJLtd7Z2dra2tra2tvb29vb29vc3Nzc3Nzd3d3d3d3R0dHR0dHR0dHR0dDQ0NDQ0NDQ0dHR0dHR0dHR0dHR0dHS0tLS0tLS0tPT09PT09PT09PT09PT09TU1NPT1NTU1NTU1NXV1dXV1dXW1tbX19fX2NjY2NjY2NjY2NjY19fY2NjX19fX19fX19fX19fX19fX19fX19fW1tbX19fX1tbW1tbW1tbX19fX19jY2NjY2NnZ2dna2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tnZ2dnZ2dnZ2NjY2NjY2NnZ2dnZ2dnZ2NjY2NjY3LxvVFRsbExLUkpUUlVLRkQ6PkdEREFERjw/ODk6OTY5OTo3PD07PkA9PTc5Ojs5Pjs5OTY2Oj1AQT47PDk6Pj9DQT4/Qj0+QkNFQkFCSrDe2dra2tvb29vb29vb29vc3Nzc3Nzd3d3d3d3d0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0tLS0tLS0tLS0tLS0tLS0tPT09PT09PT09PT09PT1NTU1NTU1NTU1NTU1dXV1dXV1tbW1tbW19fX19jY2NjY2NjY2NjY2NjY2NjY2NjY19fX19fX19fX19fX19fX19fX19fX19fX19fW1tbW1tfW19fX19jY2NjY2NjZ2dnZ2dra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2trZ2dnZ2dnZ2djZ2dnZ2dnZ2dnZ2dnZ2dnY2Ny2a1NbcGtLVVdSXFFXSEQ+PEJKRT1ISj89PDc4ODo1OTg5Njs+PD1APDw1OTk8Oj87OTk0ODw9PUFBPD47Ojw+QD89PkE9PUNGR0I/Qkmq39ra29vb29vb29vb3Nzc3Nzc3N3d3d3d3d3d3dHR0dHR0dHR0dHR0dHR0dHR0dHS0M/U0M7P0tLT0tLS0tLS0tLS0tPT09TU1NTU1NTU1NTU1NTU1NTU1NTU1NTV1dXV1dXV1dbW1tbW19fX19fY2NjY2NjY2NjY2NjY2NjY2NjY2NjX19fX19fX19jY2NfX19fX19fX19fX19fX19fX19fX19fX19jY2NjY2NjY2dnZ2dra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tvb29va2tra2tra2tra2tra2tra2tnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dndsGRTYXJfT1pUV19RUkdCPUVJTEFBTEQ/Pzs5ODg5Mzg2ODY5Pj0+Pz06Njo7Pjs9PTo5Njg6PTtAQDxAPz0/P0I+PD48PEJFSElCPkNJpODa29vb29vb3Nzc3Nzc3Nzc3N3d3d3d3d3d3t7S0tLS0tLS0tLS0dHR0dHR0dPT0bm7zLqbnLrQyNPT0tLS09PT09PT09PU1NTU1NTU1NTU1NTU1dXV1dXV1dXV1dXV1dbW1tbW1tbX19fX19fY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjX19fX19fX19fX19fX19fX19fX19jY2NjY2NjY2NjZ2dra2tra2tra2tra2tra2tra2tra2tra29va2tra29va2tvb2tra2tra2tra2tra2trb29vb29va2tra2tra2tra2tra2tra2tra2tnZ2dnZ2trZ2dnZ2dnZ2dnZ2dnZ3qpfVWBuW1VZUVpeT0xHQ0ZNSUZEREo7QUE7PDg4NjQ4Njk4Nzw/QT89Ojc8Pz48Pz87OjY4OD09QEE9QD5BQD1AOjs6Pj1BRUdKQkBDR57h29vb29vc3Nzc3Nzc3Nzc3d3d3d3d3d7e3t7e0tLS0tLS0tLS0tLS0tLS0tO+wMqaoKKViJGeqpOpz9TT09PT09PT09PU1NTU1NTU1NTU1NTV1dXV1dXV1dXV1dXV1tbW1tbW1tbX19fX19fY2NjY2NnZ2dnZ2dnZ2dnZ2djY2djY2NjY2NjY2NjY2NjY2NjY2NjX19fX19fX19fX19fX19fX19fY2NjY2NjY2NjZ2dna2tra2tra2tra2tra2tra2tra29vb29vb29vb29vb29vb29vb29ra2tra2tra2tra2tvb29vb29va29vb29vb29va2tra2tra2tra2tra2tra2trZ2dnZ2dnZ2dnZ2d6iXFVeblheXU5aUFROQ0NMSUlJRkpDPEJBPDs4NzY3OTc3OTk9P0E/PDo5QD88PkI/Ojg3NzY9Pz9APUBBPz88PTs7OD48P0VJSEE/Q0aX4dvb29zc3Nzc3Nzc3N3d3d3d3d3d3t7e3t7e3tPT09PT0tLS0tLS0tLS0tTIlZyum5m1iX2TjIKBhMTV09PT09PT09PU1NTU1dXV1dXV1dXV1dXV1dXV1dXV1tbW1tbW1tbW1tfX19fX19fX2NjY2NjY2dnZ2dnZ2dnZ2dnZ2dnZ2NjY2NjY2NjY2NjY2NjY2NjY2NfX19fX19fX19fX19fX19fX2NjY2NjY2NjY2dnZ2dnZ2dna2tra2tra2tra2tra29vb29vb29vb29vb29vb29vb29vb2tra2tra2tra2tvb29vb29vb2tvb29vb29vb2tra2tra2tra2tra2tra2tra2tra2tra2tnZ2dndmlpYYW5ZYVdPV01QRUJETElNS0ZJRT5CRDk4ODY3OTc1Njk4PT1BPjo4OT4+PD9APzw1Njc2PD4/PjtAQEA/Pj4/Pjs/PkFCRkdCQENIkeLb29zc3Nzc3d3d3d3d3d3d3d7e3t7e3t7f39/U09PT09PT09PT09LS0tLTz6h+kayPko6MhoCIiYSQo8rU09PT09PU1NTU1dXV1dXV1dXV1dXV1dbW1tbW1tbW1tbW1tbW19fX19fX19fX2NjY2NjY2dnZ2dnZ2dnZ2dnZ2dnZ2dnY2NjY2NjY19jY2NjY2NjY2NjY2NjX19fX19fX19fX19fY2NjY2NjY2NjY2NnZ2dnZ2dna2tra2tra2tra2tra29vb29vb29vb29vb29vb29vb29vb29ra2tra2tra2tvb29vb29vb29vb29vb29vb29va2tra2tra2tra2tra29vb29ra2tra2tra2tna3JJaWWNuWlpSVV5QTDxAR05IUklIRT47SEY4OTc1Nzg3NTg5ODs+Pj07ODlBPj1AP0E+NzU5Njs+QUI/P0BAQUI/Pj8+QUBEQUZIQj9FSozi3Nzc3Nzc3d3d3d3d3d3e3t7e3t7f39/f39/f1NTU09PT09PT09PT09PWtaWaiIuQhYCFi4iBg4qLf4bC1tTU1NTU1NTV1dXV1dXV1dXV1dXW1tbW1tbW1tbX19fX19fX19fX2NjY2NjY2NjY2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2djY2NjY2NjY2NjY2NjY2NjY2NjY2NjX19fX19fX19fY2NjY2NjY2NjY2dnZ2dna2dra2tra2tra2tra2tra2tvb29vb29vb29vb29vb29vb29vb29vb29ra2tra2trb29vb29vb29vb29vb29vb29vb29vb2tra2tra2tra29vb29vb29vb29vb2tra29uIWltnalxYTFpfVkg6TEhMSkpDRUVDQExINzo3Njc4ODU4Nzg5PDw7Ozk4QD89Pj8/PDY3PDQ3P0JCQUBAPz8/QT09P0A+QEBGRT09REuI4tzc3Nzd3d3d3d7e3t7e3t7e3t/f39/f39/f39TU1NTU1NPT09PT09PUxZKCg4WGfYGCfXx5foGCg36k29bU1NTU1NTV1dXV1dXV1tbV1tbW1tbW1tfX19fX19fX19fX19fX19jY2NjY2NjZ2dnZ2dnZ2dna2tnZ2dnZ2dnZ2dnY2NnY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjX19fX19fY2NjY2NjY2NjY2dnZ2dna2tra2tra2tra2tra29vb29vb29vb29vc3Nzc3Nvb29vb29vb29vb29vb2tra2tra29vb29zb29zb29vb29vb29vb29vb29vb29va2tvb29vb29vb29vb29vb29vb2tvZgFpebWhaU0ldW1hKRE1ISlNMR0ZBQD9KQjg7NjY5OTc1ODY4Ozo7Ojw5OD09O0A9Ozo2NTw3Oz1CQEFBPD49QEE9PEA/Pz5CREU+PERLg+Lc3d3d3d3d3t7e3t7e3t7f39/f39/f39/f39/V1dTU1NTU1NPT09PT2LKEkKh9g3l2hIh/e3d5gn5+i67A1dTU1NXV1dXV1tbW1tbW1tbW1tbW1tfX19fX19fY2NjY2NjY2NjY2NjY2NjZ2dnZ2dnZ2dna2trZ2dnZ2dnZ2dnY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2dnZ2dnZ2tra2tra2trb2tra2tvb29vb29vb29vc3Nzc3Nzc29vb29vb29vb29vb29va2trb29vb29zc3Nzc3Nvb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vc1nlcWmxmWFJPYFFSQUhHSkZYTEZAQENDSz87Ozc4ODc2NTc2ODo5PDw6PTs/PTs9Pjw7ODg8OT0/QkFCQzw8P0FCPj1BQkNCREVDQDtDTH3h3d3d3d3e3t7e3t7e39/f39/f39/f39/g4ODg1dXV1NXU1NTU1NPU0ruen3WKeXuIgICChYGDcnOAhYOMrNfV1NXV1dXW1tbW1tbW1tbW1tbW19fX19fX2NjY2NjY2NjY2NjZ2dnZ2dnZ2dnY2NnZ2dna2tra2trZ2dnZ2dnZ2djY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2dnZ2dna2tra2tra29vb29ra2trb3Nzc3Nzc29zc3Nzc3Nzc3Nzb29vb29vb29vb29rb29vb29vb29zc3Nzc3Nzc3Nvb29zc3Nzc3Nvb29vb29vb29vb29vc3Nzc3Nzc3Nvb29vb3dByXV9wZVdLUGNPS0JHQ0pIS0ZBPEE9SFBBOjo3Nzg3Njc4Nzw6OD09PD47QD88Pz07Ojs5Ojk8QEJAQkNAPUFAPz1AQkNDQUBAP0A7RU144N3d3d7e3t/f39/f39/f39/f3+Dg4ODg4ODg4NXV1dXV1dXV1NXU18h4i4V8goh6g4SBfoKCc2l0hYuGkJ3U1tXU1dbW1tbW1tbW1tbW19fX19fX19jY2NjY2NjY2NjZ2dnZ2dnZ2dnZ2dnZ2dnZ2dra2tra2tra2dnZ2dnZ2dnY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2dnZ2dna2tra2tra2tra2tvb2tvb3Nzc3Nzc3Nvc3Nzc3Nzc3Nzc29zb29vb29vb29vb29vb29vb29vc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc29vb297KalxjcWVST1heSz9HTElPS0VAPkFCP0lPPjk6NzY7NzY6Ozc7Ojg6PDw+Oz09Oz48Ojs4OTo4OUFCQkFAQDtAQj06PkFCQz8+PT4/PUZOdN/e3t7e3t7f39/f39/f4ODg4ODg4ODg4ODg4OHV1dXV1dXV1dXV1s6dhpl+f5OTin+CgXx9gnNxm4mAgoOJwNnat7TQ19bW1tbX19fX19fX19fX2NjY2NjY2NjY2NjZ2dnZ2dnZ2dnZ2tnZ2dnZ2dra2tra2tra2trZ2dnZ2dnZ2dnZ2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NnZ2dna2tra2tra2tra2tra29vb3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nvb29vb29vb29vb29vb29vc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3NvfwGNaW21gVlBTU0pETEhNSEk8PkFEQ0ZORDw8OTc5OjY4Ozk3PDk4OTw9OzlAPjpBPzw3NTc7ODpAQUVBPz45PUI/Oz1CQkI6Pj07PT5GTnHe3t7e3t/f39/f39/g4ODg4ODg4ODg4OHh4eHh1tbW1tbW1tbV1tjLioCHhYOXjHh7e3lvfYF1a3ebdHZ7eInHxpiMrdjZ19fX19fX19fY2NjY2NjY2NjY2NjY2NjY2dnZ2drZ2dna2tra2tra2tra2tra2tra2tra2dnZ2dnZ2dnZ2dnZ2dnZ2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NnZ2dnZ2dnZ2dna2tra2tra2tra2tra29vb3Nzc3dzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nvb29vb29zb29vb3Nzc3Nzc3Nzd3dzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3d3d3d3d3Nzc3Nzc4LdjV1lrYlJNVVFMSktGS0ZDQD5CQT9FTT4+PTg5OTo3OTo3NT03Nzo+PDs7Qjw5Pz05NjY4PTk6QEJGQD49PEBCREA9QD9DO0A9PD4/Rk9t3N/e3t/f3+Dg4ODg4ODg4ODg4OHh4eHh4eHh4dbW1tbW1tbW1tfVrYZ6d32rn3l4entzdH+Dfm9xe3l6c3t2k4qFgImkzdnY19fX2NjY2NjY2NjY2NjY2NjY2NjY2NnZ2dna2tna2tra2tra2tra2tra2tra2tra2tnZ2dnZ2dnZ2dnZ2dnZ2dnZ2djY2NjY2NjY2NjY2NjY2NjY2NjY2dnZ2dnZ2dnZ2dra2tra2tra2tra29vb29vc3Nzc3N3d3d3c3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc29vb29vc3Nzb3Nzc3Nzc3N3d3d3d3d3d3dzc3Nzc3Nzd3d3c3Nzc3Nzc3N3d3d3d3d3d3d3d3dzc3OGtYVtebGJSTVZMTUdLS0RGQkI7QT08RUxDQT44Ojk6Nzc5NjY6NTs+QDs9Oz89PD89Ojk5Ojw5PEVDRkA/PkBDQkQ9OT0/QT1CPz1APkdPadvf3t/f3+Dg4ODg4ODh4eHh4eHh4eHh4eHi4uLW1tbW1tbW1tfQmH+Qh4N9eoN2e3Vzenl6kKqmd3JyfoeHh4CAfoKEhJHJzNnX19jY2NjY2NjY2NjY2NjY2NjY2NnZ2dnZ2tra2tra2tra2tra29va2tra2tra2tra2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2djZ2dnZ2dnZ2djY2NnZ2dnZ2dnZ2dnZ2tra2tra2tra2tra29vb29vb3Nzc3N3d3d3d3d3d3d3d3d3d3d3c3Nzc3Nzc3Nzb29vb3Nzc3Nzc3Nzc3Nzd3d3d3d3d3d3d3dzc3N3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3NzhpV9UYm1iUE9TSUhHRkpJSUJBPkJCPEVFREA+ODo4Ozc3Ojc4ODY+Pz07PDk9PDo+PTs6Njc7NjpEQUY+Pz8/PkNBPzs9PT47REM/PjxIT2fZ4N/f3+Dg4ODg4eHh4eHh4eHh4eLi4uLi4uLi1tbW1tbW19jYyH52doN+fnR2eIaCenl1d5yhu6GEgoCAfoeKinx/gYaMnKjO2NjY2NjY2NjY2djY2NjZ2djY2NjY2dnZ2dra2tra2trb29rb29rb2tra2tra2tra2tnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dna2tra2tra2tra2tra2trb29vb29zc3Nzc3N3d3d3d3d3d3d3d3d3d3d3d3dzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3e3t7e3t7e3d3d3d3c35pbT2drXFBRUElDT0pLR0xHSkJAP0FHREBBPDg8ODg1ODk3Njc3QEA/Ozw5Pj04PTw8Ojc4PTk/RENGPkE/QkBDPzw6Pj0/PkVEPz07S1Fj1+Hf4ODg4ODh4eHh4eHh4uLi4uLi4uLi4uLj49bW1tbW19XB3LRueHJze3B6eXaFiIR7eH2AgZiljH98fnuRhZaLhoGDgY6Rvd3Z2NjY2NjZ2dnZ2dnZ2dnZ2dnY2dnZ2dna2tra2trb29va2tva2tra2trb29ra2tra2tnZ2dnZ2dnZ2dnZ2dna2trZ2dnZ2dra2tra2tnZ2dnZ2dna2tra2tra2tra2tra2tra2trb29vc3Nzc3Nzc3N3d3d3d3d3d3d3d3d3d3d3d3d3d3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3e3t7e3t7e3t7e3t7e3t7e3t3d3d6NWFdobllQUUtISlNJTUhNSUtBQz9DRkJBRDo6PDg2NDg4NzY2Nj8+Pjo8OTw7Oj09PDw4Ozw8RERERT4/PkI+Qj84PT8/Q0NCQEE+O0xUY9Xh3+Dg4OHh4eHh4eLi4uLi4uLi4uLi4uPj4+PW1tbW1teslLZ6eHJvd5V7dHuLgHh1bn6Fg3t/hYhyfH2bnI6JioJ+g32Hk5rH1NjY2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dna2tra2trb29vb29vb29vb2tra2tra2tra2tra2tnZ2dnZ2dnZ2dna2tra2tra2tra2tra2tra2tra2tra2tra2trb2tra2tra2tra2trb29vc3Nzc3Nzc3Nzd3d3d3d3d3d3d3d3d3d3d3d3d3d3c3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3N3d3d3d3d3d3d3d3d3d3d3d3d3e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3d7Zf1lgaGxcUUtHR09LTk5PTURGQkg/Q0hEREA6Ozs4NzU3Nzc4NThAPkA7PDk8Ozw+Ojk7OTk7OUZERUI8QD4/PEBDOz5AP0A/Qj8+OjtKVWPV4eDg4eHh4eHi4uLi4uLi4uLi4uPj4+Pj4+Pj1tbX19vKhYR3cXJubniVhHt4hH95dnB4c3eLkY6CdnN9ioaId3d1d4ODfIiIk8Pb2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dra2trb2tvb29vb29vb29vb29rb2tra2tra2tra2tra2tnZ2dnZ2dna2tra2tra2tra2trb2tra2tra2tra2tra2trb29vb29ra2trb29vb29vb3Nzc3Nzc3Nzd3d3d3d3d3d3d3d3d3d3d3d7e3d3d3d3c3Nzc3Nzc3Nzc3Nzc3Nzc3d3d3d3d3d3d3d3d3d3d3d3d3d7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7f0nVZaGlqVk5KSE1OR01EUElGSD9FPUZMREM+Ozs8OTc3OTY2OTU4Pj4/PTs8QDs9PDo3Ozc5OThHREVCPUE9Qj8+QDw/QUE/QEJAPjs8S1Ri1OLg4eHh4eLi4uLi4uLi4+Pj4+Pj4+Pj4+Pj49fX19fEknuJf29sbnV2foSBg4qGfnVybWVtiIaKjoR7c4OHint4e4OPj4GEioqxztrZ2dnZ2dnZ2dna2tra2tra2tra2trb29vb29zc3Nzb29vb29vb29va2tra2tra2tra2tra2tra2tra2tra2tra2tra2tvb29va2tra2tra2tvb2tvb29vb29vb29vb29vb29vb29zc3Nzc3Nzc3d3d3d3d3d3d3d3d3d3d3t7e3t3d3d3d3d3d3d3d3dzc3Nzc3Nzc3d3d3d3d3d3e3t7e3t7e3t7e3t7e3t7e3t7e3t7f39/f39/f39/f39/f3t7e4clsW2pqalNOR0hOT0VIRk1JSUA7RD5ISUA9PDo6Ojg2ODo3Nzk0OD08PT07ODw8PDw4Njc4OTo6RUJFQT9APEI/Q0M+PkNEQUBAP0A8PUtRYdPj4OHh4uLi4uLi4uPj4+Pj4+Pj4+Pj4+Pj5OTX19fZqXaFfnx3bHB3eXh8jH2KhYB3anN0d3p9bot7fnl6foR/gIGDfnh8foeGlrbT2tnZ2dra2tra2tra2tra2tra2tvb29vb3Nzc3Nzc3Nvb29vb29vb29ra2tra2tra2tra2tra2tra2tra2tra29ra29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb3Nzc3Nzc3Nzc3d3d3d3d3d3d3d3d3d3d3d7e3t7d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3t7e3t7e3t7e3t7e3t7e3t7e3t7e39/f39/f39/f39/f39/f39/e3uO9amFpa2lRTkZNTEtKWE1OR0FAQE9BQz9AOzw4OTk5Njg2NjY4NDs+PD07OTY6Ojk6OTU4OTg5OkJERj8+Pj5AQEBCPzxBQD88Pj9BOT5KT17S4+Hh4eLi4uLi4+Pj4+Pj4+Pj4+Pj4+Tk5OTk19fX2sqKhIB5c29tcXN1d4CUeHaAfHWHhXd1cnWgmXp7d3Z5doR0bWxue3iAmouTu9za2tra2tra2trb29vb29vb29vb29zc3Nzc3Nzc3Nzc3Nzc29vb29vb2tra2tra2tra2tra2tra2tra2tra29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vc3Nzc3Nzc3Nzc3d3d3d3d3d3d3d3d3d3d3d3e3t7e3t3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3t7e3t7e3t7e3t7e3t7e3t7e3t/f39/f39/f39/f39/f39/f39/f397js2lpbmloUFBPTExPUk9LU0Y/RURERD48PDg7ODc5OTU2ODY2NzM6Pjs+PTc6Pjk5OTk2Ojo4NzxDRUc/Pzs/PkA9PkE9Oz0+OUFAQDhBTlFc0OTh4eLi4uLj4+Pj4+Pj4+Pj4+Pk5OTk5OTk5NjY2NjauY6AenZ1bmpveHCBfWt0cnZ3hIV5h4d5lY55eXp1d3pza298gHx2fYh8gLLe2tra2tvb29vb29vb29vc3Nzc3Nzc3Nzc3dzc3Nzc3Nzc3Nzb29vb29rb29vb29ra2tra2tra2tra29va29vb29vb29vb29zc3Nzb29vb29vb29vb29vc3Nvb3Nzc3Nzc3Nzc3Nzc3Nzc3d3d3d3d3t7e3t7e3d7e3t3d3t7e3t7e3t7d3d3d3d3d3d3d3d3d3d3d3d3d3t7e3t7e3t7e3t7f39/f39/f39/f39/f39/f39/f4ODg4ODg4N/f39/f4qpqa2hrZFNQT0ZQVFJOSFJLPkREQ0I7Ozk6Ojg2Nzg1NjY4ODg0Oz88Pzw5PDw3Ozo6Nzo6Nzo9Q0JDPUE+Pzw5PT5BQDs8PDtFQD47Q05TXNDk4eLi4uLj4+Pj4+Pj4+Pj5OTk5OTk5OTk5OTY2NjZ1p5vdntveHh2cG50d3BwdHBzb36Jc3qGhY2EenNtcoB6hn1vg5OBdnx9g4a13drb29vc29vc3Nzc3Nzc3Nzc3Nzc3Nzc3d3d3Nzc3Nzc3Nzc3Nzb29vb29vb29vb29ra2tra2tvb29vb29vb3Nzc3Nzc3Nzc3Nzc3Nzc3Nvb29vb29vc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzd3d3d3d3d3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3d3d3d3d3d7e3t7e3t7e3t7e3t7f39/f39/f39/f39/f39/f39/g4ODg4ODg4ODg4ODg4N/f3+KgbWhma2ZVVlJHUFFOS0xMRUJIRUc9OD08Ojo3Nzg2Nzc2NTY3NDg+PD09Ojg6OD46Ozc4Nzc6Oj5DRDtDQj49OD1AQUM/Pjw+RTw+PUJNUF/S4+Hi4uLj4+Pj4+Pj4+Pk5OTk5OTk5OTk5OTk2NjY3MB2doCCfnp4eHBsdXlya399bHNvdGdoaYB/aWl4c2d+iYl4cIKGe3d9foWKvd3b3Nzc3Nzc3Nzc3Nzc3Nzc3d3c3Nzc3N3d3dzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nvb29vb29vb29vb3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzd3d3d3d3d3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7f39/f39/f39/f39/f39/f4ODg4ODg4ODg4ODg4ODg4ODg4ODflGttZm5mU1NJUFlUTEhGTkZGRUJGPTs+PDs5Nzc4NTc5NjQ1NzU4PDs9Pjo6OztAOTs7ODc6OTlAQkE8QUE/Pzk/QEJFQ0FAQEM7Oz1ES01g1uTi4uLi4+Pj4+Pj4+Pk5OTk5OTk5OTk5OTk5NnZ2tmYc3uqhJaCcnR1dn14aGx8d2h4d25rcHR5gIJ3dHyBhIJ9c3CAin94gn95g8je3Nzc3Nzc3Nzc3Nzc3d3d3d3d3d3d3d3d3N3d3dzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nvb29zc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3N3d3d3d3d3d3d3d3d3d3d3d3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e39/f39/f39/f4N/f39/f3+Dg4ODg4ODg4ODg4ODg4ODg4ODg4ODh24tubWdzY1lRTVVbV0hDSUZOS0dCRD8/Qjo7OjY2NzU2NzY0ODc2Ozw7Pj86PDk8Qjg3OTo6Ojk6QUFCQUJDQEE+PT9CQ0NEQUJGOTg9REpOYtjk4uLi4+Pj4+Pj5OTk5OTk5OTk5OTk5OTk5OXZ2drcqHGCtXiRfnNsem6EgXaCfWtoan+DeHZ8dX2FhXRmcHl9d316gIqFe318foC03tzc3Nzc3N3d3d3d3d3d3d3d3d3d3d3d3dzd3d3d3dzc3N3c3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzd3Nzd3d3d3d3d3Nzc3Nzc3Nzc3Nzc3N3d3d3d3d3d3d3d3d3d3d3d3d3d3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e397e3t7e39/f39/f39/f39/g4ODg4ODg4ODg4ODg4ODg4ODg4ODg4eDg4ODg4ODg4tiFb3FrdWFWT1VVXE9ETUY+SkdKRUQ8P0I6PDk4Njg0NTY3NDc2NDk7Ozw7OD47PEE4ODo9OD04Oj09QEBAP0FCP0A+QENCQ0FBRTc2O0RMTmPa5OLi4+Pj4+Pj5OTk5OTk5OTk5OTk5OTk5OXl29ra3Z5sbnNxhY1ybXBuf391hH5rcnZ2enN4gXhzb3VwbWt2fHmFiIB/f392coODsd/c3Nzc3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3Nzd3d3c3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3N3d3d3d3d3d3d3d3d3d3d3d3d3c3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e39/f39/f39/f39/f39/f39/f39/f39/f39/f4ODg4ODg4ODg4ODg4ODg4ODg4OHh4eDg4eHh4eHh4eHh4OLXhW1xb3ZeUldTWlpRSkhDQFFAQkQ8OT9BOjw5NzU3NDU2NjQ3NTY9PDo9PTk+OjxAODo6PDY7OTs+PUJCQjtBQkBDQEBEREM8PUA3OjxFS01l3OPi4uPj4+Pj5OTk5OTk5OTk5OTk5OXl5eXl5dPOxsB+cWxveHt2b3VuanNzbZKGeG50dG5vdIZ/b2twboJ0bXZyfY2DdnF/d3mKgabf3Nzc3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3dzc3d3d3dzc3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3t7e3t7e3t7e3t7e3t/f3t7e3t7f39/f39/f39/f39/f39/f39/f39/f39/f39/f4ODg4ODg4ODg4ODg4ODg4ODg4ODg4eHh4eHh4eHh4eHh4eHh4eHi1oZucG1xYFJZUFdfWUpMTElSP0Q9OTtCRjs6OTc0NTY1NzU0NjY2Pj07Pz45PTk7Pjg9Ozo0ODtAQENCQ0FCRkE/Q0BBQkREOz0+OTs8QkxNZODl4+Pk5OTj4+Tk5OTk5OTk5OTk5eXl5eXl5eW5t7Woc3JscHd6dHd4bXFydXd/hHRyc2xsa3F8bnBudGuBf3GAd32Eg355gHNygYqg2d3c3d3d3d3d3d7e3t3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3e3t7e3t7e3t7d3d3d3t7e3t7e3t7e3t7f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f4ODg4ODg4ODg4ODg4ODg4ODg4OHh4eHh4eHh4eHh4eHh4eHh4eHh49WHcWxqbF5YWlVXYFZWUE9QTD1BOjs8RkE4Ojg3MzY1Njk2NTg1Nz89Oz8+OT04Ozw5PTs7NTo9Q0JCPENDREREQUE/PkJDQzw9Pjg5PENLS2PN0dnh1sjY4+Tk5OTk5OTk5OTk5eXl5eXl5eXltbW2q3J5cm59f3Z1d2hqaGlwb3Zta2tnZWZxdG15gG5teXd2iHhxa2podXV5dHV/wd/c3d3d3d3d3d3e3t7e3d3d3d7d3d3d3d3d3d3d3t7e3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3e3t7e3t7e3t3d3d3d3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f4ODg39/g4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4OHh4eHh4eHh4eHh4eHh4eHi4uHh4ePVhnFwY2lhV1NZV19MUk9STUtAPjg5O0E+ODc5NjQ3Njc6NjY2NDk+Pzo8Pzo/OTo6Nzo9PDk5PEFBPTtBQ0VDRkA+Pj5BRUQ+QEE3OD5GSEpesrW4wbm1u8jg5eXl5OTl5OXl5+fn5+fm5ebm5ra2tbWOfX5weoR1cnZnYmNlbGtyb2ZpbHZtd4Z9hXlsbHd4a3ZwfH14c3V5fHd2h7ng3d3d3d3d3d7e3t7e3t7d3t7e3t7d3d3d3d3d3t7e3t7d3t7e3t7e3t3d3d3d3d3d3d7e3t7e3t7e3t7d3d3d3d3d3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4OHh4eHh4eHh4eLi4uLi4uLi4uLi4eHj1Yd1bl5uY1pUU1hXS1NLSk1SR0E4Ozs+PDk4NzU2NTY2OTY4NjY5Pzw6PT07Pzo7Ozk8PDs5Oj4+Pjs8PUFEQkNBQEBBP0JDPDw9Nzs+REVKXrG1tLW2t7e2y9rJ3uXl3eDi3tXU1tPU4OPg39+2treuh3t/bnmNenJ1bWNobGxtaXR4enF5enqIh4N6aWh9cWRvcXyGgX55e318e4an2t7d3d3d3d7e3t7e3t7e3t7e3t7e3d3d3d3d3t7e3t7e3t7e3t7e3t7e3t3e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7f39/e3t7e3t7f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4OHh4eHh4eHh4eLi4uLi4uLi4uLi4uHh49aGdmxhb19dV1lcWlJQSEpXTEVHPUA9Ozs9OTY0NjU1NTg2NzY3OD87OT09PDw5OTw6Pjw6OTg+Qjs7Pj5AREBDRUFAQD0/QDw9PTU5PEJHRl2xtbW2uLm5ubq9uMPT0r3BwcC6u7y6u8TMxb/Dt7e3hGl1gX1ndYd5Z3Vxa2t5eHB3fH15bWl3e3h3bml1j4FwbHl4d3d9gXuGgnmAoNze3d3d3t7e3t7e3t7e3t7e3t7e3t3d3d3d3d7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t/f39/e3t7e3t/f39/f39/f39/f39/f39/f39/f39/f39/f39/f4ODg4ODg39/f39/f39/f3+Dg4N/f4ODg4ODg4ODg4ODg4ODg4ODg4ODh4OHh4eHh4eHh4eHh4eHh4eHh4uLi4uLi4uLi4uLi4uLi4ePXhXJrZ3RhW1hYX15TVVVRVUpMRj9JRDs5PTY2NDc3NTc4Nzc3ODk8PDo+PDg8Oj0+OTs8OTs5P0E8PT9DP0FARUJCQTw9Q0A6Pjw1NDlER0dasbW1tre5ubm5ubm3ubm4uLm5urq6urm5urm6u7e3uX9ucHN6b3B/eXNuc3Vsc3Z4cXFwb2tvcX6Bc2mHhIF9dHOHdW11hYmBgHJ2hafd3d3d3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7f39/f3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f4ODg4ODg4ODg39/f3+Dg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4eDg4eHh4eHh4eHh4eHh4eHh4eHh4eHh4uLi4uLi4uLi4uLi4uLi4uHj14lxa2xyW1dXXWBUUVVUUFJPSkNATUE9Ozk2NTM0NjQ2ODc3Nzk6Pjs8Pjs5PDo8PDk8PTw7PT0+PUNEREBDQkE/QD48PkE8OD06NjY6QkpIWLG1tLa2uLm5uLi5uLe3uLi5urq5ubi4uLi6uru3uKx7cnhxf3ZzfnBsbXpyZ29sbW50cHt3d3Jyd3pvhpJ2f3x8enZ5fH9zfYdyda3T393d3d7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e39/f39/f39/f39/e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f4ODg4ODg4ODg4ODg4ODg4ODf3+Dg4ODg4ODg4ODg4ODg4ODg4eHh4eDg4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4uLi4uLi4uLi4uLi4uLi4uLi49eHb2pxalVWV2FbT1FSUE5XSURESUo/Ojk6NzUzNDk1NzY2Nzg4Ojw7PD46PDo6PTw5PDw9Oz09PDs9REdEQ0E8PDw8Pj5AOzg8ODE1OkFGRVautbW1tre4uLm4uLi4uLe4ubq5uLi3t7i4ubq7t7mqcnB4d3x7e4J3aG5xam9qY2lyf21zcn54dHFsanaAeX2AgH91doB1a4qLgHaR1d/d3d7e39/f3t/f3t7e3t7e3t7e3t7e3t7e3t7e39/f39/f39/f39/f4N/e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t/f39/f39/f39/f39/f39/f39/f39/f3+Dg4ODg4ODf4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHi4uLi4uLi4uLi4uLi4uLi4uLi4uPYhm1sdGVWUFxnWE1YU1JRWUVDS1BOOzk4ODc1NTM5NTY2NzY4Nzk+OT0+OTw5OTw7Njg5OTo8QEA9PkBGQEJCQDo+PEE9Pzs7OzYxNjxCR0RQqLa1tba2tre4t7i4uLi4uLm6ubi4t7e3t7e5ure2tIlyd3h9iXxwem99c2hqbGdnbHRscXd0cWx2c3Fxd3FyfHl4g3Z7d2mLkYp9kM7f3d7e3tvY2drZ297f39/e3+De39/f3Nvc3N3e3uDg3+Dg4ODf3t7e39jS397f397e3t/f3t7f3t/f3t7e3t7e3t7e3t7e3t/f39/f39/f39/f39/f39/f39/f4ODf4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODh4eHh4eHh4eHh4eHh4eHh4eLi4eLi4uLi4uLi4uLi4uLj4+Lj4+Li4uPj4+Pi4uLi4+Lk14NoZ3VkVlVkZVdKWllXW1Q9RU1LSD04NzU3NjQzOTQ0Nzc1Njc5PTo9Pjw9PDk7PDk5Oj45PD4/PkFBQ0FFRUQ+OzxBPjw5PDs3Mzc+REhFSqG2tbW1tbW2tre4uLi4t7e4uLi3tra2tra3uLm2traLfXpsbHp/cGx5dm5qaGdlcXp4b2lvb3B1c21zd4Fnb32CgYNyf3lqcHJ6f6ng393Zy8a/vL2/vsLN0tDW3tnc4NfQzcPCw8PH1dfT2dzX1NjX0MfExce9vM/Kz87Y3djO3N3c2t3T0dze39/e397e3t7e4N/f39/f39/f39/f39/f39/f4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4OHh4eLi4uLi4uLf4uPi4eLg4d7W29/Sw8rJx9Hb3OLk4eHg2dre1sbExcTN2trf5OHi4trX3st9aWZxYVleZWFNTFRLUlpMO0hNSEZBPTc2NjUzNDY2NDg3NjU2OTw7Pj46Pjk5PDk3OTs7Oj49PEBAQ0RCR0ZCQT08Q0A9OTw7Nzc3P0RGRkaZtrS1tbW2tra4uLi4uLi3uLi3s7W2t7a3t7i5tba3opdxb29waW50dnFmZWNrbmdvcm1mZ2tygWVvdnyAeGRzj39zaHFyaWVlbm+w39HFv7u5ubm5ubq6uru6vc3Gw8e/urq6uru7u8HCvcHFvby/vry7urq5ubq6ubm6w8XDucDDwby/ube/z8/U3tjc3t/g3tLa4N/f4ODg39/f39/f39/f3+Dg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODh4eDg4ODg4ODg4ODh4eHh4uLi4eDh4uLi4uHa2t3RwsPCu8XT1uDdydPDrrnAsaqrq6uwtLbJ0sXRxLG4v7Srq6usr7S0vMzE1c60tLureGxtbWBdYl9ZS1NVVFFQREBRTUhEPzo3ODU3MzE1NjQ5ODQ2Njo8Oz08ODw5Njo6ODg5NzU8PDw/QEFAQkRDQkE8PkI/Pz09PTc1OD5DRUNAj7a0tLW1t7i4uLi4uLm5uLe1sautr7Oxs7OztLS0tqaei2tue3ZxeXhnY2hfcXdha25vaG99b25ja2lseHdsa4Z+bHB6dm1scG95sca8uru7urm5ubq6urq6urq6urq6urq6urq7u7q7u7y7urq6ubq7u7q6urq6urq6ubi3t7i4t7e2tbW1tbi3u8e+w8XHzcS4wMnH0tzZ2d/e3uDf39/f4ODh4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODh3Nji4uLi4eHh4OHg3tfGxtHQztTe3tPO0t/SuLi8sq2trKysrrG+ua63rKipqamqq6urqqqqq6ysuKyqqqqrq6urra6urq6urryzrayrpHlub21fXl1dVE1SU1xUSkE/UElIPjg5NjgzNzMwNTczNzg1NzY2Ojw/PDg5Ozo6Ojg5OjY1OTs8Pj9EP0NFQkNCP0BAQT9APjw3ODc6QUVEP4W4tLS1tbe4uLm5uLi3t7SurKuqqq2urq6vsLGzs7WjcG5ucm1wg311aWFlaGZkY2Rxc21td25naW1tZXBzb29zcXN8h4F6dX11n7u6uru7urm5ubm6urq6urq6ubq6urq5uLm5ubm6urq6u7q5ubm5ubq6ubm6ubm4uLi3t7e4uLe3t7a2tbW2tra1tbW1tba1t7e3t7rBvrzGycrb3+Dg3tvd3d7h4tDW4uHg4ODg4ODg4ODg4ODg4OHg4OHi0768zNjd3OLg0dnbxL23sLCxsa+zu7uzsLS9s66urq2tra2sq6qqqqmpqKmpqampqqurqqqqqamoqampqampqaqqqqytrq6urq6urq6sraR4aWJxZmFZWlZRUk5cU0Y9QlJEQTc8OzY5NTY1NDU2NTg3NTY1Nzg7Pjw7OTk5Ojg3Nzk3Njg8Oz47RD8/Q0BBREE+P0M9Pjw+Ojo3Nz9DRj54srCztLW2t7i3trKurq2sq6uqqaqtraysrq+xs7S1t4xucnRqaIB5ZmpmZWxdaG5waGxxYmNmcoJ+dmhobGpueoaBhXx4cXF5gK+6ubq6urm5uLm5ubm5ubm5ubm5ubm4uLe3t7e3uLm5ubm5uLe3t7i5ubi4uLi3t7a2tre3t7e3tra2trW0tLW1tbW2trW1tre3t7e3t7e3tre4v8bP0MS+v8DE19e8ydra4OHg4ODh4eDg4ODh4eDb3t7Uzby3tre6wMDJxLfIvrKwsLCwr7Cvrq6ur7Cwr66urq6uraytrKurq6qpqampqampqampqKmpqKmpqampqKmpqKmpqqqrraytra2ur66trK2heWpjbWdiXFhRUFFLVEpCOklRP0E3PDk0OjU2NTQ1NTY4ODY4Njs6OTw9PTs6ODY2ODg6ODY3Pj09PT5BQUVCQkNBQUBBOj09Pz05Ojc9QUc8bKqmqKutsLGwrqupqKqrq6mpqamrrKytra2usLO0tbilgIdvaWdzdGZrcG1qZGxvcm5rbWNrcHyJhG5qbHx4Y3uKfnNqc25rcY+7ubm5ubm5ubi4ubm5ubm5ubq5uLi3t7e3t7e3t7i5ubi4uLe2tra3t7e3t7a2t7a2tra3tra2tbW1tba1tLS0tbW1tra2tra3t7e3t7i4uLe2t7a2uLm4uLe3uL6+uLq9vcfb4OHg2Nnd4eHg3dfKwcPCurm5uLe4uLi3tbS0tLKysbGxsLCvr6+vr6+vr6+vr66ura2srKyrq6yqqqmoqKmppqepqaehpaipqamoop+hoZyip6inqausrK2ur7Cwrq2unXdwbGphY2BZUU1RTFJGQzlNUEU+ODs3Mjc5Njc0NDM1ODg3OTc7OTo9PTw6Ojk3NDo5ODY1OD8/QEI9RENDQ0FDQEJBQDtAP0A/PDw6O0NIPWOopaWlpqioqKenp6ipqqmoqKipqqqsra6wsLCztLW1taWYdn5xZmt4cW9tZmVsaGNsZ2ZpaX11bWlvfXZ5hWZod294b3Fvcninu7m5ubm5ubm4uLm6ubm5ubm5ubi3t7W1tba2tre3t7e3t7a2tba2tre2tbW1tra3t7e2tbS0tLS0tLS1tLS0tLW1tba2tra2t7e3t7e3t7a2tre2tre3uLe2t7i4t7i4uLi4wMXTyry8w83PyMC9urm5ubq6ubi4uLi4t7W0tLSzs7KysrGwr6+vr66urq+vr6+uraysrKurrKysq6ehoJ6gn5udoaGdlpmkpKaon5mZmZmanZ+gn56fpKqtrq+ura2srJl1cGlrY2FeXVVOU0tSREQ4TktHQTo4NTI2OTY1NDczNzc3ODk3OTo7PT0+ODg4NzU6OTk1OD9AQEFEPkZBQkNAQkNCQT88QEJCQD0+OjpERj5cpqWmpqampqanqKenqKioqKenqaurrKytra2ttLS0tbekc311bnONf3JmanFjaW1jaGZobG51aV9jZ3VzdnpuZ3Bwcn56cYihu7m5ubm6urq6urm2s7a1uLm2trW1tra1tbW1tbW3tra3tra2tbW2tbW1tbS0tLa2t7e3tbS0s7O0tLW1tLS0tbW1tra2tra2t7e3uLe3tra2trW2tbW2tra2tra2tra3tra3uLi3uri4uLi3uLi5ubm5urq6urm4t7e3t7W1tLS0s7OysrKxsbCwr66urq6urq+vra2srKuppaSmpqScmZubmpmampmXl5eXl5aZm5iZmJmZm52en5+dnJ6gpKWko6OioqKQdG5jcGFeXltUU1RIVEo/PFFCRkM7ODYzNzo1NTQ4Mzg5OTc4OTc7OTs9Ozc6NzU2OTk4NTg+Pz9ART5CPz9DPzxBQUI/PT9EQT8+PTk9Q0Y/VaSlpqanqKeoqamop6ioqKioqKiqrKuqqaipq7W1tba5o3eKcXKHhnd0cGh5a2JjYWVsaW5zal9jZWNjZWprYmRqbHaXjX6ovbm3tre5u7u6uLWxrKurqq6wrKyrq62tq6uvsLGvr7CytbW2t7W1trW1tbW1tbW2trSvr7O0tLSvra6vsrW0tbW1tbW2t7e3t7e3t7e3t7e3t7Owsra1tLa2tre3tra2tbW1tra3t7e5uLi4t7e3uLi4ubq6urq5uLi3t7e1tbS0tLS0tLS0s7OysbCvr6+vr66vr62oo6KgnJqampqZmZqbm5qampqbmpmZmZiXl5aYmZmZmpycnZ+foJ+goKChoaCgoJ+fi3RuaXRdYGZeUlRLRFRJPUVTSEVCOzo0NDY5NDQ1NzM4ODg3ODk5Ojs7Pz04OjkzNTg5NjM5PT5AP0A6QEJCQkA/QEJCPz0+QUFCPz06PkVDQFGjpqWlp6inqauqqKaoqKipp6ioqKinp6ioqaq1tbe3t7KZtH99kIx1Z2lqbGZjYGNoZW94cGlicXx5cGpmZmRma3NqhYystrKwra2ttLeysLCtrKuqqaiop6ipqampqKinqKipqaeoqqurra2sqqytraysrq6traunpaSnqqyopKOkpamwsbGztbW2t7i3t7W1tre4t7e3t7Kppaasq6ivtLa1s7W3t7a1tbW2tra3t7e3t7a2t7e3t7m6urq5uLi3t7Wxs7S0tLKxsK6sq6yurrCxsK2rqqmqqKijnJqZmJmYmJiYmZmZmZmZmpqZm5ubnJybmZeYmpqcnJydnJ2foKGhoqKioKGgoKCfnop1amtuWVxhVktPREdVRz5PV0hEPTw4MzQ0ODQ1NDgyODk4ODk6Ojw5OUA8Njk6MzY3OTE0PD8/QEBBOkNGRUJBREJDQTo7P0FCQz9APUBEQ0BPo6empaemqKqqqqakpqenqKioqKimpqaoq6uttba3t7e4rbJ1cHuDdmBiaWtiZWZhZGdmfYh5bHKAfXFvcXhjbW5xZo+srKurq6ysra6urK2trKyqp6WmpaWlpqioqKiopaeoqKioqKeoqampp6Wko6KioqOioKKioaKhoKChoaKjpKOjpaWlqLC0s7OzsKuqqaqztLa3trGopaOioaGipKiqqairs7Sxrq6xs7W2tra3uLi3t7e3t7e3t7a2uLe0sa6ppqerrKmnpqWkpKSkpKWnqaajoJ+enZycm5uampmZmJeXmZmZmJiZmpqampqampqbm5mYmpydnZ2dnZucoKGgoaOjoqCgoKCfnp2FdGtsaFdYU0pHTUVITUdAU1dGRz09OTM2Mzc0NTU3Mzg6Ojo6OTw9OjpBPDY9ODM3ODgzNztAPz9AQDpCRUNAQkRDQT87PEBDQkNBQDxBQ0A9TqKnpqanp6mqq6mkpaWlpaaoqKippqanqKmpqrW2tre3t7izc2h7c2JnamtpaWJhZGloXV1tfHJma3J/fHR8bm1zc36gqamrq6uqq62trKusq6mpqKWjpKampqWmp6eqqaamp6enqKinp6iop6WjpKKhoaGhn56en5+fn56foKGho6Wko6OkpKSmp6enpqWkpaampqeqraumpKKhoaChpKWlpaenpaeoqKalpaivtLa3trW1tra1tbOwrKupqa6rqKWlpqampaSkpaWlpqWkpKSkpaKhoaGgnp2bm5ucm5qamZiXmJiYmJiZmpmZmZmYmZmZmZqZmZydnJycnJybnJ+fn6ChoaKgoKCfnZ2cgHNrbmReU0pITUZETEtFRFFTQ0c9PDgzNjI4NDY0NjQ4OTg6Ozk7Pjw5PTs5PTczNTk2NTY8QD0/QD88P0JDPkJCQj89Pj5CQ0FFQD86PkVAO0+jpqWkpqeoqaelpKWlpKWnp6eoqKanp6alpqa1tba2trW2uYptcW1vfHxxZ2pmYGFsYFROW2hqbm9tgYJ9cWdxdn6aqKeoqqmpqqurrKqqqqimpaWkoqOlpqalpaWmqaqppqWjpKWmpqSjo6KioqKhoJ+fnp6cnJycnJ2dnJ2en6CioaKjo6KhoqKkpaSioqOjpKSjpKSko6Ggn6GipKanp6ipqaelpaSipKSlqK2wsKyrqqusqqmnpaWmpaWlpaalpqioqailpaWkpKSlpKOjpKOioaGhoqKgnp2cnJubm5qZmJiYmJmam5mXl5eWlpeXmJiZmpqcm5qampubm5ucnJ6goKGgnp6enpycm356bnJiXlNNSlBFRk5NQkBPRT5JOz01MzYzODM2Njc1Ojs4OTs5Oj49Ozo5OT03NjY5NjU2PkI+PkE/PT5DQT5DQ0BAO0BAQkJCRUA+Oz5FPzxQoKSjpKOjo6SkoqSlpaSlpqamp6empqalpqaltLW1tbS0tbiBaHx9ZXOCemxwdWFfY1ROT1FbaGxpbGxxbW5xbnScoqSnqKioqauqqqqqqaempaSjo6OjpKSlpqalp6ytqaShnp2eo6Shnp6foKCenJ6dnJycmpqam5ucnJubm5ydnp6foKChoJ+goaOioKGjpKSjoqSlpaWkop+go6SkpKapqainpaGdnJ+jpaipqainqKioqaempaWkpKSlpqampqampqenpaWko6Ojo6KioqGhoqKhoqOkop+enZ2cmpubmpqZmJeXmJaWlZSUlJWVl5iYmpubnJuampqam5ucm5ucnp+fnpucnJyam5p/fnF0YFtUTUdNSEZMSj8/TkM8QDs8NDM4Mzc0NzY3ODs9ODo6OTk7PTs7ODk9Nzc4OTU4OD9APT9BPjs9RD89REA/PzpAQUE/QUVAPjw8Qz88Tp2ioaKioKCipaSkpKWlpqenp6empqampaampbW1tbS0tLS3jHalsXdmc3Jvc2xjZGlYT1JRT09dgG1kYFptkZGSoqKjpaampqenqKiop6alpaSjoqGhoaKjpaempqesrKemoJ2cm6Ghnpuamp2cmZiampqampmZmZubm5uampqampucnZ6goaCfnp+hoJ6foqOko6Omp6inqKWioKGhoaGkpaWlpKCcmZmbnqOmpqampqanpqempaOlpKWlpqiop6enpaWlpaWkpKOjo6KhoqKioqKhoaKjo6Kgn56enZybnJubmZaUlJSTk5OTk5SUlJWWl5qam5ubm5qZmZqanJ2dnZ2dnZuampqamZqXf3dvc11aTkhKTkdFRklERU5APD09PDQ1OzQ2NDY1Njc5Ozg5OTg5OTw7PDc6Ozc4ODg1ODg/Qj9BQTw+P0A8PEJAQT49QT4/Pz1CQUA6OkA8PE+doqGfoJ+dn6OkpKSlpqeoqKenp6ampqampqW1tLS0tLS0tbSXtqd1Znh2Y2xjY2VjW1JTU1JNXqCMeFhodpajnp6hoaOjo6OjpKSlpqalpKSioaGko6OjoqOlpqWmpqenpp+bmpuioJmWlpWam5qXl5iYmpqYmJqampqbm5qZmZmenZ2goqOjo6KkpKWinqGhoaKjpaampaSjoaCgn5+hoZ+goJ2amJeZmpygpKOjpKWmp6alpaOjpKSkpKWnp6ampqampaWmpKOjo6SjoqKjpKGfoKGhoKGgoaCfn56dnZyamJeVk5KSkpKSkpOTkpOUlZaZmpqbm5qampqbnZ6enp2cnJybm5qamZmZlH10bHReWk9IRUdGQkVORT9GOzo+Pzs0Njo2OTM2NDY4ODo4OTc4ODo8Ozw5Ozs6OjY3ODk5Pj9APjw9QD5AOjlAQT89QT8/QUE+QUE/Ojk9PjpQnaCfnZucnJufoqOlpaWlp6iop6ampqanpqantLS0tLOysrGwsK2rkHiGj36bmn93Yl1TUlFRTGKgootaiKCgn52YmZycnZ2eoaGgpKenpqWkoqGjp6alpaKipaampaanpqagm5mboaCXk5OSl5qcmpeXl5ibmpmampqam5qYmJmaoKCgoKGfoaKipKamop6gn5+goaOko6Khn56enpyanZuZmpqZmJeZnqChoaKioqKkpaWmpKSkpKKioqKkpaWlpaWlpaalpaOko6KioqGgoKGgnp+fn5+fnp+foJ+cm5qZl5WUlJSTkZCRkpKSkpKSk5SVl5iZmpmZmpqam5+fnp2cnJycmpmZmpiXl5F8cmdxXl1QRj9BRD9KT0JCRjhDRT4+OTg7Nzc0ODQ1OTo6Ozk3OTo8Ozo8PT48PDo2NzY5OD4/QT47Pz49PDg6PkFAQUE/P0FCQERBPjo4PkE8U5ycm5uampycnaGio6KjoqSmp6alpaampqSjo7KysK2rp6amp6alpqiln6iop6qnoXmEXFFST0xcnKCAYpmgnp2clZOVlpeZmp2dnqGmpqampKOioqanp6ajpaampaWmp6amop2cnqGfl5GRkJSXmp2YlpeWmJuZmpqampqZl5iam6Ghn56fnpybnJ6goJ6dn56fn6Cio6SjoqCfnp2ZlpeXl5iYmZubnqKioqKioqGio6WlpKOio6SioaGhoqOkpKSko6SkpKSioqKhoqGgn5+gnp2enp2dnZ2dnp6em5mYl5WTk5SUk5KQj5GSkZKSkZKTlJaXl5iYmZqampyenZ2dnJubmpiYmpmXlZaNempmamBiTkY+P0A9SkVAQ0A7QEE8Ozs5Ojc2NTg0Njc4OT04ODs6Oz87Ojs8Ojk6Nzc2ODs8Oz08Ojo8PTw3Oz5DQkRDPz1BQ0FEQT88OkBCO1eZmJqamZmam5ucnp2foqKhoqSlpKSlpqSioJ6op6alpqWlpaemp6ampqakpaanqKehqXJOUU1KVJahenKanJyenJeVlJWWmJiXl5qeoqKhoqOkpKOjpaalpaanpqSlpqalpaOgoKGhn5mSkI+WmpmenJaXl5eZm5ycnJqamZeZm5uen52cnZyZmZqcnZydnp6fn5+hoaCgoaKgn56bl5WVlZeanZ6fn6GhoqKio6OhoaCgoJ2cnaGioqOkpKOioaSlpKOko6SjoqKioqKhoKGfn52cnZ2cnJ2dnJ2enpqXlpaVlJOTkpKSkpCRkpKSkpGSlJWWl5iYmJiam5ycnJycnJ2cm5mYmZiWlJWXi3hsY2RiZFFHQT1DO0tIRDo7Ozw+OTo6OTo3Mzc5NTo4ODg8OTg7OT09Ozo7Ojk8PDc2NDc/PDo9Ozw/Pjw7ODxBQ0FDQkI+P0NAQkFAOj9APztZmZiampqam5ubm5ydoKGhoaGhoqKioqKhn5+dpKWmpqenpaWmp6ampqWkpKalpKSkpaaGUFJQT0+PmHB6mpubnJ6cnJycm5ubmZiYm56dnp6foKOkoqGhoqKio6SkpaalpKOjoaGhnpyalZOUmJuam56amJiYmJqcnpyam5iWmZybnJycnJydmpqbnJ2dnp6dnp6fn52cnJyhoaCblpWVlZacoKGgn5+hoKKjoqOhnZuZlpaWlpicnqCip6ikoaCgoqOjoqKioKCgoJ+fn5+gnp2cm5ucnZydnJmanJuWk5KSkpKUk5KSkpKSkpOSkpKRkpSVlpeYmJiYmZqcm5qbm5ucnJqZmJiXlZWWl4d3ZGdoZGJNQ0U8RDlJSkU5Ojs9PTo6ODg6NjQ3OTU8OTY4OTc5PDs7PDo6PDs6PDw4Nzg3Pj07Pj46Qj86Ojo/QURCQ0FBQD9EQUFAPjpAPj06W5qYmZqbmpubm5uen6CgoaKioKCgn5+enp2dnKWkpaanpqWlpqakoqKio6Oko6Kjo6KnllRYVVJOZ21rgZ6am5udn6Cgn56enp6dnJ2dnJ6enp+goaCfn6CgoKGio6Ojo6OkoqGgnpuZmZiZmZmZmZienpiYmZmam5qWlZeWlZicnJ2cm52dnpybnJ2cnZ6bmJqeoaGdm5udoKKhmpWVlpaZoKKgnZueoKGjop+em5eXlJKSlJeYmZ2goqenpaGgn56goaGioaCfnp2cnJubnJubmpqZmpydnJmXmZaVk5GQkJCPkZKSkpKSkZKTk5OTk5OTlJWWlpeXl5manJubnJucnJqamZeXlpaVlZSEcmZsYmRbREJMPT84RktCPEA+Pj05Ozk6PTg1ODg2Ozg1Njo4PDw7Ozw8Ozk8Oj09OTU4Nzw5PD88OkE/Ojo6QEBDQkRBQ0A/Q0FAPj08QD09Ol+al5mamJeYmpycn5+foaGhoJ+fn56foKCenZ2lpKSko6OioqOjoZ+foaGipKOio6SiradXXl1UV19ua42dmpqbnJ6dm5ucnZ+enZycnJydnZ+goKChoaGgoKGgoKGioaGhoZ+enJuampqbnJqZmpuZnJ6ZlpaWl5eTjo6QlJabnJuam5udn52cnJycnJ6dlpSZnJ+in5ycnZ+hoJuXl5mZmpycnJubnZ6fnZqXlpaWlJOTlJiampqfoKGmpqWgn56fnqChoaCenJubnJybm5ybm5qZmJmZmZmXl5iVlJKQkJCQj5CSkpKSkZGTk5aYl5STkpSVlJWWlZaZmZmam52cnJyampmXlpaWlpaQgG9vZV5gV0BKSDg/N0lFP0VBPD07Ojo8Ozs3NTs4Njs3NDY6Oj47Oj0+Pj07Ozs+Ozo4Ojk5NkBBPTo8PTo6OT9BQ0JERUM+P0FBPz8+Pj89PDtgl5WXl5aVl5mbnqGhoKGioqCenp6enqCgn52bpaWkpKSioKCfoJ+dnZ+hoqOjo6OkobCjXWVkYGFua4GenJubm5ubmZianJ2enJubm5ycnJ6ipKGeoKGhoqKhoKCgoaGgn5+enJqZmpubm5ybmp2dm5manJiXlZWWkY6Nj5KYnZycm5ycnqCdnJucnJyempWVm56foZ+dnJyenp2cmpqampqampqbm5qXl5aTkpWVlpWTlZaam5qanZ6foqWjnp6fn5+en5+enZ6fnZycm5qcmpqbmpiZmJiYmJiYlZSTkZCRkJCQkZKTk5CRk5SYmZiVk5SVlZWWlZaXmZmXmZqenpyamJiXl5aWl5eYjX1ubV9lVlRFSzw3PjdSRUM+QkE4Ozw7OTg6ODY7Nzc6Njc5Oj0+Ojw8PT49PD06Pz06ODw9OTtAPj4/PT45ODs/QkNAQ0VDPT9DQj5AQD5APTw8YZWSlJWWlpeanJ6goKCgoaCgnp6enp6gn56em6WlpKSioJ+fnp2dm5mbnJydnp+gn56rmGNpbW5pZm2enZybm5ybmpmZmZqam5ucm5uam5ygo6SgnZ6en6CgoKCgn6ChoKCfnpuamZqam5qbm5ufnpyZmJqamJiYmJKOj5OXnJ2bnJ2cnJycnZycnp6dnpqVl5ygoaGfnp2eoJ+cnJuampqbmpqYmpmVk5OTkpOWl5eVlJiYmZucnJydoJ+gnp6enp+fn56en6KjpKKgnp6cm5qampuZmJmZmJeXlpWUlJORkZCQkZKTk5OSkpOUmJmYlpWUlZaWlpaWl5iYmJiXmZqamZeXl5aXlpeWl4l4dmddX1dURUU5OTs8WT5AOEI/OTs7Pjk4Ozg6Ozc5OjU4OTs9PDk9Oz0+PD0+Oz8/Ozk+PDw+Pz5AQUE9ODc7QkNFP0FFQz1AREJBQEQ7Oz47PGKWk5SUlpWUlpiYmZubnJycnZ2cnJ2en56dnJqkpKSkoJ+enpybm5qZmJiYmZucnZ6cpolla3R4bVuFop2dnJydnJqbmpqampydnZ2bmpuboKKinpucnZybnJ2enp2dnZ2fnpuampucnZybm5ycnp6cm5qanZqam5yVkZOXm52dnJ2fnZycnJycnZ6fnp+cl5idn6GhoJ6cn6CfnJubm5qbmpmZmZmZl5WWlZaYl5eXlpaYmZuenp2dn6GhoJ+fnp6fn5+dn5+hoqKhoZ+fn5yZm5qcnZuampmXlpaYl5eXlpWTkpGTlJSTlJSUlJaZmJaVlZeZmJeYl5eXl5eYl5iXl5eXlpaYl5eVl5eDeHZfW11eUT1GOjk4P1VDQTtDQzo8Pz86Ojk3Ozg4ODc0ODk8Ozw4Ozs8PTo9Pjo/QT06PTw+PkA/PUBBPjk2PERDRUBBRUU9PkVERD9COzo8OTpkl5SVlZaUlJSUlJWXmJiamZqcnJydnp6dnZybo6Oko6CenJuamZqZmJiYmZiam5ubm6WJa3F2em9lmp+enp2dnJybnZ6dnJ2enp2dnJydm5ygoJuampubmpudnJqampucnJuamZycnJ2dnZ2dnZ2dnpybmp+fm5ydm5mZmZudnZ2dn52dn5+dnJydn5+fn5uanZ+goJ+dnJ6gnpubm5ubm5yampuamZudnJqZmJeYmJiYmp2foKCgoJ+hoaGgoJ+en5+fnp6foaKhoJ+enp+enJqam5ubmpqZlpaXmZmYmJiWlJOUlJWVk5OVlZSVlpWVlZSYmZuamZaWl5WWmJiWl5OUlJGRk4yRkJOWfXhqYWJiXFA8QDw2OENWSERCOjg7Oj47Nzc5Nj06OTk2NDc6Ozw9OTo6Oz87PT08QD47Oz46PT89PkBBP0A8NztBQ0U/P0REPj9EREM+Qj07PDs6Z5aTk5OTk5OTlJSVlpeWl5aWl5mbm5ybm5uamaOjoqCfnpuamJeYl5eXmJmYmZybm5qkgGpqb3lzcZegnp2dnJydnp6enp+enp2cnJydnp2bnJuampqam5ubmZiYmpqamZmZmZqdm5ydnZ2dnJ2cnZ2cm5qdn5ucnJubnJubnZ2dnJydnp2enZydnZ2cnJ2dm5uenp6dnZybnpubnJycnJydnJubmpmbmpmYmZmYmpmZmpyfn5+jpaKfoaKioaGfnqCgn5+fnqCioaGhn5+fn52ZmpudnZqZmJWWl5aVlZaTkpOUk5STkJCSk5GUkY+OkJGOlZabmJWYlJmXlJiRjJCPk5yTkoyFjIeDhndxZ2pkW1xRQT44NkJHYEJFR0A+Ozw7Ojg4NjU8ODo4MzQ6Njk9PTk5Ojs9Ozw6PD48Oj5AOj5APjw/QD8+PDg6Q0FEPz5CRD8+Q0VCPUJAPDw8OmeYk5KSk5OSk5SVlJWXl5aWlZaXmZmZmpqampqkoqCfn52bmpmYmJiXl5iZmJmcnZ2cqH1nZXN7enOJop+enp2dnp6enZ2enZ6enp2dnZ6cm5ybmpubm5ucm5iYmJmZmJiZmZibnZycnZ6enp6enp6dnZybm52bnJybnJ2dnZ2dnJ2dnp+fn52cnZ2dm5qbnJmZnJ2dnZ2dm5uanJ2dnJycnp2dnZybmZeVlZeXmJqam5ubnZ6foqOhoKGhnJucm5ubnZqcmZycn6CfnZiZmZmUkpKUl5SPj4+OkYyNiYuQi4mLjpGRj4mQmJiQkoyNi5KQj5iYoqiqpqWlrKOmoZqep6eyqKKVo6Cfl39wcWlsXFtcTUY8NzdHR1g+SE5URjk+Ojg5ODc1PTk4NzMzOTY6Pjw6Nzo8Ozo6Ojo8PDs/PjtAQD47PT5BPDw2N0A+QkA+QUY+PEFEQT1DQj49PDlmmJSTk5OTkpOUlZOVl5iYmJaXl5iZmZqampqaoqGfnp2cm5mYmJiYmJiYmZmZm5ybnKx/am16f3lxh6Genp2cnZ6enp6enp6dnp2dnZ6enJubnJubm5ubm5uZmJiYmJiYmJmZnJ2dnJyenp6enp+fnp6dnp6dnJydnJ2dnZ6fnZ2fn56goJ+enZ2dnZybnJ2em5qbm52enZ6dm5ubnJ2cnp2cnZqYl5SRjo+QkJGVmJSWlJiZmpudmJuYlY2Mjo6TkpKRj4mQjpGRjo+Ki42NjYiIi4+Lg42NkY+MkI2Qk5WVnJihoJySn6SipKmam5eanKOprb3Bwbq8uL26ucC8ubq3uru7tL2zwbV/bnVmZ1peWUxJRTo7TElTPFZSSUM6QTo7Ozc3NTo6OjgyNTY4Oz08OTk7Ozw5Nzo4Ojw6PT85PD8+PDw9QTs5NTg8O0A/QT9EPTxBQkA8REM9PT06YZOTkZCUlJOTk5OTlJeYlpeZmJmYmZqbmpqamp+gnp+fnJqZmpqampmYl5iZmZmZmZmphXB1e4B3b4mhnp6enp6fn56en56fn56dnp6fnp2dnJ2cm5ubm5ubmpiYmJiZmZiam52cnJ2dnp2dnp6goJ+enZ6hoJ6dnp2enZ6fn56en6CenZ6enJydnZ2cm5qYnJuVmJqamJiYmJmSjJCXlKCXk4+MjYqKiImMiJORh5CPjYqKkJCLjoqMi4+IiImJjpGOjYaFiYaKhoWLiI+SkJCNkJKXlpKamJ2TlJ6kpqaqq7Gsr6+rpquqsbm5tbS0rqyvtMDIxcXBvsbDxMTDurW+t7a0s7C2tb6qcHRyXGZfXl1JRj8/RUtMVklcTEQ/PUI6Qzk5Nzc7OTk3MTc5ODo+ODg6PDw7OTc5OTs9Oj4/OT5BPDs+PD46OTY5PDpBPkNBQT08QkBAPkJEPj8+OVyHhIOHi42KiYaFgYqMkZOVmJiHlZaWkpiampmenZ+gn52ampubm5ycm5iWmJmXl5ibqo56dXZ7f3mCoJ+fnp+goKCfn5+foKCfnp2dnp+enp2dnJqbm5ybm5uYmJiXl5iZm5ucnJydnp6enpybm52dnZycoaGfnZ6dnZ2dnp2dnJiWlpaYlZWSlpmWk5GKjI+PjI+NkIuLj4+WiYiEi5GZjn2Fi42PjYyHioyQm4yRj4+Lio6TjIyNjIiSi4yFiYyPhouIh42KhYyEj4qXkJOYmpWbnKOqoaKknKKrsbe0ubWxs62vsrKlp7O6sbq6vLa3tsDDw729vLa/urq8wbW4wL60r66mqa+3mm58Z1tjWl1fSEU+QUtJU1hZXkFGOTk9OkY/Pzo3Ozs7NjM6Nzo5Pjg6Ojw9OTk4Ozk7PDo+PTtAQDs8QjxAOjg0Nzw7Qj9BQj4+O0NEREBDQz0+PjlhmZWLkYWNj5aSiHl9e3+Fi4OKgoqJhmuAeJCLlpqRnZ2UlJGTlpeampiWk42Sk5KQm5uIdndzcX1/cpGgnZubm5yenZ2eoKGgm5uWlpucmpybnJuYmZqYmJmampqWi5CTlpmYlZiYlpucl5WSkY2SkZCUk5KXm5mYm5ePjpCLjo2Ch4uLi4qLiI2RjIeHhoqIiZGKh4yEhYqNi4qNhI+UkIyDkJOUmZWQi5OTkZWRlpWOj5GMlI2Oj4qIj4ePhoeJiYmNiomJioWNh46JmJKUmpuXmKChp6Cko5qqqbO2sbWwqKmiqK6tn6qvsK21ubi8wr/BxLixtbCutrOwuL68ury+urOzp7G3wpB1gGNiXlpXUk1IRkVQSVlXX1tDUDpCQz1HRj84Nzo6NzU1OTc8OTw5ODo9Pjo6Nzs7Pjs7PTs9P0E7Pz48Pzo4NDM3OkFBQEI+PjpDREM/QUM7PT45Z6mloqKZn6CippeUiI2CiIJ1h4iKiIp7e3Z7enmPeoiSfn18en6CkYWBgH1zfH99fISHfnRweHZzfHaBj4iIiYeIioyMkZicl4iOhIuNi4iNkI+Pi5GPi4yOj5CQjouFhYeLjIyHiIuOi4eMhYaBjYuGiop/iYqGiJiRiIOIg4KFfIuLjIaJi4iKkIyIi42PjI+Wh4mLio6NjY2Wk5OdnJyalpycm56bmpuYnZeTkZWWkJKRi4+LlpSMjYqDi4SEiYyQkIqOio2LipGJjZOTk5SVk5KcmZ6Xn6CfpaKvsamupKSfmKStpqa4t6ysu729wsPAv7+vpa2wsLS3uLO0uLa0ta6stK+4tLaBeXpjZmBeVlFRQUVMT0lcXl9UR0dCS0xCREA9ODg7OTU3Nzk3Ozc9PDk9Pj05Ozg6O0A8Oj06PkJBOD88Oj84NjQyOTtCQD9CPj04QEI/PkBEO0A+N2CloJqXnaGaoaCPl5efl5WCjaCfo6GdmpKOjIxycXBvdnFucG1ucHZub29waHBxcHR+c3FycXd7cnl2d3Jyd3Z6e3l8fXt/iIGEi3+PkYaNi4uGiouLiYaEgYaCgIKJkYOAg4x/ho+LiYWAh32AgZKQhoSEho2DhIyPj4+IjY+Hi4iRkJWRjpCKk5eOj5WYp6SfnZWYlpaln5udq6aqt7W4srGnr6qnpqGfmp2WkpWVkYqPjImTjZuVjYuLhoaJjJWQkJCLmZKVlZSbkJiTlIyNkYyWl5WilZ6mqauno6OqsJucpp+mq6G0vb6zs7+5u7u6uby9rqiusa6wuLyztLGxqrCpqLGxsqild3J0X2hhYFRWUUlKSFZNXl5eVExKRVFKRUdDPTo5OTc0ODY4Mzg4PTo9PD47OTs4Ojs/PDw+OT9DPzg7Ojg8Nzc2Mzc5RT4/Qz89N0BAQT0/RDw+PThUj4yGh4eUjJWZl5yWmZaNlZyWlZydoKCdmpiWeHFubXJ4cXFsbnJwa3FvcG1yc3t1dnd5fnVxeHZ0d3tybn98gX15eH1/eYOGg4WCg5CLkIuLi42Pi4mJhYKBfX9zfYiAfpyQhIWFiYuPinp9fYaOjYqGjZSRi5CXj5SXkpihlp6XlZunpp+goKawq6GjpbW0sqqmqq+isba5vcK7ucO+vLi9uLWxrLCspZuSk5mfm5SPk5WOmp2doJqfn5edo6qsoZ+em62hp6qwqaampJiRkZWUo6SirKSss7Szs6i3tru4sLKvra2yt7a6srW6s7e5u7i8urayr6yxsbKztLOxsa2us7Gzs6yhl3Zxc19jXlJRVE1PSUdYT1pcZFROR1VPRURKRD44Ojg3NTg4ODU5Nzo6PTw/Ojg8ODk5PTs9PTpCPj84Ozo5Ojk4NjI1N0I+P0RAQDY+P0I/PEM8PT46Tn98go6MjJOTl5eaj5SWjZaRkZSXk5qanqGdnHJvcnFxcXFxcG5zcW91dHJxdneAdXd8eYV+d3t8eX1/fICJiYmDfXp/h4GIiYGAgIGGiIGGi4aIhYSIiImEf4J/enx8fX6SkH+IeIGFi4qDhIWKj4yNkZmdlJSUoJqan6Ktsa2ppKWtr6ysrLWuvrmtrqm1sLexq7G2rK+9wsLAvrq8trKutraxtK66u7OurKepp6unoqmtoKmooq+wuLSxvLq6urK0ta+8tLezt7e7t7mtrbCprLW5sbeytLe2sLu7vLu6ury1vLi0wbWsqqqrtLG3uLm1trSzsKymrrCqq7Cxq6yusLKxtK6qo5N4dnJlZ1tMUlBFTUlTV1JlXmdUUExcUUhMUkNBOTk3OTU4ODY2Ozc5Ojs6Pjk4Ozo6Ojw8Pj08RD45Njs7ODg+OTUxNTZCRkREP0A3Pj5DPjpBP0BAO0t/gomXmJSdlpabmIuSlo6XkZGVl5SZl5+bmZx8dHV2dXl1c3RudnJzdHV2d319gX56gXyDfoJ/fYB/hIKFj52RiYF/go+Xjo6HgoCBiIuFfomQi3+HjYyLioeSioeGjZGTkZGEh319g4iMjouOiomQj46PlJSYkZWbmp2dqK6yr6+1tLOtsrW4sLy1tbGqsKqztbS7t7SztrS1r7i4t62noqassLCvtre3vrW5vLOysa61u7C0r6+yu7axuMC9tLS0s7izvLq2tLrAvbm6ubq+ubm5vrWysa+yr6q1tLGzsbSzrri4tb+vpKaoo6ussa+zrq6wsKytq6qroqKmqKKnrauqpaynoqeYeHlxZmVZT09NSVJNV0xPX15cTlVVYlFEVE07Pzk8ODk1Nzc1Nzk1Ojo6OTs4Ojw8Oj08Pj4/P0I9ODY6Ojk6QDs1MjY2QUZDQz4/Nz49Q0I5P0I/PjtLjpGTmJmVmZGTopiTkpKLk4uOkI+Vl5ablZSbhoJ9enh2dHRzdH53end2gIKDhouMhISFioaQiYeRk5aRjZaalY+IjI+emJaVkpCTl5qamJCdoJ2Tl5qgmZ2boqGVkJugpKOak42IiIuJkZGOkY6LmJqPj4yUmpecnJufnKSstLm6vK+2tLi0tLK3uLmzq6+qqKy1srK1rrGrrqa3s7OxpaGotbCvrayrtbqyu7q6tLK3ur67ubG4sLmtqLK4u66ttLS3tbu2trm5vLe0r7G0t7a5s7e1pq2pq6ior6yprq2up6KxtLG0q6aop6Cjq66oqq6orLKwr6+pqKGeoaGjpqOgopqlo56ol3J3bmdiVUtUT09KQ1BLX2JYWlFcVGBNSFJJQUA5Ojg2Njc3NTg5NDs5Ozk8Nzs+Ojg8PD0/QkBBPTs2OTk5Oj87NjM3OD5GQkJAQjk+PUBDPkBGQj44R5OWkZWTkpSQkZ+ZnZmVkI+Sko6Mk5aWko6RlZGSkIaBeXJzdXuBhI6HhZGTkpicnJiVkJWYo5yaoaeqqZ+clpeVnaKioZyZnpmlqKyvramnqqmop6GlqKirqqmvoZufoaOjoJqfoJyUjZiUmKCgoaSem5qlp6Spq66spaOoq6+xtK6qrK6zr6ystLO0ua6urayqrLKwsK2wqKqmsrS0uK6qtrqwr6qurLC3s7i0t7W0u7y4tbWxtauyrKiys7uvrbGytLa1sbG0s7OvrKuvs7a0sayutKqqpqWnrauoqKupqqifqbOwqqeppaOio7CtqaatpairrayppaSioKWipaOYmZyVnqKippdudWVnZFdPWEtLSktTVHBiWWRXX1tcUlpQTEM8ODk6Njk4NzQ3NzQ4Ojw6PDg6PTk3PDw7PkM/QT47OTo5Ojs+PTg0NThBREVEQkM5PjtAPkI/R0Q+N0KSm5SVlZaVj46Wl5qZlZGKk5SSjo+SkYqKiY2Ul5qTjYmCho6VkZSfmpuin5+jnqGhn5ijpKelpaapqa2rqaKmpKilpKGfnqOjra2srairrq+qqqukoaKkqaemqaijopybm6SgpaijoJidmJ+hoqmnoKKirqyrqqetrqilpKmpqammo6iqqaekp66wr7Ovq7Crqq+yr7Czua+rqLCxrrCyubO0r62vtbCss7GurLW1tLSzs7CvrKyqrKusr7G0s7CwrrCwsKyqrauqq6alrrCysKumqbCvqaOkqaunqKaopquwq6mvqaaoqaalo6iwraqpqKKpo6WnpKGhoKKloZ2el5aYlJugpKmUbnNeamlfVVpOUk5QT1JkXGVjW11ZXFBZT0tAPDs5Ojc6ODczNTMzODo9OTo4OTo5Oj08PEBEPkA9OTo8PDw+Oz45NTo8QkFFQUNBOT47P0BEQENCQDdAkZ6YlJeZlpGHi5SSl5GIg4mLk4+OkI2Hh4SFlZmWmJeZlpqeop2anKKkoaCdn5qfoKGgpqGgoKCjo6KlqKmrramqpqOmpaCloKaop6WnqaepqKOnppmcpKaioaGhoaCcmJmfoKGkpKKenpagm5qioqChn6GiqKCcn6GloaCmo6KfpKGspp6foaGkrKqnrKivq6e0sa6ur7WyrKqwq6mtrbWwrq6srreup6yqpKivsq+sq7Kvqqqpq6utqa6urrGxraqtqaunp6uoqauinaapqKilqKisqKilpKWop6iopqmsr6+oq6mhoqKlo6Opq6ymqKWjqKKhoKSdnZ+hoZ2bnZ+amZWcnKOqlG9zZm5yZF1cUFVPV09eZGRsaGJiWlpSVE9NQTo9Ojo4Ozk1MTYzMjg4Ozk5OTk7OTk8Oz0/Qz5APTk7Ojs8QD0+PDk5PEFBRUFGQTo9Oz9BQUJBRUI4PYqWlJOYmpaPiISNjpGSjIiIiI+JiZCRjoqKiJubmZygpaKlnqKjoZqeoZyanZ6bnKOop6ugoKOYoJ2XnKGjo6WjoqKkrKilqaCepqmnrKmkn6Kgoqahpq6mpp2fn5+fn5manJyhoKGkn6GbnZqcoJ6hn56eoKOZlpqYpKKipJ+ZnKGhoqCbmp6goaSgnaejqrGorqusqaSqqquorKalrKqws6+rq6mwq6appaWoq6ynpqevq6Wnq6upq6irqqqrrailqKOmpaesqayoopykoaOmo6qpqKano6SnqKanqKepqKupoaKoo5yepqWjqKino6WlpqmgpJ6inpeYnZ+doqKlnpiUlZ6go5d1d2t2d2JfXFVZUVVXW2Nec19oX2NTUVlUSD48PTg7OTo4NTM3MzM0Nzo4OT05Ozo5PDxBQEM9PT44Ozw9PEA/Qz86ODo+P0NAREE6Oz49QD9DQ0VDOTyCmJmenZ2alZKKiZGRl5GQh4SJgoGNj4+Sj42cnZ+hpKmlqaeorK2moqKfmKSmo6Stsa6yp6asm56em5qjp6Cfo5+foq+qqqyoqKuwqaiqqKGfoKeprbCyr6yjoqahqaWepKOipqClpKKlo56doJ6fpaKinp+imJWemp6fpKGblZigoZ2enJudnZuZmZWen6Oonp2iqKGaoaOmoqSoqaqoq7CxqKWlp6eopKWpqaqnoqWmqKadnqWloqClpaOlpqCjpaOjpaelqamqpKekpqKmp6SrqaenpKGlqKynpqWlo6OopJWdo5+bnaCjqaeopqGjo6mooKiioJyVkZqfoKGmopuXkpCamqCVfHdvfXlmW1pgX1pcVlxoZG5jbmppYl5QUEA/Ozo4OTg8OzYzNDMzMzc5OTs8OTs7OT49QkBAPTs9ODw9QD08PENBPjo4PT9EP0M+Ojk/PEI/P0FEQjk6gJ6kp6Kem5+gmY+ZnaCWloqGj4iEi4qTl5SRo6Wnqq6trLOys7S4t62pqqevtLKxqq6usbKusa2lq7OssbGpq6+rq6y2r7Owq7GysaOfoqqpp663trS0trOvrKuuq7awqbKxra6npp6io6ObnZyXoqiloZ+eo5udoZqWnaScm5aZoqefoJ+joJuUlpmWl5qfoJmVnqGZmJ2dpZ2gpKeqqaiqraylqaSlqqeqqaqsp6SkpKOimZmhnpqaoaCfpaWYnqSmpKqooqelpaGqp6mnp6ejqKWmpaGkqKesoqekoaalpaOVl52Ym5mVo6elpaSfnZ2lo6Kqo5+amZiXnJyaoaGakJOTl5ibjX93cnZ5amJbX15cYllgZG5ta25hX2RgUE9BQDs7OTs4Ojk2MTQzNjQ3Nzc6PTo8Ozk9PUI/Pj89PDo/OTo7PD5BRUA9OTtAQT5DPDs5PzlAQEBAQkM7OXuao6OcoJ2dop2Zn6KioJibmJaYkpSQm5qWl7S0rrW4s7S4tre0uLm3tbm4ub28uKqLnLK4vLS9urW7uru4s7q/uLe5u7G3r6iusq2inJ+qsri8vL27ur+0r7GztbS3t6+1tLWysKikop+gl5Wal6SqpqahpKOkq6almaGko52goaKooaOgpaGck5mYmJmco56cmpudl5uZlqWam5+hqKmpqKuvr66pqKirrKytq6irp6WjoJyfo6Ojn6Cipammmpyip6Spn6GjoqKgpaanpqSooJ+ipKGjoqiop6OloaGopqalo5mbmJuTj6GknqKfmJiVoJuhpaCfm5udnJuamZugmo2YmZiTkYaAdnh4eGNbUllUX19hbWh1a3FoaWlhWVNMQDw6Ozg5Nzk3NTU2Mjg1Njc3Ojw7Ozs7QD4/QD0+Pjk6PDk2Nz47QkZCPDg7P0NDRDw+OT43PkFCP0ZDOzhwkpqblJ6bm52Vl52doqajopaXnpaXl6GblJi+t7G4uba3t7i7l5S2vbu9vcDFtaK7mKC3v7+6wcm0nbu2sra/xcGooLa0urGqrrSxsLG0tbW8vL68vL7Guri3ur20r7Wxsbq4t7Kzsqqmpp+YpKSnqKSupKurtbWvs6CnqqynqqmlpqCnoKGmoZOWmJ2foqSjnZ6coaChnZekmpmdoKaqqqqtrq2tsLGrrK2sqamrrqimpaalpqSkpqaeo6eppKGcoKKjpqCio5+jpJ2foqWgpJyboZ6fo6GhpaSlqaOkpaKkp6ehn52elpOcoJiZko+MjJeWn5uWnJqdnJqSlpSUmJOQmp2YiouHgIB8gnhhXllUYWlgZnNvc2l0ZGlkYltMSz46ODg5ODg5NzM0NTI1NDY2OTw8Oz08P0E/QEA9Pj44OTs4Njc/OUJFQzw7PD5DREM9QDs9Nz1DQ0BFQjw3Z4yRk4qalZiblZWYm6Knq6aVl5iQlZmhnpeXvrWztLu6ubi5woeYt6u4u8DCxbOjw6e4s72/tMTHvbS7uL62wMTErqCworW2tb2+wcPGwsO5vb/AwL2/xL28ur2+tKeqmLHAvbi1ucCzr6+qqqitp6ekr6eqtLyxtLWor7Gwr6yqoqajrJ+fpquXmqifpaWfoJydoKuwsKyiq5yYm6Cor7Kys6uorre1sq2tqaalqKulpaStqaShn6Cnnp6mqKmmnp+anqGlpqmcnaObl6KmmpuanZ+cmqGcmZ2eoKijn6GfnaWioKOioZSZmpmTj4qLhI2Qk5uPjpiVm5eYkJORkomNl5iYk4uKi32AgIVwYGFeXmtjYm53dXZubFtiUVZcTUc7PDk3OTc5Ojc0NDQxNDM3Njg8Ozs8PEBAPUA/Pj8+Ojo5Ojc6Pz5FRUU8PT1AQkJCQUE7PDhAQ0NARD87NV+MjIaFlouUlZeYl5ifpqellpWVkZebn5ual7mxtrO5vLy5urWqsryxvsG0vMe5uLuuv6fGw7/KxsnIxcXJvMLHx7+xsKe8vL7FxMbJx8XGu8TAxcbAua+9vMC+vrOrqoyzu760tbfCuq2vsLWqq6aqo62kp7G2q7WyrbOtqK6vp6awr7Ktqq+zpKu1qaeopKCgnqmyuL61tbWqqaausre4t7apq7i8ubexr66noqOop6SfqKOfnqCZoZydoqSnp6GelJuaoKGlnqChnpajnZSQlpiboZqflpORlpSin5qenJudoZ6kn56VnJiPkpOPjImTkJefiZCWkZuUmJGRlZaDjJWXlpKLjIh8f4N/amZoYWttZm51cXJ1cWdeX1xSSUU/Ojo6Nzg0ODw3NjU0MjMzNjU3PDo7PDs9QD4/QD48PTk5OTs6PDw+QkRFPj49QENDQkREOzo4QUJCQUNAOTJbk4iEjZGKi5GRlZCSmp2fnJOSmJSdnZqXmpW2sbm1tb6+tri1uLO8vMTEusPHwb+0s8XFxr/CzcfLzsvLx8HDxsfIysXExcO7vLzBxcHFxb/DwsbFwLGTvrq/w8K2trqptLO0qauzu7uxn5uxr6ykrK60p6qpqKqtrKmmpZ6pr6uyu7q4u7e5t7O5uLOurLO0qrC1ub3Bur6+vL60urm4u7qysbS8u7q7s7Oyp6Smq6uioaCdmpudmpyXmpuenJygnZaclpuZnZ6io52UnJCNiY6OkZ6bnJWNh5KLmJiWmpybmJybnp6cmp6UjpiYmpSRmZeeoZWYmpKXlJWRlJqYk4+TnZaSi5F+enx/dGtsbmRvbWlxeG55aWlhXGdhUUZEQTw5OTc2NDQ6ODQ2NTMzMjY1Nj05OTs7PT47Pj49Oz05OTs7Oz89QUNBQkFAPEBDQ0NFQjs4OUQ/P0BCPzsyV5uQkZCQh4WSjo2IjZCTlZGPjZSUm5STlpqRs7e4uLi+u7C1sri2tbbAw8G+w8LAvru+u7u8xMzEzNDLxsa/xcfLyNTLysjGv7u7vsS+xcjGxsTEw7i0wLe0vMHCucK3t7/Au66lrre8t62co7ewpqy0tayupaSjqKSgoKWZqrSxvsG+urm6uLW0srG0tLO6wL7Av769u7u9vsDCt7a3tru7sru+ubi3u7a3tKyoqamrpqijnpOampyYkZKZl5GRmJqXnpiWk5acm5+elJOJiX6GiIuWlJiZkYmVkZeWlZmbmpaYl5idnpyhmJWZmZyYl5ybn56jnJ6WmJeTl5yZmZyUlp2UlpOJdnl6e3Zua2lndVpmcnhzeWZnXWRbUlhJRj87Nzg4NzYxNjk3NDQzMzM2NDY7ODo8Oz08OD0+PDo7PDs9Ozs+PkRBQURCQEBBQkNDREM9OTlCQD8/QD89MkyWmpaSk4yKmJCKi4yOkpKKiIaNkJiKj5CUl7O7tba/vb2xtrjBvby0uL/Bsbi3vsHFvbu8wsbJv8jOyMHEwcfKysbKxczIzcbIxb/DwMvNz8rGxMPDwcS+uL7Bw8DEvsHPz87Gq6+2tLWroKe0s66ruLWzrKmjoa2prKatn6y1tL/Cvrm4vbawrausr7W0ur7Fv7u8urO5u7i5ubWtsLS9u7G/vLiytrmzubu0ra2orKyqqaeXnpualY2MmJSTi5WWlJyZl5WWmZKYn5mQiop+iYqKkY6Vl5OUn5mWkJSZmJmWmJOUm6GeoZiYmp2ZmZaenpibopqdnJuYmpuZlpeXlpyZlJyYfoB4eXV1ZWVpamddam9teHdjYmBgXlhXRkU4Ojg6OTc5NDQ5NzY2NTEyMzM0Ozo9Pzs9PTo6PTs8Pjo7Pz48QkBDQkJFQj0/Q0NDQ0RFQDk6QkFBQj5CQTVCkJeUlZmSj5qQjpKRjZSVi4qHjI2UiImPkpq2u7S8xsHEwr3BxcLAtLO9v6ywr7rDysPCvs3IxbfByMW/wcLIy8rCwsTJzM3Pz8zDx8bIycjIycfFycfIx7/Fx8TEx8jK0s/SzLy4trS4uMG+vrq9ury6vKytpqq7urm3wLK1uLLAxrq3t8Gzsa2tqau1s7u2w7a2vbWxt762s7e4sLW2v7uwvbq0q7CxsbO8urOzrqutq62xnaOjoJqQjpiXlZCclpaYlpWSnJmTm5+clpGUjpWQiYyQlZOUm56YmZKSnJedlJmSk5aZmJ2VnJ6do5yVnZ+TnKKcnKCfnaOemJSVl5ebmpmgkH99cXRxb2NhZ3Voaml0bXhsXWRbVWBZTEhDNjw5OTg4OjUzOjY2NDQxMzUyNTs6PD47Ozw9PDs8PTw7PD49P0E/RUFCQ0M+QEFARUVERUE7Nz5DQkI+Q0I4O4+akZaalJKUjZCUlI6VlI6Pi4yJk4uIkJObt8C6xsXEw8zCwcS9vrWvt7uvr7O6wMfFxMHMy8W2ucDCwsTHytHLwsPExsnFzNDNx8zJwsLHwcvLyMbMys7FxsXDxsXJzdDNz8zHxMDDwsnNx8XBxMfAu760sLCwwb6+wca/vri2w8K6urbAvrWyrKmvsri+tMC0tLi0t7nEua+8vrm+v8K/tbq2q6qsrq+wt768trSura2utaSlqKimmpycnZyeopydmZOQkp2VmKCdmJiVmZmZl46MlH2QkJefmZmYk5GToI6Nko+VjpCUlaKdnKSem56elpyjoKGipKOkop6amZubnJ2enIN9cnx4cGdgamp2bGlldW50Yl1iVFdVU01HOjc7OTk3Nzo3NDg3ODQ1MjM0MjU7Ojk+Oj08Pz04Oz05OTk9PEBBQEVCQUJBQT9AP0RFREVAPDk+QkNCQENBOjSAoZeUmZiVkImUk5aTiZGMlJGOiJaKi5CXnMXLw8O8wMPHwbm9vbu4tre3rrK3uLzAwsDCx8bHurzAwsTHyMbSycHCw7+/vsTLyMrLyby8yMjJzcjDyMnJxcXDwsHCx8fJysfMyMfIzcbLz8W3wL/AwLu6vbWzs7+/ub/DucC3u8G8uri7ub27srCvsKy5wri9ube1t7q9xb24xsjCwcLGwr28tamurrCwr7O6t7m2sK+tr7OppquprqannqSlo6OjoqCblZiekZecl5GRlZeZlZmRlJiSlYyYo5qcnp2FiZ+TfJKWlZKUlJennaCipJ+en56foaGkoqKjoaOinJ2fnqOhppl5enl/cnBmZWZjamRham1ub15ZXFZWTlBKRjk5Ozk3Njc3NjM3ODk1NjEzNTI3PDs8QDs/PDw6ODo8OTk4Pj1APz9GP0JBQz89QT5ARENDQTw5PENBQ0RBQDozbKKdlZedlo+PmJiZmIiSjZGVkI+Vjo6TlpbKy7u5urnBu7q3vsG8vLu5sa61uri4u8S6vsC+vru8wMXBxsK+xsK5u8O5uLm8vcHHwca7uM7dzsPEwMPBwsHDwsO+vcLAwMHCy8PGzMvFyNHCsL6+uLq7u763tLC5vrO8vrG5tbi7tryztbm2uba5t7GtusG6vMG/t77Ev8bDw8fHwrvAwr/Cv7iys7O1tLGut7S3tbSxrK2xp6Wlp7CtqJ+nq6ajqKWmpqCgn5SYmZSRkZWUl5OYl5qhnZ6hnKGdoaWglpSbkZeXmJqTnpmZqaSlpKWdoqCanqCkoqOcoqGjoJ6cnp6ppaiVfXuDeG5mYWRiYWNkY2piZ2NbWlpcWVFPRT07OTo7Nzc5OTY0OTk6NTMxNDUyNzo7OkA9Pzw8OTc3Ozo5Ojw+QD8+RDxCQURAPz49QkRCQkI+OjlCP0FCPT44NVmfnJiTmZaRlZiYmpeQkZCQk5GTlJKSkpSUxce4tbq5wrm5vMPFwri7ubGxtry6tbnAu7u5tri0tLW/u72/ub66urTAuLW3sq66u7bAt8DenpDCv8G8u8W9u8HEwL6+uLzBwcu+vcnEwMDKwLHBv7u4u765tbe0uLy0vbi1tLCzvLG3tri/tr25vb65t7q+u7/Axb29y8PGw8TAw762ubq2v7i7v7y4trOyq7CwsrWzs66sq6emnqeurauiqKumpqqjp6iqo5+Ym52bmpicnJiXnJuhpZ2anqGhoKGmoJqbnJiboJ+dnJ+coKiho6SknaKfmqKgop+el6Shop+dmpieqKWhi3x5iH1xY2BiYmdqZ2ZpZWleVlZUWU9TTEY4PzY7Ojc3OTs2NTo7PDYzMTM0MTc7OTg/PT47PDs3Njk5ODo7PUA/PkA9PT9CPjxAQUNDQT9DPTo2PEBBQDw9ODdJlJibj5OUkZWYlZGWkpWRkJGUlZSTk5OYlcHCwLq8ub62uL7EwMKxvbqytLO4vLW3vMC8vbS1sbC1t7W7wbi+ub+8vLe0t6+ut7S3v7rQw32Gyr7DtbrHt7a5u725ura7xcXKvbnFwL+8wb64xrzCv7zFuLa3tLi2tru7uLa0t7q1tLi8vbm/ucPAwLu5vLu+vcjEvcfEw7rAvb62sra4srm0usLCureysaysq62yr7Kur6ijpJ6rrKyqpKakpKiqoqemraihoaGmn6Oiop6bnKKfoKOdnJuhn6KgpKCem5eZn6GdnZ6eoaWkoaKioZ6ho5yinqCZnZijn52eoJqZoKKmnYR6g4B4cW1lZWZvaWVraFhYTktLS1JJTEhDOT44PTs2Ojs5Njc8ODk4NjA0MzE3OTk7Pz0+Ojw6ODg5PDg6Ozs7PD1BPj09Q0E8P0NDREA/Pzw6Nz5CREE/QDg4P4mYmoyMkI+Tl5WMkpCakpGXmJaUlJKQmZTDvsbBwby8uLi6v7a8scK2tLyxtLa4s7q9v768sq2vrLGwt7y3u73BxLm3t7a1ubm5ub+/1513ganEx7e5uK63tbi6tLezu8XGy8G8xsDAv728v8jDxcW+xri1srK9uLi4vrq6uby6urS3u7q5v7zEwL+5uri/ubvFxr3Fw8Kyur27sa+2uLO3s7q+wLm2rLGrrqmqqa2qqq6mpKWnrq2ppaOio6GkpaWmoqato6Klo5+ho6Gcmpyhn6CloaCenZygnaWgnpeVmZ2fn52gn6KmpaCknpybn6Ofn5mcmZ2epJyWnKOcnqGcppZ+f4d8a25wZ3Brc2ZhbWBcVElLSkRKQkNHPzo7OD48Nzs7OTc4Ozc8PDYyNzUxNjk8PD08QTs8Ojs6OT45Ojs9PUA+RD89PkRAPz9BRkQ/Pzw9OTc/QUNCQEI5Ojl3nJiLh4uQkpOWjY+TmpOQnZiSkY2PjpiSvbfHvsO+vbu+vL22uri9ure9s7OwuLi1uby8wLeqraSusLe7s72+u8S2tbi3usO/xbzBzsSAd3mUxs/CwLivtbW8vri6sr7ExMrFwcnDwr+/vr3HzMfHxMe9tbW2wb27u7/CusDCv7y2t729vcHBwL+8ube8wru3v8W7wr++tbe8vK+vt7awtLO6ubq7r6mtq62rrKaqoqeuqKWqra2vp6Sgn6ajnqKjqKOjq6Oiop6dm5ublJaZnJyfpZ6fnpmYnpejoJyXmZqZmqOjop6jo6egpqCbnaCjnp2WoJmcoKCblJegn6WcmKKQgYaBcWZsaW50bnhjZ2JbY1FLVEhFRUNIQzw7OTg9Ojc6PTo4OTs3PD01MzY1MDY4OTo8O0A9PDo+PDk+OTk9Pjs/PkM8Pz5APz4/P0ZEQEE/Pjo3P0BDQz9APTo4ZqGYj4uNlZKVlY6PlpmVl5uVjoyMjY+bk7m2wbS/vLm8w8C+wLq1trKywLmvsry8sLe7tru8qqqjsLm+vrK8vrzEt7K6sKOnubO9x8yidHl6l8/RzMrEtbrAxMi/v7W/wb/Gxr/LxsO/wrzAw8zKx8XGwLm9vMS/v7/CyL3Hx8XFvLrEv7vBv7rAvLu7wMS9t7nCub69t7S2uLqur7WxsLCytre0t6yurKqsrKuoq6Gms6qlra+trKippaOkp5+io6Onoaeiop6cnZyamYyQlpeZnaKZnpuVkp2UoaCdmZ6fmJimpqKfoqKmoqeloqCko6GbnaCbnKKfl5WVnp6kmpafiYGDgXRvbGx0a2xuX2JeYGJOSU0/RUA/REM7Ozo6Ozo4Ozw6OTw+OTo+NDQ1NTE5OTo5PDtAPD89PTw4PDs6PDs7Pz5DPkI+QD89Pz9FRUJBQj87Nj9CRUQ9QUE6OlmfmJOSlZqVmpOQlpeclZuZlpSVkZKTnZm2uLaxuru6vsG5uca7trWypb69tLbBv66zvbS4wbGwsbPA3NvFub68xL64oHdrb3FrgJW4h3N+f5nKzMvNysbCxMvNxb+5vbm5wMO/yMbEwcG/xcDKycPDxMO5w769ub+8wsbCyc7Hxr66xr26v7m3wLm5vsDCvrW0vLi2u7CvsrK1r7Cvrqyus7CzsrirsbKxqrCrq6yrrLatqKyusqarrKmpoaWgpaakrKSmoaChnqGgnaCMlJeTm5+mmZ6emZOYnZ+gnp2eopuYp62ooqSgoKKqpqmhqKGlm6CgnZ2jn5SYmKKdp6Gfm4J7eoh6bW13e19wY1tdX19UST5DRUlCQz5DOz42OTo7Ozs7Ozs7PT05PTU2NjIxODo5Ozs6QTs/PDw+Nzs8Ozw9PTw9Pz5BQUE/P0FCQUVDQkRAPDY+Q0RFPkJEPztTmZuZmJ6dmqCalpyZn5KdlZ2boJWWlJqYur20sLu8wcTCv8XGura5sqO7vbS3xLuwtbq2ucS4tby2wYqt2MS+tsC+nX1kWmdSTlhcdnx0foKfw8bLyMHDwcDJysjBu7uws729wMXGxcS/wMG/y8fCwMjAusK7urO6usG+wMrOysS9tby8ub+5ubW1s7/Avre0s7S4rbeqr7CwsrGvq6+nr7ausrG5rra2uLSzsLGttrS6sa6srranrLKsraSjoaenqLKrqqWkp6elpaCml5ujn6SmraKeo6KanaWiop+foaWenrC0sKSlnp+kqaevp6mgq6CiopqipJ2anqGmp6+psZWCe32Bem5zeHNncF1bXl1ZUkZEQ01JQUU9SDs7NTk7Ojw8Ojs7Oz0/Oj01NDUxMjc4ODs8O0I8Pz46OzY6PTo7Pj0/QD87QUFBPj4/QkBBQkJFPjo1OkFCST9AQkA7TJqdnZ6fnZienZmampySoJWbnp+blZGRl8W+urbDvMbCvr/Ixbe1uLe2ubu0r7e3srWzt7m8u7a6wLdlbqbJwLa3hmJgZlRkXU5OUVRodHuIpL6/xsC5wLy+xcTAtbqysK2/ub/Dx8PDvb2/v8PDvr/HvLy/tLSutbW8vr/OzcvCt7K4uLi9ubuxtrLIwLu2tLGwt6yzqbCtrbS3r6uuqrG1r7Gvt7O6usC/tre2sru6wLWyrbO3rLC6r7KloqWrrK+5s7KosK+xr6qiqKGkraitrLOun6inpqWmq6Sknqaqo6ayuLOrpZyfp6anrquqpbClpaWbpKOYn6exrLW4sLKOhHl/fXZsdXtwbmlbX2BZU1BBRkhHS0BEQ0g8PTY7OTk8Ozo6Ozo9Pzw9NTU2MTM2OTg8QT5AOz1AOzs5PD04Oj08QD46Oj49Pj09PkBCQkJBRD03NDU9REc9Q0I/PEWUnqCgoJyXmpiYlZmdmZ2fmp2bnJaRj5LDwMK9wrzEvLy7xbu3s7e2tru7s6CWtayvsbS0tLa4uMu1bWdvmLW4hFlORmZMT3RqYE9NWHR6jqy4t8K6s7u3u73BtZ69rrCwtrO5wcLEw768v7u6uLbBwrW/urWur62wvcC5z8rJw7GvtbS0vbq+ubq7ysO7uravsL2xuK+ys7C3vbaur66wt7CsrLK2vbzEwrq9t7bAv8G3tbC2srGzurGxr6err6u2v7e1qbqztbmxp6uop7ausrG1uaisrK+qr7CqqKessayytr20saykqKuoqKusq6i2qaaonqadmKOuvLG7wbSmiYF8gnpzdXZ3bnFgX2ZdW1RKPT8/RkY9RkNDOTo1Ozk5Pjw8Ojo8Pj4+Pjg4MzE1Nzg5Pj9BPzs6Pz08Oz09OTs8OTs6Nzs+PT1DQT8/QUJEQkE8ODU4PUNGPUREPzw/iZ2en52Xl5WUk5aZnpubmpuYlJ2Uio6Owb7Dwr6+vrm2usCxtbGzt7fCtbOrrbOoqa61r620trjNtnl1ZXOcol5OR1V6TEhmfpSDW0N1iZmrsbe+ubK1sry5v6qIvLOzt5+ouL3DxsTAvb+5s6+yvLquu7Szpquorbq+uMvCv76sq7Cvs7q3ub67wMXBu7y3sLXEtb+0uLu0u8PCs7a2sbisqaWrsr23v7+7u7exvL28trGvq6uprbOvsLCrsLSpuMC2sqm0tbC3tq2spqu7s660uMKwsbG1sbK1saywsri4ubi+tLGzrqyxramvrqqyuK6trainoZ6ptr+4ur+wlol9gHxxdHd0d3JsX2NhW15PSEI/PUhDRk1DQDc3NTs6OT48PDk4PT47PT86ODMyNTc2OD8/Qj86OD4+PTw5PDk7Ozo8Ozs6PEA+QkI9QEE/QkI/PDs3OjxBRD5CQz8+QYqgm6GdlJiVlZKYmpyWm5WalY2bj4SIhru0vb+7vLm3s7y8rLOytLS2wLXAr7Kzqqqxt62pubO2x7OAeXFsi3ZRRUd0f01OT1+KgXBGUn6mtLC2urW0sqy8ub6fd7m8ubd2lL28wcfDv7m6ta6lrLOwprCtqJ6gn6WttrXCt7a0pairqLC2s7K6tbu7u7W4trC1xLK+vL+8ubrFybq9vraxp6SeoamxrrW5trKxq7S3trGopp6gmaWmpKynq6y2qa+6sa2kpq2lq7GrrKmtuLawsrjBtrGxtbGvu7ayt7W1sry1urKwsbKutLKqrq2nuLWyta2uqqiosrq9wLa0qY6Ce393b3tvdXJtY11mWFxdUk5OQT5KQkFKSUA2NjU7Nzg+Ojs4Nz4+PDs/OjkzMjc1NzU8PD48PDg+Pjw8OTk5Ozs7Pjs7OTw+P0E9PEJAPz9CQD47Njc6QERBQ0E/QUKJoJ2loJSWmJiVnqCcl5uYmZGMmYmDhoS1r7S7u7S1sLG2uq6wtLOvtbq1urC1s7Kttrqvrbyzt725jYJ6enlkS0d7fGFNSVFlp6VhTkpwrruws7WytK+su7jBjG+txbitXHa5try8uLaysa2tn6Snp52jpp2WmZman6muuayrq5+lqKSrrq6nr6yvsbGtsa6usLmwtLy+uLm4x8W8vLu4qaKcmJufp6assq6zqaapqq6popqXl5GcmpijnqKir6ekrKaompqemqGnp6anqa+2squ0trCqsK+xqbm2sbWxrqy3s7avrquuq7S1ra+rq7GtsbKoraurs7W3ur2wq6GLeoJ5cnZzbXRpbF1balRdXFBNSERGTEJGTkY4NjY1OjU6Pjg7OTc8PTo7PTo5MjM2Nzc3Pjs9Pjo6Pz48PDw6Ojs5Oz47PTk8Pj1CPDtAP0A/QT8+OjU1OkBFQkRBQEJBiJ+ipqGYm56dmqWpmJudmpmUjJmHhoeGrq2uuLmxsqiur7iyq7CwqrK1ubm+tbK4tLm6trm7tbWzv52Hh4uIWkR2l3JbWkleYFKRcW5toMG4s7SysLGtsLm4v3JnoMKysKelsa65rqqrrayjqKGdnZ6XmKGVkpWXkJifqK6ko6Sgoqeio6mpoaanpaqtp6ynqKesq6yyu7SztLm6trK2ramgmpaWm52fq6yqr6Oko6GpoJuTjo+Qk5KSmZaanaSloJ+ep5iVkpSZnqSjoaWqrK2iqaqppKmtrqW0sa6xraqprq+wraWmqqSos66trKmmpqmrpqqnq7Ksr7Oxq6mWgX+Bd3J4aHRzbmRUYGNXXFFOTEhASFFETUM9ODg3NTo3PD46Ozw4OTw7Ozw7ODI0ODk3ODs7PDs4PD0+Oz08Ojk8Ojs9PTw6OkA9PDw7QD5CQEE/Pjk1ODs8RkFDRD9BQYijpqKjnqCfp6Coqpufm5yZmI6Xi42PjKqpqLGvsK2lp6ayr6mmq6CvsLu1vby4wMG+vLy8ua6sr7aplo+TqE9KfbNsanFda151cWNjboexubGts6+urK22t7Rdg6WrpJ6dnZyeqKieoKipn6GnlpuXl4+dk4+Qlo6Xm6SooKCioqKlpZ2jo6CepaCkrKSmqKSio6OrrLOuqa6urqeqraisoZyamJmYm6moq6ufpqKbo5yVkIyPj5CTkJeVlpifnp6amKaXk4+Slp2ioKWipqSnoKKko6Ghq6uksq2qrKyno6yuraufoaKkpK+srKmmo6KqpKqqpKmrpqmsq6agiHiDfHZ/emN3bG5cUWhUUE5HUE1MQk9RQD47PjM5OjU7OT07Ojk9OTk8Ozw8OzkzNjk5Njo7Pz06ODs6Pjw6PDs5Oz07PDw9PjxAPT88ODtAQEE/Pz45NDk8N0FDQkQ9QEOOqqSjoqGinaulpqimoZ6dmZ2PmJWTkJWnpKGmqKmlpKChp6uhnKKbp6u1sry9wMLCwL7AuLSnpKyps7OirZVMVHKmc3R9jHNObm1lcHBuk6i2qrK0rqqrr7CwobGmnZGYlI+YoJ+ioJykpZ+eqJSblpeMl5GNkJeTmJ2iqp+fn6Cjpaicn6ChnKKfo6innKehoKSfrKisrKCpq6agpKimrKOdnp2Zl5qrpqqxo6WonqCclZOQj5GQmJCWlZiXn5ibmZqjmZeUlpqdoJ2nqKWgo6Kho56doKmqpa6upqipoaKqrqqnoaCio6msq6eppqShqaKlqaalpKKmpKijkn18gHV2fW1re2RoVVFjTUpIR09STUpORzxFQDwyPzg1OTs+Ozk5Ozg6PDs7Ozk5NDg7ODc7Oz48Ojk8Oj07Ozw9OTw8PD49PUE+QEJAPTc6P0FCQEA/ODU1PDpAQ0BEPkFGlq6koqWeo6KpqKipqqWmnp2imJiZmZWbop6bnqOioKOgoZqgmJeXlqGorK62t7q5ure3u66ooKGooK3Bv6hXWnh1bnFaX2RiXFlbaWxiZnODsq+us7Wqpqyro56ZlI2RlpeZmZygoqKcnaWem6SXl5eWkJKRkZOal5ugpKqeoaGepqeqop+gp5+dn6SnqZ6jpp+qnaqtqq6nqLClo6Smp6ymoaShm5ier6iusqulqqqgmpiYmJWTlpqTlZWalpuXl5ihnpycl5uhmp6ao6eln6GioqOdm6Gmp6aoraOppZ6kp6mkpaWhpaSsrKmmq6eioKSjpKenoaCgpaKmoIl7gH13eHxkeXlgYlJVYEhJSktTVElSUEw5P0I2Nz02NTs6PDw5Ozs4Ojw9Ojs4NjU3OjY5Pj0+PDk5PTk9PTw+PTs7PDo+PTw/Pz9APT03Oj5AQEA/Pzg2NT08PkFCRkBAR6CupKaroaOqrK6tp6ypqKCipp6bm56aoJyalZmfn5uen56WlJOXk5KcnqSorq2sq6uvqq+pnpeepZ2ev7d4Y3J8ZmdlV1paUUpHS09QTFViX5uysLC4rKahnJ2alJeampCOkZWRjI6OlJminJejmZqXmJmUmZiWnZufpaapoKajnqeurqumorGjmqSmpqqioaqiqaSosquxsqu5qKarp6urqaysp6Cgo7GusrC0qrKuopmcnZ6hmZubmpiZm5SWm5aZnKWhoJqjoZqcmZ+kop6gn6KmnZulpqWkpaijp6OepqOinqaloqWlqKykpq2noJ2dn56gpaGenqWgppmBe4F8dnZzaIJsZVtTWlpNUUpOT1VMU0xBNz5CNzg9NzY6PDw9Ojw5ODo7PDo7OTc2Oj01OTw7QD03ODs3PTs9PT06Ozw4Pj09QD5BPj4+ODg8P0BAPT43NTg9Pj1BQEZAQUihqqCrq6GkqquwramtqaelpaWkoKGfnqWXl5SYmZ6YnJ2blo+VmZKRnJihnaqip6Cep6Gln5ySm6KanqmnnYdhWGZoXE5KRkQ+QEJFQkNMVk99sa2sr6efnqKglpCTm6CbmZeSk5+coaSbnpuWn5qfl5uinqWhnqSfpKitraisqKSstLe2sKe0rKKtraOvpaSmoamorrWzsr23vrCssa6tqaq0sbCoq6iytbezuK2ytKSgnaWfrKGhoqCgmpiWlqCbm5ikoaCeo6GgnpqcpaCfnZyhqJ+fp6meoaOkoKagnqehn5ymo5+ipaOooKmrpZ+dnZudmqainpyjnqeQgYJ/fHh1aXd1XWxaUmBIUlVIRlVWSkJMRz1LSDhGPDc3Oz49PDo8OTg6Ojs6PDk2Njo8Nzs+PT8+OTc9OT47PEA8OkA6OkA/O0A+QUA9PDk3Oj5APzo+NzU4PT0/QUBEQEJGnKueqamipamprqimqqWmp6aoqqGlpKOmkpOVmJacmpqcmpWTmZuNk5+ZqJ2un6eenKGdnpqZkpiem6GhoJ5/Y2VmWEpCSU9mUktBQz5ARklIX6Oqqqmkn5+ZkpGTmJiWlpWMiIuOlZ2dnZ2el56Zpp+gqKWxqqeuo6uttrC0srGutri9wLqttbSwt7CutKmmpKWsqbmztbvDvMPBtrq2q6+xube8r7OwtcG8t72zs7WirKKpqLKpq6inqJqZnpqqp6CZp6Cfn6enpaSfnaqiop6bn6igpKetmZ+jnp6nnqCmnpycoqGbo6KhnZympaWkn6KZnJukn6CboJyjiYWEfnZybWl2bWhtXFhcQ1dOSkdNR0JGTTw+TD00PDk2Oj0/PDs6Ojg4PDk6Ozs8NTQ6PDg5Pj4/Pjg4Pzk8Oz0/Oz1BPTo/PjxAPj8+Pz08Njs/QT07Pzg1ODw8QERCREFCQ5WqoKapo6mqqKmjoamgpqinrK6lqaWpqpSSl5mUmpqanJiYmZyamJmqoLGit6Swpp+enZ2XmJWZnpqco6CLd2tfUktDRFZ/i39oRj06Ojk4UYWqramqpZ+en6KjnZ6dmpyblJOVlJ6emJSGnZqhmqukrLKwubKysbKxur28vLm2uMO+v8K/trq7wMS5vbusr6exrbHCtrjCxsDIysDKv7C5ub25wr64s7vGw7zDvLezqbOtqrO1r7Ouqq+jnauntrGtoq+moaOvsa2wpKWvo6GgmqGnoaSqqpmdoJmao6CmqKGcnqKemaSenpiYo6OhpZ6mmZuipJ6fm5ubnIeFgXt0cmtrdHJxaFZcUUZUSERKUEk/RUE0Rkc5NTs+Nzs8Pjw8Ojo4OTw4OTs4Ojo4Ozw3Oz49Pj02OEA5Ozs9QDw9QDk3PD07Pj0+PUI+Pjc6QUA+PD45NTg9Oz1DQEFDQkGRqqGlqqelqqimn6KnnKasp7Gyq62jqayVkpWalJecoqGbnqCinJ+psqu7sr+rr6ylnqCgnJyYmp+gmp+fdWleVEpGREZns8TBjV1QSUJPe6qyp6OjoaCepaulnpeclJGZnZiUjIqGiIZ4bYigpKKrq7O8tsO+vrO7wcPCxcC/wsbGxcPIwsDFx83QyMvDsre1vrK+xbu+zM3FzMzM0se+v8DCvsfGwrfEycnDwca+urS6urW7t7C1sqq6sq67t7+7uqq3rauquLq0vK6uuaOmo56mpaKjqaaZm5+Ymp2nqqegoaGkmJSjlpSZkZydn6Sep5+en6KdmJmUmJSIhH16cWtjaG94a2VaW0ZLTEVEU01EQkU3Oj87NTQ5OTc5Pj87PDs7OD48Njo9OTw9OTw9Ojs9Pj4+NztBOj45PT45PT44Nzs6Ojs/Pz1CPj83OkFAPTw9ODY2PDo8QT9BQUE+kqugp66ooqulpKKipaGlqquwsq2upKmmlJWWmpaUm6SmnaGqp6KrrLy8v8PBsrK4p6Ghq6qhnJ6hoZ2cl2pXTktJSEhTfdHLtJOcjoKWr62hmZubnp6Zl5eXkoyOlpeTjo2Qi4KDgndzcW5xjqWssLm9xbvNx8u/wszOzczHydHMzczHycXFzNHS1c7Tyb3Av8O7xsXIxdHTzdPQ09PMysLFxsbKyM6/yNHMx8XHxcG8w8G/v7+2vrOuv8DDw8fEx8Suv7iyuLzDwsK6vLy1rqenraigoqmlmpagmpmdqKupo6SknpePm4yQmYmVmJugn6OdnZeempOTi5WPhYB5dHNlYmdyb2ZeWllDTkxERVBJRENANTU1ODpCPTY4OkE+Ozs+PDk+PTc6PTk6PDg8PDw7Pz8+PD0+Qzw7OkA9Ojs6Ojg4ODk7QT48QD8+ODtBQTs7Pjc4Njo8PkI+Q0FAPpOvn6ivpqiro6KloKampKuoq62qrqKqo5Kcl5ebmJuirJ2frqalsarFxszOzb+wwaikqKytqqCdo56cnpNcTUNGSUlZZpK6rI2DtLmxrKOenJ+al5aUkpSWkZCPjIeDg4iHg4CBgYB5cnJwbHimwcrKxcrB09LTyM3O0dPR0tHQ0dHNzs7Qxc7U1djS183Gx8nMw8XKz8rT19HX0tXW09TIzMbMzcnSzc7TzcXIycrBxsvHycnGv8Ozs8jEy8vLz8bKv76/vcHHxMzMyMnAw7+tr7OonqKqo5qTnpyYnqaprKSlppaXipWFkZSHkpKSmZualpiQm5WQjIaRi4B6cnV2Z2NndmlkVldRRE1GQElRQj1CPDoyMkE8RTw3OTxCPTs9Pzs7Pj05Oj48Oz44Ojk5Oj86Pj1APkA8Pjs+Ozk9PTw5Njo6Pj08PEE/Pjk6QEE6OT44Ojo6Oz4+PEE/QT6QrKKiqaanqKSfop2qqKOso6OnpqyiqZ+To5iWn56dpK6bn7CrqKyxyc3U18/Gu8esrbO3rK6jnqOinaGeXkg+REVXZoasn56hraujnJycoKShnZqUk5WUiX13cGtlYmhxb3F7hYqAdnBucXNviMPPzcjR0NfW1tLWzdTW19TT0dPU1NPP0cPQ09bY1dbSy8nO0cvGzdLK0tXW2dXX09fYztLKz9HMz9DM09C/yMfKxMzMzM7PxcbHtr/Kv9LNy8/Gyci/xMPHzs3Q0c/NysjNuLe7qJ+lq6eemJ6jnp2qpa2pqKiSlYiQhIyRho2MiJOVmZCWjJiSj4aHjIR8eHN2cGNgZHJiXVJcSUpHQUVJSj47QTg9NDU4Njs4Njo8QD07Pjw7OUA7OTo8Ozs8Nz09Ozo+Oz08Pjw/Ojo8Ozs5Oz89OTU7PD48PD0/Pz46O0BCOzk/OTg7PT0+PzxBQEQ8hqugnKegp6Oim6CbqaSlqaCfoaGmn6ifmKSimqmmoqarmqOwsamotdDU19rSx8bLtLXBxbG1qKGkpaChqXBHRUVIYoS8xKqrqpuUl5+cmqCgnpucmZWJd2ljYF9fYF9eX19dYmx1c3Fwb2xycXWPvcnF1NbX19fT1s/V1NrU1M7P1dTU0dHM0c3T19bT1dDP0tPRydPRyNDX19jR19LY2dTWzM/Pys3Ry87QwMbDyMbOzdHR0cjMzcDKzMbTzszOyMTKx8fIzMrU1NHVz9LM08G5xbGlqLWup5uorKWdsqiws6ysk4+TjoiKj4OPi4SQjpmNk4+Zj4+ChYx8enFzdG1hY2ltX1ZQX0pKQ0ZDUk0/PD41NDo9NTI4NTU8PEA8Ozw6OTpAOjg7Oj46PTg+Ojo8QD08OTs9Pzk6Pz07PTw9PTo2PD0/QD08PT0+OjxAQjs5PDc0Oj48Pz89RkFEPYKknKClnaWlo5mcnaSeo6OfnZ+doJqnnpyhqZ+vraqqq52mrreoq7fX1NXZ2dHO0L+8zMm2vq6mqqiho6+CYmtqepzCv66on5eVl5manJ+dmJyckn1wZWNiX19hX15hYF9gYF9gZm1wcG5rb3J3d5nKv9LV09jY1tnR0tLXz9POy9LN1dTSys/M09bS0dbNz9XV0cXR1MrQ1NXWztLQ2NjX18vIzsTJz83KzMDJwMjKzc7Qy9DNzszOz8jL0NDLzsrCycfJzMrL0tPN09HR0NDKvci5sK67uLWqtrCtqLits767sZqPn5SRjo2IjpCFkY2ZjJGRlY6RgIWIenZvcG9rYWRucGFXXFpJRkZETVhFO0A9MzM8PDg3ODY1Oz5APTk8PDg8Pjk8QDtAOj04Pjk4Oj88PTg7PkI6Oj08OkE9PTw6Nj08P0A9PDs9Pjg7QEE9Ojw4ODs+PD4+OkVCRT6Bn5mlp6Cfo6eam5+cl56eoZqdmpyappufpKefuLa1taykrK6+tLDA2NLX2tzWzs3Kw9LPwcCwqaytqaeWe4iMqc3OsZualZSWm56enpyTlpeUiGteXl5hZGJgYGFhYGBhXl9fXl1ibXJvb3N0dXZ5pL3L1dDV09PY1s7O1MvNzsXOytLSz8fOzc3Uy87TzcvX1tDM0dTLzNDS08rO0dXS1dXKwMrCxczCyMnDzMPFyMrKz8rNzNDN08vGyM/NyMfLxcbBxsrMzdDRxtDOzc3Mz8XHwbi5vcPDvcO4srK+sbvDw7WqmKWimZaRlZWSi5SNmpGUlI+PlIKJhnlxcmttZ2BgcGhYWGhWTEZMSVBRQjtDPjs2Nzo4Ojo1Nz09QTs6PD05PD05PT06Pjo8ODs9OTtAPD47Pj5BPDk9Pj1CPTs3NzU/PDw/PDw7PDw4O0FAPDo8OTs7Ozw9QTpFQUU+hJ6bqK2epKSqnJ6fmJKXm5+am56ZmaKVoamppcTCwb+7tbKxx8K4y9XV2drb2MzMz8jW1cTCta+0qKCueGWDg7rOqpSNjJeVkJORkZWWlZCLfGVhYmJgXV5hY2FgYF9gYWFgX11bXWdycXFyc3FucnmjxdLOy9DP09TKxcnJxsa/w8bPzsfFx83K0sjLzs7G0dLQzczUysfLzs/Ix8/Sy9HPxrrEv8bJvcLHyc7FwsjAx83IxMzKy8/IxMTQyMbCxsjEv8HHzMzMz8LKy8jHy9DExce7x8PIycLPwL28v7DByca5vaqwsqelnaKcmJCbkKOZl5mRlZiJj4J3b3Rka2BeZnBhW1dgR0hIR0lNVEc/Sj02NDM1NT09NDg9PT06Oz08OTo7OT89OTw7PDg6PDo6QD1APD09Pjw6Qz48Pz04ODk6QD4/Pjw7Ozs7ODo+Pzw7Ojc5PD49Oz49RkFDPYOgm6qupa6qq5qdoJeUjpedmpmgmpqcm6WysazJzcrIxL68us3NxtDV1dna29jQyc/P0dPIwra7u62ksGZmfIzRq5COjZaPhoODg4F9hIR+c2BbXl5eYF5gY2RjX11dXl9gYF9bWlxha3Jyb29rbG9vfbfQx8nKzsvNxLrAw7u7urq+ycbCw8DDyMvJyMrIwcXMxsjLzcnEwsrJwcLM0MXLyL+5wbvGyL6/xs/Lw7/Du8nHyLvIxsXKwL3Cy8bFxL7GvLzAw8XMxcW8wMrCxcfSxcDJv8rJxsjG0MPDxsOvxMvHw8q3v7y6tKmspKWYn5iso6Glm6Ogm5R7d3J0ZmlaYW5sWltYUkRMRkJHRExERlNANTQzMzQ/PTM6PDw7OTw8PDg7PTtBPTo8Ojs3Oz05Oz07PTs6OD4+PEI+Oz88OTk7Pz07QD48Ozk5OTk6Oz06PDo2OTw+PDs+O0NCRD5/pZypsqm0rrCdnp6YnImUm5man6Kfmp2ov7i8ys/RzMfCw8bNzs7M1c/V2djZz8vSzc3OyMG1w76ysqRdanOmuI6KkpeGeoCFhX92eHVycF9bW11gYGJjZGRlZGBcXF1dX15gW1laXGJvcm9raWtwb3KPxbzJxMu/xsGwtrqysrOyscK8vLy6uMHBwcW+vbm9v7nEysXGwr3GwLi7xMm/wcm7t7u7xsO/vMHNw8a+vrXBvcO6vca7wrqzvMXEwsK2v7W1vr+7zMO8tbrIur++y8TBxsLFycbJxtDGwszHssfJw87NwMXDwL2zt7Cyp6ioubClrbCqrayUenZ3amRnYGhvY1ZeWUpGSkZISkFFQkVJQDk6NjQ4ODU0Ozo7PDk8PDs5Ozk6QD46Ojw6Nzo7Nzo7Oz88OjxAPUA/PT8/Oz07O0A8Pj4+Ojk5ODk3ODo8PDw7OTo8Pjs7PjpAQEU+fqygrLWqt7SyoZ6fl5qNlJaan52mop2et8XCxMjO0srKysfNzc7RyNDG1dTW183Kz8XJxcfAucW9q6+SXW52qJKLiIuFeICGhn9+hHt0dGNcXF1eYGBiY2JiZWViXVxbXF5cXl1aW1xeaHNxbWdnbm9yeJy8y7/CusC3rrCxp6qtrKe4tbe0s7O0u7W+srewta+yvMK8wcS8wLu1srq+wLjHubS7tsHCvLi9xsHDu7Wvsra6v7TEt7u0q7i9vcC9sbq2sLa6s8W8tq67v7W3tMW8vsPFwMPFxsjLxcDGxrvHy7/PycfDxsLDt8O9vba5vse/rLW6tbe2jnl0eGdnZWJrbl5WXmBGS0hISkZCREFFRT88OjU2NTYzMzs6Oz06Ozs6Oz44PEE9PDo7ODc5OTk7PDo+Ozk+Pz1APz5CQD1AOjo+Oz89PTk6Ojo4NTY7PT48PDo7OT49OT86PEBAPIi3pauzsby8sa2foJmUlJiXnqujr6qnpMbLzcjFyM3M0MzNyMrIysnKxNDN0s/NxcfBxcC+ubfJtqqwiF5xgZeNhYiJe3h+hoZ2d4F8c2hdXV1dX2BfYGRhX2NlY19fXFteXF1eWlxbXV9rcG5pZmptbnJ7pMa+uLe0r6usp56iqqeeq62zraqsqbSut7Gyqa6mrLO8urbDubq6sau1ubu0wrqwwLG+vLu2u8e5wratqqiwssC2uL2wsKeys7W7vKuutaautq+7srCqubCtu667uLvAwL65wr/Hw8XAvMbBx8q4xcfFv8fEw7rExsK7xsnMy7O5wr27s4lzdnZraWBibGhZV1dbQUxLTUlFQUM/RkE6OTo5OTU4NTQ6Ojk7PD07Ojs+ODtAPD05Ojc5Pjk7PDo4Ozs6Pj45QT0/QD87Pjo7PDo9PDw4OTg5NzY4PDw9Ozw6Ojs+PTs/Ozs+QDyKwKuouLe5w62zqZ2ZlJaZoZymsLWxt6bFztLLw8XBxdDHzcHDxr/ExMPDysHJyr6/vMC6srS0w66psIxobISSh46Pe3h+ioV6e4SAd25eXVxcXV9gX19kY2JjY2JgX11aW1paXVpaWlpcZG5vaGdoaWtucYGsuK+0raWkp6eaoKWhmpylq66kqKKsqq2qsKSmn6qttbaxvbmvt6+prri0tLy4tLyvuLm1srvBssCupamjq7Gys6i9qquoq62ttLOmqK6hpK+psqanqK6mqLessbK3urq8sby9vr7Ev7XCwcfIt7/AxbfEw7+7v8TCvsTIzMq/vsTAwKmHc3RyamlcYW9kV1ZYUEhZUlNLRkZFPj5AOjc4OTc3NjQzNzo5OTo8Ozs8PDc7PTs7Ozw4OT44PTs8Njo9Oz89N0E+P0A/Ojw8Oj05Ojs6Nzc3ODg3OTw7PDs5Ozo8OTc5Pjw+P0E7jMKvrry3ucSwtrCbmZWcmKqpsLGztb2vxdDPzMPIurrLwcq+u8m2vcO+usm3wcPBtLW7tbCutLutp6mNaWCGhIeLgHt9f354dH58c3dlX11cXF5fYF5fY2NhYmBhX15dXFpYWVtbWVhaXF9ma2ZlZ2Voam9yhamkqqWem6GllJ6km5iRoaOqo6OgpqWopa2gnZykpqyysLa3p7CsqKq0q7S6sba2rra5sq+6urG2pKCkoKaxp6uouaqkp6eop7KtoKemn5ukpqyen6ejoKGxra2ssrSztLC1vLa7wcGyur7DwbK5ucOzwb2/tbi8vb68wsfEwsO+wMSgg3hxbGFmX2tvYFRZXkhOZ09UR0VLRjw9Pz06Ozs4MjU1MzY5OTk7OTo6PDo3PD88PDs8ODg8OTw6Ozc4Ojo8OTg+Oj89OTg8Ojs9Ojc2NzY3ODg2NjY7Ojo7OTo7PDg1OTw6Pj5AO43ItbW9uLrAur21oJ6VnaGmurars7O7s8TPyMvCxri2x8DMv7jJt7vFuLPEuLO+wKu1u7GrpK6yrKChjWRvh4WGgHx5dXNvbWpqaXBpXmBdXFxcXl9fYWNiYGBgYF1cW1xcWFlYWFhWWFteX2RjYmVnZ2dqbW+HnKiflZWaoZacopmWjZ+ho6ecoKCkpqKnnpuim5+rsK2xtqOpqqqsrKS0ua23sKyzta6yta6wqp+en6SisqSmqbitoqamoKisq5mfoJ6ZnZ+lmpmjnJudr6mrp6qsrK2xsrivuLm7sLa8vLqrs7O5s760trKxtrW/tr3AvcPBu7u9l4R6c2xfZV5kZFhUV11JV1xLUEdJSkdBPD8/QDs/PDA0NTM1Ojs5Ozg5OTw8Nz4/Oz07Ozg4PDg5ODw3ODo7Ozo7Pzo9Ozc4PDo9PDc0Nzc2NzU3NDY2Ozc5Ojs6ODo5ODo7OTo8PzuJyba4vru3wcHBtKSkmZqkpsCyr7astLfGz8jIwMa7u8PDz766x7i3vreywbSxu7uruLmwoZ6oqqaXnpBmfoWGf3hybW9ta2JeYWZmXV1eXV1dXF1fYWFiY2NiYV9cW1taWllYWFdXV1hYWFpeYmRkZWZmaGlrcYynnJOUlJuYm6KXlpGcoqKpnpydpaaipZygoJuZrq6urrKgpqKuq6eitbGysqyor7KnurOmtaCin5yjoa2joqq1qqKjpp6lpqOWmZ6XmZudoJqXnZ2dnK2iq6ekpKatq7O0qrWws6uyubSvqq+ysrO4s66prK6yuLG6trq9v7ezsZSFeXVmXmVeW1lWU1pVS1tRS0lFSEtJQj0/QUFAQToyNDUyNDk5ODk7OTo9PDY9Pzs8Pjs3Ozs3Nzc+Njo+Ozo4Oj07PD06Ozw6PTs4Nzk3NDY1NTQ2Nzg1Ojo4Ojk5PDg3Ojg5PkA6gci9t72/tr68v7OdpaOYpbHCtba9rbS4wszIxr/FtsHAxs63wMS9s7m5sr+2sbi6rLG0rZ6Zo6ifkpqHbn+DhH94b3F0cWhlY2hkY1xcW1tdXVxbXmBhXl9fYF5cW1pcWllYVldXVlhXWFdWV2FkZWNkZWRkaGp2oZuTlI+Vl5egl5mVl6CeoZ2WoaGppJ+eqJ2cmqunr7Crm6OkuKqhoK6otqqmp62wpLiwpLegopyZmaqmoZqsuK+ioaScop+gk5ShlJaWm5iXlpeclZ+qnqmkop2jqqqwrqi0q6qnrbOwpauus7Gwr66vpqensq2xtLC8tLm3rqOUgXl1ZF5hVllXU1JUS01eTE9LR0dMTEU9QT48Qjw7NzY1MzQ5ODg5OTo5Pjo4Pj47PTw8Nz49Njc2PTc7PTs5Nzk7Ozw+OTk6Ozo4Njc2NTQ1MzEwNDU2Nzk6ODo5Ojo3Ojs5OT1AOnbAvLS5wrG+uLyunaeoo6q7wL3Aua60uMHMx8XCw73FuMjLssHCwa28u7S7vLS4ua+ur6ibmKCnk5CKgHyAfHdxaWxydHBoaGVkZmJcXFpZWlxcXF1eXVxbXF5cW1xZW1taWFZXV1ZXWFdXV1ZbYmNiYmNiY2RmaYGWk5WLkpSUnJmdlpacoJyflqGgpqakpqefnZ+moKqvpp+ipLeooaGiqLSipailsKWxrqy1nqCdlZWpoaKUrbGxn6KjnZ6Ym5OLoZSRk5iYkpeXmJeep5ynoaKZo6Wlq6SlsKelo6urraaprq+uq6iqqbOlpqyvtLGvvLWxr6+gknp3cmVhXFpdWE5MUkdSYU1WUE9KTU9FQkQ/OT02OTo3NjQ1OTk7OTg4Nzs4OT0+Oz47PDY5Ojc7Njs3Ozs6ODU6Ozo7OzY8Ozg4NDc3NjMzMjEuLzI1NTY7Ojg7Nzg3Njw7Ojs7QTh4u7uxtb2wu7G3rJ6lp623u7zBxbqxubXEycnAw8bFx7bFxLLCv8Wqt7e9tr26urWyq6ymmJeeoYuIc4WHfnZuY2FmaWhmZ2lmam1gXVxbWlpaWlxdXFtcXl9cWllbWVlaW1dVWFdUVFZVU1RSVWBgX2BhX2FhYmRqgJOTiZCPlJOUnZWWl6SZoJedoaWhraakpKOjopyqq6Wan6WxqqChnaWrnqihnq2sqamuraKhopWYo5uckKupsJygop+el5mTip6RjZKTlpCYmJOcoaOdpKCilaCipKabo6uloqSqo6uupa6yqaalpqa0pqmorbO1tLm6r6msnoxycW9gW1dWVVJHUU9IWVtPUklUS1NMRUZJRDg7Oz08ODY2Nzo5Ozo5NzY5Nzc6Ozo9PDw2Ozw4PjU5ODo4ODY1OTo7PDk3Pzw5Njc4NDUyMTIxLi4xNDI2Ojg2OTg1OTg5ODk7OUA5e7W0rbS7sq+rsa2dqKevubmzwMi6tcCvxcjMusHKzMi1ybyxvsPIrLG4wbW7wLu0s6mqpJSZmpuHf3GIg3t0aWlqbGdqa21ram1lXVxcW1tcWlhaXVtbXmBgXFhYWllYV1hXVFZWVVRVVVJTT1FZXVxdXV5eX19iZG2Oj4SRh4+Rj5qTlZOcm6Ocm6GpqauorKeopqSZpK+llZmlr6qfnJmboJ6vmpyrs6Clpp+io6GUk5uWlpKpqayanJ+hoJqUkIyZjoyQjJGNlpWQnaGgo52bo5WboKOhl6Koo6Koq6CrsKStt6WjpKKtraqoq6+zt7O+tbKrr5iFdHNoW1hZU1VSRVhMUVtYTVROUExQUUlOSUI8Pz9BPz03NTc5OTw8OTg3Ojc5Ojs8PT47Nzs7Oj02Nzo7ODk3Njk4OTo2Oj05OTU3NzU3MTE0MS0rLzQzNDk4ODo6ODo6NzQ4PTg/OX6zraeztq6oqK+um6morLe2q7zKu7a/rMvGxbjBzs/Is8S6t7vCyLCtuL+3vL26srSlqJ+VlpeVhnl0gHZ3bm1obW1tcGdnaWdkXVpbW1tbXFtZWltcXF5fX1xYWFlYV1hXVlVUU1VWVVVTU05QUVlaWlpdXFxeX2BkfoyBi3+MkYqSjZeRl5mioJugq6qmrqyosKSpmp+toJWWpKinnZeQj5qerpeYqKqZn52UpaCekpCSkZOVp6qlmpmZnp6VjYyLk4aJjYOPi5KVkaCeoaOYlZ+VmqGinpSbpaWnqKigsbGmsbynn6Ostauup7C1sLi1wLGtsauRfnJzYlZUVU5SSkdWUFJRTExXTUpMTlJHTUtBQ0ZEQz5ANzU4ODk7OTo3Ojo3PD06O0A+Ojk7OTo/NzU5Ojk4NzY5NTg3Nzk7ODU1NzY2NjEzMjAtKi4xMDI4Nzc7OTk7ODk0ODs4QDh/s6ylsbeqpaKxq52qp6mysaS2xrS5urPKxbm6wcvQyrG2uLu9wcOxr7G3rbSzurKyoaKbnJaWk4J+dmtnbG5xbnFqcGtkZWdlXlpZWllaWlpaWlpaXFxdXFpYWFhZWVdYV1VVVFJTVVNWVVJOTk5SV1hZWVlZXFxdYWqAen92iY6HkIqXiZSUmJuZnqmboKqmpaydqJqgppyTj5+jm5eXhYSSm6OQlaOdlpaWiKKbm5SLjoqQmqSnnJWVl5uRkYeUjouBi42AkIqSkpKgmqCilpSYmZWippmNmaSmqKahoLSyp7K3oZyit6yqraSysqa1vLWsq7GjiXlzbV1OUVFMT0NNTk5QS0ZOTkpKTk1RSE1KQUdMSEdDPTg1ODg4OTo7Njk6Njg7OTk+PDg6Pjk7Pzg3ODk6ODg2ODU3Njg4OTc0NTc3ODIwMzAxKyktLzEyODc2Ojk5OTk4NDk4OEE3d7ampLawpKekqqWgqKWls6qissO1tbKzxsa3usPKzMazrLq9tLfAr62psJ6mrbmurJ6YmZyUkoZ6gm1fX2ZycHVxaW5pZWdoal9YWFhYWFlZWVpaWVtbXFxZWFhXWVlYVVZSU1JQUVRRU1VRTU1LTFNXV1ZYWFhYW11hb3N2cYWIgoiAkYSPi5SRlJ6hj5uco6KkmaWXopyVjYeYmoxzjYN+jZeWhpGakJSOjnuZj5yMgol/iZifo56Qk5iWhY2DlH5+dIqOepCHk5CQnZqampGVkJ2OoqOOiZqgoaOkm6K0r6yvrZ+YpbimprGhsK6csLuqqa+qmYN3c2NWTVJPUE5DU05MUUxCUFFISU5STUhKSkRKTEZLSj03NDk4ODg7OzY5Ozc6PDk6Ojs3OT85PkA3OTo8ODk3NjQ0NDU4NzQzMTI1ODUvMDEwMikoLC0xMjc2NDc4OTo6NjU6ODdBN3i3oaO0qKalqKOmpaamprOnpbTBuLC0sMnEt7nBzsa9s6y6wautw62noqaSnaa1q6KejpSVkY59dn1lV1ZfZ2ZpZ2huY2poZ2JcWFdYWFhZWVlZWVlaW1tbWVlZVldXV1NUUE5QTk9PUFNUUk1NSkhOU1NTVFVVVllbXWlscm1/hXx0TlhykIOXh46dl4uUkZ+YnZWUlpWPlomAk4lfO1ZvfIuUiYCMkoyQhoZzioWWgXmBe4aTnZODlY6RkIOGfZN4cXCFjX2JgZGNj5eamZOLj4mciJ+YiIeWnpqhoJenrqmtqaielq2zoqatmayrmKizoqmto5N+cm5gW05TUldMRFRKUExMRk5PSUVMUU1LT0pJTVBGSUk9NzU5OTk5OTo3Ojs6Pj44Oj09Nzo/OD4/NTg5Ozc5Njc1MzMzNzYwLi0vMzQ0MTEwLy8oKSsrLTM4NTQ3Nzk8Ojc5Ozg2QTl5t6CjraGmpqqgp6ioo6qwqKe0wbmwtbDHwrezvc+/ua+utcKnqsWpop2Yg5Sbr6GYloWTjoqGfHJ1XVFMUlVZWlddXmJnY19ZV1dXWFhYWVpZWFlYWVpaWllYWFZXV1VTUk5MS0hHYlxNT1JNS0hGSE5RUU1QUlRWWFpgbXBpe4J0UUJAf5WSkn2JlY2Eio2bjpaViZKIhpWGeYl/YEpRbniKkYR9hI2KhX9/bn5/lHd1dniEjZlvUY2IioZ7fniUdmd3hoh9iomVi42RkpeMhIqIlYSajIKEkpqWnp2UpKOoqaWknpqwq6GkpJGmqpaiqpyipqiJdW1mXltIUVFTTUlVTVNJTEtPSUhGSk5MTVRLUVFPRklDPTc2OTo4Ojs7ODo7OD4/OTk+PTg7PDY7OzQ3ODs2Nzc1MzQ0Njk2LzMvLjEyNTIyMS8sJykrKiw0ODMzOTc5Ojk5Ojo6Oj85d7abo6edn6Gvoaeopaeor62qtby2t7ezwbu2p7nIuLaoqLW2qrK8pp2Wjn+Jk6iVlIl9jYOBfHdwblhNS01OT0xNUVdbXFpYWlVVVlZWV1lZWFhZWFhZWVlaWFhWVldVU1BNSkVAQJtrc3NJTUtERERJTk9oWU5RU1RVWm6DdHd+amlcVY+JlIl0f4eBfIWMk4KSmouPe4aPgHaAeHNudXB0jY2Ben6Kq4V5emh2e45wcm14gYuNknh6gHuAdnJykndodYSEhIV7lYqIio2LgH+Ei4yAlIN8gI+YlJyWkZ6dqZ6foJ2gqaWfnZiMp6SToaCWnp6kgHJoYVxdSlZPUkdKWFJPSkxNUkpKSkxQSExRTFJUTUVIQTw3ODs5OT49Ojs8OThAPzo6Pj03PT03OTkzNzc4NTY3NTI1MTQ3Mi8yLiwvLzIwMC8tKygoKS4xMjcyMTk4Nzk4Nzc1Ojw7N3aumaOimJyftKmvqaWsq7Cxqr20sru4trq0sZ+3urKqnZ2sqaiyr6GakY2UgI2bjZB+doV3e3VubmhYS0hJSEdFSEhQVFRUV1dTVFVVVVZXV1dYWFhYWFhYWVlXV1VWVVNQS0Y+OTNOPH6eTUhKREA9QURqlH5MT1FRU1ZedYN8eGZ3jZeYjY99aHmBdniAiY99hJiSgXGHj3x3e29rfq18c5CKf3uGkoF9f3RmdnyGbG9oc32JjIiAbHlxfXFtdo9xaHGBfo5wQ4uEgoOFf3d3eouFfYx7dX2Oko+YipKam6OWmZ2anZ6hnJaNiqSbjp6XjpaYj3dvbWViWlhYVVFKU1VUT1BOUFZLTktOT0pRTkhPT0xGRDw7Nzk7Ojo/PTk8Ojk5Pz87ODs9Nzw5OTk5MjY2ODU2NjMzNjExMjI0LiwsLS4uLTAtKyonJyouMTM2Mi84NzY5NjY1Mjc5OTV5ppegnpagpq+srquoqbGvsau8uKy7vrmzrKebsKesm4+WnKWppKCXmY6EknmIjYqJdXB7bXRwaWxpV0tGR0VBQENESUxMTVFSUFFTVFRUVVZWV1dYV1hZWVlZWVlWVlRTUUtENzhmNzA/qGlOSEM9OzpEioV6WkpOT1FUWF1lcHJtiKeqwH51eWN8eG98eYiQen2Lhm9tjJJ5dHhqaoCCcZaRi4F+loBJk5huaHd+gmxpY2x5hZCShmtzbHxucnuGaW1wf3ONiYSGe31+e3ZvdHOFgnmBeHB8joyKlIOWl5iakJKVl5mXnZaMg4mekYuSjYaQln9uaW5vblhVWFRSUVlPUlRUU1hVTU5ITktNTktDSE5HRT86ODk7OTk6Pjw5PDs6Oj0+Ojg6PDk/ODY4NzI3NTY1NTQxNDMyLzAyNCorKiotListKigqKCcsLTEyNTAsNTU2NzQ4NUhBODk1d5mRm5man6WtsKOsqqi1r66stL+rvMK/pqKZlaSXno2Ei5ShoZiYkZOLc456f4WLhXRudGtwbGRralhORUZDQDw+PkFGRkdLS0tNUFJSUlRUVFRWVldXWFlaWVlaV1ZUU1BMRTFAmjMganNDmW87PDk1PICChl9JTU9PUldaUVlcYKeIYpppdHplf3Btf3qLiXaBiIZ0bJqRdHN8amudj015hZKJhI5nMXaGc2x+foN0ZmV0foSEhYBmaWx1a3F/fGhxcXxuk42PfHN9fHFwbnVtgn93eXVqeYmCiImElpKSkIuNkZSUjpeNgHmIl4iGioaAkIh2ampvaGVYUVlXWVlbTVBVVllYTklIRUpKSEdCQEZEQ0c9OTk4Ozk6OTw6OTs6OjpAPDk6PDk4Pjc4NzcxNTIzNDUzMzY0NTAzMS4qKispLCwrKykoKycpLCwyMjYsLDU3NzU0NzhpTzg7NW6SiJqRmZakqK6esp+nu6+rsrDCsbvDx5qWj5SZi46GeYSQmJSNkIyPhnGHgnOHjIV6b3Jwbm9kcGZfVEZJQz88Ozk6P0BBRENFR0lMT1FRUVFSU1RVVlZYWlpZWFZVVFNQS0U4MC9cYLNHOVhQOzk0NDGWuotITE1PT1FWTEFJUUlir7Ogcnx4bH1tcoOBhYF6hIaGeXKhlXR4gHN1lIc1cZ2onY6hoYSihHZwhnyHfHOMrY2JgGdmYmpucmxwg3Vpb1h1cI6bkndsf3t9bXFtcIB6c3VuYnaDfoaAhZCQioqJkYuRjIuOg3V4io6AfoOAfY96cXBva2BbXF5cWVhgX1JOW1pYV0xISkZKRz5CQUJHPkNEPTs5Nz07Ojs7OTo5OTs6Pzw4OD06ODs2NjY1MTEyMTI1MzQ3NDUzMS4vLCwrKSopKSoqKikoKikrLzNETTIxNjY2NDM8dlI3PTdikoGTiJaRnaSnnq+VpbWqrrGuwbK7wcaWkIyUj4CIfW6BkJKJg4qHj4V1goNslYiHe3R4eGx3bndjaV5JUEc+QDc0NDk7Ozs9PkBCRUhMTExMTlBRUlVVVldYWVhWVVRTUExFPDUqnUtbQC1nSTk0Lz+Sg6muX0dMTU5QTDdDTVJTREqGdoB8fHZ+bXeIiHx+hYN/jH52opl5foaAhJmEm5xhhqqfnYuDkI16d4h+iYiNc4qXkIN6XWRxdHp7d4ptaGpieW+FkIJ6boF3dIR6cHR5d2tuaV13h3yHfIeHj3+LkpeDjYWMhn1xhH+DfXV3e3yJdnBzdGVnX1tbXVRcZ15XUVVYW1VHSkpETEc/RkBEQz5BQT06OTc8Ozs9PDo6OTk7Oz0+Nzk+OTk4NTY1MzI0NDAwNDY0NTU1NC0sKSsoJycnJigoKSkoKCsrKy8wMFVxPTIzMzMxRX5XND05XIx4ioCUjJKcnZ+mkaCroLGor8CxusW6lo6Rk4d6hXZrf4yRgn2KhI6MeIOAc6GEi318gX5wgH56Z3ZrUldMQEUyMTEzNjc2ODg6PD5BRUdGR0pLTU9QUVNUVVdWVlZUU1BNRkA6Mj0gI5ZjjFs1MzExaT9Hb0lGSUxNT1JMS1RdWVJKaYSIe4l5fHF8j4x6fYmHfpeHdqGZiIePkpSljaypSIaur6+LgYCTioKLgYSSqIeAmJiKnHRtfIGGh32OaGdoeH5uhYeChXGEhUdsgHdyeXZobWtfd32DiH+IhYt6lZ2biYuIkX96dYt2fHhtb3d9f3NzcmxbXV1bY2NYZ2ZcVU9QVllQRExLRk5JQ0ZDQ0FAQ0E9OTc3Ojo6Ozs6ODg4Ojo/PjY7Pjc1ODU3NzMzNDQyMzY2NTY3Njg7REZMTU1MQzcrIiUnKykrKywvMDArbnUyMjQyMEyBXDU9PF6EdHx9iYWIkY+WmJKXoZ2soaa4r7O8s5eNkouYi310cH+Jkn59jIKSlH2Gfoakh4h/goiFeIeIfnOEeF9jV0tCNjAuLzIzMTIzNjY4Oj0+P0JFR0hKTE5RU1RVVFRWVVNRT0dDPzgwLCOHWz4/ODQuXZZwc6NVRklLTU5QV2BZcFpcXmqNk4eVgISChZGTfoWIkYGalYKhoZiVm5qlrZOZu7Gnu8fDqIuMoaWPlImBkXxxg56fkZx/doWFipCIkGlob4OAdIyHhItxhYJ3h397doV9bnZ1ZoCUj4aJiYeIh6GqopaJjph/eoKJenlvZ2t4fnp+cmpkXlpaXWpdYWZgWU9LTldSUUhQSkROR0NKREJARERBPDk4Nz08Ojw6ODg3Nzg6PT04PD02ODY1NjYyMzQ0NDU3Njg2NzxCQj88ODo+Q1FeZVxHMicmLCwtLS4xKD+LWy4zMTBPg180PztudXBmeIN7gIyAgZGOipqbpJ2hrKarr7CXkZGDoZSEeHd/jJR8f5KGkpV/ioCSm46DgIGMi4KJjYN/iX9tcGpdQkE0LS0vLy4vMDIyMzQ3Nzg7PT9CREhKTlFSU1JTVFRSUE9IREI8ODcvOUQ+PDw2My5sk5dNUEhJS0tLTlZgY39nZ211nZqPmpOTi42OmoiTj52LoKCSo6qlo6yTqLaiqMHDrseveLqUmnyNoZ6ZhJOFgo+hn5OYkoSLhY+ZkZZscHWJi4KWjI2Pd4+EcWyEgYqWkYOFiHKIoZaHk4mOj5altambjZWig4eTg31/a2prfICBgXNhXWNeWmZrXGxrXldLR09TUU5NTEZJUENETUZBQ0VGQj46OTc9PDo7Ojk4Nzc2Nzs6Nj06Nzg1NDU2MzQ1NTY2NjY4NTU2MzEwLiosLCkoKS46UGFcQCwoLSsrMCwncog3MjQwT4RiM0A8dW5nWXCCcHWHcXaShn6XlpqVnp6cp6CplpOYnmdlpJp+hJKReYCSiJCSfYqEmJKRgoCAi42JhZCGhIiFeHh+Z01SPi8uLiwvLi0vMDAwMjEyNDU3Oz9DRU5QUlRQUVFTUU5QSUVEPjs8OkNGPz48NzUyPD9SNUhISExMTU5SXm+KfHOBfaCdnKilopmhl6KVnZ+onqiroKisqaq1l6u+q7bIyLfJ0c++m6Bwaaupn4STkoWcoZqbmaeRkYmVopqaeHp+lJiSoZKWmIGUnnt2lZKrsoiNl599lJ2cjpOWmaSiprawnZGZqIiWj42BiGxzcnx/fHFoYFxgXmJnY2BoZ1tSRUpLUE9JSkxGRk1DSExGRkNCR0RAOjg1PDw4OTk5NzU2NTg+NzU9ODQ3NDU3NTQ1MzY5NTg6NjE2ODYzLzAuLSosLy4tJyMqO1hiQigqLDEtKEuXXjA2M1GFZjJBQGlhXlBwdWBufWF3jn17lI6Oip+Sl56Wm6qYnqpCRH2HiYeYjXiCjYqOjXyKho+QjoGCgImMioSShYOGiYGAhndfYlA0NjAtMS8sLjAwLy8uLjAwMTU+QUFNUVJTUFJTVVJOU0xFRUA8Pj1HR0BBQDg2NjI8OTtGSEdJSk5PUVlthpB3lYujp6q0vbikrqysp6i0q7C2srKtu7Gzvpyzw6y7ycu3w7+4paOwsqytqqOLlpiFpqagopeBppmNoqqopIiFlKShoKqhpKmPnLGLlaOnt7uboKOwk6Kdo56RpKKrr62ztaKUpKqImYmSipV5en6FfmdgaFxlYl1kY19mZl9aT0NJSFRPRkhMRkpHRUZIQUtGQ0ZGQTo4Nj08ODg6OTc0NjU4PDU0PDc2OjQ0NjQ0NzM5PDM4PDIwMjU1MS8xLi0qKi8sLSooKiYlNVhYLywwLCwwhIE4NzFQhWg1QUNbWFRMaWNXanBYeoV2gZOFiIKbg5KRjJLayJ2Wc1aXiI+InI98hoyOiop6h4KHkY+DhYCLhYaHkoaChImGiIeHcW5hQEU2NDwyLzExMC0sKy0xLi0zP0RBTVVRUlNVVVdVTltQR0dEPD4+RkhDREA4Ozw1Qzs9RktJR0hST1BXgZOghK6js6qxwcfDqrPFtqyzv7O4vra/tMG2u7ujt8WotsnHtb65tKijtK2xsZuZkpqfiaevq6WUdp+kl6GrsbOYlqqtqK62u7K6rK+1orGrsbW7t7SutaCnp6OomqmwrbK6uLinm7apjKWOkZOfhniCg3VZYWRWZWFhY2BhZl9bVEpERUxVUUhJSkRJR0VBQEBLREFNRjw4Njc7PDk3Ojk4NjU1NTcxMTw4ODk1NDY2NDk3Pj0zODkxLjAxMjExMzAsKiwuLCsrKyooJyopRVowMCovK2iSTzYwUodqNkFGV1FKTFtaUWNkV3l1cYGUfYSHk3aFf4CMe7+7o7yCtJSTjZuPhIiPkomJeYaAjJONh4SBjn+BiY6GgIaJhYqHkXp4bl1WQEVNPDY6NDZBQjc2NC8vNkNIQ1FbT1FVV1VcVk9eVUlLSkFAPkdLRkVEOz5AN0Q3P0JKSkVGV1RQXo+lraOxtMO2uMHMyba7xL2zs8C3t8G1v7C3dLGzprrFpK/GubGzsbSopLW2qrGgoZabopKlsK6mraunpJigrLO6oqmyurS7vsy/xcW9vbPCt7q4vre6t7msrLCmsaqtvrC9u8LCrJm6qJSuj5eXq4l9gnxqV2JhWGplamVXW2RZVlRJR0dMUUdDSElBSEQ+P0JCS0BATUM5OTY2OTo/Njo5OTY2MjQ2LzE5NTk5MzY0NjI3Oz0/NjoxLi81ODo5NjUwKigsLS0tLCwqKCgrKyhFUy8qMDBKj2s1MlCHbTY/RlJMQUxSV1RZVVp2anB/j4SBjoRuenN5h2K4oZmjiZWTlpOTk42QlpKHhnuGgY2WioGEgIp6fIuHhnyKg4GKg5V9eHp1ZU9cZEdFTDpRY2FbXlNGPztIUERaY1FRWVhZZ1lUYGBNU09FQT9JSkhFRkFAQzxFNkI+SEdKTFNaVF2Tr7i1urnJv7q9ycy7vMC8t7W7u7e9tLqxxmB1sqWxmp6qvaqlqKuqo6KytaGrqJ6Vlp+Yn66lp6aln6OUoqaxtKeysr22wb3TycrTxsLFy8HKw8C+vb+7vLe0sLm3tsO6xb3DyLCeuaqiq46lqLaJgH9xX2JiXVdhX2hmUlhhVlJWSUVFTktBPkdEPUtCPUJAPUY+O0hANzk2Mzc5PjQ4OTo1NzA0NS8yNjM4OTM3NDQyNj84QD5HS1JUU1FQT1FRUEpBOS8sLCwqKygoLC0sL1A+KC40OIB9PDJLiHE5PkNLRUBJTVBSTFFdZ2xscZCNhZBzbHJyc4jVwLWZoI2VmJmRjpeSlpaOhod9hoOMlop/g3+CeHqLg4d7i3mBioKXf3R9emtlcHVZXVxQZWViYGVkXVtYV1xNZG1VUm1tX25fWGdlVVlUSkRBS0tIRklISEdCSTlEP0hLVFRWXFpbkrnAub23xsC6uMrLure5tri5sre1tK62tphkdaicrXBeoa2cmKCim6Seq6WUoJ+QlI6WmJeon6WfnpqahKSdrKWqsKy3sL251NHP18/JzNHMz87KxsC/wsq9wbzBwMTExcq/yM60pLuwtK+bq7m8mn95bF1fXFhdYFljY1FcYFNQS0NBRUZEPEBFPkJIQkBEPTpFPj1KPzQ3NTM1Oz00Njg5NzcwMjIvMjQxNjk3NzU1NTVEM0VMTT41MS8wMDY6NDc3QElPSTstJioqKC0uLyxATSsvNTRtiUkwSIl0Pz5CREBDREZLT0RSXFlpX3CXkpCUb2xvdXWIs6yhoZ+LmZyZjI2VkZuShYqKfoiHjJCLiXyBg3N7ioOFe4l0gYmGlX9ze3hrbXV7aHJlaWxpZmppaGBmaWhsWm50l62kvIiHZ1tvaF1aWVRIS05PSktRS1RRSExBSkdLUF9eYmZpYZe3x7C5s7u+tbHEx7WvubCwu6uysaeqt6yNtqedm6eaT5qdjI6glpGmmKWVipOTiZCJj5GRnpuhl5qVloeemqabrK+or6eztNTU1NbSy8/U1c7Tz83FwsnQv8rJysnSx8zNwtDSuLDDvMS5pba6xKKCbmNcXF1YYFdYZlpRXVdPT0JCSEVCSTtBRD5BRz8/Qjc7Qz5ASD00NjY1NTs6Njg3NjU0LzEwMTQ2Mjc4ODc1MzY3QzVCOD8tMC0xMzQ5PTk3LC4sMTtGSz0pLCguMDAwN0s/LTQ2VIhXMESHd0M7Qj5FQkFDSk0/VVlTZVdzkJCYgmhxb3l5g6CqnqaXjZubl4uOlZGajn2Ji4WOioqLkId8hIJwf4eBhnuHcoOSi49+cXh1a3F4fnF7bXhzbGmBcG1jaW5weGl3fH7Lv8Lfp21jeG5jW2FgSlBSVU5ZXlBeXU1QTlRRVVRcbm52gnKXrbistKewtqusvMCxq7WmpbinrK6hq7SjjrGumpiYjJGTkYSOm4GNppGciYOLhIqJhIuDk5WYl5ObkZyYmZmenquspKehrK3P0tXRzczS09TQ1NHOyMPU0cjN0tPT183S0cXS1sXAzsfHw6i+t9Ceem5lXWJcVmBSXVtPUFRQTkg+QUZBQkU8QEI+RUQ+QD86PT08PEpBNDU0NjU8ODg4NjY0NDEyLzAzNTI2NzY4NTMzOz08RT1AMTErLzI0OT41OTAxMDIyLTJETjMpLzMuMzI9TjIzOEN9XzJBhnREOj09ST5AQ0ZIPFZSTU9bdYaFindsd3B9fn+hnp6hi42Zk5OMjJOPloV5hY+QjYuKiJGHf4J7cn5/gYd5hHWFk5GJf292cmtzfHx2fHOBd3FrgHNyaG9xenlye77Lmn6MsoN2coR2aGFqXUNaWltXZWRYZWtTWF1cYGNdY3h7fouBmaqkpKGgoaimqrC4qqW0o6GtoqOtoqexn4mmmpSSkYmRjoiBlIlqlaKNmYSAhX2Rg4OTlq2LlY2VmY6FkpCdl6ewoaChpKSoyM3PyMLL0dTR1NLO083G1tLM1NjW1tjU19XJ1NrNydfX0cqsxMPLi3NvYmBfWFRZUlxQSkdJSUpAOzo7RUFEPEJEPkhCP0JDOzs5PDpHQjQ2NTQ0PDU2ODc1NDMyNTAvMjU0Njc0NTU0NDw+PUU/QTYyLy0xNjs9MDgxLzI1NC8tLTtSMDE3LzUzMkZEMjg+bmI1PYF0TTk5QEk8QUQ/QTtQTEZLWXCAdX1oc3hygomAnZWdlIWLlomPioiOh49/eISUmYqNiIiLiX6DeHN7fYOHd396h5GWgINueHBtdX92eH1zhXx5bYd2dG59doR1eXudtYw8QYvGpX6NfGllVklDZmNlY2hqZG94W19maGtuaW6Ag4mRi52eoJ2Ql5ifo6SmsqSks6ChpZ6hqaCjsZyGnpKSkpCLjouGg5CEfpybjI2DhIV6lH6CqZWjjJKKl5KLfZeKmpGqs5iam6ecp73Dxri2xs3S0NLQzNLLydTO0NXa19fY1NnYzdjbzsna2tLVv8vMtHh2bmRdWVJVUFpWRkdKSkVFPTo3OUBBQjpIREBFQ0FDQjs/Ozs3REM3NTY1NTswNjg5NDQzMzQxMDE0NTU4NzQ0NDQ5QD5EQkM8MzMuNkZUV09RSkFKRj8xKiguQlMzOTI1NC83Szc1PGBiQTxzdlY4N0FIOj9DPjw5UUVDSlRsbm9wYXFxc4aNfJeRnYt+h5KCiYaFioKHfHiFlpeIj4OHhYd6hHlxenuEhnV6hY6NnXqMcHxvb3p/cXuBcYOHgW6OenR3fHyCdX98h4iwdFipwraMkoJwbmI9XmhycHFwbnh3gWVpb3J1eHJ7i4eOk5KblaCVh4yTm6Cbn6qfoK2copqZn6Wen6yZi5qMkZGNhH2Ih4OFi46gmZOIhId+bZl5hJiGiJOMjZSLhnubiJOPrqqUlZeemKautb2prb3Gy8jJy8vPyMPRytTW2dfY19Tb19PZ29bP29rR1snUy5V5e2hoW1lQUlNeSENFSUk+QT49Nzo9Pzs+SD0/QUFBREE+Pjo4NkRCNzU1NDc5LjU2NjQzNTUzMjMyMzY0NzU1MzQ1N0VCRENFQjU2PEZOU01bbmZjbnNrYVY+LDRMRzg2NTQzNEJGND1XX2hMdXheODs/Rjw8Qjw6OUQ/Q0dSa19tZGJma3aAiHGRkJqAeoCNfoKCgoR+hHx8hJeOh4t+hoaAd4J5bnt7h4F0eZKejaB2j3WCdHWBfXSAhG+Bj4JvkoR0fIGFenaGfIm3xqXCybeBlpuPd3BlTmZjgXqBd4aikIt4eXd7g398hHZtk5aUlY+YkIOKj5aal5emnJegl5+TkpejnZmrlpGQio2RgoyFiYiBhZCRnpyZiYWLgYaXeoiIn5ePiI2Ki4J8oYmQi7yhl5OXmZynpaWunqi1vsDAucfJzc7FzcrR1tbV2dXX29TX2drb19va2djO3MaGenlnaGVgVFdWVU1LRE5DOzw9PDk6PD45PUA2PT9APD8+PDk4NjdDQTY0NTU9ODA2NjU1NDc3NDU2MTM4NTQ1NjQ1NjdISD1ESkU3OTI1O0g+Ozo6N0lQXVpSVVhLOVQ+Ozk1MzI3STg9TllNSHh4ZDU9PkM9PUA6Njo+PkBFUV9ZZWFdW2h0enlsiY2Sd3Z6i3x+gH+AfYV7foGRiYSFeoSIe3V9dG58fYZ+dH6SnpGfg5J8hn54jn15iopugpqAdJiFfoGJhXx+kHqPqY+QwqC8jJyjnH2JhH2Jc4yKfnOmmpyYlIV7j5CJhGhHcKCknYyLkJKFiYuQkpWPnZqTlZGXjYyVn52UoZSSjo2Qi36Qjo6LhIiSlpqfn4mMlJKekYKLf6WZiISOgoaEgKWGiou4mJ2RlZahpqCdnp2jrra6tau/xsrQyMfMz9PS0tjS1dfA19jZ29ja2tnZ19y3eHh3a2lkV2BbVFBPSERNQj09Pjk5Ojo5OTs9Nj8+Pjw9OTo7OzM3REA4Mzc4PjcwNjg4MzU3PDM3ODA0OTc2NzU1NTQ2RlA1RE5JODkzOEFLPTszQ0BJPDlEV048TVRITj85NjMzMz5DO1tYPjVZeXBaPDxBPD0+ODU4OT89RFJTUlheVVhmbW1taYCOinFyeYp7en99f3yIenx7i4eCfnSDhnlzenNtgX6FfXeFm6GbnpSSgIuIf5iHgJySboeohXqgi3yQjoOIhJx+mpGKjaOin5CkrqCLkYuFi4GShldyrYufq5uPg5ibkJCOXIKikYKMn5OVjIeIjJKTjJSUlI+Mj4qIlpudj5WWkYuSlIWAi4iSjYmKnZaZo6OGkp2WoYqKiI6ckIOIj4CDh4WkhoyQs5ickpSXoaCemZKcnaexuKylvMLHzcfGz8zPzM7Xz9HUrtbV2NrY2trX1tnan298dGdnXF1YU1dYQ0BJRD4+Pjo0OTo7Nzo7OjM7Oz89Pjc7OToxOUc9OjM3PUA1MDY3NzI1NT82NTs1NTg1ODo1NzczNUhSN0dPSzk5ND1FSkI+MUZDTEI5ODpHWEA1SFdJNjYyMjM6RUNlWD8mX3lpX3o+Pjk8Ozk4OjxAO0JRS0tTWVBUY2J4bWJ+koNubXeLeHl+eoF8hnx7d4aEf3NwhYJ6dXZ2dISChH1/kqajn6Wilomdj5SXi4qol3KKsoyEp5GEmZOEmYuilqCYk4mbnaGSqa+fkZWQjY2IlYtujbeFmsTIspyhpZucmJaRspFkpM3Hlo+Fh4mQko2Nk5SKhYqKhpaam4+QlJOGlZeEf4+LmYiNkKqXl6SjiJmelpuIj4eXl4qEj4yBf4ePpYmNk6iZlpOWmaGYn5mTnJuis7Slo7zBvsfFxcnIycLK08zN1KjS0dbW1tja1NPazoJyf2hjX11eTkpUWkJBR0Q7QT04Mzc7PDo4PTY0OTo8OjgyPzk5MjlJOj42N0JDMzI6OTYyNjQ+PTQ7PjY5NDk7NTc5NDRLUTxKUUs5QTdCR0lANjRKRUxGPjw4OEVUQTc+XDg2MjE0OjtFYFhBRmF0aExjWj41Ozo6NTs6PjpFTUZIUldTUkJjgUZ1gY59fG1+iHh6fnqBgYN+dnaAg3xsbot/eXx4eHyEh4p9iqOzp6Oqs6GWp5+lpJaVrqKDkLiVkrOZjKGgjKSbr6OknZiQp5anma2vpJeVlpSQi5iZlqDAjqTJuKuboqatmJGbnbKdhoWoopyYhYiJjpWNi5OPiIGGh4iSmJSMi5OThpSYhoSRkJx0kZmzlpeloYicmZOPipCKl5qJipaOhn2MmJ6JkJCcmpmTmJiflKCdlZ6bobGuoqS3vrTFx8S9w8O/xs3KydKnzs3T0tDW2NPQ2LtyeXZcYFVfV1BISU5FQkNFNT46NzY6Pzs8Nz00MjY2OTc3ND01OzU8TDw+OzxCQTc1PDs0Mjc3P0A2P0A3ODQ5ODc7PDU1T01EUFJMOEA9RUFHQTU6SkVORUQ6NkFAQlM+OURPMzIzNTc1PXZcPFJcdGlaTV1TPD04OTU2Nj06SkZER05bXFlJZmA7SISLentuhYZ6fIR4gIWBfnB4fH19b3ONen2Be3iGi4mGg5Knu6yosr2vpa2zs6ijorCsipm1naO4pJWtpJaprbempKKfmamYqaOvsKmamZyUlZGXn5eZu7utyaFptrirsJSYnqOrk5e+o16qsoKJio2Uh5F8jo59g4aOj5SViIeSl4yQlY2LjJeYkp2ZtJeWq52Lm5SSjZCSjJmbipKekIuJlaChjZSNmJqdk5uYnpShoJScnaWvqKGls7irwsjEtbq9u8XHyMLRocbJzc3E19bRy9OhcHpoXVlTXlJPRkQ+PENBQTg/ODc0PkY8PDY8MzUzNTU0NTRCMzk6Qk06QTtBSEI7OkA8NzQ2PEI5P0BCODc0Ojo2Pjw0N1RLQ1VRSjc8OklBREA0QUpITkJBPzZEQTxKTkQvVD0yNTQ6RUpcWEpaUW1ncHBEaWBLSTY3NTc6PkpAQ0lQZUdiYGJwSUCLin6Bc4aHfYGIdYKKg39tfX18f3B3h3eNgYd7jY+MhoyZqsLAr73Gu7O0wby0rauztoynsq6uvKqbu6Sorbm4q6amoqGjo6ivsrGqnJykmJuYl56ipaWSo7muqMC7rK2yuaWkp32Ih5ysvbCDjIyLkIOPg5GPeoGHkIyOnIiHj5eNi5WXlJCalp2nmrGakaycjpqPko6UkJCWl46RoJGJlZujrJSWj5ScnpSgnZuYoKGUmp6npqSipLCypsHHw6+wurbFxMK+zafHw8fDvNXRzcTKiHRzYlxZX1tNSkJMQEVHP0E/Qjs6ND5BPD01PTY+MzMzMjQyQTE3QEJOPkdAQ05DQT1DPTs4NkNDNUJJQjo4Nzg7NUI+NzlWS0RXT0Y4PTRLQEM+NEVLSE4+QUE2QkI/QlNFNThQMTQ1Ozw4O0Q+OUxqal07V1JkS2daVU83OUdFP0NGXGZGYGlnWl1bk4yMiHuHi4aDjHWGkIqBb358gn9xfoF6lXqRlJSYkJOVp7PGyb/CzMHDuce8uq+rubuXsra6ssCupcCkq6+7vKqtq6KinaeqrrSwqpufqpuhm5WfsLSni6K6urXBu6upnLKlpKiUhY6qw8SkgouPh4iEhpWUjXqDjJGOkaGMjJSSjoiXn5eTmZWYpqCvnYyqnI2Vj5KRlJWNkJWRj6GUhpefoLKelJqUoKGZpJ+aoJyglJiepqSmpqSvraXAxMKtqLe1ycO+ts6yxL7EvLPRysjCtXR5bVxYXGlTTEhETEtLSkFBPUNEPDVBRDs6Mz04QjMzMjI2MkEwNUlFTT5JQEhSQEg+Q0A7Pj1GQTVBVUA7OTk4PDdFPjg+VkpDV09HOD80TEBCOzVKS0NMP0I/PEJGPUFITDkrRzwzNjc0NjRBPzdPYU9hRS89PjZrbGpgQDpIPj9FQmZaTWVcZlRjapmNl4qMiJKQhol5hpSQgXKAfI1/eIeCgpB5jaGWqJqamLq9yMjKwdLJysLMvMGzrbu+p7m/vbzEt6zBqayyu72qsKmjpaOsrbOttrWgn66epaKYo7S8qZuovMGjtravq5Kwrausl4aaqqalkYKMk6WViYB1ipJ6hY2RkJ6fk4+Ui4+NlKOZl5yVlKOfqp+RpZqMj4+QlZaIfI+VkpKjm5Wgopy1ppCel6Wko6WenqaYnpWXm6WjqKeisqyovMDEr6Wzt8zAua7Es7u+wbiswsPCwJhteWFYV1xbS0tNSkZERElCQkFDSzo0REg5OzQ8N0UuMTIzNTJCMjZTSE48SkJKUUVLQ0RFOkVMQjw3RVY9Oz04OT88ST86RVVJQVdRRjdBOks6Qjc5Sk1CSUBDPjxERzxCQ089MjBIMzY2MTcwPUI6PWpqSks1UVMzU3BwZE47RD1ARj5qSF9YYVpkZFaej52Nl46ekomKf4mfk4R3hX+Vf3+QiIqQf5Whmq6mo5jCvsjDx8XTzc7Ny7vBt6+5vLS8y7zDwbW2vK2zv7m8rq+ooKintq2tqbG3mp6toqehnau3t6mlr77Dsb25s6eqtbOtrpaWpayooJGOkrHFp5WOfZGVfYiRmY+qmZiTk4+TlZOlnpOdmZOho6KcmJ+Zi4yPj56IWpCWl5KWpZllmKOesqWWopasrKunm56ml5iXmJWhpKimn7arqbq8w7Sms7XLwbiptqyyuriuqLe6vbiDbG5aV1RVTkZKU05LP0FHRERIRkc5NUZNOz43PkFKLjMyMDI1QjU1UFZOPExGS1JMT0hHST5JUT86OElTOzs/Nzk+RExCQEhTS0BXUEY6QT9HNkE3O0hNQ0U7Qz00RkU6QkFCRzkvOkEzNjAzPkdEOTQ9dGRNRztFKzpmfGhXOz1AQkZCcUZpSVJlYkxGpZSclqGXqZaNkIOHppOIgYeCnISDlZCQlI6aop+vvq6hxrzFxMbGzs7O0sq+u7Wxuru8vs+2xL23ubeysbWzuLOsppyrq7iqqKevsJejr6SnpKS0wLCqrLS+wrnAubOnubW4sq6Vpa2vrqWLk5WhjXTBmn6XmYWPlpqMsZWamZWTk5mZpaOVn5uWmqmdnKGgmouNj5adYEqWnJqVmqWWVJawn6+cn6WUr66sppqgpZSTmZmOnJ+nopm0qaqzvLy7qrCyx8C4paurrbGxo6GxsrSkcW5mXFpOUEtEUFBQUTtHSklHSEJEPjlLVT9BOj1FTTA3NTQ0OkIzNE5XTzxKS09VTlFKT0hISk9CPD5NUjs+PTg6PENSPkRIUklCV05JQENBRjM+NThKS0NBPUM7NEVBOkE/PkhANSpCNTIsPmNdZzozNXRkZUBSNyYjM31pWDs6QkNAPVFFV1JzYldGSKqXmaCiqK+ZkZeHi6eWjoiShZ+HhJ2Xj56gmqOktci0qca6w8PHysjIzM3Gvrqzrrm4wcHMtsi6wbi1urGvrrK0p6ObqrO0qqimrayZpK6lpKisur+oq7a3v8G/vriyssOxub2so661rLqmiJyYppt2v6CFmZ2Ok5mai6+XoZybl5Wbn6GpnqigmpqqmqKnnpiQjZGdg252kqKalZ2inpCtsqOrlaiql6qupaSfpamTkpmciJScop6Wsaapq7q2vrOyrr65tqCjp6ilp5ybrKmpjGNlYV9SS01HSE5JVUw9TEROSktCQ0Q8UVU9QUFCRE8xOD03Nz9CNzVVWE4/SE5RWVNQUVRKUUpKRUFFTVE/Pz04PTtHUjxFRFFCR1lNS0FIREU6OjM5S0lCPkNCOTlDPjxAPjs7RzctMj4tMYJoTnpcLzBraGA8PUJCODZ6Zlc7Oj0uLlJgTVVIf2VeSEWrlJyhn7uvmZSfi5Oqm5GSk4mrjYein4ykrZSjo7bGvbTAusLCx8jFws3Iwr25sq+5tMDCyrXGscG8tLqrqK2ssKOimaq0uqappquqnaivp6Oqqr67p6y8s7e9xry3tbjAsb3As6m1t6u/pY+jl5GioLyfiZqgmZeeno+3n6mcpaObnKGaqKWzoZudppyoqp6ZlY+Um4uXiYylopSdop6gtK+lpZOwq5mrrJ6eo6OpkZWVoIOQnp6clamkoqG0tLq1rai1srOenKKlmpeVmaqhnndgXF9dSkhGR01RSU1FRkZCUkxKQUVHQFZSREg9QUdRMTtCNzpCRjc5XFlLQUxQVFVTTVdSTlVKREBKSk5POUM/NT08TlFDPz9QP0VaTUpBS0RHQDUzPUlHPz1FQTk3QTs8QDw8M0A8Lyc7KkiRQjpTSjAsW29XNzE8Kh1CgGRUNDktMTpnXEZDQ5xwYkdEp5ekn57DrJuXpJeZqZyWmpqPqpWVqKaVra2Zoau2xMK7vrbBwsDHxL7Nx7u9ubKvuLO/w8i1v6+8trm3pqOqrK2goJqqqsShpKirpp6rr6yiqai/t6atvbC3tse2tbm4v7G/wba0s7SvvqOXo5aUnJSuoJGhoqWjo5+QvqWpnaisnZ2hm6afvaKYo5+iqauhnZaNlZ6TnoePhY2TnqSgnbWsppyVsqeZr6ifmqmeoI2ZlZ+EjqGam5OlpJqYrLG2saqlqq2snJigoJKOkJaonpRoYllhXU5JR0pOS0hFRElBPVBJQTxHSUhbUk9LPUhPVTRCRjk+SEc1Q2FbS0NOUlVXVlFYVFJVSEA4UVFQTTpHQDRDSFFTSUM7Qz5HVktDQE8+SzwwNjtHRj47RkE1Nj85Oj85OzE1RDAtLDBNdlw0S1o1LE1uVzwtPSkeI3piUTVDS1E5b1JGPEt4ZWJWTKKao5yexayhn6ydna6gk6OflqWgpqmrl7axo6qytcTDvb+1v8K7yMK+ysi2uLW0sLOzt8HGtr2wuLS5tZ+mrKqrnZ2epaPBpaCprZ+kqa2voqanvbWmsby3trXDsrO3ub6yw8C3uK6ztbWjnaSVkpShrqCZop2pqKujmsOtqZ6srZubnpmmoL2inaWYq6uspqGZjZmfkp6Jjld/lp6loaC4qqeTmLajn7KhoJuulp6OmZSdgo6fl5WOoqSVkKatsqupoaKlpZWVnJiLj5GTpJ6JYWRaY2BMSEpKTkZFQUZLPj1KQjk5SktOXVFRST1MVlw5Rkk9RE1JOEhiXExDTFBTWVlWV09aXklBPVdRSUs/SEA1SE1YU0hBOkBBRFBIPz5RPks3MDk5RkU7OEc/LjY+Nzg+NzcvMT85MSUxUVVtW0pPMTA9Z1dEMTc9LSt3YFM2U1prV3JIRTY9dWVcS02en6GYnsOnpaKzoZyyp5OqpKCkn6yprJ27sKistbHHxMHCs8LDvMbDvMTKva+xtq2wtK+/xLW5sLC5tayaqLCpqZqdpaGnwqybrLGbqqKusKmkp722pre6vK62w62zs8K/ssazurestLatqqKmlpWVpKyin5+aqKuwr6+8sqagqamZmZiToqS4oKGkk6+vrKWnn5KhnpWej5CNlZ2aop+ntKanjZi0nKOvmp6brpCek5eUmoCSoZWPjp+hk4umrLClpqGcoJ6SkpqThYuRjZyef2FlW2dlSklMSlJBQ0BJRzs7Rz85OU5NVV5SU0o+T15dPUhQQkxMSTlNY1xMRUxSVFlbU1VPXGJIQT9aUUFIQUtCN0ZFTEtOPjtCSEROQj07TkBBMy85N0NCOTdGOys2PDQ2PDM1LS80QDErJ1Z0U2VPPzEwNGJbTTIzPjA8dl1eP1tVXmZyQDg8SJZ3ZUE0n6Ofm6DDqKSqsqGjtKmVsqynoqSyq66pu7KssLW0xr/Ew7XAxL3JxLXAyMK1q7WosLiswMS0t66strmlmauxq6qYn6aXrbu0m6iwm62frrSxp6q6sqe6s7eyuMCqt7LCvLTFp76urbe1qqisoZeXkqaloqOYmKWvuK6ytbagn6ikmZWVk6Sgt6KlppausrKmqqahnpuampaYqJ+gmKGer7Kipo2Xrpmlq5eanaSRm46Tl5mFlp+UjJCcnpSLqamqoqegmJ6WjI6ZkIGFlYmUn3hjaF1rak1QTU5UPUNBTkM6OklANzdRT11eUlZRQVdgXEJKU0hWS0g6VGRcTkZPTltXW1JQUVhdR0FCW1BCRz5OQzlIR0hOUD8/Q0lCTEI8MklBOTQxNzdCPjs3RTcrNjkxNDgwMi0vLjw2LSNCcWdzazIzLzFbYlozMzgwNnBbYkgwNUpwaFZDV0aMeWZDO6SjnKGmv6aor7ChqbWqnbmwq6OqtLaxsLm3r7a4uMS9w8e9vMPBxsC4wcbBuqq2pK27rcDCt7eqrLG7opWtsK2ylqWnkKq5qaCnsJ2qoLC0sqqptrWsvKyysrm3rLmwwrq9vqbDq7C3r6mrq6eemJmroqKgkZihsa+zq7G6m5ypoJmWkpemobeppaOir7G0q7Koq5+boKCbnqWcopado7Owmp+Qk6WaoKialaGelZiJlJiTlpeck4iQm5mUjqmop5+jm5ebk4eOmYt9i5aFj5tqaGxhbG5XUFFaVEFDRVRAOztJQTc6WFBkXlBWV0RZXl1NTFJOXktKPlpjXk5IUE5bVVlQS1NXWkk/RFhQREY+Tj89SUdHUVBCPUNGQk0/OjJEPzc3NTQ3Pz05NUU0Kzc1LzI1MS4tLiwxPionKz1ccD0+MS4xZVtkQDE2NDdnWWBGKD84bH1oW1Y7iXtjQz2nn5yiqb2hqrCro7G4qaW1s6ygrLS9rrO4vLq9trbAwr/IxLnEwcDAuMS9wbevtairt7K8vr+0qa6xtp6Xq62orZanqI6nu5+krbOeq6KxsLOsqba0tb2tr7G1rLC1scC6xLervK+xuKytqqOxpp6lqqCkl5CZn7Oqs6qrs5qdp5ualY2gpqS0rqeira2usaezrbKqpJyfqKSelaGYm6i1qZeZkpKfmZ6gnpCrnpeXhZWYi52ZnJOKjZaXmpempaKgnZWVl5OAj5SFeo6Sg4yWZWxyZ3BxX0ZZZlZEQ01YRFo5SEI2Pl1RaFxOWV1HW15dTk1SWGRKSkNcYl9QTE1OWFdYUEpWVldNPUVVSkVEQU0/QUZISFFQQTtGREZLPTg3Qj02ODcxOT48NjVEMCs4MC8wNS8qLC8tKj0sKyUyKyo1SzEuJ19fYVUxNTA9YFZeOClDM1lVXGdLNYx6ZkxApJqgpKy3o6yppa6utqmvtLqnprC3xbextr7AwbW0usW+zMW5wr+6v7nEuMG5srWsqrq2u7m+tKqtsLWYmKerqqubrKuOq72eq66xo6ugsa2zrq62sbm3qa2usai1r7O7vMmyqrW0sbWwr6ehs6CaqK2gpZWWm5qyo62gpq+WoaSampKNoqWnsqmip7Ksqralr7G1r6SZna2nmpifmZmsuKKXk5CPmJyhmJeUq56ck4CTmI2dnJqWkYqUk56apaGhoJiVkZOVeouQhXuMioOLkmtueG11e2BFYWpZSUhZWz17SkdFNkFiVGlbTVxgSltdWlJSUmJgTEtFX2BgUUxJUFdWVU9HV1ZVTjpJVklIP0NLP0VESEhRTkE/SEhIRTw3PT46NzU2MDk/ODY2QiwtOCwvMDQsKCwvLSo3NikoOS4kOks1LiJUYFVgLzUoQ15RXC4qQi9KR1BbSDNjWVRKRJmWoLCosamtpaSurrWot7S4pKu0t8m7tLq6v760tLfDwMzIu8O8tr6+wLi/vLG9rqe6ube2wbarrbG4lJemrqunorGqlK+7pKyysqeoo7KzsLGxtbG4s6iuq7GnuK+1tMPFtqm0tayxrqqno7afn6eyoKSUnJqVsp6nnKCqjamjnpuWmKWlpbenorK0rKexp66wtaylmaCsqJucnZuUqbiclI6Oi5mcopeQmKWgnpWDkZWQnZyYlpWIl5CXm6eco6CSlZCQlnaEkId7hYGEjYttcXd1e35cS2VsXEtOY1w/YntHSThHZ1dlW01eYk1YWVdUWFRpXU9PSGFdX1BKSFFWVVJLSFdVVk04TVpORUBGSz9IQkNLU00/P0xPSEA7Oj47NjswNDE8PTQ1OD8pMDcpMS4yKSksLC0rLTkkMDQyJTlCNy4jQU5IZjI3J0ZhTFYlLUIuPUVNUTwzcmpKQ0OQmaWupa2uq6eksLKzqrewtqCrtbnJua7BvMK3s7G1wsPOxb/BvbS9v7+6v7yzxKipubC2tr+8r6uzspygp7CtpaWwpZ6ytayrsrCsqai0uay0srWstK2prKirqbmtsbHHv7ikubCpra2mqK2wpqSkrqOpnJ6cm6+aoqOjo5CsnqSgn6Kqpaa5pay1taWqq6isr7auo56jqKqboJqakqS0mo6JjYeRoqCVjZSdn5OShI6Skp2bmJWUh5iTlZmmm5+fjJKQjZB3fo6FfHx9h4qJcXRyfn19XFNkb15OWmZdRkSWWkc7Tm1YYVtNYGJOVldWV1RZZ15RUkxjWltUS0dPVFNOR0lWU1xOO1BeSUJESEpBRT8/S1NPPjpOTUM8PD45OjU9KzMyPTYyNDk6KDQ1KS8sMSgpKywtKiY1Ki8mMCkzODoxJiozQmM7NipIZEhKKzpJPzNCSVMsPo9rPEdIj5uqqqKpsKSopLO0sbS1sbGhq629y7quwLvHsbSttMLC0cXFvsCyvsHCvL+3vMSnrLess7i7wLCrsq2gpKetqaiksKOqsaqvrLCur66ss7untrCyqbKpq6Wlo626rKqxwrm1q7moqKitqqixpaqkoq6qqKKenKOslaSdmJ6ZrJ2ip6mirKWjray4sbKgqaKgq66wrJ6fp6ipmaSYmY+gp5iGg4+Ki5+gj4uMlpuOjoWHkJWgnZaXlYaWk5OXpJydnIqRj42Jf36Ihnx3f4eFhnRzcYh1bF9ZYG5jUXNxXEs7hHxGPld1WGFZTmNbTlVWVVdQXGJeU09OaFhXV0tHTE5SSEVJVlJdYzxQXUQ8RkhIQkc/PUpQTDo+T0o9OT89Mjo3OyozNT4xMDQ4NSg1LyosLjMwOyksLCclMjM0JCwyLTg2MCkoMTxdSjAuSWdERjg8QjA1RUtYMUCUWj5MRZSXraeiqrKcqamvtqy4ta6qpauqvci7sL23wq+wrLPEw87Ow76/tMDCxLrBtMnErK+3rbK4v76zra6rpaeqsKmnqLGltK6rsK6tsbCzrbO7pLizrKyup6ufop6wt6uqrbq2pbW1o6mnrKyqraGpp6axsqOmpaGhrJaqoZSaoKaepKKrpKyin6ext62to6Wim6mqrqmdoqWkpJigmZaPmJ2TgoKQiYWcoIyKjoyZjZCLg4yXo5uSkJuMk5KRlKKZm5mKjoqKfIaBgoN6dICEgn50d4ujh3hqXmBuZ1dlh2ROQGeSTERieVdiWFJlVE1WVVVUT1xdYVVLTWlXVVdJSkhJT0JHSVNRWW9BTVhAOkpHRkVHPj5FUUg4Q0tFODdDNzI6OjoqNDk/Li80NjMpNCsqLCsuIzQuLSsmKCs3OSomNis8LTIsJjA2V1ouMEpnQUE8PEMrOkpPXjREhj9IRkSWkq+ko6qwmKuprbWrtrGrpauqqbzAwLi4s7u1pbKvxMnL0b/Bu7nAv8K5wbrBxK6ytbGzu8C+s7GurKurqLaqpq2vq7mwqLGxr7Kstqq2tae0tqyspKmqnKOes7OoqKS0tKC1raCpqKuoq6egq6uoubapqqqpoqmgrJuSqaGdoKSipqOpnZymta6opqmio5elp6eqnKKko5+ZmJ+Rjo+Zjn6HjIeEnp6HhIqKjo2QjISGlaKajoyakZKRj5Kfl5iWi4qDf3SGgX9/eHWDf3t4foGInY9vcWdncXhcYHOIak9dmFZIbXhVZFZSYlBNVVRVUE9YW2JVSFBpVFZTR1BZVUk+SUhPUVB4TE1WPTxLRD9AQTxAQ1VDOUFLPTU7RTEzOzk3KjQ6PSstMzQxKjgqKisqLCkqKC8qJiklMzssJDIpMjAyMSUvMlFiMDI/Zj1OWD9DLD5MVF8vSmo2T0Q7lY6woKWrrZmrpayus7SvqqWvqai6vrzAsK64rqG1r8nHyNHAvr27vMK9usPBv7+usrKxtby8wrGys6qzqKS1qaWts7O5sKOutrGvsrqrua6qrrWrqp6pq5+ioLatqKGfr7OhtKqeqKeqo6qhoqytqL2vrK6toaeon6uZkK+hmKKhqKefqJqZqrCpo5+soqGToqOjp5iaqKWXl5idj4qHlYh9jYaFhKSXhYKCi4aOjZCEhJOgloiRnZCTkI2RnJSXj4mFhXh0gX99dXh5gHt0c3ppgYajdWleZWuBdWeIi3xSWHBeSnhzU2RTUV5NTVJZZk5MVlllWUZTaVJRP0JOUWFROklITFNJcVFMUzs8ST87PD07QEBXPDw+SDczQ0IxNTo5My01OjopLTMxLS02KSgrLSw0MiMyKScsJS47LiYxLjAtMTQlLDBMaDozOF89YWQ/RjFDUFtbK0hOOVVBNJCPsZ+kpqujpqSsprSysaqksKequL7Bu6+nuaqnrrDJxsjRwry/vrm+v7zJvMG4sLC0sbq7uMCys7usuKyitKanrLK2ubOnp7u1rba9sLymray1q62cqa+jn6WsqqecnqqzpLOomqqnqaSpnaOpp6m+q7Svrp2ppKCunJuyo5WknKSln6SamqirpZ6bqqGbkpuhpZ2Yl6mpkZiak5CKgo+Ffo+CgIiej4Z/fYuHkI6PhH+Tm5OFk6KMlJKLkZuSlYeIfn9xenl+fGl3fHp1cHB9aIV4hIdkYGdjcoV6bWd5XV5WQld6bVRhT1JYS0xOcXRdSFpbZ1lFVWZQRD5KTkRDQTlIR0tTP2phSVE4PUg8PDw+Ojw/VDY6P0M0NUg+Mjs1OTAyNzw1KC41Ly0xMSYvPktIMCUaOTAlLCwwOS8sLCs2JzE3Iy0vR2pJMTRYPWZiQUo3R1NgVSo9O0RYPiqPlLGZn5+ppaShq6S3srKlqLGnrLjBvbWwo7mtqKiww8nJzMG2vb+1t7+6yLbDtbSztbG9uLq+tq25tb+tobOmqquwtbi0q568vKiywLO6oK+ztaqsnq6wo5ylqKminpylsaavoJ+qqaiiqZukqKCtvKiusK6hq6Okrp6eraaXn5uho5yfm5qjqqKamqSklZeUn6KWm5amrIuekZCRjIKKgYCPgHualY2JfH6Lho6Ni4qEkpiRh5SjiZKSh5Caj5OBh3x5a312eXhie3pxcHFyeGiAc2qDZ2RoYW5zjm1iaXBgcEFceGtWXk5RUUpKTVNZVk1dXm1XRFhgT15QSE1ERjs3SEVLTzxyaEpLOUFFOzs9PTs7PUo0OUI8MztHPDQ/MTgtNzg7MigwOS8sNS4uPS0qSz4qHTQ5JicuMzQuMCsvNCYsOiQ0MEJoWTEzUz1lX0RMNktXZU8qPDJPWj0ikpmsmZ+Xp6Sin6ejuK+uoq+wqau4wrqzrZ+5r6uotLrHysi/t8G+r7S+t8S2w7GvurKywLW7vrepube9q6S0p6iqsK65saqbu72ksMC1tKGut7Wmp6exs6CepKanoaWZnq2nqJ6gqa6noKaXo6igsLifo7GvoayhrKScpqaompqbn6OVnZyanammlpufqJKYk5idkpmWoaqQmomOkId9h3+Cjnx8oY2NiHmDjIWJjIyFh5KajomVn4mRlYKLl4yRfYR7c299cXN0YHl4aW9wcG9pfnFjemxpZWNhZoZ/YFtyanJNTX9pWFpNUExKSFBSUUlOXF9uU0RYWlJnT0hLRUY1NkhCTEk1WmVKQDZFQjk6Pj0+OjpDNTk+OjNARjwyQDIzLzo7ODMmMjwwLDg1QiopLUMqLDQ7Tk5AOzczLS4rLTcqKjwlNTM9ZmQyNE0/ZV1GTz1SWmhIKj4vWVg1KJedpZiclqygn6GkobersaS0tKqoucS1sq6gt6yurbC1xsjAt7/BubC0vbe/u7+vq72wtL+xvcO5qbu6t6eotainq7Cts7Gnmr23pK28tq+fsbewqKWnr7GboKSgo6Shl5uvpqGfoqevoqCik6Sko7ewoaaxq5+so6+YnKqlqZ+Xmp2lk5ucmp2mqpmcnKWWlZeVnI6Tl6OpoZCJipCGeoR+hIp6j5eKjYZ5goeEiIuOhY2TmIyOlpmKj5Z+hpeLj3qAenByd25vdF94d2RsbGtpaINtZnJpa2VoXGNzgF9aa3VpWkl9XltYT09KSEhSVUYyOV9ebFBEWFZZZU1JSUVFMDdGP0tCNklKSDs2Rjk0OT49PDk4QDg7ODo3QEk+ODw0LTM8PDc1KDU+MSw7QTEoKzY8IzhSPSoxMTM+RDUsLSc0Mio7KzEzOWNsODRHQWZbSFREVV1oRS47MmFULDKWo6GXlJyqnaWhoqC3qq6gurmmrL3Es7CuorWvrK2vtMPEvLO/urews7m4uri7rq3As7S4r7/BuKy8urWmorOqp6mzq62yopvBtqWotbWpnrK7qqemqa+smaKnnKOmlJiisqSZn6SoqZyioJOloKS5qKSnrqeepaGokp+poqGgmZudoJKbnJagoaubm5mhlZKVlpqOlJOjqKSQiIqPhnmEfIWFfZ2NiouGeYCEh4iHkYWVk5KMkJWUjY6Ue4OYj4t3fntsdHJsbHNheHRoaGpnZW+EZ2doY2Zoal9oYmlmWmV7Y2BTc1RbW1NMSUdJT1NAISppXmpMQ1ZVXmBLSUhFQy46QjxGPDZLUEQ4OkQzNTc9PTg5NT86OzQ+OEBLPT45Myk4Pjw6OSo2QDMuRTQoKyw+MC1OPy4rLTcsMTE5NSwmLjUtODA1NzZgdEIzQ0RnW0tXR1VgaEIzNzhkTicynqSjkY6kppuenp2jtaynqrm3qKzDwLawrKK1rqevr7fAwLyywbaxrrK2tri3tqyqvbOvsrG9v7euu7uxpZ62q6WltKmrrqCfwquopbCzqqy1u52oqquxpZidqp6mpJGZpq2imJ6kqaGcop2XoJ2ntqavqq6hoZ6doZWgpp+hoJmbmZySmZ2UpZ2sopiXnpWUjpWXjI+YmqmgkYiKi4l5hXeCgoKdh4uCiXx/hIiGhJCElpWPjpCRkZGNknuDlY6Gcn19Znhva2psZ3Vza2NnZGN0f2FkZWZlaWpjanFZXlhebWRhTmhXWmBWSUdIS01SWD45YGxpR0JUU1xbSUlHRkEuPD85QTg5UkZANzpCMDM3PTc2OTI6PDk3OjlETT1CPDAqPEA7QT0tNUIzNz0rKiwwQSpKSy4vKiszNzIyKDU3JCs3LjcyNjg1XHlOMj5IaVpMWkpWYmZBOjNBZkglNZukn5CMraGZmKCWpLSxorG9t6Gxxru5sLGjt6yqrqm5vbu7rcCyr66ttq+zuLOoq7mxr660tru2r7i9raadtaugobClq66epMOgsqSusa+3rbWera+trqKZnaiqpZ6Vm6iln5mlo6idmqCclJydrbCmuaiuo6Gamp2ZnqOapJ2XnpiblJqgkqiWq6ibk5yckoyVmY2UlJmop42NiomPfIJ0goGKmIWHfImJhISKjIiShJOckpKPkJGWjpB/gIyNg2+Af2Z4bmhramdxcmtcaGNicn9gZGdqbWxnamlmbFxsbXVxYVRiaGRlWUlGTE1PWFFRVmFlgVRAVlNZVUZIRkVALzw9Nz82PEZOYTg6PzI0OUAzNzgyOD83PTg+RkpARDkyLT1BPUE9MDVAOUAxLSsuMzw7SzYvLissLTI0OzYjMyopNi41NTQ2NVp8XTE5S2pbTVtLWGRkQEExSWVDJzSTopqOjrCdmpOhmqmysJ+4wLagtMK7vbmxpbavqK6lt7i3t6y7r62qq7eqtLmupbO1sa6psba2sLK1uqeon7apnp6poqqtnKnAmK2krrC2ta2tn7GtsKqim5yjrKiblZyno52aqaKklpqgnZGbo6uqqbufqKSgmJmZnqCPa6KWmJxxgpabpIB1kqqnnpWVn5GJl5mAloqgj3mGlI2Dbmp+d4NxbIaLhn2Ei4ZvXmNgZ4SXhmuLkJSTdXeLhH6Dj39mhoBodWlmV1xpc25OUGpjZnGEZl5kZm5saV5fX4mQhIZnT0tEOEVUZ15KR1BQVVVLSFNhb3RlRltRVVBGSEZDPjE7PTY9NjwzZlw1Ojw3NTtENDg2MDpCNz86PkZMQ0IzNDM9QEBAPTI4QEU9MSwrMDg+RzYwMS4qLiovNTY4LCMxJzIxNDoxNzZYgWwxNk9rW05cS1tmYj5HMVBkPSsvjaSZh5Wwm5yToJuqrqujvcWvqbfCuL28raa2sKWrpLizsrOwua2qp6y0prC1o6i4trWop6y2sq60rbOiqZ+0q56ipJynqJqsvJWmpa+zuK2upaiuq6yloZ6coKemm5ihpqWbm6ennZOeoJiQnqiqo7Wwo6OjnZaXmJejiKGOkpqHoYeUnaF/pX+nq56TkpuSiIRyeI2OhIihdoiNaZeIZn1zeKFviIeEfo17f6Ggn5mAe4eedIiOdpuKbIeBg21oZWN6bHFiVIZtY2xpmHFYam9uhldeaVtraluIcG15coZoh4RaXkZOPkZeTUVSVlZRUVJXVGdeTFhKUlJPRUdHPjw0OT05PDc7MDw8Nzk5OjY9RjU4NjA8Qjs8OT1GUUc9LjU8O0A9QD41OUdBODIpLjE8STkvMDEuKi8oLTQ1ODMlJjIxMTU+MTw4WIN1MjVSa1tOXExcZ189SzFWYTcvKIyml4OcrJ2ZmZ2fqqqnqb/DrrG6vLfAvqqkt7CprKayta6vs7arqaWxraW1s5yttba0pqeps7Gtsqevn6qgsqifpKOaoaOcrrWVpKWmtr2mrKeqqqyopqKgmKCno5mZpqOkmJykqZaUopyVk6OlpqC3pKSgo5iVk5iTnIiuj5iUiamLl6KbhbGApK2elJqelXmC1Kh/h5TBm8d5d7Glt5dkgMCcv3mEhHmPg3yQkJHKcZa8nMV7cranupB6gWyWsauweWhrWLGub2VpvJK8bmh5bXKP2H5Sa2O2sn+BcZR1mqGqkFdPV2FPVk5GVFtYUVBSjFxXXFBAXUVRTkRHSTw8NTc9Ozo5Oi49Ozg3ODs5PkY2Ojc0PkA+Njk/RVJJOi41PjtCPD9BODpKPjUyKjIyQkUvLjMyLisvKS0vMTg2LSAvNDE2QTE9OleDdzIxVGtcT1tNXmdcPkwxW100MSGNppOBpqmfl5ydpayyqLDCvbK1wLW3vsKrprStramnr7Oqr7a0qKimtaanuK+ds7K2qqWkp7GurbGmqp6npLGkoqGel5ugn6+tlZ6in7S6oqqooa2upaKdm5qiqJ+Ym6ign5iep6eRnKeblJ2hp6KgsKOfn6OWlpKYkpmFr2pqio2qfmeElYetZXCenZSappVxrqGkfne7fGuhj3axX2q0W6WAZpyRYGaBemZ/anhqqWW+cmemjHayanyxeHSSk2NtbadtW4SgRWlmh5ZFdZxgfWd7pKeCWV+Lq2mBlXh6aqc3Sq9bV1RsY1tLTldfXFdWO06IT1dWL0lUVElDRUY9PzQ2Pzs4OjkwPTg5OTk6PTxEODs6Nj1BQDY8QEhRRzkwNzxBQz5ARDhARz0xMy0zM0UzLi41My8rLyguMC46NS8nJDIwM0IvPTtVgnYyLVZqXE9ZTF9nWTpNNV9ZMzEbkaKVgqynpZ6jpKmxt6yzvb6wt8Syt7rCp6mwq6+pqbCvpLC6sKSlrrOjqbipnrOysKOloKqtr6uvpqefo6KwnKOcmJWXm5ytppebop60s6Grm6KtraCemZegoqmcmZ6koJyZoaekkJ2jmpehn6yfpqegm5+hlpWRl5GahbWbtXiFqZm1mXeHs5u3f5SWl6mUfmuBpnqBhYiSlJJ3q2drsVuse4+HlHSIcI+GgICIkJd4g4KLl4yDoI+EsHZ3n3Fra2x8i06kWEhjY5l+Y2imYHlydVOSh15QqW1jcX6HgGKdLlGhbltUa2dgTEtcZFhcWkI+sHhXWEEjTWlFQkRBQEExOT44ODo4NDs6OTw5OkE6RTo6OzY6Q0I4PT9LTkc6NTpBRkJAQUQ8RkQ7MDIwMTtGLDAuOTQwLC4oLzMsPjgzMR8vMi1EMTw8U31uMytYalxPWE1fZ1g3SjlhVTUwHJWflIizpaahrqmns6ypu7bCsLzCrbi3waqsra6upq6yqaGvvKqhp7StpKu1paays6ejop2nqrKosKelnp+fr5afmZWVlpifraKamqSota+hqY+pqKqbnpWYoKWomZ+co5+coKOko5abn5ianaOrm6aanZuioJeTkpOTnIPVk5m5cLDCfsaGfNaUm7t8mpalkI2cjaR7joajgqWCeqx5j51Vr3uJfp9quVq5d4aDfKaCk3yYeqp5jpyPe7FtjoR0kLyFb5RQr6fFilGgemNgqmJzcodsl4hgU7W0yIaAiXxjpDNCnXZdUWpoY1BAWGZaZGFKSE1sS1tTT1lmWkNEP0U/MDw8NTk7NzQ8Ozg9OjxDOkY6Oz42OkBDOzZAT0xIPDo8REhDQkNEPEVGODEyMTFEQi4vMDQ4MystKS4zMjM5NzEjJTUqPjM9PVF3ajYqWWlbS1xQX2ZUN0c6YVE3MiWbopOYsaeopbOqpbSopLu3wbC6wLG1tbyztaexsKOws6afrraom6i5rqOvsaCztLCgpJ6ep6mwqLSppJydnquXmZeWl5WWoauempeorbCpo5+PrKKnlp6XnKGloZehoaKhm6Kip5ueoZ6VmZumoJynlZybn6GZkJKVkZ2Ism5otXGrh2+OpnK0c3K2e5qYpIyPnI2ifpCgpX6wdoOR0tF1W658hn+kb5uqpmuGhHytfZeZj3uxc5OdjnizZZZ0hJ5vnmaUUsiLWsJcn3liX61fdnOHYpeIXlnKnW+/gXVNS7VTVcZkVFFqY2ZYQU9qX2xpT1VGSTk9V1JbV1hIQz9KPDI/OzU9PDQ2Pjs3Pjw9QztHOTtANzs+RDsuQ1JKRz4/PElKRkNFRD5ISTkxNzQ2QD4vLjI0MjUyLSkuMjYsNzQyJh82MDs1Oj1QcWg5J1dpXEJOVF9lUDVHPWFNNjIvoZyRpa+spKq7raa0pae2u7yyur+3trW6urOltLShsbKjn6ywpJimuq6ksbGdtLiqn6adoaqksaesqaSanJqpnpaVmJiSkqOooJeTpqqxpqKWk62fpZKUoZukpp+UmqamoZujn6yaoZ+ekJacop6cpZWdlZqin5aZlpKbhax7d6h2o46Jh6lvrYqDqIOZmaGJkpqKon+SmImuhX+Cs1xys1KufoOCpH9x1313hH2OnYeZmXevhoqRnId3tGGaZZqBgpRsklqwWEuadZh5ZmCtXnZ3h2eYiGter3eVno94bDV5yK6yX0FUb15nYEVQbF9xbVZVTS5lY2lTWVE6QURATDo1PzkxPTwxNj85OEA9OkM6Rzs8Pzo+PkU5LUVVSkVAQzpNS0pCSEc+R0s5Nzw0Njo+LzA0MzMzLjIuLjE4Ki4zMiUhMDM3Njc9UGtlPiZWZ1xAPVZfY042R0NgSTo4OJ+dlKC4sJe0wa2os6ipsrq4s7i/ubeytr21pbizn7Ssn6Coq5+Vp7arqLGyq660pJupoKCoobWmpqqjmZ6VpaGUlJyZkpWipZqTkKesr6aglZmpn6KPkaKZqKaglZmlqJ2cpJ6snaGdoI2Un5ueoJiZnJaXoqCTmJGmnYapfX2leKGPjoOqcK2MgqeGlqChipeXiKOCkYeUqnyAi515b7Fap4OCiKB5dNh/dod0p4GOm42SpHyWkJ+Ee7JenGSgfoOVbJJcq1tak3+Rf2hnqmNye4FrmIdxXaxaiaCOa25lT0pDoVxaTHReYmVNWmFfcnNfSlU2SpqTWUhFPUhGQUwzNUE4Ljs+MDVBNzhAPDY9PEY/Ojw2Pz1CNy5IVkpFQUg2S0lOQElLQEVOOjpANC46PjEwMjE0NCsqMDUvNywmMjEoJCQ2NjcxPFBlZUEmVWZbPzFVX2JMN0ZJX0MxPjihnZmZvquXtMKuq62ppbSwuLG1v7m6s7G3vKq7tJ+wpJ6lp6eelKqxqbCqtayrr6GYoaCmpKO5oqOroJebkaKglZSfmpSYn5+PjYypsK+mnZebqKafjJKkl6irp5SXqaeen6GjrKShnqGNlKGYn6CSnZeclZ6glZaPq5uPrm1ytHKpjHaKpnO0eXSzgJKkopKcjYmkh492uG+Me4uia2u2WaGGZZeXaaGip22TcrR0k5h/smqFk4ita3WzYZ1mom+HkmqXXK1gTaF8h5FSc6NseX9+b5iGcFyvVjycd2ZUb24uXKdPYlJrZWFsWWJcYHB7Y1NZUT4+bXAzQkJAP0w5ITdANi47QDM3QzU4Pz8zOzxDREJKRk1JRjYySlRLRUJJNklKUD9ITkNGUD08RTUwOzswMTAvNzUsKyw0MjYvIzAwLCwdMjg5LzlOYGVEJ1VkWT4vVV9hTDVGTV44MUI4pZqbnbqhm7LArq2rq6e3qbivtMC1vLGvubirwbapqqCbpqShnZKqqqe2o7Korqqgl5ynoKSruZ2jrZuWmY+lo5aNnaGbmZyfkJOUq7avp5mUnKyql4yTpZmlrKORl6qyo6Cep6uwmKGjkJmil6CblpuXoZOcqZyUkauZh9SSmrtzsMOAw4Z+1ZacuHiIkJiMl4mMp4h6o7Z1fXd2woKasmCDunnAfHW4YrWBjIepfZaBrKlxe391vIinoGmdYaaOr6F+jHSHq32+bnO8dLKDdXiAim6aiHFujaR0vV13fVthebxrWlZbanpeamBkZmJtd29ZW1lDQUByP0NHKzVIIic7PzEwPD83OkI5OT1DNDxATlpeYGBfX19aUFBSS0VGSjRITFJASk5FRk9CPEU4ND05MDIwLjg3LSouLzE4MCItMSwzHiw8OjA4TFhhRidUY1g8L1ReYEs1O0xbLTdBOaeanqG8opexw7Ctqaqrsae5r7bFsbqyrruwrsGyrKWinqOhnJuRqqSqsqS0pq2kn5aaqpmmrLicoq2YlaGQpaCTjZyjnpidmpCWk6+5sauVl6Oop5SQlqScpK2ekaCoq5+bn6mjsp6jpY6nopShmpyXlaSYj7CgkpWqnoWQmbWAkJGMuJV4gpObtXdubG5zbnmPhI6Jc57Bu7yae4GyqHCAdJG4g3yGhouHjXuKho2XfKS7ub2cdXqzo3R2l3V0sHWZnmaGaY21dHJwd7aMXn95fYlng3lteWKLrHB1hX9ZW6dqRGRZU2ZgY11jUWdmcWx1Qk5QTEQ7Wkw+SjM8MCA4PjsuMz1BOTk/PTs8QzZCVFlaWltbWlteYGJgXVNHR0g0RElUQktOR0VPRj9HPDc/NzA3MC85Oi4sLy0qOC8lJjIoNCQoPjcvN0xUX0cnU2JWOCpPXV09KzpWVic9OzynnqCgv6WWtMO0rKqnrKupu66wxa+1s663p7W4ramjoqaeoJ2ZlKykraqmtaion5uWoKOeq6S+pqGql5SdkKKbko+iqKKTnZeSmJSytbatmJ2kpKKLkpGmm6Wrm5aopKWcmqGppqejqaGSrZ+Xo56Xl5edno+wqZScp6KOan5pnKd4iXN+mo90emWHer2+wLpukoNxlIZgcmpaXpqJYWSHjpVrYH+VY22cdmKUa3+alZRlXmBjcZqJaHKMfYaVZ2p+cXR4fX1iW3d0gWhQXG6DfHuLalhreoJySUpvhXBNdE1FV1xmYExbWGdjXk9bbXVpcVJPREVNO0hJPEw/MiwyQT84LzU/Qzw5O0A7PUM+UlZWV1laW1xcXWBhYWFgXFVHNURGVUVKT0hGUElJSDs4PTUxOi4wOzouMC03Nj01JiIvKjIsJTs4LTdKUl9JJ1NgVjQpUF5MKDM9W08nPzI+qKCoocGjmrS6tqKspa6nqLWxrMissLOstaO+sbKmoKOpnaObmpmsp66kpLWppZuXlaGbp6yovqepppWUm5WgmZOYpamnkZ6Qj5idsLK/rJumnqeiiZORqZqopJqbq5+jmZujp62in6qimrCblaagl5Sdn52XsKWYoqiZnJGdnKOkmaejmpyampqQloFobn1xd5GXlJGFirWqjYaYlY6KjJeXh5SVioOSk5GJjZGTmJSYl5qgopqblKCdjoJ6pYZraXyQfIB0iYqBcYJ4eXZ2ioB7impzgXSDdWN3fXZrcHttYGNccGdNWVllal9XWm96bW1mU09GUzlPWk5STygrOkpCNjM1PUBBOTpDPjxFTlNTVFZXWFlaXF1gYmJhX15eW1RLQ1NHS05ER1BMT0k8OjszODksMjs4MjApNklSTzgiKSsvMiM0Oyo3Rk9bSiZSXlMxMFReOis9OFxLLDwtQLKgs6G/oqSxsregqaWyp6WwtarJq62xpbWmwKi0oJ6kpZyklZagq6aso6O2rKCZlpagl62ppcCeq6SVkpyXnpiTlKKfnqKnk5GYqaeyw6+aq52rno+WlqmeqpycoKyYoZqcoqWvpqGkqJ6tmJemnZmaoZ6enLCgnaKmlZiTmJOgopajnpegjpaUi4qNjpetj3yVm4KSgouqqIaBmJaKhI6fiHuEkIaFmZCHhomVjpuXjZCYnqOWmZORnY1/jWahs66EiYR2eo+KfHZ5em9neZCBgIlrdYF5iHJoc396doOIgmt0Y3lmYGlkYmRmallre3BpalxTTFBEX1VGQD8/LDRARjs0NTs+QTs8Pz4+SE5OT1BTVVZWWFpcX2FjYV9eXl1eXVhWSktMQklPTVJKOzw6Nzg2LzI5NjQuKCYkLTEuLykrKjclKzwoNkNNTUQvVF1RMDVNWzE3RTRcRzU8LEC0oLmvvqyrrrKyoKqmsa2irLOwxbCqraOzrryktJygpqKhnZmXqKWppqSms7WelZSdmZmwpq6+oKujkJGempmUkZWhnJepnISeqayitMizn6qkq5aWl5qnnaibn6SrlJ6enJ+qrqmlo6uhrZufoKGYpZ6cn52vo5mfqJOYmJ2RpZmYqZ6al2aDknxlfo6aj2N5jWxoa3qRpKtrZZqYfmeFimVlaWh6jaGOa2iMl5Gid2tqi5ijn5hzbG56hI2GeVhlXYWBXmyKiYB2XGhzd3eRgIeCbneCeIBzbXmDdHeIiI6De2qFWV5rdGRdc4lpanxxbGNdUU1XSmRYQEo0PUY3P0ZENzE8PT9BQzs7REdISElMTlBSUlRXW15gYWFgXV1dXV5fXVpVT0RIT0tTTj0+PT02NTM1NTU0KiYmJSwqJS8qKyc2KiQ7Jy9BSltKLzdaTzYpRVkvRE8xWUM7Py49pZ+6vLmvq7OwqqWora6wpq6tsL2xqaikra+xn62Xn6OeoZqZpqucrKOmqKmyrp6Vo5Cir6a2uaWuo4+OmqGZk5KboJmZpZZ7payiqLPDt6Sip6+enpWeo56jnKOpqJGeoJ2fqq+qq6Oqn6ibpp+noKyWoZulsKSYnKqVoZ6ak6WYnquZnn6+g4hytHKEnYataHi5xLhxk6Kje6aYmXOqgnzLwMC7cYuih4KffJWYiZ7AvYKWnZ6NncHBe4F7kYyawr99a6Wxb4yAb8p6f5t3kYOOgHZ5gX95cXp/h3F4hYyTeW12kmJmX3hkX2WCY150aG1kYlhMVklRWkhPRDJJRT9EQj4vPD8+QEE6OERDQkNFSElLTU5QU1ZZXl9fYF9eXl5eX19fXVxTTVBHVU5BPz89NjQ2ODI3NiomJSMpKiYuKyopMTAfOSojPklbTCojQlAvI0ZbM1BZL1VBQjsvOJajuMO1sK/AqaiUo6+psK+tprK1r6qmpqaxq5+rmJqioJybqqeinKuipailpLSjnaKSpq2st7Onr6KSkZqdpZKRoKGXnJ+dh6erpKutv8CwoamvqZeSn52imaKjqqOSoKGdna2uqKymo6KnoKWlna2pkaSbqa2qnJ2qnKyhlpellqGjmJx/zpR5eqSBeZWWm1+uj16Op4GhoHynlZt0q4OAr15jjap6p4eFoHSXkoizY4KrhqGOjbNphK50fZaHuGGCrVmjzW6PdXvae3+ZcH6IknV/ZXuIdnZrfYhufoWRkn5tgY5gcWtwZ2BfeWRbcGhqZGZgUlRSV15LT0M1QUhFRDg+NjtAP0E7PThAPj8/QkRERklKTE5QUk9TXF5fX15dXV9gYF9fXVpXT1VKPT8+PDU1NzgxNjQoJyQhJywmJi8oJiszHTYwJDc7U0wrLC1KMCc7XDtMLSFQQEY0LjGtwr+/tbSwt5iekaSqqK20q6ayrK2spKunsKqgp5uZpZecoq+foJ+op6OloZ+wrJuelaeurbGrqKyglJKbn6WTj5+ll56oo56upKqwqL/Gs6ipsa6Wkp2copegqaqelKCfnJ2ur6eqqZunp6Shq5KttJalo6qqnqOnpqGwoJKap5qhm5SUkZegcIWMl3WFqIdxsHydcqx+oZ6BpY+ed6uCfa1/nHKtfquHhp92mJJ6fJd+qoiijJGLnX6re4mTj5+Ae61WnMR6j2+SwX2BlW11cIxtZXZlhm9hd25yb4mKkZCDbZCPZG90dXBgZ21kX29paW5mY1dTXGFaUlNDOUlJQEQ8PjxARkRDRUE9PDw8PkBAQUJFRkdFQENJU1dZWlxdXl5cXl9hX15eXVtaUkM+OzkxNDc4NDUyJiMfHCAxJyAxJyAnNB41LSY3PVdKLTwnPjEpM1ZARiEcRzpDMS4rr9TGxrK0n52jjqOjoayvtq6osKepqqiuq6unoqSdmaKVn6aqn6Kln6ioop+dsKyXmpaop66sqKepnpeUmqOikpShrZudpqOvrKOstKm5zbGtp66slpScnaKYn66snJagmZ2eqbGpqambq6mjoqybr7GiqKyuppmmq6qqsaKSl6Olm5SShaRqpHWJeql0erJwgqWJmYxwiKCah6RgYFKshH+ugpp2roGmhoafepiWhntmgKOJpJmGgaN9qX6BlIeuXnypVZ2ikoF6op+Ae8OvxYxzr7OzuXFiqa/CdGiNjJiPgW2akm9teXd3b2xmZGVxcGZ7aGNdV19pWFhVTU1RTENDQUI7Q0BAQkk8PTo5Ojw9Pj4/QT04NjtETFBSVFZYW15eXVxeYGFgX15dXF1bU0lCNjc5OTY3NCwmJCIgKCciKy0iJC4hMy0mQERXSCxHKzY2KjFQS0wjIEE5RDQsJ8LJ1dXAoZmrqKGvop6wtbCvqayjqKaqqquppKagm6SenaWnpqOcrJqiq6Gkn6+inZqSqqS1sK+gqZudlpSno5CaoqifoKacsaajqLGstsiytaqsqZWRnJ2imZ+ls5yaoJScn6erq6OumqypoqGqo7OtoqqzsaGbqqivsLajk5akp5ibkXyqbJ6Eh3WreXywb4Kki4mflpWelIHSuLS4yYCBsl5flKmDpIiHoHmYlZp4qsl0maOVp6mQkpuMf5uJmsbGeGWhgqVzgZ+Ogn2vXm+1Y7F1S6OGbadHgpNkj5Cek3xwl5J/cHp0fHttW2ZqcnFmgWpeYlhjbVxeWUlNTEtFREFCPkE8Qj9KOzc5Nzk5Ojs7OzMuNjxBRklMTU9RU1daW1tbXV5fXl9fXlxcXFxcWE1CNzU2ODUvKSglJiUkJiksNEVOUFBNRktKVkYqTDAvPi01T1RRHRw7PEYyLCSnpMDGua2osq6spaKcsrmsqqGmm6imqqyppqCmpZiro5+uq52loKyanqilnaa1nqKXk6iqtrKsm6WcoJWQpa2RmZyno6Cqp66io6epsLTCsbKqraiTiZidpJqho66ll6GVmJylpquar52tqKaerKO3rKGxua+dm6+ns7SzpJSYqKSan46CnU54moF/n3qEo3yCpISGpp6cnpOEuHt8ebmCfszFwrZ4mqGRi599mpaXinaemIqkmKOofrCFnIWehKx9mZRhpWyjcI+FkIF9l4NyrGCkc3GAmmC8fVJVdY6Ro5d8fpKRinR6c4R+cFttbndyaoFvWmRfaG5iZF1LTVFUQklIRkk6OUs+QjEwODg2Njg3Ny0qNT09P0JER0lMTlBUVlhZWltcX19eXV9fXFpaWllVU09IQDc3Mi4sKi4rKicmP1FUVldXV1lYWFdVT1VGPEUzOlBbVBwbNj9ILC0gi4eZqaykq7mrr6Ccoayzs6afoJWlrq2uqqedpqaao6ehsq6iqKayoJmppJSitaKjlZehqbS5pJujnaOTkKGymZ6cp6ahoq+unaSoobWxw7Gtqq2pkYeRnKaco6ScpZeemJmZpaSomq6hrqWml7ClvK2ht7etnZ21srmxs6eYnrCipJ6Gj9G1w7d5h46FkZOPgKZ4lKJ3jKCShKWBinGqhoS0bnJqmaOblYqffJiZhoePc6+CpZuijaaLk52JlJCbbXCyXKVzk3qcbJl/e5l9bqlhonFxf59ic7K4aHiPk6aYfoyMk4p3fHmNgW1peGl4c25/dF1kZG5tZWhgSlpYWDxIR0BVM0BGPjwqKDYzLjAxMykmNDo7PD0+QENFSUtOUFJUVldXWV1fX15eYGBdW1paWFVSUlFGOjIyMzAvKysoQFFSVFVUU1RWV1dYWFdVVlZUUU9RW1UlITJBSCQpJZJzjYqtv7+7urWel6ikrbWho5mVo6mnrqqrmaWin6WgoLWmoqinsKOUq6OOpK2jnZCamqq0tKSdpZ2pkZSXrqCgnqeknKectZqgqqO1q8KwqaupoYyEj5uhoKailZmanJiamaakppirp62ipZutp76slb2wrJ+jsLO6rLSnm6mypaiYeqiQfXywd4qBpKWInG2yb6GHrXyhjoOnlZiArIiFroWflKigoZaGn4CZlYB7kn6rgJ2aloqqeJ2gj4mTkoB5r12jgXymp2SdgHyXdGuuXaVrcYWZXWBbjKBulZGmmYOUjZaLenqCln9rbH9ifXRtf3pgZ2Vxb2dnaENZYFs9S1QyVThCQkM3JCQzKycnMywgLzY2NzQzNTlAQ0ZJS01OUVNTU1ZaXV9hYGFhYV1dW1pYU1BPTkk3MDUyLiosQVRWVlZUVFVVVVVUVFVUU1RWVldYVlVVUUhGSUojKCi8kpqEqcbCt8G0n5utn664paSOm6SjoK+vqp+kn52tmJ65oKKqoK+pma2hkKqppJaJmpCusKymn6ebrZiYj6yioZ2mopqlna2Yn6iltqi/r6WppJ6LgI6bmqCmnpKUmpqTmpqlo6OZqKuro6Sfqai+pJfDrKqjoayyuquup6Czr6mqmHavfpCLnIWHfbqtiphksIxlla19oI+DppWagayKhLCFpZmkoaGQhaBbbGqBs2B/rXt7goCxbGdumZeMiLBbfbRbpINryKJln4B7vFl2tVqyfVKvgHqsWIChbZiPqJqKl5CWlnt4jZx9ZHN9YoN3dIB8YWpmcW1mZWVPVWNbQlRePkkoPjk9NCEiLCUfMi4gKjEvMDQ1Nzk5PEFDRkhKTE5QUFJUV1peYGBgYWJeX1xbWFVQTUpHQzU1My4vQFVaWFdYV1hYV1dYV1ZXV1dXWFdXWFlaWltcWFdXR0I70p+zsre9u7TBs6Ocraaltqihi5qgn52zs6meo6CdtJegs6iqq52vrZ2rm5WuqKKOiJuOr6uopqKnma6TmY+omqGepZ+Zo6OlmZ6jqbKovK+kqJ6djnyLmpWhoJmPkpqbkZmXqJ6gmKitp6Wlo6Wpu5+gxqelqaGrtLatrqefvK6trJWBqZKjr46bgIakl5iPgIC4w7qDjp2ThaeXnIKsioKviKabmqWqkH7VvcKqYqO/vXx+o4KD17q4tYWUk4Oevb6EaqOBb6uEbZ1/erKwx4Nqq7C9rXh3or67dICWjqacj5qRlpx5gZCaeWN9emSMZnmCe2BrZWtqYlBiW1NqXEBUYUJOKT06NC8eHyQeJTIgHSQoMDQ5NjY3Nzs+QUNGR0pLTU5OUVRXXWFcX19hXmBbXFlUUU1JQz88QT81PVNZWFhZWVpZWlpZWFdXWFlaWllZWFlbW11dXFpWWFRXWryVs7Sxv7myvbOina6mpbOmnYuYpb6pt7Goob+mprGbnrGcuaiera6lppWUr6yXjIOaka6mo6yhpJyqoZiLo5KmnqicmqGpopmeoKutqbmtqKObl5N7h5mRppuTj5GYmI6Yk6mZn5ipqKCqpqGjq7ueqcWjoK+jq7O1q7CqoLuor6+ac3WqpLeGZYmfcGesj4qPbW93pJCZn4F1rpmVcI+LcZWno5uYrqRybW1tZYp3bm2CmXGAeWlxaWeJlZWYcWhphIZncIZkXYljam9ZXWd+d6ZgYnGOkm9mZICNko6imJeYkJWefIeOlHVmhndojWp5fnlkbGNmbGJLZFhKa1k6UWVFUidLOisjHCAbIywpGBsYLTIuNTo0NTc6PD9BQkRFSEtMTU9RU1ZcV1pcYGBhXV1bVFBMSEQ9OkFCN01YWlpZWVpZWFhZWFdXVldZXV5eXVxcXF1eXV5dW1tVV16ola2zqrq5srOrqaKunqOyqZiSvbHDyL62qp7ArKyjoKesn7qjpK2srKaOlq2pkIyFlZasnqWqoZ+jo6CRjKSSp5mpmZajqqCWnKWlp6+6q6yam5KSe4SWjaWXjZGRmJONmJWnlJ6XqKKasKaeoqy6n7DBqKSzpqyxsquurKi5o664loqhqKW2nYmWopeGqZqQlJ2TqrOZm6OroLKWoqGdoKKcoKShlaumjJKSjIeSnJyUkJmTmJCNlYaBpJmXlY2Lk5KKj4aEfmeKf3SCdnSHjHGnbHuVkZSTgYGPj4+PnZSglZiWoIKHk4xwaI92cIp3dnx6amxkZG9jVWBYQGlbSGNhT1orRj0rJiE3NDAuHxwhJTIoKjY5OTQ2OTs+P0FCREZKS0tNUFBRV1RWWV5fYWNdXlVRSkVEPjk9QEFTWFtcWVdYWFhYWFlYWFpbW1xeX19gXl5eX19gYGBfWVlgpZapqqW1t66uorCkrZ+gtbGQjqvFvMS7uKqipZ2bpZ2wqaO2p52ptKankZisoouIiY6cp5arpKGZp56ek5Wjl6ibqZmUpqGjj5qnmaG1uqiqmJqQjXyBlIuhlIqUkZWQkJOXpY+emaifnLajnaest6iuwa6jt6evr7CtqqqzuaGvvZmSpqOmtqKSnaaejamfjZKfo6yvmqGjsaivl6SgnKOpnp6dnJernJKZoZuTkJaqmY2YmJaQlZ6RiKCdlZSFkoyQjJSKgH5mjIZ1hnZ5iINznGqGkZSUkYp9jJaSkpiToZOdlqCDh5eGeXGVcnmJf3F7f2puZF9waWBbYFltY1BgZFBbOkdHRD0yPT03LiomKykmHSY0MDY2NTg6PT0/QUFDSEpHSktMTVNTU1VaYGBpYGVWUEpBQ0I7OUVNVlteXltaXFtbW1xdXV9fXV5fYGFhYmFhYWBiYmJkYlxbY5eVpKejsLOsrqOpp62gqLWqkJCdpLO7r6ysoqOaep2isaSlsKiWm7imopSYqZyOhoqJm6KQrp6jlaefoZKXmJuui6uWj6iaqIyYqI+eubakpZibjYl5gZOMmpOKlJGTkI2RlqKMnZ6onp+4pH+Er7Wir691pL6jsqB4eqCrsruVd62kn4qAqn5kXGJ2n46knYOXfm6Ts5yjp66romWen5JzeZmXcICYqJdsf6KniWWcpZyRl5iWi5GbkYWdmpCVgpKHjo6SiYV3a4+HdoZxfIaAgGFpiIuVk4tbdpWRZ2iQjnJ7pZiYZHmYhoF3l2mDioJueX9rcGVgdm9ra2hbZmViYm9TWz5OTk5SRz1AVEI5MS8eHyY0OjMxNjY3ODw7PkBBQkZIQkdGSUtMU1RVWVxfaGZnV1FKPERHOzhVUltgYWJgXmBfYGFhX1xdX19fYWFiY2RhYmFhZWRjaGReXWablqajobCxrKuppaito6etpJKWq7Wvsaaaqqarl3OLnK+fqKqmlJa4oKCPnKOdkX6IiJudjauao5Wnop6Ol5GehXWukIimmqeRlqOIm7q0p6CZmIuJdHaTjZaTipSRkJSMj5OgjpqfppmcspaAjJy1nbOMko+8p6F+p6J6o6+3gY6Op5+Ei4WPsamvjImWopp5gYushpydoqepqIeVhph2pZt6h5uBl6aCgXucsXqKhaCXmZSYloGQlpaEmZljeYeQhI2PkoqDbXCPh3mAcYCBhX+GdIaElpJ4lmiTdKCadHyZg6Cchph+kYmBg5hqjYyFa3h7cXBnZHduaWxrW2VramVzW15JVExRQEU1LllUVTYpITA5PT42NDM1Njg7Oj0+PkBESD9JRUpLR1JYWllbYWFoZllRSDlFTDs+YlZeYmRlZGBhYWBiYl9dYGFhYmJiY2ZnY2JhYGVkY2djYWFonJijn6aurauorKCosKanqaWZlK7GvbChlqaotZ6Pg5yrnKahn42Qvp6ZjZ+aoJB9hY6Zl4irnaKWn6CRjZOJhoCRqI6Hopyjk5adhp+5sqedmpKOhXB1kImVkIqUj4+bi4+Rn5KWn6SWnqyIn7SJtJqtisqHqq6It4WNsIOxroOpjaaYjZ18qI9ye3ebjqaWaJWkebSLn56mqJKZwoF/q4iYoXGegJmkfZeFlbGAoXyhlKCQmJaAjpObipeRi3yFk4aNlZOJg21zkYV/enKGgYR8hHSFgpeBj8VmgKmHj6JrnoOhmYKZgIuMg4mYcI6ShWh3dHt2Z2h1cGdnbF5jb2xnbFhnR11RTDJFNDZNYGM3JjM8REdEOjY0NjU4Ozg+PT0+Qkw/TklKTENQWl1cV2JeamxcUUU9S01ASmRZXWNmaGdiYmJiZGNgX2JhYmNjY2RpaWNiYmJlY2FmY2JiaZWXop+wqKmopaugpLmwqqummpSgo6Sqo5akqbajr3+gp5ylnp2Jk7yZk42gkZ2QeYSWlpGHq5mbm5mhhY+Md5ucj6CRiJ6km5WYl4aiuK2lmZuMjH9ibY+Lk5CNkIyMl4uQkZ+Pk5+hmaGofqGnh62doJauj56dnZGGgaCNq6+GpI2qmoyafqJ2gJmTaoGrdU2reIeNnZGbqKeAqqt9g6F7eqdpnn+Sa2eXhpe2iZ59bmBkWYOWfox7ZGiKcpl9eZVsXXuXbV9TcIRcX2x5g2BZZYJ9hIGYcaeqa4OjbnKlcJ+Dnmlln2xbbYl7ZVlfg39iV1BvdmVtdHJqam9eam9tbGlYaU9dV0U5QTRHQ15rNCxJQ1FNTj04NDg1OTs2QDs7PkJPPlFSTE1CSlxdX1deX2N2YE1EOk1PTVRiXFxmZmlpYmJkYmRkYmFiYGNkY2FiaWtkYmRkZ2RiZ2VhY2iYlp2guaGqo6askqG2vKuuopmXoKGlra2gnK21oqiSoJ+fppuZjpi0mZCKnoyVi3WBlJGNiqaWlZienn+ShYaspIeckYqYqJeZmpGHpbCmopWaiImAaG6Ih4uOjomLjZKLkJKijJOeoJyipX+TgY+joZSgd5yWj6eDoad/hqmthaV5in2Emn2icHKTh5V6nYx5bYecjJmQm6iaj4ece4Kic3amZp5+dqRfmHp9knOibpi3tLpzkoeBf7WoZIHGuHtwlbeLcYCbpGNzrKtgfWqds35ufYeDjoKLl3GAo2xzpHOeg3+kX52Zs5VwfJeetHRzW56yg2pib3N1cWhvWGtscnNmXGleYktEPUQ1UUFZcTM9U0dfSlI9PDM5NTo6NkQ7O0BJUD9UTU5RQEVfXltaV2BgfGRIQzhMV1VWYmFaZmZra2JiZWFkY2BhYmBkZF9gY2tuY2NkZGhkYmdmY2holJaVo7iZq5yToI2kuLWuraCbopyjo6WunJuxrayTl6CYoKSZmpOeq5uLiJF4i4VwgJaNio+gkJOUnZd9kImOqKCHmI+KkaKTm5qMi6iopJ6PloeEfmt6hn99j42Di5CRiY+UoIKWnaCdoJ+LiXecmKKMoHKii4ipiJymkJaoq3+ujH16oJl6o5N4gHOWh4ycfZagh5uOmZumhqJkoXyIlpCbjWyeaJuNbpqZe4CKp31yaHOpgpyCc6pnlJpdm4V2hJ1oqmqAuGZcqHCBnGGVjF6ndnWJin+eaJp1h5OSmI5/n26akGynmVyofne7a36qW46EXbRnXG5xeXdraVtxanh5Yl9mWGJBUEVON1ZCUm40S1paX05aQ0AxNTE7OzdIPzpDR1Q/WVJZXT5EYl5WYFFhY31pRUI5TltdWGRmWGZnbm1iYmVfYWFfX2BgZWNeYmRvcV9kZWVrZWNpaGdraZWciaq2m6iJY5SbrLqysKydppycqJ+erpudsKirnZeimaGfmJaWoKOZhomMaoiAcXuXiIuWloSRlJiPeoqElqOdipSPhYudkZybiY+oo6CZi5GKgIBpgYZ5f5eMe4iOjoePlpp/k6KfoKKTmHJon4qfj4xwkoyBqYiZn6OooKh9sK2joriXdqOzoqN/iJR4nXqrmn+ijp2bl4iXcaF8hY2vtX1rmpGheH6YtKOjq6iEmXyafJyZfnOqWl1ve5aLeJ5iTH56eoVjeZdCTZ9ZompxfI5tgYmEmXWbeYeJsbN/f5uTp3WAnW1xfJRvmXJqpF2VdkhlY2BzcH19bmVgbGh2fGNkYVFeVl1UVkBZRVFnRFNXW2JYXklEPUI4P0I6SUU4TERXQVZRW1ZERmJcWmBLYG1+cUVDPFVfYlplalZnaG1vYmZmXmFhXF1eYWhiX2VkdmxeZWdmbGRmbGhoa2mTnYCxrpmEU1+gp7O5s7OpmqKMnKucnKmToaukoaiPnp2cmpmVmKGdloeGiXeFgW55lYWQmot8kZOWiHKAiZOgnHORkIGImJSfmoSOqJyalIqLinyDbIWFcYGhjHiFjYiHkpmVfJKkoZ+jiK6GfbWEjp6de6WWeamClp2QiqGdfadodm1+mXOgc3F8nYWYb5OCrn2kg6aemoGjb16oZ3WjY2+lYZzTkHx6mXhyc2OihZB+onKijnVrj7OLYIKYiXOqsqi8f3eDbX6+pqm0XpxufXGXb4FzonJdo2d0pmFopm2b1Jl8g5tvd3mXa5t6d5dzbamkZ2BleXB/g2tnZmRtdXhnYGJTW2VRUWFJV0lUX1dTW2VqXGRQRUNLTUpLQkpFOFA/UE1XU1hPUlJgZmVpUmN3eXdJRkVjXWRaZ2lUaWhqb2NqZ2BjYFxdXV9oYmFoZXxkXmRnZGtkam1naGxol5t/sKtUXEt+qa+xtLCzo5yYhZiooKCjjaSooJipiZmXmJOZkpKgmI6HhXtwfYRofY+ClJqBd5GNjolvf4aQk5Jsl5R9iJCRo5WDjqqZlJKKhYl5g3aHgG6Cn4Z3gJKGiJmil3mToqSan4mzoaK2i3qsp6SupXCpgZqQhYGcknykgKKZhphynoSira6Jl4t/jKSNloOuopR2tLW1yaFzlIqAn2Cdl6lteZWGn5p1oYd3oH6RloqAb0xmo5JwmodypHt5dGGDgmx+oGtxZGCccn90l2l7abO1tMamc5h+e51qm5urdYOabHR3l2maenSYcVBEfbNeanZreIdmamdidHRxblZeVFloT1JoSVVMWVJVXGdrblZnV01KQUpNS0hKTkFRSlBkY2ltZXRyc355e251iXt7VFBPbV1oW2tpUmpoaWxnbGZjZV9cXVxeaWJkaGt7X11kaGNqZm9tZWlsZaGcia+nhGY/lKGyq6+vtaKjj4CXqaKipYylp52cpYKZl5aNl5CPm5KOiIJ5anmGZYOMfpageXWPiIyBaYSFkoOMhZ2NeoyKlKWSg5eol4yQioGJeoB9i3hwkKGGeYGVh4mWoJZ/lKWonJaWhGdueJxsomR8caV3nJdwZ6eBl4x7pXqfloOXcp52gYmUlo+5bpCKomJ9maKViG1yaatqdaBsbqZgm2mLkGiWh5qVdaKAfZpgi4WMdW+IYmigZZ5+aZp1b2NmiIJucqJaX1tjoW5diYxve39zcmSlbXeiZGenaJhzi5huoW9TiI9voF9kp1SLXVSYbW1za3GBbXBoa3hza29SWFdWZllTbUlYT11IWGloc2pZa1ZRUkVWXExYUmFUaGped3V6fHB8fHKDe39ydo2AhHZeUXNhZ2JwZ1BqaGhrbG5nZGdfXV5dYGtjaml2dV1cY2ljampzbGZrbWOcpZmmemV0bYunrqSpsLGmn4uAl6ucnqWMoqGaoqKAlZiTjZqPipeQjot7h3GAiGiLi3uXmnN0in2Qe2SCh5WKipWZgnyIhZamj4Ghq5CFj4mCin2AgI9zaI+lhH2GlI2ImKCOiJKqp52JpniWnH6liZaMspiekIOvl5+leJaIeql0pY+Emm6kooyShIyDvG58pa+ChoaHk5acn3ylenGolKCWZ55+b6tjloqVkneobKmigYl1h4J3q5GmiGuRsGt2s4ypa4qGbm2fnpKVYX+ri6p2gH+Mpp93n32FpZWdoGmah3asZ56tjLdzd76NpJNZg6aNq2F1cnNve3RxYmp+bmhtU1ZbVWFhXGtNXFJdSV1tbXZgW3FZW2BaZ3Nlbm9xY3F0YHd6fnlyeYNzhH+Ae3uMgYKAdmJ4ZGNuc2RSbGdob2xyaWZpYV9eXGJrYm1sem9cXGJpYmxqd21nbG5ilaaqnYGAnqSWqaqdqKeuo5mJgpermp6kiZqlnamchIyajoackYWSjYuMdIZ6iIRvjIR9l5N0dIZykoJtf4uSh4aUj3x7gYWXpI1/paWOgY2JhJR1goeSb2yLqYCDi5SOiZyfiY2Tq6OgkIB1lJaIfoF5lK6jf4GbcY+GeJCMhH97cqaMcX19epeWm4SOeHt+foiUlZOKdpCYn6CDen2Ja4yFW3l4cXlwaG5+kolxf3SBj5OTcYWEgmWMf1+Bf4t3dXOUdW95bm6HbYSFXndpeI1mgYKGjqmbfnR8l2qJiHCAdnyFdm1sZoxzeXuYeIRbalh5j2hud3Jxb3d4b11shm5pZ1ZaYFdcZWtjVWFVX1FfcHd5bGp2ZWpranZ8cXJ0c2FvdWJze4F4dXmCdYCAf4B4i4WDfXttf2xkeW5eV25naHVreGppamRcYFpjamVscHVuWltia2RsbHluaGxvYY6Uuamni6GimqakmaScq6KghISXrJKdoImappqomIKBm4p+lpOHjomIjXKCfI99fo6EepePdHKDcJWFe32Ti4aGkIV4fn+GmKKMe6agi4WPkISVgoaOl3dyhaqGjpKckIienoiMm6igoKuDiY2Umn5+iZatqI+TppB4cJ2Rg3uSb36ohXB9lXFrcHyBn4t/ko6MaG1dg4uMm5uejnOVi4hxdGuCdnOAWXJuh5CBfX6LaV1pZHuFg4iAX2l4e5t7gouCdoGGgmh5i4drYXFyg3dfc4yCiZCnlYZmjI+DbneLhHCFjXlvZWZjeYN6lltcaWZudlt7eHd0bXNygmZcbYprbGJZWV5aWGxxW19gWl5dZnR9e3Rvc2Nra2p7fHJ7eHRkbXRnbHt+dnp8e3p6f39+b4aKhHt9c355c39pVFxxaWx1b3Vna2hkXWFYa2hranFybVdbZW5sZ3N6b2hqbWCMjKqxopCjoZqenpiemaiioX2CmK2Nn5SHm6KQpZV/e5eEfJKYiIiGhopyfICLdoWLgYSVinFvgHKYhoR+koSDhoqBeoCDi5qej4KmoIZ4jpeIlYuLnZeEg3qtgpGYmZSKnp2HiKGroKKio4uIkpuco5mWqqGnpqCSm4iXjnx4jo6Ep35/kpGSk5yxppuUnpCNspOYhKWMjJWbn4mQm4KIkYlrfI12d2WChZCKfImdhIeLj4iIgIWEkHd8eXWaoYiGip+LhZR/foyBgHZwdIaEf3iIh4uQppCEhY2Ig42QjHyHioiPgXZrgYN8eZlqcmhgc4pwfXp3dm93dIFdXm+GaG5fXlpcXVNocVVjW1xhbGh1e3xybnBka2ppf3tteH9xaW9wbGaAe3KCgHh/fYCEem2DjIZ8enh8fnqDeE5kdmtzbXB6ZGtlYmJgW3RmcGZycm1VXWx0bWh5enFnaWtljYidup+WoqGYlZmYlJmkoJ57f5mrjp6NhZ+cip6WfHiUgnuOmYmGhISGbXiAgHKBh36Ik4Rta356l4aEg5B/gIaEhnyHg42anJKGqZ6DcoqPhZKRi52RfY17qoONkpeVj5yXhoabp6Cimp2Gg5GamZmQmqagpp2dkJaBkYp3fIeOhKV7fI6QkYaYqaGdk5yPjaqOkYCejImTmp6Cjpd+ho2Cb3iFcXRgfoKPhnWLl4CDj4KGhH6Fg5RteXV0kqKLjIWahISNdICKfHxycnuIhHt5jI6Ek6ePhoSPgYSLiop3hYeJi3xua32Ae21obG1nXnl/aHx7dnR1dXt3XGBwfW51YGNaXV5RZm1TZVpdYWppdnp+cGtsZGtqZ4B/bHOAbGx0b3huhHluh4B2goB9hHZyg42Ifnt7fH97gopgaXtqdWhpgmRqY2BpXGR1aG9idW5sVGNxeWVwenpzZWltbYuKn7eaoaOfkpGWl4uan5+ee3idppCbioaklIuYmXh6jYV7iZGDjIKBgm18fnhzgIV9ipB8a2h9gZeIgYiOfH6GhId8j4CPmpuRiKacf3CLiouSh6ChioWMfKiRiI+Sl5OWk3iMo6Ghnpaaf4CQmpiTjJujoaSal5Gbfo6FeYCDj4eggH2MjI98l6SgoJKZkI+mjY+Bm5GJkpebfpKSfoaNgXV0gnB2YH1/jYZyipV8iItyjH+ChYaOaHdxeIyYko9/l36IinOCh3x8cHl7jIV6e5GNg5amk4uGkXyGh4eFdYKDiId6ZXJ7f3h6cGxqZl59c2h8dXVzfHKAal5gdHZweGRjWV9eUmtoVGRZX2FnanZ4gXFma2NsaGV/gGptfmhucWt9d4Z6a4uBc4GBfYF0doKNhn58e3+BfX+PanKDbnNpYYdobGJfcVZ0b21uYHhobVdqdHZjdXt7cmJqbnmJjZ+ykqWlnI6QmI+GnKCbnHx2pKCNl3+MooqImpZ4e4aHfoOJfoiCgH9xf3p0dYKFfomQeGdjfYaXioKKjXh9gIyDeZaAlZeVjJafmn1vi4GRk4amm4eMiYSmlYWSi5aXk5J2kZ6hoZiUl3p+jpiXjpabnaSdmZOUnHqQhoN4hJeNnX6BiY2Mc5einqGSmI6PooyLg5aYg5KWmX6YjXyIjYF2cX1temR/fIqFcIaTf5CCbIeCgX+JhGV1b3yHkpeNfZN4i4l8gId8e3F+eIqGeYWRiouYopWBhI13iYWDgnZ7gYmGdl94d31zfXdmbGRhfmlqd3N0dH1xfGJjYXNudXNtYVpgXltrZFJiV2BhaGt1eIZwYmpjbWVofINsaHRobG9of3yCeG2QhnGAg4N/c3yDjIF/fnqCg358kG12iHR0bWWKbGphY3VWhGlxbmB5Z2xianZwZnl8enFgcmyGhZCcrZemqJ6NjZeHhp+Tl5h9d6qciph5l5yLi5iPeXuAi318g3uAgoB4dHh6c32Ag3+Ii4BkXn2LlYd/hYd0fX2Jf32XhJaTloyjoJd+cod6k5GKp4+MjoqToJGDkZCUl5GLgY+YoJqSkJF0f42SlImdnZ6nmJeNlZZ0jo6KbIaYj5l6h4iQiW+XnZqjk5WKjZ+MhoGSnH+SkpWGmYh8iYmBenF5a3Vse32Lfm6FkoKUd2+Cg31+in9kcmp7gJaXhH+NdJCJg3mHfnV4gH2HgX2DjYWNlKSQeIWCdImHfYBzdYCHg25ge3V6cXxvYW5jZHtibm92cnd3c3Rhdl9vbHVub1xbX11eal5PXVdjYWhtc3qJa19pZWpjaHeHbWZsaGlsaIB8endukIdzgYOEfXOBhol6gn16gYR9fI5yeop4eG5sh2toX2lxY4docW9ld2hubGF5aGt9e3hwYXdti4GZmqqgpKidioqRhoqeipWXfXeumIyWfZ6TkZaTiHd9e4p8fIB2d3+AcHRzem+FfIGAin58YFx+j5GGf4OEc3p/hnqPkYeRkZuSpJuUgX2Ae42KkqSJjYqNmJqMhpGYk5aOiYmMk52TkIyNboOQjpGJnpmioZeWiZaRb4iahGeGmY6TeomFkIpwlZqUoZKSiIuZjIJ/kJ58ko+Si5mOe4qEh3RzdWtxbnV7i3RuhZCOknF0gHuBgYh8ZHFseX2ZlH2EiHSQi4F0iHlvgH6Bh3yFjImFjZWojXuIfX6LhXd+cG+AhYNjaHh0dW97Yl5wYGp0XnFqenh4bHJwZXhdbWxzbXNYWl5fYWpaUFdXZWNncXF/h2ZdaWhnYmdxjm9kaWdlamiAend0bo6FdIGBgnt1goiFd4V8eISFeoCJd3+Le3pyeYNqa19waHSAa3JvbXFnb2xlfGNugHl2cWx3d4p/opiiqKGmm4eMioGQnIaTnHSBqpSSjYagjJaTkH90e3aFd3h/cnN7hWtyb3ltinaAgIZucVtZfpGNiH+AgXZ1gH9/oIaPipGcl6CTl3eJfoCMiJ2eio+GkpiWhYmVmY+XjIuNjo2dio6Qg22Iio+RipyWoZuYlYWXiGqFo4Nnhp2KkX6Lg4uBd5OYkZ6RkIiJlY1/fo+XfJGNj42aknyKf4Judm9sbW5we4Vpc4OOl4pwd390gomCeGZzb3aBmY58iYR6lJF6d4h0cIl7ho17i4aEiY+co4h8hHeCi4B4eG5qgIKBXXJzcXBveFpecGBwal5vaXx5cG1tamx2YHBva3JtWVhhYWFuWFFTWmZnY3VwhIJiXWptZGJma5JtYGZmX2hqgXVxcnCLgHV/goB4dYCLgHiFf3eHhneDhHuGjH97dop/anFjfGKGfG9xbHRqaG9sdndfcX95e3R1dICCfqSVmq2fp5aFjIN/l5SDj591ip+UkoaKm4yVjYt5cnh0gXByhHNxdYhsb2x1bYh2g31/bW5VUYGrlIeCeIB2coJ5gaCBkYGSkpebkZp4kXqCjJKkmpOOiZWZkoSHl5mMlIyJj4+InoWQinxyioWJjoicmZ+blpR/lH9php2IZ4ahiJKEkYOJcYORl4+ajY+Mi4+Nd3uSkHqOi4yRlox8iHyAa3ZqbmtrbHp+YXl+jpWBdnqAd4ONfHhndGx0h5WLf4iGe5SQcXqEcHeMeoqNe4l+g4yRn52FfXx4gox9dnBpa4GCeV93b21rcXNWXW9icWBfbG55cGdwZmZzdGhxbGF3ZV1WZmFgclNQTlxmZV14cIh8XlxocmJiZWaSaV9oZFtncH5wa3Bzin12fIWAdHV/jHl7hoF4iIJzhoR+jIyDe3mVd2ZyaoNgiH5vb2t6YGpudH90X3R9eYZ4dHOFfHigj5mwnKWPgop/g5qIf4uef4qZk46EiJiOjo6EdnR2c4Bwb4VzcHGDb2tpdm2Cbn18bXRzUk6C38iS1pN8cHSCdYOfgpN3lJCYmo+Ye5NyhZCfoZOTkImSm5SGfpaViI2NiJGNiJyAjoF4eox+iIyJnJudm5WTeY12aImSh2yIo4WSh5eDhmOMkZiOlImWjI2Ki3F7lIl6jYiKkpGJeYV7fmx7ZXJvamt5eVuAeY+NgHp9fn+Gjnp5aHNrc4uPioKFhX2VjGx+f2+AjH+Mh32EeoKPlZqainx3eIOQeXNtZnB/g2xqdG9oaXNtU15vZHBZX2txd2ZramJmeHJwcGNfd2BgVmtfXXZPTktgZmNdeXGJdFxbZXZgYWVljmNhZmFYaXNzbmtxdox8dHmGgXV2fotzf4Z/e4l+comHgZCKiHx+mHZlc218ZYh+bnBrgFpsbnl5c2F2enuNdnJ3ind5n4ubrpugkIKFd4iVfnyJnIeFn5COhYyXhJOOh4F0d3B5cW6Eb21ufnJkZHhwfG16fWpobGOkmsHcru+hc2t1g3WEooWRbpWPlJ+Tm4GRcIWLo5eJjZWKkJ2Wg4CVkIWJj4CSioqXf4d7dX+Jd4aEjZuamJmOj3aKdm6GiYt9iqOEkYmdhYVei5SXio6IjouKhIlsfJaBfYiFiZCPhnaFfX1rfWR3dWpteHNXiHqRhoV6fn+AhYt+eGVzan+KjoqDgn+MloVrgnVuiJGCkYV/gnqAkZaTmZB1dHiIjXVzcWd1eYJidG1vYmh1Z1JgcWdrVV9udHlgcmNfaH1wcm5bY3JhYlduWVx3TU1MZGZhXnZzim1bXGR4XmBkZYVfY2JeWGpya25rcnaMfXN3hIF4d3uJcYOEfX6Ie3SLiIiVhox+fphzaHVxeW2Lem50cIFYcXp2eXFld3mGjGl2gIlyf5yHmKeco5KEfHCMlHh5i52EhaGNjnuVjX+Zh4R7cndwc2pvgWtpbHx0XmB4dntwdXtnYGV869q1ycPciHNsc4B2ipqIjWmXj46clJKBiHCFiKCOhYqVio2YlHyNk4iDiY97kYuGkIJ/dniDg3KHgpKblpSYhox2h39whYKJh5mig5SMnoOJYYOVj4aJhomNh4CHaX2Uf32DhImOjYJxhn5/cXdodXJpc3drWox9koGFfH+DgISKgnVhdGyIgY+Lgn5/kpF9boJseYaPhpOEfYF9gJKTkJeJb3J6jYZ1bHBrcniAX3NpblxqdmBSZHFoZlNfcHZ0YG9gXWiCcXNqV2doY2lYbVdbdUxKTGVnX2Jyc4VoW1xleV5eZGd7YGRfXFlrbmVvanN3in5zcoF+enZ6iHOFgnx/hnZ3ioaPmIKMgXuTdmx2dXl4k3RueHp9WHmFcYBvZ3l3koJkdoaFcYqWhZmhm6KKhnNvkotyd46cfYqaiIl7n3+DmX+BeHFzbm9kcn5oZmx3d1tfeXt6cXF/aWFnYX/Vto6QpnhucXd7cJKQjIdqmI2Im5GLhXtoh4uZhoGSkYaHmI18jY2BgYmNfJCMfoqFenV7gntwhoCVmY6SlIGIdYOGdoOAi5Odn4aVj59+iGF/k4eEiISJjX9/g2d9kH9+f4KLj5B+bYJ8gnRrbXZ0c3Z1a2ONgY5/hX58hH+Eh35wX3NxhHyPjYJ8f5KJenGDZnqDioeMg3yFfoCUj5GThG5weox/dW1uamx6fWJoamlYbHVaUmlyaWJRYnJ4bGFlXVpqg21zYltnX2VsX25UWm9OSE9nZVxnbnGAbFpbY3JfXGNrd2RlXVxabGxjbWpzdod/cW9/fHx0eIZ4hYJ9f4d1eYmBkpV8iIZ2iYFvd3l7hJNwbXuBd16Df3SBbWl7c5RzZ3KIfXKSkYOan5ughod2dpR+bXaTl32HkIOKjZp8i5p2fXZxb2xqYXR8Z2JpdXpaX3d8em1xfmVjaGhXnY9ecXKWvMODdXGUiJB+cpaLhpyTjIdyaoiPloB7lIyBhJuMfIqGfXyJjH+UiHWJhXZ3fYFxdYaBnpSFlI+DgnJ/iHWEfImYnZiHk46dgIhmfZOCf4WDiYlygX1nfot7eH5/h4uOfGmAfIN2ZW94eHJ2c2xqjYWKgYp/eIGAhIN/a15yeHp9jYqFe4KPgH5ygGl5g4eLhoR5hHyBmI2QjH1ubXuJfXd0bmhnfHZjXHBiV29yU1Nuc2hhTmZ0eGVgXVxYboBvc1llYV5qbmBwT1lrUURTZ2Faa25tfG5aW15sYlpjb3ZjZlxdYGxpY2xqc3aCg3Fufnt/dHWDe4OCfIGFdn6JgZaQeIOKdIGIcnh5fo2Qb298gXFpgXl6fm1tfHaVa2p3hHRslI2FnpigmYWIbn2Mdmp4mI5+gYqClZeKeY6Wb3pzcGxqZGB0e2hfZXF6WmByfXlncXphZWWPsbJ3SmJapNnQlnF7kIqQd32Ui4SZkYuFbmuFkpJ6eZKGgISYinyHf3h4iYqEloBvjIhxdH16aXiFg6WQhJOMg39vfoN2hHmFm5iTi5KQlIWHcHuSgn2Cg4mDboF4aICFeHJ/f4KKhntlfX6EdWNwcn9oeHBvdZiNhYKKe3Z4gIR5gWtccX1ygYiFiX2GiXqIcoFucYSHjoSFc4R5gZmNjoR4bm9/hH92emVoan1wX1l3WlhxbU5XcnNnYEtsdnRgXVtbWXR9cm9XZ11manFfbk5XaFE/WWdfW3BqZ3lxWlpZa2VZY3B5X2hcXmVtaGZsaXF3f4dvbH99gHVvgnt/gX6Cf3aBhYiXinGCjXF7hnx5eYOTjHVqen9rb350f31vcnx7lG9ugX94ZpKKgqGZnZGChmeHg29nepWJfn+FgZmKgXyNjGl4cmtsZl9hb3htX2JveFxka4J6YXF2X2Vl1Oq+ijI6PouOgHF5hYeOjXaDlox+ko2Mf21shY2Mdn2Pf4WBlYl8g3hudoeEg5d3b4iFa3V7dGV5goOni4OOi4R9bn90doN5hpyQjJCRkoyLhn57koZ3f4SNg2yAcml/fnhtfHuBioN3YnmEgXFkcWh+bXRxdIGaioB/hX5ydX2AcoFwW21+dHiKg4t7h4B8iHh6cWyIg4+Ei3KBeX+Xi4t/dG5rd4CAdXVcaWh3cFlXfFNacGVMWnJyZVtKcHduXFpaWV10fnVoWWJbZ2VuY2lMV2ZRPV5mXF11ZV90cFpZVG9kWWRxeVpoXl9nbWdqbGlwd32ObGmChH55boB8fYF/gnp1goGMk4VwgItueH6AenuIkol/aHt9anR7coZ7c3d9f4x5eIR9fGuMjIObnZaMgYBsjn5raH6OjHt+f4OUgn99iohrdXFnaGNbYmdybmBha3NhaHCJeWFzdF5jZJugj25cNVmvtXRpgIh8koZ2hZaFc46LiXZwbIWDh3V5iXiJfJKIen9zZ3aJfn6Yb3GGfmh2eW1leYiEpIaAh42Jfm5+dn+AfIyZh4KTkJiIi4SJfI+IcHt9hHtofm1rgHt6aXp2gYeBcmB3gX5xZHJmdYJtdHuFlJGBfIF/bnd5fHR+bVhvf3Z0jIKGd4h2gol6eHNuiYGPgYVyfn1+k4mJem5uam6CgnVuXWdmc3FRW3tOXHBcT1tycGRVS3N4aVdZWVphcYB0YF1dYGdkaGlmTlloTUBhZFtgdmFddW1YV1N0YVpkb3JXal5haGtnbWxpcHd8kmtohIl8fHB+fnuBgIJ6d4B/iouDcXuHb3F3g397iY2Pg2p+e253eXaKd314gIKHf4N+fnpthYyImKONhIN7dYt5a2yEiJF4fXuBkYCAfoqDcHJwY2ZeWWdfb3BgYGdwZmpvinRhdG9bYWRqdnt/vpymo8i4cYWDc5N8eIaTgnORjIhycm+De4N0dYd0iHeTiHl5cWN3h3qAk2lyhHZmd3VjanyDh52Bf3+Ojn1yfnOEeYCRkIJ4lo2Uj4iCiHuIiWt4eX51Z3poa395c2l6doCCfWhgd4d9amt0Z3t/aXaBjJCUfnp+fnB7dnt0fmJWd31yc4qEgnyDcYaKd3hwcIOCjX99eX59do6Gg3ZpcWltiIJycF1oY3NuSmV1TF5uVVRZc25iUU9zeGBSWFhdYnCCc1thXWhlZGNqZFFacElEZGFbY3BeXXdoVVdVd11bZW5oVmteYWpnZW9vaHB2epJuaYiMeX1ye354gYGBfHZ9hIiGg3B2g3Jud4KCfomLk39wgHt3eXqBjHSDeH+BgYKEeoB1b36Ji5qeiH2FeneGe2d0hYyQen9/e4mGhHaPgGdvbl9kXFhlWW1yYGBgcGxraIluYHNpWV5kbYB3qdqpx4aHsnGJeG+MdXuGjoB6k4mAdXR0fneAcHF/bYR0lIZ4dGtgeoJ5iI9mcYNvZ3ZtW219gJCTf4B5kpJ9eHtth3WAkIuEdJaKkY6HhYV7f4VsdHZ/bWd3ZW17dW1qdnd/f3xgYniGemh0dWJ9emd0hY6MlXt0f3VxgHp8bX9ZVnR+b3WEh3+AeWyIhnR4a3V/g4R9e314e3OLgX1zZ3RlbouEbXNbal91ZEhubkxbYldWVXhtYlBSdHZXUFVYXmFxhG9cYGNtZGNebmJUXHJHQmZfXWZoXlt7YlFVXHVbW2drYVZqX2BuZmZrcWhwdXiOdGuOjHV+dnh+d4GDgXtzfoSIh4NvcX90cXV+hYKJjYp7d394g3x8hYd4h3x9gX6EgHt+c3Z5i46fjYl6iXZ0g3lefYWZjHmGg3SFhoV3iXtibmxbYltbYVZqc2NgW2dub2aHcWFxZlddY2t/fMrOiLmiam1timxxhHF8hIl+e5GFenlzeXV1e2psdWOEdZGCd29mXn2CeouJZXKCa2pxY1hse4WbiIKBc5eUd357bohxgYqLh3GXjpCIhYuDe3l+cXFvfWZocWJteHFqa3F3fHx5XGV5gHdpdXhmgXZndIeLjZR8cYZpb36AeW58XVhyf210gIt8gm9viX9xdmh3f4F/gXd9cXp0h3x6cmZzYW6MgmxyWGtfd1tJbmtNVlVeVFV7a2FPVHVyUFFUVl5idIVoXGBsamZjWW5hWGJwR0FoXWBmX11We15PVmRwWVtqaF1XaGBfcmZraHJncHJ3hnhulYp0f3p4fnmCiIB1cn+HhY2CcHB7eHd1eYaGhouGenx/dYt+fYWEhId/fn59h398eHZ5d5GTn3+MfIttdoB5Y4OHl4ZzkotvhYWBeYJ0Y25qWV9bXV1UZ3NlYFlkcXFmgXNia2VXW2Bpf3e+rnugt21ic4Zoc3txeYKFe32Mf3d4cnZve3Zlam5gh3WOgXNqYl5+eHmLhGZxfmhqa1pWb3iJo4GEf3GZk3GAeHWCbYCCkYdzlYiMiISIhH14dHJuaHlgam1gbXZqZ2preXd6d1tnfXx4ZXJ9bYR0ZXWFjIaVf2+LZmt6g3VtdGJcb3xrdXyLfIFmdYd9bXFndX54fn9yfWt6eoF7eHBmbGJuiX5tbVZrYHdVSmprT1JOaE5ZfGhiTlV1akxQVFVfZ3aDZl1gcWhnYVdpXVtraEpFa1piZFdZVXlaTlZtalldbGVcWmVjXnRmbWRxZ3JvdYF3cJmFdn9+d398hYd9dXOCiX+Vgm5zeHp6c3OFh4iIhHmBfXaPf3yEiY6EgoR7fouDe3d8d3eanZd6ioOGaXd9fGyDhJOAco+CcYWCfoF/b2ZsZlddW1xbVGRwZF9XY3J1aXVwZWVjV1xcaH9wb3KAdIlkZHh+aXR1c3OChHiAhHl2c3Vua3pwYWdrZ4Z0jYNuZl1ffXB7iX5pbXdmaWRVVnJvjaZ8hHt2lpBze3N8em57e5CFdph8h4aDhoN8dHBybGd1XG1oX2x0ZGdmaXpve3JZZ4F3dWdwgHeBdWJ3hIp8lIBui2lteoFxZnNlYG16Z3N3inx+YnWDdmlrcXR6cXl5c31mfn9/eHduY2ZiboZ8bWtWamJwU0tpa09MTnBHXntmYU1VdGNKTlNXYWp2fmVcZ3NpZmBWY1dicF1MS2tYY2FVVFVzVkxYdWRaX2thXFtjZV93Zm1icGlzbnJ/dHSagXd/gHd/foaEen11goR+l4VucnR7enVxhIWPgYB6i3V0kH98gZSOgIWEfX6Mhnt+gHZ7o6WKeYiFhGx1fHt1g4KMem6Fc3mEfYGDdW5qaGVWXVtaWlNibmRbWGJze2lobWlgYldfWmmAamtvgGdrYWh5eGpzdHRthIF7f312dW17aGp5al9lbmiBdo+EZ2VYYndpfod7b2lvZ2ZdVVhvaI+od4F6fJCOeXVvfm9zdXmPgHeVdIWCf4WHdWpydmdobltsZF1scl9nYWl4aHttWm2CcnNpb4B+eXdgd4SEeI+Ecodxb3l/cmNxaFxvd2Rxc4h8eGJzgHBnanhzcmx4d3V3ZIN7f3d2b2RkY258fWtsVWliZlNLbWhPR1JrRWF4Z2FNU3FcSU1UWWVrd3tlXm1xaWRdVl9Vbm5XS1RoV2ZeWE5VbFRKXHlfW19rXV1aYmVgemhsYW9vdW5wd3V6mH13gIF6gH+Hhnp4eoN+gZOEcXR0fnp2dIWIkH2AfZBrc5WAe4KfhX+HfYB+hoKAint2hKyff3qIh4RscoJ6doCAgXVuh298f3OJgGpvbWRkWF9aWVpVYmpnXFpedYFpXm5sXGFWXFxrgWZxdH1paV1rdnVndHdxbIV7fX15dnJsemhpeGZdZHNoeneSgWNjVGVwZ4KFd3dmaGpgV1ZZZ2OPp25+d4CLjnpwcHxmeW96jHt2jnGEfX5/hm5kdXNkaGhca2Jdb29bZ19sdWR6aF10gG9ya3F7fXV1YXSFinqHhn9/d3J1f3VhcGxZcXRicXKFfHVkcn9sYWx6b2ppenh1cmaFdXp6dXBkYWRuc35pbFRpXl1US3NjUUdWYUdidmZhS1RvV0pMV1hna3Z6ZGVucWZjWlddWHZlVEpcY1doWFlJV2VRSGJ4Wl1fbFteXGFkXn9pamBvdHhtcG52g5h5coGAfH+Ii4Z+dXWGeYeLfXR1dYJ4enqCjI59foSIanOXgXqKnX1+hXqBen58hohzcY+ujHt7ho9+ZnKIenR8fHZyb4Zse31sj3picG9iZV1lVllZVmNma2BdXHOFaFhxblpeV1pcbHtjcHd2bGJbbHJzZ3R1cGyEeX6AeXdubnRlaXRlW2d1ZnZ2kXpfXVJlZmqCgnR9YmNpXFRYXWJjkKVoeHSChZB4bW55Z3htfIV7dYhygHh8eH9oZXZsYGZgXmpfXXNrWWVdb29iemVbd3trbm5wd3hzdGRyg5J+h4KIenVvcn1yYnhkW29wYXFxgnxzZnGAZF5udmlkZ3l6dG5vgXV0fXNxYl9mbm99ZGpTaFhZVE13X1FKWVlIYnRkYUlUbVNJTFpXaWxxe2JsbHNjYVpaW2F2W1NLZF5YaVNXR1lgTkdpdVheYW1bW19iYl2FaGhhbnh5bG9rdoGQeW2DfoCBkoiEgHZ0iXSMhnRyd3aBd3x9foyPgH6TfnB4loN8mZJ5gIB4eX1/dIiDc3CZont7f4iVeGR1iHlzeHVsdG9+bHl8cJFyXnBvYGdibFRbWldoY21mXFxxiGVScm5bWlhYYGx3Y2l1ampeWm1zcWxzc3NqhXx+f3x3bm5sZGlxY1tqcmR0do5zW1dTZGFygH9ygl1iY11TWmBbY5KfZXJxhYSRdGxqeWxvcHp8e3GAdn9yenl5ZGV1aF1iWmFnW153aFdiXW9oYXdgW3t2amlybndzc3RocIGUgoZ+g3VyanB8bWZ3V1xrbWJxc4F6c2Zvfltgb3FiX2pxfWxsdH5zcXhrcGFcZWxsemFnU2dVV1JQdltSUFlSSWNzYmBHVWpQSFBaVWtra3xlbW9xYVxaWFlscFdSUGZWV2lTVEZaXE9IcnRYX2NtY1hhYGFdi2pjZG15eGtvaXV5hntrg32AhJl8goR5fYhuj4Zxb3d6fHSCgnyLj4OCl3R3gpSFgZ+JdYCAgXN/gXCHgnVvopd0e4aLhntleItubntvZnhwemxzdnKMa150bmFnZWtSXVtWZ2JsbFpccYxkT29uXVZYVWdqdGdidGVlXVltdG1wdXV5aod8f3yId5BzZGRrbmFcbm1jc3iHa1pUVmJjeH19cYVdY19jVFpgWWOWlWNucIOFinNqaHpuZXN2c3xsenR1b3l+dV5mcmNbXlZiZFhhdWVVX2BtZGFxXV1+cGhpc3FzcHV1am2Ek4GIe4RxcmZufXByb1NbZmpmcXSBd3NibHZVYnFqW19uZXxlbXZ8c3Jzam1gWmRqandeZlRkVVZQVG1XUVdTUEhlcl9hRlhpTkhXVFZtaGR8aWt4a2JXXFVbdGRTUldoUVlmVFNIWlpQTXh3W19lbGlaYmBeXo9uYmZreXVub2h2dn9/bIOAfYaXe3+IgYl+a5OIcmd0gHt1gIN9iI5/jJNzfIqRhYefhnt/hoxzgIZzfYN2bqWMc4GNi3Z3bXqMYGR8cGZ6c3lsbXF2gmdke2xjZmdoU15eVGdgbG9bXm6NaE5qbWBUVlNvZ3NrZXdkZV1Yb3Rscnp3cmyIe4B2nHt6a2FlbG1eYG9qZXB4fmdaVlhga3h8e3CEX2JeZ1ZYX1dknIhia3GBh313a2t4bFt2cWx6aXVzbm97gHJYam5fWV1VYWNXZHFjU15haWFibFpgfmxma3N1bm13dmtohYx/iHqHbXBmcHxtcm1jWWFoaW90gXRyXmlsUmVxZFRibmJ6Y3F2e3VrcG1rX1hhZ2h0XGVWYVZTTlhlUk9cT09IZXBdY0ZZaU1JX0tYbWRfeGhufmRgVV5UXXRbVFJgZk5dYVRTSlxZUFl1dl1fZm1oWGNhW16OcGNnandxc25ndnR6g3KBg3qIjX58ioeOeW6QinRsc4J0f3+IhYaRhJWPeX6Mj4iRm4SAfIyEc3+Bc3R3cW6Tk5OTk5OTk5OTkpKSkpKSkpKSkpKSk5OTkpKSkpKSkpKSkpKSkZGRkJCPj4+Pj4+Ojo6Pj46OjY2Njo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo2NjYyMjI2NjY2Njo6Ojo6OjY6OjY2Ojo6Oj4+Pjo2NjY2Oj4+Pj4+PjoKAfnp6fX5+fX1/fn59fn5+fn5+fn+Af4CAgIGAgIB/gIGBgYOHjI6Ojo6NjY2NjY2NjY2NjZKSkpOTkpKSkpKSkpKSkpGRkZGSkpKSkpKSkpKSkpKSkpKSkpGRkZCQkI+Pjo6Ojo6NjY6Ojo2NjY2Njo6Njo6OjY2NjY2Njo6Ojo6Ojo6NjYyMjY2MjIyNjY2Njo6Ojo6NjY2NjY2Njo6Ojo6OjY2NjY2Ojo6Ojo+Ogn99ent8fn59fX5+fn5+fn5+fn5+f4B/gICAgICAgH+BgYCBg4aMjY6NjY2NjY2NjIyMjIyMkpKSkpKSkpKSkpKSkpKSkZKSkpKSk5KSkpKRkZGRkZKSkpGRkZGQkJCQj4+Ojo6OjY2NjY2Njo6Ojo6NjY2NjY2NjY2NjY2Njo6Ojo6Ojo2NjIyMjIyMjIyNjY2NjY2NjY2NjY2NjY2Njo6Ojo2NjY2NjY2NjY6Ojo6Cf3x6fHx9fn19fn19fX59fn5+fn5+gH9/gICBgYGAf4CAgICDhouOjo2NjY2NjIyMjIyMjIySkpOTk5KTk5KSkpKSkZGSkpKSkpKSkpGRkZGRkZGRkJCQkJGRkZCQkJCPj46Pjo6Ojo6Ojo6Ojo6Ojo2MjYyMjYyNjY2NjY2Ojo6Ojo6OjY2MjIyMjIyMjIyMjY2NjY2NjY2NjY2NjY2Njo6NjY2MjIyNjY2Njo6OjoN/fHp8e31+fH1+fXx9fn59fn5+fn5/f3+BgYGAgICAgYCAgIOGi42NjY2NjIyMjIyMjIyMjJFtZmdnZ2dnfYWEhISEiF0tMDAwMC1GoaGhoaGhoJqZmpqampqKg4SEhIOEd2VnZmZmaFxDREREREJOpa+tra2usH9rbm5ubm9qZmdnZ2dmb4SDg4ODg4OLjIyMjIyMjY2NjYyMjY2NjY2NjY2NjIyMjIyNjY2NjY2OhX19e3t6fX58fH59fX1+fX1+fn5+fn9/f4GBgYCAgICBgICAgoWKjI2MjIyMjIyMjIyMjIyMkWdfYGBgX155g4KCgoKGUxgdHR0dGTekpKSkpKSjnJycnJycnImBgoKBgYJyXV9fX19hUjQ1NTU1M0GptrS0tLS3fGVoZ2dnaGNfX19fX15qgoGBgYGAgYqLi4yMjIyMjIyMjIyMjIyMjY2NjY2MjIyMjIyMjY2NjY2GfH16e3p8fXt8fn19fX59fX5+fn5/f3+AgYCBgYGAgIGBgYGChYqNjYyMjIyMjIyMjIuLi4uRjo2NjY2NjY+QkJCQkJCMh4eHh4eHiZOTkpKSkpKRkZGRkZGRj46Ojo2NjYuJiYmJiYmIhYaFhYWFho+QkJCQkJGLioqKiomKiYiIiIiIiImKioqKioqKi4uLi4uLi4uLjIyLi4yMjIyMjI2NjIyMjIyMjIyMjY2Njoh8f3l7ent8e319fX18fX19fX5+fn9/f4CBgYGBgYGAgYCAgYKFioyMjIyMjIyMjIuLi4uLi5GSkpKSko2QkpGJh46KkJKTkIqRjo2RiI+RkZGRkJCQkJCPj4+Pj4+Ojo6Njo6Ojo2Njo2Njo6Ojo6NjIuLjIyMjI2NjY2NjY2NjY2MjIyMjIuLi4uLiouLi4uLi4uLi4uLi4uLjIyMjIyMjIyMjIyMjIyMjIyNjY2NiX59eHh5fH18fX19fHx9fX59fn5+f3+AgICBgYGBgYCBgIGCgoSKjIyMjIyMjIyLi4uLi4qLkJCRkZGPhI6QkIaKj4WNkJCOh4mHhomFiJCQkJCQkJCQkI+Pj4+Ojo6NjY2NjYyMjIyMjIyMjIyMjIyMjIyMjI2NjIyMjIyMjIyMi4uLi4uLi4uLi4qKiouLi4uLi4uLi4uLi4uLi4yMjIyMjIyMjIyMjIyMjIyMjI2Lfnx3dnh7fXx7fX18fH19fn5+fn5/f4CAgIGBgYGBgIGAgIGChIqMjIyMjIuLi4uLioqKioqQkJCQkIqFjoiOhoaPiY2QkI+GiIaFhYWHj4+Pj4+Qj5CPj4+Ojo6OjY2MjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMi4uLi4uLi4uLi4uLi4qKioqKi4qKi4qKi4uKioqKi4uLi4uLjIyMjIyMjIyMjIyMjIyMjIt+e3d2eHt8fHx9fX19fX1+fn5/fn9/f3+AgIGAgYGAgYCBgYGEiYyMi4uLi4uLioqKioqKipCQkJCPhYOMjpCOiYyJjZCQj4mGhYeEhoiPj4+Pj4+Pj4+Pjo6OjY2NjYyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIuLi4uLi4uLi4qKioqKioqKioqKioqKioqLi4uKioqKiouLi4uLi4yMjIyMjIyMjIyMjIyMin18dnZ4fHx7fH19fH19fn5+fn5+fn9/f4CAgYCBgYGBgIGAgYSJi4yLi4uLi4qKiomJiYmJkJCQkJCMhoyJjoeFjYmOi4yLhoiGhoiDio+Pjo+Pj4+Pjo6OjY2NjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyLi4uLi4qKioqKioqKioqKioqKioqKioqKi4uLioqKioqKioqLi4uLi4uLjIyMjIyMi4uMjIyKf353eHp7enp8fHx8fX1+fn5+fn9+fn9/gICAgICBgICAgYCBhIqMi4uLioqKioqJiYmJiYmPj4+Pj5CMjouPjIqPjI6MjY2JjoyLjomOj46Ojo6Ojo6Ojo6NjYyMjIyLi4uLi4uLjIyMjIyMjIyMjIyMjIyMjIyMjIyLi4uLioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi4uLi4uLi4uLi4uLjIiAfXh5enp6e318e3t9fn5+fn5/f35+f39/gICBgICAgIGBgIGEiouLioqKioqJiYmJiYmIiI+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Ojo6Oj46Ojo6Ojo6Ojo2NjYyMjIyLi4uLi4uLi4uLjIyMjIyMjIyMjIyMjIyMjIyMjIuLi4uKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLi4uLioqKi4uLh4B8eHp6eXt8fHt7fH1+fn5+fn9/fn9/f39/gIB/gYGAgIB/gYSJi4qKioqJiYmJiYmJiIiIj4+Pj4+Pj4+Pj46Pj4+Oj4+Ojo6Ojo6Ojo6OjY2NjY2NjY2MjIyMjIuLi4uLi4uLi4uLi4uLi4uLjIyMjIyMjIyMjIyMi4uLi4qKioqKioqKioqKioqKioqKioqKioqKioqKiYmKioqKioqKioqKioqKioqKioqKi4uHgHt5eXh6fHx6e3t9fX5+fn5+f39+f39/f39/f3+BgYCAgH+BhIiLiomJiYmJiYmJiIiIiIiOjo6Ojo6Pj46MjI+Sj5COjo6Ojo6NjY2NjY2NjY2NjIyMjIyMjIuLi4uLioqKioqLi4uLi4uLi4uLi4uMjIyMjIyMjIyLi4uLi4qKioqKioqKioqKiomKiomJiYqKioqKioqJiYmJioqKioqKioqKioqKioqKioqKi4aBe3h5eHp8ent7fH19fn5+fn5/f35/f39+fn9/f4CAgYCAgIGEiIqJiYmJiYmJiIiIiIeHh46Ojo6Ojo6Ojo+MkJOQkI+Ojo6NjY2NjY2NjYyMjIyMjIyMjIuLi4uLi4qKioqKioqKi4uLi4uLi4uLi4uLi4uMjIyLi4uLi4uLioqKioqKioqKiYmJiYmJiYmJiYmKioqKiomJiYmJiYmJiYqKioqKiomJioqKioqKhYB6eHl5fHt6ent8fH1+fn1+fn9/fX9/f35/f39/gICBgICAgYSIiomJiYiIiIiIiIeHh4eHjY2Ojo6Ojo6Pj4+PjoyNkI2NjY2NjY2MjIyMjIyMjIyMi4uLi4uLioqKioqKioqKioqLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4qKioqKioqJiYmJiYmJiYmJiYmJiYmKioqJiYmJiYmJiYmJiYmKioqJiYmJiYmJioqFf3l6eXh7e3p7fHx7fn5+fX5+f39+f35/fn+Af3+AgICBgYCChIeKiYmIiIiIh4eHh4eHh4eNjY2Njo6Oi42Nj5WPiYyPjYyNjYyMjIyMjIyMjIuLi4uLi4uLi4qKioqKioqKioqKiouLi4uLi4uLi4uLi4uLi4uLi4uLi4uKioqJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYR+eXt5ent7eXt9fHt+fn59fn1+f35/fn9+f3+AgICAf4CAgICEh4mIiIiHh4eHh4eHh4aGhoyNjY2NjY+MjImKj42IjJGPjY2NjIyMjIyMjIyLi4uLi4uKioqKioqKioqKioqKioqKiouLi4uLi4uLi4uLi4uLi4uLi4uKioqJiomJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJg355e3p8e3p7fX17fH9+fn5+fX5/fn9+f3+Af4CAgH+AgH9/f4OGiIiHh4eHh4aGhoaGhoaGjIyMjIyLiYyKiIeJhoyOjJCMjZGOjIyMi4uLi4uLi4uLi4qKioqKioqKioqKioqKioqKioqKiouLi4uLi4uLi4uLioqKioqKiomJiYmJiYmJiImJiYmJiYmJiYmJiYmJiYmJiYmIiImJiYmJiYmJiYmJiYiIiIiIiYmCf3h7e3t6enx9fHx9f39+fn19fn9/f39/f4F/gIB/gICAgICAg4aIh4eHhoaGhoaGhoaGhoWMjIyMi4yOjoyKioeEiIuKjIuNjo+Li4uLi4uLi4uLi4uLioqKiomJiYmKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiomJiYmJiYiIiIiIiIiIiImJiYmJiYmJiYmJiIiIiIiIiYmIiIiIiIiIiIiIiIiIiIJ/eHp7enp6e3x8fX1+f35+fX1+f39/fn+AgICAf3+Af4CAgYCDhYiHh4aGhoaGhoaFhYWFhYyMjI2NjJCSjI2Ii4mJi4uLi4mLjIqMi4uLi4uLioqLi4qKiomJiYmJiYmJiYqKioqKioqKioqKioqKioqKioqKioqKiYqJioqJiYmJiYmIiIiIiIiIiIiIiImJiYmJiYmJiYmIiIiIiIiIiIiIiIiIiIiIiIiIiIiHgXx4e3x5enp8fHx9fX9/fn59fX9/f39+fn+Af4B/f3+Af4CAgIKEh4eGhoaGhYWFhYWFhYWFjIyNkY+PjZGJjIaJjIuIiImMiYeNjo+NioqKioqKioqKiomJiYmJiYmJiYmJioqKioqKioqKioqKioqJioqKioqKiYmJiYmJiYmJiYmJiYiIiIiIiIiIiIiIiImJiYmJiYmJiIiIiIiIiIiIiIiIiIiHh4eHh4eHh4WAenl9e3t7enx8fHx9f39+fn19f39/f35+f4B/gH9/f4B/gH+AgoSHhoaGhYWFhYWFhYWFhISLi46PjoyLj4iHiYmMjYWFjo2KiYyNi46KioqKiomJiYmJiYmJiYmJiYmJiYmJiYmKioqKioqKiomJiYmJiYmJiYmJiYmJiYmJiYmJiYmIiIiIiIiIiIiHiIiIiIiIiIiIiIiIiIiIiIiHh4eHh4eHh4eHhoaHh4eHhH55eX16enp7fXt8fX5+f35+fX5/f39/fX5/f3+Af39/f39/f4CChIaFhoWFhYWFhYWFhISEhIuLjI6MjI2Lh4mIiomGgoiNjoiKi5GTj4uJiYmJiYmJiYmJiYmIiYmJiYmJiYmJiYmKioqKiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiIiIiIiIiIeHh4eHh4eIiIiIiIiIiIiIh4eHh4eHhoaGh4aGhoaGhoaGh4eDfXp5e3p5enx8e31+fn5/fn59fn9/fn9+fn+AgICAf35/f39/gIKEhoWFhYWFhISEhISEhISEioqOjYmIiIqKh4iHiomIioiIh4qGi5GPiomJiYmJiYiIiIiIiIiIiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmIiIiIiIiIiIiHh4iIh4eHh4eHh4eHh4eHh4eHh4eHh4eHhoaGhoaGhoaGhoaGhoaGh4J8eXl6eXp7e3t7fX5+fn5+fn59gH9/f39/f4CAgH9/fn9/gICAgoSGhYWFhISEhISEhISEhISKi5CPiYmJi4qHh4WHiYuKiYSLjYmOjYqJiYmJiIiIiIiIiIiIiIiIiYmJiYmJiYmJiYmJiYmJiYmJiIiIiImJiYmJiYiIiIiIiIiIiIiIiIeHh4eHh4eHh4eHh4eHh4eHh4eHh4eGhoaGhoaGhoaGhoaGhoaGhoaGgXt4enp4e3x7e3x+fn9+fn5+fX1/f39/f3+Af4B/f39/f3+Af4CChIaFhYSEhISEhISEhISEhI+Qj4+IiYuIhoeIiYuLjIuJioqNio6Oj4iJiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIh4eHh4eHh4eHh4eHh4eHh4aGhoaGhoaGhoaGhoaGhoaGhYWFhYWFhoaAe3h5eXh4enp8fX1+f35+fn59fn9/f39/gIB/gICAf39/gIB/gYKDhoiGiIaDhISEhIODg4ODkpKOioeKi4qLh4uNiYqJi4iHiouIio+SioiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIh4eHh4eHh4eHh4eHh4eGhoaGhoaGhoaGhoaGhoaGhoaGhoaFhYWFhYWGhn96eXh4eHl5eXx9fn5/fn5/fn1+f35/f3+Af39/f4CAgH+AgH+BgoOHjo+PjoiHhIWFhoaFhYWSkI6KiYmIiImKioiIh4aKjIiHiYmOkJGNh4iIiIiIiIiIiIiIiIiIiIiIh4iIiIiIiIiIiIiIiIiIiIiIiIiIh4eHh4eHh4eHh4eHh4eHh4eHh4aGh4eHh4aGhoaGhoaGhoaGhoaGhoaGhoaGhoWFhYWFhYWFhYWGf3l4d3d3eXp5e3x9fn9+f35+fn5+f35+fn+Af4CAgICAf3+Af4GBg4eOjo6Ojo6Mjo2OjY2MjZCQjomHhoiJiYeIiouIiYyJiYaKjY6PkYuIiIiIiIeHh4eIiIiIiIiHh4eHh4iIiIiIiIiIiIiIiIiIiIeHh4eHh4eHh4eHh4eHh4eHh4eHh4aGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaFhYWFhYWFhYWFhYZ+eXd5d3d6eXl8e31/fn5/fn5+fn5+fn9+f4B/fn+Af39/f39+gIGEiI6Ojo6Ojo6Ojo6Ojo2NkJGOi42JjIiIiYaHiYaIioiHi4yLjpCQiIeIiYmJiIeHh4iIiYmIh4eHh4iIiYiIiIiIh4iIiIiHh4eHh4eHh4eHh4eHh4eHh4aGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoWFhoaFhYaGhoWGhYSEhIWFhoaFhIWFhX55d3l2eHl4e3x7fn5+fn5+fn5+fn5+f39+f39+f39/f35/f3+AgYOGjY2Ojo6OjY6NjY6OjY2Qj42Ni46KhoiKhISLiYeDhYSDi4mLj42JjI6QkI+NjYyLjY6Pj42NjI2Nj4+Pjo6MjYyMjY2KiYiHiImHh4aHh4eHh4aGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoeHiYqKiIeJi4yNjo2LiImLi42OjYyJiImMgHl3d3Z6eXh7e3t9fn5+fn5+fn5+fn5/f39+fn5/f4B/f4B/f4CBg4aMjY2NjY2NjY2Qj4+Pj46NjI6KiYuMjIeFiY2Lh4aIh4aHh4uNjo6Pj4+Pjo+Pj4+Pj4+Pj4+Pj4+Ojo+Pj4+Pj4+Pj4+Oj46Oj46Mi4uJh4eHh4aIhoaGhoaGhoaGhoeLiYeHiIiLjY2Mi4yLjY2Ojo+Ojo6Pj46Ojo6Ojo6Ojo6Njo6NjY2AeHZ4eHp4enx6fH5+fn5+fn5+fn5+f39/fn59fn9/f39/gH9/gIGDhoyMjIyMjY+QkpOTk5KSjYyMjIqHioyKh4eJiYWCiouIiYWJjpCNjo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6NjI2NjI2LiYaHh4eHiYqLjY6NjYyNjY6OjY2OjY2NjY2NjY2NjY2NjY2OjIyNj4+OjY2MjIyLi313dXd5enp7e3p+fn5+fn5+f35+fn5/f39+fn1+f39/gICAf3+AgYOFj5KRkJGSk5OTk5OTkpKLi4uLiomMiouLiYuKhoeOjYiIjI6OjIuMjIyNj46Njo6Ojo2NjY2MjY2NjIyMjIyMjIyMjY2NjYyMjI2NjYyMjI2NjIyNjIyMi4yMi4yMjI2MjIyMjIyMjIyMjIyLi4uLi4yNjY6Sk5OSkpSRkJOVlZSTk5COjo6Oe3Z2d3h6ent7e31+fn5+fn5/fn5+fn5/f35+fn9/f39/gIB/f4CBgoSNkpKTkpOSkpOTkZKSkoqJioyJi4qJjIuKioiHiYqKi4mKjY2Mj46Nj5KUlJOUlJOTkpGSkI+Ojo2NjY2Pko+OkZGOjIuKioqLi4qKi5CPjoyMjIqKioqKioqKiouKioqKi4yLi4uMjIyKiouLi46RkpOTk5SUk5STk5SUlJOTk5KSkpKSk5F6dXZ2eHt7e3p6fX5+fn5+fn5+fn5+fX5/fn5+f39/f3+Af39/gIGChIuRkZGRkZKSkpGRkpGRiYmIiIqMiYiJiYuJhoSJhoyKh4ySkpKTk5OUlZWWlZWUk5OUlJSUk5SUlJSVlZWVlZWUlJOTkY+QkZKQjoyRlZWVk5KSjo+QjYqKi4qKi42OjY6RkpCRkpKSkpGRkpKSk5OTk5OTk5OTk5OTkpOSkpKSkpKSkpKSj3h1d3l6e3t7ent9fX19fn5/f35+fX5+fn5+f39/fn9/f4B/f3+AgYKEi5GQkJCSkpKRkZGRkZGIiIiIi4uJg4eLi4yMiIeHjYyNkpSSkpOTlJWWlpaVlZSSkpOTlJSUlJWVlZaXlpaWlpWUk5SUlJSVlJSUk5OVlZWUk5KTk5OTkJGSkZGSk5OTk5KSkpOSkpKSkpKSkpKSkpKSk5OTk5SUk5OSkpOTkpKSkpGRkZGPdnJ3enp7e3t8fX59fX1+fn9+fn9+fn5+fn6Af39/f3+Af3+Af4CBgoSKkJCRkZGRkZCQkJCQkIeHh4eIiIiFi4+KjI6Njo+OkJWUk5OTk5SUlZWVlJSVk5KSkpKTlZSUlZaWlpaWlpaWlpSTk5OTk5OUlJOSk5SVlZSTkpKSkpOTk5OTk5OTk5KSkpKSkpKSkpGSkpGRkZGRkZKTlJSUlJSTkpGRkZGRkZGRkZGRkYx0c3d6ent7e3x9fX1+fX5+f35+fn5+fn5+fn9/f39/fn9/f39/f4GDhIqQkJGRkJCQj4+Pj4+Ph4iKi4yNjYuOj42Mjo6RkpGSk5OSkpKSk5SUlJKSk5OTk5OSkpOUk5OTk5WVlZWUlZWUk5OTk5KSk5OUk5KTlJSUk5KSkpKSk5OTkpKSkpKRkZKSkpKSkpKSkpKSkZKRkZGSkpOTlJSUk5OSkZGRkZGQkJCQkZCRinN0dnp8fHp7fXx9fn59f35/f35+fn9+f31+f39+fn59f39/gH+AgYKDipCQkZGQj5CPjo+Pjo+Oj4+Pj4+Pj4+PkI2OjpCRkpKSkpKRkpKTk5OTkpGSkpKRkZKSk5OSk5OSk5STk5OTlJOSk5OTk5OTk5OSk5OTkpKSkpKSkpKSkpGRkZGSkZCRkZGRkpKRkZGRkpGRkZGRkpKSkpKSkpKSkpKRkJCQkJCQkJCQkJGGc3V2e3x8e3x9fX1+fn1/f35/fn5/gH9+fX5/fX5/fn5/f3+Af3+BgYGKkI+PkI+Pj4+Pj4+Pj4+Oj46Oj4+Pj5CQiI2PkJGRkpKSkpOTk5OTkpKSk5KSkZGRkZKSk5KTkpGRkpKSkZKSkpKSkpKTk5KRkZKTkpGRkpKSkpKRkJCQkJGRkZGQkJGSkZGRkZGSkZGRkZGRkZGSkpKSkpKSkZCRkZCPj4+Pj4+Pj4+PkX9ydHh8fHx7fHx9fX5+fn9+fn5/f3+AgH99fn5+f39+f39/f4CAf4GBgYqPj4+Pjo6Ojo+Pj46Ojo6Ojo+PkI+Pj4+GjpCQkJCRkZGRkZGRkZGQkJCQkZGRkZGRkZGRkZGQkJCRkZCQkJGRkZGRkZGRkJCQkZGQkJGRkZGRkI+PkJCQkJGRkJCQkJCRkJCQkJCQkZCQkJCQkJCQkZCQkJCPj4+Pjo+Pj46Ojo+Pj4+PeHJ2eXx9fHp9fH19fn5+f35+f39/f4CAf39/fn5/f35/f39/gIB/gYGAio6Ojo6NjY2Ojo6Ojo6NjY2Oj4+Pj4+PjoiQkZCPj4+QkJCQkJCQkI+PkJCQj4+Pj5CQkJCQkJCPj4+PkI+PkJCQkJCQj4+Oj4+QkI+PkJCQkJCPjo+QkJCPj4+Pj4+PkJCQkI+PkI+Qj4+PkI+PkJCQkI+OkI+Pj46OjoyMjY2NjIqDiYhzc3Z4fX58eX18fX1+fn5/fX5/fn9/f39/f4B/f39/f4CAgH+AgH+BgYCJjY2Ojo6Ojo6OjY2OjoyNjY6Ojo6Ojo2NiJCRkI6Njo6Ojo6Ojo6Pjo6Ojo6Ojo6Pjo6Ojo6Ojo6OjY6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Pj46Oj4+Pj4+Pj4+Pjo+PjY2MjYyNjoyLi4mJiYiFhYSDgoKEgnR5fXp4dXJrZWltb2xmZmdncHNzd3l9fnl6e3x9fX1+fn59fn9/fn9/f39/gIB/f3+AgIGAgIB/f4CBgImNjY2NjY2MjYyMjIyMi4uLjYyMjIyMjIyGj5GRjIyMjIyMjIyMjIyMjIyMjIyNjY2MjIyMjYyMjY2MjIyNjY2NjYyMjI2MiomKi4uJh4KAh4iEgXt6gH57fXx8fXlzcnJycnV1cG1ramppZ2NkYV9bXF1eWFVXWFlTS0VJSkpLTE1PT0tgdHR3eX19eHp5e3x8fX5+fn1+f39+f35/f4CAgH+AgICBgYCAgICAgIGAf4OEhYSFiIuLjYyMjIuLi4yGiYqKioqKh4OOkJGNiouLi4uMiYmKioqKiouLi4eDi4qIiYmGhYWEhIeJiYWCg397fHl6e3pzcHFxcW1samdsbWdlZmVmZGNlZGVkZWVlZWRkZGNhYV5dXFpYWFdUUFFSU1JTTU1KSUZESEpHR0hHR0xOSWdzdXh6fXp4d3l8fHx8fn5+fn9/fn9/f39+f4CAgIB/gICBgICAgICBgYFnXmBjYWNucX17ent/fXd8fHZ4ent4eHpvcHt4eXt8e3h3e394dXd0dHZ0dXZ3dXFycW5wcnBnaGtsbm9tamlpaGhlZWRkZF9gYWJgYF5dWVhaWltdXV9gX2BfX19gYmFeXl5eWVldXF1bV1dWUlRSU1NOUUpISUZERUhMTEhGR0lLSklNbXJ0eHp7end3eXt6e3x+fn1+f39+f35/f35+gIGAf3+AgIGAgICAgICCgWdYW1pZXFtcY1xaXF5ga3FtcHBvbm5vbmtpbmxrbG9qaWtraWpraWZmZ2dnaGhnbWdqZ2hlaGdjYmJhYmBgXVhbW1dYV1RWUVBUU1NNSkxLTExOTk9UWFhXVVVUUlBQTU1QT05LTE1QUU9MTEpHSUlHSEhJSEhIR0ZHSEpKSEhISUlISVZwc3V5ent5dnZ5enp7fH59fX5/f35/fn5+f3+AgX9+f4B/gICAgICAgIGBbFtYVlZWWVlaWVlYVVZoamxubmxra2poaGloZGVkYlxiZl9fYWNfXF9dYF1eWl5dWVleYmFeXlpZX1tYV1NOTUxLS0tMSUtNTktKS0tMSktQTEtLRkdHSUlGR0lISUZFSEdGRkVERUVEREVJSUlHSEdIRkZLTUtJSUlIR0hLTU1LTExMVXFzdnl6e3h2d3h3ent8fn1+fn9/f39+f3+AgIGAfn5/f4CAf4CAgIB/gYJoUlRVVlNVV1lZWVdXV1tbYWNfXlxbWFZWWVZSVFJRUVVUU1NUUE1KTU5QUk9NUFFRUVFSVlZRUVFUUFBOTk9MSk1MS0xKSktLRklJSkxJR0pISUlFR0dGRkVFSElKR0ZHRkZHR0hKR0dISEpMSkpLSUlISktLSkhKS0pISUtMTU9QUEtUdHN1eHp6eHZ2d3d6enx+fX5+fn5/f35+fn+AgYB/f3+AgYB/gICAgH+AgmlQUlRXVVRWWVdYWFpbVFRTUlBRU1FRUU9OTlBQUU9MTlBPTk5NTEtNTk5QTU9QUFJRUE5OT05PTk9QUFFPTk5PTk5QTk1NS0lISEpJSUlJR0ZHR0dJSkhJSEhJSEhHSEdISElISUxLSklISkpJSkpIR0pMS0pJSUhKSktMTk1NTU9RTFVzcnN3enl3dnR2eHp7fX19fn5+fn9+fn5+gICBgICAf4GBgH+AgICAgICBbE9PTlRZVVVdW1lXV1hOTUpKSUZKT0xKSkdJSk1NS0pMTUpHSUlJSktMRkRGSktLS0hKTExMT01MTE5PT09NTk9MTk5OUFBPTE1MTk1MTEpJSEdJSElISElJS0xLS0pJS0pJSklJSUlJR0dKSUdJSUpKTk1OTEhJSklJSk1PT01MT1JOWXBwcnd4d3d0c3R3enx+fX5+fn5+fn5+fn9/gICAgICAgYCAf39/gICAgIFvS0pNTlFOTlVXVlZSU0lFQ0VFUkREQT5CP0RAQD5CREFAQURHRkVIRUJBQEBDQ0RFQUNFSEtPS0lJSkhISklKSUlLSkxQTk1MTU1MTU1NTElIREZGR0ZGRklKSUlLSkhMSklKSkpJSEhKS0tIRkdJSklLTU5OSktPTUxLTU1PUE5QT1BgcG9yd3h2dHJzdXd6fX19fn5+fn9+fn1/gICAgICAf4CAgIB/f3+AgICAgXNQUE5OUE1KS1BSUE5RQ0RCQUZRRT1DPT9FSDk6Oz0/PTxBRUA+Ojs+PjxFRD0/RUE/QEFAREVHR0dHQkREREZFR0dHR0pHSEpLR0NER0pHQ0RFQUFDR0hHSEdISktKSElMS0lISktLTU5MTUxMSkpMS0lLTU9PUFNRT1BQTk9QUlFNUGdwb3N2dXRycXR4eX19fX1+fn5+f4B+foCAgH9/gIB/f4CAgH+Af4B/gICCdlRVUVFQT0xNUFBOT09BQkFAQkE/Oz48Pj8/Ozg5ODs7OkA7Oz48Ozw8PEhMPT1BQT9CQz1BRERGQ0ZGREZJSEM/QEBAQUFCQUE/Pjw9PkFAQD8+P0BFR0dHSUtMTk1OTUxNTUpLTVBVU05MTlFOTk1OTE1NTk9OTk1LS05OTk1OTkxUbnBwcnR1c3Fydnl5fX19fn1+fn5/gH5+gICAgICAgH9/gICAgH9/gH+BgIJ4UVFSVFJTUVNTUVFST0BAPT4/PD8+QEE/PT45Ozo7Ozk5Ojg4Ozw5ODo8PD49Ozs6ODpAQEFCP0FAQ0ZEQ0NDPzs+PkBDQ0E/Pj9BPkBAQj9APD9CQEFDRUVFSktQT1BPTU1OTExMT1JRUFJOTExPTUtOT0xMTEtMS0tKS0tKTU1LS1xxcXF1c3VycXR4eHp9fn1+fn5+f39/fn5/gIGAgH+Af4CAgICAf4CAf4CAgXxSTU9RUFFSUlRSU1NOPDs8Ozs7P0BBQkA9PDk8PTw6Nzk6Ojk3OTo6Nzg6OTo7Ozg3ODk7Ojg8PD1AQUA9Ozs+PD09QEJDQT9BQkE9Pj09Oz0/Q0RCQD9BREJFR0pKSkpKTE1MTExNTExOVVNLTE1USVBKSU1KSUpLS0pJSEdKS0lKZnJxc3RzdXJydnl5e31+fn5+fX9+f39/f36AgICAf4CAgICAgIF/gIF/gYCBgFZMTlBQTlJRUFBRUU44PT88PDo9PkFAQT8+PkA/Pj48PT0/QD09O0tlQD09Pj08PDw7Ozo7PD49Pj9AQUA+P0E/QEBBQEBAPT8/PTw6Oz09PD9AQUJCQUBCREZGRkdGR0dISUtMTExLTEtKS0lKSk1MTEpMS0lISUxMSklJSElLR01tcHF1dXR1c3V4eXl8fX5+fn5+fn5/gH9+gIB/f39/gH+AgYCAgYCBgICBgYCCYUtPT05OT1BPT1BQTzo8Pjw9Oz8+PkFBPz0/Q0NEQT89PkA/PT89a3hUPUNFPz5APTs9PT08Ozo9PkFBPz5AQD9BPz89PD48PTs7PD0+QUA/QD5AQ0NEQkRFSEVFR0hISEdGSUpJSUlJSUhKSkpKTEtKSklJSEhKSktMS0lLSkpIVnBvcXNzdHR1eXp7e3x+f35+fn5+f39/f39/f3+Af4CAgICAf4GBgICAgIGBgIJtTFBRTk9QTk5PUFBPPjw8PT4/P0A+QEA/Pz9DRkQ/PDw9QE1MRkh3dVk3PDo9PUA9Ojw7Ozw7ODk7Pz49PD07PEA9PTw8Pjs9PD0+QUBCQUBAP0JEQ0RFRkZGQ0VHSElJSEhJS0tMTUpKSUpNTUpLSktJSEhISEpJSktKSk5MSUlfcHBycnJ0dXZ6e319fH5+fn5+fn5/f35/f36AgIB/gICAgICAgYGAgICAgIGAgnZNTk5NTk5MTE5QT0w+QTw8PT8+QkM/PkFBQUJASW5QOz1kgYJ+dXp2Uzc4ODo8Pj8/PDs7PDs6Ojs+Pz89PDg6Pjw9Pj89Oz4/QEJDQkJDQ0FCQkFCQkRCQkRCRENGSUdGRkhJSUtNSklKSktMSkpJSkVESUlGRkhISUpKTEpGRmdwb3FxdHZ1d3t8fH18fn59fX1+fn9/foB+fn+AgH+AgICAgICBgYCAgICAgICBek5JS0tMTExFSUxOTTw/PDw9PkBAQUE7QkNCQz9Xe3lSZYSDg4OEfHhSPD0/PUJGQUQ/Ozw9Pj89PT5BQ0A8OTtBPz4+QT07P0JAQkNCQENDQUNBPT0+QD0/QUFBQENFRUBAQ0JDR0dFRENGRUZGR0VEQEFHR0ZDRkRHSEpHQz5IbG9wcHF0dXZ5fHx8fHx+fn1+fn5+fn5+f36Af3+AgICAgICAgIGAf4CAf4CBgIF+UUhLTU1NS0pLTE9RQD8+PkFBQEBBR0FCRENFQFl0d3uCgYGDfICDe0w/QEM/SlI9TUc8PD1BRUFCQkZIQz08QERDQUE/Pj1AQT4+Pj88PkBER0VAPkBBP0BDRkVDQkNDQEJEREJERUFCPkFCQkFCQEA9QUJDRENDQUNFR0E/PVZwcHFwcnV1d3p8e3x7fX9+fX19fX1+fX5+fn9/foB/f4CAgICAgYCAgIB/gIGAgX5SSEtNTUxLS05OUlVEQkBDQ0FBQkBCQ0BAQUE/UnVzfoB7gIR7foZiQENDRT5PW0xtaElAQ0VJSUlJTU1LRUNGR0hFR0VFRUREQ0E/QD4+QkZKSkdFRUdGRkpOTktKSUdHSEtMSUdHQ0REREVEQUJCQ0BDREVEREVERUZDQkFEZW9wcXF0dnV4e3x6fHx+f319fX19fn59f4B/f39/f39+gIGBf4CBgICAgH+AgICAfVJJSUpKSEpKTE9SU0dGRUdIREdIREA+PDs+QEVGa3V+f3mChIWFhn1KREZEQmN+hYiJflhHSEpMTE1PT0xIR0hHSElJSEhHR0hIRUNFRUVFRkhKSkZFR0lKTU9PTU1LSktKTU5LSUhHSElIR0ZFRkZGREZIR0VFSEhGSEdIRlFubnBxcnZ2eXt7e3p9fX5/fX19fX1+fn1/f39/fn5/gH+BgYGAgICAgICAf4GBgIB8UEhHSElGR0lKTU5OSkxJSUpLTE5KRkNBQkNGSkddeH+Cg4SEhoaHjWpBQlZ0hYeHh4eHgldJTE1MTU5MSkdHR0dER0dHR0ZIRkhFQ0RERkVEREhIQ0NDR0pKS0xMTExMTElKS0pKSUlJSEpISEdISUhHR0hGRkZISklJSUlIXW9vcXJzd3d6e3t6e319fn59fX19fX5+fYB/f39+fn+BgIGAgYCAgICAgIB/gYCAgHxNR0ZIRkVGR0dKS0pMTUxLTU5NT0tJSEhKS0tMTExYf4SFhYCDhoeJfVNthIeGhoaHh4eHfFBLTEtIR0ZGREVDQ0BBQ0NDQ0ZGRUJAPj5AQUFAQkQ/Pj9ERkhERUdJSklJSEhJR0lJSkpJSEZKSkpKSUpJSkpKRklMTEpKS0tmb3BzcnR2eHl7e3t8fH1+fn19fX19fn59f39/f35/f4CAgICAgYCAgIGAgICAgICAfU9GRkdGR0hHRUZHR01NTUtMS0lHQ0NDRElLS0xMSl6EhIWEf4GDhoaEgoaFhISGhoaHh4aKdUlJRkI/P0A/Pz88PDw+Ojo8QUFAPjw5OTg8PD07Pjs5Oz9BQkBBQ0NCQEFCRERCQ0ZISUhISExNTEdJSk1NTk1KSktLSkxNU2xvcXRzc3d5e3t7fH19fn9+fX19fX1+fn5/foB/fn9/gICBgIGBgICAgYCAgIB/f39+UUZFRkdJSUdEQ0VGTk1MSklIRT85Oj5ARUhISkpJaoaFhYKAg4GCgoOEhIWFhoeIiIiJiYyOZkRDPTg4Ojo5ODc4ODk2NDc5Ozw6ODU2Nzc4OTc4NzU4ODs7Oz1AOzk5OT08Pjs7PUFERUhKTUxMR0lIT1JRUFBOTE1NT1Fdb3BydHN1eHp7e3x8fn5+f359fX59fX5+f39/gH9/f4CAgICAgYCAgICAgICAgIB/f39RR0ZHSEpIRkVGR0hMTEpJSUdDQjU2OjxDQENHSUlnhoWCf4CDhIOCgoOEhomKi4yLiomKi4yJXj83NjU2NzY2NjQ1NzYzNDY4Ojg3NjU2NTY3Njc3ODo3Nzc4OTs3NTc4OTc5ODc2OjxAR0ZJRklGRUZPU1JTU1JPUFBSVGVwcXN0dHd5e3t7fH1+fn5/fn19fX19f39/f3+Afn+AgICAgICBgICAgICAgICAgH9/flJISEhJS0lHSUpJSkpLREVIRUJANTc4OD06PUVDQmqEgYCBgoODg4ODhYmKiomJioqKiouJiYqCSDY3NjQ2ODg3NDU3ODQ2NzY5OTc2Njc2NTo5Ojo6Ozg5ODk3Nzc3OTo5ODg3ODU4OTtBPT4+QkE/QUtMT1FQUU9PT1JXa3FydHR1d3l7e3t8fX5/fn9+fX19fX5/f4B+fn9/f4CAgH9/gICAgICAgH+AgICAf39+VEhHSUlMTUtKS0tMSUg/QEFAPDo1Nzk4OTc7QjlBe4SAgoOEhISEhIaJioqIh4iIiIqKjIqJiYx6Pjo4ODs8PT45Ojs8ODk7OTo7Ojk5Ozo5PT09Pzs7Oz06Pjs5Ozs8Ozw8OTk8ODo6Ozo5OTk8Pzw9QUJESUpNS0lLTFdvcnN1dHZ4e3t7fHt9f39+f359fX19fn9/f35/f39/f3+Bf4CAgICAgICAf4CAgH+Af35URkVGSUxOTkxKSk1CPzo7PDs4OTk4OTo6Ojs/PVCDgoGChIWEhYaIiYiHhoaGiImIiYuMi4mKioxsPDs+QUNFRUFBQUI+QEJAQD49Pj5APz8/QD9APT0/Qj9BQT9BPz1AQEA+P0E9Pjw7Ojs5OTs/PTs7PT1BQUNBQkNBWHBxdHR0dnl7e3x9e31/fn9/fn19fX5+f35+fn9+f4B/f4CAgIB/gIGAf39/gICAf39/flJFQ0FHSk5PTElHSzo4Ojs5Ojo8PTo7Oz09P0BCWYWCgoSFhIWEhomJiIiGhoaHiImKi4uKioqLiYtePkRHSUtKSUZHR0RGSEdFQkBAQ0VDQ0FCQ0I/QERIRUNFREVFQUZFRkRFRkRAQj88QD49P0A+Pz8/Pj8+Pjo7PTxgcXJ0dHV3enp6fX19fn5+f39+fX19fX5/fn5+fn5/gH9/gICAgICAgICAf4CAgIB/f4B+UERAPUNIT01HRkJEOTc6Pjo8Oz4/Pz89QUBEREVehoKDhIWGhoaIiYmIh4aGhoeJioqLjI2MjIuKiohXSExNTUtOSklLSElKSklFQ0RGR0ZEQ0VGREJISUtIR0dGR0dFS0lLSUpLSkNGQ0NEQkFBQ0JEQ0NERENBPTs9QGhwc3R0d3d6eHt8fH19fn5/f359fX1+fn9+fn59fn+Af3+AgH9/gICAgICAgICAgH+AgH9PQT49P0RMS0BCQkE5ODw+Ozw7PkA/QT9CQ0hISl2GgoOFhYeHiImJiIiHhoaGiIiIiYqMjYyMi4uKjH9QTVBNS05LSkxJSUlISkZER0hISUVFSEZGRUxMTUlKR0dISUpPTU5MTE1LSEZHR0VFQ0ZGRkZERUhIRkNBP0BMbHB0dXZ4eXl5fHx8fX1+fn9+fn19fX1/f35+fn5+f39/f39/f3+AgICAgIB/gICAgICAf1FBPz4/RkdHPTxAQDg3PDs8PTo/QD5AQENGSkpRY4KDhYSFhoeHiIiIiIiIh4eIiIiJioyNjIyMjIuKjXFNUU9NTExLTEpISEVKSURKSEdLSkhKR0dHS0xOTExISElKTVBOUE5NT0tJR0lKSElESUhIRkZHR0lGQ0JBQ1VucHV3d3l7eHl6enx8fX5+f39+fn1+fX5+fn5/f36Af4B/f3+Af4CAgICAgICAgICAf39/VERBQUJHSEI/OD9AODo8OD0+Oz1BPj9ARUlLTVZyg4SEhISFhoeIiIiIiIeGiIiIiImJjIyLjIyMi4uLi19RUVBNTk1LSkdGQkdKR0xKRktPTEtKSk1NTE9QTkhJS0xPUVFRUU9PSklKSkxKTEZHSEdFR0lGRUVCQEJCXG9yd3h5enl5eXp6e3t+fn5/fn59fX19fn9+fn9+f4CAgIB/f39/gICAgICAgICAgH9/f39VRUNFRUdHRUQ7P0E7PTw5QD4+QEJHR0FITE1RV3mFg4ODhISGiIiIiIiIh4eIiIiIiIqLi4uMjIyMi4uNfFdVUVJUUk9MS0pERUZLT05PV1ZRUE9RU1JNU1RPTVNMUFNVV1JTUVBMSk1NTUtOR0dKRkZISkRERUVCRENjcHV5eXp6ent6e3p7fH59fX9+fX19fXx9fn5/gH9/gICAf39/f3+BgYCAf39/gIB/f39/f1VGRkdHR0dIRj5AQj0/PT1CP0JDR1ZORk9RUVVZfIaDhYWEhIeIiIiIiIiIiIiIiIiJiouKioyMjIyOi4uLZ1ZVa2FFUlFRUEo7O1FTUmB1XVVWVFZZWVJYWFJaZlBVV1pdUlRXUVBNUlBQUFFLS0tISEpIRUZJSElISWlydnl5enl6e3t8ent8fXx9gH59fX19fX1+f39/f3+AgIB/f39/f4CAgIB/f3+AgH9/f35+U0hKSUlHR0ZFPz9BQUVCQ0dFREVMWFJNVFZWWFt8hoWHhoWGh4iIiIiIiIiIiIiIiIiIlJyMioqMfWGKi4uGbFtkVTpYWFhTUD5AVlVZW2NgVllicl5dVl1aVkVRWVpbWV9UWWdSVVZYVFRWVE9PTUpMSklJTE1LT01Tb3N2eHl4d3p6ent6enx9fH5/fn1+fX19fn1/f39+f4CAgH9/f3+AgICAgH9/gH+Af39+fn5WSkpJSEdGRERCQT9ITUlNUEtJS1BUU1NYWlpcXHiFhIWFhYWGh4eHiIiIiIiIiIiIiImcnaCPiY5nO36MiYqLem5wWFpbWlJTUlZWVFpadINZVX2QYVxYXV5XSVZdXVtbX1lIWVhZW11YWFlXUlFOUFFNTU9TUVFVUmFzc3Z3d3Z4eHh6e3t8fX19f39+fX59fX1+fn9/gH9/gIB/f3+Af3+AgICAf39/gIB/gHh5fVlOS0lJSUZCREBBOlBRUVdYUFBPUVNUVFhYWVpbboGCg4WEhYaHh4eHh4iIiIiIiIiIiJaanJeIioFuhomIh4OKfmZZWVxYU1ZUV1JRV1ViloBRZXJYWldfaFBgZltbWFxnYUdPWmhnXFtcXV1XUk9TUFBRVlZWVllabnJ0d3Z2dHd4eHt7fH19fX5/fn59fn18fn9/f3+Af39/gH+AgH9/gICBgYB/gH1yfX9/b3R8XVNQT01LSkVDP0A7UFBaWltSU1FPUlJSVVNWVFdfdXiAhYSEhYaGhoaHh4eHiIiIh4eIh4ORjomJiIaFiIiGfYB7XFBVWFRSVFJRUUxPTEtmeVpdVFlVVl1aTFRaVFNUXlpYV1dXemtYWltcXlRRUVBJTk9XVlhaWmRxc3Z2dHR2eHl5e3t8fH19fn99fX1+fX1+f39/gIB/f3+Afn56eHd2c3V7f3+AgHRrfn5rcnleW1ZVVFJPS0ZDREFNXoNsVlJTTk9RT1FVUlNSUlRjZHaAgoKDhISEhIWFhISDhoaGhoeIhn6JiYiHhoOHh4d5bXFWSUtNTktNS0hKREZIRUM+U2NVf1JRUU5LUlRRTU9ZUU1OUVNVVU1RU1JQT01MSENJSFJUVVpcbXJ1dnVzc3d7ent7e317fX19fn19fX59fn9/f4B/f399fX5+f39/f4B+e3Zzd31+fmR1fWlxdF9kXV5bWVZQTElMSWFsknRQUVNOUVJRUltSU1JRUlVVYnN7fH+AgYKBgX99e3uAf4OChYaHgoaGhoGEgYaFhnVfXUtDP0NDQ0NCP0RQQkNAQz5CSEdWQEhOTUddaVFIRk9GREVGSEdIQkNIR0hLR0NCQURAT1BNU2RzdHV1c3R1enx6e3t7fHx9fHt+fX19fn5/f3+AgIB/f3x8fX+Af39/f4CBgH12dHt/bWh8Z25xZmllZGJbWFNRUFVSc1dlW09PTkxRU1FVWVNVUVFUUk9WYGtscnZ7e3h5dHJuc3RzeXh+foOAg4OCgIKAgoGBa0xHPz87Oz5APz8/PmtRSmFFRkhJRUI/R0xNR01RVUlCRT8+PD08PT0/PT9BQ0M/Pjw9Qj5KTUZVbnV1dXN0dnh7fHp9fHx9fX19fH59fXx+fn9/f4B/f39/enl3eHd2dnh7foB+fXt4dnx1YXhnbHBqbGppZmBbUVJaXFleSUpQUU5LTFFSUVRVVVdRUVdWUFhbYl1hZ21tbG9raGBucmptbHF1e3p9e3h6fHx4d3hkQkBAQj06QkNBQURCXF1Pe05PT05LTE1PT1FMS0xXTUhHQEI8OTc3NTk5PTs7Ozg5ODk/O0JIP1x0dHV2dXZ3eXx8fH18fH19fn58fX19fX9/f39/fn9/f314dXZ6e3p3eXh1d3t8eXh1eXdjcWhpcG1ubW1oZl5PUF5cWklHUFJRT01QUU5RUlRWWFNSWVROWVpbV1ldXl5gZWBdXnF2a15gZ2t3b29sam9ubmxmYlhHRkZIQkFGSUVFRkRNUlBhV1JYUVBTU1JVW09PUVdQTUpDRj46OjY0ODY5Nzk6MzY2Nzk1PEI9ZXR0dnd3eXl7fX18fHt8fX5+fnt9fn19f39/fn5+fn9/e3d1eX18enh8fHx8dHd2d3Z1d2tuaWhxbm9vb2prYFVXXlpXTUxUVFNRUVVPTFJTVFdYVFRYUUxYWVpWWFhWWFldV1dYaHNrXVZhc2thYV9dZGBfXllVUE1PTkxISEpLSUhGQ1FQU1pXVFRNUVNZU1xlVU9TVFFOS0lIQz9BOTk4ODk3ODg0NzU3ODU5OUducnV4eHp7e31+fX18e318fn5+en1+fH1/f359fn59f358dHR1e3hycW9vbnR4cXJzeHZ1cWZkZ3JucHBxbm1kXV9fWVdPUFhWVlNUVk9PVVZYWFlTVVRMS1RVVVVVV1BUVVdUVVJdbl5STllfW1ZZO0RVV1RbZkpMUFJST01NTk5OTEpGUFBVWVNUTkpPT1RTVFxWUlVTUk9NS0lISEY/Pz06Nzg3NjU5OTY3NjY1V3Bwc3h5ent8fX59fnx8fXx+fX15fX18fn5+fXx8fX1+fXxydnF4eHJ2dXFxbnBwb3B1dnRuamRkanBwcXJwbmZlZGNcXlJUWlZXVVRXVFJYWFlZWVJVT0pIT1BPT01SSk9QUFBOTk9UTE1JUE9TVFUyPFhNSUFRPWNhUVNRUE5QUVBOTk1QTlRSUFJNSUxLT1FQUVJTVFFST0xNS0xMSENCQT06Ojg3NjtCNDU2NjtlcHF1eHh7fHx9fnx9fH19fX18e3h8ent9fX58e3l9fH18e3B1b3d1cHV0b3N2cHFxcHR1dmNqZ2VXaHRycnFuaWlocFZWVFVYVVdVUldWVVpZWFdVUVNGRUJGR0dIRkpESEpIR0VITEhLSEZMTVBNRy9FX1I+M0A+am9hUlJRQEZVUVBRUFFOUU9QT0xKTExPUE5OUFFRTlBPSkxNTUtHRUVEQjs9PDw5PUc2Njc2RG5xdHZ6e3t8fX18enx8fX5+fXt5dnh3eXl8fXp6dn17fHp6b3Fud3JwdnFtcHNwb3Bzc3N0ZmdgaFpXa3JzcmxtbWtuYmVQU1RSU1VPV1ZWWVlWUVFRT0A+Oz0/QEJBQ0BCRURBQEdIR0hFRkhKTktFR0NPUkM4RU5TXWZTUVNBR1VQT1FRUE1NTkxKTEtMTk9PUU1PT01ITExJS0tMS0dGRkVEPEFBPjtARTs8ODlUcXN1eXt7e318fHt5fXt6fn58e3V0dXJ2dnp6eHpyfHt8eXltcW94cnF1bm5xcm9vb3Rzc3J1dGtnZ15lam1wa29xbWltY0xPT01RU0xUVVRXV1VMTEtIPTk4Nzs/QD48PUFAQj0+RUhHREZGSUdKSkBGQUFARkhFSk9IUFJhXFFQUk5TT09PTExPTUtNTE1PTltXS01RT0dJSENJSkxMSkZGRkQ/QkM+PEJGP0I/QWRxdXh7ent7fHt6end8eHl+fnt7cXN0cHJzd3R4eHN6e3l2d2xxb3ZxdHRsb3Fybm5vc3ZydHNycmtsZW5zaG1ubWxtbGprSUxISE9RSlFTUVRTT0tIQ0U9OTg3OT9CPjs/QkBAPkFESUVDSEdJR0lFQkI/Pj1DQkFHSURNT2FlUU1PTldLTE1LTE1NTExLTk5TZE1KTFJJSUlFQUhKTE1OSkdJRkJBQkA/RUZFSERLb3B3enl5e3t6fHp3c3h0eHx8eXpucXJtbm9ycnZyc3h8eHZ2bXBtc3B1dGxwcHJvb29ydnVyVlZucWdseYRqbXFybm5qaG9ISkNHTE1JTVBNUE9IS0U/Qj05OTk6P0I/PEBCQkFERUdLRkRJSUdHSENDP0I/P0BBPkNFQ0tNUVRMSklNVEZJSUpMSktLSUlMTU9QUlBLR0NLR0NCSkpMTU9NSUpJR0NDQ0RJSk1MSVpzbXh5eHp7e3l8dnJwdXJ0eXl2eGpxbmpsbG50dG10dXtzdHhyb25xb3ZzbnBvcnBvcHN0eWpOYGdzanR8eWdvc3FqcWhlcUhLREdISEdKS0lKS0RHQj0+PTo6OjtAQj89QkJDQ0dGSkxKRUlJRkdHQ0M7QUBCPkBAQ0VDSU1PR0hLRkhLREhJS01ISkxISEpMSk1dUklIRE1GQURLSk5NUE5LTUpLRkdHSk1OUU5MY25pdnZ3e3h7en1xbWxza3B0dHR1aHBtamlra3RwbnR0eXByeXRvcnFvd3NvcXB0cnBydXR5a05WbXVscXt2aW5vaWp0aGRvRktERkVHREVFRkVHQkNAPjw9Ojs6OkBEQD5CQ0RFSUZKSkxGSUlHRkZEQjtCQ0M+P0NDQ0VHTE5HS05IREhESUxOTUhJTEdFRklJTE5LSkhFTkhDR01MT01PTU5OTUxJSEpPUlFSTlJmZ2Zyb3N4dXt6fGxoam9la3Btc3FmbWxoaWtsdG1wdXR3cW94dG90c3J2c3BxcnRzcnR1dXZ2WFZ1dWtvdHJrb3ZsaG1lX3BHSkRGRkVCQkJFQERCPj8+Ojs7PTo9PkNBP0FDRUdKR0lJTEhHR0dGRUNAPUVFQj5BQ0NDRUdISUdNUElGRkZLTk9LRkhKRkVERElJSEtJRkhQS0RJTUxQTU9OT09OSkpJTVJVVFJPV2RgYW1ncHJvcnl6Z2VoaGNpbGdxbGZsbWdpa2xzbHB2dXRwbnZyb3Nyc3V0cXNzdXRzdXZ2dnl2dXR2bGt1dW1ydnFsbmxlck1HRUVHQ0JBQkQ9QkE+QT06Oj0/Oz4+QEI/QEJER0pGSkdJSEZGR0VDQkFBRkZDQkNCREVER0dIRkxRS0lPSkpMS0lHSEVGRURDSUhIS0pHS1JNQ05PTVFPT09OT09LS0tQVVdWVVRYYF5caWFtaW5ocnNiZWZmZGloZm5pZm1taGtrbXJpcXZ1c3Ftdm5vcXJzd3Nyc3R1dnZ2dnd2d3Z2dHd1a3N1bnV0c3FyamtzTUdHRkhCQkFERDxBQUBDPDg5PT45Pzw/Qj9AQERGSEVIRkZHRkVFRENFQ0RJRkNGRUJFR0VFRkdFSk1LSFFNSktISElFRkhIRUNJSUpLTUtPU05EUVJQUVFOT01OUE1MTlNXVldYVlhdWl1kYGhiamlna19lZWdjZ2dna2dna21rbWxwcWd0dHVyc252b3FwcnR4cXNzdXZ1gpF5dnZ0eHV1d3hub3VvcnN1cXFpb3pNSEdISEJCQkZFPEBCQkQ8Nzo9Pjo+OkBCPj8/Q0VGREZEREdFQ0VDREVGR0pFRUlHQ0dIRkhGRUNGSkpHTUpMS0lKTEZJSUtIRUtLTE1OT1JUT0lTVVRRU1BRTU5RTk1RV1pWWllWWl1aWGFgYGBeaGVjYGRlaGdqaWhqZmhubGxubXFwaXV1eHJycHVwcHBydXZwdXN1dnV7fn14dnR3dnZ2eHBsdXBtc3RucHJzeU5ISEdJREFDSEU8QEVCRT04Oj4+PTw8QUI8Pz5BQkZDRUJCR0RDRUVGR0dHSUZHS0hDSEhHSUdGREhLSUdLSE1LSktMSExLTUtJTkxPTk9SVVZPS1VWVFFUUVJMT1FQT1RZWllcWllbXl9eYGJdXGFja2JgZGdocoVoZ2lmam1ucG9uc3FqdHV4cnNzdHJucHF2cnF1cnV1c355jn11dXZ2dnZ4cmh1cWtydGxxdnF1TUlLSEpFQkVHRTxAR0NEQDk8PkA/Pj9DQjxAPkFBRkNFRENIREZER0VISEZIR0lLSkZKSEhLSEZGTEhISEpHTExMTExJTUtOTU1PTFBQUVVWV09LVlZVU1NSUUxPUlJRVltbXV5bXF5fX2FgYWRdZGBlZmBlaGpjc3NmamhnbHBycW9zc25zd3dxdXZ0c21vcnVvcnNwdXJ2cnSBdnV1dXd2dXd0Z3Rya3Fya3J2b3ZKS0xJTEdCRURFPEBGRERCOz8/QUBAQERBP0I/QUNIQkVERkdFSUVGRElIRklISkxISEpKSUxKRkpLSElKSkdLS01NSkpNTE5OTlBLT1BSVVhWTU5UVlVTUlFQTE5UU1JXW15eX11dYF9hYWFgYmNlYWNoYmRpamd2i2xraWdtb3NxcHFwcHJ5dnJ1dXRzbW1zc21xcm90dXRycHN3dHV1d3Z1dXRlcXNrcHFqcnZvd0pNTExMR0RDQUQ8P0VFRUM9QUFDQkJDRUJCREFBRUdDSEdIR0VKRkNHSUdHSkZJTEhKSk1LTUxHS0lITEtOUUtSUUxTTUtOTk9QUE9UT1dYWFtOU1FXXFpTVlBOVFVUVFhaX2JiX2RhXmBiXmBlYWFiZ25oYmloaG14dmxoaW1vc3JwcXJycnZ0c3Vzc3Nua3NxbXByb3R2cnFxdXZ1c3d5d3V0dWNtdGtvcGpxdG93TE1MS0xHRUFARD4+REVGQ0BDQUVEREZDQ0VHQ0JJRkNISkpISUtGREtKR0hKSUlLR0pKTktOTElMSEpNS1pmSmRcS2xTSE9OX25Va3NbcXBid2NSUGJ2dWh1Y2F2YFhucWJkdmluemZbbHRgbGpUYHd1aWpnaWZnbG1qbW9qbW5zcnBycnFyc3Jzc3J0cm5sdG9ucHFxdXVxcXN0dnZ1dXl3dXR0YGt0a3Bwa3FycXlLTkpLSkZDP0BCPz1ERUZEQ0RCRUVFRkJGRkhDREpFRUpMTEpMTUdHTUlISUtIS0pJS0pOTE1NTExJTE1MW3NiZHBebG1VTU5mc11nZXFsbnRncGlfYVlubmJwcGJrampnb3F0ZXRub1xvdWdwTUpyeXZrYmBrZWVteW1rdmxucHNycHJxcHFycXJycnRybW1zbm5vcHJ1dHFzc3R1dXV0d3h2dXRibXVrcHBscnJxektMSUlHRUQ/QkI/PUNGR0JGQ0VERUVEQ0hIR0RFS0dHTE1NS01NR0pOSEpLSklMSkpKS0xNTk5NTUpNTU1bcm9vbnBwbGtNUFFsV05pYnRycGFtb3ZcWWxRXG1tWnFta29teHh0c2lwXF9ya3FqVXV5eHBjXmtmYmdxcGppb3Bwc3NwcXBxcXJycXFycnRsbXJtbm5vcnV0cXRydHV1dHV1enZ1dGVudWtwb2xzcnJ5SktHR0VFRUJCQj0/QEZHQkdESUVFREJGSUhIRUdLSkdNTU5MTU5ITE1JTEtISk1JS0pKSk9QT05NS05NTFxoZHVdbHFXbE5QUW1VWmtea2x2YWxkdFRlY05tWWxcdHBraWx4and1aHBdXnJraFdiY3d8b2NgZ2hhZGp1eWtubnFzc3BxcHFwcnFwcHBydWttcW1tbW9xc3Rxc3J0dnZzd3Z6dnV0aG91bHNvbXNydHdJTUdJREVFQ0FCPEJBQkZER0ZMSEVDQ0hLSEhGSkxMRk1LTFNSTEdNTEhOSklITkhKSklITk9NTkxKTU1KWnNwcG9xcW1sT1FSbllxa2dvb3Fxb210Xm5YYXRfbm9wb3Fyb251c3R0altddGN3eHJqbnpoYWFjZ2Jiam10dXBzdXZzcXBwcW9ydHt/fn13bGtxbmxtbnByc3F0dHN1dXR4eHl5dHVrb3VtdG9uc3N2dEhLSElCRUVFQUA+Q0NCR0NISU1JRkNGSkxJR0ZKTUxGT0pLV1JLR0tKSk5JSEpMSUtKSUhKTE1NTUlLSktTa2JaaV5famNyclpfWWpvX2VlVWtfY1thYlFgbGhdalxuaWlkW3BmZHBdWlxrW21xY3BzbGRnY2RnYGBrbXBwb3R5cnVxb3BxbnmFiIeHhoWAdnNua21tb25xcnR0cnR1dXZ5eHhzdW5xdW53cXJ1dHdySEhGSURFREZBQEFFRERHQkhKTEhGREdLTElFRkpPTElPSUxbUUpGSEhLTUlISkpLS0lISUdLS0tLRkhKSkxMTEtJS0xOVFtcVFBUTFBPTk9PVlFPT1FPT1FKSU5QUWRxaVRZV1tbXFVZW11YXVxcY2ZhYWZiY2VfX2ZrbWhtdHlydHJvcHB0hoeGhoaFhYaHg3pwbW1sa3FzdHRydHZ0dXl4eHV2cXJ1b3ZydHN1dXNIQ0VHRkZBRUM/Q0dDRUdDSUtMSEZER0tMSERHSFBLTE9LTFdMSUVFSElKSElLSUxKSEZIR0pHR0lFRkxISUtOTElPXFdeT1xbYF5PWFlTXFxiXk1ZWk1YYVJKWWFaU2BkXGFYW2RkVlZYXFlaWFxWWVxdYl9kYGFfZWhrZ210dHFxdHBxcoGGhoaFhoWFhYaGhoR9cmtpb3Jzc3N0d3l5eHl4d3h0cXhyeHNxcnVydE9CQ0RMTUJDREJESURHR0ZLSktIRUVKSkpHRUhIUEpMTUpNU0lIRUFIRkpJS0tJTEpJRkVKR0RGR0VFSkdDSk1KS1RfWWBYYGFbYFVYWVReXlpfUllcUF5cWU5eXF5TW15jXlpdYGNgWV9iW2BeW1RYWFleXWNjYmFjZWlla3Jwb3Bwbm93hoaFhYaCe4CFhYaGhYaFf3VxcHJyc3Z5eXp5eXh4eHdyeXZ4cnF4dnR2YVNKSk1JRUNCQ0ZHRUdHSUpKSUlERktLS0ZFSElOSk5MSExOR0hGPkdHTElLS0pLS0lHRUlEQ0NFQUZKREBKS0lPW2NZXl5hX1JUU1dfYFxdWV5RWVxNVl9XS1FZW1BaX2FhXV5jYWBiYmJjY2VaUVlWVVxZXmRgX19jZWJob21tbGxsbHWFf4SDeXV8hIWFhYaGhYWGhoN9d3JydHd5eXl5f359eXV5dnZybnp3dnhYUUpGREdFQkVHSEZHSElGR0pHSEZIS0lMRERLSk5NTExISkpISkc/R0ZOSktLTUtLS0lHR0NEQERBSElBP0lKR09dYVpbZF1fVFFSWF1cXFxfWktXXExSXFlJTV5QT1xfYWNjY2NiXGRjYmRjZlhRVVRTW1haYV5eXmFhX2Rsa21qamxudn51gXp8hIWFhYWFhYaGhYaFhoaGgnpyc3V1e4WHh4eGhYSBfnhwend2eFxSTUNASUZDRUtJRkZHSEdHSUZGRklMSk5FREtKTE5KTElLSkhJR0JISFFNS0tPTEtLSUhHRUQ/RUJISEFBR0ZEVF1ZXlhfWV9bXVVYWFBdXVFLSldeWF5bXVZaYFJRX19iYmBgYmJgY2JiZGRiWE9RUVJbU1teXV1dXl9fZGhnbGpubnB7e3x+e4CCg4SFhYWFhYWEhIWDhISHh4FzcneFh4eHh4eHh4eHh4WDgHx4XFNLQkFHRkRHTVJIQ1JLRkhISEVGS0pNUEVHSUpLTkxMSUxLSUlHREhLUU9NTFBMTUtLSElDREFFQ0hHQkFGRUJWVUVcVF1TVl9YTlRVTlpbTUpLVWBhW19YX15hXU9ZYl1gYF9iY2JdYmJXX19UUE5QUVhSXVxbXFxeYGJmZmVsZm9vd3x7gHt9f4CEhISEhIWFhYODhYKDgoWFhnpvgYaGhoeHiIeGhoaFhYSFg35JTkZERUZHRElSYlBEV19JR0dIREZNSlBQRUpJSktOTEtLTEtKSkdFSk1RUU5PUE1OTE5IS0FEQUNERkRDQURGQUxIQ0xMUE9PTEZNRkdJSkhHTExNT1BJTE9QUFNQTFBUU1VaWVdZWFhkVk9TVFBQT05QVVRcWVlaXVxgYWRlY2hja2xwc3N6eX97en+EhISEhISEhIKEgH57gYOBfXuFhIaGh4eHhYWFhISEgoGAfUtJRUVHRkdES01dTEdIWU1HSEpIR05MUVFJS0pLS05OVU5PS0tMR0dLUFNTTlBPTk5OT0hLRWBFRF9MRGZjRE1bSF5cc21PTVZtWUxDUGBVbFdnSl1XVV5ETFFVTE1UVlFTVFhXVFhVVFxUUGZaaGhkWFNrVFdWVVtcW2BgYWJiYmBmaGZubGhyenx9foGEhISEg4ODgX18enJ7gXp7f4KAg4SEhYWBhIWBg4N/fnp7TElFRkZIRUVLT1NJS0dgVEhKT0pJT01SUUtMS0xPUlVST09KTE5HSE1RW1lPUFBOT1BPSUpQf1FJfFlZcnNXUG1IcW5wYVZQcXFzUENrc21xc3BTb19bblhdVlxYVWtoVV1WY1pgWVtgVlVXf2p0dXVfYHdgWGFcXGZbX2FhYWFeYGJnbXBsYHB3dHiBgYKDg4J/fX6Adnh6bHZ+dHh+gHx+gIGChHyAg3p/gX9+d3dOSUVITU1CRExMRkpMRlJWTEtPSUtSWFdRTk5OTFFUTk9RUEtMT0dNUFNbWlRRUk9QUFBKSFp4XVR4ZWhZUlRRdmd0bHBibmZqUXJPTXdtanJwc3JxcnBvcIFdZXp1eHFxenF+c31rdX1iUmd8ZXNzb3NzfH1vfXlvf3JfYGBiYlpgYGdrbmtibGZnbXd+gYCDfnt4d4B0dnppcn5udHx+d3h7foCDeHyAdXx/fHxzc05LRmBdR0FFTU1IS0pISlBOTU1KTlZeWVVMUVNOWVlMU1NSTkxQSVFSVFlXV1FUUFBQUUtHZnhsY3hybVpKTFV5cHVtdWJudlBkZUpmdnFtd2+AamZ4eGlXc1Foem1panp6fWx4en9vZ29YdnZqdXVwgGBzaHxpbHh8b15fX2NiW11iZGdpamRnYmNkbGxwcHN0c3NzeXFyeGJsdWdyeXtzc3V5foFzdXpufH15eHJuTUpTdE5DQkVQUEhKS0pMUE9PUE1QWmBaWEtUV1BhXlJWUVlTTVBJU1RWWFdXUFVQT05SSktyb3V1cXVxZGhgVm5McXBeRmh5V3ZUS2h4fXhgeXtzbmFebW9kUmdydW5teXB3bHZ0dHFsbVx0fnprbXl8bHVtfGtwdnV4Xl9fYl5dX2VkaWdoZWVeYmJpaWlqa25va3FubWpwYWNmZG93eG9tcHN5fm5xcGp7enRyb21LS1tWSEdFR1JQSkxNS0xRUVFRUFFXXFlVTlZZVWZYUlJZXlRNTklUVFdXWVdPU05OTlFIUm1IaXdLYGR2dlVXbE9ubHtzYWpnf3ZVS1draH1sbWx4YFtwenteYHpzY3JveHFoZXxpcntdVEtsYHZ1a2l1e3ttfnhrfHBdXl5iW15iZGRnZWVlYlpjY2lra3JzcndnbWloZGdgYWxhZ3Nya2hsbXJ8a21oa3t0bW1rbU9ISktISUlIUlBMTk9NTFRTU09UUldSVlRQV1pWVlRUVGFgUU9OS1RUU1FVVk5OTE1PUEpIUU5QVUxLS1NUU1JUUFZVUVFOUVFYWFFOUFVUWFhYW1tVUlNXW1dYV1pPU1VXV1hSXVlXXVZUT1lSV1dXWFlfW2dyXltbWVxdX2NaX2NjZGZkY2NiWmNjZmZmbW5tdWZmZ2NgZl9dZ2BkbGhmZ2tob3poZ2drdWpoZ2lsUUlLTExNS0pTUU1RUE9MVlZUUFRVWFVZVVJaXVZVVFdVWVhQT0xNVlRRTlVTTk9NTFFQS0pRUktRTUtLT1JUUlFRU1NJSExOT1FSUVFRVFZSWFdcV1NTUVFVVVZTWlFPU1JXVVRZVlRZVVNSVVNUVFdYV11aXmFdXFpaXFxgY1xdYmNkZ2VkZGFZYGFjYWJoaGluY2FkXl9jXVpkXGJtYV5mZmdtc2RpaGtrZWRjZmhQSktMT09MTVRQTlNRUU1YV1VUVVdXV1pWVFxgVldWWVVYVFFQS09XU1BOVVBOUU5LU1BNT1VUTlFOTU5RU1BUUVNUVU5LTU9RVFRSUlFWV1VZWltZU1VSVFdXV1lbVE9UVVhVVFlVV1lUUlJXVVVXW1laX11VWF9dXl1cXWFhXltiYmNoZmVkYlhfYGJdYGhlZmRhXl9dXV5aWl9aX2dgXl1dY2hrYWdmaGZkYGJjYVBLTUxQUUxPVE9PU1FPUVpZWFdYWlpYWVZdamRWWFlaV1ZUVE9LT1ZUUE9UUFBQTk1RUVBSWFRRUU9NT1NVT1dSVFVVT05NUVNVVVRUUlRYVlpdXFpWVlFSV1hWW1tXUVRWVlVWWFRXV1RSUlhWVVpdWV1fXlZeXV5gXFxgYF9fWmJiZGhoZWRhWWJgYl5eZmRjYGJdXFxcXFlaW1hbYVteXVxfYl9fYmRkYmRfX2BcUE1OTlJRTVJST1NUUVBVXFpaV1tbXFlaW2RxbWhkX1tZVlZYUk1NVlNNTlJPUVJPTFBTUlVaVVRQUExQV1ZSV1NTU1hNT1BSVFhVVVVTVVlYW15dXFtWUk9VVlZbXFdRVFdVV1hVU1haVFNRWldWXF5aX19gVWFcYGFdYGJfXGBdY2FjZ2hkZmBZY2BhX19lZV9gY1taXFtcWlpZWVdcWVxbYF5gW15eYWBfYlxZYFpRTk9OVlFQVFJPVVRTUFdcXFxYXlxfV1xeanF3eYBjXFtWVlhSTk9XU05RUVBSVFJLUVRTWFpXVU9STlNYVlRTVFJSWk9RU1NWW1ZWV1RWWlhdXlxcXlZTTlRVVlxcVlJUVlZYWVJTWVxUUlJcV1pdXl1hYWBXYltjYl5hY19cYmFiX2RmaWRmXltkYGFgYWNlX2JfWVpeW1xbWVhZV1daWlphXF1bXVxcWl1gV1tbWlBPT09ZUFVVU1JXUlRQW11eXVtgXGBVXF1panJ9c2xnXFVZV1FPUltTUlFUUlRVVEtSVlVbWVpTT1NSVlZVU09WUlNaUlRVVFhcV1hYU1hcWF5dWVpdVFVOVldXXltYUVRVWFhYVFZYW1RTVl1ZXV1gXWJjXllgW2ViX2RkXl5jY2FdZWZpZGZdXmRhYGFhY2RfYl5YWl9bXFtYWFhYV1taXGBdW1tcW1haW15WXlldUE9PUlpQWlVVVlZUVFReXmBeXmJcYFVdXmJreXRsfWxaVVpVUVFTXFRUVFVUVllXTFJaVl1bXFJPVVNYV1ZTUFhSU1dTVlZVW11YW1lVWl5YX15ZXFlSV1JZWFlfWlpTVFZaWVpWV1lcVlVaXVxeYWFfZGRdXl1dZWFiZmReXmRjYFxnZGhlZGJfZGFfYWBiYl9gXldYXlpcXFpZWldWXVpdXlpZW1xbV1lcXVZYV11TT1BXWVFdVVZZV1dVWF9gYWFgY11gVV1eYmVldYF6aFhZWlRWU1ZcWFdXVlZXXVhQVVxZXl1dVFJYUldWVFJUWFJTVlRZWFldXlhdW1VeX1hfX1hdVlFZVFlaWmFZXFVWWFtaWlhZWVpYVl1eX15jYmFlZV1iXGBmYmRmZF9fZGJiW2ZjaGVjZmFmX19hYWFhYF9eVlVdWVtcW1lcWVldW1tbWFhZW1laWl1fXVRZXVVOU1pWU1xUVldZV1ZcYGFiY2FkX19WW2BkYV96dW9oWVxaVlhVV1taWVtZWFlgV1BVXltgYVxUVVhQVVZVU1ZWUlNVV1taXF9eWl9cVl9fWl1eWV5WU1lXWVpdYlpeVldbXFtcW1tZW1lZXl9gYGRiY2VlYmRaYmZjZ2ZlXmFiYGNeY2NpZGRnX2deYmJjYWFgXl9YVFpaWltbWFtYWFxbWltXV1lYV1xbXGBdVl1dU1BWWlZWWlVYVlhXWF1fYmFkYWRhXllZYWRiYGxmaF5cXVtXWFhZXFxcX1tZW2JWVFdeXWFjXFJWWFFXVlZWVlZUVlRYXFxfYGBdYF1XYV5bXlxbXlhWWFhbWl9gXF9YWV1cXV1eXFpcWFtfYV5gZGNkZmZmYlljZWVoZ2ReY2BfZWNdZmlkZWlfZ15jYmNhYWBfX1tYWVtZWlpYWVhXW1taW1dYWlRZXVxaYFxVXmJNUldZVldaWFtcWVdZXmBiYWVhZGFdXllhY2JfYWBhX1xcXVhXW1tdXV9fXFpdY1haWF1gY2RfUlhZUFhXWFhYV1ZYVl1dXmBhYV9iXllhXV1eWV1eWVhWV1tbYF9dX1lZXl1eXmFcW1pZXF9iX2JkY2VmZWZiWmRmZ2lnY19jXmFmZFppaWJmaWNlXmJiY2FgYF9dXVpXW1lZWFhaWFdaW1pZV1hWVVtdXV1gYGJieEtXV1xZV1xcXF1aV1xdX2BiZGJiYV1gWGJjYmBjYWJeXFxcWFdbXV9dYF9dW2BkXFxYWmNlY2BSXFlPWFdZW1pZWFpZYF1gYmJgYWNfXGJdX11bXl5aWVVYXV1fYF9fW1peXmBiY1xcV1tdYGJhY2VkZ2VlZmRcZWZoaWZjYWJcY2dgXGlpYmhpZmVgYmFjYV9gX11dXFlcWVhXWFlYV1xbWldXWE9YWl1hY2Zmcmt/SllXXVpaX1xcXltYXVteX2FjYmFhXWJbYmRhX2NjYl1cW1pXWGlxYFxgX11cYWNfXllZY2VkYVNfWlFZV1xdXFtaW1tjYGNiY2BiZGFgY15gXF1eX1pYVltfXVxhYV9dW2BhYmViX11TXF9gY2RkZmRnZmVmZV5lZmhoZ2RkYFtmZ15haGhjaGhmY2BiYGNiX19fXV1bWltZWFhYVlpWXFpaVlZVTFhXXGdpa2h1eIF2dnZ2dnZ2dnZ2dnd3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d4eHh4eXl5enp6enp6e3p6ent7e3t7e3t7e3t7e3t7e3x7e3t7e3t7e3t7fHx8fHx8fHx8fHx8fHt7e3t8fHx8fHx8fHx8e3t7fHx8fHx7e3t7e3t7fYmIhoqHhYKBgoOCg4OCgoKCgoKCgoKCgoGAgYCBgICAgYCBgYGAfnx8fHx8fHx8fHx8fHx8fHZ2dnZ2dnZ2dnZ3dnd3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3h4eHh5eXl6enp6enp6ent7e3t7e3t7e3t7e3t7e3t7e3t7e3t6e3t7e3t7fHx8fHx8fHx8fHx7e3t7e3t7e3t7e3x7e3t7e3t7fHx8fHt7e3t7e3t8iYmHiYaFgoGCgoGCgoKCgYKCgoKCgoKBgYGAgICAgICAgIGBgYB9fHx8e3x8fHx8fHx8fHx8dnV1dXV1dXV2dnZ3dnd3d3d3d3d3d3d3d3d3d3d3d3d3d3d4eHh4eHh5eXl5eXl5eXl5eXt7e3t7e3t7e3t7enp6e3t7e3t7e3p6enp6ent7fHx8fHx8fHx8fHx7e3t7e3t7fHx8e3t7e3t7e3t7fHx8fHx7fHt7e3uHiYiJhYSDgYKCgoODgoKCgoKCgoKCgYGBgICAgICAgICAgYKBgH58fHx8fHx8fHx8fHx8fHx2dXR1dXV1dHV2d3d3d3d3d3d3d3d3d3h4eHh4eHh4eHh4eHh4eHh4eHl5eXl5eXl5eXl5e3t7e3t7e3t7e3t7enp6e3p6enp6enp6enp6e3t8fHx8fHx8fHx8fHx8fHx8e3x8fHx8e3t7e3t7e3x8fHx8fHt7e3t7e4aJiYiFhYOBgoKCg4OCgYKCgoKCgoKBgYGAgICAgICAgIGBgYCAfnx8fHx8fHx8fHx9fX18fHjF1NLS0tLUk3t9fX19fYSMi4uLi454KSkqKiopKz0/Pj4+Pj5tgH5+f397pdfT09PT1r2GiYmJiYiNsbW0tLSzs7u+vr6+vr3K09LS0tLWun1+f39/f359fHx8fHx8fHx8fHx8fHx8fHx7fHx8fHx8fHx8fHt7e3t7hIuHh4aHgoGDg4GCgoKCgoKCgoKCgoGBgYCAgICAgICAgYCBgIB+fHx8fHx8fHx9fXx8fH19eNXn5OTk5OeZe39/f39+hpCPj4+Pk3kZGhoaGhocMTMzMzMzMmqCf4CAgHut6eTk5OToyomMjIyMi5G7wL/AwL+/yczMzMzMy9vm5eXl5enHfX5/f39/f319fXx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx7e3uCjYeIh4eDgoSCgYKCgoKCgoOCgoKCgYGBgICAgICAgICAgICAgH58fHx8fHx8fXx8fH19fX12fn9/f39/f3l3d3d3d3d4eXl5enp6eG9vcHBwcHBycnJycnJyd3p5eXp6en6Dg4ODg4SBfHx8fHx8fYCBgYGBgICBgoKCgoKChISEhISEhYJ8fX19fX19fX19fX18fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx7e4CMhomHh4SDhIKCgoKCgYKCg4KCgoGBgYGBgYCAf4CAgICAgICAfnx8fHx8fHx8fX19fX19fXZ0dHR0dHd0dnd6e3h7eHd2eHt3enp5fXp5eXh4eHh5eXl5enp5eXl5enp6eXh4eXl5eXl7e3t7e3t7enp6enp5enl5eXl5eXp6enp6enp6e3x8fHx9fX19fX19fX18fH19fX18fHx8fHx8fHx8fHx8fHx8fHx8fHx8f4uHi4qIhIODgoKCg4KBgoKDgoKCgYGBgYGAgIGAf4CAgH+AgYF+fX18fHx8fHx9fX19fX19d3d3dnZ3fXh3d316eH14d3d5fHt8fXt9fHh3d3d3eHh4eHh5eXl5eXp6ent7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7fHx8fHx8fHx8fHx8fHx9fX19fX19fX19fX19fX19fX19fHx8fHx8fHx7e3x8fHx8fHx8fHx+iomMjImFg4SEgoKDgoGCgoKCgoKBgYGBgYCAgICAgICAf4CAgH19fXx8fH19fX19fX19fX13d3d3d3p9eHt4fHx3e3h3d3d8fH19fX59eHh4eHh4eHh4eHh5eXl6enp6e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3x8fHx8fHx8fHx8fHx8fHx8fX19fXx9fX19fX19fX19fX19fHx8fHx8fHt7fHx8fHx8fHx8fH2Kio2NioWDg4OCgoKCgYGCgoKBgoGBgYKBgIGBgICAgIB/gIGAfXx9fX18fX19fX19fX19fXd3d3d3fX55d3d4e3p8eXd3d3p8fXt9fnx4eHh4eHh4eHh4eXl5enp6ent7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3x8fHt8fHx8fHx8fHx8fHx8fH19fX18fH18fH18fHx8fX19fX18fHx8fHx8fHx8fHx8fHx8fHx8foqJjo2JhISEg4KDgoKBgYKBgoKCgYGBgoGAgYKAgICAgH+BgIB8fH19fX18fX19fX19fn5+d3d3d3d5fHl7eHx9eXt5enp6fXx8fHt+e3h4eHh4eHh4eXl5eXp6enp7e3t7e3t7e3t7e3t7e3t7e3t7e3x8fHt7fHx7fHx8fHx8fHx8fXx8fX19fX19fXx8fHx8fHx8fXx9fX19fXx8fHx8fHx8fHx8fHx8fHx8fHx/iIeNioeFhoaDg4ODgoGBgoGCgoGBgYGCgYCAgoF/gICAf4CAgHx8fX19fX19fX19fX5+fn53d3d3d3Z4eHl3eXp4enh5eXl7eHp6eXx4eHh5eXh4eHh5eXl5enp7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t8fHx8fHx8fHx9fX19fX19fX19fX19fX18fH18fH19fX19fH19fX19fHx8fHx8fHx8fHx8fX+HiIyIhoeHhIKDhISCgYKBgYKCgoGBgYKBgIGBgYGAgIB/gIGAfHx9fX19fX19fX1+fn5+fnd3d3d3d3d3d3d3eHh4eHh4eHh4eHl5eXl5eXl5eXl5eXl6enp6ent7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7fHx8fHx8fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fHx8fHx8fX19fHx8gIeIi4eHiYaDg4SDg4KBgYGCgoGBgYKCgYGBgIGBgYCAgICBgX97fH19fX19fX19fn5+fn5+d3d3d3d3d3d4eHd4dnl5eHh4eHh5eXl5eXl5eXl5eXl5enp6enp6e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7fHx7fHx8fHx8fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fHx8fH19fXx9fXyBhoqKiYmIhIOFhISCgoGBgYGCgYGCgoGBgYCAgYGAgIGAgIGBf3x8fX19fX1+fn5+fn5+f394eHd4eHh4eHZxZGpeam15eXl4eHl5eXl5eXl5enp6enp6enp6enp7e3t8e3x8fHt7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3x8fHx9fHx8fH19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fIGFiYqJioeEhYWEg4KCgYGBgoKBgYKBgYGBgYCBgYCAgYCBgIF+fH1+fn5+fn5+fn5+fn9/f3h4eHh4eHh5bWRiZV9fXm95eXl5eXl5eXl5eXp6enp6enp6enp6e3t7e3t7fHx8fHx8fHt7e3t7e3t7e3t7e3t7e3t7e3t7e3t7fHx8fHx9fHx8fH19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18goWKiomJhISGhYSDg4KBgYKCgoGBgoGBgYKBgIGBgICAgICBgH58fX5+fn5+fn5+fn9/f39/eHh4eHh4eW5kZWdlZGJeZnh5eXl5enp6enp6enp6enp6enp6e3t7e3t7e3x8fHx8fHt8fHt7e3t7e3t7e3t7e3t7e3t7e3t7fHx8fHx8fHx8fHx9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXyChouJiIqEhYaEg4OEgoGBgYGCgYKCgYGBgYCAgYGBgIB/gIGBf3x8fn5+fn5+fn9/f39/f394eHh4eHl3Z2VkZWZkZWFfaXl6enp6enp6enp6enp6ent7e3t7e3t7e3t7e3t8fHx7e3t7e3t7e3t7e3t7e3t7e3t7e3t7fHt8fHx8fHx8fHx9fX19fX19fX19fX19fXx9fX19fX19fX19fX19fX19fX19fX19fX19fIKGi4eJh4SEhoSDg4WBgYGBgYKCgYGBgYKBgICAgYGAgYCAgYF+fHx/f35/f39/f39/f39/gHl5eXl5eWtlYWJlZWFlZV5ieHdze3p6enp6enp6enp6e3t7e3t7e3t7e3t7fHt7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t8fHx8fHx8fH18fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19g4aLhoiFhYaEgoOEhIKBgYGBgoKBgYKBgYGAgYGBgYGAgIGBgn98fH9/f39/f39/f3+AgICAeXl5eXl0Y2NlZGNmY2doZGZsZF5ze3p6enp6enp6enp6ent7e3t7e3t8fHx7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3x8fHx8fHx8fH19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX1+fn6DhouGhoaGhYODg4SDgYGBgYGCgoGBgYKBgYCAgYGBgYCAgYGBfnx8f39/f39/gICAgICAgIB5eXl6d2RhY2diYmRdW2VfYV1eYGFoeHp6enp6enp6enp6e3t7e3t7fHx8e3x7e3t7e3t7e3t7e3t7e3t7e3t7e3t8fHx8fHx8fHx8fH19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX1+fn5+fn5+foSFi4eGhoaGhIODg4KBgYGBgoKCgYKBgoGAgIGBgYGAgYGBgYF+fX1/gH+AgICAgICAgICAgHl5eW9vYmJiZF5jZ19dYWFgXF9kYlttfHp6enp6enp6enp7e3t7fHx8e3t7e3t7e3t7e3t7e3t7e3t7fHx7e3x7fHx8fHx8fHx8fH19fH19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX5+fn5+fn5+fn5/hIiLhoSHhoaEhIODgoGBgYGCgYGBgYKCgYCAgYGBgYGBgYGBgX5+fYCAgICAgICAgICAgICBeXpwXWJlZGJkXmZnZ2BZYmJhY2VfXF1ze3t6enp7e3t7e3t8fHx8fHx8fHt7e3t7e3t7e3t7e3t7fHx8fHx8e3x8fHx8fHx8fHx8fHx9fX19fX19fX19fX19fX19fX19fX19fX19fX19fn19fn5+fn5+fn5+fn5+foCFjIqEhYaGhYODg4SCgYGBgYKBgYGBgoKCgYCBgYGCgICAgIGBf35+gICAgICAgICAgIGBgYF5emxiZGdjYmdmYWBgZGFiZWRjZGNeXGJ1fHt7e3t7e3t7e3x8fHx7e3x8fHx7e3t7e3t7e3t7e3x8fHx8fHx8fHx8fHx8fHx8fHx8fH19fX19fX19fX19fX19fX19fX19fX19fX1+fn5+fn5+fn5+fn5+fn5+fn9/gYeMiYWGhoeFg4SDgoGBgYGBgYKBgoKCg4KBgIGBgYKBgYGCgoF/f36AgICAgICAgIGBgYGBgXp7dGdnZmZkZGZmYF5fYWNlaGRlXmJkYHR8e3t7e3t7fHx8fHx8fHx8fHt7fHt8fHt7e3t7fHx8fHx8fHx8fHx8fHx8fHx8fHx8fH19fH19fX19fX19fX19fX19fX19fX19fX19fX5+fn5+fn5+fn5+fn9/f39/f3+CiYqIhoaIhoWDhIOCgYGBgYGBgoGBgoKCgoGAgYGBgoKBgYKCgX9/f4GBgYGAgYGBgYGBgYGBenptaGNjZ2ZnZWdmZmdiZWRlYmdbYmVgdnx8e3x8fHx8fHx8fHx8e3t8fHx8e3x8fHt7fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx9fXx9fX19fX19fX19fX19fX19fX19fX19fn5+fn5+fn5+fn5+f39/f39/f39/f4SJioiGiYeFhYSEg4KBgYGBgYGCgYKCgYGBgYGBgYKBgoGBgICBgH9/gYGBgYGBgYGBgYGBgYF7emlpZGNqZmFgZmVjY2NnaWRjYmBiZGJ0fXx8fHx8fHt8fHx8fHx8e3x8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fH19fX19fX19fX19fn5+fn5+fn5+fn5+fn5+fn5/f39+fn9/f39/f39/f3+AhIqMiIeJhoSFhYOCgYGBgYGBgYKBgoGBgYGBgYGBgoKBgYGBgYGAgH+BgYGBgYGBgYGBgYGBgXZzZWRnY2RmZWJlZmdkZmhmZWNgYGNkYHF9fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fXx8fHx8fHx9fX19fX19fX19fX19fn5+fn5+fn5+fn5+fn5/fn5+f35+f39/f39/f3+AgICFioyJiIqJhoaDgoKCgYGBgYGBgoGBgoGBgYGBgIGBgYGBgYGCgX+Af35/foCCgoKCgoKCgoKCc3NnZWRkZWlqaGZnZ2NhZmZlZmdmZWVjdX18fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fX19fX19fH19fX19fX1+fn5+fn5+fn5+fn5+fn5+fn5+f39/f39/f39/f39/gICAgICAgIWLioqJioeHhoSCgoGBgYGBgYKCgYKBgYGBgIGBgoKBgYGBgYGAf4B+dHRzdX1/goCAfn5/gYB0cmdkZWNmaWppZWNlY2BmZGRnZ2JiZWFwfXx8fHx8fHx8fHx8fHx8fHx9fX18fHx8fHx8fHx8fHx8fHx9fX19fX19fX19fX19fX19fX19fX1+fn5+fn5+fn5+fn5+fn9/f39/f39/f39/f39/f39/f4CAgICAgIB/houLiouLh4eHhIOCgYGBgYGBgYKBgoKBgYGBgYKCgYCBgYGBgoCAgH5zc3NzdHV4dXV0dHV2dXVwZmNmZWhoaWdoZ2VmZWJfZGVmY2BiZ3d8fHx8fX19fX18fHx8fH19fX19fX19fXx9fXx8fX19fX19fX19fX19fX19fX19fX19fX19fn5+fn5+fn5+fn5+fn5+fn5+f39/f39/f39/f39/gIB/f3+AgICAgICAgICHjIyIi4qHh4eEhIKBgYGBgYGBgoGCgoGBgICBgoGBgYKBgoKCgYCAfnNzc3Nzc3NzdHR0dHNzdW9jY2FnZWhoZ2pmZGVnZmhmY2JlYl5ieX18e3t8fX19fX18fHx9fX19fX19e3x9fX19fX19fX19fX19fX19fX19fX5+fn5+fn5+fn5+fn5+fn9/fn5+fn5+fn5/f39/f4CAgH9/gICBgICAgICAgYCAf4CAgYGAgIeLi4iNiYiJhoSFgYGBgYGBgYKCgYKCgYGBgIGCgoGBgYKBgoKBgIB+dHNzc3Nzc3Nzc3Nzc3N1cmdlZWRlamhoZ2ZpaGdjZWViZGNoZGd7eHVzc3R2dnl4dnR0dHZ3d3d2dHR0dXV4d3h4d3d6e3x9fXx9fn5+fn5+fn5+fn5+fn5+fn5+fn5/f39/f39/f35/f39/gH9+fHt7fX58eXl2dnZ5fHx6end2d3l7fXt4hIyMioyHh4iEhYSBgYGBgYGBgoGBgoGBgYGAgYKCgYGBgoGBgoGAgH51c3Nzc3Nzc3Nzc3Nzc3VzaGVnaGVrbGhqZ2lqZ2dnZmRkYmVkbnV0dHNzdHNzc3Nzc3Nzc3Nzc3NzdHNzc3Nzc3Nzc3N0dHV1c3V3eHl7fn59fn98f39/f39/f39/f314fH5+fXx4dXZ3eXd4dnRzc3N0dXRzc3Nzc3NzdHNzc3R0c3R0dHODjI2KiYeIhoOGg4GBgYGBgYGBgYGCgYGAgYGDgoKBgYCBgYGBgICAf3VzdHRzc3Nzc3Nyc3NzdnZpY2hqaGpsZWZpbGhgZmVkY2BkZGZ0dXV1dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHRzdHRzc3Nzc3R2dnV1d3V4fH9+fX9+fHp4dXN0dXV1dHNzc3Nzc3N0dHR0dHR0dHR1dXR0dHV1dHR1dXR1dXV1dIaMjYuIhoeEhIWCgYGBgYGBgYGCgoGAgYCBgYKCgoGBgIGBgYGAgIB/dnNzc3Nzc3Nzc3Nzc3N2dnNnZ2pmaGdmaGhmZGlnY2NnZWVmcHZ1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dHR1dHR0dHR0dHRzdHR0dnV1d3Z0c3R0dHR0dHR0dXV1dXV0dXV1dXV1dXV0dHNzc3N0dHNzdHR0dHR1dXR1iY6MjIqHh4SEhYKBgYGBgYGBgYKCgoGBgICAgoKCgoGBgYGBgYCAgH93c3Nzc3NycnJyc3NzcnZ2dW5kXWNnZWlraGVoZ2dqamlnZXB2dXV1dXV0dHRzdHR0dHR0dHV1dXV1dXV0dHV1dHR1dXV1dXV1dXV1dXR0dHV1dXV1dXV0dHV0dHV1dXV1dXV1dXV1dXV1dXV1dXV0dHNzc3Nzc3N0dHNzc3Nzc3R0dHR0dHWKjoyMiYaGhIeFgoGBgYGBgYGBgoKBgYGAgYGCgYKBgYGBgYKBgYCAf3hzc3Nzc3JycnJyc3NzdnZ3d2liaGhnamtpaGZkZGVmaWhwdXR0dHRzc3JxcnJ0dXV0dHR0dHR0c3NycXFxcXNzdHR0dHR0dHR0dHV0cnJyc3R0dHR0dXV1dXV1dXR0dXR0dHR0dHR0dHR0dHR0c3Nzc3Nzc3Nzc3Nzc3N0dHN0dHR0dHR0dYuOjImGhYWFh4SCgYGBgYGBgYGBgoKCgYGAgIKCgoGBgYGBgYGBgIB/eXNzc3NycXJycnJzc3N3d3d3bGpoZGhpa3Z6a2VmZWhnbXJzdHN0c3JwcHBxcnN0dXR0c3NycnNycXBvb29vcHFzc3NycnJyc3R0dHNxcHFyc3R0dHR0dHRzc3Rzc3NzdHR0dHRzdHR0dHR0dHRzdHR0c3NycnFxcnJzc3Nyc3NzdHR0dHN2jZCMh4eFhYSEgoGCgoGBgYGBgYGCgoKBgYGAgYGCgoGBgoKBgYGAf395c3NycnFxcnJycnNzc3d3d3dzc2pnaWloeX99cW51bG5wcXJycnFxcG9wcXFxc3Rzc3NycXFwcG9ubm1ubW5ubnBxcnJycnJycnJzcXBvb3BxcnJzc3JxcnJycnJycnJycnJzc3Jzc3Nzc3Nzc3Nzc3Jxb29ubm9vcXJzc3Jyc3NycnNzcnaPj4uHhoWFhYOCgoKBgYGBgYGBgYGBgoGBgYGCgoKBgoGCgYGCgX9/f3hxcHBwcXFycnJyc3Nzd3d2dnd2cnF0c252f352c3hwcHBycnJycXFwcHFxcXFyc3Nzc3FwcXBvb25ubm5ub25vcHBxcXFxcXBwcXJwb25vcHFxcXFxcHBxcXFxcXJycnJycnJycnFxcnFxcnJycnFwb29ubm1ubW5vcXJycnJycnJyc3JxeI+OjYaDg4aEgoOCgoGCgYGBgYKBgYGCgYGBgYKCgoKCgoKBgYKBf4B/d29wb3BxcnJyc3Nzc3J2dnZ2dnZ3dnZ1c3l/fnd3d29wcXFxcXFxcHBwcXJxcnJzc3JycXBwb29wb29vb29vb29wb3Bvb29vcHBxb29vcHBwcHBvcG9wcHFycXFxcnJycnFxcXFxcXFxcHBwcHBxb29ubm5tbW5tbm9wcXFxcXFxcXFxcXB7j42NhoODhYOCgoKCgYKBgYGBgoGCgYGCgoGCg4KBg4KBgYGAgYF/f392bm9wcHBxcXFxcXBwcHZ2dnZ2dXR0c3NxfYB9fX9zb3BxcXFwcHBwcXFwcHBxcnJxcXFwb3Bvb3Bwb29wcG9vb29vb29vb3BxcXBub3Bwb29wb29wcnJycnFxcXBxcnFwcXFxcHBwcHBwcHBwb29ubm1ubm5ubm9ub3BwcHFxcXFxcXFxcIKRjoqEhIOFhIOCgoGBgoKBgYKBgYGBgYGCgoKCgoKCgYGBgYCBgX9/gHVvb29wcXFxcXBwcHBwdnZ2dXRzcnJycnGAgoCBeXBwcHBvcHBwcHFxcXFwcXFxcXFxcG9vcHBwcHBwb3BxcHBvb29wb29vcXFwcG9wcG9vb25vcHFxcHBwb3Bvb3BwcHBwcHBwcHBvb29vb29vbm5tbW1ubm5ub25vb3BvcHBwcHBwcHBwiZCMiISDhIaDg4KCgYGCgoKCgYGBgYCAgYGBgoKBgYGBgYGBgIGBgH+AdG5vb3BxcXFwcG9vcG92dnVzcnFxcXFxcICDg39ycHBwcHBwcHBwcHFxcHBxcXFxcXBwcHBwcHBwcHFwcHBwcHBwcHBvcHBxcXBwcHFxb29vbm9wcHBvb29vcHBvb3BwcHBwcHBwcHBvb29vbm5ubm5ubW5ubm1ubm9wcG9vb29vb3BzcXWPj4uJg4KFh4ODgoKBgoGCgoKBgYKBgYGBgYGBgYGBgYCAgYGAgYGAf4B0b29vbm9vb29vb29vb3Z1dHNxcXFxcXJygIKCgXRxcXFxcXFxcXFxcXFxcXFxcXBxcXFxcHFwcXBxcXFwcHBwcHFxcXBxcHBwcXBwcHBwcHBwcHBwcHBwcHFxcXBxcHBwcHFwcHFxcHFxcXFxcXJxcnFwcnRycnR0dHR1dnRzdHR0dXd3gpCPi4iDgoaHhISCg4GBgYKCgoGBgoGBgYKBgYGBgYGAgICBgYCBgYB/gHVvb29vb29vb25vb29vdXRzcnJycnJycnKDg4OCdnFycnFxcXJxcnJxcXJycnFxcXFxcnFxcXJycXFycXFxcXFxcXFxcXFwcXFxcXFxcnNzcnJyc3V1dHR0dHR0dHV2d3d3d3d3eHh4eHd3eHh4d3Z3dnV2dnZ2d3h6e3x7e3t6enp6enyGkI2LiIODiIeHhYODgoGCgYKBgYGBgYKCgoGBgYGAgYCAgYGAgIGBgH+Ad3FxcXFxcG5ucG9wcG92dHV1c3Nzc3NzdYiDgoN5cnNzcnJyc3Jyc3NycnJycnN0cnJzcnNzc3Nzc3Nyc3N0dHV1dXV1dHV3eHd3d3d4eHh3eHh4eXl5eXl4eHl5eXp6e3t7e3t6enp5eXh3d3d1dnV2dnd5enp7fn5+fX1+fn5/f35+gIyQi4qHg4WIi4iEg4SDgYGCgYGBgoGBgoKCgoKAgYGBgYCBgYGAgIGAf4B8enp5eXx5eHh2dXZ2dHl2d3h3d3Z3dnZ6f3x+fnx2dnd3dnV4enh4eHh3d3d2eHx5eXx6eXl8e3l5eXh4eXl6enl5eXh4enp5eXh4eHh3dnd3eHh3eHh5eXp7e3p8fH1+fX9/f359e3t7e3p5enl5e3t/foB/fn5/fn19fX5+f35+fn6AjpCNioeEhoqLiIaGhIOBgoKBgYGCgYGCgoKCgoCBgoKBgYGCgYCBgIF/f4B/fn19fX9/f318e3t7eXh4eHh5eXl4eXh5eXl4enp6enp6e3t7fH1+fHt7ent8e318e3t7e3t7e3l4eXh4ent6enp5eXp8fHt6enx8fHp6ent9fHx+fn+AgoGAgYKAgH9/gYGBgIB/f35+fn5/fX1+f4CAf35+f39+fn9/f39/gH+Af4OQjoyHhoWIi4yIh4aFg4GCgYGBgYKBgoKCgoKBgYKDgoGBgYGBgIGBgIB/goOCgoGBgX99f39/f4F6enh4d3h4eHh5eHh5enp5e358enx9fXt8fX19fHx7fnx9fn5+fn59fX9/f3x8fYCDgYCAf318fXx9fXt9fXx8fH19fX1+gYGChISDgoB/gYGBgH9/f4B/f39/f39+fn9/f39/f35+f3+Af39/gICAf4CAgICAhJCPi4eGhoiLi4mKhYaDgoKCgYGBgoGCgYKBgYGBgoOCgYCAgYGAgIGBgH+ChIKCgICAgH9+fn+AgH9/fn18fX19fYB/fX+Af35/gH9/fn9/gIGBgIB/fn+BgICAf4CBgX9+f4CBf35+f39+f39/fn5+f39/gYB/f4CBgYCAgYOEgoGCgoGCgH+AgYCBgYGAgH+BgICAf39/gICAgYGBgIGBgYCAgICBgoGBgYCAgYGFjo6MiYaHiYyLi4qGhoOCgoKBgYGCgoOCgoKBgIGBgYKCgICBgYCAgYGAf4KFg4KBgYCAf39+fn+AfX5+fn19fX5/fn9/f35+fn+AgYCAgICAfn9/fn6Af3+AgH9/f35/f35+fn59fn9/fn9/f35/gIGBgoKDg4KCg4KBgYKDg4OCgYGBgYKBgoKCgYKBgoGBgYGBgoKCgYGCgYKCgoGBgoKBgYKCgoKCgYGBgoKCgoaPkY+KiImKjY6NiYaFgoKCgoKBgYKCg4KCgoGBgYGBgYF/gIGBgYCBgIF/gYWEg4KCgoGCgYCAgIB8fHx7fH18fH9+fn9+fn5+f35+f39/f39/f35+foB+fn9+fn9/f39+f39+fn5/gIB/gIF/f39/f3+BgYGCgoCAgYKDg4SDg4ODgoKCgoKCgoKCgoKCgoGCgoKDg4OCg4ODgoKCgYKCgoODg4ODgoKCgoODg4KCh5KTkIuKi4uPj42Kh4SCgoKCgYGBgoKDgoKBgYGBgIGBgICAgYGBgIGAgYCAg4SDg4OEg4ODgoKCgXx9fHx9gn1+f4GCiIGCgoSCgYGDg4GBgYKDgYKBgYCAf39/gICAf3+AgX9/f3+AgYCAgICAgH9/f3+AgICAgH9/gYODhYSEg4SDgoKCg4OCgoOCgoODg4ODg4SDg4KEhYWDg4SEgoKDhIOCg4ODg4OCgoODgoCKlJOPioqMjpCPjYuGg4KCgoKBgYGBgoOCgYGBgIGBgoGBgICBgYGAgYCAgH+BgoODg4SEhIOCgoKCfXx8fn6AgYOAg4OChIaFhoaFhIWFg4ODg4SBgYKEhIKCgoeDg4KAgoGBgoKCg4KDg4KDg4ODgoGAgIKCgYOCgYKCg4OEhYWEg4OChISEhIOEhISDg4OEg4ODg4OEg4SDhIWEhISDg4ODgoKCgoKCgoKBgYKCgo+UlI+Njo6RkY6KiISCgoKCgYGBgYGCg4GBgIGBgYGBgYCBgIGBgYCBgICAgIKChIKChIOCg4ODgoJ9fX2AgH+AgoGDg4ODhIaEhIOEhYWDg4GBg4OBgIGDgYKFhYWFhoaHhoWGhoeIh4eGhoeHhoaEgoGCg4SDg4ODg4ODhISFhYWDhYSFhISEg4KBg4OCg4SEg4KCg4SCg4ODg4OCgoKCgoKCg4OEhIOFhYWFhoaIk5OTkI+Pj5KRjIqIgoKCgoKBgYGBgYKDgoKBgIGBgYGBgICAgYGBgICAgICAhISEgoKCgoGBgoKBgX+AgYOCgICAf4CCgoGDg4KCgYODg4SDg4KDhYSCgYGBgoSFh4eHh4aGh4eHiIiHh4eIiIiFhIOBgIGBgoKCg4GCg4SEhYSDg4OEg4OEhIOBgYGCg4OEhISDg4ODg4OEhIODgoSDg4ODhIWFhoeHh4eIiIiJiY6TkpKOj46Rko+LiYeCgoKCgoKBgYGBgoKCgoGBgIGBgYGAgICAgYGAgIGAgICDg4KCgYKCgYGAf4CBhYWFhoOCgYB+fn+BgoSCgYKDhIOCg4ODg4KChIODg4OCg4SFhISFhYSDg4SFhYKEhIWFg4KBgH9/gIB/gIGEg4OEhYWEgoKCgoOCg4OFhIKDhISEhYaGhoaGhoWFhoeHhYaIh4aHiIeGhoaIiYeGhYaGhoeIkZKSj46QjpCRjImHhYGBgoKCgoGBgYGBgoOBgYGBgYGBgICAgICBgYCAgICAgISEg4KBgoGAgYGAgYKIh4aHhYSCgH99fX6AgH+AgYGBgYGBgoGAgYKHgoGCgoKBgYGCgYKCg4GBgICAfoGAgICAgH9+gIGBgYKCg4OEg4OEg4OCgoGBgoODg4SEg4SEhIOFhYaFh4eIh4eHh4eHh4eGhoaGh4WFhYaGhISEhIWEhYaSk5GOjo+OkI6JiIeEgoKCgoKCgoGBgIGCgoKCgoKCgYGBgYGAgYGBgICAgYGAgoSDg4KDgoGCgYKDg4iHh4iHhYSCgX5+gICAfn5/f4CBgYGCgoGBhpqIgH+AgIB/gIKBgIGCg4OAf39/gICAgICAgICDg4KDg4ODgoOBgYKCgoOCgYKCgoOCgoSDhISDg4SEhYWFhYaGhoaFhISEhYWEhIWFhYSEhISDhISEhISEipSTkpCQj46NiIaFhIOBgYKCgoKCgYGAgYKCgoKBgoKBgYCBgYCBgYGAgICAgYGAg4OCgoOCgoKBgoOCiImJiYiHhYSDgYKEhIOBgoKBg4SCgoKBgYWOnYyDgoSCgX+AgoGCgoGChIOBgYCBgoOCgoGDg4SDg4SEg4OCg4KDg4ODg4KCgoKCgoGDhISEhYSFhYWFhIWEhIWFhYWDg4OEhISEhYWFhISEhISEg4ODg4OOlZKQkZGOjYyHhYODg4GBgoKCgoKBgYCBgoOCgYCCgYGBgICAgIGBgYCAgICBgICDhYSEhIODg4SDhIOGh4mIhoWDhIODg4WDgYCDgoaFhIOBfn18gJOdjYOFhIOHhYGAgYKDgoKEg4OCgYGBhIWEg4ODgoKDhISDg4ODg4SFhISDg4KCgoKCgoSEhYSFhYWFhYODhYWFhYaFhoWEhIWEhYWGhYWFhIWEhISDhIODhJGUk5KSj4yMioWEhIODgYGCg4KCgoKBgYGCg4KBgYKBgYGBgICBgIGBgH+AgIGAgYaGhoaGhoaHh4aGhYSDhYaCgIGBgYGHgoB+f4CFlIuFfnx9fX57jZ+LgYKBgYuLf4aEgoKCgYKDg4GCgYKDhYODg4KDg4OEgoKEhIOEhIWEg4OCgoKCgYKCg4ODg4SFhYWFhIOEhYWGhYWEhISEhIOEhIWFhYWFhIODhIOEg4KGlJSSlJKPjYyIhISEg4KBgoODgoKDg4GBgoKBgoKCgYGCgYGBgYCAgYGAgICAgICAhYWFhYaGh4aGhoWGg4ODg4GAgoKCgYKAf35/foael4d9f4B+i4WAkYSBg4F/j5KBk4uAgYKBgYKBgYKDgoODgoOCgoKCg4OBg4SDg4ODg4OEhIKCgoKDgoKDg4ODhIWEhISEg4OEhIODg4OEhIODg4ODg4SDg4ODg4KDg4KDgouUk5KTko2NioeDg4OEgYGCg4ODg4ODgoGBgoGCgoKCgoKBgYGBgICBgYCAf4CAgICDhISFhYSFhYWEhIWCg4KDgoKDg4OBgICAgICAhJygiIGMgn2GhX2ChIOEgoGUmIKJiICCgoODgoKDg4ODgoODhIKCgoODgoKDg4KCg4KDg4WEg4ODg4SDg4SEhISEhYWEhIWEg4SEg4OEhISEhISEg4SEhYSDg4SEhIODgoKDkJSSkpKPi4yIhoOFg4OBgYKDg4ODg4OCgYGCgoKCgoKDgoCBgoGAgICAgIB/gICAgISDhYWEhYWFhYSFhYOEhIWDg4SEhIKCgoOCgoSBlJ+FhIiEh4GAfn6FhYWEhY6FfX19f4KEg4ODg4OEg4ODhISEg4OEhISEg4SEhIOEg4OFhoWFhYSFhYWFhYSFhoWGhoWFhYWFhYWFhYWGhoWGhoaFhoaGh4aFhYWFg4SEhIeTk5OSkoyKiIWFhYWCgoGBgoODg4OCg4KBgYKDg4ODgoKBgIGAgICAgICAgH+AgICAhYWFhYWGh4eGhYWFhISFhYSEhISEg4ODg4OEhYOIkIGCgYKFf39+fYKHhoOAfn5/f39/f4OEg4OEhISEhISEhISEhISFhYWEhYSGhYWGhYaGhoWGhYWHhYWGhYaGhoaFhIWFhYWFhIWGhoaHhoaGhoaHh4iIiIaFhYaEhYWGjZSTkpGQi4qHhoeGhIGCgYKDg4ODg4KDgoGBgoODg4KAgYGBgICAgICAgICAf4CAgICHh4eGhoeHiIeHhoaEg4ODhIODg4OEg4ODg4OEhIODgoCAgImEf359f4WBf3+AgH9/f36AgISFhIWGhoaFhYWFhoaHhoaFhoWFhoeHh4iHh4eGhoaHh4eGhoaGhoaGhYSDhIWFhYSFhYaGhoeHhoaGhoeHh4eIiIeGhoaHh4eRk5KRkZCLiIiFhoSDgoKBgoODg4ODgoKDgoKCgoOCgYCBgICBgICAgIGAgIB/gICAf4aHiIeHh4eIiYmIiIODgoKDgoSEhIWEg4KCg4SEhIOBgICDjYaDgH5+gH9/f4CAgIB/f4B/f4WFhoiIiIeHh4eIh4iHiIiIhoaHiIiJiYmIh4aHh4eJiIaHhoeHhoaFhIOEhYaFhYWFhoaGh4eFhoeGh4aGh4eHh4eHh4eFh5OTkY+RkIuHhoWGhIKCgYGCg4ODg4ODgoKCgoGCg4KCgIGBgYCAgICAgICAf3+AgYB/hoiIiIiHh4iJiYmIg4KCg4ODhIWHh4aFg4OFhISEg4CAgYWEgoOCgYGCgYGBgX9/gH9/fnt6gYuMiYqKiYmIiImJiYmKi4qIiIiJiYuLioqIiIeIiIiHh4iIh4iGh4aEg4OFh4eHhoWFhISDhYWEhYWGhISEhYWFhoWGhYOJlJOQj5COioaFhoWDgYGBgoKDg4ODgoKCgoKCgoKCgYGBgYGBgYCAgICAgIB/gICBgH+GiYiIiYeIiImJiIiEgoKDg4KDhImKh4aEhIWEg4OCgIGEhYSCgoKCgoKCgH9+fX19fX9+fHp8j4yJi4uKioqIiIqJiImLiomJiImIioqJi4mHhoaGh4WGiIiJiIeGh4SDgoSIiIiIh4WCgoGDg4KDg4SCgoKDgoGEg4SDgY6TkpCPj4uIhYSGhIKBgYGBgoODg4OCgoKCgoKCgoGBgYGBgIGAgICAgICAgH+AgIGAf4WIh4eHhoeIiIiHh4SCg4OCgoOFiYqJh4WHhYSFhYODhYSDhIOCgoKDgX59fn5+fn5+fX1+fX1+g4eJioqHh4WGh4eHh4iHh4mGiIaIh4aJiYODhIOFhISFhYaIh4aFg4KCg4WHhoeGhoOCgoOEgoODhIKBgoGBgYODhIODkZKRjo+Oi4eEhoaEgoGAgYGDg4ODg4KCgoKCgoKCgYGBgIGBgYCAgIB/gIGAf39/gIB/hYaGhYaGhoeHiIeGgYKEhIOChYeIi4qGhIaEgoaFgIGEg4ODg4OCgoF9fH1/gH9+fn59fH19fHl8g4aGh4SDgYODhIWFhYODhYSEhISEhIWEgoKDgYSEgYKDg4WGhYSCgYGCgoODhYOEhIWEhIaDhISFg4KDgYKDg4SFhIeSkY+Nj4yJhoSFhIWCgYCBgYODg4ODgoKCgoKCgoKBgYGBgYGAgICAf4CAgYB/gICAgICDhIWEhYWFh4eHh4aAgYGFg4OEhYSHiIWCgIB/gX9/goODg4ODgoJ/fX1/gICBf31+fn19fX17enp+hISEgoGBgIGBgoKBf36BgYGCgYOAgoGCgoKBg4SAf4CAgYOCgICAgICBgYGCgYGChIODhYSCg4SDgoKBgoSDhYWGi5ORjo+Pi4iFhYOChIGBgYGBgoODg4KCgoKCgoKCgoGBgYCBgYCBgH9/gIGBgICAgH+AgIKCg4OChIOEhYWGhn+BfoCBgICAgIGDgn9+fn5+foCDg4OCg4KDgn19fn+AgIGAfn19fX1+fXx6enp/goKBf39/f35/f4B+fYB/foCAgX+AgIF/f4CAgX59fX+AgX9/foCAgH+AgICAf4CCgICCgYGCgYGAgYGBgYKEg4aPkpCOj42Kh4eGg4ODgYGBgYGCg4ODgoKCgoKCgoOCgYGCgYGBgICAgH+AgICAgICAf39/gYKDhIGCgoOCg4SFgIB/fH19fn19foCAf31/fn1+gIODg4KCgYF/fX1+f4CAgH9+fX19fHt7e3p6eXqAgIB+f35+fn1+f35/gH9+f3+Af4GAf359fn9/fn18fn+Af35+f3+Af39/f4B/f4B+f4CBf4B+f39/gH9+f4B/hZKSj46Pi4uHiYWEhIKCgYGBgYKDg4ODg4OCgoKDg4KAgYKBgYGAgICAf3+AgIB/gIF/f36BgYSEgYKBg4OCg4OBgH98fn9/fX6Af4B/foF/f4CBhIOCgYB/f359fn5/gICAfn19fX17e3x6enl5eXuAgH9/f39+fn5/foCAf35/f4CAgoB/fH5+f35+fXx/f4B/fn9/f4B/f35/foCAf36Af39+fn5/f35+fn18fH2Fk5KOjIuKiImIhISEgoKCgYGBgoOCgoODgoODg4ODgYCBgYGBgYCAf39/f4CAgICAgIB/foCBhIOCgYGDhISDhICBgICBgIGAgYKCgoGBgoCBg4ODgYGBgYCAfX19fn5+f359fX19fXx8fHt6eXl5eX2BgICAgYF/f4B/f4F/gICAgYGCgoB+gH5/fn5+foGAgYF/f39/gIB/f39/gYB+f4CAfn9/fn+Af31+fX17fIaTkYyLioeHioiGhoSDgoGBgYGCg4ODg4OCg4OCgoKBgICBgYGAgH9/f39/gICAgICAgH9+fn+BgYGAgISGh4aHgoSDhYOBg4ODhYSEhISEg4ODhIKCgoKCgX5+fX19fn6AfX19fX19fX19e3p6eXl5eYCCgoKEg4CCg4F/gYCBgYGDgoODgYGCgIGAf4CBg4GEgoCAgYCBgYCAgYCCgn+BgIF/gIB/gICAfn9/fnx8ipOQiomIiIiJiIaGhoSCgoGBgoKDg4ODg4KDg4KCgYCAgICBgYGAf39/f4CAgICAgIGBf359fn5/f39+g4aHh4iChYSFg4SFhIWGhYaGhoWGhYGBg4ODgoKAfX19fX19fn59fX19fX19fX18e3l5eXl4fIKDhIWCgYSDgoKDhYaCg4SDgYKCg4OCgoKCgYKFg4iFgoGBgYKDgYGBgYSDgoOCgoKCgYGBgIF/gIGAf36Ok4yHiIaIh4aGhYaGhIKDgoGCgoODg4ODg4OCgYGBgH+AgYCBgYB/gH9/gICAgH+AgYB/fn19fX5+f36Ag4SHiISGhoaFhoaHh4aHh4iHh4eGf32BgIGCgX59fX19fX19fX19fX18fH5+fnx7eXh3eHl5gIODf4ONhIOEhISXl4ODhIF9foGCgoGCgYKBg4aIjIWDgoKBhIKEg4KDhYSEhYOCg4OCg4OCgoKCg4OCgpKQi4iJh4mHhoaEhoWEhISCgYKCg4ODg4ODgoGBgYCAgICBgIGBgH9/fn+AgYCAf4CAgH9/fn1+fn+Bf4CCgYWFhYeGh4eGh4eIhoaHh4eGh4V+fX18fX9+fX19fX19fX19fX19fXx7iJKCe3x6fIZ5eHl8gYF+iZaEg4OEhJSTgIGBf39/fn6Fi4B/gICEhpCJhYSCgoGFhYuDgYKFhYaGhIOFhYOFhIODhIOFhISIko6MiYiIiYeHh4WGhYSFhIKBgoKDg4ODg4OCgYGBgYB/gIGAgICAf39/f4CAgICAgYGBf39/f4CAgIGBgYGBg4OGh4aGh4aGiIeGhoaFhIOFhH59fHx8fX18fH19fX19fX19fX18fH+RlZaDe3qElHx4eXp7fICCg4GBgIOCgH58fn57iJF8fI6Wf31/f4KGioWDg4SDgYONiX9+f4OEhYWDhYaFhIWFg4SFhYaEhI6Rj4yKioyJiImHhYWFg4ODgYGCgoKDhIODgoGBgICBgICAgYGAgIB/f3+AgIB/gICAgX5+f4GBgoKCgoODgoOCgoWGhISFhYSGhIOEg4KBgIKAfn19fHx9fXx8fH18fH18fX19fHx8e4uRl4x6e3yBenp6e3x5eX19foB/gH98e3t+fn2ClZF/hIh+fH5/goR8fIGChIKAf4eDfYKBf4KCgIODhISEhISChIOEhYGEkZGOi4yMjoqJiYWFhYODgoKBgoODgoKDg4KCgYGAgIGAgICAgICAgH+Af3+Af357gICBenyAgYKDhYODhYWFhYODg4SCgYKDgoOCgoGBgIB/gX5+fX59fHx8fHx8fHx8fHx8fHx9fHx8fn6Kgnt6e3p4ent7fH17fn1+f319fX18fH+BgX2Gj4F+fYJ+fn6Agnx8f3+CgIKAfnx7ioJ9gH9+gYCAgIKBgoCAgYGAf4uUj4yLjY6NiIeHhYWEhIOCgoKCg4OCgoODgYGBgICAgICAgH9+fXx7fHx9f3+AgHx6gYF4e4CCgYOFhIOFhIaHhISAhpSIgIKBgYGBgH9/f39/fn5+gHx8fHx8fHx8fHx8fHx9fHx8fHx8fHl7e3t4eHl7enp8gX+Afn+BfH5+f399gIKCgICAgX+CkYF/f4CAfoB+fn9+gIGBfX19e319fXx9fHx9gH+AgH6Afn6ClJGMjI2OjoqFhoaFhISFg4OCgoODg4OCgoGBgYGAgICBgICAf4CAf39/fXt6fICAgHh+gXd7gIF/gYKCgoKEhoeGhn6IlYp+gYGAf4B/foB+f39/fn+Bfnx7e3x8fHx8fHx8fH59fHt9fHx8e3x8fHp6eXt8en2Fg4J/gYF+f35/gH6FgoF+gH9+foCFhoKAfn6Dhn9+fH6AgIGAf39+fX19fX57fH1/f3+AfX9+gIyRjYyNjo2Nh4SGhoWEhISDg4OCg4ODg4KBgYGBgYCAgYGAgYGBgYGAgH9/f397en9/e3mAd3p/f31/f3+Af4KDhoaFf3+FgX5/gIB/gH5+f31/gIB/f4B/f319fHx9fn18fH19fX19fH58fXx7fXx8ent6fH18f4aEgoCAgX1+fX5/fouEgYZ+fXx8f36CgX99fX19gHx7fXx+gYSDgYB+fn5+fX1/f399foB+fn6Eko2MjI+Ni4qGhIaEhIODg4OCgoKDgoOCgYGBgYGAgYGBgYB/fXx8fH1+f39/f397e399d352eH59fH18fX5+gYGCg4B6fX18fn+Af36Af35/fn+AgH+AgH9/fn9+fn5+fn1+fn99fH59fn19fHt8fHx6e3p9fn+Ag4OCf35/fH18fXx8gYN+jH58e3t9fn1+fn17e3t9fHp7e3uAhoWChIOCf4B+f4KCgn9/goJ/gIqPjIyLjYyLiISEhIODg4ODgoKCgoKCgoKBgYGAgoGBgYKCf3+AgIB/fn18fH5/fn55fX52e3Z4fXx8fHt9fX6BgICAf31/f31+f39/foB/f39+f3+Af4GBgH99gH9/fn9+fn5/f3yCfn59fX16fH19fHp8fH6AgoGAgIB8fH18fHx8fH18fnt/fnt7e3x8fH18e3t7e3x8enp9en6CfoGDhIKBgoGFhoWFhoaHhYGEkY6Mi4qLh4eFgoOEhISEg4KCgYGCgoKBgoGBgYGBgoGBgoKAgYKBgYCAgH9+e3x+fnx6fnh5dnd8fHx7e318f4GAf35/foB/f35/f35/gH9/f3+Af3+AgYKAfn6BgIB/f39/f39+fYN8fH19fH99fX19e3x+fn9/fn5+fnx8fHx8fHt+fnt8e3x8fHx9fH18fnx9fHt7e3x5e3x7e316fX5+f4CAg4eJiYmKiYqJhYiRjYuIiYeFhYOCgoOEhIOCgoKBgYKBgYKBgYGBgYKCgoGCgoCAgX98e3p6eXt9enx+fnl8eXh4dHx8fHt8fHx+gH9/f39/gIB/fn5+fX+AgH9/f3+Af4CDgoB/gIGAgIB/f4CAgH58enx9fX59fX5+jIZ9fX57e4OCfX19fX18fX19fX1+fH18fXx9fX58fn19fX18e3t6fHt8fHt6e3t6enp7fn6ChYiHiIqLi4uJjZGOjYmIhoWEgoKCgoODg4OBgYGBgYGBgYGBgYGCgoOCgYKBgIGBf3+Af356eHl5en5+e3l6eH5zfHx8e3x8fH5+fn5/gH+AgIB/fn9+gIF/f4B/gIGAgoSEgYCAgYGAgX+AgYKBf39+f31+gH57foGSjHx9f4qAjYx+fn19fX59fX59fHx8fX18fXx9fX1+fX1+fnx7e3t8fH18e3p7fHl6eXh5e35/hIOEh4mKiImOkI2LiIiFhISCgYKCgoKCgoGCgoKBgYGCgYKCgoGCgoKBgoKAgYGAfoCAf39+e3p5e319eHx6f3KBfXt7fHx8fn59fYGCf4GBgX9/gH+AgX9/gIGCgYGFg4SCgYGCgYKCgICBg4KAf4F/fX6Afnx/f4mCf36DkISEg4F/fn18jYd9fX59fHx/fnx9fXx9fX5+fX5/fX19e3x9fnx8e3x9enp5eXl5e3t+foCBg4eEiI6NioqGhYSEg4KBgoKCgoGBgYGCgoKBgoKCgoKCgoKCgoGCgn+AgIB+f39/fn5/ent5fX16enp9cX6Cent9fX19fXp4f4KAgYKCgICBgIGBgICBgoKCgoaFhIKBgYGBg4F/gIKEgX9+gYB9foF+fX5/gIB9fn+EgH5+f31+fX2KhX1+f31+foB/fX18fH5+fn99f4B9fn18fX9/fHx7fH17e3t6enp7e3x9fn2Ag4CJjYqLh4WFhYSDg4KCgoKCgYGBgoKBgoKCgoKCgoGBgoKBgYGCf4CAgH9/f39+fn59eXp6fXx5d3t0e4d8dHd9fn17e3Z2fYCBg4KBgYKCgoKBgYGDg4OChYaEg4CAgICCgX+AgYSBfn6Af35+gH59fn6AgH+Bfn+Af39/f398f39/f3+Afn9/gH58fX18fn5+foF/gH2CgHx9gIB9e319fXx8e3x8e3t7fHt8fHx9fIqKiIiFhYWFhISDgYKBg4KAgIGCg4KCgoOCgoKCgoGCgoGBgoJ/gIGAf39/fn5+fn57enp8fHt2e3R3f352cnt+fnt4dnd8gIGCgoKBgoODg4OCgoSDhIOFhoOCgX9/gIOAgICAg4F+foB/fX+AfX1+foCAf4J/gYGAgICBf31/f3+AgIGAgIB/fnx9fX19fn59g32AfoKAfX6AgX98fn59fX17fH58fXx8fHp8e3x9iYaGhYWHhYWFhIKBgoGDgYCAgoKDgoKCg4ODg4KBgYGBgYGCgH6AgYB/fn5+fn5+fn56e3p9goN9dXF6fHpxen59eXh0dICAgoKCg4KDhYOEg4KDhISEhIWEgYGAgH6Agn9+f36Bf35/f4B9foB9fX1+gH9/gYCCgYCAgIKBfn6Af4GAf4CAgH9+fX19fnx+fn19gYR/gH9+f4GBf31/f319fn1+fn1+fHt8enx7eoCHgoSEhYSEg4WDgoKBgYKBgICCgoOCgoOEg4SDg4KBgYKBgYOAfoCBf35+fn5+fX5+fnt7en6Jh354cnl9f3F6eHt4eXV1fYKDgoODg4OFhIWDg4OEhIODhIKBgH+Af4CBfn19foB+fn5/gH19f3x9fX6Af4CAgIKAgIGAgoGAf4B+gIF+gIGAgH9+fn5+fn5/fn6FhYGBgH+Ag4F/foGAf35/f4B/fn17ent6fHt6goR/g4KCgoOChIKBgYCAgoGAgIKBg4KBg4SDhIKEgoGBgoGCgn9+gIF/fn1+fn5+fX59fXp7fIWEe3tzeXp8cHd1dnd5dXR6hISBhISDhIWFhoSDg4WEgoODgoCBf39/f4B9fX1+gH1+f39/fn1+fH19foF/gIB/gIB/gIGDgoGAf36AgH+AgYCBgH9/f39/f4CAgIGCgoKBf4CDgX+Ag4J/f4B/gX+Af3x7e3p8e3yCgH+Cf3+BgIKCgYF/f3+BgH6BgoKDgYGDg4KEgoSCgYGBf4GCgH6AgH9/fX5+fX19fn19e3t6gH94fHZ5eXtxdHh3dnh1cnmFhYKEhIKEhYWGhISChIOBg4GAgIF+f4B/gHx9fX6AfX5/f39+fX98fn5+gX+Bf39+f4B/gIODg4B/f4GBgIKBgYGAgICAgICAgIGAgYKDgYF/gISBfYGDhICAgX+BgYKBfXp7e3x8fH9+f4B8f399fYGAgH59fYB/foKBgYKBgIKCgoKBg4KCgYB/gYKAfn9/fn99fX1+fX19fX19ent7fHZ9eXh5enJ1eXl2d3dzdYaFg4WFgoSEhYSEhIKDgoGDgX+AgX5/gH6AfX19fn9+f4B+fn99f3x/f3+BgIF/f3x+gH6AgYKDgYCAgoOEgoGAgYB/goCAgYGAgYGCg4KBgX+Ag4B+goKEgICCgYKChIJ+e3t8fHx8fX1+fXp+fX14fn9/fHx8fn5+gYCBgYCAgoGBgYGDgoGBf4CAgoB9fn19f319fX59fH19fX16e3p8dnx6d3t4cnZ5e3Z2dnN0hoSEhYSChISFg4OCgYOBgYOBgIGBfX+BfoF9fX1/f39/gH5+f359fYB/gIGBgX5+fH5/fn5/gYJ/gYGCg4eFgX9/fn6Af4CBgICAgIKCgYCAfoCCf36BgoKBgYOCg4OFgn99fX18e3x8eXp7en55e3l4f357e3t+fX1/f4F/gH6BgICAgoOCgYF/gIGBf31+fH1+fX19fX18fn58fXx5e3x4enx3endzeHd6c3Z2c3SGhISFg4KDhISDgoKCg4GCgoGAgYF9gIB+gH1+fX5/gICAf35/f3x+f3+BgIGAf359f39+fn+BgH2AgIGDg4N/f359fn5+f4CAgIB/gYKBgH9+gIF+f4CCgoCBg4KEhIaEgH59fHx8fHp5dnl5enl2eXZ+fHt7e359e399gH99fX9/f3+BgoGBgX5/gYF+fX18fX19fX19fXx+jYF8fXl7e3p5fHd4eHR1dXhyd3d0doaEhIWEg4ODg4OCgYKDgoGDgn+Bf35/fn+AfX19fX+AgIB/f39/fIB/f4GAgYCAf3yAf31+fn9/fX5+gYGCgn5/fn1+fn5+f3+Af32AgIB+fn1/gX5+gIKBf4KDgoOEh4SAgH58fXx8e3x1eXl4eHh5d3t8e3t7foV9fn1/ent+fn59foGAgIGAfX6BgH59fXx9fX19fX18e32Dgnx8ent7e3p7d3Z4dXJzdnB4eXJ4hYWFhYOEhIOChIKBgYKBgIKBgIF/fn5+foB+fX58foCAgH+AgX97gH6AgH+BgYB/fYB+fn5/f319fX6AgYKBfn9+fn59fX5/fn9+fH+Af35+fn+Dfn6AgIF/gYOCg4OGhICBfnx9fHx7fHh3e3h1eXd3eXx6e3t9kod9fH13en1+fn19f35+gH98foB/fn19fH19fX19fHt8ent9enp4e3x6ent4dHh1cXJ0cHh4cnmEhYWFg4SDgoODgoGBgoKAgYGAgIB9fn5/gH18fn1/gIGAf4CBgHyAf4B+f4GAf39+gX9+f39+fX18gICAgIB+f35+fn18fn9/f358fYB/fn1+gIJ/foCAf36ChIKCg4WFgoJ+fXx7e3x8eXd8eXd4d3d4e3t7e3yFin17end6fH19fHx9fX1/fnx9fn59fXx8fX5+fX18fHt6enx7e3p5enp7enhzd3VxcXJweHdxe4WGhIWDhYKBg4OBgYGBgoCBgICBgH5/fn9/fXx+fYCAgoGAgIGBfX6Af35/gX+Af3+BgH9/f31+fH1/gICAgH9/f35/fXx+f39/f319f39+fn6CgYF/gIB/foGDgoKEg4SCgn5+fHx6fHt7eXt6d3N2d3h5e3p7eXp/fnt7d3p8fXx8fH59fH19fH19fXx8fX19fX99fXx9e3l7fHx7enp6enp6eHN2dXBwcm93dnJ7hYaEhYOEgoGDgoKCgYGCgYKBgYGAf4B/f399fX9+f4CBgYJ/goF9foF+fn+Bf4B/gIJ/gIB+fH58f3+BgICAf4B/f4B+fX5+f4B/f39/gH9/f4J/gICAgIB/gYGAgISBgoKAf39+f3x9fn56fYV+dHx9enp6enx5eXp6hoV3eXx8fHx8fXx8fHx8fX19fHx9fX19fn19fX16eX18fH16enp6enp5c3V1b29xb3d0c3yFhoOEgoOCgYKBgoKCgYKBgoGBgYCAgICAgH59gH+Af4GCgn+BgX+AgX5/gYB/f4CAgn+Bf319f35/f4KAgICAgIB/gIB+fn1/gH9/gIB/f39/gH+AgICAgH+AgYCBgYGCgYCAf39/fn1/fnuBk416fH18e315e3p6eHmBgXh5e3x8fXx8fHx8fHx9fX18fH18fn1+fn59fHp8fHt8fXt5enp6eXlzdXVvb3Fwd3N0fYWGg4OCg4KAgYCCg4KAgYGCgYKBgYCAgIGAfn6Af4GAgYKCgIKCgICCfoCBgX9/gX+BgIF/fH6Af3+AgoCAgICAf3+AgH9+fX6Afn2AgIB/f3+AgICAgYCAf4CAgYCBgYKCgICAf39/fX5+fIGGiXx8fnt7fnl6e3p7jn53d3l7fHt9fHx8fHt9fH19fX18fXx+fn5/f358enx9e3x9e3l6e3p5eXN0dW5zcXB4cnV6hYaDg4KDgoCAgIKCgX+CgYKBgoGBgYKAgYF/fn9/gYGCgYKBg4OAgYJ/gYGBf4CAgIB/gX99f4F/gICBgICAf4B+gICAf359foB+fn+Af39/gH9/gICBf4CBgH+BgIGCgoKAgICAgIB9foB9gIOCe35+e3x9e3p8fHyHeXh4eXx8fH17fHx9fX18fH19fn19fX5+f3+Af317fH18fHx7enl7e3l5c3J1bnZycHhxdXaFhYOEg4KCgICBgoF/gIKCgoKDgYGDgoCCgYB/gICCgoKBg4KEhICBgX6BgoF/gICAgH+Cf36AgYCCgICAgIB/gH+AgIB/fn2Af39/f4CAgH+AgH+AgYF/gICAgIGAgYGBgYGAgYCAgH9/gH5/fX59fn57fXx9e3x8d3h1eHh5e3x8fXx8fHx8fX5/f39/fn19fn9/gIGAf3x9fHx9e3p7eXp8eHpzcnVud3FxenF2d4WFg4ODg4KBgYKDf3+CgYSDg4SBgYOAgoOBgYCAgIKDgoCCgoSDf4GAfoKDgICBgICAf4CAf4GBgIKAf4CCgH9/gICAgICAf4CAgH+AgICAgIB/f4CBgYCAgICAgYGAgoOCgoCCgYGCgYB/f4B/gId+fnx6fXx7fX94d3Z5eXp8fXx8fXt8fH19fn5/gIGAfn1+gICAgoGAfH59fX58d3t6ent5eXNxdW53cHV6cXZ5hYWCg4KDg4KDhIR/gIOBhoOEg4GChICEg4KCgICCgoSBgYKChIJ/gIB/gYOCgYCBgYCAf4GBgYGAg4F+gIOCf35/goGAgIB+gYCBf4CAgYGBgYCAgIKBgYKBgH+CgYGBgoOCgoOBg4OCgYCBgH+AhH19fXx/fXp9f3p5dnp4eXt7fH19e3x9fX19fn+AgYGAgH+AgICDg4B9f35+fn15eXt6enp5c3J1b3dxd3lzd3uFgoKDgoOEgoOEg4CAgoOGg4ODgoKEgYSDgYKAgIKBhIGCgoGCgX6BgICCgYKBgYOBgIGAgICBgoGEgH6Bg4F/f4CDgoCBfoCCg4KAgYGBg4KDgoGBg4KChIGAgYOBgYKEg4KEhIODhIODgYGBgYCCf4B/fYB8enx/e3t3fHl5eXt6fX59fHx8fH1+foCBgYCAgIGBgYSEgH2Af39/f357e3t6e3p0cHhyeXR2eHR3e4SCg4KDg4SChIODgYKChYaEgoODg4SBhISAg4CBg4KCgoKCgIKAf4GAgIKBgoGCgoKBgIGBgYOCgoOAfoGDgX9/gYSEgYN/goKBg4KCgoGEg4OEgYKEgoOCgoGCgoOBg4SDhISEhISFg4SCgYOCgoOBgYGAgH58fIB8fHh8eXp5enx9f3x7fHx9fX18fICAgICAgYGBgYKBfoGAgICAf3t7e3p6enVweHd5dnV8dXZ8gICDgoODg4OEhISAgoOGhYWDg4KDhIGEhYKCgYKDg4GCgoKAgYB+gYCBgYKDgoKCgoGAgYKCg4KCg4B/gYOBgICChIODgoGCgoGDgoKDg4ODg4SAgoSDg4OBgX+Bg4KDhYKEhISEhISDhISChIOEhIKBgoGBgHt+gX59eXx6enp9fHyBfXp8fH19fHp7fn5+gIB/gYGAgICAgIGBgIB/fX18fX18dnJ2eHh2dH92dX2Hh4OChIWDg4SFhICChYWEhIOCg4SEgIOFg4KCgoODgYOCgoCCgH2AgIGCg4KCgoKEgoGCgoOEgoKBgICBgoGAgYOFhIOCg4CCgoOCg4ODg4OEg4CCg4KEg4KCfoOBgoSEgoODhISEhIOEhIOEg4WEg4ODgoKAe4CBf3x8fXp6e32AfX9/fHx6fH59fH19fn5/f39/gICAgH9+foCBgICAfnx9fX5/fn18e3h2f3Z3f4SHg4KDhYODhIaEgYKFhoWEhIODhISBhIWFgoKDg4SCg4KDgoKBfoCAgoKDgoODg4SDgYKCg4OCg4GBgYGDgn+ChISDg4KEf4KEg4ODgoSDg4SCgIOEg4SDg4KCg4KChIOCg4OEhISEhIWEg4OEhYSFhIOBgoB9gYKAfXx8e3x8gH19foB+fn1/fnx8fH19fn5/fn+BgYGBgH99fX6BgYB+fn19fX59fX5+f3+AfH2AgYKCg4OGg4SDhoSBgoiHhYSDg4SEhYGFhYWDg4SDhIODgoOCg4F+gYGDg4SCg4OEhIOCg4KEg4ODgoKDgYOCf4KEg4ODgoOAgoWDg4ODhIODhIOBgoSEhYOCgoODg4GEg4GDg4SDg4SEhYSEhIWFhYWEg4ODf32BhIB9fXx8fHx/gX5/f39/fX99e3x9fX19fX5+f4CBgIGBgH59fH6Cf39+fn5+fX1/f39/gICAf4CEhIODhIWDhIOFf36CiouFhISDgoOFgYaGhoOEhISEhIODg4OEgn+BgYODhYSFhIWEg4KEhISFhIODgoSDhYKBhISFhYaEgoCDh4SDg4OFhIWFhIGEg4OHgoOCg4GCgYSDgoODhYODhIWEhYWHh4aHhYSEhYSBf4GDf35+fH5+fX+BgH9+fHx/f358enx9fX19fX5+fn9/gIGBf319fIB/gH5+fn5+f3+AgYGBgYKAgYWFhIOEhIKEg4aAgoWFiomEhISEhYWCh4aGhISEhIWEhISEg4SDgYKDg4OEhIaEhYSDg4SEg3yDhHuBhHd5g4F9hH5+cnWDgoF2foOEgH2BdYF5g39/f36EhIKDg4KBg4SDg4SFg4SFhoSFhn2EeXx+f4N7hYOBhIOAf319fn5+gYOBfXt/fX6Afn18fHx9fX19fH19f4B/gYJ/fX18f4GBgICAgH+BgYGCgYKDg4KChoSEhIWEgYOEhYOEhYOKiIWFhYOFhYSGhoaDhISFhYWEhYWEhIWCgoOEhYWFhoSFhIOEhYWCaICFanx7cXF8gXOGc3R0fYKDdXNxg4ZzcHVyc3SDdnt9dYF/goOBgnZ5hYCDgIR/hYSChYSCaHpyc3N8gHKBg3+Dg32BfX5+fX6Cg4J8f4F9f4B9fXx8fHx9fHx8fn1+gH+BgX99fX2AgYKBgYGBgIGBgYKBgoKCgoSHhIWEhYSBgoSGhoOFg4aIhoaFg4aGh4eGh4OFhYaFg4KFhoSFhYODg4SEhoaGhIaEg4SFhn1xe4FweXZ+g3+CbnlwdXN8dnl5hnKEg3B2eHF2dHR1cnN0dml/gG5yb3R2bnVsd217c26Ah3ptfXJzdnN2bW53bHB5bHV9f399foGAgX2Af32Af4B/fX18fHx9fH1+f32Af4CAfnx/foCBgoCBgICAgYCAgIKDgoKEhYiGhoCChYODhIeGg4WFhYaHh4SDhoeIiYaHhIWGiIeEg4WGhYWEhIOFhIKFhoaFhoWEhoWHdnB0e3BydX+HhYNtdW92b3x1coR5eYd4cXR3bndod3pucHaCcoN+b3p5eW1vbnpvb213fXiGcHF6cHJ0ZoF1fm57eXNveX+Af319gYB/e399fIB+gIB+foCAgYB+fn9/foF/gH9+fYB9f4CBgIB+fn+BgH9+goOCgoSFh4eEfoeEg4OFh4aEhoWFhoaIhISGh4iIhoeEhoaLioWEhoeHhYOFhYWEgoWFhIWGhYWGhYZxdXByc29zenl+hHSIdHV+iHZugnKEhnluanJ/cW1zd3x/dXR8hH54cXV3bnl1enF2eHV6eYRxam95eHBreXN6b3p3dnZwgYB/fn5/f356fn18f31/f359gIGDg4CCg4GBhIKBgIGBgH1/f4F+f35+f4GAfn6BgoCAgYSHhoODhoSEhIaHhoWFhYWHhoiFhYaFh4eFhoSGhomIhYSJi4iGhIaFhYWDhYWEhoaGhoaFg3iLeXKIentwcIWEeIV4eWtzfnl7a3KDh4N6fG16eXl0fYB2bm+AgG90fHV3cXl9fW1+dW+DhYZ6gHJye3x1cG96bHN8bneCgIF+fn99fXp9e3x9fX9/fn1/f4KCf4GDgYGDgYB/gICAfn9+f31/fn1/gH58fYGAfn6Ag4iFhoOFhYWFhoeFhYWFhYeHiIaEhoWHhoaFhIWFhIWFhomKh4WEhoWGhoWGhoSGhoaGhoWGh4eHhoaEhoWGh4iHhYeGhoOHhoWFg4SFhoWGhIaEg4SEhoSEgYODhISFhIWEhYSGg4aHhYaEhIWHhoSEhYaEhX13hYOEhIKBgX1/fnt8e357fHx9f359fH59gIB9f4F/f4GAfn5+gH5+f35+fX99fX5/fHt8f358fH+BiYaFhIaGhoWGhoWFhYWGhoeIhoSGhYaGhYWDhIWGhYSGhoaGhYSGhIWGhoaGhIeGh4eGhYeIiIiIhoSHhYaGiIaFiIeIhYeGhoiFhYaHhYaGhYOChYWGhYWDhYSEhIWEhYWEhYWDhoaGhoWEhoeGhISFhoOFhIKEg4OFg4OCfYB/e3t8fnt8fH1/fnx8fn2Af31/gH5+gH99fXyAfX5+fn5+f3x8fX57fHx/fHt7fn+Ih4SEiIaGhoeGhYWEhoaGhoiHhIWGh4aFhIODhIaFhIeFhoaFhYaEhYaGh4eFh4aJiIaGh4eIiYiFhYiFhoeGh4aHhoeFh4eGh4WFhoeFh4aFgoOFhoaEhIOEhIOEhoSFhYWFhYOGhoWGhYWGhoWEhIWFg4SHhYOCgoWDhIF+gIB8e31+e3x7fX59fHx+fX5+fX9+fX1+fnx9fH98fn58fYGAfHx8fXx8fH56e3t8foiHgoWIh4eGh4aGhISGhoeGiIaEhYSGhoSFh4OEhYSFh4SFhoaFhoSGhoeHhoaHh4mIhoaIh4iKiIWHiIWHh4WHhoeGh4WIiIeHhYaGh4WGhoSBhISFhoWFhISEg4SFhIaGhoWGhIaFhoaFhYaGhYSDhISDg4eDhIGChISDgYCAgHt7fn18fHx9fXx8fH19fH18fn18fX18fHx8fXx+fXt8gX99fH18fnx8fHp6fHx9iIeChoiHhoeGhoaDhYaFhoaGhYOFhIaFhIiJg4GEg4SGhIaGhoaGhIeHiIiHh4eIioiGh4iHiImIhYiHhYeGhoeHh4WHhoiIh4eFh4eHhYaHhIKEg4SGhYeFhISEhISFhoaGhoWFh4WFh4WGhYeFhIOEg4OEh4GDgIKDg4KCgn+Ae31+fXt8fH59fH19fH57fHx7fHx8fXt7e318e358e3x/fX18fX1+fXx6ent7fHyIh4KGhoaGh4aGhYOFhoWFhYWEg4WChoSDiId/enqChYaEhoaFh4aEh4eIiIiHhoiKh4aHh4eIiYeFiIeGiIeGhoeHhYeGiIiHhoWHhoiGhoeDg4SEg4aGh4WFhISEhYaGhoaGhYaHhoaIhoaEhoWDg4ODgoOGgYN+goKDgIOCf398f35+fHx9f318fX18fXt7e3p7fHx8e3t7fnt7fXt6e358fHx8fX5/fXt6fHp8fYmHg4aFhoWGhoWEhIWFhYWFhIOBhYGGhIKEhHyAhn+ChYWGhYWGhYSHh4iIiIaFiYqHhYeGh4eIh4WIhYaHiIaGh4eGh4aIiIeFhoeGh4WFh4OEhoWEhoaHhoWEg4WFhoaGhoaFhoaHhoeHhYOGhYOBg4KAg4WCg36BgYF/g4F/fn5/fX98fH1/fXt9fXx+enl6eXt8fXt7e3t+fHx8fHp7fXx8fHx+fYB8e3t7e3x7iYeEhoSGhIaGhYSFhoWEhIOEgoCDgYWDgYJ/eoSMe4CEhYeGhoaFhIeIh4aHhYWHiYeEh4WGhoiGhYeEhoeIhoaIh4eHhoeIhoSGhoaHhYWHg4SFhIaGhoeFhISDhYWGhoeGhoWGhoaFhoaEg4SFgoGCgYCDg4OCfYGBgH6DgX5/f4B8f3x9fX59e359fH15eXp5e319enp7e318fXx8ent9fHx9fH5+gHx7e3x+fXyIh4WGhYeEhoSFhYWFhYODgYOBgIKBhYJ/gH9/fXx7gYSFhoaEhYSDh4eGhoaFhIaJhoKGhIaGhoWFh4WHiImGhYiHiYeGhoeFhIaFhYeFhIeDhIWEiIaGh4WFhIKFhYaFhoaHhIaGhoaFhoODg4WAgIGAgIOBg4B8gYB+foKAfYB/gXx/fH1+fX57fn18fHl6enl6fX15enp7fHt8e3t6e319fH18f35+fHt7fX59fIiGhYaGhoSFhYSFhYSDgoKAgoGAgICDgX5+foB5en2Ag4OFh4WEg4OHhoOEhYSChYiFgoSDg4WFhYWHh4aIiIaFiIeJh4aFhoWDhoSFh4OEhoSEhYSHhoWGhYaEgoWFhoaGhoaEhYaGhYWFgoKDhH9+gICAgYCDgHuBf31+gn5+gH6Afn99fX59f3t/fXt6eXp6eXp8fXl6ent7enx6e3t7fH19fXyAfn18fH1/fnx7h4WFhoaGhoSFhIWDhYKBgICAgYB+f4KCfX1/f3t/f4KDg4WGhYSDg4aDgYOEgoCFh4WCg4GBg4SEhIaGh4iHhYWIhomHhYSEhIKFg4SGgoOFhISGhIeGhYWFhoOEhYSFhoWGhIOEhYWDhYWBgIODf35/gH9/gIN/fIB9fX+CfYCBfn6Bfn5+fX1/e398e3p5enp5enp8eXp6e3t7fHp7e3t7fX59fYB9fXx8fYB/fXyGg4aGhoaGg4SDhoKFgYGAf3+AgH5/gIJ8fn9/foCAgoKChIWDgoGChIGAg4KBgISFhYKBf4CCg4OEhYWHhoWEhoeFh4WGgoOCgoOCgoWBg4WEhYaEhoaHhoaFgoSEg4SGhYWDhIODhIOFhIB/goJ/fX5/fn5/hH57f3x8gIF9gYB9foN9fn59fX57fnt7enl7enl6ent5enp6e3t8ent8e3t+fn1/gXx9fHx9f4B+gIaEhYWEh4SDg4KGgoOAgYB+fn+AfX9/gnx9f39+fn+BgYKEg4KBgYKCf4CBgoCAgoWEgoB/gIGCgYOFhYeFhISGhoOFg4WBgoGBgoGCg4GChISEhYWGh4eGhYSDg4ODhIaFhIGDgoOChIODgH+AgX59fX5+fH6Dfnx+fHyBgH6Cf35/gnx/fn19fHx8e3t6enp6eXt6enp5eXp6e3x5e317fH5/f4GAfX59fX1/gICAhoSEhYSFgoSCgoSCgoCBgH59fn9+fn6AfX2Af35+foGBgoODgoSHgYF+gICBf3+ChIOBf35/gIJ/goWEhYOCg4WFgoSBg4CBgIGBgYKBgIGEg4OGhYWHh4WEhIWCgoKDhYSCgYGBgYCFg4F/foB/fnx9fn18foN9e358fYF/gIN9fYCBf35/fXx8fH17e3p6enl5e3l6enl6ent7e3p7fXx8f3+BgoB+gH+AgH+AgYDKysrKysrKysrKysrLy8vLy8vLy8vLy8zMzMzNzc3Nzc3Nzc3NzczMzMvLy8vLy8vLy8vLy8vLzMvLy8vLy8vLy8vLy8vMzMzMzM3Nzc7Oz8/Pz9DQ0NHR0dLS0tLS0tLT09PT0tLS0tLS0tPT09TU1NTU09PT09PT09PT09PT09PT09PT09PT09PT09PT09PS0tLS0tLS0tLS0tPT09PT1NTV1dXV1dXV1dXV1dXV1dXV1NTU1NTT09PT09PT09PT09TU09PU1NTU1NTU1NTU09PT09PS0tLS0tPT09TU1NTU1NPT09LS0tLS0tLR0dHR0dPHhnNlYFtLWWdVTUZIQD03Nzg5Nzw8PDo8Oz42Oj04PDs6OTg3ODs7Oj87PTs8PD47P0E/QkJBQ0RFREE+PTw7QENDQUBDQ0FBR0hHSUtSwtXS09PT09TU1NTU1NTU1NTU1NXV1dXV1dXV1dXVysrKysrKysrKysrKy8vLy8vLy8vLy8vMzMzMzMzNzc3Nzc3Nzc3MzMzMy8vLy8vLy8vLy8vLzMzMy8vLy8vLy8vLy8vLzMzMzc3Nzc3Oz8/P0NDQ0NHR0tLS0tLS09PT09PT09PT09PS09PT09TU1NTU1NTU09PT09PT09PT09PT09PT1NTU1NTU1NTT09PT09LS0tLS0tLT09PT09PU1NTU1dXV1dXV1dXV1dXV1dXV1dXV1NTU1NPT09PT09PT09PU1NPT09TU1NTU1NTU1NPT09PS0tLS0tPT09PU1NTU1NTU09PT09PS0tLS0tLR0dHSzIxyZ2BcTVllUktHSz87Mzc4Ozg5Pj05PDpBOjs9Nzs8PDo6Nzg6Oz0/Oz88PTw/Pj9BPUFBPkNDREJAQT46Oz9DREFDRERCQklHSEhJTr7V0tPT09TU1NTU1NTU1NTU1NXV1dXV1dXV1dXV1crKy8vKysrKysrKy8vLy8vLy8vLy8vLy8zMzMzMzM3Nzc3Nzc3NzMzMzMzMy8vLy8vMzMzMzMzMzMzLy8zMzMzLy8vLzMzMzc3Nzc3Ozs/P0NDQ0NDR0dLS0tLS09PT09PT09PU09PT09PT09TU1NXV1dTU1NTT09PU1NPT09PT09PT1NTU1NTU1NTU1NPT09PS0tLS0tLS0tPT09PT1NTV1dXV1dXV1dXV1dXV1tbV1dXV1dTU1NTT09PT09PT09PU1NTU09TU1NTU1NTU1NTT09PT0tLS0tLT09PU1NTU1NTU1NTU09PT09PT0tLS0tHR0s+Sd2hfXk9XZ01LRks9ODc2NTk5OTw+OT88RDo7PDc5PD07OTc5Ojw9QDs+PT47PD48PT5BQD5EQ0NDP0E9Ojs9QkNFQ0NEQT9FSEpJSky61dPT09TU1NTU1NTU1NTV1dXV1dXV1dXV1dXV1dXLy8vLy8vLy8rKysvLy8vLy8vLy8zLy8vMzMzMzMzNzc3Nzc3Nzc3MzMzMzMzMzMzMzMzMzMzMzczMzMzMzMzMzMzMzMzMzc3Nzc3Ozs/Pz9DQ0NDQ0dHS0tPT09PT09PT09TU1NTT1NTU1NTU1NTV1dXU1NTU1NPU1NTU09PT09TU1NTU1dTU1NTV1dTU09PT09LS0tLS0tLS09PT09TU1dXV1dbW1dXV1dXV1tbW1tXV1dXV1NTU1NTT09PT09PT1NTU1NTU1NTU1NTU1NTU09PT09LS0tLT09PU1NTU1dXV1dTU1NTT09PT09PT0tLS0dHRmn5nYWJOVWpKSElLPzw6OTM3Njc3PTs+OT06Ojo4ODo7Ozg4Ojs7PD46PT09Ojw/PD0/QkA/Q0RDRD5APT08QENEQ0JEQkQ+REhJSUtMttfT09TU1NTU1NXV1dXV1dXV1dXV1dXV1dXV1dXVy8vLy8vLy8vLy8vLy8vLy8vLy8zMzMzMzMzMzMzNzc3Nzc3Nzc3Nzc3MzMzMzMzMzMzMzMzNzc3NzczMzMzMzMzMzMzMzc3Nzc3Ozs7Pz8/Q0NDQ0NHS0tLT09PT09PT1NTU1NTU1NTU1NTU1NTV1dXV1NTU1NPT1NTU1NTU1NTU1NTU1dXV1NXV1dXV1NTU09PT09PS0tLT09PT09PU1NXV1dbW1tXV1dbW1tbW1tbW1dXV1dXU1NTU1NTU1NTU1NTU1NTU1NTU1NXU1NTU1NTT09PT09PT09PU1NTU1dXV1dXV1dTU1NTU09PT09PS0tLR0p+DaV9kU1hsSEhIS0A9Nzg0NzY6Oj87RDw8OTw8OTg6OTo6Ojs8Ojo7OT49Pjk9QDs/QUFCP0JCQUM9Pz8+PEBCRUNDQkBBO0ZJR01MSbLY09TU1NTU1NXV1dXV1dXV1dXW1tbW1tbV1dXW1svLy8vLy8vLy8vLy8vLy8vLy8vMzMzMzMzMzM3Nzc3Nzc3Nzc3Ozc3NzczMzMzMzMzMzc3Nzc3Nzc3Nzc3Nzc3Nzc3Mzc3Nzs7Ozs7Pz8/P0NDQ0NHS0tLS09PT09PT09TU1NTU1NTU1NTU1NTV1NXV1dTU1NTU1NTU1NTU1NTV1NTU1dXV1dXV1dXV1dTU1NTU1NPT09PT09PT09PU1NXV1dbW1tbW1tbW1tbW1tbW1tbV1dXV1dTU1NTU1NTU1NTU1NTV1NTU1NXV1dXU1NTU1NTT09PT09PT1NTU1dXV1dXV1dXU1NTU1NTT09PT09LS0tSjiGxfZlJWakdIR0lBPjM2Njo7PDhDPEJBPjxBPDg5Ojw6Ojw8PDk8PTo7PD09PD89QD9AQT9AQUBCPD4+PzxCQ0NDRkBBQT1ISklOTUeu2NPU1NTV1dXV1dXV1dXV1dbW1tbW1tbW1tbW1tbMzMvLy8vLy8vLy8vLy8vLy8vMzMzNzc3Nzc3Nzc3Nzc3Nzc3Nzs7Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Ozs3Nzc3Nzc3Nzc3Nzs7Ozs7Oz8/P0NDQ0NHR0dLS0tPT09PT09TU1NTU1NTU1NTU1NTU1NTV1dXV1dTU1NTU1NTU1NTU1dXV1dXV1dXU1dTU1NXU1NTU1NTT0tPU1NTU1NTU1NTV1dbW1tbW1tbW1tbW1tbX19bW1tXV1dXV1dXV1dXV1dTU1NTU1dXV1dXV1dXU1NTU1NTU09PT09PT1NTU1NXV1dXV1dXV1dXV1NTU1NPT09PT0tLWroprY2VSWGhMSkdJQjg0OTQ6Ozo5QDk/Q0VAPDw5OTk9Oj07PDw6PTw7OTw9Ozs/PUA9PT5AQD9CQT5APD05QERDQkFBQj48SEpLTU5IqNnU1NXV1dXV1dXV1dXW1tbW1tbW1tbW1tbW1tbWzMzLy8vLy8vLy8vLy8vLy8rKy8vLzMzMzMzMzMzMzM3Nzc3Nzc7Ozs3Nzc3Nzc/Pz8/Pz8/Pz8/Pz9DQ0dHR0dHR0dHR0dHS0tHV2djY2NnZ2dra2tvb29vZ2dnZ2dna2tra2tra2tjW19fX19fX19jX19fX19vb29vb29vb29vb29vb3Nzc29zb29vb3Nvb29va09LT09PT09TU1NTU1NXW1dXV1dXV1dXV1dXW1tbX1tbW1tbV1dXV1dXV1dXV1dTU1dXV1dXV1dXU1NTU1NTU1NTU09PU1NTU1NXV1dXW1dXV1dXV1dTU1NTT09PT09PS1bqKa2hoUlhlSUlMT0A5OTo0O0E8Nz05QUM+QD89ODo6Ozk9Oz4/Ojs8PDo7PDo7Pj1APT8/P0FAQUE/QTw8Oz5BRENBREA9PElJSk1ORqPa09TV1dXV1dXV1dXW1tbW1tbW1tbW1tbW1tbW1szMz9DPz8/Pz8/Pz8/Pz8/W3t3d3t7e3t7e3t7e3t3S0NDQ0NDQ0NDQ0NDQ0ci5ubm5ubm5ubm5ubq6t6WkpKSkpKSkpKSkpKSnhmBjY2NjY2NjY2NkZGRlhIuKioqKioqKioqKioemuri4uLi4uLi4uLi4ubSPjIyMjIyMjIyMjIyMjYiBgoGBgYGBgYGBgYF/j9PS0tLS0tLT09PS09PS3ePi4uLi4uLi4uLj4+Pi2NfX1tbW1tbW1tbV1dXV1dXV1dXV1dbW1dXV1dXV1dTU1NTU1NTU1NTV1dXV1dXW1dXV1dXV1dXV1NTU1NTT09PT09XDkXFrak5TYkxMVk48Ojo3Nz5DPzg+Oj8/QTw/QDc7Ojs7PTs+Pjo7PD48Oz07PT8+QDw/Pz1AQEBBPj88PjxAQUVCQkZAQD9HSEpLT0ae2tXV1dXV1dXW1tbW1tbW1tbW1tbW19fX19fX19fMzNDS0tLS0tLS0tLS0tLR3uzr6+rq6urq6urq6uvp1dLS0tLS0tLS0tLS0tTEqaqqqqqqqqqqqqqqq6aGhIWFhYWFhYWFhYWFik4MEhISEhISEhISEhIRE0pUU1NTU1NTU1NTU1NPg6ejo6Ojo6Ojo6Ojo6ScWlVWVlZWVlZWVlZWVldOQ0NDQ0NERENDQ0REQFzS09LS0tLS0tLS0tLS0ODs6+vr6+vr6+vr6+vr6dnX19fX1tbW1tbW1tbW1dXV1dXV1dbW1tbV1dXV1dXV1dXV1dTU1NTV1dXV1dXW1tXV1dXV1dXV1dXU1NTU1NTU1NPUy5h2bGlKTl9NUlVNPjw8Nzs/Qz42Ojc+Pjs9Qj84PDk9Ozw6PD07PTs9Ozs9PD0+PT07QT08QUBBQT08Pzw7QEJDQURFPUFAQ0ZLS09GmNzV1dXV1dbW1tbW1tbW1tbW1tfX19fX19fX19fXzMzR0tLS0tLS0tLS0tLS0d3q6enp6enp6enq6unq6dXS0tLS0tLS0tLS0tLUxaqrq6urq6urq6urq6yoiIeHh4eHh4eHh4eHh41SEhgYGBgYGBgYGBgYFxpOWVdXV1dXV1dXV1dXU4WopKSkpKSkpKSkpKSlnl9ZWlpaWlpaWlpaWlpbU0hISEhISEhISEhISERg0dPS0tLS0tLS0tLS0tDf6+rq6urq6urq6urq6unZ19jX19fX19fX1tbW1tbW1tbW1tbW1tbW1tbV1dXV1dXV1dXV1dXV1dXV1dXW1tbW1tXV1dXV1dXV1dXU1NTU1NTU1NGcenFpSlRdT1JVTkQ+Pzs/QEA4Ojs4PDs7PD86Ozs4Ozk5Ozw7Ojw5Ozs8Ozo9PT0+PUE/Pj8/Pj08PT88PEFBQ0FERTw+QEVGSktNRpPc1dXV1tbW1tbW1tbW1tbW1tfX19fX19fX19fX183N0NLS0tLS0tLS0dHR0dDc6Ofn5+fn5+fn5+fn5+bV0dLS0tLS0tLS0tLS08Wtrq6urq6urq6urq6vq46NjY2NjY2NjY2NjY2SXSInJycnJycoKCgoKCcpWmNiYWJhYmJiYmJiYl6MrKmpqampqampqampqqNoZGVlZWVlZWVlZGRlZV1TVFRUVFRVVFRUVFVRa9LT0tLS0tLS0tLS0tLS3unp6enp6enp6enp6enn2djY2NjY19fX19fX19fX19fX19bW1tfX19fW1tbW1tbV1dXV1dXV1dXV1dXV1tbW1tbW1tbW1tbV1dXV1dXU1NTU1NTWo3txZElbYE5OVU9AQT89REI+Oz06OTs6PT07PDs6OTg5OTs8Ozw8Ojo7PDo7QD08PTxAQTxBQTs7PEA/PD1CP0RDQ0U8PkJERkpMTEWN3NXV1tbW1tbW1tbW1tbX19fX19fX19fY2NjY2NjNzc7Ozs7Ozs7Ozc3Nzc3Nzs/Pz8/Pz8/Pz9DQ0NDQz87Ozs7Ozs/Ozs7Oz87NzMzMzMzMzMzMzMzMzMvJycrKysrKysrKysrKysfCw8PExMTExcXFxsbGxsvMy8zLzMzNzMzMzMzLz9HR0tLS0tLS0tLS0tLRzczMzMzMzMzMzMzMzMzMy8vLy8vLy8vLysvMy83U1NTV1dXV1dXW1dbW1tjY2NnZ2dnZ2dnZ2dnZ2djY2NjY2NjY2NjY2NfX19fX19fX1tfX19fX19bW1tbW1tbW1tXV1dXV1dXV1dbV1dbW1tbW1tbW1tXV1dXV1dTU1NTU169/cF5GXmJQUVdOR0ZDQ0lBPz07PDo8OEBCPD04Ojo4OTg7Pzs8PDs7PDw8PD87PD46Pj44PkI8Pj1BPjw+QkBERUNAPD5APkNJSUtEh9zV1tbW1tbW1tbW1tbX19fX19fX19jY2NjY2NjYzs3Nzc3Nzc3Nzc3NzdHNzc3NzczP09LSzs3P0s7Ozs7Ozs7Q1NLPz8/R08/P0tTV1NDPz8/Pz8/Pz8/Pz8/P0NDQ0NDR0dHR0dHS09PU1NTU1dXV1tbW1tfW1tbX1tfX19fX19fX19bW1tbW1tbW1tbW1tbW1tfX1tfX19fX1tbW1tbW1tfX19fX19fX19fX2NjX1tbW1tbX19fX19fX19fX19jY2NjY2NjY2NnZ2dnZ2dnZ2djY2NjY2NjY2NjY2NjX19fX19jY19fX1tbW1tbW1tbW1tbW1tbW1dbW1dbW1tbW1tbW1tbW1tXV1dXV1NTV1di4gm9XSl9jUlFaS0hBQTxCPT07Oj4+PD4/PT0/Nzk6OTk3OD48PD47Ozw7PDs/PT0+OTs7OT0+P0A+QD07OkI/QkNCPz0+QD5CRUdKQoDc1tbW1tbW1tbW19fX19fX19fX2NjY2NjY2NjY2M7Ozs7Ozs7Nzc3Nzsqfys3Nzc3QuYOEi8fTwJrLz87Ozs7Pypal0c/SuJ/R0ZyChIrGz87Ozs7Ozs7Ozs7Oz8/Pz8/P0NDQ0NDQ0NDR0dHR0tLT09PU1NTU1NTV1dXV1dXV1dXV1dXV1dXV1dXW1tbV1dXV1dbW1tbV1dXV1dXV1NTU1NXV1dXV1dXV1dXW1tbW1tbW1tbX19fX19fX19fY2NjY2NjY2NjY2NnZ2dnZ2dnZ2dnZ2dnY2NjY2NjY2NjY2NjY2NjY2NfX19fX1tbW1tbW1tbW1tbW1tXV1tbW1tbW1tbW1tbW1tbW1dXV1dXV1dXYwIBuVU9gY1dZW0xMQ0A9PTs9Ojw+Qj5CQ0A8Ojg5ODo6Ojc7Pz4/PDw7PDo5Pzw8PTg5PD9BPj09PUFAPTtBQkBCQz47QD9BQUlHSkF629bW1tbW1tbX19fX19fX19jY2NjY2NnZ2djY2dnOzs7Ozs7Ozs7OzdKpj63Rzs7Ozpu3tqSiwJOerNPOzs7Pz5yqna3VspeYuLqVuLmvodLOzs7Ozs7Ozs7Pz8/Pz8/Pz9DQ0NHR0dHR0dHS0tLT09TU1NTU1dXV1dXV1dXV1dXV1dXV1dXV1dXW1tbW1tXV1dbW1tbW1tXV1dXV1dXU1dXV1dXV1dXW1tbW1tbW1tbW1tfX19fX19jX19fY2NjY2NjY2djY2dnZ2dnZ2dnZ2dnZ2dnZ2djY2NjY2NjY2dnY2NjZ2NjY19fX19fX19bW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tXV1dXV1dXV18h/b1pTYWVeXVxPSkQ9QD8+Ozc6Pjk/RD9BOTg3ODk7Ozw4OT89PTw9PD47OkE7OTs5OzxDQDw7PT5AQT49QkQ/QkM9PT8+Pz5ISUg/ddrW1tbX19fX19fX19fX2NjY2NjZ2dnZ2dnZ2dnZzs7Ozs7Ozs7Ozs/Inrym0tDQzsqgl36Cw6abr6fUz8/P0MuUiJqdzJ2jqLHRkn1+r7DSzs7Ozs7Ozs7Oz8/Pz8/Pz8/Q0NDR0dHR0dLS0tPT09TU1dXV1dXV1dXV1dXV1dbV1dXV1dXV1tbW1tbW1tbV1dXV1dXW1tbV1dXV1dXV1dXV1dXW1tbW1tbW1tbW1tbW1tfX19fX19jY2NjY2NjY2NjY2NjZ2dnZ2dna2dnZ2dnZ2dnZ2dnZ2djY2NjY2NnZ2dnZ2dnY2NjY2NfX19fX19fX19bW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1dbV1dXV1dfNiHNdWGloXl9gT0lGOkFAPj88PDo2P0JAQjo2NDc6Ozo8Ojk+PD49PTs/PTxBPjw8Ojw8PTw6PEA9QEI+PkFCPUNDPT0+Oz9BRUtIQHDZ1tbX19fX19fX19fY2NjY2NjZ2dnZ2dnZ2dnZ2c/Pz8/Pz87Ozs7SrKWnqdXAvNLHnY+ey9PJipmq1M/Pz8/RvciZmcLFiJu21dPNnp7D0M/Pz8/Pz8/Pz8/Pz8/Pz8/Q0NDQ0dHS0tLS09PT1NTU1dXV1dXV1dbW1tbW1dbW1tbW1tbV1tbW1tbW1tbW1dXV1dXV1dXW1dXV1dXV1dXV1dXW1tbW1tbW1tfX19fX19fX19fX19jY2NjY2NjY2NjY2NnZ2dnZ2dnZ2tnZ2dnZ2dnZ2dnZ2dnZ2dnY2dnZ2dnZ2dnZ2dnY2NjY19fX19fX19fX19bW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbV1dXW0JB1W1tqaWFeXVNOSTxDQEE+QD46OEZBP0M6NzQ5Ojo5Ozs4Oz0/Pj49QT08P0A9Pjw8PDw8Oj1AQD8/PT5CQD9AQkA8QD0+QUVLRz9r19fX19fX19fX2NjY2NjY2NjZ2dnZ2dnZ2dnZ2tnPz8/Pz8/Pz8/QzJ2Nl6zQmpfKxZ6ynpbN1q2ZqtTPz8/Pz9KXlJ/L16WbtdTTwKCg0M/Q0M/Pz8/Pz8/Pz8/Pz8/P0NDQ0dHS0tLT09PT1NTU1NXV1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbV1dXV1dXV1dXV1dXV1dXV1dXW1tbW1tbW19fX19fX19fX19fY19fY2NjY2NjY2NjY2NjZ2dnZ2dnZ2drZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2djY2NjY2NfX19fX19fW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1dXV1tKUcl5ea2tqZV1PTEc/RENDQDo9OzxCPD49OTY0Ojk5Ojo5Nzs/QDs8PUA8PEE+PD07PTw/PDo8Q0A+PTs9QD5CPkBBPkA9QD9GSUQ/ZtXX19fX19fY2NjY2NjY2NnZ2dna2tra2tra2traz8/Pz8/Pz8/P07GigJuvyaCjv8qcpYynrdiqmarUz8/Pz9Ozm8SY1NWimrXU1K+iqdTQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NHR0tLT09PT1NTU1NXV1dbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1dXV1dXV1dbW1tXW1tbW1tbV1tbW1tbX19fX19fX19fX19fY2NjY2NjY2NjY2NjY2NjY2dnZ2dnZ2dna2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2djZ2djY2NjY2NfX19fX19bW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbSk3BgXnBoZmVaUUhHQkVDQEA3Ojo8Pjo8OTc2NTk6Njo8Ozc8QEA8Ojo9Oj0/Pj08OUA8PDo6OT9APj08PUBBQz9APz5BOz9ARkpCP2LS2NfX2NjY2NjY2NjY2dnZ2dnZ2tra29vb29vb28/Pz8/Pz8/P0M6fkGyclteqo9PSrqa1mJ/Vqpmq1M/Q0NDRzo2QnsLXopm11NOjobrU0dHR0NDQ0dHQ0NDQ0NDQ0NDQ0NHR0tLT09PT1NTU1dXV1dbW1tbX19bW1tbW1tbW1tbX1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tfW1tfX19jY2NfX19fX2NjY2NjY2NjY2NnZ2dnZ2dnZ2dnZ2dna2tnZ2dnZ2dnZ2dnZ2dnZ2dnZ2djY2dnZ2dnZ2dnZ2dnZ2NjY2NjY2NjX19fX1tbW1tbW1tbW1tbW1tbX19fX19fW1tbW1tbX0pNuYFxxZGdkWlVKQENGQ0FCODs/PD07PDw4NTU4OTY4Ozo5PDo+Pzw9PTk8Pz49Ojo+OTw6Ojg+Pzw9PTw+QEFDQT48PDpCRERKRkJd0NnX19jY2NjY2NjY2dnZ2dna2trb29vb29vb29vPz8/Pz8/Pz9G9n8O31pfA09HQ0srSzZeb1KqZq9XRz9DQ0cvaqJmv2qKattTOnp/J0tHR0dHR0dHR0dHR0NDR0dHR0dHR0tLT09PU1NTV1dXV1tbW1tfX19fX19bW1tbW1tfX19fW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW19fX19fY2NjY2NjY2NjY2NjY2djZ2dnZ2dnZ2dnZ2dnZ2drZ2tnZ2dnZ2dnZ2dnZ2dnZ2djY2NjY2NjZ2dnZ2dnZ2dnZ2dnY2NjY2NjY2NfX19fX19fX19fW1tfX1tbX19fX19fX19fX19bW19GRbF1cb2doYl1PRkBISUdFQDw8Pj48PT48NzU2Ojk2OTs6Ojs4QD86PDw5PD49Ozs6Pzk/Ojs5PT49Pjw7PTxAQ0I/Pz47Q0ZGR0hEWc3a2NjY2NjZ2dnZ2dnZ2dna2trb29vb29vb29vb0NDQz8/Pz8/Pz5V+e6WS1KKa08ySl6ObodirmavV0pem1cmOpZqetNmjmrXXw5+h0tHR0dHR0dHR0dHR0dHR0dHR0tLS0tLS09PU1NTV1dXV1tbW19fX19fX19fX19fX19fX19fX1tbW1tbW1tbW1tbX19bW1tbW1tbW1tbW1tbW1tbW1tbW1tfX19fY2NjY2NjY2NjY2NjY2dnZ2dnZ2dnZ2dnZ2dnZ2tra2tra2tnZ2dnZ2dnZ2dnZ2djY2NjY2NjZ2dnZ2tnZ2dnZ2dnZ2djY2NjY2NjY2NjX19fX19fX19fX19fX19fX19fX19fX19fX1tfPjGRWXnBrXGBgTkVITUlJT0M+OkI9PUBCOzU1Nzw6Nzo7Ojo7OT09OTo6OT0+Pz07OT47PDo8Ozk+PD47PD0+QENCPz5BPEFDR0ZGRVXJ29jY2NnZ2dnZ2dnZ2dra2tvb29vb29zc3Nzc3NDQ0NDQ0M/Pz9DR1aeZrcmjqL7KnbGdo7XZqZup2Lirocq7oaannMvXopu02bKkptbS0tLS0tLS0tLS0tLR0dHS0tLT0tPT09PU1NTV1dbW1tbX19fX19fX19fX19fX19fX19fX19bW1tbW1tfX19fX19fW1tbW1tbW1tbX19fW1tbW1tbW1tbX19fX2NjY2NjY2NnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dra2tra2tra2trZ2dnZ2dnZ2dnZ2djY2NjY2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnY2dnY2NjY2NjX19fX19fX19fX19fX19fY2NfX19fX19fYzYZdV2JvZE9dVEtIRlNRS0xAPj1EPD9DRj01NTc7OTY6Ozo8PTo7Pzo6OTg6PT0/Pjs/Oz49Ojs5Pjs9PD0+QURCQD8+PzxAQUVHRURSxdvY2dnZ2dnZ2dnZ2tra2tvb29vb3Nzc3Nzc3NzQ0NDQ0NDQ0NDQ0NO5gL3Tm5bP1LWLkZ/T1LyBu9TOlKDT056QjbbW1bKExta5g7/V0tLS0tLS0tLS0tLS0tLS0tLT09PT09PU1NXV1dbW1tfX19fX19fY2NjY19fX19fX19fX19fX19fW1tbX19fX19fW1tbW1tbW1tbW19fX1tbW1tbW1tbX19fX19jY2NjY2NnZ2dnZ2dnZ2dnZ2tnZ2tra2tra2tra29ra2tra2tnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2NjY2NjX19fX19fX19fY2NjY2NjY2NjY2NfX2ct+WlVqaltMX01KTEpVTEZCPD0/R0ZIS0g9NjU3Ojk3OTo7Ojw9OT45OTo4Oz0+PkE+PTk8PDo9Pj46PTk5Oj9FQUA+PT8/QkBHRURFUMHc2dnZ2dnZ2dna2trb29vb29vb3Nzc3Nzc3dzc0NDQ0NDQ0NDQ0NDQ0cHR0crI0tDUxLjS0tHSwtLQ08fM0tHSusTV0tLRxNXR0cLT0tLS0tLS09PT09PT09LS0tPT09PU1NTU1NXV1dbW1tfX19fX19fX2NjY2NjX19fX2NfX19fX19fX19fX19fX19fX1tbW1tbW1tbW1tfX1tbW1tbW1tbW19fX19fY2NjY2NjY2dnZ2dnZ2dnZ2dra2tra2tra2tra29va2tra2tra2dnZ2dna2tnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dna2tnZ2dnZ2dnZ2djY2NjX19fX19fY2NjY2NjY2NjY2NjY19rHd1xSZ2laTlpOTFBRV0VKPz8+PkFFTExBPjc3NTs4ODk5Ojs8Pjw+ODo6OTs+P0A9Pj46NTo6Oz0/Ojs5Ojw+QkJAPz8/P0FCR0RDRE683dnZ2dnZ2dna2tvb29vb29vb3Nzc3Nzc3d3d3dDR0dDQ0NDQ0NDQ0NDS0NDR0dDQ0dPU0dHR0dPR0dHS0tHR0tXU0tLS09XT09PV0tLS0tPT09PT09PT09PT09PT09PU1NTU1dXV1dbW1tfX19fX2NjY2NjY2NjY2NfX19jY19fX19fX19fX19fX19fX19fX1tbW1tbW1tbX19bW1tbW1tbW1tfX19fX2NjY2NjY2NnZ2dna2tra2tra2tra2tra2tra2tvb2tra2tra2trZ2tra2tra2tra2tra2tnZ2dnZ2dnZ2dnZ2trZ2tra29ra2trZ2dnZ2dnZ2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjbwXNYVWlrU0xSTlBSWVRGSTw+Qz9BQkVLPj43ODY5Njc4OTk7Oz0/QDw9ODk7Ozs/Pjw8OTU6PT47OTk7PD8/P0JCQT1BPUBBQkZCQkJLtd7Z2dra2tra2tvb29vb29vc3Nzc3Nzd3d3d3d3R0dHR0dHR0dHR0dDQ0NDQ0NDQ0dHR0dHR0dHR0dHR0dHS0tLS0tLS0tPT09PT09PT09PT09PT09TU1NPT1NTU1NTU1NXV1dXV1dXW1tbX19fX2NjY2NjY2NjY2NjY19fY2NjX19fX19fX19fX19fX19fX19fX19fW1tbX19fX1tbW1tbW1tbX19fX19jY2NjY2NnZ2dna2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tnZ2dnZ2dnZ2NjY2NjY2NnZ2dnZ2dnZ2NjY2NjY3LxvVFRsbExLUkpUUlVLRkQ6PkdEREFERjw/ODk6OTY5OTo3PD07PkA9PTc5Ojs5Pjs5OTY2Oj1AQT47PDk6Pj9DQT4/Qj0+QkNFQkFCSrDe2dra2tvb29vb29vb29vc3Nzc3Nzd3d3d3d3d0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0tLS0tLS0tLS0tLS0tLS0tPT09PT09PT09PT09PT1NTU1NTU1NTU1NTU1dXV1dXV1tbW1tbW19fX19jY2NjY2NjY2NjY2NjY2NjY2NjY19fX19fX19fX19fX19fX19fX19fX19fX19fW1tbW1tfW19fX19jY2NjY2NjZ2dnZ2dra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2trZ2dnZ2dnZ2djZ2dnZ2dnZ2dnZ2dnZ2dnY2Ny2a1NbcGtLVVdSXFFXSEQ+PEJKRT1ISj89PDc4ODo1OTg5Njs+PD1APDw1OTk8Oj87OTk0ODw9PUFBPD47Ojw+QD89PkE9PUNGR0I/Qkmq39ra29vb29vb29vb3Nzc3Nzc3N3d3d3d3d3d3dHR0dHR0dHR0dHR0dHR0dHR0dHS0M/U0M7P0tLT0tLS0tLS0tLS0tPT09TU1NTU1NPU1NTU1NTU1NTU1NTU1NTV1dXV1dXV1dbW1tbW19fX19fY2NjY2NjY2NjY2NjY2NjY2NjY2NjX19fX19fX19jY2NfX19fX19fX19fX19fX19fX19fX19fX19jY2NjY2NjY2dnZ2dra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tvb29va2tra2tra2tra2tra2tra2tnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dndsGRTYXJfT1pUV19RUkdCPUVJTEFBTEQ/Pzs5ODg5Mzg2ODY5Pj0+Pz06Njo7Pjs9PTo5Njg6PTtAQDxAPz0/P0I+PD48PEJFSElCPkNJpODa29vb29vb3Nzc3Nzc3Nzc3N3d3d3d3d3d3t7S0tLS0tLS0tLS0dHR0dHR0dPT0bm7zLqbnLrQyNPT0tLS09PT09PT09PU1NTU1NTU1NTU1NTU1dXV1dXV1dXV1dXV1dbW1tbW1tbX19fX19fY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjX19fX19fX19fX19fX19fX19fX19jY2NjY2NjY2NjZ2dra2tra2tra2tra2tra2tra2tra2tra29va2tra29va2tvb2tra2tra2tra2tra2trb29vb29va2tra2tra2tra2tra2tra2tra2tnZ2dnZ2trZ2dnZ2dnZ2dnZ2dnZ3qpfVWBuW1VZUVpeT0xHQ0ZNSUZEREo7QUE7PDg4NjQ4Njk4Nzw/QT89Ojc8Pz48Pz87OjY4OD09QEE9QD5BQD1AOjs6Pj1BRUdKQkBDR57h29vb29vc3Nzc3Nzc3Nzc3d3d3d3d3d7e3t7e0tLS0tLS0tLS0tLS0tLS0tO+wMqaoKKViJGeqpOpz9TT09PT09PT09PU1NTU1NTU1NTU1NTV1dXV1dXV1dXV1dXV1tbW1tbW1tbX19fX19fY2NjY2NnZ2dnZ2dnZ2dnZ2djY2djY2NjY2NjY2NjY2NjY2NjY2NjX19fX19fX19fX19fX19fX19fY2NjY2NjY2NjZ2dna2tra2tra2tra2tra2tra2tra29vb29vb29vb29vb29vb29vb29ra2tra2tra2tra2tvb29vb29va29vb29vb29va2tra2tra2tra2tra2tra2trZ2dnZ2dnZ2dnZ2d6iXFVeblheXU5aUFROQ0NMSUlJRkpEPEJBPDs4NzY3OTc3OTk9P0E/PDo5QD88PkI/Ojg3NzY9Pz9APUBBPz88PTs7OD48P0VJSEE/Q0aX4dvb29zc3Nzc3Nzc3N3d3d3d3d3d3t7e3t7e3tPT09PT0tLS0tLS0tLS0tTIlZyum5m1iX2TjIKBhMTV09PT09PT09PU1NTU1dXV1dXV1dXV1dXV1dXV1dXV1tbW1tbW1tbW1tfX19fX19fX2NjY2NjY2dnZ2dnZ2dnZ2dnZ2dnZ2NjY2NjY2NjY2NjY2NjY2NjY2NfX19fX19fX19fX19fX19fX2NjY2NjY2NjY2dnZ2dnZ2dna2tra2tra2tra2tra29vb29vb29vb29vb29vb29vb29vb2tra2tra2tra2tvb29vb29vb2tvb29vb29vb2tra2tra2tra2tra2tra2tra2tra2tra2tnZ2dndmlpYYW5ZYVdPV01QRUJETElNS0ZJRT5CRDk4ODY3OTc1Njk4PT1BPjo4OT4+PD9APzw1Njc2PD4/PjtAQEA/Pj4/Pjs/PkFCRkdCQENIkeLb29zc3Nzc3d3d3d3d3d3d3d7e3t7e3t7f39/U09PT09PT09PT09LS0tLTz6h+kayPko6MhoCIiYSQo8rU09PT09PU1NTU1dXV1dXV1dXV1dXV1dbW1tbW1tbW1tbW1tbW19fX19fX19fX2NjY2NjY2dnZ2dnZ2dnZ2dnZ2dnZ2dnY2NjY2NjY19jY2NjY2NjY2NjY2NjX19fX19fX19fX19fY2NjY2NjY2NjY2NnZ2dnZ2dna2tra2tra2tra2tra29vb29vb29vb29vb29vb29vb29vb29ra2tra2tra2tvb29vb29vb29vb29vb29vb29va2tra2tra2tra2tra29vb29ra2tra2tra2tna3JJaWWNuWlpSVV5QTDxAR05IUklIRT47SEY4OTc1Nzg3NTg5ODs+Pj07ODlBPj1AP0E+NzU5Njs+QUI/P0BAQkI/Pj8+QUBEQUZIQj9FSozi3Nzc3Nzc3d3d3d3d3d3e3t7e3t7f39/f39/f1NTU09PT09PT09PT09PWtaWaiIuQhYCFi4iBg4qLf4bC1tTU1NTU1NTV1dXV1dXV1dXV1dXW1tbW1tbW1tbX19fX19fX19fX2NjY2NjY2NjY2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2djY2NjY2NjY2NjY2NjY2NjY2NjY2NjX19fX19fX19fY2NjY2NjY2NjY2dnZ2dna2dra2tra2tra2tra2tra2tvb29vb29vb29vb29vb29vb29vb29vb29ra2tra2trb29vb29vb29vb29vb29vb29vb29vb2tra2tra2tra29vb29vb29vb29vb2tra29uIWltnalxYTFpfVkg6TEhMSkpDRUVDQExINzo3Njc4ODU4Nzg5PDw7Ozk4QD89Pj8/PDY3PDQ3P0JCQUBAPz8/QT09P0A+QEBGRT09REuI4tzc3Nzd3d3d3d7e3t7e3t7e3t/f39/f39/f39TU1NTU1NPT09PT09PUxZKCg4WGfYGCfXx5foGCg36k29bU1NTU1NTV1dXV1dXV1tbV1tbW1tbW1tfX19fX19fX19fX19fX19jY2NjY2NjZ2dnZ2dnZ2dna2tnZ2dnZ2dnZ2dnY2NnY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjX19fX19fY2NjY2NjY2NjY2dnZ2dna2tra2tra2tra2tra29vb29vb29vb29vc3Nzc3Nvb29vb29vb29vb29vb2tra2tra29vb29zb29zb29vb29vb29vb29vb29vb29va2tvb29vb29vb29vb29vb29vb2tvZgFpebWhaU0ldW1hKRE1ISlNMR0ZBQD9KQjg7NjY5OTc1ODY4Ozo7Ojw5OD09O0A9Ozo2NTw3Oz1CQEFBPD49QEE9PEA/Pz5CREU+PERLg+Lc3d3d3d3d3t7e3t7e3t7f39/f39/f39/f39/V1dTU1NTU1NPT09PT2LKEkKh9g3l2hIh/e3d5gn5+i67A1dTU1NXV1dXV1tbW1tbW1tbW1tbW1tfX19fX19fY2NjY2NjY2NjY2NjY2NjZ2dnZ2dnZ2dna2trZ2dnZ2dnZ2dnY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2dnZ2dnZ2tra2tra2trb2tra2tvb29vb29vb29vc3Nzc3Nzc29vb29vb29vb29vb29va2trb29vb29zc3Nzc3Nvb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vc1nlcWmxmWFJPYFFSQUhHSkZYTEZAQENDSz87Ozc4ODc2NTc2ODo5PDw6PTs/PTs9Pjw7ODg8OT0/QkFCQzw8P0FCPj1BQkNCREVDQDtDTH3h3d3d3d3e3t7e3t7e39/f39/f39/f39/g4ODg1dXV1NXU1NTU1NPU0ruen3WKeXuIgICChYGDcnOAhYOMrNfV1NXV1dXW1tbW1tbW1tbW1tbW19fX19fX2NjY2NjY2NjY2NjZ2dnZ2dnZ2dnY2NnZ2dna2tra2trZ2dnZ2dnZ2djY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2dnZ2dna2tra2tra29vb29ra2trb3Nzc3Nzc29zc3Nzc3Nzc3Nzb29vb29vb29vb29rb29vb29vb29zc3Nzc3Nzc3Nvb29zc3Nzc3Nvb29vb29vb29vb29vc3Nzc3Nzc3Nvb29vb3dByXV9wZVdLUGNPS0JHQ0pIS0ZBPEE9SFBBOjo3Nzg3Njc4Nzw6OD09PD47QD88Pz07Ojs5Ojk8QEJAQkNAPUFAPz1AQkNDQUBAP0A7RU144N3d3d7e3t/f39/f39/f39/f3+Dg4ODg4ODg4NXV1dXV1dXV1NXU18h4i4V8goh6g4SBfoKCc2l0hYuGkJ3U1tXU1dbW1tbW1tbW1tbW19fX19fX19jY2NjY2NjY2NnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dra2tra2tra2dnZ2dnZ2dnY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2dnZ2dna2tra2tra2tra2tvb2tvb3Nzc3Nzc3Nvc3Nzc3Nzc3Nzc29zb29vb29vb29vb29vb29vb29vc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc29vb297KalxjcWVST1heSz9HTElPS0VAPkFCP0lPPjk6NzY7NzY6Ozc7Ojg6PDw+Oz09Oz48Ojs4OTo4OUFCQkFAQDtAQj06PkFCQz8+PT4/PUZOdN/e3t7e3t7f39/f39/f4ODg4ODg4ODg4ODg4OHV1dXV1dXV1dXV1s6dhpl+f5OTin+CgXx9gnNxm4mAgoOJwNnat7TQ19bW1tbX19fX19fX19fX2NjY2NjY2NjY2NjZ2dnZ2dnZ2dnZ2tnZ2dnZ2dra2tra2tra2trZ2dnZ2dnZ2dnZ2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NnZ2dna2tra2tra2tra2tra29vb3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nvb29vb29vb29vb29vb29vc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3NvfwGNaW21gVlBTU0pETEhNSEk8PkFEQ0ZORDw8OTc5OjY4Ozk3PDk4OTw9OzlAPjpBPzw3NTc7ODpAQUVBPz45PUI/Oz1CQkI6Pj07PT5GTnHe3t7e3t/f39/f39/g4ODg4ODg4ODg4OHh4eHh1tbW1tbW1tbV1tjLioCHhYOXjHh7e3lvfYF1a3ebdHZ7eInHxpiMrdjZ19fX19fX19fY2NjY2NjY2NjY2NjY2NjY2dnZ2drZ2dna2tra2tra2tra2tra2tra2tra2dnZ2dnZ2dnZ2dnZ2dnZ2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NnZ2dnZ2dnZ2dna2tra2tra2tra2tra29vb3Nzc3dzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nvb29vb29zb29vb3Nzc3Nzc3Nzd3dzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3d3d3d3d3Nzc3Nzc4LdjV1lrYlJNVVFMSktGS0ZDQD5CQT9FTT4+PTg5OTo3OTo3NT03Nzo+PDs7Qjw5Pz05NjY4PTk6QEJGQD49PEBCREA9QD9DO0A9PD4/Rk9t3N/e3t/f3+Dg4ODg4ODg4ODg4OHh4eHh4eHh4dbW1tbW1tbW1tfVrYZ6d32rn3l4entzdH+Dfm9xe3l6c3t2k4qFgImkzdnY19fX2NjY2NjY2NjY2NjY2NjY2NjY2NnZ2dna2tna2tra2tra2tra2tra2tra2tra2tnZ2dnZ2dnZ2dnZ2dnZ2dnZ2djY2NjY2NjY2NjY2NjY2NjY2NjY2dnZ2dnZ2dnZ2dra2tra2tra2tra29vb29vc3Nzc3N3d3d3c3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc29vb29vc3Nzb3Nzc3Nzc3N3d3d3d3d3d3dzc3Nzc3Nzd3d3c3Nzc3Nzc3N3d3d3d3d3d3d3d3dzc3OGtYVtebGJSTVZMTUdLS0RGQkI7QT08RUxDQT44Ojk6Nzc5NjY6NTs+QDs9Oz89PD89Ojk5Ojw5PEVDRkA/PkBDQkQ9OT0/QT1CPz1APkdPadvf3t/f3+Dg4ODg4ODh4eHh4eHh4eHh4eHi4uLW1tbW1tbW1tfQmH+Qh4N9eoN2e3Vzenl6kKqmd3JyfoeHh4CAfoKEhJHJzNnX19jY2NjY2NjY2NjY2NjY2NjY2NnZ2dnZ2tra2tra2tra2tra29va2tra2tra2tra2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2djZ2dnZ2dnZ2djY2NnZ2dnZ2dnZ2dnZ2tra2tra2tra2tra29vb29vb3Nzc3N3d3d3d3d3d3d3d3d3d3d3c3Nzc3Nzc3Nzb29vb3Nzc3Nzc3Nzc3Nzd3d3d3d3d3d3d3dzc3N3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3NzhpV9UYm1iUE9TSUhHRkpJSUJBPkJCPEVFREA+ODo4Ozc3Ojc4ODY+Pz07PDk9PDo+PTs6Njc7NjpEQUY+Pz8/PkNBPzs9PT47REM/PjxIT2fZ4N/f3+Dg4ODg4eHh4eHh4eHh4eLi4uLi4uLi1tbW1tbW19jYyH52doN+fnR2eIaCenl1d5yhu6GEgoCAfoeKinx/gYaMnKjO2NjY2NjY2NjY2djY2NjZ2djY2NjY2dnZ2dra2tra2trb29rb29rb2tra2tra2tra2tnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dna2tra2tra2tra2tra2trb29vb29zc3Nzc3N3d3d3d3d3d3d3d3d3d3d3d3dzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3e3t7e3t7e3d3d3d3c35pbT2drXFBRUElDT0pLR0xHSkJAP0FHREBBPDg8ODg1ODk3Njc3QEA/Ozw5Pj04PTw8Ojc4PTk/RENGPkE/QkBDPzw6Pj0/PkVEPz07S1Fj1+Hf4ODg4ODh4eHh4eHh4uLi4uLi4uLi4uLj49bW1tbW19XB3LRueHJze3B6eXaFiIR7eH2AgZiljH98fnuRhZaLhoGDgY6Rvd3Z2NjY2NjZ2dnZ2dnZ2dnZ2dnY2dnZ2dna2tra2trb29va2tva2tra2trb29ra2tra2tnZ2dnZ2dnZ2dnZ2dna2trZ2dnZ2dra2tra2tnZ2dnZ2dna2tra2tra2tra2tra2tra2trb29vc3Nzc3Nzc3N3d3d3d3d3d3d3d3d3d3d3d3d3d3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3e3t7e3t7e3t7e3t7e3t7e3t3d3d6NWFdobllQUUtISlNJTUhNSUtBQz9DRkJBRDo6PDg2NDg4NzY2Nj8+Pjo8OTw7Oj09PD05Ozw7RERERT4/PkI+Qj84PT8/Q0NCQEE+O0xUY9Xh3+Dg4OHh4eHh4eLi4uLi4uLi4uLi4uPj4+PW1tbW1teslLZ6eHJvd5V7dHuLgHh1bn6Fg3t/hYhyfH2bnI6JioJ+g32Hk5rH1NjY2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dna2tra2trb29vb29vb29vb2tra2tra2tra2tra2tnZ2dnZ2dnZ2dna2tra2tra2tra2tra2tra2tra2tra2tra2trb2tra2tra2tra2trb29vc3Nzc3Nzc3Nzd3d3d3d3d3d3d3d3d3d3d3d3d3d3c3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3N3d3d3d3d3d3d3d3d3d3d3d3d3e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3d7Zf1lgaGxcUUtHR09LTk5PTURGQkg/Q0hEREA6Ozs4NzU3Nzc4NThAPkA7PDk8Ozw+Ojk7OTk7OUZERUI8QD4/PEBDOz5AP0A/Qj8+OjtKVWPV4eDg4eHh4eHi4uLi4uLi4uLi4uPj4+Pj4+Pj1tbX19vKhYR3cXJubniVhHt4hH95dnB4c3eLkY6CdnN9ioaId3d1d4ODfIiIk8Pb2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dra2trb2tvb29vb29vb29vb29rb2tra2tra2tra2tra2tnZ2dnZ2dna2tra2tra2tra2trb2tra2tra2tra2tra2trb29vb29ra2trb29vb29vb3Nzc3Nzc3Nzd3d3d3d3d3d3d3d3d3d3d3d7e3d3d3d3c3Nzc3Nzc3Nzc3Nzc3Nzc3d3d3d3d3d3d3d3d3d3d3d3d3d7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7f0nVZaGlqVk5KSE1OR01EUElGSD9FPUZMREM+Ozs8OTc3OTY2OTU4Pj4/PTs8QDs9PDo3Ozc5OThHREVCPUE9Qj8+QDw/QUE/QEJAPjs8S1Ri1OLg4eHh4eLi4uLi4uLi4+Pj4+Pj4+Pj4+Pj49fX19fEknuJf29sbnV2foSBg4qGfnVybWVtiIaKjoR7c4OHint4e4OPj4GEioqxztrZ2dnZ2dnZ2dna2tra2tra2tra2trb29vb29zc3Nzb29vb29vb29va2tra2tra2tra2tra2tra2tra2tra2tra2tra2tvb29va2tra2tra2tvb2tvb29vb29vb29vb29vb29vb29zc3Nzc3Nzc3d3d3d3d3d3d3d3d3d3d3t7e3t3d3d3d3d3d3d3d3dzc3Nzc3Nzc3d3d3d3d3d3e3t7e3t7e3t7e3t7e3t7e3t7e3t7f39/f39/f39/f39/f3t7e4clsW2pqalNOR0hOT0VIRk1JSUA7RD5ISUA9PDo6Ojg2ODo3Nzk0OD08PT07ODw8PDw4Njc4OTo6RUJFQT9APEI/Q0M+PkNEQUBAP0A8PUtRYdPj4OHh4uLi4uLi4uPj4+Pj4+Pj4+Pj4+Pj5OTX19fZqXaFfnx3bHB3eXh8jH2KhYB3anN0d3p9bot7fnl6foR/gIGDfnh8foeGlrbT2tnZ2dra2tra2tra2tra2tra2tvb29vb3Nzc3Nzc3Nvb29vb29vb29ra2tra2tra2tra2tra2tra2tra2tra29ra29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb3Nzc3Nzc3Nzc3d3d3d3d3d3d3d3d3d3d3d7e3t7d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3t7e3t7e3t7e3t7e3t7e3t7e3t7e39/f39/f39/f39/f39/f39/e3uO9amFpa2lRTkZNTEtKWE1OR0FAQE9BQz9AOzw4OTk5Njg2NjY4NDs+PD07OTY6Ojk6OTU4OTg5OkJERj8+Pj5AQEBCPzxBQD88Pj9BOT5KT17S4+Hh4eLi4uLi4+Pj4+Pj4+Pj4+Pj4+Tk5OTk19fX2sqKhIB5c29tcXN1d4CUeHaAfHWHhXd1cnWgmXp7d3Z5doR0bWxue3iAmouTu9za2tra2tra2trb29vb29vb29vb29zc3Nzc3Nzc3Nzc3Nzc29vb29vb2tra2tra2tra2tra2tra2tra2tra29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vc3Nzc3Nzc3Nzc3d3d3d3d3d3d3d3d3d3d3d3e3t7e3t3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3t7e3t7e3t7e3t7e3t7e3t7e3t/f39/f39/f39/f39/f39/f39/f397js2lpbmloUFBPTExPUk9LU0Y/RURERD48PDg6ODc5OTU2ODY2NzM6Pjs+PTc6Pjk5OTk2Ojo4NzxDRUc/Pzs/PkA9PkE9Oz0+OUFAQDhBTlFc0OTh4eLi4uLj4+Pj4+Pj4+Pj4+Pk5OTk5OTk5NjY2NjauY6AenZ1bmpveHCBfWt0cnZ3hIV5h4d5lY55eXp1d3pza298gHx2fYh8gLLe2tra2tvb29vb29vb29vc3Nzc3Nzc3Nzc3dzc3Nzc3Nzc3Nzb29vb29rb29vb29ra2tra2tra2tra29va29vb29vb29vb29zc3Nzb29vb29vb29vb29vc3Nvb3Nzc3Nzc3Nzc3Nzc3Nzc3d3d3d3d3t7e3t7e3d7e3t3d3t7e3t7e3t7d3d3d3d3d3d3d3d3d3d3d3d3d3t7e3t7e3t7e3t7f39/f39/f39/f39/f39/f39/f4ODg4ODg4N/f39/f4qpqa2hrZFNQT0ZQVFJOSFJLPkREQ0I7Ozk6Ojg2Nzg1NjY4ODg0Oz88Pzw5PDw3Ozo6Nzo6Nzo9Q0JDPUE+Pzw5PT5BQDs8PDtFQD47Q05TXNDk4eLi4uLj4+Pj4+Pj4+Pj5OTk5OTk5OTk5OTY2NjZ1p5vdntveHh2cG50d3BwdHBzb36Jc3qGhY2EenNtcoB6hn1vg5OBdnx9g4a13drb29vc29vc3Nzc3Nzc3Nzc3Nzc3Nzc3d3d3Nzc3Nzc3Nzc3Nzb29vb29vb29vb29ra2tra2tvb29vb29vb3Nzc3Nzc3Nzc3Nzc3Nzc3Nvb29vb29vc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzd3d3d3d3d3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3d3d3d3d3d7e3t7e3t7e3t7e3t7f39/f39/f39/f39/f39/f39/g4ODg4ODg4ODg4ODg4N/f3+KgbWhma2ZVVlJHUFFOS0xMRUJIRUc9OD08Ojo3Nzg2Nzc2NTY3NDg+PD09Ojg6OD46Ozc4Nzc6Oj5DRDtDQj49OD1AQUM/Pjw+RTw+PUJNUF/S4+Hi4uLj4+Pj4+Pj4+Pk5OTk5OTk5OTk5OTk2NjY3MB2doCCfnp4eHBsdXlya399bHNvdGdoaYB/aWl4c2d+iYl4cIKGe3d9foWKvd3b3Nzc3Nzc3Nzc3Nzc3Nzc3d3c3Nzc3N3d3dzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nvb29vb29vb29vb3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzd3d3d3d3d3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7f39/f39/f39/f39/f39/f4ODg4ODg4ODg4ODg4ODg4ODg4ODflGttZm5mU1NJUFlUTEhGTkZGRUJGPTs+PDs5NzY4NTc5NjQ1NzU4PDs9Pjo6OztAOTs7ODc6OTlAQkE8QUE/Pzk/QEJFQ0FAQEM7Oz1ES01g1uTi4uLi4+Pj4+Pj4+Pk5OTk5OTk5OTk5OTk5NnZ2tmYc3uqhJaCcnR1dn14aGx8d2h4d25rcHR5gIJ3dHyBhIJ9c3CAin94gn95g8je3Nzc3Nzc3Nzc3Nzd3d3d3d3d3d3d3d3d3N3d3dzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nvb29zc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3N3d3d3d3d3d3d3d3d3d3d3d3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e39/f39/f39/f4N/f39/f3+Dg4ODg4ODg4ODg4ODg4ODg4ODg4ODh24tubWdzY1lRTVVbV0hDSUZOS0dCRD8/Qjo7OjY2NzU2NzY0ODc2Ozw7Pj86PDk8Qjg3OTo6Ojk6QUFCQUJDQEE+PT9CQ0NEQUJGOTg9REpOYtjk4uLi4+Pj4+Pj5OTk5OTk5OTk5OTk5OTk5OXZ2drcqHGCtXiRfnNsem6EgXaCfWtoan+DeHZ8dX2FhXRmcHl9d316gIqFe318foC03tzc3Nzc3N3d3d3d3d3d3d3d3d3d3d3d3dzd3d3d3dzc3N3c3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzd3Nzd3d3d3d3d3Nzc3Nzc3Nzc3Nzc3N3d3d3d3d3d3d3d3d3d3d3d3d3d3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e397e3t7e39/f39/f39/f39/g4ODg4ODg4ODg4ODg4ODg4ODg4ODg4eDg4ODg4ODg4tiFb3FrdWFWT1VVXE9ETUY+SkdKRUQ8P0I6PDk4Njg0NTY3NDc2NDk7Ozw7OD47PEE4ODo9OD04Oj09QEBAP0FCP0A+QENCQ0FBRTc2O0RMTmPa5OLi4+Pj4+Pj5OTk5OTk5OTk5OTk5OTk5OXl29ra3Z5sbnNxhY1ybXBuf391hH5rcnZ2enN4gXhzb3VwbWt2fHmFiIB/f392coODsd/c3Nzc3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3Nzd3d3c3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3N3d3d3d3d3d3d3d3d3d3d3d3d3c3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e39/f39/f39/f39/f39/f39/f39/f39/f39/f4ODg4ODg4ODg4ODg4ODg4ODg4OHh4eDg4eHh4eHh4eHh4OLXhW1xb3ZeUldTWlpRSkhDQFFAQkQ8OT9BOjw5NzU3NDU2NjQ3NTY9PDo9PTk+OjxAODo6PDY7OTs+PUJCQjtBQkBDQEBEREM8PUA3OjxFS01l3OPi4uPj4+Pj5OTk5OTk5OTk5OTk5OXl5eXl5dPOxsB+cWxveHt2b3VuanNzbZKGeG50dG5vdIZ/b2twboJ0bXZyfY2DdnF/d3mKgabf3Nzc3d3d3d3d3d3e3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3dzc3d3d3dzc3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3t7e3t7e3t7e3t7e3t/f3t7e3t7f39/f39/f39/f39/f39/f39/f39/f39/f39/f4ODg4ODg4ODg4ODg4ODg4ODg4ODg4eHh4eHh4eHh4eHh4eHh4eHi1oZucG1xYFJZUFdfWUpMTElSP0Q9OTtCRjs6OTc0NTY1NzU0NjY2Pj07Pz45PTk7Pjg9Ozo0ODtAQENCQ0FCRkE/Q0BBQkREOz0+OTs8QkxNZODl4+Pk5OTj4+Tk5OTk5OTk5OTk5eXl5eXl5eW5t7Woc3JscHd6dHd4bXFydXd/hHRyc2xsa3F8bnBudGuBf3GAd32Eg355gHNygYqg2d3c3d3d3d3d3d7e3t3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3e3t7e3t7e3t7d3d3d3t7e3t7e3t7e3t7f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f4ODg4ODg4ODg4ODg4ODg4ODg4OHh4eHh4eHh4eHh4eHh4eHh4eHh49WHcWxqbF5YWlVXYFZWUE9QTD1BOjs8RkE4Ojg3MzY1Njk2NTg1Nz89Oz8+OT04Ozw5PTs7NTo9Q0JCPENDREREQUE/PkJDQzw9Pjg5PENLS2PN0dnh1sjY4+Tk5OTk5OTk5OTk5eXl5eXl5eXltbW2q3J5cm59f3Z1d2hqaGlwb3Zta2tnZWZxdG15gG5teXd2iHhxa2podXV5dHV/wd/c3d3d3d3d3d3e3t7e3d3d3d7d3d3d3d3d3d3d3t7e3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3e3t7e3t7e3t3d3d3d3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f4ODg39/g4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4OHh4eHh4eHh4eHh4eHh4eHi4uHh4ePVhnFwY2lhV1NZV19MUk9STUtAPjg5O0E+ODc5NjQ3Njc6NjY2NDk+Pzo8Pzo/OTo6Nzo9PDk5PEFBPTtBQ0VDRkA+Pj5BRUQ+QEE3OD5GSEpesrW4wbm1u8jg5eXl5OTl5OXl5+fn5+fm5ebm5ra2tbWOfX5weoR1cnZnYmNlbGtyb2ZpbHZtd4Z9hXlsbHd4a3ZwfH14c3V5fHd2h7ng3d3d3d3d3d7e3t7e3t7d3t7e3t7d3d3d3d3d3t7e3t7d3t7e3t7e3t3d3d3d3d3d3d7e3t7e3t7e3t7d3d3d3d3d3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4OHh4eHh4eHh4eLi4uLi4uLi4uLi4eHj1Yd1bl5uY1pUU1hXS1NLSk1SR0E4Ozs+PDk4NzU2NTY2OTY4NjY5Pzw6PT07Pzo7Ozk8PDs5Oj4+Pjs8PUFEQkNBQEBBP0JDPDw9Nzs+REVKXrG1tLW2t7e2y9rJ3uXl3eDi3tXU1tPU4OPg39+2treuh3t/bnmNenJ1bWNobGxtaXR4enF5enqIh4N6aWh9cWRvcXyGgX55e318e4an2t7d3d3d3d7e3t7e3t7e3t7e3t7e3d3d3d3d3t7e3t7e3t7e3t7e3t7e3t3e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t/f39/e3t7e3t7f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4OHh4eHh4eHh4eLi4uLi4uLi4uLi4uHh49aGdmxhb19dV1lcWlJQSEpXTEVHPUA9Ozs9OTY0NjU1NTg2NzY3OD87OT09PDw5OTw6Pjw6OTg+Qjs7Pj5AREBDRUFAQD0/QDw9PTU5PEJHRl2xtbW2uLm5ubq9uMPT0r3BwcC6u7y6u8TMxb/Dt7e3hGl1gX1ndYd5Z3Vxa2t5eHB3fH15bWl3e3h3bml1j4FwbHl4d3d9gXuGgnmAoNze3d3d3t7e3t7e3t7e3t7e3t7e3t3d3d3d3d7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t/f39/f3t7e3t/f39/f39/f39/f39/f39/f39/f39/f39/f39/f4ODg4ODg39/f39/f39/f3+Dg4N/f4ODg4ODg4ODg4ODg4ODg4ODg4ODh4OHh4eHh4eHh4eHh4eHh4eHh4uLi4uLi4uLi4uLi4uLi4ePXhXJrZ3RhW1hYX15TVVVRVUpMRj9JRDs5PTY2NDc3NTc4Nzc3ODk8PDo+PDg8Oj0+OTs8OTs5P0E8PT9DP0FARUJCQTw9Q0A6Pjw1NDlER0dasbW1tre5ubm5ubm3ubm4uLm5urq6urm5urm6u7e3uX9ucHN6b3B/eXNuc3Vsc3Z4cXFwb2tvcX6Bc2mHhIF9dHOHdW11hYmBgHJ2hafd3d3d3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7f39/f3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f4ODg4ODg4ODg39/f3+Dg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4eDg4eHh4eHh4eHh4eHh4eHh4eHh4eHh4uLi4uLi4uLi4uLi4uLi4uHj14lxa2xyW1dXXWBUUVVUUFJPSkNATUE9Ozk2NTM0NjQ2ODc3Nzk6Pjs8Pjs5PDo8PDk8PTw7PT0+PUNEREBDQkE/QD48PkE8OD06NjY6QkpIWLG1tLa2uLm5uLi5uLe3uLi5urq5ubi4uLi6uru3uKx7cnhxf3ZzfnBsbXpyZ29sbW50cHt3d3Jyd3pvhpJ2f3x8enZ5fH9zfYdyda3T393d3d7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e39/f39/f39/f39/e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f4ODg4ODg4ODg4ODg4ODg4ODf3+Dg4ODg4ODg4ODg4ODg4ODg4eHh4eDg4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4uLi4uLi4uLi4uLi4uLi4uLi49eHb2pxalVWV2FbT1FSUE5XSURESUo/Ojk6NzUzNDk1NzY2Nzg4Ojw7PD46PDo6PTw5PDw9Oz09PDs9REdEQ0E8PDw8Pj5AOzg8ODE1OkFGRVautbW1tre4uLm4uLi4uLe4ubq5uLi3t7i4ubq7t7mqcnB4d3x7e4J3aG5xam9qY2lyf21zcn54dHFsanaAeX2AgH91doB1a4qLgHaR1d/d3d7e39/f3t/f3t7e3t7e3t7e3t7e3t7e3t7e39/f39/f39/f39/f4N/e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t/f39/f39/f39/f39/f39/f39/f39/f3+Dg4ODg4ODf4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHi4uLi4uLi4uLi4uLi4uLi4uLi4uPYhm1sdGVWUFxnWE1YU1JRWUVDS1BOOzk4ODc1NTM5NTY2NzY4Nzk+OT0+OTw5OTw7Njg5OTo8QEA9PkBGQEJCQDo+PEE9Pzs7OzYxNjxCR0RQqLa1tba2tre4t7i4uLi4uLm6ubi4t7e3t7e5ure2tIlyd3h9iXxwem99c2hqbGdnbHRscXd0cWx2c3Fxd3FyfHl4g3Z7d2mLkYp9kM7f3d7e3tvY2drZ297f39/e3+De39/f3Nvc3N3e3uDg3+Dg4ODf3t7e39jS397f397e3t/f3t7f3t/f3t7e3t7e3t7e3t7e3t/f39/f39/f39/f39/f39/f39/f4ODf4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODh4eHh4eHh4eHh4eHh4eHh4eLi4eLi4uLi4uLi4uLi4uLj4+Lj4+Li4uPj4+Pi4uLi4+Lk14NoZ3VkVlVkZVdKWllXW1Q9RU1LSD04NzU3NjQzOTQ0Nzc1Njc5PTo9Pjw9PDk7PDk5Oj45PD4/PkFBQ0FFRUQ+OzxBPjw5PDs3Mzc+REhFSqG2tbW1tbW2tre4uLi4t7e4uLi3tra2tra3uLm2traLfXpsbHp/cGx5dm5qaGdlcXp4b2lvb3B1c21zd4Fnb32CgYNyf3lqcHJ6f6ng393Zy8a/vL2/vsLN0tDW3tnc4NfQzcPCw8PH1dfT2dzX1NjX0MfExce9vM/Kz87Y3djO3N3c2t3T0dze39/e397e3t7e4N/f39/f39/f39/f39/f39/f4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4OHh4eLi4uLi4uLf4uPi4eLg4d7W29/Sw8rJx9Hb3OLk4eHg2dre1sbExcTN2trf5OHi4trX3st9aWZxYVleZWFNTFRLUlpMO0hNSEZBPTc2NjUzNDY2NDg3NjU2OTw7Pj46Pjk5PDk3OTs7Oj49PEBAQ0RCR0ZCQT08Q0A9OTw7Nzc3P0RGRkaZtrS1tbW2tra4uLi4uLi3uLi3s7W2t7a3t7i5tba3opdxb29waW50dnFmZWNrbmdvcm1mZ2tygWVvdnyAeGRzj39zaHFyaWVlbm+w39HFv7u5ubm5ubq6uru6vc3Gw8e/urq6uru7u8HCvcHFvby/vry7urq5ubq6ubm6w8XDucDDwby/ube/z8/U3tjc3t/g3tLa4N/f4ODg39/f39/f39/f3+Dg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODh4eDg4ODg4ODg4ODh4eHh4uLi4eDh4uLi4uHa2t3RwsPCu8XT1uDdydPDrrnAsaqrq6uwtLbJ0sXRxLG4v7Srq6usr7S0vMzE1c60tLureGxtbWBdYl9ZS1NVVFFQREBRTUhEPzo3ODU3MzE1NjQ5ODQ2Njo8Oz08ODw5Njo6ODg5NzU8PDw/QEFAQkRDQkE8PkI/Pz09PTc1OD5DRUNAj7a0tLW1t7i4uLi4uLm5uLe1sautr7Oxs7OztLS0tqaei2tue3ZxeXhnY2hfcXdha25vaG99b25ja2lseHdsa4Z+bHB6dm1scG95sca8uru7urm5ubq6urq6urq6urq6urq6urq7u7q7u7y7urq6ubq7u7q6urq6urq6ubi3t7i4t7e2tbW1tbi3u8e+w8XHzcS4wMnH0tzZ2d/e3uDf39/f4ODh4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODh3Nji4uLi4eHh4OHg3tfGxtHQztTe3tPO0t/SuLi8sq2trKysrrG+ua63rKipqamqq6urqqqqq6ysuKyqqqqrq6urra6urq6urryzrayrpHlub21fXl1dVE1SU1xUSkE/UElIPjg5NjgzNzMwNTczNzg1NzY2Ojw/PDg5Ozo6Ojg5OjY1OTs8Pj9EP0NFQkNCP0BAQT9APjw3ODc6QUVEP4W4tLS1tbe4uLm5uLi3t7SurKuqqq2urq6vsLGzs7WjcG5ucm1wg311aWFlaGZkY2Rxc21td25naW1tZXBzb29zcXN8h4F6dX11n7u6uru7urm5ubm6urq6urq6ubq6urq5uLm5ubm6urq6u7q5ubm5ubq6ubm6ubm4uLi3t7e4uLe3t7a2tbW2tra1tbW1tba1t7e3t7rBvrzGycrb3+Dg3tvd3d7h4tDW4uHg4ODg4ODg4ODg4ODg4OHg4OHi0768zNjd3OLg0dnbxL23sLCxsa+zu7uzsLS9s66urq2tra2sq6qqqqmpqKmpqampqqurqqqqqamoqampqampqaqqqqytrq6urq6urq6sraR4aWJxZmFZWlZRUk5cU0Y9QlJEQTc8OzY5NTY1NDU2NTg3NTY1Nzg7Pjw7OTk5Ojg3Nzk3Njg8Oz47RD8/Q0BBREE+P0M9Pjw+Ojo3Nz9DRj54srCztLW2t7i3trKurq2sq6uqqaqtraysrq+xs7S1t4xucnRqaIB5ZmpmZWxdaG5waGxxYmNmcoJ+dmhobGpueoaBhXx4cXF5gK+6ubq6urm5uLm5ubm5ubm5ubm5ubm4uLe3t7e3uLm5ubm5uLe3t7i5ubi4uLi3t7a2tre3t7e3tra2trW0tLW1tbW2trW1tre3t7e3t7e3tre4v8bP0MS+v8DE19e8ydra4OHg4ODh4eDg4ODh4eDb3t7Uzby3tre6wMDJxLfIvrKwsLCwr7Cvrq6ur7Cwr66urq6uraytrKurq6qpqampqampqampqKmpqKmpqampqKmpqKmpqqqrraytra2ur66trK2heWpjbWdiXFhRUFFLVEpCOklRP0E3PDk0OjU2NTQ1NTY4ODY4Njs6OTw9PTs6ODY2ODg6ODY3Pj09PT5BQUVCQkNBQUBBOj09Pz05Ojc9QUc8bKqmqKutsLGwrqupqKqrq6mpqamrrKytra2usLO0tbilgIdvaWdzdGZrcG1qZGxvcm5rbWNrcHyJhG5qbHx4Y3uKfnNqc25rcY+7ubm5ubm5ubi4ubm5ubm5ubq5uLi3t7e3t7e3t7i5ubi4uLe2tra3t7e3t7a2t7a2tra3tra2tbW1tba1tLS0tbW1tra2tra3t7e3t7i4uLe2t7a2uLm4uLe3uL6+uLq9vcfb4OHg2Nnd4eHg3dfKwcPCurm5uLe4uLi3tbS0tLKysbGxsLCvr6+vr6+vr6+vr66ura2srKyrq6yqqqmoqKmppqepqaehpaipqamoop+hoZyip6inqausrK2ur7Cwrq2unXdwbGphY2BZUU1RTFJGQzlNUEU+ODs3Mjc5Njc0NDM1ODg3OTc7OTo9PTw6Ojk3NDo5ODY1OD8/QEI9RENDQ0FDQEJBQDtAP0A/PDw6O0NIPWOopaWlpqioqKenp6ipqqmoqKipqqqsra6wsLCztLW1taWYdn5xZmt4cW9tZmVsaGNsZ2ZpaX11bWlvfXZ5hWZod294b3Fvcninu7m5ubm5ubm4uLm6ubm5ubm5ubi3t7W1tba2tre3t7e3t7a2tba2tre2tbW1tra3t7e2tbS0tLS0tLS1tLS0tLW1tba2tra2t7e3t7e3t7a2tre2tre3uLe2t7i4t7i4uLi4wMXTyry8w83PyMC9urm5ubq6ubi4uLi4t7W0tLSzs7KysrGwr6+vr66urq+vr6+uraysrKurrKysq6ehoJ6gn5udoaGdlpmkpKaon5mZmZmanZ+gn56fpKqtrq+ura2srJl1cGlrY2FeXVVOU0tSREQ4TktHQTo4NTI2OTY1NDczNzc3ODk3OTo7PT0+ODg4NzU6OTk1OD9AQEFEPkZBQkNAQkNCQT88QEJCQD0+OjpERj5cpqWmpqampqanqKenqKioqKenqaurrKytra2ttLS0tbekc311bnONf3JmanFjaW1jaGZobG51aV9jZ3VzdnpuZ3Bwcn56cYihu7m5ubm6urq6urm2s7a1uLm2trW1tra1tbW1tbW3tra3tra2tbW2tbW1tbS0tLa2t7e3tbS0s7O0tLW1tLS0tbW1tra2tra2t7e3uLe3tra2trW2tbW2tra2tra2tra3tra3uLi3uri4uLi3uLi5ubm5urq6urm4t7e3t7W1tLS0s7OysrKxsbCwr66urq6urq+vra2srKuppaSmpqScmZubmpmampmXl5eXl5aZm5iZmJmZm52en5+dnJ6gpKWko6OioqKQdG5jcGFeXltUU1RIVEo/PFFCRkM7ODYzNzo1NTQ4Mzg5OTc4OTc7OTs9Ozc6NzU2OTk4NTg+Pz9ART5CPz9DPzxBQUI/PT9EQT8+PTk9Q0Y/VaSlpqanqKeoqamop6ioqKioqKiqrKuqqaipq7W1tba5o3eKcXKHhnd0cGh5a2JjYWVsaW5zal9jZWNjZWprYmRqbHaXjX6ovbm3tre5u7u6uLWxrKurqq6wrKyrq62tq6uvsLGvr7CytbW2t7W1trW1tbW1tbW2trSvr7O0tLSvra6vsrW0tbW1tbW2t7e3t7e3t7e3t7e3t7Owsra1tLa2tre3tra2tbW1tra3t7e5uLi4t7e3uLi4ubq6urq5uLi3t7e1tbS0tLS0tLS0s7OysbCvr6+vr66vr62oo6KgnJqampqZmZqbm5qampqbmpmZmZiXl5aYmZmZmpycnZ+foJ+goKChoaCgoJ+fi3RuaXRdYGZeUlRLRFRJPUVTSEVCOzo0NDY5NDQ1NzM4ODg3ODk5Ojs7Pz04OjkzNTg5NjM5PT5AP0A6QEJCQkA/QEJCPz0+QUFCPz06PkVDQFGjpqWlp6inqauqqKaoqKipp6ioqKinp6ioqaq1tbe3t7KZtH99kIx1Z2lqbGZjYGNoZW94cGlicXx5cGpmZmRma3NqhYystrKwra2ttLeysLCtrKuqqaiop6ipqampqKinqKipqaeoqqurra2sqqytraysrq6traunpaSnqqyopKOkpamwsbGztbW2t7i3t7W1tre4t7e3t7Kppaasq6ivtLa1s7W3t7a1tbW2tra3t7e3t7a2t7e3t7m6urq5uLi3t7Wxs7S0tLKxsK6sq6yurrCxsK2rqqmqqKijnJqZmJmYmJiYmZmZmZmZmpqZm5ubnJybmZeYmpqcnJydnJ2foKGhoqKioKGgoKCfnop1amtuWVxhVktPREdVRz5PV0hEPTw4MzQ0ODQ1NDgyODk4ODk6Ojw5OUA8Njk6MzY3OTE0PD8/QEBBOkNGRUJBREJDQTo7P0FCQz9APUBEQ0BPo6empaemqKqqqqakpqenqKioqKimpqaoq6uttba3t7e4rbJ1cHuDdmBiaWtiZWZhZGdmfYh5bHKAfXFvcXhjbW5xZo+srKurq6ysra6urK2trKyqp6WmpaWlpqioqKiopaeoqKioqKeoqampp6Wko6KioqOioKKioaKhoKChoaKjpKOjpaWlqLC0s7OzsKuqqaqztLa3trGopaOioaGipKiqqairs7Sxrq6xs7W2tra3uLi3t7e3t7e3t7a2uLe0sa6ppqerrKmnpqWkpKSkpKWnqaajoJ+enZycm5uampmZmJeXmZmZmJiZmpqampqampqbm5mYmpydnZ2dnZucoKGgoaOjoqCgoKCfnp2FdGtsaFdYU0pHTUVITUdAU1dGRz09OTM2Mzc0NTU3Mzg6Ojo6OTw9OjpBPDY9ODM3ODgzNztAPz9AQDpCRUNAQkRDQT87PEBDQkNBQDxBQ0A9TqKnpqanp6mqq6mkpaWlpaaoqKippqanqKmpqrW2tre3t7izc2h7c2JnamtpaWJhZGloXV1tfHJma3J/fHR8bm1zc36gqamrq6uqq62trKusq6mpqKWjpKampqWmp6eqqaamp6enqKinp6iop6WjpKKhoaGhn5+fn5+fn56foKGho6Wko6OkpKSmp6enpqWkpaampqeqraumpKKhoaChpKWlpaenpaeoqKalpaivtLa3trW1tra1tbOwrKupqa6rqKWlpqampaSkpaWlpqWkpKSkpaKhoaGgnp2bm5ucm5qamZiXmJiYmJiZmpmZmZmYmZmZmZqZmZydnJycnJybnJ+fn6ChoaKgoKCfnZ2cgHNrbmReU0pITUZETEtFRFFTQ0c9PDgzNjI4NDY0NjQ4OTg6Ozk7Pjw5PTs5PTczNTk2NTY8QD0/QD88P0JDPkJCQj89Pj5CQ0FFQD86PkVAO0+jpqWkpqeoqaelpKWlpKWnp6eoqKanp6alpqa1tba2trW2uYptcW1vfHxxZ2pmYGFsYFROW2hqbm9tgYJ9cWdxdn6aqKeoqqmpqqurrKqqqqimpaWkoqOlpqalpaWmqaqppqWjpKWmpqSjo6KioqKgoJ+fnp6cnJycnJ2dnJ2en6CioaKjo6KhoqKkpaSioqOjpKSjpKSko6Ggn6GipKanp6ipqaelpaSipKSlqK2wsKyrqqusqqmnpaWmpaWlpaalpqioqailpaWkpKSlpKOjpKOioaGhoqKgnp2cnJubm5qZmJiYmJmam5mXl5eWlpeXmJiZmpqcm5qampubm5ucnJ6goKGgnp6enpycm356bnJiXlNNSlBFRk5NQkBPRT5JOz01MzYzODM2Njc1Ojs4OTs5Oj49Ozo5OT03NjY5NjU2PkI+PkE/PT5DQT5DQ0BAO0BAQkJCRUA+Oz5FPzxQoKSjpKOjo6SkoqSlpaSlpqamp6empqalpqaltLW1tbS0tbiBaHx9ZXOCemxwdWFfY1ROT1FbaGxpbGxxbW5xbnScoqSnqKioqauqqqqqqaempaSjo6OjpKSlpqalp6ytqaShnp2eo6Shnp6foKCenJ2dnJycmpqam5ucnJubm5ydnp6foKChoJ+goaOioKGjpKSjoqSlpaWkop+go6SkpKapqainpaGdnJ+jpaipqainqKioqaempaWkpKSlpqampqampqenpaWko6Ojo6KioqGhoqKhoqOkop+enZ2cmpubmpqZmJeXmJaWlZSUlJWVl5iYmpubnJuampqam5ucm5ucnp+fnpucnJyam5p/fnF0YFtUTUdNSEZMSj8/TkM8QDs8NDM4Mzc0NzY3ODs9ODo6OTk7PTs7ODk9Nzc4OTU4OD9APT9BPjs9RD89REA/PzpAQUE/QUVAPjw8Qz88Tp2ioaKioKCipaSkpKWlpqenp6empqampaampbW1tbS0tLS3jHalsXdmc3Jvc2xjZGlYT1JRT09dgG1kYFptkZGSoqKjpaampqenqKiop6alpaSjoqGhoaKjpaempqesrKemoJ2cm6Ghnpuamp2cmZiam5qampmZmZubm5uampqampucnZ6goaCfnp+hoJ6foqOko6Omp6inqKWioKGhoaGkpaWlpKCcmZmbnqOmpqampqanpqempaOlpKWlpqiop6enpaWlpaWkpKOjo6KhoqKioqKhoaKjo6Kgn56enZybnJubmZaUlJSTk5OTk5SUlJWWl5qam5ubm5qZmZqanJ2dnZ2dnZuampqamZqXf3dvc11aTkhKTkdFRklERU5APD09PDQ1OzQ2NDY1Njc5Ozg5OTg5OTw7PDc6Ozc4ODg1ODg/Qj9BQTw+P0A8PEJAQT49QT4/Pz1CQUA6OkA8PE+doqGfoJ+dn6OkpKSlpqeoqKenp6ampqampqW1tLS0tLS0tbSXtqd1Znh2Y2xjY2VjW1JTU1JNXqCMeFhodpajnp6hoaOjo6OjpKSlpqalpKSioaGko6OjoqOlpqWmpqenpp+bmpuioJmWlpWam5mXl5iYmpqYmJqampqbm5qZmZmenZ2goqOjo6KkpKWinqGhoaKjpaampaSjoaCgn5+hoZ+goJ2amJeZmpygpKOjpKWmp6alpaOjpKSkpKWnp6ampqampaWmpKOjo6SjoqKjpKGfoKGhoKGgoaCfn56dnZyamJeVk5KSkpKSkpOTkpOUlZaZmpqbm5qampqbnZ6enp2cnJybm5qamZmZlH10bHReWk9IRUdGQkVORT9GOzo+Pzs0Njo2OTM2NDY4ODo4OTc4ODo8Ozw5Ozs6OjY3ODk5Pj9APjw9QD5AOjlAQT89QT8/QUE+QUE/Ojk9PjpQnaCfnZucnJufoqOlpaWlp6iop6ampqanpqantLS0tLOysrGwsK2rkHiGj36bmn93Yl1TUlFRTGKgootaiKCgn52YmZycnZ2eoaGgpKenpqWkoqGjp6alpaKipaampaanpqagm5mboaCXk5OSl5qcmpeXl5iampmampqam5qYmJmaoKCgoKGfoaKipKamop6gn5+goaOko6Khn56enpyanZuZmpqZmJeZnqChoaKioqKkpaWmpKSkpKKioqKkpaWlpaWlpaalpaOko6KioqGgoKGgnp+fn5+fnp+foJ+cm5qZl5WUlJSTkZCRkpKSkpKSk5SVl5iZmpmZmpqam5+fnp2cnJycmpmZmpiXl5F8cmdxXl1QRj9BRD9KT0JCRjhDRT4+OTg7Nzc0ODQ1OTo6Ozk3OTo8Ozo8PT48PDo2NzY5OD4/QT47Pz49PDg6PkFAQUE/P0FCQERBPjo4PkE8U5ycm5uampycnaGio6KjoqSmp6alpaampqSjo7KysK2rp6amp6alpqiln6iop6qnoXmEXFFST0xcnKCAYpmgnp2clZOVlpeZmp2dnqGmpqampKOioqanp6ajpaampaWmp6amop2cnqGfl5GRkJSXm52YlpaWmJuZmpqampqZl5iam6Ghn56fnpybnJ6goJ6dn56fn6Cio6SjoqCfnp2ZlpeXl5iYmZubnqKioqKioqGio6WlpKOio6SioaGhoqOkpKSko6SkpKSioqKhoqGgn5+gnp2enp2dnZ2dnp6em5mYl5WTk5SUk5KQj5GSkZKSkZKTlJaXl5iYmZqampyenZ2dnJubmpiYmpmXlZaNempmamBiTkY+P0A9SkVAQ0A7QEE8Ozs5Ojc2NTg0Njc4OT04ODs6Oz87Ojs8Ojk6Nzc2ODs7Oz08Ojs8PTw3Oz5DQkRDPz1BQ0FEQT88OkBCO1eZmJqamZmam5ucnp2foqKhoqSlpKSlpqSioJ6op6alpqWlpaemp6ampqakpaanqKehqXJOUU1KVJahenKanJyenJeVlJWWmJiXl5qeoqKhoqOkpKOjpaalpaanpqSlpqalpaOgoKGhn5mSkI+WmpmenJaXl5eZm5ycnJqamZeZm5uen52cnZyZmZqcnZydnp6fn5+hoaCgoaKgn56bl5WVlZeanZ6fn6GhoqKio6OhoaCgoJ2cnaGioqOkpKOioaSlpKOko6SjoqKioqKhoKGfn52cnZ2cnJ2dnJ2enpqXlpaVlJOTkpKSkpCRkpKSkpGSlJWWl5iYmJiam5ycnJycnJ2cm5mYmZiWlJWXi3hsY2RiZFFHQT1DO0tIRDo7Ozw+OTo6OTo3Mzc5NTo4ODg8OTg7OT09Ozo7Ojk8PDc2NDc/PDo9Ozw/Pjw7ODxBQ0FDQkI+P0NAQkFAOj9APztZmZiampqam5ubm5ydoKGhoaGhoqKioqKhn5+dpKWmpqenpaWmp6ampqWkpKalpKSkpaaGUFJQT0+PmHB6mpubnJ6cnJycm5ubmZiYm56dnp6foKOkoqGhoqKio6SkpaalpKOjoaGhnpyalZOUmJuam56amJiYmJqcnpyam5iWmZybnJycnJydmpqbnJ2dnp6dnp6fn52cnJyhoaCblpWVlZacoKGgn5+hoKKjoqOhnZuZlpaWlpicnqCip6ikoaCgoqOjoqKioKCgoJ+fn5+gnp2cm5ucnZydnJmanJuWk5KSkpKUk5KSkpKSkpOSkpKRkpSVlpeYmJiYmZqcm5qbm5ucnJqZmJiXlZWWl4d3ZGdoZGJNQ0U8RDlJSkU5Ojs9PTo6ODg6NjQ3OTU8OTY4OTc5PDs7PDo6PDs6PDw4Nzg3Pj07Pj46Qj86Ojo/QURCQ0FBQD9EQUFAPjpAPj06W5qYmZqbmpubm5uen6CgoaKioKCgn5+enp2dnKWkpaanpqWlpqakoqKio6Oko6Kjo6KnllRYVVJOZ21rgZ6am5udn6Cgn56enp6dnJ2dnJ6enp+goaCfn6CgoKGio6Ojo6OjoqGgnpuZmZiZmZmamZienpiYmZmam5qWlZeWlZicnJ2cm52dnpybnJ2cnZ6bmJqeoaGdm5udoKKhmpWVlpaZoKKgnZueoKGjop+em5eXlJKSlJeYmZ2goqenpaGgn56goaGioaCfnp2cnJubnJubmpqZmpydnJmXmZaVk5GQkJCPkZKSkpKSkZKTk5OTk5OTlJWWlpeXl5manJubnJucnJqamZeXlpaVlZSEcmZsYmRbREJMPT84RktCPEA+Pj05Ozk6PTg1ODg2Ozg1Njo4PDw7Ozw8Ozk8Oj09OTU4Nzw5PD87OkE/Ojo6QEBDQkRBQ0A/Q0FAPj08QD09Ol+al5mamJeYmpycn5+foaGhoJ+fn56foKCenZ2lpKSko6OioqOjoZ+foKGipKOio6SiradXXl1UV19ua42dmpqbnJ6dm5ucnZ+enZycnJydnZ+goKChoaGgoKGgoKGioaGioZ+enJqampqbnJqZmpuZnJ6ZlpaWl5eTjo6QlJabnJuam5udn52cnJycnJ6dlpSZnJ+in5ycnZ+hoJuXl5mZmpycnJubnZ6fnZqXlpaWlJOTlJiampqfoKGmpqWgn56fnqChoaCenJubnJybm5ybm5qZmJmZmZmXl5iVlJKQkJCQj5CSkpKSkZGTk5aYl5STkpSVlJWWlZaZmZmam52cnJyampmXlpaWlpaQgG9vZV5gV0BKSDg/N0lFP0VBPD07Ojo8Ozs3NTs4Njs3NDY6Oj47Oj0+Pj07Ozs+Ozo4Ojk5NkBBPTo8PTo6OT9BQ0JERUM+P0FBPz8+Pj89PDtgl5WXl5aVl5mbnqGhoKGioqCenp6enqCgn52bpaWkpKSioKCfoJ+dnZ+hoqOjo6OkobCjXWVkYGFua4GenJubm5ubmZianJ2enJubm5ycnJ6ipKGeoKGhoqKhoKCgoaGgn5+enJqZmpubm5ybmp2dm5manJiXlZWWkY6Nj5KYnZycm5ycnqCdnJucnJyempWVm56foZ+dnJyenp2cmpqampqampqbm5qXl5aTkpWVlpWTlZaam5qanZ6foqWjnp6fn5+en5+enZ6fnZycm5qcmpqbmpiZmJiYmJiYlZSTkZCRkJCQkZKTk5CRk5SYmZiVk5SVlZWWlZaXmZmXmZqenpyamJiXl5aWl5eYjX1ubV9lVlRFSzw3PjdSRUM+QkE4Ozw7OTg6ODY7Nzc6Njc5Oj0+Ojw8PT49PD06Pz06ODw9OTtBPj4/PT45ODs/QkNAQ0VDPT9DQj5AQD5APTw8YZWSlJWWlpeanJ6goKCgoaCgnp6enp6gn56em6WlpKSioJ+fnp2dm5mbnJydnp+gn56rmGNpbW5pZm2enZybm5ybmpmZmZqam5ucm5uam5ygo6SgnZ6en6CgoKCgn6ChoKCfnpuamZqam5qbm5ufnpyZmJqamJiYmJKOj5OXnJ2bnJ2cnJycnZycnp6dnpqVl5ygoaGfnp2eoJ+cnJuampqbmpqYmpmVk5OTkpOWl5eVlJiYmZucnJydoJ+gnp6enp+fn56en6KjpKKgnp6cm5qampuZmJmZmJeXlpWUlJORkZCQkZKTk5OSkpOUmJmYlpWUlZaWlpaWl5iYmJiXmZqamZeXl5aXlpeWl4l4dmddX1dURUU5OTs8WT5AOEI/OTs7Pjk4Ozg6Ozc5OjU4OTs9PDk9Oz0+PD0+Oz8/Ozk+PDw+Pz5AQUE9ODc7QkNFP0FFQz1AREJBQEQ7Oz47PGKWk5SUlpWUlpiYmZubnJycnZ2cnJ2en56dnJqkpKSkoJ+enpybm5qZmJiYmZucnZ6cpolla3R4bVuFop2dnJydnJqbmpqampydnZ2bmpuboKKinpucnZybnJ2enp2dnZ2fnpyampucnZybm5ycnp6cm5qanZqam5yVkZOXm52dnJ2fnZycnJycnZ6fnp+cl5idn6GhoJ6cn6CfnJubm5qbmpmZmZmZl5WWlZaYl5eXlpaYmZuenp2dn6GhoJ+fnp6fn5+dn5+hoqKhoZ+fn5yZm5qcnZuampmXlpaYl5eXlpWTkpGTlJSTlJSUlJaZmJaVlZeZmJeYl5eXl5eYl5iXl5eXlpaYl5eVl5eDeHZfW11eUT1GOjk4P1VDQTtDQzo8Pz86Ojk3Ozg4ODc0ODk8Ozw4Ozs8PTo9Pjo/QT06PTw+PkA/PUBBPjk2PERDRUBBRUU9PkVERD9COzo8OTpkl5SVlZaUlJSUlJWXmJiamZqcnJydnp6dnZybo6Oko6CenJuamZqZmJiYmZiam5ubm6WJa3F2em9lmp+enp2dnJybnZ6dnJ2enp2dnJydm5ygoJuampubmpudnJqampucnJuZmZycnJ2dnZ2dnZ2dnpybmp+fm5ydm5mZmZudnZ2dn52dn5+dnJydn5+fn5uanZ+goJ+dnJ6gnpubm5ubm5yampuamZudnJqZmJeYmJiYmp2foKCgoJ+hoaGgoJ+en5+fnp6foaKhoJ+enp+enJqam5ubmpqZlpaXmZmYmJiWlJOUlJWVk5OVlZSVlpWVlZSYmZuamZaWl5WWmJiWl5OUlJGRk4yRkJOWfXhqYWJiXFA8QDw2OENWSERCOjg7Oj47Nzc5Nj06OTk2NDc6Ozw9OTo6Oz87PT08QD47Oz46PT89PkBBP0A8NztBQ0U/P0REPj9EREM+Qj07PDs6Z5aTk5OTk5OTlJSVlpeWl5aWl5mbm5ybm5uamaOjoqCfnpuamJeYl5eXmJmYmZybm5qkgGpqb3lzcZegnp2dnJydnp6enp+enp2cnJydnp2bnJuampqam5ubmZiYmpqamZmZmJqdm5ydnZ2dnJ2cnZ2cm5qdn5ucnJubnJubnZ2dnJydnp2enZydnZ2cnJ2dm5uenp6dnZybnpubnJycnJydnJubmpmbmpmYmZmYmpmZmpyfn5+jpaKfoaKioaGfnqCgn5+fnqCioaGhn5+fn52ZmpudnZqZmJWWl5aVlZaTkpOUk5STkJCSk5GUkY+OkJGOlZabmJWYlJmXlJiRjJCPk5yTkoyFjIeDhndxZ2pkW1xRQT44NkJHYEJFR0A+Ozw7Ojg4NjU8ODo4MzQ6Njk9PTk5Ojs9Ozw6PD48Oj5AOj5APjw/QD8+PDg6Q0FEPz5CRD8+Q0VCPUJAPDw8OmeYk5KSk5OSk5SVlJWXl5aWlZaXmZmZmpqampqkoqCfn52bmpmYmJiXl5iZmJmcnZ2cqH1nZXN7enOJop+enp2dnp6enZ2enZ6enp2dnZ6cm5ybmpubm5ucm5iYmJmZmJiZmZmbnZycnZ6enp6enp6dnZybm52bnJybnJ2dnZ2dnJ2dnp+fn52cnZ2dm5qbnJmZnJ2dnZ2dm5uanJ2dnJycnp2dnZybmZeVlZeXmJqam5ubnZ6foqOhoKGhnJucm5ubnZqcmZycn6CfnZiZmZmUkpKUl5SPj4+OkYyNiYuQi4mLjpGRj4mQmJiQkoyNi5KQj5iYoqiqpqWlrKOmoZqep6eyqKKVo6Cfl39wcWlsXFtcTUY8NzdHR1g+SE5URjk+Ojg5ODc1PTk4NzMzOTY6Pjw6Nzo8Ozo6Ojo8PDs/PjtAQD47PT5BPDw2N0A+QkA+QUY+PEFEQT1DQj49PDlmmJSTk5OTkpOUlZOVl5iYmJaXl5iZmZqampqaoqGfnp2cm5mYmJiYmJiYmZmZm5ybnKx/am16f3lxh6Genp2cnZ6enp6enp6dnp2dnZ6enJubnJubm5ubm5uZmJiYmJiYmJmZnJ2dnJyenp6enp+fnp6dnp6dnJydnJ2dnZ6fnZ2fn56goJ+enZ2dnZybnJ2em5qbm52enZ6dm5ubnJ2cnp2cnZqYl5SRjo+QkJGVmJSWlJiZmpudmJuYlY2Mjo6TkpKRj4mQjpGRjo+Ki42NjYiIi4+Lg42NkY+MkI2Qk5WVnJihoJySn6SipKmam5eanKOprb3Bwbq8uL26ucC8ubq3uru7tL2zwbV/bnVmZ1peWUxJRTo7TElTPFZSSUM6QTo7Ozc3NTo6OjgyNTY4Oz08OTk7Ozw5Nzo4Ojw6PT85PD8+PDw9QTs5NTg8O0A/QT9EPTxBQkA8REM9PT06YZOTkZCUlJOTk5OTlJeYlpeZmJmYmZqbmpqamp+gnp+fnJqZmpqampmYl5iZmZmZmZmphXB1e4B3b4mhnp6enp6fn56en56fn56dnp6fnp2dnJ2cm5ubm5ubmpiYmJiZmZiam52cnJ2dnp2enp6goJ+enZ6hoJ6dnp2enZ6fn56en6CenZ6enJydnZ2cm5qYnJuVmJqamJiYmJmSjJCXlKCXk4+MjYqKiImMiJORh5CPjYqKkJCLjoqMi4+IiImJjpGOjYaFiYaKhoWLiI+SkJCNkJKXlpKamJ2TlJ6kpqaqq7Gsr6+rpquqsbm5tbS0rqyvtMDIxcXBvsbDxMTDurW+t7a0s7C2tb6qcHRyXGZfXV1JRj8/RUtMVklcTEQ/PUI6Qzk5Nzc7OTk3MTc5ODo+ODg6PDw7OTc5OTs9Oj4/OT5BPDs+PD46OTY5PDpBPkNBQT08QkBAPkJEPj8+OVyHhIOHi42KiYaFgYqMkZOVmJiHlZaWkpiampmenZ+gn52ampubm5ycm5iWmJmXl5ibqo56dXZ7f3mCoJ+fnp+goKCfn5+foKCfnp2dnp+enp2dnJqbm5ybm5uYmJmXl5iZm5ucnJydnp6enpybm52dnZycoaGfnZ6dnZ2dnp2dnJiWlpaYlZWSlpmWk5GKjI+PjI+NkIuLj4+WiYiEi5GZjn2Fi42PjYyHioyQm4yRj4+Lio6TjIyNjIiSi4yFiYyPhouIh42KhYyEj4qXkJOYmpWbnKOqoaKknKKrsbe0ubWxs62vsrKlp7O6sbq6vLa3tsDDw729vLa/urq8wbW4wL60r66mqa+3mm58Z1tjWl1fSEU+QUtJU1hZXkFGOTk9OkY/Pzo3Ozs7NjM6Nzo5Pjg6Ojw9OTk4Ozk7PDo+PTtAQDs8QjxAOjg0Nzw7Qj9BQj4+O0NEREBDQz0+PjlhmZWLkYWNj5aSiHl9e3+Fi4OKgoqJhmuAeJCLlpqRnZ2UlJGTlpeampiWk42Sk5KQm5uIdndzcX1/cpGgnZubm5yenZ2eoKGgm5uWlpucmpybnJuYmZqYmJmampqWi5CTlpmYlZiYlpucl5WSkY2SkZCUk5KXm5mYm5ePjpCLjo2Ch4uLi4qLiI2RjIeHhoqIiZGKh4yEhYqNi4qNhI+UkIyDkJOUmZWQi5OTkZWRlpWOj5GMlI2Oj4qIj4ePhoeJiYmNiomJioWNh46JmJKUmpuXmKChp6Cko5qqqbO2sbWwqKmiqK6tn6qvsK21ubi8wr/BxLixtbCutrOwuL68ury+urOzp7G3wpB1gGNiXlpXUk1IRkVQSVlXX1tDUDpCQz1HRj84Nzo6NzU1OTc8OTw5ODo9Pjo6Nzs7Pjs7PTs9P0E7Pz48Pzo4NDM3OkFBQEI+PjpDREM/QUM7PT45Z6mloqKZn6CippeUiI2CiIJ1h4iKiIp7e3Z7enmPeoiSfn18en6CkYWBgH1zfH99fISHfnRweHZzfHaBj4iIiYeIioyMkZicl4iOhIuNi4iNkI+Pi5GPi4yOj5CQjouFhYeLjIyHiIuOi4eMhYaBjYuGiop/iYqGiJiRiIOIg4KFfIuLjIaJi4iKkIyIi42PjI+Wh4mLio6NjY2Wk5OdnJyalpycm56bmpuYnZeTkZWWkJKRi4+LlpSMjYqDi4SEiYyQkIqOio2LipGJjZOTk5SVk5KcmZ6Xn6CfpaKvsamupKSfmKStpqa4t6ysu729wsPAv7+vpa2wsLS3uLO0uLa0ta6stK+4tLaBeXpjZmBeVlBRQUVMT0lcXl9UR0dCS0xCREA9ODg7OTU3Nzk3Ozc9PDk9Pj05Ozg6O0A8Oj06PkJBOD88Oj84NjQyOTtCQD9CPj04QEI/PkBEO0A+N2CloJqXnaGaoaCPl5efl5WCjaCfo6GdmpKOjIxycXBvdnFucG1ucHZub29waHBxcHR+c3FycXd7cnl2d3Jyd3Z6e3l8fXt/iIGEi3+PkYaNi4uGiouLiYaEgYaCgIKJkYOAg4x/ho+LiYWAh32AgZKQhoSEho2DhIyPj4+IjY+Hi4iRkJWRjpCKk5eOj5WYp6SfnZWYlpaln5udq6aqt7W4srGnr6qnpqGfmp2WkpWVkYqPjImTjZuVjYuLhoaJjJWQkJCLmZKVlZSbkJiTlIyNkYyWl5WilZ6mqauno6OqsJucpp+mq6G0vb6zs7+5u7u6uby9rqiusa6wuLyztLGxqrCpqLGxsqild3J0X2hhYFRWUUlKSFZNXl5eVExKRVFKRUdDPTo5OTc0ODY4Mzg4PTo9PD47OTs4Ojs/PDw+OT9DPzg7Ojg8Nzc2Mzc5RT4/Qz89N0BAQT0/RDw+PThUj4yGh4eUjJWZl5yWmZaNlZyWlZydoKCdmpiWeHFubXJ4cXFsbnJwa3FvcG1yc3t1dnd5fnVxeHZ0d3tybn98gX15eH1/eYOGg4WCg5CLkIuLi42Pi4mJhYKBfX9zfYiAfpyQhIWFiYuPinp9fYaOjYqGjZSRi5CXj5SXkpihlp6XlZunpp+goKawq6GjpbW0sqqmqq+isba5vcK7ucO+vLi9uLWxrLCspZuSk5mfm5SPk5WOmp2doJqfn5edo6qsoZ+em62hp6qwqaampJiRkZWUo6SirKSss7Szs6i3tru4sLKvra2yt7a6srW6s7e5u7i8urayr6yxsbKztLOxsa2us7Gzs6yhl3Zxc19jXlJRVE1PSUdYT1pcZFROR1VPRURKRD44Ojg3NTg4ODU5Nzo6PTw/Ojg8ODk5PTs9PTpCPj84Ozo5Ojk4NjI1N0I+P0RAQDY+P0I/PEM8PT46Tn98go6MjJOTl5eaj5SWjZaRkZSXk5qanqGdnHJvcnFxcXFxcG5zcW91dHJxdneAdXd8eYV+d3t8eX1/fICJiYmDfXp/h4GIiYGAgIGGiIGGi4aIhYSIiImEf4J/enx8fX6SkH+IeIGFi4qDhIWKj4yNkZmdlJSUoJqan6Ktsa2ppKWtr6ysrLWuvrmtrqm1sLexq7G2rK+9wsLAvrq8trKutraxtK66u7OurKepp6unoqmtoKmooq+wuLSxvLq6urK0ta+8tLezt7e7t7mtrbCprLW5sbeytLe2sLu7vLu6ury1vLi0wbWsqqqrtLG3uLm1trSzsKymrrCqq7Cxq6yusLKxtK6qo5N4dnJlZ1tMUlBGTUhTV1JlXmdUUExcUUhMUkNBOTk3OTU4ODY2Ozc5Ojs6Pjk4Ozo6Ojw8Pj08RD45Njs7ODg+OTUxNTZCRkREP0A3Pj5DPjpBP0BAO0t/gomXmJSdlpabmIuSlo6XkZGVl5SZl5+bmZx8dHV2dXl1c3RudnJzdHV2d319gX56gXyDfoJ/fYB/hIKFj52RiYF/go+Xjo6HgoCBiIuFfoqQi3+HjYyLioeSioeGjZGTkZGEh319g4iMjouOiomQj46PlJSYkZWcmp2dqK6yr6+1tLOtsrW4sLy1tbGqsKqztbS7t7SztrS1r7i4t62noqassLCvtre3vrW5vLOysa61u7C0r6+yu7axuMC9tLS0s7izvLq2tLrAvbm6ubq+ubm5vrWysa+yr6q1tLGzsbSzrri4tb+vpKaoo6ussa+zrq6wsKytq6qroqKmqKKnrauqpaynoqeYeHlxZmVZT09NSVJNV0xPX15cTlVVYlFEVE07Pzk8ODk1Nzc1Nzk1Ojo6OTs4Ojw8Oj08Pj4/P0I9ODY6Ojk6QDs1MjY2QUZDQz4/Nz49Q0I5P0I/PjtLjpGTmJmVmZGTopiTkpKLk4uOkI+Vl5ablZSbhoJ9enh2dHRzdH53end2gIKDhouMhISFioaQiYeRk5aRjZaalY+IjI+emJaVkpCTl5qamJCdoJ2Tl5qgmZ2bo6CVkJugpKOak42IiIuJkZGOkY6LmJqPj4yUmpecnJufnKSstLm6vK+2tLi0tLK3uLmzq6+qqKy1srK1rrGrrqa3s7OxpaGotbCvrayrtbqyu7q6tLK3ur67ubG4sLmtqLK4u66ttLS3tbu2trm5vLe0r7G0t7a5s7e1pq2pq6ior6yprq2up6KxtLG0q6aop6Cjq66oqq6orLKwr6+pqKGeoaGjpqOgopqlo56ol3J3bmdiVUtUT09KQ1BLX2JYWlFcVGBNSFJJQUA5Ojg2Njc3NTg5NDs5Ozk8Nzs+Ojg8PD0/QkBBPTs2OTk5Oj87NjM3OD5GQkJAQjk+PUBDPkBGQj44R5OWkZWTkpSQkZ+ZnZmVkI+Sko6Mk5aWko6RlZGSkIaBeXJzdXuBhI6HhZGTkpicnJiVkJWYo5yaoaeqqZ+clpeVnaKioZyZnpmlqKyvramnqqmop6GlqKirqamvoZufoaOjoJqfoJyUjZiUmKCgoaSem5qkp6Spq66spaOoq6+xtK6qrK6zr6ystLO0ua6urayqrLKwsK2wqKqmsrS0uK6qtrqwr6qurLC3s7i0t7W0u7y4tbWxtauyrKiys7uvrbGytLa1sbG0s7OvrKuvs7a0sayutKqqpqWnrauoqKupqqifqbOwqqeppaOio7CtqaatpairrayppaSioKWipaOYmZyVnqKippdudWVnZFZPWEtLSktTVHBiWWRXX1tcUlpQTEM8ODk6Njk4NzQ3NzQ4Ojw6PDg6PTk3PDw7PkM/QT47OTo5Ojs+PTg0NThBREVEQkM5PjtAPkI/R0Q+N0KSm5SVlZaVj46Wl5qZlZGKk5SSjo+SkYqKiY2Ul5qTjYmCho6VkZSfmpuin5+jnqGhn5ijpKelpaapqa2rqaKmpKilpKGfnqOjra2srairrq6qqqukoaKkqaenqaijopybm6SgpaijoJidmZ+hoqmnoKKirqyrqqetrqilpKmpqqmmo6iqqaekp66wr7Ovq7Crqq+yr7Czua+rqLCxrrCyubO0r62vtbCss7GurLW1tLSzs7CvrKyqrKusr7G0s7CwrrCwsKyqrauqq6alrrCysKumqbCvqaOkqaunqKaopquwq6mvqaaoqaalo6iwraqpqKKpo6WnpKGhoKKloZ2el5aYlJugpKmUbnNeamlfVVpOUk5QT1JkXGVjW11ZXFBZT0tAPDs5Ojc6ODczNTMzODo9OTo4OTo5Oj08PEBEPkA9OTo8PDw+Oz45NTo8QkFFQUNBOT47P0BEQENCQDdAkZ6YlJeZlpGHi5SSl5GIg4mLk4+OkI2Hh4SFlZmWmJeZlpqeop2anKKkoaCdn5qfoKGgpqGgoKCjo6KlqKmrramqpqOmpaCloKaopqWnqaepqKOnppmcpKaioaChoaCcmJmfoKGkpKKenpagm5qioqChn6CiqKCcn6GloaCmo6KfpKGspp6foaGkrKqnrKivq6e0sa6ur7WyrKqwq6mtrbWwrq6srreup6yqpKivsq+sq7Kvqqqpq6utqa6urrGxraqtqaunp6uoqauinaapqKilqKisqKilpKWop6iopqmsr6+oq6mhoqKlo6Opq6ymqKWjqKKhoKSdnZ+hoZ2bnZ+amZWcnKOqlG9zZm5yZF1dUFVPV09eZGRsaGJiWlpSVE9NQTo9Ojo4Ozk1MTYzMjg4Ozk5OTk7OTk8Oz0/Qz5APTk7Ojs8QD0+PDk5PEFBRUFGQTo9Oz9BQUJBRUI4PYqWlJOYmpaPiISNjpGSjIiIiI+JiZCRjoqKiJubmZygpaKlnqKjoZqeoZyanZ6bnKOop6ugoKOYoJ2XnKGjo6WjoqKkrKilqaCepqmnrKmkn6Kgoqahpq6mpp2fn5+fn5manJyhoKGkn6GbnZqcoJ6hn56eoKOZlpqYo6KipJ+ZnKGhoqCbmp6goaSgnaejqrGorqusqaSqqquorKalrKqws6+rq6mwq6appaWoq6ynpqevq6Wnq6upq6irqqqrrailqKOmpaesqayoopykoaOmo6qpqKano6SnqKanqKepqKupoaKoo5yepqWjqKino6WlpqmgpJ6inpeYnZ+doqKlnpiUlZ6go5d1d2t2d2FfXFVZUVVWW2Nec19oX2NTUVlUSD48PTg7OTo4NTM3MzM0Nzo4OT05Ozo5PDxBQEM9PT44Ozw9PEA/Qz86ODo+P0NAREE6Oz48QD9DQ0VDOTyCmJmenZ2alZKKiZGRl5GQh4SJgoGNj4+Sj42cnZ+hpKmlqaeorK2moqKfmKSmo6Stsa6yp6asm56em5qjp6Cfo5+foq+qqq2oqKuwqaiqqKGfoKeprbCyr6yjoqahqaWepKOipqClpKKlo56doJ6fpaKinp+imJWemp6fpKGblZigoZ2enJudnZuZmZWen6Oonp2iqKGaoaOmoqSoqaqoq7CxqKWlp6eopKWpqaqnoqWmqKadnqWloqClpaOlpqCjpaOjpaelqamqpKekpqKmp6SrqaenpKGlqKynpqWlo6OopJWdo5+bnaCjqaeopqGjo6mooKiioJyVkZqfoKGmopuXkpCamqCVfHdvfXlmW1tgX1pcVlxoZG9jbmlpYl5QUEA/Ozo4OTg8OzYzNDMzMzc5OTs8OTs7OT49QkBAPTs9ODw9QD08PENBPjo4PT9EP0M+Ojk+PEI/P0FEQjk6gJ6kp6Kem5+gmY+ZnaCWloqGj4iEi4qTl5SRo6Wnqq6trLOys7S4t62pqqevtLKxqq6usbKusa2lq7OssbGpq6+rq6y2r7Owq7GysaKfoqqpp663trS0trOvrKuuq7awqbKxra6npp6io6ObnZyXoqikoZ+eo5ueoZqWnaScm5aZoqefoJ+joJuUlpmWl5qfoJmVnqKamJ2dpZ2gpKeqqaiqraylqaSlqqeqqaqsp6SkpKOimZmhnpqaoaCfpaWYnqSmpKqooqelpaGqp6mnp6ejqKWmpaGkqKesoqekoaalpaOVl52Ym5mVo6elpaSfnZ2lo6Kqo5+amZiXnJyaoaGakJOTl5ibjX93cnZ4aWJbX15cYllgZG5ta25hX2RgUE9BQDs7OTs4Ojk2MTQzNjQ3Nzc6PTo8Ozk9PUI/Pj89PDo/OTo7PD5BRUA9OTtAQT5DPDs5PzlAQEBAQkM7OXuao6OcoJ2dop2Zn6KioJibmJaYkpSQm5qWl7S0rrW4s7S4tre0uLm3tbm4ub28uKqLnLK4vLS9urW7uru4s7q/uLe5u7G3r6iusq2inJ+qsri8vL27ur+0r7GztbS3t6+1tLWysKikop+gl5Wal6SqpqahpKOkq6WlmKGko52goaKooaOgpaGck5mYmJmco56cmpudl5uZlqWam5+hqKmpqKuvr66pqKirrKytq6irp6WjoJyfo6Ojn6Cipammmpyip6Spn6GjoqKgpaanpqSooJ+ipKGjoqiop6OloaGopqalo5mbmJuTj6GknqKfmJiVoJuhpaCfm5udnJuamZugmo2YmZiTkYaAdnh5eGNbUllUX19hbWh1a3BnaWliWVNMQDw6Ozg5Nzk3NTU2Mjg1Njc3Ojw7Ozs7QD4/QD0+Pjk6PDk2Nz47QkZCPDg7P0NDRDw+OT43PkFCP0ZDOzhwkpqblJ6bm52Vl52doqajopaXnpaXl6GblJi+t7G4uba3t7i7l5S2vbu9vcDFtaK7mKC3v7+6wcm0nbu2sra/xcGooLa0urGqrrSxsLG0tba8vL68vL7Guri3ur20r7Wxsbq4t7Kzsqqmpp+YpKSnqKSupKurtbWus6CnqqynqqmlpqCnoKGmoZOWmJ2foqSjnZ6coaChnZekmpmdoKaqqqqtrq2tsLGrrK2sqamrrqimpaalpqSkpqaeo6eppKGcoKKjpqCio5+jpJ2foqWgpJyboZ6fo6GhpaSlqaOkpaKkp6ehn52elpOcoJiZko+MjJeWn5uWnJqdnJqSlpSUmJOQmp2YiouHgIB8gnhhXllTYWhgZnNvc2l0ZGlkYltMSz46ODg5ODg5NzM0NTI1NDY2OTw8Oz08P0E/QEA9Pj44OTs4Njc/OUJFQzw7PD5DREM9QDs9Nz1DQ0BFQjw3Z4yRk4qalZiblZWYm6Knq6aVl5iQlZmhnpeXvrWztLu6ubi5woeYt6u4u8DCxbOjw6e4s72/tMTHvbS7uL62wMTErqCworW2tb2+wcPGwsO5vb/AwL2/xL28ur2+tKeqmLHAvbi1ucCzr6+qqqitp6ekr6eqtLyxtLWor7Gwr6yqoqajrJ+fpquXmqifpaWfoJydoKuwsKyiq5yYm6Cor7Kys6uorre1sq2tqaalqKulpaStqaShn6Cnnp6mqKmmnp+anqGlpqmcnaObl6KmmpuanZ+cmqGcmZ2eoKijn6GfnaWioKOioZSZmpmTj4qLhI2Qk5uPjpiVm5eYkJORkomNl5iYk4uKi32AgIVwYGFeXmpiYm53dXZubFtiUVVcTUc7PDk3OTc5Ojc0NDQxNDM3Njg8Ozs8PEBAPUA/Pj8+Ojo5Ojc6Pz5FRUU8PT1AQkJCQUI7PDhAQ0NARD87NV+MjIaFlouUlZeYl5ifpqellpWVkZebn5ual7mxtrO5vLy5urWqsryxvsG0vMe5uLuuv6fGw7/KxsnIxcXJvMLHx7+xsKe8vL7FxMbJx8XGu8TAxcbAua+9vMC+vrOrqoyzu760tbfCuq2vsLWqq6aqo62kp7G2q7WyrbOtqK6vp6awr7Ktqq+zpKu1qaeopKCgnqmyuL61tbWqqaausre4t7apq7i8ubexr66noqOop6SfqKOfnqCZoZydoqSnp6GelJuaoKGlnqChnpajnZSQlpiboZqflpORlpSin5qenJudoZ6kn56VnJiPkpOPjImTkJefiZCWkZuUmJGRlZaDjJWXlpKLjIh8f4N/amZoYWtsZm51cXJ1cWZeX1xSSUU/Ojo6Nzg0ODw3NjU0MjMzNjU3PDo7PDs9QD4/QD48PTk5OTs6PDw+QkRFPj49QENDQ0REOzo4QUJCQUNAOTJbk4iEjZGKi5GRlZCSmp2fnJOSmJSdnZqXmpW2sbm1tb6+tri1uLO8vMTEusPHwb+0s8XFxr/CzcfLzsvLx8HDxsfIysXExcO7vLzBxcHFxb/DwsbFwLGTvrq/w8K2trqptLO0qauzu7uxn5uxr6ykrK60p6qpqKqtrKmlpZ6pr6uyu7q4u7e5t7O5uLOurLO0qrC1ub3Bur6+vL60urm4u7qysbS8u7q7s7Oyp6Smq6uioaCdmpudmpyXmpuenJygnZaclpuZnZ6io52UnJCNiY6OkZ6bnJWNh5KLmJiWmpybmJybnp6cmp6UjpiYmpSRmZeeoZWYmpKXlJWRlJqYk4+TnZaSi5F+enx/dGtrbmRvbWhxeG95amlhXGdhUUZEQTw5OTc2NDQ6ODQ2NTMzMjY1Nj05OTs7PT47Pj49Oz05OTs7Oz89QUNBQkFAPEBDQ0NFQjs4OUQ/P0BCPzsyV5uQkZCQh4WSjo2IjZCTlZGPjZSUm5STlpqRs7e4uLi+u7C1sri2tbbAw8G+w8LAvru+u7u8xMzEzNDLxsa/xcfLyNTLysjGv7u7vsS+xcjGxsPEw7i0wLe0vMHCucK3t7/Au66lrre8t62co7ewpq20tayupaWjqKSgoKWZqrOxvsG+urm6uLW0srG0tLO6wL7Av769u7u9vsDCt7a3tru7sru+ubi3u7a3tKyoqamrpqijnpOampyYkZKZl5GRmJqXnpiWk5acm5+elJOJiX6GiIuWlJiZkYmVkZeWlZmbmpaYl5idnpyhmJWZmZyYl5ybn56jnJ6WmJeTl5yZmZyUlp2UlpOJdnl6e3Zua2lndVpmcndzeWZnXWRbUlhJRj87Nzg4NzYxNjk3NDQzMzM2NDY7ODo8Oz08OD0+PDo7PDs9Ozs+PkRBQURCQEBBQkNDREM9OTlCQD8/QD89MkyWmpaSk4yKmJCKi4yOkpKKiIaNkJiKj5CUl7O7tba/vb2xtrjBvby0uL/Bsbi3vsHFvbu8wsbJv8jOyMHEwcfKysbKxczIzcbIxb/DwMvNz8rGxMPDwcS+uL7Bw8DEvsHPz87Gq6+2tLWroKe0s66ruLWzq6mjoq2prKatn6y1s7/Cvrm4vbawrausr7W0ur7Fv7u8urO5u7i5ubWtsLS9u7G/vLiytrmzubu0ra2orKyqqaeXnpualY2MmJSTi5WWlJyZl5WWmZKYn5mQiop+iYqKkY6Vl5OUn5mWkJSZmJmWmJOUm6GeoZiYmp2ZmZaenpibopqdnJuYmpuZlpeXlpyZlJyYfoB4eXV1ZWVpamddam9teHdjYmBgXlhXRkU4Ojg6OTc5NDQ5NzY2NTEyMzM0Ozo9Pzs9PTo6PTs8Pjo7Pz48QkBDQkJFQj0/Q0NDQ0RFQDk6QkFBQj5CQTVCkJeUlZmSj5qQjpKRjZSVi4qHjI2UiImPkpq2u7S8xsHEwr3BxcLAtLO9v6ywr7rDysPCvs3IxbfByMW/wcLIy8rCwsTJzM3Pz8zDx8bIycjIycfFycfIx7/Fx8TEx8jK0s/SzLy4trS4uMG+vrq9ury6vKytp6q7urm3wLK1uLLAxrq3t8Gzsa2tqau1s7u2w7a2vbWxt762s7e4sLW2v7uwvbq0q7CxsbO8urOzrqutq62xnaOjoJqQjpiXlZCclpaYlpWSnJmTm5+clpGUjpWQiYyQlZOUm56YmZKSnJedlJmSk5aZmJ2VnJ6do5yVnZ+TnKKcnKCfnaOemJSVl5ebmpmgkH99cXRxb2JhZ3VnaWl0bXhsXWRbVWBZTEhDNjw5OTg4OjUzOjY2NDQxMzUyNTs6PD47Ozw9PDs8PTw7PD49P0E/RUFCQ0M+QEFARUVERUE7Nz5DQkI+Q0I4O4+akZaalJKUjZCUlI6VlI6Pi4yJk4uIkJObt8C6xsXEw8zCwcS9vrWvt7uvr7O6wMfFxMHMy8W2ucDCwsTHytHLwsPExsnFzdDOx8zJwsHHwcvLyMbMys3FxsXDxsXJzdDNz8zHxMDDwsnNx8XBxMfBu760sbCwwb6/wca/vri3w8K6urbAvrWyrKmvsri+tMC0tLi0t7nEua+8vrm+v8K/tbq2q6qsrq+wt768trSura2utaSlqKimmpycnZyeopydmZOQkp2VmKCdmJiVmZmZl46MlH2QkJefmZmYk5GToI6Nko+VjpCUlaKdnKSem56elpyjoKGipKOkop6amZubnJ2enIN9cnx4cGdgamp2bGlldW90Yl1iVFdUU01HOjc7OTk3Nzo3NDg3ODQ1MjM0MjU7Ojk+Oj08Pz04Oz05OTk9PEBBQEVCQUJBQT9AP0RFREVAPDk+QkNCQENBOjSAoZeUmZiVkImUk5aTiZGMlJGOiJaKi5CXnMXLw8O8wMPHwbm9vbu4tre3rrK3uLzAwsDCx8bHurzAwsXHyMbSycHCw7+/vsTLyMrLyby61dbJzMjDyMnJxcXDwsHCx8fJysfMyMfIzcbLz8W3wMDAwLu6vbWzs7+/ub/DucC3u8G8uri7ub27srCvsKy5wri9ube1t7q9xb24xsjCwcLGwr28tamurrCwr7O6t7m2sK+tr7OppquprqannqSlo6OjoqCblZiekZecl5GRlZeZlZmRlJiSlYyYo5qcnp2FiZ+TfJKWlZKUlJennaCipJ+en56foaGkoqKjoaOinJ2fnqOhppl5enl/cnBmZWdkamVham1ub15ZXFZWTlBKRjk5Ozk3Njc3NjM3ODk1NjEzNTI3PDs8QDs/PDw6ODo8OTk4Pj1APz9GP0JBQz89QT5ARENDQTw5PENBQ0RBQDozbKKdlZedlo+PmJiZmIiSjZGVkI+Vjo6TlpbKy7u5urnBu7q3vsG8vLu5sa61uri4u8S6vsC+vru8wMXBxsK+xsK5u8O5uLm8vcHHwca5ysqcwcbDwMTBwsHEwcO+vcLAwMHCy8PGzMvFyNHCsL69uLq7vL63tLC5vrO8vrG5tbi7tryztbm2uba5t7GtusG6vMG/t73Ev8bDw8fHwrvAwr/Cv7iys7O1tLGut7S3tbSxrK2xp6Wlp7CtqJ+nq6ajqKWmpqCgn5SYmZSRkZWUl5OYl5qhnZ6hnKGdoaWglpSbkZeXmJqTnpmZqaSlpKWdoqCanqCkoqOcoqGjoJ6cnp6ppaiVfXuDeG5mYWRiYWJjY2piZ2NbWlpcWVFORT07OTo7Nzc5OTY0OTk6NTMxNDUyNzo7OkA9Pzw8OTc3Ozo5Ojw+QD8+RDxCQURAPz49QkRCQkI+OjlCP0FCPT44NVmfnJiTmZaRlZiYmpeQkZCQk5GTlJKSkpSUxce4tbq5wrm5vMPFwri7ubGxtry6tbnAu7u5tri0tLW/u73Aub66urTAuLW3sq66u7bAudqbfrzCvsC8u8S+u8HEwL6+uLzBwcu+vcnEwMDKwLHBv7u4u766tbe0uLy0vbi1tLCzvLG3tri/tr25vb65t7q+u7/Axb2+y8PGw8TAw762ubq2v7i7v7y4trOyq7CwsrWzs66sq6emnqeurauiqKumpqqjp6iqo5+Ym52bmpicnJiXnJuhpZ2anqGhoKGmoJqbnJiboJ+dnJ+coKeho6SknaKfmqKgop+el6Shop+dmpieqKWhi3x5iH1xY2BiYmdqZ2ZpZWldVlZUWU9TS0U4PzY7Ojc3OTs2NTo7PDYzMTM0MTc7OTg/PT47PDs3Njk5ODo7PUA/PkA9PT9CPjxAQUNDQT9DPTo2PEBBQDw9ODdJlJibj5OUkZWYlZGWkpWRkJGUlZSTkpKYlcHCwLq8ub62uL7EwMKxvbqytLO4vLW3vMC8vbS1sbC1t7W7wbi+ub+8vLe0t6+ut7W4vcnKg4Slx7rDtbrHuLa5u725ura7xcXKvbnFwL+8wb64xr3BwLzFuLa3tLi2tru7uLa0t7q1tLi8vbm/ucPAwLu5vLu+vcjEvcfEw7rAvb62sra4srm0usLCureysaysq62yr7Kur6ijpJ6rrKyqpKakpKiqoqemraihoaGmn6Oiop6bnKKfoKOdnJuhn6KgpKCem5eZn6GdnZ6eoaWkoaGioZ6ho5yinqCZnZijn52eoJqZoKKmnYR6g4B4cW1lZWZvaWVraFhYTktLS1JJTEhDOT04PTs2Ojs5Njc8ODk4NjA0MzE3OTk7Pz0+Ojw6ODg5PDg6Ozs7PD1BPj09Q0E8P0NDREA/Pzw5Nz5CREE/QDg4P4mYmoyMkI+Tl5WMkpCakpGXmJaUlJKQmpTDvsbBwby8uLi6v7a8scK2tLyxtLa4s7q9v768sq2vrLGwt7y3u73BxLm3t7m3uru6u7/RqXt/ibq/x7e5uK23tbi6tLizu8XGy8G8xsDAv728v8nDxMW+xri1srK9uLi4vrq6uby6urS3u7q5v7zEwL+5uri/ubvFxr3Fw8Kyur27sa+2uLO3s7q+wLm2rLGrrqmqqa2qqq6mpKWnrq2ppaOio6GkpaWmoqato6Klo5+ho6Gcmpyhn6CloaCenZygnaWgnpeVmZ2fn52gn6KmpaCknpybn6Ofn5mcmJ2epJyWnKOcnqGcppZ+f4d8a25wZ3Brc2VibV9cVEhLSkRKQkNHPzk7OD48Nzs7OTc4Ozc8PDYyNzUxNjk8PD08QTs8Ojs6OT45Ojs9PUA+RD89PkRAPz9BRkQ/Pzw9OTc/QUNCQEI5Ojl3nJiLh4uQkpOWjY+TmpOQnZiSkY6QjpiSvbfHvsO+vbu+vL22uri9ure9s7OwuLi1uby8wLeqraSvsLa5sr2+u8S2t7emmKemp7bEyIx5foW5yc/CwLiutbW8vri6sr7ExMrFwcrDwr+/vr3HzMfHxMe9tbW2wb26u7/CusDCv7y2t729vcHBwL+8ube8wru3v8W7wr++tbe8vK+vt7awtLO6ubq7r6mtq62rrKaqoqeuqKWqra2vp6Sgn6ajnqKjqKOjq6Oiop6dm5ublJaZnJyfpZ6fnpmYnpejoJyXmZqZmqOjop6jo6egpqCbnaCjnp2WoJmcoKCblJegn6WcmKKQgYaBcWZsaW50bnhjZ2JbY1FLVEhFRUNHQzw7OTg9Ojc6PTo4OTs3PD01MzY1MDY4OTo8O0A9PDo+PDk+OTk9Pjs/PkM8Pz5APz4/P0ZEQEE/Pjo3P0BDQz9APTo4ZqGYj4uNlZKVlY6PlpmVl5uVjoyMjY+bk7m2wbS/vLm8w8C+wLq1trKywLmvsry8sLe7tru8qqqjsLrR07S7vrzFurSObmhwY2t5n6x7e4KFu9HRzMrEtbrAw8i/vrW/wb/Gxr/LxsO/wbzAw8zKx8XGwLm9vMS/wL/CyL3Hx8XFvLrEv7vBv7rAvLu7wMS9t7nCub69t7S2uLqur7WxsLCytre0t6yurKqsrKuoq6Gms6qlra+trKippaOkp5+io6Onoaeiop6cnZyamYyQlpeZnaKZnpuVkp2UoaCdmZ6fmJimpqKfoqKmoqeloqCko6GbnaCbnKKfl5WVnp6kmpafiYGDgXRvbGx0a2xuX2JeYGFOSE0/RUA/REM8Ozo6Ozo4Ozw6OTw+OTo+NDQ1NTE5OTo5PDtAPD89PTw4PDs6PDs7Pz5DPkI+QD89Pz9FRUJBQj87Nj9CRUQ8QUE6OlmfmJOSlZqVmpOQlpeclZuZlpSVkZKTnZm2uLaxuru6vsG5uca7trWypb69tLbBv66zvbS4wbGwsbPEssbZvL27x62OeGNiak5SWmB+eX+FibzKzMvNysbCxMvOwry5vbm5wMO/yMbEwcG/xcDKycPDxMO5w769ub+8wsbCyc7Hxr66xr26v7m3wLm5vsDCvrW0vLi2u7CvsrK1r7Cvrqyus7CzsrirsbKxqrCrq6yrrLatqKyusqarrKmpoaWgpaakrKSmoaChnqGgnaCMlJeTm5+mmZ6emZOYnZ+gnp2eopuYp62ooqSgoKKqpqmhqKGlm6CgnZ2jn5SYmKKdp6Gfm4J7eoh6bW13e19wY1tdX15TST5DRUlCQz5DOz42OTo7Ozs7Ozs7PT05PTU2NjIxODo5Ozs6QTs/PDw+Nzs8Ozw9PTw9Pz5BQUE/P0FCQUVDQkRAPDY+Q0RFPkJEPztTmZuZmJ6dmqCalpyZn5KdlZ2boJWWlJqYur20sLu8wcTCv8XGura5sqO7vbS3xLuwtbq2ucS4tby4vWl3vc6/uK9vWWJkU2xnU1FRW3N9hI+7w8fLyMHDwcDJysLAu7qwtLu9wMXGxcW/wMK/y8fCwMjAusK7urO6usG+wMrOysS9tby8ub+5ubW1s7/Avre0s7S4rbeqr7CwsrKvq6+nr7ausrG5rra2uLSzsLGttrS6sa6srranrLKsraSjoaenqLKrqqWkp6elpaCml5ujn6SmraKeo6KanaWiop+foaWenrC0sKSknp+kqaevp6mgq6CiopqipJ2anqGmp6+psZWCe32Bem5zeHNncF1bXlxZUUVEQ01JQUU9Rzo6NTk7Ojw8Ojs7Oz0/Oj01NDUxMjc4ODs8O0I8Pz46OzY6PTo7Pj0/QD87QUFBPj4/QkBBQkJFPjo1OkFCST9AQkA7TJqdnZ6fnZienZmampySoJWbnp+blZGRlsW+urbDvMbCvr/Ixbe1uLe2ubu0r7e2srWzt7m8u7a7wcB0aX2rvrZwVkpWaklagXdzVFBmfIWavL2/xsC5wLy+xcS9vbmysK64t7/Dx8PDvL2/v8PDvr/HvLy/tLSutbW8vr/OzcvCt7K4uLi9ubuxtrLIwLu2tLGwt6yzqbCtrbS3r6uuqrG1r7Gvt7O6usC/tre2sru6wLWyrbO3rLC6r7KloqWrrK+5s7KosK+xr6qiqKGkraitrLOun6inpqWmq6Sknqaqo6ayuLOrpZyfp6anrquqpbClpaWbpKOYn6exrLW4sLKOhHl/fXZsdXpwbmlbX19ZU1BBRUhHS0BEQ0g8PTY7OTk8Ozo6Ozo9Pzw9NTU2MTM2OTg8QT5AOz1AOzs5PD04Oj08QD46Oj49Pj09PkBCQ0JBRD03NDU9REc9Q0I/PEWUnqCgoJyXmpiYlZmdmZ2fmp2bnJaRj5LDwMK9wrzEvLy7xbu3s7e2tru7s6CWtayvsbS0tLa4ucm/endpf6mXVk9Kd3RNUWx5g3tQVIKJobe4t8K6s7u3u77Au7u8rq+us7K5wcLEw768v7u6uLbBwrW/urWur62wvcC5z8rJw7GvtbS0vbq+ubq7ysO7uravsL2xuK+ys7C3vbaur66wt7CsrLK2vbzEwrq9t7bAv8G3tbC2srGzurGxr6err6u2v7e1qbqztbmxp6uop7ausrG1uaisrK+qr7CqqKessayytr20sayjqKuoqKusq6i2qaaonqadmKOuvLG7wbSmiYF8gnpzdnZ3bnFgX2ZdWlRKPD8/RkY9RkNDOTo1Ozk5Pjw8Ojo8Pj4+Pjg4MzE1Nzg5Pj9BPzs6Pz08Oz09OTs8OTs6Nzs+PT1DQT8/QUJEQkE8ODU4PUNGPUREPzw/iZ2en52Xl5WUk5aZnpubmpuYlJ2Uio6Owb7Dwr6+vrm2usCxtbGzt7fCtbOrrbOoqa61r620trjIwIN+c3GTbE9IXIloT09Pga59XUt4pKixsre+ubK1sry5vLa6vrK0tLSwuL7DxsTAvb+5s6+yvLquu7Szpquorbq+uMvCv76sq7Cvs7q3ub67wMXBu7y3sLXEtb+0uLu0u8PCs7a2sbisqaWrsr23v7+7u7exvL28trGvq6uprbOvsLCrsLSpuMC2sqm0tbC3tq2spqu7s660uMKwsbG1sbK1saywsri4ubi+tLGzrqyxramvrqqyuK6trainoZ6ptr+4ur+wlol9gHxxdHd0dnFsX2NhW11PSEE+PUhDRk1DQDc3NTs6OT48PDk4PT47PT86ODMyNTc2OD8/Qj86OD4+PTw5PDk7Ozo8Ozs6PEA+QkI9QEE/QkI/PDs3OjxBRD5CQz8+QYqgm6GdlJiVlZKYmpyWm5WalY2bj4SIhru0vb+7vLm3s7y8rLOytLS2wLXAr7Kzqqqxt62pubO3xLuMg3t4fmFJYIxqXlFPXoGujl5QTnu2trC2urW0sqy8ubi1uMG6uLOxrLe8wcfDv7m6ta6lrLOwprCtqJ6gn6WttrXCt7a0pairqLC2s7K6tbu7u7W4trC1xLK+vL+8ubrFybq9vraxp6SeoamxrrW5trKxq7S3trGopp6gmaWmpKynq6y2qa+6sa2kpq2lq7GrrKmtuLawsrjBtrGxtbGvu7ayt7W1sry1urKwsbKutLKqrq2nuLWyta2uqqiosrq9wLa0qY6Ce393b3tvdXJtY11mWFxdUk5NQT5JQkFKSUA2NjU7Nzg+Ojs4Nz4+PDs/OjkzMjc1NzU8PD48PDg+Pjw8OTk5Ozs7Pjs7OTw+P0E9PEJAPz9CQD47Njc6QERBQ0E/QUKJoJ2loJSWmJiVnqCcl5uYmZGMmYmDhoS1r7S7u7S1sLG2uq6wtLOvtbq1urC1s7KttrqvrbyzuLrBm4yFiX5TTYieeGpaVmxedYdub3qlvLaxtLWytK+su7q4trrAw7aurqqytry9ubaysa2tn6Snp52jpp2WmZman6muuayrq5+lqKSrrq6nr6yvsbGtsa6usLmwtLy+uLm4x8W8vLu4qaKcmJufp6assq6zqaapqq6popqXl5GcmpijnqKir6ekrKaompqemqGnp6anqa+2squ0trCqsK+xqbm2sbWxrqy3s7avrquuq7S1ra+rq7GtsbKoraurs7W3ur2wq6GLeoJ5cnZzbXVpa11balRdXE9NSERGTEJGTkY4NjY1OjU6Pjg7OTc8PTo7PTo5MjM2Nzc3Pjs9Pjo6Pz48PDw6Ojs5Oz47PTk8Pj1CPDtAP0A/QT8+OjU1OkBFQkRBQEJBiJ+ipqGYm56dmqWpmJudmpmUjJmHhoeGrq2uuLmxsqiur7iyq7CwqrK1ubm+tbK4tLm6trm7tbWzvKqQjZaaTFWKvWR7golnYntqYm12oL64srSzsLGtsLm4tr64u7+ysrKusa65r6qrrayjqKGdnp6XmKGVkpWXkJifqK6ko6Sgoqeio6mpoaanpaqtp6ynqKesq6yyu7SztLm6trK2ramgmpaWm52fq6yqr6Oko6GpoJuTjo+Qk5KSmZaanaSloJ+ep5iVkpSZnqSjoaWqrK2iqaqppKmtrqW0sa6xraqprq+wraWmqqSos66trKmmpqmrpqqnq7Ksr7Oxq6mWgX+Bd3J4aHRzbmRUYGNXXFFOTEhASFFETUM9ODg3NTo3PD46Ozw4OTw7Ozw7ODI0ODk3ODs7PDs4PD0+Oz08Ojk8Ojs9PTw6OkA9PDw7QD5CQEE/Pjk1ODs8RkFDRD9BQYijpqKjnqCfp6Coqpufm5yZmI6Xi42PjKqpqLGvsK2lp6ayr6mmq6CvsLu1vby4wMG+vLy8ua6sr7KwpJqknUxgfo95bHl9Y2Fqa3R5bYKkt7Kts6+urK62trO8ta+qpJ6bnJyeqKieoKipn6GnlpuXl4+dk4+Qlo6Xm6SooKCioqKlpZ2jo6CepaCkrKSmqKSio6OrrLOuqa6urqeqraisoZyamJmYm6moq6ufpqKbo5yVkIyPj5CTkJeVlpifnp6amKaXk4+Slp2ioKWjpqSnoKKko6Ghq6uksq2qrKyno6yuraufoaKkpK+srKmmo6KqpKqqpKmrpqmsq6agiHiDfHZ/eWJ3bG5cUWhUUE5HUE1MQk9RQD47PjM5OjU7OT07Ojk9OTk8Ozw8OzkzNjk5Njo7Pz06ODs6Pjw6PDs5Oz07PDw9PjxAPT88ODtAQEE/Pz45NDk8N0FDQkQ9QEOOqqSjoqGinaulpqimoZ6dmZ2PmJWTkJWnpKGmqKmlpKChp6uhnKKbp6u1sry9wMLCwL7AuLSnpKyptL+zs29hhW9paVdjXV5TVFljYVxxe6K2qrK0rqqrr7Cyta2lnpKYlI+YoJ+ioJykpZ+eqJSblpeMl5GNkJeTmJ2iqp+fn6Cjpaicn6ChnKKfo6innKehoKSfrKisrKCpq6agpKimrKOdnp2Zl5qrpqqxo6WonqCclZOQj5GQmJCWlZiXn5ibmZqjmZeUlpqdoJ2nqKWgo6Kho56doKmqpa6upqipoaKqrqqnoaCio6msq6eppqShqaKlqaalpKKmpKijkn18gHV1fW1re2RoVVFjTUpIR09STUpORzxFQD0yPzc1OTs+Ozk5Ozg6PDs7Ozk5NDg7ODc7Oz48Ojk8Oj07Ozw9OTw8PD49PUE+QEJAPTc6P0FCQEA/ODU1PDpAQ0BEPkFGlq6koqWeo6KpqKipqqWmnp2imJiZmZWbop6bnqOioKOgoZqgmJeXlqGorK62t7q5ure3u66ooKGooabDw5BVdW5mb2ZXW1FIRUdJTEtOYWV7s6+vs7WqpqyropyZlI6RlpeZmZygoqKcnaWemqSXl5eWkJKRkZOal5ugpKqeoaGepqeqop+gp5+dn6SnqZ6jpp+qnaqtqq6nqLClo6Smp6ymoaShm5ier6iusqulqqqgmpiYmJWTlpqTlZWalpuXl5ihnpycl5uhmp6ao6eln6GioqOdm6Gmp6aoraOppZ6kp6mkpaWhpaSsrKmmq6eioKSjpKenoaCgpaKmoIl7gH12eHxkeXlgYlJVYElJSktTVElSUEw5P0I2Nz02NTs6PDw5Ozs4Ojw9Ojs4NjU3OjY5Pj0+PDk5PTk9PTw+PTs7PDo+PTw/Pz9APT03Oj5AQEA/Pzg2NT08PkFCRkBAR6CupKaroaOqrK6tp6ypqKCipp6bm56aoJyalZmfn5uen56WlJOXk5KcnqSorq2sq6uvqq+pnpeepZ6du7KDfWFfbWFUSEZRS0lESUdFSlVZXKWysLC4rKahnJ2alJeampCOkZWRjI6OlJminJejmZqXmJmUmZiWnZufpaapoKajnqeurqumorGjmqSmpqqioaqiqaSosquxsqu5qKarp6urqaysp6Cgo7GusrG0qrKvopmcnZ6hmZubmpiZm5SWm5aZnKWhoJqjoZqdmZ+kop6gn6KmnZulpqWkpaijp6OepqOinqaloqWlqKykpq2noJ2dn56gpaGenqWgppmBe4F8dXZzaIJsZVtTWllNUUpOT1VMU0xBNz5CNjg9NzY6PDw9Ojw5ODo7PDo7OTc2Oj01OTw7QD03ODs3PTs9PT06Ozw4Pj09QD5BPj4+ODg8P0BAPT43NTg9Pj1BQEZAQUihqqCrq6GkqquwramtqaelpaWkoKGfnqWXl5SYmZ6YnJ2blo+VmZKRnJihnaqip6Cep6Gln5ySm6KbnqOnoX9naF9UR0lWfX5oU0dDQkZMUFOKsa6sr6efnqKgl5GTm6CcmZeSk5+coaSbnpuWn5qfl5uinqWhnqSfpKitraisqKSstLe2sKe0rKKtraOvpaSmoamorrWzsr23vrCssa6tqaq0sbCoq6iytbezuK2ytKSgnaWfrKGhoqCgmpiWlqCbm5ikoaCeo6GgnpqcpaCfnZyhqJ+fp6meoaOkoKagnqehn5ymo5+ipaOooKmrpZ+dnZudmqainpyjnqeQgYJ/fHh1aXd1XWxaUmBIUlVIRlVWSkJMRz1LSDhFPDY3Oz49PDo8OTg6Ojs6PDk2Njo8Nzs+PT8+OTc9OT47PEA8OkA6OkA/O0A+QUA9PDk3Oj5APzo+NzU4PT0/QUBEQEJGnKueqamipamprqimqqWmp6aoqqGlpKOmkpOVmJacmpqcmpWTmZuNk5+ZqJ2un6eenKGdnpqZkpiem6GhoY93altRSkZMcaCnoGxORUJAP0JUg6Crqqmkn5+ZkpKTmJiWlpWMiIuOlZ2dnZ2elp6apqCgqKWxqqeuo6uttrC0srGutri9wLqttbSwt7CutKmmpKWsqbmztbvDvMPBtrq2q6+xube8r7OwtcG8t72zs7WirKKpqLKpq6inqJqZnpqqp6CZp6Cfn6eopaSfnaqhop6bn6igpKetmZ+jnp6nnqCmnpycoqGbo6KhnZympaWkn6KZnJukn6CboJyjiYWEfnZxbWl2bWhtXFhbQldOSkdNR0JGTTw+TD00PDk2Oj0/PDs6Ojg4PDk6Ozs8NTQ6PDg5Pj4/Pjg4Pzk8Oz0/Oz1BPTo/PjxAPj8+Pz08Njs/QT07Pzg1ODw8QERCREFCQ5WqoKapo6mqqKmjoamgpqinrK6lqaWpqpSSl5mUmpqanJiYmZyamJmqoLGit6Swpp+enZ2XmJWZnpqcpKB5Z1xSTUtKUo3Z2cCPdWRWSURTkayoramqpZ+enqGinZ+dmpyclJOVlJ6emJSFnZqhm6ukq7KwubKysbKxur28vLm2uMO+v8K/trq7wMS5vbusr6exrbHCtrjCxsDIysDKv7C5ub25wr64s7vGw7zDvLezqbOtqrO0r7Ouqq+jnauntrGtorCmoaOvsa2wpKWvo6GgmqGnoaSqqpmdoJmao6CmqKGcnqKemaSenpiYo6OhpZ6mmZuipJ6fm5ubnIeFgXt0cmtrdXJwaFdbUUVUSERKUEk/RUE0Rkg5NTs9Njs8Pjw8Ojo4OTw4OTs4Ojo4Ozw3Oz49Pj02OEA5Ozs9QDw9QDk3PD07Pj0+PUI+Pjc6QUA+PD45NTg9Oz1DQEFDQkGRqqGlqqelqqimn6KnnKasp7Gyq62jqayVkpWalJecoqGbnqCinJ+psqu7sr+rr6ylnqCgnJyYmp+fmqCeblZOTE5NVmeh0Lugl7imkImYrriup6OjoaCepaulnpeclJGZnZiUjIqGiIZ5bYigpKKrrLS8tsO+vrO7wcPCxcC/wsbGxcPIwsDFx83QyMvDsre1vrK+xbu+zM3FzMzM0se+v8DDvsfGwrfDycnCwca+urS6urS7t7C1sqq6sq67t7+7uqq3rauquLq0vK6uuaOmo56mpaKjqaaZm5+Ymp2nqqegoaGkmJSjlpSZkZydn6Sep5+en6KdmJmUmJSIhH16cWtjaG94amRaW0ZLTEVEU0xEQkU3Oj87NTQ5OTc5Pj87PDs7OD48Njo9OTw9OTw9Ojs9Pj4+NztBOj45PT45PT44Nzs6Ojs/Pz1CPj83OkFAPTw9ODY2PDo8QT9BQUE+kqugp66ooqulpKKipaGlqquwsq2upKmmlJWWmpaUm6SmnaGqp6KrrLy8v8PBsrK4p6Ghq6qhnJ6hop2clWBORkpMVmt+p7iqhozU1sa/t6ifmpybnp6Zl5eXkoyOl5eTjo2Qi4KDgndzcW5wj6atrrS5xbvNx8u/wszOzczHydHMzczHycXFzNDS1c7Tyb3Av8O7xsXIxdHUzdPQ09PMysLGxsfKyM6/yNHMx8XHxcG8w8G+v761vrOuv7/Cw8fEx8Suv7iyuLzDwcG6vLy1rqenraigoqmlmpagmpmdqKupo6SknpePm4yQmYmVmJugn6OdnZeempOTi5WPhYB5dHNlYmdyb2ZeWllDTkxDRVBJRENANTU1ODpCPTY4OkE+Ozs+PDk+PTc6PTk6PDg8PDw7Pz8+PD0+Qzw7OkA9Ojs6Ojg4ODk7QT48QD8+ODtBQTs7Pjc4Njo8PkI+Q0FAPpOvn6ivpqiro6KloKampKuoq62qrqKqo5Kcl5ebmJuirJ2frqalsarFxszOzb+wwaikqKytqqCdo5+cnpRcSkJITGh5qbihkH+xy7uvqaKenJ+amJaUkpSWkZCPjIeEg4iHg4CBgYB5cnJvbHmktrq5vsvB09LTyM3O0dPR0tHQ0dHNzs7Qxc7U1djS183Gx8nMw8XKz8rT19HX0tXW09PIzMfMzcnSzc7TzcXIycrBxsvHyMnGv8Ozs8jEy8rLz8bKv76/vcHHxMzMyMm/w7+tr7OonqKqo5qTnpyYnqaprKSlppaXipWFkZSHkpKSmZualpiQm5WQjIaRi4B6cnV2Z2NndmlkVldRRE1GQElRQj1CPDoyMkA8RDw3OTxCPTs9Pzs7Pj05Oj48Oz44Ojk5Oj86Pj1APkA8Pjs+Ozk9PTw5Njo6Pj08PEE/Pjk6QEE6OT44Ojo6Oz4+PEE/QT6QrKKiqaanqKSfop2qqKOso6OnpqyiqZ+To5iWn56dpK6bn7CrqKyxyc3U18/Gu8esrbO3rK6jnqOinaCibEpKTFV1os3Su6Gks6qjnJycoKSgnZqUlJWUiXx3cGtlYmhxb3F7hYqAdnBucXRwhbPCvsXR0NbW1tLWzdTW19TT0dPU1NPP0sPQ09bY1dbSy8nO0cvGzdLK0tbW2dXX09bYztLKz9HMztDM0s+/yMfKw8zMzM7PxcbHtr/Kv9HNy8/Gyci/w8PIzszP0M/NysfNuLe7qJ+lq6eemJ6jnp2qpa2pqKiSlYiQhIyRho2MiJOVmZCWjJiSj4aHjIR8eHN2cGNgZHJiXVJcSUpHQUVIST47QTg9NDU4NTs4Njo8QD07Pjw7OUA7OTo8Ozs8Nz09Ozo+Oz08Pjw/Ojo8Ozs5Oz89OTU7PD48PD0/Pz46O0BCOzk/OTg7PT0+PzxBQEQ8hqugnKegp6Oim6CbqaSlqaCfoaGmn6ifmKSimqmmoqarmqOwsamotdDU19rSx8bLtLXBxbG1qKGkpaChrIFlcnaQs9Hb0b2vqZmVmKCcmqCgnpucmZWJd2ljYF9fX19eX2BeYmx1c3Fwb2xycXWSxMfG1NXW19fT1s/V1NrU1M7P1dTU0dHM0M3T19bT1dDP0tPRydPRyNDY19jR2NLX2dXWzM/Pys3Sy87QwMbCx8XOzdHR0cjMzcDKzMXTzsvOyMTKx8bIzMrT09HVz9LM08G5xbGlqLWup5uorKWdsqiws6ysk4+TjoiKj4OPi4SQjpmNk4+Zj4+ChYx8enFzdG1hY2ltXlZQX0pKQ0ZDUk0/PD41NDo9NTI4NTU8PEA8Ozw6OTpAOjg7Oj46PTg+Ojo8QD08OTs9Pzk6Pz07PTw9PTo2PD0/QD08PT0+OjxAQjs5PDc0Oj48Pz89RkFEPYKknKClnaWlo5mcnaSeo6OfnZ+doJqnnpyhqZ+vraqqq52mrreoq7fX1NXZ2dHO0L+8zMm2vq6mqqihpaGCipK00tLVwq2moJeWmJqbnJ+dmJydk31xZWNjX19hX19hYF9gYF9gZm5wcG5rb3J3d5zMwdLV09jY1tnR0tLXz9POy9LN1dTSys/M09bS0dbNz9XV0cXR1MrQ1NXWztLQ2NjY18vIzsTJz8zKzMDJv8fJzc7Py9DNzszOz8jL0NDKzsrCycfJzMrL0dLM09HRz9DKvci5sK67uLWqtrCtqLits7+7sZqPn5SRjo2IjpCFkY2ZjJGRlY6RgIWIenZvcG9rYWRucGFXXFpJRkZETVdFO0A9MzM8PTg3ODY1Oz5APTk8PDg8Pjk8QDtAOj04Pjk4Oj88PTg7PkI6Oj08OkE9PTw6Nj08P0A9PDs9Pjg7QEE9Ojw4ODs+PD4+OkVCRT6Bn5mlp6Cfo6eam5+cl56eoZqdmpyappufpKefuLa1taykrK6+tLDA2NLX2tzWzs3Kw9LPwcCwqaytqaeBbIiHwNXMsJublpSXm56en5yUlpiUiGteXl5hZGJgYGFhYGBhXl9fXl1ibXJvb3J0dnZ5pL7L1dHW1NPY1s7O1MvNzsXOytLSz8fOzc3UzM7TzcvX1tDM0dTLzNDS08rO0dXS1dXKv8nBxczCyMnCzMPFyMrKz8rNzNDN08vGyM/NyMfLxcbBxcrMzc/RxtDOzc3Mz8XHwbi5vcPDvcO5s7K+sbvDxLWqmKWimZaRlZWSi5SNmpGUlI+PlIKJhXlwcWttZ2BgcGhYWGhWTEZMSVBQQjtDPjs2Nzo4OTo1Nz09QDs6PD05PD05PT06Pjo8ODs9OTtAPD47Pj5BPDk9Pj1CPTs3NzU/PDw/PDw7PDw4O0FAPDo8OTs7Ozw9QTpFQUU+hJ6bqK2epKSqnJ6fmJKXm5+am56ZmaKVoamppcTCwb+7tbKxx8K4y9XV2drb2MzMz8jW1cTCta+0qKCsamh+k9bQqpWOjZiWkZOSkZaWlpCLfGVhYmJgXV5hY2JgX2BgYWFgX11bXWdycXFyc3FtcnmkxtPPy9DP1NXJxcnJxsa/w8bPzsfFx83K0sjLzs3G0dLQzszUysfLzs/Hx8/Sy9HPxbrEv8bJvcLHyc7FwsjAx83IxMzKy8/IxMTQyMbCxsjEvsDHzMvLzsLLy8jHy9DExci7x8PJyMLPwb28v7DByce5vaqwsqelnaKcmJCbkKOZl5mRlZiJj4J3b3Rka2BeZnBhW1dgR0hIR0lNVEc/Sj02NDM1NT08NDg9PT06Oz08OTo7OT89OTw7PDg6PDo6QD1APD09Pjw6Qz48Pz04ODk6QD4/Pjw7Ozs7ODo+Pzw7Ojc5PD49Oz49RkFDPYOgm6qupa6qq5qdoJeUjpedmpmgmpqcm6WysazJzcrIxL68us3NxtDV1dna29jQyc/P0dPIwra7u62lpV9td6rUqpCOjpeQh4SEhIJ+hYV/c2BbXl5eYF5gY2RjX11dXl9gYF9bWlxga3Jyb29rbG9vfbjRyMnKz8vNxLrAw7u7urq+ycbCw8DDyMrJyMrIwcXMxsjLzcnEwsvJwcLM0MXMyL+5wbvGx76/xs/Lw7/Du8nHyLvIxsXKwL3Cy8bFxL7GvLzAw8XMxcW7wMrCxcfSxcHJv8rJxsjG0MPDxsOvxMvHw8q3v7y6tKmspKWYn5iso6Glm6Ogm5R7dnN0ZmlaYW5sWltYUkRMRkJHRExERlNANTQzMzQ/PDM6PDw7OTw8PDg7PTtBPTo8Ojs3Oz05Oz07PTs6OD4+PEI+Oz88OTk7Pz07QD48Ozk5OTk6Oz06PDo2OTw+PDs+O0NCRD5/pZypsqm0rrCdnp6YnImUm5man6Kfmp2ov7i8ys/RzMfCw8bNzs7M1c/V2djZz8vSzc3OyMG1w76yspVecHe4tI+Lk5eHe4GFhoB2eHVycF9bW11gYGJjZGRlZGBcXF1dX15gW1laXGJvcm9raWxwb3OPxrzJxczAxsKxtrqysrOyscK8vLy6uMHBwsW+vbm9v7nEysXGwr3GwLi7xMm/wsm7t7u6xcO/vMHNw8a9vbXBvcO6vca7wrqzvMXEwcK2v7a1vb+7zMO8tbrIur++y8TBxsLGycbIxtDGwszHssfJw87NwcXDwL2zt7Cyp6ioubClrbCqrayUeXZ3amRnYGhvY1ZeWUpGSkZISkFFQkVJQDk6NjQ4ODUzOzo7PDk8PDs5Ozk6QD46Ojw6Nzo7Nzo7Oz88OjxAPUA/PT8/Oz07O0A8Pj4+Ojk5ODk3ODo8PDw7OTo8Pjs7PjpAQEU+fqygrLWqt7SyoZ6fl5qNlJaan52mop2et8XCxMjO0crKysfNzc7RyNDG1dTW183Kz8XJxcfBucW9q6+GYHODsJKMiYuFeYGHh4B+hHx0dGNbXF1eYGBiY2JiZWViXV1bXF5cXl1aW11daHNxbWdnbnByeZ29zMDDusG4rrCwp6qtrKe4tbe0s7O0vLa9sbewta+yu8K8wcS8v7q1s7q+wLjHubS7tsHCvLi9xsHDu7Wusra6v7TEt7u1q7i9vcC9sbq2r7a6s8W8t667v7W3tMW8vsPFwMPFxsjLxcDGxrvIy7/PysfDxsLDt8O9vba5vse/rLW6tbe2jnl0eGZnZWJrbl5WXmBGS0hISkZCREFFRT88OjU2NTYzMzs6Oz06Ozs6Oz44PEE9PDo7ODc5OTk7PDo+Ozk+Pz1APz5CQD1AOjo+Oz89PTk6Ojo4NTY7PT48PDo7OT49OT86PEBAPIi3pauzsby8sa2foJmUlJiXnqujr6qnpMbLzcjFyM3M0MzNyMrIysnKxNDN0s/NxcfBxcC+urjJtamxhmhzk56MhomKe3l+hoZ3eIJ9dGleXV1dX2BfYGRhX2RlY19fXFteXF1eWltbXV9scG1oZmptbnJ8pMe/uLi1sKusp56iqqeeq62zraqsqbSvt7Cyqa6mrLK8urbDubq6sau1ubu0wrqwwLG+vLu2u8e5wratqqiwssC2uL2wsKeys7W7vKuutaWuta67srCpubCtu667uLvAwL25wr/Hw8XBvMbCyMu4xcfFv8bDw7rExsK7xsnMy7O5wry7s4hzdnZraWFibGhZV1dbQUxLTUlFQUM/RkE6OTo5OTU4NTQ6Ojk7PD07Ojs+ODtAPD05Ojc5Pjk7PDo4Ozs6Pj45QT0/QD87Pjo7PDo9PDw4OTg5NzY4PDw9Ozw6Ojs+PTs/Ozs+QDyKwKuouLe5w62zqZ2ZlJaZoZymsLWxt6bFztLLw8XBxc/HzsHDxr/ExMPDysHJyr6/vMC6srS0w66pr4lrY4mTiI6QfHh+ioV6e4SBd25eXVxdXV9gX19kYmFjY2JgX11bW1paXVpaWlpcZW5vaGZnaWtucoGtubC1rqalp6eaoKWhmpylq66kqKKsqqyqsKOmn6qttbaxvbmvt6+prri0tLy4tLyvuLm1srvBssCupamiq7Gys6i9qquoq6yttLOmqK2hpK+psqanqK6mqLessbK3urq7sry9vr7Ev7XCwcfIt7/AxbfEwr+7v8TCvsTIzMq/vsTAwKmHc3RyamldYW9kV1ZYUEhZUlNLRkZFPj5AOjc4OTc3NjQzNzo5OTo8Ozs8PDc7PTs7Ozw4OT44PTs8Njo9Oz89N0E+P0A/Ojw8Oj05Ojs6Nzc3ODg3OTw7PDs5Ozo8OTc5Pjw+P0E7jMKvrry3ucSwtrCbmZWcmKqpsLGztb2vxdDPzMPIurrLwcu+u8m2vcO+usm3wcPBtLW7tbCutLutqKiKY2eLhIiLgHt+gH54dH98c3dlX11cXF5fYF5fY2NhYmBgX11dXFpYWltbWVhaXF9ma2ZlZ2Vpa29yhaqlrKWgnKKllJ6km5iSoaOqpKKfpqWopa2gnZylpqyyr7a3p7CrqKq0q7S6sba1rra5sq+6urG2pKCkn6axp6uouaqkpqeop7KtoKemn5ukpqyen6ejoKGxra2ssrSztLC1vLa7wcGyur7DwbK5ucOzwL2/tbi7vb68wsfEwsO+wMSgg3hwa2FmX2tvYFRZXkhOZ09USEVKRjw9Pz06Ozs4MjU1MzY5OTk7OTo6PDo3PD88PDs8ODg8OTw6Ozc4Ojo8OTg+Oj89OTg8Ojs9Ojc2NzY3ODg2NjY7Ojo7OTo7PDg1OTw6Pj5AO43ItLW9uLrAur21oJ6VnaGmurars7O7s8TPyMvCxri3x8HMv7jJt7vFuLPEuLO+wKu1u7GrpK6yrKCijWF7h4aGgXx5dXRvbWtqanFpXmBdXFxcXl9fYWNiYGBgYF1cW1xcWFlYWFhWWFteX2RjYmVnZ2dqbW+Inamgl5aboZabopiWjZ6ho6ebn6CkpqKonpuim5+rsKyxtqOpqqqsrKS0ua23sKyzta6yta6wqp+dn6SisqSmqbitoqamn6isq5mfoJ6ZnZ+lmpmjnJudr6mrp6qsrK2xsrivuLm7sLa7u7qrs7O6s720trGxtbS/tr3AvcPBu7u9l4N7c2tfZV5kZFhUV11JV1xLUEdJSUZBPD8/QDs/PDA0NTM2Ojs5Ozg5OTw8Nz4/Oz07Ozg4PDg5ODw3ODo7Ozo7Pzo9Ozc4PDo9PDc0Nzc2NzU3NDY2Ozc5Ojs6ODo5ODo7OTo8PzuJyba4vru3wcHBtKSkmZqkpsCyr7astLfGz8jIwMa7u8TDz765x7i3vreywbSxu7uruLmwoZ6oqqaXnollg4WGf3hybnBua2JeYmZmXV1eXV1dXF1fYGFiY2NiYV9cW1taWllYWFdXWFhYWFpeYmRlZWZmaGlrco2nnZSVlZuYm6KWlpGcoqKonZudpaaippygoJuZrq6trrKgpaKuq6eitbGysqyor7KnurOmtaCinpujoa2joqq1qqKjpp2mpqOWmZ6XmZudoJqXnZ2dnK2hq6ekpKatq7O0qrWws6uyubSvqq+ysrO3s66prK6yuLC6trq9v7ezsZSFeXVlXmVeW1lWU1pVS1tRS0lFSEtJQj0/QUFAQToyNDUyNDk5ODk7OTo9PDY9Pzs8Pjs3Ozs3Nzc+Njo+Ozo4Oj07PD06Ozw6PTs4Nzk3NDY1NTQ2Nzg1Ojo4Ojk5PDg3Ojg5PkA6gci9t72/tr68v7KdpaSYpbHCtba9rbS4wszIxr/FtsG/x863wMS9s7m5sr+2sbi6rLG0rZ6Zo6ifkpp9aICDhH94b3F0cWlmZGhlY1xcW1tdXVxbXmBhXl9fYF5cW1pcWllYVldXVlhXWFdWV2FkZWNkZWRkaGp2opyUlJCVl5egl5mVmKCeoZyWoaKppJ+fqZ2cmqunr7Cqm6OkuKqhoK6otqqmp62wpLiwpLegopuZmaqmoZqsuLCioaScop+fk5ShlJaWm5iXlpeclZ+qnqqkop2jqqqwrqi0q6qnrbKwpauus7GwsK6vpqensq6xtLC8tLm3rqOUgXl1ZF5hVllXU1JUS01eTE9LR0dMTEU8QD48Qjw7NzY1MzQ5ODg5OTo5Pjo4Pj47PTw8Nz49Njc2PTc7PTs5Nzk7Ozw+OTk6Ozo4Njc2NTQ1MzEwNDU2Nzk6ODo5Ojo3Ojs5OT1AOnbAvLS5wrG+uL2unaeoo6q7wL3Aua60uMHMx8XCw73Ft8jMssHCwa28u7S7vLS4ua+ur6ibmKCnk5CKdHuAfHdxaWxydHBpaGVkZmJcXFpZWlxcXF1eXVxbXF5cW1xZW1taWFZXV1ZXWFdXV1ZbYmNiYmNiY2RmaoGWk5WMkpSUm5mdlpacoJyglqGgp6akpqefnZ+moKqvpp+ipLeooaGiqLSipailsKWwrau0nqCdlZWpoaKUrbGxn6KjnZ6Ym5OLoZSRk5iYkpeXmJeep5ynoaKZo6Wlq6SlsKelo6urraaprq+uq6iqqbOlpqyvtLGvvLWxr66gknp2cmRhXFpdWE5MUkhSYU1WUE9KTU9FQkQ/OT02OTo3NjQ1OTk7OTg4Nzs4OT0+Oz47PDY5Ojc7Njs3Ozs6ODU6Ozo7OzY8Ozg4NDc4NjMzMjEuLzI1NTY7Ojg7Nzg3Njw7Ojs7QTh4u7uxtb2wu7G4rJ6lp623u7zBxbqxubXEycnAw8bGx7bGxLPCv8Wqt7e9tr26urWyq6ymmJeeoouIcn2IfnZuY2JmaWhmaGpnam1gXVxbWlpaWlxdXFtcXl9cWllbWVlZW1dVWFdVVFZVU1RSVWBgX2BhX2BhY2RpgZSTiZGPlJOUnZSVl6SZoJedoaairaakpKOjopyqq6WZn6WxqqChnaWrnaehnq2sqamtrKGiopWYo5uckKupsJufop+el5mTiZ6RjZKTlpCYmJOcoaOdpKCilaCipKabo6uloqSqpKuupa6yqaalpqa0pqmorbO1tLm6r6msnotycG9gW1dWVVJHUE9IWltPUklUS1NMRUZJQzg7Oz08ODY2Nzo5Ozo5NzY5Nzc6Ozo9PDw2Ozw4PjU5ODo4ODY1OTo7PDk3Pzw5Njc4NDUyMTIxLi0xNDI2Ojg2OTg1OTg5ODk7OUA5e7W0rbS7srCrsq2dqKevubmzwMi6tcCvxcjMusHKzMi1yb2xvsTJrLG4wbW7wLu0s6ippJSZmpuIfnCHg3t0aWlpbGdqa21ram1lXVxcW1tcWlhaXVtbXmBgXFhYWllYV1hXVFZWVVRVVVJTT1FZXVxdXl5fX19iZG2OkISRh5CRj5mTlZOcm6Ocm6GpqauorKeopqSZpa6klJmlr6mfm5mboJ6umZyrs6Clpp+io6GVk5uWlpKpqq2anKChoJqUkIyZjoyRjJGNlpWQnaGgo5ybo5WboKOhl6Koo6Koq6Crr6Ott6Wjo6Ksraqoq6+zt7O+tbOrr5iEdHNoW1hYU1VRRVhMUVtYTVROUExQUUlOSUI8Pz9BPzw2NTc5OTw8OTg3Ojc5Ojs8PT47Nzs7Oj02Nzo7ODk3Njk4OTo2Oj05OTU3NzU3MTE0MC0rLzQzNDk4ODo6ODo6NzQ4PTg/OX6zraiztq6pp6+um6moq7e2rLvKu7a/rMvGxbjBzs/Is8S7t7vDyLGtuL+3vL26srOjp56UlpeVhnhzgHZ3bm1obW5tcGdnaWdkXVpbW1tbXFtZWltcXF5fX1xYWFlYV1hXVlVUU1VWVVVTU05QUVlaWlpdXVxeX2Bkfo2Bi3+MkIqSjZeRl5mioJugq6qmrqyor6Spmp+soJWWpKinnZeQj5qerpaYqKqZn52UpaCekpCSkZOVp6ulmpmZnp6VjYyLk4aJjYOPi5KVkaCeoaOXlZ+VmqGinpSbpaWnqKigsbCmsbynn6OstKuup7C1sLm1wLGtsauQfXJzYlZTVk5SSUZWUFJRTExXTUpMTlJHTUpBQ0ZEQz5ANjU4ODk7OTo3Ojo3PD06O0A+Ojk7OTo/NzU5Ojk4NzY5NTg3Nzk7ODU1NzY2NjEzMjAtKi4xMDI4Nzc7OTk7ODk0ODs4QDh/s6ymsbeqpqKwq52qp6mysaW2xrS5urPKxbm6wcvQy7G2uLy+wcOxsLK3rbSzurKxoaGam5eWkoJ+dmtnbG5xbnFqcGtkZWdlXlpZWllaWlpaWlpaXFxdXFpYWFhZWVdYV1VVVFJTVVNWVVJOTk5SV1hZWVlYXFxdYWqAen92iY2HkIqXiZSUmJuZnqmboKqmpaudqJqhpZuTj5+jm5eXhYSSm6OPlKOdlpaWiKKbm5OLjoqQmqSnnJWVl5uRkYeUjouBi42AkIqSkpKgmp+ilZSYmZWippmNmaSmqKahn7SyqLK3oZyit6yqraSysqa1vLWsq7GjiXhzbV1OUVFMT0NNTk5QS0ZOTkpKTk1RSU1KQUdMSEdDPTg1ODg4OTo7Njk6Njg7OTk+PDg6Pjk7Pzg3ODk6ODg2ODU3Njg4OTc0NTc3ODIwMzAxKiktLzEyODc2Ojk5OTk4NDk4OEE3d7anpLaxpaejqaWgqKWls6qissO1tbKzxsa3usPKzMazrLq9tLfAr62psJ6mrbmuq52YmZyUkoV6gW1fX2ZycHZxaW5pZWdoal9YWFhYWFlZWVpaWVtbXFxZWFhXWVlYVVZSU1JQUVRRU1VRTU1LTFNXV1ZYWFlYW11hb3N2cYWIgoiAkYSPi5SRlJ6hj5uco6GjmKWXopyVjYeYmoxzjYN+jZeWhpGZkJSOjnuZj5yMgol/ipifo56Qk5iWhY2ClH5+dIqOepCHk5CQnZqZmpGVkJ2OoqOOiZqgoaSkm6K0r6yvrJ+YpbimprGhsa6csLyqqa+qmYJ3c2NWTVJPUE1DU05MUU1CUFFISU5STUhKSkNKTEZLSzw3NDk4ODg7OzY5Ozc6PDk6Ojs3OT85PkA3OTo8ODk3NjQ0NDU4NzQzMTI1ODUvMDEwMikoLC0xMjc2NDc4OTo6NjU6ODdBN3i3oaO0qaalqKOmpaamprOnprTBuLC0sMnEt7nBzsW+s6y6wautw62ooqaSnaa1q6GcjpSVkY58dn1lV1ZfZ2ZpZ2huY2poZ2JcWFdYWFhZWVlZWVlaW1tbWVlZVldXV1NUUE5QTk9PUFNUUk1NSkhOU1NTVFVVV1lbXWlscm1/hXx0TlhykIOXho6dl4uUkJ+YnZWUlpWPlomAk4lfO1dvfIuUiYCMkYyQhoZzioWWgXmBeoWUnZSDlY6RkIOGfZN4cXCFjX2JgZGNj5eamJOKj4mciJ+YiIeWnpqhoJenr6mtqKiflq2zoqaumayrmKi0oqmto5N9cm5gW05TUlZMRFRKUE1MRk5PSUVMUU1LT0pJTU9GSUk8NzU5OTk5OTo3Ojs6Pj44Oj09Nzo/OD4/NTg5Ozc5Njc1MzMzNzYwLi0vMzQ0MTEwLy8oKCsrLTM4NTQ3Nzk8Ojc5Ozg2QTl5t6CjraGmpqqgp6moo6qwqKe0wbmxtbDHwrezvc+/ua+utcKnqsWpo52Yg5SbrqCYlYWTjoqGe3J0XFFMUlVZWlddXmJnY19ZV1dXWFhYWVpZWFlYWVpaWllYWFZXV1VTUk5MS0hHYlxNT1JNS0hGSE5RUU1QUlRWWFpgbXBpe4J0UEJAf5WRkX2JlI2Eio2bjZaViZKIhpWGeYh/YEpRbniKkYR9hI2KhX9/bn5/lHd1dXeEjZlwUY2IioZ7fniUdmh3hoh9iomVi42RkpaLhIqIlYSajIKEkpuWnp2UpKOoqaWknpuwqqGkpJGmqpaiqpyipqiJdG1nXltIUVFSTUlVTVNJTEtPSUhGSk5MTVRLUVBPRklDPDc2ODo4Ojs7ODo7OD4/OTk+PTg7PDY7OzQ3ODs3Nzc1MzQ0Njk2LzMvLjEyNTIyMS8sJykrKiw0ODMzOTc5Ojk5Ojo6Oj85d7abo6edn6Kvoaeopaeor6yqtby2uLezwbu2p7nIuLaoqLW2qrK8pp6Vjn+Jk6eVlIl9jYOBfHZvbVhNS01OT0xNUVdbXFpYWlVVVlZWV1lZWFhZWFhZWVlaWFhWVldVU1BNSkVAQJtrc3NJTUtERERJTk9oWU5RU1RVWm6DdHd+amldVY+JlIl0f4eBfIWMk4GSmYuPe4aPgHZ/eHNudXB0jY6Ben6Kq4V5emh2e45wcm14gYuNknh6gHuBdnJykndndYSEhIR7lYmIioyLgH+Ei4yAlIN8gY+YlZyVkZ+dqZ6foJ2gqaWfnZiNp6SToZ+Wnp6kgHJoYVxdSlZPUkdKWFJPSkxNUkpKSkxQSUxRTFJUTEVIQTw3Nzs5OT49Ojs8OThAPzo6Pj03PT03OTkzNzc4NTY3NTI1MTQ3Mi8yLiwvLzIwMC8tKygoKS4xMjcyMTk4Nzk4Nzc1Ojw7N3aumaOimJyftKmvqaWsq7Cxqr20sru4trq0sZ+3urKqnZ2sqaiyr6GakY2UgI2bjZB+doV3e3VvbmhYS0hISEdFSEhQVFRUV1dTVFVVVVZXV1dYWFhYWFhYWVlXV1VWVVNQS0Y+OTNOPH6eTUhKREA9QURqlH5MT1FRU1ZedYN8eGZ3jZeYjY99aHmBdniAiY99hJiSgXGHj3x3e29rfq19c5CLf3uGkoF9f3RmdnyGbG9oc3yJjIiAbHlxfXBtdY9xaXGAfo5wQ4uEgoOFf3d3eouFfYx7dX6Oko+YipKam6OWmZ2anZ6inZaNi6Wbj56XjpaYj3dvbWViWlhXVFFKU1VUT1BOUFZLTktOT0pRTkhOT0tFQzw7Nzk7Ojo/PTk8Ojk5Pz87ODw9Nzw5OTk5MjY2ODU2NjMzNTExMjI0LiwsLS4uLTAtKyonJyouMTM2Mi84NzY5NjY1Mjc5OTV5ppegnpagpq+srquoqbGvsau8uKy7vrmzrKebsKesm4+WnKWppKCXmY6EknmIjYqJdXB7bXRwaWxpV0tGR0VBQENESUxMTVFSUFFTVFRUVVZXV1dYV1hZWVlZWVlWVlRTUUtENzhmNzA/qGlOSEM9OzpEioV6WkpOUFFUWF5lcHJtiKeqwH51eWN8eG98eYiQen2Lhm9tjJJ5dHhqaoCCcZaRi4F+loBJk5huaHd+gmxpY2x5hZCShmtzbHxucnuGaW1wf3ONiYSGen1+e3ZvdHOFgnmBeHB8joyKlIOWl5iakJKVl5mXnpeMg4mfkYuSjYaQln9uaW5vblhVV1RSUVlPUlRUU1hVTU5ITktNTktDSE5HRT87OTk7OTk6Pjw5PDs6Oj0+Ojg6PDk/ODY4NzI3NTY1NTQxNDMyLzAyNCorKiotListKigqKCcsLTEyNTAsNTU2NzQ4NUhBODk1d5mRm5man6WtsKKsqqi1r66stL+rvMK/pqKZlaSXnY2Ei5ShoZiYkZOLc456f4WLhXRudGtwbGRralhORUZDQDw+PkFGRkdLS0tNUFJSUlRUVFRWVldXWFlaWVlaV1ZUU1BMRTFAmjMganNDmW87PDk1PICChl9JTU9PUldaUVlcYKeIYpppdHplf3Btf3qLiXaBiIZ0bJqSdHN8amudj015hZKJhI5nMXaGc2x+foN0ZmV0foSEhYBmaWx1a3GAfGdxcXtuk42Pe3N9fHFwbnVtgn94eXVqeYmCiIqElpOSkIuNkZSUj5eOgHmIl4iGioaAkIh2ampvaGVYUVpXWVlbTVBVVllYTklIRUpKSEdCQUZEQ0c9OTk4Ozk6OTw6OTs6OjpAPDk6PDk4Pjc4NzcxNTIzNDUzMzY0NTAzMS4qKispLCwrKykoKycpLCwyMjYsLDU3NzU0NzhpTzg7NW6SiJqRmZakqK6esp+nu6+rsrDCsbvDx5qWj5SZi42FeYSQmJSNkIyPhnGHgnOHjIV6b3Jwbm9kcGZfVEZJQz88Ozk6P0BBRERFR0lMT1FRUVFSU1RVVlZYWlpZWFZVVFNQS0U4MC9cYLNHOVhQOzk0NDGWuotITE1PT1FWTEFJUUlir7Ogcnx4bH1tcoOBhYF6hIaGeXKhlXR4gXN1lIc1cZ2onY6hoYSihXZwhnyHfHOMrY2JgGdmYmpucm1wg3Vpb1h1cI6akndsf3t9bXFtcIB6c3ZuY3aEfoaAhZCRiouJkYuRjIuPg3V4i4+AfoOAfo96cXBva2BbXF5bWVhgX1JOW1pYV0xISkZKRz9DQUJHPkNEPTs5Nz07Ojs7OTo5OTs6Pzw4OD06ODs2NjY1MTEyMTI1MzQ3NDUzMS4vLCwrKSopKSsqKikoKikrLzNETTIxNjY2NDM8dlI3PTdikoGTiJaRnqSnnq+VpbWqrrGuwbK7wcaWkIyUkICIfW6BkJKJg4qHj4V1goNslYiHe3R4eGx3bndjaV5JUEc+QDc0NDk7Ozw9PkBCRUhMTExMTlBRUlVVVldYWVhWVVRTUExFPDUqnUtbQC1nSTk0Lz+Sg6muX0dMTU5QTDdDTVJTREqGdoB8fHZ+bXeIiHx+hYN/jH52opl5foaBhZmEm5xhhqqfnYuDkI56d4h+iYiNc4qXj4R6XWRxdHp7d4psZ2pieW+Fj4J6boF3dIR6cHR6d2tuaV53h32HfIiHj4CLkpeDjYWNh31xhH+EfXV3e3yJdnBzdGVnX1tbXVNbZl5XUVVYW1VHSkpETEc/RkBEQz5BQT06OTc8Ozs9PDo6OTk7Oz0+Nzk+OTk4NTY1MzI0NDAwNDY0NTU1NC0sKSsoJycnJigoKSkoKCsrKy8wMFVxPTIzMzMxRX5XND05XIx4ioCUjJKdnZ+mkaCroLGor8CxusW6lo6RlId6hXZrf4yRgn2KhI6MeIOAc6GEi319gX5wgH56Z3ZrUldMQEUyMTEzNjc2ODg6PD5BRUdGR0pLTU9QUVNUVVdWVlZUU1BNRkA6Mj0gI5ZjjFs1MzExaT9Hb0lGSUxNT1JMS1RdWVJKaYSIe4l5fHF8j4x6fYmHfpeHdqGZiIePkpSljaypSIaur6+LgYCTioKLgYSRqIeAmJiKnHNtfIGGh32OaGdoeH5uhYeChXGEhUdrgHdyeXZobWtfd32DiX+IhYx6lZ6biYuIkX96dYt2fHhtb3d+f3NzcmxbXV1bY2NYZmVcVVBQVllQRExLRk5JQ0ZDQ0FAQ0E9OTg4Ojo6Ozs6ODg4Ojo/PjY7Pjc1ODU3NzMzNDQyMzY2NTY3Njg7REZMTU1MQzcrIiUnKykrKywvMDArbnUyMjQyMEyBXDU9PF6EdHx+ioWIkY+WmJKXoZ2soaa4r7O8s5eNkouYi310cH+Jkn59jIKSlH2Gfoakh4h/goiFeIeIfnOEeF9jV0tCNjAuLzIzMTMzNjY4Oj0/QEJFR0hKTE5RVFRVVFRWVVNRT0dDPzgwLCOHWz4/ODQuXZZwc6NVRklLTU5QV2BZcFpcXmqNk4eVgYSChZGTfoWIkYGalYKgoZeVm5qlrZOau7Gnu8fDqIqMoaWPlImBkXtxg56fkZx/doWFio+IkGlob4OAdY2HhItxhoJ3h4B7doV9bnZ1Z4CUj4aJiIiIh6GroZaJjph/eoKJenpvZ2t4fnp+cmpkXlpaXWpcYWZfWU9LTldSUUhQSkROR0NKREJARERBPDo4Nz08Ojw6ODg3Nzg6PT04PD02ODY1NjYyMzQ0NTU3Njg2NzxCQj88ODo+Q1FeZVxHMicmLCwtLS4xKD+LWy4zMTBPg180PztudXBmeIN7gIyAgZGPi5qbpJ2hrKarr7CXkZGEoZSEeHd/jJR8f5KGkpV/ioCSm46DgIGMi4KJjYN/iX9tcGpdQkE0LS0vLy4vMDIyMzQ3Nzk7PT9CRUhKTlFSU1JTVFRSUE9IREI8ODcvOUQ+PDw2My5sk5dNUEhKTEtLTlZgY39nZ211nZuPmpOTi42OmoiTj52LoKCSo6qlo6yTqLaiqMHDrseveLqUmnyNoZ6ZhJOFgo6hn5SZkoSKhY+YkZZscHWJi4KWjI2Pdo+EcWyFgYqWkoOFiHKJoZaHk4mPj5altambjZWig4eThH1/a2prfICBgXNhXWNeWmZrXGtrXldLR09TUU5NTEZJUENETUZBQ0VHQj45OTc9PDo7Ojk4Nzc2Nzs6Nj06Nzg1NDU2MzQ1NTY2NjY4NTU2MzEwLiosLCkoKS46UGFcQCwoLSsrMCwncog3MjQwT4RiM0A8dW5nWXCCcHWHcXaShn6YlpqVn5+cp6CqlpOYnmdlpJp+hJKReYCSiJCSfYqFmZKRgoCAi42JhZCGhIiFeHh+Z01SPi8uLiwvLi0vMDAwMjEyNTU3Oz9DRU5QUlRQUVFTUU5QSUVEPjs8OkNGPz48NzUyPD9SNUhISExMTU5SXm+KfHOBfaCdm6imopmhl6KVnZ+onqmrn6isqaq1l6u/q7bIyLfJ0c++m6Bwaaupn4SUkoacoZqamaeRkYiVopqaeHp+lJiSoZKXl4GUnnt2lZKrs4mNl6B9lJ6cjpOWmaSiprawnZGZqIiWj46BiGxzcnx/fHFoYFxgXmJnY2BnZ1xRRUpLUE9JSkxGRk1DSExGRkNCR0RBOjg1PDw4OTk5NzU2NTg+NzU9ODQ3NDU3NTQ1MzY5NTg6NjE2ODYzLzAuLSosLy4tJyMqO1hiQigqLDEtKEuXXjA2M1GFZjJBQGlhXlBwdWBufWF3jn18lI6Oip+Sl56WnKqYnqpCRH2HiYeYjXiCjYqOjXyKho+QjoGCgImMioSShYOGiYGAhndfYlA0NjAtMS8sLjAwLi8uLjAwMTU+QUFNUVJTUFJTVVJOU0xFRUA8Pj1HR0BBQDg2NjI8OTtGSEdJSk1PUVlthpB3lYujp6q0vbilrqysp6i0q7C3srKtu7GzvpyzxKy7ycu4xL+4paOwsqytq6SLlpiFpqagopeBppmNoqqopIiFlKShoKqhpKmOnLGLlaOnt7uboKOwk6Odo56RpKKrr62ztaKVpaqImYmSipZ6en6FfmdgaFxlYl1kY19mZl5bT0NJSFRPRkhMRkpHRUZIQUtGQ0ZGQTs4Nz08ODg6OTc0NjU4PDU0PDc2OjQ0NjQ0NzM5PDM4PDIwMjU1MS8xLi0qKi8sLSooKiYlNVhYLywwLCwwhIE4NzFQhWg1QUNbWFRMaWNXanBYeoV2gZSFiIKcg5KQjZLayJ2Wc1aXiI+InI98hoyOiop6iIKHkY6DhYCLhYaHkoaChImGiIeHcW5hQEU2NDwyLzExMC0sKy0xLy00P0RBTVVRUlNVVVdVTltQR0dEPD4+RkhDREA4Ozw1Qzs9RktJR0hST1BXgZOghK6js6qywcfDq7PGtqyzv7O4vra/tMG2u7ukuMaptsnHtb65tKijtK2xsZyakpqfiaevq6SVdp+kl6GrsbOYlqquqK62u7K6rK+1orGssbW8t7WutaCnqKOom6mwrbK6uLinm7apjKSOkZOgh3iCg3VZYWRWZWFhY2BhZV9aVUpERUxVUUhJSkRJR0VBQEBLREFNRjw4Njc7PDk3Ojk4NjU1NTcxMTw4ODk1NDY2NDk3Pj0zODkxLjAxMjExMzAsKiwuLCsrKyooJyopRVowMCovK2iSTzYwUodqNkFFV1FKTFtaUWNkV3p1cYKUfYWGk3aFfoCNe7+7o7yCtJSTjZuPhIiPkomJeYaAjJOMh4WBjn+BiY6GgIaJhYqHkXp4bl1WQEVNPDY6NDZBQjc2NTAvNkNIQ1FcT1FVV1VcVk9eVUlLSkFAP0dLRkVEOz5AN0Q3P0JKSkVHV1RQXo+lraOxtMO2uMHMyba8xb2zs8C3uMK1v7C4dLK0prrFpLDGubGzsbSopLW2qrGgopabopKlsK6lraynpJigrLO6oqmyurW7vsy/xcW9vbPCt7q4v7e6t7msrbCmsaqtvrC9u8LCrJm6qJSuj5iYq4l+gnxqV2JhWGplamVXW2NZVlRJR0dMUUdDSElBSEQ+P0JCS0BATUM5OTY2OTo/Njo5OTY2MjQ2LzE5NTk5MzY0NjI3Oz0/NjoxLi81ODo5NjUwKigsLS0tLCwqKCgrKyhFUy8qMDBKj2s1MlCHbTc/RlFMQUxSV1RZVVp3anB/j4SBjoVuenJ5iGK4oZmjiZWTlpOTk42Ql5KHh3uGgY2VioCEgIp6fIuHhnyKg4GKg5V9d3l1ZU9cZEdFTDpRZGFbXlNGPztIUERaY1FRWVhZZ1lUYGBNU09FQT9JSkhFRkFAQz1FNkI+SEdLTFNaVF2Tr7i1urnJwLu9ycy7vMC8t7W8u7e+tbqyxmB1s6Wxmp6rvaqlqKuqo6KytaGrqJ6Vlp+YoK6lp6elnqSUoqextKeysry2wb3TycrTxsLFzMLKw8C+vb+7vLe0sLm3t8O6xr3DybCeuaqirI+lqLeJgX9xX2FhXFdhX2hmUlhhVlJVSUVGTktBPkdEPUtCPUJAPUY9O0hANzk2Mzc5PjQ4OTo1NzA0NS8yNjM4OTM3MzUyNj84QD5HS1JUVFJQUFFSUUpBOS8sLCwqKygoLC0sL1A+KC40OIB9PDJLiHE5PkNLRUBJTVBSTFFdaGxscZCNhZB0bXNyc4jVwLWZoI2VmJmRjpeSlpaOhod9hoOMlot/g3+CeHqLg4d7i3mBioKXf3R9emtlcHVZXVxQZWViYGVkXVtYV1xNZG1VUm1tX25fWGdlVVlUSkRBS0pIRkhISEhCSTlEP0hLVFRWXFpbkrnAub23xsC7ucrLure5tri5s7i1tK62tplkdaierXBeoqycmKGjm6Seq6WUoJ+QlI6WmJeon6afn5qZhKSdrKWqsK23sL251NHP18/JzNLMz87Kx8C/wsq9wb3CwMXExsq/yM60pLuwtbCbrLm9mn95bF1fW1hdYVljY1FbYFNRS0NBRUZEPEBFPkJIQkBDPTpFPj1KPzQ3NTM1Oz00Njg5NzcwMjIvMjQxNjk3NzU1NTVEM0VMTT41MTAwMDY6NDc3QElPSjstJioqKC0uLyxATSsvNTRtiUkwSIl0Pz5CREBDREZLT0RSXFlpX3CXkpGUb2xvdXWIs6yhoZ+LmZyZjI2VkZuShYqKfoiHjJCLiXyBhHN7iYOGfIl0goqGlX9ze3hsbXV7aHJlaWxpZmppaGBmaWhtWm10l62kvIiHZ1tvaF1aWVRISk5QSktRTFRRSUxBSkdLUF9fYmZpYZi3x7C5s7u+trLEx7WvubCwu6yzsaeqt6yNtqeem6eaT5udjI6glpGmmKWVipOTiZCJj5GRnpuhmJuVl4eemqabrK+or6eztNTU1dbSy8/T1c7Tz83FwsnQv8rJy8nSyM3NwtDSuLDEvMS6pra7xKOCbmNcXF1YYFdYZlpRXVdOUENCSEVCSTtBRD5BSD8/Qjc7RD5ASD00NjY1NTs6Njg3NjU0LzEwMTQ2Mjc4ODc1MzY3QzVCOD8tMCwxMzQ5PTk3LC4sMTtGTD0pLCguMDAwN0s/LTQ2VIhXMESHd0M7Qj5FQkFDSk0/VVlTZVdzkJCYg2hxb3l5g6CqnqaXjZubl4uOlZGajn2Ji4WOioqLkIh8hIJwf4eBhnuHcoOSi499cXh1bHF4fnF7bXhzbGmBcG1jaW1weWl3fX7Lv8Lfp21jeG5jW2FgSlBSVU5ZXlBdXU5RTlRRVVRcbm53gnKWrristKewtqutvcCxq7WmpbinrK6hrLSjjrGumpiYjJGUkYSOm4GNppGciYOLhIqJhIuDlJWYl5SbkZyYmZmenquspKehrKzO0tXRzczS09TQ1NHOyMPU0cjN0tPT183S0cXS1sbAzsfIw6m/uNCeeW5lXWJcVl9SXVtPUFRQTkg+QUZBQkU8QEI+RUU+Pz86PT08PEpBNDU0NjU8ODg4NjY0NDEyLzAzNTI2NzY4NTMzOz08RT1AMTErLzM0OT81OTAxMDIyLTJFTzMpLzMuMzI9TjI0OEN9XzJBhnREOj09ST5AQ0ZIPFZSTU9bdYaFindtd3B9foChnp6hi42Zk5OMjJOPloR5hZCQjYuKiJGHf4J7cn6Agod6hXWFk5GJf292c2xzfHt2fHOBd3FrgHNyaW9xenlye77Lmn6MsoN2coR2aGFqXUNaWltWZmRYZWtUWF1cYGNdY3h7f4uBmaqkpKGgoammqrG4qqW0o6KtoqOtoqexn4mmmpSSkYqSjoiCk4lrlaKNmYSAhX6Rg4OTlq2LlY2VmY6FkpCdl6ewoaChpKSox83PyMLL0NPR1NLO083G1tLM1NjW1tjV19XJ1NrNydfW0cqtxMPMinJvYmBfWFNZUlxQSkdJSUpAOzo7RUFEPEJEPkhCP0JCOzs5PDpHQjQ2NTQ0PDU2ODc1NDMyNTAvMjU0Njc0NTU0NDw+PUU/QTYyLy0xNjs9MDgxLzI1NC8tLjtSMDE3LzUzMkVEMjg+bmI1PYF0TTk5QEk8QUQ/QTtQTEZLWXCAdX1oc3lygomBnZWdlIWLlomPioiOh49/d4SUmYuNiIiLiX6DeHN7fYOHd4B7h5GXgYNud3BtdX92eH1zhXx5bYd2dG99doR1eXudtYw8QYvGpX6NfGllVklDZWNmY2hqZG95W19maGtuaW6Ag4mRi52eoJ2Ql5ifo6OmsqSks6CipZ6hqaCisZyGnpKSkpCLjouGg4+EfpybjI2DhIV6lH6CqZWjjJKKmJKLfZeKmpGrs5iam6ecp73Dxri2xs3S0NLQzNLLydTO0NXa19fY1NnYzdjbzsna2tLWv8zMtHd2bmRdWVJVUFlWRkdKSkVFPTo3OUBBQjpIREBFQ0FEQTs/Ozs3REM3NTY1NTswNjg5NDQzMzQxMDE0NTU4NzQ0NDQ5QD5EQkM8MzMuNkZUV09RSkFKRj8xKiguQlQyOTI1NC83Szc1PGBiQTxzdlY4N0FIOj9DPjw5UUVDSlRsbm9wYXFxc4aNfJeRnYt+h5KDiYaFioKHfHiFlpeIj4OHhod6hHlxenuEhnV6hY6NnXqMcHxvcHp/cnyBcYOHgW6OenR3fXyCdX98h4iwdFipwraMkoJwbmI9XmhycHFwbnh3gmVpb3J1eHJ7i4eOlJKblqCWh4yTm6Cbn6qfoK2copqZn6Wen6yZi5qMkZKNhX2Ih4OEi46gmZOIhId+bZl5hJiGiJOMjZWMhnubiJOPrqqUlZeemKautr2orb3Gy8jJy8vQycPRytTW2NfY19Xb19PZ29bP29rR1sjVy5V5e2hoW1lQU1NdSENFSUk+QT49Nzo9Pzs+SD1AQUFBREE+Pjo4NkRCNzU1NDc5LjU2NjQzNTU0MjMyMzY0NzU1MzQ1N0VCRENFQjU2PEZOU01bbmZjbnNrYVY+LDRMRzg2NTQzM0JGND1XX2hMdXheODs/Rjw8Qjw5OUQ/Q0dSa19tZGJma3aAiHGRkJuAeYCOfoOCgoV/hHx8hJeOh4t+hoeAd4J5bnt7hoF0epKejaF2j3WCdHWBfXSAhG+BkIJvkoR0fIGFenaGe4m3xqTCybiBlpuPd3BlTmZjgXqBd4aikIt5eXd7g398hHZtlJaUlY+XkIOJj5aal5emnJigl5+TkpejnZqrlpGRi42Sg4yFiYiBhZCRnpyZiYWMgYaXe4iIn5eQiY2Ki4J8oYmQi7yhl5OXmZyopqWunqe1vsDAucfJzc7FzcrR1tXU2dXX29TW2drb19va2djO28aGenlmaGRfVFdWVU1LRE1DOz09PDk6PD45PkE2Pj9APT8+PDk4NjdDQTY0NTU9ODA2NjU1NDc3NDU2MTM4NTQ1NjQ1NjdISD1ESkU3OTI1O0g+Ozo6N0lQXVpSVVhLOVQ+Ozk1MzI3STg9TllNSHh4ZDU9PkM9PUA6Njo+PkBFUV9ZZWFdW2h0enlsiY2Sd3Z6inx+gH+AfYV6foKRiYSFeoWIe3V9dG58fYZ+dH+SnpGfg5J8hn54jn14iopugpqAdJiFfoGJhXx+kHqPqY+Qw6C8jJyknH2JhH2Jc4yKfnOmmpyZlIV7j5CJhGhHcaGknYyLkJKFiIuRkpWPnZqTlZGXjYyVn52UoZSSjo6Qi36Qj46LhIiSlpqfn4mMlJKekYKLf6aZiIWOgoaEgKWGioy4mJ2RlJahp6Cdnp2jrra6tau/xcrQyMfMz9PS0tjS1dfA19jZ29ja2tnZ19y3eHh3amlkVmBbU09OSERMQj09Pjk5Ojo5OTw9NkA+Pjw9OTo7OzM3REA4Mzc4PjcwNjg4MzU3PDM3ODA0OTc2NzU1NTQ2RlA1RE5JODkzOEFLPTszQ0BJPDlEV048TVRITj85NjMzMz5DO1tYPjVZeXBaPDxBPD0+ODU4OT89RFJTUlheVVhmbW1taYGPinFyeIp7e399f3yIenx7i4eCfnWDhnlzenNtgX6EfXeGm6GbnpSSgIuIf5iHgJySboeohXqgi3yQjoOIhJx+mpGKjaOioJCkr6CLkYuFi4GShldyrYufrJyPg5ibkJCOXIOikYKMn5OVjIaIjJKTjJSVlJCMj4qIlpudj5WWkYuSlIaAi4mSjYmKnZaZo6OGk52WoYuKiI6ckIOIj4CDh4WkhoyQs5ickpSXoaGemZKbnaexuKylvMHHzcfGz8zPzM/Xz9HUrtbV2NrZ2trX1tnan298dGdmXF1YU1ZXQ0BJRD4/Pjo0OTo7Nzo7OjM7PD89Pjc7OToxOkc9OjI3PUA1MDY3NzI1NT82NTs1NTg1ODo1NzczNUhSN0dPSzk5ND1FSkI+MUZDTEE5ODpHWEA1SFdJNjYyMjM6RUNlWD8mX3lpX3o+Pjk8Ozk4OjxAO0JRS0tTWVBUY2J4bGJ+koNubXeLeHl+eoF9hnx7doaEgHNwhYJ7dnZ1dISDhX1+kqajnqailomdkJSWi4qol3KKsoyEp5GEmZOEmYyilqCZk4manaKSqa+fkZWQjo2IlYtujbeEmsTIsp2ipZucmJaRspBjpM3IlY6Gh4mQko6Nk5SKhYqKhpaam4+QlJOHlZiEgI+LmYiNkKqXl6SjiJmelpuJj4eXl4uFj4yBf4aPpYmNk6iZlpOWmKGYn5mTnZuisrSlo7zBvsfFxcnIycLK08zN1KjS0dbW1tja1NPazoJyf2hiXl1dTklUWUFCR0Q7QT04Mzc7PDo4PTY0OTo8OjgyPzk5MjlJOj42N0JDMzI6OTYyNjQ+PTQ7PjY5NDk7NTc5NDRLUTxKUUs5QTdCR0lANjRKRUxGPjw4OEVUQTc+XDg2MjE0OjtFYFhBRmF0aExjWj41Ozo6NTs6PTpFTUZIUldTUkJjgUZ2gY59fG1+iHh6fnqCgoN+dnaAgnxsbot/enx4eHyEh4p+iqOzp6Oqs6GWp5+lo5aVrqKDkLiVkrOZjKGhjKSbr6OknZiQp5anmayvpJeVlpWQi5iZlqDAjqPJuaubo6atmJGbnbKdhYWoopyYhYmJjpWNi5OPiIGGh4mTmJWMi5STh5SYhoSRkJx0kZmzlpeloYicmpOQipGKl5uJipaOhn2MmJ6JkJCcmpmTmJeflKCdlZ6boLGuoqS3vrTFx8S9w8O/xs3KydKmzs3T0tDW2NPQ2LtyeXZdYFVfVk9ISk5EQkNFNT46Nzc6Pzs8Nz00MjY2OTc3ND01OzU8TDw+OzxCQTc1PDs0Mjc3P0A2P0A3ODQ5ODc7PDU1T01EUFJMOEA9RUFHQTU6SUVORUQ6NkFAQlM+OURPMzIzNTY1PXZcPFJcdGlaTV1TPD04ODU2Nz06SkZER05bXFlKZmA7SISLentuhYZ6fIR4gYWBfnB4fH59b3KNen2BfHiGi4mGhJKnu6yosr2vpK2zs6ijorCsipq0naO4pJWtpJeprbempKOfmamXqaOvsKmamZyUlZGXoJiau7uuyqFqtrirsJSYn6Ork5e+o16qsoKJio2Uh5F8jo59g4aOj5SViIeTl4yQlY2LjJeYkp2ZtJeWq52LnJSSjZCSjJmbipGekIuJlZ+hjZSNmJqdk5uYnpShoJScnKWvqKGks7irwsjEtbq9u8XHx8LRoMbJzc3E19bRy9ShcHpoXFpTXlFPRUM+PENBQjg/ODc1PkY8PDU8MzUzNDU0NTRCMzk6Qk06QjtBSEI7OkA8NzQ2PEI5P0BCODc0Ojo2Pjw0N1RLQ1VRSjc8OklBRUA0QUpITkJBPzZEQTxKTkQvVD0yNTQ6RUpcWEpaUW1ncHBEaWBLSTY3NTc6PkpAQ0lQZEdiYGJwSkCLin+Bc4aHfYKIdYOKgn9tfX18f3B3h3eNgYd7jY+MhoyZqsLAr73Gu7O0wby0rauztounsq2uvKqbu6Sorbm4q6amoqGjo6ivsrGqnJykmJqXl56ipaWSpLquqcC8ra2yuaWkp32Ih5ysvbCDjIyLkIOPg5GPeoGIkI2OnIiHj5eNi5WXlJCalp2nmrGakaycjpqPko6VkZCWl46RoJGJlJujrJSWj5ScnZKfnZuYoKGUmp6npqSipLCypsHGw6+wurbFxMK+zabHw8fDvNXRzcTKiHRzYlxZX1tNSkJMQEVHPkE/Qjs6ND5BPD01PTY+MzMzMjQxQTE3QEJOPkdAQ05DQT1DPTs4NkNCNUJJQjo4Nzg7NUI+NzlWS0RXT0Y4PTRLQEM+NEVLSE4+QUE2QkI/QlNFNThQMTQ1Ozw4O0Q+OUxqal07V1JkS2daVU83OUdFP0NGXGVHYGlnWl1ck4yMiHuHi4aDjHWGkYqBb357gX9xfoF6lXqSlJSYkJOVp7PGyb/CzMHDuce8uq+rubqXsra6ssCupcCkq6+7vKqtq6KinaeqrrSwqpufqpuhm5WfsLSni6O6urbBvKyonLKlpKiUhY6qw8SkgouPh4iEhpWUjXqDjZGPkaGMjJSSjoiXn5eTmZWYpqCvnYyqnI2Vj5KRlJWOkJWRj6GUhpefoLKelJqUoKCYpJ+aoJuglJiepqSmpqSvraXAxMKuqLe1ycO+ts6yxL7EvLPRysjCtXV5bVxYXGlTTEhETEtLSkFBPUNEPDVBRDs6Mz04QjMzMjI2M0EwNUlFTT5JQEhSQEg+Q0A7Pj1GQTVBVUA7OTk4PDdFPjg+VkpDV09HOD80TEBCOzVKS0NMP0I/PEJGPUFITDkrRzwzNjc0NjRBPzdPYU9hRS89PjZrbGpgQDpIPj9FQmZaTmVcZlRjapmNl4qMiJKQhol5hpSQgXKAfI1/eIeCgpB5jaGWqJqamLq9x8jJwdLJysLNvMGzrbu+p7q/vbzEt6zBqayzu76qsKmjpaOsrbOttrWgn66epaKYo7S8qZuovcGjt7ewq5Kwrausl4aaqqalkYKMk6WViYF2ipJ6hY2SkJ6fk4+Ui4+NlKOZl5yVlKOfqp+RpZqMj4+QlZaIfI+VkpKjmpWgopy1ppCel6WjoqWenaaYnpWXm6WjqKeisqyovMDEr6Wzt8zAua7Es7u+wbiswsPCwJlteWFYV1xbS0tNSkZERElCQkFETDo0REg5OzQ8N0UuMTIzNTJCMjZTSE48SkJKUUVLQ0RFOkVMQjw3RVY9Oz04OT88ST86RVVJQVdRRzdBOks6Qjc5Sk1CSUBDPjxERzxCQ089MjBIMzY2MTcwPUI6PWpqSks1UVMzU3BwZE47RD1ARj5qSF9YYVpkZFaej52Ol46ekomKf4mgk4R4hX+Vf3+QiIqQf5ahma6mo5jCvsfDx8XTzc7Ny7zCt7C5vLO8y7zDwbW2u62zv7m8rq+ooKintq2tqbG3mp6toqehnau3t6mlsL/Esb65s6eqtbOtrpaWpayooJGOkrHFp5WOfZGVfYiRmZCqmZiTk4+TlZOlnpOdmZOho6KcmJ+Zi4yPj56IWpCWl5KWpZllmKOesqWWopasrKqnm56ml5iXmJWhpKimn7arqbq8w7Wms7XLwbiptqyyuriuqLe6vbiCbG5aV1RVTkZKU05LP0FHRERIR0c5NUZNOz43PUBKLjMyMDI1QjU1UFZOPExGS1JMT0hHST5JUT86OElTOzs/Nzk+RExCQEhTS0BXUEY6QT9HNkE3O0hNQ0U7Qz00RkU6QkFCRzkvOkEzNjAzPkdEOTQ9dGRNRztFKzpmfGdWOz1AQkZCcUZpSVJlYkxGpZSclqGXqZaNkYOHppOIgoeCnISDlZCQlI6aop+vvq6hxrzFxMbGzs7O0sq+u7axuru7vs+2xL23uLeysbWzuLOrppyrq7iqqKevsJejr6SnpKS1wLCqrLS/w7rAurOnubW4sq6Vpa2vr6WLk5WhjXTBmn6XmYWPlpqMsZWampWTk5mZpaOVn5uWmqmdnKGgmouNj5adYEqWnJqVmqWWVJawn6+cn6WUr66spZqgpZSTmZmOnJ+nopm0qaqzvLy8qrCyx8C4paurrbGxo6GxsrSkcG5mXFpOUEtEUFBQUTtHSklHSENDPjpLVT9BOj1FTTA3NTQ0OkIzNE5XTzxKS05VTlFKUEhISk9CPD5NUjs+PTg6PENSPkRIUklCV05JQEJBRjM+NThKS0NBPUM7NEVBOkE/PkhANSpCNTIsPmNdZzozNXRkZUBSNyYjM31oVzs6QkNAPVFFV1NzYldGSKqXmaCiqK+ZkZeHi6eWjomThZ+HhJ2Xj56gmqOktci0qca6wsPHycjIzM3Gvruzrrm4wMHNtsi6wbi1urCvr7O0pqObqrO0qqimrayZpK6lpKesur+oq7W3v8G/vrmzssSxub2so661rLqmiJyYppt2v6CFmZ2Ok5mai6+XoZycl5Wbn6GpnqigmpqqmqKnnpiQjZGdg252kqKalZ2inpCusqKrlaiql6qupaSfpaiSkpmciJScop6Wsaapq7q2vrOyrr65tqCjp6ilp5ybrKmpjGJlYV9SS01HSE5JVUw9TEROSktCQ0Q8UVU9QUFCRE8xOD03Nz9CNzVVWE4/SE5RWVNQUVVLUUpKRUFFTVE/Pz04PTtHUjxFRFFCR1lNS0FIREU6OjM5S0lCPkNCOTlDPjxAPjs7RzctMj4tMYJoTnpcLzBraGA8PUJCODZ6Zlc7Oj0uLlJgTVVIf2VeSEWrlJyhn7uvmZSfi5Oqm5GSk4mrjYein4ykrZSjo7bGvbTBusLCx8jFws3Iwb25sq+5tMDCyrXFscG8tLqqqK2tsKKimaq0u6appquqnaivp6Oqqr67p628tLe9x7y3tbjBsb3As6m1t6u/pY+jmJGioLyfiZqgmZeeno+3n6mcpaObnKGaqKWzoZudppyoqp6Zlo+Um4uXiYylopSdop6gtK+lpZOwq5mrq56dpKOokZWVoIOPnp6clamkoqG0tLq1rai1srOenKKlmpeVmKqhnndgXF9dSkhGR01RSU1FRkZCUkxKQkVHQFZSREg9QUdRMTtCNzpCRjc5XFlLQUxQVFVTTVdSTlVKREBKSk5POUM/NT08TlFDPz9QP0VaTUpBS0RHQDUzPUlHPz1FQTk3QTs8QDw8M0A8Lyc7KkiRQjpTSjAsW29XNzE8Kh1CgGRUNDktMTpnXEZDQ5xwYkdFp5ekn57DrZuXpJeZqZyWmpqPqpaVp6aVra2Zoau2xMK7vrfBwsDHxL7Nxru9ubKvuLO/wsi1v6+7tri2pqSqrK2goJqqqsSipairpp6rr6yiqai/t6atvbC3tse2tbi4v7G/wba0s7SvvqOXo5aUnJSuoJGioqWjo5+QvqWpnairnZ2gm6afvaKYo5+iqauhnZeNlZ6TnoePhY2TnqShnbWspZyVsqeZr6efmqmeoI2ZlZ+EjaCam5OlpJqYq7G1saqlqq2snJigoJKOkJaonpRoYllhXU9JR0pOTEhFRElBPVBJQTxHSUhbUk9LPUhPVTRCRjk+SEc1Q2FbS0NOUlVXVlFYVFJVSEA4UVFQTTpHQDRDSFFTSUM8Qz5HVktDQE8+SzwwNjtHRj47RkE1Nj85Oj85OzE1RDAtLC9Ndlw0S1o1LE1uVzwtPSkeI3piUTVDS1E6blJGPEt4ZWJXTKKao5yexayhn6ydna6gk6OflqWgpqmrl7axo6qytcTEvb+2v8K7yMK+ysi2uLW1sLOzt8HGtr6wuLS4tZ+mrKqsnZ2epaPBpaCqrZ+kqa2voqanvbWlsby4trbDsrO3ub6yw8C3uK6ztbWjnaWVkpShrqCZop2pqKujmsOtqZ6srZubnpmmob2inaWYq6uspqGZjZmfkp+Jj1d/lp+moaC4qqeTmLajn7KhoJuulp6OmZSdgo6fl5WOoqSVkKausqupoaKlpZWVnZiLj5GTpJ6JYWRZY2BMSEpKTkZFQUZLPj1KQjk5SktOXVFRST1MVlw5Rkk9RE1JOEhiXExDTFBTWVlWV09aXklBPVdRSUs/SEA1SE1YU0hBOkBBRFBIPz5RPks3MDk5RkU7OEc/LjY+Nzg+NzcvMT85MSUxUVVtW0pPMTA9Z1dEMTc9LSt3YFM2U1prV3JIRTY9dWVcS06en6GYnsOopaKzoZyyqJOrpKCkn62prJ27sKistbHIxcHCs8LDvMbDvMTKvK+wtq2wtK+/xLS5sbC5tKyZqLCpqZqdpaGnwq2brLGbqqKusKmkp722pre7va+3w6yzs8K/ssazurestLatqqKmlpaVpKyin5+aqKuwr6+8sqagqaiZmZiToqS4oKGkk6+vrKWnn5KhnpWej5CNlZ2ao5+ns6amjZi0nKOump6brpCek5eUmoCRoZaOjZ+hk4umrLClpqGcoJ6SkpqThYuSjZyef2FlW2dlSklMSlJCQ0BJRzs7Rz85OU9NVV5SU0o+T15dPUhQQkxMSTlNY1xMRUxSVFlbU1VPXGJIQT9aUUFIQUtCN0ZFTEtOPjtCSEROQj07TkBBMy85N0NCOTdGOys2PDQ2PDM1LS80QDErJ1Z0U2VPPzEwNGJbTTIzPjA8dl1eP1tUXmVxQDg7SJZ3ZUE0n6Ofm6DDqKSqsqGjtKqVs6ynoqSyrK6pu7KssLW0xsDEw7XAxL3JxLXAyMG0q7Wor7isv8S0t66strmlmauxq6qYn6aXrbu0m6iwm62frrSxp6q5sqe6s7eyucCqt7LCvLTFp76vrbe1qqisoZeXkqaloqOYmKWvuK6ytbagn6mkmZWVk6Sgt6OkppausrKnq6ahnpuam5aYqJ+gmKKer7Kipo2Xrpmlq5eZnqSRm42Tl5qFlZ6UjI+cnpSLqamqoaegmJ6VjI6ZkIGFlYmUn3hjaF1rak1QTU5UPUNBTkM6OklANzdST11eUlZRQVdgXEJKU0hWS0g6VGRcTkZPTltXW1JQUVhdR0FCW1BCRz5OQzlIR0hPUD8/Q0lCTEI8MklBOTQxNzdCPjs3RTcrNjkxNDgwMi0vLjw2LSNCcWdzazIzLzFbYlozMzgwNnBbYkgwNUlwaFZDV0aMeWZDO6SjnKGmv6aor7ChqbWrnbmwq6OqtLaxsLm3r7a4uMW+w8e9vMTBxsC4wMbAuqm2pKy7rMDCt7eprLG6opWtsK2ylqWnkKq5qaCnsJ2qoLC0sqqptratu6yzs7q3rLmwwrq9vqbDq7C3r6mrq6eemJmroqKgkZihsa+zq7G6m5ypoJmWkpemobeppaOisLG0q7Koq5+boKCbnqWdopedo7Owmp+Qk6WaoKialKKelZiJlJiTlpack4iQm5mUjqmopp+im5ebk4eOmYt9jJaFj5tqaGxhbG5XUFFaVEFDRVRAOztJQTc6WFBkXlBWV0RZXl1NTFJOXktKPlpjXk5IUE5bVVlQS1RXWkk/RFhQREY/TkA9SUdHUVBCPURGQk0/OjFEPzc3NTQ3Pz05NUU0Kzc1LzI1MS4tLiwxPSonKz1ccD0+MS4xZVtkQDE2NDdnWWBGKD84bH1oW1Y7iXtjQz2nn5yhqb2hqq+ro7G4qaW1s6ygrbW9rrO4vLq9trbAw7/IxLnEwcDAuMS9wLevtaert7G7vr+0qa6xtp6Xq62orZanqI6nu5+krbOeq6KxsLOsqba0tb2tr7G1rLC1scC6xbervK+xuKytqqOxpp+lqqCkl5CZoLOqs6qrs5qdp5ualY6gpqS0rqeira2usaezrbKqpJyfqKSelaGZm6i1qZeZkpKfmZ6gnpCrnpeYhZWXi52Zm5OKjZaXmpempKKgnZaVl5OAj5SFe46Sg4yWZWxyZ3BxX0ZZZlZEQ01YRFo5SEI2Pl1RaFxOWV1HW15dTk1SWGRKSkNcYl9QTE1OWFdYUEpWVldMPUVVSkVEQU1AQUZISFFQQTtHREZLPTg3Qj02ODcxOT48NjVEMCs4MC8wNS8qLC8tKj0sLCUyKyo1SzEvJ19fYVUxNTA9YFZeOClDM1lUXGdLNox6ZkxApJqhpKy2pK2ppa+utqqvtbqnprC3xbext7/AwbW0usW+zMW5wr+6v7nDt8C4sbSrqbq2urm+tKqtsbWYmKesqqubrKuOq72eq66xo6ugsa2zrq62srm3qq2usai1r7O7vcqyqra1sbSvrqehs6CbqK2gpZWWm5qyo62gpq+XoaSampKNoqWnsqmip7KsqralrrG1r6SZna2nmpifmZmsuKOXk5CPmJyhmJeUq5+ck4GTmI2dnJqVj4mUk56apKGhoJiWkZOVeouPhXuMioOLkmtueG11e2BFYWpZSUhZWj17SkZENkFiVGlbTVxgSltdWlJSUmJgTEtFX2BgUUxJUFdWVU9HV1ZVTjpJVklIP0NLP0VESEhRTkE/SEhIRTw3PT46NzU2MDk/ODY2QiwtOCwvMDQsKCwvLSo3NikoOS4kOks1LiJUYFVgLzUoQ19RXC4qQi9KR1BbSDNjWVRLRJmXoLGosaqtpqSvrrWpt7S5pKu0t8m6tLq7v760tLfDwMzIu8O8tr2/v7e+u7C8rae6uLe2wrarrbG3lJemrquno7GqlK+7pKyysqeoo7KzsLGxtbG4s6muq7GnuK+1tMPFtqm1tqywramno7afoKexoKSUnJqVsZ6nnKCqjqmjnpuWmKWlpbenorK0rKeyp62wtaylmaCsqJucnZuUqriclI6Oi5mcopeQmKWhnpWDkZWQnZyYlpSHl5CXmqabo6CSlpCQlXaEkId7hYGEjYttcXd1e35cS2VsXEtOY1w+YntHSThHZ1dmW0xeYk1YWVdUWFRpXU9PSGFdX1BKSFFWVVJLSVdVVk04TVpORUBGSz9IQkNLU00/P0xPSEA7Oj47NjswNDE8PTQ1OD8pMDcpMS4yKSksLC0rLTkkMDQyJTlCNy4jQU5IZjI3J0diTFYlLUIuPUVMUTwzcmtKQ0ORmaWupa2uq6elsbKzqrext6CrtbnIuK7BvMO3s7G1wsLOxb/BvbS9v7+6vruxw6epuLC2tr+8r6uzspyfp7GtpqWwpZ6ytayrsrCsqai0uay0srWstK2qrKirqbitsbDHv7ilubCpra2lqK2wpqSkr6SpnJ6cm6+Zo6Oio5GsnqSgn6Kqpaa5pay1taWqq6isr7auo52jqaqboJqakqS0mo+JjoeRoqCVjZSdoJSShY6Skp2bmJWThpeTlZmmmp6fjJKRjpB3fo2FfHx9h4qJcXRyfn19XFNkb15OWWZcRkSWW0c7Tm1YYltNYGJOVldWV1RZZ15RUkxjWltUS0dPVFNOR0lXU1xOO1BeSUJESEpBRT8/S1NPPjpOTUM8PD45OjU9KzMyPTYyNDk6KDQ1KS8sMSgpKywtKiY1Ki8mMCkzODoxJiozQmM7NipIZUhKKzpJPzNCSVMsPo9rPEdIj5yqq6KpsaSppbO0sbS1srKhq629y7quwLvHsbSttMLC0cXFvsCyvcDCvL+3vMSnrLess7i8wLCrsa2go6etqqiksKOqsaqvrLCur66ss7untrCyqbKpq6Wlo626rKqxwrm1rLqoqaitqqixpaqko66qqKKfnKOslaWemJ6ZrJ2hp6mirKWjray4sbKgqaKgq6+wrJ6fp6ipmaSYmY+gp5iGhI+Ki56gj4uMlZuOjYWHkJWgnZaYlYaWk5OXpJucnIuSkI2Jfn6HhXx3f4eFhnRzcYh1a19ZYG5jUXNxXEs7hHxGPld0WGBaTmNbTlVWVVdQXGJeU09OaFhXV0tHTE5SSEVJVlJdYzxQXUQ8RkhIQkc/PUpQTDo+T0o9OT89Mjo3OyozNT4xMDQ4NSg1LyosLjMwOyksLCclMjM0JCwyLTg2MCkoMTxdSjAuSmdERjg8QjA1RUtYMUCUWj5MRZWYraihqrOcqqqwtq24ta6rpaqqvci7sb23wq+wrLPEw87Ow76/tMDCw7rAs8jErK63rbK4wL6zra6rpKeqsKmnqLGltK6rsK6tsbCzrbO7pLizrKyup6ugop6wt6qqrbq2pba1o6qnrKyqraGpp6aysqSmpqGhrJaqoZWaoKaepKKrpKyin6ext62to6Wim6qrrqmdoqWkpJigmZaPmJ2TgoOQiYWdoIyKjouYjY+Kg4yXo5uSkJuMk5KRlKKZm5mKjouKfIaAgYN6dICEgn50d4ykiHhqXmBuZ1dlh2NOP2eTTEVieVdiWFJlVE1WVVVUT1xdYVVLTWlXVVdJSkhJT0JHSVNRWW9BTVhAOkpHRkVHPj5FUUg4Q0tFODdDNzI6OjoqNDk/Li80NjMpNCsqLCsuIzQuLSsmKCs3OSomNis8LTIsJjA2V1ouMEpnQUE8PEMrOkpPXjREhj5IRkSXkrClo6qxmKuqrbWrtrGrpayqqbzAwLi4s7u1pbKvxMnL0b/Bu7m/v8G5wbrBxK6xtbGzusC+s7GuraurqLaqpq6vq7mwqLGxr7Kstqq2tae0tqyspKmrnKOetLKoqKS0tKC2raCpqKupq6egq6ypubapqqqqoqmgrJySqaGdoKSipqOpnZymta6opqmio5ilpqeqnKKko5+ZmJ+Rjo+Zjn+HjYeFnp6HhIqKjYyPjISGlKKajoyakZKRj5KflpiWi4qDf3SGgX9/eHWDf3t4f4GInY9vcWdncXhcYHOIak9emVZIbXhVZFZRYlBNVVRVUU9YW2JVSFBpVFZTR1BZVUk+SUhPUVB4TE1WPTxLRD9AQTxAQ1VDOUFLPTU7RTEzOzk3KjQ6PSstMzQxKjgqKisqLCkpKC8qJiklMzssJDIpMjAyMSUvMlFiMDI/Zj1OWD5DLD5MVF8vSmo2T0Q7lY6woKWrrpqspa2us7Svq6Wvqai6vrzAsK64raG2r8nHyNHAvr26vMK9usPBv7+usrKxtby8wrGxs6uzqKS1qaWts7O5sKOutrGvsrqrua6qrrasqp6prJ+ioLatqKGfr7OhtKqeqKeqo6uhoqytqL2vrK6toaeon6uZkK+hmKKhqKefqJqZqrGpo5+toqGToqOjp5iaqaWYl5mdj4qHlYh9jYaFhKSXhYKCi4aOjZCEhJOgloiRnZCTkI2RnJSXj4mFhXh0gX99dXh5gHt0c3ppgYajdWleZWuBdWeIjH1TWHBeSnhzU2RTUV5NTVJZZk5MVlllWUZTaVJRP0JOUWFROklITFNJcVFMUzs8ST87PD07QEBXPDw/SDczQ0IxNTo5My01OjopLTMxLS02KSgrLSw0MiMyKScsJS47LiYxLjAtMTQlLDBMaDo0OF89YWQ/RjFDUFtbK0hOOVVBNJCPsZ+kpqykp6SsprSysaqksKequL7Bu6+nuaqmrrDJx8jRw7y/vri+v7zJvMG4sLC1sbq7uMCys7utuK2itKanrLK2ubOnp7u1rba9sLymray1q62cqa+jn6Wsq6ecnqqzpLOomqqnqaSpnqOpp6m+q7Svrp2ppKCunJuyo5WknKSln6SamqirpZ6bqqGbkpuhpZ2Yl6mokpiak5CKgo+Ffo+CgIiej4Z/fYuHkI6QhH+Tm5OFk6KMlJKLkZqRlYeIfn9xenl+fGl4fHp1cHB9aIV4hIhkYWhjcoV6bWd5XV5WQld6bVRhUFJYS0tOcXVdSFpbZ1lFVWZQRD5KTkRDQTlIR0tTP2phSlE4PUg8PDw+Ojw/VDY6P0M0NUg+Mjs1OTAyNzw1KC41Ly0xMSYvPktIMCUaOTAlLCwwOS8sLCs2JzE3Iy0vR2pJMTRYPWZjQko3R1NgVSo9O0RYPyqPlLGZn6CppaShq6S3srKmqbGnrLjBvbWwo7msqKixw8nJzcG2vb+1t7+5yLbDtbSztbG9uLq+tq25tr+tobOmqquwtbi1q568vKiywLO6oK+ztaqsn66wo5ylqKmjnpylsaavoJ+qqaiiqpykqKCtvKiusK6hq6Okrp6eraaXn5uho5yfm5qiqqOamqSklZeUn6KWm5emq4uekZCRjIKKgYCPgHualY2JfH6Lho+OjIqEkpiRh5SjiZKSh5CZj5OAiHx5a312eXhje3pxcHFyeGiAdGqDZ2RoYW5zjm1iaXBgcEFceGxVXk9RUUpKTVRZV01dXm1XRFhgT15QSE1ERjs3SEVLTzxyaEtLOUFFOzs9PTs7PUo0OUI8MztHPDQ/MTgtNzg7MigwOS8sNS4uPS0qSz4qHTQ5JicuMzQuMCsvNCYsOiQ0MEJoWTEzUz1lX0RMNktXZU8qPDNPWT0jkpmsmZ+Yp6Sin6ejuK+uo6+wqau4wrqzrZ+4r6uotLvIy8i/t8K+r7S9t8S3w7GvurKzwLW7vrepubi9q6S0p6iqsK65saqbu72ksMC1tKGut7Wmp6exs6CepKanoaWZnq2nqJ6gqa6noKeYpKigsLifo7GvoayhrKScpqepmpqbn6OVnZyanamml5ufqJKYk5iek5mWoamQmomOkId9h3+Cjnx8oY2NiHmDjISJjIyFiJKajomVn4mRlYKLloyRfIR7c299cXN0YHl4aW9xcG9pfnFjemxpZWNgZoZ/YFtyanJNTX5oWFpNUExKSFBSUElOXF9uVERYW1JnT0hLRUY1NkhCTEk1WmVKQDZFQjk6Pj0+OjpDNTk+OjNARjwyQDIzLzo7ODMmMjwwLDg1QiopLUMqLDQ7Tk5AOzczLS4rLTcqKjwlNTM9ZmQyNE0/ZV1GTz1SWmhIKj4vWVg1KJedpZidlq2goKGkobersaSztKqoucS1sq6gt6yurbC1xsjBt7/BubC0vLe/u7+vq72wtL+xvcO5qbu6t6eotainq7Cts7Gnmr23pK28tq+fsbewqKWnsLKboKSgpKShl5yvpqGfoqevoqCik6Sko7ewoaaxq5+so6+YnKqlqZ6Xmp2lk5ucmp2mq5qcnKWWlZeVnY6Ul6OooZCJipCGeoV+hIt6j5eKjYZ5goeEiIuOhY2TmIyOlpmKj5Z+hpeLj3mAenByd29vdF95d2RsbGtpaINtZXJqa2VoXGNzgF9aa3VpWkl9XVtYT09KSEhSVUYyOV9ebFBEWFZZZU1JSUVFMDdGP0tCNklKSDs2Rjk0OT49PDk4QDg7ODo3QEk+ODw0LTM8PDc1KDU+MSw7QTEoKzY8IzhSPSoxMTM+RDUsLSc0Mis7KzEzOWNsODRHQWZbSFREVV1oRS47MmBULDKWo6GXlZypnaWhoqC3qq+gurmmrL3Es7CuorWvrK6vtMTEvbO/urews7m4uri7rq7As7S4r7/BuKy9urWmorOqp6mzq66yopvBtqWotbWpnrK7qqemqbCsmaKnnKSmlJiisqSZn6SoqZyioJOloKS5qKSnrqeepaGokp+poqGgmZudoJKanJagoqubm5mhlZKVlpqNlJOjp6SPiIqPhnmEfIWFfZ2NiouGeYCEh4iIkYWVk5KMkJWUjY6Ue4OXjop3fntsdHJsbHRieHVoaGpnZW+EZ2hoZGZpamBoYmlmWmV7Y2BTc1RbW1NMSUdJT1NAISppXmpMQ1ZVXmBLSUhFQy46QjxGPDZLUEQ4OkQzNTc9PTg5NT86OzQ+OEBMPT45Myk4Pjw6OSo2QDMuRTQoKyw+MC1OPy4rLTcsMTE5NSwmLjUtODA1NzZgdEIzQ0RnW0tXR1VgaEIzNzhjTicynqSjko6kppyenp2jta2nqrq3qKzDwLawrKK1raevr7jAwL2xwbexrrK3tri3tqyqvbOvsrG9v7euu7uxpZ+2q6WltKmrrqCfwquopbCzqqy0up2oqquxpZidqp6mpJGZpq2imJ6kqaGcop2XoJ2ntqavqq6hoZ6doZWgpp+ioJmbmZySmZ2UpZ6to5iXnpWUjpWYjI+YmqigkYiJioh5hXeCgoKdh4uCiXx/hIiGhZCElpWPjpCRkZGNknuDlY2Gc359Znhva2tsaHVza2NnZGN0f2JkZWZlaWpjaXFZXlhdbWRhTmhXWmBWSUdIS01SWD85YGxpR0JVU1xbSUlHRUEuPD85QTg5UkZANzpCMDM3PTc2OTI6PDk3OjlETT1CPDAqPEA7QT0tNUIzNz0rKiwwQSpKSy4vKiszNzIyKDU3JCs3LjcyNjg1XHlOMj5IaVpMWUpWYmZBOzNBZkglNZukoJGMraGZmKCWpbSxorG+t6Gxxru5sLGjtqurrqm5vby7rcCyr66ttq+zuLOoq7ixrq60tru2r7i9raadtaugobGlq6+fpMOgsqSusa+3rbWdra+trqOZnKeqpZ6Vm6iln5mloqecmqCclJydrbCmuaiuo6Kamp6ZnqOapJ2XnpiblJqhkqiVrKmblJuckoyVmY6UlJmpp42NiomPe4J0goGKmIWHfImJhISKjIiShZOckpKPkJGWjpB/gI2Ngm+Bf2Z5bmhramdxcmtcaGRicoBgZGdqbWxnamlmbFxsbXVxYVRiaGNlWUlGTE1PWFFQVWFlgVRAVlNZVUZIRkVALzw9Nz82PEZOYTg6PzI0OUAzNzgyOD83PTg+RkpARDkyLT1BPUE9MDVAOUAxLSsuMzw7SzYvLissLTI0OjYjMyopNi41NTQ2NVp8XTE5S2pbTVtLWGRkQEExSWVDJzSTopuPjrCdmpOhmqmysJ+4wLagtMK7vbmxpbavqa6lt7m3uKy7r62qq7eqtLmupbK1sa6psba2sLK1uqeon7apnp6qoqqtnKnAmK2krrC2taysnrGtsKqim5yjrKiblZyno52aqaKjlZqgnZGbo6uqqbufp6SgmJqanqGPa6KWmJxxgpacpIB2kauonpWVn5GJl5mAl4ugj3mGk4yDbWl+d4NxbIaLhn2Ei4ZvXmNgZ4SXhmuLkJSSdXeLhH6Dj39mh4BodWlmV1xpc25OUGpkZnGEZl5kZm5saV5fX4mQhIZoT0tEOEVUZ15KR1BQVVVLR1Ngb3RlRVtRVVBGSEZDPjE7PTY9NjwzZlw1Ojw3NTtENDg2MDpCNz86PkZMQ0IzNDM9QEBAPTI4QEU9MSwrMDg+RzYwMS4qLiovNjY4LCMxJzIxNDoxNzZYgWwxNk9rW05cS1tmYj5HMVBkPSsvjaSZh5Wwm5yToJuqraujvcWvqbfCuL28rae2sKarpLi0srOwua2qp6y0prC1o6i4trWop6y2sq60rbOiqZ+0q56ipJynqJqsvJWmpa+zuK2tpKiuq6yloZ6coKinm5ihpqWbm6ennZKfoJmRnqiqo7Wwo6OjnZaYmJejiKGPkpqHoYeUnqF/pX+nq56TkpuSiIRyeIyOhIihdoiMaZeIZn1zeKFviIeEfo17f6Ggn5l/e4iedIiOdpuKbIeBg21oZWN6bHFiVIZtY21pmHFYanBuhldeaVtraluIcG15coZoh4RaXkZOPkZeTUVSVldRUVJXVGdeTFlLUlJPRUdHPjw0OT05PDc7MDw8Nzk5OjY9RjU4NjA8Qjs8OT1GUUc9LjU8O0A9QD41OUdBODIpLjE8STkvMDEuKi8oLTQ1ODMlJjIxMTU+MTw4WIN1MjVSa1tOXExcZ189SzFWYTcvKIyml4ScrJ2ZmZ2fq6qoqr/DrrG6vLfAvqqkt7GqrKazta6vs7arqaWxraW1s5yttba0paeos7Gtsqevn6qgsqifpKOaoqScrrWVpKWmtr2mrKepqqyopqKgmZ+mo5mZpqOkmJykqZaTopyVk6OlpqG3pKSgpJiVk5iUnIiukJiUiamLl6OchbGApK2elJqelXmC1Kh/h5TBm8d5eLGlt5dkgMCcv3mEhHmPg3yQkJHKcZa8nMV7cranupB7gWyWsauweWhrWLGub2VpvJK8bmh6bXKP2H5TamO2sn+BcZR1mqGqkFdPV2FPVk5GVFtYUVBTi1xXW1BAXEVRTkRHSTw8NTc9Ozo5Oi49Ozg3ODs5PkY2Ojc0PkA+Njk/RVJJOi41PjtCPD9BODpKPjUyKjIyQkUvLjMyLisvKS0vMTg2LSAvNDE2QTE9OleDdzIxVGtcT1tNXmdcPkwxW100MSGOppOBpqmfl5ydpa2yqbHCvbK1wLW3vsKrprStramor7Sqr7a0qKemtaanuK+ds7G1qqWkp7GurbGmqp6npLGkoqGfl5ygn6+tlZ6in7S6oqmooK2upaKdm5qhqJ+Ym6ign5iep6eRnKeblJ2hp6OgsKOfoKOWlpKYkpmFsGtqio2qfmeEloetZXGenZWappVxrqGkfne7fGuhj3axX2q0W6WAZpyRYGaBemZ/anhqqWW+cmemjHaxanyxeHSSk2NtbaduW4SgRWlnh5ZFdZxgfmd7o6eCWV+Lq2mBlXh6aqc3Sq9bV1RsY1tLTldfXFdWO06IT1dWL0lUU0lDRUY9PzQ2Pzs4OjkwPTg5OTk6PTxEODs6Nj1BQDY8QEhRRzkwNzxBQz5ARDhARz0xMy0zM0UzLi41My8rLyguMC46Ni8nJDIwM0IvPTtVgnYyLVZqXE9ZTF9nWTpNNV9ZMzEbkqKVgqynpZ6jpKqxt620vb6wt8SyuLrCp6mwrK+pqbGvpLC6sKSlrrOjqbipnrOysKOloKqtr6uvpqefo6KwnKOcmJWYm52tppebop60s6Gqm6GtraCempegoqmcmZ6koJyZoaekkJ2jm5ihn6yfpqagm6ChlpWRlpGahrWbtXiFqZm1mXeHs5u3f5OWl6mUfmuBpnqBhYiSlJJ3q2dqsVuse4+HlHSIcI+GgH+IkJd4g4KLl4yDoI+FsHZ3n3Framx8i06kWEhjY5l+Y2imYHlydVOShl5QqW1jcX6HgGKdLlGibltUa2dgTEtcZFhcWkI+sHhXWEEjTWhFQkRBQEExOT44ODo4NDs6OTw5OkE6RTo6OzY6Q0I4PT9LTkg6NTpBRkJAQUQ8RkQ7MDIwMTtGLDAuOTQwLC4oLzMsPjgzMR8vMi1EMTw8U31uMytYalxPWE1fZ1g3SjlhVTUwHJaflIizpqahrqmns6yqu7bCsLzCrbi3waqsra6vpq6yqaGvvKqhp7Wto6u1paays6ejop2nqrKosKelnqCfr5afmZWWl5ifraKamqSota+hqY+pqKmbnpWYoKWomp+do5+coKKlo5WbnpianaOrm6aZm5uioJeTkZOTnYPVk5m5cLDCfsaGfNaUm7t8mpalkI2bjKR6jYejgqWCeqx5j51Vr3uJfp9quVq5d4aDfaaCk3yYeqp5jZ2Pe7FujoR0kLuFb5RPr6fFilGgemNgqmJzcodsl4dfU7W0yIaAiXxjpDNCnXZdUWpoZFBAWGZaZGFKSE1sS1pTT1lmWkNDP0U/MDw8NTk7NzQ8Ozg9OjxDOkY6Oz42OkBDOzZAT0xIPDk7REhDQkNEPEVGODEyMTFEQi4vMDQ4MystKS4zMjM5NzEjJTUqPjM9PVF3ajYqWWlbS1xQX2ZUN0c6YVE4MiWcoZOYsaiopbOqpbSopby3wbC6wLG1tbyztqexsaOxs6afrraom6i6rqKvsaCztLCgpJ6ep6mwqLSppZydnquXmZeXl5aXoaqdmpeorbCpo5+OrKKnlp6XnKGloZiioaKhmqKip5ueoJ6VmZumoJynlJuan6GZkJKVkZ2Ism5otXGriHCOpnK0c3K2e5qYpI2Pm42ifpCgpX6wdoOR0tF1W658hn+kb5uqpmuGhX2tfZeZj3uxc5OdjnizZZZ0hZ5unmaUUsiLWsJcn3liX61gd3OHYpeIXlnKnW+/gXVNS7VTVcZkVFFqY2ZYQU9qX2xpUFVGSTk9V1JbV1hIQz9KPDI/OzU9PDQ2Pjs3Pjw9QztHOTtANzs+RDsuQ1JKRz4/PElKRkNFRD5JSToxNzQ2QD4vLjI0MjUyLSkuMjYsNzQyJh82MDs1Oj1QcWg5J1dpXEJOVF9lUDVHPWFNNjIvop2RpK+spKq7raa0pai2u7yyu7+3trS7u7OltbSisrKjn6ywpJimuq6ksbCctLiqoKadoaqksaesqqWanZqpnpaVmJmTk6KnoJeTpqqxpqGWkqyfpZKUoZukpp+Vm6anoZqjn62aoJ6ekJacop6cpZSclZqin5WYlpKbhax7d6h2o4+Kh6lvrYqDqIOZmaKKkpmLon6SmImuhX+Cs1xys1KufoOCpH9x1313hH6PnYaZmnevhoqRnId3tGGaZZqCgZVsklqwWEuadZh5ZmCtXnd3h2eYiGpdr3eVno94bDV5yK6yX0FUb15oYEVQbF9wbVZVTS9lY2lTWVE7QURATDo1PzkxPTwxNj85OEA9OkM6Rzs8Pzo+PkU5LUVVSkVAQzpNS0pCSEc+R0s5Nzw0Njo+LzA0MzMzLjIuLjE4Ki4zMiUhMDM3Njc9UGtlPiZWZ1xAPVZfY042R0NgSTo4OJ+dlKC4sJi0wa2osqeqsrq4tLi/uriztr21pbi0oLSsn6Coq5+Vp7asqLCxq620pJupoKCoobWmpqqjmZ6VpaGUlJyZk5ajpZuTkKesr6aglZipn6KPkaKZqKaglZqmqZ6dpJ6snaCdoI2Un5ueoJiZnJaXoqCUmJGnnYapfX2leaGPj4OqcK2MgqeGlqChipeXiKOBkIiUqnyAi515b7FaqIOCiKB5dNh/dod0p4GOm42SpHyWkJ+Ee7JenGSgfYKUbJJcq1tak3+Rf2hnqmRze4FrmIdxXaxaiaCOa25lT0pDoVxaTHReY2ZNWmFfc3RfSlU1SpqSWUhFPUhGQUwzNUE4Ljs+MDVBNzhAPDY9PEY/Ojw2Pz1CNy5IVkpFQEg2S0lOQElLQEVOOjpANC46PjEwMjE1NCsqMDUvNywmMjEoJCQ2NjcxPFBlZUEmVWZbPzFVX2JMN0ZJX0MxPjihnJmZvqyYtMKuq62pprSwuLG1v7q6s7G3vKq7taCxpJ6lp6eek6qxqa+qtayrr6GYoaCmpKO5oqOroZeckaKglZSfmpSZoKCQjYypsK+mnZeap6afjZKkl6irp5SXqqifn6CjraOgnaGNlaGYn6CSnZeclZ6hlZePq5uPrm1ytHSpjHeKpnO0eXSzgJKko5KcjImkh452uG+Me4uia2u2WqGGZZeXaaCip22UcrR0k5h/smqGkoita3WzYZ1mom6GkmqXXK1gTaF8h5FSc6NseX9+bpiGb1yvVjycd2ZUb24uXKdPYlJrZWJtWWJcYHF8Y1NZUD4+bW8zQkJAP0w5ITdANi47QDM3QzU4Pz8zOzxDREJKRk1JRjYySlRLRUJKNklKUD9IT0NGUD08RTUwOzswMTAvNzUsKyw0MjYvIzAwLCwdMjg5LzlOYGVEJ1VkWT4vVV9hTDVGTV44MUI4pZqbnbuinLLArq2rq6e3qbivtcC1vLGvubirwbeqqqCbpqShnZKrqqe1o7Korqqgl5yooKSruZ2jrZyWmY+lo5aNnaGcmZ2fkZOVq7avp5mUm6ypl4yTpZmlrKORl6uypKCeqKuwmaGij5mil6CblpuXoZOdqZyUkauZh9SSmrt0scSAw4Z91ZacuHiIkZeMl4mMp4d5o7Z1fXd2woKasmCDunnAfHW4YrWBjIepfZaBrKlxe391vIinoGmdYaaOr6F+jHSHq32+bnO8dLKDdXiAim6aiHBtjaR0vV13fVthebxrWlZbanpeaWBkZmJteG9ZW1lDQUByP0NGKzVIIic7PzEwPD83OkI5OT1DNDxATlpeYGBfX19aUFBSS0VGSjRITFJASk5FRk9CPEU4ND05MDIwLjk3LSouLzE4MCItMSwzHiw8OjA4TFhhRidUY1g8L1ReYEs1O0xbLTdBOaaZnqK8opexw7Ctqaqssae4r7bEsbuyrruwrsGyrKWinqOhnJuRqqSqsqS1p62kn5aaqpmmrLicoq6ZlaGQpaCTjZyjnpiempCWkq+5sKuVl6Oop5SRlqWcpK2ekaCoq5+coKmks56ipI6nopShmpyXlaSYj7CgkpWqnoWQmbWAkZGNuJV4gpObtXdubG5zbnmPhI6Jc57Bu7yae4GyqHCAdJG5g3yGhouHjXuKho2XfKS7ub2cdXqzo3R2l3V0sHWYnmaGaY22dHJwd7aMXn96fYlng3lteWKLrHB1hX9ZW6dqRWRaVGZgY11iUWdncW11Qk1QTEQ7Wkw/SjM8MCA4PjsuMz1BOTk/PTs8QzZCVFlaWltbWlteYGJgXVNHR0g0RElUQUtOR0VPRj9HPDc+NzA3MC85Oi4sLy0qOC8lJjIoNCQoPjcvN0tUX0cnU2JWOCpPXV09KztWVic9OzymnaChv6WWtMO0rKqnrKupu66wxq+1tK+4p7W4ramjoqaeoJ2ZlKykraqmtaion5uWoKOerKS+pqGqmJWckaKbko+hqKKTnZeSmJSytbatmJ2kpKKLkpKmm6Wrm5aopKWcm6KppqajqKCRrZ6Wop6Xl5edno+wqZScp6KOan5pnKd4iXN+mo51emWHe72+wLpukoNxlIZfcmpaXpqJYWSHjpVrYICVY22cdmKUa3+alZRlXmBjcZuKaHKMfYaVZ2p+cXR5fXxiW3d0gWhQXG6DfHuLalhseYJySUpvhXBNdE1FV11mYUxbWGdjXk9bbXVpcVJPREVOO0hJPE0/MiwyQT84LzU/Qzw5O0A7PUM+UlZWV1laW1tcXWBhYWFgXFVHNURGVUVLT0hGUElJSDs4PTUxOi4wOzouMC03Nj01JiIvKjIsJTs4LTdJUl9JJ1NgVjQpUF5MKDM+W08nPzI+qJ+oocGjmrS6tqOspa6nqLWyrMissLOstaO+sbKmoKOpnaObmpmsp66kpLWqpZuYlaKbpq2ovqepppaUm5WgmpOYpamnkZ6Qj5icsLK/rJumnqeiiZORqpqopJqbq5+jmZujp62in6qhmbCblKagl5Sdn52XsKWZoqiZnJGenKOkmaejmpyam5qQloJobnxxdpGXlJGEibSpjYaYlY6KjJeXh5SVioOSk5GJjZGUmZOYl5qgopublKCdjoJ6pIVranyQfIB0iYqBcYJ4eXZ2ioB7impzgXSDdWR3fXZrcHttYGNccGhNWVllal9XWW96bW1mU09GUzlPWk5STygrO0pCNjM1PUBBOTpDPjxFTlNTVFZXWFpaXF1gYmJhX15eW1RLQ1NHS05ER1BMT0k8OjszODksMjs4MjApNklSTzgiKSsvMiM0Oyo3Rk9bSidSXlMxMFReOis9OF1LLDwtQLKgs6G/oqSxsregqaWyp6WwtarJq62xprWmwKi0oJ6kpZyklZagq6aso6O3rKCZlpagl62qpcCeq6SWkpyXnpiTlKKfnqKnkpGZqKeyw6+aq52rno+WlqmeqpycoKyYoZudoqWvpqKkp56tmJamnZmaoZ6enLCgnaKnlpiTmZSgopajn5egjpaUi4qNjpetj3uVm4KSgYmpqIWBmJaKhI6fiHuEkIaFmZCHhomVjpuXjZCYnqOWmpORnY1+jWais66FiYR2eo+KfXZ5em9neZCBgIlrdYF5iHJodH96doOIgmt0Y3lmYGlkY2Rmalhre3BpalxSTFBEX1VGQD8+LDRARjs0NTs+QTs8Pz4+SE5OT1BTVVZWWFpcX2FjYV9eXV1eXVhWSktMQklPTVJKOzw6Nzg2LzI5NjQuKCYkLTEuLykrKjclKzwoNkNNTEQvVF1RMDVNWzE3RTRcRzU8LEC0oLmvvq2rrrKyoKqmsq2irLOwxbCqrKOzr72ktJygpqKhnZmXqKWopqSms7WelZSemZmvpq6+oKujkZGempmUkZWhnJepnYWeqayis8i0oKqkq5aWmJqnnaibn6SrlJ6fnqCqrqmloqqhrZuen6GYpZ6cn52vpJmfqJOYl52SpZqYqZ6al2aDknxlfo6aj2N4jWxoa3qQo6trZZqYfmeFimVlaWh6jaGOa2iMl5Gid2tqi5ijn5hzbG56hI2GeVhlXYWBXmuKioF2W2hzd3eRgIeCbniCeIBzbXmEdHeIiI+De2qFWF5rdGRdc4hpanxxbGNdUU5XSWRYQEozPUY3P0ZENzE8PT9BQzs7REdISElMTlBSUlRXW15gYWFgXV1dXV5fXVpVT0RIT0tTTj0+PT02NTM1NTU0KiYmJSwqJS8qKyc2KiQ7Jy9BSVtJLzdaTzYpRVkvRE8xWUM7Py49pZ+6vLmvq7Owq6Wora6wpq6usL2xqaikrbCxn62Xn6OeoZqZpqqbrKOmqKmzrp6Vo5Cir6a2uaWuo4+OmqGZk5KaoJmZpZZ7payiqLPDuKSip6+enpWeo56jnKOpqJGeoZ6gqq+qq6Kpn6ibpZ6noKyWoZulsKSYnKuWoZ6bk6WYnquZnn6+g4hytHKFnoataHi5xLhxkqGje6aYmXOqgnzLwMC7cYuih4OffJWYiJ7AvYKWnZ6NncHBe4F6kYyawr99a6Wxb4yBb8p6f5t3kYOOgHZ5gX95cXp/h3F4hYyTeW12kmJmX3hjX2WBYl50aG1kYlhMVklRWkhPRDJJRT9EQj4vPD8+QEE6OERDQkNFSElLTU5QU1ZZXl9fYF9eXl5eX19fXVxTTVBHVU5BPz89NjQ2ODI3NiomJSMpKiYuKyopMTAfOSojPkhbTCojQ1AvI0ZbM1BZL1VBQjsvOJajuMO1sK/AqamUo6+psK+tprK1r6umpqaxq5+rmJqioJybqqeinKuipaikpLSknaOTpq6st7Onr6KSkZqdpZKRoKGXnJ+dh6arpKutv8CwoamvqZeSn52imaKjqqOSoKGena2uqaylo6KmoKSlna2pkaSbqa2qnJ2qnKyilpellqGjmJx/zpR5eqWCeZWWm1+uj16Op4ChoX2nlpt0q4OAr15kjal6p4eFoHSXkoizY4KrhqGOjbNphK50fJaHuGGCrVmjzW6PdXvbe3+ZcH6IknV/ZXuHdnZrfYhufoWRkn5tgY5gcWtwZmBfeGRbcGhqY2ZgUlRSV11KT0M1QUhFRDg+NjtAP0E7PThAPj4/QkRERklKTE5QUk9TXF5fX15dXV9gYF9fXVpXT1VKPT8+PDU1NzgxNjQoJyQhJywmJi8oJiszHTYwJDc7U0wrLS1KMCc7XDpMLSFQQEY0LjGtwsDAtbSwt5iekaSqqK20q6ayrKyspKymsKqgp5uappicorCfoZ+op6OmoZ6wrJuelqaurbGrqKyglJKbn6WTj5+ll56oo56upKuwqL/Gs6ipsa6Wkp2copegqaqflKCenJ2tr6eqqZunpqOhq5KttJamoquqnqOnpqGwoZKap5qhm5SUkZegcIWMl3WFqIdxsXydcax+oZ+CpY+ed6uCfa1/nHKtfquHhp92mJJ6fJd+qoiijJGLnX6re4iTj6CAeq1WnMR6j2+SwX2BlW11cIxtZnZlhm9hd25yb4mKkZCDbZCPZW90dm9gZm1kX29paW5mY1dTXGFaUlJDOElJQEM8PjxARkRDRUE9PDw8PkBAQUJFRkdFQENJU1dZWlxdXl1cXl9hX15eXVtaUkM+OzkxNDc4NDUyJiMfHCAxJyAxJyAnNB41LSY3PldKLT0nPjEpM1ZARiEcRzpDMS4rr9TGx7K0n52jjqOjoayutq+psKepqqiuq6unoqOdmaKVn6arn6Kln6ioop+dsKyXm5aop6+tqKepnpeUmqOikpShrZudpqOurKOstam5zbKtpq6slpScnaKYn66snZafmZ2fqbGpqambq6mjoqubr7GiqKyuppmmq6qqsaOTl6Olm5SShaRqpHWJeql0erJwgqWJmYxwiKCah6RfYFKrhH+ugpt2roGnhoafepiWhXtmgKOJpJmGgaN9qX6AlIeuXnyoVZ2ikoF6op+Ae8OvxYxzr7OzuXFiqa/CdGiNjJiPgW2akm9ueXh3bmxmZWRxcGZ7aGNdV19pWFhUTExRTENDQUI7Q0FAQkk8PTo5Ojw9Pj4/QT04NjtETFBSVFZYW15eXVxeYGFgX15dXF1bU0lCNjc5OTY3NCwmJCIgKCciKy0iJC4hMy0mQERXSCxHKzY2KjFQS0wjIEE5RDQsJ8LJ1dbAoZmrqKGvop6wtbCvqayjqKaqq6uppKagm6WfnaWnpqOcrJqiq6Gkn6+inZuTqqS2sK6gqZudlpSno5CaoqifoKacsKajqLGstsiytaqsqpWRnJ2imZ+ls52aoJOcn6erq6OumqyooqGqorOtoqqzsaGbqqivr7ajk5ekp5ibkXyqbJ6Eh3WreXywb4Kki4mflpWflYHSuLS4yYCBsl5flKmDpIeHoHqYlZl4qsl0maOVp6mQkpuMfpuJmsbGd2WhgqVzgZ+Ogn2vXm+1Y7F1S6OGbadHgpNkj5Cek3xwl5J+cHt1fXptXGZqcnFmgWpeYlhjbVxeWUlNTUtFREFCPkE8Qj9KOzc5Nzk5Ojs7OzMuNjxBRklMTU9RU1daW1tbXV5fXl9fXlxcXFxcWE1CNzU3ODUvKSglJiUkJiksNUZOT1BNRkxKVkYqTDAvPi00T1RRHRw7PEYyLCSopMHGua2osq6spaKcsrmsqqGmm6imqqypp6CmpZiqo5+uq52moKyan6mlnaa1nqKXk6eqtbKsm6acoJWQpa2RmZyno6Cqp66ho6epsLTCsrOqraiTiZidpJqho66klqGVmJylpquar52tqKaerKO3rKGyua+dm6+ns7SzpZWYqKSan46CnU54moF/n3qEo3yCpISHp5+cnpOEuHx8ebmCfszFwrZ4m6GQi59+mpaXinaemIqkmKOofrCFnISehKx9mZRhpWyjcI+FkIF9l4NyrGCkc3GAmmC8fVJVdY6Ro5d8fpKRiXV6c4R+cFxtbndyaoFvWmRfaG5iZF1LTFFUQUhHRkk6OUs+QjEwODg1Njg3Ny0qNT09P0JER0lMTlBUVlhZWltcX19eXV9fXFpaWllVU09IQDc3Mi4sKi4rKicmP1FUVldXV1lYWFdVT1VGPEUyOlBbVBwbNj9ILC0gjIeZqaykq7mrr6CcoayztKafoJWlrq6uqaadpqaao6ehsq6hqaayoJmopJSitaKjlZehqbS5pJujnqOTkKGymZ6cp6ahoq+tnaSoorWxw7Gtqq2pkYeRnKaco6ScpJaemJmZpaSomq6hraWmmK+lvK2it7etnp61srmys6eZnrCipJ6Gj9G1w7d5h46FkZOPgKZ4lKJ3jKCShKWCi3GrhoS0bnJqmaOclYmffJiZhoePc6+CpZuijaaLk52JlJCbbXCyXKVzk3qcbJl/e5l9bqlhonFxf59ic7K4aHiPk6aYfoyMkot4fXmNgW1pd2l4c25/dF1kZG5tZWhgSlpXWDxHR0BVM0BGPjwqKDYzLjAxMykmNDo7PD0+QENFSUtOUFJUVldXWV1fX15eYGBdWltaWFVSUlFGOjIyMzAvKysoQFFSVFVUU1RWV1dYWFdVVlZUUU9RW1UlITJBSCQpJZJzjIquv7+7u7Wel6ikrbahopmVo6mnrqmrmaWhn6WgoLWnoqmnsKOUq6OOpK2jnZCamqmztKSdpp2pkpSXrqCgnqeknKectZqgqqO2q8KwqauqoYyEjpuhoKailZiZnJiamKakppirp62ipZutp76slb6wrZ+jsLO6rLSnm6mypaiYeqiQfXywd4qBpKWInG2yb6GHrXyhj4OolpmArImEroWflKmgopaFn4CZlYB7kn6rgJ2aloqqeJ2gj4mTkoB5r12jgXymp2SdgHyXdGuuXaVrcYWZXWBbjKBulZGmmYOUjZaLenqCln5rbX5ifXRuf3pgZ2Vxb2dnaENZYFs9SlMyVThCQkM3JCQzKycnMywgLzY2NzQzNjpAQ0ZJS01OUVNTU1ZaXV9hYGFhYV1dW1pYU1BPTkk3MDUyLiosQVRWVlZVVFVVVVVUVFVUU1RXV1dYVlVVUUhGSUojKCi8kpqEqcbDtsG0n5utoK64paSOm6SjoK+vqp+jnp2tmJ65oKKroK+qma2hkKqppJaJmpCusKymn6ebrJiYj6yioZ2mopqlnK2Yn6imtqi/r6WppJ6MgI6bmqCmnpKUmZqTmpqlpKOZqKuro6Sfqai+pJfDrKqjoqyzuqyvp6G0sKmqmXavfpCLnIWHfbquiphlsIxlla19oY+Dp5WagayKhLCFpZmkoaKQhKBbbGqBs2B/rXt7goCxbGdumZeMiLFbfbRbpINryKJln4B7vFl2tVqyfVKvgHqsWIChbZiPqJqKl5CVlnt4jZx9ZHN9YoN3dIB8YWpmcG1mZWVPVWNbQVRePkkoPjk9NCEiLSUfMi4gKjEvMDQ1Nzk6PEFDRkhKTE5QUFJUV1peYF9gYWJeX1xbWFVQTUpHQzU1My4vQFVZWFdYV1hYV1dYV1ZXV1dXWFdXWFlaWltcWFdXR0I70p+zsre9u7TBs6Ocraaltqihi5mgn52zs6meop+dtJigs6iqq56wrp2rm5WuqaKOiJuOr6yopqKnma6TmY+omqGepZ+ao6OlmZ6iqbKovK+kqJ6dj3yLm5WhoJmPkpqbkZmXqJ6hmKitp6Wlo6Wpu5+gxqelqaKrtLatrqegva6trZaBqZKjr46bgIakl5iQgYC4w7qDjpyThaeXnIKsioKviKabmqWqkX7VvcKqYqO/vXx+o4KD17q4tYWUk4Oevb6EaqOBb6uEbp1/erKwx4Nqq7C9rXh3or67dICWjqacj5qQlZx5gZCaeWJ8emSMZnmCe2BrZWtqYlBiW1NqXEBUYUJOKT06NC8eHyQeJTIgHSQoMDQ5NjY3ODs+QUNGR0pLTU5OUVRXXWFcX19hXmBbXFlUUU1JQz88QT81PVNZWVhZWVpZWlpZWFdXWFlaWllZWFlbW11dXFpWWFRXWryVtLSxv7myvbOina6mpbOmnYyYpb+qt7Goob+mprGbnrGcuaiera6lppWUr6yXjIOaka+mo6yhpJyqoZiLo5KmnqecmqGoopmeoKutqbmtqKObl5N7h5mRppuTj5GYmI6Yk6mZn5ipqKCqpqGjq7ueqcWjoK+jq7O1q7CqobyosLCadHWqpLeGZYmfcGetj4qPbW93pJCZn4F1rpmVcJCMcZWno5uYrqRybW1tZYp3bm2CmXGAeWlxaWeJlpWYcWhphYZncIZkXoljam9ZXWd+d6ZgYnGOkm9mZICNko6imJeYkJWefIeOlHVlhndojWp5fnlkbGNmbGJLZFhKa1k6UGVFUidLOisjHCAbIywpGBsYLTIuNTo0NTc6PD9BQkRFSEtMTU9RU1ZcV1pcYGBhXV1bVFBMSEQ9OkFCN01YWVpZWVpZWFhZWFdXVldZXV5eXVxcXF1eXV5dW1tVV16olK2zqrq5srOqqaKunqSyqZiSvbHDyL62qp7Aq6yjoKarn7qjpK2srKaOlq2qj4yFlZetn6WqoZ+jo6CRjKSSp5mpmZajqqCWnKWlp6+6q6yam5KSe4SXjaWXjZGRmJONmJWnlJ6XqKKasKaeoqy6n7DCqKSzpqyxsquurKi5pK+4loqhqKW2nYmWopiHqZqQlJ2TqrOZm6OsoLKWoqCeoKKcoKShlaumjJKTjIeSnJyUkJmTmJCOlYaBpJqXlY2Lk5KKj4aEfmeLf3SCdnSIjHGnbXyVkZSTgYGPj4+PnZSglZeWoIKHk4xwaI92cIp3dnx6amxkZG9jVWBZQGlaR2JgT1orRj0rJiE3NDAuHxwhJTIoKjc5OTQ2OTs+P0FCREZKS0tNT1BRV1RWWV5fYWNdXlVRSkVEPjk9QEFTWFtcWVdYWFhYWFlYWFpbW1xeX19gXl5eX19gYGBfWVlgpZapqqW1uK+uorCkrZ+gtbGRjqvFvMS7uKqipZ2bpp2wqKO2p52ptKankZiso4uIiY+cp5arpKGZp56ek5Wjl6ibqZmUpqGkkJqnmaG1uqiqmJqQjXyBlIyhlIqUkZWQkJOXpY+emaifnLajnaest6euwq6jt6avr7Ctqqq0uqKvvZmSpqOmtqOSnaaejamfjZKfo6yvmqGjsaivl6SgnKSqnp2dnJernJKZoZuTkJaqmY2YmJaQlp6RiKCdlZSFkoyQjJSLgX5mjIZ1hnZ5iINznGqHkZSUkYp9jJaSkpiToZKclqCDh5eGeXGVcnmJf3F7f2puZF9waWBbYFltYlBgY1BbOkdHRD0yPT03LiomKykmHSY0MDY2NTg6PT0/QUFDSEpHSktMTVNTU1VaYGBpYGVWUEpBQ0I7OUVNVlxeXltaXFtbW1xdXV9eXV5fYGFhYmFhYWBiYmJkYlxbY5iVpKejsLOsrqOpp62gqLWqkI+cpbO7r6ysoaKZep2isKSlsamWm7imopSZqZyOhoqJm6KQrp6jlqefoZKXmJuui6uWj6iZqIyYqI+eubakpZibjYl5gZOMmpOKlJGTkI2RlqKMnZ6onp+4pH+Er7WisK90pL6jsqB4eqCrs7yVdq6kn4qAqn5kXGJ2n46knoSXfm6Ts5yjqK6romWeoJNzeZmWcICYqJdsf6KniWWcpZuQl5iWi5GbkYWdmpCVgpKHjo6SiYV4a5CHdoZxfIaBgGFpiIuVk4tbdpWRZ2iQjnJ6pJiYZHmYhoF3l2mDioJueX9rcGVfdm9ra2hbZmNiYm9TWz5OTk5SRz1AVEI5MS8eHyY0OjMxNjY3ODw7PkBBQkZIQkdGSUtMU1RVWVxfaGZnV1FKPERHOzhVUltgYWJgXmBfYGFhX1xdX19fYWFiY2RhYmFhZWRjaGReXWaclaajobCxrKuppaito6etpJKWq7Wvsaaaqqarl3OLnK+fqKqnk5a4oKCPnKSdkX6IiJqejauao5Snop6Ol5GehXWukIimmqiRlqOIm7q0p6CZmIuJdHaTjZWTipSQkJSMj5OgjpqfppmcspaAjJy1nbSMko+9p6F+p6J6o6+4gY6Op5+Ei4WPsamvjImWo5p5gYushpydoqeqqIeVhph3pZt6h5uBl6aCgXucsXqKhZ+XmZSYloGQlpaEmZpjeYeQhI6PkouDbnGQiHmBcYCBhn+GdIeFlpJ4lmiTdKCadHyZg5+chph+kYmBgphqjYyEa3h7cXBnZHduaWxrW2VqaWVyW15JVExRQEU1LVlUVDYpITA5PT42NDM1Njg7Oj0+PkBESUBJRUpLR1JYWllbYWFoZlpRSDlFTDs+YlZeYmRlZGBhYWBiYl9dYGFhYmJiY2ZnY2JhYGVkY2djYWFonZijn6aurquorKCosKenqqWZlK7GvbCglaWotZ6Pg5yrnKahn42Qvp6ZjZ+aoJB9hY6Zl4irnaKVn6CRjZOJhoCRqI6Hopyjk5adhp+5sqedmpKOhXB1j4iTkIqUj4+bi4+Rn5KWn6SWnqyIn7SJtJqui8qIq66Jt4WNsIOxr4SpjaeYjZ18qI9ye3ebjqaWaJWkebSLn56mqJKZwoF/q4iYoXGegJqkfZeFlbGBoXygk5+PmJeAjpObiZiSi3yFk4aNlZOJg21zkYaAe3KGgYV9hXSFgpeBj8VmgKmHj6JqnoOgmIGZf4qLg4iYb4yShGd3dHt2Z2h1cGdnbF5jbmxmbFhoR1xRTDJFNDZNYGM2JjQ8REdEOjY0NjU4Ozg+PT0+Qkw/TklKTENQWl1cV2JeamxcUUU9S01ASmRZXWNmaGdiYmJiZGNgX2JhYmNjY2RpaWNiYmJlY2FmY2JiaZWXop+wqKmopaugpLmxqqummpSgo6SqopWjqbajr3+gp5ylnp2Jk7yZk42gkZ2QeYSWlpGHq5mbmpmhhY+Md5ucj6CRiJ6km5WYl4aiuK2lmZuMjH9ibY+Kko+NkIyMl4uQkZ+Pk5+hmaGofqGnh62eoJauj5+dnZGGgaCNq6+HpI2qmoyafqN2gJiTa4GrdU2reIeNnZGbqKeBqqt9g6F7eqdpnn+Sa2eXhpe2iJ59bWBjWIOXf4x7ZGeLc5l9eZZsXXyXbl9TcYRcYGx5g2BZZYJ9hIGYcaeqa4OjbnKlcJ+Dnmhkn2xabIh6ZVlfgn5hV1BvdmVudHJqam9eam9sa2hXaU9dV0U5QTRHQ15rNCtJQ1FNTj04NDg1OTs2QDs7PkJPPlFSTE1CSlxdX1deX2J2YE1EOk1PTVRiXFxmZmlpYmJkYmRkYmFiYGNkY2FiaWtkYmRkZ2RiZ2VhY2iYlp2guaGqo6askqG2vKuuopmXoKGlrKyfnK21o6iSoJ+fppuZjpi0mZCLnoyVi3WBlJGNiqaWlZeenn+ShYaspIeckYqYqJeZmpGHpbCmopWaiIl/aG6Ih4qOjomLjZKLkJKijJOeoJyipX+TgY+joZSgd5yWkKeDoaeAhqquhaV5i32Emn2icHOTh5Z7nox5bYebjJmQm6iaj4edfIKic3amZp5+d6RfmHp8knOibpi3tLp0koeBgLaoZIHGuHtwlbeMcYCbpGNzrKtgfWqds35ufYeDjoKLl3GAo2xzpHOeg3+kXp2Zs5Zve5ees3RyW56ygmlib3R1cWhvWGtscnJlXGleYktEPUQ1UUFZcTI8UkZfSlI9PDM5NTo6NkQ7O0BJUD9UTU5RQERfXltaWGBgfGRIQzhMV1VWYmFaZmZra2JiZWFkY2BhYmBkZF9gY2tuY2NkZGhkYmdmY2holJaVo7mZrJyToI2kuLWuraCbopyjo6Ssm5qxrayTl6CYoKSZmpOeq5uLiJJ4i4VwgJaNio+gkJOUnZd9kImOqKGHmI+KkaKTm5qMi6iopJ6PloaDfWp6hn99j4yCi5CQiY+UoIKWnaCdoJ+LiXecmKKMoHKii4ipiJynkZeoq3+ujH16oJl6o5N4gHOXiIycfZafhpuNmZumhqNkoXyJlpCbjWyeaJqNbpqZen+Kp31yZ3Oqg52Cc6pnlJpdm4V2hJ1oqmqBuGZcqXCBnGGVjF6ndnWJin+eaJp1h5OSmI5/nm6ZkGummVyofne7an2pWo6EXbNnXG5xeXdraVtxaXh5Y19lV2JBUEVON1ZCUm00SlpaX05aQ0AxNTE7OzdIPzpDR1Q/WVJZXT5EYl5WYFFhZH1pRUI5TltdWGRmWGZnbm1iYmVfYWFfX2BgZWNeYmRvcV9kZWVrZWNpaGdraZWciaq2m6iJY5SbrLqysKydppycp5+drZqdsKirnZeimaGfmJaWoKOZhomNaYiAcXuXiIuWloSSlZiPeoqElqOdiZSPhYudkZybiY+oo6CZi5CJf39pgYZ5f5aLeoiNjoePlpp/k6KfoKKTmHJon4qgj4xwkoyCqYiZn6OpoKh9sK2koriXdqOzoqN/iJR4nXqrmn6ijp2bl4iXcqF8hY2vtX1rmpGheH6YtKOjq6iEmHuafJyZfnOqWl1ve5eLeJ5iTX97e4VjepdCTZ9ZompyfI5tgYmEmXWbeYeJsbN/f5qSpnR/nW1xfJRvmXJpo12VdkhlY2BzcH1+bmVgbGh2fGRjYFFeVl1UVkBZRVFnRFJXW2JYXklEPUI4QEI6SUU4TERXQVZRW1ZERmJcWmBLYG1+ckVDPFVfYlplalZnaGxuYmZmXmFhXF1eYWhiX2VkdmxeZWdma2RmbGhoa2mTnYGxrpmEU1+gp7O5s7OpmqKLm6mcm6iSoaukoaiPnp2cmpmVmKGdloeHiXeFgW55lYWQmot9kZKWiHKAiZKgnHKRkICImJSfmoSOqJyalIqKiXuDa4SFcYGgi3eFjYiHkpmVfJKkoZ+jiK6GfbWEj56de6aWeqmClp2Qi6Gefqdod21+mXOgc3F8nYWYb5OCrn2jg6aemoGjcF6pZ3WjY2+lYZzTkHx6mXhyc2OihY9+onKijnVrj7OLYIKYinOqsqi8f3eDbX+/pqq0XpxvfnGXb4FzonJdo2d0pmFopm2b05h7g5tud3mXa5t6dpdybKmlZ19leXB/hGtnZmRtdnhoX2FSW2VRUWJJV0lUX1dTW2VqXGRQRkNLTEpLQkpFOFA/UE1XU1hPUlJgZmVpUmR4eXdJRkVjXWRZaGpUaWhqb2NqZ2BjYFxdXV9oYmFoZXxkXmRnZGtkam1naGxomJt/sKxUXEt+qa+ytbCzo5yYhZinoKCjjaSooJipiZmXmJOZk5Kgl42IhXtwfYRofY+Ck5qBd5GNjolwf4aQk5Jsl5N8iJCRo5WDjqqalJKKhYl5g3WIgG6Cn4Z3f5KGiJmil3mToqSan4mzoaK2i3qsp6SupXCpgJqQhYGckn2kgKKZhphynoSirK6Jl4uAjKSNloOuopR2tba1yaFzlIqAn2Gel6lteZWHn5p1oYd3oH2QloqBb0xmopJwmohzpHt5dGGDgmx+oGxyZGCccn90l2l7abO1tMamc5h+e51qm5urdYKabXR3l2maeXSYcVBFfLNeanVqeIdmamdidHRxblZeVFloUFJoSVVMWFJWXGdrblZnV01KQUpNSkhKTkFRSlBlY2ltZXRyc355e251iXt7VFBPbV1oW2tpUmpoaWxnbGdjZV9cXVxeaWJkaGt7X11kZ2NqZm9tZWltZaKcia+nhWY/lKGzq6+vtaKikICXqKKipIylp52cpYKZl5aNl5CQm5KNiIN5anmGZYOMfpegeXWPiIyBaYSFkoOMhZ2NeoyKlKWSgpepl4yRi4CJeX98i3lwkKGGeYCVh4mWoJZ/lKWonJaWhGdueJxsomR8caV3nJhwZ6eBl4x7pXqgloOXcp92gImUlo+5bpCKomJ9maKViG5yaatqdaBsbqZgm2mLkGiWh5qVdaKAfZpfi4WMdW+IYmihZZ5/aZt1b2NmiIJucqJaX1tkoW5eiYxve39zcmSlbniiZGenaJhzi5huoW9TiI9voF5kp1SLXVOYbW1yanGBbXBoa3hza3BSWFdXZllTbUlYT1xIWGloc2pZa1ZRUkVWXExYUmFVaGped3V6fHB8fHKDe39ydo2AhHZeUXNhZ2JwZ1BqaGhrbG5nZGdfXV5dYGtiaml2dV1cY2hjampzbGZrbWOdpZimemV0bYunrqWqsLGmn4uAlqqcnqWMoqGaoqKAlZiTjZqPi5eQjYp7hnGAiGiLi3yXmnN0in2Qe2WDh5WKipWZgnyIhZamj4Giq5CFkIqBin1/f45zaY+lhHyFk42ImKCOiJKqp56JpniWnH6liZaMspiekIOvl5+leJaIeql0pY+Emm6looyShIyDvG58pa+ChoWGlJecoHylenGolKCWZ55+b6xjloqVkneobKmigYl2h4J3q5GmiGuRsGt2s4ypa4qGbm2fnpKVYX+ri6p2gH+Np593n32FpJWdoGmah3asZ56tjLZzd76MpJNZg6aNq2F1cXNve3RxYmp+bmhsU1ZbVWFhXGtNXFJdSV1tbXZgW3FZW2BaZ3Nlbm9yY3F0YHd7fnlyeYNzhH+Ae3uMgYKAdmJ4ZGNuc2RSbGdob2xyaWZpYV9eXGJrYmxsem9cXGJpYmxqd21nbG5ilaaqnIGAnqSWqaqeqKeuo5mJgpeqmZ6kiZqlnamdhIuaj4WckYWSjYuNdIV6iINvjYR9lpN0dIZykoJtf4ySh4aUj317gYSXpI1/paWNgI2JhJR1goeSb2yLqYCDi5SOiZyfiY2Tq6SgkIB1lZeIfoF5lK6jf4GbcY+GeJCMhYB7cqeMcX19epeWm4SOeHt+fYiUlZOKdpCYnqCDen2JbIyFW3l5cnlxaG5+kolxf3SBj5STcYWDgWWNf1+BgIx3dXOUdW95b26HbYSGX3dpeI5mgYKGjqqcfnR9l2qJiG+AdnyFdm1sZ4xzeHuXd4Rbalh4j2htd3Fwb3d4b11shm5pZ1ZaYFdcZWtjVWFVXlFfcHd5bGp2ZWpqanV8cXJ0c2FvdWJze4F4dXmCdYCAf4B4i4WDfXttf2xkeW5eV25naHVreGppamRcYFpjamVscHVuWltia2RsbHltaGxvYY6Vuqmni6GimqakmaSdq6Kgg4OXq5GdoImappqomIKBm4t+lpSHjomIjXKCfI99fo+EepeOdHKDcJWFe32Si4aGkIV4foCGmKKMe6ehi4WPj4SVgoaOl3dyhaqGjpKckIienoiMm6igoKuDiY6Vmn5+iZatqI+Sp5B4cJ6Rg3uTb36phXB9lXFqb3yBn4t/ko6MaG1dg4uMm5qejnOVi4hxdGuCdnOAWXJuh5CBfX6LaV1pY3qFg4iAX2l4e5t8g4yDdoGGgmh5i4drYXFzg3dgc4yCiZCnlYZmjY+DbnaLg3CFjXlvZWZjeYJ6lVpcaWZudlt6eXd0bXNygmZcbYprbGJZWV5aWWxxW19gWV5dZnR9e3Rvc2Nra2l7fHF7eHRkbXRobHx+dXl8e3p6f39+b4aKhHt9c355c39pVFxxaWx1b3Vna2hkXWFYa2hranFybVdbZW5sZ3N6b2hqbWCMjKuxopCjoZqfnpiemamjoX2Dl6uMn5SHm6KQpZV/e5eEfJKZiImGhopyfYCLdoWLgYSWinFvgHKYhoR+koSDhoqBeoCDipqej4KmoId4jZeIlYuLnJeFg3qtgpGYmZSKnp2HiKGroKKio4yIk5uco5mWqqGnpqCSm4iXj3x5j46EqH5/kpGSk5ywpZqUnZCNspOYhKaMjJSan4mQm4KJkYprfI52d2WChpCKfImdhIeLj4eIgISDkHd8enWaoomHi56LhZR/foyBgXZxdIaFgHiIh4qRppGEho6Ig42QjHyHioiPgXZrgYN7eZlpcmhgc4pwfXp2dW93dIFdXm+HaG5fX1pcXVNocVVjW1thbGh1e3xybnBka2pof3tteH9xaW9wbGaBe3KBgHiAfYCEem2DjIZ8enh8fnqDeE5kdmtzbXB6ZGtlYmJgW3RmcGZycWxVXWx0bWh5enFnaWtljYidup+WoqGYlZmYlJikoJ17gJmqjZ6NhZ+cip6WfHmUgnuOmYmGg4SGbXiBgHKAh36Ik4Rta356l4aEg5B+gIaEhn2Hg4yanJKHqp6CcYqPhZKRi5yRfY17qoSNkpeVjpyWhoabp6Cimp2Gg5KamZmQmqagpp2dkJeBkYp3fYiOhaV7fI+QkYaYqqGdk5yPjauNkYCejIiSmZ6Cjpd+ho2Cb3iFcXRgf4OPhnWLl4CDj4KGhH6Fg5RueXV0k6KLjYWahISNdICKfXxyc3uIhHt5jI6Ek6ePhoSPgoOKiYl2hYeJi3tua31/e21oa2xnXnl+Z3x7dnN1dXt3XGBwfW51YGNbXF5RZm1TZVpdYWtpdnp+cWtsZGtqZ4CAbHOAbGx0b3huhHluhoB2goB9hHZxgo2Ifnt7fH97gopgaXtqdWhpgmRqY2BpW2N1aG9idW1sVGJxeWVwenpzZWptbYuKn7iaoaOfkpKWl4uan56de3iepZCbiYaklIuYmXl6jYV8iZGDjIKBgm18f3hygIV9ipB8a2h9gZeIgYiOfH6GhId8j4CPmpuRiKecf3CLiouShqChioWMfKiSiI+Sl5OWkneNo6Ghnpaaf4GQmpmTjJujoaSal5Gbf46EeYCEj4ehgH6MjY98l6SgoJKZkI+mjY+Bm5GJkpebfpKSfoaNgXV0gnB2YH2AjYZyipV8iItyjH+ChYaOaHdxeIyYko9/l36IinOCh3x8cXl6jIV6e5KNg5amk4uGkXyFhoeEdYKDiId5ZHJ7fnh5cGxqZl59cmh8dXVzfHKAal5gdHZweGRjWV5eUmtoVGRYXmFnanZ4gXFma2NsaGWAgGptfmhucWt9d4Z5a4uBcoGBfYF0doKNhn58e3+BfX+PanKDbnNpYYdobGJfcVV0b21uYHhobVdqdHZjdXt7cmJqb3qJjZ+ykqWlnI6QmI+GnaCanHx2pKCNln+MooqImpZ4e4aHfoOJfoiCgH9wf3t0dYKFfomQeGdjfYaXioKKjXh9gIyDeZaAlZeVjJagmn1vi4GQk4alm4eMiYOmloWSipWXkpF2kZ6hoZiUmHp/jpiXjpabnaSemZOUnHqPhYN4hZeNnn6Bio6Mc5einqGSmI6PooyLg5aYg5KWmX6YjXyIjYF2cX1temSAfIqFcIaTf5CCbIeCgX+JhGV1b3yHkpeNfZN4i4l8gId8fHJ/eIqHeYWRiouYopWChIx3iISCgXZ7gYmFdF54d3xzfXdma2RgfmlqdnN0dH1xfGNjYXNudXNtYVlgXltsZFJiV19gaGt1eYZwYmpjbWVofINsaHRobG9of3yCeG2QhnGAgoJ/dHyDjIF/fnqCg358kG12iHR0bWWKbGphY3VWg2lxbmB5Z2xianZwZnl8enFgcmyGhpCdrpemqJ6NjZeHhqCTl5h9d6mciph5l5yLi5iQeXyAi318g3uAgoB4c3h6c32AhH+Ii4BkXn2LlYd+hId0fX6Kf32YhJaTloyjoZd+cod7k5GKpo+MjoqSoJGDkY+Ul5GKgY+YoJqSkJJ0gI2SlImdnZ6nmJiNlZd0jY6KbIaYkJl6h4iQiW+XnZqjk5WKjZ+MhoGSnH+SkpWGmYh8iYmBenF5anVse36Lfm6FkoKUd2+Cg31+in9kcmp7gJaXhH+NdJCJg3mHfnZ4gH2GgX2EjoWMlKSQeYWDdImHfX9zdYCHg21genV5cHtvYW5iZHthbm92cnd3c3RidmBvbHVub11bXl1eal5PXVdiYWhtc3qJa19pZWpjaHeIbWZsaGptaIB8endukIdzgIOEfXSBhol6gn16gYR9fI5yeop4eG5sh2toX2lyY4docW9ld2hubGF6aGt9e3hwYXdti4GZmqqgpKidioqRhoqeipWXfXatmIyWfZ6TkZaTiHd+e4p8e4B2d3+AcHRzem+FfYGAin58YFx+j5GGf4OEc3qAhnqPkYeRkZuSpJuUgX2AfI2KkqSIjYqNl5qNhZGYk5WOiYmMk52TkIyNboSQj5GJnpmioZeWiZeSb4mZhGeGmo+UeomFkIpwlpqUoZKSiIuZjIJ/kJ58ko+Si5mOe4qEh3RzdWtxbnV8i3RuhZCOknF0gHuBgYh8ZHFseX2ZlH2EiHSQi4F0iHluf32Ah32FjYqFjZWojXuIfX6LhXd9cG+AhYNjaHdzdG56Yl5vYGp0XnBqenh4bHJwZXldbWxzbXNYWl5fYWpaUFdYZGNncXF/h2ZdaWhnYmdxjm9kaWdlamiAend0bo6Fc4CBgnt1goiFd4V8eISFeoCJd3+Le3pyeYNqa19waHR/a3FubXFnb2xle2JugHl2cWx3d4p/o5iiqKGmm4eMioGPnYaTnHSAqZSRjIagjJWTkH90e3aFeHh/cnN7hWtyb3ltiXaAgIZucVtZfpGNiICAgHZ1gH9/oIaPipGcl6CTl3eJfoCMiJydiY+GkpeVhIiUmY+Wi4uNjo2dio6QhG6Ji4+RipyWoZuYlYWYiGuFo4Nnhp2KkX+LhIuBd5OYkZ6RkIiJlY1/fo+XfJGNj42aknyKf4Judm9rbW9we4Vpc4OOl4pwd390gomCeGZzb3aBmY58iYR6lJF6d4h0cIh7hox7i4eEiY+co4h8hHeCi4B4eG5qgIKBXXJycG9vd1pecGBval5vaXx5cG1tam12YHBva3JtWVhhYWJuWFFTWWVmY3VwhIJiXWptZGJma5JtYGZmX2hrgXVycnCLgHR/goB4doCLgHiFf3eHhneDhHuGjH97dop/anFjfGKGfG9wbHRqaG9sdndfcX95e3R1dICCf6WVmq2fp5aFjYN/l5WDj591ip+TkoWKmoyVjYt6cnh0gnByhXNxdYhsb211bYh3g31/bW5VUYGrlIeCeIB2coJ5gqCBkYGTkpebkZp4kXqCjJKkmpOOiJWYkoSGlpmMk4uJj4+InoWQinxzi4WJj4icmZ+blpSAlH9phpyIaIehiJKEkYOJcYORl4+ajY+Mi4+Nd3uSkHqOi4yRlox8iHyAa3ZqbWtrbHp+YXl+jpWBdnqAd4ONfHlndGx0h5WLf4iGe5SQcXqEcHeMeoqMe4l+g4yRn52FfH14got9dnBpa4GCeV93bmxrcXJVXW5icWBfbW55cGdwZmdzdWhwa2F3ZV1WZmBgclNQTlxmZV14cIh8X11ocmJiZWaSal9oZFtncH5wa3Fzin12fIWAdHV/jHl7hoF4iIJzhoR+jIyEe3mVd2ZyaoNgh35vb2t6YGpudH90X3R9eYZ4dHOFfHigj5mwnKWPgop/g5qIgIuef4qZk46EiJeNjo+EdnR2c4Bwb4VzcHGDb2ppdm2Cbn18bXVzUk6C38mS1pN8cHSCdYOggpJ3lJCYm4+Ye5NyhZCfoZOTkIqSm5SGfpaViI2NiJGNiJyAjoF4eox+iIyKnJudm5WTeY13aImSh2yJpIWTiJeDhmOMkZiOlIqWjI2Ki3F7lIl6jYiKkpGJeYV7fmx7ZXJvamt5eVuAeY+OgHp9fn+Gjnp6aHNrc4uPioKFhX2VjGx+f2+AjH+MiH2EeoKQlpqbi3x3eIOQeXNtZnB/g2xpdG5naHNtU15uZHBZX2txd2ZramJmeHNvcGNfd2BgVmtfXnZQTkxgZmNdeXGJdFxbZXZgYWVljmNhZmFYaXNzbmtxdot8dHqGgXV2fotzf4Z/eoh+comHgZGKiHx+mHZlc258ZYd+bnBrgFpsbnl5c2B2enuNdnJ3ind5n4ubrpugkIKFd4iVf32JnIeFn5GOhYyXhJOOh4F1d3B5cW6Eb21ufnJkZHhwfG16fWpobGOkmsHcru+hc2t1g3WEoYWRbpWPlJ+Um4GRcIWLo5eJjpWKkJ2Wg4CVkIWJj4CSioqXf4d7dX+JeIaEjZuamJmOkHaLd2+HiYt9i6SFkomdhYVei5SXio6JjouKhIlsfJaBfYiFiZCPhnaFfX1rfWR3dWpteHNXiHqRhoV6fn+AhYx+eWVzan+KjoqDgn+MloVrgnVuiJGCkYV/gnqAkZaUmZB0dHiIjXV0cWd1eYJidG1vYWh1ZlJgcGdrVV9udHlgcmNfaH1xcm1aYnJhYlduWVx3TU1MY2ZhXnZzim1bXGR5XmBkZoRfY2NeWGpya25rcneLfXN3hIF4d3uJcYOEfX6Ie3SLiYiWhox+fphzaHVxeW2Lem50cIFYcXp2eXFkd3mGjGl2gIlyf5yHmKeco5KEfXCMlHh5i52EhaGNjnyVjH+aiIR7cndwc2pvgWtpbHx0XmB4dntwdXtnYGV869q1ycPciHNsc4B2iZqIjWmXj46clJKBiHCFiKCOhIuVio2YlHyNk4iDiY97kYuGkIJ/dniDhHKHgpKblpSYhox2h39xhYKJh5mig5SMnoOJYYOVjoaJhomNh4CHaX2Uf32DhImOjYJxhn5/cXdodXJpc3drWox9koGFfH+DgISKgnZidGyIgY+Lgn5/kpF9boJseYaPhpOEfYF9gJKTkZeJbnJ6jIZ1bHFrcniAX3RpblxqdWBSZHFoZlNfcHZ0YG9gXWiCcXJpV2doY2lYbVdbdUxKTGVmXmJyc4VoW1xleV5eZGd6YWRfXFlrbmVvanR3in5zc4F+enZ6iHOFg3x/h3Z3ioaPmIGNgnuTdmx3dXl5k3RueHp9WHmFcYBvZ3h3koJkdoaFcYqWhZmhm6KKhnNvkotyd46cfYqaiIl7n3+DmX+BeHFzbm9kcn5oZmx3d1tfeXt6cXF/aWFnYX/Vto6QpnhucXd7cJKQjIdqmI2Im5GLhntoh4uZhoGSkYaHmI18jY2BgYqNfJCMfoqFenV7gnpxhoCVmY6TlIKJdYSHd4SAi5Odn4aWj59+iGF/k4eEiISJjX9/g2d9kH9+f4KLj5B+bYJ8gnRrbXZ0c3Z1a2ONgY5/hX58hH+EiH9wX3NxhXyPjYJ8f5KJenGDZnqDioeMg3yFfoCVj5GThG5weYx/dW1uamt6fWJoamlYa3VaUmlyaWJQYnJ4bGFlXVpqg21zYltnX2RsX25UWm9OSE9mZFxnbnGAbFpbY3JfXGNsd2RlXVxabGxibWlzdoZ/cW5/fHx0eIZ4hYJ8gId1eYmBkpZ8iYZ2iYFveHl7hJNwbXuBd16Df3SBbWl6c5RzZ3KIfXKSkYOan5ughod2dpR/bXaTl32HkIOKjZl8i5p2fXZxb2xqYXR8Z2JpdXpaX3h8em1xfmVjaGhXnY9ecXKWvMODdXGUiJB+cpaLhpuSjIdyaoiPloB7lIyBhJuMfIqGfXyJjH+UiHWKhnZ2fYFxdYaBnpSFlI+Dg3KAiHWFfImYnZiHlI6dgIhmfZOCf4WDiYlygX1nfot7eH5/h4uOfGmAfIN2ZW94eHN2c2xqjYWKgYp/eIGAhIN/a15yeHp+jYqFe4KPgH5ygGl5g4eLhoR5hHyBmI2QjH1ubXuJfXd0bmhnfHZjXHFiV25yU1Nuc2hhTWZ0eGVgXVxYboBvc1llYV5qbWBwT1lrUURTZ2Baa25tfG5aW15sY1pib3dkZ1xdYGxqY2tpc3aBg3Btfnx/dHWDe4OCfIKFdn6JgZaReIOKdIGIcnl4fo2Qb298gXFpgXl6fm1sfHaVa2p3hHRslI2FnpigmYWIbn2Mdmp4mI5+gYqClZeJeY6Wb3pzcGxqZGB0e2hfZXF6WmFyfXlncXphZWWPsbJ3SmJapNnQlnF7kIqQd32Ui4SZkYyFbmuFkpJ6eZKGgYSYinyHf3h4iYqEloBwjIhxdH16aXmFg6WQhJONg39vf4N3hHmFm5mUi5OQlIWHcHuSgn2Cg4mDboF4aICEeHJ/f4OKhntlfX6EdWNwcn9oeHBvdZiNhoKKe3Z4gIR5gWtccX1ygYiFiX2GiXqIcoFucYSHjoSFc4R5gZmNjYR4bm9+hIB3emVoanxwX1l3WlhwbE5XcXNnYEpsdnRgXVtbWXR9cm9XZ11manFfbk5XaFE/WWZeWm9rZ3lxWlpZa2VZY3F5X2hcXmVtaGVraHF3f4dua39+gHVvgnuAgX6Df3aBhYmXinGCjXF7hnx5eYSTjHVqen9sb350f31vcnt7lG9ugX94ZpOKg6GZnJKChmeHg29oepWIfX+EgZiJgXyNjGl4cmtsZl9hb3htX2JveFxkbIN6YXF2X2Vl1Oq+ijI6PouOgHF5hYeOjXaDlox+ko2Mf21shYyLdX2Pf4WClYl8g3hudoeEg5d3b4iFa3V7dGZ5goOni4KPi4R9boB1d4N5hpyQjJCRkoyLhn57koZ3f4SNg2x/cmiAfnhtfHuBioN3YXmEgXFkcWh+bXRxdIGbi4B/hX5ydX2Ac4FwW21+dHiKg4t7h4B8iHh6cWyIg4+Ei3KCeoCXi4t/dG5rd4CAdXVcaWh3cFhWe1NZb2RMWnJyZVtJcHduXFpaWV11fnRoWWJbZ2VuY2lMV2ZRPV5lXF11ZV90cFpZVG9kWWRxeVpoXmBnbWdpbGlwd32ObGmChH55boB8fIF/gnp1goGNk4VwgItueH6Ae3uIkol/aHt+a3R7coZ7c3d9f4x5eIR9fGuMjYSbnZaMgYBsjn5raH6NjHp+f4OUgX59iohrdXFnaGNbYmdybmBha3NhaHCJemJzdF5jZJugj25cNVmvtXRpgIh8koZ2hZaFc4+LiXZwbYWChnR5iXiJfJKIen9zZ3aJfn6Yb3GGfmh2eW1leYiEpIeAh42Jfm5+doCBfIyZh4KTkJiJi4SJfI+IcHt9hHtofmxqgHt6aXp2gYeBcmB3gX5xZHJmdYJtdXuElJGBfIF/bnd5fHR/bVhvf3Z0jIKGd4h2gol6eHNuiYGPgYVzf31/k4mJem5uam6CgnVuXWdmc3FRWnpNWm9cTltycGRVS3N4aVdZWVphcYB0YF1dYGZkaGlmTlloTUBhZFtgdWFcdG1YV1N0YVpkb3JXal5iaGtnbWxpcHd8kmxphIl8fHB+fnuBf4J6d4B/iouDcXuHb3F3g397iY2Pg2p+e253eXeKd314gIKHf4N+fnpthYyImKONhIN7dYt5a2yEiJB4fXuBkX9/foqDcHJwY2ZeWWdfb3BgYGdwZmpviXRhdG9bYWRqdnt/vpymo8i4cYWDc5N8eIaTgnOQjIhycnCEe4JzdYd0iHeTiHl5cWN3h3qAk2lyhHZmd3ZjanyDh56Bf3+Oj31yf3SFeYCRkIJ4lo2Uj4iCiHuIiWt4eX51Z3pobH95c2l6doCCfWhgd4d9amt0Z3uAaXaAi5CUfnp+fnB7dnt0fmJWd31yc4qEgnyDcYaKd3hwcIOCjX99eX59do6Gg3ZpcWltiIJycF1oY3NuSmR1S11uVVNZc25iUU9zeGBSWFhcYW+Cc1thXGhlZWNqZFFacElEY2FaY3BeXXdoVVZVd15bZW5oVmteYWpnZW9vaHB2epJuaYiMeX1ye355goGBfHZ9g4iGg3B3g3JudoKDfYmLk39wgHx4eXqBjHSDeH+BgYKEeoB1b36Ki5ueiH2FeneGe2d0hYuQen5/e4iFhHaPgGdvbl9kXFhlWW1yYGBgcGxraIluYHNpWV5kbYB3qdqpx4aHsnGJeG+MdXuGjoB6k4mAdXR1fnd/b3F/bYR0lIZ4dGtgeoJ5iI9mcYNvZ3ZuW219gZCUf4B5kZJ9eXtth3aAkIuEdJaKkY6HhYV7f4VsdHZ/bWd2ZW17dW1qdnd/f3xgYniFeWh0dWJ9e2d0ho6MlXt0f3VxgHp8bX9ZVnR+b3WEh3+AeWyIhnR4a3V/g4R9e315e3OLgX1zZ3RlbouEbXNbal91ZEhubkxaYVdWVXhtYlBSdHZXUFVYXmFxhG9cYGNtZGRebmJUXHJHQmZfXWZoXVp6YlFVXHVbW2drYVZqX2BuZmZrcWhwdXiOdGuOjHV/dnh9d4GDgXtzfYOIh4NvcX90cXV+hYGJjYp7d394g3x8hod4h3x9gX6EgHt+c3Z5jI6gjYl6iXZ0g3lefYWYjHmGg3SFhoR3iXtibmxbYltbYVZqc2NgW2dub2aHcWFxZldcY2t/fMrOh7mham1timxxhHF8g4l+e5GFenlzeXV1e2psdWOEdZGCd29mXn2CeouJZXKCa2pxY1hse4abiIKBc5eUd398bYhxgYqLh3GXjpCIhYuDe3l+cXFwfWZocWJteHFqa3F3fHx5XGR5gHdpdXhmgXZndIeLjZR8cYZpb36AeW58XVhyf210gIt8gm9viX9xdmh3f4F/gXZ9cnt1h3x6cmZzYW6MgmxyWGtfd1tJbmtNVVReVFV7a2FPVHVyUFFUVl5idIVpXGBramZjWW5hWGJwR0FoXGBmX11Ve11PVWRwWltqaF1XaGBfcmZraHJncHJ3hnhulYp0f3p4fniDh391cn+GhY2CcHB7eHd1eoaFhoyFenx/dYt+fYaEhId/fn59h398eHZ5eJGToH+MfYttdoB5Y4OGloVzkYpvhYWBeoN0Y25qWV9bXV1UZ3NlYFlkcXJmgXNia2VXW2Bpf3i+rnugt21ic4Zoc3txeYKFe32Mf3d4cnZve3Zlam5gh3WOgXNqYl5+eHmLhGZxfmhqa1pWb3eKo4GEf3GZk3GBeXSCbYCCkYdzlYiMiISJhX14dHJuaHlgam1gbXZqZ2preXd6d1tnfXx4ZXJ9bYR0ZXWFjIWVf2+LZmt6g3VtdGJcb3xrdXyLfIFmdYd9bXFndX54fn9yfWx7e4F6eHBmbGJuiX5tbVZrYHdVSmprT1FOaE1ZfGhiTlV1akxQVFVeZnWDZl1gcGhnYVdpXVtraEpFa1phZFdZVXlZTlZtalldbGVcWmVjXnRmbWRxZ3JvdYF4cJmFdn9+d398hYd9dXOCiICVgm5zeHp6c3OFhoiIg3iBfXaPf3yEio6EgoR7fouDe3d8d3eanZd6ioKGaXd9fGyDhJN/co+CcIWCfoF/b2ZsZ1ddW1xbVGRwZF9XYnJ1aXVwZWViV1xcaH9wb3KAc4lkZHh+aXR1c3OChHiAhHl2c3Vua3pwYWdrZ4Z0jYNuZl1ffXB7iX5pbXdmaWRVVnJvjaZ8hHt2lpB0fHN8em17e5CFdph8h4aChoN8dHBybGd0XGxoXmx0ZGdmaXpve3JZZ4B2dWdwgHeBdWJ3hIp8lIBui2pteoFxZnNlYG16Z3N3inx+YnWDdmlrcXR6cHp5c35mfn9/eXduZGZiboZ8bWtWamJwU0toak9LTnBHXntmYU1VdGNKTlNXYWp2fmVcZ3NpZWBWY1dicF1MS2tYY2JVVVVzVkxYdWRaX2thXFpjZV93Zm1icGlzbnJ/dXSagXd/gHd/foWFenx1goR+l4VucnR8enRxhIWPgYB5i3V0kX98gZWOgIWEfX6Mhnt+gHZ7o6WKeYiGhGt1fHp1g4KLeW6Fc3mEfYGDdW5qaGVWXVtaWlNibmRbWGFze2lobWlgYldfW2qAaWtvgGdrYWh5eGpzdHRuhIF6f311dW56aGp5al9lbmiBdo+EZ2VYYndpfod7b2lvZ2ZdVVhvZ46od4F6fJCOeXVvfm9ydXmPgHeVdIWCf4WHdWpydmdobltsZF1tc19nYWp4aHttWm2CcnNpb4B+eXdgd4SEd4+Ecohxb3mAcmNxaVxvd2RxdIh8eGJzgHBnanhzcmx4d3V4ZIN7f3h2cGRjY258fWtsVWliZlNLa2dPR1JrRWF4Z2FNU3FcSk1UWWVrd3tlXm1xaWRdVmBVbm5XS1NoV2ZeWE5VbFRKXHlfW19rXV1bY2VgemhsYW9vdW5veHV6mH13gIF6gH+Hhnp5eoN+gZOEcXR0f3l2dIWIkH2AfJBrc5WAe4KfhX6HfYB/hoKAint2hKyff3qIiINrcoF5dYCAgXNuhm58f3OJgGpvbWRkWF9aWVpVYmpnW1pedYJpXm1sXGFWXFxsgWVxdH1paV1rdnZndHdybYV7fX15dXJseWhpeGZdZHNoeneSgWNjVGVwZ4KFd3dmaGpgV1ZZZ2OPp25+d4CLjnpwcHxmeG96jXx2jnGEfX5/hm5kdnNkaGhca2Jdb29bZ19tdWR6aF10gG9ya3F7fXV1YXSFinqHh4B/d3J1f3VhcG1ZcXRicXKFfHVkcn9sYWx6b2ppe3l2cmaFdnt6dXFlYWVtc35pbFRpXl1US3JiUEZWYUdidmdhS1RvV0pMV1hna3Z6ZGVucWZjWlddWXZlVUpcY1doWFlJV2VRSGJ4Wl1fbFteXGFkXn9pamBvdHhub252g5d5coGAfH+Ii4Z+dXWGeYeMfXN1dYJ5enqCjI59foSJaXOWgXqKnX1+hXqBen98hohzcY+ujHt7h499ZXGHeXN8fHVxboVse35sj3picG9iZV1lVllZVmNma2BdXHOFaFhwblpeV1pcbHticHZ2bGJbbHNzZ3V1cGyEeX6AeXdubnRlaXRlW2d1ZnZ2kXpfXVJmZmuDgnR9YmNpXFRYXWJjj6VoeHSChZB4bW55Z3dtfIV7dYhygHh8eH9oZXZtYGZgXmpfXXNrWWVdb29iemVbd3trbm5vd3hzdGRyg5J+h4KIenZvcn1zYnhkW29wYXFxgnxzZnGAZF5udmlkZ3l7dW5vgnV0fXNxYl9mbm99ZGpTaFhZVE13X1FKWVhIYnVkYUlUbVNKTFpXaWxxe2JsbHNjYVlZW2F2W1NMY11YaVNXSFlhTkdpdVheYW1bW19iYl2FaGhhbnh5bG9qdoGQeG2CfoCBkoiEgXZ0iXSMhnNxd3WCd3x9foyPgH6TfnB3lYN8mZJ5gIB4eX5/dIiDc3CZont6f4mUeGR1iHhzeHVrc25+bHl8cJFyXnBvYGdibFRbWldoY21mXFxxiWVTcm5bWlhYYGx2Y2l1ampeWm1zcWxzc3NqhXx+f3x2bm5sZGlxY1tqcmR0do5zW1dTZWFygH9ygl1iY11TWmBbY5GeZXJxhYSRdGxqem1vcHt8fHGAd39yenl5ZGV1aF1iWmBnW152aFdiXXBoYXdgW3t2amlybndzcnRocIGUgoZ+hHZyanB9bWZ3V1xrbWJxc4F6c2Zvfltgb3FiX2pxfmxsdX5zcXhrcGFcZWxsemFnU2dVV1JQdVtRT1lSSWN0YmBHVWpQSVBaVWtra3xlbW9xYVtaWFlscFdTT2ZXV2lTVEZaXE9IcnVYX2NtY1hgYGFdi2pjZG15eGtvaXV5hntrg31/hJl8goR5fYhuj4Zxb3d6fXSCgnyLj4OCl3R3gpOFgZ+JdYCAgXN/gnGHgnVvopd0e4aLhntld4pubntvZndwemxzdnKMa150bmFnZWtSXVtVZ2FsbFpccIxkT29uXVZYVWdqdGdidGVlXVludG5wdXV5a4d8f3yIdo9zZGRrbmFcbm1jc3iHa1pUVmNkeH19cYVcY19jVFpgWWOVlWNucIOFinNqaHtvZnN3c3xsenR1b3l+dV5mcmNbXlZhZFlhdGVVX2BtZGFxXV1+cGhpc3FzcHR1am2Ek4GIe4VxcmZufXByb1RbZmpmcXSBd3NibHZVYnFqW19vZn1mbXd9c3Nzam1gWmRqandeZlRkVVZQVG1XUVZTUEhkc19hRlhpTkhXVFZtaGR8aWt4a2JXXFVbdGRTUldoUVlmVFNIWlpQTXh3W19lbGlZYmBeXo9uYmZreXVub2h2dn9/bIN/fYaXe3+IgYp+a5OIcmd0gHt1gIN9iI5/i5NyfIqRhYefhnt/hoxzgYZzfYN2bqWMc4GNi3Z3bXqMYGR8cGZ4cnlsbXF2gmdke2xjZmdoU19eVWdfbG9bXm6NaE5pbWBUVlNvZ3NsZndkZV1YcHRscnp3cm2Ie392nHp5a2FlbG1eYG9qZXB4fmdaVlhgbHh8e3CDX2JeZ1ZYX1dkm4hia3GBh313a2t5bVx3cWx6aXZzbm97gHJYam5fWV1VYmNYZHFiU15haGJibFpgfmxma3N1bm13dmtohYt+iHqIbXFlcH1tcm1jWWFoaW90gXRyXmlsUmVxZFRibmJ6Y3F3e3ZrcG1rX1hhZ2h0XGVWYVZTTlhlUk9cT09IZXBdY0ZZaU1JX0tYbWRfeGhufmRgVF5UXXVcVFNgZk5dYVRTSlxZUFl1dl1fZm1oWGNhW16OcGNnandxc25ndnR6g3KBgnmIjX58ioiOem6QinRsc4J0f3+IhYaRhJWPeX6Mj4eRm4SAfIyEcoCBc3R3cW6Tk5OTk5OTk5OTkpKSkpKSkpKSkpKSk5OTkpKSkpKSkpKSkpKSkZGRkJCPj4+Pj4+Ojo6Pj46OjY2Njo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo2NjYyMjI2NjY2Njo6Ojo6OjY6OjY2Ojo6Oj4+Pjo2NjY2Oj4+Pj4+PjoKAfnp6fX5+fX1/fn59fn5+fn5+fn+Af4CAgIGAgIB/gIGBgYOHjI6Ojo6NjY2NjY2NjY2NjZKSkpOTkpKSkpKSkpKSkpGRkZGSkpKSkpKSkpKSkpKSkpKSkpGRkZCQkI+Pjo6Ojo6NjY6Ojo2NjY2Njo6Njo6OjY2NjY2Njo6Ojo6Ojo6NjYyMjY2MjIyNjY2Njo6Ojo6NjY2NjY2Njo6Ojo6OjY2NjY2Ojo6Ojo+Ogn99ent8fn59fX5+fn5+fn5+fn5+f4B/gICAgICAgH+BgYCBg4aMjY6NjY2NjY2NjIyMjIyMkpKSkpKSkpKSkpKSkpKSkZKSkpKSk5KSkpKRkZGRkZKSkpGRkZGQkJCQj4+Ojo6OjY2NjY2Njo6Ojo6NjY2NjY2NjY2NjY2Njo6Pj4+Pjo6NjIyMjIyMjIyNjY2NjY2NjY2NjY2NjY2Njo6Ojo2NjY2NjY2NjY6Ojo6Cf3x6fHx9fn19fn19fX59fn5+fn5+gH9/gICBgYGAf4CAgICDhouOjo2NjY2NjIyMjIyMjIySk5OTk5OTk5OSkpKSkZGSkpKSkpKSkpGRkZGRkZGRkJCQkJGRkZCQkJCPj46Pjo6Ojo6Ojo6Ojo6Ojo2MjYyMjYyNjY2NjY2Ojo+Pj46Ojo2MjIyMjIyMjIyMjY2NjY2NjY2NjY2NjY2Njo6NjY2MjIyNjY2Njo6OjoN/fHp8e31+fH1+fXx9fn59fn5+fn5/f3+BgYGAgICAgYCAgIOGi42NjY2NjIyMjIyMjIyMjJA+LjExMTEvb4eEhISEiF0tMDAwMC1GoaGhoaGhoJqZmpqampqKg4SEhIOEd2VnZmZmaFxDREREREJOpa+tra2usH9rbm5ubnFKLDAwLy8sSYWDg4ODg4OLjIyMjIyMjY2NjYyMjY2NjY2NjY2NjIyMjIyNjY2NjY2OhX19e3t6fX58fH59fX1+fX1+fn5+fn9/f4GBgYCAgICBgICAgoWKjI2MjIyMjIyMjIyMjIyMjy0aHR0dHBpohYKCgoKGUxgdHR0dGTekpKSkpKSjnJycnJycnImBgoKBgYJyXV9fX19hUjQ1NTU1M0GptrS0tLS3fGVoZ2dnaz0aHR0cHBg7g4GBgYGAgYqLi4yMjIyMjIyMjIyMjIyMjY2NjY2MjIyMjIyMjY2NjY2GfH16e3p8fXt8fn19fX59fX5+fn5/f3+AgYCBgYGAgIGBgYGChYqNjYyMjIyMjIyMjIuLi4uRiYeHiIiIh46QkJCQkJCMh4eHh4aHiZKTkpKSkpKRkZGRkZGRj46Ojo2NjYuJiYmJiYmIhYaFhYWFho+QkJCQkJGLioqKiomKhoODg4KCgoSKioqKioqKi4uLi4uLi4uLjIyLi4yMjIyMjI2NjIyMjIyMjIyMjY2Njoh8f3l7ent8e319fX18fX19fX5+fn9/f4CBgYGBgYGAgYCAgYKFioyMjIyMjIyMjIuLi4uLi5GTk5OTk46RkpGJh46KkJKTkIqRjo6OhYqRkZGRkJCQkJCPj4+Pj4+Ojo6Njo6Ojo2Njo2Njo6Ojo6NjIuLjIyMjI2NjY2NjY2Njo6NjY2NjIuLi4uLiouLi4uLi4uLi4uLi4uLjIyMjIyMjIyMjIyMjIyMjIyNjY2NiX59eHh5fH18fX19fHx9fX59fn5+f3+AgICBgYGBgYCBgIGCgoSKjIyMjIyMjIyLi4uLi4qLkJCRkZGPhI6QkIaKj4WNkJCOh4qJiY6IiZCQkJCQkJCQkI+Pj4+Ojo6NjY2NjYyMjIyMjIyMjIyMjIyMjIyMjI2NjIyMjIyMjIyMi4uLi4uLi4uLi4qKiouLi4uLi4uLi4uLi4uLi4yMjIyMjIyMjIyMjIyMjIyMjI2Lfnx3dnh7fXx7fX18fH19fn5+fn5/f4CAgIGBgYGBgIGAgIGChIqMjIyMjIuLi4uLioqKioqQkJCQkIqFjoiOhoaPiY2QkI+Gi42JkImLj4+Pj4+Qj5CPj4+Ojo6OjY2MjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMi4uLi4uLi4uLi4uLi4qKioqKi4qKi4qKi4uKioqKi4uLi4uLjIyMjIyMjIyMjIyMjIyMjIt+e3d2eHt8fHx9fX19fX1+fn5/fn9/f3+AgIGAgYGAgYCBgYGEiYyMi4uLi4uLioqKioqKipCQkJCPhYOMjpCOiYyJjZCQj4mIjImPh42Pj4+Pj4+Pj4+Pjo6OjY2NjYyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIuLi4uLi4uLi4qKioqKioqKioqKioqKioqLi4uKioqKiouLi4uLi4yMjIyMjIyMjIyMjIyMin18dnZ4fHx7fH19fH19fn5+fn5+fn9/f4CAgYCBgYGBgIGAgYSJi4yLi4uLi4qKiomJiYmJkJCQkJCMhoyJjoeFjYmOi4yLhomMiI2Gj4+Pjo+Pj4+Pjo6OjY2NjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyLi4uLi4qKioqKioqKioqKioqKioqKioqKi4uLioqKioqKioqLi4uLi4uLjIyMjIyMi4uMjIyKf353eHp7enp8fHx8fX1+fn5+fn9+fn9/gICAgICBgICAgYCBhIqMi4uLioqKioqJiYmJiYmPj4+Pj5CMjouPjIqPjI6MjY2JjY2LjYuOj46Ojo6Ojo6Ojo6NjYyMjIyLi4uLi4uLjIyMjIyMjIyMjIyMjIyMjIyMjIyLi4uLioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi4uLi4uLi4uLi4uLjIiAfXh5enp6e318e3t9fn5+fn5/f35+f39/gICBgICAgIGBgIGEiouLioqKioqJiYmJiYmIiI+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Ojo6Ojo6Ojo6Ojo6Ojo2NjYyMjIyLi4uLi4uLi4uLjIyMjIyMjIyMjIyMjIyMjIyMjIuLi4uKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLi4uLioqKi4uLh4B8eHp6eXt8fHt8fH1+fn5+fn9/fn9/f39/gIB/gYGAgIB/gYSJi4qKioqJiYmJiYmJiIiIj4+Pj4+Pj4+Pj46Pj4+Oj4+Ojo6Ojo6Ojo6OjY2NjY2NjY2MjIyMjIuLi4uLi4uLi4uLi4uLi4uLjIyMjIyMjIyMjIyMi4uLi4qKioqKioqKioqKioqKioqKioqKioqKioqKiYmKioqKioqKioqKioqKioqKioqKi4uHgHt5eXh6fHx6e3t9fX5+fn5+f39+f39/f39/f3+BgYCAgH+BhIiLiomJiYmJiYmJiIiIiIiOjo6Ojo6Pj46MjI+Sj5COjo6Ojo6NjY2NjY2NjY2NjIyMjIyMjIuLi4uLioqKioqLi4uLi4uLi4uLi4uMjIyMjIyMjIyLi4uLi4qKioqKioqKioqKiomKiomJiYqKioqKioqJiYmJioqKioqKioqKioqKioqKioqKi4aBe3h5eHp8ent7fH19fn5+fn5/f35/f39+fn9/f4CAgYCAgIGEiIqJiYmJiYmJiIiIiIeHh46Ojo6Ojo6Ojo+MkJOQkI+Ojo6NjY2NjY2NjYyMjIyMjIyMjIuLi4uLi4qKioqKioqKi4uLi4uLi4uLi4uLi4uMjIyLi4uLi4uLioqKioqKioqKiYmJiYmJiYmJiYmKioqKiomJiYmJiYmJiYqKioqKiomJioqKioqKhYB6eHl5fHt6ent8fH1+fn1+fn9/fX9/f35/f39/gICBgICAgYSIiomJiYiIiIiIiIeHh4eHjY2Ojo6Ojo6Pj4+PjoyNkI2NjY2NjY2MjIyMjIyMjIyMi4uLi4uLioqKioqKioqKioqLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4qKioqKioqJiYmJiYmJiYmJiYmJiYmKioqJiYmJiYmJiYmJiYmKioqJiYmJiYmJioqFf3l6eXh7e3p7fHx7fn5+fX5+f39+f35/fn+Af3+AgICBgYCChIeKiYmIiIiIh4eHh4eHh4eNjY2Njo6Oi42Nj5WPiYyPjYyNjYyMjIyMjIyMjIuLi4uLi4uLi4qKioqKioqKioqKiouLi4uLi4uLi4uLi4uLi4uLi4uLi4uKioqJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYR+eXt5ent7eXt9fHt+fn59fn1+f35/fn9+f3+AgICAf4CAgICEh4mIiIiHh4eHh4eHh4aGhoyNjY2NjY+MjImKj42IjJGPjY2NjIyMjIyMjIyLi4uLi4uKioqKioqKioqKioqKioqKiouLi4uLi4uLi4uLi4uLi4uLi4uKioqJiomJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJg355e3p8e3p7fX17fH9+fn5+fX5/fn9+f3+Af4CAgH+AgH9/f4OGiIiHh4eHh4aGhoaGhoaGjIyMjIyLiYyKiIeJhoyOjJCMjZGOjIyMi4uLi4uLi4uLi4qKioqKioqKioqKioqKioqKioqKiouLi4uLi4uLi4uLioqKioqKiomJiYmJiYmJiImJiYmJiYmJiYmJiYmJiYmJiYmIiImJiYmJiYmJiYmJiYiIiIiIiYmCf3h7e3t6enx9fHx9f39+fn19fn9/f39/f4F/gIB/gICAgICAg4aIh4eHhoaGhoaGhoaGhoWMjIyMi4yOjoyKioeEiIuKjIuNjo+Li4uLi4uLi4uLi4uLioqKiomJiYmKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiomJiYmJiYiIiIiIiIiIiImJiYmJiYmJiYmJiIiIiIiIiYmIiIiIiIiIiIiIiIiIiIJ/eHp7enp6e3x8fX1+f35+fX1+f39/fn+AgICAf3+Af4CAgYCDhYiHh4aGhoaGhoaFhYWFhYyMjI2NjJCSjI2Ii4mJi4uLi4mLjIqMi4uLi4uLioqLi4qKiomJiYmJiYmJiYqKioqKioqKioqKioqKioqKioqKioqKiYqJioqJiYmJiYmIiIiIiIiIiIiIiImJiYmJiYmJiYmIiIiIiIiIiIiIiIiIiIiIiIiIiIiHgXx4e3x5enp8fHx8fX9/fn59fX9/f39+fn+Af4B/f3+Af4CAgIKEh4eGhoaGhYWFhYWFhYWFjIyNkY+PjZGJjIaJjIuIiImMiYeNjo+NioqKioqKioqKiomJiYmJiYmJiYmJioqKioqKioqKioqKioqJioqKioqKiYmJiYmJiYmJiYmJiYiIiIiIiIiIiIiIiImJiYmJiYmJiIiIiIiIiIiIiIiIiIiHh4eHh4eHh4WAenl9e3t7enx8fHx+f39+fn19f39/f35+f4CAgH9/f4B/gH+AgoSHhoaGhYWFhYWFhYWFhISLi46PjoyLj4iHiYmMjYWFjo2KiYyNi46KioqKiomJiYmJiYmJiYmJiYmJiYmJiYmKioqKioqKiomJiYmJiYmJiYmJiYmJiYmJiYmJiYmIiIiIiIiIiIiHiIiIiIiIiIiIiIiIiIiIiIiHh4eHh4eHh4eHhoaHh4eHhH55eX16enp7fXt8fX5+f35+fX5/f39/fX5/f3+Af39/f39/f4CChIaFhoWFhYWFhYWFhISEhIuLjI6MjI2Lh4mIiomGgoiNjoiKi5GTj4uJiYmJiYmJiYmJiYmIiYmJiYmJiYmJiYmKioqKiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiIiIiIiIiIeHh4eHh4eIiIiIiIiIiIiIh4eHh4eHhoaGh4aGhoaGhoaGh4eDfXp5e3p5enx8e31+fn5/fn59fn9/fn9+fn+AgICAf35/f39/gIKEhoWFhYWFhYSEhISEhISEioqOjYmIiIqKh4iHiomIioiIh4qGi5GPiomJiYmJiYiIiIiIiIiIiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmIiIiIiIiIiIiHh4iIh4eHh4eHh4eHh4eHh4eHh4eHh4eHhoaGhoaGhoaGhoaGhoaGh4J8eXl6eXp7e3t7fX5+fn5+fn59gH9/f39/f4CAgH9/fn9/gICAgoSGhYWFhISEhISEhISEhISKi5CPiYmJi4qHh4WHiYuKiYSLjYmOjYqJiYmJiIiIiIiIiIiIiIiIiYmJiYmJiYmJiYmJiYmJiYmJiIiIiImJiYmJiYiIiIiIiIiIiIiIiIeHh4eHh4eHh4eHh4eHh4eHh4eHh4eGhoaGhoaGhoaGhoaGhoaGhoaGgXt4enp4e3x7e3x+fn9+fn5+fX1/f39/f3+Af4B/f39/f3+Af4CChIaFhYSEhISEhISEhISEhI+Qj4+IiYuIhoeIiYuLjIuJioqNio6Oj4iJiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIh4eHh4eHh4eHh4eHh4eHh4aGhoaGhoaGhoaGhoaGhoaGhYWFhYWFhoaAe3h5eXh4enp8fX1+f35+fn59fn9/f39/gIB/gICAf39/gIB/gYKDhoiGiIaDhISEhIODg4ODkpKOioeKi4qLh4uNiYqJi4iHiouIio+SioiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIh4eHh4eHh4eHh4eHh4eGhoaGhoaGhoaGhoaGhoaGhoaGhoaFhYWFhYWGhn96eXh4eHl5eXx9fn5/fn5/fn1+f35/f3+Af39/f4CAgH+AgH+BgoOHjo+PjoiHhIWFhoaFhYWSkI6KiYmIiImKioiIh4aKjIiHiYmOkJGNh4iIiIiIiIiIiIiIiIiIiIiIh4iIiIiIiIiIiIiIiIiIiIiIiIiIh4eHh4eHh4eHh4eHh4eHh4eHh4aGh4eHh4aGhoaGhoaGhoaGhoaGhoaGhoaGhoWFhYWFhYWFhYWGf3l4d3d3eXp5e3x9fn9+f35+fn5+f35+fn+Af4CAgICAf3+Af4GBg4eOjo6Ojo6Mjo2OjY2MjZCQjomHhoiJiYeIiouIiYyJiYaKjY6PkYuIiIiIiIeHh4eIiIiIiIiHh4eHh4iIiIiIiIiIiIiIiIiIiIeHh4eHh4eHh4eHh4eHh4eHh4eHh4aGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaFhYWFhYWFhYWFhYZ+eXd5d3d6eXl8e31/fn5/fn5+fn5+fn9+f4B/fn+Af39/f39+gIGEiI6Ojo6Ojo6Ojo6Ojo2NkJGOi42JjIiIiYaHiYaIioiHi4yLjpCQiIeIiYmJiIeHh4iIiYmIh4eHh4iIiYiIiIiIh4iIiIiHh4eHh4eHh4eHh4eHh4eHh4aGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoWFhoaFhYaGhoWGhYSEhIWFhoaFhIWFhX55d3l2eHl4e3x7fn5+fn5+fn5+fn5+f39+f39+f39/f35/f3+AgYOGjY2Ojo6OjY6NjY6OjY2Qj42Ni46KhoiKhISLiYeDhYSDi4mLj42JjI6QkI+NjYyLjY6Pj42NjI2Nj4+Pjo6MjYyMjY2KiYiHiImHh4aHh4eHh4aGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoeHiYqKiIeJi4yNjo2LiImLi42OjYyJiImMgHl3d3Z6eXh7e3t9fn5+fn5+fn5+fn5/f39+fn5/f4B/f4B/f4CBg4aMjY2NjY2NjY2Qj4+Pj46NjI6KiYuMjIeFiY2Lh4aIh4aHh4uNjo6Pj4+Pjo+Pj4+Pj4+Pj4+Pj4+Ojo+Pj4+Pj4+Pj4+Oj46Oj46Mi4uJh4eHh4aIhoaGhoaGhoaGhoeLiYeHiIiLjY2Mi4yLjY2Ojo+Ojo6Pj46Ojo6Ojo6Ojo6Njo6NjY2AeHZ4eHp4enx6fH5+fn5+fn5+fn5+f39/fn59fn9/f39/gH9/gIGDhoyMjIyMjY+QkpOTk5KSjYyMjIqHioyKh4eJiYWCiouIiYWJjpCNjo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6NjI2NjI2LiYaHh4eHiYqLjY6NjYyNjY6OjY2OjY2NjY2NjY2NjY2NjY2OjIyNj4+OjY2MjIyLi313dXd5enp7e3p+fn5+fn5+f35+fn5/f39+fn1+f39/gICAf3+AgYOFj5KRkJGSk5OTk5OTkpKLi4uLiomMiouLiYuKhoeOjYiIjI6OjIuMjIyNj46Njo6Ojo2NjY2MjY2NjIyMjIyMjIyMjY2NjYyMjI2NjYyMjI2NjIyNjIyMi4yMi4yMjI2MjIyMjIyMjIyMjIyLi4uLi4yNjY6Sk5OSkpSRkJOVlZSTk5COjo6Oe3Z2d3h6ent7e31+fn5+fn5/fn5+fn5/f35+fn9/f39/gIB/f4CBgoSNkpKTkpOSkpOTkZKSkoqJioyJi4qJjIuKioiHiYqKi4mKjY2Mj46Nj5KUlJOUlJOTkpGSkI+Ojo2NjY2Pko+OkZGOjIuKioqLi4qKi5CPjoyMjIqKioqKioqKiouKioqKi4yLi4uMjIyKiouLi46RkpOTk5SUk5STk5SUlJOTk5KSkpKSk5F6dXZ2eHt7e3p6fX5+fn5+fn5+fn5+fX5/fn5+f39/f3+Af39/gIGChIuRkZGRkZKSkpGRkpGRiYmIiIqMiYiJiYuJhoSJhoyKh4ySkpKTk5OUlZWWlZWUk5OUlJSUlJSUlJSVlZWVlZWUlJOTkY+QkZKQjoyRlZWVk5KSjo+QjYqKi4qKi42OjY6RkpCRkpKSkpGRkpKSk5OTk5OTk5OTk5OTkpOSkpKSkpKSkpKSj3h1d3l6e3t7ent9fX19fn5/f35+fX5+fn5+f39/f39/f4B/f3+AgYKEi5GQkJCSkpKRkZGRkZGIiIiIi4uJg4eLi4yMiIeHjYyNkpSSkpOTlJWWlpaVlZSSkpOTlJSUlZWVlZaXlpaWlpWUk5SUlJSVlJSUk5OVlZWUk5KTk5OTkJGSkZGSk5OTk5KSkpOSkpKSkpKSkpKSkpKSk5OTk5SUk5OSkpOTkpKSkpGRkZGPdnJ3enp7e3t8fX59fX1+fn9+fn9+fn5+fn6Af39/f3+Af3+Af4CBgoSKkJCRkZGRkZCQkJCQkIeHh4eIiIiFi4+KjI6Njo+OkJWUk5OTk5SUlZWVlJSVk5KSk5KTlZSUlZaWlpaWlpaWlpSTk5OTk5OUlJOSk5SVlZSTkpKSkpOTk5OTk5OTk5KSkpKSkpKSkpGSkpGRkZGRkZKTlJSUlJSTkpGRkZGRkZGRkZGRkYx0c3d6ent7e3x9fX1+fX5+f35+fn5+fn5+fn9/f39/fn9/f39/f4GDhIqQkJGRkJCQj4+Pj4+Ph4iKi4yNjYuOj42Mjo6RkpGSk5OSkpKSk5SUlJKSk5OTk5OSkpOUk5OTk5WVlZWUlZWUk5OTk5KSk5OUk5KTlJSUk5KSkpKSk5OTkpKSkpKRkZKSkpKSkpKSkpKSkZKRkZGSkpOTlJSUk5OSkZGRkZGQkJCQkZCRinN0dnp8fHp7fXx9fn59f35/f35+fn9+f31+f39+fn59f39/gH+AgYKDipCQkZGQj5CPjo+Pjo+Oj4+Pj4+Pj4+PkI2OjpCRkpKSkpKRkpKTk5OTkpGSkpKRkZKSk5OSk5OSk5STk5OTlJOSk5OTk5OTk5OSk5OTkpKSkpKSkpKSkpGRkZGSkZCRkZGRkpKRkZGRkpGRkZGRkpKSkpKSkpKSkpKRkJCQkJCQkJCQkJGGc3V2e3x8e3x9fX1+fn1/f35/fn5/gH9+fX5/fn5/fn5/f3+Af3+BgYGKkI+PkI+Pj4+Pj4+Pj4+Oj46Oj4+Pj5CQiI2PkJGRkpKSkpOTk5OTkpKSk5KSkZGRkZKSk5KTkpGRkpKSkZKSkpKSkpKTk5KRkZKTkpGRkpKSkpKRkJCQkJGRkZGQkJGSkZGRkZGSkZGRkZGRkZGSkpKSkpKSkZCRkZCPj4+Pj4+Pj4+PkX9ydHh8fHx7fHx9fX5+fn9+fn5/f3+AgH99fn5+f35+f39/f4CAf4GBgYqPj4+Pjo6Ojo+Pj46Ojo6Ojo+PkI+Pj4+GjpCQkJCRkZGRkZGRkZGQkJCQkZGRkZGRkZGRkZGQkJCRkZCQkJGRkZGRkZGRkJCQkZGQkJGRkZGRkI+PkJCQkJGRkJCQkJCRkJCQkJCQkZCQkJCQkJCQkZCQkJCPj4+Pjo+Pj46Ojo+Pj4+PeHJ2eXx9fHp9fH19fn5+f35+f39/f4CAf39/fn5/f35/f39/gIB/gYGAio6Ojo6NjY2Ojo6Ojo6NjY2Oj4+Pj4+PjoiQkZCPj4+QkJCQkJCQkI+PkJCQj4+Pj5CQkJCQkJCPj4+PkI+PkJCQkJCQj4+Oj4+QkI+PkJCQkJCPjo+QkJCPj4+Pj4+PkJCQkI+PkI+Qj4+PkI+PkJCQkI+OkI+Pj46OjoyMjY2NjIqDiYhzc3Z4fX58eX18fX1+fn5/fX5/fn9/f39/f4B/f39/f4CAgH+AgH+BgYCJjY2Ojo6Ojo6OjY2OjoyNjY6Ojo6Ojo2NiJCRkI6Njo6Ojo6Ojo6Pjo6Ojo6Ojo6Pjo6Ojo6Ojo6OjY6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Pj46Oj4+Pj4+Pj4+Pjo+PjY2MjYyNjoyLi4mJiYiFhYSDgoKEgnR5fXp4dXJrZWltb2xmZmdncHNzd3l9fnl6e3x9fX1+fn59fn9/fn9/f39/gIB/f3+AgIGAgIB/f4CBgImNjY2NjY2MjYyMjIyMi4uLjYyMjIyMjIyGj5GRjIyMjIyMjIyMjIyMjIyMjIyNjY2MjI2MjYyMjY2MjIyNjY2NjYyMjI2MiomKi4uJh4KAh4iEgXt6gH57fXx8fXlzcnJycnV1cG1ramppZ2NkYV9bXF1eWFVXWFlTS0VJSkpLTE1PT0tgdHR3eX19eHp5e318fX5+fn1+f39+f35/f4CAgH+AgICBgYCAgICAgIGAf4OEhYSFiIuLjYyMjIuLi4yGiYqKioqKh4OOkJGNiouLi4uMiYmKioqKiouLi4eDi4qIiYmGhYWEhIeJiYWCg397fHl6e3pzcHFxcW1samdsbWdlZmVmZGNlZGVkZWVlZWRkZGNhYV5dXFpYWFdUUFFSU1JTTU1KSUZESElHR0hHR0xOSWdzdXh5fXp4d3l8fHx8fn5+fn9/fn9/f39+f4CAgIB/gICBgICAgICBgYFnXmBjYWNucX17ent/fXd8fHZ4ent4eHpvcHt4eXt8e3h3e394dXd0dHZ0dXZ3dXFycW5wcnBnaGtsbm9tamlpaGhlZWRkZF9gYWJgYF5dWVhaWltdXV9gX2BfX19gYmFeXl5eWVldXF1bV1dWUlRSU1NOUUpISUZERUhMTEhGR0lLSklNbXJ0eHp7end3eXt6e3x+fn1+f39+f35/f35+gIGAf3+AgIGAgICAgICCgWdYW1pZXFtcY1xaXF5ga3FtcHBvbm5vbmtpbmxrbG9qaWtraWpraWdmZ2dnaGhnbWdqZ2hlaGdjY2JhYmBgXVhbW1dYV1RWUVBUU1NNSkxLTExOTk9UWFhXVVVUUlBQTU1QT05LTE1QUU9MTEpHSUlHSEhJSEhIR0ZHSEpKSEhISUlISVZwc3Z5ent5dnZ5enp7fH59fX5/f35/fn5+f3+AgX9+f4B/gICAgICAgIGBbFtYVlZWWVlaWVlYVVZoamxubmxra2poaGloZGVkYlxiZl9fYGNfXF9dYF1eWl5dWVleYmFeXlpZX1xYV1NOTUtLS0tMSUtNTktKS0tMSktQTEtLRkdHSUlGR0lISUZFSEdGRkVERUVEREVJSUlHSEdIRkZLTUtJSUlIR0hLTU1LTExMVXFzdnl6e3h2d3h3ent8fn1+fn9/f39+f3+AgIGAfn5/f4CAf4CAgIB/gYJoUlRVVlNVV1lZWVdXV1tbYWNfXlxbWFZWWVZSVFJRUVVUU1NTUE1KTU5QUk9NUFFRUVFRVlZRUVFUUFBOTk9MSk1MS0xKSktLRklJSkxJR0pISUlFR0dGRkVFSElKR0ZHRkZHR0hKR0dISEpMSkpLSUlISktLSkhKS0pISUtMTU9QUEtUdHR1eHp6eHZ2d3d6enx+fX5+fn5/f35+fn+AgYB/f3+AgYB/gICAgH+AgmlQUlRXVVRWWVdYWFpbVFRTUlBRU1FRUU9OTlBQUU9MTlBPTk5NTEtNTk5QTU9QUFJRUE5OT05PTk9PUFFPTk5PTk5QTk1NS0lISEpJSUlJR0ZHR0dJSkhJSEhJSEhHSEdISElISUxLSklISkpJSkpIR0pMS0pJSUhKSktMTk1NTU9RTFVzcnN3enl3dnR2eHp7fX19fn5+fn9+fn5+gICBgICAf4GBgH+AgICAgICBbE9PTlRZVVVdW1lXV1hOTUpKSUZKT0xKSkdJSk1NS0pMTUpHSUlJSktMRkRGSktLSkhKTExMT01MTE5PT09NTk9MTk5OUFBPTE1MTk1MTEpJSEdJSElISElJS0xLS0pJS0pJSklJSUlJR0dKSUdJSUpKTk1OTEhJSklJSk1PT01MT1JOWXBwcnd4d3d0c3R3enx+fX5+fn5+fn5+fn9/gICAgICAgYCAf39/gICAgIFvS0pNTlFOTlVXVlZSU0lFQ0VFUkREQT5CP0RAQD5CREFAQURHRkVIRUJBQEBDQ0RFQUNFSEtPS0lJSkhHSklKSUlLSkxQTk1MTU1MTU1NTElIREZGR0ZGRklKSUlLSkhMSklKSkpJSEhKS0tIRkdJSklLTU5OSktPTUxLTU1PUE5QT1BgcG9yd3h2dHJzdXd6fX19fn5+fn9+fn1/gICAgICAf4CAgIB/f3+AgICAgXNQUE5OUE1KS1BSUE5RQ0RCQUZRRT1DPT9FSDk6Oz0/PTxBRUA+Ojs+PjxFRD0/RUE/QEFAREVHR0dHQkRERUZFR0dHR0pHSEpLR0NER0pHQ0RFQUFDR0hHSEdISktKSElMS0lISktLTU5MTUxMSkpMS0lLTU9PUFNRT1BQTk9QUlFNUGdwb3N2dXRycXR4eX19fX1+fn5+f4B+foCAgH9/gIB/f4CAgH+Af4B/gICCdlRVUVFQT0xNUFBOT09BQkFAQkE/Oz48Pj8/Ozg5ODs7OkA7Oz48Ozs8PEhMPT1BQT9CQz1BRERGQ0ZGREdJSEM/QD9AQUFCQUE/Pjw9PkFAQD8+P0BFR0dHSUtMTk1OTUxNTUpLTVBVU05MTlFOTk1OTE1NTk9OTk1LS05OTk1OTkxUbnBwcnR0c3Fydnl5fX19fn1+fn5/gH5+gICAgICAgH9/gICAgIB/gH+BgIJ4UVFSVFJTUVNTUVFST0BAPT4/PD8+QEE/PT45Ozo7Ozk5Ojg4Oz07Nzg7PD49Ozs6ODpAQEFCP0E/Q0ZEQkNDPzs+PkBDQ0E/Pj9BPkBAQj9APD9CQEFDRUVFSktQT1BPTU1OTExMT1JRUFJOTExPTUtOT0xMTEtMS0tKS0tKTU1LS1xxcXF0c3VzcXR4eHp9fn1+fn5+f39/fn5/gIGAgH+Af4CAgICAf4CAf4CAgXxSTU9RUFFSUlRSU1NOPDs8Ozs7P0BBQkA9PDk8PTw6Nzk6Ojk3OjpAPzg6OTo7Ozg3ODk7Ojg8Oz1AQUA9Ozs+PD09QEJDQT9BQkE9Pj09Oz0/Q0RCQD9BREJFR0pKSkpKTE1MTExNTExOVVNLTE1USVBKSU1KSUpLS0pJSEdKS0lKZnJxc3RzdXJydnl5e31+fn5+fX9+f39/f36AgICAf4CAgICAgIF/gIF/gYCBgFZMTlBQTlJRUFBRUU44PT88PDo9PkFAQT8+PkA/Pj48PT0/Pz49PWppPj09PTw8PDw7PDo7PD49Pj8/QUA+P0E/QEBBQEBAPT8/PTw6Oz09PD9AQUJCQUBCREZGRkdGR0dISUtMTExLTEtKS0lKSk1MTEpMS0lISUxMS0lJSUlLR01tcHF1dXR1c3V4eXl8fX5+fn5+fn5/gH9+gIB/f39/gH+AgYCAgYCBgICBgYCCYUtPT05OT1BPT1BQTzo8Pjw9Oz8+PkFCPz0/QkREPz49Pj5AQDxKeHNMPUNFPz9APTs9PT08Ozo9PkFBPz5AQD9BPz89PD48PTs7PD0+QUA/QD5AQ0NEQkRFSEVFR0hISEdGSUpJSUlJSUhKSkpKTEtKSklJSEhKSktMS0lLSkpIVnBvcXNzdHR1eXp7e3x+f35+fn5+f39/f39/f3+Af4CAgICAf4GBgICAgIGBgIJtTFBRTk9QTk5PUFBPPjw8PT4/P0A+QEA/Pz9DRkVKPzw7Um9tZ2V4c0g4PDk9PUA9Ojw7Ozw7ODk7Pz49PD07PEA9PTw8Pjs9PD0+QUBCQUBAP0JEQ0RFRkZGQ0VHSElJSEhJS0tMTUpKSUpNTUpLSktJR0hISEpJSktKSk5MSUlfcHFycnJ0dXZ6e319fH5/fn5+fn5/f35/f36AgIB/gICAgICAgYGAgICAgIGAgXZNTk5NTk5MTE5QTkw+QTw8PT8+QkM/P0FBQUJATXpjPVeBhYaGgnlyRjg4ODo7PT8/PDs7PDs6Ojs+Pz89PDg6Pjw9Pj89Oz4/QEJDQkJDQ0FCQkFCQkRCQkRCRENGSUdGRkhJSUtNSklKSktMSkpJSkVESUlGRkhISkpKTEpGRmdwb3FxdHZ1d3t8fX18fn59fX1+fn9/foB+fn+AgH+AgICAgICBgYCAgICAgICBe05JS0tMTExFSUxOTTw/PDw9PkBAQUE7QkNCQz9Wd3tnfYOCg36CfnZHPT0/Pj0+Q0Q/Ozw9Pj89PT5BQ0A8OTtBPz4+QT07P0JAQkNCQENDQUNBPT0+QD0/QUFBQENFRUBAQ0JDR0dFRENGRUZGR0VEQEFHR0ZDRkRHSEpHQz5IbG9wb3F0dXZ5fHx8fHx+fn1+fn5+fn5+f36Af3+AgICAgICAgIGAf4CAf4CBgIF+UUhLTU1NS0pLTE9RQD8+PkFBQEBBR0FCRUNFQFd1dH+BfYKDeYGFckRAQENAQD9AQD49PD1BRUFCQkZIQz08QERDQUE/Pj1AQT4+Pj88PkBER0VAPkBBP0BDRkVDQkNDQEJEREJERUFCPkFCQkFCQEA9QUJDRENDQUNFR0E/PVZwcHFwcnV1d3p8e3t8fX9+fX19fX1+fX5+fn9/foB/f4CAgICAgYCAgIB/gIGAgX5SSEtNTUxLS05OUlVEQkBDQ0FBQkBCQ0BAQUFATnRyfn14goWBg4ZfPUNDRUA/P05hX0pAQ0VJSUlJTU1LRUNGR0hFR0VFRUREQ0E/QD4+QkZKSkdFRUdGRkpOTktKSUdHSEtNSkdHQ0REREVEQUJCQ0BDREVEREVERUZDQkFEZW9wcXF0dnV4e3x6fHx+f319fX19fn59f4B/f39/f39+gIGBf4CBgICAgH+AgICAfVJJSUpKSEpKTE9SU0dGRUdIREdIREA+PDs+QEVFZneAgYGEhYeGiIRLQ0VEQ1d1homKflhHSEpMTE5PT0xIR0hHSElJSEhHR0hIRUNFRUVFRkhKSkZFR0lKTU9PTU1LSktKTU5LSUhGSElIR0ZFRkZGREZIR0VFSEhGSEdIRlFubnBxcnZ2eXt7e3p9fX5/fX19fX1+fn1/f39/fn5/gH+BgYGAgICAgICAf4GBgIB8UEhHSElGR0lKTU5OSkxJSUpLTE5KRkNBQkNGSkdYc4GEhYWDhYiIjWU/QVZ0h4mHh4aHgldJTE1MTU1MSkdHR0dER0dHR0ZIRkhFQ0RERkVEREhIQ0NDR0pKS0xMTExMTElKS0pKSUlJSEpISEdISUhHR0hGRkZISklJSUlIXW9vcXJzd3d6e3t6e319fn59fX19fX5+fYB/f39+fn+BgIGAgYCAgICAgIB/gYCAgHxNR0ZIRkVGR0dKS0pMTUxLTU5NT0tJSEhKS0tMTEpYgoWGhIGChoiKfFRshYeGhoaHh4eHfFBLTEtIR0ZGREVDQ0BBQ0NDQ0ZGRUJAPj5AQUFAQkQ/Pj9ERkhERUdJS0lJR0hJR0lJSkpJSEZKSkpKSUpJSkpKRklMTEpKS0tmb3Bzc3R2eHl7e3t8fH1+fn19fX19fn59f39/f35/f4CAgICAgYCAgIGAgICAgICAfU9GRkdGR0hHRUZHR01NTUtMS0lHQ0NDRElLS0xMSmOGhoaDgYOChISDg4WFhISFhoaHh4aKdUlJRkI/P0A/Pz88PDw+Ojo8QUFAPjw5OTg8PD07Pjs5Oz9BQkFBQ0NDQEFCRERCQ0ZISUhISExNTEdJSk1NTk1KSktLSkxNU2xvcXRzc3d5e3t7fH19fn9+fX19fX1+fn5/foB/fn9/gICBgIGBgICAgYCAgIB/f39+UUZFRkdJSUdEQ0VGTk1MSklIRT85Oj5ARUhISkpKbIeGhIGDhoCBgoODhIWFhoeIiIiJiYyOZkJCPTg4Ojo5ODc4ODk2NDc5Ozw6ODU2Nzc4OTc4NzY4OTs7PD5AOzk5OT09Pjw8PUFERUhKTUxMR0lIT1JRUFBOTE1NT1Fdb3BydHN1eHp7e3x8fn5+f359fX59fX5+f39/gH9/f4CAgICAgYCAgICAgICAgIB/f39RR0ZHSEpIRkVGR0hMTEpJSUdDQjU2OjxDQENHSUlohoOBf4CDhISEg4OEhomKi4uLiomKi4yJVDo4NjU2NzY2NjQ1NzYzNDY4Ojg3NjU2NTY3Njc3ODo3Nzc4OTs3NTg5OTg5ODc2OjxAR0ZJRklGRUZPU1JTU1JPUFBSVGVwcXN0dHd5e3t7fH1+fn5/fn19fX19f39/f3+Afn+AgICAgICBgICAgICAgICAgH9/flJISEhJS0lHSUpJSkpLREVIRUJANTc4OD06PUVDRXKFgICBgoODhIODhYmKiomJioqKiouJiYqBSDY3NjQ2ODg3NDU3ODQ2NzY5OTc2Njc2NTo5Ojo6PDg5ODk3Nzc3OTo5ODg3ODU4OTtBPT4+QkE/QUtMT1FQUU9PUFJXa3FydHR1d3l7e3t8fX5/fn9+fX19fX5/f4B+fn9/f4CAgH9/gICAgICAgH+AgICAf39+VEhHSUlMTUtKS0tMSUg/QEFAPDo1Nzk4OTc7QjlGgISAg4SFhISEhIaJioqIh4eIiYqKjIqJiYx6Pjk4ODs8PT45Ojs8ODk7OTo7Ojk5Ozo5PT09Pzs7Oz06Pjs5Ozs8Ozw7OTo8ODo6Ozo5OTk8Pzw9QUJESUpNS0pLTFdvcnN1dHZ4e3t7fHt9f39+f359fX19fn9/f35/f39/f3+Bf4CAgICAgICAf4CAgH+Af35URkVGSUxOTkxKSk1CPzo7PDs4OTk4OTo6Ojs/PVSFg4KDhYaFhYaIiYiHhoaGiImIiYuMi4mKioxsPDs+QkNFRUFBQUI+QEJAQD89Pj5APz4/QD9APT0/Qj9BQT9BPz1AQEA/P0E9Pjw7Ojs6OTs/PTs7PT1BQUNBQkNBWHFxdHR0dnl7e3x9e31/fn9/fn19fX5+f35+fn9+f4B/f4CAgIB/gIGAf39/gICAf39/flJFQkFHSk5PTElHSzo4Ojs5Ojo8PTo7Oz09P0BCXYeDg4WGhYWEhomJiIiGhoaHiImKi4uKioqLiotePkRHSUtKSUZHR0RGSEdFQ0BAQ0VDQkBCQ0I/QERIRUNFREVFQUZFRkVGRkRAQj89QD49P0A+Pz8/Pj8+Pjo7PTxgcXJ0dHV3enp7fX19fn5+f39+fX19fX5/fn5+fn5/gH9/gICAgICAgICAf4CAgIB/f4B+UERAPUNIT01HRkJEOTc6Pjo8Oz4/Pz89QUBEREVhh4ODhYWGhoaIiYmIh4aGhoeJioqLjI2MjIuKiohXSExNTUtOSklLSElKSklFQ0RGR0ZEQ0VGREJISUtIR0dGR0dFS0lLSUpLSkNGQ0NEQkFBQ0JEQ0NERENBPTs9QGhwc3R0d3d6eHt8fH19fn5/f359fX1+fn9+fn59fn+Af3+AgH9/gICAgICAgICAgH+AgH9PQT49P0RMS0BCQkE5ODw+Ozw7PkA/QT9CQ0hISl+FgoOFhYeHiImJiIiHhoaGiIiIiYqMjYyMi4uKjH9QTVBNS05LSkxJSUlISkZER0hISUVFSEZGRUxMTUlKR0dISUpPTU5MTE1LSEZHR0VFQ0ZGRkZERUhIRkNBP0BMbHB0dXZ4eXl5fHx8fX1+fn9/fn19fX1/f35+fn5+f39/f39/f3+AgICAgIB/gICAgICAf1FBPz4/RkdHPTxAQDg4PDs8PTo/QD5AQENGSkpQZ4ODhYSFhoeHiIiIiIiIh4eIiIiJioyNjIyMjIuKjXFNUU9NTExLTEpIR0VKSERKSEdLSkhKR0dHS0xOTExISElKTVBOUE5NT0tJR0lKSElESUhIRkZHR0lGQ0JBQ1VucXV2d3l7eHl6enx8fX5+f39+fn1+fX5+fn5/f36Af4B/f3+Af4CAgICAgICAgICAf39/VERBQUJHR0I/OD9AODo8OD0+Oz1BPj9ARUlLTVZzg4OEhIWFhoeIiIiIiIeGiIiIiIiJjIyLjIyLi4uLi15RUVBNTk1LSkdGQ0dKR0xKRktPTEtKSk1NTE9QTkhJS0xPUVBQUU9PSklKSkxKTEZHSEdGR0lGRUVCQEJCXG9yd3h5enl5eXp6e3x+fn5/fn59fX19fn9+fn9+f4CAgIB/f39/gICAgICAgICAgH9/f39VRUNFRUdHRUQ7P0E7PTw5QD4+QEJHR0FITE1RV3mFg4ODhISGiIiIiIiIh4eIiIiIiIqLi4uMjIyMi4uNfFdVUlJUUk9MS0pFRUZLT05PV1ZRUE9RU1JNU1RPTVNMUFNVV1JTUVBMS01NTUtOR0dKRkZISkRERUVCRENjcHV5eXp6ent6e3p7fH59fX9+fX19fXx9fn5/gH9/gICAf39/f3+BgYCAf39/gIB/f39/f1VGRkdHR0dIRj5AQj0/PT1CP0JDRlZORk9RUVVZfIaDhYWEhIeIiIiIiIiIiIiIiIiJiouKioyMjIyOi4uLZ1ZWa2FFUlFRUEo7OlFTUmB1XVVWVFZZWVJYWFJaZlBVV1pdUlRXUVBOUlBQUFFLTEtHSElIRUZJSElISWpydnl5enl6e3t8ent8fXx9gH59fX19fX1+f39/f3+AgIB/f39/gICAgIB/f3+AgH9/f35+VEhKSUlHR0ZFPz9BQUVCQ0dFREVMWFJNVFZWWFt8hoWHhoWGh4iIiIiIiIiIiIiIiIiIlJyMioqMfWGKi4uHbFtkVTpYWFhTUD5AVlVZXGRgVllicl5dVl1aVkVRWVpbWV9UWWdSVVZYVVRWVE9PTUpMSklJTE1LT01Tb3N2eHl4d3l5ent6e3x9fH5/fn1+fX19fn1/f39+f4CAgH9/f3+AgICAgH9/gH+Af39+fn5WSkpJSEdGRERCQT9ITUlNUEtJS1BUU1NYWlpcXHiFhIWFhYWGh4eHiIiIiIiIiIiIiImcnaCPiY5nO36MiYqLeW5wWFpbWlJTUlZWVFpadYNZVX2QYVxYXV5XSVZdXVtbX1lIWVhZXF1ZWFlXUlFNUFFNTU9TUVFVUmFzc3Z3d3Z4eHh6e3t8fX19f39+fX59fX1+fn9/gH9/gIB/f3+Af4CAgICAf39/gIB/gHh5fVlOS0lJSUZCREBBOlBRUVdYUFBPUVNUVFhYWVpbboGCg4WEhYaHh4eHh4iIiIiIiIiIiJaanJeIioFuhomIh4OKfmZZWVxYU1ZUV1JRV1ZjloBRZXJYWldfaFBgZlpbWFxoYkdPWmlnXFtcXV1XU05TUFBRVlZWVllabnJ0d3Z2dHd4eHt7fH19fX5/fn59fn18fn9/f3+Af39/gH+AgH9/gICBgYB/gH1yfX9/b3R8XVNQT01LSkVDP0A7UFBaWltSU1FPUlJSVVNWVFdfdXiAhYSEhYaGhoaHh4eHiIiIh4eIh4ORjomJiIaFiIiGfYB7XFBWWFRSVFJRUUxPTUtmeVpdVFlVVl1aTFRaVVNUXlpYV1dXemtYWlxcXlNQUFBJTk9XVlhaWmRxc3Z2dHR2eHl5e3t8fH19fn99fX1+fX1+f39/gIB/f3+Afn56eHd2c3V7f3+AgHRrfn5rcXleW1ZVU1JPS0ZDREFNXoNsVlJTTk9RT1FVUlNSUlRjZHaAgoKDhISEhIWFhISDhoaGhoeIhn6JiYiHhoOHh4d5bXFWSUtOTktNS0hKREZIRUM+U2NVf1JQUU1LUlRSTU9ZUU1OUVNVVU1RU1JQTkxMSENJSFJUVVpcbXJ2dnVzc3d7enp7e317fX19fn19fX59fn9/f4CAgH99fX5+f39/f4B+e3Zzd31+fmR1fWlxdF9kXV5bWVZRTElMSWFsknRQUVNOUVJRUltSU1JRUlVVYnN7fH+AgYKBgX99e3uAf4OChYaHgoaGhoGEgYaFhnVfXUtDPkNDQ0NCP0RQQkRAQz5CSEdWQEhOTUddaVBIRk9GREVGSEdIQkNIR0hKR0NCQURAT1BNUmRzdXZ1c3R1enx6e3t7fHx9fHt+fX19fn5/f3+AgIB/f3x8fX+Af39/f4CBgH12dHt/bWh8Z25xZmllZWJcWFNRUFVSc1dlW09PTkxRU1FVWVNVUVFUUk9WYGtscnZ7e3h5dHJuc3RzeXh+foOAg4OCgIKAgoGBa0xHPj46Oz5AQD8/PmtQS2FFRkhJRUI/R0xOR01RVUlCRT8+PD08PT0/PT9BQ0I/Pjw9Qj5KTUZVbnV1dXN0dnh7fHp9fHx9fX19fH59fXx+fn9/f4B/f39/enl3eHd2dnh7foB+fXt4dnx1YXhnbHBqbGpqZmBbUVJaXFleSUpQUU5LTFFSUVRWVFdRUVdWUFhbYl1hZ21tbG9raGBucmptbHF1e3p9enh6fHx4d3hkQkBAQT06QkNBQURCW1xPe05PT05LTE1PT1FMS0xXTUhHQEE8OTc3NTk5PTs7Ozg5ODk/O0FIP1x0dXV2dXZ3eXx8fH18fH19fX58fn19fX9/f39/fn9/f314dXd6e3p3eXh1d3t8eXh1eXdjcWhpcG1ubW1oZl5PUF5cWklHUFJRT01QUU5RUlRWWFNSWVROWVpbV1ldXl5gZWBdXnF2a15gZ2t3b29sam9ubmxmYllHRkZIQkFGSUVFRkRMUU9hV1JYUVBTU1JVW09PUVZQTUpDRj46OTY0ODY5Nzk6MzY2Nzk2PEI9ZnR1dnd3eXl7fX18fHt8fX1+fnt+fn19f39/fn5+fn9/e3d1eX18enh8fHx8dHd2d3Z1d2tuaWhxbm9vb2prYFVXXlpXTUxUVFNRUVVPTFJTVFdYVFRYUkxYWVpWWFhWWFldV1dYaHNrXVZhc2thYV9dZGBfXllVUE1PTkxJSEpLSUhGQ1BPU1pXVFRNUVNZU1xlVU9TVFJOS0lIQz9BOTk4ODk3ODg0NzU3ODU4OUduc3V4eHp7e31+fX18e318fn5+en1+fH1/f359fn59f358dHR1e3hycW9vbnR4cXJzeHZ1cWZkZ3JucHBxbm1kXV9fWVdPUFhWVlNUVk9PVVZYWFlTVVRMS1RVVVVVV1BUVVdUVVJdbl5STllfW1ZZO0RVV1RbZkpMUFJST01NTk5OTEpGUFBVWVNUTkpOT1VTVFxWUlVTUk5NTElISEY/Pz06Nzg3NjU5OTY3NjY1V3FxdHd5ent8fX19fnx9fXx+fX15fX18fn5+fXx8fX1+fXxydnF4eHJ1dXFxbnBwb3B1dnRuamRkanBwcXJwb2ZlZGNcXlJUWlZXVVRXVFJYWFlZWVJVT0pIT1BPT01SSk9QUFBOTk9UTE1JUE9TVFUyPFhNSUFRPWNgUVNRUE5QUVBOTk1QTlRSUFJNSUxLT1FQUVJTVFFST0xNS0xMSENCQT06OTg3NjtCNDU2NjtlcHJ2eHl7fHx9fnx9fH19fX18e3h8ent9fX58e3l9fH18e3B1b3d1cHV0b3N2cHFxcHR1dmNqZ2VXaHRycnFuaWlocFZWVFVYVVdVUldWVVpZWFdVUVNGRUJGR0dIRkpESEpIR0VITEhLSUdMTVBNRy9FX1I+M0A+am9hUlJRQEZUUVBRUFFOUU9QT0xKTExPUE5OUFFRTlFPSkxNTUtHRUVEQjs9PTw5PUc2Njc3RG5xdXd6fHt8fH18enx8fX5+fXt5dnh3eXl8fXp6dn17fHp6b3Fud3JwdnFtcHNwb3Bzc3N0ZmdgaFpXa3JzcmxtbWtuYmVQU1RSU1VPV1ZWWVlWUVFRT0A+Oz0/QEJBQ0BCRURBQEdIR0hGRkhKTUxFR0NPUkM4RU5TXWdTUVNBR1VQT1FRUE1NTkxKTEtMTk9PUU1PTk1JTUxJS0xMS0dGRkVEPEFBPjtARTs8ODlUcXJ1eXt7e318fHt5fHp6fn58e3V0dXJ2dnp6eHpyfHt8eXltcW94cnF1bm5xcm9vb3Rzc3J1dGtnZ15lam1wa25xbWltY0xPTk1RU0xUVVRXV1VMTEtIPTk4Nzs/QT88PUFAQj0+RUhHREZGSUdLSkBGQUFARkhFSk9IUVJhXFFQUk5TT09PTExPTUtNTE1PTltXS01RT0hKSENJS01MSkZGRkU/QkM+PEJGP0I/QWRxdXh7ent7fHt6end8d3l9fnt7cXN0cHJzd3R4eHN6e3l2d2xxb3ZxdHRsb3Fybm5vc3ZydHNycmtsZW5zaG1ubWxtbGprSUxISE9RSlFTUVRTT0tIQ0U9OTg3OT9CPjs+QUBAPkFESUVDSEdJR0lFQkI/PjxDQUFHSURNT2FlUU1PTldLTE1LTE1NTExLTk5TZE1KTFJJSUlFQUhLTU1OS0dJRkJBQkA/RUZFSERLb3B3enl5e3t6e3p3dHh1eHx8eXpucXJtbm9ycnZyc3h8eHZ2bXBtc3B1dGxwcHJvb29ydnVyVlZucWdseYRqbXFybm5qaG9ISkNHTE1JTVBNUE9IS0U/Qj05OTk6P0I/PEFCQkFEREdLRkRJSUdHSENDP0I/P0BBPkNFQ0tOUVRMSklNVEZJSUpMSktLSUlMTU9QUlBLR0NLR0NCSkpMTU9OSUpJR0NDQ0RJSk1MSVpzbXh5eHp7e3l8dnJwdXJ0eXl2eGpxb2tsbG50dG1zdXtzdHhyb25xb3ZzbnBvcnBvcHN0eWpOYGdzanR8eWdvc3FqcWhlcUhLQ0ZISEdKS0lKS0RHQj0+PTo6OjtBQj89QkNDQ0hGSkxKRUlJRkdHQ0M7QUBCPkBAQ0VDSU1QR0hLRkhLREhJS01ISkxISEpMS01dUklIRE1GQkVLS05NUE5LTUpLRkdHSk1OUU5MY25pd3Z3e3h7en1xbWxza3B0dHR1aHBtamlra3RwbnR0eXByeXRvcnFvd3NvcXB0cnBydXR5a05WbXVscXt2aW5vaWp0aGRvRktDRkVHREVFRkVHQkNAPjw9Ojs6OkBEQD5CQ0VFSUZKSkxGSUlHRkZDQjtCQ0M+P0NDQ0VHTE5IS05IREhFSU1OTUdJTEdFRklJTE5LSkhFTkhDR01MTk1QTU5OTUxJSEpPUlFSTlJmZ2Zyb3N4dXt6fGxoam9la3Btc3FmbWxoaWtsdG1wdXR3cW94dG90c3J2c3BxcnRzcnR1dXZ2WFZ1dWtvdHJrb3ZsaG1lX3BHSUNFRkVCQ0JFQERCPj8+Ojs7PTo9P0NBP0FDRkdKR0lJTEhHR0dGRUNAPUVFQj5BQ0NDRUdISUdNUElGRkdLTk9LRkhJRkVERElJSEtJR0hQS0RKTUxQTlBOT09OSkpJTVJVVFJPV2RhYW1ncHJvc3l6Z2VoaGNpbGdxbGZsbWdpa2xzbHB2dXRwbnZyb3Nyc3V0cXNzdXRzdXZ2dnl2dXR2bGt1dW1ydnFsbmxlck1HRUVHQ0JBQkQ9QkE+QT06Oj0/Oj4/QEI/QEJFR0pGSkdJSEZGR0VDQkFBRkZDQkJCREVER0dIRkxRTElPSkpMS0lHSEVGRURDSUhIS0pIS1JNQ09PTlFQUE9OT09MS0tQVVdWVVNYYF5daWFtaW5ocnNiZWZmZGloZm5pZm1taGtrbXJpcXZ1c3Ftdm5vcXJzd3Nyc3R1dnZ2dnd2d3Z2dHd1a3N1bnV0c3Fya2tzTUZGRUhCQkFERDxBQUBDPDg5PT46Pzw/Qj9AQERGSEVIRkZHRkVFRENFQ0RJRkNGRUJFR0VFRkdFSk1LSFFNSktISElFRklIRUNJSUpLTUtQU05EUVNRUVJPUE1OUE1MTlNXVldYVlheW11kYGhiamlna19lZWdjZ2dna2dna21rbWxwcWd0dHVyc252b3FwcnR4cXNzdXZ1gpF5dnZ0eHV1d3hub3VvcnN1cXFpcHpNSEdHSEJCQkZFPEBDQkQ8Nzo9Pjs+OkBCPj8/Q0VGREZEREdFQ0VDREVGR0pFRUlHQ0dIRkhGRUNGSkpHTUpMS0lKTEZJSEtIRUtLTE1OT1NUT0lTVVRRVFBRTU5RTk1RV1pWWllWWl5aWGFgYGBeaGVjYGRlaGdqaGhqZmhubGxubXFwaXV1eHJycHVwcHBydXZwdXN1dnV7fn14dnR3dnZ2eHBsdXBtc3Vub3NzeU5JSEdJREFDSEU8QEVDRT04Oj4+Pj09QUI9Pz5BQkZDRUJDR0RDRUVGR0dHSUZISkhDSEhHSUdGREhLSUdLSE1LSktMSExKTUtJTkxPTk9SVVZPS1VWVFFUUVJMT1FQT1RZWllcWllcX19eYGNdXGFja2JgZGdocoVoZ2lmam1ucG9uc3FqdHV4cnNzdHJucHF2cnF1cnV1c355jn11dXZ2dnZ4cmh1cWtydGxxd3F1TUlLSEpFQkVHRTxAR0REQDk8PkBAPz9CQjxAPkFBRkNFRENIREZER0VISEZIR0lLSkZKSEhLSEZGTEhISEpHTExMTExJTUtNTk1PTFBQUVVWV09LVlZVU1NSUUxPUlJRVltbXV5bXF5gX2FgYmRdZGBlZmBlaGpjc3NmamhnbHBycW9zc25zd3dxdXZ0c21vcnVvcnNwdXJ2cnSBdnV1dXd2dXd0Z3Rya3Fya3J3b3ZKS0xKTEdCRURFPEBGRERCOz8/QUFBQERBQEI/QUNIQkVERkdFSUVGRElIRklISkxISEpKSUxKRkpLSElKSkdLS01NSkpNTE5PTk9MT1BSVVhWTU5UVlVTUlFQTE5UU1JXW15eX11dYGBhYWFgYmRlYmNpYmRpamd2i2xraWdtb3NxcHFwcHJ5d3J1dXRzbW1zc21xcm90dXRzcHN2dHV1d3Z1dXVlcXNrcHFqcnZvd0pNTExNR0RDQUQ8P0VFRUM9QUFDQkFDRUFDREFBRUdDSEdIR0VKRkNHSkdHSkZJTEhJSk1KTUxHS0lITEtOUUtSUUxTTUtOTk9QUFBUT1dYWFtOU1FXXFpTVlBOVFVUVFhaX2JiX2RhX2BiX2BlYWFjaW5oYmloaG14dmxoaW1vc3JwcXJycnZ0c3Vzc3Nua3NxbXByb3R2cnJxdXZ1c3d5d3V0dWNtdGtvcGpxdHB3TE1MS0xHREFARD4+REVGQ0BDQUVEREZDQkVHQ0JJRkNISkpISUtGREtKR0hJSUlLR0pKT0tOTElMSEpNS1pmSmRcS2xSSE9OX25VbHNbcXBid2NSUGJ2dWh1Y2F2YFhucWJkdmluemZcbHRgbGpUX3d2aWpnaWZnbG1qbW9qbW5zcnBycnFyc3Jzc3J0cm5sdG9ucHFxdXVxcXN0dnZ1dXl3dXR0YGt0a3Bwa3FzcXlLTkpLSkZCP0BCPz1ERUZEQ0NCRUVFRkJGRkdDREpFRUpMTEpMTUdHTUpISkpIS0pJS0pOTE1NTExJTE1MW3NiZHBebGxVTU5mc11nZXFsbnRncGlfYVlubmJwcGJrampnb3F0ZXRub1xwdWdwTUpyeXZrYmBrZWVteG1rdmxucHNycHJxcHFycXJycnRybW1zbm5vcHJ1dHFzc3R1dXV0d3h2dHRibXVrcHBscnJxektMSUlHRURAQUI/PUJGR0JGQ0VERUVEQ0hIR0RFS0dHTE1NSk1NRkpOSElLSklMSkpKS01NTk5NTUtOTU1bcm9vbnBwbGtOUFFsV05pYnRycGFtb3ZcWWxRXG1tWnFta29teHh0c2lwXGBzbHFqVXV5eHBjXmtmYmdwcGppb3Bwc3NwcXBxcXJycXFycnRsbXJtbW5vcnV0cXRydHV1dHV1enZ1dGVudWtwb2xzcnJ5SktHSEVFRUJCQj0/QEZHQkdESUVFREJGSUhIRUdLSkdNTU5LTU5ITE5JTEtJSk1JS0lKS09QT05NTE5NTFxoZHVdbHFXbE5PUW1VWmtea2x2YWxkdFRlY05tWWxcdHBraWx4and1aHBdX3NraFdiY3d8b2NgZ2hhZGl0eWtubnFzc3BxcHFwcnFwcHBydWttcW1tbW9xc3Rxc3J0dnZzd3Z6dnV0aG91bHNvbXNydHdJTUdJREVEQ0FCPEJAQkZER0ZMSEVDQ0hLSEhGSkxMRk1LTFJSTEdNTUhOSklITkhKSklITk9NTkxKTk1KWnNwcG9xcW1sT1FSbllxa2dvb3Fxb210Xm5YYXRfbm9wb3Fyb251c3R0altddGN3eHJqbnpoYWFjZ2Jiam10dXBzdXZzcXBwcW9ydHt/fn13bGtxbmxtbnByc3F0dHN1dXR4eHl5dHVrb3VtdG9uc3N2dEhLSElCRUVFQUA+Q0NCR0NISU1JRkNGSkxJR0ZKTUxGTkpLV1JLR0tKSk5JSEpMSUtKSUhKTE1NTUlLS0tTa2JaaV5famNyclpfWWpvX2VlVWtfY1thYlFgbWhdalxuaWlkW3BmZHBdWlxrW21xY3BzbGRnY2RnYGBrbXBwb3R5cnVxb3BxbnmFiIeHhoWAdnNua21tb25xcnR0cnR1dXZ5eHhzdW5xdW52cXJ1dHdzSEhGSURFREZBQEFFRERHQkhKTEhGREdLTElFRkpPTElPSUxbUUpGSEhLTUlISkpLS0lISUdLS0tLRkhKSkxMTEtJS0xOVFtcVFBUTVBPTk9PVlFPT1FPT1FKSk9QUWRxaVRZV1tbXFVZW11YXVxcY2ZhYWZiY2VfX2ZrbWhtdHlydHJvcHB0hoeGhoaFhYaHg3pwbW1sa3FzdHRydHZ0dXl4eHV2cXJ1b3ZydHN1dXNHQ0VHRkZBRUM/Q0dERUdDSUtMSEZER0tMSERHSVBLTE9LTFdNSUVFSElKSElLSUxKSEZIR0pHR0lFRkxISUtOTElPXFdeT1xbYF5PWFlTXFxiXk1ZWk1YYVJLWWFaU2BkXWJYW2RkVlZYXFlaWFxWWVxeY19kYGFfZWhrZ210dHFxdHBxcoGGhoaFhoWFhYaGhoR9cmtpb3Jzc3N0d3l5eHl4d3h0cXhyeHNxcnVydE9CQ0RMTUFDREJESUVHR0ZLSktIRUVKSkpGRUhIUEpMTUpNU0lIRUFIRkpJS0tJTEpJRkVKSEVGR0VFSkdDSk1KS1RfWWBYYGFbYFVYWVReXlpfUllcUF5cWU5fXF5TW15jX1pdYGNgWV9iW2BeW1RYWFpfXmRiYmFjZWlla3Jwb3Bwbm93hoaFhYaCe4CFhYaGhYaFf3VxcHJyc3Z5eXp5eXh4eHdyeXZ4cnF4dnR2YVNKSk1JREJCQ0ZHRUdHSUpKSUlERktLS0VGSElOSk5MSExOR0hGPkdHTElLS0pLS0lHRUlFRERFQUZKREBKS0lPW2NZXl5hX1JUU1dfYFxdWV5RWVxNVl9XS1FZW1FbX2FhXV5jYWBiYmJjY2VaUllWVVxbXmNgX19jZWJob21tbGxsbHWFf4SDeXV8hIWFhYaGhYWGhoN9d3JydHd5eXl5f359eXV5dnZybnp3dnhYUUpGQ0dFQkVHSEZHSElGR0pHSEZIS0lMRENLS05NTExISkpISkc/R0ZOSktLTEtLS0lHSEREQERBSElBP0lKR09dYVpbZF1fVFFSV11cXFxfWktXXExSXFlJTV5QUF1fYWNjY2NiXGRjYmRjZlhRVVRTXFhbYV9eXmFhX2Rsa21qamxudn51gXp8hIWFhYWFhYaGhYaFhoaGgnpyc3V1e4WHh4eGhYSBfnhwend2eFxSTUJASUZDRktJRkZGSEdHSkZGRklMSk5FQ0tKTE5KTElLSkhJR0JISFFNS0tPTEtLSUhHRUQ/REJISEFBR0ZEVF1ZXlhfWV9bXVVYWFBdXVFLSldeWF5bXVZaYFJRX19iYmBgYmJgY2JiZGRiWE9RUVJbU1xeXV1dX19fZGhnbGpubnB7e3x+e4CCg4SFhYWFhYWEhIWDhISHh4FzcneFh4eHh4eHh4eHh4WDgHx4XFNLQkFHRkRHTVJIQ1FKRkhISEVGS0pNUEVHSUpLTkxMSUxLSUlHREhLUU9NTFBMTUtLSElDRUBEQ0hHQkFGRUJWVUVcVF5TVl9YTlRVTlpbTUpLVWBhW19YX15hXU9ZYlxgYF9iY2JdYmJXX19UUE9QUVhSXVxbXF5fYGFmZmVsZm9vd3x7gHt9f4CEhISEhIWFhYODhYKDgoWFhnpvgYaGhoeHiIeGhoaFhYSFg35JTkZERkZHRElSY1BEVl5JR0dIREZNSlBQRkpJSktOTEtLTEtKSkdFSk1RUU5PUE1OTE5IS0FEQEJDRkRDQURFQUxIQ0xMUE9PTEZNRkdJSkhHTExNT1FJTE9QUFNQTFFTUlVaWVdZWFhkVk9TVFBQT05QVVRcWVlaXl5hYWVmY2hka2xwc3N6eX97en+EhISEhISEhIKEgH57gYOBfXuFhIaGh4eHhYWFhISEgoGAfUtJRUVHRkdES01eTEdHWE1ISEpIR05MUVFJTEtLS05OVU5PS0tMR0dLUFNTTlBPTk9OT0hLRWBEQ19MRGZjRE1bSF5cc21PTVZtWUxDUGBVbFdnSl1YVl5ETFFVTE1UVlFSVFhXVFhVVFxUUGZaaGhkWVRrVFdWVVtcXGBgYWJiYmBmaGZubGhyenx9foGEhISDg4ODgX18enJ7gXp7f4KAg4SEhYWBhIWBg4N/fnp7TElFRkZIRUVLT1RJS0dhVEhKT0pJT01SUUtNS0xPUlVST09KTE5HSE1RW1lPUFBOT1BPSUpQf1FJfFlZcnNYUG1IcW5vYVZQcXFzUEJrc21xc3BTb19bblhdVlxYVWtoVV1WY1pgWVpfVlVXf2p0dXVfYXZfWGJcXGZbX2FhYWJeYGJnbXBsYHB3dHiBgYKDhIJ/fX6Adnh6bHZ+dHh+gHx+gIGChHyAg3p/gX9+d3dOSUVITU1CRExMR0lMRlJWTEtPSUtSWFdRTk9PTFFUTk9RUEtMT0dNUFJaWlRRUU9QUFBKSFp4XVR4ZGhZUlRRdmd0bHBibmZrUXJPTXdtanJwc3JxcnBvcIBdZXp1eHFxenF+c31rdX1iUmh8ZXNzb3NzfH1vfnlvf3JgYGBiYlphYGdrbmtibGZnbXd+gYCDfnt4d4B0dnppcn5udHx+d3h7foCDeHyBdXx/fHxzc05LRmBdR0FFTU1IS0tISlBPTU1KTlZeWVVMUVNOWVlMU1NSTkxQSVFSVFlXV1BUUFBQUUtHZnhsY3hxbVpKTFV5cHVtdWJudlBkZUlmdnFtd2+AamZ4eGlXclFoem1panp6fWx4en9wZ29YdnZqdnVwgGFzaH1pbHh8b19fX2NiW15jZGdpamRnYmNkbGxwcHN0c3NzeXFyeGJsdWdyeXtzc3V5foFzdnpufH15eHJuTkpTdE5EQkVQUElLS0pMUE9PT01QWmBaWEtUV1BhXlJWUVlTTVBJU1RVWFdXUFVQT05SSktyb3V1cXVxZGhhVm5McXBeRmh5V3ZUTGh4fXhgeXtzbmFebW9kUmdydW5teXB3bHZzdHFsbVxzfnprbXl8bHVtfGtwdnV4Xl9fYl5dX2VkaWdoZWVeYmJpaWlqa25va3FubWpwYWNmZG93eG9tcHN5fm5xcGp7enRyb21LS1tWSEdFR1JQSkxNS0xRUVBQUFFXXFlVTlZZVWZYUlJZXlRNTklUVFZXWVdPU05OTlFIUm1IaXdLYGR2dlVXbE9ubHtzYWpnf3ZVS1draH1sbWx4YFtwenteYHpzY3JveHFoZHxpcntdVEtsX3Z1a2l1e3ttfnhrfHBdXl5iW15iZGVnZWVlYlpjY2lra3JzcndnbWloZGdgYWxhZ3Nya2htbXJ8a21oa3t0bW1rbU9HSktISkhIUlFMTlBNTFRTUk9TU1dSVlRQV1pWVlRUVGFgUU9OS1RTU1FVVk5OTE1PUEpIUU5QVUxLS1NUU1JUUFZVUVFOUVFYWFFPUFVUWFhYW1tVU1NXW1dYV1pPU1VXV1hRXVhWXVVTT1hSV1dXWFpgW2dyXltcW11dX2NaX2NjZWZkY2NiWWNjZmZmbW5tdWZmZ2NgZl9dZ2BkbGhmZ2tocHpoZ2drdWpoZ2lsUUlLS0xNS0pUUk1RUVBMVlZUUFRVWFVZVVJaXVZVVFdVWVhQT0xOV1RRTlVTTlBNTFFQS0pRUktRTUtLT1JUUlFRU1NJSE1OT1FSUVFRVFZSWFdcV1NTUVJVVVZTWlFOU1JYVVRZVlRZVVNSVVNUVVhZV15aX2FdXFtaXFxgY1xdYmNkZ2VkZGFZYGFjYWJpaGluY2FkXl9jXVpkXGJtYV5mZmdtc2RpaGtrZWRkZmhQSktMT09MTVRRT1RRUU1YV1VUVVdXV1pWVFxgVldWWVVYVFFQS09YU1BOVVBOUU5LU1BNT1VUTlFOTU5RU1BUUVNUVU5LTU9RVFRSUlFWV1VZWltZU1VSVFdXV1lbVE9UVVhVVFlVV1lUUlJXVVVXXFlbYF5WWV9dXl1cXWFhXltiYmNoZmVkYlhgYGJdYGhlZmRhXl9dXV5aWl9aX2dgXl1dY2hrYWdmaGZkYGJjYVBLTUxQUUxPVFBQU1FPUVpZWFdYWlpYWFZdamRWWFlaV1ZUVE9LT1ZUUE9UUFBRTk1RUVBSWFRSUU9NT1NVTldSVFVVT05OUVNVVVRUUlRYVlpdXFpWVlFSV1hWW1tXUVRWVlVWWVRXV1RSUlhWVVpfWl5gX1ZeXV5gXFxgYF9fWmJiZGhoZWRiWWJgYl5fZmRkYGJdXFxcXFlaW1hbYVteXVxfYl9fYmRkYmRfX2BcUE1OTlJRTVJTUFNUUU9VXFpaV1tbXFlaW2RxbWhkX1tZVlZYUk1NVlNNTlJPUVJPTFBTUlVaVVRQUExQV1ZRV1NTU1hNT1BSVFhVVVVTVVlYW15dW1tWUk9VV1ZbXFdRVFdVV1hWVFhaVFNRWVdWXF5bX19gVWFcYGFdYGJfXGBdY2FjZ2lkZmBaY2BhX19lZV9gY1taXFtcWVpZWVdcWVxbYF5fW15eYWBfYlxZYFpRTk9OVlFQVVNQVVRTUFdcXFxYXlxfV1xeanF3eYBjXFtWVlhSTk9XU05RUVBSVFJMUVRTWVpXVU9STlNYVlRTVFJSWk9RU1NWW1ZWV1RWWlhdXlxcXlZTTlRWVlxcVlJUVlZYWVNUWVxUUlJcWFpdXl1hYWBXYltjYl5hY19cYmFiX2RnaWRmXltkYGFgYWNlX2JfWVpeW1xbWVhZV1daWlphXF1bXVxcWl1gV1tbWlBPT09ZUFVVU1JXUlRQW11eXVtgXGBVXF1panJ9c2xnXFVZV1FPUltTUlFUUlRVVEtSVlVbWVpTT1NSVlZVU09WUlNaUlRVVFhcV1hYU1hcWF5dWVteVVVOVldXXltYUVVVWFhYVVdZW1RTVl1ZXV1hXmNjXllgW2ViX2RkXl5jY2FdZWZpZGZeXmRhYGFiY2RfYl5YWl9bXFtYWFhYV1taXGBdW1tcW1hZW15WXlldUE9PUlpQWlVVV1ZTVFReXmBeXmJcYFVdXmJreXRsfWxaVVpVUVFTXFRVVFVUVllXTFJaVl1bXFJPVVNYVlZTUFhSU1dTV1ZWW11YW1lVWl5YX15ZXFpSV1JZWFlfWllTVFZaWVpWWFlcVlVaXVxeYGFfZWRdXl1dZWFiZmReX2RjYFxnZGhlZGJfZGFfYWBiYl9gXldYXlpcXFpZWlhWXVpdXltaW1xbV1lcXVZYV11TT1BXWVFdVVZZV1dVWF9gYWFgY11gVV1eYmVldYF6aFhZWlRWU1ZcV1dXVlZXXVhQVVxZXl1dVFNYUlhWU1JUWFJTVlNZWFhdXlhdW1VeX1hfX1hcVlJZVFlaWmBYW1RWWFtaWlhZWlpYVl1eX15jYmFlZV1iXGBmYmRmZF9gZGJiW2ZjaGVjZmFmX19hYWFhYF9eVlVdWltcW1lcWVldW1tbWFhZW1laWl1fXVRZXVVOVFpWU1xUVldZV1ZcYGFiY2FkX19WW2BkYV96dW9oWVxaVlhVV1taWVxZWFlgV1BVXltgYVxUVVhQVVZVU1ZWUlNVV1taXF9eWl9cVl9fWl1eWV5WU1lXWVpdYlldVVZbXFtcW1tZW1lZXl9gYGRiY2VlYmRaYmZjZ2ZlXmFjYGNeY2NpZGRnX2deYmJjYWFgXl9YVFpaWltbWFtYWFxbWltXV1pYV1xbXGBdVl1dU1BWWlZWWlVZVVhXWF1fYmFkYWRhXllZYWRiYGxmaF5cXVtXWFhZXFxcX1tZW2JWVFdeXWFjXFNWWVBWVlZWVlZUVlRYXFxfYGBdYF1XYF5bXlxbXlhWWFhbW19fW15XWF1cXV5eXFpcWFtfYV5gZGNkZmZmYlljZWVoZ2ReY2FgZWNdZmlkZWlfZl5jYmNhYWBfX1tYWVtZWlpYWVhXW1taW1dYWlRZXVxaYFxVXmJNUldZVldaWVtcWVdZXmBiYWRhZGFdXllhY2JfYWBhX1xcXVhXW1tdXV9fXFpdY1hZWF1gY2RfUlhZUFhXWFhYV1ZXVl1dXmBhYV9iXllhXV1eWV1eWVhWV1tcYF9dX1lZXl1eXmFdW1pZXF9hX2JkZGVmZ2diWmRmZ2lnY19jXmFmZVpoaWNmaWNlXmJiY2FgYF9dXVpXW1lZWFhaWVdaW1pZV1hWVVtdXV1gYGJieEtXV1xYV11cXF1aV1xdX2BiZGJiYV1gWGJjYmBjYWJeXFxcWFdbXV9dYF9dW2BkXFxYWmNlY2FSXFlPWFdZW1pZWFpZYF1gYmJgYWNfXGJdX11bX15aWVVYXV1fYF9fW1peXmBiY1xbV1tdYGJiY2VkZ2ZlZ2RcZWZoaWZjYWJcY2dgXGlpYmhpZmVgYmFjYV9gX11dXFlcWVhXWFlZV1xbWldXWE9YWl1hY2Zmcmt/SllXXVpaX11cXlxYXVxeX2FjYmFhXWJbYmRhX2NjYl1cW1pXWGpxYFxgX11cYWNfXllZY2VkYVRfWlFZV1xdXFtaW1tjYGNiY2BiZGFgY15gXF5eX1pYVltfXVxhYV9dW2BhYmViX11TXF9gY2RkZmVnZmVmZV5lZmhoZ2RkYFtmZ15haGhiaGhmY2BiYGNiX19fXV1bWltZWFhYVlpWXFpaVlZVTFhXXGdpa2h1eIF2dnZ2dnZ2dnZ2dnd3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d4eHh4eXl5enp6enp6e3p6ent7e3t7e3t7e3t7e3t7e3x7e3t7e3t7e3t7fHx8fHx8fHx8fHx8fHt7e3t8fHx8fHx8fHx8e3t7fHx8fHx7e3t7e3t7fYmIhoqHhYKBgoOCg4OCgoKCgoKCgoKCgoGAgYCBgICAgYCBgYGAfnx8fHx8fHx8fHx8fHx8fHZ2dnZ2dnZ2dnZ3dnd3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3h4eHh5eXl6enp6enp6ent7e3t7e3t7e3t7e3t7e3t7e3t7e3t6e3t7e3t7fHx8fHx8fHx8fHx7e3t7e3t7e3t7e3x7e3t7e3t7fHx8fHt7e3t7e3t8iYmHiYaFgoGCgoGCgoKCgYKCgoKCgoKBgYGAgICAgICAgIGBgYB9fHx8e3x8fHx8fHx8fHx8dnZ2dnZ2dnZ2dnZ3dnd3d3d3d3d3d3d3d3d3d3d3d3d3d3d4eHh4eHh5eXl5eXl5eXl5eXt7e3t7e3t7e3t7enp6e3t7e3t7ent7e3t7e3t8fHx8fHx8fHx8fHx7e3t7e3t7fHx8e3t7e3t7e3t7fHx8fHx7fHt7e3uHiYiJhYSDgYKCgoODgoKCgoKCgoKCgYGBgICAgICAgICAgYKBgH58fHx8fHx8fHx8fHx8fHx2dnV2dnZ2dXZ2d3d3d3d3d3d3d3d3d3h4eHh4eHh4eHh4eHh4eHh4eHl5eXl5eXl5eXl5e3t7e3t7e3t7e3t7enp6e3p6enp7ent7e3t7fHx8fHx8fHx8fHx8fHx8fHx8e3x8fHx8e3t7e3t7e3x8fHx8fHt7e3t7e4aJiYiFhYOBgoKCg4OCgoKCgoKCgoKBgYGAgICAgICAgIGBgYCAfnx8fHx8fHx8fHx9fX18fHaIi4uLi4uLgX19fX19fYSMi4uLi454KSkqKiopKz0/Pj4+Pj5tgH5+f397pdfT09PT1r2GiYmJiYiNsbW0tLSzs7u+vr6+vsGhioyMjIyNiX5/f39/f359fHx8fHx8fHx8fHx8fHx8fHx7fHx8fHx8fHx8fHt7e3t7hIuHh4aHgoGDg4GCgoKCgoKCgoKCgoGBgYCAgICAgICAgYCBgIB+fHx8fHx8fHx9fXx8fH19doyQj4+Pj5CDfn9/f39+hpCPj4+Pk3kZGhoaGhocMTMzMzMzMmqCf4CAgHut6eTk5OToyomMjIyMi5G7wL/AwL+/yczMzMzMz6qNkJCQkJKLf39/f39/f319fXx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx7e3uCjYeIh4eDgoSDgYKCgoKCgoOCgoKCgYGBgICAgICAgICAgICAgH58fHx8fHx8fXx8fH19fX12eHh4eHh4eHd3d3d3d3d4eXl5enp6d29wcHBwcHBycnJycnJyd3p5eXp6en6Dg4ODg4SBfHx8fHx8fYCBgYGBgICBgoODg4ODf3x8fH19fX18fX19fX19fX19fX18fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx7e4CMhomHh4SDhIKCgoKCgYKCg4KCgoGBgYGBgYCAf4CAgICAgICAfnx8fHx8fHx8fX19fX19fXZ2dnV1dXl2dnZ6e3h7eHd2eHt3enl6fnx5eXh4eHh5eXl5enp5eXl5enp6eXh4eXl5eXl7e3t7e3t7enp6enp5enl5eXl6enp7fHt7fHx7fHx8fHx9fX19fX19fX18fH19fX18fHx8fHx8fHx8fHx8fHx8fHx8fHx8f4uHi4qIhIODgoKCg4KBgoKDgoKCgYGBgYGAgIGAf4CAgH+AgYF+fX18fHx8fHx9fX19fX19d3d3dnZ3fXh3d316eH14d3d5fHp8e3l8e3h3d3d3eHh4eHh5eXl5eXp6ent7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7fHx8fHx8fHx8fHx8fHx9fX19fX19fX19fX19fX19fX19fHx8fHx8fHx7e3x8fHx8fHx8fHx+iomMjImFg4SEgoKDgoGCgoKCgoKBgYGBgYCAgICAgICAf4CAgH19fXx8fH19fX19fX19fX13d3d3d3p9eHt4fHx3e3h3d3d8e3l7eHx6eHh4eHh4eHh4eHh5eXl6enp6e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3x8fHx8fHx8fHx8fHx8fHx8fX19fXx9fX19fX19fX19fX19fHx8fHx8fHt7fHx8fHx8fHx8fH2Kio2NioWDg4OCgoKCgYGCgoKBgoGBgYKBgIGBgICAgIB/gIGAfXx9fX18fX19fX19fX19fXd3d3d3fX55d3d4e3p8eXd3d3p7eXt3fHl4eHh4eHh4eHh4eXl5enp6ent7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3x8fHt8fHx8fHx8fHx8fHx8fH19fX18fH18fH18fHx8fX19fX18fHx8fHx8fHx8fHx8fHx8fHx8foqJjo2JhISEg4KDgoKBgYKBgoKCgYGBgoGAgYKAgICAgH+BgIB8fH19fX18fX19fX19fn5+d3d3d3d5fHl7eHx9eXt5enp6fXt5fHh8eHh4eHh4eHh4eXl5eXp6enp7e3t7e3t7e3t7e3t7e3t7e3t7e3x8fHt7fHx7fHx8fHx8fHx8fXx8fX19fX19fXx8fHx8fHx8fXx9fX19fXx8fHx8fHx8fHx8fHx8fHx8fHx/iIeNioeFhoaDg4ODgoGBgoGCgoGBgYGCgYCAgoF/gICAf4CAgHx8fX19fX19fX19fX5+fn53d3d3d3Z4eHl3eXp4enh5eXl7eHl5eXl4eHh5eXh4eHh5eXl5enp7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t8fHx8fHx8fHx9fX19fX19fX19fX19fX18fH18fH19fX19fH19fX19fHx8fHx8fHx8fHx8fX+HiIyIhoeHhIKDhISCgYKBgYKCgoGBgYKBgIGBgYGAgIB/gIGAfHx9fX19fX19fX1+fn5+fnd3d3d3d3d3d3d3eHh4eHh4eHh4eHl5eXl5eXl5eXl5eXl6enp6ent7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7fHx8fHx8fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fHx8fHx8fX19fHx8gIeIi4eHiYaDg4SDg4KBgYGCgoGBgYKCgYGBgIGBgYCAgICBgX97fH19fX19fX19fn5+fn5+d3d3d3d3d3d4eHd4dnl5eHh4eHh5eXl5eXl5eXl5eXl5enp6enp6e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7fHx7fHx8fHx8fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fHx8fH19fXx9fXyBhoqKiYmIhIOFhISCgoGBgYGCgYGCgoGBgYCAgYGAgIGAgIGBf3x8fX19fX1+fn5+fn5+f394eHd4eHh4eHZxZGpeam15eXl4eHl5eXl5eXl5enp6enp6enp6enp7e3t8e3x8fHt7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3x8fHx9fHx8fH19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fIGFiYqJioeEhYWEg4KCgYGBgoKBgYKBgYGBgYCBgYCAgYCBgIF+fH1+fn5+fn5+fn5+fn9/f3h4eHh4eHh5bWRiZV9fXm95eXl5eXl5eXl5eXp6enp6enp6enp6e3t7e3t7fHx8fHx8fHt7e3t7e3t7e3t7e3t7e3t7e3t7e3t7fHx8fHx9fHx8fH19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18goWKiomJhISGhYSDg4KBgYKCgoGBgoGBgYKBgIGBgICAgICBgH58fX5+fn5+fn5+fn9/f39/eHh4eHh4eW5kZWdlZGJeZnh5eXl5enp6enp6enp6enp6enp6e3t7e3t7e3x8fHx8fHt8fHt7e3t7e3t7e3t7e3t7e3t7e3t7fHx8fHx8fHx8fHx9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXyChouJiIqEhYaEg4OEgoGBgYGCgYKCgYGBgYCAgYGBgIB/gIGBf3x8fn5+fn5+fn9/f39/f394eHh4eHl3Z2VkZWZkZWFfaXl6enp6enp6enp6enp6ent7e3t7e3t7e3t7e3t8fHx7e3t7e3t7e3t7e3t7e3t7e3t7e3t7fHt8fHx8fHx8fHx9fX19fX19fX19fX19fXx9fX19fX19fX19fX19fX19fX19fX19fX19fIKGi4eJh4SEhoSDg4WBgYGBgYKCgYGBgYKBgICAgYGAgYCAgYF+fHx/f35/f39/f39/f39/gHl5eXl5eWtlYWJlZWFlZV5ieHdze3p6enp6enp6enp6e3t7e3t7e3t7e3t7fHt7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t8fHx8fHx8fH18fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19g4aLhoiFhYaEgoOEhIKBgYGBgoKBgYKBgYGAgYGBgYGAgIGBgn98fH9/f39/f39/f3+AgICAeXl5eXl0Y2NlZGNmY2doZGZsZF5ze3p6enp6enp6enp6ent7e3t7e3t8fHx7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3x8fHx8fHx8fH19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX1+fn6DhouGhoaGhYODg4SDgYGBgYGCgoGBgYKBgYCAgYGBgYCAgYGBfnx8f39/f39/gICAgICAgIB5eXl6d2RhY2diYmRdW2VfYV1eYGFoeHp6enp6enp6enp6e3t7e3t7fHx8e3x7e3t7e3t7e3t7e3t7e3t7e3t7e3t8fHx8fHx8fHx8fH19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX1+fn5+fn5+foSFi4eGhoaGhIODg4KBgYGBgoKCgYKBgoGAgIGBgYGAgYGBgYF+fX1/gH+AgICAgICAgICAgHl5eW9vYmJiZF5jZ19dYWFgXF9kYlttfHp6enp6enp6enp7e3t7fHx8e3t7e3t7e3t7e3t7e3t7e3t7fHx7e3x7fHx8fHx8fHx8fH19fH19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX5+fn5+fn5+fn5/hIiLhoSHhoaEhIODgoGBgYGCgYGBgYKCgYCAgYGBgYGBgYGBgX5+fYCAgICAgICAgICAgICBeXpwXWJlZGJkXmZnZ2BZYmJhY2VfXF1ze3t6enp7e3t7e3t8fHx8fHx8fHt7e3t7e3t7e3t7e3t7fHx8fHx8e3x8fHx8fHx8fHx8fHx9fX19fX19fX19fX19fX19fX19fX19fX19fX19fn19fn5+fn5+fn5+fn5+foCFjIqEhYaGhYODg4SCgYGBgYKBgYGBgoKCgYCBgYGCgICAgIGBf35+gICAgICAgICAgIGBgYF5emxiZGdjYmdmYWBgZGFiZWRjZGNeXGJ1fHt7e3t7e3t7e3x8fHx7e3x8fHx7e3t7e3t7e3t7e3x8fHx8fHx8fHx8fHx8fHx8fHx8fH19fX19fX19fX19fX19fX19fX19fX19fX1+fn5+fn5+fn5+fn5+fn5+fn9/gYeMiYWGhoeFg4SDg4GBgYGBgYKBgoKCg4KBgIGBgYKBgYGCgoF/f36AgICAgICAgIGBgYGBgXp7dGdnZmZkZGZmYF5fYWNlaGRlXmJkYHR8e3t7e3t7fHx8fHx8fHx8fHt7fHt8fHt7e3t7fHx8fHx8fHx8fHx8fHx8fHx8fHx8fH19fH19fX19fX19fX19fX19fX19fX19fX19fX5+fn5+fn5+fn5+fn9/f39/f3+CiYqIhoaIhoWDhIOCgYGBgYGBgoGBgoKCgoGAgYGBgoKBgYKCgX9/f4GBgYGAgYGBgYGBgYGBenptaGNjZ2ZnZWdmZmdiZWRlYmdbYmVgdnx8e3t8fHx8fHx8fHx8e3t8fHx8e3x8fHt7fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx9fXx9fX19fX19fX19fX19fX19fX19fX19fn5+fn5+fn5+fn5+f39/f39/f39/f4SJioiGiYeFhYSEg4KBgYGBgYGCgYKCgYGBgYGBgYKBgoGBgICBgH9/gYGBgYGBgYGBgYGBgYF7emlpZGNqZmFgZmVjY2NnaWRjYmBiZGJ0fXx8fHx8fHt8fHx8fHx8e3x8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fH19fX19fX19fX19fn5+fn5+fn5+fn5+fn5+fn5/f39+fn9/f39/f39/f3+AhIqMiIeJhoSFhYOCgYGBgYGBgYKBgoGBgYGBgYGBgoKBgYGBgYGAgH+BgYGBgYGBgYGBgYGBgXZzZWRnY2RmZWJlZmdkZmhmZWNgYGNkYHF9fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fXx8fX18fHx9fX19fX19fX19fX19fn5+fn5+fn5+fn5+fn5/fn5+f35+f39/f39/f3+AgICFioyJiIqJhoaDgoKCgYGBgYGBgoGBgoGBgYGBgIGBgYGBgYGCgX+Af35/foCCgoKCgoKCgoKCc3NnZWRkZWlqaGZnZ2NhZmZlZmdmZWVjdX18fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fX19fX19fH19fX19fX1+fn5+fn5+fn5+fn5+fn5+fn5+f39/f39/f39/f39/gICAgICAgIWLioqJioeHhoSCgoGBgYGBgYKCgYKBgYGBgIGBgoKBgYGBgYGAf4B+dHRzdX1/goCAfn5/gYB0cmdkZWNmaWppZWNlY2BmZGRnZ2JiZWFwfXx8fHx8fHx8fHx8fHx8fHx9fX18fHx8fHx8fHx8fHx8fHx9fX19fX19fX19fX19fX19fX19fX1+fn5+fn5+fn5+fn5+fn9/f39/f39/f39/f39/f39/f4CAgICAgIB/houLiouLh4eHhIOCgYGBgYGBgYKBgoKBgYGBgYKCgYCBgYGBgoCAgH5zc3NzdHV4dXV0dHV2dXVwZmNmZWhoaWdoZ2VmZWJfZGVmY2BiZ3d8fHx8fX19fX18fHx8fH19fX19fX19fXx9fXx8fX19fX19fX19fX19fX19fX19fX19fX19fn5+fn5+fn5+fn5+fn5+fn5+f39/f39/f39/f39/gIB/f3+AgICAgICAgICHjIyIi4qHh4eEhIKBgYGBgYGBgoGCgoGBgICBgoGBgYKBgoKCgYCAfnNzc3Nzc3NzdHR0dHNzdW9jY2FnZWhoZ2pmZGVnZmhmY2JlYl5ieX18e3t8fX19fX18fHx9fX19fX19e3x9fX19fX19fX19fX19fX19fX19fX5+fn5+fn5+fn5+fn5+fn9/fn5+fn5+fn5/f39/f4CAgH9/gICBgICAgICAgYCAf4CAgYGAgIeLi4iNiYiJhoSFgYGBgYGBgYKCgYKCgYGBgIGCgoGBgYKBgoKBgIB+dHNzc3Nzc3Nzc3Nzc3N1cmdlZWRlamhoZ2ZpaGdjZWViZGNoZGd7eHVzc3R2dnl4dnR0dHZ3d3d2dHR0dXV4d3h4d3d6e3x9fXx9fn5+fn5+fn5+fn5+fn5+fn5+fn5/f39/f39/f35/f39/gH9+fHt7fX58eXl2dnZ5fHx6end2d3l7fXt4hIyMioyHh4iEhYSBgYGBgYGBgoGBgoGBgYGAgYKCgYGBgoGBgoGAgH51c3Nzc3Nzc3Nzc3Nzc3VzaGVnaGVrbGhqZ2lqZ2dnZmRkYmVkbnV0dHNzdHNzc3Nzc3Nzc3Nzc3NzdHNzc3Nzc3Nzc3N0dHV1c3V3eHl7fn59fn98f39/f39/f39/f314fH5+fXx4dXZ3eXd4dnRzc3N0dXRzc3Nzc3NzdHNzc3R0c3R0dHODjI2KiYeIhoOGg4GBgYGBgYGBgYGCgYGAgYGDgoKBgYCBgYGBgICAf3VzdHRzc3Nzc3Nyc3NzdnZpY2hqaGpsZWZpbGhgZmVkY2BkZGZ0dXV1dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHRzdHRzc3Nzc3R2dnV1d3V4fH9+fX9+fHp4dXN0dXV1dHNzc3Nzc3N0dHR0dHR0dHR1dXR0dHV1dHR1dXR1dXV1dIaMjYuIhoeEhIWCgYGBgYGBgYGCgoGAgYCBgYKCgoGBgIGBgYGAgIB/dnNzc3Nzc3Nzc3Nzc3N2dnNnZ2pmaGdmaGhmZGlnY2NnZWVmcHZ1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dHR1dHR0dHR0dHRzdHR0dnV1d3Z0c3R0dHR0dHR0dXV1dXV0dXV1dXV1dXV0dHNzc3N0dHNzdHR0dHR1dXR1iY6MjIqHh4SEhYKBgYGBgYGBgYKCgoGBgICAgoKCgoGBgYGBgYCAgH93c3Nzc3NycnJyc3NzcnZ2dW5kXWNnZWlraGVoZ2dqamlnZXB2dXV1dXV0dHRzdHR0dHR0dHV1dXV1dXV0dHV1dHR1dXV1dXV1dXV1dXR0dHV1dXV1dXV0dHV0dHV1dXV1dXV1dXV1dXV1dXV1dXV0dHNzc3Nzc3N0dHNzc3Nzc3R0dHR0dHWKjoyMiYaGhIeFgoGBgYGBgYGBgoKBgYGAgYGCgYKBgYGBgYKBgYCAf3hzc3Nzc3JycnJyc3NzdnZ3d2liaGhnamtpaGZkZGVmaWhwdXR0dHRzc3JxcnJ0dXV0dHR0dHR0c3NycnFxcXNzdHR0dHR0dHR0dHV0cnJyc3R0dHR0dXV1dXV1dXR0dXR0dHR0dHR0dHR0dHR0c3Nzc3Nzc3Nzc3Nzc3N0dHN0dHR0dHR0dYuOjImGhYWFh4SCgYGBgYGBgYGBgoKCgYGAgIKCgoGBgYGBgYGBgIB/eXNzc3NycXJycnJzc3N3d3d3bGpoZGhpa3Z6a2VmZWhnbXJzdHN0c3JwcHBxcnN0dXR0c3NycnNycXBvb29vcHFzc3NycnJyc3R0dHNxcHFyc3R0dHR0dHRzc3Rzc3NzdHR0dHRzdHR0dHR0dHRzdHR0c3NycnFxcnJzc3Nyc3NzdHR0dHN2jZCMh4eFhYSEgoGCgoGBgYGBgYGCgoKBgYGAgYGCgoGBgoKBgYGAf395c3NycnFxcnJycnNzc3d3d3dzc2pnaWloeX99cW51bG5wcXJycnFxcG9wcXFxc3Rzc3NycXFwcG5ubm1tbW5ubnBxcnJycnJycnJzcXBvb3BxcnJzc3JxcnJycnJycnJycnJzc3Jzc3Nzc3Nzc3Nzc3Jxb29ubm9vcXJzc3Jyc3NycnNzcnaPj4uHhoWFhYOCgoKBgYGBgYGBgYGBgoGBgYGCgoKBgoGCgYGCgX9/f3hxcHBwcXFycnJyc3Nzd3d2dnd2cnF0c252f352c3hwcHBycnJycXFwcHFxcXFyc3Nzc3FwcXBvb25ubm5ub25vcHBxcXFxcXBwcXJwb25vcHFxcXFxcHBxcXFxcXJycnJycnJycnFxcnFxcnJycnFwb29ubm1ubW5vcXJycnJycnJyc3JxeI+OjYaDg4aEgoOCgoGCgYGBgYKBgYGCgYGBgYKCgoKCgoKBgYKBf4B/d29wb3BxcnJyc3Nzc3J2dnZ2dnZ3dnZ1c3l/fnd3d29wcXFxcXFxcHBwcXJxcnJzc3JycXBwb29wb29vb29vb29wb3Bvb29vcHBxb29vcHBwcHBvcG9wcHFycXFxcnJycnFxcXFxcXFxcHBwcHBxb29ubm5tbW5tbm9wcXFxcXFxcXFxcXB7j42NhoODhYOCgoKCgYKBgYGBgoGCgYGCgoGBg4KBg4KBgYGAgYF/f392bm9wcHBxcXFxcXBwcHZ2dnZ2dXR0c3NxfYB9fX9zb3BxcXFwcHBwcXFwcHBxcnJxcXFwb3Bvb3Bwb29wcG9vb29vb29vb3BxcXBub3Bwb29wb29wcnJycnFxcXBxcnFwcXFxcHBwcHBwcHBwb29ubm1ubm5ubm9ub3BwcHFxcXFxcXFxcIKRjoqEhIOFhIOCgoGBgoKBgYKBgYGBgYGCgoKCgoKCgYGBgYCBgX9/gHVvb29wcXFxcXBwcHBwdnZ2dXRzcnJycnGAgoCBeXBwcHBvcHBwcHFxcXFwcXFxcXFxcG9vcHBwcHBwb3BxcHBvb29wb29vcXFwcG9wcG9vb25vcHFxcHBwb3Bvb3BwcHBwcHBwcHBvb29vb29vbm5tbW1ubm5ub25vb3BvcHBwcHBwcHBwiZCMiISDhIaDg4KCgYGCgoKCgYGBgYCAgYGBgoKBgYGBgYGBgIGBgH+AdG5vb3BxcXFwcG9vcG92dnVzcnFxcXFxcICDg39ycHBwcHBwcHBwcHFxcHBxcXFxcXBwcHBwcHBwcHFwcHBwcHBwcHBvcHBxcXBwcHFxb29vbm9wcHBvb29vcHBvb3BwcHBwcHBwcHBvb29vbm5ubm5ubW5ubm1ubm9wcG9vb29vb3BzcXWPj4yJg4KFh4ODgoKBgoGCgoKBgYKBgYGBgYGBgYGBgYCAgYGAgYGAf4B0b29vbm9vb29vb29vb3Z1dHNxcXFxcXJygIKCgXRxcXFxcXFxcXFxcXFxcXFxcXBxcXFxcHFwcXBxcXFwcHBwcHFxcXBxcHBwcXBwcHBwcHBwcHBwcHBwcHFxcXBxcHBwcHFwcHFxcHFxcXFxcXJxcnFwcnRycnR0dHR1dnRzdHR0dXd3gpCPi4iDgYaHhISCg4GBgYKCgoGBgoGBgYKBgYGBgYGAgICBgYCBgYB/gHVvb29vb29vb25vb29vdXRzcnJycnJycnKDg4OCdnFycnFxcXJxcnJxcXJycnFxcXFxcnFxcXJycXFycXFxcXFxcXFxcXFwcXFxcXFxcnNzcnJyc3V1dHR0dHR0dHV2d3d3d3d3eHh4eHd3eHh4d3Z3dnV2dnZ2d3h6e3x7e3t6enp6enyGkI2LiIODiIeHhYODgoGCgYKBgYGBgYKCgoGBgYGAgYCAgYGAgIGBgH+Ad3FxcXFxcG5ucG9wcG92dHV1c3Nzc3NzdYiDgoN5cnNzcnJyc3Jyc3NycnJycnN0cnJzcnNzc3Nzc3Nyc3N0dHV1dXV1dHV3eHd3d3d4eHh3eHh4eXl5eXl4eHl5eXp6e3t7e3t6enp5eXh3d3d1dnV2dnd5enp7fn5+fX1+fn5/gH5+gIyQi4qHg4WIi4iEg4SDgYGCgYGBgoGBgoKCgoKAgYGBgYCBgYGAgIGAf4B8enp5eXx5eHh2dXZ2dHl2d3h3d3Z3dnZ6f3x+fnx2dnd3dnV4enh4eHh3d3d2eHx5eXx6eXl8e3l5eXh4eXl6enl5eXh4enp5eXh4eHh3dnd3eHh3eHh5eXp7e3p8fH1+fX9/f359e3t7e3p5enl5e3t/foB/fn5/fn19fX5+f35+fn6AjpCNioeEhoqLiIaGhIOBgoKBgYGCgYGCgoKCgoCBgoKBgYGCgYCBgIF/f4B/fn19fX9/f318e3t7eXh4eHh5eXl4eXh5eXl4enp6enp6e3t7fH1+fHt7ent8e318e3t7e3t7enl4eXh4ent6enp5eXp8fHt6enx8fHp6ent9fHx+fn+AgoGAgYKAgH9/gYGBgIB/f35+fn5/fX1+f4CAf35+f39+fn9/f39/gH+Af4OQjoyHhoWIi4yIh4aFg4GCgYGBgYKBgoKCgoKBgYKDgoGBgYGBgIGBgIB/goOCgoGBgX99f39/f4F6enh4d3h4eHh5eHh5enp5e358enx+fXt8fX19fHx8fnx9fn5+fn59fX9/f3x8fYGDgYCAf318fXx9fXt9fXx8fH19fX1+gYGChISDgoB/gYGBgH9/f4B/f39/f39+fn9/f39/f35+f3+Af39/gICAf4CAgICAhJCPi4eGhoiLi4mKhoaDgoKCgYGBgoGCgYKBgYGBgoOCgYCAgYGAgIGBgH+ChIKCgICAgH9+fn+AgH9/fn18fX19fYB/fX+Af35/gH9/fn+AgICBgICAf3+BgICAf4CBgn9/f4CAf35+f39+f39/fn5+f39/gYB/f4CBgYCAgYOEgoGCgoGCgH+AgYCBgYGAgH+BgICAf39/gICAgYGBgIGBgYCAgICBgoGBgYCAgYGFjo6MiYaHiYyLi4qGhoOCgoKBgYGCgoOCgoKBgIGBgYKCgICBgYCAgYGAf4KFg4KBgYCAf39+fn+AfX5+fn19fX5/fn9/f35+fn+AgYCAgICAfn9/fn+AgH+AgH9/f35/f39+fn59fn9+fn9/f35/gIGBgoKDgoKCg4KBgYKDg4OCgYGBgYKBgoKCgYKBgoGBgYGBgoKCgYGCgYKCgoGBgoKBgYKCgoKCgYGBgoKCgoaPkY+KiImKjY6MiYaFgoKCgoKBgYKCg4KCgoGBgYGBgYF/gIGBgYCBgIF/gYWEg4KCgoGCgYCAgIB8fHx7fH18fH9+fn9+fn5+f35+f39/f39/f35+foB+fn5+fX9/fn9+f39+fn5/gIB/gIB/f39/f3+BgYGCgoCAgYKDg4SDg4ODgoKCgoKCgoKCgoKCgoGCgoKDg4OCg4ODgoKCgYKCgoODg4ODgoKCgoODg4KCh5KSkIuKi4uPj42Lh4SCgoKCgYGBgoKDgoKBgYGBgIGBgICAgYGBgIGAgYCAg4SDg4OEg4ODgoKCgXx9fHx9gn1+f4GCiIGCgoSCgYGDg4GBgYKDgYKBgYCAf39/gICAf3+AgX9/f39/gYCAgICAgH9/f3+AgICAgH9/gYODhYSEg4SDgoKCg4OCgoOCgoODg4ODg4SDg4KEhYWDg4SEgoKDhIOCg4ODg4OCgoODgoCKlJOPioqMjpCPjYuGg4KCgoKBgYGBgoOCgYGBgIGBgoGBgICBgYGAgYCAgH+BgoODg4SEhIOCgoKCfXx8fn6AgYOAg4OChIaFhoaFhIWFg4ODg4SBgYKEhIKDgoeDgoKAgoGBgoKCg4KCg4KDgoODgoGAgIKCgYOCgYKCg4OEhYWEg4OChISEhIOEhISDg4OEg4ODg4OEg4SDhIWEhISDg4ODgoKCgoKCgoKBgYKCgo+UlI+Njo6RkY6KiISCgoKCgYGBgYGCg4GBgIGBgYGBgYCBgIGBgYCBgICAgIKChIKChIOCg4ODgoJ9fX2AgH+AgoGDg4ODhIaEhIOEhYWDg4GBg4OBgIGDgYKEhYWFhoaHhoWGhoeHh4aGhoeHhoWEgoGCg4SDg4ODg4ODhISFhYWDhYSFhISEg4KBg4OCg4SEg4KCg4SCg4ODg4OCgoKCgoKCg4OEhIOFhYWFhoaIk5OTkI+Pj5KRjIqIgoKCgoKBgYGBgYKDgoKBgIGBgYGBgICAgYGBgICAgICAhISEgoKCgoGBgoKBgX+AgYOCgICAf4CCgoGDg4KCgYODg4SDg4KDhYSCgYGBgoSFh4eHh4aGh4eHiIiHh4eIiIiFhIOBgIGBgoKCg4GCg4SEhYSDg4OEg4OEhIOBgYGCg4OEhISDg4ODg4OEhIODgoSDg4ODhIWFhoeHh4eIiIiJiY6TkpKOj46Qko+LiYeCgoKCgoKBgYGBgoKCgoGBgIGBgYGAgICAgYGAgIGAgICDg4KCgYKCgYGAf4CBhYWFhoOCgYB+fn+BgoSCgYKDhIOCg4ODg4KChIODg4OBg4SFhISFhYSDgoSFhYKEhIWFg4KBgH9/gIB/gIGEg4OEhYWEgoKCgoOCg4OFhIKDhISEhYaGhoaGhoWFhoeHhYaIh4aHiIeGhoaIiYeGhYaGhoeIkZKSkI6QjpCRjImHhYGBgoKCgoGBgYGBgoOBgYGBgYGBgICAgICBgYCAgICAgISEg4KBgoGAgYGAgYKIh4aHhYSCgH99fX6AgH+AgYGBgYGBgoGAgYaNgoKCgoKBgYGCgYKCg4GBgICAf4GAgH+AgH9/gIGBgYKCg4OEg4OEg4OCgoGBgoODg4SEg4SEhIOFhYaFh4eIh4eHh4eHh4eGhoaGh4WFhYaGhISEhIWEhYaSk5GOjo+OkI6JiIeEgoKCgoKCgoGBgIGCgoKCgoKCgYGBgYGAgYGBgICAgYGAgoSDg4KDgoGCgYKDg4iHh4iHhYSCgX5+gICAfn5/f4CBgoGCgoGCj5uFgH+AgIB+gIKBgIGCg4OAf39/gICAf4CAgYCCg4KDg4ODgoOBgYKCgoOCgYKCgoOCgoSDhISDg4SEhYWFhYaGhoaFhISEhYWEhIWFhYSEhISDhISEhISEipSTkZCQj46NiIaFhIOBgYKCgoKCgYGAgYKCgoKBgoKBgYCBgYCBgYGAgICAgYGAgoOCgoOCgoKBgoOCiImJiYiHhYSDgYKEhIOBgoKCg4SCgYB/f4WWm4iEgoSCgX+AgoGCgoGChIKBgYGBgoOCgoKDg4SDg4SEg4OCg4KDg4ODg4KCgoKCgoGDhISEhYSFhYWFhIWEhIWFhYWDg4OEhISEhYWFhISEhISEg4ODg4OOlZKRkZGOjYyHhYSDg4GBgoKCgoKBgYCBgoOCgYCCgYGBgICAgIGBgYCAgICBgICDhYSEhIODg4SDhIOGh4mIhoWDhIODhISDgYCCg4qIhoB9fX17f5eciYOFhISEgoGAgYKDgoKEhIOCgoGBhIWEg4ODgoKDhISDg4ODg4SFhISDg4KCgoKCgoSEhYSFhYWFhYODhYWFhYaFhoWEhIWEhYWGhYWEhIWEhISDhIODhJGUk5KSj4yMioWEhIODgYKCg4KCgoKBgYGCg4KBgYKBgYGBgICBgIGBgH+AgIGAgIaGhoaGhoaHh4aGhYSDhYaCgIGBgYGHgoB+f4CGmZCGfX5+fod+jZyFgYKAgYKCgYCCgoKCgoKDg4KCgYKDhYODg4ODg4OEgoKEhIOEhIWEg4OCgoKCgYKCg4ODg4SFhYWFhIOEhYWGhYWEhISEhIOEhIWFhIWFhIODg4OEg4KGlJSSlJKPjYuHhISDg4KBgoODgoKDg4GBgoKBgoKCgYGCgYGBgYCAgYGAgICAgICAhYWFhYaGh4aGhoWGg4ODg4GAgoKCgYKAfn5/foaenYaAiYB/h4GAjIKBg4GAgIGChIOBgYKBgYKBgYKDgoODgoOCgoKCg4OBg4SDg4ODg4OEhIKCgoKDgoKDg4ODhIWEhISEg4OEhIODg4OEhIODg4ODg4SDg4ODg4KCg4KDgouUk5KTkY2NioaDg4OEgoGCg4ODg4ODgoGBgoGCgoKCgoKBgYGBgICBgYCAf4CAgICDhISFhYSFhYWEhIWCg4KDgoKDg4OBgICAgICAg5qhiIWJg4OBgH2BhIOEg4ODg4KAgICCgoODgoKDg4ODgoODhIKCgoODgoKDg4KCg4KDg4WEg4ODg4SDg4SEhISEhYWEhIWEg4SEhIOEhISEhISEg4SEhYSDg4SEhIODgoKDkJSSkpKPi4yIhoSFg4OBgYKDg4ODg4OCgYGCgoKCgoKDgoCBgoGAgICAgIB/gICAgISDhYWEhYWFhYSFhYOEhIWDg4SEhIKCgoOCgoSBkJ2EgoKEh35+fX2EhYWEhYR/fX19f4KEg4ODg4OEg4ODhISEg4OEhISEg4SEhIOEg4OFhoWFhYSFhYWFhYSFhoWGhoWFhYWFhYWFhYWGhoWGhoaFhoaGh4aFhYWFg4SEhIeTk5KRkoyKiIWFhYWCgoGBgoODg4OCg4KBgYKDg4ODgoKBgIGAgICAgICAgH+AgICAhYWFhYWGh4eGhYWFhISFhYSEhISEg4ODg4OEhYOGjIKAf4CFgH19e4KHhoOAf35+fn9/f4OEg4OEhISEhISEhISEhISFhYWEhYSGhYWGhYaGhoWGhYWHhYWGhYaGhoaFhIWFhYWFhIWGhoaHhoaGhoaHh4iIiIaFhYaEhYWGjZSTkpGQi4qHhoeGhIGCgYKDg4ODg4KDgoGBgoODg4KAgYGBgICAgICAgICAf4CAgICHh4eGhoeHiIeHhoaEg4ODhIODg4OEg4ODg4OEhIODgoB/hI2Ef319gIaBf3+AgH9/f35/gISFhIWGhoaFhYWFhoaHhoaFhoWFhoeHh4iHh4eGhoaHh4eGhoaGh4aGhYSDhIWFhoSFhYaGhoeHhoaGhoeHh4eIiIeGhoaHh4eRk5KQkZCLiIiFhoSDgoKBgoODg4ODgoKDgoKCgoOCgYCBgICBgICAgIGAgIB/gICAf4aHiIeHh4eIiYmIiIODgoKDgoSEhIWEg4KCg4SEhIOAgIGFhIODgX+AgH9/f4CAgIB/f4B/f4WFhoeIiIeHh4eIh4iHiIiIhoaHiIiJiYmIh4aHh4eJiIaHhoeHhoaFhIOEhYaFhYWFhoaGh4eFhoeGh4aGh4eHh4eHh4eFh5OTkY+RkIuHhoWGhIKCgYGCg4ODg4ODgoKCgoGCg4KCgIGBgYCAgICAgICAf3+AgYB/hoiIiIiHh4iJiYmIg4KCg4ODhIWHh4aFg4OFhISDgX+Ag4WDgYKCgoKCgYGBgYB/gH9/fnt6gIaIiIqKiYmIiImJiYmKi4qIiIiJiYuLioqIiIeIiIiHh4iIh4iGh4aEg4OFh4eHhoWFhISDhYWEhYWGhISEhYWFhoWGhYOJlJOQj5GOioaFhoWDgYGBgYKDg4ODgoKCgoKCgoKCgYGBgYGBgYCAgICAgIB/gICBgH+GiYiIiYeIiImJiIiEgoKDg4KDhImKh4aEhIWEg4ODgoOEhISCgoKCgoKCgH9+fH19fX9+fHt8g4eJi4uKioqIiIqJiImLiomJiImIioqJi4mHhoaGh4WGiIiJiIeGh4SDgoSIiIiIh4WCgoGDg4KDg4SCgoKDgoGEg4SDgY6TkpCPj4uIhYSGhIKBgYGBgoODg4OCgoKCgoKCgoGBgYGBgIGAgICAgICAgH+AgIGAf4WIh4eHhoeIiIiHh4SCg4OCgoOFiYqJh4WHhYSFhIODhYODhIOCgoKDgX59fX5+fn5+fXx+fX19g4eJioqHh4WGh4eHh4iHh4mHiIaIh4aJiIODhIOFhISFhYaIh4aFg4KCg4WHhoeGhoOCgoOEgoODhYKBgYGBgYODhIOEkZKRjo+Oi4eEhoaEgoGAgYGDg4ODg4KCgoKCgoKCgYGBgIGBgYCAgIB/gIGAf39/gIB/hYaGhYaGhoeHiIeGgYKEhIOChYeIi4qGhIaEgoaFgIKEg4ODg4OCgoF9fH1/gH9+fn59fH19fHp8hIaHhoSDgYODhIWFhYODhYSEhISEhIWEgoKDgoSEgYKDg4WGhYSCgYGCgoODhYOEhIWEhIaDg4SFg4KDgYKDg4SFhIeSkY+NkIyJhoSFhIWCgYCBgYODg4ODgoKCgoKCgoKBgYGBgYGAgICAf4CAgYB/gICAgICDhIWEhYWFh4eHh4aAgYGFg4OEhYSHiIWCgIB/gYCAgYODg4ODgoJ/fX1/gICBf31+fn18fX16enp+g4SEgoGBgIGBgoKBf36BgYGCgYOAgoGCgoKBg4SAf4CAgYOCgICAgICBgYGCgYGChIODhYSCg4SDgoKBgoSDhYWGi5ORjo+Pi4iFhYOChIGBgYGBgoODg4KCgoKCgoKCgoGBgYCBgYCBgH9/gIGBgICAgH+AgIKCg4OChIOEhYWGhn+BfoCBgICAgIGDgn9+fn5+foCCg4OCg4ODgn19fn6AgIGAfn19fX1+fXx6enp/goKAf39/f35/f4B+fYB/f4CAgX+AgIF/f4CBgX59fX+AgX9/foCAgH+AgICAf4CCgICCgYGCgYGAgYGBgYKEg4aPkpCOj42Kh4eGg4OCgYGBgYGCg4ODgoKCgoKCgoOCgYGCgYGBgICAgH+AgICAgICAf39/gYKDhIGCgoOCg4SFgIB/fH19fn1+foCAf31/fn1+gIODg4KCgYF/fX1+f4CAgH9+fX19fHt7e3p6enqAgH9+f35+fn1+f35/gH9+f3+Af4GAf359fn9/fn18fn+Af35+f3+Af39/f4B/f4B+f4CBf4B+f39/gH9/f4B/hZKSj46Pi4uHiYWEg4KBgYGBgYKDg4ODg4OCgoKDg4KAgYKBgYGAgICAf3+AgIB/gIF/f36BgYSEgYKBg4OCg4OBgH98fn5/fX6Af4B/foF/f4CBhIOCgYB/f359fn5/gICAfn19fXx7e3x6enl5eXt/f35/f39+fX5/foCAf35/f4CAgoB/fH5+f35+fXx/f4B/fn9/f4B/f35/foCAf36Af39+fn5/f35+f318fH2Fk5KOjIuKiImIhISEgoKCgYGBgoOCgoODgoODg4ODgYCBgYGBgYCAf39/f4CAgICAgIB/foCBhIOCgYGDhISDhICBgICBgIGAgYKCgoGBgoCBg4ODgYGBgYCAfX19fn5+f359fX19fXx8fHt6enl5eX2Af4CBgYF/f4B/f4F/gICAgYGCgoB+gH5/fn5+foGAgoF/f39/gIB/f4B/gYB+f3+Afn9/fn+Af31+fX17fIaTkYyLioeHioiGhoSDgoGBgYGCg4ODg4OCg4OCgoKBgICBgYGAgH9/f4B/gICAgICAgH9+fn+BgYGAgISGh4aHgoSDhYOBg4ODhYSEhISEg4ODhIKCgoKCgH5+fX19fn6AfX19fX19fX19e3p5eXl5eYCCgoKEg4CCg4F/gYCBgYGDgoKDgYGCgIGAf4CBg4GEgoCAgYCBgYCAgYCCgn+BgIF/gIB/gICAfn9/fn18ipOQiomIiIiJiIaGhoSCgoGBgoKDg4ODg4KDg4KCgYCAgICBgYGAf39/gICAgICAgIGBf359fn5/f39+g4aHh4iChYSFg4SFhIWGhYaGhoWGhYGBg4ODgoKAfX19fX19fn59fX19fX19fX18e3l5eXl4fIKDhIWCgYSDgoKDhYaCg4SDgYKCg4OCgoKCgYKFg4iFgoGBgYKDgYGBgYSDgoOCgoKCgIGBgIF/gIGAf36Ok4yHiIaIh4aGhYaGhIKDgoGCgoODg4ODg4OCgYGBgH+AgYCBgYB/f39/gICAgH+AgYB/fn19fX5+f36Ag4SHiISGhoaFhoaHh4aHh4iHh4eGf32BgIGCgX59fX19fX19fX19fX18fH5+fnx7eXh3eHl5gIKDf4ONhIOEhISXl4ODhIF9foGCgoGCgYKBg4aIjIWDgoKBhIKEg4KDhYSEhYOCg4OCg4OCgoKCg4OCgpKQi4iJh4mHhoaEhoWEhISCgYKCg4ODg4ODgoGBgYCAgICBgIGBgH9/fn+AgYCAf4CAgH9/fn1+fn+Bf4CCgYWFhYeGh4eGh4eIhoaHh4eGh4V/fX18fX9+fX19fX19fX19fX19fXx7iJKCe3x6fIZ5eHl8gYF+iZaEg4OEhJSTgIGBf39/fn6Fi4B/gICEhpCJhYSCgoGFhYuDgYOFhYaGhIOFhYOFhIODhIOEhISIko6MiYiIiYeHh4WGhYSFhIKBgoKDg4ODg4OCgYGBgYB/gIGAgICAf39/f4CAgICAgYGBf39/f4CAgIGBgYGBg4OGh4aGh4aGiIeGhoaFhIOFhH59fHx8fX18fH19fX19fX19fX18fH+RlZaDe3qElHx4eXp7fICCg4GBgIOCgH58fn57iJF8fI6Wf31/f4KGioWDg4SDgYONiX9+f4OEhYWDhYaFhIWFg4SFhYaEhI6Rj4yKioyJiImHhYWFg4OCgYGCgoKDhIODgoGBgICBgICAgYGAgIB/f3+AgIB/gICAgX5+f4GBgoKCgoODgoOCgoWGhISFhYSGhIOEg4KBgIKAfn19fHx9fXx8fH18fH18fX19fHx8e4uRl4x6e3yBenp6e3x5eX19foB/gH98e3t+fn2ClZF/hIh+fH5/goR8fIGChIKAf4eDfYKBf4KCgIODhISEhISChIOEhYKEkZGOi4yMjoqJiYWFhYODgoKBgoODgoKDg4KCgYGAgIGAgICAgICAgH+Af3+Af357gICBenyAgoKDhYODhIWFhYODg4SCgYKDgoOCgoGBgIB/gX5+fX59fHx8fHx8fHx8fHx8fHx9fHx8fn6Kgnt6e3p4ent7fH17fn1+f319fX18fICBgX2Gj4F+fYJ+fn6Agnx8f3+CgIKAfnx7ioJ9gH9+gYCAgYKBgoCBgYGAf4uTj4yLjY6NiIeHhYWEhIOCgoKCg4OCgoODgYGBgICAgICAgH9+fXx7fHx9f3+AgHx6gYF4e4CCgYOFhIOFhYaHhISAhpSIgIKBgYGBgH9/f39/fn5+gHx8fHx8fHx8fHx8fHx9fHx8fHx8fHl7e3t4eHl7enp8gX+Afn+BfH5+f399gIKCgICAgX+CkYF/f4CAfoB+fn9+gIGBfX19e319fX19fHx9gH+AgH6Afn6Bk5GMjI2OjoqFhoaFhISFg4OCgoODg4OCgoGBgYGAgICBgICAf4CAf39/fXt6fICAgHh+gXd7gIF/gYKCgoKEhoeGhn6IlYp+gIGAgIB/foB+f39/fn+Bfnx7e3x8fHx8fHx8fH59fHt8fHx8e3x8fHp6eXt8en2Fg4J/gYF+f35/gH6FgoF+gH9+foCFhoKAfn6Dhn9+fH6AgIGAf39+fX19fX57fH1/f3+AfX9+gIyRjoyNjo2Nh4SGhoWEhISDg4OCg4ODg4KBgYGBgYCBgYGAgYGBgYGAgH9/f397en9/e3mAd3p/f31+f3+Af4KDhoaFf3+FgX5/gIB/gH5+f31/gIB/gIB/f319fHx9fn18fH19fX19fH58fXx7fXx8ent6fH19f4aEgoCAgX1+fX5/fouEgYZ+fXx8f36CgX99fX19gXx7fXx+gYSDgYB+fn5+fX1/f399foB+fn6Eko2MjI+Ni4qGhIWEhISDg4OCgoKDgoOCgYGBgYGBgYGBgYB/fXx8fH1+f39/f397e399d352eH59fH18fX5+gYGCg4B6fX18fn+Af36Af35/fn+AgH+AgH9/fn9+fn5+fn1+fn99fH59fn19fHt8fHx6e3p9fn+Ag4OCf35/fH18fXx8gIN9jH58e3t9fn1+fn17e3t9fHp7e3uAhoSChIOCf4B+f4KCgn9/goJ/gIqPjIyLjYyLiISEhIODg4ODgoKCgoKCgoKBgYGAgoGBgYKCf3+AgIB/fn18fH5/fn55fX52e3Z4fXx8fHt9fX6BgICAf31/f31+f39/foB/f39+f3+AgIGBgH99gH9/fn9+fn5/f3yCfn59fX17e319fHp8fH6AgoGAgIB8fH18fHx8fH17fXt/fnt7e3x8fH18e3t7e3x8enp9en6CfoGDhIKBgoGFhoWFh4aHhoGEkY6Mi4qLh4eFgoOEhISEg4KCgYGCgoKBgoGBgYGBgoGBgoKAgYKBgYCAgH9+e3x+fnx6fnh5dnd8fHx7e318f4GAf35/foB/f35/f35/gH9/f39/f3+AgYKAfn6BgIB/f39/f39+fYN8fH19fH99fX19e3x+fn9+fn5+fnx8fHx8fHt+fnp8e3x8fHx9fH18fnx9fHt7e3x5e3x7e316fX5+f4CAg4eJiYmLiYuJhYiRjYuIiYeFhYOCgoOEhIOCgoKBgYKBgYKBgYGBgYKCgoGCgoCAgX98e3p6eXt9enx+fnl8eXh4dHx8fHx8fHx/gH9/f39/gIB/fn9+fX+AgH9/f3+Af4CDgoB/gIGAgIB/f4CBf358enx9fX59fX5+jIZ9fX57e4OCfX5+fX18fX19fX1+e318fXx9fX58fn19fX18e3t6fHt8fHt6e3t6enp7fn6DhYiHiIqLi4uJjZGOjYmIhoWEgoKCgoODg4OBgYGBgYGBgYGBgYGCgoOCgYKBgICBf3+Af356eHl5en5+e3l6eH5zfHx8e3x8fH5+fn5/gH+AgIB/fn9+gIF/f4B/gIGAgoSEgYCAgYGAgX+AgYKBf39+f31+gH57foGRjHx9f4qAjYx+fn19fX59fX59fHx8fX18fXx9fX1+fX1+fnx7e3t8fH18e3p7fHl6eXh5e35/g4OEh4mKiImOkI2LiIiFhISCgYKCgoKCgoGCgoKCgYGCgYKCgoGCgoKBgoKAgYGAfoCAf39+e3p5e319eHx6f3KBfXt7fHx8fn59fYGBf4GBgX9/gH+AgX9/gIGCgYGFg4SCgYGCgYKCgICBg4KAf4F/fX6Afnx/f4iCf36CkISEg4F/fn18jYd9fX59fHx/fnx9fXx9fX5+fX5/fH19e3x9fnx8e3x9enp5eXl5e3t+foCBg4eEiI6NioqGhYSEg4KBgoKCgoGBgYGCgoKBgoKCgoKCgoKCgoGCgn+AgIB+f39+fn5/ent5fX16enp9cX6Cent8fX19fXp4f4KAgYKCgICBgYGBgICBgoKCgoWFhIKBgYGBg4F/gIKEgX9+gYB9foF+fX9/gIB9fn+EgH5+f31+fX2KhX1+fn1+foB/fX18fH5+fn99f4B9fn18fX9/fHx7fH17e3t6enp7e3x9fn6Ag4CJjYqLh4WFhYSDg4KCgoKCgYGBgoKBgoKCgoKCgoGBgoKBgYKCf4CAgH9/f39+fn59eXp6fXx5d3t0e4d8dHd9fn17e3Z2foCBgoKBgYKCgoKBgYGDg4OChYaEg4CAgICDgX+AgYOBfn6Af35+gH59fn6AgH+Bfn+Af35/f398f39/f3+Afn9/gH58fX18fn5+foF/gH2CgHx9gIB9e319fXx8e3x8e3t7fHt8fHx9fIqKiIiFhYWFhISDgYKBg4KAgIGCg4KCgoOCgoKCgoGCgoGBg4J/gIGAf39/fn5+fn57enp8fHt2e3R3f352cnt+fnt4dnd8gIGCgoKBgoODg4OCgoSDhIOFhoOCgX9/gIOAgICAg4F+foB/fX+AfX1+foCAf4J/gYGAgICBf31/f3+AgIGAgIB/fnx9fX19fn59g32AfoKAfX6AgX98fn59fX17fH58fXx8fHp8e3x+iYaGhYWHhYSFhIKCgoGDgYCAgoKDgoKCg4ODg4KBgYGBgYGCgH6AgYB/fn5+fn5+fn56e3p9goN9dXF6fHpxen59eXh1dICAgoKCgoKDhYOEg4KDhISEhIWEgYGAgH6Agn9+f36Bf35/f4B9foB9fX1+gH9/gYCBgYCAgIKBfn6Af4GAf4CAgH9+fX19fXx+fn19gYR/gH9+f4GBf31/f319fn1+fn1+fHt8enx7eoCHgoSEhYSEg4WDgoKBgYKBgICCgoOCgoOEg4SDg4KBgYKBgYOAfoCBf35+fn5+fX5+fnt7en6Jh354cnl9f3F6eHt4eXV1fYKDgoODg4OFhIWDg4OEhIODhIKBgH+Af4CBfn19fn9+fn5/gH19f3x9fX6Af4CAgIKAgIGAgoGAf4B+gIF+gIGAgH9+fn5+fn5/fn6FhYGBgH+Ag4F/foGAf35/foB/fn17ent6fHt6goR/g4KCgoOChIKBgYCAgoGAgIKBg4KBg4SDhIKEgoGBgoGCgn9+gIF/fn1+fn5+fX59fXp7fIWEe3tzeXp8cHd1dnd5dXR6hISBhISDhIWFhoSDg4WEgoODgoCBf39/f4B9fX1+f31+f39/fn1+fH19foF/gIB/gIB/gIGDgoGAf36AgH+AgYCBgH9/f39/f4CAgIGCgoKBf4GDgX+Ag4J/f4B/gX+Af3x7e3p8e3yCgH+Cf3+BgIKCgYF/fn+BgH6BgoKDgYGDg4KDgoSCgYGBgIGCgH6AgH9/fX5+fX19fn19e3t6gH94fHZ5eXtxdHh3dnh1cnmFhYKEhIKEhYWFhISChIOBg4GAgIF+f4B/gHx9fX6AfX5/f39+fX98fn5+gX+Bf39+f4B/gIODg4B/f4GBgIKBgYGAgICAgICAgIGAgYKDgYF/gISBfYGDhICAgX+BgYKBfXp7e3x8fH9+f4B9f399fYGAgH59fYB/foKBgYKBgIKCgoKBg4KCgYB/gYKAfn9/fn99fX1+fX19fX19ent7fHZ9eXh5enJ1eXl2d3dzdYaFg4WFgoSEhYSEhIKDgoGDgX+AgX5/gH6AfX19fn9+f4B+fn99f3x/f3+BgIF/f3x+gH6AgYKDgYCAgoOEgoGAgYB/gYCAgYGAgYGBg4KBgX+Ag4B+goKEgICCgYKChIJ+e3t8fHx8fX1+fXp+fX14fn9/fHx8fn5+gYCBgYCAgoGBgYGDgoGBf4CAgoB9fn19f319fX59fH19fX16e3p8dnx6d3t4cnZ5e3Z2dnN0hoSEhYSBhISFg4OCgYOBgYOBgIGBfX+BfoF9fX1/f39/gH5+f359fYB/gIGBgX5+fH5/fn5/gYJ/gYGCg4eFgX9/fn6Af4CBgICAgIKCgYCAfoCCf3+BgoKBgYOCg4OFgn99fX18e3x8eXp7en55e3l4f357e3t+fX1/f4F/gH6BgICAgoOCgYF/gIGBf31+fH1+fX19fX18fn58fXx5e3x4enx3endzeHd6c3d2c3SGhISFg4KDhISDgoKCg4GCgoGAgYF8gIB+gH1+fX5/gICAf35/f3x+f3+BgIGAf359f39+fn+BgH2AgIGDg4N/f359fn5+f4CAgIB/gYKAgH9+gIF+f4CCgYCBhIKEhYaEgH59fHx8fHp5dnl5enl2eXZ+fHt7e358e399gH99fX9/f3+BgoGBgX5/gYF+fX18fX19fX19fXx+jYF8fXl7e3p5fHd4eHR1dXhyd3d0doaEhIWEg4ODg4OCgYKDgoGDgn+Bf35/fn+AfX19fX+AgIB/f39/fIB/f4GAgYCAf3yAf31+fn9/fX5+gYGCgn5/fn1+fn5+f3+Af32AgIB+fn1/gX5+gIKBf4KDgoOEh4SAgH58fXx8e3x1eXl4eHh5d3t8e3t7foV9fn1/ent+fn59foGAgIGAfX6BgH59fXx9fX19fX18e32DgXx8ent7e3p7d3Z4dXJzdnB4eXJ4hYWFhYOEg4KChIKBgYKBgIKBgIF/fn5+foB+fX58f4CAgH+AgX97gH6AgH+BgIB/fYB+fn5/f319fX6AgYKBfn9+fn59fX5/fn9+fH+Af35+fn+Dfn6AgIF/gYOCg4OGhICBfnx9fHx7fHh4e3h1eXd3eXx6e3t9kod9fH13en1+fn19f35+gH98foB/fn19fH19fX19fHt8ent9enp4e3x6ent4dHh1cXJ0cHh4cnmEhYWFg4SDgoODgoGBgoKAgYGAgIB9fn5/gH18fn2AgIGAf4CBgHyAf4B+f4GAf39+gX9+f39+fX18gICAgIB+f35+fn18fn9/f358fYB/fX1+gIJ/foCAf36BhIKCg4WFgoJ+fXx7e3x8eXd8eXd4d3d4e3t7e3yFin17end6fH19fHx9fX1/fnx9fn59fXx8fX5+fX18fHt6enx7e3p5enp6enhzd3VxcXJweHdxe4WGhIWDhYKBg4OBgYGBgoCBgICBgH5/fn9/fXx+fYCAgoGAgIGBfX6Af35/gX+Af3+BgH9/f35+fH1/gICAgH9/f35+fXx+f39/f319f399fn6CgYF/gIB/foGDgoKEg4SCgn5+fHx6fHt7eXt6d3N2d3h5e3p7eXp/fnt7d3p8fXx8fH59fH19fH19fXx8fX19fX99fXx9e3l7fHx8enp6enp6eHN2dXBwcm93dnJ7hYaEhYOEgoGDgoKCgYGCgYKBgYGAf4B/f399fX9+f4CBgYJ/goF9foF+foCBf4B/gIKAgIB+fX58f3+BgICAf4B/f4B+fX5+f4B/f39/gH9/f4J/gICAgIB/gYGAgISBgoKAf39+f3x9fn56fYV+dHx9enp6enx5eXp6hoV3eXx8fHx8fXx8fHx8fX19fHx9fX19fn19fX16eX17fH16enp6enp5c3V1b29xb3d0c3yFhoOEgoOCgYKBgoKCgYKBgoGCgYCAgICAgH59gH+Af4GCgn+CgX+AgX5/gYF/gICAgn+Bf319f35/f4KAgICAgIB/gIB+fn1/gH9/f4B/f39/gH+AgICAgH+AgIGBgYGCgYCAf39/fn1/fnuBk416fH18e315e3p6eHmBgXh5e3x8fXx8fHx8fHx9fX18fH18fX1+fn59fHp8fHt9fXt5enp6eXlzdXVvb3Fwd3N0fYWGg4OCg4KAgYCCgoGAgYGCgYKBgYCAgIGAfn5/f4GAgYKCgIKCgICCfoCBgX9/gX+BgIF/fH6Af3+AgoCAgICAf3+AgH9+fX6Afn1/gH9/f3+AgICAgYCAf4CAgYCBgYKCgICAf39/fX5+fIGGiXx8fnt7fnl6e3p7jn53d3l7fHt9fHx8fHt9fH19fX18fXx+fn5/f358enx9e319e3l6e3p5eHN0dW5zcXB4cnV6hYaDg4KDgoCAgIKCgX+CgYKBgoGBgYKAgYF/fn9/gYGCgYKBg4OAgYJ/gYGBf4CAgIB/gX99f4F/gICBgICAf4B+gICAf359foB+fn+Af39/gH9/gIGBf4CBgH+BgIGBg4KAgICAgIB9foB9gIOCe35+e3t9e3p8e3uHeXh4eXx8fH17fHx9fX18fH19fn19fX5+f3+Af317fH18fHx7enl7e3l5c3J1bnZycHhxdXaFhYOEg4KCgICBgoF/gIKCgoKDgYGDgoCCgYB/gICCgoKBg4KEhICBgX6BgoF/gICAgH+Cf36AgYCCgICAgIB/gH+AgIB/fn2Af39/f4CAgH+AgH+AgYGAgICAf4GAgIGBgYGAgYCAgH9/gH5/fX59fn57fXx9fHx8d3h1eHh5e3x8fXx8fHx8fX5/f39/fn19foB/gIGAf3x9fHx9e3p7eXp8eHpzcnVud3FxenF2d4WFg4SDg4KBgYKDgH+CgYSDg4SBgYOBgoKBgYCAgIKDgoCCgoSDf4GAfoKDgICBgICAf4CAf4GBgIJ/f4CCgH9/gICAgICAf4CAgH+AgICAgIB/f4CBgYCAgICAgYGAgoOCgoCCgYGCgYB/f4B/gId+fnx6fXx7fX94d3Z5eXp8fXx8fXt8fX19fn5/gIGAfn1+gICAgoGAfH59fX58d3t6ent5eXNxdW53cHV6cXZ5hYWCg4KDg4KDhISAgIOBhoOEg4GChICEg4KCgICCgoSBgYKChIJ/gIB/gYOCgYCBgYCAf4GBgYGAg4F+gIOCf35/goGAgIB+gYCBf4CAgYGBgYCAgIKBgYKBgH+CgYGBgoOCgoOBg4OCgYCBgH+AhH19fXt/fXp9f3p5dnp4eXt7fH19e3x9fX19fn+AgYGAgH+AgICDg4B9f35+fn15eXt6enp5c3J1b3dxd3lzd3uFgoKDgoOEgoOEg4CAgoOGg4ODgoKEgYSDgYKAgIKBg4GCgoGCgX6BgICCgYKBgYKCgIGAgICCgoGEgH6Bg4J/foCDgoCBfoCCg4KAgYGBg4KDgoGBg4KChIGAgYOBgYKEg4KEhIODhIODgYGBgYCCf4B/fYB8enx/e3t3fHl5eXt6fX59fHx8fH1+foCBgYCAgIGBgYSEgH2Af39/f357e3t6e3p0cHhyeXR2eHR3e4SCg4KDg4SChIODgYKChYaEgoODg4SBhISAg4CBg4KCgoKCgIKAf4GAgIKBgoGCgoKBgIGBgYOCgoOAfoGDgn9/gYSEgYN/goKBg4GCgoGEg4OEgYKEgoOCgoGCgoOBg4SDhISEhYSFg4SCgYOCgoOBgYGAgH58fIB8fHh8eXp5enx9f3x7fHx9fX18fICAgICAgYGBgYKBfoGAgICAf3t7fHp6enVweHd5dnV8dXZ8gICDgoODg4OEhISAgoOGhYWDg4KDhIGEhYKCgYKDg4GCgoKAgYB+gYCBgYKDgoKCgoGAgYKCg4KCg4B/gYKBgICChIODgoGCgoGDgoKDg4ODg4SAgoSDg4OBgX+Bg4KDhYKEhISEhISDhISChIOEhIKBgoGBgHt+gX59eXx6enp9fXyBfXp8fH19fHp7fn5+gH9/gYGAgICAgIGBgIB/fX18fH18dnJ2eHl2dH92dX2Hh4OChIWDg4SFhICChYWEhIOCg4SEgIOFg4KCgoODgYOCgoCCgH2AgIGCg4KCgoKEgoGCgoOEgoKBgICBgoGAgYOFhIOCg4CCgoOCg4ODhIOEg4CCg4KEg4KCfoOBgoSEgoODhISEhIOEhIOEg4WEg4ODgoKAfICBf3x8fXp6e32Afn9/fHx6fH59fX19fn5/f39/gICAgH9+foCBgICAfnx9fX5/fn18e3h2f3Z3f4SHg4KDhYODhIaEgYKFhoWEhIODhISBhIWFgoKDg4SCg4KDgoOBfoCAgoKDgoODg4SCgoKCg4OCg4GCgYGDgn+ChISDg4KEf4KEg4ODgoSDg4SCgIOEg4SDg4KCg4KChIOCg4OEhISEhIWEg4OEhYSFhIOBgoB9gYKAfXx8e3x8gH19foB+fn1/fnx8fX19fn5/fn+BgYGBgH99fX6BgYB+fn19fX59fX5+f3+AfH2AgYKCg4OGg4SDhoSBgoiHhYSDg4SEhYGFhYWDg4SDhIODgoOCg4F+gYGDg4SCg4OEhIOCg4KEg4ODgoKDgYOCf4KDg4ODgoOAgoWDg4ODhIODhIOAgoSEhYOCgoODg4GEg4GDg4SDg4SEhYSEhIWFhYWEg4ODf32BhIB9fXx8fHx/gX5/f39/fX99e3x9fX19fX5+f4CBgIGBgH59fH6Cf39+fn5+fX1/f39/gICAf4CEhIODhIWDhIOFgH6CiouFhISDgoOFgYaGhoOEhISEhIODg4OEgn+BgYODhYSFhIWEg4KEhISFhIODgoSDhYKBhISFhYaEgoCDh4SDg4OFhIWFhIGEg4OGgoOCg4GCgYSDgoODhYODhYWEhYWHh4aHhYSEhYSBf4GDf35+fH5+fX+BgH9+fHx/f358enx9fX19fX5+fn9/gIKBf319fIB/gH5+fn5+f3+AgYGBgYKAgYWFhIOEhIKEg4aAgoWFiomEhISEhIWDh4aGhISEhIWEhYSEg4SDgYKDg4OEhIaEhYSDg4SEg3yDhHuBhHd5g4F9hH5+cnWDgoF2foOFgX2BdYF5g39/gH6EhIKDg4KBg4SDg4SFg4SFhoSFhn2EeXx+f4N7hYOBhIOBf31+fn5+gYOBfXt/fX6Afn18fHx9fX19fH19f4B/gYJ/fX18f4GBgICAgH+BgYGCgYKDg4KChoSEg4WEgYOEhYOEhYSKiIWFhYOFhYSGhoaDhIWFhYWEhYWEhIWCgoOEhYWFhoSFhIOEhYWCaICFanx7cXF8gXOGc3R0fYKDdXNxg4Z0cHVyc3SDdnt9dYF/goOAgnZ5hYCDgIR/hYSChYWCaHpyc3N8gHOBhH6Dg32BfX5+fX6Cg4J8f4F9f4B9fXx8fHx9fHx8fn1+gH+BgX99fX2AgYKBgYGBgIGBgYKBgoKCgoSHhIWEhYSBgoSGhoOFg4aIhoaFg4aGh4eGh4OFhYaFg4KFhoSFhYODg4SEhoaGhIaEg4SFhn1xe4FweXZ+g3+CbnlwdXN8dnl5hXKEg3B2eHF2dHR1cnN0dml/gG5yb3R2bnVsd217c26Ah3ltfXJzdnN2bW14bHB5bHV9f399foGAgX2Af32Af4B/fX18fH19fH1+f32Af4CAfnx/foCBgoCBgICAgYCAgIKDgoKEhYiGhoCChYODhIeGg4WFhYaHh4SDhoeIiYaHhIWGiIeEg4WGhYWEhIOFhIKFhoaFhoWEhoWHdnB0e3BydX+HhYNtdW92b3x1coR5eYd4cXR3bndod3pucHaCcoN+b3p5eW1vbnpvb213fXiGcHF6cHJ0ZoF1fm57eXNveX+Af319gYB/fH99fIB+gIB+foCAgYB+fn9/foF/gH9+fYB9f4CBf4B+fn+BgH9+goOCgoSFh4eEfoeEg4OFh4aEhoWFhoaIhISGh4iIhoeEhoaLiYWEhoeHhYSFhYWEgoWFhYWGhYWGhYZxdXByc29zenl+hHSIdHV+iHZugnKEhnluanJ/cW1zd3x/dXR8hH54cXV3bnl1enF2eHV6eYRxam95eHBreXN6b3p3dnZwgYB/fn5/f356fn18f31/f359gIGDg4CCg4GBhIGBf4GBgH1/f4F+f359f4GAfn6BgoCAgYSHhoODhoSFhYaHhoWFhYWHhoiFhYaFh4eFhoSGhomIhYSJioiGhIaGhYWDhYWEhoaGhoaFg3iLeXKIentwcIWEeIV4eWtzfnl7a3KDh4N6fG17eXl0fYB2bm+AgG90fHV3cXl9fW1+dW+DhYZ6gHJye3x1cG96bHN8bneCgIF+fn99fXp9e3x9fX9/fX1/f4KCf4GDgYGDgYB/gICAfn9+f31/fn1/gH58fYGAfn6Ag4iFhoOFhYWFhoeFhYWFhoeHiIaEhoWHhoaFhIWFhIWFhomKh4WEhoWGhoWGhoSGhoaGhoWGh4eHhoaEhoWGh4iHhYeGhoOHhoWFg4SGhoWGhIaEg4SEhoSEgYODhISFhIWEhYSGg4aHhYaEhIWHhoSEhYaEhX13hYOEhIKBgX1/fnt8e357fHx9f359fH59gIB9f4F/f4GAfn5+gH5+f35+fX99fX5/fHt8f358fH+BiYaFhIaGhoWHhoWFhYWGhoeIhoSGhYaGhYWDhIWGhYSGhoaGhYWGhIWGhoaGhIeGh4eGhYeIiIiIhoSHhYaGiIaFiIeIhYeGhoiFhYaHhYaGhYOChYWGhYWDhYOEhIWEhYWEhYWDhoaGhoWEhoeGhISFhoOFhIKEg4OFg4OCfYB/e3t8fnt8fH1/fnx8fn2Af31/gH5+gH99fXyAfX5/fn5+f3x9fX57fHx/fHt7fn+Ih4SEiIaGhoeGhYWEhoaGhoiHhIWGh4aFhIODhIaFhIeFhYaFhYaEhYaGh4eFh4aJiIaGh4eIiYiFhYiFhoeGh4aHhoeFh4eGh4WFhoeFh4aFgoOFhoaEhIOEhIOEhoSFhYWGhYOGhoWGhYWGhoWEhIWFg4SHhYOCgoWDhIF+gIB8e31+e3x7fX59e3x+fX5+fX9+fX1+fnx9fH98fn58fYGAfHx8fXx8fH56e3t8foiHgoWIh4eGhoaGhISGhoeGiIaEhYSGhoSFh4OEhYSFh4SFhoaFhoSGhoeHhoaHh4mIhoaIh4iKiIWHiIWGh4WHhoeGh4WIiIeHhYaGh4WGhoWBhISFhoWFhISEg4SFhIaGhoWGhIaFhoeFhYaGhYSDhISDhIeDhIGChISDgYCAgHt7fn18fHx9fXx8fH19fH18fn18fX19fHx8fXx+fXt8gX99fH18fXx8fHp6fHx9iIeChoiHhoeGhoaEhYaFhoWGhYOFhIaFhIiJg4GEg4SGhIaGhoaGhIeHiIiHh4eIioiGh4iHiImIhYiHhYeGhYeHh4WHhoiIh4eFh4eHhYaHhIKEg4SGhYeFhISEhISFhoaGhoaFh4WFh4WFhYeFhIOEg4ODh4GDgIKDg4KCgn+Ae31+fXt8fH59fH19fH17fHx8fHx8fXt7e318e359e3x/fX18fX1+fXx6ent7fHyIh4KGhoaGh4aGhYSFhoWFhYWEg4WChoSDiId/enqChYaEhoaFh4aEh4eJiIiHhoiKh4aHh4eIiYeFiIeGiIeGhoeHhYeGiIiHhoWHh4eGhoeDg4SEg4aGh4WFhISEhYaGhoaGhYaHhoaHhoaEhoWDhIODgoOGgYN+goKDgIOCf398f35+fHx9f318fX18fXp7e3p7fHx8e3t7fnt7fXx7e358fHx8fX5/fXt6fHp8fYmHg4aFhoWGhoWEhIWFhYWFhIOBhYGGhIKEhHyAhn+ChYWGhYWGhYSHh4iIiIaFiIqHhYeGh4eIh4WIhYaHiIaGh4eGh4aIiIeFhoeGh4WFh4OEhoSEhoaHhoWEg4WFhoaGhoaFhoaHhoeHhYOGhYOCgoKAg4WCg36BgYF/g4F/fn5/fX58fH1/fXt9fXx+enl6eXt8fXt7e3t+fHx8fHp7fXx8fHx+fYB8e3t7e3x7iYeEhoSGhIaGhYSFhYWEhIOEgoCDgYWCgYJ/eoSMe4CEhYeGhoaFhIeIh4aHhYWHiYeEh4WGhoiGhYeEhoeIhoaIiIeHhoeIhoSGhoaHhYWHg4SFhIaGhoeFhISDhYWGhoeGhoWGhoaFhoaEg4SFgoGCgYCDg4KCfYGBgH6DgX5/f4B8f3x9fX59e359fH15eXp5e319enp7e318fXx8ent9fHx9fH5+gHx7e3x+fXyIh4WGhYeEhoSFhYWFhYODgYOBgIKBhYKAgH9/fXx7gYSFhYaEhYSDh4eGhoaFhIaJhoKGhIaGhoWFh4aHiImGhYiHiIeGhoeFhIaFhYeFhIeDhIWEiIaGh4WFhIKFhYaFhoaHhIaGh4aFhoODg4WAgIGAgIOBg4B8gYB+foKAfYB/gXx/fH1+fX57fn18fHl6enl6fX15ent7fHt8e3t6e319fH18f35+e3t7fX59fIiGhYaGhoSFhYSFhYSDgoKAgoGAgICDgX5+foB5en2Ag4OFh4WEg4OHhoOEhYSChYiFgoSDg4WFhYWHh4aIiIWFiIeJh4aFhoWDhoSFh4OEhoSEhYSHhoWGhYaEgoWFhoaGhoaEhYaGhYWGgoKDhH9+gICAgYCDgHuBf31+gn5+gH6Afn99fX59f3t/fXt6eXp6eXp8fXl6ent7enx6e3t7fH19fXyAfn18fH1/fnx7h4WFhoaGhoSFhIWDhYKBgICAgYB+gIKCfX5/f3t/f4KDg4WGhYSDg4aDgYOEgoCFh4WCg4GBhIWEhIaGh4iHhYWIhomHhYSEhIKFg4SGgoOFhIWGhIeGhYWFhoOEhYSFhoWGhIOEhIWDhYWBgIODf35/gH9/gIN/fIB9fX+CfoCBfn6Bfn5+fX1/e398e3p5enp5enp8eXp6ent7fHp7e3t8fX59fYB9fXx8fYB/fXyGg4aGhoaGg4SDhYKFgYGAf3+Af35/gIF8fn9/foCAgoKChIWDgoGChIGAg4KBgISFhIKBf4CCg4OEhYWHhoWFhoeFh4aGgoOCgoOCgoWBg4WEhYaEhoaHhoaFgoSEg4SGhYWDhIODhIOFhIB/goJ+fn5/fn5/hH57f3x8gIF9gYB9fYN8fn59fX57fnx7enl7enl6ent5enp6e3t8ent8fHt+fn1/gXx9fHx9f4B+gIaEhYWEh4SDg4KGgoOAgYB+fn+AfX9/gXx9f39+fn+BgYKEg4KBgYKCf4CBgoCAgoWEgoB/gIGDgYOFhYeFhISGhoOFg4WBgoGBgoGCg4GChISEhYWGh4eGhYSDg4ODhIaFhIKDgoOChIODgH+AgX59fX5+fH6Dfnx+fHyBgH6Cf31/gnx/f319fHx8e3t6enp6eXt6enp5eXp6e3x5e317e35/f4GAfX59fX1/gICAhoSEhYSFgoSCgoSCgoCBgH59fn9+fn6AfX2Af35+foGBgoODgoSHgYF+gICBf3+ChIOBf35/gIJ/goWEhYOCg4WFgoSBg4CBgIGBgYKBgIGEg4OGhYWHh4WEhIWCgoKDhYSCgYGBgYCFg4F/foB/fnx9fn18foN9e318fYF/gIN9fYCBf35/fXx8fH17e3p6enl5e3l6enl6ent7e3p7fXx8f3+BgoB+gH+AgH+AgYDKysrKysrKysrKysrLy8vLy8vLy8vLy8zMzMzNzc3Nzc3Nzc3NzczMzMvLy8vLy8vLy8vLy8vLzMvLy8vLy8vLy8vLy8vMzMzMzM3Nzc7Oz8/Pz9DQ0NHR0dLS0tLS0tLT09PT0tLS0tLS0tPT09TU1NTU09PT09PT09PT09PT09PT09PT09PT09PT09PT09PS0tLS0tLS0tLS0tPT09PT1NTV1dXV1dXV1dXV1dXV1dXV1NTU1NTT09PT09PT09PT09TU09PU1NTU1NTU1NTU09PT09PS0tLS0tPT09TU1NTU1NPT09LS0tLS0tLR0dHR0dPHhnNlYFtLWWdVTUZIQD03Nzg5Nzw8PDo8Oz42Oj04PDs6OTg3ODs7Oj87PTs8PD47P0E/QkJBQ0RFREE+PTw7QENDQUBDQ0FBR0hHSUtSwtXS09PT09TU1NTU1NTU1NTU1NXV1dXV1dXV1dXVysrKysrKysrKysrKy8vLy8vLy8vLy8vMzMzMzMzNzc3Nzc3Nzc3MzMzMy8vLy8vLy8vLy8vLzMzMy8vLy8vLy8vLy8vLzMzMzc3Nzc3Oz8/P0NDQ0NHR0tLS0tLS09PT09PT09PT09PS09PT09TU1NTU1NTU09PT09PT09PT09PT09PT1NTU1NTU1NTT09PT09LS0tLS0tLT09PT09PU1NTU1dXV1dXV1dXV1dXV1dXV1dXV1NTU1NPT09PT09PT09PU1NPT09TU1NTU1NTU1NPT09PS0tLS0tPT09PU1NTU1NTU09PT09PS0tLS0tLR0dHSzIxyZ2BcTVllUktHSz87Mzc4Ozg5Pj05PDpBOjs9Nzs8PDo6Nzg6Oz0/Oz88PTw/Pj9BPUFBPkNDREJAQT46Oz9DREFDRERCQklHSEhJTr7V0tPT09TU1NTU1NTU1NTU1NXV1dXV1dXV1dXV1crKy8vKysrKysrKy8vLy8vLy8vLy8vLy8zMzMzMzM3Nzc3Nzc3NzMzMzMzMy8vLy8vMzMzMzMzMzMzLy8zMzMzLy8vLzMzMzc3Nzc3Ozs/P0NDQ0NDR0dLS0tLS09PT09PT09PU09PT09PT09TU1NXV1dTU1NTT09PU1NPT09PT09PT1NTU1NTU1NTU1NPT09PS0tLS0tLS0tPT09PT1NTV1dXV1dXV1dXV1dXV1tbV1dXV1dTU1NTT09PT09PT09PU1NTU09TU1NTU1NTU1NTT09PT0tLS0tLT09PU1NTU1NTU1NTU09PT09PT0tLS0tHR0s+Sd2hfXk9XZ01LRks9ODc2NTk5OTw+OT88RDo7PDc5PD07OTc5Ojw9QDs+PT47PD48PT5BQD5EQ0NDP0E9Ojs9QkNFQ0NEQT9FSEpJSky61dPT09TU1NTU1NTU1NTV1dXV1dXV1dXV1dXV1dXLy8vLy8vLy8rKysvLy8vLy8vLy8zLy8vMzMzMzMzNzc3Nzc3Nzc3MzMzMzMzMzMzMzMzMzMzMzczMzMzMzMzMzMzMzMzMzc3Nzc3Ozs/Pz9DQ0NDQ0dHS0tPT09PT09PT09TU1NTT1NTU1NTU1NTV1dXU1NTU1NPU1NTU09PT09TU1NTU1dTU1NTV1dTU09PT09LS0tLS0tLS09PT09TU1dXV1dbW1dXV1dXV1tbW1tXV1dXV1NTU1NTT09PT09PT1NTU1NTU1NTU1NTU1NTU09PT09LS0tLT09PU1NTU1dXV1dTU1NTT09PT09PT0tLS0dHRmn5nYWJOVWpKSElLPzw6OTM3Njc3PTs+OT06Ojo4ODo7Ozg4Ojs7PD46PT09Ojw/PD0/QkA/Q0RDRD5APT08QENEQ0JEQkQ+REhJSUtMttfT09TU1NTU1NXV1dXV1dXV1dXV1dXV1dXV1dXVy8vLy8vLy8vLy8vLy8vLy8vLy8zMzMzMzMzMzMzNzc3Nzc3Nzc3Nzc3MzMzMzMzMzMzMzMzNzc3NzczMzMzMzMzMzMzMzc3Nzc3Ozs7Pz8/Q0NDQ0NHS0tLT09PT09PT1NTU1NTU1NTU1NTU1NTV1dXV1NTU1NPT1NTU1NTU1NTU1NTU1dXV1NXV1dXV1NTU09PT09PS0tLT09PT09PU1NXV1dbW1tXV1dbW1tbW1tbW1dXV1dXU1NTU1NTU1NTU1NTU1NTU1NTU1NXU1NTU1NTT09PT09PT09PU1NTU1dXV1dXV1dTU1NTU09PT09PS0tLR0p+DaV9kU1hsSEhIS0A9Nzg0NzY6Oj87RDw8OTw8OTg6OTo6Ojs8Ojo7OT49Pjk9QDs/QUFCP0JCQUM9Pz8+PEBCRUNDQkBBO0ZJR01MSbLY09TU1NTU1NXV1dXV1dXV1dXW1tbW1tbV1dXW1svLy8vLy8vLy8vLy8vLy8vLy8vMzMzMzMzMzM3Nzc3Nzc3Nzc3Ozc3NzczMzMzMzMzMzc3Nzc3Nzc3Nzc3Nzc3Nzc3Mzc3Nzs7Ozs7Pz8/P0NDQ0NHS0tLS09PT09PT09TU1NTU1NTU1NTU1NTV1NXV1dTU1NTU1NTU1NTU1NTV1NTU1dXV1dXV1dXV1dTU1NTU1NPT09PT09PT09PU1NXV1dbW1tbW1tbW1tbW1tbW1tbV1dXV1dTU1NTU1NTU1NTU1NTV1NTU1NXV1dXU1NTU1NTT09PT09PT1NTU1dXV1dXV1dXU1NTU1NTT09PT09LS0tSjiGxfZlJWakdIR0lBPjM2Njo7PDhDPEJBPjxBPDg5Ojw6Ojw8PDk8PTo7PD09PD89QD9AQT9AQUBCPD4+PzxCQ0NDRkBBQT1ISklOTUeu2NPU1NTV1dXV1dXV1dXV1dbW1tbW1tbW1tbW1tbMzMvLy8vLy8vLy8vLy8vLy8vMzMzNzc3Nzc3Nzc3Nzc3Nzc3Nzs7Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Ozs3Nzc3Nzc3Nzc3Nzs7Ozs7Oz8/P0NDQ0NHR0dLS0tPT09PT09TU1NTU1NTU1NTU1NTU1NTV1dXV1dTU1NTU1NTU1NTU1dXV1dXV1dXV1dXV1dXU1NTU1NTU09PT09TU1NTU1NXV1dbW1tbW1tbW1tbW1tbX19bW1tXV1dXV1dXV1dXV1dTU1NTU1dXV1dXV1dXU1NTU1NTU09PT09PT1NTU1NXV1dXV1dXV1dXV1NTU1NPT09PT0tLWroprY2VSWGhMSkdJQjg0OTQ6Ozo5QDk/Q0VAPDw5OTk9Oj07PDw6PTw7OTw9Ozs/PUA9PT5AQD9CQT5APD05QERDQkFBQj48SEpLTU5IqNnU1NXV1dXV1dXV1dXW1tbW1tbW1tbW1tbW1tbWzMzR09PT09PT09PT09PT087Ky8vLzMzMzMzMzMzMzM3Nzc3Nzc7Ozs3Nzc3Nzc/Pz8/Pz8/Pz8/Pz9DQ0dHR0dHR0dHR0dHS0tHV2djY2NnZ2dra2tvb29vZ2dnZ2dna2tra2tra2tjW19fX19fX19jX19fX19vb29vb29vb29vb29vb2NbX19fX19fX1tbW1tbX2tra2tra2tra2trb3NzX1dXV1dXV1dXV1dXW1tbX1tbW1tbV1dXV1dXV1dXV1dTU1dXV1dXV1dXU1NTU1NTU1NTU09PU1NTU1NXV1dXW1dXV1dXV1dTU1NTT09PT09PS1bqKa2hoUlhlSUlMT0A5OTo0O0E8Nz05QUM+QD89ODo6Ozk9Oz4/Ojs8PDo7PDo7Pj1APT8/P0FAQUE/QTw8Oz5BRENBREA9PElJSk1ORqPa09TV1dXV1dXV1dXW1tbW1tbW1tbW1tbW1tbW1szNhG1wcHBwcHBwcHBwcGqn493d3t7e3t7e3t7e3t3S0NDQ0NDQ0NDQ0NDQ0ci5ubm5ubm5ubm5ubq6t6WkpKSkpKSkpKSkpKSnhmBjY2NjY2NjY2NkZGRlhIuKioqKioqKioqKioemuri4uLi4uLi4uLi4ubSPjIyMjIyMjIyMjIyMiaK/vL29vb29vb29vb2+tIqKioqKioqKioqKiouHvebh4uLi4uLi4uLj4+Pi2NfX1tbW1tbW1tbV1dXV1dXV1dXV1dbW1dXV1dXV1dTU1NTU1NTU1NTV1dXV1dXW1dXV1dXV1dXV1NTU1NTT09PT09XDkXFrak5TYkxMVk48Ojo3Nz5DPzg+Oj8/QTw/QDc7Ojs7PTs+Pjo7PD48Oz07PT8+QDw/Pz1AQEBBPj88PjxAQUVCQkZAQD9HSEpLT0ae2tXV1dXV1dXW1tbW1tbW1tbW1tbW19fX19fX19fMzk4mKysrKysrKysrKysiivTr6+rq6urq6urq6uvp1dLS0tLS0tLS0tLS0tTEqaqqqqqqqqqqqqqqq6aGhIWFhYWFhYWFhYWFik4MEhISEhISEhISEhIRE0pUU1NTU1NTU1NTU1NPg6ejo6Ojo6Ojo6Ojo6ScWlVWVlZWVlZWVlZWVlJ8rqqqqqqqqqqqqqqqrJtTUlNTU1NTU1NTU1NTS6ry6+vr6+vr6+vr6+vr6dnX19fX1tbW1tbW1tbW1dXV1dXV1dbW1tbV1dXV1dXV1dXV1dTU1NTV1dXV1dXW1tXV1dXV1dXV1dXU1NTU1NTU1NPUy5h2bGlKTl9NUlVNPjw8Nzs/Qz42Ojc+Pjs9Qj84PDk9Ozw6PD07PTs9Ozs9PD0+PT07QT08QUBBQT08Pzw7QEJDQURFPUFAQ0ZLS09GmNzV1dXV1dbW1tbW1tbW1tbW1tfX19fX19fX19fXzc5SKzExMTExMTExMTExJ43z6enp6enp6enq6unq6dXS0tLS0tLS0tLS0tLUxaqrq6urq6urq6urq6yoiIeHh4eHh4eHh4eHh41SEhgYGBgYGBgYGBgYFxpOWVdXV1dXV1dXV1dXU4WopKSkpKSkpKSkpKSlnl9ZWlpaWlpaWlpaWlpWgK+rq6urq6urq6urq66dWFdXV1dXV1dXV1dXV0+r8erq6urq6urq6urq6unZ19jX19fX19fX1tbW1tbW1tbW1tbW1tbW1tbV1dXV1dXV1dXV1dXV1dXV1dXW1tbW1tXV1dXV1dXV1dXU1NTU1NTU1NGcenFpSlRdT1JVTkQ+Pzs/QEA4Ojs4PDs7PD86Ozs4Ozk5Ozw7Ojw5Ozs8Ozo9PT0+PUE/Pj8/Pj08PT88PEFBQ0FERTw+QEVGSktNRpPc1dXV1tbW1tbW1tbW1tbW1tfX19fX19fX19fX183PXDk9PT09PT09PT09PTWT8Ofn5+fn5+fn5+fn5+bV0dLS0tLS0tLS0tLS08Wtrq6urq6urq6urq6vq46NjY2NjY2NjY2NjY2SXSInJycnJycoKCgoKCcpWmNiYWJhYmJiYmJiYl6MrKmpqampqampqampqqNoZGVlZWVlZWVlZGRkYYayr6+vr6+vr6+vr6+xoWJhYmJiYmJiYmJiYmJbr+/p6enp6enp6enp6enn2djY2NjY19fX19fX19fX19fX19bW1tfX19fW1tbW1tbV1dXV1dXV1dXV1dXV1tbW1tbW1tbW1tbV1dXV1dXU1NTU1NTWo3txZElbYE5OVU9AQT89REI+Oz06OTs6PT07PDs6OTg5OTs8Ozw8Ojo7PDo7QD08PTxAQTxBQTs7PEA/PD1CP0RDQ0U8PkJERkpMTEWN3NXV1tbW1tbW1tbW1tbX19fX19fX19fY2NjY2NjNzcXCw8PDw8PDw8PDw8PCydDPz8/Pz8/Pz9DQ0NDQz87Ozs7Ozs/Ozs7Oz87NzMzMzMzMzMzMzMzMzMvJycrKysrKysrKysrKysfCw8PExMTExcXFxsbGxsvMy8zLzMzNzMzMzMzLz9HR0tLS0tLS0tLS0tLRzczMzMzMzMzMzMzMzMvP09PS0tLS0tLS0tLT09HNzc3Nzc3Nzc3Nzc3NzdTY2NnZ2dnZ2dnZ2dnZ2djY2NjY2NjY2NjY2NfX19fX19fX1tfX19fX19bW1tbW1tbW1tXV1dXV1dXV1dbV1dbW1tbW1tbW1tXV1dXV1dTU1NTU169/cF5GXmJQUVdOR0ZDQ0lBPz07PDo8OEBCPD04Ojo4OTg7Pzs8PDs7PDw8PD87PD46Pj44PkI8Pj1BPjw+QkBERUNAPD5APkNJSUtEh9zV1tbW1tbW1tbW1tbX19fX19fX19jY2NjY2NjYzs3P0NDPz8/Pz8/P0NTQ0M7MzczP09LSzs3P0s7Ozs7Ozs7Q1NLPz9DU0s/Pz9PSz8/Pz8/Pz8/Pz8/Pz8/P0NDQ0NDR0dHR0dHS09PU1NTU1dXV1tbW1tfW1tbX1tfX19fX19fX19bW1tbW1tbW1tbW1tbW1tfX1tfX19fX1tbW1tbW1dXW1dbW1tbW1tbW19bW2NjY2NjZ2dnZ2dnZ2dnY19jY2NjY2NjY2NnZ2dnZ2dnZ2djY2NjY2NjY2NjY2NjX19fX19jY19fX1tbW1tbW1tbW1tbW1tbW1dbW1dbW1tbW1tbW1tbW1tXV1dXV1NTV1di4gm9XSl9jUlFaS0hBQTxCPT07Oj4+PD4/PT0/Nzk6OTk3OD48PD47Ozw7PDs/PT0+OTs7OT0+P0A+QD07OkI/QkNCPz0+QD5CRUdKQoDc1tbW1tbW1tbW19fX19fX19fX2NjY2NjY2NjY2M7Ozs7Ozs7Nzc3Nzsqfys3Nzc3QuYOEi8fTwJrLz87Ozs7Pypal0dHIlKfS0ceSq9HOzs7Ozs7Ozs7Ozs7Oz8/Pz8/P0NDQ0NDQ0NDR0dHR0tLT09PU1NTU1NTV1dXV1dXV1dXV1dXV1dXV1dXW1tbV1dXV1dbW1tbV1dXV1dXV1NTU1NXV1dXV1dXV1dXW1tbW1tbW1tbX19fX19fX19fY2NjY2NjY2NjY2NnZ2dnZ2dnZ2dnZ2dnY2NjY2NjY2NjY2NjY2NjY2NfX19fX1tbW1tbW1tbW1tbW1tXV1tbW1tbW1tbW1tbW1tbW1dXV1dXV1dXYwIBuVU9gY1dZW0xMQ0A9PTs9Ojw+Qj5CQ0A8Ojg5ODo6Ojc7Pz4/PDw7PDo5Pzw8PTg5PD9BPj09PUFAPTtBQkBCQz47QD9BQUlHSkF629bW1tbW1tbX19fX19fX19jY2NjY2NnZ2djY2dnOzs7Ozs7Ozs7OzdKpj63Rzs7Ozpu3tqSiwJOerNPOzs7Pz5yqna3RmaycsNGZrJqy0s7Ozs7Ozs7Ozs7Pz8/Pz8/Pz9DQ0NHR0dHR0dHS0tLT09TU1NTU1dXV1dXV1dXV1dXV1dXV1dXV1dXW1tbW1tXV1dbW1tbW1tXV1dXV1dXU1dXV1dXV1dXW1tbW1tbW1tbW1tfX19fX19jX19fY2NjY2NjY2djY2dnZ2dnZ2dnZ2dnZ2dnZ2djY2NjY2NjY2dnY2NjZ2NjY19fX19fX19bW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tXV1dXV1dXV18h/b1pTYWVeXVxPSkQ9QD8+Ozc6Pjk/RD9BOTg3ODk7Ozw4OT89PTw9PD47OkE7OTs5OzxDQDw7PT5AQT49QkQ/QkM9PT8+Pz5ISUg/ddrW1tbX19fX19fX19fX2NjY2NjZ2dnZ2dnZ2dnZzs7Ozs7Ozs7Ozs/Inrym0tDQzsqgl36Cw6abr6fUz8/P0MuUiJqdxJSInJ7EkoadnM7Pzs7Ozs7Ozs7Oz8/Pz8/Pz8/Q0NDR0dHR0dLS0tPT09TU1dXV1dXV1dXV1dXV1dbV1dXV1dXV1tbW1tbW1tbV1dXV1dXW1tbV1dXV1dXV1dXV1dXW1tbW1tbW1tbW1tbW1tfX19fX19jY2NjY2NjY2NjY2NjZ2dnZ2dna2dnZ2dnZ2dnZ2dnZ2djY2NjY2NnZ2dnZ2dnY2NjY2NfX19fX19fX19bW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1dbV1dXV1dfNiHNdWGloXl9gT0lGOkFAPj88PDo2P0JAQjo2NDc6Ozo8Ojk+PD49PTs/PTxBPjw8Ojw8PTw6PEA9QEI+PkFCPUNDPT0+Oz9BRUtIQHDZ1tbX19fX19fX19fY2NjY2NjZ2dnZ2dnZ2dnZ2c/Pz8/Pz87Ozs7SrKWnqdXAvNLHnY+ey9PJipmq1M/Pz8/RvciZmcK/yZiYxbzJl5nG0M/Pz8/Pz8/Pz8/Pz8/Pz8/Q0NDQ0dHS0tLS09PT1NTU1dXV1dXV1dbW1tbW1dbW1tbW1tbV1tbW1tbW1tbW1dXV1dXV1dXW1dXV1dXV1dXV1dXW1tbW1tbW1tfX19fX19fX19fX19jY2NjY2NjY2NjY2NnZ2dnZ2dnZ2tnZ2dnZ2dnZ2dnZ2dnZ2dnY2dnZ2dnZ2dnZ2dnY2NjY19fX19fX19fX19bW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbV1dXW0JB1W1tqaWFeXVNOSTxDQEE+QD46OEZBP0M6NzQ5Ojo5Ozs4Oz0/Pj49QT08P0A9Pjw8PDw8Oj1AQD8/PT5CQD9AQkA8QD0+QUVLRz9r19fX19fX19fX2NjY2NjY2NjZ2dnZ2dnZ2dnZ2tnPz8/Pz8/Pz8/QzJ2Nl6zQmpfKxZ6ynpbN1q2ZqtTPz8/Pz9KXlJ/M0pSWn87RkpmgztDQ0M/Pz8/Pz8/Pz8/Pz8/P0NDQ0dHS0tLT09PT1NTU1NXV1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbV1dXV1dXV1dXV1dXV1dXV1dXW1tbW1tbW19fX19fX19fX19fY19fY2NjY2NjY2NjY2NjZ2dnZ2dnZ2drZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2djY2NjY2NfX19fX19fW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1dXV1tKUcl5ea2tqZV1PTEc/RENDQDo9OzxCPD49OTY0Ojk5Ojo5Nzs/QDs8PUA8PEE+PD07PTw/PDo8Q0A+PTs9QD5CPkBBPkA9QD9GSUQ/ZtXX19fX19fY2NjY2NjY2NnZ2dna2tra2tra2traz8/Pz8/Pz8/P07GigJuvyaCjv8qcpYynrdiqmarUz8/Pz9Ozm8SY2a+fwpvaraO/ndXQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NHR0tLT09PT1NTU1NXV1dbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1dXV1dXV1dbW1tXW1tbW1tbV1tbW1tbX19fX19fX19fX19fY2NjY2NjY2NjY2NjY2NjY2dnZ2dnZ2dna2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2djZ2djY2NjY2NfX19fX19bW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbSk3BgXnBoZmVaUUhHQkVDQEA3Ojo8Pjo8OTc2NTk6Njo8Ozc8QEA8Ojo9Oj0/Pj08OUA8PDo6OT9APj08PUBBQz9APz5BOz9ARkpCP2LS2NfX2NjY2NjY2NjY2dnZ2dnZ2tra29vb29vb28/Pz8/Pz8/P0M6fkGyclteqo9PSrqa1mJ/Vqpmq1M/Q0NDRzo2QnsPOi5Oex8uIlZ7I0tHR0NDQ0dHQ0NDQ0NDQ0NDQ0NHR0tLT09PT1NTU1dXV1dbW1tbX19bW1tbW1tbW1tbX1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tfW1tfX19jY2NfX19fX2NjY2NjY2NjY2NnZ2dnZ2dnZ2dnZ2dna2tnZ2dnZ2dnZ2dnZ2dnZ2dnZ2djY2dnZ2dnZ2dnZ2dnZ2NjY2NjY2NjX19fX1tbW1tbW1tbW1tbW1tbX19fX19fW1tbW1tbX0pNuYFxxZGdkWlVKQENGQ0FCODs/PD07PDw4NTU4OTY4Ozo5PDo+Pzw9PTk8Pz49Ojo+OTw6Ojg+Pzw9PTw+QEFDQT48PDpCRERKRkJd0NnX19jY2NjY2NjY2dnZ2dna2trb29vb29vb29vPz8/Pz8/Pz9G9n8O31pfA09HQ0srSzZeb1KqZq9XRz9DQ0cvaqJmvz9ulmbPQ26KZtdXR0dHR0dHR0dHR0NDR0dHR0dHR0tLT09PU1NTV1dXV1tbW1tfX19fX19bW1tbW1tfX19fW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW19fX19fY2NjY2NjY2NjY2NjY2djZ2dnZ2dnZ2dnZ2dnZ2drZ2tnZ2dnZ2dnZ2dnZ2dnZ2djY2NjY2NjZ2dnZ2dnZ2dnZ2dnY2NjY2NjY2NfX19fX19fX19fW1tfX1tbX19fX19fX19fX19bW19GRbF1cb2doYl1PRkBISUdFQDw8Pj48PT48NzU2Ojk3OTs6Ojs4QD86PDw5PD49Ozs6Pzk/Ojs5PT49Pjw7PTxAQ0I/Pz47Q0ZGR0hEWc3a2NjY2NjZ2dnZ2dnZ2dna2trb29vb29vb29vb0NDQz8/Pz8/Pz5V+e6WS1KKa08ySl6ObodirmavV0pem1cmOpZqgq5GnmaCtkKiYnrvV0dHR0dHR0dHR0dHR0dHR0tLS0tLS09PU1NTV1dXV1tbW19fX19fX19fX19fX19fX19fX1tbW1tbW1tbW1tbX19bW1tbW1tbW1tbW1tbW1tbW1tbW1tfX19fY2NjY2NjY2NjY2NjY2dnZ2dnZ2dnZ2dnZ2dnZ2tra2tra2tnZ2dnZ2dnZ2dnZ2djY2NjY2NjZ2dnZ2tnZ2dnZ2dnZ2djY2NjY2NjY2NjX19fX19fX19fX19fX19fX19fX19fX19fX1tfPjGRWXnBrXGBgTkVITUlJT0M+OkI9PUBCOzU0Nzw6Nzo7Ojo7OT09OTo6OT0+Pz07OT47PDo8Ozk+PD47PD0+QENCPz5BPEFDR0ZGRVXJ29jY2NnZ2dnZ2dnZ2dra2tvb29vb29zc3Nzc3NDQ0NDQ0M/Pz9DR1aeZrcmjqL7KnbGdo7XZqZup2Lirocq7oaann7GkpKigr6eiqZzQ09LS0tLS0tLS0tLR0dHS0tLT0tPT09PU1NTV1dbW1tbX19fX19fX19fX19fX19fX19fX19bW1tbW1tfX19fX19fW1tbW1tbW1tbX19fW1tbW1tbW1tbX19fX2NjY2NjY2NnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dra2tra2tra2trZ2dnZ2dnZ2dnZ2djY2NjY2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnY2dnY2NjY2NjX19fX19fX19fX19fX19fY2NfX19fX19fYzYZdV2JvZE9dVEtIRlNRS0xAPj1EPD9DRj01NTc7OTY6Ozo8PTo7Pzo6OTg6PT0/Pjs/Oz49Ojs5Pjs9PD0+QURCQD8+PzxAQUVHRURSxdvY2dnZ2dnZ2dnZ2tra2tvb29vb3Nzc3Nzc3NzQ0NDQ0NDQ0NDQ0NO5gL3Tm5bP1LWLkZ/T1LyBu9TOlKDT056QjbbWnJGOutWakY6+1tLS0tLS0tLS0tLS0tLS0tLT09PT09PU1NXV1dbW1tfX19fX19fY2NjY19fX19fX19fX19fX19fW1tbX19fX19fW1tbW1tbW1tbW19fX1tbW1tbW1tbX19fX19jY2NjY2NnZ2dnZ2dnZ2dnZ2tnZ2tra2tra2tra29ra2tra2tnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2NjY2NjX19fX19fX19fY2NjY2NjY2NjY2NfX2ct+WlVqaltMX01KTEpVTEZCPD0/R0ZIS0g9NjU3Ojk3OTo7Ojw9OT45OTo4Oz0+PkE+PTk8PDo9Pj46PTk5Oj9FQUA+PT8/QkBHRURFUMHc2dnZ2dnZ2dna2trb29vb29vb3Nzc3Nzc3dzc0NDQ0NDQ0NDQ0NDQ0cHR0crI0tDUxLjS0tHSwtLQ08fM0tHSusTV09O5x9bT07jI1dLS0tLS09PT09PT09LS0tPT09PU1NTU1NXV1dbW1tfX19fX19fX2NjY2NjX19fX2NfX19fX19fX19fX19fX19fX1tbW1tbW1tbW1tfX1tbW1tbW1tbW19fX19fY2NjY2NjY2dnZ2dnZ2dnZ2dra2tra2tra2tra29va2tra2tra2dnZ2dna2tnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dna2tnZ2dnZ2dnZ2djY2NjX19fX19fY2NjY2NjY2NjY2NjY19rHd1xSZ2laTlpOTFBRV0VKPz89P0FFTExBPjc3NTs4ODk5Ojs8Pjw+ODo6OTs+P0A9Pj46NTo6Oz0/Ojs5Ojw+QkJAPz8/P0FCR0RDRE683dnZ2dnZ2dna2tvb29vb29vb3Nzc3Nzc3d3d3dDR0dDQ0NDQ0NDQ0NDS0NDR0dDQ0dPU0dHR0dPR0dHS0tHR0tXU0tLS1dTT09PW1NLS0tPT09PT09PT09PT09PT09PU1NTU1dXV1dbW1tfX19fX2NjY2NjY2NjY2NfX19jY19fX19fX19fX19fX19fX19fX1tbW1tbW1tbX19bW1tbW1tbW1tfX19fX2NjY2NjY2NnZ2dna2tra2tra2tra2tra2tra2tvb2tra2tra2trZ2tra2tra2tra2tra2tnZ2dnZ2dnZ2dnZ2trZ2tra29ra2trZ2dnZ2dnZ2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjbwXNYVWlrU0xSTlBSWVRGSTw+Qz9BQkVLPj43ODY5Njc4OTk7Oz0/QDw9ODk7Ozs/Pjw8OTU6PT47OTk7PD8/P0JCQT1BPUBBQkZCQkJLtd7Z2dra2tra2tvb29vb29vc3Nzc3Nzd3d3d3d3R0dHR0dHR0dHR0dDQ0NDQ0NDQ0dHR0dHR0dHR0dHR0dHS0tLS0tLS0tPT09PT09PT09PT09PT09TU1NPT1NTU1NTU1NXV1dXV1dXW1tbX19fX2NjY2NjY2NjY2NjY19fY2NjX19fX19fX19fX19fX19fX19fX19fW1tbX19fX1tbW1tbW1tbX19fX19jY2NjY2NnZ2dna2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tnZ2dnZ2dnZ2NjY2NjY2NnZ2dnZ2dnZ2NjY2NjY3LxvVFRsbExLUkpUUlVLRkQ6PkdEREFERjw/ODk6OTY5OTo3PD07PkA9PTc5Ojs5Pjs5OTY2Oj1AQT47PDk6Pj9DQT4/Qj0+QkNFQkFCSrDe2dra2tvb29vb29vb29vc3Nzc3Nzd3d3d3d3d0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0tLS0tLS0tLS0tLS0tLS0tPT09PT09PT09PT09PT1NTU1NTU1NTU1NTU1dXV1dXV1tbW1tbW19fX19jY2NjY2NjY2NjY2NjY2NjY2NjY19fX19fX19fX19fX19fX19fX19fX19fX19fW1tbW1tfW19fX19jY2NjY2NjZ2dnZ2dra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2trZ2dnZ2dnZ2djZ2dnZ2dnZ2dnZ2dnZ2dnY2Ny2a1NbcGtLVVdSXFFXSEQ+PEJKRT1ISj89PDc4ODo1OTg5Njs+PD1APDw1OTk8Oj87OTk0ODw9PUFBPD47Ojw+QD89PkE9PUNGR0I/Qkmq39ra29vb29vb29vb3Nzc3Nzc3N3d3d3d3d3d3dHR0dHR0dHR0dHR0dHR0dHR0dHS0M/U0M7P0tLT0tLS0tLS0tLS0tPT09TU1NTU1NPU1NTU1NTU1NTU1NTU1NTV1dXV1dXV1dbW1tbW19fX19fY2NjY2NjY2NjY2NjY2NjY2NjY2NjX19fX19fX19jY2NfX19fX19fX19fX19fX19fX19fX19fX19jY2NjY2NjY2dnZ2dra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tvb29va2tra2tra2tra2tra2tra2tnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dndsGRTYXJfT1pUV19RUkdCPUVJTEFBTEQ/Pzs5ODg5Mzg2ODY5Pj0+Pz06Njo7Pjs9PTo5Njg6PTtAQDxAPz0/P0I+PD48PEJFSElCPkNJpODa29vb29vb3Nzc3Nzc3Nzc3N3d3d3d3d3d3t7S0tLS0tLS0tLS0dHR0dHR0dPT0bm7zLqbnLrQyNPT0tLS09PT09PT09PU1NTU1NTU1NTU1NTU1dXV1dXV1dXV1dXV1dbW1tbW1tbX19fX19fY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjX19fX19fX19fX19fX19fX19fX19jY2NjY2NjY2NjZ2dra2tra2tra2tra2tra2tra2tra2tra29va2tra29va2tvb2tra2tra2tra2tra2trb29vb29va2tra2tra2tra2tra2tra2tra2tnZ2dnZ2trZ2dnZ2dnZ2dnZ2dnZ3qpfVWBuW1VZUVpeT0xHQ0ZNSUZEREo7QUE7PDg4NjQ4Njk4Nzw/QT89Ojc8Pz48Pz87OjY4OD09QEE9QD5BQD1AOjs6Pj1BRUdKQkBDR57h29vb29vc3Nzc3Nzc3Nzc3d3d3d3d3d7e3t7e0tLS0tLS0tLS0tLS0tLS0tO+wMqaoKKViJGeqpOpz9TT09PT09PT09PU1NTU1NTU1NTU1NTV1dXV1dXV1dXV1dXV1tbW1tbW1tbX19fX19fY2NjY2NnZ2dnZ2dnZ2dnZ2djY2djY2NjY2NjY2NjY2NjY2NjY2NjX19fX19fX19fX19fX19fX19fY2NjY2NjY2NjZ2dna2tra2tra2tra2tra2tra2tra29vb29vb29vb29vb29vb29vb29ra2tra2tra2tra2tvb29vb29va29vb29vb29va2tra2tra2tra2tra2tra2trZ2dnZ2dnZ2dnZ2d6iXFVeblheXU5aUFROQ0NMSUlJRkpEPEJBPDs4NzY3OTc3OTk9P0E/PDo5QD88PkI/Ojg3NzY9Pz9APUBBPz88PTs7OD48P0VJSEE/Q0aX4dvb29zc3Nzc3Nzc3N3d3d3d3d3d3t7e3t7e3tPT09PT0tLS0tLS0tLS0tTIlZyum5m1iX2TjIKBhMTV09PT09PT09PU1NTU1dXV1dXV1dXV1dXV1dXV1dXV1tbW1tbW1tbW1tfX19fX19fX2NjY2NjY2dnZ2dnZ2dnZ2dnZ2dnZ2NjY2NjY2NjY2NjY2NjY2NjY2NfX19fX19fX19fX19fX19fX2NjY2NjY2NjY2dnZ2dnZ2dna2tra2tra2tra2tra29vb29vb29vb29vb29vb29vb29vb2tra2tra2tra2tvb29vb29vb2tvb29vb29vb2tra2tra2tra2tra2tra2tra2tra2tra2tnZ2dndmlpYYW5ZYVdPV01QRUJETElNS0ZJRT5CRDk4ODY3OTc1Njk4PT1BPjo4OT4+PD9APzw1Njc2PD4/PjtAQEA/Pj4/Pjs/PkFCRkdCQENIkeLb29zc3Nzc3d3d3d3d3d3d3d7e3t7e3t7f39/U09PT09PT09PT09LS0tLTz6h+kayPko6MhoCIiYSQo8rU09PT09PU1NTU1dXV1dXV1dXV1dXV1dbW1tbW1tbW1tbW1tbW19fX19fX19fX2NjY2NjY2dnZ2dnZ2dnZ2dnZ2dnZ2dnY2NjY2NjY19jY2NjY2NjY2NjY2NjX19fX19fX19fX19fY2NjY2NjY2NjY2NnZ2dnZ2dna2tra2tra2tra2tra29vb29vb29vb29vb29vb29vb29vb29ra2tra2tra2tvb29vb29vb29vb29vb29vb29va2tra2tra2tra2tra29vb29ra2tra2tra2tna3JJaWWNuWlpSVV5QTDxAR05IUklIRT47SEY4OTc1Nzg3NTg5ODs+Pj07ODlBPj1AP0E+NzU5Njs+QUI/P0BAQkI/Pj8+QUBEQUZIQj9FSozi3Nzc3Nzc3d3d3d3d3d3e3t7e3t7f39/f39/f1NTU09PT09PT09PT09PWtaWaiIuQhYCFi4iBg4qLf4bC1tTU1NTU1NTV1dXV1dXV1dXV1dXW1tbW1tbW1tbX19fX19fX19fX2NjY2NjY2NjY2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2djY2NjY2NjY2NjY2NjY2NjY2NjY2NjX19fX19fX19fY2NjY2NjY2NjY2dnZ2dna2dra2tra2tra2tra2tra2tvb29vb29vb29vb29vb29vb29vb29vb29ra2tra2trb29vb29vb29vb29vb29vb29vb29vb2tra2tra2tra29vb29vb29vb29vb2tra29uIWltnalxYTFpfVkg6TEhMSkpDRUVDQExINzo3Njc4ODU4Nzg5PDw7Ozk4QD89Pj8/PDY3PDQ3P0JCQUBAPz8/QT09P0A+QEBGRT09REuI4tzc3Nzd3d3d3d7e3t7e3t7e3t/f39/f39/f39TU1NTU1NPT09PT09PUxZKCg4WGfYGCfXx5foGCg36k29bU1NTU1NTV1dXV1dXV1tbV1tbW1tbW1tfX19fX19fX19fX19fX19jY2NjY2NjZ2dnZ2dnZ2dna2tnZ2dnZ2dnZ2dnY2NnY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjX19fX19fY2NjY2NjY2NjY2dnZ2dna2tra2tra2tra2tra29vb29vb29vb29vc3Nzc3Nvb29vb29vb29vb29vb2tra2tra29vb29zb29zb29vb29vb29vb29vb29vb29va2tvb29vb29vb29vb29vb29vb2tvZgFpebWhaU0ldW1hKRE1ISlNMR0ZBQD9KQjg7NjY5OTc1ODY4Ozo7Ojw5OD09O0A9Ozo2NTw3Oz1CQEFBPD49QEE9PEA/Pz5CREU+PERLg+Lc3d3d3d3d3t7e3t7e3t7f39/f39/f39/f39/V1dTU1NTU1NPT09PT2LKEkKh9g3l2hIh/e3d5gn5+i67A1dTU1NXV1dXV1tbW1tbW1tbW1tbW1tfX19fX19fY2NjY2NjY2NjY2NjY2NjZ2dnZ2dnZ2dna2trZ2dnZ2dnZ2dnY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2dnZ2dnZ2tra2tra2trb2tra2tvb29vb29vb29vc3Nzc3Nzc29vb29vb29vb29vb29va2trb29vb29zc3Nzc3Nvb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vc1nlcWmxmWFJPYFFSQUhHSkZYTEZAQENDSz87Ozc4ODc2NTc2ODo5PDw6PTs/PTs9Pjw7ODg8OT0/QkFCQzw8P0FCPj1BQkNCREVDQDtDTH3h3d3d3d3e3t7e3t7e39/f39/f39/f39/g4ODg1dXV1NXU1NTU1NPU0ruen3WKeXuIgICChYGDcnOAhYOMrNfV1NXV1dXW1tbW1tbW1tbW1tbW19fX19fX2NjY2NjY2NjY2NjZ2dnZ2dnZ2dnY2NnZ2dna2tra2trZ2dnZ2dnZ2djY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2dnZ2dna2tra2tra29vb29ra2trb3Nzc3Nzc29zc3Nzc3Nzc3Nzb29vb29vb29vb29rb29vb29vb29zc3Nzc3Nzc3Nvb29zc3Nzc3Nvb29vb29vb29vb29vc3Nzc3Nzc3Nvb29vb3dByXV9wZVdLUGNPS0JHQ0pIS0ZBPEE9SFBBOjo3Nzg3Njc4Nzw6OD09PD47QD88Pz07Ojs5Ojk8QEJAQkNAPUFAPz1AQkNDQUBAP0A7RU144N3d3d7e3t/f39/f39/f39/f3+Dg4ODg4ODg4NXV1dXV1dXV1NXU18h4i4V8goh6g4SBfoKCc2l0hYuGkJ3U1tXU1dbW1tbW1tbW1tbW19fX19fX19jY2NjY2NjY2NnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dra2tra2tra2dnZ2dnZ2dnY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2dnZ2dna2tra2tra2tra2tvb2tvb3Nzc3Nzc3Nvc3Nzc3Nzc3Nzc29zb29vb29vb29vb29vb29vb29vc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc29vb297KalxjcWVST1heSz9HTElPS0VAPkFCP0lPPjk6NzY7NzY6Ozc7Ojg6PDw+Oz09Oz48Ojs4OTo4OUFCQkFAQDtAQj06PkFCQz8+PT4/PUZOdN/e3t7e3t7f39/f39/f4ODg4ODg4ODg4ODg4OHV1dXV1dXV1dXV1s6dhpl+f5OTin+CgXx9gnNxm4mAgoOJwNnat7TQ19bW1tbX19fX19fX19fX2NjY2NjY2NjY2NjZ2dnZ2dnZ2dnZ2tnZ2dnZ2dra2tra2tra2trZ2dnZ2dnZ2dnZ2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NnZ2dna2tra2tra2tra2tra29vb3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nvb29vb29vb29vb29vb29vc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3NvfwGNaW21gVlBTU0pETEhNSEk8PkFEQ0ZORDw8OTc5OjY4Ozk3PDk4OTw9OzlAPjpBPzw3NTc7ODpAQUVBPz45PUI/Oz1CQkI6Pj07PT5GTnHe3t7e3t/f39/f39/g4ODg4ODg4ODg4OHh4eHh1tbW1tbW1tbV1tjLioCHhYOXjHh7e3lvfYF1a3ebdHZ7eInHxpiMrdjZ19fX19fX19fY2NjY2NjY2NjY2NjY2NjY2dnZ2drZ2dna2tra2tra2tra2tra2tra2tra2dnZ2dnZ2dnZ2dnZ2dnZ2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NnZ2dnZ2dnZ2dna2tra2tra2tra2tra29vb3Nzc3dzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nvb29vb29zb29vb3Nzc3Nzc3Nzd3dzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3d3d3d3d3Nzc3Nzc4LdjV1lrYlJNVVFMSktGS0ZDQD5CQT9FTT4+PTg5OTo3OTo3NT03Nzo+PDs7Qjw5Pz05NjY4PTk6QEJGQD49PEBCREA9QD9DO0A9PD4/Rk9t3N/e3t/f3+Dg4ODg4ODg4ODg4OHh4eHh4eHh4dbW1tbW1tbW1tfVrYZ6d32rn3l4entzdH+Dfm9xe3l6c3t2k4qFgImkzdnY19fX2NjY2NjY2NjY2NjY2NjY2NjY2NnZ2dna2tna2tra2tra2tra2tra2tra2tra2tnZ2dnZ2dnZ2dnZ2dnZ2dnZ2djY2NjY2NjY2NjY2NjY2NjY2NjY2dnZ2dnZ2dnZ2dra2tra2tra2tra29vb29vc3Nzc3N3d3d3c3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc29vb29vc3Nzb3Nzc3Nzc3N3d3d3d3d3d3dzc3Nzc3Nzd3d3c3Nzc3Nzc3N3d3d3d3d3d3d3d3dzc3OGtYVtebGJSTVZMTUdLS0RGQkI7QT08RUxDQT44Ojk6Nzc5NjY6NTs+QDs9Oz89PD89Ojk5Ojw5PEVDRkA/PkBDQkQ9OT0/QT1CPz1APkdPadvf3t/f3+Dg4ODg4ODh4eHh4eHh4eHh4eHi4uLW1tbW1tbW1tfQmH+Qh4N9eoN2e3Vzenl6kKqmd3JyfoeHh4CAfoKEhJHJzNnX19jY2NjY2NjY2NjY2NjY2NjY2NnZ2dnZ2tra2tra2tra2tra29va2tra2tra2tra2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2djZ2dnZ2dnZ2djY2NnZ2dnZ2dnZ2dnZ2tra2tra2tra2tra29vb29vb3Nzc3N3d3d3d3d3d3d3d3d3d3d3c3Nzc3Nzc3Nzb29vb3Nzc3Nzc3Nzc3Nzd3d3d3d3d3d3d3dzc3N3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3NzhpV9UYm1iUE9TSUhHRkpJSUJBPkJCPEVFREA+ODo4Ozc3Ojc4ODY+Pz07PDk9PDo+PTs6Njc7NjpEQUY+Pz8/PkNBPzs9PT47REM/PjxIT2fZ4N/f3+Dg4ODg4eHh4eHh4eHh4eLi4uLi4uLi1tbW1tbW19jYyH52doN+fnR2eIaCenl1d5yhu6GEgoCAfoeKinx/gYaMnKjO2NjY2NjY2NjY2djY2NjZ2djY2NjY2dnZ2dra2tra2trb29rb29rb2tra2tra2tra2tnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dna2tra2tra2tra2tra2trb29vb29zc3Nzc3N3d3d3d3d3d3d3d3d3d3d3d3dzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3e3t7e3t7e3d3d3d3c35pbT2drXFBRUElDT0pLR0xHSkJAP0FHREBBPDg8ODg1ODk3Njc3QEA/Ozw5Pj04PTw8Ojc4PTk/RENGPkE/QkBDPzw6Pj0/PkVEPz07S1Fj1+Hf4ODg4ODh4eHh4eHh4uLi4uLi4uLi4uLj49bW1tbW19XB3LRueHJze3B6eXaFiIR7eH2AgZiljH98fnuRhZaLhoGDgY6Rvd3Z2NjY2NjZ2dnZ2dnZ2dnZ2dnY2dnZ2dna2tra2trb29va2tva2tra2trb29ra2tra2tnZ2dnZ2dnZ2dnZ2dna2trZ2dnZ2dra2tra2tnZ2dnZ2dna2tra2tra2tra2tra2tra2trb29vc3Nzc3Nzc3N3d3d3d3d3d3d3d3d3d3d3d3d3d3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3e3t7e3t7e3t7e3t7e3t7e3t3d3d6NWFdobllQUUtISlNJTUhNSUtBQz9DRkJBRDo6PDg2NDg4NzY2Nj8+Pjo8OTw7Oj09PDw4Ozw7RERERT4/PkI+Qj84PT8/Q0NCQEE+O0xUY9Xh3+Dg4OHh4eHh4eLi4uLi4uLi4uLi4uPj4+PW1tbW1teslLZ6eHJvd5V7dHuLgHh1bn6Fg3t/hYhyfH2bnI6JioJ+g32Hk5rH1NjY2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dna2tra2trb29vb29vb29vb2tra2tra2tra2tra2tnZ2dnZ2dnZ2dna2tra2tra2tra2tra2tra2tra2tra2tra2trb2tra2tra2tra2trb29vc3Nzc3Nzc3Nzd3d3d3d3d3d3d3d3d3d3d3d3d3d3c3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3N3d3d3d3d3d3d3d3d3d3d3d3d3e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3d7Zf1lgaGxcUUtHR09LTk5PTURGQkg/Q0hEREA6Ozs4NzU3Nzc4NThAPkA7PDk8Ozw+Ojk7OTk7OUZERUI8QD4/PEBDOz5AP0A/Qj8+OjtKVWPV4eDg4eHh4eHi4uLi4uLi4uLi4uPj4+Pj4+Pj1tbX19vKhYR3cXJubniVhHt4hH95dnB4c3eLkY6CdnN9ioaId3d1d4ODfIiIk8Pb2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dra2trb2tvb29vb29vb29vb29rb2tra2tra2tra2tra2tnZ2dnZ2dna2tra2tra2tra2trb2tra2tra2tra2tra2trb29vb29ra2trb29vb29vb3Nzc3Nzc3Nzd3d3d3d3d3d3d3d3d3d3d3d7e3d3d3d3c3Nzc3Nzc3Nzc3Nzc3Nzc3d3d3d3d3d3d3d3d3d3d3d3d3d7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7f0nVZaGlqVk5KSE1OR01EUElGSD9FPUZMREM+Ozs8OTc3OTY2OTU4Pj4/PTs8QDs9PDo3Ozc5OThHREVCPUE9Qj8+QDw/QUE/QEJAPjs8S1Ri1OLg4eHh4eLi4uLi4uLi4+Pj4+Pj4+Pj4+Pj49fX19fEknuJf29sbnV2foSBg4qGfnVybWVtiIaKjoR7c4OHint4e4OPj4GEioqxztrZ2dnZ2dnZ2dna2tra2tra2tra2trb29vb29zc3Nzb29vb29vb29va2tra2tra2tra2tra2tra2tra2tra2tra2tra2tvb29va2tra2tra2tvb2tvb29vb29vb29vb29vb29vb29zc3Nzc3Nzc3d3d3d3d3d3d3d3d3d3d3t7e3t3d3d3d3d3d3d3d3dzc3Nzc3Nzc3d3d3d3d3d3e3t7e3t7e3t7e3t7e3t7e3t7e3t7f39/f39/f39/f39/f3t7e4clsW2pqalNOR0hOT0VIRk1JSUA7RD5ISUA9PDo6Ojg2ODo3Nzk0OD08PT07ODw8PDw4Njc4OTo6RUJFQT9APEI/Q0M+PkNEQUBAP0A8PUtRYdPj4OHh4uLi4uLi4uPj4+Pj4+Pj4+Pj4+Pj5OTX19fZqXaFfnx3bHB3eXh8jH2KhYB3anN0d3p9bot7fnl6foR/gIGDfnh8foeGlrbT2tnZ2dra2tra2tra2tra2tra2tvb29vb3Nzc3Nzc3Nvb29vb29vb29ra2tra2tra2tra2tra2tra2tra2tra29ra29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb3Nzc3Nzc3Nzc3d3d3d3d3d3d3d3d3d3d3d7e3t7d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3t7e3t7e3t7e3t7e3t7e3t7e3t7e39/f39/f39/f39/f39/f39/e3uO9amFpa2lRTkZNTEtKWE1OR0FAQE9BQz9AOzw4OTk5Njg2NjY4NDs+PD07OTY6Ojk6OTU4OTg5OkJERj8+Pj5AQEBCPzxBQD88Pj9BOT5KT17S4+Hh4eLi4uLi4+Pj4+Pj4+Pj4+Pj4+Tk5OTk19fX2sqKhIB5c29tcXN1d4CUeHaAfHWHhXd1cnWgmXp7d3Z5doR0bWxue3iAmouTu9za2tra2tra2trb29vb29vb29vb29zc3Nzc3Nzc3Nzc3Nzc29vb29vb2tra2tra2tra2tra2tra2tra2tra29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vc3Nzc3Nzc3Nzc3d3d3d3d3d3d3d3d3d3d3d3e3t7e3t3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3t7e3t7e3t7e3t7e3t7e3t7e3t/f39/f39/f39/f39/f39/f39/f397js2lpbmloUFBPTExPUk9LU0Y/RURERD48PDg7ODc5OTU2ODY2NzM6Pjs+PTc6Pjk5OTk2Ojo4NzxDRUc/Pzs/PkA9PkE9Oz0+OUFAQDhBTlFc0OTh4eLi4uLj4+Pj4+Pj4+Pj4+Pk5OTk5OTk5NjY2NjauY6AenZ1bmpveHCBfWt0cnZ3hIV5h4d5lY55eXp1d3pza298gHx2fYh8gLLe2tra2tvb29vb29vb29vc3Nzc3Nzc3Nzc3dzc3Nzc3Nzc3Nzb29vb29rb29vb29ra2tra2tra2tra29va29vb29vb29vb29zc3Nzb29vb29vb29vb29vc3Nvb3Nzc3Nzc3Nzc3Nzc3Nzc3d3d3d3d3t7e3t7e3d7e3t3d3t7e3t7e3t7d3d3d3d3d3d3d3d3d3d3d3d3d3t7e3t7e3t7e3t7f39/f39/f39/f39/f39/f39/f4ODg4ODg4N/f39/f4qpqa2hrZFNQT0ZQVFJOSFJLPkREQ0I7Ozk6Ojg2Nzg1NjY4ODg0Oz88Pzw5PDw3Ozo6Nzo6Nzo9Q0JDPUE+Pzw5PT5BQDs8PDtFQD47Q05TXNDk4eLi4uLj4+Pj4+Pj4+Pj5OTk5OTk5OTk5OTY2NjZ1p5vdntveHh2cG50d3BwdHBzb36Jc3qGhY2EenNtcoB6hn1vg5OBdnx9g4a13drb29vc29vc3Nzc3Nzc3Nzc3Nzc3Nzc3d3d3Nzc3Nzc3Nzc3Nzb29vb29vb29vb29ra2tra2tvb29vb29vb3Nzc3Nzc3Nzc3Nzc3Nzc3Nvb29vb29vc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzd3d3d3d3d3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3d3d3d3d3d7e3t7e3t7e3t7e3t7f39/f39/f39/f39/f39/f39/g4ODg4ODg4ODg4ODg4N/f3+KgbWhma2ZVVlJHUFFOS0xMRUJIRUc9OD08Ojo3Nzg2Nzc2NTY3NDg+PD09Ojg6OD46Ozc4Nzc6Oj5DRDtDQj49OD1AQUM/Pjw+RTw+PUJNUF/S4+Hi4uLj4+Pj4+Pj4+Pk5OTk5OTk5OTk5OTk2NjY3MB2doCCfnp4eHBsdXlya399bHNvdGdoaYB/aWl4c2d+iYl4cIKGe3d9foWKvd3b3Nzc3Nzc3Nzc3Nzc3Nzc3d3c3Nzc3N3d3dzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nvb29vb29vb29vb3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzd3d3d3d3d3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7f39/f39/f39/f39/f39/f4ODg4ODg4ODg4ODg4ODg4ODg4ODflGttZm5mU1NJUFlUTEhGTkZGRUJGPTs+PDs5Nzc4NTc5NjQ1NzU4PDs9Pjo6OztAOTs7ODc6OTlAQkE8QUE/Pzk/QEJFQ0FAQEM7Oz1ES01g1uTi4uLi4+Pj4+Pj4+Pk5OTk5OTk5OTk5OTk5NnZ2tmYc3uqhJaCcnR1dn14aGx8d2h4d25rcHR5gIJ3dHyBhIJ9c3CAin94gn95g8je3Nzc3Nzc3Nzc3Nzd3d3d3d3d3d3d3d3d3N3d3dzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nvb29zc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3N3d3d3d3d3d3d3d3d3d3d3d3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e39/f39/f39/f4N/f39/f3+Dg4ODg4ODg4ODg4ODg4ODg4ODg4ODh24tubWdzY1lRTVVbV0hDSUZOS0dCRD8/Qjo7OjY2NzU2NzY0ODc2Ozw7Pj86PDk8Qjg3OTo6Ojk6QUFCQUJDQEE+PT9CQ0NEQUJGOTg9REpOYtjk4uLi4+Pj4+Pj5OTk5OTk5OTk5OTk5OTk5OXZ2drcqHGCtXiRfnNsem6EgXaCfWtoan+DeHZ8dX2FhXRmcHl9d316gIqFe318foC03tzc3Nzc3N3d3d3d3d3d3d3d3d3d3d3d3dzd3d3d3dzc3N3c3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzd3Nzd3d3d3d3d3Nzc3Nzc3Nzc3Nzc3N3d3d3d3d3d3d3d3d3d3d3d3d3d3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e397e3t7e39/f39/f39/f39/g4ODg4ODg4ODg4ODg4ODg4ODg4ODg4eDg4ODg4ODg4tiFb3FrdWFWT1VVXE9ETUY+SkdKRUQ8P0I6PDk4Njg0NTY3NDc2NDk7Ozw7OD47PEE4ODo9OD04Oj09QEBAP0FCP0A+QENCQ0FBRTc2O0RMTmPa5OLi4+Pj4+Pj5OTk5OTk5OTk5OTk5OTk5OXl29ra3Z5sbnNxhY1ybXBuf391hH5rcnZ2enN4gXhzb3VwbWt2fHmFiIB/f392coODsd/c3Nzc3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3Nzd3d3c3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3N3d3d3d3d3d3d3d3d3d3d3d3d3c3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e39/f39/f39/f39/f39/f39/f39/f39/f39/f4ODg4ODg4ODg4ODg4ODg4ODg4OHh4eDg4eHh4eHh4eHh4OLXhW1xb3ZeUldTWlpRSkhDQFFAQkQ8OT9BOjw5NzU3NDU2NjQ3NTY9PDo9PTk+OjxAODo6PDY7OTs+PUJCQjtBQkBDQEBEREM8PUA3OjxFS01l3OPi4uPj4+Pj5OTk5OTk5OTk5OTk5OXl5eXl5dPOxsB+cWxveHt2b3VuanNzbZKGeG50dG5vdIZ/b2twboJ0bXZyfY2DdnF/d3mKgabf3Nzc3d3d3d3d3d3e3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3dzc3d3d3dzc3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3t7e3t7e3t7e3t7e3t/f3t7e3t7f39/f39/f39/f39/f39/f39/f39/f39/f39/f4ODg4ODg4ODg4ODg4ODg4ODg4ODg4eHh4eHh4eHh4eHh4eHh4eHi1oZucG1xYFJZUFdfWUpMTElSP0Q9OTtCRjs6OTc0NTY1NzU0NjY2Pj07Pz45PTk7Pjg9Ozo0ODtAQENCQ0FCRkE/Q0BBQkREOz0+OTs8QkxNZODl4+Pk5OTj4+Tk5OTk5OTk5OTk5eXl5eXl5eW5t7Woc3JscHd6dHd4bXFydXd/hHRyc2xsa3F8bnBudGuBf3GAd32Eg355gHNygYqg2d3c3d3d3d3d3d7e3t3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3e3t7e3t7e3t7d3d3d3t7e3t7e3t7e3t7f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f4ODg4ODg4ODg4ODg4ODg4ODg4OHh4eHh4eHh4eHh4eHh4eHh4eHh49WHcWxqbF5YWlVXYFZWUE9QTD1BOjs8RkE4Ojg3MzY1Njk2NTg1Nz89Oz8+OT04Ozw5PTs7NTo9Q0JCPENDREREQUE/PkJDQzw9Pjg5PENLS2PN0dnh1sjY4+Tk5OTk5OTk5OTk5eXl5eXl5eXltbW2q3J5cm59f3Z1d2hqaGlwb3Zta2tnZWZxdG15gG5teXd2iHhxa2podXV5dHV/wd/c3d3d3d3d3d3e3t7e3d3d3d7d3d3d3d3d3d3d3t7e3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3e3t7e3t7e3t3d3d3d3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f4ODg39/g4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4OHh4eHh4eHh4eHh4eHh4eHi4uHh4ePVhnFwY2lhV1NZV19MUk9STUtAPjg5O0E+ODc5NjQ3Njc6NjY2NDk+Pzo8Pzo/OTo6Nzo9PDk5PEFBPTtBQ0VDRkA+Pj5BRUQ+QEE3OD5GSEpesrW4wbm1u8jg5eXl5OTl5OXl5+fn5+fm5ebm5ra2tbWOfX5weoR1cnZnYmNlbGtyb2ZpbHZtd4Z9hXlsbHd4a3ZwfH14c3V5fHd2h7ng3d3d3d3d3d7e3t7e3t7d3t7e3t7d3d3d3d3d3t7e3t7d3t7e3t7e3t3d3d3d3d3d3d7e3t7e3t7e3t7d3d3d3d3d3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4OHh4eHh4eHh4eLi4uLi4uLi4uLi4eHj1Yd1bl5uY1pUU1hXS1NLSk1SR0E4Ozs+PDk4NzU2NTY2OTY4NjY5Pzw6PT07Pzo7Ozk8PDs5Oj4+Pjs8PUFEQkNBQEBBP0JDPDw9Nzs+REVKXrG1tLW2t7e2y9rJ3uXl3eDi3tXU1tPU4OPg39+2treuh3t/bnmNenJ1bWNobGxtaXR4enF5enqIh4N6aWh9cWRvcXyGgX55e318e4an2t7d3d3d3d7e3t7e3t7e3t7e3t7e3d3d3d3d3t7e3t7e3t7e3t7e3t7e3t3e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t/f39/e3t7e3t7f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4OHh4eHh4eHh4eLi4uLi4uLi4uLi4uHh49aGdmxhb19dV1lcWlJQSEpXTEVHPUA9Ozs9OTY0NjU1NTg2NzY3OD87OT09PDw5OTw6Pjw6OTg+Qjs7Pj5AREBDRUFAQD0/QDw9PTU5PEJHRl2xtbW2uLm5ubq9uMPT0r3BwcC6u7y6u8TMxb/Dt7e3hGl1gX1ndYd5Z3Vxa2t5eHB3fH15bWl3e3h3bml1j4FwbHl4d3d9gXuGgnmAoNze3d3d3t7e3t7e3t7e3t7e3t7e3t3d3d3d3d7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t/f39/f3t7e3t/f39/f39/f39/f39/f39/f39/f39/f39/f39/f4ODg4ODg39/f39/f39/f3+Dg4N/f4ODg4ODg4ODg4ODg4ODg4ODg4ODh4OHh4eHh4eHh4eHh4eHh4eHh4uLi4uLi4uLi4uLi4uLi4ePXhXJrZ3RhW1hYX15TVVVRVUpMRj9JRDs5PTY2NDc3NTc4Nzc3ODk8PDo+PDg8Oj0+OTs8OTs5P0E8PT9DP0FARUJCQTw9Q0A6Pjw1NDlER0dasbW1tre5ubm5ubm3ubm4uLm5urq6urm5urm6u7e3uX9ucHN6b3B/eXNuc3Vsc3Z4cXFwb2tvcX6Bc2mHhIF9dHOHdW11hYmBgHJ2hafd3d3d3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7f39/f3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f4ODg4ODg4ODg39/f3+Dg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4eDg4eHh4eHh4eHh4eHh4eHh4eHh4eHh4uLi4uLi4uLi4uLi4uLi4uHj14lxa2xyW1dXXWBUUVVUUFJPSkNATUE9Ozk2NTM0NjQ2ODc3Nzk6Pjs8Pjs5PDo8PDk8PTw7PT0+PUNEREBDQkE/QD48PkE8OD06NjY6QkpIWLG1tLa2uLm5uLi5uLe3uLi5urq5ubi4uLi6uru3uKx7cnhxf3ZzfnBsbXpyZ29sbW50cHt3d3Jyd3pvhpJ2f3x8enZ5fH9zfYdyda3T393d3d7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e39/f39/f39/f39/e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f4ODg4ODg4ODg4ODg4ODg4ODf3+Dg4ODg4ODg4ODg4ODg4ODg4eHh4eDg4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4uLi4uLi4uLi4uLi4uLi4uLi49eHb2pxalVWV2FbT1FSUE5XSURESUo/Ojk6NzUzNDk1NzY2Nzg4Ojw7PD46PDo6PTw5PDw9Oz09PDs9REdEQ0E8PDw8Pj5AOzg8ODE1OkFGRVautbW1tre4uLm4uLi4uLe4ubq5uLi3t7i4ubq7t7mqcnB4d3x7e4J3aG5xam9qY2lyf21zcn54dHFsanaAeX2AgH91doB1a4qLgHaR1d/d3d7e39/f3t/f3t7e3t7e3t7e3t7e3t7e3t7e39/f39/f39/f39/f4N/e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t/f39/f39/f39/f39/f39/f39/f39/f3+Dg4ODg4ODf4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHi4uLi4uLi4uLi4uLi4uLi4uLi4uPYhm1sdGVWUFxnWE1YU1JRWUVDS1BOOzk4ODc1NTM5NTY2NzY4Nzk+OT0+OTw5OTw7Njg5OTo8QEA9PkBGQEJCQDo+PEE9Pzs7OzYxNjxCR0RQqLa1tba2tre4t7i4uLi4uLm6ubi4t7e3t7e5ure2tIlyd3h9iXxwem99c2hqbGdnbHRscXd0cWx2c3Fxd3FyfHl4g3Z7d2mLkYp9kM7f3d7e3tvY2drZ297f39/e3+De39/f3Nvc3N3e3uDg3+Dg4ODf3t7e39jS397f397e3t/f3t7f3t/f3t7e3t7e3t7e3t7e3t/f39/f39/f39/f39/f39/f39/f4ODf4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODh4eHh4eHh4eHh4eHh4eHh4eLi4eLi4uLi4uLi4uLi4uLj4+Lj4+Li4uPj4+Pi4uLi4+Lk14NoZ3VkVlVkZVdKWllXW1Q9RU1LSD04NzU3NjQzOTQ0Nzc1Njc5PTo9Pjw9PDk7PDk5Oj45PD4/PkFBQ0FFRUQ+OzxBPjw5PDs3Mzc+REhFSqG2tbW1tbW2tre4uLi4t7e4uLi3tra2tra3uLm2traLfXpsbHp/cGx5dm5qaGdlcXp4b2lvb3B1c21zd4Fnb32CgYNyf3lqcHJ6f6ng393Zy8a/vL2/vsLN0tDW3tnc4NfQzcPCw8PH1dfT2dzX1NjX0MfExce9vM/Kz87Y3djO3N3c2t3T0dze39/e397e3t7e4N/f39/f39/f39/f39/f39/f4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4OHh4eLi4uLi4uLf4uPi4eLg4d7W29/Sw8rJx9Hb3OLk4eHg2dre1sbExcTN2trf5OHi4trX3st9aWZxYVleZWFNTFRLUlpMO0hNSEZBPTc2NjUzNDY2NDg3NjU2OTw7Pj46Pjk5PDk3OTs7Oj49PEBAQ0RCR0ZCQT08Q0A9OTw7Nzc3P0RGRkaZtrS1tbW2tra4uLi4uLi3uLi3s7W2t7a3t7i5tba3opdxb29waW50dnFmZWNrbmdvcm1mZ2tygWVvdnyAeGRzj39zaHFyaWVlbm+w39HFv7u5ubm5ubq6uru6vc3Gw8e/urq6uru7u8HCvcHFvby/vry7urq5ubq6ubm6w8XDucDDwby/ube/z8/U3tjc3t/g3tLa4N/f4ODg39/f39/f39/f3+Dg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODh4eDg4ODg4ODg4ODh4eHh4uLi4eDh4uLi4uHa2t3RwsPCu8XT1uDdydPDrrnAsaqrq6uwtLbJ0sXRxLG4v7Srq6usr7S0vMzE1c60tLureGxtbWBdYl9ZS1NVVFFQREBRTUhEPzo3ODU3MzE1NjQ5ODQ2Njo8Oz08ODw5Njo6ODg5NzU8PDw/QEFAQkRDQkE8PkI/Pz09PTc1OD5DRUNAj7a0tLW1t7i4uLi4uLm5uLe1sautr7Oxs7OztLS0tqaei2tue3ZxeXhnY2hfcXdha25vaG99b25ja2lseHdsa4Z+bHB6dm1scG95sca8uru7urm5ubq6urq6urq6urq6urq6urq7u7q7u7y7urq6ubq7u7q6urq6urq6ubi3t7i4t7e2tbW1tbi3u8e+w8XHzcS4wMnH0tzZ2d/e3uDf39/f4ODh4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODh3Nji4uLi4eHh4OHg3tfGxtHQztTe3tPO0t/SuLi8sq2trKysrrG+ua63rKipqamqq6urqqqqq6ysuKyqqqqrq6urra6urq6urryzrayrpHlub21fXl1dVE1SU1xUSkE/UElIPjg5NjgzNzMwNTczNzg1NzY2Ojw/PDg5Ozo6Ojg5OjY1OTs8Pj9EP0NFQkNCP0BAQT9APjw3ODc6QUVEP4W4tLS1tbe4uLm5uLi3t7SurKuqqq2urq6vsLGzs7WjcG5ucm1wg311aWFlaGZkY2Rxc21td25naW1tZXBzb29zcXN8h4F6dX11n7u6uru7urm5ubm6urq6urq6ubq6urq5uLm5ubm6urq6u7q5ubm5ubq6ubm6ubm4uLi3t7e4uLe3t7a2tbW2tra1tbW1tba1t7e3t7rBvrzGycrb3+Dg3tvd3d7h4tDW4uHg4ODg4ODg4ODg4ODg4OHg4OHi0768zNjd3OLg0dnbxL23sLCxsa+zu7uzsLS9s66urq2tra2sq6qqqqmpqKmpqampqqurqqqqqamoqampqampqaqqqqytrq6urq6urq6sraR4aWJxZmFZWlZRUk5cU0Y9QlJEQTc8OzY5NTY1NDU2NTg3NTY1Nzg7Pjw7OTk5Ojg3Nzk3Njg8Oz47RD8/Q0BBREE+P0M9Pjw+Ojo3Nz9DRj54srCztLW2t7i3trKurq2sq6uqqaqtraysrq+xs7S1t4xucnRqaIB5ZmpmZWxdaG5waGxxYmNmcoJ+dmhobGpueoaBhXx4cXF5gK+6ubq6urm5uLm5ubm5ubm5ubm5ubm4uLe3t7e3uLm5ubm5uLe3t7i5ubi4uLi3t7a2tre3t7e3tra2trW0tLW1tbW2trW1tre3t7e3t7e3tre4v8bP0MS+v8DE19e8ydra4OHg4ODh4eDg4ODh4eDb3t7Uzby3tre6wMDJxLfIvrKwsLCwr7Cvrq6ur7Cwr66urq6uraytrKurq6qpqampqampqampqKmpqKmpqampqKmpqKmpqqqrraytra2ur66trK2heWpjbWdiXFhRUFFLVEpCOklRP0E3PDk0OjU2NTQ1NTY4ODY4Njs6OTw9PTs6ODY2ODg6ODY3Pj09PT5BQUVCQkNBQUBBOj09Pz05Ojc9QUc8bKqmqKutsLGwrqupqKqrq6mpqamrrKytra2usLO0tbilgIdvaWdzdGZrcG1qZGxvcm5rbWNrcHyJhG5qbHx4Y3uKfnNqc25rcY+7ubm5ubm5ubi4ubm5ubm5ubq5uLi3t7e3t7e3t7i5ubi4uLe2tra3t7e3t7a2t7a2tra3tra2tbW1tba1tLS0tbW1tra2tra3t7e3t7i4uLe2t7a2uLm4uLe3uL6+uLq9vcfb4OHg2Nnd4eHg3dfKwcPCurm5uLe4uLi3tbS0tLKysbGxsLCvr6+vr6+vr6+vr66ura2srKyrq6yqqqmoqKmppqepqaehpaipqamoop+hoZyip6inqausrK2ur7Cwrq2unXdwbGphY2BZUU1RTFJGQzlNUEU+ODs3Mjc5Njc0NDM1ODg3OTc7OTo9PTw6Ojk3NDo5ODY1OD8/QEI9RENDQ0FDQEJBQDtAP0A/PDw6O0NIPWOopaWlpqioqKenp6ipqqmoqKipqqqsra6wsLCztLW1taWYdn5xZmt4cW9tZmVsaGNsZ2ZpaX11bWlvfXZ5hWZod294b3Fvcninu7m5ubm5ubm4uLm6ubm5ubm5ubi3t7W1tba2tre3t7e3t7a2tba2tre2tbW1tra3t7e2tbS0tLS0tLS1tLS0tLW1tba2tra2t7e3t7e3t7a2tre2tre3uLe2t7i4t7i4uLi4wMXTyry8w83PyMC9urm5ubq6ubi4uLi4t7W0tLSzs7KysrGwr6+vr66urq+vr6+uraysrKurrKysq6ehoJ6gn5udoaGdlpmkpKaon5mZmZmanZ+gn56fpKqtrq+ura2srJl1cGlrY2FeXVVOU0tSREQ4TktHQTo4NTI2OTY1NDczNzc3ODk3OTo7PT0+ODg4NzU6OTk1OD9AQEFEPkZBQkNAQkNCQT88QEJCQD0+OjpERj5cpqWmpqampqanqKenqKioqKenqaurrKytra2ttLS0tbekc311bnONf3JmanFjaW1jaGZobG51aV9jZ3VzdnpuZ3Bwcn56cYihu7m5ubm6urq6urm2s7a1uLm2trW1tra1tbW1tbW3tra3tra2tbW2tbW1tbS0tLa2t7e3tbS0s7O0tLW1tLS0tbW1tra2tra2t7e3uLe3tra2trW2tbW2tra2tra2tra3tra3uLi3uri4uLi3uLi5ubm5urq6urm4t7e3t7W1tLS0s7OysrKxsbCwr66urq6urq+vra2srKuppaSmpqScmZubmpmampmXl5eXl5aZm5iZmJmZm52en5+dnJ6gpKWko6OioqKQdG5jcGFeXltUU1RIVEo/PFFCRkM7ODYzNzo1NTQ4Mzg5OTc4OTc7OTs9Ozc6NzU2OTk4NTg+Pz9ART5CPz9DPzxBQUI/PT9EQT8+PTk9Q0Y/VaSlpqanqKeoqamop6ioqKioqKiqrKuqqaipq7W1tba5o3eKcXKHhnd0cGh5a2JjYWVsaW5zal9jZWNjZWprYmRqbHaXjX6ovbm3tre5u7u6uLWxrKurqq6wrKyrq62tq6uvsLGvr7CytbW2t7W1trW1tbW1tbW2trSvr7O0tLSvra6vsrW0tbW1tbW2t7e3t7e3t7e3t7e3t7Owsra1tLa2tre3tra2tbW1tra3t7e5uLi4t7e3uLi4ubq6urq5uLi3t7e1tbS0tLS0tLS0s7OysbCvr6+vr66vr62oo6KgnJqampqZmZqbm5qampqbmpmZmZiXl5aYmZmZmpycnZ+foJ+goKChoaCgoJ+fi3RuaXRdYGZeUlRLRFRJPUVTSEVCOzo0NDY5NDQ1NzM4ODg3ODk5Ojs7Pz04OjkzNTg5NjM5PT5AP0A6QEJCQkA/QEJCPz0+QUFCPz06PkVDQFGjpqWlp6inqauqqKaoqKipp6ioqKinp6ioqaq1tbe3t7KZtH99kIx1Z2lqbGZjYGNoZW94cGlicXx5cGpmZmRma3NqhYystrKwra2ttLeysLCtrKuqqaiop6ipqampqKinqKipqaeoqqurra2sqqytraysrq6traunpaSnqqyopKOkpamwsbGztbW2t7i3t7W1tre4t7e3t7Kppaasq6ivtLa1s7W3t7a1tbW2tra3t7e3t7a2t7e3t7m6urq5uLi3t7Wxs7S0tLKxsK6sq6yurrCxsK2rqqmqqKijnJqZmJmYmJiYmZmZmZmZmpqZm5ubnJybmZeYmpqcnJydnJ2foKGhoqKioKGgoKCfnop1amtuWVxhVktPREdVRz5PV0hEPTw4MzQ0ODQ1NDgyODk4ODk6Ojw5OUA8Njk6MzY3OTE0PD8/QEBBOkNGRUJBREJDQTo7P0FCQz9APUBEQ0BPo6empaemqKqqqqakpqenqKioqKimpqaoq6uttba3t7e4rbJ1cHuDdmBiaWtiZWZhZGdmfYh5bHKAfXFvcXhjbW5xZo+srKurq6ysra6urK2trKyqp6WmpaWlpqioqKiopaeoqKioqKeoqampp6Wko6KioqOioKKioaKhoKChoaKjpKOjpaWlqLC0s7OzsKuqqaqztLa3trGopaOioaGipKiqqairs7Sxrq6xs7W2tra3uLi3t7e3t7e3t7a2uLe0sa6ppqerrKmnpqWkpKSkpKWnqaajoJ+enZycm5uampmZmJeXmZmZmJiZmpqampqampqbm5mYmpydnZ2dnZucoKGgoaOjoqCgoKCfnp2FdGtsaFdYU0pHTUVITUdAU1dGRz09OTM2Mzc0NTU3Mzg6Ojo6OTw9OjpBPDY9ODM3ODgzNztAPz9AQDpCRUNAQkRDQT87PEBDQkNBQDxBQ0A9TqKnpqanp6mqq6mkpaWlpaaoqKippqanqKmpqrW2tre3t7izc2h7c2JnamtpaWJhZGloXV1tfHJma3J/fHR8bm1zc36gqamrq6uqq62trKusq6mpqKWjpKampqWmp6eqqaamp6enqKinp6iop6WjpKKhoaGhn56en5+fn56foKGho6Wko6OkpKSmp6enpqWkpaampqeqraumpKKhoaChpKWlpaenpaeoqKalpaivtLa3trW1tra1tbOwrKupqa6rqKWlpqampaSkpaWlpqWkpKSkpaKhoaGgnp2bm5ucm5qamZiXmJiYmJiZmpmZmZmYmZmZmZqZmZydnJycnJybnJ+fn6ChoaKgoKCfnZ2cgHNrbmReU0pITUZETEtFRFFTQ0c9PDgzNjI4NDY0NjQ4OTg6Ozk7Pjw5PTs5PTczNTk2NTY8QD0/QD88P0JDPkJCQj89Pj5CQ0FFQD86PkVAO0+jpqWkpqeoqaelpKWlpKWnp6eoqKanp6alpqa1tba2trW2uYptcW1vfHxxZ2pmYGFsYFROW2hqbm9tgYJ9cWdxdn6aqKeoqqmpqqurrKqqqqimpaWkoqOlpqalpaWmqaqppqWjpKWmpqSjo6KioqKgoJ+fnp6cnJycnJ2dnJ2en6CioaKjo6KhoqKkpaSioqOjpKSjpKSko6Ggn6GipKanp6ipqaelpaSipKSlqK2wsKyrqqusqqmnpaWmpaWlpaalpqioqailpaWkpKSlpKOjpKOioaGhoqKgnp2cnJubm5qZmJiYmJmam5mXl5eWlpeXmJiZmpqcm5qampubm5ucnJ6goKGgnp6enpycm356bnJiXlNNSlBFRk5NQkBPRT5JOz01MzYzODM2Njc1Ojs4OTs5Oj49Ozo5OT03NjY5NjU2PkI+PkE/PT5DQT5DQ0BAO0BAQkJCRUA+Oz5FPzxQoKSjpKOjo6SkoqSlpaSlpqamp6empqalpqaltLW1tbS0tbiBaHx9ZXOCemxwdWFfY1ROT1FbaGxpbGxxbW5xbnScoqSnqKioqauqqqqqqaempaSjo6OjpKSlpqalp6ytqaShnp2eo6Shnp6foKCenJ2dnJycmpqam5ucnJubm5ydnp6foKChoJ+goaOioKGjpKSjoqSlpaWkop+go6SkpKapqainpaGdnJ+jpaipqainqKioqaempaWkpKSlpqampqampqenpaWko6Ojo6KioqGhoqKhoqOkop+enZ2cmpubmpqZmJeXmJaWlZSUlJWVl5iYmpubnJuampqam5ucm5ucnp+fnpucnJyam5p/fnF0YFtUTUdNSEZMSj8/TkM8QDs8NDM4Mzc0NzY3ODs9ODo6OTk7PTs7ODk9Nzc4OTU4OD9APT9BPjs9RD89REA/PzpAQUE/QUVAPjw8Qz88Tp2ioaKioKCipaSkpKWlpqenp6empqampaampbW1tbS0tLS3jHalsXdmc3Jvc2xjZGlYT1JRT09dgG1kYFptkZGSoqKjpaampqenqKiop6alpaSjoqGhoaKjpaempqesrKemoJ2cm6Ghnpuamp2cmZiam5qampmZmZubm5uampqampucnZ6goaCfnp+hoJ6foqOko6Omp6inqKWioKGhoaGkpaWlpKCcmZmbnqOmpqampqanpqempaOlpKWlpqiop6enpaWlpaWkpKOjo6KhoqKioqKhoaKjo6Kgn56enZybnJubmZaUlJSTk5OTk5SUlJWWl5qam5ubm5qZmZqanJ2dnZ2dnZuampqamZqXf3dvc11aTkhKTkdFRklERU5APD09PDQ1OzQ2NDY1Njc5Ozg5OTg5OTw7PDc6Ozc4ODg1ODg/Qj9BQTw+P0A8PEJAQT49QT4/Pz1CQUA6OkA8PE+doqGfoJ+dn6OkpKSlpqeoqKenp6ampqampqW1tLS0tLS0tbSXtqd1Znh2Y2xjY2VjW1JTU1JNXqCMeFhodpajnp6hoaOjo6OjpKSlpqalpKSioaGko6OjoqOlpqWmpqenpp+bmpuioJmWlpWam5mXl5iYmpqYmJqampqbm5qZmZmenZ2goqOjo6KkpKWinqGhoaKjpaampaSjoaCgn5+hoZ+goJ2amJeZmpygpKOjpKWmp6alpaOjpKSkpKWnp6ampqampaWmpKOjo6SjoqKjpKGfoKGhoKGgoaCfn56dnZyamJeVk5KSkpKSkpOTkpOUlZaZmpqbm5qampqbnZ6enp2cnJybm5qamZmZlH10bHReWk9IRUdGQkVORT9GOzo+Pzs0Njo2OTM2NDY4ODo4OTc4ODo8Ozw5Ozs6OjY3ODk5Pj9APjw9QD5AOjlAQT89QT8/QUE+QUE/Ojk9PjpQnaCfnZucnJufoqOlpaWlp6iop6ampqanpqantLS0tLOysrGwsK2rkHiGj36bmn93Yl1TUlFRTGKgootaiKCgn52YmZycnZ2eoaGgpKenpqWkoqGjp6alpaKipaampaanpqagm5mboaCXk5OSl5qcmpeXl5iampmampqam5qYmJmaoKCgoKGfoaKipKamop6gn5+goaOko6Khn56enpyanZuZmpqZmJeZnqChoaKioqKkpaWmpKSkpKKioqKkpaWlpaWlpaalpaOko6KioqGgoKGgnp+fn5+fnp+foJ+cm5qZl5WUlJSTkZCRkpKSkpKSk5SVl5iZmpmZmpqam5+fnp2cnJycmpmZmpiXl5F8cmdxXl1QRj9BRD9KT0JCRjhDRT4+OTg7Nzc0ODQ1OTo6Ozk3OTo8Ozo8PT48PDo2NzY5OD4/QT47Pz49PDg6PkFAQUE/P0FCQERBPjo4PkE8U5ycm5uampycnaGio6KjoqSmp6alpaampqSjo7KysK2rp6amp6alpqiln6iop6qnoXmEXFFST0xcnKCAYpmgnp2clZOVlpeZmp2dnqGmpqampKOioqanp6ajpaampaWmp6amop2cnqGfl5GRkJSXm52YlpaWmJuZmpqampqZl5iam6Ghn56fnpybnJ6goJ6dn56fn6Cio6SjoqCfnp2ZlpeXl5iYmZubnqKioqKioqGio6WlpKOio6SioaGhoqOkpKSko6SkpKSioqKhoqGgn5+gnp2enp2dnZ2dnp6em5mYl5WTk5SUk5KQj5GSkZKSkZKTlJaXl5iYmZqampyenZ2dnJubmpiYmpmXlZaNempmamBiTkY+P0A9SkVAQ0A7QEE8Ozs5Ojc2NTg0Njc4OT04ODs6Oz87Ojs8Ojk6Nzc2ODs7Oz08Ojo8PTw3Oz5DQkRDPz1BQ0FEQT88OkBCO1eZmJqamZmam5ucnp2foqKhoqSlpKSlpqSioJ6op6alpqWlpaemp6ampqakpaanqKehqXJOUU1KVJahenKanJyenJeVlJWWmJiXl5qeoqKhoqOkpKOjpaalpaanpqSlpqalpaOgoKGhn5mSkI+WmpmenJaXl5eZm5ycnJqamZeZm5uen52cnZyZmZqcnZydnp6fn5+hoaCgoaKgn56bl5WVlZeanZ6fn6GhoqKio6OhoaCgoJ2cnaGioqOkpKOioaSlpKOko6SjoqKioqKhoKGfn52cnZ2cnJ2dnJ2enpqXlpaVlJOTkpKSkpCRkpKSkpGSlJWWl5iYmJiam5ycnJycnJ2cm5mYmZiWlJWXi3hsY2RiZFFHQT1DO0tIRDo7Ozw+OTo6OTo3Mzc5NTo4ODg8OTg7OT09Ozo7Ojk8PDc2NDc/PDo9Ozw/Pjw7ODxBQ0FDQkI+P0NAQkFAOj9APztZmZiampqam5ubm5ydoKGhoaGhoqKioqKhn5+dpKWmpqenpaWmp6ampqWkpKalpKSkpaaGUFJQT0+PmHB6mpubnJ6cnJycm5ubmZiYm56dnp6foKOkoqGhoqKio6SkpaalpKOjoaGhnpyalZOUmJuam56amJiYmJqcnpyam5iWmZybnJycnJydmpqbnJ2dnp6dnp6fn52cnJyhoaCblpWVlZacoKGgn5+hoKKjoqOhnZuZlpaWlpicnqCip6ikoaCgoqOjoqKioKCgoJ+fn5+gnp2cm5ucnZydnJmanJuWk5KSkpKUk5KSkpKSkpOSkpKRkpSVlpeYmJiYmZqcm5qbm5ucnJqZmJiXlZWWl4d3ZGdoZGJNQ0U8RDlJSkU5Ojs9PTo6ODg6NjQ3OTU8OTY4OTc5PDs7PDo6PDs6PDw4Nzg3Pj07Pj46Qj86Ojo/QURCQ0FBQD9EQUFAPjpAPj06W5qYmZqbmpubm5uen6CgoaKioKCgn5+enp2dnKWkpaanpqWlpqakoqKio6Oko6Kjo6KnllRYVVJOZ21rgZ6am5udn6Cgn56enp6dnJ2dnJ6enp+goaCfn6CgoKGio6Ojo6OjoqGgnpuZmZiZmZmamZienpiYmZmam5qWlZeWlZicnJ2cm52dnpybnJ2cnZ6bmJqeoaGdm5udoKKhmpWVlpaZoKKgnZueoKGjop+em5eXlJKSlJeYmZ2goqenpaGgn56goaGioaCfnp2cnJubnJubmpqZmpydnJmXmZaVk5GQkJCPkZKSkpKSkZKTk5OTk5OTlJWWlpeXl5manJubnJucnJqamZeXlpaVlZSEcmZsYmRbREJMPT84RktCPEA+Pj05Ozk6PTg1ODg2Ozg1Njo4PDw7Ozw8Ozk8Oj09OTU4Nzw5PD88OkE/Ojo6QEBDQkRBQ0A/Q0FAPj08QD09Ol+al5mamJeYmpycn5+foaGhoJ+fn56foKCenZ2lpKSko6OioqOjoZ+foaGipKOio6SiradXXl1UV19ua42dmpqbnJ6dm5ucnZ+enZycnJydnZ+goKChoaGgoKGgoKGioaGioZ+enJqampqbnJqZmpuZnJ6ZlpaWl5eTjo6QlJabnJuam5udn52cnJycnJ6dlpSZnJ+in5ycnZ+hoJuXl5mZmpycnJubnZ6fnZqXlpaWlJOTlJiampqfoKGmpqWgn56fnqChoaCenJubnJybm5ybm5qZmJmZmZmXl5iVlJKQkJCQj5CSkpKSkZGTk5aYl5STkpSVlJWWlZaZmZmam52cnJyampmXlpaWlpaQgG9vZV5gV0BKSDg/N0lFP0VBPD07Ojo8Ozs3NTs4Njs3NDY6Oj47Oj0+Pj07Ozs+Ozo4Ojk5NkBBPTo8PTo6OT9BQ0JERUM+P0FBPz8+Pj89PDtgl5WXl5aVl5mbnqGhoKGioqCenp6enqCgn52bpaWkpKSioKCfoJ+dnZ+hoqOjo6OkobCjXWVkYGFua4GenJubm5ubmZianJ2enJubm5ycnJ6ipKGeoKGhoqKhoKCgoaGgn5+enJqZmpubm5ybmp2dm5manJiXlZWWkY6Nj5KYnZycm5ycnqCdnJucnJyempWVm56foZ+dnJyenp2cmpqampqampqbm5qXl5aTkpWVlpWTlZaam5qanZ6foqWjnp6fn5+en5+enZ6fnZycm5qcmpqbmpiZmJiYmJiYlZSTkZCRkJCQkZKTk5CRk5SYmZiVk5SVlZWWlZaXmZmXmZqenpyamJiXl5aWl5eYjX1ubV9lVlRFSzw3PjdSRUM+QkE4Ozw7OTg6ODY7Nzc6Njc5Oj0+Ojw8PT49PD06Pz06ODw9OTtAPj4/PT45ODs/QkNAQ0VDPT9DQj5AQD5APTw8YZWSlJWWlpeanJ6goKCgoaCgnp6enp6gn56em6WlpKSioJ+fnp2dm5mbnJydnp+gn56rmGNpbW5pZm2enZybm5ybmpmZmZqam5ucm5uam5ygo6SgnZ6en6CgoKCgn6ChoKCfnpuamZqam5qbm5ufnpyZmJqamJiYmJKOj5OXnJ2bnJ2cnJycnZycnp6dnpqVl5ygoaGfnp2eoJ+cnJuampqbmpqYmpmVk5OTkpOWl5eVlJiYmZucnJydoJ+gnp6enp+fn56en6KjpKKgnp6cm5qampuZmJmZmJeXlpWUlJORkZCQkZKTk5OSkpOUmJmYlpWUlZaWlpaWl5iYmJiXmZqamZeXl5aXlpeWl4l4dmddX1dURUU5OTs8WT5AOEI/OTs7Pjk4Ozg6Ozc5OjU4OTs9PDk9Oz0+PD0+Oz8/Ozk+PDw+Pz5AQUE9ODc7QkNFP0FFQz1AREJBQEQ7Oz47PGKWk5SUlpWUlpiYmZubnJycnZ2cnJ2en56dnJqkpKSkoJ+enpybm5qZmJiYmZucnZ6cpolla3R4bVuFop2dnJydnJqbmpqampydnZ2bmpuboKKinpucnZybnJ2enp2dnZ2fnpyampucnZybm5ycnp6cm5qanZqam5yVkZOXm52dnJ2fnZycnJycnZ6fnp+cl5idn6GhoJ6cn6CfnJubm5qbmpmZmZmZl5WWlZaYl5eXlpaYmZuenp2dn6GhoJ+fnp6fn5+dn5+hoqKhoZ+fn5yZm5qcnZuampmXlpaYl5eXlpWTkpGTlJSTlJSUlJaZmJaVlZeZmJeYl5eXl5eYl5iXl5eXlpaYl5eVl5eDeHZfW11eUT1GOjk4P1VDQTtDQzo8Pz86Ojk3Ozg4ODc0ODk8Ozw4Ozs8PTo9Pjo/QT06PTw+PkA/PUBBPjk2PERDRUBBRUU9PkVERD9COzo8OTpkl5SVlZaUlJSUlJWXmJiamZqcnJydnp6dnZybo6Oko6CenJuamZqZmJiYmZiam5ubm6WJa3F2em9lmp+enp2dnJybnZ6dnJ2enp2dnJydm5ygoJuampubmpudnJqampucnJuZmZycnJ2dnZ2dnZ2dnpybmp+fm5ydm5mZmZudnZ2dn52dn5+dnJydn5+fn5uanZ+goJ+dnJ6gnpubm5ubm5yampuamZudnJqZmJeYmJiYmp2foKCgoJ+hoaGgoJ+en5+fnp6foaKhoJ+enp+enJqam5ubmpqZlpaXmZmYmJiWlJOUlJWVk5OVlZSVlpWVlZSYmZuamZaWl5WWmJiWl5OUlJGRk4yRkJOWfXhqYWJiXFA8QDw2OENWSERCOjg7Oj47Nzc5Nj06OTk2NDc6Ozw9OTo6Oz87PT08QD47Oz46PT89PkBBP0A8NztBQ0U/P0REPj9EREM+Qj07PDs6Z5aTk5OTk5OTlJSVlpeWl5aWl5mbm5ybm5uamaOjoqCfnpuamJeYl5eXmJmYmZybm5qkgGpqb3lzcZegnp2dnJydnp6enp+enp2cnJydnp2bnJuampqam5ubmZiYmpqamZmZmJqdm5ydnZ2dnJ2cnZ2cm5qdn5ucnJubnJubnZ2dnJydnp2enZydnZ2cnJ2dm5uenp6dnZybnpubnJycnJydnJubmpmbmpmYmZmYmpmZmpyfn5+jpaKfoaKioaGfnqCgn5+fnqCioaGhn5+fn52ZmpudnZqZmJWWl5aVlZaTkpOUk5STkJCSk5GUkY+OkJGOlZabmJWYlJmXlJiRjJCPk5yTkoyFjIeDhndxZ2pkW1xRQT44NkJHYEJFR0A+Ozw7Ojg4NjU8ODo4MzQ6Njk9PTk5Ojs9Ozw6PD48Oj5AOj5APjw/QD8+PDg6Q0FEPz5CRD8+Q0VCPUJAPDw8OmeYk5KSk5OSk5SVlJWXl5aWlZaXmZmZmpqampqkoqCfn52bmpmYmJiXl5iZmJmcnZ2cqH1nZXN7enOJop+enp2dnp6enZ2enZ6enp2dnZ6cm5ybmpubm5ucm5iYmJmZmJiZmZmbnZycnZ6enp6enp6dnZybm52bnJybnJ2dnZ2dnJ2dnp+fn52cnZ2dm5qbnJmZnJ2dnZ2dm5uanJ2dnJycnp2dnZybmZeVlZeXmJqam5ubnZ6foqOhoKGhnJucm5ubnZqcmZycn6CfnZiZmZmUkpKUl5SPj4+OkYyNiYuQi4mLjpGRj4mQmJiQkoyNi5KQj5iYoqiqpqWlrKOmoZqep6eyqKKVo6Cfl39wcWlsXFtcTUY8NzdHR1g+SE5URjk+Ojg5ODc1PTk4NzMzOTY6Pjw6Nzo8Ozo6Ojo8PDs/PjtAQD47PT5BPDw2N0A+QkA+QUY+PEFEQT1DQj49PDlmmJSTk5OTkpOUlZOVl5iYmJaXl5iZmZqampqaoqGfnp2cm5mYmJiYmJiYmZmZm5ybnKx/am16f3lxh6Genp2cnZ6enp6enp6dnp2dnZ6enJubnJubm5ubm5uZmJiYmJiYmJmZnJ2dnJyenp6enp+fnp6dnp6dnJydnJ2dnZ6fnZ2fn56goJ+enZ2dnZybnJ2em5qbm52enZ6dm5ubnJ2cnp2cnZqYl5SRjo+QkJGVmJSWlJiZmpudmJuYlY2Mjo6TkpKRj4mQjpGRjo+Ki42NjYiIi4+Lg42NkY+MkI2Qk5WVnJihoJySn6SipKmam5eanKOprb3Bwbq8uL26ucC8ubq3uru7tL2zwbV/bnVmZ1peWUxJRTo7TElTPFZSSUM6QTo7Ozc3NTo6OjgyNTY4Oz08OTk7Ozw5Nzo4Ojw6PT85PD8+PDw9QTs5NTg8O0A/QT9EPTxBQkA8REM9PT06YZOTkZCUlJOTk5OTlJeYlpeZmJmYmZqbmpqamp+gnp+fnJqZmpqampmYl5iZmZmZmZmphXB1e4B3b4mhnp6enp6fn56en56fn56dnp6fnp2dnJ2cm5ubm5ubmpiYmJiZmZiam52cnJ2dnp2enp6goJ+enZ6hoJ6dnp2enZ6fn56en6CenZ6enJydnZ2cm5qYnJuVmJqamJiYmJmSjJCXlKCXk4+MjYqKiImMiJORh5CPjYqKkJCLjoqMi4+IiImJjpGOjYaFiYaKhoWLiI+SkJCNkJKXlpKamJ2TlJ6kpqaqq7Gsr6+rpquqsbm5tbS0rqyvtMDIxcXBvsbDxMTDurW+t7a0s7C2tb6qcHRyXGZfXV1JRj8/RUtMVklcTEQ/PUI6Qzk5Nzc7OTk3MTc5ODo+ODg6PDw7OTc5OTs9Oj4/OT5BPDs+PD46OTY5PDpBPkNBQT08QkBAPkJEPj8+OVyHhIOHi42KiYaFgYqMkZOVmJiHlZaWkpiampmenZ+gn52ampubm5ycm5iWmJmXl5ibqo56dXZ7f3mCoJ+fnp+goKCfn5+foKCfnp2dnp+enp2dnJqbm5ybm5uYmJiXl5iZm5ucnJydnp6enpybm52dnZycoaGfnZ6dnZ2dnp2dnJiWlpaYlZWSlpmWk5GKjI+PjI+NkIuLj4+WiYiEi5GZjn2Fi42PjYyHioyQm4yRj4+Lio6TjIyNjIiSi4yFiYyPhouIh42KhYyEj4qXkJOYmpWbnKOqoaKknKKrsbe0ubWxs62vsrKlp7O6sbq6vLa3tsDDw729vLa/urq8wbW4wL60r66mqa+3mm58Z1tjWl1fSEU+QUtJU1hZXkFGOTk9OUY/Pzo3Ozs7NjM6Nzo5Pjg6Ojw9OTk4Ozk7PDo+PTtAQDs8QjxAOjg0Nzw7Qj9BQj4+O0NEREBDQz0+PjlhmZWLkYWNj5aSiHl9e3+Fi4OKgoqJhmuAeJCLlpqRnZ2UlJGTlpeampiWk42Sk5KQm5uIdndzcX1/cpGgnZubm5yenZ2eoKGgm5uWlpucmpybnJuYmZqYmJmampqWi5CTlpmYlZiYlpucl5WSkY2SkZCUk5KXm5mYm5ePjpCLjo2Ch4uLi4qLiI2RjIeHhoqIiZGKh4yEhYqNi4qNhI+UkIyDkJOUmZWQi5OTkZWRlpWOj5GMlI2Oj4qIj4ePhoeJiYmNiomJioWNh46JmJKUmpuXmKChp6Cko5qqqbO2sbWwqKmiqK6tn6qvsK21ubi8wr/BxLixtbCutrOwuL68ury+urOzp7G3wpB1gGNiXlpXUk1IRkVQSVlXX1tDUDpCQz1HRj84Nzo6NzU1OTc8OTw5ODo9Pjo6Nzs7Pjs7PTs9P0E7Pz48Pzo4NDM3OkFBQEI+PjpDREM/QUM7PT45Z6mloqKZn6CippeUiI2CiIJ1h4iKiIp7e3Z7enmPeoiSfn18en6CkYWBgH1zfH99fISHfnRweHZzfHaBj4iIiYeIioyMkZicl4iOhIuNi4iNkI+Pi5GPi4yOj5CQjouFhYeLjIyHiIuOi4eMhYaBjYuGiop/iYqGiJiRiIOIg4KFfIuLjIaJi4iKkIyIi42PjI+Wh4mLio6NjY2Wk5OdnJyalpycm56bmpuYnZeTkZWWkJKRi4+LlpSMjYqDi4SEiYyQkIqOio2LipGJjZOTk5SVk5KcmZ6Xn6CfpaKvsamupKSfmKStpqa4t6ysu729wsPAv7+vpa2wsLS3uLO0uLa0ta6stK+4tLaBeXpjZmBeVlBRQUVMT0lcXl9UR0dCS0xCREA9ODg7OTU3Nzk3Ozc9PDk9Pj05Ozg6O0A8Oj06PkJBOD88Oj84NjQyOTtCQD9CPj04QEI/PkBEO0A+N2CloJqXnaGaoaCPl5efl5WCjaCfo6GdmpKOjIxycXBvdnFucG1ucHZub29waHBxcHR+c3FycXd7cnl2d3Jyd3Z6e3l8fXt/iIGEi3+PkYaNi4uGiouLiYaEgYaCgIKJkYOAg4x/ho+LiYWAh32AgZKQhoSEho2DhIyPj4+IjY+Hi4iRkJWRjpCKk5eOj5WYp6SfnZWYlpaln5udq6aqt7W4srGnr6qnpqGfmp2WkpWVkYqPjImTjZuVjYuLhoaJjJWQkJCLmZKVlZSbkJiTlIyNkYyWl5WilZ6mqauno6OqsJucpp+mq6G0vb6zs7+5u7u6uby9rqiusa6wuLyztLGxqrCpqLGxsqild3J0X2hhYFRWUUlKSFZNXl5eVExKRVFKRUdDPTo5OTc0ODY4Mzg4PTo9PD47OTs4Ojs/PDw+OT9DPzg7Ojg8Nzc2Mzc5RT4/Qz89N0BAQT0/RDw+PThUj4yGh4eUjJWZl5yWmZaNlZyWlZydoKCdmpiWeHFubXJ4cXFsbnJwa3FvcG1yc3t1dnd5fnVxeHZ0d3tybn98gX15eH1/eYOGg4WCg5CLkIuLi42Pi4mJhYKBfX9zfYiAfpyQhIWFiYuPinp9fYaOjYqGjZSRi5CXj5SXkpihlp6XlZunpp+goKawq6GjpbW0sqqmqq+isba5vcK7ucO+vLi9uLWxrLCspZuSk5mfm5SPk5WOmp2doJqfn5edo6qsoZ+em62hp6qwqaampJiRkZWUo6SirKSss7Szs6i3tru4sLKvra2yt7a6srW6s7e5u7i8urayr6yxsbKztLOxsa2us7Gzs6yhl3Zxc19jXlJRVE1PSUdYT1pcZFROR1VPRURKRD44Ojg3NTg4ODU5Nzo6PTw/Ojg8ODk5PTs9PTpCPj84Ozo5Ojk4NjI1N0I+P0RAQDY+P0I/PEM8PT46Tn98go6MjJOTl5eaj5SWjZaRkZSXk5qanqGdnHJvcnFxcXFxcG5zcW91dHJxdneAdXd8eYV+d3t8eX1/fICJiYmDfXp/h4GIiYGAgIGGiIGGi4aIhYSIiImEf4J/enx8fX6SkH+IeIGFi4qDhIWKj4yNkZmdlJSUoJqan6Ktsa2ppKWtr6ysrLWuvrmtrqm1sLexq7G2rK+9wsLAvrq8trKutraxtK66u7OurKepp6unoqmtoKmooq+wuLSxvLq6urK0ta+8tLezt7e7t7mtrbCprLW5sbeytLe2sLu7vLu6ury1vLi0wbWsqqqrtLG3uLm1trSzsKymrrCqq7Cxq6yusLKxtK6qo5N4dnJlZ1tMUlBGTUhTV1JlXmdUUExcUUhMUkNBOTk3OTU4ODY2Ozc5Ojs6Pjk4Ozo6Ojw8Pj08RD45Njs7ODg+OTUxNTZCRkREP0A3Pj5DPjpBP0BAO0t/gomXmJSdlpabmIuSlo6XkZGVl5SZl5+bmZx8dHV2dXl1c3RudnJzdHV2d319gX56gXyDfoJ/fYB/hIKFj52RiYF/go+Xjo6HgoCBiIuFfoqQi3+HjYyLioeSioeGjZGTkZGEh319g4iMjouOiomQj46PlJSYkZWbmp2dqK6yr6+1tLOtsrW4sLy1tbGqsKqztbS7t7SztrS1r7i4t62noqassLCvtre3vrW5vLOysa61u7C0r6+yu7axuMC9tLS0s7izvLq2tLrAvbm6ubq+ubm5vrWysa+yr6q1tLGzsbSzrri4tb+vpKaoo6ussa+zrq6wsKytq6qroqKmqKKnrauqpaynoqeYeHlxZmVZT09NSVJNV0xPX15cTlVVYlFEVE07Pzk8ODk1Nzc1Nzk1Ojo6OTs4Ojw8Oj08Pj4/P0I9ODY6Ojk6QDs1MjY2QUZDQz4/Nz49Q0I5P0I/PjtLjpGTmJmVmZGTopiTkpKLk4uOkI+Vl5ablZSbhoJ9enh2dHRzdH53end2gIKDhouMhISFioaQiYeRk5aRjZaalY+IjI+emJaVkpCTl5qamJCdoJ2Tl5qgmZ2bo6CVkJugpKOak42IiIuJkZGOkY6LmJqPj4yUmpecnJufnKSstLm6vK+2tLi0tLK3uLmzq6+qqKy1srK1rrGrrqa3s7OxpaGotbCvrayrtbqyu7q6tLK3ur67ubG4sLmtqLK4u66ttLS3tbu2trm5vLe0r7G0t7a5s7e1pq2pq6ior6yprq2up6KxtLG0q6aop6Cjq66oqq6orLKwr6+pqKGeoaGjpqOgopqlo56ol3J3bmdiVUtUT09KQ1BLX2JYWlFcVGBNSFJJQUA5Ojg2Njc3NTg5NDs5Ozk8Nzs+Ojg8PD0/QkBBPTs2OTk5Oj87NjM3OD5GQkJAQjk+PUBDPkBGQj44R5OWkZWTkpSQkZ+ZnZmVkI+Sko6Mk5aWko6RlZGSkIaBeXJzdXuBhI6HhZGTkpicnJiVkJWYo5yaoaeqqZ+clpeVnaKioZyZnpmlqKyvramnqqmop6GlqKirqamvoZufoaOjoJqfoJyUjZiUmKCgoaSem5qkp6Spq66spaOoq6+xtK6qrK6zr6ystLO0ua6urayqrLKwsK2wqKqmsrS0uK6qtrqwr6qurLC3s7i0t7W0u7y4tbWxtauyrKiys7uvrbGytLa1sbG0s7OvrKuvs7a0sayutKqqpqWnrauoqKupqqifqbOwqqeppaOio7CtqaatpairrayppaSioKWipaOYmZyVnqKippdudWVnZFZPWEtLSktTVHBiWWRXX1tcUlpQTEM8ODk6Njk4NzQ3NzQ4Ojw6PDg6PTk3PDw7PkM/QT47OTo5Ojs+PTg0NThBREVEQkM5PjtAPkI/R0Q+N0KSm5SVlZaVj46Wl5qZlZGKk5SSjo+SkYqKiY2Ul5qTjYmCho6VkZSfmpuin5+jnqGhn5ijpKelpaapqa2rqaKmpKilpKGfnqOjra2srairrq6qqqukoaKkqaenqaijopybm6SgpaijoJidmZ+hoqmnoKKirqyrqqetrqilpKmpqammo6iqqaekp66wr7Ovq7Crqq+yr7Czua+rqLCxrrCyubO0r62vtbCss7GurLW1tLSzs7CvrKyqrKusr7G0s7CwrrCwsKyqrauqq6alrrCysKumqbCvqaOkqaunqKaopquwq6mvqaaoqaalo6iwraqpqKKpo6WnpKGhoKKloZ2el5aYlJugpKmUbnNeamlfVVpOUk5QT1JkXGVjW11ZXFBZT0tAPDs5Ojc6ODczNTMzODo9OTo4OTo5Oj08PEBEPkA9OTo8PDw+Oz45NTo8QkFFQUNBOT47P0BEQENCQDdAkZ6YlJeZlpGHi5SSl5GIg4mLk4+OkI2Hh4SFlZmWmJeZlpqeop2anKKkoaCdn5qfoKGgpqGgoKCjo6KlqKmrramqpqOmpaCloKaopqWnqaepqKOnppmcpKaioaChoaCcmJmfoKGkpKKenpagm5qioqChn6CiqKCcn6GloaCmo6KfpKGspp6foaGkrKqnrKivq6e0sa6ur7WyrKqwq6mtrbWwrq6srreup6yqpKivsq+sq7Kvqqqpq6utqa6urrGxraqtqaunp6uoqauinaapqKilqKisqKilpKWop6iopqmsr6+oq6mhoqKlo6Opq6ymqKWjqKKhoKSdnZ+hoZ2bnZ+amZWcnKOqlG9zZm5yZF1dUFVPV09eZGRsaGJiWlpSVE9NQTo9Ojo4Ozk1MTYzMjg4Ozk5OTk7OTk8Oz0/Qz5APTk7Ojs8QD0+PDk5PEFBRUFGQTo9Oz9BQUJBRUI4PYqWlJOYmpaPiISNjpGSjIiIiI+JiZCRjoqKiJubmZygpaKlnqKjoZqeoZyanZ6bnKOop6ugoKOYoJ2XnKGjo6WjoqKkrKilqaCepqmnrKmkn6Kgoqahpq6mpp2fn5+fn5manJyhoKGkn6GbnZqcoJ6hn56eoKOZlpqYo6KipJ+ZnKGhoqCbmp6goaSgnaejqrGorqusqaSqqquorKalrKqws6+rq6mwq6appaWoq6ynpqevq6Wnq6upq6irqqqrrailqKOmpaesqayoopykoaOmo6qpqKano6SnqKanqKepqKupoaKoo5yepqWjqKino6WlpqmgpJ6inpeYnZ+doqKlnpiUlZ6go5d1d2t2d2FfXFVZUVVWW2Nec19oX2NTUVlUSD48PTg7OTo4NTM3MzM0Nzo4OT05Ozo5PDxBQEM9PT44Ozw9PEA/Qz86ODo+P0NAREE6Oz48QD9DQ0VDOTyCmJmenZ2alZKKiZGRl5GQh4SJgoGNj4+Sj42cnZ+hpKmlqaeorK2moqKfmKSmo6Stsa6yp6asm56em5qjp6Cfo5+foq+qqqyoqKuwqaiqqKGfoKeprbCyr6yjoqahqaWepKOipqClpKKlo56doJ6fpaKinp+imJWemp6fpKGblZigoZ2enJudnZuZmZWen6Oonp2iqKGaoaOmoqSoqaqoq7CxqKWlp6eopKWpqaqnoqWmqKadnqWloqClpaOlpqCjpaOjpaelqamqpKekpqKmp6SrqaenpKGlqKynpqWlo6OopJWdo5+bnaCjqaeopqGjo6mooKiioJyVkZqfoKGmopuXkpCamqCVfHdvfXlmW1tgX1pcVlxoZG9jbmlpYl5QUEA/Ozo4OTg8OzYzNDMzMzc5OTs8OTs7OT49QkBAPTs9ODw9QD08PENBPjo4PT9EP0M+Ojk/PEI/P0FEQjk6gJ6kp6Kem5+gmY+ZnaCWloqGj4iEi4qTl5SRo6Wnqq6trLOys7S4t62pqqevtLKxqq6usbKusa2lq7OssbGpq6+rq6y2r7Owq7GysaOfoqqpp663trS0trOvrKuuq7awqbKxra6npp6io6ObnZyXoqiloZ+eo5ueoZqWnaScm5aZoqefoJ+joJuUlpmWl5qfoJmVnqKZmJ2dpZ2gpKeqqaiqraylqaSlqqeqqaqsp6SkpKOimZmhnpqaoaCfpaWYnqSmpKqooqelpaGqp6mnp6ejqKWmpaGkqKesoqekoaalpaOVl52Ym5mVo6elpaSfnZ2lo6Kqo5+amZiXnJyaoaGakJOTl5ibjX93cnZ4aWJbX15cYllgZG5ta25hX2RgUE9BQDs7OTs4Ojk2MTQzNjQ3Nzc6PTo8Ozk9PUI/Pj89PDo/OTo7PD5BRUA9OTtAQT5DPDs5PzlAQEBAQkM7OXuao6OcoJ2dop2Zn6KioJibmJaYkpSQm5qWl7S0rrW4s7S4tre0uLm3tbm4ub28uKqLnLK4vLS9urW7uru4s7q/uLe5u7G3r6iusq2inJ+qsri8vL27ur+0r7GztbS3t6+1tLWysKikop+gl5Wal6SqpqahpKOkq6WlmKGko52goaKooaOgpaGck5mYmJmco56cmpudl5uZlqWam5+hqKmpqKuvr66pqKirrKytq6irp6WjoJyfo6Ojn6Cipammmpyip6Spn6GjoqKgpaanpqSooJ+ipKGjoqiop6OloaGopqalo5mbmJuTj6GknqKfmJiVoJuhpaCfm5udnJuamZugmo2YmZiTkYaAdnh5eGNbUllUX19hbWh1a3BnaWliWVNMQDw6Ozg5Nzk3NTU2Mjg1Njc3Ojw7Ozs7QD4/QD0+Pjk6PDk2Nz47QkZCPDg7P0NDRDw+OT43PkFCP0ZDOzhwkpqblJ6bm52Vl52doqajopaXnpaXl6GblJi+t7G4uba3t7i7l5S2vbu9vcDFtaK7mKC3v7+6wcm0nbu2sra/xcGooLa0urGqrrSxsLG0tba8vL68vL7Guri3ur20r7Wxsbq4t7Kzsqqmpp+YpKSnqKSupKurtbWus6CnqqynqqmlpqCnoKGmoZOWmJ2foqSjnZ6coaChnZekmpmdoKaqqqqtrq2tsLGrrK2sqamrrqimpaalpqSkpqaeo6eppKGcoKKjpqCio5+jpJ2foqWgpJyboZ6fo6GhpaSlqaOkpaKkp6ehn52elpOcoJiZko+MjJeWn5uWnJqdnJqSlpSUmJOQmp2YiouHgIB8gnhhXllTYWhgZnNvc2l0ZGlkYltMSz46ODg5ODg5NzM0NTI1NDY2OTw8Oz08P0E/QEA9Pj44OTs4Njc/OUJFQzw7PD5DREM9QDs9Nz1DQ0BFQjw3Z4yRk4qalZiblZWYm6Knq6aVl5iQlZmhnpeXvrWztLu6ubi5woeYt6u4u8DCxbOjw6e4s72/tMTHvbS7uL62wMTErqCworW2tb2+wcPGwsO5vb/AwL2/xL28ur2+tKeqmLHAvbi1ucCzr6+qqqitp6ekr6eqtLyxtLWor7Gwr6yqoqajrJ+fpquXmqifpaWfoJydoKuwsKyiq5yYm6Cor7Kys6uorre1sq2tqaalqKulpaStqaShn6Cnnp6mqKmmnp+anqGlpqmcnaObl6KmmpuanZ+cmqGcmZ2eoKijn6GfnaWioKOioZSZmpmTj4qLhI2Qk5uPjpiVm5eYkJORkomNl5iYk4uKi32AgIVwYGFeXmpiYm53dXZubFtiUVVcTUc7PDk3OTc5Ojc0NDQxNDM3Njg8Ozs8PEBAPUA/Pj8+Ojo5Ojc6Pz5FRUU8PT1AQkJCQUI7PDhAQ0NARD87NV+MjIaFlouUlZeYl5ifpqellpWVkZebn5ual7mxtrO5vLy5urWqsryxvsG0vMe5uLuuv6fGw7/KxsnIxcXJvMLHx7+xsKe8vL7FxMbJx8XGu8TAxcbAua+9vMC+vrOrqoyzu760tbfCuq2vsLWqq6aqo62kp7G2q7WyrbOtqK6vp6awr7Ktqq+zpKu1qaeopKCgnqmyuL61tbWqqaausre4t7apq7i8ubexr66noqOop6SfqKOfnqCZoZydoqSnp6GelJuaoKGlnqChnpajnZSQlpiboZqflpORlpSin5qenJudoZ6kn56VnJiPkpOPjImTkJefiZCWkZuUmJGRlZaDjJWXlpKLjIh8f4N/amZoYWtsZm51cXJ1cWZeX1xSSUU/Ojo6Nzg0ODw3NjU0MjMzNjU3PDo7PDs9QD4/QD48PTk5OTs6PDw+QkRFPj49QENDQkREOzo4QUJCQUNAOTJbk4iEjZGKi5GRlZCSmp2fnJOSmJSdnZqXmpW2sbm1tb6+tri1uLO8vMTEusPHwb+0s8XFxr/CzcfLzsvLx8HDxsfIysXExcO7vLzBxcHFxb/DwsbFwLGTvrq/w8K2trqptLO0qauzu7uxn5uxr6ykrK60p6qpqKqtrKmlpZ6pr6uyu7q4u7e5t7O5uLOurLO0qrC1ub3Bur6+vL60urm4u7qysbS8u7q7s7Oyp6Smq6uioaCdmpudmpyXmpuenJygnZaclpuZnZ6io52UnJCNiY6OkZ6bnJWNh5KLmJiWmpybmJybnp6cmp6UjpiYmpSRmZeeoZWYmpKXlJWRlJqYk4+TnZaSi5F+enx/dGtrbmRvbWhxeG95amlhXGdhUUZEQTw5OTc2NDQ6ODQ2NTMzMjY1Nj05OTs7PT47Pj49Oz05OTs7Oz89QUNBQkFAPEBDQ0NFQjs4OUQ/P0BCPzsyV5uQkZCQh4WSjo2IjZCTlZGPjZSUm5STlpqRs7e4uLi+u7C1sri2tbbAw8G+w8LAvru+u7u8xMzEzNDLxsa/xcfLyNTLysjGv7u7vsS+xcjGxsPEw7i0wLe0vMHCucK3t7/Au66lrre8t62co7ewpq20tayupaWjqKSgoKWZqrOyvsG+urm6uLW0srG0tLO6wL7Av769u7u9vsDCt7a3tru7sru+ubi3u7a3tKyoqamrpqijnpOampyYkZKZl5GRmJqXnpiWk5acm5+elJOJiX6GiIuWlJiZkYmVkZeWlZmbmpaYl5idnpyhmJWZmZyYl5ybn56jnJ6WmJeTl5yZmZyUlp2UlpOJdnl6e3Zua2lndVpmcndzeWZnXWRbUlhJRj87Nzg4NzYxNjk3NDQzMzM2NDY7ODo8Oz08OD0+PDo7PDs9Ozs+PkRBQURCQEBBQkNDREM9OTlCQD8/QD89MkyWmpaSk4yKmJCKi4yOkpKKiIaNkJiKj5CUl7O7tba/vb2xtrjBvby0uL/Bsbi3vsHFvbu8wsbJv8jOyMHEwcfKysbKxczIzcbIxb/DwMvNz8rGxMPDwcS+uL7Bw8DEvsHPz87Gq6+2tLWroKe0s66ruLWzq6mjoq2prKatn6y1tL/Cvrm4vbawrausr7W0ur7Fv7u8urO5u7i5ubWtsLS9u7G/vLiytrmzubu0ra2orKyqqaeXnpualY2MmJSTi5WWlJyZl5WWmZKYn5mQiop+iYqKkY6Vl5OUn5mWkJSZmJmWmJOUm6GeoZiYmp2ZmZaenpibopqdnJuYmpuZlpeXlpyZlJyYfoB4eXV1ZWVpamddam9teHdjYmBgXlhXRkU4Ojg6OTc5NDQ5NzY2NTEyMzM0Ozo9Pzs9PTo6PTs8Pjo7Pz48QkBDQkJFQj0/Q0NDQ0RFQDk6QkFBQj5CQTVCkJeUlZmSj5qQjpKRjZSVi4qHjI2UiImPkpq2u7S8xsHEwr3BxcLAtLO9v6ywr7rDysPCvs3IxbfByMW/wcLIy8rCwsTJzM3Pz8zDx8bIycjIycfFycfIx7/Fx8TEx8jK0s/SzLy4trS4uMG+vrq9ury6vKytp6q7urm3wLK1uLLAxrq3t8Gzsa2tqau1s7u2w7a2vbWxt762s7e4sLW2v7uwvbq0q7CxsbO8urOzrqutq62xnaOjoJqQjpiXlZCclpaYlpWSnJmTm5+clpGUjpWQiYyQlZOUm56YmZKSnJedlJmSk5aZmJ2VnJ6do5yVnZ+TnKKcnKCfnaOemJSVl5ebmpmgkH99cXRxb2JhZ3VnaWl0bXhsXWRbVWBZTEhDNjw5OTg4OjUzOjY2NDQxMzUyNTs6PD47Ozw9PDs8PTw7PD49P0E/RUFCQ0M+QEFARUVERUE7Nz5DQkI+Q0I4O4+akZaalJKUjZCUlI6VlI6Pi4yJk4uIkJObt8C6xsXEw8zCwcS9vrWvt7uvr7O6wMfFxMHMy8W2ucDCwsTHytHLwsPExsnFzdDOx8zJwsHOw8rKyMbMys3FxsXDxsXJzdDNz8zHxMDDwsnNx8XBxMfBu760sbCwwb6/wca/vri3w8K6urbAvrWyrKmvsri+tMC0tLi0t7nEua+8vrm+v8K/tbq2q6qsrq+wt768trSura2utaSlqKimmpycnZyeopydmZOQkp2VmKCdmJiVmZmZl46MlH2QkJefmZmYk5GToI6Nko+VjpCUlaKdnKSem56elpyjoKGipKOkop6amZubnJ2enIN9cnx4cGdgamp2bGlldW90Yl1iVFdUU01HOjc7OTk3Nzo3NDg3ODQ1MjM0MjU7Ojk+Oj08Pz04Oz05OTk9PEBBQEVCQUJBQT9AP0RFREVAPDo+QkNCQENBOjSAoZeUmZiVkImUk5aTiZGMlJGOiJaKi5CXnMXLw8O8wMPHwbm9vbu4tre3rrK3uLzAwsDCx8bHurzAwsXHyMbSycHCw7+/vsTLyMrLybrO08jIzcjDyMnJxcXDwsHCx8fJysfMyMfIzcbLz8W3wMDAwLu6vbWzs7+/ub/DucC3u8G8uri7ub27srCvsKy5wri9ube1t7q9xb24xsjCwcLGwr28tamurrCwr7O6t7m2sK+tr7OppquprqannqSlo6OjoqCblZiekZecl5GRlZeZlZmRlJiSlYyYo5qcnp2FiZ+TfJKWlZKUlJennaCipJ+en56foaGkoqKjoaOinJ2fnqOhppl5enl/cnBmZWdkamVham1ub15ZXFZWTlBKRjk5Ozk3Njc3NjM3ODk1NjEzNTI3PDs8QDs/PDw6ODo8OTk4Pj1APz9GP0JBQz89QT5ARENDQTw5PENBQ0RBQDozbKKdlZedlo+PmJiZmIiSjZGVkI+Vjo6TlpbKy7u5urnBu7q3vsG8vLu5sa61uri4u8S6vsC+vru8wMXBxsK+xsK5u8O5uLm7vsHHwcXD04mpz8TEwcTBwsHEwcO+vcLAwMHCy8PGzMvFyNHCsL69uLq7vL63tLC5vrO8vrG5tbi7tryztbm2uba5t7GtusG6vMG/t73Ev8bDw8fHwrvAwr/Cv7iys7O1tLGut7S3tbSxrK2xp6Wlp7CtqJ+nq6ajqKWmpqCgn5SYmZSRkZWUl5OYl5qhnZ6hnKGdoaWglpSbkZeXmJqTnpmZqaSlpKWdoqCanqCkoqOcoqGjoJ6cnp6ppaiVfXuDeG5mYWRiYWJjY2piZ2NbWlpcWVFORT07OTo7Nzc5OTY0OTk6NTMxNDUyNzo7OkA9Pzw8OTc3Ozo5Ojw+QD8+RDxCQURAPz49QkRCQkI+OjlCP0FCPT44NVmfnJiTmZaRlZiYmpeQkZCQk5GTlJKSkpSUxce4tbq5wrm5vMPFwri7ubGxtry6tbnAu7u5tri0tLW/u73Aub66urTAuLW3s666u7a+zLaEntK8v8G8u8S+u8HEwL6+uLzBwcu+vcnEwMDKwLHBv7u4u766tbe0uLy0vbi1tLCzvLG3tri/tr25vb65t7q+u7/Axb2+y8PGw8TAw762ubq2v7i7v7y4trOyq7CwsrWzs66sq6emnqeurauiqKumpqqjp6iqo5+Ym52bmpicnJiXnJuhpZ2anqGhoKGmoJqbnJiboJ+dnJ+coKeho6SknaKfmqKgop+el6Shop+dmpieqKWhi3x5iH1xY2BiYmdqZ2ZpZWldVlZUWU9TS0U4PzY7Ojc3OTs2NTo7PDYzMTM0MTc7OTg/PT47PDs3Njk5ODo7PUA/PkA9PT9CPjxAQUNDQT9DPTo2PEBBQDw9ODdJlJibj5OUkZWYlZGWkpWRkJGUlZSTkpKYlcHCwLq8ub62uL7EwMKxvbqytLO4vLW3vMC8vbS1sbC1t7W7wbi+ub+8vLe0t7Cut7W4v8+bgYq1wbrDtbrHuLa5u725ura7xcXKvbnFwL+8wb64xr3BwLzFuLa3tLi2tru7uLa0t7q1tLi8vbm/ucPAwLu5vLu+vcjEvcfEw7rAvb62sra4srm0usLCureysaysq62yr7Kur6ijpJ6rrKyqpKakpKiqoqemraihoaGmn6Oiop6bnKKfoKOdnJuhn6KgpKCem5eZn6GdnZ6eoaWkoaGioZ6ho5yinqCZnZijn52eoJqZoKKmnYR6g4B4cG1lZWZvaWVraFhYTktLS1JJTEhDOT04PTs2Ojs5Njc8ODk4NjA0MzE3OTk7Pz0+Ojw6ODg5PDg6Ozs7PD1BPj09Q0E8P0NDREA/Pzw6Nz5CREE/QDg4P4mYmoyMkI+Tl5WMkpCakpGXmJaUlJKQmpTDvsbBwby8uLi6v7a8scK2tLyxtLa4s7q9v768sq2vrLGwt7y3u73BxLm3uLStuLK2vcXFh4GAn8S+x7e5uK23tbi6tLizu8XGy8G8xsDAv728v8nDxMW+xri1srK9uLi4vrq6uby6urS3u7q5v7zEwL+5uri/ubvFxr3Fw8Kyur27sa+2uLO3s7q+wLm2rLGrrqmqqa2qqq6mpKWnrq2ppaOio6GkpaWmoqato6Klo5+ho6Gcmpyhn6CloaCenZygnaWgnpeVmZ2fn52gn6KmpaCknpybn6Ofn5mcmZ2epJyWnKOcnqGcppZ+f4d8a25wZ3Brc2VibV9cVEhLSkRKQkNHPzk7OD48Nzs7OTc4Ozc8PDYyNzUxNjk8PD08QTs8Ojs6OT45Ojs9PUA+RD89PkRAPz9BRkQ/Pz09OTc/QUNCQEI5Ojl3nJiLh4uQkpOWjY+TmpOQnZiSkY6QjpiSvbfHvsO+vbu+vL22uri9ure9s7OwuLi1uby8wLeqraSvsba6sb2+u8S2t5x+d4J0hJPBrHuBgpzJxs/CwLiutbW8vri6sr7ExMrFwcnDwr+/vr3HzMfHxMe9tbW2wb26u7/CusDCv7y2t729vcHBwL+8ube8wru3v8W7wr++tbe8vK+vt7awtLO6ubq7r6mtq62rrKaqoqeuqKWqra2vp6Sgn6ajnqKjqKOjq6Oiop6dm5ublJaZnJyfpZ6fnpmYnpejoJyXmZqZmqOjop6jo6egpqCbnaCjnp2WoJmcoKCblJegn6WcmKKQgYaBcWVsaW50bnhjZ2JbY1FLVEhFRUNHQzw7OTg9Ojc6PTo4OTs3PD01MzY1MDY4OTo8O0A9PDo+PDk+OTk9Pjs/PkM8Pz5APz4/P0ZEQEE/Pjo3P0BDQz9BPTo4ZqGYj4uNlZKVlY6PlpmVl5uVjoyMjY+bk7m2wbS/vLm8w8C+wLq1trKywLmvsry8sLe7tru8q6ujsLvU2ru6vrzGsp13Y2xkUFthfY96hYaZy87RzMrEtbrAw8i/vrW/wb/Gxr/LxsO/wbzAw8zKx8XGwLm9vMS/wL/CyL3Hx8XFvLrEv7vBv7rAvLu7wMS9t7nCub69t7S2uLqur7WxsLCytre0t6yurKqsrKuoq6Gms6qlra+trKippaOkp5+io6Onoaeiop6cnZyamYyQlpeZnaKZnpuVkp2UoaCdmZ6fmJimpqKfoqKmoqeloqCko6GbnaCbnKKfl5WVnp6kmpafiYGDgXRvbGx0a2xuX2JeYGFOSE0/RUA/REM7Ozo6Ozo4Ozw6OTw+OTo+NDQ1NTE5OTo5PDtAPD89PTw4PDs6PDs7Pz5DPkI+QD89Pz9FRUJBQj87Nj9CRUQ8QUE6OlmfmJOSlZqVmpOQlpeclZuZlpSVkZKTnZm2uLaxuru6vsG5uca7trWypb69tLbBv66zvbS4wbGwsbPEorLbv7y9un1kb2Bgc1tUVVhsfIaIm8jIzMvNysbCxMvOwry5vbm5wMO/yMbEwcG/xcDKycPDxMO5w769ub+8wsbCyc7Hxr66xr26v7m3wLm5vsDCvrW0vLi2u7CvsrK1r7Cvrqyus7CzsrirsbKxqrCrq6yrrLatqKyusqarrKmpoaWgpaakrKSmoaChnqGgnaCMlJeTm5+mmZ6emZOYnZ+gnp2eopuYp62ooqSgoKKqpqmhqKGlm6CgnZ2jn5SYmKKdp6Gfm4J7eoh6bW13e19wY1tdX15TST5DRUlCQz5DOz42OTo7Ozs7Ozs7PT05PTU2NjIxODo5Ozs6QTs/PDw+Nzs8Ozw9PTw9Pz5BQUE/P0FCQUVDQkRAPDY+Q0RFPkJEPztTmZuZmJ6dmqCalpyZn5KdlZ2boJWWlJqYur20sLu8wcTCv8XGura5sqO7vbS3xLuwtbq2ucS4tby3wW9vsM3BtHpaSmRjS3B+bmBRWXiCi6DFwsfLyMHDwcDJysLAu7qwtLu9wMXGxcW/wMK/y8fCwMjAusK7urO6usG+wMrOysS9tby8ub+5ubW1s7/Avre0s7S4rbeqr7CwsrKvq6+nr7ausrG5rra2uLSzsLGttrS6sa6srranrLKsraSjoaenqLKrqqWkp6elpaCml5ujn6SmraKeo6KanaWiop+foaWenrC0sKSlnp+kqaevp6mgq6CiopqipJ2anqGmp6+psZWCe32Bem1zeHNncF1bXlxZUUVEQ01JQUU9Rzo6NTk7Ojw8Ojs7Oz0/Oj01NDUxMjc4ODs8O0I8Pz46OzY6PTo7Pj0/QD87QUFBPj4/QkBBQkJFPjo1OkFCST9AQkA7TJqdnZ6fnZienZmampySoJWbnp+blZGRlsW+urbDvMbCvr/Ixbe1uLe2ubu0r7e2srWzt7m8u7a7v8d9b3akv5tVUk+DZ09cfIGDbEZrgpCsw72/xsC5wLy+xcS9vbmysK64t7/Dx8PEvL2/v8PDvr/HvLy/tLSutbW8vr/OzcvCt7K4uLi9ubuxtrLIwLu2tLGwt6yzqbCtrbS3r6uuqrG1r7Gvt7O6usC/tre2sru6wLWyrbO3rLC6r7KloqWrrK+5s7KosK+xr6qiqKGkraitrLOun6inpqWmq6Sknqaqo6ayuLOrpZyfp6anrquqpbClpaWbpKOYn6exrLW4sLKOhHl/fHZsdXpwbmlbX19ZU1BBRUhHS0BEQ0g8PTY7OTk8Ozo6Ozo9Pzw9NTU2MTM2OTg8QT5AOz1AOzs5PD04Oj08QD46Oj49Pj09PkBCQkJBRD03NDU9REc9Q0I/PEWUnqCgoJyXmpiYlZmdmZ2fmp2bnJaRj5LDwMK9wrzEvLy7xbu3s7e2tru7s6CWtayvsbS0tLa4ucfIgn9uf6VzUUxilV9RUVWOlnZOZYucrri4uMK6s7u3u77Au7u8rq+us7K5wcLEw768v7u6uLbBwrW/urWur62wvcC5z8rJw7GvtbS0vbq+ubq7ysO7uravsL2xuK+ys7C3vbaur66wt7CsrLK2vbzEwrq9t7bAv8G3tbC2srGzurGxr6err6u2v7e1qbqztbmxp6uop7ausrG1uaisrK+qr7CqqKessayytr20saykqKuoqKusq6i2qaaonqadmKOuvLG7wbSmiYF8gnpzdnZ3bnFgX2ZdWlRKPD8/RkY9RkNDOTo1Ozk5Pjw8Ojo8Pj4+Pjg4MzE1Nzg5Pj9BPzs6Pz08Oz09OTs8OTs6Nzs+PT1DQT8/QUJEQkE8ODU4PUNGPUREPzw/iZ2en52Xl5WUk5aZnpubmpuYlJ2Uio6Owb7Dwr6+vrm2usCxtbGzt7fCtbOrrbOoqa61r620trjHyIqDeHSNYUxiinFcT1ZksLp3VlB+r7Cysbe+ubK1sry5vLa6vrK0tLSwuL7DxsTAvb+5s6+yvLquu7Szpquorbq+uMvCv76sq7Cvs7q3ub67wMXBu7y3sLXEtb+0uLu0u8PCs7a2sbisqaWrsr23v7+7u7exvL28trGvq6uprbOvsLCrsLSpuMC2sqm0tbC3tq2spqu7s660uMKwsbG1sbK1saywsri4ubi+tLGzrqyxramvrqqyuK6trainoZ6ptr+4ur+wlol9gHxxdHd0dnFsX2NhW11PSEE+PUhDRk1DQDc3NTs6OT48PDk4PT47PT86ODMyNTc2OD8/Qj86OD4+PTw5PDk7Ozo8Ozs6PEA+QkI9QEE/QkI/PDs3OjxBRD5CQz8+QYqgm6GdlJiVlZKYmpyWm5WalY2bj4SIhru0vb+7vLm3s7y8rLOytLS2wLXAr7Kzqqqxt62pubO3w8ORiH9/eVZRjpRrbVZlcGeUfnFtXoe8s7C2urW0sqy8ubi1uMG6uLOxrLe8wcfDv7m6ta6lrLOwprCtqJ6gn6WttrXCt7a0pairqLC2s7K6tbu7u7W4trC1xLK+vL+8ubrFybq9vraxp6SeoamxrrW5trKxq7S3trGopp6gmaWmpKynq6y2qa+6sa2kpq2lq7GrrKmtuLawsrjBtrGxtbGvu7ayt7W1sry1urKwsbKutLKqrq2nuLWyta2uqqiosrq9wLa0qY6Ce393b3tvdXJtY11mWFxdUk5NQT5JQkFKSUA2NjU7Nzg+Ojs4Nz4+PDs/OjkzMjc1NzU8PD48PDg+Pjw8OTk5Ozs7Pjs7OTw+P0E9PEJAPz9CQD47Njc6QERBQ0E/QUKJoJ2loJSWmJiVnqCcl5uYmZGMmYmDhoS1r7S7u7S1sLG2uq6wtLOvtbq1urC1s7KttrqvrbyzuLnDopCJkH5KXpjDdIGKkF12fGlqdIq0u7WxtLWytK+su7q4trnAw7aurqqytry9ubaysa2tn6Snp52jpp2WmZman6muuayrq5+lqKSrrq6nr6yvsbGtsa6usLmwtLy+uLm4x8W8vLu4qaKcmJufp6assq6zqaapqq6popqXl5GcmpijnqKir6ekrKaompqemqGnp6anqa+2squ0trCqsK+xqbm2sbWxrqy3s7avrquuq7S1ra+rq7GtsbKoraurs7W3ur2wq6GLeoJ5cnZzbXVpa11balRdXE9NSERGTEJGTkY4NjY1OjU6Pjg7OTc8PTo7PTo5MjM2Nzc3Pjs9Pjo6Pz48PDw6Ojs5Oz47PTk8Pj1CPDtAP0A/QT8+OjU1OkBFQkRBQEJBiJ+ipqGYm56dmqWpmJudmpmUjJmHhoeGrq2uuLmxsqiur7iyq7CwqrK1ubm+tbK4tLm6trm7tbWyu6+UkJ2WTGKNlHZwgHpjamxzfnpznrq5srSzsLGtsLm4try4u7+ysrKusa65r6qrrayjqKGdnZ6XmKGVkpWXkJifqK6ko6Sgoqeio6mpoaanpaqtp6ynqKesq6yyu7SztLm6trK2ramgmpaWm52fq6yqr6Oko6GpoJuTjo+Qk5KSmZaanaSloJ+ep5iVkpSZnqSjoaWqrK2iqaqppKmtrqW0sa6xraqprq+wraWmqqSos66trKmmpqmrpqqnq7Ksr7Oxq6mWgX+Bd3J4aHRzbmRUYGNXXFFOTEhASFFETUM9ODg3NTo3PD46Ozw4OTw7Ozw7ODI0ODk3ODs7PDs4PD0+Oz08Ojk8Ojs9PTw6OkA9PDw7QD5CQEE/Pjk1ODs8RkFDRD9BQYijpqKjnqCfp6Coqpufm5yZmI6Xi42PjKqpqLGvsK2lp6ayr6mmq6CvsLu1vby4wMG+vLy8ua6sr7K0pp2qjleBb25qXGhfXVZZXmdjaYCXuLKts6+urK62trK0ta+qpJ6bnJyeqKieoKipn6GnlpuXl4+dk4+Qlo6Xm6SooKCioqKlpZ2jo6CepaCkrKSmqKSio6OrrLOuqa6urqeqraisoZyamJmYm6moq6ufpqKbo5yVkIyPj5CTkJeVlpifnp6amKaXk4+Slp2ioKWjpqSnoKKko6Ghq6uksq2qrKyno6yuraufoaKkpK+srKmmo6KqpKqqpKmrpqmsq6agiHiDfHZ/eWJ3bG5cUWhUUE5HUE1MQk9RQD47PjM5OjU7OT07Ojk9OTk8Ozw8OzkzNjk5Njo7Pz06ODs6Pjw6PDs5Oz07PDw9PjxAPT88ODtAQEE/Pz45NDk8N0FDQkQ9QEOOqqSjoqGinaulpqimoZ6dmZ2PmJWTkJWnpKGmqKmlpKChp6uhnKKbp6u1sry9wMLCwL7AuLSnpaypscC3r2h4eGtzaFleUEpISkxRT1prbqK2qrK0rqqrr7Cys66lnpKYlI+YoJ+ioJykpZ+eqJSblpeMl5GNkJeTmJ2iqp+fn6Cjpaicn6ChnKKfo6innKehoKSfrKisrKCpq6agpKimrKOdnp2Zl5qrpqqxo6WonqCclZOQj5GQmJCWlZiXn5ibmZqjmZeUlpqdoJ2nqKWgo6Kho56doKmqpa6upqipoaKqrqqnoaCio6msq6eppqShqaKlqaalpKKmpKijkn18gHV1fW1re2RoVVFjTUpIR09STUpORzxFQD0yPzc1OTs+Ozk5Ozg6PDs7Ozk5NDg7ODc7Oz48Ojk8Oj07Ozw9OTw8PD49PUE+QEJAPTc6P0FCQEA/ODU1PDpAQ0BEPkFGlq6koqWeo6KpqKipqqWmnp2imJiZmZWbop6bnqOioKOgoZqgmJeXlqGorK62t7q5ure3u66ooKGooaXEw45gZWNyY1RMRl1JUEZNS0tTXl18tq+vs7Wqp6yropyZlI6RlpeYmZygoqKcnaWemqSXl5eWkJKRkZOal5ugpKqeoaGepqeqop+gp5+dn6SnqZ6jpp+qnaqtqq6nqLClo6Smp6ymoaShm5ier6iusqulqqqgmpiYmJWTlpqTlZWalpuXl5ihnpycl5uhmp6ao6eln6GioqOdm6Gmp6aoraOppZ6kp6mkpaWhpaSsrKmmq6eioKSjpKenoaCgpaKmoIl7gH12eHxkeXlgYlJVYElJSktTVElSUEw5P0I2Nz02NTs6PDw5Ozs4Ojw9Ojs4NjU3OjY5Pj0+PDk5PTk9PTw+PTs7PDo+PTw/Pz9APT03Oj5AQEA/Pzg2NT08PkFCRkBAR6CupKaroaOqrK6tp6ypqKCipp6bm56aoJyalZmfn5uen56WlJOXk5KcnqSorq2sq6uvqq+pnpefpZ6dubGFemdqY1ZIUF6Oe2xTS0dHTlRUZKuysLC4rKahnJ2alJeampCOkZWRjI6OlJminJejmZqXmJmUmZiWnZufpaapoKajnqeurqumorGjmqSmpqqioaqiqaSosquxsqu5qKarp6urqaysp6Cgo7GusrG0qrKvopmcnZ6hmZubmpiZm5SWm5aZnKWhoJqjoZqdmZ+kop6gn6KmnZulpqWkpaijp6OepqOinqaloqWlqKykpq2noJ2dn56gpaGenqWgppmBe4F8dXZzaIJsZVtTWllNUUpOT1VMU0xBNz5CNjg9NzY6PDw9Ojw5ODo7PDo7OTc2Oj01OTw7QD03ODs3PTs9PT06Ozw4Pj09QD5BPj4+ODg8P0BAPT43NTg9Pj1BQEZAQUihqqCrq6GkqquwramtqaelpaWkoKGfnqWXl5SYmZ6YnJ2blo+VmZKRnJihnaqip6Cep6Gln5ySnKKbnqOnmn1sXVRMSVWDqrGfaFBGQ0NHTV6UsK2sr6efnqKgl5GTm6CcmZeSk5+coaSbnpuWn5qfl5uinqWhnqSfpKitraisqKSstLe2sKe0rKKtraOvpaSmoamorrWzsr23vrCssa6tqaq0sbCoq6iytbezuK2ytKSgnaWfrKGhoqCgmpiWlqCbm5ikoaCepKGgnpqcpaCfnZyhqJ+fp6meoaOkoKagnqehn5ymo5+ipaOooKmrpZ+dnZudmqainpyjnqeQgYJ/fHh1aXd1XWxaUmBIUlVIRlVWSkJMRz1LSDhFPDY3Oz49PDo8OTg6Ojs6PDk2Njo8Nzs+PT8+OTc9OT47PEA8OkA6OkA/O0A+QUA9PDk3Oj5APzo+NzU4PT0/QUBEQEJGnKueqamipamprqimqqWmp6aoqqGlpKOmkpOVmJacmpqcmpWTmZuNk5+ZqJ2un6eenKGdnpqZkpmem6GhoYZuYFVQTk9cq+Dauo91YlNIQk2LmZqrqqmkn5+ZkpKTmJiWlpWMiIuOlZ2dnZ2elp6apqCgqKWxqqeuo6uttrC0srGutri9wLqttbSwt7CutKmmpKWsqbmztbvDvMPBtrq2q6+xube8r7OwtcG8t72zs7WirKKpqLKpq6inqJqZnpqqp6CZp6Cfn6eopaSfnaqhop6bn6igpKetmZ+jnp6nnqCmnpycoqGbo6KhnZympaWkn6KZnJukn6CboJyjiYWEfnZxbWl2bWhtXFhbQldOSkdNR0JGTTw+TD00PDk2Oj0/PDs6Ojg4PDk6Ozs8NTQ6PDg5Pj4/Pjg4Pzk8Oz0/Oz1BPTo/PjxAPj8+Pz08Njs/QT07Pzg1ODw8QERCREFCQ5WqoKapo6mqqKmjoamgpqinrK6lqaWpqpSSl5mUmpqanJiYmZyamJmqoLGit6Swpp+enZ2XmJWZnpqcpKB0WVJPUlJddbjSuqCpuZ6EeYmuxKOoramqpZ+enqGinZ+dmpyclJOVlJ6emJSFnZqhm6ukq7KwubKysbKxur28vLm2uMO+v8K/trq7wMS5vbusr6exrbHCtrjCxsDIysDKv7C5ub25wr64s7vGw7zDvLezqbOtqrO0r7Ouqq+jnauntrGtorCmoaOvsa2wpKWvo6GgmqGnoaSqqpmdoJmao6CmqKGcnqKemaSenpiYo6OhpZ6mmZuipJ6fm5ubnIeFgXt0cWtrdXJwaFdbUUVUSERKUEk/RUE0Rkg5NTs9Njs8Pjw8Ojo4OTw4OTs4Ojo4Ozw3Oz49Pj02OEA5Ozs9QDw9QDk3PD07Pj0+PUI+Pjc6QUA+PD45NTg9Oz1DQEFDQkGRqqGlqqelqqimn6KnnKasp7Gyq62jqayVkpWalJecoqGbnqCinJ+psqu7sr+rr6ylnqCgnJyYmp+fmqCcZlBJTlBddY2yvamHotzWztTZyLSup6OjoaCepaulnpeclJGZnZiUjIqGiIZ5bYigpKKrrLS8tsO+vrO7wcPCxcC/wsbGxcPIwsDFx83QyMvDsre1vrK+xbu+zM3FzMzM0se+v8DDvsfGwrfDycnCwca+urS6urS7t7C1sqq6sq67t7+7uqq3rauquLq0vK6uuaOmo56mpaKjqaaZm5+Ymp2nqqegoaGkmJSjlpSZkZydn6Sep5+en6KdmJmUmJSIhH16cWtkaG94amRaW0ZLTEVEU0xEQkU3Oj87NTQ5OTc4Pj87PDs7OD48Njo9OTw9OTw9Ojs9Pj4+NztBOj45PT45PT44Nzs6Ojs/Pz1CPj83OkFAPTw9ODY2PDo8QT9BQUE+kqugp66ooqulpKKipaGlqquwsq2upKmmlJWWmpaUm6SmnaGqp6KrrLy8v8PBsrK4p6Ghq6qhnJ6hop2clF1LRUxTdYWztqSSicXj3NHEtaafmZybnp6Zl5eXkoyOl5eTjo2Qi4KDgndzcW5wj6atrrS5xbvNx8u/wszOzczHydHMzczHycXFzNDS1c7Tyb3Av8O7xsXIxdHUzdPQ09PMysLGxsfKyM6/yNHMx8XHxcG8w8G+v761vrOuv7/Cw8fEx8Suv7iyuLzDwcG6vLy1rqenraigoqmlmpagmpmdqKupo6SknpePm4yQmYmVmJugn6OdnZeempOTi5WPhYB5dHNlYmdyb2ZeWllDTkxDRVBJRENANTU1ODpCPTY4OkE+Ozs+PDk+PTc6PTk6PDg8PDw7Pz8+PD0+Qzw7OkA9Ojs6Ojg4ODk7QT48QD8+ODtBQTs7Pjc4Njo8PkI+Q0FAPpOvn6ivpqiro6KloKampKuoq62qrqKqo5Kcl5ebmJuirJ2frqalsarFxszOzb+wwaikqKytqqCdo5+cnpZjSklNXH6q0dC2oLPTzLqvqKKfnZ+amJaUkpSWkZCPjIeEg4iHg4CBgYB5cnJvbHmktrq5vsvB09LTyM3O0dPR0tHQ0dHNzs7Qxc7U1djS183Gx8nMw8XKz8rT19HX0tXW09PIzMfMzcnSzc7TzcXIycrBxsvHyMnGv8Ozs8jEy8rLz8bKv76/vcHHxMzMyMm/w7+tr7OonqKqo5qTnpyYnqaprKSlppaXipWFkZSHkpKSmZualpiQm5WQjIaRi4B6cnV2Z2NndmlkVldRRE1GQElRQj1CPDoyMkA8RDw3OTxCPTs9Pzs7Pj05Oj48Oz44Ojk5Oj86Pj1APkA8Pjs+Ozk9PTw5Njo6Pj08PEE/Pjk6QEE6OT44Ojo6Oz4+PEE/QT6QrKKiqaanqKSfop2qqKOso6OnpqyiqZ+To5iWn56dpK6bn7CrqKyxyc3U18/Gu8esrbO3rK6jnqOinaCld11naIOw0tra1sq6sqqjnp2doaWgnZqUlJWUiXx3cGtlYmhxb3F7hYqAdnBucXRwhbPCvsXR0NfW1tLWzdTW19TT0dPU1NPP0cPQ09bY1dbSy8nO0cvGzdLK0tbW2dXX09bYztLKz9HMztDM0s+/yMfKw8zMzM7PxcbHtr/Kv9HNy8/Gyci/w8PIzszP0M/NysfNuLe7qJ+lq6eemJ6jnp2qpa2pqKiSlYiQhIyRho2MiJOVmZCWjJiSj4aHjIR8eHN2cGNgZXJiXVJcSUpHQUVIST47QTg9NDU4NTs4Njo8QD07Pjw7OUA7OTo8Ozs8Nz09Ozo+Oz08Pjw/Ojo8Ozs5Oz89OTU7PD48PD0/Pz46O0BCOzk/OTg7PT0+PzxBQEQ8hqugnKegp6Oim6CbqaSlqaCfoaGmn6ifmKSimqmmoqarmqOwsamotdDU19rSx8bLtLXBxbG1qKGkpaChqomBkq/O1Nnaz7yvqJuWmKCcm6Gin5ucmZWJd2ljYF9fX19eX2BeYmx1c3Fwb2xycXWSxMfG1NXX19fT1s/V1NrU1M7P1dTU0dHM0M3T19bT1dDP0tPRydPRyNDY19jR2NLX2dXWzM/Pys3Sy87QwMbCx8XOzdHR0cjMzcDKzMXTzsvOyMTKx8bIzMrT09HVz9LM08G5xbGlqLWup5uorKWdsqiws6ysk4+TjoiKj4OPi4SQjpmNk4+Zj4+ChYx8enFzdG1hY2ltX1ZQX0pKQ0ZDUk0/PD41NDo9NTI4NTU8PEA8Ozw6OTpAOjg7Oj46PTg+Ojo8QD08OTs9Pzk6Pz07PTw9PTo2PD0/QD08PT0+OjxAQjs5PDc0Oj48Pz89RkFEPYKknKClnaWlo5mcnaSeo6OfnZ+doJqnnpyhqZ+vraqqq52mrreoq7fX1NXZ2dHO0L+8zMm2vq6mqqihppV7k5LF1tLVwq2moZiVl5manaCemZydkn1xZWNjX19hX19hYF9gYF9gZm5wcG5rb3J3d5zMwdLV09jY1tnR0tLXz9POy9LN1dTSys/M09bS0dbNz9XV0cXR1MrQ1NXWztLQ2NjY18vIzsTJz8zKzMDJv8fJzc7Py9DNzszOz8jL0NDKzsrCycfJzMrL0dLM09HRz9DKvci5sK67uLWqtrCtqLits7+7sZqPn5SRjo2IjpCFkY2ZjJGRlY6RgIWIenZvcG9rYWRucGFXXFpJRkZETVdFO0A9MzM8PTg3ODU1Oz5APTk8PDg8Pjk8QDtAOj04Pjk4Oj88PTg7PkI6Oj08OkE9PTw6Nj08P0A9PDs9Pjg7QEE9Ojw4ODs+PD4+OkVCRT6Bn5mlp6Cfo6eam5+cl56eoZqdmpyappufpKefuLa1taykrK6+tLDA2NLX2tzWzs3Kw9LPwcCwqaytqaZ2aX+U09bNsJyblpWXm56en52UlpiUiGteXl5hZGJgYGFhYGBhXl9fXl1ibXJvb3N0dnZ5pL7L1dHW1NPY1s7O1MvNzsXOytLSz8fOzc3UzM7TzcvX1tDM0dTLzNDS08rO0dXS1dXKwMnBxczCyMnCzMPFyMrKz8rNzNDN08vGyM/NyMfLxcbBxcrLzM/RxtDOzc3Mz8XHwbi5vcPDvcO5s7K+sbvDxLWqmKWimZaRlZWSi5SNmpGUlI+PlIKJhXlwcWttZ2BgcGhYWGhWTEZMSVBQQjtDPjs2Nzo4OTo1Nz09QTs6PD05PD05PT06Pjo8ODs9OTtAPD47Pj5BPDk9Pj1CPTs3NzU/PDw/PDw7PDw4O0FAPDo8OTs7Ozw9QTpFQUU+hJ6bqK2epKSqnJ6fmJKXm5+am56ZmaKVoamppcTCwb+7tbKxx8K4y9XV2drb2MzMz8jW1cTCta+0qKGoZG98qNnQqpWOjZiWkZOSkZaWlpCLfGVhYmJgXV5hY2JgX2BgYWFgX11bXWdycXFyc3FtcnmkxtPPy9DP1NXJxcnJxsa/w8bPzsfFx83K0sjLzs3G0dLQzszUysfLzs/Hx8/Sy9DPxbrEv8bJvcLHyc7FwsjAx83IxMzKy8/IxMTQyMbCxsjEvsDHy8vLzsLLy8jHy9DExci7x8PJyMLPwb28v7DByce5vaqwsqelnaKcmJCbkKOZl5mRlZiJj4J3b3Rka2BeZnBhW1dgR0hIR0lNVEc/Sj02NDM1NT08NDg9PT06Oz08OTo7OT89OTw7PDg6PDo6QD1APD09Pjw6Qz48Pz04ODk6QD4/Pjw7Ozs7ODo+Pzw7Ojc5PD49Oz49RkFDPYOgm6qupa6qq5qdoJeUjpedmpmgmpqcm6WysazJzcrIxL68us3NxtDV1dna29jQyc/P0dPIwra7u62mnF5vd7rQq5COjpeQh4SEhIJ+hYV/c2BbXl5eYF5gY2RjX11dXl9gYF9bWlxha3Jyb29rbG9vfbjRyMnKz8vNxLrAw7u7urq+ycbCw8DDyMrJyMrIwcXMxsjLzcnEwsvJwcLM0MXLyL+5wbvGx76/xs/Lw7/Du8nHyLvIxsXKwL3Cy8bFxL7GvLzAw8TLxcW7wMrCxcfSxcHJv8rJxsjG0MPDxsOvxMvHw8q3v7y6tKmspKWYn5iso6Glm6Ogm5R7dnN0ZmlaYW5sWltYUkRMRkJHRExERlNANTQzMzQ/PDM6PDw7OTw8PDg7PTtBPTo8Ojs3Oz05Oz07PTs6OD4+PEI+Oz88OTk7Pz07QD48Ozk5OTk6Oz06PDo2OTw+PDs+O0NCRD5/pZypsqm0rrCdnp6YnImUm5man6Kfmp2ov7i8ys/RzMfCw8bNzs7M1c/V2djZz8vSzc3OyMC0w76yso1gcoG/sJCLk5eHe4GFhoB2eHVycF9bW11gYGJjZGRlZGBcXF1dX15gW1laXGJvcm9raWxwb3OPxrzJxczAxsKxtrqysrOyscK8vLy6uMHBwsW+vbm9v7nEysXGwr3GwLi7xMm/wsm7t7u6xcO/vMHNw8a9vbXBvcO6vca7wrqzvMXEwcK2v7a1vb+6y8O8tbrIur++y8TBxsLGycbIxtDGwszHssfJw87NwcXDwL2zt7Cyp6ioubClrbCqrayUeXZ3amRnYGhvY1ZeWUpGSkZISkFFQkVJQDk6NjQ4ODUzOzo7PDk8PDs5Ozk6QD46Ojw6Nzo7Nzo7Oz88OjxAPUA/PT8/Oz07O0A8Pj4+Ojk5ODk3ODo8PDw7OTo8Pjs7PjpAQEU+fqygrLWqt7SyoZ6fl5qNlJaan52mop2et8XCxMjO0crKysfNzc7RyNDG1dTW183Kz8XJxcfAuMW9q69+ZHWQtZKMiYuFeYGHh4B+hHx0dGNbXF1eYGBiY2FiZWViXV1bXF5cXl1aW11daHNxbWdnbnByeZ29zMDDusG4rrCwp6qtrKe4tbe0s7O0vLa9sbewta+yu8K8wcS8v7q1s7q+wLjHubS7tsHCvLi9xsHDu7Wusra6v7TEt7u1q7i9vcC9sbq2r7a6s8W8t667v7W3tMW8vsPFwMPFxsjLxcDGxrvIy7/PysfDxsLDt8O9vba5vse/rLW6tbe2jnl0eGZnZWJrbl5WXmBGS0hISkZCREFFRT88OjU2NTYzMzs6Oz06Ozs6Oz44PEE9PDo7ODc5OTk7PDo+Ozk+Pz1APz5CQD1AOjo+Oz89PTk6Ojo4NTY7PT48PDo7OT49OT86PEBAPIi3pauzsby8sa2foJmUlJiXnqujr6qnpMbLzcjFyM3M0MzNyMrIysnKxNDN0s/NxcfBxcC+uLfJtamwgm1xl5qNhomKe3l+hoZ3eIJ9dGleXV1dX2BfYGRhXmRlY19fXFteXF1eWltbXV9scG5oZmpubnJ8pMe/uLi1sKusp56iqqeeq62zramsqbSvt7Cyqa6mrLK8urbDubq6sau1ubu0wrqwwLG+vLu2u8e5wratqqiwssC2uL2wsKeys7W7vKuutaWuta+7srCpubCtu667uLvAwL25wr/Hw8XBvMbCyMu4xcfFv8bDw7rExsK7xsnMy7O5wry7s4hzdnZraWFibGhZV1dbQUxLTUlFQUM/RkE6OTo5OTU4NTQ6Ojk7PD07Ojs+ODtAPD05Ojc5Pjk7PDo4Ozs6Pj45QT0/QD87Pjo7PDo9PDw4OTg5NzY4PDw9Ozw6Ojs+PTs/Ozs+QDyKwKuouLe5w62zqZ2ZlJaZoZymsLWxt6bFztLLw8XBxc/HzcHDxr/ExMPDysHJyr6/vMC6srO0w66proZoZIqSiI6QfHh+ioV6e4SBd25eXVxdXV9gX19kY2JjY2JgX11bW1paXVpaWlpcZG5vaGZnaWtucoGtubC1rqalp6eaoKWhmpylq66kqKKsqqyqsKOmn6qttbaxvbmvt6+prri0tLy4tLyvt7m1srvBssCupamiq7Gys6i9qquoq6yttLOmqK6hpK+psqanqK6mqLessbK3urq7sry9vr7Ev7XCwcfIt7/AxbfEwr+7v8TCvsTIzMq/vsTAwKmHc3RyamldYW9kV1ZYUEhZUlNLRkZFPj5AOjc4OTc3NjQzNzo5OTo8Ozs8PDc7PTs7Ozw4OT44PTs8Njo9Oz89N0E+P0A/Ojw8Oj05Ojs6Nzc3ODg3OTw7PDs5Ozo8OTc5Pjw+P0E7jMKvrry3ucSwtrCbmZWcmKqpsLGztb2vxdDPzMPIurrLwcu+u8m2vcO+usm3wcPBtLW7tbCutLutqKeHX3GOg4iLgHt+gH54dH98c3dlX11cXF5fYF5fY2NhYmBgX11dXFpYWltbWVhaXF9ma2ZlZ2Vpa29yhaqlrKWgnKKllJ6lm5iRoaOqpKKfpqWopa2gnZylpqyyr7a3p7CrqKq0q7S6sba1rra5sa+6urG2pKCkn6axp6uouaqkp6iop7KtoKemn5ukpqyen6ejoKGxra2ssrSztLC1vLa7wcGyur7DwbK5ucOzwL2/tbi7vb68wsfEwsO+wMSgg3hwa2FmX2tvYFRZXkhOZ09UR0VKRjw9Pz06Ozs4MjU1MzY5OTk7OTo6PDo3PD88PDs8ODg8OTw6Ozc4Ojo8OTg+Oj89OTg8Ojs9Ojc2NzY3ODg2NjY7Ojo7OTo7PDg1OTw6Pj5AO43ItLW9uLrAur21oJ6VnaGmurars7O7s8TPyMvCxri3x8HMv7jJt7vFuLPEuLO+wKu1u7GrpK6yrJ+iimGCh4aGgXx5dXRvbWtqanFpXmBdXFxcXl9fYWNiYGBgYF1cW1xcWFlYWFhWWFteX2RjYmVnZ2dqbW+Inamgl5abopaco5mWjZ+ho6ebn6CkpqKonpuim5+rsKyxtqOpqqqsrKS0ua23sKyzta6yta6wqp+dn6SisqSmqbitoqamn6isq5mfoJ6ZnZ+lmpmjnJudr6mrp6qsrK2xsrivuLm7sLa8vLqrs7O6s720trGxtbS/tr3AvcPBu7u9l4N7c2tfZV5kZFhUV11JV1xLUEdJSUZBPD8/QDs/PDA0NTM2Ojs5Ozg5OTw8Nz4/Oz07Ozg4PDg5ODw3ODo7Ozo7Pzo9Ozc4PDo9PDc0Nzc2NzU3NDY2Ozc5Ojs6ODo5ODo7OTo8PzuJyba4vru3wcHBtKSkmZqkpsCyr7astLfGz8jIwMa7u8TDz765x7i3vreywbSxu7uruLmwoZ2oqqaWnYJlgoWGf3hybnBua2JeYmZmXV1eXV1dXF1fYGFiY2NiYV9cW1taWllYWFdXWFhYWFpeYmRkZWZmaGlrco2nnZSVlZuYm6KXlpGcoqKonZudpaaippygoJuYrq6trrKgpaKuq6eitbGysqyor7KnurOmtaCinpujoa2joqq1qqKjpp2mpqOWmZ6XmZudoJqXnZ2dnK2hq6ekpKatq7O0qrWws6uyubSvqq+ysrO3s66prK6yuLC6trq9v7ezsZSFeXVlXmVeW1lWU1pVS1tRS0lFSEtJQj0/QUFAQToyNDUyNDk5ODk7OTo9PDY9Pzs8Pjs3Ozs3Nzc+Njo+Ozo4Oj07PD06Ozw6PTs4Nzk3NDY1NTQ2Nzg1Ojo4Ojk5PDg3Ojg5PkA6gci9t72/tr68v7KdpaOYpbHCtba9rbS4wszIxr/FtsG/x863wMS9s7m5sr+2sbi6rLG0rZ2Yo6iekpp3aYGDhH94b3F0cWlmZGhlY1xcW1tdXVxbXmBhXl9fYF5cW1pcWllYVldXVlhXWFdWV2FkZWNkZWRkaGp2opyUlJCVl5egl5mVl6CeoZyWoaKppJ+fqZ2cmqunr7Cqm6OkuKqhoK6otqqmp62wpLewpLegopuZmaqmoZqsuLCioaScop+fk5ShlJaWm5iXlpeclZ+qnqqkop2jqqqwrqi0q6qnrbOwpauus7GwsK6vpqensq6xtLC8tLm3rqOUgXl1ZF5hVllXU1JUS01eTE9LR0dMTEU8QD48Qjw7NzY1MzQ5ODg5OTo5Pjo4Pj47PTw8Nz49Njc2PTc7PTs5Nzk7Ozw+OTk6Ozo4Njc2NTQ1MzEwNDU2Nzk6ODo5Ojo3Ojs5OT1AOnbAvLS5wrG+uL2unaeoo6q7wL3Aua60uMHMx8XCw73Ft8jMssHCwa28u7S7vLS4ua+vr6ebmJ+nko+KcHqAfHdxaWxydHBpaGVkZmJcXFpZWlxcXF1eXVxbXF5cW1xZW1taWFZXV1ZXWFdXV1ZbYmNiYmNiY2RmaoGWk5WMkpSUm5mdlpacoJyglqGgp6akpqefnZ+moKqvpp+ipLeooaGiqLSipailsKWwrau0nqCdlZWpoaKUrbGxn6KjnZ6Ym5OLoZSRk5iYkpeXmJeep5ynoaKZo6Wlq6SlsKelo6urraaprq+uq6iqqbOlpqyvtLGvvLWxr66gknp2cmRhXFpdWE5MUkhSYU1WUE9KTU9FQkQ/OT02OTo3NjQ1OTk7OTg4Nzs4OT0+Oz47PDY5Ojc7Njs3Ozs6ODU6Ozo7OzY8Ozg4NDc4NjMzMjEuLzI1NTY7Ojg7Nzg3Njw7Ojs7QTh4u7uxtb2wu7G4rJ6lp623u7zBxbqxubXEycnAw8bGx7bGxLPCv8Wqt7e9tr26urWyq6ulmJedoYqHcXyIfnZuY2FmaWhmaGpnam1gXVxbWlpaWlxdXFtcXl9cWllbWVlaW1dVWFdVVFZVU1RSVWBgX2BhX2BhY2RpgZSTiZCOlJOUnZWWl6SZoJedoaairaakpKOjopyqq6WZn6WxqqCgnaWrnaeinq2sqamtrKGiopWYo5uckKupsJufop+el5mTip6RjZKTlpCYmJOcoaOdpKCilaCipKabo6uloqSqpKuupa6yqaalpqa0pqmorbO1tLm6r6msnotycG9gW1dWVVJHUU9IWltPUkpUS1NMRUZJQzg7Oz08ODY2Nzo5Ozo5NzY5Nzc6Ozo9PDw2Ozw4PjU5ODo4ODY1OTo8PDk3Pzw5Njc4NDUyMTIxLi4xNDI2Ojg2OTg1OTg5ODk7OUA5e7W0rbS7srCrsq2dqKevubmzwMi6tcCvxcjMusHKzMi1yb2xvsTJrLG4wbW7wLu0s6ippJSYmZqHfnCHg3t0aWlqbGdqa21ram1lXVxcW1tcWlhaXVtbXmBgXFhYWllYV1hXVFZWVVRVVVJTT1FZXVxdXV5eX19iZG2OkISRh4+Rj5qTlZOcm6Ocm6GpqauorKeopaSZpa6klJmlr6mfm5mboJ6umZurs6Clpp+io6GVk5uWlpKpqq2anJ+hoJqUkIyZjoyRjJKNlpWQnqGgo5ybo5WboaOhl6Koo6Koq6Crr6Ott6Wjo6Ksraqoq6+zt7O+tbOrr5iEdHNoW1hYUlVRRVhMUVtYTVROUExQUUlOSUI8Pz9BPzw2NTc5OTw8OTg3Ojc5Ojs8PT47Nzs7Oj02Nzo7ODk3Njk4OTo2Oj05OTU3NzU3MTE0MS0rLzQzNDk4ODo6ODo6NzQ4PTg/OX6zraiztq6pp6+um6morLe2rLzKu7a/rMvGxbjBzs/Is8S7t7vDyLGtuL+3vL26srOjp56UlZaUhXhzgHZ3bm1obW5tcGdnaWdkXVpbW1tbXFtZWltcXF5fX1xYWFlYV1hXVlVUU1VWVVVTU05QUVlaWlpdXFxeX2Bkfo2Bi3+MkIqSjZeRl5mioJugq6qmrqyor6Somp+soJWWpKinnZeQj5qerpaYqKqZn52UpaCekpCSkZOVp6ulmpmZnp6VjYyLk4aIjYOQi5GVkaCeoaOXlZ+VmqGinpSbpaWnqKigsbCmsbynn6OstKuup7C1sLm1wLGtsauQfXJzYlZTVk5SSUZWUFJRTExXTUpMTlJHTUpBQ0ZEQz5ANjU4ODk7OTo3Ojo3PD06O0A+Ojk7OTo/NzU5Ojk4NzY5NTg3Nzk7ODU1NzY2NjEzMjAtKi4xMDI4Nzc7OTk7ODk0ODs4QDh/s6ymsbeqpqKwq52qp6mysaW2xrS5urPKxbm6wcvQy7G2uLy+wcOxsLK3rbSzurKxoaGam5aVkoF+dmtnbG5xbnFqcGtkZWdlXlpZWllaWlpaWlpaXFxdXFpYWFhZWVdYV1VVVFJTVVNWVVJOTk5SV1hZWVlZXFxdYWqAen92iY2HkIqXiZSUmJuZnqmboKqmpaudqJmhpZuTj5+jm5eXhYSSm6OPlKOdlpaWiKKbm5OLjoqQmqSnnJWVl5uRkYeUjouBi41/kIqSkpKgmp+ilZOYmJWippmNmaSmqKahn7SyqLK3oZyit6yqraSysqa1vLWsq7GjiXhzbV1OUVFMT0NNTk5QS0ZOTkpKTk1RSU1KQUdMSEdDPTg1ODg4OTo7Njk6Njg7OTk+PDg6Pjk7Pzg3ODk6ODg2ODU3Njg4OTc0NTc3ODIwMzAxKyktLzEyODc2Ojk5OTk4NDk4OEE3d7anpLaxpaejqaWgqKWks6qissO1tbKzxsa3usPKzMazrLq9tLfAr62psJ6mrbmuq52YmZuUkoV6gW1fX2ZycHZxaW5pZWdoal9YWFhYWFlZWVpaWVtbXFxZWFhXWVlYVVZSU1JQUVRRU1VRTU1LTFNXV1ZYWFlYW11hb3N2cYWIgoiAkYSPi5SRlJ6hj5uco6GjmKWXopyVjYeYmoxzjYN+jZeWhpGZkJSOjnuZj5yMgol/ipifo56Qk5iWhY2ClH5+dImOeZCHk4+QnZqZmpGVkJ2OoqOOiZqgoaSkm6K0r6yvrJ+YpbimprGhsa6csLyqqa+qmYJ3c2NWTVJPUE1DU05MUU1CUFFISU5STUhKSkNKTEZLSzw3NDk4ODg7OzY5Ozc6PDk6Ojs3OT85PkA3OTo8ODk3NjQ0NDU4NzQzMTI1ODUvMDEwMikoLC0xMjc2NDc4OTo6NjU6ODdBN3i3oaO0qaalqKOmpaamprOnprTBuLC0sMnEt7nBzsW+s6y6wautw62ooqaSnaa1q6GcjpSVkY58dn1lV1ZfZ2ZpZ2huY2poZ2JcWFdYWFhZWVlZWVlaW1tbWVlZVldXV1NUUE5QTk9PUFNUUk1NSkhOU1NTVFVVV1lbXWlscm1/hXx0TlhykIOXho6dl4uUkJ+YnZWUlpWPlomAk4lfO1dvfIuUiYCMkYyQhoZzioWWgXmBeoWUnZSDlY6RkIOGfZN4cW+FjX2JgZGNj5eamJOKj4mch5+Yh4iWnpqhoJenr6mtqKiflq2zoqaumayrmKi0oqmto5N9cm5gW05TUlZMRFRKUE1MRk5PSUVMUU1LT0pJTU9GSUk8NzU5OTk5OTo3Ojs6Pj44Oj09Nzo/OD4/NTg5Ozc5Njc1MzMzNzYwLi0vMzQ0MTEwLy8oKSsrLTM4NTQ3Nzk8Ojc5Ozg2QTl5t6CjraGmpqqgp6mno6mwqKe0wbmxtbDHwrezvc+/ua+utcKnqsWpo52Yg5SbrqCYlYWTjoqGe3J0XFFMUlVZWlddXmJnY19ZV1dXWFhYWVpZWFlYWVpaWllYWFZXV1VTUk5MS0hHYlxNT1JNS0hGSE5RUU1QUlRWWFpgbXBpe4J0UEJAf5WRkX2JlI2Eio2bjZaViZKIhpWGeYh/YEpRbniKkYR9hI2KhX9/bn5/lHd1dXeEjZlwUY2IioZ7fniUdmh3hoh+ioiVio2RkpaLhIqIlISajIKEkpuWnp2UpKOoqaWknpuwqqGkpJGmqpaiqpyipqiJdG1nXltIUVFSTUlVTVNJTEtPSUhGSk5MTVRLUVBPRklDPDc2OTo4Ojs7ODo7OD4/OTk+PTg7PDY7OzQ3ODs2Nzc1MzQ0Njk2LzMvLjEyNTIyMS8sJykrKiw0ODMzOTc5Ojk5Ojo6Oj85d7abo6edn6Kvoaeopaeor62qtby2uLezwbu2p7nIuLaoqLW2qrK8pp6Vjn+Jk6eVlIl9jYOBfHZvbVhNS01OT0xNUVdbXFpYWlVVVlZWV1lZWFhZWFhZWVlaWFhWVldVU1BNSkVAQJtrc3NJTUtERERJTk9oWU5RU1RVWm6DdHd+amldVY+JlIl0f4eBfIWMk4GSmYuPe4aPgHZ/eHNudXB0jY6Ben6Kq4V5emh2e45wcm14gYuNknh6gHuBdnJykndndYSEhIR7lYmIioyLgH+Ei4x/lIN8gZCYlZyVkZ+dqZ6foJ2gqaWfnZiNp6SToZ+Wnp6kgHNoYFxcSlZPUkdKWFJPSkxNUkpKSkxQSUxRTFJUTEVIQTw3Nzs5OT49Ojs8OThAPzo6Pj03PT03OTkzNzc4NTY3NTI1MTQ3Mi8yLiwvLzIwMC8tKygoKS4xMjcyMTk4Nzk4Nzc1Ojw7N3aumaOimJyftKmvqaWtrLCxqr20sru4trq0sZ+3urKqnZ2sqaiyr6GakY2UgI2bjZB+doV3e3VvbmhYS0hISEdFSEhQVFRUV1dTVFVVVVZXV1dYWFhYWFhYWVlXV1VWVVNQS0Y+OTNOPH6eTUhKREA9QURqlH5MT1FRU1ZedYN8eGZ3jZeYjY99aHmBdniAiY99hJiSgXGHj3x3e29rfq19c5CLf3uGkoF9f3RmdnyGbG9oc3yJjIiAbHlxfXBtdY9xaXGAfo5wQ4uEgoOFf3d3eouFfox7dX6Oko+YipKam6OWmZ2anZ6inZaNi6Wbj56XjpaYj3dvbWViWldXVFFKU1VUT1BOUFZLTktOT0pRTkhOT0tFQzw7Nzk7Ojo/PTk8Ojk5Pz87ODw9Nzw5OTk5MjY2ODU2NjMzNjExMjI0LiwsLS4uLTAtKyonJyouMTM2Mi84NzY5NjY1Mjc5OTV5ppegnpagpq+srquoqbCvsau8uKy7vrmzrKebsKesm4+WnKWppKCXmY6EknmIjYqJdXB7bXRwaWxpV0tGR0VBQENESUxMTVFSUFFTVFRUVVZWV1dYV1hZWVlZWVlWVlRTUUtENzhmNzA/qGlOSEM9OzpEioV6WkpOUFFUWF1lcHJtiKeqwH51eWN8eG98eYiQen2Lhm9tjJJ5dHhqaoCCcZaRi4F+loBJk5huaHd+gmxpY2x5hZCShmtzbHxucnuGaW1wf3ONiYSGen1+e3ZvdHOFgnmBeHB8joyKlIOWl5iakJKVl5mXnpeMg4mfkYuSjYaQln5uaW5ubldVV1RSUVlPUlRUU1hVTU5ITktNTktDSE5HRT87OTk7OTk6Pjw5PDs6Oj0+Ojg6PDk/ODY4NzI3NTY1NTQxNDMyLzAyNCorKiotListKigqKCcsLTEyNTAsNTU2NzQ4NUhBODk1d5mRm5man6WtsKKsqqi1r66stL+rvMK/pqKZlaSXnY2Ei5ShoZiYkZOLc456f4WLhXRudGtwbGRralhORUZDQDw+PkFGRkdLS0tNUFJSUlRUVFRWVldXWFlaWVlaV1ZUU1BMRTFAmjMganNDmW87PDk1PICChl9JTU9PUldaUVlcYKeIYpppdHplf3Btf3qLiXaBiIZ0bJqSdHN8amudj015hZKJhI5nMXaGc2x+foN0ZmV0foSEhYBmaWx1a3GAfGdxcXtuk42Pe3N9fHFwbnVtgn94eXVqeYmCiIqElpOSkIuNkZSUj5eOgHmIl4iGioaAkIh2ampvaGRXUVpXWVlbTVBVVllYTklIRUpKSEdCQUZEQ0c9OTk4Ozk6OTw6OTs6OjpAPDk6PDk4Pjc4NzcxNTIzNDUzMzY0NTAzMS4qKispLCwrKykoKycpLCwyMjYsLDU3NzU0NzhpTzg7NW6SiJqRmZakqK6esp+muq+rsrDCsbvDx5qWj5SZi42FeYSQmJSNkIyPhnGHgnOHjIV6b3Jwbm9kcGZfVEZJQz88Ozk6P0BBRERFR0lMT1FRUVFSU1RVVlZYWlpZWFZVVFNQS0U4MC9cYLNHOVhQOzk0NDGWuotITE1PT1FWTEFJUUlir7Ogcnx4bH1tcoOBhYF6hIaGeXKhlXR4gXN1lIc1cZ2onY6hoYSihXZwhnyHfHOMrY2JgGdmYmpucm1wg3Vpb1h1cI6akndsf3t9bXFtcIB6c3ZuY3aEfoaAhZCRiouJkYuRjIuPg3V4i4+AfoOAfo97cnBvbGBbXF1bWVhgX1JOW1pYV0xISkZKRz9DQUJHPkNEPTs5Nz07Ojs7OTo5OTs6Pzw4OD06ODs2NjY1MTEyMTI1MzQ3NDUzMS4vLCwrKSopKSoqKikoKikrLzNETTIxNjY2NDM8dlI3PTdikoGTiJaRnqSnnq+VpbWqrrGuwbK7wcaWkIyUkICIfW6BkJKJg4qHj4V1goNslYiHe3R4eGx3bndjaV5JUEc+QDc0NDk7Ozw9PkBCRUhMTExMTlBRUlVVVldYWVhWVVRTUExFPDUqnUtbQC1nSTk0Lz+Sg6muX0dMTU5QTDdDTVJTREqGdoB8fHZ+bXeIiHx+hYN/jH52opl5foaBhZmEm5xhhqqfnYuDkI56d4h+iYiNc4qXj4R6XWRxdHp7d4psZ2pieW+Fj4J6boF3dIR6cHR6d2tuaV53h32HfIiHj4CLkpeDjYWNh31xhH+EfXV3e3yJdnByc2ZnX1tbXVNbZl5XUVVYW1VHSkpETEc/RkBEQz5BQT06OTc8Ozs9PDo6OTk7Oz0+Nzk+OTk4NTY1MzI0NDAwNDY0NTU1NC0sKSsoJycnJigoKSkoKCsrKy8wMFVxPTIzMzMxRX5XND05XIx4ioCUjJKdnZ+mkaCroLGor8CxusW6lo6RlId6hXZrf4yRgn2KhI6MeIOAc6GEi319gX5wgH56Z3ZrUldMQEUyMTEzNjc2ODg6PD5BRUdGR0pLTU9QUVNUVVdWVlZUU1BNRkA6Mj0gI5ZjjFs1MzExaT9Hb0lGSUxNT1JMS1RdWVJKaYSIe4l5fHF8j4x6fYmHfpeHdqGZiIePkpSljaypSIaur6+LgYCTioKLgYSRqIeAmJiKnHNtfIGGh32OaGdoeH5uhYeChXGEhUdrgHdyeXZobWtfd32DiX+IhYx6lZ6biYuIkX96dYt2fHhtb3d+f3NzcWtbXl1bY2NYZmVcVVBQVllQRExLRk5JQ0ZDQ0FAQ0E9OTg4Ojo6Ozs6ODg4Ojo/PjY7Pjc1ODU3NzMzNDQyMzY2NTY3Njg7REZMTU1MQzcrIiUnKykrKywvMDArbnUyMjQyMEyBXDU9PF6EdHx+ioWIkY+WmJKXoZ2soaa4r7O8s5eNkouYi310cH+Jkn59jIKSlH2Gfoakh4h/goiFeIeIfnOEeF9jV0tCNjAuLzIzMTIzNjY4Oj0/QEJFR0hKTE5RU1RVVFRWVVNRT0dDPzgwLCOHWz4/ODQuXZZwc6NVRklLTU5QV2BZcFpcXmqNk4eVgYSChZGTfoWIkYGalYKgoZeVm5qlrZOau7Gnu8fDqIqMoaWPlImBkXtyhJ6fkZx/doWFio+IkGpob4OAdY2HhItxhoJ3h4B7doV9bnZ1Z4CUj4aJiIiIh6GroZaJjph/e4KJenpvZ2t4fnl+cmpkXltbXWlcYWZfWU9LTldSUUlQSkROR0NKREJARERBPDo4Nz08Ojw6ODg3Nzg6PT04PD02ODY1NjYyMzQ0NTU3Njg2NzxCQj88ODo+Q1FeZVxHMicmLCwtLS4xKD+LWy4zMTBPg180PztudXBmeIN7gIyAgZGPi5qbpJ2hrKarr7CXkZGEoZSEeHd/jJR8f5KGkpV/ioCSm46DgIGMi4KJjYN/iX9tcGpdQkE0LS0vLy4vMDIyMzQ3Nzk7PT9CRUhKTlFSU1JTVFRSUE9IREI8ODcvOUQ+PDw2My5sk5dNUEhKTEtLTlZgY39nZ211nZuPmpOTi42OmoiTj52LoKCSo6qlo6yTqLaiqMHDrseveLqUmnyNoZ6ZhJOFgo+in5SZkoSKhY+YkZZscHWJi4KWjI2Pdo+EcWyFgYqWkoOFiHKJoZaHk4mPj5altambjZWig4eThH1/a2prfIB/gXNhXWNfWmZqXGtrXldLR09TUU5NTEZJUENETUZBQ0VHQj46OTc9PDo7Ojk4Nzc2Nzs6Nj06Nzg1NDU2MzQ1NTY2NjY4NTU2MzEwLiosLCkoKS46UGFcQCwoLSsrMCwncog3MjQwT4RiM0A8dW5nWXCCcHWHcXaShn6YlpqVn5+cp6CqlpOYnmdlpJp+hJKReYCSiJCSfYqFmZKRgoCAi42JhZCGhIiFeHh+Z01SPi8uLiwvLi0vMDAwMjEyNTU3Oz9DRU5QUlRQUVJTUU5QSUVEPjs8OkNGPz48NzUyPD9SNUhISExMTU5SXm+KfHOBfaCdm6imopmhl6KVnZ+onqmrn6isqaq1l6u/q7bIyLfJ0c++m6Bwaaupn4SUkoWcoZqamaeRkYiVopqad3p+lJiSoZKXl4GUnnt2lZKrs4mNl6B9lJ6cjpOWmaSiprawnZGZqIiXkI6BiGxzc3x+enFoYFxhX2FmY2BnZ1xRRUpLUE9JSkxGRk1DSExGRkNCR0RBOjg1PDw4OTk5NzU2NTg+NzU9ODQ3NDU3NTQ1MzY5NTg6NjE2ODYzLzAuLSosLy4tJyMqO1hiQigqLDEtKEuXXjA2M1GFZjJBQGlhXlBwdWBufWF3jn18lI6Oip+Sl56WnKqYnqpCRH2HiYeYjXiCjYqOjXyKho+QjoGCgImMioSShYKGiYGAhndfYlA0NjAtMS8sLjAwLi8uLjAwMTU+QUFNUVJTUFJTVVNOU0xFRUA8Pj1HR0BBQDg2NjI8OTtGSEdJSk1PUVlthpB3lYujp6q0vbilrqysqKm0q7C3srKtu7GzvpyzxKy7ycu4xL+4paOwsqytq6SLlpiFpqagopeBppmNoqqopIeFk6ShoKqhpKmOnLGLlaOnt7uboKOwk6Odo56RpKKrr62ztaKVpauImomSipZ6e36EfWZgaFxlYl1jY15mZl5bT0NJSFRPRkhMRkpHRUZIQUtGQ0ZGQTo4Nz08ODg6OTc0NjU4PDU0PDc2OjQ0NjQ0NzM5PDM4PDIwMjU1MS8xLi0qKi8sLSooKiYlNVhYLywwLCwwhIE4NzFQhWg1QUNbWFRMaWNXanBYeoV2gZSFiIKcg5KQjZLayJ2Wc1aXiI+InI98hoyOiop6iIKHkY6DhYCLhYaHkoaChImGiIeHcW5hQEU2NDwyLzExMC0sKy0xLy00P0RBTVVRUlNVVVdVTltQR0dEPD4+RkhDREA4Ozw1Qzs9RktJR0hST1BXgZOghK6js6qywcfDq7PGtq20v7O4vra/tMG2u7ukuMaptsnHtb65tKijtK2xsZyakpqfiaevq6SVdp+kl6GrsbOYlqqtqK62u7K6rK+1orGssbW8t7WutaCnqKOom6mwrbK6uLinm7epjaWOkZOgh3mBgnRYYWRWZWFgYl9gZV9aVUpERUxVUUhKSkRJR0VBQEBLREFNRjw4Njc7PDk3Ojk4NjU1NTcxMTw4ODk1NDY2NDk3Pj0zODkxLjAxMjExMzAsKiwuLCsrKyooJyopRVowMCovK2iSTzYwUodqNkFFV1FKTFtaUWNkV3p1cYKUfYWGk3aFfoCNe7+7o7yCtJSTjZuPhIiPkomJeYaAjJOMh4WBjn+BiY6GgIaJhYqHkXp4bl1WQEVNPDY6NDZBQjc2NTAvNkNIQ1FcT1FVV1VcV1BfVUlLSkFAP0dLRkVEOz5AN0Q3P0JKSkVHV1RQXo+lraOxtMO2uMHMyba8xb20tMC3uMK1v7C4dLK0prrFpLDGubGzsbSopLW2qrGgopabopKlsa6lraynpJigrLO6oqmyurW7vsy/xcW9vbPCt7q4v7e6t7msrbCmsaqtvrC9u8LCrJm6qJSuj5iYq4l+gXpqV2JhWGpkaGRWWmNZVlRJR0dMUUdDSElBSEQ+P0JCS0BATUM5OTY2OTo/Njo5OTY2MjQ2LzE5NTk5MzY0NjI3Oz0/NjoxLi81ODo5NjUwKigsLS0tLCwqKCgrKyhFUy8qMDBKj2s1MlCHbTY/RlFMQUxSV1RZVVp3anB/j4SBjoVuenJ5iGK4oZmjiZWTlpOTk42Ql5KHh3uGgY2VioCEgIl6fIuHhnyKg4GKg5V9d3l1ZU9cZEdFTDpRZGFbXlNGPztIUERaY1FRWVhZZ1pUYGBNU09FQT9JSkhFRkFAQz1FNkI+SEdLTFNaVF2Tr7i1urnJwLu9ycy7vcC7t7W8u7e+tbqyxmB1s6Wxmp6rvaqlqKuqo6KytaGrp56Vlp+YoK6lp6elnqSUoqextKeysry2wb3TycrTxsLFzMLKw8C+vb+7vLe0sLm3t8O6xr3DybCeuaqirI+lqLeJgX5xX2FhXFdhX2hmUlhhVlJVSUVFTktBPkdEPUtCPUJAPUY+O0hANzk2Mzc5PjQ4OTo1NzA0NS8yNjM4OTM3NDUyNj84QD5HS1JUVFJQUFFSUUpBOS8sLCwqKygoLC0sL1A+KC40OIB9PDJLiHE5PkNLRUBJTVBSTFFdaGxscZCNhZB0bXNyc4jVwLWZoI2VmJmRjpeRlpaOhod9hoOMlot/g3+CeHqLg4d7i3mBioKXf3R9emtlcHVZXVxQZWViYGVkXVtYV1xNZG1VUm1tXm9fWGdlVVlUSkRBS0tIRkhISEhCSTlEP0hLVFRWXFpbkrnAub23xsC7ucrLura6tri5s7i1tK62tplkdaierXBeoqycmKGjm6Seq6WUn5+QlI6WmJeon6afn5qZhKSdrKWqsK23sL251NHP18/JzNLMz87Kx8C/wsq9wb3CwMXExsq/yM60pLuwtbCbrLm9mn95bF1gW1hdYVpjYlFbYFNRS0NBRUZEPEBFPkJIQkBDPTpFPj1KPzQ3NTM1Oz00Njg5NzcwMjIvMjQxNjk3NzU1NTVEM0VMTT41MTAwMDY6NDc3QElPSjstJioqKC0uLyxATSsvNTRtiUkwSIl0Pz5CREBDREZLT0RSXFlpX3CXkpGUb2xvdXWIs6yhoZ+LmZyZjIyVkZuShYqKfoiHjJCLiXyBhHN7iYOGfIl0goqGlX9ze3hsbXV7aHJlaWxpZmppaGBmaWhtWm10l62kvIiHZ1tvaF1aWVRISk5QSktRTFRRSUxBSkdLUF9fYmZpYZi3x7C5s7u+trLEx7awubGwu6yzsaeqt6yNtqeem6eaT5udjI6glpGmmKWVipOTiZCJj5GRnpuhmJuVl4eemqabrK+or6eztNTU1dbSy8/T1c7Tz83FwsnQv8rJy8nSyM3NwtDSuLDEvMS6pra7xKOCbmNcXF1YYFdaZlpQXFdOUENCSEVCSTtBRD5BSD8/Qjc7RD5ASD00NjY1NTs6Njg3NjU0LzEwMTQ2Mjc4ODc1MzY3QzVCOD8tMCwxMzQ5PTk3LC4sMTtGTD0pLCguMDAwN0s/LTQ2VIhXMESHd0M7Qj5FQkFDSk0/VVlTZVdzkJCYg2hxb3l5g6CqnqaXjZubl4uNlZGajn2Ji4WOioqLkIh8hIJwf4eBhnuHcoOSi499cXh1bHF4fnF7bXhzbGiAcG1jaW1weWl3fX7Lv8Lfp21jeG5jW2FgSlBSVU5ZXlBdXU5RTlRRVVRcbm53gnKWrristKewtqutvcCxq7WmpbinrK6hrLSjjrGumpiYjJGUkYSOm4GNppGciYOLhIqJhIuDlJWYl5SbkZyYmZmenquspKehrKzO0tXRzczS09TQ1NHOyMPU0cjN0tPT183S0cXS1sbAzsfIw6m/uNCeeW5lXWJcVl9SXVtOT1NQTkg+QUZBQkU8QEI+RUU+Pz86PT09PEpBNDU0NjU8ODg4NjY0NDEyLzAzNTI2NzY4NTMzOz08RT1AMTErLzM0OT81OTAxMDIyLTJFTzMpLzMuMzI9TjI0OEN9XzJBhnREOj09ST5AQ0ZIPFZSTU9bdYaFindtd3B9foChnp6hi42Zk5OMi5OPloR5hZCQjYuKiJGHf4J7cn6Agod6hXWFk5GJf292c2xzfHt2fHOBd3FqgHJyaW9xenlye77Lmn6MsYN2coR2aGFqXUNaWltWZmRYZWtUWF1cYGNdY3h7f4uBmaqkpKGgoammqrG5qqa0o6KtoqOtoqexn4mmmpSSkYqSjoiCk4lrlaKNmISBhX6Rg4OTlq2LlY2VmY6FkpCdl6ewoaChpKSox83PyMLL0NPR1NLO083G1tLM1NjW1tjV19XJ1NrNydfW0cqtxMPMinJvYmBfWFNZUltPSkdJSUpAOzo7RUFEPEJEPkhCP0JCOzs5PDpHQjQ2NTQ0PDU2ODc1NDMyNTAvMjU0Njc0NTU0NDw+PUU/QTYyLy0xNjs9MDgxLzI1NC8tLjtSMDE3LzUzMkVEMjg+bmI1PYF0TTk5QEk8QUQ/QTtQTEZLWXCAdX1oc3lygomBnZWdlIWLlomPioiOh49/d4SUmYuNiIiLiX6DeHN7fYOHd4B7h5GXgYNud3BtdX92eH1zhXx5bId2dG99doR1eXudtYw8QYrGpX6NfGllVklDZWNmY2hqZG95W19maGtuaW6Ag4mRi52eoJ2Ql5ifo6OmsqSks6CipZ6hqaCisZyGnpKSkpCLjouGg4+EfpybjI2ChIV6lH6CqZWjjJKKmJKLfZeKmpGrs5iam6ecp73Dxri2xs3S0NLQzNLLydTO0NXa19fY1NnYzdjbzsna2tLWv8zMtHd2bmRdWVJVUFlWRUZKSUVFPTo3OUBBQjpIREBFQ0FEQTs/Ozs3REM3NTY1NTswNjg5NDQzMzQxMDE0NTU4NzQ0NDQ5QD5EQkM8MzMuNkZUV09RSkFKRj8xKiguQlQyOTI1NC83Szc1PGBiQTxzdlY4N0FIOj9DPjw5UUVDSlRsbm9wYXFxc4aNfJeRnYt+h5KCiYaFioKHfHiFlpeIj4OHhod6hHlxenuEhnV6hY6NnXqMcHxvcHp/cnyBcYOHgG6OenV3fXyCdX98h4iwdFipwraMkoFwbmI9XmhycHFwbnh3gmVpb3J1eHJ7i4eOlJKblqCWh4yTm6Cbn6qfoa2copqZn6Wen6yZi5qMkZKNhX2Ih4OFi46gmZOIhId+bZl5hJiGiJOMjZWMhnubiJOPrqqUlZeemKautr2orb3Gy8jJy8vPycPRytTW2NfY19Tb19PZ29bP29rR1sjVy5V5emhoW1lQU1NdSEJFSUk+QT49Nzo9Pzs+SD1AQUFBREE+Pzo4N0RCNzU1NDc5LjU2NjQzNTU0MjMyMzY0NzU1MzQ1N0VCRENFQjU2PEZOU01bbmZjbnNrYVY+LDRMRzg2NTQzM0JGND1XX2hMdXheODs/Rjw8Qjw5OUQ/Q0dSa19tZGJma3aAiHGRkJuAeYCOfoOCgoV/hHx8hJeOh4t+hoeAd4J5bnt7hoF0epKejaF2j3WCdHWBfXSAhG+BkIFvkoR0fIGFenaGe4m3xqTCybiBlpuPeHBlTmZjgXqBd4aikIt5eXd7g398hHZtlJaUlY+XkIOJj5aal5emnJigl5+TkpejnZmrlpGRi42Sg4yFiYiBhZCRnpyZiYWLgYaXe4iIn5eQiY2Ki4J8oYmQi7yhmJOXmZyopqWunqe1vsDAucfJzc7FzcrR1tXU2dXX29TX2drb19va2djO28aGenlmaGRfVFdWVU1LRE1DOz09PDk6PD45PkE2Pj9APD8+PDk4NjdDQTY0NTU9ODA2NjU1NDc3NDU2MTM4NTQ1NjQ1NjdISD1ESkU3OTI1O0g+Ozo6N0lQXVpSVVhLOVQ+Ozk1MzI3STg9TllNSHh4ZDU9PkM9PEA6Njo+PkBFUV9ZZWFdW2h0enlsiY2Sd3Z6inx+gH+AfYV6foKRiYSFeoWIe3V9dG58fYZ+dH+SnpGfg5J8hn54jn14iopugpqAdJiFfoGJhXx+kHqPqY+Qw6C8jJyjnH2JhH2Jc4yKfnOmmpyZlIV7j5CJhGhHcaGknYyLkJKFiIuRkpWPnZqTlZGXjYyVn52UoZSSjo6Qi36Qj46LhImSlpqfn4mMlJKekYKLf6aZiIWOgoaEgKWGioy4mJ2RlJahp6Cdnp2jrra6tau/xcrQyMfMz9PS0tjS1dfA19jZ29ja2tnZ19y3eHl3amlkVmBbU09OSERMQj09Pjk5Ojo5OTw9NkA+Pjw9OTo7OzM3REA4Mzc4PjcwNjg4MzU3PDM3ODA0OTc2NzU1NTQ2RlA1RE5JODkzOEFLPTszQ0BJPDlEV048TVRITj85NjMzMz5DO1tYPjVZeXBaPDxBPD0+ODU4OT89RFJTUlheVVhmbW1taYGPinFyeIp7e399f3yIenx7i4eCfnWDhnlzenNtgX6EfXeGm6GbnpSSgIuIf5iHgJySboeohXqgi3yQjoOIhJx+mpGKjaOioJCkr5+LkYuFi4GShldyrYufrJyPg5ibkJCOXIOikYKMn5OVjIaIjJKTjJSVlJCMj4qIlpudj5WWkYuSlIaAi4mSjYqKnZaZo6OGk52WoYuKiI6ckIOIj4CDh4WkhoyQs5ickpSXoaGemZKbnaexuKylvMHHzcfGz8zPzM/Xz9HUrtbV2NrZ2trX1tnanm98dGdmXF1YU1ZXQ0BJRD4/Pjo0OTo7Nzo7OjM7Oz89Pjc7OToxOkc9OjI3PUA1MDY3NzI1NT82NTs1NTg1ODo1NzczNUhSN0dPSzk5ND1FSkI+MUZDTEE5ODpHWEA1SFdJNjYyMjM6RUNlWD8mX3lpX3o+Pjk8Ozk4OjxAO0JRS0tTWVBUY2J4bWJ+koNubXeLeHl+eoF9hnx7doaEgHNwhYJ7dnZ1dISDhX1+kqajnqailomdkJSWi4qol3KKso2DppGEmZOEmYyilqCZk4manaKSqa+fkZSQjo2IlYtujbeEmsTIsp2ipZucmJaRspBjpM3IlY6Gh4mQko6Nk5SKhYqKhpaam4+QlJOHlZiEgI+LmYiNkKqXl6SjiJmelpuJj4eXl4uFj4yBf4aPpYmNk6iZl5OWmKGYn5mTnZuisrSlo7zBvsfFxcnIycLK08zN1KjS0dbW1tja1NPazoJyf2hiXl1dTklUWUFCR0Q7QT04Mzc7PDo4PTY0OTo8OjgyPzk5MjlJOj42N0JDMzI6OTYyNjQ+PTQ7PjY5NDk7NTc5NDRLUTxKUUs5QTdCR0lANjRKRUxGPjw4OEVUQTc+XDg2MjE0OjtFYFhBRmF0aExjWj41Ozo6NTs6PTpFTUZIUldTUkJjgUZ2gY59fG1+iHh6fnqCgoN+dnaAgnxsbot/enx4eHyEh4p+iqOzp6Oqs6GWp5+lo5aVrqKDkLiVkrKZjKGhjKSbr6OknZiQp5anmayvpJeUlpWQi5iZlqDAjqPJuaubo6atmJGbnbKdhYWoopyYhYmJjpWNi5OPiIGGh4mTmJWMi5STh5SYhoSRkJx0kZiylpeloYicmpOQipGKl5uJipaOhn2MmJ6JkJCcmpmTmJeflKCdlZ6boLGuoqS3vrTFx8S9w8O/xs3KydKmzs3T0tDW2NPQ2LtyeXZdYFVfVk9ISk5EQkNFNT46Nzc6Pzs8Nz00MjY2OTc3ND01OzU8TDw+OzxCQTc1PDs0Mjc3P0A2P0A3ODQ5ODc7PDU1T01EUFJMOEA9RUFHQTU6SUVORUQ6NkFAQlM+OURPMzIzNTY1PXZcPFJcdGlaTV1TPD04ODU2Nz06SkZER05bXFlJZmA7SISLentuhYZ6fIR4gYWBfnB4fH59b3KNen2BfHiGi4mGhJKnu6yosr2vpK2zs6ijorCsipq0naK4pJWtpJeprbempKOfmamXqaOvsKqZmJyUlZGXoJiau7uuyqFqtrirsJSYn6Ork5e+o16qsoKJio2Uh5F8jo59g4aOj5SViIeTl4yQlY2LjJeYkpyZtJeVq52LnJSSjpCSjJmbipGekIuJlZ+hjZSNmJmckpuYnpShoJScnKWvqKGks7irwsjEtbq9u8XHx8LRoMbJzc3E19bRy9ShcHpoXFpTXlFPRUQ+PENBQTg/ODc1P0Y8PDU8MzUzNDU0NTRCMzk6Qk06QjtBSEI7OkA8NzQ2PEI5P0BCODc0Ojo2Pjw0N1RLQ1VRSjc8OklBREA0QUpITkJBPzZEQTxKTkQvVD0yNTQ6RUpcWEpaUW1ncHBEaWBLSTY3NTc6PkpAQ0lQZEdiYGJwSkCLin+Bc4aHfYKIdYOKgn9tfX18f3B3h3eNgYd7jY+MhoyZqsLAr73Gu7O0wby0rauztoynsq2tvaqbu6Sorbm4q6amoaKjo6ivsrGqnZykmJuXl56ipqWSpLquqcC8ra2yuaWkp36IhpytvbCDjIyLkIOPg5GPeoGIkI2OnIiHj5eNi5WXlJCal52omrGakaycjpqPko6VkZCWl46RoJGJlJujrJSWj5ScnZOgnZuYoKGUmp6npqSipLCzp8HGw6+wurbFxMK+zabHxMfDvNXRzcTKiHRyYVtZX1tNSkJMQEZHPkE/Qjs6ND5BPD01PTY+MzMzMjQxQTE3QEJOPkdAQ05DQT1DPTs4NkNCNUJJQjo4Nzg7NUI+NzlWS0RXT0Y4PTRLQEM+NEVKSE4+QUE2QkI/QlNFNThQMTQ1Ozw4O0Q+OUxqal07V1JkS2daVU83OUdFP0NGXGVHYGlnWl1ck4yMiHuHi4aDjHWGkYqBb357gX9xfoF6lXqSlJSYkJOVp7PGyb/CzMHDuce8uq+rubuXsre6ssCupcCkq6+7vKqtq6OjnqeqrrSwqpugqpuhm5WfsLSni6O6urbBvKyonLKlpKiUhY6qxMSkgouPh4iEhpWUjXqDjZGPkaGMjJSSjoiXn5eTmZWYpqCunYyqnI6Wj5KRlZWNkJWRj6GUhpefoLKelJqUn6GYpJ+aoJuglJiepaOmpqSvrqW/xMKuqLe1ycO+ts6yxL/EvLPRycjCtXR4bFxYW2lSTEhETEtLSkFBPUNEPDVBRDs6Mz04QjMzMjI2M0EwNUlFTT5JQEhSQEg+Q0A7Pj1GQTVBVUA7OTk4PDdFPjg+VkpDV09HOD80TEBCOzVKS0NMP0I/PEJGPUFITDkrRzwzNjc0NjRBPzdPYU9hRS89PjZrbGpgQDpIPj9FQmZaTmVcZlRjapmNl4qMiJKQhol5hpSQgXKAfI1/eIeCgZB6jaGWqJqamLq9x8jJwdLJysLNvMGzrbu+p7rAvrzEt6zBqayzu76qsKmkpaOsrbOttrWgn66epaKYo7O9qZuovcGjt7ewq5Kwrausl4eaqqelkYKMk6WViYF2ipJ6hY2SkJ6fk4+Ui4+NlKOZl5yVlaOeqZ+RpZqMj4+PlZaIfI+VkpKjmpWgopy1ppCel6SjoqWenaaYnpWXm6SjqKeisqyovMDEr6Wzt8zAua7Es7u+writwsPCwJlteWFYV1tbS0tNSkZERElCQkFETDo0REg5OzQ8N0UuMTIzNTJCMjZTSE48SkJKUUVLQ0RFOkVMQjw3RVY9Oz04OT88ST86RVVJQVdRRzdBOks6Qjc5Sk1CSUBDPjxERzxCQ089MjBIMzY2MTcwPUI6PWpqSks1UVMzU3BwZE47RD1ARj5qSF9YYVpkZFaej52Ol46ekomKf4mgk4R4hX+Vf3+QiIqQgJahma6mo5jCvsfDx8XTzc7Ny7zCt7C5vLS8y7zDwbW2u62zv7m8rq+ooKintq2tqbK3mp6soqehnau3uKmksL/Esb65s6eqtbOtrpeWpayooJGOkrHFp5WOfZGVfYiRmZCqmZiTk4+TlZOlnpOdmZSho6KcmJ+Yi4yPj56IWpCWl5KWpJllmKOesqWWopasrKqnm56ml5iWmJWgo6iln7arqbm8w7Wms7XLwLiqtqyyuriuqLi6vbiCa25aV1RUTkZKU05LP0JIRERIR0c5NUZNOz43PUBKLjMyMDI1QjU1UFZOPExGS1JMT0hHST5JUT86OElTOzs/Nzk+RExCQEhTS0BXUEY6QT9HNkE3O0hNQ0U7Qz00RkU6QkFCRzkvOkEzNjAzPkdEOTQ9dGRNRztFKzpmfGdWOz1AQkZCcUZpSVJlYkxGpZSclqGXqZaNkYOHppOIgoeCnISDlZCQk46aop+vvq6hxrzFxMbGzs7O0sq+u7axuru8v8+2xL24uLeysbWzuLOrppyrq7iqqKevsJejrqSnpKS1wLCrrLS/w7rAurOnubW4sq6Vpa2vr6WLk5WhjXTBmn6XmYWPlpqMsZWampWTk5mZpaOVn5uWmqmdnKGgmYqMj5adYEqWnJqVmqWWVJawn6+cn6WUr66rpZqgpZSTmJiOnJ+mopm0qaqzvLy8qrCyx8C4paurrbGxo6GysrSkcG1mXFpOUEtFUFBQUTtISklHSUNDPjpLVT9BOj1FTTA3NTQ0OkIzNE5XTzxKS05VTlFKUEhISk9CPD5NUjs+PTg6PENSPkRIUklCV05JQEJBRjM+NThKS0NBPUM7NEVBOkE/PkhANSpCNTIsPmNdZzozNXRkZUBSNyYjM31oVzs6QkNAPVFFV1NzYldGSKqXmaCiqK+ZkZeHi6eWjomThZ+HhJ2Xjp2hmqOktci0qca6wsPHysjIzM3Gvruzrrm4wcHNtce6wbi1urCvr7O0pqObqrS0qqimrqyapK2lpKesur+oq7a3vsG/vrmzssSxub2so661rLqmiJyYppt2v6CFmZ2Ok5mai6+XoZycl5Wbn6GpnqigmpqqmaGnnpiQjZGdg252kqKalZ2inpCusqKrlaiql6qto6OfpaiSkpmciJScop6Xsaepq7q2vrOyrb65t6Cjp6ilp5ycrampjGJlYF9RS01HSE5JVUw9TUROSktCQ0Q8UVU9QUFCRE8xOD03Nz9CNzVVWE4/SE5RWVNQUVVLUUpKRUFFTVE/Pz04PTtHUjxFRFFCR1lNS0FIREU6OjM5S0lCPkNCOTlDPjxAPjs7RzctMj4tMYJoTnpcLzBraGA8PUJCODZ6Zlc7Oj0uLlJgTVVIf2VeSEWrlZyhn7uvmZSfi5Orm5GSk4mrjYein4ykrZSjo7bGvbTBusLCx8jFws3Iwb25sq+5tMDCyrXFscG8tLqqqK2tsKKjmKq0u6appquqnaivp6Oqqr68p628tLi9x7y3tbfBsb3As6m1t6u/pY+jmJGioLyfiZqgmZeeno+3n6mcpaObnKGaqKWzoZueppyoqp6ZlY+Um4uXiYylopSdop6gtK+lpZOwq5mrq52dpKOokZWVoIOPnp6blamkoaG0tLq1rai1srOenKKlmpeVmaqhnndgXF9dSkhGR01RSU1FRkdCUkxKQkVHQFZSREg9QUdRMTtCNzpCRjc5XFlLQUxQVFVTTVdSTlVKREBKSk5POUM/NT08TlFDPz9QP0VaTUpBS0RHQDUzPUlHPz1FQTk3QTs8QDw8M0A8Lyc7KkiRQjpTSjAsW29XNzE8Kh1CgGRUNDktMTpnXEZDQ5xwYkdFp5ekn57DrZuXpZiZqZyWmpqPqpaVp6aVra2Zoau2xMK7vrfBwsDHxL7Nxru9ubKvuLO/wsi1v6+7tri2pqSqq62goJqrqsSipairpp6rr6yiqai/t6atvrG4tse2tbm4v7K/wbe1s7SvvqOXo5aUnJSuoJGioqWjo5+QvaSpnairnZ2gm6afvaKYo5+iqauhnZeNlZ6TnoePhY2TnqShnbWsppyWsqeZr6efmqmeoI2ZlZ+EjaCam5OlpJqYq7G1saqlqq2snJigoJKOkJaonpRoYllhXU9JR0pOTEhFRElBPVBJQTxHSUhbUk9LPUhPVTRCRjk+SEc1Q2FbS0NOUlVXVlFYVFJVSEA4UVFQTTpHQDRDSFFTSUM8Qz5HVktDQE8+SzwwNjtHRj47RkE1Nj85Oj85OzE1RDAtLC9Ndlw0S1o1LE1uVzwtPSkeI3piUTVDS1E6blJGPEt4ZWJXTKKao5yexayhn6yena6gk6OflqWgpqmrl7exo6qztcTEvb+2v8K7yMK+ysi2uLW1sLOzt8HGtr6wuLS4tZ+mrKqsnZ2epaTBpaCqrZ+kqa2voqanvbWlsby5t7bDsrO3ub+yxMC4uK6ztbWjnaWVkpShrqCZop2pqKujmsKtqZ6srZubnpmmob2inaWYq6uspqGZjZmfkp+Jj1d/lp+moaC4qqeTmLWjn7KhoJuulp6OmZSdgo6fl5WOoqSVkKausqupoaKlpZWVnZiLj5GTpJ6JYWRZY2BMSEpKTkZFQUZLPj1KQjk5SktOXVFRST1MVlw5Rkk9RE1JOEhiXExDTFBTWVlWV09aXklBPVdRSUs/SEA1SE1YU0hBOkBBRFBIPz5RPks3MDk5RkU7OEc/LjY+Nzg+NzcvMT85MSUxUVVtW0pPMTA9Z1dEMTc9LSt3YFM2U1prV3JIRTY9dWVcS06en6GZnsOopaK0opyyqJOrpKCkn62prJ28saistbHIxcHCs8LDvMbDvMTKvK+wtq2wtK+/xLS5sbC5tKyZqLCpqZqdpaGnwq2brLGbqqKusKmkp722pre7va+3w62zssLAssezurestLatqqKmlpaVpKyin5+aqKuwr6+7sqagqaiZmZiToqS4oKGkk6+vrKWnn5KhnpWej5CNlZ2ao5+ns6amjZi0m6Oump6brZCek5eUmoCSoZaOjZ+hk4umrLClpqGcoJ6SkpqThYuSjZyef2FlW2dlSklMSlJCQ0BJRzs7Rz85OU9NVV5SU0o+T15dPUhQQkxMSTlNY1xMRUxSVFlbU1VPXGJIQT9aUUFIQUtCN0ZFTEtOPjtCSEROQj07TkBBMy85N0NCOTdGOys2PDQ2PDM1LS80QDErJ1Z0U2VPPzEwNGJbTTIzPjA8dl1eP1tUXmVxQDg7SJZ3ZUE0n6OfnKDDqKSqsqGjtKqVs6ynoqSyrK6pu7KssLS0xsDEw7XAxL3JxLXAyMG0q7Wor7isv8S0t66strmlmauxq6qXn6aXrbu0m6iwm62frrSyp6q5sqe6s7eyucCqt7HDvbTGp76vrbe1qqisoZeXkqaloqOYmKWvuK6ytbagn6ikmZWVk6Sgt6OkppausrKnq6ahnpuam5aYqJ+gmKKer7Kipo2Xrpmlq5eZnqSRm42Tl5qFlp+UjI+cnpSLqamqoaegmZ6VjI6ZkIGFlYmUn3hjaF1rak1QTU5UPUNBTkM6OklANzdST11eUlZRQVdgXEJKU0hWS0g6VGRcTkZPTltXW1JQUVhdR0FCW1BCRz5OQzlIR0hPUD8/Q0lCTEI8MklBOTQxNzdCPjs3RTcrNjkxNDgwMi0vLjw2LSNCcWdzazIzLzFbYlozMzgwNnBbYkgwNUlwaFZDV0aMeWZDO6SjnaGmv6aor6+hqbSrnbmwq6OqtLaxsLm3sLe4uMS9w8e9vMTBxsC4wMbAuqm2pKy7rMDCt7eprLG6opWtsK2ylqWnkaq5qaCnsJ2qoK+0s6qptratu6yzs7q3rLiww7q+v6bDq7C3r6mrq6eemJmroqKgkZihsa+zq7C5mpypoJmWkpemobeppaOisLG0q7Koq5+boKCbnqWdopedo7Owmp+Qk6WaoKialKKelZiJlJiTlpedlIiQm5mUjqiopp+jm5ebk4eOmYt9jJaFj5tqaGxhbG5XUFFaVEFDRVRAOztJQTc6WFBkXlBWV0RZXl1NTFJOXktKPlpjXk5IUE5bVVlQS1RXWkk/RFhQREY/TkA9SUdHUVBCPURGQk0/OjFEPzc3NTQ3Pz05NUU0Kzc1LzI1MS4tLiwxPSonKz1ccD0+MS4xZVtkQDE2NDdnWWBGKD84bH1oW1Y7iXtjQz2nn5yiqb2hq7Cro7G4qaW1s6ygrbW8rrO4vLq9trbAwr/IxLnEwcDAuMS9wLevtqert7G7vr+0qa6xtp6Xq62orZenqI6nu5+krbOeq6KxsLOsqba0tb2tr7G1rLC0scG6xbervK+xuKytqqOxpp+lqqCkl5CZoLOqs6qqs5qdp5ualY6gpqS0rqeirK2usaezrbKqpJyfqKSelaGZm6i1qZeZkpKfmZ6gnpCrnpeXhZWXi52ZnJSKjZaXmpempaKgnZaVl5OAj5SFe46Sg4yWZWxyZ3BxX0ZZZlZEQ01YRFo5SEI2Pl1RaFxOWV1HW15dTk1SWGRKSkNcYl9QTE1OWFdYUEpWVldMPUVVSkVEQU1AQUZISFFQQTtHREZLPTg3Qj02ODcxOT48NjVEMCs4MC8wNS8qLC8tKj0sLCUyKyo1SzEvJ19fYVUxNTA9YFZeOClDM1lUXGdLNox6ZkxApJqgpKy2pK2ppa+utqqvtbqnprC3xbext77BwrS0usW+zMW5wsC5vrnDt8C5srWsqrq2urm+tKqtsbWYmKesqqubq6uOq72dq66xo6ugsK2zrq62srm3qq6usqi1r7O7vcqyqra1sbSvrqehs6CbqK2gpZWWm5qyo62gpq+XoaSampKOo6Wns6mhprKsqralrrG1r6SZna2nmpifmZmsuKOXk5CPmJyhmJeUq5+bkoCTmIydnJmWkYqUk56apaKhoJiWkZOVeouPhXuMioOLkmtueG11e2BFYWpZSUhZWj17SkZENkFiVGlbTVxgSlxdWlJTUmJhTEtFX2BgUUxJUFdWVU9HV1ZVTjpJVklIP0NLP0VESEhRTkE/SEhIRTw3PT46NzU2MDk/ODY2QiwtOCwvMDQsKCwvLSo3NikoOS4kOks1LiJUYFVgLzUoQ19RXC4qQi9KR1BbSDNjWVRLRJmXoLGosaqtpqSvrrWpt7S5pKyzt8q6tLq6v760s7fDwMzIvMO8tr2/v7e/vLG9rqe6uLe2wrarrbG3lJemrquno7CqlK+7pKyxsqeoo7G0sLGxtbG4s6muq7Knt6+1tMPFtqm1tqywramno7afoKexoKSUnJqVsZ6nnKCqjqmjnpuWmKampbinorG0rKeyp62wtqykmaCsqJucnZuUqriclI6Oi5mcopeQmKWhnZSCkpaPnJyYlpWIl5CXmqeco6CSlpCQlXaEkId7hYGEjIttcXd1e35cS2VsXEtOY1w+YntHSThHZ1dmW0xeYk1YWVdUWFRpXU9PSGFdX1BKSFFWVVJLSVdVVk04TVpORUBGSz9IQkNLU00/P0xPSEA7Oj47NjswNDE8PTQ1OD8pMDcpMS4yKSksLC0rLTkkMDQyJTlCNy4jQU5IZjI3J0diTFYlLUIuPUVMUTwzcmtKQ0ORmaWupa2uq6elsbKzqrext6CrtbnJuK7Bu8K3srG1wsLOxcDBvbS8v7+6v7yyxKipuLC2tr+8rquzspyfp7GtpqWvpZ2ytayrsbGtqai0uqy0srWstK2qrKisqbitsbDHv7ilubCpra2lqK2wpqSkr6SpnJ6cm6+Zo6Oio5GsnqOgoKKqpqa5pay1taSqq6isr7auo52jqaqboJqakqS0mo+JjYeRoqCVjZSdoJORhI6Tkp2amJWUh5eTlZmnm5+ejJKRjpB3fo2FfXx8h4qJcXRyfn19XFNkb15OWWZcRkSWW0c7Tm1YYltNYGJOVldWV1RYZ15RUkxjWltUS0dPVFNOR0lXU1xOO1BeSUJESEpBRT8/S1NPPjpOTUM8PD45OjU9KzMyPTYyNDk6KDQ1KS8sMSgpKywtKiY1Ki8mMCkzODoxJiozQmM7NipIZUhKKzpJPzNCSVMsPo9rPEdIj5yqq6KpsaSppbO0sbS1srKhq628zLquwLvHsbSstMLC0cXGvsCyvcDCvL+3vMSnrLess7i7wLCrsa2go6etqqiksKOqsaqvrLCvsK+rs7untrGyqbKpq6alo626rKqxwrm1rLqoqaitqqixpaqko66qqKKfnKOslaWemJ6ZrJ2ip6mirKajray4sbKgqaKgq6+xrJ2fp6ipmaOYmY+gp5iGhI+Ki56gj4uMlpyPjoaHkJSfnZaYlYaWk5OXpJucnIuSkI2Jfn6HhXx3foeFhnRzcYh1a19ZYG5jUXNxXEs7hHxGPld0WGBaTmNbTlVWVVdRXGJeU09OaFhXV0tHTE5SSEVJVlJdYzxQXUQ8RkhIQkc/PUpQTDo+T0o9OT89Mjo3OyozNT4xMDQ4NSg1LyosLjMwOyksLCclMjM0JCwyLTg2MCkoMTxdSjAuSmdERjg8QjA1RUtYMUCUWj5MRZWYraihqrOcqqqwtq24ta6rpaqqvcm8sb23wq+xrLPEw87Ow76/s8DCw7rAs8jErK63rbK4wL6zra6rpKeqsKmnqLGmtK6qsK6tsbC0rbS7pLizrKyup6ugop6vt6qqrbq2pba1o6qnrKyqraGpp6aysqSmpqGhrJaqoZWaoKaepKKqpa2in6ext62uo6Wim6qrramcoaWkpJigmpaPmJ2TgoOQiYWcoIyKjoyZjpCLg4yXo5uSkJuMk5KRlKKZm5mKjouKfIaAgYN6dICDgX50d4yjiHhqXmBuZ1dlh2NOP2eTTEVieVdiWFJlVE1WVVVUT1xdYVVLTWlXVVdJSkhJT0JHSVNRWW9BTVhAOkpHRkVHPj5FUUg4Q0tFODdDNzI6OjoqNDk/Li80NjMpNCsqLCsuIzQuLSsmKCs3OSomNis8LTIsJjA2V1ouMEpnQUE8PEMrOkpPXjREhj5IRkSXkrClo6qxmKuqrbWrtrGrpayqqbzAwLi4s7u1pbKwxMnL0b/Bu7i/v8G5wbrBxK6xtbGzusC+s7GuraurqLaqpq6vqrmwqLGxr7Kttqq3tqe0t6yspKmrnKOes7OoqKS0tKC2raCpqKupq6egq6ypubapqqqqoqmgrJySqaGdoKSipqOqnpynta6opqqio5ilpqeqnKKko5+ZmaCRjo+Zjn+HjIeFnp6HhIqKjo2QjYOGlKKajoyakZKRj5KflpiWi4qDf3SGgX9/eXSDf3p4f4GInY9vcWdncXhcYHOIa09emVZIbXhVZFZRYlBNVVRVUE9YW2JVSFBpVFZTR1BZVUk+SUhPUVB4TE1WPTxLRD9AQTxAQ1VDOUFLPTU7RTEzOzk3KjQ6PSstMzQxKjgqKisqLCkpKC8qJiklMzssJDIpMjAyMSUvMlFiMDI/Zj1OWD5DLD5MVF8vSmo2T0Q7lo6woaarrpqspa2us7Svq6Wwqqm6vrvAsK64raG2r8nHyNHAvry6vMK9usPBv7+usrKxtby7wrGxs6uzqKS1qaWts7K5sKOut7Kvsrmrua+prbasqp6prJ+ioLWtqKGfr7KitKqeqKeqo6uhoqytqL2vrK6toqiooKyZkK+hmKKgqKeeqJuZqrCpo5+toqGToqOjp5iaqaWYl5mdj4qHlYh9jYaEg6OXhYKCi4aOjZGEhJOgloeQnJCTkI2RnJSXj4qGhXh0gX98dXh5gHt0c3ppgYajdWleZWuBdWaIi31SWHBdSnhzU2RTUV5NTVJZZk5MVllkWEZTaVJRP0JOUWFROklITFNJcVFMUzs8ST87PD07QEBXPDw/SDczQ0IxNTo5My01OjopLTMxLS02KSgrLSw0MiMyKScsJS47LiYxLjAtMTQlLC9LZzo0OF89YWQ/RjFDUFtbK0hOOVVBNJGPsqCkpqykp6SsprSysaqksaiquL7Bu6+nuaqmrrDJx8jRw7y/vri+v7zJvMG4sLC1sbq7uMCys7utuK2itKenrLK2ubOoqLy1rbW8sL2mrKy1q62cqa+jn6SrqqecnqqypLOomqqnqaSpnqOpp6m9q7Svrp2ppKCunJuyo5WknKWln6SbmqmrpZ6bqqGbkpuhpZ2Yl6mokpiak5CKgo+Ffo+Cf4edj4Z/foyHkI6QhH+Tm5OFk6GMlJKLkZqRlYaJfn9ye3l9fGh3fHp1cHB9aIV4hIhkYWhjcoV5bGZ4XV1VQVZ6bVRhUFJYS0tOcXVdSFpbZ1lFVWZQRD5KTkRDQTlIR0tTP2phSlE4PUg8PDw+Ojw/VDY6P0M0NUg+Mjs1OTAyNzw1KC41Ly0xMSYvPktIMCUaOTAlLCwwOS8sLCs2JzE3Iy0vRmpJMTRYPWZjQko3R1NgVSo9O0RYPyqPlLGZn6CppaShq6S3srKmqbGnrLjBvbWwo7msqKixw8nJzcG2vb+1t7+5yLbDtbSytbG9uLq+tq25tr+tobOnqquwtbi1q5+9vKmyv7O7oK+ztamsn66wo5ykqKqinpyksKawoJ+rqaiiqpykqKCtu6eusK6gq6Okrp6eraaXn5uho5yfnJqjqqOamqSklZeUn6KWm5emq4uekZCRjIKKgYCPgHuZlI2JfH+Lho+OjIqEkpiRhpSjiZKSh5CZj5OAiHx5bH12eHhje3pxcHFyeGiAdGqDZ2RoYW5zjWxhaW9fbz9beGxVXk9RUUpKTVRZV01dXmxXRFhgT15QSE1ERjs3SEVLTzxyaEtLOUFFOzs9PTs7PUo0OUI8MztHPDQ/MTgtNzg7MigwOS8sNS4uPS0qSz4qHTQ5JicuMzQuMCsvNCYsOiQ0MEFoWTEzUz1lX0RMNktXZU8qPDNPWT0jk5msmZ+Yp6Sin6ejuK+uo6+wqqu4wrqzrZ+4r6uotLvIy8i/t8K+r7S9t8S3w7GvurKzwLW7vrepubi9q6S0qKmqsK65saqbu72ksL+1taGutrWmp6exs6CepKanoaWZn6yoqZ6gqq+noaeYpKigsLifpLGvoKuhrKScpqepmpqcn6OVnZ2anqmml5ufqJKYk5iek5mWoamQmomOkId9h3+Cjn18oIyMiHiDi4WJjIyFiJKajomVnoiQlIKLloyRfIV7c3B9cXN0YHl4aW9xcG9pfnFjemxpZWNgZoV+X1pzanFLTH5oWFpNUExKSFBSUElOXF9uU0RYW1JnT0hLRUY1NkhCTEk1WmVKQDZFQjk6Pj0+OjpDNTk+OjNARjwyQDIzLzo7ODMmMjwwLDg1QiopLUMqLDQ7Tk5AOzczLS4rLTcqKjwlNTI8ZmQyNE0/ZV1GTz1SWmhIKj4vWVg1KJedppmdlq2goKGkobersaSztKqoucW1sq6gt6yurbC1xsjBt7/BubC0vLe/u7+vq72wtL+xvcO5qbu6t6eotaioq7Cts7Cnmr63pa28ta+esLewqKWnsLKboKSgpKShl5yvpqGeoqevoqCik6Sko7ewoaaxq56so6+YnKqlqZ6Ym56lk5udmp2mqpqcnKWWlZeVnY6Ul6OooZCJipCGeoV+hIp6jpeKjYZ4gYeEiIuOhY2TmI2OlpiKjpV+hpeLj3mAe3Byd29vdF95d2RsbGtpaINtZXJqa2VoXGNzf19abHZpWkh9XVtYT09KSEhSVUYyOV5ebFBEWFZZZU1JSUVFMDdGP0tCNklKSDs2Rjk0OT49PDk4QDg7ODo3QEk+ODw0LTM8PDc1KDU+MSw7QTEoKzY8IzhSPSoxMTM+RDUsLSc0Mis7KzEzOWNsODRHQWZbSFREVV1oRS47MmBULDKWo6GXlZypnaWhoqC3qq+gurmmrL3Fs7CuorWvrK6vtMTEvbO/urews7m4uri6rq7As7S4r7/BuKy9urWmorOrqKmzq66yo5zCtqaptrSpnrK7qaamqbCsmaKnnKSmlJihsqWZnqSpqZyioJOloKS5qKSnrqedpaGok5+poqGgmZudoJKbnJegoqubm5mhlZKVlpqNlJOjp6SPiIqPhnmEfIWFfJyNiYqGeICDh4iIkYWVk5KMkJWUjY2Te4OXjop3fntsdHJsbHNheHVoaGpnZW+EZ2hoZGZpamBoYmlmWmV6Y2FSc1RbW1NMSUdJT1NAISlpXmpMQ1ZVXmBLSUhFQy46QjxGPDZLUEQ4OkQzNTc9PTg5NT86OzQ+OEBMPT45Myk4Pjw6OSo2QDMuRTQoKyw+MC1OPy4rLTcsMTE5NSwmLjUtODA1NzZgdEIzQ0RnW0tXR1VgaEIzNzhjTicynqSjko6kppyenp2jta2nqrq3qKzDwbewrKK0raevr7fAwL2xwbexrrK3tri3tqyqvbOvsrG9wLeuvLyxpZ+2rKaltKmrrqCfw6ypprCzq6y0up2oqquxpZidqp6npZGZpq2imZ6kqaGbop2XoJ2ntqWvqq6hoZ6doZWgpp+ioJmcmpySmp6Vpp6to5iXnpWUjpSYjI+YmqigkYiJioh5hXeCgoKch4uCiXt+hIiGhZCElpWPj4+RkZGMknuDlY2Gc359Znhva2psZ3Vza2NnZGN0f2JkZWZlaWpjaXBZXlhdbGRhTWhXWmBWSUdIS01SWD45X2xpR0JVU1xbSUlHRkEuPD85QTg5UkZANzpCMDM3PTc2OTI6PDk3OjlETT1CPDAqPEA7QTwtNUIzNz0rKiwwQSpKSy4vKiszNzIyKDU3JCs3LjcyNjg1XHlOMj5IaVpMWkpWYmZBOzNBZUglNZukoJGMrqCZmKCWpbSxorG+t6Gxxry5sLGjtqurrqm5vby7rcCyr66ttq+zuLOoq7myr620tru2r7i9raaetaugobGlq6+fpcOgsqOusa+3rbWdra+srqOZnKeqpZ+Vm6iln5mlo6mdmqCclJudrbCmuaiuo6Kamp6ZnqOapJ2XnpiblJqhkqiVrKmblJyckoyVmY6UlJmpp42NiomPe4J0goGKmIWHfImIhISKjIiShZOckpKPkJGWjpB/gI2Ngm+Bf2Z5bWhramdxcmtcaGRicoBgZGdqbWxnamhmbFxsbXVxYVRiaGNlWUlGTE1PWFFQVWFlgVRAVlNZVUZIRkVALzw9Nz82PEZOYTg6PzI0OUAzNzgyOD83PTg+RkpARDkyLT1BPUE9MDVAOUAxLSsuMzw7SzYvLissLTI0OjYjMyopNi41NTQ2NVp8XTE5S2pbTVtLWGRkQEExSWVDJzSTopuPjrGdm5OhmqmysJ+4wLahtMK8vbmxpbavqa6lt7m3uKy7r62qq7eqtLmupbO2sq+psba2sbK1uqipn7apnp+qoqqtnKrBma6krrC2taysnrGtr6qjm5yjrKiclZyno52aqaOllpqgnZGbo6uqqbufp6SgmJqanqGPa6KWmJxxgpacpIB2kauonpaWoJGJl5mAl4ugj3mGk4yDbWl+d4NwbIaKhn2Ei4ZvXmNgZ4SXhmuLkJSSdXeLhH6Dj39mh4BodWlmV1xpc25OUGpkZnGDZl5kZm5saV5eX4mQhYdoT0tEOEVUZ15KR1BQVVVLR1Ngb3RlRVtRVVBGSEZDPjE7PTY9NjwzZlw1Ojw3NTtENDg2MDpCNz86PkZMQ0IzNDM9QEBAPTI4QEU9MSwrMDg+RzcwMS4qLiovNjY4LCMxJzIxNDoyNzZYgWwxNk9rW05cS1tmYj5HMVBkPSsvjaSZh5Wxm5yToJuqraujvcWvqbfDuL28rae2sKarpLi0srOxua2qp620prC1o6i4t7app6y2s660rbOiqZ+0q56ipJynqJqtvJWnpa+zt62tpKiuqqumoZ6coKinnJehpqWbm6ennZOfoJmQnqeqo7Wwo6OjnZaYmJejiKGPkpqHoYeUnqF/pX+nq56Tk5yTiYRyeIyOhIihdoiMaZeIZn1zeKBviIeEfo18f6Ggn5l/e4iedIiOdpuKbIeBg21oZWN6bHFiVIZtY21pmHFYanBuhldeaVtraluIcG15codph4RaXkZOPkZeTUVSVldRUVJXVGdeTFlLUlJQRUdHPjw0OT05PDc7MDw8Nzk5OjY9RjU4NjA8Qjs8OT1GUUc9LjU8O0A9QD41OUdBODIpLjE8STkvMDEuKi8oLTQ1ODMlJjIxMTU+MTw4WIN1MjVSa1tOXExcZ189SzFWYTcvKIyml4Scq5yZmZ2fq6qoqr/Dr7K6vbfAvqqkt6+qrKazta6vs7arqaWxraW1s5yttbe1pqeos7Gtsqivn6qhs6mgpKSaoqSdr7aVpKamtrymrKepqqynpqKgmZ+mo5mZpqOkmJykqZaUopyUk6KlpqG3pKSgpJiVk5iUnIiukJiUiamLl6OchbGApK2elJqelXmC1Kh/h5TBm8d5eLGlt5dkgMCcv3mEhHmPg3yQkJHKcZa8nMV7cranupB7gWyWsauweWhrWLGub2VpvJK8bmh6bXKP2H5TamO2sn+AcZR1mqGqkFdPV2FPVk5GVFtYUVBTi1xXW1BAXEVRTkRHSTw8NTc9Ozo5Oi49Ozg3ODs5PkY2Ojc0PkA+Njk/RVJJOi41PjtCPD9BODpKPjUyKjIyQkUvLjMyLisvKS0vMTg2LSAvNDE2QTE9OleDdzIxVGtcT1tNXmdcPkwxW100MSGOppOBpqmel52dpa2yqbHCvbK1wLW3vsKrprOsrKmor7Sqr7azqKemtaanuK6ds7K2q6akp7KurbGmqp6npLKkoqKfl5ygn7CtlZ6jn7S5oqmooa2upKKem5qhqJ+Ym6ihn5iep6eRnKeblJ2hpqKgsKOfoKOWlpKYkpmFsGtqio2qfmeEloetZXGenZWappVxrqGkfne7fGuhj3axX2q0W6WAZZyRYGaBemZ/anhqqWW+cmemjHaxanyxeHSSk2NtbaduW4SgRWlnh5ZFdZxgfmd7o6eCWV+Lq2mAlHh6aqc3Sq9bV1RsY1tLTldfXFdWO06IT1dWL0lUU0pDRUY9PzQ2Pzs4OjkwPTg5OTk6PTxEODs6Nj1BQDY8QEhRRzkwNzxBQz5ARDhARz0xMy0zM0UzLi41My8rLyguMC46Ni8nJDIwM0IvPTtVgnYyLVZqXE9ZTF9nWTpNNV9ZMzEbkqKVgqympZ+jpKqxt620vb6wt8WyuLrCp6mvq66pqbGupLC6sKSkrrOjqbmpnrOzsaSloKqtsKyvpqifo6KxnaSdmJWYm52up5eboZ+0sqGqm6GtraCempegoqmdmZ6koZyZoaekkJ2jmpegn6uepqegm6ChlpWRlpGahrWbtXiFqZm1mXeHs5u3f5OWl6mVfmuBpnqBhYiSlJJ3q2dqsVuse46HlHSJcI+GgH+IkJd4g4KLl4yDoI+FsHZ3n3Framx8i06kWEhjY5l+Y2imYHlydVKThl5QqW1jcX2GgGKdLlGibltUa2dgTEtcZFhcWkI+sHhXWEEjTWhGQ0RBQEExOT44ODo4NDs6OTw5OkE6RTo6OzY6Q0I4PT9LTkg6NTpBRkJAQUQ8RkQ7MDIwMTtGLDAuODQwLC4oLzMsPjgzMR8vMi1EMTw8U31uMytYalxPWE1fZ1g3SjlhVTUwHJaflIizpqairqmns6yqu7bCsLzCrbi3waqsra6upq6yqaGvvKqhp7Wto6u1pKWzs6ejop2nqrKosKilnqCfr5afmZWWl5ifrqOamqSotK6hqY+pqKmbnpWYoKWpmp+do5+coKKlo5WbnpianaKqnKWam5uioJeTkZOTnYPVk5m5cLDCfsaGfNaUm7t8mpalkI2bjKR6jYejgqWCeqx5j51Vr3uJfp9quVq5d4aDfaaCk3yYeqp5jZ2Pe7FujoR0kLuFb5RPr6fFilGgemNgqmJzcodsl4dfU7W0yIaAiXxjpDNCnXZdUWpoZFBAWGZaZGFKSE1sS1pTT1lmWkNDP0U/MDw8NTk7NzQ8Ozg9OjxDOkY6Oz42OkBDOzZAT0xIPDk7REhDQkNEPEVGODEyMTFEQi4vMDQ4MystKS4zMjM5NzEjJTUqPjM9PVF3ajYqWWlbS1xQX2ZUN0c6YVE4MiWcoZOYsaiopbOqpbSopby3wbC6wLG1tbyztqexsaOxs6afr7aom6i6rqKvsaCztLCgpJ6ep6mwqbSppZydnquXmZeXl5aXoquempeorbCoo5+OrKKnlp6XnKGmopiioaKhmqKip5ueoJ6VmZqmoJynlZubn6GZkJKVkZ2Ism5otXGriHCOpnK0c3K2e5qYpI2Pm42ifpCgpX6wdoOR0tF1W658hn+kb5uqpmuGhX2tfZeZj3uxc5OdjnizZZZ0hZ5unmaUUsiLWsJcn3liX61gd3OGYpeIXlnKnW+/gXVNS7VTVcZkVFFqY2ZYQU9qX2xpUFVGSTk9V1JbV1hIQz9KPDI/OzU9PDQ2Pjs3Pjw9QztHOTtANzs+RDsuQ1JKRz4/PElKRkNFRD5JSToxNzQ2QD4vLjI0MjUyLSkuMjYsNzQyJh82MDs1Oj1QcWg5J1dpXEJOVF9lUDVHPWFNNjIvop2RpK+spKq7raa0pai2u7yyu7+3trS7u7OltbSisrKjoKywpJimuq6ksbCctLipoKadoaqlsqisqqWanZqpnpaVmJmTk6OpoJeTpquwpaKWkqyfpZKUoZylp6CVm6anoZqjn62aoJ6ekJabop6cpZSclpqin5WYlpKbhax7d6h2o4+Kh6lvrYqDqIOZmaKKkpmLon6SmImuhX+Cs1xys1KufoOCpH9x1313hH6PnYaZmnevhoqRnId3tGGaZZqCgZVsklqwWEuadZh5ZmCtXnd3h2eYiGpdr3eVno94bDV5yK6yX0JUb15oYEVQbF9wbVZVTS9lY2lTWVE7QURATDo1PzkxPTwxNj85OEA9OkM6Rzs8Pzo+PkU5LUVVSkVAQzpNS0pCSEc+R0s5Nzw0Njo+LzA0MzMzLjIuLjE4Ki4zMiUhMDM3Njc9UGtlPiZWZ1xAPVZfY042R0NgSTo4OJ+dlKC4sJi0wa2osqeqsrq4tLi/uriztr21pbi0oLWtn6Cpq5+Vp7asqLCxq620pJupoKCoorWnpqqjmZ6VpaGUlJyZk5ajppuTkKesr6WhlZipn6KPkaKaqaahlZqmqZ6dpJ6snaCdoI2UnpueoJiYm5aXoqCUmJGnnYapfX2leaGPj4OqcK2MgqeGlqChipeXiKOBkIeUqnyAi515b7FaqIOCiKB5dNh/dod0p4GOm42SpHyWkJ+Ee7JenGSgfYKUbJJcq1tak3+Rf2hnqmRze4FrmIdxXaxaiaCOa25lT0pDoVxaTXRdY2ZNWmFfc3RfSlU1SpqSWUhFPUhGQUwzNUE4Ljs+MDVBNzhAPDY9PEY/Ojw2Pz1CNy5IVkpFQEg2S0lOQElLQEVOOjpANC47PjAwMjE1NCsqMDUvNywmMjEoJCQ2NjcxPFBlZUEmVWZbPzFVX2JMN0ZJX0MxPjihnJmZvqyYtMKuq62pprSwuLG1v7q6s7G3vKq7taCxpZ6lp6eek6qxqa+qtayqrqGYoaCmpKS6oqOroZeckaKglZSfmpSZn6CQjYypsK+mnZeap6afjZKkmKirqJSXqqifn6CjraOgnaGNlKGYn6CSnJeclZ6hlZePq5uPrm1ytHSpjHeKpnO0eXSzgJKko5KcjImkh452uG+Me4uia2u2WqGGZZeXaaCip22UcrR0k5h/smqGkoita3WzYZ1mom6GkmqXXK1gTaF8h5FSc6NseX9+bpiGb1yvVjycd2ZUb24uW6dPYlNrZWJtWWJcYHF8Y1NZUD4+bW8zQkJAP0w5ITdANi47QDM3QzU4Pz8zOzxDREJKRk1JRjYySlRLRUJKNklKUD9IT0NGUD08RTUwOzwwMDAvNzUsKyw0MjYvIzAwLCwdMjg5LzlOYGVEJ1VkWT4vVV9hTDVGTV44MUI5pJqbnbuinLLArq2rq6e3qbivtcC1vLGvubirwbeqq6Gcp6SinZKrqqe1o7Korqqhl5yooKSruZ2jrZyWmY+lo5aNnaGcmZ2fkZOVq7avp5mUm6ypl4yTppqlraORl6uyo6CeqKuwmaCij5iil5+blpuXoZOdqZyUkauZh9SSmrt0scSAw4Z91ZacuHiIkZeMl4mMp4d5o7Z1fXd2woKasmCDunnAfHW4YrWBjIepfZaBrKlxe391vIinoGmdYaaOr6F+jHSHq32+bnO8dLKDdXiAim6aiHBtjaR0vV13fVthebxqW1ZbaXleaWBkZmJteG9ZW1lDQUByP0NGKzVIIic7PzEwPD83OkI5OT1DNDxATlpeYGBfX19aUFBSS0VGSjRITFJASk5FRk9CPEU4ND05MDIwLjk3LSouLzE4MCItMSwzHiw8OjA4TFhhRidUY1g8L1ReYEs1O0xbLTdAOaeanqK8opexw7Ctqaqssae4r7bEsbuyrruwrsGyrKWjnqShnJuRqqSqsqS1p62kn5aaqpmmrLmdo66ZlaGQpaCTjZyjnpiempCWkq+5sKuVl6Oop5SRlqWdpK2ekaCoq6CcoKmksp6jpY6mopWhmZyXlaSYj7CgkpWqnoWQmbWAkZGNuJV4gpObtXdubG5zbnmPhI6Jc57Bu7yae4GyqHCAdJG5g3yGhouHjXuKho2XfKS7ub2cdXqzo3R2l3V0sHWYnmaGaY22dHJwd7aMXoB6fYlng3lteWKLrHB1hX9YW6dqRGVaVGZgY11iUWdmcW11Qk1QTEQ7Wkw+SjM8MCA4PjsuMz1BOTk/PTs8QzZCVFlaWltbWlteYGJgXVNHR0g0RElUQUtOR0VPRj9HPDc+NzA3MC85Oi4sLy0qOC8lJjIoNCQoPjcvN0tUX0cnU2JWOCpPXV09KztWVic9OzynnqGhv6WWs8O0rKqnrKupu66wxq+1tK+4p7W4ramjoqafoJ2ZlKykraqmtaion5uWoKOerKS+pqGqmJWckaKbko+hqKKTnZeSmJSytbatmJ6kpKKLkpKmnKWrnJappaadm6KppqajqaGSrZ+Xo56Xl5ieno+wqZScp6KOan5pnKd4iXN+mo51emWHe72+wLpukoNxlIZfcmpaXpqJYWSHjpVrYICVY22cdmKUa3+alZRlXmBjcZuKaHKMfYaVZ2p+cXR5fXxiW3d0gWhQXG6EfXuLalhseYJySUpvhXBNdE1FV11mYUxbWGdjXk9bbXZqclJPREVOO0hJPE0/MiwyQT84LzU/Qzw5O0A7PUM+UlZWV1laW1tcXWBhYWFgXFVHNURGVUVLT0hGUElJSDs4PTUxOi4wOzouMC03Nj01JiIvKjIsJTs4LTdJUl9JJ1NgVjQpUF5MKDM+W08nPzI+qKCoocGjmrS6tqOspa6nqLWyrMissLOstaO+sbKmoKOpnaObmpmsp66kpbWqpZuYlaKbpq2pv6ipppaUm5WgmpOYpamnkZ6Qj5icsLK/rJunnqeiiZORqpuopJubrKCjmpujp6yin6qimrCblaaflpSdn52XsKWZoqiZnJGenKOkmaejmpyam5qQloJobnxxdpGXlJGEibSpjYaYlY6KjJeXh5SVioOSk5GJjZGUmZOYl5qgopublKCdjoJ6pIVranyQfIB0iYqBcYJ4eXZ2ioB7iWpzgXSDdWR3fXZrcHptYGNccGhNWVllal9XWXB6bm5mU09GUzlPWk5STygrOkpCNjM1PUBBOTpDPjxFTlNTVFZXWFpaXF1gYmJhX15eW1RLQ1NHS05ER1BMT0k8OjszODksMjs4MjApNklSTzgiKSsvMiM0Oyo3Rk9bSidSXlMxMFReOis9OF1LLDwtQLKgs6G/oqSxsregqaWyp6WwtarJq62xprWmwKi0oJ6lpZyklpWgq6eso6O3rKCZlpagl62qpsGfrKSWkpyXnpiTlKKfnqKnkpGZqKeyw6+aq52rno+Wlqmeq5ydoK2YoZudoqWvpqGkqJ+tmJemnZqaoJ6enLCgnaKnlpiTmZSgopajn5egjpaUi4qNjpetj3uVm4KSgYmpqIWBmJaKhI6fiHuEkIaFmZCHhomVjpuXjZCYnqOWmpORnY1+jWais66FiYR2eo+KfXZ5em9neZCBgIlrdYF5iHJodH95dYOIgmt0Y3lmYGlkY2Rmalhre3BqalxSTFBEX1VGQD8/LDRARjs0NTs+QTs8Pz4+SE5OT1BTVVZWWFpcX2FjYV9eXV1eXVhWSktMQklPTVJKOzw6Nzg2LzI5NjQuKCYkLTEuLikrKjclKzwoNkNNTEQvVF1RMDVNWzE3RTRcRzU8LECzoLmvvq2rrrKyoKqmsq2irLOwxbCqrKOzr72ktJygp6KhnZmXqKappqSms7WelZSemZmvpq6+oKujkZGempmUkZWhnJepnYWeqayis8i0oKqkq5aWmJqnnqmcoKSrlJ6fnqCqrqmmo6uirZufoKGapZ6cn52vpJmfqJOYl52SpZqYqZ6al2aDknxlfo6aj2N4jWxoa3qQo6trZZqYfmeFimVlaWh6jaGOa2iMl5Gid2tqi5ijn5hzbG56hI2GeVhlXYWBXmuKioF2W2hzd3eRgIeCbniCeIBzbXmEc3aIiY+De2qFWF5rdGRdc4hpa3xxbGNdUU5XSWRYQEo0PkY3P0ZENzE8PT9BQzs7REdISElMTlBSUlRXW15gYWFgXV1dXV5fXVpVT0RIT0tTTj0+PT02NTM1NTU0KiYmJSwqJS4rKyc2KiQ7Jy9BSVtJLzdaTzYpRVkvRE8xWUM7Py49pZ+6vLmvq7Owq6Wora6wpq6usL2xqaikrbCxn62XoKSeoZqZpqucrKOmqKmzrp6Vo5Cir6a2uaWuo4+OmqGZk5KaoJmZpZZ7payiqLPDuKWip6+fnpWeo5+knKSqqJKeoZ6gqq+qq6OqoKibpp+ooayVoZulsKSYnKuWoZ6bk6WYnquZnn6+g4hytHKFnoataHi5xLhxkqGje6aYmXOqgnzLwMC7cYuih4OffJWYiJ7AvYKWnZ6NncHBe4F6kYyawr99a6Wxb4yBb8p6f5t4kYOOgHZ5gX95cXp/h293hYyTeW12kmJmX3hjX2WBYl50aG1kYlhMVklRWkhPRDJJRT9EQj4vPD8+QEE6OERDQkNFSElLTU5QU1ZZXl9fYF9eXl5eX19fXlxTTVBHVU5BPz89NjQ2ODI3NiomJSMpKiYuKyopMTAfOSojPkhbTCojQ1AvI0ZbM1BZL1VBQjsvOJajuMO1sK/AqamUo6+psK+tprK1r6umpqaxq5+rmJuioJybqqeinauipamlpLSknaOTpq6suLSnr6KSkZmdpZKRoKGXnJ+dh6arpKutv8CxoaqvqpeSn56imaKkqqOToKGena2uqaymo6OmoKWlna6pkaSbqa2qnJ2qnKyilpillqGjmJx/zpR5eqWCeZWWm1+tj16Op4ChoHynlZt0q4OAr15kjal6p4eFoHSXkoizY4KrhqGOjbNqhK50fJaHuGGCrVmjzW6PdXvbe3+ZcX6IknV/ZXuHdnZrfYhufYWQkn5tgY5gcWtwZmBfeGRbcWhqY2ZgUlRSV11KT0M1QUhFRDg+NjtAP0E7PThAPj4/QkRERklKTE5QUk9TXF5fX15dXV9gYF9fXVpXT1VKPT8+PDU1NzgxNjQoJyQhJywmJi8oJiszHTYwJDc7U0wrLS1KMCc7XDpMLSFQQEY0LjGtwsDAtbSwt5iekaSqqa20qqWyrKyspKymsKqgp5uappicorCfoJ+op6OmoZ+wrJuelqaurbGrqKyglJKboKWTj56ll56oo56upKuwqL/Gs6ipsa6Wk52dopegqaqflaGenZ2ur6eqqZunpqOhq5Kts5amo6uqnqOnpqGwoZKap5qhm5SUkZegcIWMl3WEqIdxsHydcqx+oZ+BpY+ed6uCfa1/nHKtfquHhp92mJJ6fJd+qoiijJGLnX6re4iTj6CAeq1WnMR6j2+SwX2BlW11cIxtZnZlhm9hd25yb4mKkZCDbZGPZW9zdW9gZm1kX25paW5mY1dUXGFaUlJDOElJQEQ8PjxARkRDRUE9PDw8PkBAQUJFRkdFQENJU1dZWlxdXl5cXl9hX15eXVtaUkM+OzkxNDc4NDUyJiMfHCAxJyAxJx8nNB41LSY3PldKLT0nPjEpM1ZARiEcRzpDMS4rr9TGx7K0n52jjqOjoq2utq6osaepqqiuq6unoqOdmaKVn6arn6Kln6ioop+esKyYm5aop6+tqKepnpeVmqSikpShrZudpqOurKOstam5zbKtpq6sl5WcnaKZn66snZahmZ6fqbGpqambq6mjoqubr7GiqKyuppmmq6qqsaOTl6OlmpSShaRqpHWJeql0erJxgqWJmYxwiKCah6RfYFKrhH+ugpt1roKnhoafepiWhXtmgKOJpJmGgaN9qX6AlIeuXnyoVZ2ikoF6op+Ae8OvxYxzr7OzuXFiqa/CdGiNjJiPgW2akm9ueHd3bmxmZWRxcGZ7aWNcV19pWFhUTExRTENDQUI7Q0FAQkk8PTo5Ojw9Pj4/QT04NjtETFBSVFZYW15eXVxeYWFgX15dXF1bU0lCNjc5OTY3NCwmJCIgKCciKy0iJC4hMy0mQERXSCxHKzY2KjFQS0wjIEE5RDQsJ8LJ1dbAoZmrqKGvop+wtbCuqayjqKaqq6uppKagm6WfnaWnpqOcrJqiq6Gkn6+inpuTqqS2sK6gqZudlpWnpJGboaifoKacsKajqLGstsiytaqsqpWSnZ2imZ+ls52aoZScn6arq6OumqyooqGqorOtoqqzsqKbqqivr7ajk5akp5ibkXyqbJ6Eh3WreXywboKki4mglpWflYHSuLS4yYCBsl5flKmDpIeHoHqYlZl4qslzmaOVqKmQkpuMfpuJmsbGd2WhgqVzgZ+Ogn2vXm+1Y7F1S6OGbadHgpNkj5Cekntwl5J+cHp0fHptXGZqcnFmgWleYVhjbVxeWUlNTUtFREFCPkE8Qj9KOzc5Nzk5Ojs7OzMuNjxBRklMTU9RU1daW1tbXV5fXl9fXlxcXFxcWE1CNzU3ODUvKSglJiUkJiksNUZOUFBNRkxKVkYqTDAvPi00T1RRHRw7PEYyLCSopMHGua2osq6spaKdsrmsqqGlm6imqqypp6CmpZiqo5+uq52moKyan6mlnae1n6KXk6irtrKsm6acoJaRpq2RmZyno6Cqp66hoqapsLTCsrOqraiUiZidpZuio6+ll6GVmZylpauar52tqKaerKO3rKGxubCdm6+ns7SzpZWYqKSboI6CnU54moF/n3qEo3yCpISGpp6cnpOEuHx8ebmCfszFwrZ4mqCQi59+mpaXinWel4qkmaSofrCFnISehKx9mZRhpWyjcI+FkIF9l4NyrGCkc3GAmmC8fVJVdY6Ro5Z7fZKRiXV5coR+cFtsbndyaoFuWmNfaG5iZF1LTFFUQUhHRkk6OUs+QjEwODg1Njg3Ny0qNT09P0JER0lMTlBUVlhZWltcX19eXV9fXFpaWllVU09IQDc3Mi4sKi4rKicmP1FUVldXV1lYWFdVT1VGPEUyOlBbVBwbNj9ILC0gjIeZqaykq7mrr6CboayztKafoJWlrq6uqaadpqaao6ehsq6hqaayoJmopJSitaKjlZehqbW5pJujnqOTkKKxmZ6cp6ahoq+unKOnorWxw7Gtqq2qkYeRnKedo6SdpZeemJmZpaOomq6hraWmmK+lvK2it7eunZ61srmys6eZnrCipJ6Gj9G1w7d5h46FkZOPgKZ4lKJ3jKCShKWCi3GrhoS0bnJpmaOclYmffJiZhoePcq6CpZuijaaLk52JlJCbbXCyXKVzk3qcbJl/e5l9bqlhonFxf59ic7K4aHiPk6aYfYuMkot4fHiNgWxod2l4c25/dFxkZG5tZWhgSlpXWDxHR0BVM0BGPjwqKDYzLjAxMykmNDo7PD0+QENFSUtOUFJUVldXWV1fX15eYGBdWltaWFVSUlFGOjIyMzAvKysoQFFSVFVUU1RWV1dYWFdVVlZUUU9RW1UlITJBSCQpJZJzjIquv7+7u7Wel6ikrbahopmVo6mnrqmrmaWhn6WgoLWnoqmnsKOUq6OOpK2jnZCamqq0tKSdpp2pkpWXrqCgnqeknKectZmfqaO2q8Kwqaupoo2Ej5yioaajlpmanJibmKWkppirp62ipZutp76slb6wrZ+jsLO6rLSnm6mypaiYeqiQfXywd4qBpKWInG2yb6GHrXyhj4OolpmArImEroWflKigopaFn4CZlYB7kn2rgJ2aloqqeJ2gj4mTkoB5r12jgXymp2SdgHyXdGuuXaVrcYWZXWBbjKBulZGnmYKUjZaLenmBln9qbH5ifXRuf3lgZmVxb2hnaENZYFs9SlMyVThCQkM3JCQzKycnMywgLzY2NzQzNjpAQ0ZJS01OUVNTU1ZaXV9hYGFhYV5dW1pYU1BPTkk3MDUyLiosQVRWVlZVVFVVVVVUVFVUU1RXV1dYVlVVUUhGSUojKCi8kpqEqcbDtsG0n5utoK64paSOm6SjoK+vqp+jnp2tmJ65oKKroK+qmq2hkKqppJaJmpCusaymn6ibrZiYj62ioZ6lopqlnK2Yn6imtqi/r6WppJ+MgI6bmqCmnpKUmZqUmpqlo6OZqKuro6Sfqai+pJfDrKqjoqyzuqyvp6G0sKmrmXavfpCLnIWHfbqtiphksIxlla19oI+DppWagayKhLCFpZmkoaKQhKBbbGqBs2B/rXt7goGxbGdumZeMiLFbfbRbpINryKJln4F7vFl2tVqyfVKvgHqsWIChbZeOqJqKl5CVlnp4jZx9ZHN9YYN4c4B8YWlmcG1mZWVPVWNbQVRePUkoPjk9NCEiLCUfMi4gKjEvMDQ1Nzk6PEFDRkhKTE5QUFJUV1peYGBgYWJeX1xbWFVQTUpHQzU1My4vQFVZWFdYV1dYV1dYV1ZXV1dXWFdXWFlaWltcWFdXR0I70p+zsre9u7TBs6Ocraaltqihi5mgn52zs6meop+dtJigs6iqq56wrZ6rm5WuqaKOiJuOr6yopqOoma6TmY+pmqGepZ+ao6OlmZ+iqbKovK+lqJ6dj3yLm5WhoJmQkZqbkZmXqJ6hmKitp6Wlo6Wpu5+gxqelqaKrtLatrqegva6trZaBqZKjr46bgIakl5iPgYC4w7qDjpyThaeXnIKsioKviKabmqWqkX7VvcKqYqO/vXx+o4KD17q4tYWUk4Oevb6EaqOBb6uEbp1/erKxx4Nqq7C9rXh3or67dICVjaacj5qQlZx5gZCaeWJ9emOMZ3iBe2BrZWtqYlBiW1NqXEBUYUJNKTw6NC8eHyQeJTIgHSQoMDQ5NjY3ODs+QUNGR0pLTU5OUVRXXWFcX19hXmBbXFlUUU1JQz88QT81PVNZWVhZWVpZWlpZWFdXWFlaWllZWFlbW11dXFpWWFRXWryVtLSxv7myvbOina6mpbOmnYyYpb+qt7Goob+mprGbnrGcuaiera+lp5WUr6yXjIOaka+mo6yhpZyqoZiLo5KmnqecmqGoopmeoKutqbmuqKSbl5N7h5mRppuTj5GYmI+Yk6mZn5ipqKCqpqGjq7ueqcWjoK+jq7O1q7CqobyosLCadHWqpLeGZYmfcGesj4qPbW93pJCZn4F1rpmVcJCMcZWno5uYrqRybW1tZYp3bm2CmXGAeWlxaWeJlpWYcWhphYZncIZkXoljanBZXWd+d6ZgYnGOkm9mZICNko6il5eYkJWefIeOlHVlhndojGp4fnlkbGNmbGJLZFhKa1k6UGVFUSdLOSsjHCAbIywpGBsYLTIuNTo0NTc6PD9BQkRFSEtMTU9RU1ZcV1pcYF9hXV1bVFBMSEQ9OkFCN01YWVpZWVpZWFhZWFdXVldZXV5eXVxcXF1eXV5dW1tVV16olK2zqrq5srOqqaKunqSyqZiSvbHDyL21qZ7Aq6yjoKarn7qjpK2srKaOlq2qj4yFlZetn6Wqop+jo6CRjKWTp5momZajqqCWnKWlp6+6q6yam5OSe4SXjaWXjZGQmJSNmJWnlJ6XqKKasKaeoq26oLHCqKS0pqyxsquurKi5pK+4loqhqKW2nYmWopiGqZqQlJ2TqrOZm6KroLKWoqCeoKKcoKShlaumjJKTjIeSnJyUkJmTmJCOlYaBpJqXlY2Lk5KKj4aEfmeLgHSDdnSIjHGnbXyVkZSTgYGPj4+OnZSglZeVoIKHk4xwaI92b4p3dnx6aWxkZG9jVWBZQGlaR2JgTlkqRT0rJiI3NDAuHxwhJTIoKjc5OTQ2OTs+P0FCREZKS0tNUFBRV1VWWV5fYWNdXlVRSkVEPjk9QEFTWFtcWVdYWFhYWFlYWFpbW1xeX19gXl5eX19gYGBfWVlgpZapqqW1uK+uorCkrZ+gtbGRjqvFvMS6t6qhpZ2bpp2wqKO2p52ptKankZiso4uIiY+cp5aspKGap56ek5Wjl6maqJmUp6GkkJqnmaG1uqirmJqQjXyBlIyhlIqUkZWQj5OXpY+emaifnLajnaetuKiwwq6juKevr7Ctqqq0uqKvvZmSpqOmtqOSnaaejamfjZKfo6yvmqGisKivl6SgnKSqnp2dnJernJKZoZuTkJaqmY2YmJaQlp6RiKCdlZSFkoyQjJSLgX5mjId1h3Z5iINznGqHkZSUkYp9jJaSkpiToZKclaCDhpeGeXGVcniJf3F7fmpuZF9waWBbYFltYlBgZFBaOkdGRT0zPT03LiomKykmHSY0MDY2NTg6PT0/QUFDSEpHSktMTVNTU1VaYGBpYGVWUEpBQ0I7OUVNVlxeXltaXFtbW1xdXV9eXV5fYGFhYmFhYWBiYmJkYlxbY5iVpKejsLOsrqOpp62gqLWqkI+cpbO6rquroaKZep2isKSlsamWm7imo5SZqZyOhoqJm6KQrp6klqigoZKXmZuui6qWj6iZqIyYqI+eubakpZibjYl5gZOMmpOKlZGUkI2SlqKMnZ6onp+4pH+EsLajsbB0pL+ksqB4eqCrs7yVdq6kn4qAqn5kXGJ2n46knYOXfm6Ts5yjp62romWeoJNzeZmWcICYqJdsf6KniWWcpZuQl5iWi5GbkYWdmpCVgpKHjo6SiYV4a5CHdodxfIaBgGFpiIuVk4tbdpWRZ2iPjnJ6pJiYZXiYhoF3l2mDiYJueX9rcGVfdW9ra2hcZmNiYm9SWz5NTk5SRz1AVEI5MS8eHyY0OjMxNjY3ODw7PkBBQkZIQkdGSUtMVFVVWVxfaGZnV1FKPERHOzhVUltgYWJgXmBfYGFhX1xdX19fYWFiY2RhYmFhZWRjaGReXWaclaajobCxrKuppamto6etpJKWq7WvsaWaqqarl3OLnK+fqKunk5a4oKCPnKOdkX6IiJqejauao5Wnop6Ol5KehXWtj4immqiRlqOIm7q0qKCZmIuJdXaTjpaTipORkJSMj5OgjpqfppmcspaAjJy1nrWNko+9qKF+p6J6o6+4gY6Op5+Ei4WPsamvjImWopp5gYushpydoqepqIeVhph3pZt6h5uBl6aCgXucsXqKhZ+XmZSYloGQlpaEmZpjeYeQhI6PkouDbnGQiHqBcYCBhn+GdIeFlpJ4lmiTdKCadHyZg5+bhph+kYmBgphqjYyEanh7cXBnZHduaWxqW2VqaWVyW15IU0xRQEU1LVlUVDYpITA5PT42NDM1Njg7Oj0+PkBESUBJRUpLR1JYWlhbYWFoZllRSDlFTDs+YlZeYmRlZGBhYWBiYl9dYGFhYmJiY2ZnY2JhYGVkY2djYWFonZijn6aurquorKCosKenqqWZlK7GvbChlqeotZ6Pg5yrnKeioI2Qvp6ZjZ+aoJB9hY6Zl4irnaKVoKGSjZSJhoCRp42Gopyjk5adhp+5sqedmpOPhXB1kIqVkIqUj4+bi4+Rn5GWn6SWnqyIn7SJtJqui8qHq66Jt4WNsIOxr4SpjaeYjZ18qI9ye3ebjqaWaJWkebSLn56mqJKZwoF/q4iYoXGegJqkfZeFlbGBoXygk5+PmJeAjpObiZiSi3yFk4aNlZOJg21zkYaAe3KGgYV9hXSFgpeBj8VmgKmHj6JqnoKfmIGZgIqLg4iYb42ShGd3dHt2Z2h1cGdna15ibmxmbFhoR1xRTDJFNDZNYGM2JjQ8REdEOjY0NjU4Ozg+PT0+Qkw/TklKTENQWl1cV2JeamxcUUU9S01ASmRZXWNmaGdiYmJiY2NgX2JhYmNjY2RpaWNiYmJlY2FmY2JiaZWXop+wqKmopaugpLmxqqummpSgo6Sqopalqbajr3+gp5ylnp2JlL2Zk42gkZ2QeYOWlpGHq5mbmpqhhY+Md5ucj5+QiJ6km5WYl4aiuK2lmZuNjX9ibZCLk5CNj4yMl4uQkZ+Pk5+hmaGofqGnh62eoJauj5+dnZGGgaCNq6+HpI2qmoyafqN2gJiTa4GrdU2reIeNnZGbqKeBqqt9g6F7eqdpnn+Sa2eXhpe2iJ59bWBjWIOXf4x7ZGeLc5l9eZZsXXyXbl9TcYRcYGx5g2BZZYJ9hIGYcaeqa4OjbnKlcJ+DnWdkn2xabIh6ZVlfgn5hV1BvdmVudHJqam9eam9sa2hXaU9dV0U5QTRHQ15rNCtJQ1FNTj04NDg1OTs2QDs7PkJPPlFSTE1CSlxdX1deX2J2YE1EOk1PTVRiXFxmZmlpYmJkYmRkYmFiYGNkY2FiaWtkYmRkZ2RiZ2VhY2iYlp2guaGqo6askqK2vKuuopmXoKGlrKygna61o6iRoJ+gppyZjpi0mZCLnoyVi3WBlJGNiqaWlZeenn6ThYaspIebkIqYqJeZmpGHpbCmopWZiImAaW6Ih4uOjomLjZKLkJKijJOeoJyipX+TgY+joZSgd5yWkKeDoaeAhqquhaV5i32Emn2icHOTh5Z7nox5bYebjJmQm6iaj4edfIKic3amZp5+d6RfmHp8knOibpi3tLp0koeBgLaoZIHGuHtwlbeMcYCbpGNzrKtgfWqds35ufYeDjoKLl3GAo2xzpHOeg36jXp2Zs5Zve5ees3RyW56ygmlib3R1cWhuWWtsc3JlXGleYktEPUQ1UUFZcTI8UkZfSlM9PDM5NTo6NkQ7O0BJUD9UTU5RQEVfXltaWGBgfGRIQzhMV1VWYmFaZmZra2JiZWFkY2BhYmBkZF9gY2tuY2NkZGhkYmdmY2holJaVo7mZrJyToI6luLWuraCbopyjo6Wtm5qxrayTl6CYoKSampSeq5uLiJJ4i4VwgJaNio+gkJOUnJZ9kYmOqKGHmI+KkaKTm5qMi6iopJ6PloeEfmt7hn59j42Di5CQiY+UoIKWnaCdoJ+LiXecmKKMoHKii4ipiJynkZeoq3+ujH16oJl6o5N4gHOXiIycfZafhpuNmZumhqNkoXyJlpCbjWyeaJqNbpqZen+Kp31yZ3Oqg52Cc6pnlJpdm4V2hJ1oqmqBuGZcqXCBnGGVjF6ndnWJin+eaJp1h5OSmI5/nm6ZkGummVyofne7an2pWo6EXbNnXG5xeXdqaFtwanl5Yl9mWGJBUEVON1ZCUm00SlpaX05aREAxNTE7OzdIPzpDR1Q/WVJZXT5EYl1WYFFhZH1pRUI5TltdWGRmWGZnbm1iYmVfYWFfX2BgZWNeYmRvcV9kZWVrZGNpaGdraZWciaq2m6iJY5WcrLqysKydppycp5+erpqdsKirnZeimaGfmZaWoKOZhomNaYiAcXuXiIuWloSSlZeOeYqElqOdiZSPhYudkZybiY+oo6Cai5GKgIBpgYZ4f5aMe4iNjoePlpp/k6KfoKKTmHJon4qgj4xwkoyCqYiZn6OpoKh9sK2koriXdqOzoqN/iJR4nXqrmn6ijp2bl4iXcqF8hY2vtX1rmpGheH6YtKOjq6iEmHuafJyZfnOqWl1ve5eLeJ5iTX97e4VjepdCTZ9ZompyfI5tgYmEmXWbeYeJsbN/f5qSpnR/nW1xfJRvmXJpo12VdkhlY2BzcH19bWRfa2l3fGRkYVJeVl1UVkBZRVFnRFJXW2JYX0lEPUI4QEI6SUU4TERXQVZRW1ZERmFcWmBLYG1+ckVDPFVfYlplalZnaGxuYmZmXmFhXF1eYWhiX2VkdmxeZWdmbGRlbGhoa2mTnYGxrpmEU1+hp7S6s7OpmqKLm6mcnKmToaukoaiPnp2cmpmVmKGdloeHiXeFgW55lYWQmot9kZOVh3KAiZKgnHKRkICImJSfmoSOqJyalYqLinyDbIWFcYGhjHiFjYiHkpmVfJKkoJ+jiK6GfbWEj56de6aWeqmClp2Qi6Gefadod21+mXOgc3F8nYWYb5OCrn2jg6aemoGjcF6pZ3WjY2+lYZzTkHx6mXhyc2OihY9+onKijnVrj7OLYIKYinOqsqi8f3eDbX+/pqq0XptvfnGXb4FzonJdo2d0pmFopm2b05h7g5tud3mXa5t6dpdybKmlZ19leXB/hGpmZmNudnhoYGNTW2VRUWJJV0lUX1dTW2VqXGVRRUNLTEpLQkpEOFA/UE1XU1hPUlFgZWVpUmR4eXdJRkVjXWRZaGpUaWhqb2NqZ2BjYFxdXV9oYmFoZXxkXmRnZGtkam1naGxomJt/sKxUXEt+qbCytbCzo5yYhZimoKCjjaSooJipiZmXmJOZk5Kgl46HhXtwfYRofY+Dk5qBd5GNjolwf4aPk5Jsl5N8iJCRo5WDjqqalJKKhYl5g3aHgG6Bn4Z3gJKGiJmil3mToqSan4mzoaK2i3qsp6SupXCpgJqQhYGckn2kgKKZhphynoSirK6Jl4uAjKSNloOuopR2tba1yaFzlIqAn2Gel6lteZWHn5p1oYd3oH2QloqBb0xmopJwmohzpHt5dGGDgmx+oGxyZGCccn90l2l7abO1tMamc5h+e51qm5urdYKabXR3l2maeXSYcVBFfLNeanZreIdmamdidHVxblZeVFloUFJoSVVMWFJWXWdrblZnV01KQUpNSkhKTkFRSlBlY2ltZXRyc354e251iXt7VFBPbV1oW2tpUmpoaWxnbGZjZV9cXFxeaWJkaGt7X11kZ2NqZm9sZWlsZaKcia+nhWY/lKGzq6+vtaKikICXqKKipIylp52cpYKZl5aNl5CQm5KOiIN5anmGZYOMfpageXWPiIyBaYSFkoOMhZ2NeoyKlKWSg5epl4yRi4CJeoB9inhwkKGGeYGVh4mWoJZ/lKWonJaWhGdueJxsomR8caV3nJhwZ6eBl4x7pXqgloOXcp92gImUlo+5bpCKomJ9maKViG5yaatqdaBsbqZgm2mLkGiWh5qVdaKAfZpfi4WMdW+IYmihZZ5/aZt1cGRmiIJucqJaX1tkoW5eiYxve39zcmSlbniiZGenaJhzi5huoW9TiI9voF5kp1SLXVOYbW1za3GBbXBoa3hza29SWFdXZllTbUlYT1xIWGloc2pZa1ZRUkVWXExYUmFVaGped3V6fHB8fHKCe39ydo2AhHZeUXNhZ2JwZ1BqaGhrbG5nZGdfXV5dYGtiaml2dV1cY2hjampzbGZrbWOdpZimemV0bYunrqWqsLGmn4uAlqqcnqWMoqGaoqKAlZiTjZqPi5eQjop7h3GAiGiLi3yXmnN0in2Qe2WDh5WKipWZgnyIhZamj4GirJCFkIqBin2AgI9zaY+lhH2GlI2ImKCOiJKqp56JpniWnH6liZaMspiekIOvl5+leJaIeql0pY+Emm6looyShIyDvG58pa+ChoWGk5acoHylenGolKCWZ55+b6xjloqVkneobKmigYl2h4J3q5GmiGuRsGt2s4ypbIuGbm2fnpKVYX+ri6p2gH+Np593n32FpJWdoGmah3asZ56tjLZzd76MpJNZg6aNq2F1cnNve3RxYmp+bmhsU1ZbVWFhXWtNXVJdSV1sbXZgW3FZW2BaZ3Nlbm9yY3F0YHd7fnlyeYNzg36Be3uMgYKAdmJ4ZGNuc2RSbGdob2xyaWZpYV9eXGJrYmxsem9cXGJpYmxqd21nbG5ilaaqnIGAnqSWqaqeqKeuo5mJgpeqmZ6kiZqlnamdhIuaj4WckYWSjYyNdIZ6iINvjYR9lpN0dIZykoJtf4ySh4aUj317gYSXpI1/paWOgY2JhJR1goeSb2yKqICCi5SOiZyfiY2Tq6OgkIB1lZeIfoF5lK6jf4GbcY+GeJCMhYB7cqeMcX19epeWm4SOeHt+fYiUlZOKdpCZn6CDen2JbIyFW3l5cnlxaG5+kolxf3SBj5STcYWDgWWNf1+BgIx3dXOUdW96b26HbYSGX3dpeI5mgYKGjqqcfnR9l2qJiG+AdnyFdm1sZ4xzeHuXd4Rbalh4j2htd3Jxb3d4b11shm5pZ1ZaYFdcZGtkVWFVXlFfcHd5a2p2ZWpqanV8cXJ0c2FvdWJze4F4dXmCdX+Af4B4i4WDfXttf2xkeW5eV25naHVreGppaWRcYFpjamVscHVuWltia2RsbHltaGxvYY6Vuaimi6GimqakmaSdq6Kgg4OXq5GdoImappqomIKBm4t+lpSHjomIjXKCfI99fo+EepeOdHKDcJWFe32Si4aGkIV4foCGmKKMe6ehi4WPj4SVgoaOl3dyhKmFjZKckIienoiMm6igoKuDiY6Vmn5+iZatqI+Sp5B4cJ6Rg3uTb36phXB9lXFqb3yBn4t/ko6MaG1dg4uMnJuejnOVi4hxdGuCdnOAWXJuhpCBfX6LaV1pY3qFg4iAX2l4e5t8g4yDdoGGg2l5i4drYXFzg3dgc4yCiZCnlYZmjY+DbnaLg3CFjXlvZWZjeYJ6lVpcaWZudlt6eXd0bXNygmZcbYprbGJZWV5aWWtxW15gWV5dZnN9e3Nvc2Nra2l7fHF7d3RkbXRobHx+dXl8e3p5f4B/b4aKhHt9c355c39pVFxxaWx1b3Vna2dkXWFYa2hranFybVdbZW5sZ3N6b2hqbWCMjKqwoZCjoZqfnpiemamjoX2Dl6uMn5SHm6KQpZV/e5eEfJKZiIiGhopyfYCLdoWLgYSWinFvgHKYhoR+koSDhoqBeoCDipqej4KmoId4jpeIlYuLnZeEg3qsgZCXmZSKnp2HiKGroKKio4yIk5uco5mWqqGnpqCSm4iXj3x5j46EqH5/kpGSk5ywpZqUnZCNspOYhKaMjJWbn4mQm4KJkYprfI52d2WChpCKfImdhIeLj4eIgISDkHd8enWaoomHi5+LhpV/foyBgHZxdIaFgHiIh4qRppGEho6Ig42QjHyHiomPgXZrgYN7eZlpcmhgc4pwfXp3dm93dIFdXm+HaG5fX1pcXVNncVVjW1thbGh0e3xybnBka2pof3tteH9xaW9wbGaBe3KBgHeAfX+Eem2CjIZ8enh8fnqDeE5kdmtzbXB6ZGtlYmJgW3RmcGZycWxVXWx0bWh5enFnaWtljYidup+WoqGYlZmYlJikoJ17f5mqjZ6NhZ+cip6WfHmUgnuOmYmGhISGbXiBgHKAh36Ik4Rta355l4aEg5B+gIaEhn2Hg42anJKHqp6DcoqPhZKSi52RfY16qYONkpeVjpyWhoabp6Cimp2Gg5KamZmQmqagpp2dkJeBkot3fYiOhaV7fI+QkYaYqqGdk5yPjaqOkoCejImTmp6Cjpd+h46Cb3iFcXRgf4OPhnSLl4CDj4KGhH6FhJRueXV1k6KLjYabhYWOdICKfX1yc3uJhHt5jI6Ek6ePhoSPgoOKiop2hYeIi3xua31/e21oa2xnXnl+Z3x7dnR1dXt3XGBwfW51YGNaXF5RZm1TZVpdYWtpdnl+cGtsZGtpZ4CAbHOAbGx0b3huhHluhoB2goB9hXZxgo2Ifnt6fH97gopgaXtrdWhpgmRqY2BpW2N1aG9idW1sVGJxeWVwenpyZWptbYuKn7iaoaSfk5KWl4uan56denedpZCbiYaklIuYmXl6jYV8iZGDjIKBgm17f3hygIV9ipB8a2h8gJeIgYiOfH6GhId8j4GPmpuRiKecf3CLiouSh6ChioWMfKeRh4+Sl5OWkneNo6Ghnpaaf4GQmpmTjJujoaSal5Gbf46FeYCEj4ehgH6MjY98l6SgoJKZkI+mjZCCm5GJkpebfpKSfoeOgXV0gnB2YH2AjYVxipV8iIxyjX6ChYWOaHhyeYyZkpCAmH6Ii3KCh3x9cXp8jIV6e5KNg5alk4uGkXyFhoeFdYKDiIh6ZXF6f3l6cGxqZl59cmh8dXVzfHKAal5gdHZweGRjWV5eUmtoVGRYXmFnanZ4gXFma2NsaGV/gGptfmhvcWt9d4Z6a4uBcoGBfYF0doKNhn58en+BfX+PanKDbnNpYYdobGJfcVV0b21uYHhobVdqdHZidXp7cWJqb3qJjZ+ykqWlnY6QmI+GnaCanHx1o6CNln+MooqImpZ4e4aHfoOJfoiCgH9wf3t0dYKFfomQeGdjfIWXioKKjXh9gIyDeZaAlZeVjJagmn1vi4GQk4amm4eMiYOllYSSipWXkpF2kZ6hoZiUmHp/jpiXjpabnaSemZOUnHqQhoN4hZeNnn6Bio6Mc5einqGSmI6PooyMg5aYg5KWmX6YjXyIjYF2cX1temSAfIqFcIaTf5CCbIeCgX+JhGV1b3yHk5iNfZR4jIl8gId9fHKAeYqHeYWRiouYopaChIx3iISDgnZ7gYmFdWB3d310fXdma2RgfmlqdnN0dH1xfGNjYXNudXNtYVlgXltsZFJiV19gaGt1eYZwY2pjbWZofINsaHRobG9of3yCeG2QhnGAgoJ/dHyDjIF/fnqCg358kG11iXR0bWWKbGphY3VWg2lxbmB4ZmxianZwZnl7eXFgcmyGhZCdrpimqJ6OjZeHhqCTl5h8d6mciph5l5yLi5iQeXyAi318g3uAgoB4c3h6c32AhH+Ii4BkXnyKlYd+hId0fX6Kf32YhJaTloyjoZd+cod7k5GKp4+MjoqSoJGDkY+Ul5GKgY+YoJqSkJJ0gI2SlImdnZ6nmJiNlZd0jo+KbIaYkJl6h4iQiW+XnZqjk5WKjZ+MhoKSnH+SkpWGmYh7iomBenF5anVse36Lfm2FkYKUd3CCg31+i4Bkcmp8gZeYhX+OdJGJg3mHfnZ4gX6HgX2EjoWNlKSQeYWDdImHfYBzdICHg21henR6cXxvYW5jZHthbm92cnd3c3RidmBvbHVub11bXl1eal5PXVdiYWhtc3qJa19qZWpjaHeIbWZsaGptaIB8endukIdzgIOEfXSBhol6gn16gYR9fY5yeYt5eG5sh2toX2lyY4docW9mdmdtbGF6aGp8enhwYXdti4GZmqqgpKmdioqRhoqeipWXfXatmIyWfZ6TkZaTiHd+e4p8e4B2d3+AcHRzem+FfYGAin58YFx+j5GGf4OEc3qAhnqPkYeRkZuSpJuUgX2AfI2KkqSJjYqNl5qNhZGYk5WOiYmMk52TkIyNboSQj5GJnpmioZeWiZeSb4qahWeGmo+UeomFkIpwlpqUoZKSiIuZjIKAkZ58ko+Si5mOe4qEh3RzdWtxbnV8i3RuhpCNkXF0gHuBgoh8ZXFteX6alH2FiXSRi4F0iXlvgX6Bh32FjYqFjZaojXuIfX6LhXd9cG+AhYNjaHdzdXB6Yl5wYWp0XnBqenh4bHJwZXldbWxzbXNYWl5fYWpaUFdYZGNncXF/h2ZdaWhmYmdxjm5kaWdlamiAend0bo6Fc4CBgnt1goiFeIR8d4OFeoCJd3+LfHtyeYNqa19waHR/a3FubXFnb2xle2Jtf3l2cWx3d4p/o5iiqKGnm4eMioGPnYaTnHSAqZSRjIagjJWTkH90e3aFeHh/cnN7hWtyb3ltiXaAgIZucVtZfpGNiICAgHZ1gH9/oIaPipGcl6CTl3eJfoCMiJyeio+GkpeVhIiUmY+Wi4uNjo2dio6QhG6Ji4+RipyWoZuYlYWYiGuGpINnhp2KkX+LhIuBd5OYkZ6RkIiJlY5/fo+XfJGNj42aknyKf4Jvdm9rbW9we4Vpc4OOl4pxd4B0goiCeWZ0b3aCmo98iYV6lZJ6d4l0cIl8h417i4eEiY+co4h8hHeCi4B4eG5qgIKAXXJycXBweFpecWFval5vaXx5cG1tam12YHBva3JtWVhhYWJuWFFTWWVmY3VwhIJiXWttZGJma5JtYGdmX2hrgXVycnCLgHR/goB4doCLgHmFf3eHhnaDhXyHjIB7dop/anFjfGKGfG9wbHRqaG9sdndfcX55e3R1dICCf6WVmq2fp5aFjYN/l5WDj591ip+TkoWKmoyVjYt6cnh0gnByhXNxdYhsb211bYh3g31/bW5VUYGrlIeCeIB2coJ5gqCBkYGTkpebkZp4kXqDjJKkmpOOiZWYkoSGlpmMk4uJj4+InoWQinxzi4WIj4icmZ+blpSAlH9php2IaIehiJKEkYOJcYORl4+ajY+Mi4+Nd3uSkHqOi4yRlox8iHyAa3ZqbWtrbHp+YXl+jpWBdnqBd4OMfHlndGx0h5aMf4iGe5SRcXqFcHiNe4uNe4l+g42Rnp6FfH14got9dnBpa4GCeF93b21rcXJVXnBicWBfbW55cGdwZmdzdWhwa2F3ZV1WZWBgclNQTlxlZF14cIh8X1xocmJiZWaSal9oZFtncH5wa3Fzin12fIWAdHV/jHl7hYB4iINzhoV+jIyDe3mVd2ZyaoNgh35vb2t6YGptdH90X3R9eIZ4dHOFfHmhkJqxnKaOg4p/g5qIgIuef4qZk46EiJeNjo6EdnR2c4Bwb4VzcHGDb2ppdm2Cbn18bXVzUk6C38mS1pN8cHSDdYOfgpJ3lJCYm4+Ye5NyhpCfoZOTkIqSm5SGfpaViI2NiJGNiJyAjoF4eox+iIyKnJudm5WTeY13aIqSiGyJpIWSiJeDhmOMkZiOlIqWjI2Ki3F7lIl7joiKkpGJeYV7fmx7ZXJvamt5eVuAeY+OgHp+fn+Gjnp6aHNrc4qPiYGFhX2WjGx+f2+BjX+NiH6Ee4OQlpqbi3x3eIOQeXNtZnB/g2xodG9naHNsU15vZXBZX2txeGZramJmeHNvcGNfd2BgVmtfXnZQTkxgZmNdeXGJdFxbZXZgYWVljmNhZmFYaXNzbmtxdot8dHqGgXV2fotzf4Z/e4l/comHgZGKiHx+mHVlc258ZYh/b3BsgFpsbnl5c2B2enuNdnJ3ind5n4ybr5ugkIKFd4iVf32JnIeFn5GOhYyXhJOOh4F1d3B5cW6Eb21ufnJkZHhwfG16fWpobGOkmsHcru+hc2t1g3WEoYWRbpWPlJ+Um4GRcYaLo5eJjpWKkJ2Wg4CVkIWJj4CSioqXf4d7dX+JeIaEjZuamJmOkHaLd2+Hiox+i6SFkomdhYVei5SXio6JjouKhIlse5eCfYiFiZCPhnaFfX1rfWN4dWlteHNXiHqRhoV6fn+AhYx+eWVzan+JjomCg4CMl4ZsgnZuiZGDkYV/gnqAkZaUmZB0dHiIjXV0cWd1eYJhc2xvYWh1ZlJgcWdrVV5tc3lgcmNfaH1xcm1aYnJhYlduWlx3TU1MY2ZhXnZzim1bXGR5XmBkZoRfY2NeWGpya25rcneLfXN3hIF3d3yIcYOEfX6Ie3SLiIiWhox+fpdyZ3VxeW2Me290cIFYcXp2eXFkd3mGjGl2gIlygJ2Imaico5KEfXCMlHh5i52EhaGNjnyVjH+Zh4R7c3dwc2pvgWtpbHx0XmB4dntwdXtnYGV869q1ycPciHNsc4B2iZqIjWmXj46clJKBiHGGiaCOhIuVio2YlHyNk4iDiY97kYuGkIJ/dniDhHKHgpKblpSYhox2h39xhoOKh5qig5SMnoOJYYOVjoaJhomNh4CHaX2Uf32DhImOjYJxhn5/cXdndnJpc3drWox9koGFfICDgISKgnZidGyIgY+Kgn6Ak5F9boJseYeQh5OEfYF+gZKUkZeJbnJ6jIZ1bHFrcniAX3JoblxqdWBRZXJpZlNfb3Z0X29gXWiCcXJpV2doY2lYbVdbdUxKTGVmXmJyc4VoW1xleV5eZGd6YWRfXFlrbmVuanR3in5zc4F+enZ6h3OFg3x/h3d2ioaPmIKNgnuSdGt3dXl5k3VveHp9WHmFcYBvZ3h3koJkdoaFcYqWhZmhm6KKhnNvkotyd46cfYqaiIl7n3+DmX+BeXJzbm9kcn5pZmx3d1tfeXt6cXF/aWFnYX/Vto6QpnhucXd7cZKQjIdqmI2Im5GLhnpoiIuZhoGSkYaHmI18jY2BgYqNfJCMfoqFenV7gnpxhoCVmY6TlIKJdYSHd4SAi5Odn4aWj59+iGF/k4eEiISJjX9/gmZ9kYB+f4KLj5B+bYJ8gnRrbXZ0c3Z1a2ONgY5/hX58hH+EiH9wX3NxhXyPjYJ8f5KJenGDZnuEi4eNhHyFfoGVj5GThG5weYx/dW1uamt6fWJnaWlYa3VaUmlyaWJQYnJ4bGFlXVpqg21zYltnX2RsX25UWm9OSE9mZFxnbnGAbFpbY3JfXGNsd2RlXVxabGtibWpzdoZ/cW9/fHx0eIV4hYJ8gIh1eYmBkpZ8iYZ2iYFveHl7hJNvbnyBd16Df3SBbWl6c5RzZ3KIfXKSkYSan5ughod2dpR/bXaTl32HkIOKjZl8i5p2fndxb2xqYXR8Z2JpdXpaX3h8em1xfmVjaGhXnY9ecXKWvMSEdnGUiJB+cpaLhpuSjIdyaomPloB7lIyBhJuMfIqGfXyJjH+UiHWKhnZ2fYFxdYaBnpSFlI+Dg3KAiHWFfIqZnZiHlI6dgIhmfZOCf4WDiYlygX1mfot7eX5/h4uOfGmAfIN2Zm94eHN2c2xqjYWKgYp/eIKAhYN/a15yeHp9jYqGfIKPgX5ygWl5hIiMhoV5hH2BmI2QjH1ubXuJfXd0bmhnfHZjW3BiV25yU1Nuc2hhTWZ0eGVgXVxYboBvc1llYV5qbWBwT1lrUURTZ2Baa25tfG5aW15sY1pib3dkZ1xdYGxpY2xpc3aBg3Fufnx/dHWDeoOCfIKFdn6IgZaReIOKdIGIcnl4fo2Qb258gXFpgXl6fm1se3WVa2p3hHRslI6GnpigmYWIbn2Mdmp4mI5+gYqClZeJeY6Wb3pzcGxqZGBzemhgZXF6WmFyfXlncXphZWWPsbJ3SmJapNnQlnJ7kIqQd32Ui4SZkYyFbmyGk5F6eZKGgYSYinyHf3h4iYqEloBwjIhxdH16aXmFg6WQhJONg39vf4N3hHmGnJmUi5OQlYWHcHuSgn2Cg4mDboF3aICFeHJ/f4OKhntlfX6EdWNwcn9oeHBvdZiNhoKKfHZ4gIR5gWtccX5ygYiFiX6GiXuJcoFucYWHj4WFc4R6gpmNjYR4bm9+hIB3emVoanxwX1h2WlhwbE5XcXNnYEpsdnRgXVtbWXR9cm9XZ11manBgb05XaFE/WWZeWm9rZ3lxWlpZa2VZY3F5X2hcXmVtaGVraXF3f4dvbH9+gHVvgnuAgX6Df3aBhYiXinGCjXF7hnx5eYSTjHVqen9sb350f31vcnt7lG9ugX94ZpOLg6GZnJKChmeHg3BoepWIfX6EgZiJgXyNjGl4cmtsZl9hbnhtX2JveFxkbIN6YXF2X2Vl1Oq+ijI6PouOgHF4hYiOjXaDlox+ko2Mf21shY2Mdn2Pf4WClYh8gnhudoeEg5d3b4iFa3V7dGZ5goOni4KPi4R9boB0doR6h52RjJCSk4yKhn57koZ3f4SNg2x/cmiAfnhtfHuBioN3YnmEgXFkcWh+bXRxdIGbi4B/hX5zdX2Ac4FwW21/dXmLg4t7h4B8iHh6cWyJhJCEi3KCeoCXi4t/dG5rd4CAdXVcaWh3cFhWe1NacGRMW3JyZVtJcHhvXFpaWV11fnRoWWJbZ2VuY2lMV2ZRPV5lXF11ZV90cFpZVG9kWWRxeVpoXmBnbWdpbGlwd32ObGmChH55boB8fIF/gnp1goCNk4VwgItud36Ae3uIkol/aHt+anR7coZ7c3d9f4x5eIR9fGuMjYSbnZaMgYBsjn5raH6NjHp+f4OUgX59iohrdXFnaGNbYmdybmBhbHNhaHCJemJzdF5jZJugj25cNVmvtXRpgIh8koZ1hZaFc4+KiXZwbIWDh3V5iXiJfJOHen5zZ3aJfn6Yb3GGfmh2eW1leYiEpIeAh42Jfm5+dX+BfYyZiIKUkpmIioSJfI+IcHt9hHtofmxqgHt6aXp2goeAcmB3gX5xZHJmdYJtdXuElJGBfIF/bnd5fHR/bVhvgHd1jIKGeIh2gol6eHNuioGQgYZzf31/k4mIem5uam6CgnVuXWdlc3FRWnpOXG9cT1xzcGRVS3N4aVdZWVphcYB0YF1dYGZkaGlmTlpoTkBhZFtgdWFcdG1YV1N0YVpkb3JXal5iaGtnbWxpcHd8kmxphIl8fHB+fnuBf4J6d4B/iouDcXuHb3F3hH97iY2Pg2p+e253eXeKd314gIKHf4N+fnpthYyImKONhIN7dox5a2yEiJB4fXuBkX9/foqDcHJwY2ZeWWdfb3BgYGdwZmpviXRhdG9bYWRqdnt/vpymo8i4cYWDcpJ8eIaTgnORjIdycm+De4N0dYd0iHeTiHl5cWN3h3qAk2lyhHZmd3VjanyDh56Bf3+Oj31yf3OEeYCSkYN4lo6VjoeCiHuIiGt4eX51Z3pobH95c2l6doCDfWhgd4d9amt0Z3uAaXaAi5CUfnp9fnB7dnt0fmJWd35zc4qEgn2DcYeKd3hxcISCjX9+eX59do6Gg3ZpcWltiIJycF1oYnJuSmR1TF5uVVRac25iUU9zeGBSWFhcYW+Cc1thXGhlZWNrZFFbcElEY2FaY3BeXXdoVVZVd15bZW5oVmteYWpnZW9vaHB2epJuaYiMeH1ye355goGBfHZ9g4iGg3B3g3Jud4OCfYmLk39wgHx4eXqBjHSDeH+BgYKEeoB1b36Ki5ueiH2FeneHe2d0hYuQen5/e4iFhHaPgGdvbl9kXFhlWW1yYGBgcGxraIluYHNpWV5kbYB3qdqpx4aHsnGJd2+MdXuGjoB6k4l/dXR0fneAcHF/bYR0lIV4dGtgeoJ5iI9mcYNvZ3ZuW219gJCUf4F5kpN+eXtsh3aBkYyEdJaKkY2GhYV7f4RsdXZ/bWd2ZW17dW1qd3Z/f3xgYniFeWh0dWJ9e2d0ho6NlXt0gHVxf3p8bX9ZVnR+cHWFh3+BeWyJhnR5bHWAg4R+e315e3OLgXxzZ3RlbouEbXNbal91ZEhubkxaYVdWVnhtYlBSdHZXUFVYXmFxhG9cYGNtZGReb2JUXXJHQmZfXWZoXVp6YlFVXHVbW2drYVZqX2BuZWZrcWhwdXiOdGuOjXV+dnh9d4GDgXtzfYOIh4NvcX90cXV/hYGJjYp7d394g3x8hod4h3x9gX6EgHt+c3Z5jI6gjYl6iXZ1g3lefYWYjHmGg3SFhoR3iXtibm1cYltbYVZqc2NgW2dub2aHcWFxZldcY2t/fMrOh7mham1timxxhHF8hIl+e5GFeXlzeXV1e2psdWOEdZKBdm9mXn2CeouJZXKCa2pxY1hteoabiIKCdJiVeH98bYhxgoqMiHKYjpCHhIuDe3h9cXFwfWZocWJteHFqa3F4fXx6XGR5gHdpdXhmgXZndIeLjpV8cYdqbn2BeW58XVhyf210gYt8gm9vin9xdmh3f4GAgXd9cXt1h3x6cmZzYW6MgmxyWGtfd1tJbmtNVVReVFV7a2FPVHVyUFFUVl5idIVpXGBramZjWW5hWGJwR0FoXGBmX11Ve11PVWRwWltqaF1XaGBfcmVqaHJncHJ3hnhulYp0f3p3fniDh391cn+GhY2CcHB7eHd1eoaFhoyFenx/dYt+fYaEhId/fn59h398eHZ5eJGToH+MfYttdoB5Y4OGloVzkYpvhYWBeoN0Y25rWl9bXV1UZ3NlYFlkcnJmgXNia2VXW2Bpf3i+rnugt21ic4Zoc3txeYKFe32Mf3d4cnZve3Zlam5gh3WOgHJpYl5/eHmLhGZxfmhqa1pWb3eKo4GEf3KblHKBeXSCboGCkoh0lYiMh4OIhX14dHJuaHlgam1gbXZqZ2preXd6d1tnfXx4ZXJ9bYR0ZXWFjYaWf2+LZmp6g3VtdGJcb3xrdX2MfIFmdYd9bnFodX94fn9zfWx7e4F6eHBmbGJuiX5tbVZrYHdVSmprT1FOaE1ZfGhiTlV1akxQVFVeZnWDZl1gcGhnYVdpXVtraEpEalphZFdZVXlZTlZtalldbGVcWmVjXnRlbGRxZ3JvdYF4cJmFdn9+d398hYd9dXOCiICVgm5zeXt6c3OFhoiIg3iBfXaPf3yEio6EgoR7fouDe3d8d3eanZd6ioKGaXd9fGyDhJOAco+CcIWCfoF/b2ZsZ1hdW1xbVGRwZF9XYnJ1aXVvZWViV1xcaH9wb3KAc4lkZHh+aXR1c3KChHiAhHl3dHVua3pxYmdrZ4Z0jYNtZl5ffXB7iX5pbXdmaWRVV3Jvjad8hHx2l5F0fHN8em58e5GFd5l9h4WChoN9dHBybGd0XGxoXmx0ZGdmaXpve3JZZ4B2dGdwgHeBdWJ3hYp8lIBui2pteoFxZnNlYG16Z3N4inx+YnaDdmprcXR7cXp5dH1mfn9/eXduZGZiboZ8bWtWamJwU0tpak9LTnBHXntmYU1VdGNKTlNXYWp2fmVcZ3NpZWBWY1dicF1MS2tYY2JVVVVzVkxYdWRaX2thXFpjZV93Zm1icGlzbnJ/dHSagXd/gHd/f4aEenx1goR+l4VucnR8enRxhIWPgYB5i3V0kX98gZWOgIWEfX6Mhnt+gHZ7o6WKeYiGhGt1fHt1g4KMem+Fc3mEfYGDdW5qaGVWXVtaWlNibmRbWGFyemlobGhfYldfW2qAaWtvgGdrYGh5eGpzdHRuhIF6f311dW56aGp5al9lbmiBdo+DZmVYYndpfod7b2lvZ2ZdVVhvaI+pd4F6fJCOeXVwf3BydXmOf3iVdYaCf4WHdWpydmdobltsZF1tc19nYWp4aHttWm2CcnNqb4B+eXdhd4SEd4+Ecohxb3l/cmNxaVxweGRxdIh8eGJzgHBnanhzcmx4d3V4ZIN7f3h2cGRjY258fWtsVWliZlNLbGhPR1JrRWF4Z2FNU3FcSk1UWWVrd3tlXm1xaWRdVmBWbm5XS1NoV2ZeWE5VbFRKXHlfW19rXV1bY2VgemhsYW9vdW5veHV6mH13gIF6gICHhXp5eoN+gZOEcXR0f3l2dISIkH2AfJBrc5WAe4KfhX6HfYB/hoKAint2hKyff3qIiINrcoJ6doF/gXVuhm58f3OJgGpvbWRkWF9aWVpVYmpnW1pedIFpXm1rXGFWXFxsgWVxdH1paVxrdnZndHdybYV7fX15dXJseWhpeGZdZHNoeneSgGJiVGVwZ4KFd3dmaGpgV1ZZZ2OPqG9+d4CLjnpwcX5oeG95jHt3j3KEfX5/hm5kdnNkaGhca2Jdb29bZ19tdWR6aF10gG9xa3F7fXV1YXSFinqHh4B/d3J1f3VhcG1acnRicXKFfHVlcoBsYWx6b2ppe3l2cmaFdnt6dXFlYWVtc35pbFRpXl1US3NjUEdWYUdidmdhS1RvV0pMV1hna3Z6ZGVucWZjWlddWXZlVUpcY1doWFlJV2VRSGJ4Wl1fbFteXGFkXn9pamBvdHhub252g5d5coGAfH+Ii4V9dXWGeYeMfXN1dYJ5enqCi459foSJaXOWgXqKnX1+hXqBen98hohzcY+ujHt7h499ZXKIenR9fHZyb4Vse35sj3picG9iZV1lVllZVmNma2BdXHKEaFhvbVpeV1pcbHticHd2bWJabHNzZ3V1cGyEeX6AeXdubnRlaXRlW2d1ZnZ2kXleXVJmZmuDgnR9YmNpXFRYXWJjkKVoeHSChZB4bW96aHhte4R7dYlzgHh8eH9oZXZtYGZgXmpfXXNrWWVdb29iemVbd3trbm5vd3hzdGRyg5J+h4KIenZvcn1zYnhkW29xYnFxgnxzZ3KAZF5udmlkZ3l7dW5vgnV0fXNxYl9mbm99ZGpTaFhZVE13X1FKWVhIYnVkYUlUbVNKTFpXaWxxe2JsbHNjYVlZW2F2W1NMY11YaVNXSFlhTkdpdVheYW1bW19iYl2FaGhhbnh5bG9qdoGQeG2CfoCBkoeDgXZ0iXSMhnNxd3WCd3x9foyPgH6TfnB3lYN8mZJ5gIB4eX5/dIiDc3CZont6f4mUeGR1iHlzeHVsdG9+bHl8cJFyXnBvYGdibFRbWldoY21mXFxxiWVTcW1aWlhYYGx2Y2l1amleWW1zcWxzc3NqhXx+f3x2bm5sZGlxY1tqcmR0do5zW1dTZWFygH9ygl1iY11TWmBbY5KfZXJxhYSRdGxrem1vcHt8fHGBd39yenl5ZGV1aF1iWmBnW152aFdiXXBoYXdgW3t2aWlybndzcnRocIGUgoZ+hHZyanB9bWZ3V1xrbmJxc4F6c2dvfltgb3FiX2pxfmxsdX5zcXhrcGFcZWxsemFnU2dVV1JQdVtSUFlSSGN0YmBHVWpQSVBaVWtra3xlbW9xYVtaWFlscFdTT2ZXV2lTVEZaXE9IcnVYX2NtY1hgYGFdi2pjZG15eGtvaXV5hntrg31/hJl8goR5fYhuj4Zxb3d6fXSCgnyKjoKCl3R3gpOFgZ+JdYCAgXN/gnGHgnVvopd0e4aLhntleItvbntvZnhwemxzdnKMa150bmFnZWtSXVtVZ2FsbFpccIxkT25tXFZYVWdqdGdidGVlXVludG5wdXV5a4d8f3yIdo9zZGRrbmFcbm1jc3iHa1pUVmNkeH19cYVcY19jVFpgWWOVlWNucIOFinNqaHtvZnN3c3xsenR1b3l+dV5mcmNbXlZhZFlhdGVVX2BtZGFxXV1+b2hpc3FzcHR1am2EkoGIe4VxcmZufXByb1RbZmtmcXSBd3NjbHZVYnFqW19vZn1mbXd9c3Nzam1gWmRqandeZlRkVVZQVG1XUVdTUEhkc19hRlhpTkhXVFZtaGR8aWt4a2JXXFVbdGRTUldoUVlmVFNIWlpQTXh3W19lbGlZYmBeXo9uYmZseXVub2h2dn9/bIN/fYaXe3+HgYp+a5OIcmd0gHt1gIJ8iI5/i5NyfIqRhYefhnt/hoxzgYZzfYN2bqWMc4GNi3Z3bXqMYGV8cGZ6c3lsbXF2gmdke2xjZmdoU19eVWdfbG9bXm6NaE5pbF9UVlNvZ3NsZnhkZFxYcHRscnp3cm2Ie392nHp5a2FlbG1eYG9qZXB4fmdaVlhgbHh8e3CDX2JeZ1ZYX1dkm4hia3GBh313a2t4bVx3cWx7anZzbm97gHJYam5fWV1VYmNYZHFiU15haGJibFpgfWtma3N1bm13dmtohYt+iHqIbXFlcH1tcm1jWWFpaW90gXRzX2lsU2VxZFRibmJ6Y3F3e3ZrcG1rX1hhZ2h0XGVWYVZTTlhlUk9cT09IZXBdY0ZZaU1JX0tYbWRfeGhufmRgVF5UXXVcVFNgZk5dYVRTSlxZUFl1dl1fZm1oWGNhW16OcGNnandxc25ndnR6g3KBgnmHjX58iYeOem6QinRsc4J0f3+HhIaRhJWPeX6Mj4eRm4SAfIyEcoCBc3R3cW6Tk5OTk5OTk5OTkpKSkpKSkpKSkpKSk5OTkpKSkpKSkpKSkpKSkZGRkJCPj4+Pj4+Ojo6Pj46OjY2Njo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo2NjYyMjI2NjY2Njo6Ojo6OjY6OjY2Ojo6Oj4+Pjo2NjY2Oj4+Pj4+PjoKAfnp6fX5+fX1/fn59fn5+fn5+fn+Af4CAgIGAgIB/gIGBgYOHjI6Ojo6NjY2NjY2NjY2NjZKSkpOTkpKSkpKSkpKSkpGRkZGSkpKSkpKSkpKSkpKSkpKSkpGRkZCQkI+Pjo6Ojo6NjY6Ojo2NjY2Njo6Njo6OjY2NjY2Njo6Ojo6Ojo6NjYyMjY2MjIyNjY2Njo6Ojo6NjY2NjY2Njo6Ojo6OjY2NjY2Ojo6Ojo+Ogn99ent8fn59fX5+fn5+fn5+fn5+f4B/gICAgICAgH+BgYCBg4aMjY6NjY2NjY2NjIyMjIyMkpGRkZGRkZGSkpKSkpKSkZKSkpKSk5KSkpKRkZGRkZKSkpGRkZGQkJCQj4+Ojo6OjY2NjY2Njo6Ojo6NjY2NjY2NjY2NjY2NjY6Ojo6Ojo2NjIyMjIyMjIyNjY2NjY2NjY2NjY2NjY2Njo6Ojo2NjY2NjY2NjY6Ojo6Cf3x6fHx9fn19fn19fX59fn5+fn5+gH9/gICBgYGAf4CAgICDhouOjo2NjY2NjIyMjIyMjIySkZCQkJCQkJKSkpKSkZGSkpKSkpKSkpGRkZGRkZGRkJCQkJGRkZCQkJCPj46Pjo6Ojo6Ojo6Ojo6Ojo2MjYyMjY2NjY2NjY2Njo6Ojo6OjY2MjIyMjIyMjIyMjY2NjY2NjY2NjY2NjY2Njo6NjY2MjIyNjY2Njo6OjoN/fHp8e31+fH1+fXx9fn59fn5+fn5/f3+BgYGAgICAgYCAgIOGi42NjY2NjIyMjIyMjIyMjJTO2tjY2NjamoGEhISEiF0tMDAwMC1GoaGhoaGhoJqZmpqampqKg4SEhIOEd2VnZmZmaFxDREREREJOpa+tra2trqSfoKCgoKOAY2dnZ2dmb4SDg4ODg4OLjIyMjIyMjY2NjYyMjY2NjY2NjY2NjIyMjIyNjY2NjY2OhX19e3t6fX58fH59fX1+fX1+fn5+fn9/f4GBgYCAgICBgICAgoWKjI2MjIyMjIyMjIyMjIyMlNvp5+fn5+qcfoKCgoKGUxgdHR0dGTekpKSkpKSjnJycnJycnImBgoKBgYJyXV9fX19hUjQ1NTU1M0GptrS0tLS1qKOkpKSkp3xcX19fX15qgoGBgYGAgYqLi4yMjIyMjIyMjIyMjIyMjY2NjY2MjIyMjIyMjY2NjY2GfH16e3p8fXt8fn19fX59fX5+fn5/f3+AgYCBgYGAgIGBgYGChYqNjYyMjIyMjIyMjIuLi4uSl5iYmZmZmZKPkJCQkJCMh4eHh4eHiZOTkpKSkpKRkZGRkZGRj46Ojo2NjYuJiYmJiYmIhYaFhYWFho+QkJCQkJGPj4+Qj4+Pi4iIiIiIiImKioqKioqKi4uLi4uLi4uLjIyLi4yMjIyMjI2NjIyMjIyMjIyMjY2Njoh8f3l7ent8e319fX18fX19fX5+fn9/f4CBgYGBgYGAgYCAgYKFioyMjIyMjIyMjIuLi4uLi5GQj5CQkIuOkZGJh46KkJKTkIqRjI6Ph4+RkZGRkJCQkJCPj4+Pj4+Ojo6Njo6Ojo2Njo2Njo6Ojo6NjIuLjIyMjIyMjIyMjIyMjY2MjIyMjIuLi4uLiouLi4uLi4uLi4uLi4uLjIyMjIyMjIyMjIyMjIyMjIyNjY2NiX59eHh5fH18fX19fHx9fX59fn5+f3+AgICBgYGBgYCBgIGCgoSKjIyMjIyMjIyLi4uLi4qLkJCRkZGPhI6QkIaKj4WNkJCOh4qKho2GiZCQkJCQkJCQkI+Pj4+Ojo6NjY2NjYyMjIyMjIyMjIyMjIyMjIyMjI2NjIyMjIyMjIyMi4uLi4uLi4uLi4qKiouLi4uLi4uLi4uLi4uLi4yMjIyMjIyMjIyMjIyMjIyMjI2Lfnx3dnh7fXx7fX18fH19fn5+fn5/f4CAgIGBgYGBgIGAgIGChIqMjIyMjIuLi4uLioqKioqQkJCQkIqFjoiOhoaPiY2QkI+Gi4uGjoaLj4+Pj4+Qj5CPj4+Ojo6OjY2MjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMi4uLi4uLi4uLi4uLi4qKioqKi4qKi4qKi4uKioqKi4uLi4uLjIyMjIyMjIyMjIyMjIyMjIt+e3d2eHt8fHx9fX19fX1+fn5/fn9/f3+AgIGAgYGAgYCBgYGEiYyMi4uLi4uLioqKioqKipCQkJCPhYOMjpCOiYyJjZCQj4mIjYaMiYmPj4+Pj4+Pj4+Pjo6OjY2NjYyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIuLi4uLi4uLi4qKioqKioqKioqKioqKioqLi4uKioqKiouLi4uLi4yMjIyMjIyMjIyMjIyMin18dnZ4fHx7fH19fH19fn5+fn5+fn9/f4CAgYCBgYGBgIGAgYSJi4yLi4uLi4qKiomJiYmJkJCQkJCMhoyJjoeFjYmOi4yLhoiHhoiGiY+Pjo+Pj4+Pjo6OjY2NjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyLi4uLi4qKioqKioqKioqKioqKioqKioqKi4uLioqKioqKioqLi4uLi4uLjIyMjIyMi4uMjIyKf353eHp7enp8fHx8fX1+fn5+fn9+fn9/gICAgICBgICAgYCBhIqMi4uLioqKioqJiYmJiYmPj4+Pj5CMjouPjIqPjI6MjY2JjYqLjImOj46Ojo6Ojo6Ojo6NjYyMjIyLi4uLi4uLjIyMjIyMjIyMjIyMjIyMjIyMjIyLi4uLioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi4uLi4uLi4uLi4uLjIiAfXh5enp6e318e3t9fn5+fn5/f35+f39/gICBgICAgIGBgIGEiouLioqKioqJiYmJiYmIiI+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Oj46Oj46Ojo6Ojo6Ojo2NjYyMjIyLi4uLi4uLi4uLjIyMjIyMjIyMjIyMjIyMjIyMjIuLi4uKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLi4uLioqKi4uLh4B8eHp6eXt8fHt8fH1+fn5+fn9/fn9/f39/gIB/gYGAgIB/gYSJi4qKioqJiYmJiYmJiIiIj4+Pj4+Pj4+Pj46Pj4+Oj4+Ojo6Ojo6Ojo6OjY2NjY2NjY2MjIyMjIuLi4uLi4uLi4uLi4uLi4uLjIyMjIyMjIyMjIyMi4uLi4qKioqKioqKioqKioqKioqKioqKioqKioqKiYmKioqKioqKioqKioqKioqKioqKi4uHgHt5eXh6fHx6e3t9fX5+fn5+f39+f39/f39/f3+BgYCAgH+BhIiLiomJiYmJiYmJiIiIiIiOjo6Ojo6Pj46MjI+Sj5COjo6Ojo6NjY2NjY2NjY2NjIyMjIyMjIuLi4uLioqKioqLi4uLi4uLi4uLi4uMjIyMjIyMjIyLi4uLi4qKioqKioqKioqKiomKiomJiYqKioqKioqJiYmJioqKioqKioqKioqKioqKioqKi4aBe3h5eHp8ent7fH19fn5+fn5/f35/f39+fn9/f4CAgYCAgIGEiIqJiYmJiYmJiIiIiIeHh46Ojo6Ojo6Ojo+MkJOQkI+Ojo6NjY2NjY2NjYyMjIyMjIyMjIuLi4uLi4qKioqKioqKi4uLi4uLi4uLi4uLi4uMjIyLi4uLi4uLioqKioqKioqKiYmJiYmJiYmJiYmKioqKiomJiYmJiYmJiYqKioqKiomJioqKioqKhYB6eHl5fHt6ent8fH1+fn1+fn9/fX9/f35/f39/gICBgICAgYSIiomJiYiIiIiIiIeHh4eHjY2Ojo6Ojo6Pj4+PjoyNkI2NjY2NjY2MjIyMjIyMjIyMi4uLi4uLioqKioqKioqKioqLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4qKioqKioqJiYmJiYmJiYmJiYmJiYmKioqJiYmJiYmJiYmJiYmKioqJiYmJiYmJioqFf3l6eXh7e3p7fHx7fn5+fX5+f39+f35/fn+Af3+AgICBgYCChIeKiYmIiIiIh4eHh4eHh4eNjY2Njo6Oi42Nj5WPiYyPjYyNjYyMjIyMjIyMjIuLi4uLi4uLi4qKioqKioqKioqKiouLi4uLi4uLi4uLi4uLi4uLi4uLi4uKioqJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYR+eXt5ent7eXt9fHt+fn59fn1+f35/fn9+f3+AgICAf4CAgICEh4mIiIiHh4eHh4eHh4aGhoyNjY2NjY+MjImKj42IjJGPjY2NjIyMjIyMjIyLi4uLi4uKioqKioqKioqKioqKioqKiouLi4uLi4uLi4uLi4uLi4uLi4uKioqJiomJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJg355e3p8e3p7fX17fH9+fn5+fX5/fn9+f3+Af4CAgH+AgH9/f4OGiIiHh4eHh4aGhoaGhoaGjIyMjIyLiYyKiIeJhoyOjJCMjZGOjIyMi4uLi4uLi4uLi4qKioqKioqKioqKioqKioqKioqKiouLi4uLi4uLi4uLioqKioqKiomJiYmJiYmJiImJiYmJiYmJiYmJiYmJiYmJiYmIiImJiYmJiYmJiYmJiYiIiIiIiYmCf3h7e3t6enx9fHx9f39+fn19fn9/f39/f4F/gIB/gICAgICAg4aIh4eHhoaGhoaGhoaGhoWMjIyMi4yOjoyKioeEiIuKjIuNjo+Li4uLi4uLi4uLi4uLioqKiomJiYmKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiomJiYmJiYiIiIiIiIiIiImJiYmJiYmJiYmJiIiIiIiIiYmIiIiIiIiIiIiIiIiIiIJ/eHp7enp6e3x8fX1+f35+fX1+f39/fn+AgICAf3+Af4CAgYCDhYiHh4aGhoaGhoaFhYWFhYyMjI2NjJCSjI2Ii4mJi4uLi4mLjIqMi4uLi4uLioqLi4qKiomJiYmJiYmJiYqKioqKioqKioqKioqKioqKioqKioqKiYqJioqJiYmJiYmIiIiIiIiIiIiIiImJiYmJiYmJiYmIiIiIiIiIiIiIiIiIiIiIiIiIiIiHgXx4e3x5enp8fHx9fX9/fn59fX9/f39+fn+Af4B/f3+Af4CAgIKEh4eGhoaGhYWFhYWFhYWFjIyNkY+PjZGJjIaJjIuIiImMiYeNjo+NioqKioqKioqKiomJiYmJiYmJiYmJioqKioqKioqKioqKioqJioqKioqKiYmJiYmJiYmJiYmJiYiIiIiIiIiIiIiIiImJiYmJiYmJiIiIiIiIiIiIiIiIiIiHh4eHh4eHh4WAenl9e3t7enx8fHx9f39+fn19f39/f35+f4B/gH9/f4B/gH+AgoSHhoaGhYWFhYWFhYWFhISLi46PjoyLj4iHiYmMjYWFjo2KiYyNi46KioqKiomJiYmJiYmJiYmJiYmJiYmJiYmKioqKioqKiomJiYmJiYmJiYmJiYmJiYmJiYmJiYmIiIiIiIiIiIiHiIiIiIiIiIiIiIiIiIiIiIiHh4eHh4eHh4eHhoaHh4eHhH55eX16enp7fXt8fX5+f35+fX5/f39/fX5/f3+Af39/f39/f4CChIaFhoWFhYWFhYWFhISEhIuLjI6MjI2Lh4mIiomGgoiNjoiKi5GTj4uJiYmJiYmJiYmJiYmIiYmJiYmJiYmJiYmKioqKiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiIiIiIiIiIeHh4eHh4eIiIiIiIiIiIiIh4eHh4eHhoaGh4aGhoaGhoaGh4eDfXp5e3p5enx8e31+fn5/fn59fn9/fn9+fn+AgICAf35/f39/gIKEhoWFhYWFhISEhISEhISEioqOjYmIiIqKh4iHiomIioiIh4qGi5GPiomJiYmJiYiIiIiIiIiIiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmIiIiIiIiIiIiHh4iIh4eHh4eHh4eHh4eHh4eHh4eHh4eHhoaGhoaGhoaGhoaGhoaGh4J8eXl6eXp7e3t7fX5+fn5+fn59gH9/f39/f4CAgH9/fn9/gICAgoSGhYWFhISEhISEhISEhISKi5CPiYmJi4qHh4WHiYuKiYSLjYmOjYqJiYmJiIiIiIiIiIiIiIiIiYmJiYmJiYmJiYmJiYmJiYmJiIiIiImJiYmJiYiIiIiIiIiIiIiIiIeHh4eHh4eHh4eHh4eHh4eHh4eHh4eGhoaGhoaGhoaGhoaGhoaGhoaGgXt4enp4e3x7e3x+fn9+fn5+fX1/f39/f3+Af4B/f39/f3+Af4CChIaFhYSEhISEhISEhISEhI+Qj4+IiYuIhoeIiYuLjIuJioqNio6Oj4iJiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIh4eHh4eHh4eHh4eHh4eHh4aGhoaGhoaGhoaGhoaGhoaGhYWFhYWFhoaAe3h5eXh4enp8fX1+f35+fn59fn9/f39/gIB/gICAf39/gIB/gYKDhoiGiIaDhISEhIODg4ODkpKOioeKi4qLh4uNiYqJi4iHiouIio+SioiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIh4eHh4eHh4eHh4eHh4eGhoaGhoaGhoaGhoaGhoaGhoaGhoaFhYWFhYWGhn96eXh4eHl5eXx9fn5/fn5/fn1+f35/f3+Af39/f4CAgH+AgH+BgoOHjo+PjoiHhIWFhoaFhYWSkI6KiYmIiImKioiIh4aKjIiHiYmOkJGNh4iIiIiIiIiIiIiIiIiIiIiIh4iIiIiIiIiIiIiIiIiIiIiIiIiIh4eHh4eHh4eHh4eHh4eHh4eHh4aGh4eHh4aGhoaGhoaGhoaGhoaGhoaGhoaGhoWFhYWFhYWFhYWGf3l4d3d3eXp5e3x9fn9+f35+fn5+f35+fn+Af4CAgICAf3+Af4GBg4eOjo6Ojo6Mjo2OjY2MjZCQjomHhoiJiYeIiouIiYyJiYaKjY6PkYuIiIiIiIeHh4eIiIiIiIiHh4eHh4iIiIiIiIiIiIiIiIiIiIeHh4eHh4eHh4eHh4eHh4eHh4eHh4aGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaFhYWFhYWFhYWFhYZ+eXd5d3d6eXl8e31/fn5/fn5+fn5+fn9+f4B/fn+Af39/f39+gIGEiI6Ojo6Ojo6Ojo6Ojo2NkJGOi42JjIiIiYaHiYaIioiHi4yLjpCQiIeIiYmJiIeHh4iIiYmIh4eHh4iIiYiIiIiIh4iIiIiHh4eHh4eHh4eHh4eHh4eHh4aGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoWFhoaFhYaGhoWGhYSEhIWFhoaFhIWFhX55d3l2eHl4e3x7fn5+fn5+fn5+fn5+f39+f39+f39/f35/f3+AgYOGjY2Ojo6OjY6NjY6OjY2Qj42Ni46KhoiKhISLiYeDhYSDi4mLj42JjI6QkI+NjYyLjY6Pj42NjI2Nj4+Pjo6MjYyMjY2KiYiHiImHh4aHh4eHh4aGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoeHiYqKiIeJi4yNjo2LiImLi42OjYyJiImMgHl3d3Z6eXh7e3t9fn5+fn5+fn5+fn5/f39+fn5/f4B/f4B/f4CBg4aMjY2NjY2NjY2Qj4+Pj46NjI6KiYuMjIeFiY2Lh4aIh4aHh4uNjo6Pj4+Pjo+Pj4+Pj4+Pj4+Pj4+Ojo+Pj4+Pj4+Pj4+Oj46Oj46Mi4uJh4eHh4aIhoaGhoaGhoaGhoeLiYeHiIiLjY2Mi4yLjY2Ojo+Ojo6Pj46Ojo6Ojo6Ojo6Njo6NjY2AeHZ4eHp4enx6fH5+fn5+fn5+fn5+f39/fn59fn9/f39/gH9/gIGDhoyMjIyMjY+QkpOTk5KSjYyMjIqHioyKh4eJiYWCiouIiYWJjpCNjo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6NjI2NjI2LiYaHh4eHiYqLjY6NjYyNjY6OjY2OjY2NjY2NjY2NjY2NjY2OjIyNj4+OjY2MjIyLi313dXd5enp7e3p+fn5+fn5+f35+fn5/f39+fn1+f39/gICAf3+AgYOFj5KRkJGSk5OTk5OTkpKLi4uLiomMiouLiYuKhoeOjYiIjI6OjIuMjIyNj46Njo6Ojo2NjY2MjY2NjIyMjIyMjIyMjY2NjYyMjI2NjYyMjI2NjIyNjIyMi4yMi4yMjI2MjIyMjIyMjIyMjIyLi4uLi4yNjY6Sk5OSkpSRkJOVlZSTk5COjo6Oe3Z2d3h6ent7e31+fn5+fn5/fn5+fn5/f35+fn9/f39/gIB/f4CBgoSNkpKTkpOSkpOTkZKSkoqJioyJi4qJjIuKioiHiYqKi4mKjY2Mj46Nj5KUlJOUlJOTkpGSkI+Ojo2NjY2Pko+OkZGOjIuKioqLi4qKi5CPjoyMjIqKioqKioqKiouKioqKi4yLi4uMjIyKiouLi46RkpOTk5SUk5STk5SUlJOTk5KSkpKSk5F6dXZ2eHt7e3p6fX5+fn5+fn5+fn5+fX5/fn5+f39/f3+Af39/gIGChIuRkZGRkZKSkpGRkpGRiYmIiIqMiYiJiYuJhoSJhoyKh4ySkpKTk5OUlZWWlZWUk5OUlJSUk5SUlJSVlZWVlZWUlJOTkY+QkZKQjoyRlZWVk5KSjo+QjYqKi4qKi42OjY6RkpCRkpKSkpGRkpKSk5OTk5OTk5OTk5OTkpOSkpKSkpKSkpKSj3h1d3l6e3t7ent9fX19fn5/f35+fX5+fn5+f39/f39/f4B/f3+AgYKEi5GQkJCSkpKRkZGRkZGIiIiIi4uJg4eLi4yMiIeHjYyNkpSSkpOTlJWWlpaVlZSSkpOTlJSUlJWVlZaXlpaWlpWUk5SUlJSVlJSUk5OVlZWUk5KTk5OTkJGSkZGSk5OTk5KSkpOSkpKSkpKSkpKSkpKSk5OTk5SUk5OSkpOTkpKSkpGRkZGPdnJ3enp7e3t8fX59fX1+fn9+fn9+fn5+fn6Af39/f3+Af3+Af4CBgoSKkJCRkZGRkZCQkJCQkIeHh4eIiIiFi4+KjI6Njo+OkJWUk5OTk5SUlZWVlJSVk5KSk5KTlZSUlZaWlpaWlpaWlpSTk5OTk5OUlJOSk5SVlZSTkpKSkpOTk5OTk5OTk5KSkpKSkpKSkpGSkpGRkZGRkZKTlJSUlJSTkpGRkZGRkZGRkZGRkYx0c3d6ent7e3x9fX1+fX5+f35+fn5+fn5+fn9/f39/fn9/f39/f4GDhIqQkJGRkJCQj4+Pj4+Ph4iKi4yNjYuOj42Mjo6RkpGSk5OSkpKSk5SUlJKSk5OTk5OSkpOUk5OTk5WVlZWUlZWUk5OTk5KSk5OUk5KTlJSUk5KSkpKSk5OTkpKSkpKRkZKSkpKSkpKSkpKSkZKRkZGSkpOTlJSUk5OSkZGRkZGQkJCQkZCRinN0dnp8fHp7fXx9fn59f35/f35+fn9+f31+f39+fn59f39/gH+AgYKDipCQkZGQj5CPjo+Pjo+Oj4+Pj4+Pj4+PkI2OjpCRkpKSkpKRkpKTk5OTkpGSkpKRkZKSk5OSk5OSk5STk5OTlJOSk5OTk5OTk5OSk5OTkpKSkpKSkpKSkpGRkZGSkZCRkZGRkpKRkZGRkpGRkZGRkpKSkpKSkpKSkpKRkJCQkJCQkJCQkJGGc3V2e3x8e3x9fX1+fn1/f35/fn5/gH9+fX5/fX5/fn5/f3+Af3+BgYGKkI+PkI+Pj4+Pj4+Pj4+Oj46Oj4+Pj5CQiI2PkJGRkpKSkpOTk5OTkpKSk5KSkZGRkZKSk5KTkpGRkpKSkZKSkpKSkpKTk5KRkZKTkpGRkpKSkpKRkJCQkJGRkZGQkJGSkZGRkZGSkZGRkZGRkZGSkpKSkpKSkZCRkZCPj4+Pj4+Pj4+PkX9ydHh8fHx7fHx9fX5+fn9+fn5/f3+AgH99fn5+f39+f39/f4CAf4GBgYqPj4+Pjo6Ojo+Pj46Ojo6Ojo+PkI+Pj4+GjpCQkJCRkZGRkZGRkZGQkJCQkZGRkZGRkZGRkZGQkJCRkZCQkJGRkZGRkZGRkJCQkZGQkJGRkZGRkI+PkJCQkJGRkJCQkJCRkJCQkJCQkZCQkJCQkJCQkZCQkJCPj4+Pjo+Pj46Ojo+Pj4+PeHJ2eXx9fHp9fH19fn5+f35+f39/f4CAf39/fn5/f35/f39/gIB/gYGAio6Ojo6NjY2Ojo6Ojo6NjY2Oj4+Pj4+PjoiQkZCPj4+QkJCQkJCQkI+PkJCQj4+Pj5CQkJCQkJCPj4+PkI+PkJCQkJCQj4+Oj4+QkI+PkJCQkJCPjo+QkJCPj4+Pj4+PkJCQkI+PkI+Qj4+PkI+PkJCQkI+OkI+Pj46OjoyMjY2NjIqDiYhzc3Z4fX58eX18fX1+fn5/fX5/fn9/f39/f4B/f39/f4CAgH+AgH+BgYCJjY2Ojo6Ojo6OjY2OjoyNjY6Ojo6Ojo2NiJCRkI6Njo6Ojo6Ojo6Pjo6Ojo6Ojo6Pjo6Ojo6Ojo6OjY6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Pj46Oj4+Pj4+Pj4+Pjo+PjY2MjYyNjoyLi4mJiYiFhYSDgoKEgnR5fXp4dXJrZWltb2xmZmdncHNzd3l9fnl6e3x9fX1+fn59fn9/fn9/f39/gIB/f3+AgIGAgIB/f4CBgImNjY2NjY2MjYyMjIyMi4uLjYyMjIyMjIyGj5GRjIyMjIyMjIyMjIyMjIyMjIyNjY2MjIyMjYyMjY2MjIyNjY2NjYyMjI2MiomKi4uJh4KAh4iEgXt6gH57fXx8fXlzcnJycnV1cG1ramppZ2NkYV9bXF1eWFVXWFlTS0VJSkpLTE1PT0tgdHR3eX19eHp5e3x8fX5+fn1+f39+f35/f4CAgH+AgICBgYCAgICAgIGAf4OEhYSFiIuLjYyMjIuLi4yGiYqKioqKh4OOkJGNiouLi4uMiYmKioqKiouLi4eDi4qIiYmGhYWEhIeJiYWCg397fHl6e3pzcHFxcW1samdsbWdlZmVmZGNlZGVkZWVlZWRkZGNhYV5dXFpYWFdUUFFSU1JTTU1KSUZESEpHR0hHR0xOSWdzdXh5fXp4d3l8fHx8fn5+fn9/fn9/f39+f4CAgIB/gICBgICAgICBgYFnXmBjYWNucX17ent/fXd8fHZ4ent4eHpvcHt4eXt8e3h3e394dXd0dHZ0dXZ3dXFycW5wcnBnaGtsbm9tamlpaGhlZWRkZF9gYWJgYF5dWVhaWltdXV9gX2BfX19gYmFeXl5eWVldXF1bV1dWUlRSU1NOUUpISUZERUhMTEhGR0lLSklNbXJ0eHp7end3eXt6e3x+fn1+f39+f35/f35+gIGAf3+AgIGAgICAgICCgWdYW1pZXFtcY1xaXF5ga3FtcHBvbm5vbmtpbmxrbG9qaWtraWpraWdmZ2dnaGhnbWdqZ2hlaGdjY2JhYmBgXVhbW1dYV1RWUVBUU1NNSkxLTExOTk9UWFhXVVVUUlBQTU1QT05LTE1QUU9MTEpHSUlHSEhJSEhIR0ZHSEpKSEhISUlISVZwc3V5ent5dnZ5enp7fH59fX5/f35/fn5+f3+AgX9+f4B/gICAgICAgIGBbFtYVlZWWVlaWVlYVVZoamxubmxra2poaGloZGVkYlxiZl9fYGNfXF9dYF1eWl5dWVleYmFeXlpZX1xYV1NOTUxLS0tMSUtNTktKS0tMSktQTEtLRkdHSUlGR0lISUZFSEdGRkVERUVEREVJSUlHSEdIRkZLTUtJSUlIR0hLTU1LTExMVXFzdnl6e3h2d3h3ent8fn1+fn9/f39+f3+AgIGAfn5/f4CAf4CAgIB/gYJoUlRVVlNVV1lZWVdXV1tbYWNfXlxbWFZWWVZSVFJRUVVUU1NTUE1KTU5QUk9NUFFRUVFSVlZRUVFUUFBOTk9MSk1MS0xKSktLRklJSkxJR0pISUlFR0dGRkVFSElKR0ZHRkZHR0hKR0dISEpMSkpLSUlISktLSkhKS0pISUtMTU9QUEtUdHR1eHp6eHZ2d3d6enx+fX5+fn5/f35+fn+AgYB/f3+AgYB/gICAgH+AgmlQUlRXVVRWWVdYWFpbVFRTUlBRU1FRUU9OTlBQUU9MTlBPTk5NTEtNTk5QTU9QUFJRUE5OT05PTk9PUFFPTk5PTk5QTk1NS0lISEpJSUlJR0ZHR0dJSkhJSEhJSEhHSEdISElISUxLSklISkpJSkpIR0pMS0pJSUhKSktMTk1NTU9RTFVzcnN3enl3dnR2eHp7fX19fn5+fn9+fn5+gICBgICAf4GBgH+AgICAgICBbE9PTlRZVVVdW1lXV1hOTUpKSUZKT0xKSkdJSk1NS0pMTUpHSUlJSktMRkRGSktLS0hKTExMT01MTE5PT09NTk9MTk5OUFBPTE1MTk1MTEpJSEdJSElISElJS0xLS0pJS0pJSklJSUlJR0dKSUdJSUpKTk1OTEhJSklJSk1PT01MT1JOWXBwcnd4d3d0c3R3enx+fX5+fn5+fn5+fn9/gICAgICAgYCAf39/gICAgIFvS0pNTlFOTlVXVlZSU0lFQ0VFUkREQT5CP0RAQD5CREFAQURHRkVIRUJBQEBDQ0RFQUNFSEtPS0lJSkhHSklKSUlLSkxQTk1MTU1MTU1NTElIREZGR0ZGRklKSUlLSkhMSklKSkpJSEhKS0tIRkdJSklLTU5OSktPTUxLTU1PUE5QT1BgcG9yd3h2dHJzdXd6fX19fn5+fn9+fn1/gICAgICAf4CAgIB/f3+AgICAgXNQUE5OUE1KS1BSUE5RQ0RCQUZRRT1DPT9FSDk6Oz0/PTxBRUA+Ojs+PjxFRD0/RUE/QEFAREVHR0dHQkRERUZFR0dHR0pHSEpLR0NER0pHQ0RFQUFDR0hHSEdISktKSElMS0lISktLTU5MTUxMSkpMS0lLTU9PUFNRT1BQTk9QUlFNUGdwb3N2dXRycXR4eX19fX1+fn5+f4B+foCAgH9/gIB/f4CAgH+Af4B/gICCdlRVUVFQT0xNUFBOT09BQkFAQkE/Oz48Pj8/Ozg5ODs7OkA7Oz48Ozs8PEhMPT1BQT9CQz1BRERGQkZGREdJSEM/QEBAQUFCQUE/Pjw9PkFAQD8+P0BFR0dHSUtMTk1OTUxNTUpLTVBVU05MTlFOTk1OTE1NTk9OTk1LS05OTk1OTkxUbnBwcnR0c3Fydnl5fX19fn1+fn5/gH5+gICAgICAgH9/gICAgH9/gH+BgIJ4UVFSVFJTUVNTUVFST0BAPT4/PD8+QEE/PT45Ozo7Ozk5Ojg4Ozw6Njg7PD49Ozs6ODpAQEFCP0E/Q0ZEQkNDPzs+PkBDQ0E/Pj9BPkBAQj9APD9CQEFDRUVFSktQT1BPTU1OTExMT1JRUFJOTExPTUtOT0xMTEtMS0tKS0tKTU1LS1xxcXF0c3VzcXR4eHp9fn1+fn5+f39/fn5/gIGAgH+Af4CAgICAf4CAf4CAgXxSTU9RUFFSUlRSU1NOPDs8Ozs7P0BBQkA9PDk8PTw6Nzk6Ojk4OTpOPzg6OTo7Ozg3ODk7Ojg8Oz1AQUA9Ozs+PD09QEJDQT9BQkE9Pj09Oz0/Q0RCQD9BREJFR0pKSkpKTE1MTExNTExOVVNLTE1USVBKSU1KSUpLS0pJSEdKS0lKZnJxc3RzdXJydnl5e31+fn5+fX9+f39/f36AgICAf4CAgICAgIF/gIF/gYGBgFZMTlBQTlJRUFBRUU44PT88PDo9PkFAQT8+PkA/Pj48PT0+Pj07RnlfOz09PTw8PDw7Ozo7PD49Pj8/QUA+P0E/QEBBQEBAPT8/PTw6Oz09PD9AQUJCQUBCREZGRkdGR0dISUtMTExLTEtKS0lKSk1MTEpMS0lISUxMS0lJSElLR01tcHF1dXR1c3V4eXl8fX5+fn5+fn5/gH9+gIB/f39/gH+AgYCAgYCBgICBgYCCYUtPT05OT1BPT1BQTzo8Pjw9Oz8+PkFBPz0/Q0REPz49PUBJSENYeW9DPkNFPz9APTs9PT08Ozo9PkFBPz5AQD9BPz89PD48PTs7PD0+QUA/QD5AQ0NEQkRFSEVFR0hISEdGSUpJSUlJSUhKSkpKTEtKSklJSEhKSktMS0lLSkpIVnBvcXNzdHR1eXp7e3x+f35+fn5+f39/f39/f3+Af4CAgICAf4GBgICAgIGBgIJtTFBRTk9QTk5PUFBPPjw8PT4/P0A+QEA/Pz9DRkVOQDpAZX5+eHJ3bz45PDk9PUA9Ojw7Ozw7ODk7Pz49PD07PEA9PTw8Pjs9PD0+QUBCQUBAP0JEQ0RFRkZGQ0VHSElJSEhJS0tMTUpKSUpNTUpLSktJSEhISEpJSktKSk5MSUlfcHBycnJ0dXZ6e319fX5/fn5+fn5/f35/f36AgIB/gICAgICAgYGAgICAgIGAgnZNTk5NTk5MTE5QTkw+QTw8PT8+QkM/P0FBQUJATXtmQGuHhISDgnpwPzk4ODo7PT8/PDs7PDs6Ojs+Pz89PDg6Pjw9Pj89Oz4/QEJDQkJDQ0FCQkFCQkRCQkRCRENGSUdGRkhJSUtNSklKSktMSkpJSkVESUlGRkhISUpKTEpGRmdwb3FxdHZ1d3t8fH18fn59fX1+fn9/foB+fn+AgH+AgICAgICBgYCAgICAgICBek5JS0tMTExFSUxOTTw/PDw9PkBAQUE7QkNCQz9VdXlxgYGCgnyEgHJCPT0/PT0+Q0Q/Ozw9Pj89PT5BQ0A8OTtBPz4+QT07P0JAQkNCQENDQUNBPT0+QD0/QUFBQENFRUBAQ0JDR0dFRENGRUZGR0VEQEFHR0ZDRkRHSEpHQz5IbG9wcHF0dXZ5fHx8fHx+fn1+fn5+fn5+f36Af3+AgICAgICAgIGAf4CAf4CBgIF+UUhLTU1NS0pLTE9RQD8+PkFBQEBBR0FCRENFQFV1dIF/fIODfIWFaEFBQENAQD9AQD49PD1BRUFCQkZIQz08QERDQUE/Pj1AQT4+Pj88PkBER0VAPkBBP0BDRkVDQkNDQEJEREJERUFCPkFCQkFCQEA9QUJDRENDQUNFR0E/PVZwcHFwcnV1d3p8e3t8fX9+fX19fX1+fX5+fn9/foB/f4CAgICAgYCAgIB/gIGAgX5SSEtNTUxLS05OUlVEQkBDQ0FBQkBCQ0BAQUFATHNzf399g4WGhodfPkNDRUA/P05hX0pAQ0VJSUlJTU1LRUNGR0hFR0VFRUREQ0E/QD4+QkZKSkdFRUdGRkpOTktKSUdHSEtNSkdHQ0REREVEQUJCQ0BDREVEREVERUZDQkFEZW9wcXF0dnV4e3x6fHx+f319fX19fn59f4B/f39/f39+gIGBf4CBgICAgH+AgICAfVJJSUpKSEpKTE9SU0dGRUdIREdIREA+PDs+QEVFZneBg4SFhoeHiYRLREVEQ1d1homKflhHSEpMTE1PT0xIR0hHSElJSEhHR0hIRUNFRUVFRkhKSkZFR0lKTU9PTU1LSktKTU5LSUhHSElIR0ZFRkZGREZIR0VFSEhGSEdIRlFubnBxcnZ2eXt7e3p9fX5/fX19fX1+fn1/f39/fn5/gH+BgYGAgICAgICAf4GBgIB8UEhHSElGR0lKTU5OSkxJSUpLTE5KRkNBQkNGSkdYdIKEhoSChYiIjWNAQlV0h4mHh4aHgldJTE1MTU5MSkdHR0dER0dHR0ZIRkhFQ0RERkVEREhIQ0NDR0pKS0xMTExMTElKS0pKSUlJSEpISEdISUhHR0hGRkZISklJSUlIXW9vcXJzd3d6e3t6e319fn59fX19fX5+fYB/f39+fn+BgIGAgYCAgICAgIB/gYCAgHxNR0ZIRkVGR0dKS0pMTUxLTU5NT0tJSEhKS0tMTEpbhIaHg4GDhoiJfVdshIeGhoaHh4eHfFBLTEtIR0ZGREVDQ0BBQ0NDQ0ZGRUJAPj5AQUFAQkQ/Pj9ERkhERUdJS0lJR0hJR0lJSkpJSEZKSkpKSUpJSkpKRklMTEpKS0tmb3BzcnR2eHl7e3t8fH1+fn19fX19fn59f39/f35/f4CAgICAgYCAgIGAgICAgICAfU9GRkdGR0hHRUZHR01NTUtMS0lHQ0NDRElLS0xMSWWHh4aBg4WAgYKDhIWFhISFhoaHh4aKdUlJRkI/P0A/Pz88PDw+Ojo8QUFAPjw5OTg8PD07Pjs5Oz9BQkFBQ0NDQEFCRERCQ0ZISUhISExNTEdJSk1NTk1KSktLSkxNU2xvcXRzc3d5e3t7fH19fn9+fX19fX1+fn5/foB/fn9/gICBgIGBgICAgYCAgIB/f39+UUZFRkdJSUdEQ0VGTk1MSklIRT85Oj5ARUhISkpKbIeGg4CDhICBg4ODhIWFhoeIiIiJiYyOZkJCPTg4Ojo5ODc4ODk2NDc5Ozw6ODU2Nzc4OTc4NzY4OTs7PD5AOzk5OT09Pjw8PUFERUhKTUxMR0lIT1JRUFBOTE1NT1Fdb3BydHN1eHp7e3x8fn5+f359fX59fX5+f39/gH9/f4CAgICAgYCAgICAgICAgIB/f39RR0ZHSEpIRkVGR0hMTEpJSUdDQjU2OjxDQENHSUlphYGAfoCChISEg4OEhomKi4yLiomKi4yJVDs4NjU2NzY2NjQ1NzYzNDY4Ojg3NjU2NTY3Njc3ODo3Nzc4OTs3NTg5OTg5ODc2OjxAR0ZJRklGRUZPU1JTU1JPUFBSVGVwcXN0dHd5e3t7fH1+fn5/fn19fX19f39/f3+Afn+AgICAgICBgICAgICAgICAgH9/flJISEhJS0lHSUpJSkpLREVIRUJANTc4OD06PUVDRXaFf4CBg4ODg4ODhYmKiomJioqKiouJiYqBSDY3NjQ2ODg3NDU3ODQ2NzY5OTc2Njc2NTo5Ojo6PDg5ODk3Nzc3OTo5ODg3ODU4OTtBPT4+QkE/QUtMT1FQUU9PT1JXa3JydHR1d3l7e3t8fX5/fn9+fX19fX5/f4B+fn9/f4CAgH9/gICAgICAgH+AgICAf39+VEhHSUlMTUtKS0tMSUg/QEFAPDo1Nzk4OTc7QjlIgoOAg4SFhISEhIaJioqIh4iIiIqKjIqJiYx6Pjo4ODs8PT45Ojs8ODk7OTo7Ojk5Ozo5PT09Pzs7Oz06Pjs5Ozs8Ozw8OTs8ODo6Ozo5OTk8Pzw9QUJESUpNS0pLTFdvcnN1dHZ4e3t7fHt9f39+f359fX19fn9/f35/f39/f3+Bf4CAgICAgICAf4CAgH+Af35URkVGSUxOTkxKSk1CPzo7PDs4OTk4OTo6Ojs/PFeGg4KDhYaFhYaIiYiHhoaGiImIiYuMi4mKioxsPDs+QkNFRUFBQUI+QEJAQD89Pj5APz4/QD9APT0/Qj9BQT9BPz1AQEA/P0E9Pjw7Ojs6OTs/PTs7PT1BQUNBQkNBWHFxdHR0dnl7e3x9e31/fn9/fn19fX5+f35+fn9+f4B/f4CAgIB/gIGAf39/gICAf39/flJFQ0FHSk5PTElHSzo4Ojs5Ojo8PTo7Oz09P0BCYIeDg4WGhYWEhomJiIiGhoaHiImKi4uKioqLiotePkRHSUtKSUZHR0RGSEdFQ0BAQ0VDQkBCQ0I/QERIRUNFREVFQUZFRkVGRkRAQj89QD49P0A+Pz8/Pj8+Pjo7PTxgcXJ0dHV3enp6fX19fn5+f39+fX19fX5/fn5+fn5/gH9/gICAgICAgICAf4CAgIB/f4B+UERAPUNIT01HRkJEOTc6Pjo8Oz4/Pz89QUBEREVjiIODhYWGhoaIiYmIh4aGhoeJioqLjI2MjIuKiohXSExNTUtOSklLSElKSklFQ0RGR0ZEQ0VGREJISUtIR0dGR0dFS0lLSUpLSkNGQ0NEQkFBQ0JEQ0NERENBPTs9QGhwc3R0d3d6eHt8fH19fn5/f359fX1+fn9+fn59fn+Af3+AgH9/gICAgICAgICAgH+AgH9PQT49P0RMS0BCQkE5ODw+Ozw7PkA/QT9CQ0hISmCGgoOFhYeHiImJiIiHhoaGiIiIiYqMjYyMi4uKjH9QTVBNS05LSkxJSUlISkZER0hISUVFSEZGRUxMTUlKR0dISUpPTU5MTE1LSEZHR0VFQ0ZGRkZERUhIRkNBP0BMbHB0dXZ4eXl5fHx8fX1+fn9+fn19fX1/f35+fn5+f39/f39/f3+AgICAgIB/gICAgICAf1FBPz4/RkdHPTxAQDg3PDs8PTo/QD5AQENGSkpQaIODhYSFhoeHiIiIiIiIh4eIiIiJioyNjIyMjIuKjXFNUU9NTExLTEpIR0VKSURKSEdLSkhKR0dHS0xOTExISElKTVBOUE5NT0tJR0lKSElESUhIRkZHR0lGQ0JBQ1VucXV2d3l7eHl6enx8fX5+f39+fn1+fX5+fn5/f36Af39/f3+Af4CAgICAgICAgICAf39/VERBQUJHSEI/OD9AODo8OD0+Oz1BPj9ARUlLTVZzg4SEhISFhoeIiIiIiIeGiIiIiImJjIyLjIyMi4uLi15RUVBNTk1LSkdGQ0dKR0xKR0tPTEtKSk1NTE9QTkhJS0xPUVFQUU9PSklKSkxKTEZHSEdGR0lGRUVCQEJCXG9yd3h5enl5eXp6e3t+fn5/fn59fX19fn9+fn9+f4CAgIB/f39/gICAgICAgICAgH9/f39VRUNFRUdHRUQ7P0E7PTw5QD4+QEJHR0FITE1RV3mFg4ODhISGiIiIiIiIh4eIiIiIiIqLi4uMjIyMi4uNfFdVUlJUUk9MS0pFRUZLT05PV1ZRUE9RU1JNU1RPTVNMUFNVV1JTUVBMS01NTUtOR0dKRkZISkRERUVCRENjcHV5eXp6ent6e3p7fH59fX9+fX19fXx9fn5/gH9/gICAf39/f3+BgYCAf39/gIB/f39/f1VGRkdHR0dIRj5AQj0/PT1CP0JDRlZORk9RUVVZfIaDhYWEhIeIiIiIiIiIiIiIiIiJiouKioyMjIyOi4uLZ1ZWa2FFUlFRUEo7OlFTUmB1XVVWVFZZWVJYWFJaZlBVV1pdUlRXUVBOUlBQUFFLS0tHSElIRUZJSElISWpydnl5enl6e3t8ent8fXx9gH59fX19fX1+f39/f3+AgIB/f39/gICAgIB/f3+AgH9/f35+VEhKSUlHR0ZFPz9BQUVCQ0dFREVMWFJNVFZWWFt8hoWHhoWGh4iIiIiIiIiIiIiIiIiIlJyMioqMfWGKi4uHbFtkVTpYWFhTUD5AVlVZXGRgVllicl5dVl1aVkVRWVpbWV9UWWdSVVZYVVRWVE9PTUpMSklJTE1LT01Tb3N2eHl4d3p6ent6e3x9fH5/fn1+fX19fn1/f39+f4CAgH9/f3+AgICAgH9/gH+Af39+fn5WSkpJSEdGRERCQT9ITUlNUEtJS1BUU1NYWlpcXHiFhIWFhYWGh4eHiIiIiIiIiIiIiImcnaCPiY5nO36MiYqLem5wWFpbWlJTUlZWVFpadYNZVX2QYVxYXV5XSVZdXVtbX1lIWVhZXF1ZWFlXUlFNUFFNTU9TUVFVUmFzc3Z3d3Z4eHh6e3t8fX19f39+fX59fX1+fn9/gH9/gIB/f3+Af4CAgICAf39/gIB/gHh5fVlOS0lJSUZCREBBOlBRUVdYUFBPUVNUVFhYWVpbboGCg4WEhYaHh4eHh4iIiIiIiIiIiJaanJeIioFuhomIh4OKfmZZWVxYU1ZUV1JRV1ZjloBRZXJYWldfaFBgZlpbWFxoYkdPWmlnXFtcXV1XU05TUFBRVlZWVllabnJ0d3Z2dHd4eHt7fH19fX5/fn59fn18fn9/f3+Af39/gH+AgH9/gICBgYB/gH1yfX9/b3R8XVNQT01LSkVDP0A7UFBaWltSU1FPUlJSVVNWVFdfdXiAhYSEhYaGhoaHh4eHiIiIh4eIh4ORjomJiIaFiIiGfYB7XFBWWFRSVFJRUUxPTUtmeVpdVFlVVl1aTFRaVVNUXlpYV1dXemtYWlxcXlNQUFBJTk9XVlhaWmRxc3Z2dHR2eHl5e3t8fH19fn99fX1+fX1+f39/gIB/f3+Afn56eHd2c3V7f3+AgHRrfn5rcnleW1ZVU1JPS0ZDREFNXoNsVlJTTk9RT1FVUlNSUlRjZHaAgoKDhISEhIWFhISDhoaGhoeIhn6JiYiHhoOHh4d5bXFWSUtOTktNS0hKREZIRUM+U2NVf1JRUU5LUlRSTU9ZUU1OUVNVVU1RU1JQTkxMSENJSFJUVVpcbXJ2dnVzc3d7ent7e317fX19fn19fX59fn9/f3+Af399fX5+f39/f4B+e3Zzd31+fmR1fWlxdF9kXV5bWVZRTElMSWFsknRQUVNOUVJRUltSU1JRUlVVYnN7fH+AgYKBgX99e3uAf4OChYaHgoaGhoGEgYaFhnVfXUtDPkNDQ0NCP0RQQkRAQz5CSEdWQEhOTUddaVBIRk9GREVGSEdIQkNIR0hKR0NCQURAT1BNUmRzdXZ1c3R1enx6e3t7fHx9fHt+fX19fn5/f3+AgIB/f3x8fX+Af39/f4CBgH12dHt/bWh8Z25xZmllZWJcWFNRUFVSc1dlW09PTkxRU1FVWVNVUVFUUk9WYGtscnZ7e3h5dHJuc3RzeXh+foOAg4OCgIKAgoGBa0xHPj46Oz5APz8/PmtRS2FFRkhJRUI/R0xOR01RVUlCRT8+PD08PT0/PT9BQ0I/Pjw9Qj5KTUZVbnV1dXN0dnh7fHp9fHx9fX19fH59fXx+fn9/f4B/f39/enl3eHd2dnh7foB+fXt4dnx1YXhnbHBqbGppZmBbUVFaXFleSUpQUU5LTFFSUVRVVVdRUVdWUFhbYl1hZ21tbG9raGBucmptbHF1e3p9enh6fHx4d3hkQkBAQT06QkNBQURCXF1Pe05PT05LTE1PT1FNS0xXTUhHQEI8OTc3NTk5PTs7Ozg5ODk/O0FIP1x0dXV2dXZ3eXx8fH18fH19fn58fX19fX9/f39/fn9/f314dXd6e3p3eXh1d3t8eXh1eXdjcWhpcG1ubW1oZl5PUF5cWklHUFJRT01QUU5RUlRWWFNSWVROWVpbV1ldXl5gZWBdXnF2a15gZ2t3b29sam9ubmxmYllHRkZIQkFGSUVFRkRNUlBhV1JYUVBTU1JVW09PUVZQTUpDRj46OjY0ODY5Nzk6MzY2Nzk2PEI9ZnR1dnd3eXl7fX18fHt8fX5+fnt9fn19f39/fn5+fn9/e3d1eX18enh8fHx8dHd2d3Z1d2tuaWhxbm9vb2prYFVXXlpXTUxUVFNRUVVPTFJTVFdYVFRYUUxYWVpWWFhWWFldV1dYaHNrXVZgdGthYV9dZGBfXllVUE1PTkxJR0pLSUhGQ1FQU1pXVFRNUVNZU1xlVU9TVFJOS0lIQz9BOTk4ODk3ODg0NzU3ODU4OEduc3V4eHp7e31+fX18e318fn5+en1+fH1/f359fn59f358dHR1e3hycW9vbnR4cXJzeHZ1cWZkZ3JucHBxbm1kXV9fWVdPUFhWVlNUVk9PVVZYWFlTVVRMS1RVVVVVV1BUVVdUVVJdbl5STllgW1ZZO0RVV1RbZkpMUFJST01NTk5OTEpGUFBVWVNUTkpPT1VTVFxWUlVTUk5NTElISEY/Pz06Nzg3NjU5OTY3NjY1V3FxdHd5ent8fX59fnx8fXx+fX15fX18fn5+fXx8fX1+fXxydnF4eHJ1dXFxbnBwb3B1dnRuamRkanBwcXJwbmZlZGNcXlJUWlZXVVRXVFJYWFlZWVJVT0pHT1BPT01SSk9QUFBOTk9UTE1JUFBTVFUyPFhNSUFRPWNgUVNRUE5QUVBOTk1QTlRSUFJMSUxLT1FQUVJTVFFST0xNS0xMSENCQT06OTg3NjtCNDU2NjtlcHJ2eHl7fHx9fnx9fH19fX18e3h8ent9fX58e3l9fH18e3B1b3d1cHV0b3N2cHFxcHR1dmNqZ2VXaHRycnFuaWlocFZWVFVYVVdVUldWVVpZWFdVUVNGRUJGR0dIRkpESEpIR0VITEhLSUdMTVBNRy9FX1I+M0A+am9hUlJRQEZUUVBRUFFOUU9QT0xKTExPUE5OUFFRTlFPSkxNTUtHRUVEQjs9PDw5PUc2Njc2RG5xdXd6fHt8fX18enx8fX5+fXt5dnh3eXl8fXp6dn17fHp6b3Fud3JwdnFtcHNwb3Bzc3N0ZmdgaFpXa3JzcmxtbWtuYmVQU1RSU1VPV1ZWWVlWUVFRT0A+Oz0/QEJBQ0BCRURBQEdIR0hGRkhKTUxER0NPUkM4RU5TXWdTUVNBR1VQT1FRUE1NTk1LTEtMTk9PUU1PT01JTUxJTEtMS0dGRkVEPEFBPjtARTs8ODlUcXN1eXt7e318fHt5fHp6fn58e3V0dXJ2dnp6eHpyfHt8eXltcW94cnF1bm5xcm9vb3Rzc3J1dGtnZ15lam1wa29xbWltY0xPTk1RU0xUVVRXV1VMTEtIPTk4Nzs/QT89PUFAQj0+RUhHREZGSUdLSkBGQUFARkhFSk9IUVJhXFFQUk5TT09PTExPTUtNTE1PTltWS01RT0hKSENJSkxMS0ZGRkQ/QkM+PEJGP0I/QWRxdHd7ent7fHt6end8d3l+fnt7cXN0cHJzd3R4eHN6e3l2d2xxb3ZxdHRsb3Fybm5vc3ZydHNycmtsZW5zaG1ubWxtbGprSUxISE9RSlFTUVRTT0tIQ0U9OTg3OT9CPzs/QUBAPkFESUVDSEdJR0lFQkI/PjxDQkFHSURNT2FlUU1PTldLTE1LTE1NTUxLTk5TZE1KTFJJSUlFQUhKTE1OS0dJRkJBQkA/RUZFSERLb3B3enl5e3t6fHp3c3h0eHx8eXpucXJtbm9ycnZyc3h8eHZ2bXBtc3B1dGxwcHJvb29ydnVyVlZucWdseYRqbXFybm5qaG9ISkNHTE1JTVBNUFBIS0U/Qj05OTk6P0I/PEFCQkFEREdLRkRJSUdHSENDP0I/P0BBPkNFQ0tOUVRMSklNVEZJSUpMSktMSUlMTU9QUlBLR0NMR0NDSkpMTU9OSUpJR0NDQ0RJSk1MSVpzbXh5eHp7e3l8dnJwdXJ0eXl2eGpxbmpsbG50dG1zdXtzdHhyb25xb3ZzbnBvcnBvcHN0eWpOYGdzanR8eWdvc3FqcWhlcUhLQ0ZISEdKS0lKTERHQj0+PTo6OjtBQj89QkJDQ0hGSkxKRUlJRkdHQ0M7QUBCPkBAQ0VDSU1QR0hLRkhLREhJS01ISkxISEpMS01dUklIRE5HQkVLS05NUE5LTUpLRkdHSk1OUU5MY25pd3Z3e3h7en1xbWxza3B0dHR1aHBtamlra3RwbnR0eXByeXRvcnFvd3NvcXB0cnBydXR5a05WbXVscXt2aW5vaWp0aGRvRktDRkVHREVFRkVHQ0NAPjw9Ojs6OkBEQD5CQ0VFSUZKSkxGSUlHRkZEQjtCQ0M+QENDQ0VHTE5IS05IREhFSUxOTUdJTEdFRklJTE5LSkhFT0lDR01MTk1QTU5OTUxJSElPUlFSTlJmZ2Zyb3N4dXt6fGxoam9la3Btc3FmbWxoaWtsdG1wdXR3cW94dG90c3J2c3BxcnRzcnR1dXZ2WFZ1dWtvdHJrb3ZsaG1lX3BHSUNFRkVCQ0JFQERCPj8+Ojs7PTo9P0NBP0FDRkdKR0lJTEhHR0dGRUNAPUVFQj5BRENDRUdISUdNUElGRkdLTk9LRkhKRkVERElJSEtJR0hQS0RKTUxQTk9OT09OSkpITVJVVFJPV2RhYW1ncHJvc3l6Z2VoaGNpbGdxbGZsbWdpa2xzbHB2dXRwbnZyb3Nyc3V0cXNzdXRzdXZ2dnl2dXR2bGt1dW1ydnFsbmxlck1HRUVHQ0JBQkQ9QkE+QT06Oj0/Oj4+QEI/QEJFR0pGSkdJR0ZGRkVEQkFBRkZDQkJCREVER0dIRkxRTElPSkpMS0lHSEVGRURDSUhIS0pIS1JNQ09PTlFQT09OT09LS0tQVVdWVVRYYF5daWFtaW5ocnNiZWZmZGloZm5pZm1taGtrbXJpcXZ1c3Ftdm5vcXJzd3Nyc3R1dnZ2dnd2d3Z2dHd1a3N1bnV0c3Fya2tzTUZGRUhCQkFERDxBQUBDPDg5PT46Pz0/Qj9AQERGSEVIRkZHRkZFRENFQ0RJRkNGRUJFR0VFRkdFSk1LSFFNSktISElFRklIRUNJSUpLTUtQU05EUVNRUVJOT01OUE1MTlNXVldYVlheW11kYGhiamlna19lZWdjZ2dna2dna21rbWxwcWd0dHVyc252b3FwcnR4cXNzdXZ1gpF5dnZ0eHV1d3hub3VvcnN1cXFpcHpNR0dHSEJCQkZFPEBDQkQ8Nzo9Pjs+OkBCPj8/Q0VGREZEREdFQ0VDREVGRkpFRUlHQ0dIRkhGRUNGSkpHTUpMS0lKTEZJSEtIRUtLTE1OT1JUT0lTVVRRVFBRTU5RTk1RV1pWWllWWl5aWGFgYGBfaGVjYGRlaGdqaWhqZmhubGxubXFwaXV1eHJycHVwcHBydXZwdXN1dnV7fn14dnR3dnZ2d3BsdXBtc3Vub3JzeU1ISEdJREFDSEU8QEVDRT04Oj4+PDw8QUI8Pz5BQkZDRUJCSERDREVGRkdHSUZHS0hDSEhHSUdGREhLSUdLSE1LSktMSExKTUtJTkxPTk9SVVZPS1VWVFFUUVJMT1FQT1RZWllcWllcX19eYGNeXGFja2JgZGdocoVoZ2lmam1ucG9uc3FqdHV4cnNzdHJucHF2cnF1cnV1c355jn11dXZ2dnZ4cml1cWtydGxxd3F1S0lLSEpFQkVHRTxAR0REQDk8PkA/Pj9DQjxAPkFBRkNFRENIREZER0ZISEZISElLSkVKSEhLSEZGTEhISEpHTExMTExJTUtNTk1PTFBQUVVWV09KVlZVU1NSUUxPUlJRVltbXV5bXF5gX2FgYmRdZGBlZmBlaGpjc3NmamhnbHBycW9zc25zd3dxdXZ0c21vcnVvcnNwdXJ2cnSBdnV1dXd2dXd0Z3Rya3Fya3J3b3ZJSkxJTEdCRURFPEBGRERCOz8/QUBAQERBQEI/QUNIQkVERkhFSUVGRUlIRklISkxISEpKSUxKRkpLSElKSkdLS01NSkpNTE5PTk9MT1BSVVhWTU5UVlVTUlFQTU5UU1JXW15eX11dYGBhYWFgYmRlYmNoYmRpamd2i2xraWdtb3NxcHFwcHJ5d3J1dXRzbW1zc21xcm90dXRzcHN2dHV1d3Z1dXRlcXNrcHFqcnZvd0pNTEtNR0RDQUQ8P0VFRUM9QUFDQkJDRkJDREFBRUdDSEdIR0ZKRkNHSkdHSkZJTEhJSk1LTUxHS0lITEtOUUtSUUxTTUtOTk9QUFBUT1dYWFtOU1FXXFpTVlBOVFVUVFhaX2JiX2RhX2BiX2BlYWFjaW5oYmloaG14dmxoaW1vc3JwcXJycnZ0c3Vzc3Nua3NxbXByb3R2cnJxdXZ1c3d5d3V0dWNtdGtvcGpxdHB3TE1MTExHREFARD4+REVGQ0BDQUVEREZDQ0VHQ0JJRUJISkpISUtGREtKR0hJSUlLR0pKT0tOTElMSEpNS1pmSmRcS2xSSE9OX25VbHNbcXBid2NSUGJ2dWh1Y2F2YFhucWJkdmluemZcbHRgbGpUX3d2aWpnaWZnbG1qbW9qbW5zcnBycnFyc3Jzc3J0cm5sdG9ucHFxdXVxcXN0dnZ1dXl3dXR0YGt0a3Bwa3FzcXlLTkpLSkZCP0BCPz1ERUZEQ0RCRUVER0JGRkdDREpERUpMTEpMTUdHTUpISkpIS0pJS0pOTE1NTExJTE1MW3NiZHBebGxVTU5mc11nZXFsbnRncGlfYVlubmJwcGJrampnb3F0ZXRub1xwdWdwTUpyeXZrYmBrZWVteG1rdmxucHNycHJxcHFycXJycnRybW1zbm5vcHJ1dHFzc3R1dXV0d3h2dXRibXVrcHBscnJxektMSUlHRUQ/QkI/PUJGR0JGQ0VERUVEQ0hIR0RFS0dHTE1NSk1MRkpOSElLSklMSkpKS01NTk1NTUtOTU1bcm9vbnBwbGtNUFFsV05pYnRycGFtb3ZcWWxRXG1tWnFta29teHh0c2lwXGBzbHFqVXV5eHBjXmtmYmdwcGppb3Bwc3NwcXBxcXJycXFycnRsbXJtbW5vcnV0cXRydHV1dHV1enZ1dGVudWtwb2xzcnJ5SktHSEVFRUJCQj0/P0ZHQkdESUVFREJGSUhIRUdLSkdNTU5LTU5HTE5JTEtJSk1JS0pKS09QTk5NTE5NTFxoZHVdbHFXbE5PUW1VWmtea2x2YWxkdFRlY05tWWxcdHBraWx4and1aHBdX3NraFdiY3d8b2NgZ2hhZGl0eWtubnFzc3BxcHFwcnFwcHBydWttcW1tbW9xc3Rxc3J0dnZzd3Z6dnV0aG91bHNvbXNydHdJTUdJREVFQ0FCPEJAQkZER0ZMSEVDQ0hLSEhGSkxMRk1LTFJSTEdNTUhOSklITkhKSklITk9OTkxKTk1KWnNwcG9xcW1sT1FSbllxa2dvb3Fxb210Xm5YYXRfbm9wb3Fyb251c3R0altddGN3eHJqbnpoYWFjZ2Jiam10dXBzdXZzcXBwcW9ydHt/fn13bGtxbmxtbnByc3F0dHN1dXR4eHl5dHVrb3VtdG9uc3N2dEhLSElCRUVFQUA+Q0NCR0NISU1JRkNGSkxJR0ZKTUxGT0pLV1JLR0tKSk5JSEpMSUtKSUhKTE1NTElLS0tTa2JaaV5famNyclpfWWpvX2VlVWtfY1thYlFgbGhdalxuaWlkW3BmZHBdWlxrW21xY3BzbGRnY2RnYGBrbXBwb3R5cnVxb3BxbnmFiIeHhoWAdnNua21tb25xcnR0cnR1dXZ5eHhzdW5xdW53cXJ1dHdzSEhGSURFREZBQEFFRERHQkhKTEhGREdLTElFRkpPTElPSUxbUUpGSEhLTUlISklLS0lISkdLS0tLR0hKSkxMTEtJS0xOVFtcVFBUTVBPTk9PVlFPT1FPT1FKSk9QUWRxaVRZV1tbXFVZW11YXVxcY2ZhYWZiY2VfX2ZrbWhtdHlydHJvcHB0hoeGhoaFhYaHg3pwbW1sa3FzdHRydHZ0dXl5eHV2cXJ1b3ZydHN1dXNHQ0VHRkZBRUM/Q0dERUdDSUtMSEZER0tMSERHSVBLTE9LTFdNSUVFSElKSElLSExKSEZISEpHR0lFRkxISUtOTElPXFdeT1xbYF5PWFlTXFxiXk1ZWk1YYVJLWWFaU2BkXWJYW2RkVlZYXFlaWFxWWVxeY19kYGFfZWhrZ210dHFxdHBxcoGGhoaFhoWFhYaGhoR9cmtpb3Jzc3N0eHl5eHl4d3h0cXhyeHNxcnVydE9CQ0RMTUJDREJESUVHR0ZLSktIRUVKSkpHRUhIUEpMTUpNU0lIRUFIRkpJS0tJTEpIRkVKSEVGR0VFSkdDSk1KS1RfWWBYYGFbYFVYWVReXlpfUllcUF5cWU5fXF5TW15jX1pdYGNgWV9iW2BeW1RYWFpfXmRiYmFjZWlla3Jwb3Bwbm93hoaFhYaCe4CFhYaGhYaFf3VxcHJyc3Z5eXp5eXh4eHZyeXZ4cnF4dnR2YVNKSk1JRUNCQ0ZHRUdHSUpKSUlERktLS0VGSElOSk5MSExOR0hGPkdHTElLS0pLS0lHRUlFRERFQUZKREBKS0lPW2NZXl5hX1JUU1dfYFxdWV5RWVxNVl9XS1FZW1FbX2FhXV5jYWBiYmJjY2VaUllWVVxbXmNgX19jZWJob21tbGxsbHWFf4SDeXV8hIWFhYaGhYWGhoN9d3JydHd5eXl5f359eXV5dnZybnp3dnhYUUpGQ0dFQkVHSEZHSElGR0pHSEZIS0lMRENLSk5NTExISkpISkc/R0ZOSktLTUtLS0lHSEREQERBSElBP0lKR09dYVpbZF1fVFFSWF1cXFxfWktXXExSXFlJTV5QUF1fYWNjY2NiXGRjYmRjZlhRVVRTXFhbYV9eX2FhX2Rsa21qamxudn51gXp8hIWFhYWFhYaGhYaFhoaGgnpyc3V1e4WHh4eGhYSBfnhwend2eFxSTUJASUZDRktJRkZHSEdHSkZGRklMSk5FQ0tKTE5KTElLSkhJR0JISFFNS0tPTUtLSUhHRUQ/RUJISEFBR0ZEVF1ZXlhfWV9bXVVYWFBdXVFLSldeWF5bXVZaYFJRX19iYmBgYmJgY2JiZGRiWE9RUVJbU1xeXV5eX19fZGhnbGpubnB7e3x+e4CCg4SFhYWFhYWEhIWDhISHh4FzcneFh4eHh4eHh4eHh4WDgHx4XFNLQkFHRkRHTVJIQ1JLRkhISEVGS0pNUEVHSUlLTkxMSUxLSUlHREhLUU9NTFBMTUtLSElDRUFFQ0hHQkFGRUJWVUVcVF5TVl9YTlRVTlpbTUpLVWBhW19YX15hXU9ZYlxgYF9iY2JdYmJXX19UUE9QUVhSXVxcXV5fYGFmZmVsZm9vd3x7gHt9f4CEhISEhIWFhYODhYKDgoWFhnpvgYaGhoeHiIeGhoaFhYSFg35JTkZERkZHRElSY1BEV19JR0dIREZNSlBQRkpJSktOTEtLTEtKSkdFSk1RUU5PUE1OTE5IS0FEQUNERkRDQURFQUxIQ0xMUE9PTEZNRkdJSkhHTExNT1FJTE9QUFNQTFFTUlVaWVdZWFhkVk9TVFBQT05QVVRcWVlbXl5hYWVmY2hja21xc3N6eX97en+EhISEhISEhIKEgH57gYOBfXuFhIaGh4eHhYWFhISEgoGAfUtJRUVHRkdES01eTEdIWU1HSEpIR05MUVFJTEpLS05OVU5PS0tMR0dLUFNTTlBPTk9OT0hLRWBFRF9MRGZjRE1bSF5cc21PTVZtWUxDUGBVbFdnSl1YVl5ETFFVTE1UVlFSVFhXVFhVVFxUUGZaaGhkWVRrVFdWVVtcXGBgYWJiYmBnaWdubGhyenx9foGEhISEg4ODgX19enJ7gXp7f4KAg4SEhYWBhIWBg4N/fnp7TElFRkZIRUVLT1RJS0dgVEdKT0pJT01SUUtNS0xPUlVST09KTE5HSE1RW1lPUFBOT1BPSUpQf1FJfFlZcnNYUG1IcW5vYVZQcXFzUENrc21xc3BTb19bblhdVlxYVWtoVV1WY1pgWVpfVlVXf2p0dXVfYXZfWGJcXGZbX2FhYWJeYGJnbXBsYHB3dHiBgYKDhIJ/fX6Adnh6bHZ+dHh+gHx+gIGChHyAg3p/gX9+d3dOSUVITU1CRExMR0lMRlJWTEtPSUtSWFdRTk9PTVFUTk9RUEtMT0dNUFNbWlRRUk9QUFBKSFp4XVR4ZGhZUlRRdmd0bHBibmZrUXJPTXdtanJwc3JxcnBvcIBdZXp1eHFxenF+c31rdX1iUmh8ZXNzb3NzfH1vfnlvf3JgYGBiYVphYGdrbmtibGZnbXd+gYCDfnt4d4B0dnppcn5udHx+d3h7foCDeHyBdXx/fHxzc05LRmBdR0FFTU1IS0tISlBPTU1KTlZeWVVMUVNOWVlMU1NSTkxQSVFSVFlXV1FUUFBQUUtHZnhsY3hxbVpKTFV5cHVtdWJudlBkZUpmdnFtd2+AamZ4eGlXclFoem1panp6fWx4en9wZ29YdnZqdnVwgGFzaH1pbHh8b19fX2NiW15iZGdpamRnYmNkbGxwcHN0c3NzeXFyeGJsdWdyeXtzc3V5foFzdnpufH15eHJuTkpTdE5DQkVQUElLS0pMUE9PT01QWmBaWEtUV1BhXlJWUVlTTVBJU1RVWFdXUFVQT05SSktyb3V1cXVxZGhhVm5McXBeRmh5V3ZUS2h4fXhgeXtzbmFebW9kUmdydW5teXB3bHZzdHFsbVxzfnprbXl8bHVtfGtwdnV4Xl9fYl5dX2VkaWdoZWVeYmJpaWlqa25va3FubWpwYWNmZG93eG9tcHN5f25xcGp7enRyb21LS1tWSEdFR1JQSkxNS0xRUVBQUFFXXFlVTlZZVWZYUlJZXlRNTklUVFZXWVdPU05OTlFIUm1IaXdLYGR2dlVXbE9ubHtzYWpnf3ZVS1draH1sbWx4YFtwenteYHpzY3JveHFoZHxpcntdVEtsX3Z1a2l1e3ttfnhrfHBdXl5iW15iZGVnZWVlYlpjY2lra3JzcndnbWloZGdgYWxhZ3Nya2hsbXJ8a21oa3t0bW1rbU9HSktISkhIUlFMTlBNTFRTUk9TU1dSVlRQV1pWVlRUVGFgUU9OS1RTU1FWVk9OTE1PUEpIUU5QVUxLS1NUU1JUUFZVUVFOUVFYWFFOUFVUWFhYW1tVU1NXW1dYV1pQU1VXV1hRXVhWXVVTT1hSV1dXWFpgW2dyXltcW11eX2NaX2NkZWZkY2NiWWNjZmZmbW5tdWZmZ2NgZl9dZ2BkbGhmZ2tocHpoZ2drdWpoZ2lsUUlLS0xNS0pUUk1RUVBMVlVUUFRVWFVZVVJaXVZVVFdVWVhQT0xOV1RRTlVTTlBNTFFQS0pRUktRTUtLT1JUUlFRU1NJSE1OT1FSUVFRVFZSWFdcV1NTUFFVVVZUWlFOU1JXVVRZVlRZVVNSVVNUVVhZV15aX2FdXFtaXFxgY1xdYmNkZ2VkZGFZYGFjYWJpaGluY2FkXl9jXVpkXGJtYV5mZmdtc2RpaGtrZWRjZmhQSktLTk9MTVRRT1RRUU1YV1VUVVdXV1pWVFxgVldWWVVYVFFQS09YU1BOVVBNUk5LU1BNT1VUTlFOTU5RU1BUUVNUVU5LTU9RVFRSUlFWV1VZWltZU1VSVFdXV1lbU09TVVdVVFlVV1lUUlJXVVVXXFlaYF1WWV9dXl1cXWFhXltiYmNoZmVkYlhgYGJdYGhlZmRhXl9dXV5aWl9aX2dgXl1dYmhrYWdmaGZkYGJjYVBLTUxQUUxPVFBQU1FPUVpZWFdYWlpYWVZdamRWWFlaV1ZUVE9LT1ZUUE9UUFBRTk1RUVBSWFRSUU9NT1NVTldSVFVVT05OUVNVVVRUUlRYVlpdXFpWVlFSV1hWW1tWUFNWVVVWWFRXV1RSUlhWVVpfWl5gXlZeXV5gXFxgYF9fWmJiZGhoZWRiWWJgYl5fZmRjYGJdXFxcXFlaW1hbYVteXVxfYl9fYmRkYmRfX2BcUE1OTlJRTVJTUFNUUU9VXFpaV1tbXFlaW2RxbWhkX1tZVlZYUk1NVlNNTlJPUVJPTFBTUlVaVVRQUExQV1ZRV1NTU1hNT1BSVFhVVVVTVVlYW15dXFtWUk9VVlZbW1dRU1dVVlhVU1haVFNRWVdWXF5bX19gVWFcYGFeYGJfXGBdY2FjZ2lkZWBaY2BhX19lZV9gY1taXFtcWlpZWVdcWVxbYF5fW15eYWBfYlxZYFpRTk9OVlFQVVNQVVRTUFdcXFxYXlxfV1xeanF3eYBjXFtWVlhSTk9XU05RUVBSVFJMUVRTWVpXVU9STlNYVlRTVFJSWk9RU1NWW1ZWV1RWWlhdXlxcXlZTTlRWVlxcVlFUVlZYWVJTWVxUUlJcWFpdXl1hYWBXYltjYl5hY19cYmFiX2RnaWRmXltkYGFgYWNlX2JfWVpeW1xbWVhZV1daWlphXF1bXVxcWl1gV1tbWlBPT09ZUFVVU1JXUlRQWl1eXVtgXGBVXF1panJ9c2xoXFVZV1FPUltTUlFUUlRVVEtSVlVbWVpTT1NSVlZVU09WUlNaUlRVVFhcV1hYU1hcWF5dWVteVFVOVldXXltYUVRVWFhYVFZYW1RTVl1ZXV1hXmNjXllgW2ViX2RkXl5jY2FdZWZpZGZdXmRhYGFiY2RfYl5YWl9bXFtYWFhYV1taXGBdW1xcW1haW15WXlldUE9PUlpQWlVVV1ZUVFReXmBeXmJcYFVdXmJreXRsfWxaVVpVUVFTXFRUVFVUVllXTFJaVl1bXFJPVVNYVlZTUFhSU1dTV1ZWW11YW1lVWl5XX15ZXFpSV1JZWFlfWllTVFZaWVpWV1lcVlRaXVxeYGFgZWRdXl1dZWFiZmReX2RjYFxnZGhlZGJfZGFfYWBiYl9gXldYXlpcXFpZWldWXVpdXltaW1xbV1lcXVZYV11TT1BXWVFdVVZZV1dVWF9gYWFgY11gVV1eYmVldYF6aFhZWlRWU1ZcWFdXVlZXXVhQVVxZXl1dVFNYUlhWU1JUWFJTVlRYWFhdXlhdW1VeX1hfX1hcVlJZVVlaWmFZXFVXV1paWlhZWlpYVl1eX15jYmJlZV1iXGBmYmVmZF9gZGJiW2ZjaGVjZmFmX19hYWFhYF9eVlVdWltcW1lcWVldW1tbWFhZW1laWl1fXVRZXVVOVFpWVFxUVldZV1ZcYGFiY2FkX19WW2BkYV96dW9oWlxaVlhVV1taWVtaWFlgV1BVXltgYVxUVVhQVVZVU1ZWUlNVV1paXF9eWl9cVl9fWl1eWV5WU1lYWVpdYlpeVldaW1tbWltZW1lZXl9gYGRjZGVlYmRaYmZjZ2ZlXmFjYGNeY2NpZGRnX2deYmJjYWFgXl9YVFpaWltbWFtYWFxbWltXV1pYV1xbXGBdVl1dU1BWWldWWlVYVVhXWF1fYmFkYWRhXllZYWRiYGxmaF5cXVtXWFhZXFxcX1tZW2JWVFdeXWFjXFNWWFBWVlZWVlZTVlRYXFxfYGBdYV1XYF5bXlxbXlhWWFhbW19gXF9YWF1cXV1eXFpcWFtfYV5gZGNkZmZmYlljZWVoZ2ReY2FgZWNdZmlkZWhfZ15jYmNhYWBfX1tYWVtZWlpYWVhXW1taW1dYWlRZXVxaYFxVXmJNUldZVldaWVtcWVdZXmBiYWVhZGFdXlliY2JfYWBhX1xcXVhXW1tdXV9fXFpdY1hZWF1gY2RfUlhZUFhXWFhYV1ZXVl1dXmBhYV9iXllhXV1eWV1eWVhWV1tcYF9dX1lZXl1eXmFdW1pZXF9iX2JkZGVmZ2diWmRmZ2lnY19jXmFmZFpoaWNmaWNlXmJiY2FgYF9dXVpXW1lZWFhaWVdaW1pZV1hWVVtdXV1gYGJieEtXV1xZV11cXF1aV1xdX2BiZGJiYV1gWGNkYmBjYWNeXFxcWFdbXV9dYF9dW2BkXFxYWmNlY2FSXFlPWFdZW1pZV1paYF1gYmJgYWNfXGJdX11bX15ZWVVYXV1fYF9fW1peXmBiY1xbV1tdYGJiY2VkZ2ZlZ2RcZWZoaWZjYWJcY2dgXGlpYmhpZmVgYmFjYV9gX11dXFlcWVhXWFlZV1xbWldXWFBYWl1hY2Zmcmt/SllXXVpaX11cXlxZXVxeX2FjYmFhXWJbYmRhX2NiYl1cW1pXWGpxYFxgX11cYWNfXllZY2VkYVRfWlFZV1xdXFtaW1tjYGNiY2BiZGFgY15gXF5fX1pYVltfXVxhYV9dW2BhYmViX11TXF9gY2RkZmVnZmVmZV5lZmhoZ2RkYFtmZ15haGhiaGhmY2BiYGNiX19fXV1bWltZWFhYVlpWXFpaVlZVTFhXXGdpa2h1eIF2dnZ2dnZ2dnZ2dnd3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d4eHh4eXl5enp6enp6e3p6ent7e3t7e3t7e3t7e3t7e3x7e3t7e3t7e3t7fHx8fHx8fHx8fHx8fHt7e3t8fHx8fHx8fHx8e3t7fHx8fHx7e3t7e3t7fYmIhoqHhYKBgoOCg4OCgoKCgoKCgoKCgoGAgYCBgICAgYCBgYGAfnx8fHx8fHx8fHx8fHx8fHZ2dnZ2dnZ2dnZ3dnd3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3h4eHh5eXl6enp6enp6ent7e3t7e3t7e3t7e3t7e3t7e3t7e3t6e3t7e3t7fHx8fHx8fHx8fHx7e3t7e3t7e3t7e3x7e3t7e3t7fHx8fHt7e3t7e3t8iYmHiYaFgoGCgoGCgoKCgYKCgoKCgoKBgYGAgICAgICAgIGBgYB9fHx8e3x8fHx8fHx8fHx8dnZ2dnZ2dnZ2dnZ3dnd3d3d3d3d3d3d3d3d3d3d3d3d3d3d4eHh4eHh5eXl5eXl5eXl5eXt7e3t7e3t7e3t7enp6e3x8fHx7fHt6enp6ent7fHx8fHx8fHx8fHx7e3t7e3t7fHx8e3t7e3t7e3t7fHx8fHx7fHt7e3uHiYiJhYSDgYKCgoODgoKCgoKCgoKCgYGBgICAgICAgICAgYKBgH58fHx8fHx8fHx8fHx8fHx2dnZ2dnZ2d3d2d3d3d3d3d3d3d3d3d3h4eHh4eHh4eHh4eHh4eHh4eHl5eXl5eXl5eXl5e3t7e3t7e3t7e3t7enp7fX19fXx9fHp6enp6e3t8fHx8fHx8fHx8fHx8fHx8e3x8fHx8e3t7e3t7e3x8fHx8fHt7e3t7e4aJiYiFhYOBgoKCg4OCgoKCgoKCgoKBgYGAgICAgICAgIGBgYCAfnx8fHx8fHx8fHx9fX18fHVwb29vb3Bwen59fX19fYSMi4uLi454KSkqKiopKz0/Pj4+Pj5tgH5+f397pdfT09PT1r2GiYmJiYiNsbW0tLS0uFEmKysrKiKL29LS0tLWun1+f39/f359fHx8fHx8fHx8fHx8fHx8fHx7fHx8fHx8fHx8fHt7e3t7hIuHh4aHgoGDg4GCgoKCgoKCgoKCgoGBgYCAgICAgICAgYCBgIB+fHx8fHx8fHx9fXx8fH19dXBub29vb296gH9/f39+hpCPj4+Pk3kZGhoaGhocMTMzMzMzMmqCf4CAgHut6eTk5OToyomMjIyMi5G7wL/AwL/ESRQbGxsbEI7v5eXl5enHfX5/f39/f319fXx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx7e3uCjYeIh4eDgoSDgYKCgoKCgoOCgoKCgYGBgICAgICAgICAgICAgH58fHx8fHx8fXx8fH19fX12dXV1dXV1dXZ3d3d3d3d4eXl5eXl6eG9wcHBwcHBycnJycnJyd3p5eXp6en6Dg4ODg4SBfHx8fHx8fYCBgYGBgIF3c3Nzc3NzfYWEhISEhYJ8fX19fX19fX19fX18fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx7e4CMhomHh4SDhIKCgoKCgYKCg4KCgoGBgYGBgYCAf4CAgICAgICAfnx8fHx8fHx8fX19fX19fXZ2dnZ2dnl2dnZ6e3h7eHd2eHt4enl5fXp5eXh4eHh5eXl5enp5eXl5enp6eXh4eXl5eXl7e3t7e3t7enp6enp5enx9fX19fX17enp6enp6e3x8fHx9fX19fX19fX18fH19fX18fHx8fHx8fHx8fHx8fHx8fHx8fHx8f4uHi4qIhIODgoKCg4KBgoKDgoKCgYGBgYGAgIGAf4CAgH+AgYF+fX18fHx8fHx9fX19fX19d3d3dnZ3fXh3d316eH14d3d5fHp7fXp8e3h3d3d3eHh4eHh5eXl5eXp6ent7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7fHx8fHx8fHx8fHx8fHx9fX19fX19fX19fX19fX19fX19fHx8fHx8fHx7e3x8fHx8fHx8fHx+iomMjImFg4SEgoKDgoGCgoKCgoKBgYGBgYCAgICAgICAf4CAgH19fXx8fH19fX19fX19fX13d3d3d3p9eHt4fHx3e3h3d3d8e3p9eXx6eHh4eHh4eHh4eHh5eXl6enp6e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3x8fHx8fHx8fHx8fHx8fHx8fX19fXx9fX19fX19fX19fX19fHx8fHx8fHt7fHx8fHx8fHx8fH2Kio2NioWDg4OCgoKCgYGCgoKBgoGBgYKBgIGBgICAgIB/gIGAfXx9fX18fX19fX19fX19fXd3d3d3fX55d3d4e3p8eXd3d3p7eXx6e3p3eHh4eHh4eHh4eXl5enp6ent7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3x8fHt8fHx8fHx8fHx8fHx8fH19fX18fH18fH18fHx8fX19fX18fHx8fHx8fHx8fHx8fHx8fHx8foqJjo2JhISEg4KDgoKBgYKBgoKCgYGBgoGAgYKAgICAgH+BgIB8fH19fX18fX19fX19fn5+d3d3d3d5fHl7eHx9eXt5enp6fXx8fXt9e3h4eHh4eHh4eXl5eXp6enp7e3t7e3t7e3t7e3t7e3t7e3t7e3x8fHt7fHx7fHx8fHx8fHx8fXx8fX19fX19fXx8fHx8fHx8fXx9fX19fXx8fHx8fHx8fHx8fHx8fHx8fHx/iIeNioeFhoaDg4ODgoGBgoGCgoGBgYGCgYCAgoF/gICAf4CAgHx8fX19fX19fX19fX5+fn53d3d3d3Z4eHl3eXp4enh5eXl7eHt6eXt4eHh5eXh4eHh5eXl5enp7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t8fHx8fHx8fHx9fX19fX19fX19fX19fX18fH18fH19fX19fH19fX19fHx8fHx8fHx8fHx8fX+HiIyIhoeHhIKDhISCgYKBgYKCgoGBgYKBgIGBgYGAgIB/gIGAfHx9fX19fX19fX1+fn5+fnd3d3d3d3d3d3d3eHh4eHh4eHh4eHl5eHl5eXl5eXl5eXl6enp6ent7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7fHx8fHx8fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fHx8fHx8fX19fHx8gIeIi4eHiYaDg4SDg4KBgYGCgoGBgYKCgYGBgIGBgYCAgICBgX97fH19fX19fX19fn5+fn5+d3d3d3d3d3d4eHd4dnl5eHh4eHh5eXl5eXl5eXl5eXl5enp6enp6e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7fHx7fHx8fHx8fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fHx8fH19fXx9fXyBhoqKiYmIhIOFhISCgoGBgYGCgYGCgoGBgYCAgYGAgIGAgIGBf3x8fX19fX1+fn5+fn5+f394eHd4eHh4eHZxZGpeam15eXl4eHl5eXl5eXl5enp6enp6enp6enp7e3t8e3x8fHt7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3x8fHx9fHx8fH19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fIGFiYqJioeEhYWEg4KCgYGBgoKBgYKBgYGBgYCBgYCAgYCBgIF+fH1+fn5+fn5+fn5+fn9/f3h4eHh4eHh5bWRiZV9fXm95eXl5eXl5eXl5eXp6enp6enp6enp6e3t7e3t7fHx8fHx8fHt7e3t7e3t7e3t7e3t7e3t7e3t7e3t7fHx8fHx9fHx8fH19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18goWKiomJhISGhYSDg4KBgYKCgoGBgoGBgYKBgIGBgICAgICBgH58fX5+fn5+fn5+fn9/f39/eHh4eHh4eW5kZWdlZGJeZnh5eXl5enp6enp6enp6enp6enp6e3t7e3t7e3x8fHx8fHt8fHt7e3t7e3t7e3t7e3t7e3t7e3t7fHx8fHx8fHx8fHx9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXyChouJiIqEhYaEg4OEgoGBgYGCgYKCgYGBgYCAgYGBgIB/gIGBf3x8fn5+fn5+fn9/f39/f394eHh4eHl3Z2VkZWZkZWFfaXl6enp6enp6enp6enp6ent7e3t7e3t7e3t7e3t8fHx7e3t7e3t7e3t7e3t7e3t7e3t7e3t7fHt8fHx8fHx8fHx9fX19fX19fX19fX19fXx9fX19fX19fX19fX19fX19fX19fX19fX19fIKGi4eJh4SEhoSDg4WBgYGBgYKCgYGBgYKBgICAgYGAgYCAgYF+fHx/f35/f39/f39/f39/gHl5eXl5eWtlYWJlZWFlZV5ieHdze3p6enp6enp6enp6e3t7e3t7e3t7e3t7fHt7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t8fHx8fHx8fH18fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19g4aLhoiFhYaEgoOEhIKBgYGBgoKBgYKBgYGAgYGBgYGAgIGBgn98fH9/f39/f39/f3+AgICAeXl5eXl0Y2NlZGNmY2doZGZsZF5ze3p6enp6enp6enp6ent7e3t7e3t8fHx7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3x8fHx8fHx8fH19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX1+fn6DhouGhoaGhYODg4SDgYGBgYGCgoGBgYKBgYCAgYGBgYCAgYGBfnx8f39/f39/gICAgICAgIB5eXl6d2RhY2diYmRdW2VfYV1eYGFoeHp6enp6enp6enp6e3t7e3t7fHx8e3x7e3t7e3t7e3t7e3t7e3t7e3t7e3t8fHx8fHx8fHx8fH19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX1+fn5+fn5+foSFi4eGhoaGhIODg4KBgYGBgoKCgYKBgoGAgIGBgYGAgYGBgYF+fX1/gH+AgICAgICAgICAgHl5eW9vYmJiZF5jZ19dYWFgXF9kYlttfHp6enp6enp6enp7e3t7fHx8e3t7e3t7e3t7e3t7e3t7e3t7fHx7e3x7fHx8fHx8fHx8fH19fH19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX5+fn5+fn5+fn5/hIiLhoSHhoaEhIODgoGBgYGCgYGBgYKCgYCAgYGBgYGBgYGBgX5+fYCAgICAgICAgICAgICBeXpwXWJlZGJkXmZnZ2BZYmJhY2VfXF1ze3t6enp7e3t7e3t8fHx8fHx8fHt7e3t7e3t7e3t7e3t7fHx8fHx8e3x8fHx8fHx8fHx8fHx9fX19fX19fX19fX19fX19fX19fX19fX19fX19fn19fn5+fn5+fn5+fn5+foCFjIqEhYaGhYODg4SCgYGBgYKBgYGBgoKCgYCBgYGCgICAgIGBf35+gICAgICAgICAgIGBgYF5emxiZGdjYmdmYWBgZGFiZWRjZGNeXGJ1fHt7e3t7e3t7e3x8fHx7e3x8fHx7e3t7e3t7e3t7e3x8fHx8fHx8fHx8fHx8fHx8fHx8fH19fX19fX19fX19fX19fX19fX19fX19fX1+fn5+fn5+fn5+fn5+fn5+fn9/gYeMiYWGhoeFg4SDgoGBgYGBgYKBgoKCg4KBgIGBgYKBgYGCgoF/f36AgICAgICAgIGBgYGBgXp7dGdnZmZkZGZmYF5fYWNlaGRlXmJkYHR8e3t7e3t7fHx8fHx8fHx8fHt7fHt8fHt7e3t7fHx8fHx8fHx8fHx8fHx8fHx8fHx8fH19fH19fX19fX19fX19fX19fX19fX19fX19fX5+fn5+fn5+fn5+fn9/f39/f3+CiYqIhoaIhoWDhIOCgYGBgYGBgoGBgoKCgoGAgYGBgoKBgYKCgX9/f4GBgYGAgYGBgYGBgYGBenptaGNjZ2ZnZWdmZmdiZWRlYmdbYmVgdnx8e3t8fHx8fHx8fHx8e3t8fHx8e3x8fHt7fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx9fXx9fX19fX19fX19fX19fX19fX19fX19fn5+fn5+fn5+fn5+f39/f39/f39/f4SJioiGiYeFhYSEg4KBgYGBgYGCgYKCgYGBgYGBgYKBgoGBgICBgH9/gYGBgYGBgYGBgYGBgYF7emlpZGNqZmFgZmVjY2NnaWRjYmBiZGJ0fXx8fHx8fHt8fHx8fHx8e3x8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fH19fX19fX19fX19fn5+fn5+fn5+fn5+fn5+fn5/f39+fn9/f39/f39/f3+AhIqMiIeJhoSFhYOCgYGBgYGBgYKBgoGBgYGBgYGBgoKBgYGBgYGAgH+BgYGBgYGBgYGBgYGBgXZzZWRnY2RmZWJlZmdkZmhmZWNgYGNkYHF9fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fXx8fHx8fHx9fX19fX19fX19fX19fn5+fn5+fn5+fn5+fn5/fn5+f35+f39/f39/f3+AgICFioyJiIqJhoaDgoKCgYGBgYGBgoGBgoGBgYGBgIGBgYGBgYGCgX+Af35/foCCgoKCgoKCgoKCc3NnZWRkZWlqaGZnZ2NhZmZlZmdmZWVjdX18fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fX19fX19fH19fX19fX1+fn5+fn5+fn5+fn5+fn5+fn5+f39/f39/f39/f39/gICAgICAgIWLioqJioeHhoSCgoGBgYGBgYKCgYKBgYGBgIGBgoKBgYGBgYGAf4B+dHRzdX1/goCAfn5/gYB0cmdkZWNmaWppZWNlY2BmZGRnZ2JiZWFwfXx8fHx8fHx8fHx8fHx8fHx9fX18fHx8fHx8fHx8fHx8fHx9fX19fX19fX19fX19fX19fX19fX1+fn5+fn5+fn5+fn5+fn9/f39/f39/f39/f39/f39/f4CAgICAgIB/houLiouLh4eHhIOCgYGBgYGBgYKBgoKBgYGBgYKCgYCBgYGBgoCAgH5zc3NzdHV4dXV0dHV2dXVwZmNmZWhoaWdoZ2VmZWJfZGVmY2BiZ3d8fHx8fX19fX18fHx8fH19fX19fX19fXx9fXx8fX19fX19fX19fX19fX19fX19fX19fX19fn5+fn5+fn5+fn5+fn5+fn5+f39/f39/f39/f39/gIB/f3+AgICAgICAgICHjIyIi4qHh4eEhIKBgYGBgYGBgoGCgoGBgICBgoGBgYKBgoKCgYCAfnNzc3Nzc3NzdHR0dHNzdW9jY2FnZWhoZ2pmZGVnZmhmY2JlYl5ieX18e3t8fX19fX18fHx9fX19fX19e3x9fX19fX19fX19fX19fX19fX19fX5+fn5+fn5+fn5+fn5+fn9/fn5+fn5+fn5/f39/f4CAgH9/gICBgICAgICAgYCAf4CAgYGAgIeLi4iNiYiJhoSFgYGBgYGBgYKCgYKCgYGBgIGCgoGBgYKBgoKBgIB+dHNzc3Nzc3Nzc3Nzc3N1cmdlZWRlamhoZ2ZpaGdjZWViZGNoZGd7eHVzc3R2dnl4dnR0dHZ3d3d2dHR0dXV4d3h4d3d6e3x9fXx9fn5+fn5+fn5+fn5+fn5+fn5+fn5/f39/f39/f35/f39/gH9+fHt7fX58eXl2dnZ5fHx6end2d3l7fXt4hIyMioyHh4iEhYSBgYGBgYGBgoGBgoGBgYGAgYKCgYGBgoGBgoGAgH51c3Nzc3Nzc3Nzc3Nzc3VzaGVnaGVrbGhqZ2lqZ2dnZmRkYmVkbnV0dHNzdHNzc3Nzc3Nzc3Nzc3NzdHNzc3Nzc3Nzc3N0dHV1c3V3eHl7fn59fn98f39/f39/f39/f314fH5+fXx4dXZ3eXd4dnRzc3N0dXRzc3Nzc3NzdHNzc3R0c3R0dHODjI2KiYeIhoOGg4GBgYGBgYGBgYGCgYGAgYGDgoKBgYCBgYGBgICAf3VzdHRzc3Nzc3Nyc3NzdnZpY2hqaGpsZWZpbGhgZmVkY2BkZGZ0dXV1dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHRzdHRzc3Nzc3R2dnV1d3V4fH9+fX9+fHp4dXN0dXV1dHNzc3Nzc3N0dHR0dHR0dHR1dXR0dHV1dHR1dXR1dXV1dIaMjYuIhoeEhIWCgYGBgYGBgYGCgoGAgYCBgYKCgoGBgIGBgYGAgIB/dnNzc3Nzc3Nzc3Nzc3N2dnNnZ2pmaGdmaGhmZGlnY2NnZWVmcHZ1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dHR1dHR0dHR0dHRzdHR0dnV1d3Z0c3R0dHR0dHR0dXV1dXV0dXV1dXV1dXV0dHNzc3N0dHNzdHR0dHR1dXR1iY6MjIqHh4SEhYKBgYGBgYGBgYKCgoGBgICAgoKCgoGBgYGBgYCAgH93c3Nzc3NycnJyc3NzcnZ2dW5kXWNnZWlraGVoZ2dqamlnZXB2dXV1dXV0dHRzdHR0dHR0dHV1dXV1dXV0dHV1dHR1dXV1dXV1dXV1dXR0dHV1dXV1dXV0dHV0dHV1dXV1dXV1dXV1dXV1dXV1dXV0dHNzc3Nzc3N0dHNzc3Nzc3R0dHR0dHWKjoyMiYaGhIeFgoGBgYGBgYGBgoKBgYGAgYGCgYKBgYGBgYKBgYCAf3hzc3Nzc3JycnJyc3NzdnZ3d2liaGhnamtpaGZkZGVmaWhwdXR0dHRzc3JxcnJ0dXV0dHR0dHR0c3NycXFxcXNzdHR0dHR0dHR0dHV0cnJyc3R0dHR0dXV1dXV1dXR0dXR0dHR0dHR0dHR0dHR0c3Nzc3Nzc3Nzc3Nzc3N0dHN0dHR0dHR0dYuOjImGhYWFh4SCgYGBgYGBgYGBgoKCgYGAgIKCgoGBgYGBgYGBgIB/eXNzc3NycXJycnJzc3N3d3d3bGpoZGhpa3Z6a2VmZWhnbXJzdHN0c3JwcHBxcnN0dXR0c3NycnNycXBvb29vcHFzc3NycnJyc3R0dHNxcHFyc3R0dHR0dHRzc3Rzc3NzdHR0dHRzdHR0dHR0dHRzdHR0c3NycnFxcnJzc3Nyc3NzdHR0dHN2jZCMh4eFhYSEgoGCgoGBgYGBgYGCgoKBgYGAgYGCgoGBgoKBgYGAf395c3NycnFxcnJycnNzc3d3d3dzc2pnaWloeX99cW51bG5wcXJycnFxcG9wcXFxc3Rzc3NycXFwcG5ubm1ubW5ubnBxcnJycnJycnJzcXBvb3BxcnJzc3JxcnJycnJycnJycnJzc3Jzc3Nzc3Nzc3Nzc3Jxb29ubm9vcXJzc3Jyc3NycnNzcnaPj4uHhoWFhYOCgoKBgYGBgYGBgYGBgoGBgYGCgoKBgoGCgYGCgX9/f3hxcHBwcXFycnJyc3Nzd3d2dnd2cnF0c252f352c3hwcHBycnJycXFwcHFxcXFyc3Nzc3FwcXBvb25ubm5ub25vcHBxcXFxcXBwcXJwb25vcHFxcXFxcHBxcXFxcXJycnJycnJycnFxcnFxcnJycnFwb29ubm1ubW5vcXJycnJycnJyc3JxeI+OjYaDg4aEgoOCgoGCgYGBgYKBgYGCgYGBgYKCgoKCgoKBgYKBf4B/d29wb3BxcnJyc3Nzc3J2dnZ2dnZ3dnZ1c3l/fnd3d29wcXFxcXFxcHBwcXJxcnJzc3JycXBwb29wb29vb29vb29wb3Bvb29vcHBxb29vcHBwcHBvcG9wcHFycXFxcnJycnFxcXFxcXFxcHBwcHBxb29ubm5tbW5tbm9wcXFxcXFxcXFxcXB7j42NhoODhYOCgoKCgYKBgYGBgoGCgYGCgoGCg4KBg4KBgYGAgYF/f392bm9wcHBxcXFxcXBwcHZ2dnZ2dXR0c3NxfYB9fX9zb3BxcXFwcHBwcXFwcHBxcnJxcXFwb3Bvb3Bwb29wcG9vb29vb29vb3BxcXBub3Bwb29wb29wcnJycnFxcXBxcnFwcXFxcHBwcHBwcHBwb29ubm1ubm5ubm9ub3BwcHFxcXFxcXFxcIKRjoqEhIOFhIOCgoGBgoKBgYKBgYGBgYGCgoKCgoKCgYGBgYCBgX9/gHVvb29wcXFxcXBwcHBwdnZ2dXRzcnJycnGAgoCBeXBwcHBvcHBwcHFxcXFwcXFxcXFxcG9vcHBwcHBwb3BxcHBvb29wb29vcXFwcG9wcG9vb25vcHFxcHBwb3Bvb3BwcHBwcHBwcHBvb29vb29vbm5tbW1ubm5ub25vb3BvcHBwcHBwcHBwiZCMiISDhIaDg4KCgYGCgoKCgYGBgYCAgYGBgoKBgYGBgYGBgIGBgH+AdG5vb3BxcXFwcG9vcG92dnVzcnFxcXFxcICDg39ycHBwcHBwcHBwcHFxcHBxcXFxcXBwcHBwcHBwcHFwcHBwcHBwcHBvcHBxcXBwcHFxb29vbm9wcHBvb29vcHBvb3BwcHBwcHBwcHBvb29vbm5ubm5ubW5ubm1ubm9wcG9vb29vb3BzcXWPj4yJg4KFh4ODgoKBgoGCgoKBgYKBgYGBgYGBgYGBgYCAgYGAgYGAf4B0b29vbm9vb29vb29vb3Z1dHNxcXFxcXJygIKCgXRxcXFxcXFxcXFxcXFxcXFxcXBxcXFxcHFwcXBxcXFwcHBwcHFxcXBxcHBwcXBwcHBwcHBwcHBwcHBwcHFxcXBxcHBwcHFwcHFxcHFxcXFxcXJxcnFwcnRycnR0dHR1dnRzdHR0dXd3gpCPi4iDgoaHhISCg4GBgYKCgoGBgoGBgYKBgYGBgYGAgICBgYCBgYB/gHVvb29vb29vb25vb29vdXRzcnJycnJycnKDg4OCdnFycnFxcXJxcnJxcXJycnFxcXFxcnFxcXJycXFycXFxcXFxcXFxcXFwcXFxcXFxcnNzcnJyc3V1dHR0dHR0dHV2d3d3d3d3eHh4eHd3eHh4d3Z3dnV2dnZ2d3h6e3x7e3t6enp6enyGkI2LiIODiIeHhYODgoGCgYKBgYGBgYKCgoGBgYGAgYCAgYGAgIGBgH+Ad3FxcXFxcG5ucG9wcG92dHV1c3Nzc3NzdYiDgoN5cnNzcnJyc3Jyc3NycnJycnN0cnJzcnNzc3Nzc3Nyc3N0dHV1dXV1dHV3eHd3d3d4eHh3eHh4eXl5eXl4eHl5eXp6e3t7e3t6enp5eXh3d3d1dnV2dnd5enp7fn5+fX1+fn5/f35+gIyQi4qHg4WIi4iEg4SDgYGCgYGBgoGBgoKCgoKAgYGBgYCBgYGAgIGAf4B8enp5eXx5eHh2dXZ2dHl2d3h3d3Z3dnZ6f3x+fnx2dnd3dnV4enh4eHh3d3d2eHx5eXx6eXl8e3l5eXh4eXl6enl5eXh4enp5eXh4eHh3dnd3eHh3eHh5eXp7e3p8fH1+fX9/f359e3t7e3p5enl5e3t/foB/fn5/fn19fX5+f35+fn6AjpCNioeEhoqLiIaGhIOBgoKBgYGCgYGCgoKCgoCBgoKBgYGCgYCBgIF/f4B/fn19fX9/f318e3t7eXh4eHh5eXl4eXh5eXl4enp6enp6e3t7fH1+fHt7ent8e318e3t7e3t7enl4eXh4ent6enp5eXp8fHt6enx8fHp6ent9fHx+fn+AgoGAgYKAgH9/gYGBgIB/f35+fn5/fX1+f4CAf35+f39+fn9/f39/gH+Af4OQjoyHhoWIi4yIh4aFg4GCgYGBgYKBgoKCgoKBgYKDgoGBgYGBgIGBgIB/goOCgoGBgX99f39/f4F6enh4d3h4eHh5eHh5enp5e358enx9fXt8fX19fHx8fnx9fn5+fn59fX9/f3x8fYGDgYCAf318fXx9fXt9fXx8fH19fX1+gYGChISDgoB/gYGBgH9/f4B/f39/f39+fn9/f39/f35+f3+Af39/gICAf4CAgICAhJCPi4eGhoiLi4mKhYaDgoKCgYGBgoGCgYKBgYGBgoOCgYCAgYGAgIGBgH+ChIKCgICAgH9+fn+AgH9/fn18fX19fYB/fX+Af35/gH9/fn9/gIGBgICAf3+BgICAf4CBgn9/f4CAf35+f39+f39/fn5+f39/gYB/f4CBgYCAgYOEgoGCgoGCgH+AgYCBgYGAgH+BgICAf39/gICAgYGBgIGBgYCAgICBgoGBgYCAgYGFjo6MiYaHiYyLi4qGhoOCgoKBgYGCgoOCgoKBgIGBgYKCgICBgYCAgYGAf4KFg4KBgYCAf39+fn+AfX5+fn19fX5/fn9/f35+fn+AgYCAgICAfn9/fn+Af3+AgH9/f35/f39+fn59fn9+fn9/f35/gIGBgoKDg4KCg4KBgYKDg4OCgYGBgYKBgoKCgYKBgoGBgYGBgoKCgYGCgYKCgoGBgoKBgYKCgoKCgYGBgoKCgoaPkY+KiImKjY6NiYaFgoKCgoKBgYKCg4KCgoGBgYGBgYF/gIGBgYCBgIF/gYWEg4KCgoGCgYCAgIB8fHx7fH18fH9+fn9+fn5+f35+f39/f39/f35+foB+fn5+fn9/f39+f39+fn5/gIB/gIB/f39/f3+BgYGCgoCAgYKDg4SDg4ODgoKCgoKCgoKCgoKCgoGCgoKDg4OCg4ODgoKCgYKCgoODg4ODgoKCgoODg4KCh5KTkIuKi4uPj42Kh4SCgoKCgYGBgoKDgoKBgYGBgIGBgICAgYGBgIGAgYCAg4SDg4OEg4ODgoKCgXx9fHx9gn1+f4GCiIGCgoSCgYGDg4GBgYKDgYKBgYCAf39/gICAf3+AgX9/f39/gYCAgICAgH9/f3+AgICAgH9/gYODhYSEg4SDgoKCg4OCgoOCgoODg4ODg4SDg4KEhYWDg4SEgoKDhIOCg4ODg4OCgoODgoCKlJOPioqMjpCPjYuGg4KCgoKBgYGBgoOCgYGBgIGBgoGBgICBgYGAgYCAgH+BgoODg4SEhIOCgoKCfXx8fn6AgYOAg4OChIaFhoaFhIWFg4ODg4SBgYKEhIKDgoeDgoKAgoGBgoKCg4KCg4KDgoODgoGAgIKCgYOCgYKCg4OEhYWEg4OChISEhIOEhISDg4OEg4ODg4OEg4SDhIWEhISDg4ODgoKCgoKCgoKBgYKCgo+UlI+Njo6RkY6KiISCgoKCgYGBgYGCg4GBgIGBgYGBgYCBgIGBgYCBgICAgIKChIKChIOCg4ODgoJ9fX2AgH+AgoGDg4ODhIaEhIOEhYWDg4GBg4OBgIKDgYKFhYWFhoaHhoWGhoeHh4aGhoeHhoaEgoGCg4SDg4ODg4ODhISFhYWDhYSFhISEg4KBg4OCg4SEg4KCg4SCg4ODg4OCgoKCgoKCg4OEhIOFhYWFhoaIk5OTkI+Pj5KRjIqIgoKCgoKBgYGBgYKDgoKBgIGBgYGBgICAgYGBgICAgICAhISEgoKCgoGBgoKBgX+AgYOCgICAf4CCgoGDg4KCgYODg4SDg4KDhISCgYGBgoSFh4eHh4aGh4eHiIiHh4eIiIiFhIOBgIGBgoKCg4GCg4SEhYSDg4OEg4OEhIOBgYGCg4OEhISDg4ODg4OEhIODgoSDg4ODhIWFhoeHh4eIiIiJiY6TkpKOj46Qko+LiYeCgoKCgoKBgYGBgoKCgoGBgIGBgYGAgICAgYGAgIGAgICDg4KCgYKCgYGAf4CBhYWFhoOCgYB+fn+BgoSCgYKDhIOCg4ODg4KChYSDg4OBg4SFhISFhYSDgoSFhYKEhIWFg4KBgH9/gIB/gIGEg4OEhYWEgoKCgoOCg4OFhIKDhISEhYaGhoaGhoWFhoeHhYaIh4aHiIeGhoaIiYeGhYaGhoeIkZKSkI6QjpCRjImHhYGBgoKCgoGBgYGBgoOBgYGBgYGBgICAgICBgYCAgICAgISEg4KBgoGAgYGAgYKIh4aHhYSCgH99fX6AgH+AgYGBgYGBgoGAgI2MgYGCgoKBgYGCgYKCg4GBgICAf4GAgH+AgH9+gIGBgYKCg4OEg4OEg4OCgoGBgoODg4SEg4SEhIOFhYaFh4eIh4eHh4eHh4eGhoaGh4WFhYaGhIWEhIWEhYaSk5GOjo+OkI6JiIeEgoKCgoKCgoGBgIGCgoKCgoKCgYGBgYGAgYGBgICAgYGAgoSDg4KDgoGCgYKDg4iHh4iHhYSCgX5+gICAfn5/f4CBgoGCgYCDlpaDgH+AgIB+gIKBgIGCg4OAf39/gICAf4CAgICCg4KDg4ODgoOBgYKCgoOCgYKCgoOCgoSDhISDg4SEhYWFhYaGhoaFhISEhYWEhIWFhYSEhISDhISEhISEipSTkpCQj46NiIaFhIOBgYKCgoKCgYGAgYKCgoKBgoKBgYCBgYCBgYGAgICAgYGAgoOCgoOCgoKBgoOCiImJiYiHhYSDgYKEhIOBgoGChISCf319fIeamIaEgoSCgX+AgoGCgoGChIKBgYGBgoOCgoGDg4SDg4SEg4OCg4KDg4ODg4KCgoKCgoGDhISEhYSFhYWFhIWEhIWFhYWDg4OEhISEhYWFhISEhISEg4ODg4OOlZKQkZGOjYyHhYODg4GBgoKCgoKBgYCBgoOCgYCCgYGBgICAgIGBgYCAgICBgICDhYSEhIODg4SDhIOGh4mIhoWDhIODhIWDgYGDg4uIhX58fH1+f5mahoSFhISEgoGAgYKDgoKEhIOCgoGBhIWEg4ODgoKDhISDg4ODg4WFhISDg4KCgoKCgoSEhYSFhYWFhYODhYWFhYaFhoWEhIWEhYWGhYWFhIWEhISDhIODhJGUk5KSj4yMioWEg4ODgYKCg4KCgoKBgYGCg4KBgYKBgYGBgICBgIGBgH+AgIGAgYaGhoaGhoaHh4aGhYSDhYaCgIGBgYGHgoB+f4CGmpGGfIJ/gop+kJqDgYKBgYKCgYCCgoKCgYKDg4KBgYKDhYODg4ODg4OEgoKEhIOEhIWEg4OCgoKCgYKCg4ODg4SFhYWFhIOEhYWGhYWEhISEhIOEhIWFhIWFhIODhIOEg4KGlJSSlJKPjYuHhISDg4KBgoODgoKDg4GBgoKBgoKCgYGCgYGBgYCAgYGAgICAgICAhYWFhYaGh4aGhoWGg4ODg4GAgoKCgYKAf35/foWdnoWDi4CAhYCBiYGBg4GBgYGChIOBgYKBgYKBgYKDgoODgoOCgoKCg4OBg4SDg4ODg4OEhIKCgoKDgoKDg4ODhIWEhISEg4OEhIODg4OEhIODg4ODg4SDg4ODg4KDg4KDgouUk5KTkY2NioaDg4OEgoGCg4ODg4ODgoGBgoGCgoKCgoKBgYGBgICBgYCAf4CAgICDhISFhYSFhYWEhIWCg4KDgoKDg4OBgICAgICAgpmhh4SFiId/f36BhIOEgoODg4KAgICCgoKCgoKDg4ODgoODhIKCgoODgoKDg4KCg4KDg4WEg4ODg4SDg4SEhISEhYWEhIWEg4SEg4OEhISEhISEg4SEhYSDg4SEhIODgoKDkJSSkpKPi4yIhoSFg4OBgYKDg4ODg4OCgYGCgoKCgoKDgoCBgoGAgICAgIB/gICAgISDhYWEhYWFhYSFhYOEhIWDg4SEhIKCgoOCgoSCkJyDgICBgX5+fX2EhYWEhYJ/fX19f4KEg4ODg4OEg4ODhISEg4OEhISEg4SEhIOEg4OFhoWFhYSFhYWFhYSFhoWGhoWFhYWFhYWFhYWGhoWGhoaFhoaGh4aFhYWFg4SEhIeTk5KRkoyKiIWFhYWCgoGBgoODg4OCg4KBgYKDg4ODgoKBgIGAgICAgICAgH+AgICAhYWFhYWGh4eGhYWFhISFhYSEhISEg4ODg4OEhYOGi4GAf4OLgX19fIOHhoOAfn9+fn9/f4OEg4OEhISEhISEhISEhISFhYWEhYSGhYWGhYaGhoWGhYWHhYWGhYaGhoaFhIWFhYWFhIWGhoaHhoaGhoaHh4iIiIaFhYaEhYWGjZSTkpGQi4qHhoeGhIGCgYKDg4ODg4KDgoGBgoODg4KAgYGBgICAgICAgICAf4CAgICHh4eGhoeHiIeHhoaEg4ODhIODg4OEg4ODg4OEhIODgn9/hYeEgX9+gYWBf39/f39/f35/gISFhIWGhoaFhYWFhoaHhoaFhoWFhoeHh4iHh4eGhoaHh4eGhoaGhoaGhYSDhIWFhYSFhYaGhoeHhoaGhoeHh4eIiIeGhoaHh4eRk5KQkZCLiIiFhoSDgoKBgoODg4ODgoKDgoKCgoOCgYCBgICBgICAgIGAgIB/gICAf4aHiIeHh4eIiYmIiIODgoKDgoSEhIWEg4KCg4SEhIOAf4KFgoKEgoGAgH9/f39/gIB/f4B/f4WFhoeIiIeHh4eIh4iHiIiIhoaHiIiJiYmIh4aHh4eJiIaHhoeHhoaFhIOEhYaFhYWFhoaGh4eFhoeGh4aGh4eHh4eHh4eFh5OTkY+RkIuHhoWGhIKCgYGCg4ODg4ODgoKCgoGCg4KCgIGBgYCAgICAgICAf3+AgYB/hoiIiIiHh4iJiYmIg4KCg4ODhIWHh4aFg4OFhISDgX+AhISDgYGBgYKCgYGBgYB/gH9/fnt6gIaIiIqKiYmIiImJiYmKi4qIiIiJiYuLioqIiIeIiIiHh4iIh4iGh4aEg4OFh4eHhoWFhISDhYWEhYWGhISEhYWFhoWGhYOJlJOQj5GOioaFhoWDgYGBgoKDg4ODgoKCgoKCgoKCgYGBgYGBgYCAgICAgIB/gICBgH+GiYiIiYeIiImJiIiEgoKDg4KDhImKh4aEhIWEg4OCgYOEg4OCgoKCgoKCgH9+fH19fX9+fHt8g4eJi4uKioqIiIqJiImLiomJiImIioqJi4mHhoaGh4WGiIiJiIeGh4SDgoSIiIiIh4WCgoGDg4KDg4SCgoKDgoGEg4SDgY6TkpCPj4uIhYSGhIKBgYGBgoODg4OCgoKCgoKCgoGBgYGBgIGAgICAgICAgH+AgIGAf4WIh4eHhoeIiIiHh4SCg4OCgoOFiYqJh4WHhYSFhIGChIODg4OCgoKDgX59fX5+fn5+fX1+fX19g4eJioqHh4WGh4eHh4iHh4mGiIaIh4aJiIODhIOFhISFhYaIh4aFg4KCg4WHhoeGhoOCgoOEgoODhIKBgoGBgYODhIOEkZKRjo+Oi4eEhoaEgoGAgYGDg4ODg4KCgoKCgoKCgYGBgIGBgYCAgIB/gIGAf39/gIB/hYaGhYaGhoeHiIeGgYKEhIOChYeIi4qGhIaEgoaFgIKEg4ODg4OCgoF9fH1/gH9+fn59fH19fHp8hIaHhoSDgYODhIWFhYODhYSEhISEhIWEgoKDgYSEgYKDg4WGhYSCgYGCgoODhYOEhIWEhIaDhISFg4KDgYKDg4SFhIeSkY+Nj4yJhoSFhIWCgYCBgYODg4ODgoKCgoKCgoKBgYGBgYGAgICAf4CAgYB/gICAgICDhIWEhYWFh4eHh4aAgYGFg4OEhYSHiIWCgIB/goCAgoODg4ODgoJ/fX1/gICBf31+fn19fX16enp+g4SEgoGBgIGBgoKBf36BgYGCgYOAgoGCgoKBg4SAf4CAgYOCgICAgICBgYGCgYGChIODhYSCg4SDgoKBgoSDhYWGi5ORjo+Pi4iFhYOChIGBgYGBgoODg4KCgoKCgoKCgoGBgYCBgYCBgH9/gIGBgICAgH+AgIKCg4OChIOEhYWGhn+BfoCBgICAgIGDgn9+fn5+fYCCg4OCg4KDgn19fn6AgIGAfn19fX1+fXx6enp/goKAf39/f35/f4B+fYB/f4CAgX+AgIF/f4CAgX59fX+AgX9/foCAgH+AgICAf4CCgICCgYGCgYGAgYGBgYKEg4aPkpCOj42Kh4eGg4OCgYGBgYGCg4ODgoKCgoKCgoOCgYGCgYGBgICAgH+AgICAgICAf39/gYKDhIGCgoOCg4SFgIB/fH19fn1+foCAf31/fn1+f4KDg4KCgYF/fX1+f4CAgH9+fX19fHt7e3p6eXqAgH5+f39+fnx+f35/gH9+f3+Af4GAf359fn9/fn18fn+Af35+f3+Af39/f4B/f4B+f4CBf4B+f39/gH9/f4B/hZKSj46Pi4uHiYWEg4KCgYGBgYKDg4ODg4OCgoKDg4KAgYKBgYGAgICAf3+AgIB/gIF/f36BgYSEgYKBg4OCg4OBgH98fn5/fX6Af4B/foF/f4CBhIOCgYB/f359fn5/gICAfn19fX17e3x6enl5eXt/fn5/f39+fX5/foCAf35/f4CAgoB/fH5+f35+fXx/f4B/fn9/f4B/f35/foCAf36Af39+fn5/f35+f318fH2Fk5KOjIuKiImIhISEgoKCgYGBgoOCgoODgoODg4ODgYCBgYGBgYCAf39/f4CAgICAgIB/foCBhIOCgYGDhISDhICBgICBgIGAgYKCgoGBgoCBg4ODgYGBgYCAfX19fn5+f359fX19fXx8fHt6eXl5eX2Af4CBgYF/f4B/f4F/gICAgYGCgoB+gH5/fn5+foGAgYF/f39/gIB/f39/gYB+f4CAfn9/fn+Af31+fX17fIaTkYyLioeHioiGhoSDgoGBgYGCg4ODg4OCg4OCgoKBgICBgYGAgH9/f39/gICAgICAgH9+fn+BgYGAgISGh4aHgoSDhYOBg4ODhYSEhISEg4ODhIKCgoKCgX5+fX19fn6AfX19fX19fX19e3p6eXl5eYCCgoKEg4CCg4F/gYCBgYGDgoODgYGCgIGAf4CBg4GEgoCAgYCBgYCAgYCCgn+BgIF/gIB/gICAfn9/fn18ipOQiomIiIiJiIaGhoSCgoGBgoKDg4ODg4KDg4KCgYCAgICBgYGAf39/f4CAgICAgIGBf359fn5/f39+g4aHh4iChYSFg4SFhIWGhYaGhoWGhYGBg4ODgoKAfX19fX19fn59fX19fX19fX18e3l5eXl4fIKDhIWCgYSDgoKDhYaCg4SDgYKCg4OCgoKCgYKFg4iFgoGBgYKCgYGBgYSDgoOCgoKCgYGBgIF/gIGAf36Ok4yHiIaIh4aGhYaGhIKDgoGCgoODg4ODg4OCgYGBgH+AgYCBgYB/gH9/gICAgH+AgYB/fn19fX5+f36Ag4SHiISGhoaFhoaHh4aHh4iHh4eGf32BgIGCgX59fX19fX19fX19fX18fH5+fnx7eXh3eHl5gIODf4ONhIOEhISXl4ODhIF9foGCgoGCgYKBg4aIjIWDgoKBhIKEg4KDhYSEhYOCg4OCg4OCgoKCg4OCgpKQi4iJh4mHhoaEhoWEhISCgYKCg4ODg4ODgoGBgYCAgICBgIGBgH9/fn+AgYCAf4CAgH9/fn1+fn+Bf4CCgYWFhYeGh4eGh4eIhoaHh4eGh4V+fX18fX9+fX19fX19fX19fX19fXx7iJKCe3x6fIZ5eHl8gYF+iZaEg4OEhJSTgIGBf39/fn6Fi4B/gICEhpCJhYSCgoGFhYuDgYKFhYaGhIOFhYOFhIODhIOFhISIko6MiYiIiYeHh4WGhYSFhIKBgoKDg4ODg4OCgYGBgYB/gIGAgICAf39/f4CAgICAgYGBf39/f4CAgIGBgYGBg4OGh4aGh4aGiIeGhoaFhIOFhH59fHx8fX18fH19fX19fX19fX18fH+RlZaDe3qElHx4eXp7fICCg4GBgIOCgH58fn57iJF8fI6Wf31/f4KGioWDg4SDgYONiX9+f4OEhYWDhYaFhIWFg4SFhYaEhI6Rj4yKioyJiImHhYWFg4OCgYGCgoKDhIODgoGBgICBgICAgYGAgIB/f3+AgIB/gICAgX5+f4GBgoKCgoODgoOCgoWGhISFhYSGhIOEg4KBgIKAfn19fHx9fXx8fH18fH18fX19fHx8e4uRl4x6e3yBenp6e3x5eX19foB/gH98e3t+fn2ClZF/hIh+fH5/goR8fIGChIKAf4eDfYKBf4KCgIODhISEhISChIOEhYKEkZGOi4yMjoqJiYWFhYODgoKBgoODgoKDg4KCgYGAgIGAgICAgICAgH+Af3+Af357gICBenyAgYKDhYODhYWFhYODg4SCgYKDgoOCgoGBgIB/gX5+fX59fHx8fHx8fHx8fHx8fHx9fHx8fn6Kgnt6e3p4ent7fH17fn1+f319fX18fH+BgX2Gj4F+fYJ+fn6Agnx8f3+CgIKAfnx7ioJ9gH9+gYCAgYKBgoCBgYGAf4uTj4yLjY6NiIeHhYWEhIOCgoKCg4OCgoODgYGBgICAgICAgH9+fXx7fHx9f3+AgHx6gYF4e4CCgYOFhIOFhYaHhISAhpSIgIKBgYGBgH9/f39/fn5+gHx8fHx8fHx8fHx8fHx9fHx8fHx8fHl7e3t4eHl7enp8gX+Afn+BfH5+f399gIKCgICAgX+CkYF/f4CAfoB+fn9+gIGBfX19e319fXx9fHx9gH+AgH6Afn6ClJGMjI2NjoqFhoaFhISFg4OCgoODg4OCgoGBgYGAgICBgICAf4CAf39/fXt6fICAgHh+gXd7gIF/gYKCgoKEhoeGhn6IlYp+gYGAf4B/foB+f39/fn+Bfnx7e3x8fHx8fHx8fH59fHt9fHx8e3x8fHp6eXt8en2Fg4J/gYF+f35/gH6FgoF+gH9+foCFhoKAfn6Dhn9+fH6AgIGAf39+fX19fX57fH1/f3+AfX9+gIyRjYyNjo2Nh4SGhoWEhISDg4OCg4ODg4KBgYGBgYCAgYGAgYGBgYGAgH9/f397en9/e3mAd3p/f31+f3+Af4KDhoaFf3+FgX5/gIB/gH5+f31/gIB/gIB/f319fHx9fn18fH19fX19fH58fXx7fXx8ent6fH19f4aEgoCAgX1+fX5/fouEgYZ+fXx8f36CgX99fX19gHx7fXx+gYSDgYB+fn5+fX1/f399foB+fn6Eko2MjI+Ni4qGhIWEhIODg4OCgoKDgoOCgYGBgYGBgYGBgYB/fXx8fH1+f39/f397e399d352eH59fH18fX5+gYGCg4B6fX18fn+Af36Af35/fn+AgH+AgH9/fn9+fn5+fn1+fn99fH59fn19fHt8fHx6e3p9fn+Ag4OCf35/fH18fXx8gYN+jH58e3t9fn1+fn17e3t9fHp7e3uAhoSChIOCf4B+f4KCgn9/goJ/gIqPjIyLjYuKiISEhIODg4ODgoKCgoKCgoKBgYGAgoGBgYKCf3+AgIB/fn18fH5/fn55fX52e3Z4fXx8fHt9fX6BgICAf31/f31+f39/foB/f39+f3+AgIGBgH99gH9/fn9+fn5/f3yCfn59fX17e319fHp8fH6AgoGAgIB8fH18fHx8fH18fnt/fnt7e3x8fH18e3t7e3x8enp9en6CfoGDhIKBgoGFhoWFh4aHhoGEkY6Mi4qLh4iFgoOEhISEg4KCgYGCgoKBgoGBgYGBgoGBgoKAgYKBgYCAgH9+e3x+fnx6fnh5dnd8fHx7e318f4GAf35/foB/f35/f35/gH9/f39/f3+AgYKAfn6BgIB/f39/f39+fYN8fH19fH99fX19e3x+fn9+fn5+fnx8fHx8fHt+fnt8e3x8fHx9fH18fnx9fHt7e3x5e3x7e317fX5+f4CAg4eJiYmLiYuJhYiRjYuIiYeFhYOCgoOEhIOCgoKBgYGBgYKBgYGBgYKCgoGCgoCAgX98e3p6eXt9enx+fnl8eXh4dHx8fHt8fHx+gH9/f39/gIB/fn5+fX+AgH9/f3+Af4CDgoB/gIGAgIB/f4CAgH58enx9fX59fX5+jIZ9fX57e4OCfX5+fX18fX19fX1+fH18fXx9fX58fn19fX18e3t6fHt8fHt6e3t6enp7fn6ChYiHiIqLi4uJjZGOjYmIhoWEgoKCgoODg4OBgYGBgYGBgYGBgYGCgoOCgYKBgIGBf3+Af356eHl5en5+e3l6eH5zfHx8e3x8fH5+fn5/gH+AgIB/fn9+gIF/f4B/gIGAgoSEgYCAgYGAgX+AgYKBf39+f31+gH57foGRjHx9f4qAjYx+fn19fX59fX59fHx8fX18fXx9fX1+fX1+fnx7e3t8fH18e3p7fHl6eXh5e35/hIOEh4mKiImOkI2LiIiFhISCgYKCgoKCgoGCgoKBgYGCgYKCgoGCgoKBgoKAgYGAfoCAf39+e3p5e319eHx6f3KBfXt7fHx8fn59fYGBf4GBgX9/gH+AgX9/gIGCgYGFg4SCgYGCgYKCgICBg4KAf4F/fX6Afnx+f4iCf36DkISEg4F/fn18jYd9fX59fHx/fnx9fXx9fX5+fX5/fX19e3x9fnx8e3x9enp5eXl5e3t+foCBg4eEiI6NioqGhYSEg4KBgoKCgoGBgYGCgoKBgoKCgoKCgoKCgoGCgn+AgIB+f39/fn5/ent5fX16enp9cX6Cent8fX19fXp4f4KAgYKCgICBgIGBgICBgoKCgoaFhIKBgYGBg4F/gIKEgX9+gYB9foF+fX5/gIB9fn+EgH5+f31+fX2KhX1+f31+foB/fX19fH5+fn99f4B9fn18fX9/fHx7fH17e3t6enp7e3x9fn2Ag4CJjYqLh4WFhYSDg4KCgoKCgYGBgoKBgoKCgoKCgoGBgoKBgYKCf4CAgH9/f39+fn59eXp6fXx5d3t0e4d8dHd9fn17e3Z2foCBg4KBgYKCgoKBgYGDg4OChYaEg4CAgICCgX+AgYOBfn6Af35+gH59fn6AgH+Bfn+Af39/f398f39/f3+Afn9/gH58fX18fn5+foF/gH2CgHx9gIB9e319fXx8e3x8e3t7fHt8fHx9fIqKiIiFhYWFhISDgYKBg4KAgIGCg4KCgoOCgoKCgoGCgoGBg4J/gIGAf39/fn5+fn57enp8fHt2e3R3f352cnt+fnt4dnd8gIGCgoKBgoODg4OCgoSDhIOFhoOCgX9/gIOAgICAg4F+foB/fX+AfX1+foCAf4J/gYGAgICBf31/f3+AgIGAgIB/fnx9fX19fn59g32AfoKAfX6AgX98fn59fX17fH58fXx8fHp8e3x+iYaGhYWHhYSFhIKBgoGDgYCAgoKDgoKCg4ODg4KBgYGBgYGCgH6AgYB/fn5+fn5+fn56e3p9goN9dXF6fHpxen59eXh1dICAgoKCg4KDhYOEg4KDhISEhIWEgYGAgH6Agn9+f36Bf35/f4B9foB9fX1+gH9/gYCCgYCAgIKBfn6Af4GAf4CAgH9+fX19fnx+fn19gYR/gH9+f4GBf31/f319fn1+fn1+fHt8enx7eoCHgoSEhYSEg4WDgoKBgYKBgICCgoOCgoOEg4SDg4KBgYKBgYOAfoCBf35+fn5+fX5+fnt7en6Jh354cnl9f3F6eHt4eXV1fYKDgoODg4OFhIWEg4OEhIODhIKBgH+Af4CBfn19foB+fn5/gH19f3x9fX6Af4CAgIKAgIGAgoGAf4B+gIF+gIGAgH9+fn5+fn5/fn6FhYGBgH+Ag4F/foGAf35/f4B/fn17ent6fHt6goR/g4KCgoOChIKBgYCAgoGAgIKBg4KBg4SDhIKEgoGBgoGCgn9+gIF/fn1+fn5+fX59fXp7fIWEe3tzeXp8cHd1dnd5dXR6hISBhISDhIWFhoSDg4WEgoODgoCBf39/f4B9fX1+gH1+f39/fn1+fH19foF/gIB/gIB/gIGDgoGAf36AgH+AgYCBgH9/f39/f4CAgIGCgoKBf4CDgX+Ag4J/f4B/gX+Af3x7e3p8e3yCgH+Cf3+BgIKCgYF/f3+BgH6BgoKDgYGDg4KEgoSCgYGBgIGCgH6AgH9/fX5+fX19fn19e3t6gH94fHZ5eXtxdHh3dnh1cnmFhYKEhIKEhYWGhISChIOBg4GAgIF+f4B/gHx9fX6AfX5/f39+fX98fn5+gX+Bf39+f4B/gIODg4B/f4GBgIKBgYGAgICAgICAgIGAgYKDgYF/gISBfYGDhICAgX+BgYKBfXp7e3x8fH9+f4B8f399fYGAgH59fYB/foKBgYKBgIKCgoKBg4KCgYB/gYKAfn9/fn99fX1+fX19fX19ent7fHZ9eXh5enJ1eXl2d3dzdYaFg4WFgoSEhYSEhIKDgoGDgX+AgX5/gH6AfX19fn9+f4B+fn99f3x/f3+BgIF/f3x+gH6AgYKDgYCAgoOEgoGAgYB/goCAgYGAgYGCg4KBgX+Ag4B+goKEgICCgYKChIJ+e3t8fHx8fX1+fXp+fX14fn9/fHx8fn5+gYCBgYCAgoGBgYGDgoGBf4CAgoB9fn19f319fX59fH19fX16e3p8dnx6d3t4cnZ5e3Z2dnN0hoSEhYSChISFg4OCgYOBgYOBgIGBfX+BfoF9fX1/f39/gH5+f359fYB/gIGBgX9+fH5/fn5/gYJ/gYGCg4eFgX9/fn6Af4CBgICAgIKCgYCAfoCCf36BgoKBgYOCg4OFgn99fX18e3x8eXp7en55e3l4f357e3t+fX1/f4F/gH6BgICAgoOCgYF/gIGBf31+fH1+fX19fX18fn58fXx5e3x4enx3endzeHd6c3Z2c3SGhISFg4KDhISDgoKCg4GCgoGAgYF8gIB+gH1+fX5/gICAf35/f3x+f3+BgIGAf359f39+fn+BgH2AgIGDg4N/f359fn5+f4CAgIB/gYKBgH9+f4F+f4CCgoCBhIKEhIaEgH59fHx8fHp5dnl5enl2eXZ+fHt7e359e399gH99fX9/f3+BgoGBgX5/gYF+fX18fX19fX19fXx+jYF8fXl7e3p5fHd4eHR1dXhyd3d0doaEhIWEg4ODg4OCgYKDgoGDgn+Bf39/fn+AfX19fX+AgIB/f4B/fIB/f4GAgYCAf3yAf31+fn9/fX5+gIGCgn5/fn1+fn5+f3+Af32AgIB+fn5/gX5+gIKBf4GDgoOEh4SAgH58fXx8e3x1eXl4eHh5d3t8e3p7foV9fn1/ent+fn59foGAgIGAfX6BgH59fXx9fX19fX18e32Dgnx8ent7e3p7d3Z4dXJzdnB4eXJ4hYWFhYOEg4KChIKBgYKBgIKBgIF/fn5+foB+fX58f4CAgH+AgX98gH6AgH+BgIB/fYB/fn5/f319fX6AgYKBfn9+fn59fX5/fn9+fH+Af35+fn+Cfn6AgIF/gYOCg4OGhICBfnx9fHx7fHh4e3h1eXd3eXx6e3t9kod9fH13en1+fn19f35+gH98foB/fn19fH19fX19fHt8ent9enp4e3x6ent4dHh1cXJ0cHh4cnmEhYWFg4SDgoODgoGBgoKAgYGAgIB9fn5/gH18fn2AgIGAf4CBgHyAf4B+f4GAf39+gX9+f39+fX18gICAgIB+f35+fn18fn9/f358fYB/fn1+gIJ/foCAf36BhIKCg4WFgoJ+fnx7e3x8eXd8eXd4d3d4e3t6e3yFin17end6fH19fHx9fX1/fnx9fn59fXx8fX5+fX18fHt6enx7e3p5enp7enhzd3VxcXJweHdxe4WGhIWDhYKBg4OBgYGBgoCBgICBgH5/fn9/fXx+fYCAgoGAgIGBfX6Af35/gX+Af3+BgH9/f31+fH1/gICAgH9/f35/fXx+f39/f319f39+fn6CgYF/gIB/foGDgoKEg4SCgn5+fHx6fHt7eXt6d3N2d3h5e3p7eXp/fnt7d3p8fXx8fH59fH19fH19fXx8fX19fX99fXx9e3l7fHx8enp6enp6eHN2dXBwcm93dnJ7hYaEhYOEgoGDgoKCgYGCgYKBgYGAf4B/f399fX9+f4CBgYJ/goF9foF+foCBf4B/gIKAgIB+fX58f3+BgICAf4B/f4B+fX5+f4B/f39/gH9/f4J/gICAgIB/gYGAgISBgoKAf39+f3x9fn56fYV+dHx9enp6enx5eXp6hoV3eXx8fHx8fXx8fHx8fX19fHx9fX19fn19fX16eX18fH16enp6enp5c3V1b29xb3d0c3yFhoOEgoOCgYKBgoKCgYKBgoGBgYCAgICAgH59gH+Af4GCgn+BgX+AgX5/gYB/f4CAgn+Bf319f35/f4KAgICAgIB/gIB+fn1/gH9/gIB/f39/gH+AgICAgH+AgYCBgYGCgYCAf39/fn1/fnuBk416fH18e315e3p6eHmBgXh5e3x8fXx8fHx8fHx9fX18fH18fn1+fn59fHp8fHt8fXt5enp6eXlzdXVvb3Fwd3N0fYWGg4OCg4KAgYCCg4KAgYGCgYKBgYCAgIGAfn6Af4GAgYKCgIKCgICCfoCBgX9/gX+BgIF/fH6Af3+AgoCAgICAf3+AgH9+fX6Afn2AgIB/f3+AgICAgYCAf4CAgYCBgYKCgICAf39/fX5+fIGGiXx8fnt7fnl6e3p7jn53d3l7fHt9fHx8fHt9fH19fX18fXx+fn5/f358enx9e319e3l6e3p5eXN0dW5zcXB4cnV6hYaDg4KDgoCAgIKCgX+CgYKBgoGBgYKAgYF/fn9/gYGCgYKBg4OAgYJ/gYGBf4CAgIB/gX99f4F/gICBgICAf4B+gICAf359foB+fn+Af39/gH9/gICBf4CBgH+BgIGCgoKAgICAgIB9foB9gIOCe35+e3x9e3p8e3uHeXh4eXx8fH17fHx9fX18fH19fn19fX5+f3+Af317fH18fHx7enl7e3l5c3J1bnZycHhxdXaFhYOEg4KCgICBgoF/gIKCgoKDgYGDgoCCgYB/gICCgoKBg4KEhICBgX6BgoF/gICAgH+Cf36AgYCCgICAgIB/gH+AgIB/fn2Af39/f4CAgH+AgH+AgYF/gICAgIGAgYGBgYGAgYCAgH9/gH5/fX59fn57fXx9e3x8d3h1eHh5e3x8fXx8fHx8fX5/f39/fn19fn9/gIGAf3x9fHx9e3p7eXp8eHpzcnVud3FxenF2d4WFg4ODg4KBgYKDgH+CgYSDg4SBgYOAgoOBgYCAgIKDgoCCgoSDf4GAfoKDgICBgICAf4CAf4GBgIKAf4CCgH9/gICAgICAf4CAgH+AgICAgIB/f4CBgYCAgICAgYGAgoOCgoCCgYGCgYB/f4B/gId+fnx6fXx7fX94d3Z5eXp8fXx8fXt8fH19fn5/gIGAfn1+gICAgoGAfH59fX58d3t6ent5eXNxdW53cHV6cXZ5hYWCg4KDg4KDhISAgIOBhoOEg4GChICEg4KCgICCgoSBgYKChIJ/gIB/gYOCgYCBgYCAf4GBgYGAg4F+gIOCf35/goGAgIB+gYCBf4CAgYGBgYCAgIKBgYKBgH+CgYGBgoOCgoOBg4OCgYCBgH+AhH19fXx/fXp9f3p5dnp4eXt7fH19e3x9fX19fn+AgYGAgH+AgICDg4B9f35+fn15eXt6enp5c3J1b3dxd3lzd3uFgoKDgoOEgoOEg4CAgoOGg4ODgoKEgYSDgYKAgIKBhIGCgoGCgX6BgICCgYKBgYKCgIGAgICBgoGEgH6Bg4F/f4CDgoCBfoCCg4KAgYGBg4KDgoGBg4KChIGAgYOBgYKEg4KEhIODhIODgoGBgYCCf4B/fYB8enx/e3t3fHl5eXt6fX59fHx8fH1+foCBgYCAgIGBgYSEgH2Af39/f357e3t6e3p0cHhyeXR2eHR3e4SCg4KDg4SChIODgYKChYaEgoODg4SBhISAg4CBg4KCgoKCgIKAf4GAgIKBgoGCgoKBgIGBgYOCgoOAfoGDgX9/gYSEgYN/goKBg4KCgoGEg4OEgYKEgoOCgoGCgoOBg4SDhISEhYSFg4SCgYOCgoOBgYGAgH58fIB8fHh8eXp5enx9f3x7fHx9fX18fICAgICAgYGBgYKBfoGAgICAf3t7e3p6enVweHd5dnV8dXZ8gICDgoODg4OEhISAgoOGhYWDg4KDhIGEhYKCgYKDg4GCgoKAgYB+gYCBgYKDgoKCgoGAgYKCg4KCg4B/gYOBgICChIODgoGCgoGDgoKDg4ODg4SAgoSDg4OBgX+Bg4KDhYKEhISEhISDhISChIOEhIKBgoGBgHt+gX59eXx6enp9fXyBfXp8fH19fHp7fn5+gH9/gYGAgICAgIGBgIB/fX18fH18dnJ2eHh2dH92dX2Hh4OChIWDg4SFhICChYWEhIOCg4SEgISFg4KCgoODgYOCgoCCgH2AgIGCg4KCgoKEgoGCgoOEgoKBgICBgoGAgYOFhIOCg4CCgoOCg4ODg4OEg4CCg4KEg4KCfoOBgoSEgoODhISEhIOEhIOEg4WEg4ODgoKAe4CBf3x8fXp6e32AfX9/fHx6fH59fX19fn5/f39/gICAgH9+foCBgICAfnx9fX5/fn18e3h2f3Z3f4SHg4KDhYODhIaEgYKFhoWEhIODhISChIWFgoKDg4SCg4KDgoKBfoCAgoKDgoODg4SDgoKCg4OCg4GBgYGDgn+ChISDg4KEf4KEg4ODgoSDg4SCgIOEg4SDg4KCg4KChIOCg4OEhISEhIWEg4OEhYSFhIOBgoB9gYJ/fXx8e3x8gH19foB+fn1/fnx8fX19fn5/fn+BgYGBgH99fX6BgYB+fn19fX59fX5+f39/fH2AgYKCg4OGg4SDhoSBgoiHhYSDg4SEhYGFhYWDg4SDhIODgoOCg4F+gYGDg4SCg4OEhIOCg4KEg4ODgoKDgYOCf4KEg4ODgoOAgoWDg4ODhIODhIOBgoSEhYOCgoODgoGEg4GDg4SDhISEhYSEhIWFhYWEg4ODf32BhIB9fXx8fHx/gX5+f39/fX99e3x9fX19fX5+f4CBgIGBgH59fH6Cf39+fn5+fX1/f39/gICAf4CEhIODhIWDhIOFf36CiouFhISDgoOFgYaGhoOEhISEhIODg4OEgn+BgYODhYSFhIWEg4KEhISFhIODgoSDhYKBhISFhYaEgoCDh4SDg4OFhIWFhIGEg4OHgoOCg4GCgYSDgoODhYODhYWEhYWHh4aHhYSEhYSBf4GDf35+fH5+fX+BgH9+fHx/f358enx9fX19fX5+fn9/gIGBf319fIB/gH5+fn5+f3+AgYGBgYKAgYWFhIOEhIKEg4aAgoWFiomEhIOEhYWDh4aGhIWEhIWEhYSEg4SDgYKDg4OEhIaEhYSDg4SEg3yDhHuBhHd5g4F9hH5+cnWDgoF2foOEgX2BdYF5g39/gH6EhIKDg4KBg4SDg4SFg4SFhoSFhn2EeXx+f4N7hYOBhIOAf319fn1+gYOBfXt/fX6Afn18fHx9fX19fH19f4B/gYJ/fX18f4GBgICAgH+BgYGCgYKDg4KChoSEg4WEgYOEhYOEhYSKiIWFhYOFhYSGhoaDhIWFhYWEhYWEhIWCgoOEhYWFhoSFhIOEhYWCaICFanx7cXF8gXOGc3R0fYKDdXNxg4Z0cHVyc3SDdnt9dYF/goOBgnZ5hYCDgIR/hYSChYWCaHpyc3N8gHOCg3+Dg32BfX5+fX6Cg4J8f4F9f4B9fXx8fHx9fHx8fn1+gH+BgX99fX2AgYKBgYGBgIGBgYKBgoKCgoSHhIWEhYSBgoSGhoOFg4aIhoaFg4aGh4eGh4OFhYaFg4KFhoSFhYODg4SEhoaGhIaEg4SFhn1xe4FweXZ+g3+CbnlwdXN8dnl5hXKEg3B2eHF2dHR1cnN0dml/gG5yb3R2bnVsd217c26Ah3ltfXJzdnN2bW14bHB5bHV9f399foGAgX2Af32Af4B/fX18fHx9fH1+f32Af4CAfnx/foCBgoCBgICAgYCAgIKDgoOEhYiGhoCChYODhIeGg4WFhYaHh4SDhoeIiYaHhIWGiIeEg4WGhYWEhIOFhIKFhoaFhoWEhoWHdnB0e3BydX+HhYNtdW92b3x1coR5eYd4cXR3bndod3pucHaCcoN+b3p5eW1vbnpvb213fXiGcHF6cHJ0ZoF1fm57eXNveX+Af319gYB/fH99fIB+gIB+foCAgYB+fn9/foF/gH9+fYB9f4CBgIB+fn+BgH9+goOCgoSFh4eEfoeEg4OFh4aEhoWFhoaIhISGh4iIhoeEhoaLioWEhoeHhYOFhYWEgoaGhoWGhYWGhYZxdXByc29zenl+hHSIdHV+iHZugnKEhnluanJ/cW1zd3x/dXR8hH54cXV3bnl1enF2eHV6eYRxam95eHBreXN6b3p3dnZwgYB/fn5/f356fn19f31/f359gIGDg4CCg4GBhIKBgIGBgH1/f4F+f35+f4GAfn6BgoCAgYSHhoODhoSEhYaHhoWFhYWHhoiFhYaFh4eFhoSGhomIhYSJioiGhIaGhYWDhYaFhoaGhoaFg3iLeXKIentwcIWEeIV4eWtzfnl7a3KDh4N6fG17eXl0fYB2bm+AgG90fHV3cXl9fW1+dW+DhYZ6gHJye3x1cG96bHN8bneCgIF+fn99fXt9e3x9fX9/fn1/f4KCf4GDgYGDgYB/gICAfn9+f31/fn1/gH58fYGAfn6Ag4iFhoOFhYWFhoeFhYWFhoeHiIaEhoWHhoaFhIWFhIWFhomKh4WFhoWGhoWGhoSGhoaGhoWGh4eHhoaEhoWGh4iHhYeGhoOHhoWFg4SFhoWGhIaEg4SEhoSEgYODhISFhIWEhYSGg4aHhYaEhIWHhoSEhYaEhX13hYOEhIKBgX1/fnt8e357fHx9f359fH59gIB9f4F/f4GAfn5+gH5+f35+fX99fX5/fHt8f358fH+BiYaFhIaGhoWHhoWFhYWGhoeIhoSGhYaGhYWDhIWGhYSGhoaGhYWGhIWGhoaGhIeGh4eGhYeIiIiIhoSHhYaGiIaFiIeIhYeGhoiFhYaHhYaGhYOChYWGhYWDhYSEhIWEhYWEhYWDhoaGhoWEhoeGhISFhoOFhIKEg4OFg4OCfYB/e3t8fXt8fH1/fnx8fn2Af31/gH5+gH99fXyAfX5+fn5+f3x8fX57fHx/fHt7fn+Ih4SEiIaGhoeGhYWEhoaGhoiHhIWGh4aFhIODhIaFhIeFhoaFhYaEhYaGh4eFh4aJiIaGh4eIiYiFhYiFhoeGh4aHhoeFh4eGh4WFhoeFh4aFgoOFhoaEhIOEhIOEhoSFhYWFhYOGhoWGhYWGhoWEhIWFg4SHhYOCgoWDhIF+gIB8e31+e3x7fX59fHx+fX5+fX9+fX1+fnx9fH98fn58fYGAfHx8fXx8fH56e3t8foiHgoWIh4eGhoaGhISGhoeGiIaEhYSGhoSFh4OEhYSFh4SFhoaFhoSGhoeHhoaHh4mIhoaIh4iKiIWHiIWHh4WHhoeGh4WIiIeHhYaGh4WGhoWBhISFhoWFhISEg4SFhYaGhoWGhIaFhoeFhYaGhYSDhISDg4eDhIGChISDgYCAgHt7fn18fHx9fXx8fH19fH18fn18fX18fHx8fXx+fXt8gX99fH18fnx8fHp6fHx9iIeChoiHhoeGhoaDhYaFhoaGhYOFhIaFhIiJg4GEg4SGhIaGhoaGhIeHiIiHh4eIioiGh4iHiImIhYiHhYeGhoeHh4WHhoiIh4eFh4eHhYaHhIKEg4SGhYeFhISEhISFhoaGhoaFh4WFh4WGhYeFhIOEg4OEh4GDgIKDg4KCgn+Ae31+fXt8fH59fH19fH17fHx8fHx8fXt7e318e359e3x/fX18fX1+fXx6ent7fHyIh4KGhoaGh4aGhYOFhoWFhYWEg4WChoSDiId/enqChYaEhoaFh4aEh4eJiIiHhoiKh4aHh4eIiYeFiIeGiIeGhoeHhYeGiIiHhoWHhoiGhoeDg4SEg4aGh4WFhISEhYaGhoaGhYaHhoaHhoaEhoWDhIODgoOGgYN+goKDgIOCf398f35+fHx9f318fX18fXp7e3p7fHx8e3t7fnt7fXx7e358fHx8fX5/fXt6fHp8fYmHg4aFhoWGhoWEhIWFhYWFhIOBhYGGhIKEhHyAhn+ChYWGhYWGhYSHh4iIiIaFiYqHhYeGh4eIh4WIhYaHiIaGh4eGh4aIiIeFhoeGh4WFh4OEhoWEhoaHhoWEg4WFhoaGhoaFhoaHhoeHhYOGhYOCgoKAg4WCg36BgYF/g4F/fn5/fX98fH1/fXt9fXx+enl6eXt8fXt7e3t+fHx8fHp7fXx8fHx+fYB8e3t7e3x7iYeEhoSGhIaGhYSFhoWEhIOEgoCDgYWDgYJ/eoSMe4CEhYeGhoaFhIeIh4aHhYWHiYeEh4WGhoiGhYeEhoeIhoaIh4eHhoeIhoSGhoaHhYWHg4SFhIaGhoeFhISDhYWGhoeGhoWGhoaFhoaEg4SFgoGCgYCDg4OCfYGBgH6DgX5/f4B8f3x9fX59e359fH15eXp5e319enp7e318fXx8ent9fHx9fH5+gHx7e3x+fXyIh4WGhYeEhoSFhYWFhYODgYOBgIKBhYJ/gH9/fXx7gYSFhoaEhYSDh4eGhoaFhIaJhoKGhIaGhoWFh4WHiImGhYiHiYeGhoeFhIaFhYeFhIeDhIWEiIaGh4WFhIKFhYaFh4aHhIaGhoaFhoODg4WAgIGAgIOBg4B8gYB+foKAfYB/gXx/fH1+fX57fn18fHl6enl6fX15enp7fHt8e3t6e319fH18f35+fHt7fX59fIiGhYaGhoSFhYSFhYSDgoKAgoGAgICDgX5+foB5en2Ag4OEh4WEg4OHhoOEhYSChYiFgoSDg4WFhYWHh4aIiIaFiIeJh4aFhoWDhoSFh4OEhoSEhYSHhoWGhYaEgoWFhoaGhoaEhYaGhYWGgoKDhH9+gICAgYCDgHuBf31+gn5+gH6Afn99fX59f3t/fXt6eXp6eXp8fXl6ent7enx6e3t7fH19fXyAfn18fH1/fnx7h4WFhoaGhoSFhIWDhYKBgICAgYB+f4KCfX1/f3t/f4KDg4WGhYSDg4aDgYOEgoCFh4WCg4GBg4WEhIaGh4iHhYWIhomHhYSEhIKFg4SGgoOFhISGhIeGhYWFhoOEhYSFhoWGhIOEhYWDhYWBgIODf35/gH9/gIN/fIB9fX+CfYCBfn6Bfn5+fX1/e398e3p5enp5enp8eXp6e3t7fHp7e3t7fX59fYB9fXx8fYB/fXyGg4aGhoaGg4SDhoKFgYGAf3+AgH5/gIJ8fn9/foCAgYKChIWDgoGChIGAg4KBgISFhIKBf4CCg4OEhYWHhoWEhoeFh4aGgoOCgoOCgoWBg4WEhYaEhoaHhoaFgoSEg4SGhYWDhIODhIOFhIB/goJ/fX5/fn5/hH57f3x8gIF9gYB9fYN9fn59fX57fnt7enl7enl6ent5enp6e3t8ent8e3t+fn1/gXx9fHx9f4B+gIaEhYWEh4SDg4KGgoOAgYB+fn+AfX9/gnx9f39+fn+BgYKEg4KBgYKCf4CBgoCAgoWEgoB/gIGCgYOFhYeFhISGhoOFg4WBgoGBgoGCg4GChISEhYWGh4eGhYSDg4ODhIWFhIGDgoOChIODgH+AgX59fX5+fH6Dfnx+fHyBgH6Cf31/gnx/fn19fHx8e3t6enp6eXt6enp5eXp6e3x5e317fH5/f4GAfX59fX1/gICAhoSEhYSFgoSCgoSCgoCBgH59fn9+fn6AfX2Af35+foGBgoODgoSHgYF+gICBf3+ChIOBf35/gIJ/goWEhYOCg4WFgoSBg4CBgIGBgYKBgIGEg4OGhYWHh4WEhIWCgoKDhYSCgYGBgYCFg4F/foB/fnx9fn18foN9e358fYF/gIN9fYCBf35/fXx8fH17e3p6enl5e3l6enl6ent7e3p7fXx8f3+BgoB+gH+AgH+AgYDKysrKysrKysrKysrLy8vLy8vLy8vLy8zMzMzNzc3Nzc3Nzc3NzczMzMvLy8vLy8vLy8vLy8vLzMvLy8vLy8vLy8vLy8vMzMzMzM3Nzc7Oz8/Pz9DQ0NHR0dLS0tLS0tLT09PT0tLS0tLS0tPT09TU1NTU09PT09PT09PT09PT09PT09PT09PT09PT09PT09PS0tLS0tLS0tLS0tPT09PT1NTV1dXV1dXV1dXV1dXV1dXV1NTU1NTT09PT09PT09PT09TU09PU1NTU1NTU1NTU09PT09PS0tLS0tPT09TU1NTU1NPT09LS0tLS0tLR0dHR0dPHhnNlYFtLWWdVTUZIQD03Nzg5Nzw8PDo8Oz42Oj04PDs6OTg3ODs7Oj87PTs8PD47P0E/QkJBQ0RFREE+PTw7QENDQUBDQ0FBR0hHSUtSwtXS09PT09TU1NTU1NTU1NTU1NXV1dXV1dXV1dXVysrKysrKysrKysrKy8vLy8vLy8vLy8vMzMzMzMzNzc3Nzc3Nzc3MzMzMy8vLy8vLy8vLy8vLzMzMy8vLy8vLy8vLy8vLzMzMzc3Nzc3Oz8/P0NDQ0NHR0tLS0tLS09PT09PT09PT09PS09PT09TU1NTU1NTU09PT09PT09PT09PT09PT1NTU1NTU1NTT09PT09LS0tLS0tLT09PT09PU1NTU1dXV1dXV1dXV1dXV1dXV1dXV1NTU1NPT09PT09PT09PU1NPT09TU1NTU1NTU1NPT09PS0tLS0tPT09PU1NTU1NTU09PT09PS0tLS0tLR0dHSzIxyZ2BcTVllUktHSz87Mzc4Ozg5Pj05PDpBOjs9Nzs8PDo6Nzg6Oz0/Oz88PTw/Pj9BPUFBPkNDREJAQT46Oz9DREFDRERCQklHSEhJTr7V0tPT09TU1NTU1NTU1NTU1NXV1dXV1dXV1dXV1crKy8vKysrKysrKy8vLy8vLy8vLy8vLy8zMzMzMzM3Nzc3Nzc3NzMzMzMzMy8vLy8vMzMzMzMzMzMzLy8zMzMzLy8vLzMzMzc3Nzc3Ozs/P0NDQ0NDR0dLS0tLS09PT09PT09PU09PT09PT09TU1NXV1dTU1NTT09PU1NPT09PT09PT1NTU1NTU1NTU1NPT09PS0tLS0tLS0tPT09PT1NTV1dXV1dXV1dXV1dXV1tbV1dXV1dTU1NTT09PT09PT09PU1NTU09TU1NTU1NTU1NTT09PT0tLS0tLT09PU1NTU1NTU1NTU09PT09PT0tLS0tHR0s+Sd2hfXk9XZ01LRks9ODc2NTk5OTw+OT88RDo7PDc5PD07OTc5Ojw9QDs+PT47PD48PT5BQD5EQ0NDP0E9Ojs9QkNFQ0NEQT9FSEpJSky61dPT09TU1NTU1NTU1NTV1dXV1dXV1dXV1dXV1dXLy8vLy8vLy8rKysvLy8vLy8vLy8zLy8vMzMzMzMzNzc3Nzc3Nzc3MzMzMzMzMzMzMzMzMzMzMzczMzMzMzMzMzMzMzMzMzc3Nzc3Ozs/Pz9DQ0NDQ0dHS0tPT09PT09PT09TU1NTT1NTU1NTU1NTV1dXU1NTU1NPU1NTU09PT09TU1NTU1dTU1NTV1dTU09PT09LS0tLS0tLS09PT09TU1dXV1dbW1dXV1dXV1tbW1tXV1dXV1NTU1NTT09PT09PT1NTU1NTU1NTU1NTU1NTU09PT09LS0tLT09PU1NTU1dXV1dTU1NTT09PT09PT0tLS0dHRmn5nYWJOVWpKSElLPzw6OTM3Njc3PTs+OT06Ojo4ODo7Ozg4Ojs7PD46PT09Ojw/PD0/QkA/Q0RDRD5APT08QENEQ0JEQkQ+REhJSUtMttfT09TU1NTU1NXV1dXV1dXV1dXV1dXV1dXV1dXVy8vLy8vLy8vLy8vLy8vLy8vLy8zMzMzMzMzMzMzNzc3Nzc3Nzc3Nzc3MzMzMzMzMzMzMzMzNzc3NzczMzMzMzMzMzMzMzc3Nzc3Ozs7Pz8/Q0NDQ0NHS0tLT09PT09PT1NTU1NTU1NTU1NTU1NTV1dXV1NTU1NPT1NTU1NTU1NTU1NTU1dXV1NXV1dXV1NTU09PT09PS0tLT09PT09PU1NXV1dbW1tXV1dbW1tbW1tbW1dXV1dXU1NTU1NTU1NTU1NTU1NTU1NTU1NXU1NTU1NTT09PT09PT09PU1NTU1dXV1dXV1dTU1NTU09PT09PS0tLR0p+DaV9kU1hsSEhIS0A9Nzg0NzY6Oj87RDw8OTw8OTg6OTo6Ojs8Ojo7OT49Pjk9QDs/QUFCP0JCQUM9Pz8+PEBCRUNDQkBBO0ZJR01MSbLY09TU1NTU1NXV1dXV1dXV1dXW1tbW1tbV1dXW1svLy8vLy8vLy8vLy8vLy8vLy8vMzMzMzMzMzM3Nzc3Nzc3Nzc3Ozc3NzczMzMzMzMzMzc3Nzc3Nzc3Nzc3Nzc3Nzc3Mzc3Nzs7Ozs7Pz8/P0NDQ0NHS0tLS09PT09PT09TU1NTU1NTU1NTU1NTV1NXV1dTU1NTU1NTU1NTU1NTV1NTU1dXV1dXV1dXV1dTU1NTU1NPT09PT09PT09PU1NXV1dbW1tbW1tbW1tbW1tbW1tbV1dXV1dTU1NTU1NTU1NTU1NTV1NTU1NXV1dXU1NTU1NTT09PT09PT1NTU1dXV1dXV1dXU1NTU1NTT09PT09LS0tSjiGxfZlJWakdIR0lBPjM2Njo7PDhDPEJBPjxBPDg5Ojw6Ojw8PDk8PTo7PD09PD89QD9AQT9AQUBCPD4+PzxCQ0NDRkBBQT1ISklOTUeu2NPU1NTV1dXV1dXV1dXV1dbW1tbW1tbW1tbW1tbMzMvLy8rKysvLy8vLy8vLy8vMzMzNzc3Nzc3Nzc3Nzc3Nzc3Nzs7Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Ozs3Nzc3Nzc3Nzc3Nzs7Ozs7Oz8/P0NDQ0NHR0dLS0tPT09PT09TU1NTU1NTU1NTU1NTU1NTV1dXV1dTU1NTU1NTU1NTU1dXV1dXV1dXV1dXV1dXU1NTU1NTT0tPU1NTU1NTU1NTV1dbW1tbW1tbW1tbW1tbX19bW1tXV1dXV1dXV1dXV1dTU1NTU1dXV1dXV1dXU1NTU1NTU09PT09PT1NTU1NXV1dXV1dXV1dXV1NTU1NPT09PT0tLWroprY2VSWGhMSkdJQjg0OTQ6Ozo5QDk/Q0VAPDw5OTk9Oj07PDw6PTw7OTw9Ozs/PUA9PT5AQD9CQT5APD05QERDQkFBQj48SEpLTU5IqNnU1NXV1dXV1dXV1dXW1tbW1tbW1tbW1tbW1tbWzMzQ0dDQ0NDQ0dHR0dHR0c3Ky8vLzMzMzMzMzMzMzM3Nzc3Nzc7Ozs3Nzc3Nzc/Pz8/Pz8/Pz8/Pz9DQ0dHR0dHR0dHR0dHS0tHV2djY2NnZ2dra2tvb29vZ2dnZ2dna2tra2tra2tjW19fX19fX19jX19fX19vb29vb29vb29vb29vb2NbX19fX19fX1tbW1tbW09LT09PT09TU1NTU1NbW1dXV1dXV1dXV1dXW1tbX1tbW1tbV1dXV1dXV1dXV1dTU1dXV1dXV1dXU1NTU1NTU1NTU09PU1NTU1NXV1dXW1dXV1dXV1dTU1NTT09PT09PS1bqKa2hoUlhlSUlMT0A5OTo0O0E8Nz05QUM+QD89ODo6Ozk9Oz4/Ojs8PDo7PDo7Pj1APT8/P0FAQUE/QTw8Oz5BRENBREA9PElJSk1ORqPa09TV1dXV1dXV1dXW1tbW1tbW1tbW1tbW1tbW1szNloSGhoaGhoeHh4eHh4Ky4t3d3t7e3t7e3t7e3t3S0NDQ0NDQ0NDQ0NDQ0ci5ubm5ubm5ubm5ubq6t6WkpKSkpKSkpKSkpKSnhmBjY2NjY2NjY2NkZGRlhIuKioqKioqKioqKioemuri4uLi4uLi4uLi4ubSPjIyMjIyMjIyMjIyMiaK/vL29vb29vb29vb28v9LS0tLS0tLT09PS09PT3OPi4uLi4uLi4uLj4+Pi2NfX1tbW1tbW1tbV1dXV1dXV1dXV1dbW1dXV1dXV1dTU1NTU1NTU1NTV1dXV1dXW1dXV1dXV1dXV1NTU1NTT09PT09XDkXFrak5TYkxMVk48Ojo3Nz5DPzg+Oj8/QTw/QDc7Ojs7PTs+Pjo7PD48Oz07PT8+QDw/Pz1AQEBBPj88PjxAQUVCQkZAQD9HSEpLT0ae2tXV1dXV1dXW1tbW1tbW1tbW1tbW19fX19fX19fMzm5QU1NTU1NUVFRUVFNMoPPr6+rq6urq6urq6uvp1dLS0tLS0tLS0tLS0tTEqaqqqqqqqqqqqqqqq6aGhIWFhYWFhYWFhYWFik4MEhISEhISEhISEhIRE0pUU1NTU1NTU1NTU1NPg6ejo6Ojo6Ojo6Ojo6ScWlVWVlZWVlZWVlZWVlJ8rqqqqqqqqqqqqqqqqLDS0tLS0tLS0tLS0tLS0eDs6+vr6+vr6+vr6+vr6dnX19fX1tbW1tbW1tbW1dXV1dXV1dbW1tbV1dXV1dXV1dXV1dTU1NTV1dXV1dXW1tXV1dXV1dXV1dXU1NTU1NTU1NPUy5h2bGlKTl9NUlVNPjw8Nzs/Qz42Ojc+Pjs9Qj85PDk9Ozw6PD07PTs9Ozs9PD0+PT07QT08QUBBQT08Pzw7QEJDQURFPUFAQ0ZLS09GmNzV1dXV1dbW1tbW1tbW1tbW1tfX19fX19fX19fXzM5xVFhXV1dYWFhYWFhXUKHx6enp6enp6enq6unq6dXS0tLS0tLS0tLS0tLUxaqrq6urq6urq6urq6yoiIeHh4eHh4eHh4eHh41SEhgYGBgYGBgYGBgYFxpOWVdXV1dXV1dXV1dXU4WopKSkpKSkpKSkpKSlnl9ZWlpaWlpaWlpaWlpWgK+rq6urq6urq6urq6qx0dLS0tLS0tLS0tLS0tHf6+rq6urq6urq6urq6unZ19jX19fX19fX1tbW1tbW1tbW1tbW1tbW1tbV1dXV1dXV1dXV1dXV1dXV1dXW1tbW1tXV1dXV1dXV1dXU1NTU1NTU1NGcenFpSlRdT1JVTkQ+Pzs/QEA4Ojs4PDs7PD86Ozs4Ozk5Ozw7Ojw5Ozs8Ozo9PT0+PUE/Pj8/Pj08PT88PEFBQ0FERTw+QEVGSktNRpPc1dXV1tbW1tbW1tbW1tbW1tfX19fX19fX19fX183OeF5hYGBgYGFhYWFgYFqk7ufn5+fn5+fn5+fn5+bV0dLS0tLS0tLS0tLS08Wtrq6urq6urq6urq6vq46NjY2NjY2NjY2NjY2SXSInJycnJycoKCgoKCcpWmNiYWJhYmJiYmJiYl6MrKmpqampqampqampqqNoZGVlZWVlZWVlZGRkYYayr6+vr6+vr6+vr6+uttLS0tPS0tLS0tLS0tLS3+np6enp6enp6enp6enn2djY2NjY19fX19fX19fX19fX19bW1tfX19fW1tbW1tbV1dXV1dXV1dXV1dXV1tbW1tbW1tbW1tbV1dXV1dXU1NTU1NTWo3txZElbYE5OVU9AQT89REI+Oz06OTs6PT07PDs6OTg5OTs8Ozw8Ojo7PDo7QD08PTxAQTxBQTs7PEA/PD1CP0RDQ0U8PkJERkpMTEWN3NXV1tbW1tbW1tbW1tbX19fX19fX19fY2NjY2NjNzcfFxcXFxcXFxcXFxcXEy9DPz8/Pz8/Pz9DQ0NDQz87Ozs7Ozs/Oz87Oz8/NzMzMzMzMzMzMzMzMzMvJycrKysrKysrKysrKysfCw8PExMTExcXFxsbGxsvMy8zLzMzNzMzMzMzLz9HR0tLS0tLS0tLS0tLRzczMzMzMzMzMzMzMzMvP09PS0tLS0tLS0tLT09LU1NTV1dXV1dXW1dbW1tjY2NnZ2dnZ2dnZ2dnZ2djY2NjY2NjY2NjY2NfX19fX19fX1tfX19fX19bW1tbW1tbW1tXV1dXV1dXV1dbV1dbW1tbW1tbW1tXV1dXV1dTU1NTU169/cF5GXmJQUVdOR0ZDQ0lBPz07PDo8OEBCPD04Ojo4OTg7Pzs8PDs7PDw8PD87PD46Pj44PkI8Pj1BPjw+QkBERUNAPD5APkNJSUtEh9zV1tbW1tbW1tbW1tbX19fX19fX19jY2NjY2NjYzs3Pz8/Pz8/Pz8/Pz9PPz87MzczP09LSzs3P0s7Ozs7Ozs7Q1NLPztHV1NPOztPTz8/Pz8/Pz8/Pz8/Pz8/P0NDQ0NDR0dHR0dHS09PU1NTU1dXV1tbW1tfW1tbX1tfX19fX19fX19bW1tbW1tbW1tbW1tbW1tfX1tfX19fX1tbW1tbW1dXW1dbW1tbW1tbW19bW1tbW1tbX19fX19fX19fX19jY2NjY2NjY2NnZ2dnZ2dnZ2djY2NjY2NjY2NjY2NjX19fX19jY19fX1tbW1tbW1tbW1tbW1tbW1dbW1dbW1tbW1tbW1tbW1tXV1dXV1NTV1di4gm9XSl9jUlFaS0hBQTxCPT07Oj4+PD4/PT0/Nzk6OTk3OD48PD47Ozw7PDs/PT0+OTs7OT0+P0A+QD07OkI/QkNCPz0+QD5CRUdKQoDc1tbW1tbW1tbW19fX19fX19fX2NjY2NjY2NjY2M7Ozs7Ozs7Nzc3Nzsqfys3Nzc3QuYOEi8fTwJrLz87Ozs7Pypal0dOtg4OVz9KkodDOzs7Ozs7Ozs7Ozs7Oz8/Pz8/P0NDQ0NDQ0NDR0dHR0tLT09PU1NTU1NTV1dXV1dXV1dXV1dXV1dXV1dXW1tbV1dXV1dbW1tbV1dXV1dXV1NTU1NXV1dXV1dXV1dXW1tbW1tbW1tbX19fX19fX19fY2NjY2NjY2NjY2NnZ2dnZ2dnZ2dnZ2dnY2NjY2NjY2NjY2NjY2NjY2NfX19fX1tbW1tbW1tbW1tbW1tXV1tbW1tbW1tbW1tbW1tbW1dXV1dXV1dXYwIBuVU9gY1dZW0xMQ0A9PTs9Ojw+Qj5CQ0A8Ojg5ODo6Ojc7Pz4/PDw7PDo5Pzw8PTg5PD9BPj09PUFAPTtBQkBCQz47QD9BQUlHSkF629bW1tbW1tbX19fX19fX19jY2NjY2NnZ2djY2dnOzs7Ozs7Ozs7OzdKpj63Rzs7Ozpu3tqSiwJOerNPOzs7Pz5yqna3Lmrq4mbWzn6Gp0s7Ozs7Ozs7Ozs7Pz8/Pz8/Pz9DQ0NHR0dHR0dHS0tLT09TU1NTU1dXV1dXV1dXV1dXV1dXV1dXV1dXW1tbW1tXV1dbW1tbW1tXV1dXV1dXU1dXV1dXV1dXW1tbW1tbW1tbW1tfX19fX19jX19fY2NjY2NjY2djY2dnZ2dnZ2dnZ2dnZ2dnZ2djY2NjY2NjY2dnY2NjZ2NjY19fX19fX19bW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tXV1dXV1dXV18h/b1pTYWVeXVxPSkQ9QD8+Ozc6Pjk/RD9BOTg3ODk7Ozw4OT89PTw9PD47OkE7OTs5OzxDQDw7PT5AQT49QkQ/QkM9PT8+Pz5ISUg/ddrW1tbX19fX19fX19fX2NjY2NjZ2dnZ2dnZ2dnZzs7Ozs7Ozs7Ozs/Inrym0tDQzsqgl36Cw6abr6fUz8/P0MuUiJqevKKMgI3FnpiVnMjQzs7Ozs7Ozs7Oz8/Pz8/Pz8/Q0NDR0dHR0dLS0tPT09TU1dXV1dXV1dXV1dXV1dbV1dXV1dXV1tbW1tbW1tbV1dXV1dXW1tbV1dXV1dXV1dXV1dXW1tbW1tbW1tbW1tbW1tfX19fX19jY2NjY2NjY2NjY2NjZ2dnZ2dna2dnZ2dnZ2dnZ2dnZ2djY2NjY2NnZ2dnZ2dnY2NjY2NfX19fX19fX19bW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1dbV1dXV1dfNiHNdWGloXl9gT0lGOkFAPj88PDo2P0JAQjo2NDc6Ozo8Ojk+PD49PTs/PTxBPjw8Ojw8PTw6PEA9QEI+PkFCPUNDPT0+Oz9BRUtIQHDZ1tbX19fX19fX19fY2NjY2NjZ2dnZ2dnZ2dnZ2c/Pz8/Pz87Ozs7SrKWnqdXAvNLHnY+ey9PJipmq1M/Pz8/RvciZm6ygiKzWupmhnbCy08/Pz8/Pz8/Pz8/Pz8/Pz8/Q0NDQ0dHS0tLS09PT1NTU1dXV1dXV1dbW1tbW1dbW1tbW1tbV1tbW1tbW1tbW1dXV1dXV1dXW1dXV1dXV1dXV1dXW1tbW1tbW1tfX19fX19fX19fX19jY2NjY2NjY2NjY2NnZ2dnZ2dnZ2tnZ2dnZ2dnZ2dnZ2dnZ2dnY2dnZ2dnZ2dnZ2dnY2NjY19fX19fX19fX19bW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbV1dXW0JB1W1tqaWFeXVNOSTxDQEE+QD46OEZBP0M6NzQ5Ojo5Ozs4Oz0/Pj49QT08P0A9Pjw8PDw8Oj1AQD8/PT5CQD9AQkA8QD0+QUVLRz9r19fX19fX19fX2NjY2NjY2NjZ2dnZ2dnZ2dnZ2tnPz8/Pz8/Pz8/QzJ2Nl6zQmpfKxZ6ynpbN1q2ZqtTPz8/Pz9KXlKKxqK2bprKZlq+zqtXQ0M/Pz8/Pz8/Pz8/Pz8/P0NDQ0dHS0tLT09PT1NTU1NXV1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbV1dXV1dXV1dXV1dXV1dXV1dXW1tbW1tbW19fX19fX19fX19fY19fY2NjY2NjY2NjY2NjZ2dnZ2dnZ2drZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2djY2NjY2NfX19fX19fW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1dXV1tKUcl5ea2tqZV1PTEc/RENDQDo9OzxCPD49OTY0Ojk5Ojo5Nzs/QDs8PUA8PEE+PD07PTw/PDo8Q0A+PTs9QD5CPkBBPkA9QD9GSUQ/ZtXX19fX19fY2NjY2NjY2NnZ2dna2tra2tra2traz8/Pz8/Pz8/P07GigJuvyaCjv8qcpYynrdiqmarUz8/Pz9Ozm8SawaKdlaeQmoSdk6TV0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NHR0tLT09PT1NTU1NXV1dbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1dXV1dXV1dbW1tXW1tbW1tbV1tbW1tbX19fX19fX19fX19fY2NjY2NjY2NjY2NjY2NjY2dnZ2dnZ2dna2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2djZ2djY2NjY2NfX19fX19bW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbSk3BgXnBoZmVaUUhHQkVDQEA3Ojo8Pjo8OTc2NTk6Njo8Ozc8QEA8Ojo9Oj0/Pj08OUA8PDo6OT9APj08PUBBQz9APz5BOz9ARkpCP2LS2NfX2NjY2NjY2NjY2dnZ2dnZ2tra29vb29vb28/Pz8/Pz8/P0M6fkGyclteqo9PSrqa1mJ/Vqpmq1M/Q0NDRzo2QnsSntKuff6CphZmk1dHR0NDQ0dHQ0NDQ0NDQ0NDQ0NHR0tLT09PT1NTU1dXV1dbW1tbX19bW1tbW1tbW1tbX1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tfW1tfX19jY2NfX19fX2NjY2NjY2NjY2NnZ2dnZ2dnZ2dnZ2dna2tnZ2dnZ2dnZ2dnZ2dnZ2dnZ2djY2dnZ2dnZ2dnZ2dnZ2NjY2NjY2NjX19fX1tbW1tbW1tbW1tbW1tbX19fX19fW1tbW1tbX0pNuYFxxZGdkWlVKQENGQ0FCODs/PD07PDw4NTU4OTY4Ozo5PDo+Pzw9PTk8Pz49Ojo+OTw6Ojg+Pzw9PTw+QEFDQT48PDpCRERKRkJd0NnX19jY2NjY2NjY2dnZ2dna2trb29vb29vb29vPz8/Pz8/Pz9G9n8O31pfA09HQ0srSzZeb1KqZq9XRz9DQ0cvaqJmwztrBnIC8raaYr9bR0dHR0dHR0dHR0NDR0dHR0dHR0tLT09PU1NTV1dXV1tbW1tfX19fX19bW1tbW1tfX19fW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW19fX19fY2NjY2NjY2NjY2NjY2djZ2dnZ2dnZ2dnZ2dnZ2drZ2tnZ2dnZ2dnZ2dnZ2dnZ2djY2NjY2NjZ2dnZ2dnZ2dnZ2dnY2NjY2NjY2NfX19fX19fX19fW1tfX1tbX19fX19fX19fX19bW19GRbF1cb2doYl1PRkBISUdFQDw8Pj48PT48NzU2Ojk3OTs6Ojs4QD86PDw5PD49Ozs6Pzk/Ojs5PT49Pjw7PTxAQ0I/Pz47Q0ZGR0hEWc3a2NjY2NjZ2dnZ2dnZ2dna2trb29vb29vb29vb0NDQz8/Pz8/Pz5V+e6WS1KKa08ySl6ObodirmavV0pem1cmOpZqgp5Ghn6CZqJaYm7vV0dHR0dHR0dHR0dHR0dHR0tLS0tLS09PU1NTV1dXV1tbW19fX19fX19fX19fX19fX19fX1tbW1tbW1tbW1tbX19bW1tbW1tbW1tbW1tbW1tbW1tbW1tfX19fY2NjY2NjY2NjY2NjY2dnZ2dnZ2dnZ2dnZ2dnZ2tra2tra2tnZ2dnZ2dnZ2dnZ2djY2NjY2NjZ2dnZ2tnZ2dnZ2dnZ2djY2NjY2NjY2NjX19fX19fX19fX19fX19fX19fX19fX19fX1tfPjGRWXnBrXGBgTkVITUlJT0M+OkI9PUBCOzU0Nzw6Nzo7Ojo7OT09OTo6OT0+Pz07OT47PDo8Ozk+PD47PD0+QENCPz5BPEFDR0ZGRVXJ29jY2NnZ2dnZ2dnZ2dra2tvb29vb29zc3Nzc3NDQ0NDQ0M/Pz9DR1aeZrcmjqL7KnbGdo7XZqZup2Lirocq7oaannrekq6Oew6CrpJzR09LS0tLS0tLS0tLR0dHS0tLT0tPT09PU1NTV1dbW1tbX19fX19fX19fX19fX19fX19fX19bW1tbW1tfX19fX19fW1tbW1tbW1tbX19fW1tbW1tbW1tbX19fX2NjY2NjY2NnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dra2tra2tra2trZ2dnZ2dnZ2dnZ2djY2NjY2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnY2dnY2NjY2NjX19fX19fX19fX19fX19fY2NfX19fX19fYzYZdV2JvZE9dVEtIRlNRS0xAPj1EPD9DRj01NTc7OTY6Ozo8PTo7Pzo6OTg6PT0/Pjs/Oz49Ojs5Pjs9PD0+QURCQD8+PzxAQUVHRURSxdvY2dnZ2dnZ2dnZ2tra2tvb29vb3Nzc3Nzc3NzQ0NDQ0NDQ0NDQ0NO5gL3Tm5bP1LWLkZ/T1LyBu9TOlKDT056QjbbZp4+PrNjCj4281dLS0tLS0tLS0tLS0tLS0tLT09PT09PU1NXV1dbW1tfX19fX19fY2NjY19fX19fX19fX19fX19fW1tbX19fX19fW1tbW1tbW1tbW19fX1tbW1tbW1tbX19fX19jY2NjY2NnZ2dnZ2dnZ2dnZ2tnZ2tra2tra2tra29ra2tra2tnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2NjY2NjX19fX19fX19fY2NjY2NjY2NjY2NfX2ct+WlVqaltMX01KTEpVTEZCPD0/R0ZIS0g9NjU3Ojk3OTo7Ojw9OT45OTo4Oz0+PkE+PTk8PDo9Pj46PTk5Oj9FQUA+PT8/QkBHRURFUMHc2dnZ2dnZ2dna2trb29vb29vb3Nzc3Nzc3dzc0NDQ0NDQ0NDQ0NDQ0cHR0crI0tDUxLjS0tHSwtLQ08fM0tHSusTV0tW/v9bS1cXE1dLS0tLS09PT09PT09LS0tPT09PU1NTU1NXV1dbW1tfX19fX19fX2NjY2NjX19fX2NfX19fX19fX19fX19fX19fX1tbW1tbW1tbW1tfX1tbW1tbW1tbW19fX19fY2NjY2NjY2dnZ2dnZ2dnZ2dra2tra2tra2tra29va2tra2tra2dnZ2dna2tnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dna2tnZ2dnZ2dnZ2djY2NjX19fX19fY2NjY2NjY2NjY2NjY19rHd1xSZ2laTlpOTFBRV0VKPz89P0FFTExBPjc3NTs4ODk5Ojs8Pjw+ODo6OTs+P0A9Pj46NTo6Oz0/Ojs5Ojw+QkJAPz8/P0FCR0RDRE683dnZ2dnZ2dna2tvb29vb29vb3Nzc3Nzc3d3d3dDR0dDQ0NDQ0NDQ0NDS0NDR0dDQ0dPU0dHR0dPR0dHS0tHR0tXU0tLS1NXT09PU1NLS0tPT09PT09PT09PT09PT09PU1NTU1dXV1dbW1tfX19fX2NjY2NjY2NjY2NfX19jY19fX19fX19fX19fX19fX19fX1tbW1tbW1tbX19bW1tbW1tbW1tfX19fX2NjY2NjY2NnZ2dna2tra2tra2tra2tra2tra2tvb2tra2tra2trZ2tra2tra2tra2tra2tnZ2dnZ2dnZ2dnZ2trZ2tra29ra2trZ2dnZ2dnZ2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjbwXNYVWlrU0xSTlBSWVRGSTw+Qz9BQkVLPj43ODY5Njc4OTk7Oz0/QDw9ODk7Ozs/Pjw8OTU6PT47OTk7PD8/P0JCQT1BPUBBQkZCQkJLtd7Z2dra2tra2tvb29vb29vc3Nzc3Nzd3d3d3d3R0dHR0dHR0dHR0dDQ0NDQ0NDQ0dHR0dHR0dHR0dHR0dHS0tLS0tLS0tPT09PT09PT09PT09PT09TU1NPT1NTU1NTU1NXV1dXV1dXW1tbX19fX2NjY2NjY2NjY2NjY19fY2NjX19fX19fX19fX19fX19fX19fX19fW1tbX19fX1tbW1tbW1tbX19fX19jY2NjY2NnZ2dna2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tnZ2dnZ2dnZ2NjY2NjY2NnZ2dnZ2dnZ2NjY2NjY3LxvVFRsbExLUkpUUlVLRkQ6PkdEREFERjw/ODk6OTY5OTo3PD07PkA9PTc5Ojs5Pjs5OTY2Oj1AQT47PDk6Pj9DQT4/Qj0+QkNFQkFCSrDe2dra2tvb29vb29vb29vc3Nzc3Nzd3d3d3d3d0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0tLS0tLS0tLS0tLS0tLS0tPT09PT09PT09PT09PT1NTU1NTU1NTU1NTU1dXV1dXV1tbW1tbW19fX19jY2NjY2NjY2NjY2NjY2NjY2NjY19fX19fX19fX19fX19fX19fX19fX19fX19fW1tbW1tfW19fX19jY2NjY2NjZ2dnZ2dra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2trZ2dnZ2dnZ2djZ2dnZ2dnZ2dnZ2dnZ2dnY2Ny2a1NbcGtLVVdSXFFXSEQ+PEJKRT1ISj89PDc4ODo1OTg5Njs+PD1APDw1OTk8Oj87OTk0ODw9PUFBPD47Ojw+QD89PkE9PUNGR0I/Qkmq39ra29vb29vb29vb3Nzc3Nzc3N3d3d3d3d3d3dHR0dHR0dHR0dHR0dHR0dHR0dHS0M/U0M7P0tLT0tLS0tLS0tLS0tPT09TU1NTU1NPU1NTU1NTU1NTU1NTU1NTV1dXV1dXV1dbW1tbW19fX19fY2NjY2NjY2NjY2NjY2NjY2NjY2NjX19fX19fX19jY2NfX19fX19fX19fX19fX19fX19fX19fX19jY2NjY2NjY2dnZ2dra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tvb29va2tra2tra2tra2tra2tra2tnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dndsGRTYXJfT1pUV19RUkdCPUVJTEFBTEQ/Pzs5ODg5Mzg2ODY5Pj0+Pz06Njo7Pjs9PTo5Njg6PTtAQDxAPz0/P0I+PD48PEJFSElCPkNJpODa29vb29vb3Nzc3Nzc3Nzc3N3d3d3d3d3d3t7S0tLS0tLS0tLS0dHR0dHR0dPT0bm7zLqbnLrQyNPT0tLS09PT09PT09PU1NTU1NTU1NTU1NTU1dXV1dXV1dXV1dXV1dbW1tbW1tbX19fX19fY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjX19fX19fX19fX19fX19fX19fX19jY2NjY2NjY2NjZ2dra2tra2tra2tra2tra2tra2tra2tra29va2tra29va2tvb2tra2tra2tra2tra2trb29vb29va2tra2tra2tra2tra2tra2tra2tnZ2dnZ2trZ2dnZ2dnZ2dnZ2dnZ3qpfVWBuW1VZUVpeT0xHQ0ZNSUZEREo7QUE7PDg4NjQ4Njk4Nzw/QT89Ojc8Pz48Pz87OjY4OD09QEE9QD5BQD1AOjs6Pj1BRUdJQkBDR57h29vb29vc3Nzc3Nzc3Nzc3d3d3d3d3d7e3t7e0tLS0tLS0tLS0tLS0tLS0tO+wMqaoKKViJGeqpOpz9TT09PT09PT09PU1NTU1NTU1NTU1NTV1dXV1dXV1dXV1dXV1tbW1tbW1tbX19fX19fY2NjY2NnZ2dnZ2dnZ2dnZ2djY2djY2NjY2NjY2NjY2NjY2NjY2NjX19fX19fX19fX19fX19fX19fY2NjY2NjY2NjZ2dna2tra2tra2tra2tra2tra2tra29vb29vb29vb29vb29vb29vb29ra2tra2tra2tra2tvb29vb29va29vb29vb29va2tra2tra2tra2tra2tra2trZ2dnZ2dnZ2dnZ2d6iXFVeblheXU5aUFROQ0NMSUlJRkpEPEJBPDs4NzY3OTc3OTk9P0E/PDo5QD88PkI/Ojg3NzY9Pz9APUBBPz88PTs7OD48P0VJSEE/Q0aX4dvb29zc3Nzc3Nzc3N3d3d3d3d3d3t7e3t7e3tPT09PT0tLS0tLS0tLS0tTIlZyum5m1iX2TjIKBhMTV09PT09PT09PU1NTU1dXV1dXV1dXV1dXV1dXV1dXV1tbW1tbW1tbW1tfX19fX19fX2NjY2NjY2dnZ2dnZ2dnZ2dnZ2dnZ2NjY2NjY2NjY2NjY2NjY2NjY2NfX19fX19fX19fX19fX19fX2NjY2NjY2NjY2dnZ2dnZ2dna2tra2tra2tra2tra29vb29vb29vb29vb29vb29vb29vb2tra2tra2tra2tvb29vb29vb2tvb29vb29vb2tra2tra2tra2tra2tra2tra2tra2tra2tnZ2dndmlpYYW5ZYVdPV01QRUJETElNS0ZJRT5CRDk4ODY3OTc1Njk4PT1BPjo4OT4+PD9APzw1Njc2PD4/PjtAQEA/Pj4/Pjs/PkFCRkdCQENIkeLb29zc3Nzc3d3d3d3d3d3d3d7e3t7e3t7f39/U09PT09PT09PT09LS0tLTz6h+kayPko6MhoCIiYSQo8rU09PT09PU1NTU1dXV1dXV1dXV1dXV1dbW1tbW1tbW1tbW1tbW19fX19fX19fX2NjY2NjY2dnZ2dnZ2dnZ2dnZ2dnZ2dnY2NjY2NjY19jY2NjY2NjY2NjY2NjX19fX19fX19fX19fY2NjY2NjY2NjY2NnZ2dnZ2dna2tra2tra2tra2tra29vb29vb29vb29vb29vb29vb29vb29ra2tra2tra2tvb29vb29vb29vb29vb29vb29va2tra2tra2tra2tra29vb29ra2tra2tra2tna3JJaWWNuWlpSVV5QTDxAR05IUklIRT47SEY4OTc1Nzg3NTg5ODs+Pj07ODlBPj1AP0E+NzU5Njs+QUI/P0BAQkI/Pj8+QUBEQUZIQj9FSozi3Nzc3Nzc3d3d3d3d3d3e3t7e3t7f39/f39/f1NTU09PT09PT09PT09PWtaWaiIuQhYCFi4iBg4qLf4bC1tTU1NTU1NTV1dXV1dXV1dXV1dXW1tbW1tbW1tbX19fX19fX19fX2NjY2NjY2NjY2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2djY2NjY2NjY2NjY2NjY2NjY2NjY2NjX19fX19fX19fY2NjY2NjY2NjY2dnZ2dna2dra2tra2tra2tra2tra2tvb29vb29vb29vb29vb29vb29vb29vb29ra2tra2trb29vb29vb29vb29vb29vb29vb29vb2tra2tra2tra29vb29vb29vb29vb2tra29uIWltnalxYTFpfVkg6TEhMSkpDRUVDQExINzo3Njc4ODU4Nzg5PDw7Ozk4QD89Pj8/PDY3PDQ3P0JCQUBAPz8/QT09P0A+QEBGRT09REuI4tzc3Nzd3d3d3d7e3t7e3t7e3t/f39/f39/f39TU1NTU1NPT09PT09PUxZKCg4WGfYGCfXx5foGCg36k29bU1NTU1NTV1dXV1dXV1tbV1tbW1tbW1tfX19fX19fX19fX19fX19jY2NjY2NjZ2dnZ2dnZ2dna2tnZ2dnZ2dnZ2dnY2NnY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjX19fX19fY2NjY2NjY2NjY2dnZ2dna2tra2tra2tra2tra29vb29vb29vb29vc3Nzc3Nvb29vb29vb29vb29vb2tra2tra29vb29zb29zb29vb29vb29vb29vb29vb29va2tvb29vb29vb29vb29vb29vb2tvZgFpebWhaU0ldW1hKRE1ISlNMR0ZBQD9KQjg7NjY5OTc1ODY4Ozo7Ojw5OD09O0A9Ozo2NTw3Oz1CQEFBPD49QEE9PEA/Pz5CREU+PERLg+Lc3d3d3d3d3t7e3t7e3t7f39/f39/f39/f39/V1dTU1NTU1NPT09PT2LKEkKh9g3l2hIh/e3d5gn5+i67A1dTU1NXV1dXV1tbW1tbW1tbW1tbW1tfX19fX19fY2NjY2NjY2NjY2NjY2NjZ2dnZ2dnZ2dna2trZ2dnZ2dnZ2dnY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2dnZ2dnZ2tra2tra2trb2tra2tvb29vb29vb29vc3Nzc3Nzc29vb29vb29vb29vb29va2trb29vb29zc3Nzc3Nvb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vc1nlcWmxmWFJPYFFSQUhHSkZYTEZAQENDSz87Ozc4ODc2NTc2ODo5PDw6PTs/PTs9Pjw7ODg8OT0/QkFCQzw8P0FCPj1BQkNCREVDQDtDTH3h3d3d3d3e3t7e3t7e39/f39/f39/f39/g4ODg1dXV1NXU1NTU1NPU0ruen3WKeXuIgICChYGDcnOAhYOMrNfV1NXV1dXW1tbW1tbW1tbW1tbW19fX19fX2NjY2NjY2NjY2NjZ2dnZ2dnZ2dnY2NnZ2dna2tra2trZ2dnZ2dnZ2djY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2dnZ2dna2tra2tra29vb29ra2trb3Nzc3Nzc29zc3Nzc3Nzc3Nzb29vb29vb29vb29rb29vb29vb29zc3Nzc3Nzc3Nvb29zc3Nzc3Nvb29vb29vb29vb29vc3Nzc3Nzc3Nvb29vb3dByXV9wZVdLUGNPS0JHQ0pIS0ZBPEE9SFBBOjo3Nzg3Njc4Nzw6OD09PD47QD88Pz07Ojs5Ojk8QEJAQkNAPUFAPz1AQkNDQUBAP0A7RU144N3d3d7e3t/f39/f39/f39/f3+Dg4ODg4ODg4NXV1dXV1dXV1NXU18h4i4V8goh6g4SBfoKCc2l0hYuGkJ3U1tXU1dbW1tbW1tbW1tbW19fX19fX19jY2NjY2NjY2NnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dra2tra2tra2dnZ2dnZ2dnY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2dnZ2dna2tra2tra2tra2tvb2tvb3Nzc3Nzc3Nvc3Nzc3Nzc3Nzc29zb29vb29vb29vb29vb29vb29vc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc29vb297KalxjcWVST1heSz9HTElPS0VAPkFCP0lPPjk6NzY7NzY6Ozc7Ojg6PDw+Oz09Oz48Ojs4OTo4OUFCQkFAQDtAQj06PkFCQz8+PT4/PUZOdN/e3t7e3t7f39/f39/f4ODg4ODg4ODg4ODg4OHV1dXV1dXV1dXV1s6dhpl+f5OTin+CgXx9gnNxm4mAgoOJwNnat7TQ19bW1tbX19fX19fX19fX2NjY2NjY2NjY2NjZ2dnZ2dnZ2dnZ2tnZ2dnZ2dra2tra2tra2trZ2dnZ2dnZ2dnZ2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NnZ2dna2tra2tra2tra2tra29vb3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nvb29vb29vb29vb29vb29vc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3NvfwGNaW21gVlBTU0pETEhNSEk8PkFEQ0ZORDw8OTc5OjY4Ozk3PDk4OTw9OzlAPjpBPzw3NTc7ODpAQUVBPz45PUI/Oz1CQkI6Pj07PT5GTnHe3t7e3t/f39/f39/g4ODg4ODg4ODg4OHh4eHh1tbW1tbW1tbV1tjLioCHhYOXjHh7e3lvfYF1a3ebdHZ7eInHxpiMrdjZ19fX19fX19fY2NjY2NjY2NjY2NjY2NjY2dnZ2drZ2dna2tra2tra2tra2tra2tra2tra2dnZ2dnZ2dnZ2dnZ2dnZ2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NnZ2dnZ2dnZ2dna2tra2tra2tra2tra29vb3Nzc3dzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nvb29vb29zb29vb3Nzc3Nzc3Nzd3dzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3d3d3d3d3Nzc3Nzc4LdjV1lrYlJNVVFMSktGS0ZDQD5CQT9FTT4+PTg5OTo3OTo3NT03Nzo+PDs7Qjw5Pz05NjY4PTk6QEJGQD49PEBCREA9QD9DO0A9PD4/Rk9t3N/e3t/f3+Dg4ODg4ODg4ODg4OHh4eHh4eHh4dbW1tbW1tbW1tfVrYZ6d32rn3l4entzdH+Dfm9xe3l6c3t2k4qFgImkzdnY19fX2NjY2NjY2NjY2NjY2NjY2NjY2NnZ2dna2tna2tra2tra2tra2tra2tra2tra2tnZ2dnZ2dnZ2dnZ2dnZ2dnZ2djY2NjY2NjY2NjY2NjY2NjY2NjY2dnZ2dnZ2dnZ2dra2tra2tra2tra29vb29vc3Nzc3N3d3d3c3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc29vb29vc3Nzb3Nzc3Nzc3N3d3d3d3d3d3dzc3Nzc3Nzd3d3c3Nzc3Nzc3N3d3d3d3d3d3d3d3dzc3OGtYVtebGJSTVZMTUdLS0RGQkI7QT08RUxDQT44Ojk6Nzc5NjY6NTs+QDs9Oz89PD89Ojk5Ojw5PEVDRkA/PkBDQkQ9OT0/QT1CPz1APkdPadvf3t/f3+Dg4ODg4ODh4eHh4eHh4eHh4eHi4uLW1tbW1tbW1tfQmH+Qh4N9eoN2e3Vzenl6kKqmd3JyfoeHh4CAfoKEhJHJzNnX19jY2NjY2NjY2NjY2NjY2NjY2NnZ2dnZ2tra2tra2tra2tra29va2tra2tra2tra2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2djZ2dnZ2dnZ2djY2NnZ2dnZ2dnZ2dnZ2tra2tra2tra2tra29vb29vb3Nzc3N3d3d3d3d3d3d3d3d3d3d3c3Nzc3Nzc3Nzb29vb3Nzc3Nzc3Nzc3Nzd3d3d3d3d3d3d3dzc3N3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3NzhpV9UYm1iUE9TSUhHRkpJSUJBPkJCPEVFREA+ODo4Ozc3Ojc4ODY+Pz07PDk9PDo+PTs6Njc7NjpEQUY+Pz8/PkNBPzs9PT47REM/PjxIT2fZ4N/f3+Dg4ODg4eHh4eHh4eHh4eLi4uLi4uLi1tbW1tbW19jYyH52doN+fnR2eIaCenl1d5yhu6GEgoCAfoeKinx/gYaMnKjO2NjY2NjY2NjY2djY2NjZ2djY2NjY2dnZ2dra2tra2trb29rb29rb2tra2tra2tra2tnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dna2tra2tra2tra2tra2trb29vb29zc3Nzc3N3d3d3d3d3d3d3d3d3d3d3d3dzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3e3t7e3t7e3d3d3d3c35pbT2drXFBRUElDT0pLR0xHSkJAP0FHREBBPDg8ODg1ODk3Njc3QEA/Ozw5Pj04PTw8Ojc4PTk/RENGPkE/QkBDPzw6Pj0/PkVEPz07S1Fj1+Hf4ODg4ODh4eHh4eHh4uLi4uLi4uLi4uLj49bW1tbW19XB3LRueHJze3B6eXaFiIR7eH2AgZiljH98fnuRhZaLhoGDgY6Rvd3Z2NjY2NjZ2dnZ2dnZ2dnZ2dnY2dnZ2dna2tra2trb29va2tva2tra2trb29ra2tra2tnZ2dnZ2dnZ2dnZ2dna2trZ2dnZ2dra2tra2tnZ2dnZ2dna2tra2tra2tra2tra2tra2trb29vc3Nzc3Nzc3N3d3d3d3d3d3d3d3d3d3d3d3d3d3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3e3t7e3t7e3t7e3t7e3t7e3t3d3d6NWFdobllQUUtISlNJTUhNSUtBQz9DRkJBRDo6PDg2NDg4NzY2Nj8+Pjo8OTw7Oj09PDw4Ozw7RERERT4/PkI+Qj84PT8/Q0NCQEE+O0xUY9Xh3+Dg4OHh4eHh4eLi4uLi4uLi4uLi4uPj4+PW1tbW1teslLZ6eHJvd5V7dHuLgHh1bn6Fg3t/hYhyfH2bnI6JioJ+g32Hk5rH1NjY2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dna2tra2trb29vb29vb29vb2tra2tra2tra2tra2tnZ2dnZ2dnZ2dna2tra2tra2tra2tra2tra2tra2tra2tra2trb2tra2tra2tra2trb29vc3Nzc3Nzc3Nzd3d3d3d3d3d3d3d3d3d3d3d3d3d3c3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3N3d3d3d3d3d3d3d3d3d3d3d3d3e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3d7Zf1lgaGxcUUtHR09LTk5PTURGQkg/Q0hEREA6Ozs4NzU3Nzc4NThAPkA7PDk8Ozw+Ojk7OTk7OUZERUI8QD4/PEBDOz5AP0A/Qj8+OjtKVWPV4eDg4eHh4eHi4uLi4uLi4uLi4uPj4+Pj4+Pj1tbX19vKhYR3cXJubniVhHt4hH95dnB4c3eLkY6CdnN9ioaId3d1d4ODfIiIk8Pb2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dra2trb2tvb29vb29vb29vb29rb2tra2tra2tra2tra2tnZ2dnZ2dna2tra2tra2tra2trb2tra2tra2tra2tra2trb29vb29ra2trb29vb29vb3Nzc3Nzc3Nzd3d3d3d3d3d3d3d3d3d3d3d7e3d3d3d3c3Nzc3Nzc3Nzc3Nzc3Nzc3d3d3d3d3d3d3d3d3d3d3d3d3d7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7f0nVZaGlqVk5KSE1OR01EUElGSD9FPUZMREM+Ozs8OTc3OTY2OTU4Pj4/PTs8QDs9PDo3Ozc5OThHREVCPUE9Qj8+QDw/QUE/QEJAPjs8S1Ri1OLg4eHh4eLi4uLi4uLi4+Pj4+Pj4+Pj4+Pj49fX19fEknuJf29sbnV2foSBg4qGfnVybWVtiIaKjoR7c4OHint4e4OPj4GEioqxztrZ2dnZ2dnZ2dna2tra2tra2tra2trb29vb29zc3Nzb29vb29vb29va2tra2tra2tra2tra2tra2tra2tra2tra2tra2tvb29va2tra2tra2tvb2tvb29vb29vb29vb29vb29vb29zc3Nzc3Nzc3d3d3d3d3d3d3d3d3d3d3t7e3t3d3d3d3d3d3d3d3dzc3Nzc3Nzc3d3d3d3d3d3e3t7e3t7e3t7e3t7e3t7e3t7e3t7f39/f39/f39/f39/f3t7e4clsW2pqalNOR0hOT0VIRk1JSUA7RD5ISUA9PDo6Ojg2ODo3Nzk0OD08PT07ODw8PDw4Njc4OTo6RUJFQT9APEI/Q0M+PkNEQUBAP0A8PUtRYdPj4OHh4uLi4uLi4uPj4+Pj4+Pj4+Pj4+Pj5OTX19fZqXaFfnx3bHB3eXh8jH2KhYB3anN0d3p9bot7fnl6foR/gIGDfnh8foeGlrbT2tnZ2dra2tra2tra2tra2tra2tvb29vb3Nzc3Nzc3Nvb29vb29vb29ra2tra2tra2tra2tra2tra2tra2tra29ra29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb3Nzc3Nzc3Nzc3d3d3d3d3d3d3d3d3d3d3d7e3t7d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3t7e3t7e3t7e3t7e3t7e3t7e3t7e39/f39/f39/f39/f39/f39/e3uO9amFpa2lRTkZNTEtKWE1OR0FAQE9BQz9AOzw4OTk5Njg2NjY4NDs+PD07OTY6Ojk6OTU4OTg5OkJERj8+Pj5AQEBCPzxBQD88Pj9BOT5KT17S4+Hh4eLi4uLi4+Pj4+Pj4+Pj4+Pj4+Tk5OTk19fX2sqKhIB5c29tcXN1d4CUeHaAfHWHhXd1cnWgmXp7d3Z5doR0bWxue3iAmouTu9za2tra2tra2trb29vb29vb29vb29zc3Nzc3Nzc3Nzc3Nzc29vb29vb2tra2tra2tra2tra2tra2tra2tra29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vc3Nzc3Nzc3Nzc3d3d3d3d3d3d3d3d3d3d3d3e3t7e3t3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3t7e3t7e3t7e3t7e3t7e3t7e3t/f39/f39/f39/f39/f39/f39/f397js2lpbmloUFBPTExPUk9LU0Y/RURERD48PDg7ODc5OTU2ODY2NzM6Pjs+PTc6Pjk5OTk2Ojo4NzxDRUc/Pzs/PkA9PkE9Oz0+OUFAQDhBTlFc0OTh4eLi4uLj4+Pj4+Pj4+Pj4+Pk5OTk5OTk5NjY2NjauY6AenZ1bmpveHCBfWt0cnZ3hIV5h4d5lY55eXp1d3pza298gHx2fYh8gLLe2tra2tvb29vb29vb29vc3Nzc3Nzc3Nzc3dzc3Nzc3Nzc3Nzb29vb29rb29vb29ra2tra2tra2tra29va29vb29vb29vb29zc3Nzb29vb29vb29vb29vc3Nvb3Nzc3Nzc3Nzc3Nzc3Nzc3d3d3d3d3t7e3t7e3d7e3t3d3t7e3t7e3t7d3d3d3d3d3d3d3d3d3d3d3d3d3t7e3t7e3t7e3t7f39/f39/f39/f39/f39/f39/f4ODg4ODg4N/f39/f4qpqa2hrZFNQT0ZQVFJOSFJLPkREQ0I7Ozk6Ojg2Nzg1NjY4ODg0Oz88Pzw5PDw3Ozo6Nzo6Nzo9Q0JDPUE+Pzw5PT5BQDs8PDtFQD47Q05TXNDk4eLi4uLj4+Pj4+Pj4+Pj5OTk5OTk5OTk5OTY2NjZ1p5vdntveHh2cG50d3BwdHBzb36Jc3qGhY2EenNtcoB6hn1vg5OBdnx9g4a13drb29vc29vc3Nzc3Nzc3Nzc3Nzc3Nzc3d3d3Nzc3Nzc3Nzc3Nzb29vb29vb29vb29ra2tra2tvb29vb29vb3Nzc3Nzc3Nzc3Nzc3Nzc3Nvb29vb29vc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzd3d3d3d3d3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3d3d3d3d3d7e3t7e3t7e3t7e3t7f39/f39/f39/f39/f39/f39/g4ODg4ODg4ODg4ODg4N/f3+KgbWhma2ZVVlJHUFFOS0xMRUJIRUc9OD08Ojo3Nzg2Nzc2NTY3NDg+PD09Ojg6OD46Ozc4Nzc6Oj5DRDtDQj49OD1AQUM/Pjw+RTw+PUJNUF/S4+Hi4uLj4+Pj4+Pj4+Pk5OTk5OTk5OTk5OTk2NjY3MB2doCCfnp4eHBsdXlya399bHNvdGdoaYB/aWl4c2d+iYl4cIKGe3d9foWKvd3b3Nzc3Nzc3Nzc3Nzc3Nzc3d3c3Nzc3N3d3dzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nvb29vb29vb29vb3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzd3d3d3d3d3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7f39/f39/f39/f39/f39/f4ODg4ODg4ODg4ODg4ODg4ODg4ODflGttZm5mU1NJUFlUTEhGTkZGRUJGPTs+PDs5Nzc4NTc5NjQ1NzU4PDs9Pjo6OztAOTs7ODc6OTlAQkE8QUE/Pzk/QEJFQ0FAQEM7Oz1ES01g1uTi4uLi4+Pj4+Pj4+Pk5OTk5OTk5OTk5OTk5NnZ2tmYc3uqhJaCcnR1dn14aGx8d2h4d25rcHR5gIJ3dHyBhIJ9c3CAin94gn95g8je3Nzc3Nzc3Nzc3Nzd3d3d3d3d3d3d3d3d3N3d3dzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nvb29zc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3N3d3d3d3d3d3d3d3d3d3d3d3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e39/f39/f39/f4N/f39/f3+Dg4ODg4ODg4ODg4ODg4ODg4ODg4ODh24tubWdzY1lRTVVbV0hDSUZOS0dCRD8/Qjo7OjY2NzU2NzY0ODc2Ozw7Pj86PDk8Qjg3OTo6Ojk6QUFCQUJDQEE+PT9CQ0NEQUJGOTg9REpOYtjk4uLi4+Pj4+Pj5OTk5OTk5OTk5OTk5OTk5OXZ2drcqHGCtXiRfnNsem6EgXaCfWtoan+DeHZ8dX2FhXRmcHl9d316gIqFe318foC03tzc3Nzc3N3d3d3d3d3d3d3d3d3d3d3d3dzd3d3d3dzc3N3c3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzd3Nzd3d3d3d3d3Nzc3Nzc3Nzc3Nzc3N3d3d3d3d3d3d3d3d3d3d3d3d3d3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e397e3t7e39/f39/f39/f39/g4ODg4ODg4ODg4ODg4ODg4ODg4ODg4eDg4ODg4ODg4tiFb3FrdWFWT1VVXE9ETUY+SkdKRUQ8P0I6PDk4Njg0NTY3NDc2NDk7Ozw7OD47PEE4ODo9OD04Oj09QEBAP0FCP0A+QENCQ0FBRTc2O0RMTmPa5OLi4+Pj4+Pj5OTk5OTk5OTk5OTk5OTk5OXl29ra3Z5sbnNxhY1ybXBuf391hH5rcnZ2enN4gXhzb3VwbWt2fHmFiIB/f392coODsd/c3Nzc3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3Nzd3d3c3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3N3d3d3d3d3d3d3d3d3d3d3d3d3c3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e39/f39/f39/f39/f39/f39/f39/f39/f39/f4ODg4ODg4ODg4ODg4ODg4ODg4OHh4eDg4eHh4eHh4eHh4OLXhW1xb3ZeUldTWlpRSkhDQFFAQkQ8OT9BOjw5NzU3NDU2NjQ3NTY9PDo9PTk+OjxAODo6PDY7OTs+PUJCQjtBQkBDQEBEREM8PUA3OjxFS01l3OPi4uPj4+Pj5OTk5OTk5OTk5OTk5OXl5eXl5dPOxsB+cWxveHt2b3VuanNzbZKGeG50dG5vdIZ/b2twboJ0bXZyfY2DdnF/d3mKgabf3Nzc3d3d3d3d3d3e3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3dzc3d3d3dzc3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3t7e3t7e3t7e3t7e3t/f3t7e3t7f39/f39/f39/f39/f39/f39/f39/f39/f39/f4ODg4ODg4ODg4ODg4ODg4ODg4ODg4eHh4eHh4eHh4eHh4eHh4eHi1oZucG1xYFJZUFdfWUpMTElSP0Q9OTtCRjs6OTc0NTY1NzU0NjY2Pj07Pz45PTk7Pjg9Ozo0ODtAQENCQ0FCRkE/Q0BBQkREOz0+OTs8QkxNZODl4+Pk5OTj4+Tk5OTk5OTk5OTk5eXl5eXl5eW5t7Woc3JscHd6dHd4bXFydXd/hHRyc2xsa3F8bnBudGuBf3GAd32Eg355gHNygYqg2d3c3d3d3d3d3d7e3t3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3e3t7e3t7e3t7d3d3d3t7e3t7e3t7e3t7f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f4ODg4ODg4ODg4ODg4ODg4ODg4OHh4eHh4eHh4eHh4eHh4eHh4eHh49WHcWxqbF5YWlVXYFZWUE9QTD1BOjs8RkE4Ojg3MzY1Njk2NTg1Nz89Oz8+OT04Ozw5PTs7NTo9Q0JCPENDREREQUE/PkJDQzw9Pjg5PENLS2PN0dnh1sjY4+Tk5OTk5OTk5OTk5eXl5eXl5eXltbW2q3J5cm59f3Z1d2hqaGlwb3Zta2tnZWZxdG15gG5teXd2iHhxa2podXV5dHV/wd/c3d3d3d3d3d3e3t7e3d3d3d7d3d3d3d3d3d3d3t7e3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3e3t7e3t7e3t3d3d3d3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f4ODg39/g4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4OHh4eHh4eHh4eHh4eHh4eHi4uHh4ePVhnFwY2lhV1NZV19MUk9STUtAPjg5O0E+ODc5NjQ3Njc6NjY2NDk+Pzo8Pzo/OTo6Nzo9PDk5PEFBPTtBQ0VDRkA+Pj5BRUQ+QEE3OD5GSEpesrW4wbm1u8jg5eXl5OTl5OXl5+fn5+fm5ebm5ra2tbWOfX5weoR1cnZnYmNlbGtyb2ZpbHZtd4Z9hXlsbHd4a3ZwfH14c3V5fHd2h7ng3d3d3d3d3d7e3t7e3t7d3t7e3t7d3d3d3d3d3t7e3t7d3t7e3t7e3t3d3d3d3d3d3d7e3t7e3t7e3t7d3d3d3d3d3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4OHh4eHh4eHh4eLi4uLi4uLi4uLi4eHj1Yd1bl5uY1pUU1hXS1NLSk1SR0E4Ozs+PDk4NzU2NTY2OTY4NjY5Pzw6PT07Pzo7Ozk8PDs5Oj4+Pjs8PUFEQkNBQEBBP0JDPDw9Nzs+REVKXrG1tLW2t7e2y9rJ3uXl3eDi3tXU1tPU4OPg39+2treuh3t/bnmNenJ1bWNobGxtaXR4enF5enqIh4N6aWh9cWRvcXyGgX55e318e4an2t7d3d3d3d7e3t7e3t7e3t7e3t7e3d3d3d3d3t7e3t7e3t7e3t7e3t7e3t3e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t/f39/e3t7e3t7f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4OHh4eHh4eHh4eLi4uLi4uLi4uLi4uHh49aGdmxhb19dV1lcWlJQSEpXTEVHPUA9Ozs9OTY0NjU1NTg2NzY3OD87OT09PDw5OTw6Pjw6OTg+Qjs7Pj5AREBDRUFAQD0/QDw9PTU5PEJHRl2xtbW2uLm5ubq9uMPT0r3BwcC6u7y6u8TMxb/Dt7e3hGl1gX1ndYd5Z3Vxa2t5eHB3fH15bWl3e3h3bml1j4FwbHl4d3d9gXuGgnmAoNze3d3d3t7e3t7e3t7e3t7e3t7e3t3d3d3d3d7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t/f39/f3t7e3t/f39/f39/f39/f39/f39/f39/f39/f39/f39/f4ODg4ODg39/f39/f39/f3+Dg4N/f4ODg4ODg4ODg4ODg4ODg4ODg4ODh4OHh4eHh4eHh4eHh4eHh4eHh4uLi4uLi4uLi4uLi4uLi4ePXhXJrZ3RhW1hYX15TVVVRVUpMRj9JRDs5PTY2NDc3NTc4Nzc3ODk8PDo+PDg8Oj0+OTs8OTs5P0E8PT9DP0FARUJCQTw9Q0A6Pjw1NDlER0dasbW1tre5ubm5ubm3ubm4uLm5urq6urm5urm6u7e3uX9ucHN6b3B/eXNuc3Vsc3Z4cXFwb2tvcX6Bc2mHhIF9dHOHdW11hYmBgHJ2hafd3d3d3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7f39/f3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f4ODg4ODg4ODg39/f3+Dg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4eDg4eHh4eHh4eHh4eHh4eHh4eHh4eHh4uLi4uLi4uLi4uLi4uLi4uHj14lxa2xyW1dXXWBUUVVUUFJPSkNATUE9Ozk2NTM0NjQ2ODc3Nzk6Pjs8Pjs5PDo8PDk8PTw7PT0+PUNEREBDQkE/QD48PkE8OD06NjY6QkpIWLG1tLa2uLm5uLi5uLe3uLi5urq5ubi4uLi6uru3uKx7cnhxf3ZzfnBsbXpyZ29sbW50cHt3d3Jyd3pvhpJ2f3x8enZ5fH9zfYdyda3T393d3d7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e39/f39/f39/f39/e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f4ODg4ODg4ODg4ODg4ODg4ODf3+Dg4ODg4ODg4ODg4ODg4ODg4eHh4eDg4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4uLi4uLi4uLi4uLi4uLi4uLi49eHb2pxalVWV2FbT1FSUE5XSURESUo/Ojk6NzUzNDk1NzY2Nzg4Ojw7PD46PDo6PTw5PDw9Oz09PDs9REdEQ0E8PDw8Pj5AOzg8ODE1OkFGRVautbW1tre4uLm4uLi4uLe4ubq5uLi3t7i4ubq7t7mqcnB4d3x7e4J3aG5xam9qY2lyf21zcn54dHFsanaAeX2AgH91doB1a4qLgHaR1d/d3d7e39/f3t/f3t7e3t7e3t7e3t7e3t7e3t7e39/f39/f39/f39/f4N/e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t/f39/f39/f39/f39/f39/f39/f39/f3+Dg4ODg4ODf4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHi4uLi4uLi4uLi4uLi4uLi4uLi4uPYhm1sdGVWUFxnWE1YU1JRWUVDS1BOOzk4ODc1NTM5NTY2NzY4Nzk+OT0+OTw5OTw7Njg5OTo8QEA9PkBGQEJCQDo+PEE9Pzs7OzYxNjxCR0RQqLa1tba2tre4t7i4uLi4uLm6ubi4t7e3t7e5ure2tIlyd3h9iXxwem99c2hqbGdnbHRscXd0cWx2c3Fxd3FyfHl4g3Z7d2mLkYp9kM7f3d7e3tvY2drZ297f39/e3+De39/f3Nvc3N3e3uDg3+Dg4ODf3t7e39jS397f397e3t/f3t7f3t/f3t7e3t7e3t7e3t7e3t/f39/f39/f39/f39/f39/f39/f4ODf4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODh4eHh4eHh4eHh4eHh4eHh4eLi4eLi4uLi4uLi4uLi4uLj4+Lj4+Li4uPj4+Pi4uLi4+Lk14NoZ3VkVlVkZVdKWllXW1Q9RU1LSD04NzU3NjQzOTQ0Nzc1Njc5PTo9Pjw9PDk7PDk5Oj45PD4/PkFBQ0FFRUQ+OzxBPjw5PDs3Mzc+REhFSqG2tbW1tbW2tre4uLi4t7e4uLi3tra2tra3uLm2traLfXpsbHp/cGx5dm5qaGdlcXp4b2lvb3B1c21zd4Fnb32CgYNyf3lqcHJ6f6ng393Zy8a/vL2/vsLN0tDW3tnc4NfQzcPCw8PH1dfT2dzX1NjX0MfExce9vM/Kz87Y3djO3N3c2t3T0dze39/e397e3t7e4N/f39/f39/f39/f39/f39/f4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4OHh4eLi4uLi4uLf4uPi4eLg4d7W29/Sw8rJx9Hb3OLk4eHg2dre1sbExcTN2trf5OHi4trX3st9aWZxYVleZWFNTFRLUlpMO0hNSEZBPTc2NjUzNDY2NDg3NjU2OTw7Pj46Pjk5PDk3OTs7Oj49PEBAQ0RCR0ZCQT08Q0A9OTw7Nzc3P0RGRkaZtrS1tbW2tra4uLi4uLi3uLi3s7W2t7a3t7i5tba3opdxb29waW50dnFmZWNrbmdvcm1mZ2tygWVvdnyAeGRzj39zaHFyaWVlbm+w39HFv7u5ubm5ubq6uru6vc3Gw8e/urq6uru7u8HCvcHFvby/vry7urq5ubq6ubm6w8XDucDDwby/ube/z8/U3tjc3t/g3tLa4N/f4ODg39/f39/f39/f3+Dg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODh4eDg4ODg4ODg4ODh4eHh4uLi4eDh4uLi4uHa2t3RwsPCu8XT1uDdydPDrrnAsaqrq6uwtLbJ0sXRxLG4v7Srq6usr7S0vMzE1c60tLureGxtbWBdYl9ZS1NVVFFQREBRTUhEPzo3ODU3MzE1NjQ5ODQ2Njo8Oz08ODw5Njo6ODg5NzU8PDw/QEFAQkRDQkE8PkI/Pz09PTc1OD5DRUNAj7a0tLW1t7i4uLi4uLm5uLe1sautr7Oxs7OztLS0tqaei2tue3ZxeXhnY2hfcXdha25vaG99b25ja2lseHdsa4Z+bHB6dm1scG95sca8uru7urm5ubq6urq6urq6urq6urq6urq7u7q7u7y7urq6ubq7u7q6urq6urq6ubi3t7i4t7e2tbW1tbi3u8e+w8XHzcS4wMnH0tzZ2d/e3uDf39/f4ODh4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODh3Nji4uLi4eHh4OHg3tfGxtHQztTe3tPO0t/SuLi8sq2trKysrrG+ua63rKipqamqq6urqqqqq6ysuKyqqqqrq6urra6urq6urryzrayrpHlub21fXl1dVE1SU1xUSkE/UElIPjg5NjgzNzMwNTczNzg1NzY2Ojw/PDg5Ozo6Ojg5OjY1OTs8Pj9EP0NFQkNCP0BAQT9APjw3ODc6QUVEP4W4tLS1tbe4uLm5uLi3t7SurKuqqq2urq6vsLGzs7WjcG5ucm1wg311aWFlaGZkY2Rxc21td25naW1tZXBzb29zcXN8h4F6dX11n7u6uru7urm5ubm6urq6urq6ubq6urq5uLm5ubm6urq6u7q5ubm5ubq6ubm6ubm4uLi3t7e4uLe3t7a2tbW2tra1tbW1tba1t7e3t7rBvrzGycrb3+Dg3tvd3d7h4tDW4uHg4ODg4ODg4ODg4ODg4OHg4OHi0768zNjd3OLg0dnbxL23sLCxsa+zu7uzsLS9s66urq2tra2sq6qqqqmpqKmpqampqqurqqqqqamoqampqampqaqqqqytrq6urq6urq6sraR4aWJxZmFZWlZRUk5cU0Y9QlJEQTc8OzY5NTY1NDU2NTg3NTY1Nzg7Pjw7OTk5Ojg3Nzk3Njg8Oz47RD8/Q0BBREE+P0M9Pjw+Ojo3Nz9DRj54srCztLW2t7i3trKurq2sq6uqqaqtraysrq+xs7S1t4xucnRqaIB5ZmpmZWxdaG5waGxxYmNmcoJ+dmhobGpueoaBhXx4cXF5gK+6ubq6urm5uLm5ubm5ubm5ubm5ubm4uLe3t7e3uLm5ubm5uLe3t7i5ubi4uLi3t7a2tre3t7e3tra2trW0tLW1tbW2trW1tre3t7e3t7e3tre4v8bP0MS+v8DE19e8ydra4OHg4ODh4eDg4ODh4eDb3t7Uzby3tre6wMDJxLfIvrKwsLCwr7Cvrq6ur7Cwr66urq6uraytrKurq6qpqampqampqampqKmpqKmpqampqKmpqKmpqqqrraytra2ur66trK2heWpjbWdiXFhRUFFLVEpCOklRP0E3PDk0OjU2NTQ1NTY4ODY4Njs6OTw9PTs6ODY2ODg6ODY3Pj09PT5BQUVCQkNBQUBBOj09Pz05Ojc9QUc8bKqmqKutsLGwrqupqKqrq6mpqamrrKytra2usLO0tbilgIdvaWdzdGZrcG1qZGxvcm5rbWNrcHyJhG5qbHx4Y3uKfnNqc25rcY+7ubm5ubm5ubi4ubm5ubm5ubq5uLi3t7e3t7e3t7i5ubi4uLe2tra3t7e3t7a2t7a2tra3tra2tbW1tba1tLS0tbW1tra2tra3t7e3t7i4uLe2t7a2uLm4uLe3uL6+uLq9vcfb4OHg2Nnd4eHg3dfKwcPCurm5uLe4uLi3tbS0tLKysbGxsLCvr6+vr6+vr6+vr66ura2srKyrq6yqqqmoqKmppqepqaehpaipqamoop+hoZyip6inqausrK2ur7Cwrq2unXdwbGphY2BZUU1RTFJGQzlNUEU+ODs3Mjc5Njc0NDM1ODg3OTc7OTo9PTw6Ojk3NDo5ODY1OD8/QEI9RENDQ0FDQEJBQDtAP0A/PDw6O0NIPWOopaWlpqioqKenp6ipqqmoqKipqqqsra6wsLCztLW1taWYdn5xZmt4cW9tZmVsaGNsZ2ZpaX11bWlvfXZ5hWZod294b3Fvcninu7m5ubm5ubm4uLm6ubm5ubm5ubi3t7W1tba2tre3t7e3t7a2tba2tre2tbW1tra3t7e2tbS0tLS0tLS1tLS0tLW1tba2tra2t7e3t7e3t7a2tre2tre3uLe2t7i4t7i4uLi4wMXTyry8w83PyMC9urm5ubq6ubi4uLi4t7W0tLSzs7KysrGwr6+vr66urq+vr6+uraysrKurrKysq6ehoJ6gn5udoaGdlpmkpKaon5mZmZmanZ+gn56fpKqtrq+ura2srJl1cGlrY2FeXVVOU0tSREQ4TktHQTo4NTI2OTY1NDczNzc3ODk3OTo7PT0+ODg4NzU6OTk1OD9AQEFEPkZBQkNAQkNCQT88QEJCQD0+OjpERj5cpqWmpqampqanqKenqKioqKenqaurrKytra2ttLS0tbekc311bnONf3JmanFjaW1jaGZobG51aV9jZ3VzdnpuZ3Bwcn56cYihu7m5ubm6urq6urm2s7a1uLm2trW1tra1tbW1tbW3tra3tra2tbW2tbW1tbS0tLa2t7e3tbS0s7O0tLW1tLS0tbW1tra2tra2t7e3uLe3tra2trW2tbW2tra2tra2tra3tra3uLi3uri4uLi3uLi5ubm5urq6urm4t7e3t7W1tLS0s7OysrKxsbCwr66urq6urq+vra2srKuppaSmpqScmZubmpmampmXl5eXl5aZm5iZmJmZm52en5+dnJ6gpKWko6OioqKQdG5jcGFeXltUU1RIVEo/PFFCRkM7ODYzNzo1NTQ4Mzg5OTc4OTc7OTs9Ozc6NzU2OTk4NTg+Pz9ART5CPz9DPzxBQUI/PT9EQT8+PTk9Q0Y/VaSlpqanqKeoqamop6ioqKioqKiqrKuqqaipq7W1tba5o3eKcXKHhnd0cGh5a2JjYWVsaW5zal9jZWNjZWprYmRqbHaXjX6ovbm3tre5u7u6uLWxrKurqq6wrKyrq62tq6uvsLGvr7CytbW2t7W1trW1tbW1tbW2trSvr7O0tLSvra6vsrW0tbW1tbW2t7e3t7e3t7e3t7e3t7Owsra1tLa2tre3tra2tbW1tra3t7e5uLi4t7e3uLi4ubq6urq5uLi3t7e1tbS0tLS0tLS0s7OysbCvr6+vr66vr62oo6KgnJqampqZmZqbm5qampqbmpmZmZiXl5aYmZmZmpycnZ+foJ+goKChoaCgoJ+fi3RuaXRdYGZeUlRLRFRJPUVTSEVCOzo0NDY5NDQ1NzM4ODg3ODk5Ojs7Pz04OjkzNTg5NjM5PT5AP0A6QEJCQkA/QEJCPz0+QUFCPz06PkVDQFGjpqWlp6inqauqqKaoqKipp6ioqKinp6ioqaq1tbe3t7KZtH99kIx1Z2lqbGZjYGNoZW94cGlicXx5cGpmZmRma3NqhYystrKwra2ttLeysLCtrKuqqaiop6ipqampqKinqKipqaeoqqurra2sqqytraysrq6traunpaSnqqyopKOkpamwsbGztbW2t7i3t7W1tre4t7e3t7Kppaasq6ivtLa1s7W3t7a1tbW2tra3t7e3t7a2t7e3t7m6urq5uLi3t7Wxs7S0tLKxsK6sq6yurrCxsK2rqqmqqKijnJqZmJmYmJiYmZmZmZmZmpqZm5ubnJybmZeYmpqcnJydnJ2foKGhoqKioKGgoKCfnop1amtuWVxhVktPREdVRz5PV0hEPTw4MzQ0ODQ1NDgyODk4ODk6Ojw5OUA8Njk6MzY3OTE0PD8/QEBBOkNGRUJBREJDQTo7P0FCQz9APUBEQ0BPo6empaemqKqqqqakpqenqKioqKimpqaoq6uttba3t7e4rbJ1cHuDdmBiaWtiZWZhZGdmfYh5bHKAfXFvcXhjbW5xZo+srKurq6ysra6urK2trKyqp6WmpaWlpqioqKiopaeoqKioqKeoqampp6Wko6KioqOioKKioaKhoKChoaKjpKOjpaWlqLC0s7OzsKuqqaqztLa3trGopaOioaGipKiqqairs7Sxrq6xs7W2tra3uLi3t7e3t7e3t7a2uLe0sa6ppqerrKmnpqWkpKSkpKWnqaajoJ+enZycm5uampmZmJeXmZmZmJiZmpqampqampqbm5mYmpydnZ2dnZucoKGgoaOjoqCgoKCfnp2FdGtsaFdYU0pHTUVITUdAU1dGRz09OTM2Mzc0NTU3Mzg6Ojo6OTw9OjpBPDY9ODM3ODgzNztAPz9AQDpCRUNAQkRDQT87PEBDQkNBQDxBQ0A9TqKnpqanp6mqq6mkpaWlpaaoqKippqanqKmpqrW2tre3t7izc2h7c2JnamtpaWJhZGloXV1tfHJma3J/fHR8bm1zc36gqamrq6uqq62trKusq6mpqKWjpKampqWmp6eqqaamp6enqKinp6iop6WjpKKhoaGhn56en5+fn56foKGho6Wko6OkpKSmp6enpqWkpaampqeqraumpKKhoaChpKWlpaenpaeoqKalpaivtLa3trW1tra1tbOwrKupqa6rqKWlpqampaSkpaWlpqWkpKSkpaKhoaGgnp2bm5ucm5qamZiXmJiYmJiZmpmZmZmYmZmZmZqZmZydnJycnJybnJ+fn6ChoaKgoKCfnZ2cgHNrbmReU0pITUZETEtFRFFTQ0c9PDgzNjI4NDY0NjQ4OTg6Ozk7Pjw5PTs5PTczNTk2NTY8QD0/QD88P0JDPkJCQj89Pj5CQ0FFQD86PkVAO0+jpqWkpqeoqaelpKWlpKWnp6eoqKanp6alpqa1tba2trW2uYptcW1vfHxxZ2pmYGFsYFROW2hqbm9tgYJ9cWdxdn6aqKeoqqmpqqurrKqqqqimpaWkoqOlpqalpaWmqaqppqWjpKWmpqSjo6KioqKgoJ+fnp6cnJycnJ2dnJ2en6CioaKjo6KhoqKkpaSioqOjpKSjpKSko6Ggn6GipKanp6ipqaelpaSipKSlqK2wsKyrqqusqqmnpaWmpaWlpaalpqioqailpaWkpKSlpKOjpKOioaGhoqKgnp2cnJubm5qZmJiYmJmam5mXl5eWlpeXmJiZmpqcm5qampubm5ucnJ6goKGgnp6enpycm356bnJiXlNNSlBFRk5NQkBPRT5JOz01MzYzODM2Njc1Ojs4OTs5Oj49Ozo5OT03NjY5NjU2PkI+PkE/PT5DQT5DQ0BAO0BAQkJCRUA+Oz5FPzxQoKSjpKOjo6SkoqSlpaSlpqamp6empqalpqaltLW1tbS0tbiBaHx9ZXOCemxwdWFfY1ROT1FbaGxpbGxxbW5xbnScoqSnqKioqauqqqqqqaempaSjo6OjpKSlpqalp6ytqaShnp2eo6Shnp6foKCenJ2dnJycmpqam5ucnJubm5ydnp6foKChoJ+goaOioKGjpKSjoqSlpaWkop+go6SkpKapqainpaGdnJ+jpaipqainqKioqaempaWkpKSlpqampqampqenpaWko6Ojo6KioqGhoqKhoqOkop+enZ2cmpubmpqZmJeXmJaWlZSUlJWVl5iYmpubnJuampqam5ucm5ucnp+fnpucnJyam5p/fnF0YFtUTUdNSEZMSj8/TkM8QDs8NDM4Mzc0NzY3ODs9ODo6OTk7PTs7ODk9Nzc4OTU4OD9APT9BPjs9RD89REA/PzpAQUE/QUVAPjw8Qz88Tp2ioaKioKCipaSkpKWlpqenp6empqampaampbW1tbS0tLS3jHalsXdmc3Jvc2xjZGlYT1JRT09dgG1kYFptkZGSoqKjpaampqenqKiop6alpaSjoqGhoaKjpaempqesrKemoJ2cm6Ghnpuamp2cmZiam5qampmZmZubm5uampqampucnZ6goaCfnp+hoJ6foqOko6Omp6inqKWioKGhoaGkpaWlpKCcmZmbnqOmpqampqanpqempaOlpKWlpqiop6enpaWlpaWkpKOjo6KhoqKioqKhoaKjo6Kgn56enZybnJubmZaUlJSTk5OTk5SUlJWWl5qam5ubm5qZmZqanJ2dnZ2dnZuampqamZqXf3dvc11aTkhKTkdFRklERU5APD09PDQ1OzQ2NDY1Njc5Ozg5OTg5OTw7PDc6Ozc4ODg1ODg/Qj9BQTw+P0A8PEJAQT49QT4/Pz1CQUA6OkA8PE+doqGfoJ+dn6OkpKSlpqeoqKenp6ampqampqW1tLS0tLS0tbSXtqd1Znh2Y2xjY2VjW1JTU1JNXqCMeFhodpajnp6hoaOjo6OjpKSlpqalpKSioaGko6OjoqOlpqWmpqenpp+bmpuioJmWlpWam5mXl5iYmpqYmJqampqbm5qZmZmenZ2goqOjo6KkpKWinqGhoaKjpaampaSjoaCgn5+hoZ+goJ2amJeZmpygpKOjpKWmp6alpaOjpKSkpKWnp6ampqampaWmpKOjo6SjoqKjpKGfoKGhoKGgoaCfn56dnZyamJeVk5KSkpKSkpOTkpOUlZaZmpqbm5qampqbnZ6enp2cnJybm5qamZmZlH10bHReWk9IRUdGQkVORT9GOzo+Pzs0Njo2OTM2NDY4ODo4OTc4ODo8Ozw5Ozs6OjY3ODk5Pj9APjw9QD5AOjlAQT89QT8/QUE+QUE/Ojk9PjpQnaCfnZucnJufoqOlpaWlp6iop6ampqanpqantLS0tLOysrGwsK2rkHiGj36bmn93Yl1TUlFRTGKgootaiKCgn52YmZycnZ2eoaGgpKenpqWkoqGjp6alpaKipaampaanpqagm5mboaCXk5OSl5qcmpeXl5iampmampqam5qYmJmaoKCgoKGfoaKipKamop6gn5+goaOko6Khn56enpyanZuZmpqZmJeZnqChoaKioqKkpaWmpKSkpKKioqKkpaWlpaWlpaalpaOko6KioqGgoKGgnp+fn5+fnp+foJ+cm5qZl5WUlJSTkZCRkpKSkpKSk5SVl5iZmpmZmpqam5+fnp2cnJycmpmZmpiXl5F8cmdxXl1QRj9BRD9KT0JCRjhDRT4+OTg7Nzc0ODQ1OTo6Ozk3OTo8Ozo8PT48PDo2NzY5OD4/QT47Pz49PDg6PkFAQUE/P0FCQERBPjo4PkE8U5ycm5uampycnaGio6KjoqSmp6alpaampqSjo7KysK2rp6amp6alpqiln6iop6qnoXmEXFFST0xcnKCAYpmgnp2clZOVlpeZmp2dnqGmpqampKOioqanp6ajpaampaWmp6amop2cnqGfl5GRkJSXm52YlpaWmJuZmpqampqZl5iam6Ghn56fnpybnJ6goJ6dn56fn6Cio6SjoqCfnp2ZlpeXl5iYmZubnqKioqKioqGio6WlpKOio6SioaGhoqOkpKSko6SkpKSioqKhoqGgn5+gnp2enp2dnZ2dnp6em5mYl5WTk5SUk5KQj5GSkZKSkZKTlJaXl5iYmZqampyenZ2dnJubmpiYmpmXlZaNempmamBiTkY+P0A9SkVAQ0A7QEE8Ozs5Ojc2NTg0Njc4OT04ODs6Oz87Ojs8Ojk6Nzc2ODs7Oz08Ojo8PTw3Oz5DQkRDPz1BQ0FEQT88OkBCO1eZmJqamZmam5ucnp2foqKhoqSlpKSlpqSioJ6op6alpqWlpaemp6ampqakpaanqKehqXJOUU1KVJahenKanJyenJeVlJWWmJiXl5qeoqKhoqOkpKOjpaalpaanpqSlpqalpaOgoKGhn5mSkI+WmpmenJaXl5eZm5ycnJqamZeZm5uen52cnZyZmZqcnZydnp6fn5+hoaCgoaKgn56bl5WVlZeanZ6fn6GhoqKio6OhoaCgoJ2cnaGioqOkpKOioaSlpKOko6SjoqKioqKhoKGfn52cnZ2cnJ2dnJ2enpqXlpaVlJOTkpKSkpCRkpKSkpGSlJWWl5iYmJiam5ycnJycnJ2cm5mYmZiWlJWXi3hsY2RiZFFHQT1DO0tIRDo7Ozw+OTo6OTo3Mzc5NTo4ODg8OTg7OT09Ozo7Ojk8PDc2NDc/PDo9Ozw/Pjw7ODxBQ0FDQkI+P0NAQkFAOj9APztZmZiampqam5ubm5ydoKGhoaGhoqKioqKhn5+dpKWmpqenpaWmp6ampqWkpKalpKSkpaaGUFJQT0+PmHB6mpubnJ6cnJycm5ubmZiYm56dnp6foKOkoqGhoqKio6SkpaalpKOjoaGhnpyalZOUmJuam56amJiYmJqcnpyam5iWmZybnJycnJydmpqbnJ2dnp6dnp6fn52cnJyhoaCblpWVlZacoKGgn5+hoKKjoqOhnZuZlpaWlpicnqCip6ikoaCgoqOjoqKioKCgoJ+fn5+gnp2cm5ucnZydnJmanJuWk5KSkpKUk5KSkpKSkpOSkpKRkpSVlpeYmJiYmZqcm5qbm5ucnJqZmJiXlZWWl4d3ZGdoZGJNQ0U8RDlJSkU5Ojs9PTo6ODg6NjQ3OTU8OTY4OTc5PDs7PDo6PDs6PDw4Nzg3Pj07Pj46Qj86Ojo/QURCQ0FBQD9EQUFAPjpAPj06W5qYmZqbmpubm5uen6CgoaKioKCgn5+enp2dnKWkpaanpqWlpqakoqKio6Oko6Kjo6KnllRYVVJOZ21rgZ6am5udn6Cgn56enp6dnJ2dnJ6enp+goaCfn6CgoKGio6Ojo6OjoqGgnpuZmZiZmZmamZienpiYmZmam5qWlZeWlZicnJ2cm52dnpybnJ2cnZ6bmJqeoaGdm5udoKKhmpWVlpaZoKKgnZueoKGjop+em5eXlJKSlJeYmZ2goqenpaGgn56goaGioaCfnp2cnJubnJubmpqZmpydnJmXmZaVk5GQkJCPkZKSkpKSkZKTk5OTk5OTlJWWlpeXl5manJubnJucnJqamZeXlpaVlZSEcmZsYmRbREJMPT84RktCPEA+Pj05Ozk6PTg1ODg2Ozg1Njo4PDw7Ozw8Ozk8Oj09OTU4Nzw5PD88OkE/Ojo6QEBDQkRBQ0A/Q0FAPj08QD09Ol+al5mamJeYmpycn5+foaGhoJ+fn56foKCenZ2lpKSko6OioqOjoZ+foaGipKOio6SiradXXl1UV19ua42dmpqbnJ6dm5ucnZ+enZycnJydnZ+goKChoaGgoKGgoKGioaGioZ+enJqampqbnJqZmpuZnJ6ZlpaWl5eTjo6QlJabnJuam5udn52cnJycnJ6dlpSZnJ+in5ycnZ+hoJuXl5mZmpycnJubnZ6fnZqXlpaWlJOTlJiampqfoKGmpqWgn56fnqChoaCenJubnJybm5ybm5qZmJmZmZmXl5iVlJKQkJCQj5CSkpKSkZGTk5aYl5STkpSVlJWWlZaZmZmam52cnJyampmXlpaWlpaQgG9vZV5gV0BKSDg/N0lFP0VBPD07Ojo8Ozs3NTs4Njs3NDY6Oj47Oj0+Pj07Ozs+Ozo4Ojk5NkBBPTo8PTo6OT9BQ0JERUM+P0FBPz8+Pj89PDtgl5WXl5aVl5mbnqGhoKGioqCenp6enqCgn52bpaWkpKSioKCfoJ+dnZ+hoqOjo6OkobCjXWVkYGFua4GenJubm5ubmZianJ2enJubm5ycnJ6ipKGeoKGhoqKhoKCgoaGgn5+enJqZmpubm5ybmp2dm5manJiXlZWWkY6Nj5KYnZycm5ycnqCdnJucnJyempWVm56foZ+dnJyenp2cmpqampqampqbm5qXl5aTkpWVlpWTlZaam5qanZ6foqWjnp6fn5+en5+enZ6fnZycm5qcmpqbmpiZmJiYmJiYlZSTkZCRkJCQkZKTk5CRk5SYmZiVk5SVlZWWlZaXmZmXmZqenpyamJiXl5aWl5eYjX1ubV9lVlRFSzw3PjdSRUM+QkE4Ozw7OTg6ODY7Nzc6Njc5Oj0+Ojw8PT49PD06Pz06ODw9OTtAPj4/PT45ODs/QkNAQ0VDPT9DQj5AQD5APTw8YZWSlJWWlpeanJ6goKCgoaCgnp6enp6gn56em6WlpKSioJ+fnp2dm5mbnJydnp+gn56rmGNpbW5pZm2enZybm5ybmpmZmZqam5ucm5uam5ygo6SgnZ6en6CgoKCgn6ChoKCfnpuamZqam5qbm5ufnpyZmJqamJiYmJKOj5OXnJ2bnJ2cnJycnZycnp6dnpqVl5ygoaGfnp2eoJ+cnJuampqbmpqYmpmVk5OTkpOWl5eVlJiYmZucnJydoJ+gnp6enp+fn56en6KjpKKgnp6cm5qampuZmJmZmJeXlpWUlJORkZCQkZKTk5OSkpOUmJmYlpWUlZaWlpaWl5iYmJiXmZqamZeXl5aXlpeWl4l4dmddX1dURUU5OTs8WT5AOEI/OTs7Pjk4Ozg6Ozc5OjU4OTs9PDk9Oz0+PD0+Oz8/Ozk+PDw+Pz5AQUE9ODc7QkNFP0FFQz1AREJBQEQ7Oz47PGKWk5SUlpWUlpiYmZubnJycnZ2cnJ2en56dnJqkpKSkoJ+enpybm5qZmJiYmZucnZ6cpolla3R4bVuFop2dnJydnJqbmpqampydnZ2bmpuboKKinpucnZybnJ2enp2dnZ2fnpyampucnZybm5ycnp6cm5qanZqam5yVkZOXm52dnJ2fnZycnJycnZ6fnp+cl5idn6GhoJ6cn6CfnJubm5qbmpmZmZmZl5WWlZaYl5eXlpaYmZuenp2dn6GhoJ+fnp6fn5+dn5+hoqKhoZ+fn5yZm5qcnZuampmXlpaYl5eXlpWTkpGTlJSTlJSUlJaZmJaVlZeZmJeYl5eXl5eYl5iXl5eXlpaYl5eVl5eDeHZfW11eUT1GOjk4P1VDQTtDQzo8Pz86Ojk3Ozg4ODc0ODk8Ozw4Ozs8PTo9Pjo/QT06PTw+PkA/PUBBPjk2PERDRUBBRUU9PkVERD9COzo8OTpkl5SVlZaUlJSUlJWXmJiamZqcnJydnp6dnZybo6Oko6CenJuamZqZmJiYmZiam5ubm6WJa3F2em9lmp+enp2dnJybnZ6dnJ2enp2dnJydm5ygoJuampubmpudnJqampucnJuZmZycnJ2dnZ2dnZ2dnpybmp+fm5ydm5mZmZudnZ2dn52dn5+dnJydn5+fn5uanZ+goJ+dnJ6gnpubm5ubm5yampuamZudnJqZmJeYmJiYmp2foKCgoJ+hoaGgoJ+en5+fnp6foaKhoJ+enp+enJqam5ubmpqZlpaXmZmYmJiWlJOUlJWVk5OVlZSVlpWVlZSYmZuamZaWl5WWmJiWl5OUlJGRk4yRkJOWfXhqYWJiXFA8QDw2OENWSERCOjg7Oj47Nzc5Nj06OTk2NDc6Ozw9OTo6Oz87PT08QD47Oz46PT89PkBBP0A8NztBQ0U/P0REPj9EREM+Qj07PDs6Z5aTk5OTk5OTlJSVlpeWl5aWl5mbm5ybm5uamaOjoqCfnpuamJeYl5eXmJmYmZybm5qkgGpqb3lzcZegnp2dnJydnp6enp+enp2cnJydnp2bnJuampqam5ubmZiYmpqamZmZmJqdm5ydnZ2dnJ2cnZ2cm5qdn5ucnJubnJubnZ2dnJydnp2enZydnZ2cnJ2dm5uenp6dnZybnpubnJycnJydnJubmpmbmpmYmZmYmpmZmpyfn5+jpaKfoaKioaGfnqCgn5+fnqCioaGhn5+fn52ZmpudnZqZmJWWl5aVlZaTkpOUk5STkJCSk5GUkY+OkJGOlZabmJWYlJmXlJiRjJCPk5yTkoyFjIeDhndxZ2pkW1xRQT44NkJHYEJFR0A+Ozw7Ojg4NjU8ODo4MzQ6Njk9PTk5Ojs9Ozw6PD48Oj5AOj5APjw/QD8+PDg6Q0FEPz5CRD8+Q0VCPUJAPDw8OmeYk5KSk5OSk5SVlJWXl5aWlZaXmZmZmpqampqkoqCfn52bmpmYmJiXl5iZmJmcnZ2cqH1nZXN7enOJop+enp2dnp6enZ2enZ6enp2dnZ6cm5ybmpubm5ucm5iYmJmZmJiZmZmbnZycnZ6enp6enp6dnZybm52bnJybnJ2dnZ2dnJ2dnp+fn52cnZ2dm5qbnJmZnJ2dnZ2dm5uanJ2dnJycnp2dnZybmZeVlZeXmJqam5ubnZ6foqOhoKGhnJucm5ubnZqcmZycn6CfnZiZmZmUkpKUl5SPj4+OkYyNiYuQi4mLjpGRj4mQmJiQkoyNi5KQj5iYoqiqpqWlrKOmoZqep6eyqKKVo6Cfl39wcWlsXFtcTUY8NzdHR1g+SE5URjk+Ojg5ODc1PTk4NzMzOTY6Pjw6Nzo8Ozo6Ojo8PDs/PjtAQD47PT5BPDw2N0A+QkA+QUY+PEFEQT1DQj49PDlmmJSTk5OTkpOUlZOVl5iYmJaXl5iZmZqampqaoqGfnp2cm5mYmJiYmJiYmZmZm5ybnKx/am16f3lxh6Genp2cnZ6enp6enp6dnp2dnZ6enJubnJubm5ubm5uZmJiYmJiYmJmZnJ2dnJyenp6enp+fnp6dnp6dnJydnJ2dnZ6fnZ2fn56goJ+enZ2dnZybnJ2em5qbm52enZ6dm5ubnJ2cnp2cnZqYl5SRjo+QkJGVmJSWlJiZmpudmJuYlY2Mjo6TkpKRj4mQjpGRjo+Ki42NjYiIi4+Lg42NkY+MkI2Qk5WVnJihoJySn6SipKmam5eanKOprb3Bwbq8uL26ucC8ubq3uru7tL2zwbV/bnVmZ1peWUxJRTo7TElTPFZSSUM6QTo7Ozc3NTo6OjgyNTY4Oz08OTk7Ozw5Nzo4Ojw6PT85PD8+PDw9QTs5NTg8O0A/QT9EPTxBQkA8REM9PT06YZOTkZCUlJOTk5OTlJeYlpeZmJmYmZqbmpqamp+gnp+fnJqZmpqampmYl5iZmZmZmZmphXB1e4B3b4mhnp6enp6fn56en56fn56dnp6fnp2dnJ2cm5ubm5ubmpiYmJiZmZiam52cnJ2dnp2enp6goJ+enZ6hoJ6dnp2enZ6fn56en6CenZ6enJydnZ2cm5qYnJuVmJqamJiYmJmSjJCXlKCXk4+MjYqKiImMiJORh5CPjYqKkJCLjoqMi4+IiImJjpGOjYaFiYaKhoWLiI+SkJCNkJKXlpKamJ2TlJ6kpqaqq7Gsr6+rpquqsbm5tbS0rqyvtMDIxcXBvsbDxMTDurW+t7a0s7C2tb6qcHRyXGZfXV1JRj8/RUtMVklcTEQ/PUI6Qzk5Nzc7OTk3MTc5ODo+ODg6PDw7OTc5OTs9Oj4/OT5BPDs+PD46OTY5PDpBPkNBQT08QkBAPkJEPj8+OVyHhIOHi42KiYaFgYqMkZOVmJiHlZaWkpiampmenZ+gn52ampubm5ycm5iWmJmXl5ibqo56dXZ7f3mCoJ+fnp+goKCfn5+foKCfnp2dnp+enp2dnJqbm5ybm5uYmJiXl5iZm5ucnJydnp6enpybm52dnZycoaGfnZ6dnZ2dnp2dnJiWlpaYlZWSlpmWk5GKjI+PjI+NkIuLj4+WiYiEi5GZjn2Fi42PjYyHioyQm4yRj4+Lio6TjIyNjIiSi4yFiYyPhouIh42KhYyEj4qXkJOYmpWbnKOqoaKknKKrsbe0ubWxs62vsrKlp7O6sbq6vLa3tsDDw729vLa/urq8wbW4wL60r66mqa+3mm58Z1tjWl1fSEU+QUtJU1hZXkFGOTk9OUY/Pzo3Ozs7NjM6Nzo5Pjg6Ojw9OTk4Ozk7PDo+PTtAQDs8QjxAOjg0Nzw7Qj9BQj4+O0NEREBDQz0+PjlhmZWLkYWNj5aSiHl9e3+Fi4OKgoqJhmuAeJCLlpqRnZ2UlJGTlpeampiWk42Sk5KQm5uIdndzcX1/cpGgnZubm5yenZ2eoKGgm5uWlpucmpybnJuYmZqYmJmampqWi5CTlpmYlZiYlpucl5WSkY2SkZCUk5KXm5mYm5ePjpCLjo2Ch4uLi4qLiI2RjIeHhoqIiZGKh4yEhYqNi4qNhI+UkIyDkJOUmZWQi5OTkZWRlpWOj5GMlI2Oj4qIj4ePhoeJiYmNiomJioWNh46JmJKUmpuXmKChp6Cko5qqqbO2sbWwqKmiqK6tn6qvsK21ubi8wr/BxLixtbCutrOwuL68ury+urOzp7G3wpB1gGNiXlpXUk1IRkVQSVlXX1tDUDpCQz1HRj84Nzo6NzU1OTc8OTw5ODo9Pjo6Nzs7Pjs7PTs9P0E7Pz48Pzo4NDM3OkFBQEI+PjpDREM/QUM7PT45Z6mloqKZn6CippeUiI2CiIJ1h4iKiIp7e3Z7enmPeoiSfn18en6CkYWBgH1zfH99fISHfnRweHZzfHaBj4iIiYeIioyMkZicl4iOhIuNi4iNkI+Pi5GPi4yOj5CQjouFhYeLjIyHiIuOi4eMhYaBjYuGiop/iYqGiJiRiIOIg4KFfIuLjIaJi4iKkIyIi42PjI+Wh4mLio6NjY2Wk5OdnJyalpycm56bmpuYnZeTkZWWkJKRi4+LlpSMjYqDi4SEiYyQkIqOio2LipGJjZOTk5SVk5KcmZ6Xn6CfpaKvsamupKSfmKStpqa4t6ysu729wsPAv7+vpa2wsLS3uLO0uLa0ta6stK+4tLaBeXpjZmBeVlBRQUVMT0lcXl9UR0dCS0xCREA9ODg7OTU3Nzk3Ozc9PDk9Pj05Ozg6O0A8Oj06PkJBOD88Oj84NjQyOTtCQD9CPj04QEI/PkBEO0A+N2CloJqXnaGaoaCPl5efl5WCjaCfo6GdmpKOjIxycXBvdnFucG1ucHZub29waHBxcHR+c3FycXd7cnl2d3Jyd3Z6e3l8fXt/iIGEi3+PkYaNi4uGiouLiYaEgYaCgIKJkYOAg4x/ho+LiYWAh32AgZKQhoSEho2DhIyPj4+IjY+Hi4iRkJWRjpCKk5eOj5WYp6SfnZWYlpaln5udq6aqt7W4srGnr6qnpqGfmp2WkpWVkYqPjImTjZuVjYuLhoaJjJWQkJCLmZKVlZSbkJiTlIyNkYyWl5WilZ6mqauno6OqsJucpp+mq6G0vb6zs7+5u7u6uby9rqiusa6wuLyztLGxqrCpqLGxsqild3J0X2hhYFRWUUlKSFZNXl5eVExKRVFKRUdDPTo5OTc0ODY4Mzg4PTo9PD47OTs4Ojs/PDw+OT9DPzg7Ojg8Nzc2Mzc5RT4/Qz89N0BAQT0/RDw+PThUj4yGh4eUjJWZl5yWmZaNlZyWlZydoKCdmpiWeHFubXJ4cXFsbnJwa3FvcG1yc3t1dnd5fnVxeHZ0d3tybn98gX15eH1/eYOGg4WCg5CLkIuLi42Pi4mJhYKBfX9zfYiAfpyQhIWFiYuPinp9fYaOjYqGjZSRi5CXj5SXkpihlp6XlZunpp+goKawq6GjpbW0sqqmqq+isba5vcK7ucO+vLi9uLWxrLCspZuSk5mfm5SPk5WOmp2doJqfn5edo6qsoZ+em62hp6qwqaampJiRkZWUo6SirKSss7Szs6i3tru4sLKvra2yt7a6srW6s7e5u7i8urayr6yxsbKztLOxsa2us7Gzs6yhl3Zxc19jXlJRVE1PSUdYT1tcZFROR1VPRURKRD44Ojg3NTg4ODU5Nzo6PTw/Ojg8ODk5PTs9PTpCPj84Ozo5Ojk4NjI1N0I+P0RAQDY+P0I/PEM8PT46Tn98go6MjJOTl5eaj5SWjZaRkZSXk5qanqGdnHJvcnFxcXFxcG5zcW91dHJxdneAdXd8eYV+d3t8eX1/fICJiYmDfXp/h4GIiYGAgIGGiIGGi4aIhYSIiImEf4J/enx8fX6SkH+IeIGFi4qDhIWKj4yNkZmdlJSUoJqan6Ktsa2ppKWtr6ysrLWuvrmtrqm1sLexq7G2rK+9wsLAvrq8trKutraxtK66u7OurKepp6unoqmtoKmooq+wuLSxvLq6urK0ta+8tLezt7e7t7mtrbCprLW5sbeytLe2sLu7vLu6ury1vLi0wbWsqqqrtLG3uLm1trSzsKymrrCqq7Cxq6yusLKxtK6qo5N4dnJlZ1tMUlBGTUhTV1JlXmdUUExcUUhMUkNBOTk3OTU4ODY2Ozc5Ojs6Pjk4Ozo6Ojw8Pj08RD45Njs7ODg+OTUxNTZCRkREP0A3Pj5DPjpBP0BAO0t/gomXmJSdlpabmIuSlo6XkZGVl5SZl5+bmZx8dHV2dXl1c3RudnJzdHV2d319gX56gXyDfoJ/fYB/hIKFj52RiYF/go+Xjo6HgoCBiIuFfoqQi3+HjYyLioeSioeGjZGTkZGEh319g4iMjouOiomQj46PlJSYkZWbmp2dqK6yr6+1tLOtsrW4sLy1tbGqsKqztbS7t7SztrS1r7i4t62noqassLCvtre3vrW5vLOysa61u7C0r6+yu7axuMC9tLS0s7izvLq2tLrAvbm6ubq+ubm5vrWysa+yr6q1tLGzsbSzrri4tb+vpKaoo6ussa+zrq6wsKytq6qroqKmqKKnrauqpaynoqeYeHlxZmVZT09NSVJNV0xPX15cTlVVYlFEVE07Pzk8ODk1Nzc1Nzk1Ojo6OTs4Ojw8Oj08Pj4/P0I9ODY6Ojk6QDs1MjY2QUZDQz4/Nz49Q0I5P0I/PjtLjpGTmJmVmZGTopiTkpKLk4uOkI+Vl5ablZSbhoJ9enh2dHRzdH53end2gIKDhouMhISFioaQiYeRk5aRjZaalY+IjI+emJaVkpCTl5qamJCdoJ2Tl5qgmZ2bo6CVkJugpKOak42IiIuJkZGOkY6LmJqPj4yUmpecnJufnKSstLm6vK+2tLi0tLK3uLmzq6+qqKy1srK1rrGrrqa3s7OxpaGotbCvrayrtbqyu7q6tLK3ur67ubG4sLmtqLK4u66ttLS3tbu2trm5vLe0r7G0t7a5s7e1pq2pq6ior6yprq2up6KxtLG0q6aop6Cjq66oqq6orLKwr6+pqKGeoaGjpqOgopqlo56ol3J3bmdiVUtUT09KQ1BLX2JYWlFcVGBNSFJJQUA5Ojg2Njc3NTg5NDs5Ozk8Nzs+Ojg8PD0/QkBBPTs2OTk5Oj87NjM3OD5GQkJAQjk+PUBDPkBGQj44R5OWkZWTkpSQkZ+ZnZmVkI+Sko6Mk5aWko6RlZGSkIaBeXJzdXuBhI6HhZGTkpicnJiVkJWYo5yaoaeqqZ+clpeVnaKioZyZnpmlqKyvramnqqmop6GlqKirqamvoZufoaOjoJqfoJyUjZiUmKCgoaSem5qkp6Spq66spaOoq6+xtK6qrK6zr6ystLO0ua6urayqrLKwsK2wqKqmsrS0uK6qtrqwr6qurLC3s7i0t7W0u7y4tbWxtauyrKiys7uvrbGytLa1sbG0s7OvrKuvs7a0sayutKqqpqWnrauoqKupqqifqbOwqqeppaOio7CtqaatpairrayppaSioKWipaOYmZyVnqKippdudWVnZFZPWEtLSktTVHBiWWRXX1tcUlpQTEM8ODk6Njk4NzQ3NzQ4Ojw6PDg6PTk3PDw7PkM/QT47OTo5Ojs+PTg0NThBREVEQkM5PjtAPkI/R0Q+N0KSm5SVlZaVj46Wl5qZlZGKk5SSjo+SkYqKiY2Ul5qTjYmCho6VkZSfmpuin5+jnqGhn5ijpKelpaapqa2rqaKmpKilpKGfnqOjra2srairrq6qqqukoaKkqaenqaijopybm6SgpaijoJidmZ+hoqmnoKKirqyrqqetrqilpKmpqammo6iqqaekp66wr7Ovq7Crqq+yr7Czua+rqLCxrrCyubO0r62vtbCss7GurLW1tLSzs7CvrKyqrKusr7G0s7CwrrCwsKyqrauqq6alrrCysKumqbCvqaOkqaunqKaopquwq6mvqaaoqaalo6iwraqpqKKpo6WnpKGhoKKloZ2el5aYlJugpKmUbnNeamlfVVpOUk5QT1JkXGVjW11ZXFBZT0tAPDs5Ojc6ODczNTMzODo9OTo4OTo5Oj08PEBEPkA9OTo8PDw+Oz45NTo8QkFFQUNBOT47P0BEQENCQDdAkZ6YlJeZlpGHi5SSl5GIg4mLk4+OkI2Hh4SFlZmWmJeZlpqeop2anKKkoaCdn5qfoKGgpqGgoKCjo6KlqKmrramqpqOmpaCloKaopqWnqaepqKOnppmcpKaioaChoaCcmJmfoKGkpKKenpagm5qioqChn6CiqKCcn6GloaCmo6KfpKGspp6foaGkrKqnrKivq6e0sa6ur7WyrKqwq6mtrbWwrq6srreup6yqpKivsq+sq7Kvqqqpq6utqa6urrGxraqtqaunp6uoqauinaapqKilqKisqKilpKWop6iopqmsr6+oq6mhoqKlo6Opq6ymqKWjqKKhoKSdnZ+hoZ2bnZ+amZWcnKOqlG9zZm5yZF1dUFVPV09eZGRsaGJiWlpSVE9NQTo9Ojo4Ozk1MTYzMjg4Ozk5OTk7OTk8Oz0/Qz5APTk7Ojs8QD0+PDk5PEFBRUFGQTo9Oz9BQUJBRUI4PYqWlJOYmpaPiISNjpGSjIiIiI+JiZCRjoqKiJubmZygpaKlnqKjoZqeoZyanZ6bnKOop6ugoKOYoJ2XnKGjo6WjoqKkrKilqaCepqmnrKmkn6Kgoqahpq6mpp2fn5+fn5manJyhoKGkn6GbnZqcoJ6hn56eoKOZlpqYo6KipJ+ZnKGhoqCbmp6goaSgnaejqrGorqusqaSqqquorKalrKqws6+rq6mwq6appaWoq6ynpqevq6Wnq6upq6irqqqrrailqKOmpaesqayoopykoaOmo6qpqKano6SnqKanqKepqKupoaKoo5yepqWjqKino6WlpqmgpJ6inpeYnZ+doqKlnpiUlZ6go5d1d2t2d2FfXFVZUVVWW2Nec19oX2NTUVlUSD48PTg7OTo4NTM3MzM0Nzo4OT05Ozo5PDxBQEM9PT44Ozw9PEA/Qz86ODo+P0NAREE6Oz48QD9DQ0VDOTyCmJmenZ2alZKKiZGRl5GQh4SJgoGNj4+Sj42cnZ+hpKmlqaeorK2moqKfmKSmo6Stsa6yp6asm56em5qjp6Cfo5+foq+qqqyoqKuwqaiqqKGfoKeprbCyr6yjoqahqaWepKOipqClpKKlo56doJ6fpaKinp+imJWemp6fpKGblZigoZ2enJudnZuZmZWen6Oonp2iqKGaoaOmoqSoqaqoq7CxqKWlp6eopKWpqaqnoqWmqKadnqWloqClpaOlpqCjpaOjpaelqamqpKekpqKmp6SrqaenpKGlqKynpqWlo6OopJWdo5+bnaCjqaeopqGjo6mooKiioJyVkZqfoKGmopuXkpCamqCVfHdvfXlmW1tgX1pcVlxoZG9jbmlpYl5QUEA/Ozo4OTg8OzYzNDMzMzc5OTs8OTs7OT49QkBAPTs9ODw9QD08PENBPjo4PT9EP0M+Ojk/PEI/P0FEQjk6gJ6kp6Kem5+gmY+ZnaCWloqGj4iEi4qTl5SRo6Wnqq6trLOys7S4t62pqqevtLKxqq6usbKusa2lq7OssbGpq6+rq6y2r7Owq7GysaOfoqqpp663trS0trOvrKuuq7awqbKxra6npp6io6ObnZyXoqiloZ+eo5ueoZqWnaScm5aZoqefoJ+joJuUlpmWl5qfoJmVnqKZmJ2dpZ2gpKeqqaiqraylqaSlqqeqqaqsp6SkpKOimZmhnpqaoaCfpaWYnqSmpKqooqelpaGqp6mnp6ejqKWmpaGkqKesoqekoaalpaOVl52Ym5mVo6elpaSfnZ2lo6Kqo5+amZiXnJyaoaGakJOTl5ibjX93cnZ4aWJbX15cYllgZG5ta25hX2RgUE9BQDs7OTs4Ojk2MTQzNjQ3Nzc6PTo8Ozk9PUI/Pj89PDo/OTo7PD5BRUA9OTtAQT5DPDs5PzlAQEBAQkM7OXuao6OcoJ2dop2Zn6KioJibmJaYkpSQm5qWl7S0rrW4s7S4tre0uLm3tbm4ub28uKqLnLK4vLS9urW7uru4s7q/uLe5u7G3r6iusq2inJ+qsri8vL27ur+0r7GztbS3t6+1tLWysKikop+gl5Wal6SqpqahpKOkq6WlmKGko52goaKooaOgpaGck5mYmJmco56cmpudl5uZlqWam5+hqKmpqKuvr66pqKirrKytq6irp6WjoJyfo6Ojn6Cipammmpyip6Spn6GjoqKgpaanpqSooJ+ipKGjoqiop6OloaGopqalo5mbmJuTj6GknqKfmJiVoJuhpaCfm5udnJuamZugmo2YmZiTkYaAdnh5eGNbUllUX19hbWh1a3BnaWliWVNMQDw6Ozg5Nzk3NTU2Mjg1Njc3Ojw7Ozs7QD4/QD0+Pjk6PDk2Nz47QkZCPDg7P0NDRDw+OT43PkFCP0ZDOzhwkpqblJ6bm52Vl52doqajopaXnpaXl6GblJi+t7G4uba3t7i7l5S2vbu9vcDFtaK7mKC3v7+6wcm0nbu2sra/xcGooLa0urGqrrSxsLG0tba8vL68vL7Guri3ur20r7Wxsbq4t7Kzsqqmpp+YpKSnqKSupKurtbWus6CnqqynqqmlpqCnoKGmoZOWmJ2foqSjnZ6coaChnZekmpmdoKaqqqqtrq2tsLGrrK2sqamrrqimpaalpqSkpqaeo6eppKGcoKKjpqCio5+jpJ2foqWgpJyboZ6fo6GhpaSlqaOkpaKkp6ehn52elpOcoJiZko+MjJeWn5uWnJqdnJqSlpSUmJOQmp2YiouHgIB8gnhhXllTYWhgZnNvc2l0ZGlkYltMSz46ODg5ODg5NzM0NTI1NDY2OTw8Oz08P0E/QEA9Pj44OTs4Njc/OUJFQzw7PD5DREM9QDs9Nz1DQ0BFQjw3Z4yRk4qalZiblZWYm6Knq6aVl5iQlZmhnpeXvrWztLu6ubi5woeYt6u4u8DCxbOjw6e4s72/tMTHvbS7uL62wMTErqCworW2tb2+wcPGwsO5vb/AwL2/xL28ur2+tKeqmLHAvbi1ucCzr6+qqqitp6ekr6eqtLyxtLWor7Gwr6yqoqajrJ+fpquXmqifpaWfoJydoKuwsKyiq5yYm6Cor7Kys6uorre1sq2tqaalqKulpaStqaShn6Cnnp6mqKmmnp+anqGlpqmcnaObl6KmmpuanZ+cmqGcmZ2eoKijn6GfnaWioKOioZSZmpmTj4qLhI2Qk5uPjpiVm5eYkJORkomNl5iYk4uKi32AgIVwYGFeXmpiYm53dXZubFtiUVVcTUc7PDk3OTc5Ojc0NDQxNDM3Njg8Ozs8PEBAPUA/Pj8+Ojo5Ojc6Pz5FRUU8PT1AQkJCQUI7PDhAQ0NARD87NV+MjIaFlouUlZeYl5ifpqellpWVkZebn5ual7mxtrO5vLy5urWqsryxvsG0vMe5uLuuv6fGw7/KxsnIxcXJvMLHx7+xsKe8vL7FxMbJx8XGu8TAxcbAua+9vMC+vrOrqoyzu760tbfCuq2vsLWqq6aqo62kp7G2q7WyrbOtqK6vp6awr7Ktqq+zpKu1qaeopKCgnqmyuL61tbWqqaausre4t7apq7i8ubexr66noqOop6SfqKOfnqCZoZydoqSnp6GelJuaoKGlnqChnpajnZSQlpiboZqflpORlpSin5qenJudoZ6kn56VnJiPkpOPjImTkJefiZCWkZuUmJGRlZaDjJWXlpKLjIh8f4N/amZoYWtsZm51cXJ1cWZeX1xSSUU/Ojo6Nzg0ODw3NjU0MjMzNjU3PDo7PDs9QD4/QD48PTk5OTs6PDw+QkRFPj49QENDQ0REOzo4QUJCQUNAOTJbk4iEjZGKi5GRlZCSmp2fnJOSmJSdnZqXmpW2sbm1tb6+tri1uLO8vMTEusPHwb+0s8XFxr/CzcfLzsvLx8HDxsfIysXExcO7vLzBxcHFxb/DwsbFwLGTvrq/w8K2trqptLO0qauzu7uxn5uxr6ykrK60p6qpqKqtrKmlpZ6pr6uyu7q4u7e5t7O5uLOurLO0qrC1ub3Bur6+vL60urm4u7qysbS8u7q7s7Oyp6Smq6uioaCdmpudmpyXmpuenJygnZaclpuZnZ6io52UnJCNiY6OkZ6bnJWNh5KLmJiWmpybmJybnp6cmp6UjpiYmpSRmZeeoZWYmpKXlJWRlJqYk4+TnZaSi5F+enx/dGtrbmRvbWhxeG95amlhXGdhUUZEQTw5OTc2NDQ6ODQ2NTMzMjY1Nj05OTs7PT47Pj49Oz05OTs7Oz89QUNBQkFAPEBDQ0NFQjs4OUQ/P0BCPzsyV5uQkZCQh4WSjo2IjZCTlZGPjZSUm5STlpqRs7e4uLi+u7C1sri2tbbAw8G+w8LAvru+u7u8xMzEzNDLxsa/xcfLyNTLysjGv7u7vsS+xcjGxsPEw7i0wLe0vMHCucK3t7/Au66lrre8t62co7ewpq20tayupaWjqKSgoKWZqrOyvsG+urm6uLW0srG0tLO6wL7Av769u7u9vsDCt7a3tru7sru+ubi3u7a3tKyoqamrpqijnpOampyYkZKZl5GRmJqXnpiWk5acm5+elJOJiX6GiIuWlJiZkYmVkZeWlZmbmpaYl5idnpyhmJWZmZyYl5ybn56jnJ6WmJeTl5yZmZyUlp2UlpOJdnl6e3Zua2lndVpmcndzeWZnXWRbUlhJRj87Nzg4NzYxNjk3NDQzMzM2NDY7ODo8Oz08OD0+PDo7PDs9Ozs+PkRBQURCQEBBQkNDREM9OTlCQD8/QD89MkyWmpaSk4yKmJCKi4yOkpKKiIaNkJiKj5CUl7O7tba/vb2xtrjBvby0uL/Bsbi3vsHFvbu8wsbJv8jOyMHEwcfKysbKxczIzcbIxb/DwMvNz8rGxMPDwcS+uL7Bw8DEvsHPz87Gq6+2tLWroKe0s66ruLWzq6mjoq2prKatn6y1tL/Cvrm4vbawrausr7W0ur7Fv7u8urO5u7i5ubWtsLS9u7G/vLiytrmzubu0ra2orKyqqaeXnpualY2MmJSTi5WWlJyZl5WWmZKYn5mQiop+iYqKkY6Vl5OUn5mWkJSZmJmWmJOUm6GeoZiYmp2ZmZaenpibopqdnJuYmpuZlpeXlpyZlJyYfoB4eXV1ZWVpamddam9teHdjYmBgXlhXRkU4Ojg6OTc5NDQ5NzY2NTEyMzM0Ozo9Pzs9PTo6PTs8Pjo7Pz48QkBDQkJFQj0/Q0NDQ0RFQDk6QkFBQj5CQTVCkJeUlZmSj5qQjpKRjZSVi4qHjI2UiImPkpq2u7S8xsHEwr3BxcLAtLO9v6ywr7rDysPCvs3IxbfByMW/wcLIy8rCwsTJzM3Pz8zDx8bIyMjIycfFycfIx7/Fx8TEx8jK08/SzLy4trS4uMG+vrq9ury6vKytp6q7urm3wLK1uLLAxrq3t8Gzsa2tqau1s7u2w7a2vbWxt762s7e4sLW2v7uwvbq0q7CxsbO8urOzrqutq62xnaOjoJqQjpiXlZCclpaYlpWSnJmTm5+clpGUjpWQiYyQlZOUm56YmZKSnJedlJmSk5aZmJ2VnJ6do5yVnZ+TnKKcnKCfnaOemJSVl5ebmpmgkH99cXRxb2JhZ3VnaWl0bXhsXWRbVWBZTEhDNjw5OTg4OjUzOjY2NDQxMzUyNTs6PD47Ozw9PDs8PTw7PD49P0E/RUFCQ0M+QEFARUVERUE7Nz5DQkI+Q0I4O4+akZaalJKUjZCUlI6VlI6Pi4yJk4uIkJObt8C6xsXEw8zCwcS9vrWvt7uvr7O6wMfFxMHMy8W2ucDCwsTHytHLwsPExsnFzdDOx8zJwsLJwcrKyMbMys3FxsXDxsXJzdDNz8zHxMDDwsnNx8XBxMfBu760sbCwwb6/wca/vri3w8K6urbAvrWyrKmvsri+tMC0tLi0t7nEua+8vrm+v8K/tbq2q6qsrq+wt768trSura2utaSlqKimmpycnZyeopydmZOQkp2VmKCdmJiVmZmZl46MlH2QkJefmZmYk5GToI6Nko+VjpCUlaKdnKSem56elpyjoKGipKOkop6amZubnJ2enIN9cnx4cGdgamp2bGlldW90Yl1iVFdUU01HOjc7OTk3Nzo3NDg3ODQ1MjM0MjU7Ojk+Oj08Pz04Oz05OTk9PEBBQEVCQUJBQT9AP0RFREVAPDo+QkNCQENBOjSAoZeUmZiVkImUk5aTiZGMlJGOiJaKi5CXnMXLw8O8wMPHwbm9vbu4tre3rrK3uLzAwsDCx8bHurzAwsXHyMbSycHCw7+/vsTLyMrLx73U08fIzcjDyMnJxcXDwsHCx8fJysfMyMfIzcbLz8W3wMDAwLu6vbWzs7+/ub/DucC3u8G8uri7ub27srCvsKy5wri9ube1t7q9xb24xsjCwcLGwr28tamurrCwr7O6t7m2sK+tr7OppquprqannqSlo6OjoqCblZiekZecl5GRlZeZlZmRlJiSlYyYo5qcnp2FiZ+TfJKWlZKUlJennaCipJ+en56foaGkoqKjoaOinJ2fnqOhppl5enl/cnBmZWdkamVham1ub15ZXFZWTlBKRjk5Ozk3Njc3NjM3ODk1NjEzNTI3PDs8QDs/PDw6ODo8OTk4Pj1APz9GP0JBQz89QT5ARENDQTw5PENBQ0RBQDozbKKdlZedlo+PmJiZmIiSjZGVkI+Vjo6TlpbKy7u5urnBu7q3vsG8vLu5sa61uri4u8S6vsC+vru8wMXBxsK+xsK5u8O5uLm7vcHHwcTNv5DLxsXEwcTBwsHEwcO+vcLAwMHCy8PGzMvFyNHCsL69uLq7vL63tLC5vrO8vrG5tbi7tryztbm2uba5t7GtusG6vMG/t73Ev8bDw8fHwrvAwr/Cv7iys7O1tLGut7S3tbSxrK2xp6Wlp7CtqJ+nq6ajqKWmpqCgn5SYmZSRkZWUl5OYl5qhnZ6hnKGdoaWglpSbkZeXmJqTnpmZqaSlpKWdoqCanqCkoqOcoqGjoJ6cnp6ppaiVfXuDeG5mYWRiYWJjY2piZ2NbWlpcWVFORT07OTo7Nzc5OTY0OTk6NTMxNDUyNzo7OkA9Pzw8OTc3Ozo5Ojw+QD8+RDxCQURAPz49QkRCQkI+OjlCP0FCPT44NVmfnJiTmZaRlZiYmpeQkZCQk5GTlJKSkpSUxce4tbq5wrm5vMPFwri7ubGxtry6tbnAu7u5tri0tLW/u73Aub66urTAuLW4s666u7a/0Z+IwM67v8G8u8S+u8HEwL6+uLzBwcu+vcnEwMDKwLHBv7u4u766tbe0uLy0vbi1tLCzvLG3tri/tr25vb65t7q+u7/Axb2+y8PGw8TAw762ubq2v7i7v7y4trOyq7CwsrWzs66sq6emnqeurauiqKumpqqjp6iqo5+Ym52bmpicnJiXnJuhpZ2anqGhoKGmoJqbnJiboJ+dnJ+coKiho6SknaKfmqKgop+el6Shop+dmpieqKWhi3x5iH1xY2BiYmdqZ2ZpZWldVlZUWU9TS0U4PzY7Ojc3OTs2NTo7PDYzMTM0MTc7OTg/PT47PDs3Njk5ODo7PUA/PkA9PT9CPjxAQUNDQUBDPTo2PEBBQDw9ODdJlJibj5OUkZWYlZGWkpWRkJGUlZSTk5KYlcHCwLq8ub62uL7EwMKxvbqytLO4vLW3vMC8vbS1sbC1t7W7wbi+ub+8vLe0t7Ctt7a4xMuMhZvIvbvDtbrHuLa5u725ura7xcXKvbnFwL+8wb64xr3BwLzFuLa3tLi2tru7uLa0t7q1tLi8vbm/ucPAwLu5vLu+vcjEvcfEw7rAvb62sra4srm0usLCureysaysq62yr7Kur6ijpJ6rrKyqpKakpKiqoqemraihoaGmn6Oiop6bnKKfoKOdnJuhn6KgpKCem5eZn6GdnZ6eoaWkoaGioZ6ho5yinqCZnZijn52eoJqZoKKmnYR6g4B4cG1lZWZvaWVraFhYTktLS1JJTEhDOT04PTs2Ojs5Njc8ODk4NjA0MzE3OTk7Pz0+Ojw6ODg5PDg6Ozs7PD1BPj09Q0E8P0NDREA/Pzw6Nz5CREE/QDg4P4mYmoyMkI+Tl5WMkpCakpGXmJaUlJKQmpTDvsbBwby8uLi6v7a8scK2tLyxtLa4s7q9v768sq2vrLGwt7y3u73BxLm3ubiwurS5vMm6g4WGtcS+x7e5uK23tbi6tLizu8XGy8G8xsDAv728v8nDxMW+xri1srK9uLi4vrq6uby6urS3u7q5v7zEwL+5uri/ubvFxr3Fw8Kyur27sa+2uLO3s7q+wLm2rLGrrqmqqa2qqq6mpKWnrq2ppaOio6GkpaWmoqato6Klo5+ho6Gcmpyhn6CloaCenZygnaWgnpeVmZ2fn52gn6KmpaCknpybn6Ofn5mcmZ2epJyWnKOcnqGcppZ+f4d8a25wZ3Brc2VibV9cVEhLSkRKQkNHPzk7OD48Nzs7OTc4Ozc8PDYyNzUxNjk8PD08QTs8Ojs6OT45Ojs9PUA+RD89PkRAPz9BRkQ/Pzw9OTc/QUNCQEI5Ojl3nJiLh4uQkpOWjY+TmpOQnZiSkY6QjpiSvbfHvsO+vbu+vL22uri9ure9s7OwuLi1uby8wLeqraSusLe5sb2+u8S2uKWHgIt7jpzFo3yDhbHLxs/CwLiutbW8vri6sr7ExMrFwcnDwr+/vr3HzMfHxMe9tbW2wb26u7/CusDCv7y2t729vcHBwL+8ube8wru3v8W7wr++tbe8vK+vt7awtLO6ubq7r6mtq62rrKaqoqeuqKWqra2vp6Sgn6ajnqKjqKOjq6Oiop6dm5ublJaZnJyfpZ6fnpmYnpejoJyXmZqZmqOjop6jo6egpqCbnaCjnp2WoJmcoKCblJegn6WcmKKQgYaBcWVsaW50bnhjZ2JbY1FLVEhFRUNHQzw7OTg9Ojc6PTo4OTs3PD01MzY1MDY4OTo8O0A9PDo+PDk+OTk9Pjs/PkM8Pz5APz4/P0ZEQEE/Pjo3P0BDQz9BPTo4ZqGYj4uNlZKVlY6PlpmVl5uVjoyMjY+bk7m2wbS/vLm8w8C+wLq1trKywLmvsry8sLe7tru8q6ujsLjJ07a6vrzGtKJ4ZXJlVWBmh419h4eqzs7RzMrEtbrAw8i/vrW/wb/Gxr/LxsO/wbzAw8zKx8XGwLm9vMS/wL/CyL3Hx8XFvLrEv7vBv7rAvLu7wMS9t7nCub69t7S2uLqur7WxsLCytre0t6yurKqsrKuoq6Gms6qlra+trKippaOkp5+io6Onoaeiop6cnZyamYyQlpeZnaKZnpuVkp2UoaCdmZ6fmJimpqKfoqKmoqeloqCko6GbnaCbnKKfl5WVnp6kmpafiYGDgXRvbGx0a2xuX2JeYGFOSE0/RUA/REM7Ozo6Ozo4Ozw6OTw+OTo+NDQ1NTE5OTo5PDtAPD89PTw4PDs6PDs7Pz5DPkI+QD89Pz9FRUJBQj87Nj9CRUQ8QUE6OlmfmJOSlZqVmpOQlpeclZuZlpSVkZKTnZm2uLaxuru6vsG5uca7trWypb69tLbBv66zvbS4wbGwsbO/y8jbvr29vIFqdmBndl5XVlxzgImLqMzIzMvNysbCxMvOwry5vbm5wMO/yMbEwcG/xcDKycPDxMO5w769ub+8wsbCyc7Hxr66xr26v7m3wLm5vsDCvrW0vLi2u7CvsrK1r7Cvrqyus7CzsrirsbKxqrCrq6yrrLatqKyusqarrKmpoaWgpaakrKSmoaChnqGgnaCMlJeTm5+mmZ6emZOYnZ+gnp2eopuYp62ooqSgoKKqpqmhqKGlm6CgnZ2jn5SYmKKdp6Gfm4J7eoh6bW13e19wY1tdX15TST5DRUlCQz5DOz42OTo7Ozs7Ozs7PT05PTU2NjIxODo5Ozs6QTs/PDw+Nzs8Ozw9PTw9Pz5BQUE/P0FCQUVDQkRAPDY+Q0RFPkJEPztTmZuZmJ6dmqCalpyZn5KdlZ2boJWWlJqYur20sLu8wcTCv8XGura5sqO7vbS3xLuwtbq2ucS4tby1xpBxwdPAtH1bTG9hUHx/dWJWYH6GkanGwsfLyMHDwcDJysLAu7qwtLu9wMXGxcW/wMK/y8fCwMjAusK7urO6usG+wMrOysS9tby8ub+5ubW1s7/Avre0s7S4rbeqr7CwsrKvq6+nr7ausrG5rra2uLSzsLGttrS6sa6srranrLKsraSjoaenqLKrqqWkp6elpaCml5ujn6SmraKeo6KanaWiop+foaWenrC0sKSlnp+kqaevp6mgq6CiopqipJ2anqGmp6+psZWCe32Bem1zeHNncF1bXlxZUUVEQ01JQUU9Rzo6NTk7Ojw8Ojs7Oz0/Oj01NDUxMjc4ODs8O0I8Pz46OzY6PTo7Pj0/QD87QUFBPj4/QkBBQkJFPjo1OkFCST9AQkA7TJqdnZ6fnZienZmampySoJWbnp+blZGRlsW+urbDvMbCvr/Ixbe1uLe2ubu0r7e2srWzt7m8u7a7u9KXcoO1wptYVFaNYlJkgISFbUlyhpe0wr2/xsC5wLy+xcS9vbmysK64t7/Dx8PEvL2/v8PDvr/HvLy/tLSutbW8vr/OzcvCt7K4uLi9ubuxtrLIwLu2tLGwt6yzqbCtrbS3r6uuqrG1r7Gvt7O6usC/tre2sru6wLWyrbO3rLC6r7KloqWrrK+5s7KosK+xr6qiqKGkraitrLOun6inpqWmq6Sknqaqo6ayuLOrpZyfp6anrquqpbClpaWbpKOYn6exrLW4sLKOhHl/fHZsdXpwbmlbX2BZU1BBRUhHS0BEQ0g8PTY7OTk8Ozo6Ozo9Pzw9NTU2MTM2OTg8QT5AOz1AOzs5PD04Oj08QD46Oj49Pj09PkBCQkJBRD03NDU9REc+Q0I/PEWUnqCgoJyXmpiYlZmdmZ2fmp2bnJaRj5LDwMK9wrzEvLy7xbu3s7e2tru7s6CWtayvsbS0tLa4ucLXmH9yi652Uk9smVpSVVqalHdMbo6itLi4uMK6s7u3u77Au7u8rq+us7K5wcLEw768v7u6uLbBwrW/urWur62wvcC5z8rJw7GvtbS0vbq+ubq7ysO7uravsL2xuK+ys7C3vbaur66wt7CsrLK2vbzEwrq9t7bAv8G3tbC2srGzurGxr6err6u2v7e1qbqztbmxp6uop7ausrG1uaisrK+qr7CqqKessayytr20saykqKuoqKusq6i2qaaonqadmKOuvLG7wbSmiYF8gnpzdnZ3bnFgX2ZdWlRKPD8/RkY9RkNDOTo1Ozk5Pjw8Ojo8Pj4+Pjg4MzE1Nzg5Pj9BPzs6Pz08Oz09OTs8OTs6Nzs+PT1DQT8/QUJEQkE8ODU4PUNGPUREPzw/iZ2en52Xl5WUk5aZnpubmpuYlJ2Uio6Owb7Dwr6+vrm2usCxtbGzt7fCtbOrrbOoqa61r620trnD1Z2JfXiVYE5qjXVdUV1surV1VFePuLWysbe+ubK1sry5vLa6vrK0tLSwuL7DxsTAvb+5s6+yvLquu7Szpquorbq+uMvCv76sq7Cvs7q3ub67wMXBu7y3sLXEtb+0uLu0u8PCs7a2sbisqaWrsr23v7+7u7exvL28trGvq6uprbOvsLCrsLSpuMC2sqm0tbC3tq2spqu7s660uMKwsbG1sbK1saywsri4ubi+tLGzrqyxramvrqqyuK6trainoZ6ptr+4ur+wlol9gHxxdHd0dnFsX2NhW11PSEE+PUhDRk1DQDc3NTs6OT48PDk4PT47PT86ODMyNTc2OD8/Qj86OD4+PTw5PDk7Ozo8Ozs6PEA+QkI9QEE/QkI/PDs3OjxBRD5CQz8+QYqgm6GdlJiVlZKYmpyWm5WalY2bj4SIhru0vb+7vLm3s7y8rLOytLS2wLXAr7Kzqqqxt62pubO3wMqfiYF9gFhYko9ncWB3cnqXd25rX4u9s7C2urW0sqy8ubi1uMG6uLOxrLe8wcfDv7m6ta6lrLOwprCtqJ6gn6WttrXCt7a0pairqLC2s7K6tbu7u7W4trC1xLK+vL+8ubrFybq9vraxp6SeoamxrrW5trKxq7S3trGopp6gmaWmpKynq6y2qa+6sa2kpq2lq7GrrKmtuLawsrjBtrGxtbGvu7ayt7W1sry1urKwsbKutLKqrq2nuLWyta2uqqiosrq9wLa0qY6Ce393b3tvdXJtY11mWFxdUk5NQT5JQkFKSUA2NjU7Nzg+Ojs4Nz4+PDs/OjkzMjc1NzU8PD48PDg+Pjw8OTk5Ozs7Pjs7OTw+P0E9PEJAPz9CQD47Njc6QERBQ0E/QUKJoJ2loJSWmJiVnqCcl5uYmZGMmYmDhoS1r7S7u7S1sLG2uq6wtLOvtbq1urC1s7KttrqvrbyzuLnFq5WJjHhMZqDDfYabkF1/eWx1eYmxurWxtLWytK+su7q4trnAw7aurqqytry9ubaysa2tn6Snp52jpp2WmZman6muuayrq5+lqKSrrq6nr6yvsbGtsa6usLmwtLy+uLm4x8W8vLu4qaKcmJufp6assq6zqaapqq6popqXl5GcmpijnqKir6ekrKaompqemqGnp6anqa+2squ0trCqsK+xqbm2sbWxrqy3s7avrquuq7S1ra+rq7GtsbKoraurs7W3ur2wq6GLeoJ5cnZzbXVpa11balRdXE9NSERGTEJGTkY4NjY1OjU6Pjg7OTc8PTo7PTo5MjM2Nzc3Pjs9Pjo6Pz48PDw6Ojs5Oz47PTk8Pj1CPDtAP0A/QT8+OjU1OkBFQkRBQEJBiJ+ipqGYm56dmqWpmJudmpmUjJmHhoeGrq2uuLmxsqiur7iyq7CwqrK1ubm+tbK4tLm6trm7tbWzu7eWk6CKTWiSk3ZveXJoaWt2gXd4pby4srSzsLGtsLm4try4u7+ysrKusa65r6qrrayjqKGdnZ6XmKGVkpWXkJifqK6ko6Sgoqeio6mpoaanpaqtp6ynqKesq6yyu7SztLm6trK2ramgmpaWm52fq6yqr6Oko6GpoJuTjo+Qk5KSmZaanaSloJ+ep5iVkpSZnqSjoaWqrK2iqaqppKmtrqW0sa6xraqprq+wraWmqqSos66trKmmpqmrpqqnq7Ksr7Oxq6mWgX+Bd3J4aHRzbmRUYGNXXFFOTEhASFFETUM9ODg3NTo3PD46Ozw4OTw7Ozw7ODI0ODk3ODs7PDs4PD0+Oz08Ojk8Ojs9PTw6OkA9PDw7QD5CQEE/Pjk1ODs8RkFDRD9BQYijpqKjnqCfp6Coqpufm5yZmI6Xi42PjKqpqLGvsK2lp6ayr6mmq6CvsLu1vby4wMG+vLy8ua6sr7K3pp2ok1iAcHNtZGtfWVdYW2JfbIGbubKts6+urK62trK0ta+qpJ6bnJyeqKieoKipn6GnlpuXl4+dk4+Qlo6Xm6SooKCioqKlpZ2jo6CepaCkrKSmqKSio6OrrLOuqa6urqeqraisoZyamJmYm6moq6ufpqKbo5yVkIyPj5CTkJeVlpifnp6amKaXk4+Slp2ioKWjpqSnoKKko6Ghq6uksq2qrKyno6yuraufoaKkpK+srKmmo6KqpKqqpKmrpqmsq6agiHiDfHZ/eWJ3bG5cUWhUUE5HUE1MQk9RQD47PjM5OjU7OT07Ojk9OTk8Ozw8OzkzNjk5Njo7Pz06ODs6Pjw6PDs5Oz07PDw9PjxAPT88ODtAQEE/Pz45NDk8N0FDQkQ9QEOOqqSjoqGinaulpqimoZ6dmZ2PmJWTkJWnpKGmqKmlpKChp6uhnKKbp6u1sry9wMLCwL7AuLSnpaypsMCxs3x4dnJ0ZVdWT0lJS05PT1xrcKa1qrK0rqqrr7Cys66lnpKYlI+YoJ+ioJykpZ+eqJSblpeMl5GNkJeTmJ2iqp+fn6Cjpaicn6ChnKKfo6innKehoKSfrKisrKCpq6agpKimrKOdnp2Zl5qrpqqxo6WonqCclZOQj5GQmJCWlZiXn5ibmZqjmZeUlpqdoJ2nqKWgo6Kho56doKmqpa6upqipoaKqrqqnoaCio6msq6eppqShqaKlqaalpKKmpKijkn18gHV1fW1re2RoVVFjTUpIR09STkpORzxFQD0yPzc1OTs+Ozk5Ozg6PDs7Ozk5NDg7ODc7Oz48Ojk8Oj07Ozw9OTw8PD49PUE+QEJAPTc6P0FCQEA/ODU1PDpAQ0BEPkFGlq6koqWeo6KpqKipqqWmnp2imJiZmZWbop6bnqOioKOgoZqgmJeXlqGorK62t7q5ure3u66ooKGpoabHxKZhZmlyYFJPSnBVVkpPSkxUXl2Bt6+vs7Wqp6yropyZlI6RlpeZmZygoqKcnaWemqSXl5eWkJKRkZOal5ugpKqeoaGepqeqop+gp5+dn6SnqZ6jpp+qnaqtqq6nqLClo6Smp6ymoaShm5ier6iusqulqqqgmpiYmJWTlpqTlZWalpuXl5ihnpycl5uhmp6ao6eln6GioqOdm6Gmp6aoraOppZ6kp6mkpaWhpaSsrKmmq6eioKSjpKenoaCgpaKmoIl7gH12eHxkeXlgYlJVYElJSktTVElSUEw5P0I2Nz02NTs6PDw5Ozs4Ojw9Ojs4NjU3OjY5Pj0+PDk5PTk9PTw+PTs7PDo+PTw/Pz9APT03Oj5AQEA/Pzg2NT08PkFCRkBAR6CupKaroaOqrK6tp6ypqKCipp6bm56aoJyalZmfn5uen56WlJOXk5KcnqSorq2sq6uvqq+pnpeepZ6cu7x9b2lqYVRKV3Cci3pZTEZHTlRUaK6ysLC4rKahnJ2alJeampCOkZWRjI6OlJminJejmZqXmJmUmZiWnZufpaapoKajnqeurqumorGjmqSmpqqioaqiqaSosquxsqu5qKarp6urqaysp6Cgo7GusrG0qrKvopmcnZ6hmZubmpiZm5SWm5aZnKWhoJqjoZqdmZ+kop6gn6KmnZulpqWkpaijp6OepqOinqaloqWlqKykpq2noJ2dn56gpaGenqWgppmBe4F8dXZzaIJsZVtTWllNUUpPT1VMU0xBNz5CNjg9NzY6PDw9Ojw5ODo7PDo7OTc2Oj01OTw7QD03ODs3PTs9PT06Ozw4Pj09QD5BPj4+ODg8P0BAPT43NTg9Pj1BQEZAQUihqqCrq6GkqquwramtqaelpaWkoKGfnqWXl5SYmZ6YnJ2blo+VmZKRnJihnaqip6Cep6Gln5ySnKKbnqmrln1rXVRNTVydxMupb1lMRUNHTWGYsK2sr6efnqKgl5GTm6CcmZeSk5+coaSbnpuWn5qfl5uinqWhnqSfpKitraisqKSstLe2sKe0rKKtraOvpaSmoamorrWzsr23vrCssa6tqaq0sbCoq6iytbezuK2ytKSgnaWfrKGhoqCgmpiWlqCbm5ikoaCepKGgnpqcpaCfnZyhqJ+fp6meoaOkoKagnqehn5ymo5+ipaOooKmrpZ+dnZudmqainpyjnqeQgYJ/fHh1aXd1XWxaUmBIUlVIRlVWSkJMRz1LSDhFPDY3Oz49PDo8OTg6Ojs6PDk2Njo8Nzs+PT8+OTc9OT47PEA8OkA6OkA/O0A+QUA9PDk3Oj5APzo+NzU4PT0/QUBEQEJGnKueqamipamprqimqqWmp6aoqqGlpKOmkpOVmJacmpqcmpWTmZuNk5+ZqJ2un6eenKGdnpqZkpmem6Gho4pvX1VSUVVpwOPStJ2Hb1lKRVSRmJ2rqqmkn5+ZkpKTmJiWlpWMiIuOlZ2dnZ2elp6apqCgqKWxqqeuo6uttrC0srGutri9wLqttbSwt7CutKmmpKWsqbmztbvDvMPBtrq2q6+xube8r7OwtcG8t72zs7WirKKpqLKpq6inqJqZnpqqp6CZp6Cfn6eopaSfnaqhop6bn6igpKetmZ+jnp6nnqCmnpycoqGbo6KhnZympaWkn6KZnJukn6CboJyjiYWEfnZxbWl2bWhtXFhbQldOSkdNR0NGTTw+TD00PDk2Oj0/PDs6Ojg4PDk6Ozs8NTQ6PDg5Pj4/Pjg4Pzk8Oz0/Oz1BPTo/PjxAPj8+Pz08Njs/QT07Pzg1ODw8QERCREFCQ5WqoKapo6mqqKmjoamgpqinrK6lqaWpqpSSl5mUmpqanJiYmZyamJmqoLGit6Swpp+enZ2XmJWZnpqco6J3WVJRVFZog8DMs5ixyLCUipi5xaKpramqpZ+enqGinZ+dmpyclJOVlJ6emJSFnZqhm6ukq7KwubKysbKxur28vLm2uMO+v8K/trq7wMS5vbusr6exrbHCtrjCxsDIysDKv7C5ub25wr64s7vGw7zDvLezqbOtqrO0r7Ouqq+jnauntrGtorCmoaOvsa2wpKWvo6GgmqGnoaSqqpmdoJmao6CmqKGcnqKemaSenpiYo6OhpZ6mmZuipJ6fm5ubnIeFgXt0cWtrdXJwaFdbUUVUSERKUEg/RUE0Rkg5NTs9Njs8Pjw8Ojo4OTw4OTs4Ojo4Ozw3Oz49Pj02OEA5Ozs9QDw9QDk3PD07Pj0+PUI+Pjc6QUA+PD45NTg9Oz1DQEFDQkGRqqGlqqelqqimn6KnnKasp7Gyq62jqayVkpWalJecoqGbnqCinJ+psqu7sr+rr6ylnqCgnJyYmp+fmqGdaFBLUFFpgZy1uqeHs+Db1tvayLSup6OjoaCepaulnpeclJGZnZiUjIqGiIZ5bYigpKKrrLS8tsO+vrO7wcPCxcC/wsbGxcPIwsDFyM3QyMvDsre1vrK+xbu+zM3FzMzM0se+v8DDvsfGwrfDycnCwca+urS6urS7t7C1sqq6sq67t7+7uqq3rauquLq0vK6uuaOmo56mpaKjqaaZm5+Ymp2nqqegoaGkmJSjlpSZkZydn6Sep5+en6KdmJmUmJSIhH16cWtkaG94amRaW0ZLTEVEU0xEQkU3Oj87NTQ5OTc4Pj87PDs7OD48Njo9OTw9OTw9Ojs9Pj4+NztBOj45PT45PT44Nzs6Ojs/Pz1CPj83OkFAPTw9ODY2PDo8QT9BQUE+kqugp66ooqulpKKipaGlqquwsq2upKmmlJWWmpaUm6SmnaGqp6KrrLy8v8PBsrK4p6Ghq6qhnJ6hop2clV1MR05YfpPAuKSQmNXk29HEtKafmpybnp6Zl5eXkoyOl5eTjo2Qi4KDgndzcW5wj6atrrS5xbvNx8u/wszOzczHydHMzczHycXGzNHS1c7Tyb3Av8O7xsXIxdLUzdPQ09PMysLGxsfKyM6/yNHMx8XHxcG8w8G+v761vrOuv7/Cw8fEx8Suv7iyuLzDwcG6vLy1rqenraigoqmlmpagmpmdqKupo6SknpePm4yQmYmVmJugn6OdnZeempOTi5WPhYB5dHNlYmdyb2ZeWllDTkxDRVBJRENANTU1ODpCPTY4OkE+Ozs+PDk+PTc6PTk6PDg8PDw7Pz8+PD0+Qzw7OkA9Ojs6Ojg4ODk7QT48QD8+ODtBQTs7Pjc4Njo8PkI+Q0FAPpOvn6ivpqiro6KloKampKuoq62qrqKqo5Kcl5ebmJuirJ2frqalsarFxszOzb+wwaikqKytqqCdo5+cnpZhSkpOZoq619O/r8DUy7muqKKfnZ+amJaUkpSWkZCPjIeEg4iHg4CBgYB5cnJvbHmktrq5vsvB09LTyM3O0dPR0tHQ0dHNzs7Qxc7U1tjS183Gx8nMw8XKz8rT19HX0tXW09PIzMfMzcnSzc7TzcXIycrBxsvHyMnGv8Ozs8jEy8rLz8bKv76/vcHHxMzMyMm/w7+tr7OonqKqo5qTnpyYnqaprKSlppaXipWFkZSHkpKSmZualpiQm5WQjIaRi4B6cnV2Z2NndmlkVldRRE1GQElRQj1CPDoyMkA8RDw3OTxCPTs9Pzs7Pj05Oj48Oz44Ojk5Oj86Pj1APkA8Pjs+Ozk9PTw5Njo6Pj08PEE/Pjk6QEE6OT44Ojo6Oz4+PEE/QT6QrKKiqaanqKSfop2qqKOso6OnpqyiqZ+To5iWn56dpK6bn7CrqKyxyc3U18/Gu8esrbO3rK6jnqOinaCkdV1nbY282Nza1su6sqqjnZ2doaWgnZqUlJWUiXx3cGtlYmhxb3F7hYqAdnBucXRwhbPCvsXR0NbW1tLWzdTW19TT0dPU1NPP0cPQ09bY1dbSy8nO0cvGzdLK0tbW2dXX09bYztLKz9HMztDM0s+/yMfKw8zMzM7PxcbHtr/Kv9HNy8/Gyci/w8PIzszP0M/NysfNuLe7qJ+lq6eemJ6jnp2qpa2pqKiSlYiQhIyRho2MiJOVmZCWjJiSj4aHjIR8eHN2cGNgZXJiXVJcSUpHQUVIST47QTg9NDU4NTs4Njo8QD47Pjw7OUA7OTo8Ozs8Nz09Ozo+Oz08Pjw/Ojo8Ozs5Oz89OTU7PD48PD0/Pz46O0BCOzk/OTg7PT0+PzxBQEQ8hqugnKegp6Oim6CbqaSlqaCfoaGmn6ifmKSimqmmoqarmqOwsamotdDU19rSx8bLtLXBxbG1qKGkpZ+jrIp/k7PS1draz7yuqJuVmKCcm6Gin5ucmZWJd2ljYF9fX19eX2BeYmx1c3Fwb2xycXWSxMfG1NXX19fT1s/V1NrU1M7P1dTU0dHM0c3U19bT1dDP0tPRydPRyNDY19jR2NLX2dXWzM/Pys3Sy87QwMbCx8XOzdHR0cjMzcDKzMXTzsvOyMTKx8bIzMrT09HVz9LM08G5xbGlqLWup5uorKWdsqiws6ysk4+TjoiKj4OPi4SQjpmNk4+Zj4+ChYx8enFzdG1hY2ltX1ZQX0pKQ0ZDUk0/PD41NDo9NTI4NTU8PEA8Ozw6OTpAOjg7Oj46PTg+Ojo8QD08OTs9Pzk6Pz07PTw9PTo2PD0/QD08PT0+OjxAQjs5PDc0Oj48Pz89RkFEPYKknKClnaWlo5mcnaSeo6OfnZ+doJqnnpyhqZ+vraqqq52mrreoq7fX1NXZ2dHO0L+8zMm2vq6mqqihpZyAlJbH2NPWwq2moZiVl5mbnaCemZ2dk31xZWNjX19hX19hYF9gYF9gZm5wcG5rb3J3d5zMwdLV09jY1tnR0tLXz9POy9LN1dTSys/M09bS0dbNz9XV0cbR1MrR1NXWztLQ2NjY18vIzsTJz8zKzMDJv8fJzc7Py9DNzszOz8jL0NDKzsrCycfJzMrL0dLM09HRz9DKvci5sK67uLWqtrCtqLits7+7sZqPn5SRjo2IjpCFkY2ZjJGRlY6RgIWIenZvcG9rYWRucGFXXFpJRkZETVdFO0A9MzM8PTg3ODU1Oz5APTk8PDg8Pjk8QDtAOj04Pjk4Oj88PTg7PkI6Oj08OkE9PTw6Nj08P0A9PDs9Pjg7QEE9Ojw4ODs+PD4+OkVCRT6Bn5mlp6Cfo6eam5+cl56eoZqdmpyappufpKefuLa1taykrK6+tLDA2NLX2tzWzs3Kw9LPwcCwqaytqad/bIGU09bNsJublpWXm56en52UlpiUiGteXl5hZGJgYGFhYGBhXl9fXl1ibXJvb3N0dnZ5pL7L1dHW1NPY1s7O1MvNzsXOytLSz8fOzc3UzM7TzcvX1tDM0dTLzNDS08rO0dXS1dXKwMnBxczCyMnCzMPFyMrKz8rNzNDN08vGyM/NyMfLxcbBxcrMzc/RxtDOzc3Mz8XHwbi5vcPDvcO5s7K+sbvDxLWqmKWimZaRlZWSi5SNmpGUlI+PlIKJhXlwcWttZ2BgcGhYWGhWTEZMSVBQQjtDPjs2Nzo4OTo1Nz09QTs6PD05PD05PT06Pjo8ODs9OTtAPD47Pj5BPDk9Pj1CPTs3NzU/PDw/PDw7PDw4O0FAPDo8OTs7Ozw9QTpFQUU+hJ6bqK2epKSqnJ6fmJKXm5+am56ZmaKVoamppcTCwb+7tbKxx8K4y9XV2drb2MzMz8jW1cTCta+0qKCqaG99p9nQqpWOjZiWkZOSkZaWlpCLfGVhYmJgXV5hY2JgX2BgYWFgX11bXWdycXFyc3FtcnmkxtPPy9DP1NXJxcnJxsa/w8bPzsfFx83K0sjLzs3G0dLQzszUysfLzs/Hx8/Sy9DPxbrEv8bJvcLHyc7FwsjAx83IxMzKy8/IxMTQyMbCxsjEvsDHzMzLzsLLy8jHy9DExci7x8PJyMLPwb28v7DByce5vaqwsqelnaKcmJCbkKOZl5mRlZiJj4J3b3Rka2BeZnBhW1dgR0hIR0lNVEc/Sj02NDM1NT08NDg9PT06Oz08OTo7OT89OTw7PDg6PDo6QD1APD09Pjw6Qz48Pz04ODk6QD4/Pjw7Ozs7ODo+Pzw7Ojc5PD49Oz49RkFDPYOgm6qupa6qq5qdoJeUjpedmpmgmpqcm6WysazJzcrIxL68us3NxtDV1dna29jQyc/P0dPIwra7u62lol9veLnQq5COjpeQh4SEhIJ+hYV/c2BbXl5eYF5gY2RjX11dXl9gYF9bWlxha3Jyb29rbG9vfbjRyMnKz8vNxLrAw7u7urq+ycbCw8DDyMrJyMrIwcXMxsjLzcnEwsvJwcLM0MXLyL+5wbvGx76/xs/Lw7/Du8nHyLvIxsXKwL3Cy8bFxL7GvLzAw8XMxcW7wMrCxcfSxcHJv8rJxsjG0MPDxsOvxMvHw8q3v7y6tKmspKWYn5iso6Glm6Ogm5R7dnN0ZmlaYW5sWltYUkRMRkJHRExERlNANTQzMzQ/PDM6PDw7OTw8PDg7PTtBPTo8Ojs3Oz05Oz07PTs6OD4+PEI+Oz88OTk7Pz07QD48Ozk5OTk6Oz06PDo2OTw+PDs+O0NCRD5/pZypsqm0rrCdnp6YnImUm5man6Kfmp2ov7i8ys/RzMfCw8bNzs7M1c/V2djZz8vSzc3OyMG1w76yspFfcoC+sJCLk5eHe4GFhoB2eHVycF9bW11gYGJjZGRlZGBcXF1dX15gW1laXGJvcm9raWxwb3OPxrzJxczAxsKxtrqysrOyscK8vLy6uMHBwsW+vbm9v7nEysXGwr3GwLi7xMm/wsm7t7u6xcO/vMHNw8a9vbXBvcO6vca7wrqzvMXEwcK2v7a1vb+7zMO8tbrIur++y8TBxsLGycbIxtDGwszHssfJw87NwcXDwL2zt7Cyp6ioubClrbCqrayUeXZ3amRnYGhvY1ZeWUpGSkZISkFFQkVJQDk6NjQ4ODUzOzo7PDk8PDs5Ozk6QD46Ojw6Nzo7Nzo7Oz88OjxAPUA/PT8/Oz07O0A8Pj4+Ojk5ODk3ODo8PDw7OTo8Pjs7PjpAQEU+fqygrLWqt7SyoZ6fl5qNlJaan52mop2et8XCxMjO0crKysfNzc7RyNDG1dTW183Kz8XJxcfBucW9q6+DY3WPtZKMiYuFeYGHh4B+hHx0dGNbXF1eYGBiY2FiZWViXV1bXF5cXl1aW11daHNxbWdnbnByeZ29zMDDusG4rrCwp6qtrKe4tbe0s7O0vLa9sbewta+yu8K8wcS8v7q1s7q+wLjHubS7tsHCvLi9xsHDu7Wusra6v7TEt7u1q7i9vcC9sbq2r7a6s8W8t667v7W3tMW8vsPFwMPFxsjLxcDGxrvIy7/PysfDxsLDt8O9vba5vse/rLW6tbe2jnl0eGZnZWJrbl5WXmBGS0hISkZCREFFRT88OjU2NTYzMzs6Oz06Ozs6Oz44PEE9PDo7ODc5OTk7PDo+Ozk+Pz1APz5CQD1AOjo+Oz89PTk6Ojo4NTY7PT48PDo7OT49OT86PEBAPIi3pauzsby8sa2foJmUlJiXnqujr6qnpMbLzcjFyM3M0MzNyMrIysnKxM/N0s/NxcfBxcC+urjJtqqwgWtymZyNhomKe3l+hoZ3eIJ9dGleXV1dX2BfYGRhXmNlY19fXFteXF1eWltbXV9scG5oZmpubnJ8pMe/uLi1sKusp56iqqeeq62zramsqbSvt7Cyqa6mrLK8urbDubq6sau1ubu0wrqwwLG+vLu2u8e5wratqqiwscC2uL2wsKeys7W7vKuutaWuta67srCpubCtu667uLvAwL25wr/Hw8XBvMbCyMu4xcfFv8bDw7rExsK7xsnMy7O5wry7s4hzdnZraWFibGhZV1dbQUxLTUlFQUM/RkE6OTo5OTU4NTQ6Ojk7PD07Ojs+ODtAPD05Ojc5Pjk7PDo4Ozs6Pj45QT0/QD87Pjo7PDo9PDw4OTg5NzY4PDw9Ozw6Ojs+PTs/Ozs+QDyKwKuouLe5w62zqZ2ZlJaZoZymsLWxt6bFztLLw8XBxc/HzcHDxr/ExMPDysLJyr6/vMC6srS0w66proZrZIqSiI6QfHh+ioV6e4SBd25eXVxdXV9gX19kY2JjY2JgX15bW1paXVpaWlpcZG5vaGdnaWtucoGtubC1rqalp6eaoKWhmpylq66kqKKsqqyqr6Omn6qttbaxvbmvt6+prri0tLy4tLyvt7m1srvBssCupamiq7GytKi9qquoq6yttLOmqK6hpK+psqanqK6mqLessbK3urq7sry9vr7Ev7XCwcfIt7/AxLfEwr+7v8TCvsTIzMq/vsTAwKmHc3RyamldYW9kV1ZYUEhZUlNLRkZFPj5AOjc4OTc3NjQzNzo5OTo8Ozs8PDc7PTs7Ozw4OT44PTs8Njo9Oz89N0E+P0A/Ojw8Oj05Ojs6Nzc3ODg3OTw7PDs5Ozo8OTc5Pjw+P0E7jMKvrry3ucSwtrCbmZWcmKqpsLGztb2vxdDPzMPIurrLwcu+u8m2vcO+usq3wcPBtLW7tbCutLutqKeIYG2Ng4iLgHt+gH54dH98c3dlX11cXF5fYF5fY2NhYmBgX15dXFpYWltbWVhaXF9ma2ZlZ2Vpa29yhaqlrKWgnKKllJ6lm5iRoaOqpKKfpaWnpa2gnZylpqyyr7a3p7CrqKq0q7S6sba1rra5sa+6urG2pKCkn6axqKuouaqkp6iop7KtoKemn5ukpqyen6ekoKCxra2ssrSytLC1vLa7wcGyur7DwbK5ucOzwL2/tbi7vb68wsfEwsO+wMSgg3hwa2FmX2tvYFRZXkhOZ09UR0VKRjw9Pz06Ozs4MjU1MzY5OTk7OTo6PDo3PD88PDs8ODg8OTw6Ozc4Ojo8OTg+Oj89OTg8Ojs9Ojc2NzY3ODg2NjY7Ojo7OTo7PDg1OTw6Pj5AO43ItbW9uLrAur21oJ6VnaGmurars7O7s8TPycvCxri3x8HMv7jJt7vFuLPEuLS+wKu1u7GrpK6yrJ+hi2GAh4aGgXx5dXRvbWtqanFpXmBdXFxcXl9fYWNiYGBgYF1cW1xcWFlYWFhWWFteX2RjYmVnZ2dqbW+Inamgl5abopaco5mWjZ6ho6ebn5+jpaKonpuim5+rsKyxtqOpqqqsrKS0ua23sKyzta6yta6wqp+dn6SisqWmqbitoqamn6isq5mfoJ6ZnZ+lmpqjnJudr6mrp6qrrK2xsrivuLm7sLa8vLqrs7O5s720trGxtbS/tr3AvcPBu7u9l4N7c2tfZV5kZFhUV11JV1xLUEdJSUZBPD8/QDs/PDA0NTM1Ojs5Ozg5OTw8Nz4/Oz07Ozg4PDg5ODw3ODo7Ozo7Pzo9Ozc4PDo9PDc0Nzc2NzU3NDY2Ozc5Ojs6ODo5ODo7OTo8PzuJyba4vru3wcHBtKSkmZqkpsCyr7astLfGz8jIwMa7u8TDz765x7i3vreywbSxu7uruLmwoZ2oqqaWnYVmgoWGf3hybnBua2JeYmZmXV1eXV1dXF1fYWFiY2NiYV9cW1taWllYWFdXWFhYWFpeYmRkZWZmaGlrco2nnZSVlZuYm6KXlpGco6KonZudpaaippygoJuYrq6trrKgpaKurKeitbGysqyor7KnurOmtaCinpujoq2joqq1qqKjpp2mpqOWmZ6XmZqdoJqXnpycm6yhq6ejpKatq7O0qrWws6uyubSvqa+ysrO3s66prK6yuLC6trq9v7ezsZSFeXVlXmVeW1lWU1pVS1tRS0lFSEtJQj0/QUFAQToyNDUyNDk5ODk7OTo9PDY9Pzs8Pjs3Ozs3Nzc+Njo+Ozo4Oj07PD06Ozw6PTs4Nzk3NDY1NTQ2Nzg1Ojo4Ojk5PDg3Ojg5PkA6gci9t72/tr68v7KdpaOYpbHCtba9rbS4wszIxsDFtsG/x863wMS9s7m5sr+2sbi6rLG0rZ2Yo6iekZp6aYGDhH94b3F0cWlmZGllY1xcW1tdXVxbXmBhXl9fYF5cW1pcWllYVldXVlhXWFdWV2FkZWNkZWRkaGp2opyUlJCVl5egl5mVmKGeoZyWoaKppJ+fqZ2cmqunr7Cqm6OkuKqhoK6otqqmp62wpLewpLegopuZmaqmoZqsuLCioaScop+fk5ShlJWWm5iXlpeclZ+pnamjoZ2jqqqwrqi0q6qnrbOwpauusrGwsK6vpqensq6xtLC8tLm3rqOUgXl1ZF5hVllXU1JUS01eTE9LR0dMTEU8QD48Qjw7NzY1MzQ5ODg5OTo5Pjo4Pj47PTw8Nz49Njc2PTc7PTs5Nzk7Ozw+OTk6Ozo4Njc2NTQ1MzEwNDU2Nzk6ODo5Ojo3Ojs5OT1AOnbAvLS5wrG+uL2unaeoo6q7wL3Aua60uMHMx8XCw73Ft8jMssHCwa68u7W7vLW4ua+vr6ebmJ+nko+KcnqAfHdxaWxydHBpaGVkZmJcXFpZWlxcXF1eXVxbXF5cW1xZW1taWFZXV1ZXWFdXV1ZbYmNjYmNiY2RmaoGWk5WMkpSUm5mdl5ecoJyglqGgpqWkpqefnZ+moKqvpp+ipLeooaGiqLSipailsKWwrau0nqCdlZWqoaKUrbGxn6KjnZ6Ym5OLoZSRk5iYk5eXmJedppunoaKZo6Wlq6SlsKelo6urraaorq+uq6iqqbOlpqyvtLGvvLWxr66gknp2cmRhXFpdWE5MUkhSYU1WUE9KTU9FQkQ/OT02OTo3NjQ1OTk7OTg4Nzs4OT0+Oz47PDY5Ojc7Njs3Ozs6ODU6Ozo7OzY8Ozg4NDc4NjMzMjEuLzI1NTY7Ojg7Nzg3Njw7Ojs7QTh4u7uxtb2wu7G4rJ6lp623u7zBxbqxubXEycnAw8bGx7bGxLPCv8Wrt7e9tr27urWyq6ulmJedoYqHcXuHfnZuY2FmaWhmZ2pnam1gXVxbWlpaWlxdXFtcXl9cWllbWllaW1dVWFdUVFZVU1RSVWBgX2BhX2BhY2RpgZSTiZGPlJOUnZWWl6SZoJecoKWiraakpKOjopyqq6WZn6WxqqChnaWrnaeinq2sqamtrKGiopWYo5uckKupsJufop+el5mTip6RjZKTlpCYmJOcoaKdpKChlaCipKabo6uloqSqpKuupa2yqaalpqa0pqmorbO1tLm6r6msnotycG9gW1dWVVJHUU9IWltPUkpUS1NMRUZJQzg7Oz08ODY2Nzo5Ozo5NzY5Nzc6Ozo9PDw2Ozw4PjU5ODo4ODY1OTo7PDk3Pzw5Njc4NDUyMTIxLi4xNDI2Ojg2OTg1OTg5ODk7OUA5e7W0rbS7srCrsq2dqKevubmzwMi6tcCvxcjMusHKzMi1yb2xvsTJrLG4wbW7wLu0s6ippJSYmZqHfnCHg3t0aWlqbGdqa21ram1lXVxcW1tcWlhaXVtbXmBgXFhYWllYV1hXVFZWVVRVVVJTT1FZXVxdXV5fX19iZG2OkISRh5CRj5qTlZOcm6Ocm6CoqauorKeopaSZpa6klJmlr6mfm5mboJ6umZurs6Clpp+io6GVk5uWlpKpqq2anJ+hoJqUkIyZjouQjJKNlpWQnqGgo5ybo5WboaOhl6Koo6Koq6Crr6Ott6Wjo6Ksraqoq6+zt7O+tbOrr5iEdHNoW1hYUlVRRVhMUVtYTVROUExQUUlOSUI8Pz9BPzw2NTc5OTw8OTg3Ojc5Ojs8PT47Nzs7Oj02Nzo7ODk3Njk4OTo2Oj05OTU3NzU3MTE0MS0rLzQzNDk4ODo6ODo6NzQ4PTg/OX6zraiztq6pp6+um6morLe2rLzKu7a/rMvGxbjBzs/Is8S7t7vDyLGtuL+3vL26srOjp56UlZaUhXhzgHZ3bm1obW5tcGdnaWdkXVpbW1tbXFtZWltcXF5fX1xYWFlYV1hXVlVUU1VWVVVTU05QUVlaWlpdXVxeX2Bkfo2Bi3+MkIqSjZeRl5mioJugrKqmrqyor6Somp+soJWWpKinnZeQj5qerpaYqKqZn52UpaCekpCSkZOVp6ulmpmZnp6VjYyLk4aIjYOQi5GVkaCeoaOXlZ+VmqGinpSbpaWnqKigsbCmsbynn6OstKuup7C1sLm1wLGtsauQfXJzYlZTVk5SSUZWUFJRTExXTUpMTlJHTUpBQ0ZEQz5ANjU4ODk7OTo3Ojo3PD06O0A+Ojk7OTo/NzU5Ojk4NzY5NTg3Nzk7ODU1NzY2NjEzMjAtKi4xMDI4Nzc7OTk7ODk0ODs4QDh/s6ymsbeqpqKwq52qp6mysaW2xrS5urPKxbm6wcvQy7G2uLy+wcOxsLK3rbSzurKxoaGam5aVkoF+dmtnbG5xbnFqcGtkZWdlXlpZWllaWlpaWlpaXFxdXFpYWFhZWVdYV1VVVFJTVVNWVVJOTk5SV1hZWVlZXFxdYWqAen92iY2HkIqXiZSUmJuZnqmboKqmpaudqJmhpZuTj5+jm5eXhYSSm6OPlKOdlpaWiKKbm5OLjoqQmqSnnJWVl5uRkYeUjouBi41/kIqSkpKgmp+ilZOYmJWippmNmaSmqKahn7SyqLK3oZyit6yqraSysqa1vLasq7GjiXhzbV1OUVFMT0NNTk5QS0ZOTkpKTk1RSU1KQUdMSEdDPTg1ODg4OTo7Njk6Njg7OTk+PDg6Pjk7Pzg3ODk6ODg2ODU3Njg4OTc0NTc3ODIwMzAxKyktLzEyODc2Ojk5OTk4NDk4OEE3d7anpLaxpaejqaWgqKWks6qissO1tbKzxsa3usPKzMazrLq9tLfAr62psJ6mrbmuq52YmZuUkoV6gW1fX2ZycHZxaW5pZWdoal9YWFhYWFlZWVpaWVtbXFxZWFhXWVlYVVZSU1JQUVRRU1VRTU1LTFNXV1ZYWFlYW11hb3N2cYWIgoiAkYSPi5SRlJ6hj5uco6GjmKWXopyVjYeYmoxzjYN+jZeWhpGZkJSOjnuZj5yMgol/ipifo56Qk5iWhY2ClH5+dImOeZCHk4+QnZqZmpGVkJ2OoqOOiZqgoaSkm6K0r6yvrJ+YpbimprGhsa6csLyqqa+qmYJ3c2NWTVJPUE1DU05MUU1CUFFISU5STUhKSkNKTEZLSzw3NDk4ODg7OzY5Ozc6PDk6Ojs3OT85PkA3OTo8ODk3NjQ0NDU4NzQzMTI1ODUvMDEwMikoLC0xMjc2NDc4OTo6NjU6ODdBN3i3oaO0qaalqKOmpaamprOnprTBuLC0sMnEt7nBzsW+s6y6wautw62ooqaSnaa1q6GcjpSVkY58dn1lV1ZfZ2ZpZ2huY2poZ2JcWFdYWFhZWVlZWVlaW1tbWVlZVldXV1NUUE5QTk9PUFNUUk1NSkhOU1NTVFVVV1lbXWlscm1/hXx0TlhykIOXho6dl4uUkJ+YnZWUlpWPlomAk4lfO1dvfIuUiYCMkYyQhoZzioWWgXmBeoWUnZSDlY6RkIOGfZN4cW+FjX2JgZGNj5eamJOKj4mch5+Yh4iWnpqhoJenr6mtqKiflq2zoqaumayrmKi0oqmto5N9cm5gW05TUlZMRFRKUE1MRk5PSUVMUU1LT0pJTU9GSUk8NzU5OTk5OTo3Ojs6Pj44Oj09Nzo/OD4/NTg5Ozc5Njc1MzMzNzYwLi0vMzQ0MTEwLy8oKSsrLTM4NTQ3Nzk8Ojc5Ozg2QTl5t6CjraGmpqqgp6mno6mwqKe0wbmxtbDHwrezvc+/ua+utcKnqsWpo52Yg5SbrqCYlYSTjoqGe3J0XFFMUlVZWlddXmJnY19ZV1dXWFhYWVpZWFlYWVpaWllYWFZXV1VTUk5MS0hHYlxNT1JNS0hGSE5RUU1QUlRWWFpgbXBpe4J0UEJAf5WRkX2JlI2Eio2bjZaViZKIhpWGeYh/YEpRbniKkYR9hI2KhX9/bn5/lHd1dXeEjZlwUY2IioZ7fniUdmh3hoh+ioiVio2RkpaLhIqIlISajIKEkpuWnp2UpKOoqaWknpuwqqGkpJGmqpaiqpyipqiJdG1nXltIUVFSTUlVTVNJTEtPSUhGSk5MTVRLUVBPRklDPDc2ODo4Ojs7ODo7OD4/OTk+PTg7PDY7OzQ3ODs2Nzc1MzQ0Njk2LzMvLjEyNTIyMS8sJykrKiw0ODMzOTc5Ojk5Ojo6Oj85d7abo6edn6Kvoaeopaeor62qtby2uLezwbu2p7nIuLaoqLW2qrK8pp6Vjn+Jk6eVlIl9jYOBfHZvbVhNS01OT0xNUVdbXFpYWlVVVlZWV1lZWFhZWFhZWVlaWFhWVldVU1BNSkVAQJtrc3NJTUtERERJTk9oWU5RU1RVWm6DdHd+amldVY+JlIl0f4eBfIWMk4GSmYuPe4aPgHZ/eHNudXB0jY6Ben6Kq4V5emh2e45wcm14gYuNknh6gHuBdnJykndndYSEhIR7lYmIioyLgH+Ei4x/lIN8gZCYlZyVkZ+dqZ6foJ2gqaWfnZiNp6SToZ+Wnp6kgHJoYFxcSlZPUkdKWFJPSkxNUkpKSkxQSUxRTFJUTEVIQTw3Nzs5OT49Ojs8OThAPzo6Pj03PT03OTk0Nzc5NTY3NjI1MjU3Mi8yLiwvLzIwMC8tKygoKS4xMjcyMTk4Nzk4Nzc1Ojw7N3aumaOimJyftKmvqaWtrLCxqr20sru4trq0sZ+3urKqnZ2sqaiyr6GakY6UgY6bjZB+doV4e3VvbmhYS0hISEdFSEhQVFRUV1dTVFVVVVZXV1dYWFhYWFhYWVlXV1VWVVNQS0Y+OTNOPH6eTUhKREA9QURqlH5MT1FRU1ZedYN9eWd3jZeYjY99aHmBdniAiY99hJiSgXGHj3x3e29rfq19c5CLf3uGkoF9f3RmdnyGbG9oc3yJjIiAbHlxfXBtdY9xaXGAfo5wQ4uEgoOFf3d3eouFfox7dX6Oko+YipKam6OWmZ2anZ6inZaNiqWbj56XjpaYj3ZubWViWldXVFFKU1VUT1BOUFZLTktOT0pRTkhOT0tFQzw7Nzk7Ojo/PTk8Ojk5Pz87ODw9Nzw5OTk5MjY2ODU2NjMzNjIxMjI0LiwsLS4uLTAtKyonJyouMTM2Mi84NzY5NjY1Mjc5OTV5ppegnpagpq+srquoqbCvsau8uKy7vrmzrKebsKesm4+WnKWppKCXmY+EknqIjYqKdnF9bnRwaWxpV0tGR0VBQENESUxMTVFSUFFTVVRUVVZXV1dYV1hZWVlZWVlWVlRTUUtENzhmNzA/qGlOSEM9OzpEioV6WkpOUFFUWF5lcHJtiKeqwH51eWN8eG98eYiQen2Lhm9tjJJ5dHhqaoCCcZaRi4F+loBJk5huaHd+gmxpY2x5hZCShmtzbHxucnuGaW1wf3ONiYSGen1+e3ZvdHOFgnmBeHB8joyKlIOWl5iakJOWl5mXnpeMg4mfkYuSjYaQln5taG1ubldVV1RSUVlPUlRUU1hVTU5ITktNTktDSE5HRT87OTk7OTk6Pjw5PDs6Oj0+Ojg6PDk/ODY4NzI3NTc1NTQxNDQyLzAyNCorKiotListKigqKCcsLTEyNTAsNTU2NzQ4NUhBODk1d5mRm5man6WtsKKsqqi1r66stL+rvMK/pqKZlaSXnY2Ei5ShoZiYkZOLc456gIWLhnVvdWxwbGRralhORUZDQDw+PkFGRkdLS0tNUFJSUlRVVFRWVldXWFlaWVlaV1ZUU1BMRTFAmjMganNDmW87PDk1PICChl9JTU9PUldaUllcYKeIYpppdHplf3Btf3qLiXaBiIZ0bJqSdHN8amudj015hZKJhI5nMXaGc2x+foN0ZmV0foSEhYBmaWx1a3GAfGdxcXtuk42Pe3N9fHFwbnVtgn94eXVqeYmCiIqElpOSkIuNkZSUj5eOgHmIl4iGioaAkId2ampuZ2RXUVpXWVlbTVBVVllYTklIRUpKSEdCQUZEQ0c9OTk4Ozk6OTw6OTs6OjpAPDk6PDk4Pjc4NzcxNTI0NDUzMzY0NTAzMS4qKispLCwrKykoKycpLCwyMjYsLDU3NzU0NzhpTzg7NW6SiJqRmZakqK6esp+muq+rsrDCsbvDx5qWj5SZi42FeYSQmJSNkIyPhnGHgnSHjIV5cHNxbm9kcGZfVEZJQz88Ozk6P0BBRERFR0pMT1FRUVFSU1RVVlZYWlpZWFZVVFNQS0U4MC9cYLNHOVhQOzk0NDGWuotITE1PT1FWTEFJUUlir7Ogcnx4bH1tcoOBhYF6hIaGeXKhlXR4gXN1lIc1cZ2onY6hoYSihXZwhnyHfHOMrY2JgGdmYmpucm1wg3Vpb1h1cI6akndsf3t9bXFtcIB6c3ZuY3aEfoaAhZCRiouJkYuRjIuPg3V4i4+AfoOAfo96cXBva19aXF1bWVhgX1JOW1pYV0xISkZKRz9DQUJHPkNEPTs5Nz07Ojs7OTo5OTs6Pzw4OD06ODs2NjY1MTEyMTM1MzQ3NTUzMS4vLCwrKSopKSoqKikoKikrLzNETTIxNjY2NDM8dlI3PTdikoGTiJaRnqSnnq+VpbWqrrGuwbK7wcaWkIyUkICIfW6BkJKJg4qHj4V1goRslYiHe3V4eGx3bndjaV5JUEc+QDc0NDk7Ozw9PkBCRUhMTExMTlBRUlVVVldYWVhWVVRTUExFPDUqnUtbQC1nSTk0Lz+Sg6muX0dMTU5QTDdDTVJTREqGdoB8fHZ+bXeIiHx+hYN/jH52opl5foaBhZmEm5xhhqqfnYuDkI56d4h+iYiNc4qXj4R6XWRxdHp7d4psZ2pieW+Fj4J6boF3dIR6cHR6d2tuaV53h32HfIiHj4CLkpeDjYWNh31xhH+EfHV3e32JdW9yc2VmX1tbXVNbZl5XUVVYW1VHSktFS0c/RkBEQz5BQT06OTc8Ozs9PDo6OTk7Oz0+Nzk+OTk4Njc1NDI0NDAwNDY0NTY1NC0sKSsoJycnJigoKSkoKCsrKy8wMFVyPTIzMzMxRX5XND05XIx4ioCUjJKdnZ+mkaCroLGor8CxusW6lo6RlId6hXZrf4yRgn2KhI6MeIOBc6GEi319gX9wgH56Z3ZrUldMQEUyMTEzNjc2ODg6PD5CRUdGR0pLTU9QUVNUVVdWVlZUU1BNRkA6Mj0gI5ZjjFs1MzExaT9Hb0lGSUxNT1JMS1RdWVJKaYSIe4l5fHF8j4x6fYmHfpeHdqGZiIePkpSljaypSIaur6+LgYCTioKLgYSRqIeAmJiKnHNtfIGGh32OaGdoeH5uhYeChXGEhUdrgHdyeXZobWtfd32DiX+IhYx6lZ6biouIkX96dYt2fHdtb3d+f3NycWpaXVxbY2NYZmVcVVBQVllQRExLRk5JQ0ZDQ0FAQ0E9OTg4Ojo6Ozs6ODg4Ojo/PjY7Pjc1ODU3NzMzNDQyMzY2NTY3Njg7REZMTU1MQzcrIiYnKykrKywvMDArbnUyMjQyMEyBXDU9PF6EdHx+ioWIkY+WmJKXoZ2soaa4r7O8s5eNkouYi310cH+Jkn59jIKSlH2Gfoakh4h/goiFeIeIfnOEeF9jVktCNjAuLzIzMTMzNjY4Oj0/QEJFR0hKTE5RU1RVVFRWVVNRT0dDPzgwLCOHWz4/ODQuXZZwc6NVRklLTU5QV2BZcFpcXmqNk4eVgYSChZGTfoWJkYGalYKgoZeVm5qlrZOau7Gnu8fDqIqMoaWPlImBkXtyhJ6fkZx/doWFio+IkGpob4OAdY2HhItxhoJ3h4B7doV9bnZ1Z4CUj4aJiIiIh6GroZaKjph/e4KJenpvZ2t4fnh9cWpjXVpaXWlcYWZfWU9LTldSUUlQSkROR0NLRENARERBPDo4Nz08Ojw6ODg3Nzg6PT04PD02ODY1NjYyMzQ0NTU3Njg2NzxCQj88ODo+Q1FeZVxHMicmLCwtLS4xKD+LWy4zMTBPg180PztudXBmeIN7gIyAgZGPi5ubpJyhrKarr7CXkZGEoZSEeHd/jJR8f5KGkpV/ioCSm46DgIGLi4KJjYN/iX9scGpdQkE0LS0vLy4vMDIyMzQ3Nzk7PT9CREhKT1FSU1JTVFRSUE9IREI8ODcvOUQ+PDw2My5sk5dNUEhKTEtLTlZgY39nZ211nZuPmpOTi42OmoiTj52LoKCSo6qlo6yTqLaiqMHDrseveLqUmnyNoZ6ZhJOFgo+in5SZkoSKhY+YkZZscHWJi4KWjI2Pdo+EcWyFgYqWkoOFiHKJoZaHk4mPj5altambjZWig4eThH1/a2prfIB/gHJhXGJeWWZqXGtrXldLR09TUU5NTEZJUENETkZCQ0VHQj46OTc9PDo7Ojk4Nzc2Nzs6Nj06Nzg1NDU2MzQ1NTY2NjY4NTU2MzEwLiosLCkoKS46UGFcQCwoLSsrMCwncog3MjQwT4RiM0A8dW5nWXCCcHWHcXaShn6YlpqUn5+cp6CqlpOYnmdlpJp+hJKReYCSiJCSfYqFmJKRgoCAi42JhZCGhIiFeHh/Z01SPi8uLiwvLi0vMDAwMjEyNTU3Oz9DRk5QUlRQUVJTUU5QSUVEPjs8OkNGPz48NzUyPD9SNUhISExMTU5SXm+KfHOBfaCdm6imopmhl6KVnJ+onqmrn6isqaq1l6u/q7bIyLfJ0c++m6Bwaaupn4SUkoWcoZqamaeRkYiVopqad3p+lJiSoZKXl4GUnnt2lZKrs4mNl6B9lJ6cjpOWmaSiprawnZGZqIiXkI6BiGxzc3x+enBnYFtfXmFmY2BnZ1xRRUpLUE9JSkxGRk1DSExGRkNCR0RBOjg1PDw4OTk5NzU2NTg+NzU9ODQ3NDU3NTQ1MzY5NTg6NjE2ODYzLzAuLSosLy4tJyMqO1hiQigqLDEtKEuXXjA2M1GFZjJBQGlhXlBwdWBufWF3jn18lI6Oip+Sl56WnKqYnqpCRH2HiYeYjXiCjYqOjHuKho+QjoGCgImMioSShYKGiIGAh3dfYlA0NjAtMS8sLjAwLi8uLjAwMTU+QUFNUVJTUFJTVVNOU0xFRUA8Pj1HR0BBQDg2NjI8OTtGSEdJSU1PUVlthpB3lYujp6q0vbilrqysp6i0rLC3srKtu7GzvpyzxKy7ycu4xL+4paOwsqytq6SLlpiFpqagopeBppmNoqqopIeFk6ShoKqhpKmOnLGLlaOnt7uboKOwk6Odo56RpKKrr62ztaKVpauImomSipZ6e36EfWZfZ1tkYV1jY15mZl5bT0NJSFRPRkhMRkpHRUZIQUtGQ0ZGQTs4Nz08ODg6OTc0NjU4PDU0PDc2OjQ0NjQ0NzM5PDM4PDIwMjU1MS8xLi0qKi8sLSooKiYlNVhYLywwLCwwhIE4NzFQhWg1QUNbWFRMaWNXanBYeoV2gZSFiIKbg5KQjZLayJ2Wc1aXiI+InI98hoyOiol6iIKHkY6DhYCLhYaHkoaChImGh4eHcW5hQEU2NDwyLzExMC0sKy0xLy00P0RBTVVRUlNVVVdVTltQR0dEPD4+RkhDREA4Ozw1Qzs9RktJR0hST1BXgZOghK6js6qywcfDq7PGtqyzwLO5vra/tMG2u7ukuMaptsnHtr65tKijtK2xsZyakpqfiaevq6SVdp+kl6GrsbOYlqqtqK62u7K6rK+1orGssbW8t7WutaCnqKOom6mwrbK6uLinm7epjaWOkZOgh3mBgnRYYGNVZWFgYl9gZV9aVUpERUxVUUhKSkRJR0VBQEBLREFNRjw4Njc7PDk3Ojk4NjU1NTcxMTw4ODk1NDY2NDk3Pj0zODkxLjAxMjExMzAsKiwuLCsrKyooJyopRVowMCovK2iSTzYwUodqNkFFV1FKTFtaUWNkV3p1cYKUfYWGk3aFfoCNe7+7o7yCtJSTjZuPhIiPkomJeYaAjJOMh4WBjn+BiY6GgIaIhYqHkXp4bl1WQEVNPDY6NDZBQjc2NTAvNkNIQ1FbT1FVV1VcV1BfVUlLSkFAP0dLRkVEOz5AN0Q3P0JKSkVHV1RQXo+lraOxtMO2uMHMyba8xb2zs8C3uMK1v7C4dLK0prrFpLDGubGzsbSopLW2qrGgopabopKlsa6mraynpJigrLO6oqmyurW7vsy/xcW9vbPCt7q4v7e6t7msrbCmsaqtvrC9u8LCrJm6qJSuj5iYq4l+gXppVmFgV2lkaGRWWmNZVlRJR0dMUUdDSElBSEQ+P0JCS0BATUM5OTY2OTo/Njo5OTY2MjQ2LzE5NTk5MzY0NjI3Oz0/NjoxLi81ODo5NjUwKigsLS0tLCwqKCgrKyhFUy8qMDBKj2s1MlCHbTY/RlFMQUxSV1RZVVp3anB/j4SBjoVuenJ5iGK4oZmjiZWTlpOTk42Ql5KHh3uGgY2VioCEgIl6fIuHhnyKgoGKg5V9d3l1ZU9cZEdFTDpRZGFbXlNGPztIUERaZFFRWVhZZ1pUYGBNU09FQT9JSkhFRkFAQz1FNkI+SEdLTFNaVF2Tr7i1urnJwLu9ycy7vcC8t7W8u7e+tbqyxmB1s6Wxmp6rvaqlqKuqo6KytaGrp56Vlp+Zn66lp6elnqSUoqews6eysry2wb3TycrTxsLFzMLKw8C+vb+8vLe0sLm3t8O6xr3DybCeuaqirI+lqLeJgX5xXmFhXFZhXmdlUlhhVlJVSUVFTktBPkdEPUtCPUJAPUY+O0hANzk2Mzc5PjQ4OTo1NzA0NS8yNjM4OTM3NDUyNj84QD5HS1JUVFJQUFFSUUpBOS8sLCwqKygoLC0sL1A+KC40OIB9PDJLiHE5PkNLRUBJTVBSTFFdaGxscZCNhZBzbHNyc4jVwLWZoI2VmJmRjpeRlpaOhod9hoOMlot/g3+CeHqLg4d7i3mBioKXf3R9emtlcHVZXVxQZWViYGVkXVtYV1xNZG1VUm1tXm9fWGdlVVlUSkRBS0tIRkhISEhCSTlEP0hLVFRWXFpbkrnAub23xsC7ucrLura6tri5s7i1tK62tplkdaierXBeoqycmKGjm6Seq6WUn5+QlI6WmJeon6Wfn5qZg6SdrKSqsK23sL251NHP18/JzNLMz87Kx8C/wsq9wb3CwMXExsq/yM+0pLuwtbCbrLm9mn54a1xfXFldYVliYlFbYFNRS0NCRUZFPEBFPkJIQkBDPTpFPj1KPzQ3NTM1Oz00Njg5NzcwMjIvMjQxNjk3NzU1NTVEM0VMTT41MTAwMDY6NDc3QElPSjstJioqKC0uLyxATSsvNTRtiUkwSIl0Pz5CREBDREZLT0RSXFlpX3CXkpGUbmxvdXWIs6yhoZ+LmZyZjIyVkZuShYqKfoiHjJCLiXyBhHN7iYOGfIl0goqGlX9ze3hsbXV7aHJlaWxpZmppaGBmaWhtWm10l62kvIiHZ1tvaF1aWVRISk5QSktRTFRRSUxBSkdLUF9fYmZpYZi3x7C5s7u+trLEx7awubGwu6yzsaeqt6yNtqeem6eaT5udjI6glpGmmKWVipOTiZCJj5CSnpuhmJuVloeemaabrK+or6eztNTU1dbSy8/T1c7Tz83FwsrQv8rJy8nSyM3NwtDSuLDEvMS6pra7xKKBbWJbXF1YYFdZZVlQXFdOUUNCSEVCSDtBRD5BSD8/Qjc7RD5ASD00NjY1NTs6Njg3NjU0LzEwMTQ2Mjc4ODc1MzY3QzVCOD8tMCwxMzQ5PTk3LC4sMTtGTD0pLCguMDAwN0s/LTQ2VIhXMESHd0M7Qj5FQkFDSk0/VVlTZVdzkJCYg2hxb3l5g6CqnqaXjZubl4uNlZGajn2Ji4WOioqLkIh8hIJwf4eBhnuHcoOSi499cXh1bHF4fnF7bXhzbGiAcG1jaW1weWl3fX7Lv8Lfp21jeG5jW2FgSlBSVU5ZXlBdXU5RTlRRVVRcbm53gnKWrristKewtqutvcCxq7WmpbinrK6hrLSjjrGumpiYjJGUkYSOm4GNppGciYOLhIqJhIuDlJWYl5SbkZyXmZmenquspKehrKzO0tXRzczS09TQ1NHOyMPU0cjN0tPT183S0cXS1sbAzsfIw6m/uNCdeG1kXGFcVl9SXVpOT1NQTkg+QUZCQkU8QEI/RUU+Pz86PT09PEpBNDU0NjU8ODg4NjY0NDEyLzAzNTI2NzY4NTMzOz08RT1AMTErLzM0OT81OTAxMDIyLTJFTzMpLzMuMzI9TjI0OEN9XzJBhnREOj09ST5AQ0ZIPFZSTU9bdYaFindtd3B9foChnp6hi42Zk5OMi5OPloR5hZCQjYuKiJGHf4J7cn6Agod6hXWFk5GJf292c2xzfHt2fHOBd3FqgHJyaW9xenlye77Lmn6MsYN2coR2aGFqXUNaWltWZmRYZWtUWF1cYGNdY3h7f4uBmaqkpKGgoammqrG5qqa0o6KtoqOtoqexn4mmmpSSkYqSjoiCk4lrlaKNmISBhX6Rg4OTlqyLlY2VmY6FkpCdl6ewoaCgpKSox83PyMLL0NPR1NLO083G1tPN1NjW1tjV19XJ1NrNydfW0cqtxMPLiXFuYl9fV1NZUltPSkdJSUpAOzo7RUJEPEJEPkhCP0JCOzs5PDpHQjQ2NTQ0PDU2ODc1NDMyNTAvMjU0Njc0NTU0NDw+PUU/QTYyLy0xNjs9MDgxLzI1NC8tLjtSMDE3LzUzMkVEMjg+bmI1PYF0TTk5QEk8QUQ/QTtQTEZLWXCAdX1oc3lygomBnZWdlIWLlomPioiOh49/d4SUmYuNiIiLiX6DeHN7fYOHd4B7h5GXgYNud3BtdX92eH1zhXx5bId2dG99doR1eXudtYw8QYrGpX6NfGllVklDZWNmY2hqZG95W19maGtuaW6Ag4mRi52foJ2Ql5ifo6OmsqSks6CipZ6hqaCisZyGnpKSkpCLjouGg4+EfpybjI2ChIV6lH6CqZWjjJKKmJKLfZeKmpGrs5iam6ecp73Dxri2xs3S0NLQzNLLydTP0dXa19fY1NnYzdjbzsna2tLWv8zMtHZ1bWNcWVJVUFlWRUZKSUVFPTo3OkBBQzpHRUBFQ0FEQTs/Ozs3REM3NTY1NTswNjg5NDQzMzQxMDE0NTU4NzU0NDQ5QD5EQkM8MzMuNkZUV09RSkFKRj8xKiguQlQyOTI1NC83Szc1PGBiQTxzdlY4N0FIOj9DPjw5UUVDSlRsbm9wYXFxc4aNfJeRnYt+h5KCiYaFioKHfHiFlpeIj4OHhod6hHlxenuEhnV6hY6NnXqMcHxvcHp/cnyBcYOHgG6OenV3fXyCdX98h4iwdFipwraMkoFwbmI9XmhycHFwbnh3gmVpb3J1eHJ7i4eOlJKblqCWh4yTm6Cbn6qfoa2copqZn6Wen6yZi5qMkZKNhX2Ih4OFi46gmZOIg4d+bZl5hJiGiJOMjpWMhnubiJOPrquUlZeemKautr2orb3Gy8jJy8vPycTSytTW2NfY19Tb19PZ29bQ29rR1sjVzJV4emhnWllPUlNdSEJFSUk+QT49Nzo9Pzs+SD1AQUFBREE+Pjo4N0RCNzU1NDc5LjU2NjQzNTU0MjMyMzY0NjU1MzQ1N0VCRENFQjU2PEZOU01bbmZjbnNrYFY+LDRMRzg2NTQzM0JGND1XX2hMdXheODs/Rjw8Qjw6OUQ/Q0dSa19tZGJma3aAiHGRkJuAeYCOfoOCgoV/hHx8hJeOh4t+hoeAd4J5bnt7hoF0epKejaF2j3WCdHWBfXSAhG+BkIFvkoR0fIGFenaGe4m3xqTCybeBlZuPeHBlTmVjgnqBd4aikIt5eXd7g398hHZtlJaUlY+XkIOJj5aal5emnJigl5+TkpejnZqrlpGRi42Sg4yFiYiBhZCRnpyZiYWLgYaXe4iIn5eQiY2Ki4J8oYiQi7yhmJOXmZyopqWunqe1vsDAucfJzc7FzcrR1tXU2dXX29TX2drb19va2djO28aFeXhlaGNfU1ZWVU1LRE1DOz09PDk6PD45PkE2Pj9APD8+PDk4NjdDQTY0NTU9ODA2NjU1NDc3NDU2MTM4NTU1NjQ1NTdISD1ESkU3OTI1O0g+Ozo6N0hQXFpSVVhLOVQ+Ozk1MzI3STg9TllNSHh4ZDU9PkM9PEA6Njo+PkBFUV9ZZWFdW2h0enlsiY2Sd3Z6inx+gH+AfYV6foKRiYSFeoWIe3V9dG58fYZ+dH+SnZGfg5J8hn14jn14iopugpqAdJiFfoGJhXx+kHqPqY+Qw6C7jJyjnH2JhH2JcoyKfnOmmpyZlIV7j5CJhGhHcaGknYyLkJKFiIuRkpWPnZqTlZGXjYyVn52UoZSSjo6Qi36Qj46LhIiSlpqfn4mLlJGdkYKLf6aZiIWOgoaEgKSGiou4mJ2RlJahp6Cdnp2jrra6tau/xcrQyMfMz9PS0tjS1dfA19jZ29ja2tnZ19y3d3d2aWlkVl9aU09OSERMQj09Pjk5Ozo5OTw9NkA+Pjw9OTo7OzM3REA4Mzc4PjcwNjg4MzU3PDM3ODA0OTc2NzU1NTQ2RlA1RE5JODkzOEFLPTszQ0BJPDlEV048TVRITj85NjMzMz5DO1tYPjVZeXBaPDxBPD0+ODU4OT89RFJTUlheVVhmbW1taYGPinFyeIp7e399f3yIenx7i4eCfnWDhnlzenNtgX6EfXeGm6CanpSSgIuHf5iHgJySboeohXqgi3yQjoOIhJx+mpGKjaOin5Cjrp+LkYuFi4GShldyrYufrJyPg5ibkJCOXIOikYKMn5OVjIaIjJKTjJSVlJCMj4qIlpudj5WWkYuSlIaAi4mSjYqKnZaZo6OGk52VoIuKiI6ckIOIj4CDh4WkhYuQs5ickpSXoaGemZKbnaexuKylvMHHzcfGz8zPzM/Xz9HUrtbV2NrZ2trX1tnZnm57c2ZlW1xXUlZXQ0BJRD4/Pjo0OTo7Nzo7OjM7Oz89Pjc7OToxOkc9OjI3PUA1MDY3NzI1NT82NTs1NTg1ODo1NzczNUhSN0dPSzk5ND1FSkI+MUZDTEE5ODpHWEA1SFdJNjYyMjM6RUNlWD8mX3lpX3o+Pjk8Ozk4OjxAO0JRS0tTWVBUY2J4bWJ+koNubXeLeHl+eoF9hnx7doaEgHNwhYJ7dnZ1dISDhX1+kqajnqWilomdkJSWi4qol3KKso2DppGEmZOEmYyilqCZk4manaGSqK+fkZSQjo6IlYtujbeEmsTIsp2ipZucmJaRspBjpM3IlY6Gh4mQko6Nk5SKhYqKhpaam4+QlJOHlZiEgI+LmYiNkKqXl6SjiJmelZuJj4eXl4uFj4yBf4aPpIiNk6iZl5OWmKGYn5mTnZuisrSlo7zBvsfFxcnIycLK08zN1KjS0dbW1tja1NPazoFxfmdiXV1cTklUWUFCR0Q7QT04Mzc7PDo4PTY0OTo8OjgyPzk5MjlJOj42N0JDMzI6OTYyNjQ+PTQ7PjY5NDk7NTc5NDRLUTxKUUs5QTdCR0lANjRKRUxGPjs4OEVUQTc+XDg2MjE0OjtFYFhBRmF0aExjWj41Ozo6NTs6PTpFTUZIUldTUkJjgUZ2gY59fG1+iHh6fnqCgoN+dnaAgnxsbot/enx4eHyEh4p+iqOzp6Oqs6GWp5+lo5aVrqKDkLiVkrKZjKGhjKSbr6OknZiQp5anmayvpJeUlpWQi5iZlqDAjqPJuaubo6atmJGbnbKdhYWoopyYhYmJjpWNi5OPiIGGh4mTmJWMi5SThpSYhoSRkJx0kZiylpeloYicmpOQipGKl5uJipaOhn2MmJ6JkJCcmpmTmJeflKCdlZ6boLGuoqS3vrTFx8S9w8O/xs3KydKmzs3T0tDW2NPQ2LpxeHVcX1RfVU9ISk5EQkNFNT46Nzc6Pzs8Nz00MjY2OTc3ND01OzU8TDw+OzxCQTc1PDs0Mjc3P0A2P0A3ODQ5ODc7PDU1T01EUFJMOEA9RUFHQTU6SkVORUQ6NkFAQlM+OURPMzIzNTc1PXZcPFJcdGlaTV1TPD04ODU2Nz06SkZER05bXFlKZmA7SISLentuhYZ6fIR4gYWBfnB4fH59b3KNen2BfHiGi4mGhJKnu6yosr2vpK2ys6ijorCsipq0naK4pJWtpJeprbempKOfmamXqaOvsKmZmJyUlZGXoJiau7uuyqFqtrirsJSZnqOrk5e9o16qsoKJio2Uh5F8jo59g4aOkJSUiIeTloyQlY2LjJeYkpyZtJeWq52LnJSSjZGSjJmbipGekIuJlZ+hjZSNmJmckpuYnpShoJScnKWvqKGks7irwsjEtbq9u8XHx8LRoMbJzc3E19bRy9Shb3lnW1lTXlBPRUM+PENBQjg/ODc1P0Y8PDU8MzUzNTU0NTRCMzk6Qk06QjtBSEI7OkA8NzQ2PEI5P0BCODc0Ojk2Pj00N1RLQ1VRSjc8OklBRUA0QUpITkJBPzZEQTxKTkQvVD0yNTQ6RUpcWEpaUW1ncHBEaWBLSTY3NTc6PkpAQ0lQZEdiYGJwSkCLin+Bc4aHfYKIdYOKgn9tfX18f3B3h3eNgYd7jY+MhoyZqsLAr73Gu7OzwLy0rauztounsq2tvaqbu6Sorbm4q6amoaKjo6ivsrGqnZykmJuXl56ipqWSpLquqcC8ra2yuaakp36IhpytvbCDjIyLkIOPg5GPeoGIkI2NnIiHj5eNi5WXlJGal52omrGakaycjpqPko6VkZCWl46RoJGJlJujrJSWj5ScnZOgnZuYoKGUmp6npqSipLCzp8HGw6+wurbFxMK/zabHxMfDvNXRzcTKh3JyYFpZXlpMSkJMQEZHPkE/Qjs6ND5BPD01PTY+MzMzMjQyQTE3QEJOPkdAQ05DQT1DPTs4NkNCNUJJQjo4Nzg7NUI+NzlWS0RXT0Y4PTRLQEM+NEVLSE4+QUE2QkI/QlNFNThQMTQ1Ozw4O0Q+OUxqal07V1JkS2daVU83OUdFP0NGXGVHYGlnWl1ck4yMiHuHi4aDjHWGkYqBb357gX9xfoF6lXqSlJSYkJOVp7PGyb/CzMHDuce8uq+rubqXsra6ssCupcCkq6+7vKqtq6OjnqeqrrSwqpugqpuhm5WfsLSni6O6urbBvKyonLOlpKmUhY6pxMSkgouPh4iEhpWUjXqDjZGPkaGMjJSSj4iXoJiTmZWYpqCunYyqnI6Wj5KRlZWNkJWRj6GUhpefoLKelJqUn6GYpJ+aoJuglJiepaOmpqSvrqW/xMKuqLe1ycO+ts+yxL/EvLPRycjCtXN3a1tXW2lRTEhETEpLSkFBPUNEPDVBRDs6Mz04QjMzMjI2MkEwNUlFTT5JQEhSQEg+Q0A7Pj1GQTVBVUA7OTk4PDdFPjg+VkpDV09HOD80TEBCOzVKS0NMP0I/PEJGPUFITDkrRzwzNjc0NjRBPzdPYU9hRS89PjZrbGpgQDpIPj9FQmZaTmVcZlRjapmNl4qMiJKQhol5hpSQgXKAfI1/eIeCgZB6jaGWqJqamLq9x8jJwdLJysLNvMGzrbu+p7q/vrzEt6zBqayzu76qsKmkpaOrrbOttrWgn66epaKYo7O9qZuovcGjt7ewq5Oxrausl4eaqaelkYKMk6WViYF2ipJ6hY2SkJ6fk4+Ui4+NlKOZl5yVlaOeqZ+RpZqMj4+PlZaIfI+VkpKjmpWgopy1pZCel6SjoqWenaaYnpWXm6SjqKeisqyovMDDr6Wyt8zAua/Es7u/writwsPCwJhseGBXVlpaSktNSkZEREhCQkFETDo0REg5OzQ8N0UuMTIzNTJCMjZTSE48SkJKUUVLQ0RFOkVMQjw3RVY9Oz04OT88ST86RVVJQVdRRzdBOks6Qjc5Sk1CSUBDPjxERzxCQ089MjBIMzY2MTcwPUI6PWpqSks1UVMzU3BwZE47RD1ARj5qSF9YYVpkZFaej52Ol46ekomKf4mgk4R4hX+Vf3+QiIqQgJahma6mo5jCvsfDx8XTzc7Ny7vCt7C5vLO8y7zDwbW2u62zv7m8rq+ooKintq2tqbK3mp6soqehnau3uKmksL/Esb65s6eqtbSurpeWpayooJGOkrHFp5WOfZGVfYiRmZCqmZiTk4+TlZOlnpOdmZSho6KcmJ+Yi4yPj56IWpCWl5KWpJllmKOesqSWoZasrKqnm56ml5iWmJWgo6iln7arqbm7w7Sls7XLwLiqtqyyu7iuqLi6vbiCa21ZVlRUTUVKU05LP0JIRURIR0c5NUZNOz43PUBKLjMyMDI1QjU1UFZOPExGS1JMT0hHST5JUT86OElTOzs/Nzk+RExCQEhTS0BXUEY6QT9HNkE3O0hNQ0U7Qz00RkU6QkFCRzkvOkEzNjAzPkdEOTQ9dGRNRztFKzpmfGdWOz1AQkZCcUZpSVJlYkxGpZSclqGXqZaNkYOHppOIgoeCnISDlZCQk46aop+vvq6hxrzFxMbGzs7O0sq+u7axuru7vs+2xL24uLeysbWzuLOrppyrq7mqqKevr5ejrqSnpKS1wLCrrLS/w7rAurOnubW4s6+Vpa2urqWLk5WhjXTBmn6XmYWPlpqMsZWbmpWTk5qZpaOVoJuWmqmdnKGgmYqMj5adYEqWnJqVmqWWVJawn66cn6SUr66rpZqgpZSTmJiOnJ+mopm0qaqzvLu7qrCyx7+5pqysrbGxo6GysrSkb2xlW1lOT0tFT1BQUTtISkhHSUNDPjpLVT9BOj1FTTA3NTQ0OkIzNE5XTzxKS05VTlFKUEhISk9CPD5NUjs+PTg6PENSPkRIUklCV05JQEJBRjM+NThKS0NBPUM7NEVBOkE/PkhANSpCNTIsPmNdZzozNXRkZUBSNyYjM31oVzs6QkNAPVFFV1NzYldGSKqXmaCiqK+ZkZeHi6eWjomThZ+HhJ2Xjp2hmqOktci0qca6wsPHysjHzM3Gvruzrrm4wMHMtce6wbi1urCvr7O0pqObqrS0qaimrayapK2lpKisur+oq7a3vsG/vrmzssSyub2so661rLmmiJyYppt2v6CFmZ2Ok5mai6+XoZycl5Wbn6Gpn6igmZqqmaGnnpiQjZGdg252kqKalZ2inpCusqKqlKiql6qto6OfpaiSkpmciJScop6Xsaepq7q2vbOyrb65t6Cjp6ilp5ycrampjGJkX15RSkxGSE5JVUw9TUROSktCQ0Q8UVU9QUFCRE8xOD03Nz9CNzVVWE4/SE5RWVNQUVVLUUpKRUFFTVE/Pz04PTtHUjxFRFFCR1lNS0FIREU6OjM5S0lCPkNCOTlDPjxAPjs7RzctMj4tMYJoTnpcLzBraGA8PUJCODZ6Zlc7Oj0uLlJgTVVIf2VeSEWrlZyhn7uvmZSfi5Orm5GSk4mrjYein4yjrZSjo7bGvbTBusLCx8jFws3Iwb25sq+5tMDCyrXFscG8tLqqqK2ssKKjmKq0u6Wppqyqnaivp6Oqqr68p628tLi9x7y3tbfBsb7AtKm1t6u/pY+jmJGioLyfiZqgmZeeno+3n6mcpaObnKGaqKWzoZueppyoqp6ZlY+Um4uXiYylopSdop6gtK+lpJOvq5mrq52dpKOokZWVoIOPnp6blamkoaG0tLq1rai1srOenKOlmpeVmaqhnnZeW19dSkhGR01RSU1FRkdCUkxKQkVHQFZSREg9QUdRMTtCNzpCRjc5XFlLQUxQVFVTTVdSTlVKREBKSk5POUM/NT08TlFDPz9QP0VaTUpBS0RHQDUzPUlHPz1FQTk3QTs8QDw8M0A8Lyc7KkiRQjpTSjAsW29XNzE8Kh1CgWRUNDktMTpnXEZDQ5xwYkdFp5ekn57DrZuXpZiZqZyWmpqPqpaVp6aVra2Zoau2xMK7vrfBwsDHxL7Nxru9ubKvuLO/wsi1v6+7tri2pqSqq62goJqrqsSipairpp6rr6yhqKi/t6atvrG4tse2tbm4v7K/wbe0s7SvvqOXo5aUnJSuoJGioqWjo5+QvaSpnairnZ2gm6afvaKYo5+iqauhnZeNlZ6TnoePhY2TnqShnbWspZuVsaeZr6efmqmeoI2YlJ6DjaCam5OlpJqYq7G1saqlqq2snJigoJKOkJaonpRnYlhgXU5IR0pOS0hFRElBPlBIQDxHSUhbUk9LPUhPVTRCRjk+SEc1Q2FbS0NOUlVXVlFYVFJVSEA4UVFQTTpHQDRDSFFTSUM7Qz5HVktDQE8+SzwwNjtHRj47RkE1Nj85Oj85OzE1RDAtLC9Ndlw0S1o1LE1uVzwtPSkeI3piUTVDS1E6blJGPEt4ZWJXTKKao5yexayhn6yena6gk6OflqWgpqmrl7axo6qztcTEvb+2v8K7yMK+ysi2uLW1sLOzt8HGtr6wuLS4tZ+mrKqrnZ2epaTBpaCqrZ+kqayvoqanvbWlsby5t7bDsrO3ub+yxMC4uK6ztbWjnaWVkpShrqCZop2pqKujmsKtqZ6srZubnpmmob2inaWYq6uspqGZjZmfkp+Jj1d/lp+moaC4qqaTmLWjn7KhoJuulp6OmJSdgY6fl5WOoqSVkKausqupoaKlpZWVnZiLj5GTpJ6JYGRZY2BLSEpKTkZFQUZKPj1KQjk5SktOXVFRST1MVlw5Rkk9RE1JOEhiXExDTFBTWVlWV09aXklBPVdRSUs/SEA1SE1YU0hBOkBBRFBIPz5RPks3MDk5RkU7OEc/LjY+Nzg+NzcvMT85MSUxUVVtW0pPMTA9Z1dEMTc9LSt3YFM2U1prV3JIRTY9dWVcS06en6GZnsOopaK0opyyqJOrpKCkn62prJ27sKistbHIxcHCs8LDvMbDvMTKvK+wtq2wtK+/xLS5sbC5tKyZqLCpqZqdpaGnwq2brLGcqaOtsKmkp722pre7va+3w62zssLAssezurestLauqqKmlpWVpKyin5+aqKuwr6+7sqagqaiZmZiToqS4oKGkk6+vrKWnn5KhnpWej5CNlZ2ao5+ns6amjJizm6Oump6brZCek5aTmX+RoZaPjZ+hk4umrLClpqGcoJ6SkpqThYuSjZyef2BlWmdlSklMSlJCQ0BJRzs7Rz85OU9NVV5SU0o+T15dPUhQQkxMSTlNY1xMRUxSVFlbU1VPXGJIQT9aUUFIQUtCN0ZFTEtOPjtCSEROQj07TkBBMy85N0NCOTdGOys2PDQ2PDM1LS80QDErJ1Z0U2VPPzEwNGJbTTIzPjA8dl1eP1tUXmVxQDg7SJZ3ZUE0n6OfnKDDqKSqsqGjtKqVs6ynoqSyrK6pu7KssLS0xsDEw7XAxL3JxLXAyMG0q7Wor7isv8S0t66strmlmauxq6qXn6aXrbu0m6iwm62frbSyp6q5sqi6s7eyucCqt7HDvbTGp76vrbe1qaisoZeXkqaloqOYmKWvuK6ytbagn6ikmZWVk6Sgt6OkppavsrKnq6ahnpuam5aYqJ+gmKKer7KipoyXrpikq5eZnqSRm42TlpmElZ6UjI+cnpSLqamqoaegmZ6VjI6ZkIGFlYmUn3hjaFxqak1QTU5UPUNBTkM6Okk/NzdST11eUlZRQVdgXEJKU0hWS0g6VGRcTkZPTltXW1JQUVhdR0FCW1BCRz5OQzlIR0hPUD8/Q0lCTEI8MklBOTQxNzdCPjs3RTcrNjkxNDgwMi0vLjw2LSNCcWdzazIzLzFbYlozMzgwNnBbYkgwNUlwaFZDV0aMeWZDO6SjnaGmv6aor6+hqbSrnbmwq6OqtLaxsLm3sLe4uMS9w8e9vMTBxsC4wMbAuqm2pKy7rMDCt7eprLG6opWtsK2ylqWnkaq5qaCnsJ2qoK+0s6qptratu6yzs7q3rLiww7q+v6bDq7C3rqmrq6aemJmroqKgkZihsa+zq7C5mpypoJmWkpemobeppaOjsLG0q7Koq5+boKCbnqWdopedo7Owmp+Pk6WaoKmalKKelZiJk5eSlZack4iQm5mUjqiopp+jm5ebk4eOmYt9jJaFj5tqaGxgbG5XUFFaVEFDRVRAOztIQTc6WFBkXlBWV0RZXl1NTFJOXktKPlpjXk5IUE5bVVlQS1RXWkk/RFhQREY/TkA9SUdHUVBCPURGQk0/OjFEPzc3NTQ3Pz05NUU0Kzc1LzI1MS4tLiwxPSonKz1ccD0+MS4xZVtkQDE2NDdnWWBGKD84bH1oW1Y7iXtjQz2nn5yiqb2hq7Cqo7G4qqW1s6ygrbW8rrO4vLq9trbAwr/IxLnEwcDAuMS9wLevtqert7G7vr+0qK6xtp6Xq62orZenqI6nu5+krbOeq6KwsLOrqba0tb2tr7G1rLC0scG6xbervK+xuKytqqOxpp6lqaCkl5CZoLOqs6qqs5qdp5ualY6gpqS0rqeira2usaezrbKqpJyfqKOelaGZm6i1qZeZkZKemZ6gnpCrnpeXhZSXipyYm5OKjZaXmpempaKgnZaVl5OAj5SFe46Sg4yWZWxyZ29xXkZZZlZEQ01YRFo5SEI2Pl1RaFxOWV1HW15dTk1SWGRKSkNcYl9QTE1OWFdYUEpWVldMPUVVSkVEQU1AQUZISFFQQTtGREZLPTg3Qj02ODcxOT48NjVEMCs4MC8wNS8qLC8tKj0sLCUyKyo1SzEvJ19fYVUxNTA9YFZeOClDM1lUXGdLNox6ZkxApJqgpKy2pK2ppa6utqqvtbqnprC3xbext77BwrS0usW+zMW5wsC5vrnDt8C5srSrqbq2urm9tKmtsLWYmKesqqubq6uOq72dq66xo6ugsK2zrq22srm3qq6usqi1r7O7vcqyqra1sbSvrqehs6CbqK2gpZWWm5qyo62gpq+XoaSampKOo6Wns6mhprKsqralrrG1r6SZna2nmpifmZmrt6KXk5COl5yhl5aTq56bkn+Sl4ydnJqWkImUkp6ZpaKhoJiWkZOVeouPhXuMioOLkmpteG11e2BFYWpZSUhZWj17SkZENkFiVGlbTVxgSlxdWlJTUmJhTEtFX2BgUUxJUFdWVU9HV1ZVTjpJVklIP0NLP0VESEhRTkE/SEhIRTw3PT46NzU2MDk/ODY2QiwtOCwvMDQsKCwvLSo3NikoOS4kOks1LiJUYFVgLzUoQ19RXC4qQi9KR1BbSDNjWVRLRJmXoLGosaqtpqSvrrWpt7S5pKyzt8q6tLq6v760s7fDwMzIvMO8tr2/v7e/vLG9rae6uLe2wbaqrLG3lJemrquno7CqlK+7pKyxsqeoo7G0sLGwtbG4s6muq7Knt6+1tMPFtqm1tqywramoo7agoKexoKSUnJqVsZ6nnKCqjqmjnpuWmKampbinorG0rKeyp62wtqykmaCsqJucnZuUqbiclI6OipicopePl6WgnZSCkZWPnJyYlpSHlo+Xmqeco6CSlpCQlXaEkId7hYGEjIttcHd1e35cS2VsXEtOY1w+YntHSThHZ1dmXE1eYk1YWVdUWFRpXU9PSGFdX1BKSFFWVVJLSFdVVk04TVpORUBGSz9IQkNLU00/P0xPSEA7Oj47NjswNDE8PTQ1OD8pMDcpMS4yKSksLC0rLTkkMDQyJTlCNy4jQU5IZjI3J0diTFYlLUIuPUVMUTwzcmtKQ0ORmaWupa2uq6eksLKzqrext6CrtbnJuK7Bu8K3srG1wsLOxcDBvbS8v7+6vryyxKepuLC2tr+8rqqzspyfp7GtpqWvpZ2ytayrsbGtqai0uqyzsrWstK2qrKisqbitsbDHv7ilurCpra2lqK2wpqSkr6SpnJ6cm6+Zo6Oio5GsnqOgoKKqpqa5pay1taSqq6isr7auo52jqKqboJqakqSzmY6JjYeQoqCUjZOcn5ORhI2Skp2amZWTh5eSlZmnm5+ejJKRjpB3fo2FfXx8h4mIcHNxfn19XFNkb15OWWZcRkSWW0c7Tm1YYltMX2JOVldWV1RYZ15RUkxjWltUS0dPVFNOR0lWU1xOO1BeSUJESEpBRT8/S1NPPjpOTUM8PD45OjU9KzMyPTYyNDk6KDQ1KS8sMSgpKywtKiY1Ki8mMCkzODoxJiozQmM7NipIZUhKKzpJPzNCSVMsPo9rPEdIj5yqq6KpsaSppbO0srS1srKhq628zLquwLvHsbSstMLC0cXGvsCyvcDCvL+3u8SnrLess7i7v6+qsa2go6etqqiksKOqsaqvrLCvsK+rs7untrCyqbKpq6alo626rKqxwrm1rLqoqKitqqixpamko66qqKKfnKOslaWemJ6ZrJ2ip6mirKajray4sbKgqaKgq6+xrJ2fp6epmaOYmY+gp5iGhI6Ki56fjouMlZuOjYWGj5SfnJWXlIaWk5OXpJucnIuSkI2Jfn6HhXx3foeFhnRycYh1a19ZYG5jUXNxXEs7hHxGPld0WGBaTmNcTlVWVVdRXGJeU09OaFhXV0tHTE5SSEVJVlJdYzxQXUQ8RkhIQkc/PUpQTDo+T0o9OT89Mjo3OyozNT4xMDQ4NSg1LyosLjMwOyksLCclMjM0JCwyLTg2MCkoMTxdSjAuSmdERjg8QjA1RUtYMUCUWj5MRZWYraihqrOcqqqwta24ta6rpaqqvcm8sb63wq+xrLPEw87Ow76/s8DCw7rAs8jDq663rbK4v76yra2rpKeqsKmnqLGmtK6qsK6tsbC0rbS7pLeyq6yup6ugop6vt6qqrbq2pba1o6qnrKyqraGpp6aysqSmpqGhrJaqoZWaoKaepKKqpa2in6ext62uo6Wim6qrramcoaWkpJigmpWPmJyTgYKPiIWcn4uKjYuYjY+KgouXo5qRkJqLk5KRk6KZm5mKjouKfIaAgYN6dICEgX1zdoujiHhqXmBuZ1dlh2NOP2eTTEVieVdiWFJlVE1WVVVUT1xdYVVLTWlXVVdJSkhJT0JHSVNRWW9BTVhAOkpHRkVHPj5FUUg4Q0tFODdDNzI6OjoqNDk/Li80NjMpNCsqLCsuIzQuLSsmKCs3OSomNis8LTIsJjA2V1ouMEpnQUE8PEMrOkpPXjREhj5IRkSXkrClo6qxmKuqrbartrGrpayqqbzAwLi4s7u1pbKwxMnL0b/Bu7i/v8G5wbnAxK2xtbGzur+9srCurauqqLaqpq6vqrmvqLGxr7Kttqq3t6aztauspKmrnKOes7OoqKS0tKC2raCqqKuprKegq6ypubapqqqqoqmgrJySqaGdoKSjpqOqnpynta6opqqio5ilpqeqnKKko5+ZmJ+Qjo+YjX6HjIaEnp2Gg4qJjY2PjIKFlKKZjYyZkJGRj5KflpiWi4qDf3SGgX9/eXSDf3p3foCHnY9vcWdncXhcYHOIa09emVZIbXhVZFZSYk9NVVRVUE9YW2JVSFBpVFZTR1BZVUk+SUhPUVB4TE1WPTxLRD9AQTxAQ1VDOUFLPTU7RTEzOzk3KjQ6PSstMzQxKjgqKisqLCkpKC8qJiklMzssJDIpMjAyMSUvMlFiMDI/Zj1OWD5DLD5MVF8vSmo2T0Q7lo6woaarrpqspa2vs7Wvq6Wwqqm6vrzAsa64raG2r8nHyNHAvry6vMK9usPAvr+usbKxtby6wbGxsquzqKS1qaWts7K5sKOttrGws7qrua+prbWrqp6prJ+ioLWtqKGfr7KitKqeqKeqpKqhoqytqL2vrK6toqiooKyZkLChmKKgp6eeqJuZqrCpo5+toqGToqOjp5iaqaWYl5mdjoqHlIh9jYaEhKSWhIGCioaNjJCDg5OgloeQnJCSkI2RnJSXj4qGhXh0gX98dXh5gHt0c3pogIajdWleZWuBdWeIi31TWHBeSnhzU2RTUV5NTVJZZk5MVllkWEZTaVJRP0JOUWFROklITFNJcVFMUzs8ST87PD07QEBXPDw/SDczQ0IxNTo5My01OjopLTMxLS02KSgrLSw0MiMyKScsJS47LiYxLjAtMTQlLDBMZzo0OF89YWQ/RjFDUFtbKkhNOVVBNJGPsqCkpqykp6Ssp7SysaqksaiquL7BvK+ouaqmrrDJx8nRw7y/vri+v7zJu8C4sK+0sbq7t8Cys7usuKyitKenrLK2ubOnqLy1rra9sL2mrKy1q62cqa+jn6SrqqecnqqypLOomqqnqqSpnaOpp6m9q7Svrp2ppKCunJuzo5WknKWln6SbmqmrpZ6bqqGbkpyhpZ2Yl6mokpiak5CKgo+Ffo+Cf4iej4V+fYuGkI2PhH+SmpOFk6GMk5GLkZqRlYaJfn9ye3l9fGh3fHp1cHB9aIV4hIhkYWhjcoV6bWZ4XV5WQld6bVRhUFJYS0tOcXVdSFpbZ1lFVWZQRD5KTkRDQTlIR0tTP2phSlE4PUg8PDw+Ojw/VDY6P0M0NUg+Mjs1OTAyNzw1KC41Ly0xMSYvPktIMCUaOTAlLCwwOS8sLCs2JzE3Iy0wR2pJMTRYPWZjQko3R1NgVSo9OkRYPyqPlLGZn6CppaWhq6W3srKmqbGnrLjBvbWwo7msqKixw8nJzcG2vb+1t7+5yLbDtbOxtbG9t7m9ta25tb6tobOnqquwtbi0q5+9vKmzwLO7oK+ztamrnq2wo5ykqKqjnpylsKawoJ+rqaiiqpukqKCtu6eusK6gq6Okrp6eraaXn5uho5yfnJqjqqOamqSklpeUn6KWm5emq4uekZCRjIKKgICPgHualY2Ie36LhY6Ni4qDkZeQhpSjiZGRh5CZj5OAiHx5bH12eHhje3pxcHFyeGiAdGqDZ2RoYW5zjm1haXBgcEFceGxVXk9RUUpKTVRZV01dXmxXRFhgT15QSE1ERjs3SEVLTzxyaEtLOUFFOzs9PTs7PUo0OUI8MztHPDQ/MTgtNzg7MigwOS8sNS4uPS0qSz4qHTQ5JicuMzQuMCsvNCYsOiQ0MUJoWTEzUz1lX0RMNktXZU8pOzJPWT0jk5msmZ+Yp6Sjn6ikuK+uo6+wqqu4wrqzrp+4r6uotLvIy8i/t8K+r7S9t8S2w7GuubGzwLS6vbepubi9q6S0qKmqsK65saqbu72ksMC1taGutrWmpqexs6CepKanoaWZn6yoqZ6gqq+noaaYo6igsLifo7GuoKuhrKScpqepmpqbn6OVnZ2anqmml5ugqJKZk5mek5mWoamQmomOkIZ9h3+Cjn18oY2MiHiCi4SJi4uFh5KZjomVnoiQlYKLl4yRfIV7c3B9cXN0YHl4aW9xcG9pfnFjemxpZWNgZoZ/X1pza3JMTH5oWFpNUExKSFBSUElOXF9uU0RYW1JnT0hLRUY1NkhCTEk1WmVKQDZFQjk6Pj0+OjpDNTk+OjNARjwyQDIzLzo7ODMmMjwwLDg1QiopLUMqLDQ7Tk5AOzczLS4rLTcqKjwlNTM9ZmQyNE0/ZV1GTz1SWmdIKj4vWVg1KJedppmdlq2goKGkobersaSztKqoucW2s66gt6yurbC1xsjBt7/BubC0vLe/u76vq72vtL+wvMK4qbu6t6eotaioq7Css7Cnmr63pa28trCesLewqKWnr7GboKSgpKShl5yvpqGeoqevoqCik6Sko7ewoaaxqp6so6+YnKqlqZ6Ymp6lk5udmp2mqpqcnKWWlZeVnY6Ul6OooZCJi4+EeoV+hIp6jpeKjYZ4gYaDiIuNhY2Tl4yOlpiKj5Z+hpeLj3mAe3Byd29vdF95d2RsbGtpaINtZXJqa2VoXGNzf19abHZpWkh9XVtYT09KSEhSVUYyOl9ebFBEWFZZZU1JSUVFMDdGP0tCNklKSDs2Rjk0OT49PDk4QDg7ODo3QEk+ODw0LTM8PDc1KDU+MSw7QTEoKzY8IzhSPSoxMTM+RDUsLSc0Mis7KzEzOWNsODRHQWZbSFREVV1oRS47MWBULDKWo6GXlZypnaWho6G3qq+gurmmrL3Fs7Cvo7WvrK6vtMTEvbO/urews7m4uri6rq2/s7S4r7/BuKy9urSmorOrqKmzq66xo5zBtqaptrWqnrK7qaamqLCsmaKnnKSmlJihsqWZnqSpqZyioJOln6S5qKSnraaepaGok5+poaGgmZudoJKbnJegoqubm5mhlZKVlpqNlJOjp6SPiIqOhXmEfIWFfJyNiYqGeICDh4eHkYWVkpKMkJWUjY6Ue4OXjop3fntsdHJsbHNheHVoaGpnZW+EZ2hoZGZpal9oYmlmWmV6Y2FSc1RbW1NMSUdJT1NAIStqXmpMQ1ZVXmBLSUhFQy46QjxGPDZLUEQ4OkQzNTc9PTg5NT86OzQ+OEBMPT45Myk4Pjw6OSo2QDMuRTQoKyw+MC1OPy4rLTcsMTE5NSwmLjUtODA1NzZgdEIzQ0RnW0tXR1VgaEIzNzhjTicynqSjko6kppyenp6ktaynqrq3qKzDwbewrKK0raevr7fAwL2xwbexrrG2tri3tayqvLOvsrG9wLeuvLyxpZ+2rKaltKmrrqCgw6upprCzq6y0up2oqqqxppidqp6npZGZpq2imZ6kqqGbop2XoJyntqWvqq6goZ2doZWgpp+hoJmbmpySmp6Vpp6to5iXnpWUjpSYjI+YmqefkYiJioh4hXeCgoKch4uCiXt+hIeGhJCElZWPj4+RkZGNknuDlY2Gc359Znhva2psZ3Vza2NnZGN0f2FkZWZlaWpjaXBZXlhdbGRhTWhXWmBWSUdIS01SWD85YGxpR0JVU1xbSUhGRkEuPD85QTg5UkZANzpCMDM3PTc2OTI6PDk3OjlETT1CPDAqPEA7QTwtNUIzNz0rKywwQSpKSy4vKiszNzIyKDU3JCs3LjcyNjg1XXlOMj5IaVpMWkpWYmZBOjNBZUglNZukoJGMrqCZmKCWpbSxorG+t6Gxxry5sLGjtqurrqm5vby7rcCyr66ttq+zuLOnq7mwrq60tru2r7i9raaetaugobClq6+fpcOhs6Wvsa+3rbWdra+srqOZnKeqpZ+Vm6iloJmlo6mdmqCclJudrLCluaetoqGamp6ZnqOapZ2WnpiblJqhkqiVrKmblJyckoyVmY6UlJiopo2NiomPe4J0goGKmIWHfImIhISJjIiShJSckpKPkJGWjpB/gI2Ngm+Bf2Z5bWhramdxcmtcaGNhcn9gZGdqbWxnamhmbFxsbXVxYVRiaGNlWUlGTE1PWFFQVWFlgVRAVlNZVEZHRkVALzw9Nz82PEZOYTg6PzI0OUAzNzgyOD83PTg+RkpARDkyLT1BPUE9MDVAOUAxLSsuMzw7SzYvLissLTI0OjYjMyopNi41NTQ2NVp8XTE5S2pbTVtLWGRkQEExSWRCJzSTopuPjrGdm5OhmqmysJ+4wLahtMK8vbmxpravqa6lt7m3uKy7r62qq7eqtLitpbO1sa6psba2sbK1uqipn7apnp+qoqqtnKrBma6lr7C2taysnrGtr6qjm5yjrKiclZynpJ2aqaOllpqgnZGbo6uqqbqfpqSgmJqanqGPa6KVmJxxgpacpIB2kauonpaWoJGJl5mAl4ufj3iFk4yDbWl+d4NwbIaKhn2EioZvXWRgZ4SXhmuLkJSSdXeLhH6Dj39mh4BodWlmV1xpdG5OUGpkZnGCZl5kZm5saV5eX4mQhYdoT0tEOEVUZ15KR1BQVVVLR1Ngb3RlRVtRVVBGR0ZDPjE7PTY9NjwzZlw1Ojw3NTtENDg2MDpCNz86PkZMQ0IzNDM9QEBAPTI4QEU9MSwsMDg+RzcwMS4qLiovNjY4LCMxJzIxNDoyNzZYgWwxNk9rW05cS1tmYj5HMVBiPCsvjaSZh5Wxm5yToJuqraujvcWvqbfDuL28rae2sKarpLi0srOxua2qp6y0prC1o6e3trWop6y2s660rbOiqZ+0q56ipZynqJquvZWnpq+zt62tpKiuqqumoZ6coKinnJehpqacnKennpOfoJmQnqeqo7Svo6KjnJaYmJejiKGPkpqHoYeUnqF/pX+nq56Tk5yTiYRyeIyOg4egdoiMaZeIZn1zeKBviIeDfox8f6Ggn5l/e4iedIiOdpuKbIeBg21oZWN6bHFiVIZtY21pmHFYanBuhldeaVtraluIcG15codph4RaXkZOPkZeTUZSVldRUVJXVGdeTFlLUlJQRUdHPjw0OT05PDc7MDw8Nzk5OjY9RjU4NjA8Qjs8OT1GUUc9LjU8O0A9QD41OUdBODIqLzE8STkvMDEuKi8oLTQ1ODMlJjIxMTU+MTw4WIN1MjVSa1tOXExcZ189SzFWYDcvKIyml4SdrJ2ZmZ2fq6qoqr/Dr7K6vbfAvqqkt7GqrKazta6vs7arqaWxraW1s5ystba0paeos7Gtsqivn6qhs6mfpKOaoqOdr7aVpKamtrymrKepqqynpqKgmaCnpJmZpqOkmZykqpeUopyUk6KlpqC2pKOgo5iVk5iUnIiukJiUiamLl6OchbGApK2elJqelXmC1Kh/h5TAm8d5eLGlt5dkgMCcv3mEhHmPg3yQkJHKcZa8nMV7cranupB7gWyWsauweGhrWLGub2VpvJK8bmh6bXGP2H5TamO2sn+AcZR1mqGqkFdPV2FPVk5GVFtYUVBTi1xXW1BAXEVRTkRGSTw8NTc9Ozo5Oi49Ozg3ODs5PkY2Ojc0PkA+Njk/RVJJOi41PjtCPD9BODpKPjUyKjIyQkUvLjMyLisvKS0vMTg2LSAvNDE2QTE9OleDdzIxVGtcT1tNXmdcPkwxW1w0MSGOppOBp6qfl52dpa2yqbHCvbK1wLW3vsKrprStramor7Sqr7azqKemtaWnuK6csrG1qqWkp7KurbGmqp6npLKkoaGfl5ygoLCtlZ6jn7S5oqmooa2upKKem5qiqaCYm6ihn5ieqKeRnKeblJ2hpqKgsKOen6OWlpKYkpmFsGtqio2qfmeEloetZXGenZWappVxrqGkfne6fGuhj3axX2q0W6WAZZyRYGaBemZ/anhqqWW+cmemjHaxanyxeHSSk2NtbadtW4SgRWlnh5ZFdZxgfWZ7o6eCWV+Lq2mAlHh6aqc3Sq9bV1RsY1pLT1dfXFdWO06IT1dWL0lUU0pDRUY9PzQ2Pzs4OjkwPTg5OTk6PTxEODs6Nj1BQDY8QEhRRzkwNzxBQz5ARDhARz0xMy0zM0UzLi41My8rLyguMC46Ni8nJDIwM0IvPTtVgnYyLVZqXE9ZTF9nWTpNNV9ZMzEbkqKVgq2npZ+jpKqxt620vb6wt8WyuLrCp6mwrK+pqbGupLC6sKSkrrOjqbmpnrOzsKOloKqtsKyvpqefo6KxnKOcmJWYnJ2up5eboZ+0sqGqm6GtraCempegoqqdmZ6koZyaoaekkJ2jmpegn6ufpaagmp+hlZWRlpGahbWbtXiFqZm1mXeHs5u3f5OWl6mVfmuBpnqBhYeSlJJ3q2dqsVuse46HlHSIcI6GgH+IkJd4g4KLl4yDoI+FsHZ3n3Framx8i06kWEhjY5l+Y2imYHlydVKThl5QqW1jcX2GgGKdLlGibltUa2dgTEtcZFhcWkI+sHhXWEEjTWhGQ0RBQEExOT44ODo4NDs6OTw5OkE6RTo6OzY6Q0I4PT9LTkg6NTpBRkJAQUQ8RkQ7MDIwMTtGLDAuODQwLC4oLzIsPjgzMR8vMi1EMTw8U31uMytYalxPWE1fZ1c3SjlhVTUwHJaflIizpqairqmns6yqu7bCsLzCrbi3waqsra6vpq6yqaGvvKqhp7Wto6u1pKazs6ejop2nqrKosKelnqCfsJegmpWWl5ifrqOamqSotK6hqY+pqKmbnpWYoKWpmp+do5+coKOlo5WbnpianaKqnKWam5uioJaTkZOTnYPVk5m5cLDCfsaGfNaUm7t8mpalkI2bjKR6jYejgqWCeqx5j51Vr3uJfp9quVq5d4aDfaaCk3yYeqp5jZ2Pe7FujoR0kLuFb5RPr6fFilGgemNgqmJzcodsl4dfU7W0yIaAiXxjpDNCnXZdUWpoZFBAWGZaZGFKSE1sS1pTT1lmWkNDP0U/MDw8NTk7NzQ8Ozg9OjxDOkY6Oz42OkBDOzZAT0xIPDk7REhDQkNEPEVGODEyMTFEQi4vMDQ4MystKC4zMjM5NzEjJTUqPjM9PVF3ajYqWWlbS1xQX2ZUN0c6YVE4MiWcoZOYsaiopbOqpbSopby3wbC6wLG1tbyztqexsaOxs6afr7aom6i6rqKvsaCztLCgpJ6ep6mwqbSppZydnquYmZiXl5aXoquempeorbCoo5+OrKKnlp6XnKGmopiioaKhmqKip5ueoJ6VmZqmoJynlZubn6CYkJKVkZ2Ism5otXGriHCOpnK0c3K2e5qYpI2Pm42ifpCgpX6wdoOR0tF1W658hn+kb5uqpmuGhX2tfZeZj3uxc5OdjnizZZZ0hZ5unmaUUsiLWsJcn3liX61gd3OGYpeIXlnKnW+/gXVNS7VTVcZkVFFqY2VYQU9qX2xpUFVGSTk9V1JbV1hIQz9KPDI/OzU9PDQ2Pjs3Pjw9QztHOTtANzs+RDsuQ1JKRz4/PElKRkNFRD5JSToxNzQ2QD4vLjI0MjUyLSkuMjYsNzQyJh82MDs1Oj1QcWg5J1dpXEJOVF9lUDVHPWFNNjIvop2RpK+spKq7raa0pai2u7yyu7+3trS7u7OltbSisrKjoKyvpJimuq6ksbCctLipoKadoaqlsqisqqWanZqpn5aVmJmTk6OpoJeTpquwpaKWkqyfpZKUoZylp6CVm6anoZqjn62aoJ6ekJabop6cpZSclZminpWYlpKbhax7d6h2o4+Lh6lvrYqDqIOZmaKKkpmLon6SmImuhX+Cs1xys1KufoOCpH9x1313hH6PnYaZmnevhoqRnId3tGGaZZqCgZVsklqwWEuadZh5ZmCtXnd3h2eYiGpdr3eVno94bDV5yK6yX0JUb15nYEVPa19wbVZVTS9lY2lTWVE7QURATDo1PzkxPTwxNj85OEA9OkM6Rzs8Pzo+PkU5LUVVSkVAQzpNS0pCSEc+R0s5Njw0Njo+LzA0MzMzLjIuLjE4Ki4zMiUhMDM3Njc9UGtlPiZWZ1xAPVZfY042R0NgSTo4OJ+dlKC4sJi0wa2osqeqsrq4tLi/uriztr21pbi0oLWtn6Cpq5+Vp7asqLCxq620pJupoKCoorWnpqqjmZ6VpaKUlJyZk5ajppuTkKesr6WhlZipn6KPkaKaqaahlZqmqZ6dpJ6snaCdoI2UnpueoJiYm5WXoaCUmJGnnYapfX2leaGPkIOqcK2MgqeGlqChipeXiKOBkIeUqnyAi515b7FaqIOCiKB5dNh/dod0p4GOm42SpHyWkJ+Ee7JenGSgfYKUbJJcq1tak3+Rf2hnqmRze4FrmIdxXaxaiaCOa25lT0pDoVxaTXRdYmZNWmFfc3RfSlU1SpqSWUhFPUhGQUwzNUE4Ljs+MDVBNzhAPDY9PEY/Ojw2Pz1CNy5IVkpFQEg2S0lOQElLQEVOOjpANC47PjAwMjE1NCsqMDUvNywmMjEoJCQ2NjcxPFBlZUEmVWZbPzFVX2JMN0ZJX0MxPjihnJmZvqyYtMKuq62pprSwuLG1v7q6s7G3vKq7taCxpZ6lp6eek6qxqa+qtayqrqGYoaCmpKS6oqOroZebkaKglZSfmpSZn6CQjYypsK+mnZeap6afjZKkmKirqJSXqqifn6CjraOgnaGNlKGYn6CSnJeclZ2hlZePq5uPrm1ytHSpjHeKpnO0eXSzgJKko5KcjImkh452uG+Me4uia2u2WqGGZZeXaaCip22UcrR0k5h/smqGkoita3WzYZ1mom6GkmqXXK1gTaF8h5FSc6NseX9+bpiGb1yvVjycd2ZUb24uW6dPYlNrZWJsWmJcYHF8Y1NZUD4+bW8zQkJAP0w5ITdANi47QDM3QzU4Pz8zOzxDREJKRk1JRjYySlRLRUJKNklKUD9IT0NGUD08RTUwOzwwMDAvNzUsKyw0MjYvIzAwLCwdMjg5LzlOYGVEJ1VkWT4vVV9hTDVGTV44MUI5pZqbnbuinLLArq2rq6e3qbivtcC1vLGvubirwbeqq6Gcp6SinZKrqqe1o7Korqqhl5yooKSruZ2jrZyWmY+lo5aNnaGcmZ2fkZOVq7avp5mUm6ypl4yTppqlraSSl6uypKCeqKuwmaGij5iil6CblpuXoZOcqZyUkauZh9SSmrt0scSAw4Z91ZacuHiIkZeMl4mMp4d5o7Z1fXd2woKasmCDunnAfHW4YrWBjIepfZaBrKlxe391vIinoGmdYaaOr6F+jHSHq32+bnO8dLKDdXiAim6aiHBtjaR0vV13fVthebxqWlZbaXleaWBkZmJteG9ZW1lDQUByP0NGKzVIIic7PzEwPD83OkI5OT1DNDxATlpeYGBfX19aUFBSS0VGSjRITFJASk5FRk9CPEU4ND05MDIwLjg3LSouLzE4MCItMSwzHiw8OjA4TFhhRidUY1g8L1ReYEs1O0xbLTdAOaaZnqK8opexw7Ctqaqssae4r7bEsbuzrruwrsGyrKWjnqShnJuQqqSqsqS1p62kn5aaqpmmrLmdo66ZlaGQpqCTjZyjnpiempCWkq+5sKuVl6Onp5SRlqWdpK2ekaCoq6Ccn6mksp6ipI6moZShmZyXlqSYj7CgkpWqnoWQmbWAkZGNuJV4gpObtXdubG5zbnmPhI6Jc57Bu7yZeoGyqHCAdJG5g3yGhouHjXuKho2XfKS7ub2cdXmzo3R2l3V0sHWYnmaGaY22dHJwd7aMXoB6fYlng3lteWKLrHB1hX9YW6dqRGRaVGZfY11iUGdmcW11Qk1QTEQ7Wkw+SjM8MCA4PjsuMz1BOTk/PTs8QzZCVFlaWltbWlteYGJgXVNHR0g0RElUQUtOR0VPRj9HPDc/NzA3MC85Oi4sLy0qOC8lJjIoNCQoPjcvN0xUX0cnU2JWOCpPXV09KztWVic9OzymnaChv6aWs8O0rKqnrKupu66wxq+1tK+4p7W4raqjoqafoJ2Zk6ykraqmtaion5uWoKOerKS+pqGqmJWckaKbko+hqKKTnpeSmJSytbatmJ2kpKKLkpKmnKWrnJappaadm6Kpp6ajqKCRrJ6Xo56Xl5idno+wqZScp6KOan5pnKd4iXN+mo51emWHe72+wLpukoNxlIZfcmpaXZqJYWSHjpVrYICVY22bdmKUa3+alZRlXmBjcZuJaHKMfYaUZmp+cXR5fXxiW3d0gWhQXG6EfXuLalhseYJySUpvhXBNdE1FV1xmYUxbV2ZjXk9abXZqclJPREVOO0hJPE0/MiwyQT84LzU/Qzw5O0A7PUM+UlZWV1laW1tcXWBhYWFgXFVHNURGVUVKT0hGUElJSDs4PTUxOi4wOzouMC03Nj01JiIvKjIsJTs4LTdJUl9JJ1NgVjQpUF5MKDM+W08nPzI+qJ+oocGjmrS6tqOspa6nqLWyrMissLSstaO+sbKnoKOpnaObmpmsp66kpbWqpZuYlaKbpq2pv6ipppaUm5WgmpOYpamokZ6Qj5icsLK/rJunnaehiZORqpuppJybrKCjmpujp6yin6qhma+alaaflpSdn52XsKWZoqiZnJGenKOkmaejmpyam5qQloJobnxxdpGXlJGEibSpjYWYlY6KjJiXh5SVioOSkpCJjZGUmZOYl5qgoZqblKCdjoJ6pIVsaXyQfIB0iYqBcYJ4eXZ2ioB7iWpzgXSDdWR3fXZrcHptYGNbb2hNWFhlal9XWXB6b25mU09GUzlPWk5STygrOkpCNjM1PUBBOTpDPjxFTlNTVFZXWFpaXF1gYmJhX15eW1RLQ1NHS05ER1BMT0k8OjszODksMjs4MjApNklSTzgiKSsvMiM0Oyo3Rk9bSidSXlMxMFReOis9OF1LLDwtQLKgs6G/oqSxsregqaWzp6WwtarJq62xprWmwKi0oZ6lpZyklpWgq6eso6O3rKCZlpagl62qpsGfrKSWkpyXnpiTlKKfnqOnkpGZqKeyw6+Zq52rno+Wlqmeq5yeoK2YoZudoqWvpqGkp56smJemnZmaoZ6enLCgnaKnlpiTmZSgopajn5egjpaUi4qNj5atj3uVm4KSgYmpqIWAmJaKhI6fiHuEkIaFmZCHhomVjpuXjZCYnqOWmZKQnY1+jWWhs66FiYR2eo+KfXZ5em9neZCBgIlrdYF5iHJodH96doOIgmt0Y3hmX2hkY2Rmalhre3FqalxSTFBEX1VGQD8/LDRARjs0NTs+QTs8Pz4+SE5OT1BTVVZWWFpcX2FjYV9eXV1eXVhWSktMQklPTVJKOzw6Nzg2LzI5NjQuKCYkLTEuLikrKjclKzwoNkNNTEQvVF1RMDVNWzE3RTRcRzU8LEC0oLmvvq2rrrKyoKqmsq2irLOwxbCqrKOzr72ktJygp6KhnZmXqKappqSms7WelZSemZmvpq6+oKujkZGempmUkZWhnJepnYWeqayis8i0n6mkqpaWmJqnnqmcoKSrlJ6fnqCqrqmloqqhrJufoKCYpZ6cnpyvpJmfqJOYl52SpZqYqZ6al2aDknxlfo6aj2N4jWxoa3qQo6trZJmYfmeFimVlaWh6jaGOa2eMl5Gid2tqi5iin5hzbG56hI2FeVhlXYWBXmuKioF2W2hzd3eRgIeCbniCeIBzbXmEdHeIiY+De2iEWF1qc2Rdc4hpanxxbGNdUU5XSWRYQEo0PkY3P0ZENzE8PT9BQzs7REdISElMTlBSUlRXW15gYWFgXV1dXV5fXVpVT0RIT0tTTj0+PT02NTM1NTU0KiYmJSwqJS4rKyc2KiQ7Jy9BSVtJLzdaTzYpRVkvRE8xWUM7Py49pZ+6vLmvq7Owq6Wora6wp66usL2xqaikrbCxoK2XoKSeoZqZpqucrKOmqKmzrp6Vo5Cir6a2uaWuo4+OmqGZk5KaoJmZppZ7payiqLPDuKWip6+fnpWeo5+knKSqqJKeoZ6gqq+pqqKpn6ebpp+noKyVoZulsKSYnKuWoZ6bk6WYnquZnn6+g4hytHKFnoataHi5xLhxkqGje6aYmXOqgnzLwMC7cYuih4OefJWYiJ7AvYKWnZ2NnMHBe4F6kYyawr99a6Wxb4yBb8p6f5t4kYOOgHZ5gX95cXp/h3B4hYyTeWx1kWJlXnhkX2WBYl50aG1kYlhMVklRWkhPRDJJRT9EQj4vPD8+QEE6OERDQkNFSElLTU5QU1ZZXl9fYF9eXl5eX19fXVxTTVBHVU5BPz89NjQ2ODI3NiomJSMpKiYuKyopMTAfOSojPkhbTCojQ1AvI0ZbM1BZL1VBQjsvOJajuMO1sK/AqamUo6+psK+tprK1r6umpqaxq6CrmJuioJybqqeinauipamlpLSknaOTpq6suLSnr6KSkZmdpZKRoKGYnKCdh6arpKutv8CxoaquqpaSn52imaKkqqOToKGenayuqaulo6KloKSlnK2pkaSbqK6qnJ2qnKyilpellqGjmJx/zpR5eqWCepWWm1+tj16Op4ChoHynlZt0q4OAr15kjal6p4eFn3SXkoizY4KrhqCNjbJqhK50fJaHuGGCrVmjzW6PdXvbe3+ZcX6IknV/ZXuIdnZrfYhufoWQkn5sgI1fcGpvZmBfeGRccWhqY2ZgUlRSV11KT0M1QUhFRDg+NjtAP0E7PThAPj8/QkRERklKTE5QUk9TXF5fX15dXV9gYF9fXVpXT1VKPT8+PDU1NzcxNjQoJyQhJywmJi8oJiszHTYwJDc7U0wrLS5KMCc7XDpMLSFQQEY0LjGtwsDAtbSwt5iekaSqqa20q6ayrK2spKymsKqgp5uappicorCfoJ+op6OmoZ+wrJuelqaurbGrqKyglJKbn6WTj56ll52oo56upKuwqL/Gs6ipsa6Wk5ycopegqaqflaGenZ2ur6eqqJumpqOgqpKts5amo6uqnqOnpqGwoZKap5qhm5SUkZegcIWMl3WEqIdxsHydcqx+oZ+BpY+ed6uCfa1/nHKtfquHhp92mJJ6fJd+qoihi5GLnH6re4iSjqCAeq1WnMR6j2+SwX2BlW11cIxtZnZlhm9hd25yboiKkY+DbZCOZG5zdW9gZm1kX25paW5mY1dUXGFaUlJDOElJQEQ8PjxARURDRUE9PDw8PkBAQUJFRkdFQENJU1dZWlxdXl5cXl9hX15eXVtaUkM+OzkxNDc4NDUyJiMfHCAxJyAxJx8nNB41LSY3PldKLTwoPTEpM1ZARiEcRzpDMS4rr9TGx7K0n52jjqOjoq2utq+psKepqqiuq6unoqOdmaKVn6arn6Kln6ioop+esK2Ym5aop6+tqKepnpeVmqSikpShrZudp6OurKOstam5zbKtpq6sl5WbnKKZn66snZahmZ6fqbGpqaiaqqijoaubr7GiqKyuppmmq6qqsaOTl6OlmpSShaRqpHWJeql0erJxgqWJmIxwiKCah6RfYFKrhH+ugpt1roKnhoafepiWhXtmgKOJpJiGgaN9qX6AlIauXnyoVZ2ikoF6op+Ae8OvxYxzr7OzuXFiqa/CdWiMi5ePgWyZkW5teHd3bmxmZWRxcGZ7aWNcV19pWFhUTExRTENDQUI7Q0BAQkk8PTo5Ojw9Pj4/QT04NjtETFBSVFZYW15eXVxeYGFgX15dXF1bU0lCNjc5OTY2NCwmJCIgKCciKy0iJC4hMy0mQERXSCxHKzU2KjFQS0wjIEE5RDQsJ8LJ1dbAoZmrqKGvop+wtbCvqayjqKaqq6uppKagm6WfnaWnpqOcrJqiq6Gkn6+jnpuTqqS2sK6gqZudl5WnpJGboqifoKacsKajqLGstsiytaqsqpWRnJ2imZ+ls52aoZScn6arq6KtmauooaGporOtoqqzsqKbqqivr7ajk5akp5ibkXyqbJ6Eh3WreXywboKki4iflpWflYHSt7S4yYCBsl5flKmDpIeHoHqYlZl4qslzmaOUp6mQkpuMfpqJmsbGd2WhgqVzgZ+Ogn2vXm+1Y7F1S6OGbadHgpNjjo+dkntwlpF9b3p0fHptXGZqcnFmgWleYVhjbVxeWUlNTUtFREFCPkE8Qj9KOzc5Nzk5Ojs7OzMuNjxBRklMTU9RU1daW1tbXV5fXl9fXlxcXFxcWE1CNzU3ODUvKSglJiUkJiksNUZOT1BNRkxKVkYqTDAvPi00T1RRHRw7PEYyLCSopMHGua2osq6spaKdsrmsqqGmm6imqqypp6CmpZiqo5+uq52moKyan6mlnae1n6KXk6irtrKsm6acoJWQpq2RmJumoqCqp66ho6epsLTCsrOqraiUiZedpZuio6+ll6GVmZylpauarpysp6Weq6O3rKGxubCdm6+ns7SzpZWYqKSboI6CnU54moF/n3qEo3yCpISGpp6cnpOEuHt8ebmCfszFwrZ4mqCQi59+mpaXinWel4qkmKOofrCFnISeg6x9mZRhpWyjcI+FkIF9l4NyrGCkc3GAmmC8fVJVdY+Ro5Z7fZGQiHN6coR+cFtsbndyaoFuWmNfaG5iZF1LTFFUQUhIRkk6OUs+QjEwODg1Njg3Ny0qNT09P0JER0lMTlBUVlhZWltcX19eXV9fXFpaWllVU09IQDc3Mi4sKi4rKicmP1FUVldXV1lYWFdVT1VGPEUyOlBbVBwbNj9ILC0gjIeZqaykq7mrr6CboayztKafoJWlrq6uqaadpqaao6ehsq6hqaayoJmopJSitaKjlZehqbW5pJujnaOTkKKxmZ2bpqShoq+tnaSoorWxw7Gtqq2qkYeRnKedo6SdpZeemJmZpaOoma2hrKSll6+lvK2it7eunZ61srmys6eZnrCipJ6Gj9G1w7d5h46FkZOPgKZ4lKJ3jKCShKWCi3GrhoS0bnJpmaOclYmffJiZhoePcq6CpZuijaaLk52JlJCabXCyXKVzk3qcbJl/e5l9bqlhonFxf59ic7K4aHiPk6WYfYuLkYp3fHiNgWxod2l4c25/dFxkZG5tZWhgSlpXWDxHR0BUM0BGPjwqKDYzLjAxMykmNDo7PD0/QENFSUtOUFJUVldXWV1fX15eYGBdWltaWFVSUlFGOjIyMzAvKysoQFFSVFVUU1RWV1dYWFdVVVZUUU9RW1UlITJBSCQpJZJzjIquv7+7u7Wel6ikrbaho5mVo6mnrqmrmaWhn6WgoLWnoqmnsKOUq6OOpK2jnZCamqq0tKSdppypkpSXrqCfnaWjnKectZqgqqO2q8Kwqaupoo2Ej5yioaajlpmanJibmKWkppiqpqyhpJusp76slb6wrZ+jsLO6rLSnm6mypaiYeqiQfXywd4qApKWInG2yb6CHrXyhj4OolpmArImEroWflKigopaFn4CZlYB7kn2rgJ2aloqqeJ2gj4iTkoB5r12jgXymp2SdgHyXdGuvXaVrcYWZXWBbjKBulZGmmYKTi5WKeXmCln9qbH5ifXRuf3lgZmVxb2hnaENZYFs9SlQyVDhCQkM3JCQzKycnMywgLzY2NzQzNjpAQ0ZJS01OUVNTU1ZaXV9hYGFhYV5dW1pYU1BPTkk3MDUyLiosQVRWVlZUVFVVVVVUVFVUU1NWV1dYVlVVUUhGSUojKCi8kpqEqcbDtsG0n5utoK64paSOm6SjoK+uqZ+jnp2tmJ65oKKroK+qmq2hkKqppJaJmpCusKymn6ibrZiYj62ioZ6loZqlnK2Yn6imtqi/r6WppJ+MgI6bm6CmnpKUmZqUmpqko6OZqKuroqOeqai+pJfDrKqjoqyzuqyvp6G0sKmrmXavfpCKnIWHfLqtiZhksIxlla19oI+Dp5aagayKhLCFpZmkoaKQhKBbbGqBs2B/rXt7goGxbGdumZeLiLFbfbRbpINryKJln4F7vFl2tVqyfVKvgHqsWIChbZeOqJqJlo+UlXl3jZt9Y3J9YYN4c4B8YWlmcG1mZWVPVWNbQVRePUkoPjk9NCEiLCUfMi4gKjEvMDQ1Nzk6PEFDRkhKTE5QUFJUV1peYGBgYWJeX1xbWFVQTUpHQzU1My4vQFVZWFdYV1dYV1dYV1ZXV1dXWFdXWFlaWltcWFdXR0I70p+zsre9u7TBs6Ocraaltqmhi5mgn52zsqieop+dtJigs6iqq56wrZ6sm5WuqaKOiJuOr62opqOoma6Tmo+pmqGepZ+Zo6OlmZ6iqbKou6+lqJ6dj3yLm5ahoJqQkZqbkZmXp56hmKitpqSkoqSpu56gxqelqaKrtLatrqegva6trZaBqZKjro6bgIakl5iPgYC4w7qDjpyThKeXnIKsioKviKabmqWqkX7VvcKqYqO/vXx+o4KD17q4tYWTkoKevb6EaqOBb6uEbpx/erKxx4Nqq7C9rXh3or67dICVjaabjpmPlZt4gI+ZeWJ8emOMZ3iBe2BrZWtqYlBiW1NqXEBUYUJNKTw6NC8eHyQeJTIgHSQoMDQ5NjY3ODs+QURGR0pLTU5OUVRXXWFcX19hXmBbXFlUUU1JQz48QT81PVNZWVhZWVpZWlpZWFdXWFlaWllZWFlbW11dXFpWWFRXWryVtLSxv7myvbOina6mprOmnoyYpb+qt7CnoL+mprGbnrGcuaiera+lp5WUr6yXjIOaka+mo6yhpZyqoJiLo5KmnqecmqGoopmeoKutqbmuqKSbl5N7h5mSppuTj5GYmI+Yk6iZn5ipqJ+ppqGiqrueqcWjoK+jq7O1q7CqobyosLCadHWqpLeFZYmfb2esj4qPbW93pJCZn4F1r5mVcJCMcZWno5uYrqRybW1tZYp3bm2CmXGAeWlwaWeJlZWXcWhphYZncIZkXoljanBZXWd+d6ZgYnGOkm9mZICNko6il5aXj5Sde4aNk3RlhndojGp4fnlkbGNmbGJLZFhKa1k6UGVFUSdLOSsjHCAbIywpGBsYLTIuNTo0NTc6PD9BQkRFSEtMTU9RU1ZcV1pcYF9hXV1bVFBMSEQ9OkFCN01YWVpZWVpZWFhZWFdXVldZXV5eXVxcXF1eXV5dW1tVV16olK2zqrq5srOqqaKun6SzqpiSvbHDyL21qZ7Aq6yjoKarn7qjpK2srKaOlq2qj4yFlZetn6Wqop+kpKCRjKWTp5momZajqqCWnKWmp6+5q6yam5OSe4SXjaaYjpGQmJSNl5WnlJ6XqKKar6adoqy5n7DBqKSzpqyxsquurKi5pK+4loqhqKW2nImWoZeGqZqQlJ2TqrOZm6OsobOXoqCeoKKcoKShlaumjJKTjIeSnJyUkJmTmJCOlYWApJqXlY2Lk5KKj4aEfWeLgHSDdnSHjHGnbXyVkZSTgYGPj4+OnZOglZaVn4GGk4twZ452b4p3dnx6aWxkZG9jVWBZQGlaR2JgTlkqRT0rJiI3NDAuHxwhJTIoKjc5OTQ2OTs+P0FCREZKS0tNUFBRV1VWWV5fYWNdXlVRSkVDPjk9QEFTWFtcWVdYWFhYWFlYWFpbW1xeX19gXl5eX19gYGBfWVlgpZapqqW1uK+uorCkraChtrGQjqvEu8S6t6qhpZ2bpp2wqKO2p52ptKankZiso4uIiY+cp5aspKGap56fk5Wjl6maqJmUp6GkkJqnmaG1uqirmJqQjXyBlIyhlIqUkZWQj5OXpY+emaifm7Wjnaart6iuwq6jt6avr7Ctqqq0uqKvvZmSpqOmtaKRnaaejamfjZKfo6yvmqGjsamwmKShnKSqnp2dnJernJKZoZuTkJaqmY2YmJaQlp6RiKCdlJSFkoyQjJSLgH5mjId1h3Z5iINznGqHkZSUkYp9jJaSkpiSoJGblZ+ChpeFeHGUcniJf3F7fmpuZF9waWBbYFltYlBgZFBaOkdGRT0zPT03LiomKykmHSY0MDY2NTg6PT0/QUFDSEpHSktMTVNTU1VaYGBpYGVWUEpBQ0I7OUVNVlxeXltaXFtbW1xdXV9eXV5fYGFhYmFhYWBiYmJkYlxbY5iVpKejsLOsrqOpp62gqLWqkZCco7K6rquroaKZep2isKSlsamWm7imo5SZqZyOhoqJm6KQrp6klqigoZKXmZyui6qWj6iZqIyYqI+eubakpZibjYl5gZSMm5OKlZGUkI2RlqGMnZ6onp63o3+Dr7WisK90pL6jsqB4eqCrs7yVdq6kn4qAqn5kW2F2n46knYOXfm6Ts5yjqK6ro2WeoJNzeZmWcICYqJdsf6KniWWcpZuQl5iWi5GbkIWdmpCUgpKHjo6SiYV3a4+HdodxfIaBgGFpiIuVk4tbdpWRZ2iPjXF6o5eWZHiYhoB2l2iDiYJueX9rcGVfdm9ra2hcZmNiYm9SWz5NTk5SRz1AVEI5MS4eHyY0OjMxNjY3ODw7PkBBQkZIQkdGSUtMVFVVWVxfaGZnV1FKPERHPDlWUltgYWJgXmBfYGFhX1xdX19fYWFiY2RhYmFhZWRjaGReXWaclqajobCxrKuppamto6etpZKWqrSusaWZqaarlnOLnK+fqKunk5a4oKCPnKSdkX6IiJqejauapJWnop6Ol5KehXWukImmmqiRlqOIm7q0qKCZmIuJdXaTjpaTipORkJSMj5KfjZqfppmbspaAjJu1nbSMko+9p6F+p6J6o6+4gY6Op5+Ei4WPsKmvjImWopl5gYushpydoqiqqIiVhph3pZt6h5uBl6aCgXucsXqKhZ+XmZSYloGQlpaEmZpieYeQhI6PkouDbnGQiHqBcYCBhn+GdIeFlpJ4lmiTdKCadHyZg56bhZh+kYmBgpdpjYyEanh7cXBnZHdtaWxqW2VqaWVyW15IU0xRQEU1LVlUVDYpITA5PT42NDM1Njg7Oj0+Pj9ESUBJRUpLR1JYWlhbYWFoZllRSDlESzw+YlZeYmRlZGBhYWBiYl9dYGFhYmJiY2ZnY2JhYGVkY2djYWFonZijn6aurquorKCosKenqqWZlK3GvLChlaWotJ2Pg5yrm6eioI2Qvp6ZjZ+aoJB9hY6Zl4irnaOWoKGSjZSJhoCRqI6Hopyjk5adhp+5sqedmpOPhXB1kIqVkIqUj4+bi4+RnpGWn6OVnayIn7SJtJqui8qIq66Jt4WNsIOxr4SpjaeYjZ18qI9ye3ebjqaWaJWkebSLn56nqZKZwoF/q4iYoXGegJqkfZeFlbGBoXygk5+PmJeAjpObiZiSi3yFk4aNlZOJg21zkYWAe3KGgYV9hXSFgpeBj8VmgKmHj6JqnoKfmIGZgIqLg4iYb42ShGd3dHt2Z2h1cGZna15ibmxmbFhmRlxQTDJFNDZNYGM2JjQ8REdEOjY0NjU4Ozg+PT0+Qkw/TklKTENQWl1cV2JeamxcUUU9S01ASmRYXWNmaGdiYmJiY2NgX2JhYmNjY2RpaWNiYmJlY2FmY2JiaZWXop+wqKmopaugpLmxqqummpSfoqSqopWjqbair3+gppylnp2JlL2Zk42gkZ2QeYOWlpGHq5mcm5qhhY+Md5ucj6CRiJ6km5WYl4aiuK2lmZuNjX9ibZCLk5CNj4yMl4uQkZ6Ok5+gmKGofqGnh62doJauj5+dnZGGgaCNq7CHpI2qmoyafqN2gJiTa4GrdE2reIeNnZGbqaiCqqt9g6F7eqdpnn+Sa2eXhpe2iJ59bWBjWIOXf4x7ZGeLc5l9eZZsXXyXbl9TcYVcYGx5g2BZZYJ9hIGYcaeqa4OjbnKlcJ+DnWdkn2xabIh6ZVlfgn5hV1BvdmVtdHFqam9eam9sa2hXaE5dV0U5QTRHQ15rNCtJQ1FNTj04NDg1OTs2QDs7PkJPPlFSTE1CSlxdX1deX2J2YE1EOk1PTVRiXFtmZmlpYmJkYWRkYmFiYGJkY2FiaWtkYmRkZ2RiZ2VhY2iYlp2guaGqo6askqK2vKuuopmXn6GlrKyfnK20oqeRoJ+fppyZjpi0mZCLnoyVi3WBlJGNiqaWlpienn+ThYaspIeckYqYqJeZmpGHpbCmopWZiImAaW6Ih4uOjomLjZKLkJGhjJOen5uipX+TgY+joZSgd5yWkKeDoaeAhqquhaV5i32Emn2icHOTh5Z7nox5bYebjJmQm6mbj4edfIKic3amZp5+d6RfmHp8knOibpi3tLp0koeBgLaoZIHGuHtwlbeMcYCbpGN0rKtgfWqds35ufYeDjoKLl3GAo2xzpHOeg36jXp2Zs5Zve5ees3RyW56ygmlib3N1cWhvWWtscnJlXGhdYktEPUQ1UUFZcTI8UkZfSlM9PDM5NTo6NkQ7O0BJUD9UTU5RQEVfXltaWGBgfGRJQzhMV1VWYmFaZWZra2JiZWFkY2BhYmBjY19gY2tuY2NkZGhkYmdmY2holJaVo7mZrJyToI6luLWuraCaopyjo6Ssm5qxrKuSl6CYoKSampSeq5uLiJJ4i4VwgJaNio+gkJOUnZd9kYmOqKGHmI+KkqOTm5qMi6iopJ6PloeEfmt7hn59j42Di5CQiY+Tn4KXnqCdoJ+LiXecmKKMoHKii4ipiJynkZeorH+ujH16oJl6o5N4gHOXiIycfZafhpuNmZumhqNkoXyJlpCbjWyeaJqNbpqZen+Kp31yZ3Oqg52Cc6pnlJpdm4V2hJ1oqmqBuGZcqXCBnGGVjF6ndnWJin+eaJp1h5OSmI5/nm6ZkGummVyofne7an2pWo6EXbNnXG1xeHdraVtwaXh4Yl5lV2JBUERPN1ZCUm00SlpaX05aREAxNTE7OzdIPzpDSFU/WFJZXT5EYl1WYFFhZH1pRUI5TlteWWRmWGZnbm1iYmVfYWFfX2BgZWNeYmRvcV9kZWVrZGNpaGdraZWciaq2m6iJY5WcrLqysKydppubp5+drZqdsKernZeimaGfmZaWoKOZhomNaYiAcXuXiIuWloSSlZiPeoqElqOdiZWQhoudkZybiY+oo6Cai5GKgIBpgYZ4f5aMe4iNjoeOlZp+lKOfoKKTmHJon4qgj4xwkoyCqYiZn6Opoah9sK2koriXdqOzoqN/iJR4nXqrmn6ijp2bl4iXcqF8hY2vtX1rmpGheH6YtKOjq6iEmHuafJyZfnOqWl1ve5eLeJ5iTX97e4VjephCTZ9ZompyfI5tgYmEmXWbeYeJsbN/f5qSpnR/nW1xfJRvmXJpo12VdkhlY2BzcHx9bmVga2h2e2JjYFFeVlxUVkBZRVFnRFJXW2JYX0lEPUI4QEI6SUU4TEVYQVZRW1ZERmFcWmBLYG1+ckVDPFVfYlplalZnaGxuYmZmXmFhXF1eYGhiX2VjdmxeZWdmbGRlbGhoa2mTnYGxrpmEU1+hp7S6s7OpmqKLm6mcm6iSoaujoKeOnp2cmpmVmKGdloeHiXeFgW55lYWQmot9kZKWiHKAiZKgnHKRkIGImJSfmoSOqJyalYqLinyEbISFcYGhjHiFjYiHkpiUfJOkoJ6jiK6GfbWEj56de6aWeqmClp2Qi6Gefadod21+mXOgc3F8nYWYb5OCrn2jg6aemoGjcF6pZ3WjY2+lYZzTkHx6mXhyc2OihY9+onKijnVrj7OLYIKYinOqsqi8f3eDbX+/pqq0XptvfnGXb4FzonJdo2d0pmFopm2b05h6gptud3mXa5t6dpdybKmlZ19keXB+hGtnZmNtdndmX2FSW2VRUWJJV0lUX1dTW2VqXGVRRUNLTEpLQkpEOFBAUU5XU1hPUlFgZWVpUmR4eXdJRkVjXWVaaGpTaWhqb2NqZ2BiX1xdXV9oYmFoZXtkXmRnZGtkamxmaGxomJt/sKxUXEt+qbCytbCzo5yYhZimoKCijaSon5eoiZmXmJOZk5Kgl42IhXtwfYRofY+Dk5qBd5GNjolwf4aPkpJsl5N8iJCRo5WDjqqalJKKhYl5hHaHgG6Bn4Z3gJKGiJmhlnmToqOaoImzoaK2i3qsp6SupXCpgJqQhYGckn2kgKKZhphynoSirK6Jl4uAjKSNloOuopR2tba1yaF0lIqAn2Gel6lteJaGn5p1oYd3oH2QloqBb0xmopJwmohzpHt5dGGDgmx+oGxyZGCccn90l2l7abO1tMamc5h+e51qm5qrdIKabXN3l2maeXSYcVBFfLNeanVqeIdmamdidHRwbVVdU1loUFJoSVVMWFJWXWdrblZnV01KQUpNSkhKTkFRSlBlY2ltZXRyc354e251iXt7VFBPbV1oW2tpUmpoaWxnbGZjZV9cXFxeaWJkaGt7X11kZ2NqZm5tZWlsZaKcia+nhWY/lKKzq6+vtaKikICXqKKho4ukpp2cpYGal5aNl5CQm5KNiIN5anmGZYOMfpageXWPiIyBaYSFkoOMhZ2NeoyKlKWSgpepl4yRi4CJeoB9i3lwkKGGeYCUh4mWn5R/lKWnnJaWhGdueJxsomR8caV3nJhwZ6eBl4x7pXqgloOXcp92gImUlo+5bpCKomJ9maKViG5yaaprdaBsbqZgm2mLkGiWh5qVdaKAfZpfi4WMdW+IYmihZZ5/aZt1cGRmiIJucqJaX1tkoW5eiYxve39zcmSlbniiZGenaJhyi5huoW9SiI9voF5kp1SLXVOYbW1yanGBbHBoa3hza29RV1ZWZllTbUlYT1xIWGloc2pZa1ZRUkVWXExYUmFVaGped3V6fHB8fHKCe39ydo2AhHZeUXNhZ2JwZ1BqaGhrbG5nZGdfXV1dYGpiaml2dV1cY2hjamlybGZrbWOdpZimemV0bYunrqWqsLGmn4uAlqqcnqSMoaGaoaGAlZiTjZqPi5eQjYp7hnGAiGiLi3yXmnN0in2Qe2WDh5WKipWZgnyIhZamj4Giq5CFkIqBin2AgI5zaY+lhH2Fk42ImJ+Nh5Kqpp6JpniWnH6liZaMspiekIOvl5+leJaIeql0pY+Emm6looyShIyDvG58pa+ChoWGk5acoH2menGolKCWZ55+b6tiloqVkneobKmigYl2h4J3q5GmiGuRsGt2s4ypbIuGbm2fnpKVYX6ri6p2gH+Np593n32FpJWdoGmah3WrZp6tjLZzd76MpJNZg6aNq2F1cXNve3RwYmp+bmhsUlVaVWBhXWtNXVJdSV1sbXZgW3FZW2BaZ3Nlbm9yY3F0YHd7fnlyeYNzg36Be3uMgYKAdmJ4ZGNuc2RSbGdob2xyaWZpYV9eXGFqYmxsem9cXGJpYm1pd21nbG5ilaaqnIGAnqSWqaqeqKeuo5mJgpeqmZ2jiZqlnKidhIuaj4WckYWSjYuNdIV6iINvjYR9lpN0dIZykoJtf4uSh4aTj317gYSXpI1/paWNgI2JhJR1g4eSb2yKqICCi5ONiJyeiYyTqqOgkIB1lZeIfoF5lK6jf4GbcY+GeJCMhYB7cqeMcX19epeWm4SOeHt+fYiUlZOKdpCZn6GEe32Ja4yFW3l5cnlwaG59kYlxf3SBj5STcYWDgWWNf1+BgIx3dXOUdW96b26HbYSGX3doeI5mgYKGjqqcfnR9l2qJiG9/dXyEdW1sZoxzeHuXd4Rbalh4j2htd3Fwb3d3b11shm1pZ1ZZX1dcZGtkVWFVXlFfcHd5a2p3ZWpqanV8cXF0c2FvdWJze4F4dXmCdX+Af4B4i4WDfXttf2xkeW5eV25naHVreGppaWRcYFpjaWVscHVuWltia2Rra3ltaGxvYY6Vuqmni6GimqakmaSdq6Kgg4OXq5GdoImappqomIKBm4t+lpSHjomIjXKCfI99fo+EepeOdHKDcJWFe32Si4aGkIV4foCGmKKMe6ehi4WPj4SVgoaOl3dyhKmFjZKcj4ienoeLmqegoKuDiY6Vmn5+iZatqI+Sp5B4cJ6Rg3uTb36phXB9lXFqb3yBn4t/ko6MaG1dg4uMnJufj3OVi4hxdGuCdnN/WXJuho+BfX6LaV1pY3qFg4iAX2l4e5t8g4yDdoGGg2l5i4drYXFzg3dgc4yCiZCnlYZmjY+DbnaLg2+EjHhuZGZjeYJ6lVpcaWZudlt6eXd0bXNygmZcbYpra2JZWV1aWGtxW15gWV5dZnN9e3NvdGNqaml7fHF6d3RkbXRobHx+dXl8e3p5f4B/b4aKhHt9c355c39pVFxxaWx2cHVna2dkXWFZamhranFybVdbZW5sZ3N5bmhqbWCMjKuxopCjoZqfnpiemamjoX2Dl6uMn5SHm6KQpJR/e5eEfJKZiImGhopyfYCLdoWLgYSWinFvgHKYhoR+koOEhoqBeoCDipqej4KmoId4jZeIlYuLnJeFg3qsgZCXmZOJnp2HiKGqn6Kio4yIk5uco5mWqqGnpqCSm4iXj3x5j46EqH5/kpGSk5ywpZqUnZCOspOYhKaMjJWboImQm4KJkYprfI52d2WChpCKfImdhIeLj4eIgISDkHd8enWaoomHi5+LhpV/foyBgHZxdIaFgHiIh4qRppGEho6Ig42QjHyGioeOgHVrgYN7eZlpcmhgc4pwfXp2dW93dIFcXm+HaG5fXlpbXFNncVVjW1thbGh0e3xybnBjamlof3tteH5xaG9wbGaBe3KBgHeAfX+Ee22CjIZ8enh8fnqDeE5kdmpzbnB7ZWtlYmJgW3NmcGZycWxVXWx0bWl5enBnaWtljYidup+WoqGYlZmYlJikoJ17f5mqjZ2NhZ+cip6WfHiUgnuOmYmGg4SGbXiBgHKAh36Ik4RtbH56l4aEg5B+gIaEhn2Hg4yanJKHqp6CcYqPhZKRi5yRfY16qYONkpeVjpuWhoabpqCimp2Gg5KZmZiQmqafpp2dkJeBkot3fYiOhaV7fI+QkYaYqaGck5yPjaqOkoCejYmTmp+Dj5d/h46Cb3iFcXRgfoOPhXSLl4CDjoKGhH6FhJRueXV1k6KLjYabhYWOdICKfX1yc3uJhHt5jI6Ek6ePhoSPgoOKiYl1hIeIintuan1/e21oa2xnXnl+Z3x7dnN1dXp2XGBwfW10YGJaXF5RZm1TZVpdYWtpdnl+cGtsY2tqZ4CAa3KAbGt0b3huhHluhoB2goB9hXZygo2Ifnt6fH97gopgaXtrdWhpg2VqY2BpW2N1aG9idW1sVGJxeWRwenpyZWptbYuKn7iaoaSfk5KWl4uan56denedpZCbiYaklIuYmXl5jYV8iZGDjIKBgm18f3hygIV9ipB9a2h9gZeIgYiOfH6GhId8j4CPmpqRiKecf3CLiouShqChioWMfKeRh4+Sl5OWkneNo6ChnZaaf4GQmZiTjJqioaOal5Gbf46FeYCEj4ehgH6MjY98l6SgoJKZkI+mjZCBm5GJk5ibfpKSfoeOgXV0gnB2YH2AjYVxipV8h4txjH6ChYWOaHhyeYyZkpCAmH6Ii3KCh3x9cXp8jIV7e5KNg5alk4uGkXyFhoeEdYGChod5ZHF6fnh5cGxqZl59cmh8dXVzfHN/al5gc3Zwd2RjWV5eUmpoVGRYXmFnanZ4gXFma2NsaGV/gGptfmhvcGp9d4V6a4uBcoGBfYF0doKNhn58en+BfX+PanKDbnNpYYhpbGJfcVV0b21uYHhobVdqdHZidXp7cWJrb3qJjZ+zkqWlnY6QmI+GnaCanHx1o6CNln+MooqImpZ4e4aHfoOJfoiCgH9wf3t0dYKFfomQeGdjfYaXioKKjXh9gIyDeZaAlJaVjZafmn1vi4GQk4alm4eMiYOllYSSipWXkpF2kZ2hoZiUmHp/jpiWjpaanKSemZOUm3qQhoN4hZeNnn6Bio6Mc5einaCSmI6PooyMg5eYg5OWmn+YjXyIjYF2cX1temSAfIqFcIaSf5CCa4eCgX+JhGV1b3yHk5iNfZR4jIl8gId9fHKAeYqHeYWRiouYopaChIx3iISCgXZ6gIiEdF93d3xzfXdma2RgfmlqdnNzdH1we2NjYHNtdXJtYVlgXltsZFJiV19gaGt1eYZwY2pjbGZofINraHRobG9of3yBeW2QhnGAgoJ/dHyDjIF/fnqCg358kG11iXR0bWWKbGphY3VWg2lxbmB4ZmxianZwZnl7eXFgcmyGhZCdrpimqJ6OjZeHhp+Tl5h8d6mciph5l5yLi5iQeHuAi318g3uAgoB4c3h6c32AhH+IioBkXn2LlYd+hId0fX6Kf32YhJaTloyioJd+cod7k5GKpo+MjoqSoJGDkY+Ul5GKgY+YoJqSkJJ0gI2Rk4mcnZ6mmJiNlZd0jo+KbIaYkJl6h4iQiW+XnZmik5SKjJ+MhoKSnH+TkpWHmYh7iYmBenF5anVse32LfW2FkYKTd2+Bg31+i4Bkcmp8gZeYhX+OdJGJg3mHfnZ4gX6HgX2EjoWNlKSQeYWDdImHfX9ydH+GgmxgenR5cHtvYW5iZHthbm92cnd3c3Nhdl9ua3Vub11bXl1eal1PXVdiYWhtc3qJa19qZWpjaHeHbWZsaGpsZ4B8endvkIdzgIOEfXSBhol6gn16gYR9fY5yeYt5eG5sh2toX2lyY4docW9mdmdtbGF6aGp8enhwYXdti4GZmqqgpKmdioqRhoqeipWXfXatmIyWfZ6TkZaTiHd9e4p8e4B2d3+AcHRzem+FfYGAiX17YVx+j5GGf4OEc3qAhnqPkYeRkZySpJuUgX2AfI2KkqSIjYqNl5qNhZGYk5WOiYmMk52TkIyNboSQjpGInpmhoJeWiZaSb4qahWeGmo+UeomFkIpwlpqToZKSiIuZjIKAkZ59kpCTjJmPe4mEh3RzdWtxbnV7inRuhpCNkXF0gHuBgoh8ZXFteX6alH2FiXSRi4F0iXlvgX6Bh32FjYqFjZaojXuIfX6LhXd9cG5/hIJiZ3dzdG56Yl5vYGp0XnBqenh4bHJwZXhdbWxzbXNYWl5fYWpaT1dYZGNncXF/h2ZdaWhmYmdxjW5kaWdlaWiAend1b46Fc4CBgnt1goiFeIR8d4OFeoCJd3+LfHtyeYNqa19waHR/a3FubXFnb2xle2Jtf3l2cWx3d4p/o5iiqKGnm4eMioGPnIaTnHSAqpSRjIagjJWTkH90e3aEd3h/cnN7hWtyb3ltiXaAgIZtcFtZfpGNiICAgHZ1gH9/oIaPipGcl6CTl3eJfoCMiJydiY+GkpeWhIiUmY+Wi4uNjo2dio6QhG6Ji4+RipyWoJuYlYWYiGuGpINnhp2KkX+LhIuBd5OYkZ2RkIiJlY5/fo+YfJGNj42akn2Kf4Jvdm9rbW9weoVpc4OOl4lwd4B0goiCeWZ0b3aBmo98iYV6lZJ6d4l0cIp8h417i4eEiY+co4h8hHeCi4B4eG5pf4F/XHFycW9vd1pecGBval5vaXx6cG1tam12YHBvanFtWVhhYWJtV1FTWWVmY3VwhIJiXWttZGJma5JtYGZmX2drgXVxcnCLgHR/goB4doCLgHmFf3eHhnaDhXyHjIB7dop/anFjfGOGfG9wbHRqaG9sdndfcX55e3R1dH+Cf6WVmq2fp5aFjYN/l5WDj551ip+TkoWKmoyVjYt6cnd0gnByhXNxdYhsb211bYh3g31/bG1VUYGrlIeCeIB2coJ5gqCBkYGTkpibkZp4kXqCjJKkmpOOiJWYkoOGlpmMk4uJj4+InoWQin1zi4WIj4icmZ6blpSAlH9php2IaIehiJKEkYOJcYORl46ajo+Mi4+Nd3uSkHuOjI2Rlo18iHyAa3ZqbWtrbHp+YXl9jpWBdnqBd4OMfHlndWx1h5aMf4iGe5SRcXqFcHiNe4uNe4l+g42Rnp6FfH14got9dnBoa4CBd152b21rcHJVXW5icWBfbW55cGdwZmdzdWhwa2F3ZV1WZWBgclNQTltmZV14cIh8X1xocmJiZWaRaV9oZFtncH5va3Fzin12fYWAdHV/jHl7hYB4iINzhoV+jIyDe3mVeGZyaoNgh35vb2t6YGludH90X3R9eIZ4dHKFfHmhkJqxnKaOg4p/g5qIgIuefoqZko6EiJeNjo6EdnR2c4Bwb4VzcHGDb2ppdm2Cbn18bXVzUk6C38mS1pN8cHSDdYOggpJ3lJCYm4+Ye5NyhZCfoZOTkIqSm5OFfpaViI2NiJGNiJyAjoF4eox+iIyJm5ucmpWTeY13aIqSiGyJpIWTiJeDhmOMkZiOlImWi42Ki3F7lIl7jYiKk5GKeoV7fmx7ZXJvamt5eVuAeY+NgHp9fn+Gjnp6aHRrdIuQioKGhX2WjGx+f2+BjX+NiH6EeoOQlpqbi3x3eIOPeHJsZXB/gmtodG9naHNsU15uZHBZX2txeGZramJmeHNvcGNfd2BgVmtfXnZQTkxgZmNdeXGKdFxbZXZgYWVljmNhZmFYaXNzbmtxdot8dHmGgXV2fotzf4Z/eol/comHgZGKiHx+mHZlc258ZYh/b3BsgFpsbnl5c2B2enuNdnJ3ind5n4ybr5ugkIKFd4iVf32JnIaEn5COhYyXhJOOh4F1d3B5cW6Eb21ufnJkZHhwfG16fWpobGOkmsHcru+hc2t1g3WEoYWRbpWPlJ+Um4GRcIWLo5eJjpWKkJ2VgoCVkIWJj4CSioqXf4d7dX+JeIaEjZual5mOkHaLd2+Iiox+i6SFkomdhYVei5SXio6IjouKhIlse5eCfYiFiZGPhnaFfX1rfWN4dWlteHNXiHqRhoR5fn+AhYx+eWZ0aoCKj4qDg4CMl4ZsgnZuiZGDkYV/gnqAkZaUmZB0dHiHjXVzcGZ0eYFhc2xvYWh1ZlJgcGdrVV5tc3lgcmNfaH1xcm1aYnJhYlduWlx3TU1MY2ZhXnZzim1bXGR5XmBkZoRfY2NeWGpya25rcneLfXN3hIF4d3yIcYOEfX6Ie3SLiIiVhox+fpdzaHVxeWyMe250cIFYcXp2eXFkd3mGjGl2gIlygJ2Imaico5KEfXCMlHh5i52EhKCNjnyVjH+Zh4R7c3dwc2pvgWtpbHx0XmB4dntwdXtnYGV869q1ycPciHNsc4B2iZqIjWmXj46clJKBiHCFiKCOhIuVioyYk3yNkoiDiY97kYuGkIJ/dniDhHKHgpKblpOYhox2h39xhoOKh5qig5SMnoOJYYOVjoaJhYmMh4CHaX2Uf32DhImOjoJxhn5/cXdndnJpc3drWox9koGEfH+DgISKgnZidGyJgpCLgn9/k5F9boJseYeQh5OEfYF+gZKUkZeJbnJ6jIZ1bHBqcXd/XnNoblxqdWBSZHFoZlNfb3Z0X29gXWiCcXJpV2doY2lYbVdbdUxKTGVmXmJyc4VoW1xleV5eZGd6YWRfXFlrbmVuanR3in5zc4F+enZ6h3OFg3x/h3d2ioWPmIGNgnuTdmx3dXl5k3VueHp9WHmGcYBvZ3h3koJkdoaFcYqWhZmhm6KKhnNvkotyd46cfYmZiIl7n3+DmX+BeXJzbm9kcn5pZmx3d1tfeHp6cXF/aWFnYX/Vto6QpnhucXd7cZKQjIdqmI2Im5GLhntoh4uZhoGSkYaHl418jYyAgImNfJCMfoqFenV7gnpxhYCUmI6Sk4GJdYSHd4SAi5Sdn4aWj59+iGF/k4eEh4OJjX9/gmZ9kYB+f4KMj5B/bYJ8gnRrbXZ0c3Z1a2ONgY5/hH58hH+EiH9wYHNxhnyPjYJ8f5KJenGDZnuEi4eNhHyFfoGVj5GThG5weYx+dW1uaWp5fGFnaWlYa3VaUmlyaWJQYnJ4bGFlXVpqg21zYltnX2RsX25UWm9OSE9mZFxnbnGAa1pbY3JfXGNsd2RlXVxabGtibWpzdoZ/cW9/fHx0eIV4hYJ8gIh1eYmBkpV8iIZ2iIFweHl7hJNvbXuBd16Df3SBbWl6c5RzZ3KIfXKSkYSan5ughod2dpR/bXaTl32HkIOKjZl8i5p2fndxb2xqYXR8Z2JpdXpaX3h8eW1xfmVjaGhXnY9ecXKWvMSEdnGUiJB+cpaLhpuSjIdyaoiPloB7lIyBhJuMfIqGfHuJjH+UiHWKhnZ2fYFxdYWBnZOFlI+Dg3KAiHWFfIqZnZiHlI6dgIhmfZOCf4WDiYlxgX1mfot7eX5/h4uOfWmAfIN2Zm94eHN2c2xqjYWKgYl/eIGAhYN/a19yeXt+jYqGfIKPgX5ygWl5hIiMhoV5hH2BmI2QjH1ubXuJfXd0bmdme3ViW3BiV25yU1Nuc2hhTWZ0eGVgXVxYboBvc1llYV5qbWBwT1lrUURTZ2Baa25tfG5aW15sY1pib3dkZ1xdYGxpY2xpc3aBg3Fufnx/dHWDeoOCfIKFdn6IgZaQeIOKdIGIcnl4fo2Qb297gXFpgXl6fm1se3WVa2p3hHRslI6GnpigmYWIbn2Mdmp4mI5+gYqClZeJeY6Wb3pzcGxqZGBzemhgZXF6WmFyfXlncXphZWWPsbJ3SmJapNnQlnJ7kIqQd36UioSZkYyFbmuFkpF6eZKGgISYinyHf3h4iYqEloBwjIhxdH16aXmFg6SQhJOMg35vf4N3hHmGnJmVi5OQlIWHcHuSgn2Cg4iDboF3aICFeHJ/f4OKh3xlfX6EdWNwcn9oeHBvdZiMhYKKfHZ4gIR5gWtccX5zgYiFiX6GiXuJcoFucYWHj4WFc4R6gpmNjYR4bm9+hH92emRnaXtvXlh2WlhwbE5XcXNnYEpsdnRgXVtbWXR9cm9XZ11manBgb05XaFE/WWZeWm9qZ3pxWlpZa2VZY3F5X2hcXmVtaGVraXF3f4dvbH9+gHVvgnuAgX+Df3aBhYiXinGCjXF7hnx5eYSTjHVqen9sb351f31vcnt7lG9ugX94ZpOLg6GZnJKChmeHg3BnepWIfX6EgZiJgXyNjGl4cmtsZl9hbnhtX2JveFxkbIN6YXF2X2Vl1Oq+ijI6PouOgHF4hYiOjXaDlox+ko2Mf21shY2Mdn2Pf4WBlYh8gnhudoeEg5d3b4iFbHV7dGZ5goOmi4KPi4N9boB1d4R6h52RjJGSk4yLhn57koZ3f4SMg2t/cmiAfnhtfHyCioR3YnmEgXFkcWh+bXRxdIGbi4B+hX5zdX2Ac4FvW21/dXiLg4t7h4B8iHh6cWyJhJCEi3KCeoCXi4t/dG1rd4CAdXVcaGd2b1hWe1JZb2RMWnJyZVtJcHhvXFpaWV11fnRoWWJbZ2VuY2lMV2ZRPV5lXF11ZWB1cFpZVG9kWWRxeVpoXmBnbWdpbGlwd32ObGmChH55boB8fIF/gnp1goGNk4VwgItud36Ae3uIkol/aHt9anR7coZ7c3d9f4x5eIR9fGuMjYSbnZaMgYBsjX5raH6NjHp+f4OUgX59iohrdXFnaGNbYmdybmBha3NhaHCJemJzdF5jZJugj25cNVmvtXRpgIh8koZ1hZaFc4+KiXZwbIWDh3V5iXiJfJOHen5zZ3aJfn6YcHGGfmh2eW1leYiEpIaAh42Jfm5+doCBfYyaiIKUkZiJi4SJfI+IcHt9hHtofmxqgHt6aXp2gYeAcmB3gX5xZHJmdYJtdXuElJGBfIF/bnd5fHR/bVhwgHd1jIKGeIh2gol6eHNuioGQgYZzf31/k4mIem5tam6CgnVuXWdkcnBRWnpNWm9cTltycGRVS3N4aVdZWVphcYB0YF1dYGZkaGlmTlpoTkBhZFtgdWFddW1YV1N0YVpkb3JXal1haGtnbWxpcHd8kmxphIl8fHB+fnuBf4J6d4B/iouDcXuHb3F3hH97iY2Pg2p+e213eHaKd314gIKHf4N+fnpthYyImKONhIN7dYt5a2yEiJB4fXuBkX9/foqDcHJxY2ZeWWdfb3BgYGdwZmpviXRhdG9bYWRqdnt/vpymo8i4cYWDcpJ8eIaTgnORjIdycm+De4N0dYd0iHeTiHl5cWN3h3qAk2lyhHZnd3VjanyCh52Bf3+Oj31yf3SFeoCSkYN5lo6Vj4iCiHuIiGt4eX51Z3pobH95c2l6doCDfWhgd4d9ampzZ3uAaXaAi5CUfnp9fnB7dnt0fmJWd31yc4qEgn2DcYeKd3hxcISCjX9+eX59do6Gg3ZpcWltiIJycF1nYXFtSmV1S11uVVNZc25iUU9zeGBSWFhcYW+Cc1thXGhlZWNrZFFbcElEY2FaY3BeXXhoVVZVd15bZW5oVmteYWpnZW9vaHB2epJuaYiMeH1ye355goGBfHZ9g4iGg3B3g3Jud4OCfYmLk39wgHt4eXqBjHSDeH+BgYKEeoB1b36Ki5ueiH2FeneGe2d0hYuQen5/e4iFhHaPgGdvbl9kXFhlWW1yYGBgcGxraIluYHNpWV5kbYB3qdqpx4aHsnGJd2+MdXuGjoB6k4l/dXR1fneAcHF/bYR0lIZ4dWtgeoJ5iY9mcYRwZ3ZuW218gJCTf4B5kZJ9eXttiHeBkoyEdJaKkY6HhYV7f4RsdXZ/bWd2ZW17dW1qd3Z/f3xgYniFeWh0dWJ9e2d0ho6MlXt0gHVxf3p8bX9ZVnR/cHWFh3+BeWyJhnR5bHWAg4R+e315e3OLgXxzZ3RlbouEbXNbal50ZEdtbUxaYVdWVXhtYlBSdHZXUFVYXmFxhG9cYGNtZGReb2JUXXJHQmZfXWZoXVt7YlFVXHVbWmdrYVZqX2BuZWZrcWhwdXiOdGuOjXV+dnh9d4GDgXtzfYOIh4NvcX90cXV/hYGJjYp7d394g3t8hYd4h3x9gX6EgHt+c3Z5jI6gjYl6iXZ0g3lefYWYjHmGg3SFhoR3iXtibm1cYltbYVZqc2NgW2dub2aHcWFxZldcY2t/fMrOh7mham1timxxhHF8hIl+e5GFeXlzeXV1fGpsdWOEdZKCd29mXn2CeouJZnKCa2pxY1hteoWbiIGBc5eUd398bolygouMiHKYjpGJhYuDe3h9cXFwfWZocWJteHFqa3F4fXx6XGR5gHdpdXhlgnZndIeLjZR8cYdqbn2BeW58XVhyf250gYt8gm9vin9xdmh3f4GAgXd9cXt1h3x6cmZzYW6MgmxyWGpddltIbWpNVVReVFV7a2FPVHVyUFFUVl5idIVpXGBramZjWW5hWGJwR0FoXGBmXl1We11PVWRwWltqaF1XaGBfcmVqaHJncHJ3hnhulYp0f3p3fniDh391cn+GhY2CcHB7eHd1eoaFhoyFenx/dIt+fYaEhId/fn59h398eHZ5eJGToH+MfYttdYB5Y4OGloVzkYpvhYWBeoN0Y25qWV9bXV1UZ3NlYFlkcXJmgXNia2VXW2Bpf3i+rnugt21ic4Zoc3txeYKFe32Mf3d4cnZve3Zlam5gh3WOgXNqYl5/eHmLhGdxfmhra1pWb3eJo4GEf3GZk3GAeXWDboGDkohzlYiNiISJhX14dHJuaHlgam1gbXZqZ2preXd6d1tnfXx4ZXJ9bYR0ZXWFjIWVf2+LZmp6g3VtdGJccH1sdX2MfIFmdYd9bnFodX94fn9zfWx7e4F6eHFmbGJuiX5tblZqX3ZVSmlqT1FOaE1ZfGhiTlV1akxQVFVeZnWDZl1gcGhnYVdpXVtraEpEalphZFdZVXlZTlZtalldbGVcWWVjXnRlbGRxZ3JvdYF4cJmFdn9+d398hYd9dXOCiICVgm5zeXt6c3OFhoiIg3iBfXWPfnyEio6EgoR7fouDe3d8d3eanZd6ioKGaXZ9fGyDhJJ/co+CcIWCfoF/b2ZsZ1ddW1xbVGRwZF9XYnJ1aXVwZWViV1xcaH9wb3KAc4lkZHh+aXR1c3KChHiAhHl3dHVta3pxYmdrZ4Z0jYNuZl1ffXB7iX5pbXhmaWRVV3JvjaZ8g3t2lpB0fHN9e258fJGFd5l8iIaDhoN9dHBybGd0XGxoXmx0ZGdmaXpve3JZZ4B2dGdwgHeBdWJ3hYp8lIBui2pteoFxZnNlYW57Z3N4inx+YnaDdmprcXV7cXp6dH1mfn9/eXduZGZiboV8bWpWaWFvUkpoak9LTnBHXntmYU1VdGNKTlNXYWp2fmVcZ3NpZWBWY1dicF1MS2tYY2FVVFVzVkxYdWRaX2thXFpjZV93Zm1icGlzbnJ/dXSagXd/gHd/f4aEenx1goR+l4VucnR8enRxhIWPgYB6i3V0kH98gZWOgIWEfX6Mhnt+gHZ7o6WKeYiGhGt1fHp1g4GLeW+Fc3mEfYGDdW5qaGVWXVtaWlNibmRbWGFze2lobWlgYldfW2qAaWtvgGdrYGh5eGpzdHRuhIF6f311dW56aGp5al9lbmiBdo+EZ2VYYndpfod7b2lwZ2ZdVVhvZ46od4F6fJCOeXVwf3BzdnqPgHiVdYaDgIWIdmpydmdobltsZF1tc19nYWp4aHttWm2CcnNqb4B+eXdhd4SEd4+Ecohxb3l/cWNwaFxweGRxdIh8eGNzgHBnanl0cmx4d3Z4ZIN7f3h2cGRjY258fGtrVWhhZVNKa2dPR1JrRWF4Z2FNU3FcSk1UWWVrd3tlX21xaWRdVmBWbm5XS1NoV2VeWE5VbFRKXHlfW19rXV1bY2VgemhrYW9vdW5veHV6mH13gIF6gICHhXp5eoN+gZOEcXR0f3l2dISIkH2AfJBrc5WAe4KfhX6HfYB/hoKAint2hKyff3qIiINrcoF5dYB/gXRuhm58f3OJgGpvbWRkWF9aWVpVYmpnW1pedYJpXm1sXGFWXFxsgWVxdH1paVxrdnVndHdybYV7fX15dXJseWhpeGZdZXNoeneSgWNjVGVwZ4KFd3dnaWpgV1ZZZ2OPp25+d4CLjnpwcX1oem96jXx3j3KEfX9/hm5kdXNkaGhca2Jdb29bZ19tdWR6aF10gG9xa3F7fXV1YXSFinqHh4B/d3J1f3VhcG1acnRicXKFfHVlcoBsYWx7b2ppe3l2cmaFdnt6dXFkYWVtc35pbFRoXlxUS3JiUEZWYUdidmdhS1RvV0pMV1hna3Z6ZGVucWZjWlddWXZlVUpcY1dnWFlJV2VRSGJ4Wl1fbFteXGFkXn9pal9udHhub252g5d5coGAfH+Ii4V9dXWGeYeMfXN1dYJ5enqCi459foSJaXOWgXqKnX1+hXqBen98hohzcY+ujHt7h499ZXGHeXN8e3Vyb4Vse35sj3picG9iZV1lVllZVmNma2BdXHOFaFhwblpeV1pcbHticHd2bWJabHNzZ3R1cGyEeX6AeXdubnRlaXRlW2h1ZnZ2kXpfXVJmZmuDgnR9YmNpXFRYXWJjj6VoeHSChZB4bW96aHhufIV7dYlzgHh8eH9oZXZtYGZgXmpfXXNrWWVdb29iemVbd3trbm5vd3hzdGRyg5J+h4KIenZvcn1zYndkW29xYnFxgnxzZ3KAZV5udmlkZ3l7dW5vgnV0fXNxYl9mbm99ZGlTZ1hYVE13X1FKWVhIYnVkYUlUbVNKTFpXaWxye2JsbHNjYVlZW2F2W1NMY11YaVNXSFlhTkdpdVheYW1bW19iYl2FaGdhbnh5bG9qdoGQeG2CfoCBkoeDgXZ0iXSMhnNxd3WCd3x9foyPgH6TfnB3lYN8mZJ5gIB4eX5/dIiDc3CZont6f4mUeGR1iHhzd3VsdG9+bHl8cJFyXnBvYGdibFRbWldoY21mXFxxiWVTcm5bWlhYYGx2Y2l1amleWW1zcWxzc3NqhXx+f3x2bm5sZGlxY1trcmR0do5zW1dTZWFygH9ygl1iY15TWmBbY5GeZXJxhYSRdGxrem1vcHt8fHGBd39zenp6ZGV1aF1iWmBnW152aFdiXXBoYXdgW3t2aWlybndzcnRocIGUgoZ+hHZyanB9bWZ3V1xrbmJxc4F6c2dvfltgcHFhX2pxfmxsdX5zcXhrcGFcZWxsemFnU2ZUV1FPdVtRT1lSSGN0YmBGVWpQSVBaVWtra3xlbW9xYVtaWFlscFdTT2ZXV2hTVEZaXE9IcnRYX2NtY1hgYGFdi2pjZG15eGtvaXV5hntrg31/hJl8goR5fYhuj4Zxb3d6fXSCgnyKjoKCl3R3gpOFgZ+JdYCAgXN/gnGHgnVvopd0e4aLhntld4pubnpuZnhwemtzdnKMa150bmFnZWtSXVtVZ2FsbFpccIxkT29uXVZYVWdqdGdidGVlXVludG1wdXV5a4d8f3yIdo9zZGRrbmFcbm1jc3iHa1pUVmNkeH19cYVcY19jVFpgWWOVlWNucIOFinNqaHtvZnN3c3xsenR1b3p+dV5mcmNbXlZhZFlhdGVVX2BtZGFxXV1+b2hpc3FzcHR1am2EkoGIe4VxcmZufXByb1NbZmtmcXSBd3NjbHZVYnJrWl9vZn1mbXd9c3Nzam1gWmRqandeZlRkVFVQVG1XUVZTUEhkc19hRVhpTkhXVFZtaGR8aWt4a2JXXFVbdGRTUldoUVllVFNIWlpQTXh2Wl9lbGlZYmBeXo9uYWZseXVub2h2dn9/bIN/fYaXe3+HgYp+a5OIcmd0gHt1gIJ8iI5/i5NyfIqRhYefhnt/hoxzgYZzfYN2bqWMc4GNi3Z3bXqMYGR7cGZ6c3hsbXF2gmdke2xjZmdoU19eVWdfbG9bXm6NaE5pbWBUVlNvZ3NsZnhkZFxYcHRscXp4cm2Ie392nHp5a2FlbG1eYG9qZXF4fmdaVlhgbHh8e3CDX2JeZ1dYX1dkm4hia3GBh313a2t4bVx3cWx7anZzbm97gHJYam5fWV1VYmNYZHFiU15haGJibFpgfWtma3N1bm13dmtohYt+iHqIbXFlcH1tcm1jWWFpaW90gXRzX2lsU2VxZFVibmJ6Y3F3e3ZrcG1qX1hhZ2h0XGVVYVVSTlhlUk9cT09IZXBdY0ZZaU1JX0tYbWRfeGhufmRgVF5UXXVcVFNgZk5dYVRTSlxZUFl1dV1fZW1oWGNhW16OcWJnandxc25ndnR6g3KBgnmHjX58iYeOem6QinRsc4J0f3+HhIaRhJWPeX6Mj4eRm4SAfIyEcoCBc3R3cW6Tk5OTk5OTk5OTkpKSkpKSkpKSkpKSk5OTkpKSkpKSkpKSkpKSkZGRkJCPj4+Pj4+Ojo6Pj46OjY2Njo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo2NjYyMjI2NjY2Njo6Ojo6OjY6OjY2Ojo6Oj4+Pjo2NjY2Oj4+Pj4+PjoKAfnp6fX5+fX1/fn59fn5+fn5+fn+Af4CAgIGAgIB/gIGBgYOHjI6Ojo6NjY2NjY2NjY2NjZKSkpOTkpKSkpKSkpKSkpGRkZGSkpKSkpKSkpKSkpKSkpKSkpGRkZCQkI+Pjo6Ojo6NjY6Ojo2NjY2Njo6Njo6OjY2NjY2Njo6Ojo6Ojo6NjYyMjY2MjIyNjY2Njo6Ojo6NjY2NjY2Njo6Ojo6OjY2NjY2Ojo6Ojo+Ogn99ent8fn59fX5+fn5+fn5+fn5+f4B/gICAgICAgH+BgYCBg4aMjY6NjY2NjY2NjIyMjIyMkpKSkpKSkpKSkpKSkpKSkZKSkpKSk5KSkpKRkZGRkZKSkpGRkZGQkJCQj4+Ojo6OjY2NjY2Njo6Ojo6NjY2NjY2NjY2NjY2NjY6Pj4+Pjo6NjIyMjIyMjIyNjY2NjY2NjY2NjY2NjY2Njo6Ojo2NjY2NjY2NjY6Ojo6Cf3x6fHx9fn19fn19fX59fn5+fn5+gH9/gICBgYGAf4CAgICDhouOjo2NjY2NjIyMjIyMjIySkpOTk5KTk5KSkpKSkZGSkpKSkpKSkpGRkZGRkZGRkJCQkJGRkZCQkJCPj46Pjo6Ojo6Ojo6Ojo6Ojo2MjYyMjY2NjY2NjY2NjY+Pjo6OjY6MjIyMjIyMjIyMjY2NjY2NjY2NjY2NjY2Njo6NjY2MjIyNjY2Njo6OjoN/fHp8e31+fH1+fXx9fn59fn5+fn5/f3+BgYGAgICAgYCAgIOGi42NjY2NjIyMjIyMjIyMjJFtZmdnZ2dnfYWEhISEiF0tMDAwMC1GoaGhoaGhoJqZmpqampqKg4SEhIOEd2VnZmZmaFxDREREREJOpa+tra2trqSfoKCgoKVeKi8vLzAsSIWDg4ODg4OLjIyMjIyMjY2NjYyMjY2NjY2NjY2NjIyMjIyNjY2NjY2OhX19e3t6fX58fH59fX1+fX1+fn5+fn9/f4GBgYCAgICBgICAgoWKjI2MjIyMjIyMjIyMjIyMkWdfYGBgX155g4KCgoKGUxgdHR0dGTekpKSkpKSjnJycnJycnImBgoKBgYJyXV9fX19hUjQ1NTU1M0GptrS0tLS1qKOkpKSkqlYVHBwcHBc6g4GBgYGAgYqLi4yMjIyMjIyMjIyMjIyMjY2NjY2MjIyMjIyMjY2NjY2GfH16e3p8fXt8fn1+fX59fX5+fn5/f3+AgYCBgYGAgIGBgYGChYqNjYyMjIyMjIyMjIuLi4uRjo2NjY2NjY+QkJCQkJCMh4eHh4eHiZOTkpKSkpKRkZGRkZGRj46Ojo2NjYuJiYmJiYmIhYaFhYWFho+QkJCQkJGQj5CQj4+PiIKDg4KCgoWKioqKioqKi4uLi4uLi4uLjIyLi4yMjIyMjI2NjIyMjIyMjIyMjY2Njoh8f3l7ent8e319fX18fX19fX5+fn9/f4CBgYGBgYGAgYCAgYKFioyMjIyMjIyMjIuLi4uLi5GSkpKSko2QkpGJh46KkJKTkIqQi4uQiY+RkZGRkJCQkJCPj4+Pj4+Ojo6Njo6Ojo2Njo2Njo6Ojo6NjIuLjIyMjIyMjIyMjIyNjo6NjY2NjIuLi4uLiouLi4uLi4uLi4uLi4uLjIyMjIyMjIyMjIyMjIyMjIyNjY2NiX59eHh5fH18fX19fHx9fX59fn5+f3+AgICBgYGBgYCBgIGCgoSKjIyMjIyMjIyLi4uLi4qLkJCRkZGPhI6QkIaKj4WNkJCOh4iFiYuGiJCQkJCQkJCQkI+Pj4+Ojo6NjY2NjYyMjIyMjIyMjIyMjIyMjIyMjI2NjIyMjIyMjIyMi4uLi4uLi4uLi4qKiouLi4uLi4uLi4uLi4uLi4yMjIyMjIyMjIyMjIyMjIyMjI2Lfnx3dnh7fXx7fX18fH19fn5+fn5/f4CAgIGBgYGBgIGAgIGChIqMjIyMjIuLi4uLioqKioqQkJCQkIqFjoiOhoaPiY2QkI+GioaHh4WHj4+Pj4+Qj5CPj4+Ojo6OjY2MjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMi4uLi4uLi4uLi4uLi4qKioqKi4qKi4qKi4uKioqKi4uLi4uLjIyMjIyMjIyMjIyMjIyMjIt+e3d2eHt8fHx9fX19fX1+fn5/fn9/f3+AgIGAgYGAgYCBgYGEiYyMi4uLi4uLioqKioqKipCQkJCPhYOMjpCOiYyJjZCQj4mIjoiEhoiPj4+Pj4+Pj4+Pjo6OjY2NjYyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIuLi4uLi4uLi4qKioqKioqKioqKioqKioqLi4uKioqKiouLi4uLi4yMjIyMjIyMjIyMjIyMin18dnZ4fHx7fH19fH19fn5+fn5+fn9/f4CAgYCBgYGBgIGAgYSJi4yLi4uLi4qKiomJiYmJkJCQkJCMhoyJjoeFjYmOi4yLhoeHhYiDio+Pjo+Pj4+Pjo6OjY2NjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyLi4uLi4qKioqKioqKioqKioqKioqKioqKi4uLioqKioqKioqLi4uLi4uLjIyMjIyMi4uMjIyKf353eHp7enp8fHx8fX1+fn5+fn9+fn9/gICAgICBgICAgYCBhIqMi4uLioqKioqJiYmJiYmPj4+Pj5CMjouPjIqPjI6MjY2JjYqKjomOj46Ojo6Ojo6Ojo6NjYyMjIyLi4uLi4uLjIyMjIyMjIyMjIyMjIyMjIyMjIyLi4uLioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi4uLi4uLi4uLi4uLjIiAfXh5enp6e318e3t9fn5+fn5/f35+f39/gICBgICAgIGBgIGEiouLioqKioqJiYmJiYmIiI+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Oj4+Oj46Ojo6Ojo6Ojo2NjYyMjIyLi4uLi4uLi4uLjIyMjIyMjIyMjIyMjIyMjIyMjIuLi4uKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLi4uLioqKi4uLh4B8eHp6eXt8fHt8fH1+fn5+fn9/fn9/f39/gIB/gYGAgIB/gYSJi4qKioqJiYmJiYmJiIiIj4+Pj4+Pj4+Pj46Pj4+Oj4+Ojo6Ojo6Ojo6OjY2NjY2NjY2MjIyMjIuLi4uLi4uLi4uLi4uLi4uLjIyMjIyMjIyMjIyMi4uLi4qKioqKioqKioqKioqKioqKioqKioqKioqKiYmKioqKioqKioqKioqKioqKioqKi4uHgHt5eXh6fHx6e3t9fX5+fn5+f39+f39/f39/f3+BgYCAgH+BhIiLiomJiYmJiYmJiIiIiIiOjo6Ojo6Pj46MjI+Sj5COjo6Ojo6NjY2NjY2NjY2NjIyMjIyMjIuLi4uLioqKioqLi4uLi4uLi4uLi4uMjIyMjIyMjIyLi4uLi4qKioqKioqKioqKiomKiomJiYqKioqKioqJiYmJioqKioqKioqKioqKioqKioqKi4aBe3h5eHp8ent7fH19fn5+fn5/f35/f39+fn9/f4CAgYCAgIGEiIqJiYmJiYmJiIiIiIeHh46Ojo6Ojo6Ojo+MkJOQkI+Ojo6NjY2NjY2NjYyMjIyMjIyMjIuLi4uLi4qKioqKioqKi4uLi4uLi4uLi4uLi4uMjIyLi4uLi4uLioqKioqKioqKiYmJiYmJiYmJiYmKioqKiomJiYmJiYmJiYqKioqKiomJioqKioqKhYB6eHl5fHt6ent8fH1+fn1+fn9/fX9/f35/f39/gICBgICAgYSIiomJiYiIiIiIiIeHh4eHjY2Ojo6Ojo6Pj4+PjoyNkI2NjY2NjY2MjIyMjIyMjIyMi4uLi4uLioqKioqKioqKioqLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4qKioqKioqJiYmJiYmJiYmJiYmJiYmKioqJiYmJiYmJiYmJiYmKioqJiYmJiYmJioqFf3l6eXh7e3p7fHx7fn5+fX5+f39+f35/fn+Af3+AgICBgYCChIeKiYmIiIiIh4eHh4eHh4eNjY2Njo6Oi42Nj5WPiYyPjYyNjYyMjIyMjIyMjIuLi4uLi4uLi4qKioqKioqKioqKiouLi4uLi4uLi4uLi4uLi4uLi4uLi4uKioqJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYR+eXt5ent7eXt9fHt+fn59fn1+f35/fn9+f3+AgICAf4CAgICEh4mIiIiHh4eHh4eHh4aGhoyNjY2NjY+MjImKj42IjJGPjY2NjIyMjIyMjIyLi4uLi4uKioqKioqKioqKioqKioqKiouLi4uLi4uLi4uLi4uLi4uLi4uKioqJiomJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJg355e3p8e3p7fX17fH9+fn5+fX5/fn9+f3+Af4CAgH+AgH9/f4OGiIiHh4eHh4aGhoaGhoaGjIyMjIyLiYyKiIeJhoyOjJCMjZGOjIyMi4uLi4uLi4uLi4qKioqKioqKioqKioqKioqKioqKiouLi4uLi4uLi4uLioqKioqKiomJiYmJiYmJiImJiYmJiYmJiYmJiYmJiYmJiYmIiImJiYmJiYmJiYmJiYiIiIiIiYmCf3h7e3t6enx9fHx9f39+fn19fn9/f39/f4F/gIB/gICAgICAg4aIh4eHhoaGhoaGhoaGhoWMjIyMi4yOjoyKioeEiIuKjIuNjo+Li4uLi4uLi4uLi4uLioqKiomJiYmKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiomJiYmJiYiIiIiIiIiIiImJiYmJiYmJiYmJiIiIiIiIiYmIiIiIiIiIiIiIiIiIiIJ/eHp7enp6e3x8fX1+f35+fX1+f39/fn+AgICAf3+Af4CAgYCDhYiHh4aGhoaGhoaFhYWFhYyMjI2NjJCSjI2Ii4mJi4uLi4mLjIqMi4uLi4uLioqLi4qKiomJiYmJiYmJiYqKioqKioqKioqKioqKioqKioqKioqKiYqJioqJiYmJiYmIiIiIiIiIiIiIiImJiYmJiYmJiYmIiIiIiIiIiIiIiIiIiIiIiIiIiIiHgXx4e3x5enp8fHx9fX9/fn59fX9/f39+fn+Af4B/f3+Af4CAgIKEh4eGhoaGhYWFhYWFhYWFjIyNkY+PjZGJjIaJjIuIiImMiYeNjo+NioqKioqKioqKiomJiYmJiYmJiYmJioqKioqKioqKioqKioqJioqKioqKiYmJiYmJiYmJiYmJiYiIiIiIiIiIiIiIiImJiYmJiYmJiIiIiIiIiIiIiIiIiIiHh4eHh4eHh4WAenl9e3t7enx8fHx9f39+fn19f39/f35+f4B/gH9/f4B/gH+AgoSHhoaGhYWFhYWFhYWFhISLi46PjoyLj4iHiYmMjYWFjo2KiYyNi46KioqKiomJiYmJiYmJiYmJiYmJiYmJiYmKioqKioqKiomJiYmJiYmJiYmJiYmJiYmJiYmJiYmIiIiIiIiIiIiHiIiIiIiIiIiIiIiIiIiIiIiHh4eHh4eHh4eHhoaHh4eHhH55eX16enp7fXt8fX5+f35+fX5/f39/fX5/f3+Af39/f39/f4CChIaFhoWFhYWFhYWFhISEhIuLjI6MjI2Lh4mIiomGgoiNjoiKi5GTj4uJiYmJiYmJiYmJiYmIiYmJiYmJiYmJiYmKioqKiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiIiIiIiIiIeHh4eHh4eIiIiIiIiIiIiIh4eHh4eHhoaGh4aGhoaGhoaGh4eDfXp5e3p5enx8e31+fn5/fn59fn9/fn9+fn+AgICAf35/f39/gIKEhoWFhYWFhISEhISEhISEioqOjYmIiIqKh4iHiomIioiIh4qGi5GPiomJiYmJiYiIiIiIiIiIiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmIiIiIiIiIiIiHh4iIh4eHh4eHh4eHh4eHh4eHh4eHh4eHhoaGhoaGhoaGhoaGhoaGh4J8eXl6eXp7e3t7fX5+fn5+fn59gH9/f39/f4CAgH9/fn9/gICAgoSGhYWFhISEhISEhISEhISKi5CPiYmJi4qHh4WHiYuKiYSLjYmOjYqJiYmJiIiIiIiIiIiIiIiIiYmJiYmJiYmJiYmJiYmJiYmJiIiIiImJiYmJiYiIiIiIiIiIiIiIiIeHh4eHh4eHh4eHh4eHh4eHh4eHh4eGhoaGhoaGhoaGhoaGhoaGhoaGgXt4enp4e3x7e3x+fn9+fn5+fX1/f39/f3+Af4B/f39/f3+Af4CChIaFhYSEhISEhISEhISEhI+Qj4+IiYuIhoeIiYuLjIuJioqNio6Oj4iJiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIh4eHh4eHh4eHh4eHh4eHh4aGhoaGhoaGhoaGhoaGhoaGhYWFhYWFhoaAe3h5eXh4enp8fX1+f35+fn59fn9/f39/gIB/gICAf39/gIB/gYKDhoiGiIaDhISEhIODg4ODkpKOioeKi4qLh4uNiYqJi4iHiouIio+SioiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIh4eHh4eHh4eHh4eHh4eGhoaGhoaGhoaGhoaGhoaGhoaGhoaFhYWFhYWGhn96eXh4eHl5eXx9fn5/fn5/fn1+f35/f3+Af39/f4CAgH+AgH+BgoOHjo+PjoiHhIWFhoaFhYWSkI6KiYmIiImKioiIh4aKjIiHiYmOkJGNh4iIiIiIiIiIiIiIiIiIiIiIh4iIiIiIiIiIiIiIiIiIiIiIiIiIh4eHh4eHh4eHh4eHh4eHh4eHh4aGh4eHh4aGhoaGhoaGhoaGhoaGhoaGhoaGhoWFhYWFhYWFhYWGf3l4d3d3eXp5e3x9fn9+f35+fn5+f35+fn+Af4CAgICAf3+Af4GBg4eOjo6Ojo6Mjo2OjY2MjZCQjomHhoiJiYeIiouIiYyJiYaKjY6PkYuIiIiIiIeHh4eIiIiIiIiHh4eHh4iIiIiIiIiIiIiIiIiIiIeHh4eHh4eHh4eHh4eHh4eHh4eHh4aGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaFhYWFhYWFhYWFhYZ+eXd5d3d6eXl8e31/fn5/fn5+fn5+fn9+f4B/fn+Af39/f39+gIGEiI6Ojo6Ojo6Ojo6Ojo2NkJGOi42JjIiIiYaHiYaIioiHi4yLjpCQiIeIiYmJiIeHh4iIiYmIh4eHh4iIiYiIiIiIh4iIiIiHh4eHh4eHh4eHh4eHh4eHh4aGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoWFhoaFhYaGhoWGhYSEhIWFhoaFhIWFhX55d3l2eHl4e3x7fn5+fn5+fn5+fn5+f39+f39+f39/f35/f3+AgYOGjY2Ojo6OjY6NjY6OjY2Qj42Ni46KhoiKhISLiYeDhYSDi4mLj42JjI6QkI+NjYyLjY6Pj42NjI2Nj4+Pjo6MjYyMjY2KiYiHiImHh4aHh4eHh4aGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoeHiYqKiIeJi4yNjo2LiImLi42OjYyJiImMgHl3d3Z6eXh7e3t9fn5+fn5+fn5+fn5/f39+fn5/f4B/f4B/f4CBg4aMjY2NjY2NjY2Qj4+Pj46NjI6KiYuMjIeFiY2Lh4aIh4aHh4uNjo6Pj4+Pjo+Pj4+Pj4+Pj4+Pj4+Ojo+Pj4+Pj4+Pj4+Oj46Oj46Mi4uJh4eHh4aIhoaGhoaGhoaGhoeLiYeHiIiLjY2Mi4yLjY2Ojo+Ojo6Pj46Ojo6Ojo6Ojo6Njo6NjY2AeHZ4eHp4enx6fH5+fn5+fn5+fn5+f39/fn59fn9/f39/gH9/gIGDhoyMjIyMjY+QkpOTk5KSjYyMjIqHioyKh4eJiYWCiouIiYWJjpCNjo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6NjI2NjI2LiYaHh4eHiYqLjY6NjYyNjY6OjY2OjY2NjY2NjY2NjY2NjY2OjIyNj4+OjY2MjIyLi313dXd5enp7e3p+fn5+fn5+f35+fn5/f39+fn1+f39/gICAf3+AgYOFj5KRkJGSk5OTk5OTkpKLi4uLiomMiouLiYuKhoeOjYiIjI6OjIuMjIyNj46Njo6Ojo2NjY2MjY2NjIyMjIyMjIyMjY2NjYyMjI2NjYyMjI2NjIyNjIyMi4yMi4yMjI2MjIyMjIyMjIyMjIyLi4uLi4yNjY6Sk5OSkpSRkJOVlZSTk5COjo6Oe3Z2d3h6ent7e31+fn5+fn5/fn5+fn5/f35+fn9/f39/gIB/f4CBgoSNkpKTkpOSkpOTkZKSkoqJioyJi4qJjIuKioiHiYqKi4mKjY2Mj46Nj5KUlJOUlJOTkpGSkI+Ojo2NjY2Pko+OkZGOjIuKioqLi4qKi5CPjoyMjIqKioqKioqKiouKioqKi4yLi4uMjIyKiouLi46RkpOTk5SUk5STk5SUlJOTk5KSkpKSk5F6dXZ2eHt7e3p6fX5+fn5+fn5+fn5+fX5/fn5+f39/f3+Af39/gIGChIuRkZGRkZKSkpGRkpGRiYmIiIqMiYiJiYuJhoSJhoyKh4ySkpKTk5OUlZWWlZWUk5OUlJSUk5SUlJSVlZWVlZWUlJOTkY+QkZKQjoyRlZWVk5KSjo+QjYqKi4qKi42OjY6RkpCRkpKSkpGRkpKSk5OTk5OTk5OTk5OTkpOSkpKSkpKSkpKSj3h1d3l6e3t7ent9fX19fn5/f35+fX5+fn5+f39/f39/f4B/f3+AgYKEi5GQkJCSkpKRkZGRkZGIiIiIi4uJg4eLi4yMiIeHjYyNkpSSkpOTlJWWlpaVlZSSkpOTlJSUlJWVlZaXlpaWlpWUk5SUlJSVlJSUk5OVlZWUk5KTk5OTkJGSkZGSk5OTk5KSkpOSkpKSkpKSkpKSkpKSk5OTk5SUk5OSkpOTkpKSkpGRkZGPdnJ3enp7e3t8fX59fX1+fn9+fn9+fn5+fn6Af39/f3+Af3+Af4CBgoSKkJCRkZGRkZCQkJCQkIeHh4eIiIiFi4+KjI6Njo+OkJWUk5OTk5SUlZWVlJSVk5KSk5KTlZSUlZaWlpaWlpaWlpSTk5OTk5OUlJOSk5SVlZSTkpKSkpOTk5OTk5OTk5KSkpKSkpKSkpGSkpGRkZGRkZKTlJSUlJSTkpGRkZGRkZGRkZGRkYx0c3d6ent7e3x9fX1+fX5+f35+fn5+fn5+fn9/f39/fn9/f39/f4GDhIqQkJGRkJCQj4+Pj4+Ph4iKi4yNjYuOj42Mjo6RkpGSk5OSkpKSk5SUlJKSk5OTk5OSkpOUk5OTk5WVlZWUlZWUk5OTk5KSk5OUk5KTlJSUk5KSkpKSk5OTkpKSkpKRkZKSkpKSkpKSkpKSkZKRkZGSkpOTlJSUk5OSkZGRkZGQkJCQkZCRinN0dnp8fHp7fXx9fn59f35/f35+fn9+f31+f39+fn59f39/gH+AgYKDipCQkZGQj5CPjo+Pjo+Oj4+Pj4+Pj4+PkI2OjpCRkpKSkpKRkpKTk5OTkpGSkpKRkZKSk5OSk5OSk5STk5OTlJOSk5OTk5OTk5OSk5OTkpKSkpKSkpKSkpGRkZGSkZCRkZGRkpKRkZGRkpGRkZGRkpKSkpKSkpKSkpKRkJCQkJCQkJCQkJGGc3V2e3x8e3x9fX1+fn1/f35/fn5/gH9+fX5/fX5/fn5/f3+Af3+BgYGKkI+PkI+Pj4+Pj4+Pj4+Oj46Oj4+Pj5CQiI2PkJGRkpKSkpOTk5OTkpKSk5KSkZGRkZKSk5KTkpGRkpKSkZKSkpKSkpKTk5KRkZKTkpGRkpKSkpKRkJCQkJGRkZGQkJGSkZGRkZGSkZGRkZGRkZGSkpKSkpKSkZCRkZCPj4+Pj4+Pj4+PkX9ydHh8fHx7fHx9fX5+fn9+fn5/f3+AgH99fn5+f39+f39/f4CAf4GBgYqPj4+Pjo6Ojo+Pj46Ojo6Ojo+PkI+Pj4+GjpCQkJCRkZGRkZGRkZGQkJCQkZGRkZGRkZGRkZGQkJCRkZCQkJGRkZGRkZGRkJCQkZGQkJGRkZGRkI+PkJCQkJGRkJCQkJCRkJCQkJCQkZCQkJCQkJCQkZCQkJCPj4+Pjo+Pj46Ojo+Pj4+PeHJ2eXx9fHp9fH19fn5+f35+f39/f4CAf39/fn5/f35/f39/gIB/gYGAio6Ojo6NjY2Ojo6Ojo6NjY2Oj4+Pj4+PjoiQkZCPj4+QkJCQkJCQkI+PkJCQj4+Pj5CQkJCQkJCPj4+PkI+PkJCQkJCQj4+Oj4+QkI+PkJCQkJCPjo+QkJCPj4+Pj4+PkJCQkI+PkI+Qj4+PkI+PkJCQkI+OkI+Pj46OjoyMjY2NjIqDiYhzc3Z4fX58eX18fX1+fn5/fX5/fn9/f39/f4B/f39/f4CAgH+AgH+BgYCJjY2Ojo6Ojo6OjY2OjoyNjY6Ojo6Ojo2NiJCRkI6Njo6Ojo6Ojo6Pjo6Ojo6Ojo6Pjo6Ojo6Ojo6OjY6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Pj46Oj4+Pj4+Pj4+Pjo+PjY2MjYyNjoyLi4mJiYiFhYSDgoKEgnR5fXp4dXJrZWltb2xmZmdncHNzd3l9fnl6e3x9fX1+fn59fn9/fn9/f39/gIB/f3+AgIGAgIB/f4CBgImNjY2NjY2MjYyMjIyMi4uLjYyMjIyMjIyGj5GRjIyMjIyMjIyMjIyMjIyMjIyNjY2MjIyMjYyMjY2MjIyNjY2NjYyMjI2MiomKi4uJh4KAh4iEgXt6gH57fXx8fXlzcnJycnV1cG1ramppZ2NkYV9bXF1eWFVXWFlTS0VJSkpLTE1PT0tgdHR3eX19eHp5e3x8fX5+fn1+f39+f35/f4CAgH+AgICBgYCAgICAgIGAf4OEhYSFiIuLjYyMjIuLi4yGiYqKioqKh4OOkJGNiouLi4uMiYmKioqKiouLi4eDi4qIiYmGhYWEhIeJiYWCg397fHl6e3pzcHFxcW1samdsbWdlZmVmZGNlZGVkZWVlZWRkZGNhYV5dXFpYWFdUUFFSU1JTTU1KSUZESEpHR0hHR0xOSWdzdXh5fXp4d3l8fHx8fn5+fn9/fn9/f39+f4CAgIB/gICBgICAgICBgYFnXmBjYWNucX17ent/fXd8fHZ4ent4eHpvcHt4eXt8e3h3e394dXd0dHZ0dXZ3dXFycW5wcnBnaGtsbm9tamlpaGhlZWRkZF9gYWJgYF5dWVhaWltdXV9gX2BfX19gYmFeXl5eWVldXF1bV1dWUlRSU1NOUUpISUZERUhMTEhGR0lLSklNbXJ0eHp7end3eXt6e3x+fn1+f39+f35/f35+gIGAf3+AgIGAgICAgICCgWdYW1pZXFtcY1xaXF5ga3FtcHBvbm5vbmtpbmxrbG9qaWtraWpraWdmZ2dnaGhnbWdqZ2hlaGdjY2JhYmBgXVhbW1dYV1RWUVBUU1NNSkxLTExOTk9UWFhXVVVUUlBQTU1QT05LTE1QUU9MTEpHSUlHSEhJSEhIR0ZHSEpKSEhISUlISVZwc3V5ent5dnZ5enp7fH59fX5/f35/fn5+f3+AgX9+f4B/gICAgICAgIGBbFtYVlZWWVlaWVlYVVZoamxubmxra2poaGloZGVkYlxiZl9fYGNfXF9dYF1eWl5dWVleYmFeXlpZX1xYV1NOTUxLS0tMSUtNTktKS0tMSktQTEtLRkdHSUlGR0lISUZFSEdGRkVERUVEREVJSUlHSEdIRkZLTUtJSUlIR0hLTU1LTExMVXFzdnl6e3h2d3h3ent8fn1+fn9/f39+f3+AgIGAfn5/f4CAf4CAgIB/gYJoUlRVVlNVV1lZWVdXV1tbYWNfXlxbWFZWWVZSVFJRUVVUU1NTUE1KTU5QUk9NUFFRUVFSVlZRUVFUUFBOTk9MSk1MS0xKSktLRklJSkxJR0pISUlFR0dGRkVFSElKR0ZHRkZHR0hKR0dISEpMSkpLSUlISktLSkhKS0pISUtMTU9QUEtUdHR1eHp6eHZ2d3d6enx+fX5+fn5/f35+fn+AgYB/f3+AgYB/gICAgH+AgmlQUlRXVVRWWVdYWFpbVFRTUlBRU1FRUU9OTlBQUU9MTlBPTk5NTEtNTk5QTU9QUFJRUE5OT05PTk9PUFFPTk5PTk5QTk1NS0lISEpJSUlJR0ZHR0dJSkhJSEhJSEhHSEdISElISUxLSklISkpJSkpIR0pMS0pJSUhKSktMTk1NTU9RTFVzcnN3enl3dnR2eHp7fX19fn5+fn9+fn5+gICBgICAf4GBgH+AgICAgICBbE9PTlRZVVVdW1lXV1hOTUpKSUZKT0xKSkdJSk1NS0pMTUpHSUlJSktMRkRGSktLS0hKTExMT01MTE5PT09NTk9MTk5OUFBPTE1MTk1MTEpJSEdJSElISElJS0xLS0pJS0pJSklJSUlJR0dKSUdJSUpKTk1OTEhJSklJSk1PT01MT1JOWXBwcnd4d3d0c3R3enx+fX5+fn5+fn5+fn9/gICAgICAgYCAf39/gICAgIFvS0pNTlFOTlVXVlZSU0lFQ0VFUkREQT5CP0RAQD5CREFAQURHRkVIRUJBQEBDQ0RFQUNFSEtPS0lJSkhHSklKSUlLSkxQTk1MTU1MTU1NTElIREZGR0ZGRklKSUlLSkhMSklKSkpJSEhKS0tIRkdJSklLTU5OSktPTUxLTU1PUE5QT1BgcG9yd3h2dHJzdXd6fX19fn5+fn9+fn1/gICAgICAf4CAgIB/f3+AgICAgXNQUE5OUE1KS1BSUE5RQ0RCQUZRRT1DPT9FSDk6Oz0/PTxBRUA+Ojs+PjxFRD0/RUE/QEFAREVHR0dHQkRERUZFR0dHR0pHSEpLR0NER0pHQ0RFQUFDR0hHSEdISktKSElMS0lISktLTU5MTUxMSkpMS0lLTU9PUFNRT1BQTk9QUlFNUGdwb3N2dXRycXR4eX19fX1+fn5+f4B+foCAgH9/gIB/f4CAgH+Af4B/gICCdlRVUVFQT0xNUFBOT09BQkFAQkE/Oz48Pj8/Ozg5ODs7OkA7Oz48Ozw8PEhMPT1BQT9CQz1BRERGQkZGREdJSEM/QEBAQUFCQUE/Pjw9PkFAQD8+P0BFR0dHSUtMTk1OTUxNTUpLTVBVU05MTlFOTk1OTE1NTk9OTk1LS05OTk1OTkxUbnBwcnR0c3Fydnl5fX19fn1+fn5/gH5+gICAgICAgH9/gICAgH9/gH+BgIJ4UVFSVFJTUVNTUVFST0BAPT4/PD8+QEE/PT45Ozo7Ozk5Ojg4Oz06Nzo8PD49Ozs6ODpAQEFCP0E/Q0ZEQkNDPzs+PkBDQ0E/Pj9BPkBAQj9APD9CQEFDRUVFSktQT1BPTU1OTExMT1JRUFJOTExPTUtOT0xMTEtMS0tKS0tKTU1LS1xxcXF1c3VzcXR4eHp9fn1+fn5+f39/fn5/gIGAgH+Af4CAgICAf4CAf4CAgXxSTU9RUFFSUlRSU1NOPDs8Ozs7P0BBQkA9PDk8PTw6Nzk6Ojk4OTtLOzk6OTo7Ozg3ODk7Ojg8Oz1AQUA9Ozs+PD09QEJDQT9BQkE9Pj09Oz0/Q0RCQD9BREJFR0pKSkpKTE1MTExNTExOVVNLTE1USVBKSU1KSUpLS0pJSEdKS0lKZnJxc3RzdXJydnl5e31+fn5+fX9+f39/f36AgICAf4CAgICAgIF/gIGAgYCBgFZMTlBQTlJRUFBRUU44PT88PDo9PkFAQT8+PkA/Pj48PT0+Pj06TXpSOj09PTw8PDw7Ozo7PD49Pj8/QUA+P0E/QEBBQEBAPT8/PTw6Oz09PD9AQUJCQUBCREZGRkdGR0dISUtMTExLTEtKS0lKSk1MTEpMS0lISUxMS0lJSElLR01tcHF1dXR1c3V4eXl8fX5+fn5+fn5/gH9+gIB/f39/gH+AgYCAgYCBgICBgYCCYUtPT05OT1BPT1BQTzo8Pjw9Oz8+PkFBPz0/Q0NEQT8+PUBIR0Beemk9PkNFPz9APTs9PT08Ozo9PkFBPz5AQD9BPz89PD48PTs7PD0+QUA/QD5AQ0NEQkRFSEVFR0hISEdGSUpJSUlJSUhKSkpKTEtKSklJSEhKS0tMS0lLSkpIVnBvcXNzdHR1eXp7e3x+f35+fn5+f39/f39/f3+Af4CAgICAf4GBgICAgIGBgIJtTFBRTk9QTk5PUFBPPjw8PT4/P0A+QEA/Pz9DRURIPztAY3x7dXN4bDk5PDk9PUA9Ojw7Ozw7ODk7Pz49PD07PEA9PTw8Pjs9PD0+QUBCQUBAP0JEQ0RFRkZGQ0VHSElJSEhJS0tMTUpKSUpNTUpLSktJSEhISEpJSktKSk5MSUlfcHFycnJ0dXZ6e319fX5/fn5+fn5/f35/f36AgIB/gICAgICAgYGAgICAgIGAgnZNTk5NTk5MTE5QTkw+QTw8PT8+QkM/P0FBQUJARXNiP2uFhISEgXlsOzk4ODo7PT8/PDs7PDs6Ojs+Pz89PDg6Pjw9Pj89Oz4/QEJDQkJDQ0FCQkFCQkRCQkRCRENGSUdGRkhJSUtNSklKSktMSkpJSkVESUlGRkhISkpKTEpGRmdwb3FxdHZ1d3t8fX18fn59fX1+fn9/foB+fn+AgH+AgICAgICBgYCAgICAgICBek5JS0tMTExFSUxOTTw/PDw9PkBAQUE7QkNCQz9NdHptgICDgXuDfnBAPT0/Pj0+Q0Q/PDw9Pj89PT5BQ0A8OTtBPz4+QT07P0JAQkNCQENDQUNBPT0+QD0/QUFBQENFRUBAQ0JDR0dFRENGRUZGR0VEQEFHR0ZDRkRHSEpHQz5IbW9wcHF0dXZ5fHx8fHx+fn1+fn5+fn5+f36Af3+AgICAgICAgIGAf4CAf4CBgIF+UUhLTU1NS0pLTE9RQD8+PkFBQEBBR0FCRENFQE5zdYB+e4ODfISEaEFBQENAQD9AQD49PD1BRUFCQkZIQz08QERDQUE/Pj1AQT4+Pj88PkBER0VAPkBBP0BDRkVDQkNDQEJEREJERUFCPkFCQkFCQEA9QUJDRENDQUNFR0E/PVZwcHFwcnV1d3p8e3t8fX9+fX19fX1+fX5+fn9/foB/f4CAgICAgYCAgIB/gIGAgX5SSEtNTUxLS05OUlVEQkBDQ0FBQkBCQ0BAQUFASXJzf359hIWFhYZdPkNDRUA/P05hX0pAQ0VJSUlJTU1LRUNGR0hFR0VFRUREQ0E/QD4+QkZKSkdFRUdGRkpOTktKSUdHSEtNSkdHQ0REREVEQUJCQ0BDREVEREVERUZDQkFEZW9wcXF0dnV4e3x6fHx+f319fX19fn59f4B/f39/f39+gIGBf4CBgICAgH+AgICAfVJJSUpKSEpKTE9SU0dGRUdIREdIREA+PDs+QEVEZnaAhIWFhYeHiYJKREVEQ1d1homKflhHSEpMTE1PT0xIR0hHSElJSEhHR0hIRUNFRUVFRkhKSkZFR0lKTU9PTU1LSktKTU5LSUhHSElIR0ZFRkZGREZIR0VFSEhGSEdIRlFubnBxcnZ2eXt7e3p9fX5/fX19fX1+fn1/f39/fn5/gH+BgYGAgICAgICAf4GBgIB8UEhHSElGR0lKTU5OSkxJSUpLTE5KRkNBQkNGSkdZeYKFh4SBhomJjGFAQlV0h4mHh4aHgldJTE1MTU5MSkdHR0dER0dHR0ZIRkhFQ0RERkVEREhIQ0NDR0pKS0xMTExMTElKS0pKSUlJSEpISEdISUhHR0hGRkZISklJSUlIXW9vcXJzd3d6e3t6e319fn59fX19fX5+fYB/f39+fn+BgIGAgYCAgICAgIB/gYCAgHxNR0ZIRkVGR0dKS0pMTUxLTU5NT0tJSEhKS0tMTExghIeIg4GDh4iJe1dshIeGhoaHh4eHfFBLTEtIR0ZGREVDQ0BBQ0NDQ0ZGRUJAPj5AQUFAQkQ/Pj9ERkhERUdJS0lJR0hJR0lJSkpJSEZKSkpKSUpJSkpKRklMTEpKS0tmb3BzcnR2eHl7e3t8fH1+fn19fX19fn59f39/f35/f4CAgICAgYCAgIGAgICAgICAfU9GRkdGR0hHRUZHR01NTUtMS0lHQ0NDRElLS0xMSWSHh4WBg4WAgYGDhIaFhISFhoaHh4aKdUlJRkI/P0A/Pz88PDw+Ojo8QUFAPjw5OTg8PD07Pjs5Oz9BQkFBQ0NDQEFCRERCQ0ZISUhISExNTEdJSk1NTk1KSktLSkxNU2xvcXRzc3d5e3t7fH19fn9+fX19fX1+fn5/foB/fn9/gICBgIGBgICAgYCAgIB/f39+UUZFRkdJSUdEQ0VGTk1MSklIRT85Oj5ARUhISkpKbIeGgn+Dg4GBg4ODhIWFhoeIiIiJiYyOZkJCPTg4Ojo5ODc4ODk2NDc5Ozw6ODU2Nzc4OTc4NzY4OTs7PD5AOzk5OT09Pjw8PUFERUhKTUxMR0lIT1JRUFBOTE1NT1Fdb3BydHN1eHp7e3x8fn5+f359fX59fX5+f39/gH9/f4CAgICAgYCAgICAgICAgIB/f39RR0ZHSEpIRkVGR0hMTEpJSUdDQjU2OjxDQENHSUlphYGAfoCChISEg4OEhomKi4yLiomKi4yJVDs4NjU2NzY2NjQ1NzYzNDY4Ojg3NjU2NTY3Njc3ODo3Nzc4OTs3NTg5OTg5ODc2OjxAR0ZJRklGRUZPU1JTU1JPUFBSVGVwcXN0dHd5e3t7fH1+fn5/fn19fX19f39/f3+Afn+AgICAgICBgICAgICAgICAgH9/flJISEhJS0lHSUpJSkpLREVIRUJANTc4OD06PUVDRXWFf4CBg4ODg4ODhYmKiomJioqKiouJiYqBSDY3NjQ2ODg3NDU3ODQ2NzY5OTc2Njc2NTo5Ojo6PDg5ODk3Nzc3OTo5ODg3ODU4OTtBPT4+QkE/QUtMT1FQUU9PT1JXa3JydHR1d3l7e3t8fX5/fn9+fX19fX5/f4B+fn9/f4CAgH9/gICAgICAgH+AgICAf39+VEhHSUlMTUtKS0tMSUg/QEFAPDo1Nzk4OTc7QjlHgYOAg4SFhISEhIaJioqIh4iIiIqKjIqJiYx6Pjo4ODs8PT45Ojs8ODk7OTo7Ojk5Ozo5PT09Pzs7Oz06Pjs5Ozs8Ozw8OTs8ODo6Ozo5OTk8Pzw9QUJESUpNS0pMTFdvcnN1dHZ4e3t7fHt9f39+f359fX19fn9/f35/f39/f3+Bf4CAgICAgICAf4CAgH+Af35URkVGSUxOTkxKSk1CPzo7PDs4OTk4OTo6Ojs/PFaGg4KDhYaFhYaIiYiHhoaGiImIiYuMi4mKioxsPDs+QkNFRUFBQUI+QEJAQD89Pj5APz4/QD9APT0/Qj9BQT9BPz1AQEA/P0E9Pjw7Ojs6OTs/PTs7PT1BQUNBQkNBWHFxdHR0dnl7e3x9e31/fn9/fn19fX5+f35+fn9+f4B/f4CAgIB/gIGAf39/gICAf39/flJFQ0FHSk5PTElHSzo4Ojs5Ojo8PTo7Oz09P0BCYIeDg4WGhYWEhomJiIiGhoaHiImKi4uKioqLiotePkRHSUtKSUZHR0RGSEdFQ0BAQ0VDQkBCQ0I/QERIRUNFREVFQUZFRkVGRkRAQj89QD49P0A+Pz8/Pj8+Pjo7PTxgcXJ0dHV3enp6fX19fn5+f39+fX19fX5/fn5+fn5/gH9/gICAgICAgICAf4CAgIB/f4B+UERAPUNIT01HRkJEOTc6Pjo8Oz4/Pz89QUBEREVkiIODhYWGhoaIiYmIh4aGhoeJioqLjI2MjIuKiohXSExNTUtOSklLSElKSklFQ0RGR0ZEQ0VGREJISUtIR0dGR0dFS0lLSUpLSkNGQ0NEQkFBQ0JEQ0NERENBPTs9QGhwc3R0d3d6eHt8fH19fn5/f359fX1+fn9+fn59fn+Af3+AgH9/gICAgICAgICAgH+AgH9PQT49P0RMS0BCQkE5ODw+Ozw7PkBAQT9CQ0hISmCGgoOFhYeHiImJiIiHhoaGiIiIiYqMjYyMi4uKjH9QTVBNS05LSkxJSUlISkZER0hISUVFSEZGRUxMTUlKR0dISUpPTU5MTE5LSEZHR0VFQ0ZGRkZERUhIRkNBP0BMbHB0dXZ4eXl5fHx8fX1+fn9+fn19fX1/f35+fn5+f39/f39/f3+AgICAgIB/gICAgICAf1FBPz4/RkdHPTxAQDk4PDs8PTo/QD5AQENGSkpQaIODhYSFhoeHiIiIiIiIh4eIiIiJioyNjIyMjIuKjXFNUU9NTExLTEpIR0VKSURKSEdMSkhKR0dHS0xOTExISElKTVBOUE5NT0tJR0lKSElESUhIRkZHR0lGQ0JBQ1VucXV2d3l7eHl6enx8fX5+f39+fn1+fX5+fn5/f36Af39/f3+Af4CAgICAgICAgICAf39/VERBQUJHSEI/OD9AOTo8OD0+Oz1BPj9ARUlLTVZzg4OEhIWFhoeIiIiIiIeGiIiIiImJjIyLjIyMi4uLi15RUVBNTk1LSkdGQ0dKR0xKR0tPTEtKSk1NTE9QTkhJS0xPUVFQUU9PSklKSkxKTEZHSEdGR0lGRUVCQEJCXG9yd3h5enl5eXp6e3t+fn5/fn59fX19fn9+fn9+f4CAgIB/f39/gICAgICAgICAgH9/f39VRUNFRUdHRUQ7P0E7PTw5QD4+QEJHR0FITE1RV3mFg4ODhISGiIiIiIiIh4eIiIiIiIqLi4uMjIyMi4uNfFdVUlJUUk9MS0pFRUZLT05PV1ZRUE9RU1JNU1RPTVNMUFNVV1JTUVBMS01NTUtOR0dKRkZISkRERUVCRENjcHV5eXp6ent6e3p7fH59fX9+fX19fXx9fn5/gH9/gICAf39/f3+BgYCAf39/gIB/f39/f1VGRkdHR0dIRj5AQj0/PT1CP0JDRlZORk9RUVVZfIaDhYWEhIeIiIiIiIiIiIiIiIiJiouKioyMjIyOi4uLZ1ZWa2FFUlFRUEo7OlFTUmB1XVVWVFZZWVJYWFJaZlBVV1pdUlRXUVBOUlBQUFFLS0tHSElIRUZJSElISWpydnl5enl6e3t8ent8fXx9f359fX19fX1+f39/f3+AgIB/f39/gICAgIB/f3+AgH9/f35+VEhKSUlHR0ZFPz9BQUVCQ0dFREVMWFJNVFZWWFt8hoWHhoWGh4iIiIiIiIiIiIiIiIiIlJyMioqMfWGKi4uHbFtkVTpYWFhTUD5AVlVZXGRgVllicl5dVl1aVkVRWVpbWV9UWWdSVVZYVVRWVE9PTUpMSklJTE1LT01UcHR2eHl4d3p6ent6e3x9fH5/fn1+fX19fn1/f39+f4CAgH9/f3+AgICAgH9/gH+Af39+fn5WSkpJSEdGRERCQT9ITUlNUEtJS1BUU1NYWlpcXHiFhIWFhYWGh4eHiIiIiIiIiIiIiImcnaCPiY5nO36MiYqLem5wWFpbWlJTUlZWVFpadYNZVX2QYVxYXV5XSVZdXVtbX1lIWVhZXF1ZWFlXUlFNUFFNTU9TUVFVUmJ0c3Z3d3Z4eHh6e3t8fX19f39+fX59fX1+fn9/gH9/gIB/f3+Af4CAgICAf39/gIB/gHh5fVlOS0lJSUZCREBBOlBRUVdYUFBPUVNUVFhYWVpbboGCg4WEhYaHh4eHh4iIiIiIiIiIiJaanJeIioFuhomIh4OKfmZZWVxYU1ZUV1JRV1ZjloBRZXJYWldfaFBgZlpbWFxoYkdPWmlnXFtcXV1XU05TUFBRVlZWVllab3N0d3Z2dHd4eHt7fH19fX5/fn59fn18fn9/f3+Af39/gH+AgH9/gICBgYB/gH1yfX9/b3R8XVNQT01LSkVDP0A7UFBaWltSU1FPUlJSVVNWVFdfdXiAhYSEhYaGhoaHh4eHiIiIh4eIh4ORjomJiIaFiIiGfYB7XFBWWFRSVFJRUUxPTUtmeVpdVFlVVl1aTFRaVVNUXlpYV1dXemtYWlxcXlNQUFBJTk9XVlhaWmRxdHZ2dHR2eHl5e3t8fH19fn99fX1+fX1+f39/gIB/f3+Afn56eHd2c3V7f3+AgHRrfn5rcnleW1ZVU1JPS0ZDREFNXoNsVlJTTk9RT1FVUlNSUlRjZHaAgoKDhISEhIWFhISDhoaGhoeIhn6JiYiHhoOHh4d5bXFWSUtOTktNS0hKREZIRUM+U2NVf1JRUU5LUlRSTU9ZUU1OUVNVVU1RU1JQTkxMSENJSFJUVVpcbXJ2dnVzc3d7ent7e317fX19fn19fX59fn9/f3+AgH99fX5+f39/f4B+e3Zzd31+fmR1fWlxdF9kXV5bWVVRTElMSWFsknRQUVNOUVJRUltSU1JRUlVVYnN7fH+AgYKBgX99e3uAf4OChYaHgoaGhoGEgYaFhnVfXUtDPkNDQ0NCP0RQQkRAQz5CSEdWQEhOTUddaVBIRk9GREVGSEdIQkNIR0hKR0NCQURAT1BNUmRzdXZ1c3R1enx6e3t7fHx9fHt+fX19fn5/f3+AgIB/f3x8fX+Af39/f4CBgH12dHt/bWh8Z25xZmllZWJcWFNRUFVSc1dlW09PTkxRU1FVWVNVUVFUUk9WYGtscnZ7e3h5dHJuc3RzeXh+foOAg4OCgIKAgoGBa0xHPj46Oz5AQD8/PmtRS2FFRkhJRUI/R0xNR01RVUlCRT8+PD08PT0/PT9BQ0I/Pjw9Qj5KTUZVbnV1dXN0dnh7fHp9fHx9fX19fH59fXx+fn9/f4B/f39/enl3eHd2dnh7foB+fXt4dnx1YXhnbHBqbGppZmBbUVFaXFleSUpQUU5LTFFSUVRVVVdRUVdWUFhbYl1hZ21tbG9raGBucmptbHF1e3p9enh6fHx4d3hkQkBAQT06QkNBQURCXF1Pe05PT05LTE1PT1FMS0xXTkhHQEI8OTc3NTk5PTs7Ozg5ODk/O0FHPlx0dXV2dXZ3eXx8fH18fH19fn58fX19fX9/f39/fn9/f314dXd6e3p3eXh1d3t8eXh1eXdjcWhpcG1ubW1oZl5PUF5cWklHUFJRT01QUU5RUlRWWFNSWVROWVpbV1ldXl5gZWBdXnF2a15gZ2t3b29sam9ubmxmYllHRkZIQkFGSUVFRkRNUlBhV1JYUVBTU1JVW09PUVZQTUlDRj46OjY0ODY5Nzk6MzY2Nzk2PEI9ZnR1dnd3eXl7fX18fHt8fX5+fnt9fn19f39/fn5+fn9/e3d1eX18enh8fHx8dHd2d3Z1d2tuaWhxbm9vb2prYFVXXlpXTUxUVFNRUVVPTFJTVFdYVFRYUkxYWVpWWFhWWFldV1dYaHNrXVZgdGthYV9dZGBfXllVUE1PTkxJR0pLSUhGQ1FQU1pXVFRNUVNZU1xlVU9TVFFOTElIQz9BOTk4ODk3ODg0NzU3ODU4OEducnV4eHp7e31+fX18e318fn5+en1+fH1/f359fn59f358dHR1e3hycW9vbnR4cXJzeHZ1cWZkZ3JucHBxbm1kXV9fWVdPUFhWVlNUVk9PVVZYWFlTVVRMS1RVVVVVV1BUVVdUVVJdbl5STllgW1ZZO0RVV1RbZkpMUFJST01NTk5OTEpGUFBVWVNUTkpPT1RTVFxWUlVTUk5NTElISEY/Pz06Nzg3NjU5OTY3NjY1V3FxdHd5ent8fX59fnx9fXx+fX15fX18fn5+fXx8fX1+fXxydnF4eHJ1dXFxbnBwb3B1dnRuamRkanBwcXJwbmZlZGNcXlJUWlZXVVRXVFJYWFlZWVJVT0pHUFBPT01SSk9QUFBOTk9UTE1JUFBTVFUyPFhNSUFRPWNgUVNRUE5QUVBOTk1QTlRSUFJMSUxLT1FQUVJTVFFST0xNS0xMSENCQT06OTg3NjtCNDU2NjtlcHJ2eHl7fHx9fnx9fH19fX18e3h8ent9fX58e3l9fH18e3B1b3d1cHV0b3N2cHFxcHV1dmNqZ2VXaHRycnFuaWlocFZWVFVYVVdVUldWVVpZWFdVUVNGRUFGR0dIRkpESEpIR0VITEhLSUdMTVBNRy9FX1I+M0A+am9hUlJRQEZUUVBRUFFOUU9QT0xKTExPUE5OUFFRTlFPSkxNTUtHRUVEQjs9PDw5PUc2Njc3RG5xdXd6fHt8fX18enx8fX5+fXt5dnh3eXl8fXp6dn17fHp6b3Fud3JwdnFtcHNwb3Bzc3N0ZmdgaFpXa3JzcmxtbWtuYmVQU1RSU1VPV1ZWWVlWUVFRT0A+Oz0/QEJBQ0BCRURBQEdIR0hGRkhKTUxER0NPUkM4RU5TXWdTUVNBR1VQT1FRUE1NTkxKTEtMTk9PUU1PT01JTUxJTEtMS0dGRkVEPEFBPjtARTs8ODlUcXN1eHt7e3x8fHt5fHp6fn58e3V0dXJ2dnp6eHpyfHt8eXltcW94cnF1bm5xcm9vb3Rzc3J1dGtnZ15lam1wa29xbWltY0xPTk1RU0xUVVRXV1VMTEtIPTk4Nzs/QT88PUFAQj0+RUhHREZGSUdLSkBGQUFARkhFSk9IUVJhXFFQUk5TT09QTExPTEpNTE1PTltWS01RT0hKSENJSkxMS0ZGRkQ/QkM+PEJGP0I/QWRxdHd6ent7fHt6end8d3l+fnt7cXN0cHJzd3R4eHN6e3l2d2xxb3ZxdHRsb3Fybm5vc3ZydHNycmtsZW5zaG1ubWxtbGprSUxISE9RSlFTUVRTT0tIQ0U9OTg3OT9CPjs+QUBAPkFESUVDSEdJR0lFQkI/PjxDQkFHSURNT2FlUU1PTldLTE5LTE1MTExLTk5TZE1KTFJJSUlFQUhKTE1OS0dJRkJBQkA/RUZFSERLb3B3enl5e3t6fHp3c3h0eHx8eXpucXJtbm9ycnZyc3h8eHZ2bXBtc291dGxwcHJvb29ydnZyVlZucWdseYRqbXFybm5qaG9ISkNHTE1JTVBNUE9HS0U/Qj05OTk6P0I/PEFCQkFEREdLRkRJSUdHSENDP0I/P0BBPkNFQ0tOUVRMSklNVEZJSUpMSkpLSUlMTU9QUlBLR0NMR0NDSkpMTU9NSUpJR0NDQ0RJSk1MSVpzbXh5eHp7e3l8dnJwdXJ0eXl2eGpxbmpsbG50dG1zdXtzdHhyb25xbnZzbnBvcnBvcHN0eWpOYGdzanR8eWdvc3FqcWhlcUhLQ0ZISEdKS0lKTERHQj0+PTo6OjtBQj89QkJDQ0hGSkxKRUlJRkdHQ0M7QUBCPkBAQ0VDSU1PR0hLRkhLREhJS01ISkxISEpMS01dUklIRE5HQkVLS05NUE5LTUpLRkdHSk1OUU5MY25pd3Z3e3h7en1xbWxza3B0dHR1aHBtamlra3RwbnR0eXByeXRvcnFvd3NvcXB0cnBydXR5a05WbXVscXt2aW5vaWp0aGRvRktDRkVHREVFRkVHQ0NAPjw9Ojs6OkBEQD5CQ0VFSUZKSkxGSUlHRkZDQjtCQ0M+QENDQ0VHTE5IS05IREhFSU1OTUdJTEdFRklJTE5LSkhFT0lDR01NTk1QTk9PTUxJSElPUlFSTlJmZ2Zyb3N4dXt6fGxoam9la3Btc3FmbWxoaWtsdG1wdXR3cW94dG90c3J2c3BxcnRzcnR1dXZ2WFZ1dWtvdHJrb3ZsaG1lX3BHSUNFRkVCQ0JFQERCPj8+Ojs7PTs9P0NBP0FDRkdKR0pJTEhHR0dGRUNAPUVFQj5BRENDRUdISUdNUElGRkdLTk9LRkhKRkVERElJSEtJRkhQS0RKTUxQTk9OT1BOSkpITVJVVFJPV2RhYW1ncHJvc3l6Z2VoaGNpbGdxbGZsbWdpa2xzbHB2dXRwbnZyb3Nyc3V0cXNzdXRzdXZ2dnl2dXR2bGt1dW1ydnFsbmxlck1HRUVHQ0JBQkQ9QkE+QT06Oj0/Oz4+QEI/QEJFR0pGSUdJR0ZGRkVEQkFBRkZDQkJCREVER0dIRkxRTElPSkpMS0lHSEVGRURDSUhIS0pHS1JNQ09PTlFQT09OT09LS0tQVVdWVVNYYF5daWFtaW5ocnNiZWZmZGloZm5pZm1taGtrbXJpcXZ1c3Ftdm5vcXJzd3Nyc3R1dnZ2dnd2d3Z2dHd1a3N1bnV0c3Fya2tzTUZGRUhCQkFERDxBQUBDPDg5PT46Pz0/Qj9AQERGSEVIRkZHRkZFQ0NFQ0RJRkNGRUJFR0VFRkdFSk1LSFFNSktISElFRklIRUNJSUpLTUtQU05EUVNRUVJOT01OUE1MTlNXVldYVlheW11kYGhiamlna19kZWZjZ2dna2dna21rbWxwcWd0dHVyc252b3FwcnR4cXNzdXZ1gpF5dnZ0eHV1d3hub3VvcnN1cXFpcHpNR0dHSEJCQkZFPEBDQkQ8Nzo9Pjs+OkBCPj8/Q0VGREZEREdFQ0VDREVGRkpFRUlHQ0dIRkhGRUNGSkpHTUpMS0hKTEZJSEtIRUtLTE1OT1JUT0lTVVRRVFBRTU5RTk1RV1pWWllWWl5aWGFgYGBfaGVjYGRlZ2dqaWhqZmhubGxvbXFwaXV1eHJycHVwcHBydXZwdXN1dnV7fn14dnR3dnZ2d3BsdXBtc3Vub3JzeU1ISEdJREFDSEU8QEVDRT04Oj4+PDw8QUI9Pz5BQkZDRUJCSENDREVGRkdHSUZHS0hDSEhHSUdGREhLSUdLSE1LSktMSExKTUtJTkxPTk9SVVZPS1VWVFFUUVJMT1FQT1RZWllcWllcX19eYGNeXGFja2JgZGdocoVoZ2lmam1ucG9uc3FqdHV4cnNzdHJucHF2cnF1cnV1c355jn11dXZ2dnZ4cml1cWtydGxxd3F1S0lLSEpFQkVHRTxAR0REQDk8PkA/Pj9DQjxAPkFBRkNFRUNIREZER0ZISEZISElLSkVKSEhLSEZGTEhISEpITExMTExJTUtNTk1PTFBQUVVWV09KVlZVU1NSUUxPUlJRVltbXV5bXF5gX2FgYmRdZGBlZmBlaGpjc3NmamhnbHBycW9zc25zd3dwdXZ0c21vcnVvcnNwdXJ2cnSBdnV1dXd2dXd0Z3Rya3Fya3J3b3ZJSkxJTEdCRURFPEBGRERCOz8/QUBAQERBQEI/QUNIQkVFRkdFSUVGRUlIRklISkxISEpKSUxKRkpLSElKSkdLS01NSkpNTE5PTk9MT1BSVVhWTU5UVlVTUlFQTU5UU1JXW15eX11dYGBhYWFgYmRlYmNoYmRpamd2i2xraWdtb3NxcHFwcHJ5d3J1dXRzbW1zc21xcm90dXRzcHN2dHV1d3Z1dXRlcXNrcHFqcnZvd0pNTEtNR0RDQUQ8P0VFRUM9QUFDQkJDRUFDREFBRUdDSEdIR0ZKRkNHSkdHSkZJTEhJSk1LTUxHS0lITEtOUUtSUUxTTUtOTk9QUFBUT1dYWFtOU1FXXFpTVlBOVFVUVFhaX2JiX2RhX2BiX2BlYWFjaW5oYmloaG14dmxoaW1vc3JwcXJycnZ0c3Vzc3Nua3NxbXByb3R2cnJxdXZ1c3d5d3V0dWNtdGtvcGpxdHB3TE1MTExHREFARD4+REVGQ0BDQUVEREZDQ0VHQ0JJRUJISklISEtGREtKR0hJSUlLR0pKT0tOTElMSEpNS1pmSmRcS2xSSE9OX25VbHNbcXBid2NSUGJ2dWh1Y2F2YFhucWJkdmluemZcbHRgbGpUX3d2aWpnaWZnbG1qbW9qbW5zcnBycnFyc3Jzc3J0cm5sdG9ucHFxdXVxcXN0dnZ1dXl3dXR0YGt0a3Bwa3FzcXlLTkpLSkZCP0BCPz1ERUZEQ0RCRUVERkJGRkdDREpERUpMTEpMTUdHTUpISkpIS0pJS0pOTE1NTExJTE1MW3NiZHBebGxVTU5mc11nZXFsbnRncGlfYVlubmJwcGJrampnb3F0ZXRub1xwdWdwTUpyeXZrYmBrZWVteG1rdmxucHNycHJxcHFycXJycnRybW1zbm5vcHJ1dHFzc3R1dXV0d3h2dXRibXVrcHBscnJxektMSUlHRUQ/QkI/PUJGR0JGQ0VERUVEQ0hIR0RFS0dHTE1NSk1MRkpOSElLSklMSkpKS01NTk1NTUtOTU1bcm9vbnBwbGtNUFFsV05pYnRycGFtb3ZcWWxRXG1tWnFta29teHh0c2lwXGBzbHFqVXV5eHBjXmtmYmdwcGppb3Bwc3NwcXBxcXJycXFycnRsbXJtbW5vcnV0cXRydHV1dHV1enZ1dGVudWtwb2xzcnJ5SktHSEVFRUJCQj0/P0ZHQkdESUVFREJGSUhIRUdLSkdNTU5LTU5HTE5JTEtJSk1JS0pKS09QTk5NTE5NTFxoZHVdbHFXbE5PUW1VWmtea2x2YWxkdFRlY05tWWxcdHBraWx4and1aHBdX3NraFdiY3d8b2NgZ2dhZGl0eWtubnFzc3BxcHFwcnFwcHBydWttcW1tbW9xc3Rxc3J0dnZzd3Z6dnV0aG91bHNvbXNydHdJTUdJREVFQ0FCPEJAQkZER0ZLR0VDQ0hLSEhGSkxMRk5LTFJSTEdNTUhOSklITkhKSklITk9OTkxKTk1KWnNwcG9xcW1sT1FSbllxa2dvb3Fxb210Xm5YYXRfbm9wb3Fyb251c3R0altddGN3eHJqbnpoYWFjZmJiam10dXBzdXZzcXBwcW9ydHt/fn13bGtxbmxtbnByc3F0dHN1dXR4eHl5dHVrb3VtdG9uc3N2dEhLSElCRUVFQUA+Q0NCR0NISU1JRkNGSkxJR0ZKTUxGT0pLV1JLR0tKSk5JSEpMSUtKSUhKTE1NTElLS0tTa2JaaV5famNyclpfWWpvX2VlVWtfY1thYlFgbWhcalxuaWlkW3BmZHBdWlxrW21xY3BzbGRnY2RnYGBrbXBwb3R5cnVxb3BxbnmFiIeHhoWAdnNua21tb25xcnR0cnR1dXZ5eHhzdW5xdW53cXJ1dHdzSEhGSURFREZBQEFFRERHQkhKTEdGREdLTElFRkpPTElPSUxbUUpGSEhLTUlISklLS0lISkdLS0tLR0hKSkxMTEtJS0xOVFtcVFBUTVBPTk9PVlFPT1FPT1FKSk5QUWRxaVRZV1tbXFVZW11YXVxcY2ZhYWZiY2VfX2ZrbWhtdHlydHJvcHB0hoeGhoaFhYaHg3pwbW1sa3FzdHRydHZ0dXl5eHV2cXJ1b3ZydHN1dXNHQ0VHRkZBRUM/Q0dERUdDSUtMSEZER0tMSERHSVBLTE9LTFdNSUVFSElKSElLSExKSEZISEpHR0lFRkxISUtOTElPXFdeT1xbYF5PWFlTXFxiXk1ZWk1YYVJLWWFaU2BkXWJYW2RkVlZYXFlaWFxWWVxeY19kYGFfZWhrZ210dHFxdHBxcoGGhoaFhoWFhYaGhoR9cmtpb3Jzc3N0eHl5eHl4d3h0cXhyeHNxcnVydE9CQ0RMTUJDREJESUVHR0ZLSktIRUVKSkpHRUhIUEpMTUpNU0lIRUFIRkpJS0tJTEpIRkVKSEVGR0VFSkdDSk1KS1RfWWBYYGFbYFVYWVReXlpfUllcUF5cWU5fXF5TW15jX1pdYGNgWV9iW2BeW1RYWFpfXmRiYmFjZWlla3Jwb3Bwbm93h4aFhYaCe4CFhYaGhYaFf3VxcHJyc3Z5eXp5eXh4eHdyeXZ4cnF4dnR2YVNKSk1JRUNCQ0ZHRUdHSUpKSUlERktLS0VGSElOSk5MSExOR0hGPkdHTElLS0pLS0lHRUlFRERFQUZKREBKS0lPW2NZXl5hX1JUU1dfYFxdWV5RWVxNVl9XS1FZW1FbX2FhXV5jYWBiYmJjY2VaUllWVVxbXmNgX19jZWJob21tbGxsbHWFf4SDeXV8hIWFhYaGhYWGhoN9d3JydHd5eXl5f359eXV5dnZybnp3dnhYUUpGQ0dFQkVHSEZHSElGR0pHSEZIS0lMRENLSk1NTExISkpISkc/R0ZOSktLTUtLS0lHSEREQERBSElBP0hJR09dYVpbZF1fVFFSWF1cXFxfWktXXExSXFlJTV5QUF1fYWNjY2NiXGRjYmRjZlhRVVRTXFhbYV9eX2FhX2Rsa21qamxudn51gXp8hIWFhYWFhYaGhYaFhoaGgnpyc3V1e4WHh4eGhYSBfnhwend2eFxSTUJASUZDRktJRkZHSEdHSkZGRklMSk5FQ0tKTE5KTElLSkhJR0JISFFNS0tPTUtLSUhHRUQ/RUJISEFBRkVEVF1ZXlhfWV9bXVVYWFBdXVFLSldeWF5bXVZaYFJRX19iYmBgYmJgY2JiZGRiWE9RUlJbU1xeXV5eX19fZGhnbGpubnB7e3x+e4CCg4SFhYWFhYWEhIWDhISHh4FzcneFh4eHh4eHh4eIh4WDgHx4XFNLQkFHRkRHTVJIQ1JLRkhISEVGS0pNUEVHSUlLTkxMSUxLSUlHREhLUU9NTFBMTEtLSElDRUFFQ0hHQkFGRUJWVUVcVF1TVl9YTlRVTlpbTUpLVWBhW19YX15hXU9ZYlxgYF9iY2JdYmJXX19UUE9QUVhSXVxcXV5fYGFmZmVsZm9vd3x7gHt9f4CEhISEhIWFhYODhYKDgoWFhnpvgYaGhoeHiIeGhoaFhYSFg35JTkZERkZHRElSY1BEV19JR0dIREZNSlBQRkpJSktOTEtLTEtKSkdFSk1RUU5PT01OTE5IS0FEQUNERkRDQURFQUxIQ0xMUE9PTEZNRkdJSkhHTExNT1FJTE9QUFNQTFFTUlVaWVdZWFhkVk9TVFBQT05QVVRcWVlbXl5hYWVmY2hja21xc3N6eX97en+EhISEhISEhIKEgH57gYOBfXuFhIaGh4eHhYWFhISEgoGAfUtJRUVHRkdES01eTEdIWU1ISEpIR05MUVFJTEpLS05OVU5PS0tMR0dLUFNTT1BPTk9OT0hLRWBFRF9MRGZjRE1bSF5cc21PTVZtWUxDUF9VbFdnSl1YVl5ETFFVTE1UVlFSVFhXVFhVVFxUUGZaaGhkWVRrVFdWVVtcXGBgYWJiYmBmaWdubGhyenx9foGEhISDg4ODgX19enJ7gXp7f4KAg4SEhYWBhIWBg4N/fnp7TElFRkZIRUVLT1RJS0dgVEhKT0pJT01SUUtNS0xPUlVST09KTE5HSE1RW1lPUFBOT1BQSktQf1FJfFlZcnNYUG1IcW5vYVZQcXFzUENrc21xc3BTb19bblhdVlxYVWtoVV1WY1pgWVpfVlVXf2p0dXVfYXZfWGJcXGZbX2FhYWJeYGJnbXBsYHB3dHiBgYKDg4J/fX6Adnh6bHZ+dHh+gHx+gIGChHyAg3p/gX9+d3dOSUVITU1CRExMR0lMRlJWTEtPSUtSWFdRTk9PTVFUTk9RUEtMT0dNUFNbWlRRUk9QUFBLSFp4XVR4ZGhZUlRRdmd0bHBibmZrUXJPTXdtanJwc3JxcnBvcIBdZXp1eHFxenF+c31rdX1iUmh8ZXNzb3NzfH1vfnlvf3JfYGBiYVphYGdrbmtibGZnbXd+gYCDfnt4d4B0dnppcn5udHx+d3h7foCDeHyBdXx/fHxzc05LRmBdR0FFTU1IS0tISlBPTU1KTlZeWVVMUVNOWVlMU1NSTkxQSVFSVFlXV1BUUFBQUUtHZnhsY3hxbVpKTFV5cHVtdWJudlBkZUpmdnFtd2+AamZ4eGlXclFoem1panp6fWx4en9wZ29YdnZqdnVwgGFzaH1pbHh8b19fX2NiW15iZGdpamRnYmNkbGxwcHN0c3NzeXFyeGJsdGdyeXtzc3V5foFzdXpufH15eHJuTkpTdE5DQkVQUElLS0pMUU9PT01QWmBaWEtUV1BhXlJWUVlTTVBJU1RVWFdXUFVQT05SSkxyb3V1cXVxZGhhVm5McXBeRmh5V3ZUS2h4fXhgeXtzbmFebW9kUmdydW5teXB3bHZzdHFsbVxzfnprbXl8bHVtfGtwdnV4Xl9fYl5dX2VkaWdoZWVeYmJpaWlqa25va3FubWpwYWNmZG93eG9tcHN5f25xcGp7enRyb21LS1tWSEdFR1JQSkxNS0xRUVBQUFFXXFlVTlZZVWZYUlJZXlRNTklUVFZXWVdPU05OTlFIUm1IaXdLYGR2dlVXbE9ubHtzYWpnf3ZVS1draH1sbWx4YFtwenteYHpzY3JveHFoZHxpcntdVEtsX3Z1a2l1e3ttfnhrfHBdXl5iW15iZGVnZWVlYlpjY2lra3JzcndnbWloZGdgYWxhZ3Nya2hsbXJ8a21oa3t0bW1rbU9HSktISkhIUlFMTlBNTFNTUk9TU1dSVlRQV1pWVlRUVGFgUU9OS1RTU1FWVk9OTE1PUEpIUU5QVUxLS1NUU1JUUFZVUVFOUVFYWFFOUFVUWFhYW1tVU1NXW1dYV1pQU1VXV1hRXVhWXVVTT1hSV1dXWFpgW2dyXltcW11eX2NaX2NjZWZkY2NiWWNjZmZmbW5tdWZmZ2NgZl9dZ2BkbGhmZ2tocHpoZ2drdWpoZ2lsUUlLS0xNS0pUUk1RUVBMVlZUUFRVWFVZVVJaXVZVVFdVWVhQT0xOV1RRTlVTTlBNTFFQS0pRUUtRTUtLT1JUUlFRU1NJSE1OT1FSUVFRVFZSWFdcV1NTUFJVVVZUWlFOU1JXVVRZVlRZVVNSVVNUVVhZV15aX2FdXFtaXFxgY1xdYmNkZ2VkZGFZYGFjYWJpaGluY2FkXl9jXVpkXGJtYV5mZmdtc2RpaGtrZWRjZmhQSktLTk9MTVRRT1RRUU1YV1VUVVdXV1pWVFxgVldWWVVYVFFQS09YU1BOVVBNUk5LU1BNTlVUTlFOTU5RU1BUUVNUVU5LTU9RVFRSUlFWV1VZWltZU1VSVFdXV1lbU09TVVdVVFlVV1lUUlJXVVVXXFlaYF1WWV9dXl1cXWBhXltiYmNoZmVkYlhgYGJdYGhlZmRhXl9dXV5aWl9aX2dgXl1dY2hrYWdmaGZkYGJjYVBLTUxQUUxPVFBQU1FPUVpZWFdYWlpYWFZdamRWWFlaV1ZUVFBLT1ZUUE9UUFBRTk1RUU9SWFRSUU9NT1NVTldSVFVVT05OUVNVVVRUUlRYVlpdXFpWVlFSV1hWW1tWUFNWVVVWWFRXV1RSUlhWVVpfWl5gXlZeXV5gXVxgYF9fWmJiZGhoZWRiWWJgYl5eZmRjYGJdXFxcXFlaW1hbYVteXV1fYl9fYmRkYmRfX2BcUE1OTlJRTVJTUFNUUU9VXFpaV1tbXFlaW2RxbWhkX1tZVlZYUk1NVlNNTlJPUVJPTFBTUlVaVVRQUExQV1ZRV1JTU1hNT1BSVFhVVVVTVVlYW15dXFtWUk9VV1ZbW1dQU1dVVlhVU1haVFNRWVdWXF5bX19gVWFcYGFeYGJfXGBdY2FjaGllZmBaY2BhX19lZV9gY1taXFtcWlpZWVdcWVxbYF5fW15eYWBfYlxZYFpRTk9OVlFQVVNQVVRTUFdcXFxYXlxfV1xeanF3eYBjXFtWVlhSTk9XU05RUVBSVFJMUVRTWVpXVU9STlNYVlRSVFJSWk9RU1NWW1ZWV1RWWlhdXlxcXlZTTlRWVlxcVlFUVlZYWVJTWVxUUlJcWFpdXl1hYWBXYltjYl5hY19cYmFiX2RnaWRoXlxkYGFgYWNlX2JfWVpeW1xbWVhZV1daW1phXF1bXVxcWl1gV1tbWlBPT09ZUFVVU1JXUlRQWl1eXVtgXGBVXF1panJ9c2xoXFVZV1FPUltTUlFUUlRVVEtSVlVbWVpTT1NSVlZVU05WUlNaUlRVVFhcV1hYU1hcWF5dWVteVFVOVldXXltYUVRVWFhYVFZYW1RTVl1ZXV1hXmNjXllgW2ViX2RkXl5jY2FdZWZpZWdeXWRhYGFiY2RfYl5YWl9bXFtYWFhYV1taXGBdW1tcW1haW15WXlldUE9PUlpQWlVVV1ZUVFReXmBeXmJcYFVdXmJreXRsfWxaVVpVUVFTXFRUVFVUVllXTFJaVl1bXFJPVVNYVlZTUFdSU1dTV1VWW11YW1lVWl5XX15ZXFpSV1JZWFlfWlpTVFZaWVpWV1lcVlRaXVxeYGFgZWRdXl1dZWFiZmReX2RjYFxnZGhlZWJfZGFfYWBiYl9gXldYXlpcXFpZWldWXVpdXltaW1xbV1lcXVZYV11TT1BXWVBdVVZZV1dVWF9gYWFgY11gVV1eYmVldYF6aFhZWlRWU1ZcWFdXVlZXXVhQVVxZXl1dVFNYUlhWU1JUWFJTVlRYWFhdXlhdW1VeX1hfX1hcVlJZVVlaWmFYXFVXV1paWlhZWlpYVl1eX15jYmJlZV1iXGBmYmVmZF9gZGJiW2ZjaGVjZmFmX19hYWFhYF9eVlVdWltcW1lcWVldW1tbWFhZW1laWl1fXVRZXVVOVFpWVFxUVldZV1ZcYGFiY2FkX19WW2BkYV96dW9oWlxaVlhVV1taWVtZWFlgV1BVXltgYVxUVVhQVVZVU1ZWUlNVV1paXF9eWl9cVl9fWl1eWV5WU1lYWVpdYlleVldaW1tbWltZW1lZXl9gYGRjZGVlYmRaYWZjZ2ZlXmFjYGNeY2NpZGRnX2deYmJjYWFgXl9YVFpaWltbWFtYWFxbWltXV1pYV1xbXGBdVl1dU1BWWldWWlVZVVhXWF5gYmFkYWRhXllZYWRiYGxmaF5cXVtXWFhZXFxcX1tZW2JWVFdeXWFjXFNWWVBWVlZWVlZTVlRYXVxfYGBdYV1XYF5bXlxbXlhWWFhbW19gW15YWF1cXV1eXFpcWFtfYV5gZGNkZmZmYlljZWVoZ2ReY2FgZWNdZmlkZWhfZl5jYmNhYWBfX1tYWVtZWlpYWVhXW1taW1dYWlRZXVxaYFxVXmJNUldZVldaWVtcWVdZXmBiYWRhZGFdXllhY2JfYWBhX1xcXVhXW1tdXV9fXFpdY1hZWF1gZGRfUlhZUFhWWFhYV1ZXVl1eXmBhYV9iXllhXV1eWV1eWVhWV1tcYF9dX1lZXl1eXmFdW1pZXF9iX2JkZGVmZ2diWmVnZ2lnY19jXmFmZFpoaWNmaWNlXmJiY2FgYF9dXVpXW1lZWFhaWVdaW1pZV1hWVVtdXV1gYGJieEtXV1xYV11cXF1aV1xdX2BiZGJiYV1gWGJjYmBjYWNeXF1cWFdbXV9dYF9dW2BkXFxYWmJlY2FSXFlPWFdZW1pZV1pZYF5hYmJgYWNfXGJdX11bX15ZWVVYXV1fYF9fW1peXmBiY1xbV1tdYGJiY2VkZ2ZlZ2RcZmhoaWZjYWJcY2dgXGlpYmhpZmVgYmFjYV9gX11dXFlcWVhXWFlZV1xbWldXWFBYWl1hY2Zmcmt/SllXXVpaX11cXlxYXVxeX2FjYmFhXWJbYmRhX2NiYl1cW1pXWGpxYFxgX11cYWNfXllZY2VkYVRfWlFZV1xdXFtaW1tkYWNiY2BiZGFgY15gXF5fX1pYVltfXVxhYV9dW2BhYmViX11TXF9gY2RkZmVnZmVmZV9mZ2loZ2RkYFtmZ15haGhiaGhmY2BiYGNiX19fXV1bWltZWFhYVlpWXFpaVlZVTFhXXGdpa2h1eIF2dnZ2dnZ2dnZ2dnd3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d4eHh4eXl5enp6enp6e3p6ent7e3t7e3t7e3t7e3t7e3x7e3t7e3t7e3t7fHx8fHx8fHx8fHx8fHt7e3t8fHx8fHx8fHx8e3t7fHx8fHx7e3t7e3t7fYmIhoqHhYKBgoOCg4OCgoKCgoKCgoKCgoGAgYCBgICAgYCBgYGAfnx8fHx8fHx8fHx8fHx8fHZ2dnZ2dnZ2dnZ3dnd3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3h4eHh5eXl6enp6enp6ent7e3t7e3t7e3t7e3t7e3t7e3t7e3t6e3t7e3t7fHx8fHx8fHx8fHx7e3t7e3t7e3t7e3x7e3t7e3t7fHx8fHt7e3t7e3t8iYmHiYaFgoGCgoGCgoKCgYKCgoKCgoKBgYGAgICAgICAgIGBgYB9fHx8e3x8fHx8fHx8fHx8dnV1dXV1dXV2dnZ3dnd3d3d3d3d3d3d3d3d3d3d3d3d3d3d4eHh4eHh5eXl5eXl5eXl5eXt7e3t7e3t7e3t7enp6e3x8fHx8fHt7e3t7e3t8fHx8fHx8fHx8fHx7e3t7e3t7fHx8e3t7e3t7e3t7fHx8fHx7fHt7e3uHiYiJhYSDgYKCgoODgoKCgoKCgoKCgYGBgICAgICAgICAgYKBgH58fHx8fHx8fHx8fHx8fHx2dXR1dXV1dHV2d3d3d3d3d3d3d3d3d3h4eHh4eHh4eHh4eHh4eHh4eHl5eXl5eXl5eXl5e3t7e3t7e3t7e3t7enp7fX19fXx8fHt7e3t7fHx8fHx8fHx8fHx8fHx8fHx8e3x8fHx8e3t7e3t7e3x8fHx8fHt7e3t7e4aJiYiFhYOBgoKCg4OCgoKCgoKCgoKBgYGAgICAgICAgIGBgYCAfnx8fHx8fHx8fHx9fX18fHjF1NLS0tLUk3t9fX19fYSMi4uLi454KSkqKiopKz0/Pj4+Pj5tgH5+f397pdfT09PT1r2GiYmJiYiNsbW0tLS0uFEmKysrKiVikoyMjY2OiX5/f39/f359fHx8fHx8fHx8fHx8fHx8fHx7fHx8fHx8fHx8fHt7e3t7hIuHh4aHgoGDg4GCgoKCgoKCgoKCgoGBgYCAgICAgICAgYCBgIB+fHx8fHx8fHx9fXx8fH19eNXn5OTk5OeZe39/f39+hpCPj4+Pk3kZGhoaGhocMTMzMzMzMmqCf4CAgHut6eTk5OToyomMjIyMi5G7wL/AwL/ESRQbGxsbFF2Wj4+QkJCLf39/f39/f319fXx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx7e3uCjYeIh4eDgoSDgYKCgoKCgoOCgoKCgYGBgICAgICAgICAgICAgH58fHx8fHx8fXx8fH19fX12fn9/f39/f3l3d3d3d3d4eXl5enp7eG5vb29wcHBycnJycnJyd3p5eXp6en6Dg4ODg4SBfHx8fHx8fYCBgYGBgIF3cnNzc3NyeX19fX5+fX18fX19fX19fX19fX18fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx7e4CMhomHh4SDhIKCgoKCgYKCg4KCgoGBgYGBgYCAf4CAgICAgICAfnx8fHx8fHx8fX19fX19fXZ0dHR0dHd0dnd6e3h7eHd2eHt4e3p5fXl4eHl4eHh5eXl5enp5eXl5enp6eXh4eXl5eXl7e3t7e3t7enp6enp5enx9fX19fX18e3t7e3t8fHx8fHx9fX19fX19fX18fH19fX18fHx8fHx8fHx8fHx8fHx8fHx8fHx8f4uHi4qIhIODgoKCg4KBgoKDgoKCgYGBgYGAgIGAf4CAgH+AgYF+fX18fHx8fHx9fX19fX19d3d3dnZ3fXh3d316eH14d3d5fHt9ent9e3d3d3d3eHh4eHh5eXl5eXp6ent7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7fHx8fHx8fHx8fHx8fHx9fX19fX19fX19fX19fX19fX19fHx8fHx8fHx7e3x8fHx8fHx8fHx+iomMjImFg4SEgoKDgoGCgoKCgoKBgYGBgYCAgICAgICAf4CAgH19fXx8fH19fX19fX19fX13d3d3d3p9eHt4fHx3e3h3d3d8fHx8fX58d3h4eHh4eHh4eHh5eXl6enp6e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3x8fHx8fHx8fHx8fHx8fHx8fX19fXx9fX19fX19fX19fX19fHx8fHx8fHt7fHx8fHx8fHx8fH2Kio2NioWDg4OCgoKCgYGCgoKBgoGBgYKBgIGBgICAgIB/gIGAfXx9fX18fX19fX19fX19fXd3d3d3fX55d3d4e3p8eXd3d3p8ent9fnx4eHh4eHh4eHh4eXl5enp6ent7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3x8fHt8fHx8fHx8fHx8fHx8fH19fX18fH18fH18fHx8fX19fX18fHx8fHx8fHx8fHx8fHx8fHx8foqJjo2JhISEg4KDgoKBgYKBgoKCgYGBgoGAgYKAgICAgH+BgIB8fH19fX18fX19fX19fn5+d3d3d3d5fHl7eHx9eXt5enp6fXx8fHx+e3h4eHh4eHh4eXl5eXp6enp7e3t7e3t7e3t7e3t7e3t7e3t7e3x8fHt7fHx7fHx8fHx8fHx8fXx8fX19fX19fXx8fHx8fHx8fXx9fX19fXx8fHx8fHx8fHx8fHx8fHx8fHx/iIeNioeFhoaDg4ODgoGBgoGCgoGBgYGCgYCAgoF/gICAf4CAgHx8fX19fX19fX19fX5+fn53d3d3d3Z4eHl3eXp4enh5eXl7eHp6eXx4eHh5eXh4eHh5eXl5enp7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t8fHx8fHx8fHx9fX19fX19fX19fX19fX18fH18fH19fX19fH19fX19fHx8fHx8fHx8fHx8fX+HiIyIhoeHhIKDhISCgYKBgYKCgoGBgYKBgIGBgYGAgIB/gIGAfHx9fX19fX19fX1+fn5+fnd3d3d3d3d3d3d3eHh4eHh4eHh4eHl5eHl5eXl5eXl5eXl6enp6ent7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7fHx8fHx8fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fHx8fHx8fX19fHx8gIeIi4eHiYaDg4SDg4KBgYGCgoGBgYKCgYGBgIGBgYCAgICBgX97fH19fX19fX19fn5+fn5+d3d3d3d3d3d4eHd4dnl5eHh4eHh5eXl5eXl5eXl5eXl5enp6enp6e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7fHx7fHx8fHx8fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fHx8fH19fXx9fXyBhoqKiYmIhIOFhISCgoGBgYGCgYGCgoGBgYCAgYGAgIGAgIGBf3x8fX19fX1+fn5+fn5+f394eHd4eHh4eHZxZGpeam15eXl4eHl5eXl5eXl5enp6enp6enp6enp7e3t8e3x8fHt7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3x8fHx9fHx8fH19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fIGFiYqJioeEhYWEg4KCgYGBgoKBgYKBgYGBgYCBgYCAgYCBgIF+fH1+fn5+fn5+fn5+fn9/f3h4eHh4eHh5bWRiZV9fXm95eXl5eXl5eXl5eXp6enp6enp6enp6e3t7e3t7fHx8fHx8fHt7e3t7e3t7e3t7e3t7e3t7e3t7e3t7fHx8fHx9fHx8fH19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18goWKiomJhISGhYSDg4KBgYKCgoGBgoGBgYKBgIGBgICAgICBgH58fX5+fn5+fn5+fn9/f39/eHh4eHh4eW5kZWdlZGJeZnh5eXl5enp6enp6enp6enp6enp6e3t7e3t7e3x8fHx8fHt8fHt7e3t7e3t7e3t7e3t7e3t7e3t7fHx8fHx8fHx8fHx9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXyChouJiIqEhYaEg4OEgoGBgYGCgYKCgYGBgYCAgYGBgIB/gIGBf3x8fn5+fn5+fn9/f39/f394eHh4eHl3Z2VkZWZkZWFfaXl6enp6enp6enp6enp6ent7e3t7e3t7e3t7e3t8fHx7e3t7e3t7e3t7e3t7e3t7e3t7e3t7fHt8fHx8fHx8fHx9fX19fX19fX19fX19fXx9fX19fX19fX19fX19fX19fX19fX19fX19fIKGi4eJh4SEhoSDg4WBgYGBgYKCgYGBgYKBgICAgYGAgYCAgYF+fHx/f35/f39/f39/f39/gHl5eXl5eWtlYWJlZWFlZV5ieHdze3p6enp6enp6enp6e3t7e3t7e3t7e3t7fHt7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t8fHx8fHx8fH18fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19g4aLhoiFhYaEgoOEhIKBgYGBgoKBgYKBgYGAgYGBgYGAgIGBgn98fH9/f39/f39/f3+AgICAeXl5eXl0Y2NlZGNmY2doZGZsZF5ze3p6enp6enp6enp6ent7e3t7e3t8fHx7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3x8fHx8fHx8fH19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX1+fn6DhouGhoaGhYODg4SDgYGBgYGCgoGBgYKBgYCAgYGBgYCAgYGBfnx8f39/f39/gICAgICAgIB5eXl6d2RhY2diYmRdW2VfYV1eYGFoeHp6enp6enp6enp6e3t7e3t7fHx8e3x7e3t7e3t7e3t7e3t7e3t7e3t7e3t8fHx8fHx8fHx8fH19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX1+fn5+fn5+foSFi4eGhoaGhIODg4KBgYGBgoKCgYKBgoGAgIGBgYGAgYGBgYF+fX1/gH+AgICAgICAgICAgHl5eW9vYmJiZF5jZ19dYWFgXF9kYlttfHp6enp6enp6enp7e3t7fHx8e3t7e3t7e3t7e3t7e3t7e3t7fHx7e3x7fHx8fHx8fHx8fH19fH19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX5+fn5+fn5+fn5/hIiLhoSHhoaEhIODgoGBgYGCgYGBgYKCgYCAgYGBgYGBgYGBgX5+fYCAgICAgICAgICAgICBeXpwXWJlZGJkXmZnZ2BZYmJhY2VfXF1ze3t6enp7e3t7e3t8fHx8fHx8fHt7e3t7e3t7e3t7e3t7fHx8fHx8e3x8fHx8fHx8fHx8fHx9fX19fX19fX19fX19fX19fX19fX19fX19fX19fn19fn5+fn5+fn5+fn5+foCFjIqEhYaGhYODg4SCgYGBgYKBgYGBgoKCgYCBgYGCgICAgIGBf35+gICAgICAgICAgIGBgYF5emxiZGdjYmdmYWBgZGFiZWRjZGNeXGJ1fHt7e3t7e3t7e3x8fHx7e3x8fHx7e3t7e3t7e3t7e3x8fHx8fHx8fHx8fHx8fHx8fHx8fH19fX19fX19fX19fX19fX19fX19fX19fX1+fn5+fn5+fn5+fn5+fn5+fn9/gYeMiYWGhoeFg4SDgoGBgYGBgYKBgoKCg4KBgIGBgYKBgYGCgoF/f36AgICAgICAgIGBgYGBgXp7dGdnZmZkZGZmYF5fYWNlaGRlXmJkYHR8e3t7e3t7fHx8fHx8fHx8fHt7fHt8fHt7e3t7fHx8fHx8fHx8fHx8fHx8fHx8fHx8fH19fH19fX19fX19fX19fX19fX19fX19fX19fX5+fn5+fn5+fn5+fn9/f39/f3+CiYqIhoaIhoWDhIOCgYGBgYGBgoGBgoKCgoGAgYGBgoKBgYKCgX9/f4GBgYGAgYGBgYGBgYGBenptaGNjZ2ZnZWdmZmdiZWRlYmdbYmVgdnx8e3x8fHx8fHx8fHx8e3t8fHx8e3x8fHt7fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx9fXx9fX19fX19fX19fX19fX19fX19fX19fn5+fn5+fn5+fn5+f39/f39/f39/f4SJioiGiYeFhYSEg4KBgYGBgYGCgYKCgYGBgYGBgYKBgoGBgICBgH9/gYGBgYGBgYGBgYGBgYF7emlpZGNqZmFgZmVjY2NnaWRjYmBiZGJ0fXx8fHx8fHt8fHx8fHx8e3x8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fH19fX19fX19fX19fn5+fn5+fn5+fn5+fn5+fn5/f39+fn9/f39/f39/f3+AhIqMiIeJhoSFhYOCgYGBgYGBgYKBgoGBgYGBgYGBgoKBgYGBgYGAgH+BgYGBgYGBgYGBgYGBgXZzZWRnY2RmZWJlZmdkZmhmZWNgYGNkYHF9fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fXx8fHx8fHx9fX19fX19fX19fX19fn5+fn5+fn5+fn5+fn5/fn5+f35+f39/f39/f3+AgICFioyJiIqJhoaDgoKCgYGBgYGBgoGBgoGBgYGBgIGBgYGBgYGCgX+Af35/foCCgoKCgoKCgoKCc3NnZWRkZWlqaGZnZ2NhZmZlZmdmZWVjdX18fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fX19fX19fH19fX19fX1+fn5+fn5+fn5+fn5+fn5+fn5+f39/f39/f39/f39/gICAgICAgIWLioqJioeHhoSCgoGBgYGBgYKCgYKBgYGBgIGBgoKBgYGBgYGAf4B+dHRzdX1/goCAfn5/gYB0cmdkZWNmaWppZWNlY2BmZGRnZ2JiZWFwfXx8fHx8fHx8fHx8fHx8fHx9fX18fHx8fHx8fHx8fHx8fHx9fX19fX19fX19fX19fX19fX19fX1+fn5+fn5+fn5+fn5+fn9/f39/f39/f39/f39/f39/f4CAgICAgIB/houLiouLh4eHhIOCgYGBgYGBgYKBgoKBgYGBgYKCgYCBgYGBgoCAgH5zc3NzdHV4dXV0dHV2dXVwZmNmZWhoaWdoZ2VmZWJfZGVmY2BiZ3d8fHx8fX19fX18fHx8fH19fX19fX19fXx9fXx8fX19fX19fX19fX19fX19fX19fX19fX19fn5+fn5+fn5+fn5+fn5+fn5+f39/f39/f39/f39/gIB/f3+AgICAgICAgICHjIyIi4qHh4eEhIKBgYGBgYGBgoGCgoGBgICBgoGBgYKBgoKCgYCAfnNzc3Nzc3NzdHR0dHNzdW9jY2FnZWhoZ2pmZGVnZmhmY2JlYl5ieX18e3t8fX19fX18fHx9fX19fX19e3x9fX19fX19fX19fX19fX19fX19fX5+fn5+fn5+fn5+fn5+fn9/fn5+fn5+fn5/f39/f4CAgH9/gICBgICAgICAgYCAf4CAgYGAgIeLi4iNiYiJhoSFgYGBgYGBgYKCgYKCgYGBgIGCgoGBgYKBgoKBgIB+dHNzc3Nzc3Nzc3Nzc3N1cmdlZWRlamhoZ2ZpaGdjZWViZGNoZGd7eHVzc3R2dnl4dnR0dHZ3d3d2dHR0dXV4d3h4d3d6e3x9fXx9fn5+fn5+fn5+fn5+fn5+fn5+fn5/f39/f39/f35/f39/gH9+fHt7fX58eXl2dnZ5fHx6end2d3l7fXt4hIyMioyHh4iEhYSBgYGBgYGBgoGBgoGBgYGAgYKCgYGBgoGBgoGAgH51c3Nzc3Nzc3Nzc3Nzc3VzaGVnaGVrbGhqZ2lqZ2dnZmRkYmVkbnV0dHNzdHNzc3Nzc3Nzc3Nzc3NzdHNzc3Nzc3Nzc3N0dHV1c3V3eHl7fn59fn98f39/f39/f39/f314fH5+fXx4dXZ3eXd4dnRzc3N0dXRzc3Nzc3NzdHNzc3R0c3R0dHODjI2KiYeIhoOGg4GBgYGBgYGBgYGCgYGAgYGDgoKBgYCBgYGBgICAf3VzdHRzc3Nzc3Nyc3NzdnZpY2hqaGpsZWZpbGhgZmVkY2BkZGZ0dXV1dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHRzdHRzc3Nzc3R2dnV1d3V4fH9+fX9+fHp4dXN0dXV1dHNzc3Nzc3N0dHR0dHR0dHR1dXR0dHV1dHR1dXR1dXV1dIaMjYuIhoeEhIWCgYGBgYGBgYGCgoGAgYCBgYKCgoGBgIGBgYGAgIB/dnNzc3Nzc3Nzc3Nzc3N2dnNnZ2pmaGdmaGhmZGlnY2NnZWVmcHZ1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dHR1dHR0dHR0dHRzdHR0dnV1d3Z0c3R0dHR0dHR0dXV1dXV0dXV1dXV1dXV0dHNzc3N0dHNzdHR0dHR1dXR1iY6MjIqHh4SEhYKBgYGBgYGBgYKCgoGBgICAgoKCgoGBgYGBgYCAgH93c3Nzc3NycnJyc3NzcnZ2dW5kXWNnZWlraGVoZ2dqamlnZXB2dXV1dXV0dHRzdHR0dHR0dHV1dXV1dXV0dHV1dHR1dXV1dXV1dXV1dXR0dHV1dXV1dXV0dHV0dHV1dXV1dXV1dXV1dXV1dXV1dXV0dHNzc3Nzc3N0dHNzc3Nzc3R0dHR0dHWKjoyMiYaGhIeFgoGBgYGBgYGBgoKBgYGAgYGCgYKBgYGBgYKBgYCAf3hzc3Nzc3JycnJyc3NzdnZ3d2liaGhnamtpaGZkZGVmaWhwdXR0dHRzc3JxcnJ0dXV0dHR0dHR0c3NycXFxcXNzdHR0dHR0dHR0dHV0cnJyc3R0dHR0dXV1dXV1dXR0dXR0dHR0dHR0dHR0dHR0c3Nzc3Nzc3Nzc3Nzc3N0dHN0dHR0dHR0dYuOjImGhYWFh4SCgYGBgYGBgYGBgoKCgYGAgIKCgoGBgYGBgYGBgIB/eXNzc3NycXJycnJzc3N3d3d3bGpoZGhpa3Z6a2VmZWhnbXJzdHN0c3JwcHBxcnN0dXR0c3NycnNycXBvb29vcHFzc3NycnJyc3R0dHNxcHFyc3R0dHR0dHRzc3Rzc3NzdHR0dHRzdHR0dHR0dHRzdHR0c3NycnFxcnJzc3Nyc3NzdHR0dHN2jZCMh4eFhYSEgoGCgoGBgYGBgYGCgoKBgYGAgYGCgoGBgoKBgYGAf395c3NycnFxcnJycnNzc3d3d3dzc2pnaWloeX99cW51bG5wcXJycnFxcG9wcXFxc3Rzc3NycXFwcG5ubm1ubW5ubnBxcnJycnJycnJzcXBvb3BxcnJzc3JxcnJycnJycnJycnJzc3Jzc3Nzc3Nzc3Nzc3Jxb29ubm9vcXJzc3Jyc3NycnNzcnaPj4uHhoWFhYOCgoKBgYGBgYGBgYGBgoGBgYGCgoKBgoGCgYGCgX9/f3hxcHBwcXFycnJyc3Nzd3d2dnd2cnF0c252f352c3hwcHBycnJycXFwcHFxcXFyc3Nzc3FwcXBvb25ubm5ub25vcHBxcXFxcXBwcXJwb25vcHFxcXFxcHBxcXFxcXJycnJycnJycnFxcnFxcnJycnFwb29ubm1ubW5vcXJycnJycnJyc3JxeI+OjYaDg4aEgoOCgoGCgYGBgYKBgYGCgYGBgYKCgoKCgoKBgYKBf4B/d29wb3BxcnJyc3Nzc3J2dnZ2dnZ3dnZ1c3l/fnd3d29wcXFxcXFxcHBwcXJxcnJzc3JycXBwb29wb29vb29vb29wb3Bvb29vcHBxb29vcHBwcHBvcG9wcHFycXFxcnJycnFxcXFxcXFxcHBwcHBxb29ubm5tbW5tbm9wcXFxcXFxcXFxcXB7j42NhoODhYOCgoKCgYKBgYGBgoGCgYGCgoGCg4KBg4KBgYGAgYF/f392bm9wcHBxcXFxcXBwcHZ2dnZ2dXR0c3NxfYB9fX9zb3BxcXFwcHBwcXFwcHBxcnJxcXFwb3Bvb3Bwb29wcG9vb29vb29vb3BxcXBub3Bwb29wb29wcnJycnFxcXBxcnFwcXFxcHBwcHBwcHBwb29ubm1ubm5ubm9ub3BwcHFxcXFxcXFxcIKRjoqEhIOFhIOCgoGBgoKBgYKBgYGBgYGCgoKCgoKCgYGBgYCBgX9/gHVvb29wcXFxcXBwcHBwdnZ2dXRzcnJycnGAgoCBeXBwcHBvcHBwcHFxcXFwcXFxcXFxcG9vcHBwcHBwb3BxcHBvb29wb29vcXFwcG9wcG9vb25vcHFxcHBwb3Bvb3BwcHBwcHBwcHBvb29vb29vbm5tbW1ubm5ub25vb3BvcHBwcHBwcHBwiZCMiISDhIaDg4KCgYGCgoKCgYGBgYCAgYGBgoKBgYGBgYGBgIGBgH+AdG5vb3BxcXFwcG9vcG92dnVzcnFxcXFxcICDg39ycHBwcHBwcHBwcHFxcHBxcXFxcXBwcHBwcHBwcHFwcHBwcHBwcHBvcHBxcXBwcHFxb29vbm9wcHBvb29vcHBvb3BwcHBwcHBwcHBvb29vbm5ubm5ubW5ubm1ubm9wcG9vb29vb3BzcXWPj4yJg4KFh4ODgoKBgoGCgoKBgYKBgYGBgYGBgYGBgYCAgYGAgYGAf4B0b29vbm9vb29vb29vb3Z1dHNxcXFxcXJygIKCgXRxcXFxcXFxcXFxcXFxcXFxcXBxcXFxcHFwcXBxcXFwcHBwcHFxcXBxcHBwcXBwcHBwcHBwcHBwcHBwcHFxcXBxcHBwcHFwcHFxcHFxcXFxcXJxcnFwcnRycnR0dHR1dnRzdHR0dXd3gpCPi4iDgoaHhISCg4GBgYKCgoGBgoGBgYKBgYGBgYGAgICBgYCBgYB/gHVvb29vb29vb25vb29vdXRzcnJycnJycnKDg4OCdnFycnFxcXJxcnJxcXJycnFxcXFxcnFxcXJycXFycXFxcXFxcXFxcXFwcXFxcXFxcnNzcnJyc3V1dHR0dHR0dHV2d3d3d3d3eHh4eHd3eHh4d3Z3dnV2dnZ2d3h6e3x7e3t6enp6enyGkI2LiIODiIeHhYODgoGCgYKBgYGBgYKCgoGBgYGAgYCAgYGAgIGBgH+Ad3FxcXFxcG5ucG9wcG92dHV1c3Nzc3NzdYiDgoN5cnNzcnJyc3Jyc3NycnJycnN0cnJzcnNzc3Nzc3Nyc3N0dHV1dXV1dHV3eHd3d3d4eHh3eHh4eXl5eXl4eHl5eXp6e3t7e3t6enp5eXh3d3d1dnV2dnd5enp7fn5+fX1+fn5/f35+gIyQi4qHg4WIi4iEg4SDgYGCgYGBgoGBgoKCgoKAgYGBgYCBgYGAgIGAf4B8enp5eXx5eHh2dXZ2dHl2d3h3d3Z3dnZ6f3x+fnx2dnd3dnV4enh4eHh3d3d2eHx5eXx6eXl8e3l5eXh4eXl6enl5eXh4enp5eXh4eHh3dnd3eHh3eHh5eXp7e3p8fH1+fX9/f359e3t7e3p5enl5e3t/foB/fn5/fn19fX5+f35+fn6AjpCNioeEhoqLiIaGhIOBgoKBgYGCgYGCgoKCgoCBgoKBgYGCgYCBgIF/f4B/fn19fX9/f318e3t7eXh4eHh5eXl4eXh5eXl4enp6enp6e3t7fH1+fHt7ent8e318e3t7e3t7enl4eXh4ent6enp5eXp8fHt6enx8fHp6ent9fHx+fn+AgoGAgYKAgH9/gYGBgIB/f35+fn5/fX1+f4CAf35+f39+fn9/f39/gH+Af4OQjoyHhoWIi4yIh4aFg4GCgYGBgYKBgoKCgoKBgYKDgoGBgYGBgIGBgIB/goOCgoGBgX99f39/f4F6enh4d3h4eHh5eHh5enp5e358enx9fXt8fX19fHx8fnx9fn5+fn59fX9/f3x8fYGDgYCAf318fXx9fXt9fXx8fH19fX1+gYGChISDgoB/gYGBgH9/f4B/f39/f39+fn9/f39/f35+f3+Af39/gICAf4CAgICAhJCPi4eGhoiLi4mKhYaDgoKCgYGBgoGCgYKBgYGBgoOCgYCAgYGAgIGBgH+ChIKCgICAgH9+fn+AgH9/fn18fX19fYB/fX+Af35/gH9/fn9/gIGBgICAf3+BgICAf4CBgn9/f4CAf35+f39+f39/fn5+f39/gYB/f4CBgYCAgYOEgoGCgoGCgH+AgYCBgYGAgH+BgICAf39/gICAgYGBgIGBgYCAgICBgoGBgYCAgYGFjo6MiYaHiYyLi4qGhoOCgoKBgYGCgoOCgoKBgIGBgYKCgICBgYCAgYGAf4KFg4KBgYCAf39+fn+AfX5+fn19fX5/fn9/f35+fn+AgYCAgICAfn9/fn+Af3+AgH9/f35/f39+fn59fn9+fn9/f35/gIGBgoKDg4KCg4KBgYKDg4OCgYGBgYKBgoKCgYKBgoGBgYGBgoKCgYGCgYKCgoGBgoKBgYKCgoKCgYGBgoKCgoaPkY+KiImKjY6NiYaFgoKCgoKBgYKCg4KCgoGBgYGBgYF/gIGBgYCBgIF/gYWEg4KCgoGCgYCAgIB8fHx7fH18fH9+fn9+fn5+f35+f39/f39/f35+foB+fn5+fn9/f39+f39+fn5/gIB/gIB/f39/f3+BgYGCgoCAgYKDg4SDg4ODgoKCgoKCgoKCgoKCgoGCgoKDg4OCg4ODgoKCgYKCgoODg4ODgoKCgoODg4KCh5KTkIuKi4uPj42Kh4SCgoKCgYGBgoKDgoKBgYGBgIGBgICAgYGBgIGAgYCAg4SDg4OEg4ODgoKCgXx9fHx9gn1+f4GCiIGCgoSCgYGDg4GBgYKDgYKBgYCAf39/gICAf3+AgX9/f39/gYCAgICAgH9/f3+AgICAgH9/gYODhYSEg4SDgoKCg4OCgoOCgoODg4ODg4SDg4KEhYWDg4SEgoKDhIOCg4ODg4OCgoODgoCKlJOPioqMjpCPjYuGg4KCgoKBgYGBgoOCgYGBgIGBgoGBgICBgYGAgYCAgH+BgoODg4SEhIOCgoKCfXx8fn6AgYOAg4OChIaFhoaFhIWFg4ODg4SBgYKEhIKDgoeDgoKAgoGBgoKCg4KCg4KDgoODgoGAgIKCgYOCgYKCg4OEhYWEg4OChISEhIOEhISDg4OEg4ODg4OEg4SDhIWEhISDg4ODgoKCgoKCgoKBgYKCgo+UlI+Njo6RkY6KiISCgoKCgYGBgYGCg4GBgIGBgYGBgYCBgIGBgYCBgICAgIKChIKChIOCg4ODgoJ9fX2AgH+AgoGDg4ODhIaEhIOEhYWDg4GBg4OBgIKDgYKFhYaFhoaHhoaGhoeHh4aGhoeHhoaEgoGCg4SDg4ODg4ODhISFhYWDhYSFhISEg4KBg4OCg4SEg4KCg4SCg4ODg4OCgoKCgoKCg4OEhIOFhYWFhoaIk5OTkI+Pj5KRjIqIgoKCgoKBgYGBgYKDgoKBgIGBgYGBgICAgYGBgICAgICAhISEgoKCgoGBgoKBgX+AgYOCgICAf4CCgoGDg4KCgYODg4SDg4KDhISCgYGBgoSFiIeHh4aGiIeHiIiHh4eIiIiFhIOBgIGBgoKCg4GCg4SEhYSDg4OEg4OEhIOBgYGCg4OEhISDg4ODg4OEhIODgoSDg4ODhIWFhoeHh4eIiIiJiY6TkpKOj46Qko+LiYeCgoKCgoKBgYGBgoKCgoGBgIGBgYGAgICAgYGAgIGAgICDg4KCgYKCgYGAf4CBhYWFhoOCgYB+fn+BgoSCgYKDhIOCg4ODg4KDhISDg4OBg4SFhISFhYSDg4SFhYKEhIWFg4KBgH9/gIB/gIGEg4OEhYWEgoKCgoOCg4OFhIKDhISEhYaGhoaGhoWFhoeHhYaIh4aHiIeGhoaIiYeGhYaGhoeIkZKSkI6QjpCRjImHhYGBgoKCgoGBgYGBgoOBgYGBgYGBgICAgICBgYCAgICAgISEg4KBgoGAgYGAgYKIh4aHhYSCgH99fX6AgH+AgYGBgYGBgoKBgY+IgYGCgoKBgYGCgYKCg4GBgICAf4GAgH+AgH9/gIGBgYKCg4OEg4OEg4OCgoGBgoODg4SEg4SEhIOFhYaFh4eIh4eHh4eHh4eGhoaGh4WFhYaGhIWEhIWEhYaSk5GOjo+OkI6JiIeEgoKCgoKCgoGBgIGCgoKCgoKCgYGBgYGAgYGBgICAgYGAgoSDg4KDgoGCgYKDg4iHh4iHhYSCgX5+gICAfn5/f4CBgoGDgoCEmZGCgH+AgIB+gIKBgIGCg4OAf39/gICAf4CAgICDg4KDg4ODgoOBgYKCgoOCgYKCgoOCgoSDhISDg4SEhYWFhYaGhoaFhISEhYWEhIWFhYSEhISDhISEhISEipSTkpCQj46NiIaFhIOBgYKCgoKCgYGAgYKCgoKBgoKBgYCBgYCBgYGAgICAgYGAgoOCgoOCgoKBgoOCiImJiYiHhYSDgYKEhIOBgoKCg4SCf359fYiblYWEgoSCgX+AgoGCgoGChIOBgYGBgoOCgoKDg4SDg4SEg4OCg4KDg4ODg4KCgoKCgoGDhISEhYSFhYWFhIWEhIWFhYWDg4OEhISEhYWFhISEhISEg4ODg4OOlZKQkZGOjYyHhYODg4GBgoKCgoKBgYCBgoOCgYCCgYGBgICAgIGBgYCAgICBgICDhYSEhIODg4SDhIOGh4mIhoWDhIODhIWDgYGDgomIhX58fH1+gZqYhISFhISEgoGAgYKDgoKEhIOCgoGBhIWEg4ODgoKDhISDg4ODg4WFhISDg4KCgoKCgoSEhYSFhYWFhYODhYWFhYaFhoWEhIWEhYWGhYWFhIWEhISDhIODhJGUk5KSj42MioWEhIODgYKCg4KCgoKBgYGCg4KBgYKBgYGBgICBgIGBgH+AgIGAgYaGhoaGhoaHh4aGhYSDhYaCgIGBgYGHgoB/f4CDl5GGfYF+gol+kpiCgoKBgYKCgYCCgoKCgoKDg4KCgYKDhYODg4ODg4OEgoKEhIOEhIWEg4OCgoKCgYKCg4ODg4SFhYWFhIOEhYWGhYWEhISEhIOEhIWFhYWFhIODhIOEg4KGlJSTlJKPjYuHhISEg4KBgoODgoKDg4GBgoKBgoKCgYGCgYGBgYCAgYGAgICAgICAhYWFhYaGh4aGhoWGg4ODg4GAgoKCgYKAf39/f4ObnoWEin+AhH+CiYKBg4GBgYGChIOBgYKBgYKBgYKDgoODgoOCgoKCg4OBg4SDg4ODg4OEhIKCgoKDgoKDg4ODhIWEhISEg4OEhIODg4OEhIODg4ODg4SDg4ODg4KDg4KDgouUk5KTkY2NioaDg4OEgoGCg4ODg4ODgoGBgoGCgoKCgoKBgYGBgICBgYCAf4CAgICDhISFhYSFhYWEhIWCg4KDgoKDg4OBgICAgICAgZiih4WEiYZ+fn6Bg4OEgoODg4KAgICCgoKDgoKDg4ODgoODhIKCgoODgoKDg4KCg4KDg4WEg4ODg4SDg4SEhISEhYWEhIWEg4SEg4OEhISEhISEg4SEhYSDg4SEhIODgoKDkJSSkpKPi4yIhoSFg4OBgYKDg4ODg4OCgYGCgoKCgoKDgoCBgoGAgICAgIB/gICAgISDhYWEhYWFhYSFhYOEhIWDg4SEhIKCgoOCgoSBkJ2EgICBgX19fX2FhYWEhYJ/fX19f4KEg4ODg4OEg4ODhISEg4OEhISEg4SEhIOEg4OFhoWFhYSFhYWFhYSFhoWGhoWFhYWFhYWFhYWGhoWGhoaFhoaGh4aFhYWFg4SEhIeTk5KRkoyKiIWFhYWCgoGBgoODg4OCg4KBgYKDg4ODgoKBgIGAgICAgICAgH+AgICAhYWFhYWGh4eGhYWFhISFhYSEhISEg4ODg4OEhYOGjoKAf4WMgX19fYOHhoOAfn9+fn9/f4OEg4OEhISEhISEhISEhISFhYWEhYSGhYWGhYaGhoWGhYWHhYWGhYaGhoaFhIWFhYWFhIWGhoaHhoaGhoaHh4iIiIaFhYaEhYWGjZSTkpGQi4qHhoeGhIGCgYKDg4ODg4KDgoGBgoODg4KAgYGBgICAgICAgICAf4CAgICHh4eGhoeHiIeHhoaEg4ODhIODg4OEg4ODg4OEhIODgX+AhoaDgH9/gYaBf39/f39/f35/gISFhIWGhoaFhYWFhoaHhoaFhoWFhoeHh4iHh4eGhoaHh4eGhoaGhoaGhYSDhIWFhYSFhYaGhoeHhoaGhoeHh4eIiIeGhoaHh4eRk5KQkZCLiIiFhoSDgoKBgoODg4ODgoKDgoKCgoOCgYCBgICBgICAgIGAgIB/gICAf4aHiIeHh4eIiYmIiIODgoKDgoSEhIWEg4KCg4SEhIOAf4OGg4KDgoGAgH9/f39/gIB/f4B/f4WFhoeIiIeHh4eIh4iHiIiIhoaHiIiJiYmIh4aHh4eJiIaHhoeHhoaFhIOEhYaFhYWFhoaGh4eFhoeGh4aGh4eHh4eHh4eFh5OTkY+RkIuHhoWGhIKCgYGCg4ODg4ODgoKCgoGCg4KCgIGBgYCAgICAgICAf3+AgYB/hoiIiIiHh4iJiYmIg4KCg4ODhIWHh4aFg4OFhISEgoCBhYSDgYKBgYKCgYGBgYB/gH9/fnt6gIaIiIqKiYmIiImJiYmKi4qIiIiJiouLioqIiIeIiIiHh4iIh4iGh4aEg4OFh4eHhoWFhISDhYWEhYWGhISEhYWFhoWGhYOJlJOQj5GOioaFhoWDgYGBgoKDg4ODgoKCgoKCgoKCgYGBgYGBgYCAgICAgIB/gICBgH+GiYiIiYeIiImJiIiEgoKDg4KDhImKh4aEhIWEg4ODgoOEg4OCgoKCgoKCgH9+fH19fX9+fHt8g4eJi4uKioqIiIqJiImLiomJiImIioqJi4mHhoaGh4WGiIiJiIeGh4SDgoSIiIiIh4WCgoGDg4KDg4SCgoKDgoGEg4SDgY6TkpCPj4uIhYSGhIKBgYGBgoODg4OCgoKCgoKCgoGBgYGBgIGAgICAgICAgH+AgIGAf4WIh4eHhoeIiIiHh4SCg4OCgoOFiYqJh4WHhYSFhIKChIODg4OCgoKDgX59fX5+fn5+fX1+fX19g4eJioqHh4WGh4eHh4iHh4mGiIaIh4aJiIODhIOFhISFhYaIh4aFg4KCg4WHhoeGhoOCgoOEgoODhIKBgoGBgYODhIOEkZKRjo+Oi4eEhoaEgoGAgYGDg4ODg4KCgoKCgoKCgYGBgIGBgYCAgIB/gIGAf39/gIB/hYaGhYaGhoeHiIeGgYKEhIOChYeIi4qGhIaEgoaFgIKEg4ODg4OCgoF9fH1/gH9+fn59fH19fHp8hIaHhoSDgYODhIWFhYODhYSEhISEhIWEgoKDgYSEgYKDg4WGhYSCgYGCgoODhYOEhIWEhIaDhISFg4KDgYKDg4SFhIeSkY+Nj4yJhoSFhIWCgYCBgYODg4ODgoKCgoKCgoKBgYGBgYGAgICAf4CAgYB/gICAgICDhIWEhYWFh4eHh4aAgYGFg4OEhYSHiIWCgIB/gYCAgoODg4ODgoJ/fX1/gICBf31+fn19fX16enp+g4SEgoGBgIGBgoKBf36BgYGCgYOAgoGCgoKBg4SAf4CAgYOCgICAgICBgYGCgYGChIODhYSCg4SDgoKBgoSDhYWGi5ORjo+Pi4iFhYOChIGBgYGBgoODg4KCgoKCgoKCgoGBgYCBgYCBgH9/gIGBgICAgH+AgIKCg4OChIOEhYWGhn+BfoCBgICAgIGDgn9+fn5+fYCCg4OCg4ODgn19fn6AgIGAfn19fX1+fXx6enp/goKAf39/f35/f4B+fYB/f4CAgX+AgIF/f4CAgX59fX+AgX9/foCAgH+AgICBf4CCgICCgYGCgYGAgYGBgYKEg4aPkpCOj42Kh4eGg4OCgYGBgYGCg4ODgoKCgoKCgoOCgYGCgYGBgICAgH+AgICAgICAf39/gYKDhIGCgoOCg4SFgIB/fH19fn1+fn+Af31/fn1+gIKDg4KCgYF/fX1+f4CAgH9+fX19fHt7e3p6eXqAgH5+f39+fnx+f35/gH9+f3+Af4GAf359fn9/fn18fn+Af35+f3+Af39/f4B/f4B+f4CBf4B+f39/gH9/f4B/hZKSj46Pi4uHiYWEg4KCgYGBgYKDg4ODg4OCgoKDg4KAgYKBgYGAgICAf3+AgIB/gIF/f36BgYSEgYKBg4OCg4OBgH98fn5/fX6Af4B/foF/f4CBhIOCgYB/f359fn5/gICAfn19fX17e3x6enl5eXt/fn5/f39+fX5/foCAf35/f4CAgoB/fH5+f35+fXx/f4B/fn9/f4B/f35/foCAf36Af39+fn5/f35+f318fH2Fk5KOjIuKiImIhISEgoKCgYGBgoOCgoODgoODg4ODgYCBgYGBgYCAf39/f4CAgICAgIB/foCBhIOCgYGDhISDhICBgICBgIGAgYKCgoGBgoCBg4ODgYGBgYCAfX19fn5+f359fX19fXx8fHt6eXl5eX2Af4CBgYF/f4B/f4F/gICAgYGCgoB+gH5/fn5+foGAgYF/f39/gIB/f4B/gYB+f4CAfn9/fn+Af31+fX17fIaTkYyLioeHioiGhoSDgoGBgYGCg4ODg4OCg4OCgoKBgICBgYGAgH9/f39/gICAgICAgH9+fn+BgYGAgISGh4aHgoSDhYOBg4ODhYSEhISEg4ODhIKCgoKCgX5+fX19fn6AfX19fX19fX19e3p6eXl5eYCCgoKEg4CCgoF/gYCBgYGDgoODgYGCgIGAf4CBg4GEgoCAgYGBgYCAgYCCgn+BgIF/gIB/gICAfn9/fn18ipOQiomIiIiJiIaGhoSCgoGBgoKDg4ODg4KDg4KCgYCAgICBgYGAf39/f4CAgICAgIGBf359fn5/f39+g4aHh4iChYSFg4SFhIWGhYaGhoWGhYGBg4ODgoKAfX19fX19fn59fX19fX19fX18e3l5eXl4fIKDhIWCgYSDgoKDhYaCg4SDgYKCg4OCgoKCgYKFg4iFgoGBgYKCgYGBgYSDgoOCgoKCgYGBgIF/gIGAf36Ok4yHiIaIh4aGhYaGhIKDgoGCgoODg4ODg4OCgYGBgH+AgYCBgYB/gH9/gICAgH+AgYB/fn19fX5+f36Ag4SHiISGhoaFhoaHh4aHh4iHh4eGf32BgIGCgX59fX19fX19fX19fX18fH5+fnx7eXh3eHl5gIODf4ONhIOEhISXl4ODhIF9foGCgoGCgYKBg4aIjIWDgoKBhIKEg4KDhYSEhYOCg4OCg4OCgoKCg4OCgpKQi4iJh4mHhoaEhoWEhISCgYKCg4ODg4ODgoGBgYCAgICBgIGBgH9/fn+AgYCAf4CAgH9/fn1+fn+Bf4CCgYWFhYeGh4eGh4eIhoeHh4eGh4V+fX18fX9+fX19fX19fX19fX19fXx7iJKCe3x6fIZ5eHl8gYF+iZaEg4OEhJSTgIGBf39/fn6Fi4B/gICEhpCJhYSCgoGFhYuDgYKFhYaGhIOFhYOFhIODhIOEhISIko6MiYiIiYeHh4WGhYSFhIKBgoKDg4ODg4OCgYGBgYCAgICAgICAf39/f4CAgICAgYGBf39/f4CAgIGBgYGBg4OGh4aGh4aGiIeGhoaFhIOFhH59fHx8fX18fH19fX19fX19fX18fH+RlZaDe3qElHx4eXp7fICCg4GBgIOCgH58fn57iJF8fI6Wf31/f4KGioWDg4SDgYONiX9+f4OEhYWDhYaFhIWFg4SFhYaEhI6Rj4yKioyJiImHhYaFg4OCgYGCgoKDhIODgoGBgICBgICAgYGAgIB/f3+AgIB/gICAgX5+f4GBgoKCgoODgoOCgoWGhISFhYSGhIOEg4KBgIKAfn19fHx9fXx8fH18fH18fX19fHx8e4uRl4x6e3yBenp6e3x5eX19foB/gH98e3t+fn2ClZF/hIh+fH5/goR8fIGChIKAf4eDfYKBf4KCgIODhISEhISChIOEhYKEkZGOi4yMjoqJiYWFhYODgoKBgoODgoKDg4KCgYGAgIGAgICAgICAgH+Af3+Af357gICBenyAgYKDhYODhYWFhYODg4SCgYKDgoOCgoGBgIB/gX5+fX59fHx8fHx8fHx8fHx8fHx9fHx8fn6Kgnt6e3p4ent7fH17fn1+f319fX18fH+BgX2Gj4F+fYJ+fn6Agnx8f3+CgIKAfnx7ioJ9gH9+gYCAgYKBgoCBgYGAf4uTj4yLjY6NiIeHhYWEhIOCgoGCg4OCgoODgYGBgICAgICAgH9+fXx7fHx9f3+AgHx6gYF4e4CCgYOFhIOFhIaHhISAhpSIgIKBgYGBgH9/f39/fn5+gHx8fHx8fHx8fHx8fHx9fHx8fHx8fHl7e3t4eHl7enp8gX+Afn+BfH5+f399gIKCgICAgX+CkYF/f4CAfoB+fn9+gIGBfX19e319fXx9fHx9gH+AgH6Afn6Ck5GMjI2NjoqFhoaFhISFg4OCgoODg4OCgoGBgYGAgICBgICAf4CAf39/fXt6fICAgHh+gXd7gIF/gYKCgoKDhoeGhn6IlYp+gYGAf4B/foB+f39/fn+Bfnx7e3x8fHx8fHx8fH59fHt9fHx8e3x8fHp6eXt8en2Fg4J/gYF+f35/gH6FgoF+gH9+foCFhoKAfn6Dhn9+fH6AgIGAf39+fX19fX57fH1/f3+AfX9+gIyRjYuNjo2Nh4SGhoWEhISDg4OCg4ODg4KBgYGBgYCAgYGAgYGBgYGAgH9/f397en9/e3mAd3p/f31+f3+Af4KDhoaFf3+FgX5/gIB/gH5+f31/gIB/gIB/f319fHx9fn18fX19fX19fH58fXx7fXx8ent6fH19f4aEgoCAgX1+fX5/fouEgYZ+fXx8f36CgX99fX19gXx7fXx+gYSDgYB+fn5+fX1/f399foB+fn6EkoyMi46Ni4qGhIWEhISDg4OCgoKDgoOCgYGBgYGBgYGBgYB/fXx8fH1+f39/f397e399d352eH59fH18fX5+gYGCg4B6fX18fn+Af36Af35/fn+AgH+AgH9/fn9+fn5+fn1+fn99fH59fn19fHt8fHx6e3p9fn+Ag4OCf35/fH18fXx8gYN+jH58e3t9fn1+fn17e3t9fHp7e3uAhoSChIOCf4B+f4KCgn9/goJ/gIqPjIyLjYuKiISEhIOEg4ODgoKCgoKCgoKBgYGAgoGBgYKCf3+AgIB/fn18fH5/fn55fX52e3Z4fXx8fHt9fX6BgICAf31/f31+f39/foB/f39+f3+AgIGBgH99gH9/fn9+fn5/f3yCfn59fX17e319fHp8fH6AgoGAgIB8fH18fHx8fH18fnt/fnt7e3x8fH18e3t7e3x8enp9en6CfoGDhIKBg4GFhoWFhoaHhoGEkY6Mi4qLh4iFgoOEhISEg4KCgYGCgoKBgoGBgYGBgoGBgoKAgYKBgYCAgH9+e3x+fnx6fnh5dnd8fHx7e318f4GAf35/foB/f35/f35/gH9/f39/f3+AgYKAfn6BgIB/f39/f39+fYN8fH19fH99fX19e3x+fn9+fn5+fnx8fHx8fHt+fnt8e3x8fHx9fH18fnx9fHx7e3x5e3x7e317fX5+f4CAg4eJiYmKiIuJhYiRjouIiYeFhYOCgoOEhIOCgoKBgYGBgYKBgYGBgYKCgoGCgoCAgX98e3p6eXt9enx+fnl8eXh4dHx8fHt8fHx+gH9/f39/gIB/fn5+fX+AgH9/f3+Af4CDgoB/gIGAgIB/f4CAgH58enx9fX59fX5+jIZ9fX57e4OCfX5+fX18fX19fX1+fH17fXx9fX58fn19fX18e3t6fHt8fHt6e3t6enp7fn6DhYiHiIqLi4uJjJCOjYmIhoWEgoKCgoODg4OBgYGBgYGBgYGBgYGCgoOCgYKBgIGBf3+Af356eHl5en5+e3l6eH5zfHx8e3x8fH5+fn5/gH+AgIB/fn9+gIF/f4B/gIGAgoSEgYCAgYGAgX+AgYKBf39+f31+gH57foGRjHx9f4qAjYx+fn19fX59fX59fHx8fn18fXx9fX1+fX1+fnx7e3t8fH18e3p7fHl6eXh5e35/hIOEh4mKiImNj42LiIiFhISCgYKCgoKCgoGCgoKBgYGCgYKCgoGCgoKBgoKAgYGAf4CAf39+e3p5e319eHx6f3KBfXt7fHx8fn59fYGBf4GBgX9/gH+AgX9/gIGCgYGFg4SCgYGCgYKCgICBg4KAf4F/fX6Afnx/f4iCf36DkISEg4F/fn18jYd9fX59fHx/fnx9fXx9fX5+fX5/fX19e3x9fnx8e3x9enp5eXl5e3t+foCBg4eEiI2MioqGhYSEg4KBgoKCgoGBgYGCgoKBgoKCgoKCgoKCgoGCgn+AgIB+f39/fn5/ent5fX16enp9cX6Cent8fX19fXp4f4KAgYKCgICBgIGBgICBgoKCgoWFhIKBgYGBg4F/gIKEgX9+gYB9foF+fX5/gIB9fn+EgH5+f31+fX2KhX1+f31+foB/fX19fH5+fn99f4B9fn18fX9/fHx7fH17e3t6enp7e3x9fn6Ag4CJjYqLh4WFhYSDg4KCgoKCgYGBgoKBgoKCgoKCgoGBgoKBgYKCf4CAgH9/f39+fn59eXp6fXx5d3t0e4d8dHd9fn17e3Z2foCBg4KBgYKCgoKBgYGDg4OChYaEgoCAgICDgX+AgYOBfn6AgH1+gH59fn6AgH+Bfn+Af35/f398f39/f3+Afn9/gH58fX18fn5+foF/gH2CgHx9gIB9e319fXx8e3x8e3t7fHt8fHx9fImKiIiFhYWFhISDgYKBg4KAgIGCg4KCgoOCgoKCgoGCgoGBg4J/gIGAf39/fn5+fn57enp8fHt2e3R3f352cnt+fnt4dnd8gIGCgoKBgoODg4OCgoSDhIOFhoOCgX9/gIOAgICAg4F+foCAfX+AfX1+foCAf4J/gYGAgICBf31/f3+AgIGAgIB/fnx9fX19fn59g32AfoKAfX6AgX98fn59fX17fH58fXx8fHt8e3x9iYWGhYWHhYSFhIKBgoGDgYCAgoKDgoKCg4ODg4KBgYGBgYGCgH6AgYB/fn5+fn5+fn56e3p9goN9dXF6fHpxen59eXh1dICAgoKCg4KDhYOEg4KDhISEhIWEgYGAgH6Agn9+f36Bf35/f4B9foB9fX1+gH9/gYCCgYCAgIKBfn6Af4GAf4CAgH9+fX19fXx+fn19gYR/gH9+f4GBf31/f319fn1+fn1+fHt8enx7eoCGgoSEhYSEg4WDgoKBgYKBgICCgoOCgoOEg4SDg4KBgYKBgYOAfoCBf35+fn5+fX5+fnt7en6Jh354cnl9f3F6eHt4eXV1fYKDgoODg4OFhIWDg4OEhIODhIKBgH+Af4CBfn19fn9+fn5/gH19f3x9fX6Af4CAgIKAgIGAgoGAf4B+gIF+gIGAgH9+fn5+fn5/fn6FhYGBgH+Ag4F/foGAf35/foB/fn17ent6fHt6goR/g4KCgoKCg4GBgYCAgoGAgIKBg4KBg4SDhIKEgoGBgoGCgn9+gIF/fn1+fn5+fX59fXp7fIWEe3tzeXp8cHd1dnd5dXR6hISBhISDhIWFhoSDg4WEgoODgoCBf39/f4B9fX1+f31+f39/fn1+fH19foF/gIB/gIB/gIGDgoGAf36AgH+AgYCBgH9/f39/f4CAgIGCgoKBf4GDgX+Ag4J/f4B/gX+Af3x7e3p8e3yBgH+Cf3+BgIKCgYF/fn+BgH6BgoKDgYGDg4KEgoSCgYGBgIGCgH6AgH9/fX5+fX19fn19e3t6gH94fHZ5eXtxdHh3dnh1cnmFhYKEhIKEhYWGhISChIOBg4GAgIF+f4B/gHx9fX6Afn5/f39+fX98fn5+gX+Bf39+f4B/gIODg4F/f4GBgIKBgYGAgICAgICAgIGAgYKDgYF/gISAfYGDhICAgX+BgYKBfXp7e3x8fH99f4B8f399fYGAgH59fYB/foKBgYKBgIKCgoKBg4KCgYB/gYKAfn9/fn99fX1+fX19fX19ent7fHZ9eXh5enJ1eXl2d3dzdYaFg4WFgYSEhYSEhIKDgoGDgX+AgX5/gH6AfX19fn9+f4B+fn99f3x/f3+BgIF/f3x+gH6AgYKDgYCAgoOEgoGAgYB/goCAgYGAgYGCg4KBgX+Ag4B+goKEgICCgYKChIJ+e3t8fHx8fX1+fXp+fX14fn9/fHx8fn5+gYCBgYCAgoGBgYGDgoGBf4CAgoB9fn19f319fX59fH19fX16e3p8dnx6d3t4cnZ5e3Z2dnN0hoSEhYSBhISFg4OCgYOBgYOBgIGBfX+BfoF9fX1/f39/gH5+f359fYB/gIGBgX9+fH5/fn5/gYJ/gYGCg4eFgX9/fn6Af4CBgICAgIKCgYCAfoCCf36BgoKBgYOCg4OFgn99fX18e3x8eXp7en55e3l4f357e3t+fX1/f4F/gH6BgICAgoOCgYF/gIGBf31+fH1+fX19fX18fn58fXx5e3x4enx3endzeHd6c3Z2c3SGhISFg4KDhISDgoKCg4GCgoGAgYF8gIB+gH1+fX5/gICAf35/f3x+gH+BgIGAf359f39+fn+BgH2AgIGDg4N/f359fn5+f4CAgIB/gYKAgH9+f4F+f4CCgoCBhIKEhIaEgH59fHx8fHp5dnl5enl2eXZ+fHt7e359e399gH99fX9/f3+BgoGBgX5/gYF+fX18fX19fX19fXx+jYF8fXl7e3p5fHd4eHR1dXhyd3d0doaEhIWEg4ODg4OCgYKDgoGDgn+Bf39/fn+AfX19fX+AgIB/f39/fIB/f4GAgYCAf3yAf31+fn9/fX5+gIGCgn5/fn1+fn5+f3+Af32AgIB+fn5/gX5+gIKBf4GDgoOEh4SAgH58fXx8e3x1eXl4eHh5d3t8e3p7foV9fn1/ent+fn59foGAgIGAfX6BgH59fXx9fX19fX18e32Dgnx8ent7e3p7d3Z4dXJzdnB4eXJ4hYWFhYOEg4KChIKBgYKBgIKBgIF/fn5+foB+fX58foCAgH+AgX97gH6AgH+BgYB/fYB/fn5/f319fX6AgYGAfn9+fn59fX5/fn9+fH+Af35+fn+Cfn6AgIF/gYOCg4OGhICBfnx9fHx7fHh4e3h1eXd3eXx6e3t9kod9fH13en1+fn19f35+gH98foB/fn19fH19fX19fHt8ent9enp4e3x6ent4dHh1cXJ0cHh4cnmEhYWFg4SDgoODgoGBgoKAgYGAgIB9fn5/gH18fn1/gIGAf4CBgHyAf4B+f4GAf39+gX9+f39+fX18gICAgIB+f35+fn18fn9/f358fYB/fn1+gIJ/foCAf36BhIKCg4WFgoJ+fnx7e3x8eXd8eXd4d3d4e3t6e3yFin17end6fH19fHx9fX1/fnx9fn59fXx8fX5+fX18fHt6enx7e3p5enp7enhzd3VxcXJweHdxe4WGhIWDhYKBg4OBgYGBgoCBgICBgH5/fn9/fXx+fYCAgoGAgIGBfX6Af35/gX+Af3+BgH9/f31+fH1/gICAgH9/f35/fXx+f39/f319f39+fn6CgYF/gIB/foGDgoKEg4SCgn5+fHx6fHt7eXt6d3N2d3h5e3p7eXp/fnt7d3p8fXx8fH59fH19fH19fXx8fX19fX99fXx9e3l7fHx8enp6enp6eHN2dXBwcm93dnJ7hYaEhYOEgoGDgoKCgYGCgYKBgYGAf4B/f399fX9+f4CBgYF/goF9foF+foCBf4B/gIKAgIB+fX58f3+BgICAf4B/f4B+fX5+f4B/f39/gH9/f4J/gH9/gIB/gYGAgISBgoKAf39+f3x9fn56fYV+dHx9enp6enx5eXp6hoV3eXx8fHx8fXx8fHx8fX19fHx9fX19fn19fX16eX18fH16enp6enp5c3V1b29xb3d0c3yFhoOEgoOCgYKBgoKCgYKBgoGBgYCAgICAgH59gH+Af4GCgn+BgX+AgX5/gYB/f4CAgn+Bf319f35/f4KAgICAgIB/gIB+fn1/gH9/gIB/f39/gH+AgICAgH+AgYCBgYGCgYCAf39/fn1/fnuBk416fH18e315e3p6eHmBgXh5e3x8fXx8fHx8fHx9fX18fH18fn1+fn59fHp8fHt8fXt5enp6eXlzdXVvb3Fwd3N0fYWGg4OCg4KAgYCCg4KAgYGCgYKBgYCAgIGAfn6Af4GAgYKCgIKCgICCfoCBgX9/gX+BgIF/fH6Af3+AgoCAgICAf3+AgH9+fX6Afn2AgIB/f3+AgICAgYCAf4CAgYCBgYKCgICAf39/fX5+fIGGiXx8fnt7fnl6e3p7jn53d3l7fHt9fHx8fHt9fH19fX18fXx+fn5/f358enx9e319e3l6e3p5eXN0dW5zcXB4cnV6hYaDg4KDgoCAgIKCgX+CgYKBgoGBgYKAgYF/fn9/gYGCgYKBg4OAgYJ/gYGBf4CAgIB/gX99f4F/gICBgICAf4B+gICAf359foB+fn+Af39/gH9/gICBf4CBgH+BgIGCgoKAgICAgIB9foB9gIOCe35+e3x9e3p8e3uHeXh4eXx8fH17fHx9fX18fH19fn19fX5+f3+Af317fH18fHx7enl7e3l5c3J1bnZycHhxdXaFhYOEg4KCgICBgoF/gIKCgoKDgYGDgoCCgYB/gICCgoKBg4KEhICBgX6BgoF/gICAgH+Cf36AgYCCgICAgIB/gH+AgIB/fn2Af39/f4CAgH+AgH+AgYF/gICAgIGAgYGBgYGAgYCAgH9/gH5/fX59fn57fXx9e3x8d3h1eHh5e3x8fXx8fHx8fX5/f39/fn19fn9/gIGAf3x9fHx9e3p7eXp8eHpzcnVud3FxenF2d4WFg4ODg4KBgYKDgH+CgYSDg4SBgYOAgoOBgYCAgIKDgoCCgoSDf4GAfoKDgICBgICAf4CAf4GBgIKAf4CCgH9+gICAgICAf4CAgH+AgICAgIB/f4CBgYCAgICAgYGAgoOCgoCCgYGCgYB/f4B/gId+fnx6fXx7fX94d3Z5eXp8fXx8fXt8fH19fn5/gIGAfn1+gICAgoGAfH59fX58d3t6ent5eXNxdW53cHV6cXZ5hYWCg4KDg4KDhISAgIOBhoOEg4GChICEg4KCgICCgoSBgYKChIJ/gIB/gYOCgYCBgYCAf4GBgYGAg4F+gIOCf35/goGAgIB+gYCBf4CAgYGBgYCAgIKBgYKBgH+CgYGBgoOCgoOBg4OCgYCBgH+AhH19fXx/fXp9f3p5dnp4eXt7fH19e3x9fX19fn+AgYGAgH+AgICDg4B9f35+fn15eXt6enp5c3J1b3dxd3lzd3uFgoKDgoOEgoOEg4CAgoOGg4ODgoKEgYSDgYKAgIKBhIGCgoGCgX6BgICCgYKBgYKCgIGAgICBgoGEgH6Bg4F/f4CDgoCBfoCCg4KAgYGBg4KDgoGBg4KChIGAgYOBgYKEg4KEhIODhIODgYGBgYCCf4B/fYB8enx/e3t3fHl5eXt6fX59fHx8fH1+foCBgYCAgIGBgYSEgH2Af39/f357e3t6e3p0cHhyeXR2eHR3e4SCg4KDg4SChIODgYKChYaEgoODg4SBhISAg4CBg4KCgoKCgIKAf4GAgIKBgoGCgoKBgIGBgYOCgoOAfoGDgX9/gYSEgYN/goKBg4KCgoGEg4OEgYKEgoOCgoGCgoOBg4SDhISEhISFg4SCgYOCgoOBgYGAgH58fIB8fHh8eXp5enx9f3x7fHx9fX18fICAgICAgYGBgYKBfoGAgICAf3t7fHp6enVweHd5dnV8dXZ8gICDgoODg4OEhISAgoOGhYWDg4KDhIGEhYKCgYKDg4GCgoKAgYB+gYCBgYKDgoKCgoGAgYKCg4KCg4B/gYOBgICChIODgoGCgoGDgoKDg4ODg4SAgoSDg4OBgX+Bg4KDhYKEhISEhISDhISChIOEhIKBgoGBgHt+gX59eXx6enp9fXyBfnp8fH19fHp7fn5+gH9/gYGAgICAgIGBgIB/fX18fH18dnJ2eHh2dH92dX2Hh4OChIWDg4SFhICChYWEhIOCg4SEgISFg4KCgoODgYOCgoCCgH2AgIGCg4KCgoKEgoGCgoOEgoKBgICBgoGAgYOFhIOCg4CCgoOCg4ODhIOEg4CCg4KEg4KCfoOCgoSEgoODhISEhIOEhIOEg4WEg4ODgoKAe4CBf3x8fXp6e32AfX9/fHx6fH59fH19fn5/f39/gICAgH9+foCBgICAfnx9fX5/fn18e3h2f3Z3f4SHg4KDhYODhIaEgYKFhoWEhIODhISChIWFgoKDg4SCg4KDgoKBfoCAgoKDgoODg4SCgoKCg4OCg4GCgYGDgn+ChISDg4KEf4KEg4ODgoSDg4SCgIOEg4SDg4KCg4KChIOCg4OEhISEhIWEg4OEhYSFhIOBgoB9gYKAfXx8e3x8gH19foB+fn1/fnx9fX19fn5/fn+BgYGBgH99fX6BgYB+fn19fX59fX5+f3+AfH2AgYKCg4OGg4SDhoSBgoiHhYSDg4SEhYGFhYWDg4SDhIODgoOCg4F+gYGDg4SCg4OEhIOCg4KEg4ODgoKDgYOCf4KEg4ODgoOAgoWDg4ODhIODhIOBgoSEhYOCgoODg4GEg4GDg4SDhISEhYSEhIWFhYWEg4ODf32BhIB9fXx8fHx/gX5+f39/fX99e3x9fX19fX5+f4CBgIGBgH59fH6Cf39+fn5+fX1/f39/gICAf4CEhIODhIWDhIOFf36CiouFhISDgoOFgYaGhoOEhISEhIODg4OEgn+BgYODhYSFhIWEg4KEhISFhIODgoSDhYKBhISFhYaEgoCDh4SDg4OFhIWFhIGEg4OGgoOCg4GCgYSDgoODhYODhYWEhYWHh4aHhYSEhYSAf4GDf35+fH5+fX+BgH9+fHx/f358enx9fX19fX5+fn9/gIGBf319fIB/gH5+fn5+f3+AgYGBgYKAgYWFhIOEhIKEg4aAgoWFiomEhIOEhYWDh4aGhISFhIWEhISEg4SDgYKDg4OEhIaEhYSDg4SEg3yDhHuBhHd5g4F9hH5+cnWDgoF2foOFgX2BdYF5g39/gH6EhIKDg4KBg4SDg4SFg4SFhoSFhn2EeXx+f4N7hYKBhIOAf319fn1+gYOBfXt/fX6Afn18fHx9fX19fH19f4B/gYJ/fX18f4GBgICAgH+BgYGCgYKDg4KChoSEg4WEgYOEhYOEhYSKiIWFhYOFhYSGhoaDhIWFhYWEhYWEhIWCgoOEhYWFhoSFhIOEhYWCaICFanx7cXF8gXOGc3R0fYKDdXNxg4Z0cHVyc3SDdnt9dYF/goOBgnZ5hYCDgIR/hYSChYWCaHpyc3N8gHOCg3+Dg32BfX5+fX6Cg4J8f4F9f4B9fXx8fHx9fHx8fn1+gH+BgX99fX2AgYKBgYGBgIGBgYKBgoKCgoSHhIWEhYSBgoSGhoOFg4aIhoaFg4aGh4eGh4OFhYaFg4KFhoSFhYODg4SEhoaGhIaEg4SFhn1xe4FweXZ+g3+CbnlwdXN8dnl5hXKEg3B2eHF2dHR1cnN0dml/gG5yb3R2bnVsd217c26Ah3ltfXJzdnN2bW14bHB5bHV9f399foGAgX2Af32Af4B/fX18fH19fH1+f32Af4CAfnx/foCBgoCBgICAgYCAgIKDgoOEhYiGhoCChYODhIeGg4WFhYaHh4SDhoeIiYaHhIWGiIeEg4WGhYWEhIOFhIKFhoaFhoWEhoWHdnB0e3BydX+HhYNtdW92b3x1coR5eYd4cXR3bndod3pucHaCcoN+b3p5eW1vbnpvb213fXiGcHF6cHJ0ZoF1fm57eXNveX+Af319gYB/fH99fIB+gIB+foCAgYB+fn9/foF/gH9+fYB9f4CBgIB+fn+BgH9+goOCgoSFh4eEfoeEg4OFh4aEhoWFhoaIhISGh4iIhoeEhoaLioWEhoeHhYSFhYWEgoaGhoWGhYWGhYZxdXByc29zenl+hHSIdHV+iHZugnKEhnluanJ/cW1zd3x/dXR8hH54cXV3bnl1enF2eHV6eYRxam95eHBreXN6b3p3dnZwgYB/fn5/f356fn19f31/f359gIGDg4CCg4GBhIKBgIGBgH1/f4F+f359f4GAfn6BgoCAgoSHhoODhoSFhYaHhoWFhYWGhoiFhYaFh4eFhoSGhomIhYSJioiGhIaGhYWDhYaFhoaGhoaFg3iLeXKIentwcIWEeIV4eWtzfnl7a3KDh4N6fG17eXl0fYB2bm+AgG90fHV3cXl9fW1+dW+DhYZ6gHJye3x1cG96bHN8bneCgIF+fn99fXt9e3x9fX9/fn1/f4KCf4GDgYGDgYB/gICAfn9+f31/fn1/gH58fYGAfn6Ag4iFhoOFhYWFhoeFhYWFhoeHiIaEhoWHhoaFhIWFhIWFhomKh4aEhoWGhoWGhoSGhoaGhoWGh4eHhoaEhoWGh4iHhYeGhoOHhoWFg4SFhoWGhIaEg4SEhoSEgYODhISFhIWEhYSGg4aHhYaEhIWHhoSEhYaEhX13hYOEhIKBgX1/fnt8e357fHx9f359fH59gIB9f4F/f4GAfn5+gH5+f35+fX99fX5/fHt8f358fH+BiYaFhIaGhoWHhoWFhYWGhoeIhoSGhYaGhYWDhIWGhYSGhoaGhYSGhIWGhoaGhIeGh4eGhYeIiIiIhoSHhYaGiIaFiIeIhYeGhoiFhYaHhYaGhYOChYWGhYWDhYSEhIWEhYWEhYWDhoaGhoWEhoeGhISFhoKEhIKEg4OFg4OCfYB/e3t8fnt8fH1/fnx8fn2Af31+gH5+gH99fXyAfX5/fn5+f3x8fX57fHx/fHt7fn+Ih4SEiIaGhoeGhYWEhoaGhoiHhIWGh4aFhIODhIaFhIeFhYaFhYaEhYaGh4eFh4aJiIaGiIeIiYiFhYiFhoeGh4aHhoeFh4eGh4WFhoeFh4aFgoOFhoaEhIOEhIOEhoSFhYWFhYOGhoWGhYWGhoWEg4WFgoSHhYOCgoWDhIF+gIB8e31+e3x7fX59fHx+fX5+fH9+fX1+fnx9fH98fn58fYGAfXx8fXx8fH56e3t8foiHgoWIh4eGhoaGhISGhoeGiIaEhYSGhoSFh4OEhYSFh4SFhoaFhoSGhoeHhoaHh4mIhoaIh4iKiIWHiIWHh4WHhoeGh4WIiIeHhYaGh4WGhoWBhISFhoWFhISEg4SFhYaGhoWGhIaFhoeFhYaGhYSDhIOCg4eDhIGChISDgYCAgHt7fn58fHx9fXx8fH19fH18fn18fX18fHx8fXx+fXt8gX99fH18fnx8fHp6fHx9iIeChoiHhoeGhoaEhYaFhoWGhYOFhIaFhIiJg4GEg4SGhIaGhoaGhIeHiIiHh4eIioiGh4iHiImIhYiHhYeGhoeHh4WHhoiIh4eFh4eHhYaHhIKEg4SGhYeFhISEhISFhoaGhoaFh4aGiIWGhYeFhIOEg4ODh4GDgIKDg4KCgn+Ae31+fXt8fH59fH19fH17fHx8fHx8fXt7e318e358e3x/fX18fX1+fXx6ent7fHyIh4KGhoaGh4aGhYSFhoWFhYWEg4WChoSDiId/enqChYaEhoaFh4aEh4eJiIiHhoiKh4aHh4eIiYeFiIeGiIeGhoeHhYeGiIiHhoWHhoiGhoeDg4SEg4aGh4WFhISEhYaGhoaGhYaHh4eIhoaEhoWDhIODg4OGgYN+goKDgIOCf398f35+fHx9f318fX18fXp7e3p7fHx8e3t7fnt7fXt7e358fHx8fX5/fXt6fHp8fYmHg4aFhoWGhoWEhIWFhYWFhIOBhYGGhIKEhHyAhn+ChYWGhYWGhYSHh4iIiIaFiIqHhYeGh4eIh4WIhYaHiIaGh4eGh4aIiIeFhoeGh4WFh4OEhoWEhoaHhoWEg4WFhoaGhoaFhoaHh4eHhYOGhYKBgoKAg4WCg36BgYF/g4F/fn5/fX98fH1/fXt9fXx+enl6eXt8fXt7e3t+fHx8fHp7fXx8fHx+fYF8e3t7e3x7iYeEhoSGhIaGhYSFhoWEhIOEgoCDgYWCgYJ/eoSMe4CEhYeGhoaFhIeIh4aHhYWHiYeEh4WGhoiGhYeEhoeIhoaIiIeHhoeIhoSGhoaHhYWHg4SFhIaGhoeFhISDhYWGhoeGhoWGhoeGhoaEg4SFgoGCgYCDg4OCfYGBgH6DgX5/f4B8f3x9fX59e359fH15eXp5e319enp7e318fXx8ent9fHx9fH5+gHx7e3x+fXyIh4WGhYaEhoSFhYWFhYODgYOBgIKBhYJ/gH9/fXx7gYSFhoaEhYSDh4eGhoaFhIaJhoKGhIaGhoWFh4WHiImGhYiHiIeGhoeFhIaFhYeFhIeDhIWEiIaGh4WFhIKFhYaFh4aHhIaGhoWFhoODg4WAgIGAgIOBg4B8gYB+foKAfYB/gXx/fH1+fX57fn18fHl6enl6fX15ent7fHt8e3t6e319fH18f35+fHt7fX59fIiGhYaGhoSFhYSFhYSDgoKAgoGAgICDgX5+foB5en2Ag4OEh4WEg4OHhoOEhYSChYiFgoSDg4WFhYWHh4aIiIWFiIeJh4aFhoWDhoSFh4OEhoSEhYSHhoWGhYaEgoWFhoaGhoaEhYaGhYWGgoKDg39+gICAgYCDgHuBf31+gn5+gH6Afn99fX59f3t/fXt6eXp6eXp8fXl6ent7enx6e3t7fH19fXyAfn18fH1/fnx7h4WFhoaGhoSFhIWDhYKBgICAgYB+gIKCfX5/f3t/f4KDg4WGhYSDgoaDgYOEgoCFh4WCg4GBhIWEhIaGh4iHhYWIhomHhYSEhIKFg4SGgoOFhIWGhIeGhYWFhoOEhYSFhoWGhIOEhYWDhYWBgIODf35/gH9/gIN/e4B9fX+CfYCBfn6Bfn5+fX1/e398e3p5enp5ent8eXp6e3t7fHp7e3t7fX59fYB9fXx8fYB/fXyGg4aGhoaGg4SDhYKFgYGAf3+AgH5/gIF8fn9/foCAgYKChIWDgoGChIGAg4KBgISFhYKBf4CCg4OEhYWHhoWEhoeFh4WFgoOCgoOCgoWBg4WEhYaEhoaHhoaFgoSEg4SGhYWDhIODhIOFhIB/goJ/fX5/fn5/hH57f3x8gIF9gYB9fYN8fn59fX57fnt7enl6enl6ent5enp6e3t8ent8e3t+fn1/gXx9fHx9f4B+gIaEhYWEh4SDg4KGgoOAgYB+fn+AfX9/gnx9f39+fn+BgYKEg4KBgYKCf4CBgoCAgoWEgoB/gIGCgYOFhYeFhISGhoOFg4WBgoGBgoGCg4GChISEhYWGh4eGhYSDg4ODhIWFhIGDgoOChIODgH+AgX59fX5+fH6Dfnx+fHyBgH6Cf31/gnx/f319fHx8e3t6enp6eXt6enp5eXp6e3x5e317fH5/f4GAfX59fX1/gICAhoSEhYSFgoSCgoSCgoCBgH59fn9+fn6AfX2Af35+foGBgoODgoSHgYF+gICBf3+ChIOBf35/gIJ/goWEhYOCg4WFgoSBg4CBgIGBgYKBgIGEg4OGhYWHh4WEhIWCgoKDhYSCgYGBgYCFg4F/foB/fnx9fn18foN9e358fYF/gIN9fYCBf35/fXx8fH17e3p6enl5e3l6enl6ent7e3p7fXx8f3+BgoB+gH+AgH+AgYDKysrKysrKysrKysrLy8vLy8vLy8vLy8zMzMzNzc3Nzc3Nzc3NzczMzMvLy8vLy8vLy8vLy8vLzMvLy8vLy8vLy8vLy8vMzMzMzM3Nzc7Oz8/Pz9DQ0NHR0dLS0tLS0tLT09PT0tLS0tLS0tPT09TU1NTU09PT09PT09PT09PT09PT09PT09PT09PT09PT09PS0tLS0tLS0tLS0tPT09PT1NTV1dXV1dXV1dXV1dXV1dXV1NTU1NTT09PT09PT09PT09TU09PU1NTU1NTU1NTU09PT09PS0tLS0tPT09TU1NTU1NPT09LS0tLS0tLR0dHR0dPHhnNlYFtLWWdVTUZIQD03Nzg5Nzw8PDo8Oz42Oj04PDs6OTg3ODs7Oj87PTs8PD47P0E/QkJBQ0RFREE+PTw7QENDQUBDQ0FBR0hHSUtSwtXS09PT09TU1NTU1NTU1NTU1NXV1dXV1dXV1dXVysrKysrKysrKysrKy8vLy8vLy8vLy8vMzMzMzMzNzc3Nzc3Nzc3MzMzMy8vLy8vLy8vLy8vLzMzMy8vLy8vLy8vLy8vLzMzMzc3Nzc3Oz8/P0NDQ0NHR0tLS0tLS09PT09PT09PT09PS09PT09TU1NTU1NTU09PT09PT09PT09PT09PT1NTU1NTU1NTT09PT09LS0tLS0tLT09PT09PU1NTU1dXV1dXV1dXV1dXV1dXV1dXV1NTU1NPT09PT09PT09PU1NPT09TU1NTU1NTU1NPT09PS0tLS0tPT09PU1NTU1NTU09PT09PS0tLS0tLR0dHSzIxyZ2BcTVllUktHSz87Mzc4Ozg5Pj05PDpBOjs9Nzs8PDo6Nzg6Oz0/Oz88PTw/Pj9BPUFBPkNDREJAQT46Oz9DREFDRERCQklHSEhJTr7V0tPT09TU1NTU1NTU1NTU1NXV1dXV1dXV1dXV1crKy8vKysrKysrKy8vLy8vLy8vLy8vLy8zMzMzMzM3Nzc3Nzc3NzMzMzMzMy8vLy8vMzMzMzMzMzMzLy8zMzMzLy8vLzMzMzc3Nzc3Ozs/P0NDQ0NDR0dLS0tLS09PT09PT09PU09PT09PT09TU1NXV1dTU1NTT09PU1NPT09PT09PT1NTU1NTU1NTU1NPT09PS0tLS0tLS0tPT09PT1NTV1dXV1dXV1dXV1dXV1tbV1dXV1dTU1NTT09PT09PT09PU1NTU09TU1NTU1NTU1NTT09PT0tLS0tLT09PU1NTU1NTU1NTU09PT09PT0tLS0tHR0s+Sd2hfXk9XZ01LRks9ODc2NTk5OTw+OT88RDo7PDc5PD07OTc5Ojw9QDs+PT47PD48PT5BQD5EQ0NDP0E9Ojs9QkNFQ0NEQT9FSEpJSky61dPT09TU1NTU1NTU1NTV1dXV1dXV1dXV1dXV1dXLy8vLy8vLy8rKysvLy8vLy8vLy8zLy8vMzMzMzMzNzc3Nzc3Nzc3MzMzMzMzMzMzMzMzMzMzMzczMzMzMzMzMzMzMzMzMzc3Nzc3Ozs/Pz9DQ0NDQ0dHS0tPT09PT09PT09TU1NTU09TU1NTU1NTV1dXU1NTU1NPU1NTU09PT09TU1NTU1dTU1NTV1dTU09PT09LS0tLS0tLS09PT09TU1dXV1dbW1dXV1dXV1tbW1tXV1dXV1NTU1NTT09PT09PT1NTU1NTU1NTU1NTU1NTU09PT09LS0tLT09PU1NTU1dXV1dTU1NTT09PT09PT0tLS0dHRmn5nYWJOVWpKSElLPzw6OTM3Njc3PTs+OT06Ojo4ODo7Ozg4Ojs7PD46PT09Ojw/PD0/QkA/Q0RDRD5APT08QENEQ0JEQkQ+REhJSUtMttfT09TU1NTU1NXV1dXV1dXV1dXV1dXV1dXV1dXVy8vLy8vLy8vLy8vLy8vLy8vLy8zMzMzMzMzMzMzNzc3Nzc3Nzc3Nzc3MzMzMzMzMzMzMzMzNzc3NzczMzMzMzMzMzMzMzc3Nzc3Ozs7Pz8/Q0NDQ0NHS0tLT09PT09PT1NTU1NTU1NTU1NTU1NTV1dXV1NTU1NPT1NTU1NTU1NTU1NTU1dXV1NXV1dXV1NTU09PT09PS0tLT09PT09PU1NXV1dbW1tXV1dbW1tbW1tbW1dXV1dXU1NTU1NTU1NTU1NTU1NTU1NTU1NXU1NTU1NTT09PT09PT09PU1NTU1dXV1dXV1dTU1NTU09PT09PS0tLR0p+DaV9kU1hsSEhIS0A9Nzg0NzY6Oj87RDw8OTw8OTg6OTo6Ojs8Ojo7OT49Pjk9QDs/QUFCP0JCQUM9Pz8+PEBCRUNDQkBBO0ZJR01MSbLY09TU1NTU1NXV1dXV1dXV1dXW1tbW1tbV1dXW1svLy8vLy8vLy8vLy8vLy8vLy8vMzMzMzMzMzM3Nzc3Nzc3Nzc3Ozc3NzczMzMzMzMzMzc3Nzc3Nzc3Nzc3Nzc3Nzc3Mzc3Nzs7Ozs7Pz8/P0NDQ0NHS0tLS09PT09PT09TU1NTU1NTU1NTU1NTV1NXV1dTU1NTU1NTU1NTU1NTV1NTU1dXV1dXV1dXV1dTU1NTU1NPT09PT09PT09PU1NXV1dbW1tbW1tbW1tbW1tbW1tbV1dXV1dTU1NTU1NTU1NTU1NTV1NTU1NXV1dXU1NTU1NTT09PT09PT1NTU1dXV1dXV1dXU1NTU1NTT09PT09LS0tSjiGxfZlJWakdIR0lBPjM2Njo7PDhDPEJBPjxBPDg5Ojw6Ojw8PDk8PTo7PD09PD89QD9AQT9AQUBCPD4+PzxCQ0NDRkBBQT1ISklOTUeu2NPU1NTV1dXV1dXV1dXV1dbW1tbW1tbW1tbW1tbMzMvLy8vLy8vLy8vLy8vLy8vMzMzNzc3Nzc3Nzc3Nzc3Nzc3Nzs7Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Ozs3Nzc3Nzc3Nzc3Nzs7Ozs7Oz8/P0NDQ0NHR0dLS0tPT09PT09TU1NTU1NTU1NTU1NTU1NTV1dXV1dTU1NTU1NTU1NTU1dXV1dXV1dXV1dXV1dXU1NTU1NTU09PT09TU1NTU1NXV1dbW1tbW1tbW1tbW1tbX19bW1tXV1dXV1dXV1dXV1dTU1NTU1dXV1dXV1dXU1NTU1NTU09PT09PT1NTU1NXV1dXV1dXV1dXV1NTU1NPT09PT0tLWroprY2VSWGhMSkdJQjg0OTQ6Ozo5QDk/Q0VAPDw5OTk9Oj07PDw6PTw7OTw9Ozs/PUA9PT5AQD9CQT5APD05QERDQkFBQj48SEpLTU5IqNnU1NXV1dXV1dXV1dXW1tbW1tbW1tbW1tbW1tbWzMzLy8vLy8vLy8vLy8vLy8rKy8vLzMzMzMzMzMzMzM3Nzc3Nzc7Ozs3Nzc3Nzc/Pz8/Pz8/Pz8/Pz9DQ0dHR0dHR0dHR0dHS0tHV2djY2NnZ2dra2tvb29vZ2dnZ2dna2tra2tra2tjW19fX19fX19jX19fX19vb29vb29vb29vb29vb2dfX19fX19fY19bX19bX2tra2tra2tra2trb3NzX1dXV1dXV1dXV1dXW1tbX1tbW1tbV1dXV1dXV1dXV1dTU1dXV1dXV1dXU1NTU1NTU1NTU09PU1NTU1NXV1dXW1dXV1dXV1dTU1NTT09PT09PS1bqKa2hoUlhlSUlMT0A5OTo0O0E8Nz05QUM+QD89ODo6Ozk9Oz4/Ojs8PDo7PDo7Pj1APT8/P0FAQUE/QTw8Oz5BRENBREA9PElJSk1ORqPa09TV1dXV1dXV1dXW1tbW1tbW1tbW1tbW1tbW1szMz9DPz8/Pz8/Pz8/Pz8/W3t3d3t7e3t7e3t7e3t3S0NDQ0NDQ0NDQ0NDQ0ci5ubm5ubm5ubm5ubq6t6WkpKSkpKSkpKSkpKSnhmBjY2NjY2NjY2NkZGRlhIuKioqKioqKioqKioemuri4uLi4uLi4uLi4ubSPjIyMjIyMjIyMjIyMiqC6uLi4uLi4uLi4uLi5sIqKioqKioqKioqKiouHvebh4uLi4uLi4uLj4+Pi2NfX1tbW1tbW1tbV1dXV1dXV1dXV1dbW1dXV1dXV1dTU1NTU1NTU1NTV1dXV1dXW1dXV1dXV1dXV1NTU1NTT09PT09XDkXFrak5TYkxMVk48Ojo3Nz5DPzg+Oj8/QTw/QDc7Ojs7PTs+Pjo7PD48Oz07PT8+QDw/Pz1AQEBBPj88PjxAQUVCQkZAQD9HSEpLT0ae2tXV1dXV1dXW1tbW1tbW1tbW1tbW19fX19fX19fMzNDS0tLS0tLS0tLS0tLR3uzr6+rq6urq6urq6uvp1dLS0tLS0tLS0tLS0tTEqaqqqqqqqqqqqqqqq6aGhIWFhYWFhYWFhYWFik4MEhISEhISEhISEhIRE0pUU1NTU1NTU1NTU1NPg6ejo6Ojo6Ojo6Ojo6ScWlVWVlZWVlZWVlZWVlJ5p6Ojo6Ojo6Ojo6OjpZVTUlNTU1NTU1NTU1NTS6ry6+vr6+vr6+vr6+vr6dnX19fX1tbW1tbW1tbW1dXV1dXV1dbW1tbV1dXV1dXV1dXV1dTU1NTV1dXV1dXW1tXV1dXV1dXV1dXU1NTU1NTU1NPUy5h2bGlKTl9NUlVNPjw8Nzs/Qz42Ojc+Pjs9Qj85PDk9Ozw6PD07PTs9Ozs9PD0+PT07QT08QUBBQT08Pzw7QEJDQURFPUFAQ0ZLS09GmNzV1dXV1dbW1tbW1tbW1tbW1tfX19fX19fX19fXzMzR0tLS0tLS0tLS0tLS0d3q6enp6enp6enq6unq6dXS0tLS0tLS0tLS0tLUxaqrq6urq6urq6urq6yoiIeHh4eHh4eHh4eHh41SEhgYGBgYGBgYGBgYFxpOWVdXV1dXV1dXV1dXU4WopKSkpKSkpKSkpKSlnl9ZWlpaWlpaWlpaWlpXfKikpKSkpKSkpKSkpKaXV1dXV1dXV1dXV1dXV0+r8erq6urq6urq6urq6unZ19jX19fX19fX1tbW1tbW1tbW1tbW1tbW1tbV1dXV1dXV1dXV1dXV1dXV1dXW1tbW1tXV1dXV1dXV1dXU1NTU1NTU1NGcenFpSlRdT1JVTkQ+Pzs/QEA4Ojs4PDs7PD86Ozs4Ozk5Ozw7Ojw5Ozs8Ozo9PT0+PUE/Pj8/Pj08PT88PEFBQ0FERTw+QEVGSktNRpPc1dXV1tbW1tbW1tbW1tbW1tfX19fX19fX19fX183N0NLS0tLS0tLS0dHR0dDc6Ofn5+fn5+fn5+fn5+bV0dLS0tLS0tLS0tLS08Wtrq6urq6urq6urq6vq46NjY2NjY2NjY2NjY2SXSInJycnJycoKCgoKCcpWmNiYWJhYmJiYmJiYl6MrKmpqampqampqampqqNoZGVlZWVlZWVlZGRkYYOsqampqampqampqamrnGJhYmJiYmJiYmJiYmJbr+/p6enp6enp6enp6enn2djY2NjY19fX19fX19fX19fX19bW1tfX19fW1tbW1tbV1dXV1dXV1dXV1dXV1tbW1tbW1tbW1tbV1dXV1dXU1NTU1NTWo3txZElbYE5OVU9AQT89REI+Oz06OTs6PT07PDs6OTg5OTs8Ozw8Ojo7PDo7QD08PTxAQTxBQTs7PEA/PD1CP0RDQ0U8PkJERkpMTEWN3NXV1tbW1tbW1tbW1tbX19fX19fX19fY2NjY2NjNzc7Ozs7Ozs7Ozc3Nzc3Nzs/Pz8/Pz8/Pz9DQ0NDQz87Ozs7Ozs/Oz87Oz87NzMzMzMzMzMzMzMzMzMvJycrKysrKysrKysrKysfCw8PExMTExcXFxsbGxsvMy8zLzMzNzMzMzMzLz9HR0tLS0tLS0tLS0tLRzczMzMzMzMzMzMzMzMvO0tLS0tLS0tLS0tLS0tDNzc3Nzc3Nzc3Nzc3NzdTY2NnZ2dnZ2dnZ2dnZ2djY2NjY2NjY2NjY2NfX19fX19fX1tfX19fX19bW1tbW1tbW1tXV1dXV1dXV1dbV1dbW1tbW1tbW1tXV1dXV1dTU1NTU169/cF5GXmJQUVdOR0ZDQ0lBPz07PDo8OEBCPD04Ojo4OTg7Pzs8PDs7PDw8PD87PD46Pj44PkI8Pj1BPjw+QkBERUNAPD5APkNJSUtEh9zV1tbW1tbW1tbW1tbX19fX19fX19jY2NjY2NjYzs3Nzc3Nzc3Nzc3NzdHNzc3NzczP09LSzs3P0s7Ozs7Ozs7Q1NLPz87Q09DO0tTV1NDPz8/Pz8/Pz8/Pz8/P0NDQ0NDR0dHR0dHS09PU1NTU1dXV1tbW1tfW1tbX1tfX19fX19fX19bW1tbW1tbW1tbW1tbW1tfX1tfX19fX1tbW1tbW1dbW1tbW1tbW1tbW19fW2NjY2NjZ2dnZ2dnZ2dnY19jY2NjY2NjY2NnZ2dnZ2dnZ2djY2NjY2NjY2NjY2NjX19fX19jY19fX1tbW1tbW1tbW1tbW1tbW1dbW1dbW1tbW1tbW1tbW1tXV1dXV1NTV1di4gm9XSl9jUlFaS0hBQTxCPT07Oj4+PD4/PT0/Nzk6OTk3OD48PD47Ozw7PDs/PT0+OTs7OT0+P0A+QD07OkI/QkNCPz0+QD5CRUdKQoDc1tbW1tbW1tbW19fX19fX19fX2NjY2NjY2NjY2M7Ozs7Ozs7Nzc3Nzsqfys3Nzc3QuYOEi8fTwJrLz87Ozs7Pypal0c/SuY++1JyChIrGz87Ozs7Ozs7Ozs7Oz8/Pz8/P0NDQ0NDQ0NDR0dHR0tLT09PU1NTU1NTV1dXV1dXV1dXV1dXV1dXV1dXW1tbV1dXV1dbW1tbV1dXV1dXV1NTU1NXV1dXV1dXV1dXW1tbW1tbW1tbX19fX19fX19fY2NjY2NjY2NjY2NnZ2dnZ2dnZ2dnZ2dnY2NjY2NjY2NjY2NjY2NjY2NfX19fX1tbW1tbW1tbW1tbW1tXV1tbW1tbW1tbW1tbW1tbW1dXV1dXV1dXYwIBuVU9gY1dZW0xMQ0A9PTs9Ojw+Qj5CQ0A8Ojg5ODo6Ojc7Pz4/PDw7PDo5Pzw8PTg5PD9BPj09PUFAPTtBQkBCQz47QD9BQUlHSkF629bW1tbW1tbX19fX19fX19jY2NjY2NnZ2djY2dnOzs7Ozs7Ozs7OzdKpj63Rzs7Ozpu3tqSiwJOerNPOzs7Pz5yqnazVwJSwnLGWuLmvodLOzs7Ozs7Ozs7Pz8/Pz8/Pz9DQ0NHR0dHR0dHS0tLT09TU1NTU1dXV1dXV1dXV1dXV1dXV1dXV1dXW1tbW1tXV1dbW1tbW1tXV1dXV1dXU1dXV1dXV1dXW1tbW1tbW1tbW1tfX19fX19jX19fY2NjY2NjY2djY2dnZ2dnZ2dnZ2dnZ2dnZ2djY2NjY2NjY2dnY2NjZ2NjY19fX19fX19bW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tXV1dXV1dXV18h/b1pTYWVeXVxPSkQ9QD8+Ozc6Pjk/RD9BOTg3ODk7Ozw4OT89PTw9PD47OkE7OTs5OzxDQDw7PT5AQT49QkQ/QkM9PT8+Pz5ISUg/ddrW1tbX19fX19fX19fX2NjY2NjZ2dnZ2dnZ2dnZzs7Ozs7Ozs7Ozs/Inrym0tDQzsqgl36Cw6abr6fUz8/P0MuUiJqczqOgi5HDk31+r7DSzs7Ozs7Ozs7Oz8/Pz8/Pz8/Q0NDR0dHR0dLS0tPT09TU1dXV1dXV1dXV1dXV1dXV1dXV1dXV1tbW1tbW1tbV1dXV1dXW1tbV1dXV1dXV1dXV1dXW1tbW1tbW1tbW1tbW1tfX19fX19jY2NjY2NjY2NjY2NjZ2dnZ2dna2dnZ2dnZ2dnZ2dnZ2djY2NjY2NnZ2dnZ2dnY2NjY2NfX19fX19fX19bW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1dbV1dXV1dfNiHNdWGloXl9gT0lGOkFAPj88PDo2P0JAQjo2NDc6Ozo8Ojk+PD49PTs/PTxBPjw8Ojw8PTw6PEA9QEI+PkFCPUNDPT0+Oz9BRUtIQHDZ1tbX19fX19fX19fY2NjY2NjZ2dnZ2dnZ2dnZ2c/Pz8/Pz87Ozs7SrKWnqdXAvNLHnY+ey9PJipmq1M/Pz8/RvciZmbuah5261NLNnp7D0M/Pz8/Pz8/Pz8/Pz8/Pz8/Q0NDQ0dHS0tLS09PT1NTU1dXV1dXV1dbW1tbW1dbW1tbW1tbV1tbW1tbW1tbW1dXV1dXV1dXW1dXV1dXV1dXV1dXW1tbW1tbW1tfX19fX19fX19fX19jY2NjY2NjY2NjY2NnZ2dnZ2dnZ2tnZ2dnZ2dnZ2dnZ2dnZ2dnY2dnZ2dnZ2dnZ2dnY2NjY19fX19fX19fX19bW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbV1dXW0JB1W1tqaWFeXVNOSTxDQEE+QD46OEZBP0M6NzQ5Ojo5Ozs4Oz0/Pj49QT08P0A9Pjw8PDw8Oj1AQD8/PT5CQD9AQkA8QD0+QUVLRz9r19fX19fX19fX2NjY2NjY2NjZ2dnZ2dnZ2dnZ2tnPz8/Pz8/Pz8/QzJ2Nl6zQmpfKxZ6ynpbN1q2ZqtTPz8/Pz9KXlKC+mZCfoNLTwKCg0M/Q0M/Pz8/Pz8/Pz8/Pz8/P0NDQ0dHS0tLT09PT1NTU1NXV1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbV1dXV1dXV1dXV1dXV1dXV1dXW1tbW1tbW19fX19fX19fX19fY19fY2NjY2NjY2NjY2NjZ2dnZ2dnZ2drZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2djY2NjY2NfX19fX19fW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1dXV1tKUcl5ea2tqZV1PTEc/RENDQDo9OzxCPD49OTY0Ojk5Ojo5Nzs/QDs8PUA8PEE+PD07PTw/PDo8Q0A+PTs9QD5CPkBBPkA9QD9GSUQ/ZtXX19fX19fY2NjY2NjY2NnZ2dna2tra2tra2traz8/Pz8/Pz8/P07GigJuvyaCjv8qcpYynrdiqmarUz8/Pz9Ozm8SbvqmvkaG516+iqdTQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NHR0tLT09PT1NTU1NXV1dbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1dXV1dXV1dbW1tXW1tbW1tbV1tbW1tbX19fX19fX19fX19fY2NjY2NjY2NjY2NjY2NjY2dnZ2dnZ2dna2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2djZ2djY2NjY2NfX19fX19bW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbSk3BgXnBoZmVaUUhHQkVDQEA3Ojo8Pjo8OTc2NTk6Njo8Ozc8QEA8Ojo9Oj0/Pj08OUA8PDo6OT9APj08PUBBQz9APz5BOz9ARkpCP2LS2NfX2NjY2NjY2NjY2dnZ2dnZ2tra29vb29vb28/Pz8/Pz8/P0M6fkGyclteqo9PSrqa1mJ/Vqpmq1M/Q0NDRzo2Qoaygmq2bqdijobrU0dHR0NDQ0dHQ0NDQ0NDQ0NDQ0NHR0tLT09PT1NTU1dXV1dbW1tbX19bW1tbW1tbW1tbX1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tfW1tfX19jY2NfX19fX2NjY2NjY2NjY2NnZ2dnZ2dnZ2dnZ2dna2tnZ2dnZ2dnZ2dnZ2dnZ2dnZ2djY2dnZ2dnZ2dnZ2dnZ2NjY2NjY2NjX19fX1tbW1tbW1tbW1tbW1tbX19fX19fW1tbW1tbX0pNuYFxxZGdkWlVKQENGQ0FCODs/PD07PDw4NTU4OTY4Ozo5PDo+Pzw9PTk8Pz49Ojo+OTw6Ojg+Pzw9PTw+QEFDQT48PDpCRERKRkJd0NnX19jY2NjY2NjY2dnZ2dna2trb29vb29vb29vPz8/Pz8/Pz9G9n8O31pfA09HQ0srSzZeb1KqZq9XRz9DQ0cvaqJugmqbFmKLRnp/J0tHR0dHR0dHR0dHR0NDR0dHR0dHR0tLT09PU1NTV1dXV1tbW1tfX19fX19bW1tbW1tfX19fW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW19fX19fY2NjY2NjY2NjY2NjY2djZ2dnZ2dnZ2dnZ2dnZ2drZ2tnZ2dnZ2dnZ2dnZ2dnZ2djY2NjY2NjZ2dnZ2dnZ2dnZ2dnY2NjY2NjY2NfX19fX19fX19fW1tfX1tbX19fX19fX19fX19bW19GRbF1cb2doYl1PRkBISUdFQDw8Pj48PT48NzU2Ojk3OTs6Ojs4QD86PDw5PD49Ozs6Pzk/Ojs5PT49PTs7PTxAQ0I/Pz47Q0ZGR0hEWc3a2NjY2NjZ2dnZ2dnZ2dna2trb29vb29vb29vb0NDQz8/Pz8/Pz5V+e6WS1KKa08ySl6ObodirmavV0pem1cmOpZqfr56cm5utx5+h0tHR0dHR0dHR0dHR0dHR0dHR0tLS0tLS09PU1NTV1dXV1tbW19fX19fX19fX19fX19fX19fX1tbW1tbW1tbW1tbX19bW1tbW1tbW1tbW1tbW1tbW1tbW1tfX19fY2NjY2NjY2NjY2NjY2dnZ2dnZ2dnZ2dnZ2dnZ2tra2tra2tnZ2dnZ2dnZ2dnZ2djY2NjY2NjZ2dnZ2tnZ2dnZ2dnZ2djY2NjY2NjY2NjX19fX19fX19fX19fX19fX19fX19fX19fX1tfPjGRWXnBrXGBgTkVITUlJT0M+OkI9PUBCOzU0Nzw6Nzo7Ojo7OT09OTo6OT0+Pz07OT47PDo8Ozk+PD47PD0+QENCPz5BPEFDR0ZGRVXJ29jY2NnZ2dnZ2dnZ2dra2tvb29vb29zc3Nzc3NDQ0NDQ0M/Pz9DR1aeZrcmjqL7KnbGdo7XZqZup2Lirocq7oaannM+mq6SexbSkptbS0tLS0tLS0tLS0tLR0dHS0tLT0tPT09PU1NTV1dbW1tbX19fX19fX19fX19fX19fX19fX19bW1tbW1tfX19fX19fW1tbW1tbW1tbX19fW1tbW1tbW1tbX19fX2NjY2NjY2NnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dra2tra2tra2trZ2dnZ2dnZ2dnZ2djY2NjY2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnY2dnY2NjY2NjX19fX19fX19fX19fX19fY2NfX19fX19fYzYZdV2JvZE9dVEtIRlNRS0xAPj1EPD9DRj01NTc7OTY6Ozo8PTo7Pzo6OTg6PT0/Pjs/Oz49Ojs5Pjs9PD0+QURCQD8+PzxAQUVHRURSxdvY2dnZ2dnZ2dnZ2tra2tvb29vb3Nzc3Nzc3NzQ0NDQ0NDQ0NDQ0NO5gL3Tm5bP1LWLkZ/T1LyBu9TOlKDT056QjbbWy5KQp9e5g7/V0tLS0tLS0tLS0tLS0tLS0tLT09PT09PU1NXV1dbW1tfX19fX19fY2NjY19fX19fX19fX19fX19fW1tbX19fX19fW1tbW1tbW1tbW19fX1tbW1tbW1tbX19fX19jY2NjY2NnZ2dnZ2dnZ2dnZ2tnZ2tra2tra2tra29ra2tra2tnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2NjY2NjX19fX19fX19fY2NjY2NjY2NjY2NfX2ct+WlVqaltMX01KTEpVTEZCPD0/R0ZIS0g9NjU3Ojk3OTo7Ojw9OT45OTo4Oz0+PkE+PTk8PDo9Pj46PTk5Oj9FQUA+PT8/QkBHRURFUMHc2dnZ2dnZ2dna2trb29vb29vb3Nzc3Nzc3dzc0NDQ0NDQ0NDQ0NDQ0cHR0crI0tDUxLjS0tHSwtLQ08fM0tHSusTV0dTLvdXS0cLT0tLS0tLS09PT09PT09LS0tPT09PU1NTU1NXV1dbW1tfX19fX19fX2NjY2NjX19fX2NfX19fX19fX19fX19fX19fX1tbW1tbW1tbW1tfX1tbW1tbW1tbW19fX19fY2NjY2NjY2dnZ2dnZ2dnZ2dra2tra2tra2tra29va2tra2tra2dnZ2dna2tnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dna2tnZ2dnZ2dnZ2djY2NjX19fX19fY2NjY2NjY2NjY2NjY19rHd1xSZ2laTlpOTFBRV0VKPz89P0FFTExBPjc3NTs4ODk5Ojs8Pjw+ODo6OTs+P0A9Pj46NTo6Oz0/Ojs5Ojw+QkJAPz8/P0FCR0RDRE683dnZ2dnZ2dna2tvb29vb29vb3Nzc3Nzc3d3d3dDR0dDQ0NDQ0NDQ0NDS0NDR0dDQ0dPU0dHR0dPR0dHS0tHR0tXU0tLS09XT09PV0tLS0tPT09PT09PT09PT09PT09PU1NTU1dXV1dbW1tfX19fX2NjY2NjY2NjY2NfX19jY19fX19fX19fX19fX19fX19fX1tbW1tbW1tbX19bW1tbW1tbW1tfX19fX2NjY2NjY2NnZ2dna2tra2tra2tra2tra2tra2tvb2tra2tra2trZ2tra2tra2tra2tra2tnZ2dnZ2dnZ2dnZ2trZ2tra29ra2trZ2dnZ2dnZ2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjbwXNYVWlrU0xSTlBSWVRGSTw+Qz9BQkVLPj43ODY5Njc4OTk7Oz0/QDw9ODk7Ozs/Pjw8OTU6PT47OTk7PD8/P0JCQT1BPUBBQkZCQkJLtd7Z2dra2tra2tvb29vb29vc3Nzc3Nzd3d3d3d3R0dHR0dHR0dHR0dDQ0NDQ0NDQ0dHR0dHR0dHR0dHR0dHS0tLS0tLS0tPT09PT09PT09PT09PT09TU1NPT1NTU1NTU1NXV1dXV1dXW1tbX19fX2NjY2NjY2NjY2NjY19fY2NjX19fX19fX19fX19fX19fX19fX19fW1tbX19fX1tbW1tbW1tbX19fX19jY2NjY2NnZ2dna2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tnZ2dnZ2dnZ2NjY2NjY2NnZ2dnZ2dnZ2NjY2NjY3LxvVFRsbExLUkpUUlVLRkQ6PkdEREFERjw/ODk6OTY5OTo3PD07PkA9PTc5Ojs5Pjs5OTY2Oj1AQT47PDk6Pj9DQT4/Qj0+QkNFQkFCSrDe2dra2tvb29vb29vb29vc3Nzc3Nzd3d3d3d3d0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0tLS0tLS0tLS0tLS0tLS0tPT09PT09PT09PT09PT1NTU1NTU1NTU1NTU1dXV1dXV1tbW1tbW19fX19jY2NjY2NjY2NjY2NjY2NjY2NjY19fX19fX19fX19fX19fX19fX19fX19fX19fW1tbW1tfW19fX19jY2NjY2NjZ2dnZ2dra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2trZ2dnZ2dnZ2djZ2dnZ2dnZ2dnZ2dnZ2dnY2Ny2a1NbcGtLVVdSXFFXSEQ+PEJKRT1ISj89PDc4ODo1OTg5Njs+PD1APDw1OTk8Oj87OTk0ODw9PUFBPD47Ojw+QD89PkE9PUNGR0I/Qkmq39ra29vb29vb29vb3Nzc3Nzc3N3d3d3d3d3d3dHR0dHR0dHR0dHR0dHR0dHR0dHS0M/U0M7P0tLT0tLS0tLS0tLS0tPT09TU1NTU1NTU1NTU1NTU1NTU1NTU1NTV1dXV1dXV1dbW1tbW19fX19fY2NjY2NjY2NjY2NjY2NjY2NjY2NjX19fX19fX19jY2NfX19fX19fX19fX19fX19fX19fX19fX19jY2NjY2NjY2dnZ2dra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tvb29va2tra2tra2tra2tra2tra2tnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dndsGRTYXJfT1pUV19RUkdCPUVJTEFBTEQ/Pzs5ODg5Mzg2ODY5Pj0+Pz06Njo7Pjs9PTo5Njg6PTtAQDxAPz0/P0I+PD48PEJFR0lCPkNJpODa29vb29vb3Nzc3Nzc3Nzc3N3d3d3d3d3d3t7S0tLS0tLS0tLS0dHR0dHR0dPT0bm7zLqbnLrQyNPT0tLS09PT09PT09PU1NTU1NTU1NTU1NTU1dXV1dXV1dXV1dXV1dbW1tbW1tbX19fX19fY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjX19fX19fX19fX19fX19fX19fX19jY2NjY2NjY2NjZ2dra2tra2tra2tra2tra2tra2tra2tra29va2tra29va2tvb2tra2tra2tra2tra2trb29vb29va2tra2tra2tra2tra2tra2tra2tnZ2dnZ2trZ2dnZ2dnZ2dnZ2dnZ3qpfVWBuW1VZUVpeT0xHQ0ZNSUZEREo7QUE7PDg4NjQ4Njk4Nzw/QT89Ojc8Pz48Pz87OjY4OD09QEE9QD5BQD1AOjs6Pj1BRUdJQkBDR57h29vb29vc3Nzc3Nzc3Nzc3d3d3d3d3d7e3t7e0tLS0tLS0tLS0tLS0tLS0tO+wMqaoKKViJGeqpOpz9TT09PT09PT09PU1NTU1NTU1NTU1NTV1dXV1dXV1dXV1dXV1tbW1tbW1tbX19fX19fY2NjY2NnZ2dnZ2dnZ2dnZ2djY2djY2NjY2NjY2NjY2NjY2NjY2NjX19fX19fX19fX19fX19fX19fY2NjY2NjY2NjZ2dna2tra2tra2tra2tra2tra2tra29vb29vb29vb29vb29vb29vb29ra2tra2tra2tra2tvb29vb29va29vb29vb29va2tra2tra2tra2tra2tra2trZ2dnZ2dnZ2dnZ2d6iXFVeblheXU5aUFROQ0NMSUlJRkpEPEJBPDs4NzY3OTc3OTk9P0E/PDo5QD88PkI/Ojg3NzY9Pz9APUBBPz88PTs7OD48P0VJSEE/Q0aX4dvb29zc3Nzc3Nzc3N3d3d3d3d3d3t7e3t7e3tPT09PT0tLS0tLS0tLS0tTIlZyum5m1iX2TjIKBhMTV09PT09PT09PU1NTU1dXV1dXV1dXV1dXV1dXV1dXV1tbW1tbW1tbW1tfX19fX19fX2NjY2NjY2dnZ2dnZ2dnZ2dnZ2dnZ2NjY2NjY2NjY2NjY2NjY2NjY2NfX19fX19fX19fX19fX19fX2NjY2NjY2NjY2dnZ2dnZ2dna2tra2tra2tra2tra29vb29vb29vb29vb29vb29vb29vb2tra2tra2tra2tvb29vb29vb2tvb29vb29vb2tra2tra2tra2tra2tra2tra2tra2tra2tnZ2dndmlpYYW5ZYVdPV01QRUJETElNS0ZJRT5CRDk4ODY3OTc1Njk4PT1BPjo4OT4+PD9APzw1Njc2PD4/PjtAQEA/Pj4/Pjs/PkFCRkdCQENIkeLb29zc3Nzc3d3d3d3d3d3d3d7e3t7e3t7f39/U09PT09PT09PT09LS0tLTz6h+kayPko6MhoCIiYSQo8rU09PT09PU1NTU1dXV1dXV1dXV1dXV1dbW1tbW1tbW1tbW1tbW19fX19fX19fX2NjY2NjY2dnZ2dnZ2dnZ2dnZ2dnZ2dnY2NjY2NjY19jY2NjY2NjY2NjY2NjX19fX19fX19fX19fY2NjY2NjY2NjY2NnZ2dnZ2dna2tra2tra2tra2tra29vb29vb29vb29vb29vb29vb29vb29ra2tra2tra2tvb29vb29vb29vb29vb29vb29va2tra2tra2tra2tra29vb29ra2tra2tra2tna3JJaWWNuWlpSVV5QTDxAR05IUklIRT47SEY4OTc1Nzg3NTg5ODs+Pj07ODlBPj1AP0E+NzU5Njs+QUI/P0BAQkI/Pj8+QUBEQUZIQj9FSozi3Nzc3Nzc3d3d3d3d3d3e3t7e3t7f39/f39/f1NTU09PT09PT09PT09PWtaWaiIuQhYCFi4iBg4qLf4bC1tTU1NTU1NTV1dXV1dXV1dXV1dXW1tbW1tbW1tbX19fX19fX19fX2NjY2NjY2NjY2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2djY2NjY2NjY2NjY2NjY2NjY2NjY2NjX19fX19fX19fY2NjY2NjY2NjY2dnZ2dna2dra2tra2tra2tra2tra2tvb29vb29vb29vb29vb29vb29vb29vb29ra2tra2trb29vb29vb29vb29vb29vb29vb29vb2tra2tra2tra29vb29vb29vb29vb2tra29uIWltnalxYTFpfVkg6TEhMSkpDRUVDQExINzo3Njc4ODU4Nzg5PDw7Ozk4QD89Pj8/PDY3PDQ3P0JCQUBAPz8/QT09P0A+QEBGRT09REuI4tzc3Nzd3d3d3d7e3t7e3t7e3t/f39/f39/f39TU1NTU1NPT09PT09PUxZKCg4WGfYGCfXx5foGCg36k29bU1NTU1NTV1dXV1dXV1tbV1tbW1tbW1tfX19fX19fX19fX19fX19jY2NjY2NjZ2dnZ2dnZ2dna2tnZ2dnZ2dnZ2dnY2NnY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjX19fX19fY2NjY2NjY2NjY2dnZ2dna2tra2tra2tra2tra29vb29vb29vb29vc3Nzc3Nvb29vb29vb29vb29vb2tra2tra29vb29zb29zb29vb29vb29vb29vb29vb29va2tvb29vb29vb29vb29vb29vb2tvZgFpebWhaU0ldW1hKRE1ISlNMR0ZBQD9KQjg7NjY5OTc1ODY4Ozo7Ojw5OD09O0A9Ozo2NTw3Oz1CQEFBPD49QEE9PEA/Pz5CREU+PERLg+Lc3d3d3d3d3t7e3t7e3t7f39/f39/f39/f39/V1dTU1NTU1NPT09PT2LKEkKh9g3l2hIh/e3d5gn5+i67A1dTU1NXV1dXV1tbW1tbW1tbW1tbW1tfX19fX19fY2NjY2NjY2NjY2NjY2NjZ2dnZ2dnZ2dna2trZ2dnZ2dnZ2dnY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2dnZ2dnZ2tra2tra2trb2tra2tvb29vb29vb29vc3Nzc3Nzc29vb29vb29vb29vb29va2trb29vb29zc3Nzc3Nvb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vc1nlcWmxmWFJPYFFSQUhHSkZYTEZAQENDSz87Ozc4ODc2NTc2ODo5PDw6PTs/PTs9Pjw7ODg8OT0/QkFCQzw8P0FCPj1BQkNCREVDQDtDTH3h3d3d3d3e3t7e3t7e39/f39/f39/f39/g4ODg1dXV1NXU1NTU1NPU0ruen3WKeXuIgICChYGDcnOAhYOMrNfV1NXV1dXW1tbW1tbW1tbW1tbW19fX19fX2NjY2NjY2NjY2NjZ2dnZ2dnZ2dnY2NnZ2dna2tra2trZ2dnZ2dnZ2djY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2dnZ2dna2tra2tra29vb29ra2trb3Nzc3Nzc29zc3Nzc3Nzc3Nzb29vb29vb29vb29rb29vb29vb29zc3Nzc3Nzc3Nvb29zc3Nzc3Nvb29vb29vb29vb29vc3Nzc3Nzc3Nvb29vb3dByXV9wZVdLUGNPS0JHQ0pIS0ZBPEE9SFBBOjo3Nzg3Njc4Nzw6OD09PD47QD88Pz07Ojs5Ojk8QEJAQkNAPUFAPz1AQkNDQUBAP0A7RU144N3d3d7e3t/f39/f39/f39/f3+Dg4ODg4ODg4NXV1dXV1dXV1NXU18h4i4V8goh6g4SBfoKCc2l0hYuGkJ3U1tXU1dbW1tbW1tbW1tbW19fX19fX19jY2NjY2NjY2NjZ2dnZ2dnZ2dnZ2dnZ2dnZ2dra2tra2tra2dnZ2dnZ2dnY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2dnZ2dna2tra2tra2tra2tvb2tvb3Nzc3Nzc3Nvc3Nzc3Nzc3Nzc29zb29vb29vb29vb29vb29vb29vc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc29vb297KalxjcWVST1heSz9HTElPS0VAPkFCP0lPPjk6NzY7NzY6Ozc7Ojg6PDw+Oz09Oz48Ojs4OTo4OUFCQkFAQDtAQj06PkFCQz8+PT4/PUZOdN/e3t7e3t7f39/f39/f4ODg4ODg4ODg4ODg4OHV1dXV1dXV1dXV1s6dhpl+f5OTin+CgXx9gnNxm4mAgoOJwNnat7TQ19bW1tbX19fX19fX19fX2NjY2NjY2NjY2NjZ2dnZ2dnZ2dnZ2tnZ2dnZ2dra2tra2tra2trZ2dnZ2dnZ2dnZ2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NnZ2dna2tra2tra2tra2tra29vb3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nvb29vb29vb29vb29vb29vc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3NvfwGNaW21gVlBTU0pETEhNSEk8PkFEQ0ZORDw8OTc5OjY4Ozk3PDk4OTw9OzlAPjpBPzw3NTc7ODpAQUVBPz45PUI/Oz1CQkI6Pj07PT5GTnHe3t7e3t/f39/f39/g4ODg4ODg4ODg4OHh4eHh1tbW1tbW1tbV1tjLioCHhYOXjHh7e3lvfYF1a3ebdHZ7eInHxpiMrdjZ19fX19fX19fY2NjY2NjY2NjY2NjY2NjY2dnZ2drZ2dna2tra2tra2tra2tra2tra2tra2dnZ2dnZ2dnZ2dnZ2dnZ2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NnZ2dnZ2dnZ2dna2tra2tra2tra2tra29vb3Nzc3dzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nvb29vb29zb29vb3Nzc3Nzc3Nzd3dzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3d3d3d3d3Nzc3Nzc4LdjV1lrYlJNVVFMSktGS0ZDQD5CQT9FTT4+PTg5OTo3OTo3NT03Nzo+PDs7Qjw5Pz05NjY4PTk6QEJGQD49PEBCREA9QD9DO0A9PD4/Rk9t3N/e3t/f3+Dg4ODg4ODg4ODg4OHh4eHh4eHh4dbW1tbW1tbW1tfVrYZ6d32rn3l4entzdH+Dfm9xe3l6c3t2k4qFgImkzdnY19fX2NjY2NjY2NjY2NjY2NjY2NjY2NnZ2dna2tna2tra2tra2tra2tra2tra2tra2tnZ2dnZ2dnZ2dnZ2dnZ2dnZ2djY2NjY2NjY2NjY2NjY2NjY2NjY2dnZ2dnZ2dnZ2dra2tra2tra2tra29vb29vc3Nzc3N3d3d3c3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc29vb29vc3Nzb3Nzc3Nzc3N3d3d3d3d3d3dzc3Nzc3Nzd3d3c3Nzc3Nzc3N3d3d3d3d3d3d3d3dzc3OGtYVtebGJSTVZMTUdLS0RGQkI7QT08RUxDQT44Ojk6Nzc5NjY6NTs+QDs9Oz89PD89Ojk5Ojw5PEVDRkA/PkBDQkQ9OT0/QT1CPz1APkdPadvf3t/f3+Dg4ODg4ODh4eHh4eHh4eHh4eHi4uLW1tbW1tbW1tfQmH+Qh4N9eoN2e3Vzenl6kKqmd3JyfoeHh4CAfoKEhJHJzNnX19jY2NjY2NjY2NjY2NjY2NjY2NnZ2dnZ2tra2tra2tra2tra29va2tra2tra2tra2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2djZ2dnZ2dnZ2djY2NnZ2dnZ2dnZ2dnZ2tra2tra2tra2tra29vb29vb3Nzc3N3d3d3d3d3d3d3d3d3d3d3c3Nzc3Nzc3Nzb29vb3Nzc3Nzc3Nzc3Nzd3d3d3d3d3d3d3dzc3N3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3NzhpV9UYm1iUE9TSUhHRkpJSUJBPkJCPEVFREA+ODo4Ozc3Ojc4ODY+Pz07PDk9PDo+PTs6Njc7NjpEQUY+Pz8/PkNBPzs9PT47REM/PjxIT2fZ4N/f3+Dg4ODg4eHh4eHh4eHh4eLi4uLi4uLi1tbW1tbW19jYyH52doN+fnR2eIaCenl1d5yhu6GEgoCAfoeKinx/gYaMnKjO2NjY2NjY2NjY2djY2NjZ2djY2NjY2dnZ2dra2tra2trb29rb29rb2tra2tra2tra2tnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dna2tra2tra2tra2tra2trb29vb29zc3Nzc3N3d3d3d3d3d3d3d3d3d3d3d3dzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3e3t7e3t7e3d3d3d3c35pbT2drXFBRUElDT0pLR0xHSkJAP0FHREBBPDg8ODg1ODk3Njc3QEA/Ozw5Pj04PTw8Ojc4PTk/RENGPkE/QkBDPzw6Pj0/PkVEPz07S1Fj1+Hf4ODg4ODh4eHh4eHh4uLi4uLi4uLi4uLj49bW1tbW19XB3LRueHJze3B6eXaFiIR7eH2AgZiljH98fnuRhZaLhoGDgY6Rvd3Z2NjY2NjZ2dnZ2dnZ2dnZ2dnY2dnZ2dna2tra2trb29va2tva2tra2trb29ra2tra2tnZ2dnZ2dnZ2dnZ2dna2trZ2dnZ2dra2tra2tnZ2dnZ2dna2tra2tra2tra2tra2tra2trb29vc3Nzc3Nzc3N3d3d3d3d3d3d3d3d3d3d3d3d3d3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3e3t7e3t7e3t7e3t7e3t7e3t3d3d6NWFdobllQUUtISlNJTUhNSUtBQz9DRkJBRDo6PDg2NDg4NzY2Nj8+Pjo8OTw7Oj09PDw4Ozw7RERERT4/PkI+Qj84PT8/Q0NCQEE+O0xUY9Xh3+Dg4OHh4eHh4eLi4uLi4uLi4uLi4uPj4+PW1tbW1teslLZ6eHJvd5V7dHuLgHh1bn6Fg3t/hYhyfH2bnI6JioJ+g32Hk5rH1NjY2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dna2tra2trb29vb29vb29vb2tra2tra2tra2tra2tnZ2dnZ2dnZ2dna2tra2tra2tra2tra2tra2tra2tra2tra2trb2tra2tra2tra2trb29vc3Nzc3Nzc3Nzd3d3d3d3d3d3d3d3d3d3d3d3d3d3c3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3N3d3d3d3d3d3d3d3d3d3d3d3d3e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3d7Zf1lgaGxcUUtHR09LTk5PTURGQkg/Q0hEREA6Ozs4NzU3Nzc4NThAPkA7PDk8Ozw+Ojk7OTk7OUZERUI8QD4/PEBDOz5AP0A/Qj8+OjtKVWPV4eDg4eHh4eHi4uLi4uLi4uLi4uPj4+Pj4+Pj1tbX19vKhYR3cXJubniVhHt4hH95dnB4c3eLkY6CdnN9ioaId3d1d4ODfIiIk8Pb2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dra2trb2tvb29vb29vb29vb29rb2tra2tra2tra2tra2tnZ2dnZ2dna2tra2tra2tra2trb2tra2tra2tra2tra2trb29vb29ra2trb29vb29vb3Nzc3Nzc3Nzd3d3d3d3d3d3d3d3d3d3d3d7e3d3d3d3c3Nzc3Nzc3Nzc3Nzc3Nzc3d3d3d3d3d3d3d3d3d3d3d3d3d7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7f0nVZaGlqVk5KSE1OR01EUElGSD9FPUZMREM+Ozs8OTc3OTY2OTU4Pj4/PTs8QDs9PDo3Ozc5OThHREVCPUE9Qj8+QDw/QUE/QEJAPjs8S1Ri1OLg4eHh4eLi4uLi4uLi4+Pj4+Pj4+Pj4+Pj49fX19fEknuJf29sbnV2foSBg4qGfnVybWVtiIaKjoR7c4OHint4e4OPj4GEioqxztrZ2dnZ2dnZ2dna2tra2tra2tra2trb29vb29zc3Nzb29vb29vb29va2tra2tra2tra2tra2tra2tra2tra2tra2tra2tvb29va2tra2tra2tvb2tvb29vb29vb29vb29vb29vb29zc3Nzc3Nzc3d3d3d3d3d3d3d3d3d3d3t7e3t3d3d3d3d3d3d3d3dzc3Nzc3Nzc3d3d3d3d3d3e3t7e3t7e3t7e3t7e3t7e3t7e3t7f39/f39/f39/f39/f3t7e4clsW2pqalNOR0dOT0VIRk1JSUA7RD5ISUA9PDo6Ojg2ODo3Nzk0OD08PT07ODw8PDw4Njc4OTo6RUJFQT9APEI/Q0M+PkNEQUBAP0A8PUtRYdPj4OHh4uLi4uLi4uPj4+Pj4+Pj4+Pj4+Pj5OTX19fZqXaFfnx3bHB3eXh8jH2KhYB3anN0d3p9bot7fnl6foR/gIGDfnh8foeGlrbT2tnZ2dra2tra2tra2tra2tra2tvb29vb3Nzc3Nzc3Nvb29vb29vb29ra2tra2tra2tra2tra2tra2tra2tra29ra29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb3Nzc3Nzc3Nzc3d3d3d3d3d3d3d3d3d3d3d7e3t7d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3t7e3t7e3t7e3t7e3t7e3t7e3t7e39/f39/f39/f39/f39/f39/e3uO9amFpa2lRTkZNTEtKWE1OR0FAQE9BQz9AOzw4OTk5Njg2NjY4NDs+PD07OTY6Ojk6OTU4OTg5OkJERj8+Pj5AQEBCPzxBQD88Pj9BOT5KT17S4+Hh4eLi4uLi4+Pj4+Pj4+Pj4+Pj4+Tk5OTk19fX2sqKhIB5c29tcXN1d4CUeHaAfHWHhXd1cnWgmXp7d3Z5doR0bWxue3iAmouTu9za2tra2tra2trb29vb29vb29vb29zc3Nzc3Nzc3Nzc3Nzc29vb29vb2tra2tra2tra2tra2tra2tra2tra29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vc3Nzc3Nzc3Nzc3d3d3d3d3d3d3d3d3d3d3d3e3t7e3t3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3t7e3t7e3t7e3t7e3t7e3t7e3t/f39/f39/f39/f39/f39/f39/f397js2lpbmloUFBPTExPUk9LU0Y/RURERD48PDg7ODc5OTU2ODY2NzM6Pjs+PTc6Pjk5OTk2Ojo4NzxDRUc/Pzs/PkA9PkE9Oz0+OUFAQDhBTlFc0OTh4eLi4uLj4+Pj4+Pj4+Pj4+Pk5OTk5OTk5NjY2NjauY6AenZ1bmpveHCBfWt0cnZ3hIV5h4d5lY55eXp1d3pza298gHx2fYh8gLLe2tra2tvb29vb29vb29vc3Nzc3Nzc3Nzc3dzc3Nzc3Nzc3Nzb29vb29rb29vb29ra2tra2tra2tra29va29vb29vb29vb29zc3Nzb29vb29vb29vb29vc3Nvb3Nzc3Nzc3Nzc3Nzc3Nzc3d3d3d3d3t7e3t7e3d7e3t3d3t7e3t7e3t7d3d3d3d3d3d3d3d3d3d3d3d3d3t7e3t7e3t7e3t7f39/f39/f39/f39/f39/f39/f4ODg4ODg4N/f39/f4qpqa2hrZFNQT0ZQVFJOSFJLPkREQ0I7Ozk6Ojg2Nzg1NjY4ODg0Oz88Pzw5PDw3Ozo6Nzo6Nzo9Q0JDPUE+Pzw5PT5BQDs8PDtFQD47Q05TXNDk4eLi4uLj4+Pj4+Pj4+Pj5OTk5OTk5OTk5OTY2NjZ1p5vdntveHh2cG50d3BwdHBzb36Jc3qGhY2EenNtcoB6hn1vg5OBdnx9g4a13drb29vc29vc3Nzc3Nzc3Nzc3Nzc3Nzc3d3d3Nzc3Nzc3Nzc3Nzb29vb29vb29vb29ra2tra2tvb29vb29vb3Nzc3Nzc3Nzc3Nzc3Nzc3Nvb29vb29vc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzd3d3d3d3d3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3d3d3d3d3d7e3t7e3t7e3t7e3t7f39/f39/f39/f39/f39/f39/g4ODg4ODg4ODg4ODg4N/f3+KgbWhma2ZVVlJHUFFOS0xMRUJIRUc9OD08Ojo3Nzg2Nzc2NTY3NDg+PD09Ojg6OD46Ozc4Nzc6Oj5DRDtDQj49OD1AQUM/Pjw+RTw+PUJNUF/S4+Hi4uLj4+Pj4+Pj4+Pk5OTk5OTk5OTk5OTk2NjY3MB2doCCfnp4eHBsdXlya399bHNvdGdoaYB/aWl4c2d+iYl4cIKGe3d9foWKvd3b3Nzc3Nzc3Nzc3Nzc3Nzc3d3c3Nzc3N3d3dzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nvb29vb29vb29vb3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzd3d3d3d3d3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7f39/f39/f39/f39/f39/f4ODg4ODg4ODg4ODg4ODg4ODg4ODflGttZm5mU1NJUFlUTEhGTkZGRUJGPTs+PDs5Nzc4NTc5NjQ1NzU4PDs9Pjo6OztAOTs7ODc6OTlAQkE8QUE/Pzk/QEJFQ0FAQEM7Oz1ES01g1uTi4uLi4+Pj4+Pj4+Pk5OTk5OTk5OTk5OTk5NnZ2tmYc3uqhJaCcnR1dn14aGx8d2h4d25rcHR5gIJ3dHyBhIJ9c3CAin94gn95g8je3Nzc3Nzc3Nzc3Nzc3d3d3d3d3d3d3d3d3N3d3dzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nvb29zc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3N3d3d3d3d3d3d3d3d3d3d3d3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e39/f39/f39/f4N/f39/f3+Dg4ODg4ODg4ODg4ODg4ODg4ODg4ODh24tubWdzY1lRTVVbV0hDSUZOS0dCRD8/Qjo7OjY2NzU2NzY0ODc2Ozw7Pj86PDk8Qjg3OTo6Ojk6QUFCQUJDQEE+PT9CQ0NEQUJGOTg9REpOYtjk4uLi4+Pj4+Pj5OTk5OTk5OTk5OTk5OTk5OXZ2drcqHGCtXiRfnNsem6EgXaCfWtoan+DeHZ8dX2FhXRmcHl9d316gIqFe318foC03tzc3Nzc3N3d3d3d3d3d3d3d3d3d3d3d3dzd3d3d3dzc3N3c3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzd3Nzd3d3d3d3d3Nzc3Nzc3Nzc3Nzc3N3d3d3d3d3d3d3d3d3d3d3d3d3d3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e397e3t7e39/f39/f39/f39/g4ODg4ODg4ODg4ODg4ODg4ODg4ODg4eDg4ODg4ODg4tiFb3FrdWFWT1VVXE9ETUY+SkdKRUQ8P0I6PDk4Njg0NTY3NDc2NDk7Ozw7OD47PEE4ODo9OD04Oj09QEBAP0FCP0A+QENCQ0FBRTc2O0RMTmPa5OLi4+Pj4+Pj5OTk5OTk5OTk5OTk5OTk5OXl29ra3Z5sbnNxhY1ybXBuf391hH5rcnZ2enN4gXhzb3VwbWt2fHmFiIB/f392coODsd/c3Nzc3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3Nzd3d3c3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3N3d3d3d3d3d3d3d3d3d3d3d3d3c3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e39/f39/f39/f39/f39/f39/f39/f39/f39/f4ODg4ODg4ODg4ODg4ODg4ODg4OHh4eDg4eHh4eHh4eHh4OLXhW1xb3ZeUldTWlpRSkhDQFFAQkQ8OT9BOjw5NzU3NDU2NjQ3NTY9PDo9PTk+OjxAODo6PDY7OTs+PUJCQjtBQkBDQEBEREM8PUA3OjxFS01l3OPi4uPj4+Pj5OTk5OTk5OTk5OTk5OXl5eXl5dPOxsB+cWxveHt2b3VuanNzbZKGeG50dG5vdIZ/b2twboJ0bXZyfY2DdnF/d3mKgabf3Nzc3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3dzc3d3d3dzc3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3t7e3t7e3t7e3t7e3t/f3t7e3t7f39/f39/f39/f39/f39/f39/f39/f39/f39/f4ODg4ODg4ODg4ODg4ODg4ODg4ODg4eHh4eHh4eHh4eHh4eHh4eHi1oZucG1xYFJZUFdfWUpMTElSP0Q9OTtCRjs6OTc0NTY1NzU0NjY2Pj07Pz45PTk7Pjg9Ozo0ODtAQENCQ0FCRkE/Q0BBQkREOz0+OTs8QkxNZODl4+Pk5OTj4+Tk5OTk5OTk5OTk5eXl5eXl5eW5t7Woc3JscHd6dHd4bXFydXd/hHRyc2xsa3F8bnBudGuBf3GAd32Eg355gHNygYqg2d3c3d3d3d3d3d7e3t3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3e3t7e3t7e3t7d3d3d3t7e3t7e3t7e3t7f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f4ODg4ODg4ODg4ODg4ODg4ODg4OHh4eHh4eHh4eHh4eHh4eHh4eHh49WHcWxqbF5YWlVXYFZWUE9QTD1BOjs8RkE4Ojg3MzY1Njk2NTg1Nz89Oz8+OT04Ozw5PTs7NTo9Q0JCPENDREREQUE/PkJDQzw9Pjg5PENLS2PN0dnh1sjY4+Tk5OTk5OTk5OTk5eXl5eXl5eXltbW2q3J5cm59f3Z1d2hqaGlwb3Zta2tnZWZxdG15gG5teXd2iHhxa2podXV5dHV/wd/c3d3d3d3d3d3e3t7e3d3d3d7d3d3d3d3d3d3d3t7e3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3e3t7e3t7e3t3d3d3d3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f4ODg39/g4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4OHh4eHh4eHh4eHh4eHh4eHi4uHh4ePVhnFwY2lhV1NZV19MUk9STUtAPjg5O0E+ODc5NjQ3Njc6NjY2NDk+Pzo8Pzo/OTo6Nzo9PDk5PEFBPTtBQ0VDRkA+Pj5BRUQ+QEE3OD5GSEpesrW4wbm1u8jg5eXl5OTl5OXl5+fn5+fm5ebm5ra2tbWOfX5weoR1cnZnYmNlbGtyb2ZpbHZtd4Z9hXlsbHd4a3ZwfH14c3V5fHd2h7ng3d3d3d3d3d7e3t7e3t7d3t7e3t7d3d3d3d3d3t7e3t7d3t7e3t7e3t3d3d3d3d3d3d7e3t7e3t7e3t7d3d3d3d3d3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4OHh4eHh4eHh4eLi4uLi4uLi4uLi4eHj1Yd1bl5uY1pUU1hXS1NLSk1SR0E4Ozs+PDk4NzU2NTY2OTY4NjY5Pzw6PT07Pzo7Ozk8PDs5Oj4+Pjs8PUFEQkNBQEBBP0JDPDw9Nzs+REVKXrG1tLW2t7e2y9rJ3uXl3eDi3tXU1tPU4OPg39+2treuh3t/bnmNenJ1bWNobGxtaXR4enF5enqIh4N6aWh9cWRvcXyGgX55e318e4an2t7d3d3d3d7e3t7e3t7e3t7e3t7e3d3d3d3d3t7e3t7e3t7e3t7e3t7e3t3e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7f39/e3t7e3t7f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4OHh4eHh4eHh4eLi4uLi4uLi4uLi4uHh49aGdmxhb19dV1lcWlJQSEpXTEVHPUA9Ozs9OTY0NjU1NTg2NzY3OD87OT09PDw5OTw6Pjw6OTg+Qjs7Pj5AREBDRUFAQD0/QDw9PTU5PEJHRl2xtbW2uLm5ubq9uMPT0r3BwcC6u7y6u8TMxb/Dt7e3hGl1gX1ndYd5Z3Vxa2t5eHB3fH15bWl3e3h3bml1j4FwbHl4d3d9gXuGgnmAoNze3d3d3t7e3t7e3t7e3t7e3t7e3t3d3d3d3d7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t/f39/e3t7e3t/f39/f39/f39/f39/f39/f39/f39/f39/f39/f4ODg4ODg39/f39/f39/f3+Dg4N/f4ODg4ODg4ODg4ODg4ODg4ODg4ODh4OHh4eHh4eHh4eHh4eHh4eHh4uLi4uLi4uLi4uLi4uLi4ePXhXJrZ3RhW1hYX15TVVVRVUpMRj9JRDs5PTY2NDc3NTc4Nzc3ODk8PDo+PDg8Oj0+OTs8OTs5P0E8PT9DP0FARUJCQTw9Q0A6Pjw1NDlER0dasbW1tre5ubm5ubm3ubm4uLm5urq6urm5urm6u7e3uX9ucHN6b3B/eXNuc3Vsc3Z4cXFwb2tvcX6Bc2mHhIF9dHOHdW11hYmBgHJ2hafd3d3d3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7f39/f3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f4ODg4ODg4ODg39/f3+Dg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4eDg4eHh4eHh4eHh4eHh4eHh4eHh4eHh4uLi4uLi4uLi4uLi4uLi4uHj14lxa2xyW1dXXWBUUVVUUFJPSkNATUE9Ozk2NTM0NjQ2ODc3Nzk6Pjs8Pjs5PDo8PDk8PTw7PT0+PUNEREBDQkE/QD48PkE8OD06NjY6QkpIWLG1tLa2uLm5uLi5uLe3uLi5urq5ubi4uLi6uru3uKx7cnhxf3ZzfnBsbXpyZ29sbW50cHt3d3Jyd3pvhpJ2f3x8enZ5fH9zfYdyda3T393d3d7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e39/f39/f39/f39/e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f4ODg4ODg4ODg4ODg4ODg4ODf3+Dg4ODg4ODg4ODg4ODg4ODg4eHh4eDg4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4uLi4uLi4uLi4uLi4uLi4uLi49eHb2pxalVWV2FbT1FSUE5XSURESUo/Ojk6NzUzNDk1NzY2Nzg4Ojw7PD46PDo6PTw5PDw9Oz09PDs9REdEQ0E8PDw8Pj5AOzg8ODE1OkFGRVautbW1tre4uLm4uLi4uLe4ubq5uLi3t7i4ubq7t7mqcnB4d3x7e4J3aG5xam9qY2lyf21zcn54dHFsanaAeX2AgH91doB1a4qLgHaR1d/d3d7e39/f3t/f3t7e3t7e3t7e3t7e3t7e3t7e39/f39/f39/f39/f4N/e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t/f39/f39/f39/f39/f39/f39/f39/f3+Dg4ODg4ODf4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHi4uLi4uLi4uLi4uLi4uLi4uLi4uPYhm1sdGVWUFxnWE1YU1JRWUVDS1BOOzk4ODc1NTM5NTY2NzY4Nzk+OT0+OTw5OTw7Njg5OTo8QEA9PkBGQEJCQDo+PEE9Pzs7OzYxNjxCR0RQqLa1tba2tre4t7i4uLi4uLm6ubi4t7e3t7e5ure2tIlyd3h9iXxwem99c2hqbGdnbHRscXd0cWx2c3Fxd3FyfHl4g3Z7d2mLkYp9kM7f3d7e3tvY2drZ297f39/e3+De39/f3Nvc3N3e3uDg3+Dg4ODf3t7e39jS397f397e3t/f3t7f3t/f3t7e3t7e3t7e3t7e3t/f39/f39/f39/f39/f39/f39/f4ODf4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODh4eHh4eHh4eHh4eHh4eHh4eLi4eLi4uLi4uLi4uLi4uLj4+Lj4+Li4uPj4+Pi4uLi4+Lk14NoZ3VkVlVkZVdKWllXW1Q9RU1LSD04NzU3NjQzOTQ0Nzc1Njc5PTo9Pjw9PDk7PDk5Oj45PD4/PkFBQ0FFRUQ+OzxBPjw5PDs3Mzc+REhFSqG2tbW1tbW2tre4uLi4t7e4uLi3tra2tra3uLm2traLfXpsbHp/cGx5dm5qaGdlcXp4b2lvb3B1c21zd4Fnb32CgYNyf3lqcHJ6f6ng393Zy8a/vL2/vsLN0tDW3tnc4NfQzcPCw8PH1dfT2dzX1NjX0MfExce9vM/Kz87Y3djO3N3c2t3T0dze39/e397e3t7e4N/f39/f39/f39/f39/f39/f4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4OHh4eLi4uLi4uLf4uPi4eLg4d7W29/Sw8rJx9Hb3OLk4eHg2dre1sbExcTN2trf5OHi4trX3st9aWZxYVleZWFNTFRLUlpMO0hNSEZBPTc2NjUzNDY2NDg3NjU2OTw7Pj46Pjk5PDk3OTs7Oj49PEBAQ0RCR0ZCQT08Q0A9OTw7Nzc3P0RGRkaZtrS1tbW2tra4uLi4uLi3uLi3s7W2t7a3t7i5tba3opdxb29waW50dnFmZWNrbmdvcm1mZ2tygWVvdnyAeGRzj39zaHFyaWVlbm+w39HFv7u5ubm5ubq6uru6vc3Gw8e/urq6uru7u8HCvcHFvby/vry7urq5ubq6ubm6w8XDucDDwby/ube/z8/U3tjc3t/g3tLa4N/f4ODg39/f39/f39/f3+Dg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODh4eDg4ODg4ODg4ODh4eHh4uLi4eDh4uLi4uHa2t3RwsPCu8XT1uDdydPDrrnAsaqrq6uwtLbJ0sXRxLG4v7Srq6usr7S0vMzE1c60tLureGxtbWBdYl9ZS1NVVFFQREBRTUhEPzo3ODU3MzE1NjQ5ODQ2Njo8Oz08ODw5Njo6ODg5NzU8PDw/QEFAQkRDQkE8PkI/Pz09PTc1OD5DRUNAj7a0tLW1t7i4uLi4uLm5uLe1sautr7Oxs7OztLS0tqaei2tue3ZxeXhnY2hfcXdha25vaG99b25ja2lseHdsa4Z+bHB6dm1scG95sca8uru7urm5ubq6urq6urq6urq6urq6urq7u7q7u7y7urq6ubq7u7q6urq6urq6ubi3t7i4t7e2tbW1tbi3u8e+w8XHzcS4wMnH0tzZ2d/e3uDf39/f4ODh4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODh3Nji4uLi4eHh4OHg3tfGxtHQztTe3tPO0t/SuLi8sq2trKysrrG+ua63rKipqamqq6urqqqqq6ysuKyqqqqrq6urra6urq6urryzrayrpHlub21fXl1dVE1SU1xUSkE/UElIPjg5NjgzNzMwNTczNzg1NzY2Ojw/PDg5Ozo6Ojg5OjY1OTs8Pj9EP0NFQkNCP0BAQT9APjw3ODc6QUVEP4W4tLS1tbe4uLm5uLi3t7SurKuqqq2urq6vsLGzs7WjcG5ucm1wg311aWFlaGZkY2Rxc21td25naW1tZXBzb29zcXN8h4F6dX11n7u6uru7urm5ubm6urq6urq6ubq6urq5uLm5ubm6urq6u7q5ubm5ubq6ubm6ubm4uLi3t7e4uLe3t7a2tbW2tra1tbW1tba1t7e3t7rBvrzGycrb3+Dg3tvd3d7h4tDW4uHg4ODg4ODg4ODg4ODg4OHg4OHi0768zNjd3OLg0dnbxL23sLCxsa+zu7uzsLS9s66urq2tra2sq6qqqqmpqKmpqampqqurqqqqqamoqampqampqaqqqqytrq6urq6urq6sraR4aWJxZmFZWlZRUk5cU0Y9QlJEQTc8OzY5NTY1NDU2NTg3NTY1Nzg7Pjw7OTk5Ojg3Nzk3Njg8Oz47RD8/Q0BBREE+P0M9Pjw+Ojo3Nz9DRj54srCztLW2t7i3trKurq2sq6uqqaqtraysrq+xs7S1t4xucnRqaIB5ZmpmZWxdaG5waGxxYmNmcoJ+dmhobGpueoaBhXx4cXF5gK+6ubq6urm5uLm5ubm5ubm5ubm5ubm4uLe3t7e3uLm5ubm5uLe3t7i5ubi4uLi3t7a2tre3t7e3tra2trW0tLW1tbW2trW1tre3t7e3t7e3tre4v8bP0MS+v8DE19e8ydra4OHg4ODh4eDg4ODh4eDb3t7Uzby3tre6wMDJxLfIvrKwsLCwr7Cvrq6ur7Cwr66urq6uraytrKurq6qpqampqampqampqKmpqKmpqampqKmpqKmpqqqrraytra2ur66trK2heWpjbWdiXFhRUFFLVEpCOklRP0E3PDk0OjU2NTQ1NTY4ODY4Njs6OTw9PTs6ODY2ODg6ODY3Pj09PT5BQUVCQkNBQUBBOj09Pz05Ojc9QUc8bKqmqKutsLGwrqupqKqrq6mpqamrrKytra2usLO0tbilgIdvaWdzdGZrcG1qZGxvcm5rbWNrcHyJhG5qbHx4Y3uKfnNqc25rcY+7ubm5ubm5ubi4ubm5ubm5ubq5uLi3t7e3t7e3t7i5ubi4uLe2tra3t7e3t7a2t7a2tra3tra2tbW1tba1tLS0tbW1tra2tra3t7e3t7i4uLe2t7a2uLm4uLe3uL6+uLq9vcfb4OHg2Nnd4eHg3dfKwcPCurm5uLe4uLi3tbS0tLKysbGxsLCvr6+vr6+vr6+vr66ura2srKyrq6yqqqmoqKmppqepqaehpaipqamoop+hoZyip6inqausrK2ur7Cwrq2unXdwbGphY2BZUU1RTFJGQzlNUEU+ODs3Mjc5Njc0NDM1ODg3OTc7OTo9PTw6Ojk3NDo5ODY1OD8/QEI9RENDQ0FDQEJBQDtAP0A/PDw6O0NIPWOopaWlpqioqKenp6ipqqmoqKipqqqsra6wsLCztLW1taWYdn5xZmt4cW9tZmVsaGNsZ2ZpaX11bWlvfXZ5hWZod294b3Fvcninu7m5ubm5ubm4uLm6ubm5ubm5ubi3t7W1tba2tre3t7e3t7a2tba2tre2tbW1tra3t7e2tbS0tLS0tLS1tLS0tLW1tba2tra2t7e3t7e3t7a2tre2tre3uLe2t7i4t7i4uLi4wMXTyry8w83PyMC9urm5ubq6ubi4uLi4t7W0tLSzs7KysrGwr6+vr66urq+vr6+uraysrKurrKysq6ehoJ6gn5udoaGdlpmkpKaon5mZmZmanZ+gn56fpKqtrq+ura2srJl1cGlrY2FeXVVOU0tSREQ4TktHQTo4NTI2OTY1NDczNzc3ODk3OTo7PT0+ODg4NzU6OTk1OD9AQEFEPkZAQkNAQkNCQT88QEJCQD0+OjpERj5cpqWmpqampqanqKenqKioqKenqaurrKytra2ttLS0tbekc311bnONf3JmanFjaW1jaGZobG51aV9jZ3VzdnpuZ3Bwcn56cYihu7m5ubm6urq6urm2s7a1uLm2trW1tra1tbW1tbW3tra3tra2tbW2tbW1tbS0tLa2t7e3tbS0s7O0tLW1tLS0tbW1tra2tra2t7e3uLe3tra2trW2tbW2tra2tra2tra3tra3uLi3uri4uLi3uLi5ubm5urq6urm4t7e3t7W1tLS0s7OysrKxsbCwr66urq6urq+vra2srKuppaSmpqScmZubmpmampmXl5eXl5aZm5iZmJmZm52en5+dnJ6gpKWko6OioqKQdG5jcGFeXltUU1RIVEo/PFFCRkM7ODYzNzo1NTQ4Mzg5OTc4OTc7OTs9Ozc6NzU2OTk4NTg+Pz9ART5CPz9DPzxBQUI/PT9EQT8+PTk9Q0Y/VaSlpqanqKeoqamop6ioqKioqKiqrKuqqaipq7W1tba5o3eKcXKHhnd0cGh5a2JjYWVsaW5zal9jZWNjZWprYmRqbHaXjX6ovbm3tre5u7u6uLWxrKurqq6wrKyrq62tq6uvsLGvr7CytbW2t7W1trW1tbW1tbW2trSvr7O0tLSvra6vsrW0tbW1tbW2t7e3t7e3t7e3t7e3t7Owsra1tLa2tre3tra2tbW1tra3t7e5uLi4t7e3uLi4ubq6urq5uLi3t7e1tbS0tLS0tLS0s7OysbCvr6+vr66vr62oo6KgnJqampqZmZqbm5qampqbmpmZmZiXl5aYmZmZmpycnZ+foJ+goKChoaCgoJ+fi3RuaXRdYGZeUlRLRFRJPUVTSEVCOzo0NDY5NDQ1NzM4ODg3ODk5Ojs7Pz04OjkzNTg5NjM5PT5AP0A6QEJCQkA/QEJCPz0+QUFCPz06PkVDQFGjpqWlp6inqauqqKaoqKipp6ioqKinp6ioqaq1tbe3t7KZtH99kIx1Z2lqbGZjYGNoZW94cGlicXx5cGpmZmRma3NqhYystrKwra2ttLeysLCtrKuqqaiop6ipqampqKinqKipqaeoqqurra2sqqytraysrq6traunpaSnqqyopKOkpamwsbGztbW2t7i3t7W1tre4t7e3t7Kppaasq6ivtLa1s7W3t7a1tbW2tra3t7e3t7a2t7e3t7m6urq5uLi3t7Wxs7S0tLKxsK6sq6yurrCxsK2rqqmqqKijnJqZmJmYmJiYmZmZmZmZmpqZm5ubnJybmZeYmpqcnJydnJ2foKGhoqKioKGgoKCfnop1amtuWVxhVktPREdVRz5PV0hEPTw4MzQ0ODQ1NDgyODk4ODk6Ojw5OUA8Njk6MzY3OTE0PD8/QEBBOkNGRUJBREJDQTo7P0FCQz9APUBEQ0BPo6empaemqKqqqqakpqenqKioqKimpqaoq6uttba3t7e4rbJ1cHuDdmBiaWtiZWZhZGdmfYh5bHKAfXFvcXhjbW5xZo+srKurq6ysra6urK2trKyqp6WmpaWlpqioqKiopaeoqKioqKeoqampp6Wko6KioqOioKKioaKhoKChoaKjpKOjpaWlqLC0s7OzsKuqqaqztLa3trGopaOioaGipKiqqairs7Sxrq6xs7W2tra3uLi3t7e3t7e3t7a2uLe0sa6ppqerrKmnpqWkpKSkpKWnqaajoJ+enZycm5uampmZmJeXmZmZmJiZmpqampqampqbm5mYmpydnZ2dnZucoKGgoaOjoqCgoKCfnp2FdGtsaFdYU0pHTUVITUdAU1dGRz09OTM2Mzc0NTU3Mzg6Ojo6OTw9OjpBPDY9ODM3ODgzNztAPz9AQDpCRUNAQkRDQT87PEBDQkNBQDxBQ0A9TqKnpqanp6mqq6mkpaWlpaaoqKippqanqKmpqrW2tre3t7izc2h7c2JnamtpaWJhZGloXV1tfHJma3J/fHR8bm1zc36gqamrq6uqq62trKusq6mpqKWjpKampqWmp6eqqaamp6enqKinp6iop6WjpKKhoaGhn56en5+fn56foKGho6Wko6OkpKSmp6enpqWkpaampqeqraumpKKhoaChpKWlpaenpaeoqKalpaivtLa3trW1tra1tbOwrKupqa6rqKWlpqampaSkpaWlpqWkpKSkpaKhoaGgnp2bm5ucm5qamZiXmJiYmJiZmpmZmZmYmZmZmZqZmZydnJycnJybnJ+fn6ChoaKgoKCfnZ2cgHNrbmReU0pITUZETEtFRFFTQ0c9PDgzNjI4NDY0NjQ4OTg6Ozk7Pjw5PTs5PTczNTk2NTY8QD0/QD88P0JDPkJCQj89Pj5CQ0FFQD86PkVAO0+jpqWkpqeoqaelpKWlpKWnp6eoqKanp6alpqa1tba2trW2uYptcW1vfHxxZ2pmYGFsYFROW2hqbm9tgYJ9cWdxdn6aqKeoqqmpqqurrKqqqqimpaWkoqOlpqalpaWmqaqppqWjpKWmpqSjo6KioqKgoJ+fnp6cnJycnJ2dnJ2en6CioaKjo6KhoqKkpaSioqOjpKSjpKSko6Ggn6GipKanp6ipqaelpaSipKSlqK2wsKyrqqusqqmnpaWmpaWlpaalpqioqailpaWkpKSlpKOjpKOioaGhoqKgnp2cnJubm5qZmJiYmJmam5mXl5eWlpeXmJiZmpqcm5qampubm5ucnJ6goKGgnp6enpycm356bnJiXlNNSlBFRk5NQkBPRT5JOz01MzYzODM2Njc1Ojs4OTs5Oj49Ozo5OT03NjY5NjU2PkI+PkE/PT5DQT5DQ0BAO0BAQkJCRUA+Oz5FPzxQoKSjpKOjo6SkoqSlpaSlpqamp6empqalpqaltLW1tbS0tbiBaHx9ZXOCemxwdWFfY1ROT1FbaGxpbGxxbW5xbnScoqSnqKioqauqqqqqqaempaSjo6OjpKSlpqalp6ytqaShnp2eo6Shnp6foKCenJ2dnJycmpqam5ucnJubm5ydnp6foKChoJ+goaOioKGjpKSjoqSlpaWkop+go6SkpKapqainpaGdnJ+jpaipqainqKioqaempaWkpKSlpqampqampqenpaWko6Ojo6KioqGhoqKhoqOkop+enZ2cmpubmpqZmJeXmJaWlZSUlJWVl5iYmpubnJuampqam5ucm5ucnp+fnpucnJyam5p/fnF0YFtUTUdNSEZMSj8/TkM8QDs8NDM4Mzc0NzY3ODs9ODo6OTk7PTs7ODk9Nzc4OTU4OD9APT9BPjs9RD89REA/PzpAQUE/QUVAPjw8Qz88Tp2ioaKioKCipaSkpKWlpqenp6empqampaampbW1tbS0tLS3jHalsXdmc3Jvc2xjZGlYT1JRT09dgG1kYFptkZGSoqKjpaampqenqKiop6alpaSjoqGhoaKjpaempqesrKemoJ2cm6Ghnpuamp2cmZiam5qampmZmZubm5uampqampucnZ6goaCfnp+hoJ6foqOko6Omp6inqKWioKGhoaGkpaWlpKCcmZmbnqOmpqampqanpqempaOlpKWlpqiop6enpaWlpaWkpKOjo6KhoqKioqKhoaKjo6Kgn56enZybnJubmZaUlJSTk5OTk5SUlJWWl5qam5ubm5qZmZqanJ2dnZ2dnZuampqamZqXf3dvc11aTkhKTkdFRklERU5APD09PDQ1OzQ2NDY1Njc5Ozg5OTg5OTw7PDc6Ozc4ODg1ODg/Qj9BQTw+P0A8PEJAQT49QT4/Pz1CQUA6OkA8PE+doqGfoJ+dn6OkpKSlpqeoqKenp6ampqampqW1tLS0tLS0tbSXtqd1Znh2Y2xjY2VjW1JTU1JNXqCMeFhodpajnp6hoaOjo6OjpKSlpqalpKSioaGko6OjoqOlpqWmpqenpp+bmpuioJmWlpWam5mXl5iYmpqYmJqampqbm5qZmZmenZ2goqOjo6KkpKWinqGhoaKjpaampaSjoaCgn5+hoZ+goJ2amJeZmpygpKOjpKWmp6alpaOjpKSkpKWnp6ampqampaWmpKOjo6SjoqKjpKGfoKGhoKGgoaCfn56dnZyamJeVk5KSkpKSkpOTkpOUlZaZmpqbm5qampqbnZ6enp2cnJybm5qamZmZlH10bHReWk9IRUdGQkVORT9GOzo+Pzs0Njo2OTM2NDY4ODo4OTc4ODo8Ozw5Ozs6OjY3ODk5Pj9APjw9QD5AOjlAQT89QT8/QUE+QUE/Ojk9PjpQnaCfnZucnJufoqOlpaWlp6iop6ampqanpqantLS0tLOysrGwsK2rkHiGj36bmn93Yl1TUlFRTGKgootaiKCgn52YmZycnZ2eoaGgpKenpqWkoqGjp6alpaKipaampaanpqagm5mboaCXk5OSl5qcmpeXl5iampmampqam5qYmJmaoKCgoKGfoaKipKamop6gn5+goaOko6Khn56enpyanZuZmpqZmJeZnqChoaKioqKkpaWmpKSkpKKioqKkpaWlpaWlpaalpaOko6KioqGgoKGgnp+fn5+fnp+foJ+cm5qZl5WUlJSTkZCRkpKSkpKSk5SVl5iZmpmZmpqam5+fnp2cnJycmpmZmpiXl5F8cmdxXl1QRj9BRD9KT0JCRjhDRT4+OTg7Nzc0ODQ1OTo6Ozk3OTo8Ozo8PT48PDo2NzY5OD4/QT47Pz49PDg6PkFAQUE/P0FCQERBPjo4PkE8U5ycm5uampycnaGio6KjoqSmp6alpaampqSjo7KysK2rp6amp6alpqiln6iop6qnoXmEXFFST0xcnKCAYpmgnp2clZOVlpeZmp2dnqGmpqampKOioqanp6ajpaampaWmp6amop2cnqGfl5GRkJSXm52YlpaWmJuZmpqampqZl5iam6Ghn56fnpybnJ6goJ6dn56fn6Cio6SjoqCfnp2ZlpeXl5iYmZubnqKioqKioqGio6WlpKOio6SioaGhoqOkpKSko6SkpKSioqKhoqGgn5+gnp2enp2dnZ2dnp6em5mYl5WTk5SUk5KQj5GSkZKSkZKTlJaXl5iYmZqampyenZ2dnJubmpiYmpmXlZaNempmamBiTkY+P0A9SkVAQ0A7QEE8Ozs5Ojc2NTg0Njc4OT04ODs6Oz87Ojs8Ojk6Nzc2ODs7Oz08Ojo8PTw3Oz5DQkRDPz1BQ0FEQT88OkBCO1eZmJqamZmam5ucnp2foqKhoqSlpKSlpqSioJ6op6alpqWlpaemp6ampqakpaanqKehqXJOUU1KVJahenKanJyenJeVlJWWmJiXl5qeoqKhoqOkpKOjpaalpaanpqSlpqalpaOgoKGhn5mSkI+WmpmenJaXl5eZm5ycnJqamZeZm5uen52cnZyZmZqcnZydnp6fn5+hoaCgoaKgn56bl5WVlZeanZ6fn6GhoqKio6OhoaCgoJ2cnaGioqOkpKOioaSlpKOko6SjoqKioqKhoKGfn52cnZ2cnJ2dnJ2enpqXlpaVlJOTkpKSkpCRkpKSkpGSlJWWl5iYmJiam5ycnJycnJ2cm5mYmZiWlJWXi3hsY2RiZFFHQT1DO0tIRDo7Ozw+OTo6OTo3Mzc5NTo4ODg8OTg7OT09Ozo7Ojk8PDc2NDc/PDo9Ozw/Pjw7ODxBQ0FDQkI+P0NAQkFAOj9APztZmZiampqam5ubm5ydoKGhoaGhoqKioqKhn5+dpKWmpqenpaWmp6ampqWkpKalpKSkpaaGUFJQT0+PmHB6mpubnJ6cnJycm5ubmZiYm56dnp6foKOkoqGhoqKio6SkpaalpKOjoaGhnpyalZOUmJuam56amJiYmJqcnpyam5iWmZybnJycnJydmpqbnJ2dnp6dnp6fn52cnJyhoaCblpWVlZacoKGgn5+hoKKjoqOhnZuZlpaWlpicnqCip6ikoaCgoqOjoqKioKCgoJ+fn5+gnp2cm5ucnZydnJmanJuWk5KSkpKUk5KSkpKSkpOSkpKRkpSVlpeYmJiYmZqcm5qbm5ucnJqZmJiXlZWWl4d3ZGdoZGJNQ0U8RDlJSkU5Ojs9PTo6ODg6NjQ3OTU8OTY4OTc5PDs7PDo6PDs6PDw4Nzg3Pj07Pj46Qj86Ojo/QURCQ0FBQD9EQUFAPjpAPj06W5qYmZqbmpubm5uen6CgoaKioKCgn5+enp2dnKWkpaanpqWlpqakoqKio6Oko6Kjo6KnllRYVVJOZ21rgZ6am5udn6Cgn56enp6dnJ2dnJ6enp+goaCfn6CgoKGio6Ojo6OjoqGgnpuZmZiZmZmamZienpiYmZmam5qWlZeWlZicnJ2cm52dnpybnJ2cnZ6bmJqeoaGdm5udoKKhmpWVlpaZoKKgnZueoKGjop+em5eXlJKSlJeYmZ2goqenpaGgn56goaGioaCfnp2cnJubnJubmpqZmpydnJmXmZaVk5GQkJCPkZKSkpKSkZKTk5OTk5OTlJWWlpeXl5manJubnJucnJqamZeXlpaVlZSEcmZsYmRbREJMPT84RktCPEA+Pj05Ozk6PTg1ODg2Ozg1Njo4PDw7Ozw8Ozk8Oj09OTU4Nzw5PD88OkE/Ojo6QEBDQkRBQ0A/Q0FAPj08QD09Ol+al5mamJeYmpycn5+foaGhoJ+fn56foKCenZ2lpKSko6OioqOjoZ+foaGipKOio6SiradXXl1UV19ua42dmpqbnJ6dm5ucnZ+enZycnJydnZ+goKChoaGgoKGgoKGioaGioZ+enJqampqbnJqZmpuZnJ6ZlpaWl5eTjo6QlJabnJuam5udn52cnJycnJ6dlpSZnJ+in5ycnZ+hoJuXl5mZmpycnJubnZ6fnZqXlpaWlJOTlJiampqfoKGmpqWgn56fnqChoaCenJubnJybm5ybm5qZmJmZmZmXl5iVlJKQkJCQj5CSkpKSkZGTk5aYl5STkpSVlJWWlZaZmZmam52cnJyampmXlpaWlpaQgG9vZV5gV0BKSDg/N0lFP0VBPD07Ojo8Ozs3NTs4Njs3NDY6Oj47Oj0+Pj07Ozs+Ozo4Ojk5NkBBPTo8PTo6OT9BQ0JERUM+P0FBPz8+Pj89PDtgl5WXl5aVl5mbnqGhoKGioqCenp6enqCgn52bpaWjpKSioKCfoJ+dnZ+hoqOjo6OkobCjXWVkYGFua4GenJubm5ubmZianJ2enJubm5ycnJ6ipKGeoKGhoqKhoKCgoaGgn5+enJqZmpubm5ybmp2dm5manJiXlZWWkY6Nj5KYnZycm5ycnqCdnJucnJyempWVm56foZ+dnJyenp2cmpqampqampqbm5qXl5aTkpWVlpWTlZaam5qanZ6foqWjnp6fn5+en5+enZ6fnZycm5qcmpqbmpiZmJiYmJiYlZSTkZCRkJCQkZKTk5CRk5SYmZiVk5SVlZWWlZaXmZmXmZqenpyamJiXl5aWl5eYjX1ubV9lVlRFSzw3PjdSRUM+QkE4Ozw7OTg6ODY7Nzc6Njc5Oj0+Ojw8PT49PD06Pz06ODw9OTtAPj4/PT45ODs/QkNAQ0VDPT9DQj5AQD5APTw8YZWSlJWWlpeanJ6goKCgoaCgnp6enp6gn56em6WlpKOioJ+fnp2dm5mbnJydnp+gn56rmGNpbW5pZm2enZybm5ybmpmZmZqam5ucm5uam5ygo6SgnZ6en6CgoKCgn6ChoKCfnpuamZqam5qbm5ufnpyZmJqamJiYmJKOj5OXnJ2bnJ2cnJycnZycnp6dnpqVl5ygoaGfnp2eoJ+cnJuampqbmpqYmpmVk5OTkpOWl5eVlJiYmZucnJydoJ+gnp6enp+fn56en6KjpKKgnp6cm5qampuZmJmZmJeXlpWUlJORkZCQkZKTk5OSkpOUmJmYlpWUlZaWlpaWl5iYmJiXmZqamZeXl5aXlpeWl4l4dmddX1dURUU5OTs8WT5AOEI/OTs7Pjk4Ozg6Ozc5OjU4OTs9PDk9Oz0+PD0+Oz8/Ozk+PDw+Pz5AQUE9ODc7QkNFP0FFQz1AREJBQEQ7Oz47PGKWk5SUlpWUlpiYmZubnJycnZ2cnJ2en56dnJqkpKSkoJ+enpybm5qZmJiYmZucnZ6cpolla3R4bVuFop2dnJydnJqbmpqampydnZ2bmpuboKKinpucnZybnJ2enp2dnZ2fnpyampucnZybm5ycnp6cm5qanZqam5yVkZOXm52dnJ2fnZycnJycnZ6fnp+cl5idn6GhoJ6cn6CfnJubm5qbmpmZmZmZl5WWlZaYl5eXlpaYmZuenp2dn6GhoJ+fnp6fn5+dn5+hoqKhoZ+fn5yZm5qcnZuampmXlpaYl5eXlpWTkpGTlJSTlJSUlJaZmJaVlZeZmJeYl5eXl5eYl5iXl5eXlpaYl5eVl5eDeHZfW11eUT1GOjk4P1VDQTtDQzo8Pz86Ojk3Ozg4ODc0ODk8Ozw4Ozs8PTo9Pjo/QT06PTw+PkA/PUBBPjk2PERDRUBBRUU9PkVERD9COzo8OTpkl5SVlZaUlJSUlJWXmJiamZqcnJydnp6dnZybo6Oko6CenJuamZqZmJiYmZiam5ubm6WJa3F2em9lmp+enp2dnJybnZ6dnJ2enp2dnJydm5ygoJuampubmpudnJqampucnJuZmZycnJ2dnZ2dnZ2dnpybmp+fm5ydm5mZmZudnZ2dn52dn5+dnJydn5+fn5uanZ+goJ+dnJ6gnpubm5ubm5yampuamZudnJqZmJeYmJiYmp2foKCgoJ+hoaGgoJ+en5+fnp6foaKhoJ+enp+enJqam5ubmpqZlpaXmZmYmJiWlJOUlJWVk5OVlZSVlpWVlZSYmZuamZaWl5WWmJiWl5OUlJGRk4yRkJOWfXhqYWJiXFA8QDw2OENWSERCOjg7Oj47Nzc5Nj06OTk2NDc6Ozw9OTo6Oz87PT08QD47Oz46PT89PkBBP0A8NztBQ0U/P0REPj9EREM+Qj07PDs6Z5aTk5OTk5OTlJSVlpeWl5aWl5mbm5ybm5uamaOjoqCfnpuamJeYl5eXmJmYmZybm5qkgGpqb3lzcZegnp2dnJydnp6enp+enp2cnJydnp2bnJuampqam5ubmZiYmpqamZmZmJqdm5ydnZ2dnJ2cnZ2cm5qdn5ucnJubnJubnZ2dnJydnp2enZydnZ2cnJ2dm5uenp6dnZybnpubnJycnJydnJubmpmbmpmYmZmYmpmZmpyfn5+jpaKfoaKioaGfnqCgn5+fnqCioaGhn5+fn52ZmpudnZqZmJWWl5aVlZaTkpOUk5STkJCSk5GUkY+OkJGOlZabmJWYlJmXlJiRjJCPk5yTkoyFjIeDhndxZ2pkW1xRQT44NkJHYEJFR0A+Ozw7Ojg4NjU8ODo4MzQ6Njk9PTk5Ojs9Ozw6PD48Oj5AOj5APjw/QD8+PDg6Q0FEPz5CRD8+Q0VCPUJAPDw8OmeYk5KSk5OSk5SVlJWXl5aWlZaXmZmZmpqampqkoqCfn52bmpmYmJiXl5iZmJmcnZ2cqH1nZXN7enOJop+enp2dnp6enZ2enZ6enp2dnZ6cm5ybmpubm5ucm5iYmJmZmJiZmZmbnZycnZ6enp6enp6dnZybm52bnJybnJ2dnZ2dnJ2dnp+fn52cnZ2dm5qbnJmZnJ2dnZ2dm5uanJ2dnJycnp2dnZybmZeVlZeXmJqam5ubnZ6foqOhoKGhnJucm5ubnZqcmZycn6CfnZiZmZmUkpKUl5SPj4+OkYyNiYuQi4mLjpGRj4mQmJiQkoyNi5KQj5iYoqiqpqWlrKOmoZqep6eyqKKVo6Cfl39wcWlsXFtcTUY8NzdHR1g+SE5URjk+Ojg5ODc1PTk4NzMzOTY6Pjw6Nzo8Ozo6Ojo8PDs/PjtAQD47PT5BPDw2N0A+QkA+QUY+PEFEQT1DQj49PDlmmJSTk5OTkpOUlZOVl5iYmJaXl5iZmZqampqaoqGfnp2cm5mYmJiYmJiYmZmZm5ybnKx/am16f3lxh6Genp2cnZ6enp6enp6dnp2dnZ6enJubnJubm5ubm5uZmJiYmJiYmJmZnJ2dnJyenp6enp+fnp6dnp6dnJydnJ2dnZ6fnZ2fn56goJ+enZ2dnZybnJ2em5qbm52enZ6dm5ubnJ2cnp2cnZqYl5SRjo+QkJGVmJSWlJiZmpudmJuYlY2Mjo6TkpKRj4mQjpGRjo+Ki42NjYiIi4+Lg42NkY+MkI2Qk5WVnJihoJySn6SipKmam5eanKOprb3Bwbq8uL26ucC8ubq3uru7tL2zwbV/bnVmZ1peWUxJRTo7TElTPFZSSUM6QTo7Ozc3NTo6OjgyNTY4Oz08OTk7Ozw5Nzo4Ojw6PT85PD8+PDw9QTs5NTg8O0A/QT9EPTxBQkA8REM9PT06YZOTkZCUlJOTk5OTlJeYlpeZmJmYmZqbmpqamp+gnp+fnJqZmpqampmYl5iZmZmZmZmphXB1e4B3b4mhnp6enp6fn56en56fn56dnp6fnp2dnJ2cm5ubm5ubmpiYmJiZmZiam52cnJ2dnp2dnp6goJ+enZ6hoJ6dnp2enZ6fn56en6CenZ6enJydnZ2cm5qYnJuVmJqamJiYmJmSjJCXlKCXk4+MjYqKiImMiJORh5CPjYqKkJCLjoqMi4+IiImJjpGOjYaFiYaKhoWLiI+SkJCNkJKXlpKamJ2TlJ6kpqaqq7Gsr6+rpquqsbm5tbS0rqyvtMDIxcXBvsbDxMTDurW+t7a0s7C2tb6qcHRyXGZfXV1JRj8/RUtMVklcTEQ/PUI6Qzk5Nzc7OTk3MTc5ODo+ODg6PDw7OTc5OTs9Oj4/OT5BPDs+PD46OTY5PDpBPkNBQT08QkBAPkJEPj8+OVyHhIOHi42KiYaFgYqMkZOVmJiHlZaWkpiampmenZ+gn52ampubm5ycm5iWmJmXl5ibqo56dXZ7f3mCoJ+fnp+goKCfn5+foKCfnp2dnp+enp2dnJqbm5ybm5uYmJiXl5iZm5ucnJydnp6enpybm52dnZycoaGfnZ6dnZ2dnp2dnJiWlpaYlZWSlpmWk5GKjI+PjI+NkIuLj4+WiYiEi5GZjn2Fi42PjYyHioyQm4yRj4+Lio6TjIyNjIiSi4yFiYyPhouIh42KhYyEj4qXkJOYmpWbnKOqoaKknKKrsbe0ubWxs62vsrKlp7O6sbq6vLa3tsDDw729vLa/urq8wbW4wL60r66mqa+3mm58Z1tjWl1fSEU+QUtJU1hZXkFGOTk9OUY/Pzo3Ozs7NjM6Nzo5Pjg6Ojw9OTk4Ozk7PDo+PTtAQDs8QjxAOjg0Nzw7Qj9BQj4+O0NEREBDQz0+PjlhmZWLkYWNj5aSiHl9e3+Fi4OKgoqJhmuAeJCLlpqRnZ2UlJGTlpeampiWk42Sk5KQm5uIdndzcX1/cpGgnZubm5yenZ2eoKGgm5uWlpucmpybnJuYmZqYmJmampqWi5CTlpmYlZiYlpucl5WSkY2SkZCUk5KXm5mYm5ePjpCLjo2Ch4uLi4qLiI2RjIeHhoqIiZGKh4yEhYqNi4qNhI+UkIyDkJOUmZWQi5OTkZWRlpWOj5GMlI2Oj4qIj4ePhoeJiYmNiomJioWNh46JmJKUmpuXmKChp6Cko5qqqbO2sbWwqKmiqK6tn6qvsK21ubi8wr/BxLixtbCutrOwuL68ury+urOzp7G3wpB1gGNiXlpXUk1IRkVQSVlXX1tDUDpCQz1HRj84Nzo6NzU1OTc8OTw5ODo9Pjo6Nzs7Pjs7PTs9P0E7Pz48Pzo4NDM3OkFBQEI+PjpDREM/QUM7PT45Z6mloqKZn6CippeUiI2CiIJ1h4iKiIp7e3Z7enmPeoiSfn18en6CkYWBgH1zfH99fISHfnRweHZzfHaBj4iIiYeIioyMkZicl4iOhIuNi4iNkI+Pi5GPi4yOj5CQjouFhYeLjIyHiIuOi4eMhYaBjYuGiop/iYqGiJiRiIOIg4KFfIuLjIaJi4iKkIyIi42PjI+Wh4mLio6NjY2Wk5OdnJyalpycm56bmpuYnZeTkZWWkJKRi4+LlpSMjYqDi4SEiYyQkIqOio2LipGJjZOTk5SVk5KcmZ6Xn6CfpaKvsamupKSfmKStpqa4t6ysu729wsPAv7+vpa2wsLS3uLO0uLa0ta6stK+4tLaBeXpjZmBeVlBRQUVMT0lcXl9UR0dCS0xCREA9ODg7OTU3Nzk3Ozc9PDk9Pj05Ozg6O0A8Oj06PkJBOD88Oj84NjQyOTtCQD9CPj04QEI/PkBEO0A+N2CloJqXnaGaoaCPl5efl5WCjaCfo6GdmpKOjIxycXBvdnFucG1ucHZub29waHBxcHR+c3FycXd7cnl2d3Jyd3Z6e3l8fXt/iIGEi3+PkYaNi4uGiouLiYaEgYaCgIKJkYOAg4x/ho+LiYWAh32AgZKQhoSEho2DhIyPj4+IjY+Hi4iRkJWRjpCKk5eOj5WYp6SfnZWYlpaln5udq6aqt7W4srGnr6qnpqGfmp2WkpWVkYqPjImTjZuVjYuLhoaJjJWQkJCLmZKVlZSbkJiTlIyNkYyWl5WilZ6mqauno6OqsJucpp+mq6G0vb6zs7+5u7u6uby9rqiusa6wuLyztLGxqrCpqLGxsqild3J0X2hhYFRWUUlKSFZNXl5eVExKRVFKRUdDPTo5OTc0ODY4Mzg4PTo9PD47OTs4Ojs/PDw+OT9DPzg7Ojg8Nzc2Mzc5RT4/Qz89N0BAQT0/RDw+PThUj4yGh4eUjJWZl5yWmZaNlZyWlZydoKCdmpiWeHFubXJ4cXFsbnJwa3FvcG1yc3t1dnd5fnVxeHZ0d3tybn98gX15eH1/eYOGg4WCg5CLkIuLi42Pi4mJhYKBfX9zfYiAfpyQhIWFiYuPinp9fYaOjYqGjZSRi5CXj5SXkpihlp6XlZunpp+goKawq6GjpbW0sqqmqq+isba5vcK7ucO+vLi9uLWxrLCspZuSk5mfm5SPk5WOmp2doJqfn5edo6qsoZ+em62hp6qwqaampJiRkZWUo6SirKSss7Szs6i3tru4sLKvra2yt7a6srW6s7e5u7i8urayr6yxsbKztLOxsa2us7Gzs6yhl3Zxc19jXlJRVE1PSUdYT1tcZFROR1VPRURKRD44Ojg3NTg4ODU5Nzo6PTw/Ojg8ODk5PTs9PTpCPj84Ozo5Ojk4NjI1N0I+P0RAQDY+P0I/PEM8PT46Tn98go6MjJOTl5eaj5SWjZaRkZSXk5qanqGdnHJvcnFxcXFxcG5zcW91dHJxdneAdXd8eYV+d3t8eX1/fICJiYmDfXp/h4GIiYGAgIGGiIGGi4aIhYSIiImEf4J/enx8fX6SkH+IeIGFi4qDhIWKj4yNkZmdlJSUoJqan6Ktsa2ppKWtr6ysrLWuvrmtrqm1sLexq7G2rK+9wsLAvrq8trKutraxtK66u7OurKepp6unoqmtoKmooq+wuLSxvLq6urK0ta+8tLezt7e7t7mtrbCprLW5sbeytLe2sLu7vLu6ury1vLi0wbWsqqqrtLG3uLm1trSzsKymrrCqq7Cxq6yusLKxtK6qo5N4dnJlZ1tMUlBGTUhTV1JlXmdUUExcUUhMUkNBOTk3OTU4ODY2Ozc5Ojs6Pjk4Ozo6Ojw8Pj08RD45Njs7ODg+OTUxNTZCRkREP0A3Pj5DPjpBP0BAO0t/gomXmJSdlpabmIuSlo6XkZGVl5SZl5+bmZx8dHV2dXl1c3RudnJzdHV2d319gX56gXyDfoJ/fYB/hIKFj52RiYF/go+Xjo6HgoCBiIuFfoqQi3+HjYyLioeSioeGjZGTkZGEh319g4iMjouOiomQj46PlJSYkZWbmp2dqK6yr6+1tLOtsrW4sLy1tbGqsKqztbS7t7SztrS1r7i4t62noqassLCvtre3vrW5vLOysa61u7C0r6+yu7axuMC9tLS0s7izvLq2tLrAvbm6ubq+ubm5vrWysa+yr6q1tLGzsbSzrri4tb+vpKaoo6ussa+zrq6wsKytq6qroqKmqKKnrauqpaynoqeYeHlxZmVZT09NSVJNV0xPX15cTlVVYlFEVE07Pzk8ODk1Nzc1Nzk1Ojo6OTs4Ojw8Oj08Pj4/P0I9ODY6Ojk6QDs1MjY2QUZDQz4/Nz49Q0I5P0I/PjtLjpGTmJmVmZGTopiTkpKLk4uOkI+Vl5ablZSbhoJ9enh2dHRzdH53end2gIKDhouMhISFioaQiYeRk5aRjZaalY+IjI+emJaVkpCTl5qamJCdoJ2Tl5qgmZ2bo6CVkJugpKOak42IiIuJkZGOkY6LmJqPj4yUmpecnJufnKSstLm6vK+2tLi0tLK3uLmzq6+qqKy1srK1rrGrrqa3s7OxpaGotbCvrayrtbqyu7q6tLK3ur67ubG4sLmtqLK4u66ttLS3tbu2trm5vLe0r7G0t7a5s7e1pq2pq6ior6yprq2up6KxtLG0q6aop6Cjq66oqq6orLKwr6+pqKGeoaGjpqOgopqlo56ol3J3bmdiVUtUT09KQ1BLX2JYWlFcVGBNSFJJQUA5Ojg2Njc3NTg5NDs5Ozk8Nzs+Ojg8PD0/QkBBPTs2OTk5Oj87NjM3OD5GQkJAQjk+PUBDPkBGQj44R5OWkZWTkpSQkZ+ZnZmVkI+Sko6Mk5aWko6RlZGSkIaBeXJzdXuBhI6HhZGTkpicnJiVkJWYo5yaoaeqqZ+clpeVnaKioZyZnpmlqKyvramnqqmop6GlqKirqamvoZufoaOjoJqfoJyUjZiUmKCgoaSem5qkp6Spq66spaOoq6+xtK6qrK6zr6ystLO0ua6urayqrLKwsK2wqKqmsrS0uK6qtrqwr6qurLC3s7i0t7W0u7y4tbWxtauyrKiys7uvrbGytLa1sbG0s7OvrKuvs7a0sayutKqqpqWnrauoqKupqqifqbOwqqeppaOio7CtqaatpairrayppaSioKWipaOYmZyVnqKippdudWVnZFZPWEtLSktTVHBiWWRXX1tcUlpQTEM8ODk6Njk4NzQ3NzQ4Ojw6PDg6PTk3PDw7PkM/QT47OTo5Ojs+PTg0NThBREVEQkM5PjtAPkI/R0Q+N0KSm5SVlZaVj46Wl5qZlZGKk5SSjo+SkYqKiY2Ul5qTjYmCho6VkZSfmpuin5+jnqGhn5ijpKelpaapqa2rqaKmpKilpKGfnqOjra2srairrq6qqqukoaKkqaenqaijopybm6SgpaijoJidmZ+hoqmnoKKirqyrqqetrqilpKmpqammo6iqqaekp66wr7Ovq7Crqq+yr7Czua+rqLCxrrCyubO0r62vtbCss7GurLW1tLSzs7CvrKyqrKusr7G0s7CwrrCwsKyqrauqq6alrrCysKumqbCvqaOkqaunqKaopquwq6mvqaaoqaalo6iwraqpqKKpo6WnpKGhoKKloZ2el5aYlJugpKmUbnNeamlfVVpOUk5QT1JkXGVjW11ZXFBZT0tAPDs5Ojc6ODczNTMzODo9OTo4OTo5Oj08PEBEPkA9OTo8PDw+Oz45NTo8QkFFQUNBOT47P0BEQENCQDdAkZ6YlJeZlpGHi5SSl5GIg4mLk4+OkI2Hh4SFlZmWmJeZlpqeop2anKKkoaCdn5qfoKGgpqGgoKCjo6KlqKmrramqpqOmpaCloKaopqWnqKapqKOnppmcpKaioaChoaCcmJmfoKGkpKKenpagm5qioqChn6CiqKCcn6GloaCmo6KfpKGspp6foaGkrKqnrKivq6e0sa6ur7WyrKqwq6mtrbWwrq6srreup6yqpKivsq+sq7Kvqqqpq6utqa6urrGxraqtqaunp6uoqauinaapqKilqKisqKilpKWop6iopqmsr6+oq6mhoqKlo6Opq6ymqKWjqKKhoKSdnZ+hoZ2bnZ+amZWcnKOqlG9zZm5yZF1dUFVPV09eZGRsaGJiWlpSVE9NQTo9Ojo4Ozk1MTYzMjg4Ozk5OTk7OTk8Oz0/Qz5APTk7Ojs8QD0+PDk5PEFBRUFGQTo9Oz9BQUJBRUI4PYqWlJOYmpaPiISNjpGSjIiIiI+JiZCRjoqKiJubmZygpaKlnqKjoZqeoZyanZ6bnKOop6ugoKOYoJ2XnKGjo6WjoqKkrKilqaCepqmnq6mkn6Kgoqahpq6mpp2fn5+fn5manJyhoKGkn6GbnZqcoJ6hn56eoKOZlpqYo6KipJ+ZnKGhoqCbmp6goaSgnaejqrGorqusqaSqqquorKalrKqws6+rq6mwq6appaWoq6ynpqevq6Wnq6upq6irqqqrrailqKOmpaesqayoopykoaOmo6qpqKano6SnqKanqKepqKupoaKoo5yepqWjqKino6WlpqmgpJ6inpeYnZ+doqKlnpiUlZ6go5d1d2t2d2FfXFVZUVVWW2Necl9oX2NTUVlUSD48PTg7OTo4NTM3MzM0Nzo4OT05Ozo5PDxBQEM9PT44Ozw9PEA/Qz86ODo+P0NAREE6Oz48QD9DQ0VDOTyCmJmenZ2alZKKiZGRl5GQh4SJgoGNj4+Sj42cnZ+hpKmlqaeorK2moqKfmKSmo6Stsa6yp6asm56em5qjp6Cfo5+foq+qqqyoqKuwqaipqKGfoKeprbCyr6yjoqahqaWepKOipqClpKKlo56doJ6fpaKinp+imJWemp6fpKGblZigoZ2enJudnZuZmZWen6Oonp2iqKGaoaOmoqSoqaqoq7CxqKWlp6eopKWpqaqnoqWmqKadnqWloqClpaOlpqCjpaOjpaelqamqpKekpqKmp6SrqaenpKGlqKynpqWlo6OopJWdo5+bnaCjqaeopqGjo6mooKiioJyVkZqfoKGmopuXkpCamqCVfHdvfXlmW1tgX1pcVlxoZG9jbmlpYl5QUEA/Ozo4OTg8OzYzNDMzMzc5OTs8OTs7OT49QkBAPTs9ODw9QD08PENBPjo4PT9EP0M+Ojk/PEI/P0FEQjk6gJ6kp6Kem5+gmY+ZnaCWloqGj4iEi4qTl5SRo6Wnqq6trLOys7S4t62pqqevtLKxqq6usbKusa2lq7OssbGpq6+rq6y2r7Owq7GysaOfoqqpp663trS0trOvrKuuq7awqbKxra6npp6io6ObnZyXoqiloZ+eo5ueoZqWnaScm5aZoqefoJ+joJuUlpmWl5qfoJmVnqKZmJ2dpZ2gpKeqqaiqraylqaSlqqeqqaqsp6SkpKOimZmhnpqaoaCfpaWYnqSmpKqooqelpaGqp6mnp6ejqKWmpaGkqKesoqekoaalpaOVl52Ym5mVo6elpaSfnZ2lo6Kqo5+amZiXnJyaoaGakJOTl5ibjX93cnZ4aWJbX15cYllgZG5ta25hX2RgUE9BQDs7OTs4Ojk2MTQzNjQ3Nzc6PTo8Ozk9PUI/Pj89PDo/OTo7PD5BRUA9OTtAQT5DPDs5PzlAQEBAQkM7OXuao6OcoJ2dop2Zn6KioJibmJaYkpSQm5qWl7S0rrW4s7S4tre0uLm3tbm4ub28uKqLnLK4vLS9urW7uru4s7q/uLe5u7G3r6iusq2inJ+qsri8vL27ur+0r7GztbS3t6+1tLWysKikop+gl5Wal6SqpqahpKOkq6WlmKGko52goaKooaOgpaGck5mYmJmco56cmpudl5uZlqWam5+hqKmpqKuvr66pqKirrKytq6irp6WjoJyfo6Ojn6Cipammmpyip6Spn6GjoqKgpaanpqSooJ+ipKGjoqiop6OloaGopqalo5mbmJuTj6GknqKfmJiVoJuhpaCfm5udnJuamZugmo2YmZiTkYaAdnh4eGNbUllUX19hbWh1a3BnaWliWVNMQDw6Ozg5Nzk3NTU2Mjg1Njc3Ojw7Ozs7QD4/QD0+Pjk6PDk2Nz47QkZCPDg7P0NDRDw+OT43PkFCP0ZDOzhwkpqblJ6bm52Vl52doqajopaXnpaXl6GblJi+t7G4uba3t7i7l5S2vbu9vcDFtaK7mKC3v7+6wcm0nbu2sra/xcGooLa0urGqrrSxsLG0tba8vL68vL7Guri3ur20r7Wxsbq4t7Kzsqqmpp+YpKSnqKSupKurtbWus6CnqqynqqmlpqCnoKGmoZOWmJ2foqSjnZ6coaChnZekmpmdoKaqqqqtrq2tsLGrrK2sqamrrqimpaalpqSkpqaeo6eppKGcoKKjpqCio5+jpJ2foqWgpJyboZ6fo6GhpaSlqaOkpaKkp6ehn52elpOcoJiZko+MjJeWn5uWnJqdnJqSlpSUmJOQmp2YiouHgIB8gnhhXllTYWhgZnNvc2l0ZGlkYltMSz46ODg5ODg5NzM0NTI1NDY2OTw8Oz08P0E/QEA9Pj44OTs4Njc/OUJFQzw7PD5DREM9QDs9Nz1DQ0BFQjw3Z4yRk4qalZiblZWYm6Knq6aVl5iQlZmhnpeXvrWztLu6ubi5woeYt6u4u8DCxbOjw6e4s72/tMTHvbS7uL62wMTErqCworW2tb2+wcPGwsO5vb/AwL2/xL28ur2+tKeqmLHAvbi1ucCzr6+qqqitp6ekr6eqtLyxtLWor7Gwr6yqoqajrJ+fpquXmqifpaWfoJydoKuwsKyiq5yYm6Cor7Kys6uorre1sq2tqaalqKulpaStqaShn6Cnnp6mqKmmnp+anqGlpqmcnaObl6KmmpuanZ+cmqGcmZ2eoKijn6GfnaWioKOioZSZmpmTj4qLhI2Qk5uPjpiVm5eYkJORkomNl5iYk4uKi32AgIVwYGFeXmpiYm53dXZubFtiUVVcTUc7PDk3OTc5Ojc0NDQxNDM3Njg8Ozs8PEBAPUA/Pj8+Ojo5Ojc6Pz5FRUU8PT1AQkJCQUI7PDhAQ0NARD87NV+MjIaFlouUlZeYl5ifpqellpWWkZebn5ual7mxtrO5vLy5urWqsryxvsG0vMe5uLuuv6fGw7/KxsnIxcXJvMLHx7+xsKe8vL7FxMbJx8XGu8TAxcbAua+9vMC+vrOrqoyzu760tbfCuq2vsLWqq6aqo62kp7G2q7WyrbOtqK6vp6awr7Ktqq+zpKu1qaeopKCgnqmyuL61tbWqqaausre4t7apq7i8ubexr66noqOop6SfqKOfnqCZoZydoqSnp6GelJuaoKGlnqChnpajnZSQlpiboZqflpORlpSin5qenJudoZ6kn56VnJiPkpOPjImTkJefiZCWkZuUmJGRlZaDjJWXlpKLjIh8f4N/amZoYWtsZm51cXJ1cWZeX1xSSUU/Ojo6Nzg0ODw3NjU0MjMzNjU3PDo7PDs9QD4/QD48PTk5OTs6PDw+QkRFPj49QENDQkREOzo4QUJCQUNAOTJbk4iEjZGKi5GRlZCSmp2fnJOSmJSdnZqXmpW2sbm1tb6+tri1uLO8vMTEusPHwb+0s8XFxr/CzcfLzsvLx8HDxsfIysXExcO7vLzBxcHFxb/DwsbFwLGTvrq/w8K2trqptLO0qauzu7uxn5uxr6ykrK60p6qpqKqtrKmlpZ6pr6uyu7q4u7e5t7O5uLOurLO0qrC1ub3Bur6+vL60urm4u7qysbS8u7q7s7Oyp6Smq6uioaCdmpudmpyXmpuenJygnZaclpuZnZ6io52UnJCNiY6OkZ6bnJWNh5KLmJiWmpybmJybnp6cmp6UjpiYmpSRmZeeoZWYmpKXlJWRlJqYk4+TnZaSi5F+enx/dGtrbmRvbWhxeG55amlhXGdhUUZEQTw5OTc2NDQ6ODQ2NTMzMjY1Nj05OTs7PT47Pj49Oz05OTs7Oz89QUNBQkFAPEBDQ0NFQjs4OUQ/P0BCPzsyV5uQkZCQh4WSjo2IjZCTlZGPjZSUm5STlpqRs7e4uLi+u7C1sri2tbbAw8G+w8LAvru+u7u8xMzEzNDLxsa/xcfLyNTLysjGv7u7vsS+xcjGxsPEw7i0wLe0vMHCucK3t7/Au66lrre8t62co7ewpq20tayupaWjqKSgoKWZqrOyvsG+urm6uLW0srG0tLO6wL7Av769u7u9vsDCt7a3tru7sru+ubi3u7a3tKyoqamrpqijnpOampyYkZKZl5GRmJqXnpiWk5acm5+elJOJiX6GiIuWlJiZkYmVkZeWlZmbmpaYl5idnpyhmJWZmZyYl5ybn56jnJ6WmJeTl5yZmZyUlp2UlpOJdnl6e3Zua2lndVpmcndzeGZnXWRbUlhJRj87Nzg4NzYxNjk3NDQzMzM2NDY7ODo8Oz08OD0+PDo7PDs9Ozs+PkRBQURCQEBBQkNDREM9OTlCQD8/QD89MkyWmpaSk4yKmJCKi4yOkpKKiIaNkJiKj5CUl7O7tba/vb2xtrjBvby0uL/Bsbi3vsHFvbu8wsbJv8jOyMHEwcfKysbKxczIzcbIxb/DwMvNz8rGxMPDwcS+uL7Bw8DEvsHPz87Gq6+2tLWroKe0s66ruLWzq6mjoq2prKatn6y1tL/Cvrm4vbawrausr7W0ur7Fv7u8urO5u7i5ubWtsLS9u7G/vLiytrmzubu0ra2orKyqqaeXnpualY2MmJSTi5WWlJyZl5WWmZKYn5mQiop+iYqKkY6Vl5OUn5mWkJSZmJmWmJOUm6GeoZiYmp2ZmZaenpibopqdnJuYmpuZlpeXlpyZlJyYfoB4eXV1ZWVpamddam9teHdjYmBgXlhXRkU4Ojg6OTc5NDQ5NzY2NTEyMzM0Ozo9Pzs9PTo6PTs8Pjo7Pz48QkBDQkJFQj0/Q0NDQ0RFQDk6QkFBQj5CQTVCkJeUlZmSj5qQjpKRjZSVi4qHjI2UiImPkpq2u7S8xsHEwr3BxcLAtLO9v6ywr7rDysPCvs3IxbfByMW/wcLIy8rCwsTJzM3Pz8zDx8bIycjIycfFycfIx7/Fx8TEx8jK0s/SzLy4trS4uMG+vrq9ury6vKytp6q7urm3wLK1uLLAxrq3t8Gzsa2tqau1s7u2w7a2vbWxt762s7e4sLW2v7uwvbq0q7CxsbO8urOzrqutq62xnaOjoJqQjpiXlZCclpaYlpWSnJmTm5+clpGUjpWQiYyQlZOUm56YmZKSnJedlJmSk5aZmJ2VnJ6do5yVnZ+TnKKcnKCfnaOemJSVl5ebmpmgkH99cXRxb2JhZ3VnaWl0bXhsXWRbVWBZTEhDNjw5OTg4OjUzOjY2NDQxMzUyNTs6PD47Ozw9PDs8PTw7PD49P0E/RUFCQ0M+QEFARUVERUE7Nz5DQkI+Q0I4O4+akZaalJKUjZCUlI6VlI6Pi4yJk4uIkJObt8C6xsXEw8zCwcS9vrWvt7uvr7O6wMfFxMHMy8W2ucDCwsTHytHLwsPExsnFzdDOx8zJwsHHwcrKyMbMys3FxsXDxsXJzdDNz8zHxMDDwsnNx8XBxMfBu760sbCwwb6/wca/vri3w8K6urbAvrWyrKmvsri+tMC0tLi0t7nEua+8vrm+v8K/tbq2q6qsrq+wt768trSura2utaSlqKimmpycnZyeopydmZOQkp2VmKCdmJiVmZmZl46MlH2QkJefmZmYk5GToI6Nko+VjpCUlaKdnKSem56elpyjoKGipKOkop6amZubnJ2enIN9cnx4cGdgamp2bGlldW9zYl1iVFdUU01HOjc7OTk3Nzo3NDg3ODQ1MjM0MjU7Ojk+Oj08Pz04Oz05OTk9PEBBQEVCQUJBQT9AP0RFREVAPDo+QkNCQENBOjSAoZeUmZiVkImUk5aTiZGMlJGOiJaKi5CXnMXLw8O8wMPHwbm9vbu4tre3rrK3uLzAwsDCx8bHurzAwsXHyMbSycHCw7+/vsTLyMrLyLu6yMfJzcjDyMnJxcXDwsHCx8fJysfMyMfIzcbLz8W3wMDAwLu6vbWzs7+/ub/DucC3u8G8uri7ub27srCvsKy5wri9ube1t7q9xb24xsjCwcLGwr28tamurrCwr7O6t7m2sK+tr7OppquprqannqSlo6OjoqCblZiekZecl5GRlZeZlZmRlJiSlYyYo5qcnp2FiZ+TfJKWlZKUlJennaCipJ+en56foaGkoqKjoaOinJ2fnqOhppl5enl/cnBmZWdkamVham1ub15ZXFZWTlBKRjk5Ozk3Njc3NjM3ODk1NjEzNTI3PDs8QDs/PDw6ODo8OTk4Pj1APz9GP0JBQz89QT5ARENDQTw5PENBQ0RBQDozbKKdlZedlo+PmJiZmIiSjZGVkI+Vjo6TlpbKy7u5urnBu7q3vsG8vLu5sa61uri4u8S6vsC+vru8wMXBxsK+xsK5u8O5uLm7vcHHwcTIxsfJw8XEwMTBwsHEwcO+vcLAwMHCy8PGzMvFyNHCsL69uLq7vL63tLC5vrO8vrG5tbi7tryztbm2uba5t7GtusG6vMG/t77Ev8bDw8fHwrvAwr/Cv7iys7O1tLGut7S3tbSxrK2xp6Wlp7CtqJ+nq6ajqKWmpqCgn5SYmZSRkZWUl5OYl5qhnZ6hnKGdoaWglpSbkZeXmJqTnpmZqaSlpKWdoqCanqCkoqOcoqGjoJ6cnp6ppaiVfXuDeG5mYWRiYWJjY2piZmNaWlpcWVFORT07OTo7Nzc5OTY0OTk6NTMxNDUyNzo7OkA9Pzw8OTc3Ozo5Ojw+QD8+RDxCQURAPz49QkRCQkI+OjlCP0FCPT44NVmfnJiTmZaRlZiYmpeQkZCQk5GTlJKSkpSUxce4tbq5wrm5vMPFwri7ubGxtry6tbnAu7u5tri0tLW/u73Aub66urTAuLW3sq66vLbH1LnLvsG7v8G8u8S+u8HEwL6+uLzBwcu+vcnEwMDKwLHBv7u4u765tbe0uLy0vbi1tLCzvLG3tri/tr25vb65t7q+u7/Axb29y8PGw8TAw762ubq2v7i7v7y4trOyq7CwsrWzs66sq6emnqeurauiqKumpqqjp6iqo5+Ym52bmpicnJiXnJuhpZ2anqGhoKGmoJqbnJiboJ+dnJ+coKiho6SknaKfmqKgop+el6Shop+dmpieqKWhi3x5iH1xY2BiYmdqZ2ZpZWldVlZUWU9TS0U4PzY7Ojc3OTs2NTo7PDYzMTM0MTc7OTg/PT47PDs3Njk5ODo7PUA/PkA9PT9CPjxAQUNDQT9DPTo2PEBBQDw9ODdJlJibj5OUkZWYlZGWkpWRkJGUlZSTkpKYlcHCwLq8ub62uL7EwMKxvbqytLO4vLW3vMC8vbS1sbC1t7W7wbi+ub+8vLe0t6+ut7W308CY1Lu/vLvDtbrHuLa5u725ura7xcXKvbnFwL+8wb64xr3BwLzFuLa3tLi2tru7uLa0t7q1tLi8vbm/ucPAwLu5vLu+vcjEvcfEw7rAvb62sra4srm0usLCureysaysq62yr7Kur6ijpJ6rrKyqpKakpKiqoqemraihoaGmn6Oiop6bnKKfoKOdnJuhn6KgpKCem5eZn6GdnZ6eoaWkoaKioZ6ho5yinqCZnZijn52eoJqZoKKmnYR6g4B4cG1lZWZvaWVraFhYTktLS1JJTEhDOT04PTs2Ojs5Njc8ODk4NjA0MzE3OTk7Pz0+Ojw6ODg5PDg6Ozs7PD1BPj09Q0E8P0NDREA/Pzw6Nz5CREE/QDg4P4mYmoyMkI+Tl5WMkpCakpGXmJaUlJKQmpTDvsbBwby8uLi6v7a8scK2tLyxtLa4s7q9v728sq2vrLGwt7y3u73BxLm3t7a1ubm5utK0jLjDwsK+x7e5uK23tbi6tLizu8XGy8G7xsDAv728v8nDxMW+xri1srK9uLi4vrq6uby6urS3u7q5v7zEwL+5uri/ubvFxr3Fw8Kyur27sa+2uLO3s7q+wLm2rLGrrqmqqa2qqq6mpKWnrq2ppaOio6GkpaWmoqato6Klo5+ho6Gcmpyhn6CloaCenZygnaWgnpeVmZ2fn52gn6KmpaCknpybn6Ofn5mcmZ2epJyWnKOcnqGcppZ+f4d8a25wZ3Brc2VibV9cVEhLSkRKQkNHPzk7OD48Nzs7OTc4Ozc8PDYyNzUxNjk8PD08QTs8Ojs6OT45Ojs9PUA+RD89PkRAPz9BRkQ/Pzw9OTc/QUNCQEI5Ojl3nJiLh4uQkpOWjY+TmpOQnZiSkY6QjpiSvbfHvsO+vbu+vL22uri9ure9s7OwuLi1uby8wLeqraSvsLi7sr2+u8S2tbi2uMDAxbvNqISVwsvJxs/CwLiutbW8vri6sr7ExMrFwcnDwr+/vr3HzMfHxMe9tbW2wb26u7/CusDCv7y2t729vcHBwL+8ube8wru3v8W7wr++tbe8vK+vt7awtLO6ubq7r6mtq62rrKaqoqeuqKWqra2vp6Sgn6ajnqKjqKOjq6Oiop6dm5ublJaZnJyfpZ6fnpmYnpejoJyXmZqZmqOjop6jo6egpqCbnaCjnp2WoJmcoKCblJegn6WcmKKQgYaBcWVsaW50bnhjZ2JbY1FLVEhFRUNHQzw7OTg9Ojc6PTo4OTs3PD01MzY1MDY4OTo8O0A9PDo+PDk+OTk9Pjs/PkM8Pz5APz4/P0ZEQEE/Pjo3P0BDQz9BPTo4ZqGYj4uNlZKVlY6PlpmVl5uVjoyMjY+bk7m2wbS/vLm8w8C+wLq1trKywLmvsry8sLe7tru8q6ujsbm9vrK6vrzFuLG4uLbDub/DxJ+Ei7nKzM7RzMrEtbrAw8i/vrW/wb/Gxr/LxsO/wbzAw8zKx8XGwLm9vMS/wL/CyL3Hx8XFvLrEv7vBv7rAvLu7wMS9t7nCub69t7S2uLqur7WxsLCytre0t6yurKqsrKuoq6Gms6qlra+trKippaOkp5+io6Onoaeiop6cnZyamYyQlpeZnaKZnpuVkp2UoaCdmZ6fmJimpqKfoqKmoqeloqCko6GbnaCbnKKfl5WVnp6kmpafiYGDgXRvbGx0a2xuX2JeYGFOSE0/RUA/REM8Ozo6Ozo4Ozw6OTw+OTo+NDQ1NTE5OTo5PDtAPD89PTw4PDs6PDs7Pz5DPkI+QD89Pz9FRUJBQj87Nj9CRUQ9QUE6OlmfmJOSlZqVmpOQlpeclZuZlpSVkZKTnZm2uLaxuru6vsG5uca7trWypb69tLbBv66zvbS4wbGwsbS8wr3NxL27xL+5sZWKjnqIla2XhYyuxsnIzMvNysbCxMvOwry5vbm5wMO/yMbEwcG/xcDKycPDxMO5w769ub+8wsbCyc7Hxr66xr26v7m3wLm5vsDCvrW0vLi2u7CvsrK1r7Cvrqyus7CzsrirsbKxqrCrq6yrrLatqKyusqarrKmpoaWgpaakrKSmoaChnqGgnaCMlJeTm5+mmZ6emZOYnZ+gnp2eopuYp62ooqSgoKKqpqmhqKGlm6CgnZ2jn5SYmKKdp6Gfm4J7eoh6bW13e19wY1tdX15TST5DRUlCQz5DOz42OTo7Ozs7Ozs7PT05PTU2NjIxODo5Ozs6QTs/PDw+Nzs8Ozw9PTw9Pz5BQUE/P0FCQUVDQkRAPDY+Q0RFPkJEPztTmZuZmJ6dmqCalpyZn5KdlZ2boJWWlJqYur20sLu8wcTCv8XGura5sqO7vbS3xLuwtbq2ucS4tby2urzGyNvCtb+8sIxqcXFYYmZ4iYqNqMHGwsfLyMHDwcDJysLAu7qwtLu9wMXGxcW/wMK/y8fCwMjAusK7urO6usG+wMrOysS9tby8ub+5ubW1s7/Avre0s7S4rbeqr7CwsrGvq6+nr7ausrG5rra2uLSzsLGttrS6sa6srranrLKsraSjoaenqLKrqqWkp6elpaCml5ujn6SmraKeo6KanaWiop+foaWenrC0sKSlnp+kqaevp6mgq6CiopqipJ2anqGmp6+psZWCe32Bem1zeHNncF1bXlxZUUVEQ01JQUU9Rzo6NTk7Ojw8Ojs7Oz0/Oj01NDUxMjc4ODs8O0I8Pz46OzY6PTo7Pj0/QD87QUFBPj4/QkBBQkJFPjo1OkFCST9AQkA7TJqdnZ6fnZienZmampySoJWbnp+blZGRlsW+urbDvMbCvr/Ixbe1uLe2ubu0r7e2srWzt7m8u7a7vL260rLByba0knR5aGJ+aVtaXHCKj6m7wb2+xsC5wLy+xcS9vbmysK64t7/Dx8PEvL2/v8PDvr/HvLy/tLSutbW8vr/OzcvCt7K4uLi9ubuxtrLIwLu2tLGwt6yzqbCtrbO3r6uuqrG1r7Gvt7O6usC/tre2sru6wLWyrbO3rLC6r7KloqWrrK+5s7KosK+xr6qiqKGkraitrLOun6inpqWmq6Sknqaqo6ayuLOrpZyfp6anrquqpbClpaWbpKOYn6exrLW4sLKOhHl/fHZsdXpwbmlbX2BZU1BBRUhHS0BEQ0g8PTY7OTk8Ozo6Ozo9Pzw9NTU2MTM2OTg8QT5AOz1AOzs5PD04Oj08QD46Oj49Pj09PkBCQkJBRD03NDU9REc9Q0I/PEWUnqCgoJyXmpiYlZmdmZ2fmp2bnJaRj5LDwMK9wrzEvLy7xbu3s7e2tru7s6CWtayvsbS0tLa4ucHAt9C2psa2jmdSbm5Pc4t/d15ZfpKxube4t8K6s7u3u77Au7u8rq+us7K5wcLEw768v7u6uLbBwrW/urWur62wvcC5z8rJw7GvtbS0vbq+ubq7ysO7uravsL2xuK+ys7C3vbaur66wt7CsrLK2vbzEwrq9t7bAv8G3tbC2srGzurGxr6err6u2v7e1qbqztbmxp6uop7ausrG1uaisrK+qr7CqqKessayytr20saykqKuoqKusq6i2qaaonqadmKOuvLG7wbSmiYF8gnpzdnZ3bnFgX2VdWlRKPD8/RkY9RkNDOTo1Ozk5Pjw8Ojo8Pj4+Pjg4MzE1Nzg5Pj9BPzs6Pz08Oz09OTs8OTs6Nzs+PT1DQT8/QUJEQkE8ODU4PUNGPUREPzw/iZ2en52Xl5WUk5aZnpubmpuYlJ2Uio6Owb7Dwr6+vrm2usCxtbGzt7fCtbOrrbOoqa61r620trnDv7bJtJaxoWdYVYtwU116goeATWiYtbaysre+ubK1sry5vLa6vrK0tLSwuL7DxsTAvb+5s6+yvLquu7Szpquorbq+uMvCv76sq7Cvs7q3ub67wMXBu7y3sLXEtb+0uLu0u8PCs7a2sbisqaWrsr23v7+7u7exvL28trGvq6uprbOvsLCrsLSpuMC2sqm0tbC3tq2spqu7s660uMKwsbG1sbK1saywsri4ubi+tLGzrqyxramvrqqyuK6trainoZ6ptr+4ur+wlol9gHxxdHd0dnFsXmJgW11PSEE+PUhDRk1DQDc3NTs6OT48PDk4PT47PT86ODMyNTc2OD8/Qj86OD4+PTw5PDk7Ozo8Ozs6PEA+QkI9QEE/QkI/PDs3OjxBRD5CQz8+QYqgm6GdlJiVlZKYmpyWm5WalY2bj4SIhru0vb+7vLm3s7y8rLOytLS2wLXAr7Kzqqqxt62pubO3wL27xrKTnoVYU2ecZlJXV5Kpflhap8O5s7C2urW0sqy8ubi1uMG6uLOxrLe8wcfDv7m6ta6lrLOwprCtqJ6gn6WttrXCt7a0pairqLC2s7K6tbu7u7W4trC1xLK+vL+8ubrFybq9vraxp6SeoamxrrW5trKxq7S3trGopp6gmaWmpKynq6y2qa+6sa2kpq2lq7GrrKmtuLawsrjBtrGxtbGvu7ayt7W1sry1urKwsbKutLKqrq2nuLWyta2uqqiosrq9wLa0qY6Ce393b3tvdXJtY1xmWFxdUk5NQT5JQkFKSUA2NjU7Nzg+Ojs4Nz4+PDs/OjkzMjc1NzU8PD48PDg+Pjw8OTk5Ozs7Pjs7OTw+P0E9PEJAPz9CQD47Njc6QERBQ0E/QUKJoJ2loJSWmJiVnqCcl5uYmZGMmYmDhoS1r7S7u7S1sLG2uq6wtLOvtbq1urC1s7KttrqvrbyzuLq3u8+5mJNyUmWOfGZUYm2lvYZjU3aeu7axtLWytK+su7q4trnAw7aurqqytry9ubaysa2tn6Snp52jpp2WmZman6muuayrq5+lqKSrrq6nr6yvsbGtsa6usLmwtLy+uLm4x8W8vLu4qaKcmJufp6assq6zqaapqq6popqXl5GcmpijnqKir6ekrKaompqemqGnp6anqa+2squ0trCqsK+xqbm2sbWxrqy3s7avrquuq7S1ra+rq7GtsbKoraurs7W3ur2wq6GLeoJ5cnZzbXVpa11balRdXE9NSERGTEJGTkY4NjY1OjU6Pjg7OTc8PTo7PTo5MjM2Nzc3Pjs9Pjo6Pz48PDw6Ojs5Oz47PTk8Pj1CPDtAP0A/QT8+OjU1OkBFQkRBQEJBiJ+ipqGYm56dmqWpmJudmpmUjJmHhoeGrq2uuLmxsqiur7iyq7CwqrK1ubm+tbK4tLm6trm7tbWztbnHvqCSZFKLmXJ6eYtygpJ1cHVtosG4s7SzsLGtsLm4try4u7+ysrKusa65r6qrrayjqKGdnZ6XmKGVkpWXkJifqK6ko6Sgoqeio6mpoaanpaqtp6ynqKesq6yyu7SztLm6trK2ramgmpaWm52fq6yrr6Oko6GpoJuTjo+Qk5KSmZaanaSloJ+ep5iVkpSZnqSjoaWqrK2iqaqppKmtrqW0sa6xraqprq+wraWmqqSos66trKmmpqmrpqqnq7Ksr7Oxq6mWgX+Bd3J4aHRzbmRUYGNXXFFOTEhASFFETUM9ODg3NTo3PD46Ozw4OTw7Ozw7ODI0ODk3ODs7PDs4PD0+Oz08Ojk8Ojs9PTw6OkA9PDw7QD5CQEE/Pjk1ODs8RkFDRD9BQYijpqKjnqCfp6Coqpufm5yZmI6Xi42PjKqpqLGvsK2lp6ayr6mmq6CvsLu1vby4wMG+vLy8ua6sr7KywL6snFZelMSVgZiSZnV1doB+fa+/uLGss6+urK62trK0ta+qpJ6bnJyeqKieoKipn6GnlpuXl4+dk4+Qlo6Xm6SooKCioqKlpZ2jo6CepaCkrKSmqKSio6OrrLOuqa6urqeqraisoZyamJmYm6moqqufpqKbo5yVkIyPj5CTkJeVlpifnp6amKaXk4+Slp2ioKWjpqSnoKKko6Ghq6uksq2qrKyno6yuraufoaKkpK+srKmmo6KqpKqqpKmrpqmsq6agiHiDfHZ/eWJ3bG5cUWhUUE5HT01MQk9RQD47PjM5OjU7OT07Ojk9OTk8Ozw8OzkzNjk5Njo7Pz06ODs6Pjw6PDs5Oz07PDw9PjxAPT88ODtAQEE/Pz45NDk8N0FDQkQ9QEOOqqSjoqGinaulpqimoZ6dmZ2PmJWTkJWnpKGmqKmlpKChp6uhnKKbp6u1sry9wMLCwL7AuLSnpayqp73JtaRWZIWTfml0bGdjZmt1cXCQrrOzqrK0rqqrr7Cys66lnpKYlI+YoJ+ioJykpZ+eqJSblpeMl5GNkJeTmJ2iqp+fn6Cjpaicn6ChnKKfo6innKehoKSfrKisrKCpq6agpKimrKOdnp2Zl5qrpamxo6WonqCclZOQj5GQmJCWlZiXn5ibmZqjmZeUlpqdoJ2nqKWgo6Kho56doKmqpa6upqipoaKqrqqnoaCio6msq6eppqShqaKlqaalpKKmpKijkn18gHV1fW1re2RoVVFjTUpIR05STkpORzxFQD0yPzc1OTs+Ozk5Ozg6PDs7Ozk5NDg7ODc7Oz48Ojk8Oj07Ozw9OTw8PD49PUE+QEJAPTc6P0FCQEA/ODU1PDpAQ0BEPkFGlq6koqWeo6KpqKipqqWmnp2imJiZmZWbop6bnqOioKOgoZqgmJeXlqGorK62t7q5ure3u66ooKGpop+0z8CsXXh1eHRkaVlQT1NSV1dgd4apta6vs7WqpqyropyZlI6RlpeZmZygoqKcnaWemqSXl5eWkJKRkZOal5ugpKqeoaGepqeqop+gp5+dn6SnqZ6jpp+qnaqtqq6nqLClo6Smp6ymoaShm5ier6iusqulqqqgmpiYmJWTlpqTlZWalpuXl5ihnpycl5uhmp6ao6eln6GioqOdm6Gmp6aoraOppZ6kp6mkpaWhpaSsrKmmq6eioKSjpKenoaCgpaKmoIl7gH12eHxkeXlgYlJVYElJSktTVElSUEw5P0I2Nz02NTs6PDw5Ozs4Ojw9Ojs4NjU3OjY5Pj0+PDk5PTk9PTw+PTs7PDo+PTw/Pz9APT03Oj5AQEA/Pzg2NT08PkFCRkBAR6CupKaroaOqrK6tp6ypqKCipp6bm56aoJyalZmfn5uen56WlJOXk5KcnqSorq2sq6uvqq+pnpeepZ6eqc3NmW96dnRjU01USFBJUE1MVWRniLWwsLC4rKahnJ2alJeampCOkZWRjI6OlJminJejmZqXmJmUmZiWnZufpaapoKajnqeurqumorGjmqSmpqqioaqiqaSosquxsqu5qKarp6urqaysp6Cgo7GusrC0qbGvopmcnZ6hmZubmpiZm5SWm5aZnKWhoJqjoZqcmZ+kop6gn6KmnZulpqWkpaijp6OepqOinqaloqWlqKykpq2noJ2dn56gpaGenqWgppmBe4F8dXZzaIJsZVtTWllNUUpOTlRMU0xBNz5CNjg9NzY6PDw9Ojw5ODo7PDo7OTc2Oj01OTw7QD03ODs3PTs9PT06Ozw4Pj09QD5BPj4+ODg8P0BAPT43NTg9Pj1BQEZAQUihqqCrq6GkqquwramtqaelpaWkoKGfnqWXl5SYmZ6YnJ2blo+VmZKRnJihnaqip6Cep6Gln5ySnKKbnqTKsGhqa3NiUlNVhXVqU09KSlFWWWOnr62sr6efnqKgl5GTm6CcmZeSk5+coaSbnpuWn5qfl5uinqWhnqSfpKitraisqKSstLe2sKe0rKKtraOvpaSmoamorrWzsr23vrCssa6tqaq0sbCoq6iytbezuKyytKSgnaWfrKGhoqCgmpiWlqCbm5ikoaCeo6GgnpqcpaCfnZyhqJ+fp6meoaOkoKagnqehn5ymo5+ipaOooKmrpZ+dnZudmqainpyjnqeQgYJ/fHh1aXd1XWxaUmBIUlVIRlVWSkJMRz1LSDhFPDY3Oz49PDo8OTg6Ojs6PDk2Njo8Nzs+PT8+OTc9OT47PEA8OkA6OkA/O0A+QUA9PDk3Oj5APzo+NzU4PT0/QUBEQEJGnKueqamipamprqimqqWmp6aoqqGlpKOmkpOVmJacmpqcmpWTmZuNk5+ZqJ2un6eenKGdnpqZkpmem6GhrJh4bmtgVExYeqqwoGxSSEVHTFFWjauqqqmkn5+ZkpKTmJiWlpWMiIuOlZ2dnZ2elp6apqCgqKWxqqeuo6uttrC0srGutri9wLqttbSwt7CutKmmpKWsqbmztbvDvMPBtrq2q6+xube8r7OwtcG8tr2zs7WirKKpqLKpq6inqJqZnpqqp5+Zp6Cfn6eopaSfnaqhop6bn6igpKetmZ+jnp6nnqCmnpycoqGbo6KhnZympaWkn6KZnJukn6CboJyjiYWEfnZxbWl2bWhtXFhbQldOSkdNR0JGTTw+TD00PDk2Oj0/PDs6Ojg4PDk6Ozs8NTQ6PDg5Pj4/Pjg4Pzk8Oz0/Oz1BPTo/PjxAPj8+Pz08Njs/QT07Pzg1ODw8QERCREFCQ5WqoKapo6mqqKmjoamgpqinrK6lqaWpqpSSl5mUmpqanJiYmZyamJmqoLGit6Swpp+enZ2XmJWZnpqcpKCfiG1gVVBRW6Ld4MONcFtLREBEYZawramqpZ+enqGinZ+dmpyclJOVlJ6emJSFnZqhm6ukq7KwubKysbKxur28vLm2uMO+v8K/trq6wMS5vbusr6exrbHCtrjCxsDIysDKv7C5ub25wr64s7vGw7zDu7ezqbOtqrO0r7Ouqq6jnauntrKsorCmoaOvsa2wpKWvo6GgmqGnoaSqqpmdoJmao6CmqKGcnqKemaSenpiYo6OhpZ6mmZuipJ6fm5ubnIeFgXt0cWtrdXJwaFdbUUVUSERJT0g+RUE0Rkg5NTs9Njs8Pjw8Ojo4OTw4OTs4Ojo4Ozw3Oz49Pj02OEA5Ozs9QDw9QDk3PD07Pj0+PUI+Pjc6QUA+PD45NTg9Oz1DQEFDQkGRqqGlqqelqqimn6KnnKasp7Gyq62jqayVkpWalJecoqGbnqCinJ+psqu7sr+rr6ylnqCgnJyYmp+gmp+flHNiV1NUWW2z3Mawq6yMbVVbgaywpqOjoaCepaulnpeclJGZnZiUjIqGiIZ5bYigpKKrrLS8tsO+vrO7wcPCxcC/wsbGxcPIwsDFyM3QyMvDsre1vrK+xbu+zM3FzMzM0se+v8DCvsfGwrfDycnCwca+urS6urS7t7C1sqq6sq67t7+6uqq3rauquLq0vK6uuaOmo56mpaKjqaaZm5+Ymp2nqqegoaGkmJSjlpSZkZydn6Sep5+en6KdmJmUmJSIhH15cWtkaG94amRaW0ZLTEVEU0xEQkU3Oj87NTQ5OTc4Pj87PDs7OD48Njo9OTw9OTw9Ojs9Pj4+NztBOj45PT45PT44Nzs6Ojs/Pz1CPj83OkFAPTw9ODY2PDo8QT9BQUE+kqugp66ooqulpKKipaGlqquwsq2upKmmlJWWmpaUm6SmnaGqp6KrrLy8v8PBsrK4p6Ghq6qhnJ6hoZ2bnYlfU1FVWW6HtcWzlJ7YyqyjsKygmZybnp6Zl5eXkoyOl5eTjo2Qi4KDgndzcW5wj6atrrS5xbvNx8u/wszOzczHydHMzczHycXGzNDS1c7Tyb3Av8O7xsXIxdLTzdPQ09PMysLFxsbKyM6/yNHMx8XHxcG8w8G+v761vrOtv7/Cw8fEx8SuvriyuLzDwcG6vLy1rqenraigoqmlmpagmpmdqKupo6SknpePm4yQmYmVmJugn6OdnZeempOTi5WPhYB4dHNlYmdyb2ZeWllDTkxDRVBJRENANTU1ODpCPTY4OkE+Ozs+PDk+PTc6PTk6PDg8PDw7Pz8+PD0+Qzw7OkA9Ojs6Ojg4ODk7QT48QD8+ODtBQTs7Pjc4Njo8PkI+Q0FAPpOvn6ivpqiro6KloKampKuoq62qrqKqo5Kcl5ebmJuirJ2frqalsarFxszOzb+wwaikqKytqqCdo5+cnZt8U0pPUmeDoraypYmtzLuxrKOenJ+amJaUkpSWkZCPjIeEg4iHg4CBgYB5cnJvbHmktrq5vsvB09LTyM3O0dPR0tHQ0dHNzs7Qxc7U1djS183Gx8nMw8XKz8rS19HX0tTW09PIzMfMzcnSzc7TzcXIycrBxsvHyMnGv8Ozs8jEy8rLzsXKv76/vcHHxMzMyMm/w7+tr7OonqKqo5qTnpyYnqaprKSlppaXipWFkZSHkpKSmZualpiQm5WQjIaRi4B6cnR2aGNndmlkVldRRE1GQElRQj1CPDoyMkA8RDw3OTxCPTs9Pzs7Pj05Oj48Oz44Ojk5Oj86Pj1APkA8Pjs+Ozk9PTw5Njo6Pj08PEA/Pjk6QEE6OT44Ojo6Oz4+PEE/QT6QrKKiqaanqKSfop2qqKOso6OnpqyiqZ+To5iWn56dpK6bn7CrqKyxyc3U18/Gu8esrbO3rK6jnqOinaGlcU5FTVV3k8XKrpyjsaminJ2coKSgnZqUlJWUiXx3cGtlYmhxb3F7hYqAdnBucXRwhbPCvsXR0NfW1tLWzdTW19TT0dPU1NPP0cPQ09bY1dbSy8nO0cvGzdHJ0tXW2dXX09bYztLJz9HMztDM0s+/yMfKw8zMzM7PxcbHtr/Kv9HNy8/Fyci/w8PIzszP0M/NysfNuLe7qJ+lq6eemJ6jnp2qpa2pqKiSlYiQhIyRho2MiJOVmZCWjJiSj4aHjIR8eHN2b2NgZXJiXVJcSUpHQUVIST47QTg9NDU4NTs4Njo8QD07Pjw7OUA7OTo8Ozs8Nz09Ozo+Oz08Pjw/Ojo8Ozs5Oz89OTU7PD48PD0/Pz46O0BCOzk/OTg7PT0+PzxBQEQ8hqugnKegp6Oim6CbqaSlqaCfoaGmn6ifmKSimqmmoqarmqOwsamotdDU19rSx8bLtLXBxbG1qKGkpZ+hrHhNSU5ehLfb1bitqpqUl5+bm6Chn5ucmZWJd2ljYF9fX19eX2BeYmx1c3Fwb2xycXWSxMfG1NXW19fT1s/V1NrU1M7P1dTU0dHM0M7T19bT1dDP0tPRydPRx9DY19jR2NLX2dXWzM/Pyc3Sy87QwMbCx8XOzdHR0cjLzcDKzMXTzszOyMTJxsbIzMrT09HVz9LM08G5xbGlqLWup5qorKWdsqiws6ysk4+TjoiKj4OPi4SQjpmNk4+Zj4+ChYx8enFzdG1hY2ltX1ZQX0pKQ0ZDUk0/PD41NDo9NTI4NTU8PEA8Ozw6OTpAOjg7Oj46PTg+Ojo8QD08OTs9Pzk6Pz07PTw9PTo2PD0/QD08PT0+OjxAQjs5PDc0Oj48Pz89RkFEPYKknKClnaWlo5mcnaSeo6OfnZ+doJqnnpyhqZ+vraqqq52mrreoq7fX1NXZ2dHO0L+8zMm2vq6mqqiio7OLW2VtibfXxq+mn5eVl5manaCcmZydk31xZWNjX19hX19hYF9gYF9gZm1wcG5rb3J3d5vMwNLV09jY1tnR0tLXz9POy9LN1dTSys/M09bS0dbNz9XV0cbR1MrQ1NXWztLQ2NjY18vIzsTJz8zKzMDJv8fJzc7Py9DNzsvOzsfL0NDKzsrCycbJzMrL0dLM09HRz9DKvci5sK67uLWqtrCtqLits7+7sZqPn5SRjo2IjpCFkY2ZjJGRlY6RgIWIenVvcG5rYWRucGFXXFpJRkZETVdFO0A9MzM8PTg3ODU1Oz5APTk8PDg8Pjk8QDtAOj04Pjk4Oj88PTg7PkI6Oj08OkE9PTw6Nj08P0A9PDs9Pjg7QEE9Ojw4ODs+PD4+OkVCRT6Bn5mlp6Cfo6eam5+cl56eoZqdmpyappufpKefuLa1taykrK6+tLDA2NLX2tzWzs3Kw9LPwcCwqaytqaOzm3iKp87Us5ublZOXm56enpyUlpiViGteXl5hZGJgYGFhYGBhXl9fXl1ibXJvb3N0dnZ5pL7L1dHW1NPY1s7O1MvNzsXOytLSz8bOzc3UzM7TzcrX1dDM0dTLzNDR08rO0dXS1dXKv8nBxczCyMnCzMPFyMrKz8rNzNDN08vGyM/MyMfLxMbBxcrMzc/RxtDOzc3Mz8XHwLi5vcPDvcO5s7K+sbvDxLWqmKWimZaRlZWSi5SNmpGUlI+PlIKJhXlwcmttZ2BgcGhYWGhWTEZMSVBQQjtDPjs2Nzo4OTo1Nz09QTs6PD05PD05PT06Pjo8ODs9OTtAPD47Pj5BPDk9Pj1CPTs3NzU/PDw/PDw7PDw4O0FAPDo8OTs7Ozw9QTpFQUU+hJ6bqK2epKSqnJ6fmJKXm5+am56ZmaKVoamppcTCwb+7tbKxx8K4y9XV2drb2MzMz8jW1cTCta+0qKCro4iNkrjUrJSNjZiVkJSSkZaWlpCLfGVhYmJgXV5hY2JgX2BgYWFgX11bXWdycXFyc3FtcnmkxtPPy9DP1NXJxcnJxsa/w8bPzsfFx83K0sjLzs3G0dLPzszUysfLzs/Hx8/Sy9DPxbrEv8bJvcLHyc7FwsjAx83IxMzKy8/IxMTQyMbCxsjEvsDHzMzLzsLLy8jHzNDExce7x8PJyMLPwb28v7DByce5vaqwsqelnaKcmJCbkKOZl5mRlZiJj4J3b3Rka2BeZnBhW1dgR0hIR0lNVEc/Sj02NDM1NT08NDg9PT06Oz08OTo7OT89OTw7PDg6PDo6QD1APD09Pjw6Qz48Pz04ODk6QD4/Pjw7Ozs7ODo+Pzw7Ojc5PD49Oz49RkFDPYOgm6qupa6qq5qdoJeUjpedmpmgmpqcm6WysazJzcrIxL68us3NxtDV1dna29jQyc/P0dPIwra7u62jtZJogIjErpCNjpePhoOEhIJ+hYV/c2BbXl5eYF5gY2RjX11dXl9gYF9bWlxha3Jyb29rbG9vfbjRyMnKz8vNxLrAw7u7urq+ycbCw8DDyMrJyMrIwcXMxsjLzcnEwsvJwcLL0MTLyL+5wbvGx76/xs/Lw7/Du8nHyLvIxsXKwL3Cy8bFxL7FvLzAw8XMxcW7wMrCxcfSxMDIv8rJxsjG0MPDxsOvxMvHw8q3v7y6tKmspKWYn5iso6Glm6Ogm5R7dnN0ZmlaYW5sWltYUkRMRkJHRExERlNANTQzMzQ/PDM6PDw7OTw8PDg7PTtBPTo8Ojs3Oz05Oz07PTs6OD4+PEI+Oz88OTk7Pz07QD48Ozk5OTk6Oz06PDo2OTw+PDs+O0NCRD5/pZypsqm0rrCdnp6YnImUm5man6Kfmp2ov7i8ys/RzMfCw8bNzs7M1c/V2djZz8vSzc3OyMG1w76xr7mCYn6Pto+KkpeHeoCFhoB2eHVycF9bW11gYGJjZGRlZGBcXF1dX15gW1laXGJvcm9raWxwb3OPxrzJxczAxsKwtrqysrOyscK8vLy6uMHBwcS+vbm9v7nEysXGwr3GwLi7xMm/wsm7t7u6xcO/vMHNw8a9vbXBvcO6vca7wrqzvMXEwcK2v7W1vb+7zMO8tbrIur++y8PBxcLGycbIxtDGwszHssfJw87NwcXDwL2zt7Cyp6ioubClrbCqrayUeXZ3amRnYGhvY1ZeWUpGSkZISkFFQkVJQDk6NjQ4ODUzOzo7PDk8PDs5Ozk6QD46Ojw6Nzo7Nzo7Oz88OjxAPUA/PT8/Oz07O0A8Pj4+Ojk5ODk3ODo8PDw7OTo8Pjs7PjpAQEU+fqygrLWqt7SyoZ6fl5qNlJaan52mop2et8XCxMjO0crKysfNzc7RyNDG1dTW183Kz8XJxcfBucW9q6yub2V2j5OLiIqFeYCGhoB+hHx0dGNbXF1eYGBiY2FiZWViXV1bXF5cXl1aW11daHNxbWdnbnByeZ29zMDDusG4rrCwp6qtrKe4tbe0s7O0urS9sbewta+yu8K8wcS8v7q1s7q+wLjHubS7tsHCvLi9xsHDu7Wusra6v7TEt7u1q7i9vb+9sbq2r7a6s8W8t667v7W3tMW8vsPFwMPFxsjLxcDGxrvHy7/PysfDxsLDt8O9vba5vse/rLW6tbe2jnl0eGZnZWJrbl5WXmBGS0hISkZCREFFRT88OjU2NTYzMzs6Oz06Ozs6Oz44PEE9PDo7ODc5OTk7PDo+Ozk+Pz1APz5CQD1AOjo+Oz89PTk6Ojo4NTY7PT48PDo7OT49OT86PEBAPIi3pauzsby8sa2foJmUlJiXnqujr6qnpMbLzcjFyM3M0MzNyMrIysnKxM/N0s/NxcfBxcC+ubjJtqqvo2VpdYyPhoiJe3h+hoZ3eIJ9dGleXV1dX2BfYGRhXmNlY19fXFteXF1eWltbXV9scG5oZmpubnJ8pMe/uLi1sKusp56iqqeeq62zramrqbSutrCyqa6mrLK8urbDubq6sau1ubu0wrqwwLG+vLu2u8e5wratqqiwscC2uL2vsKeys7S7vKuttaauta+7srCpubCtu667uLvAv725wr/Hw8XBvMbBx8u4xcfFv8bDw7rExsK7xsnMy7O5wry7s4hzdnZraWFibGhZV1dbQUxLTUlFQUM/RkE6OTo5OTU4NTQ6Ojk7PD07Ojs+ODtAPD05Ojc5Pjk7PDo4Ozs6Pj45QT0/QD87Pjo7PDo9PDw4OTg5NzY4PDw9Ozw6Ojs+PTs/Ozs+QDyKwKuouLe5w62zqZ2ZlJaZoZymsLWxt6bFztLLw8XBxc/HzcHDxr/ExMPDysHJyr7AvMG6srS1xK+qr5thbH+RiI6Pe3h+ioZ6e4SBd25eXVxdXV9gXl9kY2JjY2JgX11bW1paXVpaWlpcZG5vaGZnaWtucoGtubC1rqalp6eaoKSgmpylq66jp6KrqqyqsKOmn6qttbaxvbmvt6+prre0tLy4tLyvt7m1srvBssCupamiq7Gys6i9qquoq6yttLOmqK2hpK+psqanqK6lqLessbK3urq7sry9v77Ev7XCwMfIt7/AxLfEwr+7v8TCvsTIzMq/vsPAwKmHc3RyamldYW9kV1ZYUEhZUlNLRkZFPj5AOjc4OTc3NjQzNzo5OTo8Ozs8PDc7PTs7Ozw4OT44PTs8Njo9Oz89N0E+P0A/Ojw8Oj05Ojs6Nzc3ODg3OTw7PDs5Ozo8OTc5Pjw+P0E7jMKvrry3ucSwtrCbmZWcmKqpsLGztb2vxdDPzMPIurrLwcu+u8m2vcO+ucq3wcPBtLa8trGvtbyuqKmXZW+Ig4iLgHt+gH54dH98c3dlX11cXF5fYF5fY2NhYmBgX15dXFpYWltbWVhaXF9ma2ZlZ2Vpa29yhaqlrKWgnKKllJ6km5iSoaOqpKKfpaWnpa2gnZukpqyyr7a3p7CrqKq0qrS6sba1rra5sa+6urG2pKCkn6axp6uouaqkp6iop7KtoKemn5ukpqyen6ekoKCxra2ssrSytLC1vLa7wcGyur7DwbK5ucOzwL2/tbi7vb68wsfEwsO+wMSgg3hwa2FmX2tvYFRZXkhOZ09UR0VKRjw9Pz06Ozs4MjU1MzY5OTk7OTo6PDo3PD88PDs8ODg8OTw6Ozc4Ojo8OTg+Oj89OTg8Ojs9Ojc2NzY3ODg2NjY7Ojo7OTo7PDg1OTw6Pj5AO43ItbW9uLrAur21oJ6VnaGmurars7O7s8TPycvCxri3x8HMv7jJt7vFuLPEt7O/wKy2vLKspa+0raCilGx4hYaGgXx5dXNvbWtqaXFpXmBdXFxcXl9fYWNiYGBgYF1cW1xcWFlYWFhWWFteX2RjYmVnZ2dqbW+Inamgl5aboZabopiWjZ6ho6ebn5+jpaKonpuim5+rsKyxtqOpqqmsrKS0ua23sKyzta6yta6wqp+dn6SisqSmqbitoqamn6isqpmfoJ6ZnZ+lmpqjnJudr6mrp6qrrK2wsrivuLm7sLa7u7qrs7O5s720trGxtbS/tr3AvcPBu7u9l4N7c2tfZV5kZFhUV11JV1xLUEdJSUZBPD8/QDs/PDA0NTM1Ojs5Ozg5OTw8Nz4/Oz07Ozg4PDg5ODw3ODo7Ozo7Pzo9Ozc4PDo9PDc0Nzc2NzU3NDY2Ozc5Ojs6ODo5ODo7OTo8PzuJyba4vru3wcHBtKSkmZqkpsCyr7astLfGz8jIwMa7u8TDz765x7i3vreywbSxu7usurqxop6pq6eXnZBxf4WGf3hybnBua2JeYmZmXF1eXV1dXF1fYGFiY2NiYV9cW1taWllYWFdXV1hYWFpeYmRlZWZmaGlrco2nnZSVlZuYm6KWlpGcoqKonZudpaaippygoJqYrq6trrKgpaKtq6ehtbGysqyor7KnurOmtaCinpujoq2joqm1qqKjpp2mpqOWmJ6XmZqdoJqXnZycm6yhq6ejpKatq7OzqrSwsqqyubSvqa+ysrO3s66prK6yuLC6trm9v7ezsZSFeXVlXmVeW1lWU1pVS1tRS0lFSEtJQj0/QUFAQToyNDUyNDk5ODk7OTo9PDY9Pzs8Pjs3Ozs3Nzc+Njo+Ozo4Oj07PD06Ozw6PTs4Nzk3NDY1NTQ2Nzg1Ojo4Ojk5PDg3Ojg5PkA6gci9t72/tr68v7KdpaOYpbHCtba9rbS4wszIxsDFtsG/x863wMS9s7m5sr+2sbi6rbK1r5+ao6qhkpmNeX+DhH94b3F0cWhmZGhlY1xcW1tdXVxbXmBhXl9fYF5cW1pcWllYVldXVlhXWFdWV2FkZWNkZWRkaGp2opyUlJCVl5egl5mVmKCeoZyWoaKppJ+eqZyamqunr7Cqm6OkuKmgn66otqqmp62wpLewpLegopuZmaqmoJqsuLCioaScop+fk5WhlJWWm5iXlpeclZ+pnamjoZ2jqqqwrai0q6qmrbKwpaqusrGwr66vpqensq6xtK+8tLm3rqOUgXl1ZF5hVllXU1JUS01eTE9LR0dMTEU8QD48Qjw7NzY1MzQ5ODg5OTo5Pjo4Pj47PTw8Nz49Njc2PTc7PTs5Nzk7Ozw+OTk6Ozo4Njc2NTQ1MzEwNDU2Nzk6ODo5Ojo3Ojs5OT1AOnbAvLS5wrG+uL2unaeno6q7wL3Aua60uMHMx8XCw73Ft8jMssHCwa28u7W7vLW5ubCwsaqcmaGplZCJjIGAfHdxaWxydHBoaGVkZmJcXFpZWlxcXF1eXVxbXF5cW1xZW1taWFZXV1ZXWFdXV1ZbYmNiYmNiY2RmaoGWk5WMkpSUm5mdlpacoJyglqGgpqWkpqefnJ+moKqvpp+ipLeooaGiqLSipailsKWwrau0nqCdlZWqoaGUrbGxn6KjnZ6Ym5OLoZSRk5iYkpeXmJedppunoaKZo6Wlq6SlsKelo6urraaorq+uq6iqqbOlpqyvtLGuvLWxr66gknp2cmRhXFpdWE5MUkhSYU1WUE9KTU9FQkQ/OT02OTo3NjQ1OTk7OTg4Nzs4OT0+Oz47PDY5Ojc7Njs3Ozs6ODU6Ozo7OzY8Ozg4NDY4NjMzMjEuLzI1NTY7Ojg7Nzg3Njw7Ojs7QTh4u7uxtb2wu7G4rJ6lp623u7zBxbqxubXEycnAw8bGx7bGxLPCv8Wrt7e9tr27u7azra2omZifo4uIc4mIfnZuY2FmaWhmaGpnam1gXVxbWlpaWlxdXFtcXl9cWllbWVlaW1dVWFdUVFZVUlRSVWBgX2BhX2BhY2RpgZSTiZGPlJOUnZSVl6SZoJecoKWhraakpKOjopyqq6WZn6WxqqCgnaWrnaeinq2sqamtrKGiopWYo5uckKupsJufop+el5mTip6RjZKTlpCYmJOcoaKdpKChlaChpKabo6uloqSqpKuupa2yqaalpqa0pqmorbO1tLm6r6msnotycG9gW1dWVVJHUU9IWltPUklUS1NMRUZJQzg7Oz08ODY2Nzo5Ozo5NzY5Nzc6Ozo9PDw2Ozw4PjU5ODo4ODY1OTo7PDk3Pzw5Njc4NDUyMTIxLi4xNDI2Ojg2OTg1OTg5ODk7OUA5e7W0rbS7srCrsq2dqKevubmzwMi6tcCvxcjMusHKzMi1ybyxvcTJrLG4wrW8wby0tausppWZm5uHf3KIg3t0aWlqbGdqa21ram1lXVxcW1tcWlhaXVtbXmBgXFhYWllYV1hXVFZWVVRVVVJTT1FZXVxdXV5eX19iZG2OkISRh5CRj5mTlZOcm6Ocm6CoqauorKeopaOYpK6klJmlr6mfm5mboJ6umZurs6Clpp+io6GVk5uWlpKpqa2anJ+hoJqUkIyZjoyQjJKNlpWQnqGgo5ybo5WboaOhl6Goo6Koq6Crr6Ott6Wjo6Ksraqoq6+yt7K9tbOrr5iEc3NoW1hYUlVRRVhMUVtYTVROUExQUUlOSUI8Pz9BPzw2NTc5OTw8OTg3Ojc5Ojs8PT47Nzs7Oj02Nzo7ODk3Njk4OTo2Oj05OTU3NzU3MTE0MS0rLzQzNDk4ODo6ODo6NzQ4PTg/OX6zraiztq6pp6+um6morLe2rLzKu7a/rMvGxbjBzs/Is8S6t7vDyLGsuL+3vL67tLenqqCWlpiVhXl0gHZ3bm1obW5tcGdnaWdkXVpbW1tbXFtZWltcXF5fX1xYWFlYV1hXVlVUU1VWVVVTU05QUVlaWlpdXFxeX2Bkfo2Bi3+MkIqSjZeRl5mioJugq6qmrqyor6Oomp+soZWWpKinnZeQj5qerpaYqKqZn52UpaCekpCSkZOVp6qlmpmZnp6VjYyLk4aIjYOQi5GVkaCeoaOXlZ+VmqGinpSbpaWnqKigsbCmsbynn6OstKuup7C1sLm1wLGtsauQfXFyYlZTVk5SSUZWUFJRTExXTUpMTlJHTUpBQ0ZEQz5ANjU4ODk7OTo3Ojo3PD06O0A+Ojk7OTo/NzU5Ojk4NzY5NTg3Nzk7ODU1NzY2NjEzMjAtKi4xMDI4Nzc7OTk7ODk0ODs4QDh/s6ymsbeqpqKwq52qp6mysaW2xrS5urPKxbm6wcvQy7G2t7y+wcOxsLK4rbS0u7S2paSdnJeWkoF+dmtnbG5xbnFqcGtkZWdlXlpZWllaWlpaWlpaXFxdXFpYWFhZWVdYV1VVVFJTVVNWVVJOTk5SV1hZWVlZXFxdYWqAen92iY2HkIqXiZSUmJuZnqmboKqmpaudp5mgpZuTj5+jm5eXhYSSm6OPlKOdlpaWiKKbm5OLjoqQmqSnnJWVl5yRkYeUjouBi41/kIqSkpKgmp+ilZOYmJWippmMmaSmqKahn7SyqLK3oZyit6yqraSysqW1vLWrq7GjiXhybV1OUVFMT0NNTk5QS0ZOTkpKTk1RSU1KQUdMSEdDPTg1ODg4OTo7Njk6Njg7OTk+PDg6Pjk7Pzg3ODk6ODg2ODU3Njg4OTc0NTc3ODIwMzAxKyktLzEyODc2Ojk5OTk4NDk4OEE3d7anpLaxpaejqaWgqKWks6qissO1tbKzxsa3usPKzMazrLm9tLfAr62psZ6mrrqwsKGbm52Vk4Z6gm1fX2ZycHZxaW5pZWdoal9YWFhYWFlZWVpaWVtbXFxZWFhXWVlYVVZSU1JQUVRRU1VRTU1LTFNXV1ZYWFlYW11hb3N2cYWIgoiAkYSPi5SRlJ6hj5uco6GjmKWWopuVjYeYmoxzjYN+jZeWhpGZkJSOjnuZj5yMgol/ipifop6Qk5iWhY2ClH5+dImOeZCHk4+QnZqZmpGVkJ2OoqOOiZqgoaOjm6K0r6yvrJ+YpbimprGhsa6csLuqqa+qmYJ2cmJVTVJPUE1DU05MUU1CUFFISU5STUhKSkNKTEZLSzw3NDk4ODg7OzY5Ozc6PDk6Ojs3OT85PkA3OTo8ODk3NjQ0NDU4NzQzMTI1ODUvMDEwMikoLC0xMTc2NDc4OTo6NjU6ODdBN3i3oaO0qaalqKOmpaamprOnprTBuK+0sMnEt7nBzsW+s6y6wautw62ooqeSnaa3rqWikJaXk499d31lV1ZfZ2ZpZ2huY2poZ2JcWFdYWFhZWVlZWVlaW1tbWVlZVldXV1NUUE5QTk9PUFNUUk1NSkhOU1NTVFVVV1lbXWlscm1/hXx0TlhykIOXho2cl4uUkJ+YnZWUlpSOlomAk4lfO1dvfIuUiYCMkYyQhoZzioWWgXmBeoWUnZSDlo6RkIOGfZN4cW+FjX2JgZGNj5eamJOKj4mch5+Yh4iWnpqhoJenr6mtqKiflq2zoqaumayrmKe0oqmto5N+cm1fW05TUlZMRFRKUE1MRk5PSUVMUU1LT0pJTU9GSUk8NzU5OTk5OTo3Ojs6Pj44Oj09Njo/OD4/NTg5Ozc5Njc1MzMzNzYwLi0vMzQ0MTEwLy8oKSsrLTM4NTQ3Nzk8Ojc5Ozg2QTl5t6CjraGmpqqgp6mno6mwqKe0wbmwtbDHwrezvc+/ua+utcKnqsWpo52Zg5ScsaSdmoiUkIyHfHN1XVFMUlVZWlddXmJnY19ZV1dXWFhYWVpZWFlYWVpaWllYWFZXV1VTUk5MS0hHYlxNT1JNS0hGSE5RUU1QUlRWWFpgbXBpe4J0UEJAf5WRkX2JlI2Eio2bjZaViZKIhZWGeYh/YEpRbniKkYR9hI2KhX9/bn5/lHd1dXeEjZlwUY2IioZ7fniUdmh3hoh+ioiVio2RkpaLhIqIlISajIKEkpqWnpyUpKOoqaWknpuwqqGkpJGmqpahqZyipqiJdWxlXltIUVFSTUlVTVNJTEtPSUhGSk5MTVRLUVBPRklDPDc2OTo4Ojs7ODo7OD4/OTk+PTg7PDY7OzQ3ODs2Nzc1MzQ0Njk2LzMvLjEyNTIyMS8sJykrKiw0ODMzOTc5Ojk5Ojo6Oj85d7aboqedn6Kvoaeopaeor62qtby2uLezwbu2p7nIuLaoqLW2qrK8pp6Wjn+KlKmXmI1/joSEfXdxblhNS01OT0xNUVdbXFpYWlVVVlZWV1lZWFhZWFhZWVlaWFhWVldVU1BNSkVAQJtrc3NJTUtERERJTk9oWU5RU1RVWm6DdHd+amldVY+JlIl0f4eBfIWMk4GSmYuPe4aPgHZ/eHNudXB0jY6Ben6Kq4V5emh2e45wcm14gYuNknh6gHuAdnJykndndYSEhIR7lYmIioyLgH+Ei4x/lIN7gZCYlZyVkZ+dqZ6foJ2gqaWfnZiNp6SToJ+Wnp6kgHJoYFxcSlZPUkdKWFJPSkxNUkpKSkxQSExRTFJUTEVIQTw3Nzs5OT49Ojs8OThAPzo6Pj03PT03OTkzNzc5NTY3NTI1MjU3Mi8yLiwvLzIwMC8tKygoKS4xMjcyMTk4Nzk4Nzc1Ojw7N3aumKOhmJyftKmvqaWtrLCxqr20sru4trq0sZ+3urKqnZ2sqaiyr6GakY6UgY6cj5SBeIh6fXdwcGlYS0hISEdFSEhQVFRUV1dTVFVVVVZXV1dYWFhYWFhYWVlXV1VWVVNQS0Y+OTNOPH6eTUhKREA9QURqlH5MT1FRU1ZedYN9eWd3jZeYjY99aHmBdniAiY99hJiSgXKHj3x3e29rfq19c5CLf3uGkoF9f3RmdnyGbG9oc3yJjIiAbHlxfXBtdY9xaXGAfo5wQ4uEgoOFf3d3eouFfYx7dX6Oko+YipKam6OWmZ2anZ6inZaNiqWbj56XjpaYj3ZubWViWldXVFFKU1VUT1BOUFZLTktOT0pRTkhOT0tFQzw7Nzk7Ojo/PTk8Ojk5Pz87ODw9Nzw5OTk5MjY2ODU2NjMzNjIxMjI0LiwsLS4uLTAtKyonJyouMTM2Mi84NzY5NjY1Mjc5OTV5ppegn5agpq+srquoqbCvsau8uKy7vrmzrKebsKesm4+WnKWppKCXmY+FknqJj4yNeHJ/b3ZxbG5rWEtGR0VBQENESUxMTVFSUFFTVVRUVVZWV1dYV1hZWVlZWVlWVlRTUUtENzhmNzA/qGlOSEM9OzpEioV6WkpOT1FUWF5lcHJtiKeqwH51eWN8eG98eYiQen2Lhm9tjJJ5dHhqaoCCcZaRi4F+loBJk5huaHd+gmxpY2x5hZCShmtzbHxucnuGaW1wf3ONiYSGen1+e3ZvdHOFgnmBeHB8joyKlIOWl5iakJOVlpmXnpeMg4mfkYuSjYaQln5taG1ubldVV1RSUVlPUlRUU1hVTU5ITkpNTkpDSE5HRT86ODk7OTk6Pjw5PDs6Oj0+Ojg6Ozk/ODY4NzI3NTc1NTQxNDQyLzAyNCorKiotListKigqKCcsLTEyNTAsNTU2NzQ4NUhBODk1d5mRm5manqWtsKKsqqi1r66stL+qu8K/pqKZlaSXnY2Ei5ShoZiYkZOLc456gIaNiHZwdm1xbWZsa1lORUZDQDw+PkFGRkdLS0tNUFJSUlRUVFRWVldXWFlaWVlaV1ZUU1BMRTFAmjMganNDmW87PDk1PICChl9JTU9PUldaUllcYKeIYpppdHplf3Btf3qLiXaBiIZ0bJqRdHN8amudj015hZKJhI5nMXaGc2x+foN0ZmV0foSEhYBmaWx1a3GAfGdxcXtuk42Pe3N9fHFwbnVtgn53eXVqeYmCiImDlpOSkIuNkZSUj5eOgHmIl4iGioaAkId2ampuZ2RXUVpXWVlbTVBVVllYTklIRUpKSEZCQUZEQ0c9OTk4Ozk6OTw6OTs6OjpAPDk6PDk4Pjc4NzcxNTI0NDUzMzY0NTAzMS4qKispLCwrKykoKycpLCwyMjYsKzU3NzU0NzhpTzg7NW6SiJqRmZakqK6esp+muq+rsrDCsbvDx5qWjpSZi42FeYSQmJSNkIyPhnGHgnSHjYh7cXNxb3BmcWdfVEZJQz88Ozk6P0BBRERFR0pMT1FRUVFSU1RVVlZYWlpZWFZVVFNQS0U4MC9cYLNHOVhQOzk0NDGWuotITE1PT1FWTEFJUUlir7Ogcnx4bH1tcoOBhYF6hIaGeXKglXN4gHN1lIc1cZ2onY6hoYSihXZwhnyHfHOMrY2JgGdmYmpucm1wg3Vpb1h1cI6akndsf3t9bXFtcIB6c3VuY3aDfoaAhZCRiouJkYuRjIuPg3V4i4+AfoOAfo96cXBva19aXF1bWVhgXlJOW1pYV0xISkVKRz9DQUJHPkNEPTs5Nz07Ojs7OTo5OTs6Pzw4OD06ODs2NjY1MTEyMTM1MzQ3NTUzMS4vLCwrKSopKSoqKikoKikrLzNETTIxNjY2NDM8dlI3PTdikoGSh5aRnqSnnq+VpbWqrrGuwbK7wcaWj4yUkICIfW6BkJKJg4qHj4V1goRslYiJfHV4eG13bndkaV5JUEc+QDc0NDg7Ozw9PkBCRUhMTExNTlBRUlVVVldYWVhWVVRTUExFPDUqnUtbQC1nSTk0Lz+Sg6muX0dMTU5QTDdDTVJTREqGdoB8fHZ+bXeIiHx+hYN/jH52opl5foaBhZmEm5xhhqqfnYuDkI56d4h+iYiNc4qXj4R6XWRxdHp7d4psZ2pieW+Fj4J6boF3dIR6cHN6d2tuaV53h32HfIiHj4CLkpeDjYWNh31xhH+EfHV3e32JdW9yc2VmX1tbXVNbZl5XUVVYW1VHSkpES0c/RkBEQz5BQT06OTc8Ozs9PDo6OTk7Oz0+Nzk+OTk4Njc1NDI0NDAwNDY0NTY1NC0sKSsoJycnJigoKSkoKCsrKy8wMFVxPDIzMzMxRX5XND05XIx4in+UjJKdnZ+mkaCroLGor8CxusW6lo6RlId6hXZrf4yRgn2KhI6MeIOAc6GEi319gX9wgX56aHZrUldMQEUyMTEyNjc2ODg6PD5CRUdGR0pLTU9QUVNUVVdWVlZUU1BNRkA6Mj0gI5ZjjFs1MzExaT9Hb0lGSUxNT1JMS1RdWVJKaYSIe4l5fHF8j4x6fYmHfpeHdqGZiIePkpSljaypSIaur6+LgYCTioKLgYSRqIeAmJiKnHNtfIGGh32OaGdoeH5uhYeChXGEhUdrgHdxeXZobWtfdn2DiX+IhYx6lZ6biouIkX96dYt2fHdtb3d+f3NycWpaXVxbY2NYZmVbVU9QVllQRExLRk5JQ0ZDQ0FAQ0E9OTc4Ojo6Ozs6ODg4Ojo/PjY7Pjc1ODU3NzMzNDQyMzY2NTY3Njg7REZMTU1MQzcrIiUnKykrKywvMDArbnUyMjQyMEyBXDU9PF6EdHx+ioWIkY+Wl5KXoZ2soaa4r7O8s5eNkouYi310cH+Jkn59jIKSlH2Gfoakh4h/goiFeIeJfnOEeF9jVktCNjAuLzIzMTIzNjY4Oj0/P0JFR0hKTE5RU1RVVFRWVVNRT0dDPzgwLCOHWz4/ODQuXZZwc6NVRklLTU5QV2BZcFpcXmqNk4eVgYSChZGTfoWJkYGalYKgoZeVm5qlrZOau7Gnu8fDqIqMoaWPlImBkXtyhJ6fkZx/doWFio+IkGpob4OAdY2GhItxhoJ3h4B7doV9bnZ1Z4CUj4aJiIiIh6GroZaJjph/e4GJenpvZ2t4fnh9cWpjXVpaXWlcYWZfWU9LTldSUUlQSkROR0NLRENBRENBPDo4Nz08Ojw6ODg3Nzg6PT04PD02ODY1NjYyMzQ0NTU3Njg2NzxCQj88ODo+Q1FeZVxHMicmLCwtLS4xKD+MWy4zMTBPg180PztudXBmeIN7gIyAgZCPi5qapJyhrKarr7CXkZGEoZSEeHd/jJR8f5KGkpV/ioCSm46DgIGLi4KJjYN/in9scGpdQkE0LS0vLy4vMDIyMzQ3Nzk7PT9CREhKT1FSU1JTVFRSUE9IREI8ODcvOUQ+PDw2My5sk5dNUEhJS0tLTlZgY39nZ211nZuPmpOTi42OmoiTj52LoKCSo6qlo6yTqLaiqMHDrseveLqUmnyNoZ6ZhJOFgo+in5SZkoSKhY+YkZZscHWJi4GWjI2Pdo+EcWyFgYqWkoOFiHKJoZaHk4mPj5altambjZWig4eThH1/a2prfIB/gHJhXGJeWWZqXGtrXldLR09TUU5NTEZJUENETkZCQ0VHQj45OTc9PDo7Ojk4Nzc2Nzs6Nj06Nzg1NDU2MzQ1NTY2NjY4NTU2MzEwLiosLCkoKS46UGFcQCwoLSsrMCwncog3MjQwT4RiM0A8dW5nWXCCcHWHcXaShn6XlpqUn5+cp6CqlpOYnmdlpJp+hJKReYCSiJCSfYqFmJKRgoCAi42JhZCHhIiFeHh/Z01SPi8uLiwvLi0vMDAwMjEyNDU3Oz9DRk5QUlRQUVJTUU5QSUVEPjs8OkNGPz48NzUyPD9SNUhISExMTU5SXm+KfHOBfaCdm6imopmhl6KVnJ+onqmrn6isqaq1l6u/q7bIyLfJ0c++m6Bwaaupn4SUkoacoZqamaeRkYiVopqad3p+lJeRoZKXl4GUnnt2lZKrs4mNl6B9lJ6cjpOWmaSiprawnZGZqIiXkI6BiGxzc3x+enBnYFtfXmFmY2BnZ1xRRUpLUE9JSkxGRk1DSExGRkNCR0RAOjg1PDw4OTk5NzU2NTg+NzU9ODQ3NDU3NTQ1MzY5NTg6NjE2ODYzLzAuLSosLy4tJyMqO1hiQigqLDEtKEuXXjA2M1GFZjJBQGlhXlBwdWBufWF3jn18lI6Oip+Sl56WnKqYnqpCRH2HiYeYjXiCjYqOjHuKho+QjoGDgImLioSShYOGiIGAh3dfYlA0NjAtMS8sLjAwLi8uLjAwMTU+QUFNUVJTUFJTVVNOU0xFRUA8Pj1HR0BBQDg2NjI8OTtGSEdJSU1PUVlthpB3lYujp6q0vbilrqysp6i0rLC3srKtu7GzvpyzxKy7ycu4xL+4paOwsqytq6SLlpiFpqagopeBppmNoqqopIeFk6OhoKqgpKmOnLGLlaOnt7uboKOwk6Odo56RpKKrr62ztaKVpaqImomSipV6e36EfWZfZ1tkYV1jY15mZl5bT0NJSFRPRkhMRkpHRUZIQUtGQ0ZGQTo4Nz08ODg6OTc0NjU4PDU0PDc2OjQ0NjQ0NzM5PDM4PDIwMjU1MS8xLi0qKi8sLSooKiYlNVhYLywwLCwwhIE4NzFQhWg1QUNbWFRMaWNXanBYeoR2gZSFiIKbg5KQjZLayJ2Wc1aXiI+InI98hoyOiol6iIKHkY6DhYCLhYaHkoaChImGh4eHcW5hQEU2NDwyLzExMC0sKy0xLy00P0RBTVVRUlNVVVdVTltQR0dEPD4+RkhDREA4Ozw1Qzs9RktJR0hST1BXgZOghK6js6qywcfDq7PFtqyzwLO5vra/tMG2u7ukuMaptsnHtr65tKijtK2xsZyakpqfiaevqqSVdp+kl6GrsbOYlqqtqK61u7K6rK+1orGssbW8t7WutaCnqKOom6mwrbK6uLinm7epjaWOkZOgh3mBgnRYYGNVZWFgYl9gZV9aVUpERUxVUUhKSkRJR0VBQEBLREFNRjw4Njc7PDk3Ojk4NjU1NTcxMTw4ODk1NDY2NDk3Pj0zODkxLjAxMjExMzAsKiwuLCsrKyooJyopRVowMCovK2iSTzYwUodqNkFFV1FKTFtaUWNkV3p1cYKUfYWGk3aFfoCNe7+7o7yCtJSTjZuPhIiPkomJeYaAjJOMh4WBjn+BiY6Gf4aIhYqHkXp4bl1WQEVNPDY6NDZBQjc2NC8vNkNIQ1FbT1FVV1VcV1BfVUlLSkFAP0dLRkVEOz5AN0Q3P0JKSkVHV1RQXo+lraOxtMO2uMHMyba7xL2zs8C3uMK1v7C4dLK0prrFpLDGubGzsbSopLW2qrGgopabopKlsa2lraynpJigrLO6oqmyurW7vsy/xcW9vbPCt7q4v7e6t7msrbCmsaqtvrC9u8LCrJm6qJSuj5iYqol+gXtqVmFgV2lkaGRWWmNZVlRJR0dMUUdDSElBSEQ+P0JCS0BATEM5OTY2OTo/Njo5OTY2MjQ2LzE5NTk5MzY0NjI3Oz0/NjoxLi81ODo5NjUwKigsLS0tLCwqKCgrKyhFUy8qMDBKj2s1MlCHbTY/RlFMQUxSV1RZVVp3anB/j4SBjoVuenJ5iGK4oZmjiZWTlpOTk42Ql5KHh3uGgY2VioCEgIl6fIuHhnyKgoGKg5V9d3l1ZU9cZEdFTDpRZGFbXlNGPjtIUERaZFFRWVhZZ1pUYGBNU09FQT9JSkhFRkFAQz1FNkI+SEdLTFNaVF2Tr7i1urnJwLu9ycy7vcC7t7W8u7e+tbqyxmB1s6Wxmp6rvaqlqKuqo6KytaGrp56Vlp6Yn66lp6elnqSUoqews6eysry2wb3TycrTxsLFzMLKw8C+vb+7vLe0sLm3t8O6xr3DybCeuaqirI+lqLeJgX5xXmFgXFZhXmdlUlhhVlJVSUVFTktBPkdEPUtCPUJAPUY+O0hANzk2Mzc5PjQ4OTo1NzA0NS8yNjM4OTM3NDUyNj84QD5HS1JUU1FQT1FSUUpBOS8sLCwqKygoLC0sL1A+KC40OIB9PDJLiHE5PkNLRUBJTVBSTFFdaGxscZCNhZBzbHNyc4jVwLWZoI2VmJmRjpeRlpaOhod9hoOMlot/g3+CeHqLg4d7i3mBioKXf3R9emtlcHVZXVxQZWViYGVkXVtYV1xNZG1VUm1tXm9fWGdlVVlUSkRBS0tIRkhISEhCSTlEP0hLVFRWXFpbkrnAub23xsC7ucrLura6tri5s7i1tK62tplkdaierXBeoqycmKGim6Seq6WUn5+QlI+WmJeon6WfnpqZg6SdrKSqsK23sL251NDP18/JzNLMz87Kx7+/wsq9wb3CwMXExcq/yM+0pLuwtbCbrLm9mn54a1xfW1hdYFliYlFbYFNRS0NCRUZFPEBFPkJIQkBDPTpFPj1KPzQ3NTM1Oz00Njg5NzcwMjIvMjQxNjk3NzU1NTVEM0VMTT41MS8wMDY6NDc3QElPSjstJioqKC0uLyxATSsvNTRtiUkwSIl0Pz5CREBDREZLT0RSXFlpX3CXkpGUbmxvdXWIs6yhoZ+LmZyZjIyVkZuShYqKfoiHjJCLiXyBhHN7iYOGfIl0goqGlX9ze3hsbXV7aHJlaWxpZmppaGBmaWhtWm10l62kvIiHZ1tvaF1aWVRISk5QSktRTFRRSUxBSkdLUF9fYmZpYZi3x7C5s7u+trLEx7awubGwu6yzsaeqt6yNtqeem6eaTpudjI6glpGmmKWVipOTiZCJj5CSnpuhmJuUloeemaabrK+or6eztNTU1NbRy8/T1c7Tz8zFwsrQv8rJy8nSyM3NwtDSuLDEvMS6pra7xKKBbWJbW11XX1dZZVlQXFdOUUNCSEVCSDtBRD5BSD8/Qjc7RD5ASD00NjY1NTs6Njg3NjU0LzEwMTQ2Mjc4ODc1MzY3QzVCOD8tMCwxMzQ4PTk3LC4sMTtGTD0pLCguMDAwN0s/LTQ2VIhXMESHd0M7Qj5FQkFDSk0/VVlTZVdzkJCYg2hxb3l5g6CqnqaXjZubl4uNlZGajn2Ji4WOioqLkIh8hIJwf4eBhnuHcoOSi499cXh1bHF4fnF7bXhzbGiAcG1jaW1weWl3fX7Lv8Lfp21jeG5jW2FgSlBSVU5ZXlBdXU5RTlRRVVRcbm53gnKWrristKewtqutvcCxq7WmpbinrK6hrLSjjrGumpiYjJGUkYSOm4GNppGciYOLhIqJhIuDlJWYl5SbkJyXmZmenquspKehrKzO0tXRzczS09TQ1NHOyMPU0cjO0tPT183S0cXS1sbAzsfIw6m/uNCdeG1kXGFcVV5RXVpOT1NQTkg+QUZCQkU8QEI/RUU+Pz86PT09PEpBNDU0NjU8ODg4NjY0NDEyLzAzNTI2NzY4NTMzOz08RT1AMTErLzM0OT41OTAxMDIyLTJFTzMpLzMuMzI9TjI0OEN9XzJBhnREOj09ST5AQ0ZIPFZSTU9bdYaFindtd3B9foChnp6hi42Zk5OMi5OPloR5hZCQjYuKiJGHf4J7cn6Agod6hXWFk5GJf292c2xzfHx2fHOBd3FqgHJyaW9xenlye77Lmn6MsYN2coR2aGFqXUNaWltWZmRYZWtUWF1cYGNdY3h7f4uBmaqkpKGgoammqrG5qqa0o6KtoqOtoqexn4mmmpSSkYqSjoiCk4lrlaKNmISBhX6Rg4OTlqyLlY2VmY6FkpCdl6ewoaCgpKSoyM3Px8HL0NPR1NPO083G1tPN1NjW1tjV19XJ1NrNydfW0cqtxMPLiXFuYl9fV1JYUltPSkdJSUpAOzo7RUJEPEJEPkhCP0JCOzs5PDpHQjQ2NTQ0PDU2ODc1NDMyNTAvMjU0Njc0NTU0NDw+PUU/QTYyLy0xNTs9MDgxLzI1NC8tLjtSMDE3LzUzMkVEMjg+bmI1PYF0TTk5QEk8QUQ/QTtQTEZLWXCAdX1oc3lygomBnZWdlIWLlomPioiOh49/d4SUmYuNiIiLiX6DeHN7fYOHd4B7h5GXgYNud3BtdX92eH1zhXx5bId2dG99doR1eXudtYw8QYrGpX6NfGllVklDZWNmY2hqZG95W19maGtuaW6Ag4mRi52foJ2Ql5ifo6OmsqSks6CipZ6hqaCisZyGnpKSkpCLjouGg4+EfpybjI2ChIV6lH6CqZWjjJKKl5KLfZeKmpGrs5iam6ecp73Dxri2xs3S0NLQy9LLydTP0dXa19fY1NnYzdjbzsna2tLWv8zMtHZ1bWNcWVJVUFlVRUZKSUVFPTo3OUBBQzpHRUBFQ0FEQTs/Ozs3REM3NTY1NTswNjg5NDQzMzQxMDE0NTU4NzQ0NDQ5QD5EQkM8MzMuNkZUVk9RSkFKRj8xKiguQlQyOTI1NC83Szc1PGBiQTxzdlY4N0FIOj9DPjw5UUVDSlRsbm9wYXFxc4aNfJeRnYt+h5KCiYaFioKHfHiFlpeIj4OHhod6hHlxenuEhnV6hY6NnXqMcHxvcHp/cXyBcYOHgG6OenV3fXyCdX98h4iwdFipwraMkoFwbmI9XmhycHFwbnh3gmVpb3J1eHJ7i4eOlJKblqCWh4yTm6Cbn6qfoa2copqZn6Wen6yZi5qMkZKNhX2Ih4OFi46gmZOIg4d+bZl5hJiGiJOMjpSMhXubiJOPrqqUlZeemKautbyorb3Gy8jJy8vPyMTSytTW2NfY19Tb19PZ29bP29rR1sjVzJV4emhnWllPUlNdSEJFSUk+QT49Nzo9Pzs+SD1AQUFBREE+Pjo4N0RCNzU1NDc5LjU2NjQzNTUzMjMyMzY0NzU1MzQ1N0VCRENFQjU2PEZOU01bbmZjbnNrYFY+LDRMRzg2NTQzM0JGND1XX2hMdXheODs/Rjw8Qjw6OUQ/Q0dSa19tZGJma3aAiHGRkJuAeYCOfoOCgoV/hHx8hJeOh4t+hoeAd4J5bnt7hoF0epKejaF2j3WCdHWBfXSAhG+BkIFvkoR0fIGFenaGe4m3xqTCybeBlZuPeHBlTmVjgnqBd4aikIt5eXd7g398hHZtlJaUlY+XkIOJj5aal5emnJigl5+TkpejnZmrlpGRi42Sg4yFiIiBhZCRnpyZiYWLgYWXe4iIn5eQiY2Ki4J8oYiQi7yhmJOXmZyopqWunqe1vsDAucfJzc7FzcrR1tXU2dXX29TX2drb19va2djO28aFeXhlaGNfUlZWVU1LRE1DOz09PDk6PD45PkE2Pj9APD8+PDk4NjdDQTY0NTU9ODA2NjU1NDc3NDU2MTM4NTQ1NjQ1NTdISD1ESkU3OTI1O0g+Ozo6N0hQXFpSVVhLOVQ+Ozk1MzI3STg9TllNSHh4ZDU9PkM9PEA6Njo+PkBFUV9ZZWFdW2h0enlsiY2Sd3Z6inx+gH+AfYV6foKRiYSFeoWIe3V9dG58fYZ+dH+SnZGfg5J8hn14jn15iopugpqAdJiFfoGJhXx+kHqPqY+Qw6C7jJyjnH2JhH2JcoyKfnOmmpyZlIV7j5CJhGhHcaGknYyLkJKFiIuRk5WPnZqTlZGXjYyVn52UoZSSjo6Qi36Qj46LhIiSlpqfn4mMlJGdkIKLf6aZiIWOgoaEgKSGiou4mJ2RlJahp6Cdnp2jrra6tau/xcrQyMfMz9PS0tjS1dfA19jZ29ja2tnZ19y3d3d2aWlkVl9aU09OSERMQj09Pjk5Ojo5OTw9NkA+Pjw9OTo7OzM3REA4Mzc4PjcwNjg4MzU3PDM3ODA0OTc2NzU1NTQ2RlA1RE5JODkzOEFLPTszQ0BJPDlEV048TVRITj85NjMzMz5DO1tYPjVZeXBaPDxBPD0+ODU4OT89RFJTUlheVVhmbW1taYCOinFyeIp7e399f3yIenx7i4eCfnWDhnlzenNtgX6EfXeGm6CanpSSgIuHf5iHgJySboeohXqgi3yQjoOIhJx+mpGKjaOin5Cjrp+LkYuFi4GShldyrYufrJyPg5ibj5COW4OikYKMn5OVjIaIjJKTjJSVlJCMj4qIlpudj5WWkYuSlIaAi4mSjYqKnZaZo6KGk52VoIuKiI6ckIOIj4CDh4WkhYuQs5ickpSXoaGemZKbnaexuKylvMHHzcfGz8zPzM/Xz9HUrtbV2NrZ2trX1tnZnm57c2ZlW1xXUlZXQ0BJRD4/Pjo0ODo7Nzo7OjM7Oz89Pjc7OToxOkc9OjI3PUA1MDY3NzI1NT82NTs1NTg1ODo1NzczNUhSN0dPSzk5ND1FSkI+MUZDTEE5ODpHWEA1SFdJNjYyMjM6RUNlWD8mX3lpX3o+Pjk8Ozk4OjxAO0JRS0tTWVBUY2J4bGJ+koNubXeLeHl+eoF9hnx7doaEgHNwhYJ7dnZ1dISDhX1+kqajnqWilomdkJSWi4qol3KKso2DppGEmZOEmYyilqCZk4manaGSqK+fkZSQjo6IlYtujbeEmsTIsp2ipZucmJaRspBjpM3IlY6Gh4mQko2Nk5SKhYqKhpaam4+QlJOHlZiEgI+LmYiNkKqXl6SjiJmelpuJj4eXl4uFj4yBf4aPpIiNk6iZl5OWmKGYn5mTnZuisrSlo7zBvsfFxcnIycLK08zN1KjS0dbW1tja1NPazoFxfmdiXV1cTklUWUFCR0Q7QT04Mzc7PDo4PTY0OTo8OjgyPzk5MjlJOj42N0JDMzI6OTYyNjQ+PTQ7PjY5NDk7NTc5NDRLUTxKUUs5QTdCR0lANjRKRUxGPjs4OEVUQTc+XDg2MjE0OjtFYFhBRmF0aExjWj41Ozo6NTs6PTpFTUZIUldTUkJjgUZ2gY99fG1+iHh6fnqCgoN+dnaAgnxsbot/enx4eHyEh4p+iqOzp6Oqs6GWp5+lo5aVrqGDkLiVkrKZjKGhjKSbr6OknZiQp5anmayvpJeUlpWQi5iZlqDAjqPJuaubo6atmJGbnbKdhYWoopyYhYmJjpWMi5OPiIGGh4mTmJWMi5SThpSYhoSRkJx0kZiylpekoYicmpOQipGKl5uJipaOhn2MmJ6JkJCcmpmTmJeflKCdlZ6boLGuoqS3vrTFx8S9w8O/xs3KydKmzs3T0tDW2NPQ2LpxeHVcX1RfVU9ISk5EQkNFNT46Nzc6Pzs8Nz00MjY2OTc3ND01OzU8TDw+OzxCQTc1PDs0Mjc3P0A2P0A3ODQ5ODc7PDU1T01EUFJMOEA9RUFHQTU6SkVORUQ6NkFAQlM+OURPMzIzNTc1PXZcPFJcdGlaTV1TPD04ODU2Nz06SkZER05bXFlKZmA7SISLentuhYZ6fIR4gYWBfnB4fH59b3KNen2BfHiGi4mGhJKnu6yosr2vpK2ys6ijorCsipq1naK4pJWtpJeprbempKOfmamXqaOvsKmZmJyUlZGXoJiau7uuyqFqtrirsJSYnqOrk5e9o16qsoKJio2Uh5F8jo59g4aOkJSUiIeTloyQlY2LjJeYkpyZtJeWq52LnJSSjpGSjJmbipGekIuJlZ+hjZSNmJmckpuYnpShoJScnKWvqKGks7irwsjEtbq9u8XHx8LRoMbJzc3E19bRy9Shb3lnW1lTXlBORUM+PENBQTg/ODc1P0Y8PDU8MzUzNTU0NTRCMzk6Qk06QjtBSEI7OkA8NzQ2PEI5P0BCODc0Ojo2Pjw0N1RLQ1VRSjc8OklBREA0QUpITkJBPzZEQTxKTkQvVD0yNTQ6RUpcWEpaUW1ncHBEaWBLSTY3NTc6PkpAQ0lQZEdiYGJwSkCLin+Bc4aHfYKIdYOKgn9tfX18f3B3h3eNgYd7jY+MhoyZqsLAr73Gu7OzwLyzrKuztounsq2tvaqbu6Sorbm4q6amoaKjo6ivsrGqnZykmJuXl56ipqWSpLquqcC8ra2yuaakqH6IhpytvbCCjIyLkIOPg5GPeoGHkI2NnIiHj5eNi5WXlJGal52omrGakaycjpqPko6VkJCWl46RoJGJlJujrJSWj5ScnZOgnZuYoKGUmp6npqSipLCzp8HGw6+wurbFxMK/zabHxMfDvNXRzcTKh3JyYFpZXlpMSkJLQEZHPkE/Qjs6ND5BPD01PTY+MzMzMjQyQTE3QEJOPkdAQ05DQT1DPTs4NkNDNUJJQjo4Nzg7NUI+NzlWS0RXT0Y4PTRLQEM+NEVLSE4+QUE2QkI/QlNFNThQMTQ1Ozw4O0Q+OUxqal07V1JkS2daVU83OUdFP0NGXGVHYGlnWl1ck4yMiHuHi4aDjHWGkYqBb357gX9xfoF6lXqSlJSYkJOVp7PGyb/CzMHDuce8uq+rubqXsra6ssCupcCkq6+7vKqtq6OjnqeqrrSwqpugqpuhm5WfsLSni6O6urbBvKyonLKlpKiUhY6pxMSkgouPh4iEhpWUjXqDjZGPkaGMjJSRjomXn5iTmZWYpqCunYyqnI6Wj5KRlZWOkJWRj6GUhpefoLKelJqUn6GYpJ+aoJuglJiepaOmpqSvrqW/xMKuqLe1ycO+ts+yxL/EvLPRycjCtXN3a1tXW2lRTEhDTEpLSkFBPUNEPDVBRDs6Mz04QjMzMjI2MkEwNUlFTT5JQEhSQEg+Q0A7Pj1GQTVBVUA7OTk4PDdFPjg+VkpDV09HOD80TEBCOzVKS0NMP0I/PEJGPUFITDkrRzwzNjc0NjRBPzdPYU9hRS89PjZrbGpgQDpIPj9FQmZaTmVcZlRjapmNl4qMiJKQhol5hpSQgXKAe41/eIeCgZB6jaGWqJqamLq9x8jJwdLJysLMvMGyrbu+p7q/vrzEt6zBqayzu76qsKmkpaOrrbOttrWgn66epaKYo7O9qZuovcGjt7ewq5OxrKusl4eaqaelkYKMk6WViYF2ipF6hY2SkJ6fk4+Ui4+NlKOZl5yVlaOeqZ+RpZqMj4+PlZaIfI+VkpKjmpWgopy1pZCel6SjoqWenaaYnpWXm6SjqKeisqyovMDDr6Wyt8zAua/Es7u+writwsPCwJhseGBXVlpaSktNSkZEREhCQkFETDo0REg5OzQ8N0UuMTIzNTJCMjZTSE48SkJKUUVLQ0RFOkVMQjw3RVY9Oz04OT88ST86RVVJQVdRRzdBOks6Qjc5Sk1CSUBDPjxERzxCQ089MjBIMzY2MTcwPUI6PWpqSks1UVMzU3BwZE47RD1ARj5qSF9YYVpkZFaej52Ol46ekomKf4mgk4R4hX+Vf3+QiIqQgJahma6mo5jCvsfDx8XTzc7Ny7vBt7C5vLO8y7zDwbW2u62zv7m8rq+ooKintq2tqbK3mp6soqehnau3uKmksL/Esb65s6eqtbOtrpeWpayooJGOkrHFp5WOfZGUfYiRmZCqmZiTk4+SlZOlnZOdmZSho6KcmJ+Yi4yPj56IWpCWl5KWpJllmKOesqSWoZasrKqnm56ml5iWmJWgo6iln7arqbm7w7Sls7XLwLiqtqyyuriuqLe6vbiCa21ZVlRUTUVKU05LP0FIRURIR0c5NUZNOz43PUBKLjMyMDI1QjU1UFZOPExGS1JMT0hHST5JUT86OElTOzs/Nzk+RExCQEhTS0BXUEY6QT9HNkE3O0hNQ0U7Qz00RkU6QkFCRzkvOkEzNjAzPkdEOTQ9dGRNRztFKzpmfGdWOz1AQkZCcUZpSVJlYkxGpZSclqGXqZaNkYOHppOIgoeCnIODlZCQk46aop+vvq6hxrzFxMbGzs7O0sq+u7axuru7vs+2xL24uLeysbWzuLOrppyrq7mqqKevr5ejrqSnpKS1wLCrrLS/w7rAurOnubW4s6+Wpa2urqWLk5WhjXTBmn2WmYWPlpqMsZWbmpWSk5mZpaOVn5uWmqmdnKGgmYqMj5adYEqWnJqVmqWWVJawn66cn6SUr66rpZqgpZSTmJiOnJ+mopm0qaqzvLu7qrCyx7+5pqyrrbGxo6GxsrSkb2xlW1lOT0tFT1BQUTtHSkhHSUNDPjpLVT9BOj1FTTA3NTQ0OkIzNE5XTzxKS09VTlFKUEhISk9CPD5NUjs+PTg6PENSPkRIUklCV05JQEJBRjM+NThKS0NBPUM7NEVBOkE/PkhANSpCNTIsPmNdZzozNXRkZUBSNyYjM31oVzs6QkNAPVFFV1NzYldGSKqXmaCiqK+ZkZeHi6eWjomShZ+HhJ2Xjp2hmqOktci0qca6wsPHysjHzM3Gvruzrrm4wMHMtce6wbi1urCvr7O0pqObqrS0qammrayapK2lpKisur+oq7a3vsG/vrmzssSyub2so661rLmmiJuYppt2v5+EmZ2Ok5mai6+XoZyblpWbn6Gpn6egmZqqmaGnnpiQjZGdg252kqKalZ2inpCusqKqlKiql6qto6OfpaiSkpmciJScop6Xsaepq7q2vbOyrb65t6Cjp6ilp5ybrKmpjGJkX15RSkxGSE5JVUw9TUROSktCQ0Q8UVU9QUFCRE8xOD03Nz9CNzVVWE4/SE5RWVNQUVVLUUpKRUFFTVE/Pz04PTtHUjxFRFFCR1lNS0FIREU6OjM5S0lCPkNCOTlDPjxAPjs7RzctMj4tMYJoTnpcLzBraGA8PUJCODZ6Zlc7Oj0uLlJgTVVIf2VeSEWrlZyhn7qvmZSfi5Orm5GSk4mrjYein4yjrZSjo7bGvbTBusLBxsjFws3Iwb25sq+4tMDCyrXFscG8tLqqqK2ssKKjmKq0u6Wopquqnaivp6Oqqr68p628tLi9x7y3tbfBsb7AtKm1t6u/pY+imJGioLyfiZqgmZeeno+3n6mcpaKbnKGaqKWzoZudpZyoqp6ZlY+Um4qWiYykopSdop6gtK+lpJOvq5mrqp2dpKOokZWVn4OPnp6blamkoaG0tLq1rai1srOenKKlmpeVmKqhnnZeW19dSkhFRk1RSU1FRkdCUkxKQkVHQFZSREg9QUdRMTtCNzpCRjc5XFlLQUxQVFVTTVdSTlVKREBKSk5POUM/NT08TlFDPz9QP0VaTUpBS0RHQDUzPUlHPz1FQTk3QTs8QDw8M0A8Lyc7KkiRQjpTSjAsW29XNzE8Kh1CgGRUNDktMTpnXEZDQ5xwYkdFp5ekn57DrZuXpZiZqZyWmpqPqpaVp6aVra2Zoau2xMK7vrfAwsDHxL7Nxru9ubKvuLO/wsi1v6+7tri2pqSqq62goJqrqsSipKirpp6rr6yhqKi/t6atvrG4tse2tbm4v7K/wbe0s7SvvqOXo5aUnJSuoJGioqWjo5+QvaSpnairnZ2gm6afvaKYo56iqauhnZaNlZ6TnoePhI2TnqSgnbWspZuVsaeZrqaemamdn42YlJ6DjaCam5OlpJqYq7G1saqlqq2snJigoJKOkJaonpRnYlhgXU5IR0pOS0hFRElBPlBIQDxHSUhbUk9LPUhPVTRCRjk+SEc1Q2FbS0NOUlVXVlFYVFJVSEA4UVFQTTpHQDRDSFFTSUM7Qz5HVktDQE8+SzwwNjtHRj47RkE1Nj85Oj85OzE1RDAtLC9Ndlw0S1o1LE1uVzwtPSkeI3piUTVDS1E6blJGPEt4ZWJWTKKao5yexayhn6yena6gk6OflqWfpqmrl7axo6qztcTEvb+2v8K7yMK+ysi2uLW1sLOzt8HGtr6wuLS4tZ+mrKqrnZ2epaTBpJ+prZ+kqayvoqanvbWlsby5t7bDsrO3ub+yxMC4uK6ztbWjnaWVkpShrqCZop2pqKujmsKtqZ6srZubnpmmob2hnaSYq6uspqGZjZqfkp6Jjld/lp+moaC4qqaTmLWjn7Ggn5qulp6OmJSdgY6fl5WOoqSVkKausqupoaKlpZWVnZiLj5GTpJ6JYGRZY2BLSEpKTkVFQUZKPj1KQjk5SktOXVFRST1MVlw5Rkk9RE1JOEhiXExDTFBTWVlWV09aXklBPVdRSUs/SD81SE1YU0hBOkBBRFBIPz5RPks3MDk5RkU7OEc/LjY+Nzg+NzcvMT85MSUxUVVtW0pPMTA9Z1dEMTc9LSt3YFM2U1prV3JIRTY9dWVcS06en6GZnsOopaK0opyyqJOrpKCjn62prJ27sKistbHIxcHCs8LDvMbDvMTKvK+wtq2wtK+/xLS5sbC5tKyZqLCpqZqdpaGnwqybrLCcqaOtsKmkp722pre7va+3w62zssLAssezurestLauqqKmlpWVpKyin5+aqKuwr6+7sqagqaiZmZiToqS4oKGkk6+vrKWnnpKhnpSej5CNlZ2aop6ns6amjJizm6Oump2brZCek5WTmX+RoZaPjZ+hk4umrLClpqGcoJ6SkpqThYuSjZyef2BlWmdlSklMSlJCQ0BJRzs7Rz85OU9NVV5SU0o+T15dPUhQQkxMSTlNY1xMRUxSVFlbU1VPXGJIQT9aUUFIQUtCN0ZFTEtNPztCSEROQj07TkBBMy85N0NCOTdGOys2PDQ2PDM1LS80QDErJ1Z0U2VPPzEwNGJbTTIzPjA8dl1eP1tUXmVxQDg7SJZ3ZUE0n6OfnKDDqKSqsqGjtKqVs6ynoqSyrK6pu7KssLS0xsDEw7W/xL3JxLXAyMG0q7Wor7isv8Ozt66strmlmauxq6qXn6aXrbu0m6ewm62frbSyp6q5sqi6s7eyucCqt7HDvbTGp76vrbe1qairoZeXkqaloqKYmKWvuK6ytbagn6ikmZWVk6Sgt6KkpZavsbKnqqahnpuampaXqJ+fmKGer7KipoyXrpikqpeZnqSQmo2Tl5mElZ6UjI+cnpSLqamqoaegmZ6VjI6ZkIGFlYmUn3hjaFxqak1QTU5UPUNBTkM6Okk/NzdST11eUlZRQVdgXEJKU0hWS0g6VGRcTkZPTltXW1JQUVhdR0FCW1BCRz5OQzlIR0hPUD8/Q0lCTEI8MklBOTQxNzdCPjs3RTcrNjkxNDgwMi0vLjw2LSNCcWdzazIzLzFbYlozMzgwNnBbYkgwNUlwaFZDV0aMeWZDO6SjnaGmv6aor6+hqbSrnbmwq6OqtLaxsLm3sLe4uMS9w8e9vMTBxsC4wMbAuqm2pKy7rMDCt7eprLG6opWtsK2ylqWnkaq5qaCmsJ2qoK+0s6qptratu6yzs7q3rLiww7q+v6bDq7C3rqmrq6eemJmroqKgkZihsa+zq7C5mpypoJmWkpemobeppaOisLG0q7Koq5+boKCbnaWcoZedo7Owmp+Pk6Wan6ialKKdlJeJk5eSlZack4iQm5mUjqiopp+jm5ebk4eOmYt9jJaFj5tqaGxgbG5XUFFaVEFDRVRAOztIQTc6WFBkXlBWV0RZXl1NTFJOXktKPlpjXk5IUE5bVVlQS1RXWkk/RFhQREY/TkA9SUdHUVBCPURGQk0/OjFEPzc3NTQ3Pz05NUU0Kzc1LzI1MS4tLiwxPSonKz1ccD0+MS4wZFpkQDE2NDdnWWBGKD84bH1oW1Y7iXtjQz2nn5yiqb2hq7Cro7G4qqW1s6ygrbW8rrO4vLq9trbAwr/IxLnEwb+/uMS9wLevtqert7G7vr+0qK6xtp6Xq62orZenqI6nu5+krLOeq6KwsLOrqbW0tb2tr7G1rLC0scG6xbervK+xuKytqqOxpp6kqZ+kl5CZn7Oqs6qqs5qdp5ualY6gpqS0rqehrK2usaezrbGqpJyfqKOelaGZm6i1qZeZkZKemZ2fnZCqnZaXhJSXipyYm5OKjZaXmpempaKgnZaVl5OAj5SFe46Sg4yWZWxyZ29xXkZZZlZEQ01YRFo5SEI2Pl1RaFxOWV1HW15dTk1SWGRKSkNcYl9QTE1OWFdYUEpWVldMPUVVSkVEQU1AQUZISFFQQTtGREZLPTg3Qj02ODcxOT48NjVEMCs4MC8wNS8qLC8tKj0sLCUyKyo1SzEvJ19fYVUxNTA9YFZeOClDM1lUXGdLNox6ZkxApJqgpKy2pK2ppa6utqqvtbqnprC3xbextr7BwrS0usW+zMW5wsC5vrnDt8C5srSrqbq2urm9tKmtsLWYmKerqqubq6uOq72dq66xo6ugsK2zrq22srm3qq6usqi1r7O7vcqyqra1sbSvrqehs6CbqK2gpZWVmpqyo62gpq+XoaSampKOoqWnsqmhprKsqralrrG1r6SZna2nmpifmZmrt6KXk5COl5yhl5aTq56akn+Sl4ydnJmVkImUkp6ZpaKhoJiWkZOVeouPhXuMioOLkmpteG11e2FFYGpZSUhZWj17SkZENkFiVGlbTVxgSltdWlJTUmJhTEtFX2BgUUxJUFdWVU9HV1ZVTjpJVklIP0NLP0VESEhRTkE/SEhIRTw3PT46NzU2MDk/ODY2QiwtOCwvMDQsKCwvLSo3NikoOS4kOks1LiJUYFVgLzUoQ19RXC4qQi9KR1BbSDNjWVRLRJmXoLGosaqtpqSvrrWpt7S5pKyzt8q6tLq6v760s7fDwMzIvMO8tr2/v7e/vLG9rae6uLe2wbaqrLG3lJemrquno7CqlK+7pKyxsqeoo7G0sLGwtbG4sqmuq7Knt6+1tMPFtqm1tqywramoo7agoKexoKSUm5mVsZ6nnKCqjqmjnpuWmKalpbenorG0rKeyp62wtqykmaCsqJucnZuUqbiclI6OipicopePl6WfnZSCkZWPnJuXlZSHlo+Xmqeco6CSlpCQlXaEkId7hYGEjIttcHd0e35cS2VsXEtOY1w+YntHSThHZ1dmXE1eYk1YWVdUWFRpXU9PSGFdX1BKSFFWVVJLSFdVVk04TVpORUBGSz9IQkNLU00/P0xPSEA7Oj47NjswNDE8PTQ1OD8pMDcpMS4yKSksLC0rLTkkMDQyJTlCNy4jQU5IZjI3J0diTFYlLUIuPUVMUTwzcmtKQ0OQmaWupa2uq6eksLKzqrext6CrtbnJuK7Au8O3srG1wsLOxcDBvbS8v7+6vryyxKepuLC2tr+8rqqzspygp7CtpqWvpZ2ytayrsbGtqai0uqy0srWstKyqrKisqbitsbDHv7ilurCpra2lqK2wpqSkr6OpnJ6cm6+Zo6Oio5GsnqOgoKKqpaa5pay1taSqq6isr7auo52jqKqboJqakqSzmY6JjYeQoqCUjZOcn5ORhI2Skp2amJSTh5eSlZmnm5+ejJKRjpB2fo2FfXx8h4mIcHNxfXx9XFNkbl5OWWZcRkSWW0c7Tm1YYltMX2JOVldWV1RYZ15RUkxjWltUS0dPVFNOR0lWU1xOO1BeSUJESEpBRT8/S1NPPjpOTUM8PD45OjU9KzMyPTYyNDk6KDQ1KS8sMSgpKywtKiY1Ki8mMCkzODoxJiozQmM7NipIZUhKKzpJPzNCSVMsPo9rPEdIj5yqq6KpsaSppbO0srS1srKhq629zLquwLvHsbSstMLC0cXGvsCyvcDCvL+3u8SnrLess7i7v6+qsa2go6etqqiksKOqsaqvrLCvsK+rs7umtrGyqbKpq6alo626rKqxwrm1rLqoqKitqqixpamkoq6qqKKfnKOslaWemJ6ZrJ2ip6mirKajray4sbKgqaKgq6+xrJ2fp6epmaOYmY+gp5iGhI6Ki56fjouMlZuOjYWGj5SfnJWXlIaWk5OXpJucnIuSkI2Jfn6HhXx3foeFhnRycYh1a19ZYG5jUXNxXEs7hHxGPld0WGBaTmNcTlVWVVdRXGJeU09OaFhXV0tHTE5SSEVJVlJdYzxQXUQ8RkhIQkc/PUpQTDo+T0o9OT89Mjo3OyozNT4xMDQ4NSg1LyosLjMwOyksLCclMjM0JCwyLTg2MCkoMTxdSjAuSmdERjg8QjA1RUtYMUCUWj5MRZWYraihqrOcqqqwta24ta6rpaqqvcm8sb23wq+xrLPEw87Ow76/s8DCw7rAs8jDq663rbK4v76yra2rpKepsKmnqLGmtK6qsK6tsbC0rbS7pLizrKyup6ugop6vt6qqrbq2pba1o6qnrKuqraGopqaxsqSmpqGhrJaqoZWaoKaepKKqpa2in6ext62uo6Wim6qrramcoaWkpJigmpWPmJyTgYKPiIWcn4uKjYuYjY+KgouXo5qRkJqLk5KRk6KZm5mKjouKfIaAgYN6dICEgX1zdoujh3hqXmBuZldlh2NOP2eTTEVieVdiWFJlVE1WVVVUT1xdYVVLTWlXVVdJSkhJT0JHSVNRWW9BTVhAOkpHRkVHPj5FUUg4Q0tFODdDNzI6OjoqNDk/Li80NjMpNCsqLCsuIzQuLSsmKCs3OSomNis8LTIsJjA2V1ouMEpnQUE8PEMrOkpPXjREhj5IRkSXkrClo6qxmKuqrbartrGrpayqqbzAwLi4s7u1pbKwxMnL0b/Bu7i/v8G5wbnAxK2xtbGzur+9srCuraurqLaqpq2vqrmvqLGxr7Kttqq3t6a0t6uspKmqnKOes7OoqKS0tKC2raCqqKuoq6egq6uoubapqqqqoqmgrJySqaGdoKSjpqOqnpynta6opqqio5ilpqeqnKKko5+ZmJ+Qjo+YjX6HjIaEnp2Gg4qJjY2PjIKFlKKZjYyZkJGRj5KflpiWi4qDf3SGgX9/eXSDf3p3foCHnY9vcWdncHhcYHOIa09emVZIbXhVZFZSYk9NVVRVUE9YW2JVSFBpVFZTR1BZVUk+SUhPUVB4TE1WPTxLRD9AQTxAQ1VDOUFLPTU7RTEzOzk3KjQ6PSstMzQxKjgqKisqLCkpKC8qJiklMzssJDIpMjAyMSUvMlFiMDI/Zj1OWD9DLD5MVF8vSmo2T0Q7lo6woaarrpqspa2vs7Wvq6Wwqqm6vrzAsK64raG2r8nHyNDAvry6vMK9usPAvr+usbKxtby6wbGxsquzqKS1qaWts7O5sKOttrGws7qrua+prbasqp6prJ+ioLWtp6Gfr7KitKqeqKeqo6qhoqytqL2vrK6toqiooKyZkLChmKKgp6eeqJuZqrCpo5+toqGToqKjp5iaqaWYl5mdjoqHlId9jYaEhKSWhIGCioaNjJCDg5OgloeQnJCTkI2RnJSXjoqGhXh0gX98dXh5gHp0c3lof4ajdWleZWuBdGeIi31TWHBeSnhzU2RTUV5NTVJZZk5MVllkWEZTaVJRP0JOUWFROklITFNJcVFMUzs8ST87PD07QEBXPDw/SDczQ0IxNTo5My01OjopLTMxLS02KSgrLSw0MiMyKScsJS47LiYxLjAtMTQlLDBMZzozOF89YWQ/RjFDUFtbKkhNOVVBNJGPsqCkpqykp6Ssp7SysaqksaiquL7BvK+nuaqmrrDJx8jRw7y/vri+v7zJu8C4sK+0sbq7t8Cys7usuKyitKenrLK2ubOnqLy1rra9sL2mrKy1q62cqa+jn6SrqqecnqqypLOomqqnqaOpnaOpp6m9q7Svrp2ppKCunJuzo5WknKWln6SbmqmrpZ6bqqGbkpuhpJ2Yl6mokpiak5CKgo+Ffo6Cf4iej4V+fYuGkI2PhH+SmpOFk6GMlJKLkZqRlYaJfoBye3l9fGh3fHp0cHB8Z4R4hIhkYWdjcYV6bWZ4XV5WQld6bVRhUFJYS0tOcXVdSFpbZ1lFVWZQRD5KTkRDQTlIR0tTP2piSlE4PUg8PDw+Ojw/VDY6P0M0NUg+Mjs1OTAyNzw1KC41Ly0xMSYvPktIMCUaOTAlLCwwOS8sLCs2JzE3Iy0wR2pJMTRYPWZjQUo3R1NgVSo9OkRXPiqPlLGZn6CppaWhq6W3srKmqbGnrLjBvbWwo7mtqKixw8nJzcG2vb+1t7+5yLbDtbOxtbG9t7m9ta25tb6tobOnqquwtbi0q5+9vKmzwLO7oK+ztamrnq2wo5ykqKqjnpyksKawoJ+rqaeiqpukqKCtu6eusK6gq6Okrp6eraaXn5uho5yfnJqjqqOamqSklpaUn6GWm5emq4uekZCRi4KKgH+OgHualY2Ie36LhY6Ni4qDkZeQhpSjiZKSh5CZj5OAiHx5bH12eHhje3txcHByd2d/c2qDZ2RnYG1zjm1haXBgcEFceGxVXk9RUUpKTVRZV01dXmxXRFhgT15QSE1ERjs3SEVLTzxyaEtLOUFFOzs9PTs7PUo0OUI8MztHPDQ/MTgtNzg7MigwOS8sNS4uPS0qSz4qHTQ5JicuMzQuMCsvMyYsOiQ0MUJoWTEzUz1lX0RMNktWZE8pOzJPWD0jk5msmZ+Yp6Sjn6ikuK+uo6+wqqu4wrqzrZ+4r6uotLrIy8i/t8K+r7S9t8S2w7GuubGzwLS6vbepubi9q6S0qKmqsK65saqbu72ksMC1taGutrWmpqexs6CepKanoaWZnqyoqZ6gqq6noKaYo6ifsLifo7GuoKuhrKScpqepmpqbn6OVnZ2anqmml5ugqJKYk5iek5mWoamQmYmOj4Z9h36Cjn18oY2MiHiCi4SJi4uFh5KZjomVnoiRlYKLl4yRfIV7c3B9cXN0YHl4aW5wcG5ofXFjemxpZWNfZYV/X1pza3JMTH5oWFpNUExKSFBSUElOXF9uU0RXWlJnT0hMRUY1NkhCTEk1WmVKQDZFQjk6Pj0+OjpDNTk+OjNARjwyQDIzLzo7ODMmMjwwLDg1QiopLUMqLDQ7Tk5AOzczLS4rLTYqKjwlNTM9ZmQyNE0/ZV1GTz1SWmdIKj4vWFc1KJedppmdlq2goKGkobersaSztKqoucS1s66ft6yurbC1xsjAt7/BubC0vLe/u76vq72vtL+wvMK4qbu6t6eotaioq7Css7Cnmr63pa28trCesLewqKWnr7GboKSgpKShlpuvpqGeoqevoaCik6Skorevoaaxqp6so6+YnKqlqZ6Ymp6lk5udmp2mqpqcnKWWlZeUnI6Tl6OooZCIi4+FeoR+hIp6jpeKjYZ4gYaDiIuNhY2Tl4yOlpiKj5Z+hpeLj3mAenByd29vdF95d2RsbGtpaIJtZXJqa2RoW2Jzf19abHZpWkh9XVtYT09KSEhSVUYyOl9ebFBDV1ZZZU1ISkVFMDdGP0tCNklKSDs2Rjk0OT49PDk4QDg7ODo3QEk+ODw0LTM8PDc1KDU+MSw7QTEoKzY8IzhSPSoxMTM+RDUsLSc0Mis7KzEzOWNsODRHQWZbSFRDVF1oRS47MV9TLDKWo6GXlZypnaWho6G3qq+gurmmrL3Es7CvorSvrK6vtMTEvLO/urews7m4uri6rq2/s7S4r7/BuKy9urSmorOrqKmzq66xo5zBtqaptrWqnrK7qaamqLCsmaKnnKSmlJihsqWZnqSpqZyioJOln6S5qKSnraaepaGok5+poaGgmZudoJKbnJegoqubm5mhlZKUlpqNk5Ojp6SPiIqOhXmEfISFfJyNiYqGeICDh4eHkYWVkpKMkJWUjY6Ue4OXjop3fntsdHJsbHNheHVoZ2lnZW6EZ2hoZGZoal9nYmlmWmV6Y2FSc1RbW1NMSUdJT1NAIStqXmpMQ1ZVXmBLSEdFQy46QjxGPDZLUEQ4OkQzNTc9PTg5NT86OzQ+OEBLPT45Myk4Pjw6OSo2QDMuRTQoKyw+MC1OPy4rLTcsMTE5NSwmLjUtODA1NzZgdEIzQ0RnW0tXR1VgaEIzNzhiTicynqSjko6kppyenp6ktaynqrq3qKzDwLewrKK0raevr7fAwL2xwbexrrG2tri3tayqvLOvsrG9wLeuu7uxpZ+2rKaltKmrrqCgw6upprCzq6y0up2oqqqxppidqp6npJGZpq2imZ2kqqGbop2XoJyntqWvqq6goZ2doZWgpp+hoJmbmpySmp6Vpp6to5iXnpWUjZSXjI+YmqefkYiKiod4hXeCgoKch4uCiXt+hIeGhJCElZWPj4+RkZGNknuDlY2Gc359Znhva2psZ3Vza2JnZGN0f2JkZWZlaWpjaHBZXlhdbGRhTWhXWmBWSUdIS01SWD85YGxpR0JVU1xbSEhGRUEuPD85QTg5UkZANzpCMDM3PTc2OTI6PDk3OjlETT1CPDAqPEA7QT0tNUIzNz0rKiwwQSpKSy4vKiszNzIyKDU3JCs3LjcyNjg1XHlOMj5IaVpMWkpWYmZBOjNAZEclNZukoJGMrqCZmKCWpbSxorG+t6Gxxru5sLGitqurrqm4vby7rcCyr66ttq+zuLOnq7mwrq60tru2r7i9rKaetaugobClq6+fpcOhs6Wvsa+3rbWdra+srqOZnKeqpZ+Vm6iln5mko6mcmp+clJudrLCluaetoqGamp6ZnqOapZ2WnpiblJqhkqiVrKmblJyckoyVmY6UlJiopo2NiomOe4J0goGKmIWHfImIhISJjIiShJSckpKPkJGWjpB/gI2Ngm+Bf2Z5bWhramdxcmtcaGRicn9gZGdqbWxnamhmbFxsbXVxYVRiaGNlWUlGTE1PWFFQVWFlgVRAVlNZVEZHRkVALzw9Nz82PEZOYTg6PzI0OUAzNzgyOD83PTg+RkpARDkyLT1BPUE9MDVAOUAxLSsuMzw7SzYvLissLTI0OjYjMyopNi41NTQ2NVp8XTE5S2pbTVtLWGRkQEExSWRCJzSTopuPjrGdm5Ohmqmyr5+4wLagtMG7vbmxpbavqa6lt7m3uKy7r62qq7eqtLitpbO1sa6psba2sbK1uqepn7apnp+qoqqtnKrBma6lr7C2taysnrGtr6qjm5yjrKiclZynpJ2aqaOllZqgnZGbo6uqqbqfpqSgmJqanqGPa6KVmJxxgpacpIB2kauonpaWoJGJl5mAl4ufj3iFk4yDbWl+d4NwbIaKhn2EioZvXWRgZ4SXhmuLkJSSdXeLhH6Dj39mh4BodWlmV1xpdG5OUGpkZnGCZl5kZm5saV5dX4mQhYdoT0tEOEVUZ15KR1BQVVVLR1Ngb3RlRVtRVVBGR0ZDPjE7PTY9NjwzZlw1Ojw3NTtENDg2MDpCNz86PkZMQ0IzNDM9QEBAPTI4QEU9MSwsMDg+RzcwMS4qLiovNjY4LCMxJzIxNDoyNzZYgWwxNk9rW05cS1tmYj5HMU9iPCsvjaSZh5Wxm5yToJuqraujvcWvqbfCuL29rae2sKarpLe0srOxua2qp6y0prC1o6e3trWop6y2s660rbOiqZ+0q56ipZynqJquvZWnpq+zt62tpKiuqqumoZ6coKinnJehpqacm6ennZKeoJmQnqeqo7Svo6KjnJaYmJejiKGPkpqHoYeUnqF/pX+nq56Tk5yTiIRyeIyOg4egdoiMaZeIZn1zeKBviIeDfox8f6Ggn5l/e4iedIiOdpuKbIeBg21oZWN6bHFiVIZtY21pmHFYanBuhldeaVtraluIcG15codph4RaXkZOPkZeTUZSVldRUVJXVGdeTFlLUlJQRUdHPjw0OT05PDc7MDw8Nzk5OjY9RjU4NjA8Qjs8OT1GUUc9LjU8O0A9QD41OUdBODIqLzE8STkvMDEuKi8oLTQ1ODMlJjIxMTU+MTw4WIN1MjVSa1tOXExcZ189SzFWYDcvKIyml4SdrJ2ZmZ2fq6qoqr/Dr7K5vLfAv6qkt7GqrKazta6vs7arqaWxraW1s5ystba0paeos7Gtsqivnqqhs6mfpKOaoqOdr7aVpKamtrymrKepqqynpqKgmaCnpJmZpqOkmZykqZaTopyUk6KlpqC2pKOgo5iVk5iUnIiukJiUiamLl6OchbGApK2elJqelXmC1Kh/h5TAm8d5eLGlt5dkgMCcv3mEhHmPg3yQkJHKcZa8nMV7cranupB7gWyXsauweGhrWLGub2VpvJK8bmh6bXGP2H5TamO2sn6AcZR1mqGqkFdPV2FPVk5GVFtYUVBTi1xXW1BAXEVRTkRGSTw8NTc9Ozo5Oi49Ozg3ODs5PkY2Ojc0PkA+Njk/RVJJOi41PjtCPD9BODpKPjUyKjIyQkUvLjMyLisvKS0vMTg2LSAvNDE2QTE9OleDdzIxVGtcT1tNXmdcPkwxW1w0MSGOpZOBp6qfl52dpa2yqbHCvbK1v7W3vsKrprStramor7Sqr7azqKemtaWnuK6csrG1qqWkp7KurbGmqp6npLKkoaGfl5ygoLCtlZ6jn7S5oqmooa2upKKem5qiqaCYm6ihn5iep6eRnKeblJ2hpqKgsKOen6OWlpKYkpmFsGtqio2qfmeEloetZXGenZWappVxrqGkfne6fGuhj3axX2q0W6WAZZyRYGaBemZ/anhqqWW+cmemjHaxanyxeHSSk2NtbadtW4SgRWlnh5ZFdZxgfWZ7o6eCWV+Lq2mAlHh6aqc3Sq9bV1RsY1pLT1dfXFdWO06IT1dWL0lUU0pDRUY9PzQ2Pzs4OjkwPTg5OTk6PTxEODs6Nj1BQDY8QEhRRzkwNzxBQz5ARDhARz0xMy0zM0UzLi41My8rLyguMC46Ni8nJDIwM0IvPTtVgnYyLVZqXE9ZTF9nWTpNNV9ZMzEbkqGVgqynpZ+jpKqxt620vb6wt8WyuLrCp6iwrK+pqbGupLC6r6SkrrOjqbmpnrOzsKOloKqtsKyvpqifo6KxnKOcmJWYnJ2up5eboZ+0sqGqm6GtraCempegoqqdmZ6koZyaoaekkJ2jmpegn6ufpaagmp+hlZWRlpGahbWbtXiFqZm1mXeHs5u3f5OWl6mVfmuBpnqBhYeSlJJ3q2dqsVuse46HlHSIcI6GgH+IkJd4g4KLl4yDoI+FsHZ3n3Framx8i06kWEhjY5l+Y2imYHlydVKThl5QqW1jcX2GgGKdLlGibltUa2dgTEtcZFhcWkI+sHhXWEEjTWhGQ0RBQEExOT44ODo4NDs6OTw5OkE6RTo6OzY6Q0I4PT9LTkg6NTpBRkJAQUQ8RkQ7MDIwMTtGLDAuODQwLC4oLzMsPjgzMR8vMi1EMTw8U31uMytYalxPWE1fZlc3SjlhVTUwHJaflIizpqairqmns6yqu7bCsLzCrbi3waqsra6vpq6yqaGvu6qhp7Wto6u1pKazs6ejoZ2nqrKosKilnqCfsJegmpWVl5mfrqOamqSotK6hqY+pqKmbnpWYoKWpmp+do5+coKKlo5WbnpianaKqnKWam5uioJaTkZOTnYPVk5m5cLDCfsaGfNaUm7t8mpalkI2bjKR6jYaigaWCeqx5j51Vr3uJfp9quVq5d4aDfaaCk3yYeqp5jZ2Pe7FtjoR0kLuFb5RPr6fFilGgemNgqmJzcoZsl4dfU7W0yIaAiXxjpDNCnXZdUWloZFBAWGZaZGFKSE1sS1pTT1lmWkNDP0U/MDw8NTk7NzQ8Ozg9OjxDOkY6Oz42OkBDOzZAT0xIPDk7REhDQkNEPEVGODEyMTFEQi4vMDQ4MystKS4zMjM5NzEjJTUqPjM9PVF3ajYqWWlbS1xQX2ZUN0c6YVA3MiWcoZOYsaiopbOqpbSopby3wbC6wLG1tbyztqexsaOxs6afr7aom6i6rqKvsaCztLCgo56ep6mwqbSppZydnquYmZiXl5aXoquempeorbCoo5+OrKKnlp6XnKGmopiioaKhmqKip5ueoJ6VmZqmoJynlZubn6CYkJKVkZ2Ism5otXGriHCOpnK0c3K2e5qYpI2Pm42ifo+fpH6wdoOR0tF1W658hX+kb5uqpmuGhX2tfZeZj3uxc5OdjnizZZZ0hZ5unmaUUsiLWsJcn3liX61gdnOGYpeIXlnKnW+/gXVNS7VTVcZkVFFqY2VYQU9qX2xpUFVGSTk9V1JbV1hIQz9KPDI/OzU9PDQ2Pjs3Pjw9QztHOTtANzs+RDsuQ1JKRz4/PElKRkNFRD5JSToxNzQ2QD4vLjI0MjUyLSkuMjYsNzQyJh82MDs1Oj1QcWg5J1dpXEJOVF9lUDVHPWFNNjIuop2RpK+spKq7raa0pai2u7yyu7+3trS7u7OltLSisrKjoKyvpJimuq6ksbCctLipoKWdoaqlsaisqqWanZqpn5aVmJmTk6OpoJeTpquwpaKWkqyfpZKUoZykp6CVm6anopqjn62aoJ6ekJabop6cpZSclZminpWYlpKbhax7d6h2o4+Lh6lvrYqDqIOZmaKKkpmLon6Sl4euhX+Cs1xys1KufYKCpH9x1313hH6PnYaZmnevhoqRnId3tGGaZZqCgZVsklqwWEuadZh5ZmCtXnd3h2eYiGpdr3eVno94bDV5yK6yX0JUb11oYEVPa19xbVZVTS9lY2lTWVE7QURATDo1PzkxPjwxNj85OEA9OkM6Rzs8Pzo+PkU5LUVVSkVAQzpNS0pCSEc+R0s5Njw0Njo+LzA0MzMzLjIuLjE4Ki4zMiUhMDM3Njc9UGtlPiZWZ1xAPVZfY042R0NgSTo3N5+dlKC4sJizwa2osqeqsrq4tLi/uriztr21pbi0oLWtn6Cpq5+Vp7asqLCxq620pJupn5+oobWnpqqjmZ6VpaKUlJyZk5ajppuTkKesr6WhlZipn6KPkaKaqaahlZqmqZ6dpJ6snaCdoI2UnpueoJiYm5WXoaCUmJGnnYapfX2leaGPkIOqcK2MgqeGlqChipeXiKOBkIeUqnyAi515b7FaqIOCiKB5dNh/dod0p4GOm42SpHyWkJ+Ee7JenGSgfYKUbJJcq1tak3+Rf2hnqmNye4FrmIdxXaxaiaCOa25lT0pDoVxaTXRdY2ZNWmFfc3RfSlU1SpqSWUhFPUhGQUwzNUE4Ljs+MDVBNzhAPDY9PEY/Ojw2Pz1CNy5IVkpFQEg2S0lOQElLQEVOOjpANC47PjAwMjE1NCsqMDUvNywmMjEoJCQ2NjcxPFBlZUEmVWZbPzFVX2JMN0ZJX0MxPTehnJmZvqyYtMKuq62pprSwuLG1v7q6s7G3vKm7taCxpZ6lp6eek6qxqa+qtayqrqGYoaCmpKS5oqOroZebkaKglZSem5SZoKCQjYypsK+mnZeap6afjZKkmKirqJSXqqifn6CjraOgnaGNlKGYn6CSnJeclZ2hlZePq5uPrm1ytHSpjHeKpnO0eXSzgJKko5KcjImkh451uG+Me4uia2u2WqGGZZeXaaCip22UcrR0k5h/smqGkoita3WzYZ1mom6GkmqXXK1gTaF8h5FSc6NseX9+bpiGb1yvVjycd2ZUb24uW6dPYlJrZWJsWmJcYHF8Y1NZUD4+bW8zQkJAP0w5ITdANi47QDM3QzU4Pz8zOzxDREJKRk1JRjYySlRLRUJKNklKUD9IT0NGUD08RTUwOzwwMDAvNzUsKyw0MjYvIzAwLCwdMjg5LzlOYGVEJ1VkWT4vVV9hTDVGTV45MUE4pZqbnbuinLLArq2rq6e3qbivtcC1vLGvubirwbeqq6Gcp6SinZKrqqe1o7Korqqhl5yooKSruZ2jrZyWmY+lo5aNnaGbmZ2fkZOVq7avp5mUm6ypl4yTppqlraSSl6uzpKCeqKuwmaGij5iil6CblpuXoZOcqZyUkauZh9SSmrt0scSAw4Z91ZacuHiIkZeMl4mMp4d5orZ1fXd2woKasmCDunnAfHW4YrWBjIepfZaBrKlxe391vIinoGmdYaaOr6F+jHSHq32+bnO8dLKDdXiAim2aiHBtjaR0vV13fVthebxqWlZbaXleaWBkZmJteG9ZW1lDQUByP0NGKzVIIic7PzEwPD83OkI5OT1DNDxATlpeYGBfX19aUFBSS0VGSjRITFJASk5FRk9CPEU4ND05MDIwLjg3LSouLzE4MCItMSwzHiw8OjA4TFhhRidUY1g8L1ReYEs1O0xbLTZAOaaZnqK8opexwrCtqaqssae4r7bEsbqyrruwrsGyrKWjnqShnJuQqqSqsqS1p62kn5aaqpmmrLmdo66ZlaGQpqCTjZyjnpiempCWkq+5sKuVl6Onp5SRlqWdpK2ekaGoq6Ccn6mksp6ipI6moZShmZyXlqSYj7CgkpWqnoWQmbWAkZGNuJV4gpObtXdubG5zbnmPhI6Jcp7Bu7yZeoGyqHCAdJG5g3yGhouHjXuKho2XfKS7ub2cdXmzo3R2l3V0sHWYnmaGaY22dHJwd7aMXn95fYlng3lteWKLrHB1hX9YW6dqRGRaVGZfY11iUGdmcW11Qk1QTEQ7Wkw/SjM8MCA4PjsuMz1BOTk/PTs8QzZCVFlaWltbWlteYGJgXVNHR0g0RElUQktOR0VPRj9HPDc/NzA3MC85Oi4sLy0qOC8lJjIoNCQoPjcvN0tUX0cnU2JXOCpPXV09KztWVic9OjymnaChv6WWs8K0rKqnrKupu66wxq+1tK+4p7W4raqjoqafoJ2Zk6ylraqmtaion5uWoKOerKS+pqGqmJWckaKbko+hqKGTnpeSmJSytbatmJ2kpKKLkpKmnKWrnJappaadm6Kpp6ajqKCRrJ6Xo56Xl5idno+wqZScp6KOan5pnKd4iXN+mo51emWHe72+wLpukYJxlIVfcmpaXZqJYWSHjpVrYH+VY22bdmKUa3+alZRlXmBjcZuJaHKMfYaUZmp+cXN5fXxiW3d0gWhQXG6DfHuKalhseYJySUpvhXBNdE1FV1xmYUxbV2ZjXk9abXZqclJPREVOO0hJPE0/MiwyQT84LzU/Qzw5O0A7PUM+UlZWV1laW1tcXWBhYWFgXFVHNURGVUVKT0hGUElJSDs4PTUxOi4wOzouMC03Nj01JiIvKjIsJTs4LTdJUl9JJ1NfVjQpUF5MKDM+W08nPzI+qJ+oocGjmrS6tqOspa6nqLWyrMissLOstaO+sbKmoKOpnaObmpmsp66kpbWqpJuYlaKbpq2pv6ipppaUm5WgmpOYpamokZ6Qj5icsLK/rJunnaehiZORqpuopJybrKCjmpujp6yin6qhma+alaaflpSdn52XsKWZoqiZnJGenKOkmaejmpyampqQloJobnxxdpCXlJGEirSpjYWYlY6KjJiXh5OVioOSkpCJjZGUmZOYl5qgoZqblKCdjoJ6pIVsaXyQfIB0iYqBcYJ4eXZ2ioB7iWpzgXSDdWR3fXZrcHptYGNbb2hNWFhlal9XWXB6b25mU09GUzlPWk5STygrO0pCNjM1PUBBOTpDPjxFTlNTVFZXWFpaXF1gYmJhX15eW1RLQ1NHS05ER1BMT0k8OjszODksMjs4MjApNklSTzgiKSsvMiM0Oyo3Rk9bSidSXlQxMFReOis9OF1LLDwtQLKgs6G/oqSxsbegqaWzp6WwtarJq62xprWmwKi0oZ6lpZyklpWgq6eso6O3rKCZlpagl62qpsGfrKSWkpyXnpiTlKKenqOnkpGZqKeyw6+Zq52rno+Wlqmeq5yeoK2YoZudoqWvpqGkp56smJemnZmaoZ6enLCgnaKnlpiTmZSgopajn5egjpaUi4qNjpatj3uUm4KRgYqpqIWAmJaKhI6fiHuDkIaFmZCHhomVjpuXjZCYnqOWmZKQnY1+jWWhs66EiYR2eo+KfXZ5em9neZCBgIlrdYF5iHJodH96doOIgmt0Y3hmX2hkY2Rmalhre3FqalxSTFBEX1VGQD8+LDRARjs0NTs+QTs8Pz4+SE5OT1BTVVZWWFpcX2FjYV9eXV1eXVhWSktMQklPTVJKOzw6Nzg2LzI5NjQuKCYkLTEuLikrKjclKzwoNkNNTEQvVFxRMDVNWzE3RTRcRzU8LEC0oLmvvq2rrbGyoKqmsq2irLOwxbCqrKOyr7yktJygp6KhnZmXqKappqSls7WelZSemZmvpq6+oKujkZGempmUkZWhnJepnYWeqayis8ezn6mkqpaWmJqnnqmcoKSrlJ6fnqCqrqmloqqhrJufoKCYpZ6cnpyvpJmfqJOYl52SpZqYqZ6al2aDknxlfo6aj2N4jGxoanqQo6trZJmYfmeFimVlaWh6jaGOa2eMl5Gid2tqi5iin5hzbG56hI2FeVhlXYWBXmuKioF2W2hzd3eRgIeCbniCeIBzbXmEdHeIiY+De2iEWF1qc2Rdc4hpanxxbGNdUU5XSWRYQEozPUY3P0ZENzE8PT9BQzs7REdISElMTlBSUlRXW15gYWFgXV1dXV5fXVpVT0RIT0tTTj0+PT02NTM1NTU0KiYmJSwqJS4rKyc2KiQ7Jy9BSVtJLjZaTzYpRVkvRE8xWUM7Py49pZ+6vLmvq7Owq6Wora6wp66usL2xqaikrbCwn62XoKSeoZqZpqucrKOmqKmzrp6Vo5Cir6a2uaWuo4+OmqGZk5KaoJmZppZ7payiqLPDuKWip6+fnpWeo5+knKSqqJKeoZ6gqq+pqqKpn6ebpp+noKyVoZulsKSYnKuWoZ6bk6WYnquZnn6+g4hytHKFnYataHe5xLhxkqGje6aYmXOqgnzLwMC7cYqih4OefJWYiJ7AvYKWnZ2NnMHBe4F6kYyawr99a6Wxb4yBb8p6f5t4kYOOgHZ5gX95cXp/h3B4hYyTeWx1kWJlXnhkX2WBYl50aG1kYlhMVklRWkhPRDJJRT9EQj4vPD8+QEE6OERDQkNFSElLTU5QU1ZZXl9fYF9eXl5eX19fXVxTTVBHVU5BPz89NjQ2ODI3NiomJSMpKiYuKyopMTAfOSojPkhbTCojQ1AvI0ZbM1BZL1VBQjsvOJajuMO0sK+/qamUo6+psK+tprK2r6qmpqaxq6CrmJuioJybqqeinauipamlpLSknaOTpq6suLSnr6KSkZmdpZKRn6GYm6Cdh6arpKutv8CxoaquqpeSn52imaKkqqOToKGenayuqaulo6KloKSlnK2pkaSbqK6qnJ2qnKyilpellqGjmJx/zpR5eqWBeZWWm1+tj12Op4ChoHynlZt0q4KAr15kjKl6p4eFn3SXkoizY4KrhqCNjbJqhK50fJaHuGGCrVmjzW6PdXvbe3+ZcX6IknV/ZXuIdnZrfYhufoWQkn5sgI1fcGpvZmBfeGRbcWhqY2ZgUlRSV11KT0M1QUhFRDg+NjtAP0E7PThAPj8/QkRERklKTE5QUk9TXF5fX15dXV9gYF9fXVpXT1VKPT8+PDU1NzgxNjQoJyQhJywmJi8oJiszHTYwJDc7U0wrLC1KMCc7XDpMLSFQQEY0LjGtwsDAtbSwt5iekaSqqa20q6ayra2spKymsKqgp5uappicorCfoJ+op6OmoZ+wrJuelqaurbGrqKyglJKbn6WTj56ll52oo56upKuwqL/Gs6ipsa6Wk52dopegqaqflaGenZ2ur6eqqJumpqOgqpKss5amoqqqnqOnpqGwoZKap5qhm5SUkZegcIWMl3WEqIdxsHydcqx+oZ+BpY+ed6uCfa1/nHKtfquHhp92mJJ6fJd+qoihi5GLnH6re4iSjqCAeq1WnMR6j2+SwX2BlW11cIxtZnZlhm9hd25yboiKkY+DbZCOZG5zdW9gZm1kX25paW5mY1dTXGBaUlJDOElJQEQ8PjxARkRDRUE9PDw8PkBAQUJFRkdFQENJU1dZWlxdXl5cXl9hX15eXVtaUkM+OzkxNDc4NDUyJiMfHCAxJyAxJx8nNB41LSY3PVdKLTwnPTEpM1ZARiEcRztDMS0rr9TGx7K0n52jjqOjoq2utq+psaepqqiuq6unoqOdmaKVn6arn6Kln6ioop+esK2Ym5aop6+tqKepnpeVmqSikpShrZudp6OurKOstam5zbKtpq6sl5WcnaKZn66snZahmZ6fqbGpqaiaqqijoaubr7GiqKuuppmmq6qqsaOTl6OlmpSShaRqpHWJeql0erJxgqWJmIxwh6Cah6RfYFKrhH+ugpt1roGmhoafepiWhXtmgKOJpJiGgaN9qX6AlIauXnyoVZ2ikoF6o5+Ae8OvxYxzr7OzuXFiqa/CdWiMi5ePgWyZkW5teHd3bmxmZWRxcGZ7aWNdVl9pWFhUTExRTENDQUI7Q0BAQkk8PTo5Ojw9Pj4/QT04NjtETFBSVFZYW15eXVxeYGFgX15dXF1bU0lCNjc5OTY2NCwmJCIgKCciKy0iJC4hMy0mQERXSCxHKzU2KjFQS0wjIEE5RDQsJ8LJ1dbAoZmrqKGvop+wtbCvqa2jqKeqq6uppKagm6WfnaWnpqScrJqiq6Gkn6+jnpuTqqS2sK6gqZudl5WnpJGboaifoKacsKajqLGstsiytaqsqpWSnZ2imZ+ls52aoZScn6arq6KtmauooaGporKtoqqysqGbqqivr7ajk5akp5ibkXyqbJ6Eh3WreXywboKki4iflpWelYHSt7S4yYCBsl5flKmDpIiHoHqYlZl4qslzmaOUp6mQkpuMfpqJmsbGd2WhgqVzgqCOgn2vXm+1Y7F1S6OGbadHgpNjjo+dkntwlpF9b3p0fHptXGZqcnFmgWleYVhjbVxeWUlNTUtFREFCPkE8Qj9KOzc5Nzk5Ojs7OzMuNjxBRklMTU9RU1daW1tbXV5fXl9fXlxcXFxcWE1CNzU3ODUvKSglJiUkJiksNUZOUFBNRkxKVkYqTDAvPi00T1RRHRw7PEYyLCSopMHGua2osq6spaKdsrmsqqGmm6imq6ypp6CmpZiqo5+uq52moKyan6mlnae1n6KXk6irtrKsm6acoJWQpq2RmZyno6Cqp66ho6epr7TCsrOqraiUiZedpZuio6+ll6GVmZylpauarpysp6Weq6O3rKCxuLCdm6+ns7SzpZWYqKSboI6CnU54moF/n3qEo3yCpISGpp6cnpOEuHt8ebmCfszFwrZ4mqCQi59+mpaXinWel4qkmKOofrCFm4SehKx9mZRhpWyjcI+FkIF9l4NyrGCkc3GAmmC8fVJVdI6Ro5Z7fZGQiHN6coR+cFtsbndyaoFuWmNfaG5iZF1LTFFUQUhIRkk6OUs+QjEwODg1Njg3Ny0qNT09P0JER0lMTlBUVlhZWltcX19eXV9fXFpaWllVU09IQDc3Mi4sKi4rKicmP1FUVldXV1lYWFdVT1VGPEUyOlBbVBwbNj9ILC0gjIeZqaykq7mrr6CboayztKafoJWlr66uqaadpqaao6ehsq6hqaayoJmopJSitaKjlZehqbW5pJujnaOTkKKxmZ6cp6Whoq+tnaSoorWxw7Gtqq2qkYaRnKedo6SdpZeemJmZpaOoma2hrKSll66lu6yht7eunZ62s7mxs6eZnrCipJ6Gj9G1w7d5h46FkZOPgKZ4lKJ3jKCShKWCi3GrhoS0bnJpmaOclYmffJiZhoePcq6CpZuijaaLk5yIk5CabXCyXKVzk3qcbJl/e5l9bqlhonFxf59ic7K4aHePk6WYfYuLkYp3fHiNgWxod2l4c25/dFxkZG1tZWhgSlpXWDxHR0BUM0BGPjwqKDYzLjAxMykmNDo7PD0+QENFSUtOUFJUVldXWV1fX15eX19dWltaWFVSUlFGOjIyMzAvKysoQFFSVFVUU1RWV1dYWFdVVVZUUU9RW1UlITJBSCQpJZJzjIquv7+8u7Wel6ikrbaho5mVo6mnrqmrmaWhn6WgoLWnoqmnsKOUq6OOpK2jnZCamqq0tKSdppypkpSXrqCgnqaknaectZqgqqO1q8Kwqaupoo2Ej5yioaajlpmanJibmKWkppiqpqyhpJuspr2slL2wrZ+jsLO6rLSnm6mypaiYeqiQfXywd4qBpKWInG2yb6CHrXyhj4OolpmArIiEroWflKigopaFn4CZlYB7kn2rgJ2aloqqeJ2fjoiTkoB5r12jgXymp2SdgHyXdGuuXaVrcYWZXWBbjKBtlJCmmYKTi5WKeXmCln9qbH5ifXRuf3lfZmVxbmdnaENZYFs9SlQyVDhCQkM3JCQzKycnMywgLzY2NzQzNjpAQ0ZJS01OUVNTU1ZaXV9hYGFhYV5dW1pYU1BPTkk3MDUyLiosQVRWVlZUVFVVVVVUVFVUU1NWV1dYVlVVUUhGSUojKCi8kpqEqcbDtsG0n5utoK64paSOm6SjoK+uqZ+jnp2tmJ65oKKroK+qmq2hkKqppJaJmpCusaymn6ibrZiYj62ioZ6loZqlnK2Yn6imtqi/r6WppJ+MgI6bm6CmnpKUmZqUmpqko6OZp6qroqOeqai+pJfDrKqjoquzuqyvp6G0sKmrmXavfpCKnIWHfLqtiZhksIxlla19oI+Dp5aagayKhLCFpZmkoaKQhKBbbGqBs2B/rXt7goGxbGdumZeLiLFbfbRbpINryKJln4F7vFl2tVqyfVKvgHqsWIChbZeOqJqJlo+UlXl3jZt9Y3J9YYN4c398YGlmcG1mZWVPVWNcQVRePUkoPjk9NCEiLCUfMi4gKjEvMDQ1Nzk6PEFDRkhKTE5QUFJUV1peYGBgYGJeX1xbWFVQTUpHQzU1My4vQFVZWFdYV1hYV1dYV1ZXV1dXWFdXWFlaWltcWFdXR0I70p+zsre9u7TBs6Ocraaltqmhi5mgn52zsqieop+dtJigs6iqq56wrZ2sm5SuqaKOiJuOr62opqOoma6Tmo+pmqGepZ+Zo6OlmZ6iqbKou6+lqJ6dj3yLmpahoJqQkZqbkZmXp56gmKespqSkoqSpu56gxqelqaKrtLatrqegva6trZaBqZKjro6bgIakl5iPgYC4w7qDjpyThKeXnIKsioKviKabmqWqkX7VvcKqYqO/vXx+o4KD17q4tYWTkoKevb6EaqOBb6uEbpx/erKxx4Nqq7C9rXh3or67dICVjaabjpmPlZt4gI+ZeWJ8emOMZ3iBe2BrZWtqYlBiW1NpXEBUYUJNKTw6NC8eHyQeJTIgHSQoMDQ5NjY3ODs+QUNGR0pLTU5OUVRXXWFcX19hXmBbXFlUUU1JQz48QT81PVNZWVhZWVpZWlpZWFdXWFlaWllZWFlbW11dXFpWWFRXWryVtLSxv7myvbOina6mprOmnoyYpb+qt7CnoL+mprGbnrGcuaiera6lp5SUr6yXjIOaka+mo6yhpZyqoJiLo5KmnqecmqGoopmeoKutqbmuqKSbl5N7h5mRppuTj5GYmI+Yk6iZn5eoqJ+ppqGiqrueqcWjoK+jq7O1q7CqobyosLCadHWqpLeFZYmfb2esj4qPbW93pJCZn4F1r5mVcJCMcZWno5uYrqRybW1tZYp3bm2CmXGAeWlwaWeJlZWXcWhphYZncIZkXoljanBZXWd+d6ZgYnGOkm9mZICNko6il5aXj5Sde4aNk3RlhndojGp4fnhkbGNmbGJLZFhKa1k6UGVFUSdLOSsjHCAbIywpGBsYLTIuNTo0NTc6PD9BQkRFSEtMTU9RU1ZcV1pcYF9hXV1bVFBMSEQ9OkFCN01YWVpZWVpZWFhZWFdXVldZXV5eXVxcXF1eXV5dW1tVV16olK2zqbq5srOqqaKun6SzqpiSvbHDyL21qZ7Aq6yjoKarn7qjpK2srKWNlq2qj4yFlZetn6Wqop+kpKCRjKWTp5momZajqqCWnKWmp6+5q6yam5OSe4SXjaaXjZGQmJSNl5WnlJ6Xp6Kar6adoqy5n7DBqKSzpqyxsauurKi5pK+4loqhqKW2nImWoZeGqZqQlJ2TqrOZm6OsobOXoqCeoKKcoKShlaumjJKTjIeSnJyUkJmTmJCOlYWApJqXlY2Lk5KKj4aEfWeLgHSDdnSHjHGnbXyVkZSTgYGPj4+OnZOglZaVn4GGk4twZ452b4p3dnx5aWtkZG9jVWBZQGlaR2JgTlkqRT0rJiI3NDAuHxwhJTIoKjc5OTQ2OTs+P0FCREZKS0tNUFBRV1VWWV5fYWNdXlVRSkVDPjk9QEFTWFtcWVdYWFhYWFlYWFpbW1xeX19gXl5eX19gYGBfWVlgpZapqqS1uK6uorCkraChtrGQjqvEu8S6t6qhpZ2bpp2wqKO2p52ptKankZeso4uIiY+cp5aspKGap56fk5Wjl6maqJmUp6GkkJqnmaG1uqirmJqQjHuBlIyhlIqUkZWQj5OXpY+emaiem7Wjnaart6iuwq6jt6avr7Ctqqq0uqKvvZmSpqOmtaKRnaaejamfjZKfo6yvmqGjsamwmKShnKSqnp2dnJernJKZoZuTkJaqmY2YmJaQlp6RiKCdlJSFkoyQjJSLgH5mjId1h3Z5iINznGqHkZSUkYp9jJaSkpiSoJGblZ+ChpeFeHGUcniJf3F7fmluZF9waWBbX1ltYlBgZFBaOkdGRT0zPT03LiomKykmHSY0MDY2NTg6PT0/QUFDSEpHSktMTVNTU1VaYGBpYGVWUEpBQ0I7OUVNVlteXltaXFtbW1xdXV9eXV5fYGFhYmFhYWBiYmJkYlxbY5iVpKejsLOsrqOpp62gqLWqkZCco7K6rquroaKZep2isKSlsamWm7imo5SZqZyOhoqJm6KQrp6klqigoZKXmZyui6qWj6iZqIyYqI+eubakpZibjYh5gZOMm5OKlZGUkI2RlqGMnZ2nnZ64o3+Dr7WisK90pL6jsqB4eqCrs7yVdq6kn4qAqn5kW2F2n46knYOXfm6Ts5yjqK6ro2WeoJNzeZmWcICYqJdsf6KniWWcpZuQl5iWi5GbkIWdmpCUgpKHjo6SiYV3a4+HdodxfIaBgGFpiIuVk4tbdpWRZ2iPjXF6o5eWZHiYhoB2l2iDiYJueH5qcGVfdW9ra2hcZWNiYm9SWz5NTk5SRz1AVEI5MS4eHyY0OjMxNjY3ODw7PkBBQkZIQkdGSUtMVFVVWVxfaGZnV1FKPERHPDlWUltgYWJgXmBfYGFhX1xdX19fYWFiY2RhYmFhZWRjaGReXWaclqajobCxrKuppamto6etpZKWqrSusaWZqaarlnOLnK+fqKunk5a4n6CPnKOdkX6IiJqejauapJWnop6Ol5KehXWukImmmqiRl6OIm7q0qKCZmIuJdXaTjpaTipORkJSMj5KfjZqfppibspaAjJu1nbSMko+9p6F+p6J6o6+4gY6Op5+Ei4WPsKmvjImWopl5gYushpydoqiqqIiVhph3pZt6h5uBl6aCgXucsXqKhZ+XmZSYloGQlpaEmZpieYeQhI2PkouDbnGPiHqBcYCBhn+GdIeFlpJ4lmiTdKCadHyZg56bhZh+kYmBgpdpjYyEa3h6cHBnZHdtaWxqW2RqaWVyW15IU0xRQEU1LVlUVDYpITA5PT42NDM1Njg7Oj0+Pj9ESUBJRUpLR1JYWlhbYWFoZllRSDlESzw+YlZeYmRlZGBhYWBiYl9dYGFhYmJiY2ZnY2JhYGVkY2djYWFonZijn6aurquorKCosKenqqWZlK3GvLChlaWotJ2Pg5yrm6eioI2Qvp6ZjZ+aoJB9hY6Zl4irnaOWoKGSjZOJhoCRqI6Hopyjk5eehp+5sqedmpOPhXB1kIqVkIqUj4+bi4+RnpGWn6OVnayIn7SJtJqui8qIq66Jt4WNsIOxr4SpjaeYjZ18qI9ye3ebjqaWaJWkebSLn56nqZKZwoF/q4iYoXGegJqkfZeFlbGBoXygk5+PmJeAjpObiZiSi3yFk4aNlZOJg21zkYWAe3KGgYV9hXSFgpeBj8VmgKmHj6JqnoKfmIGZgIqLg4iYb42ShGd3dHt2Z2h1cGZna15ibmxmbFhmRlxQTDJFNDZNYGM2JjQ8REdEOjYzNjU4Ozg+PT0+Qkw/TklKS0NQWl1cV2JeamxcUUU9S01ASmRYXWNmaGdiYmJiY2NgX2JhYmNjY2RpaWNiYmJlY2FmY2JiaZWXop+wqKmopaugpLixqqummpSfoqSqopWjqbair3+gppylnp2JlL2Zk42gkZ2QeYOWlpGHq5mcm5qhhY+Md5ucj6CRiJ6km5WZmIaiuK2lmZuNjX9ibZCLk5CNj4yMl4uQkZ6Ok5+gmKGofqGnh62doJauj5+dnZGGgaCNq6+HpI2qmoyafqJ1gJiTa4GrdE2reIeNnZGbqaiCqqt9g6F7eqdpnn+Sa2eXhpe2iJ59bWBjWIOXf4x7ZGeLc5l9eZZrXXyXbl9TcYVcYGx5g2BZZYJ9hIGYcaeqa4OjbnKlcJ+DnWdkn2xabIh6ZVlfgn5hV1BvdmVtdHFqam9eam9sa2hXaE5dV0U5QTRHQ15rNCtJQ1FNTj04NDg1OTs2QDs7PkJPPlFSTE1CSlxdX1deX2J2YE1EOk1PTVRiXFtmZmlpYmJkYWRkYmFiYGJkY2FiaWtkYmRkZ2RiZ2VhY2iYlp2guaGqo6askqG2vKuuopmXn6GlrKyfnK20oqeRoJ+fppyZjpi0mZCLnoyVi3WBlJGNiqaWlpienn+ThYaspIeckYqYqZiZmpKHpbCmopWZiImAaW6Ih4uOjomLjZKLkJGhjJOen5uipX+TgY+joZSgd5yWkKeDoaeAhqquhaV5i32Emn2icHKSh5Z7nox5bYebjJmQm6mbj4edfIKic3amZp5+d6RfmHp8knOibpi3tLp0koeBgLaoZIHGuHtwlbaMcYCbpGN0rKtgfWqds35ufYeDjoKLl3GAo2xzpHOeg36jXp2Zs5Zve5ees3RyW56ygmlib3N1cWhvWWtscnJlXGhdYktEPUQ1UUFZcTI8UkZfSlM9PDM5NTo6NkQ7O0BJUD9UTU5RQEVfXltaWGBgfGRJQzhMV1VWYmFaZWZra2JiZWFkY2BhYmBjY19gY2tuY2NkZGhkYmdmY2holJaVo7mZrJyToI6luLWuraCaopyjo6Ssm5qxrKuSl6CYoKSampSeq5uLiJJ4i4VwgJaNio+gkJOUnZd9kYmOqKGHmI+KkqOTm5qMi6inpJ6PloeEfmt7hn59j42Di5CQiY+Tn4KWnKCdoJ+LiXecmKKMoHKii4ipiJynkZeorH+ujH16oJl5o5N4gHOXiIycfZafhpuNmZumhqNkoXyJlpCbjWyeaJqNbpqZen+Kp31yZ3Oqg52Cc6pnlJpdm4V2hJ1oqmqBuGZcqXCBnGGVjF6ndnWJin+eaJp1h5OSmI5/nm6ZkGummVyofne7an2pWo6EXbNnXG1xeHdraVtwaXh4Yl5lV2JBUERPN1ZCUm00SlpaX05aREAxNTE7OzdIPzpDSFU/WFJZXT5EYl1WYFFhZH1pRUI5TlteWWRmWGZnbm1iYmVfYWFfX2BgZWNeYmRvcV9kZWVrZGNpaGdraZWciaq2m6iJY5WcrLqysKydppubp5+drZqdsKernZeimaGfmZaWoKOZhomNaYiAcXuXiIuWloSSlZiPeoqElqOdiZWPhoudkZybiY+ooqCai5GKgIBpgYZ4f5aMe4iNjoeOlZp+k6GeoKKTmHJon4qgj4xwkoyCqYiZn6Opoah9sK2koriXdqOzoqN/iJR4nXqrmn6ijp2bl4iXcqF8hY2vtX1rmpGheH6YtKOjq6iEmHuafJyZfnOqWl1ve5eLeJ5iTH97e4VjephCTZ9ZompyfI5tgYmEmXWbeYeJsbN/f5qSpnR/nW1xfJRvmXJpo12VdkhlY2BzcHx9bmVga2h2e2JjYFFeVlxUVkBZRVFnRFJXW2JYX0lEPUI4QEI6SUU4TEVYQVZRW1ZERmFcWmBLYG1+ckVDPFVeYlplalZnaGxuYmZmXmFhXF1eYGhiX2VjdmxeZWdmbGRlbGhoa2mTnYGxrpmEU16hp7S6s7OpmqKLm6mcm6iSoaujoKeOnp2cmpmVmKGdloeHiXeFgW55lYWQmot9kZOWiHKAiZKgnHKRkIGImJSfmoSOqJyalYqLinyEbISFcYGhjHiFjYiHkpiUfJKjoJ6jiK6GfbWEj56de6aWeqmClp2Qi6Gefadod21+mXOgc3F8nYWYb5OCrn2jg6aemoGjcF6pZ3WjY2+lYZzTj3x6mXhyc2OihY9+onKijnVrj7OLYIKYinOqsqe8f3eDbX+/pqq0XptvfnGXb4FzonJdo2d0pmFopm2b05h6gptud3mXa5t6dpdybKmlZ19keXB+hGtnZmNtdndmX2FSW2VRUWFJV0lUX1dTW2VqW2VRRUNLTEpLQkpEOFBAUU5XU1hPUlFgZWVpUmR4eXdJRkVjXWVaaGpTaWhqb2NqZ2BiX1xdXV9oYmFoZXtkXmRnZGtkamxmaGxomJt/sKxUXEt+qa+ytbCzo5yYhZimoKCijaSon5eoiZmXmJOZk5Kgl42IhXtwfYRofY+Dk5qBeJGNjolwf4aPkpJsl5N8iZGSo5WDjqqalJKKhYl5hHaHgG6Bn4Z3gJKGiJmhlnmToqOaoImzoaK2i3qsp6SupXCpgJqQhYGckn2kgKKZhphxnoSirK6Jl4uAjKSNloOuopR2tba1yaF0lIqAn2Gel6lteJaGn5p1oYd3oH2QloqBb0xmopJwmohzpHt5dGGDgmx+oGxyZGCccn90l2l7abO1tMamc5h+e51qm5qrdIKabXN3l2maeXSYcVBFfLNeanVqeIdmamdidHRwbVVdU1loUFJoSVVMWFJWXWdrblZnV01KQUpNSkhKTkFRSlBlY2ltZXRyc354e251iXt7VFFPbF5oW2tpUmpoaWxnbGZjZV9cXFxeaWJkaGt7X11kZ2NqZm5tZWlsZaKcia+nhWY/lKGzq6+vtaKikICXqKKho4ukpp2cpYGal5aNl5CQm5KNiIN5anmGZYOMfpageXWPiIyBaYSFkoOMhZ2NeoyKlaWSgpepl4yRi4CJeoB9i3lwkKGGeYCUh4mWn5R/lKWnnJaWhGdueJxsomR8caV3nJhwZ6eBl4x7pXqgloOWcp92gImUlo+5bpCKomJ9maKViG5yaaprdaBsbqZgm2mLkGiWh5qVdaKAfZpfi4WMdW+IYmihZZ5/aZt1cGRmiIJucqJaX1tkoW5eiYxve39zcmSlbniiZGenaJhyi5huoW9SiI9voF5kp1SLXVOYbW1yanGBbHBoa3hza29RV1ZWZllTbUlYT1xIWGloc2pZa1ZRUkVWXExYUmFVaGped3V6fHB8fHKCe39ydo2Ag3ZeUXNhZ2JwZ1BqaGhrbG5nZGdfXV1dYGpiaml2dV1cY2hjamlybGZrbWOdpZimemV0bYunrqWqsLGmn4uAlqqcnqSMoaGaoaGAlZiTjZqPi5eQjYp7hnGAiGiLi3yXmnN1iX2Qe2WDh5WKipWZgnyIhpamkIGiq5CFkIqBin2AgI5zaY+lhH2Fk42ImJ+Nh5Kqpp6JpniWnH6liZaMspiekIOvl5+leJaIeql0pY+Emm6looyShIyDvG58pa+ChoWGk5acoH2menGolKCWZ55+b6tiloqVkneobKmigYl2h4J3q5GmiGuRsGt2s4ypbIuGbm2fnpKVYX6ri6p2gH+Np593n32FpJWdoGmah3WrZp6tjLZzd76MpJNZg6aNq2F1cXNve3RwYmp+bmhsUlVaVWBhXWtNXVJdSV1sbXZgW3FZW2BaZ3Nlbm9yY3F0YHd6fnlyeYNzg36Be3uMgYKAdmJ4ZGNuc2RSbGdob2xyaWZpYV9eXGFqYmxsem9cXGJpYm1pd21nbG5ilaaqnIGAnqSWqaqeqKeuo5mJgpeqmZ2jiZqlnKidhIuaj4WckYWSjYuNdIV6iINvjYR9lpN0dYZykYNtf4uSh4aTj317gYWXpY1/paWNgI2JhJR1g4eSb2yKqICCi5SOiZyeiYyTqqOgkIB1lZeIfoF5lK6jf4GbcY+GeJCMhYB7cqeMcX19epeWm4SOeHt+fYiUlZOKdpCZn6GEe32Ja4yFW3l5cnlwaG59kYlxf3SBj5STcYWDgWWNf1+BgIx3dXOUdW96b26HbYSGX3doeI5mgYKGjqqcfnR9l2qJiG9/dXyEdW1sZoxzeHuXd4Rbalh4j2htd3Fwb3d3b11shm1pZ1ZZX1dcZGtkVWFVXlFfcHd5a2p3ZWpqanV8cXF0c2FvdWJze4F4dXmCdX+Af4B4i4WCfXtuf2xkeW5eV25naHVreGppaWRcYFpjaWVscHVuWltia2Rra3ltaGxvYY6Vuqmni6GimqakmaSdq6Kgg4OXq5GdoImappqomIKBm4t+lpSHjomIjXKCfI99fo+EepeOdHOEcJWFe32Si4aGkIV4foCGmaOMe6ehi4WPj4SVgoaOl3dyhKmFjZKckIienoeLmqegoKuDiY6Vmn5+iZatqI+Sp5B4cJ6Rg3uTb36phXB9lXFqb3yBn4t/ko6MaG1dg4uMnJufjnOVi4hxdGuCdnN/WHJuho+BfX6LaV1pY3qFg4iAX2l4e5t8g4yDdoGGg2l5i4drYXFzg3dgc4yCiZCnlYZmjY+DbnaLg2+EjHhuZGZjeYJ6lVpcaWZudlt6eXd0bXNygmZcbYpra2JZWV1aWGtxW15gWV5dZnN9e3NvdGNqaml7fHF6d3RkbXRobHx+dXl8e3p5f4B/b4aKhHt9dH55cn9oVFxxaWx2cHVna2dkXWFZamhranFybVdbZW5sZ3N5bmhqbWCMjKuxopCjoZqfnpiemamjoX2Dl6uMn5SHm6KQpJR/e5eEfJKZiImGhopyfYCLdoWLgYSWinJvgHKYhoR+koOEhoqBeoCDipufj4KmoId4jZeIlYuLnJeFg3qsgZCXmZSKnp2HiKGqn6Kio4yIk5uco5mWqqGnpqCSm4iXj3x4j46EqH5/kpGSk5ywpZqUnZCOspOYhKaMjJWboImQm4KIkYprfI52d2WChpCKfImdhIeLj4eIgISDkHd8enWaoomHi5+LhpV/foyBgHZxdIaFgHiIh4qRppGEho6Ig42QjHyGioeOgHVrgYN7eZlpcmhgc4pwfXp2dW93dIFcXm+HaG5fXlpbXFNncVVjW1thbGh0e3xybnBjamlof3tteH5xaG9wbGaAe3KBgHeAfX+Ee22CjIV8enh8fXqDeE5kdmpzbnB7ZWtlYmJgW3NmcGZycWxVXWx0bWl5enBnaWtljYidup+WoqGYlZmYlJikoJ17f5mqjZ2NhZ+cip2WfHiUgnuOmYmGg4SGbXiBgHKAh32Ik4Rta356l4aEg5B+gIaEhn2Hg42bnZKHqp6CcYqPhZKRi5yRfY16qYONkpeVjpuWhoabpqCimp2Gg5KZmZiQmqafpp2dkJeBkot3fYiOhaV7fI6QkYaYqaGck5yPjaqOkoCejYiTmp+Dj5d+ho6Cb3iFcXRgfoOPhXSLl4CDjoKGhH6FhJRueXV1k6KLjYabhYWOdICKfX1yc3uJhHt5jI6Ek6ePhoSPgoOKiYl1hIeIintuan1/e21oa2xnXnl+Z3x7dnN1dXp2XGBwfW10YGJaXF5RZm1TZVpdYWtpdXl+cGtsY2tqZ4B/a3KAbGt0bnhuhHluhoB2goB9hXZxgo2HfXt6fH97gotgaXtrdWhpg2VqY2BpW2N1aG9idW1sVGJxeWRwenpyZWptbYuKn7iaoaSfk5KWl4uan56denedpZCbiYaklIqYmXh6jYV8iZGDjIKBgm18f3hygIV9ipB9a2h9gZeIgYiOfH6GhId8j4CPm5uRiKecf3CLiouShqChioWMfKeRh4+Sl5OWkneNo6ChnZaaf4GQmZiTjJqioaOal5Gbf46FeYCEj4ehgH6MjI98l6SgoJKZkI+mjZCBm5GJk5ibfpKSfoeOgXV0gnB2YH2AjYVxipV8h4txjH6ChYWOaHhyeYyZkpCAmH6Ii3KCh3x9cXp8jIV6e5KNg5alk4uGkXyFhoeEdYGChod5ZHF6fnh5cGxqZl59cmh7dXVzfHN/al5gc3Zwd2RjWV5eUmpoVGRYXmFnanZ4gXFma2NsaGV/gGptfWducGp9d4V6a4uBcoGBfYF0doKNhn58en+BfX+PanKDbnNpYYhpbGJfcVV0b21uYHhobVdqdHZidXp7cWJrb3qJjZ+zkqWlnY6QmI+GnaCanHx1o6CNln+MooqImpZ4e4aHfoOJfoiCgH9wf3t0dYKFfomQeGdjfYaXioKKjXh9gIyDeZaAlZeVjZafmn1vi4GQk4alm4eMiYOllYSSipWXkpF2kZ2hoZiUmHp/jpiWjpaanKSemZOUm3qQhoN4hZeNnn6Bio2Mc5einaCSmI6PooyMg5eYg5OWmn+YjXyIjYF2cX1temSAfIqFcIaSf5CCa4eCgX+JhGV1b3yHk5iNfZR4jIl8gId9fHKAeIqHeYWRiouYopaChIx3iISCgXZ6gIiEdF93d3xzfXdma2RgfmlqdnJzdH1we2NjYHNtdXJtYVlgXltsZFJiV19gaGt1eYZwY2pjbGZofINraHRobG9of3yBeG2PhnGAgoJ/dHyDjIF/fnqCg358kG11iXR0bWWKbGphY3VWg2lxbmB4ZmxianZwZnl7eXFgcmyGhZCdrpimqJ6OjZeHhp+Tl5h8d6mciph5l5yLi5iPeHuAi318g3uAgoB4c3h6c32AhH+IioBkXn2LlYd+hId0fX6Kf32YhJaUloyioJd+cod7k5GKpo+MjoqSoJGDkY+Ul5GKgY+YoJqSkJJ0gI2Rk4mcnZ6mmJiNlZd0jo+KbIaYkJl6h4iQiW+XnZmik5SKjJ+MhoKSnH+TkpWHmYh7iYmBenF5anVse32LfW2FkYKTd2+Bg31+i4Bkcmp8gZeYhX+OdJGJg3mHfnZ4gX6HgX2EjoWNlKSQeYWDdImHfX9ydH+GgmxgenR5cHtvYW5iZHthbm51cnd3c3Nhdl9ua3Vub11bXl1eal1PXVdiYWhtc3qJa19qZWpjaHeHbWVsaGlsZ4B8endvj4dzgIOEfXSBhol6gn16gYR9fY5yeYt5eG5sh2toX2lxY4docW9ldmdtbGF6aGp8enhwYXdti4GZmqqgpKmdioqRhoqeipWXfXatmIyWfZ6TkZaUiHZ9e4p8e4B2d3+AcHRzem+FfYGAiX58YVx+j5GGf4OEc3qAhnqPkYeRkZuSpJuUgX2AfI2KkqSIjYqNl5qNhZGYk5WOiYmMk52TkIyNboSQjpGInpmhoJeWiZaSb4qahWeGmo+UeomFkIpwlpqToZKSiIuZjIKAkZ59ko+TjJmOe4mEh3RzdWtxbnV7inRuhpCNkXF0gHuBgoh8ZXFteX6alH2FiXSRi4F0iXlvgX+Bh32FjYqFjZaojXuIfX6LhXd9cG5/hIJiZ3dzdG56Yl5vYGp0XnBpenh4bHJwZXhdbWxzbXNYWl5fYWpaT1dYZGNncXF/h2VdaWhmYmdxjW5kaWdkaWiAend1b46Ec4CBgnt1goiFeIR8d4OFeoCJd3+LfHtyeYNqa19waHR/a3FubXFnb2xle2Jtf3l2cWx3d4p/opiiqKGnm4eMioGPnIaTnHSAqpSRjIagjJWTkH9ze3aEd3h/cnN7hWtyb3ltiXaAgIZucFtZfpGNiICAgHZ1gH9/oIaPipGcl6CTlneJfoCMiJydiY+GkpeWhIiUmY+Wi4uNjo2dio6QhG6Ji4+RipyWoJuYlYWYiGuGpINnhp2KkX+LhIuBd5OYkZ2RkIiJlY5/fo+YfJGNj42akn2Kf4Jvdm9rbW9weoVpc4OOl4lwd4B0goiCeWZ0b3aCmo98iYV6lZJ6d4l0cIp8h417i4eEiY+co4h8hHeCi4B4eG5pf4F/XHFycW9vd1pecGBval5vaXx5cG1tam12YHBvanFtWVhhYWJtV1FTWWVmY3VwhIJiXWttZGJma5JtYGZmX2drgXVxcnCLgHR/goB4doCLgHmFf3eHhnaDhXyHjIB7dop/anFjfGKGfG9wbHRqaG9sdndfcX55e3R1dH+CfqWVmq2fp5aFjYN/l5WDj550ip+TkoWKmoyVjot6cnd0gnByhXNxdYhsb211bYh3g31/bW5VUYGrlIeCeIB2coJ5gqCBkYGTkpibkZl4kXqCjJKkmpOOiJWYkoOGlpmMk4uJj4+InoWQin1zi4WIj4icmZ6blpSAlH9php2IaIehiJKEkYOJcYORl46ajo+Mi4+Nd3uSkHqOi42Rlo18iHyAa3ZqbWtrbHp+YXl9jpWBdnqBd4OMfHlndWx1h5aMf4iGe5SRcXqFcHiNe4uNe4l+g42Rnp6FfH14got9dnBoa4CBd152b21rcHJVXW5icWBfbW15cGdwZmdzdWhwa2F3ZV1WZWBgclNQTltmZF14cIh8XlxocmJiZWaRaV9nZFpocH5va3Fzin12fYWAdHV/jHl7hoB4iINzhoV+jIyDe3mVeGZyaoNgh35vb2t6YGltdH90X3R8eIZ4c3KFfHmhkJqxnKaOg4p/g5qIgIudfoqZko6EiJeNjo6EdnN2c4Bwb4VzcHGDb2ppdm2Cbn18bXRzUk6C38mS1pN8cHSDdYOggpJ3lJCYm4+Ye5NyhZCfoZOTkIqSm5OFfpaViI2NiJGNiJyAjoF4eox+iIyJm5ucmpWTeY13aIqSiGyJpIWSiJeDhmOMkZiOlImWi42Ki3F7lIl7jYiKk5GJeoV7fmx7ZXJvamt5eVuAeY+NgHp9fn+Gjnp6aHRrdIuQioKGhX2WjGx+f2+BjX+NiH6EeoOQlpqbi3x3eIOPeHJsZXB/gmtodG9naHNsU15uZHBZX2tweGZramJmeHNvcGNfd2BgVmtfXXZPTUtgZmNdeXGKdFxbZXVgYWVljmNhZmFYaXNzbmtxdot8dHmGgXV2fotzf4Z/e4l/comHgZGKiHx+mHZlc258ZYh/b3BrgFlrbnl5c2B2enuNdnJ3ind5n4ybr5ugkIKFd4iVfnyJnIeEn5COhYyXhJOOh4F1d3B5cW6Eb21ufnJkZHhwfG16fGpobGOkmsHcru+hc2t1g3WEoYWRbpWPlJ+Um4GRcIWLo5eJjpWKkJ2VgoCVkIWJj4CSioqXf4d7dX+JeIaEjZual5mOkHaLd2+Iiox9i6SFkomdhYZei5SXio6IjouKhIlse5eCfYiFiZGPhnaFfX1rfWN4dWlteHNXiHqRhoR5fn+AhYx+eWZ0aoCKj4qDg4CMl4ZrgXZuiZKDkYV/gnqAkZaUmZB0dHiHjXVzcGZ0eYFhc2xvYWh1ZlJgcGdrVV5tc3lgcmNfaH1xcm1aYnJhYlduWlx3TU1MY2ZhXnZzim1bXGR4XmBkZoRfY2NeWGpya25rcneLfXN3hIF4d3yIcYOEfX6Ie3SLiIiVhox+fpdzaHVxeWyMe250cIFYcHp2eXFkd3mGjGl2gIlygJ2Imaico5KEfXCMlHh5ip2DhKCNjnyVjH+Zh4R7c3dwc2pvgWtpbHx0XmB4dntwdHpnYGV869q1ycPciHNsc4B2ipqIjWmXj46clJKBiHCFiKCOhIuVioyYk3yNkoiDiY97kYuGkIJ/dniDhHKHgpKblpOYhox2h39whoOKh5qig5SMnoOJYYOVjoaJhYmMh4CHaX2Uf32DhImOjYJxhn5/cXdndnJpc3drWox9koGEfH+DgISKgnZidGyJgpCLgn9/k5F9boJseYeQh5OFfYF+gZKUkZeJbnJ6jIZ1bHBqcXd/XnNoblxqdWBSZHFoZlNfb3Z0X29gXWiCcXJpV2doY2lYbVdbdUxKS2VmXmJyc4VoW1xleV5eZGd6YWRfXFlrbmVuanR3in5zc4F+enZ6h3OFgnx/h3d2ioWPmIGNgnuTdmx3dXl5k3VueHp9WHmGcYBvZ3h3koJkdoaFcYqWhZmhm6KKhnNvkotydo6bfYmZiIl7n3+DmX+BeXJzbm9kcn5pZmx3d1tfeHp6cXF/aWFnYX/Vto6QpnhucXd7cZKQjIdqmI2Im5GLhntoh4uZhoGSkYaHl418jYyAgImNfJCMfoqFenV7gnpxhYCUmI6Sk4GJdYSHd4SAi5Sdn4aWj59/iGF/k4eEh4OJjX9/gmZ9kX9+f4KMj5B+bYJ8gnRrbXZ0c3Z1a2ONgY5/hH58hH+EiH9wYHNxhnyPjYJ8f5KJenGDZnuEi4eNhHyFfoGVj5GThG5weYx+dW1uaWp5fGFnaWlYa3VaUmlyaWJQYnJ4bGFlXVpqg21zYltnX2RsX25UWm9OSE5mZFxnbnGAa1pbY3JfXGNsd2RlXVxabGtibWpzdoZ/cW9/fHx0eIV4hYJ8gIh1eYmBkpV8iIZ2iIFweHl7hJNvbXuBd16Df3SBbWl6c5RzZ3KIfXKSkYSan5ughod2dpR/bXaTl32HkIOKjZl8i5p2fndxb2xqYXR8Z2JpdXpaX3h8eW1xfmVjaGhXnY9ecXKWvMSEdXGUiJB+cpaLhpuSjIdyaoiPloB7lIyBhJuMfIqGfHuJjH+UiHWKhnZ2fYFxdYWBnZOFlI+Dg3GAiHWFfIqZnZiHlI6dgIhmfZOCf4WDiYlxgX1mfot7eX5/h4uPfWmAfIN2Zm94eHN2c2xqjYWKgYl/eIGAhYN/a19yeXt+jYqGfIKPgX5ygWl5hIiMhoV5hH2BmI2QjH1ubXuJfXd0bmdme3ViW3BiV25yU1Nuc2hhTWZ0eGVgXVxYboBvc1llYV5qbWBwT1lrUURTZ2Baa25tfG5ZW15sY1pib3dkZltdYGxpY2xpc3aBg3Fufnx/dHWDeoOCfIGFdn6IgZaQeIOKdIGIcnl4fo2Qb297gXFpgXh6fm1se3WVa2p3hHRslI6GnpigmYWIbn2Mdml4mI5+gIqClZeJeY6Wb3pzcGxqZGBzemhfZXF6WmByfXlncXphZWWPsbJ3SmJapNnQlnJ7kIqQd32UioSZkYyFbmuFkpF6eZKGgISYinyHf3h4iYqEloBwjIhxdH16aXmFg6SQhJOMg35vf4N3hHmGnJmVi5OQlIWIcHuSgn2Cg4iDboF3aICFeHJ/f4OKh3xlfX6EdWNwcn9oeHBvdZiMhYKKfHZ4gIR5gWtccX9zgYiFiX6GiXuJcoFucYWHj4WFc4R6gpmNjYR4bm9+hH92emRnaXtvXlh2WlhwbE5XcXNnYEpsdnRgXVtbWXR9cm9XZ11manBgb05XaFE/WWZeWm9qZ3pxWlpZa2VZY3F5X2hcXmVtaGVraXF3f4dvbH9+gHVvgnuAgX6Cf3aBhYiXinGCjXF7hnx5eYSTjHVqen9sb350f31vcnt7lG9ugX94ZpOLg6GZnJKChWeHg3BnepaIfX6EgZiJgXyNjGl4cmtsZl9hbnhtX2JveFxkbIN6YXF2X2Vl1Oq+ijI6PouOgHF4hYiOjXaDlox+ko2Mf21shY2Mdn2Pf4WBlYh8gnhudoeEg5d3boiFbHV7dGZ5goOmi4KPi4N9boB1d4R6h52RjJGSk4yLhn97koZ3f4SNg2t/cmiAfnhtfHuBioN3YnmEgXFkcWh+bXRxdIGbi4B+hX5zdX2Ac4FvW21/dXiLg4t7h4B8iHh6cWyJhJCEi3KCeoCXi4t/dG1rd4CAdXVcaGd2b1hWe1JZb2RMWnJyZVtJcHhvXFpaWV11fnRoWWJbZ2VuY2lNV2ZRPV5lXF11ZWB1cFpZVG9kWWRxeVpoXmBnbWdqa2lwd32ObGmChH55boB8fIF/gnp1goGNk4VwgItud36Ae3uIkol/aHt9anR7coZ7c3d9f4x5eIR9fGuMjYSbnZaMgIBsjX5raH6NjHp+f4OUgX59iohrdXFnaGJbYmdybmBha3NhaHCJemJzdF5jZJugj25cNVmvtXRpgIh8koZ1hZaFc4+KiXZwbIWDh3V5iXiJfJOHen5zZ3aJfn6Yb3GGfmh2eW1leYiEpIaAh42Jfm5+doCBfYyaiIKUkZiJi4SJfI+IcHt9hHtofmxqgHt6aXp2gYeAcmB3gX5xZHJmdYJtdXuElJGBfIF/bnd5fHR+bFhwgHd1jIKGeIh2gol6eHNuioGQgYZzf31/k4mIem5tam6CgnVuXGdkcnBRWnpNWm9cTltycGRVS3N4aVdZWVphcYB0YF1dYGZkaGllTlpoTkBhZFtgdWFddW1YV1N0YVpkb3JXal1haGtnbWxpcHd8kmxphIl8fHB+fnuBf4J6d4B/iYuDcXuHb3F3hH97iY2Pg2p+e213eHaKd314gIKHf4N+fnpthYyImKONhIN7dYt5a2yEiJB4fXuBkX9/foqDcHJxY2ZeWWZfb3BgYGdwZmpviXRhdG9bYWRqdnt/vpymo8i4cYWDcpJ8eIaTgnORjIdycm+De4N0dYd0iHeTiHl5cWN3h3qAk2lyhHZnd3VjanyCh52Bf3+Oj31yf3SFeoCSkYN5lo6Vj4iCiHuIiGt4eX51Z3pobH95c2l6doCDfWhgd4d9ampzZ3uAaXaAi5CUfnp9fnB7dnt0fmJWd31yc4qEgn2DcYeKd3hxcISCjX9+eX59do6Gg3ZpcWltiIJyb11nYXFtSmV1S11uVVNZc25iUU9zeGBSWFhcYW+Cc1thXGhlZWNrY1BbcElEY2FaY3BeXXdoVVZVd15bZW5oVmteYWpnZW9vaHB2epJuaYiMeH1ye355goGBfHZ9g4iFg3B3g3Jud4OCfYmLk39wgHt4eXqBjHSDeH+BgYKEeoB1b36Ki5ueiH2FeneGe2d0hYuQen5/e4iFg3aPgGdvbl9kXFhlWW1yYGBgcGxraIluYHNpWV5kbYB3qdqpx4aHsnGJd2+MdXuGjoB6k4l/dXR1fneAcHF/bYR0lIZ4dWtgeoJ5iI9mcoRwZ3ZuW218gJCTf4B5kZJ9eXttiHeBkoyEdJaKkY6HhYV7f4RsdXZ/bWd2ZW17dW1qd3Z/f3xgYniFeWh0dWJ9e2d0ho6MlXt0gHVxf3p8bX9ZVnR/cHWFh3+BeWyJhnR5bHWAhIR+e315e3OLgXxzZ3RlbouEbXNaaV50ZEdtbUxaYVdWVXhtYlBSdHZXUFVYXmFxhG9cYGNtZGReb2JUXXJHQmZfXWZoXVt7YlFVXHVbWmdrYVZqX2BuZWZrcWhwdXiOdGuOjXV+dnh9d4GDgXtzfYOIh4NvcX90cXV/hYGJjYp7d394g3t8hYd4h3x9gX6EgHt+c3Z5jI6gjYl6iXZ0g3lefYWYjHmGg3SFhoR3iXtibm1cYltbYVZpc2NgW2dub2aHcWFxZldcY2t/fMrOh7mham1timxxhHF8hIl+e5GFeXlzeXV1fGpsdWOEdZKCd29mXn2CeouJZnKCa2pxY1hteoWbiIGBc5eUd398bolygouMiHKYjpGJhYuDe3h9cXFwfWZocWJteHFqa3F4fXx6XGR5gHdpdXhlgnZndIeLjZR8cYdqbn2BeW58XVhyf250gYt8gm9vin9xdmh3f4GAgXd9cXt1h3x6cmZzYW6MgmtyV2pddltIbWpNVVReVFV7a2FPVHVyUFFUVl5idIVpXGBramZjWW5hWGJwR0FoXGBmXl1We11PVWRwWltqaF1XaGBfcmVqZ3JncHJ3hnhulYp0f3p3fniDh391cn+GhY2CcHB7eHd1eoaFhoyFenx/dIt+fYaEhId/fn59h398eHZ5eJGToH+MfIttdYB5Y4OGloVzkYpvhYWBeoN0Y25qWV9bXV1UZ3NlYFlkcXJmgXNia2VXW2Bpf3i+rnugt21ic4Zoc3txeYKFe32Mf3d4cnZve3Zlam5gh3WOgXNqYl5/eHmLhGdxfmhqa1pWb3eJo4GEf3GZk3GAeXWDboGDkohzlYiNiISJhX14dHJuaHlgam1gbXZqZ2preXd6dlpnfXx4ZXJ9bYR0ZXWFjIWVf2+LZmp6g3VtdWJccH1sdX2MfIFmdYd9bnFodX94fn9zfWx7e4F6eHFmbGJuiX5sbVZpX3ZVSmlqT1FOaE1ZfGhiTlV1akxQVFVeZnWDZl1gcGhnYVdpXVtraEpEalphZFdZVXlZTlZtalldbGVcWWVjXnRlbGRxZ3JvdYF4cJmFdn9+d398hYd9dXOCiICVgm5zeXt6c3OFhoiIg3iBfXWPfnyEio6EgoR7fouDe3d8d3eanZd6ioKGaXZ9fGyDhJJ/co+CcIWCfoF/b2ZsZ1ddW1xbVGRwZF9XYnJ1aXVwZWViV1xcaH9wb3KAc4lkZHh+aXN1c3KChHiAhHl3dHVta3pxYmdrZ4Z0jYNuZl1ffXB7iX5pbXhmaWRVV3JvjaZ8g3t2lpB0fHN9e258fJGGd5l8iIaDhoN9dHBybGd0XGxoXmx0ZGdmaXpve3JZZ4B2dGdwgHeBdWJ3hYp8lIBui2pteoFxZnNlYW56Z3N4inx+YnaDdmprcXV7cXp5dH1mfn9/eXduZGZiboV8bWpVaWFvUkpoak9LTnBHXntmYU1VdGNKTlNXYWp2fmVcZ3NpZWBWY1dicF1MS2tYY2FVVFVzVkxYdWRaX2thXFpjZV92Zm1icGlzbnJ/dXSagXd/gHd/f4aEenx1goR+l4VucnR8enRxhIWPgYB5i3V0kH98gZWOgIWEfX6Mhnt+gHZ7o6WKeYiGhGt1fHp1g4GLeW+Fc3mEfYGDdW5qaGVWXVtaWlNibmRbWGFze2lobWlgYldfW2qAaWtvgGdrYGh5eGpzc3RuhIF6f311dW56aGp5al9lbmiBdpCFZ2VYYndpfod7b2lwZ2ZdVVhvZ46od4F6fJCOeXVwf3BzdnqPgHiVdYaDgIWIdmpydmdobltsZF1tc19nYWp4aHttW22CcnNqb4B+eXdhd4SEd4+Ecohxb3l/cWNwaFxweGRxdIh8eWJzgHBnanl0cmx4d3Z4ZIN7f3h2cGRjY258fWtrVWhhZVNKa2dPR1FrRWB4Z2FNU3FcSk1UWWVrd3plX21xaWRdVmBWbm5XS1NoV2VeWE1Va1RKXHlfW19rXV1bY2VgeWhrYW9vdW5veHV6mH13gIF6gICHhXp4eYN+gZOEcXR0f3l2dISIkH2AfJBrc5WAe4KfhX6HfYB/hoKAint2hKyff3qIiINrcoF5dYB/gXRuhm58f3OJgGpvbWRkWF9aWVpVYmpnW1pedYJpXm1sXGFWXFxsgWVxdH1paVxrdnVndHdybIV7fX15dXJseWhpeGZdZXJoeneTgWNjVGVwZ4KFd3dmaGpgV1ZZZ2OPp25+d4CLjnpwcX1oem96jXx3j3KEfX9/hm5kdXNkaGhca2Jdb29bZ19tdWR6aF10gG9xa3F7fXV1YXSFinqHh4B/d3J1f3VhcG1acnRicXKFfHRlcoBsYWx7b2ppe3l2cmaFdnt6dXFkYWVtc35pbFRoXlxUS3JiUEZWYUdidmdhS1RvV0pMV1hna3Z6ZGVucWZjWlddWXZlVUpcY1dnWFlIV2VQSGJ4Wl1fbFteXGFjXn9pal9udHhub252g5d5coGAfH+Ii4V+dXWFeIeMfXN1dYJ5enqCi459foSJaXOWgXqKnX1+hXqBen98hohzcY+ujHt7h499ZXGHeXN8e3VyboZse35sj3picG9iZV1lVllZVmNma2BdXHOFaFhwblpeV1pcbHticHd2bWJabHNzZ3R1cGyEeX6AeXdubnRlaXRlW2d0ZnZ2knpfXVJlZmuDgnR9YmNpXFRYXWJjj6VoeHSChZB4bW96aHhufIV7dYlzgHh8eH9oZXZtYGZgXmpfXXNrWWVdb29iemVcd3trbm5vd3hzdGRyg5J+h4KIenZvcn1zYndkW29wYnFxgXxzZ3KAZF5udmlkZ3l7dW5vgnV0fXNxYl9mbm99ZGlTZ1hYVE13X1FKWVhIYnVkYUlUbVNKTFpWaWxye2JsbHNjYVlZW2F2W1NMY11YaVNXR1lgTkdpdVheYW1bW19iYl2FaGdhbnh5bG9qdoGQeG2CfoCBkoeDgXZ0iXSMhnNxd3WCd3x9foyPgH6TfnB3lYN8mZJ5gIB4eX5/dIiDc3CZont6f4mUeGR1iHhzd3Vrc25+bHl8cJFyXnBvYGdibFRbWldoY21mXFxxiWVTcm5bWlhYYGx2Y2l1amleWW1zcWxzc3NphXx+f3x2bm5sZGlxY1trcmR0do5zW1dTZWFygH9ygl1iY11TWmBbY5GeZXJxhYSRdGxrem1vcHt8fHGBd39zenp6ZGV1aF1iWmBnW152aFdiXXBoYXdgW3t2aWlybndzcnRocIGUgoZ+hHZyanB9bWZ3V1xrbmJxc4F6c2ZvfltgcHFhX2pxfmxsdX5zcXhrcGFcZWxsemFnU2ZUV1FPdVtRT1hRSGN0YmBGVWpQSVBaVWpra3xlbW5xYVtaWFlscFdTT2ZXV2hTVEZaXE5IcnRYX2NtY1hgYGJdi2pjZG15eGtvaXV5hntrg31/hJl8goR5fIdtj4Zxb3d6fXSCgnyKjoKCl3R3gpOFgZ+JdYCAgXN/gnGHgnVvopd0e4aLhntld4pubnpuZndwemtzdnKMa150bmFnZWtSXVtVZ2FsbFpccIxkT29uXVZYVWdqdGdidGVlXVludG1wdXV4aoZ8f3yIdo9zZGRrbmFcbm1jc3iHa1pUVmNkeH19cYVcY19jVFpgWWOVlWNucIOFinNqaHtvZnN3c3xsenR1b3p+dV5mcmNbXlZhZFlhdGVVX2BtZGFxXV1+b2hpc3FzcHR1am2EkoGIe4VxcmZufXByb1NbZmtmcXSAdnNjbHZVYnJrWl5vZn1mbXd9c3Nzam1gWmRqandeZlRkVFVQVG1XUVZTT0dkc19hRVhpTkhXVFZtaGR8aWt3a2JXXFVbdGRTUldoUVllVFNIWlpQTXh2Wl9lbGlZYmBeXo5uYWZseXVub2h2dn9/bIN/fYaXe3+HgYl+a5OIcmd0gHt1gIJ8iI5/i5NyfIqRhYefhnt/hoxzgYZzfYN2bqWMc4GNi3Z3bXqMYGR7cGZ5cnhsbXF2gmdke2xjZmdoU19eVWdfbG9bXm6NaE5pbWBUVlNvZ3NsZnhkZFxYcHRscXp4cmyIe392nHp5a2FlbG1eYG9qZXF5fmdaVlhgbHh8e3CDX2JeZ1dYX1dkm4hia3GBh313a2t4bVx3cWx7anZzbm97gHJYam5fWV1VYmNYZHFiU15haGJibFpgfWtma3N1bm13dmtohYt+iHqIbXFlcH1tcm1jWWFpaW90gXRzXmlsU2VxZFVibmJ6Y3F3e3ZrcG1qX1hhZ2h0XGVVYVVSTlhlUk9cT09IZHBdY0ZZaU1JX0tYbWRfeGhufWRgVF5UXXVcVFNgZk5dYVRTSlxZUFl1dV1fZW1oWGNhW16NcGNnandxc25ndnR6g3KBgnmHjX58iYeOeW6QinRsc4J0f3+HhIaRhJWPeX6Mj4eRm4SAfIyEcoCBc3R3cW6Tk5OTk5OTk5OTkpKSkpKSkpKSkpKSk5OTkpKSkpKSkpKSkpKSkZGRkJCPj4+Pj4+Ojo6Pj46OjY2Njo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo2NjYyMjI2NjY2Njo6Ojo6OjY6OjY2Ojo6Oj4+Pjo2NjY2Oj4+Pj4+PjoKAfnp6fX5+fX1/fn59fn5+fn5+fn+Af4CAgIGAgIB/gIGBgYOHjI6Ojo6NjY2NjY2NjY2NjZKSkpOTkpKSkpKSkpKSkpGRkZGSkpKSkpKSkpKSkpKSkpKSkpGRkZCQkI+Pjo6Ojo6NjY6Ojo2NjY2Njo6Njo6OjY2NjY2Njo6Ojo6Ojo6NjYyMjY2MjIyNjY2Njo6Ojo6NjY2NjY2Njo6Ojo6OjY2NjY2Ojo6Ojo+Ogn99ent8fn59fX59fn5+fn5+fn5+f4B/gICAgICAgH+BgYCBg4aMjY6NjY2NjY2NjIyMjIyMkpKSkpKSkpKSkpKSkpKSkZKSkpKSk5KSkpKRkZGRkZKSkpGRkZGQkJCQj4+Ojo6OjY2NjY2Njo6Ojo6NjY2NjY2NjY6Ojo2Ojo6Ojo6Ojo2NjIyMjIyMjIyNjY2NjY2NjY2NjY2NjY2Njo6Ojo2NjY2NjY2NjY6Ojo6Cf3x6fHx9fn19fn19fX59fn5+fn5+gH9/gICBgYGAf4CAgICDhouOjo2NjY2NjIyMjIyMjIySk5OTk5OTk5OSkpKSkZGSkpKSkpKSkpGRkZGRkZGRkJCQkJGRkZCQkJCPj46Pjo6Ojo6Ojo6Ojo6Ojo2MjYyMjYyOjo6Ojo6Ojo6Ojo6OjY2MjIyMjIyMjIyMjY2NjY2NjY2NjY2NjY2Njo6NjY2MjIyNjY2Njo6OjoN/fHp8e31+fH1+fXx9fn59fn5+fn5/f3+BgYGAgICAgYCAgIOGi42NjY2NjIyMjIyMjIyMjJA+LjExMTEvb4eEhISEiF0tMDAwMC1GoaGhoaGhoJqZmpqampqKg4SEhIOEd2VnZmZmaFxDREREREJOpa+tra2usWFARERERENYaGdnZ2dmb4SDg4ODg4OLjIyMjIyMjY2NjYyMjY2NjY2NjY2NjIyMjIyNjY2NjY2OhX19e3t6fX58fH59fX1+fX1+fn5+fn9/f4GBgYCAgICBgICAgoWKjI2MjIyMjIyMjIyMjIyMjy0aHR0dHBpohYKCgoKGUxgdHR0dGTekpKSkpKSjnJycnJycnImBgoKBgYJyXV9fX19hUjQ1NTU1M0GptrS0tLS4WTA1NTU1NE1hX19fX15qgoGBgYGAgYqLi4yMjIyMjIyMjIyMjIyMjY2NjY2MjIyMjIyMjY2NjY2GfH16e3p8fXt8fn19fX59fX5+fn5/f3+AgYCBgYGAgIGBgYGChYqNjYyMjIyMjIyMjIuLi4uRiYiIiIiIh46QkJCQkJCMh4eHh4eHiZKTkpKSkpKRkZGRkZGRj46Ojo2NjYuJiYmJiYmIhYaFhYWFho+QkJCQkJGJhYaGhoaFh4mIiIiIiImKioqKioqKi4uLi4uLi4uLjIyLi4yMjIyMjI2NjIyMjIyMjIyMjY2Njoh8f3l7ent8e319fX18fX19fX5+fn9/f4CBgYGBgYGAgYCAgYKFioyMjIyMjIyMjIuLi4uLi5GTk5OTk46RkpGJh46KkJKTkIqRj4yOhYqRkZGRkJCQkJCPj4+Pj4+Ojo6Njo6Ojo2Njo2Njo6Ojo6NjIuLjIyMjI6Ojo6Ojo6NjY2MjIyMjIuLi4uLiouLi4uLi4uLi4uLi4uLjIyMjIyMjIyMjIyMjIyMjIyNjY2NiX59eHh5fH18fX19fHx9fX59fn5+f3+AgICBgYGBgYCBgIGCgoSKjIyMjIyMjIyLi4uLi4qLkJCRkZGPhI6QkIaKj4WNkJCOh4qIiI2IiZCQkJCQkJCQkI+Pj4+Ojo6NjY2NjYyMjIyMjIyMjIyMjIyMjIyMjI2NjIyMjIyMjIyMi4uLi4uLi4uLi4qKiouLi4uLi4uLi4uLi4uLi4yMjIyMjIyMjIyMjIyMjIyMjI2Lfnx3dnh7fXx7fX18fH19fn5+fn5/f4CAgIGBgYGBgIGAgIGChIqMjIyMjIuLi4uLioqKioqQkJCQkIqFjoiOhoaPiY2QkI+GioWGj4mMj4+Pj4+Qj5CPj4+Ojo6OjY2MjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMi4uLi4uLi4uLi4uLi4qKioqKi4qKi4qKi4uKioqKi4uLi4uLjIyMjIyMjIyMjIyMjIyMjIt+e3d2eHt8fHx9fX19fX1+fn5/fn9/f3+AgIGAgYGAgYCBgYGEiYyMi4uLi4uLioqKioqKipCQkJCPhYOMjpCOiYyJjZCQj4mHh4iMiI6Pj4+Pj4+Pj4+Pjo6OjY2NjYyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIuLi4uLi4uLi4qKioqKioqKioqKioqKioqLi4uKioqKiouLi4uLi4yMjIyMjIyMjIyMjIyMin18dnZ4fHx7fH19fH19fn5+fn5+fn9/f4CAgYCBgYGBgIGAgYSJi4yLi4uLi4qKiomJiYmJkJCQkJCMhoyJjoeFjYmOi4yLhoiHhoyIj4+Pjo+Pj4+Pjo6OjY2NjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyLi4uLi4qKioqKioqKioqKioqKioqKioqKi4uLioqKioqKioqLi4uLi4uLjIyMjIyMi4uMjIyKf353eHp7enp8fHx8fX1+fn5+fn9+fn9/gICAgICBgICAgYCBhIqMi4uLioqKioqJiYmJiYmPj4+Pj5CMjouPjIqPjI6MjY2JjoyLjYyOj46Ojo6Ojo6Ojo6NjYyMjIyLi4uLi4uLjIyMjIyMjIyMjIyMjIyMjIyMjIyLi4uLioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi4uLi4uLi4uLi4uLjIiAfXh5enp6e318e3t9fn5+fn5/f35+f39/gICBgICAgIGBgIGEiouLioqKioqJiYmJiYmIiI+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Ojo+Ojo6Ojo6Ojo6Ojo2NjYyMjIyLi4uLi4uLi4uLjIyMjIyMjIyMjIyMjIyMjIyMjIuLi4uKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLi4uLioqKi4uLh4B8eHp6eXt8fHt8fH1+fn5+fn9/fn9/f39/gIB/gYGAgIB/gYSJi4qKioqJiYmJiYmJiIiIj4+Pj4+Pj4+Pj46Pj4+Oj4+Ojo6Ojo6Ojo6OjY2NjY2NjY2MjIyMjIuLi4uLi4uLi4uLi4uLi4uLjIyMjIyMjIyMjIyMi4uLi4qKioqKioqKioqKioqKioqKioqKioqKioqKiYmKioqKioqKioqKioqKioqKioqKi4uHgHt5eXh6fHx6e3t9fX5+fn5+f39+f39/f39/f3+BgYCAgH+BhIiLiomJiYmJiYmJiIiIiIiOjo6Ojo6Pj46MjI+Sj5COjo6Ojo6NjY2NjY2NjY2NjIyMjIyMjIuLi4uLioqKioqLi4uLi4uLi4uLi4uMjIyMjIyMjIyLi4uLi4qKioqKioqKioqKiomKiomJiYqKioqKioqJiYmJioqKioqKioqKioqKioqKioqKi4aBe3h5eHp8ent7fH19fn5+fn5/f35/f39+fn9/f4CAgYCAgIGEiIqJiYmJiYmJiIiIiIeHh46Ojo6Ojo6Ojo+MkJOQkI+Ojo6NjY2NjY2NjYyMjIyMjIyMjIuLi4uLi4qKioqKioqKi4uLi4uLi4uLi4uLi4uMjIyLi4uLi4uLioqKioqKioqKiYmJiYmJiYmJiYmKioqKiomJiYmJiYmJiYqKioqKiomJioqKioqKhYB6eHl5fHt6ent8fH1+fn1+fn9/fX9/f35/f39/gICBgICAgYSIiomJiYiIiIiIiIeHh4eHjY2Ojo6Ojo6Pj4+PjoyNkI2NjY2NjY2MjIyMjIyMjIyMi4uLi4uLioqKioqKioqKioqLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4qKioqKioqJiYmJiYmJiYmJiYmJiYmKioqJiYmJiYmJiYmJiYmKioqJiYmJiYmJioqFf3l6eXh7e3p7fHx7fn5+fX5+f39+f35/fn+Af3+AgICBgYCChIeKiYmIiIiIh4eHh4eHh4eNjY2Njo6Oi42Nj5WPiYyPjYyNjYyMjIyMjIyMjIuLi4uLi4uLi4qKioqKioqKioqKiouLi4uLi4uLi4uLi4uLi4uLi4uLi4uKioqJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYR+eXt5ent7eXt9fHt+fn59fn1+f35/fn9+f3+AgICAf4CAgICEh4mIiIiHh4eHh4eHh4aGhoyNjY2NjY+MjImKj42IjJGPjY2NjIyMjIyMjIyLi4uLi4uKioqKioqKioqKioqKioqKiouLi4uLi4uLi4uLi4uLi4uLi4uKioqJiomJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJg355e3p8e3p7fX17fH9+fn5+fX5/fn9+f3+Af4CAgH+AgH9/f4OGiIiHh4eHh4aGhoaGhoaGjIyMjIyLiYyKiIeJhoyOjJCMjZGOjIyMi4uLi4uLi4uLi4qKioqKioqKioqKioqKioqKioqKiouLi4uLi4uLi4uLioqKioqKiomJiYmJiYmJiImJiYmJiYmJiYmJiYmJiYmJiYmIiImJiYmJiYmJiYmJiYiIiIiIiYmCf3h7e3t6enx9fHx9f39+fn19fn9/f39/f4F/gIB/gICAgICAg4aIh4eHhoaGhoaGhoaGhoWMjIyMi4yOjoyKioeEiIuKjIuNjo+Li4uLi4uLi4uLi4uLioqKiomJiYmKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiomJiYmJiYiIiIiIiIiIiImJiYmJiYmJiYmJiIiIiIiIiYmIiIiIiIiIiIiIiIiIiIJ/eHp7enp6e3x8fX1+f35+fX1+f39/fn+AgICAf3+Af4CAgYCDhYiHh4aGhoaGhoaFhYWFhYyMjI2NjJCSjI2Ii4mJi4uLi4mLjIqMi4uLi4uLioqLi4qKiomJiYmJiYmJiYqKioqKioqKioqKioqKioqKioqKioqKiYqJioqJiYmJiYmIiIiIiIiIiIiIiImJiYmJiYmJiYmIiIiIiIiIiIiIiIiIiIiIiIiIiIiHgXx4e3x5enp8fHx9fX9/fn59fX9/f39+fn+Af4B/f3+Af4CAgIKEh4eGhoaGhYWFhYWFhYWFjIyNkY+PjZGJjIaJjIuIiImMiYeNjo+NioqKioqKioqKiomJiYmJiYmJiYmJioqKioqKioqKioqKioqJioqKioqKiYmJiYmJiYmJiYmJiYiIiIiIiIiIiIiIiImJiYmJiYmJiIiIiIiIiIiIiIiIiIiHh4eHh4eHh4WAenl9e3t7enx8fHx9f39+fn19f39/f35+f4B/gH9/f4B/gH+AgoSHhoaGhYWFhYWFhYWFhISLi46PjoyLj4iHiYmMjYWFjo2KiYyNi46KioqKiomJiYmJiYmJiYmJiYmJiYmJiYmKioqKioqKiomJiYmJiYmJiYmJiYmJiYmJiYmJiYmIiIiIiIiIiIiHiIiIiIiIiIiIiIiIiIiIiIiHh4eHh4eHh4eHhoaHh4eHhH55eX16enp7fXt8fX5+f35+fX5/f39/fX5/f3+Af39/f39/f4CChIaFhoWFhYWFhYWFhISEhIuLjI6MjI2Lh4mIiomGgoiNjoiKi5GTj4uJiYmJiYmJiYmJiYmIiYmJiYmJiYmJiYmKioqKiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiIiIiIiIiIeHh4eHh4eIiIiIiIiIiIiIh4eHh4eHhoaGh4aGhoaGhoaGh4eDfXp5e3p5enx8e31+fn5/fn59fn9/fn9+fn+AgICAf35/f39/gIKEhoWFhYWFhISEhISEhISEioqOjYmIiIqKh4iHiomIioiIh4qGi5GPiomJiYmJiYiIiIiIiIiIiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmIiIiIiIiIiIiHh4iIh4eHh4eHh4eHh4eHh4eHh4eHh4eHhoaGhoaGhoaGhoaGhoaGh4J8eXl6eXp7e3t7fX5+fn5+fn59gH9/f39/f4CAgH9/fn9/gICAgoSGhYWFhISEhISEhISEhISKi5CPiYmJi4qHh4WHiYuKiYSLjYmOjYqJiYmJiIiIiIiIiIiIiIiIiYmJiYmJiYmJiYmJiYmJiYmJiIiIiImJiYmJiYiIiIiIiIiIiIiIiIeHh4eHh4eHh4eHh4eHh4eHh4eHh4eGhoaGhoaGhoaGhoaGhoaGhoaGgXt4enp4e3x7e3x+fn9+fn5+fX1/f39/f3+Af4B/f39/f3+Af4CChIaFhYSEhISEhISEhISEhI+Qj4+IiYuIhoeIiYuLjIuJioqNio6Oj4iJiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIh4eHh4eHh4eHh4eHh4eHh4aGhoaGhoaGhoaGhoaGhoaGhYWFhYWFhoaAe3h5eXh4enp8fX1+f35+fn59fn9/f39/gIB/gICAf39/gIB/gYKDhoiGiIaDhISEhIODg4ODkpKOioeKi4qLh4uNiYqJi4iHiouIio+SioiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIh4eHh4eHh4eHh4eHh4eGhoaGhoaGhoaGhoaGhoaGhoaGhoaFhYWFhYWGhn96eXh4eHl5eXx9fn5/fn5/fn1+f35/f3+Af39/f4CAgH+AgH+BgoOHjo+PjoiHhIWFhoaFhYWSkI6KiYmIiImKioiIh4aKjIiHiYmOkJGNh4iIiIiIiIiIiIiIiIiIiIiIh4iIiIiIiIiIiIiIiIiIiIiIiIiIh4eHh4eHh4eHh4eHh4eHh4eHh4aGh4eHh4aGhoaGhoaGhoaGhoaGhoaGhoaGhoWFhYWFhYWFhYWGf3l4d3d3eXp5e3x9fn9+f35+fn5+f35+fn+Af4CAgICAf3+Af4GBg4eOjo6Ojo6Mjo2OjY2MjZCQjomHhoiJiYeIiouIiYyJiYaKjY6PkYuIiIiIiIeHh4eIiIiIiIiHh4eHh4iIiIiIiIiIiIiIiIiIiIeHh4eHh4eHh4eHh4eHh4eHh4eHh4aGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaFhYWFhYWFhYWFhYZ+eXd5d3d6eXl8e31/fn5/fn5+fn5+fn9+f4B/fn+Af39/f39+gIGEiI6Ojo6Ojo6Ojo6Ojo2NkJGOi42JjIiIiYaHiYaIioiHi4yLjpCQiIeIiYmJiIeHh4iIiYmIh4eHh4iIiYiIiIiIh4iIiIiHh4eHh4eHh4eHh4eHh4eHh4aGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoWFhoaFhYaGhoWGhYSEhIWFhoaFhIWFhX55d3l2eHl4e3x7fn5+fn5+fn5+fn5+f39+f39+f39/f35/f3+AgYOGjY2Ojo6OjY6NjY6OjY2Qj42Ni46KhoiKhISLiYeDhYSDi4mLj42JjI6QkI+NjYyLjY6Pj42NjI2Nj4+Pjo6MjYyMjY2KiYiHiImHh4aHh4eHh4aGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoeHiYqKiIeJi4yNjo2LiImLi42OjYyJiImMgHl3d3Z6eXh7e3t9fn5+fn5+fn5+fn5/f39+fn5/f4B/f4B/f4CBg4aMjY2NjY2NjY2Qj4+Pj46NjI6KiYuMjIeFiY2Lh4aIh4aHh4uNjo6Pj4+Pjo+Pj4+Pj4+Pj4+Pj4+Ojo+Pj4+Pj4+Pj4+Oj46Oj46Mi4uJh4eHh4aIhoaGhoaGhoaGhoeLiYeHiIiLjY2Mi4yLjY2Ojo+Ojo6Pj46Ojo6Ojo6Ojo6Njo6NjY2AeHZ4eHp4enx6fH5+fn5+fn5+fn5+f39/fn59fn9/f39/gH9/gIGDhoyMjIyMjY+QkpOTk5KSjYyMjIqHioyKh4eJiYWCiouIiYWJjpCNjo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6NjI2NjI2LiYaHh4eHiYqLjY6NjYyNjY6OjY2OjY2NjY2NjY2NjY2NjY2OjIyNj4+OjY2MjIyLi313dXd5enp7e3p+fn5+fn5+f35+fn5/f39+fn1+f39/gICAf3+AgYOFj5KRkJGSk5OTk5OTkpKLi4uLiomMiouLiYuKhoeOjYiIjI6OjIuMjIyNj46Njo6Ojo2NjY2MjY2NjIyMjIyMjIyMjY2NjYyMjI2NjYyMjI2NjIyNjIyMi4yMi4yMjI2MjIyMjIyMjIyMjIyLi4uLi4yNjY6Sk5OSkpSRkJOVlZSTk5COjo6Oe3Z2d3h6ent7e31+fn5+fn5/fn5+fn5/f35+fn9/f39/gIB/f4CBgoSNkpKTkpOSkpOTkZKSkoqJioyJi4qJjIuKioiHiYqKi4mKjY2Mj46Nj5KUlJOUlJOTkpGSkI+Ojo2NjY2Pko+OkZGOjIuKioqLi4qKi5CPjoyMjIqKioqKioqKiouKioqKi4yLi4uMjIyKiouLi46RkpOTk5SUk5STk5SUlJOTk5KSkpKSk5F6dXZ2eHt7e3p6fX5+fn5+fn5+fn5+fX5/fn5+f35/f3+Af39/gIGChIuRkZGRkZKSkpGRkpGRiYmIiIqMiYiJiYuJhoSJhoyKh4ySkpKTk5OUlZWWlZWUk5OUlJSUk5SUlJSVlZWVlZWUlJOTkY+QkZKQjoyRlZWVk5KSjo+QjYqKi4qKi42OjY6RkpCRkpKSkpGRkpKSk5OTk5OTk5OTk5OTkpOSkpKSkpKSkpKSj3h1d3l6e3t7ent9fX19fn5/f35+fX5+fn5+f39/f39/f4B/f3+AgYKEi5GQkJCSkpKRkZGRkZGIiIiIi4uJg4eLi4yMiIeHjYyNkpSSkpOTlJWWlpaVlZSSkpOTlJSUlJWVlZaXlpaWlpWUk5SUlJSVlJSUk5OVlZWUk5KTk5OTkJGSkZGSk5OTk5KSkpOSkpKSkpKSkpKSkpKSk5OTk5SUk5OSkpOTkpKSkpGRkZGPdnJ3enp7e3t8fX59fX1+fn9+fn9+fn5+fn6Af39/f3+Af3+Af4CBgoSKkJCRkZGRkZCQkJCQkIeHh4eIiIiFi4+KjI6Njo+OkJWUk5OTk5SUlZWVlJSVk5KSk5KTlZSUlZaWlpaWlpaWlpSTk5OTk5OUlJOSk5SVlZSTkpKSkpOTk5OTk5OTk5KSkpKSkpKSkpGSkpGRkZGRkZKTlJSUlJSTkpGRkZGRkZGRkZGRkYx0c3d6ent7e3x9fX1+fX5+f35+fn5+fn5+fn9/f39/fn9/f39/f4GDhIqQkJGRkJCQj4+Pj4+Ph4iKi4yNjYuOj42Mjo6RkpGSk5OSkpKSk5SUlJKSk5OTk5OSkpOUk5OTk5WVlZWUlZWUk5OTk5KSk5OUk5KTlJSUk5KSkpKSk5OTkpKSkpKRkZKSkpKSkpKSkpKSkZKRkZGSkpOTlJSUk5OSkZGRkZGQkJCQkZCRinN0dnp8fHp7fXx9fn59f35/f35+fn9+f31+f39+fn59f39/gH+AgYKDipCQkZGQj5CPjo+Pjo+Oj4+Pj4+Pj4+PkI2OjpCRkpKSkpKRkpKTk5OTkpGSkpKRkZKSk5OSk5OSk5STk5OTlJOSk5OTk5OTk5OSk5OTkpKSkpKSkpKSkpGRkZGSkZCRkZGRkpKRkZGRkpGRkZGRkpKSkpKSkpKSkpKRkJCQkJCQkJCQkJGGc3V2e3x8e3x9fX1+fn1/f35/fn5/gH9+fX5/fX5/fn5/f3+Af3+BgYGKkI+PkI+Pj4+Pj4+Pj4+Oj46Oj4+Pj5CQiI2PkJGRkpKSkpOTk5OTkpKSk5KSkZGRkZKSk5KTkpGRkpKSkZKSkpKSkpKTk5KRkZKTkpGRkpKSkpKRkJCQkJGRkZGQkJGSkZGRkZGSkZGRkZGRkZGSkpKSkpKSkZCRkZCPj4+Pj4+Pj4+PkX9ydHh8fHx7fHx9fX5+fn9+fn5/f3+AgH99fn5+f39+f39/f4CAf4GBgYqPj4+Pjo6Ojo+Pj46Ojo6Ojo+PkI+Pj4+GjpCQkJCRkZGRkZGRkZGQkJCQkZGRkZGRkZGRkZGQkJCRkZCQkJGRkZGRkZGRkJCQkZGQkJGRkZGRkI+PkJCQkJGRkJCQkJCRkJCQkJCQkZCQkJCQkJCQkZCQkJCPj4+Pjo+Pj46Ojo+Pj4+PeHJ2eXx9fHp9fH19fn5+f35+f39/f4CAf39/fn5/f35/f39/gIB/gYGAio6Ojo6NjY2Ojo6Ojo6NjY2Oj4+Pj4+PjoiQkZCPj4+QkJCQkJCQkI+PkJCQj4+Pj5CQkJCQkJCPj4+PkI+PkJCQkJCQj4+Oj4+QkI+PkJCQkJCPjo+QkJCPj4+Pj4+PkJCQkI+PkI+Qj4+PkI+PkJCQkI+OkI+Pj46OjoyMjY2NjIqDiYhzc3Z4fX58eX18fX1+fn5/fX5/fn9/f39/f4B/f39/f4CAgH+AgH+BgYCJjY2Ojo6Ojo6OjY2OjoyNjY6Ojo6Ojo2NiJCRkI6Njo6Ojo6Ojo6Pjo6Ojo6Ojo6Pjo6Ojo6Ojo6OjY6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Pj46Oj4+Pj4+Pj4+Pjo+PjY2MjYyNjoyLi4mJiYiFhYSDgoKEgnR5fXp4dXJrZWltb2xmZmdncHNzd3l9fnl6e3x9fX1+fn59fn9/fn9/f39/gIB/f3+AgIGAgIB/f4CBgImNjY2NjY2MjYyMjIyMi4uLjYyMjIyMjIyGj5GRjIyMjIyMjIyMjIyMjIyMjIyNjY2MjIyMjYyMjY2MjIyNjY2NjYyMjI2MiomKi4uJh4KAh4iEgXt6gH57fXx8fXlzcnJycnV1cG1ramppZ2NkYV9bXF1eWFVXWFlTS0VJSkpLTE1PT0tgdHR3eX19eHp5e3x8fX5+fn1+f39+f35/f4CAgH+AgICBgYCAgICAgIGAf4OEhYSFiIuLjYyMjIuLi4yGiYqKioqKh4OOkJGNiouLi4uMiYmKioqKiouLi4eDi4qIiYmGhYWEhIeJiYWCg397fHl6e3pzcHFxcW1samdsbWdlZmVmZGNlZGVkZWVlZWRkZGNhYV5dXFpYWFdUUFFSU1JTTU1KSUZESEpHR0hHR0xOSWdzdXh5fXp4d3l8fHx8fn5+fn9/fn9/f39+f4CAgIB/gICBgICAgICBgYFnXmBjYWNucX17ent/fXd8fHZ4ent4eHpvcHt4eXt8e3h3e394dXd0dHZ0dXZ3dXFycW5wcnBnaGtsbm9tamlpaGhlZWRkZF9gYWJgYF5dWVhaWltdXV9gX2BfX19gYmFeXl5eWVldXF1bV1dWUlRSU1NOUUpISUZERUhMTEhGR0lLSklNbXJ0eHp7end3eXt6e3x+fn1+f39+f35/f35+gIGAf3+AgIGAgICAgICCgWdYW1pZXFtcY1xaXF5ga3FtcHBvbm5vbmtpbmxrbG9qaWtraWpraWdmZ2dnaGhnbWdqZ2hlaGdjY2JhYmBgXVhbW1dYV1RWUVBUU1NNSkxLTExOTk9UWFhXVVVUUlBQTU1QT05LTE1QUU9MTEpHSUlHSEhJSEhIR0ZHSEpKSEhISUlISVZwc3V5ent5dnZ5enp7fH59fX5/f35/fn5+f3+AgX9+f4B/gICAgICAgIGBbFtYVlZWWVlaWVlYVVZoamxubmxra2poaGloZGVkYlxiZl9fYGNfXF9dYF1eWl5dWVleYmFeXlpZX1xYV1NOTUxLS0tMSUtNTktKS0tMSktQTEtLRkdHSUlGR0lISUZFSEdGRkVERUVEREVJSUlHSEdIRkZLTUtJSUlIR0hLTU1LTExMVXFzdnl6e3h2d3h3ent8fn1+fn9/f39+f3+AgIGAfn5/f4CAf4CAgIB/gYJoUlRVVlNVV1lZWVdXV1tbYWNfXlxbWFZWWVZSVFJRUVVUU1NTUE1KTU5QUk9NUFFRUVFSVlZRUVFUUFBOTk9MSk1MS0xKSktLRklJSkxJR0pISUlFR0dGRkVFSElKR0ZHRkZHR0hKR0dISEpMSkpLSUlISktLSkhKS0pISUtMTU9QUEtUdHR1eHp6eHZ2d3d6enx+fX5+fn5/f35+fn+AgYB/f3+AgYB/gICAgH+AgmlQUlRXVVRWWVdYWFpbVFRTUlBRU1FRUU9OTlBQUU9MTlBPTk5NTEtNTk5QTU9QUFJRUE5OT05PTk9PUFFPTk5PTk5QTk1NS0lISEpJSUlJR0ZHR0dJSkhJSEhJSEhHSEdISElISUxLSklISkpJSkpIR0pMS0pJSUhKSktMTk1NTU9RTFVzcnN3enl3dnR2eHp7fX19fn5+fn9+fn5+gICBgICAf4GBgH+AgICAgICBbE9PTlRZVVVdW1lXV1hOTUpKSUZKT0xKSkdJSk1NS0pMTUpHSUlJSktMRkRGSktLS0hKTExMT01MTE5PT09NTk9MTk5OUFBPTE1MTk1MTEpJSEdJSElISElJS0xLS0pJS0pJSklJSUlJR0dKSUdJSUpKTk1OTEhJSklJSk1PT01MT1JOWXBwcnd4d3d0c3R3enx+fX5+fn5+fn5+fn9/gICAgICAgYCAf39/gICAgIFvS0pNTlFOTlVXVlZSU0lFQ0VFUkREQT5CP0RAQD5CREFAQURHRkVIRUJBQEBDQ0RFQUNFSEtPS0lJSkhHSklKSUlLSkxQTk1MTU1MTU1NTElIREZGR0ZGRklKSUlLSkhMSklKSkpJSEhKS0tIRkdJSklLTU5OSktPTUxLTU1PUE5QT1BgcG9yd3h2dHJzdXd6fX19fn5+fn9+fn1/gICAgICAf4CAgIB/f3+AgICAgXNQUE5OUE1KS1BSUE5RQ0RCQUZRRT1DPT9FSDk6Oz0/PTxBRUA+Ojs+PjxFRD0/RUE/QEFAREVHR0dHQkRERUZFR0dHR0pHSEpLR0NER0pHQ0RFQUFDR0hHSEdISktKSElMS0lISktLTU5MTUxMSkpMS0lLTU9PUFNRT1BQTk9QUlFNUGdwb3N2dXRycXR4eX19fX1+fn5+f4B+foCAgH9/gIB/f4CAgH+Af4B/gICCdlRVUVFQT0xNUFBOT09BQkFAQkE/Oz48Pj8/Ozg5ODs7OkA7Oz48Ozs8PEhMPT1BQT9CQz1BRERGQkZGREdJSEM/QEBAQUFCQUE/Pjw9PkFAQD8+P0BFR0dHSUtMTk1OTUxNTUpLTVBVU05MTlFOTk1OTE1NTk9OTk1LS05OTk1OTkxUbnBwcnR0c3Fydnl5fX19fn1+fn5/gH5+gICAgICAgH9/gICAgH9/gH+BgIJ4UVFSVFJTUVNTUVFST0BAPT4/PD8+QEE/PT45Ozo7Ozk5Ojg4Oz05Nzk7Oz49Ozs6ODpAQEFCP0E/Q0ZEQkNDPzs+PkBDQ0E/Pj9BPkBAQj9APD9CQEFDRUVFSktQT1BPTU1OTExMT1JRUFJOTExPTUtOT0xMTEtMS0tKS0tKTU1LS1xxcXF1c3VzcXR4eHp9fn1+fn5+f39/fn5/gIGAgH+Af4CAgICAf4CAf4CAgXxSTU9RUFFSUlRSU1NOPDs8Ozs7P0BBQkA9PDk8PTw6Nzk6Ojk4OTk5ODg6OTo7Ozg3ODk7Ojg8Oz1AQUA9Ozs+PD09QEJDQT9BQkE9Pj09Oz0/Q0RCQD9BREJFR0pKSkpKTE1MTExNTExOVVNLTE1USVBKSU1KSUpLS0pJSEdKS0lKZnJxc3RzdXJydnl5e31+fn5+fX9+f39/f36AgICAf4CAgICAgIF/gIF/gYCBgFZMTlBQTlJRUFBRUU44PT88PDo9PkFAQT8+PkA/Pj07PT0/QD48TUw5PD09PTw8PDw7Ozo7PD49Pj8/QUA+P0E/QEBBQEBAPT8/PTw6Oz09PD9AQUJCQUBCREZGRkdGR0dISUtMTExLTEtKS0lKSk1MTEpMS0lISUxMSklJSElLR01tcHF1dXR1c3V4eXl8fX5+fn5+fn5/gH9+gIB/f39/gH+AgYCAgYCBgICBgYCCYUtPT05OT1BPT1BQTzo8Pjw9Oz8+PkFBPz0/Q0REQT49PkBBPz5qb0I9P0NFPz9APTs9PT08Ozo9PkFBPz5AQD9BPz89PD48PTs7PD0+QUA/QD5AQ0NEQkRFSEVFR0hISEdGSUpJSUlJSUhKSkpKTEtKSklJSEhKSktMS0lLSkpIVnBvcXNzdHR1eXp7e3x+f35+fn5+f39/f39/f3+Af4CAgICAf4GBgICAgIGBgIJtTFBRTk9QTk5PUFBPPjw8PT4/P0A+QEA/Pz9DRkRAPDw9QERERW15STY6PDk9PUA9Ojw7Ozw7ODk7Pz49PD07PEA9PTw8Pjs9PD0+QUBCQUBAP0JEQ0RFRkZGQ0VHSElJSEhJS0tMTUpKSUpNTUpLSktJSEhISEpJSktKSk5MSUlfcHBycnJ0dXZ6e319fH5/fn5+fn5/f35/f36AgIB/gICAgICAgYGAgICAgIGAgnZNTk5NTk5MTE5QT0w+QTw8PT8+QkM/P0FBQUJBQEFYQD5beHx7eXlTNzo4ODo7PT8/PDs7PDs6Ojs+Pz89PDg6Pjw9Pj89Oz4/QEJDQkJDQ0FCQkFCQkRCQkRCRENGSUdGRkhJSUtNSklKSktMSkpJSkVESUlGRkhISUpKTEpGRmdwb3FxdHZ1d3t8fH18fn59fX1+fn9/foB+fn+AgH+AgICAgICBgYCAgICAgICBek5JS0tMTExFSUxOTTw/PDw9PkBAQUE7QkNCQ0E/RnhYY4SEhIOCe187Pj0/Pj0+Q0Q/Ozw9Pj89PT5BQ0A8OTtBPz4+QT07P0JAQkNCQENDQUNBPT0+QD0/QUFBQENFRUBAQ0JDR0dFRENGRUZGR0VEQEFHR0ZDRkRHSEpHQz5IbG9wcHF0dXZ5fHx8fHx+fn1+fn5+fn5+f36Af3+AgICAgICAgIGAf4CAf4CBgIF+UUhLTU1NS0pLTE9RQD8+PkFBQEBBR0FCRENEQT9KdHiAgYKBe4OBaD9BQENAQD9AQD49PD1BRUFCQkZIQz08QERDQUE/Pj1AQT4+Pj88PkBER0VAPkBBP0BDRkVDQkNDQEJEREJERUFCPkFCQkFCQEA9QUJDRENDQUNFR0E/PVZwcHFwcnV1d3p8e3t8fX9+fX19fX1+fX5+fn9/foB/f4CAgICAgYCAgIB/gIGAgX5SSEtNTUxLS05OUlVEQkBDQ0FBQkBCQ0BAQUFBQExzfIB7goN+hYVZPkNDRUA/P05hX0pAQ0VJSUlJTU1LRUNGR0hFR0VFRUREQ0E/QD4+QkZKSkdFRUZGRkpOTktKSUdHSEtNSkdHQ0REREVEQUJCQ0BDREVEREVERUZDQkFEZW9wcXF0dnV4e3x6fHx+f319fX19fn59f4B/f39/f39+gIGBf4CBgICAgH+AgICAfVJJSUpKSEpKTE9SU0dGRUdIREdIREA+PDs+QEVFSnB9f32DhYaGh2hBRUVEQ1d1homKflhHSEpMTE1PT0xIR0hHSElJSEhHR0hIRUNFRUVFRkhKSkZFR0lKTU9PTU1LSktKTU5LSUhHSElIR0ZFRkZGREZIR0VFSEhGSEdIRlFubnBxcnZ2eXt7e3p9fX5/fX19fX1+fn1/f39/fn5/gH+BgYGAgICAgICAf4GBgIB8UEhHSElGR0lKTU5OSkxJSUpLTE5KRkNBQkNGSkhNcn+DhISChYeIilVBQVV0h4mHh4aHgldJTE1MTU5MSkdHR0dER0dHR0ZIRkhFQ0RERkVEREhIQ0NDRklLS0xMTExMTElKS0pKSUlJSEpISEdISUhHR0hGRkZISklJSUlIXW9vcXJzd3d6e3t6e319fn59fX19fX5+fYB/f39+fn+BgIGAgYCAgICAgIB/gYCAgHxNR0ZIRkVGR0dKS0pMTUxLTU5NT0tJSEhKS0tMTExngISGg4CEiImMcE5thIeGhoaHh4eHfFBLTEtIR0ZGREVDQ0BBQ0NDQ0ZGRUJAPj5AQUFAQkQ/Pj9ERkhERUdJS0lJR0hJR0lJSkpJSEZKSkpKSUpJSkpKRklMTEpKS0tmb3BzcnR2eHl7e3t8fH1+fn19fX19fn59f39/f35/f4CAgICAgYCAgIGAgICAgICAfU9GRkdGR0hHRUZHR01NTUtMS0lHQ0NDRElLS0xMSlOAhYaCgIKEhoeDgIaFhISFhoaHh4aKdUlJRkI/P0A/Pz88PDw+Ojo8QUFAPjw5OTg8PD07Pjs5Oz9BQkFBQ0NDQEFCRERCQ0ZISUhISExNTEdJSk1NTk1KSktLSkxNU2xvcXRzc3d5e3t7fH19fn9+fX19fX1+fn5/foB/fn9/gICBgIGBgICAgYCAgIB/f39+UUZFRkdJSUdEQ0VGTk1MSklIRT85Oj5ARUhISkpKXYWFhICChYCCgoOEhIWFhoeIiIiJiYyOZkJCPTg4Ojo5ODc4ODk2NDc5Ozw6ODU2Nzc4OTc4NzY4OTs7PD5AOzk5OT09Pjw8PUFERUhKTUxMR0lIT1JRUFBOTE1NT1Fdb3BydHN1eHp7e3x8fn5+f359fX59fX5+f39/gH9/f4CAgICAgYCAgICAgICAgIB/f39RR0ZHSEpIRkVGR0hMTEpJSUdDQjU2OjxDQENHSUlghoSBfoCChIOCgoOEhomKi4yLiomKi4yJVDs4NjU2NzY2NjQ1NzczNDY4Ojg3NjU2NTY3Njc3ODo3Nzc4OTs3NTc5OTg5ODc2OjxAR0ZJRklGRUZPU1JTU1JPUFBSVGVwcXN0dHd5e3t7fH1+fn5/fn19fX19f39/f3+Afn+AgICAgICBgICAgICAgICAgH9/flJISEhJS0lHSUpJSkpLREVIRUJANTc4OD06PUVDQl6EgICAgoODg4ODhYmKiomJioqKiouJiYqBSDY3NjQ2ODg3NDU3ODQ2NzY5OTc2Njc2NTo5Ojo6PDg5ODk3Nzc3OTo5ODg3ODU4OTtBPT4+QkE/QUtMT1FQUU9PT1FXa3JydHR1d3l7e3t8fX5/fn9+fX19fX5/f4B+fn9/f4CAgH9/gICAgICAgH+AgICAf39+VEhHSUlMTUtKS0tMSUg/QEFAPDo1Nzk4OTc7Qjo8aoaBgoOEhISEhIaJioqIh4iIiIqKjIqJiYx6Pjo4ODs8PT45Ojo7ODk7OTo7Ojk5Ozo5PT09Pzs7Oz06Pjs5Ozs8Ozw8OTs8ODo6Ozo5OTk8Pzw9QUJESUpNS0pLTFdvcnN1dHZ4e3t7fHt9f39+f359fX19fn9/f35/f39/f3+Bf4CAgICAgICAf4CAgH+Af35URkVGSUxOTkxKSk1CPzo7PDs4OTk4OTo6Ojs/PkV6hIGChIWFhYaIiYiHhoaGiImIiYuMi4mKioxsPDs+QkNFRUFBQEI+QEJAQD89Pj5APz4/QD9APT0/Qj9BQT9BPz1AQEA/P0E9Pjw7Ojs6OTs/PTs7PT1BQUNBQkNBWHFxdHR0dnl7e3x9e31/fn9/fn19fX5+f35+fn9+f4B/f4CAgIB/gIGAf39/gICAf39/flJFQ0FHSk5PTElHSzo4Ojs5Ojo8PTo7Oz09P0BDUIGDg4SFhIWEhomJiIiGhoaHiImKi4uKioqLiotePkRHSUtKSUZHR0RGSEdFQ0BAQ0VDQkBCQ0I/QERIRUNFREVFQUZFRkVGRkRAQj48QD49P0A+Pz8/Pj8+Pjo7PTxgcXJ0dHV3enp6fX19fn5+f39+fX19fX5/fn5+fn5/gH9/gICAgICAgICAf4CAgIB/f4B+UERAPUNIT01HRkJEOTc6Pjo8Oz4/Pz89QUBDREZWg4KDhYWGhoaIiYmIh4aGhoeJioqLjI2MjIuKiohXR0xNTUtOSklLSElKSklFQ0RGR0ZEQ0VGREJISUtIR0dGR0dFS0lLSUpLSkNGQ0NEQkFBQ0JEQ0NERENBPTs9QGhwc3R0d3d6eHt8fH19fn5/f359fX1+fn9+fn59fn+Af3+AgH9/gICAgICAgICAgH+AgH9PQT49P0RMS0BCQkE5ODw+Ozw7PkBAQT9CQkdHSlmEgoOFhYeHiImJiIiHhoaGiIiIiYqMjYyMi4uKjH9QTVBNS05LSkxJSUlISkZER0hISUVFSEZGRUxMTUlKR0dISUpOTU5MTE5LSEZHR0VFQ0ZGRkZERUhIRkNBP0BMbHB0dXZ4eXl5fHx8fX1+fn9+fn19fX1/f35+fn5+f39/f39/f3+AgICAgIB/gICAgICAf1FBPz4/RkdHPTxAQDk4PDs8PTo/QD5AQENGSUlQYIKDhYSFhoeHiIiIiIiIh4eIiIiJioyNjIyMjIuKjXFNUU9NTExLTEpIR0VKSURKSEdMSkhKR0dHS0xOTExISElKTVBOUE5NT0tJR0lKSElESUhIRkZHR0lGQ0JBQ1VucXV2d3l7eHl6enx8fX5+f39+fn1+fX5+fn5/f36Af39/f3+Af4CAgICAgICAgICAf39/VERBQUJHSEI/OD9AOTo8OD0+Oz1BPj9BREdKTFZyg4SEhISFhoeIiIiIiIeGiIiIiImJjIyLjIyMi4uLi15RUVBNTk1LSkdGQ0dKR0xKR0tPTEtKSk1NTE9QTkhJS0xPUVFQUU9PSklKSkxKTEZHSEdGR0lGRUVCQEJCXG9yd3h5enl5eXp6e3t+fn5/fn59fX19fn9+fn9+f4CAgIB/f39/gICAgICAgICAgH9/f39VRUNFRUdHRUQ7P0E7PTw5QD4+QEJHR0FHS0xQV3mFg4ODhISGiIiIiIiIh4eIiIiIiIqLi4uMjIyMi4uNfFdVUlJUUk9MS0pFRUZLT05PV1ZRUE9RU1JNU1RPTVNMUFNVV1JTUVBMS01NTUtOR0dKRkZISkRERUVCRENjcHV5eXp6ent6e3p7fH59fX9+fX19fXx9fn5/gH9/gICAf39/f3+BgYCAf39/gIB/f39/f1VGRkdHR0dIRj5AQj0/PT1CP0JDRlZORk1PUFRZfIaDhYWEhIeIiIiIiIiIiIiIiIiJiouKioyMjIyOi4uLZ1ZWa2FFUlFRUEo7OlFTUmB1XVVWVFZZWVJYWFJaZlBVV1pdUlRXUVBOUlBQUFFLS0tHSElIRUZJSElISWpydnl5enl6e3t8ent8fXx9gH59fX19fX1+f39/f3+AgIB/f39/f4CAgIB/f3+AgH9/f35+VEhKSUlHR0ZFPz9BQUVCQ0dFREVMWFJNVFVWWFt8hoWHhoWGh4iIiIiIiIiIiIiIiIiIlJyMioqMfWGKi4uHbFtkVTpYWFhTUD5AVlVZXGRgVllicl5dVl1aVkVRWVpbWV9UWWdSVVZYVFRWU09PTUpMSklJTE1LT01Tb3N2eHl4d3p6ent6e3x9fH5/fn1+fX19fn1/f39+f4CAgH9/f3+AgICAgH9/gH+Af39+fn5WSkpJSEdGRERCQT9ITUlNUEtJS1BUU1NXWlpcXHiFhIWFhYWGh4eHiIiIiIiIiIiIiImcnaCPiY5nO36MiYqLem5wWFpbWlJTUlZWVFpadYNZVX2QYVxYXV5XSVZdXVtbX1lIWVhZXF1YWFlXUlFNUFFNTU9TUVFVUmFzc3Z3d3Z4eHh6e3t8fX19f39+fX59fX1+fn9/gH9/gIB/f3+Af3+AgICAf39/gIB/gHh5fVlOS0lJSUZCREBBOlBRUVdYUFBPUVNUVFdYWFpbboGCg4WEhYaHh4eHh4iIiIiIiIiIiJaanJeIioFuhomIh4OKfmZZWVxYU1ZUV1JRV1ZjloBRZXJYWldfaFBgZlpbWFxoYkdPWmlnXFtcXV1XU05TUFBRVlZWVllabnJ0d3Z2dHd4eHt7fH19fX5/fn59fn18fn9/f3+Af39/gH+AgH9/gICBgYB/gH1yfX9/b3R8XVNQT01LSkVDP0A7UFBaWltSU1FPUlJRVVNVVFdfdXiAhYSEhYaGhoaHh4eHiIiIh4eIh4ORjomJiIaFiIiGfYB7XFBWWFRSVFJRUUxPTUtmeVpdVFlVVl1aTFRaVVNUXlpYV1dXemtYWlxcXlNQUFBJTk9XVlhbWmRxc3Z2dHR2eHl5e3t8fH19fn99fX1+fX1+f39/gIB/f3+Afn56eHd2c3V7f3+AgHRrfn5rcnleW1ZVU1JPS0ZDREFNXoNsVlJTTk9RT1FVUlNSUlRjZHaAgoKDhISEhIWFhISDhoaGhoeIhn6JiYiHhoOHh4d5bXFWSUtOTktNS0hKREZIRUM+U2NVf1JRUU5LUlRSTU9ZUU1OUVNVVU1RU1JQTkxMSENJSFJTVFpcbXJ2dnVzc3d7ent7e317fX19fn19fX59fn9/f3+Af399fX5+f39/f4B+e3Zzd31+fmR1fWlxdF9kXV5bWVVRTElMSWFsknRQUVNOUVJRUltSU1JRUlVVYnN7fH+AgYKBgX99e3uAf4OChYaHgoaGhoGEgYaFhnVfXUtDPkNDQ0NCP0RQQkRAQz5CSEdWQEhOTUddaVBIRk9GREVGSEdIQkNIR0hKR0NCQURAT1BNU2RzdXZ1c3R1enx6e3t7fHx9fHt+fX19fn5/f3+AgIB/f3x8fX+Af39/f4CBgH12dHt/bWh8Z25xZmllZWJcWFNRUFVSc1dlW09PTkxRU1FVWVNVUVFUUk9WYGtscnZ7e3h5dXJuc3RzeXh+foOAg4OCgIKAgoGBa0xHPj46Oz5APz8/PmtRS2FFRkhJRUI/R0xNR01RVUlCRT8+PD08PT0/PT9BQ0I/Pjw9Qj5KTUZVbnV1dXN0dnh7fHp9fHx9fX19fH59fXx+fn9/f4B/f39/enl3eHd2dnh7foB+fXt4dnx1YXhnbHBqbGppZmBbUVFaXFleSUpQUU5LTFFSUVRVVVdRUVdWUFhbYl1hZ21tbG9raGBucmptbHF1e3p9enh6fHx4d3hkQkBAQT06QkNBQURCXF1Pe05PT05LTE1PT1FMS0xXTUhHQEI8OTc3NTk5PTs7Ozg5ODk/O0FHPlx0dXV2dXZ3eXx8fH18fH19fn58fX19fX9/f39/fn9/f314dXd6e3p3eXh1d3t8eXh1eXdjcWhpcG1ubW1oZl5PUF5cWklHUFJRT01QUU5RUlRWWFNSWVROWVpbV1ldXl5gZWBdXnF2a15gZ2t3b29sam9ubmxmYllHRkZIQkFGSUVFRkRNUlBhV1JYUVBTU1JVW09PUVZQTUlDRj46OjY0ODY5Nzk6MzY2Nzk2PEI9ZnR1dnd3eXl7fX18fHt8fX5+fnt9fn19f39/fn5+fn9/e3d1eX18enh8fHx8dHd2d3Z1d2tuaWhxbm9vb2prYFVXXlpXTUxUVFNRUVVPTFJTVFdYVFRYUUxYWVpWWFhWWFldV1dYaHNrXVZgdGthYV9dZGBfXllVUE1PTkxJR0pLSUhGQ1FQU1pXVFRNUVNZU1xlVU9TVFFOS0lIQz9BOTk4ODk3ODg0NzU3ODU4OEducnV4eHp7e31+fX18e318fn5+en1+fH1/f359fn59f358dHR1e3hycW9vbnR4cXJzeHZ1cWZkZ3JucHBxbm1kXV9fWVdPUFhWVlNUVk9PVVZYWFlTVVRMS1RVVVVVV1BUVVdUVVJdbl5STllgW1ZZO0RVV1RbZkpMUFJST01NTk5OTEpGUFBVWVNUTkpOT1RTVFxWUlVTUk5NTElISEY/Pz06Nzg3NjU5OTY3NjY1V3FxdHd5ent8fX59fnx8fXx+fX15fX18fn5+fXx8fX1+fXxydnF4eHJ1dXFxbnBwb3B1dnRuamRkanBwcXJwbmZlZGNcXlJUWlZXVVRXVFJYWFlZWVJVT0pHUFBPT01SSk9QUFBOTk9UTE1JUFBTVFUyPFhNSUFRPWNgUVNRUE5QUVBOTk1QTlRSUFJMSUxLT1FQUVJTVFFST0xNS0xMSENCQT06OTg3NjtCNDU2NjtlcHJ2eHl7fHx9fnx9fH19fX18e3h8ent9fX58e3l9fH18e3B1b3d1cHV0b3N2cHFxcHV1dmNqZ2VXaHRycnFuaWlocFZWVFVYVVdVUldWVVpZWFdVUVNGRUFGR0dIRkpESEpIR0VITEhLSUdMTVBNRy9FX1I+M0A+am9hUlJRQEZUUVBRUFFOUU9QT0xKTExPUE5OUFFRTlFPSkxNTUtHRUVEQjs9PDw5PUc2Njc2RG5xdXd6fHt8fX18enx8fX5+fXt5dnh3eXl8fXp6dn17fHp6b3Fud3JwdnFtcHNwb3Bzc3N0ZmdgaFpXa3JzcmxtbWtuYmVQU1RSU1VPV1ZWWVlWUVFRT0A+Oz0/QEJBQ0BCRURBQEdIR0hGRkhKTUxER0NPUkM4RU5TXWZSUVNBR1VQT1FRUE1NTk1LTEtMTk9PUU1PT01JTUxJTEtMS0dGRkVEPEFBPjtARTs8ODlUcXN1eHt6e3x8fHt5fHp6fn58e3V0dXJ2dnp6eHpyfHt8eXltcW94cnF1bm5xcm9vb3Rzc3J1dGtnZ15lam1wa29xbWltY0xPTk1RU0xUVVRXV1VMTEtIPTk4Nzs/QD88PUFAQj0+RUhHREZGSUdLSkBGQUFARkhFSk9IUFFhXFFQUk5TT09QTExPTUtNTE1PTltWS01RT0hKSENJSkxMS0ZGRkQ/QkM+PEJHP0I/QWRxdHd6ent7fHt6end8d3l+fnt7cXN0cHJzd3R4eHN6e3l2d2xxb3ZxdHRsb3Fybm5vc3ZydHNycmtsZW5zaG1ubWxtbGprSUxISE9RSlFTUVRTT0tIQ0U9OTg3OT9CPjs+QUBAPkFESUVDSEdJR0lFQkI/PjxDQkFHSURNT2FlUExOTldLTE5LTE1NTUxLTk5TZE1KTFJJSUlFQUhKTE1OS0dJRkJBQkA/RUZFSERLb3B3enl5e3t6fHp3c3h0eHx8eXpucXJtbm9ycnZyc3h8eHZ2bXBtc3B1dGxwcHJvb29ydnVyVlZucWdseYRqbXFybm5qaG9ISkNHTE1JTVBNUE9HS0U/Qj05OTk6P0I/PEFCQkFEREdLRkRJSUdHSENDP0I/P0BBPkNFQ0tOUVRLSkhNVEZJSUpMSktMSUlMTU9QUlBLR0NMR0NDSkpMTU9OSUpJR0NDQ0RJSk1MSVpzbXh5eHp7e3l8dnJwdXJ0eXl2eGpxbmpsbG50dG1zdXtzdHhyb25xb3ZzbnBvcnBvcHN0eWpOYGdzanR8eWdvc3FqcWhlcUhLQ0ZISEdKS0lKTERHQj0+PTo6OjtBQj89QkJDQ0hGSkxKRUlJRkdHQ0M7QUBCPkBAQ0VDSU1PR0hLR0hLREhJS01ISkxISEpMS01dUklIRE5HQkVLS05NUE5LTUpLRkdHSk1OUU5MY25pd3Z3e3h7en1xbWxza3B0dHR1aHBtamlra3RwbnR0eXByeXRvcnFvd3NvcXB0cnBydXR5a05WbXVscXt2aW5vaWp0aGRvRktDRkVHREVFRkVHQ0NAPjw9Ojs6OkBEQD5CQ0VFSUZKSkxGSUlHRkZEQjtCQ0M+QENDQ0VGS01IS05IREhFSUxOTUdJTEdFRklJTE5LSkhFT0lDR01NTk1QTk9PTUxJSElPUlFSTlJmZ2Zyb3N4dXt6fGxoam9la3Btc3FmbWxoaWtsdG1wdXR3cW94dG90c3J2c3BxcnRzcnR1dXZ2WFZ1dWtvdHJrb3ZsaG1lX3BHSUNFRkVCQ0JFQERCPj8+Ojs7PTs9P0NBP0FDRkdKR0lJTEhHR0dGRUNAPURFQj5BRENDRUdISUdNUElGRkdLTk9LRkhKRkVERElJSEtJRkhQS0RKTUxQTk9OT1BOSkpITVJVVFJPV2RhYW1ncHJvc3l6Z2VoaGNpbGdxbGZsbWdpa2xzbHB2dXRwbnZyb3Nyc3V0cXNzdXRzdXZ2dnl2dXR2bGt1dW1ydnFsbmxlck1HRUVHQ0JBQkQ9QkE+QT06Oj0/Oz4+QEI/QEJFR0pGSkdJR0ZGRkVEQkFBRkZDQkJCREVER0dIRkxQTElPSkpMS0lHSEVGRURDSUhIS0pHS1JNQ09PTlFQT09OT09LS0tQVVdWVVRYYF5daWFtaW5ocnNiZWZmZGloZm5pZm1taGtrbXJpcXZ1c3Ftdm5vcXJzd3Nyc3R1dnZ2dnd2d3Z2dHd1a3N1bnV0c3Fya2tzTUZGRUhCQkFERDxBQUBDPDg5PT46Pz0/Qj9AQERGSEVIRkZHRkZFQ0NFQkRJRkNGRUJFR0VFRkdFSU1LSFFNSktISElFRklIRUNJSUpLTUtQU05EUVNRUVJOT01OUE1MTlNXVldYVlheW11kYGhiamlna19kZWZjZ2dna2dna21rbWxwcWd0dHVyc252b3FwcnR4cXNzdXZ1gpF5dnZ0eHV1d3hub3VvcnN1cXFpcHpNR0dHSEJCQkZFPEBDQkQ8Nzo9Pjs+OkBCPj8/Q0VGREZEREdFQ0VDREVGRkpFRUlHQ0dIRkhGRUNGSkpHTUpMS0lKTEZJSEtIRUtLTE1OT1JUT0lTVVRRVFBRTU5RTk1RV1pWWllWWl5aWGFgYGBfaGVjYGRlZ2dqaWhqZmhubGxvbXFwaXV1eHJycHVwcHBydXZwdXN1dnV7fn14dnR3dnZ2d3BsdXBtc3Vub3JzeU1ISEdJREFDSEU8QEVDRT04Oj4+PDw8QUI8Pz5BQkZDRUJCSENDREVGRkdHSUZHS0hDSEhHSUdGREhLSUdLSE1LSktMSExKTUtJTkxPTk9SVVZPS1VWVFFUUVJMT1FQT1RZWllcWllbX19eYGNeXGFja2JgZGdocoVoZ2lmam1ucG9uc3FqdHV4cnNzdHJucHF2cnF1cnV1c355jn11dXZ2dnZ4cml1cWtydGxxd3F1S0lLSEpFQkVHRTxAR0REQDk8PkA/Pj9DQjxAPkFBRkNFRUNIREZER0ZISEZISElLSkVKSEhLSEZGTEhISEpITExMTExJTUtNTU1PTFBQUVVWV09KVlZVU1NSUUxPUlJRVlpbXV5bXF5gYGFgYWRdZGBlZmBlaGpjc3NmamhnbHBycW9zc25zd3dwdXZ0c21vcnVvcnNwdXJ2cnSBdnV1dXd2dXd0Z3Rya3Fya3J3b3dJSkxJTEdCRURFPEBGRERCOz8/QUBAQERBQEI/QUNIQkVFRkdFSUVGRUlIRklISkxISEpKSUxKRkpLSElKSkdLS01NSkpNTE5OTk9MT1BSVVdWTU5UVlVTUlFQTU5UU1JXW15eX11dYGBhYWFgYmRlYmNoYmRpamd2i2xraWdtb3NxcHFwcHJ5d3J1dXRzbW1zc21xcm90dXRzcHN2dHV1d3Z1dXRlcXNrcHFqcnZvd0pMTEtNR0RDQUQ8P0VFRUM9QUFDQkJDRUFDREFBRUdDSEdIR0ZKRkNHSkdHSkZJTEhJSk1LTUxHS0lITEtOUUtSUUxTTUtOTk9QUFBUT1dYWFtOU1FXXFpTVlBOVFVUVFhaX2JiX2RhX2BiX2BlYWFjaW5oYmloaG14dmxoaW1vc3JwcXJycnZ0c3Vzc3Nua3NxbXByb3R2cnJxdXZ1c3d5d3V0dWNtdGtvcGpxdHB3TE1MTExHREFARD4+REVGQ0BDQUVEREZDQ0VHQ0JJRUJISklISEtGREtKR0hJSUlLR0pKT0tOTElMSEpNS1pmSmRcS2xSSE5OX25VbHNbcXBid2NSUGJ2dWh1Y2F2YFhucWJkdmluemZcbHRgbGpUX3d2aWpnaWZnbG1qbW9qbW5zcnBycnFyc3Jzc3J0cm5sdG9ucHFxdXVxcXN0dnZ1dXl3dXR0YGt0a3Bwa3FzcXlLTkpLSkZCP0BCPz1ERUZEQ0RCRUVERkJGRkdDREpFRUpMTEpMTUdHTUpISkpIS0pJS0pOTE1NTExJTE1MW3NiZHBebGxVTU5mc11nZXFsbnRncGlfYVlubWJwcGJrampnb3F0ZXRub1xwdWdwTUpyeXZrYmBrZWVteG1rdmxucHNycHJxcHFycXJycnRybW1zbm5vcHJ1dHFzc3R1dXV0d3h2dXRibXVrcHBscnJxektMSUlHRUQ/QkI/PUJFRkJGQ0VERUVEQ0hIR0RFS0dHTE1NSk1MRkpOSElLSklLSkpKS01NTk1NTUtOTU1bcm9vbnBwbGtNUFFsV05pYnRycGFtb3ZcWWxQW21tWnFta29teHh0c2lwXGBzbHFqVXV5eHBjXmtmYmdwcGppb3Bwc3NwcXBxcXJycXFycnRsbXJtbW5vcnV0cXRydHV1dHV1enZ1dGVudWtwb2xzcnJ5SktHSEVFRUJCQj0/P0VHQkdESUVFREJGSUhIRUdLSkdNTU5LTU5HTE5JTEtISU1JS0pKS09QTk5NTE5NTFxoZHVdbHFXbE5PUW1VWmtea2x2YWxkdFRlY05sWWxcdHBraWx4and1aHBdX3NraFdiY3d8b2NgZ2dhZGl0eWtubnFzc3BxcHFwcnFwcHBydWttcW1tbW9xc3Rxc3J0dnZzd3Z6dnV0aG91bHNvbXNydHZJTUdJREVFQ0FCPEJAQkZDR0ZLR0VDQ0hLSEhGSkxMRk5LTFJSTEdNTUhOSkdITkhKSklITk9OTkxKTk1KWnNwcG9xcW1sT1FSbllxa2dvb3Fxb210Xm5YYXRfbm9wb3Fyb251c3R0altddGN3eHJqbnpoYWFjZmJiam10dXBzdXZzcXBwcW9ydHt/fn13bGtxbmxtbnByc3F0dHN1dXR4eHl5dHVrb3VtdG9uc3N2dEhLSElCRUVFQUA+Q0NBRUNISU1JRkNGSkxJR0ZKTUtGT0pLV1JLR0tKSk5JSEpMSUtKSUhKTE1NTElLS0tTa2JaaV5famNyclpfWWpvX2VlVWtfY1thYlFgbWhcalxuaWlkW3BmZHBdWlxrW21xY3BzbGRnY2RnYGBrbXBwb3R5cnVxb3BxbnmFiIeHhoWAdnNua21tb25xcnR0cnR1dXZ5eHhzdW5xdW53cXJ1dHdySEhGSURFREZBQEFFRENGQkhKTEdGQ0ZLTElFRkpPTElPSUxbUUpGSEhLTUlISklLS0lISkdLS0tLR0hKSkxMTEtJS0xOVFtcVFBUTVBPTk9PVlFPT1FPT1FKSk5QUWRxaVRZV1tbXFVZW11YXVxcY2ZhYWZiY2VfX2ZrbWhtdHlydHJvcHB0hoeGhoaFhYaHg3pwbW1sa3FzdHRydHZ0dXl5eHV2cXJ1b3ZydHN1dXNHQ0VHRkZBRUM/Q0dERUdDSUtMSEZER0pMSERHSVBLTE9LTFdNSUVFSElKSElLSExKSEZISEpHR0lFRkxISUtOTElPXFdeT1xbYF5PWFlTXFxiXk1ZWk1YYVJLWWFaU2BkXWJYW2RkVlZYXFlaWFxWWVxeY19kYGFfZWhrZ210dHFxdHBxcoGGhoaFhoWFhYaGhoR9cmtpb3Jzc3N0d3l5eHl4d3h0cXhyeHNxcnVydE9CQ0RMTUJDREJESUVHR0ZLSktIRUVKSkpHRUhIUEpMTUpNU0lIRUFIRkpJS0tJTEpIRkVKSEVGR0VFSkdDSk1KS1RfWWBYYGFbYFVYWVReXlpfUllcUF5cWU5fXF5TW15jX1pdYGNgWV9iW2BeW1RYWFpfXmRiYmFjZWlla3Jwb3Bwbm93hoaFhYaCe4CFhYaGhYaFf3VxcHJyc3Z5eXp5eXh4eHdyeXZ4cnF4dnR2YVNKSk1JRUNCQ0ZHRUdHSUpKSUlERktLS0VGSElOSk5MSExOR0hGPkdHTElLS0pLS0lHRUlFRERFQkZKREBKS0lPW2NZXl5hX1JUU1dfYFxdWV5RWVxNVl9XS1FZW1FbX2FhXl5jYWBiYmJjY2VaUllWVVxbXmNgX19jZWJob21tbGxsbHWFf4SDeXV8hIWFhYaGhYWGhoN9d3JydHd5eXl5f359eXV5dnZybnp3dnhYUUpGQ0dFQkVHSEZHSElGR0pHSEZIS0lMRENLSk1NTExISkpISkc/R0ZOSktLTUtLS0lHSEREQERBSElBP0hJR09dYVpbZF1fVFFSWF1cXFxfWktXXExSXFlJTV5QUF1fYWNkY2NiXGRjYmRjZlhRVVRTXFhbYV9eX2FhX2Rsa21qamxudn51gXp8hIWFhYWFhYaGhYaFhoaGgnpyc3V1e4WHh4eGhYSBfnhwend2eFxSTUJASUZDRktJRkZHSEdHSkZGRklMSk5FQ0tKTE5KTElLSkhJR0JISFFNS0tPTUtLSUhHRUQ/RUJISEFBRkZEVF1ZXlhfWV9bXVVYWFBdXVFLSldeWF5bXVZaYFJRX19hYmFgYmJgY2JiZGRiWE9RUlJbU1xeXV5eX19fZGhnbGpubnB7e3x+e4CCg4SFhYWFhYWEhIWDhISHh4FzcneFh4eHh4eHh4eHh4WDgHx4XFNLQkFHRkRHTVJIQ1JLRkhISEVGS0pNUEVHSUlLTkxMSUxLSUlHREhLUU9NTFBMTEtLSElDRUFFQ0hHQkFGRUJWVUVcVF1TVl9YTlRVTlpbTUpLVWBhW19YX15hXU9ZYlxgYF9iY2JdYmJXX19UUE9QUVhSXVxcXV5fYGFmZmVsZm9vd3x7gHt9f4CEhISEhIWFhYODhYKDgoWFhnpvgYaGhoeHiIeGhoaFhYSFg35JTkZERkZHRElSY1BEV19JR0dIREZNSlBQRkpJSktOTEtLTEtKSkdFSk1RUU5PT01OTE5IS0FEQUNERkRDQURFQUxIQ0xMUE9PTEZNRkdJSkhHTExNT1FJTE9QUFNQTFFTUlVaWVdZWFhkVk9TVFBQT05QVVRcWVlbXl5hYWVmY2hja21xc3N6eX97en+EhISEhISEhIKEgH57gYOBfXuFhIaGh4eHhYWFhISEgoGAfUtJRUVHRkdES01eTEdIWU1HSEpIR05MUVFJTEpLS05OVU5PS0tMR0dLUFNTTlBPTk9OT0hLRWBFRF9MRGZjRE1bSF5cc21PTVZtWUxDUF9VbFdnSl1YVl5ETFFVTE1UVlFSVFhXVFhVVFxUUGZaaGhkWVRrVFdWVVtcXGBgYWJiYmBnaWdubGhyenx9foGEhISEg4ODgX19enJ7gXp7f4KAg4SEhYWBhIWBg4N/fnp7TElFRkZIRUVLT1RJS0dgVEhKT0pJT01SUUtNS0xPUlVST09KTE1HSE1RW1lPUFBOT1BQSktQf1FJfFlZcnNYUG1IcW5vYVZQcXFzUENrc21xc3BTb19bblhdVlxYVWtoVV1WY1pgWVpfVlVXf2p0dXVfYXZfWGJcXGZbX2FhYWJeYGJnbXBsYHB3dHiBgYKDhIJ/fX6Adnh6bHZ+dHh+gHx+gIGChHyAg3p/gX9+d3dOSUVITU1CRExMR0lMRlJWTEtPSUtSWFdRTk9PTVFUTk9RUEtLTkdNUFNbWlRRUk9QUFBLSFp4XVR4ZGhZUlRRdmd0bHBibmZrUXJPTXdtanJwc3JxcnBvcIBdZXp1eHFxenF+c31rdX1iUmh8ZXNzb3NzfH1vfnlvf3JfYGBiYVphYGdrbmtibGZnbXd+gYCDfnt4d4B0dnppcn5udHx+d3h7foCDeHyBdXx/fHxzc05LRmBdR0FFTU1IS0tISlBPTU1KTlZeWVVMUVNOWVlMU1NSTkxQSVFSVFlXV1FUUFBQUUtHZnhsY3hxbVpKTFV5cHVtdWJudlBkZUpmdnFtd2+AamZ4eGlXclFoem1panp6fWx4en9wZ29YdnZqdnVwgGFzaH1pbHh8b19fX2NiW15iZGdpamRnYmNkbGxwcHN0c3NzeXFyeGJsdGdyeXtzc3V5foFzdXpufH15eHJuTkpSdE5DQkVQUElLS0pMUU9PT01QWmBaWEtUV1BhXlJWUVlTTVBJU1RVWFdXUFVQT05SSkxyb3V1cXVxZGhhVm5McXBeRmh5V3ZUS2h4fXhgeXtzbmFebW9kUmdydW5teXB3bHZzdHFsbVxzfnprbXl8bHVtfGtwdnV4Xl9fYl5dX2VkaWdoZWVeYmJpaWlqa25va3FubWpwYWNmZG93eG9tcHN5f25xcGp7enRyb21LS1pWSEdFR1JQSkxNS0xRUVBQUFFXXFlVTlZZVWZYUlJZXlRNTklUVFZXWVdPU05OTlFIUm1IaXdLYGR2dlVXbE9ubHtzYWpnf3ZVS1draH1sbWx4YFtwenteYHpzY3JveHFoZHxpcntdVEtsX3Z1a2l1e3ttfnhrfHBdXl5iW15iZGVnZWVlYlpjY2lra3JzcndnbWloZGdgYWxhZ3Nya2hsbXJ8a21oa3t0bW1rbU9HSktISkhIUlFMTlBNTFNTUk9TU1dSVlRQV1pWVlRUVGFgUU9OS1RTU1FWVk9OTE1PUEpIUU5QVUxLS1NUUlJUUFZVUVFOUVFYWFFOUFVUWFhYW1tVU1NXW1dYV1pQU1VXV1hRXVhWXVVTT1hSV1dXWFpgW2dyXltcW11eX2NaX2NjZWZkY2NiWmNjZmZmbW5tdWZmZ2NgZl9dZ2BkbGhmZ2tocHpoZ2drdWpoZ2lsUUlLS0xNS0pUUk1RUVBMVlVUUFRVWFVZVVJaXVZVVFdVWVhQT0xOV1RRTlVTTlBNTFFQS0pRUktRTUtLT1FUUlFRU1NJSE1OT1FSUVFRVFZSWFdcV1NTUFFVVVZUWlFOU1JXVVRZVlRZVVNSVVNUVVhZV15aX2FdXFtaXFxgY1xdYmJkZ2VkZGFZYGFjYWJoaGluY2FkXl9jXVpkXGJtYV5mZmdtc2RpaGtrZWRjZmhQSktLTk9MTVRRT1RRUU1YV1VUVVdXV1pWVFxgVldWWVVYVFFQS09YU1BOVVBNUk5LU1BNTlVUTlFOTU5RU1BUUVNUVU5LTU9RVFRSUlFWV1VZWltZU1VSVFdXV1lbU09TVVdVVFlVVllUUlJXVVVXXFlaYF1WWV9dXl1cXWBhXltiYmNoZmVkYlhgYGJdYGhlZmRhXl9dXV5aWl9aX2dgXl1dY2hrYWdmaGZkYGJjYVBLTUxQUUxPVFBQU1FPUVpZWFdYWlpYWVZdamRWWFlaV1ZUVE9LT1ZUUE9UUFBRTk1RUU9SWFRSUU9NT1NVTldSVFVVT05OUVNVVVRUUlRYVlpdXFpWVlFSV1hWW1xWUFNWVVVWWFRXV1RSUlhWVVpfWl5gXlZeXV5gXVxgYF9fWmJiZGhoZWRiWWJgYl5eZmRjYGJdXFxcXFlaW1hbYVteXVxfYl9fYmRkYmRfX2BcUE1OTlJRTVJTUFNUUU9VXFpaV1tbXFlaW2RxbWhkX1tZVlZYUk1NVlNNTlJPUVJPTFBTUlVaVVRQUExQV1ZRV1NTU1hNT1BSVFhVVVVTVVlYW15dXFtWUk9VVlZbW1dRU1dVVlhVU1haVFNRWVdWXF5bX19gVWFcYGFeYGJfXGBdY2FjZ2lkZWBaY2BhX19lZV9gY1taXFtcWlpZWVdcWVxbYF5fW15eYWBfYlxZYFpRTk9OVlFQVVNQVVRTUFdcXFxYXlxfV1xeanB3eX9jXFtWVlhSTk9XU05RUVBSVFJMUVRTWVpXVU9STlNXVlRSVFJSWk9RU1NWW1ZWV1RWWlhdXlxcXlZTTlRWVltbVlFUVlZYWVJTWVxUUlJcWFpdXl1hYWBXYltjYl5hY19cYmFiX2RnaWRmXlxkYGFgYWNkX2JfWVpeW1xbWVhZV1daW1phXF1bXVxcWl1gV1tbWlBPT09ZUFVVU1JXUlRQWl1eXVtgXGBVXF1oanJ9cmxoXFVZV1FPUltTUlFUUlRVVEtSVlVbWVpTT1NSVlVVU05WUlNaUlRVVFhcV1hYU1hcWF5dWVteVFVOVldXXlpXUVRVWFhYVFZYW1RTVl1ZXV1hXmNjXllgW2ViX2RkXl5jY2FdZWZpZGZdXmRhYGFiY2RfYl5YWl9bXFtYWFhYV1taXGBdW1tcW1haW15WXlldUE9PUlpQWlVVV1ZUVFReXmBeXmJcYFVdXmJreXRsfWxaVVpVUVFTXFRUVFVUVllXTFJaVl1bXFJPVVNYVlVTUFdSU1dTV1VWW11YW1lVWl5XX15ZXFpSV1JZWFlfWllTVFZaWVpWV1lcVlRaXVxeYGFgZWRdXl1dZWFiZmReX2RjYFxnZGhlZGJfZGFfYWBiYl9gXldYXlpcXFpZWldWXVpdXltaW1xbV1lcXVZYV11TT1BXWVBdVVZZV1dVWF9gYWFgY11gVV1eYmVldYF6aFhZWlRWU1ZcWFdXVlZXXVhQVVxZXl1dVFNYUlhWU1JUWFJTVlRYWFhdXlhdW1VeX1hfX1hcVlJZVVlaWmFYXFVXV1paWlhZWVpYVl1eX15jYmJlZV1iXGBmYmVmZF9gZGJiW2ZjaGVjZmFmX19hYWFhYF9eVlVdWVtcW1lcWVldW1tbWFhZW1laWl1fXVRZXVVOU1pWVFxUVldZV1ZcYGFiY2FkX19WW2BkYV96dW9oWlxaVlhVV1taWVtZWFlgV1BVXltgYVxUVVhQVVZVU1ZWUlNVV1paXF9eWl9cVl9fWl1eWV5WU1lYWVpdYlleVldaW1tbWlpZW1lZXl9gYGRjZGVlYmRaYmZjZ2ZlXmFjYGNeY2NpZGRnX2deYmJjYWFgXl9YVFpaWltbWFtYWFxbWltXV1pYV1xbXGBdVl1dU1BWWlZWWlVYVVhXWF5gYmFkYWRhXllZYWRiYGxmaF5cXVtXWFhZXFxcX1tZW2JWVFdeXWFjXFNWWFBWVlZWVlZTVVRYXVxfYGBdYF1XYF5bXlxbXlhWWFhbW19fW19YWF1cXV1eXFpcWFtfYV5gZGNkZmZmYlljZWVoZ2ReY2FgZWNdZmlkZWhfZ15jYmNhYWBfX1tYWVtZWlpYWVhXW1xaW1dYWlRZXVxaYFxVXmJNUldZVldaWVtcWVdZXmBiYWVhZGFdXllhY2JfYWBhX1xcXVhXW1tdXV9fXFpdY1hZWF1gY2RfUlhZUFhWV1hYV1ZXVl1dXmBhYV9iXllhXV1eWV1eWVhWV1tcYF5cX1laXl1eXmFdW1pZXF9iX2JkZGVmZ2diWmRmZ2lnY19jXmFmZFpoaWNmaWNlXmJiY2FgYF9dXVpXW1lZWFhaWVdaW1pZV1hWVVtdXV1gYGJieEtXV1xYV11cXF1aV1xdX2BiZGJiYV1gWGJjYmBjYWNeXFxcWFdbXV9dYF9dW2BkXFxYWmNlY2FSXFlPWFdZW1pZV1paYF1gYmJgYWNfXGJdX11bX15ZWVVYXV1fX15fW1peXmBiY1xbV1tdYGJiY2VkZ2ZlZ2RcZWZoaWZjYWJcY2dgXGlpYmhpZmVgYmFjYV9gX11dXFlcWVhXWFlZV1xbWldXWFBYWl1hY2Zmcmt/SllXXVpaX11cXlxZXVteX2FjYmFhXWJbYmRhX2NiYl1cW1pXWGpxYFxgX11cYWNfXllZY2VkYVRfWlFZV1xdXFtaW1tjYGNiY2BiZGFgY15gXF5fX1pYVltfXVxhYV9dW2BhYmViXlxTXF9gY2RkZmVnZmVmZV5lZmhoZ2RkYFtmZ15haGhiaGhmY2BiYGNiX19fXV1bWltZWFhYVlpWXFpaVlZVTFhXXGdpa2h1eIF2dnZ2dnZ2dnZ2dnd3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d4eHh4eXl5enp6enp6e3p6ent7e3t7e3t7e3t7e3t7e3x7e3t7e3t7e3t7fHx8fHx8fHx8fHx8fHt7e3t8fHx8fHx8fHx8e3t7fHx8fHx7e3t7e3t7fYmIhoqHhYKBgoOCg4OCgoKCgoKCgoKCgoGAgYCBgICAgYCBgYGAfnx8fHx8fHx8fHx8fHx8fHZ2dnZ2dnZ2dnZ3dnd3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3h4eHh5eXl6enp6enp6ent7e3t7e3t7e3t7e3t7e3t7e3t7e3t6e3t7e3t7fHx8fHx8fHx8fHx7e3t7e3t7e3t7e3x7e3t7e3t7fHx8fHt7e3t7e3t8iYmHiYaFgoGCgoGCgoKCgYKCgoKCgoKBgYGAgICAgICAgIGBgYB9fHx8e3x8fHx8fHx8fHx8dnZ2dnZ2dnZ2dnZ3dnd3d3d3d3d3d3d3d3d3d3d3d3d3d3d4eHh4eHh5eXl5eXl5eXl5eXt7e3t7e3t7e3t7enp6e3t7fHt7e3t6enp6ent7fHx8fHx8fHx8fHx7e3t7e3t7fHx8e3t7e3t7e3t7fHx8fHx7fHt7e3uHiYiJhYSDgYKCgoODgoKCgoKCgoKCgYGBgICAgICAgICAgYKBgH58fHx8fHx8fHx8fHx8fHx2dnV2dnZ2dXZ2d3d3d3d3d3d3d3d3d3h4eHh4eHh4eHh4eHh4eHh4eHl5eXl5eXl5eXl5e3t7e3t7e3t7e3t7enp7e3x7e3t7e3p6enp6e3t8fHx8fHx8fHx8fHx8fHx8e3x8fHx8e3t7e3t7e3x8fHx8fHt7e3t7e4aJiYiFhYOBgoKCg4OCgoKCgoKCgoKBgYGAgICAgICAgIGBgYCAfnx8fHx8fHx8fHx9fX18fHaIi4uLi4uLgX19fX19fYSMi4uLi454KSkqKiopKz0/Pj4+Pj5tgH5+f397pdfT09PT1r2GiYmJiYiNsbW0tLSztZWHiYmJiYaz1tLS0tLWun1+f39/f359fHx8fHx8fHx8fHx8fHx8fHx7fHx8fHx8fHx8fHt7e3t7hIuHh4aHgoGDg4GCgoKCgoKCgoKCgoGBgYCAgICAgICAgYCBgIB+fHx8fHx8fHx9fXx8fH19doyQj4+Pj5CDfn9/f39+hpCPj4+Pk3kZGhoaGhocMTMzMzMzMmqCf4CAgHut6eTk5OToyomMjIyMi5G7wL+/v7/BmoqMjIyMiL/p5eXl5enHfX5/f39/f319fXx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx7e3uCjYeIh4eDgoSCgYKCgoKCgoOCgoKCgYGBgICAgICAgICAgICAgH58fHx8fHx8fXx8fH19fX12eHh4eHh4eHd3d3d3d3d4eXl5enl5d29wcHBwcHBycnJycnJyd3p5eXp6en6Dg4ODg4SBfHx8fHx8fYCBgYGAgIF+fHx8fH18gYSEhISEhYJ8fX19fX19fX19fX18fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx7e4CMhomHh4SDhIKCgoKCgYKCg4KCgoGBgYGBgYCAf4CAgICAgICAfnx8fHx8fHx8fX19fX19fXZ2dnV1dXh2dnZ6e3h7eHd2eHt3eXp6fnx5eXh4eHh5eXl5enp5eXl5enp6eXh4eXl5eXl7e3t7e3t7enp6enp5enp7e3t7e3t6enp6enp6e3x8fHx9fX19fX19fX18fH19fX18fHx8fHx8fHx8fHx8fHx8fHx8fHx8f4uHi4qIhIODgoKCg4KBgoKDgoKCgYGBgYGAgIGAf4CAgH+AgYF+fX18fHx8fHx9fX19fX19d3d3dnZ3fXh3d316eH14d3d5fHt8enl8e3h3d3d3eHh4eHh5eXl5eXp6ent7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7fHx8fHx8fHx8fHx8fHx9fX19fX19fX19fX19fX19fX19fHx8fHx8fHx7e3x8fHx8fHx8fHx+iomMjImFg4SEgoKDgoGCgoKCgoKBgYGBgYCAgICAgICAf4CAgH19fXx8fH19fX19fX19fX13d3d3d3p9eHt4fHx3e3h3d3d8fH19eXt6eHh4eHh4eHh4eHh5eXl6enp6e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3x8fHx8fHx8fHx8fHx8fHx8fX19fXx9fX19fX19fX19fX19fHx8fHx8fHt7fHx8fHx8fHx8fH2Kio2NioWDg4OCgoKCgYGCgoKBgoGBgYKBgIGBgICAgIB/gIGAfXx9fX18fX19fX19fX19fXd3d3d3fX55d3d4e3p8eXd3d3p8fHx6fHl4eHh4eHh4eHh4eXl5enp6ent7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3x8fHt8fHx8fHx8fHx8fHx8fH19fX18fH18fH18fHx8fX19fX18fHx8fHx8fHx8fHx8fHx8fHx8foqJjo2JhISEg4KDgoKBgYKBgoKCgYGBgoGAgYKAgICAgH+BgIB8fH19fX18fX19fX19fn5+d3d3d3d5fHl7eHx9eXt5enp6fXx8fXp8eHh4eHh4eHh4eXl5eXp6enp7e3t7e3t7e3t7e3t7e3t7e3t7e3x8fHt7fHx7fHx8fHx8fHx8fXx8fX19fX19fXx8fHx8fHx8fXx9fX19fXx8fHx8fHx8fHx8fHx8fHx8fHx/iIeNioeFhoaDg4ODgoGBgoGCgoGBgYGCgYCAgoF/gICAf4CAgHx8fX19fX19fX19fX5+fn53d3d3d3Z4eHl3eXp4enh5eXl7eHp7eXl4eHh5eXh4eHh5eXl5enp7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t8fHx8fHx8fHx9fX19fX19fX19fX19fX18fH18fH19fX19fH19fX19fHx8fHx8fHx8fHx8fX+HiIyIhoeHhIKDhISCgYKBgYKCgoGBgYKBgIGBgYGAgIB/gIGAfHx9fX19fX19fX1+fn5+fnd3d3d3d3d3d3d3eHh4eHh4eHh4eHh5eXl5eXl5eXl5eXl6enp6ent7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7fHx8fHx8fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fHx8fHx8fX19fHx8gIeIi4eHiYaDg4SDg4KBgYGCgoGBgYKCgYGBgIGBgYCAgICBgX97fH19fX19fX19fn5+fn5+d3d3d3d3d3d4eHd4dnl5eHh4eHh5eXl5eXl5eXl5eXl5enp6enp6e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7fHx7fHx8fHx8fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fHx8fH19fXx9fXyBhoqKiYmIhIOFhISCgoGBgYGCgYGCgoGBgYCAgYGAgIGAgIGBf3x8fX19fX1+fn5+fn5+f394eHd4eHh4eHZxZGpeam15eXl4eHl5eXl5eXl5enp6enp6enp6enp7e3t8e3x8fHt7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3x8fHx9fHx8fH19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fIGFiYqJioeEhYWEg4KCgYGBgoKBgYKBgYGBgYCBgYCAgYCBgIF+fH1+fn5+fn5+fn5+fn9/f3h4eHh4eHh5bWRiZV9fXm95eXl5eXl5eXl5eXp6enp6enp6enp6e3t7e3t7fHx8fHx8fHt7e3t7e3t7e3t7e3t7e3t7e3t7e3t7fHx8fHx9fHx8fH19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18goWKiomJhISGhYSDg4KBgYKCgoGBgoGBgYKBgIGBgICAgICBgH58fX5+fn5+fn5+fn9/f39/eHh4eHh4eW5kZWdlZGJeZnh5eXl5enp6enp6enp6enp6enp6e3t7e3t7e3x8fHx8fHt8fHt7e3t7e3t7e3t7e3t7e3t7e3t7fHx8fHx8fHx8fHx9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXyChouJiIqEhYaEg4OEgoGBgYGCgYKCgYGBgYCAgYGBgIB/gIGBf3x8fn5+fn5+fn9/f39/f394eHh4eHl3Z2VkZWZkZWFfaXl6enp6enp6enp6enp6ent7e3t7e3t7e3t7e3t8fHx7e3t7e3t7e3t7e3t7e3t7e3t7e3t7fHt8fHx8fHx8fHx9fX19fX19fX19fX19fXx9fX19fX19fX19fX19fX19fX19fX19fX19fIKGi4eJh4SEhoSDg4WBgYGBgYKCgYGBgYKBgICAgYGAgYCAgYF+fHx/f35/f39/f39/f39/gHl5eXl5eWtlYWJlZWFlZV5ieHdze3p6enp6enp6enp6e3t7e3t7e3t7e3t7fHt7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t8fHx8fHx8fH18fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19g4aLhoiFhYaEgoOEhIKBgYGBgoKBgYKBgYGAgYGBgYGAgIGBgn98fH9/f39/f39/f3+AgICAeXl5eXl0Y2NlZGNmY2doZGZsZF5ze3p6enp6enp6enp6ent7e3t7e3t8fHx7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3x8fHx8fHx8fH19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX1+fn6DhouGhoaGhYODg4SDgYGBgYGCgoGBgYKBgYCAgYGBgYCAgYGBfnx8f39/f39/gICAgICAgIB5eXl6d2RhY2diYmRdW2VfYV1eYGFoeHp6enp6enp6enp6e3t7e3t7fHx8e3x7e3t7e3t7e3t7e3t7e3t7e3t7e3t8fHx8fHx8fHx8fH19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX1+fn5+fn5+foSFi4eGhoaGhIODg4KBgYGBgoKCgYKBgoGAgIGBgYGAgYGBgYF+fX1/gH+AgICAgICAgICAgHl5eW9vYmJiZF5jZ19dYWFgXF9kYlttfHp6enp6enp6enp7e3t7fHx8e3t7e3t7e3t7e3t7e3t7e3t7fHx7e3x7fHx8fHx8fHx8fH19fH19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX5+fn5+fn5+fn5/hIiLhoSHhoaEhIODgoGBgYGCgYGBgYKCgYCAgYGBgYGBgYGBgX5+fYCAgICAgICAgICAgICBeXpwXWJlZGJkXmZnZ2BZYmJhY2VfXF1ze3t6enp7e3t7e3t8fHx8fHx8fHt7e3t7e3t7e3t7e3t7fHx8fHx8e3x8fHx8fHx8fHx8fHx9fX19fX19fX19fX19fX19fX19fX19fX19fX19fn19fn5+fn5+fn5+fn5+foCFjIqEhYaGhYODg4SCgYGBgYKBgYGBgoKCgYCBgYGCgICAgIGBf35+gICAgICAgICAgIGBgYF5emxiZGdjYmdmYWBgZGFiZWRjZGNeXGJ1fHt7e3t7e3t7e3x8fHx7e3x8fHx7e3t7e3t7e3t7e3x8fHx8fHx8fHx8fHx8fHx8fHx8fH19fX19fX19fX19fX19fX19fX19fX19fX1+fn5+fn5+fn5+fn5+fn5+fn9/gYeMiYWGhoeFg4SDgoGBgYGBgYKBgoKCg4KBgIGBgYKBgYGCgoF/f36AgICAgICAgIGBgYGBgXp7dGdnZmZkZGZmYF5fYWNlaGRlXmJkYHR8e3t7e3t7fHx8fHx8fHx8fHt7fHt8fHt7e3t7fHx8fHx8fHx8fHx8fHx8fHx8fHx8fH19fH19fX19fX19fX19fX19fX19fX19fX19fX5+fn5+fn5+fn5+fn9/f39/f3+CiYqIhoaIhoWDhIOCgYGBgYGBgoGBgoKCgoGAgYGBgoKBgYKCgX9/f4GBgYGAgYGBgYGBgYGBenptaGNjZ2ZnZWdmZmdiZWRlYmdbYmVgdnx8e3x8fHx8fHx8fHx8e3t8fHx8e3x8fHt7fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx9fXx9fX19fX19fX19fX19fX19fX19fX19fn5+fn5+fn5+fn5+f39/f39/f39/f4SJioiGiYeFhYSEg4KBgYGBgYGCgYKCgYGBgYGBgYKBgoGBgICBgH9/gYGBgYGBgYGBgYGBgYF7emlpZGNqZmFgZmVjY2NnaWRjYmBiZGJ0fXx8fHx8fHt8fHx8fHx8e3x8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fH19fX19fX19fX19fn5+fn5+fn5+fn5+fn5+fn5/f39+fn9/f39/f39/f3+AhIqMiIeJhoSFhYOCgYGBgYGBgYKBgoGBgYGBgYGBgoKBgYGBgYGAgH+BgYGBgYGBgYGBgYGBgXZzZWRnY2RmZWJlZmdkZmhmZWNgYGNkYHF9fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fXx8fHx8fHx9fX19fX19fX19fX19fn5+fn5+fn5+fn5+fn5/fn5+f35+f39/f39/f3+AgICFioyJiIqJhoaDgoKCgYGBgYGBgoGBgoGBgYGBgIGBgYGBgYGCgX+Af35/foCCgoKCgoKCgoKCc3NnZWRkZWlqaGZnZ2NhZmZlZmdmZWVjdX18fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fX19fX19fH19fX19fX1+fn5+fn5+fn5+fn5+fn5+fn5+f39/f39/f39/f39/gICAgICAgIWLioqJioeHhoSCgoGBgYGBgYKCgYKBgYGBgIGBgoKBgYGBgYGAf4B+dHRzdX1/goCAfn5/gYB0cmdkZWNmaWppZWNlY2BmZGRnZ2JiZWFwfXx8fHx8fHx8fHx8fHx8fHx9fX18fHx8fHx8fHx8fHx8fHx9fX19fX19fX19fX19fX19fX19fX1+fn5+fn5+fn5+fn5+fn9/f39/f39/f39/f39/f39/f4CAgICAgIB/houLiouLh4eHhIOCgYGBgYGBgYKBgoKBgYGBgYKCgYCBgYGBgoCAgH5zc3NzdHV4dXV0dHV2dXVwZmNmZWhoaWdoZ2VmZWJfZGVmY2BiZ3d8fHx8fX19fX18fHx8fH19fX19fX19fXx9fXx8fX19fX19fX19fX19fX19fX19fX19fX19fn5+fn5+fn5+fn5+fn5+fn5+f39/f39/f39/f39/gIB/f3+AgICAgICAgICHjIyIi4qHh4eEhIKBgYGBgYGBgoGCgoGBgICBgoGBgYKBgoKCgYCAfnNzc3Nzc3NzdHR0dHNzdW9jY2FnZWhoZ2pmZGVnZmhmY2JlYl5ieX18e3t8fX19fX18fHx9fX19fX19e3x9fX19fX19fX19fX19fX19fX19fX5+fn5+fn5+fn5+fn5+fn9/fn5+fn5+fn5/f39/f4CAgH9/gICBgICAgICAgYCAf4CAgYGAgIeLi4iNiYiJhoSFgYGBgYGBgYKCgYKCgYGBgIGCgoGBgYKBgoKBgIB+dHNzc3Nzc3Nzc3Nzc3N1cmdlZWRlamhoZ2ZpaGdjZWViZGNoZGd7eHVzc3R2dnl4dnR0dHZ3d3d2dHR0dXV4d3h4d3d6e3x9fXx9fn5+fn5+fn5+fn5+fn5+fn5+fn5/f39/f39/f35/f39/gH9+fHt7fX58eXl2dnZ5fHx6end2d3l7fXt4hIyMioyHh4iEhYSBgYGBgYGBgoGBgoGBgYGAgYKCgYGBgoGBgoGAgH51c3Nzc3Nzc3Nzc3Nzc3VzaGVnaGVrbGhqZ2lqZ2dnZmRkYmVkbnV0dHNzdHNzc3Nzc3Nzc3Nzc3NzdHNzc3Nzc3Nzc3N0dHV1c3V3eHl7fn59fn98f39/f39/f39/f314fH5+fXx4dXZ3eXd4dnRzc3N0dXRzc3Nzc3NzdHNzc3R0c3R0dHODjI2KiYeIhoOGg4GBgYGBgYGBgYGCgYGAgYGDgoKBgYCBgYGBgICAf3VzdHRzc3Nzc3Nyc3NzdnZpY2hqaGpsZWZpbGhgZmVkY2BkZGZ0dXV1dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHRzdHRzc3Nzc3R2dnV1d3V4fH9+fX9+fHp4dXN0dXV1dHNzc3Nzc3N0dHR0dHR0dHR1dXR0dHV1dHR1dXR1dXV1dIaMjYuIhoeEhIWCgYGBgYGBgYGCgoGAgYCBgYKCgoGBgIGBgYGAgIB/dnNzc3Nzc3Nzc3Nzc3N2dnNnZ2pmaGdmaGhmZGlnY2NnZWVmcHZ1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dHR1dHR0dHR0dHRzdHR0dnV1d3Z0c3R0dHR0dHR0dXV1dXV0dXV1dXV1dXV0dHNzc3N0dHNzdHR0dHR1dXR1iY6MjIqHh4SEhYKBgYGBgYGBgYKCgoGBgICAgoKCgoGBgYGBgYCAgH93c3Nzc3NycnJyc3NzcnZ2dW5kXWNnZWlraGVoZ2dqamlnZXB2dXV1dXV0dHRzdHR0dHR0dHV1dXV1dXV0dHV1dHR1dXV1dXV1dXV1dXR0dHV1dXV1dXV0dHV0dHV1dXV1dXV1dXV1dXV1dXV1dXV0dHNzc3Nzc3N0dHNzc3Nzc3R0dHR0dHWKjoyMiYaGhIeFgoGBgYGBgYGBgoKBgYGAgYGCgYKBgYGBgYKBgICAf3hzc3Nzc3JycnJyc3NzdnZ3d2liaGhnamtpaGZkZGVmaWhwdXR0dHRzc3JxcnJ0dXV0dHR0dHR0c3NycXFxcXNzdHR0dHR0dHR0dHV0cnJyc3R0dHR0dXV1dXV1dXR0dXR0dHR0dHR0dHR0dHR0c3Nzc3Nzc3Nzc3Nzc3N0dHN0dHR0dHR0dYuOjImGhYWFh4SCgYGBgYGBgYGBgoKCgYGAgIKCgoGBgYGBgYGBgIB/eXNzc3NycXJycnJzc3N3d3d3bGpoZGhpa3Z6a2VmZWhnbXJzdHN0c3JwcHBxcnN0dXR0c3NycnNycXBvb29vcHFzc3NycnJyc3R0dHNxcHFyc3R0dHR0dHRzc3Rzc3NzdHR0dHRzdHR0dHR0dHRzdHR0c3NycnFxcnJzc3Nyc3NzdHR0dHN2jZCMh4eFhYSEgoGCgoGBgYGBgYGCgoKBgYGAgYGCgoGBgoKBgYGAf395c3NycnFxcnJycnNzc3d3d3dzc2pnaWloeX99cW51bG5wcXJycnFxcG9wcXFxc3Rzc3NycXFwcG5ubm1ubW5ubnBxcnJycnJycnJzcXBvb3BxcnJzc3JxcnJycnJycnJycnJzc3Jzc3Nzc3Nzc3Nzc3Jxb29ubm9vcXJzc3Jyc3NycnNzcnaPj4uHhoWFhYOCgoKBgYGBgYGBgYGBgoGBgYGCgoKBgoGCgYGCgX9/f3hxcHBwcXFycnJyc3Nzd3d2dnd2cnF0c252f352c3hwcHBycnJycXFwcHFxcXFyc3Nzc3FwcXBvb25ubm5ub25vcHBxcXFxcXBwcXJwb25vcHFxcXFxcHBxcXFxcXJycnJycnJycnFxcnFxcnJycnFwb29ubm1ubW5vcXJycnJycnJyc3JxeI+OjYaDg4aEgoOCgoGCgYGBgYKBgYGCgYGBgYKCgoKCgoKBgYKBf4B/d29wb3BxcnJyc3Nzc3J2dnZ2dnZ3dnZ1c3l/fnd3d29wcXFxcXFxcHBwcXJxcnJzc3JycXBwb29wb29vb29vb29wb3Bvb29vcHBxb29vcHBwcHBvcG9wcHFycXFxcnJycnFxcXFxcXFxcHBwcHBxb29ubm5tbW5tbm9wcXFxcXFxcXFxcXB7j42NhoODhYOCgoKCgYKBgYGBgoGCgYGCgoGCg4KBg4KBgYGAgYF/f392bm9wcHBxcXFxcXBwcHZ2dnZ2dXR0c3NxfYB9fX9zb3BxcXFwcHBwcXFwcHBxcnJxcXFwb3Bvb3Bwb29wcG9vb29vb29vb3BxcXBub3Bwb29wb29wcnJycnFxcXBxcnFwcXFxcHBwcHBwcHBwb29ubm1ubm5ubm9ub3BwcHFxcXFxcXFxcIKRjoqEhIOFhIOCgoGBgoKBgYKBgYGBgYGCgoKCgoKCgYGBgYCBgX9/gHVvb29wcXFxcXBwcHBwdnZ2dXRzcnJycnGAgoCBeXBwcHBvcHBwcHFxcXFwcXFxcXFxcG9vcHBwcHBwb3BxcHBvb29wb29vcXFwcG9wcG9vb25vcHFxcHBwb3Bvb3BwcHBwcHBwcHBvb29vb29vbm5tbW1ubm5ub25vb3BvcHBwcHBwcHBwiZCMiISDhIaDg4KCgYGCgoKCgYGBgYCAgYGBgoKBgYGBgYGBgIGBgH+AdG5vb3BxcXFwcG9vcG92dnVzcnFxcXFxcICDg39ycHBwcHBwcHBwcHFxcHBxcXFxcXBwcHBwcHBwcHFwcHBwcHBwcHBvcHBxcXBwcHFxb29vbm9wcHBvb29vcHBvb3BwcHBwcHBwcHBvb29vbm5ubm5ubW5ubm1ubm9wcG9vb29vb3BzcXWPj4uJg4KFh4ODgoKBgoGCgoKBgYKBgYGBgYGBgYGBgYCAgYGAgYGAf4B0b29vbm9vb29vb29vb3Z1dHNxcXFxcXJygIKCgXRxcXFxcXFxcXFxcXFxcXFxcXBxcXFxcHFwcXBxcXFwcHBwcHFxcXBxcHBwcXBwcHBwcHBwcHBwcHBwcHFxcXBxcHBwcHFwcHFxcHFxcXFxcXJxcnFwcnRycnR0dHR1dnRzdHR0dXd3gpCPi4iDgoaHhISCg4GBgYKCgoGBgoGBgYKBgYGBgYGAgICBgYCBgYB/gHVvb29vb29vb25vb29vdXRzcnJycnJycnKDg4OCdnFycnFxcXJxcnJxcXJycnFxcXFxcnFxcXJycXFycXFxcXFxcXFxcXFwcXFxcXFxcnNzcnJyc3V1dHR0dHR0dHV2d3d3d3d3eHh4eHd3eHh4d3Z3dnV2dnZ2d3h6e3x7e3t6enp6enyGkI2LiIODiIeHhYODgoGCgYKBgYGBgYKCgoGBgYGAgYCAgYGAgIGBgH+Ad3FxcXFxcG5ucG9wcG92dHV1c3Nzc3NzdYiDgoN5cnNzcnJyc3Jyc3NycnJycnN0cnJzcnNzc3Nzc3Nyc3N0dHV1dXV1dHV3eHd3d3d4eHh3eHh4eXl5eXl4eHl5eXp6e3t7e3t6enp5eXh3d3d1dnV2dnd5enp7fn5+fX1+fn5/f35+gIyQi4qHg4WIi4iEg4SDgYGCgYGBgoGBgoKCgoKAgYGBgYCBgYGAgIGAf4B8enp5eXx5eHh2dXZ2dHl2d3h3d3Z3dnZ6f3x+fnx2dnd3dnV4enh4eHh3d3d2eHx5eXx6eXl8e3l5eXh4eXl6enl5eXh4enp5eXh4eHh3dnd3eHh3eHh5eXp7e3p8fH1+fX9/f359e3t7e3p5enl5e3t/foB/fn5/fn19fX5+f35+fn6AjpCNioeEhoqLiIaGhIOBgoKBgYGCgYGCgoKCgoCBgoKBgYGCgYCBgIF/f4B/fn19fX9/f318e3t7eXh4eHh5eXl4eXh5eXl4enp6enp6e3t7fH1+fHt7ent8e318e3t7e3t7enl4eXh4ent6enp5eXp8fHt6enx8fHp6ent9fHx+fn+AgoGAgYKAgH9/gYGBgIB/f35+fn5/fX1+f4CAf35+f39+fn9/f39/gH+Af4OQjoyHhoWIi4yIh4aFg4GCgYGBgYKBgoKCgoKBgYKDgoGBgYGBgIGBgIB/goOCgoGBgX99f39/f4F6enh4d3h4eHh5eHh5enp5e358enx9fXt8fX19fHx8fnx9fn5+fn59fX9/f3x8fYGDgYCAf318fXx9fXt9fXx8fH19fX1+gYGChISDgoB/gYGBgH9/f4B/f39/f39+fn9/f39/f35+f3+Af39/gICAf4CAgICAhJCPi4eGhoiLi4mKhYaDgoKCgYGBgoGCgYKBgYGBgoOCgYCAgYGAgIGBgH+ChIKCgICAgH9+fn+AgH9/fn18fX19fYB/fX+Af35/gH9/fn9/gIGBgICAf3+BgICAf4CBgn9/f4CAf35+f39+f39/fn5+f39/gYB/f4CBgYCAgYOEgoGCgoGCgH+AgYCBgYGAgH+BgICAf39/gICAgYGBgIGBgYCAgICBgoGBgYCAgYGFjo6MiYaHiYyLi4qGhoOCgoKBgYGCgoOCgoKBgIGBgYKCgICBgYCAgYGAf4KFg4KBgYCAf39+fn+AfX5+fn19fX5/fn9/f35+fn+AgYCAgICAfn9/fn+Af3+AgH9/f35/f39+fn59fn9+fn9/f35/gIGBgoKDg4KCg4KBgYKDg4OCgYGBgYKBgoKCgYKBgoGBgYGBgoKCgYGCgYKCgoGBgoKBgYKCgoKCgYGBgoKCgoaPkY+KiImKjY6NiYaFgoKCgoKBgYKCg4KCgoGBgYGBgYF/gIGBgYCBgIF/gYWEg4KCgoGCgYCAgIB8fHx7fH18fH9+fn9+fn5+f35+f39/f39/f35+foB+fn5+fn9/f39+f39+fn5/gIB/gIB/f39/f3+BgYGCgoCAgYKDg4SDg4ODgoKCgoKCgoKCgoKCgoGCgoKDg4OCg4ODgoKCgYKCgoODg4ODgoKCgoODg4KCh5KTkIuKi4uPj42Kh4SCgoKCgYGBgoKDgoKBgYGBgIGBgICAgYGBgIGAgYCAg4SDg4OEg4ODgoKCgXx9fHx9gn1+f4GCiIGCgoSCgYGDg4GBgYKDgYKBgYCAf39/gICAf3+AgX9/f39/gYCAgICAgH9/f3+AgICAgH9/gYODhYSEg4SDgoKCg4OCgoOCgoODg4ODg4SDg4KEhYWDg4SEgoKDhIOCg4ODg4OCgoODgoCKlJOPioqMjpCPjYuGg4KCgoKBgYGBgoOCgYGBgIGBgoGBgICBgYGAgYCAgH+BgoODg4SEhIOCgoKCfXx8fn6AgYOAg4OChIaFhoaFhIWFg4ODg4SBgYKEhIKDgoeDgoKAgoGBgoKCg4KCg4KDgoODgoGAgIKCgYOCgYKCg4OEhYWEg4OChISEhIOEhISDg4OEg4ODg4OEg4SDhIWEhISDg4ODgoKCgoKCgoKBgYKCgo+UlI+Njo6RkY6KiISCgoKCgYGBgYGCg4GBgIGBgYGBgYCBgIGBgYCBgICAgIKChIKChIOCg4ODgoJ9fX2AgH+AgoGDg4ODhIaEhIOEhYWDg4GBg4OBgIKDgYKFhYWFhoaHhoWGhoeHh4aGhoeHhoaEgoGCg4SDg4ODg4ODhISFhYWDhYSFhISEg4KBg4OCg4SEg4KCg4SCg4ODg4OCgoKCgoKCg4OEhIOFhYWFhoaIk5OTkI+Pj5KRjIqIgoKCgoKBgYGBgYKDgoKBgIGBgYGBgICAgYGBgICAgICAhISEgoKCgoGBgoKBgX+AgYOCgICAf4CCgoGDg4KCgYODg4SDg4KDhYSCgYGBgoSFh4eHh4aGh4eHiIiHh4eIiIiFhIOBgIGBgoKCg4GCg4SEhYSDg4OEg4OEhIOBgYGCg4OEhISDg4ODg4OEhIODgoSDg4ODhIWFhoeHh4eIiIiJiY6TkpKOj46Qko+LiYeCgoKCgoKBgYGBgoKCgoGBgIGBgYGAgICAgYGAgIGAgICDg4KCgYKCgYGAf4CBhYWFhoOCgYB+fn+BgoSCgYKDhIOCg4ODg4KChISDg4OBg4SFhISFhYSDg4SFhYKEhIWFg4KBgH9/gIB/gIGEg4OEhYWEgoKCgoOCg4OFhIKDhISEhYaGhoaGhoWFhoeHhYaIh4aHiIeGhoaIiYeGhYaGhoeIkZKSj46QjpCRjImHhYGBgoKCgoGBgYGBgoOBgYGBgYGBgICAgICBgYCAgICAgISEg4KBgoGAgYGAgYKIh4aHhYSCgH99fX6AgH+AgYGBgYGBgoGBgoSBgoGCgoKBgYGCgYKCg4GBgICAf4GAgH+AgH9+gIGBgYKCg4OEg4OEg4OCgoGBgoODg4SEg4SEhIOFhYaFh4eIh4eHh4eHh4eGhoaGh4WFhYaGhIWEhIWEhYaSk5GOjo+OkI6JiIeEgYKCgoKCgoGBgIGCgoKCgoKCgYGBgYGAgYGBgICAgYGAgoSDg4KDgoGCgYKDg4iHh4iHhYSCgX5+gICAfn5/f4CBgYGCgoGIkYKCgH+AgIB+gIKBgIGCg4OAf39/gICAf4CAgICDg4KDg4ODgoOBgYKCgoOCgYKCgoOCgoSDhISDg4SEhYWFhYaGhoaFhISEhYWEhIWFhYSEhISDhISEhISEipSTkpCQj46NiIaFhIOBgYKCgoKCgYGAgYKCgoKBgoKBgYCBgYCBgYGAgICAgYGAg4OCgoOCgoKBgoOCiImJiYiHhYSDgYKEhIOBgoKCgoSCgoOCgouYh4WEgoSCgX+AgoGBgoGChIOBgYGBgoOCgoGDg4SDg4SEg4OCg4KDg4ODg4KCgoKCgoGDhISEhYSFhYWFhIWEhIWFhYWDg4OEhISEhYWFhISEhISEg4ODg4OOlZKQkZGOjYyHhYODg4GBgoKCgoKBgYCBgoOCgYCCgYGBgICAgIGBgYCAgICBgICDhYSEhIODg4SDhIOGh4mIhoWDhIODg4WDgYCDgoSFhIOBf358iJuLg4SFhISEgoGAgYKDgoKEg4OCgoGBhIWEg4ODgoKDhISDg4ODg4SFhISDg4KCgoKCgoSEhYSFhYWFhYODhYWFhYaFhoWEhIWEhYWGhYWFhIWEhISDhIODhJGUk5KSj4yMioWEhIODgYKCg4KCgoKBgYGCg4KBgYKBgYGBgICBgIGBgH+AgIGAgYaGhoaGhoaHh4aGhYSDhYaCgIGBgYGHgoB+f4GAg42Ffnx+f39/mY+BgoKBgYKCgYCCgoKCgYKDg4GCgYKDhYODg4KDg4OEgoKEhIOEhIWEg4OCgoKCgYKCg4ODg4SFhYWFhIOEhYWGhYWEhISEhIOEhIWFhYWFhIODhIOEg4KGlJSSlJKPjYuHhISEg4KBgoODgoKDg4GBgoKBgoKCgYGCgYGBgYCAgYGAgICAgICAhYWFhYaGh4aGhoWGg4ODg4GAgoKCgYKAf35/f4CDlop9gH+Cin+NjYGBg4GBgYGChIOBgYKBgYKBgYKDgoODgoOCgoKCg4OBg4SDg4ODg4OEhIKCgoKDgoKDg4ODhIWEhISEg4OEhIODg4OEhIODg4ODg4SDg4ODg4KDg4KDgouUk5KTkY2NioaDg4OEgoGCg4ODg4ODgoGBgoGCgoKCgoKBgYGBgICBgYCAf4CAgICDhISFhYSFhYWEhIWCg4KDgoKDg4OBgICAgICAgIKajYKLgoKDgH+Eg4OEgoODg4KAgICCgoKDgoKDg4ODgoODhIKCgoODgoKDg4KCg4KDg4WEg4ODg4SDg4SEhISEhYWEhIWEg4SEg4OEhISEhISEg4SEhYSDg4SEhIODgoKDkJSSkpKPi4yIhoSFg4OBgYKDg4ODg4OCgYGCgoKCgoKDgoCBgoGAgICAgIB/gICAgISDhYWEhYWFhYSFhYOEhIWDg4SEhIKCgoOCgoSCgpiMhIWHh31/foCGhYWEhYJ/fX19f4KEg4ODg4OEg4ODhISEg4OEhISEg4SEhIOEg4OFhoWFhYSEhoWFhYSFhoWGhoWFhYWFhYWFhYWGhoWGhoaFhoaGh4aFhYWFg4SEhIeTk5KRkoyKiIWFhYWCgoGBgoODg4OCg4KBgYKDg4ODgoKBgIGAgICAgICAgH+AgICAhYWFhYWGh4eGhYWFhISFhYSEhISEg4ODg4OEhYSDkoiBgYCEf39+fYWHhoOAfn9+fn9/f4OEg4OEhISEhISEhISEhISFhYWEhYSGhYWGhYaGhoWGhYWHhYWGhYaGhoaFhIWFhYWFhIWGhoaHhoaGhoaHh4iIiIaFhYaEhYWGjZSTkpGQi4qHhoeGhIGCgYKDg4ODg4KDgoGBgoODg4KAgYGBgICAgICAgICAf4CAgICHh4eGhoeHiIeHhoaEg4ODhIODg4OEg4ODg4OEhISGg4GAhIyCfn19gYaBf39/f39/f35/gISFhIWGhoaFhYWFhoaHhoaFhoWFhoeHh4iHh4eGhoaHh4eGhoaGhoaGhYSDhIWFhYSFhYaGhoeHhoaGhoeHh4eIiIeGhoaHh4eRk5KQkZCLiIiFhoSDgoKBgoODg4ODgoKDgoKCgoOCgYCBgICBgICAgIGAgIB/gICAf4aHiIeHh4eIiYmIiIODgoKDgoSEhIWEg4KCg4SEg4OCgIGFhIOCgH5+gH9/f39/gIB/f4B/f4WFhoeIiIeHh4eIh4iHiIiIhoaHiIiJiYmIh4aHh4eIiIaHhoeHhoaFhIOEhYaFhYWFhoaGh4eFhoeGh4aGh4eHh4eHh4eFh5OTkY+RkIuHhoWGhIKCgYGCg4ODg4ODgoKCgoGCg4KCgIGBgYCAgICAgICAf3+AgYB/hoiIiIiHh4iJiYmIg4KCg4ODhIWHh4aFg4OFhISEg4GAg4WDgoOCgYGCgYGBgYB/gH9/fnt6gIaIiIqKiYmIiImJiYmKi4qIiIiJiouLioqIiIeIiIiHh4iIh4iGh4aEg4OFh4eHhoWFhISDhYWEhYWGhISEhYWFhoWGhYOJlJOQj5GOioaFhoWDgYGBgoKDg4ODgoKCgoKCgoKCgYGBgYGBgYCAgICAgIB/gICBgH+GiYiIiYeIiImJiIiEgoKDg4KDhImKh4aEhIWEg4ODgIGFhISCgoKCgoKCgH9+fH19fX9+fHt8g4eJi4uKioqIiIqJiImLiomJiImIioqJi4mHhoaGh4WGiIiJiIeGh4SDgoSIiIiIh4WCgoGDg4KDg4SCgoKDgoGEg4SDgY6TkpCPj4uIhYSGhIKBgYGBgoODg4OCgoKCgoKCgoGBgYGBgIGAgICAgICAgH+AgIGAf4WIh4eHhoeIiIiHh4SCg4OCgoOFiYqJh4WHhYSFhYOChISDhIOCgoKDgX59fX5+fn5+fX1+fX19g4eJioqHh4WGh4eHh4iHh4mGiIaIh4eJiIODhIOFhISFhYaIh4aFg4KCg4WHhoeGhoOCgoOEgoODhIKBgoGBgYODhIOEkZKRjo+Oi4eEhoaEgoGAgYGDg4ODg4KCgoKCgoKCgYGBgIGBgYCAgIB/gIGAf39/gIB/hYaGhYaGhoeHiIeGgYKEhIOChYeIi4qGhIaEgoaGgoKDg4ODg4OCgoF9fH1/gH9+fn59fH19fHp8hIaHhoSDgYODhIWFhYODhYSEhISEhIWEgoKDgYSEgYKDg4WGhYSCgYGCgoODhYOEhIWEhIaDhISFg4KDgYKDg4SFhIeSkY+Nj4yJhoSFhIWCgYCBgYODg4ODgoKCgoKCgoKBgYGBgYGAgICAf4CAgYB/gICAgICDhIWEhYWFh4eHh4aAgYGFg4OEhYSHiIWCgIB/goCAgYODg4ODgoJ/fX1/gICBf31+fn19fX16enp+g4SEgoGBgIGBgoKBf36BgYGCgYOAgoGCgoKBg4SAf4CAgYOCgICAgICBgYGCgYGChIODhYSCg4SDgoKBgoSDhYWGi5ORjo+Pi4iFhYOChIGBgYGBgoODg4KCgoKCgoKCgoGBgYCBgYCBgH9/gIGBgICAgH+AgIKCg4OChIOEhYWGhn+BfoCBgICAgIGDgn9+fn5+fYCCg4OCg4KDgn19fn6AgIGAfn19fX1+fXx6enp/goKAf39/f35/f4B+fYB/f4CAgX+AgIF/f4CAgX59fX+AgX9/foCAgH+AgICAf4CCf4CCgYGCgYGAgYGBgYKEg4aPkpCOj42Kh4eGg4OCgYGBgYGCg4ODgoKCgoKCgoOCgYGCgYGBgICAgH+AgICAgICAf39/gYKDhIGCgoOCg4SFgIB/fH19fn1+foCAf31/fn1+gYODg4KCgYF/fX1+f4CAgH9+fX19fHt7e3p6eXqAgH5+f35+fnx+f35/gH9+f3+Af4GAf359fn9/fn18fn+Af35+f3+Af39/f4B/f39+f4CBf4B+f39/gH9/f4B/hZKSj46Pi4uHiYWEg4KCgYGBgYKDg4ODg4OCgoKDg4KAgYKBgYGAgICAf3+AgIB/gIF/f36BgYSEgYKBg4OCg4OBgH98fn5/fX6Af4B/foF/f4CBhIOCgYB/f359fn5/gICAfn19fX17e3x6enl5eXt/fn5/f39+fX5/foCAf35/f4CAgoB/fH5+f35+fXx/f4B/fn9/f4B/f35/foCAfn2Af39+fn5/f35+f318fH2Fk5KOjIuKiImIhISEgoKCgYGBgoOCgoODgoODg4ODgYCBgYGBgYCAf39/f4CAgICAgIB/foCBhIOCgYGDhISDhICBgICBgIGAgYKCgoGBgoCBg4ODgYGBgYCAfX19fn5+f359fX19fXx8fHt6eXl5eX2Af4CBgYF/f4B/f4F/gICAgYGCgoB+gH5/fn5+foGAgYF/f39/gIB/f39/gYB+f4CAfn9/fn+Af31+fX17fIaTkYyLioeHioiGhoSDgoGBgYGCg4ODg4OCg4OCgoKBgICBgYGAgH9/f39/gICAgICAgH9+fn+BgYGAgISGh4aHgoSDhYOBg4ODhYSEhISEg4ODhIKCgoKCgX5+fX19fn6AfX19fX19fX19e3p6eXl5eYCCgoKEg4CCg4F/gYCBgYGDgoODgYGCgIGAf4CBg4GEgoCAgYCBgYCAgYCCgn+BgIF/gIB/gICAfn9/fnx8ipOQiomIiIiJiIaGhoSCgoGBgoKDg4ODg4KDg4KCgYCAgICBgYGAf39/f4CAgICAgIGBf359fn5/f39+g4aHh4iChYSFg4SFhIWGhYaGhoWGhYGBg4ODgoKAfX19fX19fn59fX19fX19fX18e3l5eXl4fIKDhIWCgYSDgoKDhYaCg4SDgYKCg4OCgoKCgYKFg4iFgoGBgYKCgYGBgYSDgoOCgoKCgYGBgIF/gIGAf36Ok4yHiIaIh4aGhYaGhIKDgoGCgoODg4ODg4OCgYGBgH+AgYCBgYB/gH9/gICAgH+AgYB/fn19fX5+f36Ag4SHiISGhoaFhoaHh4aHh4iHh4eGf32BgIGCgX59fX19fX19fX19fX18fH5+fnx7eXh3eHl5gIODf4ONhIOEhISXl4ODhIF9foGCgoGCgYKBg4aIjIWDgoKBhIKEg4KDhYSEhYOCg4OCg4OCgoKCg4OCgpKQi4iJh4mHhoaEhoWEhISCgYKCg4ODg4ODgoGBgYCAf4CBgIGBgH9/fn+AgYCAf4CAgH9/fn1+fn+Bf4CCgYWFhYaGh4eGh4eIhoaHh4eGh4V+fX18fX9+fX19fX19fX19fX19fXx7iJKCe3x6fIZ5eHl8gYF+iZaEg4OEhJSTgIGBf39/fn6Fi4B/gICEhpCJhYSCgoGFhYuDgYKFhYaGhIOFhYOEhIODhIOFhISIko6MiYiIiYeHh4WGhYSFhIKBgoKDg4ODg4OCgYGBgYCAgIGAgICAf39/f4CAgICAgYGBf39/f4CAgIGBgYGBg4OGh4aGh4aGiIeGhoaFhIOFhH59fHx8fX18fH19fX19fX19fX18fH+RlZaDe3qElHx4eXp7fICCg4GBgIOCgH58fn57iJF8fI6Wf31/f4KGioWDg4SDgYONiX9+f4OEhYWDhYaFhIWFg4SFhYaEhI6Rj4yKioyJiImHhYaFg4OCgYGCgoKDhIODgoGBgICBgICAgYGAgIB/f3+AgIB/gICAgX5+f4GBgoKCgoODgoOCgoWGhISFhYSGhIOEg4KBgIKAfn19fHx9fXx8fH18fH18fX19fHx8e4uRl4x6e3yBenp6e3x5eX19foB/gH98e3t+fn2ClZF/hIh+fH5/goR8fIGChIKAf4eDfYKBf4KCgIODhISEhISChIOEhYKEkZGOi4yMjoqJiYWFhYODgoKBgoODgoKDg4KCgYGAgIGAgICAgICAgH+Af3+Af357gICBenyAgYKDhYODhYWFhYODg4SCgYKDgoOCgoGBgIB/gX5+fX59fHx8fHx8fHx8fHx8fHx9fHx8fn6Kgnt6e3p4ent7fH17fn1+f319fX18fH+BgX2Gj4F+fYJ+fn6Agnx8f3+CgIKAfnx7ioJ9gH9+gYCAgYKBgoCAgIGAf4uTj4yLjY6NiIeHhYWEhIOCgoKCg4OCgoODgYGBgICAgICAgH9+fXx7fHx9f3+AgHx6gYF4e4CCgYOFhIOFhIaHhISAhpSIgIKBgYGBgH9/f39/fn5+gHx8fHx8fHx8fHx8fHx9fHx8fHx8fHl7e3t4eHl7enp8gX+Afn+BfH5+f399gIKCgICAgX+CkYF/f4CAfoB+fn9+gIGBfX19e319fXx9fHx9gH+AgH6Afn6ClJGMjI2NjoqFhoaFhISFg4OCgoODg4OCgoGBgYGAgICBgICAf4CAf39/fXt6fICAgHh+gXd7gIF/gYKCgoKDhoeGhn6IlYp+gYGAf4B/foB+f39/fn+Bfnx7e3x8fHx8fHx8fH59fHt9fHx8e3x8fHp6eXt8en2Fg4J/gYF+f35/gH6FgoF+gH9+foCFhoKAfn6Dhn9+fH6AgIGAf39+fX19fX57fH1/f3+AfX9+gIyRjYuNjo2Nh4SGhoWEhISDg4OCg4ODg4KBgYGBgYCAgYGAgYGBgYGAgH9/f397en9/e3mAd3p/f31+f3+Af4KDhoaFf3+FgX5/gIB/gH5+f31/gIB/gIB/f319fHx9fn18fH19fX19fH58fXx7fXx8ent6fH19f4aEgoCAgX1+fX5/fouEgYZ+fXx8f36CgX99fX19gHx7fXx+gYSDgYB+fn5+fX1/f399foB+fn6Eko2Mi46Ni4qGhIWEhIODg4OCgoKDgoOCgYGBgYGBgYGBgYB/fXx8fH1+f39/f397e399d352eH59fH18fX5+gYGCg4B6fX18fn+Af36Af35/fn+AgH+AgH9/fn9+fn5+fn1+fn99fH59fn19fHt8fHx6e3p9fn+Ag4OCf35/fH18fXx8gYN+jH58e3t9fn1+fn17e3t9fHp7e3uAhoSChIOCf4B+f4KCgn9/goJ/gIqPjIyLjYuKiISEhIOEg4ODgoKCgoKCgoKBgYGAgoGBgYKCf3+AgIB/fn18fH5/fn55fX52e3Z4fXx8fHt9fX6BgICAf31/f31+f39/foB/f39+f3+AgIGBgH99gH9/fn9+fn5/f3yCfn59fX17e319fHp8fH6AgoGAgIB8fH18fHx8fH18fXt/fnt7e3x8fH18e3t7e3x8enp9en6CfoGDhIKBg4GFhoWFhoaHhoGEkY6Mi4qLh4iFgoOEhISEg4KCgYGCgoKBgoGBgYGBgoGBgoKAgYKBgYCAgH9+e3x+fnx6fnh5dnd8fHx7e318f4GAf35/foB/f35/f35/gH9/f39/f3+AgYKAfn6BgIB/f39/f39+fYN8fH19fH99fX19e3x+fn9+fn5+fnx8fHx8fHt+fnt8e3x8fHx9fH18fnx9fHx7e3x5e3x7e317fX5+f4CAg4eJiYmLiYuJhYiRjYuIiYeFhYOCgoOEhIOCgoKBgYGBgYKBgYGBgYKCgoGCgoCAgX98e3p6eXt9enx+fnl8eXh4dHx8fHt8fHx+gH9/f39/gIB/fn5+fX+AgH9/f3+Af4CDgoB/gIGAgIB/f4CAgH58enx9fX59fX5+jIZ9fX57e4OCfX5+fX18fX19fX1+fH18fXx9fX58fn19fX18e3t6fHt8fHt6e3t6enp7fn6ChYiHiIqLi4uJjJCOjYmIhoWEgoKCgoODg4OBgYGBgYGBgYGBgYGCgoOCgYKBgIGBf3+Af356eHl5en5+e3l6eH5zfHx8e3x8fH5+fn5/gH+AgIB/fn9+gIF/f4B/gIGAgoSEgYCAgYGAgX+AgYKBf39+f31+gH57foGRjHx9f4qAjYx+fn19fX59fX59fHx8fX18fXx9fX1+fX1+fnx7e3t8fH18e3p7fHl6eXh5e35/hIOEh4mKiImNj42LiIiFhISCgYKCgoKCgoGCgoKBgYGCgYKCgoGCgoKBgoKAgYGAfoCAf39+e3p5e319eHx6f3KBfXt7fHx8fn59fYGBf4GBgX9/gH+AgX9/gIGCgYGFg4SCgYGCgYKCgICBg4KAf4F/fX6Afnx+f4iCf36DkISEg4F/fn18jYd9fX59fHx/fnx9fXx9fX5+fX5/fX19e3x9fnx8e3x9enp5eXl5e3t+foCBg4eEiI2MioqGhYSEg4KBgoKCgoGBgYGCgoKBgoKCgoKCgoKCgoGCgn+AgIB+f39/fn5/ent5fX16enp9cX6Cent8fX19fXp4f4KAgYKCgICBgIGBgICBgoKCgoaFhIKBgYGBg4F/gIKEgX9+gYB9foF+fX5/gIB9fn+EgH5+f31+fX2KhX1+f31+foB/fX19fH5+fn99f4B9fn18fX9/fHx7fH17e3t6enp7e3x9fn6Ag4CJjYqLh4WFhYSDg4KCgoKCgYGBgoKBgoKCgoKCgoGBgoKBgYKCf4CAgH9/f39+fn59eXp6fXx5d3t0e4d8dHd9fn17e3Z2foCBg4KBgYKCgoKBgYGDg4OChYaEgoCAgICCgX+AgYOBfn6AgH1+gH59fn6AgH+Bfn+Af39/f398f39/f3+Afn9/gH58fX18fn5+foF/gH2CgHx9gIB9e319fXx8e3x8e3t7fHt8fHx9fImKiIiFhYWFhISDgYKBg4KAgIGCg4KCgoOCgoKCgoGCgoGBg4J/gIGAf39/fn5+fn57enp8fHt2e3R3f352cnt+fnt4dnd8gIGCgoKBgoODg4OCgoSDhIOFhoOCgX9/gIOAgICAg4F+foCAfX+AfX1+foCAf4J/gYGAgICBf31/f3+AgIGAgIB/fnx9fX19fn59g32AfoKAfX6AgX98fn59fX17fH58fXx8fHt8e3x9iYWGhYWHhYSFhIKBgoGDgYCAgoKDgoKCg4ODg4KBgYGBgYGCgH6AgYB/fn5+fn5+fn56e3p9goN9dXF6fHpxen59eXh1dICAgoKCg4KDhYOEg4KDhISEhIWEgYGAgH6Agn9+f36Bf35/f4B9foB9fX1+gH9/gYCCgYCAgIKBfn6Af4GAf4CAgH9+fX19fnx+fn19gYR/gH9+f4GBf31/f319fn1+fn1+fHt8enx7eoCGgoSEhYSEg4WDgoKBgYKBgICCgoOCgoOEg4SDg4KBgYKBgYOAfoCBf35+fn5+fX5+fnt7en6Jh354cnl9f3F6eHt4eXV1fYKDgoODg4OFhIWEg4OEhIODhIKBgH+Af4CBfn19foB+fn5/gH19f3x9fX6Af4CAgIKAgIGAgoGAf4B+gIF+gIGAgH9+fn5+fn5/fn6FhYGBgH+Ag4F/foGAf35/f4B/fn17ent6fHt6goR/g4KCgoOCg4GBgYCAgoGAgIKBg4KBg4SDhIKEgoGBgoGCgn9+gIF/fn1+fn5+fX59fXp7fIWEe3tzeXp8cHd1dnd5dXR6hISBhISDhIWFhoSDg4WEgoODgoCBf39/f4B9fX1+gH1+f39/fn1+fH19foF/gIB/gIB/gIGDgoGAf36AgH+AgYCBgH9/f39/f4CAgIGCgoKBf4CDgX+Ag4J/f4B/gX+Af3x7e3p8e3yBgH+Cf3+BgIKCgYF/f3+BgH6BgoKDgYGDg4KEgoSCgYGBgIGCgH6AgH9/fX5+fX19fn19e3t6gH94fHZ5eXtxdHh3dnh1cnmFhYKEhIKEhYWGhISChIOBg4GAgIF+f4B/gHx9fX6AfX5/f39+fX98fn5+gX+Bf39+f4B/gIODg4B/f4GBgIKBgYGAgICAgICAgIGAgYKDgYF/gISBfYGDhICAgX+BgYKBfXp7e3x8fH99f4B8f399fYGAgH59fYB/foKBgYKBgIKCgoKBg4KCgYB/gYKAfn9/fn99fX1+fX19fX19ent7fHZ9eXh5enJ1eXl2d3dzdYaFg4WFgYSEhYSEhIKDgoGDgX+AgX5/gH6AfX19fn9+f4B+fn99f3x/f3+BgIF/f3x+gH6AgYKDgYCAgoOEgoGAgYB/goCAgYGAgYGCg4KBgX+Ag4B+goKEgICCgYKChIJ+e3t8fHx8fX1+fXp+fX14fn9/fHx8fn5+gYCBgYCAgoGBgYGDgoGBf4CAgoB9fn19f319fX59fH19fX16e3p8dnx6d3t4cnZ5e3Z2dnN0hoSEhYSBhISFg4OCgYOBgYOBgIGBfX+BfoF9fX1/f39/gH5+f359fYB/gIGBgX9+fH5/fn5/gYJ/gYGCg4eFgX9/fn6Af4CBgICAgIKCgYCAfoCCf36BgoKBgYOCg4OFgn99fX18e3x8eXp7en55e3l4f357e3t+fX1/f4F/gH6BgICAgoOCgYF/gIGBf31+fH1+fX19fX18fn58fXx5e3x4enx3endzeHd6c3Z2c3SGhISFg4KDhISDgoKCg4GCgoGAgYF8gIB+gH1+fX5/gICAf35/f3x+gH+BgIGAf359f39+fn+BgH2AgIGDg4N/f359fn5+f4CAgIB/gYKBgH9+f4F+f4CCgoCBhIKEhIaEgH59fHx8fHp5dnl5enl2eXZ+fHt7e359e399gH99fX9/f3+BgoGBgX5/gYF+fX18fX19fX19fXx+jYF8fXl7e3p5fHd4eHR1dXhyd3d0doaEhIWEg4ODg4OCgYKDgoGDgn+Bf39/fn+AfX19fX+AgIB/f4B/fIB/f4GAgYCAf3yAf31+fn9/fX5+gIGCgn5/fn1+fn5+f3+Af32AgIB+fn5/gX5+gIKBf4GDgoOEh4SAgH58fXx8e3x1eXl4eHh5d3t8e3p7foV9fn1/ent+fn59foGAgIGAfX6BgH59fXx9fX19fX18e32Dgnx8ent7e3p7d3Z4dXJzdnB4eXJ4hYWFhYOEg4KChIKBgYKBgIKBgIF/fn5+foB+fX58foCAgH+AgX97gH6AgH+BgYB/fYB/fn5/f319fX6AgYGAfn9+fn59fX5/fn9+fH+Af35+fn+Cfn6AgIF/gYOCg4OGhICBfnx9fHx7fHh3e3h1eXd3eXx6e3t9kod9fH13en1+fn19f35+gH98foB/fn19fH19fX19fHt8ent9enp4e3x6ent4dHh1cXJ0cHh4cXmEhYWFg4SDgoODgoGBgoKAgYGAgIB9fn5/gH18fn1/gIGAf4CBgHyAf4B+f4GAf399gH9+f39+fX18gICAgIB+f35+fn18fn9/f358fYB/fn1+gIJ/foCAf36BhIKCg4WFgoJ+fnx7e3x8eXd7eXd4d3d4e3t6e3yFin17end6fH19fHx9fX1/fnx9fn59fXx8fX5+fX18fHt6enx7e3p5enp7enhzd3VxcXJweHdxe4WGhIWDhYKBg4OBgYGBgoCBgICBgH5/fn9/fXx+fYCAgoGAgIGBfX6Af35/gX+Af3+BgH9/f31+fH1/gICAgH9/f35/fXx+f39/f319f39+fn6CgYF/gIB/foGDgoKEg4SCgn5+fHx6fHt7eXt6d3N2d3h5e3p7eXp/fnt7d3p8fXx8fH59fH19fH19fXx8fX19fX99fXx9e3l7fHx8enp6enp6eHN2dXBwcm93dnJ7hYaEhYOEgoGDgoKCgYGCgYKBgYGAf4B/f399fX9+f4CBgYF/goF9foF+foCBf4B/gIKAgIB+fX58f3+BgICAf4B/f4B+fX5+f4B/f39/gH9/f4J/gH9/gIB/gYGAgISBgoKAf39+f3x9fn56fYV+dHx9enp6enx5eXp6hoV3eXx8fHx8fXx8fHx8fX19fHx9fX19fn19fX16eX18fH16enp6enp5c3V1b29xb3d0c3yFhoOEgoOCgYKBgoKCgYKBgoGBgYCAgICAgH59gH+Af4GCgn+BgX+AgX5/gYB/f4CAgn+Bf319f35/f4KAgICAgIB/gIB+fn1/gH9/gIB/f39/gH+AgICAgH+AgYCBgYGCgYCAf39/fn1/fnuBk416fH18e315e3p6eHmBgXh5e3x8fXx8fHx8fHx9fX18fH18fn1+fn59fHp8fHt8fXt5enp6eXlzdXVvb3Fwd3N0fYWGg4OCg4KAgYCCg4KAgYGCgYKBgYCAgIGAfn6Af4GAgYKCgIKCgICCfoCBgX9/gX+BgIF/fH6Af3+AgoCAgICAf3+AgH9+fX6Afn2AgIB/f3+AgICAgYCAf4CAgYCBgYKCgICAf39/fX5+fIGGiXx8fnt7fnl6e3p7jn53d3l7fHt9fHx8fHt9fH19fX18fXx+fn5/f358enx9e319e3l6e3p5eXN0dW5zcXB4cnV6hYaDg4KDgoCAgIKCgX+BgYKBgoGBgYKAgYF/fn9/gYGCgYKBg4OAgYJ/gYGBf4CAgIB/gX99f4F/gICBgICAf4B+gICAf359foB+fn+Af39/gH9/gICBf4CBgH+BgIGCgoKAgICAgIB9foB9gIOCe35+e3x9e3p8e3uHeXh4eXx8fH17fHx9fX18fH19fn19fX5+f3+Af317fH18fHx7enl7e3l5c3J1bnZycHhxdXaFhYOEg4KCgICBgoF/gIGCgoKDgYGDgoCCgYB/gICCgoKBg4KEhICBgX6BgoF/gICAgH+Cf36AgYCCgICAgIB/gH+AgIB/fn2Af39/f4CAgH+AgH+AgYF/gICAgIGAgYGBgYGAgYCAgH9/gH5/fX59fn57fXx9e3x8d3h1eHh5e3x8fXx8fHx8fX5/f39/fn19fn9/gIGAf3x9fHx9e3p7eXp8eHpzcnVud3FxenF2d4WFg4ODg4KBgYKDgH+CgYSDg4SBgYOAgoOBgYCAgIKDgoCCgoSDf4GAfoKDgICBgICAf4CAf4GBgIKAf4CCgH9+gICAgICAf4CAgH+AgICAgIB/f4CBgYCAgICAgYGAgoOCgoCCgYGCgYB/f4B/gId+fnx6fXx7fX94d3Z5eXl8fXx8fXt8fH19fn5/gIGAfn1+gICAgoGAfH59fX58d3t6ent5eXNxdW53cHV6cXZ5hYWCg4KDg4KDhISAgIOBhoOEg4GChICEg4KCgICCgoSBgYKChIJ/gIB/gYOCgYCBgYCAf4GBgYGAg4F+gIOCf35/goGAgIB+gYCBf4CAgYGBgYCAgIKBgYKBgH+CgYGBgoOCgoOBg4OCgYCBgH+AhH19fXx/fXp9f3p5dnp4eXt7fH19e3x9fX19fn+AgYGAgH+AgICDg4B9f35+fn15eXt6enp5c3J1b3dxd3lzd3uFgoKDgoOEgoOEg4CAgoOGg4ODgoKEgYSDgYKAgIKBhIGCgoGCgX6BgICCgYKBgYKCgIGAgICBgoGEgH6Bg4F/f4CDgoCBfoCCg4KAgYGBg4KDgoGBg4KChIGAgYOBgYKEg4KEhIODhIODgYGBgYCCf4B/fYB8enx/e3t3fHl5eXt6fX59fHx8fH1+foCBgYCAgIGBgYSEgH2Af39/f357e3t6e3p0cHhyeXR2eHR3e4SCg4KDg4SChIODgYKChYaEgoODg4SBhISAg4CBg4KCgoKCgIKAfoGAgIKBgoGCgoKBgIGBgYOCgoOAfoGDgX9/gYSEgYN/goKBg4KCgoGEg4OEgYKEgoOCgoGCgoOBg4SDhISEhISFg4SCgYOCgoOBgYGAgH58fIB8fHh8eXp5enx9f3x7fHx9fX18fICAgICAgYGBgYKBfoGAgICAf3t7e3p6enVweHd5dnV8dXZ8gICDgoODg4OEhISAgoOGhYWDg4KDhIGEhYKCgYKDg4GCgoKAgYB9gICBgYKDgoKCgoGAgYKCg4KCg4B/gYOBgICChIODgoGCgoGDgoKDg4ODg4SAgoSDg4OBgX+Bg4KDhYKEhISEhISDhISChIOEhIKBgoGBgHt+gX59eXx6enp9fXyBfXp8fH19fHp7fn5+gIB/gYGAgICAgIGBgIB/fX18fH18dnJ2eHh2dH92dX2Hh4OChIWDg4SFhICChYWEhIOCg4SEgISFg4KCgoODgYOCgoCCgH2AgIGCg4KCgoKEgoGCgoOEgoKBgICBgoGAgYOFhIOCg4CCgoOCg4ODg4OEg4CCg4KEg4KCfoOBgoSEgoODhISEhIOEhIOEg4WEg4ODgoKAe4CBf3x8fXp6e32AfX9/fHx6fH59fH19fn5/f39/gICAgH9+foCBgICAfnx9fX5/fn18e3h2f3Z3f4SHg4KDhYODhIaEgYKFhoWEhIODhISBhIWFgoKDg4SCg4KDgoKBfoCAgoKDgoODg4SCgYKCg4OCg4GBgYGDgn+ChISDg4KEf4KEg4ODgoSDg4SCgIOEg4SDg4KCg4KChIOCg4OEhISEhIWEg4OEhYSFhIOBgoB9gYKAfXx8e3x8gH19foB+fn1/fnx8fH19fn5/fn+BgYGBgH99fX6BgYB+fn19fX59fX5+f39/fH2AgYKCg4OGg4SDhoSBgoiHhYSDg4SEhYGFhYWDg4SDhIODgoOCg4F+gYGDg4SCg4OEhIOCg4KEg4ODgoKDgYOCf4KEg4ODgoOAgoWDg4ODhIODhIOBgoSEhYOCgoODg4GEg4GDg4SDhISEhYSEhIWFhYWEg4ODf32BhIB9fXx8fHx/gX5/f39/fX99e3x9fX19fX5+f4CBgIGBgH59fH6Cf39+fn5+fX1/f39/gICAf4CEhIODhIWDhIOFf36CiouFhISDgoOFgYaGhoOEhISEhIODg4OEgn+BgYODhYSFhIWEg4KEhISFhIODgoSDhYKBhISFhYaEgoCDh4SDg4OFhIWFhIGEg4OHgoOCg4GCgYSDgoODhYODhYWEhYWHh4aHhYSEhYSAf4GDf35+fH59fX+BgH9+fHx/f358enx9fX19fX5+fn9/gIGBf319fIB/gH5+fn5+f3+AgYGBgYKAgYWFhIOEhIKEg4aAgoWFiomEhIOEhYWDh4aGhISEhIWEhISEg4SDgYKDg4OEhIaEhYSDg4SEg3yDhHuBhHd5g4F9hH5+cnWDgoF2foOEgX2BdYF5g39/gH6EhIKDg4KBg4SDg4SFg4SFhoSFhn2EeXx+f4N7hYKBhIOAf319fn19gYOBfXt/fX6Afn18fHx9fX19fH19f4B/gYJ/fX18f4GBgICAgH+BgYGCgYKDg4KChoSEg4WEgYOEhYOEhYOKiIWFhYOFhYSGhoaDhISFhYWEhYWEhIWCgoOEhYWFhoSFhIOEhYWCaICFanx7cXF8gXOGc3R0fYKDdXNxg4Z0cHVyc3SDdnt9dYF/goOBgnZ5hYCDgIR/hYSChYWCaHpyc3N8gHOCg3+Dg32BfX5+fX6Cg4J8f4F9f4B9fXx8fHx9fHx8fn1+gH+BgX99fX2AgYKBgYGBgIGBgYKBgoKCgoSHhIWEhYSBgoSGhoOFg4aIhoaFg4aGh4eGh4OFhYaFg4KFhoSFhYODg4SEhoaGhIaEg4SFhn1xe4FweXZ+g3+CbnlwdXN8dnl5hXKEg3B2eHF2dHR1cnN0dml/gG5yb3R2bnVsd217c26Ah3ltfXJzdnN2bW14bHB5bHV9f399foGAgX2Af32Af4B/fX18fHx9fH1+f32Af4CAfnx/foCBgoCBgICAgYCAgIKDgoOEhYiGhoCChYODhIeGg4WFhYaHh4SDhoeIiYaHhIWGiIeEg4WGhYWEhIOFhIKFhoaFhoWEhoWHdnB0e3BydX+HhYNtdW92b3x1coR5eYd4cXR3bndod3pucHaCcoN+b3p5eW1vbnpvb213fXiGcHF6cHJ0ZoF1fm57eXNveX+Af319gYB/fH99fIB+gIB+foCAgYB+fn9+foF/gH9+fYB9f4CBgIB+fn+BgH9+goOCgoSFh4eEfoeEg4OFh4aEhoWFhoaIhISGh4iIhoeEhoaLioWEhoeHhYOFhYWEgoaGhoWGhYWGhYZxdXByc29zenl+hHSIdHV+iHZugnKEhnluanJ/cW1zd3x/dXR8hH54cXV3bnl1enF2eHV6eYRxam95eHBreXN6b3p3dnZwgYB/fn5/f356fn19f31/f359gIGDg4CCg4GBhIKBgIGBgH1/f4F+f35+f4GAfn6BgoCAgYSHhoODhoSEhYaHhoWFhYWGhoiFhYaFh4eFhoSGhomIhYSJioiFhIaGhYWDhYaFhoaGhoaFg3iLeXKIentwcIWEeIV4eWtzfnl7a3KDh4N6fG17eXl0fYB2bm+AgG90fHV3cXl9fW1+dW+DhYZ6gHJye3x1cG96bHN8bneCgIF+fn99fXt9e3x9fX9/fn1/f4KCf4GDgYGDgYB/gICAfn9+f31/fn1/gH58fYGAfn6Ag4iFhoOFhYWFhoeFhYWFhYeHiIaEhoWHhoaFhIWFhIWFhomJh4aEhoWGhoWGhoSGhoaGhoWGh4eHhoaEhoWGh4iHhYeGhoOHhoWFg4SFhoWGhIaEg4SEhoSEgYODhISFhIWEhYSGg4aHhYaEhIWHhoSEhYaEhX13hYOEhIKBgX1/fnt8e357fHx9f359fH59gIB9f4F/f4GAfn5+gH5+f35+fX99fX5/fHt8f358fH+BiYaFhIaGhoWHhoWFhYWGhoeIhoSGhYaGhYWDhIWGhYSGhoaGhYWGhIWGhoaGhIeGh4eGhYeIiIiIhoSHhYaGiIaFiIeIhYeGhoiFhYaHhYaGhYOChYWGhYWDhYSEhIWEhYWEhYWDhoaGhoWEhoeGhISFhoOFhIKEg4OFg4OCfYB/e3t8fXt8fH1/fnx8fn2Af31/gH5+gH99fXyAfX5+fn5+fnx8fX57fHx/fHt7fn+Ih4SEiIaGhoeGhYWEhoaGhoiHhIWGh4aFhIODhIaFhIeFhYaFhIaEhYaGh4eFh4aJiIaGh4eIiYiFhYiFhoeGh4aHhoeFh4eGh4WFhoeFh4aFgoOFhoaEhIOEhIOEhoSFhYWFhYOGhoWGhYWGhoWEg4WFg4SHhYOCgoWDhIF+gIB8e31+e3x7fX59fHx+fX5+fH9+fX1+fnx9fH98fn58fYGAfHx8fXx8fH56e3t8foiHgoWIh4eGhoaGhISGhoeGiIaEhYSGhoSFh4OEhYSFh4SFhoaFhoSGhoeHhoaHh4mIhoaIh4iKiIWHiIWHh4WHhoeGh4WIiIeHhYaGh4WGhoWBhISFhoWFhISEg4SFhYaGhoWGhIaFhoeFhYaGhYSDhISDg4eDhIGChISDgYCAgHt7fn18fHx9fXx8fH19fH18fn18fX18fHx8fXx+fXt8gX99fH18fnx8fHp6fHx9iIeChoiHhoeGhoaDhYaFhoaGhYOFhIaFhIiJg4GEg4SGhIaGhoaGhIeHiIiHh4eIioiGh4iHiImIhYiHhYeGhoeHh4WHhoiIh4eFh4eHhYaHhIKEg4SGhYeFhISEhISFhoaGhoaFh4WFh4WGhYeFhIOEg4OEh4GDgIKDg4KCgn+Ae31+fXt8fH59fH19fH17fHx8fHx8fXt7e318e358e3x/fX18fX1/fXx6ent7fHyIh4KGhoaGh4aGhYOFhoWFhYWEg4WChoSDiId/enqChYaEhoaFh4aEh4eJiIiHhoiKh4aHh4eIiYeFiIeGiIeGhoeHhYeGiIiHhoWHhoiGhoeDg4SEg4aGh4WFhISEhYaGhoaGhYaHhoaHhoaEhoWDhIODgoOGgYN+goKDgIOCf398f35+fHx9f318fX18fXp7e3p7fHx8e3t7fnt7fXt7e358fHx8fX5/fXt6fHp8fYmHg4aFhoWGhoWEhIWFhYWFhIOBhYGGhIKEhHyAhn+ChYWGhYWGhYSHh4iIiIaFiYqHhYeGh4eIh4WIhYaHiIaGh4eGh4aIiIeFhoeGh4WFh4OEhoWEhoaHhoWEg4WFhoaGhoaFhoaHhoeHhYOGhYKBgoKAg4WCg36BgYF/g4F/fn5/fX98fH1/fXt9fXx+enl6eXt8fXt7e3t+fHx8fHp7fXx8fHx+fYF8e3t7e3x7iYeEhoSGhIaGhYSFhoWEhIOEgoCDgYWDgYJ/eoSMe4CEhYeGhoaFhIeIh4aHhYWHiYeEh4WGhoiGhYeEhoeIhoaIh4eHhoeIhoSGhoaHhYWHg4SFhIaGhoeFhISDhYWGhoeGhoWGhoaFhoaEg4SFgoGCgYCDg4OCfYGBgH6DgX5/f4B8f3x9fX59e359fH15eXp5e319enp7e318fXx8ent9fHx9fH5+gHx7e3x+fXyIh4WGhYaEhoSFhYWFhYODgYOBgIKBhYJ/gH9/fXx7gYSFhoaEhYSDh4eGhoaFhIaJhoKGhIaGhoWFh4WHiImGhYiHiYeGhoeFhIaFhYeFhIeDhIWEiIaGh4WFhIKFhYaFh4aHhIaGhoaFhoODg4WAgIGAgIOBg4B8gYB+foKAfYB/gXx/fH1+fX57fn18fHl6enl6fX15enp7fHt8e3t6e319fH18f35+fHt7fX59fIiGhYaGhoSFhYSFhYSDgoKAgoGAgICDgX5+foB5en2Ag4OEh4WEg4OHhoOEhYSChYiFgoSDg4WFhYWHh4aIiIaFiIeJh4aFhoWDhoSFh4OEhoSEhYSHhoWGhYaEgoWFhoaGhoaEhYaGhYWGgoKDhH9+gICAgYCDgHuBf31+gn5+gH6Afn99fX59f3t/fXt6eXp6eXp8fXl6ent7enx6e3t7fH19fXyAfn18fH1/fnx7h4WFhoaGhoSFhIWDhYKBgICAgYB+f4KCfX1/f3t/f4KDg4WGhYSDgoaDgYOEgoCFh4WCg4GBg4SEhIaGh4iHhYWIhomHhYSEhIKFg4SGgoOFhISGhIeGhYWFhoOEhYSFhoWGhIOEhYWDhYWBgIODf35/gH9/gIN/fIB9fX+CfYCBfn6Bfn5+fX1/e398e3p5enp5enp8eXp6e3t7fHp7e3t7fX59fYB9fXx8fYB/fXyGg4aGhoaGg4SDhoKFgYGAf3+AgH5/gIJ8fn9/foCAgYKChIWDgoGChIGAg4KBgISFhYKBf4CCg4OEhYWHhoWEhoeFh4WFgoOCgoOCgoWBg4WEhYaEhoaHhoaFgoSEg4SGhYWDhIODhIOFhIB/goJ/fX5/fn5/hH57f3x8gIF9gYB9fYN9fn59fX57fnt7enl7enl6ent5enp6e3t8ent8e3t+fn1/gXx9fHx9f4B+gIaEhYWEh4SDg4KGgoOAgYB+fn+AfX9/gnx9f39+fn+BgYKEg4KBgYKCf4CBgoCAgoWEgoB/gIGCgYOFhYeFhISGhoOFg4WBgoGBgoGCg4GChISEhYWGh4eGhYSDg4ODhIWFhIGDgoOChIODgH+AgX59fX5+fH6Dfnx+fHyBgH6Cf31/gnx/fn19fHx8e3t6enp6eXt6enp5eXp6e3x5e317fH5/f4GAfX59fX1/gICAhoSEhYSFgoSCgoSCgoCBgH59fn9+fn6AfX2Af35+foGBgoODgoSHgYF+gICBf3+ChIOBf35/gIJ/goWEhYOCg4WFgoSBg4CBgIGBgYKBgIGEg4OGhYWHh4WEhIWCgoKDhYSCgYGBgYCFg4F/foB/fnx9fn18foN9e358fYF/gIN9fYCBf35/fXx8fH17e3p6enl5e3l6enl6ent7e3p7fXx8f3+BgoB+gH+AgH+AgYDKysrKysrKysrKysrLy8vLy8vLy8vLy8zMzMzNzc3Nzc3Nzc3NzczMzMvLy8vLy8vLy8vLy8vLzMvLy8vLy8vLy8vLy8vMzMzMzM3Nzc7Oz8/Pz9DQ0NHR0dLS0tLS0tLT09PT0tLS0tLS0tPT09TU1NTU09PT09PT09PT09PT09PT09PT09PT09PT09PT09PS0tLS0tLS0tLS0tPT09PT1NTV1dXV1dXV1dXV1dXV1dXV1NTU1NTT09PT09PT09PT09TU09PU1NTU1NTU1NTU09PT09PS0tLS0tPT09TU1NTU1NPT09LS0tLS0tLR0dHR0dPHhnNlYFtLWWdVTUZIQD03Nzg5Nzw8PDo8Oz42Oj04PDs6OTg3ODs7Oj87PTs8PD47P0E/QkJBQ0RFREE+PTw7QENDQUBDQ0FBR0hHSUtSwtXS09PT09TU1NTU1NTU1NTU1NXV1dXV1dXV1dXVysrKysrKysrKysrKy8vLy8vLy8vLy8vMzMzMzMzNzc3Nzc3Nzc3MzMzMy8vLy8vLy8vLy8vLzMzMy8vLy8vLy8vLy8vLzMzMzc3Nzc3Oz8/P0NDQ0NHR0tLS0tLS09PT09PT09PT09PS09PT09TU1NTU1NTU09PT09PT09PT09PT09PT1NTU1NTU1NTT09PT09LS0tLS0tLT09PT09PU1NTU1dXV1dXV1dXV1dXV1dXV1dXV1NTU1NPT09PT09PT09PU1NPT09TU1NTU1NTU1NPT09PS0tLS0tPT09PU1NTU1NTU09PT09PS0tLS0tLR0dHSzIxyZ2BcTVllUktHSz87Mzc4Ozg5Pj05PDpBOjs9Nzs8PDo6Nzg6Oz0/Oz88PTw/Pj9BPUFBPkNDREJAQT46Oz9DREFDRERCQklHSEhJTr7V0tPT09TU1NTU1NTU1NTU1NXV1dXV1dXV1dXV1crKy8vKysrKysrKy8vLy8vLy8vLy8vLy8zMzMzMzM3Nzc3Nzc3NzMzMzMzMy8vLy8vMzMzMzMzMzMzLy8zMzMzLy8vLzMzMzc3Nzc3Ozs/P0NDQ0NDR0dLS0tLS09PT09PT09PU09PT09PT09TU1NXV1dTU1NTT09PU1NPT09PT09PT1NTU1NTU1NTU1NPT09PS0tLS0tLS0tPT09PT1NTV1dXV1dXV1dXV1dXV1tbV1dXV1dTU1NTT09PT09PT09PU1NTU09TU1NTU1NTU1NTT09PT0tLS0tLT09PU1NTU1NTU1NTU09PT09PT0tLS0tHR0s+Sd2hfXk9XZ01LRkw9ODc2NTk5OTw+OT88RDo7PDc5PD07OTc5Ojw9QDs+PT47PD48PT5BQD5EQ0NDP0E9Ojs9QkNFQ0NEQT9FSEpJSky61dPT09TU1NTU1NTU1NTV1dXV1dXV1dXV1dXV1dXLy8vLy8vLy8rKysvLy8vLy8vLy8zLy8vMzMzMzMzNzc3Nzc3Nzc3MzMzMzMzMzMzMzMzMzMzMzczMzMzMzMzMzMzMzMzMzc3Nzc3Ozs/Pz9DQ0NDQ0dHS0tPT09PT09PT09TU1NTT1NTU1NTU1NTV1dXU1NTU1NPU1NTU09PT09TU1NTU1dTU1NTV1dTU09PT09LS0tLS0tLS09PT09TU1dXV1dbW1dXV1dXV1tbW1tXV1dXV1NTU1NTT09PT09PT1NTU1NTU1NTU1NTU1NTU09PT09LS0tLT09PU1NTU1dXV1dTU1NTT09PT09PT0tLS0dHRmn5nYWJOVWpKSElLPzw6OTM3Njc3PTs+OT06Ojo4ODo7Ozg4Ojs7PD46PT09Ojw/PD0/QkA/Q0RDRD5APT08QENEQ0JEQkQ+REhJSUtMttfT09TU1NTU1NXV1dXV1dXV1dXV1dXV1dXV1dXVy8vLy8vLy8vLy8vLy8vLy8vLy8zMzMzMzMzMzMzNzc3Nzc3Nzc3Nzc3MzMzMzMzMzMzMzMzNzc3NzczMzMzMzMzMzMzMzc3Nzc3Ozs7Pz8/Q0NDQ0NHS0tLT09PT09PT1NTU1NTU1NTU1NTU1NTV1dXV1NTU1NPT1NTU1NTU1NTU1NTU1dXV1NXV1dXV1NTU09PT09PS0tLT09PT09PU1NXV1dbW1tXV1dbW1tbW1tbW1dXV1dXU1NTU1NTU1NTU1NTU1NTU1NTU1NXU1NTU1NTT09PT09PT09PU1NTU1dXV1dXV1dTU1NTU09PT09PS0tLR0p+DaV9kU1hsSEhIS0A9Nzg0NzY6Oj87RDw8OTw8OTg6OTo6Ojs8Ojo7OT49Pjk9QDs/QUFCP0JCQUM9Pz8+PEBCRUNDQkBBO0ZJR01MSbLY09TU1NTU1NXV1dXV1dXV1dXW1tbW1tbV1dXW1svLy8vLy8vLy8vLy8vLy8vLy8vMzMzMzMzMzM3Nzc3Nzc3Nzc3Ozc3NzczMzMzMzMzMzc3Nzc3Nzc3Nzc3Nzc3Nzc3Mzc3Nzs7Ozs7Pz8/P0NDQ0NHS0tLS09PT09PT09TU1NTU1NTU1NTU1NTV1NXV1dTU1NTU1NTU1NTU1NTV1NTU1dXV1dXV1dXV1dTU1NTU1NPT09PT09PT09PU1NXV1dbW1tbW1tbW1tbW1tbW1tbV1dXV1dTU1NTU1NTU1NTU1NTV1NTU1NXV1dXU1NTU1NTT09PT09PT1NTU1dXV1dXV1dXU1NTU1NTT09PT09LS0tSjiGxfZlJWakdIR0lBPjM2Njo7PDhDPEJBPjxBPDg5Ojw6Ojw8PDk8PTo7PD09PD89QD9AQT9AQUBCPD4+PzxCQ0NDRkBBQT1ISklOTUeu2NPU1NTV1dXV1dXV1dXV1dbW1tbW1tbW1tbW1tbMzMvLy8vLy8vLy8vLy8vLy8vMzMzNzc3Nzc3Nzc3Nzc3Nzc3Nzs7Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Ozs3Nzc3Nzc3Nzc3Nzs7Ozs7Oz8/P0NDQ0NHR0dLS0tPT09PT09TU1NTU1NTU1NTU1NTU1NTV1dXV1dTU1NTU1NTU1NTU1dXV1dXV1dXV1dXV1dXU1NTU1NTT0tPU1NTU1NTU1NTV1dbW1tbW1tbW1tbW1tbX19bW1tXV1dXV1dXV1dXV1dTU1NTU1dXV1dXV1dXU1NTU1NTU09PT09PT1NTU1NXV1dXV1dXV1dXV1NTU1NPT09PT0tLWroprY2VSWGhMSkdJQjg0OTQ6Ozo5QDk/Q0VAPDw5OTk9Oj07PDw6PTw7OTw9Ozs/PUA9PT5AQD9CQT5APD05QERDQkFBQj48SEpLTU5IqNnU1NXV1dXV1dXV1dXW1tbW1tbW1tbW1tbW1tbWzMzR09PT09PT09PT09PT087Ky8vLzMzMzMzMzMzMzM3Nzc3Nzc7Ozs3Nzc3Nzc/Pz8/Pz8/Pz8/Pz9DQ0dHR0dHR0dHR0dHS0tHV2djY2NnZ2dra2tvb29vZ2dnZ2dna2tra2tra2tjW19fX19fX19jX19fX19vb29vb29vb29vb29vb2dfX19fX19fY19bX19fW09LT09PT09TU1NTU1NbW1dXV1dXV1dXV1dXW1tbX1tbW1tbV1dXV1dXV1dXV1dTU1dXV1dXV1dXU1NTU1NTU1NTU09PU1NTU1NXV1dXW1dXV1dXV1dTU1NTT09PT09PS1bqKa2hoUlhlSUlMT0A5OTo0O0E8Nz05QUM+QD89ODo6Ozk9Oz4/Ojs8PDo7PDo7Pj1APT8/P0FAQUE/QTw8Oz5BRENBREA9PElJSk1ORqPa09TV1dXV1dXV1dXW1tbW1tbW1tbW1tbW1tbW1szNhG1wcHBwcHBwcHBwcGqn493d3t7e3t7e3t7e3t3S0NDQ0NDQ0NDQ0NDQ0ci5ubm5ubm5ubm5ubq6t6WkpKSkpKSkpKSkpKSnhmBjY2NjY2NjY2NkZGRlhIuKioqKioqKioqKioemuri4uLi4uLi4uLi4ubSPjIyMjIyMjIyMjIyMiqC6uLi4uLi4uLi4uLi3vdLS0tLS0tLT09PS09PT3OLh4uLi4uLi4uLj4+Pi2NfX1tbW1tbW1tbV1dXV1dXV1dXV1dbW1dXV1dXV1dTU1NTU1NTU1NTV1dXV1dXW1dXV1dXV1dXV1NTU1NTT09PT09XDkXFrak5TYkxMVk48Ojo4Nz5DPzg+Oj8/QTw/QDc7Ojs7PTs+Pjo7PD48Oz07PT8+QDw/Pz1AQEBBPj88PjxAQUVCQkZAQD9HSEpLT0ae2tXV1dXV1dXW1tbW1tbW1tbW1tbW19fX19fX19fMzk4mKysrKysrKysrKysiivTr6+rq6urq6urq6uvp1dLS0tLS0tLS0tLS0tTEqaqqqqqqqqqqqqqqq6aGhIWFhYWFhYWFhYWFik4MEhISEhISEhISEhIRE0pUU1NTU1NTU1NTU1NPg6ejo6Ojo6Ojo6Ojo6ScWlVWVlZWVlZWVlZWVlJ5p6Ojo6Ojo6Ojo6OjoavS0tLS0tLS0tLS0tLS0d/q6uvr6+vr6+vr6+vr6dnX19fX1tbW1tbW1tbW1dXV1dXV1dbW1tbV1dXV1dXV1dXV1dTU1NTV1dXV1dXW1tXV1dXV1dXV1dXU1NTU1NTU1NPUy5h2bGlKTl9NUlVNPjw8Nzs/Qz42Ojc+Pjs9Qj85PDk9Ozw6PD07PTs9Ozs9PD0+PT07QT08QUBBQT08Pzw7QEJDQURFPUFAQ0ZLS09GmNzV1dXV1dbW1tbW1tbW1tbW1tfX19fX19fX19fXzc5SKzExMTExMTExMTExJ43z6enp6enp6enq6unq6dXS0tLS0tLS0tLS0tLUxaqrq6urq6urq6urq6yoiIeHh4eHh4eHh4eHh41SEhgYGBgYGBgYGBgYFxpOWVdXV1dXV1dXV1dXU4WopKSkpKSkpKSkpKSlnl9ZWlpaWlpaWlpaWlpXfKikpKSkpKSkpKSkpKOs0tLS0tLS0tLS0tLS0tHe6urq6urq6urq6urq6unZ19jX19fX19fX1tbW1tbW1tbW1tbW1tbW1tbV1dXV1dXV1dXV1dXV1dXV1dXW1tbW1tXV1dXV1dXV1dXU1NTU1NTU1NGcenFpSlRdT1JVTkQ+Pzs/QEA4Ojs4PDs7PD86Ozs4Ozk5Ozw7Ojw5Ozs8Ozo9PT0+PUE/Pj8/Pj08PT88PEFBQ0FERTw+QEVGSktNRpPc1dXV1tbW1tbW1tbW1tbW1tfX19fX19fX19fX183PXDk9PT09PT09PT09PTWT8Ofn5+fn5+fn5+fn5+bV0dLS0tLS0tLS0tLS08Wtrq6urq6urq6urq6vq46NjY2NjY2NjY2NjY2SXSInJycnJycoKCgoKCcpWmNiYWJhYmJiYmJiYl6MrKmpqampqampqampqqNoZGVlZWVlZWVlZGRkYYOsqampqampqampqamosNLS0tPS0tLS0tLS0tLR3unp6enp6enp6enp6enn2djY2NjY19fX19fX19fX19fX19bW1tfX19fW1tbW1tbV1dXV1dXV1dXV1dXV1tbW1tbW1tbW1tbV1dXV1dXU1NTU1NTWo3txZElbYE5OVU9AQT89REI+Oz06OTs6PT07PDs6OTg5OTs8Ozw8Ojo7PDo7QD08PTxAQTxBQTs7PEA/PD1CP0RDQ0U8PkJERkpMTEWN3NXV1tbW1tbW1tbW1tbX19fX19fX19fY2NjY2NjNzcXCw8PDw8PDw8PDw8PCydDPz8/Pz8/Pz9DQ0NDQz87Ozs7Ozs/Oz8/Oz87NzMzMzMzMzMzMzMzMzMvJycrKysrKysrKysrKysfCw8PExMTExcXFxsbGxsvMy8zLzMzNzMzMzMzLz9HR0tLS0tLS0tLS0tLRzczMzMzMzMzMzMzMzMvO0tLS0tLS0tLS0tLS0tLU1NTV1dXV1dXW1dbW1tjZ2dnZ2dnZ2dnZ2dnZ2djY2NjY2NjY2NjY2NfX19fX19fX1tfX19fX19bW1tbW1tbW1tXV1dXV1dXV1dbV1dbW1tbW1tbW1tXV1dXV1dTU1NTU169/cF5GXmJQUVdOR0ZDQ0lBPz07PDo8OEBCPD04Ojo4OTg7Pzs8PDs7PDw8PD87PD46Pj44PkI8Pj1BPjw+QkBERUNAPD5APkNJSUtEh9zV1tbW1tbW1tbW1tbX19fX19fX19jY2NjY2NjYzs3P0NDPz8/Pz8/P0NTQ0M7MzczP09LSzs3P0s7Ozs7Ozs7Q1NLPzs/T08/O0NTSz8/Pz8/Pz8/Pz8/Pz8/P0NDQ0NDR0dHR0dHS09PU1NTU1dXV1tbW1tfW1tbX1tfX19fX19fX19bW1tbW1tbW1tbW1tbW1tfX1tfX19fX1tbW1tbW1dbW1tbW1tbW1tbW19fW1dbW1tbX19fX19fX19fX19jY2NjY2NjY2NnZ2dnZ2dnZ2djY2NjY2NjY2NjY2NjX19fX19jY19fX1tbW1tbW1tbW1tbW1tbW1dbW1dbW1tbW1tbW1tbW1tXV1dXV1NTV1di4gm9XSl9jUlFaS0hBQTxCPT07Oj4+PD4/PT0/Nzk6OTk3OD48PD47Ozw7PDs/PT0+OTs7OT0+P0A+QD07OkI/QkNCPz0+QD5CRUdKQoDc1tbW1tbW1tbW19fX19fX19fX2NjY2NjY2NjY2M7Ozs7Ozs7Nzc3Nzsqfys3Nzc3QuYOEi8fTwJrLz87Ozs7Pypal0c/PopfK0saSq9HOzs7Ozs7Ozs7Ozs7Oz8/Pz8/P0NDQ0NDQ0NDR0dHR0tLT09PU1NTU1NTV1dXV1dXV1dXV1dXV1dXV1dXW1tbV1dXV1dbW1tbV1dXV1dXV1NTU1NXV1dXV1dXV1dXW1tbW1tbW1tbX19fX19fX19fY2NjY2NjY2NjY2NnZ2dnZ2dnZ2dnZ2dnY2NjY2NjY2NjY2NjY2NjY2NfX19fX1tbW1tbW1tbW1tbW1tXV1tbW1tbW1tbW1tbW1tbW1dXV1dXV1dXYwIBuVU9gY1dZW0xMQ0A9PTs9Ojw+Qj5CQ0A8Ojg5ODo6Ojc7Pz4/PDw7PDo5Pzw8PTg5PD9BPj09PUFAPTtBQkBCQz47QD9BQUlHSkF629bW1tbW1tbX19fX19fX19jY2NjY2NnZ2djY2dnOzs7Ozs7Ozs7OzdKpj63Rzs7Ozpu3tqSiwJOerNPOzs7Pz5yqnazXqKCroM6ZrZqz0s7Ozs7Ozs7Ozs7Pz8/Pz8/Pz9DQ0NHR0dHR0dHS0tLT09TU1NTU1dXV1dXV1dXV1dXV1dXV1dXV1dXW1tbW1tXV1dbW1tbW1tXV1dXV1dXU1dXV1dXV1dXW1tbW1tbW1tbW1tfX19fX19jX19fY2NjY2NjY2djY2dnZ2dnZ2dnZ2dnZ2dnZ2djY2NjY2NjY2dnY2NjZ2NjY19fX19fX19bW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tXV1dXV1dXV18h/b1pTYWVeXVxPSkQ9QD8+Ozc6Pjk/RD9BOTg3ODk7Ozw4OT89PTw9PD47OkE7OTs5OzxDQDw7PT5AQT49QkQ/QkM9PT8+Pz5ISUg/ddrW1tbX19fX19fX19fX2NjY2NjZ2dnZ2dnZ2dnZzs7Ozs7Ozs7Ozs/Inrym0tDQzsqgl36Cw6abr6fUz8/P0MuUiJqdwpyVkKGzlYadnc7Pzs7Ozs7Ozs7Oz8/Pz8/Pz8/Q0NDR0dHR0dLS0tPT09TU1dXV1dXV1dXV1dXV1dbV1dXV1dXV1tbW1tbW1tbV1dXV1dXW1tbV1dXV1dXV1dXV1dXW1tbW1tbW1tbW1tbW1tfX19fX19jY2NjY2NjY2NjY2NjZ2dnZ2dna2dnZ2dnZ2dnZ2dnZ2djY2NjY2NnZ2dnZ2dnY2NjY2NfX19fX19fX19bW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1dbV1dXV1dfNiHNdWGloXl9gT0lGOkFAPj88PDo2P0JAQzo2NDc6Ozo8Ojk+PD49PTs/PTxBPjw8Ojw8PTw6PEA9QEI+PkFCPUNDPT0+Oz9BRUtIQHDZ1tbX19fX19fX19fY2NjY2NjZ2dnZ2dnZ2dnZ2c/Pz8/Pz87Ozs7SrKWnqdXAvNLHnY+ey9PJipmq1M/Pz8/RvciZm6udn6eZtMDJl5nG0M/Pz8/Pz8/Pz8/Pz8/Pz8/Q0NDQ0dHS0tLS09PT1NTU1dXV1dXV1dbW1tbW1dbW1tbW1tbV1tbW1tbW1tbW1dXV1dXV1dXW1dXV1dXV1dXV1dXW1tbW1tbW1tfX19fX19fX19fX19jY2NjY2NjY2NjY2NnZ2dnZ2dnZ2tnZ2dnZ2dnZ2dnZ2dnZ2dnY2dnZ2dnZ2dnZ2dnY2NjY19fX19fX19fX19bW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbV1dXW0JB1W1tqaWFeXVNOSTxDQEE+QD46OEZBP0M6NzQ5Ojo5Ozs4Oz0/Pj49QT08P0A9Pjw8PDw8Oj1AQD8/PT5CQD9AQkA8QD0+QUVLRz9r19fX19fX19fX2NjY2NjY2NjZ2dnZ2dnZ2dnZ2tnPz8/Pz8/Pz8/QzJ2Nl6zQmpfKxZ6ynpbN1q2ZqtTPz8/Pz9KXlKDDoqCMoMXTkZigztDQ0M/Pz8/Pz8/Pz8/Pz8/P0NDQ0dHS0tLT09PT1NTU1NXV1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbV1dXV1dXV1dXV1dXV1dXV1dXW1tbW1tbW19fX19fX19fX19fY19fY2NjY2NjY2NjY2NjZ2dnZ2dnZ2drZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2djY2NjY2NfX19fX19fW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1dXV1tKUcl5ea2tqZV1PTEc/RENDQDo9OzxCPD49OTY0Ojk5Ojo5Nzs/QDs8PUA8PEE+PD07PTw/PDo8Q0A+PTs9QD5CPkBBPkA9QD9GSUQ/ZtXX19fX19fY2NjY2NjY2NnZ2dna2tra2tra2traz8/Pz8/Pz8/P07GigJuvyaCjv8qcpYynrdiqmarUz8/Pz9Ozm8SY2pfFyZTYrKO/ndXQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NHR0tLT09PT1NTU1NXV1dbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1dXV1dXV1dbW1tXW1tbW1tbV1tbW1tbX19fX19fX19fX19fX2NjY2NjY2NjY2NjY2NjY2dnZ2dnZ2dna2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2djZ2djY2NjY2NfX19fX19bW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbSk3BgXnBoZmVaUUhHQkVDQEA3Ojo8Pjo8OTc2NTk6Njo8Ozc8QEA8Ojo9Oj0/Pj08OUA8PDo6OT9APj08PUBBQz9APz5BOz9ARkpCP2LS2NfX2NjY2NjY2NjY2dnZ2dnZ2tra29vb29vb28/Pz8/Pz8/P0M6fkGyclteqo9PSrqa1mJ/Vqpmq1M/Q0NDRzo2QoLaglJWhu82IlZ7I0tHR0NDQ0dHQ0NDQ0NDQ0NDQ0NHR0tLT09PT1NTU1dXV1dbW1tbX19bW1tbW1tbW1tbX1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tfW1tfX19jY2NfX19fX2NjY2NjY2NjY2NnZ2dnZ2dnZ2dnZ2dna2tnZ2dnZ2dnZ2dnZ2dnZ2dnZ2djY2dnZ2dnZ2dnZ2dnZ2NjY2NjY2NjX19fX1tbW1tbW1tbW1tbW1tbX19fX19fW1tbW1tbX0pNuYFxxZGdkWlVKQENGQ0FCODs/PD07PDw4NTU4OTY4Ozo5PDo+Pzw9PTk8Pz49Ojo+OTw6Ojg+Pzw9PTw+QEFDQT48PDpCRERKRkJd0NnX19jY2NjY2NjY2dnZ2dna2trb29vb29vb29vPz8/Pz8/Pz9G9n8O31pfA09HQ0srSzZeb1KqZq9XRz9DQ0cvaqJ2Ln6+znaXQ26KZtdXR0dHR0dHR0dHR0NDR0dHR0dHR0tLT09PU1NTV1dXV1tbW1tfX19fX19bW1tbW1tfX19fW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW19fX19fY2NjY2NjY2NjY2NjY2djZ2dnZ2dnZ2dnZ2dnZ2drZ2tnZ2dnZ2dnZ2dnZ2dnZ2djY2NjY2NjZ2dnZ2dnZ2dnZ2dnY2NjY2NjY2NfX19fX19fX19fW1tfX1tbX19fX19fX19fX19bW19GRbF1cb2doYl1PRkBISUdFQDw8Pj48PT48NzU2Ojk2Ojs6Ojs4QD86PDw5PD49Ozs6Pzk/Ojs5PT49PTs7PTxAQ0I/Pz47Q0ZGR0hEWc3a2NjY2NjZ2dnZ2dnZ2dna2trb29vb29vb29vb0NDQz8/Pz8/Pz5V+e6WS1KKa08ySl6ObodirmavV0pem1cmOpZqjkKKaopyckaiYnrvV0dHR0dHR0dHR0dHR0dHR0tLS0tLS09PU1NTV1dXV1tbW19fX19fX19fX19fX19fX19fX1tbW1tbW1tbW1tbX19bW1tbW1tbW1tbW1tbW1tbW1tbW1tfX19fY2NjY2NjY2NjY2NjY2dnZ2dnZ2dnZ2dnZ2dnZ2tra2tra2tnZ2dnZ2dnZ2dnZ2djY2NjY2NjZ2dnZ2tnZ2dnZ2dnZ2djY2NjY2NjY2NjX19fX19fX19fX19fX19fX19fX19fX19fX1tfPjGRWXnBrXGBgTkVITUlJT0M+OkI9PUBCOzU1Nzw6ODo7Ojo7OT09OTo6OT0+Pz07OT47PDo8Ozk+PD47PD0+QENCPz5BPEFDR0ZGRVXJ29jY2NnZ2dnZ2dnZ2dra2tvb29vb29zc3Nzc3NDQ0NDQ0M/Pz9DR1aeZrcmjqL7KnbGdo7XZqZup2Lirocq7oaannb6eqaCinqmiqZzQ09LS0tLS0tLS0tLR0dHS0tLT0tPT09PU1NTV1dbW1tbX19fX19fX19fX19fX19fX19fX19bW1tbW1tfX19fX19fW1tbW1tbW1tbX19fW1tbW1tbW1tbX19fX2NjY2NjY2NnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dra2tra2tra2trZ2dnZ2dnZ2dnZ2djY2NjY2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnY2dnY2NjY2NjX19fX19fX19fX19fX19fY2NfX19fX19fYzYZdV2JvZE9dVEtIRlNRS0xAPj1EPD9DRj01NTc7OTc6Ozo8PTo7Pzo6OTg6PT0/Pjs/Oz49Ojs5Pjs9PD0+QURCQD8+PzxAQUVHRURSxdvY2dnZ2dnZ2dnZ2tra2tvb29vb3Nzc3Nzc3NzQ0NDQ0NDQ0NDQ0NO5gL3Tm5bP1LWLkZ/T1LyBu9TOlKDT056QjbbZro6RpdSakY6+1tLS0tLS0tLS0tLS0tLS0tLT09PT09PU1NXV1dbW1tfX19fX19fY2NjY19fX19fX19fX19fX19fW1tbX19fX19fW1tbW1tbW1tbW19fX1tbW1tbW1tbX19fX19jY2NjY2NnZ2dnZ2dnZ2dnZ2tnZ2tra2tra2tra29ra2tra2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2NjY2NjX19fX19fX19fY2NjY2NjY2NjY2NfX2ct+WlVqaltMX01KTEpVTEZCPD0/R0ZIS0g9NjU3Ojk3OTo7Ojw9OT45OTo4Oz0+PkE+PTk8PDo9Pj46PTk5Oj9FQUA+PT8/QkBHRURFUMHc2dnZ2dnZ2dna2trb29vb29vb3Nzc3Nzc3dzc0NDQ0NDQ0NDQ0NDQ0cHR0crI0tDUxLjS0tHSwtLQ08fM0tHSusTV0tXBvdbT07jI1dLS0tLS09PT09PT09LS0tPT09PU1NTU1NXV1dbW1tfX19fX19fX2NjY2NjX19fX2NfX19fX19fX19fX19fX19fX1tbW1tbW1tbW1tfX1tbW1tbW1tbW19fX19fY2NjY2NjY2dnZ2dnZ2dnZ2dra2tra2tra2tra29va2tra2tra2dnZ2dna2tnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dna2tnZ2dnZ2dnZ2djY2NjX19fX19fY2NjY2NjY2NjY2NjY19rHd1xSZ2laTlpOTFBRV0VKPz89P0FFTExBPjc3Njs4ODk5Ojs8Pjw+ODo6OTs+P0A9Pj46NTo6Oz0/Ojs5Ojw+QkJAPz8/P0FCR0RDRE683dnZ2dnZ2dna2tvb29vb29vb3Nzc3Nzc3d3d3dDR0dDQ0NDQ0NDQ0NDS0NDR0dDQ0dPU0dHR0dPR0dHS0tHR0tXU0tLS1NXT09PW1NLS0tPT09PT09PT09PT09PT09PU1NTU1dXV1dbW1tfX19fX2NjY2NjY2NjY2NfX19jY19fX19fX19fX19fX19fX19fX1tbW1tbW1tbX19bW1tbW1tbW1tfX19fX2NjY2NjY2NnZ2dna2tra2tra2tra2tra2tra2tvb2tra2tra2tnZ2tra2tra2tra2tra2tnZ2dnZ2dnZ2dnZ2trZ2tra29ra2trZ2dnZ2dnZ2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjbwXNYVWlrU0xSTlBSWVRGSTw+Qz9BQkVLPj43ODc5Nzc4OTk7Oz0/QDw9ODk7Ozs/Pjw8OTU6PT47OTk7PD8/P0JCQT1BPUBBQkZCQkJLtd7Z2dra2tra2tvb29vb29vc3Nzc3Nzd3d3d3d3R0dHR0dHR0dHR0dDQ0NDQ0NDQ0dHR0dHR0dHR0dHR0dHS0tLS0tLS0tPT09PT09PT09PT09PT09TU1NPT1NTU1NTU1NXV1dXV1dXW1tbX19fX2NjY2NjY2NjY2NjY19fY2NjX19fX19fX19fX19fX19fX19fX19fW1tbX19fX1tbW1tbW1tbX19fX19jY2NjY2NnZ2dna2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tnZ2dnZ2dnZ2NjY2NjY2NnZ2dnZ2dnZ2NjY2NjY3LxvVFRsbExLUkpUUlVLRkQ6PkdEREFERjw/ODk6OTY5OTo3PD07PkA9PTc5Ojs5Pjs5OTY2Oj1AQT47PDk6Pj9DQT4/Qj0+QkNFQkFCSrDe2dra2tvb29vb29vb29vc3Nzc3Nzd3d3d3d3d0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0tLS0tLS0tLS0tLS0tLS0tPT09PT09PT09PT09PT1NTU1NTU1NTU1NTU1dXV1dXV1tbW1tbW19fX19jY2NjY2NjY2NjY2NjY2NjY2NjY19fX19fX19fX19fX19fX19fX19fX19fX19fW1tbW1tfW19fX19jY2NjY2NjZ2dnZ2dra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2trZ2dnZ2dnZ2djZ2dnZ2dnZ2dnZ2dnZ2dnY2Ny2a1NbcGtLVVdSXFFXSEQ+PEJKRT1ISj89PDc4ODo1OTg5Njs+PD1APDw1OTk8Oj87OTk0ODw9PUFBPD47Ojw+QD89PkE9PUNGR0I/Qkmq39ra29vb29vb29vb3Nzc3Nzc3N3d3d3d3d3d3dHR0dHR0dHR0dHR0dHR0dHR0dHS0M/U0M7P0tLT0tLS0tLS0tLS0tPT09TU1NTU1NPU1NTU1NTU1NTU1NTU1NTV1dXV1dXV1dbW1tbW19fX19fY2NjY2NjY2NjY2NjY2NjY2NjY2NjX19fX19fX19jY2NfX19fX19fX19fX19fX19fX19fX19fX19jY2NjY2NjY2dnZ2dra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tvb29va2tra2tra2tra2tra2tra2tnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dndsGRTYXJfT1pUV19RUkdCPUVJTEFBTEQ/Pzs6ODg5Mzg2ODY5Pj0+Pz06Njo7Pjs9PTo5Njg6PTtAQDxAPz0/P0I+PD48PEJFR0lCPkNJpODa29vb29vb3Nzc3Nzc3Nzc3N3d3d3d3d3d3t7S0tLS0tLS0tLS0dHR0dHR0dPT0bm7zLqbnLrQyNPT0tLS09PT09PT09PU1NTU1NTU1NTU1NTU1dXV1dXV1dXV1dXV1dbW1tbW1tbX19fX19fY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjX19fX19fX19fX19fX19fX19fX19jY2NjY2NjY2NjZ2dra2tra2tra2tra2tra2tra2tra2tra29va2tra29va2tvb2tra2tra2tra2tra2trb29vb29va2tra2tra2tra2tra2tra2tra2tnZ2dnZ2trZ2dnZ2dnZ2dnZ2dnZ3qpfVWBuW1VZUVpeT0xHQ0ZNSUZEREo7QUE7PDg4NjQ4Njk4Nzw/QT89Ojc8Pz48Pz87OjY4OD09QEE9QD5BQD1AOjs6Pj1BRUdJQkBDR57h29vb29vc3Nzc3Nzc3Nzc3d3d3d3d3d7e3t7e0tLS0tLS0tLS0tLS0tLS0tO+wMqaoKKViJGeqpOpz9TT09PT09PT09PU1NTU1NTU1NTU1NTV1dXV1dXV1dXV1dXV1tbW1tbW1tbX19fX19fY2NjY2NnZ2dnZ2dnZ2dnZ2djY2djY2NjY2NjY2NjY2NjY2NjY2NjX19fX19fX19fX19fX19fX19fY2NjY2NjY2NjZ2dna2tra2tra2tra2tra2tra2tra29vb29vb29va29vb29vb29vb29ra2tra2tra2tra2tvb29vb29va29vb29vb29va2tra2tra2tra2tra2tra2tnZ2dnZ2dnZ2dnZ2d6iXFVeblheXU5aUFROQ0NMSUlJRkpEPEJBPDs4NzY3OTc3OTk9P0E/PDo5QD88PkI/Ojg3NzY9Pz9APUBBPz88PTs7OD48P0VJSEE/Q0aX4dvb29zc3Nzc3Nzc3N3d3d3d3d3d3t7e3t7e3tPT09PT0tLS0tLS0tLS0tTIlZyum5m1iX2TjIKBhMTV09PT09PT09PU1NTU1NXV1dXV1dXV1dXV1dXV1dXV1tbW1tbW1tbW1tbX19fX19fX2NjY2NjY2dnZ2dnZ2dnZ2dnZ2dnZ2NjY2NjY2NjX2NjY2NjY2NjY2NfX19fX19fX19fX19fX19fX2NjY2NjY2NjY2dnZ2dnZ2dna2tra2tra2tra2tra29vb29vb29vb29vb29vb29vb29vb2tra2tra2tra2tvb29vb29vb2tvb29vb29vb2tra2tra2tra2tra2tra2tra2tra2tra2tnZ2dndmlpYYW5ZYVdPV01QRUJETElNS0ZJRT5CRDk4ODY3OTc1Njk4PT1BPjo4OT4+PD9APzw1Njc2PD4/PjtAQEA/Pj4/Pjs/PkFCRkdCQENIkeLb29zc3Nzc3d3d3d3d3d3d3d7e3t7e3t7f39/U09PT09PT09PT09LS0tLTz6h+kayPko6MhoCIiYSQo8rU09PT09PU1NTU1dXV1dXV1dXV1dXV1dbW1tbW1tbW1tbW1tbW19fX19fX19fX2NjY2NjY2dnZ2dnZ2dnZ2dnZ2dnZ2dnY2NjY2NjY19jY2NjY2NjY2NjY2NjX19fX19fX19fX19fY2NjY2NjY2NjY2NnZ2dnZ2dna2tra2tra2tra2tra29vb29vb29vb29vb29vb29vb29vb29ra2tra2tra2tvb29vb29vb29vb29vb29vb29va2tra2tra2tra2tra29vb29ra2tra2tra2tna3JJaWWNuWlpSVV5QTDxAR05IUklIRT47SEY4OTc1Nzg3NTg5ODs+Pj07ODlBPj1AP0E+NzU5Njs+QUI/P0BAQkI/Pj8+QUBEQUZIQj9FSozi3Nzc3Nzc3d3d3d3d3d3e3t7e3t7f39/f39/f1NTU09PT09PT09PT09PWtaWaiIuQhYCFi4iBg4qLf4bC1tTU1NTU1NTV1dXV1dXV1dXV1dXW1tbW1tbW1tbX19fX19fX19fX2NjY2NjY2NjY2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2djY2NjY2NjY2NjY2NjY2NjY2NjY2NjX19fX19fX19fY2NjY2NjY2NjY2dnZ2dna2dra2tra2tra2tra2tra2tvb29vb29vb29vb29vb29vb29vb29vb29ra2tra2trb29vb29vb29vb29vb29vb29vb29vb2tra2tra2tra29vb29vb29vb29vb2tra29uIWltnalxYTFpfVkg6TEhMSkpDRUZDQExINzo3Njc4ODU4Nzg5PDw7Ozk4QD89Pj8/PDY3PDQ3P0JCQUBAPz8/QT09P0A+QEBGRT09REuI4tzc3Nzd3d3d3d7e3t7e3t7e3t/f39/f39/f39TU1NTU1NPT09PT09PUxZKCg4WGfYGCfXx5foGCg36k29bU1NTU1NTV1dXV1dXV1tbV1tbW1tbW1tfX19fX19fX19fX19fX19jY2NjY2NjZ2dnZ2dnZ2dna2tnZ2dnZ2dnZ2dnY2NnY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjX19fX19fY2NjY2NjY2NjY2dnZ2dna2tra2tra2tra2tra29vb29vb29vb29vc3Nzc3Nvb29vb29vb29vb29vb2tra2tra29vb29zb29zb29vb29vb29vb29vb29vb29va2tvb29vb29vb29vb29vb29vb2tvZgFpebWhaU0ldW1hKRE1ISlNMR0ZBQD9KQjg7NjY5OTc1ODY4Ozo7Ojw5OD09O0A9Ozo2NTw3Oz1CQEFBPD49QEE9PEA/Pz5CREU+PERLg+Lc3d3d3d3d3t7e3t7e3t7f39/f39/f39/f39/V1dTU1NTU1NPT09PT2LKEkKh9g3l2hIh/e3d5gn5+i67A1dTU1NXV1dXV1tbW1tbW1tbW1tbW1tfX19fX19fY2NjY2NjY2NjY2NjY2NjZ2dnZ2dnZ2dna2trZ2dnZ2dnZ2dnY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2dnZ2dnZ2tra2tra2trb2tra2tvb29vb29vb29vc3Nzc3Nzc29vb29vb29vb29vb29va2trb29vb29zc3Nzc3Nvb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vc1nlcWmxmWFJPYFFSQUhHSkZYTEZAQENDSz87Ozc4ODc2NTc2ODo5PDw6PTs/PTs9Pjw7ODg8OT0/QkFCQzw8P0FCPj1BQkNCREVDQDtDTH3h3d3d3d3e3t7e3t7e39/f39/f39/f39/g4ODg1dXV1NXU1NTU1NPU0ruen3WKeXuIgICChYGDcnOAhYOMrNfV1NXV1dXW1tbW1tbW1tbW1tbW19fX19fX2NjY2NjY2NjY2NjZ2dnZ2dnZ2dnY2NnZ2dna2tra2trZ2dnZ2dnZ2djY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2dnZ2dna2tra2tra29vb29ra2trb3Nzc3Nzc29zc3Nzc3Nzc3Nzb29vb29vb29vb29rb29vb29vb29zc3Nzc3Nzc3Nvb29zc3Nzc3Nvb29vb29vb29vb29vc3Nzc3Nzc3Nvb29vb3dByXV9wZVdLUGNPS0JHQ0pIS0ZBPEE9SFBBOjo3Nzg3Njc4Nzw6OD09PD47QD88Pz07Ojs5Ojk8QEJAQkNAPUFAPz1AQkNDQUBAP0A7RU144N3d3d7e3t/f39/f39/f39/f3+Dg4ODg4ODg4NXV1dXV1dXV1NXU18h4i4V8goh6g4SBfoKCc2l0hYuGkJ3U1tXU1dbW1tbW1tbW1tbW19fX19fX19jY2NjY2NjY2NnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dra2tra2tra2dnZ2dnZ2dnY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2dnZ2dna2tra2tra2tra2tvb2tvb3Nzc3Nzc3Nvc3Nzc3Nzc3Nzc29zb29vb29vb29vb29vb29vb29vc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc29vb297KalxjcWVST1heSz9HTElPS0VAPkFCP0lPPjk6NzY7NzY6Ozc7Ojg6PDw+Oz09Oz48Ojs4OTo4OUFCQkFAQDtAQj06PkFCQz8+PT4/PUZOdN/e3t7e3t7f39/f39/f4ODg4ODg4ODg4ODg4OHV1dXV1dXV1dXV1s6dhpl+f5OTin+CgXx9gnNxm4mAgoOJwNnat7TQ19bW1tbX19fX19fX19fX2NjY2NjY2NjY2NjZ2dnZ2dnZ2dnZ2tnZ2dnZ2dra2tra2tra2trZ2dnZ2dnZ2dnZ2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NnZ2dna2tra2tra2tra2tra29vb3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nvb29vb29vb29vb29vb29vc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3NvfwGNaW21gVlBTU0pETEhNSEk8PkFEQ0ZORDw8OTc5OjY4Ozk3PDk4OTw9OzlAPjpBPzw3NTc7ODpAQUVBPz45PUI/Oz1CQkI6Pj07PT5GTnHe3t7e3t/f39/f39/g4ODg4ODg4ODg4OHh4eHh1tbW1tbW1tbV1tjLioCHhYOXjHh7e3lvfYF1a3ebdHZ7eInHxpiMrdjZ19fX19fX19fY2NjY2NjY2NjY2NjY2NjY2dnZ2drZ2dna2tra2tra2tra2tra2tra2tra2dnZ2dnZ2dnZ2dnZ2dnZ2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NnZ2dnZ2dnZ2dna2tra2tra2tra2tra29vb3Nzc3dzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nvb29vb29zb29vb3Nzc3Nzc3Nzd3dzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3d3d3d3d3Nzc3Nzc4LdjV1lrYlJNVVFMSktGS0ZDQD5CQT9FTT4+PTg5OTo3OTo3NT03Nzo+PDs7Qjw5Pz05NjY4PTk6QEJGQD49PEBCREA9QD9DO0A9PD4/Rk9t3N/e3t/f3+Dg4ODg4ODg4ODg4OHh4eHh4eHh4dbW1tbW1tbW1tfVrYZ6d32rn3l4entzdH+Dfm9xe3l6c3t2k4qFgImkzdnY19fX2NjY2NjY2NjY2NjY2NjY2NjY2NnZ2dna2tna2tra2tra2tra2tra2tra2tra2tnZ2dnZ2dnZ2dnZ2dnZ2dnZ2djY2NjY2NjY2NjY2NjY2NjY2NjY2dnZ2dnZ2dnZ2dra2tra2tra2tra29vb29vc3Nzc3N3d3d3c3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc29vb29vc3Nzb3Nzc3Nzc3N3d3d3d3d3d3dzc3Nzc3Nzd3d3c3Nzc3Nzc3N3d3d3d3d3d3d3d3dzc3OGtYVtebGJSTVZMTUdLS0RGQkI7QT08RUxDQT44Ojk6Nzc5NjY6NTs+QDs9Oz89PD89Ojk5Ojw5PEVDRkA/PkBDQkQ9OT0/QT1CPz1APkdPadvf3t/f3+Dg4ODg4ODh4eHh4eHh4eHh4eHi4uLW1tbW1tbW1tfQmH+Qh4N9eoN2e3Vzenl6kKqmd3JyfoeHh4CAfoKEhJHJzNnX19jY2NjY2NjY2NjY2NjY2NjY2NnZ2dnZ2tra2tra2tra2tra29va2tra2tra2tra2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2djZ2dnZ2dnZ2djY2NnZ2dnZ2dnZ2dnZ2tra2tra2tra2tra29vb29vb3Nzc3N3d3d3d3d3d3d3d3d3d3d3c3Nzc3Nzc3Nzb29vb3Nzc3Nzc3Nzc3Nzd3d3d3d3d3d3d3dzc3N3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3NzhpV9UYm1iUE9TSUhHRkpJSUJBPkJCPEVFREA+ODo4Ozc3Ojc4ODY+Pz07PDk9PDo+PTs6Njc7NjpEQUY+Pz8/PkNBPzs9PT47REM/PjxIT2fZ4N/f3+Dg4ODg4eHh4eHh4eHh4eLi4uLi4uLi1tbW1tbW19jYyH52doN+fnR2eIaCenl1d5yhu6GEgoCAfoeKinx/gYaMnKjO2NjY2NjY2NjY2djY2NjZ2djY2NjY2dnZ2dra2tra2trb29rb29rb2tra2tra2tra2tnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dna2tra2tra2tra2tra2trb29vb29zc3Nzc3N3d3d3d3d3d3d3d3d3d3d3d3dzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3e3t7e3t7e3d3d3d3c35pbT2drXFBRUElDT0pLR0xHSkJAP0FHREBBPDg8ODg1ODk3Njc3QEA/Ozw5Pj04PTw8Ojc4PTk/RENGPkE/QkBDPzw6Pj0/PkVEPz07S1Fj1+Hf4ODg4ODh4eHh4eHh4uLi4uLi4uLi4uLj49bW1tbW19XB3LRueHJze3B6eXaFiIR7eH2AgZiljH98fnuRhZaLhoGDgY6Rvd3Z2NjY2NjZ2dnZ2dnZ2dnZ2dnY2dnZ2dna2tra2trb29va2tva2tra2trb29ra2tra2tnZ2dnZ2dnZ2dnZ2dna2trZ2dnZ2dra2tra2tnZ2dnZ2dna2tra2tra2tra2tra2tra2trb29vc3Nzc3Nzc3N3d3d3d3d3d3d3d3d3d3d3d3d3d3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3e3t7e3t7e3t7e3t7e3t7e3t3d3d6NWFdobllQUUtISlNJTUhNSUtBQz9DRkJBRDo6PDg2NDg4NzY2Nj8+Pjo8OTw7Oj09PDw4Ozw7RERERT4/PkI+Qj84PT8/Q0NCQEE+O0xUY9Xh3+Dg4OHh4eHh4eLi4uLi4uLi4uLi4uPj4+PW1tbW1teslLZ6eHJvd5V7dHuLgHh1bn6Fg3t/hYhyfH2bnI6JioJ+g32Hk5rH1NjY2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dna2tra2trb29vb29vb29vb2tra2tra2tra2tra2tnZ2dnZ2dnZ2dna2tra2tra2dra2tra2tra2tra2tra2tra2trb2tra2tra2tra2trb29vc3Nzc3Nzc3Nzd3d3d3d3d3d3d3d3d3d3d3d3d3d3c3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3N3d3d3d3d3d3d3d3d3d3d3d3d3e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3d7Zf1lgaGxcUUtHR09LTk5PTURGQkg/Q0hEREA6Ozs4NzU3Nzc4NThAPkA7PDk8Ozw+Ojk7OTk7OUZERUI8QD4/PEBDOz5AP0A/Qj8+OjtKVWPV4eDg4eHh4eHi4uLi4uLi4uLi4uPj4+Pj4+Pj1tbX19vKhYR3cXJubniVhHt4hH95dnB4c3eLkY6CdnN9ioaId3d1d4ODfIiIk8Pb2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dra2trb2tvb29vb29vb29vb29rb2tra2tra2tra2tra2tnZ2dnZ2dna2tra2tra2tra2trb2tra2tra2tra2tra2trb29vb29ra2trb29vb29vb3Nzc3Nzc3Nzd3d3d3d3d3d3d3d3d3d3d3d7e3d3d3d3c3Nzc3Nzc3Nzc3Nzc3Nzc3d3d3d3d3d3d3d3d3d3d3d3d3d7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7f0nVZaGlqVk5KSE1OR01EUElGSD9FPUZMREM+Ozs8OTc3OTY2OTU4Pj4/PTs8QDs9PDo3Ozc5OThHREVCPUE9Qj8+QDw/QUE/QEJAPjs8S1Ri1OLg4eHh4eLi4uLi4uLi4+Pj4+Pj4+Pj4+Pj49fX19fEknuJf29sbnV2foSBg4qGfnVybWVtiIaKjoR7c4OHint4e4OPj4GEioqxztrZ2dnZ2dnZ2dna2tra2tra2tra2trb29vb29zc3Nzb29vb29vb29va2tra2tra2tra2tra2tra2tra2tra2tra2tra2tvb29va2tra2tra2tvb2tvb29vb29vb29vb29vb29vb29zc3Nzc3Nzc3d3d3d3d3d3d3d3d3d3d3t7e3t3d3d3d3d3d3d3d3dzc3Nzc3Nzc3d3d3d3d3d3e3t7e3t7e3t7e3t7e3t7e3t7e3t7f39/f39/f39/f39/f3t7e4clsW2pqalNOR0dOT0VIRk1JSUA7RD5ISUA9PDo6Ojg2ODo3Nzk0OD08PT07ODw8PDw4Njc4OTo6RUJFQT9APEI/Q0M+PkNEQUBAP0A8PUtRYdPj4OHh4uLi4uLi4uPj4+Pj4+Pj4+Pj4+Pj5OTX19fZqXaFfnx3bHB3eXh8jH2KhYB3anN0d3p9bot7fnl6foR/gIGDfnh8foeGlrbT2tnZ2dra2tra2tra2tra2tra2tvb29vb3Nzc3Nzc3Nvb29vb29vb29ra2tra2tra2tra2tra2tra2tra2tra29ra29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb3Nzc3Nzc3Nzc3d3d3d3d3d3d3d3d3d3d3d7e3t7d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3t7e3t7e3t7e3t7e3t7e3t7e3t7e39/f39/f39/f39/f39/f39/e3uO9amFpa2lRTkZNTEtKWE1OR0FAQE9BQz9AOzw4OTk5Njg2NjY4NDs+PD07OTY6Ojk6OTU4OTg5OkJERj8+Pj5AQEBCPzxBQD88Pj9BOT5KT17S4+Hh4eLi4uLi4+Pj4+Pj4+Pj4+Pj4+Tk5OTk19fX2sqKhIB5c29tcXN1d4CUeHaAfHWHhXd1cnWgmXp7d3Z5doR0bWxue3iAmouTu9za2tra2tra2trb29vb29vb29vb29zc3Nzc3Nzc3Nzc3Nzc29vb29vb2tra2tra2tra2tra2tra2tra2tra29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vc3Nzc3Nzc3Nzc3d3d3d3d3d3d3d3d3d3d3d3e3t7e3t3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3t7e3t7e3t7e3t7e3t7e3t7e3t/f39/f39/f39/f39/f39/f39/f397js2lpbmloUFBPTExPUk9LU0Y/RURERD48PDg7ODc5OTU2ODY2NzM6Pjs+PTc6Pjk5OTk2Ojo4NzxDRUc/Pzs/PkA9PkE9Oz0+OUFAQDhBTlFc0OTh4eLi4uLj4+Pj4+Pj4+Pj4+Pk5OTk5OTk5NjY2NjauY6AenZ1bmpveHCBfWt0cnZ3hIV5h4d5lY55eXp1d3pza298gHx2fYh8gLLe2tra2tvb29vb29vb29vb29zc3Nzc3Nzc3dzc3Nzc3Nzc3Nzb29vb29rb29vb29ra2tra2tra2tra2tra29vb29vb29vb29zc3Nzb29vb29vb29vb29vb29vb29zc3Nzc3Nzc3Nzc3Nzc3d3d3d3d3t7e3t7e3d7e3t3d3t7e3t7e3t7d3d3d3d3d3d3d3d3d3d3d3d3d3t7e3t7e3t7e3t7f39/f39/f39/f39/f39/f39/f4ODg4ODg4N/f39/f4qpqa2hrZFNQT0ZQVFJOSFJLPkREQ0I7Ozk6Ojg2Nzg1NjY4ODg0Oz88Pzw5PDw3Ozo6Nzo6Nzo9Q0JDPUE+Pzw5PT5BQDs8PDtFQD47Q05TXNDk4eLi4uLj4+Pj4+Pj4+Pj5OTk5OTk5OTk5OTY2NjZ1p5vdntveHh2cG50d3BwdHBzb36Jc3qGhY2EenNtcoB6hn1vg5OBdnx9g4a13drb29vc29vc3Nzc3Nzc3Nzc3Nzc3Nzc3d3d3Nzc3Nzc3Nzc3Nzb29vb29vb29vb29ra2tra2tvb29vb29vb3Nzc3Nzc3Nzc3Nzc3Nzc3Nvb29vb29vc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzd3d3d3d3d3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3d3d3d3d3d7e3t7e3t7e3t7e3t7f39/f39/f39/f39/f39/f39/g4ODg4ODg4ODg4ODg4N/f3+KgbWhma2ZVVlJHUFFOS0xMRUJIRUc9OD08Ojo3Nzg2Nzc2NTY3NDg+PD09Ojg6OD46Ozc4Nzc6Oj5DRDtDQj49OD1AQUM/Pjw+RTw+PUJNUF/S4+Hi4uLj4+Pj4+Pj4+Pk5OTk5OTk5OTk5OTk2NjY3MB2doCCfnp4eHBsdXlya399bHNvdGdoaYB/aWl4c2d+iYl4cIKGe3d9foWKvd3b3Nzc3Nzc3Nzc3Nzc3Nzc3d3c3Nzc3N3d3dzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nvb29vb29vb29vb3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzd3d3d3d3d3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7f39/f39/f39/f39/f39/f4ODg4ODg4ODg4ODg4ODg4ODg4ODflGttZm5mU1NJUFlUTEhGTkZGRUJGPTs+PDs5Nzc4NTc5NjQ1NzU4PDs9Pjo6OztAOTs7ODc6OTlAQkE8QUE/Pzk/QEJFQ0FAQEM7Oz1ES01g1uTi4uLi4+Pj4+Pj4+Pk5OTk5OTk5OTk5OTk5NnZ2tmYc3uqhJaCcnR1dn14aGx8d2h4d25rcHR5gIJ3dHyBhIJ9c3CAin94gn95g8je3Nzc3Nzc3Nzc3Nzd3d3d3d3d3d3d3d3d3N3d3dzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nvb29zc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3N3d3d3d3d3d3d3d3d3d3d3d3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e39/f39/f39/f4N/f39/f3+Dg4ODg4ODg4ODg4ODg4ODg4ODg4ODh24tubWdzY1lRTVVbV0hDSUZOS0dCRD8/Qjo7OjY2NzU2NzY0ODc2Ozw7Pj86PDk8Qjg3OTo6Ojk6QUFCQUJDQEE+PT9CQ0NEQUJGOTg9REpOYtjk4uLi4+Pj4+Pj5OTk5OTk5OTk5OTk5OTk5OXZ2drcqHGCtXiRfnNsem6EgXaCfWtoan+DeHZ8dX2FhXRmcHl9d316gIqFe318foC03tzc3Nzc3N3d3d3d3d3d3d3d3d3d3d3d3dzd3d3d3dzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzd3Nzd3d3d3d3d3Nzc3Nzc3Nzc3Nzc3N3d3d3d3d3d3d3d3d3d3d3d3d3d3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e397e3t7e39/f39/f39/f39/g4ODg4ODg4ODg4ODg4ODg4ODg4ODg4eDg4ODg4ODg4tiFb3FrdWFWT1VVXE9ETUY+SkdKRUQ8P0I6PDk4Njg0NTY3NDc2NDk7Ozw7OD47PEE4ODo9OD04Oj09QEBAP0FCP0A+QENCQ0FBRTc2O0RMTmPa5OLi4+Pj4+Pj5OTk5OTk5OTk5OTk5OTk5OXl29ra3Z5sbnNxhY1ybXBuf391hH5rcnZ2enN4gXhzb3VwbWt2fHmFiIB/f392coODsd/c3Nzc3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3Nzd3d3c3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3N3d3d3d3d3d3d3d3d3d3d3d3d3c3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e39/f39/f39/f39/f39/f39/f39/f39/f39/f4ODg4ODg4ODg4ODg4ODg4ODg4OHh4eDg4eHh4eHh4eHh4OLXhW1xb3ZeUldTWlpRSkhDQFFAQkQ8OT9BOjw5NzU3NDU2NjQ3NTY9PDo9PTk+OjxAODo6PDY7OTs+PUJCQjtBQkBDQEBEREM8PUA3OjxFS01l3OPi4uPj4+Pj5OTk5OTk5OTk5OTk5OXl5eXl5dPOxsB+cWxveHt2b3VuanNzbZKGeG50dG5vdIZ/b2twboJ0bXZyfY2DdnF/d3mKgabf3Nzc3d3d3d3d3d3e3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3dzc3d3d3dzc3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3t7e3t7e3t7e3t7e3t/f3t7e3t7f39/f39/f39/f39/f39/f39/f39/f39/f39/f4ODg4ODg4ODg4ODg4ODg4ODg4ODg4eHh4eHh4eHh4eHh4eHh4eHi1oZucG1xYFJZUFdfWUpMTElSP0Q9OTtCRjs6OTc0NTY1NzU0NjY2Pj07Pz45PTk7Pjg9Ozo0ODtAQENCQ0FCRkE/Q0BBQkREOz0+OTs8QkxNZODl4+Pk5OTj4+Tk5OTk5OTk5OTk5eXl5eXl5eW5t7Woc3JscHd6dHd4bXFydXd/hHRyc2xsa3F8bnBudGuBf3GAd32Eg355gHNygYqg2d3c3d3d3d3d3d7e3t3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3e3t7e3t7e3t7d3d3d3t7e3t7e3t7e3t7f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f4ODg4ODg4ODg4ODg4ODg4ODg4OHh4eHh4eHh4eHh4eHh4eHh4eHh49WHcWxqbF5YWlVXYFZWUE9QTD1BOjs8RkE4Ojg3MzY1Njk2NTg1Nz89Oz8+OT04Ozw5PTs7NTo9Q0JCPENDREREQUE/PkJDQzw9Pjg5PENLS2PN0dnh1sjY4+Tk5OTk5OTk5OTk5eXl5eXl5eXltbW2q3J5cm59f3Z1d2hqaGlwb3Zta2tnZWZxdG15gG5teXd2iHhxa2podXV5dHV/wd/c3d3d3d3d3d3e3t7e3d3d3d7d3d3d3d3d3d3d3t7e3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3e3t7e3t7e3t3d3d3d3d7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f4ODg39/g4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4OHh4eHh4eHh4eHh4eHh4eHi4uHh4ePVhnFwY2lhV1NZV19MUk9STUtAPjg5O0E+ODc5NjQ3Njc6NjY2NDk+Pzo8Pzo/OTo6Nzo9PDk5PEFBPTtBQ0VDRkA+Pj5BRUQ+QEE3OD5GSEpesrW4wbm1u8jg5eXl5OTl5OXl5+fn5+fm5ebm5ra2tbWOfX5weoR1cnZnYmNlbGtyb2ZpbHZtd4Z9hXlsbHd4a3ZwfH14c3V5fHd2h7ng3d3d3d3d3d7e3t7e3t7d3t7e3t7d3d3d3d3d3t7e3t7d3t7e3t7e3t3d3d3d3d3d3d7e3t7e3t7e3t7d3d3d3d3d3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4OHh4eHh4eHh4eLi4uLi4uLi4uLi4eHj1Yd1bl5uY1pUU1hXS1NLSk1SR0E4Ozs+PDk4NzU2NTY2OTY4NjY5Pzw6PT07Pzo7Ozk8PDs5Oj4+Pjs8PUFEQkNBQEBBP0JDPDw9Nzs+REVKXrG1tLW2t7e2y9rJ3uXl3eDi3tXU1tPU4OPg39+2treuh3t/bnmNenJ1bWNobGxtaXR4enF5enqIh4N6aWh9cWRvcXyGgX55e318e4an2t7d3d3d3d7e3t7e3t7e3t7e3t7e3d3d3d3d3t7e3t7e3t7e3t7e3t7e3t3e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t/f39/e3t7e3t7f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4OHh4eHh4eHh4eLi4uLi4uLi4uLi4uHh49aGdmxhb19dV1lcWlJQSEpXTEVHPUA9Ozs9OTY0NjU1NTg2NzY3OD87OT09PDw5OTw6Pjw6OTg+Qjs7Pj5AREBDRUFAQD0/QDw9PTU5PEJHRl2xtbW2uLm5ubq9uMPT0r3BwcC6u7y6u8TMxb/Dt7e3hGl1gX1ndYd5Z3Vxa2t5eHB3fH15bWl3e3h3bml1j4FwbHl4d3d9gXuGgnmAoNze3d3d3t7e3t7e3t7e3t7e3t7e3t3d3d3d3d7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t/f39/f3t7e3t/f39/f39/f39/f39/f39/f39/f39/f39/f39/f4ODg4ODg39/f39/f39/f3+Dg4N/f4ODg4ODg4ODg4ODg4ODg4ODg4ODh4OHh4eHh4eHh4eHh4eHh4eHh4uLi4uLi4uLi4uLi4uLi4ePXhXJrZ3RhW1hYX15TVVVRVUpMRj9JRDs5PTY2NDc3NTc4Nzc3ODk8PDo+PDg8Oj0+OTs8OTs5P0E8PT9DP0FARUJCQTw9Q0A6Pjw1NDlER0dasbW1tre5ubm5ubm3ubm4uLm5urq6urm5urm6u7e3uX9ucHN6b3B/eXNuc3Vsc3Z4cXFwb2tvcX6Bc2mHhIF9dHOHdW11hYmBgHJ2hafd3d3d3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7f39/f3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f4ODg4ODg4ODg39/f3+Dg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4eDg4eHh4eHh4eHh4eHh4eHh4eHh4eHh4uLi4uLi4uLi4uLi4uLi4uHj14lxa2xyW1dXXWBUUVVUUFJPSkNATUE9Ozk2NTM0NjQ2ODc3Nzk6Pjs8Pjs5PDo8PDk8PTw7PT0+PUNEREBDQkE/QD48PkE8OD06NjY6QkpIWLG1tLa2uLm5uLi5uLe3uLi5urq5ubi4uLi6uru3uKx7cnhxf3ZzfnBsbXpyZ29sbW50cHt3d3Jyd3pvhpJ2f3x8enZ5fH9zfYdyda3T393d3d7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e39/f39/f39/f39/e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f4ODg4ODg4ODg4ODg4ODg4ODf3+Dg4ODg4ODg4ODg4ODg4ODg4eHh4eDg4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4uLi4uLi4uLi4uLi4uLi4uLi49eHb2pxalVWV2FbT1FSUE5XSURESUo/Ojk6NzUzNDk1NzY2Nzg4Ojw7PD46PDo6PTw5PDw9Oz09PDs9REdEQ0E8PDw8Pj5AOzg8ODE1OkFGRVautbW1tre4uLm4uLi4uLe4ubq5uLi3t7i4ubq7t7mqcnB4d3x7e4J3aG5xam9qY2lyf21zcn54dHFsanaAeX2AgH91doB1a4qLgHaR1d/d3d7e39/f3t/f3t7e3t7e3t7e3t7e3t7e3t7e39/f39/f39/f39/f4N/e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t/f39/f39/f39/f39/f39/f39/f39/f39/f39/f4ODf4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHi4uLi4uLi4uLi4uLi4uLi4uLi4uPYhm1sdGVWUFxnWE1YU1JRWUVDS1BOOzk4ODc1NTM5NTY2NzY4Nzk+OT0+OTw5OTw7Njg5OTo8QEA9PkBGQEJCQDo+PEE9Pzs7OzYxNjxCR0RQqLa1tba2tre4t7i4uLi4uLm6ubi4t7e3t7e5ure2tIlyd3h9iXxwem99c2hqbGdnbHRscXd0cWx2c3Fxd3FyfHl4g3Z7d2mLkYp9kM7f3d7e3tvY2drZ297f39/e3+De39/f3Nvc3N3e3uDg3+Dg4ODf3t7e39jS397f397e3t/f3t7f3t/f3t7e3t7e3t7e3t7e3t/f39/f39/f39/f39/f39/f39/f4ODf4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODh4eHh4eHh4eHh4eHh4eHh4eLi4eLi4uLi4uLi4uLi4uLj4+Lj4+Li4uPj4+Pi4uLi4+Lk14NoZ3VkVlVkZVdKWllXW1Q9RU1LSD04NzU3NjQzOTQ0Nzc1Njc5PTo9Pjw9PDk7PDk5Oj45PD4/PkFBQ0FFRUQ+OzxBPjw5PDs3Mzc+REhFSqG2tbW1tbW2tre4uLi4t7e4uLi3tra2tra3uLm2traLfXpsbHp/cGx5dm5qaGdlcXp4b2lvb3B1c21zd4Fnb32CgYNyf3lqcHJ6f6ng393Zy8a/vL2/vsLN0tDW3tnc4NfQzcPCw8PH1dfT2dzX1NjX0MfExce9vM/Kz87Y3djO3N3c2t3T0dze39/e397e3t7e4N/f39/f39/f39/f39/f39/f4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4OHh4eLi4uLi4uLf4uPi4eLg4d7W29/Sw8rJx9Hb3OLk4eHg2dre1sbExcTN2trf5OHi4trX3st9aWZxYVleZWFNTFRLUlpMO0hNSEZBPTc2NjUzNDY2NDg3NjU2OTw7Pj46Pjk5PDk3OTs7Oj49PEBAQ0RCR0ZCQT08Q0A9OTw7Nzc3P0RGRkaZtrS1tbW2tra4uLi4uLi3uLi3s7W2t7a3t7i5tba3opdxb29waW50dnFmZWNrbmdvcm1mZ2tygWVvdnyAeGRzj39zaHFyaWVlbm+w39HFv7u5ubm5ubq6uru6vc3Gw8e/urq6uru7u8HCvcHFvby/vry7urq5ubq6ubm6w8XDucDDwby/ube/z8/U3tjc3t/g3tLa4N/f4ODg39/f39/f39/f3+Dg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODh4eDg4ODg4ODg4ODh4eHh4uLi4eDh4uLi4uHa2t3RwsPCu8XT1uDdydPDrrnAsaqrq6uwtLbJ0sXRxLG4v7Srq6usr7S0vMzE1c60tLureGxtbWBdYl9ZS1NVVFFQREBRTUhEPzo3ODU3MzE1NjQ5ODQ2Njo8Oz08ODw5Njo6ODg5NzU8PDw/QEFAQkRDQkE8PkI/Pz09PTc1OD5DRUNAj7a0tLW1t7i4uLi4uLm5uLe1sautr7Oxs7OztLS0tqaei2tue3ZxeXhnY2hfcXdha25vaG99b25ja2lseHdsa4Z+bHB6dm1scG95sca8uru7urm5ubq6urq6urq6urq6urq6urq7u7q7u7y7urq6ubq7u7q6urq6urq6ubi3t7i4t7e2tbW1tbi3u8e+w8XHzcS4wMnH0tzZ2d/e3uDf39/f4ODh4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODh3Nji4uLi4eHh4OHg3tfGxtHQztTe3tPO0t/SuLi8sq2trKysrrG+ua63rKipqamqq6urqqqqq6ysuKyqqqqrq6urra6urq6urryzrayrpHlub21fXl1dVE1SU1xUSkE/UElIPjg5NjgzNzMwNTczNzg1NzY2Ojw/PDg5Ozo6Ojg5OjY1OTs8Pj9EP0NFQkNCP0BAQT9APjw3ODc6QUVEP4W4tLS1tbe4uLm5uLi3t7SurKuqqq2urq6vsLGzs7WjcG5ucm1wg311aWFlaGZkY2Rxc21td25naW1tZXBzb29zcXN8h4F6dX11n7u6uru7urm5ubm6urq6urq6ubq6urq5uLm5ubm6urq6u7q5ubm5ubq6ubm6ubm4uLi3t7e4uLe3t7a2tbW2tra1tbW1tba1t7e3t7rBvrzGycrb3+Dg3tvd3d7h4tDW4uHg4ODg4ODg4ODg4ODg4OHg4OHi0768zNjd3OLg0dnbxL23sLCxsa+zu7uzsLS9s66urq2tra2sq6qqqqmpqKmpqampqqurqqqqqamoqampqampqaqqqqytrq6urq6urq6sraR4aWJxZmFZWlZRUk5cU0Y9QlJEQTc8OzY5NTY1NDU2NTg3NTY1Nzg7Pjw7OTk5Ojg3Nzk3Njg8Oz47RD8/Q0BBREE+P0M9Pjw+Ojo3Nz9DRj54srCztLW2t7i3trKurq2sq6uqqaqtraysrq+xs7S1t4xucnRqaIB5ZmpmZWxdaG5waGxxYmNmcoJ+dmhobGpueoaBhXx4cXF5gK+6ubq6urm5uLm5ubm5ubm5ubm5ubm4uLe3t7e3uLm5ubm5uLe3t7i5ubi4uLi3t7a2tre3t7e3tra2trW0tLW1tbW2trW1tre3t7e3t7e3tre4v8bP0MS+v8DE19e8ydra4OHg4ODh4eDg4ODh4eDb3t7Uzby3tre6wMDJxLfIvrKwsLCwr7Cvrq6ur7Cwr66urq6uraytrKurq6qpqampqampqampqKmpqKmpqampqKmpqKmpqqqrraytra2ur66trK2heWpkbWdiXFhRUFFLVEpCOklRP0E3PDk0OjU2NTQ1NTY4ODY4Njs6OTw9PTs6ODY2ODg6ODY3Pj08PT5BQUVCQkNBQUBBOj09Pz05Ojc9QUc8bKqmqKutsLGwrqupqKqrq6mpqamrrKytra2usLO0tbilgIdvaWdzdGZrcG1qZGxvcm5rbWNrcHyJhG5qbHx4Y3uKfnNqc25rcY+7ubm5ubm5ubi4ubm5ubm5ubq5uLi3t7e3t7e3t7i5ubi4uLe2tra3t7e3t7a2t7a2tra3tra2tbW1tba1tLS0tbW1tra2tra3t7e3t7i4uLe2t7a2uLm4uLe3uL6+uLq9vcfb4OHg2Nnd4eHg3dfKwcPCurm5uLe4uLi3tbS0tLKysbGxsLCvr6+vr6+vr6+vr66ura2srKyrq6yqqqmoqKmppqepqaehpaipqamoop+hoZyip6inqausrK2ur7Cwrq2unXdwbGphY2BZUU1RTFJGQzlNUEU+ODs3Mjc5Njc0NDM1ODg3OTc7OTo9PTw6Ojk3NDo5ODY1OD8/QEI9RENDQ0FDQEJBQDtAP0A/PDw6O0NIPWOopaWlpqioqKenp6ipqqmoqKipqqqsra6wsLCztLW1taWYdn5xZmt4cW9tZmVsaGNsZ2ZpaX11bWlvfXZ5hWZod294b3Fvcninu7m5ubm5ubm4uLm6ubm5ubm5ubi3t7W1tba2tre3t7e3t7a2tbW2tre2tbW1tra3t7e2tbS0tLS0tLS1tLS0tLW1tba2tra2t7e3t7e3t7a2tre2tre3uLe2t7i4t7i4uLi4wMXTyry8w83PyMC9urm5ubq6ubi4uLi4t7W0tLSzs7KysrGwr6+vr66urq+vr6+uraysrKurrKysq6ehoJ6gn5udoaGdlpmkpKaon5mZmZmanZ+gn56fpKqtrq+ura2srJl1cGlrY2FeXVVOU0tSREQ4TktHQTo4NTI2OTY1NDczNzc3ODk3OTo7PT0+ODg4NzU6OTk1OD9AQEFEPkZBQkNAQkNCQT88QEJCQD0+OjpERj5cpqWmpqampqanqKenqKioqKenqaurrKytra2ttLS0tbekc311bnONf3JmanFjaW1jaGZobG51aV9jZ3VzdnpuZ3Bwcn56cYihu7m5ubm6urq6urm2s7a1uLm2trW1tra1tbW1tbW3tra3tra2tbW2tbW1tbS0tLa2t7e3tbS0s7O0tLW1tLS0tbW1tra2tra2t7e3uLe3tra2trW2tbW2tra2tra2tra3tra3uLi3uri4uLi3uLi5ubm5urq6urm4t7e3t7W1tLS0s7OysrKxsbCwr66urq6urq+vra2srKuppaSmpqScmZubmpmampmXl5eXl5aZm5iZmJmZm52en5+dnJ6gpKWko6OioqKQdG5jcGFeXltUU1RIVEo/PFFCRkM7ODYzNzo1NTQ4Mzg5OTc4OTc7OTs9Ozc6NzU2OTk4NTg+Pz9ART5CPz9DPzxBQUI/PT9EQT8+PTk9Q0Y/VaSlpqanqKeoqamop6ioqKioqKiqrKuqqaipq7W1tba5o3eKcXKHhnd0cGh5a2JjYWVsaW5zal9jZWNjZWprYmRqbHaXjX6ovbm3tre5u7u6uLWxrKurqq6wrKyrq62tq6uvsLGvr7CytbW2t7W1trW1tbW1tbW2trSvr7O0tLSvra6vsrW0tbW1tbW2t7e3t7e3t7e3t7e3t7Owsra1tLa2tre3tra2tbW1tra3t7e5uLi4t7e3uLi4ubq6urq5uLi3t7e1tbS0tLS0tLS0s7OysbCvr6+vr66vr62oo6KgnJqampqZmZqbm5qampqbmpmZmZiXl5aYmZmZmpycnZ+foJ+goKChoaCgoJ+fi3RuaXRdYGZeUlRLRFRJPUVTSEVCOzo0NDY5NDQ1NzM4ODg3ODk5Ojs7Pz04OjkzNTg5NjM5PT5AP0A6QEJCQkA/QEJCPz0+QUFCPz06PkVDQFGjpqWlp6inqauqqKaoqKipp6ioqKinp6ioqaq1tbe3t7KZtH99kIx1Z2lqbGZjYGNoZW94cGlicXx5cGpmZmRma3NqhYystrKwra2ttLeysLCtrKuqqaiop6ipqampqKinqKipqaeoqqurra2sqqytraysrq6traunpaSnqqyopKOkpamwsbGztbW2t7i3t7W1tre4t7e3t7Kppaasq6ivtLa1s7W3t7a1tbW2tra3t7e3t7a2t7e3t7m6urq5uLi3t7Wxs7S0tLKxsK6sq6yurrCxsK2rqqmqqKijnJqZmJmYmJiYmZmZmZmZmpqZm5ubnJybmZeYmpqcnJydnJ2foKGhoqKioKGgoKCfnop1amtuWVxhVktPREdVRz5PV0hEPTw4MzQ0ODQ1NDgyODk4ODk6Ojw5OUA8Njk6MzY3OTE0PD8/QEBBOkNGRUJBREJDQTo7P0FCQz9APUBEQ0BPo6empaemqKqqqqakpqenqKioqKimpqaoq6uttba3t7e4rbJ1cHuDdmBiaWtiZWZhZGdmfYh5bHKAfXFvcXhjbW5xZo+srKurq6ysra6urK2trKyqp6WmpaWlpqioqKiopaeoqKioqKeoqampp6Wko6KioqOioKKioaKhoKChoaKjpKOjpaWlqLC0s7OzsKuqqaqztLa3trGopaOioaGipKiqqairs7Sxrq6xs7W2tra3uLi3t7e3t7e3t7a2uLe0sa6ppqerrKmnpqWkpKSkpKWnqaajoJ+enZycm5uampmZmJeXmZmYmJiZmpqampqampqbm5mYmpydnZ2dnZucoKGgoaOjoqCgoKCfnp2FdGtsaFdYU0pHTUVITUdAU1dGRz09OTM2Mzc0NTU3Mzg6Ojo6OTw9OjpBPDY9ODM3ODgzNztAPz8/QDpCRUNAQkRDQT87PEBDQkNBQDxBQ0A9TqKnpqanp6mqq6mkpaWlpaaoqKippqanqKmpqrW2tre3t7izc2h7c2JnamtpaWJhZGloXV1tfHJma3J/fHR8bm1zc36gqamrq6uqq62trKusq6mpqKWjpKampqWmp6eqqaamp6enqKinp6iop6WjpKKhoaGhn56en5+fn56foKGho6Wko6OkpKSmp6enpqWkpaampqeqraumpKKhoaChpKWlpaenpaeoqKalpaivtLa3trW1tra1tbOwrKupqa6rqKWlpqampaSkpaWlpqWkpKSkpaKhoaGgnp2bm5ucm5qamZiXmJiYmJmampmZmZmYmZmZmZqZmZydnJycnJybnJ+fn6ChoaKgoKCfnZ2cgHNrbmReU0pITUZETEtFRFFTQ0c9PDgzNjI4NDY0NjQ4OTg6Ozk7Pjw5PTs5PTczNTk2NTY8QD0/QD88P0JDPkJCQj89Pj5CQ0FFQD86PkVAO0+jpqWkpqeoqaelpKWlpKWnp6eoqKanp6alpqa1tba2trW2uYptcW1vfHxxZ2pmYGFsYFROW2hqbm9tgYJ9cWdxdn6aqKeoqqmpqqurrKqqqqimpaWkoqOlpqalpaWmqaqppqWjpKWmpqSjo6KioqKgoJ+fnp6cnJycnJ2dnJ2en6CioaKjo6KhoqKkpaSioqOjpKSjpKSko6Ggn6GipKanp6ipqaelpaSipKSlqK2wsKyrqqusqqmnpaWmpaWlpaalpqioqailpaWkpKSlpKOjpKOioaGhoqKgnp2cnJubm5qZmJiYmJmam5mXl5eWlpeXmJiZmpqcm5qampubm5ucnJ6goKGgnp6enpycm356bnJiXlNNSlBFRk5NQkBPRT5JOz01MzYzODM2Njc1Ojs4OTs5Oj49Ozo5OT03NjY5NjU2PkI+PkE/PT5DQT5DQ0BAO0BAQkJCRUA+Oz5FPzxQoKSjpKOjo6SkoqSlpaSlpqamp6empqalpqaltLW1tbS0tbiBaHx9ZXOCemxwdWFfY1ROT1FbaGxpbGxxbW5xbnScoqSnqKioqauqqqqqqaempaSjo6OjpKSlpqalp6ytqaShnp2eo6Shnp6foKCenJ2dnJycmpqam5ucnJubm5ydnp6foKChoJ+goaOioKGjpKSjoqSlpaWkop+go6SkpKapqainpaGdnJ+jpaipqainqKioqaempaWkpKSlpqampqampqenpaWko6Ojo6KioqGhoqKhoqOkop+enZ2cmpubmpqZmJeXmJaWlZSUlJWVl5iYmpubnJuampqam5ucm5ucnp+fnpucnJyam5p/fnF0YFtUTUdNSEZMSj8/TkM8QDs8NDM4Mzc0NzY3ODs9ODo6OTk7PTs7ODk9Nzc4OTU4OD9APT9BPjs9RD89REA/PzpAQUE/QUVAPjw8Qz88Tp2ioaKioKCipaSkpKWlpqenp6empqampaampbW1tbS0tLS3jHalsXdmc3Jvc2xjZGlYT1JRT09dgG1kYFptkZGSoqKjpaampqenqKiop6alpaSjoqGhoaKjpaempqesrKemoJ2cm6Ghnpuamp2cmZiam5qampmZmZubm5uampqampucnZ6goaCfnp+hoJ6foqOko6Omp6inqKWioKGhoaGkpaWlpKCcmZmbnqOmpqampqanpqempaOlpKWlpqiop6enpaWlpaWkpKOjo6KhoqKioqKhoaKjo6Kgn56enZybnJubmZaUlJSTk5OTk5SUlJWWl5qam5ubm5qZmZqanJ2dnZ2dnZuampqamZqXf3dvc11aTkhKTkdFRklERU5APD09PDQ1OzQ2NDY1Njc5Ozg5OTg5OTw7PDc6Ozc4ODg1ODg/Qj9BQTw+P0A8PEJAQT49QT4/Pz1CQUA6OkA8PE+doqGfoJ+dn6OkpKSlpqeoqKenp6ampqampqW1tLS0tLS0tbSXtqd1Znh2Y2xjY2VjW1JTU1JNXqCMeFhodpajnp6hoaOjo6OjpKSlpqalpKSioaGko6OjoqOlpqWmpqenpp+bmpuioJmWlpWam5mXl5iYmpqYmJqampqbm5qZmZmenZ2goqOjo6KkpKWinqGhoaKjpaampaSjoaCgn5+hoZ+goJ2amJeZmpygpKOjpKWmp6alpaOjpKSkpKWnp6ampqampaWmpKOjo6SjoqKjpKGfoKGhoKGgoaCfn56dnZyamJeVk5KSkpKSkpOTkpOUlZaZmpqbm5qampqbnZ6enp2cnJybm5qamZmZlH10bHReWk9IRUdGQkVORT9GOzo+Pzs0Njo2OTM2NDY4ODo4OTc4ODo8Ozw5Ozs6OjY3ODk5Pj9APjw9QD5AOjlAQT89QT8/QUE+QUE/Ojk9PjpQnaCfnZucnJufoqOlpaWlp6iop6ampqanpqantLS0tLOysrGwsK2rkHiGj36bmn93Yl1TUlFRTGKgootaiKCgn52YmZycnZ2eoaGgpKenpqWkoqGjp6alpaKipaampaanpqagm5mboaCXk5OSl5qcmpeXl5iampmampqam5qYmJmaoKCgoKGfoaKipKamop6gn5+goaOko6Khn56enpyanZuZmpqZmJeZnqChoaKioqKkpaWmpKSkpKKioqKkpaWlpaWlpaalpaOko6KioqGgoKGgnp+fn5+fnp+foJ+cm5qZl5WUlJSTkZCQkZKSkpKSk5SVl5iZmpmZmpqam5+fnp2cnJycmpmZmpiXl5F8cmdxXl1QRj9BRD9KT0JCRjhDRT4+OTg7Nzc0ODQ1OTo6Ozk3OTo8Ozo8PT48PDo2NzY5OD4/QT47Pz49PDg6PkFAQUE/P0FCQERBPjo4PkE8U5ycm5uampycnaGio6KjoqSmp6alpaampqSjo7KysK2rp6amp6alpqiln6iop6qnoXmEXFFST0xcnKCAYpmgnp2clZOVlpeZmp2dnqGmpqampKOioqanp6ajpaampaWmp6amop2cnqGfl5GRkJSXm52YlpaWmJuZmpqampqZl5iam6Ghn56fnpybnJ6goJ6dn56fn6Cio6SjoqCfnp2ZlpeXl5iYmZubnqKioqKioqGio6WlpKOio6SioaGhoqOkpKSko6SkpKSioqKhoqGgn5+gnp2enp2dnZ2dnp6em5mYl5WTk5SUk5KQj5GSkZKSkZKTlJaXl5iYmZqampyenZ2dnJubmpiYmpmXlZaNempmamBiTkY+P0A9SkVAQ0A7QEE8Ozs5Ojc2NTg0Njc4OT04ODs6Oz87Ojs8Ojk6Nzc2ODs7Oz08Ojo8PTw3Oz5DQkRDPz1BQ0FEQT88OkBCO1eZmJqamZmam5ucnp2foqKhoqSlpKSlpqSioJ6op6alpqWlpaemp6ampqakpaanqKehqXJOUU1KVJahenKanJyenJeVlJWWmJiXl5qeoqKhoqOkpKOjpaalpaanpqSlpqalpaOgoKGhn5mSkI+WmpmenJaXl5eZm5ycnJqamZeZm5uen52cnZyZmZqcnZydnp6fn5+hoaCgoaKgn56bl5WVlZeanZ6fn6GhoqKio6OhoaCgoJ2cnaGioqOkpKOioaSlpKOko6SjoqKioqKhoKGfn52cnZ2cnJ2dnJ2enpqXlpaVlJOTkpKSkZCRkpKSkpGSlJWWl5iYmJiam5ycnJycnJ2cm5mYmZiWlJWXi3hsY2RiZFFHQT1DO0tIRDo7Ozw+OTo6OTo3Mzc5NTo4ODg8OTg7OT09Ozo7Ojk8PDc2NDc/PDo9Ozw/Pjw7ODxBQ0FDQkI+P0NAQkFAOj9APztZmZiampqam5ubm5ydoKGhoaGhoqKioqKhn5+dpKWmpqenpaWmp6ampqWkpKalpKSkpaaGUFJQT0+PmHB6mpubnJ6cnJycm5ubmZiYm56dnp6foKOkoqGhoqKio6SkpaalpKOjoaGhnpyalZOUmJuam56amJiYmJqcnpyam5iWmZybnJycnJydmpqbnJ2dnp6dnp6fn52cnJyhoaCblpWVlZacoKGgn5+hoKKjoqOhnZuZlpaWlpicnqCip6ikoaCgoqOjoqKioKCgoJ+fn5+gnp2cm5ucnZydnJmanJuWk5KSkpKUk5KSkpKSkpOSkpKRkpSVlpeYmJiYmZqcm5qbm5ucnJqZmJiXlZWWl4d3ZGdoZGJNQ0U8RDlJSkU5Ojs9PTo6ODg6NjQ3OTU8OTY4OTc5PDs7PDo6PDs6PDw4Nzg3Pj07Pj46Qj86Ojo/QURCQ0FBQD9EQUFAPjpAPj06W5qYmZqbmpubm5uen6CgoaKioKCgn5+enp2dnKWkpaanpqWlpqakoqKio6Oko6Kjo6KnllRYVVJOZ21rgZ6am5udn6Cgn56enp6dnJ2dnJ6enp+goaCfn6CgoKGio6Ojo6OjoqGgnpuZmZiZmZmamZienpiYmZmam5qWlZeWlZicnJ2cm52dnpybnJ2cnZ6bmJqeoaGdm5udoKKhmpWVlpaZoKKgnZueoKGjop+em5eXlJKSlJeYmZ2goqenpaGgn56goaGioaCfnp2cnJubnJubmpqZmpydnJmXmZaVk5GQkJCPkZKSkpKSkZKTk5OTk5OTlJWWlpeXl5manJubnJucnJqamZeXlpaVlZSEcmZsYmRbREJMPT84RktCPEA+Pj05Ozk6PTg1ODg2Ozg1Njo4PDw7Ozw8Ozk8Oj09OTU4Nzw5PD88OkE/Ojo6QEBDQkRBQ0A/Q0FAPj08QD09Ol+al5mamJeYmpycn5+foaGhoJ+fn56foKCenZ2lpKSko6OioqOjoZ+foaGipKOio6SiradXXl1UV19ua42dmpqbnJ6dm5ucnZ+enZycnJydnZ+goKChoaGgoKGgoKGioaGioZ+enJqampqbnJqZmpuZnJ6ZlpaWl5eTjo6QlJabnJuam5udn52cnJycnJ6dlpSZnJ+in5ycnZ+hoJuXl5mZmpycnJubnZ6fnZqXlpaWlJOTlJiampqfoKGmpqWgn56fnqChoaCenJubnJybm5ybm5qZmJmZmZmXl5iVlJKQkJCQj5CSkpKSkZGTk5aYl5STkpSVlJWWlZaZmZmam52cnJyampmXlpaWlpaQgG9vZV5gV0BKSDg/N0lFP0VBPD07Ojo8Ozs3NTs4Njs3NDY6Oj47Oj0+Pj07Ozs+Ozo4Ojk5NkBBPTo8PTo6OT9BQ0JERUM+P0FBPz8+Pj89PDtgl5WXl5aVl5mbnqGhoKGioqCenp6enqCgn52bpaWjpKSioKCfoJ+dnZ+hoqOjo6OkobCjXWVkYGFua4GenJubm5ubmZianJ2enJubm5ycnJ6ipKGeoKGhoqKhoKCgoaGgn5+enJqZmpubm5ybmp2dm5manJiXlZWWkY6Nj5KYnZycm5ycnqCdnJucnJyempWVm56foZ+dnJyenp2cmpqampqampqbm5qXl5aTkpWVlpWTlZaam5qanZ6foqWjnp6fn5+en5+enZ6fnZycm5qcmpqbmpiZmJiYmJiYlZSTkZCRkJCQkZKTk5CRk5SYmZiVk5SVlZWWlZaXmZmXmZqenpyamJiXl5aWl5eYjX1ubV9lVlRFSzw3PjdSRUM+QkE4Ozw7OTg6ODY7Nzc6Njc5Oj0+Ojw8PT49PD06Pz06ODw9OTtAPj4/PT45ODs/QkNAQ0VDPT9DQj5AQD5APTw8YZWSlJWWlpeanJ6goKCgoaCgnp6enp6gn56em6WlpKOioJ+fnp2dm5mbnJydnp+gn56rmGNpbW5pZm2enZybm5ybmpmZmZqam5ucm5uam5ygo6SgnZ6en6CgoKCgn6ChoKCfnpuamZqam5qbm5ufnpyZmJqamJiYmJKOj5OXnJ2bnJ2cnJycnZycnp6dnpqVl5ygoaGfnp2eoJ+cnJuampqbmpqYmpmVk5OTkpOWl5eVlJiYmZucnJydoJ+gnp6enp+fn56en6KjpKKgnp6cm5qampuZmJmZmJeXlpWUlJORkZCQkZKTk5OSkpOUmJmYlpWUlZaWlpaWl5iYmJiXmZqamZeXl5aXlpeWl4l4dmddX1dURUU5OTs8WT5AOEI/OTs7Pjk4Ozg6Ozc5OjU4OTs9PDk9Oz0+PD0+Oz8/Ozk+PDw+Pz5AQUE9ODc7QkNFP0FFQz1AREJBQEQ7Oz47PGKWk5SUlpWUlpiYmZubnJycnZ2cnJ2en56dnJqkpKSkoJ+enpybm5qZmJiYmZucnZ6cpolla3R4bVuFop2dnJydnJqbmpqampydnZ2bmpuboKKinpucnZybnJ2enp2dnZ2fnpyampucnJycnJycnp6cm5qanZqam5yVkZOXm52dnJ2fnZycnJycnZ6fnp+cl5idn6GhoJ6cn6CfnJubm5qbmpmZmZmZl5WWlZaYl5eXlpaYmZuenp2dn6GhoJ+fnp6fn5+dn5+hoqKhoZ+fn5yZm5qcnZuampmXlpaYl5eXlpWTkpGTlJSTlJSUlJaZmJaVlZeZmJeYl5eXl5eYl5iXl5eXlpaYl5eVl5eDeHZfW11eUT1GOjk4P1VDQTtDQzo8Pz86Ojk3Ozg4ODc0ODk8Ozw4Ozs8PTo9Pjo/QT06PTw+PkA/PUBBPjk2PERDRUBBRUU9PkVERD9COzo8OTpkl5SVlZaUlJSUlJWXmJiamZqcnJydnp6dnZybo6Oko6CenJuamZqZmJiYmZiam5ubm6WJa3F2em9lmp+enp2dnJybnZ6dnJ2enp2dnJydm5ygoJuampubmpudnJqampucnJuZmZycnJ2dnZ2dnZ2dnpybmp+fm5ydm5mZmZudnZ2dn52dn5+dnJydn5+fn5uanZ+goJ+dnJ6gnpubm5ubm5yampuamZudnJqZmJeYmJiYmp2foKCgoJ+hoaGgoJ+en5+fnp6foaKhoJ+enp+enJqam5ubmpqZlpaXmZmYmJiWlJOUlJWVk5OVlZSVlpWVlZSYmZuamZaWl5WWmJiWl5OUlJGRk4yRkJOWfXhqYWJiXFA8QDw2OENWSERCOjg7Oj47Nzc5Nj06OTk2NDc6Ozw9OTo6Oz87PT08QD47Oz46PT89PkBBP0A8NztBQ0U/P0REPj9EREM+Qj07PDs6Z5aTk5OTk5OTlJSVlpeWl5aWl5mbm5ybm5uamaOjoqCfnpuamJeYl5eXmJmYmZybm5qkgGpqb3lzcZegnp2dnJydnp6enp+enp2cnJydnp2bnJuampqam5ubmZiYmpqamZmZmJqdnJydnZ2dnJ2cnZ2cm5qdn5ucnJubnJubnZ2dnJydnp2enZydnZ2cnJ2dm5uenp6dnZybnpubnJycnJydnJubmpmbmpmYmZmYmpmZmpyfn5+jpaKfoaKioaGfnqCgn5+fnqCioaGhn5+fn52ZmpudnZqZmJWWl5aVlZaTkpOUk5STkJCSk5GUkY+OkJGOlZabmJWYlJmXlJiRjJCPk5yTkoyFjIeDhndxZ2pkW1xRQT44NkJHYEJFR0A+Ozw7Ojg4NjU8ODo4MzQ6Njk9PTk5Ojs9Ozw6PD48Oj5AOj5APjw/QD8+PDg6Q0FEPz5CRD8+Q0VCPUJAPDw8OmeYk5KSk5OSk5SVlJWXl5aWlZaXmZmZmpqampqkoqCfn52bmpmYmJiXl5iZmJmcnZ2cqH1nZXN7enOJop+enp2dnp6enZ2enZ6enp2dnZ6cm5ybmpubm5ucm5iYmJmZmJiZmZmbnZycnZ6enp6enp6dnZybm52bnJybnJ2dnZ2dnJ2dnp+fn52cnZ2dm5qbnJmZnJ2dnZ2dm5uanJ2dnJycnp2dnZybmZeVlZeXmJqam5ubnZ6foqOhoKGhnJucm5ubnZqcmZycn6CfnZiZmZmUkpKUl5SPj4+OkYyNiYuQi4mLjpGRj4mQmJiQkoyNi5KQj5iYoqiqpqWlrKOmoZqep6eyqKKVo6Cfl39wcWlsXFtcTUY8NzdHR1g+SE5URjk+Ojg5ODc1PTk4NzMzOTY6Pjw6Nzo8Ozo6Ojo8PDs/PjtAQD47PT5BPDw2N0A+QkA+QUY+PEFEQT1DQj49PDlmmJSTk5OTkpOUlZOVl5iYmJaXl5iZmZqampqaoqGfnp2cm5mYmJiYmJiYmZmZm5ybnKx/am16f3lxh6Genp2cnZ6enp6enp6dnp2dnZ6enJubnJubm5ubm5uZmJiYmJiYmJmZnJ2dnJyenp6enp+fnp6dnp6dnJydnJ2dnZ6fnZ2fn56goJ+enZ2dnZybnJ2em5qbm52enZ6dm5ubnJ2cnp2cnZqYl5SRjo+QkJGVmJSWlJiZmpudmJuYlY2Mjo6TkpKRj4mQjpGRjo+Ki42NjYiIi4+Lg42NkY+MkI2Qk5WVnJihoJySn6SipKmam5eanKOprb3Bwbq8uL26ucC8ubq3uru7tL2zwbV/bnVmZ1peWUxJRTo7TElTPFZSSUM6QTo7Ozc3NTo6OjgyNTY4Oz08OTk7Ozw5Nzo4Ojw6PT85PD8+PDw9QTs5NTg8O0A/QT9EPTxBQkA8REM9PT06YZOTkZCUlJOTk5OTlJeYlpeZmJmYmZqbmpqamp+gnp+fnJqZmpqampmYl5iZmZmZmZmphXB1e4B3b4mhnp6enp6fn56en56fn56dnp6fnp2dnJ2cm5ubm5ubmpiYmJiZmZiam52cnJydnp2dnp6goJ+enZ6hoJ6dnp2enZ6fn56en6CenZ6enJydnZ2cm5qYnJuVmJqamJiYmJmSjJCXlKCXk4+MjYqKiImMiJORh5CPjYqKkJCLjoqMi4+IiImJjpGOjYaFiYaKhoWLiI+SkJCNkJKXlpKamJ2TlJ6kpqaqq7Gsr6+rpquqsbm5tbS0rqyvtMDIxcXBvsbDxMTDurW+t7a0s7C2tb6qcHRyXGZfXl1JRj8/RUtMVklcTEQ/PUI6Qzk5Nzc7OTk3MTc5ODo+ODg6PDw7OTc5OTs9Oj4/OT5BPDs+PD46OTY5PDpBPkNBQT08QkBAPkJEPj8+OVyHhIOHi42KiYaFgYqMkZOVmJiHlZaWkpiampmenZ+gn52ampubm5ycm5iWmJmXl5ibqo56dXZ7f3mCoJ+fnp+goKCfn5+foKCfnp2dnp+enp2dnJqbm5ybm5uYmJiXl5iZm5ucnJydnp6enpybm52dnZycoaGfnZ6dnZ2dnp2dnJiWlpaYlZWSlpmWk5GKjI+PjI+NkIuLj4+WiYiEi5GZjn2Fi42PjYyHioyQm4yRj4+Lio6TjIyNjIiSi4yFiYyPhouIh42KhYyEj4qXkJOYmpWbnKOqoaKknKKrsbe0ubWxs62vsrKlp7O6sbq6vLa3tsDDw729vLa/urq8wbW4wL60r66mqa+3mm58Z1tjWl1fSEU+QUtJUlhZXkFGOTk9OUY/Pzo3Ozs7NjM6Nzo5Pjg6Ojw9OTk4Ozk7PDo+PTtAQDs8QjxAOjg0Nzw7Qj9BQj4+O0NEREBDQz0+PjlhmZWLkYWNj5aSiHl9e3+Fi4OKgoqJhmuAeJCLlpqRnZ2UlJGTlpeampiWk42Sk5KQm5uIdndzcX1/cpGgnZubm5yenZ2eoKGgm5uWlpucmpybnJuYmZqYmJmampqWi5CTlpmYlZiYlpucl5WSkY2SkZCUk5KXm5mYm5ePjpCLjo2Ch4uLi4qLiI2RjIeHhoqIiZGKh4yEhYqNi4qNhI+UkIyDkJOUmZWQi5OTkZWRlpWOj5GMlI2Oj4qIj4ePhoeJiYmNiomJioWNh46JmJKUmpuXmKChp6Cko5qqqbO2sbWwqKmiqK6tn6qvsK21ubi8wr/BxLixtbCutrOwuL68ury+urOzp7G3wpB1gGNiXlpXUk1IRkVQSVlXX1tDUDpCQz1HRj84Nzo6NzU1OTc8OTw5ODo9Pjo6Nzs7Pjs7PTs9P0E7Pz48Pzo4NDM3OkFBQEI+PjpDREM/QUM7PT45Z6mloqKZn6CippeUiI2CiIJ1h4iKiIp7e3Z7enmPeoiSfn18en6CkYWBgH1zfH99fISHfnRweHZzfHaBj4iIiYeIioyMkZicl4iOhIuNi4iNkI+Pi5GPi4yOj5CQjouFhYeLjIyHiIuOi4eMhYaBjYuGiop/iYqGiJiRiIOIg4KFfIuLjIaJi4iKkIyIi42PjI+Wh4mLio6NjY2Wk5OdnJyalpycm56bmpuYnZeTkZWWkJKRi4+LlpSMjYqDi4SEiYyQkIqOio2LipGJjZOTk5SVk5KcmZ6Xn6CfpaKvsamupKSfmKStpqa4t6ysu729wsPAv7+vpa2wsLS3uLO0uLa0ta6stK+4tLaBeXpjZmBeVlBRQUVMT0lcXl9UR0dCS0xCREA9ODg7OTU3Nzk3Ozc9PDk9Pj05Ozg6O0A8Oj06PkJBOD88Oj84NjQyOTtCQD9CPj04QEI/PkBEO0A+N2CloJqXnaGaoaCPl5efl5WCjaCfo6GdmpKOjIxycXBvdnFucG1ucHZub29waHBxcHR+c3FycXd7cnl2d3Jyd3Z6e3l8fXt/iIGEi3+PkYaNi4uGiouLiYaEgYaCgIKJkYOAg4x/ho+LiYWAh32AgZKQhoSEho2DhIyPj4+IjY+Hi4iRkJWRjpCKk5eOj5WYp6SfnZWYlpaln5udq6aqt7W4srGnr6qnpqGfmp2WkpWVkYqPjImTjZuVjYuLhoaJjJWQkJCLmZKVlZSbkJiTlIyNkYyWl5WilZ6mqauno6OqsJucpp+mq6G0vb6zs7+5u7u6uby9rqiusa6wuLyztLGxqrCpqLGxsqild3J0X2hhYFRWUUlKSFZNXl5eVExKRVFKRUdDPTo5OTc0ODY4Mzg4PTo9PD47OTs4Ojs/PDw+OT9DPzg7Ojg8Nzc2Mzc5RT4/Qz89N0BAQT0/RDw+PThUj4yGh4eUjJWZl5yWmZaNlZyWlZydoKCdmpiWeHFubXJ4cXFsbnJwa3FvcG1yc3t1dnd5fnVxeHZ0d3tybn98gX15eH1/eYOGg4WCg5CLkIuLi42Pi4mJhYKBfX9zfYiAfpyQhIWFiYuPinp9fYaOjYqGjZSRi5CXj5SXkpihlp6XlZunpp+goKawq6GjpbW0sqqmqq+isba5vcK7ucO+vLi9uLWxrLCspZuSk5mfm5SPk5WOmp2doJqfn5edo6qsoZ+em62hp6qwqaampJiRkZWUo6SirKSss7Szs6i3tru4sLKvra2yt7a6srW6s7e5u7i8urayr6yxsbKztLOxsa2us7Gzs6yhl3Zxc19jXlJRVE1PSUdYT1pcZFROR1VPRURKRD44Ojg3NTg4ODU5Nzo6PTw/Ojg8ODk5PTs9PTpCPj84Ozo5Ojk4NjI1N0I+P0RAQDY+P0I/PEM8PT46Tn98go6MjJOTl5eaj5SWjZaRkZSXk5qanqGdnHJvcnFxcXFxcG5zcW91dHJxdneAdXd8eYV+d3t8eX1/fICJiYmDfXp/h4GIiYGAgIGGiIGGi4aIhYSIiImEf4J/enx8fX6SkH+IeIGFi4qDhIWKj4yNkZmdlJSUoJqan6Ktsa2ppKWtr6ysrLWuvrmtrqm1sLexq7G2rK+9wsLAvrq8trKutraxtK66u7OurKepp6unoqmtoKmooq+wuLSxvLq6urK0ta+8tLezt7e7t7mtrbCprLW5sbeytLe2sLu7vLu6ury1vLi0wbWsqqqrtLG3uLm1trSzsKymrrCqq7Cxq6yusLKxtK6qo5N4dnJlZ1tMUlBFTUlTV1JlXmdUUExcUUhMUkNBOTk3OTU4ODY2Ozc5Ojs6Pjk4Ozo6Ojw8Pj08RD45Njs7ODg+OTUxNTZCRkREP0A3Pj5DPjpBP0BAO0t/gomXmJSdlpabmIuSlo6XkZGVl5SZl5+bmZx8dHV2dXl1c3RudnJzdHV2d319gX56gXyDfoJ/fYB/hIKFj52RiYF/go+Xjo6HgoCBiIuFfoqQi3+HjYyLioeSioeGjZGTkZGEh319g4iMjouOiomQj46PlJSYkZWbmp2dqK6yr6+1tLOtsrW4sLy1tbGqsKqztbS7t7SztrS1r7i4t62noqassLCvtre3vrW5vLOysa61u7C0r6+yu7axuMC9tLS0s7izvLq2tLrAvbm6ubq+ubm5vrWysa+yr6q1tLGzsbSzrri4tb+vpKaoo6ussa+zrq6wsKytq6qroqKmqKKnrauqpaynoqeYeHlxZmVZT09NSVJNV0xPX15cTlVUYlFEVE07Pzk8ODk1Nzc1Nzk1Ojo6OTs4Ojw8Oj08Pj4/P0I9ODY6Ojk6QDs1MjY2QUZDQz4/Nz49Q0I5P0I/PjtLjpGTmJmVmZGTopiTkpKLk4uOkI+Vl5ablZSbhoJ9enh2dHRzdH53end2gIKDhouMhISFioaQiYeRk5aRjZaalY+IjI+emJaVkpCTl5qamJCdoJ2Tl5qgmZ2bo6CVkJugpKOak42IiIuJkZGOkY6LmJqPj4yUmpecnJufnKSstLm6vK+2tLi0tLK3uLmzq6+qqKy1srK1rrGrrqa3s7OxpaGotbCvrayrtbqyu7q6tLK3ur67ubG4sLmtqLK4u66ttLS3tbu2trm5vLe0r7G0t7a5s7e1pq2pq6ior6yprq2up6KxtLG0q6aop6Cjq66oqq6orLKwr6+pqKGeoaGjpqOgopqlo56ol3J3bmdiVUtUT09KQ1BLX2JYWlFcVGBNSFJJQUA5Ojg2Njc3NTg5NDs5Ozk8Nzs+Ojg8PD0/QkBBPTs2OTk5Oj87NjM3OD5GQkJAQjk+PUBDPkBGQj44R5OWkZWTkpSQkZ+ZnZmVkI+Sko6Mk5aWko6RlZGSkIaBeXJzdXuBhI6HhZGTkpicnJiVkJWYo5yaoaeqqZ+clpeVnaKioZyZnpmlqKyvramnqqmop6GlqKirqamvoZufoaOjoJqfoJyUjZiUmKCgoaSem5qkp6Spq66spaOoq6+xtK6qrK6zr6ystLO0ua6urayqrLKwsK2wqKqmsrS0uK6qtrqwr6qurLC3s7i0t7W0u7y4tbWxtauyrKiys7uvrbGytLa1sbG0s7OvrKuvs7a0sayutKqqpqWnrauoqKupqaifqbOwqqeppaOio7CtqaatpairrayppaSioKWipaOYmZyVnqKippdudWVnZFZPWEtLSktTVHBiWWRXX1tcUlpQTEM8ODk6Njk4NzQ3NzQ4Ojw6PDg6PTk3PDw7PkM/QT47OTo5Ojs+PTg0NThBREVEQkM5PjtAPkI/R0Q+N0KSm5SVlZaVj46Wl5qZlZGKk5SSjo+SkYqKiY2Ul5qTjYmCho6VkZSfmpuin5+jnqGhn5ijpKelpaapqa2rqaKmpKilpKGfnqOjra2srairrq6qqqukoaKlqaenqaijopybm6SgpaijoJidmZ+hoqmnoKKirqyrqqetrqilpKmpqammo6iqqaekp66wr7Ovq7Crqq+yr7Czua+rqLCxrrCyubO0r62vtbCss7GurLW1tLSzs7CvrKyqrKusr7G0s7CwrrCwsKyqrauqq6alrrCysKumqbCvqaOkqaunqKaopquwq6mvqaaoqaalo6iwraqpqKKpo6WnpKGhoKKloZ2el5aYlJugpKmUbnNeamlfVVpOUk5QT1JkXGVjW11ZXFBZT0tAPDs5Ojc6ODczNTMzODo9OTo4OTo5Oj08PEBEPkA9OTo8PDw+Oz45NTo8QkFFQUNBOT47P0BEQENCQDdAkZ6YlJeZlpGHi5SSl5GIg4mLk4+OkI2Hh4SFlZmWmJeZlpqeop2anKKkoaCdn5qfoKGgpqGgoKCjo6KlqKmrramqpqOmpaCloKaopqWnqKapqKOnppmcpKaioaChoaCcmJmfoKGkpKKenpagm5qioqChn6CiqKCcn6GloaCmo6KfpKGspp6foaGkrKqnrKivq6e0sa6ur7WyrKqwq6mtrbWwrq6srreup6yqpKivsq+sq7Kvqqqpq6utqa6urrGxraqtqaunp6uoqauinaapqKilqKisqKilpKWop6iopqmsr6+oq6mhoqKlo6Opq6ymqKWjqKKhoKSdnZ+hoZ2bnZ+amZWcnKOqlG9zZm5yZF1dUFVPV09eZGRsaGJiWlpSVE9NQTo9Ojo4Ozk1MTYzMjg4Ozk5OTk7OTk8Oz0/Qz5APTk7Ojs8QD0+PDk5PEFBRUFGQTo9Oz9BQUJBRUI4PYqWlJOYmpaPiISNjpGSjIiIiI+JiZCRjoqKiJubmZygpaKlnqKjoZqeoZyanZ6bnKOop6ugoKOYoJ2XnKGjo6WjoqKkrKilqaCepqmnq6mkn6Kgoqahpq6mpp2fn5+fn5manJyhoKGkn6GbnZqcoJ6hn56eoKOZlpqYo6KipJ+ZnKGhoqCbmp6goaSgnaejqrGorqusqaSqqquorKalrKqws6+rq6mwq6appaWoq6ynpqevq6Wnq6upq6irqqqrrailqKOmpaesqayoopykoaOmo6qpqKano6SnqKamqKepqKupoaKoo5yepqWjqKino6WlpqmgpJ6inpeYnZ+doqKlnpiUlZ6go5d1d2t2d2FfXFVZUVVWW2Necl9oX2NTUVlUSD48PTg7OTo4NTM3MzM0Nzo4OT05Ozo5PDxBQEM9PT44Ozw9PEA/Qz86ODo+P0NAREE6Oz48QD9DQ0VDOTyCmJmenZ2alZKKiZGRl5GQh4SJgoGNj4+Sj42cnZ+hpKmlqaeorK2moaKfmKSmo6Stsa6yp6asm56em5qjp6Cfo5+foq+qqqyoqKuwqaipqKGfoKeprbCyr6yjoqahqaWepKOipqClpKKlo56doJ6fpaKinp+imJWemp6fpKGblZigoZ2enJudnZuZmZWen6Oonp2iqKGaoaOmoqSoqaqoq7CxqKWlp6eopKWpqaqnoqWmqKadnqWloqClpaOlpqCjpaOjpaelqamqpKekpqKmp6SrqaenpKClqKynpqWlo6OnpJWdo5+bnaCjqaeopqGjo6mooKiioJyVkZqfoKGmopuXkpCamqCVfHdwfXlmW1tgX1pcVlxoZG9jbmlpYl5QUEA/Ozo4OTg8OzYzNDMzMzc5OTs8OTs7OT49QkBAPTs9ODw9QD08PENBPjo4PT9EP0M+Ojk/PEI/P0FEQjk6gJ6kp6Kem5+gmY+ZnaCWloqGj4iEi4qTl5SRo6Wnqq6trLOys7S4t62pqqevtLKxqq6usbKusa2lq7OssbGpq6+rq6y2r7Owq7GysaOfoqqpp663trS0trOvrKuuq7awqbKxra6npp6io6ObnZyXoqiloZ+eo5ueoZqWnaScm5aZoqefoJ+joJuUlpmWl5qfoJmVnqKZmJ2dpZ2gpKeqqaiqraylqaSlqqeqqaqsp6SkpKOimZmhnpqaoaCfpaWYnqSmpKqooqelpaGqp6mnp6ejqKWmpaGkqKeso6ekoaalpaOVl52Ym5mVo6elpaSfnZ2lo6Kqo5+amZiXnJyaoaGakJOTl5ibjX93cnZ4aWJbX15cYllgZG5ta25hX2RgUE9BQDs7OTs4Ojk2MTQzNjQ3Nzc6PTo8Ozk9PUI/Pj89PDo/OTo7PD5BRUA9OTtAQT5DPDs5PzlAQEBAQkM7OXuao6OcoJ2dop2Zn6KioJibmJaYkpSQm5qWl7S0rrW4s7S4tre0uLm3tbm4ub28uKqLnLK4vLS9urW7uru4s7q/uLe5u7G3r6iusq2inJ+qsri8vL27ur+0r7GztbS3t6+1tLWysKikop+gl5Wal6SqpqahpKOkq6WlmKGko52goaKooaOgpaGck5mYmJmco56cmpudl5uZlqWam5+hqKmpqKuvr66pqKmrrKytq6irp6WjoJyfo6Ojn6Cipammmpyip6Spn6GjoqKgpaanpqSooJ+ipKGjoqiop6OloaGopqalo5mbmJuTj6GknqKfmJiVoJuhpaCfm5udnJuamZugmo2YmZiTkYaAdnh4eGNbUllUX19ibGh1a3BnaWliWVNMQDw6Ozg5Nzk3NTU2Mjg1Njc3Ojw7Ozs7QD4/QD0+Pjk6PDk2Nz47QkZCPDg7P0NDRDw+OT43PkFCP0ZDOzhwkpqblJ6bm52Vl52doqajopaXnpaXl6GblJi+t7G4uba3t7i7l5S2vbu9vcDFtaK7mKC3v7+6wcm0nbu2sra/xcGooLa0urGqrrSxsLG0tba8vb68vL3Guri3ur20r7Wxsbq4t7Kzsqqmpp+YpKSnqKSupKurtbWus6CnqqynqqmlpqCnoKGmoZOWmJ2foqSjnZ6coaChnZekmpmdoKaqqqqtrq2tsLGrrK2sqamrrqimpaalpqSkpqaeo6eppKGcoKKjpqCio5+jpJ2foqWgpJyboZ6fo6GhpaSlqaOkpaKlp6ehn52elpOcoJiZko+MjJeWn5uWnJqdnJqTlpSUmJOQmp2YiouHgIB8gnhhXllTYWhgZnNvc2l0ZGlkYltMSz46ODg5ODg5NzM0NTI1NDY2OTw8Oz08P0E/QEA9Pj44OTs4Njc/OUJFQzw7PD5DREM9QDs9Nz1DQ0BFQjw3Z4yRk4qalZiblZWYm6Knq6aVl5iQlZmhnpeXvrWztLu6ubi5woeYt6u4u8DCxbOjw6e4s72/tMTHvbS7uL62wMTErqCworW2tb2+wcPGw8O5vb/AwL2/xL28ur2+tKeqmLHAvbi1ucCzr6+qqqitp6ekr6eqtLyxtLWor7Gwr6yqoqajrJ+fpquXmqifpaWfoJydoKuwsKyiq5yYm6Cor7Kys6uorre1sq2tqaalqKulpaStqaShn6Cnnp6mqKmmnp+anqGlpqmcnaObl6KmmpuanZ+cmqGcmZ2eoKijn6GfnaWioKOioZSZmpmTj4qLhI2Qk5uPjpiVm5eYkJORkomNl5iYk4uKi32AgIVwYGFeXmpiYm53dXZubFtiUVVcTUc7PDk3OTc5Ojc0NDQxNDM3Njg8Ozs8PEBAPUA/Pj8+Ojo5Ojc6Pz5FRUU8PT1AQkJCQUI7PDhAQ0NARD87NV+MjIaFlouUlZeYl5ifpqellpWWkZebn5ual7mxtrO5vLy5urWqsryxvsG0vMe5uLuuv6fGw7/KxsnIxcXJvMLHx7+xsKe8vL7FxMbJx8XGu8TBxcbAua+9vMC+vrOrqoyzu760tbfCuq2vsLWqq6aqo62kp7G2q7WyrbOtqK6vp6awr7Ktqq+zpKu1qaeopKCgnqmyuL61tbWqqaausre4t7apq7i8ubexr66noqOop6SfqKOfnqCZoZydoqSnp6GelJuaoKGlnqChnpajnZSQlpiboZqflpORlpSin5qenJudoZ6kn56VnJiPkpOPjImTkJefiZCWkZuUmJGRlZaDjJWXlpKLjIh8f4N/amZoYWtsZm51cXJ1cWZeX1xSSUU/Ojo6Nzg0ODw3NjU0MjMzNjU3PDo7PDs9QD4/QD48PTk5OTs6PDw+QkRFPj49QENDQkREOzo4QUJCQUNAOTJbk4iEjZGKi5GRlZCSmp2fnJOSmJSdnZqXmpW2sbm1tb6+tri1uLO8vMTEusPHwb+0s8XFxr/CzcfLzszMx8HDx8fIysXExcO7vLzBxcHFxb/DwsbFwLGTvrq/w8K2trqptLO0qauzu7uxn5uxr6ykrK60p6qpqKqtrKmlpZ6pr6uyu7q4u7e5t7O5uLOurLO0qrC1ub3Bur6+vL60urm4u7qysbS8u7q7s7Oyp6Smq6uioaCdmpudmpyXmpuenJygnZaclpuZnZ6io52UnJCNiY6OkZ6bnJWMh5KLmJiVmpybmJybnp6cmp6UjpiYmpSRmZeeoZWYmpKXlJWRlJqYk4+TnZaSi5F+enx/dGtrbmRvbGhxeG95aWlhXGdhUUZEQTw5OTc2NDQ6ODQ2NTMzMjY1Nj05OTs7PT47Pj49Oz05OTs7Oz89QUNBQkJBPUBDQ0NFQjs4OUQ/P0BCPzsyV5uQkZCQh4WSjo2IjZCTlZGPjZSUm5STlpqRs7e4uLi+u7C1sri2tbbAw8G+w8LAvru+u7u8xMzEzNDLxsbAxcfLyNTLysfGv7u7vsS+xcjGxsTEw7i0wLe0vMHCucK3t7/Au66lrre8t62co7ewpq20tayupaWjqKSgoKWZqrOyvsG+urm6uLW0srG0tLO6wL7Av769u7u9vsDCt7a3tru7sru+ubi3u7a3tKyoqamrpqijnpOampyYkZKZl5GRmJqXnpiWk5acm5+elJOJiX6GiIuWlJiZkomVkZeVlJmbmpaYl5idnpyhmJWZmZyYl5ybn56jnJ6WmJeTl5yZmZyUlp2UlpOJdnh6e3Zua2lndVpmcndzeGZmXWRbUlhJRj87Nzg4NzYxNjk3NDQzMzM2NDY7ODo8Oz08OD0+PDo7PDs9Ozs+PkRBQURCQEBBQkNDREM9OTlCQD8/QD89MkyWmpaSk4yKmJCKi4yOkpKKiIaNkJiKj5CUl7O7tba/vb2xtrjBvby0uL/Bsbi3vsHFvbu8wsbJv8jOyMHEwcfKysbKxczIzcbIxb/DwMvNz8nGw8PEwsS+t77Bw8DEvsHPz87Gq6+2tLWroKe0s66ruLWzq6mjoq2prKatn6y1tL/Cvrm4vbawrausr7W0ur7Fv7u8urO5u7i5ubWtsLS9u7G/vLiytrmzubu0ra2orKyqqaeXnpualY2MmJSTi5WWlJyZl5WWmZKYn5mQiop+iYqKkY6Vl5OUn5mWkJSZmJmWmJOUm6GeoZiYmp2ZmZaenpibopqdnJuYmpuZlpeXlpyZlJyYfoB4eXV1ZWVpamddam9teHdjYmBgXlhXRkU4Ojg6OTc5NDQ5NzY2NTEyMzM0Ozo9Pzs9PTo6PTs8Pjo7Pz48QkBDQkJFQj0/Q0NDQ0RFQDk6QkFBQj5CQTVCkJeUlZmSj5qQjpKRjZSVi4qHjI2UiImPkpq2u7S8xsHEwr3BxcLAtLO9v6ywr7rDysPCvs3IxbfByMW/wcLIy8rCwsTJzM3Pz8zDx8bIyMjHycfFycfIx7/Fx8TEx8jK0s/SzLy4trS4uMG+vrq9ury6vKytp6q7urm3wLK1uLLAxrq3t8Gzsa2tqau1s7u2w7a2vbWxt762s7e4sLW2v7uwvbq0q7CxsbO8urOzrqutq62xnaOjoJqQjpiXlZCclpaYlpWSnJmTm5+clpGUjpWQiYyQlZOUm56YmZKSnJedlJmSk5aZmJ2VnJ6do5yVnZ+TnKKcnKCfnaOemJSVl5ebmpmgkH99cXRxb2JhZ3VnaWl0bXhsXWRbVWBZTEhDNjw5OTg4OjUzOjY2NDQxMzUyNTs6PD47Ozw9PDs8PTw7PD49P0E/RUFCQ0M+QEFARUVERUE7Nz5DQkI+Q0I4O4+akZaalJKUjZCUlI6VlI6Pi4yJk4uIkJObt8C6xsXEw8zCwcS9vrWvt7uvr7O6wMfFxMHMy8W2ucDCwsTHytHLwsPExsnFzdDOx8zJwsHGwcvLx8bMyc3FxsXDxsXJzdDNz8zHxMDDwsnNx8XBxMfBu760sbCwwb6/wca/vri3w8K6urbAvrWyrKmvsri+tMC0tLi0t7nEua+8vrm+v8K/tbq2q6qsrq+wt768trSura2utaSlqKimmpycnZyeopydmZOQkp2VmKCdmJiVmZmZl46MlH2QkJefmZmYk5GToI6Nko+VjpCUlaKdnKSem56elpyjoKGipKOkop6amZubnJ2enIN9cnx4cGdgamp2bGlldW5zYlxiVFdUU01HOjc7OTk3Nzo3NDg3ODQ1MjM0MjU7Ojk+Oj08Pz04Oz05OTk9PEBBQEVCQUJBQT9AP0RFREVAPDo+QkNCQENBOjSAoZeUmZiVkImUk5aTiZGMlJGOiJaKi5CXnMXLw8O8wMPHwbm9vbu4tre3rrK3uLzAwsDCx8bHurzAwsXHyMbSycHDxL+/vsTLyMrLyLy7yMfJzcjDyMnJxcXDwsHCx8fJysfMyMfIzcbLz8W3wMDAwLu6vbWzs7+/ub/DucC3u8G8uri7ub27srCvsKy5wri9ube1t7q9xb24xsjCwcLGwr28tamurrCwr7O6t7m2sK+tr7OppquprqannqSlo6OjoqCblZiekZecl5GRlZeZlZmRlJiSlYyYo5qcnp2FiZ+TfJKWlZKUlJennaCipJ+en56foaGkoqKjoaOinJ2fnqOhppl5enl/cnBmZWdkamViam1ubl5YXFZVTlBKRjk5Ozk3Njc3NjM3ODk1NjEzNTI3PDs8QDs/PDw6ODo8OTk4Pj1APz9GP0JBQz89QT5ARENDQTw5PENBQ0RBQDozbKKdlZedlo+PmJiZmIiSjZGVkI+Vjo6TlpbKy7u5urnBu7q3vsG8vLu5sa61uri4u8S6vsC+vru8wMXBxsK+xsG5u8O6uLm8vsHGwca6ucnJw8XEwMTBwsHEwcO+vcLAwMHCy8PGzMvFyNHCsL69uLq7vL63tLC5vrO8vrG5tbi7tryztbm2uba5t7GtusG6vMG/t77Ev8bDw8fHwrvAwr/Cv7iys7O1tLGut7S3tbSxrK2xp6Wlp7CtqJ+nq6ajqKWmpqCgn5SYmZSRkZWUl5OYl5qhnZ6hnKGdoaWglpSbkZeXmJqTnpmZqaSlpKWdoqCanqCkoqOcoqGjoJ6cnp6ppaiVfXuDeG5mYWRiYWJjY2piZmNaWVlcWVFORT07OTo7Nzc5OTY0OTk6NTMxNDUyNzo7OkA9Pzw8OTc3Ozo5Ojw+QD8+RDxCQURAPz49QkRCQkI+OjlCP0FCPT44NVmfnJiTmZaRlZiYmpeQkZCQk5GTlJKSkpSUxce4tbq5wrm5vMPFwri7ubGxtry6tbnAu7u5tre0tLW/u72/ub26urS/uLW3sq+7vLfAt73Cv8G7v8G8u8W+u8HEwL6+uLzBwcu+vcnEwMDKwLHBv7u4u766tbe0uLy0vbi1tLCzvLG3tri/tr25vb65t7q+u7/Axb29y8PGw8TAw762ubq2v7i7v7y4trOyq7CwsrWzs66sq6emnqeurauiqKumpqqjp6iqo5+Ym52bmpicnJiXnJuhpZ2anqGhoKGmoJqbnJiboJ+dnJ+coKiho6SknaKfmqKgop+el6Shop+dmpieqKWhi3x5h31xY2BiYmdqZ2ZpZWldVlVTWU9TS0U4PzY7Ojc3OTs2NTo7PDYzMTM0MTc7OTg/PT47PDs3Njk5ODo7PUA/PkA9PT9CPjxAQUNDQT9DPTo2PEBBQDw9ODdJlJibj5OUkZWYlZGWkpWRkJGUlZSTkpKYlcHCwLq8ub62uL7EwMKxvbqytLO4vLW3vMC8vbS1sbC1t7W7wbi+uL+8vbe1t7CuuLa5v7vAv7fBvLvDtrrIuLa5u725ura7xcXKvbnFwL+8wb64xr3BwLzFuLa3tLi2tru7uLa0t7q1tLi8vbm/ucPAwLu5vLu+vcjEvcfEw7rAvb62sra4srm0usLCureysaysq62yr7Kur6ijpJ6rrKyqpKakpKiqoqemraihoaGmn6Oiop6bnKKfoKOdnJuhn6KgpKCem5eZn6GdnZ6eoaWkoaKioZ6ho5yinqCZnZijn52eoJqZoKKmnYR6g4B4cG1lZWZvaWVraFhYTktLS1JJTEhDOT44PTs2Ojs5Njc8ODk4NjA0MzE3OTk7Pz0+Ojw6ODg5PDg6Ozs7PD1BPj09Q0E8P0NDREA/Pzw6Nz5CREE/QDg4P4mYmoyMkI+Tl5WMkpCakpGXmJaUlJKQmpTDvsbBwby8uLi6v7a8scK2tLyxtLa4s7q9v728sq2vrLGwt7y2u7zAxLm3t7e1urm6u8C+w8C6xMK+x7i5uK23tbi6tLizu8XGy8G7xsDAv728v8nDxMW+xri1srK9uLi4vrq6uby6urS3u7q5v7zEwL+5uri/ubvFxr3Fw8Kyur27sa+2uLO3s7q+wLm2rLGrrqmqqa2qqq6mpKWnrq2ppaOio6GkpaWmoqato6Klo5+ho6Gcmpyhn6CloaCenZygnaWgnpeVmZ2fn52gn6KmpaCknpybn6Ofn5mcmZ2epJyWnKOcnqGcppZ+f4Z8a25wZ3Brc2VibV9cVEhLSkRKQkNHPzk7OD48Nzs7OTc4Ozc8PDYyNzUxNjk8PD08QTs8Ojs6OT45Ojs9PUA+RD89PkRAPz9BRkQ/Pzw9OTc/QUNCQEI5Ojl3nJiLh4uQkpOWjY+TmpOQnZiSkY6QjpiSvbfHvsO+vbu+vL22uri9ure9s7OwuLi1uby8wLeqraSusLe7s72/u8S3tri2t7+/xLzC0srGx8rJxs/CwbiutbW8vri6sr7ExMrFwcnDwr+/vr3HzMfHxMe9tbW2wb26u7/CusDCv7y2t729vcHBwL+8ube8wru3v8W7wr++tbe8vK+vt7awtLO6ubq7r6mtq62rrKaqoqeuqKWqra2vp6Sgn6ajnqKjqKOjq6Oiop6dm5ublJaZnJyfpZ6fnpmYnpejoJyXmZqZmqOjop6jo6egpqCbnaCjnp2WoJmcoKCblJegn6WcmKKQgYaBcWVsaW50bndjZ2JcY1FLVEhFRUNHQzw7OTg9Ojc6PTo4OTs3PD01MzY1MDY4OTo8O0A9PDo+PDk+OTk9Pjs/PkM8Pz5APz0/P0ZEQEE/Pjo3P0BDQz9BPTo4ZqGYj4uNlZKVlY6PlpmVl5uVjoyMjY+bk7m2wbS/vLm8w8C+wLq1trKywLmvsry8sLe7tru8q6ujsLm9vrO8vrzFuLK4ub3HycrCzdnIy8nIzM7RzMrEtbrAw8i/vrW/wb/Gxr/LxsO/wbzAw8zKx8XGwLm9vMS/wL/CyL3Hx8XFvLrEv7vBv7rAvLu7wMS9t7nCub69t7S2uLqur7WxsLCytre0t6yurKqsrKuoq6Gms6qlra+trKippaOkp5+io6Onoaeiop6cnZyamYyQlpeZnaKZnpuVkp2UoaCdmZ6fmJimpqKfoqKmoqeloqCko6GbnaCbnKKfl5WVnp6kmpafiYGDgXRvbGx0a2xuX2NeYWFOSE0/RUA/REM8Ozo6Ozo4Ozw6OTw+OTo+NDQ1NTE5OTo5PDtAPD89PTw4PDs6PDs7Pz5DPkI+QD89Pz9FRUJBQj87Nj9CRUQ8QUE6OlmfmJOSlZqVmpOQlpeclZuZlpSVkZKTnZm2uLaxuru6vsG5uca7trWypb69tLbBv66zvbS4wbGwsbS8w7y6ur68xL+3vb+9x8zGxtfHq9TFxMrIzMzNysbCw8vOwry5vbq5wMO/yMbEwcG/xcDKycPDxMO5w769ub+8wsbCyc7Hxr66xr26v7m3wLm5vsDCvrW0vLi2u7CvsrK1r7Cvrqyus7CzsrirsbKxqrCrq6yrrLatqKyusqarrKmpoaWgpaakrKSmoaChnqGgnaCMlJeTm5+mmZ6emZOYnZ+gnp2eopuYp62ooqSgoKKqpqmhqKGlm6CgnZ2jn5SYmKKdp6Gfm4J7eod6bW13e19wY1tdX15TST5DRUlCQz5DOz42OTo7Ozs7Ozs7PT05PTU2NjIxODo5Ozs6QTs/PDw+Nzs8Ozw9PTw9Pz5BQUE+PkFCQUVDQkRAPDY+Q0RFPkJEPztTmZuZmJ6dmqCalpyZn5KdlZ2boJWWlJqYur20sLu8wcTCv8XGura5sqO7vbS3xLuwtbq2ucS4tLy2ur3BvLu/tr/Bv7y+usDKwsbTwJTCw7/FwsfLyMHDwMDJysLAu7uwtLu9wMXGxcW/wMK/y8fCwMjAusK7urO6usG+wMrOysS9tby8ub+5ubW1s7/Avre0s7S4rbeqr7CwsrKvq6+nr7ausrG5rra2uLSzsLGttrS6sa6srranrLKsraSjoaenqLKrqqWkp6elpaCml5ujn6SmraKeo6KanaWiop+foaWenrC0sKSlnp+kqaevp6mgq6CiopqipJ2anqGmp6+psZWCe32Cem1zeHNncF1bXlxZUUVEQ01JQUU9Rzo6NTk7Ojw8Ojs7Oz0/Oj01NDUxMjc4ODs8O0I8Pz46OzY6PTo7Pj0/QD87QUFBPj4/QkBBQkJFPjo1OkFCST9AQkA7TJqdnZ6fnZienZmampySoJWbnp+blZGRlsW+urbDvMbCvr/Ixbe1uLe2ubu0r7e2srWzt7m8u7a7u726w7u3vLa5wbq6uLi1xMHEybmMnby5wb2/x8C5wLy+xcS9vrmysK64t7/Dx8PEvb2/v8PDvr/HvLy/tLSutbW8vr/OzcvCt7K4uLi9ubuxtrLIwLu2tLGwt6yzqbCtrbO3r6uuqrG1r7Gvt7O6usC/tre2sru6wLWyrbO3rLC6r7KloqWrrK+5s7KosK+xr6qiqKGkraitrLOun6inpqWmq6Sknqaqo6ayuLOrpZyfp6anrquqpbClpaWbpKOYn6exrLW4sLKOhHl/fHZsdXpwbmlcX2BZU1BBRUhHS0BEQ0g8PTY7OTk8Ozo6Ozo9Pzw9NTU2MTM2OTg8QT5AOz1AOzs5PD04Oj08QD46Oj49Pj09PkBCQkJBRD03NDU9REc9Q0I/PEWUnqCgoJyXmpiYlZmdmZ2fmp2bnJaRj5LDwMK9wrzEvLy7xbu3s7e2tru7s6CWtayvsbS0tLa4ucHAt725uMC2tcCztbKyqq6mt7mvi4+vtri4uMK6tLu3u77Au7u8rq+us7K5wcLEw768v7u6uLbBwrW/urWur62wvcC5z8rJw7GvtbS0vbq+ubq7ysO7uravsL2xuK+ys7C3vbaur66wt7CsrLK2vbzEwrq9t7bAv8G3tbC2srGzurGxr6esr6u2v7e1qbqztbmxp6uop7ausrG1uaisrK+qr7CqqKessayytr20saykqKuoqKusq6i2qaaonqadmKOuvLG7wbSmiYF8gnpzdnZ3bnFgX2VdWlVKPD8/RkY9RkNDOTo1Ozk5Pjw8Ojo8Pj4+Pjg4MzE1Nzg5Pj9BPzs6Pz08Oz09OTs8Ojs6Nzs+PT1DQT8/QUJEQkE8ODU4PUNGPUREPzw/iZ2en52Xl5WUk5aZnpubmpuYlJ2Uio6Owb7Dwr6+vrm2usCxtbGzt7fCtbOrrbOoqa61r620trnDv7e6trbRwLLAt7CdkIx+d4qOn4yMpbWzsre+ubO1sry5vLa6vrK0tLSwuL7DxsTAvb+5s6+yvLquu7Szpquorbq+uMvCv76sq7Cvs7q3ub67wMXBu7y3sLXEtb+0uLu0u8PCs7a2sbisqaWrsr23v7+7u7exvL28trGvq6uprbOvsLCrsLSpuMC2sqm0tbC3tq2spqu7s660uMKwsbG1sbK1saywsri4ubi+tLGzrqyxramvrqqyuK6trainoZ6ptr+4ur+wlol9gHxxdHd0dnJsXmJgW11PSEE+PUhDRk1DQDc3NTs6OT48PDk4PT47PT86ODMyNTc2OD8/Qj86OD4+PTw5PDk7Ozo8Ozs6PEA+QkI9QEE/QkI/PDs3OjxBRD5CQz8+QYqgm6GdlJiVlZKYmpyWm5WalY2bj4SIhru0vb+7vLm3s7y8rLOytLS2wLXAr7Kzqqqxt62pubO3wL27vLi50sywv6yhgGx9bWBnaXqKjqW3s7C2urW0sqy8ubi1uMG6uLOxrLe8wcfDv7m6ta6lrLOwprCtqJ6gn6WttrXCt7a0pairqLC2s7K6tbu7u7W4trC1xLK+vL+8ubrFybq9vraxp6SeoamxrrW5trKxq7S3trGopp6gmaWmpKynq6y2qa+6sa2kpq2lq7GrrKmtuLawsrjBtrGxtbGvu7ayt7W1sry1urKwsbKutLKqrq2nuLWyta2uqqiosrq9wLa0qY6Ce393b3tvdXJuY1xmWFxdUk5NQT5JQkBKSUA2NjU7Nzg+Ojs4Nz4+PDs/OjkzMjc1NzU8PD48PDg+Pjw8OTk5Ozs7Pjs7OTw+P0E9PEJAPz9CQD47Njc6QERBQ0E/QUKJoJ2loJSWmJiVnqCcl5uYmZGMmYmDhoS1r7S7u7S1sLG2uq6wtLOvtbq1urC1s7KttrqurLyyuLm3u7+8vtXFsqmBeH5fbIdqY15hepGpvbaxtLaytK+tu7q4trnAw7aurqqytry9ubaysa2tn6Snp52jpp2WmZman6muuayrq5+lqKSrrq6nr6yvsbGtsa6usLmwtLy+uLm4x8W8vLu4qaKcmJufp6assq6zqaapqq6popqXl5GcmpijnqKir6ekrKaompqemqGnp6anqa+2squ0trCqsK+xqbm2sbWxrqy3s7avrquuq7S1ra+rq7GtsbKoraurs7W3ur2wq6GLeoJ5cnZzbXVpa11balRdXE9NSERGTEJGTUY4NjY1OjU6Pjg7OTc8PTo7PTo5MjM2Nzc3Pjs9Pjo6Pz48PDw6Ojs5Oz47PTk8Pj1CPDtAP0A/QT8+OjU1OkBFQkRBQEJBiJ+ipqGYm56dmqWpmJudmpmUjJmHhoeGrq2uuLmxsqiur7iyq7CwqrK1ubm+tbK4tLm6tbm7tbWztbu8v8LNvaCAZFqEXVaFiox8YVuQr8a5tLSzsLGtsLm4try4u7+ysrKusa65r6qrrayjqKGdnZ6XmKGVkpWXkJifqK6ko6Sgoqeio6mpoaanpaqtp6ynqKesq6yyu7SztLm6trK2ramgmpaWm52fq6yrr6Ojo6GpoJuTjo+Qk5KSmZaanaSloJ+ep5iVkpSYnqSjoaWqrK2iqaqppKmtrqW0sa6xraqprq+wraWmqqSos66trKmmpqmrpqqnq7Ksr7Oxq6mWgX+Bd3J4aHRzbmRUYGNXXFFOTEhASFFETUM9ODg3NTo3PD46Ozw4OTw7Ozw7ODI0ODk3ODs7PDs4PD0+Oz08Ojk8Ojs9PDw6OkA9PDw7QD5CQEE/Pjk1ODs8RkJDRD9BQYijpqKjnqCfp6Coqpufm5yZmI6Xi42PjKqpqLGvsK2lp6ayr6mmq6CvsLu1vby4wMG+vLy8ua6sr7KyurjIxbOHY1lrllxXZHiJi3lKgrfGubKts7CvrK62trK0ta+qpJ6bnJyeqKieoKipn6GnlpuXl4+dk4+Qlo6Xm6SooKCioqKlpZ2jo6CepaCkrKSmqKSio6OrrLOuqa6urqeqraisoZyamJmYm6moqquepaObo5yVkIyPj5CTkJaVlpifnp6amaaXk4+Slp2ioKWjpqSnoKKko6Ghq6uksq2qrKyno6yuraufoaKkpK+srKmmo6KqpKqqpKmrpqmsq6agiHiDfHZ/eWJ3bG5cUWhUUE5HT01MQk9RQD47PjM5OjU7OT07Ojk9OTk8Ozw8OzkzNjk5Njo7Pz06ODs6Pjw6PDs5Oz07PDw9PjxAPT88ODtAQEE/Pz45NDk8N0FDQkQ9QEOOqqSjoqGinaulpqimoZ6dmZ2PmJWTkJWnpKGmqKmlpKChp6uhnKKbp6u1sry9wMLCwL7AuLSnpa2qqLWvy8emc1ddhI9XVmFmsqV2UGi3vrazqrK0rqqrr7Cys66lnpKYlI+YoJ+ioJykpZ+eqJSblpeMl5GNkJeTmJ2iqp+fn6Cjpaicn6ChnKKfo6innKehoKSfrKisrKCpq6agpKimrKOdnp2Zl5qrpqmxo6WonqCclZOQj5GQmJCWlZiWn5ibmZujmZeUlpqdoJ2nqKWgo6Kho56doKmqpa6upqipoaKqrqqnoaCio6msq6eppqShqaKlqaalpKKmpKijkn18gHV1fW1re2RoVVFjTUlIR05STkpORztFQD0yPzc1OTs+Ozk5Ozg6PDs7Ozk5NDg7ODc7Oz48Ojk8Oj07Ozw9OTw8PD49PUE+QEJAPTc6P0FCQEA/ODU1PDpAQ0FEPkFGlq6koqWeo6KpqKipqqWmnp2imJiZmZWbop6bnqOioKOgoZqgmJeXlqGorK62t7q5ure3u66ooKGpoqCtqMLGmWJaf4p2ZWR6da+jdmZfd5uvtK6vs7Wqp62so5yZlI6RlpeYmZygoqKcnaWemqSXl5eWkJKRkZOal5ugpKqeoaGepqeqop+gp5+dn6SnqZ6jpp+qnaqtqq6nqLClo6Smp6ymoaShm5ier6iusqulqqqgmpiYmJWTlpqTlZWZlpuXl5ignpycl5uhmp6ao6eln6GioqOdm6Gmp6aoraOppZ6kp6mkpaWhpaSsrKmmq6eioKSjpKenoaCgpaKmoIl7gH12eHxkeHlgYlJVX0hJSUtTVElSUEw5P0I2Nz02NTs6PDw5Ozs4Ojw9Ojs4NjU3OjY5Pj0+PDk5PTk9PTw+PTs7PDo+PTw/Pz9APT03Oj5AQEA/Pzg2NT08PkFCRkBAR6CupKaroaOqrK6tp6ypqKCipp6bm56aoJyalZmfn5uen56WlJOXk5KcnqSorq2sq6uvqq+pnpefpZ6epaS9w5VWaJuXdIuZiW+MfnV9eXqiqrOxsLC4raehnJ2alJeampCOkZWRjI6OlJminJejmZqXmJmUmZiWnZufpaapoKajnqeurqumorGjmqSmpqqioaqiqaSosquxsqu5qKarp6urqaysp6Cgo7GusrC0qbGvopmcnZ6hmZubmpiZm5SWm5aYnKWhoJqjoZqdmZ+kop6gn6KmnZulpqWkpaijp6OepqOinqaloqWlqKykpq2noJ2dn56gpaGenqWgppmBe4F8dXZzaIJsZVtTWllNUUpOTlVMUkxBNz5CNjg9NzY6PDw9Ojw5ODo7PDo7OTc2Oj01OTw7QD03ODs3PTs9PT06Ozw4Pj09QD5BPj4+ODg8P0BAPT43NTg9Pj1BQEZAQUihqqCrq6GkqquwramtqaelpaWkoKGfnqWXl5SYmZ6YnJ2blo+VmZKRnJihnaqip6Cep6Gln5ySnKKbn6GhwsiRUXOltICEhnhpcHF7g3h/qKmwrq6ssKegn6Kgl5GUm6CcmZeSk5+coaSbnpuWn5qfl5uinqWhnqSfpKitraisqKSstLe2sKe0rKKtraOvpaSmoamorrWzsr23vrCssa6tqaq0sbCoq6iytbezuKyxtKSgnaWfrKGhoqCgmpiWlqCbm5ikoaCepKGfnpqcpaCfnZyhqJ+fp6meoaOkoKagnqehn5ymo5+ipaOooKmrpZ+dnZudmqainpyjnqeQgYJ/fHh1aXd1XWxaUmBIUVVIRlVWSkJMRz1LSDhFPDY3Oz49PDo8OTg6Ojs6PDk2Njo8Nzs+PT8+OTc9OT47PEA8OkA6OkA/O0A+QUA9PDk3Oj5APzo+NzU4PT0/QUBEQEJGnKueqamipamprqimqqWmp6aoqqGlpKOmkpOVmJacmpqcmpWTmZuNk5+ZqJ2un6eenKGenpqakpmenKKin8fNj1R2iopzb2pgW11cXmVhbo2gqqiqrKqln5+ZkpKTmJiWlpWMiIuOlZ2dnZ2elp6apqCgqKWxqqeuo6uttrC0srGutri9wLqttbSwt7CutKmmpKWsqbmztbvDvMPBtrq2q6+xube8r7OwtcG8t72zs7WirKKpqLKpqqinqJqZnpqqp5+ZpqCfn6eopaSenaqhop6bn6igpKetmZ+jnp6nnqCmnpycoqGbo6KhnZympaWkn6KZnJukn6CboJyjiYWEfnZxbWl2bWhtXFhbQlZNSkdNR0JGTTw+TD00PDk2Oj0/PDs6Ojg4PDk6Ozs8NTQ6PDg5Pj4/Pjg4Pzk8Oz0/Oz1BPTo/PjxAPj8+Pz08Njs/QT07Pzg1ODw8QERCREFCQ5WqoKapo6mqqKmjoamgpqinrK6lqaWpqpSSl5mUmpqanJiYmZyamJmqoLGit6Swpp+enZ2XmJWZnpuco6DG0ZNhfHp5aGBXTElLTlBPUVxrg6qvrqmqpqCenqGinZ+dmpyclJOVlJ6emJSFnZqhm6ukq7KwubKysbKxur28vLm2uMO+v8K/trq6wMS5vbusr6exrbHCtrjCxsDIysDKv7C5ub25wr64s7vGw7zDu7ezqbOtqrO0r7Ouqq6jnauntrGsoq+moaOvsa2wpKSvo6GgmqGnoaSqqpmdoJmao6CmqKGcnqKemaSenpiYo6OhpZ6mmZuipJ6fm5ubnIeFgXt0cWtrdXJwaFdbUUVUSERJT0g+RUE0RUg5NTs9Njs8Pjw8Ojo4OTw4OTs4Ojo4Ozw3Oz49Pj02OEA5Ozs9QDw9QDk3PDw7Pj0+PUI+Pjc6QUA+PD45NTg9Oz1DQEFDQkGRqqGlqqelqqimn6KnnKasp7Gyq62jqayVkpWalJecoqGbnqCinJ+psqu7sr+rr6ylnqCgnJyYm5+gm5+gxMiHcXh2Z1ZSUm5XV05NREdhjayupqOjoqCepaulnpeclJGZnZiUjIqGiIZ5bYigpKKrrLS8tsO+vrO7wcPCxcC/wsbGxcPIwsDFyM3QyMvDsre1vrK+xbu+zM3FzMzM0se+v8DDvsfGwrfDycnCwMa+urS6urS7t7C2sqq6sq67t766uqq3rauquLq0vK6uuaOmo56mpaKjqaaZm5+Ymp2nqqegoaGkmJSjlpSZkZydn6Sep5+en6KdmJmUmJSIhH16cWtkaG94amVaW0ZLTEVEU0xEQkU3Oj87NTQ5OTc5Pj87PDs7OD48Njo9OTw9OTw9Ojs9Pj4+NztBOj45PT45PT44Nzs6Ojs/Pz1CPj83OkFAPTw9ODY2PDo8QT9BQUE+kqugp66ooqulpKKipaGlqquwsq2upKmmlJWWmpaUm6SmnaGqp6KrrLy8v8PBs7K4p6Ghq6qhnJ6hop6bmrOda2xwaFVQXHymlXlSTWeUrqygmZybnp6Zl5eXkoyOl5eTjo2Qi4KDgndzcW5wj6atrrS5xbvNx8u/wszOzczHydHMzczHycXGzNDS1c7Tyb3Av8O7xsXIxdLTzdPQ09PMysLFxsfKyM6/yNHMx8XHxcG8w8C+vr61vrOtv7/CwsbEx8SuvriyuLzEwcG6vLy1rqenraigoqmlmpagmpmdqKupo6SknpePm4yQmYmVmJugn6OdnZeempOTi5WPhYB5dHNlYmdyb2ZeWllDTkxDRVBJRENANTU1ODpCPTY4OkE+Ozs+PDk+PTc6PTk6PDg8PDw7Pz8+PD0+Qzw7OkA9Ojs6Ojg4ODk7QT88QD8+ODtBQTs7Pjc4Njo8PkI+Q0FAPpOvn6ivpqiro6KloKampKuoq62qrqKqo5Kcl5ebmJuirJ2frqalsarFxszOzb+wwailqKytqqCdo5+cnZmslXJtY1dOUmi009OkjaSzrqSfnZ+amJaUkpSWkZCPjIeEg4iHg4CBgYB5cnJvbHmktrq5vsvB09LTyM3O0dPR0tHQ0dHNzs7Qxc7U1djS183Gx8nMw8XKz8rS19HX0tTW09PIzMfNzcnSzc7TzMXHycrBxsvGyMjFv8Ozs8jEy8rKzsXKv76/vcHHxMzMyMm/w7+tr7OonqKqo5qTnpyYnqaprKSlppaXipWFkZSHkpKSmZualpiQm5WQjIaRi4B6cnV2Z2NndmlkVldRRE1GQElRQj1CPDoyMkA8RDw3OTxCPTs9Pzs7Pj05Oj48Oz44Ojk5Oj86Pj1APkA8Pjs+Ozk9PTw5Njo6Pj08PEA/Pjk6QEE6OT44Ojo6Oz4+PEE/QT6QrKKiqaanqKSfop2qqKOso6OnpqyiqZ+To5iWn56dpK6bn7CrqKyxyc3U18/Gu8esrbO3rK6jnqOinaCkrJh6ZlhTUlh309e/sq+nnZydoKSgnZqUlJWUiXx3cGtlYmhxb3F7hYqAdnBucXRwhbPCvsXR0NfW1tLWzdTW19TT0dPU1NPP0cPQ09bY1dbSy8nO0cvGzdHJ0tXW2dXX09bYztLKz9HMztDM0s+/x8bKw8zMy87PxcbHtr/Kv9HMy8/Fyce/w8PIzszP0M/NysfNuLe7qJ+lq6eemJ6jnp2qpa2pqKiSlYiQhIyRho2MiJOVmZCWjJiSj4aHjIR8eHN2cGNgZXJiXVJcSUpHQUVIST47QDg9NDU4NTs4Njo8QD07Pjw7OUA7OTo8Ozs8Nz09Ozo+Oz08Pjw/Ojo8Ozs5Oz89OTU7PD48PD0/Pz46O0BCOzk/OTg7PT0+PzxBQEQ8hqugnKegp6Oim6CbqaSlqaCfoaGmn6ifmKSimqmmoqarmqOwsamotdDU19rSx8bLtLXBxbG1qKGkpaCiq7WPZ1pUVVZok7mupJqVmKCcmqChn5ucmZWJd2ljYF9fX19eX2BeYmx1c3Fwb2xycXWSxMfG1NXW19fT1s/V1NrU1M7P1dTU0dHM0M7T19bT1dDP0tPRydPRx9DY19jR2NLX2dXWzM/Pys3Sy87Pv8XCx8XOzdHQ0cjLzcDKzMXTzsvOyMTJxsbIzMrT09HVz9LM08G5xbGlqLWup5qorKWdsqiws6ysk4+TjoiKj4OPi4SQjpmNk4+Zj4+ChYx8enFzdG1hY2ltX1ZQX0pKQ0ZDUU0/PD41NDo9NTI4NTU8PEA8Ozw6OTpAOjg7Oj46PTg+Ojo8QD08OTs9Pzk6Pz07PTw9PTo2PD0/QD08PT0+OjxAQjs5PDc0Oj48Pz89RkFEPYKknKClnaWlo5mcnaSeo6OfnZ+doJqnnpyhqZ+vraqqq52mrreoq7fX1NXZ2dHO0MC8zMm2vq6mqqihpLG0f1VQU1Jlk62mn5iWmJqbnaCdmZydk31xZWNjX19hX19hYF9gYF9gZm1wcG5rb3J3d5vMwNLV09jY1tnR0tLXz9POy9LN1dTSys/M09bS0dbNz9XV0cbR1MrQ1NXWztLQ2NjY18vIzcTJz8zKy7/Jv8fJzc7Py9DNzsvOzsfLz9DKzsrCycbJzMrL0dLM09HRz8/Kvci5sK67uLWqtrCtqLits7+7sZqPn5SRjo2IjpCFkY2ZjJGRlY6RgIWIenZvcG9rYWRucGFXXFpJRkZETVdFO0A8MzM8PTg3ODU1Oz5APTk8PDg8Pjk8QDtAOj04Pjk4Oj88PTg7PkI6Oj08OkE9PTw6Nj09P0A9PDs9Pjg7QEE9Ojw4ODs+PD4+OkVCRT6Bn5mlp6Cfo6eam5+cl56eoZqdmpyappufpKefuLa1taykrK6+tLDA2NLX2tzWzs3Kw9LPwcCxqqytqqWxqW1NSk5YkqCblZSXnJ6fn52UlpiUiWteXl5hZGJgYGBhYGBhXl9fXl1ibXJvb3N0dnZ5pL7L1dHW1NPY1s7O1MvNzsXOytLSz8bOzc3UzM7TzcrX1dDM0dTLzNDR08rO0dXS1dXKwMrBxczCyMnCzMPFyMrKzsrNzNDN08vFyM/MyMfKxMbAxcrLzc/RxtDOzc3Mz8XHwLi5vcPDvcO5s7K+sbvDxLWqmKWimZaRlZWSi5SNmpGUlI+PlIKJhXhwcWttZ2BgcGhYWGhWTEZMSVBQQjtEPjs2Nzo4OTo1Nz09QTs6PD05PD05PT06Pjo8ODs9OTtAPD47Pj5BPDk9Pj1CPTs3NzY/PDw/PDw7PDw4O0FAPDo8OTs7Ozw9QTpFQUU+hJ6bqK2epKSqnJ6fmJKXm5+am56ZmaKVoamppcXCwb+7tbKxx8K4y9XV2drb2MzMz8jW1cTCtbC1qKGrqq1hSERRi5uNjJiVkJSSkZaWlpCLfGViYmJgXV5hY2JgX2BgYWFgX11bXWdycXFyc3FtcnmkxtPPy9DP1NXJxcnJxsa/w8bPzsfFx83K0sjLzs3G0dLPzszUysfLzs/Hx8/Sy9DPxbrEvsbJvcLHyc7EwsjAx83Hw8vKy8/Hw8TQyMbBxcfEvsDHy8vLzsLKy8jHzNDExce7x8PIyMLPwb28v7DByce5vaqwsqelnaKcmJCbkKOZl5mRlZiJj4J3bnRka2BeZnBhW1dgR0hIR0lNVEc/Sj02NDM1NT08NDg9PT06Oz08OTo7OT89OTw7PDg6PDo6QD1APD09Pjw6Qz48Pz04ODk6QD4/Pjw7Ozs7ODo+Pzw7Ojc5PD49Oz49RkFDPYOgm6qupa6qq5qdoJeUjpedmpmgmpqcm6WysazJzcrIxL68us3NxtDV1dna29jQyc/P0dPIwre8vK6ls6ezZElLgpiOjZaPhoOEhIJ+hYV/c2BcXl5eYF5gY2RjX11dXl9gYF9bWlxga3Jyb29rbG9vfbjRyMnKz8vNxLrAw7u7urq+ycbCw8DDyMrJyMrIwcXMxsjLzcnEwsvJwcLL0MTLyL+5wbvFx72/xs/Lw7/Du8nGyLvIxsTKv73Cy8bFxL7FvLy/w8TLxcS8wMnCxcfSxMDIv8rJxsfG0MPDxsOvxMvHw8q3v7y6tKmspKWYn5iso6GlmqOgm5R7dnN0ZmlaYW5sWltYUkRMRkJHRExERlNANTQzMzQ/PDM6PDw7OTw8PDg7PTtBPTo8Ojs3Oz05Oz07PTs6OD4+PEI+Oz88OTk7Pz07QD48Ozk5OTk6Oz06PDo2OTw+PDs+O0NCRD5/pZypsqm0rrCdnp6YnImUm5man6Kfmp2ov7i8y8/RzMfCw8bNzs7M1c/V2djZz8vSzc3OyMG1xL+zsberuXVXeZaMk5eGeoCFhoB2eHVycF9aW11gYGJjZGRlZGBcXF1dX15gW1laXGJvcm9raWxwb3OPxrzJxczAxsKwtrqysrOyscK8vLy6uMHBwcW/vbm9v7nEysXGwr3GwLi7xMm/wsm7t7u6xcO+vMHNw8a9vbXBvcO6vMa7wrmzvMXEwsK2v7W1vb+6y8O8tbrIur+9y8PBxcLFyMbIxtDGwszHssfJw87NwcXDwL2yt7Cyp6ioubClrbCrrayUeXZ3amRnYGhvY1ZeWUpGSkZISkFFQkVJQDk6NjQ4ODUzOzo7PDk8PDs5Ozk6QD46Ojw6Nzo7Nzo7Oz88OjxAPUA/PT8/Oz07O0A8Pj4+Ojk5ODk3ODo8PDw7OTo8Pjs7PjpAQEU+fqygrLWqt7SyoZ6fl5qNlJaan52mop2et8bDxMjO0crKysfNzc7RyNDG1dTW183Kz8XJxcfBuse+ra6yrrCGeJGNiouFeICGhoB+hHx0dGNbXF1eYGBiY2FiZWViXV1bXF5cXl1aW11daHNxbWdnbnByeZ29zMDDusG4rrCwp6qtrKe4tbe0s7O0urW+srewta+yu8K8wcS8v7q1s7q+wLjHubS7tsDCvLi9xsHDu7Wusra6vrTEt7u1q7i9vb+9sLq2r7a6ssW8tq67v7S2tMW9vsLFwMPFxsjLxcDGxrvHy7/PysfDxsLDtsO9vba5vse/rLW6tbe2jnh0eGZnZWJrbl5WXmBGS0hISkZCREFFRT88OjU2NTYzMzs6Oz06Ozs6Oz44PEE9PDo7ODc5OTk7PDo+Ozk+Pz1APz5CQD1AOjo+Oz89PTk6Ojo4NTY7PT48PDo7OT49OT86PEBAPIi3pauzsby8sa2foJmUlJiXnqujr6qnpMbLzsjFyM3M0MzNyMrIysnKxM/N0s/NxcfBxcHAu7nLuK2wsa+Xf4+QhomKe3h+hoZ3eIJ9dGleXV1dX2BfYGRhXmRlY19fXFteXF1eWltbXV9scG1oZmptbnJ8pMe/uLi1sKusp56iqqeeq62zramrqbSttrGyqa6mrLK8urbDubq6sau1ubu0wrqwv7G9vLu2vMe5wratqqiwsb+1t7yvsKeys7S7vKuttaWutq66sbCquLCtu667uLvAv725wr/Hw8XBvMbBx8u4xcfFv8bDw7nExsK7xsnMy7O5wry6sohydnZraWFibGhZWFdbQUxLTUlFQUM/RkE6OTo5OTU4NTQ6Ojk7PD07Ojs+ODtAPD05Ojc5Pjk7PDo4Ozs6Pj45QT0/QD87Pjo7PDo9PDw4OTg5NzY4PDw9Ozw6Ojs+PTs/Ozs+QDyKwKuouLe5w62zqZ2ZlJaZoZymsLWxt6bFztLLw8XBxc/HzcHDxr/FxcPDysLJyr/AvcK7tLa2xbGrsK6qfHaTiI+QfHh+ioV6e4SBd29eXVxdXV9gXl9kY2JjY2JgX11bW1paXVpaWlpcZW5vaGZnaWtucoGtubC1rqalp6eaoKSgmpylq66jp6KrqqyqsKOmn6qttLaxvbmvt6+orre0tLy4s7yvuLm0sbzBscCupaiiq7Gys6e8qquoq6yttLOlqK2hpK+psqWnqK2lqLessLK3urq7sbu9vr7Ev7XCwMfIt7/AxLfEwr+7v8TCvsTIzMq/vsPAwKmGcnRyamldYW9kV1ZYUEhZUlNLRkZFPj5AOjc4OTc3NjQzNzo5OTo8Ozs8PDc7PTs7Ozw4OT44PTs8Njo9Oz89N0E+P0A/Ojw8Oj05Ojs6Nzc3ODg3OTw7PDs5Ozo8OTc5Pjw+P0E7jMKvrry3ucSwtrCbmZWcmKqpsLGztb2vxdDPzMPIurrLwcu+u8q3vsS/u8q4wcTCtri+t7Kwtr6wqqqqnW6Dg4iLgHt+gH54dH98c3dmX11cXV5fYF5fY2NhYmBgX15dXFpYWltbWVhaXF9ma2ZlZ2Vpa29yhaqlrKagnKGllJ2km5iSoaOqo6KfpaWopq6gnZukpauyr7a3p7Csp6q0qrS6sba1rra5sa+6ubG3pJ+jn6axp6uouaqkp6eop7KtoKemn5ukpqyen6ekoKCxra2ssrSytLC1vLa7wcGyur7DwbK5ucKzwL2/tbi7vb68wsfEwsO/v8Sgg3dwa2FmX2tvYFRZXkhOZ09USEVKRjw9Pz06Ozs4MjU1MzY5OTk7OTo6PDo3PD88PDs8ODg8OTw6Ozc4Ojo8OTg+Oj89OTg8Ojs9Ojc2NzY3Nzg2NjY7Ojo7OTs7PDg1OTw6Pj5AO43ItbW9uLrAur21oJ6VnaGmurars7O7s8TPycvCxri3x8HMv7jKuLzGubTFuLTAwq64vrSup7G3saOjpo90hoaGgXx5dXRvbWtqanFpXmBdXFxcXmBfYWNiYGBgYF1cW1xcWFlYWFhWWFteX2RjYmVnZ2dqbW+Inamgl5WaoZabopiWjZ6hoqabn5+jpaKonpuim56qsK2xtaKpqqmrq6S0ua23sKyzta6yta6wqp+dnqOisqSmqbitoqamn6isqpmfoJ6ZnZ+lmpqjnJudr6mrp6qrrK2wsrivuLm7sLa7u7qrs7O5s720trGxtbS/tr3AvcPBuru9l4N6cmtfZV5kZFhUV11JV1xLUEdJSUZBPD8/QDs/PDA0NTM1Ojs5Ozg5OTw8Nz4/Oz07Ozg4PDg5ODw3ODo7Ozo7Pzo9Ozc4PDo9PDc0Nzc2NzU3NDY2Ozc5Ojs6ODo5ODo7OTo8PzuJyba4vru3wcHBtKSkmZqkpsCyr7astLfGz8jIwMa7u8TDz765yLm5v7izwrWyvb2uvLy0pKGrrquZoJ+Kf4aGf3hybnBua2JeYmZmXV1eXV1dXF1fYGFiY2NiYV9cW1taWllYWFdXV1hYWFpeYmRlZWZmaGlrco2onZSUlJuYm6GWlpGcoaKonZudpaaippygoJqYra6trrKgpaKtq6ahtLCxsayor7KnurOmtqGinpujoa2joam1qqKjpp2lpqOWmJ6XmZqdoJqXnZycm6yhq6ajpKatq7OzqrSwsqqyubSvqa+ysrO3s66prK6yuLC6trm9v7eysZSFeXVlXmVeW1lWU1pVS1xRTElFSEtJQj0/QUFAQToyNDUyNDk5ODk7OTo9PDY9Pzs8Pjs3Ozs3Nzc+Njo+Ozo4Oj07PD06Ozw6PTs4Nzk3NDY1NTQ2Nzg1Ojo4Ojk5PDg3Ojg5PkA6gci9t72/tr68v7OdpaOYpbHCtba9rbS4wszIxsDFt8LAx863wMS+tLq6s8C3s7q8r7W3saGdp62jl52Yi3+EhH94b3F0cWlmZGhlY1xcW1tdXVxbXmBhXl9fYF5cW1pcWllYVldXVlhXWFdWV2FkZWNkZWRkaGp2opyUlI+Ulpefl5mUmJ+eoZyWoaGoo5+eqZyamqunr7Crm6Ojt6qgn66otqmmp62wpLewpLefopuYmKqmoZqsuLCioaScoqCgk5WhlJWWm5iXlpeclZ+pnamjoZ2jqqqwrqi0q6qmrbKwpaqusrGwr66vpqensq6xtK+8tLq3rqOUgXl1ZF5hVllXU1JUS01eTFBLR0dMTEU8QD48Qjw7NzY1MzQ5ODg5OTo5Pjo4Pj47PTw8Nz49Njc2PTc7PTs5Nzk7Ozw+OTk6Ozo4Njc2NTQ1MzEwNDU2Nzk6ODo5Ojo3Ojs5OT1AOnbAvLS5wrG+uLyunaeno6q7wL3Aua60uMHMx8XCw73GuMjMssHDwq69vLa8vba6u7OztKyenKSsl5SNkYWAfXdxaWxydHBpaGVkZmJcXFpZWlxcXF1eXVxbXF5cW1xZW1taWFZXV1ZXWFdXV1ZbY2NjYmNiY2RmaoGWk5WLkZSTm5mclpaboJyflaCfpqWkpqefnJ+moKqvpp+io7aooKGiqLShpailsKWwray1nqCdlZSpoaKUrbGxn6KjnZ2Ym5OLoZSRk5iYkpeXmJedppunoaKZo6Wlq6SlsKelo6urraaorq+uq6iqqbOlpqyvtLGuvLWxr6+gknp2cmRhXFpdWE5MUkhSYU1XUE9KTU9FQkQ/OT02OTo3NjQ1OTk7OTg4Nzs4OT0+Oz47PDY5Ojc7Njs3Ozs6ODU6Ozo7OzY8Ozg4NDY4NjMzMjEuLzI1NTY7Ojg7Nzg3Njw7Ojs7QTh4u7uxtb2wu7G3rJ6lp623u7zBxbqxubXEycnAw8bGyLbGxLPCwMasuLi+t768vbi2sLCrnJujpo+NdouHf3VuY2JmaWhmaGpnam1gXVxbWlpaWlxdXFtcXl9cWllbWVlaW1dVWFdUVFZVUlVSVWBgX2BhX2BhY2RpgZOTiJCOlJKTnJSVlqOZoJacoKWhraakpKKjopyqq6WZnqWxqaCgnaWrnqehnq2tqamuraGhopSXo5uckKupsJufop+el5mTip6RjZKTlpCYmJOcoaKdpKChlaChpKabo6uloqSqpKuupa2yqaalpqa0pqmorbO1tLm6r6qsnotycG9gW1dWVlJHUE9IWlxPUklUS1NMRUZJQzg7Oz08ODY2Nzo5Ozo5NzY5Nzc6Ozo9PDw2Ozw4PjU5ODo4ODY1OTo7PDk3Pzw5Njc4NDUyMTIxLi4xNDI2Ojg2Ojg2OTg5ODk7OUA5e7W0rbS7sq+rsa2dqKevubmzwMi6tcCvxsnNu8HKzMi1yr2xvsTKrrK5w7e9wr63t66wqZmeoJ+KhXWIg3t0aWlpbGdqbG1ram1lXVxcW1tcWlhaXVtbXmBgXFhYWllYV1hXVFZWVVRVVVJTT1FZXVxdXl5eX19iZG2Oj4SRh5CRjpmTlJKcmqKcm6CnqKqoqqaopaOYpK6klJmlr6mfm5mboJ6umZuqs5+lpp+io6GUk5uWlpKpqa2anJ+hoJqUkIyZjouQjJKNlpWQnqGgo5ybopWboKKgmKKoo6Koq6Crr6Sut6WjpKKsraqoq6+yt7K9tbOrr5iEc3NoW1hYU1VRRVhMUVtZTVVOUExQUUlOSUI8Pz9BPzw2NTc5OTw8OTg3Ojc5Ojs8PT47Nzs7Oj02Nzo7ODk3Njk4OTo2Oj05OTU3NzU3MTE0MS0rLzQzNDk4ODo6ODo6NzQ4PTg/OX6zrqiztq6pp6+tm6morLe2rLvKu7a/rMzHxrnBzs/ItMW8t7vEybKuucG4vsC9trmqrqSanJ6aiX93f3Z3bm1obW5tcGhnaWdkXVpbW1tbXFtZWltcXF5fX1xYWFlYV1hXVlVUU1VWVVVUU05QUVlaWlpdXFxeX2Bkfo2Bi3+MkIqSjZeRl5mioJufqqmmrqqnr6OnmZ+soJWWpKinnZeQj5qerpaXp6qZn52UpaGekpCTkpOVp6qlmpmZnZ2WjYyMlIaIjYOQi5KVkaCeoKOXlZ+VmqCinZObpaWnqKigsbCmsbynoKOstKuup7C1sLm1wLGtsauRfXFyYlZTVk5SSUZWUFJSTExYTUpMTlJHTUpBQ0ZEQz5ANzU4ODk7OTo3Ojo3PD06O0A+Ojk7OTo/NzU5Ojk4NzY5NTg3Nzk7ODU1NzY2NjEzMjAtKi4xMDI4Nzc7OTk7ODk0ODs4QDh/s62msbeqpqKwq52qp6mysaS2xrS5urPLxrq7wsvQy7G4uLy+wcSysbO5rra2vba5p6ihop6emIWGeWpnbG5xbnFqcGtkZmdlXlpZWllaWlpbWlpaXFxdXFpYWFhZWVdYV1VVVFJTVVNWVVJOTk5SV1hZWVlZXFxdYWqAen92iY2HkIqXiZSUl5uZnaian6mlpKqdp5igpZuSj56impeWhYSSmqOPk6KclpaWiKKampOLjouQmqSnnJWVl5uQkoeUjoyBi41/kIqSkpKhmp+ilZSYmJWipZmMmaSmqKahn7SyqLK3oZ2it6yqraSysqW1u7Wrq7GjiXhybV1OUVFMT0NNTk5QS0ZOTkpKTk1RSU1KQUdMSEdDPTg1ODg4OTo7Njk6Njg7OTk+PDg6Pjk7Pzg3ODk6ODg2ODU3Njg4OTc0NTc3ODIwMzAxKyktLzEyNzc2Ojk5OTk4NDk4OEE3d7anpLawpKejqaWgqaWks6qissO1tbKzxsa3usPKzMazrbu+tbjBsK6qsp+osL2ysqSfoKWdm4t/inBeX2ZycHZxaW5pZWhoal9YWFhYWFlZWVpaWVtbXFxZWFhXWVlYVVZSU1JQUVRRU1VRTU1LTFNXV1ZYWFlYW11hb3N2cYWIgoiAkYSOipSRk52gj5qboqGjmKSWoZuVjYeYmoxzjYJ9jZeWhZCZkJSOjnuZjpyMgoqAiZifop6Qk5iWhI6Ck35+dImOeZCHk5CQnZqZmpCVkJ2OoqOOiZqgoaOjm6K0r6yvrJ+ZpbimprGhsa6csLuqqa+qmYJ2cmJVTVJPUE1DU05MUU1CUFFISU5TTUhKSkNKTEZLSzw3NDk4ODg7OzY5Ozc6PDk6Ojs3OT85PkA3OTo8ODk3NjQ0NDU4NzQzMTI1ODUvMDEwMikoLC0xMTc2NDc4OTo6NjU6ODdBN3i3oqO0qKWmqKOmpaamprOnpbTBuK+0sMnEt7nBzsW+s627wqyuxK6po6iTn6i5sKillZyem5aCfYRnV1ZfZ2ZpZ2huY2ppZ2JcWFdYWFhZWVlZWVlaW1tbWVlZVldXV1NUUE5QTk9PUFNUUU1NSkhOU1NTVFVVV1lbXWlscm1/hXx0Tlhyj4KXho2cl4uTkJ+XnZWUlpSOlol/k4lfO1dve4uUiYCLkoyQhoZzioSWgXmCeoWUnZSDlo6Qj4OGfZJ4cm+FjX2JgZGNj5eZmJOKj4mch56Xh4iWnpqhoJenr6mtqKiel62zoqaumayrmKe0oqmto5N+cm1fW05TUlZMRFRKUE1MRk5PSUZMUU1LT0pJTVBGSUk8NzU5OTk5OTo3Ojs6Pj44Oj09Njo/OD4/NTg5Ozc5Njc1MzMzNzYwLi0vMzQ0MTEwLy8oKSsrLTM4NTQ3Nzk8Ojc5Ozg2QTl5t6CjraGmpqqgp6mnoqmwqKe0wbmwtbDHwrezvc+/ua+vtsOoq8aqpJ6ahJWdtKafnoyal5SNgXh7XlBMUlVZWlddXmJnY19ZV1dXWFhYWVpZWFlYWVpaWllYWFZXV1VTUk5MS0hHYlxNT1JNS0hGSE5RUU1QUlRWWFpgbXBpe4J0UEJBf5WRkX2JlIyEio2ajZWVipKIhZWGeIh/YEpRbniKkYR9hI2JhX9/bn5/lHd1dXeEjZlwUY2Iiod8fniTdmh3hoh+ioiVio2QkZaLhIqIlISajIGEkpqWnpyUpKOoqaWknpuwqqGkpJGmqpahqZyipqiJdWxlXltIUVFSTUlVTVNJTEtPSUhHS05MTVRLUVFPRklDPDc2OTo4Ojs7ODo7OD4/OTk+PTg7PDY7OzQ3ODs2Nzc1MzQ0Njk2LzMvLjEyNTIyMS8sJykrKiw0ODMzOTc5Ojk5Ojo6Oj85d7aboqedn6Guoaeopaeor62qtry2uLezwru2qLrIuLaoqLW2qrO+qJ+Wj4CLlauZmpCDlIqKg312dFpNS01OT0xNUVdbXFpYWlVVVlZWV1lZWFhZWFhZWVlaWFhWVldVU1BNSkVAQJtrc3NJTUtERERJTk9oWU5RU1RVWm6DdHd+amldVY+JlIl0f4eBfIWMkoGSmYuPe4aPgHV/eHNudXB0jY2BeX2KqoV5emh2e45wcm14gYuMknh6gHuAdnJykndodYSEhIR7lYmIioyKgH+Ei4x/lIN7gI+YlZyVkZ+dqZ6foJ2gqaWfnZiNp6SToJ+Wnp6kgHJnYFxcSlZPUUdKWFJPSk1NUkpKSk1QSExRTFJUTEVIQTw3Nzs5OT49Ojs8OThAPzo6Pj03PT03OTkzNzc5NTY3NTI1MjU3Mi8yLiwvLzIwMC8tKygoKS4xMjcyMTk4Nzk4Nzc1Ojw7N3aumKOhmJyftKmvqaWtrLCxqr20sru4tru1sqC3urKqnZ2sqaizsKKbko+VgY+ekZaEe41/gnx2dW5aS0hISEdFSEhQVFRUV1dTVFVVVVZXV1dYWFhYWFhYWVlXV1VWVVNQS0Y+OTNOPH6eTUhKREA9QURqlH5MT1FRU1ZedYN9eWd3jZeYjo99Z3mBdniAiY98hJiSgXKHj3x2e29rfq18c5CKf3uGkoF9f3RmdnyGbG9oc3yJjIeAbHlxfXBtdY9xaXGAfo5wQ4uEgoOFf3d3eouFfYt6dX6Oko+YipKam6OWmZ2anZ6inZaNiqWbj56XjpaYj3ZubGViWldXVFFKU1VUT1BOUFZLTktOT0pRTkhOT0tFQzw7Nzk7Ojo/PTk8Ojk5Pz87ODw9Nzw5OTk5MjY2ODU2NjMzNjIxMjI0LiwsLS4uLTAtKyonJyouMTM2Mi84NzY5NjY1Mjc5OTV5ppegn5agpq+srquoqbCvsau8uKy7vrmzraibsKesm4+WnKWppaGYmpCGk3qKkY6PenWCcnp2cHFvWktGR0VBQENESUxMTVFSUFFTVVRUVVZXV1dYV1hZWVlZWVlWVlRTUUtENzhmNzA/qGlOSEM9OzpEioV6WkpOUFFUWF5lcHJtiKeqwH51eWJ7eG58eYiQeXyLhW9tjJF4c3hqaoCCcpaRi4F9loBJk5huaHd+gmxpY2x5hZCShmtzbHxucnuGaW1wf3ONiYSGen1+e3ZvdHOFgnmBd3B8joyKlIOWl5iakJOVlpmXnpeMg4mfkYuSjYaQln5taG1ubldVV1RSUVlPUlRUU1hVTU5ITkpNTktDSE5HRT86ODk7OTk6Pjw5PDs6Oj0+Ojg6Ozk/ODY4NzI3NTc1NTQxNDQyLzAyNCorKiotListKigqKCcsLTEyNTAsNDU2NzQ4NUhBODk1d5mRm5manqWtsKKsqqi1r66stL+rvMK/pqKalaSXnY2Ei5ShoZmZkZSLdI56gYeOinhzeW91cGpubltORUZDQDw+PkFGRkdLS0tNUFJSUlRUVFRWVldXWFlaWVlaV1ZUU1BMRTFAmjMganNDmW87PDk1PICChl9JTU9PUldaUllcYKeIYpppdHplfnBtf3qLiXaBiIZ0bJqRdHN7amudj015hZKJhI5nMXaGc2x+foN0ZmV0foSEhYBmaWx1a3GAfGdxcXtuk42Pe3N9fHFwbnVtgn53eXRpeYmCiImDlpOSkIuNkZSUj5eOgHmIl4iGioaAkId2ampuZ2RXUVpXWVlbTVBVVllYTklIRUpKSEdCQUZEQ0c9OTk4Ozk6OTw6OTs6OjpAPDk6PDk4Pjc4NzcxNTI0NDUzMzY0NTAzMS4qKispLCwrKykoKycpLCwyMjYsKzU3NzU0NzhpTzg7NW6SiJqRmZakqK6esp+muq6rsrDCsbvDx5uWj5WZi42FeYSQmJSNkIyPhnGHgnSIjol8c3VycXFocmphVEZJQz88Ozk6P0BBRERFR0pMT1FRUVFSU1RVVlZYWlpZWFZVVFNQS0U4MC9cYLNHOVhQOzk0NDGWuotITE1PT1FWTEFJUUlir7OgcXx4bX1scoOBhYF6hIaGeXKglXR4gHN1lIc1cZ2onY6hoYSihXZwhnyHfHOMrY2JgGhmYmlucm1wg3Vpb1h1cI6akndsf3t9bXFtcIB6c3ZtYnaEf4aAhZCRiouKkouRjIuPg3V4i4+AfoOAfo96cXBva15aXF1bWVhgXlJOW1pYV0xISkVKRz9DQUJHPkNEPTs5Nz07Ojs7OTo5OTs6Pzw4OD06ODs2NjY1MTEyMTM1MzQ3NTUzMS4vLCwrKSopKSoqKikoKikrLzNETTIxNjY2NDM8dlI3PTdikoGSh5aRnqSnnq+VpbWprbGuwbK7wcaXkIyUkICIfW6BkJKJg4qHj4V1goRslomKfXd5eW54cHhmal5JUEc+QDc0NDg7Ozw9PkBCRUlMTExNTlBRU1VVVldYWVhWVVRTUExFPDUqnUtbQC1nSTk0Lz+Sg6muX0dMTU5QTDdDTVJTREqGdoB8fHZ+bXeIiHx9hYN/jH52opl5foaBhZmEm5xhhqqfnYqCkI56d4h+iYiOc4qXj4N7XGRxdHp7d4psZ2pieW+Fj4J6boF3dIR6cHR5d2tuaV13h32HfIiHj4CLk5eDjYWNhn1xhH+EfHV3e32JdW9yc2VmX1taXVNbZl5XUVVYW1VHSkpES0c/RkBEQz5BQT06OTc8Ozs9PDo6OTk7Oz0+Nzk+OTk4Njc1NDI0NDAwNDY0NTY1NC0sKSsoJycnJigoKSkoKCsrKy8wMFVxPDIzMzMxRX5XND05XI14in+UjJKdnZ+mkaCroLGor8CxusW6lo6RlId6hXZrf4yRgn2KhI6MeIOAc6GFjH5+gn9wgH56aXdrUldMQEUyMTEyNjc2ODg6PD9CRUdGR0pLTU9QUVNUVVdWVlZUU1BNRkA6Mj0gI5ZjjFs1MzExaT9Hb0lGSUxNT1JMS1RdWVJKaYSIe4l5fHF8j4x6fImGfpeHdqGZiIePkpSljaypSIaur6+LgYCTioKLgYSRqIeAmJiKnHNsfIGGh32OaGdoeH5uhYaChXGEhUdrgHdyeXZobWtfdn2DiH+IhYx6lZ6ciouIkX97dYt2fHdtb3d+f3JycWtaXFxbY2NYZmVbVU9QVllQRExLRk5JQ0ZDQ0FAQ0E9OTc4Ojo6Ozs6ODg4Ojo/PjY7Pjc1ODU3NzMzNDQyMzY2NTY3Njg7REZMTU1MQzcrIiUnKykrKywvMDArbnUyMjQyMEyBXDU9PF6EdHx+ioWIkY+Wl5KXoZ2soaa4r7O9s5eNkouYi310cH+Jkn59jIKSlH2Gfoakh4h/goiFeIeIfnOEeF9jVktCNjAuLzIzMTIzNjY4Oj0/P0JFR0hKTE5RU1RVVFRWVVNRT0dDPzgwLCOHWz4/OTQuXZZwc6NVRklLTU5QV2BZcFpcXmqNk4eVgYSChZGTfoWJkYGalYKhoZeVm5qlrZOau7Gnu8fDqIuMoaWPlImBkXtyhJ6fkZx/doWFio+HkGlob4OAdIyGhItxhoJ3h4B7doV9bnZ1Z4CUj4aJiIeIh6GropaJjph/e4KJenpvZ2t4fnh9cWpjXVpaXWlcYWZfWU9LTldSUUlQS0ROR0NLRENBRENBPDo4Nz08Ojw6ODg3Nzg6PT04PD02ODY1NjYyMzQ0NTU3Njg2NzxCQj88ODo+Q1FeZVxHMicmLCwtLS4xKD+MWy4zMTBPg180PztudXBneIN7gIyAgZCPi5qapJyhrKarr7CXkZGEoZSEeHd/jJR8f5KGkpV/ioCSm46DgIGLi4KJjYN/in9scGpdQ0E0LS0vLy4vMDIyMzQ3Nzk7PT9CREhKT1FSU1JTVFRSUE9IREI8ODcvOUQ+PDw2My5sk5dNUEhJS0tLTlZgY39nZ211nZuPmpOTi42OmoiTj52LoKCSo6qlo6yTqLaiqMHDrseveLqUmnyNoZ6ZhJOFgo+in5SZkoSKhY+YkZZscHWJi4GVjI2Pdo+EcWyFgYqWkoOFiHKJoZaGk4qPj5altambjZWig4eThH5/a2prfIB/gHJgXGJeWWZqXGtrXldLR09TUU5NTEZJUERETkZCQ0VHQj45OTc9PDo7Ojk4Nzc2Nzs6Nj06Nzg1NDU2MzQ1NTY2NjY4NTU2MzEwLiosLCkoKS46UGFcQCwoLSsrMCwncog3MjQwT4RiM0A8dW5oWXCDcHWHcXaShn6XlpqUn5+cp6CqlpOYnmdlpJp+hJKReYCSiJCSfYqFmJKRgoCAi42JhZCHhIiFeHh/Z01SPi8uLiwvLi0vMDAwMjEyNDU3Oz9DRk5QUlRQUVJTUU5QSUVEPjs8OkNGPz48NzUyPD9SNUhISExMTU5SXm+KfHOBfaCdm6imopmhl6KVnJ+onqmrn6isqaq1l6u/q7bIyLfJ0c++m6Bwaaupn4SUkoacoZqamaeRkYiVopqad3p+lJeRoZKWl4GUnnt2lZKrs4mNl6B9lJ6cjpOWmaSiprawnZGZqIiXkI6BiGxzc3x+em9nX1tfXmFmY2BnZ1xRRUpLUE9JSkxGRk1DSExGRkNCR0RAOjg1PDw4OTk5NzU2NTg+NzU9ODQ3NDU3NTQ1MzY5NTg6NjE2ODYzLzAuLSosLy4tJyMqO1hiQigqLDEtKEuXXjA2M1GFZjJBQGlhXlBxdWBufWJ3jn18lI6Oip+Sl56WnKqYnqpCRH2HiYeYjXiCjYqOjHuKho+QjoGDgImLioSShYOGiIGAh3dfYlA0NjAtMS8sLjAwLi8uLjAwMTU+QUFNUVJTUFJTVVNOU0xFRUA8Pj1HR0BBQDg2NjI8OTtGSEdJSU1PUVlthpB3lYujp6q0vbilrqysp6i0rLG3srKtu7GzvpyzxKy7ycu4xL+4paOwsqytq6SLlpiFpqagopeBppmNoqqopIeFk6OgoKqgpKmOnLGLlaOnt7uboKOwk6Odo56RpKKrr62ztaKVpauJmoqTipV6e36EfWZfZ1tkYV1jY15mZl5bT0NJSFRPRkhMRktIRUZIQUtGQ0ZGQTo4Nz08ODg6OTc0NjU4PDU0PDc2OjQ0NjQ0NzM5PDM4PDIwMjU1MS8xLi0qKi8sLSooKiYlNVhYLywwLCwwhIE4NzFQhWg1QUNbWFRMaWNYanBYeoV2gZSFiIKbg5KQjZLayJ2Wc1aXiI+InI98hoyOiol6iIKHkY6DhYCLhYaHkoaChImGh4eHcW5hQEU2NDwyLzExMC0sKy0xLy00P0RBTVVRUlRVVVdVTVtQR0dEPD4+RkhDREA4Ozw1Qzs9RktJR0hST1BXgZOghK6js6qywcfDq7PFtqyzwLO4vra/tMG2u7ukuMaptsnHtr65tKijtK2xsZyakpqfiaevqqSVdp+kl6GrsbOYlqmtqK61u7K6rK+1orGssbW8t7WutaCnp6Oom6mwrbK6uLinnLepjaWPkpOghnmCgnRYYGNVZWFgYl9gZV9aVUpERUxVUUlKSkRKSEVBQEBLREFNRjw4Njc7PDk3Ojk4NjU1NTcxMTw4ODk1NDY2NDk3Pj0zODkxLjAxMjExMzAsKiwuLCsrKyooJyopRVowMCovK2iSTzYwUodqNkFFV1FKTFtaUWNkV3p1cYKUfYWGk3aGfoCNe7+7o7yCtJSTjZuPhIiPkomJeYaAjJOMh4WBjn+BiY6Gf4WIhYqHkXp5bl1WQEVNPDY6NDZBQjc2NC8vNkNIQ1FbT1FVV1VcV09fVUlLSkFAP0dLRkVEOz5AN0Q3P0JKSkVHV1RQXo+lraOxtMO2uMHMyba7xL2ztMG3uMK1v7C3dLG0prrFpLDGubGzsbSopLW2qrGgopabopKlsa2lraynpJigrLK6oqiyubW7vsy/xcW9vbPCt7q4v7e6t7mtrbGmsaqtvrC9u8LCrJm7qJWtj5iYqol+gnppV2FgV2lkaGRWWmNZVlRJR0dMUUdESUpBSEQ+P0JCS0BATEM5OTY2OTo/Njo5OTY2MjQ2LzE5NTk5MzY0NjI3Oz0/NjoxLi81ODo5NjUwKigsLS0tLCwqKCgrKyhFUy8qMDBKj2s1MlCHbTY/RlFMQUxSV1RaVlp3anB/j4SBjoVuenN4iGK4oZqjiZWUlpOUk42Ql5KHh3uGgY2VioCEgYp6fIuHhn2KgoGLhJV9eHl1ZU9cZEdFTDpRZGFbXlNGPjtIUERaZFFRWVhaZ1pUYGFNU09FQT9JSkhFRkFAQz1FNkI+SEdLTVNaVF6Ur7i1urnJwLu9ycy7vcC7t7W8u7e+tbqyxmB1sqWxmp6rvqqlqKuqo6KytaGrp56Vlp6Yn66lp6aln6SToqews6iysry2wb3TycnTxsLFzMLKw8C+vb+7vLe0sLm3t8O6xr7DybCeuqqirI+lqLaJgX5xXmFgXFZhXmdlUlhhVlJVSUVFTktAPkdEPUtCPUJAPUY+O0hANzk2Mzc5PjQ4OTo1NzA0NS8yNjM4OTM3MzUyNj84QD5HS1JUVFJQT1FSUUpBOS8sLCwqKygoLC0sL1A+KC40OIB9PDJLiHE5PkNLRUBJTVBSTFFdZ21scZCNhZBzbXNyc4jVwLWZoI2VmZqRjpeRlpaOhod9hoOMlot/g3+DeHuLhId7i3mBioKXf3R9emtlcHZZXVxQZWViYGVkXVtYV1xNZG1VUm1uX29fWGdlVVlUSkRBS0tIRkhISEhCSTlEP0hLVFRWXVpck7nAub23xsC7ucrLu7e6tri5s7i1ta62tplkdamerXBeoq2cmKGim6Seq6WUn5+QlI+WmJeon6WfnpqZg6SdrKSqsK23sLy41NDO1s/JzNLMz87Kx8C/wsq9wb3CwMXExsq/yc+0pLuxtbCbrLm9mn54alxfW1hdYFliYlFbYFNRS0NCRUZFPEBFPkJIQkBDPTpFPj1KPzQ3NTM1Oz00Njg5NzcwMjIvMjQxNjk3NzU1NTVEM0VMTT41MTAwMDY6NDc3QElPSjstJioqKC0uLyxATSsvNTRtiUkwSIl0Pz5CREBDREZLT0RSXFlpYG+XkpGUbmxvdHWHs6yhoZ+LmZyZjY2VkZuShYqKfoiHjJCMiXyBg3N7ioOFfIp0goqGlX9ze3hsbXV8aXNlaWxpZmpqaWBmaWhtWm10l62kvIeHZ1tvaF1aWVRISk5QSktRTFRRSExBSkdLUF9fYmdqYpe3x7C5s7u+trLEx7awubGwu6yzsaert6yNtqeenKeaTpuejY6glpGmmKWVipOTiJGJj5CSnpuhmJuVloeemaaarK+or6ezs9PU1NbRy8/T1c7Tz8zGw8rQv8rJy8nSyM3Nw9HSuLDEvcS6pre7xKKAbWJbW1xXX1dZZVlQXFdOUUNCSEVCSDtBRD5BSD8/Qjc7RD5ASD00NjY1NTs6Njg3NjU0LzEwMTQ2Mjc4ODc1MzY3QzVCOD8tMCwxMzQ5PTk3LC4sMTtGTD0pLCguMDAwN0s/LTQ2VIhXMESHd0M7Qj5FQkFDSk0/VVlTZldzkJCZg2hxb3l5g6CqnqaXjZubmIuNlZGajn2Ji4WOioqLkIh8hIJwf4eBhnuHcoOSi499cXh1bHB4f3J7bnhzbGmAcG1jaW1weWl3fX7Lv8Lfp21jeG9kW2FgSlBSVU5ZXlBdXU5QTlRRVVRcbm53g3KWrristKiwtqutvcCxq7WmpbinrK6grLSkj7Gum5iYjJGUkYSPm4GNppGciYOLhIqJhIqDlJWYl5SbkZuXmZmenquspKehrKzO0tXRzczS09TQ1NHOyMPU0cjO0tPT1s3S0cXS1sbAzsjIw6m/uNCdeGxkXGFcVV5RXVpOT1NQTkg+QUZCQkU8QEI/RUU+Pz86PT09PEpBNDU0NjU8ODg4NjY0NDEyLzAzNTI2NzY4NTMzOz08RT1AMTErLzM0OT81OTAxMDIyLTJFTzMpLzMuMzI9TjI0OEN9XzJBhnREOj09ST5AQ0ZIPFZSTU9bdYeGi3dtd3B9foChnp6hi42Zk5OMjJOQloV5hpCQjYuKiJGHf4J7cn6Agod6hXaFk5GJf292c2xzfHx3fHOCeHFrgHJyaW9xenlye77Lmn6MsYN2coV3aGFqXUNaWltXZmRYZWtUWF1cYGNdY3h7f4uBmaqkpKKgoammqrG5q6a0o6KtoqOtoaexn4mmm5WTkYqSjoiClIlrlaKNmYSBhn6Rg4OTlqyLlY2VmY6FkpCdl6ewoqCgpKSox83Px8HL0NPR1NLO083G1tPN1NjW1tjV19XJ1NrNydfW0cqtxMPMinFtYl9eV1JYUltPSkdJSUpAOzo7RUJEPEJEPkhCP0JCOzs5PDpHQjQ2NTQ0PDU2ODc1NDMyNTAvMjU0Njc0NTU0NDw+PUU/QTYyLy0xNjs9MDgxLzI1NC8tLjtSMDE3LzUzMkVEMjg+bmI1PYF0TTk5QEk8QUQ/QTtQTEZLWXCAdX5pc3lygomBnZWelIWLlomOioiOiI+AeIOUmYuNiIiLiX6DeHN7fYSHd4B7h5GXgYNud3BtdX92eH10hnx5bId2dW99doR1eXudtYw8QYrGpX6NfGplV0lDZWNmY2hqZG95W19maGtuaW6AhIiRjJ6foJ6Rl5ifo6OmsqSls6CipZ6hqJ+isZyHn5KSk5GLjouGg4+EfpybjI2ChIV6lH6CqpWjjJKKmJKLfZeKmpGrs5eam6ecp73Dxbm2xc3S0NHPy9LLydTP0dXa19fY1NnYzdjbzsna2tLWv8zNtXZ1bWNcWFFVUFlVRUZKSUVFPTo3OkBBQzpHRUBFQ0FEQTs/Ozs3REM3NTY1NTswNjg5NDQzMzQxMDE0NTU4NzQ0NDQ5QD5EQkM8MzMuNkZUV09RSkFKRj8xKiguQlQyOTI1NC83Szc1PGBiQTxzdlY4N0FIOj9DPjw5UUVDSlRsbm9wYnFxc4aNfJeRnYt+h5KCiYaFioKIfXmFl5eIj4OHhod6hHlxenuEhnZ6ho6NnXqMcHxvcHp/cnuAcYSHgG6OenV3fXyCdX98h4mwdFmpwraMkoFwbmM9XmhycHFwbnh3gmVpb3J1eHJ7i4eOk5KblqCWiIyTm6Cbn6qfoa2copqZn6Wen6yZjJqMkZKOhX2Ih4OFi46gmZOIg4d+bZl5hJmGiJOMjZWMhnubiJOPrquUlZeemKautbyorb3Gy8jJy8vPycPRytTW2NfY19Xb19Pa29bQ29rR1snVzJR3eWdnWllPUlNdSEJFSUk+QT49Nzo9Pzs+SD1AQkFBREE+Pzo4N0RCNzU1NDc5LjU2NjQzNTUzMjMyMzY0NzU1MzQ1N0VCRENFQjU2PEZOU01bbmZjbnNrYFY+LDRMRzg2NTQzM0JGND1XX2hMdXheODs/Rjw8Qjw6OUQ/Q0dSa19tZGJma3aAiHGRkJuAeYCOfoOCgoR+hHx9hJiOh4x+hoeAd4J5bnt7h4J0epKejaF2j3WCdHWBfXSAhG+CkIJvkoR0fIGFenaHfIm4xqXDybeBlZuPeHBlTmVjgnqBd4aikIt5eXd7hH98hHZtlJaUlY+YkYOJj5aal5emnJigl5+TkpejnZmrlpGRi42Sg4yFiYiBhpCRnpyZiYWLgYWXe4iJn5eQiY2Ki4J8oYiQi7yhmJOXmZyopqWunqe1vsDAucfJzc7FzcrR1tXU2dXX29TX2drb19va2djO28eFeXdlaGNfU1ZWVU1LRE5EOz09PDk6PD45PkE2Pj9APUA+PDk4NjdDQTY0NTU9ODA2NjU1NDc3NDU2MTM4NTQ1NjQ1NTdISD1ESkU3OTI1O0g+Ozo6N0hQXFpSVVhLOVQ+Ozk1MzI3STg9TllNSHh4ZDU9PkM9PEA6Njo+PkBFUV9ZZWFdW2h0enlsiY2Sd3Z6inx+gH9/fIV7foKRioWGeoWIe3V9dW19fYZ+dH+SnpGfg5J8hn14j355i4pvg5uAdJmGfYGJhXx+kXuQqY6Qw6C8jJyjnH2JhH2JcoyLf3OmmpyZlIV7j5GJhGlHcaGknYyLkJKFiIuRk5WPnZqTlZGXjYyVn52UoZSSjo6Qi36Qj46LhIiSlpqfn4mMlJGdkIKMf6aZiIWOgoaEgKSGiou4mJ2RlJahp6Cdnp2jrra6tau/xcrQyMfMz9PS0tjS1dfA19jZ29ja2tnZ19u3d3d2aWlkVl5aU09OSERMQj09Pjk5Ozo5OTw9NkA+Pj09OTo7OzM3REA4Mzc4PjcwNjg4MzU3PDM3ODA0OTc2NzU1NTQ2RlA1RE5JODkzOEFLPTszQ0BJPDlEV048TVRITj85NjMzMz5DO1tYPjVZeXBaPDxBPD0+ODU4OT89RFJTUlheVVhmbW1taYGOinFzeIp7e399f3uIe317i4eDfnWEhnlzenRtgX6EfXeGm6GbnpSSgIuHf5iHgJySboiphXqgi3yQjoOIhJx+mpGJjaOin5Cjrp+LkYuFi4GShldyrYufrJyPhJickJCOXIOikYKNn5OVjIeIjJKTjJSVlJCMj4qIlpudj5WWkYuTlIaAi4mSjYqKnZaZo6KGk52VoIqKiI6ckIOIj4CDh4WkhYuQs5ickpSXoaGemZKbnaexuKylvMHHzcfGz8zPzM/Xz9HUrtbV2NrZ2trX1tnZnm57c2ZlW1xXUlVXQ0BJRD8/Pjo0OTo7Nzo7OjM7PD89Pjc7OToxOkc9OjI3PUA1MDY3NzI1NT82NTs1NTg1ODo1NzczNUhSN0dPSzk5ND1FSkI+MUZDTEE5ODpHWEA1SFdJNjYyMjM6RUNlWD8mX3lpX3o+Pjk8Ozk4OjxAO0JRS0tTWVBUY2J4bGJ+koNvbXeLeHp/e4F9hnx7doaFgHNwhYJ7dnd2dISDhX1/kqain6ailomdkJSXioqnl3KKso2Ep5KEmZOEmoyjlqCYk4mbnaGSqK+fkZSQjo6IlYtujbeEmsTIsp2ipZudmJaRspBkpM3IlY6Gh4mQko2Nk5SKhYqKhpaam4+QlJOHlZiEgI+LmYiOkKqXl6SjiJmelpqJj4aXl4uFj4yBf4aPpYiNk6iZl5OWmKGYn5mTnZuisrSlo7zBvsfFxcnIycLK08zN1KjS0dbW1tja1NPazoFxfWdiXV1cTklUWUFCR0Q7QT04Mzc7PDo4PTY0OTo8OjcyPzk5MjlJOj42N0JDMzI6OTYyNjQ+PTQ7PjY5NDk7NTc5NDRLUTxKUUs5QTdCR0lANjRKRUxGPjs4OEVUQTc+XDg2MjE0OjtFYFhBRmF0aExjWj41Ozo6NTs6PTpFTUZIUldTUkJjgUZ2gY99fG1+iHh6fnuCgoN/dnaAg3xtbot/enx4eHyEh4p+i6Ozp6Oqs6GWp5+lpJaVrqKDkbiVkbOajKGhjKSbsKOknZiRp5anmayvpJeUlpWQi5iZl6HAjqPJuauco6atmZKbnbKdhYWoopyYhYmJjpWMi5OPiIGGh4mTmJWMi5SThpWYhoSRkJx1kZiylpekoYidmpOQipCKl5uJipaOhn2MmJ6JkJCcmpmTmJeflKCdlZ6boLGuoqS3vrTFx8S9w8O/xs3KydKmzs3T0tHW2NPQ2LpxeHRbX1RfVU9ISk5EQkNFNT46Nzc6Pzw8Nz00MjY2OTc3ND01OzU8TDw+OzxCQTc1PDs0Mjc3P0A2P0A3ODQ5ODc7PDU1T01EUFJMOEA9RUFHQTU6SkVORUQ6NkFAQlM+OURPMzIzNTc1PXZcPFJcdGlaTV1TPD04ODU2Nz06SkZER05bXFlKZmA7SISLenpuhYZ6fIR5gYaBfnB4fH59b3KNen2BfHiGi4mGhJKnu6yosr2vpK2zs6ijobCsipq1naK4pZWtpJeprbinpKOfmqmXqaOvsKmZmJyUlZGXoJiau7uuyqFqtrirsJSZn6Osk5e9o16qsoOKio2Uh5F8jo59g4aOj5SViIiTloyQlo2LjJeYk52ZtJeWq52LnJSSjpGSjJibipGekIuJlZ+hjZSNmJmckpuYnpShoJScnKWvqKGks7irwsjEtbq9u8XHx8LRoMbJzc3F19bRy9Shb3lnW1lTXVBPRUM+PENBQjg/ODc1P0c9PDY8MzUzNDU0NTRCMzk6Qk06QjtBSEI7OkA8NzQ2PEI5P0BCODc0Ojo2Pjw0N1RLQ1VRSjc8OklBREA0QUpITkJBPzZEQTxKTkQvVD0yNTQ6RUpcWEpaUW1ncHBEaWBLSTY3NTc6PkpAQ0lQZEdiYGJwSkCLin+Bc4aHfYKIdYOKgn9tfH19f3B3h3eOgod7jY+MhoyZqsLAr73Gu7O0wLy0rauztoyosq2tvaubu6Sorbm4q6amoqKkoqmvsrGqnZykmJuYl56ipqWSpLqvqcC8ra2yuaakqH6IhpytvLCDjIyLkIOPg5GOeoGHkI2NnImIj5eNi5WWlJGal52omrGakaycjpqPko6VkJCWl46RoJGJlJujrJSWj5ScnZOgnZuYoKGUmp6npqSio7Czp8HGw6+wurbFxMK/zabHxMfDvNXRzcXKh3JxYFpYXlpMSkJLQEZHPkE/Qjs6ND5BPT01PDY+MzMzMjQxQTE3QEJOPkdAQ05DQT1DPTs4NkNDNUJJQjo4Nzg7NUI+NzlWS0RXT0Y4PTRLQEM+NEVLSE4+QUE2QkI/QlNFNThQMTQ1Ozw4O0Q+OUxqal07V1JkS2daVU83OUdEP0NGXGVHYGlnWl1ck4yMiHuHjIeDjHWGkYqBb357gX9xfoF7lXqSlJSYkJOVp7PGyb/CzMLDuce8u6+rubuXsre6ssCupcCkq6+7vKqtq6OjnqerrrSwqZugqpuhm5afsLWni6O6u7bBvKyonLKlpKiUhY6pxMOkgouPh4iEhpWUjXqEjZGPkaKMjJSRjomXn5iTmZWYpqCunYyqnI6Wj5KRlZWNkJWRj6GUhpefoLKelJqUn6GYpJ+aoJuglJiepaOmpqSvrqW/xMOuqLe2ycO+ts+yxL/EvLPRycjCtXN3a1tWWmhRTEhDTEtLSkFBPUNEPDVBRDs7Mz04QjMzMjI2M0EwNUlFTj5JQEhSQEg+Q0A7Pj1GQTVBVUA7OTk4PDdFPjg+VkpDV09HOD80TEBCOzVKS0NMP0I/PEJGPUFITDkrRzwzNjc0NjRBPzdPYU9hRS89PjZrbGpgQDpIPj9FQmVZTmVcZlRjapmNl4qMiJOQhol5hpSQgXKAfI1/eIeCgpB6jqGWqJqamLq+x8jJwdLJysLNvcKzrbu+p7q/vbvDt6zBqayzu76qsKqkpaSsrrOttrWgn66fpaKYo7O9qZuovcGkt7ewq5OxrKusl4eaqaelkYKMk6WViYF2ipF6hY2SkJ6fk4+Ui4+NlKOZlpyUlKOeqp+RpZqMj4+PlZaIfI+VkpKjmpWgopy1pZCel6SjoqWenaaYnpaXm6SjqaeisqyovMDEr6Wyt8zAua/Es7u+writwsPCwJhreGBXVlpaSktNSkZEREhCQkFETDo0REg5OzQ8N0UuMTIzNTJCMjZTSE48SkJKUUVLQ0RFOkVMQjw3RVY9Oz04OT88ST86RVVJQVdRRzdBOks6Qjc5Sk1CSUBDPjxERzxCQ089MjBIMzY2MTcwPUI6PWpqSks1UVMzU3BwZE47RD1ARj5qSF9YYVpkZFaej52Ol46ekomKf4mgk4R4hX+Vf3+QiIqQgJahma6mpJjCvcfDx8XTzc7Ny7zCt7C5vLS8y7zDwba2u62zv7m8rq+ooKmotq2uqbK3mp6soqehnqu3uKqlsL/Fsb25s6eqtbOtrpeWpayooJGOkrLFp5WOfZKVfYiSmZCqmZiTk4+SlZOlnpKdmZSho6KcmJ+Yi4yPj56IWpCWl5KWpJllmKOes6WWoZasrKqnm56ml5iWmJWgpKiln7arqbm7w7Sls7XLwLiqtqyyuriuqLi6vbiCam1ZVlNUTUVKUk5LP0FIRURIR0c5NUZNOz44PUBKLjMyMDI1QjU1UFdOPExGS1JMT0hHST5JUT86OElTOzs/Nzk+RExCQEhTS0BXUEY6QT9HNkE3O0hNQ0U7Qz00RkU6QkFCRzkvOkEzNjAzPkdEOTQ9dGRNRztFKzpmfGdWOz1AQkZCcEVpSVJlYkxGpZScl6KXqZaNkYOHppOIgoeCnIODlZCQlI+aop+vvq+hxrzFxMbGzs7O0sq+u7axuru8v8+1w724uLeysbWzuLOrppyrrLmqqaevr5ejrqSnpKW1wLCrrLS/w7rAurOnubW4s6+Wpa2urqSLk5WhjXTBmn2XmYSPlpqMsZWbmpWSk5mZpaOUoJuXmqmcnKGgmYqNkJacYEqWnJqVmqWWVJawn6+cnqSUr66rpZqgpZSTmZiOnKCnopm0qaqzvLu7qrCyx7+5pqyrrbGxo6GxsrSkb2xkW1lOT0tFT1BRUTtHSkhHSUNDPjpLVT9BOj1FTTA3NTQ0OkIzNE5XTzxKS09VTlFKUEhISk9CPD5NUjs+PTg6PENSPkRIUklCV05JQEJBRjM+NThKS0NBPUM7NEVBOkE/PkhANSpCNTIsPmNdZzozNXRkZUBSNyYjM31oVzs6QkNAPVFFV1NzYldGSKqXmaCiqK+ZkZeHi6eWjoiThZ+HhJ2Xjp2hm6Oktci1qca6wsPHysjIzM3Gvruzrrm4wcHNtce6wbi1urCur7O0pqSbqrS1qqmmrayapK2lpKisur+oq7a3vsK/vrmzssSyub2so661rLmmiJuXppt2v5+EmZ2Ok5mai66XoZyblpWbn6GpnqefmZqqmaGnnpiQjZGdg252kqKalZ2inpCusqKqlKiql6qto6OfpaiSkpmciJScop2Wsaepq7q2vbOyrb65t6Cjp6ilp5ybrKmpjGFkYF5RSkxGSE1JVkw9TUROSktCQ0Q8UVY9QUFCRE8xOD03Nz9CNzVVWE4/SE5RWVNQUVVLUUpKRUFFTVE/Pz04PTtHUjxFRFFCR1lNS0FIREU6OjM5S0lCPkNCOTlDPjxAPjs7RzctMj4tMYJoTnpcLzBraGA8PUJCODZ6Zlc7Oj0uLVJgTVVIf2VeSEWrlZyhn7uvmZSfi5Orm5GSk4mrjYein4ykrZSjo7bGvrTAusLCx8jFws3Iwb25sq+4tMDCyrXFssG8tLqqqK2tsKOjmKq0u6appquqnamup6Oqq768qK28tLi+x7y3trjBsb7BtKm1t6u+pY+imJKioLyfiZqgmZeeno+3n6mcpaKbnKGaqKWzoZudppyoqp6ZlY+Um4uXiYykopSdop6gta+lpJKvq5mrqp2dpKOokZWVn4OPnp6blamkoaG0tLq1rai1srOenKKlmpeVmKqhnnZfW19dSkhFRk1RSE1FRkdCUkxJQkVHQVZSREg9QUdRMTtCNzpCRjc5XFlLQUxQVFVTTVdSTlVKREBKSk5POUNANT08TlFDPz9QP0VaTUpBS0RHQDUzPUlHPz1FQTk3QTs8QDw8M0A8Lyc7KkiRQjpTSjAsW29XNzE8Kh1CgGRUNDktMTlnXEZDQ5xwYkdFp5ekn57DrZuXpZiZqZyWm5uPqpaVp6aVrayZoqu2xMK8vrfBwsDHxL7Nxru9ubKwuLO/wsi1v7C8tri2pqSrrK2hoZqqqsWipKmrpp6sr6uiqai/t6atvrG4tse2tbm4wLO/wre1s7SvvqOXo5aUnJSuoJCho6Wjo5+QvaSpnqirnZ2gm6afvaKZo5+iqauhnZaNlZ6TnoePhI2Tn6SgnrWspZuVsaeZrqaemamdn42YlJ6EjaCam5OlpJqYq7G1saulqq2snJigoJKOkJWonpRnYlhgXU5IR0pOS0hFRElBPlBIQDxHSUhbUk9LPUhPVTRCRjk+SEc1Q2FbS0NOUlVXVlFYVFJVSUA4UlFQTTpHQTRDSFFTSUM7Qz5HVktDQE8+SzwwNjtHRj47RkE0NkA5Oj85OzE1RDAtLC9Ndlw0S1o1LE1uVzwtPSkeI3piUTVDS1E6blJGPEt4ZWJWTKKao5yexayhn6yena6gkqOflqWfpqqsl7axo6qztsTEvb+1v8K7yMK+ysi2uLW0sLOzt8HFtr6xuLW4tZ+mrKqsnZ2epaTBpJ+qraCkqa2voqaovbWlsby5trbEsrS4ur+zxMG4uK6ztbWjnaWVkpShrqCZop6oqKujmsKtqZ6srZubnpmmob6hnaSYq6uspqKZjZqfkp+Jjld/lp+moaC4qqaTmLWjn7Ggn5qulp6OmJOdgY6fl5WOoqOWkKausqupoaKlpZWVnZiLj5GSpJ6JYGNZY2BLSEpKTkVFQUZKPj1KQjk5SktOXVFRST1MVlw5Rkk9RE1JOEhiXExDTFBTWVlWV09aXklBPVdRSUs/SD81SE1YU0hBOkBBRFBIPz5RPks3MDk5RkU7OEc/LjY+Nzg+NzcvMT85MSUxUVVtW0pPMTA9Z1dEMTc9LSt3YFM2U1prV3JHRTY9dWVcS06en6GZnsOopaK0opyyqJOrpaCjn62prJ27sKistrHIxcHCssLDvcbDvMTKvK+wtq2wtK+/xLS5sbC5tKyZqLCpqpqdpaGowaybrLCcqqOusamkqL22pre7vq+3xK20s8PAs8e0u7estLatqqKmlpWVpKyin5+aqKuwr6+7sqagqaiamZiToqS5oKGkk6+vrKWnn5KhnpWej5CNlZ6aop6ntKamjJizm6Oump2brZCek5WTmX+RoZaPjZ+hk4umrLClpqGcoJ6SkpqThYuRjZyef2BlWmdlSklMSlJCQ0BJRzs7Rz85OU9NVV5SU0o+T15dPUhQQkxMSTlNY1xMRUxSVFlbU1VPXGJIQT9aUUFIQUtCN0ZFTEtNPztCSEROQj07TkBBMy85N0NCOTdGOys2PDQ2PDM1LS80QDErJ1Z0U2VPPzEwNGJbTTIzPjA8dl1eP1tUXmVxQDg7SJZ3ZUE0n6OfnKDDqaSqsqGjtKqWs6ynoqSyrK6pu7GtsLW0xsDEw7XAxL3JxLXAyMG0q7Wor7isv8Ozt66strmlmauyq6qYn6aXrbu0m6ewm62grrSyp6u5sqe6s7iyucCqt7LEvrXGqL+vrbe1qaesoZeXkqaloqKYmKWvuK6ytbagn6ikmpWVk6Sgt6KkpZavsbKnqqain5uam5aXqJ+gmKGer7KipoyXrpikqpeZnqSQmo2Tl5mFlZ6UjI+cnZOLqamqoaegmZ6VjI6Zj4GFlYiUn3hiaFxqak1QTU5UPUNBTkM6Okk/NzdST11eUlZRQVdgXEJKU0hWS0g6VGRcTkZPTltXW1JQUVhdR0FCW1BCRz5OQzlIR0hPUD8/Q0lCTEI8MklBOTQxNzdCPjs3RTcrNjkxNDgwMi0vLjw2LSNCcWdzazIzLzFbYlozMzgwNnBbYkgwNUlwaFZDV0aMeWZDO6OjnaGmv6eor6+hqbWrnbqxq6OqtLaxsLm3sLe4uMS9w8e9vMTBxsC4wMbAuam2pKy7rMDCt7eqrLG6opWtsa2ylqWnkaq5qZ+msJ2roLC0s6qqtratu6yzs7m3rLiww7u+v6bDq7C3rqmrq6aemJmroqKhkZehsa+zrLC5mpypoJmWkpemobeppaOisLG0q7OorJ+boKCbnaWdopedo7Owmp+Pk6Wan6ialKKdlJeJk5aSlZack4iQmpmUjqiopp+jm5ebk4aOmIt9jJaFjppqaGxgbG5XUFFaVEFDRVRAOztIQTc6WFBkXlBWV0VZX11NTFJOXktKPlpjXk5IUE9cVVlQS1RXWkk/RFhQREY/TkA9SUdHUVBCPURGQk0/OjFEPzc3NTQ3Pz05NUU0Kzc1LzI1MS4tLiwxPSonKz1ccD0+MS4wZFpkQDE2NDdnWWBGKD84bH1nW1Y7iXtjQz2nn52iqb2iq7Cro7G4qqW2tKygrbW9rrO4u7q9trbAwr/IxLnEwsDAuMS9wbevtaert7G7vr+0qa6xtp6Xq66orpemqI6nu5+krLOerKKxsLOsqra0tb2usLG1rLC1ssG7xberva+xuKytqqOxpp6lqZ+kmJCZn7Oqs6uqs5qdp5ualY6gpqW0rqehra2usae0rbKqpJyfqKOelaKZm6i1qZeZkZKemZ2fnZCqnZaXhJSWip2ZnJOKjZaXmpempaKgnZaVl5N/j5SFe46Sg4uWZWxyZ29xXkZZZlZEQ01YRFo5SEI2Pl1RaFxOWV1HW15dTk1SWGRKSkNcYl9QTE1OWFdYUEpWVldMPUVVSkVEQU1AQUZISFFQQTtGREZLPTg3Qj02ODcxOT48NjVEMCs4MC8wNS8qLC8tKj0sLCUyKyo1SzEvJ19fYFUxNTA9YFZeOClDM1lUXGdLNox6ZkxApJqhpKy2pK2qpq+ut6qvtbqnp7G3xbext73BwrW0usW+zMW5wsC6vrnEt8C5srSrqbq2u7m+tKmtsLWYmKesqqybq6uPq72dq66yo6ufsK20rq22srm4qq6vsqi1r7S8vcqzqra1sbSwr6ehs6CbqK2gppaWmpqyo62gpa+XoaSampKOo6Wns6mhprOsqbWlr7G1r6SZna2nmpifmpmrt6KXk5GOl5yhl5aUq56akn+Sl4ydnJmWkImUkp6ZpaKhoJiWkZOVeoqPhXuMioOLkmpteG11e2FFYGpZSUhZWj17SkZENkFiVGlbTVxhSltdWlJSUmJhTEtFX2BgUUxJUFdWVU9HV1ZVTjpJVklIP0NLP0VESEhRTkE/SEhIRTw3PT46NzU2MDk/ODY2QiwtOCwvMDQsKCwvLSo3NikoOS4kOks1LiJUYFVgLzUoQ19RXC4qQi9KR1BbSDNjWVVLRJmXobGosaqtpqSvrrapt7S5pKy0t8m7tLq6v7+0s7fDwMzIvMO8t72/v7e/vLG9rae6ube2wraqrLG3lJemrquoo7CqlK+6o6yxs6eoo7K0sbGwtbG4tKquq7Knt6+2tMTGtqm2tqywramno7agoKexoaSUnJmVsZ6nnKCqjqijnpyWmKampbinorK1rKexp66wtqykmaCsqJucnpyUqbiclI6OipibopePmKWfnZSCkZWPnJuXlpWIlo+Xmqeco6CSlpCQlXaEkId7hYGEjIttcHd0e35cS2VsXEtOY1w+YntHSThHZ1dmXExeYk1YWVdUV1RpXU9PSGFdX1BKSFFWVVJLSFdVVk04TVpORUBGSz9IQkNLU00/P0xPSEA7Oj47NjswNDE8PTQ1OD8pMDcpMS4yKSksLC0rLTkkMDQyJTlCNy4jQU5IZjI3J0diTFYlLUItPUVMUTwzcmtJQ0OQmaWupa2uq6elsbO0qrext6CrtbnJua7Au8K4s7G1wsLOxcDBvbS9v7+6vryyxKepubC2tr+8rquzspygp7GtpqWvpZ6ytauqsbKtqqm0u620srWstK2qrKitqbmtsrHIwLilurCpra2lqK6wpqWjr6SpnJ6cm6+Zo6Oio5GsnqOgoKKqpqa5pay1tqWqq6itr7auo52jqaqboJqakqSzmY6JjYeQoaCUjJScn5ORhI2Skp2amJWTh5eSlZmnm5+ejJKRjpB2fY6FfHx8h4mIcHNxfXx9XFNkbl5OWWZcRkSWW0c7Tm1YYltMYGJOVldWV1RZZ11RUkxjWltUS0dPVFNOR0lWU1xOO1BeSUJESEpBRT8/S1NPPjpOTUM8PD45OjU9KzMyPTYyNDk6KDQ1KS8sMSgpKywtKiY1Ki8mMCkzODoxJiozQmM7NipIZUhKKztIPzNCSFMsPpBrO0dIj5yqq6KpsaSppbO0sbS1srKhrK69zLquwLrHsbSttMLC0cXGvsCyvcDCvL+3u8SnrLess7i7wK+rsa2go6etqqiksKSrsqqvrLCvsK6rs7yntrGyqbKpq6alo626rKqxw7q2rbupqKitqqmzpamko66qqKKfnaSslaWemJ6ZrJ2iqKqirKajray4sbKhqaKgrK+xrJ2fp6ipmaSZmY+gp5iGhI6Ki56fjoqMlZuOjYWGj5SfnJWXlIaWk5OXpJucnIqSkI2Jfn2HhXx3foeFhnNycYh1a19ZYG5jUXNxXEs7hHxGP1d0WGFaTmNbTlZWVVdRXGJfU09OaFhXV0tHTE5SSEVJVlJdYzxQXUQ8RkhIQkc/PUpQTDo+T0o9OT89Mjo3OyoyNT4xMDQ4NSg1LyosLjMwOyksLCclMjM0JCwyLTg2MCkoMTxdSjAuSmdERjg8QjA1RUtYMUCVWj5MRZWYraihqrOcqqqwtq24ta6rpauqvcm7sL23wq+xrLPEw87Pw7++s7/Cw7rAs8jDq663rbK4v76yra2rpKeqsKmnqLGmtK+qsK6tsrG0rLS7pLizrKyup6ugo56wt6uqrbu3pbe2pKqnrKyrrqGpp6axsqSnpqKirJaqoZSboKaepKKrpa2in6ext62uo6aim6qrramcoqWkpJmgmpaPmJyTgoKPiIWcn4uKjouYjY+KgouXo5qRkJqMk5KRk6KZm5qKjouKfIWAgYN6dICEgX1zdoujh3hqXmBuZldlh2NOP2eTTEVieVdiWVJlVE1WVVZUT1xdYVVLTWlXVldJSkhJT0JHSVNRWW9BTVhAOkpHRkVHPj5FUUg4Q0tFODdDNzI6OjoqMzk/Li80NjMpNCsqLCsuIzQuLSsmKCs3OSomNis8LTIsJjA2V1ouMEpnQUE8PEIrOkpPXjREhj5IRkSXkrClo6qxmKuqrbastrGrpayqqbzAwLi4s7u1prKvxMnL0b/Buri/v8K5wbnAxK2xtbGzur+9srCuraurp7aqpq2vqrmwqLGyrrKtt6q3t6a0t6uspKmqnKOes7OoqKS0taC3rqCqqKuprKigq6ypubapqqmqo6mgrJySqqGdoKSjpqOqnpynta6opqqjo5ilp6eqnKOko6CamKCRjo+YjX+HjIeDnZ2GhIqKjY2PjIOFlKKZjYyZkJGRj5KflpiWi4qDf3SGgH5/eHSDf3p3foGInY9vcWdncXhcYHOIa09emVZIbXhVZFZRY09NVVRVUE9YW2JVSFBpVVZTR1BZVUk+SUhPUVB4TE1WPTxLRD9AQTxAQ1VDOUFLPTU7RTEzOzk3KjQ6PSstMzMxKjgqKisqLCkpKC8qJiklMzssJDIpMjAyMSUvMlFiMDI/Zj1OWD5DLD5MVF8vSmk1T0Q7lo6woaarrpqrpaywtLWvq6awqqm6vrvAsK65rqG3r8nHyNDBvr27vMK9usPAvr+usrKxtby6wbGxsquzqKS0qKWts7K5sKOttrGwsruruq+prbasqp6qrJ+joLatqKGfr7KitKqeqKeqo6qhoqytqL2vrK6toqiooKyZkLCimKKgp6eep5uZqrGpo6CtoqGUo6Ojp5iaqaWYmJiejoqHlIh9jYaEg6OWhIGBi4aOjJCDg5OgloiQnJCTkI2RnJSXjoqGhXh0gX98dXh5gHp0c3lof4akdWleZGuBdGeIjH1TWHBeS3hzU2VTUV5NTVJZZk5MVllkWEZTaVJRP0NOUWFROklITFNJcVFMUzs8ST87PD07QEBXPDw/SDczQ0IxNTo5My01OjopLTMxLi01KSgrLSw0MiMyKScsJS47LiYxLjAtMTQlLDBMZzo0OF89YWQ/RjFDUFtbK0hNOVVBNJGPsqCkp6ykp6Osp7WzsaulsaiquL7AvK+nuaqmr7DJx8jRw7y/vrm+v7zJu8G4sK+0sbq7t8Cys7usuKyitKenrLK2ubOnqLy1rra+sL2mrKy1q62cqa+koKWtq6ecnqqypLOom6unqaOpnaSpqKm9rLSvrp2ppKCunJuzo5WknKWln6Sbm6mrpp+bqqKbk5yhpZ6Yl6mpkpialJCKgo+Ffo6Cf4edj4V+fYuGkI2PhH+TmpOFkqGMlJGLkZqRlYaJfn9ye3p+fGh4fHp1cHB8Z4R4hIhkYWdicoV6bWd4XV1WQVd6bVRhUFJYS0xOcXVdSFpbZ1lFVWZQRD5KTkRDQTlIR0tTP2phSlE4PUg8PDw+Ojw/VDY6P0M0NUg+Mjs1OTAyNzw1KC41Ly0xMSYvPktIMCUaOTAlLCwwOS8sLCs2JzE3Iy0wR2pJMTRYPWZjQUo3R1NgVSo9OURXPiqPlLGZn6CppqWgqqW4s7OmqbGnrbjBvbWvoritqKiwwsnJzMG2vcC1t7+5yLXDtbOxtbG9t7m9ta25tr+tobOnq6uwtbi1q5+9vKmzwbS8oK+ztaqrn62wo5ylqKqjnpuksKawoJ+rqaihqZykqKGtu6iusK6gq6Okrp6fraaXn5uho5ygnJqkqqObm6WllpeVn6KWm5emrIyekZGRi4KKgICOgHuZlIyIe36LhY6Ni4qDkpiRhpOiiZKSh5CZj5OAiHx5bH52eXhje3txcHByd2iAc2qDZ2VnYG1zjWxhaW9gb0BbeGtVXk9RUUpKTVRZV01dXmxXRFhgT15QSE1ERjs3SEVLTzxyaEtLOUFFOzs9PTs7PUo0OUI8MztHPDQ/MTgtNzg7MigwOS8sNC8uPS0qSz4qHTQ5JicuMzQuMCsvNCYsOiQ0MUJoWTEzUz1lX0RMNktWZE8qOzJOWD0jk5msmaCYp6Sjn6ekuLCvpK+wqqu4wrqzrZ+4r6uotLrIy8i/t8K+sLS9t8S2w7GuubGzwLS6vbepubi9q6S0qKmqsK65saqbu72ksMG1tqGutrWmp6exs6CepKanoaWZn6yoqZ6gqq+noKaYo6mgsbmfo7GuoKuhrKScpqepmpqbn6OVnZ2bnqmml5ygqJKZlJiek5mWoaqRmoiOj4Z9h3+Cjn18oIyMiHiCi4SJi4uFh5Kaj4iVnoiRlYKMl4yRfIV7c3B9cXR0YHl4aW5wcG5ofXFje21pZWNfZYV+X1pza3JMTH5oWFpOUExKSFBSUElOXF9uU0RXWlJoT0hLRUY1NkhCTEk1WmVKQDZFQjk6Pj0+OjpDNTk+OjNARjwyQDIzLzo7ODMmMjwwLDg1QiopLUMqLDQ7Tk5AOzczLS4rLTcqKjwlNTM9ZmQyNE0/ZV1GTz1SWmdIKj4wWFY1KJedppmdlqygoKGkorirsqW0tKqpucS1s62ft62urbC1xsjBt7/CubG0vLa/u76vq72vtL+wvMK4qbu6t6eotamoq7Cts7Cnmr63pa28t7KfsLewqKWnr7GboaSgpKShl5uvpqGeo6ivoaChk6Skorewoaaxqp6so6+YnKqlqZ6Ymp6lk5udm56nq5qdnaWWlpiUnY6Tl6KoopCIi4+FeoR+hIt6jpeKjYZ4gYeDiIuNhY2TmI2OlpiKj5d+hpeLj3mBenByd29vdF95d2RsbGtpaIJtZXJra2VoWmJzf15abHZpWkh9XVtYT09KSEhSVUYyOl9ebFBDV1ZZZUxISkVFMDdGP0tCNklKSDs2Rjk0OT49PDk4QDg7ODo3QEk+ODw0LTM8PDc1KDU+MSw7QTEoKzY8IzhSPSoxMTM+RDUsLSc0Mis7KzEzOWNsODRHQmdbSFRDVF1oRS47MV9ULDKWo6GXlZ2pnqaho6G4qq+hu7mmrL3Es6+uorWvra2vtMTEvbO/urexs7m4uri6rq2/s7S4r7/BuKy9urSmorOrqKqzq66yo5zBtqWpt7ernrK7qaalqK+rmaKnnKWmlJihsqWZnqSqqZyhoJSln6S5qKSnraaepaGok5+poqGhmZudoJKbnZegoqucm5mhlZOVlpuOk5Ojp6SPiIqOhnmEfIWFfJyNiYqGeICDh4eHkYWVk5KMkJWTjY6Ue4KXjop3fntsdXJtbHNieXVoZ2lnZW6EZ2doZGZoal9mYmlmWmV6Y2BSc1RbW1NMSUdJT1NAIStqXmpMQ1ZVXmBLSEdFQy46QjxGPDZLUEQ4OkQzNTc9PTg5NT86OzQ+OEBMPT45Myk4Pjw6OSo2QDMuRTQoKyw+MC1OPy4rLTctMTE5NSwmLjUtODA1NzZgdEIzQ0RoW0tXR1VgaEIzNzhiTScynqSjko6lppyenp6kta2oqrq3qKzDwLevrKG1rqevr7fBwL2ywbexrrK2tbi3tayqvLOvsrG9wLeuvLyxpZ+2rKamtKmrrqGgw6ypp7G0rKy0up2oqquxpZieqp6opZGZpq2imZ2kqqGbop2XoJ2ntqawqq6goZ2doZWgpp+ioJmbmpySmp6Vpp6topiXnpWUjpWYjI+YmqegkIeKioh4hXeCgoKch4uCiXt+hIiGhJCElpWPj5CRkJGNk3uDlY2Gcn59Z3lwa2psZ3Vza2JnZGN0f2FkZWZlaWpjaG9ZXlhdbGRhTWhXW2BWSUdIS0xSWD45YGxpR0JVU11bSUhGRUEuPD85QTg5UkZANzpCMDM3PTc2OTI6PDk3OjlETT1CPDAqPEA7QTwtNUIzNz0rKywwQSpKSy4vKiszNzIyKDU3JCs3LjcyNzg1XHlOMj5IaVpMWkpWYmZBOjNAZUclNZukoJGMrqCamKCXpbSyo7K+t6Gxxbu5sLGitqurr6m5vr28rcCyr66utq+zuLKnq7mxrq60tru2sLi9raaetaugobGlq6+fpcShs6Wvsq+3rbWdra+srqKZnaeqpZ+Vm6imoJmko6mcmp+clZydrbCmuqitoqGamp6Zn6SapZ2WnpiblJqhkqiWramblJ2ck4yVmY6UlJinp42NiomOe4J0goGKmIWHfImIhISKjIiShZOck5KPkJGWjpB/gI2Ng2+Bf2Z5bmhramdxcmtcaGNicn9gZGdqbWxnamdkbFxsbXZxYVRiaGNlWklGTE1PWFFQVWFlgVRAVlNZVUZHRkVALzw9Nz82PEZOYTg6PzI0OUAzNzgyOD83PTg+RkpARDkyLT1BPUE9MDVAOUAxLSsuMzw7SzYvLissLTI0OzYjMyopNi41NTQ2NVp8XTE6S2pbTVtLWGRkQEExSWRDJzSTopuPj7Gdm5ShmqmysJ+5wLagtMG7vbmxpbavqa6lt7m4ua27r62qq7eqtLmtpbK1sa6psbe2sbO1uqipn7apnp+qoqqtnKrCma+lr7G2taysnrGtr6qim52krKiclZynpJ2ZqaOllZqgnZGco6uqqbufpqSgmJqanqKPa6KVmJxxg5acpIB2kauonpaWoZGJl5mAl4qfj3iFk42DbWl+d4NwbIaKhn2EioZvXWRgZ4SXhmuLkJSSdXeLhH+DkH9miIBodmlmWF1pdG5OUGpkZnGCZl5kZm5saV5dXomQhYhoT0tEOEVUZ15KSFBQVVVLSFNgb3RlRVtRVVBGR0ZDPjE7PTY9NjwzZlw1Ojw3NTtENDg2MDpCNz86PkZMQ0IzNDM9QEBAPTI4QEU9MSwsMDg+RzcwMS4qLiovNjY4LCMxJzIxNDoyNzZYgWwxNU9rW05cS1tmYj5HMU9iPCsvjaSZh5Wxm52ToJyqraujvcWvqbfCuL29rae2sKarpLi0s7Sxua2qp6y0prC1oqe4trWop6y2s660rbOiqZ+0q56ipJynqJquvZWop7C0uK2tpKiuqqumop+coainnJehpqacm6ennZKeoJmQnqiqo7Wwo6KjnJaYmJikiaGPkpqHoYiUnqF/pX+nrJ6Uk52TiINyeI2Og4egdYiNaZeIZn1zeKBviIeDfox8f6Ggn5l/e4eedIiOdpuKbIiCg21pZWR7bXJiVIZtY21pmHFYanBuhldeaVtraluIcG15codph4RaXkZOPkZeTUVSVlZRUFJXVGdeTFlLUlJQRUdHPjw0OT05PDc7MDw8Nzk5OjY9RjU4NjA8Qjs8OT1GUUc9LjU8O0A9QD41OUdBODIqLzE8STkvMDEuKi8oLTQ1ODMlJjIxMTU+MTw4WIN0MTVSa1tOXExcZ189SzFVYDcvKIyml4SdrJ2ZmZ2fq6qoqr/Dr7K5vLfAv6qkt7GqrKazta6vs7arqaWxraW1s5ustba0paeos7Gtsqivn6qhs6mgpKSaoqSdsLeVpaantr2mrKepqqynpqKgmaCopJmZpqOlmZylqZaTopyUk6OmpqC2pKOgo5iVk5iTnIiukJiUiamLmKSchrGApK2elJqflXmC1Kh/h5TAm8Z4d7Glt5dkgMCcv3mEhHmPg3yQkJHKcZa8nMV7cranupB7gWyWsauweWhsWLGub2VpvJK8bmh6bXGP2H5TamO2sn6AcZR1mqGqkFdPWGFPVk5GVFtYUVBTi1xXW1BAXEVRTkRGSTw8NTc9Ozo5Oi49Ozg3ODs5PkY2Ojc0PkA+Njk/RVJJOi41PjtCPD9BODpKPjUyKjIyQkUvLjMyLisvKS0vMTg2LSAvNDE2QTE9OleDdzExVGtcT1tNXmdcPkwxWlw0MSGOppOBp6qfl52dpa2yqbHCvbK1v7W4v8KrprStramor7Sqr7azqKemtqWnuK+csrK1qqWkp7KvrrGmqp6npLKkoqKfl5ygn7GulZ+joLS6oqmooa2upaKdm5qiqqCYm6ihn5idqKiRnKealJ6ip6OgsKOen6OWlpKYkpmFsGtqio2qfmeFloetZXGenZWap5ZxrqGkfne6fGuhj3axX2q0W6WAZZyRYGaBemZ/aXhqqWW+cmemjHaxanyxeHWSlGNtbaduXISgRWlnh5ZFdZxgfWZ7o6eCWV+Lq2mAknh6aqg4Sq9bV1RtY1tMT1hfXFdWO06IT1dWL0lUU0pDRUY9PzQ2Pzs4OjkwPTg5OTk6PTxEODs6Nj1BQDY8QEhRRzkwNzxBQz5ARDhARz0xMy0zM0UzLi41My8rLyguMC46Ni8nJDIwM0IvPTtVgnYyLVZqXE9ZTF9nWTpNNV5ZMzEbkqKVgqynpZ+jpKqxt620vb6wt8WyuLrCp6iwrK+pqbGvpLG6sKSkr7OjqbmpnrOysKOloKqtsKyvpqifo6KxnaSdmJWYm52vqJecop+0s6Grm6GtraCempego6qdmZ6koZyZoaekkJ2jm5ihn6yfpaagmp+hlZWRlpGahrWbtXiFqZm1mXeHs5u3f5OWl6uVfmuBpnqBhYaRlJJ3q2dqsVuse46HlHSIcI6GgX+IkJd4g4KLl4yDoI+FsHZ3n3Framx8i0+lWEhjY5l+Y2imYHlxdVKThl5QqW1jcX2GgGGdL1KibltUa2dgTEtcY1hcWkI+sHhXWEEjTWhGQ0RBQEExOT44OTo4NDs6OTw5OkE6RTo6OzY6Q0I4PT9LTkg6NTpBRkJBQUQ8RkQ7MDIwMjtGLDAuODQwLC4oLzIsPjgzMR8vMi1EMTw8U31uMytYalxPWE1fZlc3SjhhVTUwHJeglIizpqairqmos6yqu7bCsLzCrbi3waqsra+up66zqqKvvKqhp7Wto6u1pKWys6ijoZ2nqrKosKimnqCgsJagmpaWl5qgr6ObmqSota6hqY+pp6manZaYoKWpm5+do5+coKKlo5WbnpiZnaKqm6WanJqioJaTkZOTnYTVk5m5cbDCf8aGfNaUnLt8m5amkI2cjKR6jYaigaWCeqx5j51Wr3uJfp9quVq5d4aDfaaCk3yYeqp5jp2Qe7FujoR0kLuFbpVQr6fFilGgemNgqmJzcoZsl4dfU7W0yIWAiXxjpDNCnXVdUGpoZFBAWGZaZGFKSE1rSlpTT1lmWkNDP0U/MDw8NTk7NzQ8Ozg9OjxDOkY6Oz42OkBDOzZAT0xIPDo8REhDQkNEPEVGODEyMTFEQi4vMDQ4MystKS4zMjM5NzEjJTUqPjM9PVF3ajYqWWlbS1xQX2ZUN0c6YVA3MiWcopOZsaiopbOqpbSnpLy3wbG6wLK2tLyztqeysaOxs6agr7Wom6i6rqKvsaCytLGhpJ6eqKmwqbSppZyenqyXmZmXl5aYoqyem5eprbCoo5+OrKKnlp2YnKGmopiioaOhmqKip5ueoJ6VmZqloJynlZubn6CYkJKVkJ2Ism5otXGriHCOpnK0dHO2e5uYpI2PnI2ifo+fpH6wdYOR0tF1W658hX+kb5uqpmuGhX2tfZeZj3uxc5Odj3izZZZ0hZ5unmaUUsmLWsJcn3liX61fdnOGYpeIXlnKnW+/gHVNS7VTVcZkVFFqY2ZYQU9qX2xpUFVGSTg9V1JbVllJQz9KPDI/OzU9PDU2Pjs3Pjw9QztHOTtANzs+RDsuQ1JKRz4/PElKRkNFRT5JSToxNzQ2QD4vLjI0MjUyLSkuMjYsNzQyJh82MDs1Oj1Qcmg5J1dpXEJOVF9lUDVHPWFNNjIuop2Rpa+spKq7rKa1pae2u7yyu7+4t7W7u7SmtbSisrKjoKyvpJimuq6ksbCctLiqoKWdoaqlsqisqqWanZupn5aVmJmSk6OqoZeTp6uwpaKWkqyfpZKUoZykp6CVm6enopqjn62aoJ6ekJWboZ2cpZWdlZminpWZlpKbhax7d6h2o4+Lh6lvrYqDp4SamaKKkpmLon6Sl4euhX+Cs1xys1KufYKCpH9x1313hH6PnYaZmnevhoqRnIh3tGGaZZqCgZVskluwV0uadZh5ZmCtXnZ3h2eYiGpdr3eVn494bDV5yK6yX0JUb11nYEVQbGBxbVZVTS5lYmhTWVA7QkRATDo1PzkxPjwxNj85OEA9OkM6Rzs8Pzo+PkU5LUVVSkVAQzpNS0pCSEc+R0s5Nzw0Njo+LzA0MzMzLjIuLjE4Ki4zMiUhMDM3Njc9UGtlPiZWZ1xAPVZfY042R0NgSTo3N6CdlKC4sJizwayosqeqsrq4tLm+ubiztr22pri0oLWtoKCpq5+Vp7asqLCxq620pJupn6CoorWnpqqkmZ6VpaKUlJyakpajppuUkKetr6WhlZipn6KPkaKaqaahlZqmqZ6dpJ6snaCdoI2UnpueoZiZnJaXoaCUmJGmnYapfX2leaGPkIOqcK2MgaaGlqCiipeXiKOBkIeUqnt/i515b7FaqIOCiKB5dNh/dod0p4GOm42SpHyWkJ+Ee7JenGSgfYKUbZNcq1xbk3+Rf2hnqmNye4BqmIZxXataiaCPa25lT0pDoVxaTXRdYmZNWmFfcnRfSlU1SpqSWEhFPUhGQU0zNUE4Ljs+MDVBNzhAPDY9PEY/Ojw2Pz1CNy5IVkpFQEg2S0lOQElLQEVOOjpANC47PjAwMjE1NCsqMDUvNywmMjEoJCQ2NjcxPFBlZUEmVWZbPzFVX2JMN0ZJX0MxPTeinJqav6yYtMKuq62oprSwuLG2v7m6s7G4vaq7taCxpZ+mp6eek6qxqa+qta2qr6GYoaCmpKS6oqOsoZebkaOglZWfm5WZoKCQjoypsK+mnZeaqKafjZKkmKirqJWYqaifn6CjraOgnaGNlKCYn6CSnJeclZ2hlZaPq5uPrm5ytHSpjHeKpnO0eXS0gZOlo5KcjImkh451uG+Me4uia2u2WqGGZZeXaaCip22UcrR0k5h/smqGkoita3WzYZ1mom6GkmuXXK1gTqF8h5FSc6NseX9+bpiGcFyvVjycd2ZUb24uW6dPYlJrZWJsWmJcYHB8Y1NZUT4+bW8yQkJAP006ITdANi47QDM3QzU4Pz8zOzxDREJKRk1JRjYySlRLRUJKNklKUD9IT0NGUD08RTUwOzswMTAvNzUsKywzMjYvIzAwLCwdMjg5LzlOYGVEJ1VkWT4vVV9hTDVGTV45MUE4pZqbnbuinLLArq2rq6e3qbivtcG1vbGvurmswbaqq6Gdp6SinZKrqqe1o7Korqqhl5yooKWruZ2jrZyWmZClo5aOnqGcmZ6fkZOVq7avp5mUm6ypl4yUppqlraOSl6uypKCeqKuwmaGij5ihl6CblpuXoZOcqZ2UkKqZh9OTmrt0scSAw4Z91ZabuHmJkpmMl4mMp4d5orZ1fXd2woKasmCDunnAfHW4YrWBjIepfZaBrKlxe391vIinoGmdYaaOr6J+jHSHq32+bnO8dLKDdXiAim2aiHFtjaR0vV13fVthebxqWlZbaXleaWFkZmJteW9ZW1lDQUByP0NGKzVIIic7PzEwPD83OkI5OT1DNDxATlpeYGBfX19aUFBSS0VGSjRITFJASk5FRk9CPEU4ND05MDIwLjg3LSouLzE4MCItMSwzHiw8OjA4TFhhRidUY1g8L1ReYEs1O0xbLTZAOaaZnqK8opexwrCtqaqssae4r7fFsbuyrrywrsGyrKWjn6ShnJuQqqSqsqS1p62kn5aaqpmmrLmdo66ZlaGQpqCTjZyjnpiempCWk6+5sKuVl6Onp5SQlqWdpK2ekaCoq6Cbn6mksp6ipI2moZShmpuXlqSYj7CgkpWpn4WQmbWAkZGNuJV4gpObtXdubG9zbnmPhI6Jc57Bu7yZeoGyqHCAdJG5g3yGhouHjXuKho2XfKS7ub2cdXmzo3R2l3V0sHWYnmaGaY22dHJxd7aMXn95fYhng3lteWKLrHB0hX9YW6dqRGRZVGZfY11jUWdncW11Qk1QTUQ7Wkw/SjM8MCA4PjsuMz1BOTk/PTs8QzZCVFlaWltbWlteYGJgXVNHR0g0RElUQktOR0VPRj9HPDc+NzA3MC85Oi4sLy0qOC8lJjIoNCQoPjcvN0tUX0cnU2FXOCpPXV09KztWVic9OjymnaChv6aWs8K0q6qorKupu66xxq+1tK64p7W5ramjo6efoJ2Yk6ykraqmtaion5uWoKOerKW+p6GqmJWckaKbko+hqKGTnpeSmJSytbasmJ2kpKKLkpKmnKWrnJappaacmaCop6ajqKCRrJ6Xo56Xlpidno+wqZOcp6KOan5pnKd4iXN+m451emWHe76/wLpukoJxlYVfcmpaXZqJYWSHjpVrYH+VY22cdmKUa4CalZRlXl9jcZuJaHKMfIaUZmp+cXR5fn1iW3h0gWhQXG6DfHuKalhseYFySUpvhXBOc01FV1xmYUxbV2ZjXk9abXZqclJPREVNPEhJPE0/MiwyQT84LzU/Qzw5O0A7PUM+UlZWV1laW1tcXWBhYWFgXFVHNURGVUVKT0hGUElJSDs4PTUxOi4xOzouLy03Nj01JiIvKjIsJTs4LTdJUl9JJ1NfVjQpUF5MKDM+W08nPzI+qJ+oocGkmrS6tqOspq6nqLWyrMissLOstqS+srOmoKSqnaObmZmsp66kpbWqpJuYlaKbpq2pv6ipppaUm5agmpOYpamnkZ6Qj5icsLK+rJunnaeiiZORqpuopJubrKCkmpqip6yin6mhma+alaaflpSdn52XsaWZoqiZnJGenKOkmaejmp2ampqQloJobn1xdpGXlJGDibSpjYWYlY6KjJiWh5OVioOTk5CIjZGUmZOZl5qgoZqblJ+bjYJ6pIVsaXuQfYB1iYuCcoJ4eXZ2ioB7iWpzgXSDdWR3fXZrcHptYGNbb2dMWFllal9XWXB6b25mU09GUjlPWk5STygrO0pCNjM1PUBBOTpDPjxFTlNTVFZXWFpaXF1gYmJhX15eW1RLQ1NHS05ER1BMT0k8Ojs0ODksMjs4MjApNklSTzgiKSsvMiM0Oyo3Rk9bSidSXlQxMFReOis9OF1LLDwtQLKgs6G/oqSxsbegqaazp6WwtarJq62yprWmwKi0oZ6lppyllZWgq6eso6O3rKCZlpagl62qpsGfrKSWkpyXnpiUlKKenqOokpCZqKeyw6+aq52qno+Xlqmeq5ydoK2YoZucoqWvpqGkp56smJemnZmaoZ6enLChnaKnlZiTmZSgopajn5ihjpaUi4qNj5etj3uVm4KRgImpqIWAmJaKhI6fiHuDkIaFmpGHhomVjpuXjpCYnqOWmZKQnI1+jWWhs66EiYR3e5CKfXd5em9neZCBgIlrdYF5iHJpc395dYOHgmt0Y3hmX2hkY2Rmalhre3Bqa1xTTFBEX1VGQD8+LDRARjs0NTs+QTs8Pz4+SE5OT1BTVFZWWFpcX2FjYV9dXV1eXVhWSktMQklPTVJKOzw6Nzg2LzM5NjQuKCYkLTEuLikrKjclKzwoNkNNTEQvVFxRMDVNWzE3RTRcRzU8LEC0oLmvvqyrrbGyoKqmsq2irLOwxrCrraSzr7yktJygp6KhnZmXqKappqSls7WelZSemZmvpq6+oKyjkZGempmUkpahnJepnYWdqayitMezn6mkqpaWmJqnnqmcoKSrlJ6fnqCqrqimo6uhrJufoKCYpJ6cn5ywpJmfqJOYl52SpZqYqZ+bl2aDknxlfo+aj2N4jGxoanqQo6trZJmXfmeFimVlaWh6jaGOa2iMl5Gid2tqi5iin5hzbG56hIyGeVhlXYWCXmyLioJ2W2hzd3eRgIeCbniCeH9zbXmEc3eIiI6De2mFWF1qc2Rdc4hpa3xxbWNdUU5XSWRYQEozPUY3P0ZENzE8PT9BQzs7REdISElMTk9SUlRXW15gYWFgXV1dXV5fXVpVT0RIT0tTTj0+PT02NTM1NTU0KiYmJSwqJS4rKyc2KiQ7Jy9BSVtJLjZaTzYpRVkvRE8xWUI7Py49pZ+6vLmvq7Owq6Wora6wp66tsL2xqqilrbCwn62YoKSeopqap6ycrKOmqKmzrp6Vo5Cir6a2uaWuo4+OmqGZk5KboJiZppZ7payiqLPDt6Wip6+fnpWeo5+knKSqqJKeoZ6gqq+qqqOqn6ebpp+noKyWoZylsaSXnKuWoZ6bk6WXnquZnn6+g4hytHKFnoWtaHe5xLhxkqGje6aYmHOqgnzLwMC7cYqjh4KefJaYiJ7AvYKWnZ2NnMHAe4F6kYyawr99a6Wyb4yBb8p6f5t3kYOOgHZ5gX95cXuAhnB4hYyTeWx2kWJlXnhkX2WBYl50aG1kYlhMVklRWkhPRDJJRT9EQj4vPD8+QEE6OERDQkNFSElLTU5QU1ZZXl9fYV9eXl5eX19fXVxTTVBHVU5BQD89NjQ2ODI2NiomJSMpKiYuKyopMTAfOSojPkhbTCojQ1AvI0ZbM1BZL1VBQjsvOJajuMO0sK+/qamUo6+psK+tprK1r6qmp6Wxq5+rmJuioJybqqeinauipamlpLSknaOTpq6suLSnr6KSkZmdpZKRoKGXm6Cdh6aqpKutv7+xoamuqZeSn56imaKkqqOToKGenayuqKymo6KloKSlnK2okaSbqa2qnJ6qna2ilpellqGjmJ1/zpR5eqWBepaWm1+tj12OqICgoXynlZp0q4OAr15kjKl6qIeFn3SXkoizY4KrhqCNjbNqhK50fJaHuGGCrVmjzW6QdXvbe3+ZcX6IknV/ZXuIdnZsfYdufYWQkX5sgY1fcGpvZmBfeGRccWhqY2ZgUlRTV15KT0M1QUhFRDg+NjtAP0E7PThAPj8/QkRERklKTE5QUk9TXF5fX15dXV9gYF9fXVpXT1VKPT8+PDU1NzgxNjQoJyQhJywmJi8oJiszHTYwJDc7U0wrLC1KMCc7XDpMLSFQQEY0LjGtwsDAtbSwt5iekaOqqa20q6ayra2spKymsKqgp5uappicoq+foZ+op6OmoZ+wrJuelqaurbCrqKyglJKbn6WTj56ll52oo56upKuwqL/Gs6ipsa6Wkp6copehqqqflaGenZytrqeqqJumpaOhqpKss5aloqqqnqSopqGxopOap5qgmpSUkZegcIWMmHWEqIdxsHydcqx9oJ+BpY+ed6uCfa1/nHKtfquHhp92mJJ7fJd+qoihjJGLnH6re4iSjqCAeq1WnMR6j2+SwX2BlW11cIxtZndlhm9hd25yboiKkY+DbZCOZG5zdW9gZm1kX29oam5mY1dTXGBaUlJDOUlJQEM8PjxARkRDRUE9PDw8PkBAQUJFRkdFQENJU1dZWlxdXl5cXl9hX15eXVtaUkM+OzkyNDc4NDUyJiMfHCAxJyAxJx8nNB41LSY3PVdKLTwoPTEpM1ZARiEcRztDMS0rr9TGx7K0n52jjqOioq2utq+psaepq6iuq6umoqOdmqOWn6arn6KmoKioop+esKyYm5eoqK+sqKepnpeVmqSikpShrZudp6OurKOstam5zbKtpq6slpWcnaKZn66snZahmZ6eqbCoqaiaqqijoqubr7GiqKyvppqnrKqqsqOTl6OlmpSRhKRqpHWJeql1erJxgqWJmIxwh5+ah6RfYFKrhH+ugpt1roKnhoafepmXhXtmgKOJpJmGgaN9qX+BlIauXnyoVZ2ikoF6o5+Ae8OvxYxzr7SzuXFiqa/CdWiMjJeOgWyZkW5teHd3bmtmZGRxcGZ7aWNdVl9pWFhUTExRTENDQUI7Q0FAQkk8PTo5Ojw9Pj4/QT04NjtETFBSVFZYW15eXVxeYGFgX15dXF1bU0lCNjc5OTY2NCwmJCIgKCciKy0iJC4hMy0mQERXSCxHKzU2KjFQS0wjIEE5RDQsJ8LJ1dbAoZmrqKGvop+wtbCvqq2jqKeqq6uppKagm6WfnaanpqSdrJqiq6Gkn6+inpuTqqS2sK6gqZudl5WnpJGboaifoKacsKajqLGstsiytamsqpWRnJ2imaCltJ2aoZScn6aqq6KtmaunoaGqorOtoqqzsqKcq6mvr7eklJajp5ibknyqbJ6Eh3WreXywboKki4iflpWelYHSt7S4yYCBsl5flKmDpIeHoHqYlZl4qslzmaOUqKmQk5qMfpqJmsbGd2WhgqVzgZ+Ogn2vXm+1Y7F1S6OGbadHgpNkjo+ckntwlpF9b3p0fHptW2VqcnFmgWleYVhjbVxeWUlMTEtFREJCPUE8Qj9KOzc5Nzk5Ojs7OzMuNjxBRklMTU9RU1daW1tbXV5fXl9fXlxcXFxcWE1CNzU3ODUvKSglJiUkJiksNUZOUFBNRkxKVkYqTDAvPi00TlRRHRw7PEYyLCSopMHGua2ps66spaKdsrmsqqGmm6imq6yppqCmpZiqo5+urJ2moayan6mlnae1oKOYk6irtrKsm6acoJaRpq2RmZyno6Cqpq6ho6epsLTCsbKqraiUiZidpZuipK6ll6GVmZylpaqarpyspqWerKO3rKCyubCenK+ns7S0ppWYqKSboI6CnU54moF/n3qEo3yCpISGpp6cnpSEuHt8ebmCf8zGw7Z3m6GQi59+mpaXiXafl4qkmKSofrCFnISehKx9mZRhpWyjcI+FkIF9l4RyrGCkcnGAmmC8fVJVdY6Ro5Z7fJKPiHN6coR9cFxsbndyaoFuWmNfaG5iZF1MTFFTQUhHRkk5OUs+QjEwODg1Njg3Ny0qNT09P0JER0lMTlBUV1lZWltcX19eXV9fXFpaWllVU09IQDc3Mi4sKi4rKicmP1FUVldXV1lYWFdVT1RGPEUyOlBbVBwbNj9HLC0gjIeZqaykq7mrr6CboayztKafoZWmr66uqaadpqaao6ehsq6iqaeyoJmopJSitaOklpeiqrW5pJyjnaOTkKKxmZ6cpqWhoq+tnaSoorWxw7Gtqq2qkYeRnKedo6ScpZeemJmZpaOoma2hrKSlmK+lu6yht7eunp61srmytKiZnrCipJ6Gj9G1w7d5h46FkZOPgKZ4lKJ3i6CShaWCi3GrhoW0bnJpmaOclYmffJeZhoeQc66CpZuijaaLk5yIlJCabXCyXKVzk3qcbJl/e5l+bqlhonFxf59ic7K4aHePk6SYfYqLkYp3fHiNgWxod2l4c25/dFxkZG1tZWhgSlpXWDxIRj9UM0BGPjwqKDYzLjAxMykmNDo7PD0+QENFSUtOUFJUVldXWV1fX15eYGBdWlpaWFVSUlFGOjIyMzAvKysoQFFSVFVUU1RWV1dYWFdVVVZUUU9RW1UlITJBSCMpJZJyjYquv7+8u7Wel6ikrbahopmVo6mnrqmrmaWhn6WhoLWnoqmnsKOUq6OOpK2kn5Camqq0tKSdppypkpSXrqCgnqaknKectZqgqqO1q8KvqaupooyEj5yioKajlZmanJibmKajppiqpqyhpJutpr2slb6wrZ+jsLO6rLWonKmypamYeqeRfXywd4qApKWInG2yb6CHrXuhj4OolZqArImFroWglKihopeFn4CZlYB7kn6rgJ2aloureJ2gj4iTkn95r12jgXymp2SegHyXdGuuXaVrcYWZXWBbjKBtlJClmIGTjJWKeXmBln5qbH1ifXRtf3lfZmVwbmdnaEJZX1s9SlMyVDhCQkM3JCQzKycnMywgLzY2NzQzNjpAQ0ZJS01OUVNTU1ZaXV9hYGFhYV5dW1pXU1BPTkk3MDUyLiosQVRWVlZUVFVVVVVUVFVUU1NWV1dYVlZVUUhGSUojKCi8kpqEqcbDtsG0n5qtoK64paOOm6SjoK+uqZ+jnp2tmJ65oKKroK+qmq2gkKqppZaJmpCusKymoKibrZiZj62ioZ2loZmknK2Yn6iltqi/rqSpo5+MgI6bm5+mnpKUmZqUmZmko6OZp6qroqOeqai+pJfDrKujoqyzuqyvqKK0sKqrmXavfpCKnIWHfLqtiZhksIxlla19oY+Dp5abga2KhLCFppmkoaKQhKBbbGqBs2B/rXt7goCybGdumZeLiLFbfbRbpINryKJln4F7vFl2tVqyfVKvgHqsWIChbZeOp5qJlo+UlXp4jZt8Y3N8YYN4c398YGlmcG1mZWVPVWNcQVRePUgoPjk9NCEhLSQfMi4gKjEvMDQ1Nzk6PEFDRkhKTE5QUFJUV1peYGBgYWJeX1xbWFVQTkpHQzU1My4vQFVZWFdYV1hYV1dYV1ZXV1dXWFdXWFlaWltcWFdXR0I70p+zsbe9u7TBs6Ocraaltqmgi5mgn52zsaieop+dtJigs6iqq56wrZ6rmpSuqKKOiJuOr6ypp6Ooma+Tmo+pmqGepZ6Zo6KlmZ+jqbKovK+lqJ6djnyLmpahoJmQkZqbkZiWqJ6gmKespqSkoqSpu56gxqelqaKrtLatr6igva+urpeBqZKjro6bgIakl5iQgYC4w7qDjp2ThKeYnYKsioKviaabmqWqkX7VvcKqYqO/vXx+o4KD17q3tYWTkoKevb6EaqOBb6uEbp1/erKxx4Nrq7C9rHh3or67dICVjaWbjpmPlZt4gJCZeWJ8emOMZ3iBe2BrZWtqYlBiW1NpXEBUYEJMKTw6NS8fHyQeJTIgHSQoMDQ5NjY3ODs+QURGR0pLTU5OUVRXXWFcX19hXmBbXFlUUU1IQz48QT81PVNZWVhZWVpZWlpZWFdXWFlaWllZWFlbW11dXFpWWFRXWruVtLSxv7qyvbOina6mpbOmnYyYpb+ptrCnob+mprGbnrGcuaifra6lp5STr6yXjIOaka6mo6yipZyqoJiLo5OmnqebmqCoopmeoKysqbitp6Oal5N7h5mSppuTj5GYmI+Xk6iZn5eoqJ+ppqGiq7ueqcWjoK+jq7O1q7Gror2psLCbdHaqpLaFZYmfb2esj4qPbW93pJCaoIF1sJqWcJCNcpano5uYrqRybW1sZYp4bm2CmXGAemlwaWaJlpWYcWhphYZncIZkXYpjaW9ZXWd+eKZgYnKPkm9mZICNk46hl5aXj5ScfIaOlHRlhndnjGp4fnhkbGNmbGJLZFhKa1k6UGREUCdKOisjHCAaIiwpGBsYLTIuNTo0NTc6PD9BQkRFSEtMTU9RU1ZcV1pcYF9hXV1bVFBMSEQ9OkFCN01YWVpZWVpZWFhZWFdXVldZXV5eXVxcXF1eXV5dW1tVV16ola20qru6srOqqaKunqSzqpiSvbHDyL60qZ6/q6yjoKarn7qjpK2sraWNlq2qkIyFlZetn6Wqop+kpKCRi6WSp5mpmZajqqCWnKWmp6+5qquam5OSe4SXjqaXjpGQmJSNl5Smk56Xp6KasKadoqy5oLDCqKSzpqyxsquvram6pbC5l4uhqaW2nImWoZeGqZqQlJ2TqrOZm6OsobOXo6GeoaKcoKShlaumjJKTjIeSnJyUkJmTmJCOlYR/pJqXlY6Lk5KKj4aEfmeLgHSDdnSHjHGnbXyVkpSTgYGPj4+OnJOglJaUn4GGk4twZ452bol3dXx5aWtkZG9jVWBZQGlaR2JgTlgrRT0rJiE2NDAvHxwhJTIoKjc5OTQ2OTs+P0FCREZKS0tNUFBRV1VWWV5fYWNdXlRRSkVDPjk9QEFTWFtcWVdYWFhYWFlYWFpaW1xeX19gXl5eX19gYGBfWVlgpZapqaW2uK6uorClrZ+gtrGQjqrEu8W6t6mhpZ2bpZ2wqKO2p52ptaankZiso4uIiY+cp5aspKKaqJ6fk5Wjl6iaqZmUpqGkkJqnmaG0uaeqmJqQjHuBlIyhlIqUkZWQj5KXpI6emaiem7Wjnaast6ivwq6jt6avr7Ctqqu1u6KxvpqSpqSmtaKRnaaejamfjZKfo6ywm6GksqmwmaWhnaSrnp6dnJernJKZopuUkJaqmY2YmJaQlp6Rh6CdlZSFkoyQjZWLgX5mjYd1h3Z5iIR0nGqHkZWVkop9jJaSkpeSoJGalJ6DhpaFeHGUcniJfnF7fmluZF9waWBbX1ltYlBgZE9ZOUdGRT0yPD04LyomKykmHSY0MDY2NTg6PT0/QUFDSEpHSktMTVNTU1VaYGBpYGVWUEpBQ0I7OUVNVlteXltaXFtbW1xdXV9eXV5fYGFhYmFhYWBiYmJkYlxbY5iVpKejsbSsrqOpp62gqLWqkI+co7K7rqqroaKZepyisKSlsamWm7imo5SYqZyOhoqJm6KQrp+kl6igoZKXmZuui6qWj6iZqIyYqI6euLajpZibjYh5gZOMm5OKlZGUkI2RlqGLnZ2nnZ64o3+Dr7WisK90pL6jsqB4eqGss72Wd66loIqAqn5kW2F2n46knYOXfm6Ts5yjqK+ro2WfoJR0epqWcICYqJdsfqKoimWdpZuQl5iWi5KbkISdmpCUg5KHjo6SiYV3a5CIdodxfIaBgGFpiYuVk4xbdpWRZ2iPjXJ5opaXZXeXhoB2l2iCiYJueX5qcGVfdm9ra2hbZWNhYW9SWj1NTU5SRj1AVEI5MS8eHyY0OjMwNjY3ODw7PkBBQkZIQkdGSUtMVFVVWV1gaGdnWFFJPERHPDlWUltgYWJgXmBfYGFhX1xdX19fYWFiY2RhYmFhZWRjaGReXWaclqajobCxrKuppamto6etpZKWqrSusaWZqaaql3OLnK+fqKunk5a4n6CPnKSekH6IiJuejayapJWoop6Ol5GehXSuj4ilmqiRlqOIm7mzp6CZmYuJdXaTjZaTipORkJSMj5OfjZqepZibspaAjJu1nbSMko+9p6F+p6J6pLC5gY6Op5+Ei4WPsKmvjImWopl5gYushpydoqiqqIiVh5l3pZt6h5uBl6aCgXucsnqKhp+XmZSYloGQlpaEmZpjeYeQhI2PkouDbnGQiHqBcYCBhn+GdIeFlpJ4lmiTdKCadHyZgp2ahZh9kYmBgphpjIyEanh6cHBnZHhuaWxqW2RpaWVyW11IVExRQEU1LVlUVDYpITA5PT42NDM1Njg7Oj0+Pj9ESUBJRUpLR1JYWlhbYWFoZllRSDlESzw+YlZeYmRlZGBhYWBiYl9dYGFhYmJiY2ZnY2JhYGVkY2djYWFonZijn6aurquorKCosKenqqWZlK3GvK+glaWotJ2Pg5yrm6eioI2Qvp6ZjZ+aoZB8hY6Zl4isnaOWoaGSjpSJhoCRqI6Hopyjk5adhp65saedmpOPhXB1kImUkIqUj4+bi46RnpGVnqOVnayIn7SJtJqui8qIq6+Jt4WNsIOxr4SpjaeYjZ18qI9ye3ebjqaWaJWkebSLn56mqJOZwoJ/q4iYoXGegJqlfZeFlbGBoXygk5+PmJeAjpObiZiSi3yFk4aNlJOJg21zkoaAe3KGgYR9hXWGgpiBj8VmgKmHj6JqnYGel4CZgIqLg4iYb42ShGd3dHt2Z2h1cGdoa15ibmxma1hnR1xRTDJFNDZNYWM3JjQ8REdEOjYzNjU4Ozg+PTw+Qkw/TklKS0NQWl1cV2JeamxcUUU9S01ASmRYXWNnaGdiYmJiY2NgX2JhYmNjY2RpaWNiYmJlY2FmY2JiaZWXop+wqKmopaugpLmxqqunmpSfoqSqopWkqbair3+gppylnp2JlLyZk42gkZ2PeYOWlpGIq5mcm5qihY+Md5ucjqCRiJ6km5WYl4aiuKylmZuNjX9ibZCLk5CNj4yMl4uPkZ+Okp6gmaGofqGnh62doJaukKCenZGGgqCNrK+HpI2qmoyafqJ1gJiTa4GrdE2reIeNnZKbqKiCqqt+hKF7eqdpnn+SbGeXhpe1iJ59bWBjWIOXf4x7ZGeLc5l9eZZrXXyXbl9TcYVcYGx5g2BZZYJ+hIGYcaeqa4OjbnKlcJ+CnGdknmxabIh6ZVlfgn5hV1BvdmVtdHFqam5eam9sa2hXaE5dWEU5QDRHRF5rNCtJQ1FNTj04NDg1OTs2QDs7PkJPPlFSTE1CSltdX1deX2J2YE1FOk1PTVRiXFtmZ2lpYmJkYWRkYmFiYGJkY2FiaWtkYmRkZ2RiZ2VhY2iYlp2guaCqo6askaG2vKuvopmXn6GlrKufnK20oqeRoJ+fppuZjZi0mZCLnoyVi3WBlJGMiqaWlpifnn+ThYaso4eckYqYqZiZmpGHpbCmopWZiImAaW6Ih4uOjomLjJGLj5GhjJOdn5uipX+TgY+joZSgd5yWkKeDoqiAhqqthaV5i32Emn2icHKSh5Z7nox5bYebi5mRnKmbj4edfIKic3amZp5+d6RemHt9knOibpi3tLpzkoeBgLaoZIHGuHtwlbaMcYCbpGN0rKtgfWqds35ufYeDj4KLl3GAo2xzpHOegn2jXpyZs5Zve5ees3RyW56ygmlib3N1cWhuWGtscnJkXGhdYUtEPUQ1UUFacTI8UkZfSlM9PDM5NTo6NkQ7O0BJUD9UTU5RQEVfXltZWGBgfGRJQzhMV1VWYmFaZmZra2JiZWFkY2BhYmBkZF9gY2tuY2NkZGhkYmdmY2holJaVo7mZq5yToI6luLatrqCaopyjo6Srm5qxrKuSl6CYoKSZmpSeq5uLiJF4i4VwgJaNiY+hkJOUnZd9kYqOqKCHmI+KkqKTm5qMiqinpJ6PloeEfmt7hn59j42Di4+PiY6Tn4KWnKCdoJ+LiXecmKKNoHKii4ipiJynkZipq3+ujH16oJl5o5N4gHOXiIycfZafhpuOmZynh6NkoX2JlpCbjGyeaJqNbpqZen+Kp31yZ3Oqg52Cc6pnlJpdm4V2hJ1oqmqBuGZcqXCBnGGVjF6ndnaJioCdaJp1h5OSmI5/nm2ZkGqmmVyofne7an2pWo6EXbNnXG5xeHdraVtwanl4YV5kVmFBUEVPN1ZCUm40SlpZXk5aREAxNTE7OzdIPzpDR1U/WFJYXT5EYl1WYFFhY31qRUI5TlteWWRmWGZnbW1iYmVfYWFfX2BgZWNeYmRvcV9kZWVrZGNpaGdraZWciaq2m6iJY5WcrLqysKydppubp5+drJmdsKernZeimaGfmZaWoKOZhomNaYiAcXuXiIuWl4SSlZiPeoqElqOciZWQhoudkZybiI+oop+ajJGKgIBpgYZ5f5aMe4iNjoeOlZp/k6GeoKKTmHJon4qgj4xwkoyCqYiZoKSqoah9sK2koriXdqOzoqN/iJR4nXqqmn6ij56cmImYcqF9hY2wtX1rmpGheH6YtKOjq6iEmHuafJyafnOqWl1ve5eLeJ5iTH97e4VkephCTZ9ZompyfI5ugYqEmXWbeYeJsbN/fpqSpnR+nW1xfJRvmXJpo12VdkhlY2BzcH19bmZfa2h2e2JjX1BdVlxUVkBZRVFnRVJWXGFYX0lEPUI4QEE6SUU4TEVYQVZRWlZERmFcWmBLYG19ckVDPFVeYlplalZoaG1vYmZmXmFgXF1eYGhiX2VjdmxeZWdmbGRlbGhoa2mUnYGxrpmEU1+hp7S6s7OpmqKLm6mcnKeSoKujoKePnp2cmpmVmKGdloeHiXeFgW55lYWQmot9kZOWiHKAiZKgm3KSkIGImZSfmoSOqJuZlYuKinyDbISFcYGhjHiFjYiHkZeUfJKjoJ6jiK6GfbWEj56de6aWeqmClp6Ri6Kdfadod21+mXOgc3F8nYWYb5OCrn2jg6efm4GkcF6paHWjY2+lYZzTj3x6mXhyc2OihY9+onKijnVrj7OLYIKYinOqsqe8f3eDbX+/pqq0XpxvfnKXb4FzonJdo2d0pmBopmya05h6gptud3mXa5t5dpdybKmlZ19keXB/g2tnZmNudndmX2FRWmVQUWFIV0lUX1dTW2RqW2VRRkNLTEpLQkpEOFBAUE1YU1hPUlFgZWVpUmR4eXdKRkVjXWVaaGpTaWhqb2NqZmBjX1xdXV9oYmFoZXtkXmRnZGtkamxmaGxomJt/sKxUXEt+qa+ytbCzo5yYhJemoKCjjKSnn5eoiZmXmJOZk5Ggl42IhXtwfYRofY+Ck5qBd5GOjolwf4aPk5JsmJR8iZGSo5WDjqqak5KLhYl5g3aHgG6BnoZ3gJKFh5ihlnmToqOaoImzoaK2i3qsp6SupXCpgJuRhoGcknykgKKZhphxnoSira6Jl4uAjKSNloOuopR2tba1yaF0lIuCnmGdl6lteZWHn5p1oYd3oH2QloqBb0xmo5JwmohzpXt5dGKDgmx+oGxyZGCccn90l2p7abO1tMamc5h+ep1qm5qrdIKabXN3l2mZeXSYcVBEfbNeanVqeIdma2didHRwbVZdU1hnT1JoSVVMWFJWXWdrblZnV01KQUpNSkhKTkFRSlBkY2ltZXRyc354e251iXt7VFFObF5oW2tpUmpoaWxnbWZjZV9cXFxfaWJkaGt7X11kZ2NqZm5tZWlsZaKcia+nhWY/lKGyrK+vtaKij3+Wp6Kho4ukppybpYGal5aNl5CPm5KNiIN5anmGZYOMfpafeXWPiIyBaYSFkoOMhZ2NeoyKlaWSgpepl4yRi4CJeX98i3lwj6CGeYGUhoiWn5R/lKWnnJaWhGdueJxsomR8caV4nJhwaKeCmIx8pXqgloOWcp92gImUlY+5bpCKomJ9maKWiW5yaaprdaBtb6Zgm2mLkGmWh5qVdaKAfZpfi4WMdW+IYmihZZ5/aZt1cGRniIJuc6JaX1tkoW5diYxve39zcmSlbniiZGanaJhyi5huoW9SiI9uoF5kp1SLXVSYbW1yanGBbXBoa3hza29RWFZVZVlTbUlYT1xIWGloc2pZa1ZRUkVWXExYUmFVaGped3V6fHB8fHKCe39zdo2Ag3ZeUXNhZ2JwZ1BqaGhrbG9oZGdfXV1dYGpiaml2dV1cY2hjamlybGZrbWOdpZmmemV0bYunrqWqsbGmn4t/lqqcnaSLoaGZoaGAlZiTjZqPi5eQjYp7hnGAiGiLinyXmnN0iX2Qe2WDh5WKiZaZgnyIhpamkIGiq5CFkIqBin1/f45zaY+lhH2Fk4yHmJ+Nh5Kqpp6JpniWnH6liZaMspmekYOvl5+leZeIeal0pY+Emm6looyShIyDvG59pa+ChoaHlJedoH2menGolKCWZ55+b6xjloqVkneobKmigYl2h4J3q5GmiGuRsGt2s4ypbIuGbm6fnpGVYn+ri6p3gH+Np593n32FpJWdoGmah3WrZp6tjLZzdr6MpJNZg6aNq2F1cXNve3RxYmp+bmhsU1ZaVWBgXGpMXFJdSV5sbXZgW3FZW2BaZ3Nlbm9xY3F0YHd6fnlyeYNyg36Be3uMgYKAdmJ4ZGNuc2RSbGdob21yaWZpYV9eXGFqYmxsem9cXGJpYW1pd21nbG5ilaaqnYGAnqSWqqqeqKeuo5mIgZaqmZ2jiZqknKidhIuaj4WckYWSjYuNdIV6iINvjYR9l5NzdYZykYNtf4uShoaUj317goWXpY1/paWNgI2JhJR1goeSb2yLqICCi5ONiJyeiYyTqqOgkIB0lJeIfoF5lK+kf4KccY+GeZKMhIB7cqeMcX19epeWm4SNeHt+foiUlZOKd5GZoKGEe32Ja4yFW3l5c3lwaW5+kolxf3SBj5STcYWDgmWNf1+BgIx4dnSUdW97b26JboSGX3dpeI5mgoKGjqqcfnR9l2qJiG9/dXyEdW1sZoxzd3uXd4Rbalh5j2hud3Fwb3d4b11shm1pZ1ZaX1dcZGtkVWFVXlFfcHd5a2p3ZWpqanV8cHF0c2FvdWJze4F4dXqBdX+Af4F5i4WCfXttf2xkeW5eV25naHVreGppaWRcYFpjaWVscHVuWltia2Rra3ltaGxvYY6Vuqmni6Gim6akmaSdq6Kgg4OWqpGdoIiZppqomIOBm4t+lpSHjoqIjXKCfI99fo+EepeOdHKEcJWFe32Si4aGkIV4foCGmKOMe6ehi4WPj4SVgoaOl3dxhKqFjZGcj4eenoeLmqigoKuDiY6Vm39+ipetqJCTp5B4cZ6Tg3uTb36phXB9lXFqb3yBn4t/ko6MaG1dg4yMnJyfjnOVi4hxdGuCdnSAWXJuhpCBfX6LaV1pY3qFg4iAX2l4e5x8g42DdoGHg2l5jIhrYnFzg3dfco2CiZCnlYZmjY+DbneLg2+EjHhuZGZjeYJ6lVpcaWZudlt6eHd0bXNygmZcbYpra2JaWV1ZWGtxW15gWV5dZnN9e3NvdGNqaml7fHJ6d3RkbXRobHt+dXp8e3l5f4B/cIaKhHt9c355cn9oVFxxaWx2cHVna2dkXWFZamhranFybVdbZW5sZ3J5b2hqbWCMjKuxoZCjoZqfnpiemamjoX2ClquMnpSHmqGQpJR/e5iEfJKZiIiGhopyfYCLdoWLgYSWinJvgHKYhoR+koOEhoqBeoCEi5qfj4KmoId4jZeIlYuLnJeFg3qsgZCXmZOJnp2HiKGrn6Kio4uIk5udo5mWqqKop6GTnImYkHx5j46EqH5/kpGSk5yxpZqUnZCOspOYhKaMjJacoImRm4KJkoprfI52d2WChpCKfImdhIeLj4eIgIWEkHd8e3Wbo4mIi5+LhpV/fo2CgXZxdIaFf3iJh4qRppGEho6Ig4yQi3uGiYeOgHVrgYN7eZlpcmhgdIpwfXp2dW93dIFdXW+HaG5fX1pbXFJncVVjW1thbGh0e3xybnBkamlof3tteH5waG9vbGaAe3KBgHd/fX+Ee22DjIZ8enh8fnqDeE5kdmpzbnF7ZWtlYmJgW3NmcGZycWxVXWx0bWh4enBnaWtljYieup+WoqGYlZmYlJikoJ17f5ipjZ6MhZ+cip2WfHiUgnuOmYmGg4SGbXiBgHKAh36Ik4Rta356l4eEg5B+gIaEhn2Hg42bnZGGqZ6CcYqPhZKRi5yRfY16qYOMkZeVjpuWhoabpqCimp2Gg5KamZiQmqagpp6ekJaBkot3fYiOhKV7fI+QkIWYqqCck5yPjaqOkoCejYmUmp+Djpd+ho6Cb3iGcXVhfoSPhnSLl4CCjoKGhH6FhJRueXZ1lKOMjoabhYWOdYCLfX1zc3yJhHt5jI+Ek6ePhoSPgoOKiYl1hYaHiXtuan1/e21oa2xnXnl+Z3x7dnR1dXp3XGBwfW10YGNaW15RZm1TZVpdYWppdXl+cGxsY2pqZ4B/a3J/a2pzbnhuhHluhoB2goB9hXZxgo2Ifnt6fIB7gotgaXtrdWhpg2VqY2BpW2N1aG9idW1rVGJxeWVveXpyZWptbYuKn7iaoaSfk5GWl4uan56de3ecpZCbiYaklIqYmXh5jYV8iZGDjIKCgmx7f3hygIV9ipB8a2h9gpeJgYiOfH6GhId8j4CPm5uQh6acf3CLiouShqChioWMfKePho6Sl5OWkneNo6ChnZaaf4GQmZiTjJqioaOamJGbfo6FeoGEjoegf36MjI58l6SgoJKZkI+mjZCBm5GJk5ecfpKRfYaNgHV0gXB2YH2AjoZxipV8h4pxjH6ChYWOaHhyeY2ZkpCAl36Ii3OCiH19cnp8jIV7epGNg5alk4uFkXyFhoeFdYGChYZ5ZHF6fnh5cGxpZl59c2h8dXVzfHJ/al5gdHZwd2RjWF1eUmpoVGRYXmBnanZ4gXFma2NsZ2V/gGptfWdtcGp9d4Z6a4uBcoGBfYF0doKNhn98eoCBfX+PaXKDbnRpYohpbGJfcVV0b21uYHhobFdqdHZidXp7cWJrb3mJjZ+zkqWlnY6QmI+GnaCanHx1o5+Nl3+MoYqImpZ4e4aHfoOJfoiCgX9wfnp0dYKFfomQd2djfYaXi4KKjXh9gI2DeZaAlZeVjZWfmn1vi4GQk4alm4eMiYOlk4ORipaXkpF2kZ2hoZiUmHp/jpeWjpaanKSdmZOUm3qQhoR5hZaNnX2Bio2LcpeinqCSmI6PooyMg5eYg5OWmn+XjHuIjIB2cX1temOAfIuFcIaTf4+Ba4eCgX+JhGZ2b32Ik5mOfpR4jIl9gIh9fHKAeYqGeoSRiouYopaBg4x3iISCgXZ7gIeDdF93d3xzfXdma2NgfmlqdnN0dX1xfGNjYXNudXJtYVlfXVprZFJiV19gaGt1eYZwYmpjbGZofINraHRobG9of3yBeG2PhnGAgoJ/dHyDjIGAfnqCg358kG11iXR0bWWKbGpiY3VWg2lwbmB4Z2xhanZwZnl7eXFfcWyFhZCdrpinqJ6OjZeHhZ+Tlph9dqibiZh5lpyLjJiPeHuAi318g3uAgoF4c3h5c32Ag3+IioBkXn2LlYh+hYh0fX6Kf36YhJaTloyjoJd+cYd7k5CKpo+MjoqSn5CCkI+Ul5GKgY+YoJqSkJJ0gI2Rk4mcnZ6mmJiOlZZ0jo+LbYaYj5l6h4iQiW+XnZqik5SKjJ+MhoKSnH+TkpaHmYh7iYmBeXF5anVse3+Lfm2FkYKTd2+Cg31+i4Blc2p9gZeYhX+OdJGJhHqIfnZ4gX6HgX2DjYWNlKSQeYWCdImHfX9ydH+FgWxgenR5cHxvYW5iZHthbm92c3d3c3NhdmBva3Vub11bXl1dal1PXVdiYWhtc3qJa19pZWpjaHeIbWZsaGlsZ4B8endvj4dzgIOEfXSBhol6g316gYR9fY5yeYt5eG5sh2toX2lyY4docW9ldmdtbGF6aGt8e3hwYXdti4GZmqqhpKmeioqRhoqeipWXfXasl4yWfJ6TkZaUiHZ9e4p8e4B2d3+Ab3Rzem+FfYGAiX58YVx+j5GGgISEc3qAhnqPkYeRkZuSpJqTgX2AfI2JkaOIjYqNl5mMhZGYk5WOiYmMk52TkIyNboSQjpGInpmhoJeWiZeRb4qahWeGmY6UeomFkIpwlpqToZKSiIuZjIKAkZ59ko+TjJqPe4qEhnNzdWtxbnV8i3RuhpCNkXF0gHyBgoh8ZXFten6blH6FiXSRi4F0iXpvgX+CiH2FjIqFjZaojXuIfX6LhXd+cG5+g4FiZ3dzdG56Yl1vYGp0XnBqenh4bHJwZXldbWxzbXNYWl1fYWpaT1dXZGNmcXF/iGVdaWhnYmdxjW5kaWdkaWiAend1b46Ec4GBg3t1goiFeIV8d4OFeoCKd3+Le3tyeYNqa19waHN/a3FubXFnb2tle2Juf3l2cGt2d4l/o5iiqKGnm4iMioGPnIaTnHSAqZSRjYagjJWTkH9ze3aEd3h/cnN7hWtyb3ltiXZ/gIZucVtZfpKNiICBgXZ1gH9/oIaPipGcl6CTlneJfoCMh5ydiY+GkpeVg4iUmY+Wi4uNjo2dio6QhG6Ji4+RipyWoJuYlYaYiGuFpIRnh52KkX6LhIuBd5OYkZ2RkIiJlY5/fo+YfJGNkI6akn2LgIJudm9rbW9we4Zpc4OOl4pxd4B0goiCeWd0b3aCm499ioV6lZJ6d4p1cYp8h417i4aEiY+co4h8hHaBi4B4eG5qf4B+XHFycW9veFpdb2Bval5vaXx6cG1tam13YHBvanFtWVhgYWFtV1FTWWVmYnVwhIJiXWttZGNma5JtYGZmX2drgXVxcnCLgHR/goB4doCLgHmGf3eHhnaDhXyGjIB7dop/anFifGKFfG9wbHRqaG5sdndfcX55e3R1c3+CfqWVmq2fp5aFjIN+lpSDj550iZ+TkoWKmoyVjYt6cnd0gm9yhXNxdYhsbmx1bYh3g31/bW5VUYGrlIeCeYB2coJ5gqCCkYGSkZebkZl3kHqCi5GjmpOOiJWYkYOGlpmLk4uIj4+InoWQinxzi4WIj4icmZ6blpSAlH9php2JaIegiJKEkYOJcYORl4+ajY+Mi4+Nd3uSkHuOjI2Sl418iHyAa3ZpbWtsbHp/Ynl9jpWBdnqBd4OMfHlodW11iJaMf4mGe5SRcnqFcXiOe4uNe4l+g42Rn56FfX14gYt9d3Boa4CAd153b21rcXJWXW5hcWFfbW55cGdwZmZ0dWhxa2F3ZV1WZWBgclNQTltlZF14cIh8XlxocWJiZWaRaV9nZFtocH5va3Fzin12fYWBdHV/jHl7hoB4iINzhoV+jIyEfHmVeGZxaoNfh35vb2t6YGltdH90X3R8eIZ3c3OFfHmhkJqxnKWOgop/gpmIgIudfoqYko6EiJeOjo6EdnR2c4Bwb4VzcHGDb2ppdW2Cbn18bXVzUk6C38mS1pN8b3SDdYOfgpF2lJCYm4+Ye5NyhZCfoZOTkImSm5OFfZWVh4yNh5KNiZx/joF4eox/iIyKm5ucmpWTeY13aYmSiG2JpIWTiJiDhmOMkZiNlImWi42Ji3B6lYl8jomKkpGJeoV8fm18ZXJva2t5eVuAeY+OgXp+fn+Gjnp6aHRsdYyQioOGhX2WjGx+f2+BjH+NiH6Ee4ORlpubi3x3eIOPeHNsZXB/gmtpdG9naHNtU15uZHBaX2txeGZra2JneHNvcWNfd2BgVmtfXnZPTUtgZmNdeXGKdFxbZXZgYWVljmNgZmJYaXJzbWtxdot8dHmGgnV2fotzf4Z/e4l/comHgZGKiH1+mXZlc259ZYh/b3BrgFprbnl5c2B2enuNdnJ3ind5n4ybr5ugkIKFeIiUfnyJnIeEnpCOhYyXhJOOh4F0d3B5cG6Eb21ufnJjZHhwfG56fGpobGOkmsHcru+hc2t1g3WEoYSRbpWPlJ+UmoGRcIWLo5eJjpWKkJ2Vg4CUj4SIj4CSioqXfod7dX+JeIaFjpual5mOj3WKd3CHiYx+jKWFk4qdhYZei5SXiY6IjouKhIlsfJeCfYiFiZGPhnaFfn5rfWN4dGlteHNXiHqRh4V5fn+AhYx+eWZ0a4GLj4uEg4CMl4ZsgnZuiZGDkYV/gnuBkZeTmZB0dHiHjHVzcWZ0eYFhc21vYWh1ZlJgcGdrVV5tc3lgcmNgaX1xcm5aYnJhYlduWlx3TU1MY2ZhXnZzim1bXGR4XmBkZoRfY2NeWWlya25rcneLfXN3hIF4d3yIcYOEfX2Ie3SLiIiVh4x/f5hzaHVxeW2Me250cIBXcHl2eXFkdniGjGl2gIpygJ2Imaeco5KEfHCMlHh5ip2DhJ+NjnyVjYCZh4R7cndwc2pvgWtpbHx0XmB4dntwdHpnYGV869q1ycPciHNsc4B2ipqIjGmXj46clJKBiHCFiKCOhIqVioyXk3yNkoiCiI96kYuGj4KAd3iDhHKHgpOblpOYhox1h39xhoKKiJqjhJWNn4SJYYOVj4WIhomMh4CHaH2Uf32DhImOjYJxhn5/cndndnJoc3drWox9koKFfICDgISKgnZidG2KgpGMg39/k5F9boJseYeQh5OEfYJ+gZOUkZeJbnJ6jIV0bHBqcXd/XnNoblxpdV9SZHFoZlNfb3Z0X29gXWiCcXJqV2doY2lYbVdbdUxKTGVmXmJyc4VoW1xleV5eZGd6YWRfXVlrbmVuanR3in5zcoF+enZ6h3OFg3x/h3d2ioWPmIKNgnuTdmx3dnl4k3VueHp9WHmFcYBvZ3h2kYJkdoaFcYqWhpmhm6KKhnNvkotydo6bfYmZiIl7n3+EmX+BeHF0bm9kcn5oZmx3d1tfeHt6cXF/aWFnYX/Vto6QpnhucXd7cZKQjIZqmI2Im5GLhntoh4uZhoGSkIaGl417jIyAgImNe5CNfomFenV7g3txhoCVmY6Sk4GJdYSHd4SAi5OeoIeWkJ9+iGF/k4eDh4OJjX9/gmZ9kYB+f4KMj5B+bYN8gnRrbXd1c3Z1a2ONgY5/hX58hH+EiH9wYHNyhnyQjoN9f5KJenGDZnuEi4eNhHyFf4GUj5GThG5weYx+dGxuaWp5fGFnaWlYa3VaUmlyaWJQYnJ4bGJlXlpqg25zYltnX2RtX25UWm9OSE5mZFxnbnGAa1pbY3NfXGNsd2RlXV1abGxibWpzdoZ/cW9/fHx0eIV4hYN8gId1eYmBkpV8iYZ2iYFweHl7hJNvbXuAdl6Df3SBbWl6c5RzZ3KIfXKSkYSan5ughoZ1dZR+bXaTl32HkIOKjZl8jJp2fnZxb2xqYXR8Z2JpdXlaYHd7eW1xfmVjaGhXnY9ecXKWvMSEdnGUiI99cZaLhpuSjIdyaoiPloB7lIyBhJqMfIqFfHuJi3+UiHWJhnZ3fYFydYaBnpSFlI+Dg3KAiXWFfIqZnpmHlY6cgIhmfZOCfoSDiYlygX1mfox8eX9/h4uPfWmAfYN2Zm95eHN2c2xrjoWKgYp/eIKAhYN/a19yeXt+jouGfIKPgX5ygWl5hIiMhoV5hH2CmIyQjH1ubXuJfXZzbmdme3ViW3BiV25xU1Nuc2hhTmZ0eGVgXl1Zb4Bvc1llYV5qbmBwT1lrUURTZ2Baa25tfG5ZW15tY1pib3dkZ1xdYGtpY2xqc3aBg3Btf3x/dHWDeoOCfIKFdn6IgZaQeISLdIGIcnl5fo2Qb297gHFpgXh6fm1se3WVa2p4hHRsk42Fn5igmYSIbn2Mdmp4mI5+gImClJeJeY+Wb3pzcGxpZGBzemhfZXF6WmByfHlncXphZWWPsbJ3SmJapNnQlnF7kIqPd32TioSYkYyFbmuFkpJ6eZKGgYSYinyGf3h3iYqEloBvi4hxdX56anmFg6WQhJKMg39vf4N2hHmGm5mVjJSRlISIcHuSgnyCg4iDboF3aICEeHJ/gIOKh3xlfX6EdmNwc4BoeHBvdZmNhoOKfHZ4gIR5gWtccX9zgomGin6GiXuJcoFucYWHj4WFc4V6gpmNjYR4bm9+hH92eWRnaXtwXlh2WlhwbE5XcXNnYEtsdnRgXVxaWXR9c29XZ11manFgb05XaFI/WWZeWm9qZ3pxWlpZa2VaY3F5X2hcXmVsaGVraXF3f4dubH9+gHVvgnuAgn6Cf3aBhYiXinGCjXF7hnx6eYSTjHVqen9rb350f31vcnt6k3BvgX94Z5KLg6GZnJKChWaGg29neZWIfX6EgZiJgXyNjGl4cmtrZl9hb3ltX2JveFxka4J6YXF2X2Vl1Oq9izI6PouOf3F4hYiOjXaClYx+ko2Mf21shYyLdX2Pf4WBlYh8gnhudoeEg5d3boiFbHV7dGZ5goOni4KOi4R9boB1d4V6h52RjZGSk4yLhn97koZ3f4OMgmt/cmiAfnhtfHyBioN3YXmEgXFkcWh+bXVxdYGbi4B/hYBzdX6Bc4FvXG5/dXmLg4t7h4B8iHh6cWyJhJCEi3KDeoCWi4p/dG1rd4CAdHRcaGd2b1hWe1JZcGRMWnJyZVtJcHhvXFtbWV10fnRoWWJbZ2VuY2lNV2ZRPV5lXF11ZmB1cFpZVG9kWWRxeVpoXV9mbWdpa2lwd32ObGmChH55boB8fIF/gnp1goGNk4RwgItud32Ae3uIkol/aHt9anN7coZ7c3d+f4x6eIR9fGuMjYSbnZaMgIBsjX1raH6Ni3p+foOTgn59iohrdXFnaGJbYmdzb19ha3NgaHCIemJzdF5jZJugj25cNVqvtXRpgIh8koZ2hZWFc46KiXZwbIWChnR5iXiJfJOIen5yZ3WJfn6Yb3GGfmh2eW5meYeEpIeAhoyJfm5/doCCfo2aiIKUkZiJi4SJfI+IcHt9hHtofmxrgHt6aXp2gYeAcmB3gX5xZHJmdIJtdXuGlZGBfIKBb3d6fXV+bFlwgHd1jIKGeIh2gol6eHNuioGQgYZzf31/k4iJem5tam6CgXRtXGdkcnBRWnpNW29cT1xyb2RVS3N4aVdZWlphcYB0YF1dYGZkaGlmTlpoTUBgY1tgdmFddW1YV1N0YVpkb3JXal5iaGtnbWxpcHd8kmxphIl8fHB+fnuBf4J6d4B/iouDcXuIb3F3g397iY2Pg2p+e213eHaKd314gIKHf4N+fnpthIyImKONhIN6dYt4a2yDh5B4fXqBkYCAfoqDcHJxY2ZeWWZfb29fYGdwZmpviXRhdG9bYWRqdnuAv5ympMi4cYWDcpJ8eIaSgnOQi4dxcm+DeoJzdYd0iHeUiHl5cGN3h3qAk2lyhHZnd3VjanyCiJ2Bf3+Oj31zgHSFeoGSkIN5lo6Vj4iCiHuIiGt4eX50Z3pobH95c2l6doCDfWhgd4d9amt0Z3qAaXaBjJGUfnp+fnB8d3x0fmJWeH5zc4qEgn2DcYeKd3hxcISCjX9+eX59do6Fg3ZpcWltiIFwb11nYXFtSmV1S11tVVRac25iUU9zeGBSWFhdYW+Cc1thXGhlZWNrZFFbcElDY2BbY3BeXXhoVVZVd15bZW5oVmteYWlnZW5uaHB2epJuaYiMeH1ye355goGBfHZ9g4iGg3B3hHJtd4OCfYmLk39wgHt3eXqBjHSDeH+BgYKEeoB1b36Ki5ueiH2FeneFe2d0hYyPeX5/e4iFg3aPgGdwbl9kW1hlWW1yYWBgcGxraIluYXRpWV5kboB3qdqqx4aHsnGJd2+MdXuGjX96kol/dHN0fnd/b3F/bYR0lIZ4dWtgeoJ5iY9mcYRwZ3ZuW218gJCTf4B5kZJ9eHtuiHeBko2FdJaKkY6HhYV7f4RsdHZ+bWd2ZW17dW1qd3Z/f3xhYniFeWh1dWJ9e2d1ho6NlXt0gHZxgHt9bX9ZV3V/cHWFh3+BeWyJhnR5bHWAhIR+e315e3OLgX1zZ3RlbouDa3NaaV50ZEdtbUxaYVdWVndtYlBSdHZXUFZYXmFxhG9cYGNtZGReb2NVXnJGQmVfXWZoXVt6YlFVXHVbWmdrYVZqX2BuZWZrcWhwdXiOdGuOjXV+dnh9d4GDgXtzfYOIh4NvcoB0cXV+hYGJjYp7d393g3t8hYd4h3x9gX6EgHt+c3Z5jI6gjYl6iXZ0g3hefYWYi3iGg3SFhoR3iXtibm1bYVpbYVZpc2NgW2dub2aHcWFxZldcY2t/fMrOh7mham1timxxhHF8g4l+epCEeXhzeXV1fGpsdWOEdZKCd29mXn2CeouKZXKCa2pxY1hteoWbiIKBc5aTdn58b4pxgouNiHKYjpGJhYuDe3h9cXFvfGZocWJteHFqa3F4fXx6XWV5gHdpdnhmgndndIeMjpR7cYdqb36AeW58XVlzf250gYt8gm9vin9xdmh3f4GAgXd9cXt1h316cmZzYW6LgWpyV2pedltIbWpNVlReU1V7a2FPVHVyUFFUV15idIVpXWBramZjWW5hWWRwR0BnXGBmX1xVel1PVWRwWltqaF1XaGBecmZrZ3FncHJ3hnhulYp0f3p3fniDh391cn+GhY6DcHB7eHZ1eoaFhoyFenx/dIt+fYaEhId/fn59h398eHZ5eJGTn3+MfIttdX94ZIKGlYVzkYpvhYWBeoN0Y25qWV9aXV1UZ3JkYFhkcXJmgXNia2VXW2Bqf3i+rnugtm5ic4Zoc3txeYGEen2Lfnd3cnZve3Zlam5gh3WOgXNqYl5/eHmLhGZxf2hra1pWb3eJo4GEf3GZknGAeXaEboGDk4lzlYiNiISJhX14dHJuaHhgam1gbXZqZ2preXd6dlpnfXx4ZXJ+boR0ZXWFjYaWfm+MZ2t6g3VtdGJdcX1sdX2Me4FmdYd9bnFodX94fn9zfWx7e4J7eG9lbGJuiX1rbVZpX3ZVSmlqT1FOaE1Ye2hhTlV1akxQVFVfZnWDZl5gcGhnYVdpXVxsaEpEallhZFdZVHhZTlZtallda2RcWWVjXnRmbGRxZ3JvdYF4cJmFdn9+d398hYd9dXOCiICVg25zeXt6c3KFhoiIg3iBfXWPfnyEio6EgoR7fouDe3d8d3eanZd6ioKGaXZ9e2yDhJJ/cY6BcIWCfoF/cGZsZ1ddWlxbU2RwZF5XYnJ1aXVwZWViV1xcaX9wb3KAc4lkZHh+aXR1dHKBg3eAg3l2c3Vta3pxYmdrZ4Z0jYNuZl1ffXB7iX9pbXhnamRVV3JvjaZ8hHt2lpB0fHN9fG58fJKGd5l8iIaDhoN9dHBxbGd0XGxoXmx0ZGdmaXpve3JZZ4B2dWhwgHiCdmJ3hYt8lIBujGpte4JxZnNlYW56Z3N4inx+YnaDdmprcXV7cXp6dH1mfn+AeXduY2ZiboZ8bGpVaWJvUkpoak9LTm9HXntmYU1VdGNKTlNXYWp2fmVdZ3NpZWBWY1djcF1MS2pYY2FVVFRzVkxYdWRaXmtgXFpjZV92Z21icGlzbnJ/dXSagXd/gHd/f4aEenx0goR+l4VucnR8enRxhIWPgYB5i3V0kH98gZWOgIWEfX6Mhnt+gHZ7o6WKeYiGhGt1fHp1g4GLem6Ec3mEfYGDdW5qaGVWXVtaWlNibWRbWGFze2lobWlgYldfW2qAaWtwgGdrYGh5eGpzdHRuhIB6f3x1dW56aGp5al9lbmiBdpCEZ2VYYndqfod7b2lwZ2ZdVVhvZ46od4F6fJGOeXVwf3BzdnqPgHiVdYaDgIWIdmpxdWdobltsZF1tcl9nYWp4aHttW26CcnRqb4B+eXhhd4WEeI+Fc4hyb3mAcmNxaVxxeGRydIl8eWJzgHBnanl0cWx4eHV4ZIN7f3l3cWRkY258fWtrVWhhZVJKa2dPR1FrRWF4Z2FNU3JdSk1UWmVrdnplX21xaWRdVmBWbm5XS1NoV2VeWE5VbFRKXHlfW19rXV1bY2VgeWhsYG9vdW5veHV6mH13gIF6gICHhnp4eYJ+gZOEcXR0f3l2dISIkX2AfJBrc5WAe4KfhX6HfYB/hoKAint2hKuff3qIiINrcoF5dYB/gXRuhm58gHOKgGpvbWRkWF9aWVpUYWpnW1pedIJpXm1sXGFWXFxsgWVxdH1paVxrdnVnc3ZybYV7fXx4dXJseWdpeGZdZXJoeneTgWNjVGVwZ4KFd3dnaGpgV1ZZZ2OPp25+d4CLj3twcX5oem96jXx3j3KEfX9/hm5kdXJkaGhca2Fcb29cZ19tdWR6aF10gG9ya3F7fXV2YnSFi3uIh4GAeHJ1f3VhcG1bcnRjcXOFfXVlcoBsYWx7b2ppe3p1cmaFdnt7dnFlYmVtc35pbFRnXVxUS3JiUEZWYUdid2dhS1RvV0pMWFhna3V6ZGVucWZkWlddWHZmVUpcY1dnWFlJV2VQSGJ4Wl1fbFteXGFjXn5pal9udHhub252g5d5coGAfH+JjIZ+dXWGeYeMfXN1dYJ5enqCjI59foSJaXOWgXqKnX1+hXqBen98hohzcY+tjHt7h499ZXGHeXN8e3VyboVse35sj3picG9iZV1lVllZVmNma19dXHKFaFhwblteV1pcbHticHd2bWJabHNzZ3R1cGyEeH5/eHdubnRkaXRlW2d0ZnZ2knlfXVJmZmqDgnR+YmNpXFRYXmJjj6RoeHSDhpF4bW97aXhufIV7dYlzgHh8eH9oZHZsYGZgXmpfXHNrWWVdb29iemVbd3xrbm5vd3hzdGRzg5J+h4OJe3Zwcn5zYnhkXHBwYnFygn10Z3KAZV5udmlkZnl8dW5vgnV0fXRyYl9mbm99ZGlTZ1hXU013X1FKWVhIYnVkYUlUbVNKTVpXaWxxe2JsbHNjYlpaW2F3XFNMY11YaVNXSFlgTUZpdVheYGxbW19iYlyEaWdhbnh5bG9qdoGQeG2DfoCBk4iEgXZziHSMhnNxd3WCd3x9foyQgH6TfnB3lYN8mZJ5gIB4en6AdIiDdHCZont6f4mUeGR1h3hzeHVrc25+a3h8cJFyXnBvYGdibFRbWldoY21mXFtxiWVTcm5bWlhYYGx2Y2l1amleWW1zcGxzc3NphHx+fnt2b25sZGlxY1trcmR0do5zW1dTZWFygH9ygl1iY11TWmBcY5GfZXFxhYSRdGxse25vcHt8fHGBd39zenp6Y2V1aF1iWmBnW152aFdiXW9oYXdgW3t2aWpybndzcnVocYKVg4Z9g3ZzanF9bmZ3WF1sbmNyc4F6dGdvfltgcHFhX2pxfWxsdX5zcXhrcGFcZWxsemFnU2ZUVlFQdVtRT1hRSGN0YmBGVWtQSVBaVWtranxlbW5xYFtaWFlscVdTT2ZXV2hTVEZZXE5IcnVYX2NtY1hgYGFdi2pjZG15eGtvaXV5hntrg31/hJp8goR5fIduj4Zxb3d6fXSCgnyLj4KCl3R3gpOFgZ+JdYGAgXR/gnGHgnVvopdze4aLhntld4pubXpuZndwemtzdnKMa150bmFnZWtSXVtWZ2Fsa1pccIxkT29uXVZYVWdqdGdidGVlXVltdG1vdXR4aoZ8f3uHdo9zZGRrbmFdbm1jc3iHa1pUVmNkeH19cYZdY19jVFpgWWKVlWNucIOFinRraHxwZnN3c3xsenR1b3p+dV5lcmNbXlZhZFhhdGVVX2BtZGFxXV1+cGhpc3FzcHR2a22Ek4GIeoRxc2dvfnFzb1RcZ2tmcXSBd3NjbHZVYnJrWl5vZn1lbXd9c3Nza21gWmRqandeZlRkVFVQVG1XUVZTT0dkc19hRVhpT0hXVFZtaGR8aWt3amFXXVVbdGRTUldoUVllVFNIWlpQTXh2Wl9lbGlZYmBeXo5uYWZreXVub2h2dn9/bIOAfYeXe4CHgYl+a5OIcmd0gHt1gIJ9iI5/i5NyfIqRhYefhnt/hoxzgYZzfoJ2bqWMcoGNi3Z3bXqMYGR7cGZ4cnhsbXF2gmdke2xjZmdoU19eVWdfbG5bXm2NaE5pbWBUVlNvZ3NsZnhkZFxYb3NscXp3cmyHe392m3p5a2FlbG1eYG9qZXF5fmdaVlhgbHh8e3CEX2JeZ1dYX1dkm4hia3CBh314bGt5blx3cWx7anZzbm97gHJYaW1eWV1VYmNXZHBjU15haGFibFpgfmtma3N1bm13dmxphYx/iXmHbXFmcX1uc25jWmFpaW90gnRzX2lsU2VxZFVibmJ6Y3F3e3ZrcG1rYFlhZ2h0XGVVYVVSTlhlUk9cT09IZHBdY0ZZaU1JX0tYbWRfeGhufWNfVF9UXXVcVFNgZk5dYVRTSlxZUFl0dV1fZWxoWGNhW16NcWNnanhxc25ndnR6g3KCg3qIjn58iYeNeW6QinRsc4J0f3+HhYaShJWPeX6Mj4eRm4SAfIyFc4CBc3R4cm+Tk5OTk5OTk5OTkpKSkpKSkpKSkpKSk5OTkpKSkpKSkpKSkpKSkZGRkJCPj4+Pj4+Ojo6Pj46OjY2Njo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo2NjYyMjI2NjY2Njo6Ojo6OjY6OjY2Ojo6Oj4+Pjo2NjY2Oj4+Pj4+PjoKAfnp6fX5+fX1/fn59fn5+fn5+fn+Af4CAgIGAgIB/gIGBgYOHjI6Ojo6NjY2NjY2NjY2NjZKSkpOTkpKSkpKSkpKSkpGRkZGSkpKSkpKSkpKSkpKSkpKSkpGRkZCQkI+Pjo6Ojo6NjY6Ojo2NjY2Njo6Njo6OjY2NjY2Njo6Ojo6Ojo6NjYyMjY2MjIyNjY2Njo6Ojo6NjY2NjY2Njo6Ojo6OjY2NjY2Ojo6Ojo+Ogn99ent8fn59fX59fn5+fn5+fn5+f4B/gICAgICAgH+BgYCBg4aMjY6NjY2NjY2NjIyMjIyMkpGRkZGRkZGSkpKSkpKSkZKSkpKSk5KSkpKRkZGRkZKSkpGRkZGQkJCQj4+Ojo6OjY2NjY2Njo6Ojo6NjY2NjY2NjY6Ojo2Ojo6Pj4+Pjo6NjIyMjIyMjIyNjY2NjY2NjY2NjY2NjY2Njo6Ojo2NjY2NjY2NjY6Ojo6Cf3x6fHx9fn19fn19fX59fn5+fn5+gH9/gICBgYGAf4CAgICDhouOjo2NjY2NjIyMjIyMjIySkZCQkJCQkJKSkpKSkZGSkpKSkpKSkpGRkZGRkZGRkJCQkJGRkZCQkJCPj46Pjo6Ojo6Ojo6Ojo6Ojo2MjYyMjYyOjo6Ojo6Njo6Ojo6OjY2MjIyMjIyMjIyMjY2NjY2NjY2NjY2NjY2Njo6NjY2MjIyNjY2Njo6OjoN/fHp8e31+fH1+fXx9fn59fn5+fn5/f3+BgYGAgICAgYCAgIOGi42NjY2NjIyMjIyMjIyMjJTO2tjY2NjamoGEhISEiF0tMDAwMC1GoaGhoaGhoJqZmpqampqKg4SEhIOEd2VnZmZmaFxDREREREJOpa+tra2usWFAREREREU4Li8vLy8rSIWDg4ODg4OLjIyMjIyMjY2NjYyMjY2NjY2NjY2NjIyMjIyNjY2NjY2OhX19e3t6fX58fH59fX1+fX1+fn5+fn9/f4GBgYCAgICBgICAgoWKjI2MjIyMjIyMjIyMjIyMlNvp5+fn5+qcfoKCgoKGUxgdHR0dGTekpKSkpKSjnJycnJycnImBgoKBgYJyXV9fX19hUjQ1NTU1M0GptrS0tLS4WTA1NTU1NyccHR0dHRg6g4GBgYGAgYqLi4yMjIyMjIyMjIyMjIyMjY2NjY2MjIyMjIyMjY2NjY2GfH16e3p8fXt9fn19fX59fX5+fn5/f3+AgYCBgYGAgIGBgYGChYqNjYyMjIyMjIyMjIuLi4uSl5iYmJiZmpKPkJCQkJCMh4eHh4eHiZOTkpKSkpKRkZGRkZGRj46Ojo2NjYuJiYmJiYmIhYaFhYWFho+QkJCQkJGJhYWFhYWFhIODg4KCgoSKioqKioqKi4uLi4uLi4uLjIyLi4yMjIyMjI2NjIyMjIyMjIyMjY2Njoh8f3l7ent8e319fX18fX19fX5+fn9/f4CBgYGBgYGAgYCAgYKFioyMjIyMjIyMjIuLi4uLi5GQj5CQkIuOkZGJh46KkJKTkIqRjY2Ph4+RkZGRkJCQkJCPj4+Pj4+Ojo6Njo6Ojo2Njo2Njo6Ojo6NjIuLjIyMjI6Ojo6Ojo6Ojo6NjY2NjIuLi4uLiouLi4uLi4uLi4uLi4uLjIyMjIyMjIyMjIyMjIyMjIyNjY2NiX59eHh5fH18fX19fH19fX59fn5+f3+AgICBgYGBgYCBgIGCgoSKjIyMjIyMjIyLi4uLi4qLkJCRkZGPhI6QkIaKj4WNkJCOh4mHh4yHipCQkJCQkJCQkI+Pj4+Ojo6NjY2NjYyMjIyMjIyMjIyMjIyMjIyMjI2NjIyMjIyMjIyMi4uLi4uLi4uLi4qKiouLi4uLi4uLi4uLi4uLi4yMjIyMjIyMjIyMjIyMjIyMjI2Lfnx3dnh7fXx7fX18fH19fn5+fn5/f4CAgIGBgYGBgIGAgIGChIqMjIyMjIuLi4uLioqKioqQkJCQkIqFjoiOhoaPiY2QkI+GioeGjoaMj4+Pj4+Qj5CPj4+Ojo6OjY2MjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMi4uLi4uLi4uLi4uLi4qKioqKi4qKi4qKi4uKioqKi4uLi4uLjIyMjIyMjIyMjIyMjIyMjIt+e3d2eHt8fHx9fX19fX1+fn5/fn9/f3+AgIGAgYGAgYCBgYGEiYyMi4uLi4uLioqKioqKipCQkJCPhYOMjpCOiYyJjZCQj4mHiIeMiImPj4+Pj4+Pj4+Pjo6OjY2NjYyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIuLi4uLi4uLi4qKioqKioqKioqKioqKioqLi4uKioqKiouLi4uLi4yMjIyMjIyMjIyMjIyMin18dnZ4fHx7fH19fH19fn5+fn5+fn9/f4CAgYCBgYGBgIGAgYSJi4yLi4uLi4qKiomJiYmJkJCQkJCMhoyJjoeFjYmOi4yLhoeHhoiGiY+Pjo+Pj4+Pjo6OjY2NjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyLi4uLi4qKioqKioqKioqKioqKioqKioqKi4uLioqKioqKioqLi4uLi4uLjIyMjIyMi4uMjIyKf353eHp7enp8fHx8fX5+fn5+fn9+fn9/gICAgICBgICAgYCBhIqMi4uLioqKioqJiYmJiYmPj4+Pj5CMjouPjIqPjI6MjY2JjYqKjImOj46Ojo6Ojo6Ojo6NjYyMjIyLi4uLi4uLjIyMjIyMjIyMjIyMjIyMjIyMjIyLi4uLioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi4uLi4uLi4uLi4uLjIiAfXh5enp6e318e3t9fn5+fn5/f35+f39/gICBgICAgIGBgIGEiouLioqKioqJiYmJiYmIiI+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Ojo+Oj46Ojo6Ojo6Ojo2NjYyMjIyLi4uLi4uLi4uLjIyMjIyMjIyMjIyMjIyMjIyMjIuLi4uKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLi4uLioqKi4uLh4B8eHp6eXt8fHt8fH1+fn5+fn9/fn9/f39/gIB/gYGAgIB/gYSJi4qKioqJiYmJiYmJiIiIj4+Pj4+Pj4+Pj46Pj4+Oj4+Ojo6Ojo6Ojo6OjY2NjY2NjY2MjIyMjIuLi4uLi4uLi4uLi4uLi4uLjIyMjIyMjIyMjIyMi4uLi4qKioqKioqKioqKioqKioqKioqKioqKioqKiYmKioqKioqKioqKioqKioqKioqKi4uHgHt5eXh6fHx6e3t9fX5+fn5+f39+f39/f39/f3+BgYCAgH+BhIiLiomJiYmJiYmJiIiIiIiOjo6Ojo6Pj46MjI+Sj5COjo6Ojo6NjY2NjY2NjY2NjIyMjIyMjIuLi4uLioqKioqLi4uLi4uLi4uLi4uMjIyMjIyMjIyLi4uLi4qKioqKioqKioqKiomKiomJiYqKioqKioqJiYmJioqKioqKioqKioqKioqKioqKi4aBe3h5eHp8ent7fH19fn5+fn5/f35/f39+fn9/f4CAgYCAgIGEiIqJiYmJiYmJiIiIiIeHh46Ojo6Ojo6Ojo+MkJOQkI+Ojo6NjY2NjY2NjYyMjIyMjIyMjIuLi4uLi4qKioqKioqKi4uLi4uLi4uLi4uLi4uMjIyLi4uLi4uLioqKioqKioqKiYmJiYmJiYmJiYmKioqKiomJiYmJiYmJiYqKioqKiomJioqKioqKhYB6eHl5fHt6ent8fH1+fn1+fn9/fX9/f35/f39/gICBgICAgYSIiomJiYiIiIiIiIeHh4eHjY2Ojo6Ojo6Pj4+PjoyNkI2NjY2NjY2MjIyMjIyMjIyMi4uLi4uLioqKioqKioqKioqLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4qKioqKioqJiYmJiYmJiYmJiYmJiYmKioqJiYmJiYmJiYmJiYmKioqJiYmJiYmJioqFf3l6eXh7e3p7fHx7fn5+fX5+f39+f35/fn+Af3+AgICBgYCChIeKiYmIiIiIh4eHh4eHh4eNjY2Njo6Oi42Nj5WPiYyPjYyNjYyMjIyMjIyMjIuLi4uLi4uLi4qKioqKioqKioqKiouLi4uLi4uLi4uLi4uLi4uLi4uLi4uKioqJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYR+eXt5ent7eXt9fHt+fn59fn1+f35/fn9+f3+AgICAf4CAgICEh4mIiIiHh4eHh4eHh4aGhoyNjY2NjY+MjImKj42IjJGPjY2NjIyMjIyMjIyLi4uLi4uKioqKioqKioqKioqKioqKiouLi4uLi4uLi4uLi4uLi4uLi4uKioqJiomJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJg355e3p8e3p7fX17fH9+fn5+fX5/fn9+f3+Af4CAgH+AgH9/f4OGiIiHh4eHh4aGhoaGhoaGjIyMjIyLiYyKiIeJhoyOjJCMjZGOjIyMi4uLi4uLi4uLi4qKioqKioqKioqKioqKioqKioqKiouLi4uLi4uLi4uLioqKioqKiomJiYmJiYmJiImJiYmJiYmJiYmJiYmJiYmJiYmIiImJiYmJiYmJiYmJiYiIiIiIiYmCf3h7e3t6enx9fHx9f39+fn19fn9/f39/f4F/gIB/gICAgICAg4aIh4eHhoaGhoaGhoaGhoWMjIyMi4yOjoyKioeEiIuKjIuNjo+Li4uLi4uLi4uLi4uLioqKiomJiYmKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiomJiYmJiYiIiIiIiIiIiImJiYmJiYmJiYmJiIiIiIiIiYmIiIiIiIiIiIiIiIiIiIJ/eHp7enp6e3x8fX1+f35+fX1+f39/fn+AgICAf3+Af4CAgYCDhYiHh4aGhoaGhoaFhYWFhYyMjI2NjJCSjI2Ii4mJi4uLi4mLjIqMi4uLi4uLioqLi4qKiomJiYmJiYmJiYqKioqKioqKioqKioqKioqKioqKioqKiYqJioqJiYmJiYmIiIiIiIiIiIiIiImJiYmJiYmJiYmIiIiIiIiIiIiIiIiIiIiIiIiIiIiHgXx4e3x5enp8fHx9fX9/fn59fX9/f39+fn+Af4B/f3+Af4CAgIKEh4eGhoaGhYWFhYWFhYWFjIyNkY+PjZGJjIaJjIuIiImMiYeNjo+NioqKioqKioqKiomJiYmJiYmJiYmJioqKioqKioqKioqKioqJioqKioqKiYmJiYmJiYmJiYmJiYiIiIiIiIiIiIiIiImJiYmJiYmJiIiIiIiIiIiIiIiIiIiHh4eHh4eHh4WAenl9e3t7enx8fHx9f39+fn19f39/f35+f4B/gH9/f4B/gH+AgoSHhoaGhYWFhYWFhYWFhISLi46PjoyLj4iHiYmMjYWFjo2KiYyNi46KioqKiomJiYmJiYmJiYmJiYmJiYmJiYmKioqKioqKiomJiYmJiYmJiYmJiYmJiYmJiYmJiYmIiIiIiIiIiIiHiIiIiIiIiIiIiIiIiIiIiIiHh4eHh4eHh4eHhoaHh4eHhH55eX16enp7fXt8fX5+f35+fX5/f39/fX5/f3+Af39/f39/f4CChIaFhoWFhYWFhYWFhISEhIuLjI6MjI2Lh4mIiomHgoeNjoiKi5GTj4uJiYmJiYmJiYmJiYmIiYmJiYmJiYmJiYmKioqKiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiIiIiIiIiIeHh4eHh4eIiIiIiIiIiIiIh4eHh4eHhoaGh4aGhoaGhoaGh4eDfXp5e3p5enx8e31+fn5/fn59fn9/fn9+fn+AgICAf35/f39/gIKEhoWFhYWFhYWEhISEhISEioqOjYmIiIqKh4iHiomIioiIh4qGi5GPiomJiYmJiYiIiIiIiIiIiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmIiIiIiIiIiIiHh4iIh4eHh4eHh4eHh4eHh4eHh4eHh4eHhoaGhoaGhoaGhoaGhoaGh4J8eXl6eXp7e3t7fX5+fn5+fn59gH9/f39/f4CAgH9/fn9/gICAgoSGhYWFhISEhISEhISEhISKi5CPiYmJi4qHh4WHiYuKiYSLjYmOjYqJiYmJiIiIiIiIiIiIiIiIiYmJiYmJiYmJiYmJiYmJiYmJiIiIiImJiYmJiYiIiIiIiIiIiIiIiIeHh4eHh4eHh4eHh4eHh4eHh4eHh4eGhoaGhoaGhoaGhoaGhoaGhoaGgXt4enp4e3x7e3x+fn9+fn5+fX1/f39/f3+Af4B/f39/f3+Af4CChIaFhYSEhISEhISEhISEhI+Qj4+IiYuIhoeIiYuLjIuJioqNio6Oj4iJiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIh4eHh4eHh4eHh4eHh4eHh4aGhoaGhoaGhoaGhoaGhoaGhYWFhYWFhoaAe3h5eXh4enp8fX1+f35+fn59fn9/f39/gIB/gICAf39/gIB/gYKDhoiGiIaDhISEhIODg4ODkpKOioeKi4qLh4uNiYqJi4iHiouIio+SioiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIh4eHh4eHh4eHh4eHh4eGhoaGhoaGhoaGhoaGhoaGhoaGhoaFhYWFhYWGhn96eXh4eHl5eXx9fn5/fn5/fn1+f35/f3+Af39/f4CAgH+AgH+BgoOHjo+PjoiHhIWFhoaFhYWSkI6KiYmIiImKioiIh4aKjIiHiYmOkJGNh4iIiIiIiIiIiIiIiIiIiIiIh4iIiIiIiIiIiIiIiIiIiIiIiIiIh4eHh4eHh4eHh4eHh4eHh4eHh4aGh4eHh4aGhoaGhoaGhoaGhoaGhoaGhoaGhoWFhYWFhYWFhYWGf3l4d3d3eXp5e3x9fn9+f35+fn5+f35+fn+Af4CAgICAf3+Af4GBg4eOjo6Ojo6Mjo2OjY2MjZCQjomHhoiJiYeIiouIiYyJiYaKjY6PkYuIiIiIiIeHh4eIiIiIiIiHh4eHh4iIiIiIiIiIiIiIiIiIiIeHh4eHh4eHh4eHh4eHh4eHh4eHh4aGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaFhYWFhYWFhYWFhYZ+eXd5d3d6eXl8e31/fn5/fn5+fn5+fn9+f4B/fn+Af39/f39+gIGEiI6Ojo6Ojo6Ojo6Ojo2NkJGOi42JjIiIiYaHiYaIioiHi4yLjpCQiIeIiYmJiIeHh4iIiYmIh4eHh4iIiYiIiIiIh4iIiIiHh4eHh4eHh4eHh4eHh4eHh4aGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoWFhoaFhYaGhoWGhYSEhIWFhoaFhIWFhX55d3l2eHl4e3x7fn5+fn5+fn5+fn5+f39+f39+f39/f35/f3+AgYOGjY2Ojo6OjY6NjY6OjY2Qj42Ni46KhoiKhISLiYeDhYSDi4mLj42JjI6QkI+NjYyLjY6Pj42NjI2Nj4+Pjo6MjYyMjY2KiYiHiImHh4aHh4eHh4aGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoeHiYqKiIeJi4yNjo2LiImLi42OjYyJiImMgHl3d3Z6eXh7e3t9fn5+fn5+fn5+fn5/f39+fn5/f4B/f4B/f4CBg4aMjY2NjY2NjY2Qj4+Pj46NjI6KiYuMjIeFiY2Lh4aIh4aHh4uNjo6Pj4+Pjo+Pj4+Pj4+Pj4+Pj4+Ojo+Pj4+Pj4+Pj4+Oj46Oj46Mi4uJh4eHh4aIhoaGhoaGhoaGhoeLiYeHiIiLjY2Mi4yLjY2Ojo+Ojo6Pj46Ojo6Ojo6Ojo6Njo6NjY2AeHZ4eHp4enx6fH5+fn5+fn5+fn5+f39/fn59fn9/f39/gH9/gIGDhoyMjIyMjY+QkpOTk5KSjYyMjIqHioyKh4eJiYWCiouIiYWJjpCNjo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6NjI2NjI2LiYaHh4eHiYqLjY6NjYyNjY6OjY2OjY2NjY2NjY2NjY2NjY2OjIyNj4+OjY2MjIyLi313dXd5enp7e3p+fn5+fn5+f35+fn5/f39+fn1+f39/gICAf3+AgYOFj5KRkJGSk5OTk5OTkpKLi4uLiomMiouLiYuKhoeOjYiIjI6OjIuMjIyNj46Njo6Ojo2NjY2MjY2NjIyMjIyMjIyMjY2NjYyMjI2NjYyMjI2NjIyNjIyMi4yMi4yMjI2MjIyMjIyMjIyMjIyLi4uLi4yNjY6Sk5OSkpSRkJOVlZSTk5COjo6Oe3Z2d3h6ent7e31+fn5+fn5/fn5+fn5/f35+fn9/f39/gIB/f4CBgoSNkpKTkpOSkpOTkZKSkoqJioyJi4qJjIuKioiHiYqKi4mKjY2Mj46Nj5KUlJOUlJOTkpGSkI+Ojo2NjY2Pko+OkZGOjIuKioqLi4qKi5CPjoyMjIqKioqKioqKiouKioqKi4yLi4uMjIyKiouLi46RkpOTk5SUk5STk5SUlJOTk5KSkpKSk5F6dXZ2eHt7e3p6fX5+fn5+fn5+fn5+fX5/fn5+f39/f3+Af39/gIGChIuRkZGRkZKSkpGRkpGRiYmIiIqMiYiJiYuJhoSJhoyKh4ySkpKTk5OUlZWWlZWUk5OUlJSUk5SUlJSVlZWVlZWUlJOTkY+QkZKQjoyRlZWVk5KSjo+QjYqKi4qKi42OjY6RkpCRkpKSkpGRkpKSk5OTk5OTk5OTk5OTkpOSkpKSkpKSkpKSj3h1d3l6e3t7ent9fX19fn5/f35+fX5+fn5+f39/fn9/f4B/f3+AgYKEi5GQkJCSkpKRkZGRkZGIiIiIi4uJg4eLi4yMiIeHjYyNkpSSkpOTlJWWlpaVlZSSkpOTlJSUlJWVlZaXlpaWlpWUk5SUlJSVlJSUk5OVlZWUk5KTk5OTkJGSkZGSk5OTk5KSkpOSkpKSkpKSkpKSkpKSk5OTk5SUk5OSkpOTkpKSkpGRkZGPdnJ3enp7e3t8fX59fX1+fn9+fn9+fn5+fn6Af39/f3+Af3+Af4CBgoSKkJCRkZGRkZCQkJCQkIeHh4eIiIiFi4+KjI6Njo+OkJWUk5OTk5SUlZWVlJSVk5KSk5KTlZSUlZaWlpaWlpaWlpSTk5OTk5OUlJOSk5SVlZSTkpKSkpOTk5OTk5OTk5KSkpKSkpKSkpGSkpGRkZGRkZKTlJSUlJSTkpGRkZGRkZGRkZGRkYx0c3d6ent7e3x9fX1+fX5+f35+fn5+fn5+fn9/f39/fn9/f39/f4GDhIqQkJGRkJCQj4+Pj4+Ph4iKi4yNjYuOj42Mjo6RkpGSk5OSkpKSk5SUlJKSk5OTk5OSkpOUk5OTk5WVlZWUlZWUk5OTk5KSk5OUk5KTlJSUk5KSkpKSk5OTkpKSkpKRkZKSkpKSkpKSkpKSkZKRkZGSkpOTlJSUk5OSkZGRkZGQkJCQkZCRinN0dnp8fHp7fXx9fn59f35/f35+fn9+f31+f39+fn59f39/gH+AgYKDipCQkZGQj5CPjo+Pjo+Oj4+Pj4+Pj4+PkI2OjpCRkpKSkpKRkpKTk5OTkpGSkpKRkZKSk5OSk5OSk5STk5OTlJOSk5OTk5OTk5OSk5OTkpKSkpKSkpKSkpGRkZGSkZCRkZGRkpKRkZGRkpGRkZGRkpKSkpKSkpKSkpKRkJCQkJCQkJCQkJGGc3V2e3x8e3x9fX1+fn1/f35/fn5/gH9+fX5/fX5/fn5/f3+Af3+BgYGKkI+PkI+Pj4+Pj4+Pj4+Oj46Oj4+Pj5CQiI2PkJGRkpKSkpOTk5OTkpKSk5KSkZGRkZKSk5KTkpGRkpKSkZKSkpKSkpKTk5KRkZKTkpGRkpKSkpKRkJCQkJGRkZGQkJGSkZGRkZGSkZGRkZGRkZGSkpKSkpKSkZCRkZCPj4+Pj4+Pj4+PkX9ydHh8fHx7fHx9fX5+fn9+fn5/f3+AgH99fn5+f39+f39/f4CAf4GBgYqPj4+Pjo6Ojo+Pj46Ojo6Ojo+PkI+Pj4+GjpCQkJCRkZGRkZGRkZGQkJCQkZGRkZGRkZGRkZGQkJCRkZCQkJGRkZGRkZGRkJCQkZGQkJGRkZGRkI+PkJCQkJGRkJCQkJCRkJCQkJCQkZCQkJCQkJCQkZCQkJCPj4+Pjo+Pj46Ojo+Pj4+PeHJ2eXx9fHp9fH19fn5+f35+f39/f4CAf39/fn5/f35/f39/gIB/gYGAio6Ojo6NjY2Ojo6Ojo6NjY2Oj4+Pj4+PjoiQkZCPj4+QkJCQkJCQkI+PkJCQj4+Pj5CQkJCQkJCPj4+PkI+PkJCQkJCQj4+Oj4+QkI+PkJCQkJCPjo+QkJCPj4+Pj4+PkJCQkI+PkI+Qj4+PkI+PkJCQkI+OkI+Pj46OjoyMjY2NjIqDiYhzc3Z5fX58eX18fX1+fn5/fX5/fn9/f39/f4B/f39/f4CAgH+AgH+BgYCJjY2Ojo6Ojo6OjY2OjoyNjY6Ojo6Ojo2NiJCRkI6Njo6Ojo6Ojo6Pjo6Ojo6Ojo6Pjo6Ojo6Ojo6OjY6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Pj46Oj4+Pj4+Pj4+Pjo+PjY2MjYyNjoyLi4mJiYiFhYSDgoKEgnR5fXp4dXJrZWltb2xmZmdncHNzd3l9fnl6e3x9fX1+fn59fn9/fn9/f39/gIB/f3+AgIGAgIB/f4CBgImNjY2NjY2MjYyMjIyMi4uLjYyMjIyMjIyGj5GRjIyMjIyMjIyMjIyMjIyMjIyNjY2MjI2MjYyMjY2MjIyNjY2NjYyMjI2MiomKi4uJh4KAh4iEgXt6gH57fXx8fXlzcnJycnV1cG1ramppZ2NkYV9bXF1eWFVXWFlTS0VJSkpLTE1PT0tgdHR3eX19eHp5e3x8fX5+fn1+f39+f35/f4CAgH+AgICBgYCAgICAgIGAf4OEhYSFiIuLjYyMjIuLi4yGiYqKioqKh4OOkJGNiouLi4uMiYmKioqKiouLi4eDi4qIiYmGhYWEhIeJiYWCg397fHl6e3pzcHFxcW1samdsbWdlZmVmZGNlZGVkZWVlZWRkZGNhYV5dXFpYWFdUUFFSU1JTTU1KSUZESEpHR0hHR0xOSWdzdXh5fXp4d3l8fHx8fn5+fn9/fn9/f39+f4CAgIB/gICBgICAgICBgYFnXmBjYWNucX17ent/fXd8fHZ4ent4eHpvcHt4eXt8e3h3e394dXd0dHZ0dHZ3dXFycW5wcnBnaGtsbm9tamlpaGhlZWRkZF9gYWJgYF5dWVhaWltdXV9gX2BfX19gYmFeXl5eWVldXF1bV1dWUlRSU1NOUUpISUZERUhMTEhGR0lLSklNbXJ0eHp7end3eXt6e3x+fn1+f39+f35/f35+gIGAf3+AgIGAgICAgICCgWdYW1pZXFtcY1xaXF5ga3FtcHBvbm5vbmtpbmxrbG9qaWtraWpraWdmZ2dnaWhnbWdqZ2hlaGdjY2JhYmBgXVhbW1dYV1RWUVBUU1NNSkxLTExOTk9UWFhXVVVUUlBQTU1QT05LTE1QUU9MTEpHSUlHSEhJSEhIR0ZHSEpKSEhISUlISVZwc3V5ent5dnZ5enp7fH59fX5/f35/fn5+f3+AgX9+f4B/gICAgICAgIGBbFtYVlZWWVlaWVlYVVZoamxubmxra2poaGloZGVkYlxiZl9fYGNfXF9dYF1eWl5dWVleYmFeXlpZX1xYV1NOTUxLS0tMSUtNTktKS0tMSktQTEtLRkdHSUlGR0lISUZFSEdGRkVERUVEREVJSUlHSEdIRkZLTUtJSUlIR0hLTU1LTExMVXFzdnl6e3l2d3h3ent8fn1+fn9/f39+f3+AgIGAfn5/f4CAf4CAgIB/gYJoUlRVVlNVV1lZWVdXV1tbYWNfXlxbWFZWWVZSVFJRUVVUU1NTUE1KTU5QUk9NUFFRUVFSVlZRUVFUUFBOTk9MSk1MS0xKSktLRklJSkxJR0pISUlFR0dGRkVFSElKR0ZHRkZHR0hKR0dISEpMSkpLSUlISktLSkhKS0pISUtMTU9QUEtUdHR1eHp6eHZ2d3d6enx+fX5+fn5/f35+fn+AgYB/f3+AgYB/gICAgH+AgmlQUlRXVVRWWVdYWFpbVFRTUlBRU1FRUU9OTlBQUU9MTlBPTk5NTEtNTk5QTU9QUFJRUE5OT05PTk9PUFFPTk5PTk5QTk1NS0lISEpJSUlJR0ZHR0dJSkhJSEhJSEhHSEdISElISUxLSklISkpJSkpIR0pMS0pJSUhKSktMTk1NTU9RTFVzcnN3enl3dnR2eHp7fX19fn5+fn9+fn5+gICBgICAf4GBgH+AgICAgICBbE9PTlRZVVVdW1lXV1hOTUpKSUZKT0xKSkdJSk1NS0pMTUpHSUlJSktMRkRGSktLS0hKTExMT01MTE5PT09NTk9MTk5OUFBPTE1MTk1MTEpJSEdJSElISElJS0xLS0pJS0pJSklJSUlJR0dKSUdJSUpKTk1OTEhJSklJSk1PT01MT1JOWXBwcnd4d3d0dHR3enx+fX5+fn5+fn5+fn9/gICAgICAgYCAf39/gICAgIFvS0pNTlFOTlVXVlZSU0lFQ0VFUkREQT5CP0RAQD5CREFAQURHRkVIRUJBQEBDQ0RFQUNFSEtPS0lJSkhHSklKSUlLSkxQTk1MTU1MTU1NTElIREZGR0ZGRklKSUlLSkhMSklKSkpJSEhKS0tIRkdJSklLTU5OSktPTUxLTU1PUE5QT1BgcG9yd3h2dHJzdXd6fX19fn5+fn9+fn1/gICAgICAf4CAgIB/f3+AgICAgXNQUE5OUE1KS1BSUE5RQ0RCQUZRRT1DPT9FSDk6Oz0/PTxBRUA+Ojw+PjxFRD4/RUE/QEFAREVHR0dHQkRERUZFR0dHR0pHSEpLR0NER0pHQ0RFQUFDR0hHSEdISktKSElMS0lISktLTU5MTUxMSkpMS0lLTU9PUFNRT1BQTk9QUlFNUGdwb3N2dXRycnR4eX19fX1+fn5+f4B+foCAgH9/gIB/f4CAgH+Af4B/gICCdlRVUVFQT0xNUFBOT09BQkFAQkE/Oz48Pj8/Ozg5OTs7OkA7Oz48Ozs8PEhMPT1BQT9CQz1BRERGQkZGREdJSEM/QEBAQUFCQUE/Pjw9PkFAQD8+P0BFR0dHSUtMTk1OTUxNTUpLTVBVU05MTlFOTk1OTU1NTk9OTk1LS05OTk1OTkxUbnBwcnR1c3Fydnh5fX19fn1+fn5/gH5+gICAgICAgH9/gICAgH9/gH+BgIJ4UVFSVFJTUVNTUVFST0BAPT4/PD8+QEE/PT45Ozo7Ozg5Ojg3Ojw5Nzg7Oz49Ozs6ODpAQEFCP0E/Q0ZEQkNDPzs+PkBDQ0E/Pj9BPkBAQj9APD9CQEFDRUVFSktQT1BPTU1OTExMT1JRUFJOTExPTUtOT0xMTEtMS0tKS0tKTU1LS1xxcXF0c3VzcXN4eHp9fn1+fn5+f39/fn5/gIGAgH+Af4CAgICAf4CAf4CAgXxSTU9RUFFSUlRSU1NOPDs8Ozs7P0BBQkA9PDk8PTw5Nzk6OTk4ODo6Nzg6OTo7Ozg3ODk7Ojg8Oz1AQUA9Ozs+PD09QEJDQT9BQkE9Pj09Oz0/Q0RCQD9BREJFR0pKSkpKTE1MTExNTExOVVNLTE1USVBKSU1KSUpLS0pJSEdKS0lKZnJxc3RzdXJydnl5e31+fn5+fX9+f39/f36AgICAf4CAgICAgIF/gIF/gYCBgFZMTlBQTlJRUFBRUU44PT88PDo9PkFAQT8+PkA/Pj07PDw+Pz08PTs6PD09PTw8PDw7Ozo7PD49Pj9AQUA+P0E/QEBBQEBAPT8/PTw6Oz09PD9AQUJCQUBCREZGRkdGR0dISUtMTExLTEtKS0lKSk1MTEpMS0lISUxMSklJSElLR01tcXF1dXR1c3V4eXl8fX5+fn5+fn5/gH9+gIB/f39/gH+AgYCAgYCBgICBgYCCYUtPT05OT1BPT1BQTzo8Pjw9Oz8+PkFBPz0/Q0NDQD48PT9BQD88Oz49PkNFPz9APTs9PT08Ozo9PkFBPz5AQD9BPz89PD48PTs7PD0+QUA/QD5AQ0NEQkRFSEVFR0hISEdGSUpJSUlJSUhKSkpKTEtKSklJSEhKSktMS0lLSkpIVnBwcXNzdHR1eXt7e31+f35+fn5+f39/f39/f3+Af4CAgICAf4GBgICAgIGBgIJtTFBRTk9QTk5PUFBPPjw8PT4/P0A+QEA/Pz9DRUQ/PTs8QD88O0tHODg6PDk9PUA9Ojw7Ozw7ODo7Pz49PD07PEA9PTw8Pjs9PD0+QUBCQUBAP0JEQ0RFRkZGQ0VHSElJSEhJS0tMTUpKSUpNTUpLSktJSEhISEpJSktKSk5MSUlfcHFycnJ0dXZ6e319fH5/fn5+fn5/f35/f36AgIB/gICAgICAgYGAgICAgIGAgnZNTk5NTk5MTE5QT0w+QTw8PT8+QkM/P0FBQUJBQD08PTs+Pjk3ZGw7ODo4ODo7PT8/PDs7PDs6Ozs+Pz89PDg6Pjw9Pj89Oz4/QEJDQkJDQ0FCQkFCQkRCQkRCRENGSUdGRkhJSUtNSklKSktMSkpJSkVESUlGRkhISUpKTEpGRmdwb3FxdHZ1d3t8fX18fn59fX1+fn9/foB+fn+AgH+AgICAgICBgYCAgICAgICBe05JS0tMTExFSUxOTTw/PDw9PkBAQUE7QkNCQ0FAP0BAPT1GSUpreU08Pj0/PT0+Q0Q/Ozw9PkA9PT5BQ0A8OTtBPz4+QT07P0JAQkNCQENDQUNBPT0+QD0/QUFBQENFRUBAQ0JDR0dFRENGRUZGR0VEQEFHR0ZDRkRHSEpHQz5IbG9wcHF0dXZ5fHx9fH1+fn1+fn5+fn5+f36Af3+AgICAgICAgIGAf4CAf4CBgIF9UUhLTU1NS0pLTE9RQD8+PkFBQEBBR0FCRUNEQkBAQ1tBUXR9gX17XD9AQENAQD9AQD49PD1ARUFCQkZIQz08QERDQUE/Pj1AQT4+Pj88PkBER0VAP0BBP0BDRkVDQkJDQEJEREJERUFCPkFCQkFCQEA9QUJDRENDQUNFR0E/PVZwb3FwcnV0d3p8e3x8fX9+fX19fX1+fX5+fn9/foB/f4CAgICAgYCAgIB/gIGAgX5SSEtNTUxLS05OUlVEQkBDQ0FBQkBCQ0BAQUFBQkBBb2N/hIWCg35pP0JDRUA/P05hX0pAQ0VJSUlJTU1LRUNGR0hFR0VFRUREQ0E/QD4+QkZKSkdERUZGRkpOTktKSUdHSEtMSkdHQ0REREVEQUJCQ0BDREVEREVERUZDQkFEZW9wcXF0dnV4e3x6fHx+f319fX19fn59f4B/f39/f39+gIGAgICBgICAgH+AgICAfVJJSUpKSEpKTE9SU0dGRUdIREdIREA+PDs+QEVGQ0p2gIKBhHuAhXREREVEQ1d1homKflhHSUpMTE1PT0xIR0hHSElJSEhHR0hIRUNFRUVFRkhKSkZFR0lKTU9PTU1LSktKTU5LSUhHSElIR0ZFRkZGREZIR0VFSEhGSEdIRlFubnBxcnZ2eXt7e3p9fX5/fX19fX1+fn1/f39/fn5/gH+BgYGAgICAgICAf4GBgIB8UEhHSElGR0lKTU5OSkxJSUpLTE5KRkNBQkNGSklJUXaBfICEgYOIcERDQVV0h4mHh4aHgldJTE1MTU5MSkdHR0dER0dHR0ZIRkhFQ0NERkVEREhIQ0NDR0pKS0xMTExMTElKS0pKSUlJSEpISEdISUhHR0hGRkZISklJSUlIXW9vcXJzd3d6e3t6e319fn59fX19fX5+fYB/f39+fn+BgIGAgYCAgICAgIB/gYCAgHxNR0ZIRkVGR0dKS0pMTUxLTU5NT0tJSEhKS0tMS0pVeIF+goSGhoeDVU5shIeGhoaHh4eHfFBLTEtIR0ZGREVDQ0BBQ0NDQ0ZGRUJAPj5AQUFAQkQ/Pj9ERkhERUdJS0lJR0hJR0lJSUpJSEZKSkpKSUpJSkpKRklMTEpKS0tmb3Bzc3V2eHl7e3t8fH1+fn19fX19fn59f39/f35/f4CAgICAgYCAgIGAgICAgICAfU9GRkdGR0hHRUZHR01NTUtMS0lHQ0NDRElLS0xLSlh9g4SEgYOHh4h9f4aFhISGhoaHh4aKdUlJRkI/P0A/Pz48PDw+Ojo8QUFAPjw5OTg8PD07Pjs5Oz9BQkFBQ0NDQEFCRURCQ0ZISUhISExNTEdJSk1NTk1KSktLSkxNU2xvcnRzc3d5e3t7fH19fn9+fX19fX1+fn5/foB/fn9/gICBgIGBgICAgYCAgIB/f39+UUZFRkdJSUdEQ0VGTk1MSklIRT85Oj5ARUhISUlLUXaEhoR+gYWDg4SEhIWFhoeIiIiJiYyOZkJCPTg4Ojo5ODc4ODk2NDc5Ozw6ODU2Nzc4OTc4NzY4OTs7PD5AOzk5OT09Pjs7PUFERUhKTUxMR0lIT1JRUFBOTE1NT1Fdb3BydHN1eHp7e3x8fn5+f359fX59fX5+f39/gH9/f4CAgICAgYCAgICAgICAgIB/f39RR0ZHSEpIRkVGR0hMTEpJSUdDQjU2OjxDQENHSUxIcYaFgX6Bg4KDgoOEhomKi4uLiomKi4yJVDs4NjU2NzY2NjQ1NzczNDY4Ojg3NjU2NTY3Njc3ODo3Nzc4OTs3Njg5OTg5ODc2OjxAR0ZJRklGRUZPU1JTU1JPUFBSVGVwcXN0dHd5e3x7fH1+fn5/fn19fX19f39/f3+Afn+AgICAgICBgICAgICAgICAgH9/flJISEhJS0lHSUpJSkpLREVIRUJANTc4OD06PUVDREt7hoSBgoODg4ODhYmKiomJioqKiouJiYqBSDY3NjQ2ODg3NDU3ODQ2NzY5OTc2Njc2NTo6Ojo6PDg5ODk3Nzc3OTo5ODg3ODU4OTtBPT4+QkE/QUtMT1FQUU9PT1FXa3JydHR1d3p7e3t8fX5/fn9+fX19fX5/f4B+fn9/f4CAgH9/gICAgICAgH+AgICAf39+VEhHSUlMTUtKS0tMSUg/QEFAPDo1Nzk4OTc7Qjo9TX6EgoOEhISEhIaJioqIh4iIiYqKjIqJiYx6Pjo4ODs8PT45Ojo7ODk7OTo7Ojk5Ozo5PT09Pzs7Oz06Pjs5Ozs8Ozw7OTs8ODo6Ozs5OTk8Pzw8QUJESUpNS0pLTFdvcnN1dHZ4e3t7fHt9f39+f359fX19fn9/f35/f39/f3+Bf4CAgICAgICAf4CAgH+Af35URkVGSUxOTkxKSk1CPzo7PDs4OTk4OTo6OTs/P0FKfYOChIWFhYaIiYiHhoaGiImIiYuMi4mKioxsPDs+QkNFRUFBQEI+QEJAQD89Pj5APz4/QD9APT0/Qj9BQT9BPz1AQEA+P0E8Pjw7Ojs6OTs/PTs7PT1BQUNBQkNBWHFxdHR0dnl7e3x9e31/fn9/fn19fX5+f35+fn9+f4B/f4CAgIB/gIGAf39/gICAf39/flJFQ0FHSk5PTElHSzo4Ojs5Ojo8PTo7Oz08PkBEQ1WCg4SFhIWEhomJiIiGhoaHiImKi4uLioqLiotePkRHSUtJSUZHSERGSEdFQ0BAQ0VDQkBCQ0I/QERIRUNFREVFQUZFRkRGRkRAQj49QD49P0A+Pz8/Pj8+Pjo7PTxgcXJ0dHV3enl6fX19fn5+f39+fX19fX5/fn5+fn5/gH9/gICAgICAgICAf4CAgIB/f4B+UERAPUNIT01HRkJEOTc6Pjo8Oz4/Pz89QT9CQ0dFaISDhYWGhoaIiIiIh4aGhoeJioqLjI2MjIuKiohXR0xMTUtOSklLSElKSklFQ0RGR0ZEQ0VGREJISUtIR0dGR0dFS0lLSUtLSkNGQ0NEQkFBQ0JEQ0NERENBPTs9QGhwc3R0dnd6eHt8fH19fn5/f359fX1+fn9+fn59fn+Af3+AgH9/gICAgICAgICAgH+AgH9PQT49P0RMS0BCQkE5ODw+Ozw7PkBAQT9CQkZGS0p1hIOFhYeIiImJiIiHhoaGiIiIiYqMjYyMi4uKjH9QTVBNS05LSkxJSUlISkZER0hISUVFSEZGRUxMTUlKR0dISUpOTU5MTE5LSEZHR0VFQ0ZGRkZERUhIRkNBP0BMbHB0dXZ4eXl5fHx8fX1+fn9+fn19fX1/f35+fn5+f39/f39/f3+AgICAgIB/gICAgICAf1FBPz4/RkdHPTxAQDk4PDs8PTo/QD5AQENESEhQW3+EhYSFhoeHiIiIiIiIh4eIiIiJioyNjIyMjIuKjXFNUU9NTExLTEpJR0VKSERKSEdLSkhKR0dHS0xOTExISElKTVBOT05NT0tJR0lKSElESUhIRkZHR0lGQ0JBQ1VucXV2d3l7eHl6enx8fX5+f39+fn1+fX5+fn5/f36Af4B/f3+Af4CAgICAgICAgICAf39/VERBQUJHR0I/OD9AOTo8OD0+Oz1BPj9BQ0ZISlRxg4SEhIWFhoeIiIiIiIeGiIiIiImJjIyLjIyLi4uLi15SUlBNTk1LSkdGQ0dKR0xKR0tPTEtKSk1NTE9QTkhJS0xPUVBQUU9PSklKSkxKTEZHSEdGR0lGRUVCQEJCXHByd3h5enl5eXp6e3x+fn5/fn59fX19fn9+fn9+f4CAgIB/f39/gICAgICAgICAgIB/f39VRUNFRUdHRUQ7P0E7PTw5QD4+QEJHR0FGSUlOVHiFg4ODhISGiIiIiIiIh4eIiIiIiIqLi4uMjIyMi4uNfFdWUlJUUk9MS0pFRUZLT05PV1ZRUE9RU1JOU1RPTVNMUFNVVlJTUlBMS01NTUtOR0dKRkZISkRERUVCRENjcXV5eXp6ent6e3p7fH59fX9+fX19fXx9fn5/gH9/gICAf39/f3+BgYCAf39/gIB/f39/f1VGRUdHR0dIRj5AQj0/PT1CP0JDRlZORUxOTVFWe4aEhYWEhIeIiIiIiIiIiIiIiIiJiouKioyMjIyOi4uLZ1ZWa2FFUlFRUEo7O1FTUmB1XVVWVFZZWVNZWFJaZlBVV1pdUlRXUVBOUlBQUFFLTEtHSElIRUZJSElISWpzdnl5enl6e3t8ent8fXx9gH59fX19fX1+f39/f3+AgIB/f39/f4CAgIB/f3+AgH9/f35+VEhKSUlHR0ZFPz9BQEVCQ0dFREVMWFJNU1RTVlh8hoWHhoWGh4iIh4iIiIiIiIiIiIiIlJyMioqMfWGKi4uHbFtkVTpYWFhTUD9AVlVZXGRgVllicl5dV11aVkVRWVpcWV9UWWdSVVZYVFRWU09PTUpMSklJTE1LT01Tb3R2eHl4d3p5ent6e3x9fH5/fn1+fX19fn1/f39+f4CAgH9/f3+AgICAgH9/gH+Afn9+fn5WSkpJSEdGRERCQT9ITUlNUEtJS1BUU1NXWVhaWXiFhIWFhYWGh4iHiIiIiIiIiIiIiImcnaCPiY5nO36MiYqLem5wWFpbWlJTUldWVFpadYNZVX2QYVxYXV5XSVZdXVtbX1lIWVhZXF1YWFlXUlFNUFFNTU9TUVFVUmFzc3Z3d3Z4eHh6e3t8fX19f39+fX59fX1+fn9/gH9/gIB/f3+Af3+AgICAf39/gIB/gHh5fVlOS0lJSUZCREBBOlBRUVdYUFBPUVNUVFdYWFlaboGCg4WEhYaHh4eHh4iIiIiIiIiIiJaanJeIioFuhomIh4OKf2ZZWVxZU1ZUV1JRV1ZjloBRZXJYWldfaFBgZlpbWFxoYkdPWmlnXFtcXV1XU05TUFBRVlZWVllab3N1d3Z2dHd4eHt7fH19fX5/fn59fn18fn9/f3+Af39/gH+AgH9/gICBgYB/gH1yfX9/b3R8XVNQT01LSkVDP0A7UFBaWltSU1FPUlJRVVJVU1dfdXiAhYSEhYaGhoaHh4eHiIiIh4eIh4ORjomJiIaFiIiGfYB7XFBWWFRSVFJRUUxPTUtmeVpdVFlVVl1aTFRaVFNUXlpYV1dXemtYWlxcXlNQUFBJTk9XVlhbWmRxdHZ2dHR2eHl5e3t8fH19fn99fX1+fX1+f39/gICAf3+Afn56eHd2c3V7f3+AgHRrfn5rcnleXFZVU1JPS0ZDREFNXoNsVlJTTk9RT1FVUlNSUlRjZHaAgoKDhISEhIWFhISDhoaGhoeIhn6JiYmHhoOHh4d5bXFWSUtOTktNS0hKREZIRUM+U2NVf1JQUU5LUlRRTU9ZUU1OUVNVVU1RU1JQTkxMSENJSFJTVFpdbXJ2dnVzc3d7ent7e317fX19fn19fX59fn9/f39/gH99fX5+f39/f4B+e3Zzd31+fmR1fWlxdF9kXV5bWVVRTElMSWFsknRQUVNOUVJRUltSU1JRUlVVYnN7fH+AgYKBgX99e3uAf4OChYaHgoaGhoGEgYaFhnVfXUtDPkNDQ0NCP0RQQ0NAQz5CSEdWQEhOTUddaVFIRk9GREVGSEdIQkNIR0hKR0RCQUNAT1BNUmR0dXZ1c3R1enx6e3t7fHx9fHt+fX19fn5/f3+AgIB/f3x8fX+Af39/f4CBgH12dHt/bWh8Z25xZmllZWJcWFNRUFVSc1dlW09PTkxRU1FVWVNVUVFUUk9WYGtsc3Z6e3h5dXJuc3RzeXh+foOAg4KCgIKAgoGBa0xHPj46Oz5APz8+PmpQS2FFRkhJRUI/R0xNR01RVUlCRT8+PD08PT0/PT9BQ0I/Pzw9Qj5KTUZVb3V1dnN0dnh7fHp9e3x9fX19fH59fXx+fn9/f4B/f39/enl3eHd2dnh7foB+fXt4dnx1YXhnbHBqbGppZmBbUVFaXFleSUpQUU5LTFFSUVRVVVdRUVdWUFhbYl1hZ21tbG9raGBucmptbHF1e3p9enh6fHx4d3hkQkBAQT06QkNBQUNBW1xPe05PT05LTE1PT1FMS0xXTUhHQEI8OTc3NTk5PTs7Ozg5ODk/O0FHPlx0dXV2dXZ3eXx8fH18fH19fX58fn19fX9/f39/fn9/f314dXd6e3p3eXh1d3t8eXh1eXdjcWhpcG1ubW1oZl5PUF5cWklHUFJRT01QUU5RUlNWWFNSWVROWVpbV1lcX19gZWBdXnF3a15gZ2t3b29sam9ubmxmYllHRkZIQkFGSUVFRkNMUU9hV1JYUVBTU1JVW09PUVZQTUlDRj46OjY0ODY5Nzk6MzY1Nzk1PEI9ZnR0dnd3eXl7fX18fHt8fX1+fnt+fn19f39/fn5+fn9/e3d1eX18enh8fHx8dHd2d3Z1d2tuaWhxbm9vb2prYFVXXlpXTUtUVFNQUVVPTFJTVFdZVFRYUUxYWVlWWFhWWFldV1dYaHNrXVZgdGthYV9dZGBfXllVUE1PTkxJR0pLSUhGQ1BPU1pXVFRNUVNZU1xlVU9TVFJOTElIQz9BOjk4ODk3ODg0NzU3ODU4OUducnV4eHp7e31+fX18e318fn5+en1+fH1/f359fn59f358dHR1e3hycW9vbnR4cXJzeHZ1cWZkZ3JucHBxbm1kXV9fWVdPUFdWVlNUVk9PVVZYWFlTVVRMS1RVVVVVV1BUVVdUVVJdbl5STllgW1ZZO0RVV1RbZkpMUFJST01NTk5OTEpGUFBVWVNUTkpOT1RTVFxWUlVTU09NTElISEY/Pz06Nzg3NjU5OTY3NjY1V3FxdHd6ent8fX59fnx9fXx9fX15fX18fn5+fXx8fX1+fXxydnF4eHJ1dXFxbnBwb3B1dnRuamRkanBwcXJwb2ZlZGNcXlJUWlZXVFNWVFJYWFlZWVJVT0pHUFBPT01SSk9QUFBOTk9UTE1JUFBTVFUyPFhNSUFRPWNgUVNRUE5QUVBOTk1QTlRSUFJMSUxLT1FQUVJTVFFTT0xNS0xMSENCQT06OTg3NjtCNDU2NjtlcHJ2eHl7fHx9fnx9fH19fX18e3h8ent9fX58e3l9fH18e3B1b3d1cHV0b3N2cHFxcHV1dmNqZ2VXaHRycnFuaWlocFZWVFVYVVZVUldWVVpZWFdVUVNGRUFGR0dIRkpESEpIR0VITEhLSUdMTVBNRy9FX1I+M0A+am9hUlJRQEZUUU9QUFFOUU9QT0xKTExPUE5OUFFRTlBPSk1NTUtHRUVEQjs9PTw5PUc2Njc3RG5xdXd6e3t8fH18enx8fX5+fXt5dnh3eXl8fXp6dn17fHp6b3Fud3JwdnFtcHNwb3Bzc3N0ZmdgaFpXa3JzcmxtbWtuYmVQU1RSU1VPV1ZWWVlWUVFRT0A+Oz0/QEJBQ0BCRURBQEdIR0hGRkhKTUxER0NPUkM4RU5TXWdTUVNBR1VQT1JRUE1NTkxKTEtMTk9PUU1PT01JTUxJTEtMS0dGRkVEPEFBPjtARTs8ODlUcXN1eXt7e3x8fHt5fHp6fn58e3V0dXJ2dnp6eHpyfHt8eXltcW94cnF1bm5xcm9vb3Rzc3J1dGtnZ15lam1wa25xbWltY0xPTk1RU0xUVVRXV1VMTEtIPTk4Nzs/QT89PUFAQj0+RUhGREZGSUdLSkBGQUFARkhFSk9IUVJhXFFQUk5TT09QTExPTUtNTE1PTltWS01RT0hKSENJSkxMS0ZGRkU/Q0M+PUJHP0I+QWRxdHd7ent7fHt6end8d3l9fnt7cXN0cHJzd3R4eHN6e3l2d2xxb3ZxdHRsb3Fybm5vc3ZydHNycmtsZW5zaG1ubWxtbGprSUxISE9RSlFTUVRTT0tIQ0U9OTg3OT9CPzs/QUBAPkFESUVDSEdJR0lFQkI/PjxDQkFHSURNT2FlUE1PTldLTE5LTE1NTExLTk5TZE1KTFJISUpGQUlKTE1OS0dJRkJBQkA/RUZFSERMb3B3enp5e3t6fHp3c3h0eHx8eXpucXJtbm9ycnZyc3h8eHZ2bXBtc3B1dGxwcHJvb29ydnVyVlZucWdseYRqbXFybm5qaG9ISkNHTExJTVBNUE9HS0U/Qj05OTk6P0I/PEFCQkFEREdLRkRJSUdHSENDP0I/P0BBPkNFQ0tOUVRLSklNVEZJSUpMSktLSUpMTU9QUlBLR0NMSERDSkpMTU9NSUpJR0NDQ0RJSk1MSVpzbXh5eHp7e3l8dnJwdXJ0eXl2eGpxbmpsbG50dG1zdXtzdHhyb25xb3ZzbnBvcnBvcHN0eWpOYGdzanR8eWdvc3FpcWhlcUhLQ0ZHR0dKS0lKTERHQj0+PTo6OjtBQj89QkJDQ0hGSkxKRUlJRkdHQ0M7QUBCPkBAQ0VDSU1PR0hLRkhLREhJS01ISkxISUpMSk1dUklIRE5HQkVLS05NUE5LTUpLRkdHSk1OUU5MY25pd3Z2e3h7en1xbWxza3B0dHR1aHBtamlra3RwbnR0eXByeXRvcnFvd3NvcXB0cnBydXR5a05WbXVscXt2aW5vaWp0aGRwRktDRkVGREVFRkVHQ0NAPjw9Ojs6OkBEQD5CQ0VFSUZKSkxGSUlHRkZDQjtCQ0M+QENDQ0VHTE5IS05IREhFSUxOTUdJTEdGRklJTE5LSkhFT0lDR01NTk1QTk9PTUxJSElPU1FSTlJmZ2Zyb3N4dXt6fGxoam9la3Btc3FmbWxoaWtsdG1wdXR3cW94dG90c3J2c3BxcnRzcnR1dXZ2WFZ1dWtvdHJrb3ZsaG1lX3BHSUNFRURCQ0JFQERCPj8+Ojs7PTs9P0NBP0FDRkdKR0pJTEhHR0dGRUNAPUVFQj5BRENDRUdJSUdNUElGRkdLTk9LRkhJRkVERElJSEtJRkhQS0RKTUxQTk9OT1BOSkpJTVJVVVJPV2RhYW1ncHJvc3l6Z2VoaGNpbGdxbGZsbWdpa2xzbXB2dXRwbnZyb3Nyc3V0cXNzdXRzdXZ2dnl2dXR2bGt1dW1ydnFsbmxlck1HRUVHQ0FBQkQ8QkE+QT06Oj0/Oz4/QEI/QEJFR0pGSUdJR0ZGRkVEQ0FBRkZDQkJCREVFR0dIRkxQTElPSkpMS0lHSEVGRURDSUhIS0pHS1JNQ09PTlFQT09OT09LS0tQVVdWVVNYX15daWFtaW5ocnNiZWZmZGloZm5pZm1taGtrbXJpcXZ1c3Ftdm5vcXJzd3Nyc3R1dnZ2dnd2d3Z2dHd1a3N1bnV0c3Bya2tzTUZHRUdCQkFERDxBQUBDPDg5PT46Pz0/Qj9AQERGSEVIRkZIRkVFQ0NFQkNJRkNHRUFFR0VGRkdFSk1LSFFNSktISElFRkhIRUNJSUpLTUtQU05EUlNRUVJOT05OUE1MTlNXVldYVlhdWl1kYGhiamlna19kZWZjZ2dna2dna21rbWxwcWd0dHVyc252b3FwcnR4cXNzdXZ1gpF5dnZ0eHV1d3hub3VvcnN1cXFpcHpNR0dHSEJCQkZFPEBDQkQ8Nzo9Pjs+OkBCPj8/Q0VGREZEREdFQ0VDREVGRkpFRUlHQkdIRkdGRUNGSkpHTUtMS0hKTEZJSEpIRUtLTExOT1NUT0lUVVRRVFBRTU5RTk1RV1pWWllXWl1aWGFgYGBfaGVjYGRlZ2dqaGhqZmhubGxvbXFwaXV1eHJycHVwcHBydXZwdXN1dnV7fn14dnR3dnZ2d3BsdXBtc3Vub3NzeU1ISEdJREJDSEU8QEVCRDw4Oj4+PDw9QkI9Pz5BQkZDRUJCSENDREVGRkdHSUZHSkhDSUhHSUdGREhLSUdLSU1LSktMSExKTUtJTkxOTk9SVVZPTFZWVFFUUVJMT1FQT1RZWllcWlpcX19eYGNeXGFja2JgZGdocoVoZ2lmam5ucG9uc3FqdHV4cnNzdHJucHF2cnF0cnV1c355jn11dXZ2dnZ4cml1cWtydGxxd3F1S0lLSEpFQkVHRTxAR0REQDk8PkA/Pj9DQjxAPkFBRkNFRENIREZERkZISEZIR0lLSkVKSEhLSEZGTEhISEpITUxMTExJTUtNTk1PTFBQUVVWV09LVlZVU1NSUUxPUlJRVltbXV5bXV5gYGFgYmVdZGBlZ2BlaGpjc3NmamhnbHBycW9zc25zd3dwdXZ0c21vcnVvcnNwdXJ2cnSBd3V1dXd2dXdzZ3Rya3Fya3J3b3dJSkxJS0dCRURFPEBGRERCOz8/QUBAQERBQEI/QUNIQkVERkdFSUVGRUlIRklISkxISEpKSUtKRkpLSElKSkdLS01NSkpNTE1OTk9MT1BSVVdWTU5UVlVTUlFQTU5UU1JXW15eX11eYGBhYWFgY2RlYmNpY2Rpamd2i2xraWhtb3NxcHFwcHJ5d3J1dXRzbW1zc21xcm90dXRzcHN3dHV1d3Z1dXVlcXNrcHFqcnZwd0pNTExNR0NDQUQ8P0VFRUM9QUFDQkJDRUFDREFBRUdDSEdIR0ZKRkRHSkdHSkZJTEhJSk1KTUxHS0lIS0tOUUtSUUxTTUtOTU5QUFBUT1dYWFtOU1FXXFpTVlBOVFVUVFhaX2JiX2RhX2BiX2BlYmFjaW5pY2loaG14dmxoaW1vc3JwcXJycnZ0c3Vzc3Nua3NxbXByb3R2cnJxdXZ1c3d5d3V0dWNtdGtvcGpxdHB3TE1MTExHRUFARD4+REVGQz9DQUVDREZDQ0VHQ0JJRUJISklISEtGREtKR0hKSElLR0pKTktOTElMSEpNS1pmSmRcS2xSSE9NX25VbHNbcXBid2NSUGJ2dWh1Y2F2YFhucWJkdmluemZcbHRgbGtVX3d2aWpoaGZnbG1qbW9qbW5zcnBycnFyc3Jzc3J0cm5sdG9ucHFxdXVxcXN0dnZ1dXl3dXR0YGt0a3Bwa3FzcXlLTkpLSkZCP0BCPz1ERUZDQ0NCRUVERkJGRkdEREpFRUpMTEpMTUdHTUpISktHS0pJSkpOTE1NTExJTE1MW3NiZHBebGxVTU5mc15nZnFsbnRncGlfYVlubWJwcGJrampnb3F0ZXRub1xvdWdwTUtyeXZrYmFrZWVseG1rdmxucHNycHJxcHFycXJycnRybW1zbm5vcHJ1dHFzc3R1dXV0d3h2dXRibXVrcHBscnJxektMSUlHRUQ/QUI/PUJFR0JGQ0VERUVEQ0hIR0RFS0hHS01NSk1MRkpOSEpLSklLSkpKS01NTk1NTUtOTU1bcm9vbnBwbGtOUFFsWE5pYnRycGFtb3ZcWWxQW21tWnFta29teHh0c2lwXGBzbHFqVXV5eG9jXmtmYmdwcGppb3BwcnNwcXBxcXJycXFycnRsbXJtbW5vcnV0cXRydHV1dHV1enZ1dGVudWtwb2xzcnJ5SktHSEZFRUJBQj0/P0VHQkdESUVFREJGSUhIRUdLSkdNTU5LTU5HTE5JTUtISU1JS0pKS05PTk5NTE5NTFxoZHVdbHFXbE5QUW5VWmtea2x2YWxkdFRlY05sWWxcdHBraWx4and1aHBdX3NraFdiY3d8b2NgZ2hhZGl0eWtvbnFzc3BxcHFwcnFwcHBydWttcW1tbW9xc3Rxc3J0dnZzd3Z6dnV0aG91bHNvbXNydHZJTUdJRUVEQ0FCPEJAQkZDR0ZLR0VDQ0hLSEhGSkxLRk1LTFJSTEdNTUhOSkhITkhKSklITk9OTkxKTU1KWnNwcG9xcW1sT1FTb1lxa2dvb3Fxb210Xm5YYXRfbm9wb3Fyb291c3R0altedGN3eHJqbnpoYWFjZmFiam10dXBzdXZzcXBwcW9ydHt/fn13bGtxbmxtbnByc3F0dHN1dXR4eHl5dHVrb3VtdG9udHN2dEhLSEpDRUVFQEA+Q0NBRkNISk1JRkNGSkxJR0ZLTUxGT0pLV1JLR0tKSk5JSEpMSUtKSUhKTE1NTElLS0tTa2JaaV5famNyclpfWmpvYGVlVWtfY1thYlFgbWhcalxuaWlkW3BmZHBdWlxrW21xY3BzbGRnY2RnYGBrbnBwb3R5cnVxb3BxbnmFiIeHhoWAdnNua21tb25xcnR0cnR1dXZ5eHhzdW5xdW52cXJ1dHdySEhGSkRFREZBQEFFRENHQkhKTEdGQ0ZLTElFRkpPTElPSUxbUUpGSEhLTUlISklLS0lISUdLS0tLR0hKSkxMTEtJS0xOVFtdVFBVTVFQTk9PVVJQT1FPT1FKSk5QUWRxaVRZV1tbXFVZW11YXVxcY2ZhYWZiY2ZfX2ZrbWhtdHlydHJvcHB0hoeGhoaFhYaHg3pwbW1sa3FzdHRydHZ0dXp5eHV2cXJ1b3ZydHN1dXNHQ0VHRkZBRUM/Q0dERUdDSUtMSEZER0pMSERHSVBLTE9LTFdNSUZFSElKSElLSExKSEZISEpHR0lFRktISUtOTElPXFdeT1xcYF5PWFlTXFxiXk1ZWk1YYVJLWWFaU2BkXWJYW2RkVlZYXFlaWFxWWVxeY19kYGFfZWhrZ210dHFxdHBxcoGGhoaFhoWFhYaGhoR9cmtpb3Jzc3N0d3l5eHl4d3h0cXhyeHNxcnVydE9CQ0RMTUJDREJESUVHR0ZLSktIRUVKSkpGRUhIUEpMTUpNUklIRUFIRkpJS0tJTEpIRkVKSEVGR0VFSkdCSk1KS1RfWWBYYGFbYFVYWVReXlpfUllcUF5cWU5fXF5TW15jX1pdYGNgWV9iW2BeW1RZWFpfXmRiYmFjZmlla3Jwb3Bwbm53hoaFhYaCe4CFhYaGhYaFf3VxcHJyc3Z5eXp5eXh4eHdyeXZ4cnF4dnR2YVNKSk1JRUNCQ0ZHRUdHSUpKSUlERktLS0VGSUlOSk5MSExOR0hGPkdHTElLS0pLS0lHRUlFRERFQkZKREBKS0pPW2NZXl5hX1JUU1dfYFxdWV5RWVxNVl9XS1FZW1FbX2FhXV5jYWBiYmJjY2VaUlhWVlxbXmNgX19jZWJob21tbGxsbHWFf4SDeXV8hIWFhYaGhYWGhoN9d3JydHd5eXh5f359eXV5dnZybnp3dnhYUUpGQ0dFQkVHSEZHSElGR0pHSEZIS0lMRERKSk1NTExISkpISkc/R0ZOS0tLTUtLS0lHSEREQERBSElBP0lKR1BdYVpbZF1fVFFSWF1cXFxfWktXXExSXFlJTV5RUV1fYWNjY2NiXGRjYmRjZlhRVlVTXFhbYV9eX2FhX2Rsa21qa2xudn51gXp8hIWFhYWFhYaGhYaFhYaGgnpyc3V1e4WHh4eGhYSBfnhwend2eFxSTUJASUZDRktJRkZHSUdHSkZGRklMSk5FREpKTE5KTElLSklJR0JISFFNS0tPTEtLSUhHRUQ/RUJISEFBR0ZEVF1ZXlhfWF9bXVVYWFBdXVFLSldeWF5bXVZaYVJSX19iYmBgYmJgY2JiZGRiWE9SUVNcU1xeXV5eX19gZGhnbGpubnB7e3x+e4CCg4SFhYWFhYWEhIWDhISHh4FzcneFh4eHh4eHh4eHh4WDgHx4XFNLQkFHRkRHTVJIRFJLRkhISERGS0pNUEVHSUpLTkxMSUxLSUlHREhLUU9NTFBMTEtLSElDRUFFQ0hHQkFGRUJWVUVcVF1TVmBYTlRVTlpbTUpLVWBhW19YX15iXU9ZYlxgYF9iY2JdYmJXX19UUE9QUVlTXlxcXV1eYGJmZmVsZm9vd3x7gHt9f4CEhISEhIWFhYODhYKDgoWFhnpvgYaGhoeHiIeGhoaFhYSFg35JTkZERkZHRElSY1FEV19JR0dIREZNSlBQRkpJSktOTExLTUtKSkdFSk5RUU5PT01OTU5IS0FEQUNERkRDQURFQUxIQ0xMUE9PTUZNRkZISkhHTExNT1BJTE9QUFNQTFFTUlVaWVdZWFhkVk9TVFBQT05RVVRcWVlbXVxhYWVmY2hka2xxc3N6eX97en+EhISEhISEhIKEgH57gYOBfXuFhIaGh4eHhYWFhISEgoGAfUtJRUVHRkdES01eTUdIWU1ISEpIR01MUVFJTEpLS05NVU5PS0tMR0dLUFNTTlBPTk9PT0hMRmBFRF9MRGZjRE1bSF5cc21PTVZtWUxDUF9VbFdnSl1XVV5ETFFVTE1TVlFSVFhXVFhVVFxUUGZaaGhkWVRrVFhXVVtcW2BgYWJiYmBnaWdubGhyenx9foGEhISDg4ODgX19enJ7gXp7f4KAg4SEhYWBhIWBg4N/fnp7TElFRkZIRUVLT1RKS0dgVEhKT0pJT01SUUtNS0xPUlVST09KTE1HSE1RW1lPUFBOT1BQSktRf1FJfFlZcnNXUG1IcW5vYVZQcXF0T0Jrc25xdHBTb19bblhdVlxYVWtoVV1WY1lgWVpfVlVXf2p0dXVfYXZfWWNcXGZbX2FhYWJeYGJnbXBsYHB3dHiBgYKDhIJ/fX6Adnh6bXZ+dHh+gHx+gIGChHyAg3p/gX9+d3dOSUVITU1CRExMR0pMRlJWTExPSEtSWFdRTk9PTFFUTk9RUEtLTkdNUFNbWlRRUk9QUFBLSFp4XVR4ZGhZUlNQdmd0bHBibmZrUnJPTHdtanJwc3JxcnBvcIBdZnp1eHFxenF+cn1rdX1iUmh8ZXNzb3NzfH1wfnlvf3JfYGBiYlthYGhrbmtibGZnbXd+gYCDfnt4d4B0dnpocn5udHx+d3h7foCDeHyBdXx/fHxzc05LRmBdR0FFTU1IS0tIS1FPTU5KTlZeWVVMUVNOWVlMU1NSTkxQSVFSVFlXV1FUUFBRUktHZ3hsY3hxbVpLTFR5cHVtdWJudlBkZUlldnFtd2+AamZ4eGlYclJpe21panp6fmx4en9wZ29YdnZqdnVwgGFzaH1pbHh8b19fX2NiXF9kZWZpamRnYmNkbGxwcHN0c3NzeXFyeGJsdGdyeXtzc3V5foFzdXpufH15eHJuTkpSdE5DQkVQUEhLTEpMUU9PT01QWmBaWEtUV1BhXlJWUVlTTVBKU1RVWFdXUFVQT05TSktyb3V1cXVxZGhhVm5McXBeR2h5V3ZUS2h5fXhgeXtzbmFebW9kU2dydW5teXB3bHZzdHFsbVxzfnprbXl8bHVtfGtwdnV4Xl9fYl5dX2VkamhoZWVeYmJpaWlqa25va3FubWpwYWNmZG93eG9tcHN5f25xcGp7enRyb21MS1pWSEdFR1JQS0xOS0xRUVBQUFFXXFlVTlZZVWZYUlJZXlRNTkpUVFZXWVdPU09OTlFJUm1IaXdLYGR2dVVXbE9ubHtyYWpnf3ZVS1draH1sbWx4YFtwentfYHpzY3JveHFoZHxpcntdVEtsX3Z1a2l1e3ttfnhrfHBdXl5iW15iZGVoZmVlYlpjY2lra3JzcndnbWloZGdgYWxhZ3Nya2htbXJ8a21oa3t0bW1rbU9HSktISkhIUlFNT1BNTFNTUk9TUldSVlRQV1pWVlRUVGFgUU9OS1RTU1FWVk9PTU5PUEpIUU5QVUxLS1JTUlJUUFZVUVFPUlJYWFFOUFVUWFhYW1tVU1NXW1dYV1pQU1VXV1hRXVhWXVVTT1hSVldXWFpgW2dyXltcW11dX2NaX2NjZWdlY2NiWmNjZ2ZmbW5tdWZmZ2NgZl9dZ2BkbGhmZ2tocHpoZ2drdWpoZ2lsUElLS0xNS0pUUk1SUVBMVlZUUFRVWFVaVVJaXVZVVFdVWVhQT0xOV1VRTlVTTlBOTFFQS0lRUUtRTUtLT1FUUlFRU1NJSU1OT1FSUVFRVFZSWFdcV1NTUFJVVVZUWlFOU1JXVVRZVlRZVVNSVVNUVVhYV15aX2FdXFtaXV1gY1xdYmJkZ2VlZWJZYGFjYWJoaGluY2FkXl9jXVpkXGJtYV5mZmdtc2RpaGtrZWRkZmhRSktLTk9MTVRRT1RRUU1YV1VUVlhXV1pWVFxgVldWWVVYVFFQS09YVFFOVVBOUU5LU1BNTlVTTlJOTU5RU1BUUVNUVU5MTk9RVFRSUlFWV1VZWltZU1VSVFhXV1lbU09TVVdVVFlVVllUUlJXVVZYXFlbYF1WWV9dXl1cXWBhXltiYmNoZmVlYlhgYGJdYGhlZmRhXl9dXV5aWl9aX2dgXl5dY2hrYWhmaGZkYGJkYlBLTUxQUUxPVFBQVFFPUVpZWFdZWlpYWVZdamRWWFlaV1ZUVE9LT1dVUE9UUFBRTk1RUU9SWFNSUU9NT1NVTldRVFVVT05OUVNVVVRUUlRYVlpdXFpWVlFSV1hWW1xWUFNWVVVWWVRXV1RSUlhWVltfWl5gX1ZfXV5gXFxgYF9fWmJiZGhoZWViWWJgYl5eZmRjYGJdXFxcXFlaW1hbYVteXV1fYl9fYmRkYmRfX2BcUE1OTlJRTVJTUFNUUU9VXFpaV1tbXFlaW2RxbWhkX1tZVlZYUk1NVlNOTlJQUlJPTFBTUlVaVVRQUExQV1VRVlJTU1hNT1BRVFhVVVVTVVlYW15dXFtWUk9VVlZbW1dRU1dVVlhVU1haVFNRWVdXXV9bX19gVmJcYGFeYGJfXGBdY2FjZ2llZ2FaY2BhX19lZV9gY1taXFtcWlpZWVdcWVxbYF5fW15eYWBfY1xZYFpRTk9OVlFQVVNQVVRTUFdcXFxZXlxfV1xeanB3eX9jXFtWVllSTk9XU05RUlFTVFJMUVRTWVtXVU9STlNYVlNSVFJSWk9RU1NWW1ZWVlRWWlhdXlxcXlZTTlRWVltcVlFUVlZYWVJTWVxUUlJcWFpdXl1hYWBXYltjYl5hY19cYmFiX2RnaWRoXlxlYGFgYWNkX2JfWVpfW1xbWVhZV1daW1phXV1bXVxcWl1gV1tbWlBPT09ZUFVVU1JXUlRQWl1eXVxgXGBVXF1oanJ9cmxoXFVZV1FPUltTUlFUU1VVVEtSVlVaWlpTT1NSVVVVU05WUlNaUlRVVFhdV1hYU1hcWF5dWVteVVVOVldXXlpXUVVVWFhYVFZYW1RSVl1ZXV1hXmNjX1lgW2ViX2RkXl5jY2FeZWZpZWdeXWRhYWFiY2RfYl5YW19bXFtYWFhYV1taW2BdW1tcW1haW15WXlldUE9PUlpQW1VVV1ZUVFReXmBfXmJcYFVdXmJreXRsfWxaVVpWUVFUXFRUVFVVVllXTFJaVlxaXFJQVVNXVVVTT1dSU1dTV1ZWW11YW1lVWl5YX15ZXFpSV1JZWFlgWllTVVZaWVpWV1lcVVRaXVxeYGFgZWRdXl1dZWFiZmReX2RjYFxnZGhmZWJfZGFfYWFiYl9gXldYXlpcXFpZWldWXVpdXltaW1xbV1lcXVZYV11TT1BXWVBdVVZZV1dVWF9gYWFgY11gVV1eYmVldoJ7aFhZWlRWVFZcWFdXVlZXXVhPVVxZXl1dVFNYUldVU1JTWFJTVlRZWFhdXlhdW1VeX1hfX1hcVlFZVVlaWmFYXFVWV1paWlhZWVpYVl1eX15jYmJlZV1iXGBmYmVmZF9gZGJiW2ZiaGZjZmFmX19hYmFhYF9eVlVdWVtcW1lcWVldW1tbWFhZW1laWl1fXVRZXVVOU1pXVFxVVldZV1ZcYGFiY2FjX19WW2BkYV96dW9oWlxaVlhWWFtaWVxaWFlgVk9UXVtgYVxVVVlQVFZUUlZWUlNVV1tbXF9eWl9cVl9fWl1eWV5WU1lYWlldYlleVldaW1tbWlpZW1lZX19gYGRjZGVlYmRaYmZjZ2ZlXmFjYGNeY2NpZWRnX2deYmJjYWFgXl9YVFpaWltbWFxYWFxbWltXV1pYV1xbXGBdVl1dU09WWlZWWlZZVVhXWF5gYmFkYWRhXllZYWRiYGtmaF5cXVtXV1laXFxcX1tZW2JWU1deXWFjXFNWWVBWVVVVVlZTVlRYXV1fYGBdYV1XYF5bXlxbXlhWWFhbWl9fW19YWF1cXV1dW1pcWFpfYV5gZGNkZmZmYlljZmVoZ2ReY2FfZWNdZmlkZWlfZ15jYmNhYWBfX1tYWVtZWlpYWlhXW1taW1dYWlRZXVxaYFxVXmJNUldZVldaWVtcWVdZXmBiYWVhZGFdXlliY2JfYWBhX11dXVhXW1tdXV9fXFpdY1hZWF1gY2RfUllZUFdWV1hYV1ZXVl1dXmBhYV9iXllhXV1eWV1eWVhVV1tbYF5dX1lZXl1eXmBbWlpZW19hX2JkZGVmZ2diWmRmZ2lnY19jXmBmZVpoaWNmaWNmX2JiY2FgYF9dXVpXW1lZWFhaWVdaW1pZV1hWVVtdXV1gYGJieEtXV1xZV11cXF1aV1xdX2BiZGJjYV1gWGJjYmBjYWNeXF1cWFdbXV9dYF9dW2BkXFxYWmNlY2FSXFlPWFZZW1pZV1paYF5hYmJgYWNfXGJdX11bX15ZWVRYXV1fX15fW1peXmBiYlxcV1tdYGJiY2VkZ2ZlZ2RcZWZoaWZjYWJcY2dgXGlpYmhpZmVgYmFjYV9gX11dXFlcWVhXWFlZV1xbWldWWFBYWl1hY2Zmcmt/SllXXVtaX11cXlxZXVteX2FjYmFhXWJbYmRhX2NiYl1cW1pXWGpxYFxgX11cYWNfXllZY2VkYlRfWlFZV1xdXFtaW1tjYGNiY2BiZGFgY15gXF5fX1pYVltfXVxhYV9dW2BhYmViXlxTXF9gY2RkZmVnZmVmZV9mZmhoZ2RkYFtmZ15haGhiaGhmY2BiYGNiX19fXV1bWltZWFhYVlpWXFpaVlZVTFhXXGdpa2h1eIF2dnZ2dnZ2dnZ2dnd3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d4eHh4eXl5enp6enp6e3p6ent7e3t7e3t7e3t7e3t7e3x7e3t7e3t7e3t7fHx8fHx8fHx8fHx8fHt7e3t8fHx8fHx8fHx8e3t7fHx8fHx7e3t7e3t7fYmIhoqHhYKBgoOCg4OCgoKCgoKCgoKCgoGAgYCBgICAgYCBgYGAfnx8fHx8fHx8fHx8fHx8fHZ2dnZ2dnZ2dnZ3dnd3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3h4eHh5eXl6enp6enp6ent7e3t7e3t7e3t7e3t7e3t7e3t7e3t6e3t7e3t7fHx8fHx8fHx8fHx7e3t7e3t7e3t7e3x7e3t7e3t7fHx8fHt7e3t7e3t8iYmHiYaFgoGCgoGCgoKCgYKCgoKCgoKBgYGAgICAgICAgIGBgYB9fHx8e3x8fHx8fHx8fHx8dnZ2dnZ2dnZ2dnZ3dnd3d3d3d3d3d3d3d3d3d3d3d3d3d3d4eHh4eHh5eXl5eXl5eXl5eXt7e3t7e3t7e3t7enp6e3t7fHt7e3t7e3t7e3t8fHx8fHx8fHx8fHx7e3t7e3t7fHx8e3t7e3t7e3t7fHx8fHx7fHt7e3uHiYiJhYSDgYKCgoODgoKCgoKCgoKCgYGBgICAgICAgICAgYKBgH58fHx8fHx8fHx8fHx8fHx2dnZ2dnZ2d3d2d3d3d3d3d3d3d3d3d3h4eHh4eHh4eHh4eHh4eHh4eHl5eXl5eXl5eXl5e3t7e3t7e3t7e3t7enp7e3x7e3t7e3t6ent7e3x8fHx8fHx8fHx8fHx8fHx8e3x8fHx8e3t7e3t7e3x8fHx8fHt7e3t7e4aJiYiFhYOBgoKCg4OCgoKCgoKCgoKBgYGAgICAgICAgIGBgYCAfnx8fHx8fHx8fHx9fX18fHVwb29vb3Bwen59fX19fYSMi4uLi454KSkqKiopKz0/Pj4+Pj5tgH5+f397pdfT09PT1r2GiYmJiYiNsbW0tLSztZWHiYmJiYqMjY2Njo6OiX9/f39/f359fHx8fHx8fHx8fHx8fHx8fHx7fHx8fHx8fHx8fHt7e3t7hIuHh4aHgoGDg4GCgoKCgoKCgoKCgoGBgYCAgICAgICAgYCBgIB+fHx8fHx8fHx9fXx8fH19dXBub29vb296gH9/f39+hpCPj4+Pk3kZGhoaGhocMTMzMzMzMmqCf4CAgHut6eTk5OToyomMjIyMi5G7wL+/v7/BmoqMjIyMjI6Qj4+QkJCLf39/f39/f319fXx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx7e3uCjYeIh4eDg4SCgYKCgoKCgoOCgoKCgYGBgICAgICAgICAgICAgH58fHx8fHx8fXx8fH19fX12dXV1dXV1dXZ3d3d3d3d4eXl5enl6eG9vb29wcHBycnJycnJyd3p5eXp6en6Dg4ODg4SBfHx8fHx8fYGBgYGBgIF+fHx8fHx8fX19fX5+fX18fX19fX19fX19fX18fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx7e4CMhomHh4SDhIKCgoKCgYKCg4KCgoGBgYGBgYCAf4CAgICAgICAfnx8fHx8fHx8fX19fX19fXZ2dnZ2dnl3dnZ6e3h7eHd2eHt3enp6fnl4eHl4eHh5eXl5enp5eXl5enp6eXh4eXl5eXl7e3t7e3t7enp6enp5enp7e3t7e3t7e3t7e3t7fHx8fHx9fX19fX19fX18fH19fX18fHx8fHx8fHx8fHx8fHx8fHx8fHx8f4uHi4qIhIODgoKCg4KBgoKDgoKCgYGBgYGAgIGAf4CAgH+AgYF+fX18fHx8fHx9fX19fX19d3d3dnZ3fXh3d316eH14d3d5fHt8fHp9end3d3d3eHh4eHh5eXl5eXp6ent7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7fHx8fHx8fHx8fHx8fHx9fX19fX19fX19fX19fX19fX19fHx8fHx8fHx7e3x8fHx8fHx8fHx+iomMjImFg4SEgoKDgoGCgoKCgoKBgYGBgYCAgICAgICAf4CAgH19fXx8fH19fX19fX19fX13d3d3d3p9eHt4fHx3e3h3d3d8e3x9eX15d3h4eHh4eHh4eHh5eXl6enp6e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3x8fHx8fHx8fHx8fHx8fHx8fX19fXx9fX19fX19fX19fX19fHx8fHx8fHt7fHx8fHx8fHx8fH2Kio2NioWDg4OCgoKCgYGCgoKBgoGBgYKBgIGBgICAgIB/gIGAfXx9fX18fX19fX19fX19fXd3d3d3fX55d3d4e3p8eXd3d3p8fHx6e3p3eHh4eHh4eHh4eXl5enp6ent7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3x8fHt8fHx8fHx8fHx8fHx8fH19fX18fH18fH18fHx8fX19fX18fHx8fHx8fHx8fHx8fHx8fHx8foqJjo2JhISEg4KDgoKBgYKBgoKCgYGBgoGAgYKAgICAgH+BgIB8fH19fX18fX19fX19fn5+d3d3d3d5fHl7eHx9eXt5enp6fHx9fHt9e3h4eHh4eHh4eXl5eXp6enp7e3t7e3t7e3t7e3t7e3t7e3t7e3x8fHt7fHx7fHx8fHx8fHx8fXx8fX19fX19fXx8fHx8fHx8fXx9fX19fXx8fHx8fHx8fHx8fHx8fHx8fHx/iIeNioeFhoaDg4ODgoGBgoGCgoGBgYGCgYCAgoF/gICAf4CAgHx8fX19fX19fX19fX5+fn53d3d3d3Z4eHl3eXp4enh5eXl7eHp6eXt5eHh5eXh4eHh5eXl5enp7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t8fHx8fHx8fHx9fX19fX19fX19fX19fX18fH18fH19fX19fH19fX19fHx8fHx8fHx8fHx8fX+HiIyIhoeHhIKDhISCgYKBgYKCgoGBgYKBgIGBgYGAgIB/gIGAfHx9fX19fX19fX1+fn5+fnd3d3d3d3d3d3d3eHh4eHh4eHh4eHl5eHl5eXl5eXl5eXl6enp6ent7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7fHx8fHx8fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fHx8fHx8fX19fHx8gIeIi4eHiYaDg4SDg4KBgYGCgoGBgYKCgYGBgIGBgYCAgICBgX97fH19fX19fX19fn5+fn5+d3d3d3d3d3d4eHd4dnl5eHh4eHh5eXl5eXl5eXl5eXl5enp6enp6e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7fHx7fHx8fHx8fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fHx8fH19fXx9fXyBhoqKiYmIhIOFhISCgoGBgYGCgYGCgoGBgYCAgYGAgIGAgIGBf3x8fX19fX1+fn5+fn5+f394eHd4eHh4eHZxZGpeam15eXl4eHl5eXl5eXl5enp6enp6enp6enp7e3t8e3x8fHt7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3x8fHx9fHx8fH19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fIGFiYqJioeEhYWEg4KCgYGBgoKBgYKBgYGBgYCBgYCAgYCBgIF+fH1+fn5+fn5+fn5+fn9/f3h4eHh4eHh5bWRiZV9fXm95eXl5eXl5eXl5eXp6enp6enp6enp6e3t7e3t7fHx8fHx8fHt7e3t7e3t7e3t7e3t7e3t7e3t7e3t7fHx8fHx9fHx8fH19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18goWKiomJhISGhYSDg4KBgYKCgoGBgoGBgYKBgIGBgICAgICBgH58fX5+fn5+fn5+fn9/f39/eHh4eHh4eW5kZWdlZGJeZnh5eXl5enp6enp6enp6enp6enp6e3t7e3t7e3x8fHx8fHt8fHt7e3t7e3t7e3t7e3t7e3t7e3t7fHx8fHx8fHx8fHx9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXyChouJiIqEhYaEg4OEgoGBgYGCgYKCgYGBgYCAgYGBgIB/gIGBf3x8fn5+fn5+fn9/f39/f394eHh4eHl3Z2VkZWZkZWFfaXl6enp6enp6enp6enp6ent7e3t7e3t7e3t7e3t8fHx7e3t7e3t7e3t7e3t7e3t7e3t7e3t7fHt8fHx8fHx8fHx9fX19fX19fX19fX19fXx9fX19fX19fX19fX19fX19fX19fX19fX19fIKGi4eJh4SEhoSDg4WBgYGBgYKCgYGBgYKBgICAgYGAgYCAgYF+fHx/f35/f39/f39/f39/gHl5eXl5eWtlYWJlZWFlZV5ieHdze3p6enp6enp6enp6e3t7e3t7e3t7e3t7fHt7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t8fHx8fHx8fH18fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19g4aLhoiFhYaEgoOEhIKBgYGBgoKBgYKBgYGAgYGBgYGAgIGBgn98fH9/f39/f39/f3+AgICAeXl5eXl0Y2NlZGNmY2doZGZsZF5ze3p6enp6enp6enp6ent7e3t7e3t8fHx7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3x8fHx8fHx8fH19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX1+fn6DhouGhoaGhYODg4SDgYGBgYGCgoGBgYKBgYCAgYGBgYCAgYGBfnx8f39/f39/gICAgICAgIB5eXl6d2RhY2diYmRdW2VfYV1eYGFoeHp6enp6enp6enp6e3t7e3t7fHx8e3x7e3t7e3t7e3t7e3t7e3t7e3t7e3t8fHx8fHx8fHx8fH19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX1+fn5+fn5+foSFi4eGhoaGhIODg4KBgYGBgoKCgYKBgoGAgIGBgYGAgYGBgYF+fX1/gH+AgICAgICAgICAgHl5eW9vYmJiZF5jZ19dYWFgXF9kYlttfHp6enp6enp6enp7e3t7fHx8e3t7e3t7e3t7e3t7e3t7e3t7fHx7e3x7fHx8fHx8fHx8fH19fH19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX5+fn5+fn5+fn5/hIiLhoSHhoaEhIODgoGBgYGCgYGBgYKCgYCAgYGBgYGBgYGBgX5+fYCAgICAgICAgICAgICBeXpwXWJlZGJkXmZnZ2BZYmJhY2VfXF1ze3t6enp7e3t7e3t8fHx8fHx8fHt7e3t7e3t7e3t7e3t7fHx8fHx8e3x8fHx8fHx8fHx8fHx9fX19fX19fX19fX19fX19fX19fX19fX19fX19fn19fn5+fn5+fn5+fn5+foCFjIqEhYaGhYODg4SCgYGBgYKBgYGBgoKCgYCBgYGCgICAgIGBf35+gICAgICAgICAgIGBgYF5emxiZGdjYmdmYWBgZGFiZWRjZGNeXGJ1fHt7e3t7e3t7e3x8fHx7e3x8fHx7e3t7e3t7e3t7e3x8fHx8fHx8fHx8fHx8fHx8fHx8fH19fX19fX19fX19fX19fX19fX19fX19fX1+fn5+fn5+fn5+fn5+fn5+fn9/gYeMiYWGhoeFg4SDgoGBgYGBgYKBgoKCg4KBgIGBgYKBgYGCgoF/f36AgICAgICAgIGBgYGBgXp7dGdnZmZkZGZmYF5fYWNlaGRlXmJkYHR8e3t7e3t7fHx8fHx8fHx8fHt7fHt8fHt7e3t7fHx8fHx8fHx8fHx8fHx8fHx8fHx8fH19fX19fX19fX19fX19fX19fX19fX19fX19fX5+fn5+fn5+fn5+fn9/f39/f3+CiYqIhoaIhoWDhIOCgYGBgYGBgoGBgoKCgoGAgYGBgoKBgYKCgX9/f4GBgYGAgYGBgYGBgYGBenptaGNjZ2ZnZWdlZmdiZWRlYmdbYmVgdnx8e3t8fHx8fHx8fHx8e3t8fHx8e3x8fHt7fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx9fXx9fX19fX19fX19fX19fX19fX19fX19fn5+fn5+fn5+fn5+f39/f39/f39/f4SJioiGiYeFhYSEg4KBgYGBgYGCgYKCgYGBgYGBgYKBgoGBgICBgH9/gYGBgYGBgYGBgYGBgYF7emlpZGNqZmFgZmVjY2NnaWRjYmBiZGJ0fXx8fHx8fHt8fHx8fHx8e3x8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fH19fX19fX19fX19fn5+fn5+fn5+fn5+fn5+fn5/f39+fn9/f39/f39/f3+AhIqMiIeJhoSFhYOCgYGBgYGBgYKBgoGBgYGBgYGBgoKBgYGBgYGAgH+BgYGBgYGBgYGBgYGBgXZzZWRnY2RmZWJlZmdkZmhmZWNgYGNkYHF9fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fXx8fX18fHx9fX19fX19fX19fX19fn5+fn5+fn5+fn5+fn5/fn5+f35+f39/f39/f3+AgICFioyJiIqJhoaDgoKCgYGBgYGBgoGBgoGBgYGBgIGBgYGBgYGCgX+Af35/foCCgoKCgoKCgoKCc3NnZWRkZWlqaGZnZ2NhZmZlZmdmZWVjdX18fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fX19fX19fX19fX19fX1+fn5+fn5+fn5+fn5+fn5+fn5+f39/f39/f39/f39/gICAgICAgIWLioqJioeHhoSCgoGBgYGBgYKCgYKBgYGBgIGBgoKBgYGBgYGAf4B+dHRzdX1/goCAfn5/gYB0cmdkZWNmaWppZWNlY2BmZGRnZ2JiZWFwfXx8fHx8fHx8fHx8fHx8fHx9fX18fHx8fHx8fHx8fHx8fHx9fX19fX19fX19fX19fX19fX19fX1+fn5+fn5+fn5+fn5+fn9/f39/f39/f39/f39/f39/f4CAgICAgIB/houLiouLh4eHhIOCgYGBgYGBgYKBgoKBgYGBgYKCgYCBgYGBgoCAgH5zc3NzdHV4dXV0dHV2dXVwZmNmZWhoaWdoZ2VmZWJfZGVmY2BiZ3d8fHx8fX19fX18fHx8fH19fX19fX19fXx9fXx8fX19fX19fX19fX19fX19fX19fX19fX19fn5+fn5+fn5+fn5+fn5+fn5+f39/f39/f39/f39/gIB/f3+AgICAgICAgICHjIyIi4qHh4eEhIKBgYGBgYGBgoGCgoGBgICBgoGBgYKBgoKCgYCAfnNzc3Nzc3NzdHR0dHNzdW9jY2FnZWhoZ2pmZGVnZmhmY2JlYl5ieX18e3t8fX19fX18fHx9fX19fX19e3x9fX19fX19fX19fX19fX19fX19fX5+fn5+fn5+fn5+fn5+fn9/fn5+fn5+fn5/f39/f4CAgH9/gICBgICAgICAgYCAf4CAgYGAgIeLi4iNiYiJhoSFgYGBgYGBgYKCgYKCgYGBgIGCgoGBgYKBgoKBgIB+dHNzc3Nzc3Nzc3Nzc3N1cmdlZWRlamhoZ2ZpaGdjZWViZGNoZGd7eHVzc3R2dnl4dnR0dHZ3d3d2dHR0dXV4d3h4d3d6e3x9fXx9fn5+fn5+fn5+fn5+fn5+fn5+fn5/f39/f39/f35/f39/gH9+fHt7fX58eXl2dnZ5fHx6end2d3l7fXt4hIyMioyHh4iEhYSBgYGBgYGBgoGBgoGBgYGAgYKCgYGBgoGBgoGAgH51c3Nzc3Nzc3Nzc3Nzc3VzaGVnaGVrbGhqZ2lqZ2dnZmRkYmVkbnV0dHNzdHNzc3Nzc3Nzc3Nzc3NzdHNzc3Nzc3Nzc3N0dHV1c3V3eHl7fn59fn98f39/f39/f39/f314fH5+fXx4dXZ3eXd4dnRzc3N0dXRzc3Nzc3NzdHNzc3R0c3R0dHODjI2KiYeIhoOGg4GBgYGBgYGBgYGCgYGAgYGDgoKBgYCBgYGBgICAf3VzdHRzc3Nzc3Nyc3NzdnZpY2hqaGpsZWZpbGhgZmVkY2BkZGZ0dXV1dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHRzdHRzc3Nzc3R2dnV1d3V4fH9+fX9+fHp4dXN0dXV1dHNzc3Nzc3N0dHR0dHR0dHR1dXR0dHV1dHR1dXR1dXV1dIaMjYuIhoeEhIWCgYGBgYGBgYGCgoGAgYCBgYKCgoGBgIGBgYGAgIB/dnNzc3Nzc3Nzc3Nzc3N2dnNnZ2pmaGdmaGhmZGlnY2NnZWVmcHZ1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dHR1dHR0dHR0dHRzdHR0dnV1d3Z0c3R0dHR0dHR0dXV1dXV0dXV1dXV1dXV0dHNzc3N0dHNzdHR0dHR1dXR1iY6MjIqHh4SEhYKBgYGBgYGBgYKCgoGBgICAgoKCgoGBgYGBgYCAgH93c3Nzc3NycnJyc3NzcnZ2dW5kXWNnZWlraGVoZ2dqamlnZXB2dXV1dXV0dHRzdHR0dHR0dHV1dXV1dXV0dHV1dHR1dXV1dXV1dXV1dXR0dHV1dXV1dXV0dHV0dHV1dXV1dXV1dXV1dXV1dXV1dXV0dHNzc3Nzc3N0dHNzc3Nzc3R0dHR0dHWKjoyMiYaGhIeFgoGBgYGBgYGBgoKBgYGAgYGCgoKCgYGBgYKBgICAf3hzc3Nzc3JycnJyc3NzdnZ3d2liaGhnamtpaGZkZGVmaWhwdXR0dHRzc3JxcnJ0dXV0dHR0dHR0c3NycXFxcXNzdHR0dHR0dHR0dHV0cnJyc3R0dHR0dXV1dXV1dXR0dXR0dHR0dHR0dHR0dHR0c3Nzc3Nzc3Nzc3Nzc3N0dHN0dHR0dHR0dYuOjImGhYWFh4SCgYGBgYGBgYGBgoKCgYGAgIKCgoGBgYGBgYGBgIB/eXNzc3NycXJycnJzc3N3d3d3bGpoZGhpa3Z6a2VmZWhnbXJzdHN0c3JwcHBxcnN0dXR0c3NycnNycXBvb29vcHFzc3NycnJyc3R0dHNxcHFyc3R0dHR0dHRzc3Rzc3NzdHR0dHRzdHR0dHR0dHRzdHR0c3NycnFxcnJzc3Nyc3NzdHR0dHN2jZCMh4eFhYSEgoGCgoGBgYGBgYGCgoKBgYGAgYGCgoGBgoKBgYGAf395c3NycnFxcnJycnNzc3d3d3dzc2pnaWloeX99cW51bG5wcXJycnFxcG9wcXFxc3Rzc3NycXFwcG5ubm1ubW5ubnBxcnJycnJycnJzcXBvb3BxcnJzc3JxcnJycnJycnJycnJzc3Jzc3Nzc3Nzc3Nzc3Jxb29ubm9vcXJzc3Jyc3NycnNzcnaPj4uHhoWFhYOCgoKBgYGBgYGBgYGBgoGBgYGCgoKBgoGCgYGCgX9/f3hxcHBwcXFycnJyc3Nzd3d2dnd2cnF0c252f352c3hwcHBycnJycXFwcHFxcXFyc3Nzc3FwcXBvb25ubm5ub25vcHBxcXFxcXBwcXJwb25vcHFxcXFxcHBxcXFxcXJycnJycnJycnFxcnFxcnJycnFwb29ubm1ubW5vcXJycnJycnJyc3JxeI+OjYaDg4aEgoOCgoGCgYGBgYKBgYGCgYGBgYKCgoKCgoKBgYKBf4B/d29wb3BxcnJyc3Nzc3J2dnZ2dnZ3dnZ1c3l/fnd3d29wcXFxcXFxcHBwcXJxcnJzc3JycXBwb29wb29vb29vb29wb3Bvb29vcHBxb29vcHBwcHBvcG9wcHFycXFxcnJycnFxcXFxcXFxcHBwcHBxb29ubm5tbW5tbm9wcXFxcXFxcXFxcXB7j42NhoODhYOCgoKCgYKBgYGBgoGCgYGCgoGCg4KBg4KBgYGAgYF/f392bm9wcHBxcXFxcXBwcHZ2dnZ2dXR0c3NxfYB9fX9zb3BxcXFwcHBwcXFwcHBxcnJxcXFwb3Bvb3Bwb29wcG9vb29vb29vb3BxcXBub3Bwb29wb29wcnJycnFxcXBxcnFwcXFxcHBwcHBwcHBwb29ubm1ubm5ubm9ub3BwcHFxcXFxcXFxcIKRjoqEhIOFhIOCgoGBgoKBgYKBgYGBgYGCgoKCgoKCgYGBgYCBgX9/gHVvb29wcXFxcXBwcHBwdnZ2dXRzcnJycnGAgoCBeXBwcHBvcHBwcHFxcXFwcXFxcXFxcG9vcHBwcHBwb3BxcHBvb29wb29vcXFwcG9wcG9vb25vcHFxcHBwb3Bvb3BwcHBwcHBwcHBvb29vb29vbm5tbW1ubm5ub25vb3BvcHBwcHBwcHBwipCMiISDhIaDg4KCgYGCgoKCgYGBgYCAgYGBgoKBgYGBgYGBgIGBgH+AdG5vb3BxcXFwcG9vcG92dnVzcnFxcXFxcICDg39ycHBwcHBwcHBwcHFxcHBxcXFxcXBwcHBwcHBwcHFwcHBwcHBwcHBvcHBxcXBwcHFxb29vbm9wcHBvb29vcHBvb3BwcHBwcHBwcHBvb29vbm5ubm5ubW5ubm1ubm9wcG9vb29vb3BzcXWPj4yJg4KFh4ODgoKBgoGCgoKBgYKBgYGBgYGBgYGBgYCAgYGAgYGAf4B0b29vbm9vb29vb29vb3Z1dHNxcXFxcXJygIKCgXRxcXFxcXFxcXFxcXFxcXFxcXBxcXFxcHFwcXBxcXFwcHBwcHFxcXBxcHBwcXBwcHBwcHBwcHBwcHBwcHFxcXBxcHBwcHFwcHFxcHFxcXFxcXJxcnFwcnRycnR0dHR1dnRzdHR0dXd3gpCPi4mDgoaHhISCg4GBgYKCgoGBgoGBgYKBgYGBgYGAgICBgYCBgYB/gHVvb29vb29vb25vb29vdXRzcnJycnJycnKDg4OCdnFycnFxcXJxcnJxcXJycnFxcXFxcnFxcXJycXFycXFxcXFxcXFxcXFwcXFxcXFxcnNzcnJyc3V1dHR0dHR0dHV2d3d3d3d3eHh4eHd3eHh4d3Z3dnV2dnZ2d3h6e3x7e3t6enp6enyGkI2LiIODiIeHhYODgoGCgYKBgYGBgYKCgoGBgYGAgYCAgYGAgIGBgH+Ad3FxcXFxcG5ucG9wcG92dHV1c3Nzc3NzdYiDgoN5cnNzcnJyc3Jyc3NycnJycnN0cnJzcnNzc3Nzc3Nyc3N0dHV1dXV1dHV3eHd3d3d4eHh3eHh4eXl5eXl4eHl5eXp6e3t7e3t6enp5eXh3d3d1dnV2dnd5enp7fn5+fX1+fn5/f35+gIyPi4qHg4WIi4iEg4SDgYGCgYGBgoGBgoKCgoKAgYGBgYCBgYGAgIGAf4B8enp5eXx5eHh2dXZ2dHl2d3h3d3Z3dnZ6f3x+fnx2dnd3dnV4enh4eHh3d3d2eHx5eXx6eXl8e3l5eXh4eXl6enl5eXh4enp5eXh4eHh3dnd3eHh3eHh5eXp7e3p8fH1+fX9/f359e3t7e3p5enl5e3t/foB/fn5/fn19fX5+f35+fn6AjpCNioeEhoqLiIaGhIOBgoKBgYGCgYGCgoKCgoCBgoKBgYGCgYCBgIF/f4B/fn19fX9/f318e3t7eXh4eHh5eXl4eXh5eXl4enp6enp6e3t7fH1+fHt7ent8e318e3t7e3t7enl4eXh4ent6enp5eXp8fHt6enx8fHp6ent9fHx+fn+AgoGAgYKAgH9/gYGBgIB/f35+fn5/fX1+f4CAf35+f39+fn9/f39/gH+Af4OQjoyHhoWIi4yJh4aFg4GCgYGBgYKBgoKCgoKBgYKDgoGBgYGBgIGBgIB/goOCgoGBgX99f39/f4F6enh4d3h4eHh5eHh5enp5e358enx9fXt8fX19fHx8fnx9fn5+fn59fX9/f3x8fYGDgYCAf318fXx9fXt9fXx8fH19fX1+gYGChISDgoB/gYGBgH9/f4B/f39/f39+fn9/f39/f35+f3+Af39/gICAf4CAgICAhJCPi4eGhoiMi4mKhYaDgoKCgYGBgoGCgYKBgYGBgoOCgYCAgYGAgIGBgH+ChIKCgICAgH9+fn+AgH9/fn18fX19fYB/fX+Af35/gH9/fn9/gIGBgICAf3+BgICAf4CBgn9/f4CAf35+f39+f39/fn5+f39/gYB/f4CBgYCAgYOEgoGCgoGCgH+AgYCBgYGAgH+BgICAf39/gICAgYGBgIGBgYCAgICBgoGBgYCAgYGFjo6MiIaHiYyLi4qGhoOCgoKBgYGCgoOCgoKBgIGBgYKCgICBgYCAgYGAf4KFg4KBgYCAf39+fn+AfX5+fn19fX5/fn9/f35+fn+AgYCAgICAfn9/fn+Af3+AgH9/f35/f39+fn59fn9+fn9/f35/gIGBgoKDg4KCg4KBgYKDg4OCgYGBgYKBgoKCgYKBgoGBgYGBgoKCgYGCgYKCgoGBgoKBgYKCgoKCgYGBgoKCgoaPkY+KiImKjY6MiYaFgoKCgoKBgYKCg4KCgoGBgYGBgYF/gIGBgYCBgIF/gYWEg4KCgoGCgYCAgIB8fHx7fH18fH9+fn9+fn5+f35+f39/f39/f35+foB+fn5+fn9/f39+f39+fn5/gIB/gIB/f39/f3+BgYGCgoCAgYKDg4SDg4ODgoKCgoKCgoKCgoKCgoGCgoKDg4OCg4ODgoKCgYKCgoODg4ODgoKCgoODg4KCh5KSkIuKi4uPj42Lh4SCgoKCgYGBgoKDgoKBgYGBgIGBgICAgYGBgIGAgYCAg4SDg4OEg4ODgoKCgXx9fHx9gn1+f4GCiIGCgoSCgYGDg4GBgYKDgYKBgYCAf39/gICAf3+AgX9/f39/gYCAgICAgH9/f3+AgICAgH9/gYODhYSEg4SDgoKCg4OCgoOCgoODg4ODg4SDg4KEhYWDg4SEgoKDhIOCg4ODg4OCgoODgoCKlJOPioqMjpCPjYuGg4KCgoKBgYGBgoOCgYGBgIGBgoGBgICBgYGAgYCAgH+BgoODg4SEhIOCgoKCfXx8fn6AgYOAg4OChIaFhoaFhIWFg4ODg4SBgYKEhIKCgoeDgoKAgoGBgoKCg4KCg4KDgoODgoGAgIKCgYOCgYKCg4OEhYWEg4OChISEhIOEhISDg4OEg4ODg4OEg4SDhIWDhISDg4ODgoKCgoKCgoKBgYKCgo+UlI+Njo6RkY6KiISCgoKCgYGBgYGCg4GBgIGBgYGBgYCBgIGBgYCBgICAgIKChIKChIOCg4ODgoJ9fX2AgH+AgoGDg4ODhIaEhIOEhYWDg4KBg4OBgIKDgYKFhYWFhoaHhoWGhoeHh4aGhoeHhoaEgoGCg4SDg4ODg4ODhISFhYWDhYSFhISEg4KBg4OCg4SEg4KCg4SCg4KDg4OCgoKCgoKCg4OEhIOFhYWFhoaIk5OTkI+PkJKRjIqHgoKCgoKBgYGBgYKDgoKBgIGBgYGBgICAgYGBgICAgICAhISEgoKCgoGBgoKBgX+AgYOCgICAf4CCgoGDg4KCgYODg4SDg4KDhYOCgYGBgoSFh4eHh4aGh4eHiIiHh4eIiIiFhIOBgIGBgoKCg4GCg4SEhYSDg4OEg4OEhIOBgYGCg4OEhISDg4ODg4OEhIODgoSDg4ODhIWFhoeHh4eIiIiJiY6TkpKOj46QkY+LiYeCgoKCgoKBgYGBgoKCgoGBgIGBgYGAgICAgYGAgIGAgICDg4KCgYKCgYGAf4CBhYWFhoOCgYB+fn+BgoSCgoKDhIOCgoODg4KChISDg4OCg4SFhISFhYSDg4SFhYKEhIWFg4KBgH9/gIB/gIGEg4OEhYWEgoKCgoOCg4OFhIKDhISEhYaGhoaGhoWFhoeHhYaIh4aHiIeGhoaIiYeGhYaGhoeIkZOSkI6QjpCRjImHhYGBgoKCgoGBgYGBgoOBgYGBgYGBgICAgICBgYCAgICAgISEg4KBgoGAgYGAgYKIh4aHhYSCgH99fX6AgH+AgYGBgYGBgoGAgYOCgoGCgoKBgYGCgYKCg4GBgICAf4GAgH+AgH9+gIGBgYKCg4OEg4OEg4OCgoGBgoODg4SEg4SEhIOFhYaFh4eIh4eHh4eHh4eGhoaGh4WFhYaGhIWEhIWEhYaSk5GOjo+OkI6JiYeEgoKCgoKCgoGBgIGCgoKCgoKCgYGBgYGBgYGBgICAgYGAgoSDg4KDgoGCgYKDg4iHh4iHhYSCgX5+gICAfn5+f4CBgYGCgYCBgoKCgH+AgIB+gIKBgIGCg4OAf39/gICAf4CAgICDg4KDg4ODgoOBgYKCgoOCgYKCgoOCgoSDhISDg4SEhYWFhYaGhoaFhISEhYWEhIWFhYSEhISDhISEhISEipSTkpCQj46NiIaFhIOBgYKCgoKCgYGAgYKCgoKBgoKBgYCBgYCBgYGAgICAgYGAgoOCgoOCgoKBgoOCiImJiYiHhYSDgYKEhIOBgoGCgoSCgoOEgoOFhYaEgoSCgX+AgoGBgoGChIOBgYGBgoOCgoGDg4SDg4SEg4OCg4KDg4ODg4KCgoKCgoGDhISEhYSFhYWFhIWEhIWFhYWDg4OEhISEhYWFhISEhISEg4ODg4OOlZKQkZGOjYyHhYODg4GCgoKCgoKBgYCBgoOCgYCCgYGBgICAgIGBgYCAgICBgICDhYSEhIODg4SDhIOGh4mIhoWDhIODg4WDgYGDgoOFhYODg4SCiI6DhYSFhISEgoGAgYKDgoKEg4OCgoGBhIWEg4ODgoKDhISDg4ODg4WFhISDg4KCgoKCgoSEhYSFhYWFhYODhYWFhYaFhoWEhIWEhYWGhYWFhIWEhISDhIODhJGUk5OSj42MioWEhIODgYKCg4KCgoKBgYGCg4KBgYKBgYGBgIGBgIGBgH+AgIGAgYaGhoaGhoaHh4aGhYSDhYaCgIGBgYGHgoB+f4GAgYOCgYCBgX+KmYWBgoKBgYKCgYCCgoOCgoKDg4GCgYKDhYODg4KDg4OEgoKEhIOEhIWEg4OCgoKCgYGCg4ODg4SFhYWFhIOEhYWGhYWEhISEhIOEhIWFhYWFhIODhIOEg4KGlJSSlJKPjYuHhISDg4KBgoODgoKDg4GBgoKBgoKCgYGCgYGBgYCAgYGAgICAgICAhYWFhYaGh4aGhoWGg4ODg4GAgoKCgYKAf35/f4CAgIOBgH9+e4GYjICBg4GAgYGChIOBgYGBgYKBgYKDgoODgoOCgoKCg4OBg4SDg4ODg4OEhIKCgoKDgoKDg4ODhIWEhISEg4OEhIODg4OEhIODg4ODg4SDg4ODg4KDg4KDgouUk5KTkY2NioaDg4OEgoGCg4ODg4ODgoGBgoGCgoKCgoKBgYGBgICBgYCAf4CAgICDhISFhYSFhYWEhIWCg4KDgoKDg4OBgICAgICAgYCBiYN+fn+CfY+VgoOEgoODg4KAgICCgoKCgoKDg4ODgoODhIKCgoODgoKDg4KCg4KDg4WEg4ODg4SDg4SEhISEhYWEhIWEg4WEg4OEhISEhISEg4SEhYSDg4SEhIODgoKDkJSSkpKPi4yIhoSEg4OBgYKDg4ODg4OCgYGCgoKCgoKDgoGBgYGAgICAgIB/gIGAgISDhYWEhYWFhYSFhYOEhIWDg4SEhIKCgoOCgoSCgYOPg4GBf4qEg5KFhYSEhYJ/fX19f4KEg4ODg4OEg4ODhISEg4OEhISEg4SEhIOEg4OFhoWFhYSFhYWFhYSFhoWGhoWFhYWFhYSFhYWGhoWGhoaFhoaGh4aFhYWFg4SEhIeTk5KRkoyLiIWFhYWCgoGBgoODg4OCg4KBgYKDg4ODgoKBgIGAgICAgICAgH+AgICAhYWFhYWGh4eGhYWFhISFhYSEhISEhIODg4OEhYSChZKCioaFgoF+goaHhoOBfn9+fn9/f4OEg4OEhISEhISEhISEhISFhYWEhYSGhYWGhYaGhoWGhYWHhYWGhYaGhoaFhIWFhYWFhIWGhoaHhoaGhoaHh4iIiIaFhYaEhYWGjZSTkpGQi4qHhoeGhIGCgoKDg4ODg4KDgoGBgoODg4KAgYGBgYCAgICAgICAf4CAgICHh4eGhoeHiIeHhoaEg4ODhIODg4OEg4ODg4OEhIOHkoKGhId+fn9/hYWBf39/f39/f35/gISFhIWGhoaFhYWFhoaHhoaFhoWFhoeHh4iHh4eGhoaHh4eGhoaHhoaGhYSDhIWFhoSFhYaGhoeHhoaGhoeHh4eIiIeGhoaHh4eRk5KQkZCLiIiFhoSDgoKBgoODg4ODgoKDgoKCgoOCgYCBgICBgICAgIGAgIB/gICAf4aHiIeHh4eIiYmIiIODgoKDg4SEhIWEg4KCg4OEg4eNgYF/h4J+fn6AgH9/f39/gIB/f4B/f4WFhoeIiIeHh4eIh4iHiIiIhoaHiIiJiYmIh4aHh4eIiIaHhoeHhoaFhIOEhYaFhYWFhoaGh4eFhoeGh4aHh4eHh4eHh4eFh5OTkY+RkIuHhoWGhIKCgYGCg4ODg4ODgoKCgoGCg4KCgIGBgYCAgICAgICAf3+AgYB/hoiIiIiHh4iJiYmIg4KCg4ODhIWHh4eFg4OFhIOEhISBgIGLhYB/gIGCgYGBgYB/gH9/fnt6gIaIiIqKiYmIiImJiYmKi4qIiIiJiouLioqIiIeIiIiHh4iIh4iGh4aEg4OFh4eHhoWFhISDhYWEhYWGhISEhYWFhoWGhYOJlJOQj5GOioaFhoWDgYGBgoKDg4ODgoKCgoKCgoKCgYGBgYGBgYCAgICAgIB/gICBgH+GiYiIiYeIiImJiIiEgoKDg4KDhImKh4eEhIWEg4OFg4GAg4OCgoKCgoKCgH9+fH19fX9+fHt8g4eJi4uKioqIiIqJiImLiomJiImIioqJi4mHhoaGh4WGiIiJiIeGh4SDgoSIiIiIh4WCgoGDg4KDg4SCgoKDgoGEg4SEgY6TkpCPj4uIhYSGhIKBgYGBgoODg4OCgoKCgoKCgoGBgYGBgIGAgICAgICAgH+AgIGAf4WIh4eHhoeIiIiHh4SCg4OCgoOFiYqJh4WHhYSFhYWCgIKDg4OCgoKDgX59fX5+fn5+fX1+fX19g4eJioqHh4WGh4eHh4iHh4mGiIaIh4eJiISDhIOFhISFhYaIiIaFg4KChIWHhoeGhoSCgoOEgoODhIKBgYGBgYODhIOEkZKRjo+Oi4eFhoaEgoGAgYGDg4ODg4KCgoKCgoKCgYGBgIGBgYCAgIB/gIGAf39/gIB/hYaGhYaGhoeHiIeGgYKEhIOChYeJi4qGhIaEgoaHg3+BhIODg4OCgoF9fH1/gH9+fn59fH19fHp8hIaHhoSDgYKDhIWFhYODhYSEhISEhIWEgoKDgoSEgYKDg4WGhYSCgYGCgoODhYOEhIWEhIaDg4SFg4KDgYKDg4SFhIeSkY+Nj4yKhYSFhIWCgYCBgYODg4ODgoKCgoKCgoKBgYGBgYGAgICAf4CAgYB/gICAgICDhIWEhYWFh4eHh4aAgYGFg4OEhYSHiIWCgYCAgoB/gYOEg4ODgoJ/fX1/gICBf31+fn19fX16enp+g4SEgoGBgIGBgoKBf36BgYGCgYOAgoGCgoKBg4OAf4CAgYOCgICAgICBgYGCgYGChIODhYSCg4SDgoKBgoSDhYWGjJORjo+Pi4iFhYOChIGBgYGBgoODg4KCgoKCgoKCgoGBgYCBgYCBgH9/gIGBgICAgH+AgIKCg4OChIOEhYWGhn+BfoCBgICAgIGDgn9+fn9+fX6DhIOCg4ODgn19fn+AgIGAfn19fX1+fXx6enp/goKAf39/f35/f4B+fYB/f4CAgX+AgIF/f3+BgX99fX+AgX9/fn+AgH+AgICBf4CCgICCgYGCgYGAgYGBgYKEg4aPkpCOj42Kh4eGg4OCgYGBgYGCg4ODgoKCgoKCgoOCgYGCgYGBgICAgH+AgICAgICAf39/gYKDhIGCgoOCg4SFgIB/fH19fn1+foCAf31/fn1+f4ODg4KCgYF/fX1+foCAgH9+fX19fHt7e3p6enqAgH9+f35+fn1+f35/gH9+f3+Af4CAf35+fn9/fn18fn+Af35+f3+Af39/f4B/f4B+f4CBf4B+f39/gH9/f4B/hZKSj46Pi4uHiYWEg4KCgYGBgYKDg4ODg4OCgoKDg4KAgYKBgYGAgICAf3+AgIB/gIF/f36BgYSEgYKBg4OCg4OBgH98fn5/fn6Af4B/foF/f4CBhIOCgYB/f359fn5/gICAfn19fX17e3x6enl5eXt/fn5/f39+fX5/foCAf35/f4CAgoB/fH5+f35+fXx/f4B/fn9/f4B/f35/foCAf36Af39+fn5/f35+f318fH2Fk5KNjIuKiImIhISEgoKCgYGBgoOCgoODgoODg4ODgYCBgYGBgYCAf39/f4CAgICAgIB/foCBhIOCgYGDhISDhICBgICBgIGAgYKCg4GBgoCBgoODgYGBgYCAfX19fn5+f359fX19fXx8fHt6enl5eX2Af4CBgYF/f4B/f4F/gICAgYGCgoB+gH5/fn5+foGAgYF/f39/gIB/f39/gYB+f4CAfn9/fn+Af31+fX17fIaTkYyLioeHioiGhoSDgoGBgYGCg4ODg4OCg4OCgoKBgICBgYGAgH9/f39/gICAgICAgH9+fn+BgYGAgISGh4aHgoSDhYOBg4ODhYSEhISEgoKDhIKCgoKCgX9+fX19fn6AfX19fX19fX18e3p5eXl5eYCCgoKEg4CCg4GAgoCBgYGDgoODgYGCgIGAf4CBg4KEgoCAgYGBgYCAgYCCgn+BgIF/gIB/gICAfn9/fnx8ipOQiomIiIiJiIaGhoSCgoGBgoKDg4ODg4KDg4KCgYCAgICBgYGAf39/f4CAgICAgIGBf359fn5/f39+g4aHh4iChYSFg4SFhIWGhoaGh4WFhYGBg4ODgoKAfX19fX19fn59fX19fX18fX18e3l5eXl4fIKDhIWCgYSDgoKDhYaCg4SDgYKCg4OCgoKCgYKFg4iFgoGBgYKCgYGBgYSDgoOCgoKCgYGBgIF/gIGAf36Ok4yHiIaIh4aGhYaGhIKDgoGCgoODg4ODg4OCgYGBgH+AgYCBgYB/gH9/gICBgH+AgYB/fn19fX5+f36Ag4SHiISGhoaFhoaHh4aGh4iHh4eGf32BgIGCgX59fX19fX19fX19fX18fH5+fnx7eXh3eHl5gIODf4ONhIOEhISXl4ODhIF9foGCgoGCgYKBg4aIjIWDgoKBhIKEg4KDhYWEhYOCg4OCg4OCgoKCg4OCgpKQi4iJh4mHhoaEhoWEhISCgYKCg4ODg4ODgoGBgYCAgICBgIGBgH9/fn+AgYCAf4CAgH9/fn1/fn+Bf4CCgYWFhYeGh4eGh4eIhoeHh4aHh4Z/fX18fX9+fX19fX19fX19fX19fXx7iJKCe3x6fIZ5eHl8gYF+iZeEg4OEhJSTgIGBf39/fn6Fi4B/gICEhpCJhYSCgoGFhYuDgYKFhYaGhIOFhYOEhIODhIOFhISIko6LiYiIiYeHh4WGhYSFhIKBgoKDg4ODg4OCgYGBgICAgIGAgICAf39/f4CAgICAgYGBf39/f4CAgIGBgYGBg4OGh4aGh4aGiIeGhoaFhISFhH99fHx8fX18fH19fX19fX19fX18fH+RlZaDe3qElHx4eXp7fH+Cg4GBgIOCgH58fn57iJF8fI6Wf31/f4KGioWDg4SDgYONiX99f4OEhYWDhYaFhIWFg4SFhYaEhI6Rj4uKioyJiImHhYaFg4OCgYGCgoKDhIODgoGBgICBgICAgYGAgIB/f3+AgIB/gICAgX5+f4GBgoKCgoODgoOCgoWGhISFhYSGhIOEg4KCgYOBf319fHx9fXx8fH18fH18fX19fHx8e4uRl4x6e3yBenp6e3x5eX19foB/gH98e3t+fn2ClZF/hIh+fH5/goR8fIGChIKAf4eDfYOBf4KCgIODhISEhISChIOEhYKEkZGOi4yMjoqJiYWFhYODgoKBgoODgoKDg4KCgYGAgIGAgICAgICAgH+Af3+Af357gICBenyAgYKDhYODhYWFhYODg4SCgYKDgoOCgoGBgIB/gX5/fX59fHx8fHx8fHx8fHx8fHx9fHx8fn6Kgnt6e3p4ent7fH17fn1+f319fX18fH+BgX2Gj4F+fYJ+fn6Agnx8f3+BgIGAfn17ioJ9gH9+gYCAgYKBgoCAgIGAf4uTj4yLjY6NiIeHhYWEhIOCgoKCg4OCgoODgYGBgICAgICAgH9+fXx7fHx9f3+AgHx6gYF4e4CCgYOFhIOFhIaGhISAhpSIgIKBgYGBgH9/f39/fn5+gHx8fHx8fHx8fHx8fHx9fHx8fHx8fHl7e3t4eHl7enp8gX+Afn+BfH5+f399gIKCgICAgX+CkYF/f4CAfoB+fn9+gIGBfXx9e319fXx9fHx9gH+AgH6Afn6Bk5GMjI2NjoqFhoaFhISFg4OCgoODg4OCgoGBgYGAgICBgICAf4CAf39/fXt6fICAgHh+gXd7gIF/gYKCgoKEhoeGhn6IlYp+gYGAf4B/foB+f39/fn+Bfnx7e3x8fHx8fHx8fH59fHt8fHx8e3x8fHp6eXt8en2Fg4J/gYF+f35/gH6FgoF+gH9+foCFhoKAfn6Dhn9+fH6AgIGAf39+fX19fX57fH1/f3+AfX9+gIyRjYuNjo2Nh4SGhoWEhISDg4OCg4ODg4KBgYGBgYCAgYGAgYGBgYGAgH9/f397en9/e3mAd3p/f31+f3+Af4KDhoaFf3+FgX5/gIB/gH5+f31/gIB/gIB/f319fHx9fn18fH19fX19fH58fXx7fXx8ent6fH19f4aEgoCAgX1+fX5/fouEgYZ+fXx8f36CgX99fX19gHx7fXx+gYSDgYB+fn5+fX1/f399foB+fn6EkoyMi46Ni4qGhIWEhISDg4OCgoKDgoOCgYGBgYGBgYGBgYB/fXx8fH1+f39/f397e399d352eH59fH18fX5+gYGCg4B6fX18fn+AgH6Af35/fn+AgH+AgH9/fn9+fn5+fn1+fn99fH59fn19fHt8fHx6e3p9fn+Ag4OCf35/fH18fXx8gYN+jH58e3t9fn1+fn17e3t9fHp7e3uAhoSChIOCf4B+f4KCgn9/goJ/gIqPjIyLjYuKiISEhIOEhIODgoKCgoKCgoKBgYGAgoGBgYKCf3+AgIB/fn18fH5/fn55fX52e3Z4fXx8fHt9fX6BgICAf31/f31+f39/foB/f39+f3+AgIGBgH99gH9/fn9+fn5/f3yCfn59fX17e319fHp8fH6AgoGAgIB8fH18fHx8fH18fXt/fnt7e3x8fH18fHt7e3x8enp9en6CfoGDhIKBgoGFhoWFhoaHhoKEkY6Mi4qLh4iFgoOEhISEg4KCgYGCgoKBgoGBgYGBgoGBgoKAgYKBgYCAgH9+e3x+fnx6fnh5dnd8fHx7e318f4GAf35/foB/f35/fn5/gH9/f39/f3+AgYKAfn6BgIB/f39/f39+fYN8fH19fH99fX19e3x+fn9+fn5+fnx8fHx8fHt+fnt8e3x8fHx9fH18fnx9fHx7e3x5e3x7fH16fX5+f4CAg4eJiYmKiIuJhYiRjYuIiYeFhYOCgoOEhIOCgoKBgYKBgYKBgYGBgYKCgoGCgoCAgX98e3p6eXt9enx+fnl8eXh4dHx8fHt8fHx+gX9/f39/gIB/fn5+fX+AgH9/f3+Af4CDgoB/gIGAgIB/f4CBgH58enx9fX59fX5+jIZ9fX57e4OCfX5+fX18fX19fX1+fH18fXx9fX58fn19fX18e3t6fHt8fHt6e3t6enp7fn6DhYiHiIqLi4uJjJCOjYmIhoWEgoKCgoODg4OBgYGBgYGBgYGBgYGCgoOCgYKBgIGBf3+Af356eHl5en5+e3l6eH5zfHx8e3x8fH5+fn9/gH+AgIB/fn9+gIF/f4B/gIGAgoSEgYCAgYGAgX+AgYKBf39+fn1+gH57foGRjHx9f4qAjYx+fn19fX59fX59fHx8fX18fXx9fX1+fX1+fnx7e3t8fH18e3p7fHl6eXh5e35/hIOEh4mKiImNj42LiIiFhISCgYKCgoKCgoGCgoKCgYGCgYKCgoGCgoKBgoKAgYGAfoCAf39+e3p5e319eHx6f3KBfXt7fHx8fn59fYGBf4GBgX9/gH+AgX9/gIGCgYGFg4SCgYGCgYKCgICBg4KAf4F/fX6Afnx+f4iCf36DkISEg4F/fn18jYd9fX59fHx/fnx9fXx9fX5+fX5/fX19e3x9fnx8e3x9enp5eXl5e3t+foCBg4eEiI2MioqGhYSEg4KBgoKCgoGBgYGCgoKBgoKCgoKCgoKCgoGCgn+AgIB+f39/fn5/ent5fX16enp9cX6Cent8fX19fXp4f4KAgYKCgICBgIGBgICBgoKCgoaFhIKBgYGBg4F/gIKEgX9+gYB9foF+fX5/gIB9fn+EgH5+f31+fX2KhX1+f31+foB/fX19fH5+fn99f4B9fn18fX9/fHx7fH17e3t6enp7e3x9fn6Ag4CJjYqLh4WFhYSDg4KCgoKCgYGBgoKBgoKCgoKCgoGBgoKBgYKCf4CAgH9/f39+fn59eXp6fXx5d3t0e4d8dHd9fn17e3Z2foCBg4KBgYKCgoKBgYGDg4OChYaEgoCAgICCgX+AgYOBfn6AgH5+gH59fn6AgH+Bfn+Af39/f398f39/f3+Afn9/gH58fX18fn5+foF/gH2CgHx9gIB9fH19fXx8e3x8e3t7fHt8fHx9fImKiIiFhoWFhISDgYKBg4KAgIGCg4KCgoOCgoKCgoGCgoGBg4J/gIGAf39/fn5+fn57enp8fHt2e3R3f352cnt+fnt4dnd8gIGCgoKBgoODg4OCgoSDhIOFhoOCgX9/gIOAgICAg4F+foCAfX+AfX1+foCAf4J/gYGAf4CBf31/f3+AgIGAgIB/fnx9fX19fn59g32AfoKAfX6AgX98fn59fX17fH58fXx8fHt8e3x+iYWGhYaHhYSFhIKCgoGDgYCAgoKDgoKCg4ODg4KBgYGBgYGCgH6AgYB/fn5+fn5+fn56e3p9goN9dXF6fHpxen19eXh1dICAgoKCg4KDhYOEg4KDhISEhIWEgYGAgH6Agn9+f36Bf35/f4B9foB9fX1+gH9/gYCBgYCAgIKBfn6Af4GAf4CAgH9+fX19fXx+fn19gYR/gH9+f4GBf31/f319fn1+fn1+fHt8enx7eoCHgoSEhYSEhIWDgoKBgYKBgICCgoOCgoOEg4SDg4KBgYKBgYOAfoCBf35+fn5+fX5+fnt7en6Jh354cnl9f3F6eHt4eXR1fYKDgoODg4OFhIWEg4OEhIODhIKBgH+Af4CBfn19fn9+fn5/gH19f3x9fX6Af4CAgIKAgIGAgoGAf4B+gIF+gIGAgH9+fn5+fn5/fn6FhYGBgH+Ag4F/foGAf35/foB/fn17ent6fHt6goR/g4KCgoKCg4GBgYCAgoGAgIKBg4KBg4SDhIKEgoGBgoGCgn9+gIF/fn1+fn5+fX59fXp7fIWEe3tzeXp8cHd1dnd5dnR6hISBhISDhIWFhoSDg4WEgoODgoCBf4B/f4B9fX1+f31+f39/fn1+fH19foF/gIB/gIB/gIGDgoGAf36AgH+AgYCBgH9/f39/f4CAgIGCgoKBf4CDgX+Ag4J/f4B/gX+Af3x7fHp8e3yBgH+Cf3+BgIKCgYF/fn+BgH6BgoKDgYGDg4KDgoSCgYGBgIGCgH6AgH9/fX5+fX19fn1+e3t6gH94fHZ5eXtxdHh3dnh1cnmFhYKEhIKEhYWGhISChIOBg4GAgIF/f4B+gHx9fX6Afn5/f39+fX98fn5+gX+Bf39+f4B/gIODg4F/f4GBgIKBgYGAgICAgICAgIGAgYKDgYF/gISBfYGDhICAgX+BgYKBfXp7e3x8fX99f4B8f399fYGAgH59fYB/foGBgYKBgIKCgoKBg4KCgYB/gYKAfn9/fn99fX1+fX19fX19ent7fHZ9eXh5enJ1eXl2d3dzdYaFg4WFgoSEhYSEhIKDgoGDgX+AgX5/gH6AfX19fn9+f4B+fn99f3x/f3+BgIF/f3x+gH6AgYKDgYCAgoOEgoGAgYB/gYCAgYGAgYGCg4KBgX+Ag4B+goKEgICCgYKChIJ+e3t8fHx9fX1+fXp+fX14fn9/fHx8fn1+gYCBgYCAgoGBgYGDgoGBf4CAgoB9fn19f319fX59fH19fX16e3p8dnx6d3t4cnZ5e3Z2dnN0hoSEhYSBhISFg4OCgYOBgYOBgIGBfX+BfoF9fX1/f39/gH5+f359fYB/gIGBgX9+fH5/fn5/gYJ/gYGCg4eFgX9/fn6Af4CBgICAgIKCgYCAfoCCf36BgoKBgYOCg4OFgn99fX18e3x8eXp7en55e3l4f357e3t+fX1/f4F/gH6BgICAgoOCgYF/gIGBf31+fH1+fX19fX18fn58fXx5e3x4enx3endzeHd6c3d2c3SGhISFg4KDhISDgoKCg4GCgoGAgYF8gIB+gH1+fX5/gICAf35/f3x+gH+BgIGAf359f39+fn+BgH2AgIGDhIN/f359fn5+f4B/gIB/gYKBgH9+f4F+f4CCgoCBhIKEhYaEgH59fHx8fHp5dnl5enl2eXZ+fHt7e358e399gH99fX9/f3+BgoGBgX5/gYF+fX18fX19fX19fXx+jYF8fXl7e3p5fHd4eHR1dXhyd3d0doaEhIWDg4ODg4OCgYKDgoGDgn+Bf39/fn+AfX19fX+AgIB/f39/fIB/f4GAgYCAf32Af31+fn9/fX5+gIGCgn5/fn1+fn5+f3+Af32AgIB+fn5/gX5+gIKBf4GDgoOEh4SAgH58fXx8e3x1eXl4eHh5d3t8e3p7foV9fn1/ent+fn59foGAgIGAfX6BgH59fXx9fX19fX18e32DgXx8ent7e3p7d3Z4dXJzdnF4eXJ4hYWFhYOEg4KChIKBgYKBgIKBgIF/fn5+foB+fX58foCAgH+AgX98gH6AgH+BgIB/fYB/fn5/f319fX6AgYKBfn9+fn59fX5/fn9+fH+Af35+fn+Cfn6AgIF/gYOCg4OGhICBfnx9fHx7fHh3e3h1eXd3eXx6e3t9kod9fH13en1+fn19f35+gH98foB/fn19fH19fX19fXt8ent9enp4e3x6ent4dHh1cXJ0cHh4cXmEhYWFg4SDgoODgoGBgoKAgYGAgIB9fn5/gH18fn1/gIGAf4CBgHyAf4B+f4GAf399gH9+f39/fX18gICAgYB+f35+fn18fn9/f358fYB/fn1+gIJ/foCAf36BhIKCg4WFgoJ+fX17e3x8eXd7eXd4d3d4e3t6e3yFin17end6fH19fHx9fX1/fnx9fn59fXx8fX5+fX18fHt6enx7e3p5enp6enhzd3VxcXJweHdxe4WGhIWDhYKBg4OBgYGBgoCBgICBgH5/fn+AfXx+fYCAgoGAgIGBfX6Af35/gX+Af3+BgH+Af31+fH1/gICAgH9/f35/fXx+f39/f319f39+fn6CgYF/gIB/foGDgoKEg4SCgn5+fHx6fHt7eXt6d3N2d3h5e3p7eXp/fnt7d3p8fXx8fH59fH19fH19fXx8fX19fX99fXx9e3l7fHx8enp6enp6eHN2dXBwcm93dnJ7hYaEhYOEgoGDgoKCgYGCgYKBgYGAf4B/f399fX9+f4CBgYJ/goF9foF+foCBf4B/gIKAgIB+fX58f3+BgICAf4B/f4B+fX5+f4B/f39/gH9/f4J/gH9/gIB/gYGAgISBgoKAf39+f3x9fn56fYV+dHx9enp6enx5eXp6hoV3eXx8fHx8fXx8fHx8fX19fHx9fX19fn19fX16eX18fH16enp6enp5c3V1b29xb3d0c3yFhoOEgoOCgYKBgoKCgYKBgYGBgYCAgICAgH59gH+Af4GCgn+CgX+AgX5/gYB/f4CAgn+Bf319f35/f4KAgICAgIB/gIB+fn1/gH9+gIB/f39/gH+AgICAgH+AgYCBgYGCgYCAf39/fn1/fnqBk416fH18e315e3p6eHmBgXh5e3x8fXx8fHx8fHx9fX18fH18fn1+fn59fHp8fHt9fXt5enp6eXlzdXVvb3Fwd3N0fYWGg4OCg4KAgYCCgoKAgYGBgYKBgYCAgIGAfn6Af4GAgYKCgIKCgICCfoCBgX9/gX+BgIF/fH6Af3+AgoCAgICAf3+AgH9+fX6Afn2AgIB/f3+AgICAgYCAf4CAgYCBgYKCgICAf39/fX5/fIGGiXx8fnt7fnl6e3p7jX53d3l8fHt9fHx8fHt9fH19fX18fXx+fn5/f358e3x9e319e3l6e3p5eHN0dW5zcXB4cnV6hYaDg4KDgoCAgIGCgX+CgYKBgoGBgYKAgYF/fn9/gYGCgYKBhIOAgYJ/gYGBf4CAgIB/gX99f4F/gICBgICAf4B+gICAf359foB+fn+Af39/gH9/gICBf4CBgH+BgIGCgoKAgICAgIB9foB9gIOCe35+e3x9e3p8fHuHeXh4eXx8fH17fHx9fX18fH19fn19fX5+f3+Af317fH18fHx7enl7e3l5c3J1bnZycHhxdXaFhYOEg4KCgICAgoF/gIKCgoKDgYGDgoCCgYB/gICCgoKBg4KEhICBgX6BgoB/gICAgH+Cf36AgYCCgICAgIB/gH+AgIB/fn2Af35/f4CAgH+AgH+AgYGAgICAgIGAgYGBgoGAgYCAgH9/gH5/fX59fn57fXx9fHx8eHh1eHh5e3x8fXt8fHx8fX5/f39/fn19foB/gIGAf3x9fHx9e3p7eXp8eHpzcnVud3FxenF2d4WFg4ODg4KBgYKDgH+CgYWDg4SBgYOAgoOCgYCAgYKDgoCCgoSDf4GAfoKDgICBgICAf4CAf4GBgIKAf4CCgH9+gICAgICAf4CAgH+AgICAgICAf4CBgYCAgICAgYGAgoKCgoCCgYGBgYB/f4B/gId+fnx6fXx7fX94d3Z5eXp8fX18fXt8fH19fn5/gIGAfn1+gICAgoGAfH59fX58d3t6ent6eXRxdW53cHV6cnZ5hYWCg4KDg4KDhISAgIKBhoOEg4GChICEg4KCgICCgoSBgYKChIJ/gIB/gYOCgYCBgYCAgIGBgYGAg4F+gIOCf35/goGAgIB+gYCBf4CAgYGBgYCAgIKBgYKBgYCBgYGBgoOCgoOBg4OCgYCBgH+AhH19fXx/fXp9gHp5dnp4eXt7fH19e3x9fX19fn+AgYGAgH+AgICDg4B9f35+fn15eXt6enp5c3J1b3dxd3lzd3uFgoKDgoOEgoOEg4CAgoKGg4ODgoKEgYSDgYKAgIKBg4GCgoGCgX6BgICCgYKBgYKCgIGAgICCgoGEgH6Bg4J/f4CDgoCBfoCCg4KAgYGBgoKDgoGBg4KChIGAgYOBgYKEg4KEhIODhIODgYGBgYCCf4B/fYB8enx/e3t3fHl5eXt6fX59fHx8fH1+fn+BgYCAgIGBgYSEgH2Af39/f357e3t6e3pzcHhyeXR2eHR3e4SCg4KDg4SChIODgYKChIaEgoODgoSBhISBg4CBg4KCgoKCgIKAfoGAgIKBgoGCgoKBgIGBgYOCgoOAfoGDgX9/gYSEgYN/goKBg4KCgoGDg4OEgYKEgoOCgoGCgoOBg4SDhISEhYSFg4SCgYOCgoOBgYGAgH58fIB8fHh8eXp5enx9f3x7fHx9fX18fICAgICAgYGBgYKBfoGAgICAf3p7fHp6enVweHd5dnV8dXZ8gICDgoODg4OEhISAgoOFhYWDg4KDhIGEhYKCgYKDg4GCgoKAgYB9gICBgYKDgoKCgoGAgYKCg4KCg4B/gYKBgICChIODgoGCgoGDgoKDg4SDg4SAgoSDhIOBgX+Bg4KDhYKEhISEhISDhISChIOEhIKBgoGBgHt+gX59eXx6enp9fXyBfnp8fH19fHp7fn5+gIB/gYGAgICAgIGBgIB/fX18fH18dnJ2eHh2dH92dX2Hh4OChIWDg4SFhICChYWEhIOCg4SEgISFg4KCgoODgYOCgoCCgH2AgIGCg4KCgoKEgoGCgoOEgoKBgICBgoGAgYOFhIOCg4CCgoOCg4ODg4OEg4CCg4KEg4KCfoOBgoSEgoODhISEhIOEhIOEg4WEg4ODgoKAe4CBf3x8fXp6e32AfX9/fHx6fH59fX19fn5/f39/gICAgH9+foCBgICAfnx9fX5/fn18e3h2f3Z3f4SHg4KDhYODhIaEgYKGhoWEhIODhISChIWFgoKDg4SCg4KDgoOBfoCAgoKDgoODg4SCgYKCg4OCg4GBgYGDgn+ChISDg4KEf4KEg4ODgoSDg4SCgIOEg4SDg4KCg4KChIOCg4OEhISEhIWEg4OEhYSFhIOBgoB9gYKAfXx8e3x8gH19foB+fn1/fnx8fX19fn5/fn+BgYGBgH99fX6BgYB+fn19fX59fX5+f39/fH2BgYKCg4OGg4SDhoSBg4iHhYSDg4SEhYGFhYWDg4SDhIODgoOCg4F+gYGDg4SCg4OEhIOCg4KEg4ODgoODgYOCf4KDg4ODgoOAgoWDg4ODhIODhIOBgoOEhYOCgoODgoGEg4GDg4SDhISEhYSEhIWFhYWEg4OEf32BhIB9fXx8fHx/gX5/f39/fX99e3x9fX19fX5+f4CBgIGBgH59fH6Cf39+fn5+fX1/f39/gYCAf4CEhIODhIWDhIOFf3+CiouFhISDgoSFgYaGhoOEhISEhIODg4OEgn+BgYODhYSFhIWEg4KEhISFhIODgoODhYKBhISFhYaEgoCDh4SDhIOFhIWFhIGEg4OGgoOCg4GCgoSDgoODhYODhYWEhYWHh4aHhYSEhYSAf4GDf35+fH59fX+BgH9+fHx+f358enx9fX19fX5+fn9/gIGBf319fIB/gH5+fn5+f3+AgYGBgYKAgYWFhIOFhIKEg4aAgoWFiomEhIOEhYWDh4aGhISEhIWEhYSEg4SDgYKDg4OEhIaEhYSDg4SEg3yDhHuBhHd5g4F9hH5+cnWDgoF2foOEgX2BdYF6g39/f3+EhIKDg4KBg4SDg4SFg4SFhoSFhn2EeXx+f4N7hYKBhIOBf35+fn19gYOBfXt/fX6Afn18fHx9fX19fH19f4B/gYJ/fX18f4GBgICAgH+BgYGCgYKDg4KChoSEhIaEgYOEhYOEhYSKiIWFhYOFhYSGhoaDhISFhYWEhYWEhIWCgoOEhYWFhoSFhIODhYWCaICFanx7cXF8gXOGc3R0fYKDdXNxg4ZzcHVyc3SDdnt9dYF/goOBgnZ5hYCDgIR/hYSChYWCaHpyc3N8gHOCg36Dg32BfX5+fX6Cg4F8f4B9f4B+fXx8fHx9fHx8fn1+gH+BgX99fX2AgYKBgYGBgIGBgYKBgoKCgoSHhIWEhYSBgoSGhoOGg4aIhoaFg4aGh4eGh4OFhYaFg4KFhoSFhYODg4SEhoaGhIaEg4SFhn1xe4FweXZ+g3+CbnlwdXN8dnl5hXKEg3B2eHF2dHR1cnN0dml/gG5yb3R2bnVsd217c26AiHltfXJzdnN2bW14bHB5bHV9f399foGAgX1/fn2Af4B/fX18fH19fH1+f32Af4CAfnx/foCBgoCBgICAgYCAgIKDgoOEhYiGhoCChYODhIeGg4aFhYaHh4SDhoeIiYaHhIWGiIeEg4WGhYWEhIOFhIKFhoaFhoWEhoWHdnB0e3BydX+HhYNtdW92b3x1coR5eYd4cXR3bndnd3pucHWCcoN+b3p5eW1vbnpvb213fXiGcHF6cHJ0ZoF1fm57eXNveX+Af319gX9/fH99fIF+gIB+foCAgYB+fn9/foF/gH9+fYB9f4CBf4B+fn+BgH9+goOCgoSFh4eEfoeEg4OFh4aEhoWFhoaIhISGh4iIhoeEhoaLiYWEhoeHhYSFhYWEgoWFhIWGhYWGhYZxdXByc29zenl+hHSIdHV+iHZugnKEhnluanJ/cW1zd3x/dXR8hH54cXV3bnl1enF2eHV6eYRxam95eHBreXN6b3p3dnZwgYB/fn5/f356fn19f31/f359gIGDg4CCg4GBhIKBf4GBgH1/f4F+f35+f4GAfn6BgoCAgYSHhoODhoSFhYaHhoWFhYWGhoiFhYaFh4eFhoSGhomIhYSJioiFhIaGhYWDhYWEhYaGhoaFg3iLeXKIentwcIWFeIV4eWtzfnl7a3KDh4N6fG17eXl0fYB2bm+AgG90fHV3cXl9fW1+dW+DhYZ6gHJye3x1cG96bHN8bneCgIF+fn99fXt9e3x9fX9/fX1/f4KCf4GDgYGDgYB/gICAfn9+f31/fn1/gH58fYGAfn6Ag4iFhoOFhYWFhoeFhYWFhoeHiIaEhoWHhoaFhIWFhYWFhomJh4aEhoWGhoWGhoSGhoaGhoWGh4eHhoaEhoWGh4iHhYeGhoOHhoWFg4SGhoWGhIaEg4SEhoSEgYODhISFhIWEhYSGg4aHhYaEhIWHhoSEhYaEhX13hYOEhIKBgX1/fnt8e357fHx9f359fH5+gYB9f4F/f4GAfn5+gH5+f35+fX99fX5/fHt8f358fH+BiYaFhIaGhoWHhoWFhYWHhoeIhoSGhYaGhYWDhIWGhYSGhoaGhYWGhIWGhoaGhYaGh4eGhYeIiIiIhoSHhYaGiIaFiIeIhYeGhoiFhYaGhYaGhYOChYWGhYWDhYOEhIWEhYWEhYWDhoeGhoWEhoeGhISFhoOFhIKEg4OFg4OCfYB/e3t8fnt8fH1/fnx8fn2Af31+gH5+gH99fXyAfX5+fn5+fnx9fX57fHx/fHt7fX+Ih4SEiIaGhoeGhYWEhoaGhoiHhIWGh4aFhIODhIaFhIeFhYaFhIaEhYaGh4eFh4aJiIaGiIeIiYiFhYiFhoeGh4aHhoeFh4eGh4WFhoeFh4aFgoOFhoaEhIOEhIOEhoSFhYWGhoOGhoWGhYSGhoWEhIWFg4WHhYOCgoWDhIF+gIB8e31+e3x7fX59e3x+fX5+fH9+fX1+fn19fH98fn58fYGAfHx8fXx8fH56e3t9foiHgoWIh4eGhoaGhISGhoeGiIaEhYSGhoSFh4OEhYSFh4SFhoaFhoSGhoeHhoaIh4mIhoaIh4iKiIWHiIWGh4WHhoeGh4WIiIeHhYaGh4WGhoWBhISFhoWFhISEg4SFhYaGhoWGhYaFhoeFhYaGhYSDhISDhIeDhIGChISDgYCAgXt7fn18fHx9fXx8fH19fH18fn18fX18fHx8fXx+fXt8gX99fH18fnx8fHp6fHx9iIeChoiHhoeGhoaEhYaFhoWGhYOFhIaFhIiJg4GEg4SGhIaGhoaGhIeHiIiHh4eIioiGh4iHiImIhYiHhYeGhoeHh4WHhoiIh4eFh4eHhoaHhIKEg4SGhYaFhISEhISFhoaGhoaFh4WFh4WFhYeFhIOEg4ODh4GDgIKDg4KCgn+Ae31+fXt8fH59fH19fH17fHx8fHx8fXt7e318e358e3x/fX18fX1+fXx6ent7fHyIh4KGhoaGh4aGhYSFhoWFhYWEg4WChoSDiId/enqChYaEhoaFh4aEh4eJiIiHhoiKh4aHh4eIiYeFiIeGh4eGhoeHhYeGiIiHhoWHh4iGhoeDg4SEg4aGh4WFhISEhYaGhoaGhYaHhoaHhoaEhoWDg4ODgoOGgYN+goKDgIOCf398f35+fHx9f318fX18fXp7e3p7fHx8e3t7fnt7fXt7e358fHx8fX5/fXt6fHp8fYmHg4aFhoWGhoWEhIWFhYWFhIOBhYGGhIKEhHyAhn+ChYWGhYWGhYSHh4iIiIaFiYqHhYeGh4eIh4WIhYaHiIaGh4eGh4aIiIeFhoeGh4WFh4OEhoWEhoaHhoWEg4WFhoaGhoaFhoaHhoeHhYOGhYOBg4KAg4WCg36BgYF/g4F/fn5/fn98fH1/fXt9fXx9enl6eXt8fXt7e3t+fHx8fHp7fXx8fHx+fYF8e3t7e3x7iYeEhoSGhIaGhYSFhoWEhIOEgoCDgYWDgYJ/eoSMe4CEhYeGhoaFhIeIh4aHhYWHioeEh4WGhoiGhYeEhoeJhoaIiIeHhoeIhoSGhoaHhYWHg4SFhIaGhoeFhISDhYWHhoeGhoWGhoaFhoaEg4SFgoGCgYCDg4KCfYGBgH6DgX5/f4B8f3x9fX59e359fH15eXp5e319enp7e318fXx8ent9fHx9fH5+gHx7e3x+fXyIh4WGhYaEhoSFhYWFhYODgYOBgIKBhYKAgH9/fXx7gYSFhYaEhYSDh4iGhoaFhIaJhoKGhIaGhoWFh4WHiIiGhYiHiYeGhoeFhIaFhYeFhIeDhIWEiIaGh4WFhIKGhYaFh4aHhIaGhoaFhoODg4WBgIGAgIOBg4B8gYB+foKAfYB/gXx/fH1+fX57fn18fHl6enl6fX15ent7fHt8e3t6e319fH18f35+fHt7fX59fIiGhYaGhoSFhYSFhYSDgoKAgoGAgICDgX5+foB5en2Ag4OEhoWEg4OHhoOEhYSChYiFgoSDg4WFhYWHh4aIiIaFiIeJh4aFhoWDhoSFh4OEhoSEhYSHhoWGhYaEg4aFhoaGhoaEhYaGhYWFgoKDg39+gICAgX+DgHuBf31+gn5+gH6Afn99fX59f3t/fXt6eXp6eXp8fXl6ent7enx6e3t7fH19fXyAfn18fH1/fnx7h4WFhoaGhoSFhIWDhYKBgICAgYB+f4KCfX1/f3t/f4KDg4WGhYSDgoaDgYOEgoCFh4WCg4GBg4WEhIaGh4iHhYWIhomHhYSEhIKFg4SGgoOFhIWGhIeGhYWFhoOEhYSFhoWGhIOFhIWDhYWBgYODf35/gH9/gIN/e4B9fX+CfYCBfX6Bfn19fX1/e398e3p5enp5enp8eXp6ent7fHp7e3t8fX59fYB9fXx8fYB/fXyGg4aGhoaGhIWDhYKFgYGAf3+AgH5/gIJ9fn9/foCAgYKChISDgoGChIGAg4KBgISFhYKBf4CCg4OEhYaIhoWEhoeFh4WFgoOCgoOCgoWBg4WEhYaEhoaHhoaFgoSEg4SGhYWDhIODhIOFhICAgoJ/fX1/fn5/hH57f3x8gIF9gYB9fYN8fn59fX57fnt7enl7enl6ent5enp6e3t8ent8fHt9fn1/gXx9fHx9f4B+gIaEhYWEh4SEg4KGgoOAgYB+fn+AfX9/gXx9f39+fn+BgYKEg4KBgYKCf4CBgoCAgoWEgoB/gIGCgYOFhYeFhISGhoOFg4WBgoGBgoGCg4GChISEhYWGh4eGhYSDg4ODhIWFhIGDgoOChIODgH+AgX59fH5+fH6Dfnx+fHyBgH6Cf31/gnx/fn19fHx8e3t6enp6eXt6enp5eXp6e3x5e317fH5/f4GAfX59fX1/gICAhoSEhYSFgoSCgoSCgoCBgH59fn9+fn6AfX2Af35+foGBgoODgoSHgYF+gICBf3+ChIOBf35/gIJ/goWEhYSCg4WFgoSBg4CBgIGBgYKBgIGEg4OGhYWHh4WEhIWCgoKDhYSCgYGBgoCFg4F/foB/fnx8fn18foN9e318fYF/gIN9fYCBf35/fXx8fH17e3p6enl5e3l6enl6ent7e3p7fXx8f3+BgoB+gH+AgH+AgYDKysrKysrKysrKysrLy8vLy8vLy8vLy8zMzMzNzc3Nzc3Nzc3NzczMzMvLy8vLy8vLy8vLy8vLzMvLy8vLy8vLy8vLy8vMzMzMzM3Nzc7Oz8/Pz9DQ0NHR0dLS0tLS0tLT09PT0tLS0tLS0tPT09TU1NTU09PT09PT09PT09PT09PT09PT09PT09PT09PT09PS0tLS0tLS0tLS0tPT09PT1NTV1dXV1dXV1dXV1dXV1dXV1NTU1NTT09PT09PT09PT09TU09PU1NTU1NTU1NTU09PT09PS0tLS0tPT09TU1NTU1NPT09LS0tLS0tLR0dHR0dPHhnNlYFtLWWdVTUZIQD03Nzg5Nzw8PDo8Oz42Oj04PDs6OTg3ODs7Oj87PTs8PD47P0E/QkJBQ0RFREE+PTw7QENDQUBDQ0FBR0hHSUtSwtXS09PT09TU1NTU1NTU1NTU1NXV1dXV1dXV1dXVysrKysrKysrKysrKy8vLy8vLy8vLy8vMzMzMzMzNzc3Nzc3Nzc3MzMzMy8vLy8vLy8vLy8vLzMzMy8vLy8vLy8vLy8vLzMzMzc3Nzc3Oz8/P0NDQ0NHR0tLS0tLS09PT09PT09PT09PS09PT09TU1NTU1NTU09PT09PT09PT09PT09PT1NTU1NTU1NTT09PT09LS0tLS0tLT09PT09PU1NTU1dXV1dXV1dXV1dXV1dXV1dXV1NTU1NPT09PT09PT09PU1NPT09TU1NTU1NTU1NPT09PS0tLS0tPT09PU1NTU1NTU09PT09PS0tLS0tLR0dHSzIxyZ2BcTVllUktHSz87Mzc4Ozg5Pj05PDpBOjs9Nzs8PDo6Nzg6Oz0/Oz88PTw/Pj9BPUFBPkNDREJAQT46Oz9DREFDRERCQklHSEhJTr7V0tPT09TU1NTU1NTU1NTU1NXV1dXV1dXV1dXV1crKy8vKysrKysrKy8vLy8vLy8vLy8vLy8zMzMzMzM3Nzc3Nzc3NzMzMzMzMy8vLy8vMzMzMzMzMzMzLy8zMzMzLy8vLzMzMzc3Nzc3Ozs/P0NDQ0NDR0dLS0tLS09PT09PT09PU09PT09PT09TU1NXV1dTU1NTT09PU1NPT09PT09PT1NTU1NTU1NTU1NPT09PS0tLS0tLS0tPT09PT1NTV1dXV1dXV1dXV1dXV1tbV1dXV1dTU1NTT09PT09PT09PU1NTU09TU1NTU1NTU1NTT09PT0tLS0tLT09PU1NTU1NTU1NTU09PT09PT0tLS0tHR0s+Sd2hfXk9XZ01LRkw9ODc2NTk5OTw+OT88RDo7PDc5PD07OTc5Ojw9QDs+PT47PD48PT5BQD5EQ0NDP0E9Ojs9QkNFQ0NEQT9FSEpJSky61dPT09TU1NTU1NTU1NTV1dXV1dXV1dXV1dXV1dXLy8vLy8vLy8rKysvLy8vLy8vLy8zLy8vMzMzMzMzNzc3Nzc3Nzc3MzMzMzMzMzMzMzMzMzMzMzczMzMzMzMzMzMzMzMzMzc3Nzc3Ozs/Pz9DQ0NDQ0dHS0tPT09PT09PT09TU1NTT1NTU1NTU1NTV1dXU1NTU1NPU1NTU09PT09TU1NTU1dTU1NTV1dTU09PT09LS0tLS0tLS09PT09TU1dXV1dbW1dXV1dXV1tbW1tXV1dXV1NTU1NTT09PT09PT1NTU1NTU1NTU1NTU1NTU09PT09LS0tLT09PU1NTU1dXV1dTU1NTT09PT09PT0tLS0dHRmn5nYWJOVWpKSElLPzw6OTM3Njc3PTs+OT06Ojo4ODo7Ozg4Ojs7PD46PT09Ojw/PD0/QkA/Q0RDRD5APT08QENEQ0JEQkQ+REhJSUtMttfT09TU1NTU1NXV1dXV1dXV1dXV1dXV1dXV1dXVy8vLy8vLy8vLy8vLy8vLy8vLy8zMzMzMzMzMzMzNzc3Nzc3Nzc3Nzc3MzMzMzMzMzMzMzMzNzc3NzczMzMzMzMzMzMzMzc3Nzc3Ozs7Pz8/Q0NDQ0NHS0tLT09PT09PT1NTU1NTU1NTU1NTU1NTV1dXV1NTU1NPT1NTU1NTU1NTU1NTU1dXV1NXV1dXV1NTU09PT09PS0tLT09PT09PU1NXV1dbW1tXV1dbW1tbW1tbW1dXV1dXU1NTU1NTU1NTU1NTU1NTU1NTU1NXU1NTU1NTT09PT09PT09PU1NTU1dXV1dXV1dTU1NTU09PT09PS0tLR0p+DaV9kU1hsSEhIS0A9Nzg0NzY6Oj87RDw8OTw8OTg6OTo6Ojs8Ojo7OT49Pjk9QDs/QUFCP0JCQUM9Pz8+PEBCRUNDQkBBO0ZJR01MSbLY09TU1NTU1NXV1dXV1dXV1dXW1tbW1tbV1dXW1svLy8vLy8vLy8vLy8vLy8vLy8vMzMzMzMzMzM3Nzc3Nzc3Nzc3Ozc3NzczMzMzMzMzMzc3Nzc3Nzc3Nzc3Nzc3Nzc3Mzc3Nzs7Ozs7Pz8/P0NDQ0NHS0tLS09PT09PT09TU1NTU1NTU1NTU1NTV1NXV1dTU1NTU1NTU1NTU1NTV1dTU1dXV1dXV1dXV1dTU1NTU1NPT09PT09PT09PU1NXV1dbW1tbW1tbW1tbW1tbW1tbV1dXV1dTU1NTU1NTU1NTU1NTV1NTU1NXV1dXU1NTU1NTT09PT09PT1NTU1dXV1dXV1dXU1NTU1NTT09PT09LS0tSjiGxfZlJWakdIR0lBPjM2Njo7PDhDPEJBPjxBPDg5Ojw6Ojw8PDk8PTo7PD09PD89QD9AQT9AQUBCPD4+PzxCQ0NDRkBBQT1ISklOTUeu2NPU1NTV1dXV1dXV1dXV1dbW1tbW1tbW1tbW1tbMzMvLy8rKysvLy8vLy8vLy8vMzMzNzc3Nzc3Nzc3Nzc3Nzc3Nzs7Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Ozs3Nzc3Nzc3Nzc3Nzs7Ozs7Oz8/P0NDQ0NHR0dLS0tPT09PT09TU1NTU1NTU1NTU1NTU1NTV1dXV1dTU1NTU1NTU1NTU1dXV1dTV1NXU1NTU1dTU1NTU1NTU09PT09TU1NTU1NXV1dbW1tbW1tbW1tbW1tbX19bW1tXV1dXV1dXV1dXV1dTU1NTU1dXV1dXV1dXU1NTU1NTU09PT09PT1NTU1NXV1dXV1dXV1dXV1NTU1NPT09PT0tLWroprY2VSWGhMSkdJQjg0OTQ6Ozo5QDk/Q0VAPDw5OTk9Oj07PDw6PTw7OTw9Ozs/PUA9PT5AQD9CQT5APD05QERDQkFBQj48SEpLTU5IqNnU1NXV1dXV1dXV1dXW1tbW1tbW1tbW1tbW1tbWzMzQ0dDQ0NDQ0dHR0dHR0c3Ky8vLzMzMzMzMzMzMzM3Nzc3Nzc7Ozs3Nzc3Nzc/Pz8/Pz8/Pz8/Pz9DQ0dHR0dHR0dHR0dHS0tHV2djY2NnZ2dra2tvb29vZ2dnZ2dna2tra2tra2tjW19fX19fX19jX19fX2Nzd3d3d3d3d3d3d3d3d3Nvc29vb29zb29vb29vb2tra2tra2tra2trb3NzX1dXV1dXV1dXV1dXW1tbX1tbW1tbV1dXV1dXV1dXV1dTU1dXV1dXV1dXU1NTU1NTU1NTU09PU1NTU1NXV1dXW1dXV1dXV1dTU1NTT09PT09PS1bqKa2hoUlhlSUlMT0A5OTo0O0E8Nz05QUM+QD89ODo6Ozk9Oz4/Ojs8PDo7PDo7Pj1APT8/P0FAQUE/QTw8Oz5BRENBREA9PElJSk1ORqPa09TV1dXV1dXV1dXW1tbW1tbW1tbW1tbW1tbW1szNloSGhoaGhoeHh4eHh4Ky4t3d3t7e3t7e3t7e3t3S0NDQ0NDQ0NDQ0NDQ0ci5ubm5ubm5ubm5ubq6t6WkpKSkpKSkpKSkpKSnhmBjY2NjY2NjY2NkZGRlhIuKioqKioqKioqKioemuri4uLi4uLi4uLi4ubN4c3Nzc3Nzc3Nzc3Nzc3qCgYGBgYGBgYGBgYGBg4uKioqKioqKioqKiouHvebh4uLi4uLi4uLj4+Pi2NfX1tbW1tbW1tbV1dXV1dXV1dXV1dbW1dXV1dXV1dTU1NTU1NTU1NTV1dXV1dXW1dXV1dXV1dXV1NTU1NTT09PT09XDkXFrak5TYkxMVk48Ojo3Nz5DPzg+Oj8/QTw/QDc7Ojs7PTs+Pjo7PD48Oz07PT8+QDw/Pz1AQEBBPj88PjxAQUVCQkZAQD9HSEpLT0ae2tXV1dXV1dXW1tbW1tbW1tbW1tbW19fX19fX19fMzm5QU1NTU1NUVFRUVFNMoPPr6+rq6urq6urq6uvp1dLS0tLS0tLS0tLS0tTEqaqqqqqqqqqqqqqqq6aGhIWFhYWFhYWFhYWFik4MEhISEhISEhISEhIRE0pUU1NTU1NTU1NTU1NPg6ejo6Ojo6Ojo6Ojo6WZMikrKysrKysrKysrKyk1RUNDQ0RDQ0NEQ0NDQ0ZTU1NTU1NTU1NTU1NTS6ry6+vr6+vr6+vr6+vr6dnX19fX1tbW1tbW1tbW1dXV1dXV1dbW1tbV1dXV1dXV1dXV1dTU1NTV1dXV1dXW1tXV1dXV1dXV1dXU1NTU1NTU1NPUy5h2bGlKTl9NUlVNPjw8Nzs/Qz42Ojc+Pjs9Qj85PDk9Ozw6PD07PTs9Ozs9PD0+PT07QT08QUBBQT08Pzw7QEJDQURFPUFAQ0ZLS09GmNzV1dXV1dbW1tbW1tbW1tbW1tfX19fX19fX19fXzM5xVFhXV1dYWFhYWFhXUKHx6enp6enp6enq6unq6dXS0tLS0tLS0tLS0tLUxaqrq6urq6urq6urq6yoiIeHh4eHh4eHh4eHh41SEhgYGBgYGBgYGBgYFxpOWVdXV1dXV1dXV1dXU4WopKSkpKSkpKSkpKSmmzgvMDAwMDAwMDAwMDAvO0lISEhISEhISEhISEdKV1dXV1dXV1dXV1dXV0+r8erq6urq6urq6urq6unZ19jX19fX19fX1tbW1tbW1tbW1tbW1tbW1tbV1dXV1dXV1dXV1dXV1dXV1dXW1tbW1tXV1dXV1dXV1dXU1NTU1NTU1NGcenFpSlRdT1JVTkQ+Pzs/QEA4Ojs4PDs7PD86Ozs4Ozk5Ozw7Ojw5Ozs8Ozo9PT0+PUE/Pj8/Pj08PT88PEFBQ0FERTw+QEVGSktNRpPc1dXV1tbW1tbW1tbW1tbW1tfX19fX19fX19fX183OeF5hYGBgYGFhYWFgYFqk7ufn5+fn5+fn5+fn5+bV0dLS0tLS0tLS0tLS08Wtrq6urq6urq6urq6vq46NjY2NjY2NjY2NjY2SXSInJycnJycoKCgoKCcpWmNiYWJhYmJiYmJiYl6MrKmpqampqampqampq6BFPT4+Pj4+Pj4+Pj4+PUhVVFRUVFVUVFRUVVVUVmBiYmJiYmJiYmJiYmJbr+/p6enp6enp6enp6enn2djY2NjY19fX19fX19fX19fX19bW1tfX19fW1tbW1tbV1dXV1dXV1dXV1dXV1tbW1tbW1tbW1tbV1dXV1dXU1NTU1NTWo3txZElbYE5OVU9AQT89REI+Oz06OTs6PT07PDs6OTg5OTs8Ozw8Ojo7PDo7QD08PTxAQTxBQTs7PEA/PD1CP0RDQ0U8PkJERkpMTEWN3NXV1tbW1tbW1tbW1tbX19fX19fX19fY2NjY2NjNzcfFxcXFxcXFxcXFxcXEy9DPz8/Pz8/Pz9DQ0NDQz87Ozs7Ozs7Pzs/Oz87NzMzMzMzMzMzMzMzMzMvJycrKysrKysrKysrKysfCw8PExMTExcXFxsbGxsvMy8zLzMzNzMzMzMzLz9HR0tLS0tLS0tLS0tLRysrKysrKysrJycnJycnKy8vLy8vLy8vLy8vMzMvNzc3Nzc3Nzc3Nzc3NzdTY2NnZ2dnZ2dnZ2dnZ2djY2NjY2NjY2NjY2NfX19fX19fX1tfX19fX19bW1tbW1tbW1tXV1dXV1dXV1dbV1dbW1tbW1tbW1tXV1dXV1dTU1NTU169/cF5GXmJQUVdOR0ZDQ0lBPz07PDo8OEBCPD04Ojo4OTg7Pzs8PDs7PDw8PD87PD46Pj44PkI8Pj1BPjw+QkBERUNAPD5APkNJSUtEh9zV1tbW1tbW1tbW1tbX19fX19fX19jY2NjY2NjYzs3Pz8/Pz8/Pz8/Pz9PPz87MzczP09LSzs3P0s7Ozs7Ozs7Ozs/Rzs7S1M/OztPTz8/Pz8/Pz8/Pz8/Pz8/P0NDQ0NDR0dHR0dHS09PU1NTU1dXV1tbW1tfW1tbX1tfX19fX19fX19bW1tbW1tbW1tbW1tbW1tjX19fX19fY19bX19fX1tfX19fX19fX19fX2NjX2NjY2NjZ2dnZ2dnZ2dnY19jY2NjY2NjY2NnZ2dnZ2dnZ2djY2NjY2NjY2NjY2NjX19fX19jY19fX1tbW1tbW1tbW1tbW1tbW1dbW1dbW1tbW1tbW1tbW1tXV1dXV1NTV1di4gm9XSl9jUlFaS0hBQTxCPT07Oj4+PD4/PT0/Nzk6OTk3OD48PD47Ozw7PDs/PT0+OTs7OT0+P0A+QD07OkI/QkNCPz0+QD5CRUdKQoDc1tbW1tbW1tbW19fX19fX19fX2NjY2NjY2NjY2M7Ozs7Ozs7Nzc3Nzsqfys3Nzc3QuYOEi8fTwJrLz87Ozs7OztHBp9HSqKDQz9GkodDOzs7Ozs7Ozs7Ozs7Oz8/Pz8/P0NDQ0NDQ0NDR0dHR0tLT09PU1NTU1NTV1dXV1dXV1dXV1dXV1dXV1dXW1tbV1dXV1dbW1tbV1dXV1dXV1NTU1NXV1dXV1dXV1dXW1tbW1tbW1tbX19fX19fX19fY2NjY2NjY2NjY2NnZ2dnZ2dnZ2dnZ2dnY2NjY2NjY2NjY2NjY2NjY2NfX19fX1tbW1tbW1tbW1tbW1tXV1tbW1tbW1tbW1tbW1tbW1dXV1dXV1dXYwIBuVU9gY1dZW0xMQ0A9PTs9Ojw+Qj5CQ0A8Ojg5ODo6Ojc7Pz4/PDw7PDo5Pzw8PTg5PD9BPj09PUFAPTtBQkBCQz47QD9BQUlHSkF629bW1tbW1tbX19fX19fX19jY2NjY2NnZ2djY2dnOzs7Ozs7Ozs7OztKpj63Rzs7Ozpu3tqSiwJOerNPOzs7Oz8/RnY/FtJ6jp9avn6Gp0s7Ozs7Ozs7Ozs7Pz8/Pz8/Pz9DQ0NHR0dHR0dHS0tLT09TU1NTU1dXV1dXV1dXV1dXV1dXV1dXV1dXW1tbW1tXV1dbW1tbW1tXV1dXV1dXU1dXV1dXV1dXW1tbW1tbW1tbW1tfX19fX19jX19fY2NjY2NjY2djY2dnZ2dnZ2dnZ2dnZ2dnZ2djY2NjY2NjY2dnY2NjZ2NjY19fX19fX19bW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tXV1dXV1dXV18h/b1pTYWVeXVxPSkQ9QD8+Ozc6Pjk/RD9BOTg3ODk7Ozw4OT89PTw9PD47OkE7OTs5OzxDQDw7PT5AQT49QkQ/QkM9PT8+Pz5ISUg/ddrW1tbX19fX19fX19fX2NjY2NjZ2dnZ2dnZ2dnZzs7Ozs7Ozs7Ozs/Inrym0tDQzsqgl36Cw6abr6fUz8/Pz8/Tuq+quJ+ak53AnpiVnMjQzs7Ozs7Ozs7Oz8/Pz8/Pz8/Q0NDR0dHR0dLS0tPT09TU1dXV1dXV1dXV1dXV1dbV1dXV1dXV1tbW1tbW1tbV1dXV1dXW1tbV1dXV1dXV1dXV1dXW1tbW1tbW1tbW1tbW1tfX19fX19jY2NjY2NjY2NjY2NjZ2dnZ2dna2dnZ2dnZ2dnZ2dnZ2djY2NjY2NnZ2dnZ2dnY2NjY2NfX19fX19fX19bW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1dbV1dXV1dfNiHNdWGloXl9gT0lGOkFAPj88PDo2P0JAQzo2NDc6Ozo8Ojk+PD49PTs/PTxBPjw8Ojw8PTw6PEA9QEI+PkFCPUNDPT0+Oz9BRUtIQHDZ1tbX19fX19fX19fY2NjY2NjZ2dnZ2dnZ2dnZ2c/Pz8/Pz87Ozs7SrKWnqdXAvNLHnY+ey9PJipmq1M/Pz8/P05+xnaiaoZy0mJyinbCy08/Pz8/Pz8/Pz8/Pz8/Pz8/Q0NDQ0dHS0tLS09PT1NTU1dXV1dXV1dbW1tbW1dbW1tbW1tbV1tbW1tbW1tbW1dXV1dXV1dXW1dXV1dXV1dXV1dXW1tbW1tbW1tfX19fX19fX19fX19jY2NjY2NjY2NjY2NnZ2dnZ2dnZ2tnZ2dnZ2dnZ2dnZ2dnZ2dnY2dnZ2dnZ2dnZ2dnY2NjY19fX19fX19fX19bW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbV1dXW0JB1W1tqaWFeXVNOSTxDQEE+QD46OEZBP0M6NzQ5Ojo5Ozs4Oz0/Pj49QT08P0A9Pjw8PDw8Oj1AQD8/PT5CQD9AQkA8QD0+QUVLRz9r19fX19fX19fX2NjY2NjY2NjZ2dnZ2dnZ2dnZ2tnPz8/Pz8/Pz8/QzJ2Nl6zQmpfKxZ6ynpbN1q2ZqtTPz8/P0cCciZ6fm5atuYaelq+zqtXQ0M/Pz8/Pz8/Pz8/Pz8/P0NDQ0dHS0tLT09PT1NTU1NXV1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbV1dXV1dXV1dXV1dXV1dXV1dXW1tbW1tbW19fX19fX19fX19fY19fY2NjY2NjY2NjY2NjZ2dnZ2dnZ2drZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2djY2NjY2NfX19fX19fW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1dXV1tKUcl5ea2tqZV1PTEc/RENDQDo9OzxCPD49OTY0Ojk5Ojo5Nzs/QDs8PUA8PEE+PD07PTw/PDo8Q0A+PTs9QD5CPkBBPkA9QD9GSUQ/ZtXX19fX19fY2NjY2NjY2NnZ2dna2tra2tra2traz8/Pz8/Pz8/P07GigJuvyaCjv8qcpYynrdiqmarUz8/Pz9SjooGgmJuBoJZ4m4Sdk6TV0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NHR0tLT09PT1NTU1NXV1dbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1dXV1dXV1dbW1tXW1tbW1tbV1tbW1tbX19fX19fX19fX19fY2NjY2NjY2NjY2NjY2NjY2dnZ2dnZ2dna2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2djZ2djY2NjY2NfX19fX19bW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbSk3BgXnBoZmVaUUhHQkVDQEA3Ojo8Pjo8OTc2NTk6Njo8Ozc8QEA8Ojo9Oj0/Pj08OUA8PDo6OT9APj08PUBBQz9APz5BOz9ARkpCP2LS2NfX2NjY2NjY2NjY2dnZ2dnZ2tra29vb29vb28/Pz8/Pz8/P0M6fkGyclteqo9PSrqa1mJ/Vqpmq1M/Q0NHEn4F7moWfqIiceZ+phZmk1dHR0NDQ0dHQ0NDQ0NDQ0NDQ0NHR0tLT09PT1NTU1dXV1dbW1tbX19bW1tbW1tbW1tbX1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tfW1tfX19jY2NfX19fX2NjY2NjY2NjY2NnZ2dnZ2dnZ2dnZ2dna2tnZ2dnZ2dnZ2dnZ2dnZ2dnZ2djY2dnZ2dnZ2dnZ2dnZ2NjY2NjY2NjX19fX1tbW1tbW1tbW1tbW1tbX19fX19fW1tbW1tbX0pNuYFxxZGdkWlVKQENGQ0FCODs/PD07PDw4NTU4OTY4Ozo5PDo+Pzw9PTk8Pz49Ojo+OTw6Ojg+Pzw9PTw+QEFDQT48PDpCRERKRkJd0NnX19jY2NjY2NjY2dnZ2dna2trb29vb29vb29vPz8/Pz8/Pz9G9n8O31pfA09HQ0srSzZeb1KqZq9XRz9DVq6+8wNN2tLCmnIq9raaYr9bR0dHR0dHR0dHR0NDR0dHR0dHR0tLT09PU1NTV1dXV1tbW1tfX19fX19bW1tbW1tfX19fW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW19fX19fY2NjY2NjY2NjY2NjY2djZ2dnZ2dnZ2dnZ2dnZ2drZ2tnZ2dnZ2dnZ2dnZ2dnZ2djY2NjY2NjZ2dnZ2dnZ2dnZ2dnY2NjY2NjY2NfX19fX19fX19fW1tfX1tbX19fX19fX19fX19bW19GRbF1cb2doYl1PRkBISUdFQDw8Pj48PT48NzU2Ojk2Ojs6Ojs4QD86PDw5PD49Ozs6Pzk/Ojs5PT49PTs7PTxAQ0I/Pz47Q0ZGR0hEWc3a2NjY2NjZ2dnZ2dnZ2dna2trb29vb29vb29vb0NDQz8/Pz8/Pz5V+e6WS1KKa08ySl6ObodirmavV0pem1cmHf4WglaaXl52lp5aYm7vV0dHR0dHR0dHR0dHR0dHR0tLS0tLS09PU1NTV1dXV1tbW19fX19fX19fX19fX19fX19fX1tbW1tbW1tbW1tbX19bW1tbW1tbW1tbW1tbW1tbW1tbW1tfX19fY2NjY2NjY2NjY2NjY2dnZ2dnZ2dnZ2dnZ2dnZ2tra2tra2tnZ2dnZ2dnZ2dnZ2djY2NjY2NjZ2dnZ2tnZ2dnZ2dnZ2djY2NjY2NjY2NjX19fX19fX19fX19fX19fX19fX19fX19fX1tfPjGRWXnBrXGBgTkVITUlJT0M+OkI9PUBCOzU1Nzw6Nzo7Ojo7OT09OTo6OT0+Pz07OT47PDo8Ozk+PD47PD0+QENCPz5BPEFDR0ZGRVXJ29jY2NnZ2dnZ2dnZ2dra2tvb29vb29zc3Nzc3NDQ0NDQ0M/Pz9DR1aeZrcmjqL7KnbGdo7XZqZup2LirocbT09WcmMKiq6Sb0J+rpJzR09LS0tLS0tLS0tLR0dHS0tLT0tPT09PU1NTV1dbW1tbX19fX19fX19fX19fX19fX19fX19bW1tbW1tfX19fX19fW1tbW1tbW1tbX19fW1tbW1tbW1tbX19fX2NjY2NjY2NnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dra2tra2tra2trZ2dnZ2dnZ2dnZ2djY2NjY2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnY2dnY2NjY2NjX19fX19fX19fX19fX19fY2NfX19fX19fYzYZdV2JvZE9dVEtIRlNRS0xAPj1EPD9DRj01NTc7OTY6Ozo8PTo7Pzo6OTg6PT0/Pjs/Oz49Ojs5Pjs9PD0+QURCQD8+PzxAQUVHRURSxdvY2dnZ2dnZ2dnZ2tra2tvb29vb3Nzc3Nzc3NzQ0NDQ0NDQ0NDQ0NO5gL3Tm5bP1LWLkZ/T1LyBu9TOlKDS0dLXqIfOxpCNt9fCj4281dLS0tLS0tLS0tLS0tLS0tLT09PT09PU1NXV1dbW1tfX19fX19fY2NjY19fX19fX19fX19fX19fW1tbX19fX19fW1tbW1tbW1tbW19fX1tbW1tbW1tbX19fX19jY2NjY2NnZ2dnZ2dnZ2dnZ2tnZ2tra2tra2tra29ra2tra2tnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2NjY2NjX19fX19fX19fY2NjY2NjY2NjY2NfX2ct+WlVqaltMX01KTEpVTEZCPD0/R0ZIS0g9NjU3Ojk3OTo7Ojw9OT45OTo4Oz0+PkE+PTk8PDo9Pj46PTk5Oj9FQUA+PT8/QkBHRURFUMHc2dnZ2dnZ2dna2trb29vb29vb3Nzc3Nzc3dzc0NDQ0NDQ0NDQ0NDQ0cHR0crI0tDUxLjS0tHSwtLQ08fM0tHR0s/F1NTHw9XR1cXE1dLS0tLS09PT09PT09LS0tPT09PU1NTU1NXV1dbW1tfX19fX19fX2NjY2NjX19fX2NfX19fX19fX19fX19fX19fX1tbW1tbW1tbW1tfX1tbW1tbW1tbW19fX19fY2NjY2NjY2dnZ2dnZ2dnZ2dra2tra2tra2tra29va2tra2tra2dnZ2dna2tnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dna2tnZ2dnZ2dnZ2djY2NjX19fX19fY2NjY2NjY2NjY2NjY19rHd1xSZ2laTlpOTFBRV0VKPz89P0FFTExBPjc3NTs4ODk5Ojs8Pjw+ODo6OTs+P0A9Pj46NTo6Oz0/Ojs5Ojw+QkJAPz8/P0FCR0RDRE683dnZ2dnZ2dna2tvb29vb29vb3Nzc3Nzc3d3d3dDR0dDQ0NDQ0NDQ0NDS0NDR0dDQ0dPU0dHR0dPR0dHS0tHR0tLT1NLS1NXT09PU1NLS0tPT09PT09PT09PT09PT09PU1NTU1dXV1dbW1tfX19fX2NjY2NjY2NjY2NfX19jY19fX19fX19fX19fX19fX19fX1tbW1tbW1tbX19bW1tbW1tbW1tfX19fX2NjY2NjY2NnZ2dna2tra2tra2tra2tra2tra2tvb2tra2tra2trZ2tra2tra2tra2tra2tnZ2dnZ2dnZ2dnZ2trZ2tra29ra2trZ2dnZ2dnZ2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjbwXNYVWlrU0xSTlBSWVRGSTw+Qz9BQkVLPj43ODY5Njc4OTk7Oz0/QDw9ODk7Ozs/Pjw8OTU6PT47OTk7PD8/P0JCQT1BPUBBQkZCQkJLtd7Z2dra2tra2tvb29vb29vc3Nzc3Nzd3d3d3d3R0dHR0dHR0dHR0dDQ0NDQ0NDQ0dHR0dHR0dHR0dHR0dHS0tLS0tLS0tPT09PT09PT09PT09PT09TU1NPT1NTU1NTU1NXV1dXV1dXW1tbX19fX2NjY2NjY2NjY2NjY19fY2NjX19fX19fX19fX19fX19fX19fX19fW1tbX19fX1tbW1tbW1tbX19fX19jY2NjY2NnZ2dna2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tnZ2dnZ2dnZ2NjY2NjY2NnZ2dnZ2dnZ2NjY2NjY3LxvVFRsbExLUkpUUlVLRkQ6PkdEREFERjw/ODk6OTY5OTo3PD07PkA9PTc5Ojs5Pjs5OTY2Oj1AQT47PDk6Pj9DQT4/Qj0+QkNFQkFCSrDe2dra2tvb29vb29vb29vc3Nzc3Nzd3d3d3d3d0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0tLS0tLS0tLS0tLS0tLS0tPT09PT09PT09PT09PT1NTU1NTU1NTU1NTU1dXV1dXV1tbW1tbW19fX19jY2NjY2NjY2NjY2NjY2NjY2NjY19fX19fX19fX19fX19fX19fX19fX19fX19fW1tbW1tfW19fX19jY2NjY2NjZ2dnZ2dra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2trZ2dnZ2dnZ2djZ2dnZ2dnZ2dnZ2dnZ2dnY2Ny2a1NbcGtLVVdSXFFXSEQ+PEJKRT1ISj89PDc4ODo1OTg5Njs+PD1APDw1OTk8Oj87OTk0ODw9PUFBPD47Ojw+QD89PkE9PUNGR0I/Qkmq39ra29vb29vb29vb3Nzc3Nzc3N3d3d3d3d3d3dHR0dHR0dHR0dHR0dHR0dHR0dHS0M/U0M7P0tLT0tLS0tLS0tLS0tPT09TU1NTU1NPU1NTU1NTU1NTU1NTU1NTV1dXV1dXV1dbW1tbW19fX19fY2NjY2NjY2NjY2NjY2NjY2NjY2NjX19fX19fX19jY2NfX19fX19fX19fX19fX19fX19fX19fX19jY2NjY2NjY2dnZ2dra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tvb29va2tra2tra2tra2tra2tra2tnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dndsGRTYXJfT1pUV19RUkdCPUVJTEFBTEQ/Pzs6ODg5Mzg2ODY5Pj0+Pz06Njo7Pjs9PTo5Njg6PTtAQDxAPz0/P0I+PD48PEJFR0lCPkNJpODa29vb29vb3Nzc3Nzc3Nzc3N3d3d3d3d3d3t7S0tLS0tLS0tLS0dHR0dHR0dPT0bm7zLqbnLrQyNPT0tLS09PT09PT09PU1NTU1NTU1NTU1NTU1dXV1dXV1dXV1dXV1dbW1tbW1tbX19fX19fY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjX19fX19fX19fX19fX19fX19fX19jY2NjY2NjY2NjZ2dra2tra2tra2tra2tra2tra2tra2tra29va2tra29va2tvb2tra2tra2tra2tra2trb29vb29va2tra2tra2tra2tra2tra2tra2tnZ2dnZ2trZ2dnZ2dnZ2dnZ2dnZ3qpfVWBuW1VZUVpeT0xHQ0ZNSUZEREo7QUE7PDg4NjQ4Njk4Nzw/QT89Ojc8Pz48Pz87OjY4OD09QEE9QD5BQD1AOjs6Pj1BRUdJQkBDR57h29vb29vc3Nzc3Nzc3Nzc3d3d3d3d3d7e3t7e0tLS0tLS0tLS0tLS0tLS0tO+wMqaoKKViJGeqpOpz9TT09PT09PT09PU1NTU1NTU1NTU1NTV1dXV1dXV1dXV1dXV1tbW1tbW1tbX19fX19fY2NjY2NnZ2dnZ2dnZ2dnZ2djY2djY2NjY2NjY2NjY2NjY2NjY2NjX19fX19fX19fX19fX19fX19fY2NjY2NjY2NjZ2dna2tra2tra2tra2tra2tra2tra29vb29vb29vb29vb29vb29vb29ra2tra2tra2tra2tvb29vb29va29vb29vb29va2tra2tra2tra2tra2tra2trZ2dnZ2dnZ2dnZ2d6iXFVeblheXU5aUFROQ0NMSUlJRkpEPEJBPDs4NzY3OTc3OTk9P0E/PDo5QD88PkI/Ojg3NzY9Pz9APUBBPz88PTs7OD48P0VJSEE/Q0aX4dvb29zc3Nzc3Nzc3N3d3d3d3d3d3t7e3t7e3tPT09PT0tLS0tLS0tLS0tTIlZyum5m1iX2TjIKBhMTV09PT09PT09PU1NTU1dXV1dXV1dXV1dXV1dXV1dXV1tbW1tbW1tbW1tfX19fX19fX2NjY2NjY2dnZ2dnZ2dnZ2dnZ2dnZ2NjY2NjY2NjY2NjY2NjY2NjY2NfX19fX19fX19fX19fX19fX2NjY2NjY2NjY2dnZ2dnZ2dna2tra2tra2tra2tra29vb29vb29vb29vb29vb29vb29vb2tra2tra2tra2tvb29vb29vb2tvb29vb29vb2tra2tra2tra2tra2tra2tra2tra2tra2tnZ2dndmlpYYW5ZYVdPV01QRUJETElNS0ZJRT5CRDk4ODY3OTc1Njk4PT1BPjo4OT4+PD9APzw1Njc2PD4/PjtAQEA/Pj4/Pjs/PkFCRkdCQENIkeLb29zc3Nzc3d3d3d3d3d3d3d7e3t7e3t7f39/U09PT09PT09PT09LS0tLTz6h+kayPko6MhoCIiYSQo8rU09PT09PU1NTU1dXV1dXV1dXV1dXV1dbW1tbW1tbW1tbW1tbW19fX19fX19fX2NjY2NjY2dnZ2dnZ2dnZ2dnZ2dnZ2dnY2NjY2NjY19jY2NjY2NjY2NjY2NjX19fX19fX19fX19fY2NjY2NjY2NjY2NnZ2dnZ2dna2tra2tra2tra2tra29vb29vb29vb29vb29vb29vb29vb29ra2tra2tra2tvb29vb29vb29vb29vb29vb29va2tra2tra2tra2tra29vb29ra2tra2tra2tna3JJaWWNuWlpSVV5QTDxAR05IUklIRT47SEY4OTc1Nzg3NTg5ODs+Pj07ODlBPj1AP0E+NzU5Njs+QUI/P0BAQkI/Pj8+QUBEQUZIQj9FSozi3Nzc3Nzc3d3d3d3d3d3e3t7e3t7f39/f39/f1NTU09PT09PT09PT09PWtaWaiIuQhYCFi4iBg4qLf4bC1tTU1NTU1NTV1dXV1dXV1dXV1dXW1tbW1tbW1tbX19fX19fX19fX2NjY2NjY2NjY2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2djY2NjY2NjY2NjY2NjY2NjY2NjY2NjX19fX19fX19fY2NjY2NjY2NjY2dnZ2dna2dra2tra2tra2tra2tra2tvb29vb29vb29vb29vb29vb29vb29vb29ra2tra2trb29vb29vb29vb29vb29vb29vb29vb2tra2tra2tra29vb29vb29vb29vb2tra29uIWltnalxYTFpfVkg6TEhMSkpDRUZDQExINzo3Njc4ODU4Nzg5PDw7Ozk4QD89Pj8/PDY3PDQ3P0JCQUBAPz8/QT09P0A+QEBGRT09REuI4tzc3Nzd3d3d3d7e3t7e3t7e3t/f39/f39/f39TU1NTU1NPT09PT09PUxZKCg4WGfYGCfXx5foGCg36k29bU1NTU1NTV1dXV1dXV1tbV1tbW1tbW1tfX19fX19fX19fX19fX19jY2NjY2NjZ2dnZ2dnZ2dna2tnZ2dnZ2dnZ2dnY2NnY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjX19fX19fY2NjY2NjY2NjY2dnZ2dna2tra2tra2tra2tra29vb29vb29vb29vc3Nzc3Nvb29vb29vb29vb29vb2tra2tra29vb29zb29zb29vb29vb29vb29vb29vb29va2tvb29vb29vb29vb29vb29vb2tvZgFpebWhaU0ldW1hKRE1ISlNMR0ZBQD9KQjg7NjY5OTc1ODY4Ozo7Ojw5OD09O0A9Ozo2NTw3Oz1CQEFBPD49QEE9PEA/Pz5CREU+PERLg+Lc3d3d3d3d3t7e3t7e3t7f39/f39/f39/f39/V1dTU1NTU1NPT09PT2LKEkKh9g3l2hIh/e3d5gn5+i67A1dTU1NXV1dXV1tbW1tbW1tbW1tbW1tfX19fX19fY2NjY2NjY2NjY2NjY2NjZ2dnZ2dnZ2dna2trZ2dnZ2dnZ2dnY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2dnZ2dnZ2tra2tra2trb2tra2tvb29vb29vb29vc3Nzc3Nzc29vb29vb29vb29vb29va2trb29vb29zc3Nzc3Nvb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vc1nlcWmxmWFJPYFFSQUhHSkZYTEZAQENDSz87Ozc4ODc2NTc2ODo5PDw6PTs/PTs9Pjw7ODg8OT0/QkFCQzw8P0FCPj1BQkNCREVDQDtDTH3h3d3d3d3e3t7e3t7e39/f39/f39/f39/g4ODg1dXV1NXU1NTU1NPU0ruen3WKeXuIgICChYGDcnOAhYOMrNfV1NXV1dXW1tbW1tbW1tbW1tbW19fX19fX2NjY2NjY2NjY2NjZ2dnZ2dnZ2dnY2NnZ2dna2tra2trZ2dnZ2dnZ2djY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2dnZ2dna2tra2tra29vb29ra2trb3Nzc3Nzc29zc3Nzc3Nzc3Nzb29vb29vb29vb29rb29vb29vb29zc3Nzc3Nzc3Nvb29zc3Nzc3Nvb29vb29vb29vb29vc3Nzc3Nzc3Nvb29vb3dByXV9wZVdLUGNPS0JHQ0pIS0ZBPEE9SFBBOjo3Nzg3Njc4Nzw6OD09PD47QD88Pz07Ojs5Ojk8QEJAQkNAPUFAPz1AQkNDQUBAP0A7RU144N3d3d7e3t/f39/f39/f39/f3+Dg4ODg4ODg4NXV1dXV1dXV1NXU18h4i4V8goh6g4SBfoKCc2l0hYuGkJ3U1tXU1dbW1tbW1tbW1tbW19fX19fX19jY2NjY2NjY2NnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dra2tra2tra2dnZ2dnZ2dnY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2dnZ2dna2tra2tra2tra2tvb2tvb3Nzc3Nzc3Nvc3Nzc3Nzc3Nzc29zb29vb29vb29vb29vb29vb29vc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc29vb297KalxjcWVST1heSz9HTElPS0VAPkFCP0lPPjk6NzY7NzY6Ozc7Ojg6PDw+Oz09Oz48Ojs4OTo4OUFCQkFAQDtAQj06PkFCQz8+PT4/PUZOdN/e3t7e3t7f39/f39/f4ODg4ODg4ODg4ODg4OHV1dXV1dXV1dXV1s6dhpl+f5OTin+CgXx9gnNxm4mAgoOJwNnat7TQ19bW1tbX19fX19fX19fX2NjY2NjY2NjY2NjZ2dnZ2dnZ2dnZ2tnZ2dnZ2dra2tra2tra2trZ2dnZ2dnZ2dnZ2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NnZ2dna2tra2tra2tra2tra29vb3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nvb29vb29vb29vb29vb29vc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3NvfwGNaW21gVlBTU0pETEhNSEk8PkFEQ0ZORDw8OTc5OjY4Ozk3PDk4OTw9OzlAPjpBPzw3NTc7ODpAQUVBPz45PUI/Oz1CQkI6Pj07PT5GTnHe3t7e3t/f39/f39/g4ODg4ODg4ODg4OHh4eHh1tbW1tbW1tbV1tjLioCHhYOXjHh7e3lvfYF1a3ebdHZ7eInHxpiMrdjZ19fX19fX19fY2NjY2NjY2NjY2NjY2NjY2dnZ2drZ2dna2tra2tra2tra2tra2tra2tra2dnZ2dnZ2dnZ2dnZ2dnZ2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NnZ2dnZ2dnZ2dna2tra2tra2tra2tra29vb3Nzc3dzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nvb29vb29zb29vb3Nzc3Nzc3Nzd3dzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3d3d3d3d3Nzc3Nzc4LdjV1lrYlJNVVFMSktGS0ZDQD5CQT9FTT4+PTg5OTo3OTo3NT03Nzo+PDs7Qjw5Pz05NjY4PTk6QEJGQD49PEBCREA9QD9DO0A9PD4/Rk9t3N/e3t/f3+Dg4ODg4ODg4ODg4OHh4eHh4eHh4dbW1tbW1tbW1tfVrYZ6d32rn3l4entzdH+Dfm9xe3l6c3t2k4qFgImkzdnY19fX2NjY2NjY2NjY2NjY2NjY2NjY2NnZ2dna2tna2tra2tra2tra2tra2tra2tra2tnZ2dnZ2dnZ2dnZ2dnZ2dnZ2djY2NjY2NjY2NjY2NjY2NjY2NjY2dnZ2dnZ2dnZ2dra2tra2tra2tra29vb29vc3Nzc3N3d3d3c3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc29vb29vc3Nzb3Nzc3Nzc3N3d3d3d3d3d3dzc3Nzc3Nzd3d3c3Nzc3Nzc3N3d3d3d3d3d3d3d3dzc3OGtYVtebGJSTVZMTUdLS0RGQkI7QT08RUxDQT44Ojk6Nzc5NjY6NTs+QDs9Oz89PD89Ojk5Ojw5PEVDRkA/PkBDQkQ9OT0/QT1CPz1APkdPadvf3t/f3+Dg4ODg4ODh4eHh4eHh4eHh4eHi4uLW1tbW1tbW1tfQmH+Qh4N9eoN2e3Vzenl6kKqmd3JyfoeHh4CAfoKEhJHJzNnX19jY2NjY2NjY2NjY2NjY2NjY2NnZ2dnZ2tra2tra2tra2tra29va2tra2tra2tra2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2djZ2dnZ2dnZ2djY2NnZ2dnZ2dnZ2dnZ2tra2tra2tra2tra29vb29vb3Nzc3N3d3d3d3d3d3d3d3d3d3d3c3Nzc3Nzc3Nzb29vb3Nzc3Nzc3Nzc3Nzd3d3d3d3d3d3d3dzc3N3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3NzhpV9UYm1iUE9TSUhHRkpJSUJBPkJCPEVFREA+ODo4Ozc3Ojc4ODY+Pz07PDk9PDo+PTs6Njc7NjpEQUY+Pz8/PkNBPzs9PT47REM/PjxIT2fZ4N/f3+Dg4ODg4eHh4eHh4eHh4eLi4uLi4uLi1tbW1tbW19jYyH52doN+fnR2eIaCenl1d5yhu6GEgoCAfoeKinx/gYaMnKjO2NjY2NjY2NjY2djY2NjZ2djY2NjY2dnZ2dra2tra2trb29rb29rb2tra2tra2tra2tnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dna2tra2tra2tra2tra2trb29vb29zc3Nzc3N3d3d3d3d3d3d3d3d3d3d3d3dzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3e3t7e3t7e3d3d3d3c35pbT2drXFBRUElDT0pLR0xHSkJAP0FHREBBPDg8ODg1ODk3Njc3QEA/Ozw5Pj04PTw8Ojc4PTk/RENGPkE/QkBDPzw6Pj0/PkVEPz07S1Fj1+Hf4ODg4ODh4eHh4eHh4uLi4uLi4uLi4uLj49bW1tbW19XB3LRueHJze3B6eXaFiIR7eH2AgZiljH98fnuRhZaLhoGDgY6Rvd3Z2NjY2NjZ2dnZ2dnZ2dnZ2dnY2dnZ2dna2tra2trb29va2tva2tra2trb29ra2tra2tnZ2dnZ2dnZ2dnZ2dna2trZ2dnZ2dra2tra2tnZ2dnZ2dna2tra2tra2tra2tra2tra2trb29vc3Nzc3Nzc3N3d3d3d3d3d3d3d3d3d3d3d3d3d3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3e3t7e3t7e3t7e3t7e3t7e3t3d3d6NWFdobllQUUtISlNJTUhNSUtBQz9DRkJBRDo6PDg2NDg4NzY2Nj8+Pjo8OTw7Oj09PDw4Ozw7RERERT4/PkI+Qj84PT8/Q0NCQEE+O0xUY9Xh3+Dg4OHh4eHh4eLi4uLi4uLi4uLi4uPj4+PW1tbW1teslLZ6eHJvd5V7dHuLgHh1bn6Fg3t/hYhyfH2bnI6JioJ+g32Hk5rH1NjY2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dna2tra2trb29vb29vb29vb2tra2tra2tra2tra2tnZ2dnZ2dnZ2dna2tra2tra2tra2tra2tra2tra2tra2tra2trb2tra2tra2tra2trb29vc3Nzc3Nzc3Nzd3d3d3d3d3d3d3d3d3d3d3d3d3d3c3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3N3d3d3d3d3d3d3d3d3d3d3d3d3e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3d7Zf1lgaGxcUUtHR09LTk5PTURGQkg/Q0hEREA6Ozs4NzU3Nzc4NThAPkA7PDk8Ozw+Ojk7OTk7OUZERUI8QD4/PEBDOz5AP0A/Qj8+OjtKVWPV4eDg4eHh4eHi4uLi4uLi4uLi4uPj4+Pj4+Pj1tbX19vKhYR3cXJubniVhHt4hH95dnB4c3eLkY6CdnN9ioaId3d1d4ODfIiIk8Pb2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dra2trb2tvb29vb29vb29vb29rb2tra2tra2tra2tra2tnZ2dnZ2dna2tra2tra2tra2trb2tra2tra2tra2tra2trb29vb29ra2trb29vb29vb3Nzc3Nzc3Nzd3d3d3d3d3d3d3d3d3d3d3d7e3d3d3d3c3Nzc3Nzc3Nzc3Nzc3Nzc3d3d3d3d3d3d3d3d3d3d3d3d3d7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7f0nVZaGlqVk5KSE1OR01EUElGSD9FPUZMREM+Ozs8OTc3OTY2OTU4Pj4/PTs8QDs9PDo3Ozc5OThHREVCPUE9Qj8+QDw/QUE/QEJAPjs8S1Ri1OLg4eHh4eLi4uLi4uLi4+Pj4+Pj4+Pj4+Pj49fX19fEknuJf29sbnV2foSBg4qGfnVybWVtiIaKjoR7c4OHint4e4OPj4GEioqxztrZ2dnZ2dnZ2dna2tra2tra2tra2trb29vb29zc3Nzb29vb29vb29va2tra2tra2tra2tra2tra2tra2tra2tra2tra2tvb29va2tra2tra2tvb2tvb29vb29vb29vb29vb29vb29zc3Nzc3Nzc3d3d3d3d3d3d3d3d3d3d3t7e3t3d3d3d3d3d3d3d3dzc3Nzc3Nzc3d3d3d3d3d3e3t7e3t7e3t7e3t7e3t7e3t7e3t7f39/f39/f39/f39/f3t7e4clsW2pqalNOR0dOT0VIRk1JSUA7RD5ISUA9PDo6Ojg2ODo3Nzk0OD08PT07ODw8PDw4Njc4OTo6RUJFQT9APEI/Q0M+PkNEQUBAP0A8PUtRYdPj4OHh4uLi4uLi4uPj4+Pj4+Pj4+Pj4+Pj5OTX19fZqXaFfnx3bHB3eXh8jH2KhYB3anN0d3p9bot7fnl6foR/gIGDfnh8foeGlrbT2tnZ2dra2tra2tra2tra2tra2tvb29vb3Nzc3Nzc3Nvb29vb29vb29ra2tra2tra2tra2tra2tra2tra2tra29ra29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb3Nzc3Nzc3Nzc3d3d3d3d3d3d3d3d3d3d3d7e3t7d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3t7e3t7e3t7e3t7e3t7e3t7e3t7e39/f39/f39/f39/f39/f39/e3uO9amFpa2lRTkZNTEtKWE1OR0FAQE9BQz9AOzw4OTk5Njg2NjY4NDs+PD07OTY6Ojk6OTU4OTg5OkJERj8+Pj5AQEBCPzxBQD88Pj9BOT5KT17S4+Hh4eLi4uLi4+Pj4+Pj4+Pj4+Pj4+Tk5OTk19fX2sqKhIB5c29tcXN1d4CUeHaAfHWHhXd1cnWgmXp7d3Z5doR0bWxue3iAmouTu9za2tra2tra2trb29vb29vb29vb29zc3Nzc3Nzc3Nzc3Nzc29vb29vb2tra2tra2tra2tra2tra2tra2tra29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vc3Nzc3Nzc3Nzc3d3d3d3d3d3d3d3d3d3d3d3e3t7e3t3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3t7e3t7e3t7e3t7e3t7e3t7e3t/f39/f39/f39/f39/f39/f39/f397js2lpbmloUFBPTExPUk9LU0Y/RURERD48PDg7ODc5OTU2ODY2NzM6Pjs+PTc6Pjk5OTk2Ojo4NzxDRUc/Pzs/PkA9PkE9Oz0+OUFAQDhBTlFc0OTh4eLi4uLj4+Pj4+Pj4+Pj4+Pk5OTk5OTk5NjY2NjauY6AenZ1bmpveHCBfWt0cnZ3hIV5h4d5lY55eXp1d3pza298gHx2fYh8gLLe2tra2tvb29vb29vb29vc3Nzc3Nzc3Nzc3dzc3Nzc3Nzc3Nzb29vb29rb29vb29ra2tra2tra2tra29va29vb29vb29vb29zc3Nzb29vb29vb29vb29vc3Nvb3Nzc3Nzc3Nzc3Nzc3Nzc3d3d3d3d3t7e3t7e3d7e3t3d3t7e3t7e3t7d3d3d3d3d3d3d3d3d3d3d3d3d3t7e3t7e3t7e3t7f39/f39/f39/f39/f39/f39/f4ODg4ODg4N/f39/f4qpqa2hrZFNQT0ZQVFJOSFJLPkREQ0I7Ozk6Ojg2Nzg1NjY4ODg0Oz88Pzw5PDw3Ozo6Nzo6Nzo9Q0JDPUE+Pzw5PT5BQDs8PDtFQD47Q05TXNDk4eLi4uLj4+Pj4+Pj4+Pj5OTk5OTk5OTk5OTY2NjZ1p5vdntveHh2cG50d3BwdHBzb36Jc3qGhY2EenNtcoB6hn1vg5OBdnx9g4a13drb29vc29vc3Nzc3Nzc3Nzc3Nzc3Nzc3d3d3Nzc3Nzc3Nzc3Nzb29vb29vb29vb29ra2tra2tvb29vb29vb3Nzc3Nzc3Nzc3Nzc3Nzc3Nvb29vb29vc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzd3d3d3d3d3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3d3d3d3d3d7e3t7e3t7e3t7e3t7f39/f39/f39/f39/f39/f39/g4ODg4ODg4ODg4ODg4N/f3+KgbWhma2ZVVlJHUFFOS0xMRUJIRUc9OD08Ojo3Nzg2Nzc2NTY3NDg+PD09Ojg6OD46Ozc4Nzc6Oj5DRDtDQj49OD1AQUM/Pjw+RTw+PUJNUF/S4+Hi4uLj4+Pj4+Pj4+Pk5OTk5OTk5OTk5OTk2NjY3MB2doCCfnp4eHBsdXlya399bHNvdGdoaYB/aWl4c2d+iYl4cIKGe3d9foWKvd3b3Nzc3Nzc3Nzc3Nzc3Nzc3d3c3Nzc3N3d3dzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nvb29vb29vb29vb3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzd3d3d3d3d3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7f39/f39/f39/f39/f39/f4ODg4ODg4ODg4ODg4ODg4ODg4ODflGttZm5mU1NJUFlUTEhGTkZGRUJGPTs+PDs5Nzc4NTc5NjQ1NzU4PDs9Pjo6OztAOTs7ODc6OTlAQkE8QUE/Pzk/QEJFQ0FAQEM7Oz1ES01g1uTi4uLi4+Pj4+Pj4+Pk5OTk5OTk5OTk5OTk5NnZ2tmYc3uqhJaCcnR1dn14aGx8d2h4d25rcHR5gIJ3dHyBhIJ9c3CAin94gn95g8je3Nzc3Nzc3Nzc3Nzd3d3d3d3d3d3d3d3d3N3d3dzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nvb29zc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3N3d3d3d3d3d3d3d3d3d3d3d3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e39/f39/f39/f4N/f39/f3+Dg4ODg4ODg4ODg4ODg4ODg4ODg4ODh24tubWdzY1lRTVVbV0hDSUZOS0dCRD8/Qjo7OjY2NzU2NzY0ODc2Ozw7Pj86PDk8Qjg3OTo6Ojk6QUFCQUJDQEE+PT9CQ0NEQUJGOTg9REpOYtjk4uLi4+Pj4+Pj5OTk5OTk5OTk5OTk5OTk5OXZ2drcqHGCtXiRfnNsem6EgXaCfWtoan+DeHZ8dX2FhXRmcHl9d316gIqFe318foC03tzc3Nzc3N3d3d3d3d3d3d3d3d3d3d3d3dzd3d3d3dzc3N3c3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzd3Nzd3d3d3d3d3Nzc3Nzc3Nzc3Nzc3N3d3d3d3d3d3d3d3d3d3d3d3d3d3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e397e3t7e39/f39/f39/f39/g4ODg4ODg4ODg4ODg4ODg4ODg4ODg4eDg4ODg4ODg4tiFb3FrdWFWT1VVXE9ETUY+SkdKRUQ8P0I6PDk4Njg0NTY3NDc2NDk7Ozw7OD47PEE4ODo9OD04Oj09QEBAP0FCP0A+QENCQ0FBRTc2O0RMTmPa5OLi4+Pj4+Pj5OTk5OTk5OTk5OTk5OTk5OXl29ra3Z5sbnNxhY1ybXBuf391hH5rcnZ2enN4gXhzb3VwbWt2fHmFiIB/f392coODsd/c3Nzc3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3Nzd3d3c3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3N3d3d3d3d3d3d3d3d3d3d3d3d3c3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e39/f39/f39/f39/f39/f39/f39/f39/f39/f4ODg4ODg4ODg4ODg4ODg4ODg4OHh4eDg4eHh4eHh4eHh4OLXhW1xb3ZeUldTWlpRSkhDQFFAQkQ8OT9BOjw5NzU3NDU2NjQ3NTY9PDo9PTk+OjxAODo6PDY7OTs+PUJCQjtBQkBDQEBEREM8PUA3OjxFS01l3OPi4uPj4+Pj5OTk5OTk5OTk5OTk5OXl5eXl5dPOxsB+cWxveHt2b3VuanNzbZKGeG50dG5vdIZ/b2twboJ0bXZyfY2DdnF/d3mKgabf3Nzc3d3d3d3d3d3e3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3dzc3d3d3dzc3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3t7e3t7e3t7e3t7e3t/f3t7e3t7f39/f39/f39/f39/f39/f39/f39/f39/f39/f4ODg4ODg4ODg4ODg4ODg4ODg4ODg4eHh4eHh4eHh4eHh4eHh4eHi1oZucG1xYFJZUFdfWUpMTElSP0Q9OTtCRjs6OTc0NTY1NzU0NjY2Pj07Pz45PTk7Pjg9Ozo0ODtAQENCQ0FCRkE/Q0BBQkREOz0+OTs8QkxNZODl4+Pk5OTj4+Tk5OTk5OTk5OTk5eXl5eXl5eW5t7Woc3JscHd6dHd4bXFydXd/hHRyc2xsa3F8bnBudGuBf3GAd32Eg355gHNygYqg2d3c3d3d3d3d3d7e3t3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3e3t7e3t7e3t7d3d3d3t7e3t7e3t7e3t7f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f4ODg4ODg4ODg4ODg4ODg4ODg4OHh4eHh4eHh4eHh4eHh4eHh4eHh49WHcWxqbF5YWlVXYFZWUE9QTD1BOjs8RkE4Ojg3MzY1Njk2NTg1Nz89Oz8+OT04Ozw5PTs7NTo9Q0JCPENDREREQUE/PkJDQzw9Pjg5PENLS2PN0dnh1sjY4+Tk5OTk5OTk5OTk5eXl5eXl5eXltbW2q3J5cm59f3Z1d2hqaGlwb3Zta2tnZWZxdG15gG5teXd2iHhxa2podXV5dHV/wd/c3d3d3d3d3d3e3t7e3d3d3d7d3d3d3d3d3d3d3t7e3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3e3t7e3t7e3t3d3d3d3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f4ODg39/g4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4OHh4eHh4eHh4eHh4eHh4eHi4uHh4ePVhnFwY2lhV1NZV19MUk9STUtAPjg5O0E+ODc5NjQ3Njc6NjY2NDk+Pzo8Pzo/OTo6Nzo9PDk5PEFBPTtBQ0VDRkA+Pj5BRUQ+QEE3OD5GSEpesrW4wbm1u8jg5eXl5OTl5OXl5+fn5+fm5ebm5ra2tbWOfX5weoR1cnZnYmNlbGtyb2ZpbHZtd4Z9hXlsbHd4a3ZwfH14c3V5fHd2h7ng3d3d3d3d3d7e3t7e3t7d3t7e3t7d3d3d3d3d3t7e3t7d3t7e3t7e3t3d3d3d3d3d3d7e3t7e3t7e3t7d3d3d3d3d3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4OHh4eHh4eHh4eLi4uLi4uLi4uLi4eHj1Yd1bl5uY1pUU1hXS1NLSk1SR0E4Ozs+PDk4NzU2NTY2OTY4NjY5Pzw6PT07Pzo7Ozk8PDs5Oj4+Pjs8PUFEQkNBQEBBP0JDPDw9Nzs+REVKXrG1tLW2t7e2y9rJ3uXl3eDi3tXU1tPU4OPg39+2treuh3t/bnmNenJ1bWNobGxtaXR4enF5enqIh4N6aWh9cWRvcXyGgX55e318e4an2t7d3d3d3d7e3t7e3t7e3t7e3t7e3d3d3d3d3t7e3t7e3t7e3t7e3t7e3t3e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t/f39/e3t7e3t7f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4OHh4eHh4eHh4eLi4uLi4uLi4uLi4uHh49aGdmxhb19dV1lcWlJQSEpXTEVHPUA9Ozs9OTY0NjU1NTg2NzY3OD87OT09PDw5OTw6Pjw6OTg+Qjs7Pj5AREBDRUFAQD0/QDw9PTU5PEJHRl2xtbW2uLm5ubq9uMPT0r3BwcC6u7y6u8TMxb/Dt7e3hGl1gX1ndYd5Z3Vxa2t5eHB3fH15bWl3e3h3bml1j4FwbHl4d3d9gXuGgnmAoNze3d3d3t7e3t7e3t7e3t7e3t7e3t3d3d3d3d7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t/f39/f3t7e3t/f39/f39/f39/f39/f39/f39/f39/f39/f39/f4ODg4ODg39/f39/f39/f3+Dg4N/f4ODg4ODg4ODg4ODg4ODg4ODg4ODh4OHh4eHh4eHh4eHh4eHh4eHh4uLi4uLi4uLi4uLi4uLi4ePXhXJrZ3RhW1hYX15TVVVRVUpMRj9JRDs5PTY2NDc3NTc4Nzc3ODk8PDo+PDg8Oj0+OTs8OTs5P0E8PT9DP0FARUJCQTw9Q0A6Pjw1NDlER0dasbW1tre5ubm5ubm3ubm4uLm5urq6urm5urm6u7e3uX9ucHN6b3B/eXNuc3Vsc3Z4cXFwb2tvcX6Bc2mHhIF9dHOHdW11hYmBgHJ2hafd3d3d3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7f39/f3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f4ODg4ODg4ODg39/f3+Dg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4eDg4eHh4eHh4eHh4eHh4eHh4eHh4eHh4uLi4uLi4uLi4uLi4uLi4uHj14lxa2xyW1dXXWBUUVVUUFJPSkNATUE9Ozk2NTM0NjQ2ODc3Nzk6Pjs8Pjs5PDo8PDk8PTw7PT0+PUNEREBDQkE/QD48PkE8OD06NjY6QkpIWLG1tLa2uLm5uLi5uLe3uLi5urq5ubi4uLi6uru3uKx7cnhxf3ZzfnBsbXpyZ29sbW50cHt3d3Jyd3pvhpJ2f3x8enZ5fH9zfYdyda3T393d3d7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e39/f39/f39/f39/e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f4ODg4ODg4ODg4ODg4ODg4ODf3+Dg4ODg4ODg4ODg4ODg4ODg4eHh4eDg4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4uLi4uLi4uLi4uLi4uLi4uLi49eHb2pxalVWV2FbT1FSUE5XSURESUo/Ojk6NzUzNDk1NzY2Nzg4Ojw7PD46PDo6PTw5PDw9Oz09PDs9REdEQ0E8PDw8Pj5AOzg8ODE1OkFGRVautbW1tre4uLm4uLi4uLe4ubq5uLi3t7i4ubq7t7mqcnB4d3x7e4J3aG5xam9qY2lyf21zcn54dHFsanaAeX2AgH91doB1a4qLgHaR1d/d3d7e39/f3t/f3t7e3t7e3t7e3t7e3t7e3t7e39/f39/f39/f39/f4N/e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t/f39/f39/f39/f39/f39/f39/f39/f3+Dg4ODg4ODf4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHi4uLi4uLi4uLi4uLi4uLi4uLi4uPYhm1sdGVWUFxnWE1YU1JRWUVDS1BOOzk4ODc1NTM5NTY2NzY4Nzk+OT0+OTw5OTw7Njg5OTo8QEA9PkBGQEJCQDo+PEE9Pzs7OzYxNjxCR0RQqLa1tba2tre4t7i4uLi4uLm6ubi4t7e3t7e5ure2tIlyd3h9iXxwem99c2hqbGdnbHRscXd0cWx2c3Fxd3FyfHl4g3Z7d2mLkYp9kM7f3d7e3tvY2drZ297f39/e3+De39/f3Nvc3N3e3uDg3+Dg4ODf3t7e39jS397f397e3t/f3t7f3t/f3t7e3t7e3t7e3t7e3t/f39/f39/f39/f39/f39/f39/f4ODf4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODh4eHh4eHh4eHh4eHh4eHh4eLi4eLi4uLi4uLi4uLi4uLj4+Lj4+Li4uPj4+Pi4uLi4+Lk14NoZ3VkVlVkZVdKWllXW1Q9RU1LSD04NzU3NjQzOTQ0Nzc1Njc5PTo9Pjw9PDk7PDk5Oj45PD4/PkFBQ0FFRUQ+OzxBPjw5PDs3Mzc+REhFSqG2tbW1tbW2tre4uLi4t7e4uLi3tra2tra3uLm2traLfXpsbHp/cGx5dm5qaGdlcXp4b2lvb3B1c21zd4Fnb32CgYNyf3lqcHJ6f6ng393Zy8a/vL2/vsLN0tDW3tnc4NfQzcPCw8PH1dfT2dzX1NjX0MfExce9vM/Kz87Y3djO3N3c2t3T0dze39/e397e3t7e4N/f39/f39/f39/f39/f39/f4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4OHh4eLi4uLi4uLf4uPi4eLg4d7W29/Sw8rJx9Hb3OLk4eHg2dre1sbExcTN2trf5OHi4trX3st9aWZxYVleZWFNTFRLUlpMO0hNSEZBPTc2NjUzNDY2NDg3NjU2OTw7Pj46Pjk5PDk3OTs7Oj49PEBAQ0RCR0ZCQT08Q0A9OTw7Nzc3P0RGRkaZtrS1tbW2tra4uLi4uLi3uLi3s7W2t7a3t7i5tba3opdxb29waW50dnFmZWNrbmdvcm1mZ2tygWVvdnyAeGRzj39zaHFyaWVlbm+w39HFv7u5ubm5ubq6uru6vc3Gw8e/urq6uru7u8HCvcHFvby/vry7urq5ubq6ubm6w8XDucDDwby/ube/z8/U3tjc3t/g3tLa4N/f4ODg39/f39/f39/f3+Dg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODh4eDg4ODg4ODg4ODh4eHh4uLi4eDh4uLi4uHa2t3RwsPCu8XT1uDdydPDrrnAsaqrq6uwtLbJ0sXRxLG4v7Srq6usr7S0vMzE1c60tLureGxtbWBdYl9ZS1NVVFFQREBRTUhEPzo3ODU3MzE1NjQ5ODQ2Njo8Oz08ODw5Njo6ODg5NzU8PDw/QEFAQkRDQkE8PkI/Pz09PTc1OD5DRUNAj7a0tLW1t7i4uLi4uLm5uLe1sautr7Oxs7OztLS0tqaei2tue3ZxeXhnY2hfcXdha25vaG99b25ja2lseHdsa4Z+bHB6dm1scG95sca8uru7urm5ubq6urq6urq6urq6urq6urq7u7q7u7y7urq6ubq7u7q6urq6urq6ubi3t7i4t7e2tbW1tbi3u8e+w8XHzcS4wMnH0tzZ2d/e3uDf39/f4ODh4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODh3Nji4uLi4eHh4OHg3tfGxtHQztTe3tPO0t/SuLi8sq2trKysrrG+ua63rKipqamqq6urqqqqq6ysuKyqqqqrq6urra6urq6urryzrayrpHlub21fXl1dVE1SU1xUSkE/UElIPjg5NjgzNzMwNTczNzg1NzY2Ojw/PDg5Ozo6Ojg5OjY1OTs8Pj9EP0NFQkNCP0BAQT9APjw3ODc6QUVEP4W4tLS1tbe4uLm5uLi3t7SurKuqqq2urq6vsLGzs7WjcG5ucm1wg311aWFlaGZkY2Rxc21td25naW1tZXBzb29zcXN8h4F6dX11n7u6uru7urm5ubm6urq6urq6ubq6urq5uLm5ubm6urq6u7q5ubm5ubq6ubm6ubm4uLi3t7e4uLe3t7a2tbW2tra1tbW1tba1t7e3t7rBvrzGycrb3+Dg3tvd3d7h4tDW4uHg4ODg4ODg4ODg4ODg4OHg4OHi0768zNjd3OLg0dnbxL23sLCxsa+zu7uzsLS9s66urq2tra2sq6qqqqmpqKmpqampqqurqqqqqamoqampqampqaqqqqytrq6urq6urq6sraR4aWJxZmFZWlZRUk5cU0Y9QlJEQTc8OzY5NTY1NDU2NTg3NTY1Nzg7Pjw7OTk5Ojg3Nzk3Njg8Oz47RD8/Q0BBREE+P0M9Pjw+Ojo3Nz9DRj54srCztLW2t7i3trKurq2sq6uqqaqtraysrq+xs7S1t4xucnRqaIB5ZmpmZWxdaG5waGxxYmNmcoJ+dmhobGpueoaBhXx4cXF5gK+6ubq6urm5uLm5ubm5ubm5ubm5ubm4uLe3t7e3uLm5ubm5uLe3t7i5ubi4uLi3t7a2tre3t7e3tra2trW0tLW1tbW2trW1tre3t7e3t7e3tre4v8bP0MS+v8DE19e8ydra4OHg4ODh4eDg4ODh4eDb3t7Uzby3tre6wMDJxLfIvrKwsLCwr7Cvrq6ur7Cwr66urq6uraytrKurq6qpqampqampqampqKmpqKmpqampqKmpqKmpqqqrraytra2ur66trK2heWpkbWdiXFhRUFFLVEpCOklRP0E3PDk0OjU2NTQ1NTY4ODY4Njs6OTw9PTs6ODY2ODg6ODY3Pj09PT5BQUVCQkNBQUBBOj09Pz05Ojc9QUc8bKqmqKutsLGwrqupqKqrq6mpqamrrKytra2usLO0tbilgIdvaWdzdGZrcG1qZGxvcm5rbWNrcHyJhG5qbHx4Y3uKfnNqc25rcY+7ubm5ubm5ubi4ubm5ubm5ubq5uLi3t7e3t7e3t7i5ubi4uLe2tra3t7e3t7a2t7a2tra3tra2tbW1tba1tLS0tbW1tra2tra3t7e3t7i4uLe2t7a2uLm4uLe3uL6+uLq9vcfb4OHg2Nnd4eHg3dfKwcPCurm5uLe4uLi3tbS0tLKysbGxsLCvr6+vr6+vr6+vr66ura2srKyrq6yqqqmoqKmppqepqaehpaipqamoop+hoZyip6inqausrK2ur7Cwrq2unXdwbGphY2BZUU1RTFJGQzlNUEU+ODs3Mjc5Njc0NDM1ODg3OTc7OTo9PTw6Ojk3NDo5ODY1OD8/QEI9RENDQ0FDQEJBQDtAP0A/PDw6O0NIPWOopaWlpqioqKenp6ipqqmoqKipqqqsra6wsLCztLW1taWYdn5xZmt4cW9tZmVsaGNsZ2ZpaX11bWlvfXZ5hWZod294b3Fvcninu7m5ubm5ubm4uLm6ubm5ubm5ubi3t7W1tba2tre3t7e3t7a2tbW2tre2tbW1tra3t7e2tbS0tLS0tLS1tLS0tLW1tba2tra2t7e3t7e3t7a2tre2tre3uLe2t7i4t7i4uLi4wMXTyry8w83PyMC9urm5ubq6ubi4uLi4t7W0tLSzs7KysrGwr6+vr66urq+vr6+uraysrKurrKysq6ehoJ6gn5udoaGdlpmkpKaon5mZmZmanZ+gn56fpKqtrq+ura2srJl1cGlrY2FeXVVOU0tSREQ4TktHQTo4NTI2OTY1NDczNzc3ODk3OTo7PT0+ODg4NzU6OTk1OD9AQEFEPkZBQkNAQkNCQT88QEJCQD0+OjpERj5cpqWmpqampqanqKenqKioqKenqaurrKytra2ttLS0tbekc311bnONf3JmanFjaW1jaGZobG51aV9jZ3VzdnpuZ3Bwcn56cYihu7m5ubm6urq6urm2s7a1uLm2trW1tra1tbW1tbW3tra3tra2tbW2tbW1tbS0tLa2t7e3tbS0s7O0tLW1tLS0tbW1tra2tra2t7e3uLe3tra2trW2tbW2tra2tra2tra3tra3uLi3uri4uLi3uLi5ubm5urq6urm4t7e3t7W1tLS0s7OysrKxsbCwr66urq6urq+vra2srKuppaSmpqScmZubmpmampmXl5eXl5aZm5iZmJmZm52en5+dnJ6gpKWko6OioqKQdG5jcGFeXltUU1RIVEo/PFFCRkM7ODYzNzo1NTQ4Mzg5OTc4OTc7OTs9Ozc6NzU2OTk4NTg+Pz9ART5CPz9DPzxBQUI/PT9EQT8+PTk9Q0Y/VaSlpqanqKeoqamop6ioqKioqKiqrKuqqaipq7W1tba5o3eKcXKHhnd0cGh5a2JjYWVsaW5zal9jZWNjZWprYmRqbHaXjX6ovbm3tre5u7u6uLWxrKurqq6wrKyrq62tq6uvsLGvr7CytbW2t7W1trW1tbW1tbW2trSvr7O0tLSvra6vsrW0tbW1tbW2t7e3t7e3t7e3t7e3t7Owsra1tLa2tre3tra2tbW1tra3t7e5uLi4t7e3uLi4ubq6urq5uLi3t7e1tbS0tLS0tLS0s7OysbCvr6+vr66vr62oo6KgnJqampqZmZqbm5qampqbmpmZmZiXl5aYmZmZmpycnZ+foJ+goKChoaCgoJ+fi3RuaXRdYGZeUlRLRFRJPUVTSEVCOzo0NDY5NDQ1NzM4ODg3ODk5Ojs7Pz04OjkzNTg5NjM5PT5AP0A6QEJCQkA/QEJCPz0+QUFCPz06PkVDQFGjpqWlp6inqauqqKaoqKipp6ioqKinp6ioqaq1tbe3t7KZtH99kIx1Z2lqbGZjYGNoZW94cGlicXx5cGpmZmRma3NqhYystrKwra2ttLeysLCtrKuqqaiop6ipqampqKinqKipqaeoqqurra2sqqytraysrq6traunpaSnqqyopKOkpamwsbGztbW2t7i3t7W1tre4t7e3t7Kppaasq6ivtLa1s7W3t7a1tbW2tra3t7e3t7a2t7e3t7m6urq5uLi3t7Wxs7S0tLKxsK6sq6yurrCxsK2rqqmqqKijnJqZmJmYmJiYmZmZmZmZmpqZm5ubnJybmZeYmpqcnJydnJ2foKGhoqKioKGgoKCfnop1amtuWVxhVktPREdVRz5PV0hEPTw4MzQ0ODQ1NDgyODk4ODk6Ojw5OUA8Njk6MzY3OTE0PD8/QEBBOkNGRUJBREJDQTo7P0FCQz9APUBEQ0BPo6empaemqKqqqqakpqenqKioqKimpqaoq6uttba3t7e4rbJ1cHuDdmBiaWtiZWZhZGdmfYh5bHKAfXFvcXhjbW5xZo+srKurq6ysra6urK2trKyqp6WmpaWlpqioqKiopaeoqKioqKeoqampp6Wko6KioqOioKKioaKhoKChoaKjpKOjpaWlqLC0s7OzsKuqqaqztLa3trGopaOioaGipKiqqairs7Sxrq6xs7W2tra3uLi3t7e3t7e3t7a2uLe0sa6ppqerrKmnpqWkpKSkpKWnqaajoJ+enZycm5uampmZmJeXmZmZmJiZmpqampqampqbm5mYmpydnZ2dnZucoKGgoaOjoqCgoKCfnp2FdGtsaFdYU0pHTUVITUdAU1dGRz09OTM2Mzc0NTU3Mzg6Ojo6OTw9OjpBPDY9ODM3ODgzNztAPz9AQDpCRUNAQkRDQT87PEBDQkNBQDxBQ0A9TqKnpqanp6mqq6mkpaWlpaaoqKippqanqKmpqrW2tre3t7izc2h7c2JnamtpaWJhZGloXV1tfHJma3J/fHR8bm1zc36gqamrq6uqq62trKusq6mpqKWjpKampqWmp6eqqaamp6enqKinp6iop6WjpKKhoaGhn56en5+fn56foKGho6Wko6OkpKSmp6enpqWkpaampqeqraumpKKhoaChpKWlpaenpaeoqKalpaivtLa3trW1tra1tbOwrKupqa6rqKWlpqampaSkpaWlpqWkpKSkpaKhoaGgnp2bm5ucm5qamZiXmJiYmJiZmpmZmZmYmZmZmZqZmZydnJycnJybnJ+fn6ChoaKgoKCfnZ2cgHNrbmReU0pITUZETEtFRFFTQ0c9PDgzNjI4NDY0NjQ4OTg6Ozk7Pjw5PTs5PTczNTk2NTY8QD0/QD88P0JDPkJCQj89Pj5CQ0FFQD86PkVAO0+jpqWkpqeoqaelpKWlpKWnp6eoqKanp6alpqa1tba2trW2uYptcW1vfHxxZ2pmYGFsYFROW2hqbm9tgYJ9cWdxdn6aqKeoqqmpqqurrKqqqqimpaWkoqOlpqalpaWmqaqppqWjpKWmpqSjo6KioqKgoJ+fnp6cnJycnJ2dnJ2en6CioaKjo6KhoqKkpaSioqOjpKSjpKSko6Ggn6GipKanp6ipqaelpaSipKSlqK2wsKyrqqusqqmnpaWmpaWlpaalpqioqailpaWkpKSlpKOjpKOioaGhoqKgnp2cnJubm5qZmJiYmJmam5mXl5eWlpeXmJiZmpqcm5qampubm5ucnJ6goKGgnp6enpycm356bnJiXlNNSlBFRk5NQkBPRT5JOz01MzYzODM2Njc1Ojs4OTs5Oj49Ozo5OT03NjY5NjU2PkI+PkE/PT5DQT5DQ0BAO0BAQkJCRUA+Oz5FPzxQoKSjpKOjo6SkoqSlpaSlpqamp6empqalpqaltLW1tbS0tbiBaHx9ZXOCemxwdWFfY1ROT1FbaGxpbGxxbW5xbnScoqSnqKioqauqqqqqqaempaSjo6OjpKSlpqalp6ytqaShnp2eo6Shnp6foKCenJ2dnJycmpqam5ucnJubm5ydnp6foKChoJ+goaOioKGjpKSjoqSlpaWkop+go6SkpKapqainpaGdnJ+jpaipqainqKioqaempaWkpKSlpqampqampqenpaWko6Ojo6KioqGhoqKhoqOkop+enZ2cmpubmpqZmJeXmJaWlZSUlJWVl5iYmpubnJuampqam5ucm5ucnp+fnpucnJyam5p/fnF0YFtUTUdNSEZMSj8/TkM8QDs8NDM4Mzc0NzY3ODs9ODo6OTk7PTs7ODk9Nzc4OTU4OD9APT9BPjs9RD89REA/PzpAQUE/QUVAPjw8Qz88Tp2ioaKioKCipaSkpKWlpqenp6empqampaampbW1tbS0tLS3jHalsXdmc3Jvc2xjZGlYT1JRT09dgG1kYFptkZGSoqKjpaampqenqKiop6alpaSjoqGhoaKjpaempqesrKemoJ2cm6Ghnpuamp2cmZiam5qampmZmZubm5uampqampucnZ6goaCfnp+hoJ6foqOko6Omp6inqKWioKGhoaGkpaWlpKCcmZmbnqOmpqampqanpqempaOlpKWlpqiop6enpaWlpaWkpKOjo6KhoqKioqKhoaKjo6Kgn56enZybnJubmZaUlJSTk5OTk5SUlJWWl5qam5ubm5qZmZqanJ2dnZ2dnZuampqamZqXf3dvc11aTkhKTkdFRklERU5APD09PDQ1OzQ2NDY1Njc5Ozg5OTg5OTw7PDc6Ozc4ODg1ODg/Qj9BQTw+P0A8PEJAQT49QT4/Pz1CQUA6OkA8PE+doqGfoJ+dn6OkpKSlpqeoqKenp6ampqampqW1tLS0tLS0tbSXtqd1Znh2Y2xjY2VjW1JTU1JNXqCMeFhodpajnp6hoaOjo6OjpKSlpqalpKSioaGko6OjoqOlpqWmpqenpp+bmpuioJmWlpWam5mXl5iYmpqYmJqampqbm5qZmZmenZ2goqOjo6KkpKWinqGhoaKjpaampaSjoaCgn5+hoZ+goJ2amJeZmpygpKOjpKWmp6alpaOjpKSkpKWnp6ampqampaWmpKOjo6SjoqKjpKGfoKGhoKGgoaCfn56dnZyamJeVk5KSkpKSkpOTkpOUlZaZmpqbm5qampqbnZ6enp2cnJybm5qamZmZlH10bHReWk9IRUdGQkVORT9GOzo+Pzs0Njo2OTM2NDY4ODo4OTc4ODo8Ozw5Ozs6OjY3ODk5Pj9APjw9QD5AOjlAQT89QT8/QUE+QUE/Ojk9PjpQnaCfnZucnJufoqOlpaWlp6iop6ampqanpqantLS0tLOysrGwsK2rkHiGj36bmn93Yl1TUlFRTGKgootaiKCgn52YmZycnZ2eoaGgpKenpqWkoqGjp6alpaKipaampaanpqagm5mboaCXk5OSl5qcmpeXl5iampmampqam5qYmJmaoKCgoKGfoaKipKamop6gn5+goaOko6Khn56enpyanZuZmpqZmJeZnqChoaKioqKkpaWmpKSkpKKioqKkpaWlpaWlpaalpaOko6KioqGgoKGgnp+fn5+fnp+foJ+cm5qZl5WUlJSTkZCRkpKSkpKSk5SVl5iZmpmZmpqam5+fnp2cnJycmpmZmpiXl5F8cmdxXl1QRj9BRD9KT0JCRjhDRT4+OTg7Nzc0ODQ1OTo6Ozk3OTo8Ozo8PT48PDo2NzY5OD4/QT47Pz49PDg6PkFAQUE/P0FCQERBPjo4PkE8U5ycm5uampycnaGio6KjoqSmp6alpaampqSjo7KysK2rp6amp6alpqiln6iop6qnoXmEXFFST0xcnKCAYpmgnp2clZOVlpeZmp2dnqGmpqampKOioqanp6ajpaampaWmp6amop2cnqGfl5GRkJSXm52YlpaWmJuZmpqampqZl5iam6Ghn56fnpybnJ6goJ6dn56fn6Cio6SjoqCfnp2ZlpeXl5iYmZubnqKioqKioqGio6WlpKOio6SioaGhoqOkpKSko6SkpKSioqKhoqGgn5+gnp2enp2dnZ2dnp6em5mYl5WTk5SUk5KQj5GSkZKSkZKTlJaXl5iYmZqampyenZ2dnJubmpiYmpmXlZaNempmamBiTkY+P0A9SkVAQ0A7QEE8Ozs5Ojc2NTg0Njc4OT04ODs6Oz87Ojs8Ojk6Nzc2ODs7Oz08Ojo8PTw3Oz5DQkRDPz1BQ0FEQT88OkBCO1eZmJqamZmam5ucnp2foqKhoqSlpKSlpqSioJ6op6alpqWlpaemp6ampqakpaanqKehqXJOUU1KVJahenKanJyenJeVlJWWmJiXl5qeoqKhoqOkpKOjpaalpaanpqSlpqalpaOgoKGhn5mSkI+WmpmenJaXl5eZm5ycnJqamZeZm5uen52cnZyZmZqcnZydnp6fn5+hoaCgoaKgn56bl5WVlZeanZ6fn6GhoqKio6OhoaCgoJ2cnaGioqOkpKOioaSlpKOko6SjoqKioqKhoKGfn52cnZ2cnJ2dnJ2enpqXlpaVlJOTkpKSkpCRkpKSkpGSlJWWl5iYmJiam5ycnJycnJ2cm5mYmZiWlJWXi3hsY2RiZFFHQT1DO0tIRDo7Ozw+OTo6OTo3Mzc5NTo4ODg8OTg7OT09Ozo7Ojk8PDc2NDc/PDo9Ozw/Pjw7ODxBQ0FDQkI+P0NAQkFAOj9APztZmZiampqam5ubm5ydoKGhoaGhoqKioqKhn5+dpKWmpqenpaWmp6ampqWkpKalpKSkpaaGUFJQT0+PmHB6mpubnJ6cnJycm5ubmZiYm56dnp6foKOkoqGhoqKio6SkpaalpKOjoaGhnpyalZOUmJuam56amJiYmJqcnpyam5iWmZybnJycnJydmpqbnJ2dnp6dnp6fn52cnJyhoaCblpWVlZacoKGgn5+hoKKjoqOhnZuZlpaWlpicnqCip6ikoaCgoqOjoqKioKCgoJ+fn5+gnp2cm5ucnZydnJmanJuWk5KSkpKUk5KSkpKSkpOSkpKRkpSVlpeYmJiYmZqcm5qbm5ucnJqZmJiXlZWWl4d3ZGdoZGJNQ0U8RDlJSkU5Ojs9PTo6ODg6NjQ3OTU8OTY4OTc5PDs7PDo6PDs6PDw4Nzg3Pj07Pj46Qj86Ojo/QURCQ0FBQD9EQUFAPjpAPj06W5qYmZqbmpubm5uen6CgoaKioKCgn5+enp2dnKWkpaanpqWlpqakoqKio6Oko6Kjo6KnllRYVVJOZ21rgZ6am5udn6Cgn56enp6dnJ2dnJ6enp+goaCfn6CgoKGio6Ojo6OjoqGgnpuZmZiZmZmamZienpiYmZmam5qWlZeWlZicnJ2cm52dnpybnJ2cnZ6bmJqeoaGdm5udoKKhmpWVlpaZoKKgnZueoKGjop+em5eXlJKSlJeYmZ2goqenpaGgn56goaGioaCfnp2cnJubnJubmpqZmpydnJmXmZaVk5GQkJCPkZKSkpKSkZKTk5OTk5OTlJWWlpeXl5manJubnJucnJqamZeXlpaVlZSEcmZsYmRbREJMPT84RktCPEA+Pj05Ozk6PTg1ODg2Ozg1Njo4PDw7Ozw8Ozk8Oj09OTU4Nzw5PD88OkE/Ojo6QEBDQkRBQ0A/Q0FAPj08QD09Ol+al5mamJeYmpycn5+foaGhoJ+fn56foKCenZ2lpKSko6OioqOjoZ+foaGipKOio6SiradXXl1UV19ua42dmpqbnJ6dm5ucnZ+enZycnJydnZ+goKChoaGgoKGgoKGioaGioZ+enJqampqbnJqZmpuZnJ6ZlpaWl5eTjo6QlJabnJuam5udn52cnJycnJ6dlpSZnJ+in5ycnZ+hoJuXl5mZmpycnJubnZ6fnZqXlpaWlJOTlJiampqfoKGmpqWgn56fnqChoaCenJubnJybm5ybm5qZmJmZmZmXl5iVlJKQkJCQj5CSkpKSkZGTk5aYl5STkpSVlJWWlZaZmZmam52cnJyampmXlpaWlpaQgG9vZV5gV0BKSDg/N0lFP0VBPD07Ojo8Ozs3NTs4Njs3NDY6Oj47Oj0+Pj07Ozs+Ozo4Ojk5NkBBPTo8PTo6OT9BQ0JERUM+P0FBPz8+Pj89PDtgl5WXl5aVl5mbnqGhoKGioqCenp6enqCgn52bpaWjpKSioKCfoJ+dnZ+hoqOjo6OkobCjXWVkYGFua4GenJubm5ubmZianJ2enJubm5ycnJ6ipKGeoKGhoqKhoKCgoaGgn5+enJqZmpubm5ybmp2dm5manJiXlZWWkY6Nj5KYnZycm5ycnqCdnJucnJyempWVm56foZ+dnJyenp2cmpqampqampqbm5qXl5aTkpWVlpWTlZaam5qanZ6foqWjnp6fn5+en5+enZ6fnZycm5qcmpqbmpiZmJiYmJiYlZSTkZCRkJCQkZKTk5CRk5SYmZiVk5SVlZWWlZaXmZmXmZqenpyamJiXl5aWl5eYjX1ubV9lVlRFSzw3PjdSRUM+QkE4Ozw7OTg6ODY7Nzc6Njc5Oj0+Ojw8PT49PD06Pz06ODw9OTtAPj4/PT45ODs/QkNAQ0VDPT9DQj5AQD5APTw8YZWSlJWWlpeanJ6goKCgoaCgnp6enp6gn56em6WlpKOioJ+fnp2dm5mbnJydnp+gn56rmGNpbW5pZm2enZybm5ybmpmZmZqam5ucm5uam5ygo6SgnZ6en6CgoKCgn6ChoKCfnpuamZqam5ubm5ufnpyZmJqamJiYmJKOj5OXnJ2bnJ2cnJycnZycnp6dnpqVl5ygoaGfnp2eoJ+cnJuampqbmpqYmpmVk5OTkpOWl5eVlJiYmZucnJydoJ+gnp6enp+fn56en6KjpKKgnp6cm5qampuZmJmZmJeXlpWUlJORkZCQkZKTk5OSkpOUmJmYlpWUlZaWlpaWl5iYmJiXmZqamZeXl5aXlpeWl4l4dmddX1dURUU5OTs8WT5AOEI/OTs7Pjk4Ozg6Ozc5OjU4OTs9PDk9Oz0+PD0+Oz8/Ozk+PDw+Pz5AQUE9ODc7QkNFP0FFQz1AREJBQEQ7Oz47PGKWk5SUlpWUlpiYmZubnJycnZ2cnJ2en56dnJqkpKSkoJ+enpybm5qZmJiYmZucnZ6cpolla3R4bVuFop2dnJydnJqbmpqampydnZ2bmpuboKKinpucnZybnJ2enp2dnZ2fnpyampucnZycm5ycnp6cm5qanZqam5yVkZOXm52dnJ2fnZycnJycnZ6fnp+cl5idn6GhoJ6cn6CfnJubm5qbmpmZmZmZl5WWlZaYl5eXlpaYmZuenp2dn6GhoJ+fnp6fn5+dn5+hoqKhoZ+fn5yZm5qcnZuampmXlpaYl5eXlpWTkpGTlJSTlJSUlJaZmJaVlZeZmJeYl5eXl5eYl5iXl5eXlpaYl5eVl5eDeHZfW11eUT1GOjk4P1VDQTtDQzo8Pz86Ojk3Ozg4ODc0ODk8Ozw4Ozs8PTo9Pjo/QT06PTw+PkA/PUBBPjk2PERDRUBBRUU9PkVERD9COzo8OTpkl5SVlZaUlJSUlJWXmJiamZqcnJydnp6dnZybo6Oko6CenJuamZqZmJiYmZiam5ubm6WJa3F2em9lmp+enp2dnJybnZ6dnJ2enp2dnJydm5ygoJuampubmpudnJqampucnJuZmZycnJ2dnZ2dnZ2dnpybmp+fm5ydm5mZmZudnZ2dn52dn5+dnJydn5+fn5uanZ+goJ+dnJ6gnpubm5ubm5yampuamZudnJqZmJeYmJiYmp2foKCgoJ+hoaGgoJ+en5+fnp6foaKhoJ+enp+enJqam5ubmpqZlpaXmZmYmJiWlJOUlJWVk5OVlZSVlpWVlZSYmZuamZaWl5WWmJiWl5OUlJGRk4yRkJOWfXhqYWJiXFA8QDw2OENWSERCOjg7Oj47Nzc5Nj06OTk2NDc6Ozw9OTo6Oz87PT08QD47Oz46PT89PkBBP0A8NztBQ0U/P0REPj9EREM+Qj07PDs6Z5aTk5OTk5OTlJSVlpeWl5aWl5mbm5ybm5uamaOjoqCfnpuamJeYl5eXmJmYmZybm5qkgGpqb3lzcZegnp2dnJydnp6enp+enp2cnJydnp2bnJuampqam5ubmZiYmpqamZmZmJqdm5ydnZ2dnJ2cnZ2cm5qdn5ucnJubnJubnZ2dnJydnp2enZydnZ2cnJ2dm5uenp6dnZybnpubnJycnJydnJubmpmbmpmYmZmYmpmZmpyfn5+jpaKfoaKioaGfnqCgn5+fnqCioaGhn5+fn52ZmpudnZqZmJWWl5aVlZaTkpOUk5STkJCSk5GUkY+OkJGOlZabmJWYlJmXlJiRjJCPk5yTkoyFjIeDhndxZ2pkW1xRQT44NkJHYEJFR0A+Ozw7Ojg4NjU8ODo4MzQ6Njk9PTk5Ojs9Ozw6PD48Oj5AOj5APjw/QD8+PDg6Q0FEPz5CRD8+Q0VCPUJAPDw8OmeYk5KSk5OSk5SVlJWXl5aWlZaXmZmZmpqampqkoqCfn52bmpmYmJiXl5iZmJmcnZ2cqH1nZXN7enOJop+enp2dnp6enZ2enZ6enp2dnZ6cm5ybmpubm5ucm5iYmJmZmJiZmZmbnZycnZ6enp6enp6dnZybm52bnJybnJ2dnZ2dnJ2dnp+fn52cnZ2dm5qbnJmZnJ2dnZ2dm5uanJ2dnJycnp2dnZybmZeVlZeXmJqam5ubnZ6foqOhoKGhnJucm5ubnZqcmZycn6CfnZiZmZmUkpKUl5SPj4+OkYyNiYuQi4mLjpGRj4mQmJiQkoyNi5KQj5iYoqiqpqWlrKOmoZqep6eyqKKVo6Cfl39wcWlsXFtcTUY8NzdHR1g+SE5URjk+Ojg5ODc1PTk4NzMzOTY6Pjw6Nzo8Ozo6Ojo8PDs/PjtAQD47PT5BPDw2N0A+QkA+QUY+PEFEQT1DQj49PDlmmJSTk5OTkpOUlZOVl5iYmJaXl5iZmZqampqaoqGfnp2cm5mYmJiYmJiYmZmZm5ybnKx/am16f3lxh6Genp2cnZ6enp6enp6dnp2dnZ6enJubnJubm5ubm5uZmJiYmJiYmJmZnJ2dnJyenp6enp+fnp6dnp6dnJydnJ2dnZ6fnZ2fn56goJ+enZ2dnZybnJ2em5qbm52enZ6dm5ubnJ2cnp2cnZqYl5SRjo+QkJGVmJSWlJiZmpudmJuYlY2Mjo6TkpKRj4mQjpGRjo+Ki42NjYiIi4+Lg42NkY+MkI2Qk5WVnJihoJySn6SipKmam5eanKOprb3Bwbq8uL26ucC8ubq3uru7tL2zwbV/bnVmZ1peWUxJRTo7TElTPFZSSUM6QTo7Ozc3NTo6OjgyNTY4Oz08OTk7Ozw5Nzo4Ojw6PT85PD8+PDw9QTs5NTg8O0A/QT9EPTxBQkA8REM9PT06YZOTkZCUlJOTk5OTlJeYlpeZmJmYmZqbmpqamp+gnp+fnJqZmpqampmYl5iZmZmZmZmphXB1e4B3b4mhnp6enp6fn56en56fn56dnp6fnp2dnJ2cm5ubm5ubmpiYmJiZmZiam52cnJ2dnp2dnp6goJ+enZ6hoJ6dnp2enZ6fn56en6CenZ6enJydnZ2cm5qYnJuVmJqamJiYmJmSjJCXlKCXk4+MjYqKiImMiJORh5CPjYqKkJCLjoqMi4+IiImJjpGOjYaFiYaKhoWLiI+SkJCNkJKXlpKamJ2TlJ6kpqaqq7Gsr6+rpquqsbm5tbS0rqyvtMDIxcXBvsbDxMTDurW+t7a0s7C2tb6qcHRyXGZfXl1JRj8/RUtMVklcTEQ/PUI6Qzk5Nzc7OTk3MTc5ODo+ODg6PDw7OTc5OTs9Oj4/OT5BPDs+PD46OTY5PDpBPkNBQT08QkBAPkJEPj8+OVyHhIOHi42KiYaFgYqMkZOVmJiHlZaWkpiampmenZ+gn52ampubm5ycm5iWmJmXl5ibqo56dXZ7f3mCoJ+fnp+goKCfn5+foKCfnp2dnp+enp2dnJqbm5ybm5uYmJiXl5iZm5ucnJydnp6enpybm52dnZycoaGfnZ6dnZ2dnp2dnJiWlpaYlZWSlpmWk5GKjI+PjI+NkIuLj4+WiYiEi5GZjn2Fi42PjYyHioyQm4yRj4+Lio6TjIyNjIiSi4yFiYyPhouIh42KhYyEj4qXkJOYmpWbnKOqoaKknKKrsbe0ubWxs62vsrKlp7O6sbq6vLa3tsDDw729vLa/urq8wbW4wL60r66mqa+3mm58Z1tjWl1fSEU+QUtJU1hZXkFGOTk9OUY/Pzo3Ozs7NjM6Nzo5Pjg6Ojw9OTk4Ozk7PDo+PTtAQDs8QjxAOjg0Nzw7Qj9BQj4+O0NEREBDQz0+PjlhmZWLkYWNj5aSiHl9e3+Fi4OKgoqJhmuAeJCLlpqRnZ2UlJGTlpeampiWk42Sk5KQm5uIdndzcX1/cpGgnZubm5yenZ2eoKGgm5uWlpucmpybnJuYmZqYmJmampqWi5CTlpmYlZiYlpucl5WSkY2SkZCUk5KXm5mYm5ePjpCLjo2Ch4uLi4qLiI2RjIeHhoqIiZGKh4yEhYqNi4qNhI+UkIyDkJOUmZWQi5OTkZWRlpWOj5GMlI2Oj4qIj4ePhoeJiYmNiomJioWNh46JmJKUmpuXmKChp6Cko5qqqbO2sbWwqKmiqK6tn6qvsK21ubi8wr/BxLixtbCutrOwuL68ury+urOzp7G3wpB1gGNiXlpXUk1IRkVQSVlXX1tDUDpCQz1HRj84Nzo6NzU1OTc8OTw5ODo9Pjo6Nzs7Pjs7PTs9P0E7Pz48Pzo4NDM3OkFBQEI+PjpDREM/QUM7PT45Z6mloqKZn6CippeUiI2CiIJ1h4iKiIp7e3Z7enmPeoiSfn18en6CkYWBgH1zfH99fISHfnRweHZzfHaBj4iIiYeIioyMkZicl4iOhIuNi4iNkI+Pi5GPi4yOj5CQjouFhYeLjIyHiIuOi4eMhYaBjYuGiop/iYqGiJiRiIOIg4KFfIuLjIaJi4iKkIyIi42PjI+Wh4mLio6NjY2Wk5OdnJyalpycm56bmpuYnZeTkZWWkJKRi4+LlpSMjYqDi4SEiYyQkIqOio2LipGJjZOTk5SVk5KcmZ6Xn6CfpaKvsamupKSfmKStpqa4t6ysu729wsPAv7+vpa2wsLS3uLO0uLa0ta6stK+4tLaBeXpjZmBeVlBRQUVMT0lcXl9UR0dCS0xCREA9ODg7OTU3Nzk3Ozc9PDk9Pj05Ozg6O0A8Oj06PkJBOD88Oj84NjQyOTtCQD9CPj04QEI/PkBEO0A+N2CloJqXnaGaoaCPl5efl5WCjaCfo6GdmpKOjIxycXBvdnFucG1ucHZub29waHBxcHR+c3FycXd7cnl2d3Jyd3Z6e3l8fXt/iIGEi3+PkYaNi4uGiouLiYaEgYaCgIKJkYOAg4x/ho+LiYWAh32AgZKQhoSEho2DhIyPj4+IjY+Hi4iRkJWRjpCKk5eOj5WYp6SfnZWYlpaln5udq6aqt7W4srGnr6qnpqGfmp2WkpWVkYqPjImTjZuVjYuLhoaJjJWQkJCLmZKVlZSbkJiTlIyNkYyWl5WilZ6mqauno6OqsJucpp+mq6G0vb6zs7+5u7u6uby9rqiusa6wuLyztLGxqrCpqLGxsqild3J0X2hhYFRWUUlKSFZNXl5eVExKRVFKRUdDPTo5OTc0ODY4Mzg4PTo9PD47OTs4Ojs/PDw+OT9DPzg7Ojg8Nzc2Mzc5RT4/Qz89N0BAQT0/RDw+PThUj4yGh4eUjJWZl5yWmZaNlZyWlZydoKCdmpiWeHFubXJ4cXFsbnJwa3FvcG1yc3t1dnd5fnVxeHZ0d3tybn98gX15eH1/eYOGg4WCg5CLkIuLi42Pi4mJhYKBfX9zfYiAfpyQhIWFiYuPinp9fYaOjYqGjZSRi5CXj5SXkpihlp6XlZunpp+goKawq6GjpbW0sqqmqq+isba5vcK7ucO+vLi9uLWxrLCspZuSk5mfm5SPk5WOmp2doJqfn5edo6qsoZ+em62hp6qwqaampJiRkZWUo6SirKSss7Szs6i3tru4sLKvra2yt7a6srW6s7e5u7i8urayr6yxsbKztLOxsa2us7Gzs6yhl3Zxc19jXlJRVE1PSUdYT1pcZFROR1VPRURKRD44Ojg3NTg4ODU5Nzo6PTw/Ojg8ODk5PTs9PTpCPj84Ozo5Ojk4NjI1N0I+P0RAQDY+P0I/PEM8PT46Tn98go6MjJOTl5eaj5SWjZaRkZSXk5qanqGdnHJvcnFxcXFxcG5zcW91dHJxdneAdXd8eYV+d3t8eX1/fICJiYmDfXp/h4GIiYGAgIGGiIGGi4aIhYSIiImEf4J/enx8fX6SkH+IeIGFi4qDhIWKj4yNkZmdlJSUoJqan6Ktsa2ppKWtr6ysrLWuvrmtrqm1sLexq7G2rK+9wsLAvrq8trKutraxtK66u7OurKepp6unoqmtoKmooq+wuLSxvLq6urK0ta+8tLezt7e7t7mtrbCprLW5sbeytLe2sLu7vLu6ury1vLi0wbWsqqqrtLG3uLm1trSzsKymrrCqq7Cxq6yusLKxtK6qo5N4dnJlZ1tMUlBGTUhTV1JlXmdUUExcUUhMUkNBOTk3OTU4ODY2Ozc5Ojs6Pjk4Ozo6Ojw8Pj08RD45Njs7ODg+OTUxNTZCRkREP0A3Pj5DPjpBP0BAO0t/gomXmJSdlpabmIuSlo6XkZGVl5SZl5+bmZx8dHV2dXl1c3RudnJzdHV2d319gX56gXyDfoJ/fYB/hIKFj52RiYF/go+Xjo6HgoCBiIuFfoqQi3+HjYyLioeSioeGjZGTkZGEh319g4iMjouOiomQj46PlJSYkZWbmp2dqK6yr6+1tLOtsrW4sLy1tbGqsKqztbS7t7SztrS1r7i4t62noqassLCvtre3vrW5vLOysa61u7C0r6+yu7axuMC9tLS0s7izvLq2tLrAvbm6ubq+ubm5vrWysa+yr6q1tLGzsbSzrri4tb+vpKaoo6ussa+zrq6wsKytq6qroqKmqKKnrauqpaynoqeYeHlxZmVZT09NSVJNV0xPX15cTlVUYlFEVE07Pzk8ODk1Nzc1Nzk1Ojo6OTs4Ojw8Oj08Pj4/P0I9ODY6Ojk6QDs1MjY2QUZDQz4/Nz49Q0I5P0I/PjtLjpGTmJmVmZGTopiTkpKLk4uOkI+Vl5ablZSbhoJ9enh2dHRzdH53end2gIKDhouMhISFioaQiYeRk5aRjZaalY+IjI+emJaVkpCTl5qamJCdoJ2Tl5qgmZ2bo6CVkJugpKOak42IiIuJkZGOkY6LmJqPj4yUmpecnJufnKSstLm6vK+2tLi0tLK3uLmzq6+qqKy1srK1rrGrrqa3s7OxpaGotbCvrayrtbqyu7q6tLK3ur67ubG4sLmtqLK4u66ttLS3tbu2trm5vLe0r7G0t7a5s7e1pq2pq6ior6yprq2up6KxtLG0q6aop6Cjq66oqq6orLKwr6+pqKGeoaGjpqOgopqlo56ol3J3bmdiVUtUT09KQ1BLX2JYWlFcU19NSFJJQUA5Ojg2Njc3NTg5NDs5Ozk8Nzs+Ojg8PD0/QkBBPTs2OTk5Oj87NjM3OD5GQkJAQjk+PUBDPkBGQj44R5OWkZWTkpSQkZ+ZnZmVkI+Sko6Mk5aWko6RlZGSkIaBeXJzdXuBhI6HhZGTkpicnJiVkJWYo5yaoaeqqZ+clpeVnaKioZyZnpmlqKyvramnqqmop6GlqKirqamvoZufoaOjoJqfoJyUjZiUmKCgoaSem5qkp6Spq66spaOoq6+xtK6qrK6zr6ystLO0ua6urayqrLKwsK2wqKqmsrS0uK6qtrqwr6qurLC3s7i0t7W0u7y4tbWxtauyrKiys7uvrbGytLa1sbG0s7OvrKuvs7a0sayutKqqpqWnrauoqKupqqifqbOwqqeppaOio7CtqaatpairrayppaSioKWipaOYmZyVnqKippdudWVnZFZPWEtLSktTVHBiWWRXX1tcUlpQTEM8ODk6Njk4NzQ3NzQ4Ojw6PDg6PTk3PDw7PkM/QT47OTo5Ojs+PTg0NThBREVEQkM5PjtAPkI/R0Q+N0KSm5SVlZaVj46Wl5qZlZGKk5SSjo+SkYqKiY2Ul5qTjYmCho6VkZSfmpuin5+jnqGhn5ijpKelpaapqa2rqaKmpKilpKGfnqOjra2srairrq6qqqukoaKlqaenqaijopybm6SgpaijoJidmZ+hoqmnoKKirqyrqqetrqilpKmpqammo6iqqaekp66wr7Ovq7Crqq+yr7Czua+rqLCxrrCyubO0r62vtbCss7GurLW1tLSzs7CvrKyqrKusr7G0s7CwrrCwsKyqrauqq6alrrCysKumqbCvqaOkqaunqKaopquwq6mvqaaoqaalo6iwraqpqKKpo6WnpKGhoKKloZ2el5aYlJugpKmUbnNeamlfVVpOUk5QT1JkXGVjW11ZXFBZT0tAPDs5Ojc6ODczNTMzODo9OTo4OTo5Oj08PEBEPkA9OTo8PDw+Oz45NTo8QkFFQUNBOT47P0BEQENCQDdAkZ6YlJeZlpGHi5SSl5GIg4mLk4+OkI2Hh4SFlZmWmJeZlpqeop2anKKkoaCdn5qfoKGgpqGgoKCjo6KlqKmrramqpqOmpaCloKaopqWnqKapqKOnppmcpKaioaChoaCcmJmfoKGkpKKenpagm5qioqChn6CiqKCcn6GloaCmo6KfpKGspp6foaGkrKqnrKivq6e0sa6ur7WyrKqwq6mtrbWwrq6srreup6yqpKivsq+sq7Kvqqqpq6utqa6urrGxraqtqaunp6uoqauinaapqKilqKisqKilpKWop6iopqmsr6+oq6mhoqKlo6Opq6ymqKWjqKKhoKSdnZ+hoZ2bnZ+amZWcnKOqlG9zZm5yZF1dUFVPV09eZGRsaGJiWlpSVE9NQTo9Ojo4Ozk1MTYzMjg4Ozk5OTk7OTk8Oz0/Qz5APTk7Ojs8QD0+PDk5PEFBRUFGQTo9Oz9BQUJBRUI4PYqWlJOYmpaPiISNjpGSjIiIiI+JiZCRjoqKiJubmZygpaKlnqKjoZqeoZyanZ6bnKOop6ugoKOYoJ2XnKGjo6WjoqKkrKilqaCepqmnq6mkn6Kgoqahpq2mpp2fn5+fn5manJyhoKGkn6GbnZqcoJ6hn56eoKOZlpqYo6KipJ+ZnKGhoqCbmp6goaSgnaejqrGorqusqaSqqquorKalrKqws6+rq6mwq6appaWoq6ynpqevq6Wnq6upq6irqqqrrailqKOmpaesqayoopykoaOmo6qpqKano6SnqKanqKepqKupoaKoo5yepqWjqKino6WlpqmgpJ6inpeYnZ+doqKlnpiUlZ6go5d1d2t2d2FfXFVZUVVWW2Necl9oX2NTUVlUSD48PTg7OTo4NTM3MzM0Nzo4OT05Ozo5PDxBQEM9PT44Ozw9PEA/Qz86ODo+P0NAREE6Oz48QD9DQ0VDOTyCmJmenZ2alZKKiZGRl5GQh4SJgoGNj4+Sj42cnZ+hpKmlqaeorK2moqKfmKSmo6Stsa6yp6asm56em5qjp6Cfo5+foq+rqqyoqKuwqaipqKGfoKeprbCyr6yjoqahqaWepKOipqClpKKlo56doJ6fpaKinp+imJWemp6fpKGblZigoZ2enJudnZuZmZWen6Oonp2iqKGaoaOmoqSoqaqoq7CxqKWlp6eopKWpqaqnoqWmqKadnqWloqClpaOlpqCjpaOjpaelqamqpKekpqKmp6SrqaenpKGlqKynpqWlo6OopJWdo5+bnaCjqaeopqGjo6mooKiioJyVkZqfoKGmopuXkpCamqCVfHdvfXlmW1tgX1pcVlxoZG9jbmloYl5QUEA/Ozo4OTg8OzYzNDMzMzc5OTs8OTs7OT49QkBAPTs9ODw9QD08PENBPjo4PT9EP0M+Ojk/PEI/P0FEQjk6gJ6kp6Kem5+gmY+ZnaCWloqGj4iEi4qTl5SRo6Wnqq6trLOys7S4t62pqqevtLKxqq6usbKusa2lq7OssbGpq6+rq6y2sLSwq7GysaOfoqqpp663trS0trOvrKuuq7awqbKxra6npp6io6ObnZyXoqiloZ+eo5ueoZqWnaScm5aZoqefoJ+joJuUlpmWl5qfoJmVnqKZmJ2dpZ2gpKeqqaiqraylqaSlqqeqqaqsp6SkpKOimZmhnpqaoaCfpaWYnqSmpKqooqelpaGqp6mnp6ejqKWmpaGkqKesoqekoaalpaOVl52Ym5mVo6elpaSfnZ2lo6Kqo5+amZiXnJyaoaGakJOTl5ibjX93cnZ4aWJbX15cYllgZG5ta25hX2RgUE9BQDs7OTs4Ojk2MTQzNjQ3Nzc6PTo8Ozk9PUI/Pj89PDo/OTo7PD5BRUA9OTtAQT5DPDs5PzlAQEBAQkM7OXuao6OcoJ2dop2Zn6KioJibmJaYkpSQm5qWl7S0rrW4s7S4tre0uLm3tbm4ub28uKqLnLK4vLS9urW7uru4s7q/uLe5u7G3r6iusq2inJ+qsri8vL27ur+0r7GztbS3t6+1tLWysKikop+gl5Wal6SqpqahpKOkq6WlmKGko52goaKooaOgpaGck5mYmJmco56cmpudl5uZlqWam5+hqKmpqKuvr66pqKmrrKytq6irp6WjoJyfo6Ojn6Cipammmpyip6Spn6GjoqKgpaanpqSooJ+ipKGjoqiop6OloKGopqalo5mbmJuTj6GknqKfmJiVoJuhpaCfm5udnJuamZugmo2YmZiTkYaAdnh5eGNbUllUX19hbGh1a3BnaWliWVNMQDw6Ozg5Nzk3NTU2Mjg1Njc3Ojw7Ozs7QD4/QD0+Pjk6PDk2Nz47QkZCPDg7P0NDRDw+OT43PkFCP0ZDOzhwkpqblJ6bm52Vl52doqajopaXnpaXl6GblJi+t7G4uba3t7i7l5S2vbu9vcDFtaK7mKC3v7+6wcm0nbu2sra/xcGooLazurGqrrSxsLG0tba8vb68vL3Guri3ur20r7Wxsbq4t7Kzsqqmpp+YpKSnqKSupKurtbWus6CnqqynqqmlpqCnoKGmoZOWmJ2foqSjnZ6coaChnZekmpmdoKaqqqqtrq2tsLGrrK2sqamrrqimpaalpqSkpqaeo6eppKGcoKKjpqCio5+jpJ2foqWgpJyboZ6fo6GhpaSlqaOkpaKkp6ehn52elpOcoJiZko+MjJeWn5uWnJqdnJqTlpSUmJOQmp2YiouHgIB8gnhhXllTYWhgZnNvc2l0ZGlkYltMSz46ODg5ODg5NzM0NTI1NDY2OTw8Oz08P0E/QEA9Pj44OTs4Njc/OUJFQzw7PD5DREM9QDs9Nz1DQ0BFQjw3Z4yRk4qalZiblZWYm6Knq6aVl5iQlZmhnpeXvrWztLu6ubi5woeYt6u4u8DCxbOjw6e4s72/tMTHvbS7uL62wMTErqCworW2tb2+wcPGw8O5vb/AwL2/xL28ur2+tKeqmLHAvbi1ucCzr6+qqqitp6ekr6eqtLyxtLWor7Gwr6yqoqajrJ+fpquXmqifpaWfoJydoKuwsKyiq5yYm6Cor7Kys6uorre1sq2tqaalqKulpaStqaShn6Cnnp6mqKmmnp+anqGlpqmcnaObl6KmmpuanZ+cmqGcmZ2eoKijn6GfnaWioKOioZSZmpmTj4qLhI2Qk5uPjpiVm5eYkJORkomNl5iYk4uKi32AgIVwYGFeXmpiYm53dXZubFtiUVVcTUc7PDk3OTc5Ojc0NDQxNDM3Njg8Ozs8PEBAPUA/Pj8+Ojo5Ojc6Pz5FRUU8PT1AQkJCQUI7PDhAQ0NARD87NV+MjIaFlouUlZeYl5ifpqellpWWkZebn5ual7mxtrO5vLy5urWqsryxvsG0vMe5uLuuv6fGw7/KxsnIxcXJvMLHx7+xsae8vL7FxMbJx8XGu8TAxcbAua+9vMC+vrOrqoyzu760tbfCuq2vsLWqq6aqo62kp7G2q7WyrbOtqK6vp6awr7Ktqq+zpKu1qaeopKCgnqmyuL61tbWqqaausre4t7apq7i8ubexr66noqOop6SfqKOfnqCZoZydoqSnp6GelJuaoKGlnqChnpajnZSQlpiboZqflpORlpSin5qenJudoZ6kn56VnJiPkpOPjImTkJefiZCWkZuUmJGRlZaDjJWXlpKLjIh8f4N/amZoYWtsZm51cXJ1cWZeX1xSSUU/Ojo6Nzg0ODw3NjU0MjMzNjU3PDo7PDs9QD4/QD48PTk5OTs6PDw+QkRFPj49QENDQkREOzo4QUJCQUNAOTJbk4iEjZGKi5GRlZCSmp2fnJOSmJSdnZqXmpW2sbm1tb6+tri1uLO8vMTEusPHwb+0s8XFxr/CzcfLzsvLx8HDxsfIysXExcO7vLzBxcHFxb/DwsbFwLGTvrq/w8K2trqptLO0qauzu7uxn5uxr6ykrK60p6qpqKqtrKmlpZ6pr6uyu7q4u7e5t7O5uLOurLO0qrC1ub3Bur6+vL60urm4u7qysbS8u7q7s7Oyp6Smq6uioaCdmpudmpyXmpuenJygnZaclpuZnZ6io52UnJCNiY6OkZ6bnJWNh5KLmJiWmpybmJybnp6cmp6UjpiYmpSRmZeeoZWYmpKXlJWRlJqYk4+TnZaSi5F+enx/dGtrbmRvbGhxeG95aWlhXGdhUUZEQTw5OTc2NDQ6ODQ2NTMzMjY1Nj05OTs7PT47Pj49Oz05OTs7Oz89QUNBQkFAPEBDQ0NFQjs4OUQ/P0BCPzsyV5uQkZCQh4WSjo2IjZCTlZGPjZSUm5STlpqRs7e4uLi+u7C1sri2tbbAw8G+w8LAvru+u7u8xMzEzNDLxsa/xcfLyNTLysjGv7u7vsS+xcjGxsTEw7i0wLe0vMHCucK3t7/Au66lrre8t62co7ewpq20tayupaWjqKSgoKWZqrOyvsG+urm6uLW0srG0tLO6wL7Av769u7u9vsDCt7a3tru7sru+ubi3u7a3tKyoqamrpqijnpOampyYkZKZl5GRmJqXnpiWk5acm5+elJOJiX6GiIuWlJiZkYmVkZeWlZmbmpaYl5idnpyhmJWZmZyYl5ybn56jnJ6WmJeTl5yZmZyUlp2UlpOJdnl6e3Zua2lndVpmcndzeGZnXWRbUlhJRj87Nzg4NzYxNjk3NDQzMzM2NDY7ODo8Oz08OD0+PDo7PDs9Ozs+PkRBQURCQEBBQkNDREM9OTlCQD8/QD89MkyWmpaSk4yKmJCKi4yOkpKKiIaNkJiKj5CUl7O7tba/vb2xtrjBvby0uL/Bsbi3vsHFvbu8wsbJv8jOyMHEwcfKysbKxczIzcbIxb/DwMvNz8nGw8PEwsS+uL7Bw8DEvsHPz87Gq6+2tLWroKe0s66ruLWzq6mjoq2prKatn6y1tL/Cvrm4vbawrausr7W0ur7Fv7u8urO5u7i5ubWtsLS9u7G/vLiytrmzubu0ra2orKyqqaeXnpualY2MmJSTi5WWlJyZl5WWmZKYn5mQiop+iYqKkY6Vl5OUn5mWkJSZmJmWmJOUm6GeoZiYmp2ZmZaenpibopqdnJuYmpuZlpeXlpyZlJyYfoB4eXV1ZWVpamddam9teHdjYmBgXlhXRkU4Ojg6OTc5NDQ5NzY2NTEyMzM0Ozo9Pzs9PTo6PTs8Pjo7Pz48QkBDQkJFQj0/Q0NDQ0RFQDk6QkFBQj5CQTVCkJeUlZmSj5qQjpKRjZSVi4qHjI2UiImPkpq2u7S8xsHEwr3BxcLAtLO9v6ywr7rDysPCvs3IxbfByMW/wcLIy8rCwsTJzM3Pz8zDx8bIyMjHycfFycfIx7/Fx8TEx8jK0s/SzLy4trS4uMG+vrq9ury6vKytp6q7urm3wLK1uLLAxrq3t8Gzsa2tqau1s7u2w7a2vbWxt762s7e4sLW2v7uwvbq0q7CxsbO8urOzrqutq62xnaOjoJqQjpiXlZCclpaYlpWSnJmTm5+clpGUjpWQiYyQlZOUm56YmZKSnJedlJmSk5aZmJ2VnJ6do5yVnZ+TnKKcnKCfnaOemJSVl5ebmpmgkH99cXRxb2JhZ3VnaWl0bXhsXWRbVWBZTEhDNjw5OTg4OjUzOjY2NDQxMzUyNTs6PD47Ozw9PDs8PTw7PD49P0E/RUFCQ0M+QEFARUVERUE7Nz5DQkI+Q0I4O4+akZaalJKUjZCUlI6VlI6Pi4yJk4uIkJObt8C6xsXEw8zCwcS9vrWvt7uvr7O6wMfFxMHMy8W2ucDCwsTHytHLwsPExsnFzdDOx8zJwsHGwcvLx8bMyc3FxsbDxsXJzdDNz8zHxMDDwsnNx8XBxMfBu760sbCwwb6/wca/vri3w8K6urbAvrWyrKmvsri+tMC0tLi0t7nEua+8vrm+v8K/tbq2q6qsrq+wt768trSura2utaSlqKimmpycnZyeopydmZOQkp2VmKCdmJiVmZmZl46MlH2QkJefmZmYk5GToI6Nko+VjpCUlaKdnKSem56elpyjoKGipKOkop6amZubnJ2enIN9cnx4cGdgamp2bGlldW5zYlxiVFdUU01HOjc7OTk3Nzo3NDg3ODQ1MjM0MjU7Ojk+Oj08Pz04Oz05OTk9PEBBQEVCQUJBQT9AP0RFREVAPDo+QkNCQENBOjSAoZeUmZiVkImUk5aTiZGMlJGOiJaKi5CXnMXLw8O8wMPHwbm9vbu4tre3rrK3uLzAwsDCx8bHurzAwsXHyMbSycHDxL+/vsTLyMrLyLy7yMfJzcjDyMnJxsXDwsHCx8fJysfMyMfIzcbLz8W3wMDAwLu6vbWzs7+/ub/DucC3u8G8uri7ub27srCvsKy5wri9ube1t7q9xb24xsjCwcLGwr28tamurrCwr7O6t7m2sK+tr7OppquprqannqSlo6OjoqCblZiekZecl5GRlZeZlZmRlJiSlYyYo5qcnp2FiZ+TfJKWlZKUlJennaCipJ+en56foaGkoqKjoaOinJ2fnqOhppl5enl/cm9mZWdkamRham1ubl5YXFZVTlBKRjk5Ozk3Njc3NjM3ODk1NjEzNTI3PDs8QDs/PDw6ODo8OTk4Pj1APz9GP0JBQz89QT5ARENDQTw5PENBQ0RBQDozbKKdlZedlo+PmJiZmIiSjZGVkI+Vjo6TlpbKy7u5urnBu7q3vsG8vLu5sa61uri4u8S6vsC+vru8wMXCxsK+xsG5u8O6uLm8vsHGwca6ucnJw8XEwMTBwsHEwcO+vcLAwMHCy8PGzMvFyNHCsL69uLq7vL63tLC5vrO8vrG5tbi7tryztbm2uba5t7GtusG6vMG/t77Ev8bDw8fHwrvAwr/Cv7iys7O1tLGut7S3tbSxrK2xp6Wlp7CtqJ+nq6ajqKWmpqCgn5SYmZSRkZWUl5OYl5qhnZ6hnKGdoaWglpSbkZeXmJqTnpmZqaSlpKWdoqCanqCkoqOcoqGjoJ6cnp6ppaiVfXuDeG5mYWRiYWJjY2piZmNaWVlcWVFORT07OTo7Nzc5OTY0OTk6NTMxNDUyNzo7OkA9Pzw8OTc3Ozo5Ojw+QD8+RDxCQURAPz49QkRCQkI+OjlCP0FCPT44NVmfnJiTmZaRlZiYmpeQkZCQk5GTlJKSkpSUxce4tbq5wrm5vMPFwri7ubGxtry6tbnAu7u5tre0tLW/u72/ub26urS/uLW4s6+7vLfAt73Cv8G7v8G8u8W+u8HEwL6+uLzBwcu+vcnEwMDKwLHBv7u4u766tbe0uLy0vbi1tLCzvLG3tri/tr25vb65t7q+u7/Axb29y8PGw8TAw762ubq2v7i7v7y4trOyq7CwsrWzs66sq6emnqeurauiqKumpqqjp6iqo5+Ym52bmpicnJiXnJuhpZ2anqGhoKGmoJqbnJiboJ+dnJ+coKiho6SknaKfmqKgop+el6Shop+dmpieqKWhi3x5h31xY2BiYmdqZ2ZpZWldVlVTWU9TS0U4PzY7Ojc3OTs2NTo7PDYzMTM0MTc7OTg/PT47PDs3Njk5ODo7PUA/PkA9PT9CPjxAQUNDQT9DPTo2PEBBQDw9ODdJlJibj5OUkZWYlZGWkpWRkJGUlZSTkpKYlcHCwLq8ub62uL7EwMKxvbqytLO4vLW3vMC8vbS0sbC1t7W6wbi+uL+8vbe1t7CuuLa5v7vAv7fBvLvDtrrIuLa5u725ura7xcXKvbnFwL+8wb64xr3BwLzFuLa3tLi2tru7uLa0t7q1tLi8vbm/ucPAwLu5vLu+vcjEvcfEw7rAvb62sra4srm0usLCureysaysq62yr7Kur6ijpJ6rrKyqpKakpKiqoqemraihoaGmn6Oiop6bnKKfoKOdnJuhn6KgpKCem5eZn6GdnZ6eoaWkoaKioZ6ho5yinqCZnZijn52eoJqZoKKmnYR6g4B4cG1lZGZvaWVraFhYTktLS1JJTEhDOT44PTs2Ojs5Njc8ODk4NjA0MzE3OTk7Pz0+Ojw6ODg5PDg6Ozs7PD1BPj09Q0E8P0NDREA/Pzw6Nz5CREE/QDg4P4mYmoyMkI+Tl5WMkpCakpGXmJaUlJKQmpTDvsbBwby8uLi6v7a8scK2tLyxtLa4s7q9v728sq2vrLGwt7y2u7zAxLm3t7e1urm6u8C9w8C6xMK+x7i5uK23tbi6tLezu8XGy8G7xsDAv728v8nDxMW+xri1srK9uLi4vrq6uby6urS3u7q5v7zEwL+5uri/ubvFxr3Fw8Kyur27sa+2uLO3s7q+wLm2rLGrrqmqqa2qqq6mpKWnrq2ppaOio6GkpaWmoqato6Klo5+ho6Gcmpyhn6CloaCenZygnaWgnpeVmZ2fn52gn6KmpaCknpybn6Ofn5mcmZ2epJyWnKOcnqGcppZ+f4Z8a25wZ3Brc2VibV9cVEhLSkRKQkNHPzk7OD48Nzs7OTc4Ozc8PDYyNzUxNjk8PD08QTs8Ojs6OT45Ojs9PUA+RD89PkRAPz9BRkQ/Pzw9OTc/QUNCQEI5Ojl3nJiLh4uQkpOWjY+TmpOQnZiSkY6QjpiSvbfHvsO+vbu+vL22uri9ure9s7OwuLi1uby8wLeqraSusLe7s72/u8S3tri2t7+/xLzCxcXHx8rJxs/CwbiutbW8vri7sr7ExMrFwcnDwr+/vr3HzMfHxMe9tbW2wb26u7/CusDCv7y2t729vcHBwL+8ube8wru3v8W7wr++tbe8vK+vt7awtLO6ubq7r6mtq62rrKaqoqeuqKWqra2vp6Sgn6ajnqKjqKOjq6Oiop6dm5ublJaZnJyfpZ6fnpmYnpejoJyXmZqZmqOjop6jo6egpqCbnaCjnp2WoJmcoKCblJegn6WcmKKQgYaBcWVsaW50bndjZ2JcY1FLVEhFRUNHQzw7OTg9Ojc6PTo4OTs3PD01MzY1MDY4OTo8O0A9PDo+PDk+OTk9Pjs/PkM8Pz5APz0/P0ZEQEE/Pjo3P0BDQz9BPTo4ZqGYj4uNlZKVlY6PlpmVl5uVjoyMjY+bk7m2wbS/vLm8w8C+wLq1trKywLmvsry8sLe7tru8q6qjsLm9vrO8vrzFuLK4ub3HycrDx8jGxsnIzM7RzMrEtbrAw8i/v7W/wb/Gxr/LxsO/wbzAw8zKx8XGwbm9vMS/wL/CyL3Hx8XFvLrEv7vBv7rAvLu7wMS9t7nCub69t7S2uLqur7WxsLCytre0t6yurKqsrKuoq6Gms6qlra+trKippaOkp5+io6Onoaeiop6cnZyamYyQlpeZnaKZnpuVkp2UoaCdmZ6fmJimpqKfoqKmoqeloqCko6GbnaCbnKKfl5WVnp6kmpafiYGDgXRvbGx0a2xuX2NeYWFOSE0/RUA/REM8Ozo6Ozo4Ozw6OTw+OTo+NDQ1NTE5OTo5PDtAPD89PTw4PDs6PDs7Pz5DPkI+QD89Pz9FRUJBQj87Nj9CRUQ8QUE6OlmfmJOSlZqVmpOQlpeclZuZlpSVkZKTnZm2uLaxuru6vsG5uca7trWypb69tLbBv66zvbS4wbGwsbS8w7y6ur68xL+3vb+9x8zGx8nGxr/ExMrIzMzNysbCw8vOwry5vbq5wMO/yMbEwcG/xcDKycPDw8O5w769ub+8wsbCyc7Hxr66xr26v7m3wLm5vsDCvrW0vLi2u7CvsrK1r7Cvrqyus7CzsrirsbKxqrCrq6yrrLatqKyusqarrKmpoaWgpaakrKSmoaChnqGgnaCMlJeTm5+mmZ6emZOYnZ+gnp2eopuYp62ooqSgoKKqpqmhqKGlm6CgnZ2jn5SYmKKdp6Gfm4J7eod6bW13e19wY1tdX15TST5DRUlCQz5DOz42OTo7Ozs7Ozs7PT05PTU2NjIxODo5Ozs6QTs/PDw+Nzs8Ozw9PTw9Pz5BQUE+PkFCQUVDQkRAPDY+Q0RFPkJEPztTmZuZmJ6dmqCalpyZn5KdlZ2boJWWlJqYur20sLu8wcTCv8XGura5sqO7vbS3xLuwtbq2ucS4tLy2ur3BvLu/tr/Bv7y/usDLwsfIwL+8vL/FwsfLyMHDwMDJysLAu7uwtLu9wMXGxcW/wMK/y8fCwMjAusK7urO6usG+wMrOysS9tby8ub+5ubW1s7/Avre0s7S4rbeqr7CwsrKvq6+nr7ausrG5rra2uLSzsLGttrS6sa6srranrLKsraSjoaenqLKrqqWkp6elpaCml5ujn6SmraKeo6KanaWiop+foaWenrC0sKSlnp+kqaevp6mgq6CiopqipJ2anqGmp6+psZWCe32Cem1zeHNncF1bXlxZUUVEQ01JQUU9Rzo6NTk7Ojw8Ojs7Oz0/Oj01NDUxMjc4ODs8O0I8Pz46OzY6PTo7Pj0/QD87QUFBPT4/QkBBQkJFPjo1OkFCST9AQkA7TJqdnZ6fnZienZmampySoJWbnp+blZGRlsW+urbDvMbCvr/Ixbe1uLe2ubu0r7e2srWzt7m8u7a7u726w7u3vbe5wLu6uLi1xcHCw7u4s7S6wb2/x8C5wLy+xcS9vrmysK64t7/Dx8PEvb2/v8PDvr/HvLy/tLSutbW8vr/OzcvCt7K4uLi9ubuxtrLIwLu2tLGwt6yzqbCtrbO3r6uuqrG1r7Gvt7O6usC/tre2sru6wLWyrbO3rLC6r7KloqWrrK+5s7KosK+xr6qiqKGkraitrLOun6inpqWmq6Sknqaqo6ayuLOrpZyfp6anrquqpbClpaWbpKOYn6exrLW4sLKOhHl/fHZsdXpwbmlcX2BZU1BBRUhHS0BEQ0g8PTY7OTk8Ozo6Ozo9Pzw9NTU2MTM2OTg8QT5AOz1AOzs5PD04Oj08QD46Oj49Pj09PkBCQkJBRD03NDU9REc9Q0I/PEWUnqCgoJyXmpiYlZmdmZ2fmp2bnJaRj5LDwMK9wrzEvLy7xbu3s7e2tru7s6CWtayvsbS0tLa4ucHAt725uLm2tb+ztLK4sbvBwMO4wLCvtbi4uMK6tLu3u77Au7u8rq+us7K5wcLEw768v7u6uLbBwrW/urWur62wvcC5z8rJw7GvtbS0vbq+ubq7ysO7uravsL2xuK+ys7C3vbaur66wt7CsrLK2vbzEwrq9t7bAv8G3tbC2srGzurGxr6esr6u2v7e1qbqztbmxp6uop7ausrG1uaisrK+qr7CqqKessayytr20saykqKuoqKusq6i2qaaonqadmKOuvLG7wbSmiYF8gnpzdnZ3bnFgX2VdWlVKPD8/RkY9RkNDOTo1Ozk5Pjw8Ojo8Pj4+Pjg4MzE1Nzg5Pj9BPzs6Pz08Oz09OTs8OTs6Nzs+PT1DQT8/QUJEQkE8ODU4PUNGPUREPzw/iZ2en52Xl5WUk5aZnpubmpuYlJ2Uio6Owb7Dwr6+vrm2usCxtbGzt7fCtbOrrbOoqa61r620trnDv7e6t7a2srTAtrK0uLO6wMHCvtjAtLG0sre+ubO1sry5vLa6vrK0tLSwuL7DxsTAvb+5s6+yvLquu7Szpquorbq+uMvCv76sq7Cvs7q3ub67wMXBu7y3sLXEtb+0uLu0u8PCs7a2sbisqaWrsr23v7+7u7exvL28trGvq6uprbOvsLCrsLSpuMC2sqm0tbC3tq2spqu7s660uMKwsbG1sbK1saywsri4ubi+tLGzrqyxramvrqqyuK6trainoZ6ptr+4ur+wlol9gHxxdHd0dnJsXmJgW11PSEE+PUhDRk1DQDc3NTs6OT48PDk4PT47PT86ODMyNTc2OD8/Qj86OD4+PTw5PDk7Ozo8Ozs6PEA+QkI9QEE/QkI/PDs3OjxBRD5CQz8+QYqgm6GdlJiVlZKYmpyWm5WalY2bj4SIhru0vb+7vLm3s7y8rLOytLS2wLXAr7Kzqqqxt62pubO3wL27vLi2uraxwLq3ubi5u8HBw9DStMi0tLC2urW0sqy8ubi1uMG6uLOxrLe8wcfDv7m6ta6lrLOwprCtqJ6gn6WttrXCt7a0pairqLC2s7K6tbu7u7W4trC1xLK+vL+8ubrFybq9vraxp6SeoamxrrW5trKxq7S3trGopp6gmaWmpKynq6y2qa+6sa2kpq2lq7GrrKmtuLawsrjBtrGxtbGvu7ayt7W1sry1urKwsbKutLKqrq2nuLWyta2uqqiosrq9wLa0qY6Ce393b3tvdXJuY1xmWFxdUk5NQT5JQkBKSUA2NjU7Nzg+Ojs4Nz4+PDs/OjkzMjc1NzU8PD48PDg+Pjw8OTk5Ozs7Pjs7OTw+P0E9PEJAPz9CQD47Njc6QERBQ0E/QUKJoJ2loJSWmJiVnqCcl5uYmZGMmYmDhoS1r7S7u7S1sLG2uq6wtLOvtbq1urC1s7KttrqurLyyuLm3u7+9ub7AtL+7vLq4vsK8wsnVyZfOxLSytLaytK+tu7q4trnAw7aurqqytry9ubaysa2tn6Snp52jpp2WmZman6muuayrq5+lqKSrrq6nr6yvsbGtsa6usLmwtLy+uLm4x8W8vLu4qaKcmJufp6assq6zqaapqq6popqXl5GcmpijnqKir6ekrKaompqemqGnp6anqa+2squ0trCqsK+xqbm2sbWxrqy3s7avrquuq7S1ra+rq7GtsbKoraurs7W3ur2wq6GLeoJ5cnZzbXVpa11balRdXE9NSERGTEJGTUY4NjY1OjU6Pjg7OTc8PTo7PTo5MjM2Nzc3Pjs9Pjo6Pz48PDw6Ojs5Oz47PTk8Pj1CPDtAP0A/QT8+OjU1OkBFQkRBQEJBiJ+ipqGYm56dmqWpmJudmpmUjJmHhoeGrq2uuLmxsqiur7iyq7CwqrK1ubm+tbK4tLm6tbm7tbWztbu8wLu+wLS/ubm6sbvFvMHLzcKOp8m5tLSzsLGtsLm4try4u7+ysrKusa65r6qrrayjqKGdnZ6XmKGVkpWXkJifqK6ko6Sgoqeio6mpoaanpaqtp6ynqKesq6yyu7SztLm6trK2ramgmpaWm52fq6yrr6Ojo6GpoJuTjo+Qk5KSmZaanaSloJ+ep5iVkpSYnqSjoaWqrK2iqaqppKmtrqW0sa6xraqprq+wraWmqqSos66trKmmpqmrpqqnq7Ksr7Oxq6mWgX+Bd3J4aHRzbmRUYGNXXFFOTEhASFFETUM9ODg3NTo3PD46Ozw4OTw7Ozw7ODI0ODk3ODs7PDs4PD0+Oz08Ojk8Ojs9PTw7OkA9PDw7QD5CQEE/Pjk1ODs8RkFDRD9BQYijpqKjnqCfp6Coqpufm5yZmI6Xi42PjKqpqLGvsK2lp6ayr6mmq6CvsLu1vby4wMG+vLy8ua6sr7Kyurq3t7i4u7SvtKywr6ScsLa3jYm1urKts7CvrK62trK0ta+qpJ6bnJyeqKieoKipn6GnlpuXl4+dk4+Qlo6Xm6SooKCioqKlpZ2jo6CepaCkrKSmqKSio6OrrLOuqa6urqeqraisoZyamJmYm6moqquepaObo5yVkIyPj5CTkJeVlpifnp6amaaXk4+Slp2ioKWjpqSnoKKko6Ghq6uksq2qrKyno6yuraufoaKkpK+srKmmo6KqpKqqpKmrpqmsq6agiHiDfHZ/eWJ3bG5cUWhUUE5HT01MQk9RQD47PjM5OjU7OT07Ojk9OTk8Ozw8OzkzNjk5Njo7Pz06ODs6Pjw6PDs5Oz07PDw9PjxAPT88ODtAQEE/Pz45NDk8N0FDQkQ9QEOOqqSjoqGinaulpqimoZ6dmZ2PmJWTkJWnpKGmqKmlpKChp6uhnKKbp6u1sry9wMLCwL7AuLSnpayqqLWysa+9yrKmqK2Vi412cH+En4yFobe0q7K0rqqrr7Cys66lnpKYlI+YoJ+ioJykpZ+eqJSblpeMl5GNkJeTmJ2iqp+fn6Cjpaicn6ChnKKfo6innKehoKSfrKisrKCpq6agpKimrKOdnp2Zl5qrpqmxo6WonqCclZOQj5GQmJCWlZiWn5ibmZujmZeUlpqdoJ2nqKWgo6Kho56doKmqpa6upqipoaKqrqqnoaCio6msq6eppqShqaKlqaalpKKmpKijkn18gHV1fW1re2RoVVFjTUlIR05STkpORztFQD0yPzc1OTs+Ozk5Ozg6PDs7Ozk5NDg7ODc7Oz48Ojk8Oj07Ozw9OTw8PD49PUE+QEJAPTc6P0FCQEA/ODU1PDpAQ0BEPkFGlq6koqWeo6KpqKipqqWmnp2imJiZmZWbop6bnqOioKOgoZqgmJiXlqGorK62t7q5ure3u66ooKGpoaCtq6qlvdSrop2cgGyBdGFjZXKDipu3ta+vs7Wqp62so5yZlI6RlpeZmZygoqKcnaWemqSXl5eWkJKRkZOal5ugpKqeoaGepqeqop+gp5+dn6SnqZ6jpp+qnaqtqq6nqLClo6Smp6ymoaShm5ier6iusqulqqqgmpiYmJWTlpqTlZWZlpuXl5ignpycl5uhmp6ao6eln6GioqOdm6Gmp6aoraOppZ6kp6mkpaWhpaSsrKmmq6eioKSjpKenoaCgpaKmoIl7gH12eHxkeHlgYlJVX0hJSUtTVElSUEw5P0I2Nz02NTs6PDw5Ozs4Ojw9Ojs4NjU3OjY5Pj0+PDk5PTk9PTw+PTs7PDo+PTw/Pz9APT03Oj5AQEA/Pzg2NT08PkFCRkBAR6CupKaroaOqrK6tp6ypqKCipp6bm56aoJyalZmfn5uen56WlJOXk5OcnqSorq2sq6uvqq+pnpeepZ2epaakn8DPqZJ8d4Fea5F1b2VfbpCgvrSxsbC4raehnJ2alJeampCOkZWRjI6OlJminJejmZqXmJmUmZiWnZufpaapoKajnqeurqumorGjmqSmpqqioaqiqaSosquxsqu5qKarp6urqaysp6Cgo7GusrC0qbGvopmcnZ6hmZubmpiZm5SWm5aYnKWhoJqjoZqdmZ+kop6gn6KmnZulpqWkpaijp6OepqOinqaloqWlqKykpq2noJ2dn56gpaGenqWgppmBe4F8dXZzaIJsZVtTWllNUUpOTlVMUkxBNz5CNjg9NzY6PDw9Ojw5ODo7PDo7OTc2Oj01OTw7QD03ODs3PTs9PT06Ozw4Pj09QD5BPj4+ODg8P0BAPT43NTg9Pj1BQEZAQUihqqCrq6GkqquwramtqaelpaWkoKGfnqWXl5SYmZ6YnJ2blo+VmZKSnJihnaqip6Cep6Gln5ySnKKbn6Gjn57Cx5l4Y2GKXFeCi5CIbFKJqcOzra2ssKegn6Kgl5GUm6CcmZeSk5+coaSbnpuWn5qfl5uinqWhnqSfpKitraisqKSstLe2sKe0rKKtraOvpaSmoamorrWzsr23vrCssa6tqaq0sbCoq6iytbezuKyxtKSgnaWfrKGhoqCgmpiWlqCbm5ikoaCepKGfnpqcpaCfnZyhqJ+fp6meoaOkoKagnqehn5ymo5+ipaOooKmrpZ+dnZudmqainpyjnqeQgYJ/fHh1aXd1XWxaUmBIUVVIRlVWSkJMRz1LSDhFPDY3Oz49PDo8OTg6Ojs6PDk2Njo8Nzs+PT8+OTc9OT47PEA8OkA6OkA/O0A+QUA9PDk3Oj5APzo+NzU4PT0/QUBEQEJGnKueqamipamprqimqqWmp6aoqqGlpKOmkpOVmJacmpqcmpWTmZuNk56ZqJ2un6eenKGdnpqakpmenKGioJ+nybmIYVp2l1pYYW2Qj35OdLTGs6eqrKqln5+ZkpKTmJiWlpWMiIuOlZ2dnZ2elp6apqCgqKWxqqeuo6uttrC0srGutri9wLqttbSwt7CutKmmpKWsqbmztbvDvMPBtrq2q6+xube8r7OwtcG8t72zs7WirKKpqLKpq6inqJqZnpqqp5+ZpqCfn6eopaSenaqhop6bn6igpKetmZ+jnp6nnqCmnpycoqGbo6KhnZympaWkn6KZnJukn6CboJyjiYWEfnZxbWl2bWhtXFhbQlZNSkdNR0JGTTw+TD00PDk2Oj0/PDs6Ojg4PDk6Ozs8NTQ6PDg5Pj4/Pjg4Pzk8Oz0/Oz1BPTo/PjxAPj8+Pz08Njs/QT07Pzg1ODw8QERCREFCQ5WqoKapo6mqqKmjoamgpqinrK6lqaWpqpSSl5mUmpqanJiYmZyamJqqoLGit6Swpp+enZ2XmJWZnpuco5+drtGqc1lkjIlYW29pt612WlmgurOurqmrpqCenqGinZ+dmpyclJOVlJ6emJSFnZqhm6ukq7KwubKysbKxur28vLm2uMO+v8K/trq6wMS5vbusr6exrbHCtrjCxsDIysDKv7C5ub25wr64s7vGw7zDvLezqbOtqrO0r7Ouqq6jnauntrGsoq+moaOvsa2wpKSvo6GgmqGnoaSqqpmdoJmao6CmqKGcnqKemaSenpiYo6OhpZ6mmZuipJ6fm5ubnIeFgXt0cWtrdXJwaFdbUUVUSERJT0g+RUE0RUg5NTs9Njs8Pjw8Ojo4OTw4OTs4Ojo4Ozw3Oz49Pj02OEA5Ozs9QDw9QDk3PD07Pj0+PUI+Pjc6QUA+PD45NTg9Oz1DQEFDQkGRqqGlqqelqqimn6KnnKasp7Gyq62jqayVkpWalJecoqGbnqCinJ+psqu7sr+rr6ylnqChnZyYm5+gm6CfnazOnmBfiId3eIWHdZ6NcnJzlLCup6SkoqCepaulnpeclJGZnZiUjIqGiIZ5bYigpKKrrLS8tsO+vrO7wcPCxcC/wsbGxcPIwsDFyM3QyMvDsre1vrK+xbu+zM3FzMzM0se+v8DDvsfGwrfDycnCwMW+ubS5urS7t7C1sqq6sa67t766uqq3rauquLq0vK6uuaOmo56mpaKjqaaZm5+Ymp2nqqegoaGkmJSjlpSZkZydn6Sep5+en6KdmJmUmJSIhH16cWtkaG94amVaW0ZLTEVEU0xEQkU3Oj87NTQ5OTc5Pj87PDs7OD48Njo9OTw9OTw9Ojs9Pj4+NztBOj45PT45PT44Nzs6Ojs/Pj1CPj83OkFAPTw9ODY2PDo8QT9BQUE+kqugp66ooqulpKKipaGlqquwsq2upKmmlJWWmpaUm6SmnaGqp6KrrLy8v8PBs7K4p6Ghq6qinZ6hop6cm56tyZhWb5+ZeZKcf2t6eo2msqqgmp2cn56al5iXkoyPl5eTjo2Qi4KDgndzcW5wj6atrrS5xbvNx8u/wszOzczHydHMzczHycXGzNDS1c7Tyb3Av8O7xsXIxdLTzNPQ09PMysLFxsfKx86/yNHMx8XGxMG7w8C+vr61vbOtv7/CwsbEx8SuvriyuLzEwcG6vLy1rqenraigoqmlmpagmpmdqKupo6SknpePm4yQmYmVmJugn6OdnZeempOTi5WPhYB5dHNlYmdyb2ZeWllDTkxDRVBJRENANTU1ODpCPTY4OkE+Ozs+PDk+PTc6PTk6PDg8PDw7Pz8+PD0+Qzw7OkA9Ojs6Ojg4ODk7QT88QD8+ODtBQTs7Pjc4Njo8PkI+Q0FAPpOvn6ivpqiro6KloKampKuoq62qrqKqo5Kcl5ebmJuirJ2frqalsarFxszOzb+wwailqKytqqGdo5+cnZqmt8yRVHmgpHp7bmZvkamxrKSfnaCbmJeUk5SWkZCPjIeEg4iHg4CBgYB5cnJvbHmktrq5vsvB09LTyM3O0dPR0tHQ0dHNzs7Qxc7U1djS183Gx8nMw8XKz8rS19HX0tTW09PIzMfNzcnSzM7TzMXHycrBxcvGyMjFvsKys8jEy8rKzsXKv76/vcHHxMzMyMm/w7+tr7OonqKqo5qTnpyYnqaprKSlppaXipWFkZSHkpKSmZualpiQm5WQjIaRi4B6cnV2Z2NndmlkVldRRE1GQElRQj1CPDoyMkA8RDw3OTxCPTs9Pzs7Pj05Oj48Oz44Ojk5Oj86Pj1APkA8Pjs+Ozk9PTw5Njo6Pj08PEA/Pjk6QEE6OT44Ojo6Oz4+PEE/QT6QrKKiqaanqKSfop2qqKOso6OnpqyiqZ+To5iWn56dpK6bn7CrqKyxyc3U18/Gu8esrbS4rK6jnqSjn6CkqsPOilh6hoRuaHGQrq+lnZ2doaWhnpqVlJaUin13cGtlYmhxb3F7hYqAdnBucXRwhbPCvsXR0NfW1tLWzdTW19TT0dPU1NLP0cPQ09bY1dbSy8nO0cvGzdHJ0tXW2dXX09bYztLKz9HMztDM0s+/x8bKw8zMy87PxcbHtsDKv9HMy8/Fyce/w8LIzszP0M/NysjOuLe7qJ+lq6eemJ6jnp2qpa2pqKiSlYiQhIyRho2MiJOVmZCWjJiSj4aHjIR8eHN2cGNgZXJiXVJcSUpHQUVIST47QDg9NDU4NTs4Njo8QD07Pjw7OUA7OTo8Ozs8Nz09Ozo+Oz08Pjw/Ojo8Ozs5Oz89OTU7PD48PD0/Pz46O0BCOzk/OTg7PT0+PzxBQEQ8hqugnKegp6Oim6CbqaSlqaCfoaGmn6ifmKSimqmmoqarmqOwsamotdDU19rSx8bLtLXCxbG2qKKlpqGiq7XPz49ke31vbpStrZyVmKCcm6Gin5ydmpaKd2ljYF9fX19eX2BeYmx1c3Fwb2xycXWSxMfG1NXW19fT1s/V1NrU1M7P1dTU0dHM0M7T19bT1dDP0tPRydPRx9DY19jR2NLX2dXWzM/Pyc3Ry87Pv8XCx8XOzdHQ0cjLzMDKy8XTzsvOyMTJxsbIzMrT09HVz9LM0sG5xbGlqLWup5qorKWdsqiws6ysk4+TjoiKj4OPi4SQjpmNk4+Zj4+ChYx8enFzdG1hY2ltX1ZQX0pKQ0ZDUU0/PD41NDo9NTI4NTU8PEA8Ozw6OTpAOjg7Oj46PTg+Ojo8QD08OTs9Pzk6Pz07PTw9PTo2PD0/QD08PT0+OjxAQjs5PDc0Oj48Pz89RkFEPYKknKClnaWlo5mcnaSeo6OfnZ+doJqnnpyhqZ+vraqqq52mrrioq7fX1NXZ2dHO0MC8zMm3v6+nq6mjpLG00ceMb3ZxhKmsoZiWmJqbnaGdmpyek31xZWNiX19hYF9hYF9gYF9gZm1wcG5rb3J3d5vMwNLV09jY1tnR0tLXz9POy9LN1dTSys/M09bS0dbNz9XV0cbR1MrQ1NXWztLQ2NjY18vIzcPIzszKy7/Jv8fIzc7Py9DNzsvOzsfLz9DKzsrCycbJzMrL0dLM09HRz9DKvci5sK67uLWqtrCtqLits7+7sZqPn5SRjo2IjpCFkY2ZjJGRlY6RgIWIenZvcG9rYWRucGFXXFpJRkZETVdFO0A8MzM8PTg3ODU1Oz5APTk8PDg8Pjk8QDtAOj04Pjk4Oj88PTg7PkI6Oj08OkE9PTw6Nj08P0A9PDs9Pjg7QEE9Ojw4ODs+PD4+OkVCRT6Bn5mlp6Cfo6eam5+cl56eoZqdmpyappufpKefuLa1taylra6+tLDA2NLX2tzWz83LxNPQwsGxqq2uq6WyscShbWxukKGclZOXnJ6fn52UlpiUiWteXl5hZGJgYGBhYGBhXl9fXl1ibXJvb3N0dnZ5pL7L1dHW1NPY1s7O1MvNzsXOytLSz8bOzc3UzM7TzcrX1dDM0dTLzNDR08rO0dXS1dXKv8rBxczCyMnCzMPFyMrKzsrNzNDN08vFyM/MyMfKxMbAxcrLzc/RxtDOzc3Mz8XHwLe5vcPDvcO5s7K+sbvDxLWqmKWimZaRlZWSi5SNmpGUlI+PlIKJhXhwcWttZ2BgcWhZWGhWTEZMSVBQQjtEPjs2Nzo4OTo1Nz09QTs6PD05PD05PT06Pjo8ODs9OTtAPD47Pj5BPDk9Pj1CPTs3NzU/PDw/Ozw7PDw4O0FAPDo8OTs7Ozw9QTpFQUU+hJ6bqK2epKSqnJ6fmJKXm5+am56ZmaKVoamppcXDwb+7tbKxx8K4y9XV2drb2MzNz8jW1cXDt7C1qaKtrLi8oW9tjpqNjJeVkJSSkZaWlpCMfGViYmJgXV5hY2JgX2BgYWFgX11bXWdycXFyc3FtcnmkxtPPy9DP1NXJxcnJxsa/w8bPzsfFx83K0sjLzs3G0dLPzszUysfLzs/Hx8/Sy9DPxbrEvsbJvcLHyc7EwcfAx83Hw8vKy8/Hw8TQyMbBxcfEvsDHy8vLzsLKy8jHzNDExce7x8PIyMLPwb28v7DByce5vaqwsqelnaKcmJCbkKOZl5mRlZiJj4J3bnRka2BeZnFhW1dgR0hIR0lNVEc/Sj02NDM1NT08NDg9PT06Oz08OTo7OT89OTw7PDg6PDo6QD1APD09Pjw6Qz48Pz04ODk6QD4/Pjw7Ozs7ODo+Pzw7Ojc5PD49Oz49RkFDPYOgm6qupa6qq5qdoJeUjpedmpmgmpqcm6WysazJzcrIxL69us3NxtDV1dna29jQys/Q0tTJxLi8vK6ltqq+uqF3iZaOjZaPhoOEhIJ+hYV/dGBcXl5eYF5gY2RjX11dXl9gYF9bWlxha3Jyb29rbG9vfbjRyMnKz8vNxLrAw7u7urq+ycbCw8DDx8rJyMrIwcXMxsjLzcnEwsvJwcLL0MTLyL+5wbvFx72/xs/Lw7/Du8nGyLvIxsTKv73Cy8bFxL7FvLy/w8TLxcS8wMnCxcfSxMDIv8rJxsfG0MPDxsOvxMvHw8q3v7y6tKmspKWYn5iso6GlmqOgm5R7dnN0ZmlaYW5tWltYUkRMRkJHRExERlNANTQzMzQ/PDM6PDw7OTw8PDg7PTtBPTo8Ojs3Oz05Oz07PTs6OD4+PEI+Oz88OTk7Pz07QD48Ozk5OTk6Oz06PDo2OTw+PDs+O0NCRD5/pZypsqm0rrCdnp6YnImUm5man6Kfmp2ov7i8y8/RzMfCw8fNzs7M1c/V2djZ0MzTzs7QysO2xL+0srqvvraIfZWMk5eGeoCFhoB2eHVycV9aW11gYGJkZGRlZGBcXF1dX15gW1laXGJvcm9raWxwb3OPxrzJxczAxsKwtrqysrOyscK8vLy6uMDBwcW+vbm9v7nEysXGwr3GwLi7xMm/wsm7t7u6xcO+vMHNw8a+vrXBvcO6vMa7wrmzvMXEwsK2v7W1vb+6y8O8tbrIur+9y8PBxcLFyMbIxtDGwszHssfJw87NwcXDwL2yt7Cyp6ioubClrbCrrayUeXZ3amRnYGhvY1ZeWUpGSkZISkFFQkVJQDk6NjQ4ODUzOzo7PDk8PDs5Ozk6QD46Ojw6Nzo7Nzo7Oz88OjxAPUA/PT8/Oz07O0A8Pj4+Ojk5ODk3ODo8PDw7OTo8Pjs7PjpAQEU+fqygrLWqt7SyoZ6fl5qNlJaan52mop2et8bDxMjO0svKysfNzs/SydDG1dTW187M0MbLx8nEvMi/rrC2tLevgoyNiouFeICGhoB+hHx0dWRcXF1eYGBiY2FiZWViXV1bXF5cXl1aW11daHNxbWdnbnByeZ29zMDDusG4rrCwp6qtrKe4tbe0srO0urW+sbewta+yu8K8wcS8v7q1s7q+wLjHubS7tsDCvLi9xsHDu7Wusra6vrTEt7u1q7i9vb+9sLq2r7a6ssW8tq67v7S2tMW9vsLFwMPFxsjLxcDGxrvIy7/PysfDxsLDtsO9vba5vse/rLW6tbe2jnh0eGZnZWJrbl5WXmBGS0hISkZCREFFRT88OjU2NTYzMzs6Oz06Ozs6Oz44PEE9PDo7ODc5OTk7PDo+Ozk+Pz1APz5CQD1AOjo+Oz89PTk6Ojo4NTY7PT48PDo7OT49OT86PEBAPIi3pauzsby8sa2foJmUlJiXnqujr6qnpMbLzsjGyc7M0MzOyMrJy8nKxM/N0s/PxsnEycTCvrvMuq6yt7Syq4yQhomJe3h+hoZ3eIJ9dGheXV1dX2BfYGRhXmRlY19fXFteXF1eWltbXV9scG5oZmpubnJ8pMe/uLi1sKusp56iqqeeq62zramrqbSttrCyqa6mrLK8urbDubq6sau1ubu0wrqwv7G9vLu2vMe5wratqqiwsb+1t7yvsKeys7S7vKuttaWutq66sbCquLCtu667uLvAv725wr/Hw8XBvMbByMu4xcfFv8bDw7nExsK7xsnMy7O5wry6sohydnZraWFibGhZWFdbQUxLTUlFQUM/RkE6OTo5OTU4NTQ6Ojk7PD07Ojs+ODtAPD05Ojc5Pjk7PDo4Ozs6Pj45QT0/QD87Pjo7PDo9PDw4OTg5NzY4PDw9Ozw6Ojs+PTs/Ozs+QDyKwKuouLe5w62zqZ2ZlJaZoZymsLWxt6bGztLLw8bCxdDHzsLExsDFxcPDysLJy8HCv8W+t7m5x7OvtLavraaRiY+RfHh+ioV6e4SBd29eXVxdXV9gXl9kY2JjY2JgX11bW1paXVpaWlpcZG5vaGZnaWtucoGtubC1rqalp6eaoKSgmpylq66jp6KrqqyqsKSmn6qttbaxvbmvt6+orre0tLy4tLyvuLm0sbzBscCupaiiq7Gys6e8qquoq6yttLOlqK2hpK6psqWnqK2lqLessLK3urq7sbu9vr7Ev7XBwMfIt7/AxLfEwr+7v8TCvsTIzMq/vsPAwKmGcnRyamldYW9kV1ZYUEhZUlNLRkZFPj5AOjc4OTc3NjQzNzo5OTo8Ozs8PDc7PTs7Ozw4OT44PTs8Njo9Oz89N0E+P0A/Ojw8Oj05Ojs6Nzc3ODg3OTw7PDs5Ozo8OTc5Pjw+P0E7jMKvrry3ucSwtrCbmZWcmKqpsLGztb2vxdHQzcTIurrMwsy/vMq3vsS/u8u4wsTDt7rAurWzucK1sbKzp6mTg4mNgXx+gH54dH98c3dmX11cXV5fYF5fY2NhYmBgX11dXFpYWltbWVhaXF9ma2ZlZ2Voa29yhaqlrKagnKGllJ2km5iSoaOqo6KfpaWnpayfnZukpqyyr7a3p7Csp6q0qrS6sba1rba5sa+6ubG3pJ+kn6axp6uouaqkp6iop7KtoKemn5ukpayen6ekn6Cxra2ssrSytLC1vLa7wcGyur7DwbK5ucKzwL2/tbi7vb68wsfEwsO/v8Sgg3dwa2FmX2tvYFRZXkhOZ09UR0VKRjw9Pz06Ozs4MjU1MzY5OTk7OTo6PDo3PD88PDs8ODg8OTw6Ozc4Ojo8OTg+Oj89OTg8Ojs9Ojc2NzY3ODg2NjY7Ojo7OTo7PDg1OTw6Pj5AO43ItbW9uLrAur21oJ6UnaGmurars7O7s8TQycvDx7m4ycLNwLnLuLzGubXGubXAw7C6wbeyq7S7tqqsrqWbhIeHgX16dXRvbWtqanFpXmBdXFxcXmBfYWNiYGBgYF1cW1xcWFlYWFhWWFteX2RjYmVnZ2dqbW+Inamgl5WaoZabopiWjZ6hoqabn5+jpaGnnpuim5+qsK2xtaKpqqmrq6S0ua23sKyyta6yta6wqp+dnqOisqSmqbitoqamn6isqpmfoJ6ZnZ+lmpqjnJudr6mrp6qrrK2wsrivuLm7sLa7u7qrs7O5s720trGxtbS/tr3AvcPBuru9l4N6cmtfZV5kZFhUV11JV1xLUEdJSUZBPD8/QDs/PDA0NTM1Ojs5Ozg5OTw8Nz4/Oz07Ozg4PDg5ODw3ODo7Ozo7Pzo9Ozc4PDo9PDc0Nzc2NzU3NDY2Ozc5Ojs6ODo5ODo7OTo8PzuJyba4vru3wcHBtKSkmZqkpsCyr7astLfG0MjIwce8vMXEz7+6yLm5wLm0w7ayvb6wvr+4qKSwtLGhqKmeiIaHgHhzbnBua2JeYmZmXV1eXV1dXF1fYGFiY2NiYV9cW1taWllYWFdXV1hYWFpeYmRkZWZmaGlrco2onZSUlJuYm6GWlpGcoaKonZudpaahpZygoJqYra6trrKgpaKtq6ahtLCxsayor7KnurOmtqGinpujoa2joam1qqKjpp2lpqOWmJ6XmZqdn5qXnZ2cnKyhq6ajpKatq7OzqrSwsqqyubSvqa+ysrO3s66prK6yuLC6trm9v7eysZSFeXVlXmVeW1lWU1pVS1xRTElFSEtJQj0/QUFAQToyNDUyNDk5ODk7OTo9PDY9Pzs8Pjs3Ozs3Nzc+Njo+Ozo4Oj07PD06Ozw6PTs4Nzk3NDY1NTQ2Nzg1Ojo4Ojk5PDg3Ojg5PkA6gci9t72/tr68v7OdpaOYpbHCtba9rbS4ws3Ix8DGt8HAyM+4wsW+tLu7tMC4tLu9sbe6taWhrLOqoKeklHyEhIB5cHJ0cWlmZGhlY1xcW1tdXVxbXmBhXl9fYF5cW1pcWllYVldXVlhYWFhWV2FkZWNkZWRkaGp2opyUlI+Ulpefl5mUmJ+eoZyWoaGoo5+eqZyamqqmr7Crm6Ojt6qgn66otqmmp62wo7ewpLefopuYmKqmoZqsuLCioaScoqCgk5WhlJWWm5iXlpeclZ+pnamjoZ2jqqqwrqi0q6qmrbKwpaqusrGwsK6vpqensq6xtK+8tLq3rqOUgXl1ZF5hVllXU1JUS01eTFBLR0dMTEU8QD48Qjw7NzY1MzQ5ODg5OTo5Pjo4Pj47PTw8Nz49Njc2PTc7PTs5Nzk7Ozw+OTk6Ozo4Njc2NTQ1MzEwNDU2Nzk6ODo5Ojo3Ojs5OT1AOnbAvLS5wrG+uLyunaeno6q7wL3Aua60uMLNycbDxL7GuMnMs8LDwq+9vbe9vre7vLW1t7Gioaqznp6Wm4aAfHhyam1ydHBpaGVkZmJcXFpZWlxcXF1eXVxbXF5cW1xZW1taWFZXV1ZXWFdXV1ZbY2NiYmNiY2RmaoGWk5WLkZSTm5mclpaboJyflaCfpqWkpqeenJ+ln6qvpp+io7aooKGiqLShpaekr6Wwray1nqCdlZSpoaKUrLGxnqKjnZ2Ym5OLoZSRk5eYkpeXmJadppumoaKZo6Wlq6SlsKelo6urraaorq+uq6iqqbOlpquvtLGuvLWxr6+gknp2cmRhXFpdWE5MUkhSYU1XUE9KTU9FQkQ/OT02OTo3NjQ1OTk7OTg4Nzs4OT0+Oz47PDY5Ojc7Njs3Ozs6ODU6Ozo7OzY8Ozg4NDY4NjMzMjEuLzI1NTY7Ojg7Nzg3Njw7Ojs7QTh4u7uxtb2wu7G3rJ6kp623u7zBxbqxubXFysvBxMfHyLfGxbTDwMesuLm/uL+9vrm4srSvoKCqrZaWf5GHf3VuZGJnaWhmaGpnam1gXVxbWlpaWlxdXFtcXl9cWllbWVlZW1dVWFdUVFdWU1RSVWBgX2BhX2BhY2RpgZOTiJCOlJKTnJSVlqOZoJacoKWhraWko6KjoZuqq6WZnqWxqaCgnaWrnqehnqytqaiuraKhopSXo5uckKqosJufop+el5mTip6RjZKTlZCYmJOboaKcpKChlaChpKabo6uloqSqpKuupa2yqaalpqa0pqmorbO1tLm6r6qsnotycG9gW1dWVlJHUU9IWlxPUklUS1NMRUdJQzg7Oz08ODY2Nzo5Ozo5NzY5Nzc6Ozo9PDw2Ozw4PjU5ODo4ODY1OTo8PDk3Pzw5Njc4NDUyMTIxLi4xNDI2Ojg2Ojg2OTg5ODk7OUA5e7W0rbS7sq+rsa2dp6evubmzwMi6tcCvxsnNu8LLzMi2yr6yv8XKrrO6xLi+w7+5ubC0r56jqKeUjn2LhHx1aWlpbGdqbG1ram1lXVxcW1tcWlhaXVtbXmBgXFhYWllYV1hXVFZWVVRVVVJTT1FZXVxdXV5eX19iZG2Oj4SRh5CRjpmTlJKcmqKcm6CnqKqoqqaopaOYpK6klJmlr6mfm5mboJ6vmZuqs5+lpp+jo6GUk5uWlpKoqayanJ+hoJqUkIyZjoyQjJKNlpWQnqGgo5ybopWboKKgmKKoo6Koq6Crr6Sut6WjpKKsraqoq66yt7K9tbOrr5iEc3NoW1hYUlVSRVhMUVtZTVVOUExQUUlOSUI8Pz9BPzw2NTc5OTw8OTg3Ojc5Ojs8PT47Nzs7Oj02Nzo7ODk3Njk4OTo2Oj05OTU3NzU3MTE0MS0rLzQzNDk4ODo6ODo6NzQ4PTg/OX6zrqiztq6pp6+tm6morLe2rLzKu7a/rMzHxrnCz8/HtMW8uLzEyrKuusK5v8G/uLussqmfoqailIp9gXd4b25obW5tcGhnaWdkXVpbW1tbXFtZWltcXF5fX1xYWFlYV1hXVlVUU1VWVVVUU05QUVlaWlpdXFxeX2Bkfo2Bi3+MkIqSjZeRl5mioJufqqmmrqqnr6OnmZ+soJWWpKinnZeQj5qerpaXp6qZn5yUpaGekpCTkpOVp6qkmpmZnZ2WjYyMlIaJjYOQi5KVkaCeoKOXlZ+VmqCinZObpaWnqKigsbCmsbynoKOstKuup7C0sLm1wLGtsauRfXFyYlZUVk5SSUdWUVJSTExYTUpMTlJHTUtBQ0ZEQz5ANzU4ODk7OTo3Ojo3PD06O0A+Ojk7OTo/NzU5Ojk4NzY5NTg3Nzk7ODU1NzY2NjEzMjAtKi4xMDI4Nzc7OTk7ODk0ODs4QDh/s62msbeqpqKwq52qp6mysaS2xrS5urPLxrq7wsvQyrK4ub2/wsWzsrS6r7e3v7i7qqynqqamoZCSf2tnbW5ybnFqcGtkZmdlXlpZWllaWlpbWlpaXFxdXFpYWFhZWVdYV1VVVFJTVVNWVVJOTk5SV1hZWVlZXFxdYWqAen92iY2HkIqXiZSUl5uZnaian6mlpKqdp5igpZuSj56impeWhYSSmqOPk6KclZaVh6KampOLjouQmqOmm5WVl5uQkoeUjoyBi42AkIqSkpKhmp+ilZSYmJWipZmMmKSmqKahn7SyqLK3oZ2it6yqraSysqa1u7Wrq7GjiXhybV1OUVFMT0NNTk5QS0ZOTkpKTk1RSU1KQUdMSEdDPTg1ODg4OTo7Njk6Njg7OTk+PDg6Pjk7Pzg3ODk6ODg2ODU3Njg4OTc0NTc3ODIwMzAxKyktLzEyNzc2Ojk5OTk4NDk4OEE3d7anpLawpKejqaWgqaWks6qissO1tbKzx8a4u8TKzca0rbu+trnBsa+rs5+psb60taejpaymppWKl3ZfYGdzcXZxaW5pZWhoal9YWFhYWFlZWVpaWVtbXFxZWFhXWVlYVVZSU1JQUVRRU1VRTU1LTFNXV1ZYWFlYW11hb3N2cYWIgoiAkYSOipSRk52gj5qboqGjmKSWoZuVjYeYmoxzjYJ9jZeWhZCZkJOOjnuZjpyMgoqAiZifop6Qk5iWhI6Ck35+dImOepCHk5CQnZqZmpCVkJ2OoqOOiZqgoaOjm6K0r6yvrJ+ZpbimprChsK6csLuqqa+qmYJ2cmJVTVJPUE1DU05MUU1CUFFISU5TTUhKSkNKTEZLSzw3NDk4ODg7OzY5Ozc6PDk6Ojs3OT85PkA3OTo8ODk3NjQ0NDU4NzQzMTI1ODUvMDEwMikoLC0xMTc2NDc4OTo6NjU6ODdBN3i3oqO0qKWmqKOmpaamprOnpbTBuK+0sMrFuLrBz8a+s627wq2vxa+qpKmToKm6sqqomaClpKGMh5JsV1dfaGdpZ2huY2ppZ2JcWFdYWFhZWVlZWVlaW1tbWVlZVldXV1NUUE5QTk9PUFNUUU1NSkhOU1NTVFVVV1lbXWlscm1/hXx0Tlhyj4KXho2cl4uTkJ+XnZWUlpSOlol/k4lfO1dve4uUiYCLkoyPhYZzioSWgXmCeoWUnZSDlo6Qj4OGfZJ4cm+FjX6JgZGNj5eZmJOKj4mch56Xh4iWnpqhoJenr6mtqKiel62zoqatmKyrmKe0oqmto5N+cm1fW05TUlZMRFRKUE1MRk5PSUZMUU1LT0pJTVBGSUk8NzU5OTk5OTo3Ojs6Pj44Oj09Njo/OD4/NTg5Ozc5Njc1MzMzNzYwLi0vMzQ0MTEwLy8oKSsrLTM4NTQ3Nzk8Ojc5Ozg2QTl5t6CjraGmpqqgp6mnoqmwqKe0wbmwtbDIw7i0vs/Aua+vtsOorMerpZ+ahJeetaihoJCfnZyYjIOIY1FNUlZaWlddXmJnY19ZV1dXWFhYWVpZWFlYWVpaWllYWFZXV1VTUk5MS0hHYlxNT1JNS0hGSE5RUU1QUlRWWFpgbXBpe4J0UEJBf5WRkX2JlIyEio2ajZWVipKIhZWGeIh/YEpRbniKkYR9hI2JhX9/bn5/lHd1dXeEjZlwUY2Iiod8fniTdmh3hoh+ioiVio2QkZaLhIqIlISajIGEkpuWnpyUpKOoqaWknpuwqqGkpJClqpahqZyipqiJdWxlXltIUVFSTUlVTVNJTEtPSUhHS05MTVRLUVFPRklDPDc2OTo4Ojs7ODo7OD4/OTk+PTg7PDY7OzQ3ODs2Nzc1MzQ0Njk2LzMvLjEyNTIyMS8sJykrKiw0ODMzOTc5Ojk5Ojo6Oj85d7aboqedn6Guoaeopaeor62qtry2uLezwry3qLrJubaoqba3q7O+qKCYkIGMlqybnJKGmZCSjIeAgF9NTE5OT0xNUVdbXFpYWlVVVlZWV1lZWFhZWFhZWVlaWFhWVldVU1BNSkVAQJtrc3NJTUtERERJTk9oWU5RU1RVWm6DdHd+amldVY+JlIl0f4eBfIWMkoGSmYuPe4aPgHV/eHNudXB0jY2BeX2KqoV5emh2e45wcm14gYuMknh6gHuAdnNykndndYSEhIR7lYmIioyKgH+Ei4x/lIN7gI+YlZyVkZ+dqZ6foJ2gqaWfnZiMp6SToJ+Wnp6kgHJnYFxcSlZPUkdLWFJPSk1NUkpKSk1QSExRTFJUTEVIQTw3Nzs5OT49Ojs8OThAPzo6Pj03PT03OTkzNzc5NTY3NTI1MjU3Mi8yLiwvLzIwMC8tKygoKS4xMjcyMTk4Nzk4Nzc1Ojw7N3aumKOhmJyftKmvqaWtrLCxqr20sru4tru1sqC3u7OrnZ6tqqq0sKOck5CWg5CfkpiGfpKEioN+fnhgS0lJSEdGSEhQVFRUV1dTVFVVVVZXV1dYWFhYWFhYWVlXV1VWVVNQS0Y+OTNOPH6eTUhKREA9QURqlH5MT1FRU1ZedYN9eWd3jZeYjo99Z3mBdniAiY98hJiSgXKHj3x2e29rfq18c5CKf3uGkoF9f3RmdnyGbG9oc3yJjIeAbHlxfXBtdY9xaXGAfo5wQ4uEgoOFf3d3eouFfYt6dX6Oko+YipKam6OWmZ2anZ6inZaNiqWbj56XjpaYj3ZubGViWldXVFFKU1VUT1BOUVZLTktOT0pRTkhOT0tFQzw7Nzk7Ojo/PTk8Ojk5Pz87ODw9Nzw5OTk5MjY2ODU2NjMzNjIxMjI0LiwsLS4uLTAtKyonJyouMTM2Mi84NzY5NjY1Mjc5OTV5ppegn5agpq+srquoqbCvsau8uKy7vrmzraibsaetnJCWnaaqpaKZm5GGk3uLko+RfHeGdoB8eHl4YEtGR0ZBQENESUxMTVFSUFFTVVRUVVZXV1dYV1hZWVlZWVlWVlRTUUtENzhmNzA/qGlOSEM9OzpEioV6WkpOUFFUWF1lcHJtiKeqwH51eWJ7eG58eYiQeXyLhW9tjJF4c3hqaoCCcpaRi4F9loBJk5huaHd+gmxpY2x5hZCShmtzbHxucnuGaW1wf3ONiYSGen1+e3ZvdHOFgnmBd3B8joyKlIOWl5iakJOVlpmXnpeMg4mfkYuSjYaQln5taG1ubldVV1RSUVlPUlVVU1hVTU5ITkpNTktDSE5HRT86ODk7OTk6Pjw5PDs6Oj0+Ojg6Ozk/ODY4NzI3NTc1NTQxNDQyLzAyNCorKiotListKigqKCcsLTEyNTAsNTU2NzQ4NUhBODk1d5mRm5manqWtsKKsqqi1r66stL+rvMK/pqKalaWYno6FjJaiopmZkpWNdI97goiOi3l1e3F6dHB0dmFPRUdEQDw+PkFGRkdLS0tNUFJSUlRUVFRWVldXWFlaWVlaV1ZUU1BMRTFAmjMganNDmW87PDk1PICChl9JTU9PUldaUllcYKeIYpppdHplfnBtf3qLiXaBiIZ0bJqRdHN7amudj015hZKJhI5nMXaGc2x+foN0ZmV0foSEhYBmaWx1a3F/fGdxcXtuk42Pe3N9fHFwbnVtgn53eXRpeYmCiImDlpOSkIuNkZSUj5eOgHmIl4iGioaAkId2ampuZ2RXUVpXWVlbTVBVVllZTklIRUpKSEdCQUZEQ0c9OTk4Ozk6OTw6OTs6OjpAPDk6PDk4Pjc4NzcxNTI0NDUzMzY0NTAzMS4qKispLCwrKykoKycpLCwyMjYsKzU3NzU0NzhpTzg7NW6SiJqRmZakqK6esp+muq6rsrDCsbvDx5uWj5WZi42GeoWRmZWOkY2RiHKIg3aJjop9dHVzdXRsdm5lVUZJRD88Ozk6P0BBRERFR0pMT1FRUVFSU1RVVlZYWlpZWFZVVFNQS0U4MC9cYLNHOVhQOzk0NDGWuotITE1PT1FWTEFJUUlir7OgcXx4bX1scoOBhYF6hIaGeXKglXR4gHN1lIc1cZ2onY6hoYSihXZwhnyHfHOMrY2JgGhmYmlucm1wgnVpb1h1cI6akndsf3t9bXFtcIB6c3ZtYnaEf4aAhZCRiouKkouRjIuPg3V4i4+AfoOAfo96cXBva2BbXF1bWVhgX1NOW1pZWExISkVKRz9DQUJHPkNEPTs5Nz07Ojs7OTo5OTs6Pzw4OD06ODs2NjY1MTEyMTM1MzQ3NTUzMS4vLCwrKSopKSoqKikoKikrLzNETTIxNjY2NDM8dlI3PTdikoGSh5aRnqSnnq+VpbWprbGuwbK7wcaXkIyUkIGJfW6CkZKJhIuIj4d2g4VtlomLfnh5enB6cntpbV5KUEc+QDc0NDg7Ozw9PkBCRUlMTExNTlBRUlVVVldYWVhWVVRTUExFPDUqnUtbQC1nSTk0Lz+Sg6muX0dMTU5QTDdDTVJTREqGdoB8fHZ+bXeIiHx9hYN/jH52opl5foaBhZmEm5xhhqqfnYqCkI56d4h+iYiOc4qXj4N7XGRxdHp7d4psZ2pieW+Fj4J6boF3dIR6cHR5d2tuaV13h32HfIiHj4CLk5eDjYWNhn1xhH+EfHV3e32JdW9yc2VnX1taXVNbZl5XUVVZXFZHSkpES0c/RkBEQz5BQT06OTc8Ozs9PDo6OTk7Oz0+Nzk+OTk4Njc1NDI0NDAwNDY0NTY1NC0sKSsoJycnJigoKSkoKCsrKy8wMFVxPDIzMzMxRX5XND05XI14in+UjJKdnZ+mkaCroLGor8CxusW6lo6RlIh6hXZrgIySg36LhI+NeYOBdKKFjH5+goBygoB8a3hrU1dMQEUyMTEyNjc2ODg6PD9CRUdGR0pLTU9QUVNUVVdWVlZUU1BNRkA6Mj0gI5ZjjFs1MzExaT9Hb0lGSUxNT1JMS1RdWVJKaYSIe4l5fHF8j4x6fImGfpeHdqGZiIePkpSljaypSIaur6+LgYCTioKLgYSRqIeAmJiKnHNsfIGGh32OaGdoeH5uhYaChXGEhUdrgHdyeXZobWtfdn2DiH+IhYx6lZ6ciouIkX97dYt2fHdtb3d+f3JycWtbXVxbY2NYZ2VcVVBQV1lQRExLRk5JQ0ZDQ0FAQ0E9OTc4Ojo6Ozs6ODg4Ojo/PjY7Pjc1ODU3NzMzNDQyMzY2NTY3Njg7REZMTU1MQzcrIiUnKykrKywvMDArbnUyMjQyMEyBXDU9PF6EdHx+ioWIkY+Wl5KXoZ2soaa4r7O9s5eNkouYi310cH+Jk399jIOTlX2GfoaliImAg4iGeYiLf3WGeF9jVktCNjAuLzIzMTIzNjY4Oj0/P0JFR0hKTE5RU1RVVFRWVVNRT0dDPzgwLCOHWz4/OTQuXZZwc6NVRklLTU5QV2BZcFpcXmqNk4eVgYSChZGTfoWJkYGalYKhoZeVm5qlrZOau7Gnu8fDqIuMoaWPlImBkHtyg52fkZx+doWFio+HkGlob4OAdIyGhItxhoJ3h4B7doV9bnZ1Z4CUj4aJiIeIh6GropaJjph/e4KJenpvZ2t4fnh9cWpjXVpaXWlcYWZfWk9MTlhSUUlQS0ROR0NLRENBRENBPDo4Nz08Ojw6ODg3Nzg6PT04PD02ODY1NjYyMzQ0NTU3Njg2NzxCQj88ODo+Q1FeZVxHMicmLCwtLS4xKD+MWy4zMTBPg180PztudXBneIN7gIyAgZCPi5qapJyhrKarr7CXkZGEoZSEeHd/jJR9f5KGk5Z/ioCSm46EgYKMi4KKjoSAin9scGpdQ0E0LS0vLy4vMDIyMzQ3Nzk7PT9CREhKT1FSU1JTVFRSUE9IREI8ODcvOUQ+PDw2My5sk5dNUEhJS0tLTlZgY39nZ211nZuPmpOTi42OmoiTj52LoKCSo6qlo6yTqLaiqMHDrseveLqUmnyMoZ6YhJKFgo+hn5OYkoSKhY+YkZZscHWJi4GVjI2Pdo+EcWyFgYqWkoOFiHKJoZaGk4qPj5altambjZWig4eThH5/a2prfH9/gHJgXGNeWWZqXGxrXlhLSE9TUU5NTEZJUERETkZCQ0VHQj45OTc9PDo7Ojk4Nzc2Nzs6Nj06Nzg1NDU2MzQ1NTY2NjY4NTU2MzEwLiosLCkoKS46UGFcQCwoLSsrMCwncog3MjQwT4RiM0A8dW5oWXCDcHWHcXaShn6XlpqUn5+cp6CqlpOYnmdlpJp+hJKSeoCRiZGSfYqFmZKRg4CAi42JhpGHhYiFeHh/Z01SPi8uLiwvLi0vMDAwMjEyNDU3Oz9DRk5QUlRQUVJTUU5QSUVEPjs8OkNGPz48NzUyPD9SNUhISExMTU5SXm+KfHOBfaCdm6imopmhl6KVnJ+onqmrn6isqaq1l6u/q7bIyLfJ0c++m6Bwaaupn4STkoWcoZqamaeRkYiVopqad3p+lJeRoZKWl4GUnnt2lZKrs4mNl6B9lJ6cjpOWmaSiprawnZGZqIiXkI6BiGxzc3x+em9nX1tgXmFmY2BnZ1xSRUtLUE9JSkxGRk1DSExGRkNCR0RAOjg1PDw4OTk5NzU2NTg+NzU9ODQ3NDU3NTQ1MzY5NTg6NjE2ODYzLzAuLSosLy4tJyMqO1hiQigqLDEtKEuXXjA2M1GFZjJBQGlhXlBxdWBufWJ3jn18lI6Oip+Sl56WnKqYnqpCRH2HiYeYjXiCjYuOjXuKho+QjoKDgImMioWThYOGiIGAh3dfYlA0NjAtMS8sLjAwLi8uLjAwMTU+QUFNUVJTUFJTVVNOU0xFRUA8Pj1HR0FBQDg2NjI8OTtGSEdJSU1PUVlthpB3lYujp6q1vbilrqysp6i0rLG3srKtu7GzvpyzxKy7ycu4xL+4paOwsqytqqOLlpiFpqagopeCppmNoqqopIeFk6OgoKqgpKmOnLGLlaOnt7uboKOwk6Odo56RpKKrr62ztaKVpauJmoqTipV6e36EfWZfZ1tkYV1jY15mZl9bT0RKSFRPRkhMRktIRUZIQUtGQ0ZGQTo4Nz08ODg6OTc0NjU4PDU0PDc2OjQ0NjQ0NzM5PDM4PDIwMjU1MS8xLi0qKi8sLSooKiYlNVhYLywwLCwwhIE4NzFQhWg1QUNbWFRMaWNYanBYeoV2gZSFiIKbg5KQjZLayJ2Wc1aXiI+InI98hoyPi4p6iIKHkY6DhYCLhYWIkoaChImGh4eHcW5hQEU2NDwyLzExMC0sKy0xLy00P0RBTVVRUlRVVVdVTVtQR0dEPD4+RkhDREA3Ozw1Qzs9RktJR0hST1BXgZOghK6js6qywcjEq7PFtqyzwLO4vra/tMG2u7ukuMaptsnHtr65tKijtK2xsZuZkpqfiKevqqSUdp+kl6GrsbOYlqmtqK61u7K6rK+1orGssbW8t7WutaCnp6Oom6mwrbK6uLinnLepjaWPkpOghnmBgnRYYGNVZWFhYl9gZl9bVEpERUxWUUlKSkRKSEVBQEBLREFNRjw4Njc7PDk3Ojk4NjU1NTcxMTw4ODk1NDY2NDk3Pj0zODkxLjAxMjExMzAsKiwuLCsrKyooJyopRVowMCovK2iSTzYwUodqNkFFV1FKTFtaUWNkV3p1cYKUfYWGk3aGfoCNe7+7o7yCtJSTjZuPhIiPk4mJeYeAjJOMh4WBjn+BiY+Gf4WIhYqHkXp5bl1WQEVOPDY6NDZBQjc2NC8vNkNIQ1FbT1FVV1VcV09fVUlLSkFAP0dLRkVDOz5AN0Q3P0JKSkVHV1RQXo+lraOxtMO2uMHMyra7xL2ztMG3uMK1v7C3dLG0prrFpLDGubGzsbSopLW2qrGgopabopGlsa2lraunpJigrLO6oqiyubW7vsy/xcW9vbPCt7q4v7e6t7mtrbGmsaqtvrC9u8LCrJm7qJWtj5iYqol+gXtpVmFgV2lkaWRWW2NZVlRJSEdMUUdESUpBSEQ+P0JCS0BATEM5OTY2OTo/Njo5OTY2MjQ2LzE5NTk5MzY0NjI3Oz0/NjoxLi81ODo5NjUwKigsLS0tLCwqKCgrKyhFUy8qMDBKj2s1MlCHbTY/RlFMQUxSV1RaVlp3anB/j4SBjoVuenN4iGK4oZqjiZWUlpOUk42Ql5KHh3uHgY2VioCEgYp6fIuHhn2KgoGLhJV9eHp1ZU9cZEdFTDpRZGFbXlNGPjtIUERaZFFRWVhaZ1pUYGFNU09FQT9JSkhFRkFAQz1FNkI+SEdLTVNaVF6Ur7i1urnJwLu9ysy7vcC7t7W8u7e+tbqyxmB1sqWxmp6rvqqlqKuqpKKytaGrp56Vlp6Yn66lp6aln6SToqews6iysry2wb3TycnTxsLFzMLKw8C+vb+7vLe0sLm3t8O6xr7DybCeuqqirI+lqLaJgX1xXmFgXFZhXmdlUlhhVlJWSUVGTUtAPkhEPUtCPUJAPUY9O0hANzk2Mzc5PjQ4OTo1NzA0NS8yNjM4OTM3NDUyNj84QD5HS1JUVFJQT1FSUUpBOS8sLCwqKygoLC0sL1A+KC40OIB9PDJLiHE5PkNLRUBJTVBSTFFdZ21scZCNhZBzbHNyc4jVwLWZoI2VmZqRjpeRlpaOhod9h4ONlot/g3+DeHuLhId7i3mBioKXf3R9emxlcHZZXVxQZWViYGVkXVtYV1xNZG1VUm1uX29fWGdlVVlUSkRBS0tIRkhISEhCSTlEP0hLVFRWXVpck7nAub23xsG7ucrLu7e6tri5s7i1ta62tplkdamerXBeoq2cmKGim6Seq6WUn5+QlI+WmJeon6WfnpqZg6SdrKSqsK23sLy41NDO1s/JzNLMz87Kx8C/wsq9wb3CwMXExsq/yc+0pLuxtbCbrLm9mn54alxfW1hdYFliYlFbYFNRS0NCRUZFPEBGPkJJQkBEPTpFPj1KPzQ3NTM1Oz00Njg5NzcwMjIvMjQxNjk3NzU1NTVEM0VMTT41MTAwMDY6NDc3QElPSjstJioqKC0uLyxATSsvNTRtiUkwSIl0Pz5CREBDREZLT0RSXFlpYG+XkpGUbmxvdHWHs6yhoZ+LmZyZjY2VkZuShYqKf4iHjJCMiXyBg3N7ioOFfIp0goqGlX9ze3lsbXV8aXNlaWxpZmpqaWBmaWhtWm10l62kvIeHZ1tvaF1aWVRISk5QSktRTFRRSExBSkdLUF9fYmdqYpe3x7C5s7u+trHEx7awubGwu6yzsaert6yNtqeenKeaTpuejY6glpGnmKWVipOTiJGJj5GRnZuhmJuVloeemaaarK+or6ezs9PU1NbRy8/T1M7Tz8zGw8rQv8rJy8nSyM3Nw9HSuK/EvMS6pre7xKKAbWJbW1xXX1dZZVlQXFdOUUNCSUVDSTtBRD5BSD8/QTc7RD5AST00NjY1NTs6Njg3NjU0LzEwMTQ2Mjc4ODc1MzY3QzVCOD8tMCwxMzQ5PTk3LC4sMTtGTD0pLCguMDAwN0s/LTQ2VIhXMESHd0M7Qj5FQkFDSk0/VVlTZldzkJCZg2hxb3l5g6CqnqaXjZubmIuNlZGajn2JjIWOioqLkIh8hIJwf4eBhnuHcoOSi49+cXl1bHB4f3J7bnhzbGmAcG1jaW1weWl3fX7Lv8Lfp21jeG9kW2FgSlBSVU5ZXlBdXU5QTlRRVVRcbm53g3KWrristKiwtqutvcGxq7WmpbinrK6hrLSkj7Gum5iYjJGUkYSPm4GNp5GciYOLhIqJhIqDk5WYl5SbkZuYmZmenquspKehrKzO0tXRzczS09PQ1NHOyMPU0cjO0tPT1s3S0cXS1sbBz8jIw6m/uNCdeGxkXGFcVV5RXVpPT1RQTkg+QUdCQ0Y8QUI/RkU+QD86PT09PEpBNDU0NjU8ODg4NjY0NDEyLzAzNTI2NzY4NTMzOz08RT1AMTErLzI0OT81OTAxMDIyLTJFTzMpLzMuMzI9TjI0OEN9XzJBhnREOj09ST5AQ0ZIPFZSTU9bdYeGi3dtd3B9foChnp6hi42Zk5OMjJOQloV5hZCQjouKiJGHf4J7cn6Agod6hXaFk5GJgHB3c2xzfHx3fHOCeHFrgHJyaW9xenlze77Lmn6MsYN2coV3aGFqXUNaWltXZmRYZWtUWF1cYGNdY3h7f4uBmaqkpKKgoainqrG5q6a0o6KtoqOuoqexn4mmm5WTkYqSjoiClIlrlaKNmYSBhn6Rg4OTl62LlY2VmY6FkpCdl6ewoqCgpKSox83Px8HL0NPR1NLO083G1tPN1NjW1tjV19XJ1NrNytjW0cqtxMPMinFtYl9eV1JYUltQSkdKSUpAOzo7RUNEPENEPkhDP0NCOzs5PDlHQzQ2NTQ0PDU2ODc1NDMyNTAvMjU0Njc0NTU0NDw+PUU/QTYyLy0xNjs9MDgxLzI1NC8tLjtSMDE3LzUzMkVEMjg+bmI1PYF0TTk5QEk8QUQ/QTtQTEZLWXCAdX5pc3lygomBnZWelIWLlomOioiOiI+AeIOUmYuNiIiLiX6DeHN7fYSHd4B7h5GXgYRveHBtdX92eH10hnx5bId2dW59doR1eXudtYw8QYrGpX6NfGplV0lDZWNmY2hqZG95W19maGtuaW6AhIiRjJ6foJ6Rl5ifpKSmsqSls6CipZ6hqaCisZyHn5KSk5GLjouGg4+EfpycjI2ChIV6lH6CqpWjjJKKmJKLfZeKmpGrs5iam6ecp73Dxbm2xc3R0NHPy9LLydTP0dXa19fY1NnYzdjbzsna2tLWv8zNtXZ1bWNcWFJVUFlVRkZKSUVFPTo3OkBBQjpHRUBFREJEQTs/Ozs3REM3NTY1NTswNjg5NDQzMzQxMDE0NTU4NzQ0NDQ5QD5EQkM8MzMuNkZUV09RSkFKRj8xKiguQlQyOTI1NC83Szc1PGBiQTxzdlY4N0FIOj9DPjw5UUVDSlRsbm9wYnFxc4aNfJeRnYt+h5KCiYaFioOIfXmFl5eJj4OHhod6hHlxenuEhnZ6ho6NnXqMcH1vcHp/cnuAcYSHgG6OenV3fXyCdX98h4mwdFmqwreNkoFwbmM9XmhycHFwbnh3gmVpb3J1eHJ7i4eOk5KblqCWiIyTm6Cbn6qfoa2copqan6afn6yZjJqMkZOOhX2Ih4OFi46gmZOIg4d+bZl5hJmGiJOMjpWMhnubiJOPrqqUlZeemKautbyorb3Gy8jJy8vPyMPRytTW2NfY19Xb19Pa29bQ2trR1sjVzJR3eWdmWllPUlNdSEJFSUk+QT49ODo9Pzs+SD1AQkFBREE+Pzo4N0RCNzU1NDc5LjU2NjQzNTUzMjMyMzY0NzU1MzQ1N0VCRENFQjU2PEZOU01bbmZjbnNrYFY+LDRMRzg2NTQzM0JGND1XX2hMdXheODs/Rjw8Qjw6OUQ/Q0dSa19tZGJma3aAiHGRkJuAeYCOfoOCgoV/hHx9hJiOh4t+hoeAd4J5bnt7h4J0epKejaF2j3aDdHWBfXSAhG+CkIJvkoR1fIGFenaHfIm4xqXDyriClpyPeHBlTmVjgnqBd4aikIt5eXd7hH98hHZtlJaUlY+YkYOJj5eal5emnJigl5+TkpejnZmrlpGRi46Sg4yFiYiBhpCRnpyZiYWLgYWXe4iJn5eQiY6Ki4J8oYiQi7yhmJOXmZyopqWtnqe1vsC/uMfJzc7FzcrR1tXU2dXX29TX2drb19va2djO28eFeXdlZ2NeUlZWVU1LRE5EOz09PDk6PD45PkE3Pj9APUA+PDk4NjdDQTY0NTU9ODA2NjU1NDc3NDU2MTM4NTQ1NjQ1NTdISD1ESkU3OTI1O0g+Ozo6N0hQXFpSVVhLOVQ+Ozk1MzI3STg9TllNSHh4ZDU9PkM9PEA6Njo+PkBFUV9ZZmFdW2h0enlsiY2Sd3Z6inx+gH+AfYV7foKRioWGeoWIe3V9dW19fYZ+dH+SnpGfg5J8hn14j355i4pvg5uAdJmGfYKKhXx+kXuQqY6Qw6C9jJyknH6KhH2JcoyLf3OmmpyZlIV7j5GJhGlHcaGknYyLkJKFiIuRk5WPnZuTlJGXjYyVn52UoZSSjo6QjH6Qj46LhIiSlpqfn4mMlJGdkIKMf6aZiIWOg4aEgKSGiou4mJ2RlJaip6CdnZ2jrra6tKu/xcrQyMfMz9PS0tjS1dfA19jZ29ja2tnZ19u3d3d2aWljVV5aU09OSERMQj09Pjk5Ozo5OTw9NkA+Pj09OTo7OzM3REA4Mzc4PjcwNjg4MzU3PDM3ODA0OTc2NzU1NTQ2RlA1RE5JODkzOEFLPTszQ0BJPDlEV048TVRITj85NjMzMz5DO1tYPjVZeXBaPDxBPD0+ODU4OT89RFJTUlheVVhmbW1taYGOinFzeIp7e399gHyIe317i4eDfnWEhnlzenRtgX6EfXeGm6GbnpSSgIyHf5iHgJySboiphXqgi3yRj4OJhJx+mpGJjaOin5Ckr6CLkYuGi4GShldyrYufrJyPhJickJCOXIOikYKNn5OVjIeIjJKTjJSVlZCMj4qIlpudj5WWkYuTlIaAi4mSjYqKnZeZo6KGk52VoIqKiI6ckIOIj4CDh4WkhYuQs5ickpSXoaGemZKbnaexuKykvMHHzcfGz8zPzM/Xz9HUrtbV2NrZ2trX1tnZnm57c2VlW1tWUlVXQ0BJRD8/Pjo0OTo7Nzo7OjM8PD89Pjc7OToxOkc9OjI3PUA1MDY3NzI1NT82NTs1NTg1ODo1NzczNUhSN0dPSzk5ND1FSkI+MUZDTEE5ODpHWEA1SFdJNjYyMjM6RUNlWD8mX3lpX3o+Pjk8Ozk4OjxAO0JRS0tTWVBUY2J4bGJ+koNvbXeLeHp/e4F9hnx7doaFgHNwhYJ7dnd2dISDhX1/kqain6ail4qdkJSXioqnl3KKso2Ep5KEmZSFmoyjlqCYk4mbnqKTqbCgkZWQjo6IlYtujbeEmsTIsp2ipZudmJaRspBkpM3IlY6Gh4mQko6Nk5SKhYqKhpaam4+QlJOHlZiEf4+LmYiOkKqXl6SjiJmelpqJj4aXmIqFj42Cf4aPpYiNk6mal5OXmaGYn5mTnJqisrSlo7zBvsfFxcnIycLK08zN1KjS0dbW1tja1NPazoFxfWZhXFxdTklUWUFCR0Q7QT44Mzc7PDo4PTY0Ojo8OjcyPzk5MjlJOj42N0JDMzI6OTYyNjQ+PTQ7PjY5NDk7NTc5NDRLUTxKUUs5QTdCR0lANjRKRUxGPjs4OEVUQTc+XDg2MjE0OjtFYFhBRmF0aExjWj41Ozo6NTs6PTpFTUZIUldTUkJjgkd2gY99fG1+iHh6fnuCgoN/dnaAg3xtbot/enx4eHyEh4p+i6Ozp6Oqs6KXp5+lpJaVrqKDkbiVkbOajaGhjKWbsKOknZiRp5aomayvpJiVlpWQi5iZl6HAjqPJuauco6atmZKbnbKdhYWoopyYhYmJjpWNi5OPiIGGh4mTmJWMi5SThpWYhoSRkJx1kZiylpekoYidmpOQipCKl5uJi5aOh32MmJ6JkJCcmpmTmJiflKCdlJ6boLGuoqS3vrTFx8S9w8O/xs3KydKmzs3T0tHW2NPQ2LpxeHRbX1RfVU9ISk5EQkNFNT46Nzc6Pzw8Nz00MzY2OTc3ND01OzU8TDw+OzxCQTc1PDs0Mjc3P0A2P0A3ODQ5ODc7PDU1T01EUFJMOEA9RUFHQTU6SkVORUQ6NkFAQlM+OURPMzIzNTc1PXZcPFJcdGlaTV1TPD04ODU2Nz06SkZER05bXFlKZmA7SISLenpuhYZ6fIR5gYaBfnB4fH59b3KNen6CfHiGi4mGhJKnu6yosr2vpa2zs6ijobCsipq1naK4pZWtpJeprbinpaOfmqmXqaOvsKqamZyUlZGXoJiau7uuyqFqtrirsJSZn6Osk5e9o16qsoOKio2Uh5B8jo59g4aOj5SViIiTloyQlo2LjZeYk52ZtJeVq52LnJSSjpGSjJmbipKekIuJlZ+hjZSNmJqdkpyYnpShoJScnaWvqKGls7irwsjEtbq9u8XHx8LRoMbJzc3F19bRy9Shb3lnW1lSXVBPRUM+PENBQjg/ODg1P0c9PDY8MzUzNDU0NTRCMzk6Qk06QjtBSEI7OkA8NzQ2PEI5P0BCODc0Ojo2Pjw0N1RLQ1VRSjc8OklBREA0QUpITkJBPzZEQTxKTkQvVD0yNTQ6RUpcWEpaUW1ncHBEaWBLSTY3NTc6PkpAQ0lQZEdiYGJwSj+Lin+Bc4aHfYKJdYOKgn9tfH19f3B3h3eOgod7jY+MhoyZqsLAr73Gu7O0wLy0rauztoyos62tvaubu6Sorbm4q6emoqKkoqmvsrGrnZykmJuYl56ipqWSpLqvqcC8ra2yuaWlqH6IhpytvLCDjIyLkIOOg5GPeoGHkI2NnImIj5eNi5WWlJGal52omrGakaycjpqPko6VkJCWl46RoJGJlJukrJSWj5ScnZOhnZuYoKGUmp6npqSipLCzp8HGw6+wurbFxMK/zabHxMfDvNXRzcXKh3JxYFpYXlpMSkJLQEZHPkE/Qjs6NT5BPT01PDY+MzMzMjQyQTE3QEJOPkdAQ05DQT1DPTs4NkNDNUJJQjo4Nzg7NUI+NzlWS0RXT0Y4PTRLQEM+NEVLSE4+QUE2QkI/QlNFNThQMTQ1Ozw4O0Q+OUxqal07V1JkS2daVU83OUdEP0NGXGVHYGlnWl1ck4yMiHuHjIeDjHWGkYqBb357gX9xfoF7lXqSlJSYkJOVp7PGyb/CzMLDuce8u6+rubuYs7e6ssCupcGkq7C8vauuq6OjnqerrrSwqpygqpyhm5afsLWni6O6u7bBvKypnLKlpKmUhY6pxMOkgouPh4iEhpWUjXqEjZGPkaKMjJSRjomXn5iTmZWYpqCunYyqnI6Wj5KRlZWNkJWRj6GUhpefoLKelJqUn6CYpJ+aoJuglJiepaOmpqSvrqXAxMOuqLe2ycO+ts+yxL/EvLPRycjCtXN3a1tWWmhRTEhDTEtLSkFBPUNEPDVBRDs7Mz04QjMzMjI2MkEwNUlFTj5JQEhSQEg+Q0A7Pj1GQTVBVUA7OTk4PDdFPjg+VkpDV09HOD80TEBCOzVKS0NMP0I/PEJGPUFITDkrRzwzNjc0NjRBPzdPYU9hRS89PjZrbGpgQDpIPj9FQmVZTmVcZlRjapmNl4qMiJOQhol5h5SQgXKAfI1/eIeCgpB6jqGWqJqamLq+x8jJwdLJysLNvcKzrby+qLq/vbvDt6zCqayzvL6qsKqkpaSsrrOttrWgn6+fpaKYo7O9qZuovcGktrewrJOxraytl4eaqaelkYKMk6WViYF2ipF6hY2SkJ6fk4+Ui4+NlKOZlpyUlKOeqp+RpZqMj4+PlZaIfI+VkpKjmpWfoZy1pZCel6WjoqWenaaYnpaXm6SjqaeisqyovMDEr6Wyt8zAua/Es7u+writwsPCwJhreGBXVlpaSktNSkZEREhDQkFETDo0REg5OzQ8N0UuMTIzNTJCMjVTSE48SkJKUUVLQ0RFOkVMQjw3RVY9Oz04OT88ST86RVVJQVdRRzdBOks6Qjc5Sk1CSUBDPjxERzxCQ089MjBIMzY2MTcwPUI6PWpqSks1UVMzU3BwZE47RD1ARj5qSF9YYVpkZFaej52Ol46ekomKf4qgk4R4hX+Vf3+QiIqQgJahma6mpJjCvcfDx8XTzc7Ny7zCt7C5vLS9y7zDwba3vK2zwLq8rq+ooKmotq2uqbK3m56toqehnqu3uKqlsL/Fsb25tKiqtbSur5eWpayooJGOkrLFp5WOfZKVfYiSmZCqmZiTk4+SlZOlnpKdmZSho6KcmJ+Yi4yPj56IWpCWl5KXpZllmKOfs6WWoZasrKqnm56ml5iWmJWgpKiln7arqrq7w7Sls7XLwLiqtqyyuriuqLi6vbiCam1ZVlNUTUVKUk5LP0FIRURISEg5NUZNOz44PUBKLjMyMDI1QzU1T1ZOPExGS1JMT0hHST5JUT86OElTOzs/Nzk+RExCQEhTS0BXUEY6QT9HNkE3O0hNQ0U7Qz00RkU6QkFCRzkvOkEzNjAzPkdEOTQ9dGRNRztFKzpmfGdWOz1AQkZCcEVpSVJlYkxGpZScl6KXqZaNkIOHppOIgoeCnIODlZCQlI+aop+vvq+hxrzFxMbGzs7O0sq+u7axuru7vs+1w724ubeysbWzuLOrppyrrLmqqaevr5ijr6SnpKW1wLCrrLS/w7rAurSoubW5s6+Wpa2urqSLk5WhjXTBmn2XmYSPlpqMsZWbmpWSk5mZpaOUoJuXmqmcnKGgmYqNkJacYEqWnJqVmqWWVZewn6+cnqSUr66spZqgpZSTmZiOnKCnopm0qaqzvLu7qrCyx7+5pqyrrbGxo6GxsrSkb2xkW1lOT0tFT1BRUTtISklHSUNDPjpLVT9BOj1FTTA3NTQ0OkI0NE1XTzxKS09VTlFKUEhISk9CPD5NUjs+PTg6PENSPkRIUklCV05JQEJBRjM+NThKS0NBPUM7NEVBOkE/PkhANSpCNTIsPmNdZzozNXRkZUBSNyYjM31oVzs6QkNAPVFFV1NzYldGSKqXmaCiqK+ZkZiHi6iWjoiThZ+HhJ2Xjp2hm6Oktci1qca6wsPHysnIzM3Gvruzrrm5wcHMtce6wbm1urCvr7O1p6SbqrS1qqmmrayapK6lpKisur+oq7a3vsK/vrm0s8Syub2so6+1rLmmiJuXppt2v5+EmZ2Ok5mai66XoZyblpWbn6GpnqefmZqqmaGnnpiQjZGdg252kqKalZ2inpCusqKqlKiql6qupKSfpaiSkpmciJScop2Wsaepq7q2vbOyrb65t6Cjp6ilp5ybrKmpjGFkYF5RSkxGSE1JVkw9TUVOS0xCQ0Q8UVY9QUFCRE8xOD03Nz9CNzVVWE4/SE5RWVNQUVVLUUpKRUFFTVE/Pz04PTtHUjxFRFFCR1lNS0FIREU6OjM5S0lCPkNCOTlDPjxAPjs7RzctMj4tMYJoTnpcLzBraGA8PUJCODZ6Zlc7Oj0uLVJgTVVIf2VeSEWrlZyhn7uvmZSfjJOrm5GSk4mrjYein4ykrZSjo7bGvrTAusLCx8jFws3Iwb65sq+4tMDCyrXFssG8tLqqqa2tsKOjmKq0u6appquqnamvp6Oqq768qK29tLi+x7y3trjBsr7BtKm1t6u+pY+imJKin7yfiZqgmZeeno+3n6mcpaKbnKGaqKWzoZudppyoqp6ZlY+Um4uXiYykopSdop6hta+lpJOvq5mrqp2dpKOokZWVn4OPnp6blamkoaG0tLq1rai1srOenKKlmpeVmKqhnnZfW19dSkhFRk1RSU1FRkdDU0xKQkVHQVZSREg9QUdRMTtCNzpCRjc5XFlLQUxQVFVTTVdSTlVKREBKSk5POUNANT08TlFDPz9QP0VaTUpBS0RHQDUzPUlHPz1FQTk3QTs8QDw8M0A8Lyc7KkiRQjpTSjAsW29XNzE8Kh1CgGRUNDktMTlnXEZDQ5xwYkdFp5ekn57DrZuXpZiaqZyWm5uPqpaVp6aVrayZoqu2xMK8vrfBwsDHw7/Nxru9ubKwuLO/wsi1v7C8tri2pqSrrK2hoZqqqsWipKmrpp6sr6uiqai/uKetvrG4tse2tbm4wLK/wre1s7SvvqOXo5aUm5SuoJCho6Wjo5+QvaSpnqirnZ2gm6afvaKZo5+iqauhnZaNlZ6TnoePhI2Tn6SgnrWspZuVsaeZrqaemamdn42YlJ6EjaCam5OlpJqYq7G1saulqq2snJigoJKOkJWonpRnYlhgXU5IR0pOS0hFRElAPlFJQTxHSUhbUk9LPUhPVTRCRjk+SEc1Q2FbS0NOUlVXVlFYVFJVSUA4UlFQTTpHQTRDSFFTSUM7Qz5HVktDQE8+SzwwNjtHRj47RkE0NkA5Oj85OzE1RDAtLC9Ndlw0S1o1LE1uVzwtPSkeI3piUTVDS1E6blJGPEt4ZWJWTKKao5yexayhn6yenq6gkqOflqWfpqqsl7axo6qztsTEvb+1v8K7yMK+yse1uLW0sLOzt8HFtr6xuLW4tZ+mrKqsnZ2epaTBpJ+qraCkqa2voqaovbWlsb25trbEsrS4ur+zxMG4uK6ztbWjnaWVkZShrqCZop6oqKujmsKtqZ6srZubnpmmoL6hnaSYq6uspqKZjZqfkp+Jjld/lp+moaC4qqaTmLWjn7Ggn5qulp6OmJOdgY6fl5WOoqOWkKausqupoaKlpZWVnZiLj5GSpJ6JYGNZY2BLSEpKTkVFQUZKPj1KQjk5SktOXVFRST1MVlw5Rkk9RE1JOEhiXExDTFBTWVlWV09aXklBPVdRSUs/SD81SE1YU0hBOkBBRFBIPz5RPks3MDk5RkU7OEc/LjY+Nzg+NzcvMT85MSUxUVVtW0pPMTA9Z1dEMTc9LSt3YFM2U1prV3JHRTY9dWVcS06en6GZnsOopaK0op2yqJOrpaCjn62prJ27sKistrHIxcHCssLDvcbDvMTJvK+wtq2wtK+/xLS5sbC6tKyZqLCpqpqdpaGowaybrLCcqqOusamkqL22p7e7vq+3xK20s8PAs8e0u7estLatqqKmlpWUpKyin5+aqKuwr6+7sqagqaiamZiToqS5oKGkk6+vrKWnn5KhnpWej5CNlZ6aop6ntKamjJizm6Oump2brZCek5WTmX+RoZaPjZ+hk4umrLClpqGcoJ6SkpqThYuRjZyef2BlWmdlSklMSlJCQ0BJRzs7Rz85OU9NVV5SU0o+T15dPUhQQkxMSTlNY1xMRUxSVFlbU1VPXGJIQT9aUUFIQUtCN0ZFTEtNPztCSEROQj07TkBBMy85N0NCOTdGOys2PDQ2PDM1LS80QDErJ1Z0U2VPPzEwNGJbTTIzPjA8dl1eP1tUXmVxQDg7SJZ3ZUE0n6OgnKDDqaSqs6GktKqWs6ynoqSyrK6pu7GtsLW0xsDEw7XAxL3JxLW/yMK0q7Wor7isv8Ozt66st7qlmauyq6qYn6aXrbu0m6ewm62grrSyp6u5s6i6tLiyucCqt7LEvrXGqL+vrbe1qaesoZeXkaaloqKYmKWvuK6ytbagn6ikmpWVk6Sgt6KkpZavsbKnqqain5uam5aXqJ+gmKGer7KipoyXrpikqpeZnqSQmo2Tl5mFlZ6UjI+cnZOLqamqoaegmZ6VjI6Zj4GFlYiUn3hiaFxqak1QTU5UPUNBTkM6Okk/NzdST11eUlZRQVdgXEJKU0hWS0g6VGRcTkZPTltXW1JQUVhdR0FCW1BCRz5OQzlIR0hPUD8/Q0lCTEI8MklBOTQxNzdCPjs3RTcrNjkxNDgwMi0vLjw2LSNCcWdzazIzLzFbYlozMzgwNnBbYkgwNUlwaFZDV0aMeWZDO6SknaKmv6eor7ChqbWrnbqxq6OqtLaxsLm3sLe4uMS9w8e9vMTBxsC4wMXAuqm2pKy7rMDCt7eqrLK7opWtsa2ylqWnkaq5qZ+msJ2roLC0s6qptratvK2zs7m3rLiww7u+v6bDq7C3rqmrq6eemJmroaKhkZehsa+zrLC5mpypoJmWkpemobeppaOisLG0q7OorJ+boKCbnaWdopedo7Owmp+Pk6Wan6ialKKdlJeJk5aSlZack4iQmpmUjqiopp+jm5ebk4aOmIt9jJaFjppqaGxgbG5XUFFaVEFDRFRAOztIQTc6WFBkXlBWV0VZX11NTFJOXktKPlpjXk5IUE9cVVlQS1RXWkk/RFhQREY/TkA9SUdHUVBCPURGQk0/OjFEPzc3NTQ3Pz05NUU0Kzc1LzI1MS4tLiwxPSonKz1ccD0+MS4wZFpkQDE2NDdnWWBGKD84bH1nW1Y7iXtjQz2on52iqr2iq7Cro7G4qqW2tKygrbW9rrO4u7q9trbAwr/IxLnEwsDAuMS9wbevtaert7G7vr+0qa6xt5+Xq66orpemqI6nu5+krLOerKKxsLOsqra0tb6usLG1rLC1ssG7xberva+xuKytqqOxpp6lqp+kmJCZn7Oqs6uqs5qdp5ualY6gpqW0rqehra2usae0rbKqpJyfqKOelaKZm6i1qZeZkZKemZ2fnZCqnZaXhJSWip2ZnJOKjZaXmpempaKgnZaVl5N/j5SFe46SgoyWZWxyZ29xXkZZZlZEQ01YRFo5SEI2Pl1RaFxOWV1HW15dTk1SWGRKSkNcYl9QTE1OWFdYUEpWVldMPUVVSkVEQU1AQUZISFFQQTtGREZLPTg3Qj02ODcxOT48NjVEMCs4MC8wNS8qLC8tKj0sLCUyKyo1SzEvJ19fYFUxNTA9YFZeOClDM1lUXGdLNox6ZkxApJqhpKy2pa2qpq+ut6qvtbuop7G3xbext73BwrW0usW+zMa5wsC6vrnDt8C5srSrqbq2u7m+tKmtsLWYmKesqqybq6uPq76erK6yo6ufsK2zrq62srm4qq6vsqi1r7S8vcqzqra1sbSwr6iis6CbqK2gppaWmpqyoq2gpa+XoaSampKOo6aos6mhprOsqralr7G1r6SZna2nmpifmpmrt6KXk5GOl5yhl5aUq56akn+Sl4ydnJmWkImUkp6ZpaKhoJiWkpOVeYqPhXuMioOKkmpteG11e2FFYGpZSUhaWj17SkZENkFiVGlbTVxhSltdWlJSUmJhTEtFXmBgUUxJUFdWVU9HV1ZVTjpJVklIP0NLP0VESEhRTkE/SEhIRTw3PT46NzU2MDk/ODY2QiwtOCwvMDQsKCwvLSo3NikoOS4kOks1LiJUYFVgLzUoQ19RXC4qQi9KR1BbSDNjWVVLRJmXobGosaqtpqSvrrapt7W6pKy0t8m7tLq6v7+0s7fDwMzIvMO8t72/v7e/vLG9rae6ube2wraqrLG3lJemrquoo7CqlK+7pK2xs6eoo7K0sbKxtbG4s6muq7Knt6+2tMTGtqm2tqywraqppLagoKexoaSUnJmVsZ6nnKCqjqmjnpyWmKampbino7K1rKiyp66xtqylmaCsqJucnpyUqbiclI6OipibopePmKWgnJSCkZWPnZuXlpWIlo+Xmqeco6CSlpGQlXWEkId7hYGEjIttcHd0e35cS2VsXEtOY1w/YntHSThHZ1dmXExeYk1YWVdUV1RpXU9PSGFdX1BKSFFWVVJLSFdVVk04TVpORUBGSz9IQkNLU00/P0xPSEA7Oj47NjswNDE8PTQ1OD8pMDcpMS4yKSksLC0rLTkkMDQyJTlCNy4jQU5IZjI3J0diTFYlLUItPUVMUTwzcmtJQ0OQmaWupa2vq6ilsbO0q7eyt6CrtbnJua7Au8K4s7G1wsPOxcDBvbS9v7+6vryyxKepubC2tr+8rquzspygp7GtpqWvpZ6ytayrsbKtqqm0u6y1s7WttKyqrKitqbmtsrHIwLilurCpra2lqa6wpqWjr6SpnJ6cm6+ao6Oio5GsnqOgoKKqpqa5pKy1tqWrrKitr7auo56jqaqboJqakqSzmY6JjYeQoaCUjJScn5KRg42Skp2amJWTh5eSlZmnm5+ejJKRjZB2fY6FfHx8h4mIcHNxfXx9XFNkbl5OWWZcRkSWW0c7Tm1YYltMYGJOVldWV1RZZ11RUkxjWltUS0dPVFNOR0lWU1xOO1BeSUJESEpBRT8/S1NPPjpOTUM8PD45OjU9KzMyPTYyNDk6KDQ1KS8sMSgpKywtKiY1Ki8mMCkzODoxJiozQmM7NipIZUhKKztIPzNCSFMsPpBrO0dIj5yqq6KqsaSppbO0sbW1srKiq669zLquwLrHsbSttMLC0cXGvsCyvcDCvL+3u8SnrLess7i7wK+rsa2go6etqqiksKSrsqqvrLCvsK6rs7ynt7GyqbOrrKalo626rKqxw7q2rbupqKitqqmzpamko66qqKKfnaStlaWemJ6ZrJ2iqKqiraakrau4srKhqaKgrK+xrJ6gp6ipmaSZmY+gp5iGhI6Ki56fjoqMlZuOjYSGj5SfnJWXlIaWk5OXpJucnIuTkY2Jfn6HhXx3foeFhnNycYh1a19ZYG5jUXNxXEs7hHxGP1d0WGFaTmNbTlZWVVdRXGJfU09OZ1hXV0tHTE5SSEVJVlJdYzxQXUQ8RkhIQkc/PUpQTDo+T0o9OT89Mjo3OyoyNT4xMDQ4NSg1LyosLjMwOyksLCclMjM0JCwyLTg2MCkoMTxdSjAuSmdERjg8QjA1RUtYMUCVWj5MRZWYraiiq7Ocqqqwtq25tq+rpquqvcm7sL23wq+xrLPEw87Pw7+/tMDCw7rAs8jDq663rbK4v76yra2rpKeqsKmnqLGmtK+qsK6tsrG0rLS8pLizrayuqKygo56wt6uqrbu3pbe2pKqnrKyrrqGpp6axsqSnpqKirJeqoZWboKaepKKrpa2jn6exuK6uo6aim6qrrqmdoqWkpJmgmpaPmJyTgoKPiIWcn4uKjouYjY+KgouXo5qRkJqMk5KRk6KZm5mKj4uLfIaBgYN6dICEgX1zdoujh3hqXmBuZldlh2NOP2eTTEVieVdiWVJlVE1WVVZUT1xdYVVLTWhWVldJSkhJT0JHSVNRWW9BTVhAOkpHRkVHPj5FUUg4Q0tFODdDNzI6OjoqMzk/Li80NjMpNCsqLCsuIzQuLSsmKCs3OSomNis8LTIsJjA2V1ouMEpnQUE8PEIrOkpPXjREhj5IRkSXkrClo6uxmKuqrbastrKspqyqqbzAwLi4s7u1prKvxMnL0r/Bu7nAv8K5wbnAxK2xtbGzur+9srCuraurp7aqpq2vqrmwqLGyrrKtt6q3t6e0t6uspKqrnKOes7OoqKS0taC3rqCqqKuprKigq6ypubapqqmqo6qgrZySqqGdoKSipqOqnp2ntK+opqqio5ilp6eqnKOko6CamKCRjo+YjX+HjIeDnZ2GhIqKjY2Pi4KFlKKajYyZkJGRj5KflpiWjIuEf3SHgX5/eHSDf3p3foGInY9vcWdncXhcYXOIa09emVZIbXhVZFZRY09NVVRVUE9YW2JVSFBpVFZTR1BZVUk+SUhPUVB4TE1WPTxLRD9AQTxAQ1VDOUFLPTU7RTEzOzo3KjQ6PSstMzQxKjgqKisqLCkpKC8qJiklMzssJDIpMjAyMSUvMlFiMDI/Zj1OWD5DLD5MVF8vSmk1T0Q7lo6xoaarrpqspa2wtLWvq6awqqm6vrvAsK65rqG3r8nHyNHAvr27vMK9usPAvr+usrKxtby6wbGxsquzqKS0qKWts7O5sKOut7Kwsruruq+qrrasqp6qrJ+joLatqKGfr7OitaqeqKeqo6qhoqytqL2vrK6toqiooKyZkLCimKKgp6iep5uZqrGqo6CtoqGUo6Ojp5iaqaWYmJiejoqHlIh9jYaEhKSWhIGBi4aOjJCDg5OgloiQnJCTkI2RnJSXjoqGhnh0gX98dXh5gHp0c3lof4akdWleZGuBdGeIjH1TWHBeSnhzU2VTUV5NTVJaZk5MVllkWEZTaVJRP0NOUWFROklITFNJcVFMUzs8ST87PD07QEBXPDw/SDczQ0IxNTo5My01OjopLTMxLS01KSgrLSw0MiMyKScsJS47LiYxLjAtMTQlLDBMZzo0OF89YWQ/RjFDUFtbKkhNOVVBNJCPsqGkpqykp6Stp7WzsaulsaiquL7AvK+nuaqmr7DJx8jRw7y/vrm+v7zJu8G4sLC0sbq7t8Cys7usuKyitKenrLK2ubOoqL22rra+sL2nray1rK2cqa+koKWtq6ecnquzpbSom6unqaOpnaSpqKm9rLSvrp2qpKCunJuzo5WknKWln6Sbm6mrpp+bqqKbk5yhpZ6Yl6mpkpialJCKgo+Ffo+DgIiej4V+fYuGkI2PhH+TmpOFkqGMlJGLkZqRlYaJfn9ye3p+fGh4fHp1cHB8Z4R4hIhkYWdicoV6bWd4XV1VQFd6bVRhUFJYS0xOcnVdSFpbZ1lFVWZQRD5KTkRDQTlIR0tTP2phSlE4PUg8PDw+Ojw/VDY6P0M0NUg+Mjs1OTAyNzw1KC41Ly0xMScvPktIMCUaOTAlLCwwOS8sLCs2JzE3Iy0wR2pJMTRYPWZjQUo3R1NgVSo9OURXPiqPlLKZoKCppqWhq6W4s7OmqbGnrbjBvbWvoritqKiwwsnJzMG2vcC1t7+5yLXDtbOytbK8t7m9ta25tr+tobOnq6uwtbi1rJ++vaqzwbS8oa+ztaqrn62wo5ylqKqjnpulsaewoJ+rqaihqZykqKGtu6iusa6gq6Okrp6fraaXn5uho5ygnJqkqqObm6WklpeVn6KWm5emrIyekZGRi4KKgICOgXualI2Ie36LhY6Ni4qDkpiRhpOiiZKSh5CZj5OAiHx5bH52eXhje3txcHByd2iAc2qDZ2VnYG1zjWxhaW9gbz5aeGtVXk9RUUpJTVRZV01dXmxXRFhgT15QSE1ERjs3SEVLTzxyaEtLOUFFOzs9PTs7PUo0OUI8MztHPDQ/MTgtNjg7MigwOS8sNC8uPS0qSz4qHTQ5JicuMzQuMCsvNCYsOiQ0MUJoWTEzUz1lX0RMNktWZE8qOzJOWD0jk5mtmqCYp6Sjn6ikuLCvpK+wqqu4wrqzrZ+4r6uotLrIy8i/t8K+sLS9t8S2w7GuubKzv7S6vbepubi9q6S0qKmqsa66saucvL2lsMG1tqKvt7Wmp6exs6CepKWnoaWZn6yoqZ6gqq+noKaYo6mgsbmfo7GvoayhrKScpqepmpqbn6SVnZ2bnqqnmJygqZOZlJiek5mWoaqRmoiOj4Z9h3+Cjn18oYyNiHiCi4SJi4uFh5Kaj4iVnoiRlYKMl4yRfIV7c3B9cXR0YHl4aW5wcG5ofXFje21pZWNfZYV+X1pza3JLS39oWFpOUExKSFBSUElOXF9uU0RYWlJoT0hLRUY1NkhCTEk1WmVKQDZFQjk6Pj0+OjpDNTk+OjNARjwyQDIzLjo7ODMmMjwwLDg1QiopLUMqLDQ7Tk5AOzczLS4rLTcqKjwlNTM9ZmQyNE0/ZV1GTz1SWmdIKj4wWFY1KJeep5qdlqygoKGkorirsqW0tKqpucS1s62ft62urbC1xsjBt7/CubG0vLa/u76vq72ws76xvMK4qbu6t6eotamoq7Gts7Gom763pq28t7KfsbiwqKWnr7GboaSgpKShl5yvp6Gfo6ivoaChk6Skorewoaaxq5+so6+YnKqlqZ6Xmp6lk5udm56nrJudnaaXlpiUnY6Tl6KoopCIi4+FeoR+hIt6jpaJjYZ4gYeDiIuNhY2TmI2OlpiKj5d+hpeLj3mBenByd29vdF95d2RsbGtpaIJtZXJra2VoWmJzf15abHZqWkh9XVtYT09KSEhSVUYyOl9ebFBEWFZZZUxISkVFMDdGP0tCNklKSDs2Rjk0OT49PDk4QDg7ODo3QEk+ODw0LTM8PDc1KDU+MSw7QTEoKzY8IzhSPSoxMTM+RDUsLSc0Mis7KzEzOWNsODRHQmdbSFRDVF1oRS47MV9ULDKWo6KYlZ2pnqaho6G4qq+hu7mmrL3Es6+uorWvra2vtMTEvbO/urexs7m4uri6rq2/s7S4r7/BuKy9urSmorOrqKqzq66yo53Ctqapt7ern7K7qaalqK+rmaKnnKWmlJihs6aZnqWqqZyhoJSln6S5qKSnraaepaGok5+poqGhmZudoZKbnZego6ycm5qilpOVlpuOk5Ojp6SPiIqOhnmEfIWGfZyNiYqGeICDh4eHkYWVk5KMkJWTjY6Ue4KXjop3fntsdXJtbHNieXVoZ2lnZW6EZ2doZGZoal9mYmlmWmZ7Y2FSc1RbW1NMSUdJT1NAIStqXmpMQ1ZVXmBLSEdFQy46QjxGPDZLUEQ4OkQzNTc9PTg5NT86OzQ+OEBMPT45Myk4Pjw6OSo2QDMuRTQoKyw+MC1OPy4rLTctMTE5NSwmLjUtODA1NzZgdEIzQ0RoW0tXR1VgaEIzNzhiTScynqSkko6lppyenp6kta2oqrq3qKzDwLevrKG1rqeur7fBwL2ywbexr7K2tbi3tayqvLSvsrG9wLeuvLyxpZ+2rKamtamrr6GgxKyqp7G0q6y0up6oqquxpZidqp6opZGZpq6jmJ6kqqGbop2XoJ2ntqavqq6hoZ2doZWgpp+ioJmbmpySmp6Vpp6uo5iXn5aUjpWYjI+YmqegkIeKioh4hXeCgoKch4uCiXt+hIiGhJCElpWPj5CRkJGNk3uDlY2Gcn59Z3lwa2psZ3Vza2JnZGJ0f2JkZWZlaWpjZ29ZXlhdbWRhTWhXW2BWSUdIS0xSWD45YGxpR0JVU1xbSUhGRUEuPD85QTg5UkZANzpCMDM3PTc2OTI6PDk3OjlETT1CPDAqPEA7QTwtNUIzNz0rKiwwQSpKSy4vKiszNzIyKDU3JCs3LjcyNjg1XHlOMj5IaVpMWkpWYmZBOjNBZEclNZykoJGMrqCamKCXpbSyo7K+t6Gxxbu5sLGjtqyrrqm5vr28rcCyr6+utq+zubKnq7mxr66ztru2sLm+rKWetaugobGlq6+fpcShs6Wvsq+3rbWera+srqKZnaeqpZ+Vm6imoJmko6mcmp+clZydrbCmuaetoqGamp6Zn6SapZ2WnpiblJqhkqiWramblJ2ck4yVmY6UlJinp42NiomOe4F0goKKmIWHfImIhISKjIiShZOck5KPkJGWjpB/gI2Ng2+Bf2Z5bmhramdxcmtcaGNhcn9gZGdqbmxmamdkbFxsbXZxYVRiaGNlWklGTE1PWFFQVWFlgVRAVlNZVUZHRkVALzw9Nz82PEZOYTg6PzI0OUAzNzgyOD83PTg+RkpARDkyLT1BPUE9MDVAOUAxLSsuMzw7SzYvLissLTI0OzYjMyopNi41NTQ2NVp8XTE6S2pbTVtLWGRjQEExSWRCJzSTopyPj7Gdm5ShmqmysJ+5wLagtMG7vbmxprawqa6lt7m4ua27r62rq7eqtLmtpbK1sa+psbe2sbO2u6epn7apnZ+qo6qtnarCma+lr7G2taysnrGtr6qim52krKiclZynpJ6aqaOllZqgnZGco6uqqbqfpqSgmJqanqKPa6KVmJxxg5acpIB2kauonpaWoZGJl5mAl4qfj3iFk42DbWl+d4RybIaKhn2EioZvXWRgZ4SXhmuLkJSSdXeLhH+DkH9miIBodmlmWF1pdG5OUGpjZnGCZl5kZm5saV5dXomQhYhoT0tEOEVUZ15KSFBQVVVLSFNgb3RlRVtRVVBGR0ZDPjE7PTY9NjwzZlw1Ojw3NTtENDg2MDpCNz86PkZMQ0IzNDM9QEBAPTI4QEU9MSwsMDg+RzcwMS4qLiovNjY4LCMxJzIxNDoyNzZYgWwxNU9rW05cS1tmYj5HMU9iPCsvjaSah5Wxm52ToJyqraujvcWvqbfCuL28rae2saarpLi0s7Sxua6qp6y0pbC1oqe4trWop6y2s660rrOiqZ+0q56ipZynqJuuvZWop7C0uK2upKiuqqumop+coainnJehpqacnKennZKeoJmQnqiqo7Svo6KjnJaYmJikiaGPkpqHoYiUnqF/pX+nrJ+Uk52TiINyeI2Og4egdYiNaZeJZn5zeaBviIeDfox8f6GgoJl/e4eedIiOdpuKbIiCg21pZWR7bXJiVIZtY21pmHFYaXBuhlddaVtraluIcG15codph4RaXkZOPkZeTUVSVlZRUFJXVGdeTFlLUlJQRUdHPjw0OT05PDc7MDw8Nzk5OjY9RjU4NjA8Qjs8OT1GUUc9LjU8O0A9QD41OUdBODIqLzE8STkvMDEuKi8oLTQ1ODMlJjIxMTU+MTw4WIN0MTVSa1tOXExbZ189SzFVYDcvKI2ml4SdrJ2ZmZ2fq6qoqr/Dr7K5vLfAv6qkt7GqrKazta6vs7arqaWxraW1s5ustba0pqeos7Gtsqiunqqhs6mgpKSaoqSdsLeVpaantr2mrKepqqynpqKgmaCopJmZpqOlmZylqZaTopyUk6OmpqG2pKOgo5iVk5iTnIiukJiUiamLmKOchrGApK6elZuflXmC1Kh/h5TAm8Z4d7Glt5ZkgMCcv3mEhHmPg3yQkJHKcZa8nMV7cranupB7gWyWsauweWhsWLGub2VpvJK8bmh6bXCP2H5Ta2K2sn6AcZR1mqGqkFdPWGFPVk5GVFtYUVBTi1xXW1BAXEVRTkRGSTw8NTc9Ozo5Oi49Ozg3ODs5PkY2Ojc0PkA+Njk/RVJJOi41PjtCPD9BODpKPjUyKjIyQkUvLjMyLisvKS0vMTg2LSAvNDE2QTE9OleDdzExVGtcT1tNXmdcPkwxWlw0MSGOppOBp6qfl52dpa2yqbHCvbK1v7W4v8KrprStramor7Sqr7a0qKimtqWoua+csrK2qqWkp7KvrrGmq56npLKkoqGfl5yhoLGulZ+joLS6oqqooa2upaKdm5qiqqCYm6ihn5ieqKeRnKealJ6ip6OgsKOen6OWlpKYkpmFsGtqio2qfmeFloetZXGfnpWap5ZxrqGkfne6fGuhj3axX2q0W6WAZZyRYGaBemaAaXhqqWW+cmemjHaxanyxeHWSlGNtbaduXISgRWlnh5ZFdZxgfWZ7o6aCWV+Lq2mAknh6aqg4Sq9bV1RtY1pMT1hfXFdWO06IT1dWL0lUU0pDRUY9PzQ2Pzs4OjkwPTg5OTk6PTxEODs6Nj1BQDY8QEhRRzkwNzxBQz5ARDhARz0xMy0zM0UzLi41My8rLyguMC46Ni8nJDIwM0IvPTtVgnYyLVZqXE9ZTF9nWTpNNV5ZMzEbkqKVgqynpZ+jpKqxt620vb6wt8WyuLrDp6mwrK+pqbGvpLG6sKSlr7OjqbmpnrOysKOloKqtsKyvpqifo6KxnKOdmJWYnZ2vqJecop+0s6Grm6GtraCempego6qdmZ6koZyaoaekkJ2jm5ihoKyfpqagmp+hlZWRlpGahrWbtXiFqZm1mXeHs5u3f5SXl6uWfmuBpnqBhYaRlJJ3q2dqsVuse46HlHSIcI6GgICIkJd4g4KLl4yDoI+FsHZ3n3Framx8i0+lWEhjY5l+Y2ilX3lxdVKSh15QqW1jcX2GgGGdL1KibltUa2dgTEtcY1hcWkI+sHhXWEEjTWhGQ0RBQEExOT44ODo4NDs6OTw5OkE6RTo6OzY6Q0I4PT9LTkg6NTpBRkJBQUQ8RkQ7MDIwMTtGLDAuODQwLC4oLzIsPjgzMR8vMi1EMTw8U31uMytYalxPWE1fZlc3SjhhVTUwHJeglIizpqairqmos6yqu7bCsLzCrbi3wqusra+up66zqqKvvKuip7Wto6u2paWys6ijoZ2nqrKosKimnqCgsJagmpaWl5qgr6ObmqSota6hqY+pqKqbnZaYoKapm5+do5+coKOlo5Wbn5ianqOrm6WanJqioJaTkZOTnYTVk5m5cbDCf8aGfNaUnLt8m5enkI2cjKR6jYaigaWCeqx5j51Wr3uJfp9quVq5d4aDfaaCk3yYeqp5jp2Qe7FujoR0kLuFbpVQr6fFilGgemNgqmJzcoZsl4dfU7W0yIWAiXxjpDNCnXVdUGpoZFBAWGZaZGFKSE1rSlpTT1lmWkNDP0U/MDw8NTk7NzQ8Ozg9OjxDOkY6Oz42OkBDOzZAT0xIPDo8REhDQkNEPEVGODEyMTFEQi4wMDQ4MystKC4zMjM5NzEjJTUqPjM9PVF3ajYqWWlbSltQX2ZUN0c6YVA3MiWcopOZsaippbOqpbSopLy3wbG6wLK2tb20tqiysaOxs6agr7apm6i6rqOwsqGytLGhpJ6ep6mxqbSppZyenqyXmZmXl5aYoqyem5eprbCoo5+OrKKol52YnKGnopiioaOhm6Kip5ueoJ6VmZumoZynlZubn6CYkJKVkJ2Ism5otXGriHCOpnK0dHO2e5uZpo2PnI2ifo+fpH6wdYOR0tF1W658hX+kb5uqpmuGhX2tfZeZj3uxc5Odj3izZZZ0hZ5unmaUUsmLWsJcn3liX61fdnOGYpeIXlnKnW+/gHVNS7VTVcZkVFFqY2ZYQU9qX2xpUFVGSTg9V1JbVllJQz9KPDI/OzU9PDU2Pjs3Pjw9QztHOTtANzs+RDsuQ1JKRz4/PElKRkNFRD5JSToxNzQ2QD4vLjI0MjUyLSkuMjYsNzQyJh82MDs1Oj1Qcmg5J1dpXEFOVF9lUDVHPWFNNjIuop2RpbCtpaq7rae1pae2u7yyu7+4t7W7u7SmtbSisrKjoKywpZinuq6ksrGdtLiqoKWdoaqksqisqqWanZupn5aVmJmSk6OqoZeTp6uwpaKWkqyfppOUoZylp6CVm6enopqjn66aoZ6ekJacop6cpZWdlZminpWZlpKbhax7d6h2o4+Lh6lvrYqDp4OamqOKkpmLon6Sl4euhX+Cs1xys1KufYKCpH9x1313hH6PnYaZmnevhoqRnIh3tGGaZZqCgZVskluwV0uadZh5ZmCtXnZ3h2eYiGpdr3eVn494bDV5yK6yX0JUb11nYEVQbGBxbVZVTS5lYmhTWVA7QkRATDo1PzkxPjwxNj85OEA9OkM6Rzs8Pzo+PkU5LUVVSkVAQzpNS0pCSEc+R0s5Nzw0Njo+LzAzMzMzLjIuLjE4Ki4zMiUhMDM3Njc9UGtlPiZWZ1xAPVZfY042R0NgSTo3N6CdlKC4sZizwa2osqeqsrq4tLm+ubiztr62pri0oLWtoKCprKCVp7asqLGyq620pJupn6CoorWnpqqkmZ6VpaKUlJyakpajppuUkKetr6WhlZipn6KPkaKaqaahlZqmqZ2dpJ6tnaGcoI2Un5ueoZiZnJaXoaCUmJGmnYapfX2leaGPkIOqcK2MgaaGlqGiipeWiKOBkIeUqnt/i515b7FaqIOCiKB5dNh/dod0p4GOm42SpHyWkJ+Ee7JenGSgfYKUbZNcq1xbk3+Rf2hnqmNye4BqmIZxXataiaCPa25lT0pDoVxaTXRdYmZNWmFfcnRfSlU1SpqSWEhFPUhGQU0zNUE4Ljs+MDVBNzhAPDY9PEY/Ojw2Pz1CNy5IVkpFQEg2S0lOQElLQEVOOjpANC47PjAwMjE1NCsqMDUvNywmMjEoJCQ2NjcxPFBlZUEmVWZbPzFUX2JMN0ZJX0MxPTeinJqav6yYtMKuq62oprSwuLG2v7m6s7G4vKq7taCxpZ+mp6eflKqxqbCqtq2qr6GYoaCmpKS6oqOroZebkaOglZWfm5WZoKCQjoypsK+mnZebp6afjZKkmKisqJWYqaien6CkraOhnqGOlaGYn6CSnJeclZ2hlZaPq5uPrm5ytHSpjHeKpnO0eXS0gZOlo5OcjImkh451uG+Me4uia2u2WqGGZZeXaaCip22UcrR0k5h/smqGkoita3WzYZ1mom6GkmuXXK1gTqF8h5FSc6NseX9+bpiGcFyvVjycd2ZUb24uW6dPYlJrZWJsWmJcYHB8Y1NZUT4+bW8yQkJAP006ITdANi47QDM3QzU4Pz8zOzxDREJKRk1JRjYySlRLRUJKNklKUD9IT0NGUD08RTUwOzswMTAvNzUsKywzMjYvIzAwLCwdMjg5LzlOYGVEJ1VkWT4vVV5hTDVGTV45MUE4pZqbnbuinLLArq2rq6e3qbivtcG1vbKwurirwbaqq6Gdp6SinZKrq6e2o7Oorqqhl5yooKWruZ2jrZyWmZClo5aOnqGbmZ6fkZOVq7avp5mUm6ypl4yUppqlraORl6uypKCeqKuwmaGikJmil6CblpuXoZOcqZ2UkKqZh9OTmrt0scSAw4Z91ZabuHmJkZiNl4mMp4d5orZ1fXd2woKasmCDunnAfHW4YrWBjIepfZaBrKlxe391vIinoGmdYaaOr6J+jHSHq32+bnO8dLKDdXiAim2aiHFtjaR0vV13fVthebxqWlZbaXleaWFkZmJteW9ZW1lDQUByP0NGKzVIIic7PzEwPD83OkI5OT1DNDxATlpeYGBfX19aUFBSS0VGSjRITFJASk5FRk9CPEU4ND05MDIwLjg3LSouLzE4MCItMSwzHiw8OjA4TFhhRidUY1g8L1ReYEs1O0xbLTZAOaean6K8opixwrCtqaqssai5r7fFsryzr7ywrsGyraajn6ShnZyRqqWqsqS1p62koJaaqpmmrLmdo66ZlaGQpqCTjZyjn5mfmpCWk6+5sKuVl6Onp5SQlqWdpK2fkaCoq5+cn6mksp6ipI6nopShmpyXlqSYj7CgkpWpn4WQmbaAkZKNuJV4gpObtXdubG5zb3mPhI6Jc57Bu7yZeoGyqHCAdJG5g3yGhouHjXuKho2XfKS7ub2cdXmzo3V2l3V0sHWYnmaGaY22dHJxd7aMXn95fYhng3lteWKLrHB0hX9YW6dqRGRZVGZfY11jUWZmcW11Qk1QTUQ7Wkw/SjM8MCA4PjsuMz1BOTk/PTs8QzZCU1laWltbWlteYGJgXVNHR0g0RElUQktOR0VPRj9HPDc+NzA3MC85Oi4sLy0qOC8lJjIoNCQoPjcvN0tUX0cnU2JXOCpPXV09KztWVic9OjymnaGhv6aWs8K0q6qorauqu6+xxrC2tK+4p7W5rqukoqefoJ2ZlKykraqmtaion5yWoKOerKW+p6Gql5WckaKbko+hqKKUnpeSmJSytbatmJ2kpKKLkpKmnKWrnZappaacm6Kpp6ajqKGSrJ6Xop6Xl5idno+wqZOcp6KPa35pnKh5iXN+m451emWHe76/wLpukoJxlYVfcmpaXZqJYWSHjpVrYH+VY22cdmKUa4CalZRlXl9jcZuJaHONfIaUZmp+cXR5fn1iW3h0gWhQXG6DfHuKalhseYFySUpvhXBOc01FV1xmYUxbV2ZjXk9abXZqclJPREVNPEhJPE0/MiwyQT84LzU/Qzw5O0A7PUM+UlZWV1laW1tcXWBhYWFgXFVHNURGVUVKT0hGUElJSDs4PTUxOi4xOzouMC03Nj01JiIvKjIsJTs4LTdJUl9JJ1NfVjQpUF5MKDM+W08nPzI+qJ+oocGkmrS6tqOspq6nqLWyrMitsbSttqS+sbOnoaSqnaOcmpqsp66kpbWqpJuYlqKbpq2pv6ippZWUm5agmpOYpamokp+Qj5icsLK/rJunnaeiiZORqpuopJycrJ+jmpujp6yin6qimq6blaaglpWdn52XsaWZoqiZnJGenKOlmqejmp2ampqQloJobn1xdpGXlJGDibSpjYWYlY6KjJiXh5OVioOTk5CIjZGUmZOZl5qgoZqblKCcjoJ6pIVsaXuQfYB1iYuCcoJ4eXZ1ioB7iWpzgXSDdWR3fXZrcHptYGNbb2dMWFllal9XWXB6b25mU09GUjlPWk5STygrO0pCNjM1PUBBOTpDPjxFTlNTVFZXWFpaXF1gYmJhX15eW1RLQ1NHS05ER1BMT0k8Ojs0ODksMjs4MTApNklSTzgiKSsvMiM0Oyo3Rk9bSidSXlQxMFReOis9OF1LLDwtQLKgs6K/oqSxsbegqaazp6WwtarJrK6yprWmwKi0oZ6lppyllpagq6eso6O3rKCZl5agl62qpsGfrKSWkpyXnpiUlKKenqOokpCZqKeyw7Caq52qno+Xlqmeq5yeoa2YoZudoqWvpaGkqJ6rmJemnZmaoZ6enLChnaKnlZiUmZSho5akn5ihjpaUi4qNj5etj3uVm4KRgImpqIWAmJaKhI6fiHuDkIaFmpGHhomVjpuXjpCYnqOWmZKQnY1+jWWhs66EiYR3e5CKfXd5em9neZCBgIlrdYF5iHJpc395dYOHgmt0Y3hmX2hkY2Rmalhre3Bqa1xTTFBEX1VGQD8+LDRARjs0NTs+QTs8Pz4+SE5OT1BTVFZWWFpcX2FjYV9dXV1eXVhWSktMQklPTVJKOzw6Nzg2LzM5NjQuKCYkLTEuLikrKjclKzwoNkNNTEQvVFxRMDVNWzE3RTRcRzU8LEC0oLmvvqyrrbGyoKqmsq2irLOwxrGsraSzr7yktJygp6KhnZmXqKappqSls7WelZWdmZmvpq6+oKyjkpKempmUkpahnJepnYWdqayitMezn6mkqpaWmJqnnqmcoKWrlJ+fnaCqrqiko6uhrJufn6CYpZ6cn5ywpJmfqJOYmJ2SpZqZqZ+bl2aDknxlfo+aj2N4jGxoanqQo6trZJmXfmeFimVlaWh6jaGOa2iMl5Gid2tqi5iin5hzbG56hIyGeVhlXYWCXmyLioJ2W2hzd3eRgIeCbniCeH9zbXmEc3eIiI6De2mFWF1qc2Rdc4hpa3xxbWNdUU5XSWRYQEozPUY3P0ZENzE8PT9BQzs7REdISElMTk9SUlRXW15gYWFgXV1dXV5fXVpVT0RIT0tTTj0+PT02NTM1NTU0KiYmJSwqJS4rKyc2KiQ7Jy9BSVtJLjZaTzYpRVkvRE8xWUI7Py49pZ+6vLmvq7Owq6Wora6wp66tsL2yq6ilrbCwn62YoKSeopqap6ycrKOmqKmzrp6Wo5Cir6a2uaWuo5CPmqGZk5KboJiZppZ7payiqLTDuKWip6+fnpWeo56jnaSqqJKfoZ6gqq+pqaOqnqebpp6noKyWoZylsaSYnKuWoZ+bk6WYn6uZnn6+g4hytHKFnoWtaHe5xLhxkqGje6aYmHOqgnzLwMC7cYqjh4KefJaYiJ7AvYKWnZ2NnMHAe4F6kYyawr99a6Wyb4yBb8p6f5t3kYOOgHZ5gX95cXuAhnB4hYyTeWx2kWJlXnhkX2WBYl50aG1kYlhMVklRWkhPRDJJRT9EQj4vPD8+QEE6OERDQkNFSElLTU5QU1ZZXl9fYF9eXl5eX19fXVxTTVBHVU5BQD89NjQ2ODI2NiomJSMpKiYuKyopMTAfOSojPkhbTCojQ1AvI0ZbM1BZL1VBQjsvOJajuMO0sK+/qamUo6+psK+tprK2sKump6Wxq6CrmJuioJybqqeinauipamlpbSknqOTpq6suLSnr6OSkpmdpZKRoKGXm6Cdh6arpKutv8CxoamuqZeSn56imaOkqqOToKGenayup6umo6Gln6SknK2pkaSbqa2qnJ2rna2il5iml6KkmJ1/zpR5eqWBepaWm1+tj12OqICgoXynlZp0q4KAr15kjKl6qIeFn3SXkoizY4KrhqCNjbNqhK5zfJaHuGGCrVmjzW6QdXvbe3+ZcX6IknV/ZXuIdnZsfYdufYWQkX5sgI1fcGpvZmBfeGRccWhqY2ZgUlRTV15KT0M1QUhFRDg+NjtAP0E7PThAPj8/QkRERklKTE5QUk9TXF5fX15dXV9gYF9fXVpXT1VKPT8+PDU0NzgxNjQoJyQhJywmJi8oJiszHTYwJDc7U0wrLC1KMCc7WzpMLSFQQEY0LjGtwsDAtbSwt5iekaOqqa20q6ayra2spKymsKqhp5uappicoq+foZ+op6OmoZ+wrJuelqaurbCrqKyglJKbn6WTkJ+ll52oo56upKuwqL/Gs6ipsa6Wkp6copehqqqflaGenZytrqapqJumpqOgqpKss5aloqqqnqSnp6KxopObp5uhm5WUkZegcIWMmHWEqIdxsHydcqx9oJ+BpY+ed6uCfa1/nHKtfquHhp92mJJ7fJd+qoihi5GLnH6reoiSjqCAeq1WnMR6j2+SwX2BlW11cIxtZndlhm9hd25yboiKkY+DbI+OZG1zdW9gZm1kX29oam5mY1dTXGBaUlJDOUlJQEM8PjxARkRDRUE9PDw8PkBAQUJFRkdFQENJU1dZWlxdXl5cXl9hX15eXVtaUkM+OzkyNDc4NDUyJiMfHCAxJyAxJx8nNB41LSY3PVdKLTwoPTEpM1ZARiEcRztDMS0rr9TGx7K0n52jjqOioq2utq+psaepq6iuq6umoqOdmqOWn6arn6KmoKioop+esKyYm5eoqK+sqKepnpeVmqOikpShrZudp6OurKOstam5zbKtpq6slpWcnaKZn66snZahmZ6eqbCnqamaqqijoaubr7GiqKyvppmmq6qrsqSTmKSmm5WShaRqpHWJeql1erJxgqWJmIxwh5+ah6RfYFKrhH+ugpt1roKnhoafepmXhXtmgKOJpJiGgaN9qX+BlIauXnyoVZ2ikoF6o5+Ae8OvxYxzr7SzuXFiqa/CdGiMjJeOgWyYkW5seHh3bmtmZGRxcGZ7aWNcVl9pWFhUTExRTENDQUI7Q0FAQkk8PTo5Ojw9Pj4/QT04NjtETFBSVFZYW15eXVxeYGFgX15dXF1bU0lCNjc5OTY2NCwmJCIgKCciKy0iJC4hMy0mQERXSCxHKzU2KjFQS0wjIEE5RDQsJ8LJ1dbAoZmrqKGvop+wtbCvqa2jqKeqq6uppKafm6WfnaanpqSdrJqiq6Gkn6+inpuTqqS2sK6gqZudl5Wmo5CaoqifoKacsKajqLGstsiytamsqpWRnJ2imaCltJ2aoZScn6aqqqKtmaqooaGporOtoqqzsqKcqqiwsLellJekqJmdknyqbJ6Eh3WreXywboKki4iflpWelYHSt7S4yYCBsl5flKmDpIeHoHqYlZl4qslzmaOUqKmQk5qMfpqJmsbGd2WhgqVzgZ+Ogn2vXm+1Y7F1S6OGbadHgpNkjo+ckntvlZB9bnl0fHptW2VqcnFmgWpeYVhjbVxeWUlMTEtFREJCPUE8Qj9KOzc5Nzk5Ojs7OzMuNjxBRklMTU9RU1daW1tbXV5fXl9fXlxcXFxcWE1CNzU3ODUvKSglJiUkJiksNUZOUFBNRkxKVkYqTDAvPi00TlRRHRw7PEYyLCSopMHGua2ps66spaKdsrmsqqGmm6imq6yppqCmpJiro5+urJ2moayan6mlnae1oKOYk6irtrKsm6acoJaQpq2Smpyno6Cqpq2ho6epsLTCsbKqraiUiZidpZuipK6ll6GVmZylpamZrpysp6Weq6O3rKCyubCenK+otLS0ppaYqaSboY+CnU54moF/n3qEo3yCpISGpp6cnpSEuHt8ebmCf8zGw7Z3m6GQi59+mpaXiXafl4qkmKSofrCFm4SehKx9mZRhpWyjcI+FkIF9l4RyrGCkcnGAmmC8fVJVdY6Ro5Z7fJGOh3J5coN9cFxsbndyaoFvWmNfaG5iZF1MTFFTQUhHRkk5OUs+QjEwODg1Njg3Ny0qNT09P0JER0lMTlBUV1lZWltcX19eXV9fXFpaWllVU09IQDc3Mi4sKi4rKicmP1FUVldXV1lYWFdVT1RGPEUyOlBbVBwbNj9HLC0gjIeZqaykq7mrr6CboayztKafoZWmr66uqaadpaWao6ehsq6iqaeyoJmopJSitaOklpeiqrW5pJyjnaOTkKGymZ6bpqWhoq6snKSoorWxw7Gtqq2qkYeRnKedo6ScpZeemJmZpaOnmK2hrKSll66lu6yht7eunp61s7mytKiZn7GipZ+Hj9G1w7d5h46FkZOPgKZ4lKJ3i6CShaWCi3GrhoW0bnJpmaOclYmffJeZhoeQc66CpZuijaaLk5yIlJCabXCyXKVzk3qcbJl/e5l+bqlhonFxf59ic7K4aHePk6SYfYqLkIh2e3iNgWxod2l4c26AdV1kZG1tZWhgSlpXWDxIRj9UM0BGPjwqKDYzLjAxMykmNDo7PD0+QENFSUtOUFJUVldXWV1fX15eYGBdWltaWFVSUlFGOjIyMzAvKysoQFFSVFVUU1RWV1dYWFdVVVZUUU9RW1UlITJBSCMpJZJyjYquv7+8u7Wel6ikrbahopmVo6mnrqmrmaWhnqahoLWnoqmnsKOUq6OOpK2knpGamqq0tKSdppypkpSXrqCgnqaknKectJmhqqO1q8KvqaupooyEj5yioKajlZmanJibmKajpZeppqyhpJuspr2slb6wrZ+jsLS7rLWonaqzpamZe6iRfXywd4qBpKWInG2yb6CHrXuhj4OolpmArImFroWglKihopeFn4CZlYB7kn6rgJ2alouqeJ2gj4iTkn95r12jgXymp2SegHyXdGuuXaVrcYWZXWBbjKBtlJClmIGTi5OJeHmBln5qbH1ifXRtgHpgZ2VwbmdnaEJZX1s9SlMyVDhCQkM3JCQzKycnMywgLzY2NzQzNjpAQ0ZJS01OUVNTU1ZaXV9hYGFhYV5dW1pXU1BPTkk3MDUyLiosQVRWVlZUVFVVVVVUVFVUU1NWV1dYVlVWUUhGSUojKCi8kpqEqcbDtsG0n5qtoK64paOOm6SjoK+uqZ+jnp2tmJ65oKKroK+qmq2gkKqppZaJmpCusKymoKibrZiZj62ioZ2loZqlnK2YoKiltqi/rqSpo5+LgI2bm5+mnpKUmZmTmpqko6OYp6qqoqOeqai+pJfDrKujoqyzu6ywqKK1saqsmXavfpCKnIWHfbqtiZhksIxlla19oY+Dp5abga2KhLCFppmjoaKRhaBbbGqBs2B/rXt7goCybGdumZeLiLFbfbRbpINryKJln4F7vFl2tVqyfVKvgHqsWIChbZeOp5qKlo+TlHl4jZt8Y3N8YYN4c4B8YWlmcG1mZWVPVWNcQVRePUgoPjk9NCEhLCQfMi4gKjEvMDQ1Nzk6PEFDRkhKTE5QUFJUV1peYGBgYWJeX1xbWFVQTkpHQzU1My4vQFVZWFdYV1hYV1dYV1ZXV1dXWFdXWFlaWltcWFdXR0I70p+zsbe9u7TBs6Ocraaltqmgi5mgn52zsaieop+dtJigs6iqq56wrZ6rmpSuqKKOiJuOr6ypp6Ooma+Tmo+pmqGepZ+apKOlmZ6jqbKovK+lqJ6djnyKmpahoJmQkZmakZmXqJ6fl6espaSkoqSpu56gxqelqaKstbeur6igva+urpeBqZKjro6bgIakl5iQgYC4w7qDjp2ThKeYnYKsioKviaecmqWrkX7VvcKqYqO/vXx+o4KD17q3tYWTkoKevb6EaqOBb6uEbp1/erKxx4Nrq7C9rHh3or67dICVjaWbj5mOlJp3gJCZeWJ8emOMZ3iBe2BrZWtqYVBiW1NpXEBUYEJMKTw6NS8fHyQeJTIgHSQoMDQ5NjY3ODs+QURGR0pLTU5OUVRXXWFcX19hXmBbXFlUUU1IQz48QT81PVNZWVhZWVpZWlpZWFdXWFlaWllZWFlbW11dXFpWWFRXWruVtLSxv7qyvbOina6mpbOmnYyYpb+ptrCnob+mprGbnrGcuaifra6lp5STr6yXjIOaka6mo6yipZyqoJiLo5OmnqecmqGoopmeoKysqbitp6Oal5N7h5iSppuTj5GYl46YlKiZnpaop56ppqGiq7ueqcWjoK+jq7S1q7GrorypsLCbdHaqpLaFZYmfcGesj4qPbW93pJCaoIF1sJqWcJCNcpaoo5uYrqRybG1sZYp4bm2CmXGAemlwaWaJlpWXcWhphYZncIZkXYpjaW9ZXWd+eKZgYnKPkm9mZICNk46hl5aXjpSbe4aOlHRlhndnjGp4fnhkbGNmbGJLZVdKa1k6UGREUCdKOisjHCAaIiwpGBsYLTIuNTo0NTc6PD9BQkRFSEtMTU9RU1ZcV1pcYF9hXV1bVFBMSEQ9OkFCN01YWVpZWVpZWFhZWFdXVldZXV5eXVxcXF1eXV5dW1tVV16ola20qru6srOqqaKunqSzqpiSvbHDx720qZ6/q6yjoKarn7qjpK2sraWNla2qkIyFlZetn6Wqop+kpKCRi6WSp5mpmZajqqCWnKWmp6+5qquam5OSe4OVjaaXjpGRl5OMl5Wmk52Wp6GZsKadoqy5oLDCqKSzpqyxsquvram6pbC5l4uhqaW2nYmWopiGqZqQlJ2TqrOZm6OsobSXo6GeoaKdoaShlaunjJKTjIeSnJyUkJmTmJCOlYR/pJqXlY6Lk5KKj4aEfmeLgHSDdnSHjHGnbXyVkpSTgYGPj4+OnJOflJaUnoCGk4twZ452bol3dXx5aWtkZG9jVWBYQGlaR2JgTlgrRT0rJiE2NDAvHxwhJTIoKjc5OTQ2OTs+P0FCREZKS0tNUFBRV1VWWV5fYWNdXlRRSkVDPjk9QEFTWFtcWVdYWFhYWFlYWFpaW1xeX19gXl5eX19gYGBfWVlgpZapqaW2uK6uorClrZ+gtrGQjqrEu8S5t6mhpZ2bpZ2wqKO2p52ptaankJeso4uIiY+cp5aspKKaqJ6fk5Wjl6iaqZmUp6GkkJqnmaG0uaeqmJqQjXuAk4yhlIqUkZWPjpKXpI6dmKeem7Wjnaast6ivwq6jt6ewr7Guqqu1u6KxvpqSpqSmtaKSnaaejamfjZKfo6ywm6GksqqxmaWhnaSqnp6dnJesnZKaopuUkJaqmY2YmJaQlp6Rh6CdlZSFkoyQjZWLgX5mjYd1h3Z5iIR0nGqHkZWVkop9jJaSkpeRoJGblZ6ChpaFeHGUcniJfnF7fmluZF9waWBbX1ltYlBgZE9ZOUdGRT0yPD04LyomKykmHSY0MDY2NTg6PT0/QUFDSEpHSktMTVNTU1VaYGBpYGVWUEpBQ0I7OUVNVlteXltaXFtbW1xdXV9eXV5fYGFhYmFhYWBiYmJkYlxbY5iVpKejsbSsrqOpp62gqLWqkI+co7K6raqroaKZepyisKSlsamWm7imo5OXqZyOhoqJm6KQrp+kl6igoZKXmZuui6qWkKiZqIyYqI6euLajpZibjYl5gJKMm5OKlZGTj4yRlqGLnJynnZ63o3+Dr7WisK90pL6jsqB4e6Gss72Wd66loIqAqn5kXGJ2n46knYOXfm6Ts5yjqK+rpGWfoJR0epqXcYCZqZhsgKOoimWcpZuQl5iWi5KbkISdmpCUg5KHjo6SiYV3a5CIdodxfIaBgGFpiYuVk4xbdpWRZ2iPjHF6o5eWZHeXhoB2l2iCiYJueX5qcGVfdm9ra2dcZWNhYW9SWj1NTU5SRj1AVEI5MS8eHyY0OjMwNjY3ODw7PkBBQkZIQkdGSUtMVFVVWV1gaGdnWFFJPERHPDlWUltgYWJgXmBfYGFhX1xdX19fYWFiY2RhYmFhZWRjaGReXWaclqajobCxrKuppamtpKetpZKWqrSusaWZqaaql3OLna+fqKunk5a4oKCOm6SekH6IiJqejayapJWoop6Ol5GehXSukImmmqiRlqOIm7mzp6CYmYuJdXaSjZaTipORkJOLj5OfjZmepZibspaAjJu1nbSMko+9p6F+p6J7pLC5go6Pp5+Ei4WPsamvjImWopl5gYushpydoqirqYiVh5l3pZt6h5yBl6eCgXudsnqKhp+XmZSYloGQlpaEmZpjeYeQhI2PkouDbnGQiHqBcYCBhn+GdIeFlpJ4lmiTdKCadHuZgp6ahJh9kYmBgphpjIyEanh6cHBnZHdtaWxqXGRpaWVyW1xIVExRQEU1LVlUVDYpITA5PT42NDM1Njg7Oj0+Pj9ESUBJRUpLR1JYWlhbYWFoZllRSDlESzw+YlZeYmRlZGBhYWBiYl9dYGFhYmJiY2ZnY2JhYGVkY2djYWFonZijn6aurquorKCosKenqqWZlK3FvK+glaWotJ2Pg52rnKaioI2Qvp6ZjZ+aoZB8hY6ZmIisnaOWoaGSjpSJhoCRqI6Hopyjk5adhp65saedmpOPhXB1kImUkIqUj46bi46RnZCVnqOUnayIn7SJtJqui8qIq6+Jt4WNsIOysIWpjqeYjZ18qI9ye3ebjqaWaJWkebSLn5+nqZOZwoJ/q4iYoXGegJqlfZeFlbKAoX2gk5+PmJeAjpObiZiSi3yFk4aNlJOJg21zkoaAe3KGgYR9hXWGgpiBj8VmgKmHj6JqnYGel4CZgIqLg4iYb42ShGd3dHt2Z2h1cGdoa15ibmxmbFhmRlxRTDJFNDZNYWM3JjQ8REdEOjYzNjU4Ozg+PT0+Qkw/TklKS0NQWl1cV2JeamxcUUU9S01ASmRYXWNnaGdiYmJiY2NgX2JhYmNjY2RpaWNiYmJlY2FmY2JiaZWXop+wqKmopaugpLmxqqunmpSeoqSqopWkqbair3+gppylnp2JlL2Zk42gkZ2PeYOWlpGIq5mcm5qihY+Md5ucjqCRiJ6km5WYl4aiuKylmZuNjX9ibY+Lk5CNj4yMl4uPkZ6Nkp6gmKCofqGnh62doJaukKCenZGGgqCNrLGIpI6rmoyafqJ1gJiTa4GrdE2reIeNnZKbqamCqqt+hKF7eqdpnn+SbGeXhpi2iZ5+bmBjWIOXf4x7ZGeLc5l9eZZrXXyXbl9TcYVcYGx5g2BZZYJ+hIGYcaeqa4OjbnKlcJ+CnGdknmxabIh6ZVlfgn5hV1BvdmVtdHFqam5eam9sa2hXZ05dWEU5QDRHRF5rNCtJQ1FNTj04NDg1OTs2QDs7PkJPPlFSTE1CSltdX1deX2J2YE1FOk1PTVRiXFtmZ2lpYmJkYWRkYmFiYGJkY2FiamtkYmRkZ2RiZ2VhY2iYlp2guaCqo6askaG2vKuvopmWn6Clq6ufnK20oqeRoJ+fppuZjZi0mZCLnoyVi3WBlJGNiqaWlpifnn+ThYaso4eckYqYqZiZmpGHpbCmopWZiImAaW6Ih4uOjomLjJGLj5Ggi5Kdn5uhpX+TgY+joZSgd5yWkKeDoqiAhquvhqV6i32Emn2icHKSh5Z7nox5bYebi5mRnKmcj4edfIKic3amZp5+d6RemHt9k3Oibpi3tLpzkoeBgLaoZIHGuHtwlbaMcYCbpGN0rKtgfWqds35ufYeDj4KLl3GAo2xzpHOegn2jXpyZs5Zve5ees3RyW56ygmlib3N1cWhuWGtrcnJkW2hdYkxEPUQ1UUFacTI8UkZfSlM9PDM5NTo6NkQ7O0BJUD9UTU5RQEVfXltZWGBgfGRJQzhMV1VWYmFaZmZra2JiZWFkY2BhYmBkZF9gY2tuY2NkZGhkYmdmY2holJaVo7mZq5yToI6luLatrqCaoZuio6Srm5qxrKuSl6CYoKSZmpSeq5uLiJJ4i4VwgJaNio+hkJOUnZd9kYqOqKCHmI+KkqKTm5qMiqinpJ6PloeEfmt7h359j42Di4+PiY6TnoGVm5+coJ+LiXecmKKNoHKii4ipiJynkZeprICujH16oJl5o5N4gHOXiIycfZafhpuOmZynh6NkoX2JlpCbjGyeaJqNbpqZe4CKp31yZ3Oqg52Cc6pnlJpdm4V2hJ1oqmqBuGZcqXCBnGGVjF6ndnaJioCdaJp1h5OSmI5/nm2ZkGqmmVyofne7an2pWo6EXbNnXG5xeHdraVtwaXd4YV9mV2JCUEVPN1ZCUm40SlpZXk5aREAxNTE7OzdIPzpDR1U/WFJYXT5EYl1WYFFhY31qRUI5TlteWWRmWGZnbW1iYmVfYWFfX2BgZWNeYmRvcV9kZWVrZGNpaGdraZWciaq2m6iJY5WcrLqysKydppuap5+drJmdsKernZeimaGfmZaWoKOZhomNaYiAcXuXiIyWl4SSlJiPeoqElqOciZWQhoudkZybiI+oop+ajJGKgIBpgYZ5f5aMe4iNjoeOlZl+kqGeoKKTmHJon4qgj4xwkoyCqYiZoKSpoql9sK2koriXdqOzoqN/iJR4nXqrmn6ij56cmImYcqF9hY2wtX1rmpGheH6YtKOjq6iEmHuafJyafnOqWl1ve5eLeJ5iTH97e4VkephCTZ9ZompyfI5ugYqEmXabeYeJsbN/fpqSpnR+nW1xfJRvmXJpo12VdkhlY2BzcH19bmZfa2h1e2JjYFFeV1xUVkBZRVFnRVJWXGFYX0lEPUI4QEE6SUU4TEVYQVZRWlZERmFcWmBLYG19ckVDPFVeYlplalZoaG1vYmZmXmFgXF1eYGhiX2VkdmxeZWdmbGRlbGhoa2mUnYGxrpmEU1+hp7S6s7OpmqKLmqmbnKeSoKujoKePnp2cmpmVmKGdloeHiXeFgW55lYWQmot9kZOWiHKAiZKgm3KSkIGImZSfmoSOqJuZlYqKinyEbISFcYGhjHiFjYiHkZeTe5Gin56jiK6GfbWEj56de6aWeqmClp6Ri6Kefqdod21+mXOgc3F8nYWYb5OCrn2jg6efm4GkcF6paHWjY2+lYZzTj3x6mXhyc2OihY9+onKijnVrj7OLYIKYinOqsqe8f3eDbX+/pqq0XpxvfnKXb4FzonJepGd0pmBopmya05h6gptud3mXa5t5dpdybKmlZ19keXB/hGtnZmNtdXdmX2FSW2ZQUWFIV0lUX1dTW2RqW2VRRkNLTEpLQkpFOFBAUE1YU1hPUlFgZWVpUmR4eXdKRkVjXWVaaGpTaWhqb2NqZmBjX1xdXV9oYmFoZXxkXmRnZGtkamxmaGxomJt/sKxUXEt+qa+ytbCzo5yYhJemoKCjjKSnn5eoiZmXmJOZk5Ggl46IhXtwfYRofY+Dk5qBd5GOj4lwf4ePk5JsmJR8iZGSo5WDjqqak5KKhYl5hHeIgG6BnoZ3gJKFh5iglnmToqOaoImzoaK2i3qsp6SupXCpgJuRhoGdk32kgKKZhphxnoSira6Jl4uAjKSNlYOvopR2tba1yaJ0lIuCnmGdl6lteZWHn5p1oYd3oH2QloqBb0xmo5JwmohzpXt5dGKDgmx+oGxyZGCccn90l2t7arS1tMamc5h+epxqmpqrdIGabXN3l2mZeXSYcVBEfbNeanVqeIdma2didHRwbVZdU1loT1JoSVVMWFJWXGdrblVnV01KQUpNSkhKTkFRSlBkY2ltZXRyc354e251iXt7VFFPbV5oW2tpUmpoaWxnbWZjZV9cXFxfaWJkaGt7X11kZ2NqZm5tZWlsZaKcia+nhWY/lKGyrK+vtaKij3+Wp6Kho4ukppybpYGal5aNl5CPm5OOiIN5anmGZYOMfpafeXWPiIyCaYSFkoOMhZ2NeoyKlaWSgpepl4yRi4CJeoB9i3lwj6CGeYGUhoiVnpV/k6WnnJaWhGdueJxsomR8caV4nJhwaKeCmI18pXqgloOWcp92gImUlY+5bpCKomJ9maKWiW5zaqtrdaBtb6Zgm2mLkGmWh5qVdaKAfZpfi4WMdW+IYmihZZ5/aZt1cGRniIJuc6JaX1tkoW5diYxwe390cmSlbniiZGanaJdyi5huoW9SiI9uoF5kp1SLXVSYbW1yanGBbXBoa3hza29RWFZWZllTbUlYT1xIWGhoc2pZa1ZRUkVWXExYUmFVaGped3V6fHB8fHKCe39zdo2Ag3ZeUXNhZ2JxZ1BraGhrbG9oZGdfXV1dYGpiaWl2dV1cY2hjamlybGZrbWOdpZmmemV0bYunrqWqsbGmn4t/lqqcnaSLoaGZoaGAlZiTjZqPi5eQjot7hnGAiGiLinyXmnN0iX2QfGWDh5WKiZaZgnyIhpamkIGiq5CFkIqBin2AgI5zaY+lhH2Fk4yHl5+Oh5Kqpp6JpniWnH6liZaMspmekYOvl5+leZeJeql0po+Emm6looyShIyDvG59pa+Ch4aHlJedoX2me3KolKCWZ55+b6xjloqVkneobKmigYl2h4J3q5GmiGuRsGt2s4ypbIuGbm6fnpGVYn+ri6p3gH+Op593n32FpJWdoGmah3WsZp6tjLZzdr6MpJNZg6aNq2F1cXNve3RxYmp+bmhsU1ZaVmFgXGpMXFJdSV1sbXZgW3FZW2BaZ3Nlbm9xY3F0YHd6fnlyeYNyg36Be3uMgYKAdmJ5ZGRuc2RSbGdnb21yaWZpYV9eXGFqYmxsem9cXGJpYW1pd21nbG5ilaaqnYGAnqSWqqqeqKeuo5mIgZaqmZ2jiZqknKidhIuaj4WckYWSjYyMdIV6iINvjYR9l5NzdYZykYNuf4uShoaUj317goWXpY1/paWNgI2JhJR1g4eSb2yLqICCi5ONiJueiIuTqqOgkIB0lJeIfoF5lK+kf4KccY+GeZKMhYB7cqeMcX19epeWm4SNeHt+foiUlZOLd5GZoKGEe36Ja4yFW3l5c3lwaW5+kolxf3SBj5STcYWDgmWNf1+BgIx4dnSUdW97b26JboSGX3dpeI5mgoOGj6qcf3R9l2qJiG9/dXyEdW1sZoxzd3uXd4Rbalh5j2hud3Jxb3d4b11shm1pZ1ZaX1dcZGtkVWFVXlFfb3d5a2p3ZWpqanV8cHF0c2FvdWJze4F4dXqBdX+Af4F5i4WCfXttf2xkeW5eV25naHVreGppaWRcYFpjaWVscXVuWltia2Rra3ltaGxvYY6Vuqmni6Gim6akmaSdq6Kgg4OWqpGdoIiZppqomIOBm4t+lpSHjoqJjHKCfI99fo+EepeOdHKEcJWGe32Si4aGkIV4foCGmKOMe6ehi4WPj4SVgoaOmHdxhKqFjZGcj4eenYaKmqigoKuDiY6Vm39+ipetqJCTp5B4cZ6Tg3uTcH+phnB9lXFqb3yBn4t/ko6LaG5dhIyMnJygj3OVjIhxdGuCdnSAWXJuhpCBfX6LaV1pY3qFg4iAX2l4e5x8g42DdoGHg2l5jIhrYnFzg3dfco2CipColodnjY+DbneLgm+Di3duZGZjeYJ6lVpcaWZudlt6eHd0bXNygmZcbYpra2JaWV1ZWGtxW15gWV5dZnJ9enRvdGNqaml7fHJ6d3RkbXRobHt+dXp8e3l5f4B/cIaKhHt9c356cn9oVFxyaWx2cHVna2dkXWFZamhranFybVdbZW5sZ3J5b2hqbWCMjKuxoZCjoZqfnpiemamjoX2ClquMnpSHmqGQpJR/e5iEfJKZiIiGhopyfYCLdoWLgYSWinJvgHKZh4R+koOEhoqBeoCEi5qfj4KmoId4jZeIlYuLnJeEg3qsgZCXmZOJnZyGh6Grn6Kio4uIk5udo5mWqqKop6GTnImYkHx5j4+FqH5+kpGSk5yxpZqUnZCNsZKYhKaMjJacoIqRnIOJkoprfI52d2WChpCKfImdhIeLj4eIgIWEkHd8e3Wbo4mIi5+LhpV/fo2CgXZxdIaFf3iJiIuRp5GEh46Ig4yQi3uFiYeNgHVrgYN7eZlpcmhgdIpwfXp3dm92c4FdXW+HZ25fX1pbXFJncVVjW1thbGh0e3xybnBkamlof3tteH5waG9wbGaAe3KBgHd/fX+Ee22DjIZ8enh8fnqDeE5kdmpzbnF7ZWtlYmJgW3NmcGZycWxVXWx0bWh4enBnaWtljYieup+WoqGYlZmYlJikoJ17f5ipjZ6MhZ+cip2WfHiUgnuOmYmGg4SHbXiBgHKAh32Hk4Rta356l4eEg5B+gIaEhn2Hg42bnZGGqZ6CcYqPhZKRi5yRfY16qYONkZeVjpyWhYWbpqCimp2GhJOamZmQmaagpp6ekJeCk4t4fYiPhaZ8fI+QkYWYqqCck5yPjaqNkYCejYmUmp+Dj5h/h46DcHiGcXRhfoSPhnWMmICCjoKGhH6FhJVueXZ1lKOMjoabhYWOdYCLfX1zc3yJhHt5jY+Fk6iQh4SPgoOKiYl1hIaHiXtuan1/e21oa2xnXnl+Z3x7dnR1dXp3XGBwfW11YGNaW15RZm1TZVpdYWtpdXp+cGttY2tpZ4B/a3J/a2pzbnhug3luhoB2goB9hXZygo2Hfnt6fIB7gotgaXtrdWhpg2VqY2BpW2N1aG9idW1rVGJxeWVveXpyZWptbYuKn7iaoaSfk5GWl4uan56de3ecpZCbiYaklIqYmXh5jYV8iZGDjIKCgmx7f3hygIR8iZB8a2h9gpeJgYiOfH6GhId8j4CPm5uQh6acf3CLioyShqChioWMfKeRiI+SlpOWknaMo6ChnZaaf4KRmpmTjZqioqSbmJGcf4+GeoGFj4ihgH6MjY98l6SgoJKZkJCmjI+BnJKKk5ecfpOTfoeOgXZ0gnB2YH2AjodyipZ8h4pxjH6ChYaPaHhyeY2Zk5CAmH+JjHOCiH19cnp8jIV7e5KOhJemlIyGkXyFhoeFdIGChoZ5ZHF6fnh5cGxqZl59c2h8dXVzfHN/al5gdHZwd2RjWF1eUmpoVGRYXmFoanZ4gXFma2NsaGV/gGptfWdtcGp9d4V6a4uBcoGBfYF0doKMhn98eoCBfX+PanKDbnRpYohpbGJfcVV0b21uYHhobFdqdHZidXp7cWJrb3mJjZ+zkqWlnY6QmI+GnaCanHx1o5+Nl3+MoYqImpV4e4aHfoOJfoiCgX9wfnp0dYKEfYiQd2djfYaXi4KKjXh9gI2DeZaAlZeVjZWfmn1vi4GQk4alm4eMiYOmlYSSipWXkpF2kJ2hoZiUmHqAj5iXj5eanaSemZOUnHuRh4R4hpeOnn6Cio6Mc5einqCSmI6PooyLg5iZhJOWmn+YjXyJjYF3cn5ue2SAfIuGcIaTgI+Ba4eDgYCJhWZ2b32Ik5mOfpR5jIl9gIh9fHKAeYqGeoWSioyZo5eDhIx3iISCgXZ6gIeEdF93d3xzfXdma2NgfmlqdnN0dX1xfGNjYXNudXJtYVlfXVprZFJiV19gaWx1eYZwY2pjbGZofINraHRobG9of3yBeG2PhnGAgoJ/dHyDjIGAfnqCg358kG11iXR0bWWKbGphY3VWg2lwbmB4Z2xhanZwZnl7eXFfcWyFhZCdrpinqJ6OjZeHhZ+Tlph9dqibiZh5lpyLjJiPeHuAi318g3uAgoF4c3h5c32Ag3+IioBkXn2LlYh+hYh0fX6Kf36YhJaTloyjoJd+cYd7k5GKpo+MjoqSoJGDkY+Tl5CKgI6XoJuSkJJ0gY6SlImdnZ6nmZiOlZh1j5CLbYaZkJl7h4iQiW+XnZqik5SKjZ6MhoGTnX+TkpaHmol8ioqBenJ6a3Vse3+Lfm6FkoOTd2+ChH5+i4Blc2p9gZeYhYCOdJGJhHqIfnZ4gX6HgX2EjoaNlaWReYWCdImHfX9ydH+GgmxgenR5cHxvYW5iZHthbm92c3d3c3NhdmBvbHVub11bXl1dal1PXVdiYWhtc3qJa19qZWpjaHeIbWZsaGlsZ4B8endvj4dzgIOEfXSBhol6g316gYR9fY5yeYt5eG5sh2toX2pyY4docW9ldmdtbGF6aGt8e3hwYXdti4GZmqqhpKmeioqRhoqeipWXfXasl4yWfJ6TkZaUiHZ9e4p8e4B2d3+Ab3Rzem+FfYGAiX58YVx+j5GGgISEc3qAhnqPkYeRkZuSpJqTgXyBfI2KkqOIjYqNl5qNhZGYk5WOiIiLkp2UkY2NboSQj5GJnpmioZeXiZeScIubhWeHmo+UeomFkIpwlpqToZKSiIuZjIJ/kZ59ko+TjJqPe4qFh3RzdmtxbnV8i3RuhpGOknF0gHyCgoh8ZXFten6blH6FinWRi4F0iXpvgX+CiH2FjYqGjpaqjnuIfX6LhXd9cG5/hIJiZ3dzdG56Yl5wYWp0XnBqenh4bHJwZXldbWxzbXNYWl1fYWpaT1dXZGNmcXF/iGVdaWhnYmdxjW5kaWdlaWeAend1b46Ec4GBg3x1goiFeIV8d4OFeoCKd3+Le3tyeYNqal9xaXN/a3FubXFnb2tle2Juf3l2cGt2d4l/o5iiqKGnm4iMioGPnIaTnHSAqZSRjYagjJWTkH9ze3aFd3h/cnN7hWtyb3ltiXZ/gIZucVtZfpKNiICBgXZ1gH9/oIaPipGcl6CTlneJfoCMiJydiY+GkpeWhYiUmI+Wi4uMjYydi4+RhG6Ji4+RipyWoZyYloaYiWyGpYVnh56KkX6MhIyBd5OYkZ2RkIiJlI1+fpCYfJGNkI6akn2LgINvdnBsbW9we4Zpc4OOmIpwd4B1gomDeWdzb3aCm499ioV7lZJ6d4p1cYp8h417i4eFio+cpIl8hHaBi4B3eG1pf4F/XHFycW9veFpecGFval5vaXx6cG1tam13YHBva3FtWVhgYWFtV1FTWWVmYnVwhIJiXWttZGNma5JtYGZmX2drgXRxcnCLgHR/goB5doCLgHmGf3eHhnaDhXuHjIB7dop/anFjfWOFfG9wbHRqaG5sdndfcX55e3R1c3+CfqWVmq2fp5aFjIN+lpSDj550iZ+TkoWKmoyVjYt6cnd0gnByhXNxdYhsbmx1bYh3g31/bW5VUYGrlIeCeYB2coJ5gqCCkYGSkZebkZl3kHqCjJKkmpOOiJWYkoOGlpiLk4uIjo+InoWRi31zi4WIj4icmZ+blpWAlIBph56JaIehiJKEkYSKcYORl4+ajo+Mi4+Nd3uTkHuOi42Sl418iHyBa3dqbmtsbXp/Ynl+jpaBdnqBd4ONfHpodW11iJaMf4mHe5SRcnqFcXiOe4uNe4l+hI6Rn5+GfX14gYt9d3Boa4CBd153b21rcXJVXm9icWFfbW55cGdwZmZ0dWhxbGF3ZV1WZWBgclNQTltlZFx4cIh8XlxpcWJiZWaRaV9nZFtnb35va3Fzin12fYWAdXZ/jHl7hoB4iINzhoV+jIyEfHmVeGZxa4Rgh35vb2t6YGltdH90X3R8eIZ3c3OFfHmhkJqxnKWOgop/gpmIgIudfoqYko6EiJeOjo6EdnR2c4Bwb4VzcHGDb2ppdW2Cbn18bXVzUk6C38mS1pN8b3SDdYOfgpF2lJCYm4+Ye5NyhZCfoZOTkImSm5OFfZWVh4yNh5KNiZx/joF4eox/iIyKnJucm5aUeo53aYqTiW2JpIWTiJiDhmOMkZiNlImWi42Ji3B6lYl8jomLk5GKeoV8f218ZXNva2x6eVyAeY+OgHt9fn+Gjnt6aXVrdIyQioOGhn2WjWx/f3CBjYCOiX6Ee4ORlpubi313eIKQeXNsZW9+gmtpdG9naHNtU15uZHBaX2tyeWdra2JneHNvcWRfd2BhVmtfXnZPTUtgZWNceXGKdFxbZXVgYWVljmNgZmJYaXJzbWtxdot8dHmGgnZ3fotzf4Z/e4l/comHgZGKiH1+mXZlc259ZYh/b3BrgFprbnl5c2B2enuNdnJ3ind5n4ybr5ugkIKFeIiUfnyJnIeEnpCOhYyXhJOOh4F0d3B5cG6Eb21ufnJjZHhwfG56fGpobGOkmsHcru+ic2t1g3WEoYWRbpWPlJ+UmoGRcIWLo5eJjpWKkJ2Vg4CUj4SIj4CSioqXfod7dX+JeIaFjpual5mPkHaLd3CIiox+jKWFk4qdhYZei5SXiY6IjouKhIlsfJeCfYiFipGPhnaFfn5rfWN4dGpveHNYiHqRh4V6f3+AhYx+emZ0aoGLj4uEhICMmIZsgndviZKDkYV/gnuBkZeTmZF1dHiGjXZzcWZ0eIFhc21vYWh1ZlJgcGdrVV5tdHphcmNgaX1xcm5bY3JhY1duWlx3TU1MY2VhXXZzim1bXGR4XmBkZoRfY2NeWWlya25rcneLfXN3hIF4eHyJcYOEfX2Ie3SLiIiVh4x/f5hzaHVxeW2Me250cIBXcHl2eXFkdniGjGl2gIpygJ2Imaeco5KEfHCMlHh5ip2DhJ+NjnyVjYCZh4R7cndwc2pvgWtpbHx0XmB4dntwdHpnYGV869q1ycPciXNsc4B2ipqIjWmXj46clJKBiHCFiKCOhIqVioyXk3yNkoiCiI96kYuGj4KAd3iDhHKHgpOblpSYho12h39xhoOKiJujhJWNn4SJYYOVj4WIhomMh4CHaH2Uf32ChYmOjoJxhn5/cndndnJpdHdsWox9koKFfYCDgISKgnZidW2KgpGMg3+Ak5J+boNteoiRiJOFfYJ+gZOUkZeJb3J6jIZ1bHBqcXd/XnNoblxpdV9SZHFoZlNfb3d1YG9gXWiCcXJqV2dpY2lYbVdbdUxKTGVmXmFyc4VoW1xleV5eZGd6YWRfXVlrbmVuanR3in5zcoF+e3Z6h3SFg3x/h3d2ioWPmIKNgnuTdmx3dnl4k3VueHp9WHmFcYBvZ3h2kYJkdoaFcYqWhpmhm6KKhnNvkotydo6bfYmZiIl7n3+EmX+BeHF0bm9kcn5oZmx3d1tfeHt6cXF/aWFnYX/Vto6Rp3hucXd7cZKQjYdqmI2Im5GLhntoh4uZhoGSkIaGl417jIyAgImNe5CNfomFenV7g3txhoCVmY6SlIKJdYSIeISAjJWeoIeWkKB/iGF/k4eDh4OJjX9/gmZ9kYB+f4KMj5B/bYN8gnRrbXd1dHd2a2ONgY5/hH98hH+FiH5wYHRyhn2QjoN9gJKKenGEZ3uFjIiNhHyFf4GVkJGThW9weYt/dG1uaWp4fGFnaWlYa3VaUmlyaWJQYnJ5bWJlXlpqg25zYlxnX2VtX25UWm9OSE5mZFxmbnKAa1pbY3NfXGNsd2RlXV1abGxibWpzdoaAcW9/fH10eIZ4hYN8gId1eYmBkpV8iYZ2iYFweHl7hJNvbXuAdl6Df3SBbWl6c5RzZ3KIfXKSkYSan5ughoZ1dZR+bXaTl32HkIOKjZl8jJp2fnZxb2xqYXR8Z2JpdXlaYHd7eW1xfmVjaGhXnY9fcnOXvMSEdnGUiJB+cpaLhpuSjIdyaoiPloB7lIyBhJqMfIqFfHuJi3+UiHWJhnZ3fYFydYaBnpSFlI+Dg3KAinaFfIqanpmHlY+dgYlmfZOCfoSDiYlygX1mfox8eX9/h4uPfWmAfYN2Zm95eHN3c2xrjoWKgYqAeIKBhYN/a19zeXt+jouGfIKQgX5zgml6hImMhoV5hH2CmY6RjH5ubXuIfXZzbmdme3ViW3BiV25xU1Nuc2hhTmZ0eWZgXl1Zb4Bvc1llYl1qbmBwT1lrUURTZ2Baam5tfG5ZW15tY1pib3dkZ1xdYGtpY2xqc3aBg3Btf3x/dHWDeoOCfIGFdn6IgZaQeISLdIGIcnl5fo2Qb297gHFpgXh6fm1se3WVa2p4hHRsk42Fn5igmYSIbn2Mdmp4l45+gImClJeJeY+Wb3pzcGxpZGBzemhfZXF6WmByfHlncXphZWWPsbJ3S2JapdrQlnF7kIqQeH2TioSYkYyFbmuFkpF6eZKGgYSYinyGf3h3iYqEloBvi4hxdX56anmFg6WQhJONg39vf4R3hHmHnZqVjJSRlYWIcHuSgnyCg4iDboF3aICEeHJ/gIOKh3xlfX+EdWNwc4BpeXBvdZmNhoOKfHZ4gIV6gWpccn9zgomGin6HinuJcoJucoWIj4aGc4R6gpqOjoR4bm9+hH92eWRnaXtwXlh2WlhwbE5XcXNnYEtsdnVhXlxaWXR9c29XZ11manJgb05XaFI/WWZeWnBraHpxW1pZa2VaY3F5X2hcXmVsaGVraXF3f4hvbH9+gHVvgnuAgn+Cf3aBhYiXinGCjXF7hnx6eYSTjHVqen9rb350f31vcnt6k3BvgX94Z5KLg6GZnJKChWaGg29neZWIfX6EgZiJgXyNjGl4cmtrZl9gb3ltX2JveFxka4J6YXF2X2Vl1Oq9izI6PouOf3F4hYiOjXaDlox+ko2Mf21shY2MdXyPf4WBlYh8gnhudoeEg5d3boiFbHV7dGZ5goOni4KOi4R+boB1d4V6iJ6RjZGTk46Lh397koZ3foOMgmt/cmiAfnhtfHyBioN3YXmEgnJkcWh+bnVxdYKbi4B/hYBzdX6Bc4FvXG5/dXmLhIt7h4F9iXl7cm2JhJGFjHOCeoCXjIt/dG1rd4CAdHRcaGd2b1dWe1JZcGRMWnJyZVtJcXhvXFtbWV10fnRoWWJbZ2ZuY2lNV2ZRPV5lXF11ZV90b1pZVG9kWWRxeVpoXV9mbWdpa2lwd32ObWmChH55boB8fIF/gnp1goGNk4RwgItud32Ae3uIk4l/aHt9anN7coZ7c3d+f4x6eIR9fGyMjYSbnZaMgIBsjX1raH6Ni3p+foOTgn59iohrdXFnaGJbYmdzb19ha3NgaHCIemJzdF5jZJugj25cNVqvtXRpgIh8koZ1hZaGc46KiXZwbIWDh3V5iXiJfJOIen5yZ3WJfn6Yb3GGfmh2eW5meYeEpIeAhoyJfm5/doCCfo2aiIOVkpmKi4WJfI+IcHp9hHtofmxqgHt6anp3goeAcmB2gX9yZHJndoJtdXuGlZGBfIKBb3d6fHV/bVlwgHd1jIOHeIh2g4l7eXRvioGRgoZzf35/lImJem9uam6CgXRuXWdkcnBQWnpNW29cT1xyb2RVS3N4aVdZWVphcYB0YF1dYGdkaGlmTlpoTUBgY1tgdmFcdGxYV1N0YVpkb3JXal5iaGtnbWxocHd8k2xohIp8fHB/fnuBf4J6d4B/iouDcXuIb3F3g397io2Pg2p+e213eHaKd3x4gIKHf4N+fnpthIyImKONhIN6dYt4a2yDh5B4fXqBkYCAfoqDcHJxY2ZeWWZfb29fYGdwZmpviXRhdG9bYWRqdnuAv5ympMi4cYWDcpJ8eIaTg3OQi4dxcm+De4N0dId0iHeUiHl5cGN3h3qAk2lyhHZnd3VjanyCiJ2Bf3+Oj31zgHSFeoGSkIN6l4+WkIiCiHuIiGt4eX50Z3poa395c2l6doCDfWhgd4d+a2p0aHuAaXaBjJGUfnp+fnB8dnx0f2JWeH5zc4uFgn2EcYeKeHlxcYSDjoB/en59do+Gg3ZpcWltiIFxb11nYXFtSWR1S11tVVRac25iUU90eGFSWFhdYW+Cc1thXWhlZWRrZFFbcElDY2BbY3BeXHZnVVZVd15bZW5oVmteYWlnZW5uaHB3epNtaYiMeX1ye355goGBfHZ9g4iGg3B3hHJtd4KCfoqMk39wgHt3eXqBi3SDeH+BgYKEeoB1b36Ki5ueiH2FeneFe2d0hYyPeX5/e4iFg3aPgGdwbl9kXFhlWW1yYWBgcGxraIluYXRpWV5kboB3qdqqx4aHsnGJd2+MdXuGjoB6kol/dHN0fneAcHF/bYR0lIZ4dWtgeoJ5iY9mcYRwZ3ZuW218gJCTf4B5kZN+eXxuiHeCkoyFdZeLko+HhYZ7f4RsdHZ+bWd2ZG17dW1pd3Z/f3xhYniFemh1dWJ9e2d1ho6NlXt0gHZxgHt9bYBaV3V/cHaFiH+Bem2JhnR6bHaBhIV/fH55fHSLgn5zaHRlbouDbHNaaV50ZEdtbUtaYVdWVndtYlBSdHZYUFZYXmFxhG9cYGNtZGReb2NVXnJGQmVfXWZoXVt6YlFVXHVbWmdrYVZqX2BuZWZrcWhwdniOdGuOjXV+dnh+d4GDgXtzfYOIh4NvcoB0cXV+hYKJjop7d4B4g3t8hYd4h3x9gX6EgHt+c3Z5jI6gjYl6iXZ0g3hefYWYi3iGg3SFhoR3iXpibm1cYltbYVZpc2NgW2dub2aHcWFxZlddY2x/fMrOh7mham1timxxhHF8g4l+e5GEeXhzeXV1e2psdmOEdZKCd29mXn2CeouKZXKCa2pxY1hteoWbiIKBc5eUeH99b4pyhIuMiHOYj5GJhouDe3l9cHBvfGZocWJteHFqa3F4fXx6XWV5gHdpdnhmgndndIeMjpR9codqb36BeW59XVlzf251gYt8gm9wioBxd2l4gIKAgnd+c3t1h317c2dzYW6LgWtyWGpedltHbWpMVlReU1V7a2FPVHVyUFFUV15idIVpXWBsamZjWW5hWWRwR0BnXGBmXl1We15PVWRwWltqaF1XaGBecmZrZ3FncHN3hnhulYp0f3p4fnmDh4B1cn+GhY6DcHB7eHZ1eoaFh4yGenx/dIt+fYaEhId/fn59h398eHZ4eJGTn3+MfIttdX94ZIKGlYVzkYpvhYWBeoN0Y25qWV9bXF1UZ3JkYFhkcXJmgXNia2VXW2Bqf3e+rnugtm5ic4Zoc3txeYGEe36Mfnd3cnZve3Zlam9gh3WOgXNqYl5/eHmLhGZxf2hra1pWb3eJo4GEf3GZk3KBeXaEb4KDkYh0lomNiIWJhX14dHFuaHhfamxfbXZqZ2preXd6dlpnfXx4ZXJ+boR0ZXWFjYaWf3CMZ2t6hHVudWJdcX1sdX2MfIJmdod9bnFpdn95f4Bzfm17fIJ7eXFmbGJtiX1sbldqX3ZVSmlqTlFOaE1Ye2hhTlV2a0xRVFVfZnWDZl5hcWhnYldpXVxsaEpEallhZFdZVXlZTVZtallda2RcWWVjXnRmbGRxZ3JwdYF4cJmFdn9+d398hYd9dXOCiICVg25zeXt6c3KFh4mIg3mBfnWPfnyEio6EgoR7fouDe3Z7d3eanZd6ioKGaXZ9e2yDhJJ/cY6BcIWCfoF/cGZsZ1hdW1xbU2RwZF5XYnJ1aXVwZWViV1xcaIBwb3KAc4lkZHh+aXR1c3KBg3eAhHl2c3Vua3pxYmdrZ4Z0jYNuZl1ffXB7iX9pbXlnamRVV3JvjaZ8hHt2lpF0fXN9e299fJGGeJp9iIaDhoN9dW9xbGd0XGxnXmx0ZGdlaXpve3JZZ4B2dWhwgXiCdmJ3hYt8lIFvjGpte4JxZ3NmYW56Z3N4i3x+YneDd2pscnZ7cXt6dH5nf3+AeXdvZGZiboV8bGtWaWJvUkpoak9LTm9HXntmYU1VdGNKTlNXYWp2fmVdZ3NpZmBWY1djcF1MS2pYY2FVVFVzVkxYdWRaXmtgXFpjZV92Z21icGlzb3J/dXSZgnd/gHd/f4aFen10goR+l4Vuc3R8enRxhIWPgYB6i3Z0kH98gZWOgIWEfX6Mhnt+gHZ7o6WKeYiGhGt1fHp1g4GLem6Ec3mEfYGDdW5qaGVWXVtaWlNibWRbWGFze2lobWlgYldfW2qAamtwgGdrYGh5eGpzdHNtg4B6f3x1dW56aGp5al9lbmiBdpCEZ2VYYndqfod7b2pwZ2ZdVVhvZ46od4F6fJGOeXZxf3B0d3qQgXmWdYaDgIWIdmpxdWdnbltsY11tcl9nYWp4aHttW26CcnRqb4F+endhd4WEeI+Fc4hyb3mAcmNxaVxxeGRydIl8eWN0gHFoanp1cm15eHZ5ZIR8f3l3cWRkY258fWtrVWhhZVJKbGdPR1FrRWF4Z2FNU3FdSk1UWmVrdnplX21xaWRdVmBWbm5XS1NoV2VeWE5VbFRKXHlfW19rXV1bY2VgeWhsYG9vdW5weHV6mH13gIF6gICHhnp4eYJ+gZOEcnV0f3l2dISIkX2AfJBrc5WAe4KfhX6HfYB/hoKAint2hKuff3qIiINrcoF5dYB/gXRuhm58gHOKgGpvbWRkWF9aWVpUYWpnW1pedIJpXm1sXGFXXFxsgWVydH1paVxrdnVnc3ZxbIR7fXx4dXJseWdpeGZdZXNoeneTgWNjVGVwZ4KFd3dnaWpgV1ZZZ2OPp29+d4CLjntxcn5oenB7jn14kHKEfX9/hm5kdXJkZ2dcamFcb29cZ19tdWR6aF10gG9ya3J8fnV2YnSFi3uIh4GAeHJ1f3VhcG1bcnRjcXOFfHVlc4BtYW17cGtqe3l2c2aGdnt7dnFlYmVtcn5qbFRoXVxUS3JiUEZWYUdid2dhS1RvV0pMWFhna3V6ZGVucWZkWlddWHZlVEpcYldnWFlJV2VQSGJ4Wl1fbFteXGFjXn5pal9udHhtcG52g5d5coGAfH+JjIZ+dXWGeYeMfXR2dYJ5enqCjI59foSJaXOWgXqKnX1+hXqBen98hohzcY+tjHt7h499ZXGHeXN8e3VyboVse35sj3picG9iZV1lVllZV2Nma19dXHKFaFhwblteWFpcbHtjcHd2bWJabHNzZ3R1b2yDeH6AeHdubnRkaXRlW2d1ZnZ2knlfXVJmZmqDgnR+YmRpXFRYXmJjj6RoeHSDhpB5bnB7aXlufIZ8dopzgXh8eH9oZHZsYGZfXmleXHNrWWVdb29iemVbd3xrbm5veHlzdWRzg5J+h4OJe3Zwcn5zYnhkXHBwYnFygn10Z3KAZV5ud2llaHp8dW5vgnV0fXRyYl9mbm59ZWlUZ1hXU013X1FKWVhIYnVkYUlUbVNKTVpXaWxxe2JsbHNjYlpaW2F3XFNMZF1YaVNXSFlgTUZpdVheYGxbW19iYlyEaWdhbnh5bG9qdoGQeG2DfoCBk4iEgXZziHSMhnRyd3aCd3x9foyQgH6TfnB3lYN8mZJ5gIB4en6AdIiDdHCZont6f4mUeGR1h3hzeHVrc25+a3h8cJFyXnBvYGdibFRaWldoY21mXFtxiWVTcm5bWlhYYGx2Y2l1amleWW1zcGxzc3NphHx/gHx2b25sZGlxY1trcmR1do5zW1dTZWFygH9ygl1iY11TWmBcY5GfZXJxhYSRdGxse25wcXt9fXKBeIBzenp6Y2V1aF1iWWBnWl52aFdiXW9oYXdgW3t2aWpybnhzcnVocYKVg4d+hHZzanF9bmZ3WF1sbmNyc4F6dGdvfltgcHJiYGtyfm1tdX9zcXhrcGFcZWxsemFnVGZUVlFQdVtRT1hRSGN0YmBGVWtQSVBaVWtranxlbW5xYltaWFlscVdSUGdXV2hTVEZZXE5IcnVYX2NtY1hgYGFdi2pjZG15eGtwaXV5hntrg31/hJp8goR5fIduj4Zxbnd6fXSCgnyLj4KCl3R3gpOFgZ+JdYGAgXR/gnGHgnVvopdze4aLhntld4pubXpuZndwemtzdnKMa150bmFnZWtSXVtVZ2Fsa1pccIxkT29uXVZYVWdpdGhidGVlXVltdG1vdXR4aoZ8f3yIdo9zZGRrbmFcbm1jc3iHa1pUVmNkeH19cYZdY19jVFpgWWOVlWNucIOFinRraHxwZnR4dX1tenV2b3p+dV5lcmNbXVZhY1hhdGVVX2BtZGFxXV1+cGhpc3F0cHV2a22Ek4GJe4Vxc2dvfnFzb1RcZ2tmcXSBd3NjbXZWYnJsW19wZ35mbXd+c3Nza21gWmRqandfZ1RkVFVQVG1XUVZTT0dkc19hRVhpT0hXVFZtaGR8aWt3a2JXXVVbdGRTUldpUllmVFNIWlpQTXh2Wl9lbGlZYmBeXo5uYWZreXVub2l2dn9/bIOAfYeXe4CHgYl+a5OIcmd0gHt1gIJ9iI5/i5NyfIqRhYefhnt/hoxzgYZzfoJ2bqWMcoGNi3Z3bXqMYGR7cGZ4cnhsbXF2gmdke2xjZmdoU19eVWdfbG5bXm2NaE5pbWBUVlNuZ3RrZXhkZFxYb3NscXp3cmyHe4B3nHp5a2FlbG1eYG9qZXF5fmdaVlhgbHh8e3CEX2JeZ1ZYX1dkm4hia3GBh314bGt5blx3c217anZ0b297gHJYaW1eWFxVYWJXZHBjU15haGFibFpgfmtma3N2b213d2xphYx/iXuIbXFmcX1uc25jWmFpaW90gnRzXmltU2VxZVVjb2N7ZHJ3fHdrcG1rYFlhZ2h0XWVWYVVSTlhlUk9cT09IZHBdY0ZZaU1JX0tYbWRfeGhufWRgVV9UXXVcVFNgZ09dYVVTSlxZUFl0dV1fZWxoWGNhW16NcWNnanhxc25odnR6g3KCg3qIjn58iYeNeW6QinRsc4J0f3+HhYaShJWPeX6Mj4eRm4SAfIyFc4CBc3R4cm+Tk5OTk5OTk5OTkpKSkpKSkpKSkpKSk5OTkpKSkpKSkpKSkpKSkZGRkJCPj4+Pj4+Ojo6Pj46OjY2Njo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo2NjYyMjI2NjY2Njo6Ojo6OjY6OjY2Ojo6Oj4+Pjo2NjY2Oj4+Pj4+PjoKAfnp6fX5+fX1/fn59fn5+fn5+fn+Af4CAgIGAgIB/gIGBgYOHjI6Ojo6NjY2NjY2NjY2NjZKSkpOTkpKSkpKSkpKSkpGRkZGSkpKSkpKSkpKSkpKSkpKSkpGRkZCQkI+Pjo6Ojo6NjY6Ojo2NjY2Njo6Njo6OjY2NjY2Njo6Ojo6Ojo6NjYyMjY2MjIyNjY2Njo6Ojo6NjY2NjY2Njo6Ojo6OjY2NjY2Ojo6Ojo+Ogn99ent8fn59fX59fn5+fn5+fn5+f4B/gICAgICAgH+BgYCBg4aMjY6NjY2NjY2NjIyMjIyMkpKSkpKSkpKSkpKSkpKSkZKSkpKSk5KSkpKRkZGRkZKSkpGRkZGQkJCQj4+Ojo6OjY2NjY2Njo6Ojo6NjIyMjIyMjY2NjY2Njo6Ojo6Ojo2NjIyMjIyMjIyNjY2NjY2NjY2NjY2NjY2Njo6Ojo2NjY2NjY2NjY6Ojo6Cf3x6fHx9fn19fn19fX59fn5+fn5+gH9/gICBgYGAf4CAgICDhouOjo2NjY2NjIyMjIyMjIySkpOTk5KTk5KSkpKSkZGSkpKSkpKSkpGRkZGRkZGRkJCQkJGRkZCQkJCPj46Pjo6Ojo6Ojo6Ojo6Ojo2MjIyMjIyNjY2OjY6Ojo6Ojo6OjY2MjIyMjIyMjIyMjY2NjY2NjY2NjY2NjY2Njo6NjY2MjIyNjY2Njo6OjoN/fHp8e31+fH1+fXx9fn59fn5+fn5/f3+BgYGAgICAgYCAgIOGi42NjY2NjIyMjIyMjIyMjJFtZmdnZ2dnfYWEhISEiF0tMDAwMC1GoaGhoaGhoJqZmpqampqKg4SEhIOEd2VnZmZmaFxDREREREFSzNrY2NjY3Itpbm5ubm9qZmdnZ2dmb4SDg4ODg4OLjIyMjIyMjY2NjYyMjY2NjY2NjY2NjIyMjIyNjY2NjY2OhX19e3t6fX58fH59fX1+fX1+fn5+fn9/f4GBgYCAgICBgICAgoWKjI2MjIyMjIyMjIyMjIyMkWdfYGBgX155g4KCgoKGUxgdHR0dGTekpKSkpKSjnJycnJycnImBgoKBgYJyXV9fX19hUjQ1NTU1MkbY6ufn5+fri2JnZ2dnaGNfX19fX15qgoGBgYGAgYqLi4yMjIyMjIyMjIyMjIyMjY2NjY2MjIyMjIyMjY2NjY2GfH16e3p8fXt8fn19fX59fX5+fn5/f3+AgYCBgYGAgIGBgYGChYqNjYyMjIyMjIyMjIuLi4uRjo2NjY2NjY+QkJCQkJCMh4eHh4eHiZOTkpKSkpKRkZGRkZGRj46Ojo2NjYuJiYmJiYmIhYaFhYWFhpOUlJSUlJWNiYqKiomKiYiIiIiIiImKioqKioqKi4uLi4uLi4uLjIyLi4yMjIyMjI2NjIyMjIyMjIyMjY2Njoh8f3l7ent8e319fX18fX19fX5+fn9/f4CBgYGBgYGAgYCAgYKFioyMjIyMjIyMjIuLi4uLi5GSkpKSko2RkpGJh46KkJKSk4+Ojo2RiI+RkZGRkJCQkJCPj4+Pj4+Ojo6Njo6Ojo2Njo2Njo6Ojo6Ni4uLi4uMjI2NjY2NjY2NjY2MjIyMjIuLi4uLiouLi4uLi4uLi4uLi4uLjIyMjIyMjIyMjIyMjIyMjIyNjY2NiX59eHh5fH18fX19fH19fX59fn5+f3+AgICBgYGBgYCBgIGCgoSKjIyMjIyMjIyLi4uLi4qLkJCRkZGPhI6QkIaKj4WNkJCQh4mHhomFiJCQkJCQkJCQkI+Pj4+Ojo6NjY2NjYyMjIyMjIyMjIyMjIyMjIyMjI2NjIyMjIyMjIyMi4uLi4uLi4uLi4qKiouLi4uLi4uLi4uLi4uLi4yMjIyMjIyMjIyMjIyMjIyMjI2Lfnx3dnh7fXx7fX18fH19fn5+fn5/f4CAgIGBgYGBgIGAgIGChIqMjIyMjIuLi4uLioqKioqQkJCQkIqFjoiOhoaPiY2QkI2Eh4aFhYWHj4+Pj4+Qj5CPj4+Ojo6OjY2MjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMi4uLi4uLi4uLi4uLi4qKioqKi4qKi4qKi4uKioqKi4uLi4uLjIyMjIyMjIyMjIyMjIyMjIt+e3d2eHt8fHx9fX19fX1+fn5/fn9/f3+AgIGAgYGAgYCBgYGEiYyMi4uLi4uLioqKioqKipCQkJCPhYOMjpCOiYyJjZCRiYOFhYeEhoiPj4+Pj4+Pj4+Pjo6OjY2NjYyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIuLi4uLi4uLi4qKioqKioqKioqKioqKioqLi4uKioqKiouLi4uLi4yMjIyMjIyMjIyMjIyMin18dnZ4fHx7fH19fH19fn5+fn5+fn9/f4CAgYCBgYGBgIGAgYSJi4yLi4uLi4qKiomJiYmJkJCQkJCMhoyJjoeFjYmOi4yOiIeGhoiDio+Pjo+Pj4+Pjo6OjY2NjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyLi4uLi4qKioqKioqKioqKioqKioqKioqKi4uLioqKioqKioqLi4uLi4uLjIyMjIyMi4uMjIyKf353eHp7enp8fHx8fX1+fn5+fn9+fn9/gICAgICBgICAgYCBhIqMi4uLioqKioqJiYmJiYmPj4+Pj5CMjouPjIqPjI6MjZCOjYyLjomOj46Ojo6Ojo6Ojo6NjYyMjIyLi4uLi4uLjIyMjIyMjIyMjIyMjIyMjIyMjIyLi4uLioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi4uLi4uLi4uLi4uLjIiAfXh5enp6e318e3t9fn5+fn5/f35+f39/gICBgICAgIGBgIGEiouLioqKioqJiYmJiYmIiI+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pjo6Oj46Ojo6Ojo6Ojo2NjYyMjIyLi4uLi4uLi4uLjIyMjIyMjIyMjIyMjIyMjIyMjIuLi4uKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLi4uLioqKi4uLh4B8eHp6eXt8fHt8fH1+fn5+fn9/fn9/f39/gIB/gYGAgIB/gYSJi4qKioqJiYmJiYmJiIiIj4+Pj4+Pj4+Pj46Pj4+Oj4+Ojo6Ojo6Ojo6OjY2NjY2NjY2MjIyMjIuLi4uLi4uLi4uLi4uLi4uLjIyMjIyMjIyMjIyMi4uLi4qKioqKioqKioqKioqKioqKioqKioqKioqKiYmKioqKioqKioqKioqKioqKioqKi4uHgHt5eXh6fHx6e3t9fX5+fn5+f39+f39/f39/f3+BgYCAgH+BhIiLiomJiYmJiYmJiIiIiIiOjo6Ojo6Pj46MjI+Sj5COjo6Ojo6NjY2NjY2NjY2NjIyMjIyMjIuLi4uLioqKioqLi4uLi4uLi4uLi4uMjIyMjIyMjIyLi4uLi4qKioqKioqKioqKiomKiomJiYqKioqKioqJiYmJioqKioqKioqKioqKioqKioqKi4aBe3h5eHp8ent7fH19fn5+fn5/f35/f39+fn9/f4CAgYCAgIGEiIqJiYmJiYmJiIiIiIeHh46Ojo6Ojo6Ojo+MkJOQkI+Ojo6NjY2NjY2NjYyMjIyMjIyMjIuLi4uLi4qKioqKioqKi4uLi4uLi4uLi4uLi4uMjIyLi4uLi4uLioqKioqKioqKiYmJiYmJiYmJiYmKioqKiomJiYmJiYmJiYqKioqKiomJioqKioqKhYB6eHl5fHt6ent8fH1+fn1+fn9/fX9/f35/f39/gICBgICAgYSIiomJiYiIiIiIiIeHh4eHjY2Ojo6Ojo6Pj4+PjoyNkI2NjY2NjY2MjIyMjIyMjIyMi4uLi4uLioqKioqKioqKioqLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4qKioqKioqJiYmJiYmJiYmJiYmJiYmKioqJiYmJiYmJiYmJiYmKioqJiYmJiYmJioqFf3l6eXh7e3p7fHx7fn5+fX5+f39+f35/fn+Af3+AgICBgYCChIeKiYmIiIiIh4eHh4eHh4eNjY2Njo6Oi42Nj5WPiYyPjYyNjYyMjIyMjIyMjIuLi4uLi4uLi4qKioqKioqKioqKiouLi4uLi4uLi4uLi4uLi4uLi4uLi4uKioqJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYR+eXt5ent7eXt9fHt+fn59fn1+f35/fn9+f3+AgICAf4CAgICEh4mIiIiHh4eHh4eHh4aGhoyNjY2NjY+MjImKj42IjJGPjY2NjIyMjIyMjIyLi4uLi4uKioqKioqKioqKioqKioqKiouLi4uLi4uLi4uLi4uLi4uLi4uKioqJiomJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJg355e3p8e3p7fX17fH9+fn5+fX5/fn9+f3+Af4CAgH+AgH9/f4OGiIiHh4eHh4aGhoaGhoaGjIyMjIyLiYyKiIeJhoyOjJCMjZGOjIyMi4uLi4uLi4uLi4qKioqKioqKioqKioqKioqKioqKiouLi4uLi4uLi4uLioqKioqKiomJiYmJiYmJiImJiYmJiYmJiYmJiYmJiYmJiYmIiImJiYmJiYmJiYmJiYiIiIiIiYmCf3h7e3t6enx9fHx9f39+fn19fn9/f39/f4F/gIB/gICAgICAg4aIh4eHhoaGhoaGhoaGhoWMjIyMi4yOjoyKioeEiIuKjIuNjo+Li4uLi4uLi4uLi4uLioqKiomJiYmKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiomJiYmJiYiIiIiIiIiIiImJiYmJiYmJiYmJiIiIiIiIiYmIiIiIiIiIiIiIiIiIiIJ/eHp7enp6e3x8fX1+f35+fX1+f39/fn+AgICAf3+Af4CAgYCDhYiHh4aGhoaGhoaFhYWFhYyMjI2NjJCSjI2Ii4mJi4uLi4mLjIqMi4uLi4uLioqLi4qKiomJiYmJiYmJiYqKioqKioqKioqKioqKioqKioqKioqKiYqJioqJiYmJiYmIiIiIiIiIiIiIiImJiYmJiYmJiYmIiIiIiIiIiIiIiIiIiIiIiIiIiIiHgXx4e3x5enp8fHx9fX9/fn59fX9/f39+fn+Af4B/f3+Af4CAgIKEh4eGhoaGhYWFhYWFhYWFjIyNkY+PjZGJjIaJjIuIiImMiYeNjo+NioqKioqKioqKiomJiYmJiYmJiYmJioqKioqKioqKioqKioqJioqKioqKiYmJiYmJiYmJiYmJiYiIiIiIiIiIiIiIiImJiYmJiYmJiIiIiIiIiIiIiIiIiIiHh4eHh4eHh4WAenl9e3t7enx8fHx9f39+fn19f39/f35+f4B/gH9/f4B/gH+AgoSHhoaGhYWFhYWFhYWFhISLi46PjoyLj4iHiYmMjYWFjo2KiYyNi46KioqKiomJiYmJiYmJiYmJiYmJiYmJiYmKioqKioqKiomJiYmJiYmJiYmJiYmJiYmJiYmJiYmIiIiIiIiIiIiHiIiIiIiIiIiIiIiIiIiIiIiHh4eHh4eHh4eHhoaHh4eHhH55eX16enp7fXt8fX5+f35+fX5/f39/fX5/f3+Af39/f39/f4CChIaFhoWFhYWFhYWFhISEhIuLjI6MjI2Lh4mIiomGgoeNjoiKi5GTj4uJiYmJiYmJiYmJiYmIiYmJiYmJiYmJiYmKioqKiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiIiIiIiIiIeHh4eHh4eIiIiIiIiIiIiIh4eHh4eHhoaGh4aGhoaGhoaGh4eDfXp5e3p5enx8e31+fn5/fn59fn9/fn9+fn+AgICAf35/f39/gIKEhoWFhYWFhYSEhISEhISEioqOjYmIiIqKh4iHiomIioiIh4qGi5GPiomJiYmJiYiIiIiIiIiIiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmIiIiIiIiIiIiHh4iIh4eHh4eHh4eHh4eHh4eHh4eHh4eHhoaGhoaGhoaGhoaGhoaGh4J8eXl6eXp7e3t7fX5+fn5+fn59gH9/f39/f4CAgH9/fn9/gICAgoSGhYWFhISEhISEhISEhISKi5CPiYmJi4qHh4WHiYuKiYSLjYmOjYqJiYmJiIiIiIiIiIiIiIiIiYmJiYmJiYmJiYmJiYmJiYmJiIiIiImJiYmJiYiIiIiIiIiIiIiIiIeHh4eHh4eHh4eHh4eHh4eHh4eHh4eGhoaGhoaGhoaGhoaGhoaGhoaGgXt4enp4e3x7e3x+fn9+fn5+fX1/f39/f3+Af4B/f39/f3+Af4CChIaFhYSEhISEhISEhISEhI+Qj4+IiYuIhoeIiYuLjIuKioqNio6Oj4iJiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIh4eHh4eHh4eHh4eHh4eHh4aGhoaGhoaGhoaGhoaGhoaGhYWFhYWFhoaAe3h5eXh4enp8fX1+f35+fn59fn9/f39/gIB/gICAf39/gIB/gYKDhoiGiIaDhISEhIODg4ODkpKOioeKi4qLh4uNiYqJi4iHiouIio+SioiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIh4eHh4eHh4eHh4eHh4eGhoaGhoaGhoaGhoaGhoaGhoaGhoaFhYWFhYWGhn96eXh4eHl5eXx9fn5/fn5/fn1+f35/f3+Af39/f4CAgH+AgH+BgoOHjo+PjoiHhIWFhoaFhYWSkI6KiYmIiImKioiIh4aKjIiHiYmOkJGNh4iIiIiIiIiIiIiIiIiIiIiIh4iIiIiIiIiIiIiIiIiIiIiIiIiIh4eHh4eHh4eHh4eHh4eHh4eHh4aGh4eHh4aGhoaGhoaGhoaGhoaGhoaGhoaGhoWFhYWFhYWFhYWGf3l4d3d3eXp5e3x9fn9+f35+fn5+f35+fn+Af4CAgICAf3+Af4GBg4eOjo6Ojo6Mjo2OjY2MjZCQjomHhoiJiYeIiouIiYyJiYaKjY6PkYuIiIiIiIeHh4eIiIiIiIiHh4eHh4iIiIiIiIiIiIiIiIiIiIeHh4eHh4eHh4eHh4eHh4eHh4eHh4aGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaFhYWFhYWFhYWFhYZ+eXd5d3d6eXl8e31/fn5/fn5+fn5+fn9+f4B/fn+Af39/f39+gIGEiI6Ojo6Ojo6Ojo6Ojo2NkJGOi42JjIiIiYaHiYaIioiHi4yLjpCQiIeIiYmJiIeHh4iIiYmIh4eHh4iIiYiIiIiIh4iIiIiHh4eHh4eHh4eHh4eHh4eHh4aGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoWFhoaFhYaGhoWGhYSEhIWFhoaFhIWFhX55d3l2eHl4e3x7fn5+fn5+fn5+fn5+f39+f39+f39/f35/f3+AgYOGjY2Ojo6OjY6NjY6OjY2Qj42Ni46KhoiKhISLiYeDhYSDi4mLj42JjI6QkI+NjYyLjY6Pj42NjI2Nj4+Pjo6MjYyMjY2KiYiHiImHh4aHh4eHh4aGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoeHiYqKiIeJi4yNjo2LiImLi42OjYyJiImMgHl3d3Z6eXh7e3t9fn5+fn5+fn5+fn5/f39+fn5/f4B/f4B/f4CBg4aMjY2NjY2NjY2Qj4+Pj46NjI6KiYuMjIeFiY2Lh4aIh4aHh4uNjo6Pj4+Pjo+Pj4+Pj4+Pj4+Pj4+Ojo+Pj4+Pj4+Pj4+Oj46Oj46Mi4uJh4eHh4aIhoaGhoaGhoaGhoeLiYeHiIiLjY2Mi4yLjY2Ojo+Ojo6Pj46Ojo6Ojo6Ojo6Njo6NjY2AeHZ4eHp4enx6fH5+fn5+fn5+fn5+f39/fn59fn9/f39/gH9/gIGDhoyMjIyMjY+QkpOTk5KSjYyMjIqHioyKh4eJiYWCiouIiYWJjpCNjo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6NjI2NjI2LiYaHh4eHiYqLjY6NjYyNjY6OjY2OjY2NjY2NjY2NjY2NjY2OjIyNj4+OjY2MjIyLi313dXd5enp7e3p+fn5+fn5+f35+fn5/f39+fn1+f39/gICAf3+AgYOFj5KRkJGSk5OTk5OTkpKLi4uLiomMiouLiYuKhoeOjYiIjI6OjIuMjIyNj46Njo6Ojo2NjY2MjY2NjIyMjIyMjIyMjY2NjYyMjI2NjYyMjI2NjIyNjIyMi4yMi4yMjI2MjIyMjIyMjIyMjIyLi4uLi4yNjY6Sk5OSkpSRkJOVlZSTk5COjo6Oe3Z2d3h6ent7e31+fn5+fn5/fn5+fn5/f35+fn9/f39/gIB/f4CBgoSNkpKTkpOSkpOTkZKSkoqJioyJi4qJjIuKioiHiYqKi4mKjY2Mj46Nj5KUlJOUlJOTkpGSkI+Ojo2NjY2Pko+OkZGOjIuKioqLi4qKi5CPjoyMjIqKioqKioqKiouKioqKi4yLi4uMjIyKiouLi46RkpOTk5SUk5STk5SUlJOTk5KSkpKSk5F6dXZ2eHt7e3p6fX5+fn5+fn5+fn5+fX5/fn5+f35/f3+Af39/gIGChIuRkZGRkZKSkpGRkpGRiYmIiIqMiYiJiYuJhoSJhoyKh4ySkpKTk5OUlZWWlZWUk5OUlJSUk5SUlJSVlZWVlZWUlJOTkY+QkZKQjoyRlZWVk5KSjo+QjYqKi4qKi42OjY6RkpCRkpKSkpGRkpKSk5OTk5OTk5OTk5OTkpOSkpKSkpKSkpKSj3h1d3l6e3t7ent9fX19fn5/f35+fX5+fn5+f39/f39/f4B/f3+AgYKEi5GQkJCSkpKRkZGRkZGIiIiIi4uJg4eLi4yMiIeHjYyNkpSSkpOTlJWWlpaVlZSSkpOTlJSUlJWVlZaXlpaWlpWUk5SUlJSVlJSUk5OVlZWUk5KTk5OTkJGSkZGSk5OTk5KSkpOSkpKSkpKSkpKSkpKSk5OTk5SUk5OSkpOTkpKSkpGRkZGPdnJ3enp7e3t8fX59fX1+fn9+fn9+fn5+fn6Af39/f3+Af3+Af4CBgoSKkJCRkZGRkZCQkJCQkIeHh4eIiIiFi4+KjI6Njo+OkJWUk5OTk5SUlZWVlJSVk5KSk5KTlZSUlZaWlpaWlpaWlpSTk5OTk5OUlJOSk5SVlZSTkpKSkpOTk5OTk5OTk5KSkpKSkpKSkpGSkpGRkZGRkZKTlJSUlJSTkpGRkZGRkZGRkZGRkYx0c3d6ent7e3x9fX1+fX5+f35+fn5+fn5+fn9/f39/fn9/f39/f4GDhIqQkJGRkJCQj4+Pj4+Ph4iKi4yNjYuOj42Mjo6RkpGSk5OSkpKSk5SUlJKSk5OTk5OSkpOUk5OTk5WVlZWUlZWUk5OTk5KSk5OUk5KTlJSUk5KSkpKSk5OTkpKSkpKRkZKSkpKSkpKSkpKSkZKRkZGSkpOTlJSUk5OSkZGRkZGQkJCQkZCRinN0dnp8fHp7fXx9fn59f35/f35+fn9+f31+f39+fn59f39/gH+AgYKDipCQkZGQj5CPjo+Pjo+Oj4+Pj4+Pj4+PkI2OjpCRkpKSkpKRkpKTk5OTkpGSkpKRkZKSk5OSk5OSk5STk5OTlJOSk5OTk5OTk5OSk5OTkpKSkpKSkpKSkpGRkZGSkZCRkZGRkpKRkZGRkpGRkZGRkpKSkpKSkpKSkpKRkJCQkJCQkJCQkJGGc3V2e3x8e3x9fX1+fn1/f35/fn5/gH9+fX5/fX5/fn5/f3+Af3+BgYGKkI+PkI+Pj4+Pj4+Pj4+Oj46Oj4+Pj5CQiI2PkJGRkpKSkpOTk5OTkpKSk5KSkZGRkZKSk5KTkpGRkpKSkZKSkpKSkpKTk5KRkZKTkpGRkpKSkpKRkJCQkJGRkZGQkJGSkZGRkZGSkZGRkZGRkZGSkpKSkpKSkZCRkZCPj4+Pj4+Pj4+PkX9ydHh8fHx7fHx9fX5+fn9+fn5/f3+AgH99fn5+f39+f39/f4CAf4GBgYqPj4+Pjo6Ojo+Pj46Ojo6Ojo+PkI+Pj4+GjpCQkJCRkZGRkZGRkZGQkJCQkZGRkZGRkZGRkZGQkJCRkZCQkJGRkZGRkZGRkJCQkZGQkJGRkZGRkI+PkJCQkJGRkJCQkJCRkJCQkJCQkZCQkJCQkJCQkZCQkJCPj4+Pjo+Pj46Ojo+Pj4+PeHJ2eXx9fHp9fH19fn5+f35+f39/f4CAf39/fn5/f35/f39/gIB/gYGAio6Ojo6NjY2Ojo6Ojo6NjY2Oj4+Pj4+PjoiQkZCPj4+QkJCQkJCQkI+PkJCQj4+Pj5CQkJCQkJCPj4+PkI+PkJCQkJCQj4+Oj4+QkI+PkJCQkJCPjo+QkJCPj4+Pj4+PkJCQkI+PkI+Qj4+PkI+PkJCQkI+OkI+Pj46OjoyMjY2NjIqDiYhzc3Z4fX58eX18fX1+fn5/fX5/fn9/f39/f4B/f39/f4CAgH+AgH+BgYCJjY2Ojo6Ojo6OjY2OjoyNjY6Ojo6Ojo2NiJCRkI6Njo6Ojo6Ojo6Pjo6Ojo6Ojo6Pjo6Ojo6Ojo6OjY6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Pj46Oj4+Pj4+Pj4+Pjo+PjY2MjYyNjoyLi4mJiYiFhYSDgoKEgnR5fXp4dXJrZWltb2xmZmdncHNzd3l9fnl6e3x9fX1+fn59fn9/fn9/f39/gIB/f3+AgIGAgIB/f4CBgImNjY2NjY2MjYyMjIyMi4uLjYyMjIyMjIyGj5GRjIyMjIyMjIyMjIyMjIyMjIyNjY2MjI2MjYyMjY2MjIyNjY2NjYyMjI2MiomKi4uJh4KAh4iEgXt6gH57fXx8fXlzcnJycnV1cG1ramppZ2NkYV9bXF1eWFVXWFlTS0VJSkpLTE1PT0tgdHR3eX19eHp5e3x8fX5+fn1+f39+f35/f4CAgH+AgICBgYCAgICAgIGAf4OEhYSFiIuLjYyMjIuLi4yGiYqKioqKh4OOkJGNiouLi4uMiYmKioqKiouLi4eDi4qIiYmGhYWEhIeJiYWCg397fHl6e3pzcHFxcW1samdsbWdlZmVmZGNlZGVkZWVlZWRkZGNhYV5dXFpYWFdUUFFSU1JTTU1KSUZESEpHR0hHR0xOSWdzdXh5fXp4d3l8fHx8fn5+fn9/fn9/f39+f4CAgIB/gICBgICAgICBgYFnXmBjYWNucX17ent/fXd8fHZ4ent4eHpvcHt4eXt8e3h3e394dXd0dHZ0dHZ3dXFycW5wcnBnaGtsbm9tamlpaGhlZWRkZF9gYWJgYF5dWVhaWltdXV9gX2BfX19gYmFeXl5eWVldXF1bV1dWUlRSU1NOUUpISUZERUhMTEhGR0lLSklNbXJ0eHp7end3eXt6e3x+fn1+f39+f35/f35+gIGAf3+AgIGAgICAgICCgWdYW1pZXFtcY1xaXF5ga3FtcHBvbm5vbmtpbmxrbG9qaWtraWpraWdmZ2dnaWhnbWdqZ2hlaGdjY2JhYmBgXVhbW1dYV1RWUVBUU1NNSkxLTExOTk9UWFhXVVVUUlBQTU1QT05LTE1QUU9MTEpHSUlHSEhJSEhIR0ZHSEpKSEhISUlISVZwc3V5ent5dnZ5enp7fH59fX5/f35/fn5+f3+AgX9+f4B/gICAgICAgIGBbFtYVlZWWVlaWVlYVVZoamxubmxra2poaGloZGVkYlxiZl9fYGNfXF9dYF1eWl5dWVleYmFeXlpZX1xYV1NOTUxLS0tMSUtNTktKS0tMSktQTEtLRkdHSUlGR0lISUZFSEdGRkVERUVEREVJSUlHSEdIRkZLTUtJSUlIR0hLTU1LTExMVXFzdnl6e3l2d3h3ent8fn1+fn9/f39+f3+AgIGAfn5/f4CAf4CAgIB/gYJoUlRVVlNVV1lZWVdXV1tbYWNfXlxbWFZWWVZSVFJRUVVUU1NTUE1KTU5QUk9NUFFRUVFSVlZRUVFUUFBOTk9MSk1MS0xKSktLRklJSkxJR0pISUlFR0dGRkVFSElKR0ZHRkZHR0hKR0dISEpMSkpLSUlISktLSkhKS0pISUtMTU9QUEtUdHR1eHp6eHZ2d3d6enx+fX5+fn5/f35+fn+AgYB/f3+AgYB/gICAgH+AgmlQUlRXVVRWWVdYWFpbVFRTUlBRU1FRUU9OTlBQUU9MTlBPTk5NTEtNTk5QTU9QUFJRUE5OT05PTk9PUFFPTk5PTk5QTk1NS0lISEpJSUlJR0ZHR0dJSkhJSEhJSEhHSEdISElISUxLSklISkpJSkpIR0pMS0pJSUhKSktMTk1NTU9RTFVzcnN3enl3dnR2eHp7fX19fn5+fn9+fn5+gICBgICAf4GBgH+AgICAgICBbE9PTlRZVVVdW1lXV1hOTUpKSUZKT0xKSkdJSk1NS0pMTUpHSUlJSktMRkRGSktLS0hKTExMT01MTE5PT09NTk9MTk5OUFBPTE1MTk1MTEpJSEdJSElISElJS0xLS0pJS0pJSklJSUlJR0dKSUdJSUpKTk1OTEhJSklJSk1PT01MT1JOWXBwcnd4d3d0dHR3enx+fX5+fn5+fn5+fn9/gICAgICAgYCAf39/gICAgIFvS0pNTlFOTlVXVlZSU0lFQ0VFUkREQT5CP0RAQD5CREFAQURHRkVIRUJBQEBDQ0RFQUNFSEtPS0lJSkhHSklKSUlLSkxQTk1MTU1MTU1NTElIREZGR0ZGRklKSUlLSkhMSklKSkpJSEhKS0tIRkdJSklLTU5OSktPTUxLTU1PUE5QT1BgcG9yd3h2dHJzdXd6fX19fn5+fn9+fn1/gICAgICAf4CAgIB/f3+AgICAgXNQUE5OUE1KS1BSUE5RQ0RCQUZRRT1DPT9FSDk6Oz0/PTxBRkA+Ojw+PjxFRD0/RUE/QEFAREVHR0dHQkRERUZFR0dHR0pHSEpLR0NER0pHQ0RFQUFDR0hHSEdISktKSElMS0lISktLTU5MTUxMSkpMS0lLTU9PUFNRT1BQTk9QUlFNUGdwb3N2dXRycnR4eX19fX1+fn5+f4B+foCAgH9/gIB/f4CAgH+Af4B/gICCdlRVUVFQT0xNUFBOT09BQkFAQkE/Oz48Pj8/Ozg5ODs7OkA6Oz48Ozs8PEhMPT1BQT9CQz1BRERGQkZGREdJSEM/QEBAQUFCQUE/Pjw9PkFAQD8+P0BFR0dHSUtMTk1OTUxNTUpLTVBVU05MTlFOTk1OTE1NTk9OTk1LS05OTk1OTkxUbnBwcnR0c3Fydnh5fX19fn1+fn5/gH5+gICAgICAgH9/gICAgH9/gH+BgIJ4UVFSVFJTUVNTUVFST0BAPT4/PD8+QEE/PT45Ozo6Ozg5Ojg3Ojw5Nzg7Oz49Ozs6ODpAQEFCP0E/Q0ZEQkNDPzs+PkBDQ0E/Pj9BPkBAQj9APD9CQEFDRUVFSktQT1BPTU1OTExMT1JRUFJOTExPTUtOT0xMTEtMS0tKS0tKTU1LS1xxcXF0c3VzcXN4eHp9fn1+fn5+f39/fn5/gIGAgH+Af4CAgICAf4CAf4CAgXxSTU9RUFFSUlRSU1NOPDs8Ozs7P0BBQkA9PDk8PTw5Nzk6Ojk4OTo6Nzg6OTo7Ozg3ODk7Ojg8Oz1AQUA9Ozs+PD09QEJDQT9BQkE9Pj09Oz0/Q0RCQD9BREJFR0pKSkpKTE1MTExNTExOVVNLTE1USVBKSU1KSUpLS0pJSEdKS0lKZnJxc3RzdXNydnl5e31+fn5+fX9+f39/f36AgICAf4CAgICAgIF/gIF/gYGBgFZMTlBQTlJRUFBRUU44PT88PDo9PkFAQT8+PkA/Pj07PDw+Pz08PTs6PD09PTw8PDw7Ozo7PD49Pj8/QUA+P0E/QEBBQEBAPT8/PTw6Oz09PD9AQUJCQUBCREZGRkdGR0dISUtMTExLTEtKS0lKSk1MTEpMS0lISUxMSklJSElLR01tcHF1dXV1c3V4eXl8fX5+fn5+fn5/gH9+gIB/f39/gH+AgYCAgYCBgICBgYCCYUtPT05OT1BPT1BQTzo8Pjw9Oz8+PkFBPz0/QkNDQD48PT9APz89Oz49PkNFPz9APTs9PT08Ozo9PkFBPz5AQD9BPz89PD48PTs7PD0+QUA/QD5AQ0NEQkRFSEVFR0hISEdGSUpJSUlJSUhKSkpKTEtKSklJSEhKSktMS0lLSkpIVnBwcXNzdHR1eXp7e31+f35+fn5+f39/f39/f3+Af4CAgICAgIGBgICAgIGBgIJtTFBRTk9QTk5PUFBPPjw8PT4/P0A+QEA/Pz9DRUQ/PTs8QD46Ozo6OTc6PDk9PUA9Ojw7Ozw7ODk7Pz49PD07PEA9PTw8Pjs9PD0+QUBCQUBAP0JEQ0RFRkZGQ0VHSElJSEhJS0tMTUpKSUpNTUpLSktJSEhISEpJSktKSk5MSUlfcHBycnJ0dXZ6e319fH5/fn5+fn5/f35/f36AgIB/gICAgICAgYGAgICAgIGAgXZNTk5NTk5MTE5QT0w+QTw8PT8+QkM/P0FBQUJBQD08PTs+PTo6Ojw6ODo4ODo7PT8/PDs7PDs6Ojs+Pz89PDg6Pjw9Pj89Oz4/QEJDQkJDQ0FCQkFCQkRCQkRCRENGSUdGRkhJSUtNSklKSktMSkpJSkVESUlGRkhISUpKTEpGRmdwb3FxdHZ1d3t8fH18fn59fX1+fn9/foB+fn+AgH+AgICAgICBgYCAgICAgICBe05JS0tMTExFSUxOTTw/PDw9PkBAQUE7QkNCQ0A/Pz9APT9APz0+QUA9Pj0/PT0+Q0Q/Ozw9PkA9PT5BQ0A8OTtBPz4+QT07P0JAQkNCQENDQUNBPT0+QD0/QUFBQENFRUBAQ0JDR0dFRENGRUZGR0VEQEFHR0ZDRkRHSEpHQz5IbG9wcHF0dXZ5fHx9fHx+fn1+fn5+fn5+f36Af3+AgICAgICAgIGAf4CAf4CBgIF+UUhLTU1NS0pLTE9RQD8+PkFBQEBBR0FCRUNEQT9AQEA/PUBAPENjREBAQENAQD9AQD49PD1ARUFCQkZIQz08QERDQUE/Pj1AQT4+Pj88PkBER0VAPkBBP0BDRkVDQkJDQEJEREJERUFCPkFCQkFCQEA9QUJDRENDQUNFR0E/PVZwcHFwcnV1d3p8e3x8fX9+fX19fX1+fX5+fn9/foB/f4CAgICAgYCAgIB/gIGAgX5SSEtNTUxLS05OUlVEQkBDQ0FBQkBCQ0BAQUFAQUA+Oj49Pjw8R3tbPkNDRUA/P05hX0pAQ0VJSUlJTU1LRUNGR0hFR0VFRUREQ0E/QD4+QkZKSkdFRUZGRkpOTktKSUdHSEtMSkdHQ0REREVEQUJCQ0BDREVEREVERUZDQkFEZW9wcXF0dnV4e3x6fHx+f319fX19fn59f4B/f39/f39+gIGBf4CBgICAgH+AgICAfVJJSUpKSEpKTE9SU0dGRUdIREZIREA+PDs+QERFREBBRkJRZW5weXFFREREQ1d1homKflhHSEpMTE1PT0xIR0hHSElJSEhHR0hIRUNFRUVFRkhKSkZFR0lKTU9PTU1LSktKTU5LSUhHSElIR0ZFRkZGREZIR0VFSEhGSEdIRlFubnBxcnZ2eXt7e3p9fX5/fX19fX1+fn1/f39/fn5/gH+BgYGAgICAgICAf4GBgIB8UEhHSElGR0lKTU5OSkxJSUpLTE5KRkNBQkNGSkhJR1VlYX6FhYWAelRBQVV0h4mHh4aHgldJTE1MTU5MSkdHR0dER0dHR0ZIRkhFQ0RERkVEREhIQ0NDR0pKS0xMTExMTElKS0pKSUlJSEpISEdISUhHR0hGRkZISklJSUlIXW9vcXJzd3d6e3t6e319fn59fX19fX5+fYB/f39+fn+BgIGAgYCAgICAgIB/gYCAgHxNR0ZIRkVGR0dKS0pMTUxLTU5NT0tJSEhKS0tMS0tKXnqAg4OBfIN+Y05shIeGhoaHh4eHfFBLTEtIR0ZGREVDQ0BBQ0NDQ0ZGRUJAPj5AQUFAQkQ/Pj9ERkhERUdJS0lJR0hJR0lJSUpJSEZKSkpKSUpJSkpKRklMTEpKS0tmb3Bzc3V2eHl7e3t8fH1+fn19fX19fn59f39/f35/f4CAgICAgYCAgIGAgICAgICAfU9GRkdGR0hHRUZHR01NTUtMS0lHQ0NDRElLS0tLS0tkf4F+g4F9hIJ7gIaFhISGhoaHh4aKdUlJRkI/P0A/Pz88PDw+Ojo8QUFAPjw5OTg8PD07Pjs5Oz9BQkBBQ0NDQEFCRURCQ0ZISUhISExNTEdJSk1NTk1KSktLSkxNU2xvcXRzc3d5e3t7fH19fn9+fX19fX1+fn5/foB/fn9/gICBgIGBgICAgYCAgIB/f39+UUZFRkdJSUdEQ0VGTk1MSklIRT85Oj5ARUhISUhLS2Z/fn2ChIOBgoSEhIWFhoeIiIiJiYyOZkJCPTg4Ojo5ODc4ODk2NDc5Ozw6ODU2Nzc4OTc4NzY4OTs7PD5AOzk5OT09Pjs7PUFERUhKTUxMR0lIT1JRUFBOTE1NT1Fdb3BydHN1eHp8e3x8fn5+f359fX59fX5+f39/gH9/f4CAgICAgYCAgICAgICAgIB/f39RR0ZHSEpIRkVGR0hMTEpJSUdDQjU2OjxDQENHSEtHaoCCgoKDgoKDgoOEhomKi4yLiomKi4yJVDs4NjU2NzY2NjU1NzYzNDY4Ojg3NjU2NTY3Nzc3ODo3Nzc4OTs3Njg5OTg5ODc2OjxAR0ZJRklGRUZPU1JTU1JPUFBSVGVwcXN0dHd5e3x7fH1+fn5/fn19fX19f39/f3+Afn+AgICAgICBgICAgICAgICAgH9/flJISEhJS0lHSUpJSkpLREVIRUJANTc4OD06PUVCREVmgoKCgYODg4OChYmKiomJioqKiouJiYqBSDY3NjQ2ODg3NDU3ODQ2NzY5OTc2Njc2NTo6Ozo6PDg5ODk3Nzc3OTo5ODg3ODU4ODtBPT4+QkE/QUtMT1FQUU9PT1FXa3JydHR1d3p7e3t8fX5/fn9+fX19fX5/f4B+fn9/f4CAgH9/gICAgICAgH+AgICAf39+VEhHSUlMTUtKS0tMSUg/QEFAPDo1Nzk4OTc6QTo9Q1OBg4OEhISEhIaJioqIh4iIiIqKjIqJiYx6Pjo4ODs8PT45Ojs8ODk7OTo7Ojk5Ozo5PT09Pzs7Oz06Pjs5Ozs8Ozw7OTs8ODo6Ozo5OTk8Pzw9QUJESUpNS0pLTFdvcnN1dHZ4e3t7fHt9f39+f359fX19fn9/f35/f39/f3+Bf4CAgICAgICAf4CAgH+Af35URkVGSUxOTkxKSk1CPzo7PDo4OTk4OTk5OTo/PkE/WYSDhIWFhYaHiYiHhoaGiImIiYuMi4mKioxsPDs+QkNFRUFBQUI+QEJAQD89Pj5APz4/QD9APT0/Qj9BQT9BPz1AQEA+P0E8Pjw7Ojs6OTs/PTs7PT1BQUNBQkNBWHFxdHR0dnl7e3x9e31/fn9/fn19fX5+f35+fn9+f4B/f4CAgIB/gIGAf39/gICAf39/flJFQ0FHSk5PTElHSzo4Ojs5Ojo8PTo7Ozw7PT9DQkBnhYSFhIWEhomJiIiGhoaHiImKi4uKioqLiotePkRHSUtKSUZHR0RGSEdFQ0BAQ0VDQkBCQ0I/QERIRUNFREZFQUZFRkRGRkRAQj49QD49P0A+Pz8/Pj8+Pjo7PTxgcXJ0dHV3enp6fX19fn5+f39+fX19fX5/fn5+fn5/gH9/gICAgICAgICAf4CAgIB/f4B+UERAPUNIT01HRkJEOTc6Pjo8Oz4/Pz88QD5BQEVCTn6DhIWGhoaIiIiIh4aGhoeJioqLjI2MjIuKiohXR0xMTUtOSklLSElKSklFQ0RGR0ZEQ0VGREJISUtIR0dGSEdFS0lLSUtLSkNGQ0NEQkFBQ0JEQ0NERENBPTs9QGhwc3R0d3d6eHt8fH19fn5/f359fX1+fn9+fn59fn+Af3+AgH9/gICAgICAgICAgH+AgH9PQT49P0RMS0BCQkE5Nzw+Ozw7PkA/QT5BQERESENqhYKFhYeIiImJiIiHhoaGiIiIiYqMjYyMi4uKjH9QTVBNS05LSkxJSUpIS0dFR0hISUVFSEZGRUxMTUlKR0dISUpOTU5MTE5LSEZHR0VFQ0ZGRkZERUhIRkNBP0BMbHB0dXZ4eXl5fHx8fX1+fn9+fn19fX1/f35+fn5+f39/f39/f3+AgICAgIB/gICAgICAf1FBPz4/RkdHPTxAQDg3PDs8PTo/QD4/P0JDRkVMV36DhISFhoeHiIiIiIiIh4eIiIiJioyNjIyMjIuKjXFNUU9NTExLTEpJSEZKSkVKSEdLSkhKR0dHS0xOTExISElKTVBOUE5NT0tJR0lKSElESUhIRkZHR0lGQ0JBQ1VucXV2d3l7eHl6enx8fX5+f39+fn1+fX5+fn5/f36Af39/f3+Af4CAgICAgICAgICAf39/VERBQUJHSEI/OD9AODo7ODw9Oz1BPT5AQkRGR1FvhIOEhIWFhoeIiIiIiIeGiIiIiIiJjIyLjIyLi4uLi15SUlBNTk1LSkdGQ0dKR0xKR0tPTEtKSk1NTE9QTkhJS0xPUVFQUU9PSklKSkxKTEZHSEdGR0lGRUVCQEJCXHByd3h5enl5eXp6e3x+fn5/fn59fX19fn9+fn9+f4CAgIB/f39/gICAgICAgICAgIB/f39VRUNFRUdHRUQ7P0E7PTw5Pz09QEJHRkBFR0VKUXeGg4ODhISGiIiIiIiIh4eIiIiIiIqLi4uMjIyMi4uNfFdWUlJUUk9MS0pFRUZLT05PV1ZRUE9RU1JOU1RPTVNMUFNVV1JTUlBMS01NTUtOR0dKRkZISkRERUVCRENjcXV5eXp6ent6e3p6fH59fX9+fX19fXx9fn5/gH9/gICAf39/f3+BgYCAf39/gIB/f39/f1VGRkdHR0dIRj5AQj0/PT1CPkJCRlZNREtMSU5SeoaDhYWEhIeIiIiIiIiIiIiIiIiJiouKioyMjIyOi4uLZ1ZWa2FFUlFRUEo7O1FTUmB1XVVWVFZZWVNZWFJaZlBVV1pdUlRXUVBOUlBQUFFLTEtHSElIRUZJSUlISWpzdnl5enl6e3t8ent8fXx9gH59fX19fX1+f39/f3+AgIB/f39/f4CAgIB/f3+AgH9/f35+VEhKSUlHR0ZFPz9BQEVCQ0ZFREVMWFJMUlJQU1V6hoWHhoWGh4iIiIiIiIiIiIiIiIiIlJyMioqMfWGKi4uHbFtkVTpYWFhTUD9AVlVZXGRgVllicl5dV11aVkVRWVpcWV9UWWdSVVZYVFRWU09PTUpMSklJTE1LT01Tb3R2eHl4d3p6ent6e3x9fH5/fn1+fX19fn1/f39+f4CAgH9/f3+AgICAgH9/gH+Afn9+fn5WSkpJSEdGRERCQT9ITUlNUEtJS1BUU1JWWFZYV3eFhIWFhYWGh4iHiIiIiIiIiIiIiImcnaCPiY5nO36MiYqLem5wWFpbWlJTUldWVFpadYNZVX2QYVxYXV5XSVZdXVtbX1lIWVhZXF1YWFlXUlFNUFFNTU9TUVFVUmFzc3Z3d3Z4eXh6e3t8fX19f39+fX59fX1+fn9/gH9/gIB/f3+Af3+AgICAf39/gIB/gHh5fVlOS0lJSUZCREBBOlBRUVdYUFBPUVNUU1ZXV1dZbYGCg4WEhYaHh4eHh4iIiIiIiIiIiJaanJeIioFuhomIh4OKfmZZWVxZU1ZUV1JRV1ZjloBRZXJYWldfaFBgZlpbWFxoYkdPWmlnXFtcXV1XU05TUFBRVlZWVllab3N1d3Z2dHd4eHt7fH19fX5/fn59fn18fn9/f3+Af39/gH+AgH9/gICBgYB/gH1yfX9/b3R8XVNQT01LSkVDP0A7UFBaWltSU1FPUlJRVVJVU1ZfdXiAhYSEhYaGhoaHh4eHiIiIh4eIh4ORjomJiIaFiIiGfYB7XFBWWFRSVFJRUUxPTUtmeVpdVFlVVl1aTFRaVFNUXlpYV1dXemtYWlxcXlNQUFBJTk9XVlhbWmRxdHZ2dHR2eHl5e3t8fH19fn99fX1+fX1+f39/gICAf3+Afn56eHd2c3V7f3+AgHRrfn5rcnleXFZVU1JPS0ZDREFNXoNsVlJTTk9RT1FWUlNSUlRjZHaAgoKDhISEhIWFhISDhoaGhoeIhn6JiYiHhoOHh4d5bXFWSUtOTktNS0hKREZIRUM+U2NVf1JRUU5LUlRRTU9ZUU1OUVNVVU1RU1JQTkxMSENJSFJTVFpdbXJ2dnVzc3d7ent7e317fX19fn19fX59fn9/f39/gH99fX5+f39/f4B+e3Zzd31+fmR1fWlxdF9kXV5bWVVRTElMSWFsknRQUVNOUVJRUltSU1JRUlVVYnN7fH+AgYKBgX99e3uAf4OChYaHgoaGhoGEgYaFhnVfXUtDPkNDQ0NCP0RQQ0NAQz5CSEdWQElOTUddaVFIRk9GREVGSEdIQkNIR0hKR0RCQUNAT1BNUmR0dXZ1c3R1enx6e3t7fHx9fHt+fX19fn5/f3+AgIB/f3x8fX+Af39/f4CBgH12dHt/bWh8Z25xZmllZWJcWFNRUFVSc1dlW09PTkxRU1FVWVNVUVFUUk9WYGtsc3Z6e3h5dXJuc3RzeXh+foOAg4OCgIKAgoGBa0xHPj46Oz5APz8+PmtRS2FFRkhJRUI/SE1NR01RVUpCRT8+PD08PT0/PT9BQ0I/Pzw9Qj5KTUZVb3V1dnN0dnh6fHp9e3x9fX19fH59fXx+fn9/f4B/f39/enl3eHd2dnh7foB+fXt4dnx1YXhnbHBqbGppZmBbUVFaXFleSUpQUU5LTFFSUVRVVVdRUVdWUFhbYl1hZ21tbG9raGBucmptbHF1e3p9enh6fHx4d3hkQkBAQT06QkNBQUNCXF1Pe05PT05LTE1PT1BMS0xXTklHQEI8OTc3NTk5PTs7Ozg5ODk/O0FHPlx0dXV2dXZ3eXx8fH18fH19fn58fn19fX9/f39/fn9/f314dXd6e3p3eXh1d3t8eXh1eXdjcWhpcG1ubW1oZl5PUF5cWklHUFJRT01QUU5RUlNWWFNSWVROWVpbV1lcX19gZWBdXnF3a15gZ2t3b29sam9ubmxmYllHRkZIQkFGSUVFRkNNUlBhV1JYUVBTU1JVW09PUVZQTUlDRj46OTY1ODY5Nzk6MzY1Nzk1PEI9ZnR1dnd3eXl7fX18fHt8fX1+fnt+fn19f39/fn5+fn9/e3d1eX18enh8fHx8dHd2d3Z1d2tuaWhxbm9vb2prYFVXXlpXTUtUVFNQUVVPTFJTVFdYVFRYUUxXWVlWWFhWWFldV1dYaHNrXVZgdGthYV9dZGBfXllVUE1PTkxJR0pLSUhGQ1FQU1pXVFROUVNZU1xlVU9TVFFOS0lIQz9BOTk4ODk3ODg0NzU3ODU5OEducnV4eHp7e31+fX18e318fn5+en1+fH1/f359fn59f358dHR1e3hycW9vbnR4cXJzeHZ1cWZkZ3JucHBxbm1kXV9fWVdPUFdWVlNUVk9PVVZYWFlTVVRMS1NVVVVVV1BUVVdUVVJdbl5STllgW1ZZO0RVV1RbZkpMUFJST01NTk5OTEpGUFBVWVNUTkpOT1RTVFxWUlVTU09NTElISEY/Pz06Nzg3NjU5OTY3NjY1V3FxdHd6ent8fX59fnx9fXx+fX15fX18fn5+fXx8fX1+fXxydnF4eHJ1dXFxbnBwb3B1dnRuamRkanBwcXJwbmZlZGNcXlJUWlZXVFNWVFJYWFlZWVJVT0pHT1BPT01SSk9QUFBOTk9UTE1JUFBTVFUyPFhNSUFRPWNgUVNRUE5QUVBOTk1QTlRSUFJMSUxLT1FQUVJTVFFTT0xNS0xMSENCQT06OTg3NjtCNDU2NjtlcHJ2eHl7fHx9fnx9fH19fX18e3h8ent9fX58e3l9fH18e3B1b3d1cHV0b3N2cHFxcHV1dmNqZ2VXaHRycnFuaWlocFZWVFVYVVZVUldWVVpZWFdVUVNGRUFGR0dIRkpESEpIR0VITEhLSUdMTVBNRy9FX1I+M0A+am9hUlJRQEZUUU9QUFFOUU9QT0xKTExPUE5OUFFRTlBPSkxNTUtHRUVEQjs9PTw5PUc2Njc2RG5xdXd6fHt8fX18enx8fX5+fXt5dnh3eXl8fXp6dn17fHp6b3Fud3JwdnFtcHNwb3Bzc3N0ZmdgaFpXa3JzcmxtbWtuYmVQU1RSU1VPV1ZWWVlWUVFRT0A+Oz0/QEJBQ0BCRURBQEdIR0hGRkhKTUxER0NPUkM4RU5TXWdTUVNBR1VQT1JRUE1NTkxKTEtMTk9PUU1PT01ITEtJS0tMS0dGRkVEPEFBPjtARTs8ODlUcXN1eXt7e3x8fHt5fHp6fn58e3V0dXJ2dnp6eHpyfHt8eXltcW94cnF1bm5xcm9vb3Rzc3J1dGtnZ15lam1wa29xbWltY0xPTk1RU0xUVVRXV1VMTEtIPTk4Nzs/QT49PUFAQj0+RUhGREZGSUdLSkBGQUFARkhFSk9IUVJhXFFQUk5TT09QTExPTUtNTE1PTltWS01RT0dJSERJSkxMS0ZGRkQ/Q0M+PUJHP0I+QWRxdHd7ent7fHt6end8d3l+fnt7cXN0cHJzd3R4eHN6e3l2d2xxb3ZxdHRsb3Fybm5vc3ZydHNycmtsZW5zaG1ubWxtbGprSUxISE9RSlFTUVRTT0tIQ0U9OTg3OT9CPzs+QUBAPkFESUVDSEdJR0lFQkI/PjxDQkFHSURNT2FlUE1PTldLTE5LTE1NTExLTk5TZE5KTFJJSUlFQUlKTE1OS0dJRkJBQkA/RUZFSERMb3B3enp5e3t6fHp3c3h0eHx8eXpucXJtbm9ycnZyc3h8eHZ2bXBtc3B1dGxwcHJvb29ydnVyVlZucWdseYRqbXFybm5qaG9ISkNHTE1JTVBNUE9HS0U/Qj05OTk6P0I/PEFCQkFEREdLRkRJSUdHSENDP0I/P0BBPkRFQ0tOUVRLSklNVEZJSUpMSktLSUpMTU9QUlBLR0NMR0NDSkpMTU9OSUpJR0NDQ0RJSk1MSVpzbXh5eHp7e3l8dnJwdXJ0eXl2eGpxbmpsbG50dG1zdXtzdHhyb25xb3ZzbnBvcnBvcHN0eWpOYGdzanR8eWdvc3FpcWhlcUhLQ0ZISEdKS0lKTERHQj0+PTo6OjtBQj89QkJDQ0hGSkxKRUlJRkdHQ0M7QUBCPkBAQ0VDSU1PR0hLRkhLREhJS01ISkxISUpMSk1dUklIRE5HQkVLS05NUE5LTUpLRkdHSk1OUU5MY25pd3Z2e3h7en1xbWxza3B0dHR1aHBtamlra3RwbnR0eXByeXRvcnFvd3NvcXB0cnBydXR5a05WbXVscXt2aW5vaWp0aGRwRktDRkVHREVFRkVHQ0NAPTw9Ojs6OkBEQD5CQ0VFSUZKSkxGSUlHRkZDQjtCQ0M+QENDQ0VHTE5IS05IREhFSUxOTUdJTEdGRklJTE5LSkhFT0lDR01NTk1QTk9PTUxJSElPU1FSTlJmZ2Zyb3N4dXt6fGxoam9la3Btc3FmbWxoaWtsdG1wdXR3cW94dG90c3J2c3BxcnRzcnR1dXZ2WFZ1dWtvdHJrb3ZsaG1lX3BHSUNFRkVCQkFFQERCPj8+Ojs7PTs9P0NBP0FDRkdKR0pJTEhHR0dGRUM/PUVFQj5BQ0NDRUdISUdNUElGRkdLTk9LRkhJRkVERElJSEtJRkhQS0RKTUxQTk9OT1BOSkpITVJVVVJPV2RhYW1ncHJvc3l6Z2VoaGNpbGdxbGZsbWdpa2xzbXB2dXRwbnZyb3Nyc3V0cXNzdXRzdXZ2dnl2dXR2bGt1dW1ydnFsbmxlck1HRUVHQ0FAQUQ8QkE+QT06Oj0/Oz4/QEI/QEJFR0pGSkdJR0ZGRkVEQ0FBRkZDQkJCREVFR0dIRkxQTElPSkpMS0lGSEVGRURDSUhIS0pHS1JNQ09PTlFQT09OT09LS0tQVVdWVVRZYF9daWFtaW5ocnNiZWZmZGloZm5pZm1taGtrbXJpcXZ1c3Ftdm5vcXJzd3Nyc3R1dnZ2dnd2d3Z2dHd1a3N1bnV0c3Bya2tzTUZHRUdBQkBDRDxBQUBDPDg5PT46Pz0/Qj9AQERGSEVIRkZIRkVFQ0NEQkRJRkNHRUFFR0VGRkdFSk1LSFFNSktISElFRkhIRUNJSUpLTUtQU05EUlNRUVJOT05OUE1MTlNXVldYVlheW11kYGhiamlna19kZWZjZ2dna2dna21rbWxwcWd0dHVyc252b3FwcnR4cXNzdXZ1gpF5dnZ0eHV1d3hub3VvcnN1cXFpcHpNR0dHSEJCQkVFPEBDQkQ8Nzo9Pjs+OkBCPj8/Q0VGREZEREdFQ0VDREVGRkpFRUlHQkdIRkdGRUNGSkpHTUtMS0hKS0ZJSEpIRUtLTExOT1JUT0lUVVRRVFBRTU5RTk1RV1pWWllXWl5bWGFgYGBfaGVjYGRlZ2dqaGhqZmhubGxvbXFwaXV1eHJycHVwcHBydXZwdXN1dnV7fn14dnR3dnZ2d3BsdXBtc3Vub3NzeU1ISEdJREJDSEU8QEVCRDw4Oj4+PDw9QkI8Pz5BQkZDRUJCSENDREVGRkdHSUZHS0hDSUhHSUdGREhLSUdLSU1LSktMSExKTUtJTkxOTk9SVVZPTFZWVFFUUlJMT1FQT1RZWllcWlpcX19eYGNeXGFja2JgZGdocoVoZ2pmam5ucG9uc3FqdHV4cnNzdHJucHF2cnF1cnV1c355jn11dXZ2dnZ4cml1cWtydGxxd3F1S0lLSEpFQkVHRTxAR0REQDk8PkA/Pj9DQjxAPkFBRkNFRENIREZERkZISEZIR0lLSkVKSEhLSEZGTEhISEpITUxMTExJTUtNTk1PTFBQUVVWV09LVlZVU1NSUUxPUlJRVltbXV5bXV5gYGFgYmVdZGBmZ2BlaGpjc3NmamhnbHBycW9zc25zd3dwdXZ0c21vcnVvcnNwdXJ2cnSBd3V1dXd2dXdzZ3Rya3Fya3J3b3dJSkxJS0dCRURFPEBGRERCOz8/QUBAQERBQEI/QUNIQkVERkhFSUVGRUlIRklISkxISEpKSUtKRkpLSElKSkdLS01NSkpNTE1OTk9MT1BSVVdWTk5UVlVTUlFQTU5UU1JXW15eX11eYGBhYWFgY2RlYmRpY2Rpamd2i2xraWhtb3NxcHFwcHJ5d3J1dXRzbW1zc21xcm90dXRzcHN3dHV1d3Z1dXVlcXNrcHFqcnZwd0pMTExNR0NDQUQ8P0VFRUM9QUFDQkJDRUFDREFBRUdDR0dHRkVKRkRHSkdHSkZJTEhJSk1LTUxHS0lIS0tOUUtSUUxTTUtOTU5QUFBUT1dYWFtOU1FXXFpTVlBOVFVUVFhaX2JiX2RhX2BiX2BmYmFjaW5pY2loaG14dm1oaW1vc3JwcXJycnZ0c3Vzc3Nua3NxbXByb3R2cnJxdXZ1c3d5d3V0dWNtdGtvcGpxdHB3TE1MTExHRUFARD4+REVGQz9DQUVDREZDQ0VHQ0JIRUJISUlISEtGREtKR0hKSElLR0pKTktOTElMSEpNS1pmSmRcS2xSSE9NX25VbHNbcXBid2NSUGJ2dWh1Y2F2YFhucWJkdmluemZcbHRgbGtVX3d2aWpoaGZnbG1qbW9qbW5zcnBycnFyc3Jzc3J0cm5sdG9ucHFxdXVxcXN0dnZ1dXl3dXR0YGt0a3Bwa3FzcXlLTkpLSkZCP0BCPz1ERUZEQ0NCRUVERkJGRkdEREtFRUpMTEpMTUdHTkpISktHS0pJS0tOTE1NTExJTE1MW3NiZHBebGxVTU5lc15nZnFsbnRncGlfYVlubWJwcGJrampnb3F0ZXRub1xwdWdxTUtyeXZrYmFrZWVseG1rdmxucHNycHJxcHFycXJycnRybW1zbm5vcHJ1dHFzc3R1dXV0d3h2dHRibXVrcHBscnJxektMSUlHRUQ/QUI/PUJFR0JGQ0VERUVEQkhIR0RFS0hHS01NSk1MRkpOSEpLSklLSkpJSkxNTk1NTUtOTU1bcm9vbnBwbGtOUFFsWE1pYnRycGFtb3ZcWWxQW21tWnFta29teHh0c2lwXGBzbHFqVXV5eG9jXmtmYmdwcGppb3BwcnNwcXBxcXJycXFycnRsbXJtbW5vcnV0cXRydHV1dHV1enZ1dGVudWtwb2xzcnJ5SktHSEVFRUJBQj0/QEVHQkdESUVFREJGSUhIRUdLSkdNTU5LTU5HTE5JTUtISk1JS0lKSk5PTk5NTE5NTFxoZHVdbHFXbE5PUW5VWmtea2x2YWxkdFRlY05sWWxcdHBraWx4and1aHBdX3NraFdiY3d8b2NgZ2hhZGl0eWtvbnFzc3BxcHFwcnFwcHBydWttcW1tbW9xc3Rxc3J0dnZzd3Z6dnV0aG91bHNvbXNydHZJTUdJRUVEQ0FCPEJAQkZDR0ZLR0VDQ0hLSEhGSkxLRk1LTFJSTEdNTUhOSklITkhKSkhITk9OTkxKTU1KWnNwcG9xcW1sT1FTb1lza2dvb3Fxb210Xm5YYXRfbm9wb3Fyb291c3R0altddGN3eHJqbnpoYWFjZmFiam10dXBzdXZzcXBwcW9ydHt/fn13bGtxbmxtbnByc3F0dHN1dXR4eHl5dHVrb3VtdG9uc3N2dElLSEpDRUVFQEA+Q0NBRkNISU1IRkNGSkxJR0ZLTUxGT0pLV1JLR0tKSk5JSUpMSUtKSUhKTE1NTElLS0tTa2JaaV5famNyclpfWmtvYGVlVWtfY1thYlFgbWhcalxuaWlkW3BmZHBdWlxrW21xY3BzbGRnY2RnYGBrbnBwb3R5cnVxb3BxbnmFiIeHhoWAdnNua21tb25xcnR0cnR1dXZ5eHhzdW5xdW52cXJ1dHdySUhGSkRFREZBQEFFRENHQkhKTEdGREdLTElFRkpOS0lPSUxbUUpGSEhLTUlISkpLS0lISkdLS0tLR0hKSkxMTEtJS0xOVFtdVFBVTVFQTk9PVVJQT1FPT1FKSk5QUWRxaVRZV1tbXFVZW11YXVxcY2ZhYWZiY2ZfXmZrbWhtdHlydHJvcHB0hoeGhoaFhYaHg3pwbW1sa3FzdHRydHZ0dXl5eHV2cXJ1b3ZydHN1dXNIQ0VHRkZBRUM/Q0dERUdDSUtMSEZER0tMSERHSFBLTE9LTFdNSUZFSElKSElLSExKSUZISEpHR0lFRktISUtOTElPXFdeT1xcYF5PWFlTXFxiXk1ZWk1YYVJLWWFaU2BkXWFYW2RkVlZYXFlaWFxWWVxeY19kYGFfZWhrZ210dHFxdHBxcoGGhoaFhoWFhYaGhoR9cmtpb3Jzc3N0d3l5eHl4d3h0cXhyeHNxcnVydE9CQ0RMTUFDREJESUVHR0ZLSktIRUVKSkpHRUhIUEpMTUpNUklIRUFIRkpJS0tJTEpJR0VKSEVGR0VFSkdCSU1KS1RfWWBYYGFbYFVYWVReXlpfUllcUF5cWU5fXF5TW15jX1pdYGNfWV9iW2BeW1RZWFpfXmRiYmFjZmlla3Jwb3Bwbm93hoaFhYaCe4CFhYaGhYaFf3VxcHJyc3Z5eXp5eXh4eHdyeXZ4cnF4dnR2YVNKSk1JREJCQ0ZHRUdHSUpKSUlERktLS0ZGSUlOSk5MSExOR0hGPkdHTElLS0pLS0lHRUlFRERFQkZKRD9JS0hOW2NZXl5hX1JUU1dfYFxdWV5RWVxNVl9XS1FZW1FbX2FhXV5jYWBiYmJjY2VaUlhWVlxbXmNgX19jZWJob21tbGxsbHWFf4SDeXV8hIWFhYaGhYWGhoN9d3JydHd5eXl5f359eXV5dnZybnp3dnhYUUpGQ0dFQkVHSEZHSElGR0pHSEZIS0lMRERKSk1NTExISkpISkc/R0ZOSktLTUtLS0lHSEREQERBSElBPkhJRk9dYVpbZF1fVFFSWF1cXFxfWktXXExSXFlJTV5RUV1fYWNjY2NiXGRjYmRjZlhRVlVTXFhbYV9eX2FhX2Rsa21qa2xudn51gXp8hIWFhYWFhYaGhYaFhoaGgnpyc3V1e4WHh4eGhYSBfnhwend2eFxSTUJASUZDRktJRkZHSUdHSkZGRklMSk5FREpKTE5KTElLSkhJR0JISFFNS0tPTUtLSUhIRUQ/RUJISEFARkVEVF1ZXlhfWF9bXVVYWFBdXVFLSldeWF5bXVZaYVJSX19iYmBgYmJgY2JiZGRiWE9SUlNcU1xeXV5eX19gZGhnbGpubnB7e3x+e4CCg4SFhYWFhYWEhIWDhISHh4FzcneFh4eHh4eHh4eHh4WDgHx4XFNLQkFHRkRHTVJIRFJLRkhISERGS0lNUEVHSUpLTkxMSUxLSUlHREhLUU9NTFBMTEtLSUlERUFFQ0hGQUBGRUJWVUVcVF5TVmBYTlRVTlpbTUpLVWBhW19YX15iXU9ZYlxgYF9iY2JdYmJXX19UUE9RUllTXlxcXV5fYGJmZmVsZm9vd3x7gHt9f4CEhISEhIWFhYODhYKDgoWFhnpvgYaGhoeHiIeGhoaFhYSFg35JTkZERkZHRElSY1FEV19JR0dIREZNSlBQRkpJSktOTExLTUtKSkdFSU5RUU5PT01OTU5IS0FEQUNERkRCQURFQUxIQ0xMUE9PTUZNRkZISkhHTExNT1BJTE9QUFNQTFFTUlVaWVdZWFhkVk9TVFBQT05RVVRcWVlbXl5hYWVmY2hka2xxc3N6eX97en+EhISEhISEhIKEgH57gYOBfXuFhIaGh4eHhYWFhISEgoGAfUtJRUVHRkdES01eTUdIWU1HSEpIR05MUVFJTEpLS05NVU5PS0tMR0dLT1NTTlBPTk9PT0hLRmBFRF9MRGZjRE1bSF5cc21PTVZtWUxDUF9VbFdnSl1XVV5ETFFVTE1TVlFSVFhXVFhVVFxUUGZaaGhkWVRrVFhXVVtcXGBgYWJiYmBnaWdubGhyenx9foGEhISDg4ODgX19enJ7gXp7f4KAg4SEhYWBhIWBg4N/fnp7TElFRkZIRUVLT1RKS0dgVEdKT0pJT01SUUtNS0xPUlVST09KTE1HSE1RW1lPUFBOT1BQSktRf1FJfFlZcnNXUG1IcW5vYVZQcXF0T0Jrc25xdHBTb19bblhdVlxYVWtoVV1WY1lgWVpfVlVXf2l0dXVfYXZfWWJcXGZbX2FhYWJeYGJnbXBsYHB3dHiBgYKDg4J/fX6Adnh6bXZ+dHh+gHx+gIGChHyAg3p/gX9+d3dOSUVITU1CRExMR0pMRlJWTExPSExSWFdRTk9PTVFUTk9RUEtLTkdNUFNbWlRRUk9QUFFLSVp4XVR4ZGhZUlNQdmd0bHBibmZrUnJOTHdtanJwc3JxcnBvcIBdZnp1eHFxenF+cn1rdX1iUmd8ZXNzb3NzfH1wfnlvf3JfYGBiYlthYGhrbmtibGZnbXd+gYCDfnt4d4B0dnpocn5udHx+d3h7foCDeHyBdXx/fHxzc05LRmBdR0FFTU1IS0tIS1FPTU5KTldeWVVMUVNOWVlMU1NSTkxPSVFSVFlXV1FUUFBRU0xIZ3hsY3hxbVpLTFR5cHVtdWJudlBkZUlldnFtd2+AamZ4eGlXclJpe21panp6fWx4en9wZ29YdXVqdnVwgGFzaH1pbHh8b19fX2NiXF9kZWZpamRnYmNkbGxwcHN0c3NzeXFyeGJsdGdyeXtzc3V5foFzdnpufH15eHJuTkpSdE5DQkVQUElLTEpMUU9PT01QWmBaWEtUV1BhXlJWUVlTTVBKU1RVWFdXUFVQT05TSktyb3V1cXVxZGhhVm5McXBeR2h5V3ZUS2h4fXhgeXtzbmFebW9kU2dydW5teXB3bHZzdHFsbVxzfXprbXl8bHVtfGtwdnV4Xl9fYl5dX2VkaWdoZWVeYmJpaWlqa25va3FubWpwYWNmZG93eG9tcHN5f25xcGp7enRyb21MS1pWSEdFR1JQS0xOS0xRUVBQUFFXXFlVTlZZVWZYUlJZXlRNTkpUVFZXWVdPU09PTlFJUm1IaXdLYGR2dVVXbE5ubHtyYWpnf3ZVS1draH1sbWx4YFtwentfYHpzY3JveHFoZHxpcntdVEtsX3Z1a2l1e3ttfnhrfHBdXl5iW15iZGVnZWVlYlpjY2lra3JzcndnbWloZGdgYWxhZ3Nya2htbXJ8a21oa3t0bW1rbU9HSktISkhIUlFNT1BNTFNTUk9TUldSVlRQV1pWVlRUVGFgUU9OS1RTU1FWVk9PTU5PUUpIUU5QVUxLS1JTUlJST1ZVUVFPUlJYWFFOUFVUWFhYW1tVU1NXW1dYV1pQU1VXV1hRXVhWXVVTT1hSVldXWFpgW2dyXltcW11dX2NaX2NjZWZkY2NiWmNjZ2ZmbW5tdWZmZ2NgZl9dZ2BkbGhmZ2tocHpoZ2drdWpoZ2lsUElLS0xNS0pUUk1SUVBMVlVUUFRVWFVaVVJaXVZVVFdVWVhQT0xOV1RQTlVTTlBOTFFQS0pRUUtRTUpLT1FUUlFRU1JJSU1OT1FSUVFRVFZSWFdcV1NTUVFVVVZUWlFOU1FXVVRZVlRZVVNSVVNUVVhZWF5aX2FdXFtaXV1gY1xdYmJkZ2VkZGFZYGFjYWJoaGluY2FkXl9jXVpkXGJtYV5mZmdtc2RpaGtrZWRjZmhRSktLTk9MTVRRT1RRUU1YV1VUVlhXV1pWVFxgVldWWVVYVFFQS09YU1BOVVFOUk5MU1BNTlVTTlFOTU5RU1BUUVNUVE5MTk9RVFRSUlFWV1VZWltZU1VSVFhXV1lbU09TVFdVVFlVVllUUlJXVVZYXFpbYF1WWV9dXl1cXWBhXltiYmNoZmVkYlhgYGJdYGhlZmRhXl9dXV5aWl9aX2dgXl5dY2hrYWhmaGZkYGJkYlBLTUxQUUxPVFBQVFFPUVpZWFdZWlpYWVZdamRWWFlaV1ZUVE9LT1ZUUE9UUFBRTk1RUU9SWFNRUU9NT1NVTldRVFRVT05OUVRVVVRUUlRYVlpdXFpWVlFSV1hWW1xWUFNVVVVWWVRXV1RSUlhWVltfW15gX1ZfXV5gXFxgYF9fWmJiZGhoZWRiWWJgYl5eZmRjYGJdXFxcXFlaW1hbYVteXV1fYl9fYmRkYmRfX2BcUE1OTlJRTVJTUFNUUU9VXFpaV1tbXFlaW2RxbWhkX1tZVlZYUk1NVlNNTlJPUVJPTVBTUlVaVVNQUExQV1VRVlJTU1hNT1BRVFhVVVVTVVlYW15dXFtWUk9VVlVbW1ZRU1ZVVlhVU1haVFNRWVdXXF9bYF9gVmJcYGFeYGJfXGBdY2FjZ2llZmBaY2BhX19lZV9gY1taXFtcWlpZWVdcWVxbYF5gW15eYWBfY1xZYFpRTk9OVlFQVVNQVVRTUFdcXFxZXlxfV1xeanB3eYBjXFtWVllSTk9XU05RUVBSVFJMUVRTWVtXVU9STlNYVVNSVFJSWk9RU1NWW1ZWVlRWWlhdXlxcXlZTTlRWVltbVVFTVFZYWFJTWVxUUlJcWFpdXl1hYWBXYltjYl5hY19cYmFiX2RnaWRnXlxlYGFgYWNkX2JfWVpfW1xbWVhZV1daW1phXV1bXVxcWl1gV1tbWlBPT09ZUFVVU1JXUlRQWl1eXVxgXGBVXF1oanJ9c2xoXFVZV1FPUltTUlFUUlRVVEtSVlVaWlpTT1NRVVVVU05WUlNaUlRVVFhdV1hYU1hcWF5dWVpdVVVOVlZXXlpYUVRUWFhYU1ZZXFRSVl1ZXV1hXmNjX1lgW2ViX2RkXl5jY2FeZWZpZWZdXmRhYWFiY2RfYl5YW19bXFtYWFhYV1taW2BdW1tcW1haW15WXlldUE9PUlpQW1VVV1ZUVFReXmBfXmJcYFVdXmJreXVtfWxaVVpWUVFUXFRUVFVUVllXTFJaVlxaXFJQVVNXVVVTT1dSU1dTV1VWW11YW1lVWl5YX15ZXFlSV1JZWFlfWVlTVVVaWVlVV1lcVVRaXVxeYGFgZWRdXl1dZWFiZmReX2RjYFxnZGhmZGJfZGFfYWBiYl9gXldZXlpcXFpZWldWXVpdXltaW1xbV1lcXVZYV11TT1BXWVBdVVZZV1dVWF9gYWFgY11gVV1eYmVldoJ7aFhZWlRWVFZcWFdXVlZXXVhPVVxZXl1dVFNYUldVU1JTWFJTVlRYWFhdXlhdW1VeX1hfX1hcVlFZVVlaWmFYXFVXV1paWlhZWlpXVl1eX15jYmJlZV1iXGBmYmVmZF9gZGJhW2ZjaGZjZmFmX19hYmFhYF9eVlVdWVtcW1lcWVldW1tbWFhZW1laWl1fXVRZXVVOU1pXVFxVVldZV1ZcYGFhY2FjX19WW2BkYV96dW9oWlxaVlhWWFtaWVtZWFlgVk9UXVtgYVxVVVlQVFZUUlZWUlNVV1tbXF9eWl9cVl9fWl1eWV5WU1lYWVpdYlleVldaW1tbW1tZWlhZX19gYGRjZGVlYmRaYmZjZ2ZlXmFiYGNeY2NpZWRnX2deYmJjYWFgXl9YVFpaWltbWFxYWFxbWltXV1pYV1xbXGBdVl1dU09WWlZWWlZZVVhXWF5gYmFkYWRhXllZYWRiYGtmaF5cXVtXV1laXFxcX1tZW2JWU1deXWFjXFNWWVBWVVVVVlZTVVRYXV1fYGBdYV1XYF5bXlxbXlhWWFhbWl9fW19YWFxcXV1eW1pcV1pfYV5gZWRkZmZmYlljZmVoZ2ReY2BfZWNdZmlkZWhfZ15jYmNhYWBfX1tYWVtZWlpYWlhXW1xaW1dYWlRZXVxaYFxVXmJNUldZVldaWVtcWVdZXmBiYWVhZGFdXllhY2JfYWBhX1xcXVhXW1tdXV9fXFpdY1hZWF1fY2RfUllZUFdWV1hXV1ZXVl1dXmFiYV9iXllhXV1eWV1eWVhVV1tbYF5cX1lZXV1eXmBcWlpZW19iX2JlZGVmZ2diWmRmZ2lnY19jXmBmZVppaWNmaWNmX2JiY2FgYF9dXVpYW1lZWFhaWVdaW1pZV1hWVVtdXV1gYGJieEtXV1xZV11cXF1aV1xdX2BiZGJjYV1gWGJjYmBjYWNeXFxdWFdbXV9dYF9dW2BkXFxYWmJlY2FSXFlPWFZZWllZV1paYF5hYmNgYWNfXGJdX11bX15ZWVRYXV1fX15fW1peXmBiYlxcV1tdYGJiY2VkZ2ZlZ2RcZWZoaWZjYWJcY2dgXGlpY2hpZmVgYmFjYV9gX11dXFlcWVhXWFlZV1xbWldXWFBYWl1hY2Zmcmt/SllXXVtaX11cXlxZXVteX2JjYmFhXWJbYmRhX2NiYl1cW1tYWGpxYFxgX11cYWNfXllZY2VkYlRfWlFZV1xdXFtaW1tjYGNjY2BiZGFgY15gXF5fX1pYVltfXVxhYV9dW2BhYmViXlxTXF9gY2RkZmVnZmVmZV9mZmhoZ2RkYFtmZ15haGhiaGhmY2BiYGNiX19fXV1bWltZWFhYVlpWXFpaVlZVTFhXXGdpa2h1eIF2dnZ2dnZ2dnZ2dnd3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d4eHh4eXl5enp6enp6e3p6ent7e3t7e3t7e3t7e3t7e3x7e3t7e3t7e3t7fHx8fHx8fHx8fHx8fHt7e3t8fHx8fHx8fHx8e3t7fHx8fHx7e3t7e3t7fYmIhoqHhYKBgoOCg4OCgoKCgoKCgoKCgoGAgYCBgICAgYCBgYGAfnx8fHx8fHx8fHx8fHx8fHZ2dnZ2dnZ2dnZ3dnd3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3h4eHh5eXl6enp6enp6ent7e3t7e3t7e3t7e3t7e3t7e3t7e3t6e3t7e3t7fHx8fHx8fHx8fHx7e3t7e3t7e3t7e3x7e3t7e3t7fHx8fHt7e3t7e3t8iYmHiYaFgoGCgoGCgoKCgYKCgoKCgoKBgYGAgICAgICAgIGBgYB9fHx8e3x8fHx8fHx8fHx8dnV1dXV1dXV2dnZ3dnd3d3d3d3d3d3d3d3d3d3d3d3d3d3d4eHh4eHh5eXl5eXl5eXl5eXt7e3t7e3t7e3t7e3t7e3t7e3t7e3p6enp6ent7fHx8fHx8fHx8fHx7e3t7e3t7fHx8e3t7e3t7e3t7fHx8fHx7fHt7e3uHiYiJhYSDgYKCgoODgoKCgoKCgoKCgYGBgICAgICAgICAgYKBgH58fHx8fHx8fHx8fHx8fHx2dXR1dXV1dHV2d3d3d3d3d3d3d3d3d3h4eHh4eHh4eHh4eHh4eHh4eHl5eXl5eXl5eXl5e3t7e3t7e3t8e3t7e3x7enp7enp6enp6enp6e3t8fHx8fHx8fHx8fHx8fHx8e3x8fHx8e3t7e3t7e3x8fHx8fHt7e3t7e4aJiYiFhYOBgoKCg4OCgoKCgoKCgoKBgYGAgICAgICAgIGBgYCAfnx8fHx8fHx8fHx9fX18fHjF1NLS0tLUk3t9fX19fYSMi4uLi454KSkqKiopKz0/Pj4+Pj5tgH5+f397pdfT09PT1r2GiYmJiYqHc3FycnJxb6nBvr6+vr7K09LS0tLWun1+f39/f359fHx8fHx8fHx8fHx8fHx8fHx7fHx8fHx8fHx8fHt7e3t7hIuHh4aHgoGDg4GCgoKCgoKCgoKCgoGBgYCAgICAgICAgYCBgIB+fHx8fHx8fHx9fXx8fH19eNXn5OTk5OeZe39/f39+hpCPj4+Pk3kZGhoaGhocMTMzMzMzMmqCf4CAgHut6eTk5OToyomMjIyMjIlyb29vb29sstDMzMzMzNvm5eXl5enHfX5/f39/f319fXx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx7e3uCjYeIh4eDgoSCgYKCgoKCgoOCgoKCgYGBgICAgICAgICAgICAgH58fHx8fHx8fXx8fH19fX12fn9/f39/gHl3d3d3d3d4eXl5enl6eG9vb29wcHBycnJycnJyd3p5eXp6en6Dg4ODg4SBfHx8fHx8fHp6enp5eXl/g4KCgoKChISEhISEhYJ8fX19fX19fX19fX18fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx7e4CMhomHh4SDhIKCgoKCgYKCg4KCgoGBgYGBgYCAf4CAgICAgICAfnx8fHx8fHx8fX19fX19fXZ0dHR0dHd1dnd6e3h7eHd2dnh4eXl5fXl4eHl4eHh5eXl5enp5eXl5enp6eXh4eXl5eXl7e3t7e3t7e3t7e3t7e3p5eXl5eXp6enp6enp6e3x8fHx9fX19fX19fX18fH19fX18fHx8fHx8fHx8fHx8fHx8fHx8fHx8f4uHi4qIhIODgoKCg4KBgoKDgoKCgYGBgYGAgIGAf4CAgH+AgYF+fX18fHx8fHx9fX19fX19d3d3dnZ3fXh3d316eH14d3d3fHt7fHt9e3d3d3d3eHh4eHh5eXl5eXp6ent7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7fHx8fHx8fHx8fHx8fHx9fX19fX19fX19fX19fX19fX19fHx8fHx8fHx7e3x8fHx8fHx8fHx+iomMjImFg4SEgoKDgoGCgoKCgoKBgYGBgYCAgICAgICAf4CAgH19fXx8fH19fX19fX19fX13d3d3d3p9eHt4fHx3e3h3d3l+fHx9fX58d3h4eHh4eHh4eHh5eXl6enp6e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3x8fHx8fHx8fHx8fHx8fHx8fX19fXx9fX19fX19fX19fX19fHx8fHx8fHt7fHx8fHx8fHx8fH2Kio2NioWDg4OCgoKCgYGCgoKBgoGBgYKBgIGBgICAgIB/gIGAfXx9fX18fX19fX19fX19fXd3d3d3fX55d3d4e3p8eXd3e359fXx9fnx4eHh4eHh4eHh4eXl5enp6ent7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3x8fHt8fHx8fHx8fHx8fHx8fH19fX18fH18fH18fHx8fX19fX18fHx8fHx8fHx8fHx8fHx8fHx8foqJjo2JhISEg4KDgoKBgYKBgoKCgYGBgoGAgYKAgICAgH+BgIB8fH19fX18fX19fX19fn5+d3d3d3d5fHl7eHx9eXt5enp4e3x8fHt+e3h4eHh4eHh4eXl5eXp6enp7e3t7e3t7e3t7e3t7e3t7e3t7e3x8fHt7fHx7fHx8fHx8fHx8fXx8fX19fX19fXx8fHx8fHx8fXx9fX19fXx8fHx8fHx8fHx8fHx8fHx8fHx/iIeNioeFhoaDg4ODgoGBgoGCgoGBgYGCgYCAgoF/gICAf4CAgHx8fX19fX19fX19fX5+fn53d3d3d3Z4eHl3eXp4enh5eXd4enp6eXx4eHh5eXh4eHh5eXl5enp7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t8fHx8fHx8fHx9fX19fX19fX19fX19fX18fH18fH19fX19fH19fX19fHx8fHx8fHx8fHx8fX+HiIyIhoeHhIKDhISCgYKBgYKCgoGBgYKBgIGBgYGAgIB/gIGAfHx9fX19fX19fX1+fn5+fnd3d3d3d3d3d3d3eHh4eHh4eHh4eHl5eXl5eXl5eXl5eXl6enp6ent7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7fHx8fHx8fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fHx8fHx8fX19fHx8gIeIi4eHiYaDg4SDg4KBgYGCgoGBgYKCgYGBgIGBgYCAgICBgX97fH19fX19fX19fn5+fn5+d3d3d3d3d3d4eHd4dnl5eHh4eHh5eXl5eXl5eXl5eXl5enp6enp6e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7fHx7fHx8fHx8fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fHx8fH19fXx9fXyBhoqKiYmIhIOFhISCgoGBgYGCgYGCgoGBgYCAgYGAgIGAgIGBf3x8fX19fX1+fn5+fn5+f394eHd4eHh4eHZxZGpeam15eXl4eHl5eXl5eXl5enp6enp6enp6enp7e3t8e3x8fHt7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3x8fHx9fHx8fH19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fIGFiYqJioeEhYWEg4KCgYGBgoKBgYKBgYGBgYCBgYCAgYCBgIF+fH1+fn5+fn5+fn5+fn9/f3h4eHh4eHh5bWRiZV9fXm95eXl5eXl5eXl5eXp6enp6enp6enp6e3t7e3t7fHx8fHx8fHt7e3t7e3t7e3t7e3t7e3t7e3t7e3t7fHx8fHx9fHx8fH19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18goWKiomJhISGhYSDg4KBgYKCgoGBgoGBgYKBgIGBgICAgICBgH58fX5+fn5+fn5+fn9/f39/eHh4eHh4eW5kZWdlZGJeZnh5eXl5enp6enp6enp6enp6enp6e3t7e3t7e3x8fHx8fHt8fHt7e3t7e3t7e3t7e3t7e3t7e3t7fHx8fHx8fHx8fHx9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXyChouJiIqEhYaEg4OEgoGBgYGCgYKCgYGBgYCAgYGBgIB/gIGBf3x8fn5+fn5+fn9/f39/f394eHh4eHl3Z2VkZWZkZWFfaXl6enp6enp6enp6enp6ent7e3t7e3t7e3t7e3t8fHx7e3t7e3t7e3t7e3t7e3t7e3t7e3t7fHt8fHx8fHx8fHx9fX19fX19fX19fX19fXx9fX19fX19fX19fX19fX19fX19fX19fX19fIKGi4eJh4SEhoSDg4WBgYGBgYKCgYGBgYKBgICAgYGAgYCAgYF+fHx/f35/f39/f39/f39/gHl5eXl5eWtlYWJlZWFlZV5ieHdze3p6enp6enp6enp6e3t7e3t7e3t7e3t7fHt7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t8fHx8fHx8fH18fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19g4aLhoiFhYaEgoOEhIKBgYGBgoKBgYKBgYGAgYGBgYGAgIGBgn98fH9/f39/f39/f3+AgICAeXl5eXl0Y2NlZGNmY2doZGZsZF5ze3p6enp6enp6enp6ent7e3t7e3t8fHx7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3x8fHx8fHx8fH19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX1+fn6DhouGhoaGhYODg4SDgYGBgYGCgoGBgYKBgYCAgYGBgYCAgYGBfnx8f39/f39/gICAgICAgIB5eXl6d2RhY2diYmRdW2VfYV1eYGFoeHp6enp6enp6enp6e3t7e3t7fHx8e3x7e3t7e3t7e3t7e3t7e3t7e3t7e3t8fHx8fHx8fHx8fH19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX1+fn5+fn5+foSFi4eGhoaGhIODg4KBgYGBgoKCgYKBgoGAgIGBgYGAgYGBgYF+fX1/gH+AgICAgICAgICAgHl5eW9vYmJiZF5jZ19dYWFgXF9kYlttfHp6enp6enp6enp7e3t7fHx8e3t7e3t7e3t7e3t7e3t7e3t7fHx7e3x7fHx8fHx8fHx8fH19fH19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX5+fn5+fn5+fn5/hIiLhoSHhoaEhIODgoGBgYGCgYGBgYKCgYCAgYGBgYGBgYGBgX5+fYCAgICAgICAgICAgICBeXpwXWJlZGJkXmZnZ2BZYmJhY2VfXF1ze3t6enp7e3t7e3t8fHx8fHx8fHt7e3t7e3t7e3t7e3t7fHx8fHx8e3x8fHx8fHx8fHx8fHx9fX19fX19fX19fX19fX19fX19fX19fX19fX19fn19fn5+fn5+fn5+fn5+foCFjIqEhYaGhYODg4SCgYGBgYKBgYGBgoKCgYCBgYGCgICAgIGBf35+gICAgICAgICAgIGBgYF5emxiZGdjYmdmYWBgZGFiZWRjZGNeXGJ1fHt7e3t7e3t7e3x8fHx7e3x8fHx7e3t7e3t7e3t7e3x8fHx8fHx8fHx8fHx8fHx8fHx8fH19fX19fX19fX19fX19fX19fX19fX19fX1+fn5+fn5+fn5+fn5+fn5+fn9/gYeMiYWGhoeFg4SDgoGBgYGBgYKBgoKCg4KBgIGBgYKBgYGCgoF/f36AgICAgICAgIGBgYGBgXp7dGdnZmZkZGZmYF5fYWNlaGRlXmJkYHR8e3t7e3t7fHx8fHx8fHx8fHt7fHt8fHt7e3t7fHx8fHx8fHx8fHx8fHx8fHx8fHx8fH19fH19fX19fX19fX19fX19fX19fX19fX19fX5+fn5+fn5+fn5+fn9/f39/f3+CiYqIhoaIhoWDhIOCgYGBgYGBgoGBgoKCgoGAgYGBgoKBgYKCgX9/f4GBgYGAgYGBgYGBgYGBenptaGNjZ2ZnZWdlZmdiZWRlYmdbYmVgdnx8e3t8fHx8fHx8fHx8e3t8fHx8e3x8fHt7fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx9fXx9fX19fX19fX19fX19fX19fX19fX19fn5+fn5+fn5+fn5+f39/f39/f39/f4SJioiGiYeFhYSEg4KBgYGBgYGCgYKCgYGBgYGBgYKBgoGBgICBgH9/gYGBgYGBgYGBgYGBgYF7emlpZGNqZmFgZmVjY2NnaWRjYmBiZGJ0fXx8fHx8fHt8fHx8fHx8e3x8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fH19fX19fX19fX19fn5+fn5+fn5+fn5+fn5+fn5/f39+fn9/f39/f39/f3+AhIqMiIeJhoSFhYOCgYGBgYGBgYKBgoGBgYGBgYGBgoKBgYGBgYGAgH+BgYGBgYGBgYGBgYGBgXZzZWRnY2RmZWJlZmdkZmhmZWNgYGNkYHF9fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fXx8fX18fHx9fX19fX19fX19fX19fn5+fn5+fn5+fn5+fn5/fn5+f35+f39/f39/f3+AgICFioyJiIqJhoaDgoKCgYGBgYGBgoGBgoGBgYGBgIGBgYGBgYGCgX+Af35/foCCgoKCgoKCgoKCc3NnZWRkZWlqaGZnZ2NhZmZlZmdmZWVjdX18fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fX19fX19fH19fX19fX1+fn5+fn5+fn5+fn5+fn5+fn5+f39/f39/f39/f39/gICAgICAgIWLioqJioeHhoSCgoGBgYGBgYKCgYKBgYGBgIGBgoKBgYGBgYGAf4B+dHRzdX1/goCAfn5/gYB0cmdkZWNmaWppZWNlY2BmZGRnZ2JiZWFwfXx8fHx8fHx8fHx8fHx8fHx9fX18fHx8fHx8fHx8fHx8fHx9fX19fX19fX19fX19fX19fX19fX1+fn5+fn5+fn5+fn5+fn9/f39/f39/f39/f39/f39/f4CAgICAgIB/houLiouLh4eHhIOCgYGBgYGBgYKBgoKBgYGBgYKCgYCBgYGBgoCAgH5zc3NzdHV4dXV0dHV2dXVwZmNmZWhoaWdoZ2VmZWJfZGVmY2BiZ3d8fHx8fX19fX18fHx8fH19fX19fX19fXx9fXx8fX19fX19fX19fX19fX19fX19fX19fX19fn5+fn5+fn5+fn5+fn5+fn5+f39/f39/f39/f39/gIB/f3+AgICAgICAgICHjIyIi4qHh4eEhIKBgYGBgYGBgoGCgoGBgICBgoGBgYKBgoKCgYCAfnNzc3Nzc3NzdHR0dHNzdW9jY2FnZWhoZ2pmZGVnZmhmY2JlYl5ieX18e3t8fX19fX18fHx9fX19fX19e3x9fX19fX19fX19fX19fX19fX19fX5+fn5+fn5+fn5+fn5+fn9/fn5+fn5+fn5/f39/f4CAgH9/gICBgICAgICAgYCAf4CAgYGAgIeLi4iNiYiJhoSFgYGBgYGBgYKCgYKCgYGBgIGCgoGBgYKBgoKBgIB+dHNzc3Nzc3Nzc3Nzc3N1cmdlZWRlamhoZ2ZpaGdjZWViZGNoZGd7eHVzc3R2dnl4dnR0dHZ3d3d2dHR0dXV4d3h4d3d6e3x9fXx9fn5+fn5+fn5+fn5+fn5+fn5+fn5/f39/f39/f35/f39/gH9+fHt7fX58eXl2dnZ5fHx6end2d3l7fXt4hIyMioyHh4iEhYSBgYGBgYGBgoGBgoGBgYGAgYKCgYGBgoGBgoGAgH51c3Nzc3Nzc3Nzc3Nzc3VzaGVnaGVrbGhqZ2lqZ2dnZmRkYmVkbnV0dHNzdHNzc3Nzc3Nzc3Nzc3NzdHNzc3Nzc3Nzc3N0dHV1c3V3eHl7fn59fn98f39/f39/f39/f314fH5+fXx4dXZ3eXd4dnRzc3N0dXRzc3Nzc3NzdHNzc3R0c3R0dHODjI2KiYeIhoOGg4GBgYGBgYGBgYGCgYGAgYGDgoKBgYCBgYGBgICAf3VzdHRzc3Nzc3Nyc3NzdnZpY2hqaGpsZWZpbGhgZmVkY2BkZGZ0dXV1dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHRzdHRzc3Nzc3R2dnV1d3V4fH9+fX9+fHp4dXN0dXV1dHNzc3Nzc3N0dHR0dHR0dHR1dXR0dHV1dHR1dXR1dXV1dIaMjYuIhoeEhIWCgYGBgYGBgYGCgoGAgYCBgYKCgoGBgIGBgYGAgIB/dnNzc3Nzc3Nzc3Nzc3N2dnNnZ2pmaGdmaGhmZGlnY2NnZWVmcHZ1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dHR1dHR0dHR0dHRzdHR0dnV1d3Z0c3R0dHR0dHR0dXV1dXV0dXV1dXV1dXV0dHNzc3N0dHNzdHR0dHR1dXR1iY6MjIqHh4SEhYKBgYGBgYGBgYKCgoGBgICAgoKCgoGBgYGBgYCAgH93c3Nzc3NycnJyc3NzcnZ2dW5kXWNnZWlraGVoZ2dqamlnZXB2dXV1dXV0dHRzdHR0dHR0dHV1dXV1dXV0dHV1dHR1dXV1dXV1dXV1dXR0dHV1dXV1dXV0dHV0dHV1dXV1dXV1dXV1dXV1dXV1dXV0dHNzc3Nzc3N0dHNzc3Nzc3R0dHR0dHWKjoyMiYaGhIeFgoGBgYGBgYGBgoKBgYGAgYGCgYKBgYGBgYKBgICAf3hzc3Nzc3JycnJyc3NzdnZ3d2liaGhnamtpaGZkZGVmaWhwdXR0dHRzc3JxcnJ0dXV0dHR0dHR0c3NycXFxcXNzdHR0dHR0dHR0dHV0cnJyc3R0dHR0dXV1dXV1dXR0dXR0dHR0dHR0dHR0dHR0c3Nzc3Nzc3Nzc3Nzc3N0dHN0dHR0dHR0dYuOjImGhYWFh4SCgYGBgYGBgYGBgoKCgYGAgIKCgoGBgYGBgYGBgIB/eXNzc3NycXJycnJzc3N3d3d3bGpoZGhpa3Z6a2VmZWhnbXJzdHN0c3JwcHBxcnN0dXR0c3NycnNycXBvb29vcHFzc3NycnJyc3R0dHNxcHFyc3R0dHR0dHRzc3Rzc3NzdHR0dHRzdHR0dHR0dHRzdHR0c3NycnFxcnJzc3Nyc3NzdHR0dHN2jZCMh4eFhYSEgoGCgoGBgYGBgYGCgoKBgYGAgYGCgoGBgoKBgYGAf395c3NycnFxcnJycnNzc3d3d3dzc2pnaWloeX99cW51bG5wcXJycnFxcG9wcXFxc3Rzc3NycXFwcG5ubm1ubW5ubnBxcnJycnJycnJzcXBvb3BxcnJzc3JxcnJycnJycnJycnJzc3Jzc3Nzc3Nzc3Nzc3Jxb29ubm9vcXJzc3Jyc3NycnNzcnaPj4uHhoWFhYOCgoKBgYGBgYGBgYGBgoGBgYGCgoKBgoGCgYGCgX9/f3hxcHBwcXFycnJyc3Nzd3d2dnd2cnF0c252f352c3hwcHBycnJycXFwcHFxcXFyc3Nzc3FwcXBvb25ubm5ub25vcHBxcXFxcXBwcXJwb25vcHFxcXFxcHBxcXFxcXJycnJycnJycnFxcnFxcnJycnFwb29ubm1ubW5vcXJycnJycnJyc3JxeI+OjYaDg4aEgoOCgoGCgYGBgYKBgYGCgYGBgYKCgoKCgoKBgYKBf4B/d29wb3BxcnJyc3Nzc3J2dnZ2dnZ3dnZ1c3l/fnd3d29wcXFxcXFxcHBwcXJxcnJzc3JycXBwb29wb29vb29vb29wb3Bvb29vcHBxb29vcHBwcHBvcG9wcHFycXFxcnJycnFxcXFxcXFxcHBwcHBxb29ubm5tbW5tbm9wcXFxcXFxcXFxcXB7j42NhoODhYOCgoKCgYKBgYGBgoGCgYGCgoGCg4KBg4KBgYGAgYF/f392bm9wcHBxcXFxcXBwcHZ2dnZ2dXR0c3NxfYB9fX9zb3BxcXFwcHBwcXFwcHBxcnJxcXFwb3Bvb3Bwb29wcG9vb29vb29vb3BxcXBub3Bwb29wb29wcnJycnFxcXBxcnFwcXFxcHBwcHBwcHBwb29ubm1ubm5ubm9ub3BwcHFxcXFxcXFxcIKRjoqEhIOFhIOCgoGBgoKBgYKBgYGBgYGCgoKCgoKCgYGBgYCBgX9/gHVvb29wcXFxcXBwcHBwdnZ2dXRzcnJycnGAgoCBeXBwcHBvcHBwcHFxcXFwcXFxcXFxcG9vcHBwcHBwb3BxcHBvb29wb29vcXFwcG9wcG9vb25vcHFxcHBwb3Bvb3BwcHBwcHBwcHBvb29vb29vbm5tbW1ubm5ub25vb3BvcHBwcHBwcHBwiZCMiISDhIaDg4KCgYGCgoKCgYGBgYCAgYGBgoKBgYGBgYGBgIGBgH+AdG5vb3BxcXFwcG9vcG92dnVzcnFxcXFxcICDg39ycHBwcHBwcHBwcHFxcHBxcXFxcXBwcHBwcHBwcHFwcHBwcHBwcHBvcHBxcXBwcHFxb29vbm9wcHBvb29vcHBvb3BwcHBwcHBwcHBvb29vbm5ubm5ubW5ubm1ubm9wcG9vb29vb3BzcXWPj4yJg4KFh4ODgoKBgoGCgoKBgYKBgYGBgYGBgYGBgYCAgYGAgYGAf4B0b29vbm9vb29vb29vb3Z1dHNxcXFxcXJygIKCgXRxcXFxcXFxcXFxcXFxcXFxcXBxcXFxcHFwcXBxcXFwcHBwcHFxcXBxcHBwcXBwcHBwcHBwcHBwcHBwcHFxcXBxcHBwcHFwcHFxcHFxcXFxcXJxcnFwcnRycnR0dHR1dnRzdHR0dXd3gpCPi4iDgoaHhISCg4GBgYKCgoGBgoGBgYKBgYGBgYGAgICBgYCBgYB/gHVvb29vb29vb25vb29vdXRzcnJycnJycnKDg4OCdnFycnFxcXJxcnJxcXJycnFxcXFxcnFxcXJycXFycXFxcXFxcXFxcXFwcXFxcXFxcnNzcnJyc3V1dHR0dHR0dHV2d3d3d3d3eHh4eHd3eHh4d3Z3dnV2dnZ2d3h6e3x7e3t6enp6enyGkI2LiIODiIeHhYODgoGCgYKBgYGBgYKCgoGBgYGAgYCAgYGAgIGBgH+Ad3FxcXFxcG5ucG9wcG92dHV1c3Nzc3NzdYiDgoN5cnNzcnJyc3Jyc3NycnJycnN0cnJzcnNzc3Nzc3Nyc3N0dHV1dXV1dHV3eHd3d3d4eHh3eHh4eXl5eXl4eHl5eXp6e3t7e3t6enp5eXh3d3d1dnV2dnd5enp7fn5+fX1+fn5/f35+gIyPi4qHg4WIi4iEg4SDgYGCgYGBgoGBgoKCgoKAgYGBgYCBgYGAgIGAf4B8enp5eXx5eHh2dXZ2dHl2d3h3d3Z3dnZ6f3x+fnx2dnd3dnV4enh4eHh3d3d2eHx5eXx6eXl8e3l5eXh4eXl6enl5eXh4enp5eXh4eHh3dnd3eHh3eHh5eXp7e3p8fH1+fX9/f359e3t7e3p5enl5e3t/foB/fn5/fn19fX5+f35+fn6AjpCNioeEhoqLiIaGhIOBgoKBgYGCgYGCgoKCgoCBgoKBgYGCgYCBgIF/f4B/fn19fX9/f318e3t7eXh4eHh5eXl4eXh5eXl4enp6enp6e3t7fH1+fHt7ent8e318e3t7e3t7enl4eXh4ent6enp5eXp8fHt6enx8fHp6ent9fHx+fn+AgoGAgYKAgH9/gYGBgIB/f35+fn5/fX1+f4CAf35+f39+fn9/f39/gH+Af4OQjoyHhoWIi4yIh4aFg4GCgYGBgYKBgoKCgoKBgYKDgoGBgYGBgIGBgIB/goOCgoGBgX99f39/f4F6enh4d3h4eHh5eHh5enp5e358enx9fXt8fX19fHx8fnx9fn5+fn59fX9/f3x8fYGDgYCAf318fXx9fXt9fXx8fH19fX1+gYGChISDgoB/gYGBgH9/f4B/f39/f39+fn9/f39/f35+f3+Af39/gICAf4CAgICAhJCPi4eGhoiMi4iKhYaDgoKCgYGBgoGCgYKBgYGBgoOCgYCAgYGAgIGBgH+ChIKCgICAgH9+fn+AgH9/fn18fX19fYB/fX+Af35/gH9/fn9/gIGBgICAf3+BgICAf4CBgn9/f4CAf35+f39+f39/fn5+f39/gYB/f4CBgYCAgYOEgoGCgoGCgH+AgYCBgYGAgH+BgICAf39/gICAgYGBgIGBgYCAgICBgoGBgYCAgYGFjo6MiIaHiYyLi4qGhoOCgoKBgYGCgoOCgoKBgIGBgYKCgICBgYCAgYGAf4KFg4KBgYCAf39+fn+AfX5+fn19fX5/fn9/f35+fn+AgYCAgICAfn9/fn+Af3+AgH9/f35/f39+fn59fn9+fn9/f35/gIGBgoKDg4KCg4KBgYKDg4OCgYGBgYKBgoKCgYKBgoGBgYGBgoKCgYGCgYKCgoGBgoKBgYKCgoKCgYGBgoKCgoaPkY+KiImKjY6NiYaFgoKCgoKBgYKCg4KCgoGBgYGBgYF/gIGBgYCBgIF/gYWEg4KCgoGCgYCAgIB8fHx7fH18fH9+fn9+fn5+f35/f39/f39/f35+foB+fn5+fn9/f39+f39+fn5/gIB/gIB/f39/f3+BgYGCgoCAgYKDg4SDg4ODgoKCgoKCgoKCgoKCgoGCgoKDg4OCg4ODgoKCgYKCgoODg4ODgoKCgoODg4KCh5KTkIuKi4uPj42Lh4SCgoKCgYGBgoKDgoKBgYGBgIGBgICAgYGBgIGAgYCAg4SDg4OEg4ODgoKCgXx9fHx9gn1+f4GCiIGCgoSCgYGDg4GBgYKDgYKBgYCAf39/gICAf3+AgX9/f39/gYCAgICAgH9/f3+AgICAgH9/gYODhYSEg4SDgoKCg4OCgoOCgoODg4ODg4SDg4KEhYWDg4SEgoKDhIOCg4ODg4OCgoODgoCKlJOPioqMjpCPjYuGg4KCgoKBgYGBgoOCgYGBgIGBgoGBgICBgYGAgYCAgH+BgoODg4SEhIOCgoKCfXx8fn6AgYOAg4OChIaFhoaFhIWFg4ODg4SBgYKEhIKCgoeDgoKAgoGBgoKCg4KCg4KDgoODgoGAgIKCgYOCgYKCg4OEhYWEg4OChISEhIOEhISDg4OEg4ODg4OEg4SDhIWDhISDg4ODgoKCgoKCgoKBgYKCgo+UlI+Njo6RkY6KiISCgoKCgYGBgYGCg4GBgIGBgYGBgYCBgIGBgYCBgICAgIKChIKChIOCg4ODgoJ9fX2AgH+AgoGDg4ODhIaEhIOEhYWDg4GBg4OBgIKDgYKFhYWFhoaHhoWGhoeHh4aGhoeHhoaEgoGCg4SDg4ODg4ODhISFhYWDhYSFhISEg4KBg4OCg4SEg4KCg4SCg4ODg4OCgoKCgoKCg4OEhIOFhYWFhoaIk5OTkI+Pj5KRjIqHgoKCgoKBgYGBgYKDgoKBgIGBgYGBgICAgYGBgICAgICAhISEgoKCgoGBgoKBgX+AgYOCgICAf4CCgoGDg4KCgYODg4SEg4KDhYOCgYGBgoSFh4eHh4aGh4eHiIiHh4eIiIiFhIOBgIGBgoKCg4GCg4SEhYSDg4OEg4OEhIOBgYGCg4OEhISDg4ODg4OEhIODgoSDg4ODhIWFhoeHh4eIiIiJiY6TkpKOj46Qko+LiYeCgoKCgoKBgYGBgoKCgoGBgIGBgYGAgICAgYGAgIGAgICDg4KCgYKCgYGAf4CBhYWFhoOCgYB+fn+BgoSCgoKDhIOCgoODg4KChISDg4OCg4SFhISFhYSDg4SFhYKEhIWFg4KBgH9/gIB/gIGEg4OEhYWEgoKCgoOCg4OFhIKDhISEhYaGhoaGhoWFhoeHhYaIh4aHiIeGhoaIiYeGhYaGhoeIkZKSkI6QjpCRjImHhYGBgoKCgoGBgYGBgoOBgYGBgYGBgICAgICBgYCAgICAgISEg4KBgoGAgYGAgYKIh4aHhYSCgH99fX6AgH+AgYGBgYGBgoGAgYKCgoGCgoKBgYGCgYKCg4GBgICAf4GAgH+AgH9+gIGBgYKCg4OEg4OEg4OCgoGBgoODg4SEg4SEhIOFhYaFh4eIh4eHh4eHh4eGhoaGh4WFhYaGhIWEhIWEhYaSk5GOjo+OkI6JiIeEgoKCgoKCgoGBgIGCgoKCgoKCgYGBgYGBgYGBgICAgYGAgoSDg4KDgoGCgYKDg4iHh4iHhYSCgX5+gICAfn5+f4CBgYGCgYCCgoGCgH+AgIB+gIKBgIGCg4OAf39/gICAf4CAgICDg4KDg4ODgoOBgYKCgoOCgYKCgoOCgoSDhISDg4SEhYWFhYaGhoaFhISEhYWEhIWFhYSEhISDhISEhISEipSTkZCQj46NiIaFhIOBgYKCgoKCgYGAgYKCgoKBgoKBgYCBgYCBgYGAgICAgYGAgoOCgoOCgoKBgoOCiImJiYiHhYSDgYKEhIOBgYGCgoSCgoOEgoOEhYaEgoSCgX+AgoGBgoGChIOBgYGBgoOCgoGDg4SDg4SEg4OCg4KDg4ODg4KCgoKCgoGDhISEhYSFhYWFhIWEhIWFhYWDg4OEhISEhYWFhISEhISEg4ODg4OOlZKRkZGOjYyHhYODg4GCgoKCgoKBgYCBgoOCgYCCgYGBgICAgIGBgYCAgICBgICDhYSEhIODg4SDhIOGh4mIhoWDhIODg4WDgYCDgoOFhYODg4SDhIODhISFhISEgoGAgYKDgoKEg4OCgoGBhIWEg4ODgoKDhISDg4ODg4SFhISDg4KCgoKCgoSEhYSFhYWFhYODhYWFhYaFhoWEhIWEhYWGhYWFhIWEhISDhIODhJGUk5KSj42MioWEhIODgYKCg4KCgoKBgYGCg4KBgYKBgYGBgIGBgIGBgH+AgIGAgYaGhoaGhoaHh4aGhYSDhYaCgIGBgYGHgoB+f4GAgIKBgX+BgYCAgoGCgoKBgYKCgYCCgoKCgYKDg4GCgYKDhYODg4KDg4OEgoKEhIOEhIWEg4OCgoKCgYGCg4ODg4SFhYWFhIOEhYWGhYWEhISEhIOEhIWFhYWFhIODhIOEg4KGlJOSlJKPjYuHhISDg4KBgoODgoKDg4GBgoKBgoKCgYGCgYGBgYCAgYGAgICAgICAhYWFhYaGh4aGhoWGg4ODg4GAgoKCgYKAf35/f4CAf4B/gIGAgH+HgoGBg4GAgYGChIOBgYGBgYKBgYKDgoODgoOCgoKCg4OBg4SDg4ODg4OEhIKCgoKDgoKDg4ODhIWEhISEg4OEhIODg4OEhIODg4ODg4SDg4ODg4KDg4KDgouUk5KTkY2NioaDg4OEgoGCg4ODg4ODgoGBgoGCgoKCgoKBgYGBgICBgYCAf4CAgICDhISFhYSFhYWEhIWCg4KDgoKDg4OBgICAgICAgYCAg4KCg4KBgpKMgoOEgoODg4KAgICCgoKCgoKDg4ODgoODhIKCgoODgoKDg4KCg4KDg4WEg4ODg4SDg4SEhISEhYWEhIWEg4SEg4OEhISEhISEg4SEhYSDg4SEhIODgoKDkJSSkpKPi4yIhoOEg4OBgYKDg4ODg4OCgYGCgoKCgoKDgoCBgoGAgICAgIB/gICAgISDhYWEhYWFhYSFhYOEhIWDg4SEhIKCgoOCgoSCgYKGhoOCgX5/kZmGhYSEhYJ/fX19foKEg4ODg4OEg4ODhISEg4OEhISEg4SEhIOEg4OFhoWFhYSEhoWFhYSFhoWGhoWFhYWFhYWFhYWGhoWGhoaFhoaGh4aFhYWFg4SEhIeTk5KRkoyKiIWFhYWCgoGBgoODg4OCg4KBgYKDg4ODgoKBgIGAgICAgICAgH+AgICAhYWFhYWGh4eGhYWFhISFhYSEhISEg4ODg4OEhYOCg4WIgn59fn2FnIyGhoOBfn9+fn5+f4OEg4OEhISEhISEhISEhISFhYWEhYSGhYWGhYaGhoWGhYWHhYWGhYaGhoaFhIWFhYWFhIWGhoaHhoaGhoaHh4iIiIaFhYaEhYWGjZSTkpGQi4qHhoeGhIGCgoKDg4ODg4KDgoGBgoODg4KAgYGBgICAgICAgICAf4CAgICHh4eGhoeHiIeHhoaEg4ODhIODg4OEg4ODg4OEhIODiYqAgH6Fin+Tj4SBf39/f39/f35/gISFhIWGhoaFhYWFhoaHhoaFhoWFhoeHh4iHh4eGhoaHh4eGhoaHhoaGhYSDhIWFhoSFhYaGhoeHhoaGhoeHh4eIiIeGhoaHh4eRk5KQkZCLiIiFhoSDgoKBgoODg4ODgoKDgoKCgoOCgYCBgICBgICAgIGAgIB/gICAf4aHiIeHh4eIiYmIiIODgoKDgoSEhIWEg4KCg4OEg4KKioOIgoOFgISEgH9/f39/gIB/f4B/f4WFhoeIiIeHh4eIh4iHiIiIhoaHiIiJiYmIh4aHh4eIiIaHhoeHhoaFhIOEhYaFhYWFhoaGh4eFhoeGh4aHh4eHh4eHh4eFh5OTkY+RkIuHhoWGhIKCgYGCg4ODg4ODgoKCgoGCg4KCgIGBgYCAgICAgICAf3+AgYB/hoiIiIiHh4iJiYmIg4KCg4ODhIWHh4eFg4OFhIODg46JhoaLg3+AgIGCgYGBgYB/gH9/fnt6gIaIiIqKiYmIiImJiYmKi4qIiIiJiouLioqIiIeIiIiHh4iIh4iGh4aEg4OFh4eHhoWFhISDhYWEhYWGhISEhYWFhoWGhYOJlJOQj5GOioaFhoWDgYGBgoKDg4ODgoKCgoKCgoKCgYGBgYGBgYCAgICAgIB/gICBgH+GiYiIiYeIiImJiIiEgoKDg4KDhImKh4eEhIWEg4OEkIeBgoKCgoKCgoKCgH9+fH19fX9+fHt8g4eJi4uKioqIiIqJiImLiomJiImIioqJi4mHhoaGh4WGiIiJiIeGh4SDgoSIiIiIh4WCgoGDg4KDg4SCgoKDgoGEg4SEgY6TkpCPj4uIhYSGhIKBgYGBgoODg4OCgoKCgoKCgoGBgYGBgIGAgICAgICAgH+AgIGAf4WIh4eHhoeIiIiHh4SCg4OCgoOFiYqJh4WHhYSFhYWIg4KCgoOCgoKDgX59fn5+fn5+fXx+fX19g4eJioqHh4WGh4eHh4iHh4mGiIaIh4eJiIODhIOFhISFhYaIh4aFg4KCg4WHhoeGhoSCgoOEgoODhIKBgYGBgYODhIOEkZKRjo+Oi4eEhoaDgoGAgYGDg4ODg4KCgoKCgoKCgYGBgIGBgYCAgIB/gIGAf39/gIB/hYaGhYaGhoeHiIeGgYKEhIOChYeIi4qGhIaEgoaHgoGChIODg4OCgoF9fH1/gH9+fn59fH19fHp8hIaHhoSDgYKDhIWFhYODhYSEhISEhIWEgoKDgoSEgYKDg4WGhYSCgYGCgoODhYOEhIWEhIaDhISFg4KDgYKDg4SFhIeSkY+NkIyJhoSFhIWCgYCBgYODg4ODgoKCgoKCgoKBgYGBgYGAgICAf4CAgYB/gICAgICDhIWEhYWFh4eHh4aAgYGFg4OEhYSHiIWCgYCAgoB+f4SEg4ODgoKAfX1/gICBf31+fn18fX16enp+g4SEgoGBgIGBgoKBf36BgYGCgYOAgoGCgoKBg4OAf4CAgYOCgICAgICBgYGCgYGChIODhYSCg4SDgoKBgoSDhYWGjJORjo+Pi4iFhYOChIGBgYGBgoODg4KCgoKCgoKCgoGBgYCBgYCBgH9/gIGBgICAgH+AgIKCg4OChIOEhYWGhn+BfoCBgICAgIGDgn9+fn5+fX2AhISCg4ODgX59fn+AgIGAfn19fX1+fXx6enp/goKBf39/f35/f4B+fYB/f4CAgX+AgIF/f3+BgX59fX+AgX9/foCAgH+AgICBf4CCgICCgYGCgYGAgYGBgYKEg4aPkpCOj42Kh4eGg4OCgYGBgYGCg4ODgoKCgoKCgoOCgYGCgYGBgICAgH+AgICAgICAf39/gYKDhIGCgoOCg4SFgIB/fH19fn1+foCAf31/fn1+gIODg4KCgYF/fX1+foCAgH9+fX19fHt7e3p6enqAgIB+f35+fn1+f35/gH9+f3+Af4GAf359fn9/fn18fn+Af35+f3+Af39/f4B/f4B+f4CBf4B+f39/gH9/f4B/hZKSj46Pi4uHiYWEg4KCgYGBgYKDg4ODg4OCgoKDg4KAgYKBgYGAgICAf3+AgIB/gIF/f36BgYSEgYKBg4OCg4OBgH98fn5/fn6Af4B/foF+foCChIOCgYB/f359fn5/gICAfn19fX17e3x6enl5eXuAgH9/f39+fX5/foCAf35/f4CAgoB/fH5+f35+fXx/f4B/fn9/f4B/f35/foCAf36Af39+fn5/f35+f318fH2Fk5KNjIuKiImIhISEgoKCgYGBgoOCgoODgoODg4ODgYCBgYGBgYCAf39/f4CAgICAgIB/foCBhIOCgYGDhISDhICBgICBgIGAgYKCg4GBgoCBg4SEgYGBgYCAfX19fn5+f359fX19fXx8fHt6enl5eX2BgICBgYF/f4B/f4F/gICAgYGCgoB+gH5/fn5+foGAgoF/f39/gIB/f39/gYB+f4CAfn9/fn+Af31+fX17fIaTkYyLioeHioiGhoSDgoGBgYGCg4ODg4OCg4OCgoKBgICBgYGAgH9/f39/gICAgICAgH9+fn+BgYGAgISGh4aHgoSDhYOBg4ODhYSEhISDgoODg4KCgoKCgX5+fX19fn6AfX19fX19fX18e3p5eXl5eYCCgoKEg4CCg4GAgoCBgYGDgoODgYGCgIGAf4CBg4GEgoCAgYCBgYCAgYCCgn+BgIF/gIB/gICAfn9/fnx8ipOQiomIiIiJiIaGhoSCgoGBgoKDg4ODg4KDg4KCgYCAgICBgYGAf39/f4CAgICAgIGBf359fn5/f39+g4aHh4iChYSFg4SFhIWGhoaGhoWFhoGAg4ODgoKAfX19fX19fn59fX19fX19fX18e3l5eXl4fIKDhIWCgYSDgoKDhYaCg4SDgYKCg4OCgoKCgYKFg4iFgoGBgYKCgYGBgYSDgoOCgoKCgYGBgIF/gIGAf36Ok4yHiIaIh4aGhYaGhIKDgoGCgoODg4ODg4OCgYGBgH+AgYCBgYB/gH9/gICAgH+AgYB/fn19fX5+f36Ag4SHiISGhoaFhoaHh4aGh4iHhoeHgH2AgIGCgX59fX19fX19fX19fX18fH5+fnx7eXh3eHl5gIODf4ONhIOEhISXl4ODhIF9foGCgoGCgYKBg4aIjIWDgoKBhIKEg4KDhYWEhYOCg4OCg4OCgoKCg4OCgpKQi4iIh4mHhoaEhoWEhISCgYKCg4ODg4ODgoGBgYCAf4CBgIGBgH9/fn+AgYCAf4CAgH9/fn1+fn+Bf4CCgYWFhYeGh4eGh4eIhoaHh4aHh4Z/fX18fX9+fX19fX19fX19fX19fXx7iJKCe3x6fIZ5eHl8gYF+iZeEg4OEhJSTgIGBf39/fn6Fi4B/gICEhpCJhYSCgoGFhYuDgYKFhYaGhIOFhYOEhIODhIOFhISIko6LiYiIiYeHh4WGhYSFhIKBgoKDg4ODg4OCgYGBgYCAgIGAgICAf39/f4CAgICAgYGBf39/f4CAgIGBgYGBg4OGh4aGh4aGiIeGhoaFhISGhX99fHx8fX18fH19fX19fX19fX18fH+RlZaDe3qElHx4eXp7fH+Cg4GBgIOCgH58fn57iJF8fI6Wf31/f4KGioWDg4SDgYONiX9+f4OEhYWDhYaFhIWFg4SFhYaEhI6Rj4uKioyJiImHhYaFg4OCgYGCgoKDhIODgoGBgICBgICAgYGAgIB/f3+AgIB/gICAgX5+f4GBgoKCgoODgoOCgoWGhISFhYSGhIOEg4KBgYOBf319fHx9fXx8fH18fH18fX19fHx8e4uRl4x6e3yBenp6e3x5eX19foB/gH98e3t+fn2ClZF/hIh+fH5/goR8fIGChIKAf4eDfYKBf4KCgIODhISEhISChIOEhYKEkZGOi4yMjoqJiYWFhYODgoKBgoODgoKDg4KCgYGAgIGAgICAgICAgH+Af3+Af357gICBenyAgYKDhYODhYWFhYODg4SCgYKDgoOCgoGBgIB/gX5/fX59fHx8fHx8fHx8fHx8fHx9fHx8fn6Kgnt6e3p4ent7fH17fn1+f319fX18fH+BgX2Gj4F+fYJ+f36Agnx8f3+BgIKAfnx7ioJ9gH9+gYCAgYKBgoCAgIGAf4uTj4yLjY6NiIeHhYWEhIOCgoKCg4OCgoODgYGBgICAgICAgH9+fXx7fHx9f3+AgHx6gYF4e4CCgYOFhIOFhIaGhISAhpSIgIKBgYGBgH9/f39/fn5+gHx8fHx8fHx8fHx8fHx9fHx8fHx8fHl7e3t4eHl7enp8gX+Afn+BfH5+f399gIKCgICAgX+CkYF/f4CAfoB+fn9+gIGBfX19e319fXx9fHx9gH+AgH6Afn6ClJGMjI2Oj4qFhoaFhISFg4OCgoODg4OCgoGBgYGAgICBgICAf4CAf39/fXt6fICAgHh+gXd7gIF/gYKCgoKEhoeGhn6IlYp+gYGAf4B/foB+f39/fn+Bfnx7e3x8fHx8fHx8fH59fHt9fHx8e3x8fHp6eXt8en2Fg4J/gYF+f35/gH6FgoF+gH9+foCFhoKAfn6Dhn9+fH6AgIGAf39+fX19fX57fH1/f3+AfX9+gIyRjYuNjo6Nh4SGhoWEhISDg4OCg4ODg4KBgYGBgYCAgYGAgYGBgYGAgH9/f397en9/e3mAd3p/f31+f3+Af4KDhoaFf3+FgX5/gIB/gH5+f31/gIB/gIB/f319fHx9fn18fX19fX19fH58fXx7fXx8ent6fH19f4aEgoCAgX1+fX5/fouEgYZ+fXx8f36CgX99fX19gHx7fXx+gYSDgYB+fn5+fX1/f399foB+fn6Eko2Mi46Ni4qGhIWEhIODg4OCgoKDgoOCgYGBgYGBgYGBgYB/fXx8fH1+f39/f397e399d352eH59fH18fX5+gYGCg4B6fX18fn+AgH6Af35/fn+AgH+AgH9/fn9+fn5+fn1+f399fH59fn19fHt8fHx6e3p9fn+Ag4OCf35/fH18fXx8gYN+jH58e3t9fn1+fn17e3t9e3p7e3uAhoWChIOCf4B+f4KCgn9/goJ/gIqPjIyLjYuKiISEhIOEg4ODgoKCgoKCgoKBgYGAgoGBgYKCf3+AgIB/fn18fH5/fn55fX52e3Z4fXx8fHt9fX6BgICAf31/f31+f39/foB/f39+f3+AgIGBgH99gH9/fn9+fn9/f3yCfn59fX17e319fHp8fH6AgoGAgIB8fH18fHx8fH18fXt/fnt7e3x8fH18e3t7e318enp9en6CfoGDhIKBgoGFhoWFhoaHhoKEkY6Mi4qLh4iFgoOEhISEg4KCgYGCgoKBgoGBgYGBgoGBgoKAgYKBgYCAgH9+e3x+fnx6fnh5dnd8fHx7e318f4GAf35/foB/f35/fn5/gH9/f39/f3+AgYKAfn6BgIB/f39/f39+fYN8fH19fH99fX19e3x+fn9+fn5+fnx8fHx8fHt+fnt8e3x8fHx9fH18fnx9fHx7e3x5e3x7e317fX5+f4CAg4eJiYmLiYuJhYiRjouIiYeFhYOCgoOEhIODgoKBgYGBgYKBgYGBgYKCgoGCgoCAgX98e3p6eXt9enx+fnl8eXh4dHx8fHt8fHx+gX9/f39/gIB/fn5+fX+AgH9/f3+Af4CDgoB/gIGAgIB/f4CBgH58enx9fX59fX5+jIZ9fX57e4OCfX5+fX18fX19fX1+fH18fXx9fX58fn19fX18e3t7fHt8fHt6e3t6enp7fn6ChYiHiIqLi4uJjJCOjYmIhoWEgoKCgoODg4OBgYGBgYGBgYGBgYGCgoOCgYKBgIGBf3+Af356eHl5en5+e3l6eH5zfHx8e3x8fH5+fn5/gH+AgIB/fn9+gIF/f4B/gIGAgoSEgYCAgYGAgX+AgYKBf39+f31+gH57foGRjHx9f4qAjYx+fn19fX59fX59fHx8fX18fXx9fX1+fX1+fnx7e3t8fH18e3p7fHl6eXh5e35/hIOEh4mKiImNj42LiIiFhISCgYKCgoKCgoGCgoKBgYGCgYKCgoGCgoKBgoKAgYGAfoCAf39+e3p5e319eHx6f3KBfXt7fHx8fn59fYGBf4GBgX9/gH+AgX9/gIGCgYGFg4SCgYGCgYKCgICBg4KAf4F/fX6Afnx+f4iCf36DkISEg4F/fn18jYd9fX59fHx/fnx9fXx9fX5+fX5/fX19e3x9fnx8e3x9enp5eXl5e3t+foCBg4eEiI2MioqGhYSEg4KBgoKCgoGBgYGCgoKBgoKCgoKCgoKCgoGCgn+AgIB+f39/fn5/ent5fX16enp9cX6Cent8fX19fXp4f4KAgYKCgICBgIGBgICBgoKCgoaFhIKBgYGBg4F/gIKEgX9+gYB9foF+fX5/gIB9fn+EgH5+f31+fX2KhX1+f31+foB/fX19fH5+fn99f4B9fn18fX9/fHx7fH17e3t6enp7e3x9fn6Ag4CJjYqLh4WFhYSDg4KCgoKCgYGBgoKBgoKCgoKCgoGBgoKBgYKCf4CAgH9/f39+fn59eXp6fXx5d3t0e4d8dHd9fn17e3Z2foCBg4KBgYKCgoKBgYGDg4OChYaEgoCAgICCgX+AgYOBfn6AgH5+gH59fn6AgH+Bfn+Af39/f398f39/f3+Afn9/gH58fX18fn5+foF/gH2CgHx9gIF9fH19fXx8e3x8e3t7fHt8fHx9fImKiIiFhoWFhISDgYKBg4KAgIGCg4KCgoOCgoKCgoGCgoGBg4J/gIGAf39/fn5+fn57enp8fHt2e3R3f352cnt+fnt4dnd8gIGCgoKBgoODg4OCgoSDhIOFhoOCgX9/gIOAgICAg4F+foCAfX+AfX1+foCAf4J/gYGAgICBf31/f3+AgIGAgIB/fnx9fX19fn59g32AfoKAfX6AgX98fn59fX17fH58fXx8fHt8e3x+iYWGhYaHhYSFhIKBgoGDgYCAgoKDgoKCg4ODg4KBgYGBgYGCgH6AgYB/fn5+fn5+fn56e3p9goN9dXF6fHpxen19eXh1dICAgoKCg4KDhYOEg4KDhISEhIWEgYGAgH6Agn9+f36Bf35/f4B9foB9fX1+gH9/gYCCgYCAgIKBfn6Af4GAf4CAgH9+fX19fnx+fn19gYR/gH9+f4GBf31/f319fn1+fn1+fHt8enx7eoCGgoSEhYSEg4WDgoKBgYKBgICCgoOCgoOEg4SDg4KBgYKBgYOAfoCBf35+fn5+fX5+fnt7en6Jh354cnl9f3F6eHt4eXR1fYKDgoODg4OFhIWEg4OEhIODhIKBgH+Af4CBfn19foB+fn5/gH19f3x9fX6Af4CAgIKAgIGAgoGAf4B+gIF+gIGAgH9+fn5+fn5/fn6FhYGBgH+Ag4F/foGAf35/f4B/fn17ent6fHt6goR/g4KCgoOChIKBgYCAgoGAgIKBg4KBg4SDhIKEgoGBgoGCgn9+gIF/fn1+fn5+fX59fXp7fIWEe3tzeXp8cHd1dnd5dnR6hISBhISDhIWFhoSDg4WEgoODgoCBfn9/f4B9fX1+gH1+f39/fn1+fH19foF/gIB/gIB/gIGDgoGAf36AgH+AgYCBgH9/f39/f4CAgIGCgoKBf4CDgX+Ag4J/f4B/gX+Af3x7e3p8e3yBgH+Cf3+BgIKCgYF/f3+BgH6BgoKDgYGDg4KEgoSCgYGBgIGCgH6AgH9/fX5+fX19fn19e3t6gH94fHZ5eXtxdHh3dnh1cnmFhYKEhIKEhYWGhISChIOBg4KAgIF+f4B/gHx9fX6AfX5/f39+fX98fn5+gX+Bf39+f4B/gIODg4B/f4GBgIKBgYGAgICAgICAgIGAgYKDgYF/gISBfYGDhICAgX+BgYKBfXp7e3x8fX99f4B8f399fYGAgH59fYB/foGBgYKBgIKCgoKBg4KCgYB/gYKAfn9/fn99fX1+fX19fX19ent7fHZ9eXh5enJ1eXl2d3dzdYaFg4WFgoSEhYSEhIKDgoGEgX+AgX5/gH6AfX19fn9+f4B+fn99f3x/f3+BgIF/f3x+gH6AgYKDgYCAgoOEgoGAgYB/goCAgYGAgYGCg4KBgX+Ag4B+goKEgICCgYKChIJ+e3t8fHx9fX1+fXp+fX14fn9/fHx8fn1+gYCBgYCAgoGBgYGDgoGBf4CAgoB9fn19f319fX59fH19fX16e3p8dnx6d3t4cnZ5e3Z2dnN0hoSEhYSChISFg4OCgYOBgYOBgIGBfX+BfoF9fX1/f39/gH5+f359fYB/gIGBgX9+fH5/fn5/gYJ/gYGCg4eFgX9/fn6Af4CBgICAgIKCgYCAfoCCf36BgoKBgYOCg4OFgn99fX18e3x8eXp7en55e3l4f357e3t+fX1/f4F/gH6BgICAgoOCgYF/gIGBf31+fH1+fX19fX18fn58fXx5e3x4enx3endzeHd6c3Z2c3SGhISFg4KDhISDgoKCg4GCgoGAgYF8gIB+gH1+fX5/gICAf35/f3x+gH+BgIGAf359f39+fn+BgH2AgIGDhIN/f359fn5+f4B/gIB/gYKBgH9+f4F+f4CCgoCBhIKEhIaEgH59fHx8fHp5dnl5enl2eXZ+fHt7e358e399gH99fX9/f3+BgoGBgX5/gYF+fX18fX19fX19fXx+jYF8fXl7e3p5fHd4eHR1dXhyd3d0doaEhIWDg4ODg4OCgYKDgoGDgn+Bf39/fn+AfX19fX+AgIB/f4B/fIB/f4GAgYCAf3yAf31+fn9/fX5+gIGCgn5/fn1+fn5+f3+Af32AgIB+fn5/gX5+gIKBf4GDgoOEh4SAgH58fXx8e3x1eXl4eHh5d3t8e3p7foV9fn1/ent+fn59foGAgIGAfX6BgH59fXx9fX19fX18e32Dgnx8ent7e3p7d3Z4dXJzdnF4eXJ4hYWFhYOEg4KChIKBgYKBgIKBgIF/fn5+foB+fX58foCAgH+AgX97gH6AgH+BgYB/fYB/fn5/f319fX6AgYKBfn9+fn59fX5/fn9+fH+Af35+fn+Cfn6AgIF/gYOCg4OGhICBfnx9fHx7fHh3e3h1eXd3eXx6e3t9kod9fH13en1+fn19f35+gH98foB/fn19fH19fX19fXt8ent9enp4e3x6ent4dHh1cXJ0cHh4cXmEhYaFg4SDgoODgoGBgoKAgYGAgIB9fn5/gH18fn1/gIGAf4CBgHyAf4B+f4GAf399gH9+f39+fX18gICAgYB+f35+fn18fn9+f358fYB/fn1+gIJ/foCAf36BhIKCg4WFgoJ+fXx7e3x8eXd7eXd4d3d4e3t6e3yFin17end6fH19fHx9fX1/fnx9fn59fXx8fX5+fX18fHt6enx7e3p5enp6enhzd3VxcXJweHdxe4WGhYWDhYKBg4OBgYGBgoCBgICBgH5/fn9/fXx+fYCAgoGAf4GBfX6Af35/gX+Af3+BgH+Af31+fH1/gICAgH9/f35/fXx+f39/f319f39+fn6CgYF/gIB/foGDgoKEg4SCgn5+fHx6fHt7eXt6d3N2d3h5e3p7eXp/fnt7d3p8fXx8fH59fH19fH19fXx8fX19fX99fXx9e3l7fHx8enp6enp6eHN2dXBwcm93dnJ7hYaEhYOEgoGDgoKCgYGCgYKBgYGAf4B/f399fX9+f4CBgYJ/goF9foF+foCBf4B/gIKAgIB+fX58f3+BgICAf4B/f4B+fX5+f4B/f39/gH9/f4J/gH9/gIB/gYGAgISBgoKAf39+f3x9fn56fYV+dHx9enp6enx5eXp6hoV3eXx8fHx8fXx8fHx8fX19fHx9fX19fn19fX16eX18fH16enp6enp5c3V1b29xb3d0c3yFhoOEgoOCgYKBgoKCgYKBgoGCgYCAgICAgH59gH+Af4GCgn+CgX+AgX5/gYB/f4CAgn+Bf319f35/f4KAgICAgIB/gIB+fn1/gH9+gIB/f39/gH+AgICAgH+AgYCBgYGCgYCAf39/fn1/fnqBk416fH18e315e3p6eHmBgXh5fHx8fXx8fHx8fHx9fX18fH18fn1+fn59fHp8fHt8fXt5enp6eXlzdXVvb3Fwd3N0fYWGg4OCg4KAgYCCgoGAgYGCgYKBgYCAgIGAfn5/f4GAgYKCgIKCgICCfoCBgX9/gX+BgIF/fH6Af3+AgoCAgICAf3+AgH9/fX6Afn2AgIB/f3+AgICAgYCAf4CAgYCBgYKCgICAf39/fX5/fIGGiXx8fnt7fnl6e3p7jX53d3l8fHt9fHx8fHt9fH19fX18fXx+fn5/f358enx9e319e3l6e3p5eHN0dW5zcXB4cnV6hYaDg4KDgoCAgIGCgX+CgYKBgoGBgYKAgYF/fn9/gYGCgYKBhIOAgYJ/gYGBf4CAgIB/gX99f4F/gICBgICAf4B+gICAf359foB+fn+Af39/gH9/gICBf4CBgH+BgIGCgoKAgICAgIB9foB9gIOCe35+e3x9e3p8fHuHeXh4eXx8fH17fHx9fX18fH19fn19fX5+f3+Af317fH18fHx7enl7e3l5c3J1bnZycHhxdXaFhYOEg4KCgICAgoF/gIKCgoKDgYGDgoCCgYB/gICCgoKBg4KEhICBgX6BgoF/gICAgH+Cf36AgYCCgICAgIB/gH+AgIB/fn2Af39/f4CAgH+AgH+AgYF/gICAgIGAgYGBgYGAgYCAgH9/gH5/fX59fn57fXx9fHx8d3h1eHh5e3x8fXt8fHx8fX5/f39/fn19foB/gIGAf3x9fHx9e3p7eXp8eHpzcnVud3FxenF2d4WFg4SDg4KBgYKDgH+CgYWDg4SBgYOBgoKBgYCAgIKDgoCCgoSDf4GAfoKDgICBgICAf4CAf4GBgIKAf4CCgH9+gICAgICAf4CAgH+AgICAgICAf4CBgYCAgICAgYGAgoOCgoCCgYGCgYB/f4B/gId+fnx6fXx7fX94d3Z5eXp8fX18fHt8fH19fn5/gIGAfn1+gICAgoGAfH59fX58d3t6ent5eXRxdW53cHV6cXZ5hYWCg4KDg4KDhISAgIKBhoOEg4GChICEg4KCgICCgoSBgYKChIJ/gIB/gYOCgYCBgYCAf4GBgYGAg4F+gIOCf31/goGAgIB+gYCBf4CAgYGBgYCAgIKBgYKBgYCBgYGBgoOCgoOBg4OCgYCBgH+AhH19fXx/fXp9gHp5dnp4eXt7fH19e3x9fX19fn+AgYGAgH+AgICDg4B9f35+fn15eXt6enp5c3J1b3dxd3lzd3uFgoKDgoOEgoOEg4CAgoKGg4ODgoKEgYSDgYKAgIKBhIGCgoGCgX6BgICCgYKBgYKCgICAgICBgoGEgH6Bg4F/f4CDgoCBfoCCg4KAgYGBg4KDgoGBg4KChIGAgYOBgYKEg4KEhIODhIODgYGBgYCCf4B/fYB8enx/e3t3fHl5eXt6fX59fHx8fH1+fn+BgYCAgIGBgYSEgH2Af39/f357e3p6e3p0cHhyeXR2eHR3e4SCg4KDg4SChIODgYKChIaEgoODg4SBhISAg4CBg4KCgoKCgIKAfoGAgIKBgoGCgoKBgIGBgYOCgoOAfoGDgX9/gYSEgYN/goKBg4KCgoGEg4OEgYKEgoOCgoGCgoOBg4SDhIOEhYSFg4SCgYOCgoOBgYGAgH58fIB8fHh8eXp5enx9f3x7fHx9fX18fICAgICAgYGBgYKBfoGAgICAf3p7e3p6enVweHd5dnV8dXZ8gICDgoODg4OEhISAgoOGhYWDg4KDhIGEhYKCgYKDg4GCgoKAgYB9gICBgYKDgoKCgoGAgYKCg4KCg4B/gYOBgICChIODgoGCgoGDgoKDg4ODg4SAgoSDg4OBgX+Bg4KDhYKEhISEhISDhISChIOEhIKBgoGBgHt+gX59eXx6enp9fXyBfXp8fH19fHp7fn5+gIB/gYGAgICAgIGBgIB/fX18fH18dnJ2eHh2dH92dX2Hh4OChIWDg4SFhICChIWEhIOCg4SEgISFg4KCgoODgYOCgoCCgH2AgIGCg4KCgoKEgoGCgoOEgoKBgICBgoGAgYOFhIOCg4CCgoOCg4ODg4OEg4CCg4KEg4KCfoOBgoSEgoODhISEhIOEhIOEg4WEg4ODgoKAe4CBf3x8fXp6e32AfX9/fHx6fH59fX19fn5/f39/gICAgH9+foCBgICAfnx9fX5/fn18e3h2f3Z3f4SHg4KDhYODhIaEgYKFhoWEhIODhISChIWFgoKDg4SCg4KDgoKBfoCAgoKDgoODg4SCgYKCg4OCg4GBgYGDgn+ChISDg4KEf4KEg4ODgoSDg4SCgIOEg4SDg4KCg4KChIOCg4SEhISEhIWEg4OEhYSFhIOBgoB9gYKAfXx8e3x8gH19foB+fn1/fnx8fX19fn5/fn+BgYGBgH99fX6BgYB+fn19fX59fX5+f3+AfH2AgYKCg4OGg4SDhoSBgoiHhYSDg4SEhYGFhYWDg4SDhIODgoOCg4F+gYGDg4SCg4OEhIOCg4KEg4ODgoODgYOCf4KEg4ODgoOAgoWDg4ODhIODhIOBgoSEhYOCgoODg4GEg4GDg4SDhISEhYSEhIWFhYWEg4OEf32BhIB9fXx8fHx/gX5/f39/fX99e3x9fX19fX5+f4CBgIGBgH59fH6Cf39+fn5+fX1/f39/gICAf4CEhIODhIWDhIOFf36CiouFhISDgoOFgYaGhoOEhISEhIODg4OEgn+BgYODhYSFhIWEg4KEhISFhIODgoODhYKBhISFhYaEgoCDh4SDg4OFhIWFhIGEg4OGgoOCg4GCgYSDgoODhYODhYWEhYWHh4aHhYSEhYSAf4GDf35+fH59fX+BgH9+fHx+f358enx9fX19fX5+fn9/gIGBf319fIB/gH5+fn5+f3+AgYGBgYKAgYWFhIOFhIKEg4aAgoWFiomEhIOEhYWDh4aGhISEhIWEhISEg4SDgYKDg4OEhIaEhYSDg4SEg3yDhHuBhHd5g4F9hH5+cnWDgoF2foOFgX2BdYF5g39/gH6EhIKDg4KBg4SDg4SFg4SFhoSFhn2EeXx+f4N7hYKBhIOAf35+fn19gYOBfXt/fX6Afn18fHx9fX19fH19f4B/gYJ/fX18f4GBgICAgH+BgYGCgYKDg4KChoSEhIaEgYOEhYOEhYSKiIWFhYOFhYSGhoaDhISFhYWEhYWEhIWCgoOEhYWFhoSFhIOEhYWCaICFanx7cXF8gXOGc3R0fYKDdXNxg4Z0cHVyc3SDdnt9dYF/goOBgnZ5hYCDgIR/hYSChYWCaHpyc3N8f3OCg3+Dg32BfX5+fX6Cg4F8f4B9f4B9fXx8fHx9fHx8fn1+gH+BgX99fX2AgYKBgYGBgIGBgYKBgoKCgoSHhIWEhYSBgoSGhoOGg4aIhoaFg4aGh4eGh4OFhYaFg4KFhoSFhYODg4SEhoaGhIaEg4SFhn1xe4FweXZ+g3+CbnlwdXN8dnl5hXKEg3B2eHF2dHR1cnN0dml/gG5yb3R2bnVsd217c26AiHltfXJzdnN2bW14bHB5bHV9f399foGAgX1/fn2Af4B/fX18fH19fH1+f32Af4CAfnx/foCBgoCBgICAgYCAgIKDgoOEhYiGhoCChYODhIeGg4aFhYaHh4SDhoeIiYaHhIWGiIeEg4WGhYWEhIOFhIKFhoaFhoWEhoWHdnB0e3BydX+HhYNtdW92b3x1coR5eYd4cXR3bndod3pucHaCcoN+b3p5eW1vbnpvb213fXiGcHF6cHJ0ZoF1fm57eXNveX+Af319gX9/fH99fIF+gIB+foCAgYB+fn9/foF/gH9+fYB9f4CBgIB+fn+BgH9+goOCgoSFh4eEfoeEg4OFh4aEhoWFhoaIhISGh4iIhoeEhoaLioWEhoeHhYOFhYWEgoWFhIWGhoWGhYZxdXByc29zenl+hHSIdHV+iHZugnKEhnluanJ/cW1zd3x/dXR8hH54cXV3bnl1enF2eHV6eYRxam95eHBreXN6b3p3dnZwgYB/fn5/f356fn19f31/f359gIGDg4CCg4GBhIKBgIGBgH1/f4F+f35+f4GAfn6BgoCAgYSHhoODhoSEhYaHhoWFhYWGhoiFhYaFh4eFhoSGhomIhYSJioiFhIaGhYWDhYWEhYaGhoaFg3iLeXKIentwcIWEeIV4eWtzfnl7a3KDh4N6fG17eXl0fYB2bm+AgG90fHV3cXl9fW1+dW+DhYZ6gHJye3x1cG96bHN8bneCgIF+fn99fXt9e3x9fX9/fn1/f4KCf4GDgYGDgYB/gICAfn9+f31/fn1/gH58fYGAfn6Ag4iFhoOFhYWFhoeFhYWFhYeHiIaEhoWHhoaFhIWFhIWFhomJh4aEhoWGhoWGhoSGhoeGhoWGh4eHhoaEhoWGh4iHhYeGhoOHhoWFg4SFhoWGhIaEg4SEhoSEgYODhISFhIWEhYSGg4aHhYaEhIWHhoSEhYaEhX13hYOEhIKBgX1/fnt8e357fHx9f359fH59gIB9f4F/f4GAfn5+gH5+f35+fX99fX5/fHt8f358fH+BiYaFhIaGhoWHhoWFhYWGhoeIhoSGhYaGhYWDhIWGhYSGhoaGhYWGhIWGhoaGhYaGh4eGhYeIiIiIhoSHhYaGiIaFiIeIhYeGhoiFhYaHhYaGhYOChYWGhYWDhYSEhIWEhYWEhYWDhoeGhoWEhoeGhISFhoOFhIKEg4OFg4OCfYB/e3t8fXt8fH1/fnx8fn2Af31+gH5+gH99fXyAfX5+fn5+f3x8fX57fHx/fHt7fn+Ih4SEiIaGhoeGhYWEhoaGhoiHhIWGh4aFhIODhIaFhIeFhYaFhIaEhYaGh4eFh4aJiIaGh4eIiYiFhYiFhoeGh4aHhoeFh4eGh4WFhoeFh4aFgoOFhoaEhIOEhIOEhoSFhYWGhoOGhoWGhYWGhoWEg4WFg4WHhYOCgoWDhIF+gIB8e31+e3x7fX59fHx+fX5+fH9+fX1+fXx9fH98fn58fYGAfXx8fXx8fH56e3t9foiHgoWIh4eGhoaGhISGhoeGiIaEhYSGhoSFh4OEhYSFh4SFhoaFhoSGhoeHhoaHh4mIhoaIh4iKiIWHiIWHh4WHhoeGh4WIiIeHhYaGh4WGhoWBhISFhoWFhISEg4SFhYaGhoWGhYaFhoeFhYaGhYSDhISDhIeDhIGChISDgYCAgHt7fn18fHx9fXx8fH19fH18fn18fX18fHx9fXx+fXt8gX99fH18fnx8fHp6fHx9iIeChoiHhoeGhoaDhYaFhoaGhYOFhIaFhIiJg4GEg4SGhIaGhoaGhIeHiIiHh4eIioiGh4iHiImIhYiHhYeGhoeHh4WHhoiIh4eFh4eHhoaHhIKEg4SGhYeFhISDhISFhoaGhoaFh4WFh4WGhYeFhIOEg4OEh4GDgIKDg4KCgn+Ae31+fXt8fH59fH19fH17fHx8fHx8fXt7e318e358e3x/fX18fX1/fXx6ent7fHyIh4KGhoaGh4aGhYOFhoWFhYWEg4WChoSDiId/enqChYaEhoaFh4aEh4eJiIiHhoiKh4aHh4eIiYeFiIeGh4eGhoeHhYeGiIiHhoWHh4eGhoeDg4SEg4aGh4WFhISEhYaGhoaGhYaHhoaHhoaEhoWDg4ODgoOGgYN+goKDgIOCf398f35+fHx9f318fX18fXp7e3p7fHx8e3t7fnt7fXt7e358fHx8fX5/fXt6fHp8fYmHg4aFhoWGhoWEhIWFhYWFhIOBhYGGhIKEhHyAhn+ChYWGhYWGhYSHh4iIiIaFiYqHhYeGh4eIh4WIhYaHiIaGh4eGh4aIiIeFhoeGh4WFh4OEhoWEhoaHhoWFhIWFhoaGhoaFhoaHhoeHhYOGhYOBg4KAg4WCg36BgYF/g4F/fn5/fX98fH1/fXt9fXx+enl6eXt8fXt7e3t+fHx8fHp7fXx8fHx+fYF8e3t7e3x7iYeEhoSGhIaGhYSFhoWEhIOEgoCDgYWDgYJ/eoSMe4CEhYeGhoaFhIeIh4aHhYWHiYeEh4WGhoiGhYeEhoeJhoaIh4eHhoeIhoSGhoaHhYWHg4SFhIaGhoeFhYSDhYWHhoeGhoWGhoaFhoaEg4WFgoGCgYCDg4OCfYGBgH6DgX5/f4B8f3x9fX59e359fH15eXp5e319enp7e318fXx8ent9fHx9fH5+gHx7e3x+fXyIh4WGhYaEhoSFhYWFhYODgYOBgIKBhYJ/gH9/fXx7gYSFhoaEhYSDh4eGhoaFhIaJhoKGhIaGhoWFh4WHiImGhYiHiIeGhoeFhIaFhYeFhIeDhIWEiIaGh4WFhIKGhYaFh4aHhIaGhoaFhoODg4WAgIGAgIOBg4B8gYB+foKAfYB/gXx/fH1+fX57fn18fHl6enl6fX15enp7fHt8e3t6e319fH18f35+fHt7fX59fIiGhYaGhoSFhYSFhYSDgoKAgoGAgICDgn5+foB5en2Ag4OEh4WEg4OHhoOEhYSChYiFgoSDg4WFhYWHh4aIiIaFiIeJh4aFhoWDhoSFh4OEhoSEhYSHhoWGhYaEg4aFhoaGhoaEhYaGhYWGgoKDhH9+gICAgYCDgHuBf31+gn5+gH6Afn99fX59f3t/fXt6eXp6eXp8fXl6ent7enx6e3t7fH19fXyAfn18fH1/fnx7h4WFhoaGhoSFhIWDhYKBgICAgYB+f4KCfX5/f3t/f4KDg4WGhYSDgoaDgYOEgoCFh4WCg4GBg4SEhIaGh4iHhYWIhomHhYOEhIKFg4SGgoOFhISGhIeGhYWFhoOEhYSFhoWGhIOFhIWDhYWBgYODfn5/gH9/gIN/fIB9fX+CfYCBfn6Bfn19fX1/e398e3p5enp5enp8eXp6e3t7fHp7e3t7fX59fYF9fXx8fYB/fXyGg4aGhoaGhISChYKFgYGAf3+AgH5/gIJ9fn9/foCAgYKChIWDgoGChIGAg4KBgISFhYKBf4CCg4OEhYaIhoWEhoeFh4WFgoOCgoOCgoWBg4WEhYaEhoaHhoaFgoSEg4SGhYWDhISDhIOFhICAgoJ+fX1/fn5/hH57f3x8gIF9gYB9fYN9fn59fX57fnt7enl7enl6ent5enp6e3t8ent8e3t+fn1/gXx9fHx9f4B+gIaEhYWEh4SEg4KGgoOAgYB+fn+AfX9/gXx9f39+fn+BgYKEg4KBgYKCf4CBgoCAgoWEgoB/gIGCgYOFhYeFhISGhoOFg4WBgoGBgoGCg4GChISEhYWGh4eGhYSDg4ODhIaFhIGDgoOChIODgH+AgX59fH5+fH6Dfnx+fHyBgH6Cf31/gnx/fn19fHx8e3t6enp6eXt6enp5eXp6e3x5e317fH5/f4GAfX59fX1/gICAhoSEhYSFgoSCgoSCgoCBgH59fn9+fn6AfX2Af35+foGBgoODgoSHgYF+gICBf3+ChIOBf35/gIJ/goWEhYSCg4WFgoSBg4CBgIGBgYKBgIGEg4OGhYWHh4WEhIWCgoKDhYSCgYGBgoCFg4F/foB/fnx8fn18foN9e358fYF/gIN9fYCBf35/fXx8fH17e3p6enl5e3l6enl6ent7e3p7fXx8f3+BgoB+gH+AgH+AgYDKysrKysrKysrKysrLy8vLy8vLy8vLy8zMzMzNzc3Nzc3Nzc3NzczMzMvLy8vLy8vLy8vLy8vLzMvLy8vLy8vLy8vLy8vMzMzMzM3Nzc7Oz8/Pz9DQ0NHR0dLS0tLS0tLT09PT0tLS0tLS0tPT09TU1NTU09PT09PT09PT09PT09PT09PT09PT09PT09PT09PS0tLS0tLS0tLS0tPT09PT1NTV1dXV1dXV1dXV1dXV1dXV1NTU1NTT09PT09PT09PT09TU09PU1NTU1NTU1NTU09PT09PS0tLS0tPT09TU1NTU1NPT09LS0tLS0tLR0dHR0dPHhnNlYFtLWWdVTUZIQD03Nzg5Nzw8PDo8Oz42Oj04PDs6OTg3ODs7Oj87PTs8PD47P0E/QkJBQ0RFREE+PTw7QENDQUBDQ0FBR0hHSUtSwtXS09PT09TU1NTU1NTU1NTU1NXV1dXV1dXV1dXVysrKysrKysrKysrKy8vLy8vLy8vLy8vMzMzMzMzNzc3Nzc3Nzc3MzMzMy8vLy8vLy8vLy8vLzMzMy8vLy8vLy8vLy8vLzMzMzc3Nzc3Oz8/P0NDQ0NHR0tLS0tLS09PT09PT09PT09PS09PT09TU1NTU1NTU09PT09PT09PT09PT09PT1NTU1NTU1NTT09PT09LS0tLS0tLT09PT09PU1NTU1dXV1dXV1dXV1dXV1dXV1dXV1NTU1NPT09PT09PT09PU1NPT09TU1NTU1NTU1NPT09PS0tLS0tPT09PU1NTU1NTU09PT09PS0tLS0tLR0dHSzIxyZ2BcTVllUktHSz87Mzc4Ozg5Pj05PDpBOjs9Nzs8PDo6Nzg6Oz0/Oz88PTw/Pj9BPUFBPkNDREJAQT46Oz9DREFDRERCQklHSEhJTr7V0tPT09TU1NTU1NTU1NTU1NXV1dXV1dXV1dXV1crKy8vKysrKysrKy8vLy8vLy8vLy8vLy8zMzMzMzM3Nzc3Nzc3NzMzMzMzMy8vLy8vMzMzMzMzMzMzLy8zMzMzLy8vLzMzMzc3Nzc3Ozs/P0NDQ0NDR0dLS0tLS09PT09PT09PU09PT09PT09TU1NXV1dTU1NTT09PU1NPT09PT09PT1NTU1NTU1NTU1NPT09PS0tLS0tLS0tPT09PT1NTV1dXV1dXV1dXV1dXV1tbV1dXV1dTU1NTT09PT09PT09PU1NTU09TU1NTU1NTU1NTT09PT0tLS0tLT09PU1NTU1NTU1NTU09PT09PT0tLS0tHR0s+Sd2hfXk9XZ01LRkw9ODc2NTk5OTw+OT88RDo7PDc5PD07OTc5Ojw9QDs+PT47PD48PT5BQD5EQ0NDP0E9Ojs9QkNFQ0NEQT9FSEpJSky61dPT09TU1NTU1NTU1NTV1dXV1dXV1dXV1dXV1dXLy8vLy8vLy8rKysvLy8vLy8vLy8zLy8vMzMzMzMzNzc3Nzc3Nzc3MzMzMzMzMzMzMzMzMzMzMzczMzMzMzMzMzMzMzMzMzc3Nzc3Ozs/Pz9DQ0NDQ0dHS0tPT09PT09PT09TU1NTT1NTU1NTU1NTV1dXU1NTU1NPU1NTU09PT09TU1NTU1dTU1NTV1dTU09PT09LS0tLS0tLS09PT09TU1dXV1dbW1dXV1dXV1tbW1tXV1dXV1NTU1NTT09PT09PT1NTU1NTU1NTU1NTU1NTU09PT09LS0tLT09PU1NTU1dXV1dTU1NTT09PT09PT0tLS0dHRmn5nYWJOVWpKSElLPzw6OTM3Njc3PTs+OT06Ojo4ODo7Ozg4Ojs7PD46PT09Ojw/PD0/QkA/Q0RDRD5APT08QENEQ0JEQkQ+REhJSUtMttfT09TU1NTU1NXV1dXV1dXV1dXV1dXV1dXV1dXVy8vLy8vLy8vLy8vLy8vLy8vLy8zMzMzMzMzMzMzNzc3Nzc3Nzc3Nzc3MzMzMzMzMzMzMzMzNzc3NzczMzMzMzMzMzMzMzc3Nzc3Ozs7Pz8/Q0NDQ0NHS0tLT09PT09PT1NTU1NTU1NTU1NTU1NTV1dXV1NTU1NPT1NTU1NTU1NTU1NTU1dXV1NXV1dXV1NTU09PT09PS0tLT09PT09PU1NXV1dbW1tXV1dbW1tbW1tbW1dXV1dXU1NTU1NTU1NTU1NTU1NTU1NTU1NXU1NTU1NTT09PT09PT09PU1NTU1dXV1dXV1dTU1NTU09PT09PS0tLR0p+DaV9kU1hsSEhIS0A9Nzg0NzY6Oj87RDw8OTw8OTg6OTo6Ojs8Ojo7OT49Pjk9QDs/QUFCP0JCQUM9Pz8+PEBCRUNDQkBBO0ZJR01MSbLY09TU1NTU1NXV1dXV1dXV1dXW1tbW1tbV1dXW1svLy8vLy8vLy8vLy8vLy8vLy8vMzMzMzMzMzM3Nzc3Nzc3Nzc3Ozc3NzczMzMzMzMzMzc3Nzc3Nzc3Nzc3Nzc3Nzc3Mzc3Nzs7Ozs7Pz8/P0NDQ0NHS0tLS09PT09PT09TU1NTU1NTU1NTU1NTV1NXV1dTU1NTU1NTU1NTU1NTV1dTU1dXV1dXV1dXV1dTU1NTU1NPT09PT09PT09PU1NXV1dbW1tbW1tbW1tbW1tbW1tbV1dXV1dTU1NTU1NTU1NTU1NTV1NTU1NXV1dXU1NTU1NTT09PT09PT1NTU1dXV1dXV1dXU1NTU1NTT09PT09LS0tSjiGxfZlJWakdIR0lBPjM2Njo7PDhDPEJBPjxBPDg5Ojw6Ojw8PDk8PTo7PD09PD89QD9AQT9AQUBCPD4+PzxCQ0NDRkBBQT1ISklOTUeu2NPU1NTV1dXV1dXV1dXV1dbW1tbW1tbW1tbW1tbMzMvLy8vLy8vLy8vLy8vLy8vMzMzNzc3Nzc3Nzc3Nzc3Nzc3Nzs7Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Ozs3Nzc3Nzc3Nzc3Nzs7Ozs7Oz8/P0NDQ0NHR0dLS0tPT09PT09TU1NTU1NTU1NTU1NTU1NTV1dXV1dTU1NTU1NTU1NTU1dXV1dTV1NXU1NTU1dTU1NTU1dXU0tPU1NTU1NTU1NTV1dbW1tbW1tbW1tbW1tbX19bW1tXV1dXV1dXV1dXV1dTU1NTU1dXV1dXV1dXU1NTU1NTU09PT09PT1NTU1NXV1dXV1dXV1dXV1NTU1NPT09PT0tLWroprY2VSWGhMSkdJQjg0OTQ6Ozo5QDk/Q0VAPDw5OTk9Oj07PDw6PTw7OTw9Ozs/PUA9PT5AQD9CQT5APD05QERDQkFBQj48SEpLTU5IqNnU1NXV1dXV1dXV1dXW1tbW1tbW1tbW1tbW1tbWzMzLy8vLy8vLy8vLy8vLy8rKy8vLzMzMzMzMzMzMzM3Nzc3Nzc7Ozs3Nzc3Nzc/Pz8/Pz8/Pz8/Pz9DQ0dHR0dHR0dHR0dHS0tHV2djY2NnZ2dra2tvb29vZ2dnZ2dna2tra2tra2tjW19fX19fX19jX19fX2Nzd3d3d3d3d3d3d3d3d3Nvc29vb29zb29vb29za09LT09PT09TU1NTU1NbW1dXV1dXV1dXV1dXW1tbX1tbW1tbV1dXV1dXV1dXV1dTU1dXV1dXV1dXU1NTU1NTU1NTU09PU1NTU1NXV1dXW1dXV1dXV1dTU1NTT09PT09PS1bqKa2hoUlhlSUlMT0A5OTo0O0E8Nz05QUM+QD89ODo6Ozk9Oz4/Ojs8PDo7PDo7Pj1APT8/P0FAQUE/QTw8Oz5BRENBREA9PElJSk1ORqPa09TV1dXV1dXV1dXW1tbW1tbW1tbW1tbW1tbW1szMz9DPz8/Pz8/Pz8/Pz8/W3t3d3t7e3t7e3t7e3t3S0NDQ0NDQ0NDQ0NDQ0ci5ubm5ubm5ubm5ubq6t6WkpKSkpKSkpKSkpKSnhmBjY2NjY2NjY2NkZGRlhIuKioqKioqKioqKioemuri4uLi4uLi4uLi4ubN4c3Nzc3Nzc3Nzc3Nzc3qCgYGBgYGBgYGBgYGAj9LS0tLS0tLT09PS09PT3OPi4uLi4uLi4uLj4+Pi2NfX1tbW1tbW1tbV1dXV1dXV1dXV1dbW1dXV1dXV1dTU1NTU1NTU1NTV1dXV1dXW1dXV1dXV1dXV1NTU1NTT09PT09XDkXFrak5TYkxMVk48Ojo4Nz5DPzg+Oj8/QTw/QDc7Ojs7PTs+Pjo7PD48Oz07PT8+QDw/Pz1AQEBBPj88PjxAQUVCQkZAQD9HSEpLT0ae2tXV1dXV1dXW1tbW1tbW1tbW1tbW19fX19fX19fMzNDS0tLS0tLS0tLS0tLR3uzr6+rq6urq6urq6uvp1dLS0tLS0tLS0tLS0tTEqaqqqqqqqqqqqqqqq6aGhIWFhYWFhYWFhYWFik4MEhISEhISEhISEhIRE0pUU1NTU1NTU1NTU1NPg6ejo6Ojo6Ojo6Ojo6WZMikrKysrKysrKysrKyk1RUNDQ0RDQ0NEQ0NDP1zT09LS0tLS0tLS0tLS0eDs6+vr6+vr6+vr6+vr6dnX19fX1tbW1tbW1tbW1dXV1dXV1dbW1tbV1dXV1dXV1dXV1dTU1NTV1dXV1dXW1tXV1dXV1dXV1dXU1NTU1NTU1NPUy5h2bGlKTl9NUlVNPjw8NztAQz42Ojc+Pjs9Qj85PDk9Ozw6PD07PTs9Ozs9PD0+PT07QT08QUBBQT08Pzw7QEJDQURFPUFAQ0ZLS09GmNzV1dXV1dbW1tbW1tbW1tbW1tfX19fX19fX19fXzMzR0tLS0tLS0tLS0tLS0d3q6enp6enp6enq6unq6dXS0tLS0tLS0tLS0tLUxaqrq6urq6urq6urq6yoiIeHh4eHh4eHh4eHh41SEhgYGBgYGBgYGBgYFxpOWVdXV1dXV1dXV1dXU4WopKSkpKSkpKSkpKSmmzgvMDAwMDAwMDAwMDAvO0lISEhISEhISEhISENg0tPS0tLS0tLS0tLS0tHf6+rq6urq6urq6urq6unZ19jX19fX19fX1tbW1tbW1tbW1tbW1tbW1tbV1dXV1dXV1dXV1dXV1dXV1dXW1tbW1tXV1dXV1dXV1dXU1NTU1NTU1NGcenFpSlRdT1JVTkQ+Pzs/QEA4Ojs4PDs7PD86Ozs4Ozk5Ozw7Ojw5Ozs8Ozo9PT0+PUE/Pj8/Pj08PT88PEFBQ0FERTw+QEVGSktNRpPc1dXV1tbW1tbW1tbW1tbW1tfX19fX19fX19fX183N0NLS0tLS0tLS0dHR0dDc6Ofn5+fn5+fn5+fn5+bV0dLS0tLS0tLS0tLS08Wtrq6urq6urq6urq6vq46NjY2NjY2NjY2NjY2SXSInJycnJycoKCgoKCcpWmNiYWJhYmJiYmJiYl6MrKmpqampqampqampq6BFPT4+Pj4+Pj4+Pj4+PUhVVFRUVFVUVFRUVVVRatLT0tLS0tLS0tLS0tLS3+np6enp6enp6enp6enn2djY2NjY19fX19fX19fX19fX19bW1tfX19fW1tbW1tbV1dXV1dXV1dXV1dXV1tbW1tbW1tbW1tbV1dXV1dXU1NTU1NTWo3txZElbYE5OVU9AQT89REI/Oz06OTs6PT07PDs6OTg5OTs8Ozw8Ojo7PDo7QD08PTxAQTxBQTs7PEA/PD1CP0RDQ0U8PkJERkpMTEWN3NXV1tbW1tbW1tbW1tbX19fX19fX19fY2NjY2NjNzc7Ozs7Ozs7Ozc3Nzc3Nzs/Pz8/Pz8/Pz9DQ0NDQz87Ozs7Ozs7Pz87Oz87NzMzMzMzMzMzMzMzMzMvJycrKysrKysrKysrKysfCw8PExMTExcXFxsbGxsvMy8zLzMzNzMzMzMzLz9HR0tLS0tLS0tLS0tLRysrKysrKysrJycnJycnKy8vLy8vLy8vLy8vMzMzT1NTV1dXV1dXW1dbW1tjY2NnZ2dnZ2dnZ2dnZ2djY2NjY2NjY2NjY2NfX19fX19fX1tfX19fX19bW1tbW1tbW1tXV1dXV1dXV1dbV1dbW1tbW1tbW1tXV1dXV1dTU1NTU169/cF5GXmJQUVdOR0ZDQ0lBPz07PDo8OEBCPD04Ojo4OTg7Pzs8PDs7PDw8PD87PD46Pj44PkI8Pj1BPjw+QkBERUNAPD5APkNJSUtEh9zV1tbW1tbW1tbW1tbX19fX19fX19jY2NjY2NjYzs3Nzc3Nzc3Nzc3NzdHNzc3NzczP09LSzs3P0s7Ozs7Ozs7Ozs/Rzs7Q0s7P0tTV1NDPz8/Pz8/Pz8/Pz8/P0NDQ0NDR0dHR0dHS09PU1NTU1dXV1tbW1tfW1tbX1tfX19fX19fX19bW1tbW1tbW1tbW1tbW1tjX19fX19fY19bX19fX1tfX19fX19fX19fX2NjX1tbW1tbX19fX19fX19fX19jY2NjY2NjY2NnZ2dnZ2dnZ2djY2NjY2NjY2NjY2NjX19fX19jY19fX1tbW1tbW1tbW1tbW1tbW1dbW1dbW1tbW1tbW1tbW1tXV1dXV1NTV1di4gm9XSl9jUlFaS0hBQTxCPT07Oj4+PD4/PT0/Nzk6OTk3OD48PD47Ozw7PDs/PT0+OTs7OT0+P0A+QD07OkI/QkNCPz0+QD5CRUdKQoDc1tbW1tbW1tbW19fX19fX19fX2NjY2NjY2NjY2M7Ozs7Ozs7Nzc3Nzsqfys3Nzc3QuYOEi8fTwJrLz87Ozs7OztHBp9HRuKDQ0ZyChIrGz87Ozs7Ozs7Ozs7Oz8/Pz8/P0NDQ0NDQ0NDR0dHR0tLT09PU1NTU1NTV1dXV1dXV1dXV1dXV1dXV1dXW1tbV1dXV1dbW1tbV1dXV1dXV1NTU1NXV1dXV1dXV1dXW1tbW1tbW1tbX19fX19fX19fY2NjY2NjY2NjY2NnZ2dnZ2dnZ2dnZ2dnY2NjY2NjY2NjY2NjY2NjY2NfX19fX1tbW1tbW1tbW1tbW1tXV1tbW1tbW1tbW1tbW1tbW1dXV1dXV1dXYwIBuVU9gY1dZW0xMQ0A9PTs9Ojw+Qj5CQ0A8Ojg5ODo6Ojc7Pz4/PDw7PDo5Pzw8PTg5PD9BPj09PUFAPTtBQkBCQz47QD9BQUlHSkF629bW1tbW1tbX19fX19fX19jY2NjY2NnZ2djY2dnOzs7Ozs7Ozs7OzdKpj63Rzs7Ozpu3tqSiwJOerNPOzs7Pz8/RnY/Es5aYurqVuLmvodLOzs7Ozs7Ozs7Pz8/Pz8/Pz9DQ0NHR0dHR0dHS0tLT09TU1NTU1dXV1dXV1dXV1dXV1dXV1dXV1dXW1tbW1tXV1dbW1tbW1tXV1dXV1dXU1dXV1dXV1dXW1tbW1tbW1tbW1tfX19fX19jX19fY2NjY2NjY2djY2dnZ2dnZ2dnZ2dnZ2dnZ2djY2NjY2NjY2dnY2NjZ2NjY19fX19fX19bW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tXV1dXV1dXV18h/b1pTYWVeXVxPSkQ9QD8+Ozc6Pjk/RD9BOTg3ODk7Ozw4OT89PTw9PD47OkE7OTs5OzxDQDw7PT5AQT49QkQ/QkM9PT8+Pz5ISUg/ddrW1tbX19fX19fX19fX2NjY2NjZ2dnZ2dnZ2dnZzs7Ozs7Ozs7Ozs/Inrym0tDQzsqgl36Cw6abr6fUz8/Pz8/Tuq+qvJ+jqLLRkn1+r7DSzs7Ozs7Ozs7Oz8/Pz8/Pz8/Q0NDR0dHR0dLS0tPT09TU1dXV1dXV1dXV1dXV1dbV1dXV1dXV1tbW1tbW1tbV1dXV1dXW1tbV1dXV1dXV1dXV1dXW1tbW1tbW1tbW1tbW1tfX19fX19jY2NjY2NjY2NjY2NjZ2dnZ2dna2dnZ2dnZ2dnZ2dnZ2djY2NjY2NnZ2dnZ2dnY2NjY2NfX19fX19fX19bW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1dbV1dXV1dfNiHNdWGloXl9gT0lGOkFAPj88PDo2P0JAQzo2NDc6Ozo8Ojk+PD49PTs/PTxBPjw8Ojw8PTw6PEA9QEI+PkFCPUNDPT0+Oz9BRUtIQHDZ1tbX19fX19fX19fY2NjY2NjZ2dnZ2dnZ2dnZ2c/Pz8/Pz87Ozs7SrKWnqdXAvNLHnY+ey9PJipmq1M/Pz8/P05+xm7/Hh5q01dPNnp7D0M/Pz8/Pz8/Pz8/Pz8/Pz8/Q0NDQ0dHS0tLS09PT1NTU1dXV1dXV1dbW1tbW1dbW1tbW1tbV1tbW1tbW1tbW1dXV1dXV1dXW1dXV1dXV1dXV1dXW1tbW1tbW1tfX19fX19fX19fX19jY2NjY2NjY2NjY2NnZ2dnZ2dnZ2tnZ2dnZ2dnZ2dnZ2dnZ2dnY2dnZ2dnZ2dnZ2dnY2NjY19fX19fX19fX19bW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbV1dXW0JB1W1tqaWFeXVNOSTxDQEE+QD46OEZBP0M6NzQ5Ojo5Ozs4Oz0/Pj49QT08P0A9Pjw8PDw8Oj1AQD8/PT5CQD9AQkA8QD0+QUVLRz9r19fX19fX19fX2NjY2NjY2NjZ2dnZ2dnZ2dnZ2tnPz8/Pz8/Pz8/QzJ2Nl6zQmpfKxZ6ynpbN1q2ZqtTPz8/P0cCciZq92qOYtdTTwKCg0M/Q0M/Pz8/Pz8/Pz8/Pz8/P0NDQ0dHS0tLT09PT1NTU1NXV1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbV1dXV1dXV1dXV1dXV1dXV1dXW1tbW1tbW19fX19fX19fX19fY19fY2NjY2NjY2NjY2NjZ2dnZ2dnZ2drZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2djY2NjY2NfX19fX19fW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1dXV1tKUcl5ea2tqZV1PTEc/RENDQDo9OzxCPD49OTY0Ojk5Ojo5Nzs/QDs8PUA8PEE+PD07PTw/PDo8Q0A+PTs9QD5CPkBBPkA9QD9GSUQ/ZtXX19fX19fY2NjY2NjY2NnZ2dna2tra2tra2traz8/Pz8/Pz8/P07GigJuvyaCjv8qcpYynrdiqmarUz8/Pz9SjooGbwNehmLTT06+iqdTQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NHR0tLT09PT1NTU1NXV1dbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1dXV1dXV1dbW1tXW1tbW1tbV1tbW1tbX19fX19fX19fX19fY2NjY2NjY2NjY2NjY2NjY2dnZ2dnZ2dna2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2djZ2djY2NjY2NfX19fX19bW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbSk3BgXnBoZmVaUUhHQkVDQEA3Ojo8Pjo8OTc2NTk6Njo8Ozc8QEA8Ojo9Oj0/Pj08OUA8PDo6OT9APj08PUBBQz9APz5BOz9ARkpCP2LS2NfX2NjY2NjY2NjY2dnZ2dnZ2tra29vb29vb28/Pz8/Pz8/P0M6fkGyclteqo9PSrqa1mJ/Vqpmq1M/Q0NHEn4F7lqvYoZi009OjobrU0dHR0NDQ0dHQ0NDQ0NDQ0NDQ0NHR0tLT09PT1NTU1dXV1dbW1tbX19bW1tbW1tbW1tbX1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tfW1tfX19jY2NfX19fX2NjY2NjY2NjY2NnZ2dnZ2dnZ2dnZ2dna2tnZ2dnZ2dnZ2dnZ2dnZ2dnZ2djY2dnZ2dnZ2dnZ2dnZ2NjY2NjY2NjX19fX1tbW1tbW1tbW1tbW1tbX19fX19fW1tbW1tbX0pNuYFxxZGdkWlVKQENGQ0FCODs/PD07PDw4NTU4OTY4Ozo5PDo+Pzw9PTk8Pz49Ojo+OTw6Ojg+Pzw9PTw+QEFDQT48PDpCRERKRkJd0NnX19jY2NjY2NjY2dnZ2dna2trb29vb29vb29vPz8/Pz8/Pz9G9n8O31pfA09HQ0srSzZeb1KqZq9XRz9DVq6+8wM+T06GZtdTNnp/J0tHR0dHR0dHR0dHR0NDR0dHR0dHR0tLT09PU1NTV1dXV1tbW1tfX19fX19bW1tbW1tfX19fW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW19fX19fY2NjY2NjY2NjY2NjY2djZ2dnZ2dnZ2dnZ2dnZ2drZ2tnZ2dnZ2dnZ2dnZ2dnZ2djY2NjY2NjZ2dnZ2dnZ2dnZ2dnY2NjY2NjY2NfX19fX19fX19fW1tfX1tbX19fX19fX19fX19bW19GRbF1cb2doYl1PRkBISUdFQDw8Pj48PT48NzU2Ojk2Ojs6Ojs4QD86PDw5PD49Ozs6Pzk/Ojs5PT49PTs7PTxAQ0I/Pz47Q0ZGR0hEWc3a2NjY2NjZ2dnZ2dnZ2dna2trb29vb29vb29vb0NDQz8/Pz8/Pz5V+e6WS1KKa08ySl6ObodirmavV0pem1cmHf4WepNmimbXXw5+g0tHR0dHR0dHR0dHR0dHR0dHR0tLS0tLS09PU1NTV1dXV1tbW19fX19fX19fX19fX19fX19fX1tbW1tbW1tbW1tbX19bW1tbW1tbW1tbW1tbW1tbW1tbW1tfX19fY2NjY2NjY2NjY2NjY2dnZ2dnZ2dnZ2dnZ2dnZ2tra2tra2tnZ2dnZ2dnZ2dnZ2djY2NjY2NjZ2dnZ2tnZ2dnZ2dnZ2djY2NjY2NjY2NjX19fX19fX19fX19fX19fX19fX19fX19fX1tfPjGRWXnBrXGBgTkVITUlJT0M+OkI9PUBCOzU1Nzw6Nzo7Ojo7OT09OTo6OT0+Pz07OT47PDo8Ozk+PD47PD0+QENCPz5BPEFDR0ZGRVXJ29jY2NnZ2dnZ2dnZ2dra2tvb29vb29zc3Nzc3NDQ0NDQ0M/Pz9DR1aeZrcmjqL7KnbGdo7XZqZup2LirocbT09WcmL/XoZqz2bKkptbS0tLS0tLS0tLS0tLR0dHS0tLT0tPT09PU1NTV1dbW1tbX19fX19fX19fX19fX19fX19fX19bW1tbW1tfX19fX19fW1tbW1tbW1tbX19fW1tbW1tbW1tbX19fX2NjY2NjY2NnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dra2tra2tra2trZ2dnZ2dnZ2dnZ2djY2NjY2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnY2dnY2NjY2NjX19fX19fX19fX19fX19fY2NfX19fX19fYzYZdV2JvZE9dVEtIRlNRS0xAPj1EPD9DRj01NTc7OTY6Ozo8PTo7Pzo6OTg6PT0/Pjs/Oz49Ojs5Pjs9PD0+QURCQD8+PzxAQUVHRURSxdvY2dnZ2dnZ2dnZ2tra2tvb29vb3Nzc3Nzc3NzQ0NDQ0NDQ0NDQ0NO5gL3Tm5bP1LWLkZ/T1LyBu9TOlKDS0dLXqIfL1rGDxda5g7/V0tLS0tLS0tLS0tLS0tLS0tLT09PT09PU1NXV1dbW1tfX19fX19fY2NjY19fX19fX19fX19fX19fW1tbX19fX19fW1tbW1tbW1tbW19fX1tbW1tbW1tbX19fX19jY2NjY2NnZ2dnZ2dnZ2dnZ2tnZ2tra2tra2tra29ra2tra2tnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2NjY2NjX19fX19fX19fY2NjY2NjY2NjY2NfX2ct+WlVqaltMX01KTEpVTEZCPD0/R0ZIS0g9NjU3Ojk3OTo7Ojw9OT45OTo4Oz0+PkE+PTk8PDo9Pj46PTk5Oj9FQUA+PT8/QkBHRURFUMHc2dnZ2dnZ2dna2trb29vb29vb3Nzc3Nzc3dzc0NDQ0NDQ0NDQ0NDQ0cHR0crI0tDUxLjS0tHSwtLQ08fM0tHR0s/F1NHQw9TR0sLT0tLS0tLS09PT09PT09LS0tPT09PU1NTU1NXV1dbW1tfX19fX19fX2NjY2NjX19fX2NfX19fX19fX19fX19fX19fX1tbW1tbW1tbW1tfX1tbW1tbW1tbW19fX19fY2NjY2NjY2dnZ2dnZ2dnZ2dra2tra2tra2tra29va2tra2tra2dnZ2dna2tnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dna2tnZ2dnZ2dnZ2djY2NjX19fX19fY2NjY2NjY2NjY2NjY19rHd1xSZ2laTlpOTFBRV0VKPz89P0FFTExBPjc3NTs4ODk5Ojs8Pjw+ODo6OTs+P0A9Pj46NTo6Oz0/Ojs5Ojw+QkJAPz8/P0FCR0RDRE683dnZ2dnZ2dna2tvb29vb29vb3Nzc3Nzc3d3d3dDR0dDQ0NDQ0NDQ0NDS0NDR0dDQ0dPU0dHR0dPR0dHS0tHR0tLT1NLS0tXT09PV0tLS0tPT09PT09PT09PT09PT09PU1NTU1dXV1dbW1tfX19fX2NjY2NjY2NjY2NfX19jY19fX19fX19fX19fX19fX19fX1tbW1tbW1tbX19bW1tbW1tbW1tfX19fX2NjY2NjY2NnZ2dna2tra2tra2tra2tra2tra2tvb2tra2tra2trZ2tra2tra2tra2tra2tnZ2dnZ2dnZ2dnZ2trZ2tra29ra2trZ2dnZ2dnZ2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjbwXNYVWlrU0xSTlBSWVRGSTw+Qz9BQkVLPj43ODY5Njc4OTk7Oz0/QDw9ODk7Ozs/Pjw8OTU6PT47OTk7PD8/P0JCQT1BPUBBQkZCQkJLtd7Z2dra2tra2tvb29vb29vc3Nzc3Nzd3d3d3d3R0dHR0dHR0dHR0dDQ0NDQ0NDQ0dHR0dHR0dHR0dHR0dHS0tLS0tLS0tPT09PT09PT09PT09PT09TU1NPT1NTU1NTU1NXV1dXV1dXW1tbX19fX2NjY2NjY2NjY2NjY19fY2NjX19fX19fX19fX19fX19fX19fX19fW1tbX19fX1tbW1tbW1tbX19fX19jY2NjY2NnZ2dna2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tnZ2dnZ2dnZ2NjY2NjY2NnZ2dnZ2dnZ2NjY2NjY3LxvVFRsbExLUkpUUlVLRkQ6PkdEREFERjw/ODk6OTY5OTo3PD07PkA9PTc5Ojs5Pjs5OTY2Oj1AQT47PDk6Pj9DQT4/Qj0+QkNFQkFCSrDe2dra2tvb29vb29vb29vc3Nzc3Nzd3d3d3d3d0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0tLS0tLS0tLS0tLS0tLS0tPT09PT09PT09PT09PT1NTU1NTU1NTU1NTU1dXV1dXV1tbW1tbW19fX19jY2NjY2NjY2NjY2NjY2NjY2NjY19fX19fX19fX19fX19fX19fX19fX19fX19fW1tbW1tfW19fX19jY2NjY2NjZ2dnZ2dra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2trZ2dnZ2dnZ2djZ2dnZ2dnZ2dnZ2dnZ2dnY2Ny2a1NbcGtLVVdSXFFXSEQ+PEJKRT1ISj89PDc4ODo1OTg5Njs+PD1APDw1OTk8Oj87OTk0ODw9PUFBPD47Ojw+QD89PkE9PUNGR0I/Qkmq39ra29vb29vb29vb3Nzc3Nzc3N3d3d3d3d3d3dHR0dHR0dHR0dHR0dHR0dHR0dHS0M/U0M7P0tLT0tLS0tLS0tLS0tPT09TU1NTU1NPU1NTU1NTU1NTU1NTU1NTV1dXV1dXV1dbW1tbW19fX19fY2NjY2NjY2NjY2NjY2NjY2NjY2NjX19fX19fX19jY2NfX19fX19fX19fX19fX19fX19fX19fX19jY2NjY2NjY2dnZ2dra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tvb29va2tra2tra2tra2tra2tra2tnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dndsGRTYXJfT1pUV19RUkdCPUVJTEFBTEQ/Pzs6ODg5Mzg2ODY5Pj0+Pz06Njo7Pjs9PTo5Njg6PTtAQDxAPz0/P0I+PD48PEJFR0lCPkNJpODa29vb29vb3Nzc3Nzc3Nzc3N3d3d3d3d3d3t7S0tLS0tLS0tLS0dHR0dHR0dPT0bm7zLqbnLrQyNPT0tLS09PT09PT09PU1NTU1NTU1NTU1NTU1dXV1dXV1dXV1dXV1dbW1tbW1tbX19fX19fY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjX19fX19fX19fX19fX19fX19fX19jY2NjY2NjY2NjZ2dra2tra2tra2tra2tra2tra2tra2tra29va2tra29va2tvb2tra2tra2tra2tra2trb29vb29va2tra2tra2tra2tra2tra2tra2tnZ2dnZ2trZ2dnZ2dnZ2dnZ2dnZ3qpfVWBuW1VZUVpeT0xHQ0ZNSUZEREo7QUE7PDg4NjQ4Njk4Nzw/QT89Ojc8Pz48Pz87OjY4OD09QEE9QD5BQD1AOjs6Pj1BRUdJQkBDR57h29vb29vc3Nzc3Nzc3Nzc3d3d3d3d3d7e3t7e0tLS0tLS0tLS0tLS0tLS0tO+wMqaoKKViJGeqpOpz9TT09PT09PT09PU1NTU1NTU1NTU1NTV1dXV1dXV1dXV1dXV1tbW1tbW1tbX19fX19fY2NjY2NnZ2dnZ2dnZ2dnZ2djY2djY2NjY2NjY2NjY2NjY2NjY2NjX19fX19fX19fX19fX19fX19fY2NjY2NjY2NjZ2dna2tra2tra2tra2tra2tra2tra29vb29vb29vb29vb29vb29vb29ra2tra2tra2tra2tvb29vb29va29vb29vb29va2tra2tra2tra2tra2tra2trZ2dnZ2dnZ2dnZ2d6iXFVeblheXU5aUFROQ0NMSUlJRkpEPEJBPDs4NzY3OTc3OTk9P0E/PDo5QD88PkI/Ojg3NzY9Pz9APUBBPz88PTs7OD48P0VJSEE/Q0aX4dvb29zc3Nzc3Nzc3N3d3d3d3d3d3t7e3t7e3tPT09PT0tLS0tLS0tLS0tTIlZyum5m1iX2TjIKBhMTV09PT09PT09PU1NTU1dXV1dXV1dXV1dXV1dXV1dXV1tbW1tbW1tbW1tfX19fX19fX2NjY2NjY2dnZ2dnZ2dnZ2dnZ2dnZ2NjY2NjY2NjY2NjY2NjY2NjY2NfX19fX19fX19fX19fX19fX2NjY2NjY2NjY2dnZ2dnZ2dna2tra2tra2tra2tra29vb29vb29vb29vb29vb29vb29vb2tra2tra2tra2tvb29vb29vb2tvb29vb29vb2tra2tra2tra2tra2tra2tra2tra2tra2tnZ2dndmlpYYW5ZYVdPV01QRUJETElNS0ZJRT5CRDk4ODY3OTc1Njk4PT1BPjo4OT4+PD9APzw1Njc2PD4/PjtAQEA/Pj4/Pjs/PkFCRkdCQENIkeLb29zc3Nzc3d3d3d3d3d3d3d7e3t7e3t7f39/U09PT09PT09PT09LS0tLTz6h+kayPko6MhoCIiYSQo8rU09PT09PU1NTU1dXV1dXV1dXV1dXV1dbW1tbW1tbW1tbW1tbW19fX19fX19fX2NjY2NjY2dnZ2dnZ2dnZ2dnZ2dnZ2dnY2NjY2NjY19jY2NjY2NjY2NjY2NjX19fX19fX19fX19fY2NjY2NjY2NjY2NnZ2dnZ2dna2tra2tra2tra2tra29vb29vb29vb29vb29vb29vb29vb29ra2tra2tra2tvb29vb29vb29vb29vb29vb29va2tra2tra2tra2tra29vb29ra2tra2tra2tna3JJaWWNuWlpSVV5QTDxAR05IUklIRT47SEY4OTc1Nzg3NTg5ODs+Pj07ODlBPj1AP0E+NzU5Njs+QUI/P0BAQkI/Pj8+QUBEQUZIQj9FSozi3Nzc3Nzc3d3d3d3d3d3e3t7e3t7f39/f39/f1NTU09PT09PT09PT09PWtaWaiIuQhYCFi4iBg4qLf4bC1tTU1NTU1NTV1dXV1dXV1dXV1dXW1tbW1tbW1tbX19fX19fX19fX2NjY2NjY2NjY2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2djY2NjY2NjY2NjY2NjY2NjY2NjY2NjX19fX19fX19fY2NjY2NjY2NjY2dnZ2dna2dra2tra2tra2tra2tra2tvb29vb29vb29vb29vb29vb29vb29vb29ra2tra2trb29vb29vb29vb29vb29vb29vb29vb2tra2tra2tra29vb29vb29vb29vb2tra29uIWltnalxYTFpfVkg6TEhMSkpDRUZDQExINzo3Njc4ODU4Nzg5PDw7Ozk4QD89Pj8/PDY3PDQ3P0JCQUBAPz8/QT09P0A+QEBGRT09REuI4tzc3Nzd3d3d3d7e3t7e3t7e3t/f39/f39/f39TU1NTU1NPT09PT09PUxZKCg4WGfYGCfXx5foGCg36k29bU1NTU1NTV1dXV1dXV1tbV1tbW1tbW1tfX19fX19fX19fX19fX19jY2NjY2NjZ2dnZ2dnZ2dna2tnZ2dnZ2dnZ2dnY2NnY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjX19fX19fY2NjY2NjY2NjY2dnZ2dna2tra2tra2tra2tra29vb29vb29vb29vc3Nzc3Nvb29vb29vb29vb29vb2tra2tra29vb29zb29zb29vb29vb29vb29vb29vb29va2tvb29vb29vb29vb29vb29vb2tvZgFpebWhaU0ldW1hKRE1ISlNMR0ZBQD9KQjg7NjY5OTc1ODY4Ozo7Ojw5OD09O0A9Ozo2NTw3Oz1CQEFBPD49QEE9PEA/Pz5CREU+PERLg+Lc3d3d3d3d3t7e3t7e3t7f39/f39/f39/f39/V1dTU1NTU1NPT09PT2LKEkKh9g3l2hIh/e3d5gn5+i67A1dTU1NXV1dXV1tbW1tbW1tbW1tbW1tfX19fX19fY2NjY2NjY2NjY2NjY2NjZ2dnZ2dnZ2dna2trZ2dnZ2dnZ2dnY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2dnZ2dnZ2tra2tra2trb2tra2tvb29vb29vb29vc3Nzc3Nzc29vb29vb29vb29vb29va2trb29vb29zc3Nzc3Nvb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vc1nlcWmxmWFJPYFFSQUhHSkZYTEZAQENDSz87Ozc4ODc2NTc2ODo5PDw6PTs/PTs9Pjw7ODg8OT0/QkFCQzw8P0FCPj1BQkNCREVDQDtDTH3h3d3d3d3e3t7e3t7e39/f39/f39/f39/g4ODg1dXV1NXU1NTU1NPU0ruen3WKeXuIgICChYGDcnOAhYOMrNfV1NXV1dXW1tbW1tbW1tbW1tbW19fX19fX2NjY2NjY2NjY2NjZ2dnZ2dnZ2dnY2NnZ2dna2tra2trZ2dnZ2dnZ2djY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2dnZ2dna2tra2tra29vb29ra2trb3Nzc3Nzc29zc3Nzc3Nzc3Nzb29vb29vb29vb29rb29vb29vb29zc3Nzc3Nzc3Nvb29zc3Nzc3Nvb29vb29vb29vb29vc3Nzc3Nzc3Nvb29vb3dByXV9wZVdLUGNPS0JHQ0pIS0ZBPEE9SFBBOjo3Nzg3Njc4Nzw6OD09PD47QD88Pz07Ojs5Ojk8QEJAQkNAPUFAPz1AQkNDQUBAP0A7RU144N3d3d7e3t/f39/f39/f39/f3+Dg4ODg4ODg4NXV1dXV1dXV1NXU18h4i4V8goh6g4SBfoKCc2l0hYuGkJ3U1tXU1dbW1tbW1tbW1tbW19fX19fX19jY2NjY2NjY2NnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dra2tra2tra2dnZ2dnZ2dnY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2dnZ2dna2tra2tra2tra2tvb2tvb3Nzc3Nzc3Nvc3Nzc3Nzc3Nzc29zb29vb29vb29vb29vb29vb29vc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc29vb297KalxjcWVST1heSz9HTElPS0VAPkFCP0lPPjk6NzY7NzY6Ozc7Ojg6PDw+Oz09Oz48Ojs4OTo4OUFCQkFAQDtAQj06PkFCQz8+PT4/PUZOdN/e3t7e3t7f39/f39/f4ODg4ODg4ODg4ODg4OHV1dXV1dXV1dXV1s6dhpl+f5OTin+CgXx9gnNxm4mAgoOJwNnat7TQ19bW1tbX19fX19fX19fX2NjY2NjY2NjY2NjZ2dnZ2dnZ2dnZ2tnZ2dnZ2dra2tra2tra2trZ2dnZ2dnZ2dnZ2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NnZ2dna2tra2tra2tra2tra29vb3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nvb29vb29vb29vb29vb29vc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3NvfwGNaW21gVlBTU0pETEhNSEk8PkFEQ0ZORDw8OTc5OjY4Ozk3PDk4OTw9OzlAPjpBPzw3NTc7ODpAQUVBPz45PUI/Oz1CQkI6Pj07PT5GTnHe3t7e3t/f39/f39/g4ODg4ODg4ODg4OHh4eHh1tbW1tbW1tbV1tjLioCHhYOXjHh7e3lvfYF1a3ebdHZ7eInHxpiMrdjZ19fX19fX19fY2NjY2NjY2NjY2NjY2NjY2dnZ2drZ2dna2tra2tra2tra2tra2tra2tra2dnZ2dnZ2dnZ2dnZ2dnZ2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NnZ2dnZ2dnZ2dna2tra2tra2tra2tra29vb3Nzc3dzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nvb29vb29zb29vb3Nzc3Nzc3Nzd3dzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3d3d3d3d3Nzc3Nzc4LdjV1lrYlJNVVFMSktGS0ZDQD5CQT9FTT4+PTg5OTo3OTo3NT03Nzo+PDs7Qjw5Pz05NjY4PTk6QEJGQD49PEBCREA9QD9DO0A9PD4/Rk9t3N/e3t/f3+Dg4ODg4ODg4ODg4OHh4eHh4eHh4dbW1tbW1tbW1tfVrYZ6d32rn3l4entzdH+Dfm9xe3l6c3t2k4qFgImkzdnY19fX2NjY2NjY2NjY2NjY2NjY2NjY2NnZ2dna2tna2tra2tra2tra2tra2tra2tra2tnZ2dnZ2dnZ2dnZ2dnZ2dnZ2djY2NjY2NjY2NjY2NjY2NjY2NjY2dnZ2dnZ2dnZ2dra2tra2tra2tra29vb29vc3Nzc3N3d3d3c3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc29vb29vc3Nzb3Nzc3Nzc3N3d3d3d3d3d3dzc3Nzc3Nzd3d3c3Nzc3Nzc3N3d3d3d3d3d3d3d3dzc3OGtYVtebGJSTVZMTUdLS0RGQkI7QT08RUxDQT44Ojk6Nzc5NjY6NTs+QDs9Oz89PD89Ojk5Ojw5PEVDRkA/PkBDQkQ9OT0/QT1CPz1APkdPadvf3t/f3+Dg4ODg4ODh4eHh4eHh4eHh4eHi4uLW1tbW1tbW1tfQmH+Qh4N9eoN2e3Vzenl6kKqmd3JyfoeHh4CAfoKEhJHJzNnX19jY2NjY2NjY2NjY2NjY2NjY2NnZ2dnZ2tra2tra2tra2tra29va2tra2tra2tra2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2djZ2dnZ2dnZ2djY2NnZ2dnZ2dnZ2dnZ2tra2tra2tra2tra29vb29vb3Nzc3N3d3d3d3d3d3d3d3d3d3d3c3Nzc3Nzc3Nzb29vb3Nzc3Nzc3Nzc3Nzd3d3d3d3d3d3d3dzc3N3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3NzhpV9UYm1iUE9TSUhHRkpJSUJBPkJCPEVFREA+ODo4Ozc3Ojc4ODY+Pz07PDk9PDo+PTs6Njc7NjpEQUY+Pz8/PkNBPzs9PT47REM/PjxIT2fZ4N/f3+Dg4ODg4eHh4eHh4eHh4eLi4uLi4uLi1tbW1tbW19jYyH52doN+fnR2eIaCenl1d5yhu6GEgoCAfoeKinx/gYaMnKjO2NjY2NjY2NjY2djY2NjZ2djY2NjY2dnZ2dra2tra2trb29rb29rb2tra2tra2tra2tnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dna2tra2tra2tra2tra2trb29vb29zc3Nzc3N3d3d3d3d3d3d3d3d3d3d3d3dzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3e3t7e3t7e3d3d3d3c35pbT2drXFBRUElDT0pLR0xHSkJAP0FHREBBPDg8ODg1ODk3Njc3QEA/Ozw5Pj04PTw8Ojc4PTk/RENGPkE/QkBDPzw6Pj0/PkVEPz07S1Fj1+Hf4ODg4ODh4eHh4eHh4uLi4uLi4uLi4uLj49bW1tbW19XB3LRueHJze3B6eXaFiIR7eH2AgZiljH98fnuRhZaLhoGDgY6Rvd3Z2NjY2NjZ2dnZ2dnZ2dnZ2dnY2dnZ2dna2tra2trb29va2tva2tra2trb29ra2tra2tnZ2dnZ2dnZ2dnZ2dna2trZ2dnZ2dra2tra2tnZ2dnZ2dna2tra2tra2tra2tra2tra2trb29vc3Nzc3Nzc3N3d3d3d3d3d3d3d3d3d3d3d3d3d3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3e3t7e3t7e3t7e3t7e3t7e3t3d3d6NWFdobllQUUtISlNJTUhNSUtBQz9DRkJBRDo6PDg2NDg4NzY2Nj8+Pjo8OTw7Oj09PDw4Ozw7RERERT4/PkI+Qj84PT8/Q0NCQEE+O0xUY9Xh3+Dg4OHh4eHh4eLi4uLi4uLi4uLi4uPj4+PW1tbW1teslLZ6eHJvd5V7dHuLgHh1bn6Fg3t/hYhyfH2bnI6JioJ+g32Hk5rH1NjY2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dna2tra2trb29vb29vb29vb2tra2tra2tra2tra2tnZ2dnZ2dnZ2dna2tra2tra2tra2tra2tra2tra2tra2tra2trb2tra2tra2tra2trb29vc3Nzc3Nzc3Nzd3d3d3d3d3d3d3d3d3d3d3d3d3d3c3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3N3d3d3d3d3d3d3d3d3d3d3d3d3e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3d7Zf1lgaGxcUUtHR09LTk5PTURGQkg/Q0hEREA6Ozs4NzU3Nzc4NThAPkA7PDk8Ozw+Ojk7OTk7OUZERUI8QD4/PEBDOz5AP0A/Qj8+OjtKVWPV4eDg4eHh4eHi4uLi4uLi4uLi4uPj4+Pj4+Pj1tbX19vKhYR3cXJubniVhHt4hH95dnB4c3eLkY6CdnN9ioaId3d1d4ODfIiIk8Pb2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dra2trb2tvb29vb29vb29vb29rb2tra2tra2tra2tra2tnZ2dnZ2dna2tra2tra2tra2trb2tra2tra2tra2tra2trb29vb29ra2trb29vb29vb3Nzc3Nzc3Nzd3d3d3d3d3d3d3d3d3d3d3d7e3d3d3d3c3Nzc3Nzc3Nzc3Nzc3Nzc3d3d3d3d3d3d3d3d3d3d3d3d3d7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7f0nVZaGlqVk5KSE1OR01EUElGSD9FPUZMREM+Ozs8OTc3OTY2OTU4Pj4/PTs8QDs9PDo3Ozc5OThHREVCPUE9Qj8+QDw/QUE/QEJAPjs8S1Ri1OLg4eHh4eLi4uLi4uLi4+Pj4+Pj4+Pj4+Pj49fX19fEknuJf29sbnV2foSBg4qGfnVybWVtiIaKjoR7c4OHint4e4OPj4GEioqxztrZ2dnZ2dnZ2dna2tra2tra2tra2trb29vb29zc3Nzb29vb29vb29va2tra2tra2tra2tra2tra2tra2tra2tra2tra2tvb29va2tra2tra2tvb2tvb29vb29vb29vb29vb29vb29zc3Nzc3Nzc3d3d3d3d3d3d3d3d3d3d3t7e3t3d3d3d3d3d3d3d3dzc3Nzc3Nzc3d3d3d3d3d3e3t7e3t7e3t7e3t7e3t7e3t7e3t7f39/f39/f39/f39/f3t7e4clsW2pqalNOR0dOT0VIRk1JSUA7RD5ISUA9PDo6Ojg2ODo3Nzk0OD08PT07ODw8PDw4Njc4OTo6RUJFQT9APEI/Q0M+PkNEQUBAP0A8PUtRYdPj4OHh4uLi4uLi4uPj4+Pj4+Pj4+Pj4+Pj5OTX19fZqXaFfnx3bHB3eXh8jH2KhYB3anN0d3p9bot7fnl6foR/gIGDfnh8foeGlrbT2tnZ2dra2tra2tra2tra2tra2tvb29vb3Nzc3Nzc3Nvb29vb29vb29ra2tra2tra2tra2tra2tra2tra2tra29ra29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb3Nzc3Nzc3Nzc3d3d3d3d3d3d3d3d3d3d3d7e3t7d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3t7e3t7e3t7e3t7e3t7e3t7e3t7e39/f39/f39/f39/f39/f39/e3uO9amFpa2lRTkZNTEtKWE1OR0FAQE9BQz9AOzw4OTk5Njg2NjY4NDs+PD07OTY6Ojk6OTU4OTg5OkJERj8+Pj5AQEBCPzxBQD88Pj9BOT5KT17S4+Hh4eLi4uLi4+Pj4+Pj4+Pj4+Pj4+Tk5OTk19fX2sqKhIB5c29tcXN1d4CUeHaAfHWHhXd1cnWgmXp7d3Z5doR0bWxue3iAmouTu9za2tra2tra2trb29vb29vb29vb29zc3Nzc3Nzc3Nzc3Nzc29vb29vb2tra2tra2tra2tra2tra2tra2tra29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vc3Nzc3Nzc3Nzc3d3d3d3d3d3d3d3d3d3d3d3e3t7e3t3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3t7e3t7e3t7e3t7e3t7e3t7e3t/f39/f39/f39/f39/f39/f39/f397js2lpbmloUFBPTExPUk9LU0Y/RURERD48PDg7ODc5OTU2ODY2NzM6Pjs+PTc6Pjk5OTk2Ojo4NzxDRUc/Pzs/PkA9PkE9Oz0+OUFAQDhBTlFc0OTh4eLi4uLj4+Pj4+Pj4+Pj4+Pk5OTk5OTk5NjY2NjauY6AenZ1bmpveHCBfWt0cnZ3hIV5h4d5lY55eXp1d3pza298gHx2fYh8gLLe2tra2tvb29vb29vb29vc3Nzc3Nzc3Nzc3dzc3Nzc3Nzc3Nzb29vb29rb29vb29ra2tra2tra2tra29va29vb29vb29vb29zc3Nzb29vb29vb29vb29vc3Nvb3Nzc3Nzc3Nzc3Nzc3Nzc3d3d3d3d3t7e3t7e3d7e3t3d3t7e3t7e3t7d3d3d3d3d3d3d3d3d3d3d3d3d3t7e3t7e3t7e3t7f39/f39/f39/f39/f39/f39/f4ODg4ODg4N/f39/f4qpqa2hrZFNQT0ZQVFJOSFJLPkREQ0I7Ozk6Ojg2Nzg1NjY4ODg0Oz88Pzw5PDw3Ozo6Nzo6Nzo9Q0JDPUE+Pzw5PT5BQDs8PDtFQD47Q05TXNDk4eLi4uLj4+Pj4+Pj4+Pj5OTk5OTk5OTk5OTY2NjZ1p5vdntveHh2cG50d3BwdHBzb36Jc3qGhY2EenNtcoB6hn1vg5OBdnx9g4a13drb29vc29vc3Nzc3Nzc3Nzc3Nzc3Nzc3d3d3Nzc3Nzc3Nzc3Nzb29vb29vb29vb29ra2tra2tvb29vb29vb3Nzc3Nzc3Nzc3Nzc3Nzc3Nvb29vb29vc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzd3d3d3d3d3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3d3d3d3d3d7e3t7e3t7e3t7e3t7f39/f39/f39/f39/f39/f39/g4ODg4ODg4ODg4ODg4N/f3+KgbWhma2ZVVlJHUFFOS0xMRUJIRUc9OD08Ojo3Nzg2Nzc2NTY3NDg+PD09Ojg6OD46Ozc4Nzc6Oj5DRDtDQj49OD1AQUM/Pjw+RTw+PUJNUF/S4+Hi4uLj4+Pj4+Pj4+Pk5OTk5OTk5OTk5OTk2NjY3MB2doCCfnp4eHBsdXlya399bHNvdGdoaYB/aWh4c2d+iYl4cIKGe3d9foWKvd3b3Nzc3Nzc3Nzc3Nzc3Nzc3d3c3Nzc3N3d3dzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nvb29vb29vb29vb3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzd3d3d3d3d3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7f39/f39/f39/f39/f39/f4ODg4ODg4ODg4ODg4ODg4ODg4ODflGttZm5mU1NJUFlUTEhGTkZGRUJGPTs+PDs5Nzc4NTc5NjQ1NzU4PDs9Pjo6OztAOTs7ODc6OTlAQkE8QUE/Pzk/QEJFQ0FAQEM7Oz1ES01g1uTi4uLi4+Pj4+Pj4+Pk5OTk5OTk5OTk5OTk5NnZ2tmYc3uqhJaCcnR1dn14aGx8d2h4d25rcHR5gIN2dHyBhIJ9c3CAin94gn95g8je3Nzc3Nzc3Nzc3Nzd3d3d3d3d3d3d3d3d3N3d3dzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nvb29zc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3N3d3d3d3d3d3d3d3d3d3d3d3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e39/f39/f39/f4N/f39/f3+Dg4ODg4ODg4ODg4ODg4ODg4ODg4ODh24tubWdzY1lRTVVbV0hDSUZOS0dCRD8/Qjo7OjY2NzU2NzY0ODc2Ozw7Pj86PDk8Qjg3OTo6Ojk6QUFCQUJDQEE+PT9CQ0NEQUJGOTg9REpOYtjk4uLi4+Pj4+Pj5OTk5OTk5OTk5OTk5OTk5OXZ2drcqHGCtXiRfnNsem6EgXaCfWtoan+DeHZ8dX2FhXRmcHl9d316gIqFe318foC03tzc3Nzc3N3d3d3d3d3d3d3d3d3d3d3d3dzd3d3d3dzc3N3c3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzd3Nzd3d3d3d3d3Nzc3Nzc3Nzc3Nzc3N3d3d3d3d3d3d3d3d3d3d3d3d3d3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e397e3t7e39/f39/f39/f39/g4ODg4ODg4ODg4ODg4ODg4ODg4ODg4eDg4ODg4ODg4tiFb3FrdWFWT1VVXE9ETUY+SkdKRUQ8P0I6PDk4Njg0NTY3NDc2NDk7Ozw7OD47PEE4ODo9OD04Oj09QEBAP0FCP0A+QENCQ0FBRTc2O0RMTmPa5OLi4+Pj4+Pj5OTk5OTk5OTk5OTk5OTk5OXl29ra3Z5sbnNxhY1ybXBuf391hH5rcnZ2enN4gXhzb3VwbWt2fHmFiIB/f392coODsd/c3Nzc3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3Nzd3d3c3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3N3d3d3d3d3d3d3d3d3d3d3d3d3c3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e39/f39/f39/f39/f39/f39/f39/f39/f39/f4ODg4ODg4ODg4ODg4ODg4ODg4OHh4eDg4eHh4eHh4eHh4OLXhW1xb3ZeUldTWlpRSkhDQFFAQkQ8OT9BOjw5NzU3NDU2NjQ3NTY9PDo9PTk+OjxAODo6PDY7OTs+PUJCQjtBQkBDQEBEREM8PUA3OjxFS01l3OPi4uPj4+Pj5OTk5OTk5OTk5OTk5OXl5eXl5dPOxsB+cWxveHt2b3VuanNzbZKGeG50dG5vdIZ/b2twboJ0bXZyfY2DdnF/d3mKgabf3Nzc3d3d3d3d3d3e3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3dzc3d3d3dzc3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3t7e3t7e3t7e3t7e3t/f3t7e3t7f39/f39/f39/f39/f39/f39/f39/f39/f39/f4ODg4ODg4ODg4ODg4ODg4ODg4ODg4eHh4eHh4eHh4eHh4eHh4eHi1oZucG1xYFJZUFdfWUpMTElSP0Q9OTtCRjs6OTc0NTY1NzU0NjY2Pj07Pz45PTk7Pjg9Ozo0ODtAQENCQ0FCRkE/Q0BBQkREOz0+OTs8QkxNZODl4+Pk5OTj4+Tk5OTk5OTk5OTk5eXl5eXl5eW5t7Woc3JscHd6dHd4bXFydXd/hHRyc2xsa3F8bnBudGuBf3GAd32Eg355gHNygYqg2d3c3d3d3d3d3d7e3t3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3e3t7e3t7e3t7d3d3d3t7e3t7e3t7e3t7f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f4ODg4ODg4ODg4ODg4ODg4ODg4OHh4eHh4eHh4eHh4eHh4eHh4eHh49WHcWxqbF5YWlVXYFZWUE9QTD1BOjs8RkE4Ojg3MzY1Njk2NTg1Nz89Oz8+OT04Ozw5PTs7NTo9Q0JCPENDREREQUE/PkJDQzw9Pjg5PENLS2PN0dnh1sjY4+Tk5OTk5OTk5OTk5eXl5eXl5eXltbW2q3J5cm59f3Z1d2hqaGlwb3Zta2tnZWZxdG15gG5teXd2iHhxa2podXV5dHV/wd/c3d3d3d3d3d3e3t7e3d3d3d7d3d3d3d3d3d3d3t7e3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3e3t7e3t7e3t3d3d3d3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f4ODg39/g4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4OHh4eHh4eHh4eHh4eHh4eHi4uHh4ePVhnFwY2lhV1NZV19MUk9STUtAPjg5O0E+ODc5NjQ3Njc6NjY2NDk+Pzo8Pzo/OTo6Nzo9PDk5PEFBPTtBQ0VDRkA+Pj5BRUQ+QEE3OD5GSEpesrW4wbm1u8jg5eXl5OTl5OXl5+fn5+fm5ebm5ra2tbWOfX5weoR1cnZnYmNlbGtyb2ZpbHZtd4Z9hXlsbHd4a3ZwfH14c3V5fHd2h7ng3d3d3d3d3d7e3t7e3t7d3t7e3t7d3d3d3d3d3t7e3t7d3t7e3t7e3t3d3d3d3d3d3d7e3t7e3t7e3t7d3d3d3d3d3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4OHh4eHh4eHh4eLi4uLi4uLi4uLi4eHj1Yd1bl5uY1pUU1hXS1NLSk1SR0E4Ozs+PDk4NzU2NTY2OTY4NjY5Pzw6PT07Pzo7Ozk8PDs5Oj4+Pjs8PUFEQkNBQEBBP0JDPDw9Nzs+REVKXrG1tLW2t7e2y9rJ3uXl3eDi3tXU1tPU4OPg39+2treuh3t/bnmNenJ1bWNobGxtaXR4enF5enqIh4N6aWh9cWRvcXyGgX55e318e4an2t7d3d3d3d7e3t7e3t7e3t7e3t7e3d3d3d3d3t7e3t7e3t7e3t7e3t7e3t3e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t/f39/e3t7e3t7f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4OHh4eHh4eHh4eLi4uLi4uLi4uLi4uHh49aGdmxhb19dV1lcWlJQSEpXTEVHPUA9Ozs9OTY0NjU1NTg2NzY3OD87OT09PDw5OTw6Pjw6OTg+Qjs7Pj5AREBDRUFAQD0/QDw9PTU5PEJHRl2xtbW2uLm5ubq9uMPT0r3BwcC6u7y6u8TMxb/Dt7e3hGl1gX1ndYd5Z3Vxa2t5eHB3fH15bWl3e3h3bml1j4FwbHl4d3d9gXuGgnmAoNze3d3d3t7e3t7e3t7e3t7e3t7e3t3d3d3d3d7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t/f39/f3t7e3t/f39/f39/f39/f39/f39/f39/f39/f39/f39/f4ODg4ODg39/f39/f39/f3+Dg4N/f4ODg4ODg4ODg4ODg4ODg4ODg4ODh4OHh4eHh4eHh4eHh4eHh4eHh4uLi4uLi4uLi4uLi4uLi4ePXhXJrZ3RhW1hYX15TVVVRVUpMRj9JRDs5PTY2NDc3NTc4Nzc3ODk8PDo+PDg8Oj0+OTs8OTs5P0E8PT9DP0FARUJCQTw9Q0A6Pjw1NDlER0dasbW1tre5ubm5ubm3ubm4uLm5urq6urm5urm6u7e3uX9ucHN6b3B/eXNuc3Vsc3Z4cXFwb2tvcX6Bc2mHhIF9dHOHdW11hYmBgHJ2hafd3d3d3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7f39/f3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f4ODg4ODg4ODg39/f3+Dg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4eDg4eHh4eHh4eHh4eHh4eHh4eHh4eHh4uLi4uLi4uLi4uLi4uLi4uHj14lxa2xyW1dXXWBUUVVUUFJPSkNATUE9Ozk2NTM0NjQ2ODc3Nzk6Pjs8Pjs5PDo8PDk8PTw7PT0+PUNEREBDQkE/QD48PkE8OD06NjY6QkpIWLG1tLa2uLm5uLi5uLe3uLi5urq5ubi4uLi6uru3uKx7cnhxf3ZzfnBsbXpyZ29sbW50cHt3d3Jyd3pvhpJ2f3x8enZ5fH9zfYdyda3T393d3d7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e39/f39/f39/f39/e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f4ODg4ODg4ODg4ODg4ODg4ODf3+Dg4ODg4ODg4ODg4ODg4ODg4eHh4eDg4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4uLi4uLi4uLi4uLi4uLi4uLi49eHb2pxalVWV2FbT1FSUE5XSURESUo/Ojk6NzUzNDk1NzY2Nzg4Ojw7PD46PDo6PTw5PDw9Oz09PDs9REdEQ0E8PDw8Pj5AOzg8ODE1OkFGRVautbW1tre4uLm4uLi4uLe4ubq5uLi3t7i4ubq7t7mqcnB4d3x7e4J3aG5xam9qY2lyf21zcn54dHFsanaAeX2AgH91doB1a4qLgHaR1d/d3d7e39/f3t/f3t7e3t7e3t7e3t7e3t7e3t7e39/f39/f39/f39/f4N/e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t/f39/f39/f39/f39/f39/f39/f39/f3+Dg4ODg4ODf4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHi4uLi4uLi4uLi4uLi4uLi4uLi4uPYhm1sdGVWUFxnWE1YU1JRWUVDS1BOOzk4ODc1NTM5NTY2NzY4Nzk+OT0+OTw5OTw7Njg5OTo8QEA9PkBGQEJCQDo+PEE9Pzs7OzYxNjxCR0RQqLa1tba2tre4t7i4uLi4uLm6ubi4t7e3t7e5ure2tIlyd3h9iXxwem99c2hqbGdnbHRscXd0cWx2c3Fxd3FyfHl4g3Z7d2mLkYp9kM7f3d7e3tvY2drZ297f39/e3+De39/f3Nvc3N3e3uDg3+Dg4ODf3t7e39jS397f397e3t/f3t7f3t/f3t7e3t7e3t7e3t7e3t/f39/f39/f39/f39/f39/f39/f4ODf4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODh4eHh4eHh4eHh4eHh4eHh4eLi4eLi4uLi4uLi4uLi4uLj4+Lj4+Li4uPj4+Pi4uLi4+Lk14NoZ3VkVlVkZVdKWllXW1Q9RU1LSD04NzU3NjQzOTQ0Nzc1Njc5PTo9Pjw9PDk7PDk5Oj45PD4/PkFBQ0FFRUQ+OzxBPjw5PDs3Mzc+REhFSqG2tbW1tbW2tre4uLi4t7e4uLi3tra2tra3uLm2traLfXpsbHp/cGx5dm5qaGdlcXp4b2lvb3B1c21zd4Fnb32CgYNyf3lqcHJ6f6ng393Zy8a/vL2/vsLN0tDW3tnc4NfQzcPCw8PH1dfT2dzX1NjX0MfExce9vM/Kz87Y3djO3N3c2t3T0dze39/e397e3t7e4N/f39/f39/f39/f39/f39/f4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4OHh4eLi4uLi4uLf4uPi4eLg4d7W29/Sw8rJx9Hb3OLk4eHg2dre1sbExcTN2trf5OHi4trX3st9aWZxYVleZWFNTFRLUlpMO0hNSEZBPTc2NjUzNDY2NDg3NjU2OTw7Pj46Pjk5PDk3OTs7Oj49PEBAQ0RCR0ZCQT08Q0A9OTw7Nzc3P0RGRkaZtrS1tbW2tra4uLi4uLi3uLi3s7W2t7a3t7i5tba3opdxb29waW50dnFmZWNrbmdvcm1mZ2tygWVvdnyAeGRzj39zaHFyaWVlbm+w39HFv7u5ubm5ubq6uru6vc3Gw8e/urq6uru7u8HCvcHFvby/vry7urq5ubq6ubm6w8XDucDDwby/ube/z8/U3tjc3t/g3tLa4N/f4ODg39/f39/f39/f3+Dg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODh4eDg4ODg4ODg4ODh4eHh4uLi4eDh4uLi4uHa2t3RwsPCu8XT1uDdydPDrrnAsaqrq6uwtLbJ0sXRxLG4v7Srq6usr7S0vMzE1c60tLureGxtbWBdYl9ZS1NVVFFQREBRTUhEPzo3ODU3MzE1NjQ5ODQ2Njo8Oz08ODw5Njo6ODg5NzU8PDw/QEFAQkRDQkE8PkI/Pz09PTc1OD5DRUNAj7a0tLW1t7i4uLi4uLm5uLe1sautr7Oxs7OztLS0tqaei2tue3ZxeXhnY2hfcXdha25vaG99b25ja2lseHdsa4Z+bHB6dm1scG95sca8uru7urm5ubq6urq6urq6urq6urq6urq7u7q7u7y7urq6ubq7u7q6urq6urq6ubi3t7i4t7e2tbW1tbi3u8e+w8XHzcS4wMnH0tzZ2d/e3uDf39/f4ODh4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODh3Nji4uLi4eHh4OHg3tfGxtHQztTe3tPO0t/SuLi8sq2trKysrrG+ua63rKipqamqq6urqqqqq6ysuKyqqqqrq6urra6urq6urryzrayrpHlub21fXl1dVE1SU1xUSkE/UElIPjg5NjgzNzMwNTczNzg1NzY2Ojw/PDg5Ozo6Ojg5OjY1OTs8Pj9EP0NFQkNCP0BAQT9APjw3ODc6QUVEP4W4tLS1tbe4uLm5uLi3t7SurKuqqq2urq6vsLGzs7WjcG5ucm1wg311aWFlaGZkY2Rxc21td25naW1tZXBzb29zcXN8h4F6dX11n7u6uru7urm5ubm6urq6urq6ubq6urq5uLm5ubm6urq6u7q5ubm5ubq6ubm6ubm4uLi3t7e4uLe3t7a2tbW2tra1tbW1tba1t7e3t7rBvrzGycrb3+Dg3tvd3d7h4tDW4uHg4ODg4ODg4ODg4ODg4OHg4OHi0768zNjd3OLg0dnbxL23sLCxsa+zu7uzsLS9s66urq2tra2sq6qqqqmpqKmpqampqqurqqqqqamoqampqampqaqqqqytrq6urq6urq6sraR4aWJxZmFZWlZRUk5cU0Y9QlJEQTc8OzY5NTY1NDU2NTg3NTY1Nzg7Pjw7OTk5Ojg3Nzk3Njg8Oz47RD8/Q0BBREE+P0M9Pjw+Ojo3Nz9DRj54srCztLW2t7i3trKurq2sq6uqqaqtraysrq+xs7S1t4xucnRqaIB5ZmpmZWxdaG5waGxxYmNmcoJ+dmhobGpueoaBhXx4cXF5gK+6ubq6urm5uLm5ubm5ubm5ubm5ubm4uLe3t7e3uLm5ubm5uLe3t7i5ubi4uLi3t7a2tre3t7e3tra2trW0tLW1tbW2trW1tre3t7e3t7e3tre4v8bP0MS+v8DE19e8ydra4OHg4ODh4eDg4ODh4eDb3t7Uzby3tre6wMDJxLfIvrKwsLCwr7Cvrq6ur7Cwr66urq6uraytrKurq6qpqampqampqampqKmpqKmpqampqKmpqKmpqqqrraytra2ur66trK2heWpkbWdiXFhRUFFLVEpCOklRP0E3PDk0OjU2NTQ1NTY4ODY4Njs6OTw9PTs6ODY2ODg6ODY3Pj09PT5BQUVCQkNBQUBBOj09Pz05Ojc9QUc8bKqmqKutsLGwrqupqKqrq6mpqamrrKytra2usLO0tbilgIdvaWdzdGZrcG1qZGxvcm5rbWNrcHyJhG5qbHx4Y3uKfnNqc25rcY+7ubm5ubm5ubi4ubm5ubm5ubq5uLi3t7e3t7e3t7i5ubi4uLe2tra3t7e3t7a2t7a2tra3tra2tbW1tba1tLS0tbW1tra2tra3t7e3t7i4uLe2t7a2uLm4uLe3uL6+uLq9vcfb4OHg2Nnd4eHg3dfKwcPCurm5uLe4uLi3tbS0tLKysbGxsLCvr6+vr6+vr6+vr66ura2srKyrq6yqqqmoqKmppqepqaehpaipqamoop+hoZyip6inqausrK2ur7Cwrq2unXdwbGphY2BZUU1RTFJGQzlNUEU+ODs3Mjc5Njc0NDM1ODg3OTc7OTo9PTw6Ojk3NDo5ODY1OD8/QEI9RENDQ0FDQEJBQDtAP0A/PDw6O0NIPWOopaWlpqioqKenp6ipqqmoqKipqqqsra6wsLCztLW1taWYdn5xZmt4cW9tZmVsaGNsZ2ZpaX11bWlvfXZ5hWZod294b3Fvcninu7m5ubm5ubm4uLm6ubm5ubm5ubi3t7W1tba2tre3t7e3t7a2tbW2tre2tbW1tra3t7e2tbS0tLS0tLS1tLS0tLW1tba2tra2t7e3t7e3t7a2tre2tre3uLe2t7i4t7i4uLi4wMXTyry8w83PyMC9urm5ubq6ubi4uLi4t7W0tLSzs7KysrGwr6+vr66urq+vr6+uraysrKurrKysq6ehoJ6gn5udoaGdlpmkpKaon5mZmZmanZ+gn56fpKqtrq+ura2srJl1cGlrY2FeXVVOU0tSREQ4TktHQTo4NTI2OTY1NDczNzc3ODk3OTo7PT0+ODg4NzU6OTk1OD9AQEJEPkZBQkNAQkNCQT88QEJCQD0+OjpERj5cpqWmpqampqanqKenqKioqKenqaurrKytra2ttLS0tbekc311bnONf3JmanFjaW1jaGZobG51aV9jZ3VzdnpuZ3Bwcn56cYihu7m5ubm6urq6urm2s7a1uLm2trW1tra1tbW1tbW3tra3tra2tbW2tbW1tbS0tLa2t7e3tbS0s7O0tLW1tLS0tbW1tra2tra2t7e3uLe3tra2trW2tbW2tra2tra2tra3tra3uLi3uri4uLi3uLi5ubm5urq6urm4t7e3t7W1tLS0s7OysrKxsbCwr66urq6urq+vra2srKuppaSmpqScmZubmpmampmXl5eXl5aZm5iZmJmZm52en5+dnJ6gpKWko6OioqKQdG5jcGFeXltUU1RIVEo/PFFCRkM7ODYzNzo1NTQ4Mzg5OTc4OTc7OTs9Ozc6NzU2OTk4NTg+Pz9ART5CPz9DPzxBQUI/PT9EQT8+PTk9Q0Y/VaSlpqanqKeoqamop6ioqKioqKiqrKuqqaipq7W1tba5o3eKcXKHhnd0cGh5a2JjYWVsaW5zal9jZWNjZWprYmRqbHaXjX6ovbm3tre5u7u6uLWxrKurqq6wrKyrq62tq6uvsLGvr7CytbW2t7W1trW1tbW1tbW2trSvr7O0tLSvra6vsrW0tbW1tbW2t7e3t7e3t7e3t7e3t7Owsra1tLa2tre3tra2tbW1tra3t7e5uLi4t7e3uLi4ubq6urq5uLi3t7e1tbS0tLS0tLS0s7OysbCvr6+vr66vr62oo6KgnJqampqZmZqbm5qampqbmpmZmZiXl5aYmZmZmpycnZ+foJ+goKChoaCgoJ+fi3RuaXRdYGZeUlRLRFRJPUVTSEVCOzo0NDY5NDQ1NzM4ODg3ODk5Ojs7Pz04OjkzNTg5NjM5PT5AP0A6QEJCQkA/QEJCPz0+QUFCPz06PkVDQFGjpqWlp6inqauqqKaoqKipp6ioqKinp6ioqaq1tbe3t7KZtH99kIx1Z2lqbGZjYGNoZW94cGlicXx5cGpmZmRma3NqhYystrKwra2ttLeysLCtrKuqqaiop6ipqampqKinqKipqaeoqqurra2sqqytraysrq6traunpaSnqqyopKOkpamwsbGztbW2t7i3t7W1tre4t7e3t7Kppaasq6ivtLa1s7W3t7a1tbW2tra3t7e3t7a2t7e3t7m6urq5uLi3t7Wxs7S0tLKxsK6sq6yurrCxsK2rqqmqqKijnJqZmJmYmJiYmZmZmZmZmpqZm5ubnJybmZeYmpqcnJydnJ2foKGhoqKioKGgoKCfnop1amtuWVxhVktPREdVRz5PV0hEPTw4MzQ0ODQ1NDgyODk4ODk6Ojw5OUA8Njk6MzY3OTE0PD8/QEBBOkNGRUJBREJDQTo7P0FCQz9APUBEQ0BPo6empaemqKqqqqakpqenqKioqKimpqaoq6uttba3t7e4rbJ1cHuDdmBiaWtiZWZhZGdmfYh5bHKAfXFvcXhjbW5xZo+srKurq6ysra6urK2trKyqp6WmpaWlpqioqKiopaeoqKioqKeoqampp6Wko6KioqOioKKioaKhoKChoaKjpKOjpaWlqLC0s7OzsKuqqaqztLa3trGopaOioaGipKiqqairs7Sxrq6xs7W2tra3uLi3t7e3t7e3t7a2uLe0sa6ppqerrKmnpqWkpKSkpKWnqaajoJ+enZycm5uampmZmJeXmZmZmJiZmpqampqampqbm5mYmpydnZ2dnZucoKGgoaOjoqCgoKCfnp2FdGtsaFdYU0pHTUVITUdAU1dGRz09OTM2Mzc0NTU3Mzg6Ojo6OTw9OjpBPDY9ODM3ODgzNztAPz9AQDpCRUNAQkRDQT87PEBDQkNBQDxBQ0A9TqKnpqanp6mqq6mkpaWlpaaoqKippqanqKmpqrW2tre3t7izc2h7c2JnamtpaWJhZGloXV1tfHJma3J/fHR8bm1zc36gqamrq6uqq62trKusq6mpqKWjpKampqWmp6eqqaamp6enqKinp6iop6WjpKKhoaGhn56en5+fn56foKGho6Wko6OkpKSmp6enpqWkpaampqeqraumpKKhoaChpKWlpaenpaeoqKalpaivtLa3trW1tra1tbOwrKupqa6rqKWlpqampaSkpaWlpqWkpKSkpaKhoaGgnp2bm5ucm5qamZiXmJiYmJiZmpmZmZmYmZmZmZqZmZydnJycnJybnJ+fn6ChoaKgoKCfnZ2cgHNrbmReU0pITUZETEtFRFFTQ0c9PDgzNjI4NDY0NjQ4OTg6Ozk7Pjw5PTs5PTczNTk2NTY8QD0/QD88P0JDPkJCQj89Pj5CQ0FFQD86PkVAO0+jpqWkpqeoqaelpKWlpKWnp6eoqKanp6alpqa1tba2trW2uYptcW1vfHxxZ2pmYGFsYFROW2hqbm9tgYJ9cWdxdn6aqKeoqqmpqqurrKqqqqimpaWkoqOlpqalpaWmqaqppqWjpKWmpqSjo6KioqKgoJ+fnp6cnJycnJ2dnJ2en6CioaKjo6KhoqKkpaSioqOjpKSjpKSko6Ggn6GipKanp6ipqaelpaSipKSlqK2wsKyrqqusqqmnpaWmpaWlpaalpqioqailpaWkpKSlpKOjpKOioaGhoqKgnp2cnJubm5qZmJiYmJmam5mXl5eWlpeXmJiZmpqcm5qampubm5ucnJ6goKGgnp6enpycm356bnJiXlNNSlBFRk5NQkBPRT5JOz01MzYzODM2Njc1Ojs4OTs5Oj49Ozo5OT03NjY5NjU2PkI+PkE/PT5DQT5DQ0BAO0BAQkJCRUA+Oz5FPzxQoKSjpKOjo6SkoqSlpaSlpqamp6empqalpqaltLW1tbS0tbiBaHx9ZXOCemxwdWFfY1ROT1FbaGxpbGxxbW5xbnScoqSnqKioqauqqqqqqaempaSjo6OjpKSlpqalp6ytqaShnp2eo6Shnp6foKCenJ2dnJycmpqam5ucnJubm5ydnp6foKChoJ+goaOioKGjpKSjoqSlpaWkop+go6SkpKapqainpaGdnJ+jpaipqainqKioqaempaWkpKSlpqampqampqenpaWko6Ojo6KioqGhoqKhoqOkop+enZ2cmpubmpqZmJeXmJaWlZSUlJWVl5iYmpubnJuampqam5ucm5ucnp+fnpucnJyam5p/fnF0YFtUTUdNSEZMSj8/TkM8QDs8NDM4Mzc0NzY3ODs9ODo6OTk7PTs7ODk9Nzc4OTU4OD9APT9BPjs9RD89REA/PzpAQUE/QUVAPjw8Qz88Tp2ioaKioKCipaSkpKWlpqenp6empqampaampbW1tbS0tLS3jHalsXdmc3Jvc2xjZGlYT1JRT09dgG1kYFptkZGSoqKjpaampqenqKiop6alpaSjoqGhoaKjpaempqesrKemoJ2cm6Ghnpuamp2cmZiam5qampmZmZubm5uampqampucnZ6goaCfnp+hoJ6foqOko6Omp6inqKWioKGhoaGkpaWlpKCcmZmbnqOmpqampqanpqempaOlpKWlpqiop6enpaWlpaWkpKOjo6KhoqKioqKhoaKjo6Kgn56enZybnJubmZaUlJSTk5OTk5SUlJWWl5qam5ubm5qZmZqanJ2dnZ2dnZuampqamZqXf3dvc11aTkhKTkdFRklERU5APD09PDQ1OzQ2NDY1Njc5Ozg5OTg5OTw7PDc6Ozc4ODg1ODg/Qj9BQTw+P0A8PEJAQT49QT4/Pz1CQUA6OkA8PE+doqGfoJ+dn6OkpKSlpqeoqKenp6ampqampqW1tLS0tLS0tbSXtqd1Znh2Y2xjY2VjW1JTU1JNXqCMeFhodpajnp6hoaOjo6OjpKSlpqalpKSioaGko6OjoqOlpqWmpqenpp+bmpuioJmWlpWam5mXl5iYmpqYmJqampqbm5qZmZmenZ2goqOjo6KkpKWinqGhoaKjpaampaSjoaCgn5+hoZ+goJ2amJeZmpygpKOjpKWmp6alpaOjpKSkpKWnp6ampqampaWmpKOjo6SjoqKjpKGfoKGhoKGgoaCfn56dnZyamJeVk5KSkpKSkpOTkpOUlZaZmpqbm5qampqbnZ6enp2cnJybm5qamZmZlH10bHReWk9IRUdGQkVORT9GOzo+Pzs0Njo2OTM2NDY4ODo4OTc4ODo8Ozw5Ozs6OjY3ODk5Pj9APjw9QD5AOjlAQT89QT8/QUE+QUE/Ojk9PjpQnaCfnZucnJufoqOlpaWlp6iop6ampqanpqantLS0tLOysrGwsK2rkHiGj36bmn93Yl1TUlFRTGKgootaiKCgn52YmZycnZ2eoaGgpKenpqWkoqGjp6alpaKipaampaanpqagm5mboaCXk5OSl5qcmpeXl5iampmampqam5qYmJmaoKCgoKGfoaKipKamop6gn5+goaOko6Khn56enpyanZuZmpqZmJeZnqChoaKioqKkpaWmpKSkpKKioqKkpaWlpaWlpaalpaOko6KioqGgoKGgnp+fn5+fnp+foJ+cm5qZl5WUlJSTkZCRkpKSkpKSk5SVl5iZmpmZmpqam5+fnp2cnJycmpmZmpiXl5F8cmdxXl1QRj9BRD9KT0JCRjhDRT4+OTg7Nzc0ODQ1OTo6Ozk3OTo8Ozo8PT48PDo2NzY5OD4/QT47Pz49PDg6PkFAQUE/P0FCQERBPjo4PkE8U5ycm5uampycnaGio6KjoqSmp6alpaampqSjo7KysK2rp6amp6alpqiln6iop6qnoXmEXFFST0xcnKCAYpmgnp2clZOVlpeZmp2dnqGmpqampKOioqanp6ajpaampaWmp6amop2cnqGfl5GRkJSXm52YlpaWmJuZmpqampqZl5iam6Ghn56fnpybnJ6goJ6dn56fn6Cio6SjoqCfnp2ZlpeXl5iYmZubnqKioqKioqGio6WlpKOio6SioaGhoqOkpKSko6SkpKSioqKhoqGgn5+gnp2enp2dnZ2dnp6em5mYl5WTk5SUk5KQj5GSkZKSkZKTlJaXl5iYmZqampyenZ2dnJubmpiYmpmXlZaNempmamBiTkY+P0A9SkVAQ0A7QEE8Ozs5Ojc2NTg0Njc4OT04ODs6Oz87Ojs8Ojk6Nzc2ODs7Oz08Ojo8PTw3Oz5DQkRDPz1BQ0FEQT88OkBCO1eZmJqamZmam5ucnp2foqKhoqSlpKSlpqSioJ6op6alpqWlpaemp6ampqakpaanqKehqXJOUU1KVJahenKanJyenJeVlJWWmJiXl5qeoqKhoqOkpKOjpaalpaanpqSlpqalpaOgoKGhn5mSkI+WmpmenJaXl5eZm5ycnJqamZeZm5uen52cnZyZmZqcnZydnp6fn5+hoaCgoaKgn56bl5WVlZeanZ6fn6GhoqKio6OhoaCgoJ2cnaGioqOkpKOioaSlpKOko6SjoqKioqKhoKGfn52cnZ2cnJ2dnJ2enpqXlpaVlJOTkpKSkpCRkpKSkpGSlJWWl5iYmJiam5ycnJycnJ2cm5mYmZiWlJWXi3hsY2RiZFFHQT1DO0tIRDo7Ozw+OTo6OTo3Mzc5NTo4ODg8OTg7OT09Ozo7Ojk8PDc2NDc/PDo9Ozw/Pjw7ODxBQ0FDQkI+P0NAQkFAOj9APztZmZiampqam5ubm5ydoKGhoaGhoqKioqKhn5+dpKWmpqenpaWmp6ampqWkpKalpKSkpaaGUFJQT0+PmHB6mpubnJ6cnJycm5ubmZiYm56dnp6foKOkoqGhoqKio6SkpaalpKOjoaGhnpyalZOUmJuam56amJiYmJqcnpyam5iWmZybnJycnJydmpqbnJ2dnp6dnp6fn52cnJyhoaCblpWVlZacoKGgn5+hoKKjoqOhnZuZlpaWlpicnqCip6ikoaCgoqOjoqKioKCgoJ+fn5+gnp2cm5ucnZydnJmanJuWk5KSkpKUk5KSkpKSkpOSkpKRkpSVlpeYmJiYmZqcm5qbm5ucnJqZmJiXlZWWl4d3ZGdoZGJNQ0U8RDlJSkU5Ojs9PTo6ODg6NjQ3OTU8OTY4OTc5PDs7PDo6PDs6PDw4Nzg3Pj07Pj46Qj86Ojo/QURCQ0FBQD9EQUFAPjpAPj06W5qYmZqbmpubm5uen6CgoaKioKCgn5+enp2dnKWkpaanpqWlpqakoqKio6Oko6Kjo6KnllRYVVJOZ21rgZ6am5udn6Cgn56enp6dnJ2dnJ6enp+goaCfn6CgoKGio6Ojo6OjoqGgnpuZmZiZmZmamZienpiYmZmam5qWlZeWlZicnJ2cm52dnpybnJ2cnZ6bmJqeoaGdm5udoKKhmpWVlpaZoKKgnZueoKGjop+em5eXlJKSlJeYmZ2goqenpaGgn56goaGioaCfnp2cnJubnJubmpqZmpydnJmXmZaVk5GQkJCPkZKSkpKSkZKTk5OTk5OTlJWWlpeXl5manJubnJucnJqamZeXlpaVlZSEcmZsYmRbREJMPT84RktCPEA+Pj05Ozk6PTg1ODg2Ozg1Njo4PDw7Ozw8Ozk8Oj09OTU4Nzw5PD88OkE/Ojo6QEBDQkRBQ0A/Q0FAPj08QD09Ol+al5mamJeYmpycn5+foaGhoJ+fn56foKCenZ2lpKSko6OioqOjoZ+foaGipKOio6SiradXXl1UV19ua42dmpqbnJ6dm5ucnZ+enZycnJydnZ+goKChoaGgoKGgoKGioaGioZ+enJqampqbnJqZmpuZnJ6ZlpaWl5eTjo6QlJabnJuam5udn52cnJycnJ6dlpSZnJ+in5ycnZ+hoJuXl5mZmpycnJubnZ6fnZqXlpaWlJOTlJiampqfoKGmpqWgn56fnqChoaCenJubnJybm5ybm5qZmJmZmZmXl5iVlJKQkJCQj5CSkpKSkZGTk5aYl5STkpSVlJWWlZaZmZmam52cnJyampmXlpaWlpaQgG9vZV5gV0BKSDg/N0lFP0VBPD07Ojo8Ozs3NTs4Njs3NDY6Oj47Oj0+Pj07Ozs+Ozo4Ojk5NkBBPTo8PTo6OT9BQ0JERUM+P0FBPz8+Pj89PDtgl5WXl5aVl5mbnqGhoKGioqCenp6enqCgn52bpaWjpKSioKCfoJ+dnZ+hoqOjo6OkobCjXWVkYGFua4GenJubm5ubmZianJ2enJubm5ycnJ6ipKGeoKGhoqKhoKCgoaGgn5+enJqZmpubm5ybmp2dm5manJiXlZWWkY6Nj5KYnZycm5ycnqCdnJucnJyempWVm56foZ+dnJyenp2cmpqampqampqbm5qXl5aTkpWVlpWTlZaam5qanZ6foqWjnp6fn5+en5+enZ6fnZycm5qcmpqbmpiZmJiYmJiYlZSTkZCRkJCQkZKTk5CRk5SYmZiVk5SVlZWWlZaXmZmXmZqenpyamJiXl5aWl5eYjX1ubV9lVlRFSzw3PjdSRUM+QkE4Ozw7OTg6ODY7Nzc6Njc5Oj0+Ojw8PT49PD06Pz06ODw9OTtAPj4/PT45ODs/QkNAQ0VDPT9DQj5AQD5APTw8YZWSlJWWlpeanJ6goKCgoaCgnp6enp6gn56em6WlpKOioJ+fnp2dm5mbnJydnp+gn56rmGNpbW5pZm2enZybm5ybmpmZmZqam5ucm5uam5ygo6SgnZ6en6CgoKCgn6ChoKCfnpuamZqam5ubm5ufnpyZmJqamJiYmJKOj5OXnJ2bnJ2cnJycnZycnp6dnpqVl5ygoaGfnp2eoJ+cnJuampqbmpqYmpmVk5OTkpOWl5eVlJiYmZucnJydoJ+gnp6enp+fn56en6KjpKKgnp6cm5qampuZmJmZmJeXlpWUlJORkZCQkZKTk5OSkpOUmJmYlpWUlZaWlpaWl5iYmJiXmZqamZeXl5aXlpeWl4l4dmddX1dURUU5OTs8WT5AOEI/OTs7Pjk4Ozg6Ozc5OjU4OTs9PDk9Oz0+PD0+Oz8/Ozk+PDw+Pz5AQUE9ODc7QkNFP0FFQz1AREJBQEQ7Oz47PGKWk5SUlpWUlpiYmZubnJycnZ2cnJ2en56dnJqkpKSkoJ+enpybm5qZmJiYmZucnZ6cpolla3R4bVuFop2dnJydnJqbmpqampydnZ2bmpuboKKinpucnZybnJ2enp2dnZ2fnpyampucnZycm5ycnp6cm5qanZqam5yVkZOXm52dnJ2fnZycnJycnZ6fnp+cl5idn6GhoJ6cn6CfnJubm5qbmpmZmZmZl5WWlZaYl5eXlpaYmZuenp2dn6GhoJ+fnp6fn5+dn5+hoqKhoZ+fn5yZm5qcnZuampmXlpaYl5eXlpWTkpGTlJSTlJSUlJaZmJaVlZeZmJeYl5eXl5eYl5iXl5eXlpaYl5eVl5eDeHZfW11eUT1GOjk4P1VDQTtDQzo8Pz86Ojk3Ozg4ODc0ODk8Ozw4Ozs8PTo9Pjo/QT06PTw+PkA/PUBBPjk2PERDRUBBRUU9PkVERD9COzo8OTpkl5SVlZaUlJSUlJWXmJiamZqcnJydnp6dnZybo6Oko6CenJuamZqZmJiYmZiam5ubm6WJa3F2em9lmp+enp2dnJybnZ6dnJ2enp2dnJydm5ygoJuampubmpudnJqampucnJuZmZycnJ2dnZ2dnZ2dnpybmp+fm5ydm5mZmZudnZ2dn52dn5+dnJydn5+fn5uanZ+goJ+dnJ6gnpubm5ubm5yampuamZudnJqZmJeYmJiYmp2foKCgoJ+hoaGgoJ+en5+fnp6foaKhoJ+enp+enJqam5ubmpqZlpaXmZmYmJiWlJOUlJWVk5OVlZSVlpWVlZSYmZuamZaWl5WWmJiWl5OUlJGRk4yRkJOWfXhqYWJiXFA8QDw2OENWSERCOjg7Oj47Nzc5Nj06OTk2NDc6Ozw9OTo6Oz87PT08QD47Oz46PT89PkBBP0A8NztBQ0U/P0REPj9EREM+Qj07PDs6Z5aTk5OTk5OTlJSVlpeWl5aWl5mbm5ybm5uamaOjoqCfnpuamJeYl5eXmJmYmZybm5qkgGpqb3lzcZegnp2dnJydnp6enp+enp2cnJydnp2bnJuampqam5ubmZiYmpqamZmZmJqdm5ydnZ2dnJ2cnZ2cm5qdn5ucnJubnJubnZ2dnJydnp2enZydnZ2cnJ2dm5uenp6dnZybnpubnJycnJydnJubmpmbmpmYmZmYmpmZmpyfn5+jpaKfoaKioaGfnqCgn5+fnqCioaGhn5+fn52ZmpudnZqZmJWWl5aVlZaTkpOUk5STkJCSk5GUkY+OkJGOlZabmJWYlJmXlJiRjJCPk5yTkoyFjIeDhndxZ2pkW1xRQT44NkJHYEJFR0A+Ozw7Ojg4NjU8ODo4MzQ6Njk9PTk5Ojs9Ozw6PD48Oj5AOj5APjw/QD8+PDg6Q0FEPz5CRD8+Q0VCPUJAPDw8OmeYk5KSk5OSk5SVlJWXl5aWlZaXmZmZmpqampqkoqCfn52bmpmYmJiXl5iZmJmcnZ2cqH1nZXN7enOJop+enp2dnp6enZ2enZ6enp2dnZ6cm5ybmpubm5ucm5iYmJmZmJiZmZmbnZycnZ6enp6enp6dnZybm52bnJybnJ2dnZ2dnJ2dnp+fn52cnZ2dm5qbnJmZnJ2dnZ2dm5uanJ2dnJycnp2dnZybmZeVlZeXmJqam5ubnZ6foqOhoKGhnJucm5ubnZqcmZycn6CfnZiZmZmUkpKUl5SPj4+OkYyNiYuQi4mLjpGRj4mQmJiQkoyNi5KQj5iYoqiqpqWlrKOmoZqep6eyqKKVo6Cfl39wcWlsXFtcTUY8NzdHR1g+SE5URjk+Ojg5ODc1PTk4NzMzOTY6Pjw6Nzo8Ozo6Ojo8PDs/PjtAQD47PT5BPDw2N0A+QkA+QUY+PEFEQT1DQj49PDlmmJSTk5OTkpOUlZOVl5iYmJaXl5iZmZqampqaoqGfnp2cm5mYmJiYmJiYmZmZm5ybnKx/am16f3lxh6Genp2cnZ6enp6enp6dnp2dnZ6enJubnJubm5ubm5uZmJiYmJiYmJmZnJ2dnJyenp6enp+fnp6dnp6dnJydnJ2dnZ6fnZ2fn56goJ+enZ2dnZybnJ2em5qbm52enZ6dm5ubnJ2cnp2cnZqYl5SRjo+QkJGVmJSWlJiZmpudmJuYlY2Mjo6TkpKRj4mQjpGRjo+Ki42NjYiIi4+Lg42NkY+MkI2Qk5WVnJihoJySn6SipKmam5eanKOprb3Bwbq8uL26ucC8ubq3uru7tL2zwbV/bnVmZ1peWUxJRTo7TElTPFZSSUM6QTo7Ozc3NTo6OjgyNTY4Oz08OTk7Ozw5Nzo4Ojw6PT85PD8+PDw9QTs5NTg8O0A/QT9EPTxBQkA8REM9PT06YZOTkZCUlJOTk5OTlJeYlpeZmJmYmZqbmpqamp+gnp+fnJqZmpqampmYl5iZmZmZmZmphXB1e4B3b4mhnp6enp6fn56en56fn56dnp6fnp2dnJ2cm5ubm5ubmpiYmJiZmZiam52cnJ2dnp2dnp6goJ+enZ6hoJ6dnp2enZ6fn56en6CenZ6enJydnZ2cm5qYnJuVmJqamJiYmJmSjJCXlKCXk4+MjYqKiImMiJORh5CPjYqKkJCLjoqMi4+IiImJjpGOjYaFiYaKhoWLiI+SkJCNkJKXlpKamJ2TlJ6kpqaqq7Gsr6+rpquqsbm5tbS0rqyvtMDIxcXBvsbDxMTDurW+t7a0s7C2tb6qcHRyXGZfXl1JRj8/RUtMVklcTEQ/PUI6Qzk5Nzc7OTk3MTc5ODo+ODg6PDw7OTc5OTs9Oj4/OT5BPDs+PD46OTY5PDpBPkNBQT08QkBAPkJEPj8+OVyHhIOHi42KiYaFgYqMkZOVmJiHlZaWkpiampmenZ+gn52ampubm5ycm5iWmJmXl5ibqo56dXZ7f3mCoJ+fnp+goKCfn5+foKCfnp2dnp+enp2dnJqbm5ybm5uYmJiXl5iZm5ucnJydnp6enpybm52dnZycoaGfnZ6dnZ2dnp2dnJiWlpaYlZWSlpmWk5GKjI+PjI+NkIuLj4+WiYiEi5GZjn2Fi42PjYyHioyQm4yRj4+Lio6TjIyNjIiSi4yFiYyPhouIh42KhYyEj4qXkJOYmpWbnKOqoaKknKKrsbe0ubWxs62vsrKlp7O6sbq6vLa3tsDDw729vLa/urq8wbW4wL60r66mqa+3mm58Z1tjWl1fSEU+QUtJU1hZXkFGOTk9OUY/Pzo3Ozs7NjM6Nzo5Pjg6Ojw9OTk4Ozk7PDo+PTtAQDs8QjxAOjg0Nzw7Qj9BQj4+O0NEREBDQz0+PjlhmZWLkYWNj5aSiHl9e3+Fi4OKgoqJhmuAeJCLlpqRnZ2UlJGTlpeampiWk42Sk5KQm5uIdndzcX1/cpGgnZubm5yenZ2eoKGgm5uWlpucmpybnJuYmZqYmJmampqWi5CTlpmYlZiYlpucl5WSkY2SkZCUk5KXm5mYm5ePjpCLjo2Ch4uLi4qLiI2RjIeHhoqIiZGKh4yEhYqNi4qNhI+UkIyDkJOUmZWQi5OTkZWRlpWOj5GMlI2Oj4qIj4ePhoeJiYmNiomJioWNh46JmJKUmpuXmKChp6Cko5qqqbO2sbWwqKmiqK6tn6qvsK21ubi8wr/BxLixtbCutrOwuL68ury+urOzp7G3wpB1gGNiXlpXUk1IRkVQSVlXX1tDUDpCQz1HRj84Nzo6NzU1OTc8OTw5ODo9Pjo6Nzs7Pjs7PTs9P0E7Pz48Pzo4NDM3OkFBQEI+PjpDREM/QUM7PT45Z6mloqKZn6CippeUiI2CiIJ1h4iKiIp7e3Z7enmPeoiSfn18en6CkYWBgH1zfH99fISHfnRweHZzfHaBj4iIiYeIioyMkZicl4iOhIuNi4iNkI+Pi5GPi4yOj5CQjouFhYeLjIyHiIuOi4eMhYaBjYuGiop/iYqGiJiRiIOIg4KFfIuLjIaJi4iKkIyIi42PjI+Wh4mLio6NjY2Wk5OdnJyalpycm56bmpuYnZeTkZWWkJKRi4+LlpSMjYqDi4SEiYyQkIqOio2LipGJjZOTk5SVk5KcmZ6Xn6CfpaKvsamupKSfmKStpqa4t6ysu729wsPAv7+vpa2wsLS3uLO0uLa0ta6stK+4tLaBeXpjZmBeVlBRQUVMT0lcXl9UR0dCS0xCREA9ODg7OTU3Nzk3Ozc9PDk9Pj05Ozg6O0A8Oj06PkJBOD88Oj84NjQyOTtCQD9CPj04QEI/PkBEO0A+N2CloJqXnaGaoaCPl5efl5WCjaCfo6GdmpKOjIxycXBvdnFucG1ucHZub29waHBxcHR+c3FycXd7cnl2d3Jyd3Z6e3l8fXt/iIGEi3+PkYaNi4uGiouLiYaEgYaCgIKJkYOAg4x/ho+LiYWAh32AgZKQhoSEho2DhIyPj4+IjY+Hi4iRkJWRjpCKk5eOj5WYp6SfnZWYlpaln5udq6aqt7W4srGnr6qnpqGfmp2WkpWVkYqPjImTjZuVjYuLhoaJjJWQkJCLmZKVlZSbkJiTlIyNkYyWl5WilZ6mqauno6OqsJucpp+mq6G0vb6zs7+5u7u6uby9rqiusa6wuLyztLGxqrCpqLGxsqild3J0X2hhYFRWUUlKSFZNXl5eVExKRVFKRUdDPTo5OTc0ODY4Mzg4PTo9PD47OTs4Ojs/PDw+OT9DPzg7Ojg8Nzc2Mzc5RT4/Qz89N0BAQT0/RDw+PThUj4yGh4eUjJWZl5yWmZaNlZyWlZydoKCdmpiWeHFubXJ4cXFsbnJwa3FvcG1yc3t1dnd5fnVxeHZ0d3tybn98gX15eH1/eYOGg4WCg5CLkIuLi42Pi4mJhYKBfX9zfYiAfpyQhIWFiYuPinp9fYaOjYqGjZSRi5CXj5SXkpihlp6XlZunpp+goKawq6GjpbW0sqqmqq+isba5vcK7ucO+vLi9uLWxrLCspZuSk5mfm5SPk5WOmp2doJqfn5edo6qsoZ+em62hp6qwqaampJiRkZWUo6SirKSss7Szs6i3tru4sLKvra2yt7a6srW6s7e5u7i8urayr6yxsbKztLOxsa2us7Gzs6yhl3Zxc19jXlJRVE1PSUdYT1pcZFROR1VPRURKRD44Ojg3NTg4ODU5Nzo6PTw/Ojg8ODk5PTs9PTpCPj84Ozo5Ojk4NjI1N0I+P0RAQDY+P0I/PEM8PT46Tn98go6MjJOTl5eaj5SWjZaRkZSXk5qanqGdnHJvcnFxcXFxcG5zcW91dHJxdneAdXd8eYV+d3t8eX1/fICJiYmDfXp/h4GIiYGAgIGGiIGGi4aIhYSIiImEf4J/enx8fX6SkH+IeIGFi4qDhIWKj4yNkZmdlJSUoJqan6Ktsa2ppKWtr6ysrLWuvrmtrqm1sLexq7G2rK+9wsLAvrq8trKutraxtK66u7OurKepp6unoqmtoKmooq+wuLSxvLq6urK0ta+8tLezt7e7t7mtrbCprLW5sbeytLe2sLu7vLu6ury1vLi0wbWsqqqrtLG3uLm1trSzsKymrrCqq7Cxq6yusLKxtK6qo5N4dnJlZ1tMUlBGTUhTV1JlXmdUUExcUUhMUkNBOTk3OTU4ODY2Ozc5Ojs6Pjk4Ozo6Ojw8Pj08RD45Njs7ODg+OTUxNTZCRkREP0A3Pj5DPjpBP0BAO0t/gomXmJSdlpabmIuSlo6XkZGVl5SZl5+bmZx8dHV2dXl1c3RudnJzdHV2d319gX56gXyDfoJ/fYB/hIKFj52RiYF/go+Xjo6HgoCBiIuFfoqQi3+HjYyLioeSioeGjZGTkZGEh319g4iMjouOiomQj46PlJSYkZWbmp2dqK6yr6+1tLOtsrW4sLy1tbGqsKqztbS7t7SztrS1r7i4t62noqassLCvtre3vrW5vLOysa61u7C0r6+yu7axuMC9tLS0s7izvLq2tLrAvbm6ubq+ubm5vrWysa+yr6q1tLGzsbSzrri4tb+vpKaoo6ussa+zrq6wsKytq6qroqKmqKKnrauqpaynoqeYeHlxZmVZT09NSVJNV0xPX15cTlVUYlFEVE07Pzk8ODk1Nzc1Nzk1Ojo6OTs4Ojw8Oj08Pj4/P0I9ODY6Ojk6QDs1MjY2QUZDQz4/Nz49Q0I5P0I/PjtLjpGTmJmVmZGTopiTkpKLk4uOkI+Vl5ablZSbhoJ9enh2dHRzdH53end2gIKDhouMhISFioaQiYeRk5aRjZaalY+IjI+emJaVkpCTl5qamJCdoJ2Tl5qgmZ2bo6CVkJugpKOak42IiIuJkZGOkY6LmJqPj4yUmpecnJufnKSstLm6vK+2tLi0tLK3uLmzq6+qqKy1srK1rrGrrqa3s7OxpaGotbCvrayrtbqyu7q6tLK3ur67ubG4sLmtqLK4u66ttLS3tbu2trm5vLe0r7G0t7a5s7e1pq2pq6ior6yprq2up6KxtLG0q6aop6Cjq66oqq6orLKwr6+pqKGeoaGjpqOgopqlo56ol3J3bmdiVUtUT09KQ1BLX2JYWlFcU19NSFJJQUA5Ojg2Njc3NTg5NDs5Ozk8Nzs+Ojg8PD0/QkBBPTs2OTk5Oj87NjM3OD5GQkJAQjk+PUBDPkBGQj44R5OWkZWTkpSQkZ+ZnZmVkI+Sko6Mk5aWko6RlZGSkIaBeXJzdXuBhI6HhZGTkpicnJiVkJWYo5yaoaeqqZ+clpeVnaKioZyZnpmlqKyvramnqqmop6GlqKirqamvoZufoaOjoJqfoJyUjZiUmKCgoaSem5qkp6Spq66spaOoq6+xtK6qrK6zr6ystLO0ua6urayqrLKwsK2wqKqmsrS0uK6qtrqwr6qurLC3s7i0t7W0u7y4tbWxtauyrKiys7uvrbGytLa1sbG0s7OvrKuvs7a0sayutKqqpqWnrauoqKupqqifqbOwqqeppaOio7CtqaatpairrayppaSioKWipaOYmZyVnqKippdudWVnZFZPWEtLSktTVHBiWWRXX1tcUlpQTEM8ODk6Njk4NzQ3NzQ4Ojw6PDg6PTk3PDw7PkM/QT47OTo5Ojs+PTg0NThBREVEQkM5PjtAPkI/R0Q+N0KSm5SVlZaVj46Wl5qZlZGKk5SSjo+SkYqKiY2Ul5qTjYmCho6VkZSfmpuin5+jnqGhn5ijpKelpaapqa2rqaKmpKilpKGfnqOjra2srairrq6qqqukoaKlqaenqaijopybm6SgpaijoJidmZ+hoqmnoKKirqyrqqetrqilpKmpqammo6iqqaekp66wr7Ovq7Crqq+yr7Czua+rqLCxrrCyubO0r62vtbCss7GurLW1tLSzs7CvrKyqrKusr7G0s7CwrrCwsKyqrauqq6alrrCysKumqbCvqaOkqaunqKaopquwq6mvqaaoqaalo6iwraqpqKKpo6WnpKGhoKKloZ2el5aYlJugpKmUbnNeamlfVVpOUk5QT1JkXGVjW11ZXFBZT0tAPDs5Ojc6ODczNTMzODo9OTo4OTo5Oj08PEBEPkA9OTo8PDw+Oz45NTo8QkFFQUNBOT47P0BEQENCQDdAkZ6YlJeZlpGHi5SSl5GIg4mLk4+OkI2Hh4SFlZmWmJeZlpqeop2anKKkoaCdn5qfoKGgpqGgoKCjo6KlqKmrramqpqOmpaCloKaopqWnqKapqKOnppmcpKaioaChoaCcmJmfoKGkpKKenpagm5qioqChn6CiqKCcn6GloaCmo6KfpKGspp6foaGkrKqnrKivq6e0sa6ur7WyrKqwq6mtrbWwrq6srreup6yqpKivsq+sq7Kvqqqpq6utqa6urrGxraqtqaunp6uoqauinaapqKilqKisqKilpKWop6iopqmsr6+oq6mhoqKlo6Opq6ymqKWjqKKhoKSdnZ+hoZ2bnZ+amZWcnKOqlG9zZm5yZF1dUFVPV09eZGRsaGJiWlpSVE9NQTo9Ojo4Ozk1MTYzMjg4Ozk5OTk7OTk8Oz0/Qz5APTk7Ojs8QD0+PDk5PEFBRUFGQTo9Oz9BQUJBRUI4PYqWlJOYmpaPiISNjpGSjIiIiI+JiZCRjoqKiJubmZygpaKlnqKjoZqeoZyanZ6bnKOop6ugoKOYoJ2XnKGjo6WjoqKkrKilqaCepqmnq6mkn6Kgoqahpq2mpp2fn5+fn5manJyhoKGkn6GbnZqcoJ6hn56eoKOZlpqYo6KipJ+ZnKGhoqCbmp6goaSgnaejqrGorqusqaSqqquorKalrKqws6+rq6mwq6appaWoq6ynpqevq6Wnq6upq6irqqqrrailqKOmpaesqayoopykoaOmo6qpqKano6SnqKanqKepqKupoaKoo5yepqWjqKino6WlpqmgpJ6inpeYnZ+doqKlnpiUlZ6go5d1d2t2d2FfXFVZUVVWW2Necl9oX2NTUVlUSD48PTg7OTo4NTM3MzM0Nzo4OT05Ozo5PDxBQEM9PT44Ozw9PEA/Qz86ODo+P0NAREE6Oz48QD9DQ0VDOTyCmJmenZ2alZKKiZGRl5GQh4SJgoGNj4+Sj42cnZ+hpKmlqaeorK2moqKfmKSmo6Stsa6yp6asm56em5qjp6Cfo5+foq+rqqyoqKuwqaipqKGfoKeprbCyr6yjoqahqaWepKOipqClpKKlo56doJ6fpaKinp+imJWemp6fpKGblZigoZ2enJudnZuZmZWen6Oonp2iqKGaoaOmoqSoqaqoq7CxqKWlp6eopKWpqaqnoqWmqKadnqWloqClpaOlpqCjpaOjpaelqamqpKekpqKmp6SrqaenpKGlqKynpqWlo6OopJWdo5+bnaCjqaeopqGjo6mooKiioJyVkZqfoKGmopuXkpCamqCVfHdvfXlmW1tgX1pcVlxoZG9jbmloYl5QUEA/Ozo4OTg8OzYzNDMzMzc5OTs8OTs7OT49QkBAPTs9ODw9QD08PENBPjo4PT9EP0M+Ojk/PEI/P0FEQjk6gJ6kp6Kem5+gmY+ZnaCWloqGj4iEi4qTl5SRo6Wnqq6trLOys7S4t66pqqevtLKxqq6usbKusa2lq7OssbGpq6+rq6y2sLSwq7GysaOfoqqpp663trS0trOvrKuuq7awqbKxra6npp6io6ObnZyXoqiloZ+eo5ueoZqWnaScm5aZoqefoJ+joJuUlpmWl5qfoJmVnqKZmJ2dpZ2gpKeqqaiqraylqaSlqqeqqaqsp6SkpKOimZmhnpqaoaCfpaWYnqSmpKqooqelpaGqp6mnp6ejqKWmpaGkqKesoqekoaalpaOVl52Ym5mVo6elpaSfnZ2lo6Kqo5+amZiXnJyaoaGakJOTl5ibjX93cnZ4aWJbX15cYllgZG5ta25hX2RgUE9BQDs7OTs4Ojk2MTQzNjQ3Nzc6PTo8Ozk9PUI/Pj89PDo/OTo7PD5BRUA9OTtAQT5DPDs5PzlAQEBAQkM7OXuao6OcoJ2dop2Zn6KioJibmJaYkpSQm5qWl7S0rrW4s7S4tre0uLm3tbm4ub28uKqLnLK4vLS9urW7uru4s7q/uLe5u7G3r6iusq2inJ+qsri8vL27ur+0r7GztbS3t6+1tLWysKikop+gl5Wal6SqpqahpKOkq6WlmKGko52goaKooaOgpaGck5mYmJmco56cmpudl5uZlqWam5+hqKmpqKuvr66pqKmrrKytq6irp6WjoJyfo6Ojn6Cipammmpyip6Spn6GjoqKgpaanpqSooJ+ipKGjoqiop6OloKGopqalo5mbmJuTj6GknqKfmJiVoJuhpaCfm5udnJuamZugmo2YmZiTkYaAdnh5eGNbUllUX19hbGh1a3BnaWliWVNMQDw6Ozg5Nzk3NTU2Mjg1Njc3Ojw7Ozs7QD4/QD0+Pjk6PDk2Nz47QkZCPDg7P0NDRDw+OT43PkFCP0ZDOzhwkpqblJ6bm52Vl52doqajopaXnpaXl6GblJi+t7G4uba3t7i7l5S2vbu9vcDFtaK7mKC3v7+6wcm0nbu2sra/xcGooLazurGqrrSxsLG0tba8vb68vL3Guri3ur20r7Wxsbq4t7Kzsqqmpp+YpKSnqKSupKurtbWus6CnqqynqqmlpqCnoKGmoZOWmJ2foqSjnZ6coaChnZekmpmdoKaqqqqtrq2tsLGrrK2sqamrrqimpaalpqSkpqaeo6eppKGcoKKjpqCio5+jpJ2foqWgpJyboZ6fo6GhpaSlqaOkpaKkp6ehn52elpOcoJiZko+MjJeWn5uWnJqdnJqTlpSUmJOQmp2YiouHgIB8gnhhXllTYWhgZnNvc2l0ZGlkYltMSz46ODg5ODg5NzM0NTI1NDY2OTw8Oz08P0E/QEA9Pj44OTs4Njc/OUJFQzw7PD5DREM9QDs9Nz1DQ0BFQjw3Z4yRk4qalZiblZWYm6Knq6aVl5iQlZmhnpeXvrWztLu6ubi5woeYt6u4u8DCxbOjw6e4s72/tMTHvbS7uL62wMTErqCworW2tb2+wcPGw8O5vb/AwL2/xL28ur2+tKeqmLHAvbi1ucCzr6+qqqitp6ekr6eqtLyxtLWor7Gwr6yqoqajrJ+fpquXmqifpaWfoJydoKuwsKyiq5yYm6Cor7Kys6uorre1sq2tqaalqKulpaStqaShn6Cnnp6mqKmmnp+anqGlpqmcnaObl6KmmpuanZ+cmqGcmZ2eoKijn6GfnaWioKOioZSZmpmTj4qLhI2Qk5uPjpiVm5eYkJORkomNl5iYk4uKi32AgIVwYGFeXmpiYm53dXZubFtiUVVcTUc7PDk3OTc5Ojc0NDQxNDM3Njg8Ozs8PEBAPUA/Pj8+Ojo5Ojc6Pz5FRUU8PT1AQkJCQUI7PDhAQ0NARD87NV+MjIaFlouUlZeYl5ifpqellpWWkZebn5ual7mxtrO5vLy5urWqsryxvsG0vMe5uLuuv6fGw7/KxsnIxcXJvMLHx7+xsae8vL7FxMbJx8XGu8TAxcbAua+9vMC+vrOrqoyzu760tbfCuq2vsLWqq6aqo62kp7G2q7WyrbOtqK6vp6awr7Ktqq+zpKu1qaeopKCgnqmyuL61tbWqqaausre4t7apq7i8ubexr66noqOop6SfqKOfnqCZoZydoqSnp6GelJuaoKGlnqChnpajnZSQlpiboZqflpORlpSin5qenJudoZ6kn56VnJiPkpOPjImTkJefiZCWkZuUmJGRlZaDjJWXlpKLjIh8f4N/amZoYWtsZm51cXJ1cWZeX1xSSUU/Ojo6Nzg0ODw3NjU0MjMzNjU3PDo7PDs9QD4/QD48PTk5OTs6PDw+QkRFPj49QENDQkREOzo4QUJCQUNAOTJbk4iEjZGKi5GRlZCSmp2fnJOSmJSdnZqXmpW2sbm1tb6+tri1uLO8vMTEusPHwb+0s8XFxr/CzcfLzszLx8HDxsfIysXExcO7vLzBxcHFxb/DwsbFwLGTvrq/w8K2trqptLO0qauzu7uxn5uxr6ykrK60p6qpqKqtrKmlpZ6pr6uyu7q4u7e5t7O5uLOurLO0qrC1ub3Bur6+vL60urm4u7qysbS8u7q7s7Oyp6Smq6uioaCdmpudmpyXmpuenJygnZaclpuZnZ6io52UnJCNiY6OkZ6bnJWNh5KLmJiWmpybmJybnp6cmp6UjpiYmpSRmZeeoZWYmpKXlJWRlJqYk4+TnZaSi5F+enx/dGtrbmRvbGhxeG95aWlhXGdhUUZEQTw5OTc2NDQ6ODQ2NTMzMjY1Nj05OTs7PT47Pj49Oz05OTs7Oz89QUNBQkJAPEBDQ0NFQjs4OUQ/P0BCPzsyV5uQkZCQh4WSjo2IjZCTlZGPjZSUm5STlpqRs7e4uLi+u7C1sri2tbbAw8G+w8LAvru+u7u8xMzEzNDLxsa/xcfLyNTLysjGv7u7vsS+xcjGxsTEw7i0wLe0vMHCucK3t7/Au66lrre8t62co7ewpq20tayupaWjqKSgoKWZqrOyvsG+urm6uLW0srG0tLO6wL7Av769u7u9vsDCt7a3tru7sru+ubi3u7a3tKyoqamrpqijnpOampyYkZKZl5GRmJqXnpiWk5acm5+elJOJiX6GiIuWlJiZkYmVkZeWlZmbmpaYl5idnpyhmJWZmZyYl5ybn56jnJ6WmJeTl5yZmZyUlp2UlpOJdnl6e3Zua2lndVpmcndzeGZnXWRbUlhJRj87Nzg4NzYxNjk3NDQzMzM2NDY7ODo8Oz08OD0+PDo7PDs9Ozs+PkRBQUNCQEBBQkNDREM9OTlCQD8/QD89MkyWmpaSk4yKmJCKi4yOkpKKiIaNkJiKj5CUl7O7tba/vb2xtrjBvby0uL/Bsbi3vsHFvbu8wsbJv8nOyMHEwcfKysbKxczIzcbIxb/DwMvNz8nGw8PEwsS+uL7Bw8DEvsHPz87Gq6+2tLWroKe0s66ruLWzq6mjoq2prKatn6y1tL/Cvrm4vbawrausr7W0ur7Fv7u8urO5u7i5ubWtsLS9u7G/vLiytrmzubu0ra2orKyqqaeXnpualY2MmJSTi5WWlJyZl5WWmZKYn5mQiop+iYqKkY6Vl5OUn5mWkJSZmJmWmJOUm6GeoZiYmp2ZmZaenpibopqdnJuYmpuZlpeXlpyZlJyYfoB4eXV1ZWVpamhdam9teHdjYmBgXlhXRkU4Ojg6OTc5NDQ5NzY2NTEyMzM0Ozo9Pzs9PTo6PTs8Pjo7Pz48QkBDQkJFQj0/Q0NDQ0RFQDk6QkFBQj5CQTVCkJeUlZmSj5qQjpKRjZSVi4qHjI2UiImPkpq2u7S8xsHEwr3BxcLAtLO9v6ywr7rDysPCvs3IxbfByMW/wcLIy8rCwsTJzM3Pz8zDx8bIyMjHycfFycfIx7/Fx8TEx8jK0s/SzLy4trS4uMG+vrq9ury6vKytp6q7urm3wLK1uLLAxrq3t8Gzsa2tqau1s7u2w7a2vbWxt762s7e4sLW2v7uwvbq0q7CxsbO8urOzrqutq62xnaOjoJqQjpiXlZCclpaYlpWSnJmTm5+clpGUjpWQiYyQlZOUm56YmZKSnJedlJmSk5aZmJ2VnJ6do5yVnZ+TnKKcnKCfnaOemJSVl5ebmpmgkH99cXRxb2JhZ3VnaWl0bXhsXWRbVWBZTEhDNjw5OTg4OjUzOjY2NDQxMzUyNTs6PD47Ozw9PDs8PTw7PD49P0E/RUFCQ0M+QEFARUVERUE7Nz5DQkI+Q0I4O4+akZaalJKUjZCUlI6VlI6Pi4yJk4uIkJObt8C6xsXEw8zCwcS9vrWvt7uvr7O6wMfFxMHMy8W2ucDCwsTHytHLwsPExsnFzdDOx8zJwsHGwcvLx8bMyc3FxsbDxsXJzdDNz8zHxMDDwsnNx8XBxMfBu760sbCwwb6/wca/vri3w8K6urbAvrWyrKmvsri+tMC0tLi0t7nEua+8vrm+v8K/tbq2q6qsrq+wt768trSura2utaSlqKimmpycnZyeopydmZOQkp2VmKCdmJiVmZmZl46MlH2QkJefmZmYk5GToI6Nko+VjpCUlaKdnKSem56elpyjoKGipKOkop6amZubnJ2enIN9cnx4cGdgamp2bGlldG5zYlxiVFdUU01HOjc7OTk3Nzo3NDg3ODQ1MjM0MjU7Ojk+Oj08Pz04Oz05OTk9PEBBQEVCQUJBQT9AP0RFREVAPDo+QkNCQENBOjSAoZeUmZiVkImUk5aTiZGMlJGOiJaKi5CXnMXLw8O8wMPHwbm9vbu4tre3rrK3uLzAwsDCx8bHurzAwsXHyMbSycHDxL+/vsTLyMrLyLy7yMfJzcjDyMnJxsXDwsHCx8fJysfMyMfIzcbLz8W3wMDAwLu6vbWzs7+/ub/DucC3u8G8uri7ub27srCvsKy5wri9ube1t7q9xb24xsjCwcLGwr28tamurrCwr7O6t7m2sK+tr7OppquprqannqSlo6OjoqCblZiekZecl5GRlZeZlZmRlJiSlYyYo5qcnp2FiZ+TfJKWlZKUlJennaCipJ+en56foaGkoqKjoaOinJ2fnqOhppl5enl/cm9mZWdkamRham1ubl5YXFZVTlBKRjk5Ozk3Njc3NjM3ODk1NjEzNTI3PDs8QDs/PDw6ODo8OTk4Pj1APz9GP0JBQz89QT5ARENDQTw5PENBQ0RBQDozbKKdlZedlo+PmJiZmIiSjZGVkI+Vjo6TlpbKy7u5urnBu7q3vsG8vLu5sa61uri4u8S6vsC+vru8wMXCxsK+xsG5u8O6uLm8vsHGwca6ucnJw8XEwMTBwsHEwcO+vcLAwMHCy8PGzMvFyNHCsL69uLq7vL63tLC5vrO8vrG5tbi7tryztbm2uba5t7GtusG6vMG/t77Ev8bDw8fHwrvAwr/Cv7iys7O1tLGut7S3tbSxrK2xp6Wlp7CtqJ+nq6ajqKWmpqCgn5SYmZSRkZWUl5OYl5qhnZ6hnKGdoaWglpSbkZeXmJqTnpmZqaSlpKWdoqCanqCkoqOcoqGjoJ6cnp6ppaiVfXuDeG5mYWRiYWJjY2piZmNaWVlcWVFORT07OTo7Nzc5OTY0OTk6NTMxNDUyNzo7OkA9Pzw8OTc3Ozo5Ojw+QD8+RDxCQURAPz49QkRCQkI+OjlCP0FCPT44NVmfnJiTmZaRlZiYmpeQkZCQk5GTlJKSkpSUxce4tbq5wrm5vMPFwri7ubGxtry6tbnAu7u5tre0tLW/u72/ub26urS/uLW4s6+7vLfAt73Cv8G7v8G8u8W+u8HEwL6+ubzBwcu+vcnEwMDKwLHBv7u4u766tbezuLy0vbi1tLCzvLG3tri/tr25vb65t7q+u7/Axb29y8PGw8TAw762ubq2v7i7v7y4trOyq7CwsrWzs66sq6emnqeurauiqKumpqqjp6iqo5+Ym52bmpicnJiXnJuhpZ2anqGhoKGmoJqbnJiboJ+dnJ+coKiho6SknaKfmqKgop+el6Shop+dmpieqKWhi3x5h31xY2BiYmdqZmZpZWldVlVTWU9TS0U4PzY7Ojc3OTs2NTo7PDYzMTM0MTc7OTg/PT47PDs3Njk5ODo7PUA/PkA9PT9CPjxAQUNDQT9DPTk2PEBBQDw9ODdJlJibj5OUkZWYlZGWkpWRkJGUlZSTkpKYlcHCwLq8ub62uL7EwMKxvbqytLO4vLW3vMC8vbS0sbC1t7W6wbi+uL+8vbe1t7CuuLa5v7vAv7fBvLvDtrrIuLa5u725ura7xcXKvbnFwL+8wb64xr3BwLzFuLa3tLi2tru7uLa0t7q1tLi8vbm/ucPAwLu5vLu+vcjEvcfEw7rAvb62sra4srm0usLCureysaysq62yr7Kur6ijpJ6rrKyqpKakpKiqoqemraihoaGmn6Oiop6bnKKfoKOdnJuhn6KgpKCem5eZn6GdnZ6eoaWkoaKioZ6ho5yinqCZnZijn52eoJqZoKKmnYR6g4B4cG1lZWZvaWVrZ1hYTktLS1JJTEhDOT44PTs2Ojs5Njc8ODk4NjA0MzE3OTk7Pz0+Ojw6ODg5PDg6Ozs7PD1BPj09Q0E8P0NDREA/Pzw5Nz5CREE/QDg4P4mYmoyMkI+Tl5WMkpCakpGXmJaUlJKQmpTDvsbBwby8uLi6v7a8scK2tLyxtLa4s7q9v728sq2vrLGwt7y2u7zAxLm3t7e1urm6u8C9w8C6xMK+x7i5uK23tbi6tLezu8XGy8G7xsDAv728v8nDxMW+xri1srK9uLi4vrq6uby6urS3u7q5v7zEwL+5uri/ubvFxr3Fw8Kyur27sa+2uLO3s7q+wLm2rLGrrqmqqa2qqq6mpKWnrq2ppaOio6GkpaWmoqato6Klo5+ho6Gcmpyhn6CloaCenZygnaWgnpeVmZ2fn52gn6KmpaCknpybn6Ofn5mcmZ2epJyWnKOcnqGcppZ+f4Z8a25wZ3Brc2VibV9cVEhLSkRKQkNHPzk7OD08Nzs7OTc4Ozc8PDYyNzUxNjk8PD08QTs8Ojs6OT45Ojs9PUA+RD89PkRAPz9BRkQ/Pzw9OTc/QUNCQEI5Ojl3nJiLh4uQkpOWjY+TmpOQnZiSkY6QjpiSvbfHvsO+vbu+vL22uri9ure9s7OwuLi1uby8wLeqraSusLe7s72/u8S3tri2t7+/xLzCxcXHx8rJxs/CwbiutbW8vri7sr7ExMrFwcnDwr+/vr3HzMfHxMe9tbW2wb26u7/CusDCv7y2t729vcHBwL+8ube8wru3v8W7wr++tbe8vK+vt7awtLO6ubq7r6mtq62rrKaqoqeuqKWqra2vp6Sgn6ajnqKjqKOjq6Oiop6dm5ublJaZnJyfpZ6fnpmYnpejoJyXmZqZmqOjop6jo6egpqCbnaCjnp2WoJmcoKCblJegn6WcmKKQgYaBcWVsaW50bndjZ2JcY1FLVEhFRUNHQzw7OTg9Ojc6PTo4OTs3PD01MzY1MDY4OTo8O0A9PDo+PDk+OTk9Pjs/PkM8Pz5APz0/P0ZEQEE/Pjo3P0BDQz9BPTo4ZqGYj4uNlZKVlY6PlpmVl5uVjoyMjY+bk7m2wbS/vLm8w8C+wLq1trKywLmvsry8sLe7tru8q6qjsLm9vrO8vrzFuLK4ub3HycrDx8jGxsnIzM7RzMrEtbrAw8i/v7W/wL/Gxr/LxsO/wbzAw8zKx8XGwbm9vMS/wL/CyL3Hx8XFvLrEv7vBv7rAvLu7wMS9t7nCub69t7S2uLqur7WxsLCytre0t6yurKqsrKuoq6Gms6qlra+trKippaOkp5+io6Onoaeiop6cnZyamYyQlpeZnaKZnpuVkp2UoaCdmZ6fmJimpqKfoqKmoqeloqCko6GbnaCbnKKfl5WVnp6kmpafiYGDgXRvbGx0a2xuX2JeYWFOSE0/RUA/REM7Ozo6Ozo4Ozw6OTw+OTo+NDQ1NTE5OTo5PDtAPD89PTw4PDs6PDs7Pz5DPkI+QD89Pz9FRUJBQj87Nj9CRUQ9QUE6OlmfmJOSlZqVmpOQlpeclZuZlpSVkZKTnZm2uLaxuru6vsG5uca7trWypb69tLbBv66zvbS4wbGwsbS8w7y6ur68xL+3vb+9x8zGx8nGxr/ExMrIzMzNysbCw8vOwry5vbq5wMO/yMbEwcG/xcDKycPDw8O5w769ub+8wsbCyc7Hxr66xr26v7m3wLm5vsDCvrW0vLi2u7CvsrK1r7Cvrqyus7CzsrirsbKxqrCrq6yrrLatqKyusqarrKmpoaWgpaakrKSmoaChnqGgnaCMlJeTm5+mmZ6emZOYnZ+gnp2eopuYp62ooqSgoKKqpqmhqKGlm6CgnZ2jn5SYmKKdp6Gfm4J7eod6bW13e19wY1tdX15TST5DRUlCQz5DOz42OTo7Ozs7Ozs7PT05PTU2NjIxODo5Ozs6QTs/PDw+Nzs8Ozw9PTw9Pz5BQUE+PkFCQUVDQkRAPDY+Q0RFPkJEPztTmZuZmJ6dmqCalpyZn5KdlZ2boJWWlJqYur20sLu8wcTCv8XGura5sqO7vbS3xLuwtbq2ucS4tLy2ur3BvLu/tr/Bv7y/usDLwsfIwL+8vL/FwsfLyMHDwMDJysLAu7uwtLu9wMXGxcW/wMK/y8fCwMjAusK7urO6usG+wMrOysS9tby8ub+5ubW1s7/Avre0s7S4rbeqr7CwsrKvq6+nr7ausrG5rra2uLSzsLGttrS6sa6srranrLKsraSjoaenqLKrqqWkp6elpaCml5ujn6SmraKeo6KanaWiop+foaWenrC0sKSlnp+kqaevp6mgq6CiopqipJ2anqGmp6+psZWCe32Cem1zeHNncF1bXlxZUUVEQ01JQUU9Rzo6NTk7Ojw8Ojs7Oz0/Oj01NDUxMjc4ODs8O0I8Pz46OzY6PTo7Pj0/QD87QUFBPj4/QkBBQkJFPjo1OkFCST9AQkA7TJqdnZ6fnZienZmampySoJWbnp+blZGRlsW+urbDvMbCvr/Ixbe1uLe2ubu0r7e2srWzt7m8u7a7u726w7u3vbe5wLu6uLi1xcHCw7u5s7S6wb2/xsC5wLy+xcS9vrmysK64t7/Dx8PEvb2/v8PDvr/HvLy/tLSutbW8vr/OzcvCt7K4uLi9ubuxtrLIwLu2tLGwt6yzqbCtrbO3r6uuqrG1r7Gvt7O6usC/tre2sru6wLWyrbO3rLC6r7KloqWrrK+5s7KosK+xr6qiqKGkraitrLOun6inpqWmq6Sknqaqo6ayuLOrpZyfp6anrquqpbClpaWbpKOYn6exrLW4sLKOhHl/fHZsdXpwbmlcX2BZU1BBRUhHS0BEQ0g8PTY7OTk8Ozo6Ozo9Pzw9NTU2MTM2OTg8QT5AOz1AOzs5PD04Oj08QD46Oj49Pj09PkBCQkJBRD03NDU9REc9Q0I/PEWUnqCgoJyXmpiYlZmdmZ2fmp2bnJaRj5LDwMK9wrzEvLy7xbu3s7e2tru7s6CWtayvsbS0tLa4ucHAt725uLm2tb+ztLK4sbvBwMO3t62wtbi4uMK6tLu3u77Au7u8rq+us7K5wcLEw768v7u6uLbBwrW/urWur62wvcC5z8rJw7GvtbS0vbq+ubq7ysO7uravsL2xuK+ys7C3vbaur66wt7CsrLK2vbzEwrq9t7bAv8G3tbC2srGzurGxr6esr6u2v7e1qbqztbmxp6uop7ausrG1uaisrK+qr7CqqKessayytr20saykqKuoqKusq6i2qaaonqadmKOuvLG7wbSmiYF8gnpzdnZ3bnFgX2VcWlVKPD8/RkY9RkNDOTo1Ozk5Pjw8Ojo8Pj4+Pjg4MzE1Nzg5Pj9BPzs6Pz08Oz09OTs8Ojs6Nzs+PT1DQT8/QUJEQkE8ODU4PUNGPUREPzw/iZ2en52Xl5WUk5aZnpubmpuYlJ2Uio6Owb7Dwr6+vrm2usCxtbGzt7fCtbOrrbOoqa61r620trnDv7e6t7a2srTAtrK0uLO6wMHDubezsrK0sri+ubO1sry5vLa6vrK0tLSwuL7DxsTAvb+5s6+yvLquu7Szpquorbq+uMvCv76sq7Cvs7q3ub67wMXBu7y3sLXEtb+0uLu0u8PCs7a2sbisqaWrsr23v7+7u7exvL28trGvq6uprbOvsLCrsLSpuMC2sqm0tbC3tq2spqu7s660uMKwsbG1sbK1saywsri4ubi+tLGzrqyxramvrqqyuK6trainoZ6ptr+4ur+wlol9gHxxdHd0dnJsXmJgW11PSEE+PUhDRk1DQDc3NTs6OT48PDk4PT47PT86ODMyNTc2OD8/Qj86OD4+PTw5PDk7Ozo8Ozs6PEA+QkI9QEE/QkI/PDs3OjxBRD5CQz8+QYqgm6GdlJiVlZKYmpyWm5WalY2bj4SIhru0vb+7vLm3s7y8rLOytLS2wLXAr7Kzqqqxt62pubO3wL27vLi2uraxwLq3ubi5u8HBxMO7u7a0tLC2urW0sqy8ubi1uMG6uLOxrLe8wcfDv7m6ta6lrLOwprCtqJ6gn6WttrXCt7a0pairqLC2s7K6tbu7u7W4trC1xLK+vL+8ubrFybq9vraxp6SeoamxrrW5trKxq7S3trGopp6gmaWmpKynq6y2qa+6sa2kpq2lq7GrrKmtuLawsrjBtrGxtbGvu7ayt7W1sry1urKwsbKutLKqrq2nuLWyta2uqqiosrq9wLa0qY6Ce393b3tvdXJuY1xmWFxdUk5NQT5JQkBKSUA2NjU7Nzg+Ojs4Nz4+PDs/OjkzMjc1NzU8PD48PDg+Pjw8OTk5Ozs7Pjs7OTw+P0E9PEJAPz9CQD47Njc6QERBQ0E/QUKJoJ2loJSWmJiVnqCcl5uYmZGMmYmDhoS1r7S7u7S1sLG2uq6wtLOvtbq1urC1s7GttrqurLyyuLm3u7+9ub7AtL+7vLq4vsK8wsrIvsC4uLaytLaytK+tu7q4trnAw7aurqqytry9ubaysa2tn6Snp52jpp2WmZman6muuayrq5+lqKSrrq6nr6yvsbGtsa6usLmwtLy+uLm4x8W8vLu4qaKcmJufp6assq6zqaapqq6popqXl5GcmpijnqKir6ekrKaompqemqGnp6anqa+2squ0tq+qsK+xqbm2sbWxrqy3s7avrquuq7S1ra+rq7GtsbKoraurs7W3ur2wq6GLeoJ5cnZzbXVpa11balRdXE9NSERGTEJGTUY4NjY1OjU6Pjg7OTc8PTo7PTo5MjM2Nzc3Pjs9Pjo6Pz48PDw6Ojs5Oz47PTk8Pj1CPDtAP0A/QT8+OjU1OkBFQkRBQEJBiJ+ipqGYm56dmqWpmJudmpmUjJmHhoeGrq2uuLmxsqiur7iyq7CwqrK1ubm9tbK4tLm6tbm7tbWztbu8wLu+wLS/ubm6sbrDvMLKxb+7vr+5tLSzsLGtsLm4try4u7+ysrKusa65r6qrrayjqKGdnZ6XmKGVkpWXkJifqK6ko6Sgoqeio6mpoaanpaqtp6ynqKesq6yyu7SztLm6trK2ramgmpaWm52fq6yrr6Ojo6GpoJuTjo+Qk5KSmZaanaSloJ+ep5iVkpSYnqSjoaWqrK2iqaqppKmtrqW0sa6xraqprq+wraWmqqSos66trKmmpqmrpqqnq7Ksr7Oxq6mWgX+Bd3J4aHRzbmRUYGNXXFFOTEhASFFETUM9ODg3NTo3PD46Ozw4OTw7Ozw7ODI0ODk3ODs7PDs4PD0+Oz08Ojk8Ojs9PDw7OkA9PDw7Pz5CQEE/Pjk1ODs8RkJDRD9BQYijpqKjnqCfp6Coqpufm5yZmI6Xi42PjKqpqLGvsK2lp6ayr6mmq6CvsLu1vby4wMG+vLy8ua6sr7Kyurq3t7W1vLOvtKu2urjAxMG6u7+9t7Kts7CvrK62trK0ta+qpJ6bnJyeqKieoKipn6GnlpuXl4+dk4+Qlo6Xm6SooKCioqKlpZ2jo6CepaCkrKSmqKSio6OrrLOuqa6urqeqraisoZyamJmYm6moqquepaObo5yVkIyPj5CTkJeVlpifnp6amaaXk4+Slp2ioKWjpqSnoKKko6Ghq6uksq2qrKyno6yuraufoaKkpK+srKmmo6KqpKqqpKmrpqmsq6agiHiDfHZ/eWJ3bG5cUWhUUE5HT01MQk9RQD47PjQ5OjU7OT07Ojk9OTk8Ozw8OzkzNjk5Njo7Pz06ODs6Pjw6PDs5Oz07PDw9PjxAPT88ODs/QEE/Pz45NDk8N0FDQkQ9QEOOqqSjoqGinaulpqimoZ6dmZ2PmJWTkJWnpKGmqKmlpKChp6uhnKKbp6u1sry9wMLCwL7AuLSnpayqqLWysbCur7KnprCkr661wbq1udXHtbO0q7K0rqqrr7Cys66lnpKYlI+YoJ+ioJykpZ+eqJSblpeMl5GNkJeTmJ2iqp+fn6Cjpaicn6ChnKKfo6innKehoKSfrKisrKCpq6agpKimrKOdnp2Zl5qrpqmxo6WonqCclZOQj5GQmJCWlZiWn5ibmZujmZeUlpqdoJ2nqKWgo6Kho56doKmqpa6upqipoaKqrqqnoaCio6msq6eppqShqaKlqaalpKKmpKijkn18gHV1fW1re2RoVVFjTUlIR05STkpORztFQD0yPzc1OTs+Ozk5Ozg6PDs7Ozk5NDg7ODc7Oz48Ojk8Oj07Ozw9OTw8PD49PUE+QEJAPTc6P0FCQEA/ODU1PDpAQ0FEPkFGlq6koqWeo6KpqKipqqWmnp2imJiZmZWbop6bnqOioKOgoZqgmJiXlqGorK62t7q5ure3u66ooKGpoaCtq6qmqaSppKWupaystLy3rLnZs7utta+vs7Wqp62so5yZlI6RlpeZmZygoqKcnaWemqSXl5eWkJKRkZOal5ugpKqeoaGepqeqop+gp5+dn6SnqZ6jpp+qnaqtqq6nqLClo6Smp6ymoaShm5ier6iusqulqqqgmpiYmJWTlpqTlZWZlpuXl5ignpycl5uhmp6ao6eln6GioqOdm6Gmp6aoraOppZ6kp6mkpaWhpaSsrKmmq6eioKSjpKenoaCgpaKmoIl7gH12eHxkeHlgYlJVX0hJSUtTVElSUEw5P0I2Nz02NTs6PDw5Ozs4Ojw9Ojs4NjU3OjY5Pj0+PDk5PTk9PTw+PTs7PDo+PTw/Pz9APT03Oj5AQEA/Pzg2NT08PkFCRkBAR6CupKaroaOqrK6tp6ypqKCipp6bm56aoJyalZmfn5uen56WlJOXk5OcnqSorq2sq6uvqq+pnpeepZ2epaakoaKfpqCir6usrbWyt6a11JnBt7KxsbC4raehnJ2alJeampCOkZWRjI6OlJminJejmZqXmJmUmZiWnZufpaapoKajnqeurqumorGjmqSmpqqioaqiqaSosquxsqu5qKarp6urqaysp6Cgo7GusrC0qbGvopmcnZ6hmZubmpiZm5SWm5aYnKWhoJqjoZqdmZ+kop6gn6KmnZulpqWkpaijp6OepqOinqaloqWlqKykpq2noJ2dn56gpaGenqWgppmBe4F8dXZzaIJsZVtTWllNUUpOTlVMUkxBNz5CNjg9NzY6PDw9Ojw5ODo7PDo7OTc2Oj01OTw7QD03ODs3PTs9PT06Ozw4Pj09QD5BPj4+ODg8P0BAPT43NTg9Pj1BQEZAQUihqqCrq6GkqquwramtqaelpaWkoKGfnqWXl5SYmZ6YnJ2blo+VmZKSnJihnaqip6Cep6Gln5ySnKKbn6Gjn52gn6Kgoq+vrLCxqqiqssmWpsiwrq2ssKegn6Kgl5GUm6CcmZeSk5+coaSbnpuWn5qfl5uinqWhnqSfpKitraisqKSstLe2sKe0rKKtraOvpaSmoamorrWzsr23vrCssa6tqaq0sbCoq6iytbezuKyxtKSgnaWfrKGhoqCgmpiWlqCbm5ikoaCepKGfnpqcpaCfnZyhqJ+fp6meoaOkoKagnqehn5ymo5+ipaOooKmrpZ+dnZudmqainpyjnqeQgYJ/fHh1aXd1XWxaUmBIUVVIRlVWSkJMRz1LSDhFPDY3Oz49PDo8OTg6Ojs6PDk2Njo8Nzs+PT8+OTc9OT47PEA8OkA6OkA/O0A+QUA9PDk3Oj5APzo+NzU4PT0/QUBEQEJGnKueqamipamprqimqqWmp6aoqqGlpKOmkpOVmJacmpqcmpWTmZuNk56ZqJ2unqeenKGenpqakpmenKGioKCdoaSunZ+prKOel4V7jJGxlIi1r6iqrKqloJ6ZkpKTmJiWlpWMiIuOlZ2dnZ2elp6apqCgqKWxqqeuo6uttrC0srGutri9wLqttbSwt7CutKmmpKWsqbmztbvDvMPBtrq2q6+xube8r7OwtcG8t72zs7WirKKpqLKpq6inqJqZnpqqp5+ZpqCfn6eopaSenaqhop6bn6igpKetmZ+jnp6nnqCmnpycoqGbo6KhnZympaWkn6KZnJukn6CboJyjiYWEfnZxbWl2bWhtXFhbQlZNSkdNR0JGTTw+TD00PDk2Oj0/PDs6Ojg4PDk6Ozs8NTQ6PDg5Pj4/Pjg4Pzk8Oz0/Oz1BPTo/PjxAPj8+Pz08Njs/QT07Pzg1ODw8QERCREFCQ5WqoKapo6mqqKmjoamgpqinrK6lqaWpqpSSl5mUmpqanJiYmZyamJqqoLGit6Owpp+enZ2XmJWZnpuco5+fnaOmzqObpaCJdoNzYmhrfYeDobOurqmrp6CenqGinZ+dmpyclJOVlJ6emJSFnZqhm6ukq7KwubKysbKxur28vLm2uMO+v8K/trq6wMS5vbusr6exrbHCtrjCxsDIysDKv7C5ub25wr64s7vGw7zDvLezqbOtqrO0r7Ouqq6jnauntrGsoq+moaOvsa2wpKSvo6GgmqGnoaSqqpmdoJmao6CmqKGcnqKemaSenpiYo6OhpZ6mmZuipJ6fm5ubnIeFgXt0cmtrdXJwaFdbUUVUSERJT0g+RUE0RUg5NTs9Njs8Pjw8Ojo4OTw4OTs4Ojo4Ozw3Oz49Pj02OEA5Ozs9QDw9QDk3PDw7Pj0+PUI+Pjc6QUA+PD45NTg9Oz1DQEFDQkGRqqGlqqelqqimn6KnnKasp7Gyq62jqayVkpWalJecoqGbnqCinJ+psqu7sr+rr6ylnp+hnZyYm5+gm6Cfn5eisNGrlI6IgWJxjmxiXWB4oLGvp6Sko6CepaumnpeclJGZnZiUjIqGiIZ5bYigpKKrrLS8tsO+vrO7wcPCxcC/wsbGxcPIwsDFyM3QyMvDsre1vrK+xbu+zM3FzMzM0se+v8DDvsfGwrfDycnCwMW+ubS5urS7t7C1sqq6sa67t766uqq3rauquLq0vK6uuaOmo56mpaKjqaaZm5+Ymp2nqqegoaGkmJSjlpSakZydn6Sep5+en6KdmJmUmJSIhH16cmtkaG94amVaW0ZLTEVEU0xEQkU3Oj87NTQ5OTc5Pj87PDs7OD48Njo9OTw9OTw9Ojs9Pj4+NztBOj45PT45PT44Nzs6Ojs/Pz1CPj83OkFAPTw9ODY2PDo8QT9BQUE+kqugp66ooqulpKKipaGlqquwsq2upKmmlJWWmpaUm6SmnaGqp6KrrLy8v8PBs7K4p6Ghq6qinZ6hop6cm6CSnLrOooZuY4dfV4eIj4+csKqhmp2cn5+Zl5iYkoyPl5eTjo2Qi4KDgndzcW5wj6atrrS5xbvNx8u/wszOzczHydHMzczHycXGzNDS1c7Tyb3Av8O7xsXIxdLTzNPQ09PMysLFxsfKx86/yNHMx8XGxMG7w8C+vr61vbOtv7/CwsbEx8SuvriyuLzEwcG6vLy1rqenraigoqmlmpagmpmdqKupo6SknpePm4uQmYmVmJugn6OdnZeempOTi5WPhYB5dHNlYmdyb2ZeWllDTkxDRVBJRENANTU1ODpCPTY4OkE+Ozs+PDk+PTc6PTk6PDg8PDw7Pz8+PD0+Qzw7OkA9Ojs6Ojg4ODk7QT48QD8+ODtBQTs7Pjc4Njo8PkI+Q0FAPpOvn6ivpqiro6KloKampKuoq62qrqKqo5Kcl5ebmJujrJ2frqalsarFxszOzb+wwailqKytqqGdo5+cnZqpk5nGwpVrXGqXW1Rxm7CzraSfnaCbmJeUk5SWkZCPjIeEg4iHg4CBgYB5cnJvbHmktrq5vsvB09LTyM3O0dPR0tHQ0dHNzs7Qxc7U1djS183Gx8nMw8XKz8rS19HX0tTW09PIzMfNzcnSzM7TzMXHycrBxcvGyMjFvsKys8jEy8rKzsXKv76/vcHHxMzMyMm/w7+tr7OonqKqo5qTnpyYnqaprKSlppaXipWFkZSHkpKSmZualpiQm5WQjIaRi4B6cnV2Z2NndmlkVldRRE1GQElRQj1CPDoyMkA8RDw3OTxCPTs9Pzs7Pj05Oj48Oz44Ojk5Oj86Pj1APkA8Pjs+Ozk9PTw5Njo6Pj08PEA/Pjk6QEE6OT44Ojo6Oz4+PEE/QT6QrKKiqaanqKSfop2qqKOso6OnpqyiqZ+To5iWn56dpK6bn7CrqKyxyc3U18/Gu8esrbS4rK6jn6Sjn6CkrJqfz7SBWlx9kWuQrq6lnZ2doaWhnpqVlJaUin13cGtlYmhxb3F7hYqAdnBucXRwhbPCvsXR0NfW1tLWzdTW19TT0dPU1NLP0cPQ09bY1dbSy8nO0cvGzdHJ0tXW2dXX09bYztLKz9HMztDM0s+/x8bKw8zMy87PxcbHtsDKv9HMy8/Fyce/w8LIzszP0M/NysjOuLe7qJ+lq6eemJ6jnp2qpa2pqKiSlYiQhIyRho2MiJOVmZCWjJiSj4aHjIR8eHN2cGNgZXJiXVJcSUpHQUVIST47QDg9NDU4NTs4Njo8QD07Pjw7OUA7OTo8Ozs8Nz09Ozo+Oz08Pjw/Ojo8Ozs5Oz89OTU7PD48PD0/Pz46O0BCOzk/OTg7PT0+PzxBQEQ8hqugnKegp6Oim6CbqaSlqaCfoaGmn6ifmKSimqmmoqarmqOwsamotdDU19rSx8bLtLXCxbG2qKKlpqGiq7WlpdKoalp1laOtrZyVmKCcm6Gin5ydmpaKd2ljYF9fX19eX2BeYmx1c3Fwb2xycXWSxMfG1NXW19fT1s/V1NrU1M7P1dTU0dHM0M7T19bT1dDP0tPRydPRx9DY19jR2NLX2dXWzM/Pyc3Ry87Pv8XCx8XOzdHQ0cjLzMDKy8XTzsvOyMTJxsbIzMrT09HVz9LM0sG5xbGlqLWup5qorKWdsqiws6ysk4+TjoiLjoOPi4SQjpmNk4+Zj4+ChYx8enFzdG1hY2ltX1ZQX0pKQ0ZDUU0/PD41NDo9NTI4NTU8PEA8Ozw6OTpAOjg7Oj46PTg+Ojo8QD08OTs9Pzk6Pz07PTw9PTo2PD0/QD08PT0+OjxAQjs5PDc0Oj48Pz89RkFEPYKknKClnaWlo5mcnaSeo6OfnZ+doJqnnpyhqZ+vrqqqq52mrrioq7fX1NXZ2dHO0MC8zMm3v6+nq6mjpLG1sa/NoVpkn62ropmWmJqbnaGdmpyek35yZWNiX19hYF9hYF9gYF9gZm1wcG5rb3J3d5vMwNLV09jY1tnR0tLXz9POy9LN1dTSys/M09bS0dbNz9XV0cbR1MrQ1NXWztLQ2NjY18vIzcPIzszKy7/Jv8fIzc7Py9DNzsvOzsfKz9DKzsrCycbJzMrL0dLM09HRz9DKvci5sK67uLWqtrCtqLits7+7sZqPn5SRjo2IjpCFkY2ZjJGRlY6RgIWIenZvcG9rYWRucGFXXFpJRkZETVdFO0A8MzM8PTg3ODU1Oz5APTk8PDg8Pjk8QDtAOj04Pjk4Oj88PTg7PkI6Oj08OkE9PTw6Nj09P0A9PDs9Pjg7QEE9Ojw4ODs+PD4+OkVCRT6Bn5mlp6Cfo6eam5+cl56eoZqdmpyappufpKefuLa1ta2lra6+tLDA2NLX2tzWz83LxNPQwsGxqq2uq6Wysba+zJdakKKclpOXnJ6fn52UlpiUiWteXl5hZGJgYGFhYGBhXl9fXl1ibXJvb3N0dnZ5pL7L1dHW1NPY1s7O1MvNzsXOytLSz8bOzc3UzM7TzcrX1dDM0dTLzNDR08rO0dXS1dXKwMrBxczCyMnCzMPFx8rKzsrNzNDN08vFyM/MyMfKxMbAxcrLzc/RxtDOzc3Mz8XHwLe4vcPDvcO5s7K+sbvDxLWqmKWimZaRlZWSi5SNmpGUlI+PlIKJhXhwcWttZ2BgcWhYWGhWTEZMSVBQQjtEPjs2Nzo4OTo1Nz09QTs6PD05PD05PT06Pjo8ODs9OTtAPD47Pj5BPDk9Pj1CPTs3NzY/PDw/PDw7PDw4O0FAPDo8OTs7Ozw9QTpFQUU+hJ6bqK2epKSqnJ6fmJKXm5+am56ZmaKVoamppcXDwb+7tbKxx8K4y9XW2drb2MzNz8jW1cXDt7G1qqOtrLi3yc2XiJqOjZiVkJSSkZaWlpCMfGZiYmJgXV5hY2JgX2BgYWFgX11bXWdycXFyc3FtcnmkxtPPy9DP1NXJxcnJxsa/w8bPzsfFx83K0sjLzs3G0dLPzszUysfLzs/Hx8/Sy9DPxbrEvsbJvcLHyc7EwcfAx83Hw8vKy8/Hw8PQyMbBxcfEvsDHy8vLzsLKy8jHzNDExce7x8PIyMLPwb28v7DByce5vaqwsqelnaKcmJCbkKOZl5mRlZiJj4J3bnRka2BeZnFhW1dgR0hIR0lNVEc/Sj02NDM1NT08NDg9PT06Oz08OTo7OT89OTw7PDg6PDo6QD1APD09Pjw6Qz48Pz04ODk6QD4/Pjw7Ozs7ODo+Pzw7Ojc5PD49Oz49RkFDPYOgm6qupa6qq5qdoJeUjpedmpmgmpqcm6WysazJzcrIxL69us3Nx9DV1dna29jQys/Q0tTJxLm9vq+nt6q9uc7JoZSOjpePhoOEhIJ+hYV/dGBcXl5eYF5gY2RjX11dXl9gYF9bWlxha3Jyb29rbG9vfbjRyMnKz8vNxLrAw7u7urq+yMbCw8DDx8rJyMrIwcXMxsjLzcnEwsvJwcLL0MTLyL+5wbvFx72/xs/Lw7/Du8nGyLvIxsTKwL3By8bFxL7FvLy/w8TLxcS8wMnCxcfSxMDIv8rJxsfG0MPDxsOvxMvHw8q3v7y6tKmspKWYn5iso6GlmqOgm5R7dnN0ZmlaYW5tWltYUkRMRkJHRExERlNANTQzMzQ/PDM6PDw7OTw8PDg7PTtBPTo8Ojs3Oz05Oz07PTs6OD4+PEI+Oz88OTk7Pz07QD48Ozk5OTk6Oz06PDo2OTw+PDs+O0NCRD5/pZypsqm0rrCdnp6YnImUm5man6Kfmp2ov7i8y8/RzMfCw8fNz8/M1dDW2djZ0MzTzs/QysO3xsC1tbuwv7bSs5GMk5iHeoCFhoB2eHVycV9aW11gYGJkZGRlZGBcXF1dX15gW1laXGJvcm9raWxwb3OPxrzJxczAxsKwtrqysrOyscK8vLy6uMDBwcW+vbm9v7nEysXGwr3GwLi7xMm/wsm7t7u6xcO+vMHNw8a+vrXBvcO6vMa7wrmzvMXEwcK2v7W1vb+6y8O8tbrIur+9y8PBxcLFyMbIxtDGwszHssfJw87NwcXDwL2yt7Cyp6ioubClrbCrrayUeXZ3amRnYGhvY1ZeWUpGSkZISkFFQkVJQDk6NjQ4ODUzOzo7PDk8PDs5Ozk6QD46Ojw6Nzo7Nzo7Oz88OjxAPUA/PT8/Oz07O0A8Pj4+Ojk5ODk3ODo8PDw7OTo8Pjs7PjpAQEU+fqygrLWqt7SyoZ6fl5qNlJaan52mop2et8bDxMjO0svKysfNzs/SydHG1tTW2M7M0MfMyMrEvcnBsbS5trm0u5ONiouFeYCGhoB+hHx0dWRcXF1eYGBiY2FiZWViXV1bXF5cXl1aW11daHNxbWdnbnByeZ29zMDDusG4rrCwp6qtrKe4tLe0srO0urW+sbewta+yu8K8wcS8v7q1s7q+wLjHubS7tsDCvLi9xsHDu7Wusra6vrTEt7u1q7i9vb+9sLq2r7a6ssW8tq67v7S2tMW9vsPFwMPFxsjLxcDGxrvIy7/PysfDxsLDtsO9vba5vse/rLW6tbe2jnh0eGZnZWJrbl5WXmBGS0hISkZCREFFRT88OjU2NTYzMzs6Oz06Ozs6Oz44PEE9PDo7ODc5OTk7PDo+Ozk+Pz1APz5CQD1AOjo+Oz89PTk6Ojo4NTY7PT48PDo7OT49OT86PEBAPIi3pauzsby8sa2foJmUlJiXnqujr6qnpMbLzsjGyc7M0MzOyMvJy8rLxdHO09DPx8nFycTDv7zPvLK3u7i1tJuOh4mJe3l+hoZ3eIJ9dGheXV1dX2BfYGRhXmRlY19fXFteXF1eWltbXV9scG1oZmptbnJ8pMe/uLi1sKusp56iqqeeq6yzramrqbSttrCyqa6mrLK8urbDubq6sau1ubu0wrqwv7G9vLu2vMe5wratqqiwsb+1t7yvsKexs7S7vKuttaWutq66sbCquLCtu667uLu/v725wr/Hw8XBvMbByMu4xcfFv8bDw7nExsK7xsnMy7O5wry6sohydnZraWFibGhZWFdbQUxLTUlFQUM/RkE6OTo5OTU4NTQ6Ojk7PD07Ojs+ODtAPD05Ojc5Pjk7PDo4Ozs6Pj45QT0/QD87Pjo7PDo9PDw4OTg5NzY4PDw9Ozw6Ojs+PTs/Ozs+QDyKwKuouLe5w62zqZ2ZlJaZoZymsLWxt6bGztLMw8bCxdDHzsLEx8DGxsTEy8LKy8HDwMa/uLq6ybazubqzsamRiY+QfHl+ioZ6e4WBd29eXVxdXV9gXl9kY2JjY2JgX11bW1paXVpaWlpcZG5vaGZnaWtucoGtubC1rqalp6eaoKSgmpylq66jp6KrqqyqsKSmn6qttbaxvbmvt6+orre0tLy4tLyvuLm0sbzBscCupaiiq7Gys6e8qquoq6yttLOlqK2hpK6psqWnqK2lqLessLK3ubq7sbu9vr7Ev7XBwMfIt7/AxLfEwr+7v8TCvsTIzMq/vsPAwKmGcnRyamldYW9kV1ZYUEhZUlNLRkZFPj5AOjc4OTc3NjQzNzo5OTo8Ozs8PDc7PTs7Ozw4OT44PTs8Njo9Oz89N0E+P0A/Ojw8Oj05Ojs6Nzc3ODg3OTw7PDs5Ozo8OTc5Pjw+P0E7jMKvrry3ucSwtrCbmZWcmKqpsLGztb2vxdHQzcTIurrMwszAvMq4v8XAu8u5wsXEuLvBu7e1u8O2s7W2qa2Ug4mNgXx+gH54dH98c3dmX11cXV5fYF5fY2NhYmBgX15dXFpYWltbWVhaXF9ma2ZlZ2Voa29yhaqlrKagnKGllJ2km5iSoaOqo6KfpaWnpayfnZukpqyyr7a3p7Csp6q0qrS6sba1rba5sa+6ubG3pJ+jn6axp6uouaqkp6iop7KtoKemn5ukpayen6ekn6Cxra2ssrSytLC1vLa7wcGyur7DwbK5ucKzwL2/tbi7vb68wsfEwsO/v8Sgg3dwa2FmX2tvYFVZXkhOZ09UR0VKRjw9Pz06Ozs4MjU1MzY5OTk7OTo6PDo3PD88PDs8ODg8OTw6Ozc4Ojo8OTg+Oj89OTg8Ojs9Ojc2NzY3Nzg2NjY7Ojo7OTs7PDg1OTw6Pj5AO43ItbW9uLrAur21oJ6UnaGmurars7O7s8TQycvDx7m4ycLNwLnLubzHu7XHurXCxLG7w7mzrba9uKyvsamehIeHgn16dnRvbWtqanFpXmBdXFxcXmBfYWNiYGBgYF1cW1xcWFlYWFhWWFteX2RjYmVnZ2dqbW+Inamgl5WaoZabopiWjZ6hoqabn5+jpaGnnpuim5+qsK2xtaKpqqmrq6S0ua23sKyyta6yta6wqp+dnqOisqSmqbitoqamn6isqpmfoJ6ZnZ+lmpqjnJudr6mrp6qrrK2wsrivuLm7sLa7u7qrs7O5s720trGxtbS/tr3AvcPBuru9l4N6cmtfZV5kZFhUWF1JV1xLUEdJSUZBPD8/QDs/PDA0NTM1Ojs5Ozg5OTw8Nz4/Oz07Ozg4PDg5ODw3ODo7Ozo7Pzo9Ozc4PDo9PDc0Nzc2NzU3NDY2Ozc5Ojs6ODo5ODo7OTo8PzuJyba4vru3wcHBtKSkmZqkpsCyr7astLfG0MjJwce8vMXEz7+7ybq6wbq0xLezvr+xv8G5qqaxtrOkrK2jiYaHgHlzbnBua2JeYmZmXV1eXV1dXF1fYGFiY2NiYV9cW1taWllYWFdXV1hYWFpeYmRkZWZmaGlrco2onZSUlJuYm6GWlpGcoaKonZudpaahpZygoJqYra6trrKgpaKtq6ahtLCxsayor7KnurOmtqGinpujoa2joam1qqKjpp2lpqOWmJ6XmZqdn5qXnZ2cnKyhq6ajpKatq7OzqrSwsqqyubSvqa+ysrO3s66prK6yuLC6trm9v7eysZSFeXVlXmVeW1lWU1pVS1tRTElFSEtJQj0/QUFAQToyNDUyNDk5ODk7OTo9PDY9Pzs8Pjs3Ozs3Nzc+Njo+Ozo4Oj07PD06Ozw6PTs4Nzk3NDY1NTQ2Nzg1Ojo4Ojk5PDg3Ojg5PkA6gci9t72/tr68v7OdpaOYpbHCtba9rbS4ws3Ix8HGuMLByM+4wsa/tby8tcG5tby+s7i8t6ajrbato6uoln2EhYB5cHJ0cWlmZGhlY1xcW1tdXVxbXmBhXl9fYF5cW1pcWllYVldXVlhYWFhWV2FkZWNkZWRkaGp2opyUlI+Ulpefl5mUmJ+eoZyWoaGoo5+eqZyamqqmr7Crm6Ojt6qgn66otqmmp62wo7ewpLefopuYmKqmoZqsuLCioaScoqCgk5WhlJWWm5iXlpeclZ+pnamjoZ2jqqqwrqi0q6qmrbKwpaqusrGwsK6vpqensq6xtK+8tLq3rqOUgXl1ZF5hVllXU1JUS01eTFBLR0dMTEU8QD48Qjw7NzY1MzQ5ODg5OTo5Pjo4Pj47PTw8Nz49Njc2PTc7PTs5Nzk7Ozw+OTk6Ozo4Njc2NTQ1MzEwNDU2Nzk6ODo5Ojo3Ojs5OT1AOnbAvLS5wrG+uLyunaeno6q7wL3Aua60uMLNycbDxL7HucnNtMPEw7C+vri+v7i9vbe3ubOko623oaKan4eAfXlyam1ydHBoaGVkZ2JcXFpZWlxcXF1eXVxbXF5cW1xZW1taWFZXV1ZXWFdXV1ZbY2NiYmNiY2RmaoGWk5WLkZSTm5mclpaboJyflaCfpqWkpqeenJ+ln6qvpp+io7aooKGiqLShpaekr6Wwray1nqCdlZSpoaKUrLGxnqKjnZ2Ym5OLoZSRk5eYkpeXmJadppumoaKZo6Wlq6SlsKelo6urraaorq+uq6iqqbOlpquvtLGuvLWxr6+gknp2cmRhXFpdWE5MUkhSYU1WUE9KTU9FQkQ/OT02OTo3NjQ1OTk7OTg4Nzs4OT0+Oz47PDY5Ojc7Njs3Ozs6ODU6Ozo7OzY8Ozg4NDY4NjMzMjEuLzI1NTY7Ojg7Nzg3Njw7Ojs7QTh4u7uxtb2wu7G3rJ6kp623u7zBxbqxubXFysvBxMfHyLfHxbTEwciuubrAusC+v7u5tLayoqOtsZmbg5SIgHdvZGJnaWhmaGpnam1gXVxbWlpaWlxdXFtcXl9cWllbWVlaW1dVWFdUVFdWU1RSVWBgX2BhX2BhY2RpgZOTiJCOlJKTnJSVlqOZoJacoKWhraWko6KjoZuqq6WZnqWxqaCgnaWrnqehnqytqaiuraKhopSXo5uckKqosJufop+el5mTip6RjZKTlZCYmJOboaKcpKChlaChpKabo6uloqSqpKuupa2yqaalpqa0pqmorbO1tLm6r6qsnotycG9gW1dWVlJHUU9IWlxPUklUS1NMRUdJQzg7Oz08ODY2Nzo5Ozo5NzY5Nzc6Ozo9PDw2Ozw4PjU5ODo4ODY1OTo7PDk3Pzw5Njc4NDUyMTIxLi4xNDI2Ojg2OTg2OTg5ODk7OUA5e7W0rbS7sq+rsa2dp6evubmzwMi6tcCvxsnNu8LLzci3y7+zwMbLr7S7xbm/xcG6u7O2saCmq6mXkoGMhHx1ampqbGhqbG1ram1lXVxcW1tcWlhaXVtbXmBgXFhYWllYV1hXVFZWVVRVVVJTT1FZXVxdXl5eX19iZG2Oj4SRh5CRjpmTlJKcmqKcm6CnqKqoqqaopaOYpK6klJmlr6mfm5mboJ6vmZuqs5+lpp+jo6GUk5uWlpKpqq2anJ+hoJqUkIyZjouQjJKNlpWQnqGgo5ybopWboKKgmKKoo6Koq6Crr6Sut6WjpKKsraqoq66yt7K9tbOrr5iDc3NoW1hYUlVSRVhMUVtZTVVOUExQUUlOSUI8Pz9BPzw2NTc5OTw8OTg3Ojc5Ojs8PT47Nzs7Oj02Nzo7ODk3Njk4OTo2Oj05OTU3NzU3MTE0MS0rLzQzNDk4ODo6ODo6NzQ4PTg/OX6zrqiztq6pp6+tm6morLe2rLzKu7a/rMzHxrnCz9DItca9ub7Fy7Ovu8O6wMLAur6vtKuhpamml4+AgXd4b25pbm5ucGhnaWdkXVpbW1tbXFtZWltcXF5fX1xYWFlYV1hXVlVUU1VWVVVUU05QUVlaWlpdXFxeX2Bkfo2Bi3+MkIqSjZeRl5mioJufqqmmrqqnr6OnmZ+soJWWpKinnZeQj5qerpaXp6qZn5yUpaGekpCTkpOVp6ulmpmZnZ2WjYyMlIaIjYOQi5KVkaCeoKOXlZ+VmqCinZObpaWnqKigsbCmsbynoKOstKqup7C0sLm1wLGtsauQfXFyYlZUVk5SSUdWUVJSTExYTUpMTlJHTUtBQ0ZEQz5ANzU4ODk7OTo3Ojo3PD06O0A+Ojk7OTo/NzU5Ojk4NzY5NTg3Nzk7ODU1NzY2NjEzMjEtKi4xMDI4Nzc7OTk7ODk0ODs4QDh/s62msbeqpqKwq52qp6mysaS2xrS5urPLxrq7wsvRzLO4ur7AxMa0srW7sLi5wbq9ra+prKiqpZWYgmtnbW5yb3FrcGtkZmdlXlpZWllaWlpbWlpaXFxdXFpYWFhZWVdYV1VVVFJTVVNWVVJOTk5SV1hZWVlZXFxdYWqAen92iY2HkIqYiZSUl5uZnaian6mlpKqdp5igpZuSj56impeWhYSSmqOPk6KclZaVh6KampOLjouQmqSnnJWVl5uQkoeUjoyBi42AkIqSkpKhmp+ilZSYmJWipZmMmKSmqKahoLSyp7O3oZ2it6ypraSysqa1u7Wrq7GjiHhxbF1OUVFMT0NNTk5QS0ZOTkpKTk1RSU1KQUdLSEdDPTg1ODg4OTo7Njk6Njg7OTk+PDg6Pjk7Pzg3ODk6ODg2ODU3Njg4OTc0NTc3ODIwMzAxKiktLzEyNzc2Ojk5OTk4NDk4OEE3d7anpLawpKejqaWgqaWks6qissO1tbKzx8a4u8TKzce1r7u/t7rDsrGstKGqssC2t6mmp6+pqpmQn3lfYGdzcXZxam5pZWhoal9YWFhYWFlZWVpaWVtbXFxZWFhXWVlYVVZSU1JQUVRRU1VRTU1LTFNXV1ZYWFlYW11hb3N2cYWIgoiAkYOOipSRk52gj5qboqGjmKSWoZuVjYeYmoxzjYJ9jZeWhZCZkJOOjnuZjpyMgoqAiZifop6Qk5iWhI6Ck35+dImOepCHk5CQnZqZmpCVkJ2OoqOOiZqgoaOjm6K0r6yvrJ+ZpbimpbChsK6csLuqqa+qmYF2cmJVTVJPUE1DU05MUU1CUFFISU5TTUhKSkNKTEZLSzw3NDk4ODg7OzY5Ozc6PDk6Ojs3OT85PkA3OTo8ODk3NjQ0NDU4NzQzMTI1ODUvMDEwMikoLC0xMTc2NDc4OTo6NjU6ODdBN3i3oqO0qKWmqKOmpaamprOnpbTBuK+0sMrFuLrBz8a/tK68w66wxrCrpaqUoau8tKyrm6Oop6WRjppvV1dgaGdpaGluY2ppZ2JcWFdYWFhZWVlZWVlaW1tbWVlZVldXV1NUUE5QTk9PUFNUUk1NSkhOU1NTVFVVV1lbXWlscm1/hXx0Tlhyj4KXho2cl4uTkJ+XnZWUlpSOlol/k4lfO1dve4uUiYCLkoyPhYZzioSWgXmCeoWUnZSDlo6Qj4OGfZJ4cm+FjX6JgZGNj5eZmJOKj4mch56Xh4iWnpqhoJenr6mtqKiel62zoqatmKyrmKe0oqmto5J9cm1fW05TUlZMRFRKUE1MRk5PSUZMUU1LT0pJTVBGSUk8NzU5OTk5OTo3Ojs6Pj44Oj09Njo/OD4/NTg5Ozc5Njc1MzMzNzYwLi0vMzQ0MTEwLy8oKCsrLTM4NTQ3Nzk8Ojc5Ozg2QTl5t6CjraGmpqqgp6mnoqmwqKe0wbmwtbDIw7i0vs/AurCwt8SqrcispaCbhZift6qjo5KhoJ+ckYmQZlFNUlZaWlddXmJnY19ZV1dXWFhYWVpZWFlYWVpaWllYWFZXV1VTUk5MS0hHYlxNT1JNS0hGSE5RUU1QUlRWWFpgbXBpe4J0UEJBf5WRkX2JlIyEio2ajZWVipKIhZWGeIh/YEpRbniKkYR9hI2JhX9/bn5/lHd1dXeEjZlwUY2Iiod8fniTdmh3hYd+ioiVio2QkZaLhIqIlISajIGEkpuWnpyUpKOoqaWknpuwqqGkpJClqpahqZyipqiIdGxlXltIUVFSTUlVTVNJTEtPSUhHSk5MTVRLUVFPRkhDPDc2OTo4Ojs7ODo7OD4/OTk+PTg7PDY7OzQ3ODs2Nzc1MzQ0Njk2LzMvLjEyNTIyMS8sJykqKiw0ODMzOTc5Ojk5Ojo6Oj85d7aboqedn6Guoaeopaeor62qtry2uLezwry3qLrJubaoqba3rLS/qaCZkYGNl66dnpWJm5KUj4uFhmJNTE5OT0xNUVdbXFpYWlVVVlZWV1lZWFhZWFhZWVlaWFhWVldVU1BNSkVAQJtrc3NJTUtERERJTk9oWU5RU1RVWm6DdHd+amldVY+JlIl0f4eBfIWMkoGSmYuPe4aPgHV/eHNudXB0jY2BeX2KqoV5emh2e45wcm14gYuMknh6gHuAdnNykndndYSEhIR7lYmIioyKgH+Ei4x/lIN7gI+YlZyVkZ+dqZ6foJ2gqaWfnZiMp6SToJ+Wnp6kf3JnYFxcSlZPUkdLWFJPSk1NUkpKSk1QSExRTFJUTUVIQTw3Nzs5OT49Ojs8OThAPzo6Pj03PT03OTk0Nzc5NTY3NTI1MjU3Mi8yLiwvLzIwMC8tKygoKS4xMzcyMTk4Nzk4Nzc1Ojw7N3aumKOhmJyftKmvqaWtrLCxqr20sru4tru1sqC3u7OrnZ6tqqqzsKOck5CXhJKhlJqIgJSGi4WBgn1iS0lJSEdGSEhQVFRUV1dTVFVVVVZXV1dYWFhYWFhYWVlXV1VWVVNQS0Y+OTNOPH6eTUhKREA9QURqlH5MT1FSU1ZedYN9eWd3jZeYjo99Z3mBdniAiY98hJiSgXKHj3x2e29rfq18c5CKf3uGkoF9f3RmdnyGbG9oc3yJjIeAbHlxfXBtdY9xaHGAfo5wQ4qEgoOFf3d3eouFfYt6dX6Oko+YipKam6OWmZyanZ6inZaNiqWbj56XjpaYj3ZubGViWldXVFFKU1VUT1BOUVZLTktOT0pRTkhOT0tGRDw7Nzk7Ojo/PTk8Ojk5Pz87ODw9Nzw5OTk5MjY2ODU2NjMzNjIxMjI0LiwsLS4uLTAtKyonJyouMTM2Mi84NzY5NjY1Mjc5OTV5ppefn5agpq+srqunqbGvsau8uKy7vrmzraibsaetnJCWnaaqpaKZm5GHlH2Mk5CSfXmHeIJ+e3t8YktGR0ZBQENESUxMTVFSUFFTVVRUVVZXV1dYV1hZWVlZWVlWVlRTUUtENzhmNzA/qGlOSEM9OzpEioV6WkpOUFFUWF5lcHJtiKeqwH51eWJ7eG58eYiQeXyLhW9tjJF4c3hqaoCCcpaRi4F9loBJkphuaHh+gmxpY2x5hZCShmtzbHxucnuGaG1wf3ONiYSFen1+e3ZvdHOFgnmBd3B8joyKlIOWl5iakJOVlpmXnpeMg4mfkYuSjYaQln5taG1ubldVV1RSUVlPUlVVU1hVTU5ITkpNTktDSE5HRUA6ODk7OTk6Pjw5PDs6Oj0+Ojg6Ozk/ODY4NzI3NTc1NTQxNDQyLzAyNCorKiotListKigqKCcsLTEyNTAsNDU2NzQ4NUhBODk1d5mRm5manqWtsKKsqqi1r66stL+rvMK/pqKalaWYno6FjJaiopmZkpWNdZB9g4mPjHp2fHJ7dnJ2eWRPRUdEQDw+PkFGRkdLS0tNUFJSUlRUVFRWVldXWFlaWVlaV1ZUU1BMRTFAmjMganNDmW87PDk1PICChl9JTU9PUldaUllcYKeIYpppdHplfnBtf3qLiXaBiIZ0bJqRdHN7amudj015hZKJhI5nMXaGc2x+foN0ZmV0foSEhYBmaWx1a3B/fGdwcHtuk42Oe3N9fHFwbnVtgn53eXRpeYmCiImDlpOSkIuNkZSUj5eOgHmIl4iGioaAkId2ampuZ2RXUVpXWVlbTVBVVllZTklIRUpKSEdCQUZEQ0c9OTk4Ozk6OTw6OTs6OjpAPDk6PDk4Pjc4NzcxNTI0NDUzMzY0NTAzMS4qKispLCwrKykoKycpLCwyMjYsKzU3NzU0NzhpTzg7NW6SiJmRmpakqK6esp+muq6rsrDCsbvDx5uWj5WZi42GeoWRmZWOkY2RiHOIhHeKj4t+dXZ0dnVtd3FnVUZJRD88Ozk6P0BBRERFR0pMT1FRUVFSU1RVVlZYWlpZWFZVVFNQS0U4MC9cYLNHOVhQOzk0NDGWuotITE1PUFFWTEFJUUlir7OgcXx4bX1scoOBhYF6hIaGeXKglXR4gHN1lIc1cZ2onY6hoYSihHZwhnyHfHOMrY2JgGhmYmlucm1wg3Vpb1h1cI6aknZsf3t9bXFtcIB6c3ZtYnaEf4aAhZCRiouKkouRjIuPg3V4i4+AfoOBfo96cXBva15aXF1bWVhgX1NOW1pZWExISkVKRz9DQUJHPkNEPTs5Nz07Ojs7OTo5OTs6Pzw4OD06ODs2NjY1MTEyMTM1MzQ3NTUzMS4vLCwrKSopKSoqKikoKikrLzNETTIxNjY2NDM8dlI3PTdikoGSiJaRnqSnnq+VpbWprbGuwbK7wcaXkIyUkIGJfW6CkZKJhIuIj4d2g4Vul4qMf3l6e3F7c3xqbl5KUEc+QDc0NDg7Ozw9PkBCRUlMTExNTlBRU1VVVldYWVhWVVRTUExFPDUqnUtbQC1nSTk0Lz+Sg6muX0dMTU5QTDdDTVJTREqGdoB8fHZ+bXeIiHx9hYN/jH52opl5foaBhZmEm5xhhqqfnYqCkI16doh+iYiOc4qXj4N7XGRxdHp7d4psZ2lheW+Fj4J6boF3dIR6cHR5d2tuaV13h32HfIiHj4CLk5eDjYWNh31xhH+EfHV3e32JdW9yc2VmX1taXVNbZl5XUVVYXFZHSkpES0c/RkBEQz5BQT06OTc8Ozs9PDo6OTk7Oz0+Nzk+OTk4Njc1NDI0NDAwNDY0NTY1NC0sKSsoJycnJigoKSkoKCsrKy8wMFVxPDIzMzMxRX5XND05XI14ioCUjJKdnZ+mkaCroLGor8CxusW6lo6RlIh6hXZrgIySg36LhI+NeYOCdKKGjX9/goFzg4B8a3lsU1dMQEUyMTEyNjc2ODg6PD9CRUdGR0pLTU9QUVNUVVdWVlZUU1BNRkA6Mj0gI5ZjjFs1MzExaT9Hb0lGSUxNT1JMS1RdWVJKaYSIe4l5fHF8j4x6fImGfpeHdqGZiIePkpSljaypSIaur6+LgYCTioKLgYSRqIeAmJiKnHNsfIGGh32OaGZneH5uhYaChXGEhUdrgHdyeXZobWtfdn2DiH+IhYx6lZ6ciouIkX97dYt2fHdtb3d+f3JycWpaXFxbY2NYZ2VcVVBQV1lQRExLRk5JQ0ZDQ0FAQ0E9OTg4Ojo6Ozs6ODg4Ojo/PjY7Pjc1ODU3NzMzNDQyMzY3NTY3Njg7REZMTU1MQzcrIiUnKykrKywvMDArbnUyMjQyMEyBXDU9PF6FdHx+ioWIkY+WmJKXoJ2soaa4r7O9s5eNkouYi310cH+Jk399jIOTlX2Gf4eliImBg4iGeYiLf3WGeV9jVktCNjAuLzIzMTIzNjY4Oj0/P0JFR0hKTE5RU1RVVFRWVVNRT0dDPzgwLCOHWz4/OTQuXZZwc6NVRklLTU5QV2BZcFpcXmqNk4eVgYSChZGTfoWJkYGalYKhoZeVm5qlrZOau7Gnu8fDqIuMoaWOk4mBkHtyg52fkZx+doWFio+HkGlob4OAdIyGhItxhoJ3h4B7doV9bnZ1Z4CUj4aJiIeIh6GropaJjph/e4KJenpvZ2t4fXh8cWljXVpZXWlcYWZfWk9MTlhSUUlQS0ROR0NLRENBRERBPDo4Nz08Ojw6ODg3Nzg6PT04PD02ODY1NjYyMzQ0NDU3Njg2NzxCQj88ODo+Q1FeZVxHMicmLCwtLS4xKD+MWy4zMTBPg180PztudXBneIN7gIyAgZCPi5qapJyhrKarr7CXkZGEoZSEeHeAjZR9f5KGk5Z/ioCSm46EgYKMi4KKjoSAioBscGpdQ0E0LS0vLy4vMDIyMzQ3Nzk7PT9CREhKT1FSU1JTVFRSUE9IREI8ODcvOUQ+PDw2My5sk5dNUEhJS0tLTlZgY39nZ211nZuPmpOTi42OmoiTj52LoKCSo6qlo6yTqLaiqMHDrseveLqUmnyMoZ6YhJKFgo+hn5OYkoSKhY+YkZZscHWJi4GVjI2Pdo+EcWyFgYqWkoOFiHKJoZaGk4qPj5altambjZWig4eThH5/a2prfH5+f3FfXGJeWWZqXGxrXlhLSE9TUU5NTEZJUENETkZCQ0VHQj46OTc9PDo7Ojk4Nzc2Nzs6Nj06Nzg1NDU2MzQ1NTY2NjY4NTU2MzEwLiosLCkoKS46UGFcQCwoLSsrMCwncog3MjQwT4RiM0A8dW5oWXCDcHWHcXaShn6XlpqUn5+cp6CqlpOYnmdlpJp+hZOSeoCRiZGSfYqFmZKRg4CAi42JhpGHhIiFeHh/Z01SPi8uLiwvLi0vMDAwMjEyNDU3Oz9DRk5QUlRQUVJTUU5QSUVEPjs8OkNGPz48ODUyPD9SNUhISExMTU5SXm+KfHOBfaCdm6imopmhl6KVnJ+onqmrn6isqaq1l6u/q7bIyLfJ0c++m6Bwaaupn4STkoWcoZqamaeRkYiVopqad3p+lJeRoZKWl4GUnnt2lZKrs4mNl6B9lJ6cjpOWmaSiprawnZGZqIiXkI6BiGxzc3t9em9mXltfXmBmY2BnZ1xSRUtLUE9JSkxGRk1DR01GRkNCR0RBOjg1PDw4OTk5NzU2NTg+NzU9ODQ3NDU3NTQ1MzY5NTg6NjE2ODYzLzAuLSosLy4tJyMqO1hiQigqLDEtKEuXXjA2M1GFZjJBQGlhXlBxdWBufWJ3jn18lI6Oip+Sl56WnKqYnqpCRH2HiYeYjXiCjYuOjXuKho+QjoKDgImMioWThYOGiIGAh3dfYlA0NjAtMS8sLjAwLi8uLjAwMTU+QUFNUVJTUFJTVVNOU0xFRUA8Pj1HR0FBQDg2NjI8OTtGSEdJSU1PUVlthpB3lYujp6q1vbilrqysp6i0rLG3srKtu7GzvpyzxKy7ycu4xL+4paOwsqytqqOLlpiFpqagopeCppmNoqqopIeFk6OgoKqgpKmOnLGLlaOnt7uboKOwk6Odo56RpKKrr62ztaKVpaqJmoqTipV6e36DfGVfZltkYF1iY15mZl9bT0RKSFRPRkhMRktIRUZIQUtGQ0ZGQTs4Nz08ODg6OTc0NjU4PDU0PDc2OjQ0NjQ0NzM5PDM4PDIwMjU1MS8xLi0qKi8sLSooKiYlNVhYLywwLCwwhIE4NzFQhWg1QUNbWFRMaWNYanBYeoV2gZSFiIKbg5KQjZLayJ2Wc1aXiI+InI98hoyPi4p6iIKHkY6DhYCLhYWIkoaChImGh4eHcW5hQEU2NDwyLzExMC0sKy0xLy00P0RBTVVRUlRVVVdVTVtQR0dEPD4+RkhDREA3Ozw1Qzs9RktJR0hST1BXgZOghK6js6qywcjEq7PFtqyzwLO4vra/tMG2u7ukuMaptsnHtr65tKijtK2wsZuZkpqfiKevqqSUdp+kl6GrsbOYlqmtqK61u7K6rK+1orGssbW8t7WutaCnp6Oom6mwrbK6uLinnLepjaWPkpOghnmBgXNXYGJUZWBgYl9fZV9bVEpERUxWUUlKSkRKSEVBQEBLREJNRjw4Njc7PDk3Ojk4NjU1NTcxMTw4ODk1NDY2NDk3Pj0zODkxLjAxMjExMzAsKiwuLCsrKyooJyopRVowMCovK2iSTzYwUodqNkFFV1FKTFtaUWNkV3p1cYKUfYWGk3aGf4CNe7+7o7yCtJSTjpuPhIiPk4mJeYeAjJOMh4WBjn+BiY+Gf4WIhYqHkXp5bl1WQEVOPDY6NDZBQjc2NC8vNkNIQ1FbT1FVV1VcV09fVUlLSkFAP0dLRkVDOz5AN0Q3P0JKSkVHV1RQXo+lraOxtMO2uMHMyra7xL2ztMG3uMK1v7C3dLG0prrFpLDGubGzsbSopLW2qrGgopabopGlsa2lraunpJigrLO6oqiyubW7vsy/xcW9vbPCt7q4v7e6t7mtrbGmsaqtvrC9u8LCrJm7qJWtj5iYqol+gHlpVmFfV2ljaWRVW2NZVlRJSEdMUUdESUpBSEQ+P0JCS0BATUQ5OTY2OTo/Njo5OTY2MjQ2LzE5NTk5MzY0NjI3Oz0/NjoxLi81ODo5NjUwKigsLS0tLCwqKCgrKyhFUy8qMDBKj2s1MlCHbTY/RlFMQUxSV1RaVlp3anB/j4SBjoVuenN4iGK4oZqjiZWUlpOUk42Ql5KHh3uHgY2VioCEgYp6fIuHhn2KgoGLhJV9eHp1ZU9cZEdFTDpRZGFbXlNGPjtIUERaZFFRWVhaZ1pUYGFNU09FQT9JSkhFRkFAQz1FNkI+SEdLTVNaVF6Ur7i1urnJwLu9ysy7vcC7t7W8vLe+tbqyxmB1sqWxmp6rvqqlqKuqpKKytaCrqJ6Vlp6Yn66lp6aln6SToqews6iysry2wb3TycnTxsLFzMLKw8C+vb+7vLe0sLm3t8O6xr7DybCeuqqirI+lqLaJgH1wXmBgXFZgXWdlUlhhVlJWSUVGTktAPkhEPUtCPUJAPUY+O0hANzk2Mzc5PjQ4OTo1NzA0NS8yNjM4OTM3MzUyNj84QD5HS1JUVFJQT1FSUUpBOS8sLCwqKygoLC0sL1A+KC40OIB9PDJLiHE5PkNLRUBJTVBSTFFdZ21scZCNhZBzbHNyc4jVwLWZoI2VmZqRjpeRlpaOhod9h4ONlot/g3+DeHuLhId7i3mBioKXf3R9emxlcHZZXVxQZWViYGVkXVtYV1xNZG1VUm1uX29fWGdlVVlUSkRBS0tIRkhISEhCSTlEP0hLVFRWXVpck7nAub23xsC7ucrLu7e6tri5s7i1ta62tplkdamerXBeoq2cmKGim6Seq6WUn5+QlI+WmJeon6WfnpqZg6SdrKSqsK23sLy41NDO1s/JzNLMz87Kx8C/wsq9wb3CwMXExsq/yc+0pLuxtbCbrLm9mn54alxfW1hdYFhhYlFbYFNRS0NCRUZFPEBGPkJJQkBEPTpFPj1KPzQ3NTM1Oz00Njg5NzcwMjIvMjQxNjk3NzU1NTVEM0VMTT41MTAwMDY6NDc3QElPSjstJioqKC0uLyxATSsvNTRtiUkwSIl0Pz5CREBDREZLT0RSXFlpYG+XkpGUbmxvdHWHs6yhoZ+LmZyZjY2VkZuShYqKf4iHjJCMiXyBg3N7ioOFe4p0goqGlX9ze3lsbXV8aXNlaWxpZmpqaWBmaWhtWm10l62kvIeHZ1tvaF1aWVRISk5QSktRTFRRSExBSkdLUF9fYmdqYpe3x7C5s7u+trHEx7awubGwu6yzsaert6yNtqeenKeaTpuejY6glpGnmKWVipOTiJGJj5GRnZuhmJuVloeemaaarK+or6ezs9PU1NbRy8/T1M7Tz8zGw8rQv8rJy8nSyM3Nw9HSuK/EvMS6pre7xKKAbWJbW1xYX1dYZFlPXFdOUUNCSUVDSTtBRD5BSD8/Qjg7RD5AST00NjY1NTs6Njg3NjU0LzEwMTQ2Mjc4ODc1MzY3QzVCOD8tMCwxMzQ5PTk3LC4sMTtGTD0pLCguMDAwN0s/LTQ2VIhXMESHd0M7Qj5FQkFDSk0/VVlTZldzkJCZg2hxb3l5g6CqnqaXjZubmIuNlZGajn2JjIWOioqLkIh8hIJwf4eBhnuHcoOSi49+cXl1bHB4f3J7bnhzbGmAcG1jaW1weWl3fX7Lv8Lfp21jeG9kW2FgSlBSVU5ZXlBdXU5QTlRRVVRcbm53g3KWrristKiwtqutvcGxq7WmpbmnrK6hrLSkj7Gum5iYjJGUkYSPm4GNp5GciYOLhIqJhIqDk5WYl5SbkZuYmZmenquspKehrKzO0tXRzczS09PQ1NHOyMPU0cjO0tPT1s3S0cXS1sbBz8jIw6m/uNCcd21kW2BcVV5RXVpPT1RQTkg+QUdCQ0Y8QUI/RkU+QD86PT09PEpBNDU0NjU8ODg4NjY0NDEyLzAzNTI2NzY4NTMzOz08RT1AMTErLzM1OT81OTAxMDIyLTJFTzMpLzMuMzI9TjI0OEN9XzJBhnREOj09ST5AQ0ZIPFZSTU9bdYeGi3dtd3B9foChnp6hi42Zk5OMjJOQloV5hZCQjouKiJGHf4J7cn6Agod6hXaFk5GJgHB3c2xzfHx3fHOCeHFrgHJyaW9xenlze77Lmn6MsYN2coV3aGFqXUNaWltXZmRYZWtUWF1dYGNeY3h7f4uBmaqkpKKgoainqrG5q6a0o6KuoqSuoqexn4mmm5WTkYqSjoiClIlrlaKNmYSBhn6Rg4OTl62LlY2VmY6FkpCdl6ewoqCgpKSox83Px8HL0NPR1NLO083G1tPN1NjW1tjV19XJ1NrNytjW0cqtxMPMiXFuYV5dV1JYUltPSkdKSUpAOzo7RUNEPENEPkhDP0NCOzs5PDlHQzQ2NTQ0PDU2ODc1NDMyNTAvMjU0Njc0NTU0NDw+PUU/QTYyLy0xNjs9MDgxLzI1NC8tLjtSMDE3LzUzMkVEMjg+bmI1PYF0TTk5QEk8QUQ/QTtQTEZLWXCAdX5pc3lygomBnZWelIWLlomOioiOiI+AeIOUmYuNiIiLiX6DeHN7fYOHd4B7h5GXgYRveHBtdX92eH10hnx5bId2dW59doR1eXudtYw8QYrGpX6NfGplV0lDZWNmY2hqZG95W19maGtuaW6AhIiRjJ6foJ6Rl5ifpKSmsqSls6CipZ6hqaCisZyHn5KSk5GLjouGg4+EfpycjI2ChIV6lH6CqpWjjJKKmJKLfZeKmpGrs5iam6ecp73Dxbm2xc3R0NHPy9LLydTP0dXa19fY1NnYzdjbzsna2tLWv8zNtHV0bWNbV1FUUFhVRUZKSUVFPTo3OkBBQjpHRUBFREJEQTs/Ozs3REM3NTY1NTswNjg5NDQzMzQxMDE0NTU4NzQ0NDQ5QD5EQkM8MzMuNkZUV09RSkFKRj8xKiguQlQyOTI1NC83Szc1PGBiQTxzdlY4N0FIOj9DPjw5UUVDSlRsbm9wYnFxc4aNfJeRnYt+h5KCiYaFioOIfXmFl5eJj4OHhYd6hHlxenuEhnV6ho6NnXqMcH1vcHp/cnuAcYSHgG6OenV3fXyCdX98h4mwdFmqwreNkoFwbmM9XmhycHFwbnh3gmVpb3J1eHJ7i4eOk5KblqCWiIyTm6Cbn6qfoa2copqan6afn6yZjJqMkZOOhX2Ih4OFi46gmZOIg4d+bZl5hJmGiJOMjpWMhnubiJOPrqqUlZeemKautbyorb3Gy8jJy8vPyMPRytTW2NfY19Xb19PZ29bP29rR1sjVzJN2eGdmWVhPUlNcR0JFSUk+QT49ODo9Pzs+SD1AQkFBREE+Pzo4N0RCNzU1NDc5LjU2NjQzNTUzMjMyMzY0NzU1MzQ1N0VCRENFQjU2PEZOU01bbmZjbnNrYFY+LDRMRzg2NTQzM0JGND1XX2hMdXheODs/Rjw8Qjw6OUQ/Q0dSa19tZGJma3aAiHGRkJuAeYCOfoOCgoV/hHx9hJiOh4t+hoeAd4J5bnt7h4J0epKejaF2j3aDdHWBfXSAhG+CkIJvkoR1fIGFenaHfIm4xqXDyriClpyPeHBlTmVjgnqBd4aikIt5eXd7g398hHZtlJaUlY+YkYOJj5eal5emnJigl5+TkpejnZmrlpGRi46Sg4yFiYiBhpCRnpyZiYWLgYWXe4iJn5eQiY6Ki4J8oYiQi7yhmJOXmZyopqWtnqe1vsC/uMfJzc7FzcrR1tXU2dXX29TX2drb19va2djO3MaFeHdlZ2NeU1ZWVExLRE1EOz09PDk6PD45PkE3Pj9APUA+PDk4NjdDQTY0NTU9ODA2NjU1NDc3NDU2MTM4NTQ1NjQ1NTdISD1ESkU3OTI1O0g+Ozo6N0hQXFpSVVhLOVQ+Ozk1MzI3STg9TllNSHh4ZDU9PkM9PEA6Njo+PkBFUV9ZZmFdW2h0enlsiY2Sd3Z6inx+gH+AfYV7foKRioWGeoWIe3V9dW19fYZ+dH+SnpGfg5J8hn14j355i4pvg5uAdJmGfYKKhXx+kXuQqY6Qw6C9jJyknH6KhH2JcoyLf3OmmpyZlIV7j5GJhGlHcaGknYyLkJKFiIuRk5WPnZuTlJGXjYyVn52UoZSSjo6QjH6Qj46LhIiSlpqfn4mMlJGdkIKMf6aZiIWOg4aEgKSGiou4mJ2RlJaip6CdnZ2jrra6tKu/xcrQyMfMz9PS0tjS1dfA19jZ29ja2tnZ19u3d3Z1aWhkVV9aUk9OSENMQz09Pjk5Ozo5OTw9NkA+Pj09OTo6OzM3REA4Mzc4PjcwNjg4MzU3PDM3ODA0OTc2NzU1NTQ2RlA1RE5JODkzOEFLPTszQ0BJPDlEV048TVRITj85NjMzMz5DO1tYPjVZeXBaPDxBPD0+ODU4OT89RFJTUlheVVhmbW1taYGOinFzeIp7e399gHyIe317i4eDfnWDhnpzenRtgX6EfXeGm6GbnpSSgIyHf5iHgJySboiphXqgi3yRj4OJhJx+mpGJjaOin5Ckr6CLkYuGi4GShldyrYufrJyPg5ickJCOXIOikYKNn5OVjIeIjJKTjJSVlZCMj4qIlpudj5WWkYuTlIaAi4mSjYqKnZeZo6KGk52VoIqKiI6ckIOIj4CDh4WkhYuQs5ickpSXoaGemZKbnaexuKykvMHHzcfGz8zPzM/Xz9HUrtbV2NrY2trX1tnZnW16cmVlW1tWUlVWQ0BJRD8/Pjo0OTo7Nzo7OjM8PD89Pjc7OToxOkc9OjI3PUA1MDY3NzI1NT82NTs1NTg1ODo1NzczNUhSN0dPSzk5ND1FSkI+MUZDTEE5ODpHWEA1SFdJNjYyMjM6RUNlWD8mX3lpX3o+Pjk8Ozk4OjxAO0JRS0tTWVBUY2J4bGJ+koNvbXeLeHp/e4F9hnx7doaFgHNwhYJ7dXd2dISDhX1/kqain6ail4qdkJSXioqnl3KKso2Ep5KEmZSFmoyjlqCYk4mbnqKTqbCgkZWQjo6IlYtujbeEmsTIspyipZudmJaRspBkpM3IlY6Gh4mQko6Nk5SKhYqKhpaam4+QlJOHlZiEf4+LmYiOkKqXl6SjiJmelZqJj4aXmIqFj42Cf4aPpYiNk6mal5OXmaGYn5mTnJqisrSlo7zBvsfFxcnIycLK08zN1KjS0dbW1tja1NPazoBwfGVgW1xcTUlTWEFCR0Q7QT44Mzc7PDo4PTY0Ojo8OjcyPzk5MjlJOj42N0JDMzI6OTYyNjQ+PTQ7PjY5NDk7NTc5NDRLUTxKUUs5QTdCR0lANjRKRUxGPjs4OEVUQTc+XDg2MjE0OjtFYFhBRmF0aExjWj41Ozo6NTs6PTpFTUZIUldTUkJjgkd2gY99fG1+iHh6fnuCgoN/dnaAg3xtbot/enx4eHyEh4p+i6Ozp6Oqs6KXp5+lpJaVrqKDkbiVkbOajaGhjKWbsKOknZiRp5aomayvpJiVlpWQi5iZl6HAjqPJuaubo6atmZKbnbKdhYWoopyYhYmJjpWNi5OPiIGGh4mTmJWMi5SThpWYhoSRkJx1kZiylpekoYidmpKPipCKl5uJi5aOh32MmJ6JkJCcmpqTmJiflKCdlJ6boLGuoqS3vrTFx8S9w8O/xs3KydKmzs3T0tHW2NPQ2Lpwd3NaXlNeVE9ISU1FQkNENT46Nzc6Pzw8Nz00MzY2OTc3ND01OzU8TDw+OzxCQTc1PDs0Mjc3P0A2P0A3ODQ5ODc7PDU1T01EUFJMOEA9RUFHQTU6SkVORUQ6NkFAQlM+OURPMzIzNTc1PXZcPFJcdGlaTV1TPD04ODU2Nz06SkZER05bXFlKZmA7SISLenpuhYZ6fIR5gYaBfnB4fH59b3KNen6CfHiGi4mGhJKnu6yosr2vpa2zs6ijobCsipq1naK4pZWtpJeprbinpaOfmqmXqaOvsKqamZyUlZGXoJiau7uuyqFqtrirsJSZn6Osk5e9o16qsoOKio2Uh5B8jo59g4aOj5SViIiTloyQlo2LjZeYk52ZtJeVq52LnJSSjpGSjJmbipKekIuJlZ+hjZSNmJqdkpyYnpShoJScnaWvqKGls7irwsjEtbq9u8XHx8LRoMbJzc3E19bRy9OgbnhmWlhRXFBORUM+PENBQjg/ODg1P0c9PDY8MzUzNDU0NTRCMzk6Qk06QjtBSEI7OkA8NzQ2PEI5P0BCODc0Ojo2Pjw0N1RLQ1VRSjc8OklBREA0QUpITkJBPzZEQTxKTkQvVD0yNTQ6RUpcWEpaUW1ncHBEaWBLSTY3NTc6PkpAQ0lQZEdiYGJwSj+Lin6Bc4aHfYKJdYOKgn9tfH19f3B3h3eOgod7jY+MhoyZqsLAr73Gu7O0wLy0rauztoyos62tvaubu6Sorbm4q6emoqKkoqmvsrGrnZykmJuYl56ipqWSpLqvqcC8ra2yuaWlqH6IhpytvLCDjIyLkIOOg5GOeoGHkI2NnImIj5eNi5WWlJGal52omrGakaycjpqPko6VkJCWl46RoJGJlJukrJSWj5ScnZOhnZuYn6GUmp6npqSipLCzp8HGw6+wurbFxMK/zabHxMfDvNbRzcTKhnJwX1lXXVlMSkFLQEZHPkE/Qjs6NT5BPT01PDY+MzMzMjQyQTE3QEJOPkdAQ05DQT1DPTs4NkNDNUJJQjo4Nzg7NUI+NzlWS0RXT0Y4PTRLQEM+NEVLSE4+QUE2QkI/QlNFNThQMTQ1Ozw4O0Q+OUxqal07V1JkS2daVU83OUdEP0NGXGVHYGlnWl1ck4yLiHuHjIeDjHWGkYqBb357gX9xfoF7lXqSlJSYkJOVp7PGyb/CzMLDuce8u6+rubuYs7e6ssCupcGkq7C8vauuq6OjnqerrrSwqpygqpyhm5afsLWni6O6u7bBvKypnLKlpKmUhY6pxMOkgouPh4iEhpWUjXqEjZGPkaKMjJSSj4mXn5iTmZWYpqCunYyqnI6Wj5KRlZWNkJWRj6GUhpefoLKelJqUn6CYpJ+aoJuglJiepaOmpqSvrqXAxMOuqLe1ycK+ts+yxL/EvLPRycjCtHJ2allWWWhQTEhCTEtLSkFBPUNEPDVBRDs7Mz04QjMzMjI2MkEwNUlFTj5JQEhSQEg+Q0A7Pj1GQTVBVUA7OTk4PDdFPjg+VkpDV09HOD80TEBCOzVKS0NMP0I/PEJGPUFITDkrRzwzNjc0NjRBPzdPYU9hRS89PjZrbGpgQDpIPj9FQmVZTmVcZlRjapmNl4qMiJOQhol5h5SQgXKAfI1/eIeCgpB6jqGWqJqamLq9x8jJwdLJysLNvcKzrby+qLq/vbvDt6zCqayzvL6qsKqkpaSsrrOttrWgn6+fpaKYo7O9qZuovcGktrewrJOxraytl4eaqaelkYKMk6WViYF2ipF6hY2SkJ6fk4+UjI+NlaOZlpyUlKOeqp+RpZqMj4+PlZaIfI+VkpKjmpWfoZy1pZCel6WjoqWenaaYnpaXm6SjqaeisqyovMDEr6Wyt8y/ua/Es7u+writwsPCwJdqd2BWVVpZSUpMSUZEREhDQkFETDo0REg5OzQ8N0UuMTIzNTJCMjVTSE48SkJKUUVLQ0RFOkVMQjw3RVY9Oz04OT88ST86RVVJQVdRRzdBOks6Qjc5Sk1CSUBDPjxERzxCQ089MjBIMzY2MTcwPUI6PWpqSks1UVMzU3BwZE47RD1ARj5qSF9YYVpkZFaej52Ol46ekomKf4qgk4R4hX+Vf3+QiIqQgJahma6mpJjCvcfDx8XTzc7Ny7zCt7C5vLS9y7zDwba3vK2zwLq8rq+ooKmotq2uqbK3m56toqehnqu3uKqlsL/Fsb25tKiqtbSur5eWpayooJGOkrLFp5WOfZKVfYiSmZCqmZiTk4+TlpOlnpKdmZSho6KcmJ+Yi4yPj56IWpCWl5KXpZllmKOfs6WWoZasrKmnm56ml5iWl5WgpKiln7arqrq7w7Sls7XLwLiqtqyyu7muqLi6vbiBaWxYVVNTTURKUk1LP0FIRURISEg5NUVNOz44PUBKLjMyMDI1QzU1T1ZOPExGS1JMT0hHST5JUT86OElTOzs/Nzk+RExCQEhTS0BXUEY6QT9HNkE3O0hNQ0U7Qz00RkU6QkFCRzkvOkEzNjAzPkdEOTQ9dGRNRztFKzpmfGdWOz1AQkZCcEVpSVJlYkxGpZSbl6KXqZaNkIOHppOIgoeCnIODlZCQlI+aop+vvq+hxrzExMbGzs7O0sq+u7axuru7vs+1w724ubeysbWzuLOrppyrrLmqqaevr5ijr6SnpKW1wLCsrLS/w7rAurSoubW5s6+Wpa2urqSLk5WhjXTBmn2XmYSPlpqMsZWbmpWSk5qapaOUoJuXmqmcnKGgmYqNkJacYEqWnJqVmqWWVZewn6+cnqSUr66rpZqgpZSTmJiNnKCnopm0qaqzu7u7qrCyx7+5pqyrrbKyo6GysrSkbmtjWlhNT0pET09QUTtIS0lHSUNDPjpLVD9BOj1FTTA3NTQ0OkI0NE1XTzxKS09VTlFKUEhISk9CPD5NUjs+PTg6PENSPkRIUklCV05JQEJBRjM+NThKS0NBPUM7NEVBOkE/PkhANSpCNTIsPmNdZzozNXRkZUBSNyYjM31oVzs6QkNAPVFFV1NzYldGSKqXmaCiqK+ZkZiHi6iWjoiThZ+HhJ2Xjp2hm6Oktci1qca5wsPHysnIzM3Gvruzrrm5wcHMtce6wbm1urCvr7O1p6SbqrS1qqmmrayapK6lpKisur+orLa3vsK/vrm0s8Syub2so6+1rLmmiJuXppt2v5+EmZ2Ok5mai66XoZycl5WboKGonqefmZqqmaGnnpiQjZGdg252kqKalZ2inpCusqKqlKiql6qto6OfpKiRkZmbh5Scop6Wsaepq7m2vbOyrr65t6Cjp6ilppycrampi2BjXl5QSUtGR01JVkw9TUVOS0xCQ0Q8UVY9QUFCRE8xOD03Nz9CNzVUV04/SE5RWVNQUVVLUUpKRUFFTVE/Pz04PTtHUjxFRFFCR1lNS0FIREU6OjM5S0lCPkNCOTlDPjxAPjs7RzctMj4tMYJoTnpcLzBraGA8PUJCODZ6Zlc7Oj0uLVJgTVVIf2VeSEWrlZuhn7uvmZSfjJOrm5GSk4mrjYein4ykrZSjo7bGvrTAusLCx8jFws3Iwb65sq+4tMDCyrXFssG8tbqqqa2tsKOjmKq0u6appquqnamvp6Oqq768qK29tLi+x7y3trjBsr7BtKm1t6u+pY+imJKin7yfiZqgmZeeno+3n6mcpaKbnKGaqKSzoZudppyoqZ6ZlY+Um4uXiYykopSdop6hta+lpJOvq5mrqp2do6OokJSUn4KPnp6blamkoaGztLq1rai1srOenKKlmpeVmaqhnnVeWl1cSUdFRk1QSE1FR0dDU0xKQkVHQVZSREg9QUdRMTtCNzpCRjc5XFlLQUxQVFVTTVdSTlVKRUBKSk5POUNANT08TlFDPz9QP0VaTUpBS0RHQDUzPUlHPz1FQTk3QTs8QDw8M0A8Lyc7KkiRQjpTSjAsW29XNzE8Kh1CgGRUNDktMTlmXEZDQ5xwYkdFp5ekn57DrZuXpZiaqZyWm5uPqpaVp6aVrayZoqu2xMK8vrfBwsDHw7/Nxru9ubKwuLO/wsi1v7C8t7m3paSrrK2hoZqqqsWipKmrpp6sr6uiqai/uKetvrG4tse2tbm4wLK/wre1s7SvvqOXo5aUm5SuoJCho6Wjo5+QvaSpnqirnZ2gm6WfvaKZo5+iqauhnZaNlZ6TnoePhI2Tn6SgnrWspZuVsaeZr6admaqcn42YlJ6EjaCam5KlpJqYq7G1saqlqq2snJigoJKOkJWonpRmYFhfXE5IR0pOS0hFRElBPlFJQTxHSUhbUk9LPUhPVTRCRjk+SEc1Q2FbS0NOUlVXVlFYVFJVSUA4UlFQTTpHQTRDSFFTSUM7Qz5HVktDQE8+SzwwNjtHRj47RkE0NkA5Oj85OzE1RDAtLC9Ndlw0S1o1LE1uVzwtPSkeI3piUTVDS1E6bVJGPEt4ZWJWTKKao5yexayhn6yenq6gkqOflqWfpqqsl7axo6qztsTEvb+1v8K7yMK+yse1uLW0sLOzt8HFtr6xuLW4tJ+mrKqsnZ2epaTBpJ+qraCkqa2voqaovbWlsb25trbEsrS4ur+zxMG4uK6ztbWjnaWVkZShrqCZop6oqKujmsKtqZ6srZubnZmmoL2hnaSYq6uspqKZjZqfkp+Jjld/lp+loaC4qqaTmLWjn7Ggnpqulp2NmJOdgY6fl5WOoqOWkKausqupoaGlpZWVnZiLj5GSpJ6JX2JYYl9LSEpKTkVFQUdLPj1KQjk5SkpOXVFRST1MVlw5Rkk9RE1JOEhiXExDTFBTWVlWV09aXklBPVdRSUs/SD81SE1YU0hBOkBBRFBIPz5RPks3MDk5RkU7OEc/LjY+Nzg+NzcvMT85MSUxUVVtW0pPMTA9Z1dEMTc9LSt3YFM2U1prV3JHRTY9dWVcS06en6GZnsOopaK0op2yqJOrpaCjn62prJ27sKistrHIxcHCssLDvcbDvMTJvK+wtq2wtK+/xLS5sbC5tKyZqLCpqpqdpaGowaybrLCcqqOusamkqL22p7e7vq+3xK20s8PAs8e0u7ers7atqqKmlpWUpKyin5+aqKuwr6+7sqagqaiZmZeToqS4oKGkk6+vrKWnn5KhnpWej5CNlZ6aop6ntKamjJizm6OumZ2brJCek5WTmX+RoZWPjZ+hk4umrK+lpqGcoJ6SkpqThYuRjZydf19kWmZkSklMSlJCQ0BJSDs7Rz85OU9NVV5SU0o+T15dPUhQQkxMSTlNY1xMRUxSVFlbU1VPXGJIQT9aUUFIQUtCN0ZFTEtNPztCSEROQj07TkBBMy85N0NCOTdGOys2PDQ2PDM1LS80QDErJ1Z0U2VPPzEwNGJbTTIzPjA8dl1eP1tUXmVxQDg7SJZ3ZUE0n6OgnKDDqaSrs6GktKqWs6ynoqSyrK6pu7GtsLW0xsDEw7XAxL3JxLW/yMK0q7Wor7isv8Ozt66strmlmKqyq6qYn6aXrbu0m6ewm62grrSyp6u5s6i6tLiyucCqt7LEvrXGqL+vrba1qaesoZeXkaaloqKYmKWvuK6ytbagn6ikmpWVk6Sgt6KkpZavsbKnqqain5uam5aXqJ+gmKGer7KipoyXrpikqpeZnqSRmoyTl5mFlZ6UjI+cnZOLqKmqoaegmJ6VjI6Zj4GFlYiUnndiZ1xqaUxPTU5UPUNBTkM6Okk/NzdST11eUlZRQVdgXEJKU0hWS0g6VGRcTkZPTltXW1JQUVhdR0FCW1BCRz5OQzlIR0hPUD8/Q0lCTEI8MklBOTQxNzdCPjs3RTcrNjkxNDgwMi0vLjw2LSNCcWdzazIzLzFbYlozMzgwNnBbYkgwNUlwaFZDV0aMeWZDO6SjnaKmv6eor7ChqbWrnbqxq6OqtLaxsLm3sLe4uMS9w8e9vMTBxsC4wMXAuqm2pKy7rMDCt7eprLG6oZStsa2ylqWnkaq5qZ+msJ2roLC0s6qptratvK2zs7m3rLiww7u+v6bDq7C3rqmrq6eemJmroaKhkZehsa+zrLC5mpypoJmWkpemobappaOisLG0q7OorJ+boKCbnaWcopedo7Owmp+Pk6Wan6iak6KelJeIk5aSlZack4iQmpmUjqiopp+jm5ebk4aOmIt9jJaFjZlpZ2tgbG1XUFFaVEFCRVRAOztIQTc6WFBkXlBWV0VZX11NTFJOXktKPlpjXk5IUE9cVVlQS1RXWkk/RFhQREY/TkA9SUdHUVBCPURGQk0/OjFEPzc3NTQ3Pz05NUU0Kzc1LzI1MS4tLiwxPSonKz1ccD0+MS4wZFpkQDE2NDdnWWBGKD84bH1nW1Y7iXtjQz2on52iqr2iq7Cro7G4qqW2tKygrbW9rrO4u7q9trbAwr/IxLnEwsDAuMS9wbevtaert7G7vr60qK6xtp6Wq66orpemqI6nu5+krLOerKKxsLOsqra0tb6usLG1rLC1ssG7xberva+xuKytqqOxpp6lqp+kmJCZn7Oqs6uqs5qdp5ualY6gpqW0rqehra2usae0rbKqpJyfqKOelaGZm6i1qZaZkZKemZ2fnY+rnpaXhJSWip2YnJOJjZaXmpempaKgnZWVl5N/j5SFe46SgouVZGtxZ29xXkZZZlZEQk1YRFo5SEI2PlxRaFxOWV1HW15dTk1SWGRKSkNcYl9QTE1OWFdYUEpWVldMPUVVSkVEQU1AQUZISFFQQTtGREZLPTg3Qj02ODcxOT48NjVEMCs4MC8wNS8qLC8tKj0sLCUyKyo1SzEvJ19fYFUxNTA9YFZeOClDM1lUXGdLNox6ZkxApJqhpKy2pa2qpq+ut6qvtbunprG3xbext73BwrW0usS+zMa5wsC6vrnDt8C5sbSrqbq2u7m+tKmtsLWYmKesqqybq6uPq76erK6yo6ufsK2zrq62srm4qq6usai1r7S8vcqzqra1sbSwr6ehs6CbqK2gppaWmpqyoq2gpa+XoaSampKOo6aos6mhprOsqralr7G1r6SZna2nmpifmpmrt6KXk5GOl5yhl5aUq56akn+Sl4ydnJmWkIqUkp6ZpaKhoJiWkZOVeYqPhXuMioKJkWptd211e2FFYGtZSUhaWj17SkZENkFiVGlbTVxhSltdWlJSUmJhTEtFX2BgUUxJUFdWVU9HV1ZVTjpJVklIP0NLP0VESEhRTkE/SEhIRTw3PT46NzU2MDk/ODY2QiwtOCwvMDQsKCwvLSo3NikoOS4kOks1LiJUYFVgLzUoQ19RXC4qQi9KR1BbSDNjWVVLRJmXobGosaqtpqSvrrapt7W6pKy0t8m7tLq6v7+0s7fDwMzIvMO8t76+v7e+vLG8rae6ube2wraqrLC3lJanrquoo7CqlK+7pK2xs6eoo7K0sbKxtbG4s6muq7Knt6+2tMTGtqm2tqywramno7agoKexoaSUnJmVsZ6nnKCqjqminpuWmKampbino7K1rKiyp66xtqylmaCsqJucnpyUqbiclI6OipibopePmKWgnJSCkZWPnZuXlpWIlo+Ymqeco6CSlpGQlXWEkId7hIGDi4psb3Z0e35cS2VtXEtOY1w/YntHSThHZ1dlXExeYk1YWVdUV1RpXU9PSGFdX1BKSFFWVVJLSFdVVk04TVpORUBGSz9IQkNLU00/P0xPSEA7Oj47NjswNDE8PTQ1OD8pMDcpMS4yKSksLC0rLTkkMDQyJTlCNy4jQU5IZjI3J0diTFYlLUItPUVMUTwzcmtJQ0OQmaWupa2vq6ilsbO0q7eyt6CrtbnJua7Au8K4s7G1wsPOxcDBvbS9v7+6vryyxKepubC2tr+8rquysZugp7GtpqWvpZ2ytayrsbKtqqm0u6y1s7WttKyqq6isqbmtsrHIwLilurCpra2lqK6wpqWjr6SpnJ2cm6+ao6Oio5GsnqOgn6Kqpqa5pKy1tqWrrKitr7auo56jqaqboJqakqSzmY6JjYeQoaCUjJScn5KRg42Skp2al5WTh5eSlZmnm5+ejJKRjZB2fY6FfHt7homIcHJxfXx9XFNkb15OWWZcRkSWW0c7Tm1YYltMYGJOVlZVV1RZZ11RUkxjWlpUS0dPVFNOR0lWU1xOO1BeSUJESEpBRT8/S1NPPjpOTUM8PD45OjU9KzMyPTYyNDk6KDQ1KS8sMSgpKywtKiY1Ki8mMCkzODoxJiozQmM7NipIZUhKKztIPzNCSFMsPpBrO0dIj5yqq6KqsaSppbO0sbW1srKiq669zLquwLrHsbSttMLD0cXGvsCzvsHCu763u8SnrLess7i8wK+rsayfo6etqqiksKSqsqqvrLCvsK6rs7ynt7GyqbOpq6Wlo626rKqyw7q2rbupqKitqaiypamko66qqKKenKOtlaWemJ6ZrJ2ip6miraakrau4srKhqaKgrK+xrJ6gp6ipmaSZmY+gppeGhI6Ki56fjoqMlZuOjYSGkJSfnJSXlIaWlJOXpJucnIqSkI2Jfn6HhXx3foWEhXJxcIh1a19aYG5jUXNxXEs7hHxGP1d0WGFaTmNbTlZWVVdRXGJfU09OZ1hXVktHTE5SSEVJVlJdYzxQXUQ8RkhIQkc/PUpQTDo+T0o9OT89Mjo3OyoyNT4xMDQ4NSg1LyosLjMwOyksLCclMjM0JCwyLTg2MCkoMTxdSjAuSmdERjg8QjA1RUtYMUCVWj5MRZWYraiiq7Ocqqqwtq25tq+rpquqvcm7sL23wq+xrLPEw87Pw7+/tMDCw7q/s8jDq663rbK4v76yra2rpKeqsKmnqLGltK6qsK6tsrG0rLS8pbizrayup6ufo56wt6uqrbu3pbe2pKqnrKuqraGpp6axsqSnpaGhrJeqoZWboKaepKKqpK2jn6exuK6uo6aim6qrrqmdoqWkpJmgmpaPmJySgYKPiIWcn4uKjouYjY+KgouXo5uRkJqLk5KRk6OZm5qKjouLfIaBgYN6dH+CgHxydYukh3hqXmBuZldlh2NOP2eTTEVieVdiWVJlVE1WVVVUT1xdYVVLTWhWVVdJSkhJT0JHSVNRWW9BTVhAOkpHRkVHPj5FUUg4Q0tFODdDNzI6OjoqMzk/Li80NjMpNCsqLCsuIzQuLSsmKCs3OSomNis8LTIsJjA2V1ouMEpnQUE8PEIrOkpPXjREhj5IRkSXkrClo6uxmKuqrbastrKspqyqqbzAwLi4s7u1prKvxMnL0b/Bu7m/vsG4wbnAxK2xtbGzur+9srCtrKqrp7aqpq2vqrmwqLGyrrKtt6q3t6e0t6uspKmqnKOes7OoqKS0taC3rqCqqKuoq6egq6ypubapqqmpoqqgrZuSqqGdoKSipqOqnp2ntK+opqqio5ilp6eqnKOko6CamKCRjo+YjX6HjIeDnZ2GhIqKjY2Pi4KFlKKajYyZkJKRj5OflpiWjIuDf3SHgX5/eHSCfnl2foCHnY9vcWdncXhcYXOIa09emVZIbXhVZFZRY09NVVRUUE9YW2JVSFBpVFZTR1BZVUk+SUhPUVB4TE1WPTxLRD9AQTxAQ1VDOUFLPTU7RTEzOzo3KjQ6PSstMzQxKjgqKisqLCkpKC8qJiklMzssJDIpMjAyMSUvMlFiMDI/Zj1OWD5DLD5MVF8vSmk1T0Q7lo6xoaarrpqspa2wtLWwrKawqqm6vrvAsK65rqG3r8jHyNHAvr27vMK9usPAvr+usrKxtby7wbGxsquzqKS0qKWts7O5saOut7Kwsruruq+qrrasqp6qrJ+joLatqKGfsLOitaqeqKeqo6qhoqytqL2vrK6soqiooKyZkLCimKKgp6eep5uZqrGqo6CtoqGUo6Ojp5iaqaWYmJiejoqHlId9jIaEg6OWhIGBi4aNjJCDg5OgloiQnJCTkI2RnJSXj4qFhnh0gX98dXh5f3pzc3lnf4akdWleZGuAdGeIjH1TWHBeSnhzU2VTUV5NTVJaZk5MVllkWEZTaVJRP0NOUWFROklITFNJcVFMUzs8ST87PD07QEBXPDw/SDczQ0IxNTo5My01OjopLTMxLS01KSgrLSw0MiMyKScsJS47LiYxLjAtMTQlLDBMZzo0OF89YWQ/RjFDUFtbKkhNOVVBNJCPsqGkpqykp6Stp7WzsaulsKequL7AvK+nuaqmr7DJx8jRwry/vrm+v7zJusC4sK+0sbq7t8Cys7usuKyitKenrLK2ubOoqL22rra+sL2nray1rK2cqa+koKWtq6ecnquzpbSom6unqaOpnqSpqKm9rLSvrZ2qpKGunJuzo5WknKWln6Sbmqmrpp+bqqKbk5yhpZ6Yl6mpkpialJCKgo+Ffo6CgIedj4V+fYuHkI2PhH+TmpOFkqGMlJGLkZuSlYeJfn9ye3p+fGh4fHp0b3B7Z4R4hIhkYWdhcYR6bWd4XV1VQFd6bVRhUFJYS0xOcnVdSFpbZ1lFVWZQRD5KTkRDQTlIR0tTP2phSlE4PUg8PDw+Ojw/VDY6P0M0NUg+Mjs1OTAyNzw1KC41Ly0xMScvPktIMCUaOTAlLCwwOS8sLCs2JzE3Iy0wR2pJMTRYPWZjQUo3R1NgVSo9OURXPiqPlLKaoKCppqWhq6W4s7OmqrGnrbjBvbWvoritqKiwwsnJzMG2vcC1t7+5yLXCtbOytbK8t7m9ta25tr+tobOnq6uwtbi1rJ++vaqzwbS8oa+ztaqrn62wo5ylqKqjnpulsaewoJ+rqaihqZykqKGtu6iusK2gq6Okr5+fraaXn5uho5yfnJqkqqObm6WklpeVn6KWm5emrIyekZGRi4KKgICOgHuZk42IfH6Lho+Ni4qDkpiRhpOiiZKSh5Caj5OAiHx5bH52eXhje3pxb29xdmeAc2qDZ2RnX2xyjWxhaW9gbz5aeGtVXk9RUUpJTVRZV01dXmxXRFhgT15QSE1ERjs3SEVLTzxyaEtLOUFFOzs9PTs7PUo0OUI8MztHPDQ/MTgtNjg7MigwOS8sNC8uPS0qSz4qHTQ5JicuMzQuMCsvNCYsOiQ0MUFoWTEzUz1lX0RMNktWZE8qOzJOWD0jk5mtmqCYp6Sjn6ikuLCvo6+wqqu4wbmzrZ+4r6uotLrIy8i/tsK+sLS9t8S2w7GuubKzv7S7vrepubi9q6S0qKmqsa66saucvL2lsMG1tqKvt7Wmp6exs6CepKWnoaWZn6yoqZ6gqq+noKaYo6mgsbmfo7CvoayhraScpqepmpqbn6SVnJ2anqmml5ygqZOZlJiek5mWoaqRmoiOj4Z9h36CjX18oIyMiHiCi4SJi4uFh5Oaj4iVnoiRlYKMl4yRfYV7c3B9cXR0YHl4aG5wcG5ofXFje21pZWJeZIV+X1pyanFLSn9oWFpOUExKSFBSUElOXF9uU0RYWlJoT0hLRUY1NkhCTEk1WmVKQDZFQjk6Pj0+OjpDNTk+OjNARjwyQDIzLjo7ODMmMjwwLDg1QiopLUMqLDQ7Tk5AOzczLS4rLTcqKjwlNTM8ZmQyNE0/ZV1GTz1RWmdIKj4wWFY1KJeep5qdlqygoKGkorirsqW0tKqpucO1s62ft62urbC1xsjBt77BubG0vLa/u76vqr2ws76xvMK5qbu6t6eotamoq7Gts7Gom764pq28t7KfsbiwqKWnr7GboaSgpKSgl5uvp6Gfo6ivoaChlKSkorewoaawq5+so6+YnKqlqZ6Xmp6lk5udmp2mq5qdnaaXlpiUnY6Tl6KoopCIi4+FeoR+hIp6jpaJjYZ4gYeDiIuNhY2TmI2OlpiKj5d+hpeLj3mBenByd29vdF95d2RrbGtoZ4JtZXJra2VoWWFzf15aa3VpWUd9XVtYT09KSEhSVUYyOl9ebFBEWFZZZUxISkVFMDdGP0tCNklKSDs2Rjk0OT49PDk4QDg7ODo3QEk+ODw0LTM8PDc1KDU+MSw7QTEoKzY8IzhSPSoxMTM+RDUsLSc0Mis7KzEzOWNsODRHQmdbSFRDVF1oRS47MV9ULDKWo6KYlZ2pnqWho6G4qrChu7mmrL3Es7CuorWvra2vtMTEvbO+urexs7m4uri6rq2/s7S4r7/BuKy9urSmorOrqKqzrK6yo53Ctqapt7ern7K7qaalqK+rmaKnnKWmlJihsqaZnqWpqZyhoJSln6S5qKSnraaepaGok5+poqGhmZudoZKbnZegoqucm5qilpOVlpuOk5Ojp6SPiIqOhnmEfIWGfZyMiYqGeICDh4iIkYWVk5KMkJWTjY6Ue4KXjot3fntsdXJtbHNieXVoZ2lnZW2EZ2doZGZoaV5mYmlmWmV6YmBRc1RbW1NMSUdJT1NAIStqXmpMQ1ZVXmBLSEdFQy46QjxGPDZLUEQ4OkQzNTc9PTg5NT86OzQ+OEBMPT45Myk4Pjw6OSo2QDMuRTQoKyw+MC1OPy4rLTctMTE5NSwmLjUtODA1NzZgdEIzQ0RoW0tXR1VgaEIzNzhiTScynqSkko6lppyenp6kta2oqrq3p6zDwLevrKG1rqeur7fBwL2xwbewr7K2tbi3tayqvLSvsrG9wLeuvLyxpZ+2rKamtaqrr6GgxKyqp7G0q6y0up6oqauxpZieqp6opZKapq6jmJ6lqqGbop2XoJ2ntqavqq6hoZ2doZWgpp+ioJmbmpySmp6Vpp6topiXn5aUjpWYjI+YmqegkIeKioh4hXeCgoKch4qCiXt+hIiGhJCElpWPj5CRkJGNknuDlY6Gc399Z3lwa2psZ3Vza2JnZGJ0f2FkZWZlaWliZ29ZXlhdbWRgTWhXW2BWSUdIS0xSWD45YGxpR0JVU11bSUhGRUEuPD85QTg5UkZANzpCMDM3PTc2OTI6PDk3OjlETj1CPDAqPEA7QTwtNUIzNz0rKiwwQSpKSy4vKiszNzIyKDU3JCs3LjcyNjg1XHlOMj5IaVpMWkpWYmZBOjNBZEclNZykoJGMrqCamKCXpbSyo7K+t6Gxxbu5sLGjtqyrrqm5vry7rcCyr6+utq+zubKnq7mxr66ztru2sLm+rKWetaugobGlq6+fpcShs6WvsrC3rbWerK6srqKZnaeqpZ+VnKemoJmko6mcmqCclZyerbCmuaetoqGamp6YnqOapZ2WnpiblJqhkqiWramblJ2ck4yVmY6UlJinp42NiomOe4F0goKKmIWHfImIhISKjIiShZOckpKPkJGWjpB/gY2Ng2+Bf2Z5bmhramdxcmtbaGNhcn9gZGdqbmtmamZkbFxsbXZxYVRiaGNlWklGTE1PWFFQVWFlgVRAVlNZVUZHRkVALzw9Nz82PEZOYTg6PzI0OUAzNzgyOD83PTg+RkpARDkyLT1BPUE9MDVAOUAxLSsuMzw7SzYvLissLTI0OzYjMyopNi41NTQ2NVp8XTE6S2pbTVtLWGRjQEExSWRCJzSTopyPjrGdm5ShmqmysJ+5wLagtMG7vbmxprawqa6lt7m3uKy7r62rq7eqtLmtpbK1sa+psbe2sbO2u6epn7apnZ+qo6qtnarCma+lr7G2taysnrGtr6qim52krKmclZynpJ6aqaOllZqgnZGco6uqqbqfpqSgmJqanaGPa6KVmJxxg5acpIB2kauonpaWoZGJl5mAl4qfj3iFk42DbWl+d4RybIaKhn2EioZvXWRgZ4SXhmuLkJSSdXeLhH+DkIBmiIBodmlmWF1pdG5OUGpjZnGCZl5kZm5raV1dXomQhYhoT0tEOEVUZ15KSFBQVVVLSFNgb3RlRVtRVVBGR0ZDPjE7PTY9NjwzZlw1Ojw3NTtENDg2MDpCNz86PkZMQ0IzNDM9QEBAPTI4QEU9MSwsMDg+RzcwMS4qLiovNjY4LCMxJzIxNDoyNzZYgWwxNU9rW05cS1tmYj5HMU9iPCsvjaSah5Wxm52ToJyqraujvcWvqbfCuL28rae2saarpLi0srOwua6qp6y0pbC1oqe4trWop6y2s660rrOiqZ+0q56ipZynqJuuvZWop7C0uK2upKitqqumoZ+coaionJehpqacnKeonZKeoJiQn6iqo7Svo6KjnJaYmJejiKGPkpqGoYiUnqF/pX+nrJ6Uk52TiINyeIyOg4egdYiNaZeJZn5zeaBviIeDfox8f6Ggn5l/e4eedIiOdpuKbIeCg25pZWR7bXJiVIZtY21pmHFYaXBuhlddaVtralqIcG15codph4RaXkZOPkZeTUVSVlZRUFJXVGddTFlLUlJQRUdHPjw0OT05PDc7MDw8Nzk5OjY9RjU4NjA8Qjs8OT1GUUc9LjU8O0A9QD41OUdBODIqLzE8STkvMDEuKi8oLTQ1ODMlJjIxMTU+MTw4WIN0MTVSa1tOXExbZ189SzFVYDcvKI2ml4SdrJ2ZmZ2fq6qoqr/Dr7K5vLfAv6qkt7GqrKazta6vs7arqaWxraW1s5ustba0pqeos7Gtsqiunqqhs6mgpKSaoqSdsLeVpaant72mrKepqqunpqKgmaCopJqZp6OkmZylqpaTo5yUlKSmpqG2pKOgo5iVk5iTnIiukJiViamLmKOchrGApK2elJqflXmC1Kh/h5TAm8Z4d7Glt5ZkgMCcv3mEhHmPg3yQkJHKcZa8nMV7cranupB7gWyXsauweWhsWLGub2VpvJK8bmh6bXCP2H5Ta2K2sn6AcZR1mqGqkFdPWGFPVk5GVFtYUVBSi1xXW1BAXEVRTkRGSTw8NTc9Ozo5Oi49Ozg3ODs5PkY2Ojc0PkA+Njk/RVJJOi41PjtCPD9BODpKPjUyKjIyQkUvLjMyLisvKS0vMTg2LSAvNDE2QTE9OleDdzExVGtcT1tNXmdcPkwxWlw0MSGOppOBp6qfl52dpa2yqbHCvbK1v7W4v8KrprStramor7Sqr7a0qKimtqWoua+csrK2qqWkp7KvrrGmq56npLKkoqGfl5yhoLGulZ+joLS6oqqooKytpKKdm5qiqqCYm6mgn5ieqKiRnKeblJ6ip6OhsKOen6OWlpKYkpmFsGtqi42qfmeFloetZXGenZWap5ZxrqGkfne6fGuhj3axX2q0W6WAZZyRYGaBemZ/aXhqqWW+cmemjHaxanyxeHWSlGNtbaduXISgRWlnh5ZFdZxgfWZ7o6aCWV+Lq2mAknh6aqg4Sq9bV1RtY1pMT1hfXFdWO06IT1ZWL0lUU0pDRUY9PzQ2Pzs4OjkwPTg5OTk6PTxEODs6Nj1BQDY8QEhRRzkwNzxBQz5ARDhARz0xMy0zM0UzLi41My8rLyguMC46Ni8nJDIwM0IvPTtVgnYyLVZqXE9ZTF9nWTpNNV5ZMzEbkqKVgq2npZ6jpKqxt620vb6wt8WyuLrDp6mwrK+pqbGvpLG6sKSlr7OjqbmpnrOysKOloaqtsKyvpqifo6KxnKOdmJWYnZ6vqJecop+0s6Gqm6GsrJ+empego6qdmZ6loZyaoaekkJ2jm5ihoKyfpqagmp+hlZWRlpGahrWbtXmFqZm1mXeHs5u3f5OWl6uWfmuBpnqBhYaRlJJ3q2dqsVuse46HlHSIcI6GgX+IkJd4g4KLl4yDoI+FsHZ3n3Framx8i0+lWEhjY5l+Y2ilX3lxdVKSh15QqW1jcX2GgGGdL1KibltUa2dgTEtcY1hcWkI+sHdXWEEjTWhGQ0RBQEExOT44ODo4NDs6OTw5OkE6RTo6OzY6Q0I4PT9LTkg6NTpBRkJAQUQ8RkQ7MDIwMTtGLDAuODQwLC4oLzIsPjgzMR8vMi1EMTw8U31uMytYalxPWE1fZlc3SjhhVTUwHJeflIizpqahrqmos6yqu7bCsLzCrbi3wqusra+up66zqqKvvKuip7Wto6u2paWys6ijoZ2nqrKosKimnqCgsJagmpaWl5qgr6ObmqSota6hqY+pp6mbnZaYoKapm5+do5+coKOlo5Wbn5ianqOrm6WanJqioJaTkZOTnYTVk5m5cbDCf8aGfNaUnLt8m5amkI2cjKR6jYaigaWCeqx5j51Wr3uJfp9quVq5d4aDfaaCk3yYeqp5jp2Qe7FtjoR0kLuFbpVQr6fFilGgemNgqmJzcoZsl4dfU7W0yIWAiXxjpDNCnXVdUGpoZFBAWGZZZGFKSE1rSlpTT1lmWkNDP0U/MDw8NTk7NzQ8PDg9OjxDOkY6Oz42OkBDOzZAT0xIPDo8REhDQkNEPEVGODEyMTFEQi4wMDQ4MystKS4zMjM5NzEjJTUqPjM9PVF3ajYqWWlcSltQX2ZUN0c6YVA3MiWcopOZsaippbOqpbSnpLy3wbG6wLK2tb20tqeysaOxs6agr7apm6i6rqOwsqGytLGhpJ6ep6mxqbSppZyenqyXmZmXl5aYoqyem5eprbCoo5+OrKKnlp2YnKGmopiioaOhm6Kip5ueoJ6VmZumoZymlJubn6CYkJKVkJ2Ism5otXGriHCOpnK0dHO2e5uYpY2PnI2ifo+fpH6wdYOR0tF1W658hX+kb5uqpmuGhX2tfZeZj3uxc5Odj3izZZZ0hZ5unmaUUsmLWsJcn3liX61fdnOGYpeIXlnKnW+/gHVNS7VTVcZkVFFqY2VYQU9qX2xpUFVGSTk9V1JbVllIQj9KPDI/OzU9PDU2Pjs3Pjw9QztHOTtANzs+RDsuQ1JKRz4/PElKRkNFRT5JSToxNzQ2QD4vLjI0MjUyLSkuMjYsNzQyJh82MDs1Oj1Qcmg5J1dpXEFOVF9lUDVHPWFNNjIuop2Rpa+spam6rKa1pae2u7yyu7+4t7W7u7SmtbSisrKjoKywpZinuq6ksrGdtLiqoKWdoaqksqisqqWanZupn5aVmJmSk6OqoZiTp6uwpaKWkqyfpZKUoZykp6CVm6enopqjn66aoZ6ekJacop6cpZSdlZminpWZlpKbhax7d6h2o4+Lh6lvrYqDp4SamaKKkpmLon6Rl4euhX+Cs1xys1KufYKCpH9x1313hH6PnYaZmnevhoqRnIh3tGGaZZqCgZVskluwV0uadZh5ZmCtXnZ3h2eYiGpdr3eVn494bDV5yK6yX0JUb11nYEVQbF9wbVZVTS5lYmhTWVA7QURATDo1PzkxPjwxNj85OEA9OkM6Rzs8Pzo+PkU5LUVVSkVAQzpNS0pCSEc+R0s5Nzw0Njo+LzA0MzMzLjIuLjE4Ki4zMiUhMDM3Njc9UGtlPiZWZ1xAPVZfY042R0NgSTo3N6CdlKC4sZizwayosqeqsrq4tLm+ubiztr62pri0oLWtoKCprKCVp7asqLGxq620pJupn6CoorWnpqqkmZ6VpaKUlJyakpajp5uUkKetr6WhlZipn6KPkaKaqaahlZqmqZ2dpJ6tnaGcoI2Un5ueoJiYnJaXoaCUmJGmnYapfX2leaGPkIOqcK2MgaaGlqCiipeWiKOBkIeUqnt/i515b7FaqIOCiKB5dNh/dod0p4GOm42SpHyWkJ+Ee7JenGSgfYKUbZNcq1xbk3+Rf2hnqmNye4BqmIZxXataiaCPa25lT0pDoVxaTXRdYmZNWmFfcnRfSlU1SpqSWEhFPUhGQU0zNUE4Ljs+MDVBNzhAPDY9PEY/Ojw2Pz1CNy5IVkpFQEg2S0lOQElLQEVOOjpANC47PjAwMjE1NCsqMDUvNywmMjEoJCQ2NjcxPFBlZUEmVWZbPzFUX2JMN0ZJX0MxPTeinJqav6yYs8Kuq62oprSwuLG2v7m6s7K4vKq7taCxpZ+mp6eflKqxqbCqtq2qr6GYoaCmpKS6oqOroZebkaOglZWfm5WYoKCQjoypsK+mnZebp6afjZKkmKisqJWYqaien6CkraOhnqGOlaGYn6CSnJeclZ2hlZaPq5uPrm5ytHSpjHeKpnO0eXS0gZOlo5OcjImkh451uG+Me4uia2u2WqGGZZeXaaCip22UcrR0k5h/smqGkoita3WzYZ1mom6GkmuXXK1gTqF8h5FSc6NseX9+bpiGcFyvVjycd2ZUb24uW6dPYlJrZWJsWmJcYHB8Y1NZUT4+bW8yQkJAP005ITdANi47QDM3QzU4Pz8zOzxDREJKRk1JRjYySlRLRUJKNklKUD9IT0NGUD08RTUwOzswMTAvNzUsKywzMjYvIzAwLCwdMjg5LzlOYGVEJ1VkWT4vVV5hTDVGTV45MUE4pZqbnbuinLG/rq2rq6e3qbivtcG1vbKwu7irwbaqq6Gdp6SinZKrq6e2o7Oorqqhl5yooKWruZ2jrZyWmZClo5aOnqGcmJ6fkZSVq7avp5mUm6ypl4yUppqlraORl6uypKCeqKuwmaGikJmil6CblpuXoZOcqZ2UkKqZh9OTmrt0scSAw4Z91ZabuHmJkZiNl4mMp4d5orZ1fXd2woKasmCDunnAfHW4YrWBjIepfZaBrKlxe391vIinoGmdYaaOr6J+jHSHq32+bnO8dLKDdXiAim2aiHFtjaR0vV13fVthebxqWlZbaXpeaWFkZmJteW9ZW1lDQUByP0NHKjVIIic7PzEwPD83OkI5OT1DNDxATlpeYGBfX19aUFBSS0VGSjRITFJASk5FRk9CPEU4ND05MDIwLjg3LSouLzE4MCItMSwzHiw8OjA4TFhhRidUY1g8L1ReYEs1O0xbLTZAOaeZn6K8opexwrCtqaqssai5r7fFsbuzr7ywrsGyraajn6ShnZyRqqWqsqS1p62koJaaq5mnrLmdo66ZlaGQpqCTjZyjnpiempCWk6+5sKuVl6Onp5SQlqWdpK2fkaCoq5+cn6mksp6ipI6nopShmpyXlaSYj7CgkpWpn4WQmbaAkZGNuJV4gpObtXdubG5zb3mPhI6Jc57Bu7yZeoGyqHCAdJG5g3yGhouHjXuKho2XfKS7ub2cdXmzo3R2l3V0sHWYnmaGaY22dHJwd7aMXn95fYhng3lteWKLrHB0hX9YW6dpRGRZVGZfY11jUWZmcW11Qk1QTUQ7Wkw/SjM8MCA4PjsuMz1BOTk/PTs8QzZCU1laWltbWlteYGJgXVNHR0g0RElUQUtOR0VPRj9HPDc/NzA3MC85Oi4sLy0qOC8lJjIoNCQoPjcvN0tUX0cnU2JXOCpPXV09KztWVic9OjymnaGhv6aWs8K0q6qorauqu6+xxq+1tK+4p7W5rqukoqefoJ2ZlKykrqqmtqion5yWoKOdrKS+p6Gql5WckaKbko+hqKGTnpeSmJSytbasmJ2kpKKLkpKmnKWrnZappaacm6Kpp6ajqKGSrJ6Xop6Xl5idno+wqZOcp6KPa35pnKh5iXN+m451emWHe76/wLpukoJxlYVfcmpaXZqJYWSHjpVrYH+VY22cdmKUa4CalZRlXl9jcZuJaHKMfIaUZmp+cXR5fn1iW3h0gWhQXG6DfHuKalhseYFySUpvhXBOc01EVlxmYUxbV2ZjXk9abXZqclJPREVNPEhJPE0/MiwyQT84LzU/Qzw5O0A7PUM+UlZWV1laW1tcXWBhYWFgXFVHNURGVUVKT0hGUElJSDs4PTUxOi4xOzouLy03Nj01JiIvKjIsJTs4LTdJUl9JJ1NfVjQpUF5MKDM+W08nPzI+qJ+oocGkmrS6tqOspq6nqLWyrMissLSttqS+sbOnoaSqnaOcmpqsp66kpbWqpJuYlaKbpq2pvqiopZWUm5agmpOYpamnkZ6Qj5icsLK+rJunnaeiiZORqpuopJycrJ+jmpujp6yin6qimq6blaaglpWdn52XsaWZoqiZnJGenKOlmqejmp2ampqQloJobn1xdpGXlJGDibSpjYWYlY6KjJiWh5OVioOTk5CIjZGUmZOZl5qgoZqblJ+bjYJ6pIVsaXuQfYB1iYuCcoJ4eXZ1ioB7iWpzgXSDdWR3fXZrcHpsX2Jbb2dMWFllal9XWXB6b21mU09GUjlPWk5STygrO0pCNjM1PUBBOTpDPjxFTlNTVFZXWFpaXF1gYmJhX15eW1RLQ1NHS05ER1BMT0k8Ojs0ODksMjs4MjApNklSTzgiKSsvMiM0Oyo3Rk9bSidSXlQxMFReOis9OF1LLDwtQLKgs6K/oqOxsbegqaazp6WwtarJq62yprWmwKi0oZ6lppyllpagq6eso6S3rKCZl5agl62qpsGfq6SWkpyXnpiUlKKenqOokpCZqKeyw6+aq52qno+Xlqmeq5yeoa2YoZudoqWvpaGkqJ6rmJemnZmaoZ6enLChnaKnlZiUmZSho5akn5ihjpaUi4qNj5etj3uVm4KRgImpqIWAmJaKhI6fiHuDkIaFmpGHhomVjpuXjpCYnqOWmZKQnI1+jWWhs66EiYR3e4+Kfnd5em9neZCBgIlrdYF5iHJpc395dYOHgWp0Y3hmX2hkY2Rmalhre3Fqa1xTTFBEX1VGQD8/LDRARjs0NTs+QTs8Pz4+SE5OT1BTVFZWWFpcX2FjYV9eXV1eXVhWSktMQklPTVJKOzw6Nzg2LzM5NjQuKCYkLTEuLikrKjclKzwoNkNNTEQvVFxRMDVNWzE3RTRcRzU8LECzoLmvvqyrrbGyoKqmsq2irLOwxrCrraSzr7yktJygp6KhnZmXqKappqSms7WelZWdmZmwpq6+oKuikZGempmUkpahnJepnYWdqayitMezn6mkqpaWmJqnnqmcoKWrlJ+fnaCqrqiko6uhrJufn6CYpZ6cn5ywpJmfqJOYmZ2SpZqZqZ+bl2aDknxlfo+aj2N4jGxoanqQo6trZJmXfmeFimVlaWh6jaGOa2iMl5Gid2tqi5iin5hzbG56hIyGeVhlXYWCXmyLioJ2W2hzd3eRgIeCbniCeH9zbXmEc3eIiI6De2mFWF1qc2Rdc4hpa3xxbWNdUU5XSWRYQEo0PUY3P0ZENzE8PT9BQzs7REdISElMTk9SUlRXW15gYWFgXV1dXV5fXVpVT0RIT0tTTj0+PT02NTM1NTU0KiYmJSwqJS4rKyc2KiQ7Jy9BSVtJLjZaTzYpRVkvRE8xWUI7Py49pZ+6vLmvrLKwq6Wora6wp66tsL2xqqilrbCwn62YoKSeopqap6ycrKOmqKmzrp6Wo5CjsKa2uaWuo4+PmqGZk5KboJiZppZ7payiqLPDt6Wip6+fnpWeo56jnaSqqJKfoZ6gqq+pqaOqnqebpp6noKyWoZylsaSYnKuWoZ+bk6WYn6uZnn6+g4hytHKFnoWtaHe5xLhxkqGje6aYmHOqgnzLwMC7cYqjh4KefJaYiJ7AvYKWnZ2NnMHAe4F6kYyawr99a6Wyb4yBb8p6f5t3kYOOgHZ5gX95cXuAhnB4hYyTeWx1kWJlXnhkX2WBYl50aG1kYlhMVklRWkhPRDJJRT9EQj4vPD8+QEE6OERDQkNFSElLTU5QU1ZZXl9fYF9eXl5eX19fXVxTTVBHVU5BQD89NjQ2ODI2NiomJSMpKiYuKyopMTAfOSojPkhbTCojQ1AvI0ZbM1BZL1VBQjsvOJaiuMO0sK+/qamUo6+psK+tprK1r6ump6Wxq6CrmJuioJybqqeinauipamlpbSknqOTpq6suLSnr6KSkZmdpZKRoKGXm6Cdh6arpKutv7+xoamuqZeSn56imaOkqqOToKGenayup6umo6Gln6SknK2pkaSbqa2qnJ2rna2il5iml6KkmJ1/zpR5eqWBepaWm1+tj12OqICgoXynlZp0q4OAr15kjKl6qIeFn3SXkoizY4KrhqCNjbNqhK5zfJaHuGGCrVmjzW6QdXvbe3+ZcX6IknV/ZXuIdnZsfYdufYWQkX1rgI1fcGpvZmBfeGRccWhqY2ZgUlRTV15KT0Q1QUhFRDg+NjtAP0E7PThAPj4/QkRERklKTE5QUk9TXF5fX15dXV9gYF9fXVpXT1VKPT8+PDU1NzgxNjQoJyQhJywmJi8oJiszHTYwJDc7U0wrLC1KMCc7XDpMLSFQQEY0LjGtwb+/tLSwt5iekaOqqa20q6ayra2spKymsKqhp5uappicoq+foZ+op6OmoZ+wrJuelqaurbCrqKyglJKbn6WTkJ+kl52no56upKuwqL/Gs6ipsa6Wkp6copehqqqflaGenZyurqapqJumpqOgqpKss5aloqqqnqSnp6KxopObp5uhm5WUkZegcIWMmHWEqIdxsHydcqx9oJ+BpY+ed6uCfa1/nHKtfquHhp92mJJ7fJd+qoihi5GLnH2reoiSjqCAeq1WnMR6j2+SwX2BlW11cIxtZndlhm9hd25yboiKkY+DbI+OZG1zdW9gZm1kX29oam5mY1dTXGBaUlJDOElJQEM8PjxARkRDRUE9PDw8PkBAQUJFRkdFQENJU1dZWlxdXl5cXl9hX15eXVtaUkM+OzkyNDc4NDUyJiMfHCAxJyAxJx8nNB41LSY3PVdKLTwoPTEpM1ZARiEcRztDMS0rr9PFxrKzoJ2jjqOioq2utq+psaepq6iuq6umoqOdmqOWn6arn6KmoKmoop+esKyYm5eoqK+sqKepnpeVmqOikpShrJqdpqOvrKOstam5zbKtpq6slpWcnaKZn66snZahmZ6eqrGnqamaqqijoaqar7GiqKyvppmmq6qrsqSTmKSmm5WShaRqpHWJeql1erJxgqWJmIxwh5+ah6RfYFKrhH+ugpt1roKnhoafepmXhXtmgKOJpJiGgaN9qX6BlIauXnyoVZ2ikoF6o5+AfMOvxYxzr7SzuXFiqa/CdGiMjJeOgWyYkW5seHh3bmtmZGRxcGZ7aWNcVl9pWFhUTExRTENDQUI7Q0FAQkk8PTo5Ojw9Pj4/QT04NjtETFBSVFZYW15eXVxeYGFgX15dXF1bU0lCNjc5OTY2NCwmJCIgKCciKy0iJC4hMy0mQERXSCxHKzU2KjFQS0wjIEE5RDQsJ8LJ1dXAoZmrqKGvop+wtbCvqa2jqKeqq6uppKafm6WfnaanpqSdrJqjrKGkn6+inZuTqqS2sK6gqZucl5Wmo5CaoqefoKacsaajqLGstsiytamsqpWRnJ2imaCltJ2aoZScn6erqaKtmaqooaGpobOtoqqzsqKcqqiwsLellJekqJmdknyqbJ6Eh3WreXywboKki4iflpWelYHSt7S4yYCBsl5flKmDpIeHoHqYlZl4qslzmaOUp6iQkpqMfpqJmsbGd2WhgqVzgZ+Ogn2vXm+1Y7F1S6OGbadHgpNkjo+ckntvlZB9bnl0fHptW2VqcnFmgWpeYVhjbVxeWUlMTEtFREJCPUE8Qj9KOzc5Nzk5Ojs7OzMuNjxBRklMTU9RU1daW1tbXV5fXl9fXlxcXF1cWE1CNzU3ODUvKSglJiUkJiksNUZOUFBNRkxKVkYqTDAvPi00TlRRHRw7PEYyLCSopMDGua2psq6spaKdsrmsqqGmm6imq6yppqCmpJiro5+urJ2moayan6mlnae1n6KXk6irtrKsm6acoJaQpa2SmpymoqCqpq2ho6epsLTCsbKqraiUiZidpZuipK+ml6GVmZylpamZrpyrpqSeq6O2rKCxubCenK+otLS0ppaYqaSboY+CnU54moF/n3qEo3yCpISGpp6cnpSEuHt8ebmCf8zGw7Z3m6GQi59+mpaXiXafl4qkmKSnfq+Em4OehKx9mZRhpWyjcI+FkIF9l4RyrGCkcnGAmmC8fVJVdY6Ro5Z7fJGOh3J5coN9cFxsbndyaoBuWmNfaG5iZF1MTFFTQUhHRkk5OUs+QjEwODg1Njg3Ny0qNT09P0JER0lMTlBUV1lZWltcX19eXV9fXFpaWllVU09IQDc3Mi4sKi4rKicmP1FUVldXV1lYWFdVT1RGPEUyOlBbVBwbNj9HLC0gjIeZqaykq7mrr6CboayztKafoZWmr66uqaadpaWao6ehsq6iqaeyoJmppJSitaKjlZeiqrW5pJyjnaOTkKGymZ6bpqSgoq+tnKSoorWxw7Gtqq2qkYeRnKedo6SdpZeemJmZpaOnmK2hrKKkl66lu6yht7eunp61s7mytKiZn7GipZ+Hj9G1w7d5h46FkZOPgKZ4lKJ3i6CShaWCi3GrhoW0bnJpmaOclYmffJeZhoeQc66CpZuijKaKk5yIlJCabXCyXKVzk3qcbJl/e5l+bqlhonFxf59ic7K4aHePk6SYfYqLkIh2e3iNgWxod2l4c25+dFxkZG1tZWhgSlpXWDxIRj9UM0BGPjwqKDYzLjAxMykmNDo7PD0+QENFSUtOUFJUVldXWV1fX15eYGBdWltaWFVSUlFGOjIyMzAvKysoQFFSVFVUU1RWV1dYWFdVVVZUUU9RW1UlITJBSCMpJZJyjYqtv7+8u7Wel6ikrbahopmVo6mnrqmrmaWhnqahoLWnoqmnsKOUq6OOpK2jnZCamqq0tKSdppypkpSXrqCgnqajnKectZmhqqO1q8KvqaupooyEj5yioKajlpqanJibmKajpZeppqygo5uspr2slL6wrZ+jsLS7rLWonaqzpamZe6iRfXywd4qBpKWInG2yb6CHrXuhj4OolpmArImFroWglKihopeFn4CZlYB7kn6rgJ2Zloqqd52gj4iTkn95r12jgXymp2SegHyXdGuuXaVrcYWZXWBbjKBtlJClmIKTi5OJeHmBln5qbH1ifXRtf3lgZ2VwbmdnaEJZX1s9SlMyVDhCQkM3JCQzKycnMywgLzY2NzQzNjpAQ0ZJS01OUVNTU1ZaXV9hYGFhYV5dW1pXU1BPTkk3MDUyLiosQVRWVlZUVFVVVVVUVFVUU1NWV1dYVlVWUUhGSUojKCi8kpqEqcbDtsG0n5qtoK64paOOm6SjoK+uqZ+jnp2tmJ65oKKroK+qmq6hkaqppZaJmo+usKymoKibrZiZj62ioZ2loZmknK2Xn6iltqi/rqSpo5+LgI6bm5+mnpKUmZqUmpqko6OYp6qqoaOeqai+pZfDrKujoqyzu6yvqKK1saqsmXavfpCKnIWHfbqtiZhksIxlla19oY+Dp5abga2KhLCFppmjoaKRhaBbbGqBs2B/rXt7goCxbGdtmZeLiLFbfbRbpINryKJln4F7vFl2tVqyfVKvgHqsWIChbZeOp5mJlY+TlHl3jJt8Y3N8YYN4c398YWlmcG1mZWVPVWNcQVRePUgoPjk9NCEhLCQfMi4gKjEvMDQ1Nzk6PEFDRkhKTE5QUFJUV1peYF9gYWJfX1xbWFVQTkpHQzU1My4vQFVZWFdYV1hYV1dYV1ZXV1dXWFdXWFlaWltcWFdXR0I70p+0sbe9u7TBs6Ocraaltqmgi5mgn52zsaieop+dtJigs6iqq56wrZ6sm5WuqKKOiJuOr6yop6Ooma6Tmo+pmqGepZ6Zo6KlmJ6iqbKovK+lqJ6djnyLm5ahoJmQkpqbkZmXqJ6fl6espaSkoqSpu56gxqelqaKstbeur6ihva+urpeBqZKjro6bgIakl5iQgYC4w7qDjp2ThKeYnYKsioKviaecmqWrkX7VvcKqYqO/vXx+o4KD17q3tYWTkoKevb6EaqOBb6uEbp1/erKxx4Nrq7C9rHh3or67dICVjaWajZmOlJp3f4+ZeGF8eWOMZ3iBe2BrZWtqYVBiW1NpXEBUYEJMKTw6NS8fHyQeJTIgHSQoMDQ5NjY3ODs+QURGR0pLTU5OUVRXXWFcX19hXmBbXFlUUU1IQz48QT81PVNZWVhZWVpZWlpZWFdXWFlaWllZWFlbW11dXFpWWFRXWruVtLSxv7qyvbOina6mpbOmnYyYpb+ptrCnob+mprGbnrGcuaifra6lp5WUr6yXjIOaka6mo6yhpZyqoJiKo5OmnqebmqCoopidoKysqbitp6Oal5N7iJmSppuTj5GYmI+YlKiZnpaop56ppqGiq7ueqcWjoK+jq7S1q7Gror2qsLCcdHaqpLeFZYmfcGesj4qPbW93pJCaoIF1sJqWcJCNcpaoo5uYrqRybG1sZYp4bm2CmXGAemlwaWaJlpWXcWhphYZncIZkXYpjaW9ZXWd+eKZgYnKPkm9mZICNk46hlpWWjpSbeoWNk3RkhndnjGp4fnhkbGNmbGJLZVdKa1k6UGREUCdKOisjHCAaIiwpGBsYLTIuNTo0NTc6PD9BQkRFSEtMTU9RU1ZcV1pcYF9hXV1bVFBMSEQ9OkFCN01YWVpZWVpZWFhZWFdXVldZXV5eXVxcXF1eXV5dW1tVV16ola20qbq5srOqqaKunqSzqpiSvbHDx720qZ6/q6yjoKarn7qjpK2sraWOlq2qkIyFlZetn6Wqop+ko6CRi6WSp5mpmZajqqCWnKWmp6+5qquam5OSe4SWjqaXjpGRmJONl5Wmk52Wp6GZsKadoqy5oLDCqKSzpqyxsquvram6pbC5l4uhqaW1nImWopiGqZqQlJ2TqrOZm6OsobSXo6GeoaKcoaShlaynjJKTjIeSnJyUkJmTmJCOlYR/pJqXlY6Lk5KKj4aEfmeLgHSDdnSHjHGnbXyVkpSTgYGPj4+OnJKflJWUnoCFkotwZ452bol3dXx5aWtkZG9jVWBYQGlaR2JgTlgrRT0rJiE2NDAvHxwhJTIoKjc5OTQ2OTs+P0FCREZKS0tNUFBRV1VWWV5fYWNdXlRRSkVDPjk9QEFTWFtcWVdYWFhYWFlYWFpbW1xeX19gXl5eX19gYGBfWVlgpZapqqS1t66uorCkrZ+gtrGQjqrEu8S5t6mhpZ2bpZ2wqKO2p52ptaankZiso4uIiY+cp5aso6GaqJ6ek5Wjl6iaqZmUpqGjj5qnmaG0uaeqmJqQjXyBlIyhlIqVkZWQj5KXpI6dmKeem7Wjnaast6ivwq6jt6ewr7Guqqu1u6KxvpmSpqSmtaKSnaaejamfjZKfo6ywm6GksqqxmaWhnaSrnp6dnJesnpKaopuUkJaqmY2YmJaQlp6Rh6CdlZSFkoyQjZWLgX5mjYd1h3Z5iIR0nGqHkZWVkop9jJaSkpeRoJGalJ6ChpaFeHGUcniJfnF7fmluZF9waWBbX1ltYlBgZE9ZOUdGRT0yPD04LyomKykmHSY0MDY2NTg6PT0/QUFDSEpHSktMTVNTU1VaYGBpYGVWUEpBQ0I7OUVNVlteXltaXFtbW1xdXV9eXV5fYGFhYmFhYWBiYmJkYlxbY5eVpKejsLOsrqOpp62gqLWqkI+co7K6raqroaKZepyisKSlsamWm7imo5SYqZyOhoqJm6KQrp6klqigoZKXmZuui6qWj6iZqIyYqI6euLajpZibjYl5gZSMm5OKlZGUkI2RlqGLnJynnZ64o3+Dr7WisK90pL6jsqB4e6GstL2Wd66loIqAqX5kXGJ2n46knYOXfm6UtJyjqK+spGWfoJR0epqXcYCZqZhsgKOoimWcpZuQl5iWi5KbkISdmpCUg5KHjo6SiYV3a5CIdodxfIaBgGFpiYuVk4xbdpWRZ2iPjHF5opaWZHeXhoB2l2iCiYJueX5qcGVfdm9ra2dcZWNhYW9SWj1NTU5SRj1AVEI5MS8eHyY0OjMwNjY3ODw7PkBBQkZIQkdHSUtMVFVVWV1gaGdnWFFJPERHPDlWUltgYWJgXmBfYGFhX1xdX19fYWFiY2RhYmFhZWRjaGReXWaclqajobCxrKuppamtpKetpJKWqrSusaWZqaaql3OLna+fqKunk5a4oKCPnKSekH6IiJqejauapJWnop6Ol5GehXSuj4ilmqiRlqOIm7mzp6CZmYuJdXaTjZaTipORkJSMj5OfjZmepZibspaAjJu1nbSMko+9p6F+p6J7pLC5go6Pp5+Ei4WPsamvjImWopl5gYushpydoqirqYiVh5l3pZt6h5yBl6eCgXudsnqKhp+XmZSYloGQlpaEmZpjeYeQhI2PkouDbnGQiHqBcYCBhn+GdIeFlpJ4lmiTdKCadHuZgp2ahJh9kYiBgphpjIyEanh6cHBnZHdtaWxqXGRpaWVyW1xIVExRQEU1LVlUVDYpITA5PT42NDM1Njg7Oj0+Pj9ESUBJRUpLR1JYWlhbYWFoZllRSDlESzw+YlZeYmRlZGBhYWBiYl9dYGFhYmJiY2ZnY2JhYGVkY2djYWFonZijn6aurquorKCosKenqqWZlK3FvK+glaWntJ2Pg5yrnKaioI2Qvp6ZjZ+aoZB8hY6ZmIisnaOWoaGSjZSJhoCRqI6Hopyjk5adhp65saedmpOPhXB1kImUkIqUj46bi46RnZCVnqOUnauHn7SJtJqui8qIq6+Jt4WNsIOysIWpjqeYjZ18qI9ye3ebjqaWaJWkebSLn5+nqZOZwoJ/q4iYoXGegJqlfZeFlbKAoX2gk5+PmJeAjpObiZiSi3yFk4aNlJOJg21zkoaAe3KGgYR9hXWGgpiBj8VmgKmHj6JqnYGel4CZgIqLg4iYb42ShGd3dHt2Z2h1cGdoa15ibmxmbFhmRlxRTDJFNDZNYWM3JjQ8REdEOjYzNjU4Ozg+PT0+Qkw/TklKS0NQWl1cV2JeamxcUUU9S01ASmRYXWNnaGdiYmJiY2NgX2JhYmNjY2RpaWNiYmJlY2FmY2JiaZWXop+wqKmopaugpLmxqaummpSeoqSqopWkqbWir3+gppylnp2JlL2Zk42gkZ2PeYOWlpGIq5mcm5qihY+Md5ucjqCRiJ6km5WYl4aiuKylmZuNjX9ibY+Lk5CNj4yMl4uPkZ6Nkp6gmKCnfqGnh62doJaukKCenZGGgqCNrLGIpI6rmoyafqJ1gJiTa4GrdE2reIeNnZKbqamCqqt+hKF7eqdpnn+SbGeXhpi2iZ5+bmBjWIOXf4x7ZGeLc5l9eZZrXXyXbl9TcYVcYGx5g2BZZYJ+hIGYcaeqa4OjbnKlcJ+CnGdknmxabIh6ZVlfgn5hV1BvdmVtdHFqam5eam9sa2hXZ05dWEU5QDRHRF5rNCtJQ1FNTj04NDg1OTs2QDs7PkJPPlFSTE1CSltdX1deX2J2YE1FOk1PTVRiXFtmZ2lpYmJkYWRkYmFiYGNkY2FiamtkYmRkZ2RiZ2VhY2iYlp2guaCqo6askaG2vKuuopmWn6Clq6ufnK20oaeRoJ+fppuZjZi0mZCLnoyVi3WBlJGNiqaWlpifnn6ThYaso4eckYqYqZiZmpGHpbCmopWZiImAaW6Ih4uOjomLjJGLj5Ggi5Kdn5uhpX+TgY+joZSgd5yWkKeDoqiAhquvhqV6i32Emn2icHKSh5Z7nox5bYebi5mRnKmcj4edfIKic3amZp5+d6RemHt9k3Oibpi3tLpzk4eBgLaoZIHGuHtwlbaMcYCbpGN0rKtgfWqds35ufYeDj4KLl3GAo2xzpHOegn2jXpyZs5Zve5ees3RyW56ygmlib3N1cWhuWGtrcnJkW2ddYUtEPUQ1UUFacTI8UkZfSlM9PDM5NTo6NkQ7O0BJUD9UTU5RQEVfXltZWGBge2RJQzhMV1VWYmFaZmZra2JiZWFkY2BhYmBkZF9gY2tuY2NkZGhkYmdmY2holJaVo7mZq5yToI6luLWtraCaoZuio6Srm5qxrKqSl6CYoKSZmpSeq5uLiJJ4i4VwgJaNio+hkJOUnZd9kYqOqKCHmI+KkqKTm5qMiqinpJ6PloeEfmt7h359j42Di4+PiY6TnoGVm5+coJ+LiXecmKKNoHKii4ipiJynkZeprICujH16oJl5o5N4gHOXiIycfZafhpuOmZynh6NkoX2JlpCbjGyeaJqNbpqZe4CKp31yZ3Oqg52Cc6pnlJpdm4V2hJ1oqmqBuGZcqXCBnGGVjF6ndnaJioCdaJp1h5OSmI5/nm2ZkGqmmVyofne7an2pWo6EXbNnXG5xeHdraVtwaXd4YV5kVmFBUEVPN1ZCUm40SlpZXk5aREAxNTE7OzdIPzpDR1U/WFJYXT5EYl1WYFFhY3xpRUI5TlteWWRmWGZnbW1iYmVfYWFfX2BgZWNeYmRvcV9kZWVrZGNpaGdraZWciaq2m6iJY5WcrLqysKudpZuap5+drJmdsKeqnZaimaGfmZaWoKOZhomNaYiAcXuXiIyWloSSlJiPeoqElqOciZWPhoudkZybiI+oop+ajJGKgIBpgYZ5f5aMe4iNjoeOlZl+kqGeoKKTmHJon4qgj4xwkoyCqYiZoKSpoql9sK2koriXdqOzoqN/iJR4nXqrmn6ij56cmImYcqF9hY2wtX1rmpGheH6YtKOjq6iEmHuafJyafnOqWl1ve5eLeJ5iTH97e4VkephCTZ9ZompyfI5ugYqEmXabeYeJsbN/fpqSpnR+nW1xfJRvmXJpo12VdkhlY2BzcH19bmZfa2h1e2JjX1BdVlxUVkBZRVFnRVJWXGFYX0lEPUI4QEE6SUU4TEVYQVZRWlZERmFcWmBLYG19cUVDPFVeYlplalZoaG1vYmZmXmFgXF1eYGhiX2VkdmxeZWdmbGRlbGhoa2mUnYGxrpmEU1+hp7S6s7OomqKLmqmbnKeSoKujoKeOnp2cmpmVmKGdloeHiXeFgW55lYWQmot9kZOWiHKAiZKgm3KSkIGImZSfmoSOqJuZlYuKinyEbISFcYGhjHiFjYiHkZeTe5Gin56jiK6GfbWEj56de6aWeqmClp6Ri6Kefqdod21+mXOgc3F8nYWYb5OCrn2jg6efm4GkcF6paHWjY2+lYZzTj3x6mXhyc2OihY9+onKijnVrj7OLYIKYinOqsqe8f3eDbX+/pqq0XpxvfnKXb4FzonJepGd0pmBopmya05h6gptudnmXa5t5dpdybKmlZ19keXB/hGtnZmNtdXdmX2FRWmVQUWFIV0lUX1dTW2RqW2VRRkNLTEpLQkpFOFBAUE1YU1hPUlFgZWVpUmR4eXdJRkVjXWVaaGpTaWhqb2NqZmBjX1xdXV9pYmFoZXxkXmRnZGtkamxmaGxomJt/sKxUXEt+qa+ytbCyo5yYhJemoKCjjKSnn5eoiZmXmJOZk5Ggl46IhXtwfYRofY+Dk5qBd5GOj4lwf4ePk5JsmJR8iZGSo5WDjqqak5KLhYl5hHeIgG6BnoZ3gJKFh5iglXmSoqOZoImzoaK2i3qsp6SupXCpgJuRhoGdk32kgKKZhphxnoSira6Jl4uAjKSNlYOvopV2tba2yaJ0lIuCnmGel6lteZWGoJt1oYd3oH2QloqBb0xmo5JwmohzpXt5dGKDgmx+oGxyZGCccn90l2t7arS1tMamc5h+epxqmpqrdIGabHN3l2mZeXSXcVBEfbNeanVqeIdma2didHRwbVVcUlhnT1JoSVVMWFJVXGdrblVnV01KQUpNSkhKTkFRSlBkY2ltZXRyc354e251iXt7VFFPbV5oW2tpUmpoaWxnbWZjZV9cXFxfaWJkaGt7X11kZ2NqZm5tZWlsZaKciK+nhWY/lKGzrK+vtaKij3+Wp6Kho4ukppybpYGal5aNl5CPm5OOiIN5anmGZYOMfpafeXWPiIyCaYSFkoOMhZ2NeoyKlaWSgpepl4yRi4CJeoB9i3lwj6CGeYGUhoiVnpR+k6WnnJaWhGdueJxsomR8caV4nJhwaKeCmI18pHqgloOWcp92gImUlY+5bpCKomJ9maKWiW5zaqtrdaBtb6Zgm2mLkGmWh5qVdaKAfZpfi4WMdW+IYmihZZ5/aZt1cGRniIJucqJaX1tjoW5diYxwe390cmSlbniiZGanaJdyi5huoW9SiI9uoF5kp1SLXVSYbW1yanGBbXBoa3hza29RVlVVZVlTbUlYT1xIWGhoc2pZa1ZQUkVWXExYUmFVaGped3V6fHB8fHKCe39zdo2Ag3ZeUXNhZ2JxZ1BraGhrbG9oZGdfXV1dYGpiaWl2dV1cY2hjamlybGZrbWOdpZmmemV0bYunrqWqsLGmn4t/lqqcnaSLoaGZoaGAlZiTjZqPi5eQjot7hnGAiGiLinyXmnN0iX2QfGWDh5WKiZaZgnyIhZamkIGiq5CFkIqBin2AgI5zaY+lhH2Fk4yHl5+NhpGppp2JpniWnH6liZaMspmekYOvl5+leZeJeql0po+Emm6looyShIyDvG59pa+Ch4aHlJedoX2me3KolKCWZ55+b6xjloqVkneobKmigYl2h4J3q5GmiGuRsGt2s4ypbIuGb2+gnpGUYX+ri6p3gX+Op593n32FpJWdoGmah3WsZp6tjLZzdr6Mo5NZg6aNq2B1cXNve3VwYmp+bmhsU1VZVWBgXGpMXFFcSV1sbXZgW3FYW19aZ3Nlbm9xY3F0YHd6fnlyeYNyg36Be3uMgYKAdmJ5ZGRuc2RSbGdnb2xyaWZpYV9eXGFqYmxsem9cXGJpYW1pd21nbG5ilaaqnIGAnqSWqqqeqKeuo5iIgZaqmZ2jiZqknKidhIuaj4WckYWSjYyMdIV6iINvjYR9l5NzdYZykYNuf4uShoaUj317goWXpY1/paWNgI2JhJR1g4eSb2yLqICCi5ONiJueiIuSqqKgkIB0lJeIfoF5lK+kf4GccY+GeZKMhYB7cqeMcX19epeWm4SNeHt+foiUlZOLd5GZoKGEe36Ja4yFW3l5c3lwaW5+kopyf3SBj5STcYWDgmWNf1+BgIx3dnSUdW97b2+JboSGXndpeI5mgoOGj6qcf3R9l2qJiG9/dXyEdW1sZoxzd3uXd4Raald5j2htd3Jxb3d4b11shm1pZ1ZZXldcZGtkVWFUXlFfb3d5a2p3ZWpqanV8cHF0c2FvdWJze4F4dXmBdX+Af4F5i4WCfXttf2xkeW5eV25naHVreGppaWRcYFpjaWVscXVuWltia2Rsa3ltaGxvYY6Vuamni6Gim6akmaSdq6Kfg4OWqpGdoIiZppqomIOBm4t+lpSHjoqJjHKCfI99fo+EepeOdHKEcJWGe32Si4aGkIV4foCGmKOMe6ehi4WPj4SVgoaOmHdxhKqFjZGcj4eenYaKmqifoKqDiY6Vm39+ipetqJCTp5B4cZ6Tg3uTcH+phnB9lXFqb3yBn4t/ko6LaG5dhIyMnJygj3OWjIhxdGuCdnSAWXJuhpGCfn6LaV1pY3qFg4iAX2l4e5x8g42DdoGHg2l5jIhrYnFyg3dfco2CipColodnjY+DbneLgm+Di3duZGZjeYJ6lVpbaWZtdlt6eHd0bXNygmZcbYpra2JZWF1ZWGtxW15gWV5dZXJ9enNvdGNqaml7fHJ6d3RkbXRobHt+dXp8e3l5f4B/cIaKhHt9c356cn9oVFxyaWx2cHVna2dkXWFZamhranFybVdbZW1sZ3J5b2hqbWCMjKqxoZCjoZqfnpiemaiioX2ClquMnpSHmqGQpJR/e5iEfJKZiIiGhopyfYCLdoWLgYSWinJvgHKZh4R+koOEhoqBeoCEi5qfj4KmoId4jZeIlYuLnJeEg3qsgZCXmZOJnZyGh6Gqn6Gio4uIk5udo5mWqqKop6GTnImYkHx5j4+FqH5+kpGSk5yxpZqUnZCNsZKYhKaMjJacoIqRnIOJkoprfI52d2WChpCKfYmdhIeLj4eIgIWEkHd8e3Wbo4mIi5+LhpV/fo2CgXZxdIaFf3iJiIuRp5GEh46Ig4yQi3uFiYeNf3VqgYN7eZlpcWhgc4pwfXp3dm92c4FcXm+HZ25fXllaXFJncVVjW1thbGh0e3xybnBjamlof3tteH5waG9wbGaAe3KBgHd/fX+Ee22DjIZ8enh8fnqDeE5kdmpzbnF7ZWtlYmJgW3NmcGZycWxVXWx0bWh4enBnaWtljYieup+WoqGYlZmYlJikoJ16f5ipjZ6MhZ+cip2WfHiUgnuOmYmGg4SHbXiBgHKAh36Ik4RtbH56l4eEg5B+gIaEhn2Hg42bnZGGqZ6CcYqPhZKRi5yRfY16qYONkZeVjpyWhYWbpp+imp2Gg5KamZmQmaagpp6ekJeCk4t4fYiPhaZ8fI+QkYWYqqCck5yPjaqNkYCejYmUm6CDj5d/h46DcHiGcXRhfoSPhnWMmICDj4KGhH6FhJVueXZ1k6OMjoabhYWOdYCMfn1yc3yJhHt5jY+Fk6iQh4SPgoOJiYh1hIaGiXptan1/em1oa2xmXnl+Z3x7dnR1dXp3XGBwfW11YGNaW15RZm1TZVpdYWtpdXp+cGxsY2pqZ4B/a3J/a2pzbnhug3luhoB2goB9hXZygo2Hfnt6fH97gotgaXtrdWhpg2VqY2BpW2N1aG9idW1rVGJxeWVveXpyZWptbYuKn7iaoaSfkpGWl4uan56denecpZCbiYaklIqYmXh5jYV8iZGDjIKCgmx7f3hygIV9ipB8a2h9gpeJgYiOfH6GhId8j4CPm5uQh6acf3CLioyShqChioWMfKeQh4+SlpOWknaMo6ChnZaaf4GQmpmTjZqioqSbmJGcf4+GeoGFj4ihgH6MjY98l6SgoJKZkJCmjI+BnJKKlJicfpOTfoeOgXZ0gnB2YH2AjodyipZ8iIxxjH6ChYWPaXhyeY2Zk5CAmH+JjHOCiH19cXp8jIV7e5KOhJemlIyGkXyEhYaEdICBhYV4ZHF6fnh5cGtqZl59c2h8dXVzfHN/al5gdHZwd2RjWF1eUmpoVGRYXmFoanZ4gXFma2NsZ2V/gGptfWdtcGp9d4V6a4uBcoGBfYF0doKMhn98eoCBfX+PanKDbnRpYohpbGJfcVV0b21uYHhobFdqdHZjdHp6cWJrb3mJjZ+zkqWlnI6QmI+GnKCam3t1o5+Nl3+MoYqImpV4e4aHfoOJfoiCgX9wfnp0dYKFfomQd2djfYaXi4KKjXh9gI2DeZaAlZeVjZWfmn1vi4GQk4alm4eMiYOmlYSSipWXkpF2kJ2hoZiUmHp/jpiXj5eanaSemZOUnHuRh4R4hpeOnn6Cio6Mc5einqCSmI6PooyLg5iZhJOWmn+YjXyJjYF3cn5ue2SAfIuGcIaTgJCCa4eDgYCJhWZ2b32Ik5mOfpR5jIl9gIh9fHKAeYuGeoWSioyZo5eDhIx3h4OCgXV5f4aDc153d3xzfXdma2NgfmlqdnN0dX1xfGNjYXNudXJtYVlfXVprZFJiV19gaWx1eYZwYmpjbGZofINraHRobG9of3yBeG2PhnGAgoJ/dHyDjIGAfnqCg358kG11iXR0bWWKbGpiY3VWg2lwbmB4Z2xhanZwZXh7eXBfcWyFhZCdrpimqJ6NjZeHhZ+Slpd8dqibiZh5lpyLjJiPeHuAi318g3uAgoF4c3h5c32Ag3+IioBkXn2LlYh+hYh0fX6Kf36YhJaTloyjoJd+cYd7k5GKpo+MjoqSoJGDkY+Tl5CKgI6XoJqSkJJ0gI2SlImdnZ6nmZiOlZh1j5CLbYaZkJp7h4iQiW+XnZqik5WKjZ6MhoGTnYCTk5aHmol8ioqBenJ6a3VsfH+Lfm6FkoOUeG+ChH5+i4Blc2p9gZeYhYCOdJGJhHqIfnZ4gX6HgX2EjoaNlaWReYWCdIiGfH9yc3+FgWxfeXR4cHtuYW5iZHthbm92c3d3c3NhdmBvbHVub11bXl1dal1PXVdiYWhtc3qJa19pZWpjaHeIbWZsaGlsZ4B8endvj4dzgIOEfXSBhol6g316gYR9fI5yeYt5eG5sh2toX2lyY4docW9ldmdtbGF6aGp8e3dwYXdti4GZmqqgpKidioqRhoqdipSXfHasl4yWfJ6TkZaUiHZ9e4p8e4B2d3+Ab3Rzem+FfYGAiX58YVx+j5GGgISEc3qAhnqPkYeRkZuSpJqTgXyBfI2KkqOIjYqNl5qNhZGYk5WOiIiLkp2TkIyNboSQj5GJnpmioZeXiZeScIubhWeHmo+Ue4mFkIpwlpqUoZKSiIuZjIJ/kZ99ko+TjJqPe4qFh3RzdmtxbnZ8i3RuhpGOknF0gHyBgoh8ZXFten6blH6FinWRi4F0iHlugH6BiH2FjYqGjpaqjnuIfX6KhXd9b25/g4FiZ3dzdG56YV1vYGp0XnBqenh4bHJwZXldbWxzbXNYWl1fYWpaT1dXZGNmcXF/iGVdaWhnYmdxjW5kaWdlaWeAend1b46Ec4GBg3x1goiFeIV8d4OFeoCKd3+Le3tyeYNqa19waHN/a3FubXFnb2tle2Juf3l3cGt2d4l/o5iiqKGmm4iMioGPnIaSm3SAqZSRjYagjJWTkH9ze3aFd3h/cnN7hWtyb3ltiXZ/gIZucVtZfpKNiICBgXZ1gH9/oIaPipGcl6CTlneJfoCMiJydiY+GkpeWhYiUmI+Wi4uMjYydio6QhG6Ji4+RipyWoZyYloaYiWyGpYVnh56Lkn+MhIyBd5OYkZ2RkIiJlI1+fpCZfJGNkI6akn2LgINvdnBsbW9we4Zpc4OOmIpwd4B1gomDeWdzb3aCm499ioV7lZJ6d4l0cIp8h417i4eFio+cpIl8hHaBin93d21qf4B/XHFycW9vd1ldb2Bval5vaXx6cG1tam13YHBva3FtWVhgYWFtV1FTWWVmYnVwhIJiXWttZGNma5JtYGZmX2drgXRxcnCLgHR/goB5doCLgHmGf3eHhnaDhXuHjIB7dop/anFifGKFfG9wbHRqaG5sdndfcX54e3R1c3+CfqWVmq2fp5aFjIN+lpSCjp50ip+TkoWKmoyVjYt6cnd0gnByhXNxdYhsbmx1bYh3g31/bW5VUYGrlIeCeYB2coJ5gqCCkYGSkZebkZl3kHqCjJKkmpOOiJSYkoOGlpiLk4uIjo+InoSQinxzi4WIj4icmZ+blpWAlIBph56JaIehiJOFkYSKcYORl4+ajo+Mi4+Nd3uTkXuOi42Sl418iHyBa3dqbmtsbXp/Ynl+jpaBdnqBd4ONfXpodW11iJaMf4mHe5SRcnuFcHeNe4uNe4l+hI6Rn5+GfX14gYp8dm9oa3+Ad153b21rcHJVXW5hcWFfbW55cGdwZmZzdWhxbGF3ZV1WZWBgclNQTltlZFx4cIh8XlxocWJiZWaRaV9nZFtnb35va3Fzin12fYWAdXZ/jHl7hoB4iINzhoV+jIyEfHmVeGZxaoNfh35vb2t6YGltdH90X3N8eIZ3c3OFfHmhkJqxnKWOgop/gpmIf4qcfoqYko6EiJeOjo6EdnR2c4Bwb4VzcHGDb2ppdW2Cbn18bXVzUk6C38mS1pN8b3SDdYOfgpF2lJCYm4+Ye5NyhZCfoZOTkImSm5OFfZWVh4yNh5KNiZx/joF4eox/iIyKnJucm5aUeo53aYqTiW2JpYaTiZiDhmOMkZiNlImWi42Ji3B6lYl8jomLk5GKeoV8f218ZXNva2x6eVyAeY+OgHt9fn+Gjnt6aXVrdIyQioOGhn2WjWx/gHCCjYCOiX6Ee4ORlpubjH13eIKPeHJrZW59gWtpdG9naHNsU15vZHBaX2xyd2Zra2JneHNvcWRfd2BhVmtfXnVPTUtgZWNceXGKdFxbZXZgYWVljmNgZmJYaXJzbWtxdot8dHmGgnZ3fotzf4Z+eol/comHgZGKiH1+mXZlc258ZYd/bnBrgFprbnh5cmB2enuNdnJ2inZ5n4ybr5ugkIKFeIiUfnuInIaEnpCOhYyXhJOOh4F0d3B5cG6Eb21ufnJjZHhwfG56fGpobGOkmsHcru+ic2t1g3WEoYSRbpWPlJ+UmoGRcIWLo5eJjpWKkJ2Vg4CUj4SIj4CSioqXfod7dX+JeIaFjpual5mPkHaLd3CIiox+jKWFkoqdhYZei5SXiY6IjouKhIlsfJeCfYiGipGPhnaFfn5rfWN4dGpveHNYiHqRh4V6f3+AhYx+emZ0aoGLj4uEhICMmIZsgndviZKDkYV/gnuBkZeUm5F1dHiGjHVycGVzd4Bgc2xvYWh1ZlJgcGdrVV9udHlhcmNgaX1xcm5bY3JhY1duWlx3TExMY2VhXXZzim1bXGR4XmBkZoRfY2NeWWlya25rcneLfXN3hIF4eHyJcYOEfH2Ie3SLiYiVhox/f5hzaHVxeWyLe250cIBXcHl2eXFkdniGjGh2gIlxgJ2Imaeco5KEfHCMlHd4iZyDhJ+NjnyVjYCZh4R7cndwc2pvgWtpbHx0XmB4dntwdHpnYGV869q1ycPciXNsc4B2ipqIjGmXj46clJKBiHCFiKCOhIqVioyXk3yNkoiCiI96kYuGj4KAd3iDhHKHgpOblpSYho12h39xhoOKiJqkhJWNn4SJYYOVj4WIhomMh4CHaH2Uf32ChYmOj4Jxhn9/cndndnJpdHdsWox9koKFfYCDgISKgnZidW2KgpGMg3+Ak5J+boNteoiRiJOFfYJ+gZOUkZiKb3J6jIV0a29pcHZ+XnNoblxpdV9SZHFoZlNfcHZ0YG9gXWiCcXJqV2dpY2lYbVdbdExKTGVmXmFyc4VoW1xleV5eZGd6YWRfXVlrbmVuanR3in5zcoF+e3Z6h3SFg3x/h3d2ioWPmIGNgnuTdmx3dnl4knVud3p9WHmFcX9uZnh2kYJkdoaFcYqWhpmhm6KKhnNvkotydo2afImZiIl7n3+EmX+BeHF0bm9kcn5oZmx3d1tfeHt6cXF/aWFnYX/Vto6RpnhucXd7cZKQjIZqmI2Im5GLhntoh4uZhoGSkIaGl417jIyAgImNe5CNfomFenV7g3txhoCVmY6SlIKJdYSIeIWBjJWeoIeWkKB/iGF/k4eDh4OJjX9/gmZ9kYB+f4KMj5B/bYN8gnRrbXd1dHd2a2ONgY5/hH98hH+FiH9wYHRyhn2QjoN9gJKKenGEZ3uFjIiNhHyFf4GVkJKUhW9weYt/dGxtaWp3emFnaWlYa3VaUmlyaWJQYnJ4bGJlXlpqg25zYlxnX2VtX25UWm9OR05mZFxmbnKAa1pbY3NfXGNsd2RlXV1abGxibWpzdoaAcW9/fH10eIZ4hYN8gIh2eImBkpV7iYZ2iYFveHl7g5JvbXuAdl6Df3OBbWh6c5RzZ3OHfHKSkYSan5ughoZ1dZR+bXWSln2HkIOKjZl8jJp2fnZxb2xqYXR8Z2JpdXlaYHd7eW1xfmVjaGhXnY9fcnOXvMSEdnGUiI99cZaLhpuSjIdyaoiPloB7lIyBhJqMfIqFfHuJi3+UiHWJhnZ3fYFydYaBnpSFlI+Dg3KAinaGfYuanpqHlY+dgYlmfZOCfoSDiYlygX1mfox8eX9/h4uPfWmAfYN2Zm95eHN3c2xrjoWKgYqAeIKBhYSBa19zeXt+jouGfIKQgX5zgml6hImMhoV5hH2CmY2RjX5ubXuIfXZ0bmZle3RiW3BiV25xU1NtcmhhTmZ0eGZgXl1Zb4Bvc1llYl1qbmBwT1lrUURTZ2Baam5tfG5ZW15tY1pib3dkZ1xdYGtpY2xqc3aBg3Btf3x/dHWDeoOCfIGFdn6IgZaQeISLdIGIcnl5fo2Qb297gHFpgXh6fm1se3WVa2p4hHRrk42Fn5igmYSIbn2Mdml3l45+gImClJeJeY+Wb3pzcGxpZGBzemhfZXF6WmByfHlncXphZWWPsbJ3S2JapdnQlnF7kIqPd32TioSYkYyFbmuFkpF6eZKGgYSYinyGf3h3iYqEloBvi4hxdX56anmFg6WQhJONg39vf4R3hXqHnZqVjJSRlYWIcHuSgnyCg4iDboF3aICEeHJ/gIOKh3xlfX6EdmNwc4BpeXBvdZmNhoOKfHZ4gIV6g2tccn9zgomGin6HinuJcoJucoWIj4aGc4R6gpqNjoV5bm9+hH92emRmaHtvXlh2WlhwbE5XcXNmYEtsd3RhXVxaWXR9c29XZ11manJgb05XaFI/WGZeWnBraHpxW1pZa2VaY3F5X2hcXmVsaGVraXF3f4hvbH9+gHVvgnuAgn+Cf3aBhYiXiXGCjXF7hnx6eYOTjHVqeX5rb350f31vcnt6k3BvgX54Z5KLg6GZnJGChWaGg29neZWIfX6EgZiJgXyNjGh4cmtsZl9gb3ltX2JveFxka4J6YXF2X2Vl1Oq9izI6PouOf3F4hYiOjXaClYx+ko2Mf21shY2MdXyPf4WBlYh8gnhudoeEg5d3boiFbHV7dGZ5goOni4KOi4R+boB2eIV7iJ6SjZGTk46Lh397koZ3foOMgmt/cmiAfnhtfHyCioN3YXmEgXFkcWh+bnVxdYKbi4B/hYBzdX6Bc4FvXG5/dXmLhIt7iIF9iXh6cm2JhJGFjHOCeoCXjIuAdW1rdoCAdXRbZ2d1bldWe1JZcGRLWnJyZVtJcHhvXFtbWV10fnRoWWJbZ2ZvZGpNV2ZRPl5lXF11ZWB1cFpZVG5kWWRxeVpoXV9mbWdpa2lwd32ObWmChH55boB8fIF/gnp1goGNk4RwgItud32Ae3uHkol/aHt9anN7coV6c3d+fox6eIR9fGuMjYSbnZaMgYBsjX1raH6Ni3p+foOTgn59iohrdXFnaGJbYmdzb19ha3NgaHCIemJzdF5jZJugj25cNVqvtXRpgIh8koZ1hZWFc46KiXZwbIWDh3V5iXiJfJOIen5yZ3WJfn6Yb3GGfmh2eW5meYeEpIeAhoyJfm5/d4GCfo6biIOVkpmKi4WJfI+IcHp9hHtofmxqgHt6anp3goeAcmB3gX5xZHJndoJtdXuGlZGBfIKBb3d6fHV/bVlwgHd1jYOHeIh2g4l6eHNvi4GRgodzf35/lImKe29uam2BgXRtXGZkcnBQWnpNW29cT1tyb2RVS3N4aVdZWVphcYB0YF1dYGdkaWlmTlloTUBgY1tgdWFddWxYV1N0YVpkb3JXal5iaGtnbWxocHd8k2xohIp8fHB/fnuBf4J6d4B/iouDcXuIb3F3g397iYyPg2p+e213eHaKd3x4gIGHf4N+fnpthIyImKONhIN6dYt4a2yDh5B4fXqBkYCAfoqDcHJwY2ZeWWZfb29fYGdwZmpviXRhdG9bYWRqdnuAv5ympMi4cYWDcpJ8eIaSgnOQi4dxcm+De4N0dId0iHeUiHl5cGN3h3qAk2lyhHZnd3VjanyCiJ2Bf3+Oj31zgHWGeoGTkYR6l4+WkIiCiHuIiGt4eX50Z3poa395c2l6doCDfWhgd4d9amp0aHuAaXaBjJGUfnp+fnB8dnx0f2JWeH5zc4uFgn2EcYeKd3hxcYSDjoB/en59do+GhHdqcWlsh4Fxb1xmYXFtSWR1S11tVVNZcm5iUU90eGFSWFhdYW+Cc1thXWhlZWRrZFBbcElDY2BbY3BeXXdoVVZVdl1bZW5oVmteYWlnZW5uaHB3epNtaYiMeX1ye355goGBfHV8g4iGg3B3hHJtd4KCfomLk39wgHt3eXqBi3SDeH6BgYKEeoB1b36Ki5ueiH2FeneFe2d0hYyPeX5/e4iFg3aPf2dvbl9kXFhlWW1yYWBgcGxraIluYXRpWV5kboB3qdqqx4aHsnGJd2+MdXuGjX96kol/dHN0fneAcHF/bYR0lIZ4dWtgeoJ5iY9mcYRwZ3ZuW218gJCTf4B5kZN+eXxuiXeCko2FdZeLko+HhYZ7f4RsdHZ+bWd2ZG17dW1pd3Z/f3xhYniGemh1dWJ9e2d1ho6NlXt0gHZxgHt9bYBaV3V/cHaFiH+Aem2JhnR5bHaBhIV/fH55fHSLgn50aHRlboqDbHNZaF5zZEdtbUtaYVdWVXdtYlBSdHZYUFZYXmFxhG9cYGNtZGReb2NUXXJGQmVfXWZnXVt7YlFVXHVbW2drYVZqX2BuZWZrcWhwdniOdGuOjXV+dnh+d4GDgXtzfYOIh4NvcoB0cXV+hYGJjYp7d4B4g3t8hYd4h3x9gX6EgHt+c3Z5jI6gjYl6iXZ0g3hefYWYi3iGg3SFhoR3iXpibmxbYltbYVZpc2NgW2dub2aHcWFxZlddY2x/fMrOh7mham1timxxhHF8g4l+epCEeXhzeXV1e2psdmOEdZKCd29mXn2CeouKZXKCa2pxY1hteoWbiIKBc5eUeH99b4lyhIuNiXOYj5GJhouDe3l9cHBvfGZocWJteHFqa3F4fXx6XWV5gHhpdnhmgndndIeMjpR9codqb36BeW99Xllzf251gYt8gm9wioBxd2l4gIKAgnh+c3t1h317c2dzYW6LgWtxV2lddltHbWpMVlReU1V7a2FPVHVyUFFUV15idIVpXWBsamZjWm9hWGNwR0BnXGBlXlxWe15OVmVwWVtqaF1XaGBecmZrZ3FncHN3hnhulYp0f3p4fnmDh4B1cX+GhY6DcHB7eHZ1eoaFh4yGenx/dIt+fYaEhId/fn59h398eHZ4eJGTn3+MfYttdX94ZIKGlYVzkYpvhYWBeoN0Y25qWV9bXF1UZ3JkYFhkcXJmgXNia2VXW2Bqf3e+rnugtm5ic4Zoc3txeYGEen2Lfnd3cnZve3Zlam9gh3WOgXNqYl5/eHmLhGZxf2hra1pWb3eJo4GEf3GZk3KBeXaEb4KDk4l0loqOiIWJhX14dHFuaHhfamxfbXZqZ2preXd6dlpnfXx4ZXN+boR0ZXWFjYaWf3CMZ2t6hHVudWJdcX1sdX2Me4Jmdod9bnFpdn95f4Bzfm17fIJ7eXFmbGJtiX1sbVVpX3ZVSmlqTlFOaE1Ye2hhTlV2a0xRVFVfZnWDZl5gcWhnYldpXVxraEpEallhZFZZVXlZTVZtallda2RcWWVjXnRmbGRxZ3JwdYF4cJmFdn9+d398hYd9dXKCiICVg25zeXt6c3KFh4mIg3mBfnWPfnyEio6EgoN6fouDe3Z7d3eanZd6iYKGaXZ9e2yDhJJ/cY6BcIWCfoF/cGZsZ1hdW1xbU2RwZF5XYnJ1aXVwZWViV1xcaIBwb3KAc4lkZHh+aXR1c3KBg3eAg3l2c3Vua3pxYmdrZ4Z0jYNuZl1ffXB7iX9pbXlnamRVV3JvjaZ8hHt2lpF0fXN9e299fJKHeJp9iIaDhoN9dW9xbGd0XGxnXmx0ZGdlaXpve3JZaIF3dWhwgXiCdmJ3hYt8lIFvjGpte4JxZ3NmYW56Z3N4i3x+YneDd2pscnZ7cXt6dH5nf3+AeXdvZGZiboV7bGpVaGJvUkpoak9LTm9HXXtmYU1VdGNKTlNXYWp2fmVdZ3NpZmBWY1dicF1MS2pYY2FVVFVzVkxYdWRZXmtgXFpjZV92Z21icGlzb3J+dXSZgnd/gHd/f4aFenx0goR+l4VucnR8enRxhIWPgYB6i3Z0kH98gZWOgIWEfH6Mhnt+gHZ7o6WKeYiFhGt1fHp1g4CLem6Ec3mEfYGDdW5qaGVWXVtaWlNibWRbWGFze2lobWlgYldfW2qAamtwgGdrYGh5eGpzdHNtg4B6f3x1dW56aGp5al9lbmiBdpCEZ2VYYndqfod7b2pwZ2ZdVFhvZ46od4F6fJGOenZxf3B0d3qQgXmWdIWDgIWIdmpxdWdnbltsY11tcl9nYWp4aHxtW26CcnRqb4F+endhd4WEeI+Fc4hyb3mAcmNxaVxxeGRydIl8eWN0gHFoanp1cm15eHZ5ZIR8f3l3cWRkY258fGpqVGhhZVNKa2dPR1FrRWB4ZmFNU3FdSk1UWmVrdntlX21xaWRdVmBWbm5XS1NoV2VeWE1VbFRKXHlfW15rXV1bY2VgeWhsYG9vdW5wd3V6mH13gIF6gICHhnp4eYJ+gZOEcXR0f3l2dISIkX2AfJBrc5WAe4KfhX6HfYB/hoKAint2hKuff3qIh4NrcoF5dYB+gHRuhm58gHOKgGpvbWRkWF9aWVpUYWpnW1pedIJpXm1sXGFXXFxsgWVydH1paVxrdnVnc3ZxbIR7fXx4dXJseWdpeGZdZXNneneTgWNjVGVwZ4KFd3dnaWpgV1ZZZ2OPp25+d4CLjntxcn5oenB7jn14kHGEfX9/hm5kdXJkZ2dcamFcb29cZ19tdWR6aF10gG9ya3J8fnV2YnSFi3uIh4GAeHJ1f3VhcG1bcnRjcXOFfHVlc4BtYW17cGtqe3l2c2aGdnt7dnFlYmVtc31pa1NnXVxUS3FiUEZWYUdidmZhS1RvV0pMWFhna3V6ZGVucWZkWlddWHZlVEpcYldnV1lIV2VQSGJ4Wl1fbFteXGFjXn5pal9udHhtcG52g5d5coGAfH+JjIZ+dXWGeYeMfHR1dYJ5enqCjI59foSJaXOWgXqKnX1+hXqBen98hohzcY+tjHt7h499ZHGHeXN8enVyb4Vse35sj3picG9iZV1lVllZV2Nma19dXHKFaFhwblteWFpcbHtjcHd2bWJabHNzZ3R1b2yDeH5/eHdubnRkaXRlW2d1ZnZ2knlfXVJmZmqDgnR+YmRpXFRXXWJjj6RoeHSDhpF5bXB7aXlufIZ8dolzgHh8eH9oZHZsYGZfXmleXHNrWWVdb29iemVbd3xrbm5veHlzdWRzg5J+h4OJe3dwcn5zYnhkXHBwYnFygn10Z3KAZV5ud2llaHp8dW5vgnV0fXRyYl9mbm58ZGhTZ1hXU0x2X1BKWVhIYnRjYUlUbVNKTVpXaWxxe2JtbHNjYlpaW2F3XFNMY11YaVNXR1lgTUZpdVheYGxbW19iYlyEaWdhbnh5bG9qdoGQeG2DfoCBk4iEgXZziHSMhnRydnWCd3x9foyQgH6TfnB3lYN8mZJ5gIB4en6AdIiDdHCYoHp7f4mUeGN1h3hzd3RrdG9+a3h8cJFyXnBvYGdibFRaWldoY21mXFtxiWVTcm5bWlhYYGx2Y2l1amleWW1zcGxzc3NphHx+fnt2b25sZGlxY1trcmR0do5zW1dTZWFygH9ygl1iY11TWmBcY5GfZXFxhYSRdGxse25wcXt9fXGBeIBzenp6Y2V1aF1iWWBnWl52aFdiXW9oYXdgW3t2aWpybnhzcnVocYKVg4d+hHZzanF9bmZ3WF1sbmNyc4F6dGdvfltgcHJiYGtyfm1tdX9zcXhrcGFcZWxseWBmUmVUVlFPdFpRT1hRSGNzYmBGVWtQSVBaVWtra3xlbW9xYltaWFlscVdSUGZXVmhTVEZaXE5IcXRYX2NtY1hgYGFdi2pjZG15eGtwaXV5hntrg31/hJp8goR5fIduj4dyb3Z6fXSBgnyLj4KCl3R4gZOFgZ+JdYGAgXR/gnGHgnVvoZZze4aLhnpld4pubXpuZnhwemtzdnKMa150bmFnZWtSXVtVZ2Fsa1pccIxkT29uXVZYVWdpdGhidGVlXVltdG1vdXR4aoZ8f3uHdo9zZGRrbmFcbm1jc3iHa1pUVmNkeH19cYZdY19jU1pfWWKVlWNucIOFinRraHxwZnR4dX1senV2b3p+dV5lcmNbXVZhY1hhdGVVX2BtZGFxXV1+cGhpc3F0cHV2a22Ek4GJe4Vxc2dwfnFzb1RcZ2tmcXSBd3NjbXZWYnJsW19wZ35mbXd+c3Nza21gWmRqanZeZlNjVFVQU2xWUFZTT0dkcl9hRVhpT0hXVFZtaGR8aWt4a2JXXVVbdGRTUldoUVhlVFNIWlpQTXd2Wl9lbGlZYmBeXo5uYWZreXVub2l2dn9/bIOAfYeXe4CHgYl+a5OIcmd0gHt1f4J9iI5/i5NyfIqRhYefhnt/hoxzgYZzfoJ2bqSLcoGNi3Z3bHqMYGR7cGZ6c3hsbXF2gmdke2xjZmdoU19eVWdfbG5bXm2NaE5pbWBUVlNuZ3RrZXhkZFxYb3NscXp3cmyHe392m3p5a2FlbG1eYG9qZXB5fmdaVlhgbHh8e3CEX2JeZ1ZYX1djm4hia3CBh314bGt5blx3c217aXV0b297gHJYaW1eWFxVYWJXZHBjU15haGFibFpgfmtma3N2b213d2xphYx/iXuIbXJncX1uc25kWmFpaW90gnRzXmltU2VxZVVjb2N7ZHJ3fHdrcG1rYFlhZ2h0XGRVYFVSTldkUk5bT09HZG9dYkZZaU1JX0tYbWRgeGlufmRgVV9UXXVcVFNgZk5dYVVTSlxZUFl0dV1fZWxoWGNhW16NcWNnanhxc25odnR6g3KCg3qIjn58iYeNeW6QinVsc4J0f3+HhYaShJWPeX2Mj4eRm4SAfIyFc4CBc3R4cm+Tk5OTk5OTk5OTkpKSkpKSkpKSkpKSk5OTkpKSkpKSkpKSkpKSkZGRkJCPj4+Pj4+Ojo6Pj46OjY2Njo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo2NjYyMjI2NjY2Njo6Ojo6OjY6OjY2Ojo6Oj4+Pjo2NjY2Oj4+Pj4+PjoKAfnp6fX5+fX1/fn59fn5+fn5+fn+Af4CAgIGAgIB/gIGBgYOHjI6Ojo6NjY2NjY2NjY2NjZKSkpOTkpKSkpKSkpKSkpGRkZGSkpKSkpKSkpKSkpKSkpKSkpGRkZCQkI+Pjo6Ojo6NjY6Ojo2NjY2Njo6Njo6OjY2NjY2Njo6Ojo6Ojo6NjYyMjY2MjIyNjY2Njo6Ojo6NjY2NjY2Njo6Ojo6OjY2NjY2Ojo6Ojo+Ogn99ent8fn59fX59fn5+fn5+fn5+f4B/gICAgICAgH+BgYCBg4aMjY6NjY2NjY2NjIyMjIyMkpKSkpKSkpKSkpKSkpKSkZKSkpKSk5KSkpKRkZGRkZKSkpGRkZGQkJCQj4+Ojo6OjY2NjY2Njo6Ojo6NjIyMjIyMjY2NjY2Njo6Pj4+Pjo6NjIyMjIyMjIyNjY2NjY2NjY2NjY2NjY2Njo6Ojo2NjY2NjY2NjY6Ojo6Cf3x6fHx9fn19fn19fX59fn5+fn5+gH9/gICBgYGAf4CAgICDhouOjo2NjY2NjIyMjIyMjIySk5OTk5OTk5OSkpKSkZGSkpKSkpKSkpGRkZGRkZGRkJCQkJGRkZCQkJCPj46Pjo6Ojo6Ojo6Ojo6Ojo2MjIyMjIyNjY2OjY6Ojo+Pj46Ojo2MjIyMjIyMjIyMjY2NjY2NjY2NjY2NjY2Njo6NjY2MjIyNjY2Njo6OjoN/fHp8e31+fH1+fXx9fn59fn5+fn5/f3+BgYGAgICAgYCAgIOGi42NjY2NjIyMjIyMjIyMjJA+LjExMTEvb4eEhISEiF0tMDAwMC1GoaGhoaGhoJqZmpqampqKg4SEhIOEd2VnZmZmaFxDREREREFSzNrY2NjY3Itpbm5ubnFJLDAwLy8sSYWDg4ODg4OLjIyMjIyMjY2NjYyMjY2NjY2NjY2NjIyMjIyNjY2NjY2OhX19e3t6fX58fH59fX1+fX1+fn5+fn9/f4GBgYCAgICBgICAgoWKjI2MjIyMjIyMjIyMjIyMjy0aHR0dHBpohYKCgoKGUxgdHR0dGTekpKSkpKSjnJycnJycnImBgoKBgYJyXV9fX19hUjQ1NTU1MkbY6ufn5+fri2JnZ2dnbDwYHBwdHRg7g4GBgYGAgYqLi4yMjIyMjIyMjIyMjIyMjY2NjY2MjIyMjIyMjY2NjY2GfH16e3p8fXt9fn19fX59fX5+fn5/f3+AgYCBgYGAgIGBgYGChYqNjYyMjIyMjIyMjIuLi4uRiYiIiIiIh42QkJCQkJCMh4eHh4iHiZKTkpKSkpKRkZGRkZGRj46Ojo2NjYuJiYmJiYmIhYaFhYWFhpOUlJSUlJWNiYqKiomKhoKCgoKCgoSKioqKioqKi4uLi4uLi4uLjIyLi4yMjIyMjI2NjIyMjIyMjIyMjY2Njoh8f3l7ent8e319fX18fX19fX5+fn9/f4CBgYGBgYGAgYCAgYKFioyMjIyMjIyMjIuLi4uLi5GTk5OTk46SkpGJh46KkJKSk4+Ojo6OhYqRkZGRkJCQkJCPj4+Pj4+Ojo6Njo6Ojo2Njo2Njo6Ojo6Ni4uLi4uMjI2NjY2NjY2Njo6NjY2NjIuLi4uLiouLi4uLi4uLi4uLi4uLjIyMjIyMjIyMjIyMjIyMjIyNjY2NiX59eHh5fH18fX19fH19fX59fn5+f3+AgICBgYGBgYCBgIGCgoSKjIyMjIyMjIyLi4uLi4qLkJCRkZGPhI6QkIaKj4WNkJCQh4qJiY6IiZCQkJCQkJCQkI+Pj4+Ojo6NjY2NjYyMjIyMjIyMjIyMjIyMjIyMjI2NjIyMjIyMjIyMi4uLi4uLi4uLi4qKiouLi4uLi4uLi4uLi4uLi4yMjIyMjIyMjIyMjIyMjIyMjI2Lfnx3dnh7fXx7fX18fH19fn5+fn5/f4CAgIGBgYGBgIGAgIGChIqMjIyMjIuLi4uLioqKioqQkJCQkIqFjoiOhoaPiY2QkI2Eio2IkImLj4+Pj4+Qj5CPj4+Ojo6OjY2MjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMi4uLi4uLi4uLi4uLi4qKioqKi4qKi4qKi4uKioqKi4uLi4uLjIyMjIyMjIyMjIyMjIyMjIt+e3d2eHt8fHx9fX19fX1+fn5/fn9/f3+AgIGAgYGAgYCBgYGEiYyMi4uLi4uLioqKioqKipCQkJCPhYOMjpCOiYyJjZCRiYKIjIiPh42Pj4+Pj4+Pj4+Pjo6OjY2NjYyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIuLi4uLi4uLi4qKioqKioqKioqKioqKioqLi4uKioqKiouLi4uLi4yMjIyMjIyMjIyMjIyMin18dnZ4fHx7fH19fH19fn5+fn5+fn9/f4CAgYCBgYGBgIGAgYSJi4yLi4uLi4qKiomJiYmJkJCQkJCMhoyJjoeFjYmOi4yOiIiMiI2Gj4+Pjo+Pj4+Pjo6OjY2NjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyLi4uLi4qKioqKioqKioqKioqKioqKioqKi4uLioqKioqKioqLi4uLi4uLjIyMjIyMi4uMjIyKf353eHp7enp8fHx8fX5+fn5+fn9+fn9/gICAgICBgICAgYCBhIqMi4uLioqKioqJiYmJiYmPj4+Pj5CMjouPjIqPjI6MjZCOjI2LjYuOj46Ojo6Ojo6Ojo6NjYyMjIyLi4uLi4uLjIyMjIyMjIyMjIyMjIyMjIyMjIyLi4uLioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi4uLi4uLi4uLi4uLjIiAfXh5enp6e318e3t9fn5+fn5/f35+f39/gICBgICAgIGBgIGEiouLioqKioqJiYmJiYmIiI+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Ojo6Ojo6Ojo6Ojo6Ojo2NjYyMjIyLi4uLi4uLi4uLjIyMjIyMjIyMjIyMjIyMjIyMjIuLi4uKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLi4uLioqKi4uLh4B8eHp6eXt8fHt8fH1+fn5+fn9/fn9/f39/gIB/gYGAgIB/gYSJi4qKioqJiYmJiYmJiIiIj4+Pj4+Pj4+Pj46Pj4+Oj4+Ojo6Ojo6Ojo6OjY2NjY2NjY2MjIyMjIuLi4uLi4uLi4uLi4uLi4uLjIyMjIyMjIyMjIyMi4uLi4qKioqKioqKioqKioqKioqKioqKioqKioqKiYmKioqKioqKioqKioqKioqKioqKi4uHgHt5eXh6fHx6e3t9fX5+fn5+f39+f39/f39/f3+BgYCAgH+BhIiLiomJiYmJiYmJiIiIiIiOjo6Ojo6Pj46MjI+Sj5COjo6Ojo6NjY2NjY2NjY2NjIyMjIyMjIuLi4uLioqKioqLi4uLi4uLi4uLi4uMjIyMjIyMjIyLi4uLi4qKioqKioqKioqKiomKiomJiYqKioqKioqJiYmJioqKioqKioqKioqKioqKioqKi4aBe3h5eHp8ent7fH19fn5+fn5/f35/f39+fn9/f4CAgYCAgIGEiIqJiYmJiYmJiIiIiIeHh46Ojo6Ojo6Ojo+MkJOQkI+Ojo6NjY2NjY2NjYyMjIyMjIyMjIuLi4uLi4qKioqKioqKi4uLi4uLi4uLi4uLi4uMjIyLi4uLi4uLioqKioqKioqKiYmJiYmJiYmJiYmKioqKiomJiYmJiYmJiYqKioqKiomJioqKioqKhYB6eHl5fHt6ent8fH1+fn1+fn9/fX9/f35/f39/gICBgICAgYSIiomJiYiIiIiIiIeHh4eHjY2Ojo6Ojo6Pj4+PjoyNkI2NjY2NjY2MjIyMjIyMjIyMi4uLi4uLioqKioqKioqKioqLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4qKioqKioqJiYmJiYmJiYmJiYmJiYmKioqJiYmJiYmJiYmJiYmKioqJiYmJiYmJioqFf3l6eXh7e3p7fHx7fn5+fX5+f39+f35/fn+Af3+AgICBgYCChIeKiYmIiIiIh4eHh4eHh4eNjY2Njo6Oi42Nj5WPiYyPjYyNjYyMjIyMjIyMjIuLi4uLi4uLi4qKioqKioqKioqKiouLi4uLi4uLi4uLi4uLi4uLi4uLi4uKioqJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYR+eXt5ent7eXt9fHt+fn59fn1+f35/fn9+f3+AgICAf4CAgICEh4mIiIiHh4eHh4eHh4aGhoyNjY2NjY+MjImKj42IjJGPjY2NjIyMjIyMjIyLi4uLi4uKioqKioqKioqKioqKioqKiouLi4uLi4uLi4uLi4uLi4uLi4uKioqJiomJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJg355e3p8e3p7fX17fH9+fn5+fX5/fn9+f3+Af4CAgH+AgH9/f4OGiIiHh4eHh4aGhoaGhoaGjIyMjIyLiYyKiIeJhoyOjJCMjZGOjIyMi4uLi4uLi4uLi4qKioqKioqKioqKioqKioqKioqKiouLi4uLi4uLi4uLioqKioqKiomJiYmJiYmJiImJiYmJiYmJiYmJiYmJiYmJiYmIiImJiYmJiYmJiYmJiYiIiIiIiYmCf3h7e3t6enx9fHx9f39+fn19fn9/f39/f4F/gIB/gICAgICAg4aIh4eHhoaGhoaGhoaGhoWMjIyMi4yOjoyKioeEiIuKjIuNjo+Li4uLi4uLi4uLi4uLioqKiomJiYmKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiomJiYmJiYiIiIiIiIiIiImJiYmJiYmJiYmJiIiIiIiIiYmIiIiIiIiIiIiIiIiIiIJ/eHp7enp6e3x8fX1+f35+fX1+f39/fn+AgICAf3+Af4CAgYCDhYiHh4aGhoaGhoaFhYWFhYyMjI2NjJCSjI2Ii4mJi4uLi4mLjIqMi4uLi4uLioqLi4qKiomJiYmJiYmJiYqKioqKioqKioqKioqKioqKioqKioqKiYqJioqJiYmJiYmIiIiIiIiIiIiIiImJiYmJiYmJiYmIiIiIiIiIiIiIiIiIiIiIiIiIiIiHgXx4e3x5enp8fHx9fX9/fn59fX9/f39+fn+Af4B/f3+Af4CAgIKEh4eGhoaGhYWFhYWFhYWFjIyNkY+PjZGJjIaJjIuIiImMiYeNjo+NioqKioqKioqKiomJiYmJiYmJiYmJioqKioqKioqKioqKioqJioqKioqKiYmJiYmJiYmJiYmJiYiIiIiIiIiIiIiIiImJiYmJiYmJiIiIiIiIiIiIiIiIiIiHh4eHh4eHh4WAenl9e3t7enx8fHx9f39+fn19f39/f35+f4B/gH9/f4B/gH+AgoSHhoaGhYWFhYWFhYWFhISLi46PjoyLj4iHiYmMjYWFjo2KiYyNi46KioqKiomJiYmJiYmJiYmJiYmJiYmJiYmKioqKioqKiomJiYmJiYmJiYmJiYmJiYmJiYmJiYmIiIiIiIiIiIiHiIiIiIiIiIiIiIiIiIiIiIiHh4eHh4eHh4eHhoaHh4eHhH55eX16enp7fXt8fX5+f35+fX5/f39/fX5/f3+Af39/f39/f4CChIaFhoWFhYWFhYWFhISEhIuLjI6MjI2Lh4mIiomHgoeNjoiKi5GTj4uJiYmJiYmJiYmJiYmIiYmJiYmJiYmJiYmKioqKiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiIiIiIiIiIeHh4eHh4eIiIiIiIiIiIiIh4eHh4eHhoaGh4aGhoaGhoaGh4eDfXp5e3p5enx8e31+fn5/fn59fn9/fn9+fn+AgICAf35/f39/gIKEhoWFhYWFhYWEhISEhISEioqOjYmIiIqKh4iHiomIioiIh4qGi5GPiomJiYmJiYiIiIiIiIiIiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmIiIiIiIiIiIiHh4iIh4eHh4eHh4eHh4eHh4eHh4eHh4eHhoaGhoaGhoaGhoaGhoaGh4J8eXl6eXp7e3t7fX5+fn5+fn59gH9/f39/f4CAgH9/fn9/gICAgoSGhYWFhISEhISEhISEhISKi5CPiYmJi4qHh4WHiYuKiYSLjYmOjYqJiYmJiIiIiIiIiIiIiIiIiYmJiYmJiYmJiYmJiYmJiYmJiIiIiImJiYmJiYiIiIiIiIiIiIiIiIeHh4eHh4eHh4eHh4eHh4eHh4eHh4eGhoaGhoaGhoaGhoaGhoaGhoaGgXt4enp4e3x7e3x+fn9+fn5+fX1/f39/f3+Af4B/f39/f3+Af4CChIaFhYSEhISEhISEhISEhI+Qj4+IiYuIhoeIiYuLjIuJioqNio6Oj4iJiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIh4eHh4eHh4eHh4eHh4eHh4aGhoaGhoaGhoaGhoaGhoaGhYWFhYWFhoaAe3h5eXh4enp8fX1+f35+fn59fn9/f39/gIB/gICAf39/gIB/gYKDhoiGiIaDhISEhIODg4ODkpKOioeKi4qLh4uNiYqJi4iHiouIio+SioiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIh4eHh4eHh4eHh4eHh4eGhoaGhoaGhoaGhoaGhoaGhoaGhoaFhYWFhYWGhn96eXh4eHl5eXx9fn5/fn5/fn1+f35/f3+Af39/f4CAgH+AgH+BgoOHjo+PjoiHhIWFhoaFhYWSkI6KiYmIiImKioiIh4aKjIiHiYmOkJGNh4iIiIiIiIiIiIiIiIiIiIiIh4iIiIiIiIiIiIiIiIiIiIiIiIiIh4eHh4eHh4eHh4eHh4eHh4eHh4aGh4eHh4aGhoaGhoaGhoaGhoaGhoaGhoaGhoWFhYWFhYWFhYWGf3l4d3d3eXp5e3x9fn9+f35+fn5+f35+fn+Af4CAgICAf3+Af4GBg4eOjo6Ojo6Mjo2OjY2MjZCQjomHhoiJiYeIiouIiYyJiYaKjY6PkYuIiIiIiIeHh4eIiIiIiIiHh4eHh4iIiIiIiIiIiIiIiIiIiIeHh4eHh4eHh4eHh4eHh4eHh4eHh4aGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaFhYWFhYWFhYWFhYZ+eXd5d3d6eXl8e31/fn5/fn5+fn5+fn9+f4B/fn+Af39/f39+gIGEiI6Ojo6Ojo6Ojo6Ojo2NkJGOi42JjIiIiYaHiYaIioiHi4yLjpCQiIeIiYmJiIeHh4iIiYmIh4eHh4iIiYiIiIiIh4iIiIiHh4eHh4eHh4eHh4eHh4eHh4aGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoWFhoaFhYaGhoWGhYSEhIWFhoaFhIWFhX55d3l2eHl4e3x7fn5+fn5+fn5+fn5+f39+f39+f39/f35/f3+AgYOGjY2Ojo6OjY6NjY6OjY2Qj42Ni46KhoiKhISLiYeDhYSDi4mLj42JjI6QkI+NjYyLjY6Pj42NjI2Nj4+Pjo6MjYyMjY2KiYiHiImHh4aHh4eHh4aGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoeHiYqKiIeJi4yNjo2LiImLi42OjYyJiImMgHl3d3Z6eXh7e3t9fn5+fn5+fn5+fn5/f39+fn5/f4B/f4B/f4CBg4aMjY2NjY2NjY2Qj4+Pj46NjI6KiYuMjIeFiY2Lh4aIh4aHh4uNjo6Pj4+Pjo+Pj4+Pj4+Pj4+Pj4+Ojo+Pj4+Pj4+Pj4+Oj46Oj46Mi4uJh4eHh4aIhoaGhoaGhoaGhoeLiYeHiIiLjY2Mi4yLjY2Ojo+Ojo6Pj46Ojo6Ojo6Ojo6Njo6NjY2AeHZ4eHp4enx6fH5+fn5+fn5+fn5+f39/fn59fn9/f39/gH9/gIGDhoyMjIyMjY+QkpOTk5KSjYyMjIqHioyKh4eJiYWCiouIiYWJjpCNjo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6NjI2NjI2LiYaHh4eHiYqLjY6NjYyNjY6OjY2OjY2NjY2NjY2NjY2NjY2OjIyNj4+OjY2MjIyLi313dXd5enp7e3p+fn5+fn5+f35+fn5/f39+fn1+f39/gICAf3+AgYOFj5KRkJGSk5OTk5OTkpKLi4uLiomMiouLiYuKhoeOjYiIjI6OjIuMjIyNj46Njo6Ojo2NjY2MjY2NjIyMjIyMjIyMjY2NjYyMjI2NjYyMjI2NjIyNjIyMi4yMi4yMjI2MjIyMjIyMjIyMjIyLi4uLi4yNjY6Sk5OSkpSRkJOVlZSTk5COjo6Oe3Z2d3h6ent7e31+fn5+fn5/fn5+fn5/f35+fn9/f39/gIB/f4CBgoSNkpKTkpOSkpOTkZKSkoqJioyJi4qJjIuKioiHiYqKi4mKjY2Mj46Nj5KUlJOUlJOTkpGSkI+Ojo2NjY2Pko+OkZGOjIuKioqLi4qKi5CPjoyMjIqKioqKioqKiouKioqKi4yLi4uMjIyKiouLi46RkpOTk5SUk5STk5SUlJOTk5KSkpKSk5F6dXZ2eHt7e3p6fX5+fn5+fn5+fn5+fX5/fn5+f35/f3+Af39/gIGChIuRkZGRkZKSkpGRkpGRiYmIiIqMiYiJiYuJhoSJhoyKh4ySkpKTk5OUlZWWlZWUk5OUlJSUk5SUlJSVlZWVlZWUlJOTkY+QkZKQjoyRlZWVk5KSjo+QjYqKi4qKi42OjY6RkpCRkpKSkpGRkpKSk5OTk5OTk5OTk5OTkpOSkpKSkpKSkpKSj3h1d3l6e3t7ent9fX19fn5/f35+fX5+fn5+f39/f39/f4B/f3+AgYKEi5GQkJCSkpKRkZGRkZGIiIiIi4uJg4eLi4yMiIeHjYyNkpSSkpOTlJWWlpaVlZSSkpOTlJSUlJWVlZaXlpaWlpWUk5SUlJSVlJSUk5OVlZWUk5KTk5OTkJGSkZGSk5OTk5KSkpOSkpKSkpKSkpKSkpKSk5OTk5SUk5OSkpOTkpKSkpGRkZGPdnJ3enp7e3t8fX59fX1+fn9+fn9+fn5+fn6Af39/f3+Af3+Af4CBgoSKkJCRkZGRkZCQkJCQkIeHh4eIiIiFi4+KjI6Njo+OkJWUk5OTk5SUlZWVlJSVk5KSk5KTlZSUlZaWlpaWlpaWlpSTk5OTk5OUlJOSk5SVlZSTkpKSkpOTk5OTk5OTk5KSkpKSkpKSkpGSkpGRkZGRkZKTlJSUlJSTkpGRkZGRkZGRkZGRkYx0c3d6ent7e3x9fX1+fX5+f35+fn5+fn5+fn9/f39/fn9/f39/f4GDhIqQkJGRkJCQj4+Pj4+Ph4iKi4yNjYuOj42Mjo6RkpGSk5OSkpKSk5SUlJKSk5OTk5OSkpOUk5OTk5WVlZWUlZWUk5OTk5KSk5OUk5KTlJSUk5KSkpKSk5OTkpKSkpKRkZKSkpKSkpKSkpKSkZKRkZGSkpOTlJSUk5OSkZGRkZGQkJCQkZCRinN0dnp8fHp7fXx9fn59f35/f35+fn9+f31+f39+fn59f39/gH+AgYKDipCQkZGQj5CPjo+Pjo+Oj4+Pj4+Pj4+PkI2OjpCRkpKSkpKRkpKTk5OTkpGSkpKRkZKSk5OSk5OSk5STk5OTlJOSk5OTk5OTk5OSk5OTkpKSkpKSkpKSkpGRkZGSkZCRkZGRkpKRkZGRkpGRkZGRkpKSkpKSkpKSkpKRkJCQkJCQkJCQkJGGc3V2e3x8e3x9fX1+fn1/f35/fn5/gH9+fX5/fX5/fn5/f3+Af3+BgYGKkI+PkI+Pj4+Pj4+Pj4+Oj46Oj4+Pj5CQiI2PkJGRkpKSkpOTk5OTkpKSk5KSkZGRkZKSk5KTkpGRkpKSkZKSkpKSkpKTk5KRkZKTkpGRkpKSkpKRkJCQkJGRkZGQkJGSkZGRkZGSkZGRkZGRkZGSkpKSkpKSkZCRkZCPj4+Pj4+Pj4+PkX9ydHh8fHx7fHx9fX5+fn9+fn5/f3+AgH99fn5+f39+f39/f4CAf4GBgYqPj4+Pjo6Ojo+Pj46Ojo6Ojo+PkI+Pj4+GjpCQkJCRkZGRkZGRkZGQkJCQkZGRkZGRkZGRkZGQkJCRkZCQkJGRkZGRkZGRkJCQkZGQkJGRkZGRkI+PkJCQkJGRkJCQkJCRkJCQkJCQkZCQkJCQkJCQkZCQkJCPj4+Pjo+Pj46Ojo+Pj4+PeHJ2eXx9fHp9fH19fn5+f35+f39/f4CAf39/fn5/f35/f39/gIB/gYGAio6Ojo6NjY2Ojo6Ojo6NjY2Oj4+Pj4+PjoiQkZCPj4+QkJCQkJCQkI+PkJCQj4+Pj5CQkJCQkJCPj4+PkI+PkJCQkJCQj4+Oj4+QkI+PkJCQkJCPjo+QkJCPj4+Pj4+PkJCQkI+PkI+Qj4+PkI+PkJCQkI+OkI+Pj46OjoyMjY2NjIqDiYhzc3Z5fX58eX18fX1+fn5/fX5/fn9/f39/f4B/f39/f4CAgH+AgH+BgYCJjY2Ojo6Ojo6OjY2OjoyNjY6Ojo6Ojo2NiJCRkI6Njo6Ojo6Ojo6Pjo6Ojo6Ojo6Pjo6Ojo6Ojo6OjY6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Pj46Oj4+Pj4+Pj4+Pjo+PjY2MjYyNjoyLi4mJiYiFhYSDgoKEgnR5fXp4dXJrZWltb2xmZmdncHNzd3l9fnl6e3x9fX1+fn59fn9/fn9/f39/gIB/f3+AgIGAgIB/f4CBgImNjY2NjY2MjYyMjIyMi4uLjYyMjIyMjIyGj5GRjIyMjIyMjIyMjIyMjIyMjIyNjY2MjI2MjYyMjY2MjIyNjY2NjYyMjI2MiomKi4uJh4KAh4iEgXt6gH57fXx8fXlzcnJycnV1cG1ramppZ2NkYV9bXF1eWFVXWFlTS0VJSkpLTE1PT0tgdHR3eX19eHp5e3x8fX5+fn1+f39+f35/f4CAgH+AgICBgYCAgICAgIGAf4OEhYSFiIuLjYyMjIuLi4yGiYqKioqKh4OOkJGNiouLi4uMiYmKioqKiouLi4eDi4qIiYmGhYWEhIeJiYWCg397fHl6e3pzcHFxcW1samdsbWdlZmVmZGNlZGVkZWVlZWRkZGNhYV5dXFpYWFdUUFFSU1JTTU1KSUZESEpHR0hHR0xOSWdzdXh5fXp4d3l8fHx8fn5+fn9/fn9/f39+f4CAgIB/gICBgICAgICBgYFnXmBjYWNucX17ent/fXd8fHZ4ent4eHpvcHt4eXt8e3h3e394dXd0dHZ0dHZ3dXFycW5wcnBnaGtsbm9tamlpaGhlZWRkZF9gYWJgYF5dWVhaWltdXV9gX2BfX19gYmFeXl5eWVldXF1bV1dWUlRSU1NOUUpISUZERUhMTEhGR0lLSklNbXJ0eHp7end3eXt6e3x+fn1+f39+f35/f35+gIGAf3+AgIGAgICAgICCgWdYW1pZXFtcY1xaXF5ga3FtcHBvbm5vbmtpbmxrbG9qaWtraWpraWdmZ2dnaWhnbWdqZ2hlaGdjY2JhYmBgXVhbW1dYV1RWUVBUU1NNSkxLTExOTk9UWFhXVVVUUlBQTU1QT05LTE1QUU9MTEpHSUlHSEhJSEhIR0ZHSEpKSEhISUlISVZwc3V5ent5dnZ5enp7fH59fX5/f35/fn5+f3+AgX9+f4B/gICAgICAgIGBbFtYVlZWWVlaWVlYVVZoamxubmxra2poaGloZGVkYlxiZl9fYGNfXF9dYF1eWl5dWVleYmFeXlpZX1xYV1NOTUxLS0tMSUtNTktKS0tMSktQTEtLRkdHSUlGR0lISUZFSEdGRkVERUVEREVJSUlHSEdIRkZLTUtJSUlIR0hLTU1LTExMVXFzdnl6e3l2d3h4ent8fn1+fn9/f39+f3+AgIGAfn5/f4CAf4CAgIB/gYJoUlRVVlNVV1lZWVdXV1tbYWNfXlxbWFZWWVZSVFJRUVVUU1NTUE1KTU5QUk9NUFFRUVFSVlZRUVFUUFBOTk9MSk1MS0xKSktLRklJSkxJR0pISUlFR0dGRkVFSElKR0ZHRkZHR0hKR0dISEpMSkpLSUlISktLSkhKS0pISUtMTU9QUEtUdHR1eHp6eHZ2d3d6enx+fX5+fn5/f35+fn+AgYB/f3+AgYB/gICAgH+AgmlQUlRXVVRWWVdYWFpbVFRTUlBRU1FRUU9OTlBQUU9MTlBPTk5NTEtNTk5QTU9QUFJRUE5OT05PTk9PUFFPTk5PTk5QTk1NS0lISEpJSUlJR0ZHR0dJSkhJSEhJSEhHSEdISElISUxLSklISkpJSkpIR0pMS0pJSUhKSktMTk1NTU9RTFVzcnN3enl3dnR2eHp7fX19fn5+fn9+fn5+gICBgICAf4GBgH+AgICAgICBbE9PTlRZVVVdW1lXV1hOTUpKSUZKT0xKSkdJSk1NS0pMTUpHSUlJSktMRkRGSktLS0hKTExMT01MTE5PT09NTk9MTk5OUFBPTE1MTk1MTEpJSEdJSElISElJS0xLS0pJS0pJSklJSUlJR0dKSUdJSUpKTk1OTEhJSklJSk1PT01MT1JOWXBwcnd4d3d0c3R3enx+fX5+fn5+fn5+fn9/gICAgICAgYCAf39/gICAgIFvS0pNTlFOTlVXVlZSU0lFQ0VFUkREQT5CP0RAQD5CREFAQURHRkVIRUJBQEBDQ0RFQUNFSEtPS0lJSkhHSklKSUlLSkxQTk1MTU1MTU1NTElIREZGR0ZGRklKSUlLSkhMSklKSkpJSEhKS0tIRkdJSklLTU5OSktPTUxLTU1PUE5QT1BgcG9yd3h2dHJzdXd6fX19fn5+fn9+fn1/gICAgICAf4CAgIB/f3+AgICAgXNQUE5OUE1KS1BSUE5RQ0RCQUZRRT1DPT9FSDk6Oz0/PTxBRkA+Ojw+PjxFRD4/RUE/QEFAREVHR0dHQkRERUZFR0dHR0pHSEpLR0NER0pHQ0RFQUFDR0hHSEdISktKSElMS0lISktLTU5MTUxMSkpMS0lLTU9PUFNRT1BQTk9QUlFNUGdwb3N2dXRycXV4eX19fX1+fn5+f4B+foCAgH9/gIB/f4CAgH+Af4B/gICCdlRVUVFQT0xNUFBOT09BQkFAQkE/Oz48Pj8/Ozg5OTs7OkA6Oz48Ozs8PEhMPT1BQT9CQz1BRERGQkZGREdJSEM/QEBAQUFCQUE/Pjw9PkFAQD8+P0BFR0dHSUtMTk1OTUxNTUpLTVBVU05MTlFOTk1OTU1NTk9OTk1LS05OTk1OTkxUbnBwcnR1c3Fyd3l5fX19fn1+fn5/gH5+gICAgICAgH9/gICAgH9/gH+BgIJ4UVFSVFJTUVNTUVFST0BAPT4/PD8+QEE/PT45Ozo6Ozg5Ojg3Ojw5Nzg7Oz49Ozs6ODpAQEFCP0E/Q0ZEQkNDPzs+PkBDQ0E/Pj9BPkBAQj9APD9CQEFDRUVFSktQT1BPTU1OTExMT1JRUFJOTExPTUtOT0xMTEtMS0tKS0tKTU1LS1xxcXF0c3VzcXN4eHp9fn1+fn5+f39/fn5/gIGAgH+Af4CAgICAf4CAf4CAgXxSTU9RUFFSUlRSU1NOPDs8Ozs7P0BBQkA9PDk8PTw5Nzk6Ojk4OTo6Nzg6OTo7Ozg3ODk7Ojg8Oz1AQUA9Ozs+PD09QEJDQT9BQkE9Pj09Oz0/Q0RCQD9BREJFR0pKSkpKTE1MTExNTExOVVNLTE1USVBKSU1KSUpLS0pJSEdKS0lKZnJxc3RzdXJydnl5e31+fn5+fX9+f39/f36AgICAf4CAgICAgIF/gIF/gYCBgFZMTlBQTlJRUFBRUU44PT88PDo9PkFAQT8+PkA/Pj07PTw+Pz08PTs6PD09PTw8PDw7PDo7PD49Pj9AQUA+P0E/QEBBQEBAPT8/PTw6Oz09PD9AQUJCQUBCREZGRkdGR0dISUtMTExLTEtKS0lKSk1MTEpMS0lISUxMSklJSElLR01tcXF1dXV1c3V4eXl8fX5+fn5+fn5/gH9+gIB/f39/gH+AgYCAgYCBgICBgYCCYUtPT05OT1BPT1BQTzo8Pjw9Oz8+PkFBPz0/Q0NDQD48PT9APz89Oz49PkNFPz9APTs9PT08Ozo9PkFBPz5AQD9BPz89PD48PTs7PD0+QUA/QD5AQ0NEQkRFSEVFR0hISEdGSUpJSUlJSUhKSkpKTEtKSklJSEhKSktMS0lLSkpIVnBwcXNzdHR1eXt7e31+f35+fn5+f39/f39/f3+Af4CAgICAf4GBgICAgIGBgIJtTFBRTk9QTk5PUFBPPjw8PT4/P0A+QEA/Pz9DRUQ/PTs8QD46Ozo6OTc6PDk9PUA9Ojw7Ozw7ODo7Pz49PD07PEA9PTw8Pjs9PD0+QUBCQUBAP0JEQ0RFRkZGQ0VHSElJSEhJS0tMTUpKSUpNTUpLSktJSEhISEpJSktKSk5MSUlfcHFycnJ0dXZ6e319fX5/fn5+fn5/f35/f36AgIB/gICAgICAgYGAgICAgIGAgnZNTk5NTk5MTE5QT0w+QTw8PT8+QkM/P0FBQUJBQD08PTs+PTo6Ojw6ODo4ODo7PT8/PDs7PDs6Ozs+Pz89PDg6Pjw9Pj89Oz4/QEJDQkJDQ0FCQkFCQkRCQkRCRENGSUdGRkhJSUtNSklKSktMSkpJSkVESUlGRkhISUpKTEpGRmdwb3FxdHZ1d3t8fH18fn59fX1+fn9/foB+fn+AgH+AgICAgICBgYCAgICAgICBe05JS0tMTExFSUxOTTw/PDw9PkBAQUE7QkNCQ0A/Pz9APT8/Pjw+QD89PT0/Pj0+Q0Q/Ozw9PkA9PT5BQ0A8OTtBPz4+QT07P0JAQkNCQENDQUNBPT0+QD0/QUFBQENFRUBAQ0JDR0hFRENGRUZGR0VEQEFHR0ZDRkRHSEpHQz5IbHBwcHF0dXZ5fHx9fHx+fn1+fn5+fn5+f36Af3+AgICAgICAgIGAf4CAf4CBgIF9UUhLTU1NS0pLTE9RQD8+PkFBQEBBR0FCRENEQT9AQEA/PUA+PD0/P0BAQENAQD9AQD49PD1ARUFCQkZIQz08QERDQUE/Pj1AQT4+Pj88PkBER0VAPkBBP0BDRkVDQkJDQEJEREJERUFCPkFCQkFCQEA9QUJDRENDQUNFR0E/PVZwcHFwcnV1d3p8e3x8fX9+fX19fX1+fX5+fn9/foB/f4CAgICAgYCAgIB/gIGAgX5SSEtNTUxLS05OUlVEQkBDQ0FBQkBCQ0BAQUFAQUA+Oj48Pz08Oj08QEJCRUA/P05hX0pAQ0VJSUlJTU1LRUNGR0hFR0VFRUREQ0E/QD4+QkZKSkdERUZGRkpOTktKSUdHSEtMSkdHQ0REREVEQUJCQ0BDREVEREVERUZDQkFEZW9wcXF0dnV4e3x6fHx+f319fX19fn59f4B/f39/f39+gIGAgICBgICAgH+AgICAfVJJSUpKSEpKTE9SU0dGRUdIREdIREA+PDs+QERFRD88QURFQ0A9SERBREREQ1d1homKflhHSEpMTE1PT0xIR0hHSElJSEhHR0hIRUNFRUVFRkhKSkZFR0lKTU9PTU1LSktKTU5LSUhGSElIR0ZFRkZGREZIR0VFSEhGSEdIRlFubnBxcnZ2eXt7e3p9fX5/fX19fX1+fn1/f39/fn5/gH+BgYGAgICAgICAf4GBgIB8UEhHSElGR0lKTU5OSkxJSUpLTE5KRkNBQUNGSkhJRkhISkhGQUBfaERCQVV0h4mHh4aHgldJTE1MTU5MSkdHR0dER0dHR0ZIRkhFQ0RERkVEREhIQ0NDR0pKS0xMTExMTElKS0pKSUlJSEpISEdISUhHR0hGRkZISklJSUlIXW9vcXJzd3d6e3t6e319fn59fX19fX5+fYB/f39+fn+BgIGAgYCAgICAgIB/gYCAgHxNR0ZIRkVGR0dKS0pMTUxLTU5NT0tJSEhKS0tMS0pLTEtMSFRfaHF7V05shIeGhoaHh4eHfFBLTEtIR0ZGREVDQ0BBQ0NDQ0ZGRUJAPj5AQUFAQkQ/Pj9ERkhERUdJS0lJR0hJR0lJSkpJSEZKSkpKSUpJSkpKRklMTEpKS0tmb3Bzc3V2eHl7e3t8fH1+fn19fX19fn59f39/f35/f4CAgICAgYCAgIGAgICAgICAfU9GRkdGR0hHRUZHR01NTUtMS0lHQ0NDRElLS0tLS0xMYFhnf4SGhH55f4aFhISGhoaHh4aKdUlJRkI/P0A/Pz88PDw+Ojo8QUFAPjw5OTg8PD07Pjs5Oz9BQkFBQ0NDQEFCRURCQ0ZISUhISExNTEdJSk1NTk1KSktLSkxNU2xvcXRzc3d5e3t7fH19fn9+fX19fX1+fn5/foB/fn9/gICBgIGBgICAgYCAgIB/f39+UUZFRkdJSUdEQ0VGTk1MSklIRT85Oj5ARUhHSUhLTE9teYOEg3+AgYSEhIWFhoeIiIiJiYyOZkJCPTg4Ojo5ODc4ODk2NDc5Ozw6ODU2Nzc4OTc4NzY4OTs7PD5AOzk5OT09Pjs7PUFERUhKTUxMR0lIT1JRUFBOTE1NT1Fdb3BydHN1eHp8e3x8fn9+f359fX59fX5+f39/gH9/f4CAgICAgYCAgICAgICAgIB/f39RR0ZHSEpIRkVGR0hMTEpJSUdDQjU2OjxDQEJGSEtIUHWCgYCCgoKDg4OEhomKi4uLiomKi4yJVDs4NjU2NzY2NjQ1NzYzNDY4Ojg3NjU2NTY3Nzc3ODo3Nzc4OTs3Njg5OTg5ODc2OjxAR0ZJRklGRUZPU1JTU1JPUFBSVGVwcXN0dHd5e3x7fH1+fn5/fn19fX19f39/f3+Afn+AgICAgICBgICAgICAgICAgH9/flJISEhJS0lHSUpJSkpLREVIRUJANTc4OD06PERCREVNdoF/gYKDg4KDhYmKiomJioqKiouJiYqBSDY3NjQ2ODg3NDU3ODQ2NzY5OTc2Njc2NTo6Ojo6PDg5ODk3Nzc3OTo6ODg3ODU4ODtBPT4+QkE/QUtMT1FQUU9PUFFXa3JydHR1d3p7e3t9fX5/fn9+fX19fX5/f4B+fn9/f4CAgH9/gICAgICAgH+AgICAf39+VEhHSUlMTUtKS0tMSUg/QEFAPDo1Nzk4OTc6QTk8RE54goKDg4SEhIaJioqIh4eIiYqKjIqJiYx6Pjo4ODs8PT45Ojs8ODk7OTo7Ojk5Ozo5PT09Pzs7Oz06Pjs5Ozs8Ozw8Ojs8ODo6Ozo5OTk8Pzw9QUJESUpNS0pLTFdvcnN1dHZ4e3t7fHt9f39+f359fX19fn9/f35/f39/f3+Bf4CAgICAgICAf4CAgH+Af35URkVGSUxOTkxKSk1CPzo7PDo4OTk4OTk5OTo+PUBAT3+Cg4SEhoaHiYiHhoaGiImIiYuMi4mKioxsPDs+QkNFRUFBQUI+QEJAQD89Pj5APz4/QD9APT0/Qj9BQT9BPz1AQEA+P0E8Pjw7Ojs6OTs/PTs7PT1BQUNBQkNBWHFxdHR0dnl7e3x9e31/fn9/fn19fX5+f35+fn9+f4B/f4CAgIB/gIGAf39/gICAf39/flJFQ0FHSk5PTElHSzo4Ojs5Ojo8PDo7Ozw7PT5BQT9ig4OFhIWEhomJiIeGhoaHiImKi4uKioqLiotePkRHSUtKSUZHR0RGSEdFQ0BAQ0VDQkBCQ0I/QERIRUNFREZFQUZFRkRGRkRAQj49QD49P0A+Pz8/Pj8+Pjo7PTxgcXJ0dHV3enp6fX19fn5+f39+fX19fX5/fn5+fn5/gH9/gICAgICAgICAf4CAgIB/f4B+UERAPUNIT01HRkJEOTc6Pjo8Oz4+Pz88QD5BQERBTX+DhIWGhoaIiYiIh4aGhoeJioqLjI2MjIuKiohXR0xMTUtOSklLSElKSklFQ0RGR0ZEQ0VGREJISUtIR0dGSEdFS0lLSUtLSkNGQ0NEQkFBQ0JEQ0NERENBPTs9QGhwc3R0dnd6eHt8fH19fn5/f359fX1+fn9+fn59fn+Af3+AgH9/gICAgICAgICAgH+AgH9PQT49P0RMS0BCQkE5Nzw+Ozw6PT8/QT1AQERDR0JqhYKFhYeHiImJiIiHhoaGiIiIiYqMjYyMi4uKjH9QTVBNS05LSkxJSUpIS0dFR0hISUVFSEZGRUxMTUlKR0dISUpOTU5MTE5LSEZHR0VFQ0ZGRkZERUhIRkNBP0BMbHB0dXZ4eXl5fHx8fX1+fn9+fn19fX1/f35+fn5+f39/f39/f3+AgICAgIB/gICAgICAf1FBPz4/RkdHPTxAQDg3PDs7PDk+QD4/P0FCRURLVn6DhISFhoeHiIiIiIiIh4eIiIiJioyNjIyMjIuKjXFNUU9NTExLTEpJSEZKSkVKSEdLSkhKR0dHS0xOTExISElKTVBOUE5NT0tJR0lKSElESUhIRkZHR0lGQ0JBQ1VucXV2d3l7eHl6enx8fX5+f39+fn1+fX5+fn5/f36Af4B/f3+Af4CAgICAgICAgICAf39/VERBQUJHR0I/OD9AODo7ODw9Oz1BPT4/QURFRk5uhIOEhIWFhoeIiIiIiIeGiIiIiIiJjIyLjIyLi4uLi15SUlBNTk1LSkdGQ0dKR0xKR0tPTEtKSk1NTE9QTkhJS0xPUVFQUU9PSklKSkxKTEZHSEdFR0lGRUVCQEJCXHByd3h5enl5eXp6e3t+fn5/fn59fX19fn9+fn9+f4CAgIB/f39/gICAgICAgICAgIB/f39VRUNFRUdHRUQ7P0E7PTw5Pz0+QEJHRj9ERkRITXWGg4ODhISGiIiIiIiIh4eIiIiIiIqLi4uMjIyMi4uNfFdWUlJUUk9MS0pFRUZLT05PV1ZRUE9RU1JOU1RPTVNMUFNVV1JTUlBMS01NTUtOR0dKRkZISkRERUVCRENjcXV5eXp6ent6e3p7fH59fX9+fX19fXx9fn5/gH9/gICAf39/f3+BgYCAf39/gIB/f39/f1VGRkdHR0dIRj5AQj0/PT1CPkJDRlZNQ0pLSExPeYaDhYWEhIeIiIiIiIiIiIiIiIiJiouKioyMjIyOi4uLZ1ZWa2FFUlFRUEo7O1FTUmB1XVVWVFZZWVNZWFJaZlBVV1pdUlRXUVBOUlBQUFFLS0tHSElIRUZJSUlISWpzdnl5enl6e3t8ent8fXx9f359fX19fX1+f39/f3+AgIB/f39/f4CAgIB/f3+AgH9/f35+VEhKSUlHR0ZFPz9BQEVCQ0ZFREVMWFJMUVFQUlN6hoWHhoWGh4iIiIiIiIiIiIiIiIiIlJyMioqMfWGKi4uGbFtkVTpYWFhTUD9AVlVZXGRgVllicl5dV11aVkVRWVpcWV9UWWdSVVZYVFRWU09PTUpMSklJTE1LT01Tb3R2eHl4d3p6ent6e3x9fH5/fn1+fX19fn1/f39+f4CAgH9/f3+AgICAgH9/gH+Afn9+fn5WSkpJSEdGRERCQT9ITUlNUEtJS1BUU1JWV1ZXVnaFhIWFhYWGh4iHiIiIiIiIiIiIiImcnaCPiY5nO36MiYqLeW5wWFpbWlJTUldWVFpadYNZVX2QYVxYXV5XSVZdXVtbX1lIWVhZXF1YWFlXUlFNUFFNTU9TUVFVUmFzc3Z3d3Z4eXh6e3t8fX19f39+fX59fX1+fn9/gH9/gIB/f3+Af3+AgICAf39/gIB/gHh5fVlNS0pJSUZCREBBOlBRUVdYUFBPUVNUU1dXV1hYbYGCg4WEhYaHh4eHh4iIiIiIiIiIiJaanJeIioFuhomIh4OKfmZZWVxZU1ZUV1JRV1ZjloBRZXJYWldfaFBgZlpbWFxoYkdPWmlnXFtcXV1XU05TUFBRVlZWVllab3N1d3Z2dHd4eHt7fH19fX5/fn59fn18fn9/f3+Af39/gH+AgH9/gICBgYB/gH1yfX9/b3R8XVNPT01LSkVDP0A7UFBaWltTU1FPUlJRVVJVU1ZfdXiAhYSEhYaGhoaHh4eHiIiIh4eIh4ORjomJiIaFiIiGfYB7XFBWWFRSVFJRUUxPTUtmeVpdVFlVVl1aTFRaVFNUXlpYV1dXemtYWlxcXlNQUFBJTk9XVlhbWmRxdHZ2dHR2eHl5e3t8fH19fn99fn1+fX1+f39/gICAf3+Afn56eHd2c3V7f3+AgHRrfn5rcnleXFZVU1JPS0ZDREFNXoNsVlJTTk9RT1FWUlNSUlRjZHaAgoKDhISEhIWFhISDhoaGhoeIhn6JiYiHhoOHh4d5bXFWSUtOTktNS0hKREZIRUM+U2NVf1JQUU5LUlRRTU9ZUU1OUVNVVU1RU1JQTkxMSENJSFJTVFpdbXJ2dnVzc3d7ent7e317fX19fn19fX59fn9/f39/gH99fX5+f39/f4B+e3Zzd31+fmR1fWlxdF9kXV5bWVVRTElMSWFsknRQUVNOUVJRUltSU1JRUlVVYnN7fH+AgYKBgX99e3uAf4OChYaHgoaGhoGEgYaFhnVfXUtDPkNDQ0NCP0RQQ0RAQz5CSEdWQElOTUddaVFIRk9GREVGSEdIQkNIR0hKR0RCQUNATlBNUmR0dXZ1c3R1enx6e3t7fH19fHt+fX19fn5/f3+AgIB/f3x8fX+Af39/f4CBgH12dHt/bWh8Z25xZmllZWJcWFNRUFVSc1dlW09PTkxRU1FVWVNVUVFUUk9WYGtsc3Z6e3h5dXJuc3RzeXh+foOAg4KCgIKAgoGBa0xHPj46Oz5APz8+PmpQSmFFRkhJRUI/SE1NR01RVUpCRT8+PD08PT0/PT9BQ0I/Pzw9Qj5KTUZVb3V2dnN0dnh7fHt9e3x9fX19fH59fXx+fn9/f4B/f39/e3l3eHd2dnh7foB+fXt4dnx1YXhnbHBqbGppZmBbUVFaXFleSUpQUU5LTFFSUVRWVFdRUVdWUFhbYl1hZ21tbG9raGBucmptbHF1e3p9enh6fHx4d3hkQkBAQT06QkNCQUNBW1xOe05PT05LTE1PT1BMS0xXTklHQEI8OTc3NTk5PTs7Ozg5ODk/O0FHPlx0dXZ2dXZ3eXx8fH18fHx9fn58fX19fX9/f39/fn9/f314dXd6e3p3eXh1d3t8eXh1eXdjcWhpcG1ubW1oZl5PUF5cWklHUFJRT01QUU5RUlNWWFNSWVROWVpbV1lcX19gZWBdXnF3a15gZ2t3b29sam9ubmxmYllHRkZIQkFGSUVFRkNMUU9hV1JYUVBTU1JVW09PUVZQTUlDRj46OTY1ODY5Nzk6MzY1Nzk1PEI9ZnR1d3h3eXl7fX18fHt8fX1+fnt9fn19f39/fn5+fn9/e3d1eX18enh8fHx8dHd2d3Z1d2tuaWhxbm9vb2prYFVXXlpXTUtUVFNQUVVPTFJTVFdYVFRYUUxXWVlWWFhWWFldV1dYaHNrXVZgdGthYV9dZGBfXllVUE1PTkxJR0pLSUhGQ1BPU1pXVFROUVNZU1xlVU9TVFFOS0lIQz9BOTk4ODk3ODg0NzU3ODU5OEducnV4eXp7e31+fX18e318fX5+en1+fH1/f359fn59f358dHR1e3hycW9vbnR4cXJzeHZ1cWZkZ3JucHBxbm1kXV9fWVdPUFdWVlNUVk9PVVZXWFlTVVRMS1NVVVVVV1BUVVdUVVJdbl5STllgW1ZZO0RVV1RbZkpMUFJST01NTk5OTEpGUFBVWVNUTkpOT1RTVFxWUlVTU09NTElISEY/Pz06Nzg3NjU5OTY3NjY1V3FxdHh5ent8fX59fnx8fXx+fX15fX18fn5+fXx8fX1+fXxydnF4eHJ1dXFxbnBwb3B1dnRuamRkanBwcXJwbmZlZGNcXlJUWlZXVFNWVFJYWFlZWVJVT0pHT1BPT01SSk9QUFBOTk9UTE1JUFBTVFUyPFhNSUFRPWNgUVNRUE5QUVBOTk1QTlRSUFJMSUxLT1FQUVJTVFFTT0xNS0xMSENCQT06OTg3NjtCNDU2NjtlcHJ2eHl7fHx9fnx9fH19fX18e3h8ent9fX58e3l9fH18e3B1b3d1cHV0b3N2cHFxcHV1dmNqZ2VXaHRycnFuaWlocFZWVFVYVVZVUldWVVpZWFdVUVNGRUFGR0dIRkpESEpIR0VITEhLSUdMTVBNRy9FX1I+M0A+am9hUlJRQEZUUU9QUFFOUU9QT0xKTExPUE5OUFFRTlBPSk1NTUtHRUVEQjs9PTw5PUc2Njc3RG5xdXd6fHt8fX18enx8fX5+fXt5dnh3eXl8fXp6dn17fHp6b3Fud3JwdnFtcHNwb3Bzc3N0ZmdgaFpXa3JzcmxtbWtuYmVQU1RSU1VPV1ZWWVlWUVFRT0A+Oz0/QEJBQ0BCRURBQEdIR0hGRkhKTUxER0NPUkM4RU5TXWdTUVNBR1VQT1JRUE1NTkxKTEtMTk9PUU1PT01ITEtJS0tMS0dGRkVEPEFBPjtARTs8ODlUcXN1eXt7e3x8fHt5fHp6fn58e3V0dXJ2dnp6eHpyfHt8eXltcW94cnF1bm5xcm9vb3Rzc3J1dGtnZ15lam1wa29xbWltY0xPTk1RU0xUVVRXV1VMTEtIPTk4Nzs/QT49PUFAQj0+RUhGREZGSUdKSkBGQUFARkhFSk9IUVJhXFFQUk5TT09QTExPTUtNTE1PTltWS01RT0dJSERJSkxMS0ZGRkQ/Q0M+PUJHP0I+QWRxdHd7ent7fHt6end8d3l+fnt7cXN0cHJzd3R4eHN6e3l2d2xxb3ZxdHRsb3Fybm5vc3ZydHNycmtsZW5zaG1ubWxtbGprSUxISE9RSlFTUVRTT0tIQ0U9OTg3OT9CPzs+QUBAPkFESUVDSEdJR0lFQkI/PjxDQkFHSURNT2FlUE1PTldLTE5LTE1NTExLTk5TZE5KTFJJSUlFQUhKTE1OS0dJRkJCQkA/RUZFSERMb3B3enp5e3t6fHp3c3h0eHx8eXpucXJtbm9ycnZyc3h8eHZ2bXBtc3B1dGxwcHJvb29ydnVyVlZucWdseYRqbXFybm5qaG9ISkNHTE1JTVBNUE9HS0U/Qj05OTk6P0I/PEFCQUFEREdLRkRJSUdHSENDP0I/P0BBPkNFQ0tOUVRLSklNVEZJSUpMSktLSUpMTU9QUlBLR0NMR0NDSkpMTU9NSUpJR0NDQ0RJSk1MSVpzbnh5eHp7e3l8dnJwdXJ0eXl2eGpxb2psbG50dG1zdXtzdHhyb25xb3ZzbnBvcnBvcHN0eWpOYGdzanR8eWdvc3FpcWhlcUhLQ0ZISEdKS0lKTERHQj0+PTo6OjtBQj89QkJDQ0hGSkxKRUlJRkdHQ0M7QUBCPkBAQ0VDSU1PR0hLRkhLREhJS01ISkxISUpMSk1dUklIRE5HQkVLS05NUE5LTUpLRkdHSk1OUU5MY25qd3Z2e3h7en1xbWxza3B0dHR1aHBtamlra3RwbnR0eXByeXRvcnFvd3NvcXB0cnBydXR5a05WbXVscXt2aW5vaWp0aGRwRktDRkVHREVFRkVHQ0NAPTw9Ojs6OkBEQD5CQ0VFSUZKSkxGSUlHRkZDQjtCQ0M+QENDQ0RHTE5IS05IREhFSUxOTUdJTEdGRklJTE5LSkhFT0lDR01NTk1QTk9PTUxJSElPU1FSTlJmZ2Zyb3N4dXt6fGxoam9la3Btc3FmbWxoaWtsdG1wdXR3cW94dG90c3J2c3BxcnRzcnR1dXZ2WFZ1dWtvdHJrb3ZsaG1lX3BHSUNFRkVCQkFFQERCPj8+Ojs7PTs9P0NBP0FDRkdKR0pJTEhHR0dGRUM/PUVFQj5BQ0NDREdJSUdNUElGRkdLTk9LRkhJRkVERElJSEtJRkhQS0RKTUxQTk9OT1BOSkpITVJVVVJPV2RhYW1ncXJvc3l6Z2VoaGNpbGdxbGZsbWdpa2xzbXB2dXRwbnZyb3Nyc3V0cXNzdXRzdXZ2dnl2dXR2bGt1dW1ydnFsbmxlck1HRUVHQ0FAQUQ8QkE+QT06Oj0/Oz4/QEI/QEJFR0pGSkdJR0ZGRkVEQ0FBRkZDQkJCREVFR0dIRkxQTElPSkpMS0lGSEVGRURDSUhIS0pHS1JNQ09PTlFQT09OT09LS0tQVVdWVVNZYF9daWFuaW5ocnNiZWZmZGloZm5pZm1taGtrbXJpcXZ1c3Ftdm5vcXJzd3Nyc3R1dnZ2dnd2d3Z2dHd1a3N1bnV0c3Bya2tzTUZHRUdBQkBDRDxBQUBDPDg6PT46Pz0/Qj9AQERGSEVIRkZIRkVFQ0NEQkRJRkNHRUFFR0VGRkdFSk1LSFFNSktISElFRkhIRUNJSUpLTUtQU05EUlNRUVJOT05OUE1MTlNXVldYVlheWl1kYGhiamlna19kZWZjZ2dna2dna21rbWxwcWd0dHVyc252b3FwcnR4cXNzdXZ1gpF5dnZ0eHV1d3hub3VvcnN1cXFpcHpNR0dHSEJCQkVFPEBDQkQ8Nzo9Pjo+OkBCPj8/Q0VGREZEREdFQ0VDREVGRkpFRUlHQkdIRkdGRUNGSkpHTUtMS0hKS0ZJSEpIRUtLTExOT1JUT0lUVVRRVFBRTU5RTk1RV1pWWllXWl5aWGFgYGBfaGVjYGRlZ2dqaGhqZmhubGxvbXFwaXV1eHJycHVwcHBydXZwdXN1dnV7fn14dnR3dnZ2d3BsdXBtc3Vub3NzeU1ISEdJREFDSEU8QEVCRDw4Oj4+PTw8QkI8QD5BQkZDRUJCSENDREVGRkdHSUZHS0hDSUhHSUdGREhLSUdLSU1LSktMSExKTUtJTkxOTk9SVVZPTFZWVFFUUlJMT1FQT1RZWllcWlpcX19eYGNeXGFja2JgZGdocoVoZ2pmam5ucG9uc3FqdHV4cnNzdHJucHF2cnF1cnV1c355jn11dXZ2dnZ4cml1cWtydGxxd3F1S0lLSEpFQkRHRTxAR0REQDk8PkA/Pj9DQjxAPkJBRkNFRENIREZERkZISEZIR0lLSkVKSEhLSEZGTEhISEpITUxMTExJTUtNTk1PTFBQUVVWV09LVlZVU1NSUUxPUlJRVltbXV5bXV5gYGFgYWVdZGBmZ2BlaGpjc3NmamhnbHBycW9zc25zd3dwdXZ0c21vcnVvcnNwdXJ2cnSBd3V1dXd2dXdzZ3Rya3Fya3J3b3dJSktJS0dCRERFPEBGRERCOz8/QUBAQERBQEI/QUNIQkVERkhFSUVGRUlIRklISkxISEpKSUtKRkpLSElKSkdLS01MSkpNTE1OTk9MT1BSVVdWTU5UVlVTUlFQTU5UU1JXW15eX1xeYGBhYWFgY2RlYmRpY2Rpamd2i2xraWhtb3NxcHFwcHJ5d3J1dXRzbW1zc21xc290dXRzcHN3dHV1d3Z1dXVlcXNrcHFqcnZwd0pMS0tMR0NDQUQ8P0VFRUM9QUFDQkJDRUFDREFBRUdDR0dIRkVJRkNHSkdHSkZJTEhJSk1LTUxHS0lIS0tOUUtSUUxTTUtOTU5QUFBUT1dYWFtOU1FXXFpTVlBOVFVUVFhaX2JiX2RhX2BiX2BmYmFjaW5pY2loaG14dm1oaW1vc3JwcXJycnZ0c3Vzc3Nua3NxbXByb3R2cnJxdXZ1c3d5d3V0dWNtdGtvcGpxdHB3TE1MTExHRUFARD4+REVGQz9DQUVDREZDQ0VHQ0JIRUJISUlISEtGREtKR0hKSElLR0pKTktOS0lMSEpNS1pmSmRcS2xSSE9NX25VbHNbcXBid2NSUGJ2dWh1Y2F2YFhucWJkdmluemZcbHRgbGtVX3d2aWpoaGZnbG1qbW9qbW5zcnBycnFyc3Jzc3J0cm5sdG9ucHFxdXVxcXN0dnZ1dXl3dXR0YGt0a3Bwa3FzcXlLTkpLSkZCP0BCPz1ERUZEQ0NCRUVERkJGRkdEREtEREpMTEpMTUdHTklISktHS0pJS0tOTE1MTExJTExMW3NiZHBebGxVTU5lcl1nZnFsbnRncGlfYVlubWJwcGJrampnb3F0ZXRub1xvdWdxTUtyeXZrYmFrZWVseG1rdmxucHNycHJxcHFycXJycnRybW1zbm5vcHJ1dHFzc3R1dXV0d3h2dXRibXVrcHBscnJxektMSUlHRUQ/QUI/PUJFR0JGQ0VERUVEQkhIR0RFS0hHS01NSk1MRkpOSEpLSklLSkpJSkxNTk1NTUtOTU1bcm9vbnBwbGtOUFFsWE5pYnRycGFtb3ZcWWxQW21tWnFta29teHh0c2lwXGBzbHFqVXV5eG9jXmtmYmdwcGppb3Bwc3NwcXBwcXJycXFycnRsbXJtbW5vcnV0cXRydHV1dHV1enZ1dGVudWtwb2xzcnJ5SktHSEZFRUJBQj0/P0VHQkdESUVFREJGSUhIRUdLSkdNTU5LTU5HTE5JTUtISk1JS0lKSk5PTk5NTE5NTFxoZHVdbHFXbE5PUW5VWmtea2x2YWxkdFRlY05sWWxcdHBraWx4and1aHBdX3NraFdiY3d8b2NgZ2hhY2l0eWtubnFzc3BxcHFwcnFwcHBydWttcW1tbW9xc3Rxc3J0dnZzd3Z6dnV0aG91bHNvbXNydHZJTUdJRUVEQ0FCPEJAQkZDR0ZLR0VDQ0hLSEhGSkxLRk1LTFJSTEdNTUhOSklITkhKSkhITk9OTkxKTU1KWnNwcG9xcW1sT1FTb1lza2dvb3Fxb210Xm5YYXRfbm9wb3Fyb291c3R0altddGN3eHJqbnpoYWFjZmFiam10dXBzdXZzcXBwcW9ydHt/fn13bGtxbmxtbnByc3F0dHN1dXR4eHl5dHVrb3VtdG9uc3N2dEhLSEpDRUVFQEA+Q0NBRkNISU1IRkNGSkxJR0ZLTUxGT0pLV1JLR0tKSk5JSUpMSUtKSUhLTU1NTElLS0tTa2JaaV5famNyclpfWmtvYGVlVWtfY1thYlFgbWhcalxuaWlkWm9lZHBdWlxrW21xY3BzbGRnY2RnYGBrbnBwb3R5cnVxb3BxbnmFiIeHhoWAdnNua21tb25xcnR0cnR1dXZ5eHhzdW5xdW53cXJ1dHdySEhGSURFREZBQEFFRENHQkhKTEdGREdLTElFRkpOS0lPSUxbUUpGSEhLTUlISkpLS0lISkdMS0tLR0hKSkxMTEtJS0xOVFtdVFBVTVFQTk9PVVJQT1FPT1FKSk5QUWRxaVRZVltbXFVZW11YXVxcY2ZhYWZiY2ZfXmZrbWhtdHlydHJvcHB0hoeGhoaFhYaHg3pwbW1sa3FzdHRydHZ0dXl5eHV2cXJ1b3ZydHN1dXNHQ0VHRkZBRUM/Q0dERUdDSUtMSEZER0tMSERHSFBLTE9LTFdNSUZFSElKSElLSExKSUZISEpHR0lFRktISUtOTElPXFdeT1xcYF5PWFlTXFxiXk1ZWk1YYVJLWWFaU2BkXWJYW2RkVlZYXFlaWFxWWVxeY19kYWFfZWhrZ210dHFxdHBxcoGGhoaFhoWFhYaGhoR9cmtpb3Jzc3N0eHl5eHl4d3h0cXhyeHNxcnVydE9CQ0RMTUJDREJESUVHR0ZLSktIRUZKSkpGRUhIUEpMTUpNUklIRUFIRkpJS0tJTEpJR0VKSEVGR0VFSkdCSU1KS1RfWWBYYGFbYFVYWVReXlpfUllcUF5cWU5fXF5TW15jX1pdYGNfWV9iW2BeW1RZWFpfXmRiYmFjZmlla3Jwb3Bwbm93hoaFhYaCe4CFhYaGhYaFf3VxcHJyc3Z5eXp5eXh4eHZyeXZ4cnF4dnR2YVNKSk1JREJCQ0ZHRUdHSUpKSUlER0tKS0ZGSUlOSk5MSExOR0hGPkdHTElLS0pLS0lHRUlFRERFQkZKRD9JS0hOW2NZXl5hX1JUU1dfYFxdWV5RWVxNVl9XS1FZW1FbX2FhXV5jYWBiYmJjY2VaUlhWVlxbXmNgX19jZWJob21tbGxsbHWFf4SDeXV8hIWFhYaGhYWGhoN9d3JydHd5eXl5f359eXV5dnZybnp3dnhYUUpGQ0dFQkVHSEZHSElGR0pHSEZIS0lLRERKSk1NTExISkpISkc/R0ZOSktLTUtLS0lHSEVEQERBSElBPkhJRk9dYVpbZF1fVFFSWF1cXFxfWktXXExSXFlJTV5RUV1fYWNjY2NiXGRjYmRjZlhRVlVTXFhbYV9eX2FhX2Rsa21qa2xudn51gXp8hIWFhYWFhYaGhYaFhoaGgnpyc3V1e4WHh4eGhYSBfnhwend2eFxSTUJASUZDRktJRkZHSUdHSkZGRklMSk5FREpKTE5KTElLSkhJR0JISFFNS0tPTUtLSUhIRUQ/RUJISEFARkVDVF1ZXlhfWF9bXVVYWFBdXVFLSlZeWF5bXVZaYVJSX19iYmBgYmJgY2JiZGRiWE9SUlNcU1xeXV5eX19gZGhnbGpubnB7e3x+e4CCg4SFhYWFhYWEhIWDhISHh4FzcneFh4eHh4eHh4eHh4WDgHx4XFNLQkFHRkRHTVJIRFJLRkhISERGS0lNUEVHSUpLTkxMSUxLSUlHREhLUU9NTFBMTEtLSUlDRUFFQ0hGQUFGREFWVUVcVF5TVmBYTlRVTlpbTUpLVGBhW19YX15iXU9ZYlxgYF9iY2JdYmJXX19UUE9RUllTXlxcXV5fYGJmZmVsZm9vd3x7gHt9f4CEhISEhIWFhYODhYKDgoWFhnpvgYaGhoeHiIeGhoaFhYSFg35JTkZERkZHRElSY1FEV19JR0dIREZNSlBQRklJSktOTExLTUtKSkdFSU5RUU5PT01OTU5IS0FEQUNERkRCQUNEQExIQkxMUE9PTUZNRkZISUhHTExNT1BJTE9QUFNQTFFTUlVaWVdZWFhkVk9TVFBQT05RVVRcWVlbXl5hYWVmY2hka2xxc3N6eX97en+EhISEhISEhIKEgH57gYOBfXuFhIaGh4eHhYWFhISEgoGAfUtJRUVHRkdES01eTUdIWU1HSEpIR05MUVFJS0pLS05NVU5PS0tMR0dLT1NTT1BPTk9PT0hLRmBFRF9MRGZjQ0xbSF5bc21PTVZtWUxDUF9UbFdnSl1XVV5ETVFVTE1TVlFSVFhXVFhVVFxUUGZaaGhkWVRrVFhXVVtcXGBgYWJiYmBnaWdubGhyenx9foGEhISEg4ODgX19enJ7gXp7f4KAg4SEhYWBhIWBg4N/fnp7S0lFRkZIRUVLT1RKS0dgVEdKT0pJT01SUUtNS0xPUlVST09KTE1HSE1RW1lPUFBOT1BQSktRf1FJfFlZcnNXUG1IcW5vYVZQcXF0T0Jrc25xdHBTb19bblhdVlxYVWtoVV1WY1lgWVpfVlVXf2l0dXVfYXZfWWJcXGZbX2FhYWJeYGJnbXBsYHB3dHiBgYKDhIJ/fX6Adnh6bXZ+dHh+gHx+gIGChHyAg3p/gX9+d3dNSUVITU1CRExMR0pMRlJWTExPSExSWFdRTk9PTFFUTk9RUEtLTkdNUFNbWlRRUk9QUFFLSVp4XVR4ZGhZUlNQdmd0bHBibmZrUnJOTHdtanJwc3JxcnBvcIBdZnp1eHFxenF+cn1rdX1iUmd8ZXNzb3NzfH1wfnlvf3JfYGBiYlthYGhrbmtibGZnbXd+gYCDfnt4d4B0dnpocn5udHx+d3h7foCDeHyBdXx/fHxzc05LRmBdR0FFTU1IS0tISlFPTU5KTldeWVVMUVNOWVlMU1NSTkxPSVFSVFlXV1FUUFBRU0xIZ3hsY3hxbVpLTFR5cHVtdWJudlBkZUlldnFtd2+AamZ4eGlYclJpe21panp6fWx4en9wZ29YdXVqdnVwgGFzaH1pbHh8b19fX2NiXF9kZWZpamRnYmNkbGxwcHN0c3NzeXFyeGJsdGdyeXtzcnV5foFzdnpufH15eHJuTUpSdE5DQkVQUElLTEpMUU9PT01QWmBaWEtUV1BhXlJWUVlTTVBKU1RVWFdXUFVQT05TSktyb3V1cXVxZGhhVm5McXBeR2h5V3ZUS2h4fXhgeXtzbmFebW9kU2dydW5teXB3bHZzdHFsbVxzfXprbXl8bHVtfGtwdnV4Xl9fYl5dX2VkaWdoZWVeYmJpaWlqa25va3FubWpwYWNmZG93eG9tcHN5f25xcGp7enRyb21LS1pWSEdFR1JQS0xOS0xRUVBQUFFXXFlVTlZZVWZYUlJZXlRNTkpUVFZXWVdPU09PTlFJUm1IaXdLYGR2dVVXbE5ubHtyYWpnf3ZVS1draH1sbWx4YFtwentfYHpzY3JveHFoZHxpcntdVEtsX3Z1a2l1e3ttfnhrfHBdXl5iW15iZGVnZWVlYlpjY2lra3JzcndnbWloZGdgYWxhZ3NybGhtbXJ8a21oa3t0bW1rbU9HSktISkhIUlFNT1BNTFNTUk9TUldSVlRQV1pWVlRUVGFgUU9OS1RTU1FWVk9PTU5PUUpIUU5QVUxLS1JTUlJST1ZVUVFPUlJYWFFOUFVUWFhYW1tVU1NXW1dYV1tPUlRXV1hRXVhWXVVTT1hSVldXWFpgW2dyXltbW11dX2NaX2NjZWZkY2NiWmNjZ2ZmbW5tdWZmZ2NgZl9dZ2BkbGhmZ2tocHpoZ2drdWpoZ2lsUElLS0xNS0pUUk1SUVBMVlVUUFRVWFVaVVJaXVZVVFdVWVhQT0xOV1RQTlVTTlBOTFFQS0pRUUtRTUpLT1FUUlFRU1JJSU1OT1FSUVFRVFZSWFdcV1NTUVFVVVZUWlFOU1FXVVRZVlRZVVNSVVNUVVhZWF5aX2FdXFtaXV1gY1xdYmNkZ2VkZGFZYGFjYWJoaGluY2FkXl9jXVpkXGJtYV5mZmdtc2RpaGtrZWRkZmhRSktLTk9MTVRRT1RRUU1YV1VUVlhXV1pWVFxgVldWWVVYVFFQS09YU1BOVVFOUk5MU1BNTlVTTlFOTU5RU1BUUVNUVE5MTk9RVFRSUlFWV1VZWltZU1VSVFhXV1lbU09TVFdVVFlVVllUUlJXVVZYXFpbYF1WWV9dXl1cXWBhXltiYmNoZmVkYlhgYGJdYGhlZmRhXl9dXV5aWl9aX2dgXl5dY2hrYWhmaGZkYGJkYlBLTUxQUUxPVFBQVFFPUVpZWFdZWlpYWVZdamRWWFlaV1ZUVE9LT1ZUUE9UUFBRTk1RUU9SWFNRUU9NT1NVTldRVFRVT05OUVRVVVRUUlRYVlpdXFpWVlFSV1hWW1xWUFNVVVVWWFRXV1RSUlhWVltfW15gX1ZfXV5gXFxgYF9fWmJiZGhoZWRiWWJgYl5eZmRjYGJdXFxcXFlaW1hbYVteXV1fYl9fYmRkYmRfX2BcUE1OTlJRTVJTUFNUUU9VXFpaV1tbXFlaW2RxbWhkX1tZVlZYUk1NVlNNTlJPUVJPTVBTUlVaVVNQUExQV1VRVlJTU1hNT1BRVFhVVVVTVVlYW15dXFtWUk9VVlVbW1ZRU1ZVVlhUU1haVFNRWVdXXV9bYF9gVmJcYGFdYGJfXGBdY2FjaGllZmBaY2BhX19lZV9gY1taXFtcWlpZWVdcWlxbYF5gW15eYWBfY1xZYFpRTk9OVlFQVVNQVVRTUFdcXFxZXlxfV1xeanB3eYBjXFtWVllSTk9XU05RUVBSVFJMUVRTWVtXVU9STlNYVVNSVFJSWk9RU1NWW1VWVlRWWlhdXlxcXlZTTlRWVltbVVFTVFZYWFJTWVxUUlJcWFpdXl1hYWBXYltjYl5hY19cYmFiX2RnaWRnXlxlYGFgYWNkX2JfWVpfW1xbWFhZV1daWlphXF1bXVxcWl1gV1tbWlBPT09ZUFVVU1JXUlRQWl1eXVxgXGBVXF1oanJ9c2xoXFVZV1FPUltTUlFUUlRVVEtSVlVaWlpTT1NRVVVVU05VUVJaUlRVVFhdV1hYU1hcWF5dWVpdVVVOVlZXXlpYUVVUWFhYU1ZZXFRSVl1ZXV1hXmNjX1lgW2ViX2RkXl5jY2FeZWZpZWZdXmRhYWFiY2RfYl5YW19bXFtYWFhYV1taW2BdW1tcW1haW15WXlldUE9PUlpQW1VVV1ZUVFReXmBfXmJcYFVdXmJreXVtfWxaVVpWUVFUXFRUVFVUVllXTFJaVlxaXFJQVVNXVVVTT1dRU1dTV1VWW11YW1lVWl5YX15ZXFlSV1JZWFlfWVlTVVVaWVlVV1lcVVRaXVxeYGFgZWRdXl1dZWFiZmReX2RjYFxnZGhmZGJfZGFfYWBiYl9gXldZXlpcXFpZWVdWXVpdXltaW1xbV1lcXVZYV11TT1BXWVBdVVZZV1dVWF9gYWFgY11gVV1eYmVldoJ7aFhZWlRWVFZcWFdXVlZXXVhPVVxZXl1dVFNYUldVU1JTWFJTVlRYWFhdXlhdW1VeX1hfX1hcVlFZVVlaWmFYXFVWV1paWlhZWlpXVl1eX15jYmJlZV1iXGBmYmVmZF9gZGJhW2ZiaGZjZmFmX19hYmFhYF9eVlVdWVtcW1lcWVldW1tbWFhZW1laWl1fXVRZXVVOU1pXVFxVVldZV1ZcYGFhY2FjX19WW2BkYV96dW9oWlxaVlhWWFtaWVtZWFlgVk9UXVtgYVxVVVlQVFZUUlZWUlRVV1tbXF9eWl9cVl9fWl1eWV5WU1lYWVpdYVleVldaW1pbW1tZWlhZX19gYGRjZGVlYmRaYmZjZ2ZlXmFiYGNeY2NpZWRnX2deYmJjYWFgXl9YVFpaWltbWFxYWFxbWltXV1pYV1xbXGBdVl1dU09WWlZWWlZZVVhXWF5gYmFkYWRhXllZYWRiYGtmaF5cXVtXV1laXFxcX1tZW2JWU1deXWFjXFNWWVBWVVVVVlZTVlRYXV1fYGBdYV1XYF5bXlxbXlhWWFhbWl9fWl5YWFxcXV1eW1pcV1pfYV5gZWRkZmZmYlljZmVoZ2ReY2BfZWNdZmlkZWhfZ15jYmNhYWBfX1tYWVtZWlpYWlhXW1taW1dYWlRZXVxaYFxVXmJNUldZVldaWVtcWVdZXmBiYWVhZGFdXllhY2JfYWBhX11dXVhXW1tdXV9fXFpdY1hZV1xgY2RfUllZUFdWV1hXVlZXVl1dXmFiYV9iXllhXV1eWV1eWVhVV1tbYF5cX1lZXV1eXmBcWlpZW19hX2JlZGVmZ2diWmRmZ2lnY19jXmBmZVppaWNmaWNmX2JiY2FgYF9dXVpYW1lZWFhaWVdaW1pZV1hWVVtdXV1gYGJieEtXV1xZV11cXF1aV1xdX2BiZGJjYV1gWGJjYmBjYWNeXF1cWFdbXV9dYF9dW2BkXFxXWmJlY2FSXFlPWFZZW1lZV1paYF5hYmNgYWNfXGJdX11bX15ZWVRYXV1fX15fW1peXmBiYlxcV1tdYGJiY2VkZ2ZlZ2RdZWZoaWZjYWJcY2dgXGlpY2hpZmVgYmFjYV9gX11dXFlcWVhXWFlZV1xbWldWWFBYWl1hY2Zmcmt/SllXXVtaX11cXlxZXVteX2JjYmFhXWJbYmRhX2NiYl1cW1pXWGpxYFxgX11cYWNfXVhZY2VkYlRfWlFZV1xdXFtZW1tjYGNjY2BiZGFgY15gXF5fX1pYVltfXVxhYV9dW2BhYmViXlxTXF9gY2RkZmVnZmVmZV9mZmhoZ2RkYFtmZ15haGhiaGhmY2BiYGNiX19fXV1bWltZWFhYVlpWXFpaVlZVTFhXXGdpa2h1eIF2dnZ2dnZ2dnZ2dnd3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d4eHh4eXl5enp6enp6e3p6ent7e3t7e3t7e3t7e3t7e3x7e3t7e3t7e3t7fHx8fHx8fHx8fHx8fHt7e3t8fHx8fHx8fHx8e3t7fHx8fHx7e3t7e3t7fYmIhoqHhYKBgoOCg4OCgoKCgoKCgoKCgoGAgYCBgICAgYCBgYGAfnx8fHx8fHx8fHx8fHx8fHZ2dnZ2dnZ2dnZ3dnd3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3h4eHh5eXl6enp6enp6ent7e3t7e3t7e3t7e3t7e3t7e3t7e3t6e3t7e3t7fHx8fHx8fHx8fHx7e3t7e3t7e3t7e3x7e3t7e3t7fHx8fHt7e3t7e3t8iYmHiYaFgoGCgoGCgoKCgYKCgoKCgoKBgYGAgICAgICAgIGBgYB9fHx8e3x8fHx8fHx8fHx8dnZ2dnZ2dnZ2dnZ3dnd3d3d3d3d3d3d3d3d3d3d3d3d3d3d4eHh4eHh5eXl5eXl5eXl5eXt7e3t7e3t7e3t7e3t7e3t7e3t6e3t7e3t7e3t8fHx8fHx8fHx8fHx7e3t7e3t7fHx8e3t7e3t7e3t7fHx8fHx7fHt7e3uHiYiJhYSDgYKCgoODgoKCgoKCgoKCgYGBgICAgICAgICAgYKBgH58fHx8fHx8fHx8fHx8fHx2dnV2dnZ2dXZ2d3d3d3d3d3d3d3d3d3h4eHh4eHh4eHh4eHh4eHh4eHl5eXl5eXl5eXl5e3t7e3t7e3t8e3t7e3x7enp7enp6ent7e3t7fHx8fHx8fHx8fHx8fHx8fHx8e3x8fHx8e3t7e3t7e3x8fHx8fHt7e3t7e4aJiYiFhYOBgoKCg4OCgoKCgoKCgoKBgYGAgICAgICAgIGBgYCAfnx8fHx8fHx8fHx9fX18fHaIi4uLi4uLgX19fX19fYSMi4uLi454KSkqKiopKz0/Pj4+Pj5tgH5+f397pdfT09PT1r2GiYmJiYqHc3FycnJxb6nBvr6+vsGiioyMjIyNiX5/f39/f359fHx8fHx8fHx8fHx8fHx8fHx7fHx8fHx8fHx8fHt7e3t7hIuHh4aHgoGDg4GCgoKCgoKCgoKCgoGBgYCAgICAgICAgYCBgIB+fHx8fHx8fHx9fXx8fH19doyQj4+Pj5CDfn9/f39+hpCPj4+Pk3kZGhoaGhocMTMzMzMzMmqCf4CAgHut6eTk5OToyomMjIyMjIlyb29vb29sstDMzMzM0KqNkJCQkJKLf39/f39/f319fXx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx7e3uCjYeIh4eDg4SDgYKCgoKCgoOCgoKCgYGBgICAgICAgICAgICAgH58fHx8fHx8fXx8fH19fX12eHh4eHh4eHd3d3d3d3d4eXl5enp6d29wcHBwcHBycnJycnJyd3p5eXp6en6Dg4ODg4SBfHx8fHx8fHp6enp6eXl/g4KCgoKDgHx8fX19fX18fX19fX19fX19fX18fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx7e4CMhomHh4SDhIKCgoKCgYKCg4KCgoGBgYGBgYCAf4CAgICAgICAfnx8fHx8fHx8fX19fX19fXZ2dnV1dXh2dnZ6e3h7eHd2dnh5eHl6fnx5eXh4eHh5eXl5enp5eXl5enp6eXh4eXl5eXl7e3t7e3t7e3t7e3t7e3p5eXl5eXp7e3t7fHx7fHx8fHx9fX19fX19fX18fH19fX18fHx8fHx8fHx8fHx8fHx8fHx8fHx8f4uHi4qIhIODgoKCg4KBgoKDgoKCgYGBgYGAgIGAf4CAgH+AgYF+fX18fHx8fHx9fX19fX19d3d3dnZ3fXh3d316eH14d3d3fHt7fHl8e3h3d3d3eHh4eHh5eXl5eXp6ent7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7fHx8fHx8fHx8fHx8fHx9fX19fX19fX19fX19fX19fX19fHx8fHx8fHx7e3x8fHx8fHx8fHx+iomMjImFg4SEgoKDgoGCgoKCgoKBgYGBgYCAgICAgICAf4CAgH19fXx8fH19fX19fX19fX13d3d3d3p9eHt4fHx3e3h3d3l+e3l7eHx6eHh4eHh4eHh4eHh5eXl6enp6e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3x8fHx8fHx8fHx8fHx8fHx8fX19fXx9fX19fX19fX19fX19fHx8fHx8fHt7fHx8fHx8fHx8fH2Kio2NioWDg4OCgoKCgYGCgoKBgoGBgYKBgIGBgICAgIB/gIGAfXx9fX18fX19fX19fX19fXd3d3d3fX55d3d4e3p8eXd3e357eXt3fHl4eHh4eHh4eHh4eXl5enp6ent7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3x8fHt8fHx8fHx8fHx8fHx8fH19fX18fH18fH18fHx8fX19fX18fHx8fHx8fHx8fHx8fHx8fHx8foqJjo2JhISEg4KDgoKBgYKBgoKCgYGBgoGAgYKAgICAgH+BgIB8fH19fX18fX19fX19fn5+d3d3d3d5fHl7eHx9eXt5enp4e3t5fHh8eHh4eHh4eHh4eXl5eXp6enp7e3t7e3t7e3t7e3t7e3t7e3t7e3x8fHt7fHx7fHx8fHx8fHx8fXx8fX19fX19fXx8fHx8fHx8fXx9fX19fXx8fHx8fHx8fHx8fHx8fHx8fHx/iIeNioeFhoaDg4ODgoGBgoGCgoGBgYGCgYCAgoF/gICAf4CAgHx8fX19fX19fX19fX5+fn53d3d3d3Z4eHl3eXp4enh5eXd4enl5eXl4eHh5eXh4eHh5eXl5enp7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t8fHx8fHx8fHx9fX19fX19fX19fX19fX18fH18fH19fX19fH19fX19fHx8fHx8fHx8fHx8fX+HiIyIhoeHhIKDhISCgYKBgYKCgoGBgYKBgIGBgYGAgIB/gIGAfHx9fX19fX19fX1+fn5+fnd3d3d3d3d3d3d3eHh4eHh4eHh4eHl5eXl5eXl5eXl5eXl6enp6ent7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7fHx8fHx8fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fHx8fHx8fX19fHx8gIeIi4eHiYaDg4SDg4KBgYGCgoGBgYKCgYGBgIGBgYCAgICBgX97fH19fX19fX19fn5+fn5+d3d3d3d3d3d4eHd4dnl5eHh4eHh5eXl5eXl5eXl5eXl5enp6enp6e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7fHx7fHx8fHx8fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fHx8fH19fXx9fXyBhoqKiYmIhIOFhISCgoGBgYGCgYGCgoGBgYCAgYGAgIGAgIGBf3x8fX19fX1+fn5+fn5+f394eHd4eHh4eHZxZGpeam15eXl4eHl5eXl5eXl5enp6enp6enp6enp7e3t8e3x8fHt7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3x8fHx9fHx8fH19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fIGFiYqJioeEhYWEg4KCgYGBgoKBgYKBgYGBgYCBgYCAgYCBgIF+fH1+fn5+fn5+fn5+fn9/f3h4eHh4eHh5bWRiZV9fXm95eXl5eXl5eXl5eXp6enp6enp6enp6e3t7e3t7fHx8fHx8fHt7e3t7e3t7e3t7e3t7e3t7e3t7e3t7fHx8fHx9fHx8fH19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18goWKiomJhISGhYSDg4KBgYKCgoGBgoGBgYKBgIGBgICAgICBgH58fX5+fn5+fn5+fn9/f39/eHh4eHh4eW5kZWdlZGJeZnh5eXl5enp6enp6enp6enp6enp6e3t7e3t7e3x8fHx8fHt8fHt7e3t7e3t7e3t7e3t7e3t7e3t7fHx8fHx8fHx8fHx9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXyChouJiIqEhYaEg4OEgoGBgYGCgYKCgYGBgYCAgYGBgIB/gIGBf3x8fn5+fn5+fn9/f39/f394eHh4eHl3Z2VkZWZkZWFfaXl6enp6enp6enp6enp6ent7e3t7e3t7e3t7e3t8fHx7e3t7e3t7e3t7e3t7e3t7e3t7e3t7fHt8fHx8fHx8fHx9fX19fX19fX19fX19fXx9fX19fX19fX19fX19fX19fX19fX19fX19fIKGi4eJh4SEhoSDg4WBgYGBgYKCgYGBgYKBgICAgYGAgYCAgYF+fHx/f35/f39/f39/f39/gHl5eXl5eWtlYWJlZWFlZV5ieHdze3p6enp6enp6enp6e3t7e3t7e3t7e3t7fHt7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t8fHx8fHx8fH18fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19g4aLhoiFhYaEgoOEhIKBgYGBgoKBgYKBgYGAgYGBgYGAgIGBgn98fH9/f39/f39/f3+AgICAeXl5eXl0Y2NlZGNmY2doZGZsZF5ze3p6enp6enp6enp6ent7e3t7e3t8fHx7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3x8fHx8fHx8fH19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX1+fn6DhouGhoaGhYODg4SDgYGBgYGCgoGBgYKBgYCAgYGBgYCAgYGBfnx8f39/f39/gICAgICAgIB5eXl6d2RhY2diYmRdW2VfYV1eYGFoeHp6enp6enp6enp6e3t7e3t7fHx8e3x7e3t7e3t7e3t7e3t7e3t7e3t7e3t8fHx8fHx8fHx8fH19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX1+fn5+fn5+foSFi4eGhoaGhIODg4KBgYGBgoKCgYKBgoGAgIGBgYGAgYGBgYF+fX1/gH+AgICAgICAgICAgHl5eW9vYmJiZF5jZ19dYWFgXF9kYlttfHp6enp6enp6enp7e3t7fHx8e3t7e3t7e3t7e3t7e3t7e3t7fHx7e3x7fHx8fHx8fHx8fH19fH19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX5+fn5+fn5+fn5/hIiLhoSHhoaEhIODgoGBgYGCgYGBgYKCgYCAgYGBgYGBgYGBgX5+fYCAgICAgICAgICAgICBeXpwXWJlZGJkXmZnZ2BZYmJhY2VfXF1ze3t6enp7e3t7e3t8fHx8fHx8fHt7e3t7e3t7e3t7e3t7fHx8fHx8e3x8fHx8fHx8fHx8fHx9fX19fX19fX19fX19fX19fX19fX19fX19fX19fn19fn5+fn5+fn5+fn5+foCFjIqEhYaGhYODg4SCgYGBgYKBgYGBgoKCgYCBgYGCgICAgIGBf35+gICAgICAgICAgIGBgYF5emxiZGdjYmdmYWBgZGFiZWRjZGNeXGJ1fHt7e3t7e3t7e3x8fHx7e3x8fHx7e3t7e3t7e3t7e3x8fHx8fHx8fHx8fHx8fHx8fHx8fH19fX19fX19fX19fX19fX19fX19fX19fX1+fn5+fn5+fn5+fn5+fn5+fn9/gYeMiYWGhoeFg4SDgoGBgYGBgYKBgoKCg4KBgIGBgYKBgYGCgoF/f36AgICAgICAgIGBgYGBgXp7dGdnZmZkZGZmYF5fYWNlaGRlXmJkYHR8e3t7e3t7fHx8fHx8fHx8fHt7fHt8fHt7e3t7fHx8fHx8fHx8fHx8fHx8fHx8fHx8fH19fX19fX19fX19fX19fX19fX19fX19fX19fX5+fn5+fn5+fn5+fn9/f39/f3+CiYqIhoaIhoWDhIOCgYGBgYGBgoGBgoKCgoGAgYGBgoKBgYKCgX9/f4GBgYGAgYGBgYGBgYGBenptaGNjZ2ZnZWdlZmdiZWRlYmdbYmVgdnx8e3x8fHx8fHx8fHx8e3t8fHx8e3x8fHt7fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx9fXx9fX19fX19fX19fX19fX19fX19fX19fn5+fn5+fn5+fn5+f39/f39/f39/f4SJioiGiYeFhYSEg4KBgYGBgYGCgYKCgYGBgYGBgYKBgoGBgICBgH9/gYGBgYGBgYGBgYGBgYF7emlpZGNqZmFgZmVjY2NnaWRjYmBiZGJ0fXx8fHx8fHt8fHx8fHx8e3x8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fH19fX19fX19fX19fn5+fn5+fn5+fn5+fn5+fn5/f39+fn9/f39/f39/f3+AhIqMiIeJhoSFhYOCgYGBgYGBgYKBgoGBgYGBgYGBgoKBgYGBgYGAgH+BgYGBgYGBgYGBgYGBgXZzZWRnY2RmZWJlZmdkZmhmZWNgYGNkYHF9fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fXx9fX18fHx9fX19fX19fX19fX19fn5+fn5+fn5+fn5+fn5/fn5+f35+f39/f39/f3+AgICFioyJiIqJhoaDgoKCgYGBgYGBgoGBgoGBgYGBgIGBgYGBgYGCgX+Af35/foCCgoKCgoKCgoKCc3NnZWRkZWlqaGZnZ2NhZmZlZmdmZWVjdX18fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fX19fX19fX19fX19fX1+fn5+fn5+fn5+fn5+fn5+fn5+f39/f39/f39/f39/gICAgICAgIWLioqJioeHhoSCgoGBgYGBgYKCgYKBgYGBgIGBgoKBgYGBgYGAf4B+dHRzdX1/goCAfn5/gYB0cmdkZWNmaWppZWNlY2BmZGRnZ2JiZWFwfXx8fHx8fHx8fHx8fHx8fHx9fX18fHx8fHx8fHx8fHx8fHx9fX19fX19fX19fX19fX19fX19fX1+fn5+fn5+fn5+fn5+fn9/f39/f39/f39/f39/f39/f4CAgICAgIB/houLiouLh4eHhIOCgYGBgYGBgYKBgoKBgYGBgYKCgYCBgYGBgoCAgH5zc3NzdHV4dXV0dHV2dXVwZmNmZWhoaWdoZ2VmZWJfZGVmY2BiZ3d8fHx8fX19fX18fHx8fH19fX19fX19fXx9fXx8fX19fX19fX19fX19fX19fX19fX19fX19fn5+fn5+fn5+fn5+fn5+fn5+f39/f39/f39/f39/gIB/f3+AgICAgICAgICHjIyIi4qHh4eEhIKBgYGBgYGBgoGCgoGBgICBgoGBgYKBgoKCgYCAfnNzc3Nzc3NzdHR0dHNzdW9jY2FnZWhoZ2pmZGVnZmhmY2JlYl5ieX18e3t8fX19fX18fHx9fX19fX19e3x9fX19fX19fX19fX19fX19fX19fX5+fn5+fn5+fn5+fn5+fn9/fn5+fn5+fn5/f39/f4CAgH9/gICBgICAgICAgYCAf4CAgYGAgIeLi4iNiYiJhoSFgYGBgYGBgYKCgYKCgYGBgIGCgoGBgYKBgoKBgIB+dHNzc3Nzc3Nzc3Nzc3N1cmdlZWRlamhoZ2ZpaGdjZWViZGNoZGd7eHVzc3R2dnl4dnR0dHZ3d3d2dHR0dXV4d3h4d3d6e3x9fXx9fn5+fn5+fn5+fn5+fn5+fn5+fn5/f39/f39/f35/f39/gH9+fHt7fX58eXl2dnZ5fHx6end2d3l7fXt4hIyMioyHh4iEhYSBgYGBgYGBgoGBgoGBgYGAgYKCgYGBgoGBgoGAgH51c3Nzc3Nzc3Nzc3Nzc3VzaGVnaGVrbGhqZ2lqZ2dnZmRkYmVkbnV0dHNzdHNzc3Nzc3Nzc3Nzc3NzdHNzc3Nzc3Nzc3N0dHV1c3V3eHl7fn59fn98f39/f39/f39/f314fH5+fXx4dXZ3eXd4dnRzc3N0dXRzc3Nzc3NzdHNzc3R0c3R0dHODjI2KiYeIhoOGg4GBgYGBgYGBgYGCgYGAgYGDgoKBgYCBgYGBgICAf3VzdHRzc3Nzc3Nyc3NzdnZpY2hqaGpsZWZpbGhgZmVkY2BkZGZ0dXV1dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHRzdHRzc3Nzc3R2dnV1d3V4fH9+fX9+fHp4dXN0dXV1dHNzc3Nzc3N0dHR0dHR0dHR1dXR0dHV1dHR1dXR1dXV1dIaMjYuIhoeEhIWCgYGBgYGBgYGCgoGAgYCBgYKCgoGBgIGBgYGAgIB/dnNzc3Nzc3Nzc3Nzc3N2dnNnZ2pmaGdmaGhmZGlnY2NnZWVmcHZ1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dHR1dHR0dHR0dHRzdHR0dnV1d3Z0c3R0dHR0dHR0dXV1dXV0dXV1dXV1dXV0dHNzc3N0dHNzdHR0dHR1dXR1iY6MjIqHh4SEhYKBgYGBgYGBgYKCgoGBgICAgoKCgoGBgYGBgYCAgH93c3Nzc3NycnJyc3NzcnZ2dW5kXWNnZWlraGVoZ2dqamlnZXB2dXV1dXV0dHRzdHR0dHR0dHV1dXV1dXV0dHV1dHR1dXV1dXV1dXV1dXR0dHV1dXV1dXV0dHV0dHV1dXV1dXV1dXV1dXV1dXV1dXV0dHNzc3Nzc3N0dHNzc3Nzc3R0dHR0dHWKjoyMiYaGhIeFgoGBgYGBgYGBgoKBgYGAgYGCgYKBgYGBgYKBgICAf3hzc3Nzc3JycnJyc3NzdnZ3d2liaGhnamtpaGZkZGVmaWhwdXR0dHRzc3JxcnJ0dXV0dHR0dHR0c3NycXFxcXNzdHR0dHR0dHR0dHV0cnJyc3R0dHR0dXV1dXV1dXR0dXR0dHR0dHR0dHR0dHR0c3Nzc3Nzc3Nzc3Nzc3N0dHN0dHR0dHR0dYuOjImGhYWFh4SCgYGBgYGBgYGBgoKCgYGAgIKCgoGBgYGBgYGBgIB/eXNzc3NycXJycnJzc3N3d3d3bGpoZGhpa3Z6a2VmZWhnbXJzdHN0c3JwcHBxcnN0dXR0c3NycnNycXBvb29vcHFzc3NycnJyc3R0dHNxcHFyc3R0dHR0dHRzc3Rzc3NzdHR0dHRzdHR0dHR0dHRzdHR0c3NycnFxcnJzc3Nyc3NzdHR0dHN2jZCMh4eFhYSEgoGCgoGBgYGBgYGCgoKBgYGAgYGCgoGBgoKBgYGAf395c3NycnFxcnJycnNzc3d3d3dzc2pnaWloeX99cW51bG5wcXJycnFxcG9wcXFxc3Rzc3NycXFwcG5ubm1ubW5ubnBxcnJycnJycnJzcXBvb3BxcnJzc3JxcnJycnJycnJycnJzc3Jzc3Nzc3Nzc3Nzc3Jxb29ubm9vcXJzc3Jyc3NycnNzcnaPj4uHhoWFhYOCgoKBgYGBgYGBgYGBgoGBgYGCgoKBgoGCgYGCgX9/f3hxcHBwcXFycnJyc3Nzd3d2dnd2cnF0c252f352c3hwcHBycnJycXFwcHFxcXFyc3Nzc3FwcXBvb25ubm5ub25vcHBxcXFxcXBwcXJwb25vcHFxcXFxcHBxcXFxcXJycnJycnJycnFxcnFxcnJycnFwb29ubm1ubW5vcXJycnJycnJyc3JxeI+OjYaDg4aEgoOCgoGCgYGBgYKBgYGCgYGBgYKCgoKCgoKBgYKBf4B/d29wb3BxcnJyc3Nzc3J2dnZ2dnZ3dnZ1c3l/fnd3d29wcXFxcXFxcHBwcXJxcnJzc3JycXBwb29wb29vb29vb29wb3Bvb29vcHBxb29vcHBwcHBvcG9wcHFycXFxcnJycnFxcXFxcXFxcHBwcHBxb29ubm5tbW5tbm9wcXFxcXFxcXFxcXB7j42NhoODhYOCgoKCgYKBgYGBgoGCgYGCgoGCg4KBg4KBgYGAgYF/f392bm9wcHBxcXFxcXBwcHZ2dnZ2dXR0c3NxfYB9fX9zb3BxcXFwcHBwcXFwcHBxcnJxcXFwb3Bvb3Bwb29wcG9vb29vb29vb3BxcXBub3Bwb29wb29wcnJycnFxcXBxcnFwcXFxcHBwcHBwcHBwb29ubm1ubm5ubm9ub3BwcHFxcXFxcXFxcIKRjoqEhIOFhIOCgoGBgoKBgYKBgYGBgYGCgoKCgoKCgYGBgYCBgX9/gHVvb29wcXFxcXBwcHBwdnZ2dXRzcnJycnGAgoCBeXBwcHBvcHBwcHFxcXFwcXFxcXFxcG9vcHBwcHBwb3BxcHBvb29wb29vcXFwcG9wcG9vb25vcHFxcHBwb3Bvb3BwcHBwcHBwcHBvb29vb29vbm5tbW1ubm5ub25vb3BvcHBwcHBwcHBwipCMiISDhIaDg4KCgYGCgoKCgYGBgYCAgYGBgoKBgYGBgYGBgIGBgH+AdG5vb3BxcXFwcG9vcG92dnVzcnFxcXFxcICDg39ycHBwcHBwcHBwcHFxcHBxcXFxcXBwcHBwcHBwcHFwcHBwcHBwcHBvcHBxcXBwcHFxb29vbm9wcHBvb29vcHBvb3BwcHBwcHBwcHBvb29vbm5ubm5ubW5ubm1ubm9wcG9vb29vb3BzcXWPj4yJg4KFh4ODgoKBgoGCgoKBgYKBgYGBgYGBgYGBgYCAgYGAgYGAf4B0b29vbm9vb29vb29vb3Z1dHNxcXFxcXJygIKCgXRxcXFxcXFxcXFxcXFxcXFxcXBxcXFxcHFwcXBxcXFwcHBwcHFxcXBxcHBwcXBwcHBwcHBwcHBwcHBwcHFxcXBxcHBwcHFwcHFxcHFxcXFxcXJxcnFwcnRycnR0dHR1dnRzdHR0dXd3gpCPi4mDgoaHhISCg4GBgYKCgoGBgoGBgYKBgYGBgYGAgICBgYCBgYB/gHVvb29vb29vb25vb29vdXRzcnJycnJycnKDg4OCdnFycnFxcXJxcnJxcXJycnFxcXFxcnFxcXJycXFycXFxcXFxcXFxcXFwcXFxcXFxcnNzcnJyc3V1dHR0dHR0dHV2d3d3d3d3eHh4eHd3eHh4d3Z3dnV2dnZ2d3h6e3x7e3t6enp6enyGkI2LiIODiIeHhYODgoGCgYKBgYGBgYKCgoGBgYGAgYCAgYGAgIGBgH+Ad3FxcXFxcG5ucG9wcG92dHV1c3Nzc3NzdYiDgoN5cnNzcnJyc3Jyc3NycnJycnN0cnJzcnNzc3Nzc3Nyc3N0dHV1dXV1dHV3eHd3d3d4eHh3eHh4eXl5eXl4eHl5eXp6e3t7e3t6enp5eXh3d3d1dnV2dnd5enp7fn5+fX1+fn5/f35+gIyPi4qHg4WIi4iEg4SDgYGCgYGBgoGBgoKCgoKAgYGBgYCBgYGAgIGAf4B8enp5eXx5eHh2dXZ2dHl2d3h3d3Z3dnZ6f3x+fnx2dnd3dnV4enh4eHh3d3d2eHx5eXx6eXl8e3l5eXh4eXl6enl5eXh4enp5eXh4eHh3dnd3eHh3eHh5eXp7e3p8fH1+fX9/f359e3t7e3p5enl5e3t/foB/fn5/fn19fX5+f35+fn6AjpCNioeEhoqMiIaGhIOBgoKBgYGCgYGCgoKCgoCBgoKBgYGCgYCBgIF/f4B/fn19fX9/f318e3t7eXh4eHh5eXl4eXh5eXl4enp6enp6e3t7fH1+fHt7ent8e318e3t7e3t7enl4eXh4ent6enp5eXp8fHt6enx8fHp6ent9fHx+fn+AgoGAgYKAgH9/gYGBgIB/f35+fn5/fX1+f4CAf35+f39+fn9/f39/gH+Af4OQjoyHhoWIi4yIh4aFg4GCgYGBgYKBgoKCgoKBgYKDgoGBgYGBgIGBgIB/goOCgoGBgX99f39/f4F6enh4d3h4eHh5eHh5enp5e358enx9fXt8fX19fHx8fnx9fn5+fn59fX9/f3x8fYGDgYCAf318fXx9fXt9fXx8fH19fX1+gYGChISDgoB/gYGBgH9/f4B/f39/f39+fn9/f39/f35+f3+Af39/gICAf4CAgICAhJCPi4eGhoiLi4mKhYaDgoKCgYGBgoGCgYKBgYGBgoOCgYCAgYGAgIGBgH+ChIKCgICAgH9+fn+AgH9/fn18fX19fYB/fX+Af35/gH9/fn9/gIGBgICAf3+BgICAf4CBgn9/f4CAf35+f39+f39/fn5+f39/gYB/f4CBgYCAgYOEgoGCgoGCgH+AgYCBgYGAgH+BgICAf39/gICAgYGBgIGBgYCAgICBgoGBgYCAgYGFjo6MiIaHiYyLi4qGhoOCgoKBgYGCgoOCgoKBgIGBgYKCgICBgYCAgYGAf4KFg4KBgYCAf39+fn+AfX5+fn19fX5/fn9/f35+fn+AgYCAgICAfn9/fn+Af3+AgH9/f35/f39+fn59fn9+fn9/f35/gIGBgoKDg4KCg4KBgYKDg4OCgYGBgYKBgoKCgYKBgoGBgYGBgoKCgYGCgYKCgoGBgoKBgYKCgoKCgYGBgoKCgoaPkY+KiImKjY6NiYaFgoKCgoKBgYKCg4KCgoGBgYGBgYF/gIGBgYCBgIF/gYWEg4KCgoGCgYCAgIB8fHx7fH18fH9+fn9+fn5+f35+f39/f39/f35+foB+fn5+fn9/f39+f39+fn5/gIB/gIB/f39/f3+BgYGCgoCAgYKDg4SDg4ODgoKCgoKCgoKCgoKCgoGCgoKDg4OCg4ODg4KCgYKCgoODg4ODgoKCgoODg4KCh5KTkIuKi4uPj42Lh4SCgoKCgYGBgoKDgoKBgYGBgIGBgICAgYGBgIGAgYCAg4SDg4OEg4ODgoKCgXx9fHx9gn1+f4GCiIGCgoSCgYGDg4GBgYKDgYKBgYCAf39/gICAf3+AgX9/f39/gYCAgICAgH9/f3+AgICAgH9/gYODhYSEg4SDgoKCg4OCgoOCgoODg4ODg4SDg4KEhYWDg4SEgoKDhIOCg4ODg4OCgoODgoCKlJOPioqMjpCPjYuGg4KCgoKBgYGBgoOCgYGBgIGBgoGBgICBgYGAgYCAgH+BgoODg4SEhIOCgoKCfXx8fn6AgYOAg4OChIaFhoaFhIWFg4ODg4SBgYKEhIKCgoeDgoKAgoGBgoKCg4KCg4KDgoODgoGAgIKCgYOCgYKCg4OEhYWEg4OChISEhIOEhISDg4OEg4ODg4OEg4SDhIWDhISDg4ODgoKCgoKCgoKBgYKCgo+UlI+Njo6RkY6KiISCgoKCgYGBgYGCg4GBgIGBgYGBgYCBgIGBgYCBgICAgIKChIKChIOCg4ODgoJ9fX2AgH+AgoGDg4ODhIaEhIOEhYWDg4KBg4OBgIKDgYKFhYWFhoaHhoWGhoeHh4aGhoeHhoaEgoGCg4SDg4ODg4ODhISFhYWDhYSFhISEg4KBg4OCg4SEg4KCg4SCg4ODhIOCgoKCgoKCg4OEhIOFhYWFhoaIk5OTkI+Pj5KRjIqHgoKCgoKBgYGBgYKDgoKBgIGBgYGBgICAgYGBgICAgICAhISEgoKCgoGBgoKBgX+AgYOCgICAf4CCgoGDg4KCgYODg4SEg4KDhYOCgYGBgoSFh4eHh4aGh4eHiIiHh4eIiIiFhIOBgIGBgoKCg4GCg4SEhYSDg4OEg4OEhIOBgYGCg4OEhISDg4ODg4OEhIODgoSDg4ODhIWFhoeHh4eIiIiJiY6TkpKOj46Qko+LiYeCgoKCgoKBgYGBgoKCgoGBgIGBgYGAgICAgYGAgIGAgICDg4KCgYKCgYGAf4CBhYWFhoOCgYB+fn+BgoSCgYKDhIOBgoODg4KChISDg4OCgoSFhISFhYSDg4SFhYKEhIWFg4KBgH9/gIB/gIGEg4OEhYWEgoKCgoOCg4OFhIKDhISEhYaGhoaGhoWFhoeHhYaIh4aHiIeGhoaIiYeGhYaGhoeIkZOSkI6QjpCRjImHhYGBgoKCgoGBgYGBgoOBgYGBgYGBgICAgICBgYCAgICAgISEg4KBgoGAgYGAgYKIh4aHhYSCgH99fX6AgH+AgYGBgYGCgoGBgYKCgoGCgoKBgYGCgYKCg4GBgICAf4GAgH+AgH9+gIGBgYKCg4OEg4OEg4OCgoGBgoODg4SEg4SEhIOFhYaFh4eIh4eHh4eHh4eGhoaGh4WFhYaGhIWEhIWEhYaSk5GOjo+OkI6JiIeEgoKCgoKCgoGBgIGCgoKCgoKCgYGBgYGAgYGBgICAgYGAgoSDg4KDgoGCgYKDg4iHh4iHhYSCgX5+gICAfn5+f4CBgYGCgYCCgoGCgH+AgIB+gIKBgIGCg4OAf39/gICAf4CAgICDg4KDg4ODgoOBgYKCgoOCgYKCgoOCgoSDhISDg4SEhYWFhYaGhoaFhISEhYWEhIWFhYSEhISDhISEhISEipSTkpCQj46NiIaFhIOBgYKCgoKCgYGAgYKCgoKBgoKBgYCBgYCBgYGAgICAgYGAgoOCgoOCgoKBgoOCiImJiYiHhYSDgYKEhIOBgYGCgoSCgoOEgoOEhYaEgoSCgX+AgoGBgoGChIOBgYGBgoOCgoGDg4SDg4SEg4OCg4KDg4ODg4KCgoKCgoGDhISEhYSFhYWFhIWEhIWFhYWDg4OEhISEhYWFhISEhISEg4ODg4OOlZKQkZGOjYyHhYODg4GCgoKCgoKBgYCBgoOCgYCCgYGBgICAgIGBgYCAgICBgICDhYSEhIODg4SDhIOGh4mIhoWDhIODg4WDgoGDgoOFhYODg4SDhIODhISFhISEgoGAgYKDgoKEg4OCgoGBhIWEg4ODgoKDhISDg4ODg4WFhISDg4KCgYKCgoSEhYSFhYWFhYODhYWFhYaFhoWEhIWEhYWGhYWFhIWEhISDhIODhJGUk5OSj4yMioWEhIODgYKCg4KCgoKBgYGCg4KBgYKBgYGBgIGBgIGBgH+AgYGAgYaGhoaGhoaHh4aGhYSDhYaCgIGBgYGHgoB+f4GAgIKBgYCBgYCAgoGCgoKBgYKCgYCCgoKCgoKDg4GCgYKDhYODg4KDg4OEgoKEhIOEhIWEg4OCgoKCgYGCg4ODg4SFhYWFhIOEhYWGhYWEhISEhIOEhIWFhYWFhIODhIOEg4KGlJSSlJKPjYuHhISDg4KBgoODgoKDg4GBgoKBgoKCgYGCgYGBgYCAgYGAgICAgICAhYWFhYaGh4aGhoWGg4ODg4GAgoKCgYKAf35/f4CAf4B/gIGAgH+BgYGBg4GAgYGChIOBgYGBgYKBgYKDgoODgoOCgoKCg4OBg4SDg4ODg4OEhIKCgoKDgoKDg4ODhIWEhISEg4OEhIODg4OEhIODg4ODg4SDg4ODg4KDg4KDgouUk5KTkY2NioaDg4OEgoGCg4ODg4ODgoGBgoGCgoKCgoKBgYGBgICBgYCAf4CAgICDhISFhYSFhYWEhIWCg4KDgoKDg4OBgICAgICAgYCAg4KCg4KBgoKDg4OEgoODg4KAgICCgoKCgoKDg4ODgoODhIKCgoODgoKDg4KCg4KDg4WEg4ODg4SDg4SEhISEhYWEhIWEg4SEhIOEhISEhISEg4SEhYSDg4SEhIODgoKDkJSSkpKPi4yIhoOEg4OBgYKDg4ODg4OCgYGCgoKCgoKDgoGBgoGAgICAgIB/gIGAgISDhYWEhYWFhYSFhYOEhIWDg4SFhIKCgoOCgoSCgYKGhYOFg4OEhIWGhYSEhYJ/fX19foKEg4ODg4OEg4ODhISEg4OEhISEg4SEhIOEg4OFhoWFhYSEhYWFhYSFhoWGhoWFhYWFhYWFhYWGhoWGhoaFhoaGh4aFhYWFg4SEhIeTk5KRkoyKiIWFhYWCgoGBgoODg4OCg4KBgYKDg4ODgoKBgIGAgICAgYCAgH+AgICAhYWFhYWGh4eGhYWFhISFhYSEhISEg4ODg4OEhYOCg4SFhYaFhoaHjYeHhoOBfn9+fn5+f4OEg4OEhISEhISEhISEhISFhYWEhYSGhYWGhYaGhoWGhYWHhYWGhYaGhoaFhIWFhYWFhIWGhoaHhoaGhoaHh4iIiIaFhYaEhYWGjZSTkpGQi4qHhoeGhIGCgoKDg4ODg4KDgoGBgoODg4KAgYGBgYCAgICAgICAf4CAgICHh4eGhoeHiIeHhoaEg4ODhIODg4OEg4ODg4OEhIODg4WFhYSDgYeZjIWBf39/f39/f35/gISFhIWGhoaFhYWFhoaHhoaFhoWFhoeHh4iHh4eGhoaHh4eGhoaHhoaGhYSDhIWFhoSFhYaGh4eHhoaGhoeHh4eIiIeGhoaHh4eRk5KQkZCLiIiFhoSDgoKBgoODg4ODgoKDgoKCgoOCgYCBgICBgICAgIGAgIB/gICAf4aHiIeHh4eIiYmIiIODgoKDgoSEhIWEg4KCg4OEg4OChYaCgH5+fo+Jf39/f39/gIB/f4B/f4WFhoeIiIeHh4eIh4iHiIiIhoaHiIiJiYmIh4aHh4eIiIaHhoeHhoaFhIOEhYaFhYWFhoaGh4eFhoeGh4aHh4eHh4eHh4eFh5OTkY+RkIuHhoWGhIKCgYGCg4ODg4ODgoKCgoGCg4KCgIGBgYCAgICAgICAf3+AgYB/hoiIiIiHh4iJiYmIg4KCg4ODhIWHh4eFg4OFhIODg4OKhn+BgIWBgICCgYGBgYB/gH9/fnt6gIaIiIqKiYmIiImJiYmKi4qIiIiJiouLioqIiIeIiIiHh4iIh4iGh4aEg4OFh4eHhoWFhISDhYWEhYWGhISEhYWFhoWGhYOJlJOQjpGOioaFhoWDgYGBgoKDg4ODgoKCgoKCgoKCgYGBgYGBgYCAgICAgIB/gICBgH+GiYiIiYeIiImJiIiEgoKDg4KDhImKh4eEhIWEg4OFhI+ChYOCgoKCgoKCgH9+fH19fX9+fHt8g4eJi4uKioqIiIqJiImLiomJiImIioqJi4mHhoaGh4WGiIiJiIeGh4SDgoSIiIiIh4WCgoGDg4KDg4SCgoKDgoGEg4SDgY6TkpCPj4uIhYSGg4KBgYGBgoODg4OCgoKCgoKCgoGBgYGBgIGAgICAgICAgH+AgIGAf4WIh4eHhoeIiIiHh4SCg4OCgoOFiYqJh4WHhYSFhYSFkYOEg4OCgoKDgX59fn5+fn5+fXx+fX19g4eJioqHh4WGh4eHh4iHh4mGiIaIh4eJiISDhIOFhISFhYaIh4aFg4KChIWHhoeGhoOCgoOEgoOEhIKBgoGBgYODhIOEkZKRjo+Oi4eFhoaEgoGAgYGDg4ODg4KCgoKCgoKCgYGBgIGBgYCAgIB/gIGAf39/gIB/hYaGhYaGhoeHiIeGgYKEhIOChYaIi4qGhIaEgoaGgYOQhIODg4OCgoF9fH1/gH9+fn59fH19fHp8hIaHhoSDgYODhIWFhYODhYSEhISEhIWEgoKDgoSEgYKDg4WGhYSCgYGCgoODhYOEhIWEhIaDg4SFg4KDgYKDg4SFhIiSkY+Nj4yJhoSFhIWCgYCBgYODg4ODgoKCgoKCgoKBgYGBgYGAgICAf4CAgYB/gICAgICDhIWEhYWFh4eHh4aAgYGFg4OEhYSHiIWCgYCAgX99gIaDg4ODgoKAfX1/gICBf31+fn19fX16enp+g4SEgoGBgIGBgoKBf36BgYGCgYOAgoGCgoKBg4OAf4CAgYOCgICAgICBgYGCgYGChIODhYSCg4SDgoKBgoSDhYWGjJORjo+Pi4iFhYOChIGBgYGBgoODg4KCgoKCgoKCgoGBgYCBgYCBgH9/gIGBgICAgH+AgIKCg4OChIOEhYWGhn+BfoCBgICAf4GDgn9+fn9+fHyAg4OCg4ODgX59fn+AgIGAfn19fX1+fXx6enp/goKBf39/f35/f4B+fYB/f4CAgX+AgIF/f3+BgX59fX+AgX9/foCAgH+AgICBf4CCgICCgYGCgYGAgYGBgYKEg4aPkpCOj42Kh4eGg4OCgYGBgYGCg4ODgoKCgoKCgoOCgYGCgYGBgICAgH+AgICAgICAf39/gYKDhIGCgoOCg4SFgIB/fH19fn1+foCAf31/fn1+f4ODg4KCgYF/fX1+f4CAgH9+fX19fHt7e3p6enqAgIB/f35+fnx+f35/gH9+f3+Af4GAf35+fn9/fn18fn+Af35+f3+Af39/f4B/f4B+f4CBf4B+f39/gH9/f4B/hZKSj46Pi4uHiYWEg4KCgYGBgYKDg4ODg4OCgoKDg4KAgYKBgYGAgICAf3+AgIB/gIF/f36BgYSEgYKBg4OCg4OBgH98fn5/fn6Af4B/foF+foCChIOCgYB/f359fn5/gICAfn19fX17e3x6enl5eXuAgH9/f39+fX5/foCAf35/f4CAgoB/fH5+f35+fXx/f4B/fn9/f4B/f35/foCAf36Af39+fn5/f35+f318fH2Fk5KNjIuKiImIhISEgoKCgYGBgoOCgoODgoODg4ODgYCBgYGBgYCAf39/f4CAgICAgIB/foCBhIOCgYGDhISDhICBgICBgIGAgYKCg4GBgn+Bg4SEgYGBgYCAfn19fn5+f359fX19fXx8fHt6enl5eX2BgICBgYF/f4B/f4F/gICAgYGCgoB+gH5/fn5+foGAgoF/f39/gIB/f4B/gYB+f4CAfn9/fn+Af31+fX17fIaTkYyLioeHioiGhoSDgoGBgYGCg4ODg4OCg4OCgoKBgICBgYGAgH9/f39/gICAgICAgH9+fn+BgYGAgISGh4aHgoSDhYOBg4ODhYSEhISDgYKDg4KCgoKCgX9+fX19fn6AfX19fX19fX18e3p5eXl5eYCCgoKEg4CCg4GAgoCBgYGDgoODgYGCgIGAf4CBg4GEgoCAgYGBgYCAgYCCgn+BgIF/gIB/gICAfn9/fnx8ipOQiomIiIiJiIaGhYSCgoGBgoKDg4ODg4KDg4KCgYCAgIGBgYGAf39/f4CAgIB/gIGBf359fn5/f39+g4aHh4iChYSFg4SFhIWGhoaGhoWFhYCAg4ODgoKAfX19fX19fn59fX19fX19fX18e3l5eXl4fIKDhIWCgYSDgoKDhYaCg4SDgYKCg4OCgoKCgYKFg4iFgoGBgYKCgYGBgYSDgoOCgoKCgIGBgIF/gIGAf36Ok4yHiIaIh4aGhYaGhIKDgoGCgoODg4ODg4OCgYGBgH+AgYCBgYB/gH9/gICAgH+AgYB/fn19fX5+f36Ag4SHiISGhoaFhoaHh4aGh4iHhoeGf32AgIGCgX59fX19fX19fX19fX18fH5+fnx7eXh3eHl5gIODf4ONhIOEhISXl4ODhIF9foGCgoGCgYKBhIaIjIWDgoKBhIKEg4KDhYWEhYOCg4OCg4OCgoKCg4OCgpKQi4iIh4mHhoaEhoWEhISCgYKCg4ODg4ODgoGBgYCAgICBgIGBgH9/fn+AgYCAf4CAgH9/fn1/fn+Bf4CCgYWFhYeGh4eGh4iIhoaHh4aHh4d/fH18fX9+fX19fX19fX19fX19fXx7iJKCe3x6fIZ5eHl8gYF+iZeEg4OEhJSTgIGBf39/fn6Fi4B/gICEhpCJhYSCgoGFhYuDgYKFhYaGhIOFhYOEhIODhIOFhISIko6LiYiIiYeHh4WGhYSFhIKBgoKDg4ODg4OCgYGBgICAgIGAgICAf39/f4CAgICAgYGBf39/f4CAgIGBgYGBg4OGh4aGh4aGiIeGhoaFhISGhYB9fHx8fX18fH19fX19fX19fX18fH+RlZaDe3qElHx4eXp7fH+Cg4GBgIOCgH58fn57iJF8fI6Wf31/f4KGioWDg4SDgYONiX99f4OEhYWDhYaFhIWFg4SFhYaEhI6Rj4uKioyJiImHhYaFg4OCgYGCgoKDhIODgoGBgICBgICAgYGAgIB/f3+AgIB/gICAgX5+f4GBgoKCgoODgoOCgoWGhISEhYSGhIOEg4KBgYOBf319fHx9fXx8fH18fH18fX19fHx8e4uRl4x6e3yBenp6e3x5eX19foB/gH98e3t+fn2ClZF/hIh+fH5/goR8fIGChIKAf4eDfYOBf4KCgIODhISEhISChIOEhYKEkZGOi4yMjoqJiYWFhYODgoKBgoODgoKDg4KCgYGAgIGAgICAgICAgH+Af3+Af357gICBenyAgoKDhYODhIWFhYODg4SCgYKDgoOCgoGBgIB/gX5/fX59fHx8fHx8fHx8fHx8fHx9fHx8fn6Kgnt6e3p4ent7fH17fn1+f319fX18fH+BgX2Gj4F+fYJ+f36Agnx8f3+BgIKAfn17ioJ9gH9+gYCAgYKBgoCAgIGAf4uTj4uLjY6NiIeHhYWEhIOCgoGCg4OCgoODgYGBgICAgICAgH9+fXx7fHx9f3+AgHx6gYF4e4CCgYOFhIOFhYaGhISAhpSIgIKBgYGBgH9/f39/fn5+gHx8fHx8fHx8fHx8fHx9fHx8fHx8fHl7e3t4eHl7enp8gX+Afn+BfH5+f399gIKCgICAgX+CkYF/f4CAfoB+fn9+gIGBfXx9e319fXx9fHx9gH+AgH6Afn6Bk5GMjIyNj4qFhoaFhISFg4ODgoODg4OCgoGBgYGAgICBgICAf4CAf39/fXt6fICAgHh+gXd7gIF/gYKCgoKEhoeGhn6IlYp+gYGAf4B/foB+f39/fn+Bfnx7e3x8fHx8fHx8fH59fHt9fHx8e3x8fHp6eXt8en2Fg4J/gYF+f35/gH6FgoF+gH9+foCFhoKAfn6Dhn9+fH6AgIGAf39+fX19fX57fH1/f3+AfX9+f4uQjYuMjo2Nh4SGhoWEhIODg4OCg4ODg4KBgYGBgYCBgYGAgYGBgYGAgH9/f397en9/e3mAd3p/f31+f3+Af4KDhoaFf3+FgX5/gIB/gH5+f31/gIB/gIB/f319fHx9fn18fX19fX19fH58fXx7fXx8ent6fH19f4aEgoCAgX1+fX5/foyEgYZ+fXx8f36CgX99fX19gHx7fXx+gYSDgYB+fn5+fX1/f399foB+fn6EkYyMi46Ni4qGhIaEhIODg4OCg4KDgoOCgYGBgYGBgYGBgYB/fXx8fH1+f39/f397e399d352eH59fH18fX5+gYGCg4B6fX18fn+AgH6Af35/fn+AgH+AgH9/fn9+fn5+fn1+f399fH59fn19fHt8fHx6e3p9fn+Ag4OCf35/fH18fXx8gYN+jH58e3t9fn1+fn17e3t9e3p7e3uAhoWChIOCf4B+f4KCgn9/goJ/gIuPjIyLjIuKiISEhIOEg4ODgoKCgoKCgoKBgYGAgoGBgYKCf3+AgIB/fn18fH5/fn55fX52e3Z4fXx8fHt9fX6BgICAf31/f31+f39/foB/f39+f3+AgIGBgH99gH9/fn9+fn9/f3yCfn59fX17e319fHp8fH6AgoGAgIB8fH18fHx8fH18fXt/fnt7e3x8fH18e3t7e318enp9en6CfoGDhIKBgoGFhoWFhoaHhoKEkY6Mi4qKh4iFgoOEhISEg4KCgYGCgoKBgoGBgYGBgoGBgoKAgYKBgYCAgH9+e3x+fnx6fnh5dnd8fHx7e318f4GAf35/foB/f35/fn5/gH9/f39/f3+AgYKAfn6BgIB/f39/f39+fYN8fH19fH99fX19e3x+fn9+fn5+fnx8fHx8fHt+fnt8e3x8fHx9fH18fnx9fHx7e3x5e3x7e317fX5+f4CAg4eJiYmLiYuJhYiRjYuIiYeFhYOCgoOEhIODgoKBgYGBgYKBgYGBgYKCgoGCgoCAgX98e3p6eXt9enx+fnl8eXh4dHx8fHt8fHx+gX9/f39/gIB/fn5+fX+AgH9/f3+Af4CDgoB/gIGAgIB/f4CBgH58enx9fX59fX5+jIZ9fX57e4OCfX5+fX18fX19fX1+fH18fXx9fX58fn19fX18e3t7fHt8fHt6e3t6enp7fn6ChYiHiIqLi4uJjJCNjImIhoWEgoKCgoODg4OBgYGBgYGBgYGBgYGCgoOCgYKBgIGBf3+Af356eHl5en5+e3l6eH5zfHx8e3x8fH5+fn5/gH+AgIB/fn9+gIF/f4B/gIGAgoSEgYCAgYGAgX+AgYKBf39+f31+gH57foGRjHx9f4qAjYx+fn19fX59fX59fHx8fX18fXx9fX1+fX1+fnx7e3t8fH18e3p7fHl6eXh5e35/g4OEh4mKiImNj4yKiIiFhISCgYKCgoKCgoGCgoKBgYGCgYKCgoGCgoKBgoKAgYGAfoCAf39+e3p5e319eHx6f3KBfXt7fHx8fn59fYGBf4GBgX9/gH+AgX9/gIGCgYGFg4SCgYGCgYKCgICBg4KAf4F/fX6Afnx/f4iCf36CkISEg4F/fn18jYd9fX59fHx/fnx9fXx9fX5+fX5/fX19e3x9fnx8e3x9enp5eXl5e3t+foCBg4eEiI2MiYmGhYSEg4KBgoKCgoGBgYGCgoKBgoKCgoKCgoKCgoGCgn+AgIB+f39/fn5/ent5fX16enp9cX6Cent8fX19fXp4f4KAgYKCgICBgIGBgICBgoKCgoaFhIKBgYGBg4F/gIKEgX9+gYB9foF+fX5/gIB9fn+EgH5+f31+fX2KhX1+f31+foB/fX19fH5+fn99f4B9fn18fX9/fHx7fH17e3t6enp7e3x9fn6Ag4CJjImLh4WFhYSDg4KCgoKCgYGBgoKBgoKCgoKCgoGBgoKBgYKCf4CAgH9/f39+fn59eXp6fXx5d3t0e4d8dHd9fn17e3Z2foCBg4KBgYKCgoKBgYGDg4OChYaEgoCAgICCgX+AgYOBfn6AgH5+gH59fn6AgH+Bfn+Af39/f398f39/f3+Afn9/gH58fX18fn5+foF/gH2CgHx9gIF9fHx9fXx8e3x8e3t7fHt8fHx9fImJh4iFhoWFhISDgYKBg4KAgIGCg4KCgoOCgoKCgoGCgoGBg4J/gIGAf39/fn5+fn57enp8fHt2e3R3f352cnt+fnt4dnd8gIGCgoKBgoODg4OCgoSDhIOFhoOCgX9/gIOAgICAg4F+foCAfX+AfX1+foCAf4J/gYGAgICBf31/f3+AgIGAgIB/fnx9fX19fn59g32AfoKAfX6AgX98fn59fX17fH58fXx8fHt8e3x+iYWGhIWHhYSFhIKBgoGDgYCAgoKDgoKCg4ODg4KBgYGBgYGCgH6AgYB/fn5+fn5+fn56e3p9goN9dXF6fHpxen19eXh1dICAgoKCg4KDhYOEg4KDhISEhISEgYGAgH6Agn9+f36Bf35/f4B9foB9fX1+gH9/gYCCgYCAgIKBfn6Af4GAf4CAgH9+fX19fnx+fn19gYR/gH9+f4GBf31/f319fn1+fn1+fHt8enx7eoCGgoSEhYSEg4WDgoKBgYKBgICCgoOCgoOEg4SDg4KBgYKBgYOAfoCBf35+fn5+fX5+fnt7en6Jh354cnl9f3F6eHt4eXR1fYKDgoODg4OFhIWDg4OEhIODhIKBgH+Af4CBfn19fn9+fn5/gH19f3x9fX6Af4CAgIKAgIGAgoGAf4B+gIF+gIF/gH9+fn5+fn5/fn6FhYGBgH+Ag4F/foGAf35/foB/fn17ent6fHt6goSAg4KCgoOChIKBgYCAgoGAgIKBg4GBg4SDhIKEgoGBgoGCgn9+gIF/fn1+fn5+fX59fXp7fIWEe3tzeXp8cHd1dnd5dnR6hISBhISDhIWFhoSDg4WEgoODgoCBfn9/f4B9fX1+f31+f39/fn1+fH19foF/gIB/gIB/gIGDgoGAf36AgH+AgYCBgH9/f39/f4CAgIGCgoKBf4GEgX+Ag4J/f4B/gX+Af3x7e3p8e3yBgH+Bf3+BgIKCgYF/f3+BgH6BgoKDgYGDg4KEgoSCgYGBgIGCgH6AgH9/fX5+fX19fn19e3t6gH94fHZ5eXtxdHh3dnh1cnmFhYKEhIKEhYWFhISChIOBg4KAgIF+f4B+gHx9fX6AfX5/f39+fX98fn5+gX+Bf39+f4B/gIODg4B/f4GBgIKBgYGAgICAgICAgIGAgYKDgYF/gISAfYGDhICAgX+BgYKBfXp7e3x8fX99f4B8f399fYGAgH59fYB/foGBgYKBgIKCgoKBg4KCgYB/gYKAfn9/fn99fX1+fX19fX19ent7fHZ9eXh5enJ1eXl2d3dzdYaFg4WFgoSEhYSEhIKDgoGDgX+AgX5/gH6AfX19fn9+f4B+fn99f3x/f3+BgIF/f3x+gH6AgYKDgYCAgoOEgoGAgYB/goCAgYGAgYGCg4KBgX9/g4B+goKEgICCgYKChIJ+e3t8fHx9fX1+fXp+fX14fn9/fHx8fn1+gYCBgYCAgoGBgYGDgoGBf4CAgoB9fn19f319fX59fH19fX16e3p8dnx6d3t4cnZ5e3Z2dnN0hoSEhYSChISFg4OCgYOBgYOBgIGBfX+BfoF9fX1/f39/gH5+f359fYB/gIGBgX9+fH5/fn5/gYJ/gYGCg4eFgX9/fn6Af4CBgICAgIKCgYCAfoCCf36BgoKBgYOCg4OFgn99fX18e3x8eXp7en55e3l4f357e3t+fX1/f4F/gH6BgICAgoOCgYF/gIGBf31+fH1+fX19fX18fn58fXx5e3x4enx3endzeHd6c3d2c3SGhISFg4KDhISDgoKCg4GCgoGAgYF8gIB+gH1+fX5/gICAf35/f3x+gH+BgIGAf359f39+fn+BgH2AgIGDhIN/f359fn5+f4B/gIB/gYKBgH9+f4F+f4CCgoCBhIKEhIaEgH59fHx8fHp5dnl5enl2eXZ+fHt7e358e399gH99fX9/f3+BgoGBgX5/gYF+fX18fX19fX19fXx+jYF8fXl7e3p5fHd4eHR1dXhyd3d0doaEhIWDg4ODg4OCgYKDgoGDgn+Bf35/fn+AfX19fX+AgIB/f4B/fIB/f4GAgYCAf3yAf31+fn9/fX5+gYGCgn5/fn1+fn5+f3+Af32AgIB+fn5/gX5+gIKBf4GDgoOEh4SAgH58fXx8e3x1eXl4eHh5d3t8e3p7foV9fn1/ent+fn59foGAgIGAfX6BgH59fXx9fX19fX18e32Dgnx8ent7e3p7d3Z4dXJzdnF4eXJ4hYWFhYOEg4KCg4KBgYKBgIKBgIF/fn5+foB+fX58foCAgH+AgX98gH6AgH+BgIB/fYB/fn5/f319fX6AgYKBfn9+fn59fX5/fn9+fH+Af35+fn+Cfn6AgIF/gYOCg4OGhICBfnx9fHx7fHh3e3h1eXd3eXx6e3t9kod9fH13en1+fn19f35+gH98foB/fn19fH19fX19fXt8ent9enp4e3x6ent4dHh1cXJ0cHh4cXmEhYaFg4SDgoODgoGBgoKAgYGAgIB9fn5/gH18fn1/gIGAf4CBgHyAf4B+f4GAf399gH9+f39/fX18gICAgYB+f35+fn18fn9/f358fYB/fn1+gIJ/foCAf36BhIKCg4WFgoJ+fX17e3x8eXd7eXd4d3d4e3t6e3yFin17end6fH19fHx9fX1/fnx9fn59fXx8fX5+fX18fHt6enx7e3p5enp7enhzd3VxcXJweHdxe4WGhYWDhYKBg4OBgYGBgoCBgICBgH5/fn+AfXx+fYCAgoGAf4GBfX6Af35/gX+Af3+BgH+Af31+fH1/gICAgH9/f39+fXx+f39/f319f39+fn6CgYF/gIB/foGDgoKEg4SCgn5+fHx6fHt7eXt6d3N2d3h5e3p7eXp/fnt7d3p8fXx8fH59fH19fH19fXx8fX19fX99fXx9e3l7fHx8enp6enp6eHN2dXBwcm93dnJ7hYaEhYOEgoGDgoKCgYGCgYKBgYGAf4B/f399fX9+f4CBgYJ/goF9foF+foCBf4B/gIKAgIB+fH58f3+BgICAf4B/f4B+fX5+f4B/f39/gH9/f4J/gH9/gIB/gYGAgISBgoKAf39+f3x9fn56fYV+dHx9enp6enx5eXp6hoV3eXx8fHx8fXx8fHx8fX19fHx9fX19fn19fX16eX18fH16enp6enp5c3V1b29xb3d0c3yFhoOEgoOCgYKBgoKCgYKBgoGBgYCAgYCAgH59gH+Af4GCgn+Cgn+AgX5/gYF/gICAgn+Bf319f35/f4KAgICAgIB/gIB+fn1/gH9/gIB/f39/gH+AgICAgH+AgYCBgYGCgYCAf39/fn1/fnqBk416fH18e315e3p6eHmBgXh5e3x8fXx8fHx8fHx9fX18fH18fX1+fn59fHp8fHt9fXt5enp6eXlzdXVvb3Fwd3N0fYWGg4OCg4KAgYCCgoKAgYGCgYKBgYCBgIGAfn6Af4GAgYKCgIKCgICCfoCBgX9/gX+BgIF/fH6Af3+Agn+AgICAf3+AgH9+fX6Afn2AgIB/f3+AgICAgYCAf4CAgYCBgYKCgICAf39/fX5+fIGGiXx8fnt7fnl6e3p7jX53d3l7fHt9fHx8fHt9fH19fX18fXx+fn5/f358e3x9e319e3l5e3p5eHN0dW5zcXB4cnV6hYaDg4KDgoCAgIGCgX+CgYKBgoGBgYKAgYF/fn9/gYGCgYKBhIOAgYJ/gYGBf4CAgIB/gX99f4F/gICBgICAf4B+gICAf359foB+fn+Af39/gH9/gICBf4CBgH+BgIGBgoKAgICAgIB9foB9gIOCe35+e3x9e3p8fHyHeXh4eXx8fH17fHx9fX18fH19fn19fX5+f3+Af317fH18fHx7enl7e3l5c3J1bnZycHhxdXaFhYOEg4KCgICAgoF/gIKCgoKDgYGDgoCCgYB/gICCgoKBg4GEhICBgX6BgoB/gICAgH+Cf36AgYCCgICAgIB/gH+AgIB/fn2Af39/f4GAgH+AgH+AgYF/gICAgIGAgIGBgYGAgYCAgH9/gH5/fX59fn57fXx9e3x8d3h1eHh5e3x8fXt8fHx8fX5/f39/fn19foB/gIGAf3x9fHx9e3p7eXp8eHpzcnVud3FxenF2d4WFg4SDg4KBgYKDgH+CgYWDg4SBgYOBgoKBgYCAgYKDgoCCgoSDf4GAfoKDgICBgICAf4CAf4GBgIKAf4CCgH9+gICAgICAf4CAgH+AgICAgICAf4CBgYCAgICAgYGAgoOCgoGCgYGCgYB/f4B/gId+fnx6fXx7fX54d3Z5eXp8fX18fXt8fX19fn5/gIGAfn1+gICAgoGAfH59fX58d3t6ent5eXNxdW53cHV6cXZ5hYWCg4KDg4KDhISAgIKBhoOEg4GChICEg4KCgICCgoSBgYKChIJ/gIB/gYOCgYCBgYCAf4GBgYGAg4F+gIOCf31/goGAgIB+gYCBf4CAgYGBgYCAgIKBgYKBgYCBgYGBgoOCgoOBg4OCgYCBgH+AhH19fXx/fXp9gHp5dnp4eXt7fH19e3x9fX19fn+AgYGAgH+AgICDg4B9f35+fn15eXt6enp5c3J1b3dxd3lzd3uFgoKDgoOEgoOEg4CAgoKGg4ODgoKEgYSDgYKAgIKBhIGCgoGCgX6BgICCgYKBgYKCgIGAgICBgoGEgH6Bg4F/f4CDgoCBfoCCg4KAgYGBgoKDgoGBg4KChIGAgYOBgYKEg4KEhIODhIODgYGBgYCCf4B/fYB8enx/e3t3fHl5eXt6fX59fHx8fH1+fn+BgYCAgIGBgYSEgH2Af39/f357e3t6e3p0cHhyeXR2eHR3e4SCg4KDg4SChIODgYKChIaEgoODg4SBhISAg4CBg4KCgoKCgIKAfoGAgIKBgoGCgoKBgIGBgoOCgoOAfoGDgX9/gYSEgYN/goKBg4KCgoGDg4OEgYKEgoOCgoGCgoOBg4SDhISEhYSFg4SCgYOCgoOBgYGAgH58fIB8fHh8eXp5enx9f3x7fHx9fX18fICAgICAgYGBgYKBfoGAgICAf3t7fHp6enVweHd5dnV8dXZ8gICDgoODg4OEhISAgoOGhYWDg4KDhIGEhYKCgYKDg4GCgoKAgYB9gICBgYKDgoKCgoGAgYKCg4KCg4B/gYOBgICChIODgoGCgoGDgoKDg4SDg4SAgoSDg4OBgX+Bg4KDhYKEhISEhISDhISChIOEhIKBgoGBgHt+gX59eXx6enp9fXyBfXp8fH19fHp7fn5+gIB/gYGAgICAgIGBgIB/fX18fH18dnJ2eHh2dH92dX2Hh4OChIWDg4SFhICChIWEhIOCg4SEgISFg4KCgoODgYOCgoCCgH2AgIGCg4KCgoKEgoGCgoOEgoKBgICBgoGAgYOFhIOCg4CCgoOCg4ODhIOEg4CCg4KEg4KCfoOBgoSEgoODhISEhIOEhIOEg4WEg4ODgoKAe4CBf3x8fXp6e32AfX9/fHx6fH59fX19fn5/f39/gICAgH9+foCBgICAfnx9fX5/fn18e3h2f3Z3f4OHg4KDhYODhIaEgYKFhoWEhIODhISChIWFgoKDg4SCg4KDgoOBfoCAgoKDgoODg4SCgYKCg4OCg4GCgYGDgn+ChISDg4KEf4KEg4ODgoSDg4SCgIOEg4SDg4KCg4KChIOCg4SEhISEhIWEg4OEhYSFhIOBgoB9gYKAfXx8e3x8gH19foB+fn1/fnx8fX19fn5/fn+BgYGBgH99fX6BgYB+fn19fX59fX5+f3+AfH2BgYKCg4OGg4SDhoSBgoiHhYSDg4SEhYGFhYWDg4SDhIODgoOCg4F+gYGDg4SCg4OEhIOCg4KEg4ODgoODgYOCf4KDg4ODgoOAgoWDg4ODhIODhIOAgoSEhYOCgoODgoGEg4GDg4SDhISEhYSEhIWFhYWEg4ODf32BhIB9fXx8fHx/gX5/f39/fX99e3x9fX19fX5+f4CBgIGBgH59fH6Cf39+fn5+fX1/f39/gYCAf4CEhIODhIWDhIOFf36CiouFhISDgoOFgYaGhoOEhISEhIODg4OEgn+BgYODhYSFhIWEg4KEhISFhIODgoODhYKBhISFhYaEgoCDh4SDg4OFhIWFhIGEg4OHgoOCg4GCgYSDgoODhYODhYWEhYWHh4aHhYSEhYSAf4GDf35+fH59fX+BgH9+fHx+f358enx9fX19fX5+fn9/gIGBf319fIB/gH5+fn5+f3+AgYGBgYKAgYWFhIOFhIKEg4aAgoWFiomEhIOEhYWDh4aGhISEhIWEhISEg4SDgYKDg4OEhIaEhYSDg4SEhHyDhHuBhHd5g4F9hH5+cnWDgoF2foOFgX2BdYF6g39/gH6EhIKDg4KBg4SDg4SFg4SFhoSFhn2EeXx+f4N7hYKBhIOAf35+fn19gYOBfXt/fX6Afn18fHx9fX19fH19f4B/gYJ/fX18f4GBgICAgH+BgYGCgYKDg4KChoSEhIaEgYOEhYOEhYSKiIWFhYOFhYSGhoaDhISFhYWEhYWEhIWCgoOEhYWFhoSFhIOEhYWCaICFanx7cXF8gXOGc3R0fYKDdXNxg4Z0cHVyc3SDdnt9dYF/goOBgnZ5hYCDgIR/hYSChYWCaHpyc3N8gHOCg3+Dg32BfX5+fX6Cg4F8f4B9f4B9fXx8fHx9fHx8fn1+gH+BgX99fX2AgYKBgYGBgIGBgYKBgoKCgoSHhIWEhYSBgoSGhoOGg4aIhoaFg4aGh4eGh4OFhYaFg4KFhoSFhYODg4SEhoaGhIaEg4SFhn1xe4FweXZ+g3+CbnlwdXN8dnl5hXKEg3B2eHF2dHR1cnN0dml/gG5yb3R2bnVsd217c26AiHltfXJzdnN2bW14bHB5bHV9f399foGAgX1/fn2Af4B/fX18fHx9fH1+f32Af4CAfnx/foCBgoCBgICAgYCAgIKDgoOEhYiGhoCChYODhIeGg4aFhYaHh4SDhoeIiYaHhIWGiIeEg4WGhYWEhIOFhIKFhoaFhoWEhoWHdnB0e3BydX+HhYNtdW92b3x1coR5eYd4cXR3bndod3pucHWCcoN+b3p5eW1vbnpvb213fXiGcHF6cHJ0ZoF1fm57eXNveX+Af319gX9/fH99fIF+gIB+foCAgYB+fn9/foF/gH9+fYB9f4CBgIB+fn+BgH9+goOCgoSFh4eEfoeEg4OFh4aEhoWFhoaIhISGh4iIhoeEhoaLiYWEhoeHhYOFhYWEgoWFhIWGhYWGhYZxdXByc29zenl+hHSIdHV+iHZugnKEhnluanJ/cW1zd3x/dXR8hH54cXV3bnl1enF2eHV6eYRxam95eHBreXN6b3p3dnZwgYB/fn5/f356fn19f31/f359gIGDg4CCg4GBhIKBgIGBgH1/f4F+f35+f4GAfn6BgoCAgYSHhoODhoSEhYaHhoWFhYWGhoiFhYaFh4eFhoSGhomIhYSJioiFhIaGhYWDhYWEhYaGhoaFg3iLeXKIentwcIWEeIV4eWtzfnl7a3KDh4N6fG17eXl0fYB2bm+AgG90fHV3cXl9fW1+dW+DhYZ6gHJye3x1cG96bHN8bneCgIF+fn99fXt9e3x9fX9/fn1/f4KCf4GDgYGDgYB/gICAfn9+f31/fn1/gH58fYGAfn6Ag4iFhoOFhYWFhoeFhYWFhYeHiIaEhoWHhoaFhIWFhYWFhomJh4aEhoWGhoWGhoSGhoeGhoWGh4eHhoaEhoWGh4iHhYeGhoOHhoWFg4SFhoWGhIaEg4SEhoSDgYODhISFhIWEhYSGg4aHhYaEhIWHhoSEhYaEhX13hYOEhIKBgX1/fnt8e357fHx9f359fH59gIB9f4F/f4GAfn5+gH5+f35+fX99fX5/fHt8f358fH+BiYaFhIaGhoWHhoWFhYWGhoeIhoSGhYaGhYWDhIWGhYSGhoaGhYWGhIWGhoaGhYaGh4eGhYeIiIiIhoSHhYaGiIaFiIeIhYeGhoiFhYaHhYaGhYOChYWGhYWDhYOEhIWEhYWEhYWDhoeGhoWEhoeGhISFhoOFhIKEg4OFg4OCfYB/e3t8fXt8fH1/fnx8fn2Af31+gH5+gH99fXyAfX5+fn5+fnx8fX57fHx/fHt7fX+Ih4SEiIaGhoeGhYWEhoaGhoiHhIWGh4aFhIODhIaFhIeFhYaFhIaEhYaGh4eFh4aJiIaGh4eIiYiFhYiFhoeGh4aHhoeFh4eGh4WFhoeFh4aFgoOFhoaEhIOEhIOEhoSFhYWGhoOGhoWGhYWGhoWEhIWFgoWHhYOCgoWDhIF+gIB8e31+e3x7fX59fHx+fX5+fH9+fX1+fXx9fH98fn58fYGAfHx8fXx8fH56e3t9foiHgoWIh4eGhoaGhISGhoeGiIaEhYSGhoSFh4OEhYSFh4SFhoaFhoSGhoeHhoaHh4mIhoaIh4iKiIWHiIWHh4WHhoeGh4WIiIeHhYaGh4WGhoWBhISFhoWFhISEg4SFhYaGhoWGhIaFhoeFhYaGhYSDhIOChIeDhIGChISDgYCAgHt7fn18fHx9fXx8fH19fH18fn18fX18fHx9fXx+fXt8gX99fH18fnx8fHp6fHx9iIeChoiHhoeGhoaDhYaFhoaGhYOFhIaFhIiJg4GEg4SGhIaGhoaGhIeHiIiHh4eIioiGh4iHiImIhYiHhYeGhoeHh4WHhoiIh4eFh4eIhoaHhIKEg4SGhYeFhISEhISFhoaGhoaFh4WFh4WGhYeFhIOEg4ODh4GDgIKDg4KCgn+Ae31+fXt8fH59fH19fH17fHx8fHx8fXt7e318e358e3x/fX18fX1+fXx6ent7fHyIh4KGhoaGh4aGhYOFhoWFhYWEg4WChoSDiId/enqChYaEhoaFh4aEh4eJiIiHhoiKh4aHh4eIiYeFiIeGiIeGhoeHhYeGiIiHhoWHh4eGhoeDg4SEg4aGh4WFhISEhYaGhoaGhYaHhoaHhoaEhoWDg4ODgoOGgYN+goKDgIOCf398f35+fHx9f318fX18fXp7e3p7fHx8e3t7fnt7fXt7e358fHx8fX5/fXt6fHp8fYmHg4aFhoWGhoWEhIWFhYWFhIOBhYGGhIKEhHyAhn+ChYWGhYWGhYSHh4iIiIaFiYqHhYeGh4eIh4WIhYaHiIaGh4eGh4aIiIeFhoeGh4WFh4OEhoWEhoaHhoWFhIWFhoaGhoaFhoaHhoeHhYOGhYOBg4KAg4WCg36BgYF/g4F/fn5/fn58fH1/fXt9fXx+enl6eXt8fXt7e3t+fHx8fHp7fXx8fHx+fYF8e3t7e3x7iYeEhoSGhIaGhYSFhoWEhIOEgoCDgYWDgYJ/eoSMe4CEhYeGhoaFhIeIh4aHhYWHiYeEh4WGhoiGhYeEhoeJhoaIiIeHhoeIhoSHhoaHhYWHg4SFhIeGhoeFhYSDhYWHhoeGhoWGhoaFhoaEg4WFgoGCgYCDg4OCfYGBgH6DgX5/f4B8f3x9fX59e359fH15eXp5e319enp7e318fXx8ent9fHx9fH5+gHx7e3x+fXyIh4WGhYaEhoSFhYWFhYODgYOBgIKBhYJ/gH9/fXx7gYSFhYaEhYSDh4eGhoaFhIaJhoKGhIaGhoWFh4WHiImGhYiHiYeGhoeFhIaFhYeFhIeDhIWEiIaGh4WFhIKGhYaFh4aHhIaGhoaFhoODg4WAgIGAgIOBg4B8gYB+foKAfYB/gXx/fH1+fX57fn18fHl6enl6fX15enp7fHt8e3t6e319fH18f35+fHt7fX59fIiGhYaGhoSFhYSFhYSDgoKAgoGAgICDgX5+foB5en2Ag4OEhoWEg4OHhoOEhYSChYiFgoSDg4WFhYWHh4aIiIaFiIeJh4aFhoWDhoSFh4OEhoSEhYSHhoWGhYaEg4aFhoaGhoaEhYaGhYWGgoKChH9+gICAgYCDgHuBf31+gn5+gH6Afn99fX59f3t/fXt6eXp6eXp8fXl6ent7enx6e3t7fH19fXyAfn18fH1/fnx7h4WFhoaGhoSFhIWDhYKBgICAgYB+gIKCfX5/f3t/f4KDg4WGhYSDgoaDgYOEgoCFh4WCg4GBhIWEhIaGh4iHhYWIhomHhYOEhIKFg4SGgoOFhISGhIeGhYWFhoOEhYSFhoWGhIOFhIWDhYWBgYODfn5/gH9/gIN/e4B9fX+CfYCBfn6Bfn1+fX1/e398e3p5enp5enp8eXp6e3t7fHp7e3t8fX59fYF9fXx8fYB/fXyGg4aGhoaFg4SChYKFgYGAf3+AgH5/gIF8fn9/foCAgYKChIWDgoGChIGAg4KBgISFhYKBf4CCg4OEhYaIhoWEhoeFh4WFgoOCgoOCgoWBg4WEhYaEhoaHhoaFgoSEg4SGhYWDhISDhIOFhICAgoJ+fX1/fn5/hH57f3x8gIF9gYB9fYN8fn59fX57fnt7enl7enl6ent5enp6e3t8ent8fHt9fn1/gXx9fHx9f4B+gIaEhYWEh4SDg4KGgoOAgYB+fn+AfX9/gnx9f39+fn+BgYKEg4KBgYKCf4CBgoCAgoWEgoB/gIGCgYOFhYeFhISGhoOFg4WBgoGBgoGCg4GChISEhYWGh4eGhYSDg4ODhIaFhIGDgoOChIODgH+AgX59fH5+fH6Dfnx+fHyBgH6Cf31/gnx/fn19fHx8e3t6enp6eXt6enp5eXp6e3x5e317fH5/f4GAfX59fX1/gICAhoSEhYSFgoOCgoSCgoCBgH59fn9+fn6AfX2Af35+foGBgoODgoSHgYF+gICBf3+ChIOBf35/gIJ/goWEhYSCg4WFgoSBg4CBgIGBgYKBgIGEg4OGhYWHh4WEhIWCgoKDhYSCgYGBgoCFg4F/foB/fnx8fn18foN9e358fYF/gIN9fYCBf35/fXx8fH17e3p6enl5e3l6enl6ent7e3p7fXx8f3+BgoB+gH+AgH+AgYDKysrKysrKysrKysrLy8vLy8vLy8vLy8zMzMzNzc3Nzc3Nzc3NzczMzMvLy8vLy8vLy8vLy8vLzMvLy8vLy8vLy8vLy8vMzMzMzM3Nzc7Oz8/Pz9DQ0NHR0dLS0tLS0tLT09PT0tLS0tLS0tPT09TU1NTU09PT09PT09PT09PT09PT09PT09PT09PT09PT09PS0tLS0tLS0tLS0tPT09PT1NTV1dXV1dXV1dXV1dXV1dXV1NTU1NTT09PT09PT09PT09TU09PU1NTU1NTU1NTU09PT09PS0tLS0tPT09TU1NTU1NPT09LS0tLS0tLR0dHR0dPHhnNlYFtLWWdVTUZIQD03Nzg5Nzw8PDo8Oz42Oj04PDs6OTg3ODs7Oj87PTs8PD47P0E/QkJBQ0RFREE+PTw7QENDQUBDQ0FBR0hHSUtSwtXS09PT09TU1NTU1NTU1NTU1NXV1dXV1dXV1dXVysrKysrKysrKysrKy8vLy8vLy8vLy8vMzMzMzMzNzc3Nzc3Nzc3MzMzMy8vLy8vLy8vLy8vLzMzMy8vLy8vLy8vLy8vLzMzMzc3Nzc3Oz8/P0NDQ0NHR0tLS0tLS09PT09PT09PT09PS09PT09TU1NTU1NTU09PT09PT09PT09PT09PT1NTU1NTU1NTT09PT09LS0tLS0tLT09PT09PU1NTU1dXV1dXV1dXV1dXV1dXV1dXV1NTU1NPT09PT09PT09PU1NPT09TU1NTU1NTU1NPT09PS0tLS0tPT09PU1NTU1NTU09PT09PS0tLS0tLR0dHSzIxyZ2BcTVllUktHSz87Mzc4Ozg5Pj05PDpBOjs9Nzs8PDo6Nzg6Oz0/Oz88PTw/Pj9BPUFBPkNDREJAQT46Oz9DREFDRERCQklHSEhJTr7V0tPT09TU1NTU1NTU1NTU1NXV1dXV1dXV1dXV1crKy8vKysrKysrKy8vLy8vLy8vLy8vLy8zMzMzMzM3Nzc3Nzc3NzMzMzMzMy8vLy8vMzMzMzMzMzMzLy8zMzMzLy8vLzMzMzc3Nzc3Ozs/P0NDQ0NDR0dLS0tLS09PT09PT09PU09PT09PT09TU1NXV1dTU1NTT09PU1NPT09PT09PT1NTU1NTU1NTU1NPT09PS0tLS0tLS0tPT09PT1NTV1dXV1dXV1dXV1dXV1tbV1dXV1dTU1NTT09PT09PT09PU1NTU09TU1NTU1NTU1NTT09PT0tLS0tLT09PU1NTU1NTU1NTU09PT09PT0tLS0tHR0s+Sd2hfXk9XZ01LRkw9ODc2NTk5OTw+OT88RDk7PDc5PD07OTc5Ojw9QDs+PT47PD48PT5BQD5EQ0NDP0E9Ojs9QkNFQ0NEQT9FSEpJSky61dPT09TU1NTU1NTU1NTV1dXV1dXV1dXV1dXV1dXLy8vLy8vLy8rKysvLy8vLy8vLy8zLy8vMzMzMzMzNzc3Nzc3Nzc3MzMzMzMzMzMzMzMzMzMzMzczMzMzMzMzMzMzMzMzMzc3Nzc3Ozs/Pz9DQ0NDQ0dHS0tPT09PT09PT09TU1NTU09TU1NTU1NTV1dXU1NTU1NPU1NTU09PT09TU1NTU1dTU1NTV1dTU09PT09LS0tLS0tLS09PT09TU1dXV1dbW1dXV1dXV1tbW1tXV1dXV1NTU1NTT09PT09PT1NTU1NTU1NTU1NTU1NTU09PT09LS0tLT09PU1NTU1dXV1dTU1NTT09PT09PT0tLS0dHRmn5nYWJOVWpKSElLPzw6OTM3Njc3PTs+OT06Ojo4ODo7Ozg4Ojs7PD46PT09Ojw/PD0/QkA/Q0RDRD5APT08QENEQ0JEQkQ+REhJSUtMttfT09TU1NTU1NXV1dXV1dXV1dXV1dXV1dXV1dXVy8vLy8vLy8vLy8vLy8vLy8vLy8zMzMzMzMzMzMzNzc3Nzc3Nzc3Nzc3MzMzMzMzMzMzMzMzNzc3NzczMzMzMzMzMzMzMzc3Nzc3Ozs7Pz8/Q0NDQ0NHS0tLT09PT09PT1NTU1NTU1NTU1NTU1NTV1dXV1NTU1NPT1NTU1NTU1NTU1NTU1dXV1NXV1dXV1NTU09PT09PS0tLT09PT09PU1NXV1dbW1tXV1dbW1tbW1tbW1dXV1dXU1NTU1NTU1NTU1NTU1NTU1NTU1NXU1NTU1NTT09PT09PT09PU1NTU1dXV1dXV1dTU1NTU09PT09PS0tLR0p+DaV9kU1hsSEhIS0A9Nzg0NzY6Oj87RDw8OTw8OTg6OTo6Ojs8Ojo7OT49Pjk9QDs/QUFCP0JCQUM9Pz8+PEBCRUNDQkBBO0ZJR01MSbLY09TU1NTU1NXV1dXV1dXV1dXW1tbW1tbV1dXW1svLy8vLy8vLy8vLy8vLy8vLy8vMzMzMzMzMzM3Nzc3Nzc3Nzc3Ozc3NzczMzMzMzMzMzc3Nzc3Nzc3Nzc3Nzc3Nzc3Mzc3Nzs7Ozs7Pz8/P0NDQ0NHS0tLS09PT09PT09TU1NTU1NTU1NTU1NTV1NXV1dTU1NTU1NTU1NTU1NTV1dTU1dXV1dXV1dXV1dTU1NTU1NPT09PT09PT09PU1NXV1dbW1tbW1tbW1tbW1tbW1tbV1dXV1dTU1NTU1NTU1NTU1NTV1NTU1NXV1dXU1NTU1NTT09PT09PT1NTU1dXV1dXV1dXU1NTU1NTT09PT09LS0tSjiGxfZlJWakdIR0lBPjM2Njo7PDhDPEJBPjxBPDg5Ojw6Ojw8PDk8PTo7PD09PD89QD9AQT9AQUBCPD4+PzxCQ0NDRkBBQT1ISklOTUeu2NPU1NTV1dXV1dXV1dXV1dbW1tbW1tbW1tbW1tbMzMvLy8vLy8vLy8vLy8vLy8vMzMzNzc3Nzc3Nzc3Nzc3Nzc3Nzs7Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Ozs3Nzc3Nzc3Nzc3Nzs7Ozs7Oz8/P0NDQ0NHR0dLS0tPT09PT09TU1NTU1NTU1NTU1NTU1NTV1dXV1dTU1NTU1NTU1NTU1dXV1dTV1dXV1dXV1dXU1NTU1NTU09PT09TU1NTU1NXV1dbW1tbW1tbW1tbW1tbX19bW1tXV1dXV1dXV1dXV1dTU1NTU1dXV1dXV1dXU1NTU1NTU09PT09PT1NTU1NXV1dXV1dXV1dXV1NTU1NPT09PT0tLWroprY2VSWGhMSkdJQjg0OTQ6Ozo5QDk/Q0VAPDw5OTk9Oj07PDw6PTw7OTw9Ozs/PUA9PT5AQD9CQT5APD05QERDQkFBQj48SEpLTU5IqNnU1NXV1dXV1dXV1dXW1tbW1tbW1tbW1tbW1tbWzMzR09PT09PT09PT09PT087Ky8vLzMzMzMzMzMzMzM3Nzc3Nzc7Ozs3Nzc3Nzc/Pz8/Pz8/Pz8/Pz9DQ0dHR0dHR0dHR0dHS0tHV2djY2NnZ2dra2tvb29vZ2dnZ2dna2tra2tra2tjW19fX19fX19jX19fX19zd3d3d3d3d3d3d3d3d2tbX19fX19fX1tbW1tbX2tra2tra2tra2trb3NzX1dXV1dXV1dXV1dXW1tbX1tbW1tbV1dXV1dXV1dXV1dTU1dXV1dXV1dXU1NTU1NTU1NTU09PU1NTU1NXV1dXW1dXV1dXV1dTU1NTT09PT09PS1bqKa2hoUlhlSUlMT0A5OTo0O0E8Nz05QUM+QD89ODo6Ozk9Oz4/Ojs8PDo7PDo7Pj1APT8/P0FAQUE/QTw8Oz5BRENBREA9PElJSk1ORqPa09TV1dXV1dXV1dXW1tbW1tbW1tbW1tbW1tbW1szNhG1wcHBwcHBwcHBwcGqn493d3t7e3t7e3t7e3t3S0NDQ0NDQ0NDQ0NDQ0ci5ubm5ubm5ubm5ubq6t6WkpKSkpKSkpKSkpKSnhmBjY2NjY2NjY2NkZGRlhIuKioqKioqKioqKioemuri4uLi4uLi4uLi4ubR7c3Nzc3Nzc3Nzc3NzcJTAvL29vb29vb29vb2+tIqKioqKioqKioqKiouHvebh4uLi4uLi4uLj4+Pi2NfX1tbW1tbW1tbV1dXV1dXV1dXV1dbW1dXV1dXV1dTU1NTU1NTU1NTV1dXV1dXW1dXV1dXV1dXV1NTU1NTT09PT09XDkXFrak5TYkxMVk48Ojo3Nz5DPjg+Oj8/QTw/QDc7Ojs7PTs+Pjo7PD48Oz07PT8+QDw/Pz1AQEBBPj88PjxAQUVCQkZAQD9HSEpLT0ae2tXV1dXV1dXW1tbW1tbW1tbW1tbW19fX19fX19fMzk4mKysrKysrKysrKysiivTr6+rq6urq6urq6uvp1dLS0tLS0tLS0tLS0tTEqaqqqqqqqqqqqqqqq6aGhIWFhYWFhYWFhYWFik4MEhISEhISEhISEhIRE0pUU1NTU1NTU1NTU1NPg6ejo6Ojo6Ojo6Ojo6WaNCkrKysrKysrKysrKyRksKmqqqqqqqqqqqqqrJtTUlNTU1NTU1NTU1NTS6ry6+vr6+vr6+vr6+vr6dnX19fX1tbW1tbW1tbW1dXV1dXV1dbW1tbV1dXV1dXV1dXV1dTU1NTV1dXV1dXW1tXV1dXV1dXV1dXU1NTU1NTU1NPUy5h2bGlKTl9NUlVNPjw8NztAQz42Ojc+Pjs9Qj85PDk9Ozw6PD07PTs9Ozs9PD0+PT07QT08QUBBQT08Pzw7QEJDQURFPUFAQ0ZLS09GmNzV1dXV1dbW1tbW1tbW1tbW1tfX19fX19fX19fXzc5SKzExMTExMTExMTExJ43z6enp6enp6enq6unq6dXS0tLS0tLS0tLS0tLUxaqrq6urq6urq6urq6yoiIeHh4eHh4eHh4eHh41SEhgYGBgYGBgYGBgYFxpOWVdXV1dXV1dXV1dXU4WopKSkpKSkpKSkpKSmnj0uMDAwMDAwMDAwMDAqaLKrq6urq6urq6urq66dWFdXV1dXV1dXV1dXV0+r8erq6urq6urq6urq6unZ19jX19fX19fX1tbW1tbW1tbW1tbW1tbW1tbV1dXV1dXV1dXV1dXV1dXV1dXW1tbW1tXV1dXV1dXV1dXU1NTU1NTU1NGcenFpSlRdT1JVTkQ+Pzs+QEA4Ojs4PDs7PD86Ozs4Ozk5Ozw7Ojw5Ozs8Ozo9PT0+PUE/Pj8/Pj08PT88PEFBQ0FERTw+QEVGSktNRpPc1dXV1tbW1tbW1tbW1tbW1tfX19fX19fX19fX183PXDk9PT09PT09PT09PTWT8Ofn5+fn5+fn5+fn5+bV0dLS0tLS0tLS0tLS08Wtrq6urq6urq6urq6vq46NjY2NjY2NjY2NjY2SXSInJycnJycoKCgoKCcpWmNiYWJhYmJiYmJiYl6MrKmpqampqampqampq6NLPD4+Pj4+Pj4+Pj4+OXG0r6+vr6+vr6+vr6+xoWJhYmJiYmJiYmJiYmJbr+/p6enp6enp6enp6enn2djY2NjY19fX19fX19fX19fX19bW1tfX19fW1tbW1tbV1dXV1dXV1dXV1dXV1tbW1tbW1tbW1tbV1dXV1dXU1NTU1NTWo3txZElbYE5OVU9AQT89REI/Oz06OTs6PT07PDs6OTg5OTs8Ozw8Ojo7PDo7QD08PTxAQTxBQTs7PEA/PD1CP0RDQ0U8PkJERkpMTEWN3NXV1tbW1tbW1tbW1tbX19fX19fX19fY2NjY2NjNzcXCw8PDw8PDw8PDw8PCydDPz8/Pz8/Pz9DQ0NDQz87Ozs7Ozs7Pzs7Oz8/NzMzMzMzMzMzMzMzMzMvJycrKysrKysrKysrKysfCw8PExMTExcXFxsbGxsvMy8zLzMzNzMzMzMzLz9HR0tLS0tLS0tLS0tLRysnKysrKysrJycnJycnN09PS0tLS0tLS0tLT09HNzc3Nzc3Nzc3Nzc3NzdTY2NnZ2dnZ2dnZ2dnZ2djY2NjY2NjY2NjY2NfX19fX19fX1tfX19fX19bW1tbW1tbW1tXV1dXV1dXV1dbV1dbW1tbW1tbW1tXV1dXV1dTU1NTU169/cF5GXmJQUVdOR0ZDQ0lBPz07PDo8OEBCPD04Ojo4OTg7Pzs8PDs7PDw8PD87PD46Pj44PkI8Pj1BPjw+QkBERUNAPD5APkNJSUtEh9zV1tbW1tbW1tbW1tbX19fX19fX19jY2NjY2NjYzs3P0NDPz8/Pz8/P0NTQ0M7MzczP09LSzs3P0s7Ozs7Ozs7Ozs/RztDU0s/O0NTSz8/Pz8/Pz8/Pz8/Pz8/P0NDQ0NDR0dHR0dHS09PU1NTU1dXV1tbW1tfW1tbX1tfX19fX19fX19bW1tbW1tbW1tbW1tbW1tjX19fX19fY19bX19fX1tXW1dbW1tbW1tbW19bW2NjY2NjZ2dnZ2dnZ2dnY19jY2NjY2NjY2NnZ2dnZ2dnZ2djY2NjY2NjY2NjY2NjX19fX19jY19fX1tbW1tbW1tbW1tbW1tbW1dbW1dbW1tbW1tbW1tbW1tXV1dXV1NTV1di4gm9XSl9jUlFaS0hBQTxCPT07Oj4+PD4/PT0/Nzk6OTk3OD48PD47Ozw7PDs/PT0+OTs7OT0+P0A+QD07OkI/QkNCPz0+QD5CRUdKQoDc1tbW1tbW1tbW19fX19fX19fX2NjY2NjY2NjY2M7Ozs7Ozs7Nzc3Nzsqfys3Nzc3QuYOEi8fTwJrLz87Ozs7OztHBp9PIlKjS0MaTq9LOzs7Ozs7Ozs7Ozs7Oz8/Pz8/P0NDQ0NDQ0NDR0dHR0tLT09PU1NTU1NTV1dXV1dXV1dXV1dXV1dXV1dXW1tbV1dXV1dbW1tbV1dXV1dXV1NTU1NXV1dXV1dXV1dXW1tbW1tbW1tbX19fX19fX19fY2NjY2NjY2NjY2NnZ2dnZ2dnZ2dnZ2dnY2NjY2NjY2NjY2NjY2NjY2NfX19fX1tbW1tbW1tbW1tbW1tXV1tbW1tbW1tbW1tbW1tbW1dXV1dXV1dXYwIBuVU9gY1dZW0xMQ0A9PTs9Ojw+Qj5CQ0A8Ojg5ODo6Ojc7Pz4/PDw7PDo5Pzw8PTg5PD9BPj09PUFAPTtBQkBCQz47QD9BQUlHSkF629bW1tbW1tbX19fX19fX19jY2NjY2NnZ2djY2dnOzs7Ozs7Ozs7OzdKpj63Rzs7Ozpu3tqSiwJOerNPOzs7Pz8/RnY/AnKubsNCZrZmz0s7Ozs7Ozs7Ozs7Pz8/Pz8/Pz9DQ0NHR0dHR0dHS0tLT09TU1NTU1dXV1dXV1dXV1dXV1dXV1dXV1dXW1tbW1tXV1dbW1tbW1tXV1dXV1dXU1dXV1dXV1dXW1tbW1tbW1tbW1tfX19fX19jX19fY2NjY2NjY2djY2dnZ2dnZ2dnZ2dnZ2dnZ2djY2NjY2NjY2dnY2NjZ2NjY19fX19fX19bW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tXV1dXV1dXV18h/b1pTYWVeXVxPSkQ9QD8+Ozc6Pjk/RD5BOTg3ODk7Ozw4OT89PTw9PD47OkE7OTs5OzxDQDw7PT5AQT49QkQ/QkM9PT8+Pz5ISUg/ddrW1tbX19fX19fX19fX2NjY2NjZ2dnZ2dnZ2dnZzs7Ozs7Ozs7Ozs/Inrym0tDQzsqgl36Cw6abr6fUz8/Pz8/Tuq+rtZWHnJ7Fk4adnc7Pzs7Ozs7Ozs7Oz8/Pz8/Pz8/Q0NDR0dHR0dLS0tPT09TU1dXV1dXV1dXV1dXV1dXV1dXV1dXV1tbW1tbW1tbV1dXV1dXW1tbV1dXV1dXV1dXV1dXW1tbW1tbW1tbW1tbW1tfX19fX19jY2NjY2NjY2NjY2NjZ2dnZ2dna2dnZ2dnZ2dnZ2dnZ2djY2NjY2NnZ2dnZ2dnY2NjY2NfX19fX19fX19bW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1dbV1dXV1dfNiHNdWGloXl9gT0lGOkFAPj88PDo2P0JAQzo2NDc6Ozo8Ojk+PD49PTs/PTxBPjw8Ojw8PTw6PEA9QEI+PkFCPUNDPT0+Oz9BRUtIQHDZ1tbX19fX19fX19fY2NjY2NjZ2dnZ2dnZ2dnZ2c/Pz8/Pz87Ozs7SrKWnqdXAvNLHnY+ey9PJipmq1M/Pz8/P05+xm7++yJiZxr3JlpnG0M/Pz8/Pz8/Pz8/Pz8/Pz8/Q0NDQ0dHS0tLS09PT1NTU1dXV1dXV1dbW1tbW1dbW1tbW1tbV1tbW1tbW1tbW1dXV1dXV1dXW1dXV1dXV1dXV1dXW1tbW1tbW1tfX19fX19fX19fX19jY2NjY2NjY2NjY2NnZ2dnZ2dnZ2tnZ2dnZ2dnZ2dnZ2dnZ2dnY2dnZ2dnZ2dnZ2dnY2NjY19fX19fX19fX19bW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbV1dXW0JB1W1tqaWFeXVNOSTxDQEE+QD46OEZBP0M6NzQ5Ojo5Ozs4Oz0/Pj49QT08P0A9Pjw8PDw8Oj1AQD8/PT5CQD9AQkA8QD0+QUVLRz9r19fX19fX19fX2NjY2NjY2NjZ2dnZ2dnZ2dnZ2tnPz8/Pz8/Pz8/QzJ2Nl6zQmpfKxZ6ynpbN1q2ZqtTPz8/P0cCciZq905SWn87RkZigztDQ0M/Pz8/Pz8/Pz8/Pz8/P0NDQ0dHS0tLT09PT1NTU1NXV1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbV1dXV1dXV1dXV1dXV1dXV1dXW1tbW1tbW19fX19fX19fX19fY19fY2NjY2NjY2NjY2NjZ2dnZ2dnZ2drZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2djY2NjY2NfX19fX19fW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1dXV1tKUcl5ea2tqZV1PTEc/RENDQDo9OzxCPD49OTY0Ojk5Ojo5Nzs/QDs8PUA8PEE+PD07PTw/PDo8Q0A+PTs9QD5CPkBBPkA9QD9GSUQ/ZtXX19fX19fY2NjY2NjY2NnZ2dna2tra2tra2traz8/Pz8/Pz8/P07GigJuvyaCjv8qcpYynrdiqmarUz8/Pz9SjooGbxLKfwpvaraO/ndXQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NHR0tLT09PT1NTU1NXV1dbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1dXV1dXV1dbW1tXW1tbW1tbV1tbW1tbX19fX19fX19fX19fY2NjY2NjY2NjY2NjY2NjY2dnZ2dnZ2dna2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2djZ2djY2NjY2NfX19fX19bW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbSk3BgXnBoZmVaUUhHQkVDQEA3Ojo8Pjo8OTc2NTk6Njo8Ozc8QEA8Ojo9Oj0/Pj08OUA8PDo6OT9APj08PUBBQz9APz5BOz9ARkpCP2LS2NfX2NjY2NjY2NjY2dnZ2dnZ2tra29vb29vb28/Pz8/Pz8/P0M6fkGyclteqo9PSrqa1mJ/Vqpmq1M/Q0NHEn4F7lq3Qi5Oex8uIlZ7I0tHR0NDQ0dHQ0NDQ0NDQ0NDQ0NHR0tLT09PT1NTU1dXV1dbW1tbX19bW1tbW1tbW1tbX1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tfW1tfX19jY2NfX19fX2NjY2NjY2NjY2NnZ2dnZ2dnZ2dnZ2dna2tnZ2dnZ2dnZ2dnZ2dnZ2dnZ2djY2dnZ2dnZ2dnZ2dnZ2NjY2NjY2NjX19fX1tbW1tbW1tbW1tbW1tbX19fX19fW1tbW1tbX0pNuYFxxZGdkWlVKQENGQ0FCODs/PD07PDw4NTU4OTY4Ozo5PDo+Pzw9PTk8Pz49Ojo+OTw6Ojg+Pzw9PTw+QEFDQT48PDpCRERKRkJd0NnX19jY2NjY2NjY2dnZ2dna2trb29vb29vb29vPz8/Pz8/Pz9G9n8O31pfA09HQ0srSzZeb1KqZq9XRz9DVq6+8wM+UytulmbPQ26KZtdXR0dHR0dHR0dHR0NDR0dHR0dHR0tLT09PU1NTV1dXV1tbW1tfX19fX19bW1tbW1tfX19fW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW19fX19fY2NjY2NjY2NjY2NjY2djZ2dnZ2dnZ2dnZ2dnZ2drZ2tnZ2dnZ2dnZ2dnZ2dnZ2djY2NjY2NjZ2dnZ2dnZ2dnZ2dnY2NjY2NjY2NfX19fX19fX19fW1tfX1tbX19fX19fX19fX19bW19GRbF1cb2doYl1PRkBISUdFQDw8Pj48PT48NzU2Ojk2OTs6Ojs4QD86PDw5PD49Ozs6Pzk/Ojs5PT49PTs7PTxAQ0I/Pz47Q0ZGR0hEWc3a2NjY2NjZ2dnZ2dnZ2dna2trb29vb29vb29vb0NDQz8/Pz8/Pz5V+e6WS1KKa08ySl6ObodirmavV0pem1cmHf4Wgm5GnmaCtkKiYnrvV0dHR0dHR0dHR0dHR0dHR0tLS0tLS09PU1NTV1dXV1tbW19fX19fX19fX19fX19fX19fX1tbW1tbW1tbW1tbX19bW1tbW1tbW1tbW1tbW1tbW1tbW1tfX19fY2NjY2NjY2NjY2NjY2dnZ2dnZ2dnZ2dnZ2dnZ2tra2tra2tnZ2dnZ2dnZ2dnZ2djY2NjY2NjZ2dnZ2tnZ2dnZ2dnZ2djY2NjY2NjY2NjX19fX19fX19fX19fX19fX19fX19fX19fX1tfPjGRWXnBrXGBgTkVITUlJT0M+OkI9PUBCOzU0Nzw6Nzo7Ojo7OT09OTo6OT0+Pz07OT47PDo8Ozk+PD47PD0+QENCPz5BPEFDR0ZGRVXJ29jY2NnZ2dnZ2dnZ2dra2tvb29vb29zc3Nzc3NDQ0NDQ0M/Pz9DR1aeZrcmjqL7KnbGdo7XZqZup2LirocbT09Wcm6WmpKigr6eiqZzQ09LS0tLS0tLS0tLR0dHS0tLT0tPT09PU1NTV1dbW1tbX19fX19fX19fX19fX19fX19fX19bW1tbW1tfX19fX19fW1tbW1tbW1tbX19fW1tbW1tbW1tbX19fX2NjY2NjY2NnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dra2tra2tra2trZ2dnZ2dnZ2dnZ2djY2NjY2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnY2dnY2NjY2NjX19fX19fX19fX19fX19fY2NfX19fX19fYzYZdV2JvZE9dVEtIRlNRS0xAPj1EPD9DRj01NTc7OTY6Ozo8PTo7Pzo6OTg6PT0/Pjs/Oz49Ojs5Pjs9PD0+QURCQD8+PzxAQUVHRURSxdvY2dnZ2dnZ2dnZ2tra2tvb29vb3Nzc3Nzc3NzQ0NDQ0NDQ0NDQ0NO5gL3Tm5bP1LWLkZ/T1LyBu9TOlKDS0dLXqIjMnZGOutWakY6+1tLS0tLS0tLS0tLS0tLS0tLT09PT09PU1NXV1dbW1tfX19fX19fY2NjY19fX19fX19fX19fX19fW1tbX19fX19fW1tbW1tbW1tbW19fX1tbW1tbW1tbX19fX19jY2NjY2NnZ2dnZ2dnZ2dnZ2tnZ2tra2tra2tra29ra2tra2tnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2NjY2NjX19fX19fX19fY2NjY2NjY2NjY2NfX2ct+WlVqaltMX01KTEpVTEZCPD0/R0ZIS0g9NjU3Ojk3OTo7Ojw9OT45OTo4Oz0+PkE+PTk8PDo9Pj46PTk5Oj9FQUA+PT8/QkBHRURFUMHc2dnZ2dnZ2dna2trb29vb29vb3Nzc3Nzc3dzc0NDQ0NDQ0NDQ0NDQ0cHR0crI0tDUxLjS0tHSwtLQ08fM0tHR0s/F1NO5x9bT07jI1dLS0tLS09PT09PT09LS0tPT09PU1NTU1NXV1dbW1tfX19fX19fX2NjY2NjX19fX2NfX19fX19fX19fX19fX19fX1tbW1tbW1tbW1tfX1tbW1tbW1tbW19fX19fY2NjY2NjY2dnZ2dnZ2dnZ2dra2tra2tra2tra29va2tra2tra2dnZ2dna2tnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dna2tnZ2dnZ2dnZ2djY2NjX19fX19fY2NjY2NjY2NjY2NjY19rHd1xSZ2laTlpOTFBRV0VKPz89P0FFTExBPjc3NTs4ODk5Ojs8Pjw+ODo6OTs+P0A9Pj46NTo6Oz0/Ojs5Ojw+QkJAPz8/P0FCR0RDRE683dnZ2dnZ2dna2tvb29vb29vb3Nzc3Nzc3d3d3dDR0dDQ0NDQ0NDQ0NDS0NDR0dDQ0dPU0dHR0dPR0dHS0tHR0tLT1NLS1dTT09PW1NLS0tPT09PT09PT09PT09PT09PU1NTU1dXV1dbW1tfX19fX2NjY2NjY2NjY2NfX19jY19fX19fX19fX19fX19fX19fX1tbW1tbW1tbX19bW1tbW1tbW1tfX19fX2NjY2NjY2NnZ2dna2tra2tra2tra2tra2tra2tvb2tra2tra2trZ2tra2tra2tra2tra2tnZ2dnZ2dnZ2dnZ2trZ2tra29ra2trZ2dnZ2dnZ2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjbwXNYVWlrU0xSTlBSWVRGSTw+Qz9BQkVKPj43ODY5Njc4OTk7Oz0/QDw9ODk7Ozs/Pjw8OTU6PT47OTk7PD8/P0JCQT1BPUBBQkZCQkJLtd7Z2dra2tra2tvb29vb29vc3Nzc3Nzd3d3d3d3R0dHR0dHR0dHR0dDQ0NDQ0NDQ0dHR0dHR0dHR0dHR0dHS0tLS0tLS0tPT09PT09PT09PT09PT09TU1NPT1NTU1NTU1NXV1dXV1dXW1tbX19fX2NjY2NjY2NjY2NjY19fY2NjX19fX19fX19fX19fX19fX19fX19fW1tbX19fX1tbW1tbW1tbX19fX19jY2NjY2NnZ2dna2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tnZ2dnZ2dnZ2NjY2NjY2NnZ2dnZ2dnZ2NjY2NjY3LxvVFRsbExLUkpUUlVLRkQ6PkdEREFERjw/ODk6OTY5OTo3PD07PkA9PTc5Ojs5Pjs5OTY2Oj1AQT47PDk6Pj9DQT4/Qj0+QkNFQkFCSrDe2dra2tvb29vb29vb29vc3Nzc3Nzd3d3d3d3d0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0tLS0tLS0tLS0tLS0tLS0tPT09PT09PT09PT09PT1NTU1NTU1NTU1NTU1dXV1dXV1tbW1tbW19fX19jY2NjY2NjY2NjY2NjY2NjY2NjY19fX19fX19fX19fX19fX19fX19fX19fX19fW1tbW1tfW19fX19jY2NjY2NjZ2dnZ2dra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2trZ2dnZ2dnZ2djZ2dnZ2dnZ2dnZ2dnZ2dnY2Ny2a1NbcGtLVVdSXFFXSEQ+PEJKRT1ISj89PDc4ODo1OTg5Njs+PD1APDw1OTk8Oj87OTk0ODw9PUFBPD47Ojw+QD89PkE9PUNGR0I/Qkmq39ra29vb29vb29vb3Nzc3Nzc3N3d3d3d3d3d3dHR0dHR0dHR0dHR0dHR0dHR0dHS0M/U0M7P0tLT0tLS0tLS0tLS0tPT09TU1NTU1NTU1NTU1NTU1NTU1NTU1NTV1dXV1dXV1dbW1tbW19fX19fY2NjY2NjY2NjY2NjY2NjY2NjY2NjX19fX19fX19jY2NfX19fX19fX19fX19fX19fX19fX19fX19jY2NjY2NjY2dnZ2dra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tvb29va2tra2tra2tra2tra2tra2tnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dndsGRTYXJfT1pUV19RUkdCPUVJTEFBTEQ/Pzs6ODg5Mzg2ODY5Pj0+Pz06Njo7Pjs9PTo5Njg6PTtAQDxAPz0/P0I+PD48PEJFR0lCPkNJpODa29vb29vb3Nzc3Nzc3Nzc3N3d3d3d3d3d3t7S0tLS0tLS0tLS0dHR0dHR0dPT0bm7zLqbnLrQyNPT0tLS09PT09PT09PU1NTU1NTU1NTU1NTU1dXV1dXV1dXV1dXV1dbW1tbW1tbX19fX19fY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjX19fX19fX19fX19fX19fX19fX19jY2NjY2NjY2NjZ2dra2tra2tra2tra2tra2tra2tra2tra29va2tra29va2tvb2tra2tra2tra2tra2trb29vb29va2tra2tra2tra2tra2tra2tra2tnZ2dnZ2trZ2dnZ2dnZ2dnZ2dnZ3qpfVWBuW1VZUVpeT0xHQ0ZNSUZEREo7QUE7PDg4NjQ4Njk4Nzw/QT89Ojc8Pz48Pz87OjY4OD09QEE9QD5BQD1AOjs6Pj1BRUdJQkBDR57h29vb29vc3Nzc3Nzc3Nzc3d3d3d3d3d7e3t7e0tLS0tLS0tLS0tLS0tLS0tO+wMqaoKKViJGeqpOpz9TT09PT09PT09PU1NTU1NTU1NTU1NTV1dXV1dXV1dXV1dXV1tbW1tbW1tbX19fX19fY2NjY2NnZ2dnZ2dnZ2dnZ2djY2djY2NjY2NjY2NjY2NjY2NjY2NjX19fX19fX19fX19fX19fX19fY2NjY2NjY2NjZ2dna2tra2tra2tra2tra2tra2tra29vb29vb29vb29vb29vb29vb29ra2tra2tra2tra2tvb29vb29va29vb29vb29va2tra2tra2tra2tra2tra2trZ2dnZ2dnZ2dnZ2d6iXFVeblheXU5aUFROQ0NMSUlJRkpEPEJBPDs4NzY3OTc3OTk9P0E/PDo5QD88PkI/Ojg3NzY9Pz9APUBBPz88PTs7OD48P0VJSEE/Q0aX4dvb29zc3Nzc3Nzc3N3d3d3d3d3d3t7e3t7e3tPT09PT0tLS0tLS0tLS0tTIlZyum5m1iX2TjIKBhMTV09PT09PT09PU1NTU1dXV1dXV1dXV1dXV1dXV1dXV1tbW1tbW1tbW1tfX19fX19fX2NjY2NjY2dnZ2dnZ2dnZ2dnZ2dnZ2NjY2NjY2NjY2NjY2NjY2NjY2NfX19fX19fX19fX19fX19fX2NjY2NjY2NjY2dnZ2dnZ2dna2tra2tra2tra2tra29vb29vb29vb29vb29vb29vb29vb2tra2tra2tra2tvb29vb29vb2tvb29vb29vb2tra2tra2tra2tra2tra2tra2tra2tra2tnZ2dndmlpYYW5ZYVdPV01QRUJETElNS0ZJRT5CRDk4ODY3OTc1Njk4PT1BPjo4OT4+PD9APzw1Njc2PD4/PjtAQEA/Pj4/Pjs/PkFCRkdCQENIkeLb29zc3Nzc3d3d3d3d3d3d3d7e3t7e3t7f39/U09PT09PT09PT09LS0tLTz6h+kayPko6MhoCIiYSQo8rU09PT09PU1NTU1dXV1dXV1dXV1dXV1dbW1tbW1tbW1tbW1tbW19fX19fX19fX2NjY2NjY2dnZ2dnZ2dnZ2dnZ2dnZ2dnY2NjY2NjY19jY2NjY2NjY2NjY2NjX19fX19fX19fX19fY2NjY2NjY2NjY2NnZ2dnZ2dna2tra2tra2tra2tra29vb29vb29vb29vb29vb29vb29vb29ra2tra2tra2tvb29vb29vb29vb29vb29vb29va2tra2tra2tra2tra29vb29ra2tra2tra2tna3JJaWWNuWlpSVV5QTDxAR05IUklIRT47SEY4OTc1Nzg3NTg5ODs+Pj07ODlBPj1AP0E+NzU5Njs+QUI/P0BAQkI/Pj8+QUBEQUZIQj9FSozi3Nzc3Nzc3d3d3d3d3d3e3t7e3t7f39/f39/f1NTU09PT09PT09PT09PWtaWaiIuQhYCFi4iBg4qLf4bC1tTU1NTU1NTV1dXV1dXV1dXV1dXW1tbW1tbW1tbX19fX19fX19fX2NjY2NjY2NjY2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2djY2NjY2NjY2NjY2NjY2NjY2NjY2NjX19fX19fX19fY2NjY2NjY2NjY2dnZ2dna2dra2tra2tra2tra2tra2tvb29vb29vb29vb29vb29vb29vb29vb29ra2tra2trb29vb29vb29vb29vb29vb29vb29vb2tra2tra2tra29vb29vb29vb29vb2tra29uIWltnalxYTFpfVkg6TEhMSkpDRUZDQExINzo3Njc4ODU4Nzg5PDw7Ozk4QD89Pj8/PDY3PDQ3P0JCQUBAPz8/QT09P0A+QEBGRT09REuI4tzc3Nzd3d3d3d7e3t7e3t7e3t/f39/f39/f39TU1NTU1NPT09PT09PUxZKCg4WGfYGCfXx5foGCg36k29bU1NTU1NTV1dXV1dXV1tbV1tbW1tbW1tfX19fX19fX19fX19fX19jY2NjY2NjZ2dnZ2dnZ2dna2tnZ2dnZ2dnZ2dnY2NnY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjX19fX19fY2NjY2NjY2NjY2dnZ2dna2tra2tra2tra2tra29vb29vb29vb29vc3Nzc3Nvb29vb29vb29vb29vb2tra2tra29vb29zb29zb29vb29vb29vb29vb29vb29va2tvb29vb29vb29vb29vb29vb2tvZgFpebWhaU0ldW1hKRE1ISlNMR0ZBQD9KQjg7NjY5OTc1ODY4Ozo7Ojw5OD09O0A9Ozo2NTw3Oz1CQEFBPD49QEE9PEA/Pz5CREU+PERLg+Lc3d3d3d3d3t7e3t7e3t7f39/f39/f39/f39/V1dTU1NTU1NPT09PT2LKEkKh9g3l2hIh/e3d5gn5+i67A1dTU1NXV1dXV1tbW1tbW1tbW1tbW1tfX19fX19fY2NjY2NjY2NjY2NjY2NjZ2dnZ2dnZ2dna2trZ2dnZ2dnZ2dnY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2dnZ2dnZ2tra2tra2trb2tra2tvb29vb29vb29vc3Nzc3Nzc29vb29vb29vb29vb29va2trb29vb29zc3Nzc3Nvb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vc1nlcWmxmWFJPYFFSQUhHSkZYTEZAQENDSz87Ozc4ODc2NTc2ODo5PDw6PTs/PTs9Pjw7ODg8OT0/QkFCQzw8P0FCPj1BQkNCREVDQDtDTH3h3d3d3d3e3t7e3t7e39/f39/f39/f39/g4ODg1dXV1NXU1NTU1NPU0ruen3WKeXuIgICChYGDcnOAhYOMrNfV1NXV1dXW1tbW1tbW1tbW1tbW19fX19fX2NjY2NjY2NjY2NjZ2dnZ2dnZ2dnY2NnZ2dna2tra2trZ2dnZ2dnZ2djY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2dnZ2dna2tra2tra29vb29ra2trb3Nzc3Nzc29zc3Nzc3Nzc3Nzb29vb29vb29vb29rb29vb29vb29zc3Nzc3Nzc3Nvb29zc3Nzc3Nvb29vb29vb29vb29vc3Nzc3Nzc3Nvb29vb3dByXV9wZVdLUGNPS0JHQ0pIS0ZBPEE9SFBBOjo3Nzg3Njc4Nzw6OD09PD47QD88Pz07Ojs5Ojk8QEJAQkNAPUFAPz1AQkNDQUBAP0A7RU144N3d3d7e3t/f39/f39/f39/f3+Dg4ODg4ODg4NXV1dXV1dXV1NXU18h4i4V8goh6g4SBfoKCc2l0hYuGkJ3U1tXU1dbW1tbW1tbW1tbW19fX19fX19jY2NjY2NjY2NjZ2dnZ2dnZ2dnZ2dnZ2dnZ2dra2tra2tra2dnZ2dnZ2dnY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2dnZ2dna2tra2tra2tra2tvb2tvb3Nzc3Nzc3Nvc3Nzc3Nzc3Nzc29zb29vb29vb29vb29vb29vb29vc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc29vb297KalxjcWVST1heSz9HTElPS0VAPkFCP0lPPjk6NzY7NzY6Ozc7Ojg6PDw+Oz09Oz48Ojs4OTo4OUFCQkFAQDtAQj06PkFCQz8+PT4/PUZOdN/e3t7e3t7f39/f39/f4ODg4ODg4ODg4ODg4OHV1dXV1dXV1dXV1s6dhpl+f5OTin+CgXx9gnNxm4mAgoOJwNnat7TQ19bW1tbX19fX19fX19fX2NjY2NjY2NjY2NjZ2dnZ2dnZ2dnZ2tnZ2dnZ2dra2tra2tra2trZ2dnZ2dnZ2dnZ2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NnZ2dna2tra2tra2tra2tra29vb3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nvb29vb29vb29vb29vb29vc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3NvfwGNaW21gVlBTU0pETEhNSEk8PkFEQ0ZORDw8OTc5OjY4Ozk3PDk4OTw9OzlAPjpBPzw3NTc7ODpAQUVBPz45PUI/Oz1CQkI6Pj07PT5GTnHe3t7e3t/f39/f39/g4ODg4ODg4ODg4OHh4eHh1tbW1tbW1tbV1tjLioCHhYOXjHh7e3lvfYF1a3ebdHZ7eInHxpiMrdjZ19fX19fX19fY2NjY2NjY2NjY2NjY2NjY2dnZ2drZ2dna2tra2tra2tra2tra2tra2tra2dnZ2dnZ2dnZ2dnZ2dnZ2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NnZ2dnZ2dnZ2dna2tra2tra2tra2tra29vb3Nzc3dzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nvb29vb29zb29vb3Nzc3Nzc3Nzd3dzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3d3d3d3d3Nzc3Nzc4LdjV1lrYlJNVVFMSktGS0ZDQD5CQT9FTT4+PTg5OTo3OTo3NT03Nzo+PDs7Qjw5Pz05NjY4PTk6QEJGQD49PEBCREA9QD9DO0A9PD4/Rk9t3N/e3t/f3+Dg4ODg4ODg4ODg4OHh4eHh4eHh4dbW1tbW1tbW1tfVrYZ6d32rn3l4entzdH+Dfm9xe3l6c3t2k4qFgImkzdnY19fX2NjY2NjY2NjY2NjY2NjY2NjY2NnZ2dna2tna2tra2tra2tra2tra2tra2tra2tnZ2dnZ2dnZ2dnZ2dnZ2dnZ2djY2NjY2NjY2NjY2NjY2NjY2NjY2dnZ2dnZ2dnZ2dra2tra2tra2tra29vb29vc3Nzc3N3d3d3c3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc29vb29vc3Nzb3Nzc3Nzc3N3d3d3d3d3d3dzc3Nzc3Nzd3d3c3Nzc3Nzc3N3d3d3d3d3d3d3d3dzc3OGtYVtebGJSTVZMTUdLS0RGQkI7QT08RUxDQT44Ojk6Nzc5NjY6NTs+QDs9Oz89PD89Ojk5Ojw5PEVDRkA/PkBDQkQ9OT0/QT1CPz1APkdPadvf3t/f3+Dg4ODg4ODh4eHh4eHh4eHh4eHi4uLW1tbW1tbW1tfQmH+Qh4N9eoN2e3Vzenl6kKqmd3JyfoeHh4CAfoKEhJHJzNnX19jY2NjY2NjY2NjY2NjY2NjY2NnZ2dnZ2tra2tra2tra2tra29va2tra2tra2tra2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2djZ2dnZ2dnZ2djY2NnZ2dnZ2dnZ2dnZ2tra2tra2tra2tra29vb29vb3Nzc3N3d3d3d3d3d3d3d3d3d3d3c3Nzc3Nzc3Nzb29vb3Nzc3Nzc3Nzc3Nzd3d3d3d3d3d3d3dzc3N3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3NzhpV9UYm1iUE9TSUhHRkpJSUJBPkJCPEVFREA+ODo4Ozc3Ojc4ODY+Pz07PDk9PDo+PTs6Njc7NjpEQUY+Pz8/PkNBPzs9PT47REM/PjxIT2fZ4N/f3+Dg4ODg4eHh4eHh4eHh4eLi4uLi4uLi1tbW1tbW19jYyH52doN+fnR2eIaCenl1d5yhu6GEgoCAfoeKinx/gYaMnKjO2NjY2NjY2NjY2djY2NjZ2djY2NjY2dnZ2dra2tra2trb29rb29rb2tra2tra2tra2tnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dna2tra2tra2tra2tra2trb29vb29zc3Nzc3N3d3d3d3d3d3d3d3d3d3d3d3dzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3e3t7e3t7e3d3d3d3c35pbT2drXFBRUElDT0pLR0xHSkJAP0FHREBBPDg8ODg1ODk3Njc3QEA/Ozw5Pj04PTw8Ojc4PTk/RENGPkE/QkBDPzw6Pj0/PkVEPz07S1Fj1+Hf4ODg4ODh4eHh4eHh4uLi4uLi4uLi4uLj49bW1tbW19XB3LRueHJze3B6eXaFiIR7eH2AgZiljH98fnuRhZaLhoGDgY6Rvd3Z2NjY2NjZ2dnZ2dnZ2dnZ2dnY2dnZ2dna2tra2trb29va2tva2tra2trb29ra2tra2tnZ2dnZ2dnZ2dnZ2dna2trZ2dnZ2dra2tra2tnZ2dnZ2dna2tra2tra2tra2tra2tra2trb29vc3Nzc3Nzc3N3d3d3d3d3d3d3d3d3d3d3d3d3d3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3e3t7e3t7e3t7e3t7e3t7e3t3d3d6NWFdobllQUUtISlNJTUhNSUtBQz9DRkJBRDo6PDg2NDg4NzY2Nj8+Pjo8OTw7Oj09PDw4Ozw7RERERT4/PkI+Qj84PT8/Q0NCQEE+O0xUY9Xh3+Dg4OHh4eHh4eLi4uLi4uLi4uLi4uPj4+PW1tbW1teslLZ6eHJvd5V7dHuLgHh1bn6Fg3t/hYhyfH2bnI6JioJ+g32Hk5rH1NjY2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dna2tra2trb29vb29vb29vb2tra2tra2tra2tra2tnZ2dnZ2dnZ2dna2tra2tra2tra2tra2tra2tra2tra2tra2trb2tra2tra2tra2trb29vc3Nzc3Nzc3Nzd3d3d3d3d3d3d3d3d3d3d3d3d3d3c3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3N3d3d3d3d3d3d3d3d3d3d3d3d3e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3d7Zf1lgaGxcUUtHR09LTk5PTURGQkg/Q0hEREA6Ozs4NzU3Nzc4NThAPkA7PDk8Ozw+Ojk7OTk7OUZERUI8QD4/PEBDOz5AP0A/Qj8+OjtKVWPV4eDg4eHh4eHi4uLi4uLi4uLi4uPj4+Pj4+Pj1tbX19vKhYR3cXJubniVhHt4hH95dnB4c3eLkY6CdnN9ioaId3d1d4ODfIiIk8Pb2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dra2trb2tvb29vb29vb29vb29rb2tra2tra2tra2tra2tnZ2dnZ2dna2tra2tra2tra2trb2tra2tra2tra2tra2trb29vb29ra2trb29vb29vb3Nzc3Nzc3Nzd3d3d3d3d3d3d3d3d3d3d3d7e3d3d3d3c3Nzc3Nzc3Nzc3Nzc3Nzc3d3d3d3d3d3d3d3d3d3d3d3d3d7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7f0nVZaGlqVk5KSE1OR01EUElGSD9FPUZMREM+Ozs8OTc3OTY2OTU4Pj4/PTs8QDs9PDo3Ozc5OThHREVCPUE9Qj8+QDw/QUE/QEJAPjs8S1Ri1OLg4eHh4eLi4uLi4uLi4+Pj4+Pj4+Pj4+Pj49fX19fEknuJf29sbnV2foSBg4qGfnVybWVtiIaKjoR7c4OHint4e4OPj4GEioqxztrZ2dnZ2dnZ2dna2tra2tra2tra2trb29vb29zc3Nzb29vb29vb29va2tra2tra2tra2tra2tra2tra2tra2tra2tra2tvb29va2tra2tra2tvb2tvb29vb29vb29vb29vb29vb29zc3Nzc3Nzc3d3d3d3d3d3d3d3d3d3d3t7e3t3d3d3d3d3d3d3d3dzc3Nzc3Nzc3d3d3d3d3d3e3t7e3t7e3t7e3t7e3t7e3t7e3t7f39/f39/f39/f39/f3t7e4clsW2pqalNOR0dOT0VIRk1JSUA7RD5ISUA9PDo6Ojg2ODo3Nzk0OD08PT07ODw8PDw4Njc4OTo6RUJFQT9APEI/Q0M+PkNEQUBAP0A8PUtRYdPj4OHh4uLi4uLi4uPj4+Pj4+Pj4+Pj4+Pj5OTX19fZqXaFfnx3bHB3eXh8jH2KhYB3anN0d3p9bot7fnl6foR/gIGDfnh8foeGlrbT2tnZ2dra2tra2tra2tra2tra2tvb29vb3Nzc3Nzc3Nvb29vb29vb29ra2tra2tra2tra2tra2tra2tra2tra29ra29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb3Nzc3Nzc3Nzc3d3d3d3d3d3d3d3d3d3d3d7e3t7d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3t7e3t7e3t7e3t7e3t7e3t7e3t7e39/f39/f39/f39/f39/f39/e3uO9amFpa2lRTkZNTEtKWE1OR0FAQE9BQz9AOzw4OTk5Njg2NjY4NDs+PD07OTY6Ojk6OTU4OTg5OkJERj8+Pj5AQEBCPzxBQD88Pj9BOT5KT17S4+Hh4eLi4uLi4+Pj4+Pj4+Pj4+Pj4+Tk5OTk19fX2sqKhIB5c29tcXN1d4CUeHaAfHWHhXd1cnWgmXp7d3Z5doR0bWxue3iAmouTu9za2tra2tra2trb29vb29vb29vb29zc3Nzc3Nzc3Nzc3Nzc29vb29vb2tra2tra2tra2tra2tra2tra2tra29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vc3Nzc3Nzc3Nzc3d3d3d3d3d3d3d3d3d3d3d3e3t7e3t3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3t7e3t7e3t7e3t7e3t7e3t7e3t/f39/f39/f39/f39/f39/f39/f397js2lpbmloUFBPTExPUk9LU0Y/RURERD48PDg7ODc5OTU2ODY2NzM6Pjs+PTc6Pjk5OTk2Ojo4NzxDRUc/Pzs/PkA9PkE9Oz0+OUFAQDhBTlFc0OTh4eLi4uLj4+Pj4+Pj4+Pj4+Pk5OTk5OTk5NjY2NjauY6AenZ1bmpveHCBfWt0cnZ3hIV5h4d5lY55eXp1d3pza298gHx2fYh8gLLe2tra2tvb29vb29vb29vc3Nzc3Nzc3Nzc3dzc3Nzc3Nzc3Nzb29vb29rb29vb29ra2tra2tra2tra29va29vb29vb29vb29zc3Nzb29vb29vb29vb29vc3Nvb3Nzc3Nzc3Nzc3Nzc3Nzc3d3d3d3d3t7e3t7e3d7e3t3d3t7e3t7e3t7d3d3d3d3d3d3d3d3d3d3d3d3d3t7e3t7e3t7e3t7f39/f39/f39/f39/f39/f39/f4ODg4ODg4N/f39/f4qpqa2hrZFNQT0ZQVFJOSFJLPkREQ0I7Ozk6Ojg2Nzg1NjY4ODg0Oz88Pzw5PDw3Ozo6Nzo6Nzo9Q0JDPUE+Pzw5PT5BQDs8PDtFQD47Q05TXNDk4eLi4uLj4+Pj4+Pj4+Pj5OTk5OTk5OTk5OTY2NjZ1p5vdntveHh2cG50d3BwdHBzb36Jc3qGhY2EenNtcoB6hn1vg5OBdnx9g4a13drb29vc29vc3Nzc3Nzc3Nzc3Nzc3Nzc3d3d3Nzc3Nzc3Nzc3Nzb29vb29vb29vb29ra2tra2tvb29vb29vb3Nzc3Nzc3Nzc3Nzc3Nzc3Nvb29vb29vc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzd3d3d3d3d3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3d3d3d3d3d7e3t7e3t7e3t7e3t7f39/f39/f39/f39/f39/f39/g4ODg4ODg4ODg4ODg4N/f3+KgbWhma2ZVVlJHUFFOS0xMRUJIRUc9OD08Ojo3Nzg2Nzc2NTY3NDg+PD09Ojg6OD46Ozc4Nzc6Oj5DRDtDQj49OD1AQUM/Pjw+RTw+PUJNUF/S4+Hi4uLj4+Pj4+Pj4+Pk5OTk5OTk5OTk5OTk2NjY3MB2doCCfnp4eHBsdXlya399bHNvdGdoaYB/aWh4c2d+iYl4cIKGe3d9foWKvd3b3Nzc3Nzc3Nzc3Nzc3Nzc3d3c3Nzc3N3d3dzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nvb29vb29vb29vb3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzd3d3d3d3d3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7f39/f39/f39/f39/f39/f4ODg4ODg4ODg4ODg4ODg4ODg4ODflGttZm5mU1NJUFlUTEhGTkZGRUJGPTs+PDs5Nzc4NTc5NjQ1NzU4PDs9Pjo6OztAOTs7ODc6OTlAQkE8QUE/Pzk/QEJFQ0FAQEM7Oz1ES01g1uTi4uLi4+Pj4+Pj4+Pk5OTk5OTk5OTk5OTk5NnZ2tmYc3uqhJaCcnR1dn14aGx8d2h4d25rcHR5gIN2dHyBhIJ9c3CAin94gn95g8je3Nzc3Nzc3Nzc3Nzc3d3d3d3d3d3d3d3d3N3d3dzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nvb29zc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3N3d3d3d3d3d3d3d3d3d3d3d3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e39/f39/f39/f4N/f39/f3+Dg4ODg4ODg4ODg4ODg4ODg4ODg4ODh24tubWdzY1lRTVVbV0hDSUZOS0dCRD8/Qjo7OjY2NzU2NzY0ODc2Ozw7Pj86PDk8Qjg3OTo6Ojk6QUFCQUJDQEE+PT9CQ0NEQUJGOTg9REpOYtjk4uLi4+Pj4+Pj5OTk5OTk5OTk5OTk5OTk5OXZ2drcqHGCtXiRfnNsem6EgXaCfWtoan+DeHZ8dX2FhXRmcHl9d316gIqFe318foC03tzc3Nzc3N3d3d3d3d3d3d3d3d3d3d3d3dzd3d3d3dzc3N3c3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzd3Nzd3d3d3d3d3Nzc3Nzc3Nzc3Nzc3N3d3d3d3d3d3d3d3d3d3d3d3d3d3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e397e3t7e39/f39/f39/f39/g4ODg4ODg4ODg4ODg4ODg4ODg4ODg4eDg4ODg4ODg4tiFb3FrdWFWT1VVXE9ETUY+SkdKRUQ8P0I6PDk4Njg0NTY3NDc2NDk7Ozw7OD47PEE4ODo9OD04Oj09QEBAP0FCP0A+QENCQ0FBRTc2O0RMTmPa5OLi4+Pj4+Pj5OTk5OTk5OTk5OTk5OTk5OXl29ra3Z5sbnNxhY1ybXBuf391hH5rcnZ2enN4gXhzb3VwbWt2fHmFiIB/f392coODsd/c3Nzc3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3Nzd3d3c3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3N3d3d3d3d3d3d3d3d3d3d3d3d3c3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e39/f39/f39/f39/f39/f39/f39/f39/f39/f4ODg4ODg4ODg4ODg4ODg4ODg4OHh4eDg4eHh4eHh4eHh4OLXhW1xb3ZeUldTWlpRSkhDQFFAQkQ8OT9BOjw5NzU3NDU2NjQ3NTY9PDo9PTk+OjxAODo6PDY7OTs+PUJCQjtBQkBDQEBEREM8PUA3OjxFS01l3OPi4uPj4+Pj5OTk5OTk5OTk5OTk5OXl5eXl5dPOxsB+cWxveHt2b3VuanNzbZKGeG50dG5vdIZ/b2twboJ0bXZyfY2DdnF/d3mKgabf3Nzc3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3dzc3d3d3dzc3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3t7e3t7e3t7e3t7e3t/f3t7e3t7f39/f39/f39/f39/f39/f39/f39/f39/f39/f4ODg4ODg4ODg4ODg4ODg4ODg4ODg4eHh4eHh4eHh4eHh4eHh4eHi1oZucG1xYFJZUFdfWUpMTElSP0Q9OTtCRjs6OTc0NTY1NzU0NjY2Pj07Pz45PTk7Pjg9Ozo0ODtAQENCQ0FCRkE/Q0BBQkREOz0+OTs8QkxNZODl4+Pk5OTj4+Tk5OTk5OTk5OTk5eXl5eXl5eW5t7Woc3JscHd6dHd4bXFydXd/hHRyc2xsa3F8bnBudGuBf3GAd32Eg355gHNygYqg2d3c3d3d3d3d3d7e3t3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3e3t7e3t7e3t7d3d3d3t7e3t7e3t7e3t7f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f4ODg4ODg4ODg4ODg4ODg4ODg4OHh4eHh4eHh4eHh4eHh4eHh4eHh49WHcWxqbF5YWlVXYFZWUE9QTD1BOjs8RkE4Ojg3MzY1Njk2NTg1Nz89Oz8+OT04Ozw5PTs7NTo9Q0JCPENDREREQUE/PkJDQzw9Pjg5PENLS2PN0dnh1sjY4+Tk5OTk5OTk5OTk5eXl5eXl5eXltbW2q3J5cm59f3Z1d2hqaGlwb3Zta2tnZWZxdG15gG5teXd2iHhxa2podXV5dHV/wd/c3d3d3d3d3d3e3t7e3d3d3d7d3d3d3d3d3d3d3t7e3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3e3t7e3t7e3t3d3d3d3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f4ODg39/g4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4OHh4eHh4eHh4eHh4eHh4eHi4uHh4ePVhnFwY2lhV1NZV19MUk9STUtAPjg5O0E+ODc5NjQ3Njc6NjY2NDk+Pzo8Pzo/OTo6Nzo9PDk5PEFBPTtBQ0VDRkA+Pj5BRUQ+QEE3OD5GSEpesrW4wbm1u8jg5eXl5OTl5OXl5+fn5+fm5ebm5ra2tbWOfX5weoR1cnZnYmNlbGtyb2ZpbHZtd4Z9hXlsbHd4a3ZwfH14c3V5fHd2h7ng3d3d3d3d3d7e3t7e3t7d3t7e3t7d3d3d3d3d3t7e3t7d3t7e3t7e3t3d3d3d3d3d3d7e3t7e3t7e3t7d3d3d3d3d3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4OHh4eHh4eHh4eLi4uLi4uLi4uLi4eHj1Yd1bl5uY1pUU1hXS1NLSk1SR0E4Ozs+PDk4NzU2NTY2OTY4NjY5Pzw6PT07Pzo7Ozk8PDs5Oj4+Pjs8PUFEQkNBQEBBP0JDPDw9Nzs+REVKXrG1tLW2t7e2y9rJ3uXl3eDi3tXU1tPU4OPg39+2treuh3t/bnmNenJ1bWNobGxtaXR4enF5enqIh4N6aWh9cWRvcXyGgX55e318e4an2t7d3d3d3d7e3t7e3t7e3t7e3t7e3d3d3d3d3t7e3t7e3t7e3t7e3t7e3t3e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7f39/e3t7e3t7f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4OHh4eHh4eHh4eLi4uLi4uLi4uLi4uHh49aGdmxhb19dV1lcWlJQSEpXTEVHPUA9Ozs9OTY0NjU1NTg2NzY3OD87OT09PDw5OTw6Pjw6OTg+Qjs7Pj5AREBDRUFAQD0/QDw9PTU5PEJHRl2xtbW2uLm5ubq9uMPT0r3BwcC6u7y6u8TMxb/Dt7e3hGl1gX1ndYd5Z3Vxa2t5eHB3fH15bWl3e3h3bml1j4FwbHl4d3d9gXuGgnmAoNze3d3d3t7e3t7e3t7e3t7e3t7e3t3d3d3d3d7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t/f39/e3t7e3t/f39/f39/f39/f39/f39/f39/f39/f39/f39/f4ODg4ODg39/f39/f39/f3+Dg4N/f4ODg4ODg4ODg4ODg4ODg4ODg4ODh4OHh4eHh4eHh4eHh4eHh4eHh4uLi4uLi4uLi4uLi4uLi4ePXhXJrZ3RhW1hYX15TVVVRVUpMRj9JRDs5PTY2NDc3NTc4Nzc3ODk8PDo+PDg8Oj0+OTs8OTs5P0E8PT9DP0FARUJCQTw9Q0A6Pjw1NDlER0dasbW1tre5ubm5ubm3ubm4uLm5urq6urm5urm6u7e3uX9ucHN6b3B/eXNuc3Vsc3Z4cXFwb2tvcX6Bc2mHhIF9dHOHdW11hYmBgHJ2hafd3d3d3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7f39/f3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f4ODg4ODg4ODg39/f3+Dg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4eDg4eHh4eHh4eHh4eHh4eHh4eHh4eHh4uLi4uLi4uLi4uLi4uLi4uHj14lxa2xyW1dXXWBUUVVUUFJPSkNATUE9Ozk2NTM0NjQ2ODc3Nzk6Pjs8Pjs5PDo8PDk8PTw7PT0+PUNEREBDQkE/QD48PkE8OD06NjY6QkpIWLG1tLa2uLm5uLi5uLe3uLi5urq5ubi4uLi6uru3uKx7cnhxf3ZzfnBsbXpyZ29sbW50cHt3d3Jyd3pvhpJ2f3x8enZ5fH9zfYdyda3T393d3d7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e39/f39/f39/f39/e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f4ODg4ODg4ODg4ODg4ODg4ODf3+Dg4ODg4ODg4ODg4ODg4ODg4eHh4eDg4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4uLi4uLi4uLi4uLi4uLi4uLi49eHb2pxalVWV2FbT1FSUE5XSURESUo/Ojk6NzUzNDk1NzY2Nzg4Ojw7PD46PDo6PTw5PDw9Oz09PDs9REdEQ0E8PDw8Pj5AOzg8ODE1OkFGRVautbW1tre4uLm4uLi4uLe4ubq5uLi3t7i4ubq7t7mqcnB4d3x7e4J3aG5xam9qY2lyf21zcn54dHFsanaAeX2AgH91doB1a4qLgHaR1d/d3d7e39/f3t/f3t7e3t7e3t7e3t7e3t7e3t7e39/f39/f39/f39/f4N/e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t/f39/f39/f39/f39/f39/f39/f39/f3+Dg4ODg4ODf4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHi4uLi4uLi4uLi4uLi4uLi4uLi4uPYhm1sdGVWUFxnWE1YU1JRWUVDS1BOOzk4ODc1NTM5NTY2NzY4Nzk+OT0+OTw5OTw7Njg5OTo8QEA9PkBGQEJCQDo+PEE9Pzs7OzYxNjxCR0RQqLa1tba2tre4t7i4uLi4uLm6ubi4t7e3t7e5ure2tIlyd3h9iXxwem99c2hqbGdnbHRscXd0cWx2c3Fxd3FyfHl4g3Z7d2mLkYp9kM7f3d7e3tvY2drZ297f39/e3+De39/f3Nvc3N3e3uDg3+Dg4ODf3t7e39jS397f397e3t/f3t7f3t/f3t7e3t7e3t7e3t7e3t/f39/f39/f39/f39/f39/f39/f4ODf4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODh4eHh4eHh4eHh4eHh4eHh4eLi4eLi4uLi4uLi4uLi4uLj4+Lj4+Li4uPj4+Pi4uLi4+Lk14NoZ3VkVlVkZVdKWllXW1Q9RU1LSD04NzU3NjQzOTQ0Nzc1Njc5PTo9Pjw9PDk7PDk5Oj45PD4/PkFBQ0FFRUQ+OzxBPjw5PDs3Mzc+REhFSqG2tbW1tbW2tre4uLi4t7e4uLi3tra2tra3uLm2traLfXpsbHp/cGx5dm5qaGdlcXp4b2lvb3B1c21zd4Fnb32CgYNyf3lqcHJ6f6ng393Zy8a/vL2/vsLN0tDW3tnc4NfQzcPCw8PH1dfT2dzX1NjX0MfExce9vM/Kz87Y3djO3N3c2t3T0dze39/e397e3t7e4N/f39/f39/f39/f39/f39/f4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4OHh4eLi4uLi4uLf4uPi4eLg4d7W29/Sw8rJx9Hb3OLk4eHg2dre1sbExcTN2trf5OHi4trX3st9aWZxYVleZWFNTFRLUlpMO0hNSEZBPTc2NjUzNDY2NDg3NjU2OTw7Pj46Pjk5PDk3OTs7Oj49PEBAQ0RCR0ZCQT08Q0A9OTw7Nzc3P0RGRkaZtrS1tbW2tra4uLi4uLi3uLi3s7W2t7a3t7i5tba3opdxb29waW50dnFmZWNrbmdvcm1mZ2tygWVvdnyAeGRzj39zaHFyaWVlbm+w39HFv7u5ubm5ubq6uru6vc3Gw8e/urq6uru7u8HCvcHFvby/vry7urq5ubq6ubm6w8XDucDDwby/ube/z8/U3tjc3t/g3tLa4N/f4ODg39/f39/f39/f3+Dg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODh4eDg4ODg4ODg4ODh4eHh4uLi4eDh4uLi4uHa2t3RwsPCu8XT1uDdydPDrrnAsaqrq6uwtLbJ0sXRxLG4v7Srq6usr7S0vMzE1c60tLureGxtbWBdYl9ZS1NVVFFQREBRTUhEPzo3ODU3MzE1NjQ5ODQ2Njo8Oz08ODw5Njo6ODg5NzU8PDw/QEFAQkRDQkE8PkI/Pz09PTc1OD5DRUNAj7a0tLW1t7i4uLi4uLm5uLe1sautr7Oxs7OztLS0tqaei2tue3ZxeXhnY2hfcXdha25vaG99b25ja2lseHdsa4Z+bHB6dm1scG95sca8uru7urm5ubq6urq6urq6urq6urq6urq7u7q7u7y7urq6ubq7u7q6urq6urq6ubi3t7i4t7e2tbW1tbi3u8e+w8XHzcS4wMnH0tzZ2d/e3uDf39/f4ODh4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODh3Nji4uLi4eHh4OHg3tfGxtHQztTe3tPO0t/SuLi8sq2trKysrrG+ua63rKipqamqq6urqqqqq6ysuKyqqqqrq6urra6urq6urryzrayrpHlub21fXl1dVE1SU1xUSkE/UElIPjg5NjgzNzMwNTczNzg1NzY2Ojw/PDg5Ozo6Ojg5OjY1OTs8Pj9EP0NFQkNCP0BAQT9APjw3ODc6QUVEP4W4tLS1tbe4uLm5uLi3t7SurKuqqq2urq6vsLGzs7WjcG5ucm1wg311aWFlaGZkY2Rxc21td25naW1tZXBzb29zcXN8h4F6dX11n7u6uru7urm5ubm6urq6urq6ubq6urq5uLm5ubm6urq6u7q5ubm5ubq6ubm6ubm4uLi3t7e4uLe3t7a2tbW2tra1tbW1tba1t7e3t7rBvrzGycrb3+Dg3tvd3d7h4tDW4uHg4ODg4ODg4ODg4ODg4OHg4OHi0768zNjd3OLg0dnbxL23sLCxsa+zu7uzsLS9s66urq2tra2sq6qqqqmpqKmpqampqqurqqqqqamoqampqampqaqqqqytrq6urq6urq6sraR4aWJxZmFZWlZRUk5cU0Y9QlJEQTc8OzY5NTY1NDU2NTg3NTY1Nzg7Pjw7OTk5Ojg3Nzk3Njg8Oz47RD8/Q0BBREE+P0M9Pjw+Ojo3Nz9DRj54srCztLW2t7i3trKurq2sq6uqqaqtraysrq+xs7S1t4xucnRqaIB5ZmpmZWxdaG5waGxxYmNmcoJ+dmhobGpueoaBhXx4cXF5gK+6ubq6urm5uLm5ubm5ubm5ubm5ubm4uLe3t7e3uLm5ubm5uLe3t7i5ubi4uLi3t7a2tre3t7e3tra2trW0tLW1tbW2trW1tre3t7e3t7e3tre4v8bP0MS+v8DE19e8ydra4OHg4ODh4eDg4ODh4eDb3t7Uzby3tre6wMDJxLfIvrKwsLCwr7Cvrq6ur7Cwr66urq6uraytrKurq6qpqampqampqampqKmpqKmpqampqKmpqKmpqqqrraytra2ur66trK2heWpkbWdiXFhRUFFLVEpCOklRP0E3PDk0OjU2NTQ1NTY4ODY4Njs6OTw9PTs6ODY2ODg6ODY3Pj09PT5BQUVCQkNBQUBBOj09Pz05Ojc9QUc8bKqmqKutsLGwrqupqKqrq6mpqamrrKytra2usLO0tbilgIdvaWdzdGZrcG1qZGxvcm5rbWNrcHyJhG5qbHx4Y3uKfnNqc25rcY+7ubm5ubm5ubi4ubm5ubm5ubq5uLi3t7e3t7e3t7i5ubi4uLe2tra3t7e3t7a2t7a2tra3tra2tbW1tba1tLS0tbW1tra2tra3t7e3t7i4uLe2t7a2uLm4uLe3uL6+uLq9vcfb4OHg2Nnd4eHg3dfKwcPCurm5uLe4uLi3tbS0tLKysbGxsLCvr6+vr6+vr6+vr66ura2srKyrq6yqqqmoqKmppqepqaehpaipqamoop+hoZyip6inqausrK2ur7Cwrq2unXhwbGphY2BZUU1RTFJGQzlNUEU+ODs3Mjc5Njc0NDM1ODg3OTc7OTo9PTw6Ojk3NDo5ODY1OD8/QEI9RENDQ0FDQEJBQDtAP0A/PDw6O0NIPWOopaWlpqioqKenp6ipqqmoqKipqqqsra6wsLCztLW1taWYdn5xZmt4cW9tZmVsaGNsZ2ZpaX11bWlvfXZ5hWZod294b3Fvcninu7m5ubm5ubm4uLm6ubm5ubm5ubi3t7W1tba2tre3t7e3t7a2tbW2tre2tbW1tra3t7e2tbS0tLS0tLS1tLS0tLW1tba2tra2t7e3t7e3t7a2tre2tre3uLe2t7i4t7i4uLi4wMXTyry8w83PyMC9urm5ubq6ubi4uLi4t7W0tLSzs7KysrGwr6+vr66urq+vr6+uraysrKurrKysq6ehoJ6gn5udoaGdlpmkpKaon5mZmZmanZ+gn56fpKqtrq+ura2srJl1cGlrY2FeXVVOU0tSREQ4TktHQTo4NTI2OTY1NDczNzc3ODk3OTo7PT0+ODg4NzU6OTk1OD9AQEFEPkZBQkNAQkNCQT88QEJCQD0+OjpERj5cpqWmpqampqanqKenqKioqKenqaurrKytra2ttLS0tbekc311bnONf3JmanFjaW1jaGZobG51aV9jZ3VzdnpuZ3Bwcn56cYihu7m5ubm6urq6urm2s7a1uLm2trW1tra1tbW1tbW3tra3tra2tbW2tbW1tbS0tLa2t7e3tbS0s7O0tLW1tLS0tbW1tra2tra2t7e3uLe3tra2trW2tbW2tra2tra2tra3tra3uLi3uri4uLi3uLi5ubm5urq6urm4t7e3t7W1tLS0s7OysrKxsbCwr66urq6urq+vra2srKuppaSmpqScmZubmpmampmXl5eXl5aZm5iZmJmZm52en5+dnJ6gpKWko6OioqKQdG5jcGFeXltUU1RIVEo/PFFCRkM7ODYzNzo1NTQ4Mzg5OTc4OTc7OTs9Ozc6NzU2OTk4NTg+Pz9ART5CPz9DPzxBQUI/PT9EQT8+PTk9Q0Y/VaSlpqanqKeoqamop6ioqKioqKiqrKuqqaipq7W1tba5o3eKcXKHhnd0cGh5a2JjYWVsaW5zal9jZWNjZWprYmRqbHaXjX6ovbm3tre5u7u6uLWxrKurqq6wrKyrq62tq6uvsLGvr7CytbW2t7W1trW1tbW1tbW2trSvr7O0tLSvra6vsrW0tbW1tbW2t7e3t7e3t7e3t7e3t7Owsra1tLa2tre3tra2tbW1tra3t7e5uLi4t7e3uLi4ubq6urq5uLi3t7e1tbS0tLS0tLS0s7OysbCvr6+vr66vr62oo6KgnJqampqZmZqbm5qampqbmpmZmZiXl5aYmZmZmpycnZ+foJ+goKChoaCgoJ+fi3RuaXRdYGZeUlRLRFRJPUVTSEVCOzo0NDY5NDQ1NzM4ODg3ODk5Ojs7Pz04OjkzNTg5NjM5PT5AP0A6QEJCQkA/QEJCPz0+QUFCPz06PkVDQFGjpqWlp6inqauqqKaoqKipp6ioqKinp6ioqaq1tbe3t7KZtH99kIx1Z2lqbGZjYGNoZW94cGlicXx5cGpmZmRma3NqhYystrKwra2ttLeysLCtrKuqqaiop6ipqampqKinqKipqaeoqqurra2sqqytraysrq6traunpaSnqqyopKOkpamwsbGztbW2t7i3t7W1tre4t7e3t7Kppaasq6ivtLa1s7W3t7a1tbW2tra3t7e3t7a2t7e3t7m6urq5uLi3t7Wxs7S0tLKxsK6sq6yurrCxsK2rqqmqqKijnJqZmJmYmJiYmZmZmZmZmpqZm5ubnJybmZeYmpqcnJydnJ2foKGhoqKioKGgoKCfnop1amtuWVxhVktPREdVRz5PV0hEPTw4MzQ0ODQ1NDgyODk4ODk6Ojw5OUA8Njk6MzY3OTE0PD8/QEBBOkNGRUJBREJDQTo7P0FCQz9APUBEQ0BPo6empaemqKqqqqakpqenqKioqKimpqaoq6uttba3t7e4rbJ1cHuDdmBiaWtiZWZhZGdmfYh5bHKAfXFvcXhjbW5xZo+srKurq6ysra6urK2trKyqp6WmpaWlpqioqKiopaeoqKioqKeoqampp6Wko6KioqOioKKioaKhoKChoaKjpKOjpaWlqLC0s7OzsKuqqaqztLa3trGopaOioaGipKiqqairs7Sxrq6xs7W2tra3uLi3t7e3t7e3t7a2uLe0sa6ppqerrKmnpqWkpKSkpKWnqaajoJ+enZycm5uampmZmJeXmZmZmJiZmpqampqampqbm5mYmpydnZ2dnZucoKGgoaOjoqCgoKCfnp2FdGtsaFdYU0pHTUVITUdAU1dGRz09OTM2Mzc0NTU3Mzg6Ojo6OTw9OjpBPDY9ODM3ODgzNztAPz9AQDpCRUNAQkRDQT87PEBDQkNBQDxBQ0A9TqKnpqanp6mqq6mkpaWlpaaoqKippqanqKmpqrW2tre3t7izc2h7c2JnamtpaWJhZGloXV1tfHJma3J/fHR8bm1zc36gqamrq6uqq62trKusq6mpqKWjpKampqWmp6eqqaamp6enqKinp6iop6WjpKKhoaGhn56en5+fn56foKGho6Wko6OkpKSmp6enpqWkpaampqeqraumpKKhoaChpKWlpaenpaeoqKalpaivtLa3trW1tra1tbOwrKupqa6rqKWlpqampaSkpaWlpqWkpKSkpaKhoaGgnp2bm5ucm5qamZiXmJiYmJiZmpmZmZmYmZmZmZqZmZydnJycnJybnJ+fn6ChoaKgoKCfnZ2cgHNrbmReU0pITUZETEtFRFFTQ0c9PDgzNjI4NDY0NjQ4OTg6Ozk7Pjw5PTs5PTczNTk2NTY8QD0/QD88P0JDPkJCQj89Pj5CQ0FFQD86PkVAO0+jpqWkpqeoqaelpKWlpKWnp6eoqKanp6alpqa1tba2trW2uYptcW1vfHxxZ2pmYGFsYFROW2hqbm9tgYJ9cWdxdn6aqKeoqqmpqqurrKqqqqimpaWkoqOlpqalpaWmqaqppqWjpKWmpqSjo6KioqKgoJ+fnp6cnJycnJ2dnJ2en6CioaKjo6KhoqKkpaSioqOjpKSjpKSko6Ggn6GipKanp6ipqaelpaSipKSlqK2wsKyrqqusqqmnpaWmpaWlpaalpqioqailpaWkpKSlpKOjpKOioaGhoqKgnp2cnJubm5qZmJiYmJmam5mXl5eWlpeXmJiZmpqcm5qampubm5ucnJ6goKGgnp6enpycm356bnJiXlNNSlBFRk5NQkBPRT5JOz01MzYzODM2Njc1Ojs4OTs5Oj49Ozo5OT03NjY5NjU2PkI+PkE/PT5DQT5DQ0BAO0BAQkJCRUA+Oz5FPzxQoKSjpKOjo6SkoqSlpaSlpqamp6empqalpqaltLW1tbS0tbiBaHx9ZXOCemxwdWFfY1ROT1FbaGxpbGxxbW5xbnScoqSnqKioqauqqqqqqaempaSjo6OjpKSlpqalp6ytqaShnp2eo6Shnp6foKCenJ2dnJycmpqam5ucnJubm5ydnp6foKChoJ+goaOioKGjpKSjoqSlpaWkop+go6SkpKapqainpaGdnJ+jpaipqainqKioqaempaWkpKSlpqampqampqenpaWko6Ojo6KioqGhoqKhoqOkop+enZ2cmpubmpqZmJeXmJaWlZSUlJWVl5iYmpubnJuampqam5ucm5ucnp+fnpucnJyam5p/fnF0YFtUTUdNSEZMSj8/TkM8QDs8NDM4Mzc0NzY3ODs9ODo6OTk7PTs7ODk9Nzc4OTU4OD9APT9BPjs9RD89REA/PzpAQUE/QUVAPjw8Qz88Tp2ioaKioKCipaSkpKWlpqenp6empqampaampbW1tbS0tLS3jHalsXdmc3Jvc2xjZGlYT1JRT09dgG1kYFptkZGSoqKjpaampqenqKiop6alpaSjoqGhoaKjpaempqesrKemoJ2cm6Ghnpuamp2cmZiam5qampmZmZubm5uampqampucnZ6goaCfnp+hoJ6foqOko6Omp6inqKWioKGhoaGkpaWlpKCcmZmbnqOmpqampqanpqempaOlpKWlpqiop6enpaWlpaWkpKOjo6KhoqKioqKhoaKjo6Kgn56enZybnJubmZaUlJSTk5OTk5SUlJWWl5qam5ubm5qZmZqanJ2dnZ2dnZuampqamZqXf3dvc11aTkhKTkdFRklERU5APD09PDQ1OzQ2NDY1Njc5Ozg5OTg5OTw7PDc6Ozc4ODg1ODg/Qj9BQTw+P0A8PEJAQT49QT4/Pz1CQUA6OkA8PE+doqGfoJ+dn6OkpKSlpqeoqKenp6ampqampqW1tLS0tLS0tbSXtqd1Znh2Y2xjY2VjW1JTU1JNXqCMeFhodpajnp6hoaOjo6OjpKSlpqalpKSioaGko6OjoqOlpqWmpqenpp+bmpuioJmWlpWam5mXl5iYmpqYmJqampqbm5qZmZmenZ2goqOjo6KkpKWinqGhoaKjpaampaSjoaCgn5+hoZ+goJ2amJeZmpygpKOjpKWmp6alpaOjpKSkpKWnp6ampqampaWmpKOjo6SjoqKjpKGfoKGhoKGgoaCfn56dnZyamJeVk5KSkpKSkpOTkpOUlZaZmpqbm5qampqbnZ6enp2cnJybm5qamZmZlH10bHReWk9IRUdGQkVORT9GOzo+Pzs0Njo2OTM2NDY4ODo4OTc4ODo8Ozw5Ozs6OjY3ODk5Pj9APjw9QD5AOjlAQT89QT8/QUE+QUE/Ojk9PjpQnaCfnZucnJufoqOlpaWlp6iop6ampqanpqantLS0tLOysrGwsK2rkHiGj36bmn93Yl1TUlFRTGKgootaiKCgn52YmZycnZ2eoaGgpKenpqWkoqGjp6alpaKipaampaanpqagm5mboaCXk5OSl5qcmpeXl5iampmampqam5qYmJmaoKCgoKGfoaKipKamop6gn5+goaOko6Khn56enpyanZuZmpqZmJeZnqChoaKioqKkpaWmpKSkpKKioqKkpaWlpaWlpaalpaOko6KioqGgoKGgnp+fn5+fnp+foJ+cm5qZl5WUlJSTkZCRkpKSkpKSk5SVl5iZmpmZmpqam5+fnp2cnJycmpmZmpiXl5F8cmdxXl1QRj9BRD9KT0JCRjhDRT4+OTg7Nzc0ODQ1OTo6Ozk3OTo8Ozo8PT48PDo2NzY5OD4/QT47Pz49PDg6PkFAQUE/P0FCQERBPjo4PkE8U5ycm5uampycnaGio6KjoqSmp6alpaampqSjo7KysK2rp6amp6alpqiln6iop6qnoXmEXFFST0xcnKCAYpmgnp2clZOVlpeZmp2dnqGmpqampKOioqanp6ajpaampaWmp6amop2cnqGfl5GRkJSXm52YlpaWmJuZmpqampqZl5iam6Ghn56fnpybnJ6goJ6dn56fn6Cio6SjoqCfnp2ZlpeXl5iYmZubnqKioqKioqGio6WlpKOio6SioaGhoqOkpKSko6SkpKSioqKhoqGgn5+gnp2enp2dnZ2dnp6em5mYl5WTk5SUk5KQj5GSkZKSkZKTlJaXl5iYmZqampyenZ2dnJubmpiYmpmXlZaNempmamBiTkY+P0A9SkVAQ0A7QEE8Ozs5Ojc2NTg0Njc4OT04ODs6Oz87Ojs8Ojk6Nzc2ODs7Oz08Ojo8PTw3Oz5DQkRDPz1BQ0FEQT88OkBCO1eZmJqamZmam5ucnp2foqKhoqSlpKSlpqSioJ6op6alpqWlpaemp6ampqakpaanqKehqXJOUU1KVJahenKanJyenJeVlJWWmJiXl5qeoqKhoqOkpKOjpaalpaanpqSlpqalpaOgoKGhn5mSkI+WmpmenJaXl5eZm5ycnJqamZeZm5uen52cnZyZmZqcnZydnp6fn5+hoaCgoaKgn56bl5WVlZeanZ6fn6GhoqKio6OhoaCgoJ2cnaGioqOkpKOioaSlpKOko6SjoqKioqKhoKGfn52cnZ2cnJ2dnJ2enpqXlpaVlJOTkpKSkpCRkpKSkpGSlJWWl5iYmJiam5ycnJycnJ2cm5mYmZiWlJWXi3hsY2RiZFFHQT1DO0tIRDo7Ozw+OTo6OTo3Mzc5NTo4ODg8OTg7OT09Ozo7Ojk8PDc2NDc/PDo9Ozw/Pjw7ODxBQ0FDQkI+P0NAQkFAOj9APztZmZiampqam5ubm5ydoKGhoaGhoqKioqKhn5+dpKWmpqenpaWmp6ampqWkpKalpKSkpaaGUFJQT0+PmHB6mpubnJ6cnJycm5ubmZiYm56dnp6foKOkoqGhoqKio6SkpaalpKOjoaGhnpyalZOUmJuam56amJiYmJqcnpyam5iWmZybnJycnJydmpqbnJ2dnp6dnp6fn52cnJyhoaCblpWVlZacoKGgn5+hoKKjoqOhnZuZlpaWlpicnqCip6ikoaCgoqOjoqKioKCgoJ+fn5+gnp2cm5ucnZydnJmanJuWk5KSkpKUk5KSkpKSkpOSkpKRkpSVlpeYmJiYmZqcm5qbm5ucnJqZmJiXlZWWl4d3ZGdoZGJNQ0U8RDlJSkU5Ojs9PTo6ODg6NjQ3OTU8OTY4OTc5PDs7PDo6PDs6PDw4Nzg3Pj07Pj46Qj86Ojo/QURCQ0FBQD9EQUFAPjpAPj06W5qYmZqbmpubm5uen6CgoaKioKCgn5+enp2dnKWkpaanpqWlpqakoqKio6Oko6Kjo6KnllRYVVJOZ21rgZ6am5udn6Cgn56enp6dnJ2dnJ6enp+goaCfn6CgoKGio6Ojo6OjoqGgnpuZmZiZmZmamZienpiYmZmam5qWlZeWlZicnJ2cm52dnpybnJ2cnZ6bmJqeoaGdm5udoKKhmpWVlpaZoKKgnZueoKGjop+em5eXlJKSlJeYmZ2goqenpaGgn56goaGioaCfnp2cnJubnJubmpqZmpydnJmXmZaVk5GQkJCPkZKSkpKSkZKTk5OTk5OTlJWWlpeXl5manJubnJucnJqamZeXlpaVlZSEcmZsYmRbREJMPT84RktCPEA+Pj05Ozk6PTg1ODg2Ozg1Njo4PDw7Ozw8Ozk8Oj09OTU4Nzw5PD88OkE/Ojo6QEBDQkRBQ0A/Q0FAPj08QD09Ol+al5mamJeYmpycn5+foaGhoJ+fn56foKCenZ2lpKSko6OioqOjoZ+foaGipKOio6SiradXXl1UV19ua42dmpqbnJ6dm5ucnZ+enZycnJydnZ+goKChoaGgoKGgoKGioaGioZ+enJqampqbnJqZmpuZnJ6ZlpaWl5eTjo6QlJabnJuam5udn52cnJycnJ6dlpSZnJ+in5ycnZ+hoJuXl5mZmpycnJubnZ6fnZqXlpaWlJOTlJiampqfoKGmpqWgn56fnqChoaCenJubnJybm5ybm5qZmJmZmZmXl5iVlJKQkJCQj5CSkpKSkZGTk5aYl5STkpSVlJWWlZaZmZmam52cnJyampmXlpaWlpaQgG9vZV5gV0BKSDg/N0lFP0VBPD07Ojo8Ozs3NTs4Njs3NDY6Oj47Oj0+Pj07Ozs+Ozo4Ojk5NkBBPTo8PTo6OT9BQ0JERUM+P0FBPz8+Pj89PDtgl5WXl5aVl5mbnqGhoKGioqCenp6enqCgn52bpaWjpKSioKCfoJ+dnZ+hoqOjo6OkobCjXWVkYGFua4GenJubm5ubmZianJ2enJubm5ycnJ6ipKGeoKGhoqKhoKCgoaGgn5+enJqZmpubm5ybmp2dm5manJiXlZWWkY6Nj5KYnZycm5ycnqCdnJucnJyempWVm56foZ+dnJyenp2cmpqampqampqbm5qXl5aTkpWVlpWTlZaam5qanZ6foqWjnp6fn5+en5+enZ6fnZycm5qcmpqbmpiZmJiYmJiYlZSTkZCRkJCQkZKTk5CRk5SYmZiVk5SVlZWWlZaXmZmXmZqenpyamJiXl5aWl5eYjX1ubV9lVlRFSzw3PjdSRUM+QkE4Ozw7OTg6ODY7Nzc6Njc5Oj0+Ojw8PT49PD06Pz06ODw9OTtAPj4/PT45ODs/QkNAQ0VDPT9DQj5AQD5APTw8YZWSlJWWlpeanJ6goKCgoaCgnp6enp6gn56em6WlpKOioJ+fnp2dm5mbnJydnp+gn56rmGNpbW5pZm2enZybm5ybmpmZmZqam5ucm5uam5ygo6SgnZ6en6CgoKCgn6ChoKCfnpuamZqam5ubm5ufnpyZmJqamJiYmJKOj5OXnJ2bnJ2cnJycnZycnp6dnpqVl5ygoaGfnp2eoJ+cnJuampqbmpqYmpmVk5OTkpOWl5eVlJiYmZucnJydoJ+gnp6enp+fn56en6KjpKKgnp6cm5qampuZmJmZmJeXlpWUlJORkZCQkZKTk5OSkpOUmJmYlpWUlZaWlpaWl5iYmJiXmZqamZeXl5aXlpeWl4l4dmddX1dURUU5OTs8WT5AOEI/OTs7Pjk4Ozg6Ozc5OjU4OTs9PDk9Oz0+PD0+Oz8/Ozk+PDw+Pz5AQUE9ODc7QkNFP0FFQz1AREJBQEQ7Oz47PGKWk5SUlpWUlpiYmZubnJycnZ2cnJ2en56dnJqkpKSkoJ+enpybm5qZmJiYmZucnZ6cpolla3R4bVuFop2dnJydnJqbmpqampydnZ2bmpuboKKinpucnZybnJ2enp2dnZ2fnpyampucnZycm5ycnp6cm5qanZqam5yVkZOXm52dnJ2fnZycnJycnZ6fnp+cl5idn6GhoJ6cn6CfnJubm5qbmpmZmZmZl5WWlZaYl5eXlpaYmZuenp2dn6GhoJ+fnp6fn5+dn5+hoqKhoZ+fn5yZm5qcnZuampmXlpaYl5eXlpWTkpGTlJSTlJSUlJaZmJaVlZeZmJeYl5eXl5eYl5iXl5eXlpaYl5eVl5eDeHZfW11eUT1GOjk4P1VDQTtDQzo8Pz86Ojk3Ozg4ODc0ODk8Ozw4Ozs8PTo9Pjo/QT06PTw+PkA/PUBBPjk2PERDRUBBRUU9PkVERD9COzo8OTpkl5SVlZaUlJSUlJWXmJiamZqcnJydnp6dnZybo6Oko6CenJuamZqZmJiYmZiam5ubm6WJa3F2em9lmp+enp2dnJybnZ6dnJ2enp2dnJydm5ygoJuampubmpudnJqampucnJuZmZycnJ2dnZ2dnZ2dnpybmp+fm5ydm5mZmZudnZ2dn52dn5+dnJydn5+fn5uanZ+goJ+dnJ6gnpubm5ubm5yampuamZudnJqZmJeYmJiYmp2foKCgoJ+hoaGgoJ+en5+fnp6foaKhoJ+enp+enJqam5ubmpqZlpaXmZmYmJiWlJOUlJWVk5OVlZSVlpWVlZSYmZuamZaWl5WWmJiWl5OUlJGRk4yRkJOWfXhqYWJiXFA8QDw2OENWSERCOjg7Oj47Nzc5Nj06OTk2NDc6Ozw9OTo6Oz87PT08QD47Oz46PT89PkBBP0A8NztBQ0U/P0REPj9EREM+Qj07PDs6Z5aTk5OTk5OTlJSVlpeWl5aWl5mbm5ybm5uamaOjoqCfnpuamJeYl5eXmJmYmZybm5qkgGpqb3lzcZegnp2dnJydnp6enp+enp2cnJydnp2bnJuampqam5ubmZiYmpqamZmZmJqdm5ydnZ2dnJ2cnZ2cm5qdn5ucnJubnJubnZ2dnJydnp2enZydnZ2cnJ2dm5uenp6dnZybnpubnJycnJydnJubmpmbmpmYmZmYmpmZmpyfn5+jpaKfoaKioaGfnqCgn5+fnqCioaGhn5+fn52ZmpudnZqZmJWWl5aVlZaTkpOUk5STkJCSk5GUkY+OkJGOlZabmJWYlJmXlJiRjJCPk5yTkoyFjIeDhndxZ2pkW1xRQT44NkJHYEJFR0A+Ozw7Ojg4NjU8ODo4MzQ6Njk9PTk5Ojs9Ozw6PD48Oj5AOj5APjw/QD8+PDg6Q0FEPz5CRD8+Q0VCPUJAPDw8OmeYk5KSk5OSk5SVlJWXl5aWlZaXmZmZmpqampqkoqCfn52bmpmYmJiXl5iZmJmcnZ2cqH1nZXN7enOJop+enp2dnp6enZ2enZ6enp2dnZ6cm5ybmpubm5ucm5iYmJmZmJiZmZmbnZycnZ6enp6enp6dnZybm52bnJybnJ2dnZ2dnJ2dnp+fn52cnZ2dm5qbnJmZnJ2dnZ2dm5uanJ2dnJycnp2dnZybmZeVlZeXmJqam5ubnZ6foqOhoKGhnJucm5ubnZqcmZycn6CfnZiZmZmUkpKUl5SPj4+OkYyNiYuQi4mLjpGRj4mQmJiQkoyNi5KQj5iYoqiqpqWlrKOmoZqep6eyqKKVo6Cfl39wcWlsXFtcTUY8NzdHR1g+SE5URjk+Ojg5ODc1PTk4NzMzOTY6Pjw6Nzo8Ozo6Ojo8PDs/PjtAQD47PT5BPDw2N0A+QkA+QUY+PEFEQT1DQj49PDlmmJSTk5OTkpOUlZOVl5iYmJaXl5iZmZqampqaoqGfnp2cm5mYmJiYmJiYmZmZm5ybnKx/am16f3lxh6Genp2cnZ6enp6enp6dnp2dnZ6enJubnJubm5ubm5uZmJiYmJiYmJmZnJ2dnJyenp6enp+fnp6dnp6dnJydnJ2dnZ6fnZ2fn56goJ+enZ2dnZybnJ2em5qbm52enZ6dm5ubnJ2cnp2cnZqYl5SRjo+QkJGVmJSWlJiZmpudmJuYlY2Mjo6TkpKRj4mQjpGRjo+Ki42NjYiIi4+Lg42NkY+MkI2Qk5WVnJihoJySn6SipKmam5eanKOprb3Bwbq8uL26ucC8ubq3uru7tL2zwbV/bnVmZ1peWUxJRTo7TElTPFZSSUM6QTo7Ozc3NTo6OjgyNTY4Oz08OTk7Ozw5Nzo4Ojw6PT85PD8+PDw9QTs5NTg8O0A/QT9EPTxBQkA8REM9PT06YZOTkZCUlJOTk5OTlJeYlpeZmJmYmZqbmpqamp+gnp+fnJqZmpqampmYl5iZmZmZmZmphXB1e4B3b4mhnp6enp6fn56en56fn56dnp6fnp2dnJ2cm5ubm5ubmpiYmJiZmZiam52cnJ2dnp2dnp6goJ+enZ6hoJ6dnp2enZ6fn56en6CenZ6enJydnZ2cm5qYnJuVmJqamJiYmJmSjJCXlKCXk4+MjYqKiImMiJORh5CPjYqKkJCLjoqMi4+IiImJjpGOjYaFiYaKhoWLiI+SkJCNkJKXlpKamJ2TlJ6kpqaqq7Gsr6+rpquqsbm5tbS0rqyvtMDIxcXBvsbDxMTDurW+t7a0s7C2tb6qcHRyXGZfXV1JRj8/RUtMVklcTEQ/PUI6Qzk5Nzc7OTk3MTc5ODo+ODg6PDw7OTc5OTs9Oj4/OT5BPDs+PD46OTY5PDpBPkNBQT08QkBAPkJEPj8+OVyHhIOHi42KiYaFgYqMkZOVmJiHlZaWkpiampmenZ+gn52ampubm5ycm5iWmJmXl5ibqo56dXZ7f3mCoJ+fnp+goKCfn5+foKCfnp2dnp+enp2dnJqbm5ybm5uYmJiXl5iZm5ucnJydnp6enpybm52dnZycoaGfnZ6dnZ2dnp2dnJiWlpaYlZWSlpmWk5GKjI+PjI+NkIuLj4+WiYiEi5GZjn2Fi42PjYyHioyQm4yRj4+Lio6TjIyNjIiSi4yFiYyPhouIh42KhYyEj4qXkJOYmpWbnKOqoaKknKKrsbe0ubWxs62vsrKlp7O6sbq6vLa3tsDDw729vLa/urq8wbW4wL60r66mqa+3mm58Z1tjWl1fSEU+QUtJU1hZXkFGOTk9OUY/Pzo3Ozs7NjM6Nzo5Pjg6Ojw9OTk4Ozk7PDo+PTtAQDs8QjxAOjg0Nzw7Qj9BQj4+O0NEREBDQz0+PjlhmZWLkYWNj5aSiHl9e3+Fi4OKgoqJhmuAeJCLlpqRnZ2UlJGTlpeampiWk42Sk5KQm5uIdndzcX1/cpGgnZubm5yenZ2eoKGgm5uWlpucmpybnJuYmZqYmJmampqWi5CTlpmYlZiYlpucl5WSkY2SkZCUk5KXm5mYm5ePjpCLjo2Ch4uLi4qLiI2RjIeHhoqIiZGKh4yEhYqNi4qNhI+UkIyDkJOUmZWQi5OTkZWRlpWOj5GMlI2Oj4qIj4ePhoeJiYmNiomJioWNh46JmJKUmpuXmKChp6Cko5qqqbO2sbWwqKmiqK6tn6qvsK21ubi8wr/BxLixtbCutrOwuL68ury+urOzp7G3wpB1gGNiXlpXUk1IRkVQSVlXX1tDUDpCQz1HRj84Nzo6NzU1OTc8OTw5ODo9Pjo6Nzs7Pjs7PTs9P0E7Pz48Pzo4NDM3OkFBQEI+PjpDREM/QUM7PT45Z6mloqKZn6CippeUiI2CiIJ1h4iKiIp7e3Z7enmPeoiSfn18en6CkYWBgH1zfH99fISHfnRweHZzfHaBj4iIiYeIioyMkZicl4iOhIuNi4iNkI+Pi5GPi4yOj5CQjouFhYeLjIyHiIuOi4eMhYaBjYuGiop/iYqGiJiRiIOIg4KFfIuLjIaJi4iKkIyIi42PjI+Wh4mLio6NjY2Wk5OdnJyalpycm56bmpuYnZeTkZWWkJKRi4+LlpSMjYqDi4SEiYyQkIqOio2LipGJjZOTk5SVk5KcmZ6Xn6CfpaKvsamupKSfmKStpqa4t6ysu729wsPAv7+vpa2wsLS3uLO0uLa0ta6stK+4tLaBeXpjZmBeVlBRQUVMT0lcXl9UR0dCS0xCREA9ODg7OTU3Nzk3Ozc9PDk9Pj05Ozg6O0A8Oj06PkJBOD88Oj84NjQyOTtCQD9CPj04QEI/PkBEO0A+N2CloJqXnaGaoaCPl5efl5WCjaCfo6GdmpKOjIxycXBvdnFucG1ucHZub29waHBxcHR+c3FycXd7cnl2d3Jyd3Z6e3l8fXt/iIGEi3+PkYaNi4uGiouLiYaEgYaCgIKJkYOAg4x/ho+LiYWAh32AgZKQhoSEho2DhIyPj4+IjY+Hi4iRkJWRjpCKk5eOj5WYp6SfnZWYlpaln5udq6aqt7W4srGnr6qnpqGfmp2WkpWVkYqPjImTjZuVjYuLhoaJjJWQkJCLmZKVlZSbkJiTlIyNkYyWl5WilZ6mqauno6OqsJucpp+mq6G0vb6zs7+5u7u6uby9rqiusa6wuLyztLGxqrCpqLGxsqild3J0X2hhYFRWUUlKSFZNXl5eVExKRVFKRUdDPTo5OTc0ODY4Mzg4PTo9PD47OTs4Ojs/PDw+OT9DPzg7Ojg8Nzc2Mzc5RT4/Qz89N0BAQT0/RDw+PThUj4yGh4eUjJWZl5yWmZaNlZyWlZydoKCdmpiWeHFubXJ4cXFsbnJwa3FvcG1yc3t1dnd5fnVxeHZ0d3tybn98gX15eH1/eYOGg4WCg5CLkIuLi42Pi4mJhYKBfX9zfYiAfpyQhIWFiYuPinp9fYaOjYqGjZSRi5CXj5SXkpihlp6XlZunpp+goKawq6GjpbW0sqqmqq+isba5vcK7ucO+vLi9uLWxrLCspZuSk5mfm5SPk5WOmp2doJqfn5edo6qsoZ+em62hp6qwqaampJiRkZWUo6SirKSss7Szs6i3tru4sLKvra2yt7a6srW6s7e5u7i8urayr6yxsbKztLOxsa2us7Gzs6yhl3Zxc19jXlJRVE1PSUdYT1pcZFROR1VPRURKRD44Ojg3NTg4ODU5Nzo6PTw/Ojg8ODk5PTs9PTpCPj84Ozo5Ojk4NjI1N0I+P0RAQDY+P0I/PEM8PT46Tn98go6MjJOTl5eaj5SWjZaRkZSXk5qanqGdnHJvcnFxcXFxcG5zcW91dHJxdneAdXd8eYV+d3t8eX1/fICJiYmDfXp/h4GIiYGAgIGGiIGGi4aIhYSIiImEf4J/enx8fX6SkH+IeIGFi4qDhIWKj4yNkZmdlJSUoJqan6Ktsa2ppKWtr6ysrLWuvrmtrqm1sLexq7G2rK+9wsLAvrq8trKutraxtK66u7OurKepp6unoqmtoKmooq+wuLSxvLq6urK0ta+8tLezt7e7t7mtrbCprLW5sbeytLe2sLu7vLu6ury1vLi0wbWsqqqrtLG3uLm1trSzsKymrrCqq7Cxq6yusLKxtK6qo5N4dnJlZ1tMUlBGTUhTV1JlXmdUUExcUUhMUkNBOTk3OTU4ODY2Ozc5Ojs6Pjk4Ozo6Ojw8Pj08RD45Njs7ODg+OTUxNTZCRkREP0A3Pj5DPjpBP0BAO0t/gomXmJSdlpabmIuSlo6XkZGVl5SZl5+bmZx8dHV2dXl1c3RudnJzdHV2d319gX56gXyDfoJ/fYB/hIKFj52RiYF/go+Xjo6HgoCBiIuFfoqQi3+HjYyLioeSioeGjZGTkZGEh319g4iMjouOiomQj46PlJSYkZWbmp2dqK6yr6+1tLOtsrW4sLy1tbGqsKqztbS7t7SztrS1r7i4t62noqassLCvtre3vrW5vLOysa61u7C0r6+yu7axuMC9tLS0s7izvLq2tLrAvbm6ubq+ubm5vrWysa+yr6q1tLGzsbSzrri4tb+vpKaoo6ussa+zrq6wsKytq6qroqKmqKKnrauqpaynoqeYeHlxZmVZT09NSVJNV0xPX15cTlVUYlFEVE07Pzk8ODk1Nzc1Nzk1Ojo6OTs4Ojw8Oj08Pj4/P0I9ODY6Ojk6QDs1MjY2QUZDQz4/Nz49Q0I5P0I/PjtLjpGTmJmVmZGTopiTkpKLk4uOkI+Vl5ablZSbhoJ9enh2dHRzdH53end2gIKDhouMhISFioaQiYeRk5aRjZaalY+IjI+emJaVkpCTl5qamJCdoJ2Tl5qgmZ2bo6CVkJugpKOak42IiIuJkZGOkY6LmJqPj4yUmpecnJufnKSstLm6vK+2tLi0tLK3uLmzq6+qqKy1srK1rrGrrqa3s7OxpaGotbCvrayrtbqyu7q6tLK3ur67ubG4sLmtqLK4u66ttLS3tbu2trm5vLe0r7G0t7a5s7e1pq2pq6ior6yprq2up6KxtLG0q6aop6Cjq66oqq6orLKwr6+pqKGeoaGjpqOgopqlo56ol3J3bmdiVUtUT09KQ1BLX2JYWlFcU19NSFFJQUA5Ojg2Njc3NTg5NDs5Ozk8Nzs+Ojg8PD0/QkBBPTs2OTk5Oj87NjM3OD5GQkJAQjk+PUBDPkBGQj44R5OWkZWTkpSQkZ+ZnZmVkI+Sko6Mk5aWko6RlZGSkIaBeXJzdXuBhI6HhZGTkpicnJiVkJWYo5yaoaeqqZ+clpeVnaKioZyZnpmlqKyvramnqqmop6GlqKirqamvoZufoaOjoJqfoJyUjZiUmKCgoaSem5qkp6Spq66spaOoq6+xtK6qrK6zr6ystLO0ua6urayqrLKwsK2wqKqmsrS0uK6qtrqwr6qurLC3s7i0t7W0u7y4tbWxtauyrKiys7uvrbGytLa1sbG0s7OvrKuvs7a0sayutKqqpqWnrauoqKupqqifqbOwqqeppaOio7CtqaatpairrayppaSioKWipaOYmZyVnqKippdudWVnZFZPWEtLSktTVHBiWWRXX1tcUlpQTEM8ODk6Njk4NzQ3NzQ4Ojw6PDg6PTk3PDw7PkM/QT47OTo5Ojs+PTg0NThBREVEQkM5PjtAPkI/R0Q+N0KSm5SVlZaVj46Wl5qZlZGKk5SSjo+SkYqKiY2Ul5qTjYmCho6VkZSfmpuin5+jnqGhn5ijpKelpaapqa2rqaKmpKilpKGfnqOjra2srairrq6qqqukoaKlqaenqaijopybm6SgpaijoJidmZ+hoqmnoKKirqyrqqetrqilpKmpqammo6iqqaekp66wr7Ovq7Crqq+yr7Czua+rqLCxrrCyubO0r62vtbCss7GurLW1tLSzs7CvrKyqrKusr7G0s7CwrrCwsKyqrauqq6alrrCysKumqbCvqaOkqaunqKaopquwq6mvqaaoqaalo6iwraqpqKKpo6WnpKGhoKKloZ2el5aYlJugpKmUbnNeamlfVVpOUk5QT1JkXGVjW11ZXFBZT0tAPDs5Ojc6ODczNTMzODo9OTo4OTo5Oj08PEBEPkA9OTo8PDw+Oz45NTo8QkFFQUNBOT47P0BEQENCQDdAkZ6YlJeZlpGHi5SSl5GIg4mLk4+OkI2Hh4SFlZmWmJeZlpqeop2anKKkoaCdn5qfoKGgpqGgoKCjo6KlqKmrramqpqOmpaCloKaopqWnqKapqKOnppmcpKWioaChoaCcmJmfoKGkpKKenpagm5qioqChn6CiqKCcn6GloaCmo6KfpKGspp6foaGkrKqnrKivq6e0sa6ur7WyrKqwq6mtrbWwrq6srreup6yqpKivsq+sq7Kvqqqpq6utqa6urrGxraqtqaunp6uoqauinaapqKilqKisqKilpKWop6iopqmsr6+oq6mhoqKlo6Opq6ymqKWjqKKhoKSdnZ+hoZ2bnZ+amZWcnKOqlG9zZm5yZF1dUFVPV09eZGRsaGJiWlpSVE9NQTo9Ojo4Ozk1MTYzMjg4Ozk5OTk7OTk8Oz0/Qz5APTk7Ojs8QD0+PDk5PEFBRUFGQTo9Oz9BQUJBRUI4PYqWlJOYmpaPiISNjpGSjIiIiI+JiZCRjoqKiJubmZygpaKlnqKjoZqeoZyanZ6bnKOop6ugoKOYoJ2XnKGjo6WjoqKkrKilqaCepqmnq6mkn6Kgoqahpq2mpp2fn5+fn5manJyhoKGkn6GbnZqcoJ6hn56eoKOZlpqYo6KipJ+ZnKGhoqCbmp6goaSgnaejqrGorqusqaSqqquorKalrKqws6+rq6mwq6appaWoq6ynpqevq6Wnq6upq6irqqqrrailqKOmpaesqayoopykoaOmo6qpqKano6SnqKanqKepqKupoaKoo5yepqWjqKino6WlpqmgpJ6inpeYnZ+doqKlnpiUlZ6go5d1d2t2d2FfXFVZUVVWW2Necl9oX2NTUVlUSD48PTg7OTo4NTM3MzM0Nzo4OT05Ozo5PDxBQEM9PT44Ozw9PEA/Qz86ODo+P0NAREE6Oz48QD9DQ0VDOTyCmJmenZ2alZKKiZGRl5GQh4SJgoGNj4+Sj42cnZ+hpKmlqaeorK2moqKfmKSmo6Stsa6yp6asm56em5qjp6Cfo5+foq+rqqyoqKuwqaipqKGfoKeprbCyr6yjoqahqaWepKOipqClpKKlo56doJ6fpaKinp+imJWemp6fpKGblZigoZ2enJudnZuZmZWen6Oonp2iqKGaoaOmoqSoqaqoq7CxqKWlp6eopKWpqaqnoqWmqKadnqWloqClpaOlpqCjpaOjpaelqamqpKekpqKmp6SrqaenpKGlqKynpqWlo6OopJWdo5+bnaCjqaeopqGjo6mooKiioJyVkZqfoKGmopuXkpCamqCVfHdvfXlmW1tgX1pcVlxoZG9jbmloYl5QUEA/Ozo4OTg8OzYzNDMzMzc5OTs8OTs7OT49QkBAPTs9ODw9QD08PENBPjo4PT9EP0M+Ojk/PEI/P0FEQjk6gJ6kp6Kem5+gmY+ZnaCWloqGj4iEi4qTl5SRo6Wnqq6trLOys7S4t62pqqevtLKxqq6usbKusa2lq7OssbGpq6+rq6y2sLSwq7GysaOfoqqpp663trS0trOvrKuuq7awqbKxra6npp6io6ObnZyXoqiloZ+eo5ueoZqWnaScm5aZoqefoJ+joJuUlpmWl5qfoJmVnqKZmJ2dpZ2gpKeqqaiqraylqaSlqaeqqaqsp6SkpKOimZmhnpqaoaCfpaWYnqSmpKqooqelpaGqp6mnp6ejqKWmpaGkqKesoqekoaalpaOVl52Ym5mVo6elpaSfnZ2lo6Kqo5+amZiXnJyaoaGakJOTl5ibjX93cnZ4aWJbX15cYllgZG5ta25hX2RgUE9BQDs7OTs4Ojk2MTQzNjQ3Nzc6PTo8Ozk9PUI/Pj89PDo/OTo7PD5BRUA9OTtAQT5DPDs5PzlAQEBAQkM7OXuao6OcoJ2dop2Zn6KioJibmJaYkpSQm5qWl7S0rrW4s7S4tre0uLm3tbm4ub28uKqLnLK4vLS9urW7uru4s7q/uLe5u7G3r6iusq2inJ+qsri8vL27ur+0r7GztbS3t6+1tLWysKikop+gl5Wal6SqpqahpKOkq6WlmKGko52goaKooaOgpaGck5mYmJmco56cmpudl5uZlqWam5+hqKmpqKuvr66pqKmrrKytq6irp6WjoJyfo6Ojn6Cipammmpyip6Spn6GjoqKgpaanpqSooJ+ipKGjoqiop6OloKGopqalo5mbmJuTj6GknqKfmJiVoJuhpaCfm5udnJuamZugmo2YmZiTkYaAdnh5eGNbUllUX19hbGh1a3BnaWliWVNMQDw6Ozg5Nzk3NTU2Mjg1Njc3Ojw7Ozs7QD4/QD0+Pjk6PDk2Nz47QkZCPDg7P0NDRDw+OT43PkFCP0ZDOzhwkpqblJ6bm52Vl52doqajopaXnpaXl6GblJi+t7G4uba3t7i7l5S2vbu9vcDFtaK7mKC3v7+6wcm0nbu2sra/xcGooLazurGqrrSxsLG0tLa8vL68vL3Guri3ur20r7Wxsbq4t7Kzsqqmpp+YpKSnqKSupKurtbWus6CnqqynqqmlpqCnoKGmoZOWmJ2foqSjnZ6coaChnZekmpmdoKaqqqqtrq2tsLGrrK2sqamrrqimpaalpqSkpqaeo6eppKGcoKKjpqCio5+jpJ2foqWgpJyboZ6fo6GhpaSlqaOkpaKkp6ehn52elpOcoJiZko+MjJeWn5uWnJqdnJqTlpSUmJOQmp2YiouHgIB8gnhhXllTYWhgZnNvc2l0ZGlkYltMSz46ODg5ODg5NzM0NTI1NDY2OTw8Oz08P0E/QEA9Pj44OTs4Njc/OUJFQzw7PD5DREM9QDs9Nz1DQ0BFQjw3Z4yRk4qalZiblZWYm6Knq6aVl5iQlZmhnpeXvrWztLu6ubi5woeYt6u4u8DCxbOjw6e4s72/tMTHvbS7uL62wMTErqCworW2tb2+wcPGw8O5vb/AwL2/xL28ur2+tKeqmLHAvbi1ucCzr6+qqqitp6ekr6eqtLyxtLWor7Gwr6yqoqajrJ+fpquXmqifpaWfoJydoKuwsKyiq5yYm6Cor7Kys6uorre1sq2tqaalqKulpaStqaShn6Cnnp6mqKmmnp+anqGlpqmcnaObl6KmmpuanZ+cmqGcmZ2eoKijn6GfnaWioKOioZSZmpmTj4qLhI2Qk5uPjpiVm5eYkJORkomNl5iYk4uKi32AgIVwYGFeXmpiYm53dXZubFtiUVVcTUc7PDk3OTc5Ojc0NDQxNDM3Njg8Ozs8PEBAPUA/Pj8+Ojo5Ojc6Pz5FRUU8PT1AQkJCQUI7PDhAQ0NARD87NV+MjIaFlouUlZeYl5ifpqellpWWkZebn5ual7mxtrO5vLy5urWqsryxvsG0vMe5uLuuv6fGw7/KxsnIxcXJvMLHx7+xsae8vL7FxMbJx8XGu8TAxcbAua+9vMC+vrOrqoyzu760tbfCuq2vsLWqq6aqo62kp7G2q7WyrbOtqK6vp6awr7Ktqq+zpKu1qaeopKCgnqmyuL61tbWqqaausre4t7apq7i8ubexr66noqOop6SfqKOfnqCZoZydoqSnp6GelJuaoKGlnqChnpajnZSQlpiboZqflpORlpSin5qenJudoZ6kn56VnJiPkpOPjImTkJefiZCWkZuUmJGRlZaDjJWXlpKLjIh8f4N/amZoYWtsZm51cXJ1cWZeX1xSSUU/Ojo6Nzg0ODw3NjU0MjMzNjU3PDo7PDs9QD4/QD48PTk5OTs6PDw+QkRFPj49QENDQkREOzo4QUJCQUNAOTJbk4iEjZGKi5GRlZCSmp2fnJOSmJSdnZqXmpW2sbm1tb6+tri1uLO8vMTEusPHwb+0s8XFxr/CzcfLzsvLx8HDxsfIysXExcO7vLzBxcHFxb/DwsbFwLGTvrq/w8K2trqptLO0qauzu7uxn5uxr6ykrK60p6qpqKqtrKmlpZ6pr6uyu7q4u7e5t7O5uLOurLO0qrC1ub3Bur6+vL60urm4u7qysbS8u7q7s7Oyp6Smq6uioaCdmpudmpyXmpuenJygnZaclpuZnZ6io52UnJCNiY6OkZ6bnJWNh5KLmJiWmpybmJybnp6cmp6UjpiYmpSRmZeeoZWYmpKXlJWRlJqYk4+TnZaSi5F+enx/dGtrbmRvbGhxeG95aWlhXGdhUUZEQTw5OTc2NDQ6ODQ2NTMzMjY1Nj05OTs7PT47Pj49Oz05OTs7Oz89QUNBQkFAPEBDQ0NFQjs4OUQ/P0BCPzsyV5uQkZCQh4WSjo2IjZCTlZGPjZSUm5STlpqRs7e4uLi+u7C1sri2tbbAw8G+w8LAvru+u7u8xMzEzNDLxsa/xcfLyNTLysjGv7u7vsS+xcjGxsTEw7i0wLe0vMHCucK3t7/Au66lrre8t62co7ewpq20tayupaWjqKSgoKWZqrOyvsG+urm6uLW0srG0tLO6wL7Av769u7u9vsDCt7a3tru7sru+ubi3u7a3tKyoqamrpqijnpOampyYkZKZl5GRmJqXnpiWk5acm5+elJOJiX6GiIuWlJiZkYmVkZeWlZmbmpaYl5idnpyhmJWZmZyYl5ybn56jnJ6WmJeTl5yZmZyUlp2UlpOJdnl6e3Zua2hndVpmcndzeGZnXWRbUlhJRj87Nzg4NzYxNjk3NDQzMzM2NDY7ODo8Oz08OD0+PDo7PDs9Ozs+PkRBQURCQEBBQkNDREM9OTlCQD8/QD89MkyWmpaSk4yKmJCKi4yOkpKKiIaNkJiKj5CUl7O7tba/vb2xtrjBvby0uL/Bsbi3vsHFvbu8wsbJv8jOyMHEwcfKysbKxczIzcbIxb/DwMvNz8nGw8PEwsS+uL7Bw8DEvsHPz87Gq6+2tLWroKe0s66ruLWzq6mjoq2prKatn6y1tL/Cvrm4vbawrausr7W0ur7Fv7u8urO5u7i5ubWtsLS9u7G/vLiytrmzubu0ra2orKyqqaeXnpualY2MmJSTi5WWlJyZl5WWmZKYn5mQiop+iYqKkY6Vl5OUn5mWkJSZmJmWmJOUm6GeoZiYmp2ZmZaenpibopqdnJuYmpuZlpeXlpyZlJyYfoB4eXV1ZWVpamhdam9teHdjYmBgXlhXRkU4Ojg6OTc5NDQ5NzY2NTEyMzM0Ozo9Pzs9PTo6PTs8Pjo7Pz48QkBDQkJFQj0/Q0NDQ0RFQDk6QkFBQj5CQTVCkJeUlZmSj5qQjpKRjZSVi4qHjI2UiImPkpq2u7S8xsHEwr3BxcLAtLO9v6ywr7rDysPCvs3IxbfByMW/wcLIy8rCwsTJzM3Pz8zDx8bIyMjHycfFycfIx7/Fx8TEx8jK0s/SzLy4trS4uMG+vrq9ury6vKytpqm7urm3wLK1uLLAxrq3t8Gzsa2tqau1s7u2w7a2vbWxt762s7e4sLW2v7uwvbq0q7CxsbO8urOzrqutq62xnaOjoJqQjpiXlZCclpaYlpWSnJmTm5+clpGUjpWQiYyQlZOUm56YmZKSnJedlJmSk5aZmJ2VnJ6do5yVnZ+TnKKcnKCfnaOemJSVl5ebmpmgkH99cXRxb2JhZ3VnaWl0bXhsXWRbVWBZTEhDNjw5OTg4OjUzOjY2NDQxMzUyNTs6PD47Ozw9PDs8PTw7PD49P0E/RUFCQ0M+QEFARUVERUE7Nz5DQkI+Q0I4O4+akZaalJKUjZCUlI6VlI6Pi4yJk4uIkJObt8C6xsXEw8zCwcS9vrWvt7uvr7O6wMfFxMHMy8W2ucDCwsTHytHLwsPExsnFzdDOx8zJwsHGwcvLx8bMyc3FxsbDxsXJzdDNz8zHxMDDwsnNx8XBxMfBu760sbCwwb6/wca/vri3w8K6urbAvrWyrKmvsri+tMC0tLi0t7nEua+8vrm+v8K/tbq2q6qsrq+wt768trSura2utaSlqKimmpycnZyeopydmZOQkp2VmKCdmJiVmZmZl46MlH2QkJefmZmYk5GToI6Nko+VjpCUlaKdnKSem56elpyjoKGipKOkop6amZubnJ2enIN9cnx4cGdgamp2bGlldG5zYlxiVFdUU01HOjc7OTk3Nzo3NDg3ODQ1MjM0MjU7Ojk+Oj08Pz04Oz05OTk9PEBBQEVCQUJBQT9AP0RFREVAPDo+QkNCQENBOjSAoZeUmZiVkImUk5aTiZGMlJGOiJaKi5CXnMXLw8O8wMPHwbm9vbu4tre3rrK3uLzAwsDCx8bHurzAwsXHyMbSycHDxL+/vsTLyMrLyLy7yMfJzcjDyMnJxsXDwsHCx8fJysfMyMfIzcbLz8W3wMDAwLu7vbWzs7+/ub/DucC3u8G8uri7ub27srCvsKy5wri9ube1t7q9xb24xsjCwcLGwr28tamurrCwr7O6t7m2sK+tr7OppquprqannqSlo6OjoqCblZiekZecl5GRlZeZlZmRlJiSlYyYo5qcnp2FiZ+TfJKWlZKUlJennaCipJ+en56foaGkoqKjoaOinJ2fnqOhppl5enl/cm9mZWdjamRham1ubl5YXFZVTlBKRjk5Ozk3Njc3NjM3ODk1NjEzNTI3PDs8QDs/PDw6ODo8OTk4Pj1APz9GP0JBQz89QT5ARENDQTw5PENBQ0RBQDozbKKdlZedlo+PmJiZmIiSjZGVkI+Vjo6TlpbKy7u5urnBu7q3vsG8vLu5sa61uri4u8S6vsC+vru8wMXCxsK+xsG5u8O6uLm8vsHGwca6ucnJw8XEwMTBwsHEwcO+vcLAwMHCy8PGzMvFyNHCsL69uLq7vL63tLC5vrO8vrG5tbi7tryztbm2uba5t7GtusG6vMG/t77Ev8bDw8fHwrvAwr/Cv7iys7O1tLGut7S3tbSxrK2xp6Wlp7CtqJ+nq6ajqKWmpqCgn5SYmZSRkZWUl5OYl5qhnZ6hnKGdoaWglpSbkZeXmJqTnpmZqaSlpKWdoqCanqCkoqOcoqGjoJ6cnp6ppaiVfXuDeG5mYWRiYWJjY2piZmNaWVlcWVFORT07OTo7Nzc5OTY0OTk6NTMxNDUyNzo7OkA9Pzw8OTc3Ozo5Ojw+QD8+RDxCQURAPz49QkRCQkI+OjlCP0FCPT44NVmfnJiTmZaRlZiYmpeQkZCQk5GTlJKSkpSUxce4tbq5wrm5vMPFwri7ubGxtry6tbnAu7u5tre0tLW/u72/ub26urS/uLW3s6+7vLfAt73Cv8G7v8G8u8W+u8HEwL6+uLzBwcu+vcnEwMDKwLHBv7u4u765tbe0uLy0vbi1tLCzvLG3tri/tr25vb65t7q+u7/Axb29y8PGw8TAw762ubq2v7i7v7y4trOyq7CwsrWzs66sq6emnqeurauiqKumpqqjp6iqo5+Ym52bmpicnJiXnJuhpZ2anqGhoKGmoJqbnJiboJ+dnJ+coKiho6SknaKfmqKgop+el6Shop+dmpieqKWhi3x5h31xY2BiYmdqZmZpZWldVlVTWU9TS0U4PzY7Ojc3OTs2NTo7PDYzMTM0MTc7OTg/PT47PDs3Njk5ODo7PUA/PkA9PT9CPjxAQUNDQT9DPTo2PEBBQDw9ODdJlJibj5OUkZWYlZGWkpWRkJGUlZSTkpKYlcHCwLq8ub62uL7EwMKxvbqytLO4vLW3vMC8vbS0sbC1t7W6wbi+uL+8vbe1t7CuuLa5v7vAv7fBvLvDtrrIuLa5u725ura7xcXKvbnFwL+8wb64xr3BwLzFuLa3tLi2tru7uLa0t7q1tLi8vbm/ucPAwLu5vLu+vcjEvcfEw7rAvb62sra4srm0usLCureysaysq62yr7Kur6ijpJ6rrKyqpKakpKiqoqemraihoaGmn6Oiop6bnKKfoKOdnJuhn6KgpKCem5eZn6GdnZ6eoaWkoaKioZ6ho5yinqCZnZijn52eoJqZoKKmnYR6g4B4cG1lZWZvaWVrZ1hYTktLS1JJTEhDOT44PTs2Ojs5Njc8ODk4NjA0MzE3OTk7Pz0+Ojw6ODg5PDg6Ozs7PD1BPj09Q0E8P0NDREA/Pzw6Nz5CREE/QDg4P4mYmoyMkI+Tl5WMkpCakpGXmJaUlJKQmpTDvsbBwby8uLi6v7a8scK2tLyxtLa4s7q9v728sq2vrLGwt7y2u7zAxLm3t7e1urm6u8C9w8C6xMK+x7i5uK23tbi6tLezu8XGy8G7xsDAv728v8nDxMW+xri1srK9uLi4vrq6uby6urS3u7q5v7zEwL+5uri/ubvFxr3Fw8Kyur27sa+2uLO3s7q+wLm2rLGrrqmqqa2qqq6mpKWnrq2ppaOio6GkpaWmoqato6Klo5+ho6Gcmpyhn6CloaCenZygnaWgnpeVmZ2fn52gn6KmpaCknpybn6Ofn5mcmZ2epJyWnKOcnqGcppZ+f4Z8a25wZ3Brc2VibV9cVEhLSkRKQkNHPzk7OD08Nzs7OTc4Ozc8PDYyNzUxNjk8PD08QTs8Ojs6OT45Ojs9PUA+RD89PkRAPz9BRkQ/Pzw9OTc/QUNCQEI5Ojl3nJiLh4uQkpOWjY+TmpOQnZiSkY6QjpiSvbfHvsO+vbu+vL22uri9ure9s7OwuLi1uby8wLeqraSusLe7s72/u8S3tri2t7+/xLzCxcXHx8rJxs/CwbiutbW8vri7sr7ExMrFwcnDwr+/vr3HzMfHxMe9tbW2wb26u7/CusDCv7y2t729vcHBwL+8ube8wru3v8W7wr++tbe8vK+vt7awtLO6ubq7r6mtq62rrKaqoqeuqKWqra2vp6Sgn6ajnqKjqKOjq6Oiop6dm5ublJaZnJyfpZ6fnpmYnpejoJyXmZqZmqOjop6jo6egpqCbnaCjnp2WoJmcoKCblJegn6WcmKKQgYaBcWVsaW50bndjZ2JcY1FLVEhFRUNHQzw7OTg9Ojc6PTo4OTs3PD01MzY1MDY4OTo8O0A9PDo+PDk+OTk9Pjs/PkM8Pz5APz0/P0ZEQEE/Pjo3P0BDQz9BPTo4ZqGYj4uNlZKVlY6PlpmVl5uVjoyMjY+bk7m2wbS/vLm8w8C+wLq1trKywLmvsry8sLe7tru8q6qjsLm9vrO8vrzFuLK4ub3HycrDx8jGxsnIzM7RzMrEtbrAw8i/v7W/wL/Gxr/LxsO/wbzAw8zKx8XGwbm9vMS/wL/CyL3Hx8XFvLrEv7vBv7rAvLu7wMS9t7nCub69t7S2uLqur7WxsLCytre0t6yurKqsrKuoq6Gms6qlra+trKippaOkp5+io6Onoaeiop6cnZyamYyQlpeZnaKZnpuVkp2UoaCdmZ6fmJimpqKfoqKmoqeloqCko6GbnaCbnKKfl5WVnp6kmpafiYGDgXRvbGx0a2xuX2JeYWFOSE0/RUA/REM7Ozo6Ozo4Ozw6OTw+OTo+NDQ1NTE5OTo5PDtAPD89PTw4PDs6PDs7Pz5DPkI+QD89Pz9FRUJBQj87Nj9CRUQ9QUE6OlmfmJOSlZqVmpOQlpeclZuZlpSVkZKTnZm2uLaxuru6vsG5uca7trWypb69tLbBv66zvbS4wbGwsbS8w7y6ur68xL+3vb+9x8zGx8nGxr/ExMrIzMzNysbCw8vOwry5vbq5wMO/yMbEwcG/xcDKycPDw8O5w769ub+8wsbCyc7Hxr66xr26v7m3wLm5vsDCvrW0vLi2u7CvsrK1r7Cvrqyus7CzsrirsbKxqrCrq6yrrLatqKyusqarrKmpoaWgpaakrKSmoaChnqGgnaCMlJeTm5+mmZ6emZOYnZ+gnp2eopuYp62ooqSgoKKqpqmhqKGlm6CgnZ2jn5SYmKKdp6Gfm4J7eod6bW13e19wY1tdX15TST5DRUlCQz5DOz42OTo7Ozs7Ozs7PT05PTU2NjIxODo5Ozs6QTs/PDw+Nzs8Ozw9PTw9Pz5BQUE+PkFCQUVDQkRAPDY+Q0RFPkJEPztTmZuZmJ6dmqCalpyZn5KdlZ2boJWWlJqYur20sLu8wcTCv8XGura5sqO7vbS3xLuwtbq2ucS4tLy2ur3BvLu/tr/Bv7y/usDLwsfIwL+8vL/FwsfLyMHDwMDJysLAu7uwtLu9wMXGxcW/wMK/y8fCwMjAusK7urO6usG+wMrOysS9tby8ub+5ubW1s7/Avre0s7S4rbeqr7CwsrGvq6+nr7ausrG5rra2uLSzsLGttrS6sa6srranrLKsraSjoaenqLKrqqWkp6elpaCml5ujn6SmraKeo6KanaWiop+foaWenrC0sKSlnp+kqaevp6mgq6CiopqipJ2anqGmp6+psZWCe32Cem1zeHNncF1bXlxZUUVEQ01JQUU9Rzo6NTk7Ojw8Ojs7Oz0/Oj01NDUxMjc4ODs8O0I8Pz46OzY6PTo7Pj0/QD87QUFBPj4/QkBBQkJFPjo1OkFCST9AQkA7TJqdnZ6fnZienZmampySoJWbnp+blZGRlsW+urbDvMbCvr/Ixbe1uLe2ubu0r7e2srWzt7m8u7a7u726w7u3vbe5wLu6uLi1xcHCw7u5s7S6wb2/xsC5wLy+xcS9vrmysK64t7/Dx8PEvb2/v8PDvr/HvLy/tLSutbW8vr/OzcvCt7K4uLi9ubuxtrLIwLu2tLGwt6yzqbCtrbO3r6uuqrG1r7Gvt7O6usC/tre2sru6wLWyrbO3rLC6r7KloqWrrK+5s7KosK+xr6qiqKGkraitrLOun6inpqWmq6Sknqaqo6ayuLOrpZyfp6anrquqpbClpaWbpKOYn6exrLW4sLKOhHl/fHZsdXpwbmlcX2BZU1BBRUhHS0BEQ0g8PTY7OTk8Ozo6Ozo9Pzw9NTU2MTM2OTg8QT5AOz1AOzs5PD04Oj08QD46Oj49Pj09PkBCQkJBRD03NDU9REc9Q0I/PEWUnqCgoJyXmpiYlZmdmZ2fmp2bnJaRj5LDwMK9wrzEvLy7xbu3s7e2tru7s6CWtayvsbS0tLa4ucHAt725uLm2tb+ztLK4sbvBwMO3t62wtbi4uMK6tLu3u77Au7u8rq+us7K5wcLEw768v7u6uLbBwrW/urWur62wvcC5z8rJw7GvtbS0vbq+ubq7ysO7uravsL2xuK+ys7C3vbaur66wt7CsrLK2vbzEwrq9t7bAv8G3tbC2srGzurGxr6err6u2v7e1qbqztbmxp6uop7ausrG1uaisrK+qr7CqqKessayytr20saykqKuoqKusq6i2qaaonqadmKOuvLG7wbSmiYF8gnpzdnZ3bnFgX2VcWlVKPD8/RkY9RkNDOTo1Ozk5Pjw8Ojo8Pj4+Pjg4MzE1Nzg5Pj9BPzs6Pz08Oz09OTs8OTs6Nzs+PT1DQT8/QUJEQkE8ODU4PUNGPUREPzw/iZ2en52Xl5WUk5aZnpubmpuYlJ2Uio6Owb7Dwr6+vrm2usCxtbGzt7fCtbOrrbOoqa61r620trnDv7e6t7a2srTAtrK0uLO6wMHDubezsrK0sri+ubO1sry5vLa6vrK0tLSwuL7DxsTAvb+5s6+yvLquu7Szpquorbq+uMvCv76sq7Cvs7q3ub67wMXBu7y3sLXEtb+0uLu0u8PCs7a2sbisqaWrsr23v7+7u7exvL28trGvq6uprbOvsLCrsLSpuMC2sqm0tbC3tq2spqu7s660uMKwsbG1sbK1saywsri4ubi+tLGzrqyxramvrqqyuK6trainoZ6ptr+4ur+wlol9gHxxdHd0dnJsXmJgW11PSEE+PUhDRk1DQDc3NTs6OT48PDk4PT47PT86ODMyNTc2OD8/Qj86OD4+PTw5PDk7Ozo8Ozs6PEA+QkI9QEE/QkI/PDs3OjxBRD5CQz8+QYqgm6GdlJiVlZKYmpyWm5WalY2bj4SIhru0vb+7vLm3s7y8rLOytLS2wLXAr7Kzqqqxt62pubO3wL27vLi2uraxwLq3ubi5u8HBxMO7u7a0tLC2urW0sqy8ubi1uMG6uLOxrLe8wcfDv7m6ta6lrLOwprCtqJ6gn6WttrXCt7a0pairqLC2s7K6tbu7u7W4trC1xLK+vL+8ubrFybq9vraxp6SeoamxrrW5trKxq7S3trGopp6gmaWmpKynq6y2qa+6sa2kpq2lq7GrrKmtuLawsrjBtrGxtbGvu7ayt7W1sry1urKwsbKutLKqrq2nuLWyta2uqqiosrq9wLa0qY6Ce393b3tvdXJuY1xmWFxdUk5NQT5JQkBKSUA2NjU7Nzg+Ojs4Nz4+PDs/OjkzMjc1NzU8PD48PDg+Pjw8OTk5Ozs7Pjs7OTw+P0E9PEJAPz9CQD47Njc6QERBQ0E/QUKJoJ2loJSWmJiVnqCcl5uYmZGMmYmDhoS1r7S7u7S1sLG2uq6wtLOvtbq1urC1s7GttrqurLyyuLm3u7+9ub7AtL+7vLq4vsK8wsrIvsC4uLaytLaytK+tu7q4trnAw7aurqqytry9ubaysa2tn6Snp52jpp2WmZman6muuayrq5+lqKSrrq6nr6yvsbGtsa6usLmwtLy+uLm4x8W8vLu4qaKcmJufp6assq6zqaapqq6popqXl5GcmpijnqKir6ekrKaompqemqGnp6anqa+2squ0trCqsK+xqbm2sbWxrqy3s7avrquuq7S1ra+rq7GtsbKoraurs7W3ur2wq6GLeoJ5cnZzbXVpa11balRdXE9NSERGTEJGTUY4NjY1OjU6Pjg7OTc8PTo7PTo5MjM2Nzc3Pjs9Pjo6Pz48PDw6Ojs5Oz47PTk8Pj1CPDtAP0A/QT8+OjU1OkBFQkRBQEJBiJ+ipqGYm56dmqWpmJudmpmUjJmHhoeGrq2uuLmxsqiur7iyq7CwqrK1ubm+tbK4tLm6tbm7tbWztbu8wLu+wLS/ubm6sbrDvMLKxb+7v7+5tLSzsLGtsLm4try4u7+ysrKusa65r6qrrayjqKGdnZ6XmKGVkpWXkJifqK6ko6Sgoqeio6mpoaanpaqtp6ynqKesq6yyu7SztLm6trK2ramgmpaWm52fq6yrr6Ojo6GpoJuTjo+Qk5KSmZaanaSloJ+ep5iVkpSYnqSjoaWqrK2iqaqppKmtrqW0sa6xraqprq+wraWmqqSos66trKmmpqmrpqqnq7Ksr7Oxq6mWgX+Bd3J4aHRzbmRUYGNXXFFOTEhASFFETUM9ODg3NTo3PD46Ozw4OTw7Ozw7ODI0ODk3ODs7PDs4PD0+Oz08Ojk8Ojs9PTw6OkA9PDw7QD5CQEE/Pjk1ODs8RkFDRD9BQYijpqKjnqCfp6Coqpufm5yZmI6Xi42PjKqpqLGvsK2lp6ayr6mmq6CvsLu1vby4wMG+vLy8ua6sr7Kyurq3t7W1vLOvtKu2urjAxMG7tby9t7Kts7CvrK62trK0ta+qpJ6bnJyeqKieoKipn6GnlpuXl4+dk4+Qlo6Xm6SooKCioqKlpZ2jo6CepaCkrKSmqKSio6OrrLOuqa6urqeqraisoZyamJmYm6moqquepaObo5yVkIyPj5CTkJeVlpifnp6amaaXk4+Slp2ioKWjpqSnoKKko6Ghq6uksq2qrKyno6yuraufoaKkpK+srKmmo6KqpKqqpKmrpqmsq6agiHiDfHZ/eWJ3bG5cUWhUUE5HT01MQk9RQD47PjQ5OjU7OT07Ojk9OTk8Ozw8OzkzNjk5Njo7Pz06ODs6Pjw6PDs5Oz07PDw9PjxAPT88ODtAQEE/Pz45NDk8N0FDQkQ9QEOOqqSjoqGinaulpqimoZ6dmZ2PmJWTkJWnpKGmqKmlpKChp6uhnKKbp6u1sry9wMLCwL7AuLSnpayqqLWysbCur7KnprCkr661wbq1t7K3trO0q7K0rqqrr7Cys66lnpKYlI+YoJ+ioJykpZ+eqJSblpeMl5GNkJeTmJ2iqp+fn6Cjpaicn6ChnKKfo6innKehoKSfrKisrKCpq6agpKimrKOdnp2Zl5qrpqmxo6WonqCclZOQj5GQmJCWlZiWn5ibmZujmZeUlpqdoJ2nqKWgo6Kho56doKmqpa6upqipoaKqrqqnoaCio6msq6eppqShqaKlqaalpKKmpKijkn18gHV1fW1re2RoVVFjTUlIR05STkpORztFQD0yPzc1OTs+Ozk5Ozg6PDs7Ozk5NDg7ODc7Oz48Ojk8Oj07Ozw9OTw8PD49PUE+QEJAPTc6P0FCQEA/ODU1PDpAQ0BEPkFGlq6koqWeo6KpqKipqqWmnp2imJiZmZWbop6bnqOioKOgoZqgmJiXlqGorK62t7q5ure3u66ooKGpoaCtq6qmqaSppKWupaystLy3rbOxr7Guta+vs7Wqp62so5uZlI6RlpeZmZygoqKcnaWemqSXl5eWkJKRkZOal5ugpKqeoaGepqeqop+gp5+dn6SnqZ6jpp+qnaqtqq6nqLClo6Smp6ymoaShm5ier6iusqulqqqgmpiYmJWTlpqTlZWZlpuXl5ignpycl5uhmp6ao6eln6GioqOdm6Gmp6aoraOppZ6kp6mkpaWhpaSsrKmmq6eioKSjpKenoaCgpaKmoIl7gH12eHxkeHlgYlJVX0hJSUtTVElSUEw5PkI2Nz02NTs6PDw5Ozs4Ojw9Ojs4NjU3OjY5Pj0+PDk5PTk9PTw+PTs7PDo+PTw/Pz9APT03Oj5AQEA/Pzg2NT08PkFCRkBAR6CupKaroaOqrK6tp6ypqKCipp6bm56aoJyalZmfn5uen56WlJOXk5OcnqSorq2sq6uvqq+pnpeepZ2epaakoaKfpqCir6usrbWytqavs6upqrSxsbC4raehnJ2alJeampCOkZWRjI6OlJminJejmZqXmJmUmZiWnZufpaapoKajnqeurqumorGjmqSmpqqioaqiqaSosquxsqu5qKarp6urqaysp6Cgo7GusrC0qbGvopmcnZ6hmZubmpiZm5SWm5aYnKShoJqjoZqdmZ+kop6gn6KmnZulpqWkpaijp6OepqOinqaloqWlqKykpq2noJ2dn56gpaGenqWgppmBe4F8dXZzaIJsZVtTWllNUUpOTlVMUkxBNz1CNzg9NzY6PDw9Ojw5ODo7PDo7OTc2Oj01OTw7QD03ODs3PTs9PT06Ozw4Pj09QD5BPj4+ODg8P0BAPT43NTg9Pj1BQEZAQUihqqCrq6GkqquwramtqaelpaWkoKGfnqWXl5SYmZ6YnJ2blo+VmZKSnJihnaqip6Cep6Gln5ySnKKbn6Gjn52goKOgoq+vrK+xrLaorrGwqKaxrq2ssKefnqKgl5GUm6CcmZeSk5+coaSbnpuWn5qfl5uinqWhnqSfpKitraisqKSstLe2sKe0rKKtraOvpaSmoamorrWzsr23vrCssa6tqaq0sbCoq6iytbezuKyxtKSgnaWfrKGhoqCgmpiWlqCbm5ikoaCepKGfnpqcpaCfnZyhqJ+fp6meoaOkoKagnqehn5ymo5+ipaOooKmrpZ+dnZudmqainpyjnqeQgYJ/fHh1aXd1XWxaUmBIUVVIRlVWSkJMRz1LSDhFPDY3Oz49PDo8OTg6Ojs6PDk2Njo8Nzs+PT8+OTc9OT47PEA8OkA6OkA/O0A+QUA9PDk3Oj5APzo+NzU4PT0/QUBEQEJGnKueqamipamprqimqqWmp6aoqqGlpKOmkpOVmJacmpqcmpWTmZuNk56ZqJ2unqeenKGdnpqakpmenKGioKCdoqCfnp+pq6esqaq0rKusysCkq6iqrKqloJ6ZkpKTmJiWlpWMiIuOlZ2dnZ2elp6apqCgqKWxqqeuo6uttrC0srGutri9wLqttbSwt7CutKmmpKWsqbmztbvDvMPBtrq2q6+xube8r7OwtcG8t72zs7WirKKpqLKpq6inqJqZnpqqp5+ZpqCfn6eopaSenaqhop6bn6igpKetmZ+jnp6nnqCmnpycoqGbo6KhnZympaWkn6KZnJukn6CboJyjiYWEfnZxbWl2bWhtXFhbQlZNSkdNR0JGTTw+TD00PDk2Oj0/PDs6Ojg4PDk6Ozs8NTQ6PDg5Pj4/Pjg4Pzk8Oz0/Oz1BPTo/PjxAPj8+Pz08Njs/QT07Pzg1ODw8QERCREFCQ5WqoKapo6mqqKmjoamgpqinrK6lqaWpqpSSl5mUmpqanJiYmZyamJqqoLGit6Owpp+enZ2XmJWZnpuco5+fnaSem52cpaKko6KqsKymqNS0payvrqmrp5+enqGinZ6dmpyclJOVlJ6dmJSFnZqhm6ukq7KwubKysbKxur28vLm2uMO+v8K/trq6wMS5vbusr6exrbHCtrjCxsDIysDKv7C5ub25wr64s7vGw7zDvLezqbOtqrO0r7Ouqq6jnauntrGsoq+loKOvsa2wpKSvo6GgmqGnoaSqqpmdoJmao6CmqKGcnqKemaSenpiYo6OhpZ6mmZuipJ6fm5ubnIeFgXt0cmtrdXJwaFdbUUVUSERJT0g+RUE0RUg5NTs9Njs8Pjw8Ojo4OTw4OTs4Ojo4Ozw3Oz49Pj02OEA5Ozs9QDw9QDk3PD07Pj0+PUI+Pjc6QUA+PD45NTg9Oz1DQEFDQkGRqqGlqqelqqimn6KnnKasp7Gyq62jqayVkpWalJecoqGbnqCinJ+psqu7sr+rr6ylnqChnZyYm5+gm6Cfn5eknZWbm5+bnpyfpaaloKPItLKup6Sko6CepaulnpeclJGZnZiUjIqGiIZ5bYigpKKrrLS8tsO+vrO7wcPCxcC/wsbGxcPIwsDFyM3QyMvDsre1vrK+xbu+zM3FzMzM0se+v8DDvsfGwrfDycnCwMW+ubS5urS7t7C1sqq6sa67t766uqq3rauquLq0vK6uuaOmo56mpaKjqaaZm5+Ymp2nqqegoaGkmJSjlpSakZydn6Sep5+en6KdmJmUmJSIhH16cmtkaG94amRaW0ZLTEVEU0xEQkU3Oj87NTQ5OTc5Pj87PDs7OD48Njo9OTw9OTw9Ojs9Pj4+NztBOj45PT45PT44Nzs6Ojs/Pz1CPj83OkFAPTw9ODY2PDo8QT9BQUE+kqugp66ooqulpKKipaGlqquwsq2upKmmlJWWmpaUm6SmnaGqp6KrrLy8v8PBs7K4p6Ghq6qinZ6hop6cm6CSoJ+SmZ+ZkpqYn5mPiaKxs6igmp2cn56al5iXkoyPlpeTjo2Qi4KDgndzcW5wj6atrrS5xbvNx8u/wszOzczHydHMzczHycXGzNDS1c7Tyb3Av8O7xsXIxdLTzNPQ09PMysLFxsfKx86/yNHMx8XGxMG7w8C+vr61vbOtv7/CwsbEx8SuvriyuLzEwcG6vLy1rqenraigoqmlmpagmpmdqKupo6SknpePm4uQmYmVmJugn6OdnZeempOTi5WPhYB5dHNlYmdyb2ZeWllDTkxDRVBJRENANTU1ODpCPTY4OkE+Ozs+PDk+PTc6PTk6PDg8PDw7Pz8+PD0+Qzw7OkA9Ojs6Ojg4ODk7QT48QD8+ODtBQTs7Pjc4Njo8PkI+Q0FAPpOvn6ivpqiro6KloKampKuoq62qrqKqo5Kcl5ebmJujrJ2frqalsarFxszOzb+wwailqKytqqGdo5+cnZqpk5qgmr6jko6WjIKLmqmwqqOfnaCbmJeUk5SWkZCPjIeEg4iHg4CBgYB5cnJvbHmktrq5vsvB09LTyM3O0dPR0tHQ0dHNzs7Qxc7U1djS183Gx8nMw8XKz8rS19HX0tTV09PIzMfNzcnSzM7TzMXHycrBxcvGyMjFvsKys8jEy8rKzsXKv76/vMHHxMzMyMm/w7+tr7OonqKqo5qTnpyYnqaprKSlppaXipWFkZSHkpKSmZualpiQm5WQjIaRi396cnV2Z2NndmlkVldRRE1GQElRQj1CPDoyMkA8RDw3OTxCPTs9Pzs7Pj05Oj48Oz44Ojk5Oj86Pj1APkA8Pjs+Ozk9PTw5Njo6Pj08PEA/Pjk6QEE6OT44Ojo6Oz4+PEE/QT6QrKKiqaanqKSfop2qqKOso6OnpqyiqZ+To5iWn56dpK6bn7CrqKyxyc3U18/Gu8esrbS4rK6jn6Sjn6CkrJuWp6/LrIyNkYuZr6+mnZ2doaWhnpuVlJaUin13cGtlYmhxb3F7hYqAdnBucXRwhbPCvsXR0NfW1tLWzdTW19TT0dPU1NLP0cPQ09bY1dbSy8nO0cvGzdHJ0tXW2dXX09bYztLKz9HMztDM0s+/x8bKw8zMy87PxcbHtsDKv9HMy8/Fyce/w8PIzszP0M/NysjOuLe7qJ+lq6eemJ6jnp2qpa2pqKiSlYiQhIyRho2MiJOVmZCWjJiSj4aHjIR8eHN2cGNgZXJiXVJcSUpGQUVIST47QDg9NDU4NTs4Njo8QD07Pjw7OUA7OTo8Ozs8Nz09Ozo+Oz08Pjw/Ojo8Ozs5Oz89OTU7PD48PD0/Pz46O0BCOzk/OTg7PT0+PzxBQEQ8hqugnKegp6Oim6CbqaSlqaCfoaGmn6ifmKSimqmmoqarmqOwsamotdDU19rSx8bLtLXCxbG2qKKlpqGiq7Wnmq/ExqWGhqCvrJyVmKCcm6Gin5ydmpWKd2ljYF9fX19eX2BeYmx1c3Fwb2xycXWSxMfG1NXW19fT1s/V1NrU1M7P1dTU0dHM0M7T19bT1dDP0tPRydPRx9DY19jR2NLX2dXWzM/Pyc3Ry87Pv8XCx8XOzdHQ0cjLzMDKy8XTzsvOyMTJxsbIzMrT09HVz9LM0sG5xbGlqLWup5qorKWdsqiws6ysk4+TjoiLjoOPi4SQjpmNk4+Zj4+ChYx7enFzdG1hY2ltX1ZQX0pKQkZDUU0/PD41NDo9NTI4NTU8PEA8Ozw6OTpAOjg7Oj46PTg+Ojo8QD08OTs9Pzk6Pz07PTw9PTo2PD0/QD08PT0+OjxAQjs5PDc0Oj48Pz89RkFEPYKknKClnaWlo5mcnaSeo6OfnZ+doJqnnpyhqZ+vrqqqq52mrrioq7fX1NXZ2dHO0MC8zMm3v6+nq6mjpLG1sqO3y7ublKqroZiWmJqbnaCemZyek35xZWNiX19hX19hYF9gYF9gZm1wcG5rb3J3d5vMwNLV09jY1tnR0tLXz9POy9LN1dTSys/M09bS0dbNz9XV0cbR1MrQ1NXWztLQ2NjY18vIzcPIzszKy7/Jv8fIzc7Py9DNzsvOzsfKz9DKzsrCycbJzMrL0dLM09HRz9DKvci5sK67uLWqtrCtqLits7+7sZqPn5SRjo2IjpCFkY2ZjJGRlY6RgIWIeXZvcG5rYWRucGFXXFpJRkZETVdFO0A8MzM8PTg3ODU1Oz5APTk8PDg8Pjk8QDtAOj04Pjk4Oj88PTg7PkI6Oj08OkE9PTw6Nj08P0A9PDs9Pjg7QEE9Ojw4ODs+PD4+OkVCRT6Bn5mlp6Cfo6eam5+cl56eoZqdmpyappufpKeeuLa1ta2lra6+tLDA2NLX2tzWz83LxNPQwsGxqq2uq6Wysbiqu86vo56clpOXnJ6fn52Ul5iUiWteXl5hZGJgYGFhYGBhXl9fXl1ibXJvb3N0dnZ5pL7L1dHW1NPY1s7O1MvNzsXOytLSz8bOzc3UzM7TzcrX1dDM0dTLzNDR08rO0dXS1dXKwMnBxczCyMnCzMPFyMrKzsrNzNDN08vFyM/MyMfKxMbAxcrLzc/RxtDOzc3Mz8XHwLe4vcPDvcO5s7K+sbvDxLWqmKWimZaRlZWSi5SNmpGUlI+PlIKJhXhwcWttZ2BgcWhYWGhWTEZMSVBQQjtEPjs2Nzo4OTo1Nz09QTs6PD05PD05PT06Pjo8ODs9OTtAPD47Pj5BPDk9Pj1CPTs3NzU/PDw/PDw7PDw4O0FAPDo8OTs7Ozw9QTpFQUU+hJ6bqK2epKSqnJ6fmJKXm5+am56ZmaKVoamppcXDwb+7tbKxx8K4y9XW2drb2MzNz8jW1cXDt7G1qqOtrLi5r7/KoZeOjZiVkJOSkZaWlpCMfGZiYmJgXV5hY2JgX2BgYWFgX11bXWdycXFyc3FtcnmkxtPPy9DP1NXJxcnJxsa/w8bPzsfFx83K0sjLzs3G0dLPzszUysfLzs/Hx8/Sy9DPxbrEvsbJvcLHyc7EwcfAx83Hw8vKy8/Hw8PQyMbBxcfEvsDHy8vLzsLKy8jHzNDExce7x8PIyMLPwb28v7DByce5vaqwsqelnaKcmJCbkKOZl5mRlZiJj4J3bnRka2BeZnFhW1dgR0hIR0lNVEc/Sj02NDM1NT08NDg9PT06Oz08OTo7OT89OTw7PDg6PDo6QD1APD09Pjw6Qz48Pz04ODk6QD4/Pjw7Ozs7ODo+Pzw7Ojc5PD49Oz49RkFDPYOgm6qupa6qq5qdoJeUjpedmpmgmpqcm6WysazJzcrIxL69us3Nx9DV1dna29jQys/Q0tTJxLm9vq+nt6q9uLfDrJKOjpePhoOEhIJ+hYV/dGBcXl5eYF5gY2RjX11dXl9gYF9bWlxha3Jyb29rbG9vfbjRyMnKz8vNxLrAw7u7urq+yMbCw8DDx8rJyMrIwcXMxsjLzcnEwsvJwcLL0MTLyL+5wbvFx72/xs/Lw7/Du8nGyLvIxsTKwL3By8bFxL7FvLy/w8TLxcS8wMnCxcfSxMDIv8rJxsfG0MPDxsOvxMvHw8q3v7y6tKmspKWYn5iso6GlmqOgm5R7dnN0ZmlaYW5tWltYUURMRkJHRExERlNANTQzMzQ/PDM6PDw7OTw8PDg7PTtBPTo8Ojs3Oz05Oz07PTs6OD4+PEI+Oz88OTk7Pz07QD48Ozk5OTk6Oz06PDo2OTw+PDs+O0NCRD5/pZypsqm0rrCdnp6YnImUm5man6Kfmp2ov7i8y8/RzMfCw8fNz8/M1dDW2djZ0MzTzs/QysO3xsC1tbuwv7a4sJGMk5iHeoCFhoB2eHVycV9aW11gYGJkZGRlZGBcXF1dX15gW1laXGJvcm9raWxwb3OPxrzJxczAxsKwtrqysrOyscK8vLy6uMDBwcW+vbm9v7nEysXGwr3GwLi7xMm/wsm7t7u6xcO+vMHNw8a+vrXBvcO6vMa7wrmzvMXEwcK2v7W1vb+6y8O8tbrIur+9y8PBxcLFyMbIxtDGwszHssfJw87NwcXDwL2yt7Cyp6ioubClrbCrrayUeXZ3amRnYGhvY1ZeWUpFSkZISkFFQkVJQDk6NjQ4ODUzOzo7PDk8PDs5Ozk6QD46Ojw6Nzo7Nzo7Oz88OjxAPUA/PT8/Oz07O0A8Pj4+Ojk5ODk3ODo8PDw7OTo8Pjs7PjpAQEU+fqygrLWqt7SyoZ6fl5qNlJaan52mop2et8bCxMjO0svKysfNzs/SydHG1tTW2M7M0MfMyMrEvcnBsbS5trm0rpGNiouFeYCGhoB+hHx0dWRcXF1eYGBiY2FiZWViXV1bXF5cXl1aW11daHNxbWdnbnByeZ29zMDDusG4rrCwp6qtrKe4tLe0srO0urW9sbewta+yu8K8wcS8v7q1s7q+wLjHubS7tsDCvLi9xsHDu7Wusra6vrTEt7u1q7i9vb+9sLq2r7a6ssW8tq67v7S2tMW9vsPFwMPFxsjLxcDGxrvIy7/PysfDxsLDtsO9vba5vse/rLW6tbe2jnh0eGZnZWJrbl5WXmBGS0hISkZCREFFRT88OjU2NTYzMzs6Oz06Ozs6Oz44PEE9PDo7ODc5OTk7PDo+Ozk+Pz1APz5CQD1AOjo+Oz89PTk6Ojo4NTY7PT48PDo7OT49OT86PEBAPIi3pauzsby8sa2foJmUlJiXnqujr6qnpMbLzsjGyc7M0MzOyMvJy8rLxdHO09DPx8nFycTDv7zPvLK3u7i2tZuOh4mJe3l+hoZ3eIJ9dGheXV1dX2BfYGRhXmNlY19fXFteXF1eWltbXV9scG5oZmpubnJ8pMe/uLi1sKusp56iqqeeq6yzramrqbSttrCyqa6mrLK8urbDubq6sau1ubu0wrqwv7G9vLu2vMe5wratqqiwsb+1t7yvsKexs7S7vKuttaWutq66sbCquLCtu667uLu/v725wr/Hw8XBvMbByMu4xcfFv8bDw7nExsK7xsnMy7O5wry6sohydnZraWFibGhZV1dbQUxLTElFQUM/RkE6OTo5OTU4NTQ6Ojk7PD07Ojs+ODtAPD05Ojc5Pjk7PDo4Ozs6Pj45QT0/QD87Pjo7PDo9PDw4OTg5NzY4PDw9Ozw6Ojs+PTs/Ozs+QDyKwKuouLe5w62zqZ2ZlJaZoZymsLWxt6bGztLLw8bCxdDHzsLEx8DGxsTEy8LKy8LDwMa/ubu6ybazuru0s6qRiY+QfHl+ioZ6e4WBd29eXVxdXV9gXl9kY2JjY2JgX11bW1paXVpaWlpcZG5vaGZnaWtucoGtubC1rqalp6eaoKSgmpylq66jp6KrqqyqsKSmn6qttbaxvbmvt6+orre0tLy4tLyvuLm0sbzBscCupaiiq7Gys6e8qquoq6yttLOlqK2hpK6psqWnqK2lqLessLK3ubq7sbu9vr7Ev7XBwMfIt7/AxLfEwr+7v8TCvsTIzMq/vsPAwKmGcnRyamldYW9kV1ZYUEhZUlNLRkZFPj5AOjc4OTc3NjQzNzo5OTo8Ozs8PDc7PTs7Ozw4OT44PTs8Njo9Oz89N0E+P0A/Ojw8Oj05Ojs6Nzc3ODg3OTw7PDs5Ozo8OTc5Pjw+P0E7jMKvrry3usSwtrCbmZWcmKqpsLGztb2vxdHQzcTIurrMwszAvMq4v8XAu8u5wsXEubvCvLi2vMS3tLe5rLCVg4mNgXx+gH54dH98c3dmX11cXV5fYF5fY2NhYmBgX15dXFpYWltbWVhaXF9ma2ZlZ2Voa29yhaqlrKagnKGllJ2km5iSoaOqo6KfpaWnpayfnZukpqyyr7a3p7Csp6q0qrS6sba1rba5sa+6ubG3pJ+kn6axp6uouaqkp6iop7KtoKemn5ukpayen6ekn6Cxra2ssrSytLC1vLa7wcGyur7DwbK5usKzwL2/tbi7vb68wsfEwsO/v8Sgg3dwa2FmX2tvYFVZXkhOZ09UR0VKRjw9QD06Ozs4MjU1MzY5OTk7OTo6PDo3PD88PDs8ODg8OTw6Ozc4Ojo8OTg+Oj89OTg8Ojs9Ojc2NzY3ODg2NjY7Ojo7OTo7PDg1OTw6Pj5AO43ItbW9uLrBu721oJ6UnaGmurars7O7s8TQycvDx7m4ycLNwLnLubzHu7XHurXCxbG8xLq1rre+uq+xtK2hhIeHgn16dnRvbWtqanFpXmBdXFxcXmBfYWNiYGBgYF1cW1xcWFlYWFhWWFteX2RjYmVnZ2dqbW+Inamgl5WaoZabopiWjZ6hoqabn5+jpaGnnpuim5+qsK2xtaKpqqmrq6S0ua23sKyyta6yta6wqp+dnqOisqSmqbitoqamn6isqpmfoJ6ZnZ+lmpqjnJudr6mrp6qrrK2wsrivuLm7sLa7u7qrsrK5sr20trGxtbS/tr3AvcPBuru9l4N6cmtfZV5kZFhUWF1JV1xLUEdJSUZBPD8/QDs/PDA0NTM1Ojs5Ozg5OTw8Nz4/Oz07Ozg4PDg5ODw3ODo7Ozo7Pzo9Ozc4PDo9PDc0Nzc2NzU3NDY2Ozc5Ojs6ODo5ODo7OTo8PzuJyba4vru3wcHBtKSkmZqkpsCyr7astLfG0MjJwce8vMXEz7+7ybq6wbq0xLezwMCywMK7q6izuLWmr7CmioaIgHlzbnBua2JeYmZmXF1eXV1dXF1fYGFiY2NiYV9cW1taWllYWFdXV1hYWFpeYmRkZWZmaGlrco2onZSUlJuYm6GWlpGcoaKonZudpaahpZygoJqYra6trrKgpaKtq6ahtLCxsayor7KnurOmtqGinpujoa2joam1qqKjpp2lpqOWmJ6XmZqdn5qXnZycnKyhq6ajpKatq7OzqrSwsqqyubSvqa+ysrK3s66prK6yuLC6trm9v7eysZSFeXVlXmVeW1lWU1pVS1tRTElFSEtJQj0/QUFAQToyNDUyNDk5ODk7OTo9PDY9Pzs8Pjs3Ozs3Nzc+Njo+Ozo4Oj07PD06Ozw6PTs4Nzk3NDY1NTQ2Nzg1Ojo4Ojk5PDg3Ojg5PkA6gci9t72/tr68v7KdpaOYpbHCtba9rbS4ws3Ix8HGuMLByM+4wsa/tby8tsK5tb2/tLm9uaikr7mvpa+smX2EhYB5cHJ0cWhlZGhlY1xcW1tdXVxbXmBhXl9fYF5cW1pcWllYVldXVlhYWFhWV2FkZWNkZWRkaGp2opyUlI+Ulpefl5mUmJ+eoZyWoaGoo5+eqZyamqqmr7Crm6Ojt6qgn66otqmmp62wo7ewpLefopuYmKqmoZqsuLCioaScoqCgk5WhlJWWm5iXlpeclZ+pnamjoZ2jqqqwrqi0q6qmrbKwpaqusrGvsK6vpqensq6xtK+8tLq3rqOUgXl1ZF5hVllXU1JUS01eTFBLR0dMTEU8QD48Qjw7NzY1MzQ5ODg5OTo5Pjo4Pj47PTw8Nz49Njc2PTc7PTs5Nzk7Ozw+OTk6Ozo4Njc2NTQ1MzEwNDU2Nzk6ODo5Ojo3Ojs5OT1AOnbAvLS5wrG+uL2unaeno6q7wL3Aua60uMLNycbDxL7HucnNtMPEw7C+v7i/wLm+v7i4u7Wlpa65pKafooiAfXlyam1ydHBoaGVkZ2JcXFpZWlxcXF1eXVxbXF5cW1xZW1taWFZXV1ZXWFdXV1VbY2NiYmNiY2RmaoGWk5WLkZSTm5mclpaboJyflaCfpqWkpqeenJ+ln6qvpp+io7aooKGiqLShpaekr6Wwray1nqCdlZSpoaKUrLGxnqKjnZ2Ym5OLoZSRk5eYkpeXmJadppumoaKZo6Wlq6SlsKelo6urraaorq+uq6iqqbOlpquvtLGuvLWxr6+gknp2cmRhXFpdWE5MUkhSYU1WUE9KTU9FQkQ/OT02OTo3NjQ1OTk7OTg4Nzs4OT0+Oz47PDY5Ojc7Njs3Ozs6ODU6Ozo7OzY8Ozg4NDY4NjMzMjEuLzI1NTY7Ojg7Nzg3Njw7Ojs7QTh4u7uxtb2wu7G4rJ6kp623u7zBxbqxubXFysvBxMfHyLfHxbTEwciuubrBu8G/wLy6tri0pKWvs5ufh5eIgHdvZGJnaWlmZ2lnam1gXVxbWlpaWlxdXFtcXl9cWllbWVlaW1dVWFdUVFdWU1RSVWBgX2BhX2BhY2RpgZOTiJCOlJKTnJSVlqOZoJacoKWhraWko6KjoZuqq6WZnqWxqaCgnaWrnqehnqytqaiuraKhopSXo5uckKuosJufop+el5mTip6RjZKTlZCYmJOboaKcpKChlaChpKabo6uloqSqpKuupa2xqaalpqa0pqmorbO1tLm6r6qsnotycG9gW1dWVVFGUU9IWlxPUklUS1NMRUdJQzg7Oz08ODY2Nzo5Ozo5NzY5Nzc6Ozo9PDw2Ozw4PjU5ODo4ODY1OTo7PDk3Pzw5Njc4NDUyMTIxLi4xNDI2Ojg2OTg1OTg5ODk7OUA5e7W0rbS7srCssq2dp6evubmzwMi6tcCvxsnNu8LLzci3y7+zwMbLr7S8xrrAxcK8vbW4s6OorqyaloSNg3x1ampqbGhqbG1ram1lXVxcW1tcWlhaXVtbXmBgXFhYWllYV1hXVFZWVVRVVVJTT1FZXVxdXV5eX19iZG2Oj4SRhpCRjpmTlJKcmqKcm6CnqKqoqqaopaOYpK6klJmlr6mfm5mboJ6vmZuqs5+lpp+jo6GUk5uWlpKoqq2anJ+hoJqUkIyZjouQjJKMlpSQnqGgo5ybopWboKKgmKKoo6Koq6Crr6Stt6WjpKKsraqoq66yt7K9tbOrr5iDc3NoW1hYUlVSRVhMUVtZTVVOUExQUUlOSUI8Pz9BPzw2NTc5OTw8OTg3Ojc5Ojs8PT47Nzs7Oj02Nzo7ODk3Njk4OTo2Oj05OTU3NzU3MTE0MS0rLzQzNDk4ODo6ODo6NzQ4PTg/OX6zrqiztq6pqK+tm6morLe2rLzKu7a/rMzHxrnCz9DItca9ub7Fy7Svu8O7wcPCvL+xtq2kqKypm5ODgXd4b25pbm5ucGhnaWdkXVpbW1tbXFtZWltcXF5fX1xYWFlYV1hXVlVUU1VWVVVUU05QUVlaWlpdXFxeX2Bkfo2Bi36MkIqSjZeRl5mioJufqqmmrqqnr6OnmZ+soJWWpKinnZeQj5qerpaXp6qZn5yUpaGekpCTkpOVp6ulmpmZnZ2WjYyMlIaIjYOQi5KUkKCeoKOXlZ+VmqCinZObpaWnqKigsbCmsLynn6OstKqup7C0sLm1wLGtsauQfXFyYlZUVk5SSUdWUVJSTExYTUpMTlJHTUtBQ0ZEQz5ANzU4ODk7OTo3Ojo3PD06O0A+Ojk7OTo/NzU5Ojk4NzY5NTg3Nzk7ODU1NzY2NjEzMjAtKi4xMDI4Nzc7OTk7ODk0ODs4QDh/s62msbeqpqKwq52qp6mysaS2xrS5urPLxrq7wsvRzLO4ur7AxMa1s7a8sbm6wry/r7GrrqutqJmehWtnbW5yb3FrcGtkZmdlXlpZWllaWlpbWlpaXFxdXFpYWFhZWVdYV1VVVFJTVVNWVVJOTk5SV1hZWVlZXFxdYWqAen92iY2HkIqYiZSUl5uZnaian6mlpKqdp5igpZuSj56impeWhYSSmqOPk6KclZaVh6KampOLjouQmaSonJWVl5uQkoeUjoyBi42AkIqSkpGhmp+ilZSYmJWipZmMmKSmqKahoLSyp7K3oZ2it6ypraSysqa1u7Wrq7GjiHhxbF1OUFFMT0NNTk5QS0ZOTkpKTk1RSU1KQUdLSEdDPTg1ODg4OTo7Njk6Njg7OTk+PDg6Pjk7Pzg3ODk6ODg2ODU3Njg4OTc0NTc3ODIwMzAxKyktLzEyNzc2Ojk5OTk4NDk4OEE3d7anpLawpKejqaWgqaWks6qissO1tbKzx8a4u8TKzce1r7u/t7rDsrGttaGrtMG4uayoqbGsrJyTo3teYGdzcXZxam5pZWhoal9YWFhYWFlZWVpaWVtbXFxZWFhXWVlYVVZSU1JQUVRRU1VRTU1LTFNXV1ZYWFlYW11hb3N2cYWIgoiAkYOOipSRk52gj5qboqGjmKSWoZuVjYeYmoxzjYJ9jZeWhZCZkJOOjnuZjpyMgop/ipifop6Qk5iWhI6Ck35+dImOepCGkpCQnZqZmpCVkJ2OoqOOiZqgoaOjm6K0r6yvrJ+ZpbimpbChsK6csLuqqa+qmYF2cmJVTVJPUE1DU05MUU1CUFFISU5TTUhKSkNKTEZLSjw3NDk4ODg7OzY5Ozc6PDk6Ojs3OT85PkA3OTo8ODk3NjQ0NDU4NzQzMTI1ODUvMDEwMikoLC0xMTc2NDc4OTo6NjU6ODdBN3e3oqO0qKWmqKOmpaamprOnpbTBuK+0sMrFuLrBz8a/tK68w66wxrCspqqUoqy9tq6unaWqqqiTkZ5wV1dgaGdpaGluY2ppZ2JcWFdYWFhZWVlZWVlaW1tbWVlZVldXV1NUUE5QTk9PUFNUUk1NSkhOU1NTVFVVV1lbXWlscm1/hXx0Tlhyj4KXho2cl4uTkJ+XnZWUlpSOlol/k4lfO1dve4uUiYCLkoyPhYZzioSWgXmCeoWTnZSDlo6Qj4OGfZJ4cm+FjX6JgJCNj5eZmJOKj4mch56Xh4iWnpqhoJenr6mtqKeel62zoqatmKyrmKe0oqmto5J9cm1fW05TUlZMRFRKUE1MRk5PSUVMUU1LT0pJTVBGSUk8NzU5OTk5OTo3Ojs6Pj44Oj09Njo/OD4/NTg5Ozc5Njc1MzMzNzYwLi0vMzQ0MTEwLy8oKSsrLTM4NTQ3Nzk8Ojc5Ozg2QTl5t6CjraGmpqqgp6mnoqmwqKe0wbmwtbDIw7i0vs/AurCwt8SprcispqGchZmguKulppSjoqGflIyTZ1FNUlZaWlddXmJnY19ZV1dXWFhYWVpZWFlYWVpaWllYWFZXV1VTUk5MS0hHYlxNT1JNS0hGSE5RUU1QUlRWWFpgbW9pe4J0UEJBf5WRkX2JlIyEio2ajZWVipKIhZWGeIh/YEpRbniKkYR9hI2JhX9/bn5/lHd1dXeEjZlwUY2Iiod8fniTdmh3hYh+ioiVio2QkZaLhIqIlISajIGEkpuWnpyUpKOoqaWjnpuwqqGkpJClqpahqZyipqiIdGxlXltIUVFSTUlVTVNJTEtPSUhGS05MTVRLUVFPRkhCPDc2OTo4Ojs7ODo7OD4/OTk+PTg7PDY7OzQ3ODs2Nzc1MzQ0Njk2LzMvLjEyNTIyMS8sJykrKiw0ODMzOTc5Ojk5Ojo6Oj85d7aboqedn6Guoaeopaeor62qtry2uLezwry3qLrJubaoqba3rLW/qqGakYKOmK+eoJeLnZSWko+IimNNTE5OT0xNUVdbXFpYWlVVVlZWV1lZWFhZWFhZWVlaWFhWVldVU1BNSkVAQJtrc3NJTUtERERJTk9oWU5RU1RVWm6DdHd+amldVY+JlIl0f4eBfIWMkoGSmYuPe4aPgHV/eHNudXB0jY2BeX2KqoV5emh2e45wcm14gYqMknh6gHuAdnNykndndYSEhIR6lYmIioyKgH+Ei4x/lIN7gI+YlZyVkZ+dqZ6foJ2gqaWfnZiMp6SToJ+Wnp6kf3FnYFxcSlZPUkdLWFJPSk1NUkpKSk1QSExRTFJUTUVIQTw3Nzs5OT49Ojs8OThAPzo6Pj03PT03OTkzNzc5NTY3NTI1MjU3Mi8yLiwvLzIwMC8tKygoKS4xMjcyMTk4Nzk4Nzc1Ojw7N3aumKOhmJyftKmvqaWtrLCxqr20sru4tru1sqC3u7OrnZ6tqqu0sqSdlZGXhJKilZuKgZWHjYiEhYFkS0lJSEdGSEhQVFRUV1dTVFVVVVZXV1dYWFhYWFhYWVlXV1VWVVNQS0Y+OTNOPH6eTUhKREA9QURqlH5MT1FSU1ZedYN9eWd3jZeYjo99Z3mBdniAiY98hJiSgXKHj3x2e29rfq18c5CKf3uGkoF9f3RmdnyFbG9oc3yJjIeAbHlxfXBtdY9xaHGAfY5wQ4qEgoOFfnd3eouFfYt6dX6Oko+YipKam6OWmZ2anZ6inZaNiqWbj56XjpaYj3ZtbGViWldXVFFKU1VUT1BOUVZLTktOT0pRTkhOT0tGRDw7Nzk7Ojo/PTk8Ojk5Pz87ODw9Nzw5OTk5MjY2ODU2NjMzNjIxMjI0LiwsLS4uLTAtKyonJyouMTM2Mi84NzY5NjY1Mjc5OTV5ppefn5agpq+srquoqbGvsau8uKy7vrmzraibsaetnJCWnaerpqOanJKHlH2NlJGTf3qIeIOAfX5/ZEpGR0ZBQENESUxMTVFSUFFTVVRUVVZXV1dYV1hZWVlZWVlWVlRTUUtENzhmNzA/qGlOSEM9OzpEioV6WkpOUFFUWF5lcHJtiKeqwH51eWJ7eG58eYiQeXyLhW9tjJF4c3hqaoCCcpaRi4F9loBJkphuaHh+gWxpY2x5hZCShmtzbHxucnuGaG1wfnONiISFen1+e3ZvdHOFgnmBd3B8joyKk4OWl5iakJOVlpmXnpeMg4mfkYqSjYaQln5taG1ubldVV1RSUVlPUlVVU1hVTU5ITkpNTktDSE5HRUA6ODk7OTk6Pjw5PDs6Oj0+Ojg6Ozk/ODY4NzI3NTc1NTQxNDQyLzAyNCorKiotListKigqKCcsLTEyNTAsNTU2NzQ4NUhBODk1d5mRm5manqWtsKKsqqi1r66stL+rvMK/pqKalaWYno6FjJaio5mak5aOdZB9hIqQjnx3fXN8d3R3e2ZORUdEQDw+PkFGRkdLS0tNUFJSUlRUVFRWVldXWFlaWVlaV1ZUU1BMRTFAmjMganNDmW87PDk1PICChl9JTU9PUldaUllcYKeIYpppdHplfnBtf3qLiXaBiIZ0bJqRdHN7amudj015hZKJhI5nMXaGc2x+fYN0ZmV0foSDhYBmaWx1a3B/fGdwcHtuko2Oe3N9fHFwbnVtgn53eXRpeYmCiImDlpOSkIuNkZSUj5eOgHmIl4iGiYaAkId1aWluZ2RXUVpXWVlbTVBVVllZTklIRUpKSEdCQUZEQ0c9OTk4Ozk6OTw6OTs6OjpAPDk6PDk4Pjc4NzcxNTI0NDUzMzY0NTAzMS4qKispLCwrKykoKycpLCwyMjYsKzU3NzU0NzhpTzg7NW6SiJmRmpakqK6esp+muq6rsrDCsbvDx5uWj5WZi42GeoWRmZWPkY2SiXOIhHeKj4x/dnd1d3ZveHNpVEZJRD88Ozk6P0BBRERFR0pMT1FRUVFSU1RVVlZYWlpZWFZVVFNQS0U4MC9cYLNHOVhQOzk0NDGWuotITE1PUFFWTEFJUUlir7OgcXx4bX1scoOBhYF6hIaGeXKglXR4gHN1lIc1cZ2onY6hoYSihHZwhnyGfHOMrY2IgGhmYmlucm1wg3Vpb1h1b46aknZsf3t8bXFtcH96c3ZtYnaEf4aAhZCRiouKkouRjIuPg3V4i4+AfoOBfo95cG9ual5aXF1bWVhgX1NOW1pZWExISkVKRz9DQUJHPkNEPTs5Nz07Ojs7OTo5OTs6Pzw4OD06ODs2NjY1MTEyMTM1MzQ3NTUzMS4vLCwrKSopKSoqKikoKikrLzNETTIxNjY2NDM8dlI3PTdikoGSiJaRnaSnnq+VpbWprbGuwbK7wcaXkIyUkIGJfW6CkZKJhIuIkId2g4Vul4qMf3l6e3F7dHxrb15KUEc+QDc0NDg7Ozw9PkBCRUlMTExNTlBRUlVVVldYWVhWVVRTUExFPDUqnUtbQC1nSTk0Lz+Sg6muX0dMTU5QTDdDTVJTREqGdoB8fHZ+bXeIiHx9hYN/jH52opl5foaBhJmEm5xhhqqfnYqCkI16doh+iYiNc4qXj4N7XGRxdHp7d4psZ2lheG+Fj4J6boF3dIR6cHN5d2tuaV13h32HfIiHj4CLk5eDjYWNh31xhH+EfHV3e32JdW5xcmVmX1taXVNbZl5XUVVYXFZHSktETEc/RkBEQz5BQT06OTc8Ozs9PDo6OTk7Oz0+Nzk+OTk4Njc1NDI0NDAwNDY0NTY1NC0sKSsoJycnJigoKSkoKCsrKy8wMFVxPDIzMzMxRX5XND05XIx4ioCUjJGdnZ+mkaCroLGor8CxusW6lo6RlIh6hXZrgIySg36LhJCOeYOCdKKGjX9/goFzg4F9bHpsU1dMQEUyMTEyNjc2ODg6PD9CRUdGR0pLTU9QUVNUVVdWVlZUU1BNRkA6Mj0gI5ZjjFs1MzExaT9Hb0lGSUxNT1JMS1RdWVJKaYSIe4l5fHF8j4x6fImGfpeHdqGZiIePkpSljaypSIaur6+LgYCTioKLgYSRqIeAmJiKnHNsfIGGh32OaGdneH5uhYaChXGEhUdrgHdxeXZobWtfdn2DiH+IhYx6lZ6ciouIkX97dYt2fHdtb3d+f3JxcGpaXFxbY2NYZ2VcVVBQV1lQRExMRk9JQ0ZDQ0FAQ0E9OTc4Ojo6Ozs6ODg4Ojo/PjY7Pjc1ODU3NzMzNDQyMzY2NTY3Njg7REZMTU1MQzcrIiUnKykrKywvMDArbnUyMjQyMEyBXDU9PF6EdHx+ioWIkY+WmJKXoJ2soaa4r7O9s5eNkouYi310cH+Jk399jIOTlX2Gf4eliImBg4iGeYiLf3WGeV9jVktCNjAuLzIzMTIzNjY4Oj0/P0JFR0hKTE5RU1RVVFRWVVNRT0dDPzgwLCOHWz4/ODQuXZZwc6NVRklLTU5QV2BZcFpcXmqNk4eVgYSChZGTfoWJkYGalYKhoZeVm5qlrZOau7Gnu8fDqIuMoaWOk4mBkHtyg52fkZx+doWFio+HkGlob4OAdIyGhItxhoJ3h4B7doV9bnZ1Z4CUj4aJiIeIh6GropaJjph/e4KJenpvZ2t4fXh8cWljXVpZXWlcYGZfWk9MTlhSUUlQS0ROR0NLRENBRERBPDo4Nz08Ojw6ODg3Nzg6PT04PD02ODY1NjYyMzQ0NDU3Njg2NzxCQj88ODo+Q1FeZVxHMicmLCwtLS4xKD+MWy4zMTBPg180PztudXBneIN7gIyAgZCPi5qapJyhrKarr7CXkZGEoZSEeHeAjJR9f5KGk5Z/ioCSm46EgYKMi4KKjoSAioBscGpdQ0E0LS0vLy4vMDIyMzQ3Nzk7PT9CREhKT1FSU1JTVFRSUE9IREI8ODcvOUQ+PDw2My5sk5dNUEhJS0tLTlZgY39nZ211nZuPmpOTi42OmoiTj52LoKCSo6qlo6yTqLaiqMHDrseveLqUmnyMoZ6YhJKFgo+hn5OYkoSKhY+YkZZscHWJi4GVjI2Pdo+EcWyFgYqWkoOFiHKJoZaGk4qPj5altambjZWig4eThH5/a2prfH5+gHFfXGJeWWZqXGtrXlhLSE9TUU5NTEZJUERETkZCQ0VHQj45OTc9PDo7Ojk4Nzc2Nzs6Nj06Nzg1NDU2MzQ1NTY2NjY4NTU2MzEwLiosLCkoKS46UGFcQCwoLSsrMCwncog3MjQwT4RiM0A8dW5nWXCDcHWHcXaRhn6XlpqUn5+cp6CqlpOYnmdlpJp+hZOReYCRiZGSfYqFmZKRg4CAi42JhpGHhIiFeHh/Z01SPi8uLiwvLi0vMDAwMjEyNDU3Oz9DRk5QUlRQUVJTUU5QSUVEPjs8OkNGPz48NzUyPD9SNUhISExMTU5SXm+KfHOBfaCdm6imopmhl6KVnJ+onqmrn6isqaq1l6u/q7bIyLfJ0c++m6Bwaaupn4STkoWcoZqamaeRkYiVopqad3p+lJeRoZKWl4GUnnt2lZKrs4mNl6B9lJ6cjpOWmaSiprawnZGZqIiXkI6BiGxzc3t9em9mXltfXmBmY2BnZlxSRUtLUE9JSkxGRk1DR01GRkNCR0RBOjg1PDw4OTk5NzU2NTg+NzU9ODQ3NDU3NTQ1MzY5NTg6NjE2ODYzLzAuLSosLy4tJyMqO1hiQigqLDEtKEuXXjA2M1GFZjJBQGlhXlBxdWBufWF3jn18lI6Oip+Sl56WnKqYnqpCRH2HiYeYjXiCjYuOjXuKho+QjoKDgImMioWThYOGiIGAh3dfYlA0NjAtMS8sLjAwLi8uLjAwMTU+QUFNUVJTUFJTVVNOU0xFRUA8Pj1GR0FBQDg2NjI8OTtGSEdJSU1PUVlthpB3lYujp6q1vbilrqysp6i0rLG3srKtu7GzvpyzxKy7ycu4xL+4paOwsqytqqOLlpiFpqagopeCppmNoqqopIeFk6OgoKqgpKmOnLGLlaOnt7uboKOwk6Odo56RpKKrr62ztaKVpaqJmoqTipV6e36DfGVfZltkYF1iY15mZl9bT0RKSFRPRkhMRktHRUZIQUtGQ0ZGQTo4Nz08ODg6OTc0NjU4PDU0PDc2OjQ0NjQ0NzM5PDM4PDIwMjU1MS8xLi0qKi8sLSooKiYlNVhYLywwLCwwhIE4NzFQhWg1QUNbWFRMaWNYanBYeoV2gZSFiIKbg5KQjZPayJ2Wc1aXiI+InI98hoyPiop6iIKHkY6DhYCLhYWIkoaChImGh4eHcW5hQEU2NDwyLzExMC0sKy0xLy00P0RBTVVRUlRVVVdVTVtQR0dEPD4+RkhDREA3Ozw1Qzs9RktJR0hST1BXgZOghK6js6qywcjEq7PFtqyzwLO4vra/tMG2u7ukuMaptsnHtr65tKijtK2wsZuZkpqfiKevqqSUdp+kl6GrsbOYlqmtqK61u7K6rK+1orGssbW8t7WutaCnp6Oom6mwrbK6uLinnLepjaWPkpOghnmBgXNXYGJUZWBgYl9fZV9bVElERUxWUUlKSkRKSEVBQEBLREJNRjw4Njc7PDk3Ojk4NjU1NTcxMTw4ODk1NDY2NDk3Pj0zODkxLjAxMjExMzAsKiwuLCsrKyooJyopRVowMCovK2iSTzYwUodqNkFFV1FKTFtaUWJkV3p1cYGUfYSGk3aGfoCMe7+7o7yCtJSTjpuPhIiPk4mJeYeAjJOMh4WBjn+BiY+Gf4WIhYqHkXp5bl1WQEVOPDY6NDZBQjc2NC8vNkNIQ1FbT1FVV1VcV09fVUlLSkFAP0dLRkVDOz5AN0Q3P0JKSkVHV1RQXo+lraOxtMO2uMHMyra7xL2ztMG3uMK1v7C3dLG0prrFpLDGubGzsbSopLW2qrGgopabopGlsa2lraunpJigrLO6oqiyubW7vsy/xcW9vbPCt7q4v7e6t7mtrbGmsaqtvrC9u8LCrJm7qJWtj5iYqol+gHppVmFfV2ljaWRVW2NZVlRJSEdMUUdESUpBSEQ+P0JCS0BATUQ5OTY2OTo/Njo5OTY2MjQ2LzE5NTk5MzY0NjI3Oz0/NjoxLi81ODo5NjUwKigsLS0tLCwqKCgrKyhFUy8qMDBKj2s1MlCHbTY/RlFMQUxSV1RZVlp3anB/j4SBjoVuenJ4h2K4oZqjiZWUlpOUk42Ql5KHh3uHgY2VioCEgYp6fIuHhn2KgoGLhJV9eHp1ZU9cZEdFTDpRZGFbXlNGPjtIUERaZFFRWVhaZ1pUYGFNU09FQT9JSkhFRkFAQz1FNkI+SEdLTVNaVF6Ur7i1urnJwLu9ysy7vcC7uLW8vLe+tbqyxmB1sqWxmp6rvqqlqKuqpKKytaCrqJ6Vlp6Yn66lp6aln6SToqews6iysry2wb3TycnTxsLFzMLKw8C+vb+7vLe0sLm3t8O6xr7DybCeuqqirI+lqLaJgH1vXWBfXFVgXWhlUlhhVlJWSUVGTUtAPkhEPUtCPUJAPUY+O0hANzk2Mzc5PjQ4OTo1NzA0NS8yNjM4OTM3NDUyNj84QD5HS1JUVFJQT1FSUUpBOS8sLCwqKygoLC0sL1A+KC40OIB9PDJLiHE5PkNLRUBJTVBSTFFdZ21scZCNhZBzbHNyc4jVwLWZoI2VmZqRjpeRlpaOhod9h4ONlot/g3+DeHuLhId7i3mBioKXf3R9emxlcHZZXVxQZWViYGVkXVtYV1xNZG1VUm1uX29fWGdlVVlUSkRBS0tIRkhISEhCSTlEP0hLVFRWXVpck7nAub23xsC7ucrLu7e6tri5s7i1ta62tplkdamerXBeoq2cmKGim6Seq6WUn5+QlI+WmJeon6WfnpqZg6SdrKSqsK23sLy41NDO1s/JzNLMz87Kx8C/wsq9wb3CwMXExsq/yc+0pLuxtbCbrLm9mn13aVteWlhbX1hhYlFbYFNRS0NCRUZFPEBGPkJJQkBEPTpFPj1KPzQ3NTM1Oz00Njg5NzcwMjIvMjQxNjk3NzU1NTVEM0VMTT41MTAwMDY6NDc3QElPSjstJioqKC0uLyxATSsvNTRtiUkwSIl0Pz5CREBDREZLT0RSXFlpYG+XkpGUbmxvdHWHs6yhoZ+LmZyZjY2VkZuShYqKf4iHjJCMiXyBg3N7ioOFe4p0goqGlX9ze3lsbXV8aXNlaWxpZmppaWBmaWhtWm10l62kvIeHZ1tvaF1aWVRISk5QSktRTFRRSExBSkdLUF9fYmdqYpe3x7C5s7u+trHEx7awubGwu6yzsaert6yNtqeenKeaTpqejY6glpGnmKWVipOTiJGJj5GRnZuhmJuVloeemaaarK+or6ezs9PU1NbRy8/T1M7Tz8zGw8rQv8rJy8nSyM3Nw9HSuK/EvMS6pre7xKJ/bGFaW1xXX1dYZFlPXFdOUUNCSUVDSTtBRD5BSD8/Qjg7RD5AST00NjY1NTs6Njg3NjU0LzEwMTQ2Mjc4ODc1MzY3QzVCOD8tMCwxMzQ4PTk3LC4sMTtGTD0pLCguMDAwN0s/LTQ2VIhXMESHd0M7Qj5FQkFDSk0/VVlTZldzkJCZg2hxb3l5g6CqnqaXjZubmIuNlZGajn2JjIWOioqLkIh8hIJwf4eBhnuHcoORi49+cXl1bHB4f3J7bnhzbGmAcG1jaW1weWl3fX7Lv8Lfp21jeG9kW2FgSlBSVU5ZXlBdXU5QTlRRVVRcbm53g3KWrristKiwtqutvcGxq7WmpbmnrK6hrLSkj7Gum5iYjJGUkYSPm4GNp5GciYOLhIqJhIqDk5WYl5SbkZuYmZmenquspKehrKzO0tXRzczS09PQ1NHOyMPU0cjO0tPT1s3S0cXS1sbBz8jIw6m/uNCcd2xjW2BbVV5RXFpPT1RQTkg+QUdCQ0Y8QUI/RkU+QD86PT09PEpBNDU0NjU8ODg4NjY0NDEyLzAzNTI2NzY4NTMzOz08RT1AMTErLzM0OT81OTAxMDIyLTJFTzMpLzMuMzI9TjI0OEN9XzJBhnREOj09ST5AQ0ZIPFZSTU9bdYeGi3dtd3B9foChnp6hi42Zk5OMjJOQloV5hZCQjouKiJGHf4J7cn6Agod6hXaFk5GJgHB3c2xzfHx3fHOCeHFrgHJyaW9xenlze77Lmn6MsYN2coV3aGFqXUNaWltXZmRYZWtUWF1dYGNeY3h7f4uBmaqkpKKgoainqrG5q6a0o6KuoqSuoqexn4mmm5WTkYqSj4iClIlrlaKNmYSBhn6Rg4OTl62LlY2VmY6FkpCdl6ewoqCgpKSox83Px8HL0NPR1NLO083G1tPM1NjW1tjV19XJ1NrNytjW0cqtxMPMiXBtYF5dVlJXUVtPSkdKSUpAOzo7RUNEPENEPkhDP0NCOzs5PDlHQzQ2NTQ0PDU2ODc1NDMyNTAvMjU0Njc0NTU0NDw+PUU/QTYyLy0xNjs9MDgxLzI1NC8tLjtSMDE3LzUzMkVEMjg+bmI1PYF0TTk5QEk8QUQ/QTtQTEZLWXCAdX5pc3lygomBnZWelIWLlomOioiOiI+AeIOUmYuNiIiLiX6DeHN7fYOHd4B7h5GXgYRveHBtdX92eH10hnx5bId2dW59doR1eXudtYw8QYrGpX6NfGplV0lDZWNmY2hqZG95W19maGtuaW6AhIiRjJ6foJ6Rl5ifpKSmsqSls6CipZ6hqaCisZyHn5KSk5GLjouGg4+EfpycjI2ChIV6lH6CqpWjjJKKmJKLfZeKmpGrs5iam6ecp73Dxbm2xc3R0NHPy9LLydTO0dXa19fY1NnYzdjbzsna2tLWv8zNtHV0bGJbWFFTUFhVRUZKSUVFPTo3OkBBQjpHRUBFREJEQTs/Ozs3REM3NTY1NTswNjg5NDQzMzQxMDE0NTU4NzQ0NDQ5QD5EQkM8MzMuNkZUV09RSkFKRj8xKiguQlQyOTI1NC83Szc1PGBiQTxzdlY4N0FIOj9DPjw5UUVDSlRsbm9wYnFxc4aNfJeRnYt+h5KCiYaFioOIfXmFl5eJj4OHhod6hHlxenuEhnV6ho6NnXqMcH1vcHp/cnuAcYSHgG6OenV3fXyCdX98h4mwdFmqwreNkoFwbmM9XmhycHFwbnh3gmVpb3J1eHJ7i4eOk5KblqCWiIyTm6Cbn6qfoaycopqan6afn6yZjJqMkZKOhX2Ih4OFi46gmZOIg4d+bZl5hJmGiJOMjpWMhnubiJOPrqqUlZeemKautbyorb3Gy8jJy8vPycPSytTW2NfY19Tb19PZ29bP29rR1sjVzJN2eGZlWVhOUVJcR0JFSUk+QT49ODo9Pzs+SD1AQkFBREE+Pzo4N0RCNzU1NDc5LjU2NjQzNTUzMjMyMzY0NzU1MzQ1N0VCRENFQjU2PEZOU01bbmZjbnNrYFY+LDRMRzg2NTQzM0JGND1XX2hMdXheODs/Rjw8Qjw6OUQ/Q0dSa19tZGJma3aAiHGRkJuAeYCOfoOCgoV/hHx9hJiOh4t+hoeAd4J5bnt7hoJ0epKejaF2j3aDdHWBfXSAhG+CkIJvkoR1fIGFenaHfIm4xqXDyriClpyPeHBlTmVjgnqBd4aikIt5eXd7g398hHZtlJaUlY+YkYOJj5eal5emnJigl5+TkpejnZmrlpGRi46Sg4yFiYiBhpCRnpyZiYWLgYWXe4iJn5eQiY2Ki4J8oYiQi7yhmJOXmZyopaWtnqe1vsC/uMfJzc7FzcrR1tXU2dXX29TX2drb19va2djO3MaFeHZkZmJdUlZVVExLRE1EOz09PDk6PD45PkE3Pj9APUA+PDk4NjdDQTY0NTU9ODA2NjU1NDc3NDU2MTM4NTQ1NjQ1NTdISD1ESkU3OTI1O0g+Ozo6N0hQXFpSVVhLOVQ+Ozk1MzI3STg9TllNSHh4ZDU9PkM9PEA6Njo+PkBFUV9ZZmFdW2h0enlsiY2Sd3Z6inx+gH+AfYV7foKRioWGeoWIe3V9dW19fYZ+dH+SnZGfg5J8hn14j355i4pvg5uAdJmGfYKKhXx+kXuQqY6Qw6C9jJuknH6KhH2JcoyLf3OmmpyZlIV7j5GJhGlHcaGknYyLkJKFiIuRk5WPnZuTlJGXjYyVn52UoZSSjo6QjH6Qj46LhIiSlpqfn4mMlJGdkIKMf6aZiIWOg4WEgKSGiou4mJ2RlJahpqCdnZ2jrra6tKu/xcrQyMfMz9PS0tjS1dfA19jZ29ja2tnZ19u3d3Z1aGdjVF5ZUk9OSENMQz09Pjk5Ozo5OTw9NkA+Pj09OTo6OzM3REA4Mzc4PjcwNjg4MzU3PDM3ODA0OTc2NzU1NTQ2RlA1RE5JODkzOEFLPTszQ0BJPDlEV048TVRITj85NjMzMz5DO1tYPjVZeXBaPDxBPD0+ODU4OT88RFJTUlheVVhmbW1taYGOinFzeIp7e399gHyIe317i4eDfnWDhnpzenRtgX6EfXeGm6GbnpSSgIyHf5iHgJySboiphXqgi3yRjoOJhJx+mpGJjaOin5Ckr6CLkYuGi4GShldyrYufrJyPg5ickJCOW4OikYKNn5OVjIaIjJKTjJSVlZCMj4qIlpudj5WWkYuTlIaAi4mSjYqKnZeZo6KGk52VoIqKiI6ckIOIj4CDh4WkhYuQs5ickpSXoaGemZKbnaexuKykvMHHzcfGz8zPzM/Xz9HUrtbV2NrY2trX1tnZnW16cmRkWlpWUVVWQ0BJRD8/Pjo0OTo7Nzo7OjM8PD89Pjc7OToxOkc9OjI3PUA1MDY3NzI1NT82NTs1NTg1ODo1NzczNUhSN0dPSzk5ND1FSkI+MUZDTEE5ODpHWEA1SFdJNjYyMjM6RUNlWD8mX3lpX3o+Pjk8Ozk4OjtAO0JRS0tTWVBUY2J4bGJ+koNvbXeLeHp/e4F9hnx7doaFgHNwhYJ7dXd2dISDhX1/kqain6ail4qdkJSXioqnl3KKso2Ep5KEmZSFmoyjlqCYk4mbnqKTqbCgkZWQjo6IlYtujbeEmsTIspyipZudmJaRsZBkpM3IlY6Gh4mQko6Nk5SKhYqKhpaam4+QlJOHlZiEf4+LmYiOkKqXl6SiiJmelZqJj4aXmIqFj42Bf4aPpYiNk6ial5OXmaGYn5mTnJqisrSlo7zBvsfFxcnIycLK08zN1KjS0dbW1tja1NPazoBwfGVgW1xcTUlTWEFCR0Q7QT44Mzc7PDo4PTY0Ojo8OjcyPzk5MjlJOj42N0JDMzI6OTYyNjQ+PTQ7PjY5NDk7NTc5NDRLUTxKUUs5QTdCR0lANjRKRUxGPjs4OEVUQTc+XDg2MjE0OjtFYFhBRmF0aExjWj41Ozo6NTs6PTpFTUZIUldTUkJjgkd2gY99fG1+iHh6fnuCgoN/dnaAg3xtbot/enx4eHyEh4p+i6Ozp6Oqs6KXp5+lpJaVrqKDkbiVkbOajKGhjKWbsKOknZiRp5aomayvpJiVlpWQi5iZl6HAjqPJuaubo6atmZKbnbKdhYWoopyYhYmJjpWNi5OPiIGGh4mTmJWMi5SThpWYhoSRkJx1kZiylpakoYedmpKPipCKl5uJi5aOh32MmJ6JkJCcmpmTmJefk6CdlJ6boLGuoqS3vrTFx8S9w8O/xs3KydKmzs3T0tHW2NPQ2Lpwd3NaXlNeVE9ISU1FQkNENT46Nzc6Pzw8Nz00MzY2OTc3ND01OzU8TDw+OzxCQTc1PDs0Mjc3P0A2P0A3ODQ5ODc7PDU1T01EUFJMOEA9RUFHQTU6SkVORUQ6NkFAQlM+OURPMzIzNTc1PXZcPFJcdGlaTV1TPD04ODU2Nz06SkZER05bXFlKZmA7SISLenpuhYZ6fIR5gYaBfnB4fH59b3KNen6CfHiGi4mGhJKnu6yosr2vpa2zs6ijobCsipq1naK4pZWtpJeprbinpaOfmqmXqaOusKqamZyUlZGXn5eau7uuyqFqtrirsJSZn6Osk5e9o16qsoOKio2Uh5B8jo59g4aOj5SViIiSloyQlY2LjZaYk52ZtJeVq52KnJSSjpGSjJmbipKekIuJlZ+hjZSNmJqdkpyYnpShoJScnaWvqKGls7irwsjEtbq9u8XHx8LRoMbJzc3F19bRy9OgbnhmWlhRXFBORUM+PENBQjg/ODg1P0c9PDY8MzUzNDU0NTRCMzk6Qk06QjtBSEI7OkA8NzQ2PEI5P0BCODc0Ojo2Pjw0N1RLQ1VRSjc8OklBREA0QUpITkJBPzZEQTxKTkQvVD0yNTQ6RUpcWEpaUW1ncHBEaWBLSTY3NTc6PkpAQ0lQZEdiYGJwSj+Lin6Bc4aHfYKJdYOKgn9tfH19f3B3h3eOgod7jY+MhoyZqsLAr73Gu7O0wLy0rauztoyos62tvaubu6Sorbm4q6emoqKkoqmvsrGrnZykmJuYl56ipqWSpLqvqcC8ra2yuaWkqH6IhpytvLCDjIyLkIOOg5GPeoGHkI2NnImIj5eNi5WWlJGal52omrGakaycjpqPko6VkJCWl46RoJGJlJukrJSWj5ScnZOhnZuYn6GUmp6npqSipLCzp8HGw6+wurbFxMK/zabHxMfDvNbRzcTKhnJwX1lXXVlMSkFLQEZHPkE/Qjs6NT5BPT01PDY+MzMzMjQyQTE3QEJOPkdAQ05DQT1DPTs4NkNDNUJJQjo4Nzg7NUI+NzlWS0RXT0Y4PTRLQEM+NEVLSE4+QUE2QkI/QlNFNThQMTQ1Ozw4O0Q+OUxqal07V1JkS2daVU83OUdEP0NGXGVHYGlnWl1ck4yLiHuHjIeDjHWGkYqBb357gX9xfoF7lXqSlJSYkJOVp7PGyb/CzMLDuce8u6+rubuYs7e6ssCupcGkq7C8vauuq6OjnqerrrSwqpygqpyhm5afsLWni6O6urbBvKypnLKlpKiUhY6pxMOkgouPh4iEhpWUjXqDjZGPkaKMjJSSjomXn5iTmZWYpqCunYyqnI6Wj5KRlZWNkJWRj6GUhpefoLKelJqUn6CYpJ+aoJuglJiepaOmpqSvrqXAxMOuqLe1ycK+ts+yxL/EvLPRysjCtHJ2allWWWhQTEhCTEtLSkFBPUNEPDVBRDs7Mz04QjMzMjI2MkEwNUlFTj5JQEhSQEg+Q0A7Pj1GQTVBVUA7OTk4PDdFPjg+VkpDV09HOD80TEBCOzVKS0NMP0I/PEJGPUFITDkrRzwzNjc0NjRBPzdPYU9hRS89PjZrbGpgQDpIPj9FQmVZTmVcZlRjapmNl4qMiJOQhol5h5SQgXKAfI1/eIeCgpB6jqGWqJqamLq9x8jJwdLJysLNvcKzrby+qLq/vbvDt6zCqayzvL6qsKqkpaSsrrOttrWgn6+fpaKYo7O9qZuovcGktrewrJOxraytl4eaqaelkYKMk6WViYF2ipF5hY2SkJ6fk4+UjI+NlKOZlpyUlKOeqp+RpZqMj4+PlZaIfI+VkpKimpWfoZy1pZCel6WjoqWenaaYnpaXm6SjqaeisqyovMDEr6Wyt8y/ua/Es7u+wbiswsPCwJdqd2BWVVpZSUpMSUZEREhDQkFETDo0REg5OzQ8N0UuMTIzNTJCMjVTSE48SkJKUUVLQ0RFOkVMQjw3RVY9Oz04OT88ST86RVVJQVdRRzdBOks6Qjc5Sk1CSUBDPjxERzxCQ089MjBIMzY2MTcwPUI6PWpqSks1UVMzU3BwZE47RD1ARj5qSF9YYVpkZFaej52Ol46ekomKf4qgk4R4hX+Vf3+QiIqQgJahma6mpJjCvcfDx8XTzc7Ny7zCt7C5vLS9y7zDwba3vK2zv7q8rq+ooKmotq2uqbK3m56toqehnqu3uKqlr7/Fsb25tKiqtbSur5eWpayooJGOkrLFp5WOfZKVfYeRmZCqmZiTk4+SlpOlnpKdmZSho6KcmJ+Yi4yPj56IWpCWl5KXpJllmKOfs6WWoZasrKmnm56ml5iWl5WgpKiln7arqrq7w7Sls7XLwLiqtqyyu7muqLi6vbiBaWxYVVNTTURKUk1LP0FIRURISEg5NUVNOz44PUBKLjMyMDI1QzU1T1ZOPExGS1JMT0hHST5JUT86OElTOzs/Nzk+RExCQEhTS0BXUEY6QT9HNkE3O0hNQ0U7Qz00RkU6QkFCRzkvOkEzNjAzPkdEOTQ9dGRNRztFKzpmfGdWOz1AQkZCcEVpSVJlYkxGpZSbl6KXqZaNkIOHppOIgoeCnIODlZCQlI+aop+vvq+hxrzExMbGzs7O0sq+u7axuru7vs+1w724ubeysbWzuLOrppyrrLmqqaivr5ijr6SnpKW1wLCsrLS+w7rAurSoubW5s6+Wpa2urqSLk5WhjXTBmn2XmYSOlpqMsZWbmpWSkpqapaOUoJuXmqmcnKGgmYqNkJacYEqWnJqVmqWWVZewn6+cnqSUr66rpZqgpZSTmJiNnKCnopm0qaqzu7u7qrCyx7+5pqurrbKyo6GysrSkbmtjWlhNT0pET09QUTtIS0lHSUNDPjpLVD9BOj1FTTA3NTQ0OkI0NE1XTzxKS09VTlFKUEhISk9CPD5NUjs+PTg6PENSPkRIUklCV05JQEJBRjM+NThKS0NBPUM7NEVBOkE/PkhANSpCNTIsPmNdZzozNXRkZUBSNyYjM31oVzs6QkNAPVFFV1NzYldGSKqXmaCiqK+ZkZiHi6iWjoiThZ+HhJ2Xjp2hm6Oktci1qca5wsPHysnIzM3Gvrqzrrm5wcHMtce6wbm1urCvr7O1p6SbqrS1qqmmrayapK6lpKisur+orLa3vsK/vrm0s8Syub2so6+1rLmmiJuXppt2v5+EmZ2Ok5mai66XoZycl5SaoKGonqefmZqqmaGnnpiQjZGdg252kqOalZ2inZCusqKqlKiql6qto6OfpKiRkZmbh5Scop6Wsaepq7m2vbOyrr65t6Cjp6ilppybrampi2BjXl5QSUtGR01JVkw9TUVOS0xCQ0Q8UVY9QUFCRE8xOD03Nz9CNzVUV04/SE5RWVNQUVVLUUpKRUFFTVE/Pz04PTtHUjxFRFFCR1lNS0FIREU6OjM5S0lCPkNCOTlDPjxAPjs7RzctMj4tMYJoTnpcLzBraGA8PUJCODZ6Zlc7Oj0uLVJgTVVIf2VeSEWrlZuhn7uvmZSfjJOrm5GSk4mrjYain4ykrZSjo7bGvrTAusLCx8jFws3Iwb65sq+4tMHCyrXFssG8tbqqqa2tsKOjmKq0u6appquqnamvp6Oqq768qK29tLi+x7y3trjBsr7BtKm1t6u+pY+il5Kin7yfiZqgmZeeno+3n6mcpaKbnKGaqKSzoZudppyoqZ6ZlY+Um4uXiYykoZSdop2gta+lpJOvq5mrqp2do6OokJSUn4KPnp6blamkoaGztLq1rai1srOenKKlmpeUmaqhnnVeWl1cSUdFRkxQSE1FR0dDU0xKQkVHQVZSREg9QUdRMTtCNzpCRjc5XFlLQUxQVFVTTVdSTlVKRUBKSk5POUNANT08TlFDPz9QP0VaTUpBS0RHQDUzPUlHPz1FQTk3QTs8QDw8M0A8Lyc7KkiRQjpTSjAsW29XNzE8Kh1CgGRUNDktMTlmXEZDQ5xwYkdFp5ekn57DrZuXpZiaqZyWm5uPqpaVp6aVrayZoqu2xMK8vrfBwsDHw7/Nxru9ubKwuLO/w8i1v7C8t7m3paSrrK2hoZqqqsWipKmrpp6sr6uiqai/uKetvrG4tse2tbm4wLK/wre1s7SvvqOXo5aUm5SuoJCho6Wjo5+QvaSpnqirnZ2gm6WfvaKZo5+iqauhnZaNlZ6TnoePhI2Tn6SgnrWspZuVsaeZr6admaqcn42YlJ6EjaCam5KlpJqYq7G1saqlqq2snJigoJKOkJWonpRmYFhfXE5IR0pNS0hFRElBPlFJQTxHSUhbUk9LPUhPVTRCRjk+SEc1Q2FaS0NOUlVXVlFYVFJVSUA4UlFQTTpHQTRDSFFTSUM7Qz5HVktDQE8+SzwwNjtHRj47RkE0NkA5Oj85OzE1RDAtLC9Ndlw0S1o1LE1uVzwtPSkeI3piUTVDS1E6bVJGPEt4ZWFWS6Kao5yexayhn6yenq6gkqOflqWfpqqsl7axo6qztsTEvb+1v8K7yMK+yse1uLW0sLO0t8HFtr6xuLW4tJ+mrKqsnZ2epaTBpJ+qraCkqa2voqaovbWlsb25trbEsrS4ur+zxMG4uK6ztbWjnaWVkZShrqCZop6oqKujmsKsqZ6srZubnZmmoL2hnaSYq6uspqKZjZqfkp+Jjld/lp+loaC4qqaTmLWjn7Ggnpqulp2NmJOdgY6fl5WOoqOWkKausqupoaGlpZWVnZiLj5GSpJ6JX2JYYl9LSEpKTkVFQUdLPj1KQjk5SkpOXVFRST1MVlw5Rkk9RE1JOEhiW0xDTFBTWVlWV09aXklBPVdRSUs/SD81SE1YU0hBOkBBRFBIPz5RPks3MDk5RkU7OEc/LjY+Nzg+NzcvMT85MSUxUVVtW0pPMTA9Z1dEMTc9LSt3YFM2U1prV3JHRTY9dWVcS06en6GZnsOopaK0op2yp5OrpaCjn62prJ27sKistrHIxcHCssLDvcbDvMTJvK+wtq2wtK++xLS5sbC5tKyZqLCpqpqdpaGowaybrLCcqqOusamkqL22p7e7vq+3xK20s8PAs8e0u7ers7atqqKmlpWUpKyin5+aqKuwr6+7sqagqaiZmZeToqS4oKGjk6+vrKWnn5KhnpWej5CNlZ6aop6ns6amjJizm6OumZ2brJCek5WTmX+RoZWPjZ+hk4umrK+lpqGcoJ6SkpqThYuRjZydf19kWmZkSklLSlJCQ0BJSDs7Rz85OU9NVV5SU0o+T15dPUhQQkxMSTlOY1xMRUxSVFlbU1VPXGJIQT9aUUFIQUtCN0ZFTEtNPztCSEROQj07TkBBMy85N0NCOTdGOys2PDQ2PDM1LS80QDErJ1Z0U2VPPzEwNGJbTTIzPjA8dl1eP1tUXmVxQDg7SJZ3ZUE0n6OgnKDDqaSqs6GktKqWs6ynoqSyrK6pu7GtsLW0xsDEw7XAxL3JxLW/yMG0q7WosLisv8Ozt66strmlmKqyq6qYn6aXrbu0m6ewm62grrSyp6u5s6i6tLiyucCqt7LEvrXGqL+vrba1qaesoZeXkaaloqKYmKWvuK6ytbagn6ikmpWVk6Sgt6KkpZavsbKnqqainpqam5aXqJ+gmKGerrKipoyXrpikqpeZnqSRmoyTl5mFlZ6UjI+cnZOLqKmqoaegmJ6VjI6Zj4GFlYiUnndiZ1xqaU1PTU5UPUNBTkM6Okk/NzdST11eUlZRQVdgXEJKU0hWS0g6VGRcTkZPTltXW1JQUVhdR0FCW1BCRz5OQzlIR0hPUD8/Q0lCTEI8MklBOTQxNzdCPjs3RTcrNjkxNDgwMi0vLjw2LSNCcWdzazIzLzFbYlozMzgwNnBbYkgwNUlwaFZDV0aMeWZDO6SjnaKmv6eor7ChqbWrnbqxq6OqtLaxsLm3sLe4uMS9w8e9vMTBxsC4wMXAuam2pKy7rcDCt7eprLG6oZStsa2ylqWnkaq5qZ+msJ2roLC0s6qptratvK2zs7m3rLmww7u+v6bDq7C3rqmrq6eemJmroaKhkZehsa+zrLC5mpypoJmWkpemobappaOisLG0rLOorJ+boKCbnaWcopedo7Owmp+Pk6Wan6iak6KelJeIk5aSlZack4iQmpmUjqiopp+jm5ebk4aOmIt9jJaFjZlpZ2tgbG1XUFFaVUFCRVRAOztIQTc6WFBkXlBWV0VZX11NTFJOXktKPlpjXk5IUE9cVVlQS1RXWkk/RFhQREY/TkA9SUdHUVBCPURGQk0/OjFEPzc3NTQ3Pz05NUU0Kzc1LzI1MS4tLiwxPSonKz1ccD0+MS4wZFpkQDE2NDdnWWBGKD84bH1nW1Y7iXtjQz2on52iqr2iq7Cro7G4qqW2tKygrbW9rrO4u7q9trbAwr/IxLnEwsDAuMS9wbevtaert7G8vr60qK6xtp6Wq62orpemqI6nu5+krLOerKKxsLOsqra0tb6usLG1rLC0ssG7xberva+xuKytqqOxpp6lqp+kmJCZn7Oqs6uqs5qdp5ualY6gpqW0rqehra2usae0rbKqpJyfqKOelaGZm6i1qZaZkZGdmZ2fnY+rnpaXhJSWip2YnJOJjZaXmpempaKgnZWVl5N/j5SFe46SgouVZGtxZ29xXkZZZlZEQk1YRFo5SEI2PlxRaFxOWV1HW15dTk1SWGRKSkNcYl9QTE1OWFdYUEpWVldMPUVVSkVEQU1AQUZISFFQQTtGREZLPTg3Qj02ODcxOT48NjVEMCs4MC8wNS8qLC8tKj0sLCUyKyo1SzEvJ19fYFUxNTA9YFZeOClDM1lUXGdLNox6ZkxApJqhpKy2pa2qpq+ut6qvtbunprG3xbext73BwrW0usS+zMa5wsC5vrnDt8C5sbSsqbq2urm+tKmtsLWYmKerqqybq6uPq76erK6yo6ufsK2zrq62srm4qq6usai1r7S8vcqzqra1sbSvrqehs6CbqK2gppaWmpqyoq2gpa+XoaSampKOo6aos6mhprOsqralr7G1r6SZna2nmpifmpmrt6KXk5GOl5yhl5aUq56akn+Sl4ydnJmWkImUkp6ZpaKhoJiWkZOVeYqPhXuMioKJkWptd211e2BFYGtZSUhaWj17SkZENkFiVGlbTVxhSltdWlJSUmJhTEtFX2BgUUxJUFdWVU9HV1ZVTjpJVklIP0NLP0VESEhRTkE/SEhIRTw3PT46NzU2MDk/ODY2QiwtOCwvMDQsKCwvLSo3NikoOS4kOks1LiJUYFVgLzUoQ19RXC4rQi9KR1BbSDNjWVVLRJmXobGosaqtpqSvrrapt7W6pKy0t8m7tLq6v7+0s7fDwMzIvMO8tr2/v7e+vLG8raa6ube2wraqrLC3lJanrquoo7CqlK+7pK2xs6eoo7K0sbKxtbG4s6muq7Knt6+2tMTGtqm2tqywramno7agoKexoaSUnJmVsZ6nnKCqjqminpuWmKampbino7K1rKiyp66xtqylmaCsqJucnpyUqbiclI6OipibopePmKWgnJSCkJSPnJuXlpWIlpCYmqeco6CSlpGQlXWEkId7hIGDi4psb3Z0e35cS2VtXEpOY1w/YntHSThHZ1dlXExeYk1YWVdUV1RpXU9PSGFdX1BKSFFWVVJLSFdVVk04TVpORUBGSz9IQkNLU00/P0xPSEA7Oj47NjswNDE8PTQ1OD8pMDcpMS4yKSksLC0rLTkkMDQyJTlCNy4jQU5IZjI3J0diTFYlLUItPUVMUTwzcmtJQ0OQmaWupa2vq6ilsbO0q7eyt6CrtbnJua7Au8K4s7G1wsPOxcDBvbS9v7+6vryyxKepua+2tr+8rqqysZugp7GtpqWvpZ2ytayrsbKtqqm0u6y1s7WttKyqq6isqbmtsrHIwLilurCprKylqK6wpqWjr6SpnJ2cm6+ao6Oio5GsnqOgn6Kqpqa5pKy1tqWrrKitr7auo56jqaqboJqakqSzmY6JjYeQoaCUjJScn5KRg42Skpyal5WTh5eSlZmnm5+ejJKRjZB2fY6FfHt7homIcHJxfXx8XFNkbl5OWWZcRkSWW0c7Tm1YYltMYGJOVlZVV1RZZ11RUkxjWlpUS0dPVFNOR0lWU1xOO1BeSUJESEpBRT8/S1NPPjpOTUM8PD45OjU9KzMyPTYyNDk6KDQ1KS8sMSgpKywtKiY1Ki8mMCkzODoxJiozQmM6NipIZUhKKzpIPzNCSFMsPpBrO0dIj5yqq6KqsaSppbO0sbW1srKiq669zLquwLrHsbSttMLD0cXGvsCyvsHCu763u8SnrLersre7v6+rsayfo6etqqiksKSqsqqvrLCvsK6rs7ynt7GyqbOpq6Wlo626rKqyw7q2rbupqaesqaiypamko66qqKKenKOtlaWemJ6ZrJ2ip6miraakrau4srKhqaKgrK+xrJ6gp6ipmaSZmY+gppeGhI6Ki56fjoqMlZuOjYSGj5SfnJSXlIaWlJOXpJucnIqSkI2Jfn6HhXx3foWEhXJxcIh1a19aYG5iUXNxXEs7hHxFP1d0WGFaTmNbTlZWVVdRXGJfU09OZ1hXVktHTE5SSEVJVlJdYzxQXUQ8RkhIQkc/PUpQTDo+T0o9OT89Mjo3OyoyNT4xMDQ4NSg1LyosLjMwOyksLCclMjM0JCwyLTg2MCkoMTxdSjAuSmdERjg8QjA1RUtYMUCVWj5MRZWYraiiq7Ocqqqwtq25tq+rpquqvcm7sL23wq+xrLPEw87Pw76/tMDCw7q/s8jDq663rbK4vr6yrK2rpKeqsKmnqLGltK6qsK6tsrG0rLS8pLezrKyup6ufo56wt6uqrbu3pbe2pKmnq6uqraGpp6axsqSnpaGhrJeqoZWboKaepKKrpK2jn6exuK6uo6aim6qrrqmdoqWkpJmgmpaPmJySgYKPiIWcn4uKjouYjY+KgouXo5uRkJqLk5KRk6OZm5qKjouLfIaBgYN6dH+CgHxydYukh3hqXmBuZldlh2NOP2eTTEVieVdiWVJlVE1WVVVUT1xdYVVLTWhWVVdJSkhJT0JHSVNRWW9BTVhAOkpHRkVHPj5FUUg4Q0tFODdDNzI6OjoqMzk/Li80NjMpNCsqLCsuIzQuLSsmKCs3OSomNis8LTIsJjA2V1ouMEpnQUE8PEIrOkpPXjREhj5IRkSXkrClo6uxmKuqrbastrKspqyqqbzAwLi4s7u1prKvxMnL0b/Au7m/vsG4wbnAxK2xtbGzur+9srCtrKqrp7aqpq2vqrmwqLGyrrKtt6q3t6e0t6uspKmqnKOes7OoqKS0taC3rqCqqKqoq6egq6ypubapqqmpoqqgrZySqqGdoKSipqOqnp2ntK+opqqio5ilp6eqnKOko6CamKCRjo+YjX6HjIeDnZ2Gg4qKjY2Pi4KFlKKajYyZkJGRj5OflpiWjIuDf3SHgX5/eHSCfnl2foCHnY9vcWdncHdcYXOIa09emVZIbXhVZFZRY09NVVRUUE9YW2JVSFBpVFZTR1BZVUk+SUhPUVB4TE1WPTxLRD9AQTxAQ1VDOUFLPTU7RTEzOzo3KjQ6PSstMzQxKjgqKisqLCkpKC8qJiklMzssJDIpMjAyMSUvMlFiMDI/Zj1OWD5DLD5MVF8vSmk1T0Q7lo6xoaarrpqspa2wtLWwrKawqqm6vrvAsK65rqG3r8jHyNHAvr27vMK9usPAvr+usrKxtby6wbGxsquzqKS1qKWts7O5saOut7Kwsruruq+qrrasqp6qrJ+joLatqKGfsLOitaqeqKepo6qhoqytqL2vrK6soqion6yZkLChmKKgp6eep5uZqrGqo6CtoqGUo6Ojp5iaqaWYmJiejoqHlId9jIaEg6OWhIGAi4aNi5CDg5OgloiQnJCTkI2RnJSXj4qFhnh0gX98dXh5f3pzc3lnf4akdWleZGqAdGeIjH1TWHBeSndzU2RUUV5NTVJaZk5MVllkWEZTaVJRP0NOUWFROklITFNJcVFMUzs8ST87PD07QEBXPDw/SDczQ0IxNTo5My01OjopLTMxLS01KSgrLSw0MiMyKScsJS47LiYxLjAtMTQlLDBMZzo0OF89YWQ/RjFDUFtbKkhNOVVBNJCPsqGkpqykp6Stp7WzsaulsKequL7AvK+nuaqmr7DJx8jRwry/vrm+v7zJusC4sK+0sbq7t8Cys7qsuKyitKenrLK2ubOoqL22rra+sL2nray1rK2cqa+koKWtq6ecnquzpbSomqqnqaOpnqSpqKm9rLSvrZ2qpKCunJuzo5WknKWln6Sbmqmrpp+bqqKbk5yhpZ6Yl6mpkpialJCKgo+Ffo6CgIedj4V+fYuHkI2PhH+TmpOFkqGMlJGLkZuSlYeJfn9ye3p+fGh4fHp0b3B7Z4R4hIhkYWdhcYR6bWd4XV1VQFZ6bFRiUFFYS0xOcnVdSFpbZ1lFVWZQRD5KTkRDQTlIR0tTP2piSlE4PUg8PDw+Ojw/VDY6P0M0NUg+Mjs1OTAyNzw1KC41Ly0xMScvPktIMCUaOTAlLCwwOS8sLCs2JzE3Iy0wR2pJMTRYPWZjQUo3R1NgVSo9OURXPiqPlLKaoKCppqWhq6W4s7OmqrGnrbjBvbWvoritqKiwwsnJzMG2vcC1t7+5yLXCtbOytbK8t7m9ta25tb+toLOnq6uwtbi1rJ++vaqzwbS8oa+ztaqrn62wo5ylqKqjnpulsaewoJ+rqaehqZykqKGtu6iusK2gq6Okr56fraaXn5uho5yfnJqkqqObm6WklpeVn6KWm5emrIyekZGRi4KKgICOgHuZk42Ie36Lho+Ni4qDkpiRhpOiiZKSh5Caj5OAiHx5bH52eXhje3pxb29xdmeAc2qDZ2RnX2xyjWxhaW9gbz5aeGtVXk9QUUpJTVRZV01dXmxXRFhgT15QSE1ERjs3SEVLTzxyaEtLOUFFOzs9PTs7PUo0OUI8MztHPDQ/MTgtNjg7MigwOS8sNC8uPS0qSz4qHTQ5JicuMzQuMCsvNCYsOiQ0MUFoWTEzUz1lX0RMNktWZE8qOzJOWD0jk5mtmqCYp6Sjn6ikuLCvo6+wqqu4wbmzrZ+4r6uotLrIy8i/tsK+sLS9t8S2w7GuubKzv7S6vbeoube9qqO0qKmqsa66saqcvL2lsMG1tqKvt7Wmp6exs6CepKWnoaWZn6yoqZ6gqq6moKaYo6mgsbmfo7CvoayhraScpqapmpqbn6SVnJ2anqmml5ygqZOZlJiek5mWoaqRmoiOj4Z9h36CjX18oIyMiHiCi4SJi4uFh5Oaj4iVnoiRlYKMl4yRfYV7c3B9cXR0YHl4aG5wcG5ofXFje21pZWJeZIV+X1pyanFLSn5oWFpOUExKSFBSUElPXF9uU0RYWlJoT0hLRUY1NkhCTEk1WmVKQDZFQjk6Pj0+OjpDNTk+OjNARjwyQDIzLjo7ODMmMjwwLDg1QiopLUMqLDQ7Tk5AOzczLS4rLTcqKjwlNTM8ZmQyNE0/ZV1GTz1RWmdIKj4vWFY1KJeep5qdlqygoKGkorirsqW0tKqpucO1s62ft62urbC1xsjBt77BubG0vLa/u76vqr2ws76wvMK5qLu6t6antaioq7Gts7Gom763pq28t7KfsbiwqKWnr7GboaSgpKSgl5uvp6Gfo6ivoZ+ilKSkorewoaawq5+so6+YnKqkqJ6Xmp6lk5udmp2mq5qdnaaXlpiUnY6Tl6KoopCIi4+FeoR+hIp6jpaJjYZ4gYeDh4uNhY2TmI2OlpiKj5d+hpeLj3mBenByd29vdF95d2RrbGtoZ4JtZXJra2VoWWFzf15aa3VpWUd8XVtYT05KSEhSVUYyOl5ebFBEWFZZZUxISkVFMDdGP0tCNklKSDs2Rjk0OT49PDk4QDg7ODo3QEk+ODw0LTM8PDc1KDU+MSw7QTEoKzY8IzhSPSoxMTM+RDUsLSc0Mis7KzEzOWNsODRHQmdbSFRDVF1oRS47MV5TLDKWo6KYlZ2pnqaho6G4qrChu7mmrL3Es7CuorWvra2vtMTEvbO+urexs7m4uri6rq2/s7S4r7/Bt6y9urSlorOrqKqzrK6yo53Ctqapt7ern7K7qaalqK+rmaOnnKWmlJihs6aZnqWpqZuhoJSln6S5qKSnraaepaGok5+poaGhmZudoZKbnZegoqucm5qilpOVlpuOk5Ojp6SPiIqOhnmEfIWGfZyMiYqGeICDh4iHkYWVk5KMkJWTjY6Ue4KXjot3fntsdXJtbHNieXVoZ2lnZW2EZ2doZGZoaV5mYmlmWmV6YmBRc1RbW1NLSUdJT1NAIStpXmpMQ1ZVXmBLSEdFQy46QjxGPDZLUEQ4OkQzNTc9PTg5NT86OzQ+OEBMPT45Myk4Pjw6OSo2QDMuRTQoKyw+MC1OPy4rLTctMTE5NSwmLjUtODA1NzZgdEIzQ0RoW0tXR1VgaEIzNzdhTScynqSkko6lppyenp6kta2oqrq3p6zDwLevrKG1rqeur7fBwL2xwbewr7K2tbi3tayqvLSvsrC9wLeuvLyxpJ+2rKamtamrr6GgxKyqp7G0q6y0up6oqauxpZidqp6opZKapq6jmJ2kqqGbop2XoJ2ntqavqa2hoZ6doZWgpp+ioJmbmpySmp6Vpp6topiXn5aUjpWYjI+YmqegkIeKioh4hXeCgoKch4qCiXt+hIiGhJCElpWPj5CRkJGNknuDlY6Gc399Z3lwa2psZ3Vza2JnZGJ0f2FkZWZlaWliZ29ZXlhdbGNgTWdXWmBWSUdIS0xSWD45YGxpR0JVU1xbSUhGRUEuPD85QTg5UkZANzpCMDM3PTc2OTI6PDk3OjlETT1CPDAqPEA7QTwtNUIzNz0rKywwQSpKSy4vKiszNzIyKDU3JCs3LjcyNjg1XHlOMj5IaVpMWkpWYmZBOjNAY0YlNZykoJGMrqCamKCXpbSyo7K+t6Gxxbu5sLGjtqyrrqm5vry7rcCyr6+utq+zubKnq7mxr66ztru2sLm+rKWetaugobGlq6+fpcWhs6WvsrC3rbWerK6srqKZnaeqpZ+VnKemoJmko6mcmqCclZyerbCmuaeuoqGamp6YnqOapZ2WnpiblJqhkqiWramblJ2ck4yVmY6UlJinp42NiomOe4F0goKKmIWHfImIhISKjIiShZOckpKPkJGWjpB/gY2Ng2+Bf2Z5bmhramdxcmtbaGNhcn9gZGdqbmtmamZkbFxsbXZxYFNiaGNlWklGTE1PWFFQVWFlgVRAVlNZVUZHRkVALzw9Nz82PEZOYTg6PzI0OUAzNzgyOD83PTg+RkpARDkyLT1BPUE9MDVAOUAxLSsuMzw7SzYvLissLTI0OjUjMyopNi41NTQ2NVp8XTE6S2pbTVtLWGRjQEExSGNCJzSTopyPjrGdm5ShmqmysJ+5wLags8G7vbmxprawqa6lt7m3uKy7r62rq7eqtLmtpbK1sa+psba2sbO2u6epn7apnZ+qo6qtnavDma+lr7G2taysnrGtr6qim52krKmclZynpJ2ZqaOllZqgnZGco6uqqbqep6Sgl5qanaGPa6KVmJxxg5acpIB2kauonpaWoZGJl5mAl4qfj3iFk42DbWl+d4RybIaKhn2EioZvXWRgZ4SXhmuLkJSSdXeLhH+DkIBmiIBodmlmWF1pdG5OUGpjZnGCZl5kZm5raV1dXomQhYhoT0tDN0RUZ11KSFBQVVVLSFNgb3RlRVtRVVBGR0ZDPjE7PTY9NjwzZlw1Ojw3NTtENDg2MDpCNz86PkZMQ0IzNDM9QEBAPTI4QEU9MSwsMDg+RzcwMS4qLiovNjY4LCMxJzIxNDoyNzZYgWwxNU9rW05cS1tmYj5HMU9hPCsvjaSah5Wxm52ToJyqraujvcWvqbfCuL28rae2saarpLi0srOwua6qp6y0pbC1oqe4trWop6y2s660rrOiqZ+0q56ipZynqJuvvpWop7C0uK2upKitqqumoZ+coaionJehpqacm6eonZKeoJiQn6iqo7Svo6KjnJaYmJejiKGPkpqGoYiUnqF/pX+nrJ6Uk52TiINyeIyOg4egdYiNaZeJZn5zeaBviIeDfox8f6Ggn5l/e4eedIiOdpuKbIeCg25pZWR7bXJiVIZtY21pmHFYaXBuhlddaVtralqIcG15codoh4RZXkZNPkZeTUVSVlZRUFJXVGddTFlLUlJPRUdHPjw0OT05PDc7MDw8Nzk5OjY9RjU4NjA8Qjs8OT1GUUc9LjU8O0A9QD41OUdBODIqLzE8STkvMDEuKi8oLTQ1ODMlJjIxMTU+MTw4WIN0MTVSa1tOXExbZ189SzFVXzcwKI2ml4SdrJ2ZmZ2fq6qoqr/DrrK6vLfAv6qkt7GqrKazta6vs7arqaWxraW1s5ustba0pqeos7Gtsqiunqqhs6mgpKSaoqSdsLeVpaant72mrKepqqunpqKgmaCopJqZp6OkmZylqpaTo5yUlKSmpqG2pKOgpJiVk5iTnIiukJiViamLmKOchrGApK2elJqflXmC1Kh/h5TAm8Z4d7Glt5ZkgMCcv3mEhHmPg3yQkJHKcZa8nMV7cranupB7gWyXsauweWhsWLGub2VpvJK8bmh6bXCP2H5Ta2K2sn6AcZR1mqGqkFZOV2FPVk5GVFtYUVBSi1xXW1BAXEVRTkRGSTw8NTc9Ozo5Oi49Ozg3ODs5PkY2Ojc0PkA+Njk/RVJJOi41PjtCPD9BODpKPjUyKjIyQkUvLjMyLisvKS0vMTg2LSAvNDE2QTE9OleDdzExVGtcT1tNXmdcPkwxWlw0MSGOppOBp6qfl52dpa2yqbHCvbK1v7W4v8KrprStramor7Sqr7a0qKimtqWoua+csrK2qqWkp7KvrbGmq56npLKkoqGfl5yhoLGulZ+joLS6oqqooKytpKKdm5qiqqCYm6mgn5idqKiRnKeblJ6ip6OhsKOen6OWlpKYkpmFsGtqi42qfmeFloetZXGenZWap5ZxrqGkfne6fGuhj3axX2q0W6WAZZyQYGaBemZ/aXhqqWW+cmemjHaxanyxeHWSlGNtbaduXISgRWlnh5ZFdZxgfWZ7o6aCWV+Lq2mAknh6aqg4Sq9bV1NsY1pMT1hfXFdWO06IT1ZWL0lUU0pDRUY9PzQ2Pzs4OjkwPTg5OTk6PTxEODs6Nj1BQDY8QEhRRzkwNzxBQz5ARDhARz0xMy0zM0UzLi41My8rLyguMC46Ni8nJDIwM0IvPTtVgnYyLVZqXE9ZTF9nWTpNNV5YMzEbkqKVgq2npZ6jpKqxt620vb6wtsWyuLrDp6mwrK+pqbGvpLG6sKSlr7OjqbmpnrOysKOloaqtsKyvpqifo6KxnKOdmJWYnZ6wqJecoqC0s6Gqm6GsrJ+empego6qdmZ6loZ2aoaekkJ2jm5ihoKyfpaagmqChlZWRlpGahrWbtXmFqZm1mXeHs5u3f5OWl6uWfmuBpnqBhYaRlJJ3q2dqsVuse46HlHSIcI6GgH+IkJd4g4KLl4yDoI+FsHZ3n3Framx8i0+lWEhjY5l+Y2ilX3lxdVKSh15QqW1jcX2GgGGdL1KibltTa2dfTEtcY1hcWkI+sHdXWEEjTWhGQkRBQEExOT44ODo4NDs6OTw5OkE6RTo6OzY6Q0I4PT9LTkg6NTpBRkJAQUQ8RkQ7MDIwMTtGLDAuODQwLC4oLzMsPjgzMR8vMi1EMTw8U31uMytYalxPWE1fZlc3SjlhVTUwHJaflIizpqahrqmos6yqu7bCsLzCrbi3wqusra+up66zqqKvvKuip7Wto6u2paWys6ijoZ2nqrKosKimnqCgsJagmpaWl5qgr6ObmqSota6hqI+pp6mbnZaYoKapm5+do5+coKOlo5Wbn5ianqOrm6WanJqioJaTkZOTnYTVk5m5cbDCf8aGfNaUnLt8m5amkI2cjKR6jYaigaWCeqx5j51Vr3uJfp9quVq5d4WDfaaCk3yYeqp5jp2Qe7FtjoR0kLuFbpVQr6fFilGgemNgqmJzcoZsl4dfU7W0yIWAiXxjpDNCnXVdUGpoZFBAWGZZZGFKSE1rSlpTT1lmWkNDP0U/MDw8NTk7NzQ8Ozg9OjxDOkY6Oz42OkBDOzZAT0xIPDo8REhDQkNEPEVGODEyMTFEQi4vMDQ4MystKS4zMjM5NzEjJTUqPjM9PVF3ajYqWWlbSltQX2ZUN0c6YVA3MiWcopKYsaippbOqpbSnpLy3wbG6wLK2tb20tqeysaOxs6agr7apm6i6rqOwsqGytLGhpJ6ep6mxqbSppZyenqyXmZmXl5aYoqyem5eprbCoo56OrKKnlp2YnKGmopiioaOhm6Kip5ueoJ6VmZumoZymlJubn6CYkJKVkJ2Ism5otXGriHCOpnK0dHO2e5uYpY2PnI2ifo+fpH6wdYOR0tF1W658hX+kbpuqpmuGhX2tfZeZj3uxc5Odj3izZZZ0hZ5unmaUUsmLWsJcn3liX61fdnOGYpeIXlnKnW+/gHVNS7VTVcZkVFFqY2VYQU9qX2xpUFVGSTk9V1JbVllIQj9KPDI/OzU9PDU2Pjs3Pjw9QztHOTtANzs+RDsuQ1JKRz4/PElKRkNFRD5JSToxNzQ2QD4vLjI0MjUyLSkuMjYsNzQyJh82MDs1Oj1QcWg5J1dpXEFOVF9lUDVHPWFNNjIuop2Rpa+spam6rKa1pae2u7yyu7+4t7W7u7SmtbSisrKjoKywpZinuq6ksrGdtLiqoKWdoaqksqisqqSanZupn5aVmJmSk6OqoZiTp6uwpaGWkqyfpZKUoZykp6CVm6enopqjn66aoZ6ekJacop6cpZSdlZminpWZlpKbhax7d6h2o4+Lh6lvrYqDp4SamaKKkpmLon6Rl4euhX+Cs1xys1KufYKCo35x1313hH6PnYaZmnevhoqRnIh3tGGaZZqCgZVskluwV0uadZh5ZmCtXnZ3h2eYiGpdr3eVn494bDV5yK6yX0JUb11nYEVQbF9wbVZVTS5lYmhTWVA7QURATDo1PzkxPjwxNj85OEA9OkM6Rzs8Pzo+PkU5LUVVSkVAQzpNS0pCSEc+R0s5Nzw0Njo+LzA0MzMzLjIuLjE4Ki4zMiUhMDM3Njc9UGtlPiZWZ1xAPVZfY042R0NgSTo3N6Cdk6C4sZizwayosqeqsrq4tLm+ubiztr62pri0oLWtoKCprKCVp7asqLGxq620pJupn6CoorWnpqqjmZ6VpaKUlJyakpajppuUkKetr6WglJipn6KPkaKaqaahlZqmqZ2dpJ6tnaGcoI2Un5ueoJiYnJaXoaCUmJGmnYapfX2leaGPkIOqcK2MgaaGlqCiipeWiKOBkIeUqnuAi515b7FaqIOCiKB4dNh/dod0p4GOm42SpHyVkJ+Ee7JenGSgfYKUbZNcq1xbk3+Rf2hnqmNye4BqmIZxXataiaCPa25lT0pDoVxaTXRdYmZNWmFfcnRfSlU1SpqSWEhFPUhGQU0zNUE4Ljs+MDVBNzhAPDY9PEY/Ojw2Pz1CNy5IVkpFQEg2S0lOQElLQEVOOjpANC47PjAwMjE1NCsqMDUvNywmMjEoJCQ2NjcxPE9lZEEmVWZbPzFUX2JMN0ZJX0MxPTeinJmZv6yYs8Kuq62oprSwuLG2v7m6s7K4vKq7taCxpZ+mp6eflKqxqbCqtq2qr6GYoaCmpKS6oqOroZebkaOglZWfm5WYoKCQjoupsK+mnZaap6afjZKkmKisqJWYqaien6CkraOhnqGOlaGYn6CSnJeclZ2hlZaPq5uPrm5ytHSpjHeKpnO0eXS0gZOlo5OcjImkh451uG6Le4uia2u2WqGGZZeXaKCip22UcrR0k5h/smqFkoitanW0YZ1mom6GkmuXXK1gTqF8h5FSc6NseX9+bpiGcFyvVjycd2ZUb24uW6dPYlJrZWJsWmJcYHB8Y1NZUT4+bW8yQkJAP005ITdANi47QDM3QzU4Pz8zOzxDREJKRk1JRjYySlRLRUJKNklKUD9IT0NGUD08RTUwOzswMTAvNzUsKywzMjYvIzAwLCwdMjg5LzlOYGVEJ1VkWT4vVV5hTDVGTV45MUE4pZqcnbqinLG/rq2rq6e3qbivtcG1vbKwu7irwbaqq6Gdp6SinZKrq6e2o7Oorqqhl5yooKWruZ2jrZyWmZClo5aOnqGcmJ6fkZOVq7avppmTm6ypl4yUppqlraORl6uypKCeqKuwmaGikJmil6CblpuXoZOcqZ2UkKqZh9OTmrt0scSAw4Z+1ZabuHmJkZiNl4mMp4d5orZ0fXd2woKasmCDunnAfHW4YrWBjIepfZaBrKlxe391vIinoGmdYaaOr6J+jHSHq32+bnO8dLKDdXiAim2aiHFtjaR0vV13fVthebxqWlZbaXpeaWFkZmJteW9ZW1lDQUByP0NHKzVIIic7PzEwPD83OkI5OT1DNDxATlpeYGBfX19aUFBSS0VGSjRITFJASk5FRk9CPEU4ND05MDIwLjg3LSouLzE4MCItMSwzHiw7OjA4TFhhRidUY1g8L1ReYEs1O0xbLTZAOaeZn6K8opexwq+tqaqssai5r7fFsbuzr7ywrsGyraajn6ShnZyRqqWqsqS1p62koJaaq5mnrLmdo62ZlaGQpqCTjZyjnpiempCWkq+5sKuVl6Onp5SQlqWdpK2fkaCoq5+cn6mksp6ipI6nopShmpuXlaSYj7CgkpWpn4WQmbaAkZGNuJV4gpObtXdubG5zb3mPhI6Jcp7Bu7yZeoGyqHCAdJG5g3uGhoqGjXuKho2XfKS7ub2cdXmzo3R2l3V0sHWYnmaGaY22dHJwd7aMXn95fYhng3lteWKLrHB0hX9YW6dpRGRZVGZfY11jUWZmcW11Qk1PTEQ7Wkw/SjM8MCA4PjsuMz1BOTk/PTs8QzZCVFlaWltbWlteYGJgXVNHR0g0RElUQktOR0VPRj9HPDc/NzA3MC85Oi4sLy0qOC8lJjIoNCQoPjcvN0tUX0cnU2JXOCpPXV09KztWVic9OjymnaGhv6aWs8Kzq6qorKuqu6+xxq+1tK+4p7W5rqukoqefoJ2ZlKykrqqmtqion5yWoKOdrKS+p6Gql5WckaKbko+hqKGTnpeSmJSytbasmJ6jpKKLkpKmnKWrnZappaacmqGpp6ajqKGSrJ6Xop6Xlpidno+wqZOcp6KPa35pnKh5iHN+m451emWHe76/wLpukoJxlIVfcmpaXZqJYWSHjpVrYH+UY22bdmKUa4CalZRlXl9icZqJaHKMfIaUZmp+cXR5fn1iW3h0gWhQXG6DfHuKalhseYFySUpvhXBOc01EVlxmYUxbV2ZjXk9abXZqclJPREVNPEhJPEw+MiwyQT84LzU/Qzw5O0A7PUM+UlZWV1laW1tcXWBhYWFgXFVHNURGVUVKT0hGUElJSDs4PTUxOi4xOzouLy03Nj01JiIvKjIsJTs4LTdJUl9JJ1NfVjQpUF5MKDM+W08nPzI+qJ+oocGkmrS5tqOspq6nqLWyrMissLSttqS+sbOnoaSqnaOcmpqsp66kpbWqpJuYlaKbpq2pvqiopZWUm5agmpOYpamnkZ6Qj5icsLK+rJunnaeiiZORqpuopJycrJ+jmpujp6yhn6qimq6blaaglpSdn52XsaWZoqiZnJGenKOlmqejmp2ampqQloJobn1xdpGXk5CDibSpjYWYlY6KjJiWh5OViYOTk5CIjZGUmZOZl5qgoZqblJ+bjYJ6pIVsaXuQfYB1iYuCcoJ4eXZ1ioB7iWpzgXSDdWR3fXZrcHpsX2Jbb2dMWFllal9XWXB6b21mU09GUjlPWk5STygrO0pCNjM1PUBBOTpDPjxFTlNTVFZXWFpaXF1gYmJhX15eW1RLQ1NHS05ER1BMT0k8Ojs0ODksMjs4MjApNklSTzgiKSsvMiM0Oyo3Rk9bSidSXlQxMFReOis9OF1LLDwtQLKgs6K/oqOxsbegqaazp6WwtarJq62yprWmwKi0oZ6lppyllpagq6eto6S3rKCZl5agl62qpsGfq6SWkpyXnpiUlKKenqOokpCZqKeyw6+Zq5yqno+Xlqmeq5yeoa2YoZudoqWvpaGkqJ6rmJemnZmaoZ6enLChnaKnlZiUmZSho5akn5ihjpaUi4qOj5etj3uVm4KRgImpqIWAmJaKhI6fiHuDkIWFmpGGhYmVjpuXjpCYnqOWmZKQnI1+jWWhs66EiYR3e4+Kfnd5em9neZCBgIlrdYF5iHJpc395dYOHgWp0Y3hmX2hkY2Rmalhre3Fqa1xTTFBEX1VGQD8/LDRARjs0NTs+QTs8Pz4+SE5OT1BTVFZWWFpcX2FjYV9eXV1eXVhWSktMQklPTVJKOzw6Nzg2LzM5NjQuKCYkLTEuLikrKjclKzwoNkNNTEQvVFxRMDVNWzE3RTRcRzU8LECzoLmvvqyrrbGyoKqmsq2irLOwxrCrraSzr7yktJygp6KhnZmXqKappqSms7WelJWdmZmwpq6+oKuikZGempmUkpahnJepnYWdqayitMezn6mkqpaWmJqnnqmcoKWrlJ+fnaCqrqiko6uhrJufn6CYpJ6cn5ywpJmfqJOYmZ2SpZqZqZ+bl2aDknxlfo+aj2N4jGxoanqQo6trZJmXfmeFimVlaWh6jaGOameMl5Gid2tqi5iinphya256hIyGeVhlXYWCXmyLioJ2W2hzd3eRgIeCbniCeH9zbXmEc3eIiI6De2mFWF1qc2Rdc4hpa3xxbWNdUU5XSWRYQEozPUY3P0ZENzE8PT9BQzs7REdISElMTk9SUlRXW15gYWFgXV1dXV5fXVpVT0RIT0tTTj0+PT02NTM1NTU0KiYmJSwqJS4rKyc2KiQ7Jy9BSVtJLjZaTzYpRVkvRE8xWUI7Py49pZ+6vLmvrLKwq6Wora6wp66tsL2xqqilrbCwn62YoKSeopqap6ycrKOmqKmzrp6Wo5CjsKa2uaWuo4+PmqGZk5KboJiZppZ7payiqLPDt6Wip6+fnpWeo56jnaSqqJKfoZ6gqq+pqaOqnqebpp6noKyWoZylsaSYnKuWoZ+bk6WYn6uZnn6+g4hytHKFnoWtaHe5xLhxkqGje6aYmHOqgnzLwMC7cYqjh4KefJaYiJ7AvYKWnZ2MnMHAe4F6kYyawr99a6Wyb4yBb8p6f5t3kYOOgHZ5gX95cXuAhnB4hYyTeWx1kWJlXnhjXmWBYl50aG1kYlhMVklRWkhPRDJJRT9EQj4vPD8+QEE6OERDQkNFSElLTU5QU1ZZXl9fYF9eXl5eX19fXVxTTVBHVU5BQD89NjQ2ODI2NiomJSMpKiYuKyopMTAfOSojPkhbTCojQ1AvI0ZbM1BZL1VBQjsvOJaiuMO0sK+/qamUo6+psK+tprK1r6qmp6Wxq6CrmJuioJybqqeinauipailpbSknqOTpq6suLSnr6KSkZmdpZKRoKGXm6Cdh6aqpKutv7+xoamuqZeSn56imaOkqqOToKGenayup6umo6Gln6SknK2okaSbqa2qnJ2rna2il5iml6KkmJ1/zpR5eqWBepaWm1+tj12OqICgoXynlZp0q4KAr15kjKl6qIeFn3SXkoizY4KrhqCNjbNqhK5zfJaHuGGCrVmjzW6QdXvbe3+ZcX6IknV/ZXuIdnZsfYdufYWQkX1rgI1fcGpvZmBfeGRbcWhqY2ZgUlRTV15KT0M1QUhFRDg+NjtAP0E7PThAPj8/QkRERklKTE5QUk9TXF5fX15dXV9gYF9fXVpXT1VKPT8+PDU1NzgxNjQoJyQhJywmJi8oJiszHTYwJDc7U0wrLC1KMCc7XDpMLSFQQEY0LjGtwb+/tLSwt5iekaOqqa20q6ayrayspKymsKqhp5uappicoq+foZ+op6OloZ+wrJuelqaurbCrqKyglJKbn6WTkJ+kl52no56to6uwqL/Gs6ipsa6Wkp6copehqqqflaGenZyurqapqJulpaOhqpKss5aloqqqnqSnp6KxopObp5uhm5WUkZegcIWMmHWEqIdxsHydcqx9oJ+BpY+ed6uCfa1/nHKtfquHhp92mJJ7fJd+qoihi5GLnH2reoiSj59/eq1WnMR6j2+SwX2BlW11cIxtZndlhm9hd25yboiKkY+DbI+OZG1zdW9gZm1kX29oam5mY1dTXGBaUlJDOElJQEM8PjxARkRDRUE9PDw8PkBAQUJFRkdFQENJU1dZWlxdXl5cXl9hX15eXVtaUkM+OzkxNDc4NDUyJiMfHCAxJyAxJx8nNB41LSY3PVdKLTwoPTEpM1ZARiEcRztDMS0rr9PFxrKzoJ2jjqOioq2utq+psaeoqqiuq6umoqOdmqOVn6arn6KmoKmoo5+esK2Ym5aop6+sqKepnpeVmqOikpShrJqdpqOvrKOstam5zbKtpq6slpWcnaKZn66snZahmZ6eqrGnqamaqaejoaqar7GiqKyvppmmq6qrsqSTmKSmm5WShaRqpHWJeql1erJxgqWJmIxwh5+ah6RfYFKrhH+ugpt1roKnhoafepmXhXtmgKOJpJiGgaN9qX6BlIauXnuoVZ2ikoF6o5+AfMOvxYxzr7SzuXFiqa/CdGiMjJeOgWyYkW5seHh3bmtmZGRxcGZ7aWNcVl9pWFhUTExRTENDQUI7Q0FAQkk8PTo5Ojw9Pj4/QT04NjtETFBSVFZYW15eXVxeYGFgX15dXF1bU0lCNjc5OTY2NCwmJCIgKCciKy0iJC4hMy0mQERXSCxHKzU2KjFQS0wjIEE5RDQsJ8LJ1dXAoZmrqKGvop+wtbCvqa2jqKeqq6uppKafm6WfnaanpqSdrJqirKGjn6+jnpuTqqS2sK6gqZucl5Wmo5CaoqefoKabsaajqLGstsiytamsqpWRnJ2imaCltJ2aoZScn6erqaKtmaqnoaGpobOtoqqzsqKcqqiwsLellJekqJmdknyqbJ6Eh3WreXywboKki4iflpWelYHSt7S4yYCBsl5flKmDpIeHoHqYlZl4qslzmaOUp6iQkpqMfpqJmsbGd2WhgqVzgZ+Ogn2vXm+1Y7F1S6OGbadHgpNkjo+ckntvlZB9bnl0fHptW2VqcnFmgWpeYVhjbVxeWUlMTEtFREJCPUE8Qj9KOzc5Nzk5Ojs7OzMuNjxBRklMTU9RU1daW1tbXV5fXl9fXlxcXFxcWE1CNzU3ODUvKSglJiUkJiksNUZOUFBNRkxKVkYqTDAvPi00TlRRHRw7PEYyLCSopMDGua2psq6spaKdsrmsqqGmm6imqqyppqCmpJiro5+uq52moayanqmlnaa1n6KXk6irtrKsm6acoJaQpa2SmpymoqCqpq2hoqepsLTCsbKqraiUiZidpZuipK+ml6GVmZylpamZrpyspqWdq6O2rKCxubCenK+otLS0ppaYqaSboY+CnU54moF/n3qEo3yCpISGpp6cnpSEuHt8ebmCf8zGw7Z3m6GQi59+mpaXiXafl4qkmKSnfq+Em4OehKx9mZRhpWyjcI+FkIF9l4RyrGCkcnGAmmC8fVJVdY6Ro5Z7fJGOh3J5coN9cFxsbndyaoBuWmNfaG5iZF1MTFFTQUhHRkk5OUs+QjEwODg1Njg3Ny0qNT09P0JER0lMTlBUV1lZWltcX19eXV9fXFpaWllVU09IQDc3Mi4sKi4rKicmP1FUVldXV1lYWFdVT1RGPEUyOlBbVBwbNj9HLC0gjIeZqaykq7mrr6CboayztKafoZWlr66uqaadpaWao6egsq6iqaeyoJmppJSjtaOjlZeiqrW5pJyjnaOTkKGymZ6bpqSgoq+tnKOoorWxw7Gtqq2qkYeRnKedo6SdpZeemJmZpaOnmK2hrKOll66lu6yht7eunp61s7mytKiZn7GipZ+Hj9G1w7d5h46FkZOPgKZ4lKJ3i6CShaWCi3GrhoW0bnJpmaOclYmffJeZhoeQc66CpZuijKaKk5yIlJCabXCyXKVzk3qcbJl/e5l+bqlhonFxf59ic7K4aHePk6SYfYqLkIh2e3iNgWxod2l4c25+dFxkZG1tZWhgSlpXWDxIRj9UM0BGPjwqKDYzLjAxMykmNDo7PD0+QENFSUtOUFJUVldXWV1fX15eYGBdWltaWFVSUlFGOjIyMzAvKysoQFFSVFVUU1RWV1dYWFdVVVZUUU9RW1UlITJBSCMpJZJyjYqtv7+8u7Wel6ikrbaho5mVo6mnrqmrmaWhnqahoLWnoqmnsKOUq6OPpK2jnZCamqq0tKSdppypkpSXrqCgnqajnKectZmgqqO1q8KvqaupooyEj5yioKajlpqanJibmKajpZeppqyhpJuspr2slL6wrZ+jsLS7rLWonaqzpamZe6iRfXywd4qBpKWInG2yb6CHrXuhj4OolpmArImFroWglKihopeFn4CZlYB7kn6rgJ2Zloqqd52gj4iTkn95r12jgXymp2SegHyXdGuuXaVrcYWZXWBbjKBtlJClmIKTi5OJeHmBln5qbH1ifXRtf3lfZ2Vwb2dnaEJZX1s9SlMyVDhCQkM3JCQzKycnMywgLzY2NzQzNjpAQ0ZJS01OUVNTU1ZaXV9hYGFhYV5dW1pYU1BPTkk3MDUyLiosQVRWVlZUVFVVVVVUVFVUU1NWV1dYVlVWUUhGSUojKCi8kpqEqcbDtsG0n5qtoK64paOOmqSjoK+uqZ+jnp2tmJ65oKKroK+qmq6hkaqppZaJmo+usKymoKibrZiZj62ioZ2loZmknK2Xn6iltqi/rqSpo5+LgI6bm5+mnpKUmZqUmpqko6OYp6qqoaKeqai9pJfDrKujoqyzu6yvqKK1saqsmXavfpCKnIWHfbqtiZhksIxlla19oY+Dp5abgayKhLCFppmjoaKRhaBbbGqBs2B/rXt6goCxbGdtmZeLiLFafbRbpINryKJln4F7vFl2tVqyfVKvgHqsWIChbZeOp5mJlY+TlHl3jJt8Y3N8YYN4c398YGlmcG1mZWVPVWNcQVRePUgoPjk9NCEhLCQfMi4gKjEvMDQ1Nzk6PEFDRkhKTE5QUFJUV1peYGBgYWJeX1xbWFVQTUpHQzU1My4vQFVZWFdYV1hYV1dYV1ZXV1dXWFdXWFlaWltcWFdXR0I70p+0sbe9u7TBs6Ocraaltqmgi5mgn52zsaieop+dtJigs6iqq56wrZ6sm5WuqKKOiJuOr6yop6Ooma6Tmo+pmqGepZ6Zo6KlmJ6iqbKovK+lqJ6djnyLm5ahoJmQkpqbkZmXqJ6fl6espaOkoqSpup6gxqelqaGstbeur6ihva+urpeBqZKjro6bgIakl5iQgIC4w7qDjp2ThKeYnYKsioKviaecmqWrkX7VvcKqYqS/vX1+o4KD17q3tYWTkoKevb6EaqOBb6uEbp1/erKxx4Nrq7C9rHh3or67dICVjaWajZmOlJp3f4+ZeGF8eWOMZ3iBe2BrZWppYlBiW1NpXEBUYEJMKTw6NS8fHyQeJTIgHSQoMDQ5NjY3ODs+QURGR0pLTU5OUVRXXWFcX19hXmBbXFlUUU1IQz48QT81PVNZWVhZWVpZWlpZWFdXWFlaWllZWFlbW11dXFpWWFRXWruVtLSxv7qyvbOina6mpbOmnYyYpb+ptrCnob+mprGbnrGcuaifra6lp5WUr6yXjIOaka6mo6yhpZyqoJiKo5OmnqebmqCoopidoKysqbitp6Oal5N7iJmSppuTj5GYmI+YlKiZnpaop56ppqGiq7qeqcWjobCkq7S1q7Gror2qsLCcdHaqpLeFZYmfcGesj4qPbm93pJCaoIF1sJqWcJCNcpaoo5uYrqRybG1sZYp4bm2CmXGAemlwaWaJlZWXcWhphYZncIZkXYpjaW9ZXWd+eKZgYnKPkm9mZICNk46hlpWWjpSbeoWNk3RkhndnjGp4fnhkbGNlbGJLZVdKa1k6UGREUCdKOisjHCAaIiwpGBsYLTIuNTo0NTc6PD9BQkRFSEtMTU9RU1ZcV1pcYF9hXV1bVFBMSEQ9OkFCN01YWVpZWVpZWFhZWFdXVldZXV5eXVxcXF1eXV5dW1tVV16ola20qbq5srOqqaKunqSzqpiSvbHDx720qZ6/q6yjoKarn7qjpK2sraWOlq2qkIyFlZetn6Wqop+ko6CRi6WSp5mpmZajqqCWnKWmp6+5qquam5OSe4SWjqaXjpGRmJSNl5Wmk52Wp6KZr6adoqy5n7DCqKS0pqyxsquvram6pbC5l4uhqaW1nImWopiGqZqQlJ2SqrOZm6OsobSXo6GeoaKcoaShlaynjJKTjIeSnJyUkJmTmJCOlYR/pJqXlY2LkpKKj4aEfmeLgHSDdnSHjHGnbXyVkpSTgYGPj4+OnJKflJWUnoCFkotwZ452bol3dXx5aWtkZG9jVWBYQGlaR2JgTlgrRT0rJiE2NDAvHxwhJTIoKjc5OTQ2OTs+P0FCREZKS0tNUFBRV1VWWV5fYWNdXlRRSkVDPjk9QEFTWFtcWVdYWFhYWFlYWFpbW1xeX19gXl5eX19gYGBfWVlgpZapqqS1t66uorCkrZ+gtrGQjqrEu8S5t6mhpZ2bpZ2wqKO2p52ptaankZiso4uIiY+cp5aso6GaqJ6ek5Wjl6iaqZmUpqGjj5qnmaG0uaeqmJqQjXyBlIyhlIqVkZWQj5KXpI6dmKeem7Wjnaart6ivwq+kuKewr7Guqqu1u6KxvpmSpqSmtaKSnaaejaifjJGfo6ywmqGksqqxmaWhnaSrnp6dnJesnpKaopuUkJaqmY2YmJaQlp6Rh6CdlZSFkoyPjZWLgX5mjYd1h3Z5iIR0nGqHkZWVkol9jJaSkpeRoJGalJ6ChpaFeHGUcniJfnF7fmluZF5waWBbX1ltYlBgZE9ZOUdGRT0yPD04LyomKykmHSY0MDY2NTg6PT0/QUFDSEpHSktMTVNTU1VaYGBpYGVWUEpBQ0I7OUVNVlteXltaXFtbW1xdXV9eXV5fYGFhYmFhYWBiYmJkYlxbY5eVpKejsLOsrqOpp62gqLWqkI+co7K6raqroaKZepyisKSlsamWm7imo5SYqZyOhoqJm6KQrp6klqigoZKXmZuui6qWj6iZqIyYqI6euLajpZibjYl5gZSMm5OKlZGTkI2RlqGLnJynnZ63o3+Dr7WisLB0pL+ksqB4e6GstL2Wd66loIqAqX5kXGJ2n46jnYOWfm6UtJyjqK+spGWfoJR0epqXcICZqZhsgKOoimWcpZyQl5iWi5KbkISdmpCUg5KHjo6SiYV3a5CIdodxfIaBgGFpiYuVk4xbdpWRZ2iPjHF5opaWZHeXhoB2l2iCiYJueX5qcGVfdW9ra2dcZWNhYW9SWj1NTU5SRj1AVEI5MS8eHyY0OjMwNjY3ODw7PkBBQkZIQkdGSUtMVFVVWV1gaGdnWFFJPERHPDlWUltgYWJgXmBfYGFhX1xdX19fYWFiY2RhYmFhZWRjaGReXWaclqajobCxrKuppamtpKetpJKWqrSusaWZqaaql3OLna+fqKunk5a4n6CPnKSekH6IiJqejauapJWnop6Ol5GehXSuj4ilmqiRlqOIm7mzp6CZmYuJdXeTjZaTipORkJSMj5OfjZmepZibspaAjJu1nbSNko+9p6F+p6J7pLC5go6Pp5+Ei4WPsamvjImWopl5gIushpydoqirqYiVh5l3pZt6h5yBl6eCgXudsnqKhqCXmZSYloGQlpaEmZpjeYeQhI2PkouDbnGQiHqBcYCBhn+GdIeFlpJ4lmiTdKCadHuZgp2ahJh9kYiBgphpjIyEanh6cHBnZHhtaWxqXGRpaWVyW1xIVExRQEU1LVlUVDYpITA5PT42NDM1Njg7Oj0+Pj9ESUBJRUpLR1JYWlhbYWFoZllRSDlFTDs+YlZeYmRlZGBhYWBiYl9dYGFhYmJiY2ZnY2JhYGVkY2djYWFonZijn6aurquorKCosKenqqWZlK3FvK+glaWntJ2Pg5yrnKaioI2Qvp6ZjZ+aoZB8hY6ZmIisnaOWoaGSjZSJhoCRqI6Hopyjk5adhp65saedmpOPhXB1kImUkIqUj46bi46RnZCVnqOUnauHn7SJtJqui8qIq6+Jt4WNsIOysIWpjqeYjZ18qI9ye3ebjqWWZ5SkebSMn5+nqZOZwoJ/q4iYoXGegJqlfZeFlbKAoX2gk5+PmJeAjpObiZiSi3yFk4aNlJOJg21zkoaAe3KGgYR9hXWGgpiBj8VmgKmHj6JqnYGel4CZgIqMg4iYb42ShGd3dHt2Z2h1cGdoa15ibmxmbFhmRlxRTDJFNDZNYGM3JjQ8REdEOjYzNjU4Ozg+PT0+Qkw/TklKS0NQWl1cV2JeamxcUUU9S01ASmRYXWNmaGdiYmJiY2NgX2JhYmNjY2RpaWNiYmJlY2FmY2JiaZWXop+wqKmopaugpLmxqaummpSeoqSqopWkqbWir3+gppylnp2JlLyZk42gkZ2PeYOWlpGIq5mcm5qihY+Md5ucjqCRiJ6km5WYl4aiuKylmZuNjX9ibY+Lk5CNj4yMl4uPkZ6Nkp6gmKCnfqGnh62doJaukKCenZGGgqCNrLGIpI6rmoyafqJ1gJiTa4GqdEyqeIeNnZKbqamCqqt+hKF7eqdpnn+SbGeXhpi2iZ5+bmBjWIOXf4x7ZGeLc5l9eZZrXXyXbl9TcYVcYGx5g2BZZYJ+hIGYcaeqa4OjbnKlcJ+CnGdknmxabIh6ZVlfgn5hV1BvdmVtdHFqam5eam9sa2hXZ05dWEU5QDRHRF5rNCtJQ1FNTj04NDg1OTs2QDs7PkJPPlFSTE1CSltdX1deX2J2YE1FOk1PTVRiXFtmZmlpYmJkYWRkYmFiYGJkY2FiamtkYmRkZ2RiZ2VhY2iYlp2guaCqo6askaG2vKuuopmWn6Clq6ufnK20oaeRoJ+fppuZjZi0mZCLnoyVi3WBlJGNiqaWlpifnn6ThYaso4eckYqYqZiZmpGHpbCmopWZiImAaW6Ih4uOjomLjJGLj5Ggi5Kdn5uhpX+TgY+joZSgd5yWkKeDoqiAhquvhqV6i32Emn2icHKSh5Z7nYx5bYebi5mRnKmcj4edfIKic3amZp5+d6RemHt9k3Oibpi3tLpzkoiBgLaoZIHGuHtwlbaMcYCbpGN0rKtgfWqds35ufYeDj4KLl3GAo2xzpHOegn2jXpyZs5Zve5ees3RyW56ygmlib3N1cWhuWGtrcnJkW2ddYUtEPUQ1UUFacDI8UkZfSlM9PDM5NTo6NkQ7O0BJUD9UTU5RQEVfXltZWGBge2RJQzhMV1VWYmFaZmZra2JiZWFkY2BhYmBkY19gY2tuY2NkZGhkYmdmY2holJaVo7mZq5yToI6luLWtraCaoZuio6Srm5qxrKqSl6CYoKSZmpSeq5uLiJF4i4VwgJaNio+hkJOUnZd9kYqOqKCHmI+KkqKTm5qMiqinpJ6PloeEfmt7h359j42Di4+PiY6TnoGVm5+coJ+LiXecmKKNoHKii4ipiJynkZeprICujH16oJl5o5N4gHOXiIucfZWfhpuOmZynh6NkoX2JlpCbjGyeaJqNbpqZe4CKp31yZ3Oqg52Cc6pnlJpdm4V2hJ1oqmqBuGZcqXCBnGGVjF6ndnaJioCdaJp1h5OSmI5/nm2ZkGqmmVyofne7an2pWo6EXbNnW25xeHdraVtwaXd4YV5kVmFBUEVPN1ZCUm00SlpZXk5aREAxNTE7OzdIPzpDR1U/WFJYXT5EYl1WYFFhZHxpRUI5TlteWWRmWGZnbm1iYmVfYWFfX2BgZWNeYmRucWBkZWVrZGNpaGdraZWciaq2m6iJY5WcrLqysKudpZuap5+drJmdsKeqnZaimaGfmZaWoKOZhomNaYiAcXuXiIyWloSSlJiPeoqElqOciZWPhoudkZybiI+oop+ajJGKgIBpgYZ5f5aMe4iNjoeOlZl+kqGeoKKTmHJon4qgj4xwkoyCqYiZoKSpoql9sK2koriXdqOzoqN/iJR4nHqqmX+ij56cmImYcqF9hY2wtX1rmpGheH6YtKOjq6iEmHuafJyafnOqWl1ve5eLeJ5iTH97e4VkephCTZ9ZompyfI5ugYqEmXabeYeJsbN/fpqSpnR+nW1xfJRvmXJpo12VdkhlY2BzcHx9bmZfa2h1e2JjX1BdVlxUVkBZRVFnRVJWXGFYX0lEPUI4QEE6SUU4TEVYQVZRWlZERmFcWmBLYG19cUVDPFVeYlplalZnaG1vYmZmXmFgXF1eYGhiX2VkdmxeZWdmbGRlbGhoa2mUnYGxrpmEU1+hp7S6s7OomqKLmqmbnKeSoKujoKeOnp2cmpmVmKGdloeHiXeFgW55lYWQmot9kZOWiHKAiZKgm3KSkIGImZSfmoSOqJuZlYuKinyEbISFcYGhjHiFjYiHkZeTe5Gin56jiK6GfbWEj56de6aWeqmClp6Ri6Kefqdod21+mXOgc3F8nYaZb5KCrXyjg6efm4GkcF6paHWjY2+lYZzTj3x6mXhyc2OihY9+onKijnVrj7OLYIKYinOqsqe8f3eDbX+/pqq0XpxvfnKXb4FzonJepGd0pmBopmya05h6gptudnmXa5t5dpdybKmlZ19keXB/hGtnZmNtdXdmX2FRWmVQUWFIV0lUX1dTW2RqW2VRRUNLTEpLQkpFOFBAUE1YU1hPUlFgZWVpUmR4eXdJRkVjXWVaaGpTaWhqb2NqZmBjX1xdXV9oYmFoZXxkXmRnZGtkamxmaGxomJt/sKxUXEt+qa+ytbCyo5yYhJemoKCjjKSnn5eoiZmXmJOZk5Ggl46IhXtwfYRofY+Dk5qBd5GOj4lwf4ePk5JsmJR8iZGSo5WDjqmak5KLhYl5g3aIgG6BnoZ3gJKFh5iglXmSoqOZoImzoaK2i3qsp6SupXCpgJuRhoGdk32kgKKZhphxnoSira6Jl4t/jKSNlYOvopV2tba1yaJ0lIuCnmGel6lteZWGoJt1oYd3oH2QloqBb0xmo5JwmohzpXt5dGKDgmx+oGxyZGCccn90l2t7arS1tMamc5h+epxqmpqrdIGabHN3l2mZeXSXcVBEfbNeaXVqeIdma2dic3RwbVVcUlhnT1JoSVVMWFJVXGdrblVnV01KQUpNSkhKTkFRSlBkY2ltZXRyc354e251iXp7VFFPbV5oW2tpUmpoaWxnbWZjZV9cXFxfaWJkaGt7X11kZ2NqZm5tZWlsZaKciK+nhWY/lKGzrK+vtaKij3+Wp6Kho4ukppybpYGal5aNl5CPm5OOiIN5anmGZYOMfpafeXWPiIyCaYSFkoOMhZ2NeoyKlaWSgpeol4yRi4CJeoB9i3lwj6CGeYGUhoiVnpR+k6WnnJaWhGdueJxsomR8caV4nJhwaKeCmI18pHqgloOWcp92gImUlY+5bY+KomJ9maKWiW5zaqtrdaBtb6Zgm2mLkGmWh5qVdaKAfZpfi4WMdW+IYmihZZ5/aZt1cGRniIJucqJaX1tjoW5diYxwe390cmSlbniiZGanaJdyi5huoW9SiI9uoF5kp1SLXVSYbW1yanGBbXBoa3hza29RVlVVZVlTbUlYT1xIWGhoc2pZa1ZQUkVWXExYUmFVaGped3V6fHB8fHKCe39zdo2Ag3ZeUXNhZmJxZ1BraGhrbG9oZGdfXV1dYGpiaWl2dV1cY2hjamlybGZrbWOdpZmmemV0bYunrqWqsLGmn4t/lqqcnaSLoaGZoaGAlZiTjZqPi5eQjot7hnGAiGiLinyXmnN0iX2QfGWCh5WKiZaZgnyIhZamkIGhq5CFkIqBin2AgI5zaY+lhH2Fk4yHl5+NhpGppp2JpniWnH6liZaMspmekYOvl5+leZeJeql0po+Emm6looyShIyDvG18pa+Ch4aHlJedoX2me3KolKCWZ55+b6xjloqVkneobKmigYl2h4J3q5GmiGuRsGt2s4ypbIuGb2+gnpGUYX+ri6p3gX+Op593n32FpJWdoGmah3WsZp6tjLZzdr6Mo5NZg6aNq2B1cXNve3VwYmp+bmdsU1VZVWBgXGpMXFFcSV1sbXZgW3FYW19aZ3Nlbm9xY3F0YHd6fnlyeYNyg36Be3uMgYKAdmJ5ZGNuc2RSbGdnb2xyaWZpYV9eXGFqYmxsem9cXGJpYW1pd21nbG5ilaaqnIGAnqSWqqqeqKeuo5iIgZaqmZ2jiZqknKidhIuaj4WckYWSjYyMdIV6iINvjYR9l5NzdYZykYNuf4uShoaUj317goWXpY1/paWNgI2JhJR1goeSb2yLqICCi5ONiJueiIuSqqKgkIB0lJeIfoF5lK+kf4GccY+GeZKMhYB7cqeMcX19epeWm4SNeHt9fYiUlZOLd5GZoKGEe36Ja4yFW3l5c3lwaW5+kopyf3SBj5STcYWDgmWNf1+BgIx3dnSUdW97b2+JboSGXndpeI5mgoOGj6qcf3R9l2qJiG9/dXyEdW1sZoxzd3uXd4Raald5j2htd3Jxb3d4b11shm1pZ1ZZXldcZGtkVWFUXlFfb3d5a2p3ZWpqanV8cHF0c2FvdWJze4F4dXmBdX+Af4B5i4WCfXttf2xkeW5eV25naHVreGppaWRcYFpjaWVscXVuWltia2Rsa3ltaGxvYY6Vuamni6Gim6akmaSdq6Kfg4OWqpGdoIiZppqomIKBm4t+lpSHjoqJjHKCfI99fo+EepeOdHKEcJWGe32Si4aGkIV4foCGmKOMe6egi4WPj4SVgoaOmHdxhKqFjZGcj4eenYaKmqifoKqDiY6Vm39+ipetqJCTp5B4cZ6Tg3uTcH+phnB9lXFqb3yBn4t/kY6LaG5dhIyMnJygj3OWjIhxdGuCdnSAWXJuhpGCfn6LaV1pY3qFg4iAX2l4e5x8g42DdoGHg2l5jIhrYnFyg3dfco2CipColodnjY+DbneLgm+Di3duZGZjeYJ6lVpbaWZtdlt6eHd0bXNygmZcbYpra2JZWF1ZWGtxW15gWV5dZXJ9enNvdGNqaml7fHJ6d3RkbXRobHt+dXp8e3l5f4B+b4WJhHt9c355cn9oVFxyaWx2cHVna2dkXWFZamhranFybVdbZW1sZ3J5b2hqbWCMjKqxoZCjoZqfnpiemaiioX2ClquMnpSHmqGQpJR/e5iEfJKZiIiGhopyfYCLdoWLgYSWinJvgHKYh4N+koOEhoqBeoCDi5qfj4KmoIZ4jZeIlYuLnJeEg3qsgZCXmZOJnZyGh6Gqn6Gio4uIk5udo5mWqqKop6GTnImYkHx5j4+FqH5+kpGSk5yxpZqUnY+NsZKYhKaMjJacoIqRnIOJkoprfI52d2WChpCKfYmdhIeLj4eIgIWEkHd8e3Wbo4mIi5+LhpV/fo2CgXZxdIaFf3iJiIuRp5GEh46Ig4yQi3uFiYeNf3VqgYN7eZlpcWhgc4pwfXp3dm92c4FcXm+HZ25fXllaXFJncVVjW1thbGh0e3xybnBjamlof3tteH5waG9wbGaAe3KBgHd/fX+Ee22DjIZ8enh8fnqDeE5kdmpzbnF7ZWtlYmJgW3NmcGZycWxVXWx0bWh4enBnaWtljYieup+WoqGYlZmYlJikoJ16f5ipjZ6MhZ+cip2WfHiUgnuOmYmGg4SHbXiBgHKAh36Ik4Rta356l4eEg5B+gIaEhn2Hg42bnZGGqZ6CcoqPhZKRi5yRfY16qYONkZeVjpyWhYWbpp+imp2Gg5KamZmQmaagpp6ekJeCk4t4fYiPhaZ8fI+QkYWYqaCck5yOjamNkYCejYmUm6CDj5d/h46DcHiGcXRhfoSPhnWMmICDj4KGhH6FhJVueXZ1k6OMjYabhYWOdYGMfn1yc3yJhHt5jY+Fk6iQh4SPgoOJiYh1hIaGiXptan1/em1oa2xmXnl+Z3x7dnR1dXp3XGBwfW10YGNaW15RZm1TZVpdYWpodXp+cGxsY2pqZ4B/a3J/a2pzbnhug3luhoB2goB9hXZygo2Hfnt6fH97gotgaXtrdWhpg2VqY2BpW2N1aG9idW1rVGJxeWVveXpyZWptbYuKn7iaoaSfkpGWl4uan56denecpZCbiYaklIqYmXh5jYV8iZGDjIKCgmx7f3hygIV9ipB8a2h9gpeJgYiOfH6GhId8j4CPm5uQh6acf2+LioyShqChioWMfKeQh4+SlpOWknaMo6ChnZaaf4GQmpmTjZqioqSbmJGcf4+GeoGFj4ihgH6MjY98l6SgoJKZj5CmjI+Bm5KJlJicfpOTfoeOgXZ0gnB2YH2AjodyipZ8iIxxjH6ChYWPaXhyeY2Zk5CAmH+JjHODiX19cXp8jIV7e5KOhJemlIyGkXyEhYaEdICBhYV4ZHF6fnh5cGtqZl59c2d8dXZzfHN/al5gdHZwd2RjWF1eUmpoVGVYXmBnaXZ4gXFma2NsZ2V/gGptfWdtcGp9d4V6a4uBcoGBfYF0doKMhn98eoCBfX+PanKDbnRpYohpbGJfcVV0b21uYHhobFdqdHZjdHp6cWJrb3mJjZ+zkqWlnI6QmI+GnKCam3t1o5+Nl3+MoYqImpV4e4aHfoOJfoiCgX9wfnp0dYKFfomQd2djfYaXi4KKjXh9gI2DeZaAlZeVjZWfmn1vi4GQk4alm4eMiYOmlYSSipWXkpF2kJ2hoZiUmHp/jpiXj5eanaSemZOUnHuRh4R4hpeOnn6Cio6Mc5einaCSmI2PoYyLg5eYg5OWmn+YjXyJjYF3cn5ue2SAfIuGcIaTgJCCa4eDgYCJhWZ2b32Ik5mNfpR5jIl9gYl9fHKAeYuGeoWSi4yZo5eDhIx3h4OCgXV6f4aDc153d3xzfXdma2NgfmlqdnNzdX1xfGNjYXNudXJtYVlfXVprZFJiV19gaGt0eYZwYmpjbGZofIJraHRobG9of3yBeWyPhXGAgoJ/dHyDjIGAfnqCg358kG11iXR0bWWKbGpiY3VWg2lwbmB4Z2xhanZwZXh7eXBfcWyFhZCdrpimqJ6NjZeHhZ+Slpd8dqibiZh5lpyLjJiPeHuAi318g3uAgoF4c3h5c32Ag3+IioBkXn2LlYh+hYd0fX6Kf36XhJaTloyjoJd+cYd7k5GKpo+MjoqSoJGDkY+Tl5CKgI6XoJqSkJJ0gI2SlImdnZ6nmZiOlZh1j5CLbYaZkJp7h4iQiW+XnZmhk5WKjJ6MhoGTnH+Tk5aHmol8ioqBenJ6a3VsfH+Lfm6FkoOUeG+ChH5+i4Blc2p9gZeYhYCOdJGJhHmIfnZ4gX6HgX2EjoaNlaWReYWCdIiGfH9xc36FgWxfeXR4cHtuYW5iZHthbW92cnd3c3NhdmBvbHVub11bXl1dal1PXFdiYWhtc3qJa19pZWpjaHeHbWZsaGlsZ4B8endukIhzgIOEfXSBhop6g316gYR9fI5yeYt5eG5sh2toX2lyY4docW9ldmdtbGF6aGp8e3dwYXdti4GZmqqgpKidioqRhoqdipSXfHasl4yWfJ6TkZaUiHZ9e4p8e4B2d3+Ab3Rzem+FfYGAiX58YVx+j5GGf4SEc3qAhnqPkYaRkZuSpJqTgXyBfI2KkqOIjYqNl5qNhZGYk5WOiIiLkp2TkIyNboSQj5GJnpmioZeXiZeScIubhWeHmo+Ue4mFkIpwlpqToJGRiIqZjIJ/kp99ko+TjJqPe4qFh3RzdmtxbnZ8i3RuhpGOknF0gHyBgoh8ZXFten6blH6FinWRi4J1iXpvgX+BiH2FjYqGjpaqjnuIfX6KhXd9b21+g4FiZ3dzdG56YV1vYGp0XnBqenl4bHJwZXldbWxzbXNYWl1fYWpaT1dXZGNmcXF/h2VdaWhnYmdxjW5kaWdlaWeAend1bo6Fc4GBg3x1goiFeIV8d4OFeoCKd3+Le3tyeYNqa19waHN/a3FubXFnb2tle2Juf3l3cGt2d4l/o5iiqKGmm4iMioGPnIaSm3SAqZSRjYagjJWTkH9ze3aFd3h/cnN7hWtyb3ltiXZ/gIZucVtZfpKNiICBgXZ1gH9/oIaPipGcl6CTlneJfoCMiJydiY+GkpeWhYiUmI+Wi4uMjYydio6QhG6Ji4+RipyWoZyYloaYiWyGpYVnh56Lkn+MhIyBd5OYkZ2QkIiJlI1+fpCZfJGNkI6akn2LgINvdnBsbW9we4Zpc4OOmIpwd4B1gomDeWdzb3aCm499ioV7lZJ7d4p1cYt8ho17i4eFio+cpYl8hHaBin93d2xpfoB/XHFycW9vd1ldb2Bval5vanx6cG1tam13YHBva3FtWVhgYWFtV1BTWWVmYnVvhIJhXWttZGJma5JtYGZmX2drgXRxcm+LgHR/goB5doCLgHmGf3eHhnaDhXuHjIB7dop/anFifGKFfG9wbHRqaG5sdndfcX54e3R1c3+CfqWVmq2fp5aFjIN+lpSCjp50ip+TkoWKmoyVjYt6cnd0gnByhXNxdYhsbmx1bYh3g31/bW5VUYGrlIeCeIB2coJ5gqCCkYGSkZebkZh3kXqCjJKkmpOOiJSYkoOGlpiLk4uIjo+InoSQin1zi4WIj4icmZ+blpWAlIBph56JaIehiJOFkYSKcYORl4+ajY+Mi4+Nd3uTkXuOi42Slo18iHyBa3dqbmtsbXp/Ynl+jpaBdnqBd4ONfXpodW11iJeMgImHe5SRcnuGcXiOe4uNe4l+hI6Rn5+GfX14gYp8dm9oan+Ad153b21rcHJVXW5hcWFfbG55cGdwZmZzdWhxbGF3ZV1WZWBgcVNQTltlZFx4cIh7XlxocWJiZWWRaV9nZFtnb35va3Fzin12fIWAdXZ/jHl7hoB4iINzhoV+jIyEfHmVeGZxaoNfh35vb2t6YGltdH90X3N8eIZ3c3OFfHmhkJqxnKWOgop/gpmIf4qcfoqYko6EiJeOjo6EdnR2c4Bwb4VzcHGDb2ppdW2Cbn18bXVzUk6C38mS1pN8b3SDdYOfgpF2lJCYm4+Ye5NyhZCfoZOTkImSm5OFfZWVh4yNh5KNiZx/joF4eox/iIyKnJucm5aUeo53aYqTiW2JpYaTiZiDhmOMkZiNlImVi4yJi3B6lYl8jomLk5GKeoV8f218ZXNva2x6eVyAeY+OgHt9fn+Gjnt6aXVrdIyQioOGhn2WjWx/gHCBjYCOiX6Ee4ORlpubjH13eIKPeHJrZW59gWppdG5naHNsU15vZHBaX2xyd2Zra2JneHNvcWNfd2BhVWtfXnVPTUtgZWNceXGKdFxbZXVgYWVkjmNgZmJYaXJzbWtxdot8dHmGgnZ3fotzf4Z+eol/comHgZGKiH1+mXZlc258ZYd/bnBrgFprbnh5cmB2enuNdnJ2inZ5n4ybr5ugkIKFeIiUfnuInIaEnpCOhYyXhJOOh4F0d3B5cG6Eb21ufnJjZHhwfG56fGpobGOkmsHcru+ic2t1g3WEoYSRbpWPlJ+TmoGRcIWLo5eJjpWKkJ2Vg4CUj4SIj4CSioqXfod7dX+JeIaFjpual5mPkHaLd3CIiox+jKWFkoqdhYZei5SXiY6IjYqKhIlsfJeCfYiGipGPhnaFfn5rfWN4dGpveHNYiHqRh4V6f3+AhYx+emZ0aoGLj4uEhICMmIZsgndviZKDkYV/gnuBkZeUm5F1dHiGjHVycGVzd4Bgc21vYWh1ZlJgcGdrVV9udHlhcmNgaX1xcm5bY3JhY1ZuWlx3TExMY2VhXXZzim1bXGR4XmBkZYRfY2NeWWlya25rcneLfXN3hIF4eHyJcYOEfH2Ie3SLiIiVhox/f5hzaHVxeWyLe250cIBXcHl2eXFkdniGjGh2gIlxgJ2Imaeco5KEfHCMlHd4iZyDhJ+NjnyVjH+Zh4R7cndwc2pvgWtpbHx0XmB4dntwdHpnYGV869q1ycPciXNsc4B2ipqIjGmXj46ck5GBiHCFiKCOhIqVioyXk3yNkoiCiI96kYuGj4KAd3iDhHKHgpOblpSYho12h39xhoOKiJqkhJWNn4SJYYOVj4WIhYiMhoCHaH2Uf32ChYmOj4Jxhn9/cndndnJpdHdsWox9koKFfYCDgISKgnZidW2KgpGMg3+Ak5J+boNteoiRiJOFfYJ+gZOUkZiKb3J6jIV0a29pcHZ+XXNoblxpdV9SZHFoZlNfcHZ0YG9gXGiCcXJqV2dpY2lYbVdbdExKTGVmXmFyc4VpW1xleV5eZGd6YGRfXVlrbmVuanR3in5zcoF+e3Z6iHSFg3x/h3Z2ioWPmIGNgnuTdmx3dnl4knVud3p9WHmFcX9uZnh2kYJkdoaFcYqWhpmhm6KKhnNvkotydo2afImZiIl7n3+DmX+BeHF0bm9kcn5oZmx3d1tfeHt6cXF/aWFnYX/Vto6RpnhucXd7cZKQjIZqmI2Im5CKhXtoh4uZhoGSkIaGl417jIyAgImNe5CNfomFenV7g3txhoCVmY6SlIKJdYSIeIWBjJWeoIeWkKB/iGF/k4eDh4OIjH9/gmZ9kYB+f4KMj5B/bYN8gnRrbXd1dHd2a2ONgY5/hH98hH+FiH9wYHRyhn2QjoN9gJKKenGEZ3uFjIiNhHyFf4GVkJKUhW9weYt/dGxtaWp3emFnamlYa3VaUmlyaWJQYnJ4bGJlXlpqg25zYlxnX2VtX25UWm9OR05mZFxmbnKAa1pbY3NfXGNrdmRlXV1abGxibWpzdoaAcW9/fH10eIZ4hYN8gIh2eImBkpV7iYZ2iYFveHl7g5JvbXuAdl6Df3OBbWh6c5RzZ3OHfHKSkYSan5ughoZ1dZR+bXWSln2HkIOKjZl8jJp2fnZxb2xqYXR8Z2JpdXlaYHd7eW1xfmVjaGhXnY9fcnOXvMSEdnGUiI99cZaLhpuSi4dyaoiPloB7lIyBhJqMfIqFfHuJi3+UiHWJhnZ3fYFydYaBnpSFlI+Dg3KAinaGfYuanpqHlY+dgYlmfZOCfoSCiIlxgX1mfox8eX9/h4uPfWmAfYN2Zm95eHN3c2xrjoWKgYqAeIKBhYSBa19zeXt+jouGfIKQgX5zgml6hImMhoV5hH2CmY2RjX5ubXuIfXZ0bmZle3RiW3BiV25xU1NtcmhhTmZ0eGZgXlxZb4Bvc1llYl1qbmBwT1lrUURTZ2Baam5tfG5ZW11tY1picHZkZ1xdYGtpY2xqc3aBg3Btf3x/dHWDeoOCfIGFdn6IgZaQeISLdIGIcnl5fo2Qb297gHFpgXh6fm1se3WVa2p4hHRrk42Fn5igmYSIbn2Mdml3l45+gImClJeJeY+Vb3pzcGxpZGBzemhfZXF6WmByfHlncXphZWWPsbJ3S2JapdnQlnF7kIqPd32TioSYkIuFbmuFkpF6eZKGgYSYinyGf3h3iYqEloBvi4hxdX56anmFg6WQhJONg39vf4R3hXqHnZqVjJSRlYWIcHuSgnyCgoiDboB3aICEeHJ/gIOKh3xlfX6EdmNwc4BpeHBvdZmNhoOKfHZ4gIV6g2tccn9zgomHin6HinuJcoJucoWIj4aGc4R6gpqNjoV5bm9+hH92emRmaHtvXlh2WldwbE5XcXNmYEtsd3RhXVtaWXR9c29XZ11manJgb05XaFI/WGZeWnBraHpxW1pYa2VaY3B5X2hcXmVsaGVraXF3f4hvbH9+gHVvgnp/gn+Cf3aBhIiXiXGCjXF7hnx6eYOTjHVqeX5rb350f31vcnt6k3BvgX54Z5KLg6GZnJGChWaGg29neZWIfX6EgZiJgXyNjGh4cmtsZl9gb3ltX2JveFxka4J6YXF2X2Vl1Oq9izI6PouOf3F4hYeNjXWClYx+kYyLf21shYyMdXyPf4WBlYh8gnhudoeEg5d3boiFbHV7dGZ5goOni4KOi4R+boB2eIV7iJ6SjZGTk46Lh397koZ3foOMgmt/cmiAfnhtfHyCioN3YXmEgXFkcWh+bnVxdYKbi4B/hYBzdX6Bc4FvXG5/dXmLhIt7h4F9iHl7cm2JhJGFjHOCeoCXjIyAdW1rdoCAdXRbZ2d1bldWe1JZcGRLWnJyZVtJcHhvXFtbWV10fnRoWWJbZ2ZvZGpNV2ZRPl1lXF11ZWB1cFpZVG5kWWRxeVpoXV9mbWdpa2lwd32ObWmChH55boB8fIF/gnp1gYGNk4RwgItud32Ae3uHkol/aHp9anN7coV6c3d+fox6eIR9fGuMjYSbnZaMgYBsjX1raH6Ni3p+foOTgn59iohrdXFnaGJbYmdzb19ha3NgaHCIemJzdF5jZJugj25cNVqvtXRpgIh8koZ1hZWFc46KiXZwbIWDh3V5iXiJfJOHeX5yZ3WJfn6Yb3GGfmh2eW5meYeEpIeAhoyJfm5/d4GCfo6biIOVkpmKi4WJfI+IcHp9hHtofmxqgHt6anp3goeAcmB3gX5xZHJndoJtdXuGlZGBfIKBb3d6fHV/bVlwgHd1jYOHeIh2g4l7eXRvi4GRgoZzf35/lImKe29uam2BgXRtXGZkcnBQWnpNW29cT1tyb2RVS3N4aVdZWVphcIB0YF1dYGdkaWlmTlloTUBgY1tgdWFddWxYV1N0YVpkb3JXal5iaGtnbWxocHd8k2xohIp8fHB/fnuBf4J6d4B/iouDcXuIb3F3g397iYyPg2p9e213eHaKd3x4gIGHf4N+fnpthIyImKONhIN6dYt4a2yDh5B4fXqBkX9/foqDcHJwY2ZeWWZfb29fYGdwZmpviXRhdG9bYWRqdnuAv5ympMi4cYWDcpJ8d4aSgnOQi4dxcm+De4N0dId0iHeUiHl5cGN3h3qAk2lyhHZnd3VjanyCiJ2Bf3+Oj31zgHWGeoGTkYR6l4+WkIiCiXuIiGt4eX50Z3poa395c2l6doCDfWhgd4d9amp0aHuAaXaBjJGUfnp+fnB8dnx0f2JWeH5zc4uFgn2EcYeJeHlxcYSDjoB/en59do+GhHdqcWlsh4Fxb1xmYXFtSWR1S11tVVNZcm5iUU90eGFSWFhdYXCCc1thXWhlZWRrZFBbcElDY2BbY3BeXXdoVVZVdl1bZW5oVmteYWlnZW5uaHB3epNtaYiMeX1ye355goGBfHV8g4iGg3B3hHJtd4KCfomLk39wgHt3eXqBi3SDeH6BgYKEeoB1b36Ki5ueiH2FeneFe2d0hYyPeX5/e4iFg3aPf2dvbl9kXFhlWW1yYWBgcGxraIluYXRpWV5kboB3qdqqx4aHsnGJd2+MdHqFjX96kol/dHN0fneAcHF/bYR0lIV4dWtgeoJ5iY9mcYRwZ3ZuW218gJCTf4B5kZN+eXxuiXeCko2FdZeLko+HhYV7f4RsdHZ+bWd2ZG17dW1pd3Z/f3xhYniGemh1dWJ9e2d1ho6NlXt0gHZxgHt9bYBaV3V/cHaFiH+Aem2JhnR6bHaBhIV/fH55fHSLgn50aHRlboqDbHNZaF5zZEdtbUtaYVdWVXdtYlBSdHZYUFZYXmFxhG9cYGNtZGReb2NUXXJGQmVfXWZnXVt7YlFVXHVbW2drYVZqX2BuZWZrcWhwdniOdGuOjXV+dnh+doGDgXtzfYOIh4NvcoB0cXV+hYGJjYp7d393g3t8hYd4h3x9gX6EgHt+c3Z5jI6gjYl6iXZ0g3hefYWYi3iGg3SFhoR3iXpibmxbYltbYVZpc2NgW2dub2aHcWFxZlddY2x/fMrOh7mham1timxxg3F7g4l+epCEeXhzeXV1e2psdmOEdZKCdm9mXn2CeouKZXKCa2pxY1hteoWbiIKBc5eUeH99b4lyhIuNiXOYj5GJhouDe3l9cHBvfGZocWJteHFqa3F4fXx6XWV5gHhpdnhmgndndIeMjpR9codqb36BeW99Xllzf251gYt8gm9wioBxd2l4gIKAgnd+c3t1h317c2dzYW6LgWtxV2lddltHbWpMVlReU1V7a2FPVHVyUFFUV15idIVpXWBsamZjWm9hWGNwR0BnXGBlXlxWe15OVmVwWVtqaF1XaGBecmZrZ3FncHN3hnhulYp0f3p4fnmCh4B1cX+GhY6DcHB7eHZ1eoaFh4yFenx/dIt+fYaEhId/fn59h398eHZ4eJGTn3+MfYttdX94ZIKGlYVzkYpvhYWBeoN0Y25qWV9bXF1UZ3JkYFhkcXJmgXNia2VXW2Bqf3e+rnugtm5ic4Zoc3txeIGEen2Lfnd3cnZve3Zlam9gh3WOgHNqYl5/eHmLhGZxf2hra1pWb3eJo4GEf3GZk3KBeXaEb4KDk4l0loqOiIWJhX14dHFuaHhfamxfbXZqZ2preXd6dlpnfXx4ZXN+boR0ZXWFjYaWf3CMZ2t6hHVudWJdcX1sdX2Me4Jmdod9bnFpdn95f4Bzfm17fIJ7eHFmbGJtiX1sbVVpX3ZVSmlqTlFOaE1Ye2hhTlV2a0xRVFVfZnWDZl5gcWhnYldpXVxraEpEallhZFZZVXlZTVZtallda2RcWWVjXnRmbGRxZ3JwdYF4cJmFdn9+d398hYd9dXKCiICVg25zeXt6c3KFh4mIg3mBfXWPfnyEio6EgoN6fouDe3Z7d3eanZd6iYKGaXZ9e2yDhJJ/cY6BcIWCfoF/cGZsZ1hdW1xbU2RwZF5XYnJ1aXVwZWViV1xcaIBwb3KAc4lkZHh+aXR1c3KBg3eAg3h2c3Vua3pxYmdrZ4Z0jYNuZl1ffXB7iX9pbXlnamRVV3JvjaZ8hHt2lpF0fXN9e299fJKHeJp9iIeDhoN9dW9xbGd0XGxnXmx0ZGdlaXpve3JZZ4F3dWhwgXiCdmJ3hYt8lIFvjGpte4JxZ3NmYW56Z3N4i3x+YneDd2pscnZ7cXt6dH5nf3+AeXdvZGZibYV7bGpVaGJvUkpoak9LTm9HXXtmYU1VdGNKTlNXYWp2fmVdZ3NpZmBWY1dicF1MS2pYY2FVVFVzVkxYdWRZXmtgXFpjZV92Z21icGlzb3J+dXSZgnd/gHd/f4aFenx0goR+l4VucnR8enRxhIWPgYB6i3V0kH98gZWOgIWEfH2Mhnt+gHZ7o6WKeYiFhGt1fHp1g4CLem6Ec3mEfIGDdW5qaGVWXVtaWlNibWRbWGFze2lobWlgYldfW2qAamtvgGdrYGh5eGpzdHNtg4B6f3x1dG16aGp5al9lbmiBdpCEaGVYYndqfod7b2pwZ2ZdVFhvZ46od4F6fJCOenZxf3B0d3qQgXmWdYaDgIWIdmpxdWdnbltsY11tcl9nYWp4aHttW26CcnRqb4F+endhd4WEeI+Fc4hyb3mAcmNxaVxxeGRydIl8eWN0gHFoanp1cm15eHZ5ZIR8f3l3cWRkY258fGpqVGhhZVNKa2dPR1FrRWB4ZmFNU3JdSk1UWmVrdnplXm1xaWRdVmBWbm5XS1NoV2VeWE1VbFRKXHlfW15rXV1bY2VgeWhsYG9vdW5wd3V6mH12f4F5gICHhnp4eYJ+gZOEcXR0f3l2dISIkX2AfJBrc5WAe4KfhX6HfYB+hoKAint2hKuff3qIh4NrcoF5dYB+gHRuhm58f3OKgGpvbWRkWF9aWVpUYWpnW1pedIJpXm1sXGFXXFxsgWVydH1paVxrdnVnc3ZxbIR7fXx4dXJseWdpeGZdZXNneneTgWNjVGVwZ4KFd3dnaWpgV1ZZZ2OPp25+d4CLjntxcn5oenB7jn14kHKEfn9/hm5kdXJkZ2dcamFcb29cZ19tdWR6aF10gG9ya3J8fnV2YnSFi3uIh4GAeHJ1f3VhcG1bcnRjcXOFfHVlc4BtYW17cGtqe3l2c2aGdnt7dnFlYmVtcn1pa1NnXVxUS3FiUEZWYUdidmZhS1RvV0pMWFhna3V6ZGVucWZkWlddWHZlVEpcYldnV1lIV2VQSGJ4Wl1fbFteXGFjXn5pal9udHhtcG52g5d5coGAfH+JjIZ+dXWGeYeMfHR1dYJ5enqCjI59foSJaXOWgXqKnX1+hXqBen98hohzcY+tjHt7h499ZHGHeXN8enVyboVse35sj3picG9iZV1lVllZV2Nma19dXHKFaFhwblteWFpcbHtjcHd1bGJZbHNzZ3R1b2yDeH5/eHZtbnRkaXRlW2d1ZnZ2knlfXVJmZmqDgnR+YmRpXFRXXWJjj6RoeHSDhpF5bXB7aXlufIZ8dopzgXl8eH9oZHZsYGZfXmleXHNrWWVdb29iemVbd3xrbm5veHlzdWRzg5J+h4OJe3dvcn5zYnhkXHBwYnFygn10Z3KAZV5ud2llaHp8dW5vgnV0fXRyYl9mbm58ZGhTZ1hXU0x2X1BKWVhIYnRjYUlUbVNKTVpXaWxxe2JtbHNjYlpaW2F3XFNMY11YaVNXR1lgTUZpdVheYGxbW19iYlyEaWdhbnh5bG9qdoGQeG2Dfn+Bk4iEgXZziHSMhnRydnWCd3x9foyQgH6TfnB3lYN8mZJ5gIB4en6AdIiDdHCYoHp7f4mUeGN1h3hzd3Rrc25+a3h8cJFyXnBvYGdibFRaWldoY21mXFtxiWVTcm5bWlhYYGx2Y2l1amleWW1zcGxzc3NphHx+fnt2bm5sZGlxY1trcmR0do5zW1dTZWFygH9ygl1iY11TWmBcY5GfZXFxhYSRdGxse25wcXt9fXOBd4Bzenp6ZGV1aF1iWWBnWl52aFdiXW9oYXdgW3t2aWpybnhzcnVocYKVg4d+hHZzanF9bmZ3WF1sbmNyc4F6dGdvfltgcHJiYGtyfm1tdX9zcXhrcGFcZWxseWBmUmVUVlFPdFpRT1hRSGNzYmBGVWpQSVBaVWtra3xmbm9xYltaWFlscVdSUGZXVmhTVEZaXE5IcXRYX2NtY1hgYGFdi2pjZG15eGtwaXV5hntrg31/hJp8goR5fIduj4dyb3Z6fXSBgnyLj4KCl3R4gZOFgZ+JdYGAgXR/gnGHgnVvoZZze4aLhnpld4pubXpuZndwemtzdnKMa150bmFnZWtSXVtVZ2Fsa1pccIxkT29uXVZYVWdpdGhidGVkXFhtdG1vdXR4aoZ8f3uHdo9zY2RrbmFcbm1jc3iHa1pUVmNkeH19cYZdY19jU1pfWWKVlWNucIOFinRraHxwZnR4dX1tenV2cHp/dl9lcmNbXVZhY1hhdGVVX2BtZGFxXV1+cGhpc3F0cHV2a22Ek4GJe4Vxc2dwfnFzb1RcZ2tmcXSBd3NjbXZWYnJsW19wZ35mbXd+c3Nza21gWmRqaXZeZlNjVFVQU2xWUFZTT0dkcl9hRVhpTkhXVFZtaGR8aWt4a2JXXVVbdGRTUldoUVhlVFNIWlpQTXd2Wl9lbGlZYmBeXo5uYWZreXVub2l2dn9/bIN/fYeXe4CHgYl+a5OIcmd0gHt1f4J9iI5/i5NyfIqRhYefhnt/hoxzgYZzfYJ2bqSLcoGNi3Z3bHqMYGR7cGZ4cnhsbXF2gmdke2xjZmdoU19eVWdfbG5bXm2NaE5pbWBUVlNuZ3RrZXhkZFxYb3NscXp3cmyHe392m3p4a2FlbG1eYG9qZXB5fmdaVlhgbHh8e3CEX2JeZ1ZYX1djm4hia3CBh314bGt5blx3c217anZ0b3B8gHNYaW1eWFxVYWJXZHBjU15haGFibFpgfmtma3N2b213d2xphYx/iXuIbXJncX1uc25kWmFpaW90gnRzXmltU2VxZVVjb2N7ZHJ3fHdrcG1rYFlhZmd0XGRVYFVSTldkUk5bT09HZG9dYkZZaU1JX0tYbWRgeGlufmRgVV9UXXVcVFNgZk5dYVVTSlxZUFl0dV1fZWxoWGNhW16NcWNnanhxc25odnR6g3KCgnqIjn58iYeNeW6QinVsc4J0f3+HhYaShJWPeX2Mj4eRm4SAfIyFc4CBc3R4cm+Tk5OTk5OTk5OTkpKSkpKSkpKSkpKSk5OTkpKSkpKSkpKSkpKSkZGRkJCPj4+Pj4+Ojo6Pj46OjY2Njo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo2NjYyMjI2NjY2Njo6Ojo6OjY6OjY2Ojo6Oj4+Pjo2NjY2Oj4+Pj4+PjoKAfnp6fX5+fX1/fn59fn5+fn5+fn+Af4CAgIGAgIB/gIGBgYOHjI6Ojo6NjY2NjY2NjY2NjZKSkpOTkpKSkpKSkpKSkpGRkZGSkpKSkpKSkpKSkpKSkpKSkpGRkZCQkI+Pjo6Ojo6NjY6Ojo2NjY2Njo6Njo6OjY2NjY2Njo6Ojo6Ojo6NjYyMjY2MjIyNjY2Njo6Ojo6NjY2NjY2Njo6Ojo6OjY2NjY2Ojo6Ojo+Ogn99ent8fn59fX59fn5+fn5+fn5+f4B/gICAgICAgH+BgYCBg4aMjY6NjY2NjY2NjIyMjIyMkpGRkZGRkZGSkpKSkpKSkZKSkpKSk5KSkpKRkZGRkZKSkpGRkZGQkJCQj4+Ojo6OjY2NjY2Njo6Ojo6NjIyMjIyMjY2NjY2NjY6Ojo6Ojo2NjIyMjIyMjIyNjY2NjY2NjY2NjY2NjY2Njo6Ojo2NjY2NjY2NjY6Ojo6Cf3x6fHx9fn19fn19fX59fn5+fn5+gH9/gICBgYGAf4CAgICDhouOjo2NjY2NjIyMjIyMjIySkZCQkJCQkJKSkpKSkZGSkpKSkpKSkpGRkZGRkZGRkJCQkJGRkZCQkJCPj46Pjo6Ojo6Ojo6Ojo6Ojo2MjIyMjIyMjY2NjY2Njo6Ojo6OjY2MjIyMjIyMjIyMjY2NjY2NjY2NjY2NjY2Njo6NjY2MjIyNjY2Njo6OjoN/fHp8e31+fH1+fXx9fn59fn5+fn5/f3+BgYGAgICAgYCAgIOGi42NjY2NjIyMjIyMjIyMjJTO2tjY2NjamoGEhISEiF0tMDAwMC1GoaGhoaGhoJqZmpqampqKg4SEhIOEd2VnZmZmaFxDREREREFSzNrY2NjY2rCdoKCgoKOAY2dnZ2dmb4SDg4ODg4OLjIyMjIyMjY2NjYyMjY2NjY2NjY2NjIyMjIyNjY2NjY2OhX19e3t6fX58fH59fX1+fX1+fn5+fn9/f4GBgYCAgICBgICAgoWKjI2MjIyMjIyMjIyMjIyMlNvp5+fn5+qcfoKCgoKGUxgdHR0dGTekpKSkpKSjnJycnJycnImBgoKBgYJyXV9fX19hUjQ1NTU1MkbY6ufn5+fptqCjpKSkp3xcX19fX15qgoGBgYGAgYqLi4yMjIyMjIyMjIyMjIyMjY2NjY2MjIyMjIyMjY2NjY2GfH16e3p8fXt8fn19fX59fX5+fn5/f3+AgYCBgYGAgIGBgYGChYqNjYyMjIyMjIyMjIuLi4uSl5iYmJiZmZKPkJCQkJCMh4eHh4eHiZKTkpKSkpKRkZGRkZGRj46Ojo2NjYuJiYmJiYmIhYaFhYWFhpKUlJSUlJSQj4+Pj4+Pi4iIiIiIiImKioqKioqKi4uLi4uLi4uLjIyLi4yMjIyMjI2NjIyMjIyMjIyMjY2Njoh8f3l6ent8e319fX18fX19fX5+fn9/f4CBgYGBgYGAgYCAgYKFioyMjIyMjIyMjIuLi4uLi5GQj5CQkIuOkZGJh46KkJKSk4+OjI6Oh4+RkZGRkJCQkJCPj4+Pj4+Ojo6Njo6Ojo2Njo2Njo6Ojo6Ni4qLi4uMjIyMjIyMjIyMjY2MjIyMjIuLi4uLiouLi4uLi4uLi4uLi4uLjIyMjIyMjIyMjIyMjIyMjIyNjY2NiX59eHh5fH18fX19fHx9fX59fn5+f3+AgICBgYGBgYCBgIGCgoSKjIyMjIyMjIyLi4uLi4qLkJCRkZGPhI6QkIaKj4WNkJCQh4mLhoyGiZCQkJCQkJCQkI+Pj4+Ojo6NjY2NjYyMjIyMjIyMjIyMjIyMjIyMjI2NjIyMjIyMjIyMi4uLi4uLi4uLi4qKiouLi4uLi4uLi4uLi4uLi4yMjIyMjIyMjIyMjIyMjIyMjI2Lfnx3dnh7fXx7fX18fH19fn5+fn5/f4CAgIGBgYGBgIGAgIGChIqMjIyMjIuLi4uLioqKioqQkJCQkIqFjoiOhoaPiY2QkI2EiouGjoWMj4+Pj4+Qj5CPj4+Ojo6OjY2MjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMi4uLi4uLi4uLi4uLi4qKioqKi4qKi4qKi4uKioqKi4uLi4uLjIyMjIyMjIyMjIyMjIyMjIt+e3d2eHt8fHx9fX19fX1+fn5/fn9/f3+AgIGAgYGAgYCBgYGEiYyMi4uLi4uLioqKioqKipCQkJCPhYOMjpCOiYyJjZCRiYKHjYaMiYmPj4+Pj4+Pj4+Pjo6OjY2NjYyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIuLi4uLi4uLi4qKioqKioqKioqKioqKioqLi4uKioqKiouLi4uLi4yMjIyMjIyMjIyMjIyMin18dnZ4fHx7fH19fH19fn5+fn5+fn9/f4CAgYCBgYGBgIGAgYSJi4yLi4uLi4qKiomJiYmJkJCQkJCMhoyJjoeFjYmOi4yOiIaHhoiGiY+Pjo+Pj4+Pjo6OjY2NjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyLi4uLi4qKioqKioqKioqKioqKioqKioqKi4uLioqKioqKioqLi4uLi4uLjIyMjIyMi4uMjIyKf353eHp7enp8fHx8fX1+fn5+fn9+fn9/gICAgICBgICAgYCBhIqMi4uLioqKioqJiYmJiYmPj4+Pj5CMjouPjIqPjI6MjZCOjIqLjImOj46Ojo6Ojo6Ojo6NjYyMjIyLi4uLi4uLjIyMjIyMjIyMjIyMjIyMjIyMjIyLi4uLioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi4uLi4uLi4uLi4uLjIiAfXh5enp6e318e3t9fn5+fn5/f35+f39/gICBgICAgIGBgIGEiouLioqKioqJiYmJiYmIiI+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj46Oj46Ojo6Ojo6Ojo2NjYyMjIyLi4uLi4uLi4uLjIyMjIyMjIyMjIyMjIyMjIyMjIuLi4uKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLi4uLioqKi4uLh4B8eHp6eXt8fHt8fH1+fn5+fn9/fn9/f39/gIB/gYGAgIB/gYSJi4qKioqJiYmJiYmJiIiIj4+Pj4+Pj4+Pj46Pj4+Oj4+Ojo6Ojo6Ojo6OjY2NjY2NjY2MjIyMjIuLi4uLi4uLi4uLi4uLi4uLjIyMjIyMjIyMjIyMi4uLi4qKioqKioqKioqKioqKioqKioqKioqKioqKiYmKioqKioqKioqKioqKioqKioqKi4uHgHt5eXh6fHx6e3t9fX5+fn5+f39+f39/f39/f3+BgYCAgH+BhIiLiomJiYmJiYmJiIiIiIiOjo6Ojo6Pj46MjI+Sj5COjo6Ojo6NjY2NjY2NjY2NjIyMjIyMjIuLi4uLioqKioqLi4uLi4uLi4uLi4uMjIyMjIyMjIyLi4uLi4qKioqKioqKioqKiomKiomJiYqKioqKioqJiYmJioqKioqKioqKioqKioqKioqKi4aBe3h5eHp8ent7fH19fn5+fn5/f35/f39+fn9/f4CAgYCAgIGEiIqJiYmJiYmJiIiIiIeHh46Ojo6Ojo6Ojo+MkJOQkI+Ojo6NjY2NjY2NjYyMjIyMjIyMjIuLi4uLi4qKioqKioqKi4uLi4uLi4uLi4uLi4uMjIyLi4uLi4uLioqKioqKioqKiYmJiYmJiYmJiYmKioqKiomJiYmJiYmJiYqKioqKiomJioqKioqKhYB6eHl5fHt6ent8fH1+fn1+fn9/fX9/f35/f39/gICBgICAgYSIiomJiYiIiIiIiIeHh4eHjY2Ojo6Ojo6Pj4+PjoyNkI2NjY2NjY2MjIyMjIyMjIyMi4uLi4uLioqKioqKioqKioqLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4qKioqKioqJiYmJiYmJiYmJiYmJiYmKioqJiYmJiYmJiYmJiYmKioqJiYmJiYmJioqFf3l6eXh7e3p7fHx7fn5+fX5+f39+f35/fn+Af3+AgICBgYCChIeKiYmIiIiIh4eHh4eHh4eNjY2Njo6Oi42Nj5WPiYyPjYyNjYyMjIyMjIyMjIuLi4uLi4uLi4qKioqKioqKioqKiouLi4uLi4uLi4uLi4uLi4uLi4uLi4uKioqJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYR+eXt5ent7eXt9fHt+fn59fn1+f35/fn9+f3+AgICAf4CAgICEh4mIiIiHh4eHh4eHh4aGhoyNjY2NjY+MjImKj42IjJGPjY2NjIyMjIyMjIyLi4uLi4uKioqKioqKioqKioqKioqKiouLi4uLi4uLi4uLi4uLi4uLi4uKioqJiomJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJg355e3p8e3p7fX17fH9+fn5+fX5/fn9+f3+Af4CAgH+AgH9/f4OGiIiHh4eHh4aGhoaGhoaGjIyMjIyLiYyKiIeJhoyOjJCMjZGOjIyMi4uLi4uLi4uLi4qKioqKioqKioqKioqKioqKioqKiouLi4uLi4uLi4uLioqKioqKiomJiYmJiYmJiImJiYmJiYmJiYmJiYmJiYmJiYmIiImJiYmJiYmJiYmJiYiIiIiIiYmCf3h7e3t6enx9fHx9f39+fn19fn9/f39/f4F/gIB/gICAgICAg4aIh4eHhoaGhoaGhoaGhoWMjIyMi4yOjoyKioeEiIuKjIuNjo+Li4uLi4uLi4uLi4uLioqKiomJiYmKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiomJiYmJiYiIiIiIiIiIiImJiYmJiYmJiYmJiIiIiIiIiYmIiIiIiIiIiIiIiIiIiIJ/eHp7enp6e3x8fX1+f35+fX1+f39/fn+AgICAf3+Af4CAgYCDhYiHh4aGhoaGhoaFhYWFhYyMjI2NjJCSjI2Ii4mJi4uLi4mLjIqMi4uLi4uLioqLi4qKiomJiYmJiYmJiYqKioqKioqKioqKioqKioqKioqKioqKiYqJioqJiYmJiYmIiIiIiIiIiIiIiImJiYmJiYmJiYmIiIiIiIiIiIiIiIiIiIiIiIiIiIiHgXx4e3x5enp8fHx9fX9/fn59fX9/f39+fn+Af4B/f3+Af4CAgIKEh4eGhoaGhYWFhYWFhYWFjIyNkY+PjZGJjIaJjIuIiImMiYeNjo+NioqKioqKioqKiomJiYmJiYmJiYmJioqKioqKioqKioqKioqJioqKioqKiYmJiYmJiYmJiYmJiYiIiIiIiIiIiIiIiImJiYmJiYmJiIiIiIiIiIiIiIiIiIiHh4eHh4eHh4WAenl9e3t7enx8fHx9f39+fn19f39/f35+f4B/gH9/f4B/gH+AgoSHhoaGhYWFhYWFhYWFhISLi46PjoyLj4iHiYmMjYWFjo2KiYyNi46KioqKiomJiYmJiYmJiYmJiYmJiYmJiYmKioqKioqKiomJiYmJiYmJiYmJiYmJiYmJiYmJiYmIiIiIiIiIiIiHiIiIiIiIiIiIiIiIiIiIiIiHh4eHh4eHh4eHhoaHh4eHhH55eX16enp7fXt8fX5+f35+fX5/f39/fX5/f3+Af39/f39/f4CChIaFhoWFhYWFhYWFhISEhIuLjI6MjI2Lh4mIiomGgoiNjoiKi5GTj4uJiYmJiYmJiYmJiYmIiYmJiYmJiYmJiYmKioqKiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiIiIiIiIiIeHh4eHh4eIiIiIiIiIiIiIh4eHh4eHhoaGh4aGhoaGhoaGh4eDfXp5e3p5enx8e31+fn5/fn59fn9/fn9+fn+AgICAf35/f39/gIKEhoWFhYWFhISEhISEhISEioqOjYmIiIqKh4iHiomIioiIh4qGi5GPiomJiYmJiYiIiIiIiIiIiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmIiIiIiIiIiIiHh4iIh4eHh4eHh4eHh4eHh4eHh4eHh4eHhoaGhoaGhoaGhoaGhoaGh4J8eXl6eXp7e3t7fX5+fn5+fn59gH9/f39/f4CAgH9/fn9/gICAgoSGhYWFhISEhISEhISEhISKi5CPiYmJi4qHh4WHiYuKiYSLjYmOjYqJiYmJiIiIiIiIiIiIiIiIiYmJiYmJiYmJiYmJiYmJiYmJiIiIiImJiYmJiYiIiIiIiIiIiIiIiIeHh4eHh4eHh4eHh4eHh4eHh4eHh4eGhoaGhoaGhoaGhoaGhoaGhoaGgXt4enp4e3x7e3x+fn9+fn5+fX1/f39/f3+Af4B/f39/f3+Af4CChIaFhYSEhISEhISEhISEhI+Qj4+IiYuIhoeIiYuLjIuJioqNio6Oj4iJiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIh4eHh4eHh4eHh4eHh4eHh4aGhoaGhoaGhoaGhoaGhoaGhYWFhYWFhoaAe3h5eXh4enp8fX1+f35+fn59fn9/f39/gIB/gICAf39/gIB/gYKDhoiGiIaDhISEhIODg4ODkpKOioeKi4qLh4uNiYqJi4iHiouIio+SioiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIh4eHh4eHh4eHh4eHh4eGhoaGhoaGhoaGhoaGhoaGhoaGhoaFhYWFhYWGhn96eXh4eHl5eXx9fn5/fn5/fn1+f35/f3+Af39/f4CAgH+AgH+BgoOHjo+PjoiHhIWFhoaFhYWSkI6KiYmIiImKioiIh4aKjIiHiYmOkJGNh4iIiIiIiIiIiIiIiIiIiIiIh4iIiIiIiIiIiIiIiIiIiIiIiIiIh4eHh4eHh4eHh4eHh4eHh4eHh4aGh4eHh4aGhoaGhoaGhoaGhoaGhoaGhoaGhoWFhYWFhYWFhYWGf3l4d3d3eXp5e3x9fn9+f35+fn5+f35+fn+Af4CAgICAf3+Af4GBg4eOjo6Ojo6Mjo2OjY2MjZCQjomHhoiJiYeIiouIiYyJiYaKjY6PkYuIiIiIiIeHh4eIiIiIiIiHh4eHh4iIiIiIiIiIiIiIiIiIiIeHh4eHh4eHh4eHh4eHh4eHh4eHh4aGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaFhYWFhYWFhYWFhYZ+eXd5d3d6eXl8e31/fn5/fn5+fn5+fn9+f4B/fn+Af39/f39+gIGEiI6Ojo6Ojo6Ojo6Ojo2NkJGOi42JjIiIiYaHiYaIioiHi4yLjpCQiIeIiYmJiIeHh4iIiYmIh4eHh4iIiYiIiIiIh4iIiIiHh4eHh4eHh4eHh4eHh4eHh4aGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoWFhoaFhYaGhoWGhYSEhIWFhoaFhIWFhX55d3l2eHl4e3x7fn5+fn5+fn5+fn5+f39+f39+f39/f35/f3+AgYOGjY2Ojo6OjY6NjY6OjY2Qj42Ni46KhoiKhISLiYeDhYSDi4mLj42JjI6QkI+NjYyLjY6Pj42NjI2Nj4+Pjo6MjYyMjY2KiYiHiImHh4aHh4eHh4aGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoeHiYqKiIeJi4yNjo2LiImLi42OjYyJiImMgHl3d3Z6eXh7e3t9fn5+fn5+fn5+fn5/f39+fn5/f4B/f4B/f4CBg4aMjY2NjY2NjY2Qj4+Pj46NjI6KiYuMjIeFiY2Lh4aIh4aHh4uNjo6Pj4+Pjo+Pj4+Pj4+Pj4+Pj4+Ojo+Pj4+Pj4+Pj4+Oj46Oj46Mi4uJh4eHh4aIhoaGhoaGhoaGhoeLiYeHiIiLjY2Mi4yLjY2Ojo+Ojo6Pj46Ojo6Ojo6Ojo6Njo6NjY2AeHZ4eHp4enx6fH5+fn5+fn5+fn5+f39/fn59fn9/f39/gH9/gIGDhoyMjIyMjY+QkpOTk5KSjYyMjIqHioyKh4eJiYWCiouIiYWJjpCNjo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6NjI2NjI2LiYaHh4eHiYqLjY6NjYyNjY6OjY2OjY2NjY2NjY2NjY2NjY2OjIyNj4+OjY2MjIyLi313dXd5enp7e3p+fn5+fn5+f35+fn5/f39+fn1+f39/gICAf3+AgYOFj5KRkJGSk5OTk5OTkpKLi4uLiomMiouLiYuKhoeOjYiIjI6OjIuMjIyNj46Njo6Ojo2NjY2MjY2NjIyMjIyMjIyMjY2NjYyMjI2NjYyMjI2NjIyNjIyMi4yMi4yMjI2MjIyMjIyMjIyMjIyLi4uLi4yNjY6Sk5OSkpSRkJOVlZSTk5COjo6Oe3Z2d3h6ent7e31+fn5+fn5/fn5+fn5/f35+fn9/f39/gIB/f4CBgoSNkpKTkpOSkpOTkZKSkoqJioyJi4qJjIuKioiHiYqKi4mKjY2Mj46Nj5KUlJOUlJOTkpGSkI+Ojo2NjY2Pko+OkZGOjIuKioqLi4qKi5CPjoyMjIqKioqKioqKiouKioqKi4yLi4uMjIyKiouLi46RkpOTk5SUk5STk5SUlJOTk5KSkpKSk5F6dXZ2eHt7e3p6fX5+fn5+fn5+fn5+fX5/fn5+f35/f3+Af39/gIGChIuRkZGRkZKSkpGRkpGRiYmIiIqMiYiJiYuJhoSJhoyKh4ySkpKTk5OUlZWWlZWUk5OUlJSUk5SUlJSVlZWVlZWUlJOTkY+QkZKQjoyRlZWVk5KSjo+QjYqKi4qKi42OjY6RkpCRkpKSkpGRkpKSk5OTk5OTk5OTk5OTkpOSkpKSkpKSkpKSj3h1d3l6e3t7ent9fX19fn5/f35+fX5+fn5+f39/f39/f4B/f3+AgYKEi5GQkJCSkpKRkZGRkZGIiIiIi4uJg4eLi4yMiIeHjYyNkpSSkpOTlJWWlpaVlZSSkpOTlJSUlJWVlZaXlpaWlpWUk5SUlJSVlJSUk5OVlZWUk5KTk5OTkJGSkZGSk5OTk5KSkpOSkpKSkpKSkpKSkpKSk5OTk5SUk5OSkpOTkpKSkpGRkZGPdnJ3enp7e3t8fX59fX1+fn9+fn9+fn5+fn6Af39/f3+Af3+Af4CBgoSKkJCRkZGRkZCQkJCQkIeHh4eIiIiFi4+KjI6Njo+OkJWUk5OTk5SUlZWVlJSVk5KSk5KTlZSUlZaWlpaWlpaWlpSTk5OTk5OUlJOSk5SVlZSTkpKSkpOTk5OTk5OTk5KSkpKSkpKSkpGSkpGRkZGRkZKTlJSUlJSTkpGRkZGRkZGRkZGRkYx0c3d6ent7e3x9fX1+fX5+f35+fn5+fn5+fn9/f39/fn9/f39/f4GDhIqQkJGRkJCQj4+Pj4+Ph4iKi4yNjYuOj42Mjo6RkpGSk5OSkpKSk5SUlJKSk5OTk5OSkpOUk5OTk5WVlZWUlZWUk5OTk5KSk5OUk5KTlJSUk5KSkpKSk5OTkpKSkpKRkZKSkpKSkpKSkpKSkZKRkZGSkpOTlJSUk5OSkZGRkZGQkJCQkZCRinN0dnp8fHp7fXx9fn59f35/f35+fn9+f31+f39+fn59f39/gH+AgYKDipCQkZGQj5CPjo+Pjo+Oj4+Pj4+Pj4+PkI2OjpCRkpKSkpKRkpKTk5OTkpGSkpKRkZKSk5OSk5OSk5STk5OTlJOSk5OTk5OTk5OSk5OTkpKSkpKSkpKSkpGRkZGSkZCRkZGRkpKRkZGRkpGRkZGRkpKSkpKSkpKSkpKRkJCQkJCQkJCQkJGGc3V2e3x8e3x9fX1+fn1/f35/fn5/gH9+fX5/fX5/fn5/f3+Af3+BgYGKkI+PkI+Pj4+Pj4+Pj4+Oj46Oj4+Pj5CQiI2PkJGRkpKSkpOTk5OTkpKSk5KSkZGRkZKSk5KTkpGRkpKSkZKSkpKSkpKTk5KRkZKTkpGRkpKSkpKRkJCQkJGRkZGQkJGSkZGRkZGSkZGRkZGRkZGSkpKSkpKSkZCRkZCPj4+Pj4+Pj4+PkX9ydHh8fHx7fHx9fX5+fn9+fn5/f3+AgH99fn5+f39+f39/f4CAf4GBgYqPj4+Pjo6Ojo+Pj46Ojo6Ojo+PkI+Pj4+GjpCQkJCRkZGRkZGRkZGQkJCQkZGRkZGRkZGRkZGQkJCRkZCQkJGRkZGRkZGRkJCQkZGQkJGRkZGRkI+PkJCQkJGRkJCQkJCRkJCQkJCQkZCQkJCQkJCQkZCQkJCPj4+Pjo+Pj46Ojo+Pj4+PeHJ2eXx9fHp9fH19fn5+f35+f39/f4CAf39/fn5/f35/f39/gIB/gYGAio6Ojo6NjY2Ojo6Ojo6NjY2Oj4+Pj4+PjoiQkZCPj4+QkJCQkJCQkI+PkJCQj4+Pj5CQkJCQkJCPj4+PkI+PkJCQkJCQj4+Oj4+QkI+PkJCQkJCPjo+QkJCPj4+Pj4+PkJCQkI+PkI+Qj4+PkI+PkJCQkI+OkI+Pj46OjoyMjY2NjIqDiYhzc3Z4fX58eX18fX1+fn5/fX5/fn9/f39/f4B/f39/f4CAgH+AgH+BgYCJjY2Ojo6Ojo6OjY2OjoyNjY6Ojo6Ojo2NiJCRkI6Njo6Ojo6Ojo6Pjo6Ojo6Ojo6Pjo6Ojo6Ojo6OjY6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Pj46Oj4+Pj4+Pj4+Pjo+PjY2MjYyNjoyLi4mJiYiFhYSDgoKEgnR5fXp4dXJrZWltb2xmZmdncHNzd3l9fnl6e3x9fX1+fn59fn9/fn9/f39/gIB/f3+AgIGAgIB/f4CBgImNjY2NjY2MjYyMjIyMi4uLjYyMjIyMjIyGj5GRjIyMjIyMjIyMjIyMjIyMjIyNjY2MjIyMjYyMjY2MjIyNjY2NjYyMjI2MiomKi4uJh4KAh4iEgXt6gH57fXx8fXlzcnJycnV1cG1ramppZ2NkYV9bXF1eWFVXWFlTS0VJSkpLTE1PT0tgdHR3eX19eHp5e3x8fX5+fn1+f39+f35/f4CAgH+AgICBgYCAgICAgIGAf4OEhYSFiIuLjYyMjIuLi4yGiYqKioqKh4OOkJGNiouLi4uMiYmKioqKiouLi4eDi4qIiYmGhYWEhIeJiYWCg397fHl6e3pzcHFxcW1samdsbWdlZmVmZGNlZGVkZWVlZWRkZGNhYV5dXFpYWFdUUFFSU1JTTU1KSUZESEpHR0hHR0xOSWdzdXh5fXp4d3l8fHx8fn5+fn9/fn9/f39+f4CAgIB/gICBgICAgICBgYFnXmBjYWNucX17ent/fXd8fHZ4ent4eHpvcHt4eXt8e3h3e394dXd0dHZ1dHZ3dXFycW5wcnBnaGtsbm9tamlpaGhlZWRkZF9gYWJgYF5dWVhaWltdXV9gX2BfX19gYmFeXl5eWVldXF1bV1dWUlRSU1NOUUpISUZERUhMTEhGR0lLSklNbXJ0eHp7end3eXt6e3x+fn1+f39+f35/f35+gIGAf3+AgIGAgICAgICCgWdYW1pZXFtcY1xaXF5ga3FtcHBvbm5vbmtpbmxrbG9qaWtraWpraWdmZ2dnaGhnbWdqZ2hlaGdjY2JhYmBgXVhbW1dYV1RWUVBUU1NNSkxLTExOTk9UWFhXVVVUUlBQTU1QT05LTE1QUU9MTEpHSUlHSEhJSEhIR0ZHSEpKSEhISUlISVZwc3V5ent5dnZ5enp7fH59fX5/f35/fn5+f3+AgX9+f4B/gICAgICAgIGBbFtYVlZWWVlaWVlYVVZoamxubmxra2poaGloZGVkYlxiZl9fYGNfXF9dYF1eWl5dWVleYmFeXlpZX1xYV1NOTUxLS0tMSUtNTktKS0tMSktQTEtLRkdHSUlGR0lISUZFSEdGRkVERUVEREVJSUlHSEdIRkZLTUtJSUlIR0hLTU1LTExMVXFzdnl6e3h2d3h3ent8fn1+fn9/f39+f3+AgIGAfn5/f4CAf4CAgIB/gYJoUlRVVlNVV1lZWVdXV1tbYWNfXlxbWFZWWVZSVFJRUVVUU1NTUE1KTU5QUk9NUFFRUVFSVlZRUVFUUFBOTk9MSk1MS0xKSktLRklJSkxJR0pISUlFR0dGRkVFSElKR0ZHRkZHR0hKR0dISEpMSkpLSUlISktLSkhKS0pISUtMTU9QUEtUdHR1eHp6eHZ2d3d6enx+fX5+fn5/f35+fn+AgYB/f3+AgYB/gICAgH+AgmlQUlRXVVRWWVdYWFpbVFRTUlBRU1FRUU9OTlBQUU9MTlBPTk5NTEtNTk5QTU9QUFJRUE5OT05PTk9PUFFPTk5PTk5QTk1NS0lISEpJSUlJR0ZHR0dJSkhJSEhJSEhHSEdISElISUxLSklISkpJSkpIR0pMS0pJSUhKSktMTk1NTU9RTFVzcnN3enl3dnR2eHp7fX19fn5+fn9+fn5+gICBgICAf4GBgH+AgICAgICBbE9PTlRZVVVdW1lXV1hOTUpKSUZKT0xKSkdJSk1NS0pMTUpHSUlJSktMRkRGSktLS0hKTExMT01MTE5PT09NTk9MTk5OUFBPTE1MTk1MTEpJSEdJSElISElJS0xLS0pJS0pJSklJSUlJR0dKSUdJSUpKTk1OTEhJSklJSk1PT01MT1JOWXBwcnd4d3d0c3R3enx+fX5+fn5+fn5+fn9/gICAgICAgYCAf39/gICAgIFvS0pNTlFOTlVXVlZSU0lFQ0VFUkREQT5CP0RAQD5CREFAQURHRkVIRUJBQEBDQ0RFQUNFSEtPS0lJSkhHSklKSUlLSkxQTk1MTU1MTU1NTElIREZGR0ZGRklKSUlLSkhMSklKSkpJSEhKS0tIRkdJSklLTU5OSktPTUxLTU1PUE5QT1BgcG9yd3h2dHJzdXd6fX19fn5+fn9+fn1/gICAgICAf4CAgIB/f3+AgICAgXNQUE5OUE1KS1BSUE5RQ0RCQUZRRT1DPT9FSDk6Oz0/PTxBRkA+Ojw+PjxFRD0/RUE/QEFAREVHR0dHQkRERUZFR0dHR0pHSEpLR0NER0pHQ0RFQUFDR0hHSEdISktKSElMS0lISktLTU5MTUxMSkpMS0lLTU9PUFNRT1BQTk9QUlFNUGdwb3N2dXRycXR4eX19fX1+fn5+f4B+foCAgH9/gIB/f4CAgH+Af4B/gICCdlRVUVFQT0xNUFBOT09BQkFAQkE/Oz48Pj8/Ozg5ODs7OkA7Oz48Ozs8PEhMPT1BQT9CQz1BRERGQkZGREdJSEM/QEBAQUFCQUE/Pjw9PkFAQD8+P0BFR0dHSUtMTk1OTUxNTUpLTVBVU05MTlFOTk1OTE1NTk9OTk1LS05OTk1OTkxUbnBwcnR0c3Fydnl5fX19fn1+fn5/gH5+gICAgICAgH9/gICAgH9/gH+BgIJ4UVFSVFJTUVNTUVFST0BAPT4/PD8+QEE/PT45Ozo6Ozg5Ojg3Ojw5Nzg7Oz49Ozs6ODpAQEFCP0E/Q0ZEQkNDPzs+PkBDQ0E/Pj9BPkBAQj9APD9CQEFDRUVFSktQT1BPTU1OTExMT1JRUFJOTExPTUtOT0xMTEtMS0tKS0tKTU1LS1xxcXF1c3VzcXN4eHp9fn1+fn5+f39/fn5/gIGAgH+Af4CAgICAf4CAf4CAgXxSTU9RUFFSUlRSU1NOPDs8Ozs7P0BBQkA9PDk8PTw5Nzk6Ojk4ODo6Nzg6OTo7Ozg3ODk7Ojg8Oz1AQUA9Ozs+PD09QEJDQT9BQkE9Pj09Oz0/Q0RCQD9BREJFR0pKSkpKTE1MTExNTExOVVNLTE1USVBKSU1KSUpLS0pJSEdKS0lKZnJxc3RzdXJydnl5e31+fn5+fX9+f39/f36AgICAf4CAgICAgIF/gIF/gYCBgFZMTlBQTlJRUFBRUU44PT88PDo9PkFAQT8+PkA/Pj07PDw+Pz08PTs6PD09PTw8PDw7Ozo7PD49Pj8/QUA+P0E/QEBBQEBAPT8/PTw6Oz09PD9AQUJCQUBCREZGRkdGR0dISUtMTExLTEtKS0lKSk1MTEpMS0lISUxMSklJSElLR01tcHF1dXV1c3V4eXl8fX5+fn5+fn5/gH9+gIB/f39/gH+AgYCAgYCBgICBgYCCYUtPT05OT1BPT1BQTzo8Pjw9Oz8+PkFBPz0/Q0NDQD48PT9APz89Oz49PkNFPz9APTs9PT08Ozo9PkFBPz5AQD9BPz89PD48PTs7PD0+QUA/QD5AQ0NEQkRFSEVFR0hISEdGSUpJSUlJSUhKSkpKTEtKSklJSEhKSktMS0lLSkpIVnBvcXNzdHR1eXp7e31+f35+fn5+f39/f39/f3+Af4CAgICAf4GBgICAgIGBgIJtTFBRTk9QTk5PUFBPPjw8PT4/P0A+QEA/Pz9DRUQ/PTs8QD46Ozo6OTc6PDk9PUA9Ojw7Ozw7ODk7Pz49PD07PEA9PTw8Pjs9PD0+QUBCQUBAP0JEQ0RFRkZGQ0VHSElJSEhJS0tMTUpKSUpNTUpLSktJSEhISEpJSktKSk5MSUlfcHBycnJ0dXZ6e319fX5/fn5+fn5/f35/f36AgIB/gICAgICAgYGAgICAgIGAgnZNTk5NTk5MTE5QT0w+QTw8PT8+QkM/P0FBQUJBQD08PTs+PTo6Ojw6ODk4ODo7PT8/PDs7PDs6Ojs+Pz89PDg6Pjw9Pj89Oz4/QEJDQkJDQ0FCQkFCQkRCQkRCRENGSUdGRkhJSUtNSklKSktMSkpJSkVESUlGRkhISUpKTEpGRmdwb3FxdHZ1d3t8fH18fn59fX1+fn9/foB+fn+AgH+AgICAgICBgYCAgICAgICBek5JS0tMTExFSUxOTTw/PDw9PkBAQUE7QkNCQ0A/Pz9APT9APjw+QD89PT0/PT0+Q0Q/Ozw9PkA9PT5BQ0A8OTtBPz4+QT07P0JAQkNCQENDQUNBPT0+QD0/QUFBQENFRUBAQ0JDR0dFRENGRUZGR0VEQEFHR0ZDRkRHSEpHQz5IbG9wcHF0dXZ5fHx9fHx+fn1+fn5+fn5+f36Af3+AgICAgICAgIGAf4CAf4CBgIF+UUhLTU1NS0pLTE9RQD8+PkFBQEBBR0FCRENEQT9AQEA/PUA+PD0/P0BAQENAQD9AQD49PD1ARUFCQkZIQz08QERDQUE/Pj1AQT4+Pj88PkBER0VAPkBBP0BDRkVDQkNDQEJEREJERUFCPkFCQkFCQEA9QUJDRENDQUNFR0E/PVZwcHFwcnV1d3p8e3x8fX9+fX19fX1+fX5+fn9/foB/f4CAgICAgYCAgIB/gIGAgX5SSEtNTUxLS05OUlVEQkBDQ0FBQkBCQ0BAQUFAQUA+Oj48Pz08Oj49P0JCRUA/P05hX0pAQ0VJSUlJTU1LRUNGR0hFR0VFRUREQ0E/QD4+QkZKSkdFRUZGRkpOTktKSUdHSEtMSkdHQ0REREVEQUJCQ0BDREVEREVERUZDQkFEZW9wcXF0dnV4e3x6fHx+f319fX19fn59f4B/f39/f39+gIGBf4CBgICAgH+AgICAfVJJSUpKSEpKTE9SU0dGRUdIREdIREA+PDs+QERFRD88QUNEQj8+QT9BREVEQ1d1homKflhHSEpMTE1PT0xIR0hHSElJSEhHR0hIRUNFRUVFRkhKSkZFR0lKTU9PTU1LSktKTU5LSUhHSElIR0ZFRkZGREZIR0VFSEhGSEdIRlFubnBxcnZ2eXt7e3p9fX5/fX19fX1+fn1/f39/fn5/gH+BgYGAgICAgICAf4GBgIB8UEhHSElGR0lKTU5OSkxJSUpLTE5KRkNBQkNGSkhJR0hISUdHQ0RFQ0RDQVV0h4mHh4aHgldJTE1MTU5MSkdHR0dER0dHR0ZIRkhFQ0RERkVEREhIQ0NDR0pKS0xMTExMTElKS0pKSUlJSEpISEdISUhHR0hGRkZISklJSUlIXW9vcXJzd3d6e3t6e319fn59fX19fX5+fYB/f39+fn+BgIGAgYCAgICAgIB/gYCAgHxNR0ZIRkVGR0dKS0pMTUxLTU5NT0tJSEhKS0tMS0pLTEpLSUhGRUdOR09shIeGhoaHh4eHfFBLTEtIR0ZGREVDQ0BBQ0NDQ0ZGRUJAPj5AQUFAQkQ/Pj9ERkhERUdJS0lJR0hJR0lJSkpJSEZKSkpKSUpJSkpKRklMTEpKS0tmb3Bzc3R2eHl7e3t8fH1+fn19fX19fn59f39/f35/f4CAgICAgYCAgIGAgICAgICAfU9GRkdGR0hHRUZHR01NTUtMS0lHQ0NDRElLS0tLS0tOTEtNTEhJT3BwgIaFhISFhoaHh4aKdUlJRkI/P0A/Pz88PDw+Ojo8QUFAPjw5OTg8PD07Pjs5Oz9BQkFBQ0NDQEFCRURCQ0ZISUhISExNTEdJSk1NTk1KSktLSkxNU2xvcXRzc3d5ent7fH19fn9+fX19fX1+fn5/foB/fn9/gICBgIGBgICAgYCAgIB/f39+UUZFRkdJSUdEQ0VGTk1MSklIRT85Oj5ARUhHSUlLTE9RVE9YbHN6gYWEhIWFhoeIiIiJiYyOZkJCPTg4Ojo5ODc4ODk2NDc5Ozw6ODU2Nzc4OTc4NzY4OTs7PD5AOzk5OT09Pjs7PUFERUhKTUxMR0lIT1JRUFBOTE1NT1Fdb3BydHN1eHp7e3x8fn5+f359fX59fX5+f39/gH9/f4CAgICAgYCAgICAgICAgIB/f39RR0ZHSEpIRkVGR0hMTEpJSUdDQjU2OjxDQEJGSEtIS1RwZXyDhIOCgoOEhomKi4uLiomKi4yJVDs4NjU2NzY2NjQ1NzYzNDY4Ojg3NjU2NTY3Nzc3ODo3Nzc4OTs3Njg5OTg5ODc2OjxAR0ZJRklGRUZPU1JTU1JPUFBSVGVwcXN0dHZ5e3x7fH1+fn5/fn19fX19f39/f3+Afn+AgICAgICBgICAgICAgICAgH9/flJISEhJS0lHSUpJSkpLREVIRUJANTc4OD06PERCREZEXXx/goKCgoKChYmKiomJioqKiouJiYqBSDY3NjQ2ODg3NDU3ODQ2NzY5OTc2Njc2NTo6Ozo6PDg5ODk3Nzc3OTo6ODg3ODU4ODtBPT4+QkE/QUtMT1FQUU9PT1FXa3JydHR1d3l7e3t8fX5/fn9+fX19fX5/f4B+fn9/f4CAgH9/gICAgICAgH+AgICAf39+VEhHSUlMTUtKS0tMSUg/QEFAPDo1Nzk4OTc6QTk8RD9mg4KDg4SEhIaJioqIh4iIiIqKjIqJiYx6Pjo4ODs8PT45Ojs8ODk7OTo7Ojk5Ozo5PT09Pzs7Oz06Pjs5Ozs8Ozw8Ojs8ODo6Ozo5OTk8Pzw9QUJESUpNS0pLTFdvcnN1dHZ4e3t7fHt9f39+f359fX19fn9/f35/f39/f3+Bf4CAgICAgICAf4CAgH+Af35URkVGSUxOTkxKSk1CPzo7PDo4OTk4OTk5OTo+PT9ARHeDg4SEhoaHiYiHhoaGiImIiYuMi4mKioxsPDs+QUNFRUFBQUI+QEJAQD89Pj5APz4/QD9APT0/Qj9BQT9BPz1AQEA+P0E8Pjw7Ojs6OTs/PTs7PT1BQUNBQkNBWHFxdHR0dnl7e3x9e31/fn9/fn19fX5+f35+fn9+f4B/f4CAgIB/gIGAf39/gICAf39/flJFQ0FHSk5PTElHSzo4Ojs5Ojo8PDo7Ozw7PT5BQD5ihYOEg4WEhomJiIeGhoaHiImKi4uKioqLiotePkRGSUtKSUZHR0RGSEdFQ0BAQ0VDQkBCQ0I/QERIRUNFREZFQUZFRkRGRkRAQj49QD49P0A+Pz8/Pj8+Pjo7PTxgcXJ0dHV3enp6fX19fn5+f39+fX19fX5/fn5+fn5/gH9/gICAgICAgICAf4CAgIB/f4B+UERAPUNIT01HRkJEOTc6Pjo8Oz4+Pj87Pz1AP0M/S36DhIWGhoaIiYiIh4aGhoeJioqLjI2MjIuKiohXR0xMTUtOSklLSElKSklFQ0RGR0ZEQ0VGREJISUtIR0dGSEdFS0lLSUtLSkNGQ0NEQkFBQ0JEQ0NERENBPTs9QGhwc3R0d3d6eHt8fH19fn5/f359fX1+fn9+fn59fn+Af3+AgH9/gICAgICAgICAgH+AgH9PQT49P0RMS0BCQkE5Nzw+Ozw6PT8+QDw/P0NCRUBohIKFhYeHiImJiIiHhoaGiIiIiYqMjYyMi4uKjH9QTVBNS05LSkxJSUpIS0dFR0hISUVFSEZGRUxMTUlKR0dISUpOTU5MTE5LSEZHR0VFQ0ZGRkZERUhIRkNBP0BMbHB0dXZ4eXl5fHx8fX1+fn9+fn19fX1/f35+fn5+f39/f39/f3+AgICAgIB/gICAgICAf1FBPz4/RkdHPTxAQDg3PDs7PDk9Pz0+PkBBRENJVH6DhYSFhoaHiIiIiIiIh4eIiIiJioyNjIyMjIuKjXFNUU9NTExLTEpJSEZKSkVKSEdLSkhKR0dHS0xOTExISElKTVBOUE5NT0tJR0lKSElESUhIRkZHR0lGQ0JBQ1VucXV2d3l7eHh6enx8fX5+f39+fn1+fX5+fn5/f36Af39/f3+Af4CAgICAgICAgICAf39/VERBQUJHSEI/OD9AODo7ODw9Oj0/PD0+QEJERU1thIOEhISFhoeIiIiIiIeGiIiIiIiJjIyLjIyMi4uLi15SUlBNTk1LSkdGQ0dKR0xKR0tPTEtKSk1NTE9QTkhJS0xPUVFQUU9PSklKSkxKTEZHSEdFR0lGRUVCQEJCXHByd3h5enl5eXp6e3t+fn5/fn59fX19fn9+fn9+f4CAgIB/f39/gICAgICAgICAgH9/f39VRUNFRUdHRUQ7P0E7PTw5Pz09P0FFRT5DRUNHTHWGg4ODhISGiIiIiIiIh4eIiIiIiIqLi4uMjIyMi4uNfFdWUlJUUk9MS0pFRUZLT05PV1ZRUE9RU1JOU1RPTVNMUFNVV1JTUlBMSk1NTUtOR0dKRkZISkRERUVCRENjcXV5eXp6ent6e3p6fH59fX9+fX19fXx9fn5/gH9/gICAf39/f3+BgYCAf39/gIB/f39/f1VGRkdHR0dIRj5AQj0/PT1CPkFBRVVMQklKR0tNeYaDhYWEhYeIiIiIiIiIiIiIiIiJiouKioyMjIyOi4uLZ1ZWa2FFUlFRUEo7O1FTUmB1XVVWVFZZWVNZWFJaZlBVV1pdUlRXUVBOUlBQUFFLS0tHSElIRUZJSUlISWpzdnl5enl6e3t8ent8fXx9gH59fX19fX1+f39/f3+AgIB/f39/f4CAgIB/f3+AgH9/f35+VEhKSUlHR0ZFPz9BQEVCQ0ZFRERLV1FLUFBPUFF5hoWHhoWGh4iIiIiIiIiIiIiIiIiIlJyMioqMfWGKi4uHbFtkVTpYWFhTUD9AVlVZXGRgVllicl5dV11aVkVRWVpcWV9UWWdSVVZYVFRWU09PTUpMSklJTE1LT01Tb3R2eHl4d3p6ent6e3x9fH5/fn1+fX19fn1/f39+f4CAgH9/f3+AgICAgH9/gH+Afn9+fn5WSkpJSEdGRERCQT9ITUlNUEtJSk9TUlFVVlZWVHWFhIWFhYWGh4iHiIiIiIiIiIiIiImcnaCPiY5nO36MiYqLem5wWFpbWlJTUldWVFpadYNZVX2QYVxYXV5XSVZdXVtbX1lIWVhZXF1YWFlXUlFNUFFNTU9TUVFVUmFzc3Z3d3Z4eXh6e3t8fX19f39+fX59fX1+fn9/gH9/gIB/f3+Af3+AgICAf39/gIB/gHh5fVlNS0pJSUZCREBBOlBRUVdYUFBPUVNTUlZXV1dXbIGCg4WEhYaHh4eHh4iIiIiIiIiIiJaanJeIioFuhomIh4OKfmZZWVxZU1ZUV1JRV1ZjloBRZXJYWldfaFBgZlpbWFxoYkdPWmlnXFtcXV1XU05TUFBRVlZWVllab3N1d3Z2dHd4eHt7fH19fX5/fn59fn18fn9/f3+Af39/gH+AgH9/gICBgYB/gH1yfX9/b3R8XVNPT01LSkVDP0A7UFBaWlpSU1FPUlJRVVJVU1ZedXiAhYSEhYaGhoaHh4eHiIiIh4eIh4ORjomJiIaFiIiGfYB7XFBWWFRSVFJRUUxPTUtmeVpdVFlVVl1aTFRaVFNUXlpYV1dXemtYWlxcXlNQUFBJTk9XVlhbWmRxdHZ2dHR2eHl5e3t8fH19fn99fX1+fX1+f39/gICAf3+Afn56eHd2c3V7f3+AgHRrfn5rcnleW1ZVU1JPS0ZDREFNXoNsVlJTTk9RT1FWUlNSUlRjZHaAgoKDhISEhIWFhISDhoaGhoeIhn6JiYiHhoOHh4d5bXFWSUtOTktNS0hKREZIRUM+U2NVf1JRUU5LUlRRTU9ZUU1OUVNVVU1RU1JQTkxMSENJSFJTVFpdbXJ2dnVzc3d7ent7e317fX19fn19fX59fn9/f39/gH99fX5+f39/f4B+e3Zzd31+fmR1fWlxdF9kXV5bWVVRTElMSWFsknRQUVNOUVJQU1tSU1JRUlVVYnN7fH+AgYKBgX99e3uAf4OChYaHgoaGhoGEgYaFhnVfXUtDPkNDQ0NCP0RQQ0RAQz5CSEdWQElOTUddaVFIRk9GREVGSEdIQkNIR0hKR0RCQUNATlBNUmR0dXZ1c3R1enx6e3t7fHx9fHt+fX19fn5/f3+AgIB/f3x8fX+Af39/f4CBgH12dHt/bWh8Z25xZmllZWJcWFNRUFVSc1dlW09PTkxRUlBVWVNVUVFUUk9WYGtsc3Z6e3h5dXJuc3RzeXh+foOAg4OCgIKAgoGBa0xHPj46Oz5APz8+PmpQSmFFRkhJRUI/SE1NR01RVUpCRT8+PD08PT0/PT9BQ0I/Pzw9Qj5KTUZVb3V2dnN0dnh6fHp9e3x9fX19fH59fXx+fn9/f4B/f39/enl3eHd2dnh7foB+fXt4dnx1YXhnbHBqbGppZmBbUVFaXFleSUpQUU5LTFFSUVRVVVdRUVdWUFhbYl1hZ21tbG9raGBucmltbHF1e3p9enh6fHx4d3hkQkBAQT06QkNBQUNBW1xOe05PT05LTE1PT1BMS0xXTklHQEI8OTc3NTk5PTs7Ozg5ODk/O0FHPlx0dXZ2dXZ3eXx8fH18fHx8fn18fX19fX9/f39/fn9/f314dXd6e3p2eXh1d3t8eXh1eXdjcWhpcG1ubW1oZl5PUF5cWklHUFJRT01QUU5RUlNWWFNSWVROWVpbV1lcX15fZWBdXnF3a15gZ2t3b29sam9ubmxmYllHRkZIQkFGSEVFRkNMUU9hV1JYUVBTU1JVW09PUVZQTUlDRj46OTY1ODY5Nzk6MzY1Nzk1PEI9ZnR1d3h3eXl7fX18fHt8fX1+fnt9fn19f39/fn5+fn9/e3d1eX18eXh8fHx8dHd2d3Z1d2tuaWhxbm9vb2prYFVXXlpXTUtUVFNQUVVPTFJTVFdYVFRYUUxXWVlWWFhWWFldV1hYaHNrXVZgdGthYV9dZGBfXllVUE1PTUxJR0pLSUhGQ1BPU1pXVFROUVNZU1xlVU9TVFFOS0lIQz9BOTk4ODk3ODg0NzU3ODU5OEducnV4eXp7e31+fX18e318fX5+en1+fH1/f359fn59f358dHR1e3hycW9vbnR4cXJzeHZ1cWZkZ3JucHBxbm1kXV9fWVdPUFdWVlNUVk9PVVZXWFlTVVRMS1NVVVVVV1BUVVdUVVJdbl5STllgW1ZZO0RVV1RbZkpMUFJST01NTk1NTEpGUFBVWVNUTkpOT1RTVFxWUlVTU09NTElISEY/Pz06Nzg3NjU5OTY3NjY1V3FxdHd5ent8fX59fnx8fXx+fX15fX18fn5+fXx8fX1+fXxydnF4eHJ1dXFxbnBwb3B1dnRuamRkanBwcXJwbmZlZGNcXlJUWlZXVFNWVFJYWFlZWVJVT0pHT1BPT01SSk9QT09OTk9UTE1JUFBTVFUyPFhNSUFRPWNgUVNRUE5QUE9OTk1QTlRSUFJMSUxLT1FQUVJTVFFTT0xNS0xMSENCQT06OTg3NjtCNDU2NjtlcHJ2eHl7fHx9fnx9fH19fX18e3h8ent9fX58e3l9fH18e3B1b3d1cHV0b3N2cHFxcHV1dmNqZ2VXaHRycnFuaWlocFZWVFVYVVZVUldWVVpZWFdVUVNGRUFGR0dIRkpESEpIR0VITEhLSUdMTVBNRy9FX1I+M0A+am9hUlJRQEdUUU9QUFFOUU9QT0xKTExPUE5NUFFRTlBPSkxNTUtHRUVEQjs9PTw5PUc2Njc2RG5xdXd6fHt8fX18enx8fX5+fXt5dnh3eXl8fXp6dn17fHp6b3Fud3JwdnFtcHNwb3Bzc3N0ZmdgaFpXa3JzcmxtbWtuYmVQU1RSU1VPV1ZWWVlWUVFRT0A+Oz0/QEJBQ0BCRURBQEdIR0hGRkhKTUxER0NPUkM4RU5TXWdTUVNBR1VQUFJRUE1NTkxKTEtMTk9QUUxOTk1ITEtJS0tMS0dGRkVEPEFBPjtARTs8ODlUcXN1eXt7e3x8fHt5fHp6fn58e3V0dXJ2dnp6eHpyfHt8eXltcW94cnF1bm5xcm9vb3Rzc3J1dGtnZ15lam1wa29xbWltY0xPTk1RU0xUVVRXV1VMTEtIPTk4Nzs/QT49PUFAQj0+RUhGREZGSUdKSkBGQUFARkhFSk9IUVJhXFFQUk5TT09PTExPTUtNTE1PTltWSk1RT0dJSERJSkxMS0ZGRkQ/Q0M+PUJHP0I+QWRxdHd7ent7fHt6end8d3l+fnt7cXN0cHJzd3R4eHN6e3l2d2xxb3ZxdHRsb3Fybm5vc3ZydHNycmtsZW5zaG1ubWxtbGprSUxISE9RSlFTUVRTT0tIQ0U9OTg3OT9CPzs+QUBAPkFESUVDSEdJR0lFQkI/PjxDQkFHSURNT2FlUE1PTldLTE5LS01NTExLTk5TZE1KTFJJSUlFQUhKTE1OS0dJRkJCQkA/RUZFSERMb3B3enp5e3t6fHp3c3h0eHx8eXpucXJtbm9ycnZyc3h8eHZ2bXBtc3B1dGxwcHJvb29ydnVyVlZucWdseYRqbXFybm5qaG9ISkNHTExJTVBNUE9HS0U/Qj05OTk6P0I/PEFCQUFEREdLRkRJSUdHSENDP0I/P0BBPUNFQ0tOUVRLSklNVEZJSUpMSktLSUpMTU9QUlBLR0NMR0NDSkpMTU9OSUpJR0NDQ0RJSk1MSVpzbnh5eHp7e3l8dnJwdXJ0eXl2eGpxbmpsbG50dG1zdXtzdHhyb25xb3ZzbnBvcnBvcHN0eWpOYGdzanR8eWdvc3FpcWhlcUhLQ0ZHR0dKS0lKTERHQj0+PTo6OjtBQj89QkJDQ0hGSkxKRUlJRkdHQ0M7QUBCPkA/QkVDSU1PR0hLRkhLREhJS01ISkxISUpMSk1dUklIRE5HQkVLS05NUE5LTUpLRkdHSk1OUU5MY25qd3Z2e3h7en1xbWxza3B0dHR1aHBtamlra3RwbnR0eXByeXRvcnFvd3NvcXB0cnBydXR5a05WbXVscXt2aW5vaWp0aGRwRktDRkVGREVFRkVHQ0NAPTw9Ojs6OkBEQT9CQ0VFSUZKSkxGSUlHRkZEQjtCQ0M+P0JDQ0RHTE5IS05IREhESUxOTUdJTEdGRklJTE5LSkhFT0lDR01NTk1QTk9PTUxJSElPU1FSTlJmZ2Zyb3N4dXt6fGxoam9la3Btc3FmbWxoaWtsdG1wdXR3cW94dG90c3J2c3BxcnRzcnR1dXZ2WFZ1dWtvdHJrb3ZsaG1lX3BHSUNFRUVCQkFFQERCPj8+Ojs7PTs9P0NCP0FDRkdKR0pJTEhHR0dGRUM/PUVFQj5BQ0JDRUdISUdNUElGRkZLTk9LRkhJRkVERElJSEtJRkhQS0RKTUxQTk9OT1BOSkpITVJVVVJPV2RhYW1ncXJvc3l6Z2VoaGNpbGdxbGZsbWdpa2xzbXB2dXRwbnZyb3Nyc3V0cXNzdXRzdXZ2dnl2dXR2bGt1dW1ydnFsbmxlck1HREVHQ0FAQUQ8QkE+QT06Oj0/Oz4/QEI/QEJFR0pGSkdJR0ZGRkRDQkFBRkZDQkJCREVFR0dIRkxQTElPSkpMS0lGSEVGRURDSUhIS0pHS1JNQ09PTlFQT09OT09LS0tQVVdWVVRZYF9daWFuaW5ocnNiZWZmZGloZm5pZm1taGtrbXJpcXZ1c3Ftdm5vcXJzd3Nyc3R1dnZ2dnd2d3Z2dHd1a3N1bnV0c3Bya2tzTUZHRUdBQkBDRDxBQUBDPDg6PT46Pz0/Qj9AQERGSEVIRkZIRkVFQ0NFQkRJRkNHRUFFR0VGRkdFSk1LSFFNSktISElFRkhIRUNJSUpLTUtQU05EUlNRUVJOT05OUE1MTlNXVldYVlheWl1kYGhiamlna19kZWZjZ2dna2dna21rbWxwcWd0dHVyc252b3FwcnR4cXNzdXZ1gpF5dnZ0eHV1d3hub3VvcnN1cXFpcHpNR0dHSEJCQkVFPEBDQkQ8Nzo9Pjo+OkBCPj8/Q0VGREZEREdFQ0VDREVGRkpFRUlHQkdIRkdGRUNGSkpHTUtMS0hKS0ZJSEpIRUtLTExOT1JUT0lUVVRRVFBRTU5RTk1RV1pWWllXWl5aWGFgYGBfaGVjYGRlZ2dqaWhqZmhubGxvbXFwaXV1eHJycHVwcHBydXZwdXN1dnV7fn14dnR3dnZ2d3BsdXBtc3Vub3NzeU1ISEdJREFDSEU8QEVCRDw4Oj4+PTw8QkI8QD5BQkZDRUJCR0NDREVGRkdHSUZHS0hDSUhHSUdGREhLSUdLSE1LSktMSExKTUtJTkxOTk9SVVZPTFZWVFFUUlJMT1FQT1RZWllcWlpcX19eYGNeXGFja2JgZGdocoVoZ2pmam5ucG9uc3FqdHV4cnNzdHJucHF2cnF1cnV1c355jn11dXZ2dnZ4cml1cWtydGxxd3F1S0hLSEpFQkRHRTxAR0REQDk8PkA/Pj9DQjxAPkFBRkNFRENIREZERkZISEZIR0lLSkVKSEhKSEZGTEhISEpHTExMTExJTUtNTk1PTFBQUVVWV09LVlZVU1NSUUxPUlJRVltbXV5bXV5gYGFgYWVdZGBmZ2BlaGpjc3NmamhnbHBycW9zc25zd3dwdXZ0c21vcnVvcnNwdXJ2cnSBdnV1dXd2dXd0Z3Rya3Fya3J3b3dJSktJS0dCRERFPEBGRERCOz8/QUBAQERBQEI/QUNIQkVERkdFSUVGRUlIRklISkxISEpKSUtKRkpLSElKSkdLS01MSkpNTE1OTk9MT1BSVVdWTU5UVlVTUlFQTU5UU1JXW15eX1xeYGBhYWFgY2RlYmRpY2Rpamd2i2xraWdtb3NxcHFwcHJ5d3J1dXRzbW1zc21xcm90dXRzcHN3dHV1d3Z1dXRlcXNrcHFqcnZwd0pMS0tMR0NDQUQ8P0VFRUM9QUFDQkJDRUFDREFBRUdDR0dHRkVJRkNHSkdHSkZJTEhJSk1LTUxHS0lIS0tOUUtSUUxTTUtOTU5QUFBUT1dYWFtOU1FXXFpTVlBOVFVUVFhaX2JiX2RhX2BiX2BmYmFjaW5oY2loaG14dmxoaW1vc3JwcXJycnZ0c3Vzc3Nua3NxbXByb3R2cnJxdXZ1c3d5d3V0dWNtdGtvcGpxdHB3TE1MTExHRUFARD4+REVGQz9DQUVDREZDQ0VHQ0JJRUJISUlHSEpGREtKR0hKSElLR0pKTktOS0lMSEpNS1pmSmRcS2xSSE9NX25VbHNbcXBid2NSUGJ2dWh1Y2F2YFhucWJkdmluemZcbHRgbGtVX3d2aWpoaGZnbG1qbW9qbW5zcnBycnFyc3Jzc3J0cm5sdG9ucHFxdXVxcXN0dnZ1dXl3dXR0YGt0a3Bwa3FzcXlLTkpLSkZCP0BCPz1ERUZEQ0NCRUVERkJGRkdDREtEREpMS0lLTEdHTkpISktHS0pJSkpOTE1MTExJTUxMW3NiZHBebGxVTU5lcl1nZXFsbnRncGlfYVlubWJwcGJrampnb3F0ZXRub1xwdWdxTUtyeXZrYWFrZWVseG1rdmxucHNycHJxcHFycXJycnRybW1zbm5vcHJ1dHFzc3R1dXV0d3h2dXRibXVrcHBscnJxektMSUlHRUQ/QUI/PUJFR0JGQ0VERUVEQkhIR0RFS0dHS01NSk1MRkpOSEpLSklLSkpJSkxNTk1NTUtOTU1bcm9vbnBwbGtNUFFsWE5pYnRycGFtb3ZcWWxQW21tWnFta29teHh0c2lwXGBzbHFqVXV5eG9jXmtmYmdwcGppb3Bwc3NwcXBxcXJycXFycnRsbXJtbW5vcnV0cXRydHV1dHV1enZ1dGVudWtwb2xzcnJ5SUtHSEZFRUJBQj0/P0VHQkdESUVFREJGSUhIRUdLSkdNTU5LTU5HTE5JTUtISk1JS0lKSk5PTk5NTE5NTFxoZHVdbHFXbE5PUW5VWmtea2x2YWxkdFRlY05sWWxcdHBraWx4and1aHBdX3NraFdiY3d8b2NgZ2hhY2l0eWtubnFzc3BxcHFwcnFwcHBydWttcW1tbW9xc3Rxc3J0dnZzd3Z6dnV0aG91bHNvbXNydHZITUdJRUVEQ0FCPEJAQkZDR0ZLR0VDQ0hLSEhGSUxLRk1LTFJSTEdNTUhOSklITkhKSkhITk9OTkxKTU1KWnNwcG9xcW1sT1FTb1lza2dvb3Fxb210Xm5YYXRfbm9wb3Fyb291c3R0altddGN3eHJqbnpoYWFjZmFiam10dXBzdXZzcXBwcW9ydHt/fn13bGtxbmxtbnByc3F0dHN1dXR4eHl5dHVrb3VtdG9uc3N2dElLSEpDRUVFQEA+Q0NBRkNISU1IRkNGSkxJR0ZKTUxGT0pLV1JLR0tKSk5JSUpMSUtKSUhLTU1NTElLS0tTa2JaaV5famNyclpfWWtvYGVlVWtfY1thYlFgbWhcalxuaWlkWm9lZHBdWlxrW21xY3BzbGRnY2RnYGBrbXBwb3R5cnVxb3BxbnmFiIeHhoWAdnNua21tb25xcnR0cnR1dXZ5eHhzdW5xdW53cXJ1dHdySUhGSURFREZBQEFFRENHQkhKTEdGREdLTElFRkpOS0lPSUxbUUpGSEhLTUlISkpLS0lISkdMS0tLR0hKSkxMTEtJS0xOVFtdVFBVTVFQTk9PVVJQT1FPT1FKSk9QUWRxaVRZVltbXFVZW11YXVxcY2ZhYWZiY2ZfXmZrbWhtdHhydHJvcHB0hoeGhoaFhYaHg3pwbW1sa3FzdHRydHZ0dXl5eHV2cXJ1b3ZydHN1dXNIQ0VHRkZBRUM/Q0dERUdDSUtMSEZER0tMSERHSFBLTE9LTFdNSUZFSElKSElLSExKSUZISEpHR0lFRktISUtOTElPXFdeT1xcYF5PWFlTXFxiXk1ZWk1YYVJLWWFaU2BkXWJYW2RkVlZYXFlaWFxWWVxeY19kYGFfZWhrZ210dHFxdHBxcoGGhoaFhoWFhYaGhoR9cmtpb3Jzc3N0d3l5eHl4d3h0cXhyeHNxcnVydE9CQ0RMTUJDREJESUVHR0ZLSktIRUZKSkpGREhIUEpMTUpNUklIRUFIRkpJS0tJTEpJR0VKSEVGR0VFSkdCSU1KS1RfWWBYYGFbYFVYWVReXlpfUllcUF5cWU5fXF5TW15jX1pdYGNfWV9iW2BeW1RZWFpfXmRiYmFjZWlla3Jwb3Bwbm93hoaFhYaCe4CFhYaGhYaFf3VxcHJyc3Z5eXp5eXh4eHdyeXZ4cnF4dnR2YVNKSk1JRUNCQ0ZHRUdHSUpKSUlER0tKSkRFSUlOSk5MSExOR0hGPkdHTElLS0pLS0lHRUlFQ0RFQkZKRD9JS0hOW2NZXl5hX1JUU1dfYFxdWV5RWVxNVl9XS1FZW1FbX2FhXV5jYWBiYWJjY2VaUlhWVlxbXmNgX19jZWJob21tbGxsbHWFf4SDeXV8hIWFhYaGhYWGhoN9d3JydHd5eXl5f359eXV5dnZybnp3dnhYUUpGQ0dFQkVHSEZHSElGR0pHSEZIS0lLRERKSk1NTExISkpISkc/R0ZOSktLTUtLS0lHSEREQERBSElBPkhJRk9dYVpbZF1fVFFSWF1cXFxfWktXXExSXFlJTV5RUV1fYWNjY2NiXGRiYWRjZlhRVlVTXFhbYV9eX2FhX2Rsa21qa2xudn51gXp8hIWFhYWFhYaGhYaFhoaGgnpyc3V1e4WHh4eGhYSBfnhwend2eFxSTUJASUZDRktJRkZHSUdHSkZGRklMSk5FREpKTE5KTElLSkhJR0JISFFNS0tPTUtLSUhIRUQ/RUJISEFARkVDVF1ZXlhfWF9bXVVYWFBdXVFLSlZeWF5bXVZaYVJSX19iYmBgYmJgY2JhZGRiWE9SUlNcU1xeXV5eX19gZGhnbGpubnB7e3x+e4CCg4SFhYWFhYWEhIWDhISHh4FzcneFh4eHh4eHh4eHh4WDgHx4XFNLQkFHRkRHTVJIRFJLRkhISERGS0lNUEVHSUpLTkxMSUxLSUlHREhLUU9NTFBMTEtLSUlERUFFQ0hGQUFGREFWVUVcVF5TVmBYTlRVTlpbTUpLVGBhW19YX15iXU9ZYlxgYF9iY2JdYmJXX19UUE9RUllTXlxcXV5fYGFmZmVsZm9vd3x7gHt9f4CEhISEhIWFhYODhYKDgoWFhnpvgYaGhoeHiIeGhoaFhYSFg35JTkZERkZHRElSY1FEV19JR0dIREZNSlBQRklJSktOTExLTUtKSkdFSU5RUU5PT01OTU5IS0FEQUNERkRCQUNEQExIQkxMUE9PTUZNRkZISUhHTExNT1BJTE9QUFNQTFFTUlVaWVdZWFhkVk9TVFBQT05RVVRcWVlbXl5hYWVmY2hka2xxc3N6eX97en+EhISEhISEhIKEgH57gYOBfXuFhIaGh4eHhYWFhISEgoGAfUtJRUVHRkdES01eTUdIWU1HSEpIR01MUVFJS0pLS05NVU5PS0tMR0dLT1NTTlBPTk9PT0hLRmBFRF9MRGZjQ0xbSF5bc21PTlZtWUxDUF9UbFdnSl1XVV5ETFFVTE1TVlFSVFhXVFhVVFxUUGZaaGhkWVRrVFhXVVtcXGBgYWJiYmBnaWdubGhyenx9foGEhISEg4ODgX19enJ7gXp7f4KAg4SEhYWBhIWBg4N/fnp7S0lFRkZIRUVLT1RKS0dgVEhKT0pJT01SUUtNS0xPUlVST09KTE1HSE1RW1lPUFBOT1BQSUtRf1FJfFlZcnNXUG1IcW5vYVZScnF0T0Jrc25xdHBTb19bblhdVlxYVWtoVV1WY1lgWVpfVlVXf2l0dXVfYXZgWWJcXGZbX2FhYWJeYGJnbXBsYHB3dHiBgYKDhIJ/fX6Adnh6bXZ+dHh+gHx+gIGChHyAg3p/gX9+d3dNSUVITU1CRExMR0pMRlJWTExPSEtSWFdRTk9PTVFUTk9RUEtLTkdNUFNbWlRRUk9QUFFLSVp4XVR4ZGhZUlNQdmd0bHBibmdrUXJPTHdtanJwc3JxcnBvcIBdZnp1eHFxenF+cn1rdX1iUmd8ZXNzb3NzfH1vfnlvf3JfYGBiYlthYGhrbmtibGZnbXd+gYCDfnt4d4B0dnpocn5udHx+d3h7foCDeHyBdXx/fHxzc05LRmBdR0FFTU1IS0tISlFPTU5KTlZeWVVMUVNOWVlMU1NSTkxPSVFSVFlXV1FUUFBRU0xIZ3hsY3hxbVpLTFR5cHVtdWJvd1FkZElldnFtd2+AamZ4eGlXclJpe21panp6fWx4en9wZ29YdXVqdnVwgGFzaHxpbHh8b19fX2NiXF9kZWZpamRnYmNkbGxwcHN0c3NzeXFyeGJsdGdyeXtzcnV5foFzdnpufH15eHJuTUpSdE5DQkVQUElLTEpMUU9PT01QWmBaWEtUV1BhXlJWUVlTTVBKU1RVWFdXUFVQT05TSktyb3V1cXVxZGhhVm5McXBeR2h5V3ZUS2h4fXhgeXtzbmFebW9kU2dydW5teXB3bHZzdHFsbVxzfXprbXl8bHVtfGtwdnV4Xl9fYl5dX2VkaWdoZWVeYmJpaWlqa25va3FubWpwYWNmZG93eG9tcHN5f25xcGp7enRyb21LS1pWSEdFR1JQS0xOS0xRUVBQUFFXXFlVTlZZVWZYUlJZXlRNTkpUVFZXWVdPU09PTlFJUm1IaXdLYGR2dVVXbE5ubHtyYWpnf3VUS1draH1sbWx4YFtwentfYHpzY3JveHFoZHxpcntdVEtsX3Z1a2l1e3ttfnhrfHBdXl5iW15iZGVnZWVlYlpjY2lra3JzcndnbWloZGdgYWxhZ3NybGhtbXJ8a21oa3t0bW1rbU9HSktISkhIUlFNT1BNTFNTUk9TUldSVlRQV1pWVlRUVGFgUU9OS1RTU1FWVk9PTU5PUUpIUU5QVUxLS1JTUlJST1ZVUVFPUlJYWFBOUFVUWFhYW1tVU1NXW1dYV1tPUlRXV1hRXVhWXVVTT1hSVldXWFpgW2dyXltbW11dX2NaX2NjZWZkY2NiWmNjZ2ZmbW5tdWZmZ2NgZl9dZ2BkbGhmZ2tocHpoZ2drdWpoZ2lsUElLS0xNS0pUUk1SUVBMVlVUUFRVWFVaVVJaXVZVVFdVWVhQT0xOV1RQTlVTTlBOTFFQS0pRUUtRTUpLT1FUUlBRU1JJSU1OT1FSUFBRVFZSWFdcV1NTUVFVVVZUWlFOUlFXVVRZVlRZVVNRVVNUVVhZWF5aX2FdXFpaXV1gY1xdYmJkZ2VkZGFZYGFjYWJoaGluY2FkXl9jXVpkXGJtYV5mZmdtc2RpaGtrZWRjZmhRSktLTk9MTVRRT1RRUU1YV1VUVlhXV1pWVFxgVldVWVVYVFFQS09YU1BOVVFOUk5MU1BNTlVTTlFOTU5RU1BUUFJUVE5MTk9RVFRRUVFWV1VZWltZU1VSVFhXV1lbU09SVFdVVFlVVllVUVFXVVZYXFpbYF1WWV9dXl1cXWBhXltiYmNoZmVkYlhgYGJdYGhlZmRhXl9dXV5aWl9aX2dgXl5dY2hrYWhmaGZkYGJkYlBLTUxQUUxPVFBQVFFPUVpZWFdZWlpYWVZdamRWWFlaV1ZUVE9LT1ZUUE9UUFBRTk1RUU9SWFNRUU9NT1NVTldRVFRVT05OUVRVVVJSUlRYVlpdXFpWVlFSV1hWW1xWUFNVVVVWWFNXV1RSUVhWVltfW15gX1ZfXV5gXFxgYF9fWmJiZGhoZWRiWWJgYl5eZmRjYGJdXFxcXFlaW1hbYVteXVxfYl9fYmRkYmRfX2BcUE1OTlJRTVJTUFNUUU9VXFpaV1tbXFlaW2RxbWhkX1tZVlZYUk1NVlNNTlJPUVJPTVBTUlVaVVNQUExQV1VRVlJTUlhNT1BRVFhVVFRTVVlYW15dXFtWUk9VVlVbW1ZRU1ZVVlhUU1haVFNRWVdXXV9bYF9gVmJcYGFdYGJfXGBdY2BjZ2llZmBaY2BhX19lZV9gY1taXFtcWlpZWVdcWlxbYF5gW15eYWBfY1xZYFpRTk9OVlFQVVNQVVRTUFdcXFxZXlxfV1xeanB3eYBjXFtWVllSTk9XU05RUVBSVFJMUVRTWVtXVU9STlNYVVNSVFJSWk9RU1NWW1ZWVlRWWlhdXlxcXlZTTlRWVltbVVFUVFZYWFJTWVxUUlJcWFpdXl1hYWBXYltjYl5hY19cYmFiX2RnaWRnXlxlYGFgYWNkX2JfWVpfW1xbWFhZV1daWlphXF1bXVxcWl1gV1tbWlBPT09ZUFVVU1JXUlRQWl1eXVxgXGBVXF1oanJ9c2xoXFVZV1FPUltTUlFUUlRVVEtSVlVaWlpTT1NRVVVVU05VUVJaUlRVVFhdV1hYU1hcWF5dWVpdVFVOVlZXXlpYUVRUWFhYU1ZZXFRSVl1ZXV1hXmNjX1lgW2ViX2RkXl5jY2FeZWZpZWZdXmRhYWFiY2RfYl5YW19bXFtYWFhYV1taW2BdW1tcW1haW15WXlldUE9PUlpQW1VVV1ZUVFReXmBfXmJcYFVdXmJreXVtfWxaVVpWUVFUXFRUVFVUVllXTFJaVlxaXFJQVVNXVVVTT1dRU1dTV1VWW11YW1lVWl5YX15ZXFlSV1JZWFlfWVlSVFVaWVlVV1lcVVRaXVxeYGFgZWRdXl1dZWFiZmReX2RjYFxnZGhmZGJfZGFfYWBiYl9gXldZXlpcXFpZWVdWXVpdXltaW1xbV1lcXVZYV11TT1BXWVBdVVZZV1dVWF9gYWFgY11gVV1eYmVldoJ7aFhZWlRWVFZcWFdXVlZXXVhPVVxZXl1dVFNYUldVU1JTV1FTVlRYWFhdXlhdW1VeX1hfX1hcVlFZVVlaWmFYW1RWV1paWlhZWVpXVl1eX15jYmJlZV1iXGBmYmVmZF9gZGJhW2ZjaGZjZmFmX19hYmFhYF9eVlVdWVtcW1lcWVldW1tbWFhZW1laWl1fXVRZXVVOU1pXVFxVVldZV1ZcYGFhY2FjX19WW2BkYV96dW9oWlxaVlhWWFtaWVtZWFlgVk9UXVtgYVxVVVlQVFZUUlZVUVNVV1tbXF9eWl9cVl9fWl1eWV5WU1lYWVpdYVldVVZaW1pbWlpZWlhZX19gYGRjZGVlYmRaYmZjZ2ZlXmFiYGNeY2NpZWRnX2deYmJjYWFgXl9YVFpaWltbWFxYWFxbWltXV1pYV1xbXGBdVl1dU09WWlZWWlZZVVhXWF5gYmFkYWRhXllZYWRiYGtmaF5cXVtXV1laXFxcX1tZW2JWU1deXWFjXFNWWVBWVVVVVlVTVVRYXV1fYGBdYV1XYF5bXlxbXlhWWFhbWl9fWl5XWFxcXV1dW1pcV1pfYV5gZWRkZmZmYlljZmVoZ2ReY2BfZWNdZmlkZWhfZ15jYmNhYWBfX1tYWVtZWlpYWlhXW1xaW1dYWlRZXVxaYFxVXmJNUldZVldaWVtcWVdZXmBiYWVhZGFdXllhY2JfYWBhX11dXVhXW1tdXV9fXFpdY1hZV1xgY2RfUllZUFdWV1hXVlZXVl1dXmFiYV9iXllhXV1eWV1eWVhVV1tbYF5cX1lZXV1eXmBcWlpZW19iX2JlZGVmZ2diWmRmZ2lnY19jXmBmZVppaWNmaWNmX2JiY2FgYF9dXVpYW1lZWFhaWVdaW1pZV1hWVVtdXV1gYGJieEtXV1xZV11cXF1aV1xdX2BiZGJjYV1gWGJjYmBjYWNeXF1cWFdbXV9dYF9dW2BkXFxXWmJlY2FSXFlPWFZZW1lZV1paYF5hYmNgYWNfXGJdX11bX15ZWVRYXV1fX15fW1peXmBiYlxcV1tdYGJiY2VkZ2ZlZ2RdZWZoaWZjYWJcY2dgXGlpY2hpZmVgYmFjYV9gX11dXFlcWVhXWFlZV1xbWldXWFBYWl1hY2Zmcmt/SllXXVtaX11cXlxZXVteX2JjYmFhXWJbYmRhX2NiYl1cW1pXWGlxYFxgX11cYWNfXVhZY2VkYlRfWlFZV1xdXFtZW1tjYGNjY2BiZGFgY15gXF5fX1pYVltfXVxhYV9dW2BhYmViXlxTXF9gY2RkZmVnZmVmZV9mZmhoZ2RkYFtmZ15haGhiaGhmY2BiYGNiX19fXV1bWltZWFhYVlpWXFpaVlZVTFhXXGdpa2h1eIF2dnZ2dnZ2dnZ2dnd3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d4eHh4eXl5enp6enp6e3p6ent7e3t7e3t7e3t7e3t7e3x7e3t7e3t7e3t7fHx8fHx8fHx8fHx8fHt7e3t8fHx8fHx8fHx8e3t7fHx8fHx7e3t7e3t7fYmIhoqHhYKBgoOCg4OCgoKCgoKCgoKCgoGAgYCBgICAgYCBgYGAfnx8fHx8fHx8fHx8fHx8fHZ2dnZ2dnZ2dnZ3dnd3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3h4eHh5eXl6enp6enp6ent7e3t7e3t7e3t7e3t7e3t7e3t7e3t6e3t7e3t7fHx8fHx8fHx8fHx7e3t7e3t7e3t7e3x7e3t7e3t7fHx8fHt7e3t7e3t8iYmHiYaFgoGCgoGCgoKCgYKCgoKCgoKBgYGAgICAgICAgIGBgYB9fHx8e3x8fHx8fHx8fHx8dnZ2dnZ2dnZ2dnZ3dnd3d3d3d3d3d3d3d3d3d3d3d3d3d3d4eHh4eHh5eXl5eXl5eXl5eXt7e3t7e3t7e3t7e3t7e3x8fHx7fHt6enp6ent7fHx8fHx8fHx8fHx7e3t7e3t7fHx8e3t7e3t7e3t7fHx8fHx7fHt7e3uHiYiJhYSDgYKCgoODgoKCgoKCgoKCgYGBgICAgICAgICAgYKBgH58fHx8fHx8fHx8fHx8fHx2dnZ2dnZ2d3d2d3d3d3d3d3d3d3d3d3h4eHh4eHh4eHh4eHh4eHh4eHl5eXl5eXl5eXl5e3t7e3t7e3t8e3t7e3t8fX19fXx9fHp6enp6e3t8fHx8fHx8fHx8fHx8fHx8e3x8fHx8e3t7e3t7e3x8fHx8fHt7e3t7e4aJiYiFhYOBgoKCg4OCgoKCgoKCgoKBgYGAgICAgICAgIGBgYCAfnx8fHx8fHx8fHx9fX18fHVwb29vb3Bwen59fX19fYSMi4uLi454KSkqKiopKz0/Pj4+Pj5tgH5+f397pdfT09PT1r2GiYmJiYqHc3FycnJydD4oKysrKiKL29LS0tLWun1+f39/f359fHx8fHx8fHx8fHx8fHx8fHx7fHx8fHx8fHx8fHt7e3t7hIuHh4aHgoGDg4GCgoKCgoKCgoKCgoGBgYCAgICAgICAgYCBgIB+fHx8fHx8fHx9fXx8fH19dXBub29vb296gH9/f39+hpCPj4+Pk3kZGhoaGhocMTMzMzMzMmqCf4CAgHut6eTk5OToyomMjIyMjIlyb29vb29yMhcbGxsbEI7v5eXl5enHfX5/f39/f319fXx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx7e3uCjYeIh4eDgoSCgYKCgoKCgoOCgoKCgYGBgICAgICAgICAgICAgH58fHx8fHx8fXx8fH19fX12dXV1dXV1dXZ3d3d3d3d4eXl5eXl6eG9wcHBwcHBycnJycnJyd3p5eXp6en6Dg4ODg4SBfHx8fHx8fHp6enp6enp1c3Nzc3NzfYWEhISEhYJ8fX19fX19fX19fX18fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx7e4CMhomHh4SDhIKCgoKCgYKCg4KCgoGBgYGBgYCAf4CAgICAgICAfnx8fHx8fHx8fX19fX19fXZ2dnZ2dnl3dnZ6e3h7eHd2dnh5enl6fnl5eXh4eHh5eXl5enp5eXl5enp6eXh4eXl5eXl7e3t7e3t7e3t7e3t7e3x9fX19fX17enp6enp6e3x8fHx9fX19fX19fX18fH19fX18fHx8fHx8fHx8fHx8fHx8fHx8fHx8f4uHi4qIhIODgoKCg4KBgoKDgoKCgYGBgYGAgIGAf4CAgH+AgYF+fX18fHx8fHx9fX19fX19d3d3dnZ3fXh3d316eH14d3d3fHt6fHp9e3h3d3d3eHh4eHh5eXl5eXp6ent7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7fHx8fHx8fHx8fHx8fHx9fX19fX19fX19fX19fX19fX19fHx8fHx8fHx7e3x8fHx8fHx8fHx+iomMjImFg4SEgoKDgoGCgoKCgoKBgYGBgYCAgICAgICAf4CAgH19fXx8fH19fX19fX19fX13d3d3d3p9eHt4fHx3e3h3d3l+e3l9eX16eHh4eHh4eHh4eHh5eXl6enp6e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3x8fHx8fHx8fHx8fHx8fHx8fX19fXx9fX19fX19fX19fX19fHx8fHx8fHt7fHx8fHx8fHx8fH2Kio2NioWDg4OCgoKCgYGCgoKBgoGBgYKBgIGBgICAgIB/gIGAfXx9fX18fX19fX19fX19fXd3d3d3fX55d3d4e3p8eXd3e358eXx6e3p3eHh4eHh4eHh4eXl5enp6ent7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3x8fHt8fHx8fHx8fHx8fHx8fH19fX18fH18fH18fHx8fX19fX18fHx8fHx8fHx8fHx8fHx8fHx8foqJjo2JhISEg4KDgoKBgYKBgoKCgYGBgoGAgYKAgICAgH+BgIB8fH19fX18fX19fX19fn5+d3d3d3d5fHl7eHx9eXt5enp4e3x8fXt9e3h4eHh4eHh4eXl5eXp6enp7e3t7e3t7e3t7e3t7e3t7e3t7e3x8fHt7fHx7fHx8fHx8fHx8fXx8fX19fX19fXx8fHx8fHx8fXx9fX19fXx8fHx8fHx8fHx8fHx8fHx8fHx/iIeNioeFhoaDg4ODgoGBgoGCgoGBgYGCgYCAgoF/gICAf4CAgHx8fX19fX19fX19fX5+fn53d3d3d3Z4eHl3eXp4enh5eXd4ent6eXt4eHh5eXh4eHh5eXl5enp7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t8fHx8fHx8fHx9fX19fX19fX19fX19fX18fH18fH19fX19fH19fX19fHx8fHx8fHx8fHx8fX+HiIyIhoeHhIKDhISCgYKBgYKCgoGBgYKBgIGBgYGAgIB/gIGAfHx9fX19fX19fX1+fn5+fnd3d3d3d3d3d3d3eHh4eHh4eHh4eHl5eHl5eXl5eXl5eXl6enp6ent7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7fHx8fHx8fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fHx8fHx8fX19fHx8gIeIi4eHiYaDg4SDg4KBgYGCgoGBgYKCgYGBgIGBgYCAgICBgX97fH19fX19fX19fn5+fn5+d3d3d3d3d3d4eHd4dnl5eHh4eHh5eXl5eXl5eXl5eXl5enp6enp6e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7fHx7fHx8fHx8fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fHx8fH19fXx9fXyBhoqKiYmIhIOFhISCgoGBgYGCgYGCgoGBgYCAgYGAgIGAgIGBf3x8fX19fX1+fn5+fn5+f394eHd4eHh4eHZxZGpeam15eXl4eHl5eXl5eXl5enp6enp6enp6enp7e3t8e3x8fHt7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3x8fHx9fHx8fH19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fIGFiYqJioeEhYWEg4KCgYGBgoKBgYKBgYGBgYCBgYCAgYCBgIF+fH1+fn5+fn5+fn5+fn9/f3h4eHh4eHh5bWRiZV9fXm95eXl5eXl5eXl5eXp6enp6enp6enp6e3t7e3t7fHx8fHx8fHt7e3t7e3t7e3t7e3t7e3t7e3t7e3t7fHx8fHx9fHx8fH19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18goWKiomJhISGhYSDg4KBgYKCgoGBgoGBgYKBgIGBgICAgICBgH58fX5+fn5+fn5+fn9/f39/eHh4eHh4eW5kZWdlZGJeZnh5eXl5enp6enp6enp6enp6enp6e3t7e3t7e3x8fHx8fHt8fHt7e3t7e3t7e3t7e3t7e3t7e3t7fHx8fHx8fHx8fHx9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXyChouJiIqEhYaEg4OEgoGBgYGCgYKCgYGBgYCAgYGBgIB/gIGBf3x8fn5+fn5+fn9/f39/f394eHh4eHl3Z2VkZWZkZWFfaXl6enp6enp6enp6enp6ent7e3t7e3t7e3t7e3t8fHx7e3t7e3t7e3t7e3t7e3t7e3t7e3t7fHt8fHx8fHx8fHx9fX19fX19fX19fX19fXx9fX19fX19fX19fX19fX19fX19fX19fX19fIKGi4eJh4SEhoSDg4WBgYGBgYKCgYGBgYKBgICAgYGAgYCAgYF+fHx/f35/f39/f39/f39/gHl5eXl5eWtlYWJlZWFlZV5ieHdze3p6enp6enp6enp6e3t7e3t7e3t7e3t7fHt7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t8fHx8fHx8fH18fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19g4aLhoiFhYaEgoOEhIKBgYGBgoKBgYKBgYGAgYGBgYGAgIGBgn98fH9/f39/f39/f3+AgICAeXl5eXl0Y2NlZGNmY2doZGZsZF5ze3p6enp6enp6enp6ent7e3t7e3t8fHx7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3x8fHx8fHx8fH19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX1+fn6DhouGhoaGhYODg4SDgYGBgYGCgoGBgYKBgYCAgYGBgYCAgYGBfnx8f39/f39/gICAgICAgIB5eXl6d2RhY2diYmRdW2VfYV1eYGFoeHp6enp6enp6enp6e3t7e3t7fHx8e3x7e3t7e3t7e3t7e3t7e3t7e3t7e3t8fHx8fHx8fHx8fH19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX1+fn5+fn5+foSFi4eGhoaGhIODg4KBgYGBgoKCgYKBgoGAgIGBgYGAgYGBgYF+fX1/gH+AgICAgICAgICAgHl5eW9vYmJiZF5jZ19dYWFgXF9kYlttfHp6enp6enp6enp7e3t7fHx8e3t7e3t7e3t7e3t7e3t7e3t7fHx7e3x7fHx8fHx8fHx8fH19fH19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX5+fn5+fn5+fn5/hIiLhoSHhoaEhIODgoGBgYGCgYGBgYKCgYCAgYGBgYGBgYGBgX5+fYCAgICAgICAgICAgICBeXpwXWJlZGJkXmZnZ2BZYmJhY2VfXF1ze3t6enp7e3t7e3t8fHx8fHx8fHt7e3t7e3t7e3t7e3t7fHx8fHx8e3x8fHx8fHx8fHx8fHx9fX19fX19fX19fX19fX19fX19fX19fX19fX19fn19fn5+fn5+fn5+fn5+foCFjIqEhYaGhYODg4SCgYGBgYKBgYGBgoKCgYCBgYGCgICAgIGBf35+gICAgICAgICAgIGBgYF5emxiZGdjYmdmYWBgZGFiZWRjZGNeXGJ1fHt7e3t7e3t7e3x8fHx7e3x8fHx7e3t7e3t7e3t7e3x8fHx8fHx8fHx8fHx8fHx8fHx8fH19fX19fX19fX19fX19fX19fX19fX19fX1+fn5+fn5+fn5+fn5+fn5+fn9/gYeMiYWGhoeFg4SDgoGBgYGBgYKBgoKCg4KBgIGBgYKBgYGCgoF/f36AgICAgICAgIGBgYGBgXp7dGdnZmZkZGZmYF5fYWNlaGRlXmJkYHR8e3t7e3t7fHx8fHx8fHx8fHt7fHt8fHt7e3t7fHx8fHx8fHx8fHx8fHx8fHx8fHx8fH19fH19fX19fX19fX19fX19fX19fX19fX19fX5+fn5+fn5+fn5+fn9/f39/f3+CiYqIhoaIhoWDhIOCgYGBgYGBgoGBgoKCgoGAgYGBgoKBgYKCgX9/f4GBgYGAgYGBgYGBgYGBenptaGNjZ2ZnZWdmZmdiZWRlYmdbYmVgdnx8e3x8fHx8fHx8fHx8e3t8fHx8e3x8fHt7fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx9fXx9fX19fX19fX19fX19fX19fX19fX19fn5+fn5+fn5+fn5+f39/f39/f39/f4SJioiGiYeFhYSEg4KBgYGBgYGCgYKCgYGBgYGBgYKBgoGBgICBgH9/gYGBgYGBgYGBgYGBgYF7emlpZGNqZmFgZmVjY2NnaWRjYmBiZGJ0fXx8fHx8fHt8fHx8fHx8e3x8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fH19fX19fX19fX19fn5+fn5+fn5+fn5+fn5+fn5/f39+fn9/f39/f39/f3+AhIqMiIeJhoSFhYOCgYGBgYGBgYKBgoGBgYGBgYGBgoKBgYGBgYGAgH+BgYGBgYGBgYGBgYGBgXZzZWRnY2RmZWJlZmdkZmhmZWNgYGNkYHF9fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fXx8fHx8fHx9fX19fX19fX19fX19fn5+fn5+fn5+fn5+fn5/fn5+f35+f39/f39/f3+AgICFioyJiIqJhoaDgoKCgYGBgYGBgoGBgoGBgYGBgIGBgYGBgYGCgX+Af35/foCCgoKCgoKCgoKCc3NnZWRkZWlqaGZnZ2NhZmZlZmdmZWVjdX18fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fX19fX19fH19fX19fX1+fn5+fn5+fn5+fn5+fn5+fn5+f39/f39/f39/f39/gICAgICAgIWLioqJioeHhoSCgoGBgYGBgYKCgYKBgYGBgIGBgoKBgYGBgYGAf4B+dHRzdX1/goCAfn5/gYB0cmdkZWNmaWppZWNlY2BmZGRnZ2JiZWFwfXx8fHx8fHx8fHx8fHx8fHx9fX18fHx8fHx8fHx8fHx8fHx9fX19fX19fX19fX19fX19fX19fX1+fn5+fn5+fn5+fn5+fn9/f39/f39/f39/f39/f39/f4CAgICAgIB/houLiouLh4eHhIOCgYGBgYGBgYKBgoKBgYGBgYKCgYCBgYGBgoCAgH5zc3NzdHV4dXV0dHV2dXVwZmNmZWhoaWdoZ2VmZWJfZGVmY2BiZ3d8fHx8fX19fX18fHx8fH19fX19fX19fXx9fXx8fX19fX19fX19fX19fX19fX19fX19fX19fn5+fn5+fn5+fn5+fn5+fn5+f39/f39/f39/f39/gIB/f3+AgICAgICAgICHjIyIi4qHh4eEhIKBgYGBgYGBgoGCgoGBgICBgoGBgYKBgoKCgYCAfnNzc3Nzc3NzdHR0dHNzdW9jY2FnZWhoZ2pmZGVnZmhmY2JlYl5ieX18e3t8fX19fX18fHx9fX19fX19e3x9fX19fX19fX19fX19fX19fX19fX5+fn5+fn5+fn5+fn5+fn9/fn5+fn5+fn5/f39/f4CAgH9/gICBgICAgICAgYCAf4CAgYGAgIeLi4iNiYiJhoSFgYGBgYGBgYKCgYKCgYGBgIGCgoGBgYKBgoKBgIB+dHNzc3Nzc3Nzc3Nzc3N1cmdlZWRlamhoZ2ZpaGdjZWViZGNoZGd7eHVzc3R2dnl4dnR0dHZ3d3d2dHR0dXV4d3h4d3d6e3x9fXx9fn5+fn5+fn5+fn5+fn5+fn5+fn5/f39/f39/f35/f39/gH9+fHt7fX58eXl2dnZ5fHx6end2d3l7fXt4hIyMioyHh4iEhYSBgYGBgYGBgoGBgoGBgYGAgYKCgYGBgoGBgoGAgH51c3Nzc3Nzc3Nzc3Nzc3VzaGVnaGVrbGhqZ2lqZ2dnZmRkYmVkbnV0dHNzdHNzc3Nzc3Nzc3Nzc3NzdHNzc3Nzc3Nzc3N0dHV1c3V3eHl7fn59fn98f39/f39/f39/f314fH5+fXx4dXZ3eXd4dnRzc3N0dXRzc3Nzc3NzdHNzc3R0c3R0dHODjI2KiYeIhoOGg4GBgYGBgYGBgYGCgYGAgYGDgoKBgYCBgYGBgICAf3VzdHRzc3Nzc3Nyc3NzdnZpY2hqaGpsZWZpbGhgZmVkY2BkZGZ0dXV1dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHRzdHRzc3Nzc3R2dnV1d3V4fH9+fX9+fHp4dXN0dXV1dHNzc3Nzc3N0dHR0dHR0dHR1dXR0dHV1dHR1dXR1dXV1dIaMjYuIhoeEhIWCgYGBgYGBgYGCgoGAgYCBgYKCgoGBgIGBgYGAgIB/dnNzc3Nzc3Nzc3Nzc3N2dnNnZ2pmaGdmaGhmZGlnY2NnZWVmcHZ1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dHR1dHR0dHR0dHRzdHR0dnV1d3Z0c3R0dHR0dHR0dXV1dXV0dXV1dXV1dXV0dHNzc3N0dHNzdHR0dHR1dXR1iY6MjIqHh4SEhYKBgYGBgYGBgYKCgoGBgICAgoKCgoGBgYGBgYCAgH93c3Nzc3NycnJyc3NzcnZ2dW5kXWNnZWlraGVoZ2dqamlnZXB2dXV1dXV0dHRzdHR0dHR0dHV1dXV1dXV0dHV1dHR1dXV1dXV1dXV1dXR0dHV1dXV1dXV0dHV0dHV1dXV1dXV1dXV1dXV1dXV1dXV0dHNzc3Nzc3N0dHNzc3Nzc3R0dHR0dHWKjoyMiYaGhIeFgoGBgYGBgYGBgoKBgYGAgYGCgYKBgYGBgYKBgICAf3hzc3Nzc3JycnJyc3NzdnZ3d2liaGhnamtpaGZkZGVmaWhwdXR0dHRzc3JxcnJ0dXV0dHR0dHR0c3NycXFxcXNzdHR0dHR0dHR0dHV0cnJyc3R0dHR0dXV1dXV1dXR0dXR0dHR0dHR0dHR0dHR0c3Nzc3Nzc3Nzc3Nzc3N0dHN0dHR0dHR0dYuOjImGhYWFh4SCgYGBgYGBgYGBgoKCgYGAgIKCgoGBgYGBgYGBgIB/eXNzc3NycXJycnJzc3N3d3d3bGpoZGhpa3Z6a2VmZWhnbXJzdHN0c3JwcHBxcnN0dXR0c3NycnNycXBvb29vcHFzc3NycnJyc3R0dHNxcHFyc3R0dHR0dHRzc3Rzc3NzdHR0dHRzdHR0dHR0dHRzdHR0c3NycnFxcnJzc3Nyc3NzdHR0dHN2jZCMh4eFhYSEgoGCgoGBgYGBgYGCgoKBgYGAgYGCgoGBgoKBgYGAf395c3NycnFxcnJycnNzc3d3d3dzc2pnaWloeX99cW51bG5wcXJycnFxcG9wcXFxc3Rzc3NycXFwcG5ubm1ubW5ubnBxcnJycnJycnJzcXBvb3BxcnJzc3JxcnJycnJycnJycnJzc3Jzc3Nzc3Nzc3Nzc3Jxb29ubm9vcXJzc3Jyc3NycnNzcnaPj4uHhoWFhYOCgoKBgYGBgYGBgYGBgoGBgYGCgoKBgoGCgYGCgX9/f3hxcHBwcXFycnJyc3Nzd3d2dnd2cnF0c252f352c3hwcHBycnJycXFwcHFxcXFyc3Nzc3FwcXBvb25ubm5ub25vcHBxcXFxcXBwcXJwb25vcHFxcXFxcHBxcXFxcXJycnJycnJycnFxcnFxcnJycnFwb29ubm1ubW5vcXJycnJycnJyc3JxeI+OjYaDg4aEgoOCgoGCgYGBgYKBgYGCgYGBgYKCgoKCgoKBgYKBf4B/d29wb3BxcnJyc3Nzc3J2dnZ2dnZ3dnZ1c3l/fnd3d29wcXFxcXFxcHBwcXJxcnJzc3JycXBwb29wb29vb29vb29wb3Bvb29vcHBxb29vcHBwcHBvcG9wcHFycXFxcnJycnFxcXFxcXFxcHBwcHBxb29ubm5tbW5tbm9wcXFxcXFxcXFxcXB7j42NhoODhYOCgoKCgYKBgYGBgoGCgYGCgoGCg4KBg4KBgYGAgYF/f392bm9wcHBxcXFxcXBwcHZ2dnZ2dXR0c3NxfYB9fX9zb3BxcXFwcHBwcXFwcHBxcnJxcXFwb3Bvb3Bwb29wcG9vb29vb29vb3BxcXBub3Bwb29wb29wcnJycnFxcXBxcnFwcXFxcHBwcHBwcHBwb29ubm1ubm5ubm9ub3BwcHFxcXFxcXFxcIKRjoqEhIOFhIOCgoGBgoKBgYKBgYGBgYGCgoKCgoKCgYGBgYCBgX9/gHVvb29wcXFxcXBwcHBwdnZ2dXRzcnJycnGAgoCBeXBwcHBvcHBwcHFxcXFwcXFxcXFxcG9vcHBwcHBwb3BxcHBvb29wb29vcXFwcG9wcG9vb25vcHFxcHBwb3Bvb3BwcHBwcHBwcHBvb29vb29vbm5tbW1ubm5ub25vb3BvcHBwcHBwcHBwiZCMiISDhIaDg4KCgYGCgoKCgYGBgYCAgYGBgoKBgYGBgYGBgIGBgH+AdG5vb3BxcXFwcG9vcG92dnVzcnFxcXFxcICDg39ycHBwcHBwcHBwcHFxcHBxcXFxcXBwcHBwcHBwcHFwcHBwcHBwcHBvcHBxcXBwcHFxb29vbm9wcHBvb29vcHBvb3BwcHBwcHBwcHBvb29vbm5ubm5ubW5ubm1ubm9wcG9vb29vb3BzcXWPj4yJg4KFh4ODgoKBgoGCgoKBgYKBgYGBgYGBgYGBgYCAgYGAgYGAf4B0b29vbm9vb29vb29vb3Z1dHNxcXFxcXJygIKCgXRxcXFxcXFxcXFxcXFxcXFxcXBxcXFxcHFwcXBxcXFwcHBwcHFxcXBxcHBwcXBwcHBwcHBwcHBwcHBwcHFxcXBxcHBwcHFwcHFxcHFxcXFxcXJxcnFwcnRycnR0dHR1dnRzdHR0dXd3gpCPi4iDgoaHhISCg4GBgYKCgoGBgoGBgYKBgYGBgYGAgICBgYCBgYB/gHVvb29vb29vb25vb29vdXRzcnJycnJycnKDg4OCdnFycnFxcXJxcnJxcXJycnFxcXFxcnFxcXJycXFycXFxcXFxcXFxcXFwcXFxcXFxcnNzcnJyc3V1dHR0dHR0dHV2d3d3d3d3eHh4eHd3eHh4d3Z3dnV2dnZ2d3h6e3x7e3t6enp6enyGkI2LiIODiIeHhYODgoGCgYKBgYGBgYKCgoGBgYGAgYCAgYGAgIGBgH+Ad3FxcXFxcG5ucG9wcG92dHV1c3Nzc3NzdYiDgoN5cnNzcnJyc3Jyc3NycnJycnN0cnJzcnNzc3Nzc3Nyc3N0dHV1dXV1dHV3eHd3d3d4eHh3eHh4eXl5eXl4eHl5eXp6e3t7e3t6enp5eXh3d3d1dnV2dnd5enp7fn5+fX1+fn5/f35+gIyQi4qHg4WIi4iEg4SDgYGCgYGBgoGBgoKCgoKAgYGBgYCBgYGAgIGAf4B8enp5eXx5eHh2dXZ2dHl2d3h3d3Z3dnZ6f3x+fnx2dnd3dnV4enh4eHh3d3d2eHx5eXx6eXl8e3l5eXh4eXl6enl5eXh4enp5eXh4eHh3dnd3eHh3eHh5eXp7e3p8fH1+fX9/f359e3t7e3p5enl5e3t/foB/fn5/fn19fX5+f35+fn6AjpCNioeEhoqLiIaGhIOBgoKBgYGCgYGCgoKCgoCBgoKBgYGCgYCBgIF/f4B/fn19fX9/f318e3t7eXh4eHh5eXl4eXh5eXl4enp6enp6e3t7fH1+fHt7ent8e318e3t7e3t7enl4eXh4ent6enp5eXp8fHt6enx8fHp6ent9fHx+fn+AgoGAgYKAgH9/gYGBgIB/f35+fn5/fX1+f4CAf35+f39+fn9/f39/gH+Af4OQjoyHhoWIi4yIh4aFg4GCgYGBgYKBgoKCgoKBgYKDgoGBgYGBgIGBgIB/goOCgoGBgX99f39/f4F6enh4d3h4eHh5eHh5enp5e358enx9fXt8fX19fHx8fnx9fn5+fn59fX9/f3x8fYGDgYCAf318fXx9fXt9fXx8fH19fX1+gYGChISDgoB/gYGBgH9/f4B/f39/f39+fn9/f39/f35+f3+Af39/gICAf4CAgICAhJCPi4eGhoiLi4mKhYaDgoKCgYGBgoGCgYKBgYGBgoOCgYCAgYGAgIGBgH+ChIKCgICAgH9+fn+AgH9/fn18fX19fYB/fX+Af35/gH9/fn9/gIGBgICAf3+BgICAf4CBgn9/f4CAf35+f39+f39/fn5+f39/gYB/f4CBgYCAgYOEgoGCgoGCgH+AgYCBgYGAgH+BgICAf39/gICAgYGBgIGBgYCAgICBgoGBgYCAgYGFjo6MiYaHiYyLi4qGhoOCgoKBgYGCgoOCgoKBgIGBgYKCgICBgYCAgYGAf4KFg4KBgYCAf39+fn+AfX5+fn19fX5/fn9/f35+fn+AgYCAgICAfn9/fn+Af3+AgH9/f35/f39+fn59fn9+fn9/f35/gIGBgoKDg4KCg4KBgYKDg4OCgYGBgYKBgoKCgYKBgoGBgYGBgoKCgYGCgYKCgoGBgoKBgYKCgoKCgYGBgoKCgoaPkY+KiImKjY6NiYaFgoKCgoKBgYKCg4KCgoGBgYGBgYF/gIGBgYCBgIF/gYWEg4KCgoGCgYCAgIB8fHx7fH18fH9+fn9+fn5+f35+f39/f39/f359foB+fn5+fn9/f39+f39+fn5/gIB/gIB/f39/f3+BgYGCgoCAgYKDg4SDg4ODgoKCgoKCgoKCgoKCgoGCgoKDg4OCg4ODgoKCgYKCgoODg4ODgoKCgoODg4KCh5KTkIuKi4uPj42Kh4SCgoKCgYGBgoKDgoKBgYGBgIGBgICAgYGBgIGAgYCAg4SDg4OEg4ODgoKCgXx9fHx9gn1+f4GCiIGCgoSCgYGDg4GBgYKCgIGBgYCAf39/gICAf3+AgX9/f39/gYCAgICAgH9/f3+AgICAgH9/gYODhYSEg4SDgoKCg4OCgoOCgoODg4ODg4SDg4KEhYWDg4SEgoKDhIOCg4ODg4OCgoODgoCKlJOPioqMjpCPjYuGg4KCgoKBgYGBgoOCgYGBgIGBgoGBgICBgYGAgYCAgH+BgoODg4SEhIOCgoKCfXx8fn6AgYOAg4OChIaFhoaFhIWFg4ODg4OBgYKEhIKDgoeDgoKAgoGBgoKCg4KCg4KDgoODgoGAgIKCgYOCgYKCg4OEhYWEg4OChISEhIOEhISDg4OEg4ODg4OEg4SDhIWEhISDg4ODgoKCgoKCgoKBgYKCgo+UlI+Njo6RkY6KiISCgoKCgYGBgYGCg4GBgIGBgYGBgYCBgIGBgYCBgICAgIKChIKChIOCg4ODgoJ9fX2AgH+AgoGDg4ODhIaEhIOEhYWDg4GBgoOBgIKDgYKFhYWFhoaHhoWGhoeHh4aGhoeHhoaEgoGCg4SDg4ODg4ODhISFhYWDhYSFhISEg4KBg4OCg4SEg4KCg4SCg4ODg4OCgoKCgoKCg4OEhIOFhYWFhoaIk5OTkI+Pj5KRjIqIgoKCgoKBgYGBgYKDgoKBgIGBgYGBgICAgYGBgICAgICAhISEgoKCgoGBgoKBgX+AgYOCgICAf4CCgoGDg4KCgYODg4SEg4KDhYOCgYGBgoSFh4eHh4aGh4eHiIiHh4eIiIiFhIOBgIGBgoKCg4GCg4SEhYSDg4OEg4OEhIOBgYGCg4OEhISDg4ODg4OEhIODgoSDg4ODhIWFhoeHh4eIiIiJiY6TkpKOj46Qko+LiYeCgoKCgoKBgYGBgoKCgoGBgIGBgYGAgICAgYGAgIGAgICDg4KCgYKCgYGAf4CBhYWFhoOCgYB+fn+BgoSCgYKDhIOCg4ODg4KChISDg4OBg4SFhISFhYSDg4SFhYKEhIWFg4KBgH9/gIB/gIGEg4OEhYWEgoKCgoOCg4OFhIKDhISEhYaGhoaGhoWFhoeHhYaIh4aHiIeGhoaIiYeGhYaGhoeIkZKSj46QjpCRjImHhYGBgoKCgoGBgYGBgoOBgYGBgYGBgICAgICBgYCAgICAgISEg4KBgoGAgYGAgYKIh4aHhYSCgH99fX6AgH+AgYGBgYGBgoGAgYKCgoGCgoKBgYGCgYKCg4GBgICAf4GAgH+AgH9+gIGBgYKCg4OEg4OEg4OCgoGBgoODg4SEg4SEhIOFhYaFh4eIh4eHh4eHh4eGhoaGh4WFhYaGhIWEhIWEhYaSk5GOjo+OkI6JiIeEgoKCgoKCgoGBgIGCgoKCgoKCgYGBgYGAgYGBgICAgYGAgoSDg4KDgoGCgYKDg4iHh4iHhYSCgX5+gICAfn5+f4CBgYGCgYCCgoGCgH+AgIB+gIKBgIGCg4OAf39/gICAf4CAgICDg4KDg4ODgoOBgYKCgoOCgYKCgoOCgoSDhISDg4SEhYWFhYaGhoaFhISEhYWEhIWFhYSEhISDhISEhISEipSTkpCQj46NiIaFhIOBgYKCgoKCgYGAgYKCgoKBgoKBgYCBgYCBgYGAgICAgYGAg4OCgoOCgoKBgoOCiImJiYiHhYSDgYKEhIOBgYGCgoSCgoOEgoOEhYaEgoSCgX+AgoGBgoGChIOBgYGBgoOCgoGDg4SDg4SEg4OCg4KDg4ODg4KCgoKCgoGDhISEhYSFhYWFhIWEhIWFhYWDg4OEhISEhYWFhISEhISEg4ODg4OOlZKQkZGOjYyHhYODg4GCgoKCgoKBgYCBgoOCgYCCgYGBgICAgIGBgYCAgICBgICDhYSEhIODg4SDhIOGh4mIhoWDhIODg4WDgYCDgoOFhYODg4SDhIODhISFhISEgoGAgYKDgoKEg4OCgoGBhIWEg4ODgoKDhISDg4ODg4SFhISDg4KCgoKCgoSEhYSFhYWFhYODhYWFhYaFhoWEhIWEhYWGhYWFhIWEhISDhIODhJGUk5OSj4yMioWEhIODgYKCg4KCgoKBgYGCg4KBgYKBgYGBgICBgIGBgH+AgIGAgYaGhoaGhoaHh4aGhYSDhYaCgIGBgYGHgoB+f4GAgIKBgX+BgYCAgoGCgoKBgYKCgYCCgoKCgYKDg4GCgYKDhYODg4KDg4OEgoKEhIOEhIWEg4OCgoKCgYKCg4ODg4SFhYWFhIOEhYWGhYWEhISEhIOEhIWFhYWFhIODhIOEg4KGlJOSlJKPjYuHhISEg4KBgoODgoKDg4GBgoKBgoKCgYGCgYGBgYCAgYGAgICAgICAhYWFhYaGh4aGhoWGg4ODg4GAgoKCgYKAf35/f4CAf4B/gIGAgH+BgYGBg4GAgYGChIOBgYGBgYKBgYKDgoODgoOCgoKCg4OBg4SDg4ODg4OEhIKCgoKDgoKDg4ODhIWEhISEg4OEhIODg4OEhIODg4ODg4SDg4ODg4KDg4KDgouUk5KTkY2NioaDg4OEgoGCg4ODg4ODgoGBgoGCgoKCgoKBgYGBgICBgYCAf4CAgICDhISFhYSFhYWEhIWCg4KDgoKDg4OBgICAgICAgYCAg4KCg4KBgoKDg4OEgoODg4KAgICCgoKDgoKDg4ODgoODhIKCgoODgoKDg4KCg4KDg4WEg4ODg4SDg4SEhISEhYWEhIWEg4SEg4OEhISEhISEg4SEhYSDg4SEhIODgoKDkJSSkpKPi4yIhoOEg4OBgYKDg4ODg4OCgYGCgoKCgoKDgoCBgoGAgICAgIB/gICAgISDhYWEhYWFhYSFhYOEhIWDg4SEhIKCgoOCgoSCgYKGhYOFg4OEhISFhYSEhYJ/fX19foKEg4ODg4OEg4ODhISEg4OEhISEg4SEhIOEg4OFhoWFhYSEhoWFhYSFhoWGhoWFhYWFhYWFhYWGhoWGhoaFhoaGh4aFhYWFg4SEhIeTk5KRkoyKiIWFhYWCgoGBgoODg4OCg4KBgYKDg4ODgoKBgIGAgICAgICAgH+AgICAhYWFhYWGh4eGhYWFhISFhYSEhISEg4ODg4OEhYOCg4SFhYaFhoaFhYeHhoOAfn9+fn5+f4OEg4OEhISEhISEhISEhISFhYWEhYSGhYWGhYaGhoWGhYWHhYWGhYaGhoaFhIWFhYWFhIWGhoaHhoaGhoaHh4iIiIaFhYaEhYWGjZSTkpGQi4qHhoeGhIGCgoKDg4ODg4KDgoGBgoODg4KAgYGBgICAgICAgICAf4CAgICHh4eGhoeHiIeHhoaEg4ODhIODg4OEg4ODg4OEhIODg4WFhYWHh4aHh4WBf39/f39/f35/gISFhIWGhoaFhYWFhoaHhoaFhoWFhoeHh4iHh4eGhoaHh4eGhoaHhoaGhYSDhIWFhYSFhYaGhoeHhoaGhoeHh4eIiIeGhoaHh4eRk5KQkZCLiIiFhoSDgoKBgoODg4ODgoKDgoKCgoOCgYCBgICBgICAgIGAgIB/gICAf4aHiIeHh4eIiYmIiIODgoKDgoSEhIWEg4KCg4OEg4OChIWEhYeHhYeDgH9/f39/gIB/f4B/f4WFhoeIiIeHh4eIh4iHiIiIhoaHiIiJiYmIh4aHh4eIiIaHhoeHhoaFhIOEhYaFhYWFhoaGh4eFhoeGh4aGh4eHh4eHh4eFh5OTkY+RkIuHhoWGhIKCgYGCg4ODg4ODgoKCgoGCg4KCgIGBgYCAgICAgICAf3+AgYB/hoiIiIiHh4iJiYmIg4KCg4ODhIWHh4eFg4OFhIODg4KFhIOEgoGBgYGCgYGBgYB/gH9/fnt6gIaIiIqKiYmIiImJiYmKi4qIiIiJiouLioqIiIeIiIiHh4iIh4iGh4aEg4OFh4eHhoWFhISDhYWEhYWGhISEhYWFhoWGhYOJlJOQjpGOioaFhoWDgYGBgoKDg4ODgoKCgoKCgoKCgYGBgYGBgYCAgICAgIB/gICBgH+GiYiIiYeIiImJiIiEgoKDg4KDhImKh4aEhIWEg4OFg4iIg4GBgYKCgoKCgH9+fH19fX9+fHt8g4eJi4uKioqIiIqJiImLiomJiImIioqJi4mHhoaGh4WGiIiJiIeGh4SDgoSIiIiIh4WCgoGDg4KDg4SCgoKDgoGEg4SDgY6TkpCPj4uIhYSGhIKBgYGBgoODg4OCgoKCgoKCgoGBgYGBgIGAgICAgICAgH+AgIGAf4WIh4eHhoeIiIiHh4SCg4OCgoOFiYqJh4WHhYSFhYSDio2CgoKCgoKDgX59fn5+fn5+fX1+fX19g4eJioqHh4WGh4eHh4iHh4mGiIaIh4eJiIODhIOFhISFhYaIh4aFg4KCg4WHhoeGhoOCgoOEgoODhIKBgoGBgYODhIOEkZKRjo+Oi4eEhoaEgoGAgYGDg4ODg4KCgoKCgoKCgYGBgIGBgYCAgIB/gIGAf39/gIB/hYaGhYaGhoeHiIeGgYKEhIOChYaIi4qGhIaEgoaGgoCHhoODg4OCgoF9fH1/gH9+fn59fH19fHp8hIaHhoSDgYODhIWFhYODhYSEhISEhIWEgoKDgYSEgYKDg4WGhYSCgYGCgoODhYOEhIWEhIaDhISFg4KDgYKDg4SFhIeSkY+Nj4yJhoSFhIWCgYCBgYODg4ODgoKCgoKCgoKBgYGBgYGAgICAf4CAgYB/gICAgICDhIWEhYWFh4eHh4aAgYGFg4OEhYSHiIWCgYCAgX99foODg4ODgoKAfX1/gICBf31+fn19fX16enp+g4SEgoGBgIGBgoKBf36BgYGCgYOAgoGCgoKBg4OAf4CAgYOCgICAgICBgYGCgYGChIODhYSCg4SDgoKBgoSDhYWGjJORjo+Pi4iFhYOChIGBgYGBgoODg4KCgoKCgoKCgoGBgYCBgYCBgH9/gIGBgICAgH+AgIKCg4OChIOEhYWGhn+BfoCBgICAf4GDgn9+fn9+fHx/g4OCg4KDgX19fn+AgIGAfn19fX1+fXx6enp/goKBf39/f35/f4B+fYB/f4CAgX+AgIF/f3+BgX59fX+AgX9/foCAgH+AgICBf4CCgICCgYGCgYGAgYGBgYKEg4aPkpCOj42Kh4eGg4OCgYGBgYGCg4ODgoKCgoKCgoOCgYGCgYGBgICAgH+AgICAgICAf39/gYKDhIGCgoOCg4SFgIB/fH19fn1+foCAfn1+fXx9foKDg4KCgYF/fX1+f4CAgH9+fX19fHt7e3p6eXqAgIB+f35+fnx+f35/gH9+f3+Af4GAf359fn9/fn18fn+Af35+f3+Af39/f4B/f4B+f4CBf4B+f39/gH9/f4B/hZKSj46Pi4uHiYWEg4KCgYGBgYKDg4ODg4OCgoKDg4KAgYKBgYGAgICAf3+AgIB/gIF/f36BgYSEgYKBg4OCg4OBgH98fn5/fn6Af4B/foB+fX+BhIOCgYB/f359fn5/gICAfn19fX17e3x6enl5eXuAgH9/f39+fX5/foCAf35/f4CAgoB/fH5+f35+fXx/f4B/fn9/f4B/f35/foCAf36Af39+fn5/f35+f318fH2Fk5KNjIuKiImIhISEgoKCgYGBgoOCgoODgoODg4ODgYCBgYGBgYCAf39/f4CAgICAgIB/foCBhIOCgYGDhISDhICBgICBgIGAgYKCg4GBgX6AgoODgYGBgYCAfX19fn5+f359fX19fXx8fHt6eXl5eX2BgICBgYF/f4B/f4F/gICAgYGCgoB+gH5/fn5+foGAgoF/f39/gIB/f39/gYB+f4CAfn9/fn+Af31+fX17fIaTkYyLioeHioiGhoSDgoGBgYGCg4ODg4OCg4OCgoKBgICBgYGAgH9/f39/gICAgICAgH9+fn+BgYGAgISGh4aHgoSDhYOBg4ODhYSEhISDgYODg4KCgoKCgX5+fX19fn6AfX19fX19fX18e3p6eXl5eYCCgoKEg4CCg4GAgoCBgYGDgoODgYGCgIGAf4CBg4GEgoCAgYCBgYCAgYCCgn+BgIF/gIB/gICAfn9/fnx8ipOQiomIiIiJiIaGhoSCgoGBgoKDg4ODg4KDg4KCgYCAgICBgYGAf39/f4CAgICAgIGBf359fn5/f39+g4aHh4iChYSFg4SFhIWGhoaGhoWFhoGAg4ODgoKAfX19fX19fn59fX19fX19fX18e3l5eXl4fIKDhIWCgYSDgoKDhYaCg4SDgYKCg4OCgoKCgYKFg4iFgoGBgYKCgYGBgYSDgoOCgoKCgYGBgIF/gIGAf36Ok4yHiIaIh4aGhYaGhIKDgoGCgoODg4ODg4OCgYGBgH+AgYCBgYB/gH9/gICAgH+AgYB/fn19fX5+f36Ag4SHiISGhoaFhoaHh4aGh4eHhoeHf32AgIGCgX59fX19fX19fX19fX18fH5+fnx7eXh3eHl5gIODf4ONhIOEhISXl4ODhIF9foGCgoGCgYKBg4aIjIWDgoKBhIKEg4KDhYWEhYOCg4OCg4OCgoKCg4OCgpKQi4iIh4mHhoaEhoWEhISCgYKCg4ODg4ODgoGBgYCAgICBgIGBgH9/fn+AgYCAf4CAgH9/fn1+fn+Bf4CCgYWFhYeGh4eGh4eIhoaHh4aHiId/fH18fX9+fX19fX19fX19fX19fXx7iJKCe3x6fIZ5eHl8gYF+iZeEg4OEhJSTgIGBf39/fn6Fi4B/gICEhpCJhYSCgoGFhYuDgYKFhYaGhIOFhYOEhIODhIOFhISIko6LiYiIiYeHh4WGhYSFhIKBgoKDg4ODg4OCgYGBgICAgIGAgICAf39/f4CAgICAgYGBf39/f4CAgIGBgYGBg4OGh4aGh4aGiIeGhoaFhISGhYB9fHx8fX18fH19fX19fX19fX18fH+RlZaDe3qElHx4eXp7fH+Cg4GBgIOCgH58fn57iJF8fI6Wf31/f4KGioWDg4SDgYONiX9+f4OEhYWDhYaFhIWFg4SFhYaEhI6Rj4uKioyJiImHhYaFg4OCgYGCgoKDhIODgoGBgICBgICAgYGAgIB/f3+AgIB/gICAgX5+f4GBgoKCgoODgoOCgoWGhISFhYSGhIOEg4KBgYOBf319fHx9fXx8fH18fH18fX19fHx8e4uRl4x6e3yBenp6e3x5eX19foB/gH98e3t+fn2ClZF/hIh+fH5/goR8fIGChIKAf4eDfYKBf4KCgIODhISEhISChIOEhYKEkZGOi4yMjoqJiYWFhYODgoKBgoODgoKDg4KCgYGAgIGAgICAgICAgH+Af3+Af357gICBenyAgYKDhYODhYWFhYODg4SCgYODgoOCgoGBgIB/gX5/fX59fHx8fHx8fHx8fHx8fHx9fHx8fn6Kgnt6e3p4ent7fH17fn1+f319fX18fH+BgX2Gj4F+fYJ+f36Agnx8f3+BgIKAfnx7ioJ9gH9+gYCAgYKBgoCAgIGAf4uTj4uLjY2NiIeHhYWEhIOCgoKCg4OCgoODgYGBgICAgICAgH9+fXx7fHx9f3+AgHx6gYF4e4CCgYOFhIOFhIaGhISAhpSIgIKBgYGBgH9/f39/fn5+gHx8fHx8fHx8fHx8fHx9fHx8fHx8fHl7e3t4eHl7enp8gX+Afn+BfH5+f399gIKCgICAgX+CkYF/f4CAfoB+fn9+gIGBfX19e319fXx9fHx9gH+AgH6Afn6Bk5GMjI2Nj4qFhoaFhISFg4ODgoODg4OCgoGBgYGAgICBgICAf4CAf39/fXt6fICAgHh+gXd7gIF/gYKCgoKEhoeGhn6IlYp+gIGAf4B/foB+f39/fn+Bfnx7e3x8fHx8fHx8fH59fHt9fHx8e3x8fHp6eXt8en2Fg4J/gYF+f35/gH6FgoF+gH9+foCFhoKAfn6Dhn9+fH6AgIGAf39+fX19fX57fH1/f3+AfX9+f4uQjYyMjo2Nh4SGhoWEhISDg4OCg4ODg4KBgYGBgYCAgYGAgYGBgYGAgH9/f397en9/e3mAd3p/f31+f3+Af4KDhoaFf3+FgX5/gIB+gH5+f31/gIB/gIB/f319fHx9fn18fX19fX19fH58fXx7fXx8ent6fH19f4aEgoCAgX1+fX5/fouEgYZ+fXx8f36CgX99fX19gHx7fXx+gYSDgYB+fn5+fX1/f399foB+fn6EkYyLi46Ni4qGhIWEhIODg4OCg4KDgoOCgYGBgYGBgYGBgYB/fXx8fH1+f39/f397e399d352eH59fH18fX5+gYGCg4B6fX18fn+AgH6Af35/fn+AgH+AgH9/fn9+fn5+fn1+f399fH59fn19fHt8fHx6e3p9fn+Ag4OCf35/fH18fXx8gYN+jH58e3t9fn1+fn17e3t9e3p7e3uAhoWChIOCf4B+f4KCgn9/goJ/gIuPjIqKjIuKiISEhIOEg4ODgoKCgoKCgoKBgYGAgoGBgYKCf3+AgIB/fn18fH5/fn55fX52e3Z4fXx8fHt9fX6BgICAf31/f31+f39/foB/f39+f3+AgIGBgH99gH9/fn9+fn9/f3yCfn59fX17e319fHp8fH6AgoGAgIB8fH18fHx8fH18fXt/fnt7e3x8fH18e3t7e318enp9en6CfoGDhIKBgoGFhoWFhoaHhoKEkY6MioiKh4iFgoOEhISEg4KCgYGCgoKBgoGBgYGBgoGBgoKAgYKBgYCAgH9+e3x+fnx6fnh5dnd8fHx7e318f4GAf35/foB/f35/fn5/gH9/f39/f3+AgYKAfn6BgIB/f39/f39+fYN8fH19fH99fX19e3x+fn9+fn5+fnx8fHx8fHx+fnt8e3x8fHx9fH18fnx9fHx7e3x5e3x7e317fX5+f4CAg4eJiYmLiYuJhYiRjYuIiIaFhYOCgoOEhIODgoKBgYGBgYKBgYGBgYKCgoGCgoCAgX98e3p6eXt9enx+fnl8eXh4dHx8fHt8fHx+gX9/f39/gIB/fn5+fX+AgH9/f3+Af4CDgoB/gIGAgIB/f4CAgH58enx9fX59fX5+jIZ9fX57e4OCfX19fX18fX19fX1+fH18fXx9fX58fn19fX18e3t7fHt8fHt6e3t6enp7fn6ChYiHiIqLi4uJjJCNjImIhoWEgoKCgoODg4OBgYGBgYGBgYGBgYGCgoOCgYKBgIGBf3+Af356eHl5en5+e3l6eH5zfHx8e3x8fH5+fn5/gH+AgIB/fn9+gIF/f4B/gIGAgoSEgYCAgYGAgX+AgYKBf39+f31+gH57foGRjHx9f4qAjYx+fn19fX59fX59fHx8fX18fXx9fX1+fX1+fnx7e3t8fH18e3p7fHl6eXh5e35/hIOEh4mKiImNj4yKiIiFhISCgYKCgoKCgoGCgoKBgYGCgYKCgoGCgoKBgoKAgYGAfoCAf39+e3p5e319eHx6f3KBfXt7fHx8fn59fYGCf4GBgX9/gH+AgX9/gIGCgYGFg4SCgYGCgYKCgICBg4KAf4F/fX6Afnx+f4iCf36DkISEg4F/fn18jYd9fX59fHx/fnx9fXx9fX1+fX5/fX19e3x9fnx8e3x9enp5eXl5e3t+foCBg4eEiI2MiYmGhYSEg4KBgoKCgoGBgYGCgoKBgoKCgoKCgoKCgoGCgn+AgIB+f39/fn5/ent5fX16enp9cX6Cent8fX19fXp4f4KAgYKCgICBgIGBgICBgoKCgoaFhIKBgYGBg4F/gIKEgX9+gYB9foF+fX5/gIB9fn+EgH5+f31+fX2KhX1+f31+foB/fX19fH1+fn99f4B9fn18fX9/fHx7fH17e3t6enp7e3x9fn2Ag4CJjImLh4WFhYSDg4KCgoKCgYGBgoKBgoKCgoKCgoGBgoKBgYGCf4CAgH9/f39+fn59eXp6fXx5d3t0e4d8dHd9fn17e3Z2fYCBg4KBgYKCgoKBgYGDg4OChYaEgoCAgICCgX+AgYOBfn6AgH1+gH59fn6AgH+Bfn+Af39/f398f39/f3+Afn9/gH58fX18fn5+foF/gH2CgHx9gIF9fHx9fXx8e3x8e3t7fHt8fHx9fImJh4iFhoWFhISDgYKBg4KAgIGCg4KCgoOCgoKCgoGCgoGBgoJ/gIGAf39/fn5+fn57enp8fHt2e3R3f352cnt+fnt4dnd8gIGCgoKBgoODg4OCgoSDhIOFhoOCgX9/gIOAgICAg4F+foCAfX+AfX1+foCAf4J/gYGAgICBf31/f3+AgIGAgIB/fnx9fX19fn59g32AfoKAfX6AgX98fn59fX17fH58fXx8fHp8e3x+iYWGhIWHhYSFhIKBgoGDgYCAgoKDgoKCg4ODg4KBgYGBgYGCgH6AgYB/fn5+fn5+fn56e3p9goN9dXF6fHpxen19eXh0dICAgoKCg4KDhYOEg4KDhISEhIWEgYGAgH6Agn9+f36Bf35/f4B9foB9fX1+gH9/gYCCgYCAgIKBfn6Af4GAf4CAgH9+fX19fnx+fn19gYR/gH9+f4GBf31/f319fn1+fn1+fHt8enx7eoCGgoSEhYSEg4WDgoKBgYKBgICCgoOCgoOEg4SDg4KBgYKBgYOAfoCBf35+fn5+fX5+fnt7en6Jh354cnl9f3F6eHt4eXR1fYKDgoODg4OFhIWEg4OEhIODhIKBgH+Af4CBfn19foB+fn5/gH19f3x9fX6Af4CAgIKAgIGAgoGAf4B+gIF+gIGAgH9+fn5+fn5/fn6FhYGBgH+Ag4F/foGAf35/f4B/fn17ent6fHt6goSAgoKCgoOChIKBgYCAgoGAgIKBg4KBg4SDhIKEgoGBgoGCgn9+gIF/fn1+fn5+fX59fXp7fIWEe3tzeXp8cHd1dnd5dnR6hISBhISDhIWFhoSDg4WEgoODgoCBfn9/f4B9fX1+gH1+f39/fn1+fH19foF/gIB/gIB/gIGDgoGAf36AgH+AgYCBgH9/f39/f4CAgIGCgoKBf4GEgX+Ag4J/f4B/gX+Af3x7e3p8e3yBgH+Bf3+BgIKCgYF/f3+BgH6BgoKDgYGDg4KEgoSCgYGBgIGCgH6AgH9/fX5+fX19fn19e3t6gH94fHZ5eXtxdHh3dnh1cnmFhYKEhIKEhYWGhISChIOBg4KAgIF+f4B+f3x9fX6AfX5/f39+fX98fn5+gX+Bf39+f4B/gIODg4B/f4GBgIKBgYGAgICAgICAgIGAgYKDgYF/gISBfYGDhICAgX+BgYKBfXp7e3x8fX99f4B8f399fYGAgH59fYB/foGBgYKBgIKCgoKBg4KCgYB/gYKAfn9/fn99fX1+fX19fX19ent7fHZ9eXh5enJ1eXl2d3dzdYaFg4WFgoSEhYSEhIKDgoGDgX+AgX5/gH6AfX19fn9+f4B+fn99f3x/f3+BgIF/f3x+gH6AgYKDgYCAgoOEgoGAgYB/goCAgYGAgYGCg4KBgX9/g4B+goKEgICCgYKChIJ+e3t8fHx9fX1+fXp+fX14fn9/fHx8fn1+gYCBgYCAgoGBgYGDgoGBf4CAgoB9fn19f319fX59fH19fX16e3p8dnx6d3t4cnZ5e3Z2dnN0hoSEhYSChISFg4OCgYOBgYOBgIGBfX+BfoF9fX1/f39/gH5+f359fYB/gIGBgX9+fH5/fn5/gYJ/gYGCg4eFgX9/fn6Af4CBgICAgIKCgYCAfoCCf36BgoKBgYOCg4OFgn99fX18e3x8eXp7en55e3l4f357e3t+fX1/f4F/gH6BgICAgoOCgYF/gIGBf31+fH1+fX19fX18fn58fXx5e3x4enx3endzeHd6c3Z2c3SGhISFg4KDhISDgoKCg4GCgoGAgYF8gIB+gH1+fX5/gICAf35/f3x+gH+BgIGAf359f39+fn+BgH2AgIGDhIN/f359fn5+f4B/gIB/gYKBgH9+f4F+f4CCgoCBhIKEhIaEgH59fHx8fHp5dnl5enl2eXZ+fHt7e358e399gH99fX9/f3+BgoGBgX5/gYF+fX18fX19fX19fXx+jYF8fXl7e3p5fHd4eHR1dXhyd3d0doaEhIWDg4ODg4OCgYKDgoGDgn+Bf35/fn+AfX19fX+AgIB/f4B/fIB/f4GAgYCAf3yAf31+fn9/fX5+gYGCgn5/fn1+fn5+f3+Af32AgIB+fn5/gX5+gIKBf4GDgoOEh4SAgH58fXx8e3x1eXl4eHh5d3t8e3p7foV9fn1/ent+fn59foGAgIGAfX6BgH59fXx9fX19fX18e32Dgnx8ent7e3p7d3Z4dXJzdnF3eXJ4hYWFhYOEg4KCg4KBgYKBgIKBgIF/fn5+foB+fX58foCAgH+AgX97gH6AgH+BgYB/fYB/fn5/f319fX6AgYKAfn9+fn59fX5/fn9+fH+Af35+fn+Cfn6AgIF/gYOCg4OGhICBfnx9fHx7fHh3e3h1eXd3eXx6e3t9kod9fH13en1+fn19f35+gH98foB/fn19fH19fX19fXt8ent9enp4e3x6ent4dHh1cXJ0cHh4cXmEhYaFg4SDgoODgoGBgoKAgYGAgIB9fn5/gH18fn1/gIGAf3+BgHyAf4B+f4GAf399gH9+f39+fX18gICAgYB+f35+fn18fn9+f358fYB/fn1+gIJ/foCAf36BhIKCg4WFgoJ+fnx7e3x8eXd7eXd4d3d4e3t6e3yFin17end6fH19fHx9fX1/fnx9fn59fXx8fX5+fX18fHt6enx7e3p5enp7enhzd3VxcXJweHdxe4WGhYWDhYKBg4OBgYGBgoCBgICBgH5/fn9/fXx+fYCAgoGAf4GBfX6Af35/gX+Af3+BgH+Af31+fH1/gICAgH9/f35/fXx+f39/f319f39+fn6CgYF/gIB/foGDgoKEg4SCgn5+fHx6fHt7eXt6d3N2d3h5e3p7eXp/fnt7d3p8fXx8fH59fH19fH19fXx8fX19fX99fXx9e3l7fHx8enp6enp6eHN2dXBwcm93dnJ7hYaEhYOEgoGDgoKCgYGCgYKBgYGAf4B/f399fX9+f4CBgYJ/goF9foF+foCBf4B/gIKAgIB+fH58f3+BgICAf4B/f4B+fX5+f4B/f39/gH9/f4J/gH9/gIB/gYGAgISBgoKAf39+f3x9fn56fYV+dHx9enp6enx5eXp6hoV3eXx8fHx8fXx8fHx8fX19fHx9fX19fn19fX16eX18fH16enp6enp5c3V1b29xb3d0c3yFhoOEgoOCgYKBgoKCgYKBgoGBgYCAgICAgH59gH+Af4GCgn+CgX+AgX5/gYB/gICAgn+Bf319f35/f4KAgICAgIB/gIB+fn1/gH9/gIB/f39/gH+AgICAgH+AgYCBgYGCgYCAf39/fn1/fnuBk416fH18e315e3p6eHmBgXh5e3x8fXx8fHx8fHx9fX18fH18fn1+fn59fHp8fHt8fXt5enp6eXlzdXVvb3Fwd3N0fYWGg4OCg4KAgYCCgoKAgYGCgYKBgYCAgIGAfn6Af4GAgYKCgIKCgICCfoCBgX9/gX+BgIF/fH6Af3+AgoCAgICAf3+AgH9+fX6Afn2AgIB/f3+AgICAgYCAf4CAgYCBgYKCgICAf39/fX5+fIGGiXx8fnt7fnl6e3p7jX53d3l7fHt9fHx8fHt9fH19fX18fXx+fn5/f358enx9e319e3l6e3p5eXN0dW5zcXB4cnV6hYaDg4KDgoCAgIGCgX+CgYKBgoGBgYKAgYF/fn9/gYGCgYKBhIOAgYJ/gYGBf4CAgIB/gX99f4F/gICBgICAf4B+gICAf359foB+fn+Af39/gH9/gICBf4CBgH+BgIGCgoKAgICAgIB9foB9gIOCe35+e3x9e3p8fHuHeXh4eXx8fH17fHx9fX18fH19fn19fX5+f3+Af317fH18fHx7enl7e3l5c3J1bnZycHhxdXaFhYOEg4KCgICAgoF/gIKCgoKDgYGDgoCCgYB/gICCgoKBg4GEhICBgX6BgoF/gICAgH+Cf36AgYCCgICAgIB/gH+AgIB/fn2Af39/f4CAgH+AgH+AgYF/gICAgIGAgYGBgoGAgYCAgH9/gH5/fX59fn57fXx9e3x8d3h1eHh5e3x8fXx8fHx8fX5/f39/fn19fn9/gIGAf3x9fHx9e3p7eXp8eHpzcnVud3FxenF2d4WFg4ODg4KBgYKDgH+CgYWDg4SBgYOAgoOBgYCAgIKDgoCCgoSDf4GAfoKDgICBgICAf4CAf4GBgIKAf4CCgH9+gICAgICAf4CAgH+AgICAgIB/f4CBgYCAgICAgYGAgoOCgoCCgYGCgYB/f4B/gId+fnx6fXx7fX54d3Z5eXl8fXx8fXt8fH19fn5/gIGAfn1+gICAgoGAfH59fX58d3t6ent5eXNxdW53cHV6cXZ5hYWCg4KDg4KDhISAgIKBhoOEg4GChICEg4KCgICCgoSBgYKChIJ/gIB/gYOCgYCBgYCAf4GBgYGAg4F+gIOCf31/goGAgIB+gYCBf4CAgYGBgYCAgIKBgYKBgYCBgYGBgoOCgoOBg4OCgYCBgH+AhH19fXx/fXp9gHp5dnp4eXt7fH19e3x9fX19fn+AgYGAgH+AgICDg4B9f35+fn15eXt6enp5c3J1b3dxd3lzd3uFgoKDgoOEgoOEg4CAgoKGg4ODgoKEgYSDgYKAgIKBhIGCgoGCgX6BgICCgYKBgYKCgICAgICBgoGEgH6Bg4F/f4CDgoCBfoCCg4KAgYGBg4KDgoGBg4KChIGAgYOBgYKEg4KEhIODhIODgYGBgYCCf4B/fYB8enx/e3t3fHl5eXt6fX59fHx8fH1+fn+BgYCAgIGBgYSEgH2Af39/f357e3t6e3p0cHhyeXR2eHR3e4SCg4KDg4SChIODgYKChIaEgoODg4SBhISAg4CBg4KCgoKCgIKAfoGAgIKBgoGCgoKBgIGBgYOCgoOAfoGDgX9/gYSEgYN/goKBg4KCgoGEg4OEgYKEgoOCgoGCgoOBg4SDhISEhISFg4SCgYOCgoOBgYGAgH58fIB8fHh8eXp5enx9f3x7fHx9fX18fICAgICAgYGBgYKBfoGAgICAf3t7e3p6enVweHd5dnV8dXZ8gICDgoODg4OEhISAgoOGhISDg4KDhIGEhYKCgYKDg4GCgoKAgYB9gICBgYKDgoKCgoGAgYKCg4KCg4B/gYOBgICChIODgoGCgoGDgoKDg4ODg4SAgoSDg4OBgX+Bg4KDhYKEhISEhISDhISChIOEhIKBgoGBgHt+gX59eXx6enp9fXyBfXp8fH19fHp7fn5+gIB/gYGAgICAgIGBgIB/fX18fH18dnJ2eHh2dH92dX2Hh4OChIWDg4SFhICChIWEhIOCg4SEgISFg4KCgoODgYOCgoCCgH2AgIGCg4KCgoKEgoGCgoOEgoKBgICBgoGAgYOFhIOCg4CCgoOCg4ODg4OEg4CCg4KEg4KCfoOBgoSEgoODhISEhIOEhIOEg4WEg4ODgoKAe4CBf3x8fXp6e32AfX9/fHx6fH59fH19fn5/f39/gICAgH9+foCBgICAfnx9fX5/fn18e3h2f3Z3f4OHg4KDhYODhIaEgYKFhoWEhIODhISChIWFgoKDg4SCg4KDgoKBfoCAgoKDgoODg4SCgYKCg4OCg4GBgYGDgn+ChISDg4KEf4KEg4ODgoSDg4SCgIOEg4SDg4KCg4KChIOCg4SEhISEhIWEg4OEhYSFhIOBgoB9gYKAfXx8e3x8gH19foB+fn1/fnx8fH19fn5/fn+BgYGBgH99fX6BgYB+fn19fX59fX5+f3+AfH2AgYKCg4OGg4SDhoSBgoiHhYSDg4SEhYGFhYWDg4SDhIODgoOCg4F+gYGDg4SCg4OEhIOCg4KEg4ODgoKDgYOCf4KEg4ODgoOAgoWDg4ODhIODhIOBgoSEhYOCgoODg4GEg4GDg4SDhISEhYSEhIWFhYWEg4ODf32BhIB9fXx8fHx/gX5/f39/fX99e3x9fX19fX5+f4CBgIGBgH59fH6Cf39+fn5+fX1/f39/gICAf4CEhIODhIWDhIOFf36CiouFhISDgoOFgYaGhoOEhISEhIODg4OEgn+BgYODhYSFhIWEg4KEhISFhIODgoSDhYKBhISFhYaEgoCDh4SDg4OFhIWFhIGEg4OHgoOCg4GCgYSDgoODhYODhYWEhYWHh4aHhYSEhYSAf4GDf35+fH59fX+BgH9+fHx+f358enx9fX19fX5+fn9/gIGBf319fIB/gH5+fn5+f3+AgYGBgYKAgYWFhIOFhIKEg4aAgoWFi4mEhIOEhYWDh4aGhISEhIWEhISEg4SDgYKDg4OEhIaEhYSDg4SEg3yDhHuBhHd5g4F9hH5+cnWDgoF2foOEgX2BdYF5g39/gH6EhIKDg4KBg4SDg4SFg4SFhoSFhn2EeXx+f4N7hYKBhIOAf35+fn19gYOBfXt/fX6Afn18fHx9fX19fH19f4B/gYJ/fX18f4GBgICAgH+BgYGCgYKDg4KChoSEhIaEgYOEhYOEhYOKiIWFhYOFhYSGhoaDhISFhYWEhYWEhIWCgoOEhYWFhoSFhIOEhYWCaICFanx7cXF8gXOGc3R0fYKEdXNxg4Z0cHVyc3SDdnt9dYF/goOBgnZ5hYCDgIR/hYSChYWCaHpyc3N8f3OCg3+Dg32BfX5+fX6Cg4F8f4B9f4B9fXx8fHx9fHx8fn1+gH+BgX99fX2AgYKBgYGBgIGBgYKBgoKCgoSHhIWEhYSBgoSGhoOGg4aIhoaFg4aGh4eGh4OFhYaFg4KFhoSFhYODg4SEhoaGhIaEg4SFhn1xe4FweXZ+g3+CbnlwdXN8dnp5hXKEg3B2eHF2dHR1cnN0dml/gG5yb3R2bnVsd217c26AiHltfXJzdnN2bW14bHB5bHV9f399foGAgX1/fn2Af4B/fX18fHx9fH1+f32Af4CAfnx/foCBgoCBgICAgYCAgIKDgoOEhYiGhoCChYODhIeGg4aFhYaHh4SDhoeIiYaHhIWGiIeEg4WGhYWEhIOFhIKFhoaFhoWEhoWHdnB0e3BydX+HhYNtdW92b3x1coR5eYd4cXR3bndod3pucHaCcoN+b3p5eW1vbnpvb213fXiGcHF6cHJ0ZoF1fm57eXNveX+Af319gX9/fH99fIF+gIB+foCAgYB+fn9/foF/gH9+fYB9f4CBgIB+fn+BgH9+goOCgoSFh4eEfoeEg4OFh4aEhoWFhoaIhISGh4iIhoeEhoaLioWEhoeHhYOFhYWEgoWFhIWGhoWGhYZxdXByc29zenl+hHSIdHV+iHZugnKEhnluanJ/cW1zd3x/dXR8hH54cXV3bnl1enF2eHV6eYRxam95eHBreXN6b3p3dnZwgYB/fn5/f356fn19f31/f359gIGDg4CCg4GBhIKBgIGBgH1/f4F+f35+f4GAfn6BgoCAgYSHhoODhoSEhYaHhoWFhYWGhoiFhYaFh4eFhoSGhomIhYSJioiFhIaGhYWDhYWEhYaGhoaFg3iLeXKIentwcIWEeIV4eWtzfnl7a3KDh4N6fG17eXl0fYB2bm+AgG90fHV3cXl9fW1+dW+DhYZ6gHJye3x1cG96bHN8bneCgIF+fn99fXt9e3x9fX9/fn1/f4KCf4GDgYGDgYB/gICAfn9+f31/fn1/gH58fYGAfn6Ag4iFhoOFhYWFhoeFhYWFhYeHiIaEhoWHhoaFhIWFhIWFhomJh4aEhoWGhoWGhoSGhoeGhoWGh4eHhoaEhoWGh4iHhYeGhoOHhoWFg4SFhoWGhIaEg4SEhoSEgYODhISFhIWEhYSGg4aHhYaEhIWHhoSEhYaEhX13hYOEhIKBgX1/fnt8e357fHx9f359fH59gIB9f4F/f4GAfn5+gH5+f35+fX99fX5/fHt8f358fH+BiYaFhIaGhoWHhoWFhYWGhoeIhoSGhYaGhYWDhIWGhYSGhoaGhYWGhIWGhoaGhYaGh4eGhYeIiIiIhoSHhYaGiIaFiIeIhYeGhoiFhYaHhYaGhYOChYWGhYWDhYSEhIWEhYWEhYWDhoeGhoWEhoeGhISFhoOFhIKEg4OFg4OCfYB/e3t8fXt8fH1/fnx8fn2Af31+gH5+gH99fXyAfX5+fn5+f3x8fX57fHx/fHt7fn+Ih4SEiIaGhoeGhYWEhoaGhoiHhIWGh4aFhIODhIaFhIeFhYaFhIaEhYaGh4eFh4aJiIaGh4eIiYiFhYiFhoeGh4aHhoeFh4eGh4WFhoeFh4aFgoOFhoaEhIOEhIOEhoSFhYWGhoOGhoWGhYWGhoWEg4WFgoWHhYOCgoWDhIF+gIB8e31+e3x7fX59fHx+fX5+fH9+fX1+fXx9fH98fn58fYGAfXx8fXx8fH56e3t9foiHgoWIh4eGhoaGhISGhoeGiIaEhYSGhoSFh4OEhYSFh4SFhoaFhoSGhoeHhoaHh4mIhoaIh4iKiIWHiIWHh4WHhoeGh4WIiIeHhYaGh4WGhoWBhISFhoWFhISEg4SFhYaGhoWGhYaFhoeFhYaGhYSDhIOChIeDhIGChISDgYCAgHt7fn18fHx9fXx8fH19fH18fn18fX18fHx9fXx+fXt8gX99fH18fnx8fHp6fHx9iIeChoiHhoeGhoaDhYaFhoaGhYOFhIaFhIiJg4GEg4SGhIaGhoaGhIeHiIiHh4eIioiGh4iHiImIhYiHhYeGhoeHh4WHhoiIh4eFh4eHhYaHhIKEg4SGhYeFhISEhISFhoaGhoaFh4WFh4WGhYeFhIOEg4ODh4GDgIKDg4KCgn+Ae31+fXt8fH59fH19fH17fHx8fHx8fXt7e318e358e3x/fX18fX1/fXx6ent7fHyIh4KGhoaGh4aGhYOFhoWFhYWEg4WChoSDiId/enqChYaEhoaFh4aEh4eJiIiHhoiKh4aHh4eIiYeFiIeGiIeGhoeHhYeGiIiHhoWHhoiGhoeDg4SEg4aGh4WFhISEhYaGhoaGhYaHhoaHhoaEhoWDg4OCgoOGgYN+goKDgIOCf398f35+fHx9f318fX18fXp7e3p7fHx8e3t7fnt7fXt7e358fHx8fX5/fXt6fHp8fYmHg4aFhoWGhoWEhIWFhYWFhIOBhYGGhIKEhHyAhn+ChYWGhYWGhYSHh4iIiIaFiYqHhYeGh4eIh4WIhYaHiIaGh4eGh4aIiIeFhoeGh4WFh4OEhoWEhoaHhoWFg4WFhoaGhoaFhoaHhoeHhYOGhYOBg4KAg4WCg36BgYF/g4F/fn5/fX98fH1/fXt9fXx+enl6eXt8fXt7e3t+fHx8fHp7fXx8fHx+fYF8e3t7e3x7iYeEhoSGhIaGhYSFhoWEhIOEgoCDgYWDgYJ/eoSMe4CEhYeGhoaFhIeIh4aHhYWHiYeEh4WGhoiGhYeEhoeJhoaIh4eHhoeIhoSGhoaHhYWHg4SFhIaGhoeFhYSDhYWHhYeGhoWGhoaFhoaEg4WFgoGCgYCDg4OCfYGBgH6DgX5/f4B8f3x9fX59e359fH15eXp5e319enp7e318fXx8ent9fHx9fH5+gHx7e3x+fXyIh4WGhYaEhoSFhYWFhYODgYOBgIKBhYJ/gH9/fXx7gYSFhoaEhYSDh4eGhoaFhIaJhoKGhIaGhoWFh4WHiImGhYiHiYeGhoeFhIaFhYeFhIeDhIWEiIaGh4WFhIKGhYaFh4aHhIaGhoaFhoODg4WAgIGAgIOBg4B8gYB+foKAfYB/gXx/fH1+fX57fn18fHl6enl6fX15enp7fHt8e3t6e319fH18fn5+fHt7fX59fIiGhYaGhoSFhYSFhYSDgoKAgoGAgICDgX5+foB5en2Ag4OEh4WEg4OHhoOEhYSChYiFgoSDg4WFhYWHh4aIiIaFiIeJh4aFhoWDhoSFh4OEhoSEhYSHhoWGhYaEg4aFhoaFhoaEhYaGhYWGgoKDhH9+gICAgYCDgHuBf31+gn5+gH6Afn99fX59f3t/fXt6eXp6eXp8fXl6ent7enx6e3t7fH19fXx/fn18fH1/fnx7h4WFhoaGhoSFhIWDhYKBgICAgYB+f4KCfX1/f3t/f4KDg4WGhYSDgoaDgYOEgoCFh4WCg4GBg4SEhIaGh4iHhYWIhomHhYOEhIKFg4SGgoOFhISGhIeGhYWFhoOEhYSFhoWGhIOFhIWDhYWBgYODfn5/gH9/gIN/fIB9fX+CfYCBfn6Bfn19fX1/e398e3p5enp5enp8eXp6e3t7fHp7e3t7fX59fYB9fXx8fYB/fXyGg4aGhoaFg4SChYKFgYGAf3+AgH5/gIJ8fn9/foCAgYKChIWDgoGChIGAg4KBgISFhYKBf4CCg4OEhYaIhoWEhoeFh4WFgoOCgoOCgoWBg4WEhYaEhoaHhoaFgoSEg4SGhYWDhISDhIOFhICAgoJ+fX1/fn5/hH57f3x8gIF9gYB9fYN9fn59fX57fnt7enl7enl6ent5enp6e3t8ent8e3t+fn1/gXx9fHx9f4B+gIaEhYWEh4SDg4KGgoOAgYB+fn+AfX9/gnx9f39+fn+BgYKEg4KBgYKCf4CBgoCAgoWEgoB/gIGCgYOFhYeFhISGhoSFg4WBgoGBgoGCg4GChISEhYWGh4eGhYSDg4ODhIaFhIGDgoOChIODgH+AgX59fH5+fH6Dfnx+fHyBgH6Cf31/gnx/fn19fHx8e3t6enp6eXt6enp5eXp6e3x5e317fH5/f4GAfX59fX1/gICAhoSEhYSFgoOCgoSCgoCBgH59fn9+fn6AfX2Af35+foGBgoODgoSHgYF+gICBf3+ChIOBf35/gIJ/goWEhYSCg4WFgoSBg4CBgIGBgYKBgIGEg4OGhYWHh4WEhIWCgoKDhYSCgYGBgoCFg4F/foB/fnx8fn18foN9e358fYF/gIN9fYCBf35/fXx8fH17e3p6enl5e3l6enl6ent7e3p7fXx8f3+BgoB+gH+AgH+AgYDKysrKysrKysrKysrLy8vLy8vLy8vLy8zMzMzNzc3Nzc3Nzc3NzczMzMvLy8vLy8vLy8vLy8vLzMvLy8vLy8vLy8vLy8vMzMzMzM3Nzc7Oz8/Pz9DQ0NHR0dLS0tLS0tLT09PT0tLS0tLS0tPT09TU1NTU09PT09PT09PT09PT09PT09PT09PT09PT09PT09PS0tLS0tLS0tLS0tPT09PT1NTV1dXV1dXV1dXV1dXV1dXV1NTU1NTT09PT09PT09PT09TU09PU1NTU1NTU1NTU09PT09PS0tLS0tPT09TU1NTU1NPT09LS0tLS0tLR0dHR0dPHhnNlYFtLWWdVTUZIQD03Nzg5Nzw8PDo8Oz42Oj04PDs6OTg3ODs7Oj87PTs8PD47P0E/QkJBQ0RFREE+PTw7QENDQUBDQ0FBR0hHSUtSwtXS09PT09TU1NTU1NTU1NTU1NXV1dXV1dXV1dXVysrKysrKysrKysrKy8vLy8vLy8vLy8vMzMzMzMzNzc3Nzc3Nzc3MzMzMy8vLy8vLy8vLy8vLzMzMy8vLy8vLy8vLy8vLzMzMzc3Nzc3Oz8/P0NDQ0NHR0tLS0tLS09PT09PT09PT09PS09PT09TU1NTU1NTU09PT09PT09PT09PT09PT1NTU1NTU1NTT09PT09LS0tLS0tLT09PT09PU1NTU1dXV1dXV1dXV1dXV1dXV1dXV1NTU1NPT09PT09PT09PU1NPT09TU1NTU1NTU1NPT09PS0tLS0tPT09PU1NTU1NTU09PT09PS0tLS0tLR0dHSzIxyZ2BcTVllUktHSz87Mzc4Ozg5Pj05PDpBOjs9Nzs8PDo6Nzg6Oz0/Oz88PTw/Pj9BPUFBPkNDREJAQT46Oz9DREFDRERCQklHSEhJTr7V0tPT09TU1NTU1NTU1NTU1NXV1dXV1dXV1dXV1crKy8vKysrKysrKy8vLy8vLy8vLy8vLy8zMzMzMzM3Nzc3Nzc3NzMzMzMzMy8vLy8vMzMzMzMzMzMzLy8zMzMzLy8vLzMzMzc3Nzc3Ozs/P0NDQ0NDR0dLS0tLS09PT09PT09PU09PT09PT09TU1NXV1dTU1NTT09PU1NPT09PT09PT1NTU1NTU1NTU1NPT09PS0tLS0tLS0tPT09PT1NTV1dXV1dXV1dXV1dXV1tbV1dXV1dTU1NTT09PT09PT09PU1NTU09TU1NTU1NTU1NTT09PT0tLS0tLT09PU1NTU1NTU1NTU09PT09PT0tLS0tHR0s+Sd2hfXk9XZ01LRkw9ODc2NTk5OTw+OT88RDo7PDc5PD07OTc5Ojw9QDs+PT47PD48PT5BQD5EQ0NDP0E9Ojs9QkNFQ0NEQT9FSEpJSky61dPT09TU1NTU1NTU1NTV1dXV1dXV1dXV1dXV1dXLy8vLy8vLy8rKysvLy8vLy8vLy8zLy8vMzMzMzMzNzc3Nzc3Nzc3MzMzMzMzMzMzMzMzMzMzMzczMzMzMzMzMzMzMzMzMzc3Nzc3Ozs/Pz9DQ0NDQ0dHS0tPT09PT09PT09TU1NTT1NTU1NTU1NTV1dXU1NTU1NPU1NTU09PT09TU1NTU1dTU1NTV1dTU09PT09LS0tLS0tLS09PT09TU1dXV1dbW1dXV1dXV1tbW1tXV1dXV1NTU1NTT09PT09PT1NTU1NTU1NTU1NTU1NTU09PT09LS0tLT09PU1NTU1dXV1dTU1NTT09PT09PT0tLS0dHRmn5nYWJOVWpKSElLPzw6OTM3Njc3PTs+OT06Ojo4ODo7Ozg4Ojs7PD46PT09Ojw/PD0/QkA/Q0RDRD5APT08QENEQ0JEQkQ+REhJSUtMttfT09TU1NTU1NXV1dXV1dXV1dXV1dXV1dXV1dXVy8vLy8vLy8vLy8vLy8vLy8vLy8zMzMzMzMzMzMzNzc3Nzc3Nzc3Nzc3MzMzMzMzMzMzMzMzNzc3NzczMzMzMzMzMzMzMzc3Nzc3Ozs7Pz8/Q0NDQ0NHS0tLT09PT09PT1NTU1NTU1NTU1NTU1NTV1dXV1NTU1NPT1NTU1NTU1NTU1NTU1dXV1NXV1dXV1NTU09PT09PS0tLT09PT09PU1NXV1dbW1tXV1dbW1tbW1tbW1dXV1dXU1NTU1NTU1NTU1NTU1NTU1NTU1NXU1NTU1NTT09PT09PT09PU1NTU1dXV1dXV1dTU1NTU09PT09PS0tLR0p+DaV9kU1hsSEhIS0A9Nzg0NzY6Oj87RDw8OTw8OTg6OTo6Ojs8Ojo7OT49Pjk9QDs/QUFCP0JCQUM9Pz8+PEBCRUNDQkBBO0ZJR01MSbLY09TU1NTU1NXV1dXV1dXV1dXW1tbW1tbV1dXW1svLy8vLy8vLy8vLy8vLy8vLy8vMzMzMzMzMzM3Nzc3Nzc3Nzc3Ozc3NzczMzMzMzMzMzc3Nzc3Nzc3Nzc3Nzc3Nzc3Mzc3Nzs7Ozs7Pz8/P0NDQ0NHS0tLS09PT09PT09TU1NTU1NTU1NTU1NTV1NXV1dTU1NTU1NTU1NTU1NTV1dTU1dXV1dXV1dXV1dTU1NTU1NPT09PT09PT09PU1NXV1dbW1tbW1tbW1tbW1tbW1tbV1dXV1dTU1NTU1NTU1NTU1NTV1NTU1NXV1dXU1NTU1NTT09PT09PT1NTU1dXV1dXV1dXU1NTU1NTT09PT09LS0tSjiGxfZlJWakdIR0lBPjM2Njo7PDhDPEJBPjxBPDg5Ojw6Ojw8PDk8PTo7PD09PD89QD9AQT9AQUBCPD4+PzxCQ0NDRkBBQT1ISklOTUeu2NPU1NTV1dXV1dXV1dXV1dbW1tbW1tbW1tbW1tbMzMvLy8rKysvLy8vLy8vLy8vMzMzNzc3Nzc3Nzc3Nzc3Nzc3Nzs7Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Ozs3Nzc3Nzc3Nzc3Nzs7Ozs7Oz8/P0NDQ0NHR0dLS0tPT09PT09TU1NTU1NTU1NTU1NTU1NTV1dXV1dTU1NTU1NTU1NTU1dXV1dTV1dXV1dXV1dXU1NTU1NTT0tPU1NTU1NTU1NTV1dbW1tbW1tbW1tbW1tbX19bW1tXV1dXV1dXV1dXV1dTU1NTU1dXV1dXV1dXU1NTU1NTU09PT09PT1NTU1NXV1dXV1dXV1dXV1NTU1NPT09PT0tLWroprY2VSWGhMSkdJQjg0OTQ6Ozo5QDk/Q0VAPDw5OTk9Oj07PDw6PTw7OTw9Ozs/PUA9PT5AQD9CQT5APD05QERDQkFBQj48SEpLTU5IqNnU1NXV1dXV1dXV1dXW1tbW1tbW1tbW1tbW1tbWzMzQ0dDQ0NDQ0dHR0dHR0c3Ky8vLzMzMzMzMzMzMzM3Nzc3Nzc7Ozs3Nzc3Nzc/Pz8/Pz8/Pz8/Pz9DQ0dHR0dHR0dHR0dHS0tHV2djY2NnZ2dra2tvb29vZ2dnZ2dna2tra2tra2tjW19fX19fX19jX19fX2Nzd3d3d3d3d3d3d3d3d2tbX19fX19fX1tbW1tbW09LT09PT09TU1NTU1NbW1dXV1dXV1dXV1dXW1tbX1tbW1tbV1dXV1dXV1dXV1dTU1dXV1dXV1dXU1NTU1NTU1NTU09PU1NTU1NXV1dXW1dXV1dXV1dTU1NTT09PT09PS1bqKa2hoUlhlSUlMT0A5OTo0O0E8Nz05QUM+QD89ODo6Ozk9Oz4/Ojs8PDo7PDo7Pj1APT8/P0FAQUE/QTw8Oz5BRENBREA9PElJSk1ORqPa09TV1dXV1dXV1dXW1tbW1tbW1tbW1tbW1tbW1szNloSGhoaGhoeHh4eHh4Ky4t3d3t7e3t7e3t7e3t3S0NDQ0NDQ0NDQ0NDQ0ci5ubm5ubm5ubm5ubq6t6WkpKSkpKSkpKSkpKSnhmBjY2NjY2NjY2NkZGRlhIuKioqKioqKioqKioemuri4uLi4uLi4uLi4ubN4c3Nzc3Nzc3Nzc3NzcJTAvL29vb29vb29vb28v9LS0tLS0tLT09PS09PT3OPi4uLi4uLi4uLj4+Pi2NfX1tbW1tbW1tbV1dXV1dXV1dXV1dbW1dXV1dXV1dTU1NTU1NTU1NTV1dXV1dXW1dXV1dXV1dXV1NTU1NTT09PT09XDkXFrak5TYkxMVk48Ojo3Nz5DPjg+Oj8/QTw/QDc7Ojs7PTs+Pjo7PD48Oz07PT8+QDw/Pz1AQEBBPj88PjxAQUVCQkZAQD9HSEpLT0ae2tXV1dXV1dXW1tbW1tbW1tbW1tbW19fX19fX19fMzm5QU1NTU1NUVFRUVFNMoPPr6+rq6urq6urq6uvp1dLS0tLS0tLS0tLS0tTEqaqqqqqqqqqqqqqqq6aGhIWFhYWFhYWFhYWFik4MEhISEhISEhISEhIRE0pUU1NTU1NTU1NTU1NPg6ejo6Ojo6Ojo6Ojo6WZMikrKysrKysrKysrKyRksKmqqqqqqqqqqqqqqLDS0tLS0tLS0tLS0tLS0eDs6+vr6+vr6+vr6+vr6dnX19fX1tbW1tbW1tbW1dXV1dXV1dbW1tbV1dXV1dXV1dXV1dTU1NTV1dXV1dXW1tXV1dXV1dXV1dXU1NTU1NTU1NPUy5h2bGlKTl9NUlVNPjw8NztAQz42Ojc+Pjs9Qj85PDk9Ozw6PD07PTs9Ozs9PD0+PT07QT08QUBBQT08Pzw7QEJDQURFPUFAQ0ZLS09GmNzV1dXV1dbW1tbW1tbW1tbW1tfX19fX19fX19fXzM5xVFhXV1dYWFhYWFhXUKHx6enp6enp6enq6unq6dXS0tLS0tLS0tLS0tLUxaqrq6urq6urq6urq6yoiIeHh4eHh4eHh4eHh41SEhgYGBgYGBgYGBgYFxpOWVdXV1dXV1dXV1dXU4WopKSkpKSkpKSkpKSmmzgvMDAwMDAwMDAwMDAqaLKrq6urq6urq6urq6qx0dLS0tLS0tLS0tLS0tHf6+rq6urq6urq6urq6unZ19jX19fX19fX1tbW1tbW1tbW1tbW1tbW1tbV1dXV1dXV1dXV1dXV1dXV1dXW1tbW1tXV1dXV1dXV1dXU1NTU1NTU1NGcenFpSlRdT1JVTkQ+Pzs+QEA4Ojs4PDs7PD86Ozs4Ozk5Ozw7Ojw5Ozs8Ozo9PT0+PUE/Pj8/Pj08PT88PEFBQ0FERTw+QEVGSktNRpPc1dXV1tbW1tbW1tbW1tbW1tfX19fX19fX19fX183OeF5hYGBgYGFhYWFgYFqk7ufn5+fn5+fn5+fn5+bV0dLS0tLS0tLS0tLS08Wtrq6urq6urq6urq6vq46NjY2NjY2NjY2NjY2SXSInJycnJycoKCgoKCcpWmNiYWJhYmJiYmJiYl6MrKmpqampqampqampq6BFPT4+Pj4+Pj4+Pj4+OXG0r6+vr6+vr6+vr6+uttLS0tPS0tLS0tLS0tLS3+np6enp6enp6enp6enn2djY2NjY19fX19fX19fX19fX19bW1tfX19fW1tbW1tbV1dXV1dXV1dXV1dXV1tbW1tbW1tbW1tbV1dXV1dXU1NTU1NTWo3txZElbYE5OVU9AQT89REI/Oz06OTs6PT07PDs6OTg5OTs8Ozw8Ojo7PDo7QD08PTxAQTxBQTs7PEA/PD1CP0RDQ0U8PkJERkpMTEWN3NXV1tbW1tbW1tbW1tbX19fX19fX19fY2NjY2NjNzcfFxcXFxcXFxcXFxcXEy9DPz8/Pz8/Pz9DQ0NDQz87Ozs7Ozs7Ozs/Oz8/NzMzMzMzMzMzMzMzMzMvJycrKysrKysrKysrKysfCw8PExMTExcXFxsbGxsvMy8zLzMzNzMzMzMzLz9HR0tLS0tLS0tLS0tLRysrKysrKysrJycnJycnN09PS0tLS0tLS0tLT0tLV1NTV1dXV1dXW1dbW1tjY2NnZ2dnZ2dnZ2dnZ2djY2NjY2NjY2NjY2NfX19fX19fX1tfX19fX19bW1tbW1tbW1tXV1dXV1dXV1dbV1dbW1tbW1tbW1tXV1dXV1dTU1NTU169/cF5GXmJQUVdOR0ZDQ0lBPz07PDo8OEBCPD04Ojo4OTg7Pzs8PDs7PDw8PD87PD46Pj44PkI8Pj1BPjw+QkBERUNAPD5APkNJSUtEh9zV1tbW1tbW1tbW1tbX19fX19fX19jY2NjY2NjYzs3Pz8/Pz8/Pz8/Pz9PPz87MzczP09LSzs3P0s7Ozs7Ozs7Ozs/RztHU1NPOztPTz8/Pz8/Pz8/Pz8/Pz8/P0NDQ0NDR0dHR0dHS09PU1NTU1dXV1tbW1tfW1tbX1tfX19fX19fX19bW1tbW1tbW1tbW1tbW1tjX19fX19fY19bX19fX1tXW1dbW1tbW1tXW1tbW1dXW1tbX19fX19fX19fX19jY2NjY2NjY2NnZ2dnZ2dnZ2djY2NjY2NjY2NjY2NjX19fX19jY19fX1tbW1tbW1tbW1tbW1tbW1dbW1dbW1tbW1tbW1tbW1tXV1dXV1NTV1di4gm9XSl9jUlFaS0hBQTxCPT07Oj4+PD4/PT0/Nzk6OTk3OD48PD47Ozw7PDs/PT0+OTs7OT0+P0A+QD07OkI/QkNCPz0+QD5CRUdKQoDc1tbW1tbW1tbW19fX19fX19fX2NjY2NjY2NjY2M7Ozs7Ozs7Nzc3Nzsqfys3Nzc3QuYOEi8fTwJrLz87Ozs7OztHBp9Stg4OVz9KkodDOzs7Ozs7Ozs7Ozs7Oz8/Pz8/P0NDQ0NDQ0NDR0dHR0tLT09PU1NTU1NTV1dXV1dXV1dXV1dXV1dXV1dXW1tbV1dXV1dbW1tbV1dXV1dXV1NTU1NXV1dXV1dXV1dXW1tbW1tbW1tbX19fX19fX19fY2NjY2NjY2NjY2NnZ2dnZ2dnZ2dnZ2dnY2NjY2NjY2NjY2NjY2NjY2NfX19fX1tbW1tbW1tbW1tbW1tXV1tbW1tbW1tbW1tbW1tbW1dXV1dXV1dXYwIBuVU9gY1dZW0xMQ0A9PTs9Ojw+Qj5CQ0A8Ojg5ODo6Ojc7Pz4/PDw7PDo5Pzw8PTg5PD9BPj09PUFAPTtBQkBCQz47QD9BQUlHSkF629bW1tbW1tbX19fX19fX19jY2NjY2NnZ2djY2dnOzs7Ozs7Ozs7OzdKpj63Rzs7Ozpu3tqSiwJOerNPOzs7Oz8/RnZC5nLy4mbWzn6Gp0s7Ozs7Ozs7Ozs7Pz8/Pz8/Pz9DQ0NHR0dHR0dHS0tLT09TU1NTU1dXV1dXV1dXV1dXV1dXV1dXV1dXW1tbW1tXV1dbW1tbW1tXV1dXV1dXU1dXV1dXV1dXW1tbW1tbW1tbW1tfX19fX19jX19fY2NjY2NjY2djY2dnZ2dnZ2dnZ2dnZ2dnZ2djY2NjY2NjY2dnY2NjZ2NjY19fX19fX19bW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tXV1dXV1dXV18h/b1pTYWVeXVxPSkQ9QD8+Ozc6Pjk/RD5BOTg3ODk7Ozw4OT89PTw9PD47OkE7OTs5OzxDQDw7PT5AQT49QkQ/QkM9PT8+Pz5ISUg/ddrW1tbX19fX19fX19fX2NjY2NjZ2dnZ2dnZ2dnZzs7Ozs7Ozs7Ozs/Inrym0tDQzsqgl36Cw6abr6fUz8/Pz8/Tuq+srKaOgI3Gn5iVnMjQzs7Ozs7Ozs7Oz8/Pz8/Pz8/Q0NDR0dHR0dLS0tPT09TU1dXV1dXV1dXV1dXV1dbV1dXV1dXV1tbW1tbW1tbV1dXV1dXW1tbV1dXV1dXV1dXV1dXW1tbW1tbW1tbW1tbW1tfX19fX19jY2NjY2NjY2NjY2NjZ2dnZ2dna2dnZ2dnZ2dnZ2dnZ2djY2NjY2NnZ2dnZ2dnY2NjY2NfX19fX19fX19bW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1dbV1dXV1dfNiHNdWGloXl9gT0lGOkFAPj88PTo2P0JAQzo2NDc6Ozo8Ojk+PD49PTs/PTxBPjw8Ojw8PTw6PEA9QEI+PkFCPUNDPT0+Oz9BRUtIQHDZ1tbX19fX19fX19fY2NjY2NjZ2dnZ2dnZ2dnZ2c/Pz8/Pz87Ozs7SrKWnqdXAvNLHnY+ey9PJipmq1M/Pz8/P05+xnqihiazWupihnbCy08/Pz8/Pz8/Pz8/Pz8/Pz8/Q0NDQ0dHS0tLS09PT1NTU1dXV1dXV1dbW1tbW1dbW1tbW1tbV1tbW1tbW1tbW1dXV1dXV1dXW1dXV1dXV1dXV1dXW1tbW1tbW1tfX19fX19fX19fX19jY2NjY2NjY2NjY2NnZ2dnZ2dnZ2tnZ2dnZ2dnZ2dnZ2dnZ2dnY2dnZ2dnZ2dnZ2dnY2NjY19fX19fX19fX19bW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbV1dXW0JB1W1tqaWFeXVNOSTxDQEE+QD46OEZBP0M6NzQ5Ojo5Ozs4Oz0/Pj49QT08P0A9Pjw8PDw8Oj1AQD8/PT5CQD9AQkA8QD0+QUVLRz9r19fX19fX19fX2NjY2NjY2NjZ2dnZ2dnZ2dnZ2tnPz8/Pz8/Pz8/QzJ2Nl6zQmpfKxZ6ynpbN1q2ZqtTPz8/P0cCciZ2kqqybpbKZlq+zqtXQ0M/Pz8/Pz8/Pz8/Pz8/P0NDQ0dHS0tLT09PT1NTU1NXV1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbV1dXV1dXV1dXV1dXV1dXV1dXW1tbW1tbW19fX19fX19fX19fY19fY2NjY2NjY2NjY2NjZ2dnZ2dnZ2drZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2djY2NjY2NfX19fX19fW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1dXV1tKUcl5ea2tqZV1PTEc/RENDQDo9OzxCPD49OTY0Ojk5Ojo5Nzs/QDs8PUA8PEE+PD07PTw/PDo8QkA+PTs9QD5CPkBBPkA9QD9GSUQ/ZtXX19fX19fY2NjY2NjY2NnZ2dna2tra2tra2traz8/Pz8/Pz8/P07GigJuvyaCjv8qcpYynrdiqmarUz8/Pz9SjooGeraSclaiQmoWdk6TV0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NHR0tLT09PT1NTU1NXV1dbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1dXV1dXV1dbW1tXW1tbW1tbV1tbW1tbX19fX19fX19fX19fY2NjY2NjY2NjY2NjY2NjY2dnZ2dnZ2dna2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2djZ2djY2NjY2NfX19fX19bW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbSk3BgXnBoZmVaUUhHQkVDQEA3Ojo8Pjo8OTc2NTk6Njo8Ozc8QEA8Ojo9Oj0/Pj08OUA8PDs6OT9APj08PUBBQz9APz5BOz9ARkpCP2LS2NfX2NjY2NjY2NjY2dnZ2dnZ2tra29vb29vb28/Pz8/Pz8/P0M6fkGyclteqo9PSrqa1mJ/Vqpmq1M/Q0NHEn4F7lq2ns6uff5+phZmk1dHR0NDQ0dHQ0NDQ0NDQ0NDQ0NHR0tLT09PT1NTU1dXV1dbW1tbX19bW1tbW1tbW1tbX1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tfW1tfX19jY2NfX19fX2NjY2NjY2NjY2NnZ2dnZ2dnZ2dnZ2dna2tnZ2dnZ2dnZ2dnZ2dnZ2dnZ2djY2dnZ2dnZ2dnZ2dnZ2NjY2NjY2NjX19fX1tbW1tbW1tbW1tbW1tbX19fX19fW1tbW1tbX0pNuYFxxZGdkWlVKQENGQ0FCODs/PD07PDw4NTU4OTY4Ozo5PDo+Pzw9PTk8Pz49Ojo+OTw6Ojg+Pzw9PTw+QEFDQT48PDpCRERKRkJd0NnX19jY2NjY2NjY2dnZ2dna2trb29vb29vb29vPz8/Pz8/Pz9G9n8O31pfA09HQ0srSzZeb1KqZq9XRz9DVq6+8wM+UyNnBnIC8raaYr9bR0dHR0dHR0dHR0NDR0dHR0dHR0tLT09PU1NTV1dXV1tbW1tfX19fX19bW1tbW1tfX19fW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW19fX19fY2NjY2NjY2NjY2NjY2djZ2dnZ2dnZ2dnZ2dnZ2drZ2tnZ2dnZ2dnZ2dnZ2dnZ2djY2NjY2NjZ2dnZ2dnZ2dnZ2dnY2NjY2NjY2NfX19fX19fX19fW1tfX1tbX19fX19fX19fX19bW19GRbF1cb2doYl1PRkBISUdFQDw8Pj48PT48NzU2Ojk2OTs6Ojs4QD86PDw5PD49Ozs6Pzk/Ozs5PT49PTs7PTxAQ0I/Pz47Q0ZGR0hEWc3a2NjY2NjZ2dnZ2dnZ2dna2trb29vb29vb29vb0NDQz8/Pz8/Pz5V+e6WS1KKa08ySl6ObodirmavV0pem1cmHf4Wgl4+gn5+YqJaYm7vV0dHR0dHR0dHR0dHR0dHR0tLS0tLS09PU1NTV1dXV1tbW19fX19fX19fX19fX19fX19fX1tbW1tbW1tbW1tbX19bW1tbW1tbW1tbW1tbW1tbW1tbW1tfX19fY2NjY2NjY2NjY2NjY2dnZ2dnZ2dnZ2dnZ2dnZ2tra2tra2tnZ2dnZ2dnZ2dnZ2djY2NjY2NjZ2dnZ2tnZ2dnZ2dnZ2djY2NjY2NjY2NjX19fX19fX19fX19fX19fX19fX19fX19fX1tfPjGRWXnBrXGBgTkVITUlJT0M+OkI9PUBCOzU0Nzw6Nzo7Ojo7OT09OTo6OT0+Pz07OT47PDo8Ozk+PD47PD0+QENCPz5BPEFDR0ZGRVXJ29jY2NnZ2dnZ2dnZ2dra2tvb29vb29zc3Nzc3NDQ0NDQ0M/Pz9DR1aeZrcmjqL7KnbGdo7XZqZup2LirocbT09Wcm6ylq6Kfw6CrpJzR09LS0tLS0tLS0tLR0dHS0tLT0tPT09PU1NTV1dbW1tbX19fX19fX19fX19fX19fX19fX19bW1tbW1tfX19fX19fW1tbW1tbW1tbX19fW1tbW1tbW1tbX19fX2NjY2NjY2NnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dra2tra2tra2trZ2dnZ2dnZ2dnZ2djY2NjY2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnY2dnY2NjY2NjX19fX19fX19fX19fX19fY2NfX19fX19fYzYZdV2JvZE9dVEtIRlNRS0xAPj1EPD9DRj01NTc7OTY6Ozo8PTo7Pzo6OTg6PT0/Pjs/Oz49Ojs5Pjs9PD0+QURCQD8+PzxAQUVHRURSxdvY2dnZ2dnZ2dnZ2tra2tvb29vb3Nzc3Nzc3NzQ0NDQ0NDQ0NDQ0NO5gL3Tm5bP1LWLkZ/T1LyBu9TOlKDS0dLXqIfPqY6OrdjCj4271dLS0tLS0tLS0tLS0tLS0tLT09PT09PU1NXV1dbW1tfX19fX19fY2NjY19fX19fX19fX19fX19fW1tbX19fX19fW1tbW1tbW1tbW19fX1tbW1tbW1tbX19fX19jY2NjY2NnZ2dnZ2dnZ2dnZ2tnZ2tra2tra2tra29ra2tra2tnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2NjY2NjX19fX19fX19fY2NjY2NjY2NjY2NfX2ct+WlVqaltMX01KTEpVTEZCPD0/R0ZIS0g9NjU3Ojk3OTo7Ojw9OT45OTo4Oz0+PkE+PTk8PDo9Pj46PTk5Oj9FQUA+PT8/QkBHRURFUMHc2dnZ2dnZ2dna2trb29vb29vb3Nzc3Nzc3dzc0NDQ0NDQ0NDQ0NDQ0cHR0crI0tDUxLjS0tHSwtLQ08fM0tHR0s/F1NS/v9XS1cXE1dLS0tLS09PT09PT09LS0tPT09PU1NTU1NXV1dbW1tfX19fX19fX2NjY2NjX19fX2NfX19fX19fX19fX19fX19fX1tbW1tbW1tbW1tfX1tbW1tbW1tbW19fX19fY2NjY2NjY2dnZ2dnZ2dnZ2dra2tra2tra2tra29va2tra2tra2dnZ2dna2tnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dna2tnZ2dnZ2dnZ2djY2NjX19fX19fY2NjY2NjY2NjY2NjY19rHd1xSZ2laTlpOTFBRV0VKPz89P0FFTExBPjc3NTs4ODk5Ojs8Pjw+ODo6OTs+P0A9Pj46NTo6PD0/Ojs5Ojw+QkJAPz8/P0FCR0RDRE683dnZ2dnZ2dna2tvb29vb29vb3Nzc3Nzc3d3d3dDR0dDQ0NDQ0NDQ0NDS0NDR0dDQ0dPU0dHR0dPR0dHS0tHR0tLT1NLS1NXT09PU1NLS0tPT09PT09PT09PT09PT09PU1NTU1dXV1dbW1tfX19fX2NjY2NjY2NjY2NfX19jY19fX19fX19fX19fX19fX19fX1tbW1tbW1tbX19bW1tbW1tbW1tfX19fX2NjY2NjY2NnZ2dna2tra2tra2tra2tra2tra2tvb2tra2tra2trZ2tra2tra2tra2tra2tnZ2dnZ2dnZ2dnZ2trZ2tra29ra2trZ2dnZ2dnZ2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjbwXNYVWlrU0xSTlBSWVRGSTw+Qz9BQkVKPj43ODY5Nzc4OTk7Oz0/QDw9ODk7Ozs/Pjw8OTU6PT47OTk7PD8/P0JCQT1BPUBBQkZCQkJLtd7Z2dra2tra2tvb29vb29vc3Nzc3Nzd3d3d3d3R0dHR0dHR0dHR0dDQ0NDQ0NDQ0dHR0dHR0dHR0dHR0dHS0tLS0tLS0tPT09PT09PT09PT09PT09TU1NPT1NTU1NTU1NXV1dXV1dXW1tbX19fX2NjY2NjY2NjY2NjY19fY2NjX19fX19fX19fX19fX19fX19fX19fW1tbX19fX1tbW1tbW1tbX19fX19jY2NjY2NnZ2dna2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tnZ2dnZ2dnZ2NjY2NjY2NnZ2dnZ2dnZ2NjY2NjY3LxvVFRsbExLUkpUUlVLRkQ6PkdEREFERjw/ODk6OTY5OTo3PD07PkA9PTc5Ojs5Pjs5OTY2Oj1AQT47PDk6Pj9DQT4/Qj0+QkNFQkFCSrDe2dra2tvb29vb29vb29vc3Nzc3Nzd3d3d3d3d0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0tLS0tLS0tLS0tLS0tLS0tPT09PT09PT09PT09PT1NTU1NTU1NTU1NTU1dXV1dXV1tbW1tbW19fX19jY2NjY2NjY2NjY2NjY2NjY2NjY19fX19fX19fX19fX19fX19fX19fX19fX19fW1tbW1tfW19fX19jY2NjY2NjZ2dnZ2dra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2trZ2dnZ2dnZ2djZ2dnZ2dnZ2dnZ2dnZ2dnY2Ny2a1NbcGtLVVdSXFFXSEQ+PEJKRT1ISj89PDc4ODo1OTg5Njs+PD1APDw1OTk8Oj87OTg0ODw9PUFBPD47Ojw+QD89PkE9PUNGR0I/Qkmq39ra29vb29vb29vb3Nzc3Nzc3N3d3d3d3d3d3dHR0dHR0dHR0dHR0dHR0dHR0dHS0M/U0M7P0tLT0tLS0tLS0tLS0tPT09TU1NTU1NPU1NTU1NTU1NTU1NTU1NTV1dXV1dXV1dbW1tbW19fX19fY2NjY2NjY2NjY2NjY2NjY2NjY2NjX19fX19fX19jY2NfX19fX19fX19fX19fX19fX19fX19fX19jY2NjY2NjY2dnZ2dra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tvb29va2tra2tra2tra2tra2tra2tnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dndsGRTYXJfT1pUV19RUkdCPUVJTEFBTEQ/Pzs6ODg5Mzg2ODY5Pj0+Pz06Njo7Pjs9PTo5Njg6PTtAQDxAPz0/P0I+PD48PEJFR0lCPkNJpODa29vb29vb3Nzc3Nzc3Nzc3N3d3d3d3d3d3t7S0tLS0tLS0tLS0dHR0dHR0dPT0bm7zLqbnLrQyNPT0tLS09PT09PT09PU1NTU1NTU1NTU1NTU1dXV1dXV1dXV1dXV1dbW1tbW1tbX19fX19fY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjX19fX19fX19fX19fX19fX19fX19jY2NjY2NjY2NjZ2dra2tra2tra2tra2tra2tra2tra2tra29va2tra29va2tvb2tra2tra2tra2tra2trb29vb29va2tra2tra2tra2tra2tra2tra2tnZ2dnZ2trZ2dnZ2dnZ2dnZ2dnZ3qpfVWBuW1VZUVpeT0xHQ0ZNSUZEREo7QUE7PDg4NjQ4Njk4Nzw/QT89Ojc8Pz48Pz87OjY4OD09QEE9QD5BQD1AOjs6Pj1BRUdJQkBDR57h29vb29vc3Nzc3Nzc3Nzc3d3d3d3d3d7e3t7e0tLS0tLS0tLS0tLS0tLS0tO+wMqaoKKViJGeqpOpz9TT09PT09PT09PU1NTU1NTU1NTU1NTV1dXV1dXV1dXV1dXV1tbW1tbW1tbX19fX19fY2NjY2NnZ2dnZ2dnZ2dnZ2djY2djY2NjY2NjY2NjY2NjY2NjY2NjX19fX19fX19fX19fX19fX19fY2NjY2NjY2NjZ2dna2tra2tra2tra2tra2tra2tra29vb29vb29vb29vb29vb29vb29ra2tra2tra2tra2tvb29vb29va29vb29vb29va2tra2tra2tra2tra2tra2trZ2dnZ2dnZ2dnZ2d6iXFVeblheXU5aUFROQ0NMSUlJRkpEPEJBPDs4NzY3OTc3OTk9P0E/PDo5QD88PkI/Ozg3NzY9Pz9APUBBPz88PTs7OD48P0VJSEE/Q0aX4dvb29zc3Nzc3Nzc3N3d3d3d3d3d3t7e3t7e3tPT09PT0tLS0tLS0tLS0tTIlZyum5m1iX2TjIKBhMTV09PT09PT09PU1NTU1dXV1dXV1dXV1dXV1dXV1dXV1tbW1tbW1tbW1tfX19fX19fX2NjY2NjY2dnZ2dnZ2dnZ2dnZ2dnZ2NjY2NjY2NjY2NjY2NjY2NjY2NfX19fX19fX19fX19fX19fX2NjY2NjY2NjY2dnZ2dnZ2dna2tra2tra2tra2tra29vb29vb29vb29vb29vb29vb29vb2tra2tra2tra2tvb29vb29vb2tvb29vb29vb2tra2tra2tra2tra2tra2tra2tra2tra2tnZ2dndmlpYYW5ZYVdPV01QRUJETElNS0ZJRT5CRDk4ODY3OTc1Njk4PT1BPjo4OT4+PD9APzw1Njc2PD4/PjtAQEA/Pj4/Pjs/PkFCRkdCQENIkeLb29zc3Nzc3d3d3d3d3d3d3d7e3t7e3t7f39/U09PT09PT09PT09LS0tLTz6h+kayPko6MhoCIiYSQo8rU09PT09PU1NTU1dXV1dXV1dXV1dXV1dbW1tbW1tbW1tbW1tbW19fX19fX19fX2NjY2NjY2dnZ2dnZ2dnZ2dnZ2dnZ2dnY2NjY2NjY19jY2NjY2NjY2NjY2NjX19fX19fX19fX19fY2NjY2NjY2NjY2NnZ2dnZ2dna2tra2tra2tra2tra29vb29vb29vb29vb29vb29vb29vb29ra2tra2tra2tvb29vb29vb29vb29vb29vb29va2tra2tra2tra2tra29vb29ra2tra2tra2tna3JJaWWNuWlpSVV5QTDxAR05IUklIRT47SEY4OTc1Nzg3NTg5ODs+Pj07ODlBPj1AP0E+NzU5Njs+QUI/P0BAQkI/Pj8+QUBEQUZIQj9FSozi3Nzc3Nzc3d3d3d3d3d3e3t7e3t7f39/f39/f1NTU09PT09PT09PT09PWtaWaiIuQhYCFi4iBg4qLf4bC1tTU1NTU1NTV1dXV1dXV1dXV1dXW1tbW1tbW1tbX19fX19fX19fX2NjY2NjY2NjY2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2djY2NjY2NjY2NjY2NjY2NjY2NjY2NjX19fX19fX19fY2NjY2NjY2NjY2dnZ2dna2dra2tra2tra2tra2tra2tvb29vb29vb29vb29vb29vb29vb29vb29ra2tra2trb29vb29vb29vb29vb29vb29vb29vb2tra2tra2tra29vb29vb29vb29vb2tra29uIWltnalxYTFpfVkg6TEhMSkpDRUZDQExINzo3Njc4ODU4Nzg5PDw7Ozk4QD89Pj8/PDY3PDQ3P0JCQUBAPz8/QT09P0A+QEBGRT09REuI4tzc3Nzd3d3d3d7e3t7e3t7e3t/f39/f39/f39TU1NTU1NPT09PT09PUxZKCg4WGfYGCfXx5foGCg36k29bU1NTU1NTV1dXV1dXV1tbV1tbW1tbW1tfX19fX19fX19fX19fX19jY2NjY2NjZ2dnZ2dnZ2dna2tnZ2dnZ2dnZ2dnY2NnY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjX19fX19fY2NjY2NjY2NjY2dnZ2dna2tra2tra2tra2tra29vb29vb29vb29vc3Nzc3Nvb29vb29vb29vb29vb2tra2tra29vb29zb29zb29vb29vb29vb29vb29vb29va2tvb29vb29vb29vb29vb29vb2tvZgFpebWhaU0ldW1hKRE1ISlNMR0ZBQD9KQjg7NjY5OTc1ODY4Ozo7Ojw5OD09O0A9Ozo2NTw3Oz1CQEFBPD49QEE9PEA/Pz5CREU+PERLg+Lc3d3d3d3d3t7e3t7e3t7f39/f39/f39/f39/V1dTU1NTU1NPT09PT2LKEkKh9g3l2hIh/e3d5gn5+i67A1dTU1NXV1dXV1tbW1tbW1tbW1tbW1tfX19fX19fY2NjY2NjY2NjY2NjY2NjZ2dnZ2dnZ2dna2trZ2dnZ2dnZ2dnY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2dnZ2dnZ2tra2tra2trb2tra2tvb29vb29vb29vc3Nzc3Nzc29vb29vb29vb29vb29va2trb29vb29zc3Nzc3Nvb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vc1nlcWmxmWFJPYFFSQUhHSkZYTEZAQENDSz87Ozc4ODc2NTc2ODo5PDw6PTs/PTs9Pjw7ODg8OT0/QkFCQzw8P0FCPj1BQkNCREVDQDtDTH3h3d3d3d3e3t7e3t7e39/f39/f39/f39/g4ODg1dXV1NXU1NTU1NPU0ruen3WKeXuIgICChYGDcnOAhYOMrNfV1NXV1dXW1tbW1tbW1tbW1tbW19fX19fX2NjY2NjY2NjY2NjZ2dnZ2dnZ2dnY2NnZ2dna2tra2trZ2dnZ2dnZ2djY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2dnZ2dna2tra2tra29vb29ra2trb3Nzc3Nzc29zc3Nzc3Nzc3Nzb29vb29vb29vb29rb29vb29vb29zc3Nzc3Nzc3Nvb29zc3Nzc3Nvb29vb29vb29vb29vc3Nzc3Nzc3Nvb29vb3dByXV9wZVdLUGNPS0JHQ0pIS0ZBPEE9SFBBOjo3Nzg3Njc4Nzw6OD09PD47QD88Pz07Ojs5Ojk8QEJAQkNAPUFAPz1AQkNDQUBAP0A7RU144N3d3d7e3t/f39/f39/f39/f3+Dg4ODg4ODg4NXV1dXV1dXV1NXU18h4i4V8goh6g4SBfoKCc2l0hYuGkJ3U1tXU1dbW1tbW1tbW1tbW19fX19fX19jY2NjY2NjY2NnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dra2tra2tra2dnZ2dnZ2dnY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2dnZ2dna2tra2tra2tra2tvb2tvb3Nzc3Nzc3Nvc3Nzc3Nzc3Nzc29zb29vb29vb29vb29vb29vb29vc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc29vb297KalxjcWVST1heSz9HTElPS0VAPkFCP0lPPjk6NzY7NzY6Ozc7Ojg6PDw+Oz09Oz48Ojs4OTo4OUFCQkFAQDtAQj06PkFCQz8+PT4/PUZOdN/e3t7e3t7f39/f39/f4ODg4ODg4ODg4ODg4OHV1dXV1dXV1dXV1s6dhpl+f5OTin+CgXx9gnNxm4mAgoOJwNnat7TQ19bW1tbX19fX19fX19fX2NjY2NjY2NjY2NjZ2dnZ2dnZ2dnZ2tnZ2dnZ2dra2tra2tra2trZ2dnZ2dnZ2dnZ2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NnZ2dna2tra2tra2tra2tra29vb3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nvb29vb29vb29vb29vb29vc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3NvfwGNaW21gVlBTU0pETEhNSEk8PkFEQ0ZORDw8OTc5OjY4Ozk3PDk4OTw9OzlAPjpBPzw3NTc7ODpAQUVBPz45PUI/Oz1CQkI6Pj07PT5GTnHe3t7e3t/f39/f39/g4ODg4ODg4ODg4OHh4eHh1tbW1tbW1tbV1tjLioCHhYOXjHh7e3lvfYF1a3ebdHZ7eInHxpiMrdjZ19fX19fX19fY2NjY2NjY2NjY2NjY2NjY2dnZ2drZ2dna2tra2tra2tra2tra2tra2tra2dnZ2dnZ2dnZ2dnZ2dnZ2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NnZ2dnZ2dnZ2dna2tra2tra2tra2tra29vb3Nzc3dzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nvb29vb29zb29vb3Nzc3Nzc3Nzd3dzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3d3d3d3d3Nzc3Nzc4LdjV1lrYlJNVVFMSktGS0ZDQD5CQT9FTT4+PTg5OTo3OTo3NT03Nzo+PDs7Qjw5Pz05NjY4PTk6QEJGQD49PEBCREA9QD9DO0A9PD4/Rk9t3N/e3t/f3+Dg4ODg4ODg4ODg4OHh4eHh4eHh4dbW1tbW1tbW1tfVrYZ6d32rn3l4entzdH+Dfm9xe3l6c3t2k4qFgImkzdnY19fX2NjY2NjY2NjY2NjY2NjY2NjY2NnZ2dna2tna2tra2tra2tra2tra2tra2tra2tnZ2dnZ2dnZ2dnZ2dnZ2dnZ2djY2NjY2NjY2NjY2NjY2NjY2NjY2dnZ2dnZ2dnZ2dra2tra2tra2tra29vb29vc3Nzc3N3d3d3c3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc29vb29vc3Nzb3Nzc3Nzc3N3d3d3d3d3d3dzc3Nzc3Nzd3d3c3Nzc3Nzc3N3d3d3d3d3d3d3d3dzc3OGtYVtebGJSTVZMTUdLS0RGQkI7QT08RUxDQT44Ojk6Nzc5NjY6NTs+QDs9Oz89PD89Ojk5Ojw5PEVDRkA/PkBDQkQ9OT0/QT1CPz1APkdPadvf3t/f3+Dg4ODg4ODh4eHh4eHh4eHh4eHi4uLW1tbW1tbW1tfQmH+Qh4N9eoN2e3Vzenl6kKqmd3JyfoeHh4CAfoKEhJHJzNnX19jY2NjY2NjY2NjY2NjY2NjY2NnZ2dnZ2tra2tra2tra2tra29va2tra2tra2tra2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2djZ2dnZ2dnZ2djY2NnZ2dnZ2dnZ2dnZ2tra2tra2tra2tra29vb29vb3Nzc3N3d3d3d3d3d3d3d3d3d3d3c3Nzc3Nzc3Nzb29vb3Nzc3Nzc3Nzc3Nzd3d3d3d3d3d3d3dzc3N3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3NzhpV9UYm1iUE9TSUhHRkpJSUJBPkJCPEVFREA+ODo4Ozc3Ojc4ODY+Pz07PDk9PDo+PTs6Njc7NjpEQUY+Pz8/PkNBPzs9PT47REM/PjxIT2fZ4N/f3+Dg4ODg4eHh4eHh4eHh4eLi4uLi4uLi1tbW1tbW19jYyH52doN+fnR2eIaCenl1d5yhu6GEgoCAfoeKinx/gYaMnKjO2NjY2NjY2NjY2djY2NjZ2djY2NjY2dnZ2dra2tra2trb29rb29rb2tra2tra2tra2tnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dna2tra2tra2tra2tra2trb29vb29zc3Nzc3N3d3d3d3d3d3d3d3d3d3d3d3dzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3e3t7e3t7e3d3d3d3c35pbT2drXFBRUElDT0pLR0xHSkJAP0FHREBBPDg8ODg1ODk3Njc3QEA/Ozw5Pj04PTw8Ojc4PTk/RENGPkE/QkBDPzw6Pj0/PkVEPz07S1Fj1+Hf4ODg4ODh4eHh4eHh4uLi4uLi4uLi4uLj49bW1tbW19XB3LRueHJze3B6eXaFiIR7eH2AgZiljH98fnuRhZaLhoGDgY6Rvd3Z2NjY2NjZ2dnZ2dnZ2dnZ2dnY2dnZ2dna2tra2trb29va2tva2tra2trb29ra2tra2tnZ2dnZ2dnZ2dnZ2dna2trZ2dnZ2dra2tra2tnZ2dnZ2dna2tra2tra2tra2tra2tra2trb29vc3Nzc3Nzc3N3d3d3d3d3d3d3d3d3d3d3d3d3d3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3e3t7e3t7e3t7e3t7e3t7e3t3d3d6NWFdobllQUUtISlNJTUhNSUtBQz9DRkJBRDo6PDg2NDg4NzY2Nj8+Pjs8OTs7Oj09PDw4Ozw7RERERT4/PkI+Qj84PT8/Q0NCQEE+O0xUY9Xh3+Dg4OHh4eHh4eLi4uLi4uLi4uLi4uPj4+PW1tbW1teslLZ6eHJvd5V7dHuLgHh1bn6Fg3t/hYhyfH2bnI6JioJ+g32Hk5rH1NjY2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dna2tra2trb29vb29vb29vb2tra2tra2tra2tra2tnZ2dnZ2dnZ2dna2tra2tra2tra2tra2tra2tra2tra2tra2trb2tra2tra2tra2trb29vc3Nzc3Nzc3Nzd3d3d3d3d3d3d3d3d3d3d3d3d3d3c3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3N3d3d3d3d3d3d3d3d3d3d3d3d3e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3d7Zf1lgaGxcUUtHR09LTk5PTURGQkg/Q0hEREA6Ozs4NzU3Nzc4NThAPkA7PDk8Ozw+Ojk7OTk7OUZERUI8QD4/PEBDOz5AP0A/Qj8+OjtKVWPV4eDg4eHh4eHi4uLi4uLi4uLi4uPj4+Pj4+Pj1tbX19vKhYR3cXJubniVhHt4hH95dnB4c3eLkY6CdnN9ioaId3d1d4ODfIiIk8Pb2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dra2trb2tvb29vb29vb29vb29rb2tra2tra2tra2tra2tnZ2dnZ2dna2tra2tra2tra2trb2tra2tra2tra2tra2trb29vb29ra2trb29vb29vb3Nzc3Nzc3Nzd3d3d3d3d3d3d3d3d3d3d3d7e3d3d3d3c3Nzc3Nzc3Nzc3Nzc3Nzc3d3d3d3d3d3d3d3d3d3d3d3d3d7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7f0nVZaGlqVk5KSE1OR01EUElGSD9FPUZMREM+Ozs8OTc3OTY2OTU4Pj4/PTs8QDs9PDo3Ozc5OThHREVCPUE9Qj8+QDw/QUE/QEJAPjs8S1Ri1OLg4eHh4eLi4uLi4uLi4+Pj4+Pj4+Pj4+Pj49fX19fEknuJf29sbnV2foSBg4qGfnVybWVtiIaKjoR7c4OHint4e4OPj4GEioqxztrZ2dnZ2dnZ2dna2tra2tra2tra2trb29vb29zc3Nzb29vb29vb29va2tra2tra2tra2tra2tra2tra2tra2tra2tra2tvb29va2tra2tra2tvb2tvb29vb29vb29vb29vb29vb29zc3Nzc3Nzc3d3d3d3d3d3d3d3d3d3d3t7e3t3d3d3d3d3d3d3d3dzc3Nzc3Nzc3d3d3d3d3d3e3t7e3t7e3t7e3t7e3t7e3t7e3t7f39/f39/f39/f39/f3t7e4clsW2pqalNOR0dOT0VIRk1JSUA7RD5ISUA9PDo6Ojg2ODo3Nzk0OD08PT07ODw8PDw4Njc4OTo6RUJFQT9APEI/Q0M+PkNEQUBAP0A8PUtRYdPj4OHh4uLi4uLi4uPj4+Pj4+Pj4+Pj4+Pj5OTX19fZqXaFfnx3bHB3eXh8jH2KhYB3anN0d3p9bot7fnl6foR/gIGDfnh8foeGlrbT2tnZ2dra2tra2tra2tra2tra2tvb29vb3Nzc3Nzc3Nvb29vb29vb29ra2tra2tra2tra2tra2tra2tra2tra29ra29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb3Nzc3Nzc3Nzc3d3d3d3d3d3d3d3d3d3d3d7e3t7d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3t7e3t7e3t7e3t7e3t7e3t7e3t7e39/f39/f39/f39/f39/f39/e3uO9amFpa2lRTkZNTEtKWE1OR0FAQE9BQz9AOzw4OTk5Njg2NjY4NDs+PD07OTY6Ojk6OTU4OTg5OkJERj8+Pj5AQEBCPzxBQD88Pj9BOT5KT17S4+Hh4eLi4uLi4+Pj4+Pj4+Pj4+Pj4+Tk5OTk19fX2sqKhIB5c29tcXN1d4CUeHaAfHWHhXd1cnWgmXp7d3Z5doR0bWxue3iAmouTu9za2tra2tra2trb29vb29vb29vb29zc3Nzc3Nzc3Nzc3Nzc29vb29vb2tra2tra2tra2tra2tra2tra2tra29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vc3Nzc3Nzc3Nzc3d3d3d3d3d3d3d3d3d3d3d3e3t7e3t3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3t7e3t7e3t7e3t7e3t7e3t7e3t/f39/f39/f39/f39/f39/f39/f397js2lpbmloUFBPTExPUk9LU0Y/RURERD48PDg7ODc5OTU2ODY2NzM6Pjs+PTc6Pjk5OTk2Ojo4NzxDRUc/Pzs/PkA9PkE9Oz0+OUFAQDhBTlFc0OTh4eLi4uLj4+Pj4+Pj4+Pj4+Pk5OTk5OTk5NjY2NjauY6AenZ1bmpveHCBfWt0cnZ3hIV5h4d5lY55eXp1d3pza298gHx2fYh8gLLe2tra2tvb29vb29vb29vc3Nzc3Nzc3Nzc3dzc3Nzc3Nzc3Nzb29vb29rb29vb29ra2tra2tra2tra29va29vb29vb29vb29zc3Nzb29vb29vb29vb29vc3Nvb3Nzc3Nzc3Nzc3Nzc3Nzc3d3d3d3d3t7e3t7e3d7e3t3d3t7e3t7e3t7d3d3d3d3d3d3d3d3d3d3d3d3d3t7e3t7e3t7e3t7f39/f39/f39/f39/f39/f39/f4ODg4ODg4N/f39/f4qpqa2hrZFNQT0ZQVFJOSFJLPkREQ0I7Ozk6Ojg2Nzg1NjY4Nzg0Oz88Pz05PDw3Ozo6Nzo6Nzo9Q0JDPUE+Pzw5PT5BQDs8PDtFQD47Q05TXNDk4eLi4uLj4+Pj4+Pj4+Pj5OTk5OTk5OTk5OTY2NjZ1p5vdntveHh2cG50d3BwdHBzb36Jc3qGhY2EenNtcoB6hn1vg5OBdnx9g4a13drb29vc29vc3Nzc3Nzc3Nzc3Nzc3Nzc3d3d3Nzc3Nzc3Nzc3Nzb29vb29vb29vb29ra2tra2tvb29vb29vb3Nzc3Nzc3Nzc3Nzc3Nzc3Nvb29vb29vc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzd3d3d3d3d3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3d3d3d3d3d7e3t7e3t7e3t7e3t7f39/f39/f39/f39/f39/f39/g4ODg4ODg4ODg4ODg4N/f3+KgbWhma2ZVVlJHUFFOS0xMRUJIRUc9OD08Ojo3Nzg3Nzc2NDY3NDg+PD09Ojg6OD46Ozc4Nzc6Oj5DRDtDQj49OD1AQUM/Pjw+RTw+PUJNUF/S4+Hi4uLj4+Pj4+Pj4+Pk5OTk5OTk5OTk5OTk2NjY3MB2doCCfnp4eHBsdXlya399bHNvdGdoaYB/aWh4c2d+iYl4cIKGe3d9foWKvd3b3Nzc3Nzc3Nzc3Nzc3Nzc3d3c3Nzc3N3d3dzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nvb29vb29vb29vb3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzd3d3d3d3d3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7f39/f39/f39/f39/f39/f4ODg4ODg4ODg4ODg4ODg4ODg4ODflGttZm5mU1NJUFlUTEhGTkZGRUJGPTs+PDs5Nzc4NTc5NjQ1NzU4PDs9Pjo6OztAOTs7ODc6OTlAQkE8QUE/Pzk/QEJFQ0FAQEM7Oz1ES01g1uTi4uLi4+Pj4+Pj4+Pk5OTk5OTk5OTk5OTk5NnZ2tmYc3uqhJaCcnR1dn14aGx8d2h4d25rcHR5gIN2dHyBhIJ9c3CAin94gn95g8je3Nzc3Nzc3Nzc3Nzd3d3d3d3d3d3d3d3d3N3d3dzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nvb29zc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3N3d3d3d3d3d3d3d3d3d3d3d3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e39/f39/f39/f4N/f39/f3+Dg4ODg4ODg4ODg4ODg4ODg4ODg4ODh24tubWdzY1lRTVVbV0hDSUZOS0dCRD8/Qjo7OjY2NzU2NzY0ODc2Ozw7Pj86PDk8Qjg3OTo6Ojk6QUFCQUJDQEE+PT9CQ0NEQUJGOTg9REpOYtjk4uLi4+Pj4+Pj5OTk5OTk5OTk5OTk5OTk5OXZ2drcqHGCtXiRfnNsem6EgXaCfWtoan+DeHZ8dX2FhXRmcHl9d316gIqFe318foC03tzc3Nzc3N3d3d3d3d3d3d3d3d3d3d3d3dzd3d3d3dzc3N3c3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzd3Nzd3d3d3d3d3Nzc3Nzc3Nzc3Nzc3N3d3d3d3d3d3d3d3d3d3d3d3d3d3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e397e3t7e39/f39/f39/f39/g4ODg4ODg4ODg4ODg4ODg4ODg4ODg4eDg4ODg4ODg4tiFb3FrdWFWT1VVXE9ETUY+SkdKRUQ8P0I6PDk4Njg1NTY3NDc2NDk7Ozw7OD47PEE4ODo9OD04Oj09QEBAP0FCP0A+QENCQ0FBRTc2O0RMTmPa5OLi4+Pj4+Pj5OTk5OTk5OTk5OTk5OTk5OXl29ra3Z5sbnNxhY1ybXBuf391hH5rcnZ2enN4gXhzb3VwbWt2fHmFiIB/f392coODsd/c3Nzc3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3Nzd3d3c3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3N3d3d3d3d3d3d3d3d3d3d3d3d3c3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e39/f39/f39/f39/f39/f39/f39/f39/f39/f4ODg4ODg4ODg4ODg4ODg4ODg4OHh4eDg4eHh4eHh4eHh4OLXhW1xb3ZeUldTWlpRSkhDQFFAQkQ8OT9BOjw5NzU3NDU2NjQ3NTY9PDo9PTk+OjxAODo6PDY7OTs+PUJCQjtBQkBDQEBEREM8PUA3OjxFS01l3OPi4uPj4+Pj5OTk5OTk5OTk5OTk5OXl5eXl5dPOxsB+cWxveHt2b3VuanNzbZKGeG50dG5vdIZ/b2twboJ0bXZyfY2DdnF/d3mKgabf3Nzc3d3d3d3d3d3e3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3dzc3d3d3dzc3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3t7e3t7e3t7e3t7e3t/f3t7e3t7f39/f39/f39/f39/f39/f39/f39/f39/f39/f4ODg4ODg4ODg4ODg4ODg4ODg4ODg4eHh4eHh4eHh4eHh4eHh4eHi1oZucG1xYFJZUFdfWUpMTElSP0Q9OTtCRjs6OTc0NTY1NzU0NjY2Pj07Pz45PTk7Pjg9Ozo0ODtAQENCQ0FCRkE/Q0BBQkREOz0+OTs8QkxNZODl4+Pk5OTj4+Tk5OTk5OTk5OTk5eXl5eXl5eW5t7Woc3JscHd6dHd4bXFydXd/hHRyc2xsa3F8bnBudGuBf3GAd32Eg355gHNygYqg2d3c3d3d3d3d3d7e3t3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3e3t7e3t7e3t7d3d3d3t7e3t7e3t7e3t7f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f4ODg4ODg4ODg4ODg4ODg4ODg4OHh4eHh4eHh4eHh4eHh4eHh4eHh49WHcWxqbF5YWlVXYFZWUE9QTD1BOjs8RkE4Ojg3MzY1Njk2NTg1Nz89Oz8+OT04Ozw5PTs7NTo9Q0JCPENDREREQUE/PkJDQzw9Pjg5PENLS2PN0dnh1sjY4+Tk5OTk5OTk5OTk5eXl5eXl5eXltbW2q3J5cm59f3Z1d2hqaGlwb3Zta2tnZWZxdG15gG5teXd2iHhxa2podXV5dHV/wd/c3d3d3d3d3d3e3t7e3d3d3d7d3d3d3d3d3d3d3t7e3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3e3t7e3t7e3t3d3d3d3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f4ODg39/g4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4OHh4eHh4eHh4eHh4eHh4eHi4uHh4ePVhnFwY2lhV1NZV19MUk9STUtAPjg5O0E+ODc5NjQ3Njc6NjY2NDk+Pzo8Pzo/OTo6Nzo9PDk5PEFBPTtBQ0VDRkA+Pj5BRUQ+QEE3OD5GSEpesrW4wbm1u8jg5eXl5OTl5OXl5+fn5+fm5ebm5ra2tbWOfX5weoR1cnZnYmNlbGtyb2ZpbHZtd4Z9hXlsbHd4a3ZwfH14c3V5fHd2h7ng3d3d3d3d3d7e3t7e3t7d3t7e3t7d3d3d3d3d3t7e3t7d3t7e3t7e3t3d3d3d3d3d3d7e3t7e3t7e3t7d3d3d3d3d3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4OHh4eHh4eHh4eLi4uLi4uLi4uLi4eHj1Yd1bl5uY1pUU1hXS1NLSk1SR0E4Ozs+PDk4NzU2NTY2OTY4NjY5Pzw6PT07Pzo7Ozk8PDs5Oj4+Pjs8PUFEQkNBQEBBP0JDPDw9Nzs+REVKXrG1tLW2t7e2y9rJ3uXl3eDi3tXU1tPU4OPg39+2treuh3t/bnmNenJ1bWNobGxtaXR4enF5enqIh4N6aWh9cWRvcXyGgX55e318e4an2t7d3d3d3d7e3t7e3t7e3t7e3t7e3d3d3d3d3t7e3t7e3t7e3t7e3t7e3t3e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t/f39/e3t7e3t7f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4OHh4eHh4eHh4eLi4uLi4uLi4uLi4uHh49aGdmxhb19dV1lcWlJQSEpXTEVHPUA9Ozs9OTY0NjU1NTg2NzY3OD87OT09PDw5OTw6Pjw6OTg+Qjs7Pj5AREBDRUFAQD0/QDw9PTU5PEJHRl2xtbW2uLm5ubq9uMPT0r3BwcC6u7y6u8TMxb/Dt7e3hGl1gX1ndYd5Z3Vxa2t5eHB3fH15bWl3e3h3bml1j4FwbHl4d3d9gXuGgnmAoNze3d3d3t7e3t7e3t7e3t7e3t7e3t3d3d3d3d7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t/f39/f3t7e3t/f39/f39/f39/f39/f39/f39/f39/f39/f39/f4ODg4ODg39/f39/f39/f3+Dg4N/f4ODg4ODg4ODg4ODg4ODg4ODg4ODh4OHh4eHh4eHh4eHh4eHh4eHh4uLi4uLi4uLi4uLi4uLi4ePXhXJrZ3RhW1hYX15TVVVRVUpMRj9JRDs5PTY2NDc3NTc4Nzc3ODk8PDo+PDg8Oj0+OTs8OTs5P0E8PT9DP0FARUJCQTw9Q0A6Pjw1NDlER0dasbW1tre5ubm5ubm3ubm4uLm5urq6urm5urm6u7e3uX9ucHN6b3B/eXNuc3Vsc3Z4cXFwb2tvcX6Bc2mHhIF9dHOHdW11hYmBgHJ2hafd3d3d3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7f39/f3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f4ODg4ODg4ODg39/f3+Dg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4eDg4eHh4eHh4eHh4eHh4eHh4eHh4eHh4uLi4uLi4uLi4uLi4uLi4uHj14lxa2xyW1dXXWBUUVVUUFJPSkNATUE9Ozk2NTM0NjQ2ODc3Nzk6Pjs8Pjs5PDo8PDk8PTw7PT0+PUNEREBDQkE/QD48PkE8OD06NjY6QkpIWLG1tLa2uLm5uLi5uLe3uLi5urq5ubi4uLi6uru3uKx7cnhxf3ZzfnBsbXpyZ29sbW50cHt3d3Jyd3pvhpJ2f3x8enZ5fH9zfYdyda3T393d3d7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e39/f39/f39/f39/e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f4ODg4ODg4ODg4ODg4ODg4ODf3+Dg4ODg4ODg4ODg4ODg4ODg4eHh4eDg4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4uLi4uLi4uLi4uLi4uLi4uLi49eHb2pxalVWV2FbT1FSUE5XSURESUo/Ojk6NzUzNDk1NzY2Nzg4Ojw7PD46PDo6PTw5PDw9Oz09PDs9REdEQ0E8PDw8Pj5AOzg8ODE1OkFGRVautbW1tre4uLm4uLi4uLe4ubq5uLi3t7i4ubq7t7mqcnB4d3x7e4J3aG5xam9qY2lyf21zcn54dHFsanaAeX2AgH91doB1a4qLgHaR1d/d3d7e39/f3t/f3t7e3t7e3t7e3t7e3t7e3t7e39/f39/f39/f39/f4N/e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t/f39/f39/f39/f39/f39/f39/f39/f3+Dg4ODg4ODf4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHi4uLi4uLi4uLi4uLi4uLi4uLi4uPYhm1sdGVWUFxnWE1YU1JRWUVDS1BOOzk4ODc1NTM5NTY2NzY4Nzk+OT0+OTw5OTw7Njg5OTo8QEA9PkBGQEJCQDo+PEE9Pzs7OzYxNjxCR0RQqLa1tba2tre4t7i4uLi4uLm6ubi4t7e3t7e5ure2tIlyd3h9iXxwem99c2hqbGdnbHRscXd0cWx2c3Fxd3FyfHl4g3Z7d2mLkYp9kM7f3d7e3tvY2drZ297f39/e3+De39/f3Nvc3N3e3uDg3+Dg4ODf3t7e39jS397f397e3t/f3t7f3t/f3t7e3t7e3t7e3t7e3t/f39/f39/f39/f39/f39/f39/f4ODf4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODh4eHh4eHh4eHh4eHh4eHh4eLi4eLi4uLi4uLi4uLi4uLj4+Lj4+Li4uPj4+Pi4uLi4+Lk14NoZ3VkVlVkZVdKWllXW1Q9RU1LSD04NzU3NjQzOTQ0Nzc1Njc5PTo9Pjw9PDk7PDk5Oj45PD4/PkFBQ0FFRUQ+OzxBPjw5PDs3Mzc+REhFSqG2tbW1tbW2tre4uLi4t7e4uLi3tra2tra3uLm2traLfXpsbHp/cGx5dm5qaGdlcXp4b2lvb3B1c21zd4Fnb32CgYNyf3lqcHJ6f6ng393Zy8a/vL2/vsLN0tDW3tnc4NfQzcPCw8PH1dfT2dzX1NjX0MfExce9vM/Kz87Y3djO3N3c2t3T0dze39/e397e3t7e4N/f39/f39/f39/f39/f39/f4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4OHh4eLi4uLi4uLf4uPi4eLg4d7W29/Sw8rJx9Hb3OLk4eHg2dre1sbExcTN2trf5OHi4trX3st9aWZxYVleZWFNTFRLUlpMO0hNSEZBPTc2NjUzNDY2NDg3NjU2OTw7Pj46Pjk5PDk3OTs7Oj49PEBAQ0RCR0ZCQT08Q0A9OTw7Nzc3P0RGRkaZtrS1tbW2tra4uLi4uLi3uLi3s7W2t7a3t7i5tba3opdxb29waW50dnFmZWNrbmdvcm1mZ2tygWVvdnyAeGRzj39zaHFyaWVlbm+w39HFv7u5ubm5ubq6uru6vc3Gw8e/urq6uru7u8HCvcHFvby/vry7urq5ubq6ubm6w8XDucDDwby/ube/z8/U3tjc3t/g3tLa4N/f4ODg39/f39/f39/f3+Dg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODh4eDg4ODg4ODg4ODh4eHh4uLi4eDh4uLi4uHa2t3RwsPCu8XT1uDdydPDrrnAsaqrq6uwtLbJ0sXRxLG4v7Srq6usr7S0vMzE1c60tLureGxtbWBdYl9ZS1NVVFFQREBRTUhEPzo3ODU3MzE1NjQ5ODQ2Njo8Oz08ODw5Njo6ODg5NzU8PDw/QEFAQkRDQkE8PkI/Pz09PTc1OD5DRUNAj7a0tLW1t7i4uLi4uLm5uLe1sautr7Oxs7OztLS0tqaei2tue3ZxeXhnY2hfcXdha25vaG99b25ja2lseHdsa4Z+bHB6dm1scG95sca8uru7urm5ubq6urq6urq6urq6urq6urq7u7q7u7y7urq6ubq7u7q6urq6urq6ubi3t7i4t7e2tbW1tbi3u8e+w8XHzcS4wMnH0tzZ2d/e3uDf39/f4ODh4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODh3Nji4uLi4eHh4OHg3tfGxtHQztTe3tPO0t/SuLi8sq2trKysrrG+ua63rKipqamqq6urqqqqq6ysuKyqqqqrq6urra6urq6urryzrayrpHlub21fXl1dVE1SU1xUSkE/UElIPjg5NjgzNzMwNTczNzg1NzY2Ojw/PDg5Ozo6Ojg5OjY1OTs8Pj9EP0NFQkNCP0BAQT9APjw3ODc6QUVEP4W4tLS1tbe4uLm5uLi3t7SurKuqqq2urq6vsLGzs7WjcG5ucm1wg311aWFlaGZkY2Rxc21td25naW1tZXBzb29zcXN8h4F6dX11n7u6uru7urq5ubm6urq6urq6ubq6urq5uLm5ubm6urq6u7q5ubm5ubq6ubm6ubm4uLi3t7e4uLe3t7a2tbW2tra1tbW1tba1t7e3t7rBvrzGycrb3+Dg3tvd3d7h4tDW4uHg4ODg4ODg4ODg4ODg4OHg4OHi0768zNjd3OLg0dnbxL23sLCxsa+zu7uzsLS9s66urq2tra2sq6qqqqmpqKmpqampqqurqqqqqamoqampqampqaqqqqytrq6urq6urq6sraR4aWJxZmFZWlZRUk5cU0Y9QlJEQTc8OzY5NTY1NDU2NTg3NTY1Nzg7Pjw7OTk5Ojg3Nzk3Njg8Oz47RD8/Q0BBREE+P0M9Pjw+Ojo3Nz9DRj54srCztLW2t7i3trKurq2sq6uqqaqtraysrq+xs7S1t4xucnRqaIB5ZmpmZWxdaG5waGxxYmNmcoJ+dmhobGpueoaBhXx4cXF5gK+6ubq6urm5uLm5ubm5ubm5ubm5ubm4uLe3t7e3uLm5ubm5uLe3t7i5ubi4uLi3t7a2tre3t7e3tra2trW0tLW1tbW2trW1tre3t7e3t7e3tre4v8bP0MS+v8DE19e8ydra4OHg4ODh4eDg4ODh4eDb3t7Uzby3tre6wMDJxLfIvrKwsLCwr7Cvrq6ur7Cwr66urq6uraytrKurq6qpqampqampqampqKmpqKmpqampqKmpqKmpqqqrraytra2ur66trK2heWpkbWdiXFhRUFFLVEpCOklRP0E3PDk0OjU2NTQ1NTY4ODY4Njs6OTw9PTs6ODY2ODg6ODY3Pj09PT5BQUVCQkNBQUBBOj09Pz05Ojc9QUc8bKqmqKutsLGwrqupqKqrq6mpqamrrKytra2usLO0tbilgIdvaWdzdGZrcG1qZGxvcm5rbWNrcHyJhG5qbHx4Y3uKfnNqc25rcY+7ubm5ubm5ubi4ubm5ubm5ubq5uLi3t7e3t7e3t7i5ubi4uLe2tra3t7e3t7a2t7a2tra3tra2tbW1tba1tLS0tbW1tra2tra3t7e3t7i4uLe2t7a2uLm4uLe3uL6+uLq9vcfb4OHg2Nnd4eHg3dfKwcPCurm5uLe4uLi3tbS0tLKysbGxsLCvr6+vr6+vr6+vr66ura2srKyrq6yqqqmoqKmppqepqaehpaipqamoop+hoZyip6inqausrK2ur7Cwrq2unXhwbGphY2BZUU1RTFJGQzlNUEU+ODs3Mjc5Njc0NDM1ODg3OTc7OTo9PTw6Ojk3NDo5ODY1OD8/QEI9RENDQ0FDQEJBQDtAP0A/PDw6O0NIPWOopaWlpqioqKenp6ipqqmoqKipqqqsra6wsLCztLW1taWYdn5xZmt4cW9tZmVsaGNsZ2ZpaX11bWlvfXZ5hWZod294b3Fvcninu7m5ubm5ubm4uLm6ubm5ubm5ubi3t7W1tba2tre3t7e3t7a2tbW2tre2tbW1tra3t7e2tbS0tLS0tLS1tLS0tLW1tba2tra2t7e3t7e3t7a2tre2tre3uLe2t7i4t7i4uLi4wMXTyry8w83PyMC9urm5ubq6ubi4uLi4t7W0tLSzs7KysrGwr6+vr66urq+vr6+uraysrKurrKysq6ehoJ6gn5udoaGdlpmkpKaon5mZmZmanZ+gn56fpKqtrq+ura2srJl1cGlrY2FeXVVOU0tSREQ4TktHQTo4NTI2OTY1NDczNzc3ODk3OTo7PT0+ODg4NzU6OTk1OD9AQEFEPkZBQkNAQkNCQT88QEJCQD0+OjpERj5cpqWmpqampqanqKenqKioqKenqaurrKytra2ttLS0tbekc311bnONf3JmanFjaW1jaGZobG51aV9jZ3VzdnpuZ3Bwcn56cYihu7m5ubm6urq6urm2s7a1uLm2trW1tra1tbW1tbW3tra3tra2tbW2tbW1tbS0tLa2t7e3tbS0s7O0tLW1tLS0tbW1tra2tra2t7e3uLe3tra2trW2tbW2tra2tra2tra3tra3uLi3uri4uLi3uLi5ubm5urq6urm4t7e3t7W1tLS0s7OysrKxsbCwr66urq6urq+vra2srKuppaSmpqScmZubmpmampmXl5eXl5aZm5iZmJmZm52en5+dnJ6gpKWko6OioqKQdG5jcGFeXltUU1RIVEo/PFFCRkM7ODYzNzo1NTQ4Mzg5OTc4OTc7OTs9Ozc6NzU2OTk4NTg+Pz9ART5CPz9DPzxBQUI/PT9EQT8+PTk9Q0Y/VaSlpqanqKeoqamop6ioqKioqKiqrKuqqaipq7W1tba5o3eKcXKHhnd0cGh5a2JjYWVsaW5zal9jZWNjZWprYmRqbHaXjX6ovbm3tre5u7u6uLWxrKurqq6wrKyrq62tq6uvsLGvr7CytbW2t7W1trW1tbW1tbW2trSvr7O0tLSvra6vsrW0tbW1tbW2t7e3t7e3t7e3t7e3t7Owsra1tLa2tre3tra2tbW1tra3t7e5uLi4t7e3uLi4ubq6urq5uLi3t7e1tbS0tLS0tLS0s7OysbCvr6+vr66vr62oo6KgnJqampqZmZqbm5qampqbmpmZmZiXl5aYmZmZmpycnZ+foJ+goKChoaCgoJ+fi3RuaXRdYGZeUlRLRFRJPUVTSEVCOzo0NDY5NDQ1NzM4ODg3ODk5Ojs7Pz04OjkzNTg5NjM5PT5AP0A6QEJCQkA/QEJCPz0+QUFCPz06PkVDQFGjpqWlp6inqauqqKaoqKipp6ioqKinp6ioqaq1tbe3t7KZtH99kIx1Z2lqbGZjYGNoZW94cGlicXx5cGpmZmRma3NqhYystrKwra2ttLeysLCtrKuqqaiop6ipqampqKinqKipqaeoqqurra2sqqytraysrq6traunpaSnqqyopKOkpamwsbGztbW2t7i3t7W1tre4t7e3t7Kppaasq6ivtLa1s7W3t7a1tbW2tra3t7e3t7a2t7e3t7m6urq5uLi3t7Wxs7S0tLKxsK6sq6yurrCxsK2rqqmqqKijnJqZmJmYmJiYmZmZmZmZmpqZm5ubnJybmZeYmpqcnJydnJ2foKGhoqKioKGgoKCfnop1amtuWVxhVktPREdVRz5PV0hEPTw4MzQ0ODQ1NDgyODk4ODk6Ojw5OUA8Njk6MzY3OTE0PD8/QEBBOkNGRUJBREJDQTo7P0FCQz9APUBEQ0BPo6empaemqKqqqqakpqenqKioqKimpqaoq6uttba3t7e4rbJ1cHuDdmBiaWtiZWZhZGdmfYh5bHKAfXFvcXhjbW5xZo+srKurq6ysra6urK2trKyqp6WmpaWlpqioqKiopaeoqKioqKeoqampp6Wko6KioqOioKKioaKhoKChoaKjpKOjpaWlqLC0s7OzsKuqqaqztLa3trGopaOioaGipKiqqairs7Sxrq6xs7W2tra3uLi3t7e3t7e3t7a2uLe0sa6ppqerrKmnpqWkpKSkpKWnqaajoJ+enZycm5uampmZmJeXmZmZmJiZmpqampqampqbm5mYmpydnZ2dnZucoKGgoaOjoqCgoKCfnp2FdGtsaFdYU0pHTUVITUdAU1dGRz09OTM2Mzc0NTU3Mzg6Ojo6OTw9OjpBPDY9ODM3ODgzNztAPz9AQDpCRUNAQkRDQT87PEBDQkNBQDxBQ0A9TqKnpqanp6mqq6mkpaWlpaaoqKippqanqKmpqrW2tre3t7izc2h7c2JnamtpaWJhZGloXV1tfHJma3J/fHR8bm1zc36gqamrq6uqq62trKusq6mpqKWjpKampqWmp6eqqaamp6enqKinp6iop6WjpKKhoaGhn56en5+fn56foKGho6Wko6OkpKSmp6enpqWkpaampqeqraumpKKhoaChpKWlpaenpaeoqKalpaivtLa3trW1tra1tbOwrKupqa6rqKWlpqampaSkpaWlpqWkpKSkpaKhoaGgnp2bm5ucm5qamZiXmJiYmJiZmpmZmZmYmZmZmZqZmZydnJycnJybnJ+fn6ChoaKgoKCfnZ2cgHNrbmReU0pITUZETEtFRFFTQ0c9PDgzNjI4NDY0NjQ4OTg6Ozk7Pjw5PTs5PTczNTk2NTY8QD0/QD88P0JDPkJCQj89Pj5CQ0FFQD86PkVAO0+jpqWkpqeoqaelpKWlpKWnp6eoqKanp6alpqa1tba2trW2uYptcW1vfHxxZ2pmYGFsYFROW2hqbm9tgYJ9cWdxdn6aqKeoqqmpqqurrKqqqqimpaWkoqOlpqalpaWmqaqppqWjpKWmpqSjo6KioqKgoJ+fnp6cnJycnJ2dnJ2en6CioaKjo6KhoqKkpaSioqOjpKSjpKSko6Ggn6GipKanp6ipqaelpaSipKSlqK2wsKyrqqusqqmnpaWmpaWlpaalpqioqailpaWkpKSlpKOjpKOioaGhoqKgnp2cnJubm5qZmJiYmJmam5mXl5eWlpeXmJiZmpqcm5qampubm5ucnJ6goKGgnp6enpycm356bnJiXlNNSlBFRk5NQkBPRT5JOz01MzYzODM2Njc1Ojs4OTs5Oj49Ozo5OT03NjY5NjU2PkI+PkE/PT5DQT5DQ0BAO0BAQkJCRUA+Oz5FPzxQoKSjpKOjo6SkoqSlpaSlpqamp6empqalpqaltLW1tbS0tbiBaHx9ZXOCemxwdWFfY1ROT1FbaGxpbGxxbW5xbnScoqSnqKioqauqqqqqqaempaSjo6OjpKSlpqalp6ytqaShnp2eo6Shnp6foKCenJ2dnJycmpqam5ucnJubm5ydnp6foKChoJ+goaOioKGjpKSjoqSlpaWkop+go6SkpKapqainpaGdnJ+jpaipqainqKioqaempaWkpKSlpqampqampqenpaWko6Ojo6KioqGhoqKhoqOkop+enZ2cmpubmpqZmJeXmJaWlZSUlJWVl5iYmpubnJuampqam5ucm5ucnp+fnpucnJyam5p/fnF0YFtUTUdNSEZMSj8/TkM8QDs8NDM4Mzc0NzY3ODs9ODo6OTk7PTs7ODk9Nzc4OTU4OD9APT9BPjs9RD89REA/PzpAQUE/QUVAPjw8Qz88Tp2ioaKioKCipaSkpKWlpqenp6empqampaampbW1tbS0tLS3jHalsXdmc3Jvc2xjZGlYT1JRT09dgG1kYFptkZGSoqKjpaampqenqKiop6alpaSjoqGhoaKjpaempqesrKemoJ2cm6Ghnpuamp2cmZiam5qampmZmZubm5uampqampucnZ6goaCfnp+hoJ6foqOko6Omp6inqKWioKGhoaGkpaWlpKCcmZmbnqOmpqampqanpqempaOlpKWlpqiop6enpaWlpaWkpKOjo6KhoqKioqKhoaKjo6Kgn56enZybnJubmZaUlJSTk5OTk5SUlJWWl5qam5ubm5qZmZqanJ2dnZ2dnZuampqamZqXf3dvc11aTkhKTkdFRklERU5APD09PDQ1OzQ2NDY1Njc5Ozg5OTg5OTw7PDc6Ozc4ODg1ODg/Qj9BQTw+P0A8PEJAQT49QT4/Pz1CQUA6OkA8PE+doqGfoJ+dn6OkpKSlpqeoqKenp6ampqampqW1tLS0tLS0tbSXtqd1Znh2Y2xjY2VjW1JTU1JNXqCMeFhodpajnp6hoaOjo6OjpKSlpqalpKSioaGko6OjoqOlpqWmpqenpp+bmpuioJmWlpWam5mXl5iYmpqYmJqampqbm5qZmZmenZ2goqOjo6KkpKWinqGhoaKjpaampaSjoaCgn5+hoZ+goJ2amJeZmpygpKOjpKWmp6alpaOjpKSkpKWnp6ampqampaWmpKOjo6SjoqKjpKGfoKGhoKGgoaCfn56dnZyamJeVk5KSkpKSkpOTkpOUlZaZmpqbm5qampqbnZ6enp2cnJybm5qamZmZlH10bHReWk9IRUdGQkVORT9GOzo+Pzs0Njo2OTM2NDY4ODo4OTc4ODo8Ozw5Ozs6OjY3ODk5Pj9APjw9QD5AOjlAQT89QT8/QUE+QUE/Ojk9PjpQnaCfnZucnJufoqOlpaWlp6iop6ampqanpqantLS0tLOysrGwsK2rkHiGj36bmn93Yl1TUlFRTGKgootaiKCgn52YmZycnZ2eoaGgpKenpqWkoqGjp6alpaKipaampaanpqagm5mboaCXk5OSl5qcmpeXl5iampmampqam5qYmJmaoKCgoKGfoaKipKamop6gn5+goaOko6Khn56enpyanZuZmpqZmJeZnqChoaKioqKkpaWmpKSkpKKioqKkpaWlpaWlpaalpaOko6KioqGgoKGgnp+fn5+fnp+foJ+cm5qZl5WUlJSTkZCRkpKSkpKSk5SVl5iZmpmZmpqam5+fnp2cnJycmpmZmpiXl5F8cmdxXl1QRj9BRD9KT0JCRjhDRT4+OTg7Nzc0ODQ1OTo6Ozk3OTo8Ozo8PT48PDo2NzY5OD4/QT47Pz49PDg6PkFAQUE/P0FCQERBPjo4PkE8U5ycm5uampycnaGio6KjoqSmp6alpaampqSjo7KysK2rp6amp6alpqiln6iop6qnoXmEXFFST0xcnKCAYpmgnp2clZOVlpeZmp2dnqGmpqampKOioqanp6ajpaampaWmp6amop2cnqGfl5GRkJSXm52YlpaWmJuZmpqampqZl5iam6Ghn56fnpybnJ6goJ6dn56fn6Cio6SjoqCfnp2ZlpeXl5iYmZubnqKioqKioqGio6WlpKOio6SioaGhoqOkpKSko6SkpKSioqKhoqGgn5+gnp2enp2dnZ2dnp6em5mYl5WTk5SUk5KQj5GSkZKSkZKTlJaXl5iYmZqampyenZ2dnJubmpiYmpmXlZaNempmamBiTkY+P0A9SkVAQ0A7QEE8Ozs5Ojc2NTg0Njc4OT04ODs6Oz87Ojs8Ojk6Nzc2ODs7Oz08Ojo8PTw3Oz5DQkRDPz1BQ0FEQT88OkBCO1eZmJqamZmam5ucnp2foqKhoqSlpKSlpqSioJ6op6alpqWlpaemp6ampqakpaanqKehqXJOUU1KVJahenKanJyenJeVlJWWmJiXl5qeoqKhoqOkpKOjpaalpaanpqSlpqalpaOgoKGhn5mSkI+WmpmenJaXl5eZm5ycnJqamZeZm5uen52cnZyZmZqcnZydnp6fn5+hoaCgoaKgn56bl5WVlZeanZ6fn6GhoqKio6OhoaCgoJ2cnaGioqOkpKOioaSlpKOko6SjoqKioqKhoKGfn52cnZ2cnJ2dnJ2enpqXlpaVlJOTkpKSkpCRkpKSkpGSlJWWl5iYmJiam5ycnJycnJ2cm5mYmZiWlJWXi3hsY2RiZFFHQT1DO0tIRDo7Ozw+OTo6OTo3Mzc5NTo4ODg8OTg7OT09Ozo7Ojk8PDc2NDc/PDo9Ozw/Pjw7ODxBQ0FDQkI+P0NAQkFAOj9APztZmZiampqam5ubm5ydoKGhoaGhoqKioqKhn5+dpKWmpqenpaWmp6ampqWkpKalpKSkpaaGUFJQT0+PmHB6mpubnJ6cnJycm5ubmZiYm56dnp6foKOkoqGhoqKio6SkpaalpKOjoaGhnpyalZOUmJuam56amJiYmJqcnpyam5iWmZybnJycnJydmpqbnJ2dnp6dnp6fn52cnJyhoaCblpWVlZacoKGgn5+hoKKjoqOhnZuZlpaWlpicnqCip6ikoaCgoqOjoqKioKCgoJ+fn5+gnp2cm5ucnZydnJmanJuWk5KSkpKUk5KSkpKSkpOSkpKRkpSVlpeYmJiYmZqcm5qbm5ucnJqZmJiXlZWWl4d3ZGdoZGJNQ0U8RDlJSkU5Ojs9PTo6ODg6NjQ3OTU8OTY4OTc5PDs7PDo6PDs6PDw4Nzg3Pj07Pj46Qj86Ojo/QURCQ0FBQD9EQUFAPjpAPj06W5qYmZqbmpubm5uen6CgoaKioKCgn5+enp2dnKWkpaanpqWlpqakoqKio6Oko6Kjo6KnllRYVVJOZ21rgZ6am5udn6Cgn56enp6dnJ2dnJ6enp+goaCfn6CgoKGio6Ojo6OjoqGgnpuZmZiZmZmamZienpiYmZmam5qWlZeWlZicnJ2cm52dnpybnJ2cnZ6bmJqeoaGdm5udoKKhmpWVlpaZoKKgnZueoKGjop+em5eXlJKSlJeYmZ2goqenpaGgn56goaGioaCfnp2cnJubnJubmpqZmpydnJmXmZaVk5GQkJCPkZKSkpKSkZKTk5OTk5OTlJWWlpeXl5manJubnJucnJqamZeXlpaVlZSEcmZsYmRbREJMPT84RktCPEA+Pj05Ozk6PTg1ODg2Ozg1Njo4PDw7Ozw8Ozk8Oj09OTU4Nzw5PD88OkE/Ojo6QEBDQkRBQ0A/Q0FAPj08QD09Ol+al5mamJeYmpycn5+foaGhoJ+fn56foKCenZ2lpKSko6OioqOjoZ+foaGipKOio6SiradXXl1UV19ua42dmpqbnJ6dm5ucnZ+enZycnJydnZ+goKChoaGgoKGgoKGioaGioZ+enJqampqbnJqZmpuZnJ6ZlpaWl5eTjo6QlJabnJuam5udn52cnJycnJ6dlpSZnJ+in5ycnZ+hoJuXl5mZmpycnJubnZ6fnZqXlpaWlJOTlJiampqfoKGmpqWgn56fnqChoaCenJubnJybm5ybm5qZmJmZmZmXl5iVlJKQkJCQj5CSkpKSkZGTk5aYl5STkpSVlJWWlZaZmZmam52cnJyampmXlpaWlpaQgG9vZV5gV0BKSDg/N0lFP0VBPD07Ojo8Ozs3NTs4Njs3NDY6Oj47Oj0+Pj07Ozs+Ozo4Ojk5NkBBPTo8PTo6OT9BQ0JERUM+P0FBPz8+Pj89PDtgl5WXl5aVl5mbnqGhoKGioqCenp6enqCgn52bpaWjpKSioKCfoJ+dnZ+hoqOjo6OkobCjXWVkYGFua4GenJubm5ubmZianJ2enJubm5ycnJ6ipKGeoKGhoqKhoKCgoaGgn5+enJqZmpubm5ybmp2dm5manJiXlZWWkY6Nj5KYnZycm5ycnqCdnJucnJyempWVm56foZ+dnJyenp2cmpqampqampqbm5qXl5aTkpWVlpWTlZaam5qanZ6foqWjnp6fn5+en5+enZ6fnZycm5qcmpqbmpiZmJiYmJiYlZSTkZCRkJCQkZKTk5CRk5SYmZiVk5SVlZWWlZaXmZmXmZqenpyamJiXl5aWl5eYjX1ubV9lVlRFSzw3PjdSRUM+QkE4Ozw7OTg6ODY7Nzc6Njc5Oj0+Ojw8PT49PD06Pz06ODw9OTtAPj4/PT45ODs/QkNAQ0VDPT9DQj5AQD5APTw8YZWSlJWWlpeanJ6goKCgoaCgnp6enp6gn56em6WlpKOioJ+fnp2dm5mbnJydnp+gn56rmGNpbW5pZm2enZybm5ybmpmZmZqam5ucm5uam5ygo6SgnZ6en6CgoKCgn6ChoKCfnpuamZqam5ubm5ufnpyZmJqamJiYmJKOj5OXnJ2bnJ2cnJycnZycnp6dnpqVl5ygoaGfnp2eoJ+cnJuampqbmpqYmpmVk5OTkpOWl5eVlJiYmZucnJydoJ+gnp6enp+fn56en6KjpKKgnp6cm5qampuZmJmZmJeXlpWUlJORkZCQkZKTk5OSkpOUmJmYlpWUlZaWlpaWl5iYmJiXmZqamZeXl5aXlpeWl4l4dmddX1dURUU5OTs8WT5AOEI/OTs7Pjk4Ozg6Ozc5OjU4OTs9PDk9Oz0+PD0+Oz8/Ozk+PDw+Pz5AQUE9ODc7QkNFP0FFQz1AREJBQEQ7Oz47PGKWk5SUlpWUlpiYmZubnJycnZ2cnJ2en56dnJqkpKSkoJ+enpybm5qZmJiYmZucnZ6cpolla3R4bVuFop2dnJydnJqbmpqampydnZ2bmpuboKKinpucnZybnJ2enp2dnZ2fnpyampucnZycm5ycnp6cm5qanZqam5yVkZOXm52dnJ2fnZycnJycnZ6fnp+cl5idn6GhoJ6cn6CfnJubm5qbmpmZmZmZl5WWlZaYl5eXlpaYmZuenp2dn6GhoJ+fnp6fn5+dn5+hoqKhoZ+fn5yZm5qcnZuampmXlpaYl5eXlpWTkpGTlJSTlJSUlJaZmJaVlZeZmJeYl5eXl5eYl5iXl5eXlpaYl5eVl5eDeHZfW11eUT1GOjk4P1VDQTtDQzo8Pz86Ojk3Ozg4ODc0ODk8Ozw4Ozs8PTo9Pjo/QT06PTw+PkA/PUBBPjk2PERDRUBBRUU9PkVERD9COzo8OTpkl5SVlZaUlJSUlJWXmJiamZqcnJydnp6dnZybo6Oko6CenJuamZqZmJiYmZiam5ubm6WJa3F2em9lmp+enp2dnJybnZ6dnJ2enp2dnJydm5ygoJuampubmpudnJqampucnJuZmZycnJ2dnZ2dnZ2dnpybmp+fm5ydm5mZmZudnZ2dn52dn5+dnJydn5+fn5uanZ+goJ+dnJ6gnpubm5ubm5yampuamZudnJqZmJeYmJiYmp2foKCgoJ+hoaGgoJ+en5+fnp6foaKhoJ+enp+enJqam5ubmpqZlpaXmZmYmJiWlJOUlJWVk5OVlZSVlpWVlZSYmZuamZaWl5WWmJiWl5OUlJGRk4yRkJOWfXhqYWJiXFA8QDw2OENWSERCOjg7Oj47Nzc5Nj06OTk2NDc6Ozw9OTo6Oz87PT08QD47Oz46PT89PkBBP0A8NztBQ0U/P0REPj9EREM+Qj07PDs6Z5aTk5OTk5OTlJSVlpeWl5aWl5mbm5ybm5uamaOjoqCfnpuamJeYl5eXmJmYmZybm5qkgGpqb3lzcZegnp2dnJydnp6enp+enp2cnJydnp2bnJuampqam5ubmZiYmpqamZmZmJqdm5ydnZ2dnJ2cnZ2cm5qdn5ucnJubnJubnZ2dnJydnp2enZydnZ2cnJ2dm5uenp6dnZybnpubnJycnJydnJubmpmbmpmYmZmYmpmZmpyfn5+jpaKfoaKioaGfnqCgn5+fnqCioaGhn5+fn52ZmpudnZqZmJWWl5aVlZaTkpOUk5STkJCSk5GUkY+OkJGOlZabmJWYlJmXlJiRjJCPk5yTkoyFjIeDhndxZ2pkW1xRQT44NkJHYEJFR0A+Ozw7Ojg4NjU8ODo4MzQ6Njk9PTk5Ojs9Ozw6PD48Oj5AOj5APjw/QD8+PDg6Q0FEPz5CRD8+Q0VCPUJAPDw8OmeYk5KSk5OSk5SVlJWXl5aWlZaXmZmZmpqampqkoqCfn52bmpmYmJiXl5iZmJmcnZ2cqH1nZXN7enOJop+enp2dnp6enZ2enZ6enp2dnZ6cm5ybmpubm5ucm5iYmJmZmJiZmZmbnZycnZ6enp6enp6dnZybm52bnJybnJ2dnZ2dnJ2dnp+fn52cnZ2dm5qbnJmZnJ2dnZ2dm5uanJ2dnJycnp2dnZybmZeVlZeXmJqam5ubnZ6foqOhoKGhnJucm5ubnZqcmZycn6CfnZiZmZmUkpKUl5SPj4+OkYyNiYuQi4mLjpGRj4mQmJiQkoyNi5KQj5iYoqiqpqWlrKOmoZqep6eyqKKVo6Cfl39wcWlsXFtcTUY8NzdHR1g+SE5URjk+Ojg5ODc1PTk4NzMzOTY6Pjw6Nzo8Ozo6Ojo8PDs/PjtAQD47PT5BPDw2N0A+QkA+QUY+PEFEQT1DQj49PDlmmJSTk5OTkpOUlZOVl5iYmJaXl5iZmZqampqaoqGfnp2cm5mYmJiYmJiYmZmZm5ybnKx/am16f3lxh6Genp2cnZ6enp6enp6dnp2dnZ6enJubnJubm5ubm5uZmJiYmJiYmJmZnJ2dnJyenp6enp+fnp6dnp6dnJydnJ2dnZ6fnZ2fn56goJ+enZ2dnZybnJ2em5qbm52enZ6dm5ubnJ2cnp2cnZqYl5SRjo+QkJGVmJSWlJiZmpudmJuYlY2Mjo6TkpKRj4mQjpGRjo+Ki42NjYiIi4+Lg42NkY+MkI2Qk5WVnJihoJySn6SipKmam5eanKOprb3Bwbq8uL26ucC8ubq3uru7tL2zwbV/bnVmZ1peWUxJRTo7TElTPFZSSUM6QTo7Ozc3NTo6OjgyNTY4Oz08OTk7Ozw5Nzo4Ojw6PT85PD8+PDw9QTs5NTg8O0A/QT9EPTxBQkA8REM9PT06YZOTkZCUlJOTk5OTlJeYlpeZmJmYmZqbmpqamp+gnp+fnJqZmpqampmYl5iZmZmZmZmphXB1e4B3b4mhnp6enp6fn56en56fn56dnp6fnp2dnJ2cm5ubm5ubmpiYmJiZmZiam52cnJ2dnp2dnp6goJ+enZ6hoJ6dnp2enZ6fn56en6CenZ6enJydnZ2cm5qYnJuVmJqamJiYmJmSjJCXlKCXk4+MjYqKiImMiJORh5CPjYqKkJCLjoqMi4+IiImJjpGOjYaFiYaKhoWLiI+SkJCNkJKXlpKamJ2TlJ6kpqaqq7Gsr6+rpquqsbm5tbS0rqyvtMDIxcXBvsbDxMTDurW+t7a0s7C2tb6qcHRyXGZfXV1JRj8/RUtMVklcTEQ/PUI6Qzk5Nzc7OTk3MTc5ODo+ODg6PDw7OTc5OTs9Oj4/OT5BPDs+PD46OTY5PDpBPkNBQT08QkBAPkJEPj8+OVyHhIOHi42KiYaFgYqMkZOVmJiHlZaWkpiampmenZ+gn52ampubm5ycm5iWmJmXl5ibqo56dXZ7f3mCoJ+fnp+goKCfn5+foKCfnp2dnp+enp2dnJqam5ubm5uYmJiXl5iZm5ucnJydnp6enpybm52dnZycoaGfnZ6dnZ2dnp2dnJiWlpaYlZWSlpmWk5GKjI+PjI+NkIuLj4+WiYiEi5GZjn2Fi42PjYyHioyQm4yRj4+Lio6TjIyNjIiSi4yFiYyPhouIh42KhYyEj4qXkJOYmpWbnKOqoaKknKKrsbe0ubWxs62vsrKlp7O6sbq6vLa3tsDDw729vLa/urq8wbW4wL60r66mqa+3mm58Z1tjWl1fSEU+QUtJU1hZXkFGOTk9OUY/Pzo3Ozs7NjM6Nzo5Pjg6Ojw9OTk4Ozk7PDo+PTtAQDs8QjxAOjg0Nzw7Qj9BQj4+O0NEREBDQz0+PjlhmZWLkYWNj5aSiHl9e3+Fi4OKgoqJhmuAeJCLlpqRnZ2UlJGTlpeampiWk42Sk5KQm5uIdndzcX1/cpGgnZubm5yenZ2eoKGgm5uWlpucmpybnJuYmZqYmJmampqWi5CTlpmYlZiYlpucl5WSkY2SkZCUk5KXm5mYm5ePjpCLjo2Ch4uLi4qLiI2RjIeHhoqIiZGKh4yEhYqNi4qNhI+UkIyDkJOUmZWQi5OTkZWRlpWOj5GMlI2Oj4qIj4ePhoeJiYmNiomJioWNh46JmJKUmpuXmKChp6Cko5qqqbO2sbWwqKmiqK6tn6qvsK21ubi8wr/BxLixtbCutrOwuL68ury+urOzp7G3wpB1gGNiXlpXUk1IRkVQSVlXX1tDUDpCQz1HRj84Nzo6NzU1OTc8OTw5ODo9Pjo6Nzs7Pjs7PTs9P0E7Pz48Pzo4NDM3OkFBQEI+PjpDREM/QUM7PT45Z6mloqKZn6CippeUiI2CiIJ1h4iKiIp7e3Z7enmPeoiSfn18en6CkYWBgH1zfH99fISHfnRweHZzfHaBj4iIiYeIioyMkZicl4iOhIuNi4iNkI+Pi5GPi4yOj5CQjouFhYeLjIyHiIuOi4eMhYaBjYuGiop/iYqGiJiRiIOIg4KFfIuLjIaJi4iKkIyIi42PjI+Wh4mLio6NjY2Wk5OdnJyalpycm56bmpuYnZeTkZWWkJKRi4+LlpSMjYqDi4SEiYyQkIqOio2LipGJjZOTk5SVk5KcmZ6Xn6CfpaKvsamupKSfmKStpqa4t6ysu729wsPAv7+vpa2wsLS3uLO0uLa0ta6stK+4tLaBeXpjZmBeVlBRQUVMT0lcXl9UR0dCS0xCREA9ODg7OTU3Nzk3Ozc9PDk9Pj05Ozg6O0A8Oj06PkJBOD88Oj84NjQyOTtCQD9CPj04QEI/PkBEO0A+N2CloJqXnaGaoaCPl5efl5WCjaCfo6GdmpKOjIxycXBvdnFucG1ucHZub29waHBxcHR+c3FycXd7cnl2d3Jyd3Z6e3l8fXt/iIGEi3+PkYaNi4uGiouLiYaEgYaCgIKJkYOAg4x/ho+LiYWAh32AgZKQhoSEho2DhIyPj4+IjY+Hi4iRkJWRjpCKk5eOj5WYp6SfnZWYlpaln5udq6aqt7W4srGnr6qnpqGfmp2WkpWVkYqPjImTjZuVjYuLhoaJjJWQkJCLmZKVlZSbkJiTlIyNkYyWl5WilZ6mqauno6OqsJucpp+mq6G0vb6zs7+5u7u6uby9rqiusa6wuLyztLGxqrCpqLGxsqild3J0X2hhYFRWUUlKSFZNXl5eVExKRVFKRUdDPTo5OTc0ODY4Mzg4PTo9PD47OTs4Ojs/PDw+OT9DPzg7Ojg8Nzc2Mzc5RT4/Qz89N0BAQT0/RDw+PThUj4yGh4eUjJWZl5yWmZaNlZyWlZydoKCdmpiWeHFubXJ4cXFsbnJwa3FvcG1yc3t1dnd5fnVxeHZ0d3tybn98gX15eH1/eYOGg4WCg5CLkIuLi42Pi4mJhYKBfX9zfYiAfpyQhIWFiYuPinp9fYaOjYqGjZSRi5CXj5SXkpihlp6XlZunpp+goKawq6GjpbW0sqqmqq+isba5vcK7ucO+vLi9uLWxrLCspZuSk5mfm5SPk5WOmp2doJqfn5edo6qsoZ+em62hp6qwqaampJiRkZWUo6SirKSss7Szs6i3tru4sLKvra2yt7a6srW6s7e5u7i8urayr6yxsbKztLOxsa2us7Gzs6yhl3Zxc19jXlJRVE1PSUdYT1pcZFROR1VPRURKRD44Ojg3NTg4ODU5Nzo6PTw/Ojg8ODk5PTs9PTpCPj84Ozo5Ojk4NjI1N0I+P0RAQDY+P0I/PEM8PT46Tn98go6MjJOTl5eaj5SWjZaRkZSXk5qanqGdnHJvcnFxcXFxcG5zcW91dHJxdneAdXd8eYV+d3t8eX1/fICJiYmDfXp/h4GIiYGAgIGGiIGGi4aIhYSIiImEf4J/enx8fX6SkH+IeIGFi4qDhIWKj4yNkZmdlJSUoJqan6Ktsa2ppKWtr6ysrLWuvrmtrqm1sLexq7G2rK+9wsLAvrq8trKutraxtK66u7OurKepp6unoqmtoKmooq+wuLSxvLq6urK0ta+8tLezt7e7t7mtrbCprLW5sbeytLe2sLu7vLu6ury1vLi0wbWsqqqrtLG3uLm1trSzsKymrrCqq7Cxq6yusLKxtK6qo5N4dnJlZ1tMUlBGTUhTV1JlXmdUUExcUUhMUkNBOTk3OTU4ODY2Ozc5Ojs6Pjk4Ozo6Ojw8Pj08RD45Njs7ODg+OTUxNTZCRkREP0A3Pj5DPjpBP0BAO0t/gomXmJSdlpabmIuSlo6XkZGVl5SZl5+bmZx8dHV2dXl1c3RudnJzdHV2d319gX56gXyDfoJ/fYB/hIKFj52RiYF/go+Xjo6HgoCBiIuFfoqQi3+HjYyLioeSioeGjZGTkZGEh319g4iMjouOiomQj46PlJSYkZWbmp2dqK6yr6+1tLOtsrW4sLy1tbGqsKqztbS7t7SztrS1r7i4t62noqassLCvtre3vrW5vLOysa61u7C0r6+yu7axuMC9tLS0s7izvLq2tLrAvbm6ubq+ubm5vrWysa+yr6q1tLGzsbSzrri4tb+vpKaoo6ussa+zrq6wsKytq6qroqKmqKKnrauqpaynoqeYeHlxZmVZT09NSVJNV0xPX15cTlVUYlFEVE07Pzk8ODk1Nzc1Nzk1Ojo6OTs4Ojw8Oj08Pj4/P0I9ODY6Ojk6QDs1MjY2QUZDQz4/Nz49Q0I5P0I/PjtLjpGTmJmVmZGTopiTkpKLk4uOkI+Vl5ablZSbhoJ9enh2dHRzdH53end2gIKDhouMhISFioaQiYeRk5aRjZaalY+IjI+emJaVkpCTl5qamJCdoJ2Tl5qgmZ2bo6CVkJugpKOak42IiIuJkZGOkY6LmJqPj4yUmpecnJufnKSstLm6vK+2tLi0tLK3uLmzq6+qqKy1srK1rrGrrqa3s7OxpaGotbCvrayrtbqyu7q6tLK3ur67ubG4sLmtqLK4u66ttLS3tbu2trm5vLe0r7G0t7a5s7e1pq2pq6ior6yprq2up6KxtLG0q6aop6Cjq66oqq6orLKwr6+pqKGeoaGjpqOgopqlo56ol3J3bmdiVUtUT09KQ1BLX2JYWlFcU19NSFJJQUA5Ojg2Njc3NTg5NDs5Ozk8Nzs+Ojg8PD0/QkBBPTs2OTk5Oj87NjM3OD5GQkJAQjk+PUBDPkBGQj44R5OWkZWTkpSQkZ+ZnZmVkI+Sko6Mk5aWko6RlZGSkIaBeXJzdXuBhI6HhZGTkpicnJiVkJWYo5yaoaeqqZ+clpeVnaKioZyZnpmlqKyvramnqqmop6GlqKirqamvoZufoaOjoJqfoJyUjZiUmKCgoaSem5qkp6Spq66spaOoq6+xtK6qrK6zr6ystLO0ua6urayqrLKwsK2wqKqmsrS0uK6qtrqwr6qurLC3s7i0t7W0u7y4tbWxtauyrKiys7uvrbGytLa1sbG0s7OvrKuvs7a0sayutKqqpqWnrauoqKupqqifqbOwqqeppaOio7CtqaatpairrayppaSioKWipaOYmZyVnqKippdudWVnZFZPWEtLSktTVHBiWWRXX1tcUlpQTEM8ODk6Njk4NzQ3NzQ4Ojw6PDg6PTk3PDw7PkM/QT47OTo5Ojs+PTg0NThBREVEQkM5PjtAPkI/R0Q+N0KSm5SVlZaVj46Wl5qZlZGKk5SSjo+SkYqKiY2Ul5qTjYmCho6VkZSfmpuin5+jnqGhn5ijpKelpaapqa2rqaKmpKilpKGfnqOjra2srairrq6qqqukoaKlqaenqaijopybm6SgpaijoJidmZ+hoqmnoKKirqyrqqetrqilpKmpqammo6iqqaekp66wr7Ovq7Crqq+yr7Czua+rqLCxrrCyubO0r62vtbCss7GurLW1tLSzs7CvrKyqrKusr7G0s7CwrrCwsKyqrauqq6alrrCysKumqbCvqaOkqaunqKaopquwq6mvqaaoqaalo6iwraqpqKKpo6WnpKGhoKKloZ2el5aYlJugpKmUbnNeamlfVVpOUk5QT1JkXGVjW11ZXFBZT0tAPDs5Ojc6ODczNTMzODo9OTo4OTo5Oj08PEBEPkA9OTo8PDw+Oz45NTo8QkFFQUNBOT47P0BEQENCQDdAkZ6YlJeZlpGHi5SSl5GIg4mLk4+OkI2Hh4SFlZmWmJeZlpqeop2anKKkoaCdn5qfoKGgpqGgoKCjo6KlqKmrramqpqOmpaCloKaopqWnqKapqKOnppmcpKWioaChoaCcmJmfoKGkpKKenpagm5qioqChn6CiqKCcn6GloaCmo6KfpKGspp6foaGkrKqnrKivq6e0sa6ur7WyrKqwq6mtrbWwrq6srreup6yqpKivsq+sq7Kvqqqpq6utqa6urrGxraqtqaunp6uoqauinaapqKilqKisqKilpKWop6iopqmsr6+oq6mhoqKlo6Opq6ymqKWjqKKhoKSdnZ+hoZ2bnZ+amZWcnKOqlG9zZm5yZF1dUFVPV09eZGRsaGJiWlpSVE9NQTo9Ojo4Ozk1MTYzMjg4Ozk5OTk7OTk8Oz0/Qz5APTk7Ojs8QD0+PDk5PEFBRUFGQTo9Oz9BQUJBRUI4PYqWlJOYmpaPiISNjpGSjIiIiI+JiZCRjoqKiJubmZygpaKlnqKjoZqeoZyanZ6bnKOop6ugoKOYoJ2XnKGjo6WjoqKkrKilqaCepqmnq6mkn6Kgoqahpq2mpp2fn5+fn5manJyhoKGkn6GbnZqcoJ6hn56eoKOZlpqYo6KipJ+ZnKGhoqCbmp6goaSgnaejqrGorqusqaSqqquorKalrKqws6+rq6mwq6appaWoq6ynpqevq6Wnq6upq6irqqqrrailqKOmpaesqayoopykoaOmo6qpqKano6SnqKanqKepqKupoaKoo5yepqWjqKino6WlpqmgpJ6inpeYnZ+doqKlnpiUlZ6go5d1d2t2d2FfXFVZUVVWW2Necl9oX2NTUVlUSD48PTg7OTo4NTM3MzM0Nzo4OT05Ozo5PDxBQEM9PT44Ozw9PEA/Qz86ODo+P0NAREE6Oz48QD9DQ0VDOTyCmJmenZ2alZKKiZGRl5GQh4SJgoGNj4+Sj42cnZ+hpKmlqaeorK2moqKfmKSmo6Stsa6yp6asm56em5qjp6Cfo5+foq+rqqyoqKuwqaipqKGfoKeprbCyr6yjoqahqaWepKOipqClpKKlo56doJ6fpaKinp+imJWemp6fpKGblZigoZ2enJudnZuZmZWen6Oonp2iqKGaoaOmoqSoqaqoq7CxqKWlp6eopKWpqaqnoqWmqKadnqWloqClpaOlpqCjpaOjpaelqamqpKekpqKmp6SrqaenpKGlqKynpqWlo6OopJWdo5+bnaCjqaeopqGjo6mooKiioJyVkZqfoKGmopuXkpCamqCVfHdvfXlmW1tgX1pcVlxoZG9jbmloYl5QUEA/Ozo4OTg8OzYzNDMzMzc5OTs8OTs7OT49QkBAPTs9ODw9QD08PENBPjo4PT9EP0M+Ojk/PEI/P0FEQjk6gJ6kp6Kem5+gmY+ZnaCWloqGj4iEi4qTl5SRo6Wnqq6trLOys7S4t62pqqevtLKxqq6usbKusa2lq7OssbGpq6+rq6y2sLSwq7GysaOfoqqpp663trS0trOvrKuuq7awqbKxra6npp6io6ObnZyXoqiloZ+eo5ueoZqWnaScm5aZoqefoJ+joJuUlpmWl5qfoJmVnqKZmJ2dpZ2gpKeqqaiqraylqaSlqaeqqaqsp6SkpKOimZmhnpqaoaCfpaWYnqSmpKqooqelpaGqp6mnp6ejqKWmpaGkqKesoqekoaalpaOVl52Ym5mVo6elpaSfnZ2lo6Kqo5+amZiXnJyaoaGakJOTl5ibjX93cnZ4aWJbX15cYllgZG5ta25hX2RgUE9BQDs7OTs4Ojk2MTQzNjQ3Nzc6PTo8Ozk9PUI/Pj89PDo/OTo7PD5BRUA9OTtAQT5DPDs5PzlAQEBAQkM7OXuao6OcoJ2dop2Zn6KioJibmJaYkpSQm5qWl7S0rrW4s7S4tre0uLm3tbm4ub28uKqLnLK4vLS9urW7uru4s7q/uLe5u7G3r6iusq2inJ+qsri8vL27ur+0r7GztbS3t6+1tLWysKikop+gl5Wal6SqpqahpKOkq6WlmKGko52goaKooaOgpaGck5mYmJmco56cmpudl5uZlqWam5+hqKmpqKuvr66pqKmrrKytq6irp6WjoJyfo6Ojn6Cipammmpyip6Spn6GjoqKgpaanpqSooJ+ipKGjoqiop6OloKGopqalo5mbmJuTj6GknqKfmJiVoJuhpaCfm5udnJuamZugmo2YmZiTkYaAdnh5eGNbUllUX19hbGh1a3BnaWliWVNMQDw6Ozg5Nzk3NTU2Mjg1Njc3Ojw7Ozs7QD4/QD0+Pjk6PDk2Nz47QkZCPDg7P0NDRDw+OT43PkFCP0ZDOzhwkpqblJ6bm52Vl52doqajopaXnpaXl6GblJi+t7G4uba3t7i7l5S2vbu9vcDFtaK7mKC3v7+6wcm0nbu2sra/xcGooLazurGqrrSxsLG0tLa8vL68vL3Guri3ur20r7Wxsbq4t7Kzsqqmpp+YpKSnqKSupKurtbWus6CnqqynqqmlpqCnoKGmoZOWmJ2foqSjnZ6coaChnZekmpmdoKaqqqqtrq2tsLGrrK2sqamrrqimpaalpqSkpqaeo6eppKGcoKKjpqCio5+jpJ2foqWgpJyboZ6fo6GhpaSlqaOkpaKkp6ehn52elpOcoJiZko+MjJeWn5uWnJqdnJqTlpSUmJOQmp2YiouHgIB8gnhhXllTYWhgZnNvc2l0ZGlkYltMSz46ODg5ODg5NzM0NTI1NDY2OTw8Oz08P0E/QEA9Pj44OTs4Njc/OUJFQzw7PD5DREM9QDs9Nz1DQ0BFQjw3Z4yRk4qalZiblZWYm6Knq6aVl5iQlZmhnpeXvrWztLu6ubi5woeYt6u4u8DCxbOjw6e4s72/tMTHvbS7uL62wMTErqCworW2tb2+wcPGw8O5vb/AwL2/xL28ur2+tKeqmLHAvbi1ucCzr6+qqqitp6ekr6eqtLyxtLWor7Gwr6yqoqajrJ+fpquXmqifpaWfoJydoKuwsKyiq5yYm6Cor7Kys6uorre1sq2tqaalqKulpaStqaShn6Cnnp6mqKmmnp+anqGlpqmcnaObl6KmmpuanZ+cmqGcmZ2eoKijn6GfnaWioKOioZSZmpmTj4qLhI2Qk5uPjpiVm5eYkJORkomNl5iYk4uKi32AgIVwYGFeXmpiYm53dXZubFtiUVVcTUc7PDk3OTc5Ojc0NDQxNDM3Njg8Ozs8PEBAPUA/Pj8+Ojo5Ojc6Pz5FRUU8PT1AQkJCQUI7PDhAQ0NARD87NV+MjIaFlouUlZeYl5ifpqellpWWkZebn5ual7mxtrO5vLy5urWqsryxvsG0vMe5uLuuv6fGw7/KxsnIxcXJvMLHx7+xsae8vL7FxMbJx8XGu8TAxcbAua+9vMC+vrOrqoyzu760tbfCuq2vsLWqq6aqo62kp7G2q7WyrbOtqK6vp6awr7Ktqq+zpKu1qaeopKCgnqmyuL61tbWqqaausre4t7apq7i8ubexr66noqOop6SfqKOfnqCZoZydoqSnp6GelJuaoKGlnqChnpajnZSQlpiboZqflpORlpSin5qenJudoZ6kn56VnJiPkpOPjImTkJefiZCWkZuUmJGRlZaDjJWXlpKLjIh8f4N/amZoYWtsZm51cXJ1cWZeX1xSSUU/Ojo6Nzg0ODw3NjU0MjMzNjU3PDo7PDs9QD4/QD48PTk5OTs6PDw+QkRFPj49QENDQkREOzo4QUJCQUNAOTJbk4iEjZGKi5GRlZCSmp2fnJOSmJSdnZqXmpW2sbm1tb6+tri1uLO8vMTEusPHwb+0s8XFxr/CzcfLzszLx8HDxsfIysXExcO7vLzBxcHFxb/DwsbFwLGTvrq/w8K2trqptLO0qauzu7uxn5uxr6ykrK60p6qpqKqtrKmlpZ6pr6uyu7q4u7e5t7O5uLOurLO0qrC1ub3Bur6+vL60urm4u7qysbS8u7q7s7Oyp6Smq6uioaCdmpudmpyXmpuenJygnZaclpuZnZ6io52UnJCNiY6OkZ6bnJWNh5KLmJiWmpybmJybnp6cmp6UjpiYmpSRmZeeoZWYmpKXlJWRlJqYk4+TnZaSi5F+enx/dGtrbmRvbGhxeG95aWlhXGdhUUZEQTw5OTc2NDQ6ODQ2NTMzMjY1Nj05OTs7PT47Pj49Oz05OTs7Oz89QUNBQkFAPEBDQ0NFQjs4OUQ/P0BCPzsyV5uQkZCQh4WSjo2IjZCTlZGPjZSUm5STlpqRs7e4uLi+u7C1sri2tbbAw8G+w8LAvru+u7u8xMzEzNDLxsa/xcfLyNTLysjGv7u7vsS+xcjGxsTEw7i0wLe0vMHCucK3t7/Au66lrre8t62co7ewpq20tayupaWjqKSgoKWZqrOyvsG+urm6uLW0srG0tLO6wL7Av769u7u9vsDCt7a3tru7sru+ubi3u7a3tKyoqamrpqijnpOampyYkZKZl5GRmJqXnpiWk5acm5+elJOJiX6GiIuWlJiZkYmVkZeWlZmbmpaYl5idnpyhmJWZmZyYl5ybn56jnJ6WmJeTl5yZmZyUlp2UlpOJdnl6e3Zua2hndVpmcndzeGZnXWRbUlhJRj87Nzg4NzYxNjk3NDQzMzM2NDY7ODo8Oz08OD0+PDo7PDs9Ozs+PkRBQURCQEBBQkNDREM9OTlCQD8/QD89MkyWmpaSk4yKmJCKi4yOkpKKiIaNkJiKj5CUl7O7tba/vb2xtrjBvby0uL/Bsbi3vsHFvbu8wsbJv8nOyMHEwcfKysbKxczIzcbIxb/DwMvNz8nGw8PEwsS+uL7Bw8DEvsHPz87Gq6+2tLWroKe0s66ruLWzq6mjoq2prKatn6y1tL/Cvrm4vbawrausr7W0ur7Fv7u8urO5u7i5ubWtsLS9u7G/vLiytrmzubu0ra2orKyqqaeXnpualY2MmJSTi5WWlJyZl5WWmZKYn5mQiop+iYqKkY6Vl5OUn5mWkJSZmJmWmJOUm6GeoZiYmp2ZmZaenpibopqdnJuYmpuZlpeXlpyZlJyYfoB4eXV1ZWVpamhdam9teHdjYmBgXlhXRkU4Ojg6OTc5NDQ5NzY2NTEyMzM0Ozo9Pzs9PTo6PTs8Pjo7Pz48QkBDQkJFQj0/Q0NDQ0RFQDk6QkFBQj5CQTVCkJeUlZmSj5qQjpKRjZSVi4qHjI2UiImPkpq2u7S8xsHEwr3BxcLAtLO9v6ywr7rDysPCvs3IxbfByMW/wcLIy8rCwsTJzM3Pz8zDx8bIyMjHycfFycfIx7/Fx8TEx8jK0s/SzLy4trS4uMG+vrq9ury6vKytpqm7urm3wLK1uLLAxrq3t8Gzsa2tqau1s7u2w7a2vbWxt762s7e4sLW2v7uwvbq0q7CxsbO8urOzrqutq62xnaOjoJqQjpiXlZCclpaYlpWSnJmTm5+clpGUjpWQiYyQlZOUm56YmZKSnJedlJmSk5aZmJ2VnJ6do5yVnZ+TnKKcnKCfnaOemJSVl5ebmpmgkH99cXRxb2JhZ3VnaWl0bXhsXWRbVWBZTEhDNjw5OTg4OjUzOjY2NDQxMzUyNTs6PD47Ozw9PDs8PTw7PD49P0E/RUFCQ0M+QEFARUVERUE7Nz5DQkI+Q0I4O4+akZaalJKUjZCUlI6VlI6Pi4yJk4uIkJObt8C6xsXEw8zCwcS9vrWvt7uvr7O6wMfFxMHMy8W2ucDCwsTHytHLwsPExsnFzdDOx8zJwsHGwcvLx8bMyc3FxsbDxsXJzdDNz8zHxMDDwsnNx8XBxMfBu760sbCwwb6/wca/vri3w8K6urbAvrWyrKmvsri+tMC0tLi0t7nEua+8vrm+v8K/tbq2q6qsrq+wt768trSura2utaSlqKimmpycnZyeopydmZOQkp2VmKCdmJiVmZmZl46MlH2QkJefmZmYk5GToI6Nko+VjpCUlaKdnKSem56elpyjoKGipKOkop6amZubnJ2enIN9cnx4cGdgamp2bGlldG5zYlxiVFdUU01HOjc7OTk3Nzo3NDg3ODQ1MjM0MjU7Ojk+Oj08Pz04Oz05OTk9PEBBQEVCQUJBQT9AP0RFREVAPDo+QkNCQENBOjSAoZeUmZiVkImUk5aTiZGMlJGOiJaKi5CXnMXLw8O8wMPHwbm9vbu4tre3rrK3uLzAwsDCx8bHurzAwsXHyMbSycHDxL+/vsTLyMrLyLy7yMfJzcjDyMnJxsXDwsHCx8fJysfMyMfIzcbLz8W3wMDAwLu7vbWzs7+/ub/DucC3u8G8uri7ub27srCvsKy5wri9ube1t7q9xb24xsjCwcLGwr28tamurrCwr7O6t7m2sK+tr7OppquprqannqSlo6OjoqCblZiekZecl5GRlZeZlZmRlJiSlYyYo5qcnp2FiZ+TfJKWlZKUlJennaCipJ+en56foaGkoqKjoaOinJ2fnqOhppl5enl/cm9mZWdjamRham1ubl5YXFZVTlBKRjk5Ozk3Njc3NjM3ODk1NjEzNTI3PDs8QDs/PDw6ODo8OTk4Pj1APz9GP0JBQz89QT5ARENDQTw5PENBQ0RBQDozbKKdlZedlo+PmJiZmIiSjZGVkI+Vjo6TlpbKy7u5urnBu7q3vsG8vLu5sa61uri4u8S6vsC+vru8wMXCxsK+xsG5u8O6uLm8vsHGwca6ucnJw8XEwMTBwsHEwcO+vcLAwMHCy8PGzMvFyNHCsL69uLq7vL63tLC5vrO8vrG5tbi7tryztbm2uba5t7GtusG6vMG/t77Ev8bDw8fHwrvAwr/Cv7iys7O1tLGut7S3tbSxrK2xp6Wlp7CtqJ+nq6ajqKWmpqCgn5SYmZSRkZWUl5OYl5qhnZ6hnKGdoaWglpSbkZeXmJqTnpmZqaSlpKWdoqCanqCkoqOcoqGjoJ6cnp6ppaiVfXuDeG5mYWRiYWJjY2piZmNaWVlcWVFORT07OTo7Nzc5OTY0OTk6NTMxNDUyNzo7OkA9Pzw8OTc3Ozo5Ojw+QD8+RDxCQURAPz49QkRCQkI+OjlCP0FCPT44NVmfnJiTmZaRlZiYmpeQkZCQk5GTlJKSkpSUxce4tbq5wrm5vMPFwri7ubGxtry6tbnAu7u5tre0tLW/u72/ub26urS/uLW3s6+7vLfAt73Cv8G7v8G8u8W+u8HEwL6+uLzBwcu+vcnEwMDKwLHBv7u4u765tbe0uLy0vbi1tLCzvLG3tri/tr25vb65t7q+u7/Axb29y8PGw8TAw762ubq2v7i7v7y4trOyq7CwsrWzs66sq6emnqeurauiqKumpqqjp6iqo5+Ym52bmpicnJiXnJuhpZ2anqGhoKGmoJqbnJiboJ+dnJ+coKiho6SknaKfmqKgop+el6Shop+dmpieqKWhi3x5h31xY2BiYmdqZmZpZWldVlVTWU9TS0U4PzY7Ojc3OTs2NTo7PDYzMTM0MTc7OTg/PT47PDs3Njk5ODo7PUA/PkA9PT9CPjxAQUNDQT9DPTo2PEBBQDw9ODdJlJibj5OUkZWYlZGWkpWRkJGUlZSTkpKYlcHCwLq8ub62uL7EwMKxvbqytLO4vLW3vMC8vbS0sbC1t7W6wbi+uL+8vbe1t7CuuLa5v7vAv7fBvLvDtrrIuLa5u725ura7xcXKvbnFwL+8wb64xr3BwLzFuLa3tLi2tru7uLa0t7q1tLi8vbm/ucPAwLu5vLu+vcjEvcfEw7rAvb62sra4srm0usLCureysaysq62yr7Kur6ijpJ6rrKyqpKakpKiqoqemraihoaGmn6Oiop6bnKKfoKOdnJuhn6KgpKCem5eZn6GdnZ6eoaWkoaKioZ6ho5yinqCZnZijn52eoJqZoKKmnYR6g4B4cG1lZWZvaWVrZ1hYTktLS1JJTEhDOT44PTs2Ojs5Njc8ODk4NjA0MzE3OTk7Pz0+Ojw6ODg5PDg6Ozs7PD1BPj09Q0E8P0NDREA/Pzw6Nz5CREE/QDg4P4mYmoyMkI+Tl5WMkpCakpGXmJaUlJKQmpTDvsbBwby8uLi6v7a8scK2tLyxtLa4s7q9v728sq2vrLGwt7y2u7zAxLm3t7e1urm6u8C9w8C6xMK+x7i5uK23tbi6tLezu8XGy8G7xsDAv728v8nDxMW+xri1srK9uLi4vrq6uby6urS3u7q5v7zEwL+5uri/ubvFxr3Fw8Kyur27sa+2uLO3s7q+wLm2rLGrrqmqqa2qqq6mpKWnrq2ppaOio6GkpaWmoqato6Klo5+ho6Gcmpyhn6CloaCenZygnaWgnpeVmZ2fn52gn6KmpaCknpybn6Ofn5mcmZ2epJyWnKOcnqGcppZ+f4Z8a25wZ3Brc2VibV9cVEhLSkRKQkNHPzk7OD08Nzs7OTc4Ozc8PDYyNzUxNjk8PD08QTs8Ojs6OT45Ojs9PUA+RD89PkRAPz9BRkQ/Pzw9OTc/QUNCQEI5Ojl3nJiLh4uQkpOWjY+TmpOQnZiSkY6QjpiSvbfHvsO+vbu+vL22uri9ure9s7OwuLi1uby8wLeqraSusLe7s72/u8S3tri2t7+/xLzCxcXHx8rJxs/CwbiutbW8vri7sr7ExMrFwcnDwr+/vr3HzMfHxMe9tbW2wb26u7/CusDCv7y2t729vcHBwL+8ube8wru3v8W7wr++tbe8vK+vt7awtLO6ubq7r6mtq62rrKaqoqeuqKWqra2vp6Sgn6ajnqKjqKOjq6Oiop6dm5ublJaZnJyfpZ6fnpmYnpejoJyXmZqZmqOjop6jo6egpqCbnaCjnp2WoJmcoKCblJegn6WcmKKQgYaBcWVsaW50bndjZ2JcY1FLVEhFRUNHQzw7OTg9Ojc6PTo4OTs3PD01MzY1MDY4OTo8O0A9PDo+PDk+OTk9Pjs/PkM8Pz5APz0/P0ZEQEE/Pjo3P0BDQz9BPTo4ZqGYj4uNlZKVlY6PlpmVl5uVjoyMjY+bk7m2wbS/vLm8w8C+wLq1trKywLmvsry8sLe7tru8q6qjsLm9vrO8vrzFuLK4ub3HycrDx8jGxsnIzM7RzMrFtbrAw8i/v7W/wL/Gxr/LxsO/wbzAw8zKx8XGwbm9vMS/wL/CyL3Hx8XFvLrEv7vBv7rAvLu7wMS9t7nCub69t7S2uLqur7WxsLCytre0t6yurKqsrKuoq6Gms6qlra+trKippaOkp5+io6Onoaeiop6cnZyamYyQlpeZnaKZnpuVkp2UoaCdmZ6fmJimpqKfoqKmoqeloqCko6GbnaCbnKKfl5WVnp6kmpafiYGDgXRvbGx0a2xuX2JeYWFOSE0/RUA/REM7Ozo6Ozo4Ozw6OTw+OTo+NDQ1NTE5OTo5PDtAPD89PTw4PDs6PDs7Pz5DPkI+QD89Pz9FRUJBQj87Nj9CRUQ9QUE6OlmfmJOSlZqVmpOQlpeclZuZlpSVkZKTnZm2uLaxuru6vsG5uca7trWypb69tLbBv66zvbS4wbGwsbS8w7y6ur68xL+3vb+9x8zGx8nGxr/ExMrIzMzNy8bCw8vOwry5vbq5wMO/yMbEwcG/xcDKycPDw8O5w769ub+8wsbCyc7Hxr66xr26v7m3wLm5vsDCvrW0vLi2u7CvsrK1r7Cvrqyus7CzsrirsbKxqrCrq6yrrLatqKyusqarrKmpoaWgpaakrKSmoaChnqGgnaCMlJeTm5+mmZ6emZOYnZ+gnp2eopuYp62ooqSgoKKqpqmhqKGlm6CgnZ2jn5SYmKKdp6Gfm4J7eod6bW13e19wY1tdX15TST5DRUlCQz5DOz42OTo7Ozs7Ozs7PT05PTU2NjIxODo5Ozs6QTs/PDw+Nzs8Ozw9PTw9Pz5BQUE+PkFCQUVDQkRAPDY+Q0RFPkJEPztTmZuZmJ6dmqCalpyZn5KdlZ2boJWWlJqYur20sLu8wcTCv8XGura5sqO7vbS3xLuwtbq2ucS4tLy2ur3BvLu/tr/Bv7y/usDLwsfIwL+8vL/FwsfLyMHDwMDJysLAu7uwtLu9wMXGxcW/wMK/y8fCwMjAusK7urO6usG+wMrOysS9tby8ub+5ubW1s7/Avre0s7S4rbeqr7CwsrGvq6+nr7ausrG5rra2uLSzsLGttrS6sa6srranrLKsraSjoaenqLKrqqWkp6elpaCml5ujn6SmraKeo6KanaWiop+foaWenrC0sKSlnp+kqaevp6mgq6CiopqipJ2anqGmp6+psZWCe32Cem1zeHNncF1bXl1ZUUVEQ01JQUU9Rzo6NTk7Ojw8Ojs7Oz0/Oj01NDUxMjc4ODs8O0I8Pz46OzY6PTo7Pj0/QD87QUFBPj4/QkBBQkJFPjo1OkFCST9AQkA7TJqdnZ6fnZienZmampySoJWbnp+blZGRlsW+urbDvMbCvr/Ixbe1uLe2ubu0r7e2srWzt7m8u7a7u726w7u3vbe5wLu6uLi1xcHDw7u5s7S6wb2/x8C5wLy+xcS9vrmysK64t7/Dx8PEvb2/v8PDvr/HvLy/tLSutbW8vr/OzcvCt7K4uLi9ubuxtrLIwLu2tLGwt6yzqbCtrbO3r6uuqrG1r7Gvt7O6usC/tre2sru6wLWyrbO3rLC6r7KloqWrrK+5s7KosK+xr6qiqKGkraitrLOun6inpqWmq6Sknqaqo6ayuLOrpZyfp6anrquqpbClpaWbpKOYn6exrLW4sLKOhHl/fHZsdXpwbmlcX19ZU1BBRUlHS0BEQ0g8PTY7OTk8Ozo6Ozo9Pzw9NTU2MTM2OTg8QT5AOz1AOzs5PD04Oj08QD46Oj49Pj09PkBCQkJBRD03NDU9REc9Q0I/PEWUnqCgoJyXmpiYlZmdmZ2fmp2bnJaRj5LDwMK9wrzEvLy7xbu3s7e2tru7s6CWtayvsbS0tLa4ucHAt725uLm2tb+ztLK4sbvBwMO3t62wtbi4uMK6tLu3u77Au7u8rq+us7K5wcLEw768v7u6uLbBwrW/urWur62wvcC5z8rJw7GvtbS0vbq+ubq7ysO7uravsL2xuK+ys7C3vbaur66wt7CsrLK2vbzEwrq9t7bAv8G3tbC2srGzurGxr6err6u2v7e1qbqztbmxp6uop7ausrG1uaisrK+qr7CqqKessayytr20saykqKuoqKusq6i2qaaonqadmKOuvLG7wbSmiYF8gnpzdnZ3bnFgX2VcWlVKPD8/RkY9RkNDOTo1Ozk5Pjw8Ojo8Pj4+Pjg4MzE1Nzg5Pj9BPzs6Pz08Oz09OTs8OTs6Nzs+PT1DQT8/QUJEQkE8ODU4PUNGPUREPzw/iZ2en52Xl5WUk5aZnpubmpuYlJ2Uio6Owb7Dwr6+vrm2usCxtbGzt7fCtbOrrbOoqa61r620trnDv7e6t7a2srTAtrK0uLO6wMHDubeysrK0sre+urO1sry6vLa6vrK0tLSwuL7DxsTAvb+5s6+yvLquu7Szpquorbq+uMvCv76sq7Cvs7q3ub67wMXBu7y3sLXEtb+0uLu0u8PCs7a2sbisqaWrsr23v7+7u7exvL28trGvq6uprbOvsLCrsLSpuMC2sqm0tbC3tq2spqu7s660uMKwsbG1sbK1saywsri4ubi+tLGzrqyxramvrqqyuK6trainoZ6ptr+4ur+wlol9gHxxdHd0dnJsXmJgW11PSEE/PUhDRk1EQDc3NTs6OT48PDk4PT47PT86ODMyNTc2OD8/Qj86OD4+PTw5PDk7Ozo8Ozs6PEA+QkI9QEE/QkI/PDs3OjxBRD5CQz8+QYqgm6GdlJiVlZKYmpyWm5WalY2bj4SIhru0vb+7vLm3s7y8rLOytLS2wLXAr7Kzqqqxt62pubO3wL27vLi2uraxwLq3ubi5u8HBxMO7u7a0tLC2ura0sqy8ubi1uMG6uLOxrLe8wcfDv7m6ta6lrLOwprCtqJ6gn6WttrXCt7a0pairqLC2s7K6tbu7u7W4trC1xLK+vL+8ubrFybq9vraxp6SeoamxrrW5trKxq7S3trGopp6gmaWmpKynq6y2qa+6sa2kpq2lq7GrrKmtuLawsrjBtrGxtbGvu7ayt7W1sry1urKwsbKutLKqrq2nuLWyta2uqqiosrq9wLa0qY6Ce393b3tvdXJuY1xmWFxdUk5NQT9KQkBKSUA2NjU7Nzg+Ojs4Nz4+PDs/OjkzMjc1NzU8PD48PDg+Pjw8OTk5Ozs7Pjs7OTw+P0E9PEJAPz9CQD47Njc6QERBQ0E/QUKJoJ2loJSWmJiVnqCcl5uYmZGMmYmDhoS1r7S7u7S1sLG2uq6wtLOvtbq1urC1s7GttrqurLyyuLm3u7+9ub7AtL+7vLq4vsK8wsrHvsC4ubaytLaztK+su7q4trnAw7aurqqytry9ubaysa2tn6Snp52jpp2WmZman6muuayrq5+lqKSrrq6nr6yvsbGtsa6usLmwtLy+uLm4x8W8vLu4qaKcmJufp6assq6zqaapqq6popqXl5GcmpijnqKir6ekrKaompqemqGnp6anqa+2squ0trCqsK+xqbm2sbWxrqy3s7avrquuq7S1ra+rq7GtsbKoraurs7W3ur2wq6GLeoJ5cnZzbXVpa11balRdXE9NSERGTEJGTUY4NjY1OjY6Pjg7OTc8PTo7PTo5MjM2Nzc3Pjs9Pjo6Pz48PDw6Ojs5Oz47PTk8Pj1CPDtAP0A/QT8+OjU1OkBFQkRBQEJBiJ+ipqGYm56dmqWpmJudmpmUjJmHhoeGrq2uuLmxsqiur7iyq7CwqrK1ubm9tbK4tLm6tbm7tbWztbu8wLu+wLS/ubm6sbrDvMLKxb+7v7+5tLSzsbGusLm5try4u7+ysrKusa65r6qrrayjqKGdnZ6XmKGVkpWXkJifqK6ko6Sgoqeio6mpoaanpaqtp6ynqKesq6yyu7SztLm6trK2ramgmpaWm52fq6yrr6Ojo6GpoJuTjo+Qk5KSmZaanaSloJ+ep5iVkpSYnqSjoaWqrK2iqaqppKmtrqW0sa6xrauprq+wraWmqqSos66trKmmpqmrpqqnq7Ksr7Oxq6mWgX+Bd3J4aHRzbmRUYGNXXFFOTEhASFFETUM9ODg3NTo3PD46Ozw4OTw7Ozw7ODI0ODk3ODs7PDs4PD0+Oz08Ojk8Ojs9PTw6OkA9PDw7QD5CQEE/Pjk1ODs8RkFDRD9BQYijpqKjnqCfp6Coqpufm5yZmI6Xi42PjKqpqLGvsK2lp6ayr6mmq6CvsLu1vby3wMG+vLy8ua6tr7Kyurq3t7W1vLSvtKu2urjAxMG7try9uLKts7CvrK63trO0ta+qpJ6bnJyeqKifoKipn6GnlpuXl4+dk4+Qlo6Xm6SooKCioqKlpZ2jo6CepaCkrKSmqKSio6OrrLOuqa6urqeqraisoZyamJmYm6moqquepaKbo5yVkIyPj4+TkJaVlpifnp6amaaXk4+Slp2ioKWjpqSnoKKko6Ghq6uksq2qrKyno6yuraufoaKkpK+srKmmo6KqpKqqpKmrpqmsq6agiHiDfHZ/eWJ3bG5cUWhUUE5HT0xMQk9RQD47PjM5OjU7OT07Ojk9OTk8Ozw8OzkzNjk5Njo7Pz06ODs6Pjw6PDs5Oz07PDw9PjxAPT88ODtAQEE/Pz45NDk8N0FDQkQ9QEOOqqSjoqGinaulpqimoZ6dmZ2PmJWTkJWnpKGmqKmlpKChp6uhnKKbp6u1sry9wMLCwL7AuLSnpayqqLWysbCur7KnprCkr661wbq1t7K3trK0q7K0rqqrr7Cys66lnpKYlI+ZoJ+ioJykpZ+eqJSblpeMl5GNkJeTmJ2iqp+fn6Cjpaicn6ChnKKfo6innKehoKSfrKisrKCpq6agpKimrKOdnp2Zl5qrpqqxo6WnnqCclZOQj5GQmJCWlZiXn5ibmZujmZeUlpqdoJ2nqKWgo6Kho56doKmqpa6upqipoaKqrqqnoaCio6msq6eppqShqaKlqaalpKKmpKijkn18gHV1fW1re2RoVVFjTUlIR05STkpORztEQD0yPzg1OTs+Ozk5Ozg6PDs7Ozk5NDg7ODc7Oz48Ojk8Oj07Ozw9OTw8PD49PUE+QEJAPTc6P0FCQEA/ODU1PDpAQ0BEPkFGlq6koqWeo6KpqKipqqWmnp2imJiZmZWbop6bnqOioKOgoZqgmJiXlqGorK62t7q5ure3u66ooKGpoaCtq6qmqaSpo6SupaystLy3rLKxr7Gtta+vs7Wqp62so5yZlI6SlpeZmZygo6KbnaWemqSXl5eWkJKRkZOal5ugpKqeoaGepqeqop+gp5+dn6SnqZ6jpp+qnaqtqq6nqLClo6Smp6ymoaShm5ier6musqulqqqgmpiYmJWTlpqTlZWZlpqXl5ignpycl5uhmp6ao6eln6GioqOdm6Gmp6aoraOppZ6kp6mkpaWhpaSsrKmmq6eioKSjpKenoaCgpaKmoIl7gH12eHxkeHlgYlJVX0hJSUtTVElSUEw4PkI2Nz02NTs6PDw5Ozs4Ojw9Ojs4NjU3OjY5Pj0+PDk5PTk9PTw+PTs7PDo+PTw/Pz9APT03Oj5AQEA/Pzg2NT08PkFCRkBAR6CupKaroaOqrK6tp6ypqKCipp6bm56aoJyalZmfn5uen56WlJOXk5OcnqOorq2sq6uvqq+pn5eepZ6epaakoKKfpqCirqusrbWytqavtKupqrSxsLC4raehnJ2alJiampGOkZWRjI+OlJminJejmZqXmJmUmZiWnZufpaapoKajnqeurqumorGjmqSmpqqioaqiqaSosquxsqu5qKarp6urqaysp6Cgo7GusrG0qbGvopmcnZ6hmZubmpiZm5SVm5aZnKWhoJqjoZqdmZ+kop6gn6KmnZulpqWkpaijp6OepqOinqaloqWlqKykpq2noJ2dn56gpaGenqWgppmBe4F8dXZzaIJsZVtTWllNUUpOTlVMUkxBNz5CNzg9NzY6PDw9Ojw5ODo7PDo7OTc2Oj01OTw7QD03ODs3PTs9PT06Ozw4Pj09QD5BPj4+ODg8P0BAPT83NTg9Pj1BQEZAQUihqqCrq6GkqquwramtqaelpaWkoKGfnqWXl5SYmZ6YnJ2blo+VmZKSnJihnaqip6Cep6Gln5ySnKKbn6Gjnp2gn6Ogoq+vrK+xrLanrbGtpqawrq2ssKign6Kgl5GUnKGcmZiSk5+doqSbnpuWn5qfl5uinqWhnqSfpKitraisqKSstLe2sKe0rKKtraOvpaSmoamorrWzsr23vrCssa6tqaq0sbCoq6iytbezuKyxtKOgnaWgrKGhoqCgmpiWlZ+bm5ikoaCepKGgnpqcpaCfnZyhqJ+fp6meoaOkoKagnqehn5ymo5+ipaOooKmrpZ+dnZudmqainpyjnqeQgYJ/fHh1aXd1XWxaUmBIUVVIRlVWSkJNRz1KSDhFPDY3Oz49PDo8OTg6Ojs6PDk2Njo8Nzs+PT8+OTc9OT47PEA8OkA6OkA/O0A+QUA9PDk3Oj5APzo+NzU4PT0/QUBEQEJGnKueqamipamprqimqqWmp6aoqqGlpKOmkpOVmJacmpqcmpWTmZuOk56ZqJ2unqeenKGdnpqakpmenKKioKCdop+fnp+prKesqaq0q6utq6Wlq6iqrKqloJ6ZkpKUmJmXlpaMiIuOlZ2dnZ2elp6apqCgqKWxqqeuo6uttrC0srGutri9wLqttbSwt7CutKmmpKWsqbmztbvDvMPBtrq2q6+xube8r7OwtcG8t72zs7Whq6KpqLKpqqinqJqZnZqqp5+Zp6Cfn6eopaSenaqiop6bn6igpKetmZ+jnp6nnqCmnpycoqGbo6KhnZympaWkn6KZnJukn6CboJyjiYWEfnZxbWl2bWhtXFhbQlZNSkdNR0JGTTw+TD00PDk2Oj0/PDs6Ojg4PDk6Ozs8NTQ6PDg5Pj4/Pjg4Pzk8Oz0/Oz1BPTo/PjxAPj8+Pz08Njs/QT07Pzg1ODw8QERCREFCQ5WqoKapo6mqqKmjoamgpqinrK6lqaWpqpSSl5mUmpqanJiYmZyamJqqoLGit6OwpqCenZ2XmJaZnpucpJ+fnaSdmp2cpaKko6Kqr6ynqaOgoayurqqrp6CenqKjnp+empyclJOVlJ6emJSGnpqhm6ukq7KwubKysbKxur28vLm2uMO+v8K/trq6wMS5vbusr6exrbHCtrjCxsDIysDKv7C5ub25wr64tLvGxLzCu7ezqbKtqrO0r7Ouqq6jnauntrGsoq+loKOvsa2wpKSvo6GgmqGnoaSqqpmdoJmao6CmqKGcnqKemaSenpiYo6OhpZ6mmZuipJ6fm5ubnIeGgXt0cmtrdXJwaFdbUUVUSERJT0g+RUEzRUg5NTs9Njs8Pjw8Ojo4OTw4OTs4Ojo4Ozw3Oz49Pj02OEA5Ozs9QDw9QDk3PD07Pj0+PUI+Pjc6QUA+PD45NTg9Oz1DQEFDQkGRqqGlqqelqqimn6KnnKasp7Gyq62jqayVkpWalJecoqGbnqCinJ+psqu7sr+rr6ylnqChnZyYm5+gm6Cfn5elnZWbm5+anpyepaannaCgq7Gup6Sko6CepaulnpeclJGZnZiUjIqGiIZ5bYigpKKrrLS8tsO+vrO7wcPCxcC/wsbGxcPIwsDFyM3QyMvDsre1vrK+xbu+zM3FzMzM0se+v8DCvcfGwrfDycjCwMW+ubS5urW7t7C1sqq6sa67t766uqq3rauquLq0vK6uuaOmo56npaKjqaaam5+Ymp2nqqegoaGkmJSjlpSakZydn6Sep5+en6KdmJmUmJSIhH16cmtkaG94amVaW0ZKTEREU0xEQkQ3Oj87NTQ5OTc5Pj87PDs7OD48Njo9OTw9OTw9Ojs9Pj4+NztBOj45PT45PT44Nzs6Ojs/Pz1CPj83OkFAPTw9ODY2PDo8QT9BQUE+kqugp66ooqulpKKipaGlqquwsq2upKmmlJWVmpaUm6SmnaGqp6KrrLy8v8PBs7K4p6Ghq6qinZ6hop6cm6CSn5+Qlp+ZkpqWnZuZo6Gvs6mhmp2dn5+al5iXkoyPlpeTjo2Qi4KDgndzcW5wj6atrrS5xbvNx8u/wszOzczIydHMzczHycXGzNDS1c7Tyb3Av8O7xsXIxdLTzNPQ09PMysLFxsbKx86/ydDLxsTGxMG7w8G+vr61vbOtv7/Cw8bEx8Suv7iyuLzEwcG6vLy1rqenrqigoqmlmpagmpmdqKupo6SknpePm4uQmYmVmJugn6OdnZeempOTi5WPhYB5dHNlYmdyb2ZeWllDTkxDRVBJREJANTU1ODlCPTY4OkE+Ozs+PDk+PTc6PTk6PDg8PDw7Pz8+PD0+Qzw7OkA9Ojs6Ojg4ODk7QT48QD8+ODtBQTs7Pjc4Njo8PkI+Q0FAPpOvn6ivpqiro6KloKampKuoq62qrqKqo5Kcl5ebmJujrJ6frqalsarFxszOzb+wwqmlqK2tqqGdo5+cnZqpk5mhkI6gk42UkpeZpLGxq6SgnaCbmZeUk5SWkZCPjIeEg4iHg4CBgYB5cnJvbHmktrq5vsvB09LTyM3O0dPR0tHQ0dHNzs7Qxc7U1dfS183Gx8nMw8XKz8rT19HX0tTV09PIzMfNzcnSzM7TzcTHycrBxcvGyMjFvsKzs8jEy8rKzsXKv76/vMHHxMzMyMnAw7+tsLOonqKqo5qTnpyYnqaprKSlppaXipWFkZSHkpKSmZualpiQm5WQjIaRi396cnV1Z2NndmlkVldRRE1GQElRQj1CPDoyM0A8RDw3OTxCPTs9Pzs7Pj05Oj48Oz44Ojk5Oj86Pj1APkA8Pjs+Ozk9PTw5Njo6Pj08PEA/Pjk6QEE6OT44Ojo6Oz4+PEE/QT6QrKKiqaanqKSfop2qqKOso6OnpqyiqZ+To5iWn56dpK6bn7CrqKyxyc3U18/Gu8esrbS4rK6jnqSjn6CkrJuWqZaMlo2MjZemsK6lnZ6doaWhnpuVlJaUin13cGtlYmhxb3F7hYqAdnBucXRwhbPCvsXR0NfW1tLWzdTW19TT0dPU1NPP0sPQ09bX1dbSy8nO0cvGzdLK0tXW2dXX09bYztLJztHMztDM0s+/x8bKw8zMy87PxcbHtsDKv9LNy8/Fyci/w8PIzszP0M/MysjOuLe7qJ+lq6efmJ6jnp2qpa2pqKiSlYiQhIyRho2MiJOVmZCWjJiSj4aHjIR8d3N2b2NgZXJiXVJcSUpGQUVIST47QDg9NDU4NTo3Njo8QD07Pjw7OUA7OTo8Ozs8Nz09Ozo+Oz08Pjw/Ojo8Ozs5Oz89OTU7PD48PD0/Pz46O0BCOzk/OTg7PT0+PzxBQEQ8hqugnKegp6Oim6CbqaSlqaCfoaGmn6ifmKSim6mmoqarmqOwsamotdDU19rSx8bLtLbCxbK2qaKlpqGiq7WnmrGgmJ2MkKatq5yVmKGdm6Gin5ydm5WKd2ljYF9fX19eX2BeYmx1c3Fwb2xycXWSxMfG1NXW19fT1s/V1NrU1M/P1dTU0dLM0c7T19bT1dDP0tPRydPRyNDY19jR19LX2dXWzM7Pyc3Ry87Pv8XCx8XOzdHQ0cjLzMDKy8XUzsvOyMTJxsbIzMrT09HVz9LM0sG5xbKlqLWup5qorKWdsqiws6ysk4+TjoiLjoOPi4SQjpmNk4+Zj4+ChYx7enFzdG1hY2ltX1ZQX0pKQkZDUU0/PD40NDo9NTI3NTU8PEA8Ozw6OTpAOjg7Oj46PTg+Ojo8QD08OTs9Pzk6Pz07PTw9PTo2PD0/QD08PT0+OjxAQjs5PDc0Oj48Pz89RkFEPYKknKClnaWlo5mcnaSeo6OfnZ+doJqnnpyhqaCvrqqqrJ6mrrioq7fY1NXZ2dHO0MC8zMm3wK+nq6mjpLG2s6O2qqzDp6mpoZiWmJqbnaGemp2elH5yZWNiX19hYF9hYF9gYF9gZm1wcG5rb3J3d5vMwNLV09jY1tnR0tLXz9POy9PN1dTSys/M09bS0dbNz9XV0cbR1MrR1NXWztLQ2NjY18vIzcPJzszJy7/Iv8jJzc7Py9DNzsvOz8fLz9DKzsrCycbJzMrL0dLM09LRz9DKvci5sK27uLWqtrCtqLits7+7sZqPn5SRjo2IjpCFkY2ZjJGRlY6RgIWIeXZvcG5rYWRucGFXXFpJRkZETFdFO0A8MzM8PTg2ODU1Oz5APTk8PDg8Pjk8QDtAOj04Pjk4Oj88PTg7PkI6Oj08OkE9PTw6Nj09P0A9PDs9Pjg7QEE9Ojw4ODs+PD4+OkVCRT6Bn5mlp6Cfo6eam5+cl56eoZqdmpyappufo6eeuLa1ta2lra6+tLHA2dLX2tzXz83LxNPQwsKyq62urKazsrmrsrzGoqGclpSXm56fn52UlpeViWxeXl5hZGJgYGFhYGBhXl9fXl1ibXJvb3N0dnZ5pL7L1dHW1NPY1s7O1MvNzsXOytLSz8bOzc3UzM7TzcrX1dDM0dTLzNDR08rO0dXS1dXKwMrBxczCyMnCzMPFyMrKzsrNzNDN08vFyM/MyMfKxMfAxcnLzdDRxtDOzc3Mz8XHwLe5vcPDvcO5srO+sbzExLWqmKWimZaRlZaSi5SNmpGUlI+PlIKJhXhwcWtuaGBgcWhZWGhWTUdMSVBQQjtEPjs2Nzo4OTo1Nz09QTs6PD05PD05PT06Pjo8ODs9OTtAPD47Pj5BPDk9Pj1CPTs3NzY/PDw/PDw7PDw4O0FAPDo8OTs7Ozw9QTpFQUU+hJ6bqK2epKSqnJ6fmJKXm5+am56ZmaKVoamppcXDwb+7tbKxx8O5y9XW2drb2M3N0MnW1sXEuLK2qqSurLm5sbLErJaNjZiWkJOSkZaWlpCMfGViYmJgXV5hY2JgX2BgYWFgX11bXWdycXFyc3FtcnmkxtPPy9DP1NXJxcnJxsa/w8bPzsfFx83K0cjLzs3G0dLPzszUysfLzs/Hx8/Sy9DPxrrEvsbJvcLHyc7EwsfAx83Hw8vKy8/Hw8PPyMbBxcjDvsDHy8vMzsLKy8jHy9DExce7x8PIyMLPwL28v7HByse6vaqxsqelnaKdmJCakKSZl5mRlZiJj4J3bnRkbGBeZnFhW1dgR0hIR0lNVEc/Sj02NDM1NT08NDg9PT06Oz08OTo7OT89OTw7PDg6PDo6QD1APD09Pjw6Qz48Pz04ODk6QD4/Pjw7Ozs7ODo+Pzw7Ojc5PD49Oz49RkFDPYOgm6qupa6qq5qdoJeUjpedmpmgmpqcm6WzsazJzcrIxL69us3Nx9DV1tna29jQytDQ0tTKxbq+vrCot6u+ubizpZGOjpaQhoOEhIJ+hYV/dGBbXl5eYF5gY2RjX11dXl9gYF9bWlxha3Jyb29rbG9vfbjRyMnKz8vNxLrAw7u7urq+yMbCw8DDx8rJyMrHwcXMxsjLzcnEwsvJwsLL0MTLyL+5wbvFx72/xs/Lw7/Du8nGyLvIxsTKwL3By8bFxL7FvLy/w8TLxcW8wMnCxcfSxcDIv8rKxsjG0MPDxsOvxMvHxMq3v7y6tKmspaWYn5iso6GlmqOgm5R7dnN0ZmpbYW5tWltYUURMRkJHRExERlNANTQzMzQ/PDM6PDw7OTw8PDg7PTtBPTo8Ojs3Oz05Oz07PTs6OD4+PEI+Oz88OTk7Pz07QD48Ozk5OTk6Oz06PDo2OTw+PDs+O0NCRD5/pZypsqm0rrCdnp6YnImUm5man6Kfmp2ov7i8y8/RzMfCw8fNz8/N1tDW2djZ0M3Uzs/Qy8S4xsG2tbyxwLa6rZGMk5eHe4CFhoB2eHVycF9aW11gYWJjZGRlZGBcXF1dX15gW1laXGJvcm9raWxwb3OPxrzJxczAxsKxtrqysrOyscK8vLu5uMDBwcW+vbm9v7nEysXGwr3GwLi7xMm/wsm7t7u6xcO+vMHNwsa+vrXBvcO6vMa7wrmzvMXDwsK2v7W1vr+6y8O8tbrIur+9y8TBxcLGyMbIxtDGwszIssfKw87NwcXDwL2zt7CzqKioubGlrbCrrayUeXZ3amVoYGhvY1ZeWUpFSkZIS0FGQkVJQDk6NjQ4ODUzOzo7PDk8PDs5Ozk6QD46Ojw6Nzo7Nzo7Oz88OjxAPUA/PT8/Oz07O0A8Pj4+Ojk5ODk3ODo8PDw7OTo8Pjs7PjpAQEU+fqygrLWqt7SyoZ6fl5qNlJaan52mop2et8bCxMjO0svKysfNzs/SydHH1tXW2M7M0MjNyMrFvsrBsrW6t7q2r5GNiouFeYCGhoB+hHx0dWRcXF1eYGBiY2JiZWViXV1bXF5cXl1aW11daHNxbWdnbnByeZ29zMDDusG4rrCwp6qtrKe4tLe0s7KzurW9sbewta+yu8K8wcS8v7u1s7u+wLjHubS7tsDCvLi9xsHDvLWusra6vrTFt7u1q7i8vcC9sLq2r7a6ssW8tq+7v7S2tMW9vsPFwMPFxsjLxsDGxrvIy7/PysfDxsLDt8O+vba5vse/rLW6tbe2jnh0eGdnZWJrbl5WXmBGS0hISkZCQ0FFRT88OjU2NTYzMzs6Oz06Ozs6Oz44PEE9PDo7ODc5OTk7PDo+Ozk+Pz1APz5CQD1AOjo+Oz89PTk6Ojo4NTY7PT48PDo7OT49OT86PEBAPIi3pauzsby8sa2foJmUlJiXnqujr6qnpMbLzsjGyc7M0M3OycvJy8rLxtHP09HPyMrGysbEwL3PvbO4vbm3tpuOh4mJe3l+hoZ3eIJ9dGheXV1dX2BfYGRhXmNlY19fXFteXF1eWltbXV9scG5oZmpubnJ8pMe/uLi1sKusp56iqqeeq6yzramrqbOttrCyqa6mrLK8urbDubq6sau1ubu0wrqwv7G9vbu2vMi5w7etqqiwssC2uLyvsKexs7S7vKuttaautq66sbCqua+tu667uLu/v725wr/Hw8XBvMbByMu4xcfFv8fEw7rExsK7xsnMy7O5wry6sohydnZraWFibGhZWFdbQUxLTUlFQUM/RkE6OTo5OTU4NTQ6Ojk7PD07Ojs+ODtAPD05Ojc5Pjk7PDo4Ozs6Pj05QT0/QD88Pjo7PDo9PDw4OTg5NzY4PDw9Ozw6Ojs+PTs/Ozs+QDyKwKuouLe5w62zqZ2ZlJaZoZymsLWxt6bGztLMxMbBxdDIz8PEx8HGxsXFzMPKzMLEwcfAury7yre0u721tauRiZCQfHl+ioV6e4SBd25eXV1dXV9gX19kYmJjY2JgX15bW1paXVpaWVpdZW5vaGZnaWtucoGtubC1rqalp6eaoKSgmpylq66jp6KrqqyqsKOmn6qttbaxvbmvt6+orri0tLy4s7yvuLm1srzBssGupamiq7Gys6i8qquoq6yttLSmqK6hpK+psqWnqK6lqLessLK3ubq7sby9vr7Ev7XBwcfIt7/AxbfEwr+7v8TDvsTIzMq/vsPAwKmGcnRyamldYW9kV1ZYUEhaUlNLRkZFPj9AOjc4OTc3NjQzNzo5OTo8Ozs8PDc7PTs7Ozw4OT44PTs8Njo9Oz89N0E+P0A/Ojw8Oj05Ojs6Nzc3ODg3OTw7PDs5Ozo8OTc5Pjw+P0E7jMKvrry3usSwtrCbmZWcmKqpsLGztb2vxtHQzcTIu7vMw8zAvcq4v8XAvMy6w8bFurzDvbm3vcW4tbi7rrKVg4mNgXt+gH54dH98c3dmX11cXF5fYF5fY2NhYmBgX15dXFpYWVtbWVhaXF9ma2ZlZ2Voa29yhaqlrKagnKGllJ6km5eRoaOqo6KfpaWnpaygnZukpqyyr7a3p7Csp6q0q7S5sLa0rba5srC6ubG3pJ+jn6axp6uouaqkp6eop7KtoKemn5ukpqyen6ekn6Cxra2ssrSytLC1vLa7wcGyur7DwbK5usKzwL2/tbi7vb68wsfEwsO/v8Sgg3dwa2FmX2tvYFVZX0hOaE9USEVKRjw9QD06Ozs4MjU1MzY5OTk7OTo6PDo3PD88PDs8ODg8OTw6Ozc4Ojo8OTg+Oj89OTg8Ojs9Ojc2NzY3Nzg2NjY7Ojo7OTo7PDg1OTw6Pj5AO43Itba9uLrBu761oJ6VnqGmurars7O7s8XQyczDx7m4ycLOwbrLub3Iu7fHu7bDxrO9xbu2r7i/u7CytrCihIeHgn15dnRvbWtqanFpX2BdXFxdX2BfYWNiYGBgYF1cW1xcWFlYWFhWWFtdXmRjYmVnZ2dqbW+Inamgl5WaoZabopiVjZ6hoqabn5+jpaGnnpuim5+qsK2xtaKpqqmrrKS1uK23r6yzta6zta6wqp+dnqOisqSmqbitoqamn6isq5mfoJ6ZnZ+lmpmjnJudr6mrp6qrrK2wsrivuLm7sLa7u7qrsrK5sr20trGxtbS/tb3AvcPBuru9l4N6cmtfZV5kZFhUWF5JV11LUEdJSkZBPD8/QDs/PDA0NTM1Ojs5Ozg5OTw8Nz4/Oz07Ozg4PDg5ODw3ODo7Ozo7Pzo9Ozc4PDo9PDc0Nzc2NzU3NDY2Ozc5Ojs6ODo5ODo7OTo8PzuJyba4vru3wcHBtKSkmZukpsCyr7astLfG0MnJwce8vMXF0MC8yrq6wru1xbi1wMGzwcO7rKm0ubensLOpi4aIgHlzbnBua2JeYmZmXV1eXV1dXF1fYGFiY2NiYV9cW1taW1lYV1dXV1hYWFteYmRkZWZmaGlrco2onZSUlJuYm6GWlpCcoaGonZudpaahpZygoJqYra6trrKgpaKtq6ehtbCxsayor7OnurOmtqGinpujoa2joam1qqKjpp2lpqOWmJ6XmZqdn5mXnZycm6yhq6ajpKatq7OzqrSwsqqyubSvqa+ysrK3s66prK6xt7C6trm9v7eysZSFeXVlX2VeW1lWU1pVS1tRTElFSEtJQj0/QUFAQDoyNDUyNDk5ODk7OTo9PDY9Pzs8Pjs3Ozs3Nzc+Njo+Ozo4Oj07PD06Ozw6PTs4Nzk3NDY1NTQ2Nzg1Ojo4Ojk5PDg3Ojg5PkA6gci9uL2/tr69v7OdpaOYpbHCtba9rbS4w83JyMHGuMLByNC5w8fAtry9tsO6tr/Atbq+uqmmsLqwp7Gvm32FhYB5cHF0cWhmZGllY1xcW1tdXVxbXmBhXl9fYF5cW1pcWllYVldXVlhXWFhWV2FkZWNkZWRkaGp2opyUlI+Ulpefl5mUmJ+eoZyWoaGoo5+eqZ2bmqqmr7Crm6Ojt6qgn66otqmmp62wpLewpLegopuYmKqmoZqsuLCioaScoZ+gk5WhlJaWm5iXlpeclJ+pnamjoZ2jqqqwrqi0q6qmrbKwpaqusrGvsK6vpqensq6xtK+8tLm3rqOUgXl1ZF5hVllXU1JUS01eTFBLR0dMS0U8QD48Qjw7NzY1MzQ5ODg5OTo5Pjo4Pj47PTw8Nz49Njc2PTc7PTs5Nzk7Ozw+OTk6Ozo4Njc2NTQ1MzEwNDU2Nzk6ODo5Ojo3Ojs5OT1AOnbAvLS5wrG+uLyunqeno6q7wL3Aua60uMLNyMfExb7HusrNtcTFxbG/v7nAwbm/wLm5vLenprC7paigpImBfnhyamxydHBpaGVkZ2JcXFpZWlxcXF1eXVxbXF5cW1xZW1xaWFZXV1ZXWFdXV1VbY2NiYmNiY2RmaoGWk5WLkZSTm5mclpaboJyflaCfpqWkpqefnJ+kn6qvpp+io7aooKGiqLOhpaekr6Wxray1nqCdlZSpoaKUrLGxnqKinZ6Ym5OLoZSRk5eYkpeXmJadppumoaKZo6Wlq6SlsKelo6urraWorq+uq6iqqbOlpquvtLGuvLWxr6+gknp2cmRhXFtdWE5MUUdSYU1XUE9KTU9FQkQ/OT02OTo3NjQ1OTk7OTg4Nzs4OT0+Oz47PDY5Ojc7Njs3Ozs6ODU6Ozo7OzY8Ozg4NDY4NjMzMjEuLzI1NTY7Ojg7Nzg3Njw7Ojs7QTh4u7uxtb2wu7K3rJ6kp623u7zBxbqxubXFysvBxMfHybjIxrXFwsmvurzCu8LAwb27t7m1paaxtZ2hiZiIgHdvZGJnaWhmaGpnam1gXVxbWlpZWlxdXFtcXl9cWllbWVlaW1dVWFdUVFdVU1RSVWBgX2BhX2BhY2RpgZSTiZGOlJKTnJSVlqOZoJacoKWhraWkpKKjoZuqqqWZnqWxqaCgnKSqnaehnqytqaiuraKhopSXo5ucj6upsJufop6el5iTip6SjZKTlY+YmJKboaKcpKChlaChpKabo6uloqSqo6uupK6xqaalpqa0pqmorbO1tLm6r6qsnotycG9gW1dWVVFGUU9IWlxPUkpUS1NMRUdJQzg7Oz08ODY2Nzo5Ozo5NzY5Nzc6Ozo9PDw3Ozw4PjU5ODo4ODY1OTo7PDk3Pzw5Njc4NDUyMTIxLi4xNDI2Ojg2Ojg1OTg5ODk7OUA5e7W0rbS7srCssq2dp6evubmzwMi6tcCvxsnOu8LLzcm3y7+0wMfMsLa9x7vBx8O9vra5tKSqr66cmYeOg3x1aWpqbWhqbG5ra21lXVxcW1tcWlhaXVtbXmBgXFhYWllYV1hXVFZWVVRVVVJTT1FZXVxdXl5fX19iZG2Oj4SRho+Rj5mTlJKcmqKcm6CnqKqoqqaopaOYpK6klJmlr6mfm5iboJ6umZuqs5+lpp+jo6GUk5uWlpKoqq2anKChoJqUkIyZjouQjJKMlpSQnqGgo5ybopWboKKgmKKoo6Koq6Crr6Stt6Wjo6Ksraqoq6+zuLK9tbOrr5iEc3NoW1lZUlVSRllMUFxZTVROUExQUklOSUI8Pz9BPzw2NTc5OTw8OTg3Ojc5Ojs8PT47Nzs7Oj01Nzo7ODk3Njk4OTo2Oj05OTU3NzU3MTE0MS0rLzQzNDk4ODo6ODo6NzQ4PTg/OX6zrqiztq6pqK+tm6morLe2rLzKu7a/rMzHxrnCz9DJtca+ur7Gy7WxvcS8wsTDvcCyuK6lqq6qnZeGgXd4b25pbm5ucWdnaWdkXVpbW1tbXFtZWltcXF5fX1xYWFlYV1hXVlVUU1VWVVVUU05QUVlaWlpdXVxeX2Bkfo2Bi3+LkIqSjZeRl5mioJufqqmmraqnr6OnmZ+soJWWpKinnZeQj5qerpaXp6qZn52UpaGekpCSkpOVp6ulmpmanZ2WjYyMlIaIjYOQi5KUkKCeoKOXlZ+VmqCinpObpaWnqKigsbCmsLynoKOstKuup7C0sLm1wLGtsauQfXFyYlZUVU5SSUdWUVNSTExYTUpMTlJHTUtBQ0ZEQz5ANzU4ODk7OTo3Ojo3PD06O0A+Ojk7OTo/NzU5Ojk4NzY5NTg3Nzk7ODU1NzY2NjEzMjAtKi4xMDI4Nzc7OTk7ODk0ODs4QDh/s62msbeqpqKwq52qp6mysaS2xrS5urPLxrq8w8vRzLO5ur7AxMe2tLe9srq7w73BsLOtsK2vqpuiiGtobm9yb3FrcGtkZmdlXlpZWllaWlpbWlpaXFxdXFpYWFhZWVdYV1VVVFJTVVNWVVJOTk5SV1hZWVlZXFxdYWqAen91iY6HkImYiZSUl5uZnaibn6qlpKqdp5igpZuSj56impeWhYSSmqOPk6KclZaVh6KampOLjouQmaSnnJWVl5uQkoeUjoyBi42AkIqSkpGhmp+hlZSYmJWipZmMmaSmqKahoLSyp7K3oZ2it6yqraSysqa1vLWrq7GjiHhybV1OUFFMT0NNTk5QS0ZOTkpKTk1RSU1KQUdLSEhDPjg1ODg4OTo7Njk6Njg7OTk+PDg6Pjk7Pzg3ODk6ODg2ODU3Njg4OTc0NTc3ODIwMzAxKyktLzEyNzc2Ojk5OTk4NDk4OEE3d7anpLawpKekqaWgqaWks6qissO1tbKzx8e4u8TKzce1r7y/uLzEs7OutqKstMO5uq2pq7Ourp6Wp31eYGdzcXZxam5pZmhoal9YWVhYWFlZWVpaWVtbXFxZWFhXWVlYVVZSU1JQUVRRU1VRTk1LTFNXV1ZYWFlYW11hb3N2cYWIgoeAkYOOipSRk52gj5qcoqGjmKSWoZuVjYeYmoxzjYJ9jZeWhZCZkJOOjnuZjpyMgoqAipifop6Qk5iWhI6Ck35+dImOepCGkpCQnZqZmpCVkJ2OoqOOiZqgoaSjm6K0r6yvrJ+YpbmmpbChsK6csLuqqa+qmYF2cmNWTVJPUE1DU05MUU1DUFBISU5TTUhKSkRKTEZLSz03NDk4ODg7OzY5Ozc6PDk6Ojs3OT85PkA3OTo8ODk3NjQ0NDU4NzQzMTI0ODUvMDEwMikoLC0xMjc2NDc4OTo6NjU6ODdBN3e3oqO0qKWlqKOmpaamprOnpbTBuK+0sMrGubrCz8e/ta+9w6+xx7Ktp6uVpK6/t7Cvn6asrKqVlKJyV1ZfaGdpaGluY2poZ2JcWFhYWFhZWVlZWVlaW1tbWVlZVldXV1NUUE5QTk9PUFNUUU1NSkhOU1NTVFVVV1lbXWlscm1/hXx0Tlhyj4KXho2cl4uTkJ+XnZWUlpSOlol/k4lfO1dve4uUiX+LkYyPhYZzioSWgXmCeoWTnZSDlY6Rj4OGfZN4cm+FjX6JgJCNj5eZmJOKj4mciJ6Xh4iWnpqhoJenr6mtqaifl620oqatmKyrmKe0oqmto5J9cm1fW05TUlZMRFRKUE1MRk9PSUVMUU1LUEpJTVBGSUg9NzU5OTk5OTo3Ojs6Pj44Oj09Njo/OD4/NTg5Ozc5Njc1MzMzNzYwLi0vMzQ0MTEwLy8oKSsrLTM4NTQ3Nzk8Ojc5Ozg2QTl4t6CjrqGmpqqgp6mnoqmwqKe0wbqxtbDJw7m0v8/AurGxuMSrrsmup6Odhpqiuaymp5WlpKOglo6WaVFNUlZaWlddXmJnY19ZV1dXWFhYWVpZWFlYWVpaWllYWFZXV1VTUk5MS0hHYlxNT1JNS0hGSE5RUU1QUlRWWFpgbW9pe4J0UEJAf5WRkX2JlIyEio2bjZaVipKIhpWGeIh/YEpRbniKkoR8hIyJhH9/bn5/lHd1dniEjZlwUY2Iiod8fniUdmh3hYh+ioiVio2QkpaLhIqIlISajIGEkpuWnpyUpKOoqaWjnpuwq6GkpJCmqpahqpyipqiIdGxlXltIUVFSTUlVTVNJTExQSUhGS05MTVRLUVFPRklDPDc2OTo4Ojs7ODo7OD4/OTk+PTc7PDY7OzQ3ODs2Nzc1MzQ0Njk2LzMvLjExNTIyMS8sJykrKiw0ODMzOTc5Ojk5Ojo6Oj85draco6edn6Guoaeopaeor62qtry2uLezwry3qLrJubepqre4rbbAqqKbkoOPmbGfoZmMn5aYlJGKjGVNTE5OT0xNUVdbXFpYWlVVVlZWV1lZWFhZWFhZWVlaWFhWVldVU1BNSkVAQJtrc3NJTUtERERJTk9oWU5RU1RVWm6DdHd+amldVY+JlIl0f4aBe4WMkoGSmYuPe4aPgHV/eHNudXB0jY6BeX2KqoV5emh2e45wcm14gYqMknh6gHuAdnNykndndYSEhIR6lYmIioyLgH+Ei4x/lIN7gI+YlZyVkZ+dqZ6foJ6gqaWfnZiMp6SToKCWnZ6kf3FnYFxcSlZPUUdLWFJPSk1NUkpKSk1QSExRTFJUTUVIQTw3Nzs5OT49Ojs8OThAPzo6Pj03PT03OTkzNzc5NTY3NTI1MjU3Mi8yLiwuLzIwMC8tKygoKS4xMjcyMTk4Nzk4Nzc1Ojw8N3aumKOhmJyes6mvqaWsrLCxqr20sry4trq1sqC3u7OrnZ+tq6y1s6WdlpKYhpOjlpyLgpeJj4mGhoNmSklKSUdGSEhQVFRUV1dTVFVVVVZXV1dYWFhYWFlYWVlXV1VWVVNQS0Y+OTNOPH6eTUhKREA9QURqlH5MT1FSU1ZedYN9eWd3jZeYjo99Z3mBdnh/iY98hJiSgXKHj3x2e29rfq18c5CKf3uGkoF9f3RmdnyFbG9oc3yJjIeAbHlxfXBtdY9xaHGAfY5wQ4qEgoOFfnd3eouFfYt6dX6Oko+YipKam6OWmZ2bnZ6inZaNiqSbj52XjpaYj3ZtbGViWlhYVFFKU1VUT1BOUVZLTktOT0pRT0lPT0tGRDw7Nzk7Ojo/PTk8Ojk5Pz87ODw9Nzw5OTk5MjY2ODU2NjMzNjIxMjI0LiwsLS4uLTAtKyonJyouMTM2Mi84NzY5NjY1Mjc5OTV5ppefnpagpq+srquoqbGvsay8uKy7vrmzraibsaitnJCXnqesp6SbnZOIln6OlZGVgHyKeoWAf3+BZUpHSEZCQENESUxMTVFSUFFTVVRUVVZXV1dYV1lZWVlZWVlWVlRTUUtENzhmNzA/qGlOSEM9OzpEioV6WkpOUFFUWF5lcHJtiKeqwH51eWJ7eG98eYiPeXyLhW9tjJF4c3hqan+CcpaRi4F9lYBKkphuaHd+gWxpY2x5hZCShmtzbHxucnuGaG1wfnONiIOFen1+e3ZvdHSFgnmBd3B8joyKk4OWl5iakJOWl5mXnpeMg4mfkYqSjIaQln5taG1ubldVV1RRUVpPU1VVVFhVTU5ITUpNTktDSU5HRUA6ODk7OTk6Pjw5PDs6Oj0+Ojg6Ozk/ODY4NzI3NTc1NTQxNDQyLzAyNCorKiotListKigqKCcsLTEyNTAsNTU2NzQ4NUhBODk1d5mRm5manqStr6Ksqqi1r66stL+rvMK/pqOalaWYno6FjJaipJuak5ePdpF+hYuRj3x4fnR9eHV3fGZPRUdEQDw+PkFGR0dLS0tNUFJSUlRUVFRWVldXWFlaWVlaV1ZUU1BMRTFAmjMganJBmW87PDk1PICChl9JTU9PUldaUllcYKeIYpppdHplfnBtf3qLiHWBiIZ0bJqRdHN7amudjkx5hJKJhI5nMXaGc2x+fYN0ZmV0foSEhYBmaWx1a3B/fGdwcHtuko2Oe3N9fHFwbnVtgn53eXRpeYmCiImDlpOSkIuNkZSVj5eOgHmIl4iGiYZ/kId1aWluZ2RXUVlXWFlbTVBVVlpZTklJRUpKSEdCQUZEQ0c9OTk4Ozk6OTw6OTs6OjpAPDk6PDk4Pjc4NzcxNTI0NDUzMzY0NTAzMS4qKispLCwrKykoKycpLCwyMjYsKzU3NzU0NzhpTzg7NW6SiJmRmpakqK2esp+muq6rsrDDsrvDx5uXj5SZi46GeoWRmpaPko6SiXSKhHeLj4x/dnd2eXdveHNpVUZJRD88Ozk6P0BBRERFR0pMT1FRUVFSU1RVVlZYWlpZWFZVVFNQS0U4MC9cYLNHOVhQOzk0NDGWuotITE1PUFFWTEFJUUlir7OgcXx4bX1tcYOBhYF5hIaGeXKglXR4gHN1lIc1cZ2onY6hoYSihHZwhnyHfHOMrY2IgGhmYmlucm1wg3Vpb1h1b46akXZsf3p8bXFtcH96c3VtYnaEf4aAhZCRiouKkouRjIuPg3V4i4+AfoKAfY95cG9ual5aXF1bWVhgX1NOW1tZWExISkZKRz9DQUJHP0NEPTs5Nz07Ojs7OTo5OTs6Pzw4OD06ODs2NjY1MTEyMTM1MzQ3NTUzMS4vLCwrKSopKSoqKikoKikrLzNETTIxNjY2NDM8dlI3PTdikoGSiJaRnaSnnq+VpbWprbGuwbO7wcaXkIyUkIGJfW6CkZOKhIuIkIh2hIVvmIqMf3l7e3J8dHxrb15KUEc+QDc0NTg7Ozw9PkBCRUlMTExNTlBRUlVVVldYWVhWVVRTUExFPDUqnUtbQC1nSTk0Lz+Sg6muX0dMTU5QTDdDTVJTREqGdoB8fHZ+bHaIiHx9hYN/jH52opl5foaAhJmFm5xhhqqfnYqCkI16dol+iYiOc4qXj4N7XGRxdHp7d4psZ2lheG+Fj4J6boF3c4R6cHN5d2tuaV13h32HfIiHj4CLk5eDjYaNhn1xhH+EfHV3e32IdG5xcmVmXltaXVNbZl5XUVVZXVZHS0tFTEc/RkBEQz9BQT06OTc8Ozs9PDo6OTk7Oz0+Nzk+OTk4Njc1NDI0NDAwNDY0NTY1NC0sKSsoJycnJigoKSkoKCsrKy8wMFVxPDIzMzMxRX5XND05XIx3iX+UjJGdnZ+mkaCroLGpr8Cyu8a6lo+RlIh6hnZrgIySg36LhZCOeYSCdaKGjX9/goBzg4F9bHlsU1hMQUUzMTEyNjY2ODg6PD9CRUdGR0pLTU9QUVNUVVdWVlZUU1BNRkA6Mj0gI5ZjjFs1MzExaT9Hb0lGSUxNT1JMS1RdWVJLaYSIe4l5e3F8j4x7fImGfpeHdqGZiIePkpSljaypSIetsK+KgICTioKLgoSRqYeAmJiKnHNsfIGGh32OaGdneH5uhYaBhXGEhkdrgHdxeXZobWtfd32DiH+IhYx6lZ6ciouJkX97dYt2fHdtb3d+fnJxcGpbXFxbY2JYZ2VcVVBRWFpRRExMR09JREZDQ0FAQ0E9OTg4Ojo6Ozs6ODg4Ojo/PjY7Pjc1OTU3NzMzNDQyMzY3NTY3Njg7REZMTU1MQzcrIiYnKykrKysvMDArbnUyMjQyMEyBXDU9PF6EdHx+ioWHkY+WmJKXoZ2soaa4r7O9tJeNkouYi310cH+Kk39+jYOUlX2Gf4eliImBg4iGeYmLgHWGeV9jV0xDNjAuLzIzMTIzNjY4Oj0/P0JFR0hKTE5RVFRVVFRWVVNRT0dDPzgwLCOHWz4/OTQuXZZwc6NVRklLTU5QV2BZcFpcX2qNk4eVgISChZGTfoWJkYGaloKgoZiVm5qlrZOZu7Gnu8fDp4qMoaWOk4mBkHxyhJ6fkZ1+doWFi4+HkGlob4OAdIyGhItxhoJ3h397doV9bnZ1Z4GVj4aJiIiJiKKro5aJjpiAe4KJenpvZ2t4fXh8cWljXVpZXWlcYWZfWk9MTlhTUUlRS0ROR0NLRENBRERBPDo4Nz08Ojw6ODg3Nzg6PT04PD02ODc1NjYyMzQ0NTU3Njg2NzxCQj88ODo+Q1FeZVxHMicmLCwtLS4xKD+MWy4zMTBPg180PztudnBneIN7gIyAgZCPi5uapJyhrKarr7CXkpGEoZSEeHeAjZR9f5KGk5Z+ioGSnI6EgYKMi4KKjoSAi4BtcGpeQ0E0LS0vLy8vMDIyMzQ3Nzk7PT9CREhKT1FSU1JTVFRSUE9IREI8ODcvOUM+PDw2My5sk5dNUEhJS0tLTlZgY39nZ251nZuPmpOTi42OmoiTj52LoKGSo6mlo6yTqLaiqMHDrsiveLqUmnyMoZ6YhJOFgo+hn5OZkoSKhY+YkZZscHWJi4GVjI2Pdo+EcWyFgYqWkoOFiHKJoZeHk4mPj5eltqmbjZWig4eThH5/a2prfX5+f3FfW2JeWWZqXGxrX1hLSE9TUU5NTEZJUURETkZCQ0VHQj45OTc9PDo7Ojk4Nzc2Nzs6Nj06Nzg1NDU2MzQ1NTY2NjY4NTU2MzEwLiosLCkoKS46UGFcQCwoLSsrMCwncog3MjQwT4RiM0A8dW5nWXCDcHWHcXaRhn6XlpqUn5+bp6CqlpOYnmhmpJp+hZOSeoGSiZKSfYuFmZKRg4CBi42JhpGHhIiFeHh/aE5SPi8vLiwvLi0vMDAwMjEyNDU3Oz9DRk5QUlRQUVJTUU5QSUVEPjs8OkNGPz48ODUyPD9SNUhISExMTU5SXm+KfHOCfaCdm6emopmhl6KVnJ+onqmrn6isqaq1l6u/q7bIybfJ0c++m6Bwaaupn4STkoWcoZqamqeRkYiVopqad3p+lJeRoZKWl4GUnnt2lZKrs4mNl6B9lZ6cjpOWmqSjp7awnZKaqIiXkI6BiGxzc3x9em5mXltfXmFnZGBnZ1xSRUtLUU9JSk1GRk1DSE1GRkNCR0RBOjg1PDw4OTk5NzU2NTg+NzU9ODQ3NDU3NTQ1NDY5NTg6NjE2ODYzLzAuLSosLy4tJyMqO1hiQigqLDEtKEuXXjA2M1GFZjNBQGliXlBxdWBufWF3jn18lI6Oip+Sl56WnKqYnqpCRH2HiYiYjXmCjYuOjXyKhpCQj4KDgImMiYWThYOGiYGAh3dfYlA0NjAtMS8sLjAwLi8uLjAwMTU+QUFNUVJTUFJTVVNOU0xFRUA8Pj1GSEBBQDg2NjI8OTtGSEdJSU1PUVlthpB3lYujp6q1vbilrqysqKm1rLG3srKtu7GzvpyzxKy7ycu4xL+3paOwsqytqqOLlpiFpqagopiCppmNoqqopIeFk6OgoKqgpKmOnLGLlaOnt7ucoaOwk6Odo56RpKKrsK2ztaKVpqqJmoqTipV6e36DfGVeZlpjYF1iY15mZ19bT0RKSFRPRklMRktHRkZIQUtGQ0ZGQTs4Nz08ODg6OTc0NjU4PDU0PDc2OjU0NjQ0NzM5PDM4PDIwMjU1MS8xLi0qKi8sLSooKiYlNVhYLywwLCwwhIE4NzFQhWg1QUNbWFRMaWNYanBYeoV2gZSFiIKbg5KRjJLayJ2Wc1aXiI+InI98hoyPi4p7iIOHkY+DhYGMhoWIkoaChImGh4eHcW5hQEU2NDwzLzExMC0sKy0xLy00P0RBTlZRUlRVVVdVTVxRR0dEPD4+RkhDREA4Ozw1Qzs9RktJR0hST1BXgZOghK6js6qywcfEq7PFtq20wLO4vra/tMG2u7ukuMaptsnHtr65tKijtK2wsZuZkpqfiaevqqSVd5+kl6GrsbOYlqmtqK61u7K6rK+1orGssrW8uLSutaCoqKOom6mwrbO6uLionLipjaWPkpOgh3mBgXNYX2JVZGBgYl9fZmBbVUpERUxWUUlKS0VKSEVBQEBLREJNRjw4Njc7PDk3Ojk4NjU1NTcxMTw4ODk1NDY2NDk3Pj0zODkxLjAxMjExMzAsKiwuLCsrKyooJyopRVowMCovK2iSTzYwUodqNkFFV1FKTFxaUWJkV3p1cYGVfYSGk3aGfoCNe7+7o7yCtJSTjpuPhIiPk4qJeoeBjJONh4WBjoCBio+GgIaIhYqHkXp5bl1XQEVOPDY6NDZBQjc2NC8vNkNIQ1FcT1FVV1VdV1BfVUlLSkFAP0dLRkZEOz5AN0Q3P0JKSkVHV1RQXo+krqSytMO2uMHMyra7xL2ztMG3uMK1v7C4dLG0prrFpLDGubGzsrSopLa2qrGgopabopKlsa2lraynpJigrLO6oqiyubW7vsy/xcW9vbPCt7q3v7i6uLqtrbGmsaquvrC9vMPDrJm7qJWuj5iZq4l+gHpoVWBfVmhjaWRWW2NZVlRJSEdMUUdESUpBSUQ+P0JCS0BATUQ5OTY2OTo/Njo5OTY2MjQ2LzE5NTk5MzY0NjI3Oz0/NjoxLi81ODo5NjUwKigsLS0tLCwqKCgrKyhFUy8qMDBKj2s1MlCHbTY/RlJMQUxSV1RZVlp3anB/j4SBjoVve3J4iGK5oZmjiZWUlpOUlI6Ql5KHh3uHgo6WioGEgYp7fIuIhnyKgoGLhJV9eHp1Zk9cZEdFTDpRZGBbXlNGPztIUERaY1FRWVlaZ1pUYGFNU09FQT9JSkhFRkFAQz1FNkI/SEdLTVNaVF6Ur7i1u7nJwLu9ys28vcG8uLa8vLe+tbqzxmF1sqWxmp6rvqqlqKuqpKKytaCrqJ6Vlp6Yn66lp6eln6SToqews6iysry2wb3TycnTxsLFzMLKxMC+vsC8vLi0sLm3t8O6xr7EybCeuquirI+lqbeJgHxvXV9fXVVfXWhlU1lhVlJWSUVGTktBPkhFPUtCPUJAPUY+O0hANzk2Mzc5PjQ4OTo1NzA0NS8yNjM4OTM3NDUyNj84QD5HS1JUVFJQT1FSUUpBOS8sLCwqKygoLC0sL1A+KC40OIB9PDJLiHE5PkNLRUBKTVBSTFFdaG1scY+NhpBzbHJydIjVwLWaoI2VmZmRjpeSlpaOhoh9h4ONlot/g4CDeXuLhId7i3mBioKXf3R9emtlcHZZXVxQZWViYGVkXVtYWFxNZG1VUm1uX29fWGdlVVlVS0RCS0tIRkhISEhCSTlEQEhLVFRWXVpck7nAub64xsG7ucrLu7e6trm5tLi1ta62t5lkdamerXBeoq2cmKGim6Seq6WUn5+QlI6WmJeonqafn5qZg6SdrKSqsa23sLy41NDO1s/JzNLMz87Kx8C/wsq+wb3CwMXExsrAyc+0pLyxtbCcrLm9mn12aVteWlhbXlhiYlFbYFNRS0NCRkdFPEBGP0JJQkBEPTpFPj1KPzQ3NTM1Oz00Njg5NzcwMjIvMjQxNjk3NzU1NTVEM0VMTT41MTAwMDY6NDc3QElPSjsuJioqKC0uMCxATSsvNTRtiUkwSIl0Pz5CREBDREdLT0RSXFppYG+XkpGUbmxvdHWHs6yhoZ+LmZyZjY2VkZuShYqKf4iHjJCMiXyBhHN7ioOFe4p0gYqHlX90e3lsbXV8aXNlaWxoZmppaWBmaWltWm10l62kvYiHZ1tvaF5aWVRIS09QSktRTFRRSExBSkdLUF9fYmdqYpe3x7C6tLu+trHFx7awubGxu62zsairuK2NtqienKeaTpqejI+glpGnmKWVipOTiZGJj5GSnZuhmJuVloeemaaarLCor6ezs9PU1NbRy8/T1M7Tz8zGw8rQv8rJy8nSyM3Ow9DSuLDEvcS6pre7xKJ/bGFaW1xXXlZYZFlPXFdOUUNCSUVDSTxBRD5CSD9AQjg7RD5AST01NjY1NTs6Njg3NjU0LzEwMTQ2Mjc4ODc1MzY3QzVCOD8tMCwxMzQ4PTk3LC4sMTtGTD0pLCguMDAwN0s/LTQ2VIhXMESHd0M7Qj5FQkFDSk0/VVlTZldzkJGZg2hyb3l5g6GqnqaXjJubmIuOlZGajn2Ji4WOioqLkIh8hIJwf4eBhnuHcoOSi49+cXl1bHB4f3J7bnhzbGmAcG1jaW5weWl3fX7Lv8Pfp25jeG9kW2FgS1BSVU5ZX1BeXU5RTlRRVVRcbm53g3KWrristaiwtqutvcGyq7WmpbmorK+hrLSkj7Gum5iYjJGUkYSPm4GNp5GciYOLhIqJhIuDlJWXl5SbkJyYmZmenquspKeirKzO0tXRzczS09PQ1NHOyMPU0cjO0tPT183S0cXS1sbBz8jIw6m/uNCcd2xjW2BbVV5RXFpPT1RQTkg+QUdCQ0Y9QUI/RkU+QD86PT09PEpCNDU0NjU8ODg4NjY0NDEyLzAzNTI2NzY4NTMzOz08RT1AMTErLzM0OT81OTAxMDIyLTJFTzMpLzMuMzI9TjI0OEN9XzJBhnREOj09ST5AQ0ZIPFZSTU9bdYeGi3dsd3B9foCgnp6hjI2Zk5SLjJOPloV5hZCQjouKiJGHf4J7cn6Agod6hXaFk5GJgG93c2xzfXx3fHOCeHFrgHJyaXByenlze77Lmn+NsoR2coV3aWFqXUNaWltXZmRYZWtUWF1dYGNeY3h7f4uBmaqkpKKgoammqrG5q6a0o6KuoqSuoqexn4mmm5WTkYqSj4iClIlrlaKNmYSBhn6Rg4OTl6yLlY6Vmo6GkpGdl6ewoqChpaSoyM3Px8LL0NPR1NLO083G1tPN1NjW1tjV19XK1NrNytjW0cutxMPMiXBtYF5dVlJXUlpPSkdKSUpAOzo7RUJEPUNEPkhDP0NCOzw5PDpHQzQ2NTQ0PDU2ODc1NDMyNTAvMjU0Njc0NTU0NDw+PUU/QTYyLy0xNjs9MDgxLzI1NC8tLjtSMDE3LzUzMkVEMjg+bmI1PYF0TTk5QEk8QUQ/QTtQTEZLWXCAdX5pc3lygoqAnZWelIWLlomPiomOiI+AeISUmYuNiIiLiX6DeHN8fYSHd4B7h5GXgYRveHFtdX92eH10hnx5bId2dW59doV2eXudtYw8QYvGpX6NfWplV0lDZWNmY2hqZG95W19maGtuaW6BhImRjJ6foJ6Rl5mgo6SmsqSls6CipZ+hqaGisZyHn5KSk5GLjouHhI+EfpycjI2ChIV6lH+DqpajjJKLmJOLfZeKmpGqs5ibnKecpr3Dxbm2xc3R0NLQy9LLydTP0dXa19fY1NnYzdjbzsna2tLWv8zNtHV0bGJbV1FTUFhVRUZKSUVFPTo3OkBCQzpIRUBFREJEQTs/Ozs3REM3NTY1NTswNjg5NDQzMzQxMDE0NTU4NzQ0NDQ5QD5EQkM8MzMuNkZUV09RSkFKRj8yKiguQlQyOTI1NC83Szc1PGBiQTxzdlY4N0FIOj9DPjw5UUVDSlRsbm9wYnFxdIaNfZeRnox+h5KDiYaFioKIfXiFl5eJj4OHhod6hHlxe3uFhnV6ho6OnXqNcH1wcHqAcnuBcoSHgG6OenV3fX2CdX98h4mwdFmqwreNkoJxbmM9XmhycHFwbnh3gmVpb3J2eHJ7jIePk5KblqCWiIyTnJ+bn6ugoaycopqaoKafn6yZjJqNkZOOhX2IiIOFi46gmZOIg4d+bJl5hJmHiJOMjpWMhnubiJOPrquUlZefmKautbyprb3Gy8jJy8vPycTSytTX2NfY19Tb19PZ29bP29rS1snVzJN1eGZlWFdOUVJcR0JFSUk+QT49ODo+QDw+SD1AQkFBRUE+Pzo4N0RCNzU1NDc5LjU2NjQzNTUzMjMyMzY0NzU1MzQ1OEVCRENFQjU2PEZOU01bbmZjbnNrYFY+LDRMRzg2NTQzM0JGND1XX2hMdXheODs/Rjw8Qjw6OUQ/Q0dSa19tZGJmbHaAiHGRkJuAeYCOfoOBgoV/hHx9hJiOh4t+hoeBd4N5bnt7h4J0epKejqF2j3aDdHWBfnSAhG+BkIJvkoV1fIGFenaHfIm4xqXDyriClpyPeHBmTmVjgnuBd4aikIt5end7hIB8hHVtlJaVlpCYkYOJj5eal5emnZiglp+TkpejnpqrlpGRi46Tg4yFiYmBhpCRnpyZiYWLgYaXe4iJn5eQiY6Ki4J8oYmQi7yhmJOXmpyopqWtnqe1vsC/uMbJzc7FzcrR1tXU2dXX29TX2drb19va2djO28aDdnZkZmFdUlVVVE1LRE1EOz08PDk6PD85PUE3Pj9APT8+PTk4NjdDQTY0NTU9ODA2NjU1NDc3NDU2MTM4NTQ1NjQ1NjdISD1ESkU3OTI1O0g+Ozk6N0hQXFpSVVhLOVQ+Ozk1MzI3STg9TllNSHh4ZDU9PkM9PEA6Njo+PkBFUV9ZZmFdXGl0enlsiY2Sd3Z6inx+gH+AfoV7foKRioWGeoWIfHZ+dW19fYd+dH+SnpGfg5J8h354j355i4pvg5uBdJmGfYKKhXx+kXuQqY+Qw6C9jJuknH6KhH2Jc4yLf3OmmpyYlIV7j5GJhGlHcaGknoyMkZKFiIuQkpWPnZuTlJGXjYyVn52UoZWSjo6RjH+Qj46LhImTlpqfn4mMlJKdkYOMf6aZiIWOg4aEgKWGiou4mJ2RlZahpqCdnZ2jrra6tKvAxsrQyMfNz9PS0tjS1dfA19jZ29ja2tnZ19u2dnV0Z2ZiVF1ZUk9PSENMQz09Pjk5Ozo5OTw9NkA+Pz09OTo6OzM3REA4Mzc4PjcwNjg4MzU3PDM3ODA0OTc2NzU1NTQ2RlA1RE5JODkzOEFLPTszQ0BJPDlEV088TVRITj85NjMzMz5DO1tYPjVZeXBaPDxBPD0+ODU4OT88RFJTUlhfVlhmbW1taYGOinFzeIp7e4B8f3yIe318i4eDfnWEhnpzenNtgX6FfneGm6GbnpSSgIyIf5iHgJySboiphXugjHyRjoOJhJx+m5GKjaOin5Gkr6CLkYuGi4GThldyrYufq5uQg5mckI+OW4OikYKNn5OUjIaIjJKSjJSVlZCMj4qIlpudj5WXkoyTlIaAi4mTjoqKnZeZo6KGk52WoIuKiY6dkIOIj4CDh4WlhYuQs5ickpSXoaCemZKbnaexuKykvcLHzcjGz8zQzM7Xz9HUrtbV2NrY2trX1tnanWx5cWNjWlpWUVVXQ0BJRD8/Pjo0OTo7Nzo7OjM8PD89Pjc7OToxOkc9OjI3PUA1MDY3NzI1NT82NTs1NTg1ODo1NzczNUhSN0dPSzk5ND1FSkI+MUZDTEE5ODpHWEA1SFdJNjYyMjM6RUNlWD8mX3lpX3o+Pjk8Ozk4OjtAO0JRS0tTWVBUY2J4bGJ+kYNvbXeLeHp/e4F9h3x8d4aFgHNwhYJ7dXd2dIWDhX1/kqain6ail4qdkJSXi4qol3KKso2EqJKEmZSFmoyjlqCYk4mbnqKTqbCgkZWRjo6IloxvjbeEmsTIspyippycmJaRsZBkpM3HlY6Gh4mQko2Nk5WKhYqKhpaZm4+QlJOHlpiEgI+LmYiOkKqXl6SiiJmelpqJj4eYmIqFj42Bf4ePpYiNk6ial5SWmKGYn5mTnJqisrSlo7zBvsfGxcnIycLK08zN1KjS0dbW1tja1NPazn9ve2RgW1xbTUlTWUJBR0Q7Qj44Mzc8PDo4PjY0Ojo8OjcyPzo5MjlJOj42N0JDMzI6OTYyNjQ+PTQ7PjY5NDk7NTc5NDRLUTxKUUs5QTdCR0lANjRKRUxGPjs4OEVUQTc+XDg2MjE0OjtFYFhBRmF0aExjWj41Ozo6NTs6PTpFTUZIUldTUkJjgkd2gY59fG1+iHh6fnuCgoN/d3aBg3xtbot/e314eHyFh4p+i6Kzp6Ors6KXp5+lpJaVrqKDkbiVkrOajKKhjKWbsKOknZiRp5aomayvpJiVlpWQi5ial6HAjqPJuKuco6atmJKbnbKdhYaoopyYhYmJjpWMi5OPiIGGh4mTmJWMi5STh5WZhoSRkJx1kZizlpeloYedmpOPi5CKl5uJi5aOhn2MmJ6JkJCcm5qTmJefk6CdlJ6boLGuoqS3vrTFx8S9w8PAxs3KydOmzszT0tHW2NPQ2LpvdnJZXlNeVE5ISU1FQkNENT46Nzc6Pzw8Nz00MjY2OTc3ND41OzU8TDw+OzxCQTc1PDs0Mjc3P0A2P0A3ODQ5ODc7PDU1T01EUFJMOEA9RUFHQTU6SkVORUQ6NkFAQlM+OURPMzIzNTc1PXZcPFJcdGlaTV1TPD04ODU2Nz06SkZER01aXFlKZmA7SISLenpuhYZ6fIR4gYaBfnB4fH59b3KNen6CfHiGi4mGhJKmu62osr2wpa2zs6ijobCsipq1naO4pZWtpZeprbinpKOfmqmYqqSusKqamZyUlZGXoJiau7uuyqFqt7irsJSZn6Osk5e+o16qsoOKio2Uh5B8jo59g4aOj5SViIiTloyQlo2LjZaYk52ZtJeWq52KnJSSjpGSjJmbipKekIuJlp+hjZSNmJqdkpyYnpShoJScnaWvqKGls7iswsjEtrq9vMXHx8LRoMbJzc3F19bRy9OfbXdlWVdQXFBORUM+PENBQjhAODg1P0c9PTY8MzUzNDU0NTRCNDk6Qk06QjtBSEI7OkA8NzQ2PEI5P0BCODc0Ojo2Pjw0N1RLQ1VRSjc8OklBREA0QUpITkJBPzZEQTxKTkQvVD0yNTQ6RUpcWEpaUW1ncHBEaWBLSTY3NTc6PkpAQ0lQZEhiYGJwSkCLin6Ac4aHfYKIdYOKgn9ufXx9f3B3h3eOgod8jY+MhoyZqsLAr73Gu7O0wL20rauztoyos62tvaubu6Worbq4q6emoqKko6mvsrGrnZykmZuYl5+ipqaSpLqvqcC8ra6yuaWkqH6IhpytvbCCi4yLkIOOg5GPeoGIkI2NnImIj5eNi5WWlJGal52omrGakaycjpqPko6VkJCWmI+SoZGJlJukrJSWj5ScnZOhnZuYn6GUmp6npqSipLCzp8HGw6+wurfFxMO/zabHxMfEvdbQzcTKhXFwX1lXXFhMSkFLQUZHP0FAQzs6ND5BPT01PTY+MzQzMjQxQTE3QEJOPkdAQ05DQT1DPTs4NkNDNUJJQjo4Nzg7NUI+NzlWS0RXT0Y4PTRLQEM+NEVLSE4+QUE2QkI/QlNFNThQMTQ1Ozw4O0Q+OUxqal07V1JkS2daVU83OUdEP0NGXGVGYGlnWl1ck4yMiXuHjIeDjHWHkYqBb357gn9xfoF7lXqSlJSYkJOWp7PGyb/CzMLDuce9u6+rubuYs7e6ssCupcGkq7C8vaquq6OjnqerrrSwqpygqpyhnJafsLWojKO6urbBvKypnbOlpKiUhY6pxMOkgouPh4iEhpWUjXmDjZGPkaGMjJSSjomXn5iTmZWYpqCvnYyrnI2Wj5KRlZWOkJWSj6GUhpefoLKelJmToKCYpJ+aoJuglJiepaSmpqSvrqbAxMOuqLe2ycO+ts+yxL/EvLPRysjCtHJ2alpVWWdQTEhCTEtMSkFBPkREPDVBRTs7Mz04QjMzMjI2M0EwNUlFTj5JQEhSQEg+Q0A7Pj1GQTVBVUA7OTk4PDdFPjg+VkpDV09HOD80TEBCOzVKS0NMP0I/PEJGPUFITDkrRzwzNjc0NjRBPzdPYU9hRS89PjZrbGpgQDpIPj9FQmVaTWVcZlRia5mNloqMiJOQhol5h5SQgXKAe41/eIeCgpB6jaGWqJqambq9x8jJwdLJysLNvcKzrby+qLvAvbvDt6zBqayzvL6qsKqkpaSsrrOttrWgn6+fpaKYo7O9qZuovcGktriwrJSyrKysl4eaqaalkYKMk6WWioF1ipJ5hY6SkJ6gk4+TjI+NlKOZlpyVlaOeqp+RpZqMj4+PlZaIfI+Wk5KjmpWfoZy1pZCelqWjoqWenaaYnpWXm6SjqaeisqyovMDDr6Wzt8y/ua/Es7u+wbiswsPCwJdqd19WVVlYSkpMSUZEREhDQ0FETDo0REk6OzQ8OEUuMTIzNTJCMjVTSE48SkJKUUVLQ0RFOkVMQjw3RVY9Oz04OT88ST86RVVJQVdRRzdBOks6Qjc5Sk1CSUBDPjxERzxCQ089MjBIMzY2MTcwPUI6PWpqSks1UVMzU3BwZE47RD1ARj5pSF9YYlpjY1aej5yOl46ekomKf4qgk4R4hX+Wf3+QiIqRgJahma6npJjCvcfDx8XTzc7Ny7zCt7C6vLS9y7zDwba3vK2zv7q9rq+ooKmotq2uqbK3m56to6ihnqu3uKqlsL/Fsr66tKirtrSurpeWpayon5GNkrLFp5aOfJKVfIeSmY+qmZiTk4+SlZOknZOdmZSho6KcmJ+Yi4yPj56IWpCWl5KXpJllmKOfsqWVoZarq6mnm5+ml5iWmJWhpKiln7arqrq7w7SltLXLwLiqtquyu7iuqLi6vbiAaGtYVVNTTUVJUk1LP0FIRUVISEg5NUVNOz44PUBKLjMyMDI1QzU1T1ZOPExGS1JMT0hHST5JUT86OElTOzs/Nzk+RExCQEhTS0BXUEY6QT9HNkE3O0hNQ0U7Qz00RkU6QkFCRzkvOkEzNjAzPkdEOTQ9dGRNRztFKzpmfGdWOz5AQkZCcEVqSVJlYUxGpZScl6KXqZaMkYOIppOIgoeCnISDlZCQlI+aop+vvq+hx7zExMfGzs7O0sq+u7axuru8vs+1w724ubezsbWzuLOrp5yrrLmqqaevr5ijr6WnpKW1wLGsrLS/w7rAurSoura5tK+Wpa2urqSLk5ShjXTCmn2XmYSOl5mMsZWbmpWSkpmZpaOVoJuXmqmdm6GgmYqNkJacYEqWnJqVmqWWVZewoK+cn6SUrq6rpZqgpZSTmJiNnKCnopq0qaqzu7u7qrGyx8C5pqyrrbKyo6GysrSkbWtjWldNT0pET09QUjtHS0lHSUNDPjpLVT9BOj1FTTA3NTM0OkI0NE1XTzxKS09VTlFKUEhISk9CPD5NUjs+PTg6PENSPkRIUklCV05JQEJBRjM+NThKS0NBPUM7NEVBOkE/PkhANSpCNTIsPmNdZzozNXRkZUBSNyYjM31oVzs6QkNAPVFFV1NzYldGSKqWmaCiqLCZkZeHi6iWjoiThaCIhJ2Xj52hm6Oltcm1qca6wsPIysnIzM3Gv7uzrrm5wcHMtce6wbm1urCvr7O1p6SbqrS1qqmmrayapK6lpKisu7+orLa3v8G/vrm0s8Syub6to6+1rLmmiJuXppt2v5+EmZ2Ok5qajK6XoZycl5SboKGonqifmZqqmqGnnpiQjZGdg252kqKalZ2inZGusqOqlKiql6qto6OfpKiRkZmch5Sdop6Wsaepq7m2vbKyrr65tqCjp6ilppybrampi2BjX15PSktGR01KVkw9TUVOS0xCQ0Q8UVY9QUFCRE8xOD03Nz9CNzVVWE8/SE5RWVNQUVVLUUpKRUFFTVE/Pz04PTtHUjxFRFFCR1lNS0FIREU6OjM5S0lCPkNCOTlDPjxAPjs7RzctMj4tMYJoTnpcLzBraGA8PUJCODZ6Zlc7Oj0uLVJgTVVIfmVeSEWrlZuhn7uvmZWfjJOrnJGSk4mrjYahnoyjrZSjpLbGvrTAusLCx8nFws7Iwr65sq+5tcHCyrXFssG8tbqqqK2tsKOjmKq0u6appquqnamvp6Oqq728qK29tbi+x7y3trjBsr7BtKq1t6u+pZCjmJKioL2fiZqgmZeeno+3n6mcpaKbnKGaqKSzoJudppyoqp6YlY+Um4uXiYykopSdop2gta+lpJOvq5mqqp2do6OokJSUn4KPnp6clamkoaGztLq0rai1srOenKOlmpeVmKqhnnVdWl5cSUdFRk1RSU1FR0dCU0xKQkVHQVZTQ0g9QUdRMTtCNzpCRjc5XFlLQUxQVFVTTVdSTlVKRUBKSk5POUNANT08TlFDPz9QP0VaTUpBS0RHQDUzPUlHPz1FQTk3QTs8QDw8M0A8Lyc7KkiRQjpTSjAsW29XNzE8Kh1CgWRUNDktMTlmXEZDQ51wYkdFp5ekn57DrZyXpZiaqpyWm5uPqpaVp6aVrayYoqu2xMK8vrfBwsDHxL/Nxru9ubKwubO/w8i1v7C8trm2pqSrrK2hoZqqq8WipKmrpp6sr6uiqam+uKetv7K4t8e2tbm4wLPAwri1s7SvvqOXo5eUnJSun5Cio6Wjo5+QvaSpnqisnZ2hm6WevaGZo5+iqayhnZeNlZ6TnoePhI2Tn6SgnrWspZyVsaeZrqadmamdn42YlJ6DjqCam5KlpJqYq7G1saqlqq6sm5igoJKPkJWonpRlX1dgXE5IR0pOTEhFRElBPlFJQTxHSUhcUk9LPUhPVTRCRjk+SEc1Q2FbS0JOUlVXVlFYVFJVSUA4UlFQTTpHQTRDSFFTSUM7Qz5HVktDQE8+SzwwNjtHRj47RkE0NkA5Oj85OzE1RDAtLC9Ndlw0S1o1LE1uVzwtPSkeI3piUTVDS1E5bVJGPEt4ZWFWS6Kao5yexayhnqyfnq6gk6OflqSgpqmsmLaxoqqztsXEvb+1v8K7yMK/yse1uLW0sbO0t8HFtr6xuLW5tJ+nrKqsnZ6epaTBpZ+qrqClqa2voqaovbWmsb25t7bEs7S4ur+0xMG5ua6ztbWjnaWVkpShrqCZop6oqKujmsKsqZ6srpubnpmmoL2hnaSYq6yspqKajZqfk56Jjld/lp+loaC4qqaTmLWjnrGgn5qulp2NmJOcgY6fl5WOoqSWkKatsqqpoqKlpZWVnZiLj5GSpJ6JX2JYYl9LSEpKTkZFQUdLPz1KQjk5SkpOXVFRST1MVlw5Rkk9RE1JOEhiXExDTFBTWVlWV09aXklBPVdRSUs/SD81SE1YU0hBOkBBRFBIPz5RPks3MDk5RkU7OEc/LjY+Nzg+NzcvMT85MSUxUVVtW0pPMTA9Z1dEMTc9LSt3YFM2U1prV3JHRTY9dWVcS02en6GZnsSopaK0op2zqJOrpaCjn6yprJ27sKistrHHxcHCssLDvcbEvcTJvK+wtq2wtK+/xLS5sbC5tKyZqLGpqpqdpaGnwq2brLGcqqOusamkqL22p7e7vq+3xK20s8PAtMe0u7istLatqqKmlpWVpKyin6Cbp6uwr6+7sqagqamZmZiToqO4oKGjkq+wrKWnn5KhnpWekJCNlZ6aop6ns6amjJizm6Ktmp2brJCdk5WSmX+RoZaPjZ+hlIumq6+kpqKcoJ6RkZqThYuRjZudf19kWmZkSkhMSlNCQ0BJSDs7Rj85OU9NVV5SU0o+T15dPUhQQkxMSTlNY1xMRUxSVFlbU1VPXGJIQT9aUUFIQUtCN0ZFTEtNPztCSEROQj07TkBBMy85N0NCOTdGOys2PDQ2PDI1LS80QDErJ1Z0U2VPPzEwNGJbTTIzPjA8dl1eP1tUXmVxQDg7SJZ3ZUE0n6OgnKDDqaSqs6KktaqWs62noaSyrK6pu7KtsbW0xsDEw7XAxL7JxLW/yMK0q7WosLmsv8Szt66strmlmKqyq6qYn6aXrbu0m6iwm62grrSyp6u5s6i6tLmzucCqt7LEvrXHqL+vrra1qaesoZiXkqaloqKYmKWvuK6ytbagn6ikmpWVlKSgt6KlpZavsrKnqqainpqam5aYqJ+gmKGerrKipo2Xrpikq5aZnqOQmoySlpiFlZ6UjI+cnZSLqKmqoaehmJ6Vi46Zj4GFlIiTnndiZ1xqaU1PTk5UPkNBTkM7Okk/NzdST11fUlZRQVdgXEJKU0hWS0g6VGRcTkZPTltXW1JQUVhdR0FCW1BCRz5OQzlIR0hPUD8/Q0lCTEI8MklBOTQxNzdCPjs3RTcrNjkxNDgwMS0vLjw2LSNCcWdzazIzLzFbYlozMzgwNnBbYkgwNUlvaFVDV0aMeWZDO6SjnaKmv6enr7GhqbarnrqxrKOrtLaxsLm3sLe4uMS9w8e9vcTCxsC4wMXAuqm2pKy7rcHCt7eprLG6opStsa2ylqSnkaq5qp+msZ2roLC0s6qptratva20s7m4rbmxw7u/v6bEq7G3r6mrq6efmJmroaKhkZiisa+zrLC5mpypoJqXk5inoLappqOisbG0rLOorJ+boKCbnqWcopedo7Owmp+Qk6Wan6iZlKKdlJeIk5aSlZack4iQmpmUjqmopp+jnJebkoWOmYt9i5WEjZlpZ2tgbG1XUFFbVUFCRVRAPDtJQTc6WFBkXlBXV0VZX15NTFJOXktKPlpjXk5IUE9cVVlQS1RXWkk/RFhQREY/TkA9SUdHUVBCPURGQk0/OjFEPzc3NTQ3Pz05NUU0Kzc1LzI2MS0tLiwxPSonKz1ccD0+MS4wZFpkQDE2NDdnWWBGKD84bH1nW1Y7iXtjQz2on52iqr2iqrCspLK4qqa2taygrbW9r7O4u7q+t7bAwr/IxLnFwsC/uMS9wbevtaert7K8vr60qK6xtp6Wq66orpemqI6nu5+lrLOfrKKxsLOsqra0tb6usLG1rLC0s8G7xresvbCxuKytqqOypp6lqp+kl5GaoLOqs6uqs5qdp5yalY6hpqS0rqihra6usai0rbKqpJyfqKSelaKZm6i1qZaZkpKdmZ2fnZCrnZaXhJSWip2YnJOKjZaXmpempaOfnZaVl5J/j5SFe42SgouVZGtxZ29xXkZZZlZEQk1YRFo5SEI2PlxRaFxPWV1HW15dT01SWGRKSkNcYl9QS01OWFdYUEpWVldMPUVVSkVEQU1AQUZISFFQQTtGREZLPTg3Qj02ODcxOT48NjVEMCs4MC8wNS8qLC8tKj0sLCUyKyo1SzEvJ19fYFUxNTA9YFZeOClDM1lVXGdLNox6ZkxApJqhpa23pa2qpq+ut6qvtbunprG3xbextr3BwrW1usS+zMa5w8C5vrnDuMC5srSrqbq2urm+tKqtsLWYmKesqqybq6uPq76erK6yo6ugsa2zrq62srm4qq6vsai1r7W8vcqzqre1sbSvrqehtKCbqK2gppaWmpqyoq2gpq+XoaSampOOo6Wos6mhprOsq7alr7K1r6SZnaynmpifmpmrt6OXk5GOl5yhl5aUqp2akX+Sl4ydnJmWkIqUk56ZpaKioJiWkpOVeouPhXuMioKKkWptd211e2FFYGtZSUhaWj17SkZENkFiVGlbTVxhS1xdWlJSUmJgTEtFX2BgUUxJUFdWVU9HV1ZVTjpJVklIP0NLP0VESEhRTkE/SEhIRTw3PT46NzU2MDk/ODY2QiwtOCwvMDQsKCwvLSo3NikoOS4kOks1LiJUX1RfLzUoQ19RXC4rQi9KR1BbRzNjWVRLRJmXobGpsqqtpqSvrrapt7W6pKy0t8m7tLu6v7+0s7fDwMzIvMO8tr2/v7e/vLG9rae6ube2wrarrLG3lJanrquoo7CqlK+7pK2xs6eoo7K0sbKxtbG4tKmvrLKnt6+3tMTGt6m2tqywramoo7agoKexoaSUnJmVsZ6nnKCqjqmjnpuWmKampbino7K1rKiyp66xtqylmaCsqJucnpyUqbiclI6OipibopePmKWgnJOCkJSPnJuXlpWIlpCYmqecpKCSlpGQlXaEj4d7hIGDi4psb3Z0e35cS2VtXEpOZFw/YntHSThHZ1dlXExeY01YWVdVV1RpXU9PSGBdX1BKSFFWVVJLSFdVVk04TVpORUBGSz9IQkNLU00/P0xPSEA7Oj47NjswNDE8PTQ1OD8pMDcpMS4yKSksLC0rLTkkMDQyJTlCNy4jQU5HZjI3J0diTFYlLUIuPUVMUTwzcmtJQ0ORmqWvpa6vq6ilsbO0q7eyuKGrtbnJua3Bu8K4s7G1wsLOxcDBvbS9v7+6vryyxKepubC2tr+8rquzsZygp7GtpqavpZ2yta2rsbKsqai1u6y1s7WttK2qrKisqbmusrHIwLmlurCprKylqK6xpqWjr6SpnJ2cm6+ao6Ojo5Gtn6SgoKKrpqe5pKy1tqWrrKmtsLauop6jqaqboJubkqS0mY6JjYeQoaCUjJScn5KQg42Skpyal5WTh5eTlZmnm5+ejJKRjZB2fY2FfHt8homIcHJxfXx9XFNkbl5OWWdcRkSWW0c7Tm1YYltMYGJOVldWV1RYZ11RUkxjWVtUS0dPVFNOR0lWU1xOO1BeSUJESEpBRT8/S1NPPjpOTUM8PD45OjU9KzMyPTYyNDk6KDQ1KS8rMSgpKywtKiY1Ki8mMCkzODoxJiozQmM6NipIZUhKKzpIPjNCSFMsPpBrO0dIj5yqq6KqsaWppbO1srW2srKhq669zLqtwLrHsbSttMLD0sXGvsCyvsDCu763u8SnrLessre8wK+rsaygo6etqqiksKOqsqqwrLCvsK6rs7ynt7GyqbOqq6Wlo626raqyw7q2rbupqaesqaiypqqko66qqKKenKOtlaWemJ6ZrJ2ip6miraakrau4srKhqqKgrK+xrJ6gp6epmaOZmY+gppeGhI6Ki56gjoqMlZqOjYSFj5SfnJSXlIaWlJOXpJycnIqSkI2Jf36HhXx2foWEhXJxcIh1a19ZYG5iUXNxXEs7hHxGP1d0WGFaTmRbTlZWVVdRXGFeU09OZ1hXVktHTE5SSEVJVlJdYzxQXUQ8RkhIQkc/PUpQTDo+T0o9OT89Mjo3OyoyNT4xMDQ4NSg1LyosLjMwOyksLCclMjM0JCwyLTg2MCkoMTtcSjAuSmdERjg7QjA1RUtYMUCVWT1MRZWYraiiq7Ocqqqwt624tq+rpqurvcm8sL22wq+xrLPEw87Pw76/tMDCw7q/s8jDq663rbK4vr6yra2rpKeqsKinqLGltK6rsa+tsrG0rLS8pLizrayvqKufo56wt6uqrbu3pbe2pKmnq6uqrqGpp6axsqSnpaGhrJeqoZWboKaepaKrpK2jn6exuK6uo6ajm6qrrqmdoqWkpJifm5aPmJySgYKPiIWcn4uKjouYjY6JgouXopuRkJqLk5KRk6OZm5qKjouLfYaBgYN6c3+CgHxydYukh3hrXmBuZldlh2NOP2eTTEVieVdiWVJlVE1WVVZUT1xdYVVLTmhWVldJSkhJT0JHSVNRWW9BTVhAOkpHRkVHPj5FUUg4Q0tFODdDNzI6OjoqMzk/Li80NjMpNCsqLCsuIzQuLSsmKCs3OSomNis8LTIsJjA2VlouMEpnQUE8PEIrOkpPXjREhj1HRkSXk7Gmo6yxmKuqrbastrKspqyqqbzAwLe4sru1prKvxMnL0b/Au7m/vsG5wbnAxK2xtbGzusC+srCurKqrqLaqpq6vqrmwqLKyr7Ott6q3t6e0t6uspamqnKSetLOpqKS0taC3rqCqqKqoq6egq6ypubWpqqmpoqqgrZyTqqGdoKWipqOqn52ntK+opqqjo5ilp6eqnKKko6CZmKCRjo+YjX6HjIeDnZ2Gg4qKjo2Oi4KFlKKajYyZkJKRj5Ofl5mWjIqDf3SGgX9/eHSCfnl2foCHnY9vcmdncHdcYXOIa09emVZIbXhVZFZRY09NVlRVUE9YW2JVSE9pVFZTR1BZVUk+SUhPUVB4TE1WPTxLRD9AQTxAQ1VDOUFLPTU7RTEzOzo3KjQ6PSstMzQxKjgqKisqLCkpKC8qJiklMzssJDIpMjAyMSYvMlFiMDI/Zj1OWD5DLD5MVF8vSmk1T0Q8lo6xoqarr5qspa2wtLWwrKawqqi6vrvAsK65rqG2sMjHyNHAvr27u8G9usLAvr+usrKxtby7wrGxs6uzqaS1qKWts7O5saOuuLKwsrururCqrrarqp+qrJ+joLatqaGfsLOitaqeqKepo6qhoqytqL2vrK6toqiooKyZkLChmKKgp6eeqJuZqrGqo6CuoqGUo6OjqJiaqKWYl5iej4qHlYh9jYaEhKOWhIGBi4aNi5CDg5OfloiRnJCTkI2RnJSXj4qGhnd0gX98dXh5f3lzc3lnf4akdmlfZWuAdGeIjH1TWG9eSnhzU2RUUV5NTVJaZk5MVllkWEdSaFJRP0JOUWFROklITFNJcVFMUzs8ST87PD07QEBXPDw/SDczQ0IxNTo5My01OjopLTMxLS01KSgrLSw0MiMyKScsJS47LiYxLjAtMTQlLDBMZzo0OF89YWQ/RjFDUFtbKkhNOVVANJGQs6Glp6ykp6Stp7WzsqulsaequL7AvK+nuaqmr7HJx8jRw7y/vri9vrzIusG4sK+0sbq7uMCysrqsuKyitKenrLK2ubOoqL22rra+sL2nrqy1rK2cqa+joKWtq6icnquzpbSom6qnqaOpnqOpqKm9rLSwrp2qpKGunJuzo5aknKWln6Wcm6mrpp+cq6Kck5yipZ6Yl6ipkpialJCKgo+Ffo+DgIidj4V+fYuHkI2Pg3+TmpOFk6KMlJGLkZuSlYeJfn9ye3p+fGh4fHl0b3B7Z4R4hIlkYWdhcoR6bWd4XV5UP1d7bVRiUFFYS0xOcnVdSFpbZ1lFVWVQRD5KT0RDQTlIR0tTP2piSlE4PUg8PDw+Ojw/VDY6P0M0NUg+Mjs1OTAyNzw1KC41Ly0xMScvPktIMCUaOTAlLCwwOS8sLCs2JzE3Iy0wR2pJMTRYPWZjQko3R1NgVSo9OURXPSqQlbKaoKCqpqWhq6W4s7OmqbGmrLjBvbWvoritqKiwwsnJzMG2vcC0t7+6yLXCtbOytbK8t7m9ta25tb+toLOnq6uwtbi1rJ++vaqzwbS8oa+ztaqsn62wo5ymqaqknpulsaewoJ+rqaehqZykqKGtvKiusa6hq6Okr5+fraaXn5uho5yfnJqkq6Ocm6WllpeVoKOXm5elrIyekZGRi4KKgICOgHuZlI2Ie32Lho+Ni4mEkpiQhpSjiZKSh5CakJOBiX15a352eXhjfHpwb29xdmeAc2qEaGVnX2xzjWxhaW9gbz1aeWtVXk9QUUpJTVRaV01dXmxXRFdfT15QSE1ERjs3SEVLTzxyaEtLOUFFOzs9PTs7PUo0OUI8MztHPDQ/MTgtNjg7MigwOS8sNC8uPS0qSz4pHTQ5JicuMzQuMCsvNCYsOiQ0MUFoWTEzUz5lX0RMNktWZE8qOzFOVz0jlJmtmqGYqKWjn6ikuLCvpK+wqau4wbmzrZ+5r6uotLrIy8i/tsK+r7S9t8S2w7KuubKzv7S6vbeoubi9qqO0qKmqsa66saqcvL2lsMG1tqKvtrWnpqews5+epKaooqWZn6yoqZ6gq66moKaYo6igsbmfo7GvoayhraScp6apmpqbn6SVnZ2bnqqnl5yhqpOZlJmfk5mWoamRmomOkIZ8h36CjX18oIyNiHiCi4SJi4uFh5Oaj4mVnoiRlYKMl42RfYV8c3B9cXR0YHp4aG1vcG5ofXFje21pZWJdZYV+X1pzanFKSX9pWFpOUExKSFBSUUlPXF9uU0RYWlJoT0hLRUY1NkhCTEk1WmVKQDZFQjk6Pj0+OjpDNTk+OjNARjwyQDIzLjo7ODMmMjwwLDg1QiopLUIqLDQ7Tk5AOzczLS4rLTcqKjwlNTM8ZmQyNE0/ZV1GTz1RWmdIKj4vV1U1KJeep5qdl62hoaGkoriqsaW0tKmoucS1s62ft62urbC0xsjAtr7BubC0vLa+u76vq72ws76wvMO5qLu6t6entaioq7Gts7GonL+4pq28t7KfsbewqKWnr7GboaSgpaWgl5uwp6Gfo6ivoZ+hlKSkorewoaaxq5+so6+YnKqkqZ+Xmp6lk5udm56nq5qcnqaXlpiWno6Tl6KoopCJi4+GeoR+hIp6jpaJjYZ4gYeDh4uNhY2TmI2PlpmKj5d+hpiMj3qBenByd29vdF95d2Rra2toZ4JtZXJra2RoWGFzf15abHVpWUV9XVtYT09LSEhSVUcyOl5ebFBEV1VZZU1ISkVFMDdGP0tCNklKSDs2Rjk0OT49PDk4QDg7ODo3QEk+ODw0LTM8PDc1KDU+MSw7QTEoKzY8IzhSPSoxMTM+RDUsLSc0Mis7KzEzOWNsODRIQmdbSFRDVF1oRS47MV5RLDKWpKOYlp2qnqaho6G4qa6hu7ilrL3Es7CuorWvra2vtMTEvbO+urews7m4uri6rq2/s7S4r7/Bt6u9urSlorOrqKqzrK6yo53Dt6apt7ern7O7qqemqK+rmaKnnKSnlJihs6aanqWpqZyhoJSln6S5qaSnraaepaGok5+poaGhmZudoZKbnZeho6ycnJqilpOVlpuOk5Ojp6SQiIqOhnmEfIWGfZyNiYqGeICDh4iHkYWVk5KMkZWUjo6Ue4KXj4t3f3xsdXJtbHNieXRoZmlnZW2EZ2doZGZoaV5lYmlmWWV6YmBQc1RbW1NLSUdJT1NAIStpXmpMQ1ZVXmBLSEdFQy46QjxGPDZLUEQ4OkQzNTc9PTg5NT86OzQ+OEBMPT45Myk4Pjw6OSo2QDMuRTQoKyw+MC1OPy4rLTctMTE5NSwmLjUtODA1NzZgdEIzQ0RoW0tXR1VgaEIzNzdhTCcyn6Slk4+lp5yenp6kta2nqrq3p6zDwLevrKK1rqeur7fBwL2xwbewrrK2tbm4tayqvLSvsrG9wLeuvLyxpJ+2rKamtaqrr6Ggxayqp7G1rKy0up6oqauxpZidqp6opZKapq6jmZ6kqqGboZyYoJ2ntqavqq6hoZ6doZWgpp+ioJmcmpyTmp6Vpp+uo5iXn5aVjpWYjI+YmqigkIeKioh4hXeCgoKch4qCiHt/hIiGhJCElpWPj5CRkJGMk3uDlY6Gc399Z3lwa2tsZ3Vza2FnZGJzf2FkZWZlaWliZm9aXlhdbGNhTWdXW2BWSUdIS01SWD85YGxpR0JVU1xbSUhGRUEuPD85QTg5UkZANzpCMDM3PTc2OTI6PDk3OjlETT1CPDAqPEA7QTwtNUIzNz0rKywvQSpKSy4vKiszNzIyKDU3JCs3LjcyNjg1XHlOMj5IaVpMWkpWYmZBOjNAYkYlNZ2koZKMrqCamaCXpbSyo7K+t6Gxxru6sLCjtqyrrqm5vr27rcCyr6+utq6zubOnq7mxr66ztru2r7m+rKaetaugobGlq7CgpsWhs6aws7C3rbWerK6srqKZnaeqpp+VnKemoJmlo6mcmp+clZ2erbCmuaeuoqGamp6Zn6OapZ2Xn5iclZqhk6mXraiblJ6dlI2Vmo6VlJinp42NiomOe4F0goKLmIWGfImIhISKjIiShZOckpGQkJGXj5B/gY2Ng3CCf2d5bmhramdxcmtbaGNhcn9gZGdrbmtmamZkbFxtbXZxYVNiaGNlWklHTE1PWVFQVmFlgVRAVlJaVEZHRkVALzw9Nz82PEZOYTg6PzI0OUAzNzgyOD83PTg+RkpARDkyLT1BPUE9MDVAOUAxLSsuNDw7SzYvLissLTI0OjUjMyopNi41NTQ2NVp8XTE6S2pbTVtLWGRjQEExSGJCJzSUo5yPj7Gdm5Shm6mzsJ+5wLahtMK7vbmxprawqa6luLq4uKy7sK2rq7eqtbmtpbK1sa+psba2sbO2u6epoLapnZ+qo6qunavEma+msLG3taysnrGtr6qim52krKmclZynpJ6ZqqOllZqgnZKco6uqqbqep6Sgl5qanqGPa6OWmZ1xg5ecpYF2kqyonpWXopKKmJmAl4qfj3iFk42DbWl+d4RybIaKhn2EioZvXWRgZ4SXhmuLkJSSdXiLhH+DkIBniIBodmlmWF1pdG5OUGpjZnGCZl5kZm9raV1cXomQhYhoT0tDOEVUZ11KSFBQVVZMSFNhcHRlRltRVVBGR0ZDPjE7PTY9NjwzZlw1Ojw3NTtENDg2MDpCNz86PkZMQ0IzNDM9QEBAPTI4QEU9MSwsMDg+RzcwMS4qLiovNjY4LCMxJzIxNDoyNzZYgWwxNU9rW05cS1tmYj5HMU5hPCsvjqSaiJWxm52ToJyrrqujvcWvqbfCuL68rae2saarpLi0s7Owua6qp6y0pbG1oqe4trWop622s660rrSiqZ+0q56jpZ2nqJuwv5Wop7G0ua2upKitqqumoZ+coaionJehpqacnKeonZOeoJmRn6iqo7Svo6KjnJaYmZejiKGPkpqIoYiVn6J/pYCorZ+UlJ6UiYRyeIyOg4igdYiNaZeJZn5zeaBvh4eDfox8f6Ggn5l/e4eedIiOdpuKbIeCg25pZWR7bXJiVIZtY21pmHFYaXBuhlddaVtralqIcG15codoh4RZXkZNPkZeTUVSVlZRUFJXVGdeTFpMUlJQRUZHPjw0OT05PDc7MDw8Nzk5OjY9RjU4NjA8Qjs8OT1GUUc9LjU8O0A9QD41OUdBODIqLzE8STovMDEuKi8oLTQ1ODMlJjIxMTU+MTw4WIN0MTVSa1tOXExbZ189SzFUXjcvKI2nmISdrJ2ZmZ2fq6qoqr/Dr7K6vLjBv6qkt7GqrKa0ta6vs7arqaWxraW2s5ustba0pqeos7Gtsqiunquhs6mgpKWboqWesbiVpqent76mrKepqqunpqKgmaGopJqZp6OlmZylqpaTo5yVlKSmpqG2pKOgpJiVlJiUnIiukJiViqqMmKOdhrGBpa6elZugl3qC1Kh/h5TAm8Z4d7Glt5ZkgMCcv3mEhHmPg3yQkJHKcZa8nMV7cranupB7gWyXsauxeWhsWLGub2VpvJK8bmh6bXCP2H5Ta2K2sn6AcZR1mqGqkFZOWGFPVk5GVVxYUVBSi1xXW1BAXERQTkNGSTw8NTc9Ozo5Oi49Ozg3ODs5PkY2Ojc0PkA+Njk/RVJJOi41PjtCPD9BODpKPjUyKjIyQkUvLjMyLisvKS0vMTg2LSAvNDE2QTE9OleDdzExVGtcT1tNXmdcPkwxWls0MSGPp5SBp6qfl52epa2yqbHCvbK1wLW4v8KrprStramosLWqsLa0qKimtaWoua+csrK2qqWkp7KvrrGmq56npLKkoqGgl5yioLKvlp+kobW6oqqooKytpKKdm5qjqqCYm6mhn5ieqKiRnKeblJ6ip6OhsKOen6OWl5OYkpmFr2tqi46qf2iFloetZnGfnpabqJdxrqGkfne6fGyhj3axX2q0W6WAZZyQYGaBemZ/aXhqqWW+cmemjHaxanyxeHWRlGNtbaduXISgRWlnh5ZFdZxgfWZ7o6aCWV+Lq2h/kXh6aqg4Sq9bWFRtY1pMT1hfXFdWO06IUFdWL0lTU0pDRUY9PzQ2Pzs4OjkwPTg5OTk6PTxEODs6Nj1BQDY8QEhRRzkwNzxBQz5ARDhARz0xMy0zM0UzLy41My8rLyguMC46Ni8nJDIwM0IvPTtVgnYyLVZqXE9ZTF9nWTpNNV5YMzEbkqKVg62npZ+jpauyuK20vb6wt8WyuLvDp6mwrLCpqrGvpLG6sKWlr7OjqrmpnrOysKOloaqtsKyvpqifo6KxnKOdmZaZnZ6wqZicoqC1s6Gqm6GsrJ+empego6qdmZ6loZ2aoaikkJ2jm5ihoKyfpaagmqChlpWRl5GahrWbtXmGqpq2mXeHs5u3f5SXmKyXf2uBpnqBhYeRlJJ3q2dqsVuse46HlHSIcI6GgH+IkJd4g4KKl4yDoI+FsHZ3n3Fra218i0+lWEhjY5l+Y2ilX3lxdVKSh15QqW5jcXyGgGGdL1KibltUa2dgTEtcZFhcWkI+sHdXWEEjTWlGQkRBQEExOT44ODo4NDs6OTw5OkE6RTo6OzY6Q0I4PT9LTkg6NTpBRkJBQUQ8RkQ7MDIwMTtGLTAuODQwLC4oLzMsPjgzMR8vMi1EMTw8U31uMytYalxPWE1fZlc3SjlhVDUwHJeglImzpqahrqmos6yqu7bCsLzDrbm3wqutra+vp6+zqqKvvKuiqLWto6y2paWys6ijop2nqrOpsKimnqCgsJagmpaWl5ugsKObmqSota+hqI+pp6qbnZaYoKapmp+do6CcoKOlpJabnpianqOrm6WanJqioJaTkZOTnYTVk5m5cbHCf8aHfdaUnLt9nJeoko+djaR7jYaigaWCeqx5j51Wr3uJfp9quVq5d4WEfaaClHyZeqp5jp2Qe7FtjoR0kLuGb5VQr6fFilGgemNgqmJzcodsl4dfUrW0yIV/iXxjpDNCnXVcUGpoZFBAWGZZZGFKSE1rSltTT1lmWkNDP0U/MDw8NTk8NzQ8Ozg9OjxDOkY6Oz42OkBDOzZAT0xIPDo8REhDQkNEPEVGODEyMTFEQi4vMDQ4MystKS4zMjM5NzEjJTUqPjM9PVF3ajYqWWlbSltQX2ZUN0g6YVA3MiWco5OZsaippbOqpbSnpLy3wbC6wLK3tb20tqiysaSys6agr7apm6i6rqOwsqGytLGhpJ6eqKmxqbSppZyenqyXmZmYmJaZoqyem5eprrGpo56OrKKnlp2YnKGnopiioaKhm6KjqJyfoZ6VmZunoZymlJubn6CYkJKVkJ2Ism5otXGriHCOp3O0dXS2e5yZpo6QnY2jfo+eo36wdYOR0tJ1XK58hX+kbpuqpmqGhX2tfZiZkHuxc5Odj3mzZZZ0hZ5un2aUUsmLWsJcn3liX61fdnOGYpeIXlnKnW/AgHRNS7VTVcZkVVFqY2VYQU9qX2xpUFVGSTk9V1JbVllIQj9KPDI/OzU9PDU2Pjs3Pjw9QztHOTtANzs+RDsuQ1JKRz4/PElKRkNFRD5JSToxNzQ2QD4vLjI0MjUyLSkuMjYsNzQyJh82MDs1Oj1QcWg5J1dpXEFOVF9lUDVHPWFNNjIuo56Rpa+tpam6rKa1pae2u7yyu7+4t7W8vLSmtbWjsrKjoKywpZinuq6ksrGdtLiqoKWdoaqlsqisqqWanZupn5aVmZmTlKSqoZiTp6uxpqGWkqyfpZKUoZylp6CVm6anopujoK6aoZ6ekJaco5+cpZSdlZminpWZlpKbhax8eKh2o4+Lh6lwrouEqISamqOLk5qLon2Sl4euhH+Cs1xyslOvfYKCo35x1313hH6PnYaZmnevhoqRnIh3tGGaZZqCgZVskluwV0uadZh5ZmCtXnZ3h2eYiGpdr3eVn494bDV5yK6zX0NUb15nYEVQbF9wbVZVTS5lY2hSWVA7QURATDo1PzkxPjwxNj85OEA9OkM6Rzs8Pzo+PkU5LUVVSkVAQzpNS0pCSEc+R0s5Nzw0Njo+LzA0MzMzLjIuLjE4Ki4zMiUhMDM3Njc9UGtlPiZWZ1xAPVZfY042R0JgSTo3N6CdlJ+3sZmzwayosqeqsrq4tLm+ubizt762prm1obWtoKCprKCVp7asqLGxq620pJupoKCoorWnpqqkmZ6VpaKUlJyZkpWkp5uUkKetsKWglJipn6KPkaKaqaahlZqmqZ6dpJ+tnaGdoI6Vn5yfoJiYnJaXoaCUmJGmnYepfn+meaGPkISqcK2NgqeGl6GiipiXiKOBkIaUqnp/i515cLFaqIOCiKB4dNh/dod0p4GOm42SpHyVkJ+Ee7JenGSgfYKVbpNcq1xbk3+Rf2hnqmNye4BqmIZxXqtaiaCPa25lT0pDoVxaTXRdYmZNWmFfcnRfSlU2SpqRWEhFPUdFQUwzNUE4Ljs+MDVBNzhAPDY9PEY/Ojw2Pz1CNy5IVkpFQEg2S0lOQElLQEVOOjpANC47PjAwMjE1NCsqMDUvNywmMjEoJCQ2NjcxPE9lZEEmVWZbPzFUX2JMN0ZIX0MxPTeinZmYvq2Ys8Kuq62oprSwuLG1v7m6s7K5vKq7tqGypZ+mp6eflKqxqbCqtq2qr6GYoqCmpKS6o6OsoZebkaOglZWempSYoaGQjoypsLCmnZaap6afjZKkmKisqJWYqaifn6CkrqOhnqGOlaGZn6CSnJeclZ2hlZaPq5uPrm5ytHSpjHeLpnS0enW0gpSmpJSdjYmkh451uG6Le4uia2u2WqGGZZeXaKCip22UcrRzk5l/s2qFkoitanW0YZ1mom6GkmuXXK1gTqF8h5FSc6NseX9+bpiGcFyvVjycd2ZUb24uW6dPYlJrZWJsWmJcYHB8Y1NaUT4/bG8yQkJAPk06ITdANi47QDM3QzU4Pz8zOzxDREJKRk1JRjYySlRLRUJKNklKUD9IT0NGUD08RTUwOzswMTAvNzUsKywzMjYvIzAwLCwdMjg5LzlOYGVEJ1VkWT4vVV5hTDVGTV44MUE4pZqbnLqjnLG/rq2rq6e3qbivtcG1vbKxu7irwreqrKGdp6SinZKrq6e2o7Oorqqhl52ooKWruJ2jrZyWmZClo5aOnaCbmJ6gkZOVq7awppmTm6ypl4yUppqlraORl6uypKCeqKywmaGjkJmil6CblpuXoZOcqZ2UkKqZh9SUmrt1scSAxId+1pecuHmKkpmOmIqMp4d5orZ1fXd2woKasmGDunnAfHW4YrWBjIepfZaCrKlxe391vIinoGmdYaaOr6F+jHSHq32+bnO8dLKDdXiBim2aiHFtjaR0vV13fVthebxqWlZbaXleaWFkZmJteW9YW1lDQUBxP0NHKzRIIic7PzEwPD83OkI5OT1DNDxATlpeYGBfX19aUFBSS0VGSjRITFJASk5FRk9CPEU4ND05MDIwLjg3LSouLzE4MCItMSwzHiw7OjA4TFhhRidUY1g8L1ReYEs1PExcLTZAOaean6G7o5ixw6+tqaqssai5r7fFsbuzr7ywrsGyraajn6SinJyRqqWqsqS1p62kn5aaq5mnrbido66ZlaGQpqCTjp2jnpifmpGWk6+5sKuVl6Onp5SQlqWdpK2fkaCoq5+bn6mksp6jpY6nopWimpyXlaSZkLCgkpWqn4WQmbaAkpKNuJZ4g5ObtndubG90b3mPhI6Jcp7Bu7yZeoGyqHCAdJG5g3yGhoqHjXuKho2XfaS7ub2cdXmzo3R2l3V0sHWYnmaGaY22dHJxd7aMXn95fYlng3lteWKLrHB1hX9YW6dpRGRZVGZfY11jUWdmcW11Qk1PTEQ7Wkw/SjM8MCA4PjsuMz1BOTk/PTs8QzZCVFlaWltbWlteYGJgXVNHR0g0RElUQktOR0VPRj9HPDc/NzA3MC85Oi4sLy0qOC8lJjIoNCQoPjcvN0tUX0cnU2JXOCpPXV09KztWVic9OjymnaGhv6eWs8Kzq6qorKuqu6+xxq+1tLC4p7W5rqukoqefoJ2ZlKykrqqmtqion5yWoaSerKW+p6Gql5WckaKbkpCiqKKTnpeSmJSytbasmJ6jpKKLk5KmnKarnZappaacmaCop6ejqaGSrJ6Xop6XlpidnpCwqZScp6KPa39qnKl5iXR/m492e2aHe76/wLpvkoNxlIVfcmpaXZqJYWSHjpVrYH+UY22cdmKUa4CalZRlXmBjcZqJaHKMfIaUZmp+cXR5fn1iW3h0gWhQXG6DfHuKalhseYFySUpvhXBOc01EVlxmYExaV2ZjX09abXZqclJPREVNPEhJPEw+MiwyQT84LzU/Qzw5O0A7PUM+UlZWV1laW1tcXWBhYWFgXFVHNUNGVUVKT0hGUElJSDs4PTUxOi4xOzouLy03Nj01JiIvKjIsJTs4LTdJUl9JJ1NfVjQpUF5MKDM+XE8nPzI+qJ+oocKkmrS5tqOspq6nqLWyrMissLSttqS+sbOnoaSqnaOcmpqsp66kpbWqpJuYlaKcp62pvqippZWUm5agmpOZpqmokZ+Qj5icsLK+rJunnaeiiZOSqZuopJycrJ+jmpqip6yin6qimq6blaagl5Wdn52YsaWZoqiZnZKfnaSmm6ikm52anJuRl4Jobn1yd5GXlJCEibSqjYWYlY6KjJiWh5SViYOTk5CJjZGUmZOZl5qfoZqblJ+bjYJ6pIVsaXuRfYB1iYuCcoJ4eXZ1ioB7iWpzgnSDdWR3fXZrcHpsX2Jbb2dNWFlmal9XWXB6b21mU09GUjlQWk5STygrOktCNjM1PUBBOTpDPjxFTlNTVFZXWFpaXF1gYmJhX15eW1RLQ1NHS05ER1BMT0k8Ojs0ODksMjs4MjApNklSTzgiKSsvMiM0Oyo3Rk9bSidSXlQxMFReOis9OF1LLDwtQLKgs6K/oqOxsbegqaazp6WwtarJq62yprWmwKi0oZ6lppyllpagq6eto6S3rKCZl5agmK2qpsGfrKSWkpyXn5iUlaKfnqOok5GZqKiyw6+Zq5yqno+Wlqmeq5yeoa2YoZucoaWvpqGkqJ6smZemnZmaoZ6enbChnaKnlpmUmpSho5ekoJmhjpeVi4uOkJiuj3yVm4KRgYmpqIaAl5aKhI6fiHuEkYaFmpGHhoqVjpuXjpCYnqOWmZKQnI1/jWWhs66EiYR3e5CKfnd5em9neZCBgIlrdYF5iHJpdH95dYOHgWp0Y3dlX2hkY2Rmalhre3Fqa1xTTFBEX1VGQD8/LDRARjs0NTs+QTs8Pz4+SE5OT1BTVFZWWFpcX2FjYV9eXl1eXVhWSktMQklPTVJKOzw6Nzg2LzM5NjQuKCYkLTEuLikrKjclKzwoNkNNTEQvVFxRMDVNWzE3RTRcRzU8LECzoLmvv62rrbGyoKqmsq2irLOwxrCrraSzr7yktJygqKOhnpmXqKappqSms7WelZWempqwpq6+oayikZGempqUkpainJepnYWdqqyjtMezn6mkqpaWmJqnnqmcoKWrlJ+fnJ+qrqilo6uhrJufn6GYpJ6cn52wpJmfqZSZmZ6TppuZqp+cl2aEk31lf4+bkGN5jGxoanqQo6trZJmXfmeFimVlaWh6jaKOa2iMl5Gid2tqi5min5hzbG56hIyGeVhlXYWCXmyLioJ3XGdzd3eRgIeCb3iCeH9zbXmEc3eIiI6De2mFWF1qc2Rdc4hpa3xxbWNdUU5XSWRYQEozPUY3P0ZENzE8PT9BQzs7REdISElMTk9SUlRXW15gYWFgXV1dXV1fXVpVT0RIT0tTTj0+PT02NTM1NTU0KiYmJSwqJS4rKyc2KiQ7Jy9BSVtKLjZaTzYpRVkvRE8xWUI7Py49pZ+6vbqvrLOwq6Wora6wpq6usL2xqqilrrCwn62YoKSeopqap6ycrKOmqKmzrp6WpJCjsKa2uaWuo4+PmqKak5KboJmZppZ7payiqLTDt6Wip6+fnZWeo56jnaSqqJKfoJ2fqq+pqqOqnqebpp6noKyWoZylsaSXnayWop+blKaZoKyZn369hIlztHOFn4ataHe5xLhxkqGje6aYmHOqgnzLwMC6cYujh4OefZaYiJ7AvYKWnZ2NnMHBfIF6kYyawsB9a6Wyb42Bb8p6f5t3kYOOgHd5gYB5cXuAhnB4hYuTeWx1kWJlXndjX2WAYl50aG1kYlhLVklRWkhPRDJJRT9EQj4vPD8+QEE6OERDQkNFSElLTU5QU1ZZXl9fYV9eXl5eX19fXVxTTVBHVU5BQD89NjQ2ODI2NiomJSMpKiYuKyopMTAfOSojPklbTCojQ1AvI0ZbM1BZL1VBQjsvOJaiucO0sK+/qamUo6+psK+tprK2r6qmp6axq6CrmJujoJybqqeinauipailpbSknqOTpq6suLSnr6KSkZmdppORoKGYm6CeiKarpKutv7+xoamvqZaSn56imaOkqqOToKGdnKyuqKumo6Kln6SlnK2pkaSbqa6qnJ6rna6jl5iml6KkmJ1/zpR6e6WCepaXm1+tj12OqIChoX2nlZt0q4OAr15kjKp7qIeFoHSXk4izY4KrhqCNjbNqhK90fJaHuGGCrlmjzW6Qdnvbe3+ZcX6IknV/ZXuIdnZsfodufYWQkX1rgIxfcGpvZmBfeGRbcWhqY2ZgUlRTV15KT0M1QUhFRDg+NTtAP0E7PThAPj8/QkRERklKTE5QUk9TXF5fX15dXV9gYF9fXVtXT1VKPT8+PDU1NzgxNjQoJyQhJywmJi8oJiszHTYwJDc7U0wrLC1KMCc7XDpMLSFQQEY0LjGswcC/tLSwt5iekaOqqa21rKayrayspKymsKqhp5yappicoq+foZ+op6OmoZ+wrJuelqaurbCrqKyglJKbn6WTkJ+ll52oo56to6qwqL/Fs6ipsa6Wk56copehqqqflaGenJutrqapqJumpqOgqpKss5aloqqqnqSnp6KyopObp5uhm5WUkZegcYaMmHaFqIdxsXydcax9oKCBpY+eeKuCfq1/nXKtf6yHhp92mJJ7fJd+qoihi5GLnH2reoiSj59/eq1WnMR7kHCTwX2BlW11cIxtZndlhm9hd25yboiKkI+DbI+OZG1zdW9gZm1kX29pam5mY1dTXGBaUlJDOUlJQEM8PjxARkRDRUE9PDw8PkBAQUJFRkdFQENJU1dZWlxdXl5cXl9hX15eXVtaUkM+OzkxNDc4NDUyJiMfHCAxJyAxJx8nNB41LSY3PVdKLTwoPTEpM1ZARiEcRztDMS0rr9PGx7Kzn52jj6Oioq2vt6+psaeoqqiuq6unoqSdmqOWn6aroKKmoKioo5+esK2Ym5aop6+sqKepnpeVmqSikpShrZqdp6OvrKKstam5zLGtpq6rlpWcnaKZn66snZahmZ2dqbGnqaibqqijoaqbr7GiqKuuppqnq6urs6STmKSmm5WShaRqpHWKeql1e7JxgqWKmIxwiKCbh6RfYVKrhYCug5x1roKohoafepmXhntmgKOKpJiGgaN9qX+BlIauXnuoVZ2ikoF6o5+AfMSwxYxzr7SzuXJiqa/CdWiMi5eOgWyYkG5seHh3bmtmZGRxcWZ7aWNcVl9pWFhUTExRTENDQUI7Q0BAQkk8PTo5Ojw9Pj4/QT04NjtETFBSVFZYW15eXVxeYGFgX15dXF1bU0lCNjc5OTY2NCwmJCIgJychKy0iJC4hMy0mQERXSCxHKzU2KjFQS0wjIEE5RDQsJ8LJ1dbAoZmrqKGvop+wtbCwqa2jqKeqq6uopKagm6WfnaanpqSdrJqirKGjn6+jnpuTqqS1sK6gqZuclpWnpJGboqifoKacsKWiqLGstsextamsqZWRnZ2imaCltJ2aoZSbnqerqaKtmquooaGporOtoqqzsqKcq6mwsLillJekqJmdknyqbJ6EiHareXywboKki4mflpWeloHSuLS4yYGCsl9hlKmDpYiHoHqYlpp5qsl0mqOUp6iQkpqMfpqJmsbGd2WhgqVzgZ+Ogn2vXm+1Y7F1S6OGbadHg5Nkjo+ckXtvlZB9bnl0fHptW2VqcnFmgGpeYVhjbVxeWUlMTEpFREJBPUE8QT9KOzc5Nzk5Ojs7OzMuNjxBRklMTU9RU1daW1tbXV5fXl9fXlxcXFxcWE1CNzU3ODUvKSglJiUkJiksNUZOUFBNRkxKVkYqTDAvPi00TlRRHRw7PEYyLCSopMDGua2psq6tpaKds7msq6Gmm6imqqyppqCmpZiqo5+urJ2moa2an6mlnae1oKOYlKirtrKsm6acoJaQpq2Smpyno6Cqp66ho6epsLPBsbKpraiUiZidpZuipK+ml6GVl5ulpamZrpyrpqSeq6O2rKGxubCenLCotLS1ppaZqaSboY+CnU54moKAn3qEo3yCpISGpp+cn5SEuHx8ermCf8zGw7Z3m6KRi59+mZeXinafl4qkmKSnfq+Fm4OehKx9mZRhpWyjcI+FkIF9loRyrGCkc3GAmmG8fVJVdY6RopZ7fJGOh3J5coN9cFxsbndyaoBuWmNfaG5iZF1MTFFTQUhHRkg6Oks+QjEwODg1Njg3Ny0qNT09P0JER0lMTlBUV1lZWltcX19eXV9fXFpaWllVU09IQDc3Mi4sKi4rKicmP1FUVldXV1lYWFdVT1RGPEUyOlBbVBwbNj9HLC0gjIeZqaykq7mrr6CboqyztaafoZWlr66uqKeepaWapKehsq6iqaezoJqppJSjtaOjlZehqbW5pJyjnaOTkKKymZ6bpqWhoq+tnKSoorWxwrCtqq2qkYeRnKedo6SdpZeemJiYpaOnmK2hrKKkl6+lu6yit7aunp62s7qztaman7GipZ+Hj9G1w7d6h46FkZOPgKZ4lKJ3jKGShaWDi3Krh4a0bnJpmaSdlYqffZeZh4eQc66CpZuijKaKk5yIlJCabXCyXKVzk3qcbJl/e5l+bqlhonJyfp9ic7K4aHePk6SXfYqLkIh2e3iNgWxod2l4c25+dFxkZG1tZWhgSlpXWDxIRj9TM0BGPjwqKDYzLjAxMykmNDo7PD0+QENFSUtOUFJUVldXWV1fX15eYGBdWltaWFVSUlFGOjIyMzAvKysoQFFSVFVUU1RWV1dYWFdVVVZUUU9RW1UlITJBSCMpJZJyjYquv7+8u7Wel6ikrraio5mVo6mnramqmaWin6ahoLWnoqmnsaSUq6OPpK2knZCamqq0tKSdppypkpSXr6CgnqajnKectZmgqqO1qsKvqaupooyEj5yioaajlpqanJial6WjpZepp6ygo5uspr2slb6wrZ+jsbS7rbapnau0pamZe6iRfXyweIuApKWInG2yb6GHrXyij4Ool5qBrImGrYWglKigo5eFn4GZloF7kn6rgZ2Zloqqd52gj4iTkn95r12jgXymp2SegHyXdGuuXaVscoWZXWBbjKBtlJClmIKTi5OJeHmBln5qbH1ifXRtf3lfZ2VwbmdnaEJZX1o9SlMyUzhBQUM3JCQzKycnMywgLzY2NzQzNjpAQ0ZJS01OUVNTU1ZaXV9hYGFhYV5dW1pYU1BPTkk4MTUyLiosQVRWVlZUVFVVVVVUVFVUU1NWV1dYVlZVUUhGSUojKCi8kpuEqcbDtsG0n5qtoK65pqOOmqOjoK+uqZ+jnp2tmZ65oKOroK+qmq6hkaqppZaJmo+tsKynoKibrZiZj62ioZ2loZmknK2Xn6iltqi+rqSpo5+MgI6bm6CmnpKUmZqTmZmlo6KYp6qqoaOeqai9pJfDraujoqyzu62wqaO1saqsmXavfpCKnIWHfbqtiZhksIxllq19oY+Dp5ecgq2LhbCGp5qkoqKRhaBcbGuCs2B/rXt7goCxbGZumZeLiLFafbRcpINryKJmn4F7u1l2tVqyfVOvgXqsWIChbZeOp5mIlY6TlHl3jJt9Y3N8YoN4dIB8YWpmcG1mZWVPVWNcQVRePUgoPjk9NCEhLCQfMi4gKjEvMDQ1Nzk6PEFDRkhKTE5QUFJUV1peYGBgYWJeX1xbWFVQTUpHQzU1My4vQFVZWFdYV1hYV1dYV1ZXV1dXWFdXWFlaWltcWFdXR0I70p+zsbe9u7TBs6Ocraalt6mgi5mgn52ysaieop+dtZigs6iqq56wrZ6snJWuqKKOiJuOr6ypp6Ooma6Tmo+pmqGepZ6Zo6KlmJ6iqLGou66kqJ6dj32Lm5ahoJmQkZqbkpmXqJ6fl6espaSkoqSpup+gxqemqaGstbeusKmhvrCurpeBqZKjro6bgIakl5iQgIC4w7qDjp2ThKiZnYOsi4Oviqicm6arkX7VvcKqYqS/vX1/o4KD17q3tYSUkoKevb6EaqOBb6uEbp1/erKxx4Nrq7C9rXl4or67dICVjaWajZmOlJp3f4+ZeWJ8emSMZ3mBe2BrZWtqYVBiW1NpXEBUYEJMKTw6NC8fHyQeJTIgHSQoMDQ5NjY3ODs+QURGR0pLTU5OUVRXXWFcX19hXmBbXFlUUU1IQz48QT81PVNZWVhZWVpZWlpZWFdXWFlaWllZWFlbW11dXFpWWFRXWruVtLSxv7qyvbOina6nprOmnYyXpb+ptq+nob+mprKbnrGduaifra+lp5WUr6yXjIOaka6mo6yhpZyqoJiKo5OmnqebmqCoopidoKusqbisp6Oal5N7iJmSppuTj5GYmI+Xk6iYnpaop56opqGiq7qeqcWjobCkq7S1q7Kso76qsLCcdHaqpLeFZYmfcGeskIqPbm53pY+aoIF2sZuXcZGOcpeppJuYr6RybG1tZot4b26DmXGAemlwaWeJlpWXcWhphYZncIZkXYpjaW9aXWd+eKZgYnKPknBmZICNko6hlpWXjpObeoWNk3RkhndojGp4fnlkbGNmbGJLZVdKa1k6UGREUCdKOSsjHCAaIiwpGBsYLTIuNTo0NTc6PD9BQkRFSEtMTU9RU1ZcV1pcYF9hXV1bVFBMSEQ9OkFCN01YWVpZWVpZWFhZWFdXVldZXV5eXVxcXF1eXV5dW1tVV16ola20qbq5srOqqaKun6SzqpmSvbHDx7y0qZ6/q6yjoKeroLqjpK2srKaOlq2qkIyFlZetn6aqop+ko6CRi6WSp5mpmZajqaCWnKWlpq65qqyZmpOSe4SXjqaXjpGRmJSNl5Smk52Wp6KZr6adoqy5oLDCqKW0p6yxsquvrqq8prC5l4uhqaW1nImWopiGqZuQlJ2SqrSZm6OsorSYpKKfoqOdoqWilqynjJKTjYeTnZ2VkJmTmJCOlYR/pJqXlY6Lk5KKj4aEfmeMgXSDd3SHjHGnbX2Wk5SUgYGPj46OnJKelJWTnoCFk4twaI92b4p3dnx5aWxlZG9jVWFYQGlaR2JgTlgrRT0rJiE2NDAvHxwhJTIoKjc5OTQ2OTs+P0FCREZKS0tNUFBRV1VWWV5fYWNdXlRRSkVDPjk9QEFTWFtcWVdYWFhYWFlYWFpbW1xeX19gXl5eX19gYGBfWVlgpZapqqS1t66uorClraCht7GRjqrEvMO5tqmhpJ2bpZ2wqKS3p52ptKWnkZiso4uIiY+cp5atpKGaqJ6ek5Wjl6iaqZmUpqCjj5qnmKC0uaeqmJqQjXyBlYyhlIuVkZWQj5KXpI6dmKeem7Wjnaart6ivwq+kuKewr7Guq6y2vKOxvpmSpqSmtaKSnaaejamfjZKfoq2xmqGksquymqainqWrn5+enZetnpOaopyUkJermY2YmJaQlp6Rh6CelJSFk4yPjZWLgX9mjYh1iHd6iYR0nGqIkpaVkol9jJaRkZeRn5Cak52ChpeFeHGUcnmJf3F7fmpuZF9waWBcX1ltYlBgZE9YOUZGRT0yPD04LyomKykmHSY0MDY2NTg6PT0/QUFDSEpHSktMTVNTU1VaYGBpYGVWUEpBQ0I7OUVNVlteXltaXFtbW1xdXV9eXV5fYGFhYmFhYWBiYmJkYlxbY5iWpKijsLOsrqOpp62gqLWqkI+bo7K5raqroaKZepyisaSmsamWm7ilopSYqZyOhoqJm6KQr56klqigoZKXmZuui6qWj6iYp4yYqI6duLWjpZibjYl5gpSMm5OKlZGTkI2RlqGLnJynnZ63o3+Dr7WjsLB1pL+ksqB4eqKttb6Xd66loIqAqX5kXGJ2n46knoOWfm2UtJyjqK+spWagoZR0epuYcIGZqplsgKOpimWcpZyRl5iWi5KbkISdm5CUg5OHjo6SiYV4a5CIdodxfIaBgWFpiYyVk4xbdpWRZ2iPjXF5oZaVZHiYhYB2l2iDiYJueX9qcGVfdm9ra2dcZWNhYW9SWT1NTU5SRj1AVEI5MS8eHyY0OjMwNjY3ODw7PkBBQkZIQkdHSUtMVFVVWV1gaGZnWFFJPERHPDlVUltgYWJgXmBfYGFhX1xdX19fYWFiY2RhYmFhZWRjaGReXWaclqajobCxrKuqpamupKetpZKWqrSusKWZqaWql3OLna+fqKunlJa5n6CPnKSekX6IiJqejayapJWnop6Ol5GehXWuj4ilmqiRlqOIm7mzp6CYmIuJdXeTjZaTipORkJSMj5OfjZmepZibspaAjJu1nbSNko+9p6F+p6N7pbG6g46Pp5+Ei4WPsamvjImWopp5gIushpyeo6mrqYmWh5l3ppx7iJyBmKeDgXuds3uKhqCYmZWYloGQlpaDmZpieYiRhI6PkouEbnGQiHqCcYGBhoCHdIeFl5N4lmiTdKCadHuZgpyahJh+kYiBgphpjIyEa3h7cXBnZHhuaWxqXGRpaWVyW1xIU0xRQEU1LVlUVDYpITA5PT42NDM1Njg7Oj0+Pj9ESUBJRUpLR1JYWlhbYWFpZllRSDlETDw+YlZeYmRlZGBhYWBiYl9dYGFhYmJiY2ZnY2JhYGVkY2djYWFonZikn6aurquoraCpsaenqaWZlK3FvK+glKWntJ2Pg5yrnKaioI2Qvp6ZjZ+aoZF9ho+Yl4isnaOWoaGSjZSJhoCRqI6Hopyjk5adhp65saedmpOPhXB1kImUkIqUj46bi46RnZCVnqOUnauHn7SJtJqui8qIq6+Kt4WNsISzsYWpjqeYjZ18qI9ye3ecjqaWaJWkebSMoKCoqpOZwoKAq4mZoXKegJulfZeFlbOBoX2hk5+PmJeAjpSciZiSi3yFk4aNlZOKhG50koaAe3OHgYR9hXWGg5iBj8VmgKmHj6JqnYGel4CZgIqLg4iYb42ShGd3dHt2Z2h1cGdoa15jbmxmbFhlRl1RTDJFNDZNYGM3JjM8RUdEOjYzNjU4Ozg+PT0+Qkw/TklKTENQWl1cV2JeamxcUUU9S01ASWRYXWNmaGdiYmJiY2NgX2JhYmNjY2RpaWNiYmJlY2FmY2JiaZWXo6CwqamopqygpbmxqaummpSeoqSpoZSjqbWir3+gppylnp2JlL2ak42gkp2QeYOWlZGIq5mcm5qihY+Md5ucjqCRiJ6jm5aYl4aiuKylmZuNjX9ibY+Lk5CNj4yMl4uPkZ6Nkp6gmKCnfqGnh62doJaukKCenZGHgqCNrbGIpI6rmoyafqJ2gJmUa4GrdU2reIeNnZKcqqmCqqt+hKF8e6dqnoCTbGeXhpi3iZ5+bmBjWIOXf4x7ZGeLc5l9eZdsXXyXbmBTcYVcYG16hGBZZYJ+hYGZcaira4OjbnKlcJ+CnGdknmxabIh6ZVlfgn5hV1BvdmVtdHFqam9eam9sa2hXZ05dWEU5QDRHRF5rNCtJQ1FNTj04NDg1OTs2QDs7PkJPPlFSS01CSltdX1deX2N1YE1FOk1OTVRiXFtmZmlpYmJkYWRkYmFiYGJkY2FiamtkYmRkZ2RiZ2VhY2iYl56guaGqpKaskqK2vauuopmWn6Clq6ufnK20oaeRoJ+fppuZjpm0mZCLnoyVi3WBlJGNiqaWlpifnn6ThYaspIeckYqYqJiZmZGHpa+mopWZiImAaW6Ih4uOjomLjZGLj5Ggi5Kdn5uhpX+TgY+joZSgd5yWkKeDo6mAhqyvh6V6i32Emn2icHOTh5V7nox5bYecjJqSnaqcj4edfYOidHemZ55+d6VemHt9k3Oibpi3tLpzkoiBgLaoZIHGuHxwlbaMcYCbo2N0rKthfmqds35ufoiDj4OMmHGAo2xzpHOegn6jXpyZs5Zve5ees3RyW56ygmlib3N1cWlvWGtrcnJkW2ddYUxEPUQ1UUFacDI8UkdfSlI9PDM5NTo6NkM8O0BJUD9UTk5RQEVfXltZWGBge2RJQzhMV1VWY2FaZmZra2JiZWFkY2BhYmBkY19gY2tuY2NkZGhkYmdmY2holJaVo7mZq5yToI6luLWtraCaoZuio6SsmpqxrKuSl6CYoKSZmpSerJuLiZF4i4VxgJaNio+hkJOUnZd9kYmOqKCHmI+KkqKTm5qMiqinpJ6PloeEfmt7h359j42Di5CQiY6TnoGVm5+coJ+LiXecmKKNoHKhjImpiZ2okZiqrYCujH16oJl5o5N4gHOXiIycfZWfh5yOmp2niKNkoX6KlpCbjW2eaJuOb5qZe4CKp31yaHSqg52Cc6pnlJpdm4V2hZ1oqmqBuGZcqXCBnGGVjF+ndneKioCdaJp1h5OSmI5/nm2ZkGqmmVyofne7an2pWo6EXbNnW25xeHdraVtwaXd4YV5lVmFCUEVPN1ZCUm40SlpaXk5aREAxNTE7OzdIPzpDSFU/WVNYXT5EYl1WYFFhY3xpRUI5TltdWGRmWGZmbm1iYmVfYWFfX2BgZWNeYmRvcWBkZWVrZGNpaGdraZadiaq2nKiJY5WcrLuysKudpZuap5+drJmdsKeqnZaimaGfmZaWoKOZhomNaYiAcnuXh4yWloSSlJiPeoqElqSdiZWQhoudkZybiI+ooZ+ajJGKgIBpgYZ5f5aMe4iNjoiOlZl+kqGeoKKTmHJon4qgj4xwkoyCqYmaoaWqo6p+sK2koriXdqOzoqN/iJR4nXqqmX+ij56dmImYcqF9h42wtX1smpGheH6ZtaOjq6iEmXyafJyafnOqWl1ve5eLeJ5iTX97e4VkephCTZ9ZompzfI5vgoqEmXabeYeJsbN/fpqSpnR+nW1xfJRvmXJpo12VdkhlY2BzcHx9bmZfbGh1e2JjX1BdVlxUVkBZRVFnRVJWXGFYXklEPUI4P0E6SEU4TEVYQVdSWlZFRmFcWmBLYG19cUVDPFVeYlplalZnaG1vYmZmXmFgXF1eYGhiX2VkdmxeZWdmbGRlbGhoa2mUnYGxrpqEU16hp7S6s7OomqKLmqmbm6eSoKujoKePnp2cmpmVmKGdloeHiXeFgW55lYSQm4t9kZOWiHKAiZKhm3KSkIGImJSfmoSOqJuZlYuKinyDbISFcYGhjHiFjYiHkZeTe5Gin56jiK6GfbWEj56de6aWeqmCl56RjKOgfqdod21+mXOgc3F8nYWYb5OCrXyjhKefm4KkcF6paHajZHCmYZzTj3x7mXhyc2OihpB+onKij3Vrj7OLYIKYinSqsqi8f3eDbn+/pqq0Xpxvf3KXcIJzonJepGd0pmBopmya05h6gptudnmXa5t5dpdybKmlZ19keXB/g2xoZmRtdXdmX2FSWmVQUWFIV0lUX1dTW2RqW2RQRUNLTEpLQUpEOFBAUE1YU1hPU1FgZWVpU2R4eXdJRkVjXWVaaGlTaWhqb2NqZmBjX1xdXV9oYmFoZXxkXmRnZGtkamxmaGxomJt/saxUXUt+qa+ytbCyo5yYhJemoKCijKSnn5epiZmXmJOZk5Kgl46HhntwfYRofI+Dk5qCd5GOj4pwgIaPk5JsmJR8iJGSo5WDjqmak5KKhYl5hHaIgG6Bn4Z3gJKFh5iglXmSoqOZoImzoaK2i3qsp6SupXCpgJuRhoGelH2kgaKahphxnoSira6Jl4t/jKSNlYOvo5V3tba2yaJzlIuCn2Cel6lteZaHoJt1oYd3oH6QlouBb0xmo5Jxm4hzpXt6dWKDgm1+oGxyZGCcc390l2t7arS2tMamc5h+epxqmpqrdIGabHN3l2mZeXSXcVBEfbNeanZreIdma2Zic3RwbVVcUlhnT1JoSVVMWFJVXGdrblVnV01KQUpNS0hLTkFRSlBkY2ptZXVzc354e251iXp7VVFPbV5oXGtpUmpoaWxnbWdjZV9cXFxfaWJkaGt7X11kZ2NqZm5sZWltZaKdibCohWVAlKGzrK+vtaKij3+Wp6Kho4ukppybpoKal5aNl5CQm5KOiIN5a3mGZYOMf5efeXWPiIyCaoWFkoSLhZ2NeoyKlaWSgpeol4yRi4CJeoB9i3lwj6CGeYGUhoiVnpR+k6WnnJaWhGdueJxsomR8cqV4nJhwaKeCmY59pXuhl4OWcp92gImUlY+5bY+KomJ9maOXiW5za6trdaBtb6Zgm2mLkGmWh5uVdaKBfppgi4aNdW+IYmihZp5/apt1cGRniIJvcqJbX1tkoW5eiYxxfIB0cmSlbniiZGanaJdyi5dtoW9SiI9uoF5kp1SLXVSYbW1ya3GBbXBoa3hza29RVlVVZVlTbUlYT1xIWGhoc2pZa1ZRUkVWXE1YU2FVaGped3V7fHB9fHKCe39zd46AhHdeUXNhZ2JwZ1BraGhrbG9oZGdfXV1dYGpiaml2dV1cY2hjamlybGZrbWOdpZmmemV0bYunrqWqsLGmn4t/lqqcnaSLoaGaoaGAlZiTjZqPi5eQjop8hnGAiGiLinyXmnN1iX2QfGWDh5WKiZWagnyIhpamj4Chq5CFkIqBin2AgI5zaY+lhH2Fk4yHl5+NhpGppp2JpniWnH6liZaMspmekYSvl5+leZiJe6l1p5CEmm6looyShIyDvG18pa+Ch4aHlZedon6me3KolKCWaJ9+b6xjloqWk3iobaqjgYl1iIJ3q5GmiGuSsWx3s4ypbIuGb2+gnpKVYn+rjKp3gYCOp593n32FpJWdoGiah3WrZp6tjLZzdr6Mo5NZg6aNq2F1cnRve3VwYmp+bmdsU1VZVWBgXGtMXFJcSV1sbXZgW3FYW19aZ3Nlbm9xY3F0YHd6fnlyeYNyg36Be3uNgYKAd2J5ZGNuc2RSbGdnb21yaWdpYV9eXGFqYmxse29cXGJpYm1pd21nbG5ilqarnYGAnqSWqaqeqKeuo5mIgZapmZ2jiZqknKidhIuaj4WckYWSjYyMdIV6iINvjYV+l5NzdYZykYNuf4uSh4aUkH17goWXpI1/paWNgI2JhJR1goeTb2yLqICCi5ONiJueiIuSqqKgkIB0lJeIfoF5lK+kf4KccY+GeZKNhoB7cqiNcX19epeWm4SNeHt9fYiUlZOLd5GZoaKFfH+Ja4yFXHp5c3pxaW9+k4pxgHSCj5STcYaEgmWNf1+BgYx4d3SUdXB6b2+Jb4WGX3dpeI5ngoOGj6qcf3R9l2qJiG9+dXyDdW1sZoxzeHuXd4Raald5j2lud3Jxb3d4b11rhW1pZ1ZZXlZcZGtkVWFVXlFfb3d5a2p3ZWpqanV8cHF0c2FvdWJze4F4dXmCdX+Af4B5i4WCfnxugG1keW5eV25naXVreGppaWRcYFpjaWVscXVuWltia2Rsa3ltaGxvYY6Vuqmni6Gim6akmaSdq6Kgg4OWqpGdoImZppqomIOBm4t+lpSHjoqJjHKCfI58fo+Ee5eOdHKEcJWGfH2Si4aGj4Z5foCGmKOMe6egioWPj4SVg4aOmHdxhKqFjZGcj4eenYaKmqifoKqDiY6Vm39+ipetqJCTqJF4cZ+ThHyUcH+qh3B9lXFqb3yBn4t/kY6LaG5dhI2NnJ2gkHOXjIhxdGuDdnSAWXJvh5GCfn+Mal1pZHuFhIiAYGl4e5x8g42DdoKHhGl6jIlsYnFzg3dfc42DipGolodnjY+DbneLgm+Di3dtZGVjeYJ6lVpbaWZtdlt7eXd0bXNyg2ZcbYpra2JZWF1ZWGtxW15gWV5dZXJ+e3NvdGNqaml7fHJ6d3RkbXRobHt/dXp9e3l5f4B/cIaJhHt9c356cn9oVFxyaWx2cHVna2dkXWFZamhranFybVdbZW1sZ3J5b2hqbWCMjKuxoZCjoZqfnpiemaijoX2ClquMn5SHmqGQpJV/e5iEfJKZiYiGhopyfYCLdoWLgoSWinJvgHKYh4R+k4ODhoqCeoCEipqfj4KmoIZ4jpeIlYuLnJeEg3qsgZCXmZOJnZyGh6Gqn6Gio4uIk5udo5mWq6Kop6GTnImZkH16kJCGqX9/kpGSk5yxpZqUnY+NsZKYhKaNjZadoYqRnYOJkopsfY53d2aDhpGLfImehYeLj4iIgYWEkXd8e3WbpIqIi6CMh5Z/gI2DgXdxdYaFf3mJiIuRp5GEh46Ig4yQi3qFiYeNf3VqgIN8eZlpcWhgc4pwfXt3dm93dIFdXm+HZ25fXllaXFJncVVjW1thbGh0e3xybnBjamlof3tteH5waG9wbGaAe3KCgHd/fX+Ee22DjIZ8enl8fXqDeE5kdmpzbnF7ZWtlYmJgW3NmcGZycWxVXWx0bWh4enBnaWtljYieup+Wo6GYlZmYlJikoJ17f5ipjZ2MhZ+cip2WfHiUgnuOmYmGg4SHbXiAf3KAh36Ik4Rta356l4eEg5B+gIaEh3yHg42bnZGGqZ6DcoqPhpKSi5yRfI17qYONkZeVjpuWhYWbpp+imp2Gg5KamZmQmaahpp6ekJeCk4x4fYmPhad8fY+QkYWYqaCck5yOjamNkoCejYmUm6CEj5h/iI+EcHmGcnVhf4SQh3aMmIGDj4KGhH6GhJVuenZ1lKSMjoabhoaQdYGMfn5zc3yJhXt5jY+FlKiQh4SPgoOJiYh0g4aGiXptanx/e21oa2xnXnl+Z3x8dnR2dXp3XGBwfW10YGNaW11QZm1TZVpdYWpodXp+cGxsY2pqZ4B/a3J/a2p0bnduhHluhoB2goB9hXdyg42Hfnx7fIB7gotgaXtrdmhpg2VqY2BpXGN1Z29idW1rVGJxeWVveXpyZWptbYuKn7iaoaSfk5KWl4uan56cenecpZCbiYakk4qYmXl5jYV8iZGDjIKCgmx7f3hygIV9ipB8a2h9gpeJgYiOfH6GhId9j4CPm5uQiKacf3CLi4yShqChioWMfKeQh46RlpKVkneMo6ChnZaaf4GQmpmTjZqjoqSbmJKcgJCHe4GFj4iigX6NjZB8l6SgoJKZkJCljI+BnJGJlJicf5OTf4iPgnZ1gnF3YX6BjodzipZ9iIxxjH6ChYaPaHhyeY2ak5GAmH+JjHODiX19cnp8jIV7e5KOhJemlI2GkXyEhYaEdICBhYV4ZHF6fnh5cGtqZl59c2d8dXZzfHJ/al5gdHZwd2RjWF1eUmpoVGVYXmBnaXZ4gXFma2NsZ2V/gWptfWducGp9d4V6a4uBcoGBfoF1doKNhn98eoCBfX+PanKDbnRpYohpbGJfcVZ0b2xuYHhobFdqdHZjdHp6cWJrb3mJjZ+zkqWmnY6QmI+GnKCam3x1o5+Nl3+MoYqImpZ3e4aHfoOJfoiCgX9wfnp0dYKFfomQd2djfYaXioKKjXh9gI2DeZaAlZeVjZWfmn1vi4GRk4Wlm4eMiYOmlYSRipWXkpF2kZ2hoZiUmHp/jpiXj5eanaWempSVnXuSiIV5h5eOn3+Cio6Nc5einaCSmI6PoYyMg5eYg5OWmn+Zjn2KjoJ3cn5ue2SAfIuGcYeTgJGCa4eDgYCKhWZ2b32IlJqOfpR5jYt9gol+fHKAeYuGeoWSi4yZo5eDhIx3h4OCgXV6f4aDc153d3xzfXdma2NgfmlqdnNzdX1xfGNjYXNudXJtYVlfXVprZFJiV19gaGt0eYZxYmpjbGZofIJraHRobG9of3yBeWyPhXGAg4N/dHyDjYGAfnqCg358kG11iXR0bWaKbGpiY3VWg2lwbWB5Z2xhanZwZXh7eXBfcWyFhZCdr5inqZ6OjZeHhZ+TlZd8d6ibiZh5lpyLjJmQeHuAi318g3uAgoF4c3h5c32Ag3+IioBkXn2LlYh+hYd0fX+Kf36YhJaTloyjoJd+cod7k5GKpo+MjoqSoJGDkI+Tl5CKgY+YoJqSkJJ0gI6SlIqdnZ6nmZiOlZh1kJGLbYeZkJt7iImQiW+XnZmik5WKjJ2LhoGTnX+Tk5aImop8i4qCenJ6a3ZtfH+Mf26Fk4OUeG+ChH5+i4Flc2p9gpiYhYCOdJKKhXqJf3d5gX6HgX2EjoaNlaWReYWCdIiGfH9xc36FgWxgenR5cHtuYW5iZHthbW92cnd3c3NhdmBvbHVub1xaXl1dal1PXFdiYWhtc3qJa19pZWpjaHeHbWZsaGlsZ4B8endukIhzgIOEfXSBhol6g316gYR9fI5yeYt5eG5sh2toX2lyYodocW9mdmdtbGF6aGp8e3dwYXdti4GZmquhpKmeiouRhomeipSWfHasl4yWfJ6TkZaUiHZ9e4p8e4B2d3+Ab3Rzem+FfYGAiX58YVx+j5GGf4SEc3qAhnqPkYeRkZuSpJuTgX2BfI2KkqOJjYqNlpqMhZCXkpWOiYiMkp2Tj4yNboSQjpGJnpmioZiXipeTcIubhmeImo+UeoqFkYtwlpqToZGSh4mYjIJ/kp99ko+TjJmPfIuGiHRzdmtxb3Z9i3VvhpGOk3J0gHyCgol9ZXFten+blX6FiXSSjIJ1intwgn+CiH2FjYqGjpaqjnuIfX6KhXd9b21+g4FiZ3dzdG56YV5vYGp0XnBqenl4bHJwZXldbWxzbXNYWl1fYWpaT1dXZGNmcXF/h2VdaWhnYmdxjW5jaGhlaWeAend1b46Fc4GBg3x1gomFeIV8eISGeoCJd3+Le3tzeYNqa19waHR/a3FvbXFnb2tle2Juf3p3cGt3d4l/o5mjqKGnm4iMioGPnYaSmnSAqZSRjYagjJWTkIBze3aFd3h/cnN7hWtyb3ltiXZ/gIZucVtZfpKNiICBgXZ1gX9/oIaPipGcl6CTlneJfoCMiJydio+GkpeWhYiUmI6WjIuNjoydio6RhG6Ki4+RipyWoZyZloaZiWyHpYVoiJ6Kkn+MhIyBeJOYkZ2RkIeIlI1/fpCZfJGNkI6akn2LgYRwdnBsbm9xfIdqc4OPmYpxeIB1gomDemdzb3aCm5B9iYV6lZN7eIp1cYt8h457i4eFio+cpYl8hHeBin93d2xpfoB/XHFycW9vd1leb2Bval5vanx6cG1tam13YHBva3FtWVhgYWFtV1BTWWVmYnVvhIJiXWttZGNma5JtYGZmX2dqgXVycm+LgHR/goB5doCLgHmFfneHhnaDhXuHjIB7d4p/anFifGKFfG9wbHVqaG5sdndfcX55e3R1c3+CfqWWm62fp5aFjIN+l5WDjp10ip+TkoWKmoyVjox6cnd0gnByhXNxdYhsbmx0bId2g31/bW5VUYGrlIeCeIB2coN5gqCCkYGSkZebkZl3kXqCjJKkmpOOiJSYkoSFlpiLk4uJjo+HnYSRi31zi4WIj4icmZ+bl5WBlYBqiJ+JaIihiJOFkoSKcYORl4+ajY+Lio6Nd3uTkXuOi42Sl418iX2BbHdqb2xsbXt/Ynp+j5aBd3qBeIONfXpodW11iJeMgImGfJWRcnuGcXiOe4uOe4l+hI6Rn5+GfX14gYp8dm9nan+Ad153b21rcHJVXW5hcWFfbG55cGdwZmd0dWhxbGF3ZV1VZWBgcVJQTltlZF14b4h7XlxocWJiZWWRaV9oZVtnb31va3Fzin12fYWAdXZ/jHl7hoB4h4NzhoV+jIyEfHqVeGdxaoNgh35vb2t7YGltdH90X3R8eIZ4c3OFfHmhkJqxnaaOgop/gpmJf4qcfoqYko6EiJeOjo6Ed3R2c4Bwb4VzcHGDb2ppdW2Cbn18bXVzUk6C38mS1pN8cHSDdYOfgpF2lJCYm4+Ye5NyhZCfoZOTkImSm5OFfZWVh4yNh5KNiJx/joF4e4x/iIyKnJycm5aUeo54aYuUim6KpYaUiZeDhmOMkZiNlImWi4yJi3B6lYl8jomLlJKKeoZ9f218ZXNwa217elyBeZCOgXt+f4CGj3t6aXVrdIyQioOHhn6XjW1/gHCCjoCOiX6Ee4ORlpubjH13eIKPeHJsZW59gWppdG9naHNsU11vZHBaX2xyd2Zra2NneHNvcGNfd2BhVWtfXnVPTktgZmJceHCKdFxbZXZgYWRkjmNgZmJYaXNzbWtxdot8dHmGgnZ3fotzf4Z/eol/cYmHgZGKiH1+mXZlc258ZYd/bm9rgFprbnl5cmB2enuNdnJ2inZ6n4ycr5ugkIKFeIiUfnuInIeEnpCOhYyXhJOOh4F1d3B5cG6Eb21ufnJjZHhwfG56fGpobGKkmsHcru+ic2x1g3WEoYSRbpWPlJ+TmoCRcIWLo5eJjpWKkJ2Vg4CUj4WIj4CSioqXfod7dn+JeIaFjpubl5mPkHaLeHCJi41/jaaGk4udhYZei5SXiY6IjYqKhIlsfJeCfYiGipKQhnaGfn5sfWR4dWpvenRYiHqRh4Z6f3+Aho1/emZ0a4GLj4uEhIGNmIZtg3dviZODkoV/gnuBkZeUm5F1dHiHjHRycGVzd4Bgc21vYWh0ZlJgcGdrVV9udHlhc2NgaX1xcm5bY3JhY1ZuWlx3TU1MY2ZhXXZzim1bXGR4XmBkZoRfY2NeWGlya25rcneLfXN3hIF4eHyJcYOEfX2Ie3SLiIiVhox/f5hzaHVxeWyLe250cIBXcHl2eXFkdnmGjGh2gIlxgJ2ImaicopKEfHCMlHd4iZyDhJ+NjnyVjH+aiIR8c3dwc2pvgWtpbHx0XmB4dntwdHpnYGV869q1ycPciXNsdIB2ipqIjGmXj46bk5GBiHCFiKCOhYuVioyXk3yNkoiCiI96kYuGj4KAd3iDhHKHgpOblpSYho12iIByh4SLiZykhZaOn4SJYYOVj4WIhYiMhoCHaH2Uf32ChYqOj4Jyh3+AcndodnJpdHhtWox9koKGfYCDgYSLg3ZidW2KgpGMg4CAk5J+b4NteoiRiJSFfYJ+gZOUkZiKb3J6jIV0a29pcHZ+XXNoblxpdF9RZHFoZlNfcHZ0YHBgXWiCcXJqV2dpY2lXbVdbdExKTGVmXmFyc4VpW1xleV5eZGd6YGRfXVlrbmVuanR3in5zcoF/e3Z6iHSFg3x/h3Z2ioWPmIGNgnuTdmx3dnl5k3Vud3p9WHmFcYBuZ3h2kYJkdoaFcYqWhpqhm6GKhnNvkotxdo2afYmZiIl7n3+DmX+CeXF0bm9kcn5oZmx3d1tfeHp6cXF/aWFnYX/Vto6RpnhucXd7cZKQjIZqmI2ImpCKhXpoh4uZhoGSkYaGl417jIyAgImNe5CNfomFenV7g3xxhoCVmY6TlIKJdoSIeIWCjZWfoYiXkaB/iGF/k4eDh4OIjH9/gmZ9kYB+f4OMj5F/bYN9g3VsbXd1dHd2bGONgY5/hX98hICFiYBxYHRyhn2QjoN9gJKKenKFZ3uFjIiNhXyFf4GVkJKUhW9weYt/dGxtaWl3emFnamlYa3RZUmhyaWJQYnJ4bGJlXlpqg25zYlxnX2VtX29UWm9OSE5mZFxmbnKAa1pbY3NfXGNrdmRlXV1abGxibWpzdoaAcW9/fH10eIZ4hYN8gIh2eImBkpV7iYZ2iYFveHl7g5JvbXuAdl6Df3SBbWh6c5RzZ3OHfHKSkoSan5ufhod1dZR+bXWSln2HkIOKjZl8jJp2fnZxb2xqYXR8Z2JpdXpaYHd7eW1xfmVkaGhXnY9fcnOXvMSEdnGUiI99cZaLhpuSi4dyaoiPloB7lYyBhJqMfIqFfHuJi3+UiHWJhnZ3foFydYaBnpSFlI+EhHKBineHfoubn5qIlY+dgYlmfZOCfoSCiIlxgX1mfox8eX9/h4yPfWmBfoR2Z3B5eHN3dGxrjoWKgYqAeYKBhYSBbF9zeXt+jouGfIKQgX9zgmp6hYmNh4V5hH2CmY6RjX5ubXuJfXZ0bmZle3RiW3BiV25xU1NtcmhhTmZ0eGZgXl1Zb4Bvc1llYl1qbmBwT1lrUURTZ2Baam5tfG5ZW11tY1picHZjZlxdYGtpY2xqc3aBg3BtfnyAdHWDeoOCfIGFdn6IgZaQeISKdIGIcnl5fo2Qb297gHFpgXh6fm1se3WVa2p4hHRrk42Gn5mgmYSIbn2Mdml3l45+gYqClJeJeY+Vb3p0cWxpZGBzemhfZXF6WmFyfHlncXlgZWWPsbJ3S2JapdnQlnF7kIqPd32TioSYkIuFbmuFkpF6eZKHgYSYinyGf3h3iYqEloBvi4hxdX57anmFg6WQhJONhH9wgIR4hnuInZuWjZWRlYWIcHuSgnyBgoiDboB3aICEeHJ/gIOKiHxlfn+EdmRxc4BpeXFvdZmNhoOLfXd5gYV6g2tccn9zgomHin6HinuJc4JvcoWIkIaGc4V6gpqNjoV5bm9+hH92emRmaHtvXlh2Wlhwa05XcXJmYEtsd3RhXlxbWnV9cm9XZ11manFgb05XaFI/WGZeWm9rZ3pxW1pYa2VaY3B5XmdcXmVsZ2VraXF3f4hvbH9+gHVvgnuAgn+Cf3aBhYiXiXGCjXF7hnx6eYSTjHVqeX5rb350f31vcnt6k29ugX54Z5KLg6GZnJGChWaGg29neZWIfX6EgpiJgXyOjWl4c2trZl9hb3ltX2JveFxka4J6YXF2X2Vl1Oq9izI6PouOf3F4hYeNjXWClox+ko2Mfm1shYyMdXyPf4WBlYh8gnhudoeEg5d3boiFbHV7dWZ5goOni4KPi4R+boF2eYZ8iJ+SjZGTlI6Lh397koZ3foOMgmt/cmiAfnhtfHyCi4N4YnqFgnJkcml+bnVxdYKbi4B/hYBzdn6Bc4JwXG5/dXmLhIt7iIF+iXl7cm2JhJGFjHODeoCXjIyAdW5rdoCAdXNbZ2d1bldWe1JZb2RMWnJyZVtJcHhvXFtbWV10fnRoWWJbZ2VvZGpNV2ZRPV1lXF11ZWB1cFpZVW5jWWRxeVpoXV9nbWdpa2lwd32ObWmChH55boB8fYF/gnl0gYGNk4RwgYtud36Ae3uIkol/aHp9anN7coV6c3Z9fox6eIR9fGuMjYSbnpaMgYBsjX1raH6Ni3p+foOTgn59iohrdnJnaGJbYmdzb19ha3NgaHCIeWJzdF5jZJugj25cNVqvtXRpgIh8koZ1hZWFc46KiXZvbIWDh3V5iXiJfJOHeX5yZ3WJfn6Yb3GGfmh2eW5meYeEpIeAh42Kfm+Ad4KDf46biIOVkpmKi4WJfI+IcHp9hHtofmxqgHt6anp3goiBcmB3gX5yZHJndoJtdXuGlZGBfIKBb3d6fHV/bVlwgHd1jYOHeIh2g4l7eXRvi4GRgoZzgH5/lImKe29uam2BgXRtXGZkcnBQWnpNW25bT1tyb2RVS3N4aVdZWVphcIB0YF1dYWdkaWlmTlloTUBgY1tgdWFddWxYV1N0YVpkb3JXal5iaGpnbWxocHd8k2xohIp8fHB+fnuBgIF6dn9/iouDcXyHb3F3g397iYyPg2p9e213eHaKdnx4f4KHf4N+fXpthYyImaONhIN7dYt4a2yEh5B4fnuCkYCAfouDcHNxY2ZeWWZfb29fYGdwZmpuiHRhdG9bYWRqdnuAv5ympMi4cYSCcpJ8d4aSgnOQi4dycm+De4N0dId0iHeUiHl5cGN3h3qAk2lyhHZnd3VjanyCiJ2BgH+Oj35zgHWHe4KTkYR6l4+WkIiCiXuIiGt4eX50Z3poa395c2l6doCDfWhgeIh9a2t0aHyAaXaBjJGUfnp/f3F8dnx0f2JWeH5zc4uFgn2EcYeKeHlxcYSDjoB/en9+d4+GhHdqcWlsh4Fxb1xmYXFtSWR1S11sVFNZcm5iUU90eGFSWFhdYXCCc1thXGllZWRrZFBbcElEY2BbY3BeXXdoVVdWdl1bZW5oVmteYWlnZW5uaHB2epNtaYiNeH1ye355goGBe3V8g4iGg3B3hHJtd4KCfomLk39wgHt3eXqBjHSCeH6BgYKEeYB1b36Ki5ueiH2FeneFe2d0hYuQeX5/e4iGhHaPgGdwbl9kXFhlWW1yYWBgcGxraIhuYXRpWV5kboB3qdqpx4aHsnGId2+MdHuFjX96kol/dHN0fneAcHF/bYR0lIV4dWtgeoJ5iY9mcYRwZ3ZuW219gJCTf4B5kZN+eXxuineCk42FdZeLko+HhYV7f4RsdHZ+bGd2ZG17dm1pd3d/f3xhYniGeml1dWN+e2d1ho6NlXt0gXdxgHt9boBaV3V/cHaFiH+Aem2JhnR6bHaBhIV/fH56fXSLgX50aHRlbouDbHNZaF5zZEdtbUtaYFdWVXdtYlBSdHZYUFZYXmFxhG9cYGNtZWReb2NUXHJHQmZfXWZnXVt7YlFWXHRbW2drYVZqX2BuZWZrcGdwdniOdGuOjXV+dnh+d4GEgXtzfYOIh4NvcoB0cXV+hYKJjYp7d394g3t8hod3h3x9gX6EgHt+cnV5jI2gjIl5iXV0g3hefYWXi3iGg3OFhoR3iXtibm1cYltbYVZpc2NgW2ducGaHcWFxZlddY2t/fMrOh7mham1timxxg3F8g4l+epCEeXhzeXV1e2psdmOEdZKCdm9mXn2CeouKZXKCa2pxY1hteoWbiIKBc5eUeH99b4pyhIuNiXOYj5GJhouDe3l9cHBvfGZocWJteHFqa3F4fX16XWV6gHhqdnhmg3dndIeMjpR9cohqb36BeW99XVlzf251gYt8gm9wioBxd2l4gIKAgnh+c3x1h317c2dzYW6LgWtxV2lddltHbWpMVlVdU1V7a2FPVHVyUFFUV15idIVpXWBsamZjWm9hWGJwSEFnXGBlXlxWe15OVWVwWVtqaF1XaGBecmVrZ3BncXN3hnhulYt0f3p4fnmDiH91cn+GhY6DcHB7eHd2eYaGh4yGenx/dIt+fYaEg4d+fn59h398eHV4eJGTn3+MfIptdX94ZIOGlYVzkYpvhYWBeoN0ZG5qWV9bXF1UZ3JkYFlkcXJngHJia2VXW2Bqf3e+rnugtm5hc4Voc3txeIGEen2Lfnd3cnZve3Zlam9hh3WOgHNqYl5/eHmLhGZxf2hra1pWb3eJo4GFf3GZk3KBeneEb4KDk4l0loqOiIWJhX14dHFuaHlfamxgbXZqZ2preXd6dlpnfXx5ZnN+bYV0ZXWFjYaWf3CMZ2t7hHVudWJdcX1sdX2Me4Jndod+bnFpdn95f4Bzfm17fIJ7eXFmbGJuiX1sbVZpX3ZVSmlqTlFOZ0xYe2hhTlV1a0xRVFVfZnWDZl5gcWhnYldqXVxraEpEallhZFZZVXlZTVZtallda2RcWWVjXnRlbWRwZnJwdYF4cZmGdn9+d398hYd9dXOCiICVgm5zeXt6c3OFh4mJg3iBfXWPfnyEio2DgYR7fouDe3Z7d3eanZh6iYKGaXZ9e2yDg5J/co6BcIWCf4J/cGdsZ1hdW1xbU2RwZF5XYnJ1anVvZWViV1xcaH9wb3KAc4lkZHl9aXN1c3KBg3eAg3h2cnVua3pxYmdrZ4Z0jYNuZl1ffXB7iX9pbXlnamRVV3JvjaZ8hHt2lpF1fXR+fG99fJKHeJp9iIeDhoN9dW9xbGd0XGxnXmx0ZGdlaXpve3JZaIF3dWhwgXiCdmJ3hYt8lIFvjGtte4JxZ3RmYW56Z3N4i3x+Y3eEd2pscnZ7cXt6dH9nf3+AeXdvZGZiboV7bGpVaGFvUkpoak9LTm9HXXpmYU1VdGRKT1NXYWp2fmVdZ3NpZmBWZFdicF1MS2pYY2FVVFVzVkxYdWRZXmtgXFpjZV92Z21ib2l0b3J+dHSagnd/gHeAf4aEen11goR+l4VucnR8enVxhIWPgYB6i3V0kH98gZWNgIWEfX2Mhnp9gHZ7o6WKeYiFhGt1fHp1g4GLem6Ec3mEfYKDdm9qaWVWXVtaWlNibWRbWGFze2pobWlgYldfW2qAamtvgGdrYGh5eGpyc3Ntg4B6f3x1dG16aGp5al9lbmiBdpCEaGVYYndqfod7b2pwZ2ZdVFhvZ46od4F6fJCOenZxgHF0d3qQgXmWdYaDgIWIdmpxdWdnbltsY11tcl9nYWp4aHtsW26Dc3RqcIF+endhd4WFeZCGdIhyb3mAcmNxaV1xeGVydIl8eWN0gHFoanp1cm15eHZ5ZIR8f3l3cWRkY258fGpqVGhhZVNKa2dPR1FqRWB3ZmFNU3JdSk1UWmVrdnplXm1xaWRdVmFVbm5XS1NoV2ZeWE1VbFRKXHlfW15rXV1aY2VgeWhsYG9vdm5wd3V6mH53f4F5gICHhnp5eoN+gZOEcXR0f3l2dIWIkX2AfJBrc5WBe4Kfhn6HfYB+hoKAint2hKuff3qHh4NrcoF5dYB+gXRuhm58gHOKgGpwbmRkWF9aWVpUYWpnW1pfdYJpXm1sXGFXXFxsgWVydH1paVxrdnVnc3ZxbIR7fXx4dXJseWdpeGZdZXNoeneTgWNjVGVwaIKFeHhnaWphV1ZZZ2OPp25+d4CLjntxcn9penB7jn14kHKEfn9/hm5kdXJkZ2dcamFcb29cZ19tdGV6aF10gG9ya3J8fnV2YnSFi3yJiIGAeHJ1f3VhcG1bcnRjcXOFfHVlc4BtYW17cGtqe3l2c2aGdnt7dnFlYmVtcn1pa1NnXlxUS3FiUEZVYEdidmZhS1RvWEpNWFhna3V6ZGVucWZkWldeWHdlVEpcYldoWFlIV2VQSGJ4Wl1fbFpeXGFjXn5pal9udHhtcG52g5d6coGAfH+JjIZ9dXWGeYeMfHR1dYJ5enqCjI59foSJaXOWgXqKnX5+hXqBen98hohzcY+tjHt7ho99ZHGHeXN8enVyb4Zse35sj3pjcG9iZV1lVllZV2Nma19dXXOFaFhxblteWFpcbHtjcHd1bGJZbHNzZ3R1b2yDeH5/eHZtbnRkaXRlW2d1ZnZ2knlfXVJmZmuDgnR+YmRqXFRXXWJjj6RoeHSDhpF5bnF8aXpufIZ8dopzgXl8eH9oZHZsYGZfXmleXHNrWWVdb29iemVcd3xrbm5weHl0dWRzg5J/iISJe3dvcn5zYnhkXHFxYnFygn10Z3KAZV5ud2llaHp8dW5vgnV0fXRyYl9mbm58ZGhTZ1hYVE12X1BKWVdIYnRjYUlUbVNKTVpXaWxxe2JtbHNjYlpaW2F3XFNMY11YaVNXR1lgTUdpdVheYGxbW19iYlyEaWdhbnh5bW9qdoGQeW2Df4CBk4iEgXZ0iHSMhnRydnWCd3x9foyQgH6TfnB3loN8mZN5gIB4en6AdIiDdHCZoXp6f4mUd2N1h3hzd3RrdG9+a3h8cJFzXnBuYGdibFRaWldoY21mW1xxiWVTcm5bWlhYYGx2Y2l1amleWW1zcGxzc3NphHx+fnt2bm5sZGlxY1trcmR1do5zW1dTZWFygH9ygl1iY11TWmBcY5GfZXFxhYSSdWxse29wcXt9fXOBd4Bzenp6ZGV1aF1iWWBnWl52aFdiXXBoYXdhW3x2aWpyb3h0c3VocYKVg4d/hXZzanF9bmZ3WF1sbmNydIF6dGdwfltgcHJiYGtyfm1tdX9zcnhrcWFcZWxtemBmUmVUV1FQdVtRT1hRSGNzYWBHVmtRSVBaVWtra3xmbm9xYltaWFlscVdSUGZXVmhTVEZaXE5IcXRYX2NsYlhgYGFdi2pjZG15eGxwaXV5h3trg31/hJp8g4R5fIduj4dyb3Z6fXSCgnyLj4OCl3R4gpSFgZ+JdYGAgXR/gnGHgnVvoZZze4aLhnpld4pubXpuZnhwemtzdnONa151bmFnZWtSXVtVZ2Fsa1pccYxkT29uXVZYVWdqdGhidGVkXFhtdG1vdXR4aoZ8f3uHdo9zY2RrbmFcbm1jc3iHa1pUVmNkeH19cYZdZF9jVFpfWWKVlWNucIOFinRraXxwZnR4dX1tenV2cHp/dl9lcmNbXVZhY1hhdGVVX2BtZGFxXV1+cGhpdHF0cXV2a22Ek4GJfIZxc2dwfnFzb1RcZ2tmcnWBd3RjbXZWYnJsW19wZ35mbXd+c3Rza25hWmRqandeZVNjVFVQVGxWUFZSUEdkcl9hRlhpT0lYVFZtaGR8aWt4a2JXXVVbdGRTUldoUVhmVFNIWlpQTXd2Wl9la2lZYWBeXo5uYWZreXVub2l2doB/bIOAfYeYe4CHgYl+a5OIcmd0gHt1gIN9iY9/i5NyfIqRhYefh3t/hox0gYZzfYJ2bqSLcoGNi3Z3bHqMYGR7cGZ5c3hsbXF3g2dkfG1jZmdoU19eVWdfbG5bXm6NaE5pbWBUVlNuZ3RrZXhkZFxYb3NscXp3cmyHe392m3p5a2FlbG1eYG9qZXF5fmdaVlhgbHh8e3CEX2NfZ1ZYX1djm4hia3CBh314bGx6blx3c217anZ0b3B8gHNYaW1eWFxVYWJXZHBjU15iaWFibFphfmxmbHR2b213d2xphYx/iXyJbXJncX1uc25jW2FpaXB0gnRzXmltU2VxZVVjb2N7ZHJ3fHdscG1rYFlhZmd0XGRVYFVSTldkUk9bTk9IZG9cYkdZaU1KX0tYbWRgeGlufmRgVV9UXXVcVFNgZk5dYVVTSlxZUFl0dV1fZWtoWGJhW16NcWNnanhxc25odnR6hHKCg3qIjn58iYeNeW6QinVsc4J0f3+IhYeRhJWPeX2Mj4eRm4WAfIyFc4CBc3R4cm+Tk5OTk5OTk5OTkpKSkpKSkpKSkpKSk5OTkpKSkpKSkpKSkpKSkZGRkJCPj4+Pj4+Ojo6Pj46OjY2Njo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo2NjYyMjI2NjY2Njo6Ojo6OjY6OjY2Ojo6Oj4+Pjo2NjY2Oj4+Pj4+PjoKAfnp6fX5+fX1/fn59fn5+fn5+fn+Af4CAgIGAgIB/gIGBgYOHjI6Ojo6NjY2NjY2NjY2NjZKSkpOTkpKSkpKSkpKSkpGRkZGSkpKSkpKSkpKSkpKSkpKSkpGRkZCQkI+Pjo6Ojo6NjY6Ojo2NjY2Njo6Njo6OjY2NjY2Njo6Ojo6Ojo6NjYyMjY2MjIyNjY2Njo6Ojo6NjY2NjY2Njo6Ojo6OjY2NjY2Ojo6Ojo+Ogn99ent8fn59fX59fn5+fn5+fn5+f4B/gICAgICAgH+BgYCBg4aMjY6NjY2NjY2NjIyMjIyMkpKSkpKSkpKSkpKSkpKSkZKSkpKSk5KSkpKRkZGRkZKSkpGRkZGQkJCQj4+Ojo6OjY2NjY2Njo6Ojo6NjIyMjIyMjY2NjY2NjY6Pj4+Pjo6NjIyMjIyMjIyNjY2NjY2NjY2NjY2NjY2Njo6Ojo2NjY2NjY2NjY6Ojo6Cf3x6fHx9fn19fn19fX59fn5+fn5+gH9/gICBgYGAf4CAgICDhouOjo2NjY2NjIyMjIyMjIySkpOTk5KTk5KSkpKSkZGSkpKSkpKSkpGRkZGRkZGRkJCQkJGRkZCQkJCPj46Pjo6Ojo6Ojo6Ojo6Ojo2MjIyMjIyMjY2NjY2NjY+Pjo6OjY6MjIyMjIyMjIyMjY2NjY2NjY2NjY2NjY2Njo6NjY2MjIyNjY2Njo6OjoN/fHp8e31+fH1+fXx9fn59fn5+fn5/f3+BgYGAgICAgYCAgIOGi42NjY2NjIyMjIyMjIyMjJFtZmdnZ2dnfYWEhISEiF0tMDAwMC1GoaGhoaGhoJqZmpqampqKg4SEhIOEd2VnZmZmaFxDREREREFSzNrY2NjY2rCdoKCgoKVeKi8vLzAsSIWDg4ODg4OLjIyMjIyMjY2NjYyMjY2NjY2NjY2NjIyMjIyNjY2NjY2OhX19e3t6fX58fH59fX1+fX1+fn5+fn9/f4GBgYCAgICBgICAgoWKjI2MjIyMjIyMjIyMjIyMkWdfYGBgX155g4KCgoKGUxgdHR0dGTekpKSkpKSjnJycnJycnImBgoKBgYJyXV9fX19hUjQ1NTU1MkbY6ufn5+fptqCjpKSkqlYVHBwcHBc6g4GBgYGAgYqLi4yMjIyMjIyMjIyMjIyMjY2NjY2MjIyMjIyMjY2NjY2GfH16e3p8fXt8fn19fX59fX5+fn5/f3+AgYCBgYGAgIGBgYGChYqNjYyMjIyMjIyMjIuLi4uRjo2NjY2NjY+QkJCQkJCMh4eHh4eGiZOTkpKSkpKRkZGRkZGRj46Ojo2NjYuJiYmJiYmIhYaFhYWFhpOUlJSUlJSQj4+Pj4+PiIKDg4KCgoWKioqKioqKi4uLi4uLi4uLjIyLi4yMjIyMjI2NjIyMjIyMjIyMjY2Njoh8f3l6ent8e319fX18fX19fX5+fn9/f4CBgYGBgYGAgYCAgYKFioyMjIyMjIyMjIuLi4uLi5GSkpKSko2RkpGJh46KkJKSk4+Ni4qQiY+RkZGRkJCQkJCPj4+Pj4+Ojo6Njo6Ojo2Njo2Njo6Ojo6Ni4qLi4uMjIyMjIyMjIyNjo6NjY2NjIuLi4uLiouLi4uLi4uLi4uLi4uLjIyMjIyMjIyMjIyMjIyMjIyNjY2NiX59eHh5fH18fX19fHx9fX59fn5+f3+AgICBgYGBgYCBgIGCgoSKjIyMjIyMjIyLi4uLi4qLkJCRkZGPhI6QkIaKj4WNkJCQh4iFiYqGiJCQkJCQkJCQkI+Pj4+Ojo6NjY2NjYyMjIyMjIyMjIyMjIyMjIyMjI2NjIyMjIyMjIyMi4uLi4uLi4uLi4qKiouLi4uLi4uLi4uLi4uLi4yMjIyMjIyMjIyMjIyMjIyMjI2Lfnx3dnh7fXx7fX18fH19fn5+fn5/f4CAgIGBgYGBgIGAgIGChIqMjIyMjIuLi4uLioqKioqQkJCQkIqFjoiOhoaPiY2QkI2EiYaGh4WHj4+Pj4+Qj5CPj4+Ojo6OjY2MjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMi4uLi4uLi4uLi4uLi4qKioqKi4qKi4qKi4uKioqKi4uLi4uLjIyMjIyMjIyMjIyMjIyMjIt+e3d2eHt8fHx9fX19fX1+fn5/fn9/f3+AgIGAgYGAgYCBgYGEiYyMi4uLi4uLioqKioqKipCQkJCPhYOMjpCOiYyJjZCRiYKHjoiEhYiPj4+Pj4+Pj4+Pjo6OjY2NjYyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIuLi4uLi4uLi4qKioqKioqKioqKioqKioqLi4uKioqKiouLi4uLi4yMjIyMjIyMjIyMjIyMin18dnZ4fHx7fH19fH19fn5+fn5+fn9/f4CAgYCBgYGBgIGAgYSJi4yLi4uLi4qKiomJiYmJkJCQkJCMhoyJjoeFjYmOi4yOiIaHhoiEipCPjo+Pj4+Pjo6OjY2NjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyLi4uLi4qKioqKioqKioqKioqKioqKioqKi4uLioqKioqKioqLi4uLi4uLjIyMjIyMi4uMjIyKf353eHp7enp8fHx8fX1+fn5+fn9+fn9/gICAgICBgICAgYCBhIqMi4uLioqKioqJiYmJiYmPj4+Pj5CMjouPjIqPjI6MjZCOjIqKjoqOj46Ojo6Ojo6Ojo6NjYyMjIyLi4uLi4uLjIyMjIyMjIyMjIyMjIyMjIyMjIyLi4uLioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi4uLi4uLi4uLi4uLjIiAfXh5enp6e318e3t9fn5+fn5/f35+f39/gICBgIGAgIGBgIGEiouLioqKioqJiYmJiYmIiI+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pjo+Oj46Ojo6Ojo6Ojo2NjYyMjIyLi4uLi4uLi4uLjIyMjIyMjIyMjIyMjIyMjIyMjIuLi4uKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLi4uLioqKi4uLh4B8eHp6eXt8fHt8fH1+fn5+fn9/fn9/f39/gIB/gYGAgIB/gYSJi4qKioqJiYmJiYmJiIiIj4+Pj4+Pj4+Pj46Pj4+Oj4+Ojo6Ojo6Ojo6OjY2NjY2NjY2MjIyMjIuLi4uLi4uLi4uLi4uLi4uLjIyMjIyMjIyMjIyMi4uLi4qKioqKioqKioqKioqKioqKioqKioqKioqKiYmKioqKioqKioqKioqKioqKioqKi4uHgHt5eXh6fHx6e3t9fX5+fn5+f39+f39/f39/f3+BgYCAgH+BhIiLiomJiYmJiYmJiIiIiIiOjo6Ojo6Pj46MjI+Sj5COjo6Ojo6NjY2NjY2NjY2NjIyMjIyMjIuLi4uLioqKioqLi4uLi4uLi4uLi4uMjIyMjIyMjIyLi4uLi4qKioqKioqKioqKiomKiomJiYqKioqKioqJiYmJioqKioqKioqKioqKioqKioqKi4aBe3h5eHp8ent7fH19fn5+fn5/f35/f39+fn9/f4CAgYCAgIGEiIqJiYmJiYmJiIiIiIeHh46Ojo6Ojo6Ojo+MkJOQkI+Ojo6NjY2NjY2NjYyMjIyMjIyMjIuLi4uLi4qKioqKioqKi4uLi4uLi4uLi4uLi4uMjIyLi4uLi4uLioqKioqKioqKiYmJiYmJiYmJiYmKioqKiomJiYmJiYmJiYqKioqKiomJioqKioqKhYB6eHl5fHt6ent8fH1+fn1+fn9/fX9/f35/f39/gICBgICAgYSIiomJiYiIiIiIiIeHh4eHjY2Ojo6Ojo6Pj4+PjoyNkI2NjY2NjY2MjIyMjIyMjIyMi4uLi4uLioqKioqKioqKioqLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4qKioqKioqJiYmJiYmJiYmJiYmJiYmKioqJiYmJiYmJiYmJiYmKioqJiYmJiYmJioqFf3l6eXh7e3p7fHx7fn5+fX5+f39+f39/fn+Af3+AgICBgYCChIeKiYmIiIiIh4eHh4eHh4eNjY2Njo6Oi42Nj5WPiYyPjYyNjYyMjIyMjIyMjIuLi4uLi4uLi4qKioqKioqKioqKiouLi4uLi4uLi4uLi4uLi4uLi4uLi4uKioqJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYR+eXt5ent7eXt9fHt+fn59fn5+f35/f39+f3+AgICAf4CAgICEh4mIiIiHh4eHh4eHh4aGhoyNjY2NjY+MjImKj42IjJGPjY2NjIyMjIyMjIyLi4uLi4uKioqKioqKioqKioqKioqKiouLi4uLi4uLi4uLi4uLi4uLi4uKioqJiomJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJg355e3p8e3p7fX17fH9+fn5+fX1/fn9+f3+Af4CAgH+AgH9/f4OGiIiHh4eHh4aGhoaGhoaGjIyMjIyLiYyKiIeJhoyOjJCMjZGOjIyMi4uLi4uLi4uLi4qKioqKioqKioqKioqKioqKioqKiouLi4uLi4uLi4uLioqKioqKiomJiYmJiYmJiImJiYmJiYmJiYmJiYmJiYmJiYmIiImJiYmJiYmJiYmJiYiIiIiIiYmCf3h7e3t6enx9fHx9f39+fn19fn9/f39/f4F/gIB/gICAgICAg4aIh4eHhoaGhoaGhoaGhoWMjIyMi4yOjoyKioeEiIuKjIuNjo+Li4uLi4uLi4uLi4uLioqKiomJiYmKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiomJiYmJiYiIiIiIiIiIiImJiYmJiYmJiYmJiIiIiIiIiYmIiIiIiIiIiIiIiIiIiIJ/eHp7enp6e3x8fX1+f35+fX1+f39/fn+AgICAf3+Af4CAgYCDhYiHh4aGhoaGhoaFhYWFhYyMjI2NjJCSjI2Ii4mJi4uLi4mLjIqMi4uLi4uLioqLi4qKiomJiYmJiYmJiYqKioqKioqKioqKioqKioqKioqKioqKiYqJioqJiYmJiYmIiIiIiIiIiIiIiImJiYmJiYmJiYmIiIiIiIiIiIiIiIiIiIiIiIiIiIiHgXx4e3x5enp8fHx9fX9/fn59fX9/f39+fn+Af4B/f3+Af4CAgIKEh4eGhoaGhYWFhYWFhYWFjIyNkY+PjZGJjIaJjIuIiImMiYeNjo+NioqKioqKioqKiomJiYmJiYmJiYmJioqKioqKioqKioqKioqJioqKioqKiYmJiYmJiYmJiYmJiYiIiIiIiIiIiIiIiImJiYmJiYmJiIiIiIiIiIiIiIiIiIiHh4eHh4eHh4WAenl9e3t7enx8fHx9f39+fn19f39/f35+f4B/gH9/f4B/gH+AgoSHhoaGhYWFhYWFhYWFhISLi46PjoyLj4iHiYmMjYWFjo2KiYyNi46KioqKiomJiYmJiYmJiYmJiYmJiYmJiYmKioqKioqKiomJiYmJiYmJiYmJiYmJiYmJiYmJiYmIiIiIiIiIiIiHiIiIiIiIiIiIiIiIiIiIiIiHh4eHh4eHh4eHhoaHh4eHhH55eX16enp7fXt8fX5+f35+fX1/f39/fX5/f3+Af39/f39/f4CChIaFhoWFhYWFhYWFhISEhIuLjI6MjI2Lh4mIiomGgoiNjoiKi5GTj4uJiYmJiYmJiYmJiYmIiYmJiYmJiYmJiYmKioqKiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiIiIiIiIiIeHh4eHh4eIiIiIiIiIiIiIh4eHh4eHhoaGh4aGhoaGhoaGh4eDfXp5e3p5enx8e31+fn5/fn59fn9/fn9+fn+AgICAf35/f39/gIKEhoWFhYWFhYWEhISEhISEioqOjYmIiIqKh4iHiomIioiIh4qGi5GPiomJiYmJiYiIiIiIiIiIiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmIiIiIiIiIiIiHh4iIh4eHh4eHh4eHh4eHh4eHh4eHh4eHhoaGhoaGhoaGhoaGhoaGh4J8eXl6eXp7e3t7fX5+fn5+fn59gH9/f39/f4CAgH9/fn9/gICAgoSGhYWFhISEhISEhISEhISKi5CPiYmJi4qHh4WHiYuKiYSLjYmOjYqJiYmJiIiIiIiIiIiIiIiIiYmJiYmJiYmJiYmJiYmJiYmJiIiIiImJiYmJiYiIiIiIiIiIiIiIiIeHh4eHh4eHh4eHh4eHh4eHh4eHh4eGhoaGhoaGhoaGhoaGhoaGhoaGgXt4enp4e3x7e3x+fn9+fn5+fX5/f39/f3+Af4B/f39/f3+Af4CChIaFhYSEhISEhISEhISEhI+Qj4+IiYuIhoeIiYuLjIuJioqNio6Oj4iJiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIh4eHh4eHh4eHh4eHh4eHh4aGhoaGhoaGhoaGhoaGhoaGhYWFhYWFhoaAe3h5eXh4enp8fX1+f35+fn59fn9/f39/gIB/gICAf39/gIB/gYKDhoiGiIaDhISEhIODg4ODkpKOioeKi4qLh4uNiYqJi4iHiouIio+SioiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIh4eHh4eHh4eHh4eHh4eGhoaGhoaGhoaGhoaGhoaGhoaGhoaFhYWFhYWGhn96eXh4eHl5eXx9fn5/fn5/fn1+f35/f3+Af39/f4CAgH+AgH+BgoOHjo+PjoiHhIWFhoaFhYWSkI6KiYmIiImKioiIh4aKjIiHiYmOkJGNh4iIiIiIiIiIiIiIiIiIiIiIh4iIiIiIiIiIiIiIiIiIiIiIiIiIh4eHh4eHh4eHh4eHh4eHh4eHh4aGh4eHh4aGhoaGhoaGhoaGhoaGhoaGhoaGhoWFhYWFhYWFhYWGf3l4d3d3eXp5e3x9fn9+f35+fn5+f35+fn+Af4CAgICAf3+Af4GBg4eOjo6Ojo6Mjo2OjY2MjZCQjomHhoiJiYeIiouIiYyJiYaKjY6PkYuIiIiIiIeHh4eIiIiIiIiHh4eHh4iIiIiIiIiIiIiIiIiIiIeHh4eHh4eHh4eHh4eHh4eHh4eHh4aGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaFhYWFhYWFhYWFhYZ+eXd5d3d6eXl8e31/fn5/fn5+fn5+fn9+f4B/fn+Af39/f39+gIGEiI6Ojo6Ojo6Ojo6Ojo2NkJGOi42JjIiIiYaHiYaIioiHi4yLjpCQiIeIiYmJiIeHh4iIiYmIh4eHh4iIiYiIiIiIh4iIiIiHh4eHh4eHh4eHh4eHh4eHh4aGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoWFhoaFhYaGhoWGhYSEhIWFhoaFhYWFhX55d3l2eHl4e3x7fn5+fn5+fn5+fn5+f39+f39+f39/f35/f3+AgYOGjY2Ojo6OjY6NjY6OjY2Qj42Ni46KhoiKhISLiYeDhYSDi4mLj42JjI6QkI+NjYyLjY6Pj42NjI2Nj4+Pjo6MjYyMjY2KiYiHiImHh4aHh4eHh4aGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoeHiYqKiIeJi4yNjo2LiImLi42OjYyJiImMgHl3d3Z6eXh8e3t9fn5+fn5+fn5+fn5/f39+fn5/f4B/f4B/f4CBg4aMjY2NjY2NjY2Qj4+Pj46NjI6KiYuMjIeFiY2Lh4aIh4aHh4uNjo6Pj4+Pjo+Pj4+Pj4+Pj4+Pj4+Ojo+Pj4+Pj4+Pj4+Oj46Oj46Mi4uJh4eHh4aIhoaGhoaGhoaGhoeLiYeHiIiLjY2Mi4yLjY2Ojo+Ojo6Pj46Ojo6Ojo6Ojo6Njo6NjY2AeHZ4eHp4enx6fH5+fn5+fn5+fn5+f39/fn59fn9/f39/gH9/gIGDhoyMjIyMjY+QkpOTk5KSjYyMjIqHioyKh4eJiYWCiouIiYWJjpCNjo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6NjI2NjI2LiYaHh4eHiYqLjY6NjYyNjY6OjY2OjY2NjY2NjY2NjY2NjY2OjIyNj4+OjY2MjIyLi313dXd5enp7e3p+fn5+fn5+f35+fn5/f39+fn1+f39/gICAf3+AgYOFj5KRkJGSk5OTk5OTkpKLi4uLiomMiouLiYuKhoeOjYiIjI6OjIuMjIyNj46Njo6Ojo2NjY2MjY2NjIyMjIyMjIyMjY2NjYyMjI2NjYyMjI2NjIyNjIyMi4yMi4yMjI2MjIyMjIyMjIyMjIyLi4uLi4yNjY6Sk5OSkpSRkJOVlZSTk5COjo6Oe3Z2d3h6ent7e31+fn5+fn5/fn5+fn5/f35+fn9/f39/gIB/f4CBgoSNkpKTkpOSkpOTkZKSkoqJioyJi4qJjIuKioiHiYqKi4mKjY2Mj46Nj5KUlJOUlJOTkpGSkI+Ojo2NjY2Pko+OkZGOjIuKioqLi4qKi5CPjoyMjIqKioqKioqKiouKioqKi4yLi4uMjIyKiouLi46RkpOTk5SUk5STk5SUlJOTk5KSkpKSk5F6dXZ2eHt7e3p6fX5+fn5+fn5+fn5+fX5/fn5+f35/f3+Af39/gIGChIuRkZGRkZKSkpGRkpGRiYmIiIqMiYiJiYuJhoSJhoyKh4ySkpKTk5OUlZWWlZWUk5OUlJSUk5SUlJSVlZWVlZWUlJOTkY+QkZKQjoyRlZWVk5KSjo+QjYqKi4qKi42OjY6RkpCRkpKSkpGRkpKSk5OTk5OTk5OTk5OTkpOSkpKSkpKSkpKSj3h1d3l6e3t7ent9fX19fn5/f35+fX5+fn5+f39/f39/f4B/f3+AgYKEi5GQkJCSkpKRkZGRkZGIiIiIi4uJg4eLi4yMiIeHjYyNkpSSkpOTlJWWlpaVlZSSkpOTlJSUlJWVlZaXlpaWlpWUk5SUlJSVlJSUk5OVlZWUk5KTk5OTkJGSkZGSk5OTk5KSkpOSkpKSkpKSkpKSkpKSk5OTk5SUk5OSkpOTkpKSkpGRkZGPdnJ3enp7e3t8fX59fX1+fn9+fn9+fn5+fn6Af39/f3+Af3+Af4CBgoSKkJCRkZGRkZCQkJCQkIeHh4eIiIiFi4+KjI6Njo+OkJWUk5OTk5SUlZWVlJSVk5KSk5KTlZSUlZaWlpaWlpaWlpSTk5OTk5OUlJOSk5SVlZSTkpKSkpOTk5OTk5OTk5KSkpKSkpKSkpGSkpGRkZGRkZKTlJSUlJSTkpGRkZGRkZGRkZGRkYx0c3d6ent7e3x9fX1+fX5+f35+fn5+fn5+fn9/f39/fn9/f39/f4GDhIqQkJGRkJCQj4+Pj4+Ph4iKi4yNjYuOj42Mjo6RkpGSk5OSkpKSk5SUlJKSk5OTk5OSkpOUk5OTk5WVlZWUlZWUk5OTk5KSk5OUk5KTlJSUk5KSkpKSk5OTkpKSkpKRkZKSkpKSkpKSkpKSkZKRkZGSkpOTlJSUk5OSkZGRkZGQkJCQkZCRinN0dnp8fHp7fXx9fn59f35/f35+fn9+f31+f39+fn59f39/gH+AgYKDipCQkZGQj5CPjo+Pjo+Oj4+Pj4+Pj4+PkI2OjpCRkpKSkpKRkpKTk5OTkpGSkpKRkZKSk5OSk5OSk5STk5OTlJOSk5OTk5OTk5OSk5OTkpKSkpKSkpKSkpGRkZGSkZCRkZGRkpKRkZGRkpGRkZGRkpKSkpKSkpKSkpKRkJCQkJCQkJCQkJGGc3V2e3x8e3x9fX1+fn1/f35/fn5/gH9+fX5/fX5/fn5/f3+Af3+BgYGKkI+PkI+Pj4+Pj4+Pj4+Oj46Oj4+Pj5CQiI2PkJGRkpKSkpOTk5OTkpKSk5KSkZGRkZKSk5KTkpGRkpKSkZKSkpKSkpKTk5KRkZKTkpGRkpKSkpKRkJCQkJGRkZGQkJGSkZGRkZGSkZGRkZGRkZGSkpKSkpKSkZCRkZCPj4+Pj4+Pj4+PkX9ydHh8fHx7fHx9fX5+fn9+fn5/f3+AgH99fn5+f39+f39/f4CAf4GBgYqPj4+Pjo6Ojo+Pj46Ojo6Ojo+PkI+Pj4+GjpCQkJCRkZGRkZGRkZGQkJCQkZGRkZGRkZGRkZGQkJCRkZCQkJGRkZGRkZGRkJCQkZGQkJGRkZGRkI+PkJCQkJGRkJCQkJCRkJCQkJCQkZCQkJCQkJCQkZCQkJCPj4+Pjo+Pj46Ojo+Pj4+PeHJ2eXx9fHp9fH19fn5+f35+f39/f4CAf39/fn5/f35/f39/gIB/gYGAio6Ojo6NjY2Ojo6Ojo6NjY2Oj4+Pj4+PjoiQkZCPj4+QkJCQkJCQkI+PkJCQj4+Pj5CQkJCQkJCPj4+PkI+PkJCQkJCQj4+Oj4+QkI+PkJCQkJCPjo+QkJCPj4+Pj4+PkJCQkI+PkI+Qj4+PkI+PkJCQkI+OkI+Pj46OjoyMjY2NjIqDiYhzc3Z4fX58eX18fX1+fn5/fX5/fn9/f39/f4B/f39/f4CAgH+AgH+BgYCJjY2Ojo6Ojo6OjY2OjoyNjY6Ojo6Ojo2NiJCRkI6Njo6Ojo6Ojo6Pjo6Ojo6Ojo6Pjo6Ojo6Ojo6OjY6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Pj46Oj4+Pj4+Pj4+Pjo+PjY2MjYyNjoyLi4mJiYiFhYSDgoKEgnR5fXp4dXJrZWltb2xmZmdncHNzd3l9fnl6e3x9fX1+fn59fn9/fn9/f39/gIB/f3+AgIGAgIB/f4CBgImNjY2NjY2MjYyMjIyMi4uLjYyMjIyMjIyGj5GRjIyMjIyMjIyMjIyMjIyMjIyNjY2MjIyMjYyMjY2MjIyNjY2NjYyMjI2MiomKi4uJh4KAh4iEgXt6gH57fXx8fXlzcnJycnV1cG1ramppZ2NkYV9bXF1eWFVXWFlTS0VJSkpLTE1PT0tgdHR3eX19eHp5e3x8fX5+fn1+f39+f35/f4CAgH+AgICBgYCAgICAgIGAf4OEhYSFiIuLjYyMjIuLi4yGiYqKioqKh4OOkJGNiouLi4uMiYmKioqKiouLi4eDi4qIiYmGhYWEhIeJiYWCg397fHl6e3pzcHFxcW1samdsbWdlZmVmZGNlZGVkZWVlZWRkZGNhYV5dXFpYWFdUUFFSU1JTTU1KSUZESEpHR0hHR0xOSWdzdXh5fXp4d3l8fHx8fn5+fn9/fn9/f39+f4CAgIB/gICBgICAgICBgYFnXmBjYWNucX17ent/fXd8fHZ4ent4eHpvcHt4eXt8e3h3e394dXd0dHZ1dHZ3dXFycW5wcnBnaGtsbm9tamlpaGhlZWRkZF9gYWJgYF5dWVhaWltdXV9gX2BfX19gYmFeXl5eWVldXF1bV1dWUlRSU1NOUUpISUZERUhMTEhGR0lLSklNbXJ0eHp7end3eXt6e3x+fn1+f39+f35/f35+gIGAf3+AgIGAgICAgICCgWdYW1pZXFtcY1xaXF5ga3FtcHBvbm5vbmtpbmxrbG9qaWtraWpraWdmZ2dnaWhnbWdqZ2hlaGdjY2JhYmBgXVhbW1dYV1RWUVBUU1NNSkxLTExOTk9UWFhXVVVUUlBQTU1QT05LTE1QUU9MTEpHSUlHSEhJSEhIR0ZHSEpKSEhISUlISVZwc3V5ent5dnZ5enp7fH59fX5/f35/fn5+f3+AgX9+f4B/gICAgICAgIGBbFtYVlZWWVlaWVlYVVZoamxubmxra2poaGloZGVkYlxiZl9fYGNfXF9dYF1eWl5dWVleYmFeXlpZX1xYV1NOTUxLS0tMSUtNTktKS0tMSktQTEtLRkdHSUlGR0lISUZFSEdGRkVERUVEREVJSUlHSEdIRkZLTUtJSUlIR0hLTU1LTExMVXFzdnl6e3h2d3h3ent8fn1+fn9/f39+f3+AgIGAfn5/f4CAf4CAgIB/gYJoUlRVVlNVV1lZWVdXV1tbYWNfXlxbWFZWWVZSVFJRUVVUU1NTUE1KTU5QUk9NUFFRUVFSVlZRUVFUUFBOTk9MSk1MS0xKSktLRklJSkxJR0pISUlFR0dGRkVFSElKR0ZHRkZHR0hKR0dISEpMSkpLSUlISktLSkhKS0pISUtMTU9QUEtUdHR1eHp6eHZ2d3d6e3x+fX5+fn5/f35+fn+AgYB/f3+AgYB/gICAgH+AgmlQUlRXVVRWWVdYWFpbVFRTUlBRU1FRUU9OTlBQUU9MTlBPTk5NTEtNTk5QTU9QUFJRUE5OT05PTk9PUFFPTk5PTk5QTk1NS0lISEpJSUlJR0ZHR0dJSkhJSEhJSEhHSEdISElISUxLSklISkpJSkpIR0pMS0pJSUhKSktMTk1NTU9RTFVzcnN3enl3dnR2eHp7fX19fn5+fn9+fn5+gICBgICAf4GBgH+AgICAgICBbE9PTlRZVVVdW1lXV1hOTUpKSUZKT0xKSkdJSk1NS0pMTUpHSUlJSktMRkRGSktLS0hKTExMT01MTE5PT09NTk9MTk5OUFBPTE1MTk1MTEpJSEdJSElISElJS0xLS0pJS0pJSklJSUlJR0dKSUdJSUpKTk1OTEhJSklJSk1PT01MT1JOWXBwcnd4d3d0c3R3enx+fX5+fn5+fn5+fn9/gICAgICAgYCAf39/gICAgIFvS0pNTlFOTlVXVlZSU0lFQ0VFUkREQT5CP0RAQD5CREFAQURHRkVIRUJBQEBDQ0RFQUNFSEtPS0lJSkhHSklKSUlLSkxQTk1MTU1MTU1NTElIREZGR0ZGRklKSUlLSkhMSklKSkpJSEhKS0tIRkdJSklLTU5OSktPTUxLTU1PUE5QT1BgcG9yd3h2dHJzdXd6fX19fn5+fn9+fn1/gICAgICAf4CAgIB/f3+AgICAgXNQUE5OUE1KS1BSUE5RQ0RCQUZRRT1DPT9FSDk6Oz0/PTxBRkA+Ojw+PjxFRD0/RUE/QEFAREVHR0dHQkRERUZFR0dHR0pHSEpLR0NER0pHQ0RFQUFDR0hHSEdISktKSElMS0lISktLTU5MTUxMSkpMS0lLTU9PUFNRT1BQTk9QUlFNUGdwb3N2dXRycXR4eX19fX1+fn5+f4B+foCAgH9/gIB/f4CAgH+Af4B/gICCdlRVUVFQT0xNUFBOT09BQkFAQkE/Oz48Pj8/Ozg5OTs7OkA7Oz48Ozs8PEhMPT1BQT9CQz1BRERGQkZGREdJSEM/QEBAQUFCQUE/Pjw9PkFAQD8+P0BFR0dHSUtMTk1OTUxNTUpLTVBVU05MTlFOTk1OTE1NTk9OTk1LS05OTk1OTkxUbnBwcnR0c3Fydnl5fX19fn1+fn5/gH5+gICAgICAgH9/gICAgH9/gH+BgIJ4UVFSVFJTUVNTUVFST0BAPT4/PD8+QEE/PT45Ozo6Ozg5Ojg3Ojw5Nzg7Oz49Ozs6ODpAQEFCP0E/Q0ZEQkNDPzs+PkBDQ0E/Pj9BPkBAQj9APD9CQEFDRUVFSktQT1BPTU1OTExMT1JRUFJOTExPTUtOT0xMTEtMS0tKS0tKTU1LS1xxcXF1c3VzcXN4eHp9fn1+fn5+f39/fn5/gIGAgH+Af4CAgICAf4CAf4CAgXxSTU9RUFFSUlRSU1NOPDs8Ozs7P0BBQkA9PDk8PTw5Nzk6Ojk4ODo6Nzg6OTo7Ozg3ODk7Ojg8Oz1AQUA9Ozs+PD09QEJDQT9BQkE9Pj09Oz0/Q0RCQD9BREJFR0pKSkpKTE1MTExNTExOVVNLTE1USVBKSU1KSUpLS0pJSEdKS0lKZnJxc3RzdXJydnl5e31+fn5+fX9+f39/f36AgICAf4CAgICAgIF/gIF/gYCBgFZMTlBQTlJRUFBRUU44PT88PDo9PkFAQT8+PkA/Pj07PDw+Pz08PTs6PD09PTw8PDw7Ozo7PD49Pj8/QUA+P0E/QEBBQEBAPT8/PTw6Oz09PD9AQUJCQUBCREZGRkdGR0dISUtMTExLTEtKS0lKSk1MTEpMS0lISUxMSklJSElLR01tcHF1dXV1c3V4eXl8fX5+fn5+fn5/gH9+gIB/f39/gH+AgYCAgYCBgICBgYCCYUtPT05OT1BPT1BQTzo8Pjw9Oz8+PkFBPz0/Q0NDQD48PT9APz89Oz49PkNFPz9APTs9PT08Ozo9PkFBPz5AQD9BPz89PD48PTs7PD0+QUA/QD5AQ0NEQkRFSEVFR0hISEdGSUpJSUlJSUhKSkpKTEtKSklJSEhKSktMS0lLSkpIVnBvcXNzdHR1eXt7e31+f35+fn5+f39/f39/f3+Af4CAgICAf4GBgICAgIGBgIJtTFBRTk9QTk5PUFBPPjw8PT4/P0A+QEA/Pz9DRUQ/PTs8QD46Ozo6OTc6PDk9PUA9Ojw7Ozw7ODk7Pz49PD07PEA9PTw8Pjs9PD0+QUBCQUBAP0JEQ0RFRkZGQ0VHSElJSEhJS0tMTUpKSUpNTUpLSktJSEhISEpJSktKSk5MSUlfcHBycnJ0dXZ6e319fX5/fn5+fn5/f35/f36AgIB/gICAgICAgYGAgICAgIGAgnZNTk5NTk5MTE5QT0w+QTw8PT8+QkM/P0FBQUJBQD08PTs+PTo6Ojw6ODk4ODo7PT8/PDs7PDs6Ojs+Pz89PDg6Pjw9Pj89Oz4/QEJDQkJDQ0FCQkFCQkRCQkRCRENGSUdGRUhJSUtNSklKSktMSkpJSkVESUlGRkhISUpKTEpGRmdwb3FxdHZ2d3t8fH18fn59fX1+fn9/foB+fn+AgH+AgICAgICBgYCAgICAgICBek5JS0tMTExFSUxOTTw/PDw9PkBAQUE7QkNCQ0A/Pz9APT9APjw+QD89PT0/Pj0+Q0Q/Ozw9PkA9PT5BQ0A8OTtBPz4+QT07P0JAQkNCQENDQUNBPT0+QD0/QUFBQENFRUBAQ0JDR0dFRENGRUZGR0VEQEFHR0ZDRkRHSEpHQz5IbG9wcHF0dXZ5fHx9fHx+fn1+fn5+fn5+f36Af3+AgICAgICAgIGAf4CAf4CBgIF+UUhLTU1NS0pLTE9RQD8+PkFBQEBBR0FCRUNEQT9AQEA/PUA+PD0/P0BAQENAQD9AQD49PD1ARUFCQkZIQz08QERDQUE/Pj1AQT4+Pj88PkBER0VAPkBBP0BDRkVDQkJDQEJEREJERUFCPkFCQkFCQEA9QUJDRENDQUNFR0E/PVZwcHFwcnV1d3p8e3x8fX9+fX19fX1+fX5+fn9/foB/f4CAgICAgYCAgIB/gIGAgX5SSEtNTUxLS05OUlVEQkBDQ0FBQkBCQ0BAQUFAQUA+Oz48Pz08Oj49P0JCRUA/QE5hX0pAQ0VJSUlJTU1LRUNGR0hFR0VFRUREQ0E/QD4+QkZKSkdFRUZGRkpOTUtKSUdHSEtMSkdHQ0REREVEQUJCQ0BDREVEREVERUZDQkFEZW9wcXF0dnV4e3x6fHx+f319fX19fn59f4B/f39/f39+gIGBf4CBgICAgH+AgICAfVJJSUpKSEpKTE9SU0dGRUdIREdIREA+PDs+QERFRD88QUNEQj89QT9BREVFQ1d1homKflhHSUpMTE5PT0xIR0hHSElJSEhHR0hIRUNFRUVFRkhKSkZFR0lKTU9PTU1LSktKTU5LSUhHSElIR0ZFRkZGREZIR0VFSEhGSEdIRlFub3BxcnZ2eXt7e3p9fX5/fX19fX1+fn1/f39/fn5/gH+BgYGAgICAgICAf4GBgIB8UEhHSElGR0lKTU5OSkxJSUpLTE5KRkNBQkNGSkhJR0hISUdHQkRGRERDQVZ0h4mHh4aIgldJTE1MTU1MSkdHR0dER0dHR0ZIRkhFQ0RERkVEREhIQ0NDR0pKS0xMTEtMTElKS0pKSUlJSEpISEdISUhHR0hGRkZISklJSUlIXW9vcXJ0d3d6e3t6e319fn59fX19fX5+fYB/f39+fn+BgIGAgYCAgICAgIB/gYCAgHxNR0ZIRkVGR0dKS0pMTUxLTU5NT0tJSEhKS0tMS0pLTUpLSUhGRkdGRVBshIeGhoaHh4iHfFBLTEtIR0ZGREVDQ0BBQ0NDQ0ZGRUJAPj5AQUFAQkQ/Pz9ERkhERUdJS0lJR0hJR0lJSkpJSEZKSkpKSUpJSkpKRklMTEpKS0tmb3Bzc3R2eHl7e3t8fH1/f319fX19fn59f39/f35/f4CAgICAgYCAgIGAgICAgICAfU9GRkdGR0hHRUZHR01NTUtMS0lHQ0NDRElLS0tLS0tNTEtNTUlGSlZsgYaFhIWGhoaHiIaKdUlJRkI/P0A/Pz88PDw+Ojo8QUFAPjw5OTg8PD07Pjs5Oz9BQkFBQ0NDQEFCRURBQ0ZISUhISEtNTEdJSk1NTk1KSktLSkxNU2xvcXRzc3d5e3t7fH19fn9+fX19fX1+fn5/foB/fn9/gICBgIGBgICAgYCAgIB/f39+UUZFRkdJSUdEQ0VGTk1MSklIRT85Oj5ARUhHSUlLTE9OTlFOUV5ygYWDhIWFhoeIiIiJiYyOZkJCPjg4Ojo5ODc4ODk2NDc5Ozw6ODU2Nzc4OTc4NzY4OTs7PD5BOzk5OT09Pjs7PUFDRUhKTUxMR0lIT1JRUFBOTE1NT1Fdb3BydHN1eHp7e3x8fn9+f359fX59fX5+f39/gH9/f4CAgICAgYCAgICAgICAgIB/f39RR0ZHSEpIRkVGR0hMTEpJSUdDQjU2OzxDQEJGSEtITEtPVWd7hISDgoOEhomKi4uLiomKi4yJVDs4NjU2NzY2NjU1NzYzNDY4Ojg3NjU2NTY3Nzc3ODo3Nzc4Ojs3Njg5OTg5ODc2OjxAR0ZJRklGRUZPU1JTU1JPUFBSVGVwcXN0dHd5e3x7fH1+f35/fn19fX19f39/f3+Afn+AgICAgICBgICAgICAgICAgH9/flJISEhJS0lHSUpJSkpLREVIRUJANTc4OD06PERCREZGRWZ6g4SCgoOChYmKiomJioqKiouJiYqBSDY3NjQ2ODg3NDU3ODQ2Nzc5OTc2Njc2NTo6Ojo6PDg5ODk5ODc3Ojo5ODg3ODU4OTtBPT4+QkE/QUtMT1FQUU9PUFFXa3JydHR1d3p7e3t9fX5/fn9+fX19fX5/f4B+fn9/f4CAgH9/gICAgICAgH+AgICAf39+VEhHSUlMTUtKS0tMSUg/QEFAPDo1Nzk4OTc6QTk8REBRf4ODg4SEhIaJioqIh4iIiIqKjIqJiYx6Pjo4ODs8PT45Ojs8ODk7OTo7Ojk5Ozo5PT09Pzs7Oz06Pjw6PDs8Ozw7OTo8ODo6Ozo5OTk8Pzw9QUJESUpNS0pLTFdvcnR1dHZ4e3t7fHt9f39+f359fX19fn9/f35/f39/f3+Bf4CAgICAgICAf4CAgH+Af35URkVGSUxOTkxKSk1CPzo7PDo4OTk4OTk5OTo+PT9ARHaDg4SEhYaIiYiHhoaGiImIiYuMi4mKioxsPDs+QkNFRUFBQUI+QENBQD89Pj5APz4/QD9APT0/Qj9BQT9BPz1AQUA/P0E8Pjw7Ojs6OTs/PTs7PT1BQUNBQkNBWHBxdHR0dnl7e3x9e31/fn9/fn19fX5+f35+fn9+f4B/f4CAgIB/gIGAf39/gICAf39/flJFQ0FHSk5PTElHSzo4Ojs5Ojo8PDo7Ozw7PT5BQD5ihYOEg4WEhomJiIeGhoaHiImKi4uLioqLiotePkRHSUtKSUZHR0RGSEdFQ0BAQ0VDQkBCQ0I/QERIRUNFREZFQUZFRkRGRkRAQj89QD49P0A+Pz8/Pj8+Pjo7PTxgcXJ0dHV3enp6fX19fn5+f39+fX19fX5/fn5+fn5/gH9/gICAgICAgICAf4CAgIB/f4B+UERAPUNIT01HRkJEOTc6PTo8Oz4+Pj87Pz1AP0M/Sn6DhIWGhoaIiYiIh4aGhoeJioqLjI2MjIuKiodXR0xMTUtOSUlLSElKSklFQ0RGR0ZEQ0VGREJISUxHR0dGSEdFS0pMSUtLSkNGQ0NEQkFBQ0JEQ0NERENBPTw+QGhwc3R0dnd6eHt8fH19fn5/f359fX1+fn9+fn59fn+Af3+AgH9/gICAgICAgICAgH+AgH9PQT49P0RMS0BCQkE5Nzw+Ozw6Pj8+QD0/P0JCRT9ohIKFhYeHiImJiIiHhoaGiIiIiYqMjYyMi4uKjH9QTVBNS05LSkxJSUpIS0ZER0hISUVFSEZGRUxMTUlKR0dISUpOTU9NTE5LSEZHR0VFQ0ZGRkZERUhIRkNBP0BMbXB0dXZ4eXl5fHx8fX1+fn9+fn19fX1/f35+fn5+f39/f39/f3+AgICAgIB/gICAgICAf1FBPz4/RkdHPTxAQDg3PDo7PDo+Pz0+PkBBRENJU36DhISFhoaHiIiIiIiIh4eIiIiJioyNjIyMjIuKjXFNUU9NTExMTEpJSEZKSURKSEdLSkhKR0dHS01OTExISElKTVBOT05NT0tJR0lKSElESUhIRkZHR0lHQ0JBQ1VvcXZ2eHp7eHh6enx8fn5+f39+fn1+fX5+fn5/f36Af39/f3+Af4CAgICAgICAgICAf39/VERBQUJHSEI/OD9AODo7Nzw9Ojw/PD0+QEJERE1thIOEhIWFhoeIiIiIiIeGiIiIiIiJjIyLjIyMi4uLi15SUlBNTk1LSkdHQ0hKR0xKRktPTEtKSk1NTE9QTkhJS0xPUVFQUU9PSklKSkxKTEZHSEdGR0lGRUVCQEJCXHByd3h5enl5eXp6e3t+fn5/fn59fX19fn9+fn9+f4CAgIB/f39/gICAgICAgICAgH9/f39VRUNFRUdHRUQ7QEE7PTw4Pz09PkBFRT5DRUNHS3WGg4ODhISGiIiIiIiIh4eIiIiIiIqLi4uMjIyMi4uNfFdWUlJUUk9MS0pFRkZLT05PV1ZRUE9RU1JOU1RPTVNMUFNVV1JTUlBMSk1NTUtOR0dKRkZJSkRERUVCRENjcXV5eXp6ent6e3p7fH59fX9+fX19fXx9fn5/gH9/gICAf39/f3+BgYCAf39/gIB/f39/f1VGRkdHR0dIRj5AQj0/PTxBP0FBRVVMQklKR0pMeYaDhYWEhYeIiIiIiIiIiIiIiIiJiouKioyMjIyOi4uLZ1ZWa2FFUlFRUEo7O1FTUmB1XVVWVFZZWVNZWFJaZlBVV1pdUlRXUVBOUlBQUFFLTEtHSEpIRUZJSUlISWpzdnl5enl6e3t8ent8fXx9f359fX19fX1+f39/f3+AgIB/f39/f4CAgIB/f3+AgH9/f35+VEhKSUlHR0ZFPz9BQEVBQ0ZEQ0RLVlBLUFBOUFB5hoWHhoWGh4iIiIiIiIiIiIiIiIiIlJyMioqMfWGKi4uGbFtkVTpYWFhTUD9AVlVZXGRgVllicl5dV11aVkVRWVpcWV9UWWdSVVZYVFRWU09PTUpMSklJTE1LT01Tb3R2eHl4d3p6ent6e3x9fH5/fn1+fX19fn1/f39+f4CAgH9/f3+AgICAgH9/gH+Afn9+fn5WSkpJSEdGRERCQT9ITElNUEtJSk9TUlFVVlVWVHWFhIWFhYWGh4iHiIiIiIiIiIiIiImcnaCPiY5nO36MiYqLem5wWFpbWlJTUldWVFpadYNZVX2QYVxYXV5XSVZeXltbX1lIWVhZXF1YWFlXUlFNUFFNTU9TUVFVUmFzc3Z3d3Z4eXh6e3t8fX19f39+fX59fX1+fn9/gH9/gIB/f3+Af3+AgICAf39/gIB/gHh5fVlOS0pJSUZCREBBOk9RUVdYUFBQUVJTUlZXV1dXbIGCg4WEhYaHh4eHh4iIiIiIiIiIiJaanJeIioFuhomIh4OKfmZZWVxZU1ZUV1JRV1ZjloBRZXJYWldfaFBgZlpaWFxoYkdPWmlnXVtcXV1XUk5TUFBRVlZWVllab3N1d3Z2dHd4eHt7fH19fX5/fn59fn18fn9/f3+Af39/gH+AgH9/gICBgYB/gH1yfX9/b3R8XVNQT01LSkVDP0A7UFBaWlpSU1FPUVJRVVJVU1ZedXiAhYSEhYaGhoaHh4eHiIiIh4eIh4ORjomJiIaFiIiGfYB7XFBWWFRSVFJRUUxPTUtmeVpdVFlVVl1aTFRaVVNUXlpYV1dXemtYWlxcXlRRUVBJTk9XVlhbWmRxdHZ2dHR2eHl5e3t8fX19fn99fn1+fX1+f39/f4CAf3+Afn56eHd2c3V7f3+AgHRrfn5rcnleW1ZVU1JPS0ZDREFNXoNsVlJTTk9RT1FWUlNSUlRjZHaAg4KDhISEhIWFhISDhoaGhoeIhn6JiYiHhoOHh4d5bXFWSUtOTktNS0hKREZIRUM+U2NVf1JQUU5LUlVSTU9ZUU1OUVNVVU1RU1JQT01MSENJR1JTVFpdbXJ2dnV0dHd7ent7e317fX19fn19fX59fn9/f39/gH99fX5+f39/f4B+e3Zzd31+fmR1fWlxdGBkXV5bWVVRTElMSWFsknRQUVNOUVJQU1tSU1JRUlVVYnN7fH6AgYKBgX99e3uAf4OChYaHgoaGhoGEgYaFhnVfXUtDPkJCQ0NCP0RQQ0RAQz5CSEdWQElOTUddaVFIRk9GREVGSEdIQkNIR0hLR0RCQUNATlBNUmR0dXZ1c3R2enx6e3t7fHx9fHt+fX19fn5/f3+AgIB/f3x8fX+Af39/f4CBgH12dHt/bWh8Z25xZmllZWJcWFNRUFVSc1dlW09PTkxRUlBVWVNVUVFUUk9WYGtsc3Z6e3h5dXJuc3RzeXh+foOAg4OCgYKAgoGBa0xHPj46Oj5APz8+PmpQSmFFRkhJRUI/SE1NR01RVUpCRT8+PD08PT0/PT9BQ0NAPzw9Qj5JTUZVb3V1dnN0dnh7fHp9e3x9fX19fH59fXx+fn9/f4B/f39/enl3eHd2dnh7foB+fXt4dnx1YXhnbHBqbGppZmBbUVFaXFleSUpPUE5LTFFSUVRVVVdRUVdWUFhbYl1hZ21tbG9raGBucmltbHF1e3p9e3h6fHx4d3hkQkBAQTw6QkNBQUNBW1xOe05PT05LTE1PT1BMS0xXT0lHQUE8OTc3NTk5PTs7Ozg5ODk/O0FHPlx0dXZ3dXZ3eXx8fH18fHx9fn18fX19fX9/f39/fn9/f314dXd6e3p3eXh1d3t8eXh1eXdjcWhpcG1ubW1oZl5PT15cWklHT1FRT01QUU5RUlNWWFNSWVROWVpbV1lcX15fZWBdXnF3a15gZ2t3b29sam9ubmxmYllHRkZIQkFGSEVFRkNMUU9hV1JYUVBTU1JVW09PUVdQTUpERj46OTY1ODY5Nzk6MzY1Nzk1PEI9ZnR1d3h3eXl7fX18fHt8fX1+fnt9fn19f39/fn5+fn9/e3d1eX18enh8fHx8dHd2d3Z1d2tuaWhxbm9vb2prYFVXXlpXTUtTVFNQUVVPTFJTVFdYU1RYUUxYWVlWWFhWWFldV1hYaHNrXVZgdGthYV9dZGBfXllVUE1PTUxJR0pLSUhGQ1BPU1pXVFROUVNZU1xlVU9TVFFOS0lIQz9BOTk5ODk3ODg0NzU3ODU5OUducnV5eXp7e319fX18e318fX5+en1+fH1/f359fn59f358dHR1e3hycW9vbnR4cXJzeHZ1cWZkZ3JucHBxbm1kXV9fWVdPUFdWVlNUVk9PVVZXWFlTVVRMS1NVVVVVV1BUVVdUVVJdbl5STllgW1ZZO0RVV1RbZkpMUFJST01NTk1NTEpGUFBVWVNUT0pOT1VTVFxWUlVTU09NTElISEY/Pz06Nzg3NjU5OTY3NTY1V3FxdHh6ent8fX19fnx8fXx+fX15fX18fn5+fXx8fX1+fXxydnF4eHJ1dXFxbnBwb3B1dnRuamRkanBwcXJwbmZlZGNcXlJUWlZXVFNWVFJYWFlZWVJVT0pHT1BPT01SSk9QT09OTk9UTE1JUFBTVFUyPFhNSUFRPWNgUVNRUE5QUE9OTk1QTlRSUFJMSUxLT1FQUVJTVFFTT0xNS0xMSENCQT06OTg3NjtCNDU2NjtlcHJ2eHl7fHx9fnx9fH19fX18e3h8ent9fX58e3l9fH18e3B1b3d1cHV0b3N2cHFxcHV1dmNqZ2VXaHRycnFuaWlocFZWVFVYVVZVUldWVVpZWFdVUVNGRkFGR0dIRkpESEpIR0VITEhLSUdMTVBNRy9FX1I+NEA+am9hUlJRQEdUUU9QUFFOUU9QT0xKTExPUE5OUFFRTlBPSkxNTUtHRUVEQjs9PTw5PUc2Njc2RG5xdXd6fHt8fX18enx8fX5+fXt5dnh3eXl8fXp6dn17fHp6b3Fud3JwdnFtcHNwb3Bzc3N0ZmdgaFpXa3JzcmxtbWtuYmVQU1RSU1VPV1ZWWVlWUVFRT0A+Oz0/QEJBQ0BCRURBQEdIR0hGRkhKTUxER0NPUkM4RE1TXWdTUVNBR1VQT1FRUE1NTkxKTEtMTk9PUUxOTk1JTUxJS0tMS0dGRkVEPEFBPjtARTs8ODlUcnN1eXt7e3x8fHt5fHp6fn58e3V0dXJ2dnp6eHpyfHt8eXltcW94cnF1bm5xcm9vb3Rzc3J1dGtnZ15lam1wa29xbWltY0xPTk1RU0xUVVRXV1VMTEtIPTk4Nzs/QT49PUFAQj0+RUhGREZGSUdKSkBGQUFARkdESU9IUVJhXFFQUk9TTk9PTExPTUtNTE1PTltWS01RT0hKSENJSkxMS0ZGRkU/QkM+PUJHP0I/QGRydXd7ent7fHt6end8d3l+fnt7cXN0cHJzd3R4eHN6e3l2d2xxb3ZxdHRsb3Fybm5vc3ZydHNycmtsZW5zaG1ubWxtbGprSUxISE9RSlFTUVRTT0tIQ0U9OTg3OT9CPzs+QUBAPkFESUVDSEdJR0lFQkI/PjxDQUBHSURNT2JlUE1PTVdLTE5LS01NTExLTk5TZE1KTFJJSUlFQklKTE1OSkdJR0JBQkA/RUZFSERMb3B2enl5e3t6e3p3dHh0eHx8eXpucXJtbm9ycnZyc3h8eHZ2bXBtc3B1dGxwcHJvb29ydnVyVlZucWdseYRqbXFybm5qaG9ISkNHTExJTVBNUE9IS0U/Qj05OTk6P0I/PEFCQUFEREdLRkRJSUdHSENDP0I/P0BAPUNFRExNUVRMSklNVEZJSUpMSUpLSUpMTU9QUlBLR0NMR0NDS0pMTk9OSUpJR0NDQ0RJSk1MSVpzbnh5eHp7e3l8dnJwdXJ0eXl2eGpxb2psbG50dG1zdXtzdHhyb25xb3ZzbnBvcnBvcHN0eWpOYGdzanR8eWdvc3FpcWhlcUhLQ0ZHSEdKS0lKTERHQj0+PTo6OjtBQj89QkJDQ0hFSkxKRUlJRkdHQ0Q7QUBCPkA/QkVESU1PR0hKR0hLREhJS01ISkxISUpMSk1dUklIRE5HQkVMS05OUU5MTUpLRkdHSk1OUk5NY25qd3Z3e3l7en1xbWxza3B0dHR1aHBtamlra3RwbnR0eXByeXRvcnFvd3NvcXB0cnBydXR5a05WbXVscXt2aW5vaWp0aGVwRktDRkVGREVFRkVHQ0NAPTw9Ojs6O0FEQT9CQ0VFSUZKSkxGSUlHRkZDQjtCQ0M+P0NDQ0RGTE5ISk5IREhESUxOTUhJTEdGRklJTE5LSkhFT0lDR05NUE5QTk9PTUtJSElPU1FSTlNnZ2Zyb3N4dnt6fGxoam9la3Btc3FmbWxoaWtsdG1wdXR3cW94dG90c3J2c3BxcnRzcnR1dXd2WFZ1dWtvdHJrb3ZsaG1mX3BHSkNFRURCQkFFQERCPj8+Ojs7PTs9P0RCP0FDRkdLRkpJTEhHR0dGRUM/PURFQj5BQ0JDRUdISUdNUElGRkZLTk9LRkhJRkVERUlJSEtJRkhQS0RKTU1RTk9OT1BOSkpJTVJVVVJQWGVhYW1ncXJvcnl6Z2VoaGNpbGZxbGZsbWdpa2xzbXB2dXRwbnZyb3Nyc3V0cXNzdXRzdXZ2dnl2dXR2bGt1dW1ydnFsbmxlck1HRUVGQkFAQUQ8QkE+QT06Oj0/Oz4/QUI/QEJFR0tGSkdJR0ZGRkVEQ0FBRkZDQkJCREVFR0dIRkxQTElPSkpMS0lGSEVGRURDSUhIS0pHS1JNQ09PTlFPT09OT09LS0tQVVdWVlRZYF9daWFuam5ocnNiZWZmZGloZm5pZm1taGtrbXJpcXZ1c3Ftdm5vcXJzd3Nyc3R1dXZ2dnd2d3Z2dHd1a3N1bnV0c3Bya2tzTUdHRUdBQUBDRDxBQUBDPDg6PT46Pz1AQkBAQERGSEVIRkZIRkVFRENEQkRJRkNHRUFFR0VGRkdFSk1LSFFNSktISElFRkhIRUNJSUpLTUtQU05EUlNRUVJOT05PUE1MTlNXVldZVlheWl1kYGhjamlna19kZWZjaGhna2dna21rbWxwcWd0dHVyc252b3FwcnR4cXNzdXZ1gpF5dnZ0eHV1d3hub3VvcnN1cXFpcHpNR0dHSEFBQkVFPEBDQkQ8Nzo9Pjs+O0FCPj8/Q0VGREZEREdFQ0VDREZGRkpFRUlHQkdIRkdGRUNGSkpHTUtMS0hKS0ZJSEpIRUtLTExOT1JUT0lUVVRRVFBRTU5RTk1RV1pWWllXWl5aWGFgYGBeaGVjYGRlZ2dqaGhqZ2hubGxvbXFwaXV1eHJycHVwcHBydXZwdXN1dnV7fn14dnR3dnZ2d3BsdXBtc3Vub3NzeU1ISEdJREFDR0U8QEVCRDw4Oj4+Pjw8QkI9QD5BQkZDRUJCR0NDREVGR0dHSUZHS0hDSUhHSUdGREhLSUdLSE1LSktMSExKTUtJTkxOTk9SVVZPTFZWVFFUUlJMT1FQT1VZWllcWlpcX19eYGNeXGJkbGNgZGdocoVoZ2pmam5ucG9uc3FqdHV4cnNzdHJucHF2cnF1cnV1c355jn11dXZ2dnZ4cml1cWtydGxxd3F1S0lLSEpFQkRHRT1BR0REQDk8PkA/Pj9DQjxAPkFBRkNFRENIREZERkZISEZIR0lLSkVKSEhKSEZGTEhISEpHTExMTExJTUtNTk1PTFBQUVVWV09LVlZVU1NSUUxPUlJRVltbXV5bXV5gYGFgYmVeZGBmaGBlaGpkc3NmamhmbHBycW9zc25zd3dwdXZ0c21vcnVvcnNwdXJ2cnSBdnV1dXd2dXd0Z3Rya3Fya3J3cHdJSktJS0dCRURFPEFGRERCOz8/QUBAQURBQEI+QUNIQkVERkdFSUVGRUlIRklISkxISEpKSUtKRkpLSElKSUdLS01MSkpNS01OTk9MT1BSVVdWTU5UVlVTUlFQTU5UU1JXW15eX11eYGBhYWJgY2RlYmRpY2Rpamd2i2xraWdtb3NxcHFwcHJ5d3J1dXRzbW1zc21xcm90dXVzcHN3dHV1d3Z1dXRlcXNrcHFqcnZwd0pMS0tMR0NDQUU8P0VFRUM9QUFDQkJDRUJDREFBRUdDR0ZIRkVJRkNHSkdHSkZJTEhJSk1KTEtHS0lIS0tOUUtSUUxTTUpOTU5QUFBUT1dYWFtOU1FXXFpTVlBOVFVUVFhaX2JiX2RhXmFjXmBmYmFjaW5oY2loaG14dm1oaW5vc3JwcXJycnZ0c3Vzc3Nua3NxbXByb3R2c3FxdXZ1c3d5d3V0dWNtdGtvcGpxdHB3TE1MTExHRUFARD49REVGQz9DQUVEREZDQkVHQ0NJRUJISklHSEpGREtKR0hKSUlLR0pKT0tNS0lMSEpNS1pmSmRcS2xSR05OX25VbHNbcXBid2NSUGJ2dWh1Y2F2YVhucWJkdmluemZcbHVgbGtVYHh2aWpoaGZnbG1qbW9qbW9zcnBycnFyc3Jzc3J0cm5sdG9ucHFxdXVycXN0dnZ1dXl3dXR0YGt0a3Bwa3FzcXlLTkpLSkZCP0BCPzxERUZEQ0NDRUVERkJGRkdEREpEREpMS0lLTEdHTklISktHS0pJS0pOTExMTExJTUxMW3NiZHBebGxVTE5lcl1nZXFsbnRncGlfYVlubWJwcGJrampnb3F0ZXRublxwdmdxTktyeXZrYWFrZWVseG1rdmxub3NycHJxcHFycXJycnRybW1zbm5vcHJ1dHFzc3R1dXV0d3h2dXRibXVrcHBscnJxektMSUlHRUQ/QUE/PUJFRkJFQ0VERUVEQkhIR0RFS0hHS01NSUxMRkpOSEpLSklLSkpKS01NTk1NTUtOTU1bcnBvbnBwbGtNUFFsWE5pYnRycGFtb3ZcWWxQW21tWnFta29teHh0c2lwXWBzbHFqVXV5eG9jXmtmYmdwcGppb3Bwc3NwcXBxcXJycXFycnRsbXJtbW5vcnV0cXRydHV1dHV1enZ1dGVudWtwb2xzcnJ5SktHSEZFRUJBQj0/P0VHQkdESUVFREJGSUhIREdLSkdNTE5KTE1HTE5JTUtISk1JSkpKSk5PTk5NTE5NTFxoZHVdbHFXbE5PUW1VWmtea2x2YWxkdFRlY05sWWxcdHBraWx4and1aHBdX3NraFdiY3d8b2NgZ2hhY2l0eWtubnFzc3BxcHFwcnFwcHBydWttcW1tbW9xc3Rxc3J0dnZzd3Z6dnV0aG91bHNvbXNydHZJTUdJRUVEQ0FCPEJAQkZDR0ZLR0VDQ0hLSEhGSUxLRk1LS1FRTEhNTUhOSklITkdKSkhITk9NTkxKTU1KWnRwcG9xcW1sT1FSbllza2dvb3Fxb210Xm5YYXRfbm9wb3Fyb291c3R0altedGN3eHJqbnpoYWFjZmFiam10dXBzdXZzcXBwcW9ydHt/fn13bGtxbmxtbnByc3F0dHN1dXR4eHl5dHVrb3VtdG9uc3N2dElLSEpDRUVFQEA+Q0NBRkNISU1IRkNGSkxJR0ZLTUxGT0pLV1JLR0tKSk5JSUpMSUtKSUlLTU1NTElLS0tTa2JaaV5famNyclpfWWtvYGVlVWtfZFthYlFgbWhcalxuaWlkWm9lZHBdWlxrW21xY3BzbGRnY2RnYGBrbXBwb3R5cnVxb3BxbnmFiIeHhoWAdnNua21tb25xcnR0cnR1dXZ5eHhzdW5xdW53cXJ1dHdySUhGSURFREZBQEFFRENHQkhKTEdGREdLTElFRkpPTElPSkxbUUpGSEhLTUlISkpLS0lISkdMS0tLR0hKSkxMTEtJS0xOVFtdVFBVTVFQTk9PVVJQUFFPT1FKSk5QUWRxaVRZVltbXFVZW11YXVxcY2ZhYWZiY2ZfXmZrbWhtdHhydHJvcHB0hoeGhoaFhYaHg3pwbW1sa3FzdHRydHZ0dXl5eHV2cXJ1b3ZydHN1dXNIQ0VHRkZBRUM/Q0dERUdDSUtMSEZER0tMSERHSVFLTE9LTFdNSUZFSElKSElLSExKSUZISEpISEhFRkxISUtOTElPXFdeT1xcYF5PWFlTXFxiXk1ZWk1YYVJLWWFaU2BkXGJYW2RkVlZYXFlaWFxWWVxeY19kYGFfZWhrZ210dHFxdHBxcoGGhoaFhoWFhYaGhoR9cmtpb3Jzc3N0d3l5eHl4d3h0cXhyeHNxcnVydE9CQ0RMTUJDREJESUVHR0ZLSktIRUVKSkpGRUhIUEpMTUpNUklIRUFIRkpJS0tJTEpJR0VKSEVGR0RFSkdCSU1KS1RfWWBYYGFbYFVYWVReXlpfUllcUF5cWU5fXF5TW15kX1pdYGNfWV9iW2BeW1VZWFpfXmRiYmFjZWlla3Jwb3Bwbm93hoaFhYaCe4CFhYaGhYaFf3VxcHJyc3V5eXp5eXh4eHdyeXZ4cnF4dnR2YVNKSk1JRUNCQ0ZHRUdHSUpKSUlERktKSkVGSUlOSk5MSExOR0hGPkdHTElLS0pLS0lHRUlFRERFQUVJRD9JS0hOW2NZXl5hX1JUU1dfYFxdWV5RWVxNVl9XS1FZW1FbX2JhXV5jYWBiYmJjY2VaUllWV11bXmNgX19jZWJob21tbGxsbHWFf4SDeXV8hIWFhYaGhYWGhoN9d3JydHd5eXl5f359eXV5dnZybnp3dnhYUUpGREdFQkVHSEZHSElGR0pHSEZIS0lLRERKSk1NTExISkpISkc/R0ZOSktLTUtLS0lHSEREQERAR0hBPkhJRk9dYVpbZF1fVFFSWF1cXFxfWktXXExSXFlJTV5RUV1fYmNjY2NiXGRjYmRjZVhSV1VUXVlbYV9eX2FhX2Rsa21qa2xudn51gXp8hIWFhYWFhYaGhYaFhoaGgnpyc3V1e4WHh4eGhYSBfnhwend2eFxSTUNASUZDRktJRkdHSUdHSkZGRklMSk5FQ0pKTE5KTElLSklJR0JISFFNS0tPTUtLSUhIRUQ/RUJISEFARkVDVF1ZXlhfWV9bXVVYWFBdXVFLSlZeWF5bXVZaYVJSX19iYmBgYmJgY2JiZGRiWFBSUlNcVFxdXl5eX19gZGhnbGpubnB7e3x+e4CCg4SFhYWFhYWEhIWDhISHh4FzcneFh4eHh4eHh4eHh4WDgHx4XFNLQkFHRkRHTVJIRFJLRkhISERGS0lNUEVHSUpLTkxMSUxLSklHREhLUU9NTFBMTEtLSUpERUFFQ0hGQUFGREFWVUVcVF5TVl9YTlRVTlpbTUpLVGBhW19YX15iXU9YYlxgYF9iY2JdYmJXX19UUVBRUllTXlxcXV5fYGJmZmVsZm9vd3x7gHt9f4CEhISEhIWFhYODhYKDgoWFhnpvgYaGhoeHiIeGhoaFhYSFg35JTkZERkZHRElTY1FFV19JR0dIREZNSlBQRklJSktOTExLTUtKSkdFSU5RUU5PT01OTU5ITEJEQUNDRkRCQUNEQExIQkxMUE9OTEZNRkZISUhHTExNT1BJTE9QUFNQTFFUUlVaWFdZV1hkVk9TVFBRT09RVVRcWVlbXl5hYWVmY2hkbG1xc3N6eX97en+EhISEhISEhIKEgH57gYOBfXuFhIaGh4eHhYWFhISEgoGAfUtJRUVHRkdES01eTUhIWU1HSEpIR01MUVFJS0pLS05NVU5PS0tMR0dLUFRTTlBPTk9PT0hLRmBFRF5MRGZjQ0xbSF5bc21PTVZtWUxDUF9UbFdnSl1XVV5ETFFVTE1TVlFSVFhWVFhVVFxUUGZaaGhlWlRrVFhXVVtcXGBgYWJiYmBnaWdubGhyenx9foGEhISDg4ODgX19enJ7gXp7f4KAg4SEhYWBhIWBg4N/fnp7TElFRkZIRUVLT1RKS0dgVEdKT0pJT01SUUtNS0xPUlVST1BKTE5HSE1RW1lPUFBOT1BQSktRf1FJfFlZcnNXUG1IcW5vYVZQcXF0T0Jrc25xdHBTb19bblhdVlxYVWtoVV1WY1lgWVpfVlVXf2l0dXVfYXZfWWJcXGZbX2FhYWJeYGNnbXBsYHB3dHiBgYKDhIJ/fX6Adnh6bXZ+dHh9gHx+gIGChHyAg3p/gX9+d3dOSUVITU1CRExMR0pMRlJWTEtPSExSWFdRTk9PTVFUTk9RUEtMT0dNUFNbWlRRUk9QUFFLSVp4XVR4ZGhYUVNQdmd0bHBibmZrUnJPTHdtanJwc3JxcnBvcIBdZnp1eHFxenF+cn1rdX1hUmh8ZXNzb3NzfH1wfnhvf3JfYGBiYlthYWhrbmtibGZnbXd+gYCDfnt4d4B0dnpocn5udHx+d3h7foCDeHyBdXx/fHxzc05LRmBdR0FFTU1IS0tISlFPTU5KTlZeWVVMUVNOWVlMU1NSTkxQSVFSVFlXV1FUUFBRU0xIZ3hsY3hxbVpKTFR5cHVtdWJudlBkZElldnFtd2+AamZ4eGlYclJpe21panp6fWx4en9wZ25YdXVqdnVwgGFzaH1pbHh8b19fX2NiXF5kZWZpamVnYmNkbGxwcHN0c3NzeXFyeGJsdGdyeXtzc3V5foFzdnpufH15eHJuTUpSdE5DQkVQUUlLTEpMUU9PT01QWmBaWEtUV1BhXlJWUVlTTVBKU1RVWFdXT1VQT05TSktyb3V1cXVxY2hhVm5McXBeR2h5V3ZUS2h4fXhgeXtzbmFdbW9kU2dydW5teXB3bHZzdHFsbVxzfXprbXl8bHVufGxxdnV4Xl9fYl5dX2VlaWdoZmVeYmJpaWlqa25va3FubWpwYWNmZG93eG9tcHN5f25xcGp7enRyb21LS1pWSEdFR1JRS01OTExRUVBQUFFXXFlVTlZZVWZYUlJZXlRNTkpUVFZXWVdPU09PTlFJUm1IaXdLYGR2dVVXbE5ubHtyYWpnf3VUS1draH1sbWx4X1pwentfYHpzY3JveHFoZHxpcntdVEtsX3Z1bGp2fHttfnlrfHBdXl5iW15iZGVnZmZlY1tjY2lra3JzcndnbWloZGdgYWxhZ3NybGhtbXJ8a21oa3t0bW1rbU9HSktISkhIUlFNT1BNTFNTUk9TU1hSV1RQV1pWVlRUVGFgUU9OS1RTU1FWVk9PTU5PUUpIUU5QVUxLS1JTUlJST1ZVUVFPUlJYWFFOUFVUWFhYW1tVUVJXW1dYV1tPUlRXV1hRXVhWXVVTT1hSV1dYWVpgXGdyX1tbWl1dX2NaX2NjZWdkZGRjWmRiZ2ZmbW5tdWZmZ2NgZl5eZ2BkbGhmZ2tocHpoZ2drdWpoZ2lsUElLS0xNS0pUUk5SUVBMVlZUUFRVWFVaVlJbXVZVVFdVWVhPT0xOV1RQTlVTTlBOTFFQS0pSUUtRTUpKT1FUUlBRU1JJSU1PUFFSUVFRVFVRWFdcV1NSUVFVVVZUWlFOUlJXVVNZVlRZVVNRVVNVVVlZWF5aX2FdXFtaXV1gY1xdYmNkZmRlZWJZYGFjYWJoaGpuY2FkXl9jXVpjXGJtYV5mZmdtc2RpaGtrZWRjZmhRSktLTk9MTVRRT1RRUU1YV1VUVlhXV1pWVFxgVldWWVVYVFFQS09YU1BOVVBOUU5MU1BNTlVTTlFOTU5RU1BUUFJUVE5MTk9SVFRSUlFWVlNYWltZU1VSVFhXV1lbU09TVFdVVFlVVllVUVFXVVZYXFpcYF1XWV9dXl1cXWBhXltiYmNnZmVlYlhgYGJdYGhlZ2VhXl9dXV5aWl9aX2dgXl5dY2hrYWhmaGZkYGJkYlBLTUxQUUxPVFBQVFFPUVpZWFdZWlpYWFZdamRWWFlaV1ZUVE9LT1ZUUE9UUFBRTk1RUU9RWFRRUU9NT1NVTldRVFRVT05OUVRVVVRUUlRXVVpdXFpWVlFSV1hWW1xWUFNVVVVWWFNXV1RSUVhWVltfW19gX1ZfXV5gXFxgYF9fWmJjZGhnZWViWWJgYl5eZmRjYGJdXFxcXFlaW1hbYVteXV1fYl9fYmRkYmRfX2BcUE1OTlJRTVJTUFNUUU9VXFpaV1tbXFlaW2RxbWhkX1tZVlZYUk1OV1NNTVJPUVJPTVBTUVVaVVRQUExQV1VRVlJUU1hNT1BSVVhVVVVTVVhXW15dXFtWUk9VVlZbW1ZRU1ZVVlhUU1daU1NRWVdXXV9bYF9gVmJcYGFdYGJfXGBdY2FjZ2llZmBaY2BhX19lZV9gY1taXFtcWlpZWVdcWlxbYF5gW15eYWBfY1xZYFpRTk9OVlFQVVNQVVRTUFdcXFxZXlxfV1xeanB3eYBjXFtWVllSTlBXU05RUVBSVFJMUVRTWVtXVU9STlNYVlNSVFJSWk9RU1NWW1VWVlRXWlhdXlxcXlZTTlRWVltbVVFUVFZXWFJTWFtTUlJcWFpdXl1hYWBXYltjYl5hY19cYmFiX2RnaWVnXVxlYGFgYWNkX2JfWVpfW1xbWVhZV1daWlphXF1bXVxcWl1gV1tbWlBPT09ZUFVVU1JXUlRQW11eXVxgXGBWXF1oanJ9c2xoXFVZV1FPUltTUlFUUlRVVEtSVlVaWlpTT1NRVVVVU05VUVJaUlRVVFhdV1hYU1hcWF5dWVpdVFVOVlZXXlpYUVRVWFhYU1ZYW1NSVl1ZXV1hXmNjX1lgW2ViX2RkXl5jY2FeZWZpZWZeXmRhYWFiY2RfYl5YW19bXFtYWFhYV1taW2BdW1tcW1haW15WXlldUE9PUlpQWlVWV1ZUVFReXmBfXmJcYFVdXmJreXVtfWxaVVpWUVFUXFRUVFVUVllXTFJaVlxaXFJQVVNXVVVTT1dRU1dTV1VWW15YW1lVWl5YX15ZXFlSV1JZWFhfWVlSVFVaWVlVV1lbVVRaXV1eYWJgZWRdXl1dZWFiZmReX2RjYFxnZWhmZGJgZWFfYWFiYl9gXldZXlpcXFpZWVdWXVpdXltaW1xbV1lcXVZYV11TT1BXWVBdVVZZV1dVWF9gYWFgY11gVV1eYmVldoJ7aFhZWlRWVFZcV1dXVlZXXVhPVVxZXl1dVFNYU1dVU1JTV1FTVlRYWFheXlhdW1VeX1hfX1hcVlFZVVlaWmFYW1RWV1paWlhZWVpXVl1fYF9kY2JlZV5iXGBmYmRmZF9gZGJhW2ZjaGZkZmFmX19hYmFhYF9eVlVdWVtcW1lcWVldW1tbWFhZW1laWl1fXVRZXVVOVFpWVFxVV1dZV1ZcYGFhY2FjX19WW2BkYV96dW9oWlxaVlhWWFtaWVtZWFlgVk9UXVtgYVxVVVlQVFZUUlZVUVNVV1tbXV9fWl9cVl9fWl1eWV5WU1lYWVlcYVldVVZaW1pbWlpZWlhZX19gYGRjZGVlY2RaYmZjZ2ZlXmFiYGNdYmNpZWRoX2deYmJjYWFgXl9YVFpaWltbWFxYWFxbWltXV1pYV1xbXGBdVl1dU09WWlZWWlZZVlhXWF5gYmFkYWRhXllZYWRiYGtmaF5cXVtXV1laXFxcX1tZW2JWU1deXWFjXFNWWVBWVVVVVlVTVlRYXV1fYGBdYV1XYF5bXlxbXlhWWFhbWl9fWl5XWFxcXV1dW1pcV1pfYV5gZWRkZmZnY1ljZmVoZ2ReY2BfZWNdZmlkZWlfZ15jYmNhYWBfX1tYWVtZWllYWlhXW1taW1dYWlRaXVxbYFxVXmJNUldZVldaWVtcWVdZXmBiYWVhZGFdXllhY2JfYWBhX1xdXVhXW1tdXV9fXFpdY1hZWF1gY2RfUlhZUFdWV1hXVlZXVl1dXmFiYV9iXllhXV1eWV1eWVhVV1tbYF5cX1lZXl1eXmBcWlpZW19iX2JlZGVmZ2hjWmVmZ2lnY19jXmBmZVppaWNmaWNmX2JiY2FgYF9dXVpYW1lZWFhaWVdaW1pZV1lWVVtdXV1gYGJieEtXV1xZV11cXF1aV1xdX2BiZGJjYV1gWGJjYmBjYWNeXF1cWFdbXV9dYF9dW2BkXFxYWmJlY2FSXFlPWFZZW1lZV1paYF5hYmNgYWNfXGJdX11bX15ZWVRYXV1fX15fW1peXmBiYlxcV1tdYGJiY2VkZ2ZmZ2VdZWdoaWZjYWJcY2dgXGlpY2hpZmVgYmFjYV9gX11dXFlcWVhXWFlZV1xbWldXWFBYWl1hY2Zmcmt/SllXXVtaX11cXlxZXVteX2JjYmFhXWJbYmRiYGNiYl1cW1pXWGlxYFxgX11cYWNfXllZY2VkYlRfWlFZV1xdXFtZW1tjYGNjY2BiZGFgY15gXF5fX1pYVltfXVxhYV9dW2BhYmViXlxTXF9gY2RkZmVnZ2ZmZmBmZ2hoZ2RkYFtmZ15haGhjaWhmY2BiYGNiX19fXV1bWltZWFhYVlpWXFpaVlZVTFhYXGdpa2h1eIF2dnZ2dnZ2dnZ2dnd3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d4eHh4eXl5enp6enp6e3p6ent7e3t7e3t7e3t7e3t7e3x7e3t7e3t7e3t7fHx8fHx8fHx8fHx8fHt7e3t8fHx8fHx8fHx8e3t7fHx8fHx7e3t7e3t7fYmIhoqHhYKBgoOCg4OCgoKCgoKCgoKCgoGAgYCBgICAgYCBgYGAfnx8fHx8fHx8fHx8fHx8fHZ2dnZ2dnZ2dnZ3dnd3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3h4eHh5eXl6enp6enp6ent7e3t7e3t7e3t7e3t7e3t7e3t7e3t6e3t7e3t7fHx8fHx8fHx8fHx7e3t7e3t7e3t7e3x7e3t7e3t7fHx8fHt7e3t7e3t8iYmHiYaFgoGCgoGCgoKCgYKCgoKCgoKBgYGAgICAgICAgIGBgYB9fHx8e3x8fHx8fHx8fHx8dnV1dXV1dXV2dnZ3dnd3d3d3d3d3d3d3d3d3d3d3d3d3d3d4eHh4eHh5eXl5eXl5eXl5eXt7e3t7e3t7e3t7e3t7e3x8fHx8fHt7e3t7e3t8fHx8fHx8fHx8fHx7e3t7e3t7fHx8e3t7e3t7e3t7fHx8fHx7fHt7e3uHiYiJhYSDgYKCgoODgoKCgoKCgoKCgYGBgICAgICAgICAgYKBgH58fHx8fHx8fHx8fHx8fHx2dXR1dXV1dHV2d3d3d3d3d3d3d3d3d3h4eHh4eHh4eHh4eHh4eHh4eHl5eXl5eXl5eXl5e3t7e3t7e3t8e3t7e3t8fX19fXx8fHt7e3t7fHx8fHx8fHx8fHx8fHx8fHx8e3x8fHx8e3t7e3t7e3x8fHx8fHt7e3t7e4aJiYiFhYOBgoKCg4OCgoKCgoKCgoKBgYGAgICAgICAgIGBgYCAfnx8fHx8fHx8fHx9fX18fHjF1NLS0tLUk3t9fX19fYSMi4uLi454KSkqKiopKz0/Pj4+Pj5tgH5+f397pdfT09PT1r2GiYmJiYqHc3FycnJydD4oKysrKiVikoyMjY2OiX5/f39/f359fHx8fHx8fHx8fHx8fHx8fHx7fHx8fHx8fHx8fHt7e3t7hIuHh4aHgoGDg4GCgoKCgoKCgoKCgoGBgYCAgICAgICAgYCBgIB+fHx8fHx8fHx9fXx8fH19eNXn5OTk5OeZe39/f39+hpCPj4+Pk3kZGhoaGhocMTMzMzMzMmqCf4CAgHut6eTk5OToyomMjIyMjIlyb29vb29yMhcbGxsbFF2Wj4+QkJCLf39/f39/f319fXx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx7e3uCjYeIh4eDgoSCgYKCgoKCgoOCgoKCgYGBgICAgICAgICAgICAgH58fHx8fHx8fXx8fH19fX12fn9/f39/gHl3d3d3d3d4eXl5eXl7eG5vb3BwcHBycnJycnJyd3p5eXp6en6Dg4ODg4SBfHx8fHx8fHp6enp6enp1c3Nzc3NyeX19fX5+fX18fX19fX19fX19fX18fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx7e4CMhomHh4SDhIKCgoKCgYKCg4KCgoGBgYGBgYCAf4CAgICAgICAfnx8fHx8fHx8fX19fX19fXZ0dHR0dHd1dnd6e3h7eHd2dnh5e3p5fXl5eXh4eHh5eXl5enp5eXl5enp6eXh4eXl5eXl7e3t7e3t7e3t7e3t7e3x9fX19fX18e3t7e3t8fHx8fHx9fX19fX19fX18fH19fX18fHx8fHx8fHx8fHx8fHx8fHx8fHx8f4uHi4qIhIODgoKCg4KBgoKDgoKCgYGBgYGAgIGAf4CAgH+AgYF+fX18fHx8fHx9fX19fX19d3d3dnZ3fXh3d316eH14d3d3fHx9ent9e3h3d3d3eHh4eHh5eXl5eXp6ent7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7fHx8fHx8fHx8fHx8fHx9fX19fX19fX19fX19fX19fX19fHx8fHx8fHx7e3x8fHx8fHx8fHx+iomMjImFg4SEgoKDgoGCgoKCgoKBgYGBgYCAgICAgICAf4CAgH19fXx8fH19fX19fX19fX13d3d3d3p9eHt4fHx3e3h3d3l+fHx9fH18eHh4eHh4eHh4eHh5eXl6enp6e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3x8fHx8fHx8fHx8fHx8fHx8fX19fXx9fX19fX19fX19fX19fHx8fHx8fHt7fHx8fHx8fHx8fH2Kio2NioWDg4OCgoKCgYGCgoKBgoGBgYKBgIGBgICAgIB/gIGAfXx9fX18fX19fX19fX19fXd3d3d3fX55d3d4e3p8eXd3e358eHt9fHx4eHh4eHh4eHh4eXl5enp6ent7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3x8fHt8fHx8fHx8fHx8fHx8fH19fX18fH18fH18fHx8fX19fX18fHx8fHx8fHx8fHx8fHx8fHx8foqJjo2JhISEg4KDgoKBgYKBgoKCgYGBgoGAgYKAgICAgH+BgIB8fH19fX18fX19fX19fn5+d3d3d3d5fHl7eHx9eXt5enp4e3x8fHt9e3h4eHh4eHh4eXl5eXp6enp7e3t7e3t7e3t7e3t7e3t7e3t7e3x8fHt7fHx7fHx8fHx8fHx8fXx8fX19fX19fXx8fHx8fHx8fXx9fX19fXx8fHx8fHx8fHx8fHx8fHx8fHx/iIeNioeFhoaDg4ODgoGBgoGCgoGBgYGCgX+AgoF/gICAf4CAgHx8fX19fX19fX19fX5+fn53d3d3d3Z4eHl3eXp4enh5eXd4enp6eHt4eHh5eXh4eHh5eXl5enp7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t8fHx8fHx8fHx9fX19fX19fX19fX19fX18fH18fH19fX19fH19fX19fHx8fHx8fHx8fHx8fX+HiIyIhoeHhIKDhISCgYKBgYKCgoGBgoKBgIGBgYGAgIB/gIGAfHx9fX19fX19fX1+fn5+fnd3d3d3d3d3d3d3eHh4eHh4eHh4eHl5eHl5eXl5eXl5eXl6enp6ent7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7fHx8fHx8fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fHx8fHx8fX19fHx8gIeIi4eHiYaDg4SDg4KBgYGCgoGBgYKCgYGBgIGBgYCAgICBgX97fH19fX19fX19fn5+fn5+d3d3d3d3d3d4eHd4dnl5eHh4eHh5eXl5eXl5eXl5eXl5enp6enp6e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7fHx7fHx8fHx8fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fHx8fH19fXx9fXyBhoqKiYmIhIOFhISCgoGBgYGCgYGCgoGBgYCAgYGAgIGAgIGBf3x8fX19fX1+fn5+fn5+f394eHd4eHh4eHZxZGpeam15eXl4eHl5eXl5eXl5enp6enp6enp6enp7e3t8e3x8fHt7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3x8fHx9fHx8fH19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fIGFiYqJioeEhYWEg4KCgYGBgoKBgYKBgYGBgYCBgYCAgYCBgIF+fH1+fn5+fn5+fn5+fn9/f3h4eHh4eHh5bWRiZV9fXm95eXl5eXl5eXl5eXp6enp6enp6enp6e3t7e3t7fHx8fHx8fHt7e3t7e3t7e3t7e3t7e3t7e3t7e3t7fHx8fHx9fHx8fH19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18goWKiomJhISGhYSDg4KBgYKCgoGBgoGBgYKBgIGBgICAgICBgH58fX5+fn5+fn5+fn9/f39/eHh4eHh4eW5kZWdlZGJeZnh5eXl5enp6enp6enp6enp6enp6e3t7e3t7e3x8fHx8fHt8fHt7e3t7e3t7e3t7e3t7e3t7e3t7fHx8fHx8fHx8fHx9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXyChouJiIqEhYaEg4OEgoGBgYGCgYKCgYGBgYCBgYGBgIB/gIGBf3x8fn5+fn5+fn9/f39/f394eHh4eHl3Z2VkZWZkZWFfaXl6enp6enp6enp6enp6ent7e3t7e3t7e3t7e3t8fHx7e3t7e3t7e3t7e3t7e3t7e3t7e3t7fHt8fHx8fHx8fHx9fX19fX19fX19fX19fXx9fX19fX19fX19fX19fX19fX19fX19fX19fIKGi4eJh4SEhoSDg4WBgYGBgYKCgYGBgYKBgICAgYGAgYCAgYF+fHx/f35/f39/f39/f39/gHl5eXl5eWtlYWJlZWFlZV5ieHdze3p6enp6enp6enp6e3t7e3t7e3t7e3t7fHt7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t8fHx8fHx8fH18fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19g4aLhoiFhYaEgoOEhIKBgYGBgoKBgYKBgYGAgYGBgYGAgIGBgn98fH9/f39/f39/f3+AgICAeXl5eXl0Y2NlZGNmY2doZGZsZF5ze3p6enp6enp6enp6ent7e3t7e3t8fHx7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3x8fHx8fHx8fH19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX1+fn6DhouGhoaGhYODg4SDgYGBgYGCgoGBgoKBgYCAgYGBgYCAgYGBfnx8f39/f39/gICAgICAgIB5eXl6d2RhY2diYmRdW2VfYV1eYGFoeHp6enp6enp6enp6e3t7e3t7fHx8e3x7e3t7e3t7e3t7e3t7e3t7e3t7e3t8fHx8fHx8fHx8fH19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX1+fn5+fn5+foSFi4eGhoaGhIODg4KBgYGBgoKCgYKBgoGAgIGBgYGAgYGBgYF+fX1/gH+AgICAgICAgICAgHl5eW9vYmJiZF5jZ19dYWFgXF9kYlttfHp6enp6enp6enp7e3t7fHx8e3t7e3t7e3t7e3t7e3t7e3t7fHx7e3x7fHx8fHx8fHx8fH19fH19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX5+fn5+fn5+fn5/hIiLhoSHhoaEhIODgoGBgYGCgYGBgYKCgYCAgYGBgYGBgYGBgX5+fYCAgICAgICAgICAgICBeXpwXWJlZGJkXmZnZ2BZYmJhY2VfXF1ze3t6enp7e3t7e3t8fHx8fHx8fHt7e3t7e3t7e3t7e3t7fHx8fHx8e3x8fHx8fHx8fHx8fHx9fX19fX19fX19fX19fX19fX19fX19fX19fX19fn19fn5+fn5+fn5+fn5+foCFjIqEhYaGhYODg4SCgYGBgYKBgYGBgoKCgYCBgYGCgICAgIGBf35+gICAgICAgICAgIGBgYF5emxiZGdjYmdmYWBgZGFiZWRjZGNeXGJ1fHt7e3t7e3t7e3x8fHx7e3x8fHx7e3t7e3t7e3t7e3x8fHx8fHx8fHx8fHx8fHx8fHx8fH19fX19fX19fX19fX19fX19fX19fX19fX1+fn5+fn5+fn5+fn5+fn5+fn9/gYeMiYWGhoeFg4SDgoGBgYGBgYKBgoKCg4KBgIGBgYKBgYGCgoF/f36AgICAgICAgIGBgYGBgXp7dGdnZmZkZGZmYF5fYWNlaGRlXmJkYHR8e3t7e3t7fHx8fHx8fHx8fHt7fHt8fHt7e3t7fHx8fHx8fHx8fHx8fHx8fHx8fHx8fH19fX19fX19fX19fX19fX19fX19fX19fX19fX5+fn5+fn5+fn5+fn9/f39/f3+CiYqIhoaIhoWDhIOCgYGBgYGBgoGBgoKCgoGAgYGBgoKBgYKCgX9/f4GBgYGAgYGBgYGBgYGBenptaGNjZ2ZnZWdmZmdiZWRlYmdbYmVgdnx8e3x8fHx8fHx8fHx8e3t8fHx8e3x8fHt7fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx9fXx9fX19fX19fX19fX19fX19fX19fX19fn5+fn5+fn5+fn5+f39/f39/f39/f4SJioiGiYeFhYSEg4KBgYGBgYGCgYKCgYGBgYGBgYKBgoGBgICBgH9/gYGBgYGBgYGBgYGBgYF7emlpZGNqZmFgZmVjY2NnaWRjYmBiZGJ0fXx8fHx8fHt8fHx8fHx8e3x8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fH19fX19fX19fX19fn5+fn5+fn5+fn5+fn5+fn5/f39+fn9/f39/f39/f3+AhIqMiIeJhoSFhYOCgYGBgYGBgYKBgoGBgYGBgYGBgoKBgYGBgYGAgH+BgYGBgYGBgYGBgYGBgXZzZWRnY2RmZWJlZmdkZmhmZWNgYGNkYHF9fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fXx9fX18fHx9fX19fX19fX19fX19fn5+fn5+fn5+fn5+fn5/fn5+f35+f39/f39/f3+AgICFioyJiIqJhoaDgoKCgYGBgYGBgoGBgoGBgYGBgIGBgYGBgYGCgX+Af35/foCCgoKCgoKCgoKCc3NnZWRkZWlqaGZnZ2NhZmZlZmdmZWVjdX18fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fX19fX19fX19fX19fX1+fn5+fn5+fn5+fn5+fn5+fn5+f39/f39/f39/f39/gICAgICAgIWLioqJioeHhoSCgoGBgYGBgYKCgYKBgYGBgIGBgoKBgYGBgYGAf4B+dHRzdX1/goCAfn5/gYB0cmdkZWNmaWppZWNlY2BmZGRnZ2JiZWFwfXx8fHx8fHx8fHx8fHx8fHx9fX18fHx8fHx8fHx8fHx8fHx9fX19fX19fX19fX19fX19fX19fX1+fn5+fn5+fn5+fn5+fn9/f39/f39/f39/f39/f39/f4CAgICAgIB/houLioqLh4eHhIOCgYGBgYGBgYKBgoKBgYGBgYKCgYCBgYGBgoCAgH5zc3NzdHV4dXV0dHV2dXVwZmNmZWhoaWdoZ2VmZWJfZGVmY2BiZ3d8fHx8fX19fX18fHx8fH19fX19fX19fXx9fXx8fX19fX19fX19fX19fX19fX19fX19fX19fn5+fn5+fn5+fn5+fn5+fn5+f39/f39/f39/f39/gIB/f3+AgICAgICAgICHjIyIi4qHh4eEhYKBgYGBgYGBgoGCgoGBgICBgoGBgYKBgoKCgYCAfnNzc3Nzc3NzdHR0dHNzdW9jY2FnZWhoZ2pmZGVnZmhmY2JlYl5ieX18e3t8fX19fX18fHx9fX19fX19e3x9fX19fX19fX19fX19fX19fX19fX5+fn5+fn5+fn5+fn5+fn9/fn5+fn5+fn5/f39/f4CAgH9/gICBgICAgICAgYCAf4CAgYGAgIeLi4iNiYiJhYSFgYGBgYGBgYKCgYKCgYGBgIGCgoGBgYKBgoKBgIB+dHNzc3Nzc3Nzc3Nzc3N1cmdlZWRlamhoZ2ZpaGdjZWViZGNoZGd7eHVzc3R2dnl4dnR0dHZ3d3d2dHR0dXV4d3h4d3d6e3x9fXx9fn5+fn5+fn5+fn5+fn5+fn5+fn5/f39/f39/f35/f39/gH9+fHt7fX58eXl2dnZ5fHx6end2d3l7fXt4hIyMioyHh4iEhYSBgYGBgYGBgoGBgoGBgYGAgYKCgYGBgoGBgoGAgH51c3Nzc3Nzc3Nzc3Nzc3VzaGVnaGVrbGhqZ2lqZ2dnZmRkYmVkbnV0dHNzdHNzc3Nzc3Nzc3Nzc3NzdHNzc3Nzc3Nzc3N0dHV1c3V3eHl7fn59fn98f39/f39/f39/f314fH5+fXx4dXZ3eXd4dnRzc3N0dXRzc3Nzc3NzdHNzc3R0c3R0dHODjI2KiYeIhoOGg4GBgYGBgYGBgYGCgYGAgYGDgoKBgYCBgYGBgICAf3VzdHRzc3Nzc3Nyc3NzdnZpY2hqaGpsZWZpbGhgZmVkY2BkZGZ0dXV1dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHRzdHRzc3Nzc3R2dnV1d3V4fH9+fX9+fHp4dXN0dXV1dHNzc3Nzc3N0dHR0dHR0dHR1dXR0dHV1dHR1dXR1dXV1dIaMjYuIhoeEhIWCgYGBgYGBgYGCgoGAgYCBgYKCgoGBgIGBgYGAgIB/dnNzc3Nzc3Nzc3Nzc3N2dnNnZ2pmaGdmaGhmZGlnY2NnZWVmcHZ1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dHR1dHR0dHR0dHRzdHR0dnV1d3Z0c3R0dHR0dHR0dXV1dXV0dXV1dXV1dXV0dHNzc3N0dHNzdHR0dHR1dXR1iY6MjIqHh4SEhYKBgYGBgYGBgYKCgoGBgICAgoKCgoGBgYGBgYCAgH93c3Nzc3NycnJyc3NzcnZ2dW5kXWNnZWlraGVoZ2dqamlnZXB2dXV1dXV0dHRzdHR0dHR0dHV1dXV1dXV0dHV1dHR1dXV1dXV1dXV1dXR0dHV1dXV1dXV0dHV0dHV1dXV1dXV1dXV1dXV1dXV1dXV0dHNzc3Nzc3N0dHNzc3Nzc3R0dHR0dHWKjoyMiYaGhIeFgoGBgYGBgYGBgoKBgYGAgYGCgYKBgYGBgYKBgICAf3hzc3Nzc3JycnJyc3NzdnZ3d2liaGhnamtpaGZkZGVmaWhwdXR0dHRzc3JxcnJ0dXV0dHR0dHR0c3NycXFxcXNzdHR0dHR0dHR0dHV0cnJyc3R0dHR0dXV1dXV1dXR0dXR0dHR0dHR0dHR0dHR0c3Nzc3Nzc3Nzc3Nzc3N0dHN0dHR0dHR0dYuOjImGhYWFh4SCgYGBgYGBgYGBgoKCgYGAgIKCgoGBgYGBgYGBgIB/eXNzc3NycXJycnJzc3N3d3d3bGpoZGhpa3Z6a2VmZWhnbXJzdHN0c3JwcHBxcnN0dXR0c3NycnNycXBvb29vcHFzc3NycnJyc3R0dHNxcHFyc3R0dHR0dHRzc3Rzc3NzdHR0dHRzdHR0dHR0dHRzdHR0c3NycnFxcnJzc3Nyc3NzdHR0dHN2jZCMh4eFhYSEgoGCgoGBgYGBgYGCgoKBgYGAgYGCgoGBgoKBgYGAf395c3NycnFxcnJycnNzc3d3d3dzc2pnaWloeX99cW51bG5wcXJycnFxcG9wcXFxc3Rzc3NycXFwcG5ubm1ubW5ubnBxcnJycnJycnJzcXBvb3BxcnJzc3JxcnJycnJycnJycnJzc3Jzc3Nzc3Nzc3Nzc3Jxb29ubm9vcXJzc3Jyc3NycnNzcnaPj4uHhoWFhYOCgoKBgYGBgYGBgYGBgoGBgYGCgoKBgoGCgYGCgX9/f3hxcHBwcXFycnJyc3Nzd3d2dnd2cnF0c252f352c3hwcHBycnJycXFwcHFxcXFyc3Nzc3FwcXBvb25ubm5ub25vcHBxcXFxcXBwcXJwb25vcHFxcXFxcHBxcXFxcXJycnJycnJycnFxcnFxcnJycnFwb29ubm1ubW5vcXJycnJycnJyc3JxeI+OjYaDg4aEgoOCgoGCgYGBgYKBgYGCgYGBgYKCgoKCgoKBgYKBf4B/d29wb3BxcnJyc3Nzc3J2dnZ2dnZ3dnZ1c3l/fnd3d29wcXFxcXFxcHBwcXJxcnJzc3JycXBwb29wb29vb29vb29wb3Bvb29vcHBxb29vcHBwcHBvcG9wcHFycXFxcnJycnFxcXFxcXFxcHBwcHBxb29ubm5tbW5tbm9wcXFxcXFxcXFxcXB7j42NhoODhYOCgoKCgYKBgYGBgoGCgYGCgoGCg4KBg4KBgYGAgYF/f392bm9wcHBxcXFxcXBwcHZ2dnZ2dXR0c3NxfYB9fX9zb3BxcXFwcHBwcXFwcHBxcnJxcXFwb3Bvb3Bwb29wcG9vb29vb29vb3BxcXBub3Bwb29wb29wcnJycnFxcXBxcnFwcXFxcHBwcHBwcHBwb29ubm1ubm5ubm9ub3BwcHFxcXFxcXFxcIKRjoqEhIOFhIOCgoGBgoKBgYKBgYGBgYGCgoKCgoKCgYGBgYCBgX9/gHVvb29wcXFxcXBwcHBwdnZ2dXRzcnJycnGAgoCBeXBwcHBvcHBwcHFxcXFwcXFxcXFxcG9vcHBwcHBwb3BxcHBvb29wb29vcXFwcG9wcG9vb25vcHFxcHBwb3Bvb3BwcHBwcHBwcHBvb29vb29vbm5tbW1ubm5ub25vb3BvcHBwcHBwcHBwiZCMiISDhIaDg4KCgYGCgoKCgYGBgYCAgYGBgoKBgYGBgYGBgIGBgH+AdG5vb3BxcXFwcG9vcG92dnVzcnFxcXFxcICDg39ycHBwcHBwcHBwcHFxcHBxcXFxcXBwcHBwcHBwcHFwcHBwcHBwcHBvcHBxcXBwcHFxb29vbm9wcHBvb29vcHBvb3BwcHBwcHBwcHBvb29vbm5ubm5ubW5ubm1ubm9wcG9vb29vb3BzcXWPj4yJg4KFh4ODgoKBgoGCgoKBgYKBgYGBgYGBgYGBgYCAgYGAgYGAf4B0b29vbm9vb29vb29vb3Z1dHNxcXFxcXJygIKCgXRxcXFxcXFxcXFxcXFxcXFxcXBxcXFxcHFwcXBxcXFwcHBwcHFxcXBxcHBwcXBwcHBwcHBwcHBwcHBwcHFxcXBxcHBwcHFwcHFxcHFxcXFxcXJxcnFwcnRycnR0dHR1dnRzdHR0dXd3gpCPi4iDgoaHhISCg4GBgYKCgoGBgoGBgYKBgYGBgYGAgICBgYCBgYB/gHVvb29vb29vb25vb29vdXRzcnJycnJycnKDg4OCdnFycnFxcXJxcnJxcXJycnFxcXFxcnFxcXJycXFycXFxcXFxcXFxcXFwcXFxcXFxcnNzcnJyc3V1dHR0dHR0dHV2d3d3d3d3eHh4eHd3eHh4d3Z3dnV2dnZ2d3h6e3x7e3t6enp6enyGkI2LiIODiIeHhYODgoGCgYKBgYGBgYKCgoGBgYGAgYCAgYGAgIGBgH+Ad3FxcXFxcG5ucG9wcG92dHV1c3Nzc3NzdYiDgoN5cnNzcnJyc3Jyc3NycnJycnN0cnJzcnNzc3Nzc3Nyc3N0dHV1dXV1dHV3eHd3d3d4eHh3eHh4eXl5eXl4eHl5eXp6e3t7e3t6enp5eXh3d3d1dnV2dnd5enp7fn5+fX1+fn5/f35+gIyQi4qHg4WIi4iEg4SDgYGCgYGBgoGBgoKCgoKAgYGBgYCBgYGAgIGAf4B8enp5eXx5eHh2dXZ2dHl2d3h3d3Z3dnZ6f3x+fnx2dnd3dnV4enh4eHh3d3d2eHx5eXx6eXl8e3l5eXh4eXl6enl5eXh4enp5eXh4eHh3dnd3eHh3eHh5eXp7e3p8fH1+fX9/f359e3t7e3p5enl5e3t/foB/fn5/fn19fX5+f35+fn6AjpCNioeEhoqLiIaGhIOBgoKBgYGCgYGCgoKCgoCBgoKBgYGCgYCBgIF/f4B/fn19fX9/f318e3t7eXh4eHh5eXl4eXh5eXl4enp6enp6e3t7fH1+fHt7ent8e318e3t7e3t7enl4eXh4ent6enp5eXp8fHt6enx8fHp6ent9fHx+fn+AgoGAgYKAgH9/gYGBgIB/f35+fn5/fX1+f4CAf35+f39+fn9/f39/gH+Af4OQjoyHhoWIi4yIh4aFg4GCgYGBgYKBgoKCgoKBgYKDgoGBgYGBgIGBgIB/goOCgoGBgX99f39/f4F6enh4d3h4eHh5eHh5enp5e358enx9fXt8fX19fHx8fnx9fn5+fn59fX9/f3x8fYGDgYCAf318fXx9fXt9fXx8fH19fX1+gYGChISDgoB/gYGBgH9/f4B/f39/f39+fn9/f39/f35+f3+Af39/gICAf4CAgICAhJCPi4eGhoiLi4mKhoaDgoKCgYGBgoGCgYKBgYGBgoOCgYCAgYGAgIGBgH+ChIKCgICAgH9+fn+AgH9/fn18fX19fYB/fX+Af35/gH9/fn9/gIGBgICAf3+BgICAf4CBgn9/f4CAf35+f39+f39/fn5+f39/gYB/f4CBgYCAgYOEgoGCgoGCgH+AgYCBgYGAgH+BgICAf39/gICAgYGBgIGBgYCAgICBgoGBgYCAgYGFjo6MiYaHiYyLi4qGhoOCgoKBgYGCgoOCgoKBgIGBgYKCgICBgYCAgYGAf4KFg4KBgYCAf39+fn+AfX5+fn19fX5/fn9/f35+fn+AgYCAgICAfn9/fn+Af3+AgH9/f35/f39+fn59fn9+fn9/f35/gIGBgoKDg4KCg4KBgYKDg4OCgYGBgYKBgoKCgYKBgoGBgYGBgoKCgYGCgYKCgoGBgoKBgYKCgoKCgYGBgoKCgoaPkY+KiImKjY6NiYaFgoKCgoKBgYKCg4KCgoGBgYGBgYF/gIGBgYCBgIF/gYWEg4KCgoGCgYCAgIB8fHx7fH18fH9+fn9+fn5+f35+f39/f39/f35+foB+fn5+fn9/f39+f39+fn5/gIB/gIB/f39/f3+BgYGCgoCAgYKDg4SDg4ODgoKCgoKCgoKCgoKCgoGCgoKDg4OCg4ODgoKCgYKCgoODg4ODgoKCgoODg4KCh5KTkIuKiouPj42Lh4SCgoKCgYGBgoKDgoKBgYGBgIGBgICAgYGBgIGAgYCAg4SDg4OEg4ODgoKCgXx9fHx9gn1+f4GCiIGCgoSCgYGDg4GBgYKCgYKBgYCAf39/gICAf3+AgX9/f39/gYCAgICAgH9/f3+AgICAgH9/gYODhYSEg4SDgoKCg4OCgoOCgoODg4ODg4SDg4KEhYWDg4SEgoKDhIOCg4ODg4OCgoODgoCKlJOPioqMjpCPjYuGg4KCgoKBgYGBgoOCgYGBgIGBgoGBgICBgYGAgYCAgH+BgoODg4SEhIOCgoKCfXx8fn6AgYOAg4OChIaFhoaFhIWFg4ODg4OBgYKEhIKDgoeDgoKAgoGBgoKCg4KCg4KDgoODgoGAgIKCgYOCgYKCg4OEhYWEg4OChISEhIOEhISDg4OEg4ODg4OEg4SDhIWEhISDg4ODgoKCgoKCgoKBgYKCgo+UlI+Njo6RkY6KiISCgoKCgYGBgYGCg4GBgIGBgYGBgYCBgIGBgYCBgICAgIKChIKChIOCg4ODgoJ9fX2AgH+AgoGDg4ODhIaEhIOEhYWDg4GBgoOBgIKDgYKFhYWFhoaHhoWGhoeHh4aGhoeHhoaEgoGCg4SDg4ODg4ODhISFhYWDhYSFhISEg4KBg4OCg4SEg4KCg4SCg4ODg4OCgoKCgoKCg4OEhIOFhYWFhoaIk5OTkI+Pj5KRjIqIgoKCgoKBgYGBgYKDgoKBgIGBgYGBgICAgYGBgICAgICAhISEgoKCgoGBgoKBgX+AgYOCgICAf4CCgoGDg4KCgoODg4SEg4KDhYOCgYGBgoSFh4eHh4aGh4eHiIiHh4eIiIiFhIOBgIGBgoKCg4GCg4SEhYSDg4OEg4OEhIOBgYGCg4OEhISDg4ODg4OEhIODgoSDg4ODhIWFhoeHh4eIiIiJiY6TkpKOj46Qko+LiYeCgoKCgoKBgYGBgoKCgoGBgIGBgYGAgICAgYGAgIGAgICDg4KCgYKCgYGAf4CBhYWFhoOCgYB+fn+BgoSCgYKDhIOCg4ODg4KChISDg4OBg4SFhISFhYSDg4SFhYKEhIWFg4KBgH9/gIB/gIGEg4OEhYWEgoKCgoOCg4OFhIKDhISEhYaGhoaGhoWFhoeHhYaIh4aHiIeGhoaIiYeGhYaGhoeIkZKSkI6QjpCRjImHhYGBgoKCgoGBgYGBgoOBgYGBgYGBgICAgICBgYCAgICAgISEg4KBgoGAgYGAgYKIh4aHhYSCgH99fX6AgH+AgYGBgYGBgoGAgYKCgoGCgoKBgYGCgYKCg4GBgICAf4GAgH+AgH9+gIGBgYKCg4OEg4OEg4OCgoGBgoODg4SEg4SEhIOFhYaFh4eIh4eHh4eHh4eGhoaGh4WFhYaGhIWEhIWEhYaSk5GOjo+OkI6JiYeEgoKCgoKCgoGBgIGCgoKCgoKCgYGBgYGAgYGBgICAgYGAgoSDg4KDgoGCgYKDg4iHh4iHhYSCgX5+gICAfn5/f4CBgYGCgYCCgoGCgH+AgIB+gIKBgIGCg4OAf39/gICAf4CAgICDg4KDg4ODgoOBgYKCgoOCgYKCgoOCgoSDhISDg4SEhYWFhYaGhoaFhISEhYWEhIWFhYSEhISDhISEhISEipSTkpCQj46NiIaFhIOBgYKCgoKCgYGAgYKCgoKBgoKBgYCBgYCBgYGAgICAgYGAg4OCgoOCgoKBgoOCiImJiYiHhYSDgYKEhIOBgYGCgoSCgoOEgoOEhYaEgoSCgX+AgoGBgoGChIOBgYGBgoOCgoGDg4SDg4SEg4OCg4KDg4ODg4KCgoKCgoGDhISEhYSFhYWFhIWEhIWFhYWDg4OEhISEhYWFhISEhISEg4ODg4OOlZKQkZGOjYyHhYODg4GCgoKCgoKBgYCBgoOCgYCCgYGBgICAgIGBgYCAgICBgICDhYSEhIODg4SDhIOGh4mIhoWDhIODg4WDgYGDgoOFhYODg4SDhIODhISFhISEgoGAgYKDgoOEg4OCgoGBhIWEg4ODgoKDhISDg4ODg4SFhISDg4KCgoKCgoSEhYSFhYWFhYODhYWFhYaFhoWEhIWEhYWGhYWFhIWEhISDhIODhJGUk5OSj4yMioWEhIODgYKCg4KCgoKBgYGCg4KBgYKBgYGBgICBgIGBgH+AgIGAgYaGhoaGhoaHh4aGhYSDhYaCgIGBgYGHgoB/f4GAgIKBgX+BgYCAgoGCgoKBgYKCgYCCgoKCgoKDg4GCgYKDhYODg4KDg4OEgoKEhIOEhIWEg4OCgoKCgYKCg4ODg4SFhYWFhIOEhYWGhYWEhISEhIOEhIWFhYWFhIODhIOEg4KGlJOSlJKPjYuHhISDg4KBgoODgoKDg4GBgoKBgoKCgYGCgYGBgYCAgYGAgICAgICAhYWFhYaGh4aGhoWGg4ODg4GAgoKCgYKAf39/f4CAf4B/gIGAgH+BgYGBg4GAgYGChIOBgYGBgYKBgYKDgoODgoOCgoKCg4OBg4SDg4ODg4OEhIKCgoKDgoKDg4ODhIWEhISEg4OEhIODg4OEhIODg4ODg4SDg4ODg4KDg4KDgouUk5KTkY2NioaDg4OEgoGCg4ODg4ODgoGBgoGCgoKCgoKBgYGBgICBgYCAf4CAgICDhISFhYSFhYWEhIWCg4KDgoKDg4OBgICAgICBgYCAg4KCg4KBgoKDg4OEgoODg4KAgICCgoKCgoKDg4ODgoODhIKCgoODgoKDg4KCg4KDg4WEg4ODg4SDg4SEhISEhYWEhIWEg4SEg4OEhISEhISEg4SEhYSDg4SEhIODgoKDkJSSkpKPi4yIhoOEg4OBgYKDg4ODg4OCgYGCgoKCgoKDgoCBgoGAgICAgIB/gICAgISDhYWEhYWFhYSFhYOEhIWDg4SFhIKCgoODgoSCgYKGhYSFhIOEhISGhYSEhYJ/fX19foKEg4ODg4ODg4ODhISEg4OEhISEg4SEhIOEg4OFhoWFhYSFhYWFhYSGhoWGhoWFhYWFhYWFhYWGhoWGhoaFhoaGh4aFhYWFg4SEhIeTk5KRkoyLiIWGhYWCgoGBgoODg4OCg4KBgYKDg4ODgoKBgIGAgICAgICAgH+AgICAhYWFhYWGh4eGhYWFhISFhYSEhISEg4SDg4OEhYOCg4SFhYaFhoaFhoeHhoOBfn9+fn5+f4OEg4OEhISEhISEhISEhISFhYWEhYSGhYWGhYaGhoWGhYWHhYWGhYaGhoaFhIWFhYWFhIWGhoaHhoaGhoaHh4iIiIaFhYaEhYWGjZSTkpGQi4qHhoeGhIGCgoKDg4ODg4KDgoGBgoODg4KAgYGBgICAgICAgICAf4CAgICHh4eGhoeHiIeHhoaEg4ODhIODg4OEg4ODg4OEhIODg4WFhYWHh4WFh4WBf39/f39/f36AgISFhIWGhoaFhYWFhoaHhoaFhoWFhoeHh4iHh4eGhoaHh4eGhoaGh4aGhYSDhIWFhoSFhYaGh4eHhoaGhoeHh4eIiIeGhoaHh4eRk5KQkZCLiIiFhoSDgoKBgoODg4ODgoKDgoKCgoOCgYCBgICBgICAgIGAgIB/gICAf4aHiIeHh4eIiYmIiIODgoKDgoSEhIWEg4KCg4OEg4OCg4WEhYeHhYSCgH9/f39/gIB/f4B/f4WFhoeIiIeHh4eIh4iHiImIhoaHiIiJiYmIh4aHh4eIiIaHhoeHhoaFhIOEhYaGhYWFhoaGh4eFhoeGh4aGh4eHh4eHh4eFh5OTkY+RkIuHhoWGhIKCgYGCg4ODg4ODgoKCgoGCg4KCgIGBgYCAgICAgICAf3+AgYB/hoiIiIiHh4iJiYmIg4KCg4ODhIWHh4eFg4OFhIODg4KDhYSEhYSBgIGCgYGBgYB/gH9/fnt6gIaIiIqKiYmIiImJiYmKi4qIiIiJiouLioqIiIeIiIiHh4iIh4iGh4aEg4OFh4eHhoWFhISEhYWEhYWGhISEhYWFhoWGhYOJlJOQjpGOioaFhoWDgYGBgYKDg4ODgoKCgoKCgoKCgYGBgYGBgYCAgICAgIB/gICBgH+GiYiIiYeIiImJiIiEgoKDg4KDhImKh4eEhIWEg4OEhIWFg4OCgYKCgoKCgH9+fH19fX9+fHt8g4eJi4uKioqIiIqJiImLiomJiImIioqJi4mHhoaGh4WGiIiJiIeGh4SDgoSIiIiIh4WCgoGDg4KDg4SCgoKDgoGEg4SDgY6TkpCPj4uIhYSGhIKBgYGBgoODg4OCgoKCgoKCgoGBgYGBgIGAgICAgICAgH+AgIGAf4WIh4eHhoeIiIiHh4SCg4ODgoOFiYqJh4WHhYSFhYSEhoaDgoKCgoKDgX59fn5+fn5+fX1+fX19g4eJioqHh4WGh4eHh4iHiImHiIaIh4eJiISDhIOFhISFhYeIiIaFg4KCg4WHhoeGhoOCgoOEgoOEhIKBgoGBgYODhIOEkZKRjo+Oi4eEhoaDgoGAgYGDg4ODg4KCgoKCgoKCgYGBgIGBgYCAgIB/gIGAf39/gIB/hYaGhYaGhoeHiIeGgoKEhIOChYaIi4qGhYaEgoaGgoCDg4ODg4OCgoF9fH1/gH9+fn59fH19fHp8hIaHhoSDgYKDhIWFhYODhYSEhISFhIWEgoKDgoSEgYKDg4WGhYSCgYGCgoODhYOEhIWEhIaDhISFg4KDgYKDg4SFhIeSkY+NkI2JhoSFhIWCgYCBgYODg4ODgoKCgoKCgoKBgYGBgYGAgICAf4CAgYB/gICAgICDhIWEhYWFh4eHh4aAgYGFg4OEhYSHiIWDgYCAgX9+fYKDg4ODgoKAfX1/gICBf31+fn19fX16enp+g4SEgoGBgIGBgoKBf36BgYGCgYOAgoGCgoKBg4OAf4CAgoKCgICAgIGBgYGCgYGChIODhYSCgoSDgoKBgoSDhYWGjJORjo+Pi4iFhYOChIGBgYGBgoODg4KCgoKCgoKCgoGBgYCBgYCBgH9/gIGBgICAgH+AgIKCg4OChIOEhYWGhn+BfoCBgICAf4GDgn9+fn9+fHx/g4OCg4KDgX19fn+AgIGAfn19fX1+fXx6enp/goKAf39/f35/f4B+fYB/f4CAgX+AgIGAf3+Bgn59fX+AgX9/fn+AgH+AgICBf4CCgICCgoGCgYGAgYGBgYKEg4aPkpCOj42Kh4eGg4OCgYGBgYGCg4ODgoKCgoKCgoOCgYGCgYGBgICAgH+AgICAgICAf39/gYKDhIGCgoODg4SFgIF/fH19fn19foCAfn1+fnx9foKDg4KCgYF/fX1+foCAgH9+fX19fHt7e3p6eXqAgH9+f35+fnx+f35/gH9+f3+Af4CAf35+fn9/fn18fn+Af35+f3+Af39/f4B/f4B+f4CBf4B+f39/gH9/f4B/hZKSj46Pi4uHiYWEg4KCgYGBgYKDg4ODg4OCgoKDg4KAgYKBgYGAgICAf3+AgIB/gIF/f36BgYSEgYKBg4OCg4OBgH98fn5/fn6AgIB/f4B+fX+BhIOCgYB/f359fn5/gICAfn19fX17e3x6enl5eXt/f35/f39+fX5/f4CAf35/f4CAgoB/fH5+f35+fXx/f4B/fn5/f4B/f35/foCAf36Af39+fn5/f35+f318fH2Fk5KNjIuKiImIhISEgoKCgYGBgoOCgoODgoODg4ODgYCBgYGBgYCAf39/f4CAgICAgIB/foCBhIOCgoGDhIWDhICBgICBgIGAgYKCg4GBgX6AgoODgYGBgYCAfX19fn5+f359fX19fXx8fHt6eXl5eX2Af4CBgYF/f4GAf4F/gICAgYGCgoB+gH5/fn5/foGAgoF/f39/gIB/f39/gYB+f4CAfn9/fn+Af31+fX17fIaTkYyLioeHioiGhoSDgoGBgYGCg4ODg4OCg4OCgoKBgICBgYGAgH9/f39/gICAgICAgH9+fn+BgYGAgISGh4aHgoSDhYOBg4ODhYSEhISDgYODg4KCgoGCgX5+fX19fn6AfX19fX19fX18e3p6eXl5eYCCgoKEg4CCg4GAgoCBgYGDgoKDgYGCgIGAf4CBg4GEgoCAgYCBgYCAgYCCgn+BgIF/gIB/gICAfn9/fnx8ipOQiomIiIiJiIaGhYSCgoGBgoKDg4ODg4KDgoKCgYCAgIGBgYGAf39/f4CAgICAgIGBf359fn5/f39+g4aHh4iChYSFg4SFhIWGhoaGhoWFhoGAg4ODgoKAfX19fX19fn59fX19fX19fX18e3l5eXl4fIKDhIWCgYSDgoKDhYaCg4SDgYKCg4OCgoKCgYKFg4iFgoGBgYKCgYGBgYSDgoOCgoKCgIGBgIF/gIGAf36Ok4yHiIeIh4aGhYaGhIKDgoGCgoODg4ODg4OCgYGBgH+AgYCBgYB/gH9/gICAgH+AgYB/fn19fX5+f36Ag4SHiISGhoaFhoaHh4aHh4eHhoeHf32AgIGCgX59fX19fX19fX19fX18fH5+fnx7eXh3eHl5gIKDf4ONhIOEhISXl4ODhIF9foGCgoGCgYKBhIaIjIWDgoKBhIKEg4KDhYWEhYOCg4OCg4OCgoKCg4OCgpKQi4iJh4mHhoaEhoWEhISCgYKCg4ODg4ODgoGBgYCAgICBgIGBgH9/fn+AgYCAf4CAgH9/fn1/fn+Bf4CCgYWFhYaGh4eGh4eIhoeHh4aHh4d/fH18fX9+fX19fX19fX19fX19fXx7iJKCe3x6fIZ5eHl8gYF+iZeEg4OEhJSTgIGBf39/fn6Ei4B/gICEhpCJhYSCgoGFhYuDgYKFhYaGhIOFhYOEhIODhIOFhISIko6LiYiIiYeHh4WGhYSFhIKCgoKDg4ODg4OCgYGBgICAgIGAgICAf39/f4CAgICAgYGBf39/f4CAgIGBgYGBg4OGh4aGh4aGiIeGhoaFhISGhX98fHx8fX18fH19fX19fX19fX18fH+RlZaDe3qElHx4eXp7fH+Cg4GBgIOCgH58fn57iJF8fI6Wf31/f4KGioWDg4SDgYONiX99f4OEhYWDhYaFhIWFg4SFhYaEhI6Rj4yKioyJiYmHhYaFg4OCgYKCgoKDhIODgoGBgICBgICAgYGAgIB/f3+AgIB/gICAgX5+f4GBgoKCg4ODgoOCgoWGhISFhYSGhIOEg4KCgYOBf319fHx9fXx8fH18fH18fX19fHx8e4uRl4x6e3yBenp6e3x5eX19foB/gH98e3t+fn2ClZF/hIh+fH5/goR8fIGChIKAf4eDfYKBgIKCgIODhISEhISChIOEhYKEkZGOi4yMjoqJiYWFhYODgoKBgoODgoKDg4KCgYGAgIGAgICAgICAgH+Af3+Af357gICBenyAgoKDhYOEhYWFhYODg4SCgYODgoOCgoGBgIB/gX9/fn59fHx8fHx8fHx8fHx8fHx9fHx8fn6Kgnt6e3p4ent7fH17fn1+f319fX18fICBgX2Gj4F+fYJ+f36Agnx8f3+BgIKAfn17ioJ9gH9+gYCAgYKBgoCBgIGAf4uTj4yLjY6NiIeIhoWEhIOCgoKCg4OCgoODgYGBgICAgICAgH9+fXx7fHx9f39/gHx6gYF4e4CCgYOFhIOFhIaGhISAhpSIgIGBgYGBgH9/f39/fn5+gHx8fHx8fHx8fHx8fHx9fHx8fHx8fHl7e3t4eHl7enp8gX+Afn+BfH5+f399gIKCgICAgX+CkYF/f4CAfoB+fn9+gIGBfX19e319fXx9fHx9gH+AgH6Afn6ClJGLjI2Nj4qFhoaFhISFg4OCgoODg4OCgoGBgYGAgICBgICAf4CAf39/fXt6fYCAgHh+gXd7gIF/gYKCgoKEhoeGhn6IlYp+gYGAgIB/foB+f39/fn+Bfnx7e3x8fHx8fHx8fH59fHt9fHx8e3x8fHp6eXt8en2Fg4J/gYF+f35/gH6FgoF+gH9+foCFhoKAfn6Dhn9+fX6AgIGAf39+fX19fX57fH1/f3+AfX9+gIyRjYuNjo2Nh4SGhoWEhISDg4OCg4ODg4KBgYGBgYCAgYGAgYGBgYGAgH9/f397en9/e3mAd3p/f31+f3+Af4KDhoaFf3+FgX5/gIB/gH5+f35/gIB/gIB/f318fHx9fn18fX19fX19fH58fXx7fXx8ent6fH19f4aEgoCAgX1+fX5/fouEgYZ+fXx8f36CgX99fX19gXx7fXx+gYSDgYB+fn5+fX1/f399foB+fn6EkoyMi46Ni4qGhIaEhISDg4OCg4KDgoOCgYGBgYGBgYGBgYB/fXx8fH1+f39/f397e399d352eH59fH18fX5+gYGCg4B6fX18fn+AgH6Af35/fn+AgH+AgH9/fn9+fn5+fn1+f399fH59fn19fHt8fHx6fHp9fn+AhIOCf35/fH18fXx8gYN+jH58e3t9fn1+fn17e3t9e3p7e3uAhoSChIOCf4B+f4KCgn9/goJ/gIqPjIqKjIuKiISEhIOEg4ODgoKCgoKCgoKBgYGAgoGBgYKCf3+AgIB/fn18fH5/fn55fX52e3Z4fXx8fHt9fX6BgICAf31/f31+f39/foB/f39/f3+AgIGBgH99gH9/fn9+fn9/f3yCfn59fX17e319fHp8fH6AgoGAgIB8fH18fHx8fH18fXt/fnt7e3x8fH18e3t7e318enp9en6Cf4GDhIKBgoGFhoWFhoaHhYKEkY6MiomKh4iFgoOEhISEg4KCgYGCgoKBgoGBgYGBgoGBgoKAgYKBgYCAgH9+e3x+fnx6fnh5dnd8fHx7e318f4GAf35/foB/f35/fn5/gH9/f39/f3+AgYKAfn6BgIB/f39/f39+fYN8fH19fH99fX19e3x+fn9+fn5+fnx8fHx8fHx+fnt8e3x8fHx9fH18fnx9fHx7e3x5e3x7e317fX5+f4CAg4eJiYmKiYqJhYiRjYuIiIaFhYOCgoOEhIODgoKBgYGBgYKBgYGBgYKCgoGCgoCAgX98e3p6eXt9enx+fnl8eXh4dHx8fHt8fHx+gX9/f39/gIB/fn5+fX+AgH9/f3+Af4CDgoB/gIGAgIB/f4CBgH58enx9fX59fX5+jIZ9fX57e4OCfX19fX18fXx9fX1+fH18fXx9fX58fn19fX18e3t7fHt8fHt6e3t6enp7fn6DhYiHiIqLi4qJjJCNjImIhoWEg4KCgoODg4OBgYGBgYGBgYGBgYGCgoOCgYKBgIGBf3+Af356eHl5en5+e3l6eH5zfHx8e3x8fH5+fn5/gH+AgIB/fn9+gIF/f4B/gIGAgoSEgYCAgYGAgX+AgYKBf39+f31+gH57foGRjHx9f4qAjYx+fn19fX59fX59fHx8fX18fXx9fX1+fX1+fnx7e3t8fH18e3p7fHl6eXh5e35/hIOEh4mKiImNj4yKiIiFhISDgYKCgoKDgoGCgoKBgYGCgYKCgoGCgoKBgoKAgYGAfoCAf39+e3p5e319eHx6f3KBfXt7fHx8fn59fYGBf4GBgX9/gH+AgX9/gIGCgYGFg4SCgYGCgYKCgICBg4KAf4F/fX6Afnx+f4iCf36DkISEg4F/fn18jYd9fX59fHx/fnx9fXx9fX1+fX5/fX19e3x9fnx8e3x9enp5eXp5e3t+foCBg4eEiI2MiYmGhYSEg4KCgoOCgoKBgYGCgoKBgoKCgoKCgoKCgoGCgn+AgIB+f39/fn5/ent5fX16enp9cX6Cent8fX19fXp4f4KAgYKCgICBgIGBgICBgoKCgoaFhIKBgYGBg4F/gIKEgX9+gYB9foF+fX5/gIB9fn+EgH5+f31+fX2KhX1+f31+foB/fX19fH5+fn99f4B9fn18fX9/fHx7fH17e3t6enp7e3x9fn2Ag4CJjImKh4WFhYSDg4KCgoKCgYGBgoKBgoKCgoKCgoGBgoKBgYKCf4CAgH9/f39+fn59eXp6fXx5d3t0e4d8dHd9fn17e3Z2foCBg4KBgYKCgoKBgYGDg4OChYaEgoCAgICCgX+AgYSBfn6AgH5+gH59fn6AgH+Bfn+Af39/gH99fn9/f3+Afn9/gH58fX18fn5+foF/gH2CgHx9gIF9fHx9fXx8e3x8e3t7fHt8fHx9fImJh4eFhoWFhISDgYKBg4KAgIGCg4KCgoOCgoKCgoGCgoGBg4J/gIGAf39/fn5+fn57enp8fHt2e3R3f352cnt+fnt4dnd8gIGCgoKBgoODg4OCgoSDhIOFhoOCgX9/gIOAgICAg4F+foCAfX+AfX1+foCAf4J/gYGAgICBf31/f3+AgIGAgIB/fnx9fX19fn59g32AfoKAfX6AgX98fn59fX17fH58fXx8fHt8e3x+iYWGhIWHhYSFhIKBgoGDgYCAgoKDgoKCg4ODg4KBgYGBgYGCgH6AgYB/fn5+fn5+fn56e3p9goN9dXF6fHpxen19eXh0dICAgoKCg4KDhYOEg4KDhISEhIWEgYGAgH6Agn9+f36Bf35/f4B9foB9fX1+gH9/gYCCgYCAgIKBfn6Af4GAf4CAgH9+fX19fn1+fn19gYR/gH9+f4GBf32Af319f31+fn1+fHt8enx7eoCFgoSEhYSEhIWDgoKBgYKBgICCgoOCgoOEg4SDg4KBgYKBgYOAfoCBf35+fn5+fX5+fnt7en6Jh354cnl9f3F6eHt4eXR1fYKDgoODg4OFhIWEg4OEhIODhIKBgH+Af4CBfn19foB+fn5/gH19f3x9fX6Af4CAgIKAgIGAg4GAf4B+gIF+gIGAgH9+fn5+fn5/fn6FhYGBgH+Ag4F/foGAf36Af4B/fn17ent6fHt6goOAgoKCgoOCg4KBgYCAgoGAgIKBg4GBg4SDhIKEgoGBgoGCgn9+gIF/fn1+fn5+fX59fXp7fIWEe3tzeXt8cHd1dnd5dnR6hISBhISDhIWFhoSDg4WEgoODgoCBfn9/f4B9fX1+gH1+f39/fn1+fH19foF/gIB/gIB/gIGDg4GAf36AgH+AgYCBgH9/f39/f4CAgIGCgoKBf4GEgX+Ag4F/f4B/gX+Af3x7fHp8e3yBgH+Bf3+BgIKCgYF/f3+BgH6BgoKDgYGDg4KEgoSCgYGBgIGCgH6AgH9/fX5+fX19fn1+e3t6gH94fHZ5enxxdHh3dnh1cnmFhYKEhIKEhYWGhISChIOBg4KAgIF+f4B/gHx9fX6AfX5/f39+fX98fn5+gX+Bf39+f4B/gIODg4B/f4GBgIKBgYGAgIGAgICAgIGAgYKDgYF/gISAfYGDhICAgX+BgYKBfXp7e3x8fX99f4B8f39+fYGAgH59fYB/foGBgYKBgIKCgoKBg4KCgYB/gYKAfn9/fn99fX1+fX19fX19ent7fHZ9eXh6enJ1eXl2d3dzdYaFg4WFgoSEhYSEhIKDgoGDgX+AgX5/gH6AfX19fn9+f4B+fn99f3x/f3+BgIF/f3x+gH6AgYKDgYCAgoOEgoGAgYB/goCAgYGAgYGCg4KBgX9/g4B+goKEgICCgYKChIJ+e3t8fHx9fX1+fXp+fX55fn9/fHx8fn1+gYCBgYGAgoGBgYGDgoGBf4CAgoB9fn19f319fX59fH19fX16e3p8dnx6d3t4cnZ5e3Z2dnN0hoSEhYSChISFg4OCgYOBgYOBgIGBfX+BfoF9fX1/f39/gH5+f359fYB/gIGBgX9+fH5/fn5/gYJ/gYGCg4eFgX9/fn6Af4CBgICAgIKCgYCAfoCCf3+BgoKBgYOCg4OFgn99fX18e3x8eXp7en55fHl4f357e3t+fX1/f4F/gH6BgICAgoOCgYF/gIGBf31+fH1+fX19fX18fn58fXx5e3x4enx3endzeHd6c3Z2c3SGhISFg4KDhISDgoKCg4GCgoGAgYF8gIB+gH1+fX5/gICAf35/f3x+gH+BgIGAf359f39+fn+BgH2AgIGDhIN/f359fn5+f4B/gIB/gYKBgH9+gIF+f4CCgoCBhIKEhIaEgH59fHx8fHp5dnl5enl2eXZ+fHt7e359e399gH99fX9/f3+BgoGBgX5/gYF+fX18fX19fX19fXx+jYF8fXl7e3p5fHd4eHR1dXhyd3d0doaEhYWDg4ODg4OCgYKDgoGDgn+BgH9/fn+AfX19fX+AgIB/f4B/fIB/f4GAgYCAf3yAf35+fn9/fX5+gYKCgn5/fn1+fn5+f3+Af32AgYB+fn5/gX5+gIKBf4GDgoOEh4SAgH58fXx8e3x1eXl4eHh5d3t8e3t7foV9fn1/ent+fn59foGAgIGAfX6BgH59fXx9fX19fX18e32DgXx8ent7e3p7d3Z4dXJzdnF3eXJ4hYWFhYOEhIKCg4KBgYKBgIOBgIB/fn5+foB+fX58foCAgH+AgX97gH6AgH+BgIB/fYB/fn5/f319fX6AgYGBfn9+fn59fX5/fn9+fH6Af35+fn+Cfn6AgIF/gYOCg4OGhICBfnx9fHx7fHh3e3h1eXd3eXx6e3t9kod9fH13en1+fn19f35+gH98foB/fn19fH19fX19fXt8ent9enp4e3x6ent4dHh1cXJ0cHh4cXmEhYWFg4SDgoODgoGBgoKAgYGAgIB9fn5/gH18fn1/gIGAf3+CgHyAf4B+f4GAf399gH9+f39/fX18gICAgIB/f35+fn18fn9+f358fYB/fn1+gIJ/foCAf36BhIKCg4WFgoJ+fX17e3x8eXd7eXd4d3d4e3t6e3yFin17end6fH19fHx9fX1/fn19fn59fXx8fX5+fX18fHt6enx7e3p5enp7enhzd3VxcXNweHdxe4WHhYWDhYKBg4OBgYGBgoCBgICBgH5/fn9/fXx+fYCAgoGAf4GBfX6Af35/gX+Af3+BgH+Af35+fH1/gICAgH9/f35/fXx+f39/f319f39+fn6CgYF/gIB/foGDgoKEg4SCgn5+fHx6fHt7eXt6d3N2d3h5e3p7eXp/fnt7d3p8fXx8fH59fH19fH19fXx8fX19fX99fXx9e3l7fHx8enp6enp6eHN2dXBwcm93dnJ7hYeEhYOEgoGDgoKCgYGCgYKBgYGAf4B/f399fX9+f4CBgYF/goF9foF+fn+Bf4B/gIKAgIB+fX58f3+BgICAf4B/f4B+fX5+f4B/f39/gH9/f4J/gH9/gIB/gYGAgISBgoKAf39+f3x9fn56fYV+dHx9enp6enx5eXp6hoV3eXx8fHx8fXx8fHx8fX19fHx9fX19fn19fX16eX18fH16enp6enp5c3V1b29xcHd0c3yFhoOEgoOCgYKBgoKCgYKBgYGCgYCAgICAgH59gH+Af4GCgn+Cgn+AgX5/gYF/gICAgn+Bf319f35/f4KAgICAgIB/gIB+fn1/gH9/gIB/f39/gH+AgICAgH+AgIGBgYGCgYCAf39/fn1/fnuBk416fH18e315e3p6eHmBgXh5e3x8fXx8fHx8fHx9fX18fH18fn1+fn59fHp8fHt8fXt5enp6eXlzdXVvb3Fwd3N0fYWGg4OCg4KAgYCCgoKAgYGCgYKBgYCAgIGAfn6Af4GAgYKCgIKCgICCfoCBgX9/gX+BgIF/fH6Af3+Agn+AgICAf3+AgH9/fX6Afn2AgIB/f3+AgICAgYCAf4CAgYCBgYKCgICAf39/fX5/fIGGiXx8fnt7fnl6e3p7jX53d3l7fHt9fHx8fHt9fH19fX18fXx+fn5/f358enx9e319e3l5e3p5eXN0dW5zcXB4cnV6hYaDg4KDgoCAgIGCgX+CgYKBgoGBgYKAgYF/fn9/gYGCgYKBhIOAgYJ/gYGBf4CAgIB/gX99f4F/gICBgICAf4B+gICAf359f4B+fn+Af39/gH9/gICBf4CBgH+BgIGCgoKAgICAgIB9foB9gIOCe35+e3t9e3p8fHuHeXh4eXx8fH17fHx9fX18fH19fn19fX5+f3+Af317fH18fHx7enl7e3l5c3J1bnZycHhxdnaFhYOEg4KCgICAgoF/gIKCgoKDgYGDgoCCgYB/gICCgoKBg4KEhICBgX6BgoB/gICAgH+Cf36AgYCCgICAgIB/gH+AgIB/fn2Af39/f4CAgH+Af3+AgYF/gICAgIGAgYGBgoGAgYCAgH9/gH5/fX59fn57fXx9e3x8d3h1eHh5e3x8fXx8fHx8fX5/f39/fn19fn9/gIGAf3x9fHx9e3p7eXp8eHpzcnVud3FxenF2d4WFg4ODg4KBgYKDgH+CgYWDg4SBgYOAgoKBgYCAgYKDgoCCgoSDf4GAfoKDgICBgICAf4CAf4GBgIJ/f4CCgH9+gICAgICAf4CAgH+AgICAgIB/f4CBgYCAgICAgYGAgoOCgoCCgYGCgYB/f4B/gId+fnx6fXx7fX54d3Z5eXp8fXx8fXt8fH19fn5/gIGAfn1+gICAgoGAfH59fX58d3t6ent5eXNxdW53cHV6cXZ5hYWCg4KDg4KDhISAgIKBhoODg4GChICEg4KCgICCgoSBgYKChIJ/gIB/gYOCgYCBgYCAgIGBgYGAg4F+gIOCf31/goGAgIB+gYCBf4CAgYGBgYCAgIKBgYKBgYCBgYGBgoOCgoOBg4OCgYCBgH+AhH19fXt/fXp9gHp5dnp4eXt7fH19e3x9fX19fn+AgYGAgH+AgICDg4B9f35+fn15eXt6enp5c3J1b3dxd3lzd3uFgoKDgoOEgoOEg4CAgoKGg4ODgoKEgYSDgYKAgIKBg4GCgoGCgX6BgICCgYKBgYKCgICAgYCBgoGEgH6Bg4F/f4CDgoCBfoCCg4KAgYGBgoKDgoGBg4KChIGAgYOBgYKEg4OEhIODhIODgoGBgYCCf4B/fYB8enx/e3t3fHl5eXt6fX59fHx8fH1+fn+BgYCAgIGBgYSEgH2Af39/f357e3t6e3p0cHhyeXR2eHR3e4SCg4KDg4SChIODgYKChIaEgoODgoSBhISAg4CBg4KCgoKCgIKAfoGAgIKBgoGCgoKBgIGBgYOCgoOAfoGDgX9/gYSEgYN/goKBg4GCgoGDg4OEgYKEgoOCgoGCgoOBg4SDhISEhISFg4SCgYOCgoOBgYGAgH58fIB8fHh8eXp5enx9f3x7fHx9fX18fICAgICAgYGBgYKBfoGAgICAf3p7e3p6enVweHd5dnV8dXZ8gICDgoODg4OEhISAgoKFhYWDg4KDhIGEhYKCgYKDg4GCgoKAgYB9gICBgYKDgoKCgoGAgYKCg4KCg4B/gYOBgICChIODgoGCgoGDgoKDg4SDg4SAgoSDg4OBgX+Bg4KDhYKEhISEhISDhISChIOEhIKBgoGBgHt+gX59eXx6enp9fHyBfnp8fH19fHp7fn5+gIB/gYGAgICAgIGBgIB/fX18fH18dnJ2eHh2dH92dX2Hh4OChIWDg4SFhICChIWEhIOCg4SEgISFg4KCgoODgoOCgoCCgH2AgIGCg4KCgoKEgoGCgoOEgoKBgICBgoGAgYOFhIOCg4CCgoOCg4ODhIOEg4CCg4KEg4KCfoOBgoSEgoODhISEhIOEhIOEg4WEg4ODgoKAe4CBf3x8fXp6e31/fX9/fHx6fH59fH19fn5/f39/gICAgH9+foCBgICAfnx9fX5/fn18e3h2f3Z3f4SHg4KDhYODhIaEgYKFhoWEhIODhISChIWFgoKDg4SCg4KDgoKBfoCAgoKDgoODg4SCgYKCg4OCg4GBgYGDgn+ChISDg4KEf4KEg4ODgoSDg4SCgIOEg4SDg4KCg4KChIOCg4SEhISEhIWEg4OEhYSFhIOCgoB9gYJ/fXx8e3x8gH19foB+fn1/fnx8fH19fn5/fn+BgYGBgH99fX6BgYB+fn19fX59fX5+f39/fH2AgYKCg4OGg4SDhoSBgoiHhYSDg4SEhYGFhYWDg4SDhIODgoOCg4F+gYGDg4SCg4OEhIOCg4KEg4ODgoODgYOCf4KEg4ODgoOAgoWDg4ODhIODhIOBgoSEhYOCgoODgoGEg4GDg4SDhISEhYSEhIWFhYWEg4OEf32BhH99fXx8fHx/gX5+fn9/fX99e3x9fX19fX5+f4CBgIGBgH59fH6Cf39+fn5+fX1/f39/gICAf4CEhIODhIWDhIOFf36CiouFhISDgoSFgYaGhoOEhISEhIODg4OEgn+BgYODhYSFhIWEg4KEhISFhIODgoSDhYKBhISFhYaEgoCDh4SDg4OFhIWFhIGEg4OHgoOCg4GCgYSDgoODhYODhYWEhYWHh4aHhYWFhYSBf4KEf35+fH59fX+BgH9+fHx+f358enx9fX19fX5+fn9/gIGBf319fIB/gH5+fn5+f3+AgYGBgYKAgYWFhIOFhIKEg4aAgoWFiomEhIOEhYWDh4aGhISEhIWEhISEg4SDgYKDg4OEhIaEhYSDg4SEg3yDhHuBhHd5g4F9hH5+cnWDgoF2foOFgX2BdYF6g39/gH6EhIKDg4KBg4SDg4SFg4SFhoSFhn2EeXx+f4R7hYOBhIOAf35+fn19gYOBfXt/fX6Afn18fHx9fX19fH19f4B/gYJ/fX18f4GBgICAgH+BgYGCgYKDg4KChoSEhIaEgYOEhYOEhYSKiIWFhYOFhYSGhoaDhISFhYWEhYWEhIWCgoOEhYWFhoSFhIOEhYWCaICFanx7cXF8gXOGc3R0fYKDdXNxg4Z0cHVyc3SDdnt9dYF/goOBgnZ5hYCDgIR/hYSChYWCaHpyc3N8gHOBg3+Dg32BfX5+fX6Cg4F8f4F9f4B9fXx8fHx9fHx8fn1+gH+BgX99fX2AgYKBgYGBgIGBgYKBgoKCgoSHhIWEhYSBgoSGhoOFg4aIhoaFg4aGh4eGh4OFhYaFg4KFhoSFhYODg4SEhoaGhIaEg4SFhn1xe4FweXZ+g3+CbnlwdXN8dnl5hXKEg3B2eHF2dHR1cnN0dml/gG5yb3R2bnVsd217c26AiHltfXJzdnN2bW14bHB5bHV9f399foGAgX1/fn2Af4B/fX18fH19fH1+f32Af4CAfnx/foCBgoCBgICAgYCAgIKDgoOEhYiGhoCChYODhIeGg4WFhYaHh4SDhoeIiYaHhIWGiIeEg4WGhYWEhIOFhIKFhoaFhoWEhoWHdnB0e3BydX+HhYNtdW92b3x1coR5eYd4cXR3bndod3pucHWCcoN+b3p5eW1vbnpvb213fXiGcHF6cHJ0ZoF1fm57eXNveX+Af319gX9/fH99fIF+gIB+foCAgYB+fn9/foF/gH9+fYB9f4CBgIB+fn+BgH9+goOCgoSFh4eEfoeEg4OFh4aEhoWFhoaIhISGh4eIhoeEhoaLioWEhoeHhYSFhYWEgoWFhYWGhoWGhYZxdXByc29zenl+hHSIdHV+iHZugnKEhnluanJ/cW1zd3x/dXR8hH54cXV3bnl1enF2eHV6eYRxam95eHBreXN6b3p3dnZwgYB/fn5/f356fn19f31/f359gIGDg4CCg4GBhIKBgIGBgH1/f4F+f35+f4GAfn6BgoCAgoSHhoODhoSFhYaHhoWFhYWGhoiFhYaFh4eFhoSGhomIhYSJioiFhIaGhYWDhYWEhYaGhoaFg3iLeXKIentwcIWEeIV4eWtzfnl7a3KDh4N6fG17eXl0fYB2bm+AgG90fHV3cXl9fW1+dW+DhYZ6gHJye3x1cG96bHN8bneCgYF+fn99fXt9e3x9fX9/fX1/f4KCf4GDgYGDgYB/gICAfn9+f31/fn1/gH58fYGAfn6Ag4iFhoOFhYWFhoeFhYWFhoeHiIaEhoWGhoaFhIWFhIWFhomJh4aEhoWGhoWGhoSGhoeGhoWGh4eHhoaEhoWGh4iHhYeGhoOHhoWFg4SGhoWGhIaEg4SEhoSDgYODhISFhIWEhYSGg4aHhYaEhIWHhoSEhYaEhX13hYOEhIOCgX1/fnt8e357fHx9f359fH59gYB9f4F/f4GAfn5+gH5+f35+fX99fX5/fHt8f358fH+BiYaFhIaGhoWGhoWFhYWHhoeIhoSGhYaGhYWDhIWGhYSGhoaGhYWGhIWGhoaGhIaGh4eGhYeIiIiIhoSHhYaGiIaFiIeIhYeGhoiFhYaHhYaGhYOChYWGhYWDhYSEhIWEhYWEhYWEhoeGhoWEhoeGhISFhoOFhIKEg4OFg4OCfYB/e3t8fnt8fH1/fnx8fn2Afn1+gH5+gH99fXyAfX5/fn5+f3x8fX57fHx/fHt7foCIh4SEiIaGhoeGhYWEhoaGhoiHhIWGh4aFhIODhIaFhIeFhYaFhYaEhYaGh4eFh4aJiIaGiIeIiYiFhIiFhoeGh4aIhoeFh4eGh4WFhoeFh4aFgoOFhoaEhIOEhIOEhoSFhYWGhoSGhoWGhYWGhoWFg4WFgoWHhYOCgoWDhIF+gIB8e31+e3x7fX59e3x+fX5+fH9+fX1+fn19fH98fn58fYGAfXx8fXx8fH56e3t9foiHgoWIh4eGhoaGhISGhoeGiIaEhYSGhoSFh4OEhYSFh4SFhoaFhoSGhoeHhoaIh4mIhoaIh4iKiIWHiIWHh4WHhoeGh4WIiIeHhYaGh4WGhoWBhISFhoWFhISEg4SFhYaGhoWGhIaFhoeFhYaGhYSDhIOChIeDhIGChISDgYCAgHt7fn18fHx9fXx8fH19fH18fn18fX18fHx9fXx+fXt8gX99fH18fnx8fHp6fHx9iIeChoiHhoeGhoaEhYaFhoWGhYOFhIaFhIiJg4GEg4SGhIaGhoaGhIeHiIiHh4eIioiGh4iHiImIhYiHhYeGhoeHh4WHhoiIh4eFh4eHhYaHhIKEg4SGhYeFhYSDhISFhoaGhoaGh4aGiIWGhoaFhIKDgoODh4GDgIKDg4KCgn+Ae31+fXt8fH59fH19fH17fHx8fHx8fXt7e318e358e3x/fX18fX1+fXx6ent7fHyIh4KGhoaGh4aGhYOFhoWFhYWEg4WChoSDiId/enqChYaEhoaFh4aEh4eJiIiHhoiKh4aHh4eIiYeFiIeGiIeGhoeHhYeGiIiHhoWHh4eGhoeDg4SEg4aGh4WFhISEhYaGhoaGhYeHh4eIhoaEhoWDgoKCgoOGgYN+goKDgIOCf398f35+fHx9f318fX18fXp7e3p7fHx8e3t7fnt7fXt7e358fHx8fX5/fXt6fHp8fYmHg4aFhoWGhoWEhIWFhYWFhIOBhYGGhIKEhHyAhn+ChYWGhYWGhYSHh4iIiIaFiIqHhYeGh4eIh4WIhYaHiIaGh4eGh4aIiIeFhoeGh4WFh4OEhoWEhoaHhoWFhIWFhoaGhoeFhoaHh4eHhYSGhYOBgYGAg4WCg36BgYF/g4F/fn5/fn58fH1/fXt9fXx9enp7eXt8fXt7e3t+fHx8fHp7fXx8fHx+fYF8e3t7e3x7iYeEhoSGhIaGhYSFhoWEhIOEgoCDgYWCgYJ/eoSMe4CEhYeGhoaFhIeIh4aHhYWHiYeEh4WGh4iGhYeEhoeJhoaIh4eHhoeIhoSGhoaHhoWHg4SFhIaGhoiFhYSDhYWHhYeGh4WGhoeGhoaEg4SFgoCBgICDg4OCfYGBgH6DgX5/f4F8f3x9fX59e359fH15enp5e319enp7e318fXx8ent9fHx9fH5+gHx7e3x+fXyIh4WGhYaEhoWFhYWFhYODgYOBgIGBhYKAgH9/fXx7gYSFhoaEhYSDh4eGhoaFhIaJhoKGhIaGhoWFh4aHiIiGhYiHiYeGhoeFhIaFhYeFhIeDhIWEiIaGh4WFhIKGhYaFh4aHhIaGhoWFhoODg4WBgIGAgISAg4B8gYB+foKAfYB/gXx/fH1+fX57fn18fHl6enl6fX15ent7fHt8e3t6e319fH18fn5+e3t7fX59fIiGhYaGhoSFhYSFhYSDgoKAgoGAgICDgX5+foB5en2Ag4OEh4WEg4OHhoOEhYSChYiFgoSDg4WFhYWHh4aIiIaFiIeJh4aFhoWDhoSFh4OEhoSEhYSHhoWGhYaEg4aFhoaGhoaEhYaGhYWGgoKDhH9+gICAgX+DgHuBf31+gn5+gH6Afn99fX59f3t/fXt6eXp6eXp8fXl6ent7enx6e3t7fH19fXx/fn18fH1/fnx7iIWFhoaGhoSFhIWDhYKBgICAgYB+f4KCfX1/f3t/f4KDg4WGhYSDgoaDgYOEgoCFh4WCg4GBhIWEhIaGh4iHhYWIhomHhYOEhIKFg4SGgoSFhIWGhIeGhYWFhoOEhYSFhoWGhIOEhYWDhYWBgYODf35/gH9/f4N/e4B9fX+CfYCBfX6Bfn19fX1/e398e3p5enp5enp8eXp6e3t7fXp7e3t7fX59fYB9fXx8fYB/fXyGg4aGhoaGg4SChYKFgYGAf3+AgH5/gIJ8fn9/foCAgYKChIWDgoGChIGAg4KBgISFhYKBf4CCg4OEhYaIhoWEhoeFh4WFgoOCgoOCgoWBg4WEhYaEhoaHhoaFgoSEg4SGhYWDhISDhIOFhICAgoJ/fX1/fn6Ag357f3x8gIF9gYB9fYN8fn59fX57fnt7enl7enl6ent5enp6e3t8ent8e3t+fn1/gXx9fHx9f4B+gIaEhYWEh4SDg4KGgoOAgYB+fn+AfX9/gnx9f39+fn+BgYKEg4KBgYKCf4CBgoCAgoWEgoB/gIGCgYOFhYeFhISGhoSFg4WBgoGBgoGCg4GChISEhYWGh4eGhYSDg4ODhIaFhIGDgoOChIODgH+AgX59fH5+fH+DfXx+fHyBgH6Cf31/gnx/fn19fXx8e3t6enp6eXt6enp6enp6e3x5e317fH5/f4GAfX59fX1/gICAhoSEhYSFgoOCgoSCgoCBgH59fn9+fn6AfX2Af35+foGBgoODgoSHgYF+gICBf3+ChIOBf35/gIJ/goWEhoSCg4WFgoSBg4CBgIGBgYKBgIGEg4OGhYWHh4WEhIWCgoKDhYSCgYGBgoCFg4F/foB/fnx8fn18foN9e358fYF/gIN9fYCBf35/fXx8fH17e3p6enl5e3l6enl6ent7e3p7fXx8f3+BgoB+gH+AgH+AgYDKysrKysrKysrKysrLy8vLy8vLy8vLy8zMzMzNzc3Nzc3Nzc3NzczMzMvLy8vLy8vLy8vLy8vLzMvLy8vLy8vLy8vLy8vMzMzMzM3Nzc7Oz8/Pz9DQ0NHR0dLS0tLS0tLT09PT0tLS0tLS0tPT09TU1NTU09PT09PT09PT09PT09PT09PT09PT09PT09PT09PS0tLS0tLS0tLS0tPT09PT1NTV1dXV1dXV1dXV1dXV1dXV1NTU1NTT09PT09PT09PT09TU09PU1NTU1NTU1NTU09PT09PS0tLS0tPT09TU1NTU1NPT09LS0tLS0tLR0dHR0dPHhnNlYFtLWWdVTUZIQD03Nzg5Nzw8PDo8Oz42Oj04PDs6OTg3ODs7Oj87PTs8PD47P0E/QkJBQ0RFREE+PTw7QENDQUBDQ0FBR0hHSUtSwtXS09PT09TU1NTU1NTU1NTU1NXV1dXV1dXV1dXVysrKysrKysrKysrKy8vLy8vLy8vLy8vMzMzMzMzNzc3Nzc3Nzc3MzMzMy8vLy8vLy8vLy8vLzMzMy8vLy8vLy8vLy8vLzMzMzc3Nzc3Oz8/P0NDQ0NHR0tLS0tLS09PT09PT09PT09PS09PT09TU1NTU1NTU09PT09PT09PT09PT09PT1NTU1NTU1NTT09PT09LS0tLS0tLT09PT09PU1NTU1dXV1dXV1dXV1dXV1dXV1dXV1NTU1NPT09PT09PT09PU1NPT09TU1NTU1NTU1NPT09PS0tLS0tPT09PU1NTU1NTU09PT09PS0tLS0tLR0dHSzIxyZ2BcTVllUktHSz87Mzc4Ozg5Pj05PDpBOjs9Nzs8PDo6Nzg6Oz0/Oz88PTw/Pj9BPUFBPkNDREJAQT46Oz9DREFDRERCQklHSEhJTr7V0tPT09TU1NTU1NTU1NTU1NXV1dXV1dXV1dXV1crKy8vKysrKysrKy8vLy8vLy8vLy8vLy8zMzMzMzM3Nzc3Nzc3NzMzMzMzMy8vLy8vMzMzMzMzMzMzLy8zMzMzLy8vLzMzMzc3Nzc3Ozs/P0NDQ0NDR0dLS0tLS09PT09PT09PU09PT09PT09TU1NXV1dTU1NTT09PU1NPT09PT09PT1NTU1NTU1NTU1NPT09PS0tLS0tLS0tPT09PT1NTV1dXV1dXV1dXV1dXV1tbV1dXV1dTU1NTT09PT09PT09PU1NTU09TU1NTU1NTU1NTT09PT0tLS0tLT09PU1NTU1NTU1NTU09PT09PT0tLS0tHR0s+Sd2hfXk9XZ01LRkw9ODc2NTk5OTw+OT88RDo7PDc5PD07OTc5Ojw9QDs+PT47PD48PT5BQD5EQ0NDP0E9Ojs9QkNFQ0NEQT9FSEpJSky61dPT09TU1NTU1NTU1NTV1dXV1dXV1dXV1dXV1dXLy8vLy8vLy8rKysvLy8vLy8vLy8zLy8vMzMzMzMzNzc3Nzc3Nzc3MzMzMzMzMzMzMzMzMzMzMzczMzMzMzMzMzMzMzMzMzc3Nzc3Ozs/Pz9DQ0NDQ0dHS0tPT09PT09PT09TU1NTT1NTU1NTU1NTV1dXU1NTU1NPU1NTU09PT09TU1NTU1dTU1NTV1dTU09PT09LS0tLS0tLS09PT09TU1dXV1dbW1dXV1dXV1tbW1tXV1dXV1NTU1NTT09PT09PT1NTU1NTU1NTU1NTU1NTU09PT09LS0tLT09PU1NTU1dXV1dTU1NTT09PT09PT0tLS0dHRmn5nYWJOVWpKSElLPzw6OTM3Njc3PTs+OT06Ojo4ODo7Ozg4Ojs7PD46PT09Ojw/PD0/QkA/Q0RDRD5APT08QENEQ0JEQkQ+REhJSUtMttfT09TU1NTU1NXV1dXV1dXV1dXV1dXV1dXV1dXVy8vLy8vLy8vLy8vLy8vLy8vLy8zMzMzMzMzMzMzNzc3Nzc3Nzc3Nzc3MzMzMzMzMzMzMzMzNzc3NzczMzMzMzMzMzMzMzc3Nzc3Ozs7Pz8/Q0NDQ0NHS0tLT09PT09PT1NTU1NTU1NTU1NTU1NTV1dXV1NTU1NPT1NTU1NTU1NTU1NTU1dXV1NXV1dXV1NTU09PT09PS0tLT09PT09PU1NXV1dbW1tXV1dbW1tbW1tbW1dXV1dXU1NTU1NTU1NTU1NTU1NTU1NTU1NXU1NTU1NTT09PT09PT09PU1NTU1dXV1dXV1dTU1NTU09PT09PS0tLR0p+DaV9kU1hsSEhIS0A9Nzg0NzY6Oj87RDw8OTw8OTg6OTo6Ojs8Ojo7OT49Pjk9QDs/QUFCP0JCQUM9Pz8+PEBCRUNDQkBBO0ZJR01MSbLY09TU1NTU1NXV1dXV1dXV1dXW1tbW1tbV1dXW1svLy8vLy8vLy8vLy8vLy8vLy8vMzMzMzMzMzM3Nzc3Nzc3Nzc3Ozc3NzczMzMzMzMzMzc3Nzc3Nzc3Nzc3Nzc3Nzc3Mzc3Nzs7Ozs7Pz8/P0NDQ0NHS0tLS09PT09PT09TU1NTU1NTU1NTU1NTV1NXV1dTU1NTU1NTU1NTU1NTV1dTU1dXV1dXV1dXV1dTU1NTU1NPT09PT09PT09PU1NXV1dbW1tbW1tbW1tbW1tbW1tbV1dXV1dTU1NTU1NTU1NTU1NTV1NTU1NXV1dXU1NTU1NTT09PT09PT1NTU1dXV1dXV1dXU1NTU1NTT09PT09LS0tSjiGxfZlJWakdIR0lBPjM2Njo7PDhDPEJBPjxBPDg5Ojw6Ojw8PDk8PTo7PD09PD89QD9AQT9AQUBCPD4+PzxCQ0NDRkBBQT1ISklOTUeu2NPU1NTV1dXV1dXV1dXV1dbW1tbW1tbW1tbW1tbMzMvLy8vLy8vLy8vLy8vLy8vMzMzNzc3Nzc3Nzc3Nzc3Nzc3Nzs7Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Ozs3Nzc3Nzc3Nzc3Nzs7Ozs7Oz8/P0NDQ0NHR0dLS0tPT09PT09TU1NTU1NTU1NTU1NTU1NTV1dXV1dTU1NTU1NTU1NTU1dXV1dTV1dXV1dXV1dXU1NTU1NTU09PT09TU1NTU1NXV1dbW1tbW1tbW1tbW1tbX19bW1tXV1dXV1dXV1dXV1dTU1NTU1dXV1dXV1dXU1NTU1NTU09PT09PT1NTU1NXV1dXV1dXV1dXV1NTU1NPT09PT0tLWroprY2VSWGhMSkdJQjg0OTQ6Ozo5QDk/Q0VAPDw5OTk9Oj07PDw6PTw7OTw9Ozs/PUA9PT5AQD9CQT5APD05QERDQkFBQj48SEpLTU5IqNnU1NXV1dXV1dXV1dXW1tbW1tbW1tbW1tbW1tbWzMzLy8vLy8vLy8vLy8vLy8rKy8vLzMzMzMzMzMzMzM3Nzc3Nzc7Ozs3Nzc3Nzc/Pz8/Pz8/Pz8/Pz9DQ0dHR0dHR0dHR0dHS0tHV2djY2NnZ2dra2tvb29vZ2dnZ2dna2tra2tra2tjW19fX19fX19jX19fX2Nzd3d3d3d3d3d3d3d3e29fY19jX19fY19bX19bX2tra2tra2tra2trb3NzX1dXV1dXV1dXV1dXW1tbX1tbW1tbV1dXV1dXV1dXV1dTU1dXV1dXV1dXU1NTU1NTU1NTU09PU1NTU1NXV1dXW1dXV1dXV1dTU1NTT09PT09PS1bqKa2hoUlhlSUlMT0A5OTo0O0E8Nz05QUM+QD89ODo6Ozk9Oz4/Ojs8PDo7PDo7Pj1APT8/P0FAQUE/QTw8Oz5BRENBREA9PElJSk1ORqPa09TV1dXV1dXV1dXW1tbW1tbW1tbW1tbW1tbW1szMz9DPz8/Pz8/Pz8/Pz8/W3t3d3t7e3t7e3t7e3t3S0NDQ0NDQ0NDQ0NDQ0ci5ubm5ubm5ubm5ubq6t6WkpKSkpKSkpKSkpKSnhmBjY2NjY2NjY2NkZGRlhIuKioqKioqKioqKioemuri4uLi4uLi4uLi4ubN4c3Nzc3Nzc3Nzc3NzcJK7uLi4uLi4uLi4uLi5sIqKioqKioqKioqKiouHvebh4uLi4uLi4uLj4+Pi2NfX1tbW1tbW1tbV1dXV1dXV1dXV1dbW1dXV1dXV1dTU1NTU1NTU1NTV1dXV1dXW1dXV1dXV1dXV1NTU1NTT09PT09XDkXFrak5TYkxMVk48Ojo3Nz5DPjg+Oj8/QTw/QDc7Ojs7PTs+Pjo7PD48Oz07PT8+QDw/Pz1AQEBBPj88PjxAQUVCQkZAQD9HSEpLT0ae2tXV1dXV1dXW1tbW1tbW1tbW1tbW19fX19fX19fMzNDS0tLS0tLS0tLS0tLR3uzr6+rq6urq6urq6uvp1dLS0tLS0tLS0tLS0tTEqaqqqqqqqqqqqqqqq6aGhIWFhYWFhYWFhYWFik4MEhISEhISEhISEhIRE0pUU1NTU1NTU1NTU1NPg6ejo6Ojo6Ojo6Ojo6WZMikrKysrKysrKysrKiVhqaSko6Ojo6Ojo6OjpZVTUlNTU1NTU1NTU1NTS6ry6+vr6+vr6+vr6+vr6dnX19fX1tbW1tbW1tbW1dXV1dXV1dbW1tbV1dXV1dXV1dXV1dTU1NTV1dXV1dXW1tXV1dXV1dXV1dXU1NTU1NTU1NPUy5h2bGlKTl9NUlVNPjw8NztAQz42Ojc+Pjs9Qj85PDk9Ozw6PD07PTs9Ozs9PD0+PT07QT08QUBBQT08Pzw7QEJDQURFPUFAQ0ZLS09GmNzV1dXV1dbW1tbW1tbW1tbW1tfX19fX19fX19fXzMzR0tLS0tLS0tLS0tLS0d3q6enp6enp6enq6unq6dXS0tLS0tLS0tLS0tLUxaqrq6urq6urq6urq6yoiIeHh4eHh4eHh4eHh41SEhgYGBgYGBgYGBgYFxpOWVdXV1dXV1dXV1dXU4WopKSkpKSkpKSkpKSmmzgvMDAwMDAwMDAwMDArZaqlpaWkpKSkpKSkpKaXV1dXV1dXV1dXV1dXV0+r8erq6urq6urq6urq6unZ19jX19fX19fX1tbW1tbW1tbW1tbW1tbW1tbV1dXV1dXV1dXV1dXV1dXV1dXW1tbW1tXV1dXV1dXV1dXU1NTU1NTU1NGcenFpSlRdT1JVTkQ+Pzs+QEA4Ojs4PDs7PD86Ozs4Ozk5Ozw7Ojw5Ozs8Ozo9PT0+PUE/Pj8/Pj08PT88PEFBQ0FERTw+QEVGSktNRpPc1dXV1tbW1tbW1tbW1tbW1tfX19fX19fX19fX183N0NLS0tLS0tLS0dHR0dDc6Ofn5+fn5+fn5+fn5+bV0dLS0tLS0tLS0tLS08Wtrq6urq6urq6urq6vq46NjY2NjY2NjY2NjY2SXSInJycnJycoKCgoKCcpWmNiYWJhYmJiYmJiYl6MrKmpqampqampqampq6BFPT4+Pj4+Pj4+Pj4+OW6vqampqampqampqamrnGJhYmJiYmJiYmJiYmJbr+/p6enp6enp6enp6enn2djY2NjY19fX19fX19fX19fX19bW1tfX19fW1tbW1tbV1dXV1dXV1dXV1dXV1tbW1tbW1tbW1tbV1dXV1dXU1NTU1NTWo3txZElbYE5OVU9AQT89REI/Oz06OTs6PT07PDs6OTg5OTs8Ozw8Ojo7PDo7QD08PTxAQTxBQTs7PEA/PD1CP0RDQ0U8PkJERkpMTEWN3NXV1tbW1tbW1tbW1tbX19fX19fX19fY2NjY2NjNzc7Ozs7Ozs7Ozc3Nzc3Nzs/Pz8/Pz8/Pz9DQ0NDQz87Ozs7Ozs7Oz87Oz87NzMzMzMzMzMzMzMzMzMvJycrKysrKysrKysrKysfCw8PExMTExcXFxsbGxsvMy8zLzMzNzMzMzMzLz9HR0tLS0tLS0tLS0tLRysrKysrKysrJycnJycnM0tHR0tLS0tLS0tLS0tDNzc3Nzc3Nzc3Nzc3NzdTY2NnZ2dnZ2dnZ2dnZ2djY2NjY2NjY2NjY2NfX19fX19fX1tfX19fX19bW1tbW1tbW1tXV1dXV1dXV1dbV1dbW1tbW1tbW1tXV1dXV1dTU1NTU169/cF5GXmJQUVdOR0ZDQ0lBPz07PDo8OEBCPD04Ojo4OTg7Pzs8PDs7PDw8PD87PD46Pj44PkI8Pj1BPjw+QkBERUNAPD5APkNJSUtEh9zV1tbW1tbW1tbW1tbX19fX19fX19jY2NjY2NjYzs3Nzc3Nzc3Nzc3NzdHNzc3NzczP09LSzs3P0s7Ozs7Ozs7Ozs/Rzs7Q09DO0tTV1NDPz8/Pz8/Pz8/Pz8/P0NDQ0NDR0dHR0dHS09PU1NTU1dXV1tbW1tfW1tbX1tfX19fX19fX19bW1tbW1tbW1tbW1tbW1tjX19fX19fY19bX19fX1tbW1tbW1tbW1tbW19fW2NjY2NjZ2dnZ2dnZ2dnY19jY2NjY2NjY2NnZ2dnZ2dnZ2djY2NjY2NjY2NjY2NjX19fX19jY19fX1tbW1tbW1tbW1tbW1tbW1dbW1dbW1tbW1tbW1tbW1tXV1dXV1NTV1di4gm9XSl9jUlFaS0hBQTxCPT07Oj4+PD4/PT0/Nzk6OTk3OD48PD47Ozw7PDs/PT0+OTs7OT0+P0A+QD07OkI/QkNCPz0+QD5CRUdKQoDc1tbW1tbW1tbW19fX19fX19fX2NjY2NjY2NjY2M7Ozs7Ozs7Nzc3Nzsqfys3Nzc3QuYOEi8fTwJrLz87Ozs7OztHBp9HSuY++1JyChIrGz87Ozs7Ozs7Ozs7Oz8/Pz8/P0NDQ0NDQ0NDR0dHR0tLT09PU1NTU1NTV1dXV1dXV1dXV1dXV1dXV1dXW1tbV1dXV1dbW1tbV1dXV1dXV1NTU1NXV1dXV1dXV1dXW1tbW1tbW1tbX19fX19fX19fY2NjY2NjY2NjY2NnZ2dnZ2dnZ2dnZ2dnY2NjY2NjY2NjY2NjY2NjY2NfX19fX1tbW1tbW1tbW1tbW1tXV1tbW1tbW1tbW1tbW1tbW1dXV1dXV1dXYwIBuVU9gY1dZW0xMQ0A9PTs9Ojw+Qj5CQ0A8Ojg5ODo6Ojc7Pz4/PDw7PDo5Pzw8PTg5PD9BPj09PUFAPTtBQkBCQz47QD9BQUlHSkF629bW1tbW1tbX19fX19fX19jY2NjY2NnZ2djY2dnOzs7Ozs7Ozs7OzdKpj63Rzs7Ozpu3tqSiwJOerNPOzs7Oz8/RnY/DwpSwnLGWuLmvodLOzs7Ozs7Ozs7Pz8/Pz8/Pz9DQ0NHR0dHR0dHS0tLT09TU1NTU1dXV1dXV1dXV1dXV1dXV1dXV1dXW1tbW1tXV1dbW1tbW1tXV1dXV1dXU1dXV1dXV1dXW1tbW1tbW1tbW1tfX19fX19jX19fY2NjY2NjY2djY2dnZ2dnZ2dnZ2dnZ2dnZ2djY2NjY2NjY2dnY2NjZ2NjY19fX19fX19bW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tXV1dXV1dXV18h/b1pTYWVeXVxPSkQ9QD8+Ozc6Pjk/RD5BOTg3ODk7Ozw4OT89PTw9PD47OkE7OTs5OzxDQDw7PT5AQT49QkQ/QkM9PT8+Pz5ISUg/ddrW1tbX19fX19fX19fX2NjY2NjZ2dnZ2dnZ2dnZzs7Ozs7Ozs7Ozs/Inrym0tDQzsqgl36Cw6abr6fUz8/Pz8/Tuq+qvqSgi5HDk31+r7DSzs7Ozs7Ozs7Oz8/Pz8/Pz8/Q0NDR0dHR0dLS0tPT09TU1dXV1dXV1dXV1dXV1dbV1dXV1dXV1tbW1tbW1tbV1dXV1dXW1tbV1dXV1dXV1dXV1dXW1tbW1tbW1tbW1tbW1tfX19fX19jY2NjY2NjY2NjY2NjZ2dnZ2dna2dnZ2dnZ2dnZ2dnZ2djY2NjY2NnZ2dnZ2dnY2NjY2NfX19fX19fX19bW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1dbV1dXV1dfNiHNdWGloXl9gT0lGOkFAPj88PDo2P0JAQzo2NDc6Ozo8Ojk+PD49PTs/PTxBPjw8Ojw8PTw6PEA9QEI+PkFCPUNDPT0+Oz9BRUtIQHDZ1tbX19fX19fX19fY2NjY2NjZ2dnZ2dnZ2dnZ2c/Pz8/Pz87Ozs7SrKWnqdXAvNLHnY+ey9PJipmq1M/Pz8/P05+xm7ibh5261NLNnp7D0M/Pz8/Pz8/Pz8/Pz8/Pz8/Q0NDQ0dHS0tLS09PT1NTU1dXV1dXV1dbW1tbW1dbW1tbW1tbV1tbW1tbW1tbW1dXV1dXV1dXW1dXV1dXV1dXV1dXW1tbW1tbW1tfX19fX19fX19fX19jY2NjY2NjY2NjY2NnZ2dnZ2dnZ2tnZ2dnZ2dnZ2dnZ2dnZ2dnY2dnZ2dnZ2dnZ2dnY2NjY19fX19fX19fX19bW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbV1dXW0JB1W1tqaWFeXVNOSTxDQEE+QD46OEZBP0M6NzQ5Ojo5Ozs4Oz0/Pj49QT08P0A9Pjw8PDw8Oj1AQD8/PT5CQD9AQkA8QD0+QUVLRz9r19fX19fX19fX2NjY2NjY2NjZ2dnZ2dnZ2dnZ2tnPz8/Pz8/Pz8/QzJ2Nl6zQmpfKxZ6ynpbN1q2ZqtTPz8/P0cCciZuwm5CfoNLTwKCg0M/Q0M/Pz8/Pz8/Pz8/Pz8/P0NDQ0dHS0tLT09PT1NTU1NXV1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbV1dXV1dXV1dXV1dXV1dXV1dXW1tbW1tbW19fX19fX19fX19fY19fY2NjY2NjY2NjY2NjZ2dnZ2dnZ2drZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2djY2NjY2NfX19fX19fW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1dXV1tKUcl5ea2tqZV1PTEc/RENDQDo9OzxCPD49OTY0Ojk5Ojo5Nzs/QDs8PUA8PEE+PD07PTw/PDo8Q0A+PTs9QD5CPkBBPkA9QD9GSUQ/ZtXX19fX19fY2NjY2NjY2NnZ2dna2tra2tra2traz8/Pz8/Pz8/P07GigJuvyaCjv8qcpYynrdiqmarUz8/Pz9SjooGeqquvkaG516+iqdTQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NHR0tLT09PT1NTU1NXV1dbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1dXV1dXV1dbW1tXW1tbW1tbV1tbW1tbX19fX19fX19fX19fY2NjY2NjY2NjY2NjY2NjY2dnZ2dnZ2dna2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2djZ2djY2NjY2NfX19fX19bW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbSk3BgXnBoZmVaUUhHQkVDQEA3Ojo8Pjo8OTc2NTk6Njo8Ozc8QEA8Ojo9Oj0/Pj08OUA8PDo6OT9APj08PUBBQz9APz5BOz9ARkpCP2LS2NfX2NjY2NjY2NjY2dnZ2dnZ2tra29vb29vb28/Pz8/Pz8/P0M6fkGyclteqo9PSrqa1mJ/Vqpmq1M/Q0NHEn4F7mZaimq2bqdijobrU0dHR0NDQ0dHQ0NDQ0NDQ0NDQ0NHR0tLT09PT1NTU1dXV1dbW1tbX19bW1tbW1tbW1tbX1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tfW1tfX19jY2NfX19fX2NjY2NjY2NjY2NnZ2dnZ2dnZ2dnZ2dna2tnZ2dnZ2dnZ2dnZ2dnZ2dnZ2djY2dnZ2dnZ2dnZ2dnZ2NjY2NjY2NjX19fX1tbW1tbW1tbW1tbW1tbX19fX19fW1tbW1tbX0pNuYFxxZGdkWlVKQENGQ0FCODs/PD07PDw4NTU4OTY4Ozo5PDo+Pzw9PTk8Pz49Ojo+OTw6Ojg+Pzw9PTw+QEFDQT48PDpCRERKRkJd0NnX19jY2NjY2NjY2dnZ2dna2trb29vb29vb29vPz8/Pz8/Pz9G9n8O31pfA09HQ0srSzZeb1KqZq9XRz9DVq6+8wNGFlabFmKLRnp/J0tHR0dHR0dHR0dHR0NDR0dHR0dHR0tLT09PU1NTV1dXV1tbW1tfX19fX19bW1tbW1tfX19fW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW19fX19fY2NjY2NjY2NjY2NjY2djZ2dnZ2dnZ2dnZ2dnZ2drZ2tnZ2dnZ2dnZ2dnZ2dnZ2djY2NjY2NjZ2dnZ2dnZ2dnZ2dnY2NjY2NjY2NfX19fX19fX19fW1tfX1tbX19fX19fX19fX19bW19GRbF1cb2doYl1PRkBISUdFQDw8Pj48PT48NzU2Ojk2OTs6Ojs4QD86PDw5PD49Ozs6Pzk/Ozs5PT49PTs7PTxAQ0I/Pz47Q0ZGR0hEWc3a2NjY2NjZ2dnZ2dnZ2dna2trb29vb29vb29vb0NDQz8/Pz8/Pz5V+e6WS1KKa08ySl6ObodirmavV0pem1cmHf4WfoJ+cm5utx5+h0tHR0dHR0dHR0dHR0dHR0dHR0tLS0tLS09PU1NTV1dXV1tbW19fX19fX19fX19fX19fX19fX1tbW1tbW1tbW1tbX19bW1tbW1tbW1tbW1tbW1tbW1tbW1tfX19fY2NjY2NjY2NjY2NjY2dnZ2dnZ2dnZ2dnZ2dnZ2tra2tra2tnZ2dnZ2dnZ2dnZ2djY2NjY2NjZ2dnZ2tnZ2dnZ2dnZ2djY2NjY2NjY2NjX19fX19fX19fX19fX19fX19fX19fX19fX1tfPjGRWXnBrXGBgTkVITUlJT0M+OkI9PUBCOzU0Nzw6Nzo7Ojo7OT09OTo6OT0+Pz07OT47PDo8Ozk+PD47PD0+QENCPz5BPEFDR0ZGRVXJ29jY2NnZ2dnZ2dnZ2dra2tvb29vb29zc3Nzc3NDQ0NDQ0M/Pz9DR1aeZrcmjqL7KnbGdo7XZqZup2LirocbT09WcmMOnq6SexbSkptbS0tLS0tLS0tLS0tLR0dHS0tLT0tPT09PU1NTV1dbW1tbX19fX19fX19fX19fX19fX19fX19bW1tbW1tfX19fX19fW1tbW1tbW1tbX19fW1tbW1tbW1tbX19fX2NjY2NjY2NnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dra2tra2tra2trZ2dnZ2dnZ2dnZ2djY2NjY2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnY2dnY2NjY2NjX19fX19fX19fX19fX19fY2NfX19fX19fYzYZdV2JvZE9dVEtIRlNRS0xAPj1EPD9DRj01NTc7OTY6Ozo8PTo7Pzo6OTg6PT0/Pjs/Oz49Ojs5Pjs9PD0+QURCQD8+PzxAQUVHRURSxdvY2dnZ2dnZ2dnZ2tra2tvb29vb3Nzc3Nzc3NzQ0NDQ0NDQ0NDQ0NO5gL3Tm5bP1LWLkZ/T1LyBu9TOlKDS0dLXqIfNzZKQp9e5g7/V0tLS0tLS0tLS0tLS0tLS0tLT09PT09PU1NXV1dbW1tfX19fX19fY2NjY19fX19fX19fX19fX19fW1tbX19fX19fW1tbW1tbW1tbW19fX1tbW1tbW1tbX19fX19jY2NjY2NnZ2dnZ2dnZ2dnZ2tnZ2tra2tra2tra29ra2tra2tnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2NjY2NjX19fX19fX19fY2NjY2NjY2NjY2NfX2ct+WlVqaltMX01KTEpVTEZCPD0/R0ZIS0g9NjU3Ojk3OTo7Ojw9OT45OTo4Oz0+PkE+PTk8PDo9Pj46PTk5Oj9FQUA+PT8/QkBHRURFUMHc2dnZ2dnZ2dna2trb29vb29vb3Nzc3Nzc3dzc0NDQ0NDQ0NDQ0NDQ0cHR0crI0tDUxLjS0tHSwtLQ08fM0tHR0s/F1NTLvdXS0cLT0tLS0tLS09PT09PT09LS0tPT09PU1NTU1NXV1dbW1tfX19fX19fX2NjY2NjX19fX2NfX19fX19fX19fX19fX19fX1tbW1tbW1tbW1tfX1tbW1tbW1tbW19fX19fY2NjY2NjY2dnZ2dnZ2dnZ2dra2tra2tra2tra29va2tra2tra2dnZ2dna2tnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dna2tnZ2dnZ2dnZ2djY2NjX19fX19fY2NjY2NjY2NjY2NjY19rHd1xSZ2laTlpOTFBRV0VKPz89P0FFTExBPjc3NTs4ODk5Ojs8Pjw+ODo6OTs+P0A9Pj46NTo6PD0/Ojs5Ojw+QkJAPz8/P0FCR0RDRE683dnZ2dnZ2dna2tvb29vb29vb3Nzc3Nzc3d3d3dDR0dDQ0NDQ0NDQ0NDS0NDR0dDQ0dPU0dHR0dPR0dHS0tHR0tLT1NLS09XT09PV0tLS0tPT09PT09PT09PT09PT09PU1NTU1dXV1dbW1tfX19fX2NjY2NjY2NjY2NfX19jY19fX19fX19fX19fX19fX19fX1tbW1tbW1tbX19bW1tbW1tbW1tfX19fX2NjY2NjY2NnZ2dna2tra2tra2tra2tra2tra2tvb2tra2tra2trZ2tra2tra2tra2tra2tnZ2dnZ2dnZ2dnZ2trZ2tra29ra2trZ2dnZ2dnZ2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjbwXNYVWlrU0xSTlBSWVRGSTw+Qz9BQkVKPj43ODY5Nzc4OTk7Oz0/QDw9ODk7Ozs/Pjw8OTU6PT47OTk6PD8/P0JCQT1BPUBBQkZCQkJLtd7Z2dra2tra2tvb29vb29vc3Nzc3Nzd3d3d3d3R0dHR0dHR0dHR0dDQ0NDQ0NDQ0dHR0dHR0dHR0dHR0dHS0tLS0tLS0tPT09PT09PT09PT09PT09TU1NPT1NTU1NTU1NXV1dXV1dXW1tbX19fX2NjY2NjY2NjY2NjY19fY2NjX19fX19fX19fX19fX19fX19fX19fW1tbX19fX1tbW1tbW1tbX19fX19jY2NjY2NnZ2dna2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tnZ2dnZ2dnZ2NjY2NjY2NnZ2dnZ2dnZ2NjY2NjY3LxvVFRsbExLUkpUUlVLRkQ6PkdEREFERjw/ODk6OTU5OTo3PD07PkA9PTc5Ojs5Pjs5OTY2Oj1AQT47PDk6Pj9DQT4/Qj0+QkNFQkFCSrDe2dra2tvb29vb29vb29vc3Nzc3Nzd3d3d3d3d0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0tLS0tLS0tLS0tLS0tLS0tPT09PT09PT09PT09PT1NTU1NTU1NTU1NTU1dXV1dXV1tbW1tbW19fX19jY2NjY2NjY2NjY2NjY2NjY2NjY19fX19fX19fX19fX19fX19fX19fX19fX19fW1tbW1tfW19fX19jY2NjY2NjZ2dnZ2dra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2trZ2dnZ2dnZ2djZ2dnZ2dnZ2dnZ2dnZ2dnY2Ny2a1NbcGtLVVdSXFFXSEQ+PEJKRT1ISj89PDc4ODo1OTg5Njs+PD1APDw1OTk8Oj87OTg0ODw9PUFBPD47Ojw+QD89PkE9PUNGR0I/Qkmq39ra29vb29vb29vb3Nzc3Nzc3N3d3d3d3d3d3dHR0dHR0dHR0dHR0dHR0dHR0dHS0M/U0M7P0tLT0tLS0tLS0tLS0tPT09TU1NTU1NPU1NTU1NTU1NTU1NTU1NTV1dXV1dXV1dbW1tbW19fX19fY2NjY2NjY2NjY2NjY2NjY2NjY2NjX19fX19fX19jY2NfX19fX19fX19fX19fX19fX19fX19fX19jY2NjY2NjY2dnZ2dra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tvb29va2tra2tra2tra2tra2tra2tnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dndsGRTYXJfT1pUV19RUkdCPUVJTEFBTEQ/Pzs6ODg5Mzg2ODY5Pj0+Pz06Njo7Pjs9PTo5Njg6PTtAQDxAPz0/P0I+PD48PEJFR0lCPkNJpODa29vb29vb3Nzc3Nzc3Nzc3N3d3d3d3d3d3t7S0tLS0tLS0tLS0dHR0dHR0dPT0bm7zLqbnLrQyNPT0tLS09PT09PT09PU1NTU1NTU1NTU1NTU1dXV1dXV1dXV1dXV1dbW1tbW1tbX19fX19fY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjX19fX19fX19fX19fX19fX19fX19jY2NjY2NjY2NjZ2dra2tra2tra2tra2tra2tra2tra2tra29va2tra29va2tvb2tra2tra2tra2tra2trb29vb29va2tra2tra2tra2tra2tra2tra2tnZ2dnZ2trZ2dnZ2dnZ2dnZ2dnZ3qpfVWBuW1VZUVpeT0xHQ0ZNSUZEREo7QUE7PDg4NjQ4Njk4Nzw/QT89Ojc8Pz48Pz87OjY4OD09QEE9QD5BQD1AOjs6Pj1BRUdJQkBDR57h29vb29vc3Nzc3Nzc3Nzc3d3d3d3d3d7e3t7e0tLS0tLS0tLS0tLS0tLS0tO+wMqaoKKViJGeqpOpz9TT09PT09PT09PU1NTU1NTU1NTU1NTV1dXV1dXV1dXV1dXV1tbW1tbW1tbX19fX19fY2NjY2NnZ2dnZ2dnZ2dnZ2djY2djY2NjY2NjY2NjY2NjY2NjY2NjX19fX19fX19fX19fX19fX19fY2NjY2NjY2NjZ2dna2tra2tra2tra2tra2tra2tra29vb29vb29vb29vb29vb29vb29ra2tra2tra2tra2tvb29vb29va29vb29vb29va2tra2tra2tra2tra2tra2trZ2dnZ2dnZ2dnZ2d6iXFVeblheXU5aUFROQ0NMSUlJRkpEPEJBPDs4NzY3OTc3OTk9P0E/PDo5QD88PkI/Ozg3NzY9Pz9APUBBPz88PTs7OD48P0VJSEE/Q0aX4dvb29zc3Nzc3Nzc3N3d3d3d3d3d3t7e3t7e3tPT09PT0tLS0tLS0tLS0tTIlZyum5m1iX2TjIKBhMTV09PT09PT09PU1NTU1dXV1dXV1dXV1dXV1dXV1dXV1tbW1tbW1tbW1tfX19fX19fX2NjY2NjY2dnZ2dnZ2dnZ2dnZ2dnZ2NjY2NjY2NjY2NjY2NjY2NjY2NfX19fX19fX19fX19fX19fX2NjY2NjY2NjY2dnZ2dnZ2dna2tra2tra2tra2tra29vb29vb29vb29vb29vb29vb29vb2tra2tra2tra2tvb29vb29vb2tvb29vb29vb2tra2tra2tra2tra2tra2tra2tra2tra2tnZ2dndmlpYYW5ZYVdPV01QRUJETElNS0ZJRT5CRDk4ODY3OTc1Njk4PT1BPjo4OT4+PD9APzw1Njc2PD4/PjtAQEA/Pj4/Pjs/PkFCRkdCQENIkeLb29zc3Nzc3d3d3d3d3d3d3d7e3t7e3t7f39/U09PT09PT09PT09LS0tLTz6h+kayPko6MhoCIiYSQo8rU09PT09PU1NTU1dXV1dXV1dXV1dXV1dbW1tbW1tbW1tbW1tbW19fX19fX19fX2NjY2NjY2dnZ2dnZ2dnZ2dnZ2dnZ2dnY2NjY2NjY19jY2NjY2NjY2NjY2NjX19fX19fX19fX19fY2NjY2NjY2NjY2NnZ2dnZ2dna2tra2tra2tra2tra29vb29vb29vb29vb29vb29vb29vb29ra2tra2tra2tvb29vb29vb29vb29vb29vb29va2tra2tra2tra2tra29vb29ra2tra2tra2tna3JJaWWNuWlpSVV5QTDxAR05IUklIRT47SEY4OTc1Nzg3NTg5ODs+Pj07ODlBPj1AP0E+NzU5Njs+QUI/P0BAQkI/Pj8+QUBEQUZIQj9FSozi3Nzc3Nzc3d3d3d3d3d3e3t7e3t7f39/f39/f1NTU09PT09PT09PT09PWtaWaiIuQhYCFi4iBg4qLf4bC1tTU1NTU1NTV1dXV1dXV1dXV1dXW1tbW1tbW1tbX19fX19fX19fX2NjY2NjY2NjY2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2djY2NjY2NjY2NjY2NjY2NjY2NjY2NjX19fX19fX19fY2NjY2NjY2NjY2dnZ2dna2dra2tra2tra2tra2tra2tvb29vb29vb29vb29vb29vb29vb29vb29ra2tra2trb29vb29vb29vb29vb29vb29vb29vb2tra2tra2tra29vb29vb29vb29vb2tra29uIWltnalxYTFpfVkg6TEhMSkpDRUZDQExINzo3Njc4ODU4Nzg5PDw7Ozk4QD89Pj8/PDY3PDQ3P0JCQUBAPz8/QT09P0A+QEBGRT09REuI4tzc3Nzd3d3d3d7e3t7e3t7e3t/f39/f39/f39TU1NTU1NPT09PT09PUxZKCg4WGfYGCfXx5foGCg36k29bU1NTU1NTV1dXV1dXV1tbV1tbW1tbW1tfX19fX19fX19fX19fX19jY2NjY2NjZ2dnZ2dnZ2dna2tnZ2dnZ2dnZ2dnY2NnY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjX19fX19fY2NjY2NjY2NjY2dnZ2dna2tra2tra2tra2tra29vb29vb29vb29vc3Nzc3Nvb29vb29vb29vb29vb2tra2tra29vb29zb29zb29vb29vb29vb29vb29vb29va2tvb29vb29vb29vb29vb29vb2tvZgFpebWhaU0ldW1hKRE1ISlNMR0ZBQD9KQjg7NjY5OTc1ODY4Ozo7Ojw5OD09O0A9Ozo2NTw3Oz1CQEFBPD49QEE9PEA/Pz5CREU+PERLg+Lc3d3d3d3d3t7e3t7e3t7f39/f39/f39/f39/V1dTU1NTU1NPT09PT2LKEkKh9g3l2hIh/e3d5gn5+i67A1dTU1NXV1dXV1tbW1tbW1tbW1tbW1tfX19fX19fY2NjY2NjY2NjY2NjY2NjZ2dnZ2dnZ2dna2trZ2dnZ2dnZ2dnY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2dnZ2dnZ2tra2tra2trb2tra2tvb29vb29vb29vc3Nzc3Nzc29vb29vb29vb29vb29va2trb29vb29zc3Nzc3Nvb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vc1nlcWmxmWFJPYFFSQUhHSkZYTEZAQENDSz87Ozc4ODc2NTc2ODo5PDw6PTs/PTs9Pjw7ODg8OT0/QkFCQzw8P0FCPj1BQkNCREVDQDtDTH3h3d3d3d3e3t7e3t7e39/f39/f39/f39/g4ODg1dXV1NXU1NTU1NPU0ruen3WKeXuIgICChYGDcnOAhYOMrNfV1NXV1dXW1tbW1tbW1tbW1tbW19fX19fX2NjY2NjY2NjY2NjZ2dnZ2dnZ2dnY2NnZ2dna2tra2trZ2dnZ2dnZ2djY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2dnZ2dna2tra2tra29vb29ra2trb3Nzc3Nzc29zc3Nzc3Nzc3Nzb29vb29vb29vb29rb29vb29vb29zc3Nzc3Nzc3Nvb29zc3Nzc3Nvb29vb29vb29vb29vc3Nzc3Nzc3Nvb29vb3dByXV9wZVdLUGNPS0JHQ0pIS0ZBPEE9SFBBOjo3Nzg3Njc4Nzw6OD09PD47QD88Pz07Ojs5Ojk8QEJAQkNAPUFAPz1AQkNDQUBAP0A7RU144N3d3d7e3t/f39/f39/f39/f3+Dg4ODg4ODg4NXV1dXV1dXV1NXU18h4i4V8goh6g4SBfoKCc2l0hYuGkJ3U1tXU1dbW1tbW1tbW1tbW19fX19fX19jY2NjY2NjY2NnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dra2tra2tra2dnZ2dnZ2dnY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2dnZ2dna2tra2tra2tra2tvb2tvb3Nzc3Nzc3Nvc3Nzc3Nzc3Nzc29zb29vb29vb29vb29vb29vb29vc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc29vb297KalxjcWVST1heSz9HTElPS0VAPkFCP0lPPjk6NzY7NzY6Ozc7Ojg6PDw+Oz09Oz48Ojs4OTo4OUFCQkFAQDtAQj06PkFCQz8+PT4/PUZOdN/e3t7e3t7f39/f39/f4ODg4ODg4ODg4ODg4OHV1dXV1dXV1dXV1s6dhpl+f5OTin+CgXx9gnNxm4mAgoOJwNnat7TQ19bW1tbX19fX19fX19fX2NjY2NjY2NjY2NjZ2dnZ2dnZ2dnZ2tnZ2dnZ2dra2tra2tra2trZ2dnZ2dnZ2dnZ2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NnZ2dna2tra2tra2tra2tra29vb3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nvb29vb29vb29vb29vb29vc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3NvfwGNaW21gVlBTU0pETEhNSEk8PkFEQ0ZORDw8OTc5OjY4Ozk3PDk4OTw9OzlAPjpBPzw3NTc7ODpAQUVBPz45PUI/Oz1CQkI6Pj07PT5GTnHe3t7e3t/f39/f39/g4ODg4ODg4ODg4OHh4eHh1tbW1tbW1tbV1tjLioCHhYOXjHh7e3lvfYF1a3ebdHZ7eInHxpiMrdjZ19fX19fX19fY2NjY2NjY2NjY2NjY2NjY2dnZ2drZ2dna2tra2tra2tra2tra2tra2tra2dnZ2dnZ2dnZ2dnZ2dnZ2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NnZ2dnZ2dnZ2dna2tra2tra2tra2tra29vb3Nzc3dzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nvb29vb29zb29vb3Nzc3Nzc3Nzd3dzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3d3d3d3d3Nzc3Nzc4LdjV1lrYlJNVVFMSktGS0ZDQD5CQT9FTT4+PTg5OTo3OTo3NT03Nzo+PDs7Qjw5Pz05NjY4PTk6QEJGQD49PEBCREA9QD9DO0A9PD4/Rk9t3N/e3t/f3+Dg4ODg4ODg4ODg4OHh4eHh4eHh4dbW1tbW1tbW1tfVrYZ6d32rn3l4entzdH+Dfm9xe3l6c3t2k4qFgImkzdnY19fX2NjY2NjY2NjY2NjY2NjY2NjY2NnZ2dna2tna2tra2tra2tra2tra2tra2tra2tnZ2dnZ2dnZ2dnZ2dnZ2dnZ2djY2NjY2NjY2NjY2NjY2NjY2NjY2dnZ2dnZ2dnZ2dra2tra2tra2tra29vb29vc3Nzc3N3d3d3c3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc29vb29vc3Nzb3Nzc3Nzc3N3d3d3d3d3d3dzc3Nzc3Nzd3d3c3Nzc3Nzc3N3d3d3d3d3d3d3d3dzc3OGtYVtebGJSTVZMTUdLS0RGQkI7QT08RUxDQT44Ojk6Nzc5NjY6NTs+QDs9Oz89PD89Ojk5Ojw5PEVDRkA/PkBDQkQ9OT0/QT1CPz1APkdPadvf3t/f3+Dg4ODg4ODh4eHh4eHh4eHh4eHi4uLW1tbW1tbW1tfQmH+Qh4N9eoN2e3Vzenl6kKqmd3JyfoeHh4CAfoKEhJHJzNnX19jY2NjY2NjY2NjY2NjY2NjY2NnZ2dnZ2tra2tra2tra2tra29va2tra2tra2tra2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2djZ2dnZ2dnZ2djY2NnZ2dnZ2dnZ2dnZ2tra2tra2tra2tra29vb29vb3Nzc3N3d3d3d3d3d3d3d3d3d3d3c3Nzc3Nzc3Nzb29vb3Nzc3Nzc3Nzc3Nzd3d3d3d3d3d3d3dzc3N3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3NzhpV9UYm1iUE9TSUhHRkpJSUJBPkJCPEVFREA+ODo4Ozc3Ojc4ODY+Pz07PDk9PDo+PTs6Njc7NjpEQUY+Pz8/PkNBPzs9PT47REM/PjxIT2fZ4N/f3+Dg4ODg4eHh4eHh4eHh4eLi4uLi4uLi1tbW1tbW19jYyH52doN+fnR2eIaCenl1d5yhu6GEgoCAfoeKinx/gYaMnKjO2NjY2NjY2NjY2djY2NjZ2djY2NjY2dnZ2dra2tra2trb29rb29rb2tra2tra2tra2tnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dna2tra2tra2tra2tra2trb29vb29zc3Nzc3N3d3d3d3d3d3d3d3d3d3d3d3dzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3e3t7e3t7e3d3d3d3c35pbT2drXFBRUElDT0pLR0xHSkJAP0FHREBBPDg8ODg1ODk3Njc3QEA/Ozw5Pj04PTw8Ojc4PTk/RENGPkE/QkBDPzw6Pj0/PkVEPz07S1Fj1+Hf4ODg4ODh4eHh4eHh4uLi4uLi4uLi4uLj49bW1tbW19XB3LRueHJze3B6eXaFiIR7eH2AgZiljH98fnuRhZaLhoGDgY6Rvd3Z2NjY2NjZ2dnZ2dnZ2dnZ2dnY2dnZ2dna2tra2trb29va2tva2tra2trb29ra2tra2tnZ2dnZ2dnZ2dnZ2dna2trZ2dnZ2dra2tra2tnZ2dnZ2dna2tra2tra2tra2tra2tra2trb29vc3Nzc3Nzc3N3d3d3d3d3d3d3d3d3d3d3d3d3d3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3e3t7e3t7e3t7e3t7e3t7e3t3d3d6NWFdobllQUUtISlNJTUhNSUtBQz9DRkJBRDo6PDg2NDg4NzY2Nj8+Pjo8OTw7Oj09PDw4Ozw7RERERT4/PkI+Qj84PT8/Q0NCQEE+O0xUY9Xh3+Dg4OHh4eHh4eLi4uLi4uLi4uLi4uPj4+PW1tbW1teslLZ6eHJvd5V7dHuLgHh1bn6Fg3t/hYhyfH2bnI6JioJ+g32Hk5rH1NjY2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dna2tra2trb29vb29vb29vb2tra2tra2tra2tra2tnZ2dnZ2dnZ2dna2tra2tra2tra2tra2tra2tra2tra2tra2trb2tra2tra2tra2trb29vc3Nzc3Nzc3Nzd3d3d3d3d3d3d3d3d3d3d3d3d3d3c3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3N3d3d3d3d3d3d3d3d3d3d3d3d3e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3d7Zf1lgaGxcUUtHR09LTk5PTURGQkg/Q0hEREA6Ozs4NzU3Nzc4NThAPkA7PDk8Ozw+Ojk7OTk7OUZERUI8QD4/PEBDOz5AP0A/Qj8+OjtKVWPV4eDg4eHh4eHi4uLi4uLi4uLi4uPj4+Pj4+Pj1tbX19vKhYR3cXJubniVhHt4hH95dnB4c3eLkY6CdnN9ioaId3d1d4ODfIiIk8Pb2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dra2trb2tvb29vb29vb29vb29rb2tra2tra2tra2tra2tnZ2dnZ2dna2tra2tra2tra2trb2tra2tra2tra2tra2trb29vb29ra2trb29vb29vb3Nzc3Nzc3Nzd3d3d3d3d3d3d3d3d3d3d3d7e3d3d3d3c3Nzc3Nzc3Nzc3Nzc3Nzc3d3d3d3d3d3d3d3d3d3d3d3d3d7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7f0nVZaGlqVk5KSE1OR01EUElGSD9FPUZMREM+Ozs8OTc3OTY2OTU4Pj4/PTs8QDs9PDo3Ozc5OThHREVCPUE9Qj8+QDw/QUE/QEJAPjs8S1Ri1OLg4eHh4eLi4uLi4uLi4+Pj4+Pj4+Pj4+Pj49fX19fEknuJf29sbnV2foSBg4qGfnVybWVtiIaKjoR7c4OHint4e4OPj4GEioqxztrZ2dnZ2dnZ2dna2tra2tra2tra2trb29vb29zc3Nzb29vb29vb29va2tra2tra2tra2tra2tra2tra2tra2tra2tra2tvb29va2tra2tra2tvb2tvb29vb29vb29vb29vb29vb29zc3Nzc3Nzc3d3d3d3d3d3d3d3d3d3d3t7e3t3d3d3d3d3d3d3d3dzc3Nzc3Nzc3d3d3d3d3d3e3t7e3t7e3t7e3t7e3t7e3t7e3t7f39/f39/f39/f39/f3t7e4clsW2pqalNOR0dOT0VIRk1JSUA7RD5ISUA9PDo6Ojg2ODo3Nzk0OD08PT07ODw8PDw4Njc4OTo6RUJFQT9APEI/Q0M+PkNEQUBAP0A8PUtRYdPj4OHh4uLi4uLi4uPj4+Pj4+Pj4+Pj4+Pj5OTX19fZqXaFfnx3bHB3eXh8jH2KhYB3anN0d3p9bot7fnl6foR/gIGDfnh8foeGlrbT2tnZ2dra2tra2tra2tra2tra2tvb29vb3Nzc3Nzc3Nvb29vb29vb29ra2tra2tra2tra2tra2tra2tra2tra29ra29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb3Nzc3Nzc3Nzc3d3d3d3d3d3d3d3d3d3d3d7e3t7d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3t7e3t7e3t7e3t7e3t7e3t7e3t7e39/f39/f39/f39/f39/f39/e3uO9amFpa2lRTkZNTEtKWE1OR0FAQE9BQz9AOzw4OTk5Njg2NjY4NDs+PD07OTY6Ojk6OTU4OTg5OkJERj8+Pj5AQEBCPzxBQD88Pj9BOT5KT17S4+Hh4eLi4uLi4+Pj4+Pj4+Pj4+Pj4+Tk5OTk19fX2sqKhIB5c29tcXN1d4CUeHaAfHWHhXd1cnWgmXp7d3Z5doR0bWxue3iAmouTu9za2tra2tra2trb29vb29vb29vb29zc3Nzc3Nzc3Nzc3Nzc29vb29vb2tra2tra2tra2tra2tra2tra2tra29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vc3Nzc3Nzc3Nzc3d3d3d3d3d3d3d3d3d3d3d3e3t7e3t3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3t7e3t7e3t7e3t7e3t7e3t7e3t/f39/f39/f39/f39/f39/f39/f397js2lpbmloUFBPTExPUk9LU0Y/RURERD48PDg7ODc5OTU2ODc2NzM6Pjs+PTc6Pjk5OTk2Ojo4NzxDRUc/Pzs/PkA9PkE9Oz0+OUFAQDhBTlFc0OTh4eLi4uLj4+Pj4+Pj4+Pj4+Pk5OTk5OTk5NjY2NjauY6AenZ1bmpveHCBfWt0cnZ3hIV5h4d5lY55eXp1d3pza298gHx2fYh8gLLe2tra2tvb29vb29vb29vc3Nzc3Nzc3Nzc3dzc3Nzc3Nzc3Nzb29vb29rb29vb29ra2tra2tra2tra29va29vb29vb29vb29zc3Nzb29vb29vb29vb29vc3Nvb3Nzc3Nzc3Nzc3Nzc3Nzc3d3d3d3d3t7e3t7e3d7e3t3d3t7e3t7e3t7d3d3d3d3d3d3d3d3d3d3d3d3d3t7e3t7e3t7e3t7f39/f39/f39/f39/f39/f39/f4ODg4ODg4N/f39/f4qpqa2hrZFNQT0ZQVFJOSFJLPkREQ0I7Ozk6Ojg2Nzg1NjY3Nzg0Oz88Pzw5PDw3Ozo6Nzo6Nzo9Q0JDPUE+Pzw5PT5BQDs8PDtFQD47Q05TXNDk4eLi4uLj4+Pj4+Pj4+Pj5OTk5OTk5OTk5OTY2NjZ1p5vdntveHh2cG50d3BwdHBzb36Jc3qGhY2EenNtcoB6hn1vg5OBdnx9g4a13drb29vc29vc3Nzc3Nzc3Nzc3Nzc3Nzc3d3d3Nzc3Nzc3Nzc3Nzb29vb29vb29vb29ra2tra2tvb29vb29vb3Nzc3Nzc3Nzc3Nzc3Nzc3Nvb29vb29vc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzd3d3d3d3d3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3d3d3d3d3d7e3t7e3t7e3t7e3t7f39/f39/f39/f39/f39/f39/g4ODg4ODg4ODg4ODg4N/f3+KgbWhma2ZVVlJHUFFOS0xMRUJIRUc9OD08Ojo3Nzg2Nzc2NTY3NDg+PD09Ojg6OD46Ozc4Nzc6Oj5DRDtDQj49OD1AQUM/Pjw+RTw+PUJNUF/S4+Hi4uLj4+Pj4+Pj4+Pk5OTk5OTk5OTk5OTk2NjY3MB2doCCfnp4eHBsdXlya399bHNvdGdoaYB/aWh4c2d+iYl4cIKGe3d9foWKvd3b3Nzc3Nzc3Nzc3Nzc3Nzc3d3c3Nzc3N3d3dzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nvb29vb29vb29vb3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzd3d3d3d3d3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7f39/f39/f39/f39/f39/f4ODg4ODg4ODg4ODg4ODg4ODg4ODflGttZm5mU1NJUFlUTEhGTkZGRUJGPTs+PDs5Nzc4NTc5NjQ1NzU4PDs9Pjo6OztAOTs7ODc6OTlAQkE8QUE/Pzk/QEJFQ0FAQEM7Oz1ES01g1uTi4uLi4+Pj4+Pj4+Pk5OTk5OTk5OTk5OTk5NnZ2tmYc3uqhJaCcnR1dn14aGx8d2h4d25rcHR5gIN2dHyBhIJ9c3CAin94gn95g8je3Nzc3Nzc3Nzc3Nzd3d3d3d3d3d3d3d3d3N3d3dzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nvb29zc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3N3d3d3d3d3d3d3d3d3d3d3d3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e39/f39/f39/f4N/f39/f3+Dg4ODg4ODg4ODg4ODg4ODg4ODg4ODh24tubWdzY1lRTVVbV0hDSUZOS0dCRD8/Qjo7OjY2NzU2NzY0ODc2Ozw7Pj86PDk8Qjg3OTo6Ojk6QUFCQUJDQEE+PT9CQ0NEQUJGOTg9REpOYtjk4uLi4+Pj4+Pj5OTk5OTk5OTk5OTk5OTk5OXZ2drcqHGCtXiRfnNsem6EgXaCfWtoan+DeHZ8dX2FhXRmcHl9d316gIqFe318foC03tzc3Nzc3N3d3d3d3d3d3d3d3d3d3d3d3dzd3d3d3dzc3N3c3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzd3Nzd3d3d3d3d3Nzc3Nzc3Nzc3Nzc3N3d3d3d3d3d3d3d3d3d3d3d3d3d3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e397e3t7e39/f39/f39/f39/g4ODg4ODg4ODg4ODg4ODg4ODg4ODg4eDg4ODg4ODg4tiFb3FrdWFWT1VVXE9ETUY+SkdKRUQ8P0I6PDk4Njg0NTY3NDc2NDk7Ozw7OD47PEE4ODo9OD04Oj09QEBAP0FCP0A+QENCQ0FBRTc2O0RMTmPa5OLi4+Pj4+Pj5OTk5OTk5OTk5OTk5OTk5OXl29ra3Z5sbnNxhY1ybXBuf391hH5rcnZ2enN4gXhzb3VwbWt2fHmFiIB/f392coODsd/c3Nzc3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3Nzd3d3c3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3N3d3d3d3d3d3d3d3d3d3d3d3d3c3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e39/f39/f39/f39/f39/f39/f39/f39/f39/f4ODg4ODg4ODg4ODg4ODg4ODg4OHh4eDg4eHh4eHh4eHh4OLXhW1xb3ZeUldTWlpRSkhDQFFAQkQ8OT9BOjw5NzU3NDU2NjQ3NTY9PDo9PTk+OjxAODo6PDY7OTs+PUJCQjtBQkBDQEBEREM8PUA3OjxFS01l3OPi4uPj4+Pj5OTk5OTk5OTk5OTk5OXl5eXl5dPOxsB+cWxveHt2b3VuanNzbZKGeG50dG5vdIZ/b2twboJ0bXZyfY2DdnF/d3mKgabf3Nzc3d3d3d3d3d3e3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3dzc3d3d3dzc3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3t7e3t7e3t7e3t7e3t/f3t7e3t7f39/f39/f39/f39/f39/f39/f39/f39/f39/f4ODg4ODg4ODg4ODg4ODg4ODg4ODg4eHh4eHh4eHh4eHh4eHh4eHi1oZucG1xYFJZUFdfWUpMTElSP0Q9OTtCRjs6OTc0NTY1NzU0NjY2Pj07Pz45PTk7Pjg9Ozo0ODtAQENCQ0FCRkE/Q0BBQkREOz0+OTs8QkxNZODl4+Pk5OTj4+Tk5OTk5OTk5OTk5eXl5eXl5eW5t7Woc3JscHd6dHd4bXFydXd/hHRyc2xsa3F8bnBudGuBf3GAd32Eg355gHNygYqg2d3c3d3d3d3d3d7e3t3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3e3t7e3t7e3t7d3d3d3t7e3t7e3t7e3t7f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f4ODg4ODg4ODg4ODg4ODg4ODg4OHh4eHh4eHh4eHh4eHh4eHh4eHh49WHcWxqbF5YWlVXYFZWUE9QTD1BOjs8RkE4Ojg3MzY1Njk2NTg1Nz89Oz8+OT04Ozw5PTs7NTo9Q0JCPENDREREQUE/PkJDQzw9Pjg5PENLS2PN0dnh1sjY4+Tk5OTk5OTk5OTk5eXl5eXl5eXltbW2q3J5cm59f3Z1d2hqaGlwb3Zta2tnZWZxdG15gG5teXd2iHhxa2podXV5dHV/wd/c3d3d3d3d3d3e3t7e3d3d3d7d3d3d3d3d3d3d3t7e3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3e3t7e3t7e3t3d3d3d3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f4ODg39/g4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4OHh4eHh4eHh4eHh4eHh4eHi4uHh4ePVhnFwY2lhV1NZV19MUk9STUtAPjg5O0E+ODc5NjQ3Nzc6NjY2NDk+Pzo8Pzo/OTo6Nzo9PDk5PEFBPTtBQ0VDRkA+Pj5BRUQ+QEE3OD5GSEpesrW4wbm1u8jg5eXl5OTl5OXl5+fn5+fm5ebm5ra2tbWOfX5weoR1cnZnYmNlbGtyb2ZpbHZtd4Z9hXlsbHd4a3ZwfH14c3V5fHd2h7ng3d3d3d3d3d7e3t7e3t7d3t7e3t7d3d3d3d3d3t7e3t7d3t7e3t7e3t3d3d3d3d3d3d7e3t7e3t7e3t7d3d3d3d3d3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4OHh4eHh4eHh4eLi4uLi4uLi4uLi4eHj1Yd1bl5uY1pUU1hXS1NLSk1SR0E4Ozs+PDk4NzU2NTY2OTY4NjY5Pzw6PT07Pzo7Ozk8PDs5Oj4+Pjs8PUFEQkNBQEBBP0JDPDw9Nzs+REVKXrG1tLW2t7e2y9rJ3uXl3eDi3tXU1tPU4OPg39+2treuh3t/bnmNenJ1bWNobGxtaXR4enF5enqIh4N6aWh9cWRvcXyGgX55e318e4an2t7d3d3d3d7e3t7e3t7e3t7e3t7e3d3d3d3d3t7e3t7e3t7e3t7e3t7e3t3e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t/f39/e3t7e3t7f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4OHh4eHh4eHh4eLi4uLi4uLi4uLi4uHh49aGdmxhb19dV1lcWlJQSEpXTEVHPUA9Ozs9OTY0NjU1NTg2NzY3OD87OT09PDw5OTw6Pjw6OTg+Qjs7Pj5AREBDRUFAQD0/QDw9PTU5PEJHRl2xtbW2uLm5ubq9uMPT0r3BwcC6u7y6u8TMxb/Dt7e3hGl1gX1ndYd5Z3Vxa2t5eHB3fH15bWl3e3h3bml1j4FwbHl4d3d9gXuGgnmAoNze3d3d3t7e3t7e3t7e3t7e3t7e3t3d3d3d3d7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t/f39/f3t7e3t/f39/f39/f39/f39/f39/f39/f39/f39/f39/f4ODg4ODg39/f39/f39/f3+Dg4N/f4ODg4ODg4ODg4ODg4ODg4ODg4ODh4OHh4eHh4eHh4eHh4eHh4eHh4uLi4uLi4uLi4uLi4uLi4ePXhXJrZ3RhW1hYX15TVVVRVUpMRj9JRDs5PTY2NDc3NTc4Nzc3ODk8PDo+PDg8Oj0+OTs8OTs5P0E8PT9DP0FARUJCQTw9Q0A6Pjw1NDlER0dasbW1tre5ubm5ubm3ubm4uLm5urq6urm5urm6u7e3uX9ucHN6b3B/eXNuc3Vsc3Z4cXFwb2tvcX6Bc2mHhIF9dHOHdW11hYmBgHJ2hafd3d3d3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7f39/f3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f4ODg4ODg4ODg39/f3+Dg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4eDg4eHh4eHh4eHh4eHh4eHh4eHh4eHh4uLi4uLi4uLi4uLi4uLi4uHj14lxa2xyW1dXXWBUUVVUUFJPSkNATUE9Ozk2NTM0NjQ2ODc3Nzk6Pjs8Pjs5PDo8PDk8PTw7PT0+PUNEREBDQkE/QD48PkE8OD06NjY6QkpIWLG1tLa2uLm5uLi5uLe3uLi5urq5ubi4uLi6uru3uKx7cnhxf3ZzfnBsbXpyZ29sbW50cHt3d3Jyd3pvhpJ2f3x8enZ5fH9zfYdyda3T393d3d7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e39/f39/f39/f39/e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f4ODg4ODg4ODg4ODg4ODg4ODf3+Dg4ODg4ODg4ODg4ODg4ODg4eHh4eDg4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4uLi4uLi4uLi4uLi4uLi4uLi49eHb2pxalVWV2FbT1FSUE5XSURESUo/Ojk6NzUzNDk1NzY2Nzg4Ojw7PD46PDo6PTw5PDw9Oz09PDs9REdEQ0E8PDw8Pj5AOzg8ODE1OkFGRVautbW1tre4uLm4uLi4uLe4ubq5uLi3t7i4ubq7t7mqcnB4d3x7e4J3aG5xam9qY2lyf21zcn54dHFsanaAeX2AgH91doB1a4qLgHaR1d/d3d7e39/f3t/f3t7e3t7e3t7e3t7e3t7e3t7e39/f39/f39/f39/f4N/e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t/f39/f39/f39/f39/f39/f39/f39/f3+Dg4ODg4ODf4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHi4uLi4uLi4uLi4uLi4uLi4uLi4uPYhm1sdGVWUFxnWE1YU1JRWUVDS1BOOzk4ODc1NTM5NTY2NzY4Nzk+OT0+OTw5OTw7Njg5OTo8QEA9PkBGQEJCQDo+PEE9Pzs7OzYxNjxCR0RQqLa1tba2tre4t7i4uLi4uLm6ubi4t7e3t7e5ure2tIlyd3h9iXxwem99c2hqbGdnbHRscXd0cWx2c3Fxd3FyfHl4g3Z7d2mLkYp9kM7f3d7e3tvY2drZ297f39/e3+De39/f3Nvc3N3e3uDg3+Dg4ODf3t7e39jS397f397e3t/f3t7f3t/f3t7e3t7e3t7e3t7e3t/f39/f39/f39/f39/f39/f39/f4ODf4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODh4eHh4eHh4eHh4eHh4eHh4eLi4eLi4uLi4uLi4uLi4uLj4+Lj4+Li4uPj4+Pi4uLi4+Lk14NoZ3VkVlVkZVdKWllXW1Q9RU1LSD04NzU3NjQzOTQ0Nzc1Njc5PTo9Pjw9PDk7PDk5Oj45PD4/PkFBQ0FFRUQ+OzxBPjw5PDs3Mzc+REhFSqG2tbW1tbW2tre4uLi4t7e4uLi3tra2tra3uLm2traLfXpsbHp/cGx5dm5qaGdlcXp4b2lvb3B1c21zd4Fnb32CgYNyf3lqcHJ6f6ng393Zy8a/vL2/vsLN0tDW3tnc4NfQzcPCw8PH1dfT2dzX1NjX0MfExce9vM/Kz87Y3djO3N3c2t3T0dze39/e397e3t7e4N/f39/f39/f39/f39/f39/f4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4OHh4eLi4uLi4uLf4uPi4eLg4d7W29/Sw8rJx9Hb3OLk4eHg2dre1sbExcTN2trf5OHi4trX3st9aWZxYVleZWFNTFRLUlpMO0hNSEZBPTc2NjUzNDY2NDg3NjU2OTw7Pj46Pjk5PDk3OTs7Oj49PEBAQ0RCR0ZCQT08Q0A9OTw7Nzc3P0RGRkaZtrS1tbW2tra4uLi4uLi3uLi3s7W2t7a3t7i5tba3opdxb29waW50dnFmZWNrbmdvcm1mZ2tygWVvdnyAeGRzj39zaHFyaWVlbm+w39HFv7u5ubm5ubq6uru6vc3Gw8e/urq6uru7u8HCvcHFvby/vry7urq5ubq6ubm6w8XDucDDwby/ube/z8/U3tjc3t/g3tLa4N/f4ODg39/f39/f39/f3+Dg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODh4eDg4ODg4ODg4ODh4eHh4uLi4eDh4uLi4uHa2t3RwsPCu8XT1uDdydPDrrnAsaqrq6uwtLbJ0sXRxLG4v7Srq6usr7S0vMzE1c60tLureGxtbWBdYl9ZS1NVVFFQREBRTUhEPzo3ODU3MzE1NjQ5ODQ2Njo8Oz08ODw5Njo6ODg5NzU8PDw/QEFAQkRDQkE8PkI/Pz09PTc1OD5DRUNAj7a0tLW1t7i4uLi4uLm5uLe1sautr7Oxs7OztLS0tqaei2tue3ZxeXhnY2hfcXdha25vaG99b25ja2lseHdsa4Z+bHB6dm1scG95sca8uru7urm5ubq6urq6urq6urq6urq6urq7u7q7u7y7urq6ubq7u7q6urq6urq6ubi3t7i4t7e2tbW1tbi3u8e+w8XHzcS4wMnH0tzZ2d/e3uDf39/f4ODh4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODh3Nji4uLi4eHh4OHg3tfGxtHQztTe3tPO0t/SuLi8sq2trKysrrG+ua63rKipqamqq6urqqqqq6ysuKyqqqqrq6urra6urq6urryzrayrpHlub21fXl1dVE1SU1xUSkE/UElIPjg5NjgzNzMwNTczNzg1NzY2Ojw/PDg5Ozo6Ojg5OjY1OTs8Pj9EP0NFQkNCP0BAQT9APjw3ODc6QUVEP4W4tLS1tbe4uLm5uLi3t7SurKuqqq2urq6vsLGzs7WjcG5ucm1wg311aWFlaGZkY2Rxc21td25naW1tZXBzb29zcXN8h4F6dX11n7u6uru7urq5ubm6urq6urq6ubq6urq5uLm5ubm6urq6u7q5ubm5ubq6ubm6ubm4uLi3t7e4uLe3t7a2tbW2tra1tbW1tba1t7e3t7rBvrzGycrb3+Dg3tvd3d7h4tDW4uHg4ODg4ODg4ODg4ODg4OHg4OHi0768zNjd3OLg0dnbxL23sLCxsa+zu7uzsLS9s66urq2tra2sq6qqqqmpqKmpqampqqurqqqqqamoqampqampqaqqqqytrq6urq6urq6sraR4aWJxZmFZWlZRUk5cU0Y9QlJEQTc8OzY5NTY1NDU2NTg3NTY1Nzg7Pjw7OTk5Ojg3Nzk3Njg8Oz47RD8/Q0BBREE+P0M9Pjw+Ojo3Nz9DRj54srCztLW2t7i3trKurq2sq6uqqaqtraysrq+xs7S1t4xucnRqaIB5ZmpmZWxdaG5waGxxYmNmcoJ+dmhobGpueoaBhXx4cXF5gK+6ubq6urm5uLm5ubm5ubm5ubm5ubm4uLe3t7e3uLm5ubm5uLe3t7i5ubi4uLi3t7a2tre3t7e3tra2trW0tLW1tbW2trW1tre3t7e3t7e3tre4v8bP0MS+v8DE19e8ydra4OHg4ODh4eDg4ODh4eDb3t7Uzby3tre6wMDJxLfIvrKwsLCwr7Cvrq6ur7Cwr66urq6uraytrKurq6qpqampqampqampqKmpqKmpqampqKmpqKmpqqqrraytra2ur66trK2heWpkbWdiXFhRUFFLVEpCOklRP0E3PDk0OjU2NTQ1NTY4ODY4Njs6OTw9PTs6ODY2ODg6ODY3Pj09PT5BQUVCQkNBQUBBOj09Pz05Ojc9QUc8bKqmqKutsLGwrqupqKqrq6mpqamrrKytra2usLO0tbilgIdvaWdzdGZrcG1qZGxvcm5rbWNrcHyJhG5qbHx4Y3uKfnNqc25rcY+7ubm5ubm5ubi4ubm5ubm5ubq5uLi3t7e3t7e3t7i5ubi4uLe2tra3t7e3t7a2t7a2tra3tra2tbW1tba1tLS0tbW1tra2tra3t7e3t7i4uLe2t7a2uLm4uLe3uL6+uLq9vcfb4OHg2Nnd4eHg3dfKwcPCurm5uLe4uLi3tbS0tLKysbGxsLCvr6+vr6+vr6+vr66ura2srKyrq6yqqqmoqKmppqepqaehpaipqamoop+hoZyip6inqausrK2ur7Cwrq2unXhwbGphY2BZUU1RTFJGQzlNUEU+ODs3Mjc5Njc0NDM1ODg3OTc7OTo9PTw6Ojk3NDo5ODY1OD8/QEI9RENDQ0FDQEJBQDtAP0A/PDw6O0NIPWOopaWlpqioqKenp6ipqqmoqKipqqqsra6wsLCztLW1taWYdn5xZmt4cW9tZmVsaGNsZ2ZpaX11bWlvfXZ5hWZod294b3Fvcninu7m5ubm5ubm4uLm6ubm5ubm5ubi3t7W1tba2tre3t7e3t7a2tbW2tre2tbW1tra3t7e2tbS0tLS0tLS1tLS0tLW1tba2tra2t7e3t7e3t7a2tre2tre3uLe2t7i4t7i4uLi4wMXTyry8w83PyMC9urm5ubq6ubi4uLi4t7W0tLSzs7KysrGwr6+vr66urq+vr6+uraysrKurrKysq6ehoJ6gn5udoaGdlpmkpKaon5mZmZmanZ+gn56fpKqtrq+ura2srJl1cGlrY2FeXVVOU0tSREQ4TktHQTo4NTI2OTY1NDczNzc3ODk3OTo7PT0+ODg4NzU6OTk1OD9AQEFEPkZBQkNAQkNCQT88QEJCQD0+OjpERj5cpqWmpqampqanqKenqKioqKenqaurrKytra2ttLS0tbekc311bnONf3JmanFjaW1jaGZobG51aV9jZ3VzdnpuZ3Bwcn56cYihu7m5ubm6urq6urm2s7a1uLm2trW1tra1tbW1tbW3tra3tra2tbW2tbW1tbS0tLa2t7e3tbS0s7O0tLW1tLS0tbW1tra2tra2t7e3uLe3tra2trW2tbW2tra2tra2tra3tra3uLi3uri4uLi3uLi5ubm5urq6urm4t7e3t7W1tLS0s7OysrKxsbCwr66urq6urq+vra2srKuppaSmpqScmZubmpmampmXl5eXl5aZm5iZmJmZm52en5+dnJ6gpKWko6OioqKQdG5jcGFeXltUU1RIVEo/PFFCRkM7ODYzNzo1NTQ4Mzg5OTc4OTc7OTs9Ozc6NzU2OTk4NTg+Pz9ART5CPz9DPzxBQUI/PT9EQT8+PTk9Q0Y/VaSlpqanqKeoqamop6ioqKioqKiqrKuqqaipq7W1tba5o3eKcXKHhnd0cGh5a2JjYWVsaW5zal9jZWNjZWprYmRqbHaXjX6ovbm3tre5u7u6uLWxrKurqq6wrKyrq62tq6uvsLGvr7CytbW2t7W1trW1tbW1tbW2trSvr7O0tLSvra6vsrW0tbW1tbW2t7e3t7e3t7e3t7e3t7Owsra1tLa2tre3tra2tbW1tra3t7e5uLi4t7e3uLi4ubq6urq5uLi3t7e1tbS0tLS0tLS0s7OysbCvr6+vr66vr62oo6KgnJqampqZmZqbm5qampqbmpmZmZiXl5aYmZmZmpycnZ+foJ+goKChoaCgoJ+fi3RuaXRdYGZeUlRLRFRJPUVTSEVCOzo0NDY5NDQ1NzM4ODg3ODk5Ojs7Pz04OjkzNTg5NjM5PT5AP0A6QEJCQkA/QEJCPz0+QUFCPz06PkVDQFGjpqWlp6inqauqqKaoqKipp6ioqKinp6ioqaq1tbe3t7KZtH99kIx1Z2lqbGZjYGNoZW94cGlicXx5cGpmZmRma3NqhYystrKwra2ttLeysLCtrKuqqaiop6ipqampqKinqKipqaeoqqurra2sqqytraysrq6traunpaSnqqyopKOkpamwsbGztbW2t7i3t7W1tre4t7e3t7Kppaasq6ivtLa1s7W3t7a1tbW2tra3t7e3t7a2t7e3t7m6urq5uLi3t7Wxs7S0tLKxsK6sq6yurrCxsK2rqqmqqKijnJqZmJmYmJiYmZmZmZmZmpqZm5ubnJybmZeYmpqcnJydnJ2foKGhoqKioKGgoKCfnop1amtuWVxhVktPREdVRz5PV0hEPTw4MzQ0ODQ1NDgyODk4ODk6Ojw5OUA8Njk6MzY3OTE0PD8/QEBBOkNGRUJBREJDQTo7P0FCQz9APUBEQ0BPo6empaemqKqqqqakpqenqKioqKimpqaoq6uttba3t7e4rbJ1cHuDdmBiaWtiZWZhZGdmfYh5bHKAfXFvcXhjbW5xZo+srKurq6ysra6urK2trKyqp6WmpaWlpqioqKiopaeoqKioqKeoqampp6Wko6KioqOioKKioaKhoKChoaKjpKOjpaWlqLC0s7OzsKuqqaqztLa3trGopaOioaGipKiqqairs7Sxrq6xs7W2tra3uLi3t7e3t7e3t7a2uLe0sa6ppqerrKmnpqWkpKSkpKWnqaajoJ+enZycm5uampmZmJeXmZmZmJiZmpqampqampqbm5mYmpydnZ2dnZucoKGgoaOjoqCgoKCfnp2FdGtsaFdYU0pHTUVITUdAU1dGRz09OTM2Mzc0NTU3Mzg6Ojo6OTw9OjpBPDY9ODM3ODgzNztAPz9AQDpCRUNAQkRDQT87PEBDQkNBQDxBQ0A9TqKnpqanp6mqq6mkpaWlpaaoqKippqanqKmpqrW2tre3t7izc2h7c2JnamtpaWJhZGloXV1tfHJma3J/fHR8bm1zc36gqamrq6uqq62trKusq6mpqKWjpKampqWmp6eqqaamp6enqKinp6iop6WjpKKhoaGhn56en5+fn56foKGho6Wko6OkpKSmp6enpqWkpaampqeqraumpKKhoaChpKWlpaenpaeoqKalpaivtLa3trW1tra1tbOwrKupqa6rqKWlpqampaSkpaWlpqWkpKSkpaKhoaGgnp2bm5ucm5qamZiXmJiYmJiZmpmZmZmYmZmZmZqZmZydnJycnJybnJ+fn6ChoaKgoKCfnZ2cgHNrbmReU0pITUZETEtFRFFTQ0c9PDgzNjI4NDY0NjQ4OTg6Ozk7Pjw5PTs5PTczNTk2NTY8QD0/QD88P0JDPkJCQj89Pj5CQ0FFQD86PkVAO0+jpqWkpqeoqaelpKWlpKWnp6eoqKanp6alpqa1tba2trW2uYptcW1vfHxxZ2pmYGFsYFROW2hqbm9tgYJ9cWdxdn6aqKeoqqmpqqurrKqqqqimpaWkoqOlpqalpaWmqaqppqWjpKWmpqSjo6KioqKgoJ+fnp6cnJycnJ2dnJ2en6CioaKjo6KhoqKkpaSioqOjpKSjpKSko6Ggn6GipKanp6ipqaelpaSipKSlqK2wsKyrqqusqqmnpaWmpaWlpaalpqioqailpaWkpKSlpKOjpKOioaGhoqKgnp2cnJubm5qZmJiYmJmam5mXl5eWlpeXmJiZmpqcm5qampubm5ucnJ6goKGgnp6enpycm356bnJiXlNNSlBFRk5NQkBPRT5JOz01MzYzODM2Njc1Ojs4OTs5Oj49Ozo5OT03NjY5NjU2PkI+PkE/PT5DQT5DQ0BAO0BAQkJCRUA+Oz5FPzxQoKSjpKOjo6SkoqSlpaSlpqamp6empqalpqaltLW1tbS0tbiBaHx9ZXOCemxwdWFfY1ROT1FbaGxpbGxxbW5xbnScoqSnqKioqauqqqqqqaempaSjo6OjpKSlpqalp6ytqaShnp2eo6Shnp6foKCenJ2dnJycmpqam5ucnJubm5ydnp6foKChoJ+goaOioKGjpKSjoqSlpaWkop+go6SkpKapqainpaGdnJ+jpaipqainqKioqaempaWkpKSlpqampqampqenpaWko6Ojo6KioqGhoqKhoqOkop+enZ2cmpubmpqZmJeXmJaWlZSUlJWVl5iYmpubnJuampqam5ucm5ucnp+fnpucnJyam5p/fnF0YFtUTUdNSEZMSj8/TkM8QDs8NDM4Mzc0NzY3ODs9ODo6OTk7PTs7ODk9Nzc4OTU4OD9APT9BPjs9RD89REA/PzpAQUE/QUVAPjw8Qz88Tp2ioaKioKCipaSkpKWlpqenp6empqampaampbW1tbS0tLS3jHalsXdmc3Jvc2xjZGlYT1JRT09dgG1kYFptkZGSoqKjpaampqenqKiop6alpaSjoqGhoaKjpaempqesrKemoJ2cm6Ghnpuamp2cmZiam5qampmZmZubm5uampqampucnZ6goaCfnp+hoJ6foqOko6Omp6inqKWioKGhoaGkpaWlpKCcmZmbnqOmpqampqanpqempaOlpKWlpqiop6enpaWlpaWkpKOjo6KhoqKioqKhoaKjo6Kgn56enZybnJubmZaUlJSTk5OTk5SUlJWWl5qam5ubm5qZmZqanJ2dnZ2dnZuampqamZqXf3dvc11aTkhKTkdFRklERU5APD09PDQ1OzQ2NDY1Njc5Ozg5OTg5OTw7PDc6Ozc4ODg1ODg/Qj9BQTw+P0A8PEJAQT49QT4/Pz1CQUA6OkA8PE+doqGfoJ+dn6OkpKSlpqeoqKenp6ampqampqW1tLS0tLS0tbSXtqd1Znh2Y2xjY2VjW1JTU1JNXqCMeFhodpajnp6hoaOjo6OjpKSlpqalpKSioaGko6OjoqOlpqWmpqenpp+bmpuioJmWlpWam5mXl5iYmpqYmJqampqbm5qZmZmenZ2goqOjo6KkpKWinqGhoaKjpaampaSjoaCgn5+hoZ+goJ2amJeZmpygpKOjpKWmp6alpaOjpKSkpKWnp6ampqampaWmpKOjo6SjoqKjpKGfoKGhoKGgoaCfn56dnZyamJeVk5KSkpKSkpOTkpOUlZaZmpqbm5qampqbnZ6enp2cnJybm5qamZmZlH10bHReWk9IRUdGQkVORT9GOzo+Pzs0Njo2OTM2NDY4ODo4OTc4ODo8Ozw5Ozs6OjY3ODk5Pj9APjw9QD5AOjlAQT89QT8/QUE+QUE/Ojk9PjpQnaCfnZucnJufoqOlpaWlp6iop6ampqanpqantLS0tLOysrGwsK2rkHiGj36bmn93Yl1TUlFRTGKgootaiKCgn52YmZycnZ2eoaGgpKenpqWkoqGjp6alpaKipaampaanpqagm5mboaCXk5OSl5qcmpeXl5iampmampqam5qYmJmaoKCgoKGfoaKipKamop6gn5+goaOko6Khn56enpyanZuZmpqZmJeZnqChoaKioqKkpaWmpKSkpKKioqKkpaWlpaWlpaalpaOko6KioqGgoKGgnp+fn5+fnp+foJ+cm5qZl5WUlJSTkZCRkpKSkpKSk5SVl5iZmpmZmpqam5+fnp2cnJycmpmZmpiXl5F8cmdxXl1QRj9BRD9KT0JCRjhDRT4+OTg7Nzc0ODQ1OTo6Ozk3OTo8Ozo8PT48PDo2NzY5OD4/QT47Pz49PDg6PkFAQUE/P0FCQERBPjo4PkE8U5ycm5uampycnaGio6KjoqSmp6alpaampqSjo7KysK2rp6amp6alpqiln6iop6qnoXmEXFFST0xcnKCAYpmgnp2clZOVlpeZmp2dnqGmpqampKOioqanp6ajpaampaWmp6amop2cnqGfl5GRkJSXm52YlpaWmJuZmpqampqZl5iam6Ghn56fnpybnJ6goJ6dn56fn6Cio6SjoqCfnp2ZlpeXl5iYmZubnqKioqKioqGio6WlpKOio6SioaGhoqOkpKSko6SkpKSioqKhoqGgn5+gnp2enp2dnZ2dnp6em5mYl5WTk5SUk5KQj5GSkZKSkZKTlJaXl5iYmZqampyenZ2dnJubmpiYmpmXlZaNempmamBiTkY+P0A9SkVAQ0A7QEE8Ozs5Ojc2NTg0Njc4OT04ODs6Oz87Ojs8Ojk6Nzc2ODs7Oz08Ojo8PTw3Oz5DQkRDPz1BQ0FEQT88OkBCO1eZmJqamZmam5ucnp2foqKhoqSlpKSlpqSioJ6op6alpqWlpaemp6ampqakpaanqKehqXJOUU1KVJahenKanJyenJeVlJWWmJiXl5qeoqKhoqOkpKOjpaalpaanpqSlpqalpaOgoKGhn5mSkI+WmpmenJaXl5eZm5ycnJqamZeZm5uen52cnZyZmZqcnZydnp6fn5+hoaCgoaKgn56bl5WVlZeanZ6fn6GhoqKio6OhoaCgoJ2cnaGioqOkpKOioaSlpKOko6SjoqKioqKhoKGfn52cnZ2cnJ2dnJ2enpqXlpaVlJOTkpKSkpCRkpKSkpGSlJWWl5iYmJiam5ycnJycnJ2cm5mYmZiWlJWXi3hsY2RiZFFHQT1DO0tIRDo7Ozw+OTo6OTo3Mzc5NTo4ODg8OTg7OT09Ozo7Ojk8PDc2NDc/PDo9Ozw/Pjw7ODxBQ0FDQkI+P0NAQkFAOj9APztZmZiampqam5ubm5ydoKGhoaGhoqKioqKhn5+dpKWmpqenpaWmp6ampqWkpKalpKSkpaaGUFJQT0+PmHB6mpubnJ6cnJycm5ubmZiYm56dnp6foKOkoqGhoqKio6SkpaalpKOjoaGhnpyalZOUmJuam56amJiYmJqcnpyam5iWmZybnJycnJydmpqbnJ2dnp6dnp6fn52cnJyhoaCblpWVlZacoKGgn5+hoKKjoqOhnZuZlpaWlpicnqCip6ikoaCgoqOjoqKioKCgoJ+fn5+gnp2cm5ucnZydnJmanJuWk5KSkpKUk5KSkpKSkpOSkpKRkpSVlpeYmJiYmZqcm5qbm5ucnJqZmJiXlZWWl4d3ZGdoZGJNQ0U8RDlJSkU5Ojs9PTo6ODg6NjQ3OTU8OTY4OTc5PDs7PDo6PDs6PDw4Nzg3Pj07Pj46Qj86Ojo/QURCQ0FBQD9EQUFAPjpAPj06W5qYmZqbmpubm5uen6CgoaKioKCgn5+enp2dnKWkpaanpqWlpqakoqKio6Oko6Kjo6KnllRYVVJOZ21rgZ6am5udn6Cgn56enp6dnJ2dnJ6enp+goaCfn6CgoKGio6Ojo6OjoqGgnpuZmZiZmZmamZienpiYmZmam5qWlZeWlZicnJ2cm52dnpybnJ2cnZ6bmJqeoaGdm5udoKKhmpWVlpaZoKKgnZueoKGjop+em5eXlJKSlJeYmZ2goqenpaGgn56goaGioaCfnp2cnJubnJubmpqZmpydnJmXmZaVk5GQkJCPkZKSkpKSkZKTk5OTk5OTlJWWlpeXl5manJubnJucnJqamZeXlpaVlZSEcmZsYmRbREJMPT84RktCPEA+Pj05Ozk6PTg1ODg2Ozg1Njo4PDw7Ozw8Ozk8Oj09OTU4Nzw5PD88OkE/Ojo6QEBDQkRBQ0A/Q0FAPj08QD09Ol+al5mamJeYmpycn5+foaGhoJ+fn56foKCenZ2lpKSko6OioqOjoZ+foaGipKOio6SiradXXl1UV19ua42dmpqbnJ6dm5ucnZ+enZycnJydnZ+goKChoaGgoKGgoKGioaGioZ+enJqampqbnJqZmpuZnJ6ZlpaWl5eTjo6QlJabnJuam5udn52cnJycnJ6dlpSZnJ+in5ycnZ+hoJuXl5mZmpycnJubnZ6fnZqXlpaWlJOTlJiampqfoKGmpqWgn56fnqChoaCenJubnJybm5ybm5qZmJmZmZmXl5iVlJKQkJCQj5CSkpKSkZGTk5aYl5STkpSVlJWWlZaZmZmam52cnJyampmXlpaWlpaQgG9vZV5gV0BKSDg/N0lFP0VBPD07Ojo8Ozs3NTs4Njs3NDY6Oj47Oj0+Pj07Ozs+Ozo4Ojk5NkBBPTo8PTo6OT9BQ0JERUM+P0FBPz8+Pj89PDtgl5WXl5aVl5mbnqGhoKGioqCenp6enqCgn52bpaWjpKSioKCfoJ+dnZ+hoqOjo6OkobCjXWVkYGFua4GenJubm5ubmZianJ2enJubm5ycnJ6ipKGeoKGhoqKhoKCgoaGgn5+enJqZmpubm5ybmp2dm5manJiXlZWWkY6Nj5KYnZycm5ycnqCdnJucnJyempWVm56foZ+dnJyenp2cmpqampqampqbm5qXl5aTkpWVlpWTlZaam5qanZ6foqWjnp6fn5+en5+enZ6fnZycm5qcmpqbmpiZmJiYmJiYlZSTkZCRkJCQkZKTk5CRk5SYmZiVk5SVlZWWlZaXmZmXmZqenpyamJiXl5aWl5eYjX1ubV9lVlRFSzw3PjdSRUM+QkE4Ozw7OTg6ODY7Nzc6Njc5Oj0+Ojw8PT49PD06Pz06ODw9OTtAPj4/PT45ODs/QkNAQ0VDPT9DQj5AQD5APTw8YZWSlJWWlpeanJ6goKCgoaCgnp6enp6gn56em6WlpKOioJ+fnp2dm5mbnJydnp+gn56rmGNpbW5pZm2enZybm5ybmpmZmZqam5ucm5uam5ygo6SgnZ6en6CgoKCgn6ChoKCfnpuamZqam5ubm5ufnpyZmJqamJiYmJKOj5OXnJ2bnJ2cnJycnZycnp6dnpqVl5ygoaGfnp2eoJ+cnJuampqbmpqYmpmVk5OTkpOWl5eVlJiYmZucnJydoJ+gnp6enp+fn56en6KjpKKgnp6cm5qampuZmJmZmJeXlpWUlJORkZCQkZKTk5OSkpOUmJmYlpWUlZaWlpaWl5iYmJiXmZqamZeXl5aXlpeWl4l4dmddX1dURUU5OTs8WT5AOEI/OTs7Pjk4Ozg6Ozc5OjU4OTs9PDk9Oz0+PD0+Oz8/Ozk+PDw+Pz5AQUE9ODc7QkNFP0FFQz1AREJBQEQ7Oz47PGKWk5SUlpWUlpiYmZubnJycnZ2cnJ2en56dnJqkpKSkoJ+enpybm5qZmJiYmZucnZ6cpolla3R4bVuFop2dnJydnJqbmpqampydnZ2bmpuboKKinpucnZybnJ2enp2dnZ2fnpyampucnZycm5ycnp6cm5qanZqam5yVkZOXm52dnJ2fnZycnJycnZ6fnp+cl5idn6GhoJ6cn6CfnJubm5qbmpmZmZmZl5WWlZaYl5eXlpaYmZuenp2dn6GhoJ+fnp6fn5+dn5+hoqKhoZ+fn5yZm5qcnZuampmXlpaYl5eXlpWTkpGTlJSTlJSUlJaZmJaVlZeZmJeYl5eXl5eYl5iXl5eXlpaYl5eVl5eDeHZfW11eUT1GOjk4P1VDQTtDQzo8Pz86Ojk3Ozg4ODc0ODk8Ozw4Ozs8PTo9Pjo/QT06PTw+PkA/PUBBPjk2PERDRUBBRUU9PkVERD9COzo8OTpkl5SVlZaUlJSUlJWXmJiamZqcnJydnp6dnZybo6Oko6CenJuamZqZmJiYmZiam5ubm6WJa3F2em9lmp+enp2dnJybnZ6dnJ2enp2dnJydm5ygoJuampubmpudnJqampucnJuZmZycnJ2dnZ2dnZ2dnpybmp+fm5ydm5mZmZudnZ2dn52dn5+dnJydn5+fn5uanZ+goJ+dnJ6gnpubm5ubm5yampuamZudnJqZmJeYmJiYmp2foKCgoJ+hoaGgoJ+en5+fnp6foaKhoJ+enp+enJqam5ubmpqZlpaXmZmYmJiWlJOUlJWVk5OVlZSVlpWVlZSYmZuamZaWl5WWmJiWl5OUlJGRk4yRkJOWfXhqYWJiXFA8QDw2OENWSERCOjg7Oj47Nzc5Nj06OTk2NDc6Ozw9OTo6Oz87PT08QD47Oz46PT89PkBBP0A8NztBQ0U/P0REPj9EREM+Qj07PDs6Z5aTk5OTk5OTlJSVlpeWl5aWl5mbm5ybm5uamaOjoqCfnpuamJeYl5eXmJmYmZybm5qkgGpqb3lzcZegnp2dnJydnp6enp+enp2cnJydnp2bnJuampqam5ubmZiYmpqamZmZmJqdm5ydnZ2dnJ2cnZ2cm5qdn5ucnJubnJubnZ2dnJydnp2enZydnZ2cnJ2dm5uenp6dnZybnpubnJycnJydnJubmpmbmpmYmZmYmpmZmpyfn5+jpaKfoaKioaGfnqCgn5+fnqCioaGhn5+fn52ZmpudnZqZmJWWl5aVlZaTkpOUk5STkJCSk5GUkY+OkJGOlZabmJWYlJmXlJiRjJCPk5yTkoyFjIeDhndxZ2pkW1xRQT44NkJHYEJFR0A+Ozw7Ojg4NjU8ODo4MzQ6Njk9PTk5Ojs9Ozw6PD48Oj5AOj5APjw/QD8+PDg6Q0FEPz5CRD8+Q0VCPUJAPDw8OmeYk5KSk5OSk5SVlJWXl5aWlZaXmZmZmpqampqkoqCfn52bmpmYmJiXl5iZmJmcnZ2cqH1nZXN7enOJop+enp2dnp6enZ2enZ6enp2dnZ6cm5ybmpubm5ucm5iYmJmZmJiZmZmbnZycnZ6enp6enp6dnZybm52bnJybnJ2dnZ2dnJ2dnp+fn52cnZ2dm5qbnJmZnJ2dnZ2dm5uanJ2dnJycnp2dnZybmZeVlZeXmJqam5ubnZ6foqOhoKGhnJucm5ubnZqcmZycn6CfnZiZmZmUkpKUl5SPj4+OkYyNiYuQi4mLjpGRj4mQmJiQkoyNi5KQj5iYoqiqpqWlrKOmoZqep6eyqKKVo6Cfl39wcWlsXFtcTUY8NzdHR1g+SE5URjk+Ojg5ODc1PTk4NzMzOTY6Pjw6Nzo8Ozo6Ojo8PDs/PjtAQD47PT5BPDw2N0A+QkA+QUY+PEFEQT1DQj49PDlmmJSTk5OTkpOUlZOVl5iYmJaXl5iZmZqampqaoqGfnp2cm5mYmJiYmJiYmZmZm5ybnKx/am16f3lxh6Genp2cnZ6enp6enp6dnp2dnZ6enJubnJubm5ubm5uZmJiYmJiYmJmZnJ2dnJyenp6enp+fnp6dnp6dnJydnJ2dnZ6fnZ2fn56goJ+enZ2dnZybnJ2em5qbm52enZ6dm5ubnJ2cnp2cnZqYl5SRjo+QkJGVmJSWlJiZmpudmJuYlY2Mjo6TkpKRj4mQjpGRjo+Ki42NjYiIi4+Lg42NkY+MkI2Qk5WVnJihoJySn6SipKmam5eanKOprb3Bwbq8uL26ucC8ubq3uru7tL2zwbV/bnVmZ1peWUxJRTo7TElTPFZSSUM6QTo7Ozc3NTo6OjgyNTY4Oz08OTk7Ozw5Nzo4Ojw6PT85PD8+PDw9QTs5NTg8O0A/QT9EPTxBQkA8REM9PT06YZOTkZCUlJOTk5OTlJeYlpeZmJmYmZqbmpqamp+gnp+fnJqZmpqampmYl5iZmZmZmZmphXB1e4B3b4mhnp6enp6fn56en56fn56dnp6fnp2dnJ2cm5ubm5ubmpiYmJiZmZiam52cnJ2dnp2dnp6goJ+enZ6hoJ6dnp2enZ6fn56en6CenZ6enJydnZ2cm5qYnJuVmJqamJiYmJmSjJCXlKCXk4+MjYqKiImMiJORh5CPjYqKkJCLjoqMi4+IiImJjpGOjYaFiYaKhoWLiI+SkJCNkJKXlpKamJ2TlJ6kpqaqq7Gsr6+rpquqsbm5tbS0rqyvtMDIxcXBvsbDxMTDurW+t7a0s7C2tb6qcHRyXGZfXV1JRj8/RUtMVklcTEQ/PUI6Qzk5Nzc7OTk3MTc5ODo+ODg6PDw7OTc5OTs9Oj4/OT5BPDs+PD46OTY5PDpBPkNBQT08QkBAPkJEPj8+OVyHhIOHi42KiYaFgYqMkZOVmJiHlZaWkpiampmenZ+gn52ampubm5ycm5iWmJmXl5ibqo56dXZ7f3mCoJ+fnp+goKCfn5+foKCfnp2dnp+enp2dnJqam5ubm5uYmJiXl5iZm5ucnJydnp6enpybm52dnZycoaGfnZ6dnZ2dnp2dnJiWlpaYlZWSlpmWk5GKjI+PjI+NkIuLj4+WiYiEi5GZjn2Fi42PjYyHioyQm4yRj4+Lio6TjIyNjIiSi4yFiYyPhouIh42KhYyEj4qXkJOYmpWbnKOqoaKknKKrsbe0ubWxs62vsrKlp7O6sbq6vLa3tsDDw729vLa/urq8wbW4wL60r66mqa+3mm58Z1tjWl1fSEU+QUtJU1hZXkFGOTk9OUY/Pzo3Ozs7NjM6Nzo5Pjg6Ojw9OTk4Ozk7PDo+PTtAQDs8QjxAOjg0Nzw7Qj9BQj4+O0NEREBDQz0+PjlhmZWLkYWNj5aSiHl9e3+Fi4OKgoqJhmuAeJCLlpqRnZ2UlJGTlpeampiWk42Sk5KQm5uIdndzcX1/cpGgnZubm5yenZ2eoKGgm5uWlpucmpybnJuYmZqYmJmampqWi5CTlpmYlZiYlpucl5WSkY2SkZCUk5KXm5mYm5ePjpCLjo2Ch4uLi4qLiI2RjIeHhoqIiZGKh4yEhYqNi4qNhI+UkIyDkJOUmZWQi5OTkZWRlpWOj5GMlI2Oj4qIj4ePhoeJiYmNiomJioWNh46JmJKUmpuXmKChp6Cko5qqqbO2sbWwqKmiqK6tn6qvsK21ubi8wr/BxLixtbCutrOwuL68ury+urOzp7G3wpB1gGNiXlpXUk1IRkVQSVlXX1tDUDpCQz1HRj84Nzo6NzU1OTc8OTw5ODo9Pjo6Nzs7Pjs7PTs9P0E7Pz48Pzo4NDM3OkFBQEI+PjpDREM/QUM7PT45Z6mloqKZn6CippeUiI2CiIJ1h4iKiIp7e3Z7enmPeoiSfn18en6CkYWBgH1zfH99fISHfnRweHZzfHaBj4iIiYeIioyMkZicl4iOhIuNi4iNkI+Pi5GPi4yOj5CQjouFhYeLjIyHiIuOi4eMhYaBjYuGiop/iYqGiJiRiIOIg4KFfIuLjIaJi4iKkIyIi42PjI+Wh4mLio6NjY2Wk5OdnJyalpycm56bmpuYnZeTkZWWkJKRi4+LlpSMjYqDi4SEiYyQkIqOio2LipGJjZOTk5SVk5KcmZ6Xn6CfpaKvsamupKSfmKStpqa4t6ysu729wsPAv7+vpa2wsLS3uLO0uLa0ta6stK+4tLaBeXpjZmBeVlBRQUVMT0lcXl9UR0dCS0xCREA9ODg7OTU3Nzk3Ozc9PDk9Pj05Ozg6O0A8Oj06PkJBOD88Oj84NjQyOTtCQD9CPj04QEI/PkBEO0A+N2CloJqXnaGaoaCPl5efl5WCjaCfo6GdmpKOjIxycXBvdnFucG1ucHZub29waHBxcHR+c3FycXd7cnl2d3Jyd3Z6e3l8fXt/iIGEi3+PkYaNi4uGiouLiYaEgYaCgIKJkYOAg4x/ho+LiYWAh32AgZKQhoSEho2DhIyPj4+IjY+Hi4iRkJWRjpCKk5eOj5WYp6SfnZWYlpaln5udq6aqt7W4srGnr6qnpqGfmp2WkpWVkYqPjImTjZuVjYuLhoaJjJWQkJCLmZKVlZSbkJiTlIyNkYyWl5WilZ6mqauno6OqsJucpp+mq6G0vb6zs7+5u7u6uby9rqiusa6wuLyztLGxqrCpqLGxsqild3J0X2hhYFRWUUlKSFZNXl5eVExKRVFKRUdDPTo5OTc0ODY4Mzg4PTo9PD47OTs4Ojs/PDw+OT9DPzg7Ojg8Nzc2Mzc5RT4/Qz89N0BAQT0/RDw+PThUj4yGh4eUjJWZl5yWmZaNlZyWlZydoKCdmpiWeHFubXJ4cXFsbnJwa3FvcG1yc3t1dnd5fnVxeHZ0d3tybn98gX15eH1/eYOGg4WCg5CLkIuLi42Pi4mJhYKBfX9zfYiAfpyQhIWFiYuPinp9fYaOjYqGjZSRi5CXj5SXkpihlp6XlZunpp+goKawq6GjpbW0sqqmqq+isba5vcK7ucO+vLi9uLWxrLCspZuSk5mfm5SPk5WOmp2doJqfn5edo6qsoZ+em62hp6qwqaampJiRkZWUo6SirKSss7Szs6i3tru4sLKvra2yt7a6srW6s7e5u7i8urayr6yxsbKztLOxsa2us7Gzs6yhl3Zxc19jXlJRVE1PSUdYT1pcZFROR1VPRURKRD44Ojg3NTg4ODU5Nzo6PTw/Ojg8ODk5PTs9PTpCPj84Ozo5Ojk4NjI1N0I+P0RAQDY+P0I/PEM8PT46Tn98go6MjJOTl5eaj5SWjZaRkZSXk5qanqGdnHJvcnFxcXFxcG5zcW91dHJxdneAdXd8eYV+d3t8eX1/fICJiYmDfXp/h4GIiYGAgIGGiIGGi4aIhYSIiImEf4J/enx8fX6SkH+IeIGFi4qDhIWKj4yNkZmdlJSUoJqan6Ktsa2ppKWtr6ysrLWuvrmtrqm1sLexq7G2rK+9wsLAvrq8trKutraxtK66u7OurKepp6unoqmtoKmooq+wuLSxvLq6urK0ta+8tLezt7e7t7mtrbCprLW5sbeytLe2sLu7vLu6ury1vLi0wbWsqqqrtLG3uLm1trSzsKymrrCqq7Cxq6yusLKxtK6qo5N4dnJlZ1tMUlBGTUhTV1JlXmdUUExcUUhMUkNBOTk3OTU4ODY2Ozc5Ojs6Pjk4Ozo6Ojw8Pj08RD45Njs7ODg+OTUxNTZCRkREP0A3Pj5DPjpBP0BAO0t/gomXmJSdlpabmIuSlo6XkZGVl5SZl5+bmZx8dHV2dXl1c3RudnJzdHV2d319gX56gXyDfoJ/fYB/hIKFj52RiYF/go+Xjo6HgoCBiIuFfoqQi3+HjYyLioeSioeGjZGTkZGEh319g4iMjouOiomQj46PlJSYkZWbmp2dqK6yr6+1tLOtsrW4sLy1tbGqsKqztbS7t7SztrS1r7i4t62noqassLCvtre3vrW5vLOysa61u7C0r6+yu7axuMC9tLS0s7izvLq2tLrAvbm6ubq+ubm5vrWysa+yr6q1tLGzsbSzrri4tb+vpKaoo6ussa+zrq6wsKytq6qroqKmqKKnrauqpaynoqeYeHlxZmVZT09NSVJNV0xPX15cTlVUYlFEVE07Pzk8ODk1Nzc1Nzk1Ojo6OTs4Ojw8Oj08Pj4/P0I9ODY6Ojk6QDs1MjY2QUZDQz4/Nz49Q0I5P0I/PjtLjpGTmJmVmZGTopiTkpKLk4uOkI+Vl5ablZSbhoJ9enh2dHRzdH53end2gIKDhouMhISFioaQiYeRk5aRjZaalY+IjI+emJaVkpCTl5qamJCdoJ2Tl5qgmZ2bo6CVkJugpKOak42IiIuJkZGOkY6LmJqPj4yUmpecnJufnKSstLm6vK+2tLi0tLK3uLmzq6+qqKy1srK1rrGrrqa3s7OxpaGotbCvrayrtbqyu7q6tLK3ur67ubG4sLmtqLK4u66ttLS3tbu2trm5vLe0r7G0t7a5s7e1pq2pq6ior6yprq2up6KxtLG0q6aop6Cjq66oqq6orLKwr6+pqKGeoaGjpqOgopqlo56ol3J3bmdiVUtUT09KQ1BLX2JYWlFcU19NSFFJQUA5Ojg2Njc3NTg5NDs5Ozk8Nzs+Ojg8PD0/QkBBPTs2OTk5Oj87NjM3OD5GQkJAQjk+PUBDPkBGQj44R5OWkZWTkpSQkZ+ZnZmVkI+Sko6Mk5aWko6RlZGSkIaBeXJzdXuBhI6HhZGTkpicnJiVkJWYo5yaoaeqqZ+clpeVnaKioZyZnpmlqKyvramnqqmop6GlqKirqamvoZufoaOjoJqfoJyUjZiUmKCgoaSem5qkp6Spq66spaOoq6+xtK6qrK6zr6ystLO0ua6urayqrLKwsK2wqKqmsrS0uK6qtrqwr6qurLC3s7i0t7W0u7y4tbWxtauyrKiys7uvrbGytLa1sbG0s7OvrKuvs7a0sayutKqqpqWnrauoqKupqqifqbOwqqeppaOio7CtqaatpairrayppaSioKWipaOYmZyVnqKippdudWVnZFZPWEtLSktTVHBiWWRXX1tcUlpQTEM8ODk6Njk4NzQ3NzQ4Ojw6PDg6PTk3PDw7PkM/QT47OTo5Ojs+PTg0NThBREVEQkM5PjtAPkI/R0Q+N0KSm5SVlZaVj46Wl5qZlZGKk5SSjo+SkYqKiY2Ul5qTjYmCho6VkZSfmpuin5+jnqGhn5ijpKelpaapqa2rqaKmpKilpKGfnqOjra2srairrq6qqqukoaKlqaenqaijopybm6SgpaijoJidmZ+hoqmnoKKirqyrqqetrqilpKmpqammo6iqqaekp66wr7Ovq7Crqq+yr7Czua+rqLCxrrCyubO0r62vtbCss7GurLW1tLSzs7CvrKyqrKusr7G0s7CwrrCwsKyqrauqq6alrrCysKumqbCvqaOkqaunqKaopquwq6mvqaaoqaalo6iwraqpqKKpo6WnpKGhoKKloZ2el5aYlJugpKmUbnNeamlfVVpOUk5QT1JkXGVjW11ZXFBZT0tAPDs5Ojc6ODczNTMzODo9OTo4OTo5Oj08PEBEPkA9OTo8PDw+Oz45NTo8QkFFQUNBOT47P0BEQENCQDdAkZ6YlJeZlpGHi5SSl5GIg4mLk4+OkI2Hh4SFlZmWmJeZlpqeop2anKKkoaCdn5qfoKGgpqGgoKCjo6KlqKmrramqpqOmpaCloKaopqWnqKapqKOnppmcpKWioaChoaCcmJmfoKGkpKKenpagm5qioqChn6CiqKCcn6GloaCmo6KfpKGspp6foaGkrKqnrKivq6e0sa6ur7WyrKqwq6mtrbWwrq6srreup6yqpKivsq+sq7Kvqqqpq6utqa6urrGxraqtqaunp6uoqauinaapqKilqKisqKilpKWop6iopqmsr6+oq6mhoqKlo6Opq6ymqKWjqKKhoKSdnZ+hoZ2bnZ+amZWcnKOqlG9zZm5yZF1dUFVPV09eZGRsaGJiWlpSVE9NQTo9Ojo4Ozk1MTYzMjg4Ozk5OTk7OTk8Oz0/Qz5APTk7Ojs8QD0+PDk5PEFBRUFGQTo9Oz9BQUJBRUI4PYqWlJOYmpaPiISNjpGSjIiIiI+JiZCRjoqKiJubmZygpaKlnqKjoZqeoZyanZ6bnKOop6ugoKOYoJ2XnKGjo6WjoqKkrKilqaCepqmnq6mkn6Kgoqahpq2mpp2fn5+fn5manJyhoKGkn6GbnZqcoJ6hn56eoKOZlpqYo6KipJ+ZnKGhoqCbmp6goaSgnaejqrGorqusqaSqqquorKalrKqws6+rq6mwq6appaWoq6ynpqevq6Wnq6upq6irqqqrrailqKOmpaesqayoopykoaOmo6qpqKano6SnqKanqKepqKupoaKoo5yepqWjqKino6WlpqmgpJ6inpeYnZ+doqKlnpiUlZ6go5d1d2t2d2FfXFVZUVVWW2Necl9oX2NTUVlUSD48PTg7OTo4NTM3MzM0Nzo4OT05Ozo5PDxBQEM9PT44Ozw9PEA/Qz86ODo+P0NAREE6Oz48QD9DQ0VDOTyCmJmenZ2alZKKiZGRl5GQh4SJgoGNj4+Sj42cnZ+hpKmlqaeorK2moqKfmKSmo6Stsa6yp6asm56em5qjp6Cfo5+foq+rqqyoqKuwqaipqKGfoKeprbCyr6yjoqahqaWepKOipqClpKKlo56doJ6fpaKinp+imJWemp6fpKGblZigoZ2enJudnZuZmZWen6Oonp2iqKGaoaOmoqSoqaqoq7CxqKWlp6eopKWpqaqnoqWmqKadnqWloqClpaOlpqCjpaOjpaelqamqpKekpqKmp6SrqaenpKGlqKynpqWlo6OopJWdo5+bnaCjqaeopqGjo6mooKiioJyVkZqfoKGmopuXkpCamqCVfHdvfXlmW1tgX1pcVlxoZG9jbmloYl5QUEA/Ozo4OTg8OzYzNDMzMzc5OTs8OTs7OT49QkBAPTs9ODw9QD08PENBPjo4PT9EP0M+Ojk/PEI/P0FEQjk6gJ6kp6Kem5+gmY+ZnaCWloqGj4iEi4qTl5SRo6Wnqq6trLOys7S4t62pqqevtLKxqq6usbKusa2lq7OssbGpq6+rq6y2sLSwq7GysaOfoqqpp663trS0trOvrKuuq7awqbKxra6npp6io6ObnZyXoqiloZ+eo5ueoZqWnaScm5aZoqefoJ+joJuUlpmWl5qfoJmVnqKZmJ2dpZ2gpKeqqaiqraylqaSlqaeqqaqsp6SkpKOimZmhnpqaoaCfpaWYnqSmpKqooqelpaGqp6mnp6ejqKWmpaGkqKesoqekoaalpaOVl52Ym5mVo6elpaSfnZ2lo6Kqo5+amZiXnJyaoaGakJOTl5ibjX93cnZ4aWJbX15cYllgZG5ta25hX2RgUE9BQDs7OTs4Ojk2MTQzNjQ3Nzc6PTo8Ozk9PUI/Pj89PDo/OTo7PD5BRUA9OTtAQT5DPDs5PzlAQEBAQkM7OXuao6OcoJ2dop2Zn6KioJibmJaYkpSQm5qWl7S0rrW4s7S4tre0uLm3tbm4ub28uKqLnLK4vLS9urW7uru4s7q/uLe5u7G3r6iusq2inJ+qsri8vL27ur+0r7GztbS3t6+1tLWysKikop+gl5Wal6SqpqahpKOkq6WlmKGko52goaKooaOgpaGck5mYmJmco56cmpudl5uZlqWam5+hqKmpqKuvr66pqKmrrKytq6irp6WjoJyfo6Ojn6Cipammmpyip6Spn6GjoqKgpaanpqSooJ+ipKGjoqiop6OloKGopqalo5mbmJuTj6GknqKfmJiVoJuhpaCfm5udnJuamZugmo2YmZiTkYaAdnh5eGNbUllUX19hbGh1a3BnaWliWVNMQDw6Ozg5Nzk3NTU2Mjg1Njc3Ojw7Ozs7QD4/QD0+Pjk6PDk2Nz47QkZCPDg7P0NDRDw+OT43PkFCP0ZDOzhwkpqblJ6bm52Vl52doqajopaXnpaXl6GblJi+t7G4uba3t7i7l5S2vbu9vcDFtaK7mKC3v7+6wcm0nbu2sra/xcGooLazurGqrrSxsLG0tLa8vL68vL3Guri3ur20r7Wxsbq4t7Kzsqqmpp+YpKSnqKSupKurtbWus6CnqqynqqmlpqCnoKGmoZOWmJ2foqSjnZ6coaChnZekmpmdoKaqqqqtrq2tsLGrrK2sqamrrqimpaalpqSkpqaeo6eppKGcoKKjpqCio5+jpJ2foqWgpJyboZ6fo6GhpaSlqaOkpaKkp6ehn52elpOcoJiZko+MjJeWn5uWnJqdnJqTlpSUmJOQmp2YiouHgIB8gnhhXllTYWhgZnNvc2l0ZGlkYltMSz46ODg5ODg5NzM0NTI1NDY2OTw8Oz08P0E/QEA9Pj44OTs4Njc/OUJFQzw7PD5DREM9QDs9Nz1DQ0BFQjw3Z4yRk4qalZiblZWYm6Knq6aVl5iQlZmhnpeXvrWztLu6ubi5woeYt6u4u8DCxbOjw6e4s72/tMTHvbS7uL62wMTErqCworW2tb2+wcPGw8O5vb/AwL2/xL28ur2+tKeqmLHAvbi1ucCzr6+qqqitp6ekr6eqtLyxtLWor7Gwr6yqoqajrJ+fpquXmqifpaWfoJydoKuwsKyiq5yYm6Cor7Kys6uorre1sq2tqaalqKulpaStqaShn6Cnnp6mqKmmnp+anqGlpqmcnaObl6KmmpuanZ+cmqGcmZ2eoKijn6GfnaWioKOioZSZmpmTj4qLhI2Qk5uPjpiVm5eYkJORkomNl5iYk4uKi32AgIVwYGFeXmpiYm53dXZubFtiUVVcTUc7PDk3OTc5Ojc0NDQxNDM3Njg8Ozs8PEBAPUA/Pj8+Ojo5Ojc6Pz5FRUU8PT1AQkJCQUI7PDhAQ0NARD87NV+MjIaFlouUlZeYl5ifpqellpWWkZebn5ual7mxtrO5vLy5urWqsryxvsG0vMe5uLuuv6fGw7/KxsnIxcXJvMLHx7+xsae8vL7FxMbJx8XGu8TAxcbAua+9vMC+vrOrqoyzu760tbfCuq2vsLWqq6aqo62kp7G2q7WyrbOtqK6vp6awr7Ktqq+zpKu1qaeopKCgnqmyuL61tbWqqaausre4t7apq7i8ubexr66noqOop6SfqKOfnqCZoZydoqSnp6GelJuaoKGlnqChnpajnZSQlpiboZqflpORlpSin5qenJudoZ6kn56VnJiPkpOPjImTkJefiZCWkZuUmJGRlZaDjJWXlpKLjIh8f4N/amZoYWtsZm51cXJ1cWZeX1xSSUU/Ojo6Nzg0ODw3NjU0MjMzNjU3PDo7PDs9QD4/QD48PTk5OTs6PDw+QkRFPj49QENDQkREOzo4QUJCQUNAOTJbk4iEjZGKi5GRlZCSmp2fnJOSmJSdnZqXmpW2sbm1tb6+tri1uLO8vMTEusPHwb+0s8XFxr/CzcfLzsvLx8HDxsfIysXExcO7vLzBxcHFxb/DwsbFwLGTvrq/w8K2trqptLO0qauzu7uxn5uxr6ykrK60p6qpqKqtrKmlpZ6pr6uyu7q4u7e5t7O5uLOurLO0qrC1ub3Bur6+vL60urm4u7qysbS8u7q7s7Oyp6Smq6uioaCdmpudmpyXmpuenJygnZaclpuZnZ6io52UnJCNiY6OkZ6bnJWNh5KLmJiWmpybmJybnp6cmp6UjpiYmpSRmZeeoZWYmpKXlJWRlJqYk4+TnZaSi5F+enx/dGtrbmRvbGhxeG95aWlhXGdhUUZEQTw5OTc2NDQ6ODQ2NTMzMjY1Nj05OTs7PT47Pj49Oz05OTs7Oz89QUNBQkFAPEBDQ0NFQjs4OUQ/P0BCPzsyV5uQkZCQh4WSjo2IjZCTlZGPjZSUm5STlpqRs7e4uLi+u7C1sri2tbbAw8G+w8LAvru+u7u8xMzEzNDLxsa/xcfLyNTLysjGv7u7vsS+xcjGxsTEw7i0wLe0vMHCucK3t7/Au66lrre8t62co7ewpq20tayupaWjqKSgoKWZqrOyvsG+urm6uLW0srG0tLO6wL7Av769u7u9vsDCt7a3tru7sru+ubi3u7a3tKyoqamrpqijnpOampyYkZKZl5GRmJqXnpiWk5acm5+elJOJiX6GiIuWlJiZkYmVkZeWlZmbmpaYl5idnpyhmJWZmZyYl5ybn56jnJ6WmJeTl5yZmZyUlp2UlpOJdnl6e3Zua2hndVpmcndzeGZnXWRbUlhJRj87Nzg4NzYxNjk3NDQzMzM2NDY7ODo8Oz08OD0+PDo7PDs9Ozs+PkRBQURCQEBBQkNDREM9OTlCQD8/QD89MkyWmpaSk4yKmJCKi4yOkpKKiIaNkJiKj5CUl7O7tba/vb2xtrjBvby0uL/Bsbi3vsHFvbu8wsbJv8jOyMHEwcfKysbKxczIzcbIxb/DwMvNz8nGw8PEwsS+uL7Bw8DEvsHPz87Gq6+2tLWroKe0s66ruLWzq6mjoq2prKatn6y1tL/Cvrm4vbawrausr7W0ur7Fv7u8urO5u7i5ubWtsLS9u7G/vLiytrmzubu0ra2orKyqqaeXnpualY2MmJSTi5WWlJyZl5WWmZKYn5mQiop+iYqKkY6Vl5OUn5mWkJSZmJmWmJOUm6GeoZiYmp2ZmZaenpibopqdnJuYmpuZlpeXlpyZlJyYfoB4eXV1ZWVpamhdam9teHdjYmBgXlhXRkU4Ojg6OTc5NDQ5NzY2NTEyMzM0Ozo9Pzs9PTo6PTs8Pjo7Pz48QkBDQkJFQj0/Q0NDQ0RFQDk6QkFBQj5CQTVCkJeUlZmSj5qQjpKRjZSVi4qHjI2UiImPkpq2u7S8xsHEwr3BxcLAtLO9v6ywr7rDysPCvs3IxbfByMW/wcLIy8rCwsTJzM3Pz8zDx8bIyMjHycfFycfIx7/Fx8TEx8jK0s/SzLy4trS4uMG+vrq9ury6vKytpqm7urm3wLK1uLLAxrq3t8Gzsa2tqau1s7u2w7a2vbWxt762s7e4sLW2v7uwvbq0q7CxsbO8urOzrqutq62xnaOjoJqQjpiXlZCclpaYlpWSnJmTm5+clpGUjpWQiYyQlZOUm56YmZKSnJedlJmSk5aZmJ2VnJ6do5yVnZ+TnKKcnKCfnaOemJSVl5ebmpmgkH99cXRxb2JhZ3VnaWl0bXhsXWRbVWBZTEhDNjw5OTg4OjUzOjY2NDQxMzUyNTs6PD47Ozw9PDs8PTw7PD49P0E/RUFCQ0M+QEFARUVERUE7Nz5DQkI+Q0I4O4+akZaalJKUjZCUlI6VlI6Pi4yJk4uIkJObt8C6xsXEw8zCwcS9vrWvt7uvr7O6wMfFxMHMy8W2ucDCwsTHytHLwsPExsnFzdDOx8zJwsHGwcvLx8bMyc3FxsbDxsXJzdDNz8zHxMDDwsnNx8XBxMfBu760sbCwwb6/wca/vri3w8K6urbAvrWyrKmvsri+tMC0tLi0t7nEua+8vrm+v8K/tbq2q6qsrq+wt768trSura2utaSlqKimmpycnZyeopydmZOQkp2VmKCdmJiVmZmZl46MlH2QkJefmZmYk5GToI6Nko+VjpCUlaKdnKSem56elpyjoKGipKOkop6amZubnJ2enIN9cnx4cGdgamp2bGlldG5zYlxiVFdUU01HOjc7OTk3Nzo3NDg3ODQ1MjM0MjU7Ojk+Oj08Pz04Oz05OTk9PEBBQEVCQUJBQT9AP0RFREVAPDo+QkNCQENBOjSAoZeUmZiVkImUk5aTiZGMlJGOiJaKi5CXnMXLw8O8wMPHwbm9vbu4tre3rrK3uLzAwsDCx8bHurzAwsXHyMbSycHDxL+/vsTLyMrLyLy7yMfJzcjDyMnJxsXDwsHCx8fJysfMyMfIzcbLz8W3wMDAwLu7vbWzs7+/ub/DucC3u8G8uri7ub27srCvsKy5wri9ube1t7q9xb24xsjCwcLGwr28tamurrCwr7O6t7m2sK+tr7OppquprqannqSlo6OjoqCblZiekZecl5GRlZeZlZmRlJiSlYyYo5qcnp2FiZ+TfJKWlZKUlJennaCipJ+en56foaGkoqKjoaOinJ2fnqOhppl5enl/cm9mZWdjamRham1ubl5YXFZVTlBKRjk5Ozk3Njc3NjM3ODk1NjEzNTI3PDs8QDs/PDw6ODo8OTk4Pj1APz9GP0JBQz89QT5ARENDQTw5PENBQ0RBQDozbKKdlZedlo+PmJiZmIiSjZGVkI+Vjo6TlpbKy7u5urnBu7q3vsG8vLu5sa61uri4u8S6vsC+vru8wMXBxsK+xsG5u8O6uLm8vsHGwca6ucnJw8XEwMTBwsHEwcO+vcLAwMHCy8PGzMvFyNHCsL69uLq7vL63tLC5vrO8vrG5tbi7tryztbm2uba5t7GtusG6vMG/t77Ev8bDw8fHwrvAwr/Cv7iys7O1tLGut7S3tbSxrK2xp6Wlp7CtqJ+nq6ajqKWmpqCgn5SYmZSRkZWUl5OYl5qhnZ6hnKGdoaWglpSbkZeXmJqTnpmZqaSlpKWdoqCanqCkoqOcoqGjoJ6cnp6ppaiVfXuDeG5mYWRiYWJjY2piZmNaWVlcWVFORT07OTo7Nzc5OTY0OTk6NTMxNDUyNzo7OkA9Pzw8OTc3Ozo5Ojw+QD8+RDxCQURAPz49QkRCQkI+OjlCP0FCPT44NVmfnJiTmZaRlZiYmpeQkZCQk5GTlJKSkpSUxce4tbq5wrm5vMPFwri7ubGxtry6tbnAu7u5tre0tLW/ur3Aub26urS/uLW3s6+7vLfAt73Cv8G7v8G8u8W+u8HEwL6+uLzBwcu+vcnEwMDKwLHBv7u4u765tbe0uLy0vbi1tLCzvLG3tri/tr25vb65t7q+u7/Axb29y8PGw8TAw762ubq2v7i7v7y4trOyq7CwsrWzs66sq6emnqeurauiqKumpqqjp6iqo5+Ym52bmpicnJiXnJuhpZ2anqGhoKGmoJqbnJiboJ+dnJ+coKiho6SknaKfmqKgop+el6Shop+dmpieqKWhi3x5h31xY2BiYmdqZmZpZWldVlVTWU9TS0U4PzY7Ojc3OTs2NTo7PDYzMTM0MTc7OTg/PT47PDs3Njk5ODo7PUA/PkA9PT9CPjxAQUNDQT9DPTo2PEBBQDw9ODdJlJibj5OUkZWYlZGWkpWRkJGUlZSTkpKYlcHCwLq8ub62uL7EwMKxvbqytLO4vLW3vMC8vbS0sbC1t7W6wbi+uL+8vbe1t7CuuLa5v7vAv7fBvLvDtrrIuLa5u725ura7xcXKvbnFwL+8wb64xr3BwLzFuLa3tLi2tru7uLa0t7q1tLi8vbm/ucPAwLu5vLu+vcjEvcfEw7rAvb62sra4srm0usLCureysaysq62yr7Kur6ijpJ6rrKyqpKakpKiqoqemraihoaGmn6Oiop6bnKKfoKOdnJuhn6KgpKCem5eZn6GdnZ6eoaWkoaKioZ6ho5yinqCZnZijn52eoJqZoKKmnYR6g4B4cG1lZWZvaWVrZ1hYTktLS1JJTEhDOT44PTs2Ojs5Njc8ODk4NjA0MzE3OTk7Pz0+Ojw6ODg5PDg6Ozs7PD1BPj09Q0E8P0NDREA/Pzw6Nz5CREE/QDg4P4mYmoyMkI+Tl5WMkpCakpGXmJaUlJKQmpTDvsbBwby8uLi6v7a8scK2tLyxtLa4s7q9v728sq2vrLGwt7y2u7zAxLm3t7e1urm6u8C9w8C6xMK+x7i5uK23tbi6tLezu8XGy8G7xsDAv728v8nDxMW+xri1srK9uLi4vrq6uby6urS3u7q5v7zEwL+5uri/ubvFxr3Fw8Kyur27sa+2uLO3s7q+wLm2rLGrrqmqqa2qqq6mpKWnrq2ppaOio6GkpaWmoqato6Klo5+ho6Gcmpyhn6CloaCenZygnaWgnpeVmZ2fn52gn6KmpaCknpybn6Ofn5mcmZ2epJyWnKOcnqGcppZ+f4Z8a25wZ3Brc2VibV9cVEhLSkRKQkNHPzk7OD08Nzs7OTc4Ozc8PDYyNzUxNjk8PD08QTs8Ojs6OT45Ojs9PUA+RD89PkRAPz9BRkQ/Pzw9OTc/QUNCQEI5Ojl3nJiLh4uQkpOWjY+TmpOQnZiSkY6QjpiSvbfHvsO+vbu+vL22uri9ure9s7OwuLi1uby8wLeqraSusLe7s72/u8S3tri2t7+/xLzCxcXHx8rJxs/CwbiutbW8vri7sr7ExMrFwcnDwr+/vr3HzMfHxMe9tbW2wb26u7/CusDCv7y2t729vcHBwL+8ube8wru3v8W7wr++tbe8vK+vt7awtLO6ubq7r6mtq62rrKaqoqeuqKWqra2vp6Sgn6ajnqKjqKOjq6Oiop6dm5ublJaZnJyfpZ6fnpmYnpejoJyXmZqZmqOjop6jo6egpqCbnaCjnp2WoJmcoKCblJegn6WcmKKQgYaBcWVsaW50bndjZ2FcY1FLVEhFRUNHQzw7OTg9Ojc6PTo4OTs3PD01MzY1MDY4OTo8O0A9PDo+PDk+OTk9Pjs/PkM8Pz5APz0/P0ZEQEE/Pjo3P0BDQz9BPTo4ZqGYj4uNlZKVlY6PlpmVl5uVjoyMjY+bk7m2wbS/vLm8w8C+wLq1trKywLmvsry8sLe7tru8q6qjsLm9vrO8vrzFuLK4ub3HycrDx8jGxsnIzM7RzMrEtbrAw8i/v7W/wL/Gxr/LxsO/wbzAw8zKx8XGwbm9vMS/wL/CyL3Hx8XFvLrEv7vBv7rAvLu7wMS9t7nCub69t7S2uLqur7WxsLCytre0t6yurKqsrKuoq6Gms6qlra+trKippaOkp5+io6Onoaeiop6cnZyamYyQlpeZnaKZnpuVkp2UoaCdmZ6fmJimpqKfoqKmoqeloqCko6GbnaCbnKKfl5WVnp6kmpafiYGDgXRvbGx0a2xuX2JeYGFOSE0/RUA/REM7Ozo6Ozo4Ozw6OTw+OTo+NDQ1NTE5OTo5PDtAPD89PTw4PDs6PDs7Pz5DPkI+QD89Pz9FRUJBQj87Nj9CRUQ9QUE6OlmfmJOSlZqVmpOQlpeclZuZlpSVkZKTnZm2uLaxuru6vsG5uca7trWypb69tLbBv66zvbS4wbGwsbS8w7y6ur68xL+3vb+9x8zGx8nGxr/ExMrIzMzNy8bCw8vOwry5vbq5wMO/yMbEwcG/xcDKycPDw8O5w769ub+8wsbCyc7Hxr66xr26v7m3wLm5vsDCvrW0vLi2u7CvsrK1r7Cvrqyus7CzsrirsbKxqrCrq6yrrLatqKyusqarrKmpoaWgpaakrKSmoaChnqGgnaCMlJeTm5+mmZ6emZOYnZ+gnp2eopuYp62ooqSgoKKqpqmhqKGlm6CgnZ2jn5SYmKKdp6Gfm4J7eod6bW13e19wY1tdX15TST5DRUlCQz5DOz42OTo7Ozs7Ozs7PT05PTU2NjIxODo5Ozs6QTs/PDw+Nzs8Ozw9PTw9Pz5BQUE+PkFCQUVDQkRAPDY+Q0RFPkJEPztTmZuZmJ6dmqCalpyZn5KdlZ2boJWWlJqYur20sLu8wcTCv8XGura5sqO7vbS3xLuwtbq2ucS4tLy2ur3BvLu/tr/Bv7y/usDLwsfIwL+8vL/FwsfLyMHDwMDJysLAu7uwtLu9wMXGxcW/wMK/y8fCwMjAusK7urO6usG+wMrOysS9tby8ub+5ubW1s7/Avre0s7S4rbeqr7CwsrGvq6+nr7ausrG5rra2uLSzsLGttrS6sa6srranrLKsraSjoaenqLKrqqWkp6elpaCml5ujn6SmraKeo6KanaWiop+foaWenrC0sKSlnp+kqaevp6mgq6CiopqipJ2anqGmp6+psZWCe32Cem1zeHNncF1bXlxZUUVEQ01JQUQ9Rzo6NTk7Ojw8Ojs7Oz0/Oj01NDUxMjc4ODs8O0I8Pz46OzY6PTo7Pj0/QD87QUFBPj4/QkBBQkJFPjo1OkFCST9AQkA7TJqdnZ6fnZienZmampySoJWbnp+blZGRlsW+urbDvMbCvr/Ixbe1uLe2ubu0r7e2srWzt7m8u7a7u726w7u3vbe5wLu6uLi1xcHDw7u5s7S6wb2/x8C5wLy+xcS9vrmysK64t7/Dx8PEvb2/v8PDvr/HvLy/tLSutbW8vr/OzcvCt7K4uLi9ubuxtrLIwLu2tLGwt6yzqbCtrbO3r6uuqrG1r7Gvt7O6usC/tre2sru6wLWyrbO3rLC6r7KloqWrrK+5s7KosK+xr6qiqKGkraitrLOun6inpqWmq6Sknqaqo6ayuLOrpZyfp6anrquqpbClpaWbpKOYn6exrLW4sLKOhHl/fHZsdXpwbmlcX19ZU1BBRUhHS0BEQ0g8PTY7OTk8Ozo6Ozo9Pzw9NTU2MTM2OTg8QT5AOz1AOzs5PD04Oj08QD46Oj49Pj09PkBCQkJBRD03NDU9REc9Q0I/PEWUnqCgoJyXmpiYlZmdmZ2fmp2bnJaRj5LDwMK9wrzEvLy7xbu3s7e2tru7s6CWtayvsbS0tLa4ucHAt725uLm2tb+ztLK4sbvBwMO3t62wtbi4uMK6tLu3u77Au7u8rq+us7K5wcLEw768v7u6uLbBwrW/urWur62wvcC5z8rJw7GvtbS0vbq+ubq7ysO7uravsL2xuK+ys7C3vbaur66wt7CsrLK2vbzEwrq9t7bAv8G3tbC2srGzurGxr6err6u2v7e1qbqztbmxp6uop7ausrG1uaisrK+qr7CqqKessayytr20saykqKuoqKusq6i2qaaonqadmKOuvLG7wbSmiYF8gnpzdnZ3bnFgX2VdW1RKPD4/RkY9RkNDOTo1Ozk5Pjw8Ojo8Pj4+Pjg4MzE1Nzg5Pj9BPzs6Pz08Oz09OTs8OTs6Nzs+PT1DQT8/QUJEQkE8ODU4PUNGPUREPzw/iZ2en52Xl5WUk5aZnpubmpuYlJ2Uio6Owb7Dwr6+vrm2usCxtbGzt7fCtbOrrbOoqa61r620trnDv7e6t7a2srTAtrK0uLO6wMHDubizsrK0sre+urO1sry6vLa6vrK0tLSwuL7DxsTAvb+5s6+yvLquu7Szpquorbq+uMvCv76sq7Cvs7q3ub67wMXBu7y3sLXEtb+0uLu0u8PCs7a2sbisqaWrsr23v7+7u7exvL28trGvq6uprbOvsLCrsLSpuMC2sqm0tbC3tq2spqu7s660uMKwsbG1sbK1saywsri4ubi+tLGzrqyxramvrqqyuK6trainoZ6ptr+4ur+wlol9gHxxdHd0dnJsXmJgW11OSEE/PUhDRk1EQDc3NTs6OT48PDk4PT47PT86ODMyNTc2OD8/Qj86OD4+PTw5PDk7Ozo8Ozs6PEA+QkI9QEE/QkI/PDs3OjxBRD5CQz8+QYqgm6GdlJiVlZKYmpyWm5WalY2bj4SIhru0vb+7vLm3s7y8rLOytLS2wLXAr7Kzqqqxt62pubO3wL27vLi2uraxwLq3ubi5u8HBxMS7u7a0tLC2ura0sqy8ubi1uMG6uLOxrLe8wcfDv7m6ta6lrLOwprCtqJ6gn6WttrXCt7a0pairqLC2s7K6tbu7u7W4trC1xLK+vL+8ubrFybq9vraxp6SeoamxrrW5trKxq7S3trGopp6gmaWmpKynq6y2qa+6sa2kpq2lq7GrrKmtuLawsrjBtrGxtbGvu7ayt7W1sry1urKwsbKutLKqrq2nuLWyta2uqqiosrq9wLa0qY6Ce393b3tvdXJuY1xmWFxdUk5NQT5KQkBKSUA2NjU7Nzg+Ojs4Nz4+PDs/OjkzMjc1NzU8PD48PDg+Pjw8OTk5Ozs7Pjs7OTw+P0E9PEJAPz9CQD47Njc6QERBQ0E/QUKJoJ2loJSWmJiVnqCcl5uYmZGMmYmDhoS1r7S7u7S1sLG2uq6wtLOvtbq1urC1s7GttrqurLyyuLm3u7+9ub7AtL+7vLq4vsK8wsrIvsC4ubaytLaztK+su7q4trnAw7aurqqytry9ubaysa2tn6Snp52jpp2WmZman6muuayrq5+lqKSrrq6nr6yvsbGtsa6usLmwtLy+uLm4x8W8vLu4qaKcmJufp6assq6zqaapqq6popqXl5GcmpijnqKir6ekrKaompqemqGnp6anqa+2squ0trCqsK+xqbm2sbWxrqy3s7avrquuq7S1ra+rq7GtsbKoraurs7W3ur2wq6GLeoJ5cnZzbXVpa11balRdXE9NSERGTEFGTUY4NjY1OjY6Pjg7OTc8PTo7PTo5MjM2Nzc3Pjs9Pjo6Pz48PDw6Ojs5Oz47PTk8Pj1CPDtAP0A/QT8+OjU1OkBFQkRBQEJBiJ+ipqGYm56dmqWpmJudmpmUjJmHhoeGrq2uuLmxsqiur7iyq7CwqrK1ubm9tbK4tLm6tbm7tbWztbu8wLu+wLS/ubm6sbrDvMLKxb+7v7+5tLSzsbGusLm5try4u7+ysrKusa65r6qrrayjqKGdnZ6XmKGVkpWXkJifqK6ko6Sgoqeio6mpoaanpaqtp6ynqKesq6yyu7SztLm6trK2ramgmpaWm52fq6yrr6Ojo6GpoJuTjo+Qk5KSmZaanaSloJ+ep5iVkpSYnqSjoaWqrK2iqaqppKmtrqW0sa6xraqprq+wraWmqqSos66trKmmpqmrpqqnq7Ksr7Oxq6mWgX+Bd3J4aHRzbmRUYGNXXFFOTEg/SFFETUM9ODg3NTo3PD46Ozw4OTw7Ozw7ODI0ODk3ODs7PDs4PD0+Oz08Ojk8Ojs9PTw6OkA9PDw7QD5CQEE/Pjk1ODs8RkFDRD9BQYijpqKjnqCfp6Coqpufm5yZmI6Xi42PjKqpqLGvsK2lp6ayr6mmq6CvsLu1vby4wMG+vLy8ua6tr7Kyurq3t7W1vLSvtKu2urjAxMG7tby9uLKts7CvrK62trK0tK+qpJ6bnJyeqKifoKipn6GnlpuXl4+dk4+Qlo6Xm6SooKCioqKlpZ2jo6CepaCkrKSmqKSio6OrrLOuqa6urqeqraisoZyamJmYm6moqquepaKbo5yVkIyPj4+TkJeVlpifnp6amaaXk4+Slp2ioKWjpqSnoKKko6Ghq6uksq2qrKyno6yuraufoaKkpK+srKmmo6KqpKqqpKmrpqmsq6agiHiDfHZ/eWJ3bG5cUWhUUE5HT01MQk9RQD47PjM5OjU7OT07Ojk9OTk8Ozw8OzkzNjk5Njo7Pz06ODs6Pjw6PDs5Oz07PDw9PjxAPT88ODtAQEE/Pz45NDk8N0FDQkQ9QEOOqqSjoqGinaulpqimoZ6dmZ2PmJWTkJWnpKGmqKmlpKChp6uhnKKbp6u1sry9wMLCwL7AuLSnpayqqLWysbCur7Knpq+jr661wbq1t7K3trK0q7K0rqqrr7Cys62lnpKYlI+ZoJ+ioJykpZ+eqJSblpeMl5GNkJeTmJ2iqp+fn6Cjpaicn6ChnKKfo6innKehoKSfrKisrKCpq6agpKimrKOdnp2Zl5qrpqmwo6WnnqCclZOQj5GQmJCWlZiXn5ibmZujmZeUlZqdoJ2nqKWgo6Kho56doKmqpa6upqipoaKqrqqnoaCio6msq6eppqShqaKlqaalpKKmpKijkn18gHV1fW1re2RoVVFjTUlIR05STkpORztEQD0yPzg1OTs+Ozk5Ozg6PDs7Ozk5NDg7ODc7Oz48Ojk8Oj07Ozw9OTw8PD49PUE+QEJAPTc6P0FCQEA/ODU1PDpAQ0BEPkFGlq6koqWeo6KpqKipqqWmnp2imJiZmZWbop6bnqOioKOgoZqgmJiXlqGorK62t7q5ure3u66ooKGpoaCtq6qmqaSpo6SupaystLy3rLKxr7Gtta+vs7Wqp62so5yZlI6RlpeZmZygo6KbnaWemqSXl5eWkJKRkZOal5ugpKqeoaGepqeqop+gp5+dn6SnqZ6jpp+qnaqtqq6nqLClo6Smp6ymoaShm5ier6iusqulqqqgmpiYmJWTlpqTlZWZlpuXl5ignpycl5uhmp6ao6eln6GioqOdm6Gmp6aoraOppZ6kp6mkpaWhpaSsrKmmq6eioKSjpKenoaCgpaKmoIl7gH12eHxkeHlgYlJVX0hJSUtTVElSUEw4PkI2Nz02NTs6PDw5Ozs4Ojw9Ojs4NjU3OjY5Pj0+PDk5PTk9PTw+PTs7PDo+PTw/Pz9APT03Oj5AQEA/Pzg2NT08PkFCRkBAR6CupKaroaOqrK6tp6ypqKCipp6bm56aoJyalZmfn5uen56WlJOXk5OcnqOorq2sq6uvqq+pn5eepZ6epaakoKKfpqCirqusrbWytqavtKupqrSxsLC4raehnJ2alJibmpGOkZWRjI+OlJminJejmZqXmJmUmZiWnZufpaapoKajnqeurqumorGjmqSmpqqioaqiqaSosquxsqu5qKarp6urqaysp6Cgo7GtsbG0qbGvopmcnZ6hmZubmpiZm5SWm5aYnKWhoJqjoZqdmZ+kop6gn6KmnZulpqWkpaijp6OepqOinqaloqWlqKykpq2noJ2dn56gpaGenqWgppmBe4F8dXZzaIJsZVtTWllNUUpOTlVMUkxBNz5CNzg9NzY6PDw9Ojw5ODo7PDo7OTc2Oj01OTw7QD03ODs3PTs9PT06Ozw4Pj09QD5BPj4+ODg8P0BAPT83NTg9Pj1BQEZAQUihqqCrq6GkqquwramtqaelpaWkoKGfnqWXl5SYmZ6YnJ2blo+VmZKSnJihnaqip6Cep6Gln5ySnKKbn6Gjnp2gn6Ogoq+urK+xrLanrbGtpqawrq2ssKegn6Kgl5GUnKGcmZeSk5+doqSbnpuWn5qfl5uinqWhnqSfpKitraisqKSstLe2sKe0rKKtraOvpaSmoamorrWzsr23vrCssa6tqaq0sbCoq6iytbezt6yxtKOgnaWgrKGhoqCgmpiWlp+bm5ikoaCepKGgnpqcpaCfnZyhqJ+fp6meoaOkoKagnqehn5ymo5+ipaOooKmrpZ+dnZudmqainpyjnqeQgYJ/fHh1aXd1XWxaUmBIUVVIRlVWSkJNRz1KSDhFPDY3Oz49PDo8OTg6Ojs6PDk2Njo8Nzs+PT8+OTc9OT47PEA8OkA6OkA/O0A+QUA9PDk3Oj5APzo+NzU4PT0/QUBEQEJGnKueqamipamprqimqqWmp6aoqqGlpKOmkpOVmJacmpqcmpWTmZuOk56ZqJ2unqeenKGdnpqZkpmenKKioKCdop+fnp+pq6esqaq0q6utq6Wlq6iqrKqln56ZkpKUmJmWlpaMiIuOlZ2dnZ2elp6apqCgqKWxqqeuo6uttrC0srGutri9wLqttbSwt7CutKmmpKWsqbmztbvDvMPBtrq2q6+xube8r7OwtcG8t72zs7Whq6KpqLKpq6inqJqZnpqqpp+Zp6Cfn6eopaSenaqiop6bn6igpKetmZ+jnp6nnqCmnpycoqGbo6KhnZympaWkn6KZnJukn6CboJyjiYWEfnZxbWl2bWhtXFhbQlZNSkdNR0JGTTw+TD00PDk2Oj0/PDs6Ojg4PDk6Ozs8NTQ6PDg5Pj4/Pjg4Pzk8Oz0/Oz1BPTo/PjxAPj8+Pz08Njs/QT07Pzg1ODw8QERCREFCQ5WqoKapo6mqqKmjoamgpqinrK6lqaWpqpSSl5mUmpqanJiYmZyamJqqoLGit6OwpqCenZ2XmJaZnpucpJ+fnaSdmp2cpKKko6Kqr6ynqaOgoayurqqrpqCenqGjnp6em52clJOVlJ6emJSGnpqhm6ukq7KwubKysbKxur28vLm2uMO+v8K/trq6wMS5vbusr6exrbHCtrjCxsDIysDKv7C5ub25wr64tLvFw7zCu7ezqbKtqrO0r7Ouqq6jnauntrGsoq+loKOvsa2wpKSvo6GgmqGnoaSqqpmdoJmao6CmqKGcnqKemaSenpiYo6OhpZ6mmZuipJ6fm5ubnIeFgXt0cmtrdXJwaFdbUUVUSERJT0g+RUEzRUg5NTs9Njs8Pjw8Ojo4OTw4OTs4Ojo4Ozw3Oz49Pj02OEA5Ozs9QDw9QDk3PD07Pj0+PUI+Pjc6QUA+PD45NTg9Oz1DQEFDQkGRqqGlqqelqqimn6KnnKasp7Gyq62jqayVkpWalJecoqGbnqCinJ+psqu7sr+rr6ylnqChnZyYm5+gm6Cfn5elnZWbm5+anpyepaannaCgq7Gup6Sko6CepaulnpeclJGZnZiUjIqGiIZ5bYigpKKrrLS8tsO+vrO7wcPCxcC/wsbGxcPIwsDFyM3QyMvDsre1vrK+xbu+zM3FzMzM0se+v8DCvcfGwrfDycjCwMW+ubS5urW7t7C1sqq6sq67tr66uqq3rauquLq0vK6tuKOlop6npaKjqaaZm5+Ymp2nqqegoaGkmJSjlpSakZydn6Sep5+en6KdmJmUmJSIhH16cmtkaG94amVaW0ZKTEREU0xEQkQ3Oj87NTQ5OTc5Pj87PDs7OD48Njo9OTw9OTw9Ojs9Pj4+NztBOj45PT45PT44Nzs6Ojs/Pz1CPj83OkFAPTw9ODY2PDo8QT9BQUE+kqugp66ooqulpKKipaGlqquwsq2upKmmlJWVmpaUm6SmnaGqp6KrrLy8v8PBs7K4p6Ghq6qinZ6hop6cm6CSn5+Qlp+ZkpqWnZuZo6Gvs6mhmp2dn5+al5iXkoyPlpeTjo2Qi4KDgndzcW5wj6atrrS5xbvNx8u/wszOzczIydHMzczHycXGzNDS1c7Tyb3Av8O7xsXIxdLTzNPQ09PMysLFxsbKx86/ydDLxsTGxMG7w8G+vr61vbOtv7/Cw8bEx8SuvriyuLzEwcG6vLy1rqenraigoqmlmpagmpmdqKupo6SknpePm4uQmYmVmJugn6OdnZeempOTi5WPhYB5dHNlYmdyb2ZeWllDTkxDRVBJREJANTU1ODlCPTY4OkE+Ozs+PDk+PTc6PTk6PDg8PDw7Pz8+PD0+Qzw7OkA9Ojs6Ojg4ODk7QT48QD8+ODtBQTs7Pjc4Njo8PkI+Q0FAPpOvn6ivpqiro6KloKampKuoq62qrqKqo5Kcl5ebmJujrJ6frqalsarFxszOzb+wwqmlqK2tqqGdo5+cnZqpk5mhkI6gk42UkpeZpLGxq6SgnaCbmZeUk5SWkZCPjIeEg4iHg4CBgYB5cnJvbHmktrq5vsvB09LTyM3O0dPR0tHQ0dHNzs7Qxc7U1djS183Gx8nMw8XKz8rT19HX0tTV09PIzMfNzcnSzM7TzcTHycrBxcvGyMjFvsKzs8fEy8rKzsXKv76/vMHHxMzMyMm/w7+tsLOonqKqo5qTnpyYnqaprKSlppaXipWFkZSHkpKSmZualpiQm5WQjIaRi396cnV1Z2NndmlkVldRRE1GQElRQj1CPDoyM0A8RDw3OTxCPTs9Pzs7Pj05Oj48Oz44Ojk5Oj86Pj1APkA8Pjs+Ozk9PTw5Njo6Pj08PEA/Pjk6QEE6OT44Ojo6Oz4+PEE/QT6QrKKiqaanqKSfop2qqKOso6OnpqyiqZ+To5iWn56dpK6bn7CrqKyxyc3U18/Gu8esrbS4rK6jn6Sjn6CkrJuWqZaNl42MjZemsK6lnZ6doaWhnpuVlJaUin13cGtlYmhxb3F7hYqAdnBucXRwhbPCvsXR0NfW1tLWzdTW19TT0dPU1NPP0sPQ09bX1dbSy8nO0cvGzdLK0tXW2dXX09bYztLJztHMztDM0s+/x8bKw8zMy87PxcbHtr/Jv9LNy8/Fyci/w8LIzszP0M/MysfNuLe7qJ+lq6efmJ6jnp2qpa2pqKiSlYiQhIyRho2MiJOVmZCWjJiSj4aHjIR8d3N2b2NgZXJiXVJcSUpGQUVIST47QDg9NDU4NTo3Njo8QD07Pjw7OUA7OTo8Ozs8Nz09Ozo+Oz08Pjw/Ojo8Ozs5Oz89OTU7PD48PD0/Pz46O0BCOzk/OTg7PT0+PzxBQEQ8hqugnKegp6Oim6CbqaSlqaCfoaGmn6ifmKSim6mmoqarmqOwsamotdDU19rSx8bLtLbCxrK2qaKlpqGiq7WnmrGhlZSMkKatq5yVmKGdm6Gin5ydm5WKd2ljYF9fX19eX2BeYmx1c3Fwb2xycXWSxMfG1NXW19fT1s/V1NrU1M/P1dTU0dLM0c7T19bT1dDP0tPRydPRyNDY19jR19LX2dXWzM7Pyc3Ry87Pv8XCx8XOzdHQ0cjLzMDKy8XTzsvOyMTJxsbIzMrT09HVz9LM0sG5xbGlqLWup5qorKWdsqiws6ysk4+TjoiLjoOPi4SQjpmNk4+Zj4+ChYx7enFzdG1hY2ltX1ZQX0pKQkZDUU0/PD40NDo9NTI3NTU8PEA8Ozw6OTpAOjg7Oj46PTg+Ojo8QD08OTs9Pzk6Pz07PTw9PTo2PD0/QD08PT0+OjxAQjs5PDc0Oj48Pz89RkFEPYKknKClnaWlo5mcnaSeo6OfnZ+doJqnnpyhqaCvrqqqrJ6mrrioq7fY1NXZ2dHO0MC8zMm3wK+nq6mjpLG2s6O2qaiooaqpoZiWmJqbnaGemp2elH5yZWNiX19hYF9hYF9gYF9gZm1wcG5rb3J3d5vMwNLV09jY1tnR0tLXz9POy9PN1dTSys/M09bS0dbNz9XV0cbR1MrR1NXWztLQ2NjY18vIzcPJzszJy7/Iv8jJzc3Py9DNzsvOz8fLz9DKzsrCycbJzMrL0dLM09HQz8/Kvci5sK27uLWqtrCtqLits7+7sZqPn5SRjo2IjpCFkY2ZjJGRlY6RgIWIeXZvcG5rYWRucGFXXFpJRkZETFdFO0A8MzM8PTg2ODU1Oz5APTk8PDg8Pjk8QDtAOj04Pjk4Oj88PTg7PkI6Oj08OkE9PTw6Nj08P0A9PDs9Pjg7QEE9Ojw4ODs+PD4+OkVCRT6Bn5mlp6Cfo6eam5+cl56eoZqdmpyappueo6eeuLa1ta2lra6+tLHA2dLX2tzWz83Lw9PQwsKyq62urKazsbirss65q5+clpSXm56fn52UlpeViWxeXl5hZGJgYGBhYGBhXl9fXl1ibXJvb3N0dnZ5pL7L1dHW1NPY1s7O1MvNzsXOytLSz8bOzc3UzM7TzcrX1dDM0dTLzNDR08rO0dXS1dXKwMrBxczCyMnCzMPFyMrKzsrMzM/N08vFyM/MyMfKxMbAxcnLzdDRxtDOzc3Mz8XHwLe5vcPDvcO5srO+sbzExLWqmKWhmZaRlZWSi5SNm5GUlI+PlIKJhXhwcWtuaGBgcWhZWGhWTUdMSVBQQjtEPjs2Nzo4OTo1Nj09QTs6PD05PD05PT06Pjo8ODs9OTtAPD47Pj5BPDk9Pj1CPTs3NzU/PDw/PDw7PDw4O0FAPDo8OTs7Ozw9QTpFQUU+hJ6bqK2epKSqnJ6fmJKXm5+am56ZmaKVoamppcXDwb+7tbKxx8O5y9XW2drb2MzMz8nW1sXEuLK2qqSurLm5sLbVoZWOjZiWkJOSkZaWlpCMfGViYmJgXV5hY2JgX2BgYWFgX11bXWdycXFyc3FtcnmkxtPPy9DP1NXJxcnJxsa/w8bPzsfFx83K0sjLzs3G0dLPzszUysfLzs/Hx8/Sy9DPxbrEvsbJvcLGyM7EwsfAx83Hw8vJy8/Hw8PPyMbBxsfDvsDHy8vMzsLKy8jHy9DExce7x8PIyMLPwL28v7DByse6vaqxsqelnaKcmJCbkKSZl5mRlZiJj4J3bnRkbGBeZnFhW1dgR0hIR0lNVEc/Sj02NDM1NT08NDg9PT06Oz08OTo7OT89OTw7PDg6PDo6QD1APD09Pjw6Qz48Pz04ODk6QD4/Pjw7Ozs7ODo+Pzw7Ojc5PD49Oz49RkFDPYOgm6qupa6qq5qdoJeUjpedmpmgmpqcm6WzsazJzcrIxL69us3NxtDV1dna29jQytDQ0tTKxbq+vrCot6u+urfBrpGOjpaQhoOEhIJ+hYV/dGBbXl5eYF5gY2RjX11dXl9gYF9bWlxha3Jyb29rbG9vfbjRyMnKz8vNxLrAw7u7urq+yMbCw8DDx8rJyMrIwcXMxsjLzcnEwsvJwsLL0MTLyL+5wbvFx72/xs/Kw7/Du8nGyLrHxsTKwL3By8bFw73FvLy/w8TLxcW8wMnCxcfSxcDIv8rKxsjG0MPDxsOvxMvHxMq3v7y6tKmspaWYn5iso6GlmqOgm5R7dnN0ZmpbYW5tWltYUURMRkJHRExERlNANTQzMzQ/PDM6PDw7OTw8PDg7PTtBPTo8Ojs3Oz05Oz07PTs6OD4+PEI+Oz88OTk7Pz07QD48Ozk5OTk6Oz06PDo2OTw+PDs+O0NCRD5/pZypsqm0rrCdnp6YnImUm5man6Kfmp2ov7i8ys/RzMfCw8fNz87N1dDW2djZ0M3Uzs/Qy8S4xsG2tbyxwLe6sJGMk5eHe4CFhoB2eHVycF9aW11gYWJjZGRlZGBcXF1dX15gW1laXGJvcm9raWxwb3OPxrzJxczAxsKxtrqysrOyscK8vLu5uMDBwcW+vbm9v7nEysXGwr3GwLi7xMm/wsm7t7u6xcO+vMHNwsa+vrXAvcO6vMa7wrmzvMXDwsK2v7W1vr+6y8O8tbrIur+9y8PBxcLGyMbIxtDGwszIssfKw87NwcXCv72yt7Czp6ioubGlrbCrrayUeXZ3amVoYGhvY1ZeWUpFSkZIS0FGQkVJQDk6NjQ4ODUzOzo7PDk8PDs5Ozk6QD46Ojw6Nzo7Nzo7Oz88OjxAPUA/PT8/Oz07O0A8Pj4+Ojk5ODk3ODo8PDw7OTo8Pjs7PjpAQEU+fqygrLWqt7SyoZ6fl5qNlJaan52mop2et8bCxMjO0svKysfNzs/SydHG1tXW2M7M0MjNyMrFvsrBsrW6t7u2sJGNiouFeYCGhoB+hHx0dWRcXF1eYGBiY2JiZWViXV1bXF5cXl1aW11daHNxbWdnbnByeZ29zMDDusG4rrCwp6qtrKe4tLe0s7KzurW9sbewta+yu8K8wcS8v7u1srq+wLjHubS7tsDCvLe9xsDDvLWusra6vrPEt7u1q7i8vcC9sLq1r7a6ssW8tq+7v7S2tMW8vsPFwMPFxsjLxsDGxrvIy7/PysfDxsHDt8O+vba5vsa/rLW6tbe2jnh0eGdnZWJrbl5WXmBGS0hISkZCQ0FFRT88OjU2NTYzMzs6Oz06Ozs6Oz44PEE9PDo7ODc5OTk7PDo+Ozk+Pz1APz5CQD1AOjo+Oz89PTk6Ojo4NTY7PT48PDo7OT49OT86PEBAPIi3pauzsby8sa2foJmUlJiXnqujr6qnpMbLzsjGyc7M0M3OycvJzMrLxtHP09HPyMvGysbEwL3PvbO5vbm4t5yOh4mJe3l+hoZ3eIJ9dGheXV1dX2BfYGRhXmNlY19fXFteXF1eWltbXV9scG5oZmpubnJ8pMe/ubi1sKysp56iqqeeq6yzramrqbOutrCyqa6mrLK8urbDubq6saq1ubu0wrqwv7G9vbu1u8e5wretqqiwscC1uLyvsKexs7S7vKuttaWutq66sbCqua+tu667uLu/v725wr/Hw8XBvMbByMu4xcfFv8fDw7rExsK7xcnMy7O5wry6sohydnZraWFibGhZWFdbQUxLTUlFQUM/RkE6OTo5OTU4NTQ6Ojk7PD07Ojs+ODtAPD05Ojc5Pjk7PDo4Ozs6Pj05QT0/QD87Pjo7PDo9PDw4OTg5NzY4PDw9Ozw6Ojs+PTs/Ozs+QDyKwKuouLe5w62zqZ2ZlJaZoZymsLWxt6bGz9LMxMbBxdDIz8LEx8HGxsXFzMTLzMLEwcjBury7yre0vL22tauRiZCQfHl+ioV6e4SBd25eXV1dXV9gX19kY2JjY2JgX15bW1paXVpaWVpdZW5vaGZnaWtucoGtubC1rqalp6eaoKSgmpylq66jp6KrqqyqsKOmn6qttbaxvbmvuK+orri0tLy4s7yvt7m1sbvBscGupaiirLGys6e8qquoq6yttLSmqK6hpK+psqWnqK6lqLessLK3ubq7sby9vr7Ev7XBwcfIt7/AxbfEwr+7v8TDvsTIzMq/vsPAwKmGcnRyamldYW9kV1ZYUEhaUlNLRkZFPj9AOTc4OTc3NjQzNzo5OTo8Ozs8PDc7PTs7Ozw4OT44PTs8Njo9Oz89N0E+P0A/Ojw8Oj05Ojs6Nzc3ODg3OTw7PDs5Ozo8OTc5Pjw+P0E7jMKvrry3usSwtrCbmZWcmKqpsLGztb2vxtHQzcTIu7vMw8zAvMq5wMbAvMy6w8fFur3Evrq3vca5trm7rrKVg4mNgXt+gH54dH98c3dmX11cXF5fYF5fY2NhYmBgX15dXFpYWltbWVhaXF9ma2ZlZ2Voa29yhaqlrKagnKGllJ6km5eRoaOqo6KfpaWnpaygnZukpqyyr7a3p7Csp6q0q7S5sLa0rLa4sbC6ubG3pJ+jn6exp6uouaqkpqeop7KtoKemn5ukpqyen6ekn6Cxra2ssrSytLC1vLa7wcGyur7DwbK5usKzwL2/tbi7vb68wsfEwsO/v8Sgg3dwa2FlX2tvYFVZX0hOaE9UR0VKRjw9Pz06Ozs4MjU1MzY5OTk7OTo6PDo3PD88PDs8ODg8OTw6Ozc4Ojo8OTg+Oj89OTg8Ojs9Ojc3NzY3ODg2NjY7Ojo7OTo7PDg1OTw6Pj5AO43Itba9uLrBu761oJ6VnqGmurars7O7s8XQyczDx7m4ycLOwbrLub3Iu7fIu7fExrO+xby3sLnAu7Gzt7CihIeHgn15dnRvbWtqanFpX2BdXFxdX2BfYWNiYGBgYF1cW1xcWFlYWFhWWFtdXmRjYmVnZ2dqbW+Inamgl5WaoZabopiVjZ6hoqabn5+jpaGnnpuim5+qsK2xtaKpqqmrrKS1uK23r6yytK6yta6wqp+dnqOisqSlqbitoaamn6isq5mfoJ6ZnZ+lmpmjnJudr6mrp6qrrK2wsrivuLm7sLa7u7qrsrK5sr20trGxtbS/tr3AvcPBuru9l4N6cmtfZV5kZFhUWF5JV11LUEdJSkZBPD8/QDs/PDA0NTM1Ojs5Ozg5OTw8Nz4/Oz07Ozg4PDg5ODw3ODo7Ozo7Pzo9Ozc4PDo9PDc0Nzc2NzU3NDY2Ozc5Ojs6ODo5ODo7OTo8PzuJyba4vru3wcHBtKSkmZukpsCyr7astLfG0MnJwce8vMXF0MC8yru7wbu2xbi1wcGzwsS8raq1ureosbOpi4aIgHlzbnBua2JeYmZmXV1eXV1dXF1fYGFiY2NiYV9cW1taW1lYWFdXV1hYWFteYmRkZWZmaGlrco2onZSUlJuYm6GWlpCcoaGonZudpaahpZygoJqYra6trrKgpaKtq6ehtbCxsaynrrKnurOmtqGinpqjoq2ioam1qqKjpp2lpqOWmJ6XmZqdn5mXnZycm6yhq6ajpKatq7OzqrSwsqqyubSvqa+ysrK3s66prK6yuLC6trm9v7eysZSFeXVlXmVeW1lWU1pVS1tRTElFSEtJQj0/QUFAQDoyNDUyNDk5ODk7OTo9PDY9Pzs8Pjs3Ozs3Nzc+Njo+Ozo4Oj07PD06Ozw6PTs4Nzk3NDY1NTQ2Nzg1Ojo4Ojk5PDg3Ojg5PkA6gci9uL2/tr69v7OdpaOYpbHCtba9rbS4w83JyMHGuMLByNC6w8bAtry9tsO6tr/Btbu/u6qmsbuxqLKvm32FhYB5cHF0cWhmZGllY1xcW1tdXVxbXmBhXl9fYF5cW1pcWllYVldXVlhXWFhWV2FkZWNkZWRkaGp2opyUlI+Ulpefl5mUmJ+eoZyWoaGoo5+eqJybmqqmr7Crm6Ojt6qgn66otqmmpqywo7ewpLegopuYmKqmoZusuK+ioaScoZ+gk5WhlJaWm5iXlpeclJ+pnamjoZ2jqqqwrqi0q6qmrbKwpaqusrGvsK6vpqensq6xtK+8tLm3rqOUgXl1ZF5hVllXU1JUS01eTFBLR0dMS0U8QD48Qjw7NzY1MzQ5ODg5OTo5Pjo4Pj47PTw8Nz49Njc2PTc7PTs5Nzk7Ozw+OTk6Ozo4Njc2NTQ1MzEwNDU2Nzk6ODo5Ojo3Ojs5OT1AOnbAvLS5wrG+uLyunqeno6q7wL3Aua60uMLNyMfExb7HusrNtcTFxbG/wLnAwbrAwLm6vbeoqLG7pqmipYmBfnhyamxydHBpaGVkZ2JcXFpZWlxcXF1eXVxbXF5cW1xZW1xaWFZXV1ZXWFdXV1VbY2NiYmNiY2RmaoGWk5WLkZSTm5mclpaboJyflaCfpqWkpqefnJ+kn6qvpp+io7aooKGiqLOhpaekr6Wwray1nqCdlZSpoaGUrLGwnqKinZ6Ym5OLoZSRk5eYkpeXmJadppumoaKZo6Wlq6SlsKelo6urraWorq+uq6iqqbOlpquvtLGuvLWxr6+gknp2cmRhXFpdWE5MUUdSYU1WUE9KTU9FQkQ/OT02OTo3NjQ1OTk7OTg4Nzs4OT0+Oz47PDY5Ojc7Njs3Ozs6ODU6Ozo7OzY8Ozg4NDY4NjMzMjEuLzI1NTY7Ojg7Nzg3Njw7Ojs7QTh4u7uxtb2wu7K3rJ6kp623u7zBxbqxubXFysvBxMfHybjIxrXFwsmvurzCvMPAwb28t7q2pqeytp6iipmIgHdvZGJnaWhmaGpnam1gXVxbWlpZWlxdXFtcXl9cWllbWVlaW1dVWFdUVFdVU1RSVWBgX2BhX2BhY2RpgZSTiZGOlJKTnJSVlqOZoJacoKWhraWkpKKjoZuqqqWZnqWxqaCgnaSqnaehnqysqaitraKhoZSXo5uckKupsJufop6el5iTip6SjZKTlY+YmJKboaKcpKChlaChpKabo6uloqSqo6uupK6xqaalpqa0pqmorbO1tLm6r6qsnotycG9gW1dWVVFGUU9IWlxPUklUS1NMRUdJQzg7Oz08ODY2Nzo5Ozo5NzY5Nzc6Ozo9PDw3Ozw4PjU5ODo4ODY1OTo7PDk3Pzw5NTc4NDUyMTIxLi4xNDI2Ojg2OTg1OTg5ODk7OUA5e7W0rbS7srCssq2dp6evubmzwMi6tcCvxsnOu8LLzcm3y7+0wMfMsLa9yLvCx8S9v7e6taWrsK6dmoeOg3x1aWpqbWhqbG5ra21lXVxcW1tcWlhaXVtbXmBgXFhYWllYV1hXVFZWVVRVVVJTT1FZXVxdXl5eX19iZG2Oj4SRho+Rj5mTlJKcmqKcm6CnqKqoqqaopKOYpK6klJmlr6mfm5iaoJ6umZuqs5+lpp+jo6GUk5uWlZKoqa2anKChoJqUkIyZjouQjJKMlpSQnaGgo5ybopWboKKgl6Koo6Koq6Crr6Stt6Wjo6Ksramoq6+zuLK9tbOrr5iDcnJoW1hZU1VSRVlMUFxZTVROUExQUklOSUI8Pz9BPz02NTc5OTw8OTg3Ojc5Ojs8PT47Nzs7Oj02Nzo7ODk3Njk4OTo2Oj05OTU3NzU3MDE0MS0rLzQzNDk4ODo6ODo6NzQ4PTg/OX6zrqiztq6pqK+tm6morLe2rLzKu7a/rMzHxrnCz9DJtca+ur7Gy7WxvcW9w8bEvcGzua+mq6+rnpeGgXd4b25pbm5ucWdnaWdkXVpbW1tbXFtZWltcXF5fX1xYWFlYV1hXVlVUU1VWVVVUU05QUVlaWlpdXFxeX2Bkfo2Bi3+LkIqSjZeRl5mioJufqqmmraqnr6KnmZ+soJWWpKinnZePjpmdrpaXp6qZn52UpaGekpCSkpKVp6qkmZmanZ2WjYyLlIaIjYOQi5KUkKCeoKOXlZ+VmqCinpObpaWnqKigsbCmsLynoKOstKutp7C0sLm1wLGtsauQfXByYlZUVU5SSUdWUVNSTExYTUpMTlJHTUtBQ0ZEQz5ANzU4ODk7OTo3Ojo3PD06O0A+Ojk7OTo/NzU5Ojk4NzY5NTg3Nzk7ODU1NzY3NjEzMjEtKi4xMDI4Nzc7OTk7ODk0ODs4QDh/s62msbeqpqKwq52qp6mysaS2xrS5urPLxrq8w8vRzLO5ur7AxMe2tLe9s7u8xL7CsbSusa6xrJyiiGtobm9yb3FrcGtkZmdlXlpZWllaWlpbWlpaXFxdXFpYWFhZWVdYV1VVVFJTVVNWVVJOTk5SV1hZWVlZXFxdYWqAen91iY6HkImYiZSUl5uZnaibn6qlpKqcp5igpZuSj56impeWhIORmqOPk6KclZaVh6KampOLjoqPmaOnnJWVl5uQkoeUjoyBi42AkIqSkpGhmp+hlZOYmJWipZmMmaSmqKahoLSyp7K3oZ2it6yqraSysqa1vLWrq7GjiHhybV1OUFFMT0NOTk5QS0ZOTkpKTk1RSU1KQUdLSEhDPjg1ODg4OTo7Njk6Njg7OTk+PDg6Pjk7Pzg3ODk6ODg2ODU3Njg4OTc0NTc3ODIwMzAxKiktLzEyNzc2Ojk5OTk4NDk4OEE3d7anpLawpKekqaWgqaWks6qissO1tbKzx8e4u8TKzce1r7y/uLzEs7OutqKttcS6u6+qrLSvr6CXqH1eYGdzcXZxam5pZmhoal9YWVhYWFlZWVpaWVtbXFxZWFhXWVlYVVZSU1JQUVRRU1VRTk1LTFNXV1ZYWFlYW11hb3N2cYWIgoeAkYOOipSRk52gjpqcoqGjmKSWoZuVjYeYmoxzjYJ9jZaWhZCZkJOOjnuZjpyMgop/iZifop6Qk5iWhI6Ck35+dImOepCGkpCQnZqZmpCVj52OoqOOiZqgoaSjm6K0r6yvrJ+YpbmmpbChsK6csLuqqa+qmYF2cmJWTFFPUE1DU05MUU1DUFBISU5TTUhKSkRKTEVKSz03NDk4ODg7OzY5Ozc6PDk6Ojs3OT85PkA3OTo8ODk3NjQ0NDU4NzQzMTI0ODUvMDEwMikoLC0xMjc2NDc4OTo6NjU6ODdBN3e3oqO0qKWlqKOmpaamprOnpbTAuLC0sMrGubrCz8e/ta+9w6+xx7Ktp6yVpK6/uLGwn6etrauWlaJyV1ZfaGdpaGluY2poZ2JcWFhYWFhZWVlZWVlaW1tbWVlZVldXV1NUUE5QTk9PUFNUUk1NSkhOU1NTVFVVV1lbXWlscm1/hXx0Tlhyj4KXho2cl4qTkJ+XnZWUlpSOlol/k4lfO1dve4uTiX+LkYyPhYZzioSWgXmCeoWTnZSDlY6Qj4KGfZJ4cW+FjX6JgJCNj5eZmJOKj4iciJ6Xh4iWnpqhoJenr6itqaifl620oqatmKyrmKe0oqmto5J9cW1fWk5TUVZMRFRKUE1MRk9PSUVMUU1LUEpJTVBGSUg9NzU5OTk5OTo3Ojs6Pj44Oj09Njo/OD4/NTg5Ozc5Njc1MzMzNzYwLi0vMzQ0MTEwLy8oKCsrLTM4NTQ3Nzk8Ojc5Ozg2QTl4t6CjrqGmpqqgp6mnoqmwqKe0wbmxtbDJw7m0v8/AurGxuMSrrsmup6Oehpuiuq2nqJampaShl4+WaVFNUlZaWlddXmJnY19ZV1dXWFhYWVpZWFlYWVpaWllYWFZXV1VTUk5MS0hHYlxNT1JNS0hGSE5RUU1QUlRWWFpgbW9pe4J0UEJAf5WRkX2JlIyEio2bjZaVipKIhpWGeYh/YEpRbniKkYR8hIyJhH9/bn5/lHd1dniEjZlwUY2IioZ7fniUdmd3hYh+ioiVio2QkpaLg4mHlISajIGEkpuWnpyUpKOnqaWjnpuwq6GkpJCmqpahqpyipqiIdGtlXVtIUVFTTElVTVNJTExQSUhGS05MTVRLUVFPRklDPDc2OTo4Ojs7ODo7OD4/OTk+PTc7PDY7OzQ3ODs3Nzc1MzQ0Njk2LzMvLjEyNTIyMS8sJykqKiw0ODMzOTc5Ojk5Ojo6Oj85draco6edn6Guoaeopaeor6yqtry2uLazwry3qLrJubepqre4rbbAqqKbk4OPmbKfopqNoJaZlJGLjGVNTE5OT0xNUVdbXFpYWlVVVlZWV1lZWFhZWFhZWVlaWFhWVldVU1BNSkVAQJtrc3NJTUtERERJTk9oWU5RU1RVWm6DdHd+amldVY+JlIl0f4aBe4WMkoGSmYuPe4aPf3V/eHNudXB0jY2BeX2JqoV5emh2e45wcm14gYqMknh6gHuAdnNykndndYSEhIR6lYmIioyLgH+Eiox/lIN7gI+YlJuVkZ+dqJ6foJ6gqaWfnZiMp6SToKCWnZ6kf3FnYFxcSlZPUUdLWFJPSk1NUkpKSk1QSExRTFJUTUVIQTw3Nzs5OT49Ojs8OThAPzo6Pj03PT03OTk0Nzc5NTY3NTI1MjU3Mi8yLiwvLzIwMC8tKygoKS4xMjcyMTk4Nzk4Nzc1Ojw8N3aumKOhmJyes6mvqaWsrLCxqr20sry4trq1sqC3u7OrnZ+tq6y1s6WelpKYhpSklp2Mg5eJj4mGhoNmSklKSUdGSEhQVFRUV1dTVFVVVVZXV1dYWFhYWFlYWVlXV1VWVVNQS0Y+OTNOPH6eTUhKREA9QURqlH5MT1FSU1ZedYN9eWd3jZeYjo99Z3mBdnh/iY98hJiSgXKHj3x2e29rfq18c5CKf3uGkoB9f3RmdnyFbG9oc3yJjIeAbHlxfXBtdY9xaHGAfY5wQ4qEgoOFfnd3eouFfYt6dX6Oko+YipKam6OXmZ2bnZ6inZaNiqSbj52XjpaYjnVta2VhWVdYVFFKUlVUT1BOUVZLTktOT0pRT0lPT0tGRDw7Nzk7Ojo/PTk8Ojk5Pz87ODw9Nzw5OTk5MjY2ODU2NjMzNjIxMjI0LiwsLS4uLTAtKyonJyouMTM2Mi84NzY5NjY1Mjc5OTV5ppefnpagpq+srqunqbCvsay8uKy7vrmzraibsaitnJCXnqesp6SbnZOIln6OlZKVgHyKeoWAf3+BZUpHSEZCQENESUxMTVFSUFFTVVRUVVZXV1dYV1lZWVlZWVlWVlRTUUtENzhmNzA/qGlOSEM9OzpEioV6WkpOUFFUWF5lcHJtiKeqwH51eWJ7eG98eYiPeXyLhW9tjJF4c3hqan+CcpaRi4F9ln9JkphuaHd+gWxpY2x5hZCShmtzbHxucnuGaG1wfnONiIOFen1+e3ZvdHSFgnmBd3B8joyKk4OWl5iakJOWl5mXnpeMg4mfkYqSjIaQln1saG1ubVdVV1RRUVlPU1VVVFhVTU5ITUpNTktDSU5HRUA6ODk7OTk6Pjw5PDs6Oj0+Ojg6Ozk/ODY4NzI3NTc1NTQxNDQyLzAyNCorKiotListKigqKCcsLTEyNTAsNTU2NzQ4NUhBODk1d5mRm5manqStr6Ktqqi1r66stL+rvMK/pqOalaWYno6FjJaipJualJePdpF+hYuQj3x4fnR9eHV3fGZPRUdEQDw+PkFGR0dLS0tNUFNSUlRUVFRWVldXWFlaWVlaV1ZUU1BMRTFAmjMganJBmW87PDk1PICChl9JTU9PUldaUllcYKeIYpppdHplfnBtf3qLiHWBiIZ0bJmRdHN7amudjkx5hJKJhI5nMXaGc2x+fYN0ZmV0foSEhYBmaWx1a3B/fGdwcHtuko2Oe3N9fHFwbnVtgn53eXRpeYmCiImDlpOSkIuNkZSVj5eOgHmIl4iGiYZ/kId1aWluZ2NXUVlXWFlbTVBVVlpZTklJRUpKSEdCQUZEQ0c9OTk4Ozk6OTw6OTs6OjpAPDk6PDk4Pjc4NzcxNTI0NDUzMzY0NTAzMS4qKispLCwrKykoKycpLCwyMjYsKzU3NzU0NzhpTzg7NW6SiJmRmpakqK2esp6muq6rsrDCsrvDx5uXj5SZi46GeoWRmpaPko6SiXSKhHeLj4x/dnd1eHZveHNpVUZJRD88Ozk6P0BBRERFR0pMT1FRUVFSU1RVVlZYWlpZWFZVVFNQS0U4MC9cYLNHOVhQOzk0NDGWuotITE1PUFFWTEFJUUlir7OgcXx4bX1tcYOBhYF5hIaGeXKglHR4gHN1lIc1cZ2onY6hoYSihHZwhnyHfHOMrY2IgGhmYmlucm1wg3Vpb1h1b46akXZsf3p8bXFtcH96c3VtYnaEf4aAhZCRiouKkouRjIuPg3V4i4+AfoKAfY94cG5ual5aW11bWVhgX1NOW1tZWExISkZKRz9DQUJHP0NEPTs5Nz07Ojs7OTo5OTs6Pzw4OD06ODs2NjY1MTEyMTM1MzQ3NTUzMS4vLCwrKSopKSoqKikoKikrLzNETTIxNjY2NDM8dlI3PTdikoGSiJaRnaSnnq+VpbSorbGuwbO6wcaXkIyUkIGJfW6CkZOKhIuIkIh2hIVvmIqMf3l7e3F7dHxrb15KUEc+QDc0NTg7Ozw9PkBCRUhMTExNTlBRUlVVVldYWVhWVVRTUExFPDUqnUtbQC1nSTk0Lz+Sg6muX0dMTU5QTDdDTVJTREqGdoB8fHZ+bHaIiHx9hYN/jH52opl5foaAhJmFm5xhhqqfnYuCkI16dol+iYiOc4qXj4N7XGRxdHp7d4psZ2lheG+Fj4J6boF3c4R6cHN5d2tuaV13h32HfIiHj4CLk5eDjYaNhn1xhH+EfHV3e32IdG1xcmRlXlpaXVNbZl5YUVVZXVZHS0tFTEc/RkBEQz9BQT06OTc8Ozs9PDo6OTk7Oz0+Nzk+OTk4Njc1NDI0NDAwNDY0NTY1NC0sKSsoJycnJigoKSkoKCsrKy8wMFVxPDIzMzMxRX5XND05XIx3iX+UjJGdnZ+mkaCqn7Cpr8Cxu8a6lo+RlIh6hnZrgIySg36LhZCNeYSCdaKGjX5+goBzg4F9bHlsU1hMQUUzMTEyNjY2ODg6PD9CRUdGR0pLTU9QUVNUVVdWVlZUU1BNRkA6Mj0gI5ZjjFs1MzExaT9Hb0lGSUxNT1JMS1RdWVJKaYSIe4l5e3F8j4x7fImGfpeHdqGZiIePkpSljaypSIatr6+KgICTioKLgoSRqIeAmJiKnHNsfIGGh32OaGdneH5uhYaBhXGEhkdrgHdxeXZobWtfd32DiH+IhYx6lZ6ciouJkX97dYt2fHdtb3d+fXFxcGpaW1taY2JXZ2VcVVBRWFpRRExMR09JQ0ZDQ0FAQ0E9OTg4Ojo6Ozs6ODg4Ojo/PjY7Pjc1ODU3NzMzNDQyMzY2NTY3Njg7REZMTU1MQzcrIiUnKykrKywvMDArbnUyMjQyMEyBXDU9PF6EdHx+ioWHkY+WmJKXoJ2soaa4r7O9tJeNkouYi310cH+Kk39+jYOUlX2Gf4elh4mAg4iGeYmLgHWFeV9jVkxDNjAuLzIyMTIzNjY4Oj0/P0JFR0hKTE5RU1RVVFRWVVNRT0dDPzgwLCOHWz4/ODQuXZZwc6NVRklLTU5QV2BZcFpcXmqNk4eVgISChZGTfoWJkYGaloKgoZiVm5qlrZOZu7Gnu8fDp4qMoaWOk4mBkHtyg56fkZx+doWFi4+HkGlob4OAdIyGhItxhoJ3h397doV9bnZ1Z4GUj4aJiIiJiKKro5aJjpiAe4KJenpvZ2t4fXd8cWljXFlZXGhcYWZfWk9MTlhTUUlQS0ROR0NKRENBRERBPDo4Nz08Ojw6ODg3Nzg6PT04PD02ODY1NjYyMzQ0NTU3Njg2NzxCQj88ODo+Q1FeZVxHMicmLCwtLS4xKD+MWy4zMTBPg180PztudnBneIN7gIyAgZCPi5qapJyhrKarr7CXkpGEoZSEeHeAjZR9f5KGk5Z+ioGSm46EgYKMi4KKjoSAioBtcGpeQ0E0LS0vLy8vMDIyMzQ3Nzk7PT9CREhKT1FSU1JTVFRSUE9IREI8ODcvOUM+PDw2My5sk5dNUEhJS0tLTlZgY39nZ211nZuPmpOTi42OmoiTj52LoKGSo6mlo6yTqLaip8HCrsiveLqUmnyMoZ6YhJOFgo+hnpOZkoSKhY+YkZZscHWJi4GVjI2Pdo+EcWyFgYqWkoOFiHKJoZeHk4mPj5eltqmbjZWig4eThH5/a2psfX59f3FfW2JeWWZqXGxrX1hLSE9TUU5NTEZJUURETkZCQ0VHQj45OTc9PDo7Ojk4Nzc2Nzs6Nj06Nzg1NDU2MzQ1NTY2NjY4NTU2MzEwLiosLCkoKS46UGFcQCwoLSsrMCwncog3MjQwT4RiM0A8dW5nWXCDcHWHcXaRhn6XlpqUn5+bp6CqlpOYnmhmpJp+hZOSeoGSiZKSfYuFmZKRg4GBi46JhpGHhIiFeHh/aE5SPi8vLiwvLi0vMDAwMjEyNDU3Oz9DRk5QUlRQUVFTUU5QSUVEPjs8OkNGPz48NzUyPD9SNUhISExMTU5SXm+KfHOBfaCdm6emopmhl6KVnJ+onqmrn6isqaq1l6u/q7bIybfI0c++m6Bwaaupn4STkoWcoJqamaeRkYiVopqad3p+lJeRoZKWl4GUnnt2lZKrs4mNl6B9lZ6cjpOWmqSjp7awnZGZqIiXkI6BiGxzc3t8eW5mXltfXmFnY19nZ1xSRUtLUU9JSk1GRk1DSExGRkNCR0RBOjg1PDw4OTk5NzU2NTg+NzU9ODQ3NDU3NTQ1NDY5NTg6NjE2ODYzLzAuLSosLy4tJyMqO1hiQigqLDEtKEuXXjA2M1GFZjNBQGliXlBxdWBufWF3jn18lI6Oip+Sl56WnKqYnqpCRH2HiYiYjXmCjYuOjXyKho+QjoGDgImMiYWThYKGiYGAh3dfYlA0NjAtMS8sLjAwLi8uLjAwMTU+QUFNUVJTUFJTVVNOU0xFRUA8Pj1GSEBBQDg2NjI8OTtGSEdJSU1PUVlthpB3lYujp6q1vbilrqysqKm1rLG3srKtu7GzvpyzxKy7ycu4w7+3paOwsqytqqOLlpiFpaagopiCppmNoqqopIeFk6OgoKqgpKmOnLGLlaOnt7ucoaOwk6Odo56RpKKrsK2ztaKVpqqJmoqTipV6e36De2VeZlpjYF1iYl5mZ19bT0RKSFRPRkhMRktHRkZIQUtGQ0ZGQTo4Nz08ODg6OTc0NjU4PDU0PDc2OjU0NjQ0NzM5PDM4PDIwMjU1MS8xLi0qKi8sLSooKiYlNVhYLywwLCwwhIE4NzFQhWg1QUNbWFRMaWNXanBYeoV2gZSFiIKbg5KRjJLayJ2Wc1aXiI+InI98hoyPi4p7iIOHkY6DhYGMhoWIkoaChImGh4eHcW5hQEU2NDwzLzExMC0sKy0xLy00P0RBTlZRUlRVVVdVTVxRR0dEPD4+RkhDREA4Ozw1Qzs9RktJR0hST1BXgZOghK6js6qywcfEq7PFtq20wLO4vra/tMG2u7ukuMaptsnHtr65tKijtK2wsZuZkpqfiaevqqSVd5+kl6GrsbOYlqmtqK61u7K6rK+1orGssrW8uLSutaCoqKOom6mwrbO6uLionLipjaWPkpOgh3mBgHJXX2JVZGBgYV5fZmBbVUpERUxWUUlKSkVKSEVBQEBLREJNRjw4Njc7PDk3Ojk4NjU1NTcxMTw4ODk1NDY2NDk3Pj0zODkxLjAxMjExMzAsKiwuLCsrKyooJyopRVowMCovK2iSTzYwUodqNkFFV1FKTFxaUWNkV3p1cYGVfYSGk3aGfoCNe7+7o7yCtJSTjpuPhIiPk4qJeoeBjJONh4WBjoCBio+GgIaIhYqHkXp5bl1XQEVOPDY6NDZBQjc2NC8vNkNIQ1FcT1FVV1VdV09fVUlLSkFAP0dLRkZEOz5AN0Q3P0JKSkVHV1RQXo+kraSytMO2uMHMyra7xL2ztMG3uMK1v7C4dLG0prrFpLDGubGzsrSopLa2qrGgopabopKlsa2lraynpJigrLO6oqiyubW7vsy/xcW9vbPCt7q3v7i6uLqtrbGmsaquvrC9vMPDrJm7qJWuj5iZq4l+gHloVWFfVmhjaGRWW2NZVlRKSEdMUUdESUpBSUQ+P0JCS0BATUQ5OTY2OTo/Njo5OTY2MjQ2LzE5NTk5MzY0NjI3Oz0/NjoxLi81ODo5NjUwKigsLS0tLCwqKCgrKyhFUy8qMDBKj2s1MlCHbTY/RlJMQUxSV1RZVlp3anB/j4SBjoVve3J4iGK5oZmjiZWUlpOUlI6Ql5KHh3uHgY6WioGEgYp6fIuIhnyKgoGLhJV9eHp1Zk9cZEdFTDpRZGBbXlNGPztIUERaY1FRWVlaZ1pTYGFNU09FQT9JSkhFRkFAQz1FNkI/SEdLTVNaVF6Ur7i1u7nJwLu9ys28vMG8uLa8u7e+tbqzxmF1sqWxmp6rvqqlqKuqpKKytaCrp56Vlp6Yn66lp6eln6SToqews6iysry2wb3TycnTxsLFzMLKxMC+vr+8vLi0sLm3t8O6xr7EybCeuquirI+lqbeJgHxuXV9eXFVfXWhlU1hhVlNWSUVGTktBPkhEPUtCPUJAPUY+O0hANzk2Mzc5PjQ4OTo1NzA0NS8yNjM4OTM3NDUyNj84QD5HS1JUVFJQT1FSUUpBOS8sLCwqKygoLC0sL1A+KC40OIB9PDJLiHE5PkNLRUBKTVBSTFFdaG1scY+NhpBzbHJydIjVwLWaoI2VmZmRjpeSlpaOhoh9h4ONlop+gn+DeXuLhId7i3mBioKXf3R9emtlcHZZXVxQZWViYGVkXVtYWFxNZG1VUm1uX29fWGdlVVlUS0RCS0pIRkhISEhCSTlEQEhLVFRWXVpck7nAub64xsG7ucrLu7a6tri5tLi1ta62t5lkdamerXBeoq2cmKGim6Seq6WUn5+QlI6WmJeonqafn5qZg6OdrKSqsa23sLy41NDO1s/JzNLMz87Kx8C/wsq9wb3CwMXExsrAyc+0pLyxtbCcrLm9mn12aVtdWVdbX1hiYlFbYVRSTENCRkdFPEBGP0JJQkBEPTpFPj1KPzQ3NTM1Oz00Njg5NzcwMjIvMjQxNjk3NzU1NTVEM0VMTT41MTAwMDY6NDc3QElPSjsuJioqKC0uMCxATSsvNTRtiUkwSIl0Pz5CREBDREdLT0RSXFppYG+XkpGUbmxvdHWHs6yhoZ+LmZyZjY2VkZuShYqKf4iHjJCLiXyBhHN7ioOFe4p0gYqHlX90e3lsbXV8aXNlaWxoZmppaWBmaWltWm10l62kvYiHZ1tvaF1aWVRIS09QSktQS1RRSExBSkZLUF9fYmdqYpe3x7C6tLu+trHFx7awubGxu62zsairuK2NtqienKeaTpqejI+glpGnmKWVipOTiJGJj5GSnZuhmJuVloeemaaarLCor6ezs9PU1NbRy8/T1M7Tz8zGw8rQv8rJy8nSyM3Ow9DSuLDEvcS6pre7xKJ/bGFaW1tWXlZYZFlPXFhPUUNCSUVDSTxBRD5CSD9AQjg7RD5AST01NjY1NTs6Njg3NjU0LzEwMTQ2Mjc4ODc1MzY3QzVCOD8tMCwxMzQ4PTk3LC4sMTtGTD0pLCguMDAwN0s/LTQ2VIhXMESHd0M7Qj5FQkFDSk0/VVlTZldzkJGZg2hyb3l5g6GqnqaXjJubmIuOlZGajn2Ji4WOioqLkIh8hIJwf4eBhnuHcoOSi49+cXl1bHB4f3J7bnhzbGmAcG1jaW5weWl3fX7Lv8Pfp25jeG5kW2FgS1BSVU5ZXlBeXU5RTlRRVVRcbm53g3KWrristaiwtqutvcGyq7WmpbmnrK+hrLSkj7Gum5iYjJGUkYSPm4GNp5GciYOLhIqJhIuDlJWXl5SbkJyYmZmenquspKeirKzO0tXRzczS09PQ1NHOyMPU0cjO0tPT183S0cXS1sbBz8jIw6m/uNCcd2xjW2BbVF5RXFpPT1NQT0k+QUdCQ0Y9QUI/RkU+QD86PT09PEpCNDU0NjU8ODg4NjY0NDEyLzAzNTI2NzY4NTMzOz08RT1AMTErLzM0OT81OTAxMDIyLTJFTzMpLzMuMzI9TjI0OEN9XzJBhnREOj09ST5AQ0ZIPFZSTU9bdYeGi3dsd3B9foCgnp6hjI2Zk5SLjJOPloV5hZCQjouKiJGHf4J7cn6Agod6hXaFk5GJgG93c2xzfXx3fHOCeHFrgHJyaXByenlye77Lmn+NsoR2coV3aWFpXURaWltXZmRYZWtUWF1dYGNeY3h7f4uBmaqkpKKgoammqrG5q6a0o6KuoqSuoqexn4mmm5WTkYqSj4iClIlrlaKNmYSBhn6Rg4OTl6yLlY6Vmo6FkpCdl6ewoqChpaSoyM3Px8LL0NPR1NLO083G1tPN1NjW1tjV19XK1NrNytjW0cutxMPLiHBtYF5dVlJXUlpPSkdKSkpAOzo7RUJEPUNEPkhDP0NCOzw5PDpHQzQ2NTQ0PDU2ODc1NDMyNTAvMjU0Njc0NTU0NDw+PUU/QTYyLy0xNjs9MDgxLzI1NC8tLjtSMDE3LzUzMkVEMjg+bmI1PYF0TTk5QEk8QUQ/QTtQTEZLWXCAdX5pc3lygoqAnZWelIWLlomPiomOiI+AeISUmYuNiIiLiX6DeHN8fYSHd4B7h5GXgYRveHFtdX92eH10hnx5bId2dW59doV1eXudtYw8QYvGpX6NfWplV0lDZWNmY2hqZG95W19maGtuaW6BhImRjJ6foJ6Rl5mgo6SmsqSlsqCipZ+iqaGisZyHn5KSk5GLjouHhI+EfpycjI2ChIV6lH+CqpajjJKLmJOLfZeKmpGqs5ibnKecpr3Dxbm2xc3R0NLQy9LLydTO0dXa19fY1NnYzdjbzsna2tLWv8zNtHVzbGJbV1FTUFhVRUZKSUZGPTo3OkBCQzpIRUBFREJEQTs/Ozs3REM3NTY1NTswNjg5NDQzMzQxMDE0NTU4NzQ0NDQ5QD5EQkM8MzMuNkZUV09RSkFKRj8yKiguQlQyOTI1NC83Szc1PGBiQTxzdlY4N0FIOj9DPjw5UUVDSlRsbm9wYnFxdIaNfZeRnot+h5KCiYaFioKIfXiFl5eJj4OHhod6hHlxe3uFhnV6ho6OnXqNcH1wcHqAcnuBcoSHgG6OenV3fX2CdX98h4mwdFmqwreNkoFwbmM9XmhycXFwbnd3gmVpb3J2eHJ7jIePk5KblqCWiIyTnJ+bn6ugoaycopqaoKafn6yZjJqNkZOOhX2IiIOFi46gmZOIg4d+bJl5hJmHiJOMjpWMhnubiJOOraqUlZefmKautbyorb3Gy8jJy8vPycTSytTX2NfY19Tb19PZ29bP29rS1snVzJN1d2ZlWFdOUVJcR0JFSUk+Qj49ODo+QDw+SD1AQkFCRUE+Pzo4N0RCNzU1NDc5LjU2NjQzNTUzMjMyMzY0NzU1MzQ1OEVCRENFQjU2PEZOU01bbmZjbnNrYFY+LDRMRzg2NTQzM0JGND1XX2hMdXheODs/Rjw8Qjw6OUQ/Q0dSa19tZGJmbHaAiHGRkJuAeYCOfoKBgoV/hHx9hJiOh4t+hoeBd4N5bnt7h4J0epKejqF2j3aDdHWBfnSAhG+BkIJvkoV1fIGFenaHfIm4xqXDyriClpyPeHBmTmVjgnuCd4WhkIt5end7hIB8hHVtlJaVlpCYkYOJj5eal5emnZigl5+TkpejnpqrlpGRi42Tg4yFiYmBhpCRnpyZiIWLgYWXeoiJn5eQiY6Ki4J8oYmQi7ygmJOXmpyopqWtnqe1vsC/uMbJzc7FzcrR1tXU2dXX29TX2drb19va2djO28aDdnZkZmFdUlVVVE1LRE1EOz08PDk6PD85PUE3Pj9APUA+PTk4NjdDQTY0NTU9ODA2NjU1NDc3NDU2MTM4NTQ1NjQ1NjdISD1ESkU3OTI1O0g+Ozk6N0hQXFpSVVhLOVQ+Ozk1MzI3STg9TllNSHh4ZDU9PkM9PEA6Njo+PkBFUV9ZZmFdXGl0enlsiY2Sd3Z6i3x+gH+AfoV7foKRioWGeoWIfHZ+dW18fYd+dH+SnZGfg5J8h354j355i4pvg5uBdJmGfYKKhXx+kXuQqY+Qw6C9jJuknH6KhH2Jc4yLf3OmmpyYlIV7j5GJhGlHcaGknoyMkZKFiIuQkpWPnZuTlJGXjYyVn52UoZWTjo6QjH+Qj46LhImTlpmfn4iMlJGdkIKMf6aZiIWOg4aEgKWGiou4l52RlJahpqCdnZ2jrra6tKvAxsrQyMfNz9PS0tjS1dfA19jZ29ja2tnZ19u2dnV0Z2ZiVF1ZUk9PSENMQz09Pjk5Ozo5OTw9NkA+Pj09OTo6OzM3REA4Mzc4PjcwNjg4MzU3PDM3ODA0OTc2NzU1NTQ2RlA1RE5JODkzOEFLPTszQ0BJPDlEV088TVRITj85NjMzMz5DO1tYPjVZeXBaPDxBPD0+ODU4OT88RFJTUlhfVlhmbW1taYGOinFzeYp7e4B8f3yIe318i4eDfnWEhnpzenNtgX6FfneGm6GbnpSSgIyIf5iHgJySboiphXugjHyRjoOJhJx+m5GKjaOin5Gkr6CLkYuGi4GThldyrYufq5uQg5mckI+OW4OikYKNn5OUjIaIjJKSjJSVlZCMj4qIlpudj5WWkoyTlIaAi4mTjoqKnZeYo6KGk52VoIuKiY6dkIOIj4CDh4WlhYuQspickpSXoaCemZKbnaexuKykvcLHzcjGz8zQzM7Xz9HUrtbV2NrY2trX1tnanWx5cWNjWlpWUVVXQ0BJRD8/Pjo0OTo7Nzo7OjM8PD89Pjc7OToxOkc9OjI3PUA1MDY3NzI1NT82NTs1NTg1ODo1NzczNUhSN0dPSzk5ND1FSkI+MUZDTEE5ODpHWEA1SFdJNjYyMjM6RUNlWD8mX3lpX3o+Pjk8Ozk4OjtAO0JRS0tTWVBUY2J4bGJ+kYNvbniLeHp/e4F9h3x8d4aFgHNwhYJ7dXd2dIWDhX1/kqain6ail4qdkJSXi4qol3KKso2EqJKEmZSFmoyjlqCYk4mbnqKTqbCgkZWRjo6IloxvjbeEmsTIspyippycmJaRsZBkpM3HlY6Gh4mQko2Nk5WKhYqKhpaZm4+QlJOHlZiEgI+LmYiOkKqXl6SjiJmelpqIj4eXmIqFj42Bf4ePpYiNk6iZl5OWmKGYn5mTnJqisrSlo7zBvsfGxcnIycLK08zN1KjS0dbW1tja1NPazn9ve2RgW1xbTUlTWUJBR0Q7Qj44Mzc8PDo4PjY0Ojo8OjcyPzo5MjlJOj42N0JDMzI6OTYyNjQ+PTQ7PjY5NDk7NTc5NDRLUTxKUUs5QTdCR0lANjRKRUxGPjs4OEVUQTc+XDg2MjE0OjtFYFhBRmF0aExjWj41Ozo6NTs6PTpFTUZIUldTUkJjgkd2gY59fG1+iHh6fnuCgoN/d3aBg3xtbot/e314eHyEh4p+i6Kzp6Ors6KXp5+lpJaVrqKDkbiVkrOajKKhjKWbsKOknZiRp5aomayvpJiVlpWQi5ial6HAjqPJuKuco6atmJKbnbKdhYaoopyYhYmJjpWMi5OPiIGGh4mTmJWMi5STh5SYhoSRkJx1kZmylZakoYecmZKQi5CKl5uJi5aOhn2MmJ6JkJCcmpqTmJefk6CdlJ6boLGuoqS3vrTFx8S9w8PAxs3KydOmzszT0tHW2NPQ2LpvdnJZXlNeVE5ISU1FQkNENT46Nzc6Pzw8Nz00MjY2OTc3ND41OzU8TDw+OzxCQTc1PDs0Mjc3P0A2P0A3ODQ5ODc7PDU1T01EUFJMOEA9RUFHQTU6SkVORUQ6NkFAQlM+OURPMzIzNTc1PXZcPFJcdGlaTV1TPD04ODU2Nz06SkZER01aXFlKZmA7SISLenpuhYZ6fIR4gYaBfnB4fH59b3KNen6CfHiGi4mGhJKmu6yosb2wpa2zs6ijorCsipq1naO4pZWtpZeprbinpKOfmqmYqqSusKqamZyUlZGXoJiau7uuyqFqtrirsJSZn6Osk5e+o16qsoOKio2Uh5B8jo59g4aOj5SViIiTloyQlY2LjZaYk52ZtJaVq52KnJSSjpGSjJibipKekIuJlp+hjZSNmJmdkpuYnpShoJScnaWvqKGls7iswsjEtrq9vMXHx8LRoMbJzc3F19bRy9OfbXdlWVdQXFBORUM+PENBQjhAODg1P0c9PTY8MzUzNDU0NTRCNDk6Qk06QjtBSEI7OkA8NzQ2PEI5P0BCODc0Ojo2Pjw0N1RLQ1VRSjc8OklBREA0QUpITkJBPzZEQTxKTkQvVD0yNTQ6RUpcWEpaUW1ncHBEaWBLSTY3NTc6PkpAQ0lQZEhiYGJwSkCLin6Ac4aHfYKIdYOKgn9ufXx9f3B3h3eOgod8jY+MhoyZqcLAr73Gu7O0wL20rauztoyosq2tvaubu6Worbm4q6amoqKko6mvsrGqnZykmZuYl5+ipqWSpLqvqcC8ra6yuaWkqH6IhpytvbCCi4yLkIOOg5GPeoGIkI2NnImIj5eNi5WWlJGal52omrGakaycjpqPko6VkJCWmI+SoZGJlJukrJSWj5OcnZOgnZuYn6GUmp6npqSio7CypsHGw6+wurfFxMO/zabHxMfEvdbQzcTKhXBvXllXXFhMSkFLQUZHP0FAQzs6ND5BPT01PTY+MzQzMjQxQTE3QEJOPkdAQ05DQT1DPTs4NkNDNUJJQjo4Nzg7NUI+NzlWS0RXT0Y4PTRLQEM+NEVLSE4+QUE2QkI/QlNFNThQMTQ1Ozw4O0Q+OUxqal07V1JkS2daVU43OUdEP0NGXGVGYGlnWl1ck4yMiXuHjIeDjHWHkYqBb357gn9xfoF7lXqSlJSYkJOWp7PGyb/CzMLDuce9u6+rubuYs7e6ssCupcGkq6+8vaquq6OjnqerrrWwqpygq5yhnJafr7Wni6O6urbBvKypnbOlpKiUhY6pxMOkgouPh4iEhpWUjXmDjZGPkaGMjJSSjomXn5iTmZWYpqCvnIyrnI2Wj5KRlZWOkJWSj6GUhpefoLKelJmTn6CYpJ6an5uglJiepaSmpqSvraXAxMOuqLe2ycO+ts+yxL/EvLPRysjCtHF1aVlVWWdQTEhCTEtMSkFBPkREPDVBRTs7Mz04QjMzMjI2M0EwNUlFTj5JQEhSQEg+Q0A7Pj1GQTVBVUA7OTk4PDdFPjg+VkpDV09HOD80TEBCOzVKS0NMP0I/PEJGPUFITDkrRzwzNjc0NjRBPzdPYU9hRS89PjZrbGpgQDpIPj9FQmVaTWVcZlRia5mNloqMiJOQhol5h5SQgXKAe41/eIeCgpB6jaGWqJmambq9x8jJwdLJy8LNvcKzrby+qLq/vbvDt6zBqayzvL6qsKqkpaSsrrOttrWhn6+fpaKYo7O9qpuovcGktrivrJSyrKysl4eaqaalkYKMk6WWioF1ipJ5hY6SkJ6gk4+TjI+NlKOZlpyVlaOeqp6RpZqMj4+PlZaIfI+Wk5KjmpWfoZy1pZCelqSjoaWdnaaYnZWXmqSjqaeisqyou8DDr6Wzt8y/ua/Es7u+wbiswsPCwJdqdl5VVFlYSkpMSUZEREhDQ0FETDo0REk6OzQ8OEUuMTIzNTJCMjZTSE88SkJKUUVLQ0RFOkVMQjw3RVY9Oz04OT88ST86RVVJQVdRRzdBOks6Qjc5Sk1CSUBDPjxERzxCQ089MjBIMzY2MTcwPUI6PWpqSks1UVMzU3BwZE47RD1ARj5pSF9YYlpjY1aej5yOl46ekomKf4qgk4R4hX+Wf3+QiIqRgJahma6npJjCvcfDx8XTzs7Ny7zCt7C6vLS9y7zDwba3vK2zv7q9rq+ooKmotq2uqbK3mp6to6ehnau3uKqlsL/Esr25tKirtrSurpeWpayon5GNkrLFp5aOfJKVfIeSmY+qmZiTk4+SlZOknZOdmZSho6KcmJ+Yi4yPj56IWpCWl5KXpJllmKOfsqWVoZWrq6mmm56mlpiWmJSgpKiln7arqbm7w7SltLXLwLiqtquyu7iuqLi6vbiAaGtXVFJTTUVJUk1LP0FIRUVISEg5NUVNOz44PUBKLjMyMDI1QzU1T1ZOPExGS1JMT0hHST5JUT86OElTOzs/Nzk+RExCQEhTS0BXUEY6QT9HNkE3O0hNQ0U7Qz00RkU6QkFCRzkvOkEzNjAzPkdEOTQ9dGRNRztFKzpmfGdWOz5AQkZCcEVqSVJlYUxGpZScl6KXqZaMkYOIppOIgoeCnISDlZCQlI+aop6vvq+hxrzExMfGz8/O0sq/u7axuru7vs+1w724ubezsbWzuLOrp5yrrLmqqaevsJijr6Wno6W1wLCsrLS/w7rAurSnura5tK+Wpa2urqSLk5ShjXTCmn2XmYSOl5mMsZWbmpWSkpmZpaOVoJuXmqmdm6CgmYqNkJacYEqWnJqVmqWWVZewoK+cn6SUrq2qpJqgpZOTmJiNnKCnopq0qKqzu7u7qrGyx8C5pqyrrbKyo6GysrSkbWpiWVdNT0pET09QUjtHS0lHSUNDPjpLVT9BOj1FTTA3NTM0OkI0NE1XTztKS09VTlFKUEhISk9CPD5NUjs+PTg6PENSPkRIUklCV05JQEJBRjM+NThKS0NBPUM7NEVBOkE/PkhANSpCNTIsPmNdZzozNXRkZUBSNyYjM31oVzs6QkNAPVFFV1NzYldGSKqWmaCiqK+ZkZeHi6iWjoiThaCIhJ2Xj52hmqOktcm1qcW5wsPIysnIzc3Gv7uzrrm5wcHMtce6wbm1urCvr7O1p6SbqrS1qqmmrayapK6lpKisu7+orLa3v8G/vrmzssSyub6to6+1rLmmiJuXppt2v5+EmZ2Ok5qajK6XoZycl5SboKGonqifmpqqmqGnnpiQjZGdg252kqKalZ2inZGusqOqlKiql6mto6KepKeRkZmch5Sdop6Wsaapq7m2vbKyrr65tqCjp6ilppybrampi2BiXl1OSktGR01KVkw9TUVOS0xCQ0Q8UVY9QUFCRE8xOD03Nz9CNzVVWE8/SE5RWVNQUVVLUUpKRUFFTVE/Pz04PTtHUjxFRFFCR1lNS0FIREU6OjM5S0lCPkNCOTlDPjxAPjs7RzctMj4tMYJoTnpcLzBraGA8PUJCODZ6Zlc7Oj0uLVJgTVVIfmVeSEWrlZuin7uvmZSfjJOrm5GSk4mrjYahnoyjrZSjo7bGvrTAucLCx8nFws7Iwr65sq+5tcHCyrXGssK8tbqqqK2tsKOjmKq0u6appquqnamvp6Oqq727qK29tbi+x7y3trjCsr7BtKq1t6u+pY+jmJKioLyfiZqgmZefno+3n6mcpaKbnKGaqKSzoJudppyoqp6YlY+Um4uWiYykoZSdop2gta+lpJKvq5mqqpyco6KokJSUn4KPnp6clamkoaGztLq0rai1srOenKOlmpeVmKqhnnVdWl1bSEdFRkxRSU1FR0dCU0xKQkVHQVZTQ0g9QUdRMTtCNzpCRjc5XFlLQUxQVFVTTVdSTlVKRUBKSk5POUNANT08TlFDPz9QP0VaTUpBS0RHQDUzPUlHPz1FQTk3QTs8QDw8M0A8Lyc7KkiRQjpTSjAsW29XNzE8Kh1CgGRUNDktMTlmXEZDQ51wYkdFp5ejn57DrZyXpZiaqpyWmpqPqpaVp6aVrayYoqu2w8O8vrbBwsDHxL/Nxru9ubKwubO/w8i1v7C8t7m2pqSrrK2hoZmqqsSipKmspp6sr6uiqam+uKetv7K4t8e2tbm4wLPAwri1s7SvvqOXo5eUnJSun5Cio6Wjo6CQvaSpnqirnZ2hm6WevaGZo5+iqayhnZeNlZ6TnoePhI2Tn6SgnrWspZuVsKaZr6WcmaicnoyYlJ6DjqCam5KlpJqXq7G1saqlqq6sm5igoJKPkJWonpRlX1dfW01IR0pOTEhFRElBPlFJQTxHSUhcUk9LPUhPVTRCRjk+SEc1Q2FbS0JOUlVXVlFYVFJVSUA4UlFQTTpHQTRDSFFTSUM7Qz5HVktDQE8+SzwwNjtHRj47RkE1Nj85Oj85OzE1RDAtLC9Ndlw0S1o1LE1uVzwtPSkeI3piUTVDS1E5bVJGPEt4ZWFWS6Kao5yexayhnqyfnq6gkqOflqSgpqmsmLaxoqqztsXEvb+1wMK7yMK/yse1uLW0sbO0t8HFtr6xuLW5tJ+nrKqsnZ6epaTBpZ+qraCkqa2voaaovbWmsb25t7bEsrS4ur+0xMG5ua6ztbWjnaWVkpShrqCZop6pqKyjmsKsqZ6srpubnpmmoL2hnaSYq6yspqKajZqfkp6Jjld/lp+loaC4qqeTmLSinrGfnpmulZ2NmJOcgY6fl5WOoaOVkKWtsqqpoqKlpZWVnZiLj5GSpJ6JX2JYYl9LR0pKTkZFQUdLPz1KQjk5SkpOXVFRST1MVlw5Rkk9RE1JOEhiXExDTFBTWVlWV09aXklBPVdRSUs/SD81SE1YU0hBOkBBRFBIPz5RPks3MDk5RkU7OEc/LjY+Nzg+NzcvMT85MSUxUVVtW0pPMTA9Z1dEMTc9LSt3YFM2U1prV3JHRTY9dWVcS02enqGZn8SopaK0op2zp5OrpaCjn6yprJ27sKistrHHxcHCssPDvcbEvcTJvK+wtq2wtK+/xLS5sbC6tKyZqLGpqpqdpaGnwq2brLGbqqOusKmlqby2p7e7vq+3xK2zs8PAtMe0u7istLatqqKmlpWVpKyin6Cbp6qwr6+7sqagqamZmZiToqO4oKGjkq+wrKWnn5KhnpWej5CNlZ6bop6ns6amjJeym6KtmZyarI+dkpWSmX+RoZaPjZ+gk4umq6+kpqKcoJ6RkZqThYuRjZudf19jWWZkSUhMSlNCQ0BJSDs7Rj85OU9NVV5SU0o+T15dPUhQQkxMSTlNY1xMRUxSVFlbU1VPXGJIQT9aUUFIQUtCN0ZFTEtNPztCSEROQj07TkBBMy85N0NCOTdGOys2PDQ2PDI1LS80QDErJ1Z0U2VPPzEwNGJbTTIzPjA8dl1eP1tUXmVxQDg7SJZ3ZUE0nqOfnKDDqaSqs6KktaqWs6ynoaSyrK6pu7KtsbW0xsDEwrTAxL7JxLW/yMK0q7WosLmsv8Szt66ttrilmKqyq6qYn6aXrbu0m6iwmqygrbSyqKu5sqi6tLmzuMCqt7LEvbXHqL+vrra1qaesoZiXkqaloqKYmKWuuK6ytbagn6ikmpWVlKSgt6KlpZavsrKnqqainpqam5WXqJ+gmKGerrKipoyXrZikq5aYnaKPmoySlpiFlZ6UjI+bnZOKqKmqoaehmJ6Vi46Zj4GFlIiTnndiZ1tqaUxPTk5UPkNBTkM7Okk/NzdST11fUlZRQVdgXEJKU0hWS0g6VGRcTkZPTltXW1JQUVhdR0FCW1BCRz5OQzlIR0hPUD8/Q0lCTEI8MklBOTQxNzdCPjs3RTcrNjkxNDgwMS0vLjw2LSNCcWdzazIzLzFbYlozMzgwNnBbYkgwNUlvaFVDV0aMeWZDO6OjnaGmv6enr7GhqbarnrqxrKOrtLaxsLm3sLe4uMS9w8e9vcTCxsC4wMXAuqm2pKy7rcHCt7eqrbK6opStsa2ylqSnkaq5qp+msJyroK+0s6uptratvK20s7m3rLixw7u/v6bEq7G3r6irq6eemJmroaKhkZihsa+zrLC5mpypoJqXk5inoLappqOisbG0rLOorJ+coKCbnqWcopedo7Owmp+Qk6SZn6iZk6Gdk5aIk5aSlZack4iQmpiUjqmopp+jnJebkoWOmYt9i5WEjZlpZ2tgbG1XUFFbVUFCRVRAPDtJQTc6WFBkXlBXV0VZX15NTFJOXktKPlpjXk5IUE9cVVlQS1RXWkk/RFhQREY/TkA9SUdHUVBCPURGQk0/OjFEPzc3NTQ3Pz05NUU0Kzc1LzI1MS0tLiwxPSonKz1ccD0+MS4wZFpkQDE2NDdnWWBGKD84bH1nW1Y7iXtjQz2nn52iqb2iqrCspLK4qqa2tKygrbW9r7O4u7q+t7bAwr/JxLnEwsC/uMS9wbevtaert7K8vr+0qa6xtp6Wq66orpemqI6nu5+lrLOeq6KxsLOsqba0tb6usbK1rLC0s8G7xresvbCxuKysqqOypp6lqqCkl5Gan7Oqs6urs5qdp5yalY6hpqS0rqihra6usai0rbKqpJyfqKSelaKZm6i1qZaZkpKdmZ2fnZCqnJWWhJSWip2YnJOKjZaWmpampaOfnZaVl5J/j5SFe42SgouVZGtxZm9xXkZZZ1ZEQk1YRFo5SEI2PlxRaFxPWV1HW15dT01SWGRKSkNcYl9QTE1OWFdYUEpWVldMPUVVSkVEQU1AQUZISFFQQTtGREZLPTg3Qj02ODcxOT48NjVEMCs4MC8wNS8qLC8tKj0sLCUyKyo1SzEvJ19fYFUxNTA9YFZeOClDM1lVXGdLNox6ZkxApJqhpa23payqpq+ut6qvtbunprG3xbextr3Bw7W1usS+zMa5w8C5vrnDuMC5srSrqbq2urm+tKqtsLWXmKesqaybq6uOq76erK6yo6ugsa2zrq62srm4qq6usai1r7W8vcqzqre1sbSvrqahtKCbqK2gppaWm5qyoq2gpq+XoaSampOOo6Wos6qhprOtqralr7K1r6SZnaynmpifmpmrt6OXk5COl5ygl5aTqp6akX+Sl4ydm5iVkIqUkp6ZpKKioJiWkpOVeouPhXuMioKKkWptd211e2FGYWtZSUhaWj17SkZENkFiVGlbTVxhS1xdWlJSUmJgTEtFX2BgUUxJUFdWVU9HV1ZVTjpJVklIP0NLP0VESEhRTkE/SEhIRTw3PT46NzU2MDk/ODY2QiwtOCwvMDQsKCwvLSo3NikoOS4kOks1LiJUX1RfLzUoQ19RXC4rQi9KR1BbRzNjWVRLRJmXobGpsqqspqSvrrapt7W6pKy0t8m7tLu6v7+0s7fDwMzIvMO8tr2+v7e/vLG8rae6ube2wrarrLG3lJamrquoo7CplK+7pK2xs6eoo7K0sbKxtbG4tKmvrLKnt6+3tMTGt6m2tqywramno7agoKexoaSVnJqVsZ6nnKCqjqmjnpuWmKampbioo7K1rKiyp66xtaylmaCsqJucnpyUqbiclI6OipebopePl6SgnJOCkJSPnJuXlpWIlo+XmqecpKCRlpGQlXaEj4d7hIGDi4psb3Z0e35cTGZtXEpOZFw/YntHSThHZ1dmXExeYk1YWVdVV1RpXU9PSGBdX1BKSFFWVVJLSFdVVk04TVpORUBGSz9IQkNLU00/P0xPSEA7Oj47NjswNDE8PTQ1OD8pMDcpMS4yKSksLC0rLTkkMDQyJTlCNy4jQU5HZjI3J0diTFYlLUIuPUVMUTwzcmtJQ0ORmaWvpa6vq6ilsbO0q7eyuKGrtbnJua3Bu8K4s7G1wsLOxcDBvbS9v7+6vryyw6epubC2tr+8rquysZugp7GtpqavpZ2yta2rsbKsqai1u6y1s7WttK2qrKisqbmusrHIwLmlurCprKylqK6xpqWjr6SpnJ6dm6+ao6Ojo5Gtn6OgoKKrpqe5pay1t6WrrKmtsLauop6jqaqboJubkqS0mY6KjYeQoaCUjJScn5KQg42Skpyal5WUh5eSlZmmm5+ejJKRjZB2fY2FfHt8hoiIcHJxfXx9XFNkb15OWWdcRkSWW0c7Tm1YYltMYGJOVldWV1RYZ11RUkxjWVtUS0dPVFNOR0lWU1xOO1BeSUJESEpBRT8/S1NPPjpOTUM8PD45OjU9KzMyPTYyNDk6KDQ1KS8rMSgpKywtKiY1Ki8mMCkzODoxJiozQmM6NipIZUhKKzpIPjNCSFMsPpBrO0dIj5yqq6KqsaSppbO1srW2srKhq669zLqtwLrHsbSttMHD0cXGvsCyvsDCu763u8SmrLessre8wK+rsayfo6etqaiksKOqsqqwrLCvsK6rs7ynt7GyqbOqq6Wlo626raqyw7q2rbupqaesqaexpaqko66qqKKfnKOtlaWemJ6ZrJ2ip6miraakray4srKiqqKgrK+xrJ6gp6epmaOZmY+gppeGhI6Ki56gjoqMlZqOjYSFj5SfnJSXlYaWk5OXpJucnIqSkI2Jf36HhXx2foWDhXJxcIh1a19aYG5iUXNxXEs7hHxGP1h1WGBaTmRbTlZWVVdRXGFeU09OZ1hXVktHTE5SSEVJVlJdYzxQXUQ8RkhIQkc/PUpQTDo+T0o9OT89Mjo3OyoyNT4xMDQ4NSg1LyosLjMwOyksLCclMjM0JCwyLTg2MCkoMTtcSjAuSmdERjg7QjA1RUtYMUCVWT1MRZWYraiiq7Ocqqqwt624tq+rpqurvcm8sL22wq+xq7PDw87Pw76/tMDCw7q/s8fDqq63rbK4vr6yra2qpKeqsKinqLGltK6rsa+tsrG0rLS8pLizrayvqKufo56wt6uqrbu3pbe2pKmnq6uqraGpp6axsqSnpaGhrJeqoZWboKaepaKrpK2jn6exuK6upKajm6qrrqmdoqWkpJifm5aPmJySgYKQiYScn4uKjouYjY6JgouXopuQkJuLk5KRk6KZm5mKjouLfYaBgYN6c3+CgHxydYukh3hrX2BuZldlh2NOP2eTTEVieVdiWFJlVE1WVVZUT1xdYVVLTmhWVlZJSkhJT0JHSVNRWW9BTVhAOkpHRkVHPj5FUUg4Q0tFODdDNzI6OjoqMzk/Li80NjMpNCsqLCsuIzQuLSsmKCs3OSomNis8LTIsJjA2VlouMEpnQUE8PEIrOkpPXjREhj1HRkSXk7Cmo6uxmKuqrbastrKspqyqqbzAwLe4sru1pbKvw8nL0b/Au7m/vsG5wbnAxKyxtbGzusC+srGurKqrqLappq6vqrmwqLKyr7Ott6q3t6e0t6uspamqnKOes7OpqKS0taC3rqCqqKqoq6egq6ypubWqqqmpoqqgrZyTqqGdoKWipqOqn52ntK+pp6ujo5ilp6eqnKKko6CZmKCRjo+YjX6HjYeEnZ2Gg4mJjo2Oi4KFlKKajY2akJGRj5Kfl5iWjIqDf3SGgX9/eHSCfnl2fYCHnY9vcmdmcHdcYXOIa09emVZIbnlVZFZRY09NVlRVUE9YW2JVSE9pVFZTR1BZVUk+SUhPUVB4TE1WPTxLRD9AQTxAQ1VDOUFLPTU7RTEzOzo3KjQ6PSstMzQxKjgqKisqLCkpKC8qJiklMzssJDIpMjAyMSUvMlFiMDI/Zj1OWD5DLD5MVF8vSmk1T0Q8lo6xoqarr5qspq2wtLWwrKawqqi6vrvAsK25rqG2r8jHyNHAvr27u8G9usLAvr+usrKytby7wrGxs6qzqaS0qKWts7O5sKOuuLKwsrururCqrrasqp+qrJ+joLatqaGfsLOitaqeqKepo6qhoqytqL2vrK6toqiooKyZkLChmKKgp6eeqJuZqrGqo6CuoqGUo6Ojp5iaqKWYl5iej4qHlIh9jYaEhKOWhIGBi4aNi5CDg5OfloiRnJCTkY2RnJSXj4qGhnd0gX98dXh5f3lzcnhmf4akdmlfZGqAdGeIjH1TWG9eSnhzU2RTUV5NTVJaZk5MVllkWEdSaFJRP0JOUWFROklITFNJcVFMUzs8ST87PD07QEBXPDw/SDczQ0IxNTo5My01OjopLTMxLS01KSgrLSw0MiMyKScsJS47LiYxLjAtMTQlLDBMZzo0OF89YWQ/RjFDUFtbKkhNOVVANJGQs6Glp62kp6Stp7WzsqulsaequL7Au6+nuaqmr7HJx8jRw7y/vri9vrzIusG4sK+0sbq7uMCysrqsuKyitKenrLK3urOoqL22rra+sL2nrqy1rK2cqa+joKWtq6icnquzpbSom6qnqaOonaOpqKm9rLSwrp2qpKCunJuzo5aknKWln6Wcm6mrpp+cq6Kck5yipZ6Yl6ipkpialJCKgo+Ffo+DgIidj4V+fYuHkI2Pg3+TmpOFk6GMlZGLkZuSlYeJfn9ye3p+fGh4fHl0b297ZoR4hIlkYWdhcoR6bWd4XV5UP1d7bVRiUFFYS0xOcnVdSFpbZ1lFVWVQRD5KT0RDQTlIR0tTP2piSlE4PUg8PDw+Ojw/VDY6P0M0NUg+Mjs1OTAyNzw1KC41Ly0xMScvPktIMCUaOTAlLCwwOS8sLCs2JzE3Iy0wR2pJMTRYPWZiQUo3R1NgVSo9OURXPSqQlbKaoKCqpqWhrKW4s7OmqbGmrLjBvbWvoritqKiwwsnJzMG2vcC0t7+6yLXCtbOytbK9uLm9ta25tb6toLOnq6uwtri1rJ++vaqzwbS8oa+ztaqsn62wo5ymqaqknpulsaewoJ+rqaehqZykqKGtvKiusa6hq6Okrp6fraaXn5uho5yfnJqkq6Ocm6WllpeVoKOXm5elrIyekZGRi4KKgICOgHuZlIyIe32Lho+Ni4mEkpiQhpSjiZOSh5GakJOBiH15a352eXhjfHpwb29xdmd/c2mEaGVnX2xzjWxhaW9gbz1aeWtVXk5QUUpJTVRaV01dXmxXRFdfT15QSE1ERjs3SEVLTzxyaEtLOUFFOzs9PTs7PUo0OUI8MztHPDQ/MTgtNjg7MigwOS8sNC8uPS0qSz4pHTQ5JicuMzQuMCsvNCYsOiQ0MUFoWTE0Uz1lX0RMNktWZE8qOzFOVz0jlJmtmqGYqKWkoKikuLCvpK+wqau4wbmyrZ+5r6uotLrIy8i/tsK+r7S9t8S2w7KuubKzwLS6vbeoubi9qqO0qKmqsa+5saucvL2lsMG1tqKvtrWnpqews5+epKaooqWZn6yoqZ6gqq6moKaYo6igsbmfo7GvoayhrKScp6apmpqbn6SVnZ2bnqqnl5yhqpOZlJmfk5mWoamRmomOkIZ8h36CjX18oIyNiHiCi4SJi4uFh5OajomVnoiRlYKLlo2RfIV8c3B9cXR0YHp4aG1vb21ofXFie21pZWJdZYV+X1pzanFKSX9pWFpNUExKSFBSUUlPXF9uU0RYWlJoT0hLRUY1NkhCTEk1WmVKQDZFQjk6Pj0+OjpDNTk+OjNARjwyQDIzLjo7ODMmMjwwLDg1QiopLUIqLDQ7Tk5AOzczLS4rLTcqKjwlNTM8ZmQyNE0/ZV1GTz1RWmdIKj4vV1U1KJeep5qdl62hoaGlorirsqW0tKmoucS1sq2ft62urbC0xsjAtr7BubC0vLa+u76vq72wtL+wvMO5qLu6t6entaioq7GttLGonL+4pq28t7KfsbewqKWnr7GboaSgpaWgl5uwp6Gfo6ivoZ+hk6Skorewoaaxq5+so6+YnKqkqZ+Xmp6lk5udm56nq5qcnqaXlpiWno6Tl6KoopCJi4+GeoR+hIp6j5aJjYZ4gYeDh4uNhY2TmI2PlpmKj5d+hpeMj3mBenByd29vdF95d2Rra2pnZ4JsZXJra2RoWGFzf15abHVpWUV9XVtYT09LSEhSVUcyOl5ebFBEV1VZZU1ISkVFMDdGP0tCNklKSDs2Rjk0OT49PDk4QDg7ODo3QEk+ODw0LTM8PDc1KDU+MSw7QTEoKzY8IzhSPSoxMTM+RDUsLSc0Mis7KzEzOWNsODRIQmZbSFRDVF1oRS47MV5RLDKWpKOYlp2qnqaho6G4qrChu7ilrL3Esq+uorWvra2vtMTEvbO+urews7m4uri6rq2/s7S5rr/Bt6u9urSlorOrqKqzrK6ypJ3Dt6apt7ern7K8qqemqK+rmaOnnKWmlJihs6aanqWpqZyhn5Sln6S5qaSnraaepaGok5+poaGhmZudoZKbnZeho6ycnJujlpOVlpuOk5Ojp6SQiIqOhnmEfIWGfZyNiYqGeICDh4iHkYWVk5KMkZWUjY6Ue4OXj4p3f3xsdXJtbHNieXRoZmlmY22EZmdoZGZoaV5lYmlmWmV6YmBQc1RbW1NLSUdJT1NAIStpXmpMQ1ZVXmBLSEdFQy46QjxGPDZLUEQ4OkQzNTc9PTg5NT86OzQ+OEBMPT45Myk4Pjw6OSo2QDMuRTQoKyw+MC1OPy4rLTctMTE5NSwmLjUtODA1NzZgdEIzQ0RoW0tXR1VgaEIzNzdhTCcyn6Slk4+mp5yfnp6ktq2oqrq3p6zDwLavrKK1rqeur7fBwL2xwbewrrK2tbm4tayqvLSvsrG9wLeuvLyxpJ+2rKamtaqrr6Ggxayqp7G1rKy1up6oqauxpZidqp6npZKZpa6jmZ6kqqGboZyYoJ2ntqavqa6hoZ2doZWgpp+ioJmcmpyTmp6Vpp+uo5iYn5aVjpWYjI+YmqegkIeKioh4hXeCgoKch4qCiXt+hYiGhJCElpWPj5CRkJGNknuDlY6Fc399Z3lwa2tsZ3Vza2FnY2Jzf2FjZWZlaWliZW9ZXlhcbGNhTGdXW2BWSUdIS01SWD45YGxpR0JVU1xbSUhGRUEuPD85QTg5UkZANzpCMDM3PTc2OTI6PDk3OjlETT1CPDAqPEA7QTwtNUIzNz0rKiwvQSpKSy4vKiszNzIyKDU3JCs3LjcyNjg1XHlOMj5IaVpMWkpWYmZBOjNAYkYlNZ2koZKNrqGamaCXpbSyo7K+t6Gxxru5sLCjtqyrrqm5vr27rcCyr6+utq6zubKnq7mxr66ztru2r7m+rKaetaugobKlq7CfpsWhs6aws7C3rrWera6srqKZnaeqpZ6Vm6emoJmlo6mcmp+clZ2erbCmuKeuoqGamp6YnqOapZ2Xn5iclZqhk6mXramclZ6dlI2Vmo6VlJinp42MiomOe4F0goKLmIWGfImIhIWKjIiShZOckpGQkJGXj5B/gY2Ogm+Cf2d5bmhramdxcmtbaGNhcn9gZGdqbmtlaWVjbFxsbHVxYVNiaGNlWklHTE1PWVFQVWFlgVRAVlJaVEZHRkVALzw9Nz82PEZOYTg6PzI0OUAzNzgyOD83PTg+RkpARDkyLT1BPUE9MDVAOUAxLSsuNDw7SzYvLissLTI0OjUjMyopNi41NTQ2NVp8XTE6S2pbTVtLWGRjQEExSGJCJzSUo5yPj7GdnJShm6mzsJ+5wLagtMK7vbmxprawqa6luLq4uKy7sK2rq7eqtbmtpLK1sa+psba2sbO2u6epoLapnZ+qo6qunazEma+msLG3tq2snrGtr6qim52krKmblZynpJ6ZqqOllZqgnZKco6uqqLmep6Sgl5qanaGPa6OWmZ1xg5ecpYF2kqypn5aXopKKmJmAl4qfjniFko2DbWl+d4RxbIaKhn2EioZvXWRgZ4SXhmuLkJSSdXiLhH+DkH9miIBodmlmWF1pdG5OUGpjZnGDZl1kZm5raF1bXYmQhYdoT0tDOEVUZ15KSFBQVVZLSFJhcHRlRltRVVBGR0ZDPjE7PTY9NjwzZlw1Ojw3NTtENDg2MDpCNz86PkZMQ0IzNDM9QEBAPTI4QEU9MSwsMDg+RzcwMS4qLiovNjY4LCMxJzIxNDoyNzZYgWwxNU9rW05bS1tmYj5HMU5hPCsvjqSaiJaym52UoZyqrqujvcWvqbfCuL68rae2saarpLi0s7Owua6qp6y0pbG1oqe4trWop622s660rrSiqZ+0q56jpZ2nqJuwv5Wop7G0ua2upKitqqumoZ+coainm5ihpaacnKeonZOeoJmRn6iqo7Ovo6KjnJaYmJejiKGPkpqIoYiVn6J/pYCorZ+UlJ6UiYRyeIyOg4igdYeNaZeJZn5zeKBvh4eEfox8f6Ggn5l/e4eedIiOdpuKbIeCg21oZGR7bXJiVIZtY21pmHFYaXBuhlddaFpralqIcGx5codoh4RZXkZNPkZeTUVSVlZRUFJXVGdeTFpMUlJQRUZHPjw0OT05PDc7MDw8Nzk5OjY9RjU4NjA8Qjs8OT1GUUc9LjU8O0A9QD41OUdBODIqLzE8STovMDEuKi8oLTQ1ODMlJjIxMTU+MTw4WIN0MTVSa1tOW0xbZ189SzFUXjcvKI2nmISdrJ2amp2fq6qoqr/Dr7K6vLfBv6qkt7GqrKa0ta6vs7arqaWxraW2s5ustba0pqeos7Gtsqiunquhs6mgpKWboqWesbiVpqent76mrKepqqunpqKgmaGoo5mZp6OlmZylqpaTo5yVlKSmpqG2pKOgpJiVk5iTnIiukJiViqqMmaOdhrGBpa6flZuhl3qC1Kh/h5TAm8Z4d7Glt5ZkgMCcv3mEhHmPg3yQkJHKcZa8nMV7cranupB7gWyXsauxeWhsWLGub2VpvJK8bmh6bXGP2H1Sa2K2sn1/cJR1mqGqkFZOWGFPVk5GVVxYUFBTi1tXW1BAXERQTkNGSTw8NTc9Ozo5Oi49Ozg3ODs5PkY2Ojc0PkA+Njk/RVJJOi41PjtCPD9BODpKPjUyKjIyQkUvLjMyLisvKS0vMTg2LSAvNDE2QTE9OleDdzExVGtcT1tNXWdcPkwxWls0MSGPp5SBqKqfmJ2epa2yqbHCvbK1wLW4v8KrprStramosLWqsLa0qKimtaWoua6csrK2qqWkp7KvrrGmq56npLKkoqGgl5yioLKvlp+kobW6o6qooa2tpKKdm5qjqaCYnKmgn5ieqKiRnKeblJ6ip6OhsKOen6OWlpKYkpmFr2tqi46qf2iFloetZnGfnpWbqZdxrqGkfne6fGugj3axX2q0W6WAZZyQYGaBemZ/aXhqqWW+cmemjHaxanyxeHWRlGNtbaduXISgRWlnh5ZFdZxgfWZ7o6aBWF+Lq2h9j3h6aqg4Sq9bWFRtY1pLT1hfXFZWO06HUFdWL0lTU0pDRUY9PzQ2Pzs4OjkwPTg5OTk6PTxEODs6Nj1BQDY8QEhRRzkwNzxBQz5ARDhARz0xMy0zM0UzLy41My8rLyguMC46Ni8nJDIwM0IvPTtVgnYyLVZqXE9ZTF9nWTpNNV5YMzEbkqKVg62npp+jpKuyuK20vb6wt8WyuLvDp6mwrLCpqrGvpLG6sKWlr7OjqrmpnbKysKOloaqtsKyvpqifo6KxnKOdmZaZnZ6wqZicoqC1s6Grm6GtrJ+empego6mdmZ6loJ2aoaikkJ2jm5ehoKyfpaagmqChlpWRlpGahrWbtXmGqZq2mXeHs5u3f5SXmKyXf2uBpnqBhYaRlJJ3q2dqsVuse46HlHSJcI+GgH+IkJd4g4KKl4yDoI+FsHZ3n3Fra218i0+lWEhjY5l+Y2ilX3lxdVKShl1QqW5jcHuFgGGdL1KibltUa2dgTEtcZFhcWkI+sHdXWEEjTWlGQkRBQEExOT44ODo4NDs6OTw5OkE6RTo6OzY6Q0I4PT9LTkg6NTpBRkJBQUQ8RkQ7MDIwMTtGLDAuODQwLC4oLzMsPjgzMR8vMi1EMTw8U31uMytYalxPWE1fZlc3SjlhVDUwHJeglImzpqahrqmos6yqu7bCsLzDrbm3wqutra+vp6+zqqKvvKuiqLatpKy1pKWys6ijop2nqrOpsKimnqCgsJagmpaWl5ugsKScm6Sota+hqI+pp6qbnZaYoKapm5+do6CcoKOlpJabn5ianqOrm6WanJqioJeTkpOTnYTVk5m5cbHCf8aHfdaUnLt9nJeoko+djaR7jYaigaWCeat5j51Wr3uJfp9quVq5d4WEfaaClHyZeqp5jp2Qe7FtjoR0kLuGb5VQr6fFilGgemNgqmJzcodrlodeUrW0yIV+iHxjpDNCnXZdUWpoZFBAWGZZZGFKR0xqSlpTT1lmWkNDP0U/MDw8NTk8NzQ8Ozg9OjxDOkY6Oz42OkBDOzZAT0xIPDo8REhDQkNEPEVGODEyMTFEQi4vMDQ4MystKS4zMjM5NzEjJTUqPjM9PVF3ajYqWWlbSltQX2ZUN0g6YVA3MiWco5OZsaippbOqpbSnpLy3wbC6wLK3tb20tqiysaSys6agr7apm6i6rqSwsaGytLGhpJ6eqKmxqbSppZyenqyXmZmYmJaYo66fnJeorrGpo56OrKKnlp2YnKGnopiioaKhm6KjqJyfoZ6VmZunoZymlJubn6GYkJKVkJ2Ism5otXKsiHCOp3O0dXS2e5yZpo6QnY2jfo+eo36wdYKQ0tJ1XK58hX+kbpuqpmqGhX2tfZiZkHuxc5Odj3mzZZZ0hZ5un2aUUsmLWsJcn3liX61fdnOGYZaIXVnKnW/AgHRNS7VTVcZkVlJqY2VYQU9qX2xpUFVGSDk9V1JbVllIQj9KPDI/OzU9PDU2Pjs3Pjw9QztHOTtANzs+RDsuQ1JKRz4/PElKRkNFRD5JSToxNzQ2QD4vLjI0MjUyLSkuMjYsNzQyJh82MDs1Oj1QcWg5J1dpXEFOVF9lUDVHPWFNNjIuo56Rpa+tpam6rKa1pae2u7yyu7+4t7W8vLSmtbWjsrKjoKywpZinu66lsrGdtLiqoKWdoaqlsqisqqWanZupn5aVmZmTlKSropiTp6uxpqGWkqyfpZKUoZylp6CVm6anopujoK6aoZ6ekJaco5+cpZSdlZmjn5aZlpObhax8eKh3o4+Lh6lwrouEqISamqOLk5qLon2Sl4euhH+Bs1xyslOvfYKCo35x1313hH6PnYaZmnevhoqRnIh3tGGaZZqCgZVskluwV0uadZh5ZmCtXnZ3h2eXiGpdr3eVn493bDV5yK6zYERVb15nYEVQbF9wbVZVTS5lY2hSWVA7QURATDo1PzkxPjwxNj85OEA9OkM6Rzs8Pzo+PkU5LUVVSkVAQzpNS0pCSEc+R0s5Nzw0Njo+LzA0MzMzLjIuLjE4Ki4zMiUhMDM3Njc9UGtlPiZWZ1xAPVZfY042R0JgSTo3N6CdlKC3sZmzwa2osqeqsrq4tLm+ubizt762prm1obWtoKCprKCVqLasqLGyq620pJupoKCoorWnpqqkmZ6VpaKUlJ2akpakqJyUkKetsKWglJipn6KPkaKaqaahlZqmqZ6dpJ+tnaGdoI6Un5yfoJiYnJaXoqCUmJGnnoepfn+meaGPkISqcK2NgqeGl6GiipiXiKOBkIaUqnp/i515cLFaqIOCiKB4dNh/dod0p4GOm42SpHyVkJ+Ee7JenGSgfYKVbpNcq1xbk3+Rf2hnqmNye4BqmIZxXataiaCPa25kT0pDoVxbTXRdYmZNWmFfcnRfSlU1SpqRWEhFPUhGQU0zNUE4Ljs+MDVBNzhAPDY9PEY/Ojw2Pz1CNy5IVkpFQEg2S0lOQElLQEVOOjpANC47PjAwMjE1NCsqMDUvNywmMjEoJCQ2NjcxPE9lZEEmVWZbPzFUX2JMN0ZIX0MxPTeinZqavq2Ys8Guq62oprSwuLG1v7m6s7K5vKq7tqGypZ+mp6efk6uyqbCqtq2qr6GYoqCmpKS6o6OsoZebkaOglZWfm5WZoaGRjoypsLCmnZaap6afjZKkmKisqJWYqaifn6CkrqOhnqGOlaGZn6CSnJeclp6hlpePrJyPrm5ytHSpjHeLpnS0enW0gpSmpJOdjYmkh451uG6Le4uia2u2WqGGZZeXaKCip22UcrRzk5l/s2qFkoitanW0YZ1mom6GkmuXXK1gTqF8h5FSc6NseX9+bpiGb1yvVjycd2VUb24uW6dPYlJrZWJsWWJcYHB8Y1NZUT4/bG8yQkJAP006ITdANi47QDM3QzU4Pz8zOzxDREJKRk1JRjYySlRLRUJKNklKUD9IT0NGUD08RTUwOzswMTAvNzUsKywzMjYvIzAwLCwdMjg5LzlOYGVEJ1VkWT4vVV5hTDVGTV44MUE4pZqcnrqjnLG/rq2rq6e3qbivtcG1vbKxu7irwreqrKGdp6SinZKrq6i2o7Oorqqhl52ooKWruJ2jrZyWmZClo5aOnqGcmZ6fkZOVq7awppmTm6ypl4yUppqlraORl6uypKCeqKywmaGjkJmhl6CblpuXoZSdqZ2UkKuZh9SUmrt1scSAxId+1pecuHmKkpmOmIqMp4d5orZ1fXd2woKasmGDunnAfHW4YrWBjIepfZaCrKlxe391vIinoGmdYaaOr6F+jHSHq32+bnO8dLKDdXiBim2aiHBtjaR0vV13fVthebxqWlZbaXleaWBkZmJteW9YW1lDQUBxP0NHKzVIIic7PzEwPD83OkI5OT1DNDxATlpeYGBfX19aUFBSS0VGSjRITFJASk5FRk9CPEU4ND05MDIwLjg3LSouLzE4MCItMSwzHiw7OjA4TFhhRidUY1g8L1ReYEs1PExbLTZAOaean6K8o5eww6+tqaqssai5r7fFsbuzr7ywrsGyraajn6SinJyRqqWqsqS1p62kn5aaq5mnrbido66ZlaGQpqCTjp2kn5mfmpCWk6+5sauVl6Onp5SQlqWdpK2fkaCoq5+cn6mksp6ipY6moZWhmpyXlaSZkLCgkpWqn4WQmbaAkpKNuJZ4g5ObtndubG90b3mPhI6Jcp7Au7yae4GyqHCAdJG5g3yGhoqHjXuKho2XfaS7ub2cdXmzo3R2l3V0sHWYnmaGaY22dHJxd7aMXn95fYlng3lseWKLrHB0hX5YW6dpRGRZVGZfY11jUWdmcW11Qk1PTEQ7Wkw/SjM8MCA4PjsuMz1BOTk/PTs8QzZCVFlaWltbWlteYGJgXVNHR0g0RElUQktOR0VPRj9HPDc/NzA3MC85Oi4sLy0qOC8lJjIoNCQoPjcvN0tUX0cnU2JXOCpPXV09KztWVic9OjymnaGhv6aVssKzq6qorKuqu6+xxq+1tLC4p7W5rqukoqefoJ2ZlKykrqqmtqion5yWoaSerKW+p6Gql5WckaKbkpCiqKKTnpeSmJSytbasmJ6jpKKLk5KmnKarnZappaacm6Gpp6ejqaGRrJ6Xop6Xlpidno+wqZScp6KPa39qnKl5iXR/m492e2aHe76/wLpvkoNxlIVfcmpaXpuJYWOHjpVrYH+UY22cdmKUa4CalZRlXmBjcZqJaHKMfIaUZmp+cHR4fn1iW3h0gWhQXG6EfHyKalhseYFySUpvhXBOck1EVlxmYExaV2ZjX09abXZqclJPREVNPEhJPEw+MiwyQT84LzU/Qzw5O0A7PUM+UlZWV1laW1tcXWBhYWFgXFVHNUNGVUVKT0hGUElJSDs4PTUxOi4xOzouLy03Nj01JiIvKjIsJTs4LTdJUl9JJ1NfVjQpUF5MKDM+XE8nPzI+qJ+oocGkmbS5tqOspq6nqLWyrMissLSttqS+sbOnoaSqnaOcmpqsp66kpbWqpJuYlaKcp62pvqippZWUm5agmpOZpqmokZ+Qj5icsLK+rJunnaeiiZOSqZuopJycrJ+jmpyjp62in6qimq6blKagl5Wdn52YsaWZoqiZnZKfnaSmm6ikm52anJuRl4Jobn1yd5GXlJCEibSqjYWYlY+KjJiWh5SViYOTk5CJjZGUmZOZl5qfoZqblJ+bjYJ6pIVsaXuQfYB1iYuCcoJ4eXZ2ioB8iWpzgnSDdWR3fXZrb3lsX2Jbb2dNWFlmal9XWXB6b21mU09GUjlQWk5STygrOktCNjM1PUBBOTpDPjxFTlNTVFZXWFpaXF1gYmJhX15eW1RLQ1NHS05ER1BMT0k8Ojs0ODksMjs4MjApNklSTzgiKSsvMiM0Oyo3Rk9bSidSXlQxMFReOis9OF1LLDwtQLKgs6K/oqOwsbegqaazp6WwtarJq62yprWmwKi0oZ6lppyllpagq6eto6S3rKCZl5agmK2qpsGfrKSWkpyXn5iUlaKfnqOok5CYqKiyw6+Zq5yqno+Wlqmeq5yeoa2YoZudoqWvpqGkqJ6smJalnZmaoZ6enbChnaKnlpmUmpSho5ekoJmhjpeVi4uOkJiuj3yVm4KRgYmpqIWAmJaLhI6fiHuEkYaFmpGHhoqVjpuXjpCYnqOWmZKQnI1/jWWhs66EiYR3e5CKfnd5em9neZGBgYlrdYF5iHJoc395dYOGgWp0YnhlX2hkY2Rmalhre3Fqa1xTTFBEX1VGQD8/LDRARjs0NTs+QTs8Pz4+SE5OT1BTVFZWWFpcX2FjYV9eXl1eXVhWSktMQklPTVJKOzw6Nzg2LzM5NjQuKCYkLTEuLikrKjclKzwoNkNNTEQvVFxRMDVNWzE3RTRcRzU8LECzoLmvvq2qrbGyoKqmsq2irLOwxbCrraSzr7yktJygqKOhnpmXqKappqSms7WelZWempqwpq6+oayikZGempqUkpainJepnYSdqaujtMezn6mkqpaWmJqnnqmcoKWrlJ+fnZ+qrqilo6uhq5qen6GYpJ6cn52wpJmfqZSZmZ6TppuZqp+cl2aEk31lf4+bkGN5jGxoanqQo6tqZZqYfmiFimVlaWh6jaKOa2iMl5Gid2tqi5min5hzbG56hIyGeVhlXYWBXmyLioJ3XGdzd3eSgIiCb3iCeH9zbXmEc3aIh42CemiEWF1qc2Rdc4hpa3xxbWNdUU5XSWRYQEozPUY3P0ZENzE8PT9BQzs7REdISElMTk9SUlRXW15gYWFgXV1dXV1fXVpVT0RIT0tTTj0+PT02NTM1NTU0KiYmJSwqJS4rKyc2KiQ7Jy9BSVtKLjZaTzYpRVkvRE8xWUI7Py49pJ66vbmvq7Owq6Wora6wpq6usL2xqqilrrCwn62YoKSeopqap6ycrKOmqKmzrp6WpJCjsKa2uaWuo4+PmqKak5KboJmZppZ7pKuiqLTDt6Whp6+fnZWeo56jnaSqqJKfoZ6gqq+pqqOqnqabpZ6noKyWoZylsaSXnayWop+blKaZoKyZn369hIlztHOFn4ataHe5xLhxkqGjeqaYmXSqgXzLwMC6cYujh4OefZaYiJ7AvYKWnZ2NnMHBfIF6kYyawsB9aqWyb42Bb8p6f5t4koSPgHd5gYB5cXuAhnB3hYuSeGx1kWJlXndjX2WAYl50aG1kYlhLVklRWkhPRDJJRT9EQj4vPD8+QEE6OERDQkNFSElLTU5QU1ZZXl9fYV9eXl5eX19fXVxTTVBHVU5BQD89NjQ2ODI2NiomJSMpKiYuKyopMTAfOSojPklbTCojQ1AvI0ZbM1BZL1VBQjsvOJWiucO0r6+/qamUo6+psK+tprK2r6qmp6axq6CrmJujoJybqqeinauipailpbSknqOTpq6tuLSnr6KSkZmdppORoKGYm6CeiKarpKutv7+xoamvqZaSn56imaOkqqOToKGenayuqKulo6Gkn6SlnK2pkaSbqa6qnJ6rna6jl5iml6KkmJ1/zpR6e6WCepaXm1+tj12OqIChoXynlZt1q4OAr15kjKp7qIeFoHSXk4izY4KrhqCNjbNqhK90fJaHuGGCrVmjzW6Qdnvbe3+ZcX6Ik3Z/ZXuIdnZsfodtfYWPkH1rgIxfcGpvZmBfeGRbcWhqZGZgUlRTV15KT0M1QUhFRDg+NTtAP0E7PThAPj8/QkRERklKTE5QUk9TXF5fX15dXV9gYF9fXVtXT1VKPT8+PDU1NzgxNjQoJyQhJywmJi8oJiszHTYwJDc7U0wrLC1KMCc7WzpMLSFQQEY0LjGswcC/tLSwt5iekaOqqa21rKayrayspKymsKqhp5yappicoq+foZ+op6OmoZ+wrJuelqaurbGrqKyglJKbn6WTkJ+ll52oo56to6qwqL/Fs6ipsa6Wk56copehqqqflaGenZytrqapqJulpaOhqpKss5aloqqqnqSnp6KyopObp5yhnJaVkZehcoWMmHaFqIdxsXydcax9oKCBpY+eeKuCfq1/nXKtf6yHhp92mJJ7fJd+qoiijJGLnH2reoiSj59/eq1WnMR7kHCTwX2BlW11cIxtZndlhm9hd25yboiJj46DbI+NY21zdW9gZm1kX29pam5mY1dTXGBaUlJDOUlJQEM8PjxARkRDRUE9PDw8PkBAQUJFRkdFQENJU1dZWlxdXl5cXl9hX15eXVtaUkM+OzkxNDc4NDUyJiMfHCAxJyAxJx8nNB41LSY3PVdKLTwoPTEpM1ZARiEcRztDMS0rr9PGx7Kzn52jj6Oioq2vt6+psaeoqqiuq6unoqSdmqOVn6aroKKmoKioo5+esK2Ym5aop6+tqKepnpeVmqSikpShrZqdp6OvrKKstam5zLGtpq6rlpWcnaKZn66snZahmZ6eqbGnqKibqqejoqqar7GiqKuuppqnq6urs6STmKSnnJaThaRrpHWKeql1e7JxgqWKmIxwiKCbh6RfYVKrhYCug5x1roKohoafepmXhntmgKOKpJiGgaN9qX+BlIauXnuoVZ2ikoF6o5+AfMSwxYxzr7SzuXJiqa/CdWiLi5aNgGuXkG1reHh3bmtmZGRxcWZ7aWNcVl9pWFhUTExRTENDQUI7Q0BAQkk8PTo5Ojw9Pj4/QT04NjtETFBSVFZYW15eXVxeYGFgX15dXF1bU0lCNjc5OTY2NCwmJCIgJychKy0iJC4hMy0mQERXSCxHKzU2KjFQS0wjIEE5RDQsJ8LJ1dbAoZmrqKGvop+wtLCwqa2jqKeqq6uopKagm6WfnaanpqSdrJqirKGjn6+jnpuTqqS1sK+hqZuclpWnpJGboqifoKacsKWiqLGstsextamsqZWRnZ2imaCls52aoZScnqeqqqKtmqunoKGporKsoaqzsqKcq6mwsLillJelqZqdk32qbZ+EiHareXywboKki4mflpWeloHSuLS4yYGCsl9hlKmDpYiHoHqYlpp5qsl0mqOUqKmQkpqMfpqJmsbGd2WhgqVzgZ+Ogn2vXm+1Y7F1S6OGbadHg5Nkjo+bkXtvlI98bXl0fHptW2VqcnFmgGleYVhjbVxeWUlMTEpFREJBPUE8QT9KOzc5Nzk5Ojs7OzMuNjxBRklMTU9RU1daW1tbXV5fXl9fXlxcXFxcWE1CNzU3ODUvKSglJiUkJiksNUZOUFBNRkxKVkYqTDAvPi00TlRRHRw7PEYyLCSopMDGua2psq6tpaKds7msq6Gmm6imqqyppqCmpZiro5+vrJ2moa2an6mlnae1oKOYlKirtrOsm6acoJaQpq2Smpyno6Cqp66ho6epsLPBsbKpraiUiZidpZuipK+ml6KVmJylpamZrpyspqWdq6O2rKGxubCenLCotLS1ppaZqaWcoZCDnk53moKAn3qEo3yCpISGpp+cn5SEuHx8ermCf8zGw7Z3m6KRi59+mZeXinafl4qkmKSofq+Fm4OehKx9mZRhpWyjcI+FkIF9loRyrGCkc3GAmmG8fVJVdY2RoZV6fJCOh3J5coR+b1tsbndyaoFuWmNfaG5iZF1MTFFTQUhHRkg6Oks+QjEwODg1Njg3Ny0qNT09P0JER0lMTlBUV1lZWltcX19eXV9fXFpaWllVU09IQDc3Mi4sKi4rKicmP1FUVldXV1lYWFdVT1RGPEUyOlBbVBwbNj9HLC0gjIeZqaykq7mrr6CboqyztaafoZWmr66uqKeepaWapKehs66iqaezoJqppJSjtaOjlZehqbW5pJyjnaOTkKKymZ6bpqWhoq+tnKSoorWxwrCtqq2qkYeRnKedo6ScpZeemJiZpaOnmK2hrKOkl66lu6yit7aunp62s7qztaman7GjpqCIkNK1w7d6h46FkZOPgKZ4lKJ3jKGShaWDi3Krh4a0bnJpmaSdlYmffZeZh4eQc66CpZujjaaKk5yIlJCabXCyXKVzk3qcbJl/e5l+bqlhonJyfp9ic7K4aHeOkqSXfImKj4h1e3iNgWxod2l4c25/dFxkZG1tZmhgSlpXWDxIRj9TM0BGPjwqKDYzLjAxMykmNDo7PD0+QENFSUtOUFJUVldXWV1fX15eYGBdWltaWFVSUlFGOjIyMzAvKysoQFFSVFVUU1RWV1dYWFdVVVZUUU9RW1UlITJBSCMpJZJyjYquv7+8u7Wel6ikrraiopmVo6qnramqmaWin6ahoLWnoqmnsaSUq6OPpK2knZCamqq0tKSdpZypkpSXr6CgnqajnKectZmgqqO1qsKvqaupooyEj5yioaajlZqanJiamKajpZepp6ugpJuspryslb2wrZ+jsbS7rbapnau0pqqafKiRfXyweIuApKWInG2yb6GHrXyij4Ool5qBrImGrYWglKigo5eFn4GZloF7kn6rgZ2Zlourd52gj4iTkn95r12jgXymp2SegHyXdGuuXaVscoWZXWBbjKBtlI+kl4GSipOId3mBln5qbH5ifXRtf3lfZ2Vwb2hnaEJZX1o9SlMyUzhBQUM3JCQzKycnMywgLzY2NzQzNjpAQ0ZJS01OUVNTU1ZaXV9hYGFhYV5dW1pYU1BPTkk4MTUyLiosQVRWVlZUVFVVVVVUVFVUU1NWV1dYVlVWUUhGSUojKCi8kpuEqcbDt8G0n5qtoK65pqOOmqOkoK+uqZ+jnp2tmJ65oKKroK+qmq6hkaqppZaKm5CusaynoKibrZiZj62ioZ6loZmknK2Xn6iltqi+rqSpo5+MgI6bm6CmnpKUmZuUmZmlo6KYp6qqoaKeqKi8pJfDraujoq20vK2wqaO1saqtmnevfpGLnIWHfbqtiZhksIxllq59oZCEp5ecgq2LhbCGp5qkoqKRhaBcbGuCs2B/rXx7goCybGZumZeLiLFafbRbpINryKJmn4F7u1l2tVqyfVOvgXqsWIChbZeNppmIlY6Sk3h3jJt8Y3N8YoN3dIB8YWpmcG1mZWVPVWNcQVRdPUgoPjk9NCEhLCQfMi4gKjEvMDQ1Nzk6PEFDRkhKTE5QUFJUV1peYGBgYWJeX1xbWFVQTUpHQzU1My4vQFVZWFdYV1hYV1dYV1ZXV1dXWFdXWFlaWltcWFdXR0I70p+zsbe+u7TBs6Ocraalt6mgi5mgn52ysaieop+dtZigs6iqq56wrZ6snJWuqKKOiZuOr6ypp6Ooma6Tmo+pmqGdpJ6Zo6KlmJ6iqLGou66kqJ6dj32Lm5ahoJmQkZqckZmXqJ6fl6espKOkoqSpup6gxqemqaGstreusKmhvrCvr5eCqpKjr46bgIakl5iQgIC4w7qEj52ThaiZnYOsi4Oviqicm6arkX7VvcKqYqS/vX1/o4KD17q3tYSUkoKevb6EaqOBb6uEbp1/erKxx4Nrq7C9rHl4or67dICVjKSajZmOk5l3f4+ZeWJ8eWSMZniBe2BrZWtqYlBiW1NpXEBUYEJMKTw6NC8fHyQeJTIgHCQoMDQ5NjY3ODs+QURGR0pLTU5OUVRXXWFcX19hXmBbXFlUUU1IQz48QT81PVNZWVhZWVpZWlpZWFdXWFlaWllZWFlbW11dXFpWWFRXWruVtLSxwLqyvbOina6nprOmnYyXpb+ptq+nob+mprGbnrGcuaifra+lp5WUr6yXjIOaka6mo6yhpZyqoJiKo5OmnaebmqCoopidoKusqbisp6Oal5N7iJmSppuTj5CYmY6Xk6iYnpaop56opqCiqrqeqcWjobCkrLS2rLKso76rsbGcdXaqpbeFZYmfcGeskIqPbm53pZCboIJ2sZuXcZGOcpeppJuYr6RybG1tZot4b22DmXGAemlwaWeJlpWXcWhphYZncYZkXYpjaW9aXWd+eKZgYnKQknBmZICNko2glpWXjpOaeoWNk3RkhndnjGp4fnlkbGNmbGJLZVdKa1k6UGREUCdKOSsjHCAaIiwpGBsYLTIuNTo0NTc6PD9BQkRFSEtMTU9RU1ZcV1pcYF9hXV1bVFBMSEQ9OkFCN01YWVpZWVpZWFhZWFdXVldZXV5eXVxcXF1eXV5dW1tVV16ola20qbq6srSqqaKun6SzqpmSvbHDx7y0qZ6/q6yjoKeroLqjpK2sraaOlq2qkIyFlZetn6aqop+ko6CRi6WSppmpmZajqaCWnKWlpq65qqyZmpOSe4SXjqaXjpGQl5SNl5Smk52Wp6KZr6Wdoqu5n7DBqKW0p62xs6yvrqq8p7G6mIyiqaa2nImWopiGqZuQlJ2SqrSanKStorSYpKKfoqOdoqWilqynjJKTjYeTnZ2VkJmTmJCOlYR/pJqXlY6Lk5KKkIeEfmeMgXSDd3SHjHGnbX2Wk5SUgYGPj46Nm5KelJWTnYCFkotwaI92b4l3dnx5aWxlZG9kVWFYQGlaR2JfTVgrRT0rJiE2NDAvHxwgJTIoKjc5OTQ2OTs+P0FCREZKS0tNUFBRV1VWWV5fYWNdXlRRSkVDPjk9QEFTWFtcWVdYWFhYWFlYWFpbW1xeX19gXl5eX19gYGBfWVlgpZapqqS1t6+uorClraCht7GRjqrEvMO5tqmhpJ2bpZ2wqKS3p52ptaeokZiso4uIiY+cp5atpKGaqJ6ek5Wkl6iaqZmUpqCjj5qnmKC0uaeqmJqQjXyBlYyhlIuVkZWQj5KXpI6dmKeemrSjnKart6ivwq+kuKewsLKuq6y2vKOyv5qTp6SmtaKSnaaejamfjZKfoq2xm6Kks6uymqainqWrn5+enZetnpOaopyUkJermY2YmJaQlp6Rh6CelJSFk4yPjZWMgX9mjYh1iHd6iYR0nGqIkpaVkol9jJaRkJaRn5Cak52BhpaFeHGUcnmJf3F7fmpuZF9waWBcX1ltYlBgYk9YOUZGRT0yPD04LyomKykmHSY0MDY2NTg6PT0/QUFDSEpHSktMTVNTU1VaYGBpYGVWUEpBQ0I7OUVNVlteXltaXFtbW1xdXV9eXV5fYGFhYmFhYWBiYmJkYlxbY5iWpKijsLOsrqOpp62gqLWqkI+bo7K5raqroaKZepyhsKSmsaiWm7imo5SYqZyOhoqJm6KQr56klqigoZKXmZyui6qWj6iYp4yYqI6duLWjpZibjYl5gpSMm5OKlZGTkI2RlqGLnJynnZ23on+DrrWisLB1pL+ks6F5e6Kttb6XeK+moYqAqn9kXGJ2n46knoOWfm2UtZ2kqbCspWagoZR0epuYcIGZqplsf6SpimWcpZyRl5iWi5KbkISdm5CUg5OHjo6SioV4a5CIdodxfIaBgWFpiYyVk4xbdpWRZ2eOjHJ5oZaVZHiXhYB2l2iCiYJueX9qcGVfdm9ra2dcZWNhYW1RWT1NTU5SRj1AVEI5MS8eHyY0OjMwNjY3ODw7PkBBQkZIQkdHSUtMVFVVWV1gaGZnWFFJPERHPDlVUltgYWJgXmBfYGFhX1xdX19fYWFiY2RhYmFhZWRjaGReXWaclqajobCxrKuqpamupKetpZKWqrSusKWZqaWql3OLnK+gqKunk5a5oKCPnKSekX6IiJqejayapJWnop6Ol5KehXWuj4ilmqiRlqOIm7mzp6CYmIuJdXeTjZaTipOQkJSMj5KfjZmepZibsZWAjJu1nbSMko+9qKJ+p6N7pbG6g46PqJ+EjIaPsamvjImWopp5gIushp2eo6mrqYmWh5l3ppx7iJyBmKeDgXuds3uKhqCYmZSYloGQlpaDmZpieYiRhI2PkouEbnGQiHqCcYGBhoCHdIeFl5N4lmiTdKCac3uZgpyZhJh+kYiBgphpjIyEanh7cXBnZXhuaWxqXGRpaWVxWlxHU0xRQEU1LVlUVDYpITA5PT42NDM1Njg7Oj0+Pj9ESUBJRUpLR1JYWlhbYWFpZllRSDlETDw+YlZeYmRlZGBhYWBiYl9dYGFhYmJiY2ZnY2JhYGVkY2djYWFonZikn6aurquoraCpsaenqqWZlK3FvK+glKWntJ2Pg5ysnKeioI2Qvp6ZjZ+aoZF9ho+Yl4isnaOWoaGSjZSJhoCRqI6Hopyjk5adhp65saedmpKOhXB1kImVkIqUj46bi42QnZCVnqOUnauHn7SJtJqui8qIq6+Kt4WNsISzsYWpjqmZjZ18qI9ye3ecjqaWaJWkebSMoaCoqpOZwoKAq4mZoXKegJulfZeFlbOBoX2hk5+PmJiAjpSciZiSi3yFlIaNlZOKhG50koaAe3OHgYR9hXWGg5iBj8VmgKmHj6JqnYGel4CZgIqLg4iYb42ShGd3dHt2Z2h1cGdoa15ibmxmbFdkRl1RTDJFNDZNYGM3JjM8RUdEOjYzNjU4Ozg+PT0+Qkw/TklKTENQWl1cV2JeamxcUUU9S01ASWRYXWNmaGdiYmJiY2NfX2JhYmNjY2RpaWNiYmJlY2FmY2JiaZWXo6CwqamopqygpbmxqqummpSeoqSpoZSjqbWir3+gp52lnp2JlL2ak42gkp2QeYOWlZGIq5mcm5qihY+MdpubjqCRiJ6jm5aYl4aiuKylmZuMjH9ibY+Lk5CNj4uMl4uOkJ6Nkp6gmKCnfqGnh62doJaukKCenZGHgqCNrbGIpI6sm4yafqJ2gJmUa4GrdU2reIeNnZOcqqmCqqt+hKF8e6dqnoCTbGeXhpi3iZ5+bmBjWIOXf417ZGeLc5l9eZdsXHyXbmBTcYVcYG16hGBZZYJ+hYGZcaira4OjbnKlcJ+CnGdknmxabIh6ZVlfgn5hV1BvdmVudHFqam9daW9sa2hXZk1dWEU5QTRHQ15rNCtJQ1FNTj04NDg1OTs2QDs7PkJPPlFSS01CSltdX1deX2N1YE1FOk1OTVRiXFtmZmlpYmJkYmRkYmFiYGJkY2FiamtkYmRkZ2RiZ2VhY2iYl56guaGqpKaskqK2vauvopmWn6Clq6ufnK20oaeRoJ+gp5yZjpm0mZCLnoyVi3WBlJGNiqaWlpifnn6ThYWso4eckYqYqJiZmZGHpa+mopWZh4mAaW6IiIuOjomKjZGLjpGgi5Kdn5qhpX+TgY+joZSgd5yWkKeDo6mAhqywh6V6jH6Emn2icHOTh5V7nox5bYeci5qSnKqcj4edfYOidHemZ55+d6VemHt9k3Oibpi3tLpzk4iBgLaoZIHGuHxxlbaMcYCbo2N0rKthfmqds35ufoiDj4OMmHGAo2xzpHOegn6jXpyZs5Zve5ees3RyW56ygmlicHR1cWhvWGprcnJlW2ZcYUxEPUQ1UUFZcDI8UkdfSlI9PDM5NTo6NkM8O0BJUD9UTk5RQEVfXltZWGBge2RJQzhMV1VWY2FaZmZra2JiZWFkY2BhYmBkY19gY2tuY2NkZGhkYmdmY2holJaVo7mZq5yToI6luLatraCaoZuio6SsmpqxrKuSl6CZoaSZmpSerJuLiZF4i4VxgJaNio+hkJOUnZd9kYmOqKCGmI+KkqKTm5qMiqinpJ6PloeEfmt7h399j42Di5CQiY6TnoGVm5+boJ+LiXecmKKNoHKhjImpiZ2okZiqrYCujH56oJl5o5N4gHOXiIycfZWfh5uOmp2oiKNkoX6KlpCbjW2eaJuOb5qZe4CKp31yaHSqg56Dc6pnlJpdm4V2hJ1oqmqBuGZcqXCBnGGVjF+ndneKioCdaJp1h5OSmI1/nm2ZkGqmmVyofne7an2pWo6EXbNnXG5xeHdraVtwaXd4YV5kVmFCUEVPN1ZCUm00SlpaXk5aREAxNTE7OzdIPzpDSFU/WVNYXT5EYl1WYFFhY3xpRUI5TltdWGRmWGZmbm1iYmVfYWFfX2BgZWNeYmRvcV9kZWVrZGNpaGdraZadiaq2nKiJY5WcrLuysKydpZuap5+drJmdsKeqnZejmqKfmZaWoKOZhomNaYiAcnuXh4yWloSSlJiPeoqElqSciZWQhoudkZybiI+ooZ+ai5CKgIBpgYZ5f5eMe4iNjoeOlZl+kqGeoKGTmHJon4qgj4xwkoyCqYmaoaWqo6p+sK2koriXdqOzoqN/iJR4nXqqmX+ij5+dmYmYcqF9h42wtX1smpGheH6ZtaOjq6iEmXyafJyaf3SqWl1ve5eMeJ5iTX97e4VkephCTZ9ZompzfI5vgoqEmXabeYeJsbN/fpqSpnR+nW1xfJRvmXJpo12VdkhlY2BzcH19bmVfa2d1e2JjX1BdVlxUVkBZRVBmRFJWXGFYXklEPUI4P0E6SEU4TEVYQVdSWlZFRmFcWmBLYG19cUVDPFVeYlplalZnaG1vYmZmXmFgXF1eYGhiX2VkdmxeZWdmbGRlbGhoa2mUnYGxrpqEU1+hp7S6s7OpmqKLmqmbm6eSoKujoKePnp2dmpmVmKGdloeHiXeFgW55lYSQm4t9kZOWiHKAiZKhm3KSkIGImJSfmoSOqJuZlYqKinyDbISFcYKhjHiEjIiHkZeTe5Gin56jiK6GfbWEj56de6aWeqmCl56RjKOgf6doeG5+mXOgc3F8nYWYb5OCrXyjhKefm4OkcF6paHajZHCmYZzTj3x7mXhyc2OihpB+onKjkHZrkLOLYIKYinSqsqi8f3eDbn+/pqq0Xpxvf3KXcIJzonJepGd0pmBopmya05h6gptudnmXa5t5dpdybKmlZ19keXF/hGxoZmNtdXdmX2FRWmVQUWFIVklUX1dTW2RqW2RQRUNLTEpLQUpEOFBAUE1YU1hPU1FgZWVpU2R4eXdJRkVjXWVaaGlTaWhqbmNqZmBjX1xdXV9oYmFoZXxkXmRnZGtkamxmaGxomJt/saxUXUt/qrCytbCzopyYhJemoKCijKSnn5epiZmYmJSZk5Kgl42HhXtwfYRofI+Dk5qCd5GOj4pwgIaPk5JsmJR8iJGSo5WDjamZk5KKhIl5g3aIgG6Bn4Z3gJKFh5iglXmRoaKZn4mzoaK2i3qsp6SupXCpgJuRhoGelH2kgaKahphxnoSira6Jl4t/jKSNlYOvo5V3tba2yaJzlIyDn2Cel6lteZaHoJt1oYd3oH6QlouBb01mo5JxmohzpXt6dWKDgm1+oGxyZGCcc390l2t7arS2tMamc5h+epxqmpqrdIGabHN3l2mZeXSXcVBEfbNeanVreIZma2Zic3RwbVVbUlhnT1JnSVVMWFJVXGdrblVnV01KQUpNS0dKTkFRSlBkY2ptZXVzc354e251iXp7VVFPbV5oXGtpUmpoaWxnbWdjZV9cXFxfaWJkaGt7X11kZ2NqZm5tZWlsZaKdibCohWVAlKKyrK+vtaGij3+Wp6Gho4ukppybpoKZl5eOl5CQm5KNh4N5a3mGZYOMf5afeXWPiIyCaoWFkoSLhZ2NeoyKlaWSgpeolouRi4CJeoB9i3lwj6CFeYGUhoiVnpR+kqOmm5WWg2dueJxsomR8cqV4nJhwaKeCmY59pXuhl4OWcp92gImUlY+5bY+KomJ9maOXiW5za6trdaBub6Zgm2mLkGmWh5uVdaKBfppgi4aNdW+IYmihZp5/apt1cGRniIJvcqJbX1tkoW5eiIxxfIB0cmSlbniiZGanaJdyi5dtoW9SiI9uoF5kp1SLXVSYbW1ya3GBbXBoa3dzam9RVlVVZVlTbElYT1xIWGhocmpZa1ZQUkVWXE1YU2FVaGped3V7fHB9fHKCe39zd46AhHdeUXNhZ2JwZ1BraGhrbG9oZGdfXV1dYGpiaml2dV1cY2hjamlybGZrbWOdpZmmemV0bYunrqWpsLGmn4p/lqmcnaOLoaGaoaGAlZmUjpqPi5eQjYl7hnGAiGiLinyXmnN0iX2QfGWDh5WKiZWagnyIhpamj4Chqo+FkIqBin2AgI5zaY+lhH2Fk4yHl5+NhpCopZyJpniWm36liZaMspmekYSvl5+leZiJe6l1p5CEmm6looyShIyDvG18pa+Ch4aHlZedon6me3KolaGWaJ9+b6xjloqWk3iobaqjgYl1iIJ3q5GmiGuSsWx3s4ypbIuGb2+gnpKVYn+rjKp3gYCOp593n32FpJWdoGiah3WrZp6tjLZzdr6Mo5NZg6aNq2F1cnRve3VwYmp9bmdtU1RYVGBgXGtMXFJcSV1sbXZfW3FYW19aZ3NlbW9xY3F0YHd6fnlyeYNyg36Be3uNgYKAd2J5ZGNuc2RSbGdnb21yaWZpYV9eXGFqYmxse29cXGJpYm1pd21nbG5ilqarnYGAnqSWqqqeqKeto5mIgZapmZ2iiZqknKidhIyakIackYWSjYyMdIV6iINvjYV9lpJzdIZykYNuf4uSh4aUkH17goWXpI1/paSNgI6JhJR1goeTbmyLqICCi5ONiJqdiIuSqqKgj4B0lJeIfoF5lK+kf4KccY+GeZKNhoB7cqiNcn19epeWm4SNeHt9fYiUlZOLd5GZoaKFe3+KbIyGXHp5c3pxaW9+k4pxgHSCj5STcYaEgmWNf1+BgYx4dnOUdXB6b2+Jb4WGX3dpeI5mgoOGj6qcf3R9lmqJiG9+dXyDdW1sZoxzeHuXd4Raald5j2lud3Jxb3d4b11rhW5pZ1ZZXlZcZGpjVWBVXlFfb3d5a2p3ZWpqanV8cHF0c2FvdWJze4F4dXmCdX+Af4B5i4WCfnxugG1keW5eV25naHVreGppaWRcYFpjaWVscXVuWltia2Rsa3ltaGxvYY6Vuqmni6Gim6ekmaSdq6Kgg4OWqpCdn4iZppqomIOBnIt+lpSHjoqJjHKCfI58fo+EepaOdHKDcJWGfH2Si4aGj4Z5foCGmKOMe6afioWPj4SVg4aOmHdxhKqFjZGcj4ednIaKmqifoKqDiY2Vm39+ipetqJCTqJF4cZ+ThHyUcH+qh3F+lXFqb3yBn4t/kY6LaG5dhI2NnJ2gkHOXjIlydWyDdnSAWXJvh5GCfn+Mal1pZHuFhIiAYGl4e5x8hI2DdoKHhGl6jIlsYnFzg3dfc42DipGolodnjY6DbneLgm+Di3dtZGVjeYJ6lVpbaWZtdlt7eXd0bnNyg2ZcbYlra2JZWFxZWGpxWl5gWV5dZXJ9enRvdGNqaml7fHJ6dnRkbXRobHt/dXp9e3l5f4B/cIaJhHt9c356cn9oVFxyaWx2cHVna2dkXWFZamhranFybVdbZW1sZ3J5b2hqbWCMjKuxoZCjoZqfn5iemaiioX2ClquMn5OGmqGQpJV/e5iFfJKZiYiGhopyfICLdoWLgoSViXJvgHOYhoR+k4ODhoqCeoCEipqfj4Gln4Z3jpeIlYuLnJeEg3qsgZCXmZOJnJuGh6Gqn6Gio4uIk5udo5mWq6Kop6GTnImZkH56kJCGqX+Ak5GSk5yxpZqUnY+NsZKYhKaNjZadoYqRnYSJk4tsfY53d2aDhpGLfYmehYeLj4iIgYWEkXd8enWbpIqHi6CMh5Z/gI2DgXdxdYaEf3iJiIuRp5GEh46Hg4yQi3qFiYeNf3VqgIN8eZlpcWhgc4pwfXt3dm93dIFdXm+GZ25fXllaXFNncFVjW1thbGhze3tybnBjamlof3tteH5waHBwbGaAe3KCgHd/fX+Ee22DjIZ8enl8fXqDeE5kdmpzbnF7ZGtlYmJgW3NmcGZycWxVXWx0bWh4enBnaWtljYieup+Wo6GYlZmYlJikoJ16fpepjZ2MhZ+cip2WfHiUg3uOmYmGg4SGbXiAf3KAh36IkoNta356l4eEg5B+gIaEh3yHg42bnZGGqZ6CcoqPhpKSi5yRfI17qYONkZeVjpqVhoWbpp+imp2Gg5KamZmQmaahpp6ekJeCk4x4fYmQhqd8fY+QkYaYqaCck5yOjamNkoCejYqUm6CEj5iAiI+EcXmGcnVhf4SQh3aMmYGDj4KGhX+GhJVvenZ1lKSMjYabhoaQdYGMfn5zc3yJhXt5jY+FlKiQh4WPgYKJiYh0g4aGiXltanx/e21oa2xmXnl/aHx8dnR2dHp3XGBwfW50YGNaW15RZmxTZFpdYWpodXl+cGxsY2pqZ4B/a3J/a2t0bnduhHluhoB2goB9hXdyg42Hfnx7fIB7gotgaXtrdWhqg2RqY2BpXGN1Z29idW1rVGJxeWVveXpyZWptbYuKn7iaoaSfk5KWl4uan56cenecpJCbiYakk4qYmXh5jIV7iZGDjIKCgmx7f3hygIV9ipB8a2h9gpeJgYiOfH6FhId8j4CPm5uQiKabf3CLi4yShqChioWMfKeQh46RlpKUkXeMo6ChnZaaf4GQmpmTjZqjoqSbmJKcgJCHe4GFkImhgX6NjY98l6SgoJKZkJCljI+BnJKKlJmdf5OTf4iPgnZ1gnF3YX6BjodzipZ9iIxxjH6ChYaPanlyeo6ak5GAmH+JjHODiX19cnp8jYZ8e5OOhJemlI2GkHyEhYaEdICBhYV4ZHB6fnh5cGtqZl59c2h8dXVzfHJ/al5gdHZwd2RjWF1eUmpoVGVYXmBnaXZ4gXFma2NsZ2V/gGptfWdtcGp9d4V6a4uBcoGBfoF1doKNhn98eoCBfX+PanKDbnRpYohobGJfcVZ0b2xtYHhobFdqc3ZjdHp6cWJrb3mJjZ+zkqWmnY6QmI+GnKCam3t1o56Nl3+MoYqImpZ3eoWHfoOJfoiCgX9wfnp0dYKFfomQd2djfYaXioKKjXh9gI2DeZaAlZeVjZWfmn1vi4GRk4Wlm4eMiYOmlYSRipWWkZB1kZ2hoZiUl3l/jpiXj5eanaWempSVnXuSiIV5h5iPn3+Cio6Mc5einaCSmI6PoYyMg5iYhJSXm3+Zjn2KjoJ4cn5ue2SAfIuGcYeTgJGCa4eDgYCKhWd3cH2IlJqOfpR5jYt9gol+fHKAeYuGeoWSi4yZo5eDhIx3h4OCgXV6f4aDc152d3xzfXZma2NgfmprdnNzdX1we2NjYXNudXJtYVlfXVprZFJiV19gaGt0eYZxYmpjbGZofIJraHRobG9of3yBeWyPhXGAg4N/dHyDjYGAfnqCg358kG11iXR0bWaKbGpiY3VWg2lwbWB5Z2xhanZxZXh7eXBfcWyFhZCdr5inqZ6OjZeHhZ+TlZd8dqiaiZh5lpyLjJmQeHuAi318g3uAgoF4c3h5c32Ag3+IioBkXn2LlId/hYd0fX6Kf36YhJaTloyjoJd+cod7k5GKpo+MjoqSoJGDkI+Tl5CKgI+YoJqSkJF0gI6SlIqdnZ6nmZiOlZd1kJGLbYeakZt8iImQiW+XnZmik5WKjJ2LhoGTnYCUk5aHmYl8i4qCe3F6a3ZtfH+Mf26Fk4OUeG+ChH5+i4FmdGp9gpiYhYCOdZKKhXqJf3d5gX6HgX2Ej4aNlaWReYWCdIiGfH9xc36FgWtgeXR5cHxuYW5iZHtibm92c3h3cnNhdmBvbHVub1xaXl1dal1PXFdiYWhtc3qJa19pZWpjaHeHbWZsaGlsZ4B8endukIhzgIOEfXSBhol6g316gYR9fI5yeYt4eG1sh2toX2lyYodocW9mdmdtbGF6aGp8e3dwYXdtioGZmquhpKmeiouRhomeipSWfHasl4yWfJ6TkZaUiHZ+e4p8e4B2d3+Ab3Rzem+FfYGAiX58YVx+j5KGf4SEcnqAhnqPkYeRkZuSpJuTgX2BfI2KkqOJjYqNlpqMhZCXkpWNiIiMkp2Tj4yNboSQj5GJnpmioZiXipeTcIubhmeIm5CVe4qFkIpwlpqToZGSiIqYjIJ/kp9+k5CTi5mPfIuGiHRzdWtxb3Z9i3VvhpGOk3J0gHyCgol9ZXJuen+blX6FinWSjIJ1intwgn+Ch32GjYuFjpaqjnuIfX6KhHd9bm1+g4FhZndzdG56YV5vYGp0Xm9qenl5bHJwZXldbWxzbXNYWl1fYWpaT1dXZGNmcXF/h2VdaWhnYmdxjW5jaGhlaWeAend1b46Fc4GBg3x1gomFeIV8eISGeoCJd3+Le3pyeYNqa19waHR/a3FvbXFnb2tle2Juf3p3cGt3d4l/o5mjqKGnm4iMioGPnYaSmnR/qJORjYagjJWTkIBzfHaFeHh/cnN7hWtyb3ltiXZ/gIZucVtZfpKNiICBgXZ1gX9/oIaPipGcl6CTlneJfoCMiJydio+GkpeWhYiUmI6Wi4qNjoydio6RhG2Ji4+RipyWoZyZloaZiWyHpYVniJ+Lk4CNhIyBeJOYkZ2RkImJlI1/fpCZfZKOkI2akn2LgYRwdnBsbm9xfIdqc4OPmIpxeIB1gomDemd0cHeCm5B9ioV7lZN7eIp1cot8h457i4eFio+cpYl8hHeBin93d2xpfoB/W3FycW9vdlleb2Bval5vanx6cW5tam13YHBva3FtWVhgYWFtV1BTWWVmYnVvhIJiXWttZGNla5JtYGZmX2dqgXVycm+LgHR/goB5doCLgHmFfneHhnaDhXuHi397dop/anFifGKFfG9wbHVqaG5sd3hfcX55e3N1c3+CfqWWm62fp5eFjIN+lpWDjp10iZ6TkoWKmoyVjox6cnh0gnByhXNxdYhsbmx0bId2g31/bW5VUYGrlIeCeIB2coN5gqCCkIGSkZebkZl3kXqCjJKkmpOOiJSYkoSFlpiLk4uJjo+HnYSRi31yi4WIj4icmZ+bl5WBlYBqiJ+JaIiiiZSFkoSKcYORl4+ajY+Mi4+Nd3uTkXuPjI2Sl4x8iX2BbHdqb2tsbXt/Ynp+j5eBd3qBeIONfXpodW12iZeMgImHfJWRcnuGcXiOe4uOe4l/hI6Rn5+GfX14gYp8dm9nan+Ad112bm1rcHJVXW5hcWFfbG55cGhwZmdzdWhxbGF3ZV1VZWBgcVNQTltlZF14b4h7XlxocWJiZWWRaV9oZVtnb31va3Fzin12fYWAdXZ/jHl7hoB4h4NzhoV+jIyEfHmVeGdxaoNgh35vb2t7YGltdIB0X3R8eIZ3c3OFfHmhkJqxnKaPg4p/gpmJf4qcfoqYko6EiJeOjo6Ed3R2c4Bwb4VzcHGDb2ppdW2Cbn18bXVzUk6C38mS1pN8cHSDdYOfgpF2lJCYm5CZe5NyhZCfoZOTkImSm5OFfZWVh4yNh5KNiJx/joF4e4x/iIyKnJycm5aUeo54aYuUim6KpYaUiZiEhmOMkZiNlImWi4yJi3B6lYl8j4mLk5KKeoZ9f218ZXNwa217elyBepCPgXt+f4CGj3t6aXVrdIyQioOHhn6XjG1/gHCCjoCOiX6Fe4SRlpubjH13eIKPeHJrZW59gWpnc25naHNsU11vZHBaX2xyd2Zsa2JneHNwcGRfd2BhVWtfXnRPTUtfZmNceHCKdFxbZXZgYWRkjmNgZmJYaXNzbWtxdot8dHmGgnZ3fotzf4Z/eol/cYmHgZCKiHx+mXZlc258ZYd/bnBrgFprbnl6cmB2enuNdnJ2inZ6n4ycr5ugkYOFeIiVfnuInIaEnpCOhYyXhJOOh4F1d3B5cG6Eb21ufnJjZHdwfG56fGpobGKkmsHcru+ic2x1g3WEoYSRbpWPlJ+Um4CRcIWLo5eJjpWKkJ2Vg4CUj4WIj4CSioqXfod7dn+JeIaFjpubl5mPkHaLeHCJi41/jaaGk4uehoZei5SXiY6IjYqKhIlsfJeCfoqHipGQhnaGfn5sfWR4dWpvenRYiHuSh4Z6f3+Aho1/emZ0aoGLkIuEhIGNmIZtg3dviZODkoZ/hHuCkpeUmpF1dHiHjHRycGVzd4BgcmxvYWh0ZlJgcGdrVV9udHlhcmNgaX5xcm5bY3JhY1ZuWlx3TExLY2ZhXXZzim1bXGR4XmBkZoRfY2NeWGlya25rcneLfXN3hIF4eHyJcYOEfH2Ie3SLiIeVhYx/f5hzaHVxeWyLe250cIBXcHl2eXFkdnmGjGh2gIlxgJ2Imaico5OFfXGMk3h4iZyDhJ+MjnyVjH+aiIR8c3dwc2pvgWtpbHx0XmB3dntwdHpnYGV869q1ycPciXNsdIB2ipqIjGmXj46clZKBiHCFiKCOhYuVioyXk3yNkoeCiI96kYuGj4KAd3iDhHKHgpOblpSYho12iIByh4SLiZykhZaOoISKYYOVj4WIhYiMhoCHaH2Uf32EhYqOj4Jyh3+AcndodnJpdHhtWo19k4OGfYCDgYSLg3ZidW2KgpGMhICAk5J+b4NteoiRiJSFfYJ/gpOUkpiJb3J6jIV0a29pcHZ/XXFnblxpdF9RZHFoZlNfcHZ0YHBgXWiDcXNqV2dpY2lXbVdbdExKS2VmXmFyc4VpW1xleV5eZGd6YGRfXVlrbmVuanR3in5zcoF/e3Z6iHOFg3x/h3Z2ioWPmIGNgnuTdmx3dnl5k3Vud3p9WHmFcYBuZ3h2kYJkdoaFcYqWhpqhm6GKhnNvkotxdo2afImZiIl7n3+DmX+CeXF0bm9kcn5oZmx2dltfeHt6cXF/aWFnYX/Vto6RpnhucXd7cZKQjIZqmI2ImpCLhXpoh4uZhoGSkYaGl4x7jIyAgImNe5CNfomFenV7g3xxhoCVmY6TlIKJdoSIeIWCjZWfoYiXkaGAiWF/lIeEh4OIjH9/gmZ9kYB+gYSMj5B+bYN9g3VsbXd1dHd2bGOOgo+AhX98hICFiX9wYHRyhn2QjoN9f5KKenKFZ3uFjIiNhXyFgIGVkJGThW9weYt+dGxtaWl3emFnamlYa3RZUmhyaWJQYnJ4bGJlXlpqhG50YlxnX2VtX29UWm5NR05mZFxmbnKAa1pbY3NfXGNrdmRlXV1abGxibWpzdoaAcW9/fH10eIZ4hYN8gId1eImBkpV7iYZ2iYFveHl7g5JvbXuAdl6Df3SBbGh6c5RzZ3OHfHKSkoSan5ufhod1dZN+bXWSln2HkIOKjZl8jJp2fnZxb2xqYXR8Z2Jpc3laYHd7eW1xfmVkaGhXnY9fcnOXvMSEdnGUiI99cZaLhpuSi4dyaoiPloB7lYyBhJqLe4qGfHuJi3+UiHWJhnZ3foFydYaBnpSFlI+EhHKBineHfoubn5qIlY+egYlmfpOCf4WCiIlxgX1mfox8eYCAiIyPfWmBfoR2Z3B5eHN3dGxrjoaLgoqAeYKBhYSBbF9zeXt+jouHfIKQgX9zgmp6hYmNh4V5hX6CmY6RjX5ubXuJfXZ0bmZle3RiW3BiV25xU1NtcmhhTmZ0eGZgXl1Zb4Fvc1plYl1qbmBwT1lqUURTZmBaam5tfG5ZW11tY1picHZjZlxdYGtpY2xqc3aBg3Btfnx/dHWDeoOCfIGFdn6IgZaQeISKdIGIcnl5fo2Qb297gHFpgXh6fm1se3WVa2p4hHRrk42Gn5mgmYSIbn2LdWl3l45+gYqClJeJeY+Vb3p0cWtpZGBzemhgZXB5WmByfHlncXlhZWWPsbJ3S2JapdnQlnF7kIqPd32TioSYkIuFbmuFkpJ6eZKHgYSYiXuGf3d3iYqEloBwi4hxdX57anmFg6WQhJONhH9wgIR4hnuInZuWjZWSloaIcXuTg32CgoiCbYB3aICEeHKAgYOKiHxlfn+EdmRxc4BpeXFvdZmOhoOLfXd5gYV6g2tccn9zgomHin6HinuJc4JvcoWIkIaGc4V7gpqNjoV5bm9+hH92emRmaHtvXlh2Wlhwa05XcXJmYEtsd3RhXlxbWnV+c3BYZ11manJgb05XZ1I/WGZeWm9rZ3pxW1pYa2VZY3B5XmdcXmVsZ2VraXF3f4hvbH9+gHVvgnt/gn+Cf3aBhImXiXGCjXF7hnx6eYSTjHVqeX5rb350f3xvcnt6k29ugX54Z5KLg6GZnJGChWaGg29neZWIfX6EgpiJgXyOjWl4c2trZl9hb3ltX2JveFxka4J5YXF2X2Vl1Oq9izI6PouOf3F4hYeNjXWClox+ko2Lfm1rhIyMdXyPf4WBlIh8gndudoeEg5d3b4iFbHV7dWZ5goOni4KPi4R+boF2eYV8iZ+SjpKTlI6Mh397koZ3foOMgmp/cmiAfnhufH2Ci4R3YnqFgnJkcml+bnVydYKcjIGAhYB0dn6Ac4JvXG5/dXmLhIt8iIF+iXl7cm2KhZGFjHODeoCXjIuAdW5rdoCAdXRbZ2d1bldWe1JZb2RMWnJyZVtJcHhvXFtbWV10fnRoWWJbZ2ZvZGpNV2ZRPV1lXF11ZWB1cFpZVG5jWWRweFloXV9nbWdpa2lwd32ObWmChH95boB8fYF/gXp1goCNk4RwgYtud36Ae3uIkol/aHp9anN7coV6c3Z9fox5eIR9fGuMjYSbnpaMgYBsjX1raH6Ni3p9foOTgn59iohrdnJnaGJbYmdzb19ha3NgaHCIeWJzdF5jZJugj25cNVqvtXRpgIh8kYZ1hZWFc46KiXZvbISChnR5iXiJfJKHeX5yZ3aJfn6Yb3GHf2l2eW5meYeEpIeAh42Kfm+Ad4KDf4+biYSWk5mKjIWJfI+IcHp9hHtofmxqgHt6ant3goiBcmB3gX5yZHJndoNudXuGlpKCfYKBb3d6fHV/bVlwgHd1jYOHeIh2g4l7eXRvi4KRgoZzgH5/lImKfG9uaW2BgXRtXGZkcnBQWnpNW25bT1tyb2RVS3N4aVdZWVphcIB0YF1dYWdkaWlmTlloTUBgY1tgdWFddWxYV1N0YVpkbnFWal5iaGpnbWxocHd8k2xohIp9fXB+fnuBgIF6d39/iouDcXyHb3F3g397iYyPg2p9e213eHaKdnx4f4KGf4N+fXpthYyImaONhIN7dYt4a2yEh5B4fXqCkYCAfouDcHNxY2ZeWWZfb29fYGdwZmpuiHRhdG9bYWRqdnuAv5ympMi4cYSCcpJ7d4WSgnOQi4dycm+De4N0dId0iHeTiHl5cGN3h3qAk2lyhHZnd3VjanyCiJ2BgH+Oj35zgHWHe4KUkoV6mI+WkIiCiXuIiGt4eX50Z3poa395dGl6d4CDfWhgeIh9a2t0aHyBanaBjJGVf3t+f3F8dnx0f2JWeH5zdIuFg32EcYeKeHlxcYWEjoB/en9+d4+GhHdqcWlsh4Fxb1xmYXFtSWR1S11sVFNZcm5iUU90eGFSWFhdYXCCc1thXGllZWRrZFBbcElEY2BbY3BeXXdoVVdWdl1bZW1nVWteYWlnZW5uaHB2epNtaYiNeX1ye355goGBfHZ9g4iGg3B3hHJtd4KCfomLk39wgHt3eHqAjHSCeH6BgYKEeYB1b36Ki5ueiH2FeneFe2d0hYuQeX5/e4iGhHaPgGdwbl9kXFhlWW1yYWBgcGxraIhuYXRpWV9kboB3qdqpx4aHsnGId2+MdHqFjX95kol/dHN0fXd/b3F/bYV0k4V4dGtgeoJ5iY9mcoRwZ3VuW219gJCTf4B4kZN+eXxuiniDk46GdpiMk5CIhoZ7f4RsdHZ+bGd2ZG17dm1qd3d/f3xhYniGeml1dWN+fGd1h4+Nlnx1gXdxgHt9boBaV3V/cHaFiH+Bem2JhnR6bHaBhIV/fH56fXSMgn50aHRlboqDbHNZaF5zZEdtbUtaYFdWVXdtYlBSdHZYUFZYXmFxhG9cYGNtZWReb2NUXHJHQmZfXWZnXVt7YlFWXHRbW2drYVVqX2BuZWZrcWhwdniOdGuOjXV/dnh+d4GEgXt0fYOIh4NvcoB0cXV+hYKJjYp7d394g3t8hYd3h3x9gX6EgHt+cnV5jI2gjIl5iXV0g3hefYWXi3iGg3OFhoR3iXtibm1cYltbYVZpc2NgW2ducGaHcWFxZlddY2t/fMrOh7mham1timxxg3F7g4l+epCEeXhzeHV0e2psdmOEdZGCdm9mX32CeouKZXKCa2pxY1hteoWbiIKBc5eUeH99b4pzhYyOiXSZkJKJhouDfHl9cHBvfGZocWJteHFqbHF4fX16XWV6gHhqdnhmg3dndYiMjpV9cohqb36BeW99XVlzf251gYx8gm9wioBxd2l4gYKBgnh+c3x1h317c2dzYW6LgWtxV2lddltHbWpMVlVdU1V7a2FPVHVyUFFUV15idIVpXWBsamZjWm9hWGJwSEFnXGBlXlxWe15OVWVwWVtqaF1XaGBecmVqaHJocHN3hnhulYt0f3p4fnmDiH91cn+GhY6CcHB7eHd2eYaGh4yGenx/dIt9fYaEg4d+fn59h398eHV4eJGTn3+MfIptdYB4ZIOGlYVzkYpvhYWBeoN0ZG5qWV9bXF1UZ3JkYFlkcXJngHJia2VXW2Bqf3i+rnuft25hc4Voc3pxeIGEen2Lfnd3cnZve3Zlam9hh3WOgHNqYl5+eHmLhGZxf2hra1pWb3eJo4GFf3GZk3KBeneEb4OElIp1l4qOiYWJhX14dHFuaHhfamxgbXZqZ2pseXd6dlpnfXx5ZnN+bYV0ZXWGjYaWgHCMZ2t7hHVudWJdcX1sdX2MfIJndod+bnFpdn95f4B0fm17fIJ7eXFmbGJuiX1sbVZpX3ZVSmlqTlFOZ0xYe2hhTlV1a0xRVFVfZnWDZl5gcWhnYldqXVxraEpEallhZFZZVXlZTVZtallda2RcWWVjXnRlbWRxZ3JwdYF4cZmGdn9+d398hYd9dXOCiICVgm5zeXt6c3OFh4mJg3iBfXWPfnyEio2DgYR7fouDe3Z7d3eanZh6iYKGaXZ8e2yDg5J/co6BcIWCf4J/cGdsZ1hdW1xbU2RwZF5XYnJ1anVvZWVjV1xbaH9wb3KAc4lkZHl9aXN1c3KBg3eAg3h2cnVua3pxYWdrZ4ZzjYNtZl1ffXB7iX9pbXhnamRVV3JvjaZ8hHt2lpF0fXR+fG9+fZOHeJp9iYeDh4N9dXBxbGd0XGxnXmx0ZGdlaXpve3JZaIF3dWhwgXiCdmJ3hot8lYFvjGtte4JxZ3RmYW56Z3N4i3x/YneEd2pscnV8cnt7dH9ogH+AeXdvZGZibYV7bGpVaGFvUkpoak9LTm9HXXpmYU1VdGRKT1NXYWp2fmZdZ3NpZmBWZFdicFxMS2pXY2FVVFVzVkxYdWRZXmtgXFpjZV92Z21icGl0b3J+dHSZgnd/gHiAf4aEen11goR/l4VucnR8enVxhIWPgYB6i3VzkH98gZWNgIWEfX2Mhnp9gHZ7o6WKeYiFhGt0e3p1goCLem6Ec3mEfYKDdm9qaWVWXVtaWlNibmRbWGFze2pobWlgYlhfWml/aWtvgGdsYGh5eGpyc3Ntg4B6f3x1dG16aGp5al9lbmiBdo+EZ2VYYndqfod7b2pwZ2ZdVFhvZ46nd4F6fJCOeXZxgHF1eHuRgXqXdoeDgIWIdmpydWdnbltsY11tcl9nYWp4aHtsW26Dc3RqcIF+enhhd4aFeZCFdIlycHqBc2RyaV1xeGVydIl8eWN0gHFnanl1c215eHZ5ZYR8f3l3cWRkY217fGpqVGdhZVNKa2dPR1FqRWB3ZmFNU3JdSk1UWmVrd3xmXm1xaWRdVmFVbm5WSlNnV2ZeWE1VbFRKW3heW15rXV1aY2VgeWhsYW9vdm5wd3V6mH53f4F5gICHhnp5eoN+gZOEcXR0f3l2dIWIkX2AfJBrcpWAe4KfhX6HfYB+hoKAint2hKuef3qHh4NrcoF5dYB+gHRuhm58gHOKgGpwbmRkWF9aWVpUYmpnW1pfdYJpXm1sXGFXXFxrgWVydH1paVxrdnVnc3ZxbIR7fXx4dXJseWdpeGZdZHNoeneSgWNjVGVwaIKFeHhnaWphV1ZZZ2OOp29+d4CLjntxcn9pe3F8jn14kHOFfn9/hm5kdXJkZ2dcamFcb29cZ19tdGV6aF10gG9ya3F8fnV2YnWGjHuIiIGAeXN1gHZicW5bcnRjcXOFfHVlc4BtYW17cGtqfHp2c2eHdnt6dnFlYmRtcn1pa1NnXVxUS3FiUEZVYEdidmZhS1NvWEpNWFhna3V7ZWVucWZkWldeWHdlVEpcYldoWFlIV2VQSGF3Wl1fbFpeXGFjXn5pamBvdHhtcG52g5d6coCAfH+JjIZ9dXWGeIeMfHR1dYJ5enqCjI59foSJaXOWgXqKnX5+hXqBen98hohzcY+tjHt7ho99ZXGHeXN8enVyb4Zse35sj3pjcG9iZV1lVllZV2Nma19dXXOFaFhxblteWFpcbHticHd1bGFZbHNzZ3R1b2yDeH5/eHZtbnRkaXRlW2d1ZnZ2kXpfXVJmZmuDgnR+YmRqXFRXXWJjj6VoeHSDhpF5bnF8anpvfYd9dop0gnl8eH9oZHZsYGZfXmleXHNrWWVdb29iemVcd3xrbm5weHl0dWVzhJN/iIOJfHdwc390Y3hlXHFxYnFygn10Z3KAZV9ud2plaHp9dW9wg3Z0fXRyYl9mbW58ZGhTZ1dYU012X1BKWVdIYnRjYUlUbVNKTVpXaWxxfGNtbHNjYlpaW2F3XFNLY11YaVNXR1lgTUdpdFheYGxbW19iYlyEaWhhbnh5bW9qdoGQeW2DfoCBk4iEgXZ0iXSMhnRydnaCeH19foyQgH6TfnB3lYN8mJJ5gIB4en6AdIiDdHCZoXp6f4mUd2N0hnhzd3RrdG5+a3h8cJFzXnBuYGdibFRaWldoY21mW1xxiWVTcm5bWlhXYGx2Y2l1amleWW1zcGtzc3NphHx+fnt2bm5sZGlxY1tqcmR0do5zW1dTZWFygH9ygl1iY11TWmBcY5GfZXFxhYSSdWxse29wcnx+fXOCeIBzenp6ZGV1Z11iWWBnWl52aFdiXXBoYXdhW3x2aWpyb3h0c3VpcYKWhId/hXd0a3F+b2d4WF1sbmNydIF6dGdwflxgcHJiYGtyf21udn9zcnhrcWFcZWxsemBmUmVTVlFPdVtRT1hRSGNzYWBHVmpQSVBaVWtra3xlbm9xYltaWFlscVdSUGZWVmhTVEZaXE5IcXRYX2NsYlhgYGFdi2pjZG16eGxwaXV5h3trg31/hJp8g4R5fIdtj4dyb3Z6fHSCgnyLj4OCl3R4gZOFgZ6JdYGAgXR/gnGHgnVvoZZzeoaLhnpkdolubXpuZnhwemtzdnONa151bmFnZWtSXVtVZ2Fsa1pccYxkT29uXVZYVWdpc2hidGVkXFhtdGxvdXR4aoZ8f3uHdo9zY2RrbmFcbm1jc3iHa1pUVmNkeH19cYZdZF9jVFpfWWKVlWNucIOFinRraXxwZ3V4dX1te3V2cHp/dl9mcmNbXVZhY1hhdGVVX2BtZGFxXV1+cGhpdHF0cXV3a22FlIKJfIZyc2dwfnJ0cFRcZ2tmcnWBd3RjbXZWY3JsW19wZ35mbnh+dHRza25hWmRpandeZVNjVFVQU2xWUFZSUEdkcl9hRlhpTklYVFZtaGR8aWt4a2JXXVVbdGRTUldoUVhmVFNIWlpQTXd2Wl9la2lZYWBeXo5uYmZreXVub2l2doB/bIOAfYeYe4CHgYl+a5OIcmd0gHt1gIN9iY9/i5NyfIqRhYefhnt/hoxzgYZzfYJ2bqSLcoCNi3Z3bHmLYGR7cGZ5c3hsbXF3g2dkfG1jZmdoU19eVWdfbG5bXm6NaE5pbWBUVlNvZ3NrZXhkZFxYb3NscXp3cmyHe392m3p5a2FlbG1eYG9qZXB4fmdaVlhgbHh8e3CEX2NfZ1ZYX1djm4hia3CBh314bGx6bl14c258a3Z0b3B8gHNYam5eWFxVYWJXZHBjU15iaWFibFphfmxmbHR2b213d2xphoyAinuJbnJmcn5udG5kW2FpaXB0gXRzXmltU2VxZVZjb2R8ZHN4fXdscG1rYFlhZmd0XGRVYFVSTldkUk9bTk9IZG9cYkdZaU1KX0tYbWRgeGlufmRgVV9UXXVcU1JgZk5dYVVTSlxZUFl0dV1fZWtoWGJhW16NcWNnanhxc25odnR6hHKCg3qIjn58iYeNeW6QinVsc4J0f3+IhYeRhJWPeX2MjoeRm4SAfIyFc3+Bc3R4cm+Tk5OTk5OTk5OTkpKSkpKSkpKSkpKSk5OTkpKSkpKSkpKSkpKSkZGRkJCPj4+Pj4+Ojo6Pj46OjY2Njo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo2NjYyMjI2NjY2Njo6Ojo6OjY6OjY2Ojo6Oj4+Pjo2NjY2Oj4+Pj4+PjoKAfnp6fX5+fX1/fn59fn5+fn5+fn+Af4CAgIGAgIB/gIGBgYOHjI6Ojo6NjY2NjY2NjY2NjZKSkpOTkpKSkpKSkpKSkpGRkZGSkpKSkpKSkpKSkpKSkpKSkpGRkZCQkI+Pjo6Ojo6NjY6Ojo2NjY2Njo6Njo6OjY2NjY2Njo6Ojo6Ojo6NjYyMjY2MjIyNjY2Njo6Ojo6NjY2NjY2Njo6Ojo6OjY2NjY2Ojo6Ojo+Ogn99ent8fn59fX59fn5+fn5+fn5+f4B/gICAgICAgH+BgYCBg4aMjY6NjY2NjY2NjIyMjIyMkpKSkpKSkpKSkpKSkpKSkZKSkpKSk5KSkpKRkZGRkZKSkpGRkZGQkJCQj4+Ojo6OjY2NjY2Njo6Ojo6NjIyMjIyMjY6Ojo2Ojo6Ojo6Ojo2NjIyMjIyMjIyNjY2NjY2NjY2NjY2NjY2Njo6Ojo2NjY2NjY2NjY6Ojo6Cf3x6fHx9fn19fn19fX59fn5+fn5+gH9/gICBgYGAf4CAgICDhouOjo2NjY2NjIyMjIyMjIySk5OTk5OTk5OSkpKSkZGSkpKSkpKSkpGRkZGRkZGRkJCQkJGRkZCQkJCPj46Pjo6Ojo6Ojo6Ojo6Ojo2MjIyMjIyNjo6Ojo6Ojo6Ojo6OjY2MjIyMjIyMjIyMjY2NjY2NjY2NjY2NjY2Njo6NjY2MjIyNjY2Njo6OjoN/fHp8e31+fH1+fXx9fn59fn5+fn5/f3+BgYGAgICAgYCAgIOGi42NjY2NjIyMjIyMjIyMjJA+LjExMTEvb4eEhISEiF0tMDAwMC1GoaGhoaGhoJqZmpqampqKg4SEhIOEd2VnZmZmaFxDREREREFSzNrY2NjY3W09RERERENYaGdnZ2dmb4SDg4ODg4OLjIyMjIyMjY2NjYyMjY2NjY2NjY2NjIyMjIyNjY2NjY2OhX19e3t6fX58fH59fX1+fX1+fn5+fn9/f4GBgYCAgICBgICAgoWKjI2MjIyMjIyMjIyMjIyMjy0aHR0dHBpohYKCgoKGUxgdHR0dGTekpKSkpKSjnJycnJycnImBgoKBgYJyXV9fX19hUjQ1NTU1MkbY6ufn5+ftZy41NTU1NE1hX19fX15qgoGBgYGAgYqLi4yMjIyMjIyMjIyMjIyMjY2NjY2MjIyMjIyMjY2NjY2GfH16e3p8fXt8fn19fX59fX5+fn5/f3+AgYCBgYGAgIGBgYGChYqNjYyMjIyMjIyMjIuLi4uRiYiIiIiIh42QkJCQkJCMh4eHh4eHiZKTkpKSkpKRkZGRkZGRj46Ojo2NjYuJiYmJiYmIhYWFhYWFhpOUlJSUlJWKhYWFhYWFh4mIiIiIiImKioqKioqKi4uLi4uLi4uLjIyLi4yMjIyMjI2NjIyMjIyMjIyMjY2Njoh8f3l6ent8e319fX18fX19fX5+fn9/f4CBgYGBgYGAgYCAgYKFioyMjIyMjIyMjIuLi4uLi5GTk5OTk46SkpGJh46KkJKSk4+Oj4yOhYqRkZGRkJCQkJCPj4+Pj4+Ojo6Njo6Ojo2Njo2Njo6Ojo6Ni4qLi4uMi42Ojo6Ojo6NjY2MjIyMjIuLi4uLiouLi4uLi4uLi4uLi4uLjIyMjIyMjIyMjIyMjIyMjIyNjY2NiX59eHh5fH18fX19fHx9fX59fn5+f3+AgICBgYGBgYCBgIGCgoSKjIyMjIyMjIyLi4uLi4qLkJCRkZGPhI6QkIaKj4WNkJCQh4mIiI2IiZCQkJCQkJCQkI+Pj4+Ojo6NjY2NjYyMjIyMjIyMjIyMjIyMjIyMjI2NjIyMjIyMjIyMi4uLi4uLi4uLi4qKiouLi4uLi4uLi4uLi4uLi4yMjIyMjIyMjIyMjIyMjIyMjI2Lfnx3dnh7fXx7fX18fH19fn5+fn5/f4CAgIGBgYGBgIGAgIGChIqMjIyMjIuLi4uLioqKioqQkJCQkIqFjoiOhoaPiY2QkI2EiIWGj4mMj4+Pj4+Qj5CPj4+Ojo6OjY2MjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMi4uLi4uLi4uLi4uLi4qKioqKi4qKi4qKi4uKioqKi4uLi4uLjIyMjIyMjIyMjIyMjIyMjIt+e3d2eHt8fHx9fX19fX1+fn5/fn9/f3+AgIGAgYGAgYCBgYGEiYyMi4uLi4uLioqKioqKipCQkJCPhYOMjpCOiYyJjZCRiYOGh4iMiI6Pj4+Pj4+Pj4+Pjo6OjY2NjYyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIuLi4uLi4uLi4qKioqKioqKioqKioqKioqLi4uKioqKiouLi4uLi4yMjIyMjIyMjIyMjIyMin18dnZ4fHx7fH19fH19fn5+fn5+fn9/f4CAgYCBgYGBgIGAgYSJi4yLi4uLi4qKiomJiYmJkJCQkJCMhoyJjoeFjYmOi4yOiIeIhoyIj4+Pjo+Pj4+Pjo6OjY2NjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyLi4uLi4qKioqKioqKioqKioqKioqKioqKi4uLioqKioqKioqLi4uLi4uLjIyMjIyMi4uMjIyKf353eHp7enp8fHx8fX1+fn5+fn9+fn9/gICAgICBgICAgYCBhIqMi4uLioqKioqJiYmJiYmPj4+Pj5CMjouPjIqPjI6MjZCOjYyLjYyOj46Ojo6Ojo6Ojo6NjYyMjIyLi4uLi4uLjIyMjIyMjIyMjIyMjIyMjIyMjIyLi4uLioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi4uLi4uLi4uLi4uLjIiAfXh5enp6e318e3t9fn5+fn5/f35+f39/gICBgICAgIGBgIGEiouLioqKioqJiYmJiYmIiI+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pjo+Ojo6Ojo6Ojo6Ojo2NjYyMjIyLi4uLi4uLi4uLjIyMjIyMjIyMjIyMjIyMjIyMjIuLi4uKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLi4uLioqKi4uLh4B8eHp6eXt8fHt8fH1+fn5+fn9/fn9/f39/gIB/gIGAgIB/gYSJi4qKioqJiYmJiYmJiIiIj4+Pj4+Pj4+Pj46Pj4+Oj4+Ojo6Ojo6Ojo6OjY2NjY2NjY2MjIyMjIuLi4uLi4uLi4uLi4uLi4uLjIyMjIyMjIyMjIyMi4uLi4qKioqKioqKioqKioqKioqKioqKioqKioqKiYmKioqKioqKioqKioqKioqKioqKi4uHgHt5eXh6fHx6e3t9fX5+fn5+f39+f39/f39/f3+BgYCAgH+BhIiLiomJiYmJiYmJiIiIiIiOjo6Ojo6Pj46MjI+Sj5COjo6Ojo6NjY2NjY2NjY2NjIyMjIyMjIuLi4uLioqKioqLi4uLi4uLi4uLi4uMjIyMjIyMjIyLi4uLi4qKioqKioqKioqKiomKiomJiYqKioqKioqJiYmJioqKioqKioqKioqKioqKioqKi4aBe3h5eHp8ent7fH19fn5+fn5/f35/f39+fn9/f4CAgYCAgIGEiIqJiYmJiYmJiIiIiIeHh46Ojo6Ojo6Ojo+MkJOQkI+Ojo6NjY2NjY2NjYyMjIyMjIyMjIuLi4uLi4qKioqKioqKi4uLi4uLi4uLi4uLi4uMjIyLi4uLi4uLioqKioqKioqKiYmJiYmJiYmJiYmKioqKiomJiYmJiYmJiYqKioqKiomJioqKioqKhYB6eHl5fHt6ent8fH1+fn1+fn9/fX9/f35/f39/gICBgICAgYSIiomJiYiIiIiIiIeHh4eHjY2Ojo6Ojo6Pj4+PjoyNkI2NjY2NjY2MjIyMjIyMjIyMi4uLi4uLioqKioqKioqKioqLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4qKioqKioqJiYmJiYmJiYmJiYmJiYmKioqJiYmJiYmJiYmJiYmKioqJiYmJiYmJioqFf3l6eXh7e3p7fHx7fn5+fX5+f39+f39/fn+Af3+AgICBgYCChIeKiYmIiIiIh4eHh4eHh4eNjY2Njo6Oi42Nj5WPiYyPjYyNjYyMjIyMjIyMjIuLi4uLi4uLi4qKioqKioqKioqKiouLi4uLi4uLi4uLi4uLi4uLi4uLi4uKioqJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYR+eXt5ent7eXt9fHt+fn59fn1+f35/fn9+f3+AgICAf4CAgICEh4mIiIiHh4eHh4eHh4aGhoyNjY2NjY+MjImKj42IjJGPjY2NjIyMjIyMjIyLi4uLi4uKioqKioqKioqKioqKioqKiouLi4uLi4uLi4uLi4uLi4uLi4uKioqJiomJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJg355e3p8e3p7fX17fH9+fn5+fX5/fn9+f3+Af4CAgH+AgH9/f4OGiIiHh4eHh4aGhoaGhoaGjIyMjIyLiYyKiIeJhoyOjJCMjZGOjIyMi4uLi4uLi4uLi4qKioqKioqKioqKioqKioqKioqKiouLi4uLi4uLi4uLioqKioqKiomJiYmJiYmJiImJiYmJiYmJiYmJiYmJiYmJiYmIiImJiYmJiYmJiYmJiYiIiIiIiYmCf3h7e3t6enx9fHx9f39+fn19fn9/f39/f4F/gIB/gICAgICAg4aIh4eHhoaGhoaGhoaGhoWMjIyMi4yOjoyKioeEiIuKjIuNjo+Li4uLi4uLi4uLi4uLioqKiomJiYmKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiomJiYmJiYiIiIiIiIiIiImJiYmJiYmJiYmJiIiIiIiIiYmIiIiIiIiIiIiIiIiIiIJ/eHp7enp6e3x8fX1+f35+fX1+f39/fn+AgICAf3+Af4CAgYCDhYiHh4aGhoaGhoaFhYWFhYyMjI2NjJCSjI2Ii4mJi4uLi4mLjIqMi4uLi4uLioqLi4qKiomJiYmJiYmJiYqKioqKioqKioqKioqKioqKioqKioqKiYqJioqJiYmJiYmIiIiIiIiIiIiIiImJiYmJiYmJiYmIiIiIiIiIiIiIiIiIiIiIiIiIiIiHgXx4e3x5enp8fHx9fX9/fn59fX9/f39+fn+Af4B/f3+Af4CAgIKEh4eGhoaGhYWFhYWFhYWFjIyNkY+PjZGJjIaJjIuIiImMiYeNjo+NioqKioqKioqKiomJiYmJiYmJiYmJioqKioqKioqKioqKioqJioqKioqKiYmJiYmJiYmJiYmJiYiIiIiIiIiIiIiIiImJiYmJiYmJiIiIiIiIiIiIiIiIiIiHh4eHh4eHh4WAenl9e3t7enx8fHx9f39+fn19f39/f35+f4B/gH9/f4B/gH+AgoSHhoaGhYWFhYWFhYWFhISLi46PjoyLj4iHiYmMjYWFjo2KiYyNi46KioqKiomJiYmJiYmJiYmJiYmJiYmJiYmKioqKioqKiomJiYmJiYmJiYmJiYmJiYmJiYmJiYmIiIiIiIiIiIiHiIiIiIiIiIiIiIiIiIiIiIiHh4eHh4eHh4eHhoaHh4eHhH55eX16enp7fXt8fX5+f35+fX5/f39/fX5/f3+Af39/f39/f4CChIaFhoWFhYWFhYWFhISEhIuLjI6MjI2Lh4mIiomGgoiNjoiKi5GTj4uJiYmJiYmJiYmJiYmIiYmJiYmJiYmJiYmKioqKiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiIiIiIiIiIeHh4eHh4eIiIiIiIiIiIiIh4eHh4eHhoaGh4aGhoaGhoaGh4eDfXp5e3p5enx8e31+fn5/fn59fn9/fn9+fn+AgICAf35/f39/gIKEhoWFhYWFhYSEhISEhISEioqOjYmIiIqKh4iHiomIioiIh4qGi5GPiomJiYmJiYiIiIiIiIiIiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmIiIiIiIiIiIiHh4iIh4eHh4eHh4eHh4eHh4eHh4eHh4eHhoaGhoaGhoaGhoaGhoaGh4J8eXl6eXp7e3t7fX5+fn5+fn59gH9/f39/f4CAgH9/fn9/gICAgoSGhYWFhISEhISEhISEhISKi5CPiYmJi4qHh4WHiYuKiYSLjYmOjYqJiYmJiIiIiIiIiIiIiIiIiYmJiYmJiYmJiYmJiYmJiYmJiIiIiImJiYmJiYiIiIiIiIiIiIiIiIeHh4eHh4eHh4eHh4eHh4eHh4eHh4eGhoaGhoaGhoaGhoaGhoaGhoaGgXt4enp4e3x7e3x+fn9+fn5+fX1/f39/f3+Af4B/f39/f3+Af4CChIaFhYSEhISEhISEhISEhI+Qj4+IiYuIhoeIiYuLjIuJioqNio6Oj4iJiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIh4eHh4eHh4eHh4eHh4eHh4aGhoaGhoaGhoaGhoaGhoaGhYWFhYWFhoaAe3h5eXh4enp8fX1+f35+fn59fn9/f39/gIB/gICAf39/gIB/gYKDhoiGiIaDhISEhIODg4ODkpKOioeKi4qLh4uNiYqJi4iHiouIio+SioiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIh4eHh4eHh4eHh4eHh4eGhoaGhoaGhoaGhoaGhoaGhoaGhoaFhYWFhYWGhn96eXh4eHl5eXx9fn5/fn5/fn1+f35/f3+Af39/f4CAgH+AgH+BgoOHjo+PjoiHhIWFhoaFhYWSkI6KiYmIiImKioiIh4aKjIiHiYmOkJGNh4iIiIiIiIiIiIiIiIiIiIiIh4iIiIiIiIiIiIiIiIiIiIiIiIiIh4eHh4eHh4eHh4eHh4eHh4eHh4aGh4eHh4aGhoaGhoaGhoaGhoaGhoaGhoaGhoWFhYWFhYWFhYWGf3l4d3d3eXp5e3x9fn9+f35+fn5+f35+fn+Af4CAgICAf3+Af4GBg4eOjo6Ojo6Mjo2OjY2MjZCQjomHhoiJiYeIiouIiYyJiYaKjY6PkYuIiIiIiIeHh4eIiIiIiIiHh4eHh4iIiIiIiIiIiIiIiIiIiIeHh4eHh4eHh4eHh4eHh4eHh4eHh4aGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaFhYWFhYWFhYWFhYZ+eXd5d3d6eXl8e31/fn5/fn5+fn5+fn9+f4B/fn+Af39/f39+gIGEiI6Ojo6Ojo6Ojo6Ojo2NkJGOi42JjIiIiYaHiYaIioiHi4yLjpCQiIeIiYmJiIeHh4iIiYmIh4eHh4iIiYiIiIiIh4iIiIiHh4eHh4eHh4eHh4eHh4eHh4aGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoWFhoaFhYaFhoWGhYSEhIWFhoaFhIWFhX55d3l2eHl4e3x7fn5+fn5+fn5+fn5+f39+f39+f39/f35/f3+AgYOGjY2Ojo6OjY6NjY6OjY2Qj42Ni46KhoiKhISLiYeDhYSDi4mLj42JjI6QkI+NjYyLjY6Pj42NjI2Nj4+Pjo6MjYyMjY2KiYiHiImHh4aHh4eHh4aGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoeHiYqKiIeJi4yNjo2LiImLi42OjYyJiImMgHl3d3Z6eXh7e3t9fn5+fn5+fn5+fn5/f39+fn5/f4B/f4B/f4CBg4aMjY2NjY2NjY2Qj4+Pj46NjI6KiYuMjIeFiY2Lh4aIh4aHh4uNjo6Pj4+Pjo+Pj4+Pj4+Pj4+Pj4+Ojo+Pj4+Pj4+Pj4+Oj46Oj46Mi4uJh4eHh4aIhoaGhoaGhoaGhoeLiYeHiIiLjY2Mi4yLjY2Ojo+Ojo6Pj46Ojo6Ojo6Ojo6Njo6NjY2AeHZ4eHp4enx6fH5+fn5+fn5+fn5+f39/fn59fn9/f39/gH9/gIGDhoyMjIyMjY+QkpOTk5KSjYyMjIqHioyKh4eJiYWCiouIiYWJjpCNjo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6NjI2NjI2LiYaHh4eHiYqLjY6NjYyNjY6OjY2OjY2NjY2NjY2NjY2NjY2OjIyNj4+OjY2MjIyLi313dXd5enp7e3p+fn5+fn5+f35+fn5/f39+fn1+f39/gICAf3+AgYOFj5KRkJGSk5OTk5OTkpKLi4uLiomMiouLiYuKhoeOjYiIjI6OjIuMjIyNj46Njo6Ojo2NjY2MjY2NjIyMjIyMjIyMjY2NjYyMjI2NjYyMjI2NjIyNjIyMi4yMi4yMjI2MjIyMjIyMjIyMjIyLi4uLi4yNjY6Sk5OSkpSRkJOVlZSTk5COjo6Oe3Z2d3h6ent7e31+fn5+fn5/fn5+fn5/f35+fn9/f39/gIB/f4CBgoSNkpKTkpOSkpOTkZKSkoqJioyJi4qJjIuKioiHiYqKi4mKjY2Mj46Nj5KUlJOUlJOTkpGSkI+Ojo2NjY2Pko+OkZGOjIuKioqLi4qKi5CPjoyMjIqKioqKioqKiouKioqKi4yLi4uMjIyKiouLi46RkpOTk5SUk5STk5SUlJOTk5KSkpKSk5F6dXZ2eHt7e3p6fX5+fn5+fn5+fn5+fX5/fn5+f35/f3+Af39/gIGChIuRkZGRkZKSkpGRkpGRiYmIiIqMiYiJiYuJhoSJhoyKh4ySkpKTk5OUlZWWlZWUk5OUlJSUk5SUlJSVlZWVlZWUlJOTkY+QkZKQjoyRlZWVk5KSjo+QjYqKi4qKi42OjY6RkpCRkpKSkpGRkpKSk5OTk5OTk5OTk5OTkpOSkpKSkpKSkpKSj3h1d3l6e3t7ent9fX19fn5/f35+fX5+fn5+f39/f39/f4B/f3+AgYKEi5GQkJCSkpKRkZGRkZGIiIiIi4uJg4eLi4yMiIeHjYyNkpSSkpOTlJWWlpaVlZSSkpOTlJSUlJWVlZaXlpaWlpWUk5SUlJSVlJSUk5OVlZWUk5KTk5OTkJGSkZGSk5OTk5KSkpOSkpKSkpKSkpKSkpKSk5OTk5SUk5OSkpOTkpKSkpGRkZGPdnJ3enp7e3t8fX59fX1+fn9+fn9+fn5+fn6Af39/f3+Af3+Af4CBgoSKkJCRkZGRkZCQkJCQkIeHh4eIiIiFi4+KjI6Njo+OkJWUk5OTk5SUlZWVlJSVk5KSk5KTlZSUlZaWlpaWlpaWlpSTk5OTk5OUlJOSk5SVlZSTkpKSkpOTk5OTk5OTk5KSkpKSkpKSkpGSkpGRkZGRkZKTlJSUlJSTkpGRkZGRkZGRkZGRkYx0c3d6ent7e3x9fX1+fX5+f35+fn5+fn5+fn9/f39/fn9/f39/f4GDhIqQkJGRkJCQj4+Pj4+Ph4iKi4yNjYuOj42Mjo6RkpGSk5OSkpKSk5SUlJKSk5OTk5OSkpOUk5OTk5WVlZWUlZWUk5OTk5KSk5OUk5KTlJSUk5KSkpKSk5OTkpKSkpKRkZKSkpKSkpKSkpKSkZKRkZGSkpOTlJSUk5OSkZGRkZGQkJCQkZCRinN0dnp8fHp7fXx9fn59f35/f35+fn9+f31+f39+fn59f39/gH+AgYKDipCQkZGQj5CPjo+Pjo+Oj4+Pj4+Pj4+PkI2OjpCRkpKSkpKRkpKTk5OTkpGSkpKRkZKSk5OSk5OSk5STk5OTlJOSk5OTk5OTk5OSk5OTkpKSkpKSkpKSkpGRkZGSkZCRkZGRkpKRkZGRkpGRkZGRkpKSkpKSkpKSkpKRkJCQkJCQkJCQkJGGc3V2e3x8e3x9fX1+fn1/f35/fn5/gH9+fX5/fX5/fn5/f3+Af3+BgYGKkI+PkI+Pj4+Pj4+Pj4+Oj46Oj4+Pj5CQiI2PkJGRkpKSkpOTk5OTkpKSk5KSkZGRkZKSk5KTkpGRkpKSkZKSkpKSkpKTk5KRkZKTkpGRkpKSkpKRkJCQkJGRkZGQkJGSkZGRkZGSkZGRkZGRkZGSkpKSkpKSkZCRkZCPj4+Pj4+Pj4+PkX9ydHh8fHx7fHx9fX5+fn9+fn5/f3+AgH99fn5+f39+f39/f4CAf4GBgYqPj4+Pjo6Ojo+Pj46Ojo6Ojo+PkI+Pj4+GjpCQkJCRkZGRkZGRkZGQkJCQkZGRkZGRkZGRkZGQkJCRkZCQkJGRkZGRkZGRkJCQkZGQkJGRkZGRkI+PkJCQkJGRkJCQkJCRkJCQkJCQkZCQkJCQkJCQkZCQkJCPj4+Pjo+Pj46Ojo+Pj4+PeHJ2eXx9fHp9fH19fn5+f35+f39/f4CAf39/fn5/f35/f39/gIB/gYGAio6Ojo6NjY2Ojo6Ojo6NjY2Oj4+Pj4+PjoiQkZCPj4+QkJCQkJCQkI+PkJCQj4+Pj5CQkJCQkJCPj4+PkI+PkJCQkJCQj4+Oj4+QkI+PkJCQkJCPjo+QkJCPj4+Pj4+PkJCQkI+PkI+Qj4+PkI+PkJCQkI+OkI+Pj46OjoyMjY2NjIqDiYhzc3Z4fX58eX18fX1+fn5/fX5/fn9/f39/f4B/f39/f4CAgH+AgH+BgYCJjY2Ojo6Ojo6OjY2OjoyNjY6Ojo6Ojo2NiJCRkI6Njo6Ojo6Ojo6Pjo6Ojo6Ojo6Pjo6Ojo6Ojo6OjY6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Pj46Oj4+Pj4+Pj4+Pjo+PjY2MjYyNjoyLi4mJiYiFhYSDgoKEgnR5fXp4dXJrZWltb2xmZmdncHNzd3l9fnl6e3x9fX1+fn59fn9/fn9/f39/gIB/f3+AgIGAgIB/f4CBgImNjY2NjY2MjYyMjIyMi4uLjYyMjIyMjIyGj5GRjIyMjIyMjIyMjIyMjIyMjIyNjY2MjIyMjYyMjY2MjIyNjY2NjYyMjI2MiomKi4uJh4KAh4iEgXt6gH57fXx8fXlzcnJycnV1cG1ramppZ2NkYV9bXF1eWFVXWFlTS0VJSkpLTE1PT0tgdHR3eX19eHp5e3x8fX5+fn1+f39+f35/f4CAgH+AgICBgYCAgICAgIGAf4OEhYSFiIuLjYyMjIuLi4yGiYqKioqKh4OOkJGNiouLi4uMiYmKioqKiouLi4eDi4qIiYmGhYWEhIeJiYWCg397fHl6e3pzcHFxcW1samdsbWdlZmVmZGNlZGVkZWVlZWRkZGNhYV5dXFpYWFdUUFFSU1JTTU1KSUZESEpHR0hHR0xOSWdzdXh5fXp4d3l8fHx8fn5+fn9/fn9/f39+f4CAgIB/gICBgICAgICBgYFnXmBjYWNucX17ent/fXd8fHZ4ent4eHpvcHt4eXt8e3h3e394dXd0dHZ1dHZ3dXFycW5wcnBnaGtsbm9tamlpaGhlZWRkZF9gYWJgYF5dWVhaWltdXV9gX2BfX19gYmFeXl5eWVldXF1bV1dWUlRSU1NOUUpISUZERUhMTEhGR0lLSklNbXJ0eHp7end3eXt6e3x+fn1+f39+f35/f35+gIGAf3+AgIGAgICAgICCgWdYW1pZXFtcY1xaXF5ga3FtcHBvbm5vbmtpbmxrbG9qaWtraWpraWdmZ2dnaWhnbWdqZ2hlaGdjY2JhYmBgXVhbW1dYV1RWUVBUU1NNSkxLTExOTk9UWFhXVVVUUlBQTU1QT05LTE1QUU9MTEpHSUlHSEhJSEhIR0ZHSEpKSEhISUlISVZwc3V5ent5dnZ5enp7fH59fX5/f35/fn5+f3+AgX9+f4B/gICAgICAgIGBbFtYVlZWWVlaWVlYVVZoamxubmxra2poaGloZGVkYlxiZl9fYGNfXF9dYF1eWl5dWVleYmFeXlpZX1xYV1NOTUxLS0tMSUtNTktKS0tMSktQTEtLRkdHSUlGR0lISUZFSEdGRkVERUVEREVJSUlHSEdIRkZLTUtJSUlIR0hLTU1LTExMVXFzdnl6e3h2d3h3ent8fn1+fn9/f39+f3+AgIGAfn5/f4CAf4CAgIB/gYJoUlRVVlNVV1lZWVdXV1tbYWNfXlxbWFZWWVZSVFJRUVVUU1NTUE1KTU5QUk9NUFFRUVFSVlZRUVFUUFBOTk9MSk1MS0xKSktLRklJSkxJR0pISUlFR0dGRkVFSElKR0ZHRkZHR0hKR0dISEpMSkpLSUlISktLSkhKS0pISUtMTU9QUEtUdHR1eHp6eHZ2d3d6e3x+fX5+fn5/f35+fn+AgYB/f3+AgYB/gICAgH+AgmlQUlRXVVRWWVdYWFpbVFRTUlBRU1FRUU9OTlBQUU9MTlBPTk5NTEtNTk5QTU9QUFJRUE5OT05PTk9PUFFPTk5PTk5QTk1NS0lISEpJSUlJR0ZHR0dJSkhJSEhJSEhHSEdISElISUxLSklISkpJSkpIR0pMS0pJSUhKSktMTk1NTU9RTFVzcnN3enl3dnR2eHp7fX19fn5+fn9+fn5+gICBgICAf4GBgH+AgICAgICBbE9PTlRZVVVdW1lXV1hOTUpKSUZKT0xKSkdJSk1NS0pMTUpHSUlJSktMRkRGSktLS0hKTExMT01MTE5PT09NTk9MTk5OUFBPTE1MTk1MTEpJSEdJSElISElJS0xLS0pJS0pJSklJSUlJR0dKSUdJSUpKTk1OTEhJSklJSk1PT01MT1JOWXBwcnd4d3d0c3R3enx+fX5+fn5+fn5+fn9/gICAgICAgYCAf39/gICAgIFvS0pNTlFOTlVXVlZSU0lFQ0VFUkREQT5CP0RAQD5CREFAQURHRkVIRUJBQEBDQ0RFQUNFSEtPS0lJSkhHSklKSUlLSkxQTk1MTU1MTU1NTElIREZGR0ZGRklKSUlLSkhMSklKSkpJSEhKS0tIRkdJSklLTU5OSktPTUxLTU1PUE5QT1BgcG9yd3h2dHJzdXd6fX19fn5+fn9+fn1/gICAgICAf4CAgIB/f3+AgICAgXNQUE5OUE1KS1BSUE5RQ0RCQUZRRT1DPT9FSDk6Oz0/PTxBRkA+Ojw+PjxFRD0/RUE/QEFAREVHR0dHQkRERUZFR0dHR0pHSEpLR0NER0pHQ0RFQUFDR0hHSEdISktKSElMS0lISktLTU5MTUxMSkpMS0lLTU9PUFNRT1BQTk9QUlFNUGdwb3N2dXRycXR4eX19fX1+fn5+f4B+foCAgH9/gIB/f4CAgH+Af4B/gICCdlRVUVFQT0xNUFBOT09BQkFAQkE/Oz48Pj8/Ozg5ODs7OkA7Oz48Ozs8PEhMPT1BQT9CQz1BRERGQkZGREdJSEM/QEBAQUFCQUE/Pjw9PkFAQD8+P0BFR0dHSUtMTk1OTUxNTUpLTVBVU05MTlFOTk1OTE1NTk9OTk1LS05OTk1OTkxUbnBwcnR0c3Fydnl5fX19fn1+fn5/gH5+gICAgICAgH9/gICAgH9/gH+BgIJ4UVFSVFJTUVNTUVFST0BAPT4/PD8+QEE/PT45Ozo6Ozg5Ojg3Ojw5Nzg7Oz49Ozs6ODpAQEFCP0E/Q0ZEQkNDPzs+PkBDQ0E/Pj9BPkBAQj9APD9CQEFDRUVFSktQT1BPTU1OTExMT1JRUFJOTExPTUtOT0xMTEtMS0tKS0tKTU1LS1xxcXF1c3VzcXN4eHp9fn1+fn5+f39/fn5/gIGAgH+Af4CAgICAf4CAf4CAgXxSTU9RUFFSUlRSU1NOPDs8Ozs7P0BBQkA9PDk8PTw5Nzk6Ojk4ODo6Nzg6OTo7Ozg3ODk7Ojg8Oz1AQUA9Ozs+PD09QEJDQT9BQkE9Pj09Oz0/Q0RCQD9BREJFR0pKSkpKTE1MTExNTExOVVNLTE1USVBKSU1KSUpLS0pJSEdKS0lKZnJxc3RzdXJydnl5e31+fn5+fX9+f39/f36AgICAf4CAgICAgIF/gIF/gYCBgFZMTlBQTlJRUFBRUU44PT88PDo9PkFAQT8+PkA/Pj07PDw+Pz08PTs6PD09PTw8PDw7Ozo7PD49Pj8/QUA+P0E/QEBBQEBAPT8/PTw6Oz09PD9AQUJCQUBCREZGRkdGR0dISUtMTExLTEtKS0lKSk1MTEpMS0lISUxMSklJSElLR01tcHF1dXV1c3V4eXl8fX5+fn5+fn5/gH9+gIB/f39/gH+AgYCAgYCBgICBgYCCYUtPT05OT1BPT1BQTzo8Pjw9Oz8+PkFBPz0/Q0NDQD48PT9APz89Oz49PkNFPz9APTs9PT08Ozo9PkFBPz5AQD9BPz89PD48PTs7PD0+QUA/QD5AQ0NEQkRFSEVFR0hISEdGSUpJSUlJSUhKSkpKTEtKSklJSEhKSktMS0lLSkpIVnBvcXNzdHR1eXt7e3x+f35+fn5+f39/f39/f3+Af4CAgICAf4GBgICAgIGBgIJtTFBRTk9QTk5PUFBPPjw8PT4/P0A+QEA/Pz9DRUQ/PTs8QD46Ozo6OTc6PDk9PUA9Ojw7Ozw7ODk7Pz49PD07PEA9PTw8Pjs9PD0+QUBCQUBAP0JEQ0RFRkZGQ0VHSElJSEhJS0tMTUpKSUpNTUpLSktJSEhISEpJSktKSk5MSUlfcHBycnJ0dXZ6e319fX5/fn5+fn5/f35/f36AgIB/gICAgICAgYGAgICAgIGAgnZNTk5NTk5MTE5QT0w+QTw8PT8+QkM/P0FBQUJBQD08PTs+PTo6Ojw6ODk4ODo7PT8/PDs7PDs6Ojs+Pz89PDg6Pjw9Pj89Oz4/QEJDQkJDQ0FCQkFCQkRCQkRCRENGSUdGRkhJSUtNSklKSktMSkpJSkVESUlGRkhISUpKTEpGRmdwb3FxdHZ1d3t8fH18fn59fX1+fn9/foB+fn+AgH+AgICAgICBgYCAgICAgICBek5JS0tMTExFSUxOTTw/PDw9PkBAQUE7QkNCQ0A/Pz9APT9APjw+QD89PT0/Pj0+Q0Q/Ozw9PkA9PT5BQ0A8OTtBPz4+QT07P0JAQkNCQENDQUNBPT0+QD0/QUFBQENFRUBAQ0JDR0dFRENGRUZGR0VEQEFHR0ZDRkRHSEpHQz5IbG9wcHF0dXZ5fHx9fHx+fn1+fn5+fn5+f36Af3+AgICAgICAgIGAf4CAf4CBgIF+UUhLTU1NS0pLTE9RQD8+PkFBQEBBR0FCRUNEQT9AQEA/PUA+PD0/P0BAQENAQD9AQD49PD1ARUFCQkZIQz08QERDQUE/Pj1AQT4+Pj88PkBER0VAPkBBP0BDRkVDQkNDQEJEREJERUFCPkFCQkFCQEA9QUJDRENDQUNFR0E/PVZwcHFwcnV1d3p8e3x8fX9+fX19fX1+fX5+fn9/foB/f4CAgICAgYCAgIB/gIGAgX5SSEtNTUxLS05OUlVEQkBDQ0FBQkBCQ0BAQUFAQUA+Oz48Pz08Oj49P0JCRUA/QE5hX0pAQ0VJSUlJTU1LRUNGR0hFR0VFRUREQ0E/QD4+QkZKSkdFRUZGRkpOTktKSUdHSEtMSkdHQ0REREVEQUJCQ0BDREVEREVERUZDQkFEZW9wcXF0dnV4e3x7e3x+f319fX19fn59f4B/f39/f39+gIGBf4CBgICAgH+AgICAfVJJSUpKSEpKTE9SU0dGRUdIREdIREA+PDs+QERFRD88QUNEQj8+QT9BREVEQ1d1homKflhHSUpMTE5PT0xIR0hHSElJSEhHR0hIRUNFRUVFRkhKSkZFR0lKTU9PTU1LSktKTU5LSUhHSElIR0ZFRkZGREZIR0VFSEhGSEdIRlFub3BxcnZ2eXt7e3p9fX5+fX19fX1+fn1/f39/fn5/gH+BgYGAgICAgICAf4GBgIB8UEhHSElGR0lKTU5OSkxJSUpLTE5KRkNBQkNGSkhJR0hISUdGQkRGRERDQVV0h4mHh4aIgldJTE1MTU1MSkdHR0dER0dHR0ZIRkhFQ0RERkVEREhIQ0NDR0pKS0xMTExMTElKS0pKSUlJSEpISEdISUhHR0hGRkZISklJSUlIXW9vcXJ0d3d6e3t6e319fn59fX19fX5+fYB/f39+fn+BgIGAgYCAgICAgIB/gYCAgHxNR0ZIRkVGR0dKS0pMTUxLTU5NT0tJSEhKS0tMS0pLTUpLSEhGRkdGRVBshIeGhoaHh4iHfFBLTEtIR0ZGREVDQ0BBQ0NDQ0ZGRUJAPj5AQUFAQkQ/Pz9ERkhERUdJS0lJR0hJR0lJSUpJSEZKSkpKSUpJSkpKRklMTEpKS0tmb3Bzc3R2eHl7e3t8fH1+fn19fX19fn59f39/f35/f4CAgICAgYCAgIGAgICAgICAfU9GRkdGR0hHRUZHR01NTUtMS0lHQ0NDRElLS0tLS0tNTEtNTElGSlZsgYaFhISGhoaHiIaKdUlJRkI/P0A/Pz88PDw+Ojo8QUFAPjw5OTg8PD07Pjs5Oz9BQkFBQ0NDQEFCRURCQ0ZISUhISExNTEdJSk1NTk1KSktLSkxNU2xvcXRzc3d5e3t7fH19fn9+fX19fX1+fn5/foB/fn9/gICBgIGBgICAgYCAgIB/f39+UUZFRkdJSUdEQ0VGTk1MSklIRT85Oj5ARUhHSUlLTE9OTlFOUV5ygYWDhIWFhoeIiIiJiYyOZkJCPTg4Ojo5ODc4ODk2NDc5Ozw6ODU2Nzc4OTc4NzY4OTs7PD5BOzk5OT09Pjs7PUFERUhKTUxMR0lIT1JRUFBOTE1NT1Fdb3BydHN1eHp7e3x8fn9+f359fX59fX5+f39/gH9/f4CAgICAgYCAgICAgICAgIB/f39RR0ZHSEpIRkVGR0hMTEpJSUdDQjU2OzxDQEJGSEtITEtNVGd7hISDgoOEhomKi4uLiomKi4yJVDs4NjU2NzY2NjQ1NzYzNDY4Ojg3NjU2NTY3Nzc3ODo3Nzc4Ojs3Njg5OTg5ODc2OjxAR0ZJRklGRUZPU1JTU1JPUFBSVGVwcXN0dHd5e3x7fH1+f35/fn19fX19f39/f3+Afn+AgICAgICBgICAgICAgICAgH9/flJISEhJS0lHSUpJSkpLREVIRUJANTc4OD06PERCREZFSmJ4hISCgoOChYmKiomJioqKiouJiYqBSDY3NjQ2ODg3NDU3ODQ2Nzc5OTc2Njc2NTo6Ozo6PDg5ODk5ODc3Ojo6ODg3ODU4OTtBPT4+QkE/QUtMT1FQUU9PUFFXa3JydHR1d3p7e3t9fX5/fn9+fX19fX5/f4B+fn9/f4CAgH9/gICAgICAgH+AgICAf39+VEhHSUlMTUtKS0tMSUg/QEFAPDo1Nzk4OTc6QTk8RD9dhIODg4SEhIaJioqIh4iIiIqKjIqJiYx6Pjo4ODs8PT45Ojs8ODk7OTo7Ojk5Ozo5PT09Pzs7Oz06Pjw6PDs8Ozw7OTo8ODo6Ozo5OTk8Pzw9QUJESUpMS0pLTFdvcnR1dHZ4e3t7fHt9f39+f359fX19fn9/f35/f39/f3+Bf4CAgICAgICAf4CAgH+Af35URkVGSUxOTkxKSk1CPzo7PDo4OTk4OTk5OTo+PT8/RHeCg4SEhYaIiYiHhoaGiImIiYuMi4mKioxsPDs+QkNFRUJBQUI+QENBQD89Pj5APz4/QD9APT0/Qj9BQT9BPz1AQUA/P0E8Pjw7Ojs6OTs/PTs7PT1BQUNBQkNBWHBxdHR0dnl7e3x9e31/fn9/fn19fX5+f35+fn9+f4B/f4CAgIB/gIGAf39/gICAf39/flJFQ0FHSk5PTElHSzo4Ojs5Ojo7PDo6Ojw7PT5APz1hhYKEg4WEhomJiIeGhoaHiImKi4uKioqLiotePkRHSUtKSkZHR0RGSEdFQ0BAQ0VDQkBCQ0I/QERIRUNFREVFQUZFRkRGRkRAQj49QD49P0A+Pz8/Pj8+Pjo7PTxgcXJ0dHV3enp6fX19fn5+f39+fX19fX5/fn5+fn5/gH9/gICAgICAgICAf4CAgIB/f4B+UERAPUNIT01HRkJEOTc6PTo8Oj09Pj47Pjw/PkI/Sn6DhIWGhoaIiYiIh4aGhoeJioqLjI2MjIuKiodXR0xMTUtOSUlLSElKSklFQ0RGR0ZEQ0VGREJISUtHSEdGR0dFS0pMSUtLSkNGQ0NEQkFBQ0JEQ0NERENBPTw+QGhwc3R0dnd6eHt8fH19fn5/f359fX1+fn9+fn59fn+Af3+AgH9/f4CAgICAgICAgH+AgH9PQT49P0RMS0BCQkE5Nzs+Ozw6PT8+Pzw/PkJBRD5ohIKFhYeHiImJiIiHhoaGiIiIiYqMjYyMi4uKjH9QTVBNS05LSkxJSUpIS0ZER0hISUVFSEZGRUxMTUlKR0dISUpOTU9NTE5LSEdHR0VFQ0ZGRkZERUhIRkNBP0BMbXB0dXZ4eXl5fHx8fX1+fn9+fn19fX1/f35+fn5+f39/f39/f3+AgICAgIB/gICAgICAf1FBPz4/RkdHPTxAQDg3PDo7PDo9Pzw9PT9AQ0JIU36DhISFhoaHiIiIiIiIh4eIiIiJioyNjIyMjIuKjXFNUU9NTExMTEpISEZKSURKSEdLSkhKR0dHS0xOTExISElKTVBOT05NT0tJR0lKSElESUhIRkZHR0lHQ0JBQ1VvcXV2eHp7eHh6enx8fX5+f39+fn1+fX5+fn5/f36Af39/f3+Af4CAgICAgICAgICAf39/VERBQUJHSEI/OD9AODo7Nzw9Ojw/PDw9P0JDQ0xthIOEhIWFhoeIiIiIiIeGiIiIiIiJjIyLjIyMi4uLi15SUlBNTk1LSkdGQ0hKR0xKR0tPTEtKSk1NTE9QTkhJS0xPUVFQUU9PSklKSkxKTEZHSEdGR0lGRUVCQEJCXHByd3h5enl5eXp6e3t+fn5/fn59fX19fn9+fn9+f4CAgIB/f39/gICAgICAgICAgH9/f39VRUNFRUdHRUQ7P0E7PTw4Pz09PkBFRD1CRENGSnWGg4ODhISGiIiIiIiIh4eIiIiIiIqLi4uMjIyMi4uNfFdWUlJUUk9MS0pFRkZLT05PV1ZRUE9RU1JOU1RPTVNMUFNVV1JTUlBMSk1NTUtOR0dKRkZJSkRERUVCRENjcXV5eXp6ent6e3p7fH59fX9+fX19fXx9fn5/gH9/gICAf39/f3+BgYCAf39/gIB/f39/f1VGRkdHR0dIRj5AQj0/PTxBP0FBRFRLQkhJRklLeIaDhYWEhYeIiIiIiIiIiIiIiIiJiouKioyMjIyOi4uLZ1ZWa2FFUlFRUEo7O1FTUmB1XVVWVFZZWVNZWFJaZlBVV1pdUlRXUVBOUlBQUFFLS0tHSEpIRUZJSUlISWpzdnl5enl6e3t8ent8fXx9f359fX19fX1+f39/f3+AgIB/f39/f4CAgIB/f3+AgH9/f35+VEhKSUlHR0ZFPz9BQEVBQ0ZEQ0RLVlBKT09OUFB5hoWHhoWGh4iIh4iIiIiIiIiIiIiIlJyMioqMfWGKi4uHbFtkVTpYWFhTUD9AVlVZXGRgVllicl5dV11aVkVRWVtcWV9UWWdSVVZYVFRWU09PTUtMSklJTE1LT01Tb3R2eHl4d3l5ent6e3x9fH5/fn1+fX19fn1/f39+f4CAgH9/f3+AgICAgH9/gH+Afn9+fn5WSkpJSEdGRERCQT9ITElNUEtJSk9TUVBUVlVWVHWFhIWFhYWGh4iHiIiIiIiIiIiIiImcnaCPiY5nO36MiYqLem5wWFpbWlJTUldWVFpadYNZVX2QYVxYXV5XSVZeXltbX1lIWVhZXF1YWFlXUlFNUFFNTU9TUVFVUmFzc3Z3d3Z4eXh6e3t8fX19f39+fX59fX1+fn9/gH9/gIB/f3+Af3+AgICAf39/gIB/gHh5fVlOS0pJSUZCREBBOk9RUVdYUFBQUVJTUlZXV1dXbIGCg4WEhYaHh4eHh4iIiIiIiIiIiJaanJeIioFuhomIh4OKfmZZWVxZU1ZUV1JRV1ZjloBRZXJYWldfaFBgZlpaWFxoYkdPWmlnXFtcXV1XUk5TUFBRVlZWVllab3N1d3Z2dHd4eHt7fH19fX5/fn59fn18fn9/f3+Af39/gH+AgH9/gICBgYB/gH1yfX9/b3R8XVNQT01LSkVDP0A7UFBaWlpSU1FPUVJRVVJVU1ZedXiAhYSEhYaGhoaHh4eHiIiIh4eIh4ORjomJiIaFiIiGfYB7XFBWWFRSVFJRUUxPTUtmeVpdVFlVVl1aTFRaVVNUXlpYV1dXemtYWlxcXlRRUVBJTk9XVlhbWmRxdHZ2dHR2eHl5e3t8fH19fn99fX1+fX1+f39/gICAf3+Afn56eHd2c3V7f3+AgHRrfn5rcXleW1ZVU1JPS0ZDREFNXoNsVlJTT09RT1FWUVNSUlRjZHaAg4KDhISEhIWFhISDhoaGhoeIhn6JiYiHhoOHh4d5bXFWSUtOTktNS0hKREZIRUM+U2NVf1JRUU5LUlVSTU9ZUU1OUVNVVU1RU1JQT01MSENJR1JTVFpdbXJ2dnV0dHd7enp7e317fX19fn19fX59fn9/f39/gH99fX5+f39/f4B+e3Zzd31+fmR1fWlxdGBkXV5bWVVRTElMSWFsknRQUVNNUVJQU1tSU1JRUlVVYnN7fH6AgYKBgX99e3uAf4OChYaHgoaGhoGEgYaFhnVfXUtDPkJCQ0NBP0RQQ0RAQz5CSEdWQElOTUddaVFIRk9GREVGSEdIQkNIR0hLR0RCQUNATlBNUmR0dXZ1c3R2eXx6e3t7fH19fHt+fX19fn5/f3+AgIB/f3x8fX+Af39/f4CBgH12dHt/bWh8Z25xZmhlZWJcWFNRUFVSc1dlW09PTkxRUlBVWVNVUVFUUk9WYGtsc3Z6e3h5dXJuc3RzeXh+foOAg4OCgYKAgoGBa0xHPj46Oj5APz4+PmpQSmFFRkhJRUI/SE1NR01RVUpCRT8+PD08PT0/PT9BQ0NAPzw9Qj5JTUZVb3V1dnN0dnh6fHp9e3x9fX19fH59fXx+fn9/f4B/f39/enl3eHd2dnh7foB+fXt4dnx1YXhnbHBqbGppZmBbUVFaXFleSUpPUE5LTFFSUVRVVVdRUVdWUFhbYl1hZ21tbG9raGBucmltbHF1e3p9e3h6fHx4d3hkQkBAQTw6QkNBQUNBW1xOe05PT05LTE1PT1BMS0xXTkhHQUE8OTc3NTk5PTs7Ozg5ODk/O0FHPlx0dXV3dXZ3eXx8fH18fHx8fn18fX19fX9/f39/fn9/f314dXd6e3p3eXh1d3t8eXh1eXdjcWhpcG1ubW1oZl5PT15cWklHT1FRT01QUU5RUlNWWFNSWVROWVpbV1lcX15fZWBdXnF3a15gZ2t3b29sam9ubmxmYllHRkZIQkFGSEVFRkNMUU9hV1JYUVBTU1JVW09PUVdQTUpERj46OTY1ODc5Nzk6MzY1Nzk1PEI9ZnR1d3h3eXl7fX18fHt8fX1+fnt9fn19f39/fn5+fn9/e3d1eX18enh8fHx8dHd2d3Z1d2tuaWhxbm9vb2prYFVXXlpXTUtTVFNQUVVPTFJTVFdYU1RYUUxYWVlWWFhWWFldV1hYaHNrXVZgdGthYV9dZGBfXllVUE1PTUxJR0pLSUhGQ1BPU1pXVFROUVNZU1xlVU9TVFFOS0lIQz9BOTk4ODk3ODg0NzU3ODU5OUducnV5eXp7e319fX18e318fX5+en1+fH1/f359fn59f358dHR1e3hycW9vbnR4cXJzeHZ1cWZkZ3JucHBxbm1kXV9fWVdPUFdWVlNUVk9PVVZXWFlTVVRMS1NVVVVVV1BUVVdUVVJdbl5STllgW1ZZO0RVV1RbZkpMUFJST01NTk1NTEpGUFBVWVNUT0pOT1VTVFxWUlVTU09NTElISEY/Pj06Nzg3NjU5OTY3NTY1V3FxdHh6ent8fX19fnx8fXx+fX15fX18fn5+fXx8fX1+fXxydnF4eHJ1dXFxbnBwb3B1dnRuamRkanBwcXJwbmZlZGNcXlJUWlZXVFNWVFJYWFlZWVJVT0lHT1BPT01SSk9QT09OTk9UTE1JUFBTVFUyPFhNSUFRPWNgUVNRUE5QUE9OTk1QTlRSUFJMSUxLT1JQUVJTVFFTT0xNS0xMSENCQT06OTg3NjtCNDU2NjtlcHJ2eHl7fHx9fnx9fH19fX18e3h8ent9fX58e3l9fH18e3B1b3d1cHV0b3N2cHFxcHV1dmNqZ2VXaHRycnFuaWlocFZWVFVYVVZVUldWVVpZWFdVUVNGRkFGR0dIRkpESEpIR0VITEhLSUdMTVBNRy9FX1I9M0A+am9hUlJRQEdUUU9QUFFOUU9QT0xKTExPUE5NUFFRTlBPSkxNTUtHRUVDQjs9PTw5PUc2Njc2RG5xdXd6fHt8fX18enx8fX5+fXt5dnh3eXl8fXp6dn17fHp6b3Fud3JwdnFtcHNwb3Bzc3N0ZmdgaFpXa3JzcmxtbWtuYmVQU1RSU1VPV1ZWWVlWUVFRT0A+Oz0/QEJBQ0BCRURBQEdIR0hGRkhKTUxER0NPUkI4RE1TXWdTUVNBR1VQT1FRUE1NTkxKTEtMTk9PUUxOTk1JTUxJS0tMS0dGRkVEPEFBPjtARTs8ODlUcnN1eXt7e3x8fHt5fHp6fn58e3V0dXJ2dnp6eHpyfHt8eXltcW94cnF1bm5xcm9vb3Rzc3J1dGtnZ15lam1wa29xbWltY0xPTk1RU0xUVVRXV1VMTEtIPTk4Nzs/QT49PUFAQj0+RUhGREZGSUdKSkBGQUFARUdESU9IUVJhXFFQUk9TTk9PTExPTUtNTE1PTltWS01RT0hKSENJSkxMS0ZGRkU/QkM+PUJHP0I/QGRydXd7ent7fHt6end8d3l+fnt7cXN0cHJzd3R4eHN6e3l2d2xxb3ZxdHRsb3Fybm5vc3ZydHNycmtsZW5zaG1ubWxtbGprSUxISE9RSlFTUVRTT0tIQ0U9OTg3OT9CPzs+QUBAPkFESUVDSEdJR0lFQkI/PjxCQUBHSURNT2JlUE1PTVdLTE5LS01NTExLTk5TZE1KTFJJSUlFQklKTE1OSkdJRkJCQkA/RUZFSERMb3B2enl5e3t6fHp3dHh0eHx8eXpucXJtbm9ycnZyc3h8eHZ2bXBtc3B1dGxwcHJvb29ydnVyVlZucWdseYRqbXFybm5qaG9ISkNHTExJTVBNUE9IS0U/Qj05OTk6P0I/PEFCQUFEREdLRkRJSUdHSENDP0I+Pz9APkNFRExNUVRMSklNVEZJSUpMSUpLSUpMTU9QUlBLR0NLR0NDS0pMTk9OSUpJR0NDQ0RJSk1MSVpzbnh5eHp7e3l8dnJwdXJ0eXl2eGpxbmpsbG50dG1zdXtzdHhyb25xb3ZzbnBvcnBvcHN0eWpOYGdzanR8eWdvc3FpcWhlcUhKQ0ZHSEdKS0lKTERHQjw+PTo6OjtBQj89QkJDQ0hFSkxKRUlJRkdIQ0M7QUBCPkA/QkVESU1PR0hKR0hLREhJS01ISkxISUpMSk1dUkhJRE5HQkVMS05OUU5MTUpLRkdHSk1OUk5NY25qd3Z3e3l7en1xbWxza3B0dHR1aHBtamlra3RwbnR0eXByeXRvcnFvd3NvcXB0cnBydXR5a05WbXVscXt2aW5vaWp0aGVwRkpDRkVGREVFRkVHQ0NAPTw9Ojs6O0FEQT9CQ0VFSUZKSkxGSUlHRkZEQjpBQ0M+P0NDQ0RHS01ISk5IREhESUxOTUhJTEdGRklJTE5LSUhFT0lDR05NUE5QTk9PTUtJSElPU1FSTlNnZ2Zyb3N4dnt6fGxoam9la3Btc3FmbWxoaWtsdG1wdXR3cW94dG90c3J2c3BxcnRzcnR1dXZ2WFZ1dWtvdHJrb3ZsaG1mX3BHSkNFRURCQkFFQERCPj8+Ozs7PTs9P0RCP0FDRkdKRkpJTEhHR0dGRUM/PURFQj5BQ0JDRUdISUdNUElGRkZLTk9LRkhJRkVDRElJSEtJR0hQS0RKTU1RTk9OT1BOSkpJTVJVVVJQWGVhYW1mcHJvcnl6Z2VoaGNpbGZxbGZsbWdpa2xzbXB2dXRwbnZyb3Nyc3V0cXNzdXRzdXZ2dnl2dXR2bGt1dW1ydnFsbmxlck1HRURGQkFAQUQ8QkE+QT06Oj0/Oz4/QUI/QEJFR0pGSkdJR0ZGRkVEQ0FBRUZDQkJCREVFR0dIRkxQTElPSkpMS0lGSEVGRUNDSEhIS0pHS1JNQ09PTlFPT09OT09LS0tQVVdWVlRZYF9daWBtam5ocnNiZWZmZGhoZm5pZm1taGtrbXJpcXZ1c3Ftdm5vcXJzd3Nyc3R1dnZ2dnd2d3Z2dHd1a3N1bnV0c3Bya2tzTUdHRUdBQUBDRDxBQUBDPDg6PT46Pz1AQkBAQERGSEVIRkZIRkVFRENEQkRJRkNHRUFFR0VGRkdFSk1LSFFNSktISElFRkhIRUNJSUpLTUtQU05EUlNRUVJOT01PUE1MTlNXVldZVlheWl1kYGhjamlna19kZWZjaGdna2dna21rbWxwcWd0dHVyc252b3FwcnR4cXNzdXZ1gpF5dnZ0eHV1d3hub3VvcnN1cXFpcHpNR0dHSEFBQkVFPEBDQkQ8Nzo9Pjs+O0FCPj8/Q0VGREZEREdFQ0VDREZGRkpFRUlHQkdIRkdGRUNGSkpHTUtMS0hKS0ZJSEpIRUtLTExOT1JUT0hUVVRRVFBRTU5RTk1RV1pWWllXWl5aWGFgYGBeaGVjYGRlZ2dqaGhqZ2hubGxvbXFwaXV1eHJycHVwcHBydXZwdXN1dnV7fn14dnR3dnZ2d3BsdXBtc3Vub3NzeU1ISEdJREFDR0U8QEVCRDw4Oj4+Pjw8QkM9QD5BQkZDRUNDR0RDREVGR0dHSUZHS0hDSUhHSUdGREhLSUdLSE1LSktMSEtKTUtJTkxOTk9SVVZPTFZWVFFUUlJMT1FQT1RZWllcWlpcX19dYGNeXGJkbGNgZGdocoVoZ2pmam5ucG9uc3FqdHV4cnNzdHJucHF2cnF1cnV1c355jn11dXZ2dnZ4cml1cWtydGxxd3F1S0lLSEpGQkRHRT1BR0REQDk8PkA/Pj9DQjxAPkFBRkNFRENIREZERkZISEZIR0lLSkVKSEhKSEZGTEhISEpHTExMTExJTUpNTk1PTFBQUVVWV09LVlZVU1NSUUxPUlJRVltbXV5bXV5gYGFgYmVeZGBmaGBlaGpkc3NmamhnbHBycW9zc25zd3dwdXZ0c21vcnVvcnNwdXJ2cnSBdnV1dXd2dXd0Z3Rya3Fya3J3cHdJSkxJS0dCRURFPEFGRERCOz8/QUBAQURBQEI+QUNIQkVERkdFSUVGRUlIRklISkxISEpKSUtKRkpLSElKSkdLS01MSklMS01OTk9MT1BSVVdWTU5UVlVTUlFQTU5UU1JXW15eX11eYGBhYWJgY2RlYmRpY2Rpamd2i2xraWdtb3NxcHFwcHJ5d3J1dXRzbW1zc21xcm90dXVzcHN3dHV1d3Z1dXRlcXNrcHFqcnZwd0pMS0tMR0NDQUU8P0VFRUM9QUFDQkJDRUFDREFBRUdDR0dIRkVJRkNHSkdHSkVJTEhJSk1LTUxHS0lIS0tOUUtSUUxTTUpNTU5QUFBUT1dYWFtOU1FXXFpTVlBOVFVUVFhaX2JiX2RhXmFjXmBmYmFjaW5oY2loaG14dm1oaW5vc3JwcXJycnZ0c3Vzc3Nua3NxbXByb3R2c3FxdXZ1c3d5d3V0dWNtdGtvcGpxdHB3TE1MTExHREFARD49REVGQz9DQUVEREZDQkVHQ0NJRUJISklHSEpGREtKR0hKSElLR0pKTktOTElMSEpNS1pmSmRcS2xSR05NX25VbHNbcXBid2NSUGJ2dWh1Y2F2YVhucWJkdmluemZcbHVgbGtVX3d2aWpoaGZnbG1qbW9qbW9zcnBycnFyc3Jzc3J0cm5sdG9ucHFxdXVycXN0dnZ1dXl3dXR0YGt0a3Bwa3FzcXlLTkpLSkZCP0BCPzxERUZEQ0NDRUVERkJFRkdEREpEREpMS0lLTEdHTkpISktHS0pJS0pOTE1NTExJTUxMW3NiZHBebGxVTE5lcl1nZXFsbnRncGlfYVlubWJwcGJrampnb3F0ZXRublxwdmdwTktxeXZrYWFrZWVseG1rdmxub3NycHJxcHFycXJycnRybW1zbm5vcHJ1dHFzc3R1dXV0d3h2dXRibXVrcHBscnJxektMSUlHRUQ/QUE/PUJFRkJFQ0VERUVEQ0hIR0RFS0hHS01NSkxMRkpOSEpLSklLSkpJS01NTk1NTUtOTU1bcnBvbnBwbGtNUFFsWE5pYnRycGFtb3ZcWWxQW21tWnFta29teHh0c2lwXWBzbHFqVXV5eG9jXmtmYmdwcGppb3Bwc3NwcXBxcXJycXFycnRsbXJtbW5vcnV0cXRydHV1dHV1enZ1dGVudWtwb2xzcnJ5SktHR0ZFRUJBQj0/P0VHQkdESUVFREJGSUhIREdLSkdNTE5KTE1HTE5JTUtISk1JSkpKSk5PTk5NTE5NTFxoZHVdbHFXbE5PUW1VWmtea2x2YWxkdFRlY05sWWxcdHBraWx4and1aHBdX3NraFdiY3d8b2NgZ2hhY2l0eWtubnFzc3BxcHFwcnFwcHBydWttcW1tbW9xc3Rxc3J0dnZzd3Z6dnV0aG91bHNvbXNydHZJTUdJRUVEQ0FCPEJAQkZDR0ZLR0VDQ0hLSEhGSUxLRk1LS1JSTEhNTUhOSklITkdKSkhITk9NTkxKTk1KWnRwcG9xcW1sT1FSbllza2dvb3Fxb210Xm5YYXRfbm9wb3Fyb291c3R0altedGN3eHJqbnpoYWFjZmFiam10dXBzdXZzcXBwcW9ydHt/fn13bGtxbmxtbnByc3F0dHN1dXR4eHl5dHVrb3VtdG9uc3N2dElLSEpDRUVFQEA+Q0NBRkNISU1IRkNGSkxJR0ZLTUxGT0pLV1JLR0tKSk5JSUpMSUtKSUlLTE1NTElLS0tTa2JZaV5famNyclpfWWpvX2VlVWtfZFthYlFgbWhcalxuaWlkW29lZHBdWlxrW21xY3BzbGRnY2RnYGBrbXBwb3R5cnVxb3BxbnmFiIeHhoWAdnNua21tb25xcnR0cnR1dXZ5eHhzdW5xdW53cXJ1dHdySEhGSURFREZBQEFFRENHQkhKTEdGREdLTElFRkpPTElPSkxbUUpGSEhLTUlISkpLS0lISkdLS0tLR0hLSkxLTEpJS0xOVFtdVFBVTVFPTk9PVVJQUFFPT1FKSk5QUWRxaVRZVltbXFVZW11YXVxcY2ZhYWZiY2ZfXmZrbWhtdHhydHJvcHB0hoeGhoaFhYaHg3pwbW1sa3FzdHRydHZ0dXl5eHV2cXJ1b3ZydHN1dXNHQ0VHRkZBRUM/Q0dERUdDSUtMSEZER0tMSERHSVBLTE9LTFdNSUZFSElKSElLSExKSUZISEpISEhFRkxISEpOS0hPXFdeT1xcYF5PWFlTXFxiXk1ZWk1YYVJLWWFaU2BkXGFYW2RkVlZYXFlaWFxWWVxeY19kYGFfZWhrZ210dHFxdHBxcoGGhoaFhoWFhYaGhoR9cmtpb3Jzc3N0d3l5eHl4d3h0cXhyeHNxcnVydE9CQ0RMTUFDREJESUVHR0ZLSktIRUVKSkpGREdIUEpMTUpNUklIRUFIRkpJS0tJTEpJR0VKSEVGR0VFSkdCSU1JSlRfWWBYYGFbYFVYWVReXlpfUllcUF5cWU5fXF5TW15kXlpdYGNfWV9iW2BeW1VZWFpfXmRjYmFjZWlla3Jwb3Bwbm93hoaFhYaCe4CFhYaGhYaFf3VxcHJyc3V5enp5eXh4eHdyeXZ4cnF4dnR2YVNKSk1JRUNCQ0ZHRUdHSUpKSUlERktKSkVFSElOSk5MSExOR0hGPkdHTElLS0pLS0lHRUlGQ0RFQkZKRD9JS0lOW2NZXl5hX1JUU1dfYFxdWV5RWVxNVl9XS1FZW1FbX2JhXV5jYWBiYmJjY2VaUllWV11bXmRgX19jZWJob21tbGxsbHWFf4SDeXV8hIWFhYaGhYWGhoN9d3JydHd5eXl5f359eXV5dnZybnp3dnhYUUpGREdFQkVHSEZHSElGR0pHSEZIS0lLRENLSk1NTExISkpISkc/R0ZOSktLTUtLS0lHSUVFQERBSElBPkhJRk9dYVpbZF1fVFFSWF1cXFxfW0tXXExSXFlJTV5RUV1fYmNjY2NiXGRjYmRjZVhSVlVUXVlbYV9eX2FhX2Rsa21qa2xudn51gXp8hIWFhYWFhYaGhYaFhoaGgnpyc3V1e4WHh4eGhYSBfnhwend2eFxSTUNASUZDRktJRkdHSUdHSkZGRklMSk5FQ0tKTE5KTElLSklJR0JISFFNS0tPTUtLSUhIRkU/RUJISEFARkVDVF1ZXlhfWV9bXVVYWFBdXVFLSlZeWF5bXVZaYVJSX19iYmBgYmJfY2JiZGRiWFBSUlNcVFxdXV5eX19gZGhnbGpubnB7e3x+e4CCg4SFhYWFhYWEhIWDhISHh4FzcneFh4eHh4eHh4eHh4WDgHx4XFNLQkFHRkRHTVJIRFJLRkhISERGS0lNUEVHSUpLTkxMSUxLSklHREhLUU9NTFBNTEtLSUpERUFFQ0hGQUFGREFWVUVcVF5TVl9YTlRVTlpbTUpLVGBhW19YX15iXU9YYlxgYF9iY2FdYmJXX19UUVBRUllTXlxbXV5fYGFmZmVsZm9vd3x7gHt9f4CEhISEhIWFhYODhYKDgoWFhnpvgYaGhoeHiIeGhoaFhYSFg35JTkZERkZHRElTY1FFV19JR0dIREZNSlBQRklJSktOTExLTUtKSkdFSU5RUU5PUE1OTU5ITEJEQUNDRkRDQUNEQExIQ0xMUE9OTEZNRkZISUhHTExNT1BJTE9QUFNQTFFUUlVaWFdZV1djVk9TVFBRT09RVVRcWVlbXl5hYWVmY2hkbG1xc3N6eX97en+EhISEhISEhIKEgH57gYOBfXuFhIaGh4eHhYWFhISEgoGAfUtJRUVHRkdES01eTUhIWU1HSEpIR01MUVFJS0pLS05NVU5PS0tMR0dLUFRTTlBQTk9PT0hLRmBFRF5MRGZjQ0xbSF5cc21PTVZtWUxDT19UbFdnSl1XVV5ETFFVTE1TVlFSVFhWVFhUVFxUUGZaaGhlWlRrVFhXVVtcXGBgYWJiYmBnaWdubGhyenx9foGEhISEg4ODgX19enJ7gXp7f4KAg4SEhYWBhIWBg4N/fnp7TElFRkZIRUVLT1RKS0dgVEhKT0pJT01SUUtNS0xPUlVST1BKTE5HSE1RW1lPUFBOT1BQSktRf1FJfFlZcnNXUG1HcW5vYVZQcXF0T0Jqc25xdHBTb19bblhdVlxYVWtoVV1WY1lgWVpeVVVXf2l0dXVfYXZfWWJcXGZbX2FhYWJeYGNnbW9sYHB3dHiBgYKDhIJ/fX6Adnh6bXZ+dHh9gHx+gIGChHyAg3p/gX9+d3dOSUVITU1CRExMR0pMRlJWTEtPSExSWFdRTk9PTVFUTk9RUEtMT0dNUFNbWlRRUk9QUFBLSVp4XVR4ZGhYUlNQdmZ0bHBibmZrUnJOTHdtanJwc3JxcnBvcIBdZXp1eHFxenF+cn1rdX1hUmh8ZXNzb3NzfH1wfnhvf3JgYGBiYlthYWhsbmtibGZnbXd+gYCDfnt4d4B0dnpocn5udHx+d3h7foCDeHyBdXx/fHxzc05LRmBdR0FFTU1IS0tISlFPTU5KTlZeWVVMUVNOWVlMU1JSTkxQSVFSVFlXV1FUUFBRUktIZ3hsY3hxbVpKTFR5cHVtdWJudlBkZEhldnFtd2+AamZ4eGlXclFoem1panp6fWx4en9waG5YdXVqdnVwgGFzaH1pbHh8b19fX2NiXF9kZWdqamVnYmNkbGxwcHN0c3NzeXFyeGJsdGdyeXtzc3V5foFzdnpufH15eHJuTUpSdE5DQkVQUUhLTEpMUU9PT01QWmBaWEtUV1BhXlJWUVlTTVBKU1RVWFdXUFVQT05TSktyb3V1cXVxY2hhVm5McXBeR2h5V3ZUS2h4fXdgeXtzbmFdbW9kU2dydW5teXB3bHZzdHFsbVxzfnprbXl8bHVufGxxdnV4Xl9fYl9dX2VlaWdoZmVeYmJpaWlqa25va3FubWpwYWNmZG93eG9tcHN5f25xcGp7enRyb21LS1pWSEdFR1JRS01OTExRUVBQUFFXXFlVTlZZVWZYUlJZXlRNTkpUVFZXWVdPU09PTlFJUm1IaXdLYGR2dVVXbE5ubHtyYWpnf3VUS1drZ3xsbWx4X1pwentfYHpzY3JveHFoZHxpcntdVEtrX3Z1bGp2fHttfnlrfHBdXl5iW19iZGVnZmZlY1tjY2lra3JzcndnbWloZGdgYWxhZ3NybGdsbXJ8a21oa3t0bW1rbU9HSktISkhIUlFNT1BNTFNTUk9TUlhSV1RQV1pWVlRUVGFgUU9OS1RTU1FWVk9PTU5PUUpIUU1PVUxLS1JTUlJST1ZVUVFPUlJYWFBOUFVUV1hYW1tVUVJXW1dYV1tPUlRXV1hRXVhWXFVUT1hSV1dYWVpgXGdyX1tbWl1dX2NaX2NjZWdkZGRjWmRiZ2ZmbW5tdWZmZ2NgZl5eZ2BkbGhmZ2tocHpoZ2drdWpoZ2lsUElLS0xNS0pUUk5SUVBMVlVUUFRVWFVaVlJbXVZVVFdVWVhPT0xOV1RQTlVTTlBOTFFQS0lRUUtRTUpKT1FUUlBRU1JJSU1PUFFSUFBQVFVSWFdcV1NSUFFVVVVTWlFOUlFXVVNZVlRYVFNRVFNVVVlZWF5aX2FdXFpaXFxgY1xeYmJkZ2VlZWJZYGFjYWJoaGpuY2FkXl9jXVpjXGJtYV5mZmdtc2RpaGtrZWRjZmhRSktLTk9MTVRRT1RRUU1YV1VUVlhXV1pWU1xgVldWWVVYVFFQS09YU1BOVVBOUU5MU1BNTlVTTlFOTU5RU1BUUFJUVE5MTk9SVFRRUVFVV1VZWltaU1VSVFhXVllcU09TVFdVVFlVVlhUUlFXVVZYXFpcYF1XWV9dXl1cXWBhXltiY2NoZ2ZlYlhgYGJdYGhlZ2VhXl9dXV5aWl9aX2dgXl5dY2hrYWhmaGZkYGJkYlBLTUxQUUxPVFBQVFFPUVpZWFdZWlpYWVZdamRWWFlaV1ZTVE9LT1ZUUE9UUFBRTk1SUU9RWFRRUU9NT1JUTldRVFRVT05OUVRVVVJSUlRYVlpdXFpWVlFSV1hVW1tWUFNVVVVWWFNXV1RSUVhWVltfW19gX1ZfXV5gXFxgYF9fWmJjZWloZWViWWJgYl5eZmRjYGJdXFxcXFlaW1hbYVteXV1fYl9fYmRkYmRfX2BcUE1OTlJRTVJTUFNUUU9WXFpaV1tbXFlaW2RxbWhkX1tZVlZYUk1OV1NNTVJPUVJPTVBTUlVaVVRQUExQV1VRVlJTUlhNT1BSVVhVVFRTVFlYW15dXFtWUk9VVlVbW1ZRU1ZUVlhUU1haU1JRWVdXXV9bYF9gVmJcYGFdYGJfXGBdY2FjaGllZmBaY2BhX19lZV9gY1taXFtcWlpZWVdcWlxbYF5gW15eYWBfY1xZYFpRTk9OVlFQVVNQVVRTUFdcXFxZXlxfV1xeanB3eYBjXFtWVllSTlBXU05RUVBSVFJMUVRTWVtXVU9STlNYVlNSVFJSWk9RU1NWW1ZWVlNWWlhdXlxcXlZTTlRWVltbVVFUVFVXWFJTWVxUUlJcWFpdXl1hYWBXYltjYl5hY19cYmFiX2RnaWVnXVxlYGFgYWNkX2JfWVpfW1xbWFhZV1daWlphXF1bXVxcWl1gV1tbWlBPT09ZUFVVU1JXUlRQW11eXVxgXGBVXFxoanJ9c2xoXFVZV1FPUltTUlFUUlRVVEtSVlVaWlpTT1NRVVVVU05VUVJaUlRVVFhdV1hYU1hcWF5dWVpdVVVOVlZXXlpYUVRUV1hYU1ZZXFRSVl1ZXV1hXmNjX1lgW2ViX2RkXl5jY2FeZWZpZWZeXmRhYWFiY2RfYl5YW19bXFtYWFhYV1taW2BdW1tcW1haW15WXlldUE9PUlpQWlVWV1ZUVFReXmBfXmJcYFVdXmJreXVtfWxaVVpWUVFUXFRUVFVUVllXTFJaVlxaXFJQVVNXVVVTT1dRU1hTV1VWW15YW1lVWl5YX15ZXFlSV1JZWFlfWVlSVFVZWVlVV1lcVVRaXV1eYWJgZWRdXl1dZWFiZmReX2RjYFxnZWhmZGJgZWFfYWFiYl9gXldZXlpcXFpZWVdWXVpdXltaW1xbV1lcXVZYV11TT1BXWVBdVVZZV1dVWF9gYWFgY11gVV1eYmVldoJ7aFhZWlRWVFZcWFdXVlZXXVhPVVxZXl1dVFNYU1dVVFJTV1FTVlRYWFheXlhdW1VdX1hfX1hcVlFZVFlaWmFYW1RWV1paWlhZWVpXVl1fYF9kY2JlZV5iXGBmYmRmZF9gZGJhW2ZjaGZkZmFmX19hYmFhYF9eVlVdWVtcW1lcWVldW1tbWFhZW1laWl1fXVRZXVVOVFpWVFxVV1dZV1ZcYGFhY2FjX19WW2BkYV96dW9oWlxaVlhWWFtaWVtZWFlgVk9UXVtgYVxVVVlQVFZVUlZVUVNVV1tbXF9fWl9cVl9fWV1eWV5WU1lXWVlcYVldVVZaW1pbWlpZWlhZX19gYGRjZGVlY2RaYmZjZ2ZlXmFiYGNdYmNpZWRoX2deYmJjYWFgXl9YVFpaWltbWFxYWFxbWltXV1pYV1xbXGBdVl1dU09WWlZWWlZZVlhXWF5gYmFkYWRhXllZYWRiYGtmaF5cXVtXV1laXFxcX1tZW2JWU1deXWFjXFNWWVBWVVVVVlVTVVRYXV1fYGBdYV1XYV5bXlxbXlhWWFdbWl9fWl5XWFxcXF1dW1pcV1pfYV5gZGRkZmZnY1ljZmVoZ2ReY2BfZWNdZmlkZWlfZ15jYmNhYWBfX1tYWVtZWllYWlhXW1taW1dYWlRaXVxbYFxVXmJNUldZVldaWVtcWVdZXmBiYWVhZGFdXllhY2JfYWBhX11dXVhXW1tdXV9fXFpdY1hZWF1gY2RfUlhZUFdVV1hXVlZXVl1dXmFiYV9iXllhXV1eWVxeWVhVVltbYF5cX1lZXl1eXmBcWlpZW19iX2JlZGVmZ2hjWmVmZ2lnY19jXmBmZVppaWNmaWNmX2JiY2FgYF9dXVpYW1lZWFhaWVdaW1pZV1lWVVtdXV1gYGJieEtXV1xZV11cXF1aV1xdX2BiZGJjYV1gWGJjYmBjYWNeXF1cWFdbXV9dYF9dW2BkXFxYWmJlY2FSXFlPWFZZW1lZV1paYF5hYmNgYWNfXGJdX11bXl5ZWVRYXVxfX15fW1peXmBiYlxcV1tdYGJiY2VkZ2ZmZ2VdZWdoaWZjYWJcY2dgXGlpY2hpZmVgYmFjYV9gX11dXFlcWVhXWFlZV1xbWldXWFBYWl1hY2Zmcmt/SllXXVtaX11cXlxZXVteX2JjYmFhXWJbYmRiYGNiYl1cW1pXWGlxYFxgX11cYWNfXllZY2VkYlRfWlFZV1xdXFtZW1tjYGNjY2BiZGFgY15gXF5eX1pYVlteXFxhYV9dW2BhYmZiXlxTXF9gY2RkZmVnZ2ZmZmBmZ2hoZ2RkYFtmZ15haGhjaWhmY2BiYGNiX19fXV1bWltZWFhYVlpXXFtaVlZVTFhYXGdpa2h1eIF2dnZ2dnZ2dnZ2dnd3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d4eHh4eXl5enp6enp6e3p6ent7e3t7e3t7e3t7e3t7e3x7e3t7e3t7e3t7fHx8fHx8fHx8fHx8fHt7e3t8fHx8fHx8fHx8e3t7fHx8fHx7e3t7e3t7fYmIhoqHhYKBgoOCg4OCgoKCgoKCgoKCgoGAgYCBgICAgYCBgYGAfnx8fHx8fHx8fHx8fHx8fHZ2dnZ2dnZ2dnZ3dnd3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3h4eHh5eXl6enp6enp6ent7e3t7e3t7e3t7e3t7e3t7e3t7e3t6e3t7e3t7fHx8fHx8fHx8fHx7e3t7e3t7e3t7e3x7e3t7e3t7fHx8fHt7e3t7e3t8iYmHiYaFgoGCgoGCgoKCgYKCgoKCgoKBgYGAgICAgICAgIGBgYB9fHx8e3x8fHx8fHx8fHx8dnZ2dnZ2dnZ2dnZ3dnd3d3d3d3d3d3d3d3d3d3d3d3d3d3d4eHh4eHh5eXl5eXl5eXl5eXt7e3t7e3t7e3t7e3t7e3t7fHt7e3t6enp6ent7fHx8fHx8fHx8fHx7e3t7e3t7fHx8e3t7e3t7e3t7fHx8fHx7fHt7e3uHiYiJhYSDgYKCgoODgoKCgoKCgoKCgYGBgICAgICAgICAgYKBgH58fHx8fHx8fHx8fHx8fHx2dnV2dnZ2dXZ2d3d3d3d3d3d3d3d3d3h4eHh4eHh4eHh4eHh4eHh4eHl5eXl5eXl5eXl5e3t7e3t7e3t8e3t7e3x7fHx7e3t7e3p6enp6e3t8fHx8fHx8fHx8fHx8fHx8e3x8fHx8e3t7e3t7e3x8fHx8fHt7e3t7e4aJiYiFhYOBgoKCg4OCgoKCgoKCgoKBgYGAgICAgICAgIGBgYCAfnx8fHx8fHx8fHx9fX18fHaIi4uLi4uLgX19fX19fYSMi4uLi454KSkqKiopKz0/Pj4+Pj5tgH5+f397pdfT09PT1r2GiYmJiYqHc3FycnJycYOKiYmJiYaz1tLS0tLWun1+f39/f359fHx8fHx8fHx8fHx8fHx8fHx7fHx8fHx8fHx8fHt7e3t7hIuHh4aHgoGDg4GCgoKCgoKCgoKCgoGBgYCAgICAgICAgYCBgIB+fHx8fHx8fHx9fXx8fH19doyQj4+Pj5CDfn9/f39+hpCPj4+Pk3kZGhoaGhocMTMzMzMzMmqCf4CAgHut6eTk5OToyomMjIyMjIlyb29vb29uhY2MjIyMiL/p5eXl5enHfX5/f39/f319fXx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx7e3uCjYeIh4eDgoSCgYKCgoKCgoOCgoKCgYGBgICAgICAgICAgICAgH58fHx8fHx8fXx8fH19fX12eHh4eHh4eHd3d3d3d3d4eXl5enl5d29wcHBwcHBycnJycnJyd3p5eXp6en6Dg4ODg4SBfHx8fHx8fHp6enp6eXp7fXx8fHx7gYSEhISEhYJ8fX19fX19fX19fX18fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx7e4CMhomHh4SDhIKCgoKCgYKCg4KCgoGBgYGBgYCAf4CAgICAgICAfnx8fHx8fHx8fX19fX19fXZ2dnV1dXh2dnZ6e3h7eHd2dnh5eXp6fnx5eXh4eHh5eXl5enp5eXl5enp6eXh4eXl5eXl7e3t7e3t7e3t7e3t7e3t7e3t7e3t6enp6enp6e3x8fHx9fX19fX19fX18fH19fX18fHx8fHx8fHx8fHx8fHx8fHx8fHx8f4uHi4qIhIODgoKCg4KBgoKDgoKCgYGBgYGAgIGAf4CAgH+AgYF+fX18fHx8fHx9fX19fX19d3d3dnZ3fXh3d316eH14d3d3fHx9enl8e3h3d3d3eHh4eHh5eXl5eXp6ent7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7fHx8fHx8fHx8fHx8fHx9fX19fX19fX19fX19fX19fX19fHx8fHx8fHx7e3x8fHx8fHx8fHx+iomMjImFg4SEgoKDgoGCgoKCgoKBgYGBgYCAgICAgICAf4CAgH19fXx8fH19fX19fX19fX13d3d3d3p9eHt4fHx3e3h3d3l+fH19eXt6eHh4eHh4eHh4eHh5eXl6enp6e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3x8fHx8fHx8fHx8fHx8fHx8fX19fXx9fX19fX19fX19fX19fHx8fHx8fHt7fHx8fHx8fHx8fH2Kio2NioWDg4OCgoKCgYGCgoKBgoGBgYKBgIGBgICAgIB/gIGAfXx9fX18fX19fX19fX19fXd3d3d3fX55d3d4e3p8eXd3e358fHx6fHl4eHh4eHh4eHh4eXl5enp6ent7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3x8fHt8fHx8fHx8fHx8fHx8fH19fX18fH18fH18fHx8fX19fX18fHx8fHx8fHx8fHx8fHx8fHx8foqJjo2JhISEg4KDgoKBgYKBgoKCgYGBgoGAgYKAgICAgH+BgIB8fH19fX18fX19fX19fn5+d3d3d3d5fHl7eHx9eXt5enp4e3x8fXp8eHh4eHh4eHh4eXl5eXp6enp7e3t7e3t7e3t7e3t7e3t7e3t7e3x8fHt7fHx7fHx8fHx8fHx8fXx8fX19fX19fXx8fHx8fHx8fXx9fX19fXx8fHx8fHx8fHx8fHx8fHx8fHx/iIeNioeFhoaDg4ODgoGBgoGCgoGBgYGCgYCAgoF/gICAf4CAgHx8fX19fX19fX19fX5+fn53d3d3d3Z4eHl3eXp4enh5eXd4enp7eXl4eHh5eXh4eHh5eXl5enp7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t8fHx8fHx8fHx9fX19fX19fX19fX19fX18fH18fH19fX19fH19fX19fHx8fHx8fHx8fHx8fX+HiIyIhoeHhIKDhISCgYKBgYKCgoGBgYKBgIGBgYGAgIB/gIGAfHx9fX19fX19fX1+fn5+fnd3d3d3d3d3d3d3eHh4eHh4eHh4eHh5eXl5eXl5eXl5eXl6enp6ent7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7fHx8fHx8fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fHx8fHx8fX19fHx8gIeIi4eHiYaDg4SDg4KBgYGCgoGBgYKCgYGBgIGBgYCAgICBgX97fH19fX19fX19fn5+fn5+d3d3d3d3d3d4eHd4dnl5eHh4eHh5eXl5eXl5eXl5eXl5enp6enp6e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7fHx7fHx8fHx8fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fHx8fH19fXx9fXyBhoqKiYmIhIOFhISCgoGBgYGCgYGCgoGBgYCAgYGAgIGAgIGBf3x8fX19fX1+fn5+fn5+f394eHd4eHh4eHZxZGpeam15eXl4eHl5eXl5eXl5enp6enp6enp6enp7e3t8e3x8fHt7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3x8fHx9fHx8fH19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fIGFiYqJioeEhYWEg4KCgYGBgoKBgYKBgYGBgYCBgYCAgYCBgIF+fH1+fn5+fn5+fn5+fn9/f3h4eHh4eHh5bWRiZV9fXm95eXl5eXl5eXl5eXp6enp6enp6enp6e3t7e3t7fHx8fHx8fHt7e3t7e3t7e3t7e3t7e3t7e3t7e3t7fHx8fHx9fHx8fH19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18goWKiomJhISGhYSDg4KBgYKCgoGBgoGBgYKBgIGBgICAgICBgH58fX5+fn5+fn5+fn9/f39/eHh4eHh4eW5kZWdlZGJeZnh5eXl5enp6enp6enp6enp6enp6e3t7e3t7e3x8fHx8fHt8fHt7e3t7e3t7e3t7e3t7e3t7e3t7fHx8fHx8fHx8fHx9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXyChouJiIqEhYaEg4OEgoGBgYGCgYKCgYGBgYCAgYGBgIB/gIGBf3x8fn5+fn5+fn9/f39/f394eHh4eHl3Z2VkZWZkZWFfaXl6enp6enp6enp6enp6ent7e3t7e3t7e3t7e3t8fHx7e3t7e3t7e3t7e3t7e3t7e3t7e3t7fHt8fHx8fHx8fHx9fX19fX19fX19fX19fXx9fX19fX19fX19fX19fX19fX19fX19fX19fIKGi4eJh4SEhoSDg4WBgYGBgYKCgYGBgYKBgICAgYGAgYCAgYF+fHx/f35/f39/f39/f39/gHl5eXl5eWtlYWJlZWFlZV5ieHdze3p6enp6enp6enp6e3t7e3t7e3t7e3t7fHt7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t8fHx8fHx8fH18fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19g4aLhoiFhYaEgoOEhIKBgYGBgoKBgYKBgYGAgYGBgYGAgIGBgn98fH9/f39/f39/f3+AgICAeXl5eXl0Y2NlZGNmY2doZGZsZF5ze3p6enp6enp6enp6ent7e3t7e3t8fHx7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3x8fHx8fHx8fH19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX1+fn6DhouGhoaGhYODg4SDgYGBgYGCgoGBgYKBgYCAgYGBgYCAgYGBfnx8f39/f39/gICAgICAgIB5eXl6d2RhY2diYmRdW2VfYV1eYGFoeHp6enp6enp6enp6e3t7e3t7fHx8e3x7e3t7e3t7e3t7e3t7e3t7e3t7e3t8fHx8fHx8fHx8fH19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX1+fn5+fn5+foSFi4eGhoaGhIODg4KBgYGBgoKCgYGBgoGAgIGBgYGAgYGBgYF+fX1/gH+AgICAgICAgICAgHl5eW9vYmJiZF5jZ19dYWFgXF9kYlttfHp6enp6enp6enp7e3t7fHx8e3t7e3t7e3t7e3t7e3t7e3t7fHx7e3x7fHx8fHx8fHx8fH19fH19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX5+fn5+fn5+fn5/hIiLhoSHhoaEhIODgoGBgYGCgYGBgYKCgYCAgYGBgYGBgYGBgX5+fYCAgICAgICAgICAgICBeXpwXWJlZGJkXmZnZ2BZYmJhY2VfXF1ze3t6enp7e3t7e3t8fHx8fHx8fHt7e3t7e3t7e3t7e3t7fHx8fHx8e3x8fHx8fHx8fHx8fHx9fX19fX19fX19fX19fX19fX19fX19fX19fX19fn19fn5+fn5+fn5+fn5+foCFjIqEhYaGhYODg4SCgYGBgYKBgYGBgoKCgYCBgYGCgICAgIGBf35+gICAgICAgICAgIGBgYF5emxiZGdjYmdmYWBgZGFiZWRjZGNeXGJ1fHt7e3t7e3t7e3x8fHx7e3x8fHx7e3t7e3t7e3t7e3x8fHx8fHx8fHx8fHx8fHx8fHx8fH19fX19fX19fX19fX19fX19fX19fX19fX1+fn5+fn5+fn5+fn5+fn5+fn9/gYeMiYWGhoeFg4SDgoGBgYGBgYKBgoKCg4KBgIGBgYKBgYGCgoF/f36AgICAgICAgIGBgYGBgXp7dGdnZmZkZGZmYF5fYWNlaGRlXmJkYHR8e3t7e3t7fHx8fHx8fHx8fHt7fHt8fHt7e3t7fHx8fHx8fHx8fHx8fHx8fHx8fHx8fH19fX19fX19fX19fX19fX19fX19fX19fX19fX5+fn5+fn5+fn5+fn9/f39/f3+CiYqIhoaIhoWDhIOCgYGBgYGBgoGBgoKCgoGAgYGBgoKBgYKCgX9/f4GBgYGAgYGBgYGBgYGBenptaGNjZ2ZnZWdmZmdiZWRlYmdbYmVgdnx8e3t8fHx8fHx8fHx8e3t8fHx8e3x8fHt7fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx9fXx9fX19fX19fX19fX19fX19fX19fX19fn5+fn5+fn5+fn5+f39/f39/f39/f4SJioiGiYeFhYSEg4KBgYGBgYGCgYKCgYGBgYGBgYKBgoGBgICBgH9/gYGBgYGBgYGBgYGBgYF7emlpZGNqZmFgZmVjY2NnaWRjYmBiZGJ0fXx8fHx8fHt8fHx8fHx8e3x8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fH19fX19fX19fX19fn5+fn5+fn5+fn5+fn5+fn5/f39+fn9/f39/f39/f3+AhIqMiIeJhoSFhYOCgYGBgYGBgYKBgoGBgYGBgYGBgoKBgYGBgYGAgH+BgYGBgYGBgYGBgYGBgXZzZWRnY2RmZWJlZmdkZmhmZWNgYGNkYHF9fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fXx8fX18fHx9fX19fX19fX19fX19fn5+fn5+fn5+fn5+fn5/fn5+f35+f39/f39/f3+AgICFioyJiIqJhoaDgoKCgYGBgYGBgoGBgoGBgYGBgIGBgYGBgYGCgX+Af35/foCCgoKCgoKCgoKCc3NnZWRkZWlqaGZnZ2NhZmZlZmdmZWVjdX18fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fX19fX19fH19fX19fX1+fn5+fn5+fn5+fn5+fn5+fn5+f39/f39/f39/f39/gICAgICAgIWLioqJioeHhoSCgoGBgYGBgYKCgYKBgYGBgIGBgoKBgYGBgYGAf4B+dHRzdX1/goCAfn5/gYB0cmdkZWNmaWppZWNlY2BmZGRnZ2JiZWFwfXx8fHx8fHx8fHx8fHx8fHx9fX18fHx8fHx8fHx8fHx8fHx9fX19fX19fX19fX19fX19fX19fX1+fn5+fn5+fn5+fn5+fn9/f39/f39/f39/f39/f39/f4CAgICAgIB/houLioqLh4eHhIOCgYGBgYGBgYKBgoKBgYGBgYKCgYCBgYGBgoCAgH5zc3NzdHV4dXV0dHV2dXVwZmNmZWhoaWdoZ2VmZWJfZGVmY2BiZ3d8fHx8fX19fX18fHx8fH19fX19fX19fXx9fXx8fX19fX19fX19fX19fX19fX19fX19fX19fn5+fn5+fn5+fn5+fn5+fn5+f39/f39/f39/f39/gIB/f3+AgICAgICAgICHjIyIi4qHh4eDhYKBgYGBgYGBgoGCgoGBgICBgoGBgYKBgoKCgYCAfnNzc3Nzc3NzdHR0dHNzdW9jY2FnZWhoZ2pmZGVnZmhmY2JlYl5ieX18e3t8fX19fX18fHx9fX19fX19e3x9fX19fX19fX19fX19fX19fX19fX5+fn5+fn5+fn5+fn5+fn9/fn5+fn5+fn5/f39/f4CAgH9/gICBgICAgICAgYCAf4CAgYGAgIeLi4eNiYiJhYSFgYGBgYGBgYKCgYKCgYGBgIGCgoGBgYKBgoKBgIB+dHNzc3Nzc3Nzc3Nzc3N1cmdlZWRlamhoZ2ZpaGdjZWViZGNoZGd7eHVzc3R2dnl4dnR0dHZ3d3d2dHR0dXV4d3h4d3d6e3x9fXx9fn5+fn5+fn5+fn5+fn5+fn5+fn5/f39/f39/f35/f39/gH9+fHt7fX58eXl2dnZ5fHx6end2d3l7fXt4hIyMioyHh4iEhYSBgYGBgYGBgoGBgoGBgYGAgYKCgYGBgoGBgoGAgH51c3Nzc3Nzc3Nzc3Nzc3VzaGVnaGVrbGhqZ2lqZ2dnZmRkYmVkbnV0dHNzdHNzc3Nzc3Nzc3Nzc3NzdHNzc3Nzc3Nzc3N0dHV1c3V3eHl7fn59fn98f39/f39/f39/f314fH5+fXx4dXZ3eXd4dnRzc3N0dXRzc3Nzc3NzdHNzc3R0c3R0dHODjI2KiYeIhoOGg4GBgYGBgYGBgYGCgYGAgYGDgoKBgYCBgYGBgICAf3VzdHRzc3Nzc3Nyc3NzdnZpY2hqaGpsZWZpbGhgZmVkY2BkZGZ0dXV1dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHRzdHRzc3Nzc3R2dnV1d3V4fH9+fX9+fHp4dXN0dXV1dHNzc3Nzc3N0dHR0dHR0dHR1dXR0dHV1dHR1dXR1dXV1dIaMjYuIhoeEhIWCgYGBgYGBgYGCgoGAgYCBgYKCgoGBgIGBgYGAgIB/dnNzc3Nzc3Nzc3Nzc3N2dnNnZ2pmaGdmaGhmZGlnY2NnZWVmcHZ1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dHR1dHR0dHR0dHRzdHR0dnV1d3Z0c3R0dHR0dHR0dXV1dXV0dXV1dXV1dXV0dHNzc3N0dHNzdHR0dHR1dXR1iY6MjIqHh4SEhYKBgYGBgYGBgYKCgoGBgICAgoKCgoGBgYGBgYCAgH93c3Nzc3NycnJyc3NzcnZ2dW5kXWNnZWlraGVoZ2dqamlnZXB2dXV1dXV0dHRzdHR0dHR0dHV1dXV1dXV0dHV1dHR1dXV1dXV1dXV1dXR0dHV1dXV1dXV0dHV0dHV1dXV1dXV1dXV1dXV1dXV1dXV0dHNzc3Nzc3N0dHNzc3Nzc3R0dHR0dHWKjoyMiYaGhIeFgoGBgYGBgYGBgoKBgYGAgYGCgYKBgYGBgYKBgICAf3hzc3Nzc3JycnJyc3NzdnZ3d2liaGhnamtpaGZkZGVmaWhwdXR0dHRzc3JxcnJ0dXV0dHR0dHR0c3NycXFxcXNzdHR0dHR0dHR0dHV0cnJyc3R0dHR0dXV1dXV1dXR0dXR0dHR0dHR0dHR0dHR0c3Nzc3Nzc3Nzc3Nzc3N0dHN0dHR0dHR0dYuOjImGhYWFh4SCgYGBgYGBgYGBgoKCgYGAgIKCgoGBgYGBgYGBgIB/eXNzc3NycXJycnJzc3N3d3d3bGpoZGhpa3Z6a2VmZWhnbXJzdHN0c3JwcHBxcnN0dXR0c3NycnNycXBvb29vcHFzc3NycnJyc3R0dHNxcHFyc3R0dHR0dHRzc3Rzc3NzdHR0dHRzdHR0dHR0dHRzdHR0c3NycnFxcnJzc3Nyc3NzdHR0dHN2jZCMh4eFhYSEgoGCgoGBgYGBgYGCgoKBgYGAgYGCgoGBgoKBgYGAf395c3NycnFxcnJycnNzc3d3d3dzc2pnaWloeX99cW51bG5wcXJycnFxcG9wcXFxc3Rzc3NycXFwcG5ubm1ubW5ubnBxcnJycnJycnJzcXBvb3BxcnJzc3JxcnJycnJycnJycnJzc3Jzc3Nzc3Nzc3Nzc3Jxb29ubm9vcXJzc3Jyc3NycnNzcnaPj4uHhoWFhYOCgoKBgYGBgYGBgYGBgoGBgYGCgoKBgoGCgYGCgX9/f3hxcHBwcXFycnJyc3Nzd3d2dnd2cnF0c252f352c3hwcHBycnJycXFwcHFxcXFyc3Nzc3FwcXBvb25ubm5ub25vcHBxcXFxcXBwcXJwb25vcHFxcXFxcHBxcXFxcXJycnJycnJycnFxcnFxcnJycnFwb29ubm1ubW5vcXJycnJycnJyc3JxeI+OjYaDg4aEgoOCgoGCgYGBgYKBgYGCgYGBgYKCgoKCgoKBgYKBf4B/d29wb3BxcnJyc3Nzc3J2dnZ2dnZ3dnZ1c3l/fnd3d29wcXFxcXFxcHBwcXJxcnJzc3JycXBwb29wb29vb29vb29wb3Bvb29vcHBxb29vcHBwcHBvcG9wcHFycXFxcnJycnFxcXFxcXFxcHBwcHBxb29ubm5tbW5tbm9wcXFxcXFxcXFxcXB7j42NhoODhYOCgoKCgYKBgYGBgoGCgYGCgoGCg4KBg4KBgYGAgYF/f392bm9wcHBxcXFxcXBwcHZ2dnZ2dXR0c3NxfYB9fX9zb3BxcXFwcHBwcXFwcHBxcnJxcXFwb3Bvb3Bwb29wcG9vb29vb29vb3BxcXBub3Bwb29wb29wcnJycnFxcXBxcnFwcXFxcHBwcHBwcHBwb29ubm1ubm5ubm9ub3BwcHFxcXFxcXFxcIKRjoqEhIOFhIOCgoGBgoKBgYKBgYGBgYGCgoKCgoKCgYGBgYCBgX9/gHVvb29wcXFxcXBwcHBwdnZ2dXRzcnJycnGAgoCBeXBwcHBvcHBwcHFxcXFwcXFxcXFxcG9vcHBwcHBwb3BxcHBvb29wb29vcXFwcG9wcG9vb25vcHFxcHBwb3Bvb3BwcHBwcHBwcHBvb29vb29vbm5tbW1ubm5ub25vb3BvcHBwcHBwcHBwiZCMiISDhIaDg4KCgYGCgoKCgYGBgYCAgYGBgoKBgYGBgYGBgIGBgH+AdG5vb3BxcXFwcG9vcG92dnVzcnFxcXFxcICDg39ycHBwcHBwcHBwcHFxcHBxcXFxcXBwcHBwcHBwcHFwcHBwcHBwcHBvcHBxcXBwcHFxb29vbm9wcHBvb29vcHBvb3BwcHBwcHBwcHBvb29vbm5ubm5ubW5ubm1ubm9wcG9vb29vb3BzcXWPj4yJg4KFh4ODgoKBgoGCgoKBgYKBgYGBgYGBgYGBgYCAgYGAgYGAf4B0b29vbm9vb29vb29vb3Z1dHNxcXFxcXJygIKCgXRxcXFxcXFxcXFxcXFxcXFxcXBxcXFxcHFwcXBxcXFwcHBwcHFxcXBxcHBwcXBwcHBwcHBwcHBwcHBwcHFxcXBxcHBwcHFwcHFxcHFxcXFxcXJxcnFwcnRycnR0dHR1dnRzdHR0dXd3gpCPi4iDgoaHhISCg4GBgYKCgoGBgoGBgYKBgYGBgYGAgICBgYCBgYB/gHVvb29vb29vb25vb29vdXRzcnJycnJycnKDg4OCdnFycnFxcXJxcnJxcXJycnFxcXFxcnFxcXJycXFycXFxcXFxcXFxcXFwcXFxcXFxcnNzcnJyc3V1dHR0dHR0dHV2d3d3d3d3eHh4eHd3eHh4d3Z3dnV2dnZ2d3h6e3x7e3t6enp6enyGkI2LiIODiIeHhYODgoGCgYKBgYGBgYKCgoGBgYGAgYCAgYGAgIGBgH+Ad3FxcXFxcG5ucG9wcG92dHV1c3Nzc3NzdYiDgoN5cnNzcnJyc3Jyc3NycnJycnN0cnJzcnNzc3Nzc3Nyc3N0dHV1dXV1dHV3eHd3d3d4eHh3eHh4eXl5eXl4eHl5eXp6e3t7e3t6enp5eXh3d3d1dnV2dnd5enp7fn5+fX1+fn5/f35+gIyQi4qHg4WIi4iEg4SDgYGCgYGBgoGBgoKCgoKAgYGBgYCBgYGAgIGAf4B8enp5eXx5eHh2dXZ2dHl2d3h3d3Z3dnZ6f3x+fnx2dnd3dnV4enh4eHh3d3d2eHx5eXx6eXl8e3l5eXh4eXl6enl5eXh4enp5eXh4eHh3dnd3eHh3eHh5eXp7e3p8fH1+fX9/f359e3t7e3p5enl5e3t/foB/fn5/fn19fX5+f35+fn6AjpCNioeEhoqLiIaGhIOBgoKBgYGCgYGCgoKCgoCBgoKBgYGCgYCBgIF/f4B/fn19fX9/f318e3t7eXh4eHh5eXl4eXh5eXl4enp6enp6e3t7fH1+fHt7ent8e318e3t7e3t7enl4eXh4ent6enp5eXp8fHt6enx8fHp6ent9fHx+fn+AgoGAgYKAgH9/gYGBgIB/f35+fn5/fX1+f4CAf35+f39+fn9/f39/gH+Af4OQjoyHhoWIi4yIh4aFg4GCgYGBgYKBgoKCgoKBgYKDgoGBgYGBgIGBgIB/goOCgoGBgX99f39/f4F6enh4d3h4eHh5eHh5enp5e358enx9fXt8fX19fHx8fnx9fn5+fn59fX9/f3x8fYGDgYCAf318fXx9fXt9fXx8fH19fX1+gYGChISDgoB/gYGBgH9/f4B/f39/f39+fn9/f39/f35+f3+Af39/gICAf4CAgICAhJCPi4eGhoiLi4mKhoaDgoKCgYGBgoGCgYKBgYGBgoOCgYCAgYGAgIGBgH+ChIKCgICAgH9+fn+AgH9/fn18fX19fYB/fX+Af35/gH9/fn9/gIGBgICAf3+BgICAf4CBgn9/f4CAf35+f39+f39/fn5+f39/gYB/f4CBgYCAgYOEgoGCgoGCgH+AgYCBgYGAgH+BgICAf39/gICAgYGBgIGBgYCAgICBgoGBgYCAgYGFjo6MiYaHiYyLi4qGhYOCgoKBgYGCgoOCgoKBgIGBgYKCgICBgYCAgYGAf4KFg4KBgYCAf39+fn+AfX5+fn19fX5/fn9/f35+fn+AgYCAgICAfn9/fn+Af3+AgH9/f35/f39+fn59fn9+fn9/f35/gIGBgoKDg4KCg4KBgYKDg4OCgYGBgYKBgoKCgYKBgoGBgYGBgoKCgYGCgYKCgoGBgoKBgYKCgoKCgYGBgoKCgoaPkY+KiImKjY6NiYaFgoKCgoKBgYKCg4KCgoGBgYGBgYF/gIGBgYCBgIF/gYWEg4KCgoGCgYCAgIB8fHx7fH18fH9+fn9+fn5+f35+f39/f39/f35+foB+fn5+fn9/f39+f39+fn5/gIB/gIB/f39/f3+BgYGCgoCAgYKDg4SDg4ODgoKCgoKCgoKCgoKCgoGCgoKDg4OCg4ODgoKCgYKCgoODg4ODgoKCgoODg4KCh5KTkIuKiouPj42Lh4SCgoKCgYGBgoKDgoKBgYGBgIGBgICAgYGBgIGAgYCAg4SDg4OEg4ODgoKCgXx9fHx9gn1+f4GCiIGCgoSCgYGDg4GBgYKCgYKBgYCAf39/gICAf3+AgX9/f39/gYCAgICAgH9/f3+AgICAgH9/gYODhYSEg4SDgoKCg4OCgoOCgoODg4ODg4SDg4KEhYWDg4SEgoKDhIOCg4ODg4OCgoODgoCKlJOPioqMjpCPjYuGg4KCgoKBgYGBgoOCgYGBgIGBgoGBgICBgYGAgYCAgH+BgoODg4SEhIOCgoKCfXx8fn6AgYOAg4OChIaFhoaFhIWFg4ODg4OBgYKEhIKDgoeDgoKAgoGBgoKCg4KCg4KDgoODgoGAgIKCgYOCgYKCg4OEhYWEg4OChISEhIOEhISDg4OEg4ODg4OEg4SDhIWEhISDg4ODgoKCgoKCgoKBgYKCgo+UlI+Njo6RkY6KiISCgoKCgYGBgYGCg4GBgIGBgYGBgYCBgIGBgYCBgICAgIKChIKChIOCg4ODgoJ9fX2AgH+AgoGDg4ODhIaEhIOEhYWDg4GBgoOBgIKDgYKFhYWFhoaHhoWGhoeHh4aGhoeHhoaEgoGCg4SDg4ODg4ODhISFhYWDhYSFhISEg4KBg4OCg4SEg4KCg4SCg4ODg4OCgoKCgoKCg4OEhIOFhYWFhoaIk5OTkI+Pj5KRjIqIgoKCgoKBgYGBgYKDgoKBgIGBgYGBgICAgYGBgICAgICAhISEgoKCgoGBgoKBgX+AgYOCgICAf4CCgoGDg4KCgYODg4SEg4KDhYOCgYGBgoSFh4eHh4aGh4eHiIiHh4eIiIiFhIOBgIGBgoKCg4GCg4SEhYSDg4OEg4OEhIOBgYGCg4OEhISDg4ODg4OEhIODgoSDg4ODhIWFhoeHh4eIiIiJiY6TkpKOj46Qko+LiYeCgoKCgoKBgYGBgoKCgoGBgIGBgYGAgICAgYGAgIGAgICDg4KCgYKCgYGAf4CBhYWFhoOCgYB+fn+BgoSCgYKDhIOCg4ODg4KChISDg4OBg4SFhISFhYSDg4SFhYKEhIWFg4KBgH9/gIB/gIGEg4OEhYWEgoKCgoOCg4OFhIKDhISEhYaGhoaGhoWFhoeHhYaIh4aHiIeGhoaIiYeGhYaGhoeIkZKSkI6QjpCRjImHhYGBgoKCgoGBgYGBgoOBgYGBgYGBgICAgICBgYCAgICAgISEg4KBgoGAgYGAgYKIh4aHhYSCgH99fX6AgH+AgYGBgYGBgoGAgYKCgoGCgoKBgYGCgYKCg4GBgICAf4GAgH+AgH9+gIGBgYKCg4OEg4OEg4OCgoGBgoODg4SEg4SEhIOFhYaFh4eIh4eHh4eHh4eGhoaGh4WFhYaGhIWEhIWEhYaSk5GOjo+OkI6JiIeEgoKCgoKCgoGBgIGCgoKCgoKCgYGBgYGAgYGBgICAgYGAgoSDg4KDgoGCgYKDg4iHh4iHhYSCgX5+gICAfn5+f4CBgYGCgYCCgoGCgH+AgIB+gIKBgIGCg4OAf39/gICAf4CAgICDg4KDg4ODgoOBgYKCgoOCgYKCgoOCgoSDhISDg4SEhYWFhYaGhoaFhISEhYWEhIWFhYSEhISDhISEhISEipSTkpCQj46NiIaFhIOBgYKCgoKCgYGAgYKCgoKBgoKBgYCBgYCBgYGAgICAgYGAg4OCgoOCgoKBgoOCiImJiYiHhYSDgYKEhIOBgYGCgoSCgoOEgoOEhYaEgoSCgX+AgoGBgoGChIOBgYGBgoOCgoGDg4SDg4SEg4OCg4KDg4ODg4KCgoKCgoGDhISEhYSFhYWFhIWEhIWFhYWDg4OEhISEhYWFhISEhISEg4ODg4OOlZKQkZGOjYyHhYODg4GCgoKCgoKBgYCBgoOCgYCCgYGBgICAgIGBgYCAgICBgICDhYSEhIODg4SDhIOGh4mIhoWDhIODg4WDgYGDgoOFhYODg4SDhIODhISFhISEgoGAgYKDgoOEg4OCgoGBhIWEg4ODgoKDhISDg4ODg4SFhISDg4KCgoKCgoSEhYSFhYWFhYODhYWFhYaFhoWEhIWEhYWGhYWFhIWEhISDhIODhJGUk5OSj4yMioWEhIODgYKCg4KCgoKBgYGCg4KBgYKBgYGBgICBgIGBgH+AgIGAgYaGhoaGhoaHh4aGhYSDhYaCgIGBgYGHgoB+f4GAgIKBgX+BgYCAgoGCgoKBgYKCgYCCgoKCgoKDg4GCgYKDhYODg4KDg4OEgoKEhIOEhIWEg4OCgoKCgYKCg4ODg4SFhYWFhIOEhYWGhYWEhISEhIOEhIWFhYWFhIODhIOEg4KGlJOSlJKPjYuHhISEg4KBgoODgoKDg4GBgoKBgoKCgYGCgYGBgYCAgYGAgICAgICAhYWFhYaGh4aGhoWGg4ODg4GAgoKCgYKAfn5/f4CAf4B/gIGAgH+BgYGBg4GAgYGChIOBgYGBgYKBgYKDgoODgoOCgoKCg4OBg4SDg4ODg4OEhIKCgoKDgoKDg4ODhIWEhISEg4OEhIODg4OEhIODg4ODg4SDg4ODg4KDg4KDgouUk5KTkY2NioaDg4OEgoGCg4ODg4ODgoGBgoGCgoKCgoKBgYGBgICBgYCAf4CAgICDhISFhYSFhYWEhIWCg4KDgoKDg4OBgICAgICAgYCAg4KCg4KBgoKDg4OEgoODg4KAgICCgoKCgoKDg4ODgoODhIKCgoODgoKDg4KCg4KDg4WEg4ODg4SDg4SEhISEhYWEhIWEg4SEg4OEhISEhISEg4SEhYSDg4SEhIODgoKDkJSSkpKPi4yIhoOEg4OBgYKDg4ODg4OCgYGCgoKCgoKDgoCBgoGAgICAgIB/gICAgISDhYWEhYWFhYSFhYOEhIWDg4SFhYKBgoOCgoSCgYKGhYOFg4OEhISGhYSEhYJ/fX19foKEg4ODg4ODg4ODhISEg4OEhISEg4SEhIOEg4OFhoWFhYSEhYWFhYSGhoWGhoWFhYWEhYWFhYWGhoWGhoaFhoaGh4aFhYWFg4SEhIeTk5KRkoyLiIWFhYWCgoGBgoODg4OCg4KBgYKDg4ODgoKBgIGAgICAgICAgH+AgICAhYWFhYWGh4eGhYWFhISFhYSEhISEg4SDg4OEhYOCg4SFhYaFhoaFhoeHhoOBfn9+fn5+f4OEg4OEhISEhISEhISEhISFhYWEhYSGhYWGhYaGhoWGhYWHhYWGhYaGhoaFhIWFhYWFhIWGhoaHhoaGhoaHh4iIiIaFhYaEhYWGjZSTkpGQi4qHhoeGhIGCgoKDg4ODg4KDgoGBgoODg4KAgYGBgICAgICAgICAf4CAgICHh4eGhoeHiIeHhoaEg4ODhIODg4OEg4ODg4OEhIODg4WFhYWHh4WFh4WBf39/f39/f36AgISFhIWGhoaFhYWFhoaHhoaFhoWFhoeHh4iHh4eGhoaHh4eGhoaGh4aGhYSDhIWFhYSFhYaGhoeHhoaGhoeHh4eIiIeGhoaHh4eRk5KQkZCLiIiFhoSDgoKBgoODg4ODgoKDgoKCgoOCgYCBgICBgICAgIGAgIB/gICAf4aHiIeHh4eIiYmIiIODgoKDg4SEhIWEg4KCg4OEg4OCg4WEhYeHhYSCgH9/f39/gH9/f4B/f4WFhoeIiIeHh4eIh4iHiIiIhoaHiIiJiYmIh4aHh4eIiIaHhoeHhoaFhIOEhYaGhYWFhoaGh4eFhoeGh4aGh4eHh4eHh4eFh5OTkY+RkIuHhoWGhIKCgYGCg4ODg4ODgoKCgoGCg4KCgIGBgYCAgICAgICAf3+AgYB/hoiIiIiHh4iJiYmIg4KCg4ODhIWHh4eFg4OFhIODg4KEhISEhYSBgIGCgYGBgYB/gH9/fnt6gIaIiIqKiYmIiImJiYmKi4qIiIiJiouLioqIiIeIiIiHh4iIh4iGh4aEg4OFh4eHhoWFhISEhYWEhYWGhISEhYWFhoWGhYOJlJOQjpGOioaFhoWDgYGBgoKDg4ODgoKCgoKCgoKCgYGBgYGBgYCAgICAgIB/gICBgH+GiYiIiYeIiImJiIiEgoKDg4KDhImKh4eEhIWEg4OFg4WDg4OCgYKCgoKCgH9+fH19fX9+fHt8g4eJi4uKioqIiIqJiImLiomJiImIioqJi4mHhoaGh4WGiIiJiIeGh4SDgoSIiIiIh4WCgoGDg4KDg4SCgoKDgoGEg4SDgY6TkpCPj4uIhYSGhIKBgYGBgoODg4OCgoKCgoKCgoGBgYGBgIGAgICAgICAgH+AgIGAf4WIh4eHhoeIiIiHh4SCg4OCgoOFiYqJh4WHhYSFhYSDhoWDgoKCgoKDgX59fn5+fn5+fX1+fX19g4eJioqHh4WGh4eHh4iHh4mGiIaIh4eJiISDhIOFhISFhYaIh4aFg4KCg4WHhoeGhoOCgoOEgoOEhIKBgYGBgYODhIOEkZKRjo+Ni4eEhoaDgoGAgYGDg4ODg4KCgoKCgoKCgYGBgIGBgYCAgIB/gIGAf39/gIB/hYaGhYaGhoeHiIeGgoKEhIOChYaIi4qGhIaEgoaGgoCFhIODg4OCgoF9fH1/gH9+fn59fH19fHp8hIaHhoSDgYODhIWFhYODhYSEhISEhIWEgoKDgoSEgYKDg4WGhYSCgYGCgoODhYOEhIWEhIaDhISFg4KDgYKDg4SFhIeSkY+NkI2JhoSFhIWCgYCBgYODg4ODgoKCgoKCgoKBgYGBgYGAgICAf4CAgYB/gICAgICDhIWEhYWFh4eHh4aAgYGFg4OEhYSHiIWDgYCAgX9+fYKDg4ODgoKAfX1/gICBf31+fn18fX16enp+g4SEgoGBgIGBgoKBf36BgYGCgYOAgoGCgoKBg4OAf4CAgYOCgICAgIGBgYGCgYGChIODhYSCg4SDgoKBgoSDhYWGjJORjo+Pi4iFhYOChIGBgYGBgoODg4KCgoKCgoKCgoGBgYCBgYCBgH9/gIGBgICAgH+AgIKCg4OChIOEhYWGhn+BfoCBgICAf4GDgn9+fn9+fHx/g4OCg4KDgX19fn+AgIGAfn19fX1+fXx6enp/goKAf39/f35/f4B+fYB/f4CAgX+AgIF/f3+BgX59fX+AgX9/fn+AgH+AgICBf4CCgICCgoGCgYGAgYGBgYKEg4aPkpCOj42Kh4eGg4OCgYGBgYGCg4ODgoKCgoKCgoOCgYGCgYGBgICAgH+AgICAgICAf39/gYKDhIGCgoODg4SFgIF/fH19fn19foCAfn1+fXt9foKDg4KCgYF/fX1+f4CAgH9+fX19fHt7e3p6eXqAgH9+f35+fn1+f35/gH9+f3+Af4GAf359fn9/fn18fn+Af35+f3+Af39/f4B/f4B+f4CBf4B+f39/gH9/f4B/hZKSj46Pi4uHiYWEg4KCgYGBgYKDg4ODg4OCgoKDg4KAgYKBgYGAgICAf3+AgIB/gIF/f36BgYSEgYKBg4OCg4OBgH98fn5/fn6Af4B/foB9fX+BhIOCgYB/f359fn5/gICAfn19fXx7e3x6enl5eXt/f35/f39+fX5/f4CAf35/f4CAgoB/fH5+f35+fXx/f4B/fn5/f4B/f35/foCAf36Af39+fn5/f35+f318fH2Fk5KNjIuKiImIhISEgoKCgYGBgoOCgoODgoODg4ODgYCBgYGBgYCAf39/f4CAgICAgIB/foCBhIOCgoGDhISDhICBgICBgIGAgYKCg4GAgX+AgoODgYGBgYCAfX19fn5+f359fX19fXx8fHt6eXl5eX2Af4CBgYF/f4GAf4F/gICAgYGCgoB+gH5/fn5/foGAgoF/f39/gIB/f39/gYB+f4CAfn9/fn+Af31+fX17fIaTkYyLioeHioiGhoSDgoGBgYGCg4ODg4OCg4OCgoKBgICBgYGAgH9/f39/gICAgICAgH9+fn+BgYGAgISGh4aHgoSDhYOBg4ODhYSEhISDgYODg4KCgoGCgX5+fX19fn6AfX19fX19fX18e3p6eXl5eYCCgoKEg4CBg4GAgoCBgYGDgoODgYGCgIGAf4CBg4GEgoCAgYCBgYCAgYCCgn+BgIF/gIB/gICAfn9/fnx8ipOQiomIiIiJiIaGhYSCgoGBgoKDg4ODg4KDg4KCgYCAgICBgYGAf39/f4CAgICAgIGBf359fn5/f39+g4aHh4iChYSFg4SFhIWGhoaGhoWFhoGAg4ODgoKAfX19fX19fn59fX19fX19fX18e3l5eXl4fIKDhIWCgYSDgoKDhYaCg4SDgYKCg4OCgoKCgYKFg4iFgoGBgYKCgYGBgYSDgoOCgoKCgYGBgIF/gIGAf36Ok4yHiIeIh4aGhYaGhIKDgoGCgoODg4ODg4OCgYGBgH+AgYCBgYB/gH9/gICAgH+AgYB/fn19fX5+f36Ag4SHiISGhoaFhoaHh4aHh4eHhoeHf32AgIGCgX59fX19fX19fX19fX18fH5+fnx7eXh3eHl5gIODf4ONhIOEhISXl4ODhIF9foGCgoGCgYKBg4aIjIWDgoKBhIKEg4KDhYWEhYOCg4OCg4OCgoKCg4OCgpKQi4iIh4iHhoaEhoWEhISCgYKCg4ODg4ODgoGBgYCAgICBgIGBgH9/fn+AgYCAf4CAgH9/fn1+fn+Bf4CCgYWFhYaGh4eGh4eIhoeHh4aHh4d/fH18fX9+fX19fX19fX19fX19fXx7iJKCe3x6fIZ5eHl8gYF+iZeEg4OEhJSTgIGBf39/fn6Ei4B/gICEhpCJhYSCgoGFhYuDgYOFhYaGhIOFhYOEhIODhIOEhISIko6LiYiIiYeHh4WGhYSFhIKCgoKDg4ODg4OCgYGBgICAgIGAgICAf39/f4CAgICAgYGBf39/f4CAgIGBgYGBg4OGh4aGh4aGiIeGhoaFhISGhX98fHx8fX18fH19fX19fX19fX18fH+RlZaDe3qElHx4eXp7fH+Cg4GBgIOCgH58fn57iJF8fI6Wf31/f4KGioWDg4SDgYONiX9+f4OEhYWDhYaFhIWFg4SFhYaEhI6Rj4uKioyJiYmHhYaFg4OCgYKCgoKDhIODgoGBgICBgICAgYGAgIB/f3+AgIB/gICAgX5+f4GBgoKCg4SDgoOCgoWGhISFhYSGhIOEg4KBgYOBf319fHx9fXx8fH18fH18fX19fHx8e4uRl4x6e3yBenp6e3x5eX19foB/gH98e3t+fn2ClZF/hIh+fH5/goR8fIGChIKAf4eDfYKBf4KCgIODhISEhISChIOEhYKEkZGNi4yMjoqJiYWFhYODgoKBgoODgoKDg4KCgYGAgIGAgICAgICAgH+Af3+Af357gICBenyAgoKDhYODhYWFhYODg4SCgYODgoOCgoGAgIB/gX5/fn59fHx8fHx8fHx8fHx8fHx9fHx8fn6Kgnt6e3p4ent7fH17fn1+f319fX18fH+BgX2Gj4F+fYJ+f36Agnx8f3+BgIKAfn17ioJ9gH9+gYCAgYKBgoCAgIGAf4uTj4uLjY6NiIeHhYWEhIOCgoGCg4OCgoODgYGBgICAgICAgH9+fXx7fHx9f3+AgHx6gYF4e4CCgYOFhIOFhIaGhISAhpSIgIGBgYGBgH9/f39/fn5+gHx8fHx8fHx8fHx8fHx9fHx8fHx8fHl7e3t4eHl7enp8gX+Afn+BfH5+f399gIKCgICAgX+CkYF/f4CAfoB+fn9+gIGBfXx9e319fX19fHx9gH+AgH6Afn6BlJGLjI2Nj4qFhoaFhISFg4OCgoODg4OCgoGBgYGAgICBgICAf4CAf39/fXt6fICAgHh+gXd7gIF/gYKCgoKDhoeGhn6IlYp+gYGAf4B/foB+f39/fn+Bfnx7e3x8fHx8fHx8fH59fHt8fHx8e3x8fHp6eXt8en2Fg4J/gYF+f35/gH6FgoF+gH9+foCFhoKAfn6Dhn9+fX6AgIGAf39+fX19fX57e31/f3+AfX9+gIyRjYuMjY2Nh4SGhoWEhISDg4OCg4ODg4KBgYGBgYCAgYGAgYGBgYGAgH9/f397en9/e3mAd3p/f31+f3+Af4KDhoaFf3+FgX5/gIB/gH5+f35/gIB/gIB/f319fHx9fn18fX19fX19fH58fXx7fXx8ent6fH19f4aEgoCAgX1+fX5/fouEgYZ+fXx8f36CgX99fX19gHx7fXx+gYSDgYB+fn5+fX1+f399foB+fn6EkoyLi46Ni4qGhIWEhIODg4OCg4KDgoOCgYGBgYGBgYGBgYB/fXx8fH1+f39/f397e399d352eH59fH18fX5+gYGCg4B6fX18fn+AgH6Af35/fn+AgH+AgH9/fn9+fn5+fn1+fn99fH59fn19fHt8fHx6e3p9fn+AhIOCf35/fH18fXx8gYN+jH58e3t9fn1+fn17e3t9fHp7e3uAhoSChIOCf4B+f4KBgn9/goJ/gIqPjIqKjIuKiISEhIOEg4ODgoKCgoKCgoKBgYGAgoGBgYKCf3+AgIB/fn18fH5/fn55fX52e3Z4fXx8fHt9fX6BgICAf31/f31+f39/foB/f39/f3+AgIGBgH99gH9/fn9+fn9/f3yCfn59fX17e319fHp8fH6AgoGAgIB8fH18fHx8fH18fXt/fnt7e3x8fH18e3t7e3x8enp9en6Cf4GDhIKBgoGFhoWFhoaHhYKEkY6MiomKh4iFgoOEhISEg4KCgYGCgoKBgoGBgYGBgoGBgoKAgYKBgYCAgH9+e3x+fnx6fnh5dnd8fHx7e318f4GAf35/foB/f35/fn5/gH9/f39/f3+AgYKAfn6BgIB/f39/f39+fYN8fH19fH99fX19e3x+fn9+fn5+fnx8fHx8fHx+fnt8e3x8fHx9fH18fnx9fHx7e3x5e3x7e317fX5+f4CAg4eJiYmKiYqJhYiRjYuIiIaFhYOCgoOEhIODgoKBgYGBgYKBgYGBgYKCgoGCgoCAgX98e3p6eXt9enx+fnl8eXh4dHx8fHt8fHx+gX9/f39/gIB/fn5+fX+AgH9/f3+Af4CDgoB/gIGAgIB/f4CAgH58enx9fX59fX5+jIZ9fX57e4OCfX19fX18fXx9fX1+fH18fXx9fX58fn19fX18e3t6fHt8fHt6e3t6enp7fn6ChYiHiIqLi4qJjJCNjImIhoWEg4KCgoODg4OBgYGBgYGBgYGBgYGCgoOCgYKBgIGBf3+Af356eHl5en5+e3l6eH5zfHx8e3x8fH5+fn5/gH+AgIB/fn9+gIF/f4B/gIGAgoSEgYCAgYGAgX+AgYKBf39+f31+gH57foGRjHx9f4qAjYx+fn19fX59fX59fHx8fX18fXx9fX1+fX1+fnx7e3t8fH18e3p7fHl6eXh5e35/hIOEh4mKiImNj4yKiIiFhISDgYKCgoKCgoGCgoKBgYGCgYKCgoGCgoKBgoKAgYGAfoCAf39+e3p5e319eHx6f3KBfXt7fHx8fn59fYGBf4GBgX9/gH+AgX9/gIGCgYGFg4SCgYGCgYKCgICBg4KAf4F/fX6Afnx+f4iCf36DkISEg4F/fn18jYd9fX59fHx/fnx9fXx9fX1+fX5/fX19e3x9fnx8e3x9enp5eXp5e3t+foCBg4eEiI2MiYmGhYSEg4KCgoOCgoGBgYGCgoKBgoKCgoKCgoKCgoGCgn+AgIB+f39/fn5/ent5fX16enp9cX6Cent8fX19fXp4f4KAgYKCgICBgIGBgICBgoKCgoaFhIKBgYGBg4F/gIKEgX9+gYB9foF+fX5/gIB9fn+EgH5+f31+fX2KhX1+f31+foB/fX19fH5+fn99f4B9fn18fX9/fHx7fH17e3t6enp7e3x9fn2Ag4CJjImKh4WFhYSDg4KCgoKCgYGBgoKBgoKCgoKCgoGBgoKBgYKCf4CAgH9/f39+fn59eXp6fXx5d3t0e4d8dHd9fn17e3Z2foCBg4KBgYKCgoKBgYGDg4OChYaEgoCAgICCgX+AgYSBfn6AgH1+gH59fn6AgH+Bfn+Af39/gH99fn9/f3+Afn9/gH58fX18fn5+foF/gH2CgHx9gIF9fHx9fXx8e3x8e3t7fHt8fHx9fImJh4eFhoWFhISDgYKBg4KAgIGCg4KCgoOCgoKCgoGCgoGBg4J/gIGAf39/fn5+fn57enp8fHt2e3R3f352cnt+fnt4dnd8gIGCgoKBgoODg4OCgoSDhIOFhoOCgX9/gIOAgICAg4F+foCAfX+AfX1+foCAf4J/gYGAgICBf31/f3+AgIGAgIB/fnx9fX19fn59g32AfoKAfX6AgX98fn59fX17fH58fXx8fHt8e3x+iYWGhIWHhYSFhIKBgoGDgYCAgoKDgoKCg4ODg4KBgYGBgYGCgH6AgYB/fn5+fn5+fn56e3p9goN9dXF6fHpxen19eXh0dICAgoKCg4KDhYOEg4KDhISEhIWEgYGAgH6Agn9+f36Bf35/f4B9foB9fX1+gH9/gYCCgYCAgIKBfX6Af4GAf4CAgH9+fX19fn1+fn19gYR/gH9+f4GBf32Af319f31+fn1+fHt8enx7eoCFgoOEhYSEhIWDgoKBgYKBgICCgoOCgoOEg4SDg4KBgYKBgYOAfoCBf35+fn5+fX5+fnt7en6Jh354cnl9f3F6eHt4eXR1fYKDgoODg4OFhIWEg4OEhIODhIKBgH+Af4CBfn19foB+fn5/gH19f3x9fX6Af4CAgIKAgIGAg4F/f4B+gIF+gIGAgH9+fn5+fn5/fn6FhYCBgH+Ag4F/foGAf36Af4B/fn17ent6fHt6goN/goKCgoOCg4KBgYCAgoGAgIKBg4KBg4SDhIKEgoGBgoGCgn9+gIF/fn1+fn5+fX59fXp7fIWEe3tzeXt8cHd1dnd5dnR6hISBhISDhIWFhoSDg4WEgoODgoCBfn9/f4B9fX1+gH1+f39/fn1+fH19foF/gIB/gIB/gIGDgoGAf36AgH+AgYCBgH9/f39/f4CAgIGCgoKBf4GEgX+Ag4F/f4B/gX+Af3x7e3p8e3yBgH+Bf3+BgIKCgYF/f3+BgH6BgoKDgYGDg4KEgoSCgYGBgIGCgH6AgH9/fX5+fX19fn19e3t6gH94fHZ5enxxdHh3dnh1cnmFhYKEhIKEhYWGhISChIOBg4KAgIF+f4B/gHx9fX6AfX5/f39+fX98fn5+gX+Bf39+f4B/gIODg4B/f4GBgIKBgYGAgIGAgICAgIGAgYKDgYF/gISBfYGDhICAgX+BgYKBfXp7e3x8fX99f4B8f39+fYGAgH59fYB/foGBgYKBgIKCgoKBg4KCgYB/gYKAfn9/fn99fX1+fX19fX19ent7fHZ9eXh6enJ1eXl2d3dzdYaFg4WFgoSEhYSEhIKDgoGDgX+AgX5/gH6AfX19fn9+f4B+fn99f3x/f3+BgIF/f3x+gH6AgYKDgYCAgoOEgoGAgYB/gYCAgYGAgYGCg4KBgX9/g4B+goKEgICCgYKChIF+e3t8fHx9fX1+fXp+fX55fn9/fHx8fn1+gYCBgYGAgoGBgYGDgoGBf4CAgoB9fn19f319fX59fH19fX16e3p8dnx6d3t4cnZ5e3Z2dnN0hoSEhYSChISFg4OCgYOBgYOBgIGBfX+BfoF9fX1/f39/gH5+f359fYB/gIGBgX9+fH5/fn5/gYJ/gYGCg4eFgX9/fn6Af4CBgICAgIKCgYCAfoCCf36BgoKBgYOCg4OFgn99fX18e3x8eXp7en55fHl4f357e3t+fX1/f4F/gH6BgICAgoOCgYF/gIGBf31+fH1+fX19fX18fn58fXx5e3x4enx3endzeHd6c3Z2c3SGhISFg4KDhISDgoKCg4GCgoGAgYF8gIB+gH1+fX5/gICAf35/f3x+gH+BgIGAf359f39+fn+BgH2AgIGDhIN/f359fn5+f4B/gIB/gYKBgH9+f4F+f4CCgoCBhIKEhIaEgH59fHx8fHp5dnl5enl2eXZ+fHt7e358e399gH99fX9/f3+BgoGBgX5/gYF+fX18fX19fX19fXx+jYF8fXl7e3p5fHd4eHR1dXhyd3d0doaEhYWDg4ODg4OCgYKDgoGDgn+BgH9/fn+AfX19fX+AgIB/f4B/fIB/f4GAgYCAf3yAf35+fn9/fX5+gIGCgn5/fn1+fn5+f3+Af32AgYB+fn5/gX5+gIKBf4GDgoOEh4SAgH58fXx8e3x1eXl4eHh5d3t8e3p7foV9fn1/ent+fn59foGAgIGAfX6BgH59fXx9fX19fX18e32Dgnx8ent7e3p7d3Z4dXJzdnF3eXJ4hYWFhYOEhIKCg4KBgYKBgIOBgIB/fn5+foB+fX58foCAgH+AgX97gH6AgH+BgYB/fYB/fn5/f319fX6AgYGBfn9+fn59fX1/fn9+fH6Af35+fn+Cfn6AgIF/gYOCg4OGhICBfnx9fHx7fHh3e3h1eXd3eXx6e3t9kod9fH13en1+fn19f35+gH98foB/fn19fH19fX19fXt8ent9enp4e3x6ent4dHh1cXJ0cHh4cXmEhYWFg4SDgoODgoGBgoKAgYGAgIB9fn5/gH18fn1/gIGAf3+CgHyAf4B+f4GAf399gH9+f39+fX18gICAgIB+f35+fn18fn9+f358fYB/fn1+gIJ/foCAf36Bg4KCg4WFgoJ+fnx7e3x8eXd7eXd4d3d4e3t6e3yFin17end6fH19fHx9fX1/fnx9fn59fXx8fX5+fX18fHt6enx7e3p5enp7enhzd3VxcXNweHdxe4WGhYWDhYKBg4OBgYGBgoCBgICBgH5/fn9/fXx+fYCAgoGAf4GBfX6Af35/gX+Af3+BgH+Af35+fH1/gICAgH9/f35/fXx+f39/f319f39+fn6CgYF/gIB/foGDgoKEg4SCgn5+fHx6fHt7eXt6d3N2d3h5e3p7eXp/fnt7d3p8fXx8fH59fH19fH19fXx8fX19fX99fXx9e3l7fHx8enp6enp6eHN2dXBwcm93dnJ7hYeEhYOEgoGDgoKCgYGCgYKBgYGAf4B/f399fX9+f4CBgYF/goF9foF+fn+Bf4B/gIKAgIB+fX58f3+BgICAf4B/f4B+fX5+f4B/f39/gH9/f4J/gH9/gIB/gYGAgISBgoKAf39+f3x9fn56fYR+dHx9enp6enx5eXp6hoV3eXx8fHx8fXx8fHx8fX19fHx9fX19fn19fX16eX18fH16enp6enp5c3V1b29xb3d0c3yFhoOEgoOCgYKBgoKCgYKBgoGBgYCAgICAgH59gH+Af4GCgn+CgX+AgX5/gYB/gICAgn+Bf319f35/f4KAgICAgIB/gIB+fn1/gH9/gIB/f39/gH+AgICAgH+AgYCBgYGCgYCAf39/fn1/fnuBkox6fH18e315e3p6eHmBgXh5e3x8fXx8fHx8fHx9fX18fH18fn1+fn59fHp8fHt8fXt5enp6eXlzdXVvb3Fwd3N0fYWGg4OCg4KAgYCCgoKAgYGCgYKBgYCAgIGAfn6Af4GAgYKCgIKCgICCfoCBgX9/gX+BgIF/fH6Af3+AgoCAgICAf3+AgH9+fX6Afn2AgIB/f3+AgICAgYCAf4CAgYCBgYKCgICAf39/fX5+fIGGiXx8fnt7fnl6e3p7jX53d3l7fHt9fHx8fHt9fH19fX18fXx+fn5/f358enx9e319e3l6e3p5eXN0dW5zcXB4cnV6hYaDg4KDgoCAgIGCgX+CgYKBgoGBgYKAgYF/fn9/gYGCgYKBg4OAgYJ/gYGBf4CAgIB/gX99f4F/gICBgICAf4B+gICAf359f4B+fn+Af39/gH9/gICBf4CBgH+BgIGCgoKAgICAgIB9foB9gIOCe35+e3x9e3p8fHuHeXh4eXx8fH17fHx9fX18fH19fn19fX5+f3+Af317fH18fHx7enl7e3l5c3J1bnZycHhxdXaFhYOEg4KCgICAgoF/gIKCgoKDgYGDgoCCgYB/gICCgoKBg4GEhICBgX6BgoF/gICAgH+Cf36AgYCCgICAgIB/gH+AgIB/fn2Af39/f4GAgH+AgH+AgYF/gICAgIGAgYGBgoGAgYCAgH9/gH5/fX59fn57fXx9e3x8d3h1eHh5e3x8fXx8fHx8fX5/f39/fn19fn9/gIGAf3x9fHx9e3p7eXp8eHpzcnVud3FxenF2d4WFg4ODg4KBgYODgH+CgYWDg4SBgYOAgoOBgYCAgYKDgoCCgoWDf4GAfoKDgICBgICAf4CAf4GBgIKAf4CBgH9+gICAgICAf4CAgH+AgICAgIB/f4CBgYCAgICAgYGAgoKCgoCCgYGCgYB/f4B/gId+fnx6fXx7fX54d3Z5eXl8fXx8fXt8fH19fn5/gIGAfn1+gICAgoGAfH59fX58d3t6ent5eXNxdW53cHV6cXZ5hYWCg4KDg4KDhISAgIKBhoODg4GChICEg4KCgICCgoSBgYKChIJ/gIB/gYOCgYCBgYCAgIGBgYGAg4F+gIOCf31/goGAgIB+gYCBf4CAgYGBgYCAgIKBgYKBgYCBgYGBgoOCgoOBg4OCgYCBgH+AhH19fXx/fXp9gHp5dnp4eXt7fH19e3x9fX19fn+AgYGAgH+AgICDg4B9f35+fn15eXt6enp5c3J1b3dxd3lzd3uFgoKDgoOEgoOEg4CAgoOGg4ODgoKEgYSDgYKAgIKBg4GCgoGCgX6BgICCgYKBgYOBgICAgYCBgoGEgH6Bg4F/f4CDgoCBfoCCg4KAgYGBg4KDgoGBg4KChIGAgYOBgYKEg4OEhIODhIODgYGBgYCCf4B/fYB8enx/e3t3fHl5eXt6fX59fHx8fH1+fn+BgYCAgIGBgYSEgH2Af39/f357e3t6e3p0cHhyeXR2eHR3e4SCg4KDg4SChIODgYKChIaEgoODg4SBhISAg4CBg4KCgoKCgIKAfoGAgIKBgoGCgoKBgIGBgYOCgoOAfoGDgX9/gYSEgYN/goKBg4KCgoGEg4OEgYKEgoOCgoGCgoOBg4SDhISEhISFg4SCgYOCgoOBgYGAgH58fIB8fHh8eXp5enx9f3x7fHx9fX18fICAgICAgYGBgYKBfoGAgICAf3t7e3p6enVweHd5dnV8dXZ8gICDgoODg4OEhISAgoKFhISDg4KDhIGEhYKCgYKDg4GCgoKAgYB9gICBgYKDgoKCgoGAgYKCg4KCg4B/gYOBgICChIODgoGCgoGDgoKDg4ODg4SAgoSDg4OBgX+Bg4KDhYKEhISEhISDhISChIOEhIKBgoGBgHt+gX59eXx6enp9fHyBfXp8fH19fHp7fn5+gIB/gYGAgICAgIGBgIB/fX18fH18dnJ2eHh2dH92dH2Hh4OChIWDg4SFhICChIWEhIOCg4SEgISFg4KCgoODgoOCgoCCgH2AgIGCg4KCgoKEgoGCgoOEgoKBgICBgoGAgYOFhIOCg4CCgoOCg4ODg4OEg4CCg4KEg4KCfoOBgoSEgoODhISEhIOEhIOEg4WEg4ODgoKAe4CBf3x8fXp6e31/fX9/fHx6fH59fH19fn5/f39/gICAgH9+foCBgICAfnx9fX5/fn18e3h2f3V2f4SHg4KDhYODhIaEgYKFhoWEhIODhISChIWFgoKDg4SCg4KDgoKBfoCAgoKDgoODg4SCgYKCg4OCg4GBgYGDgn+ChISDg4KEf4KEg4ODgoSDg4SCgIOEg4SDg4KCg4KChIOCg4SEhISEhIWEg4OEhYSFhIOBgoB9gYKAfXx8e3x8gH19foB+fn1/fnx8fH19fn5/fn+BgYGBgH99fX6BgYB+fn19fX59fX5+f3+AfHyAgYKCg4OGg4SDhoSBgoiHhYSDg4SEhYGFhYWDg4SDhIODgoOCg4F+gYGDg4SCg4OEhIOCg4KEg4ODgoKDgYOCf4KEg4ODgoOAgoWDg4ODhIODhIOBgoSEhYOCgoODg4GEg4GDg4SDhISEhYSEhIWFhYWEg4ODf32BhH99fXx8fHx/gX59fn9/fX99e3x9fX19fX5+f4CBgIGBgH59fH6Cf39+fn5+fX1/f39/gICAf4CEhIODhIWDhIOFf36CiouFhISDgoOFgYaGhoOEhISEhIODg4OEgn+BgYODhYSFhIWEg4KEhISFhIODgoSDhYKBhISFhYaEgoCDh4SDg4OFhIWFhIGEg4OHgoOCg4GCgYSDgoODhYODhYWEhYWHh4aHhYWEhYSBf4GDf35+fH59fX+BgH9+fHx+f358enx9fX19fX5+fn9/gIGBf319fIB/gH5+fn5+f3+AgYGBgYKAgYWFhIOFhIKEg4aAgoWFi4mEhIOEhYWDh4aGhISEhIWEhISEg4SDgYKDg4OEhIaEhYSDg4SEg3yDhHuBhHd5g4F9hH5+cnWDgoF2foOEgX2BdYF5g39/gH6EhIKDg4KBg4SDg4SFg4SFhoSFhn2EeXx+f4N7hYOAhIOAf35+fn19gYOBfXt/fX6Afn18fHx9fX19fH19f4B/gYJ/fX18f4GBgICAgH+BgYGCgYKDg4KChoSEhIaEgYOEhYOEhYOKiIWFhYOFhYSGhoaDhISFhYWEhYWEhIWCgoOEhYWFhoSFhIOEhYWCaICFanx7cXF8gXOGc3R0fYKDdXNxg4Z0cHVyc3SDdnt9dYF/goOBgnZ5hYCDgIR/hYSChYWCaHpyc3N8f3OCg3+Dg32BfX5+fX6Cg4F8f4F9f4B9fXx8fHx9fHx8fn1+gH+BgX99fX2AgYKBgYGBgIGBgYKBgoKCgoSHhIWEhYSBgoSGhoOFg4aIhoaFg4aGh4eGh4OFhYaFg4KFhoSFhYODg4SEhoaGhIaEg4SFhn1xe4FweXZ+g3+CbnlwdXN8dnl5hXKEg3B2eHF2dHR1cnN0dml/gG5yb3R2bnVsd217c26AiHltfXJzdnN2bW14bHB5bHV9f399foGAgX2Af32Af4B/fX18fHx9fH1+f32Af4CAfnx/foCBgoCBgICAgYCAgIKDgoOEhYiGhoCChYODhIeGg4WFhYaHh4SDhoeIiYaHhIWGiIeEg4WGhYWEhIOFhIKFhoaFhoWEhoWHdnB0e3BydX+HhYNtdW92b3x1coR5eYd4cXR3bndod3pucHaCcoN+b3p5eW1vbnpvb213fXiGcHF6cHJ0ZoF1fm57eXNveX+Af319gX9/fH99fIF+gIB+foCAgYB+fn9/foF/gH9+fYB9f4CBgIB+fn+BgH9+goOCgoSFh4eEfoeEg4OFh4aEhoWFhoaIhISGh4eIhoeEhoaLioWEhoeHhYOFhYWEgoWFhYWGhoWGhYZxdXByc29zenl+hHSIdHV+iHZugnKEhnluanJ/cW1zd3x/dXR8hH54cXV3bnl1enF2eHV6eYRxam95eHBreXN6b3p3dnZwgYB/fn5/f356fn19f31/f359gIGDg4CCg4GBhIKBgIGBgH1/f4F+f35+f4GAfn6BgoCAgYSHhoODhoSEhYaHhoWFhYWGhoiFhYaFh4eFhoSGhomIhYSJioiFhIaGhYWDhYWEhYaGhoaFg3iLeXKIentwcIWEeIV4eWtzfnl7a3KDh4N6fG17eXl0fYB2bm+AgG90fHV3cXl9fW1+dW+DhYZ6gHJye3x1cG96bHN8bneCgIF+fn99fXt9e3x9fX9/fn1/f4KCf4GDgYGDgYB/gICAfn9+f31/fn1/gH58fYGAfn6Ag4iFhoOFhYWFhoeFhYWFhYeHiIaEhoWHhoaFhIWFhIWFhomJh4aEhoWGhoWGhoSGhoeGhoWGh4eHhoaEhoWGh4iHhYeGhoOHhoWFg4SFhoWGhIaEg4SEhoSEgYODhISFhIWEhYSGg4aHhYaEhIWHhoSEhYaEhX13hYOEhIKCgX1/fnt8e357fHx9f359fH59gIB9f4F/f4GAfn5+gH5+f35+fX99fX5/fHt8f358fH+BiYaFhIaGhoWHhoWFhYWGhoeIhoSGhYaGhYWDhIWGhYSGhoaGhYWGhIWGhoaGhYaGh4eGhYeIiIiIhoSHhYaGiIaFiIeIhYeGhoiFhYaHhYaGhYOChYWGhYWDhYSEhIWEhYWEhYWEhoeGhoWEhoeGhISFhoOFhIKEg4OFg4OCfYB/e3t8fXt8fH1/fnx8fn1/f31+gH5+gH99fXyAfX5+fn5+f3x8fX57fHx/fHt7fn+Ih4SEiIaGhoeGhYWEhoaGhoiHhIWGh4aFhIODhIaFhIeFhYaFhYaEhYaGh4eFh4aJiIaGiIeIiYiFhIiFhoeGh4aIhoeFh4eGh4WFhoeFh4aFgoOFhoaEhIOEhIOEhoSFhYWGhoSGhoWGhYSGhoWEg4WFgoWHhYOCgoWDhIF+gIB8e31+e3x7fX59fHx+fX5+fH9+fX1+fn19fH98fn58fYGAfXx8fXx8fH56e3t9foiHgoWIh4eGhoaGhISGhoeGiIaEhYSGhoSFh4OEhYSFh4SFhoaFhoSGhoeHhoaHh4mIhoaIh4iKiIWHiIWHh4WHhoeGh4WIiIeHhYaGh4WGhoWBhISFhoWFhISEg4SFhYaGhoWGhIaFhoeFhYaGhYSDhIOChIeDhIGChISDgYCAgHt7fn18fHx9fXx8fH19fH18fn18fX18fHx9fXx+fXt8gX99fH18fnx8fHp6fHx9iIeChoiHhoeGhoaDhYaFhoaGhYOFhIaFhIiJg4GEg4SGhIaGhoaGhIeHiIiHh4eIioiGh4iHiImIhYiHhYeGhoeHh4WHhoiIh4eFh4eHhYaHhIKEg4SGhYeFhYSDhISFhoaGhoaGh4WFh4WGhoaFhIOEg4ODh4GDgIKDg4KCgn+Ae31+fXt8fH59fH19fH17fHx8fHx8fXt7e318e358e3x/fX18fX1/fXx6ent7fHyIh4KGhoaGh4aGhYOFhoWFhYWEg4WChoSDiId/enqChYaEhoaFh4aEh4eJiIiHhoiKh4aHh4eIiYeFiIeGiIeGhoeHhYeGiIiHhoWHhoeGhoeDg4SEg4aGh4WFhISEhYaGhoaGhYaHhoaHhoaEhoWDg4OCgoOGgYN+goKDgIODf398f35+fHx9f318fX18fXp7e3p7fHx8e3t7fnt7fXt7e358fHx8fX5/fXt6fHp8fYmHg4aFhoWGhoWEhIWFhYWFhIOBhYGGhIKEhHyAhn+ChYWGhYWGhYSHh4iIiIaFiYqHhYeGh4eIh4WIhYaHiIaGh4eGh4aIiIeFhoeGh4WFh4OEhoWEhoaHhoWFg4WFhoaGhoeFh4aHhoeHhYSGhYOBg4KAg4WCg36BgYF/g4F/fn5/fn98fH1/fXt9fXx9enp7eXt8fXt7e3t+fHx8fHp7fXx8fHx+fYF8e3t7e3x7iYeEhoSGhIaGhYSFhoWEhIOEgoCDgYWDgYJ/eoSMe4CEhYeGhoaFhIeIh4aHhYWHiYeEh4WHh4iGhYeEhoeJhoaIh4eHhoeIhoSGhoaHhoWHg4SFhIaGhoeFhYSDhYWHhYeGh4WGhoaFhoaEg4WFgoGCgYCDg4OCfYGBgH6DgX5/f4F8f3x9fX59e359fH15enp5e319enp7e318fXx8ent9fHx9fH5+gHx7e3x+fXyIh4WGhYaEhoWFhYWFhYODgYOBgIKBhYKAgH9/fXx7gYSFhoaEhYSDh4eGhoaFhIaJhoKGhIaGhoWFh4WHiImGhYiHiYeGhoeFhIaFhYaFhIeDhIWEiIaGh4WFhIKGhYaFh4aHhIaGhoaFhoODg4WAgIGAgISAg4B8gYB+foKAfYB/gXx/fH1+fX57fn18fHl6enl6fX15enp7fHt8e3t6e319fH18fn5+fHt7fX59fIiGhYaGhoSFhYSFhYSDgoKAgoGAgICDgX5+foB5en2Ag4OEh4WEg4OHhoOEhYSChYiFgoSDg4WFhYWHh4aIiIaFiIeJh4aFhoWDhoSFh4OEhoSEhYSHhoWGhYaEg4aFhoaGhoaEhYaGhYWGgoKDhH9+gICAgX+DgHuBf31+gn5+gH6Afn99fX59f3t/fXt6eXp6eXp8fXl6ent7enx6e3t7fH19fXx/fn18fH1/fnx7iIWFhoaGhoSFhIWDhYKBgICAgYB+f4KCfX1/f3t/f4KDg4WGhYSDgoaDgYOEgoCFh4WCg4GBg4SEhIaGh4iHhYWIhomHhYOEhIKFg4SGgoOFhISGhIeGhYWFhoOEhYSFhoWGhIOFhIWDhYWBgYODf35/gH9/f4N/fIB9fX+CfYCBfn6Bfn19fX1/e398e3p5enp5enp8eXp6e3t7fXp7e3t7fX59fYB9fXx8fYB/fXyGg4aGhoaGg4SChYKFgYGAf3+AgH5/gIJ8fn9/foCAgoKChIWDgoGChIGAg4KBgISFhYKBf4CCg4OEhYaIhoaFhYeFh4WFgoOCgoOCgoWBg4WEhYaEhoaHhoaFgoSEg4SGhYWDhISDhIOFhICAgoJ/fX1/fn6Ag357f3x8gIF9gYB9fYN8fn59fX57fnt7enl7enl6ent5enp6e3t8ent8e3t+fn1/gXx9fHx9f4B+gIaEhYWEh4SDg4KGgoOAgYB+fn+AfX9/gnx9f39+fn6BgYKEg4KBgYKCf4CBgoCAgoWEgoB/gIGCgYOFhYeFhISGhoSFg4WBgoGBgoGCg4GChISEhYWGh4eGhYSDg4ODhIaFhIGDgoOChIODgH+AgX59fH5+fH+DfXx+fHyBgH6Cf31/gnx/fn19fXx8e3t6enp6eXt6enp6enp6e3x5e317fH9/f4GAfX59fX1/gICAhoSEhYSFgoOCgoSCgoCBgH59fn9+fn6AfX2Af35+foGBgoODgoSHgYF+gICBf3+ChIOBf35/gIJ/goWEhoSCg4WFgoSBg4CBgIGBgYKBgIGEg4OGhYWHh4WEhYWCgoKDhYSCgYGBgoCFg4F/foB/fnx8fn18foN9e358fYF/gIN9fYCBf35/fXx8fH17e3p6enl5e3l6enl6ent7e3p7fXx8f3+BgoB+gH+AgH+AgYDKysrKysrKysrKysrLy8vLy8vLy8vLy8zMzMzNzc3Nzc3Nzc3NzczMzMvLy8vLy8vLy8vLy8vLzMvLy8vLy8vLy8vLy8vMzMzMzM3Nzc7Oz8/Pz9DQ0NHR0dLS0tLS0tLT09PT0tLS0tLS0tPT09TU1NTU09PT09PT09PT09PT09PT09PT09PT09PT09PT09PS0tLS0tLS0tLS0tPT09PT1NTV1dXV1dXV1dXV1dXV1dXV1NTU1NTT09PT09PT09PT09TU09PU1NTU1NTU1NTU09PT09PS0tLS0tPT09TU1NTU1NPT09LS0tLS0tLR0dHR0dPHhnNlYFtLWWdVTUZIQD03Nzg5Nzw8PDo8Oz42Oj04PDs6OTg3ODs7Oj87PTs8PD47P0E/QkJBQ0RFREE+PTw7QENDQUBDQ0FBR0hHSUtSwtXS09PT09TU1NTU1NTU1NTU1NXV1dXV1dXV1dXVysrKysrKysrKysrKy8vLy8vLy8vLy8vMzMzMzMzNzc3Nzc3Nzc3MzMzMy8vLy8vLy8vLy8vLzMzMy8vLy8vLy8vLy8vLzMzMzc3Nzc3Oz8/P0NDQ0NHR0tLS0tLS09PT09PT09PT09PS09PT09TU1NTU1NTU09PT09PT09PT09PT09PT1NTU1NTU1NTT09PT09LS0tLS0tLT09PT09PU1NTU1dXV1dXV1dXV1dXV1dXV1dXV1NTU1NPT09PT09PT09PU1NPT09TU1NTU1NTU1NPT09PS0tLS0tPT09PU1NTU1NTU09PT09PS0tLS0tLR0dHSzIxyZ2BcTVllUktHSz87Mzc4Ozg5Pj05PDpBOjs9Nzs8PDo6Nzg6Oz0/Oz88PTw/Pj9BPUFBPkNDREJAQT46Oz9DREFDRERCQklHSEhJTr7V0tPT09TU1NTU1NTU1NTU1NXV1dXV1dXV1dXV1crKy8vKysrKysrKy8vLy8vLy8vLy8vLy8zMzMzMzM3Nzc3Nzc3NzMzMzMzMy8vLy8vMzMzMzMzMzMzLy8zMzMzLy8vLzMzMzc3Nzc3Ozs/P0NDQ0NDR0dLS0tLS09PT09PT09PU09PT09PT09TU1NXV1dTU1NTT09PU1NPT09PT09PT1NTU1NTU1NTU1NPT09PS0tLS0tLS0tPT09PT1NTV1dXV1dXV1dXV1dXV1tbV1dXV1dTU1NTT09PT09PT09PU1NTU09TU1NTU1NTU1NTT09PT0tLS0tLT09PU1NTU1NTU1NTU09PT09PT0tLS0tHR0s+Sd2hfXk9XZ01LRkw9ODc2NTk5OTw+OT88RDo7PDc5PD07OTc5Ojw9QDs+PT47PD48PT5BQD5EQ0NDP0E9Ojs9QkNFQ0NEQT9FSEpJSky61dPT09TU1NTU1NTU1NTV1dXV1dXV1dXV1dXV1dXLy8vLy8vLy8rKysvLy8vLy8vLy8zLy8vMzMzMzMzNzc3Nzc3Nzc3MzMzMzMzMzMzMzMzMzMzMzczMzMzMzMzMzMzMzMzMzc3Nzc3Ozs/Pz9DQ0NDQ0dHS0tPT09PT09PT09TU1NTT1NTU1NTU1NTV1dXU1NTU1NPU1NTU09PT09TU1NTU1dTU1NTV1dTU09PT09LS0tLS0tLS09PT09TU1dXV1dbW1dXV1dXV1tbW1tXV1dXV1NTU1NTT09PT09PT1NTU1NTU1NTU1NTU1NTU09PT09LS0tLT09PU1NTU1dXV1dTU1NTT09PT09PT0tLS0dHRmn5nYWJOVWpKSElLPzw6OTM3Njc3PTs+OT06Ojs4ODo7Ozg4Ojs7PD46PT09Ojw/PD0/QkA/Q0RDRD5APT08QENEQ0JEQkQ+REhJSUtMttfT09TU1NTU1NXV1dXV1dXV1dXV1dXV1dXV1dXVy8vLy8vLy8vLy8vLy8vLy8vLy8zMzMzMzMzMzMzNzc3Nzc3Nzc3Nzc3MzMzMzMzMzMzMzMzNzc3NzczMzMzMzMzMzMzMzc3Nzc3Ozs7Pz8/Q0NDQ0NHS0tLT09PT09PT1NTU1NTU1NTU1NTU1NTV1dXV1NTU1NPT1NTU1NTU1NTU1NTU1dXV1NXV1dXV1NTU09PT09PS0tLT09PT09PU1NXV1dbW1tXV1dbW1tbW1tbW1dXV1dXU1NTU1NTU1NTU1NTU1NTU1NTU1NXU1NTU1NTT09PT09PT09PU1NTU1dXV1dXV1dTU1NTU09PT09PS0tLR0p+DaV9kU1hsSEhIS0A9Nzg0NzY6Oj87RDw8OTw8OTg6OTo6Ojs8Ojo7OT49Pjk9QDs/QUFCP0JCQUM9Pz8+PEBCRUNDQkBBO0ZJR01MSbLY09TU1NTU1NXV1dXV1dXV1dXW1tbW1tbV1dXW1svLy8vLy8vLy8vLy8vLy8vLy8vMzMzMzMzMzM3Nzc3Nzc3Nzc3Ozc3NzczMzMzMzMzMzc3Nzc3Nzc3Nzc3Nzc3Nzc3Mzc3Nzs7Ozs7Pz8/P0NDQ0NHS0tLS09PT09PT09TU1NTU1NTU1NTU1NTV1NXV1dTU1NTU1NTU1NTU1NTV1dTU1dXV1dXV1dXV1dTU1NTU1NPT09PT09PT09PU1NXV1dbW1tbW1tbW1tbW1tbW1tbV1dXV1dTU1NTU1NTU1NTU1NTV1NTU1NXV1dXU1NTU1NTT09PT09PT1NTU1dXV1dXV1dXU1NTU1NTT09PT09LS0tSjiGxfZlJWakdIR0lBPjM2Njo7PDhDPEJBPjxBPDg5Ojw6Ojw8PDk8PTo7PD09PD89QD9AQT9AQUBCPD4+PzxCQ0NDRkBBQT1ISklOTUeu2NPU1NTV1dXV1dXV1dXV1dbW1tbW1tbW1tbW1tbMzMvLy8vLy8vLy8vLy8vLy8vMzMzNzc3Nzc3Nzc3Nzc3Nzc3Nzs7Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Ozs3Nzc3Nzc3Nzc3Nzs7Ozs7Oz8/P0NDQ0NHR0dLS0tPT09PT09TU1NTU1NTU1NTU1NTU1NTV1dXV1dTU1NTU1NTU1NTU1dXV1dTV1dXV1dXV1dXU1NTU1NTT0tPU1NTU1NTU1NTV1dbW1tbW1tbW1tbW1tbX19bW1tXV1dXV1dXV1dXV1dTU1NTU1dXV1dXV1dXU1NTU1NTU09PT09PT1NTU1NXV1dXV1dXV1dXV1NTU1NPT09PT0tLWroprY2VSWGhMSkdJQjg0OTQ6Ozo5QDk/Q0VAPDw5OTk9Oj07PDw6PTw7OTw9Ozs/PUA9PT5AQD9CQT5APD05QERDQkFBQj48SEpLTU5IqNnU1NXV1dXV1dXV1dXW1tbW1tbW1tbW1tbW1tbWzMzR09PT09PT09PT09PT087Ky8vLzMzMzMzMzMzMzM3Nzc3Nzc7Ozs3Nzc3Nzc/Pz8/Pz8/Pz8/Pz9DQ0dHR0dHR0dHR0dHS0tHV2djY2NnZ2dra2tvb29vZ2dnZ2dna2tra2tra2tjW19fX19fX19jX19fX2Nzd3d3d3d3d3d3d3d3e29fY19jX19fY19bX19fW09LT09PT09TU1NTU1NbW1dXV1dXV1dXV1dXW1tbX1tbW1tbV1dXV1dXV1dXV1dTU1dXV1dXV1dXU1NTU1NTU1NTU09PU1NTU1NXV1dXW1dXV1dXV1dTU1NTT09PT09PS1bqKa2hoUlhlSUlMT0A5OTo0O0E8Nz05QUM+QD89ODo6Ozk9Oz4/Ojs8PDo7PDo7Pj1APT8/P0FAQUE/QTw8Oz5BRENBREA9PElJSk1ORqPa09TV1dXV1dXV1dXW1tbW1tbW1tbW1tbW1tbW1szNhG1wcHBwcHBwcHBwcGqn493d3t7e3t7e3t7e3t3S0NDQ0NDQ0NDQ0NDQ0ci5ubm5ubm5ubm5ubq6t6WkpKSkpKSkpKSkpKSnhmBjY2NjY2NjY2NkZGRlhIuKioqKioqKioqKioemuri4uLi4uLi4uLi4ubN4c3Nzc3Nzc3Nzc3NzcJK7uLi4uLi4uLi4uLi3vdLS0tLS0tLT09PS09PT3OLh4uLi4uLi4uLj4+Pi2NfX1tbW1tbW1tbV1dXV1dXV1dXV1dbW1dXV1dXV1dTU1NTU1NTU1NTV1dXV1dXW1dXV1dXV1dXV1NTU1NTT09PT09XDkXFrak5TYkxMVk48Ojo3Nz5DPjg+Oj8/QTw/QDc7Ojs7PTs+Pjo7PD48Oz07PT8+QDw/Pz1AQEBBPj88PjxAQUVCQkZAQD9HSEpLT0ae2tXV1dXV1dXW1tbW1tbW1tbW1tbW19fX19fX19fMzk4mKysrKysrKysrKysiivTr6+rq6urq6urq6uvp1dLS0tLS0tLS0tLS0tTEqaqqqqqqqqqqqqqqq6aGhIWFhYWFhYWFhYWFik4MEhISEhISEhISEhIRE0pUU1NTU1NTU1NTU1NPg6ejo6Ojo6Ojo6Ojo6WZMikrKysrKysrKysrKiVhqaSko6Ojo6Ojo6OjoavS0tLS0tLS0tLS0tLS0d/q6uvr6+vr6+vr6+vr6dnX19fX1tbW1tbW1tbW1dXV1dXV1dbW1tbV1dXV1dXV1dXV1dTU1NTV1dXV1dXW1tXV1dXV1dXV1dXU1NTU1NTU1NPUy5h2bGlKTl9NUlVNPjw8NztAQz42Ojc+Pjs9Qj85PDk9Ozw6PD07PTs9Ozs9PD0+PT07QT08QUBBQT08Pzw7QEJDQURFPUFAQ0ZLS09GmNzV1dXV1dbW1tbW1tbW1tbW1tfX19fX19fX19fXzc5SKzExMTExMTExMTExJ43z6enp6enp6enq6unq6dXS0tLS0tLS0tLS0tLUxaqrq6urq6urq6urq6yoiIeHh4eHh4eHh4eHh41SEhgYGBgYGBgYGBgYFxpOWVdXV1dXV1dXV1dXU4WopKSkpKSkpKSkpKSmmzgvMDAwMDAwMDAwMDArZaqlpaWkpKSkpKSkpKOs0tLS0tLS0tLS0tLS0tHe6urq6urq6urq6urq6unZ19jX19fX19fX1tbW1tbW1tbW1tbW1tbW1tbV1dXV1dXV1dXV1dXV1dXV1dXW1tbW1tXV1dXV1dXV1dXU1NTU1NTU1NGcenFpSlRdT1JVTkQ+Pzs+QEA4Ojs4PDs7PD86Ozs4Ozk5Ozw7Ojw5Ozs8Ozo9PT0+PUE/Pj8/Pj08PT88PEFBQ0FERTw+QEVGSktNRpPc1dXV1tbW1tbW1tbW1tbW1tfX19fX19fX19fX183PXDk9PT09PT09PT09PTWT8Ofn5+fn5+fn5+fn5+bV0dLS0tLS0tLS0tLS08Wtrq6urq6urq6urq6vq46NjY2NjY2NjY2NjY2SXSInJycnJycoKCgoKCcpWmNiYWJhYmJiYmJiYl6MrKmpqampqampqampq6BFPT4+Pj4+Pj4+Pj4+OW6vqampqampqampqamosNLS0tPS0tLS0tLS0tLR3unp6enp6enp6enp6enn2djY2NjY19fX19fX19fX19fX19bW1tfX19fW1tbW1tbV1dXV1dXV1dXV1dXV1tbW1tbW1tbW1tbV1dXV1dXU1NTU1NTWo3txZElbYE5OVU9AQT89REI/Oz06OTs6PT07PDs6OTg5OTs8Ozw8Ojo7PDo7QD08PTxAQTxBQTs7PEA/PD1CP0RDQ0U8PkJERkpMTEWN3NXV1tbW1tbW1tbW1tbX19fX19fX19fY2NjY2NjNzcXCw8PDw8PDw8PDw8PCydDPz8/Pz8/Pz9DQ0NDQz87Ozs7Ozs7Ozs/Oz8/NzMzMzMzMzMzMzMzMzMvJycrKysrKysrKysrKysfCw8PExMTExcXFxsbGxsvMy8zLzMzNzMzMzMzLz9HR0tLS0tLS0tLS0tLRysrKysrKysrJycnJycnM0tHR0tLS0tLS0tLS0tLU1NTV1dXV1dXW1dbW1tjZ2dnZ2dnZ2dnZ2dnZ2djY2NjY2NjY2NjY2NfX19fX19fX1tfX19fX19bW1tbW1tbW1tXV1dXV1dXV1dbV1dbW1tbW1tbW1tXV1dXV1dTU1NTU169/cF5GXmJQUVdOR0ZDQ0lBPz07PDo8OEBCPD04Ojo4OTg7Pzs8PDs7PDw8PD87PD46Pj44PkI8Pj1BPjw+QkBERUNAPD5APkNJSUtEh9zV1tbW1tbW1tbW1tbX19fX19fX19jY2NjY2NjYzs3P0NDPz8/Pz8/P0NTQ0M7MzczP09LSzs3P0s7Ozs7Ozs7Ozs/Rzs/T08/O0NTSz8/Pz8/Pz8/Pz8/Pz8/P0NDQ0NDR0dHR0dHS09PU1NTU1dXV1tbW1tfW1tbX1tfX19fX19fX19bW1tbW1tbW1tbW1tbW1tjX19fX19fY19bX19fX1tbW1tbW1tbW1tbW19fW1dbW1tbX19fX19fX19fX19jY2NjY2NjY2NnZ2dnZ2dnZ2djY2NjY2NjY2NjY2NjX19fX19jY19fX1tbW1tbW1tbW1tbW1tbW1dbW1dbW1tbW1tbW1tbW1tXV1dXV1NTV1di4gm9XSl9jUlFaS0hBQTxCPT07Oj4+PD4/PT0/Nzk6OTk3OD48PD47Ozw7PDs/PT0+OTs7OT0+P0A+QD07OkI/QkNCPz0+QD5CRUdKQoDc1tbW1tbW1tbW19fX19fX19fX2NjY2NjY2NjY2M7Ozs7Ozs7Nzc3Nzsqfys3Nzc3QuYOEi8fTwJrLz87Ozs7OztHBp9LPoZbL0caTq9LOzs7Ozs7Ozs7Ozs7Oz8/Pz8/P0NDQ0NDQ0NDR0dHR0tLT09PU1NTU1NTV1dXV1dXV1dXV1dXV1dXV1dXW1tbV1dXV1dbW1tbV1dXV1dXV1NTU1NXV1dXV1dXV1dXW1tbW1tbW1tbX19fX19fX19fY2NjY2NjY2NjY2NnZ2dnZ2dnZ2dnZ2dnY2NjY2NjY2NjY2NjY2NjY2NfX19fX1tbW1tbW1tbW1tbW1tXV1tbW1tbW1tbW1tbW1tbW1dXV1dXV1dXYwIBuVU9gY1dZW0xMQ0A9PTs9Ojw+Qj5CQ0A8Ojg5ODo6Ojc7Pz4/PDw7PDo5Pzw8PTg5PD9BPj09PUFAPTtBQkBCQz47QD9BQUlHSkF629bW1tbW1tbX19fX19fX19jY2NjY2NnZ2djY2dnOzs7Ozs7Ozs7OzdKpj63Rzs7Ozpu3tqSiwJOerNPOzs7Oz8/RnY/FqqCrn86ZrZmz0s7Ozs7Ozs7Ozs7Pz8/Pz8/Pz9DQ0NHR0dHR0dHS0tLT09TU1NTU1dXV1dXV1dXV1dXV1dXV1dXV1dXW1tbW1tXV1dbW1tbW1tXV1dXV1dXU1dXV1dXV1dXW1tbW1tbW1tbW1tfX19fX19jX19fY2NjY2NjY2djY2dnZ2dnZ2dnZ2dnZ2dnZ2djY2NjY2NjY2dnY2NjZ2NjY19fX19fX19bW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tXV1dXV1dXV18h/b1pTYWVeXVxPSkQ9QD8+Ozc6Pjk/RD5BOTg3ODk7Ozw4OT89PTw9PD47OkE7OTs5OzxDQDw7PT5AQT49QkQ/QkM9PT8+Pz5ISUg/ddrW1tbX19fX19fX19fX2NjY2NjZ2dnZ2dnZ2dnZzs7Ozs7Ozs7Ozs/Inrym0tDQzsqgl36Cw6abr6fUz8/Pz8/Tuq+rsZ+Vj6G0lYednc7Pzs7Ozs7Ozs7Oz8/Pz8/Pz8/Q0NDR0dHR0dLS0tPT09TU1dXV1dXV1dXV1dXV1dbV1dXV1dXV1tbW1tbW1tbV1dXV1dXW1tbV1dXV1dXV1dXV1dXW1tbW1tbW1tbW1tbW1tfX19fX19jY2NjY2NjY2NjY2NjZ2dnZ2dna2dnZ2dnZ2dnZ2dnZ2djY2NjY2NnZ2dnZ2dnY2NjY2NfX19fX19fX19bW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1dbV1dXV1dfNiHNdWGloXl9gT0lGOkFAPj88PDo2P0JAQzo2NDc6Ozo8Ojk+PD49PTs/PTxBPjw8Ojw8PTw6PEA9QEI+PkFCPUNDPT0+Oz9BRUtIQHDZ1tbX19fX19fX19fY2NjY2NjZ2dnZ2dnZ2dnZ2c/Pz8/Pz87Ozs7SrKWnqdXAvNLHnY+ey9PJipmq1M/Pz8/P05+xnqedn6eZtL/JlpnG0M/Pz8/Pz8/Pz8/Pz8/Pz8/Q0NDQ0dHS0tLS09PT1NTU1dXV1dXV1dbW1tbW1dbW1tbW1tbV1tbW1tbW1tbW1dXV1dXV1dXW1dXV1dXV1dXV1dXW1tbW1tbW1tfX19fX19fX19fX19jY2NjY2NjY2NjY2NnZ2dnZ2dnZ2tnZ2dnZ2dnZ2dnZ2dnZ2dnY2dnZ2dnZ2dnZ2dnY2NjY19fX19fX19fX19bW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbV1dXW0JB1W1tqaWFeXVNOSTxDQEE+QD46OEZBP0M6NzQ5Ojo5Ozs4Oz0/Pj49QT08P0A9Pjw8PDw8Oj1AQD8/PT5CQD9AQkA8QD0+QUVLRz9r19fX19fX19fX2NjY2NjY2NjZ2dnZ2dnZ2dnZ2tnPz8/Pz8/Pz8/QzJ2Nl6zQmpfKxZ6ynpbN1q2ZqtTPz8/P0cCciZu1pKCLn8PSkZigztDQ0M/Pz8/Pz8/Pz8/Pz8/P0NDQ0dHS0tLT09PT1NTU1NXV1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbV1dXV1dXV1dXV1dXV1dXV1dXW1tbW1tbW19fX19fX19fX19fY19fY2NjY2NjY2NjY2NjZ2dnZ2dnZ2drZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2djY2NjY2NfX19fX19fW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1dXV1tKUcl5ea2tqZV1PTEc/RENDQDo9OzxCPD49OTY0Ojk5Ojo5Nzs/QDs8PUA8PEE+PD07PTw/PDo8QkA+PTs9QD5CPkBBPkA9QD9GSUQ/ZtXX19fX19fY2NjY2NjY2NnZ2dna2tra2tra2traz8/Pz8/Pz8/P07GigJuvyaCjv8qcpYynrdiqmarUz8/Pz9SjooGbxZnFyZTYrKO/ndXQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NHR0tLT09PT1NTU1NXV1dbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1dXV1dXV1dbW1tXW1tbW1tbV1tbW1tbX19fX19fX19fX19fY2NjY2NjY2NjY2NjY2NjY2dnZ2dnZ2dna2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2djZ2djY2NjY2NfX19fX19bW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbSk3BgXnBoZmVaUUhHQkVDQEA3Ojo8Pjo8OTc2NTk6Njo8Ozc8QEA8Ojo9Oj0/Pj08OUA8PDs6OT9APTw9PUBBQz9APz5BOz9ARkpCP2LS2NfX2NjY2NjY2NjY2dnZ2dnZ2tra29vb29vb28/Pz8/Pz8/P0M6fkGyclteqo9PSrqa1mJ/Vqpmq1M/Q0NHEn4F7l5+ilZWhu82IlZ7I0tHR0NDQ0dHQ0NDQ0NDQ0NDQ0NHR0tLT09PT1NTU1dXV1dbW1tbX19bW1tbW1tbW1tbX1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tfW1tfX19jY2NfX19fX2NjY2NjY2NjY2NnZ2dnZ2dnZ2dnZ2dna2tnZ2dnZ2dnZ2dnZ2dnZ2dnZ2djY2dnZ2dnZ2dnZ2dnZ2NjY2NjY2NjX19fX1tbW1tbW1tbW1tbW1tbX19fX19fW1tbW1tbX0pNuYFxxZGdkWlVKQENGQ0FCODs/PD07PDw4NTU4OTY4Ozo5PDo+Pzw9PTk8Pz49Ojo+OTw7Ozg+Pzw9PTw+QEFDQT48PDpCRERKRkJd0NnX19jY2NjY2NjY2dnZ2dna2trb29vb29vb29vPz8/Pz8/Pz9G9n8O31pfA09HQ0srSzZeb1KqZq9XRz9DVq6+8wNN5m7CznaXQ26KZtdXR0dHR0dHR0dHR0NDR0dHR0dHR0tLT09PU1NTV1dXV1tbW1tfX19fX19bW1tbW1tfX19fW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW19fX19fY2NjY2NjY2NjY2NjY2djZ2dnZ2dnZ2dnZ2dnZ2drZ2tnZ2dnZ2dnZ2dnZ2dnZ2djY2NjY2NjZ2dnZ2dnZ2dnZ2dnY2NjY2NjY2NfX19fX19fX19fW1tfX1tbX19fX19fX19fX19bW19GRbF1cb2doYl1PRkBISUdFQDw8Pj48PT48NzU2Ojk2OTs6Ojs4QD86PDw5PD49Ozs6Pzk/Ozs5PT49PTs7PTxAQ0I/Pj47Q0ZGR0hEWc3a2NjY2NjZ2dnZ2dnZ2dna2trb29vb29vb29vb0NDQz8/Pz8/Pz5V+e6WS1KKa08ySl6ObodirmavV0pem1cmHf4WigqObop2ckaiYnrvV0dHR0dHR0dHR0dHR0dHR0tLS0tLS09PU1NTV1dXV1tbW19fX19fX19fX19fX19fX19fX1tbW1tbW1tbW1tbX19bW1tbW1tbW1tbW1tbW1tbW1tbW1tfX19fY2NjY2NjY2NjY2NjY2dnZ2dnZ2dnZ2dnZ2dnZ2tra2tra2tnZ2dnZ2dnZ2dnZ2djY2NjY2NjZ2dnZ2tnZ2dnZ2dnZ2djY2NjY2NjY2NjX19fX19fX19fX19fX19fX19fX19fX19fX1tfPjGRWXnBrXGBgTkVITUlJT0M+OkI9PUBCOzU0Nzw6Nzo7Ojo7OT09OTo6OT0+Pz07OT47PDo8Ozk+PD47PD0+QENCPz5BPEFDR0ZGRVXJ29jY2NnZ2dnZ2dnZ2dra2tvb29vb29zc3Nzc3NDQ0NDQ0M/Pz9DR1aeZrcmjqL7KnbGdo7XZqZup2LirocbT09WcmrKgqaCinqmiqZzQ09LS0tLS0tLS0tLR0dHS0tLT0tPT09PU1NTV1dbW1tbX19fX19fX19fX19fX19fX19fX19bW1tbW1tfX19fX19fW1tbW1tbW1tbX19fW1tbW1tbW1tbX19fX2NjY2NjY2NnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dra2tra2tra2trZ2dnZ2dnZ2dnZ2djY2NjY2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnY2dnY2NjY2NjX19fX19fX19fX19fX19fY2NfX19fX19fYzYZdV2JvZE9dVEtIRlNRS0xAPj1EPD9DRj01NTc7OTY6Ozo8PTo7Pzo6OTg6PT0/Pjs/Oz49Ojs5Pjs9PD0+QUNCQD8+PzxAQUVHRURSxdvY2dnZ2dnZ2dnZ2tra2tvb29vb3Nzc3Nzc3NzQ0NDQ0NDQ0NDQ0NO5gL3Tm5bP1LWLkZ/T1LyBu9TOlKDS0dLXqIjPsI2RpdSakY6+1tLS0tLS0tLS0tLS0tLS0tLT09PT09PU1NXV1dbW1tfX19fX19fY2NjY19fX19fX19fX19fX19fW1tbX19fX19fW1tbW1tbW1tbW19fX1tbW1tbW1tbX19fX19jY2NjY2NnZ2dnZ2dnZ2dnZ2tnZ2tra2tra2tra29ra2tra2tnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2NjY2NjX19fX19fX19fY2NjY2NjY2NjY2NfX2ct+WlVqaltMX01KTEpVTEZCPD0/R0ZIS0g9NjU3Ojk3OTo7Ojw9OT45OTo4Oz0+PkE+PTk8PDk9Pj46PTk5Oj9FQUA+PT8/QkBHRURFUMHc2dnZ2dnZ2dna2trb29vb29vb3Nzc3Nzc3dzc0NDQ0NDQ0NDQ0NDQ0cHR0crI0tDUxLjS0tHSwtLQ08fM0tHR0s/F1NXAvdbU07jI1dLS0tLS09PT09PT09LS0tPT09PU1NTU1NXV1dbW1tfX19fX19fX2NjY2NjX19fX2NfX19fX19fX19fX19fX19fX1tbW1tbW1tbW1tfX1tbW1tbW1tbW19fX19fY2NjY2NjY2dnZ2dnZ2dnZ2dra2tra2tra2tra29va2tra2tra2dnZ2dna2tnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dna2tnZ2dnZ2dnZ2djY2NjX19fX19fY2NjY2NjY2NjY2NjY19rHd1xSZ2laTlpOTFBRV0VKPz89P0FFTExBPjc3NTs4ODk5Ojs8Pjw+ODo6OTs+P0A9Pj46NTo6PD0/Ojs5Ojw9QkJAPz8/P0FCR0RDRE683dnZ2dnZ2dna2tvb29vb29vb3Nzc3Nzc3d3d3dDR0dDQ0NDQ0NDQ0NDS0NDR0dDQ0dPU0dHR0dPR0dHS0tHR0tLT1NLS1NXT09PW1NLS0tPT09PT09PT09PT09PT09PU1NTU1dXV1dbW1tfX19fX2NjY2NjY2NjY2NfX19jY19fX19fX19fX19fX19fX19fX1tbW1tbW1tbX19bW1tbW1tbW1tfX19fX2NjY2NjY2NnZ2dna2tra2tra2tra2tra2tra2tvb2tra2tra2trZ2tra2tra2tra2tra2tnZ2dnZ2dnZ2dnZ2trZ2tra29ra2trZ2dnZ2dnZ2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjbwXNYVWlrU0xSTlBSWVRGSTw+Qz9BQkVKPj43ODY5Nzc4OTk7Oz0/QDw9ODk7Ozs/Pjw8OTU6PD47Ojg6Oz8/P0JCQT5BPUBBQkZCQkJLtd7Z2dra2tra2tvb29vb29vc3Nzc3Nzd3d3d3d3R0dHR0dHR0dHR0dDQ0NDQ0NDQ0dHR0dHR0dHR0dHR0dHS0tLS0tLS0tPT09PT09PT09PT09PT09TU1NPT1NTU1NTU1NXV1dXV1dXW1tbX19fX2NjY2NjY2NjY2NjY19fY2NjX19fX19fX19fX19fX19fX19fX19fW1tbX19fX1tbW1tbW1tbX19fX19jY2NjY2NnZ2dna2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tnZ2dnZ2dnZ2NjY2NjY2NnZ2dnZ2dnZ2NjY2NjY3LxvVFRsbExLUkpUUlVLRkQ6PkdEREFERjw/ODk6OTU5OTo3PD07PkA9PTc5Ojs5Pjs5OTY2Oz1AQT47PDk6Pj9DQT4/Qj0+QkNFQkFCSrDe2dra2tvb29vb29vb29vc3Nzc3Nzd3d3d3d3d0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0tLS0tLS0tLS0tLS0tLS0tPT09PT09PT09PT09PT1NTU1NTU1NTU1NTU1dXV1dXV1tbW1tbW19fX19jY2NjY2NjY2NjY2NjY2NjY2NjY19fX19fX19fX19fX19fX19fX19fX19fX19fW1tbW1tfW19fX19jY2NjY2NjZ2dnZ2dra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2trZ2dnZ2dnZ2djZ2dnZ2dnZ2dnZ2dnZ2dnY2Ny2a1NbcGtLVVdSXFFXSEQ+PEJKRT1ISj89PDc4ODo1OTg5Njs+PD1APDw1OTo8Oj87OTk0ODw9PUFBPD47Ojw+QD89PkE9PUNGR0I/Qkmq39ra29vb29vb29vb3Nzc3Nzc3N3d3d3d3d3d3dHR0dHR0dHR0dHR0dHR0dHR0dHS0M/U0M7P0tLT0tLS0tLS0tLS0tPT09TU1NTU1NPU1NTU1NTU1NTU1NTU1NTV1dXV1dXV1dbW1tbW19fX19fY2NjY2NjY2NjY2NjY2NjY2NjY2NjX19fX19fX19jY2NfX19fX19fX19fX19fX19fX19fX19fX19jY2NjY2NjY2dnZ2dra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tvb29va2tra2tra2tra2tra2tra2tnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dndsGRTYXJfT1pUV19RUkdCPUVJTEFBTEQ/Pzs6ODg5Mzg2ODY5Pj0+Pz06Njo7Pjs9PTo5Njg6PTtAQDxAPz0+P0I+PD48PEJFR0lCPkNJpODa29vb29vb3Nzc3Nzc3Nzc3N3d3d3d3d3d3t7S0tLS0tLS0tLS0dHR0dHR0dPT0bm7zLqbnLrQyNPT0tLS09PT09PT09PU1NTU1NTU1NTU1NTU1dXV1dXV1dXV1dXV1dbW1tbW1tbX19fX19fY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjX19fX19fX19fX19fX19fX19fX19jY2NjY2NjY2NjZ2dra2tra2tra2tra2tra2tra2tra2tra29va2tra29va2tvb2tra2tra2tra2tra2trb29vb29va2tra2tra2tra2tra2tra2tra2tnZ2dnZ2trZ2dnZ2dnZ2dnZ2dnZ3qpfVWBuW1VZUVpeT0xHQ0ZNSUZEREo7QUE7PDg4NjQ4Njk4Nzw/QT89Ojc8Pz48Pz87OjY4OD09QEE9QD5BQD1AOjs6Pj1BRUdJQkBDR57h29vb29vc3Nzc3Nzc3Nzc3d3d3d3d3d7e3t7e0tLS0tLS0tLS0tLS0tLS0tO+wMqaoKKViJGeqpOpz9TT09PT09PT09PU1NTU1NTU1NTU1NTV1dXV1dXV1dXV1dXV1tbW1tbW1tbX19fX19fY2NjY2NnZ2dnZ2dnZ2dnZ2djY2djY2NjY2NjY2NjY2NjY2NjY2NjX19fX19fX19fX19fX19fX19fY2NjY2NjY2NjZ2dna2tra2tra2tra2tra2tra2tra29vb29vb29vb29vb29vb29vb29ra2tra2tra2tra2tvb29vb29va29vb29vb29va2tra2tra2tra2tra2tra2tnZ2dnZ2dnZ2dnZ2d6iXFVeblheXU5aUFROQ0NMSUlJRkpEPEJBPDs4NzY3OTc3OTk9P0E/PDo5QD88P0I/Ojg3NzY9Pz9APUBAPz89PTs7OD48P0VJSEE/Q0aX4dvb29zc3Nzc3Nzc3N3d3d3d3d3d3t7e3t7e3tPT09PS0tLS0tLS0tLS0tTIlZyum5m1iX2TjIKBhMTV09PT09PT09PU1NTU1dXV1dXV1dXV1dXV1dXV1dXV1tbW1tbW1tbW1tfX19fX19fX2NjY2NjY2dnZ2dnZ2dnZ2dnZ2dnZ2NjY2NjY2NjY2NjY2NjY2NjY2NfX19fX19fX19fX19fX19fX2NjY2NjY2NjY2dnZ2dnZ2dna2tra2tra2tra2tra29vb29vb29vb29vb29vb29vb29vb2tra2tra2tra2tvb29vb29vb2tvb29vb29vb2tra2tra2tra2tra2tra2tra2tra2tra2tnZ2dndmlpYYW5ZYVdPV01QRUJETElNS0ZJRT5CRDk4ODY3OTc1Njk4PT1BPjo4OT49PD9APzw1Njc2PD4/PjxAQEA/Pj4/Pjs/PkFCRkdCQENIkeLb29zc3Nzc3d3d3d3d3d3d3d7e3t7e3t7f39/U09PT09PT09PT09LS0tLTz6h+kayPko6MhoCIiYSQo8rU09PT09PU1NTU1dXV1dXV1dXV1dXV1dbW1tbW1tbW1tbW1tbW19fX19fX19fX2NjY2NjY2dnZ2dnZ2dnZ2dnZ2dnZ2dnY2NjY2NjY19jY2NjY2NjY2NjY2NjX19fX19fX19fX19fY2NjY2NjY2NjY2NnZ2dnZ2dna2tra2tra2tra2tra29vb29vb29vb29vb29vb29vb29vb29ra2tra2tra2tvb29vb29vb29vb29vb29vb29va2tra2tra2tra2tra29vb29ra2tra2tra2tna3JJaWWNuWlpSVV5QTDxAR05IUklIRT47SEY4OTc1Nzg3NTg5ODs+Pj07ODlBPj1AP0E+NzU5Njs+QUE/P0BAQkI/Pj8+QUBEQUZIQj9FSozi3Nzc3Nzc3d3d3d3d3d3e3t7e3t7f39/f39/f1NTU09PT09PT09PT09PWtaWaiIuQhYCFi4iBg4qLf4bC1tTU1NTU1NTV1dXV1dXV1dXV1dXW1tbW1tbW1tbX19fX19fX19fX2NjY2NjY2NjY2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2djY2NjY2NjY2NjY2NjY2NjY2NjY2NjX19fX19fX19fY2NjY2NjY2NjY2dnZ2dna2dra2tra2tra2tra2tra2tvb29vb29vb29vb29vb29vb29vb29vb29ra2tra2trb29vb29vb29vb29vb29vb29vb29vb2tra2tra2tra29vb29vb29vb29vb2tra29uIWltnalxYTFpfVkg6TEhMSkpDRUZDQExINzo3Njc4ODU4Nzg5PDw7Ozk4QD89Pj8/PDY3PDQ3P0JCQUBAPz8/QT09P0A+QEBGRT09REuI4tzc3Nzd3d3d3d7e3t7e3t7e3t/f39/f39/f39TU1NTU1NPT09PT09PUxZKCg4WGfYGCfXx5foGCg36k29bU1NTU1NTV1dXV1dXV1tbV1tbW1tbW1tfX19fX19fX19fX19fX19jY2NjY2NjZ2dnZ2dnZ2dna2tnZ2dnZ2dnZ2dnY2NnY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjX19fX19fY2NjY2NjY2NjY2dnZ2dna2tra2tra2tra2tra29vb29vb29vb29vc3Nzc3Nvb29vb29vb29vb29vb2tra2tra29vb29zb29zb29vb29vb29vb29vb29vb29va2tvb29vb29vb29vb29vb29vb2tvZgFpebWhaU0ldW1hKRE1ISlNMR0ZBQD9KQjg7NjY5OTc1ODY4Ozo7Ojw5OD09O0A9Ozo2NTw3Oz1CQEFBPD49QEE9PEA/Pz5CREU+PERLg+Lc3d3d3d3d3t7e3t7e3t7f39/f39/f39/f39/V1dTU1NTU1NPT09PT2LKEkKh9g3l2hIh/e3d5gn5+i67A1dTU1NXV1dXV1tbW1tbW1tbW1tbW1tfX19fX19fY2NjY2NjY2NjY2NjY2NjZ2dnZ2dnZ2dna2trZ2dnZ2dnZ2dnY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2dnZ2dnZ2tra2tra2trb2tra2tvb29vb29vb29vc3Nzc3Nzc29vb29vb29vb29vb29va2trb29vb29zc3Nzc3Nvb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vc1nlcWmxmWFJPYFFSQUhHSkZYTEZAQENDSz87Ozc4ODc2NTc2ODo5PDw6PTs/PTs9Pjw7ODg8OT0/QkFCQzw8P0FCPj1BQkNCREVDQDtDTH3h3d3d3d3e3t7e3t7e39/f39/f39/f39/g4ODg1dXV1NXU1NTU1NPU0ruen3WKeXuIgICChYGDcnOAhYOMrNfV1NXV1dXW1tbW1tbW1tbW1tbW19fX19fX2NjY2NjY2NjY2NjZ2dnZ2dnZ2dnY2NnZ2dna2tra2trZ2dnZ2dnZ2djY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2dnZ2dna2tra2tra29vb29ra2trb3Nzc3Nzc29zc3Nzc3Nzc3Nzb29vb29vb29vb29rb29vb29vb29zc3Nzc3Nzc3Nvb29zc3Nzc3Nvb29vb29vb29vb29vc3Nzc3Nzc3Nvb29vb3dByXV9wZVdLUGNPS0JHQ0pIS0ZBPEE9SFBBOjo3Nzg3Njc4Nzw6OD09PD47QD88Pz07Ojs5Ojk8QENAQ0NAPUFAPz1AQkNDQUBAP0A7RU144N3d3d7e3t/f39/f39/f39/f3+Dg4ODg4ODg4NXV1dXV1dXV1NXU18h4i4V8goh6g4SBfoKCc2l0hYuGkJ3U1tXU1dbW1tbW1tbW1tbW19fX19fX19jY2NjY2NjY2NnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dra2tra2tra2dnZ2dnZ2dnY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2dnZ2dna2tra2tra2tra2tvb2tvb3Nzc3Nzc3Nvc3Nzc3Nzc3Nzc29zb29vb29vb29vb29vb29vb29vc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc29vb297KalxjcWVST1heSz9HTElPS0VAPkFCP0lPPjk6NzY7NzY6Ozc7Ojg6Ozw+Oz09Oz48Ojs4OTo4OUFBQkFAQDtAQj06PkFCQz8+PT4/PUZOdN/e3t7e3t7f39/f39/f4ODg4ODg4ODg4ODg4OHV1dXV1dXV1dXV1s6dhpl+f5OTin+CgXx9gnNxm4mAgoOJwNnat7TQ19bW1tbX19fX19fX19fX2NjY2NjY2NjY2NjZ2dnZ2dnZ2dnZ2tnZ2dnZ2dra2tra2tra2trZ2dnZ2dnZ2dnZ2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NnZ2dna2tra2tra2tra2tra29vb3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nvb29vb29vb29vb29vb29vc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3NvfwGNaW21gVlBTU0pETEhNSEk8PkFEQ0ZORDw8OTc5OjY4Ozk3PDk4OTw9OzlAPjpBPzw3NTc7ODpAQUVBPz45PUI/Oz1CQkI6Pj07PT5GTnHe3t7e3t/f39/f39/g4ODg4ODg4ODg4OHh4eHh1tbW1tbW1tbV1tjLioCHhYOXjHh7e3lvfYF1a3ebdHZ7eInHxpiMrdjZ19fX19fX19fY2NjY2NjY2NjY2NjY2NjY2dnZ2drZ2dna2tra2tra2tra2tra2tra2tra2dnZ2dnZ2dnZ2dnZ2dnZ2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NnZ2dnZ2dnZ2dna2tra2tra2tra2tra29vb3Nzc3dzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nvb29vb29zb29vb3Nzc3Nzc3Nzd3dzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3d3d3d3d3Nzc3Nzc4LdjV1lrYlJNVVFMSktGS0ZDQD5CQT9FTT4+PTg5OTo3OTo3NT03Nzo+PDs7Qjs5Pz05NjY4PTk6QEJGQD49PEBCREA9QD9DO0A9PD4/Rk9t3N/e3t/f3+Dg4ODg4ODg4ODg4OHh4eHh4eHh4dbW1tbW1tbW1tfVrYZ6d32rn3l4entzdH+Dfm9xe3l6c3t2k4qFgImkzdnY19fX2NjY2NjY2NjY2NjY2NjY2NjY2NnZ2dna2tna2tra2tra2tra2tra2tra2tra2tnZ2dnZ2dnZ2dnZ2dnZ2dnZ2djY2NjY2NjY2NjY2NjY2NjY2NjY2dnZ2dnZ2dnZ2dra2tra2tra2tra29vb29vc3Nzc3N3d3d3c3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc29vb29vc3Nzb3Nzc3Nzc3N3d3d3d3d3d3dzc3Nzc3Nzd3d3c3Nzc3Nzc3N3d3d3d3d3d3d3d3dzc3OGtYVtebGJSTVZMTUdLS0RGQkI7QT08RUxDQT44Ojk6Nzc5NjY6NTs+QDs9Oz89Oz89Ojk5Ojw5O0VDRkA/PkBDQkQ9OT0/QT1CPz1APkdPadvf3t/f3+Dg4ODg4ODh4eHh4eHh4eHh4eHi4uLW1tbW1tbW1tfQmH+Qh4N9eoN2e3Vzenl6kKqmd3JyfoeHh4CAfoKEhJHJzNnX19jY2NjY2NjY2NjY2NjY2NjY2NnZ2dnZ2tra2tra2tra2tra29va2tra2tra2tra2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2djZ2dnZ2dnZ2djY2NnZ2dnZ2dnZ2dnZ2tra2tra2tra2tra29vb29vb3Nzc3N3d3d3d3d3d3d3d3d3d3d3c3Nzc3Nzc3Nzb29vb3Nzc3Nzc3Nzc3Nzd3d3d3d3d3d3d3dzc3N3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3NzhpV9UYm1iUE9TSUhHRkpJSUJBPkJCPEVFREA+ODo4Ozc3Ojc4ODY+Pz07PDk9PDo+PTs6Njc7NjtEQUY+Pz8/PkNBPzs9PT47REM/PjxIT2fZ4N/f3+Dg4ODg4eHh4eHh4eHh4eLi4uLi4uLi1tbW1tbW19jYyH52doN+fnR2eIaCenl1d5yhu6GEgoCAfoeKinx/gYaMnKjO2NjY2NjY2NjY2djY2NjZ2djY2NjY2dnZ2dra2tra2trb29rb29rb2tra2tra2tra2tnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dna2tra2tra2tra2tra2trb29vb29zc3Nzc3N3d3d3d3d3d3d3d3d3d3d3d3dzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3e3t7e3t7e3d3d3d3c35pbT2drXFBRUElDT0pLR0xHSkJAP0FHREBBPDg8ODg1ODk3Njc3QEA/Ozw5Pj04PTw8Ojc4PTk/RENGPkE/QkBDPzw6Pj0/PkVEPz07S1Fj1+Hf4ODg4ODh4eHh4eHh4uLi4uLi4uLi4uLj49bW1tbW19XB3LRueHJze3B6eXaFiIR7eH2AgZiljH98fnuRhZaLhoGDgY6Rvd3Z2NjY2NjZ2dnZ2dnZ2dnZ2dnY2dnZ2dna2tra2trb29va2tva2tra2trb29ra2tra2tnZ2dnZ2dnZ2dnZ2dna2trZ2dnZ2dra2tra2tnZ2dnZ2dna2tra2tra2tra2tra2tra2trb29vc3Nzc3Nzc3N3d3d3d3d3d3d3d3d3d3d3d3d3d3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3e3t7e3t7e3t7e3t7e3t7e3t3d3d6NWFdobllQUUtISlNJTUhNSUtBQz9DRkJBRDo6PDg2NDg4NzY2Nj8+Pjo8OTw7Oj09PDw4Ozw8RERERT4/PkI+Qj84PT8/Q0NCQEE+O0xUY9Xh3+Dg4OHh4eHh4eLi4uLi4uLi4uLi4uPj4+PW1tbW1teslLZ6eHJvd5V7dHuLgHh1bn6Fg3t/hYhyfH2bnI6JioJ+g32Hk5rH1NjY2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dna2tra2trb29vb29vb29vb2tra2tra2tra2tra2tnZ2dnZ2dnZ2dna2tra2tra2tra2tra2tra2tra2tra2tra2trb2tra2tra2tra2trb29vc3Nzc3Nzc3Nzd3d3d3d3d3d3d3d3d3d3d3d3d3d3c3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3N3d3d3d3d3d3d3d3d3d3d3d3d3e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3d7Zf1lgaGxcUUtHR09LTk5PTURGQkg/Q0hEREA6Ozs4NzU3NzY4NThAPkA7PDk8Ozw+Ojo7OTo7OUZERUI8QD4/PEBDOz5AP0A/Qj8+OjtKVWPV4eDg4eHh4eHi4uLi4uLi4uLi4uPj4+Pj4+Pj1tbX19vKhYR3cXJubniVhHt4hH95dnB4c3eLkY6CdnN9ioaId3d1d4ODfIiIk8Pb2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dra2trb2tvb29vb29vb29vb29rb2tra2tra2tra2tra2tnZ2dnZ2dna2tra2tra2tra2trb2tra2tra2tra2tra2trb29vb29ra2trb29vb29vb3Nzc3Nzc3Nzd3d3d3d3d3d3d3d3d3d3d3d7e3d3d3d3c3Nzc3Nzc3Nzc3Nzc3Nzc3d3d3d3d3d3d3d3d3d3d3d3d3d7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7f0nVZaGlqVk5KSE1OR01EUElGSD9FPUZMREM+Ozs8OTc3OTY2OTU4Pj4/PTs8QDs9PDo3Ozc5OThHREVCPUE9Qj8+QDw/QUE/QEJAPjs8S1Ri1OLg4eHh4eLi4uLi4uLi4+Pj4+Pj4+Pj4+Pj49fX19fEknuJf29sbnV2foSBg4qGfnVybWVtiIaKjoR7c4OHint4e4OPj4GEioqxztrZ2dnZ2dnZ2dna2tra2tra2tra2trb29vb29zc3Nzb29vb29vb29va2tra2tra2tra2tra2tra2tra2tra2tra2tra2tvb29va2tra2tra2tvb2tvb29vb29vb29vb29vb29vb29zc3Nzc3Nzc3d3d3d3d3d3d3d3d3d3d3t7e3t3d3d3d3d3d3d3d3dzc3Nzc3Nzc3d3d3d3d3d3e3t7e3t7e3t7e3t7e3t7e3t7e3t7f39/f39/f39/f39/f3t7e4clsW2pqalNOR0dOT0VIRk1JSUA7RD5ISUA9PDo6Ojg2ODo3Nzk0OD08PT07ODw8PDw4Njc4OTo6RUJFQT9APEI/Q0M+PkNEQUBAP0A8PUtRYdPj4OHh4uLi4uLi4uPj4+Pj4+Pj4+Pj4+Pj5OTX19fZqXaFfnx3bHB3eXh8jH2KhYB3anN0d3p9bot7fnl6foR/gIGDfnh8foeGlrbT2tnZ2dra2tra2tra2tra2tra2tvb29vb3Nzc3Nzc3Nvb29vb29vb29ra2tra2tra2tra2tra2tra2tra2tra29ra29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb3Nzc3Nzc3Nzc3d3d3d3d3d3d3d3d3d3d3d7e3t7d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3t7e3t7e3t7e3t7e3t7e3t7e3t7e39/f39/f39/f39/f39/f39/e3uO9amFpa2lRTkZNTEtKWE1OR0FAQE9BQz9AOzw4OTk5Njg2NjY4NDs+PD07OTY6Ojk6OTU4Ojg5OkJERj8+Pj5AQEBCPzxBQD88Pj9BOT5KT17S4+Hh4eLi4uLi4+Pj4+Pj4+Pj4+Pj4+Tk5OTk19fX2sqKhIB5c29tcXN1d4CUeHaAfHWHhXd1cnWgmXp7d3Z5doR0bWxue3iAmouTu9za2tra2tra2trb29vb29vb29vb29zc3Nzc3Nzc3Nzc3Nzc29vb29vb2tra2tra2tra2tra2tra2tra2tra29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vc3Nzc3Nzc3Nzc3d3d3d3d3d3d3d3d3d3d3d3e3t7e3t3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3t7e3t7e3t7e3t7e3t7e3t7e3t/f39/f39/f39/f39/f39/f39/f397js2lpbmloUFBPTExPUk9LU0Y/RURERD48PDg7ODc5OTU2ODc2NzM6Pjs+PTc6Pjk5OTk2Ojo4NzxDRUc/Pzs/PkA9PkE9Oz0+OUFAQDhBTlFc0OTh4eLi4uLj4+Pj4+Pj4+Pj4+Pk5OTk5OTk5NjY2NjauY6AenZ1bmpveHCBfWt0cnZ3hIV5h4d5lY55eXp1d3pza298gHx2fYh8gLLe2tra2tvb29vb29vb29vc3Nzc3Nzc3Nzc3dzc3Nzc3Nzc3Nzb29vb29rb29vb29ra2tra2tra2tra29va29vb29vb29vb29zc3Nzb29vb29vb29vb29vc3Nvb3Nzc3Nzc3Nzc3Nzc3Nzc3d3d3d3d3t7e3t7e3d7e3t3d3t7e3t7e3t7d3d3d3d3d3d3d3d3d3d3d3d3d3t7e3t7e3t7e3t7f39/f39/f39/f39/f39/f39/f4ODg4ODg4N/f39/f4qpqa2hrZFNQT0ZQVFJOSFJLPkREQ0I7Ozk6Ojg2Nzc2NjY4Nzg0Oz87Pj05PDw3Ozo6Nzo6Nzo9Q0JDPUE+Pzw5PT5BQDs8PDtFQD47Q05TXNDk4eLi4uLj4+Pj4+Pj4+Pj5OTk5OTk5OTk5OTY2NjZ1p5vdntveHh2cG50d3BwdHBzb36Jc3qGhY2EenNtcoB6hn1vg5OBdnx9g4a13drb29vc29vc3Nzc3Nzc3Nzc3Nzc3Nzc3d3d3Nzc3Nzc3Nzc3Nzb29vb29vb29vb29ra2tra2tvb29vb29vb3Nzc3Nzc3Nzc3Nzc3Nzc3Nvb29vb29vc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzd3d3d3d3d3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3d3d3d3d3d7e3t7e3t7e3t7e3t7f39/f39/f39/f39/f39/f39/g4ODg4ODg4ODg4ODg4N/f3+KgbWhma2ZVVlJHUFFOS0xMRUJIRUc9OD08Ojo3Nzg3Nzc2NTY3NDg+PD09Ojg6OD46Ozc4Nzc6Oj5DRDtDQj49OD1AQUM/Pjw+RTw+PUJNUF/S4+Hi4uLj4+Pj4+Pj4+Pk5OTk5OTk5OTk5OTk2NjY3MB2doCCfnp4eHBsdXlya399bHNvdGdoaYB/aWh4c2d+iYl4cIKGe3d9foWKvd3b3Nzc3Nzc3Nzc3Nzc3Nzc3d3c3Nzc3N3d3dzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nvb29vb29vb29vb3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzd3d3d3d3d3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7f39/f39/f39/f39/f39/f4ODg4ODg4ODg4ODg4ODg4ODg4ODflGttZm5mU1NJUFlUTEhGTkZGRUJGPTs+PDs5Nzc4Njc5NjQ1NzU4PDs9Pjo6OztAOTs7ODc6OTlAQkE8QUE/Pzk/QEJFQ0FAQEM7Oz1ES01g1uTi4uLi4+Pj4+Pj4+Pk5OTk5OTk5OTk5OTk5NnZ2tmYc3uqhJaCcnR1dn14aGx8d2h4d25rcHR5gIN2dHyBhIJ9c3CAin94gn95g8je3Nzc3Nzc3Nzc3Nzd3d3d3d3d3d3d3d3d3N3d3dzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nvb29zc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3N3d3d3d3d3d3d3d3d3d3d3d3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e39/f39/f39/f4N/f39/f3+Dg4ODg4ODg4ODg4ODg4ODg4ODg4ODh24tubWdzY1lRTVVbV0hDSUZOS0dCRD8/Qjo7OjY2NzU2NzY0ODc2Ozw7Pj86PDk8Qjg3OTo6Ojk6QUFCQUJDQEE+PT9CQ0NEQUJGOTg9REpOYtjk4uLi4+Pj4+Pj5OTk5OTk5OTk5OTk5OTk5OXZ2drcqHGCtXiRfnNsem6EgXaCfWtoan+DeHZ8dX2FhXRmcHl9d316gIqFe318foC03tzc3Nzc3N3d3d3d3d3d3d3d3d3d3d3d3dzd3d3d3dzc3N3c3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzd3Nzd3d3d3d3d3Nzc3Nzc3Nzc3Nzc3N3d3d3d3d3d3d3d3d3d3d3d3d3d3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e397e3t7e39/f39/f39/f39/g4ODg4ODg4ODg4ODg4ODg4ODg4ODg4eDg4ODg4ODg4tiFb3FrdWFWT1VVXE9ETUY+SkdKRUQ8P0I6PDk4Njc1NTY3NDc2NDk7Ozw7OD47PEE4ODo9OD04Oj09QEBAP0FCP0A+QENCQ0FBRTc2O0RMTmPa5OLi4+Pj4+Pj5OTk5OTk5OTk5OTk5OTk5OXl29ra3Z5sbnNxhY1ybXBuf391hH5rcnZ2enN4gXhzb3VwbWt2fHmFiIB/f392coODsd/c3Nzc3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3Nzd3d3c3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3N3d3d3d3d3d3d3d3d3d3d3d3d3c3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e39/f39/f39/f39/f39/f39/f39/f39/f39/f4ODg4ODg4ODg4ODg4ODg4ODg4OHh4eDg4eHh4eHh4eHh4OLXhW1xb3ZeUldTWlpRSkhDQFFAQkQ8OT9BOjw5NzU3NDU2NjQ3NjY9PDo9PTk+OjxAODo6PDY7OTs+PUJCQjtBQkBDQEBEREM8PUA3OjxFS01l3OPi4uPj4+Pj5OTk5OTk5OTk5OTk5OXl5eXl5dPOxsB+cWxveHt2b3VuanNzbZKGeG50dG5vdIZ/b2twboJ0bXZyfY2DdnF/d3mKgabf3Nzc3d3d3d3d3d3e3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3dzc3d3d3dzc3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3t7e3t7e3t7e3t7e3t/f3t7e3t7f39/f39/f39/f39/f39/f39/f39/f39/f39/f4ODg4ODg4ODg4ODg4ODg4ODg4ODg4eHh4eHh4eHh4eHh4eHh4eHi1oZucG1xYFJZUFdfWUpMTElSP0Q9OTtCRjs6OTc0NTY1NzU0NjY2Pj07Pz45PTk7Pjg9Ozo0ODtAQENCQ0FCRkE/Q0BBQkREOz0+OTs8QkxNZODl4+Pk5OTj4+Tk5OTk5OTk5OTk5eXl5eXl5eW5t7Woc3JscHd6dHd4bXFydXd/hHRyc2xsa3F8bnBudGuBf3GAd32Eg355gHNygYqg2d3c3d3d3d3d3d7e3t3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3e3t7e3t7e3t7d3d3d3t7e3t7e3t7e3t7f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f4ODg4ODg4ODg4ODg4ODg4ODg4OHh4eHh4eHh4eHh4eHh4eHh4eHh49WHcWxqbF5YWlVXYFZWUE9QTD1BOjs8RkE4Ojg2MzY1Njk2NTg1Nz89Oz8+OT04Ozw5PTs7NTo9Q0JCPENDREREQUE/PkJDQzw9Pjg5PENLS2PN0dnh1sjY4+Tk5OTk5OTk5OTk5eXl5eXl5eXltbW2q3J5cm59f3Z1d2hqaGlwb3Zta2tnZWZxdG15gG5teXd2iHhxa2podXV5dHV/wd/c3d3d3d3d3d3e3t7e3d3d3d7d3d3d3d3d3d3d3t7e3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3e3t7e3t7e3t3d3d3d3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f4ODg39/g4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4OHh4eHh4eHh4eHh4eHh4eHi4uHh4ePVhnFwY2lhV1NZV19MUk9STUtAPjg5O0E+ODc4NjM3Njc6NjY2NTk+Pzo8Pzs/OTs6Nzo9PDk5PEFBPTtBQ0VDRkA+Pj5BRUQ+QEE3OD5GSEpesrW4wbm1u8jg5eXl5OTl5OXl5+fn5+fm5ebm5ra2tbWOfX5weoR1cnZnYmNlbGtyb2ZpbHZtd4Z9hXlsbHd4a3ZwfH14c3V5fHd2h7ng3d3d3d3d3d7e3t7e3t7d3t7e3t7d3d3d3d3d3t7e3t7d3t7e3t7e3t3d3d3d3d3d3d7e3t7e3t7e3t7d3d3d3d3d3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4OHh4eHh4eHh4eLi4uLi4uLi4uLi4eHj1Yd1bl5uY1pUU1hXS1NLSk1SR0E4Ozs+PDk4NzU2NTY2OTY4NjY5Pzw6PT08Pzo7Ozk8PDs5Oj4+Pjs8PUFEQkNBQEBBP0JDPDw9Nzs+REVKXrG1tLW2t7e2y9rJ3uXl3eDi3tXU1tPU4OPg39+2treuh3t/bnmNenJ1bWNobGxtaXR4enF5enqIh4N6aWh9cWRvcXyGgX55e318e4an2t7d3d3d3d7e3t7e3t7e3t7e3t7e3d3d3d3d3t7e3t7e3t7e3t7e3t7e3t3e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t/f39/e3t7e3t7f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4OHh4eHh4eHh4eLi4uLi4uLi4uLi4uHh49aGdmxhb19dV1lcWlJQSEpXTEVHPUA9Ozs9OTY0NjU1NTg2NzY3OD87OT09PDw5OTw6Pjw6OTg+Qjs7Pj5AREBDRUFAQD0/QDw9PTU5PEJHRl2xtbW2uLm5ubq9uMPT0r3BwcC6u7y6u8TMxb/Dt7e3hGl1gX1ndYd5Z3Vxa2t5eHB3fH15bWl3e3h3bml1j4FwbHl4d3d9gXuGgnmAoNze3d3d3t7e3t7e3t7e3t7e3t7e3t3d3d3d3d7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t/f39/f3t7e3t/f39/f39/f39/f39/f39/f39/f39/f39/f39/f4ODg4ODg39/f39/f39/f3+Dg4N/f4ODg4ODg4ODg4ODg4ODg4ODg4ODh4OHh4eHh4eHh4eHh4eHh4eHh4uLi4uLi4uLi4uLi4uLi4ePXhXJrZ3RhW1hYX15TVVVRVUpMRj9JRDs5PTY2NDc3NTc4Nzg3ODk8PDo+PDg8Oj0+OTs8OTs5P0E8PT9DP0FARUJCQTw9Q0A6Pjw1NDlER0dasbW1tre5ubm5ubm3ubm4uLm5urq6urm5urm6u7e3uX9ucHN6b3B/eXNuc3Vsc3Z4cXFwb2tvcX6Bc2mHhIF9dHOHdW11hYmBgHJ2hafd3d3d3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7f39/f3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f4ODg4ODg4ODg39/f3+Dg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4eDg4eHh4eHh4eHh4eHh4eHh4eHh4eHh4uLi4uLi4uLi4uLi4uLi4uHj14lxa2xyW1dXXWBUUVVUUFJPSkNATUE9Ozk2NTM0NjQ2ODc3ODk6Pjs8Pjs5PDo8PDk8PTw7PT0+PUNEREBDQkE/QD48PkE8OD06NjY6QkpIWLG1tLa2uLm5uLi5uLe3uLi5urq5ubi4uLi6uru3uKx7cnhxf3ZzfnBsbXpyZ29sbW50cHt3d3Jyd3pvhpJ2f3x8enZ5fH9zfYdyda3T393d3d7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e39/f39/f39/f39/e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f4ODg4ODg4ODg4ODg4ODg4ODf3+Dg4ODg4ODg4ODg4ODg4ODg4eHh4eDg4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4uLi4uLi4uLi4uLi4uLi4uLi49eHb2pxalVWV2FbT1FSUE5XSURESUo/Ojk6NzUzNDk1NjY2Nzg4Ojw7PT46Ozo6PTw5PDw9Oz09PDs9REdEQ0E8PDw8Pj5AOzg8ODE1OkFGRVautbW1tre4uLm4uLi4uLe4ubq5uLi3t7i4ubq7t7mqcnB4d3x7e4J3aG5xam9qY2lyf21zcn54dHFsanaAeX2AgH91doB1a4qLgHaR1d/d3d7e39/f3t/f3t7e3t7e3t7e3t7e3t7e3t7e39/f39/f39/f39/f4N/e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t/f39/f39/f39/f39/f39/f39/f39/f3+Dg4ODg4ODf4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHi4uLi4uLi4uLi4uLi4uLi4uLi4uPYhm1sdGVWUFxnWE1YU1JRWUVES1BOPDk4ODY1NTM5NTY2NzY4Nzk+Oj0+Ojw5OTw7Njg5OTo8QEA9PkBGQEJCQDo+PEE9Pzs7OzYxNjxCR0RQqLa1tba2tre4t7i4uLi4uLm6ubi4t7e3t7e5ure2tIlyd3h9iXxwem99c2hqbGdnbHRscXd0cWx2c3Fxd3FyfHl4g3Z7d2mLkYp9kM7f3d7e3tvY2drZ297f39/e3+De39/f3Nvc3N3e3uDg3+Dg4ODf3t7e39jS397f397e3t/f3t7f3t/f3t7e3t7e3t7e3t7e3t/f39/f39/f39/f39/f39/f39/f4ODf4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODh4eHh4eHh4eHh4eHh4eHh4eLi4eLi4uLi4uLi4uLi4uLj4+Lj4+Li4uPj4+Pi4uLi4+Lk14NoZ3VkVlVkZVdKWllXW1Q9RU1LSD04NzU3NjQzOTU0Nzc1Njc5PTo9Pjs9PDk7PDk5Oj45PD4/PkFBQ0FFRUQ+OzxBPjw5PDs3Mzc+REhFSqG2tbW1tbW2tre4uLi4t7e4uLi3tra2tra3uLm2traLfXpsbHp/cGx5dm5qaGdlcXp4b2lvb3B1c21zd4Fnb32CgYNyf3lqcHJ6f6ng393Zy8a/vL2/vsLN0tDW3tnc4NfQzcPCw8PH1dfT2dzX1NjX0MfExce9vM/Kz87Y3djO3N3c2t3T0dze39/e397e3t7e4N/f39/f39/f39/f39/f39/f4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4OHh4eLi4uLi4uLf4uPi4eLg4d7W29/Sw8rJx9Hb3OLk4eHg2dre1sbExcTN2trf5OHi4trX3st9aWZxYVleZWFNTFRLUlpMO0hNSEZBPTc2NjUzNDY2NDg3NjU2OTw7Pj46Pjk5PDk3OTs7Oj49PEBAQ0RCR0ZCQT08Q0A9OTw7Nzc3P0RGRkaZtrS1tbW2tra4uLi4uLi3uLi3s7W2t7a3t7i5tba3opdxb29waW50dnFmZWNrbmdvcm1mZ2tygWVvdnyAeGRzj39zaHFyaWVlbm+w39HFv7u5ubm5ubq6uru6vc3Gw8e/urq6uru7u8HCvcHFvby/vry7urq5ubq6ubm6w8XDucDDwby/ube/z8/U3tjc3t/g3tLa4N/f4ODg39/f39/f39/f3+Dg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODh4eDg4ODg4ODg4ODh4eHh4uLi4eDh4uLi4uHa2t3RwsPCu8XT1uDdydPDrrnAsaqrq6uwtLbJ0sXRxLG4v7Srq6usr7S0vMzE1c60tLureGxtbWBdYl9ZS1NVVFFQREBRTUhEPzo3ODU3MzE0NjQ5ODQ2Njo8Oz08ODw5Njo6ODg5NzU8PDw/QEFAQkRDQkE8PkI/Pz09PTc1OD5DRUNAj7a0tLW1t7i4uLi4uLm5uLe1sautr7Oxs7OztLS0tqaei2tue3ZxeXhnY2hfcXdha25vaG99b25ja2lseHdsa4Z+bHB6dm1scG95sca8uru7urm5ubq6urq6urq6urq6urq6urq7u7q7u7y7urq6ubq7u7q6urq6urq6ubi3t7i4t7e2tbW1tbi3u8e+w8XHzcS4wMnH0tzZ2d/e3uDf39/f4ODh4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODh3Nji4uLi4eHh4OHg3tfGxtHQztTe3tPO0t/SuLi8sq2trKysrrG+ua63rKipqamqq6urqqqqq6ysuKyqqqqrq6urra6urq6urryzrayrpHlub21fXl1dVE1SU1xUSkE/UElIPjg5NjgzNzMwNDczNzg1NzY2Oj0/PDg5Ozo6Ojg5OjY1OTs8Pj9EP0NFQkNCP0BAQT9APjw3ODc6QUVEP4W4tLS1tbe4uLm5uLi3t7SurKuqqq2urq6vsLGzs7WjcG5ucm1wg311aWFlaGZkY2Rxc21td25naW1tZXBzb29zcXN8h4F6dX11n7u6uru7urq5ubm6urq6urq6ubq6urq5uLm5ubm6urq6u7q5ubm5ubq6ubm6ubm4uLi3t7e4uLe3t7a2tbW2tra1tbW1tba1t7e3t7rBvrzGycrb3+Dg3tvd3d7h4tDW4uHg4ODg4ODg4ODg4ODg4OHg4OHi0768zNjd3OLg0dnbxL23sLCxsa+zu7uzsLS9s66urq2tra2sq6qqqqmpqKmpqampqqurqqqqqamoqampqampqaqqqqytrq6urq6urq6sraR4aWJxZmFZWlZRUk5cU0Y9QlJEQTg8OzY6NTY1MzQ2NTg3NTY1Nzg7Pjw7OTk5Ojg3Nzk3Njg8Oz47RD8/Q0BBREE+P0M9Pjw+Ojo3Nz9DRj54srCztLW2t7i3trKurq2sq6uqqaqtraysrq+xs7S1t4xucnRqaIB5ZmpmZWxdaG5waGxxYmNmcoJ+dmhobGpueoaBhXx4cXF5gK+6ubq6urm5uLm5ubm5ubm5ubm5ubm4uLe3t7e3uLm5ubm5uLe3t7i5ubi4uLi3t7a2tre3t7e3tra2trW0tLW1tbW2trW1tre3t7e3t7e3tre4v8bP0MS+v8DE19e8ydra4OHg4ODh4eDg4ODh4eDb3t7Uzby3tre6wMDJxLfIvrKwsLCwr7Cvrq6ur7Cwr66urq6uraytrKurq6qpqampqampqampqKmpqKmpqampqKmpqKmpqqqrraytra2ur66trK2heWpkbWdiXFhRUFFLVEpCOklRP0E3PDk0OjU2NTQ1NTU4ODY4Njs6OTw9PTs6ODY2ODg6ODY3Pj09PT5BQUVCQkNBQUBBOj09Pz05Ojc9QUc8bKqmqKutsLGwrqupqKqrq6mpqamrrKytra2usLO0tbilgIdvaWdzdGZrcG1qZGxvcm5rbWNrcHyJhG5qbHx4Y3uKfnNqc25rcY+7ubm5ubm5ubi4ubm5ubm5ubq5uLi3t7e3t7e3t7i5ubi4uLe2tra3t7e3t7a2t7a2tra3tra2tbW1tba1tLS0tbW1tra2tra3t7e3t7i4uLe2t7a2uLm4uLe3uL6+uLq9vcfb4OHg2Nnd4eHg3dfKwcPCurm5uLe4uLi3tbS0tLKysbGxsLCvr6+vr6+vr6+vr66ura2srKyrq6yqqqmoqKmppqepqaehpaipqamoop+hoZyip6inqausrK2ur7Cwrq2unXhwbGphY2BZUU1RTFJGQzlNUEU+ODs3Mjc5Njc0NDM1ODg3OTc7OTo9PTw6Ojk3NDo5ODY1OD8/QEI9RENDQ0FDQEJBQDtAP0A/PDw6O0NIPWOopaWlpqioqKenp6ipqqmoqKipqqqsra6wsLCztLW1taWYdn5xZmt4cW9tZmVsaGNsZ2ZpaX11bWlvfXZ5hWZod294b3Fvcninu7m5ubm5ubm4uLm6ubm5ubm5ubi3t7W1tba2tre3t7e3t7a2tbW2tre2tbW1tra3t7e2tbS0tLS0tLS1tLS0tLW1tba2tra2t7e3t7e3t7a2tre2tre3uLe2t7i4t7i4uLi4wMXTyry8w83PyMC9urm5ubq6ubi4uLi4t7W0tLSzs7KysrGwr6+vr66urq+vr6+uraysrKurrKysq6ehoJ6gn5udoaGdlpmkpKaon5mZmZmanZ+gn56fpKqtrq+ura2srJl1cGlrY2FeXVVOU0tSREQ4TktHQTo4NTI2OTY2NDczNzc3ODk3OTo7PT0+ODg4NzU6OTk1OD9AQEFEPkZBQkNAQkNCQT88QEJCQD0+OjpERj5cpqWmpqampqanqKenqKioqKenqaurrKytra2ttLS0tbekc311bnONf3JmanFjaW1jaGZobG51aV9jZ3VzdnpuZ3Bwcn56cYihu7m5ubm6urq6urm2s7a1uLm2trW1tra1tbW1tbW3tra3tra2tbW2tbW1tbS0tLa2t7e3tbS0s7O0tLW1tLS0tbW1tra2tra2t7e3uLe3tra2trW2tbW2tra2tra2tra3tra3uLi3uri4uLi3uLi5ubm5urq6urm4t7e3t7W1tLS0s7OysrKxsbCwr66urq6urq+vra2srKuppaSmpqScmZubmpmampmXl5eXl5aZm5iZmJmZm52en5+dnJ6gpKWko6OioqKQdG5jcGFeXltUU1RIVEo/PFFCRkM7ODYzNzo1NTQ4Mzg5OTc4OTc7OTs9Ozc6NzU2OTk4NTg+Pz9ART5CPz9DPzxBQUI/PT9EQT8+PTk9Q0Y/VaSlpqanqKeoqamop6ioqKioqKiqrKuqqaipq7W1tba5o3eKcXKHhnd0cGh5a2JjYWVsaW5zal9jZWNjZWprYmRqbHaXjX6ovbm3tre5u7u6uLWxrKurqq6wrKyrq62tq6uvsLGvr7CytbW2t7W1trW1tbW1tbW2trSvr7O0tLSvra6vsrW0tbW1tbW2t7e3t7e3t7e3t7e3t7Owsra1tLa2tre3tra2tbW1tra3t7e5uLi4t7e3uLi4ubq6urq5uLi3t7e1tbS0tLS0tLS0s7OysbCvr6+vr66vr62oo6KgnJqampqZmZqbm5qampqbmpmZmZiXl5aYmZmZmpycnZ+foJ+goKChoaCgoJ+fi3RuaXRdYGZeUlRLRFRJPUVTSEVCOzo0NDY5NDQ1NzM4ODg3ODk5Ojs7Pz04OjkzNTg5NjM5PT5AP0A6QEJCQkA/QEJCPz0+QUFCPz06PkVDQFGjpqWlp6inqauqqKaoqKipp6ioqKinp6ioqaq1tbe3t7KZtH99kIx1Z2lqbGZjYGNoZW94cGlicXx5cGpmZmRma3NqhYystrKwra2ttLeysLCtrKuqqaiop6ipqampqKinqKipqaeoqqurra2sqqytraysrq6traunpaSnqqyopKOkpamwsbGztbW2t7i3t7W1tre4t7e3t7Kppaasq6ivtLa1s7W3t7a1tbW2tra3t7e3t7a2t7e3t7m6urq5uLi3t7Wxs7S0tLKxsK6sq6yurrCxsK2rqqmqqKijnJqZmJmYmJiYmZmZmZmZmpqZm5ubnJybmZeYmpqcnJydnJ2foKGhoqKioKGgoKCfnop1amtuWVxhVktPREdVRz5PV0hEPTw4MzQ0ODQ1NDgyODk4ODk6Ojw5OUA8Njk6MzY3OTE0PD8/QEBBOkNGRUJBREJDQTo7P0FCQz9APUBEQ0BPo6empaemqKqqqqakpqenqKioqKimpqaoq6uttba3t7e4rbJ1cHuDdmBiaWtiZWZhZGdmfYh5bHKAfXFvcXhjbW5xZo+srKurq6ysra6urK2trKyqp6WmpaWlpqioqKiopaeoqKioqKeoqampp6Wko6KioqOioKKioaKhoKChoaKjpKOjpaWlqLC0s7OzsKuqqaqztLa3trGopaOioaGipKiqqairs7Sxrq6xs7W2tra3uLi3t7e3t7e3t7a2uLe0sa6ppqerrKmnpqWkpKSkpKWnqaajoJ+enZycm5uampmZmJeXmZmZmJiZmpqampqampqbm5mYmpydnZ2dnZucoKGgoaOjoqCgoKCfnp2FdGtsaFdYU0pHTUVITUdAU1dGRz09OTM2Mzc0NTU3Mzg6Ojo6OTw9OjpBPDY9ODM3ODgzNztAPz9AQDpCRUNAQkRDQT87PEBDQkNBQDxBQ0A9TqKnpqanp6mqq6mkpaWlpaaoqKippqanqKmpqrW2tre3t7izc2h7c2JnamtpaWJhZGloXV1tfHJma3J/fHR8bm1zc36gqamrq6uqq62trKusq6mpqKWjpKampqWmp6eqqaamp6enqKinp6iop6WjpKKhoaGhn56en5+fn56foKGho6Wko6OkpKSmp6enpqWkpaampqeqraumpKKhoaChpKWlpaenpaeoqKalpaivtLa3trW1tra1tbOwrKupqa6rqKWlpqampaSkpaWlpqWkpKSkpaKhoaGgnp2bm5ucm5qamZiXmJiYmJiZmpmZmZmYmZmZmZqZmZydnJycnJybnJ+fn6ChoaKgoKCfnZ2cgHNrbmReU0pITUZETEtFRFFTQ0c9PDgzNjI4NDY0NjQ4OTg6Ozk7Pjw5PTs5PTczNTk2NTY8QD0/QD88P0JDPkJCQj89Pj5CQ0FFQD86PkVAO0+jpqWkpqeoqaelpKWlpKWnp6eoqKanp6alpqa1tba2trW2uYptcW1vfHxxZ2pmYGFsYFROW2hqbm9tgYJ9cWdxdn6aqKeoqqmpqqurrKqqqqimpaWkoqOlpqalpaWmqaqppqWjpKWmpqSjo6KioqKgoJ+fnp6cnJycnJ2dnJ2en6CioaKjo6KhoqKkpaSioqOjpKSjpKSko6Ggn6GipKanp6ipqaelpaSipKSlqK2wsKyrqqusqqmnpaWmpaWlpaalpqioqailpaWkpKSlpKOjpKOioaGhoqKgnp2cnJubm5qZmJiYmJmam5mXl5eWlpeXmJiZmpqcm5qampubm5ucnJ6goKGgnp6enpycm356bnJiXlNNSlBFRk5NQkBPRT5JOz01MzYzODM2Njc1Ojs4OTs5Oj49Ozo5OT03NjY5NjU2PkI+PkE/PT5DQT5DQ0BAO0BAQkJCRUA+Oz5FPzxQoKSjpKOjo6SkoqSlpaSlpqamp6empqalpqaltLW1tbS0tbiBaHx9ZXOCemxwdWFfY1ROT1FbaGxpbGxxbW5xbnScoqSnqKioqauqqqqqqaempaSjo6OjpKSlpqalp6ytqaShnp2eo6Shnp6foKCenJ2dnJycmpqam5ucnJubm5ydnp6foKChoJ+goaOioKGjpKSjoqSlpaWkop+go6SkpKapqainpaGdnJ+jpaipqainqKioqaempaWkpKSlpqampqampqenpaWko6Ojo6KioqGhoqKhoqOkop+enZ2cmpubmpqZmJeXmJaWlZSUlJWVl5iYmpubnJuampqam5ucm5ucnp+fnpucnJyam5p/fnF0YFtUTUdNSEZMSj8/TkM8QDs8NDM4Mzc0NzY3ODs9ODo6OTk7PTs7ODk9Nzc4OTU4OD9APT9BPjs9RD89REA/PzpAQUE/QUVAPjw8Qz88Tp2ioaKioKCipaSkpKWlpqenp6empqampaampbW1tbS0tLS3jHalsXdmc3Jvc2xjZGlYT1JRT09dgG1kYFptkZGSoqKjpaampqenqKiop6alpaSjoqGhoaKjpaempqesrKemoJ2cm6Ghnpuamp2cmZiam5qampmZmZubm5uampqampucnZ6goaCfnp+hoJ6foqOko6Omp6inqKWioKGhoaGkpaWlpKCcmZmbnqOmpqampqanpqempaOlpKWlpqiop6enpaWlpaWkpKOjo6KhoqKioqKhoaKjo6Kgn56enZybnJubmZaUlJSTk5OTk5SUlJWWl5qam5ubm5qZmZqanJ2dnZ2dnZuampqamZqXf3dvc11aTkhKTkdFRklERU5APD09PDQ1OzQ2NDY1Njc5Ozg5OTg5OTw7PDc6Ozc4ODg1ODg/Qj9BQTw+P0A8PEJAQT49QT4/Pz1CQUA6OkA8PE+doqGfoJ+dn6OkpKSlpqeoqKenp6ampqampqW1tLS0tLS0tbSXtqd1Znh2Y2xjY2VjW1JTU1JNXqCMeFhodpajnp6hoaOjo6OjpKSlpqalpKSioaGko6OjoqOlpqWmpqenpp+bmpuioJmWlpWam5mXl5iYmpqYmJqampqbm5qZmZmenZ2goqOjo6KkpKWinqGhoaKjpaampaSjoaCgn5+hoZ+goJ2amJeZmpygpKOjpKWmp6alpaOjpKSkpKWnp6ampqampaWmpKOjo6SjoqKjpKGfoKGhoKGgoaCfn56dnZyamJeVk5KSkpKSkpOTkpOUlZaZmpqbm5qampqbnZ6enp2cnJybm5qamZmZlH10bHReWk9IRUdGQkVORT9GOzo+Pzs0Njo2OTM2NDY4ODo4OTc4ODo8Ozw5Ozs6OjY3ODk5Pj9APjw9QD5AOjlAQT89QT8/QUE+QUE/Ojk9PjpQnaCfnZucnJufoqOlpaWlp6iop6ampqanpqantLS0tLOysrGwsK2rkHiGj36bmn93Yl1TUlFRTGKgootaiKCgn52YmZycnZ2eoaGgpKenpqWkoqGjp6alpaKipaampaanpqagm5mboaCXk5OSl5qcmpeXl5iampmampqam5qYmJmaoKCgoKGfoaKipKamop6gn5+goaOko6Khn56enpyanZuZmpqZmJeZnqChoaKioqKkpaWmpKSkpKKioqKkpaWlpaWlpaalpaOko6KioqGgoKGgnp+fn5+fnp+foJ+cm5qZl5WUlJSTkZCRkpKSkpKSk5SVl5iZmpmZmpqam5+fnp2cnJycmpmZmpiXl5F8cmdxXl1QRj9BRD9KT0JCRjhDRT4+OTg7Nzc0ODQ1OTo6Ozk3OTo8Ozo8PT48PDo2NzY5OD4/QT47Pz49PDg6PkFAQUE/P0FCQERBPjo4PkE8U5ycm5uampycnaGio6KjoqSmp6alpaampqSjo7KysK2rp6amp6alpqiln6iop6qnoXmEXFFST0xcnKCAYpmgnp2clZOVlpeZmp2dnqGmpqampKOioqanp6ajpaampaWmp6amop2cnqGfl5GRkJSXm52YlpaWmJuZmpqampqZl5iam6Ghn56fnpybnJ6goJ6dn56fn6Cio6SjoqCfnp2ZlpeXl5iYmZubnqKioqKioqGio6WlpKOio6SioaGhoqOkpKSko6SkpKSioqKhoqGgn5+gnp2enp2dnZ2dnp6em5mYl5WTk5SUk5KQj5GSkZKSkZKTlJaXl5iYmZqampyenZ2dnJubmpiYmpmXlZaNempmamBiTkY+P0A9SkVAQ0A7QEE8Ozs5Ojc2NTg0Njc4OT04ODs6Oz87Ojs8Ojk6Nzc2ODs7Oz08Ojo8PTw3Oz5DQkRDPz1BQ0FEQT88OkBCO1eZmJqamZmam5ucnp2foqKhoqSlpKSlpqSioJ6op6alpqWlpaemp6ampqakpaanqKehqXJOUU1KVJahenKanJyenJeVlJWWmJiXl5qeoqKhoqOkpKOjpaalpaanpqSlpqalpaOgoKGhn5mSkI+WmpmenJaXl5eZm5ycnJqamZeZm5uen52cnZyZmZqcnZydnp6fn5+hoaCgoaKgn56bl5WVlZeanZ6fn6GhoqKio6OhoaCgoJ2cnaGioqOkpKOioaSlpKOko6SjoqKioqKhoKGfn52cnZ2cnJ2dnJ2enpqXlpaVlJOTkpKSkpCRkpKSkpGSlJWWl5iYmJiam5ycnJycnJ2cm5mYmZiWlJWXi3hsY2RiZFFHQT1DO0tIRDo7Ozw+OTo6OTo3Mzc5NTo4ODg8OTg7OT09Ozo7Ojk8PDc2NDc/PDo9Ozw/Pjw7ODxBQ0FDQkI+P0NAQkFAOj9APztZmZiampqam5ubm5ydoKGhoaGhoqKioqKhn5+dpKWmpqenpaWmp6ampqWkpKalpKSkpaaGUFJQT0+PmHB6mpubnJ6cnJycm5ubmZiYm56dnp6foKOkoqGhoqKio6SkpaalpKOjoaGhnpyalZOUmJuam56amJiYmJqcnpyam5iWmZybnJycnJydmpqbnJ2dnp6dnp6fn52cnJyhoaCblpWVlZacoKGgn5+hoKKjoqOhnZuZlpaWlpicnqCip6ikoaCgoqOjoqKioKCgoJ+fn5+gnp2cm5ucnZydnJmanJuWk5KSkpKUk5KSkpKSkpOSkpKRkpSVlpeYmJiYmZqcm5qbm5ucnJqZmJiXlZWWl4d3ZGdoZGJNQ0U8RDlJSkU5Ojs9PTo6ODg6NjQ3OTU8OTY4OTc5PDs7PDo6PDs6PDw4Nzg3Pj07Pj46Qj86Ojo/QURCQ0FBQD9EQUFAPjpAPj06W5qYmZqbmpubm5uen6CgoaKioKCgn5+enp2dnKWkpaanpqWlpqakoqKio6Oko6Kjo6KnllRYVVJOZ21rgZ6am5udn6Cgn56enp6dnJ2dnJ6enp+goaCfn6CgoKGio6Ojo6OjoqGgnpuZmZiZmZmamZienpiYmZmam5qWlZeWlZicnJ2cm52dnpybnJ2cnZ6bmJqeoaGdm5udoKKhmpWVlpaZoKKgnZueoKGjop+em5eXlJKSlJeYmZ2goqenpaGgn56goaGioaCfnp2cnJubnJubmpqZmpydnJmXmZaVk5GQkJCPkZKSkpKSkZKTk5OTk5OTlJWWlpeXl5manJubnJucnJqamZeXlpaVlZSEcmZsYmRbREJMPT84RktCPEA+Pj05Ozk6PTg1ODg2Ozg1Njo4PDw7Ozw8Ozk8Oj09OTU4Nzw5PD88OkE/Ojo6QEBDQkRBQ0A/Q0FAPj08QD09Ol+al5mamJeYmpycn5+foaGhoJ+fn56foKCenZ2lpKSko6OioqOjoZ+foaGipKOio6SiradXXl1UV19ua42dmpqbnJ6dm5ucnZ+enZycnJydnZ+goKChoaGgoKGgoKGioaGioZ+enJqampqbnJqZmpuZnJ6ZlpaWl5eTjo6QlJabnJuam5udn52cnJycnJ6dlpSZnJ+in5ycnZ+hoJuXl5mZmpycnJubnZ6fnZqXlpaWlJOTlJiampqfoKGmpqWgn56fnqChoaCenJubnJybm5ybm5qZmJmZmZmXl5iVlJKQkJCQj5CSkpKSkZGTk5aYl5STkpSVlJWWlZaZmZmam52cnJyampmXlpaWlpaQgG9vZV5gV0BKSDg/N0lFP0VBPD07Ojo8Ozs3NTs4Njs3NDY6Oj47Oj0+Pj07Ozs+Ozo4Ojk5NkBBPTo8PTo6OT9BQ0JERUM+P0FBPz8+Pj89PDtgl5WXl5aVl5mbnqGhoKGioqCenp6enqCgn52bpaWjpKSioKCfoJ+dnZ+hoqOjo6OkobCjXWVkYGFua4GenJubm5ubmZianJ2enJubm5ycnJ6ipKGeoKGhoqKhoKCgoaGgn5+enJqZmpubm5ybmp2dm5manJiXlZWWkY6Nj5KYnZycm5ycnqCdnJucnJyempWVm56foZ+dnJyenp2cmpqampqampqbm5qXl5aTkpWVlpWTlZaam5qanZ6foqWjnp6fn5+en5+enZ6fnZycm5qcmpqbmpiZmJiYmJiYlZSTkZCRkJCQkZKTk5CRk5SYmZiVk5SVlZWWlZaXmZmXmZqenpyamJiXl5aWl5eYjX1ubV9lVlRFSzw3PjdSRUM+QkE4Ozw7OTg6ODY7Nzc6Njc5Oj0+Ojw8PT49PD06Pz06ODw9OTtAPj4/PT45ODs/QkNAQ0VDPT9DQj5AQD5APTw8YZWSlJWWlpeanJ6goKCgoaCgnp6enp6gn56em6WlpKOioJ+fnp2dm5mbnJydnp+gn56rmGNpbW5pZm2enZybm5ybmpmZmZqam5ucm5uam5ygo6SgnZ6enqCgoKCgn6ChoKCfnpuamZqam5ubm5ufnpyZmJqamJiYmJKOj5OXnJ2bnJ2cnJycnZycnp6dnpqVl5ygoaGfnp2eoJ+cnJuampqbmpqYmpmVk5OTkpOWl5eVlJiYmZucnJydoJ+gnp6enp+fn56en6KjpKKgnp6cm5qampuZmJmZmJeXlpWUlJORkZCQkZKTk5OSkpOUmJmYlpWUlZaWlpaWl5iYmJiXmZqamZeXlpaXlpeWl4l4dmddX1dURUU5OTs8WT5AOEI/OTs7Pjk4Ozg6Ozc5OjU4OTs9PDk9Oz0+PD0+Oz8/Ozk+PDw+Pz5AQUE9ODc7QkNFP0FFQz1AREJBQEQ7Oz47PGKWk5SUlpWUlpiYmZubnJycnZ2cnJ2en56dnJqkpKSkoJ+enpybm5qZmJiYmZucnZ6cpolla3R4bVuFop2dnJydnJqbmpqampydnZ2bmpuboKKinpucnJycnJ2enp2dnZ2fnpyampucnZycm5ycnp6cm5qanZqam5yVkZOXm52dnJ2fnZycnJycnZ6fnp+cl5idn6GhoJ6cn6CfnJubm5qbmpmZmZmZl5WWlZaYl5eXlpaYmZuenp2dn6GhoJ+fnp6fn5+dn5+hoqKhoZ+fn5yZm5qcnZuampmXlpaYl5eXlpWTkpGTlJSTlJSUlJaZmJaVlZeZmJeYl5eXl5eYl5iXl5eXlpaXl5eVl5eDeHZfW11eUT1GOjk4P1VDQTtDQzo8Pz86Ojk3Ozg4ODc0ODk8Ozw4Ozs8PTo9Pjo/QT06PTw+PkA/PUBBPjk2PERDRUBBRUU9PkVERD9COzo8OTpkl5SVlZaUlJSUlJWXmJiamZqcnJydnp6dnZybo6Oko6CenJuamZqZmJiYmZiam5ubm6WJa3F2em9lmp+enp2dnJybnZ6dnJ2enp2dnJydm5ygoJuampubmpudnJqampucnJuZmZycnJ2dnZ2dnZ2dnpybmp+fm5ydm5mZmZudnZ2dn52dn5+dnJydn5+fn5uanZ+goJ+dnJ6gnpubm5ubm5yampuamZudnJqZmJeYmJiYmp2foKCgoJ+hoaGgoJ+en5+fnp6foaKhoJ+enp+enJqam5ubmpqZlpaXmZmYmJiWlJOUlJWVk5OVlZSVlpWVlZSYmZuamZaWl5WWmJiWl5KUlJGRk4yRkJOWfXhqYWJiXFA8QDw2OENWSERCOjg7Oj47Nzc5Nj06OTk2NDc6Ozw9OTo6Oz87PT08QD47Oz46PT89PkBBP0A8NztBQ0U/P0REPj9EREM+Qj07PDs6Z5aTk5OTk5OTlJSVlpeWl5aWl5mbm5ybm5uamaOjoqCfnpuamJeYl5eXmJmYmZybm5qkgGpqb3lzcZegnp2dnJydnp6enp+enp2cnJydnp2bnJuampqam5ubmZiYmpqamZmZmJqdm5ydnZ2dnJ2cnZ2cm5qdn5ucnJubnJubnZ2dnJydnp2enZydnZ2cnJ2dm5uenp6dnZybnpubnJycnJydnJubmpmbmpmYmZmYmpmZmpyfn5+jpaKfoaKioaGfnqCgn5+fnqCioaGhn5+fn52ZmpudnZqZmJWWl5aVlZaTkpOUk5STkJCSk5GUkY+OkJGOlZabmJWYlJmXlJiRjJCPk5yTkoyFjIeDhndxZ2pkW1xRQT44NkJHYEJFR0A+Ozw7Ojg4NjU8ODo4MzQ6Njk9PTk5Ojs9Ozw6PD48Oj5AOj5APjw/QD8+PDg6Q0FEPz5CRD8+Q0VCPUJAPDw8OmeYk5KSk5OSk5SVlJWXl5aWlZaXmZmZmpqampqkoqCfn52bmpmYmJiXl5iZmJmcnZ2cqH1nZXN7enOJop+enp2dnp6enZ2enZ6enp2dnZ6cm5ybmpubm5ucm5iYmJmZmJiZmZmbnZycnZ6enp6enp6dnZybm52bnJybnJ2dnZ2dnJ2dnp+fn52cnZ2dm5qbnJmZnJ2dnZ2dm5uanJ2dnJycnp2dnZybmZeVlZeXmJqam5ubnZ6foqOhoKGhnJucm5ubnZqcmZycn6CfnZiZmZmUkpKUl5SPj4+OkYyNiYuQi4mLjpGRj4mQmJiQkoyNi5KQj5iYoqiqpqWlrKOmoZqep6eyqKKVo6Cfl39wcWlsXFtcTUY8NzdHR1g+SE5URjk+Ojg5ODc1PTk4NzMzOTY6Pjw6Nzo8Ozo6Ojo8PDs/PjtAQD47PT5BPDw2N0A+QkA+QUY+PEFEQT1DQj49PDlmmJSTk5OTkpOUlZOVl5iYmJaXl5iZmZqampqaoqGfnp2cm5mYmJiYmJiYmZmZm5ybnKx/am16f3lxh6Genp2cnZ6enp6enp6dnp2dnZ6enJubnJubm5ubm5uZmJiYmJiYmJmZnJ2dnJyenp6enp+fnp6dnp6dnJydnJ2dnZ6fnZ2fn56goJ+enZ2dnZybnJ2em5qbm52enZ6dm5ubnJ2cnp2cnZqYl5SRjo+QkJGVmJSWlJiZmpudmJuYlY2Mjo6TkpKRj4mQjpGRjo+Ki42NjYiIi4+Lg42NkY+MkI2Qk5WVnJihoJySn6SipKmam5eanKOprb3Bwbq8uL26ucC8ubq3uru7tL2zwbV/bnVmZ1peWUxJRTo7TElTPFZSSUM6QTo7Ozc3NTo6OjgyNTY4Oz08OTk7Ozw5Nzo4Ojw6PT85PD8+PDw9QTs5NTg8O0A/QT9EPTxBQkA8REM9PT06YZOTkZCUlJOTk5OTlJeYlpeZmJmYmZqbmpqamp+gnp+fnJqZmpqampmYl5iZmZmZmZmphXB1e4B3b4mhnp6enp6fn56en56fn56dnp6fnp2dnJ2cmpubm5ubmZiYmJiZmZiam52cnJ2dnp2dnp6goJ+enZ6hoJ6dnp2enZ6fn56en6CenZ6enJydnZ2cm5qYnJuVmJqamJiYmJmSjJCXlKCXk4+MjYqKiImMiJORh5CPjYqKkJCLjoqMi4+IiImJjpGOjYaFiYaKhoWLiI+SkJCNkJKXlpKamJ2TlJ6kpqaqq7Gsr6+rpquqsbm5tbS0rqyvtMDIxcXBvsbDxMTDurW+uLa0s7C2tb6qcHRyXGZfXV1JRj8/RUtMVklcTEQ/PUI6Qzk5Nzc7OTk3MTc5ODo+ODg6PDw7OTc5OTs9Oj4/OT5BPDs+PD46OTY5PDpBPkNBQT08QkBAPkJEPj8+OVyHhIOHi42KiYaFgYqMkZOVmJiHlZaWkpiampmenZ+gn52ampubm5ycm5iWmJmXl5ibqo56dXZ7f3mCoJ+fnp+goKCfn5+foKCfnp2dnp+enp2dnJqam5ubmpuYmJiXl5iZm5ucnJydnp6enpybm52dnZycoaGfnZ6dnZ2dnp2dnJiWlpaYlZWSlpmWk5GKjI+PjI+NkIuLj4+WiYiEi5GZjn2Fi42PjYyHioyQm4yRj4+Lio6TjIyNjIiSi4yFiYyPhouIh42KhYyEj4qXkJOYmpWbnKOqoaKknKKrsbe0ubWxs62vsrKlp7O6sbq6vLa3tsDDw729vLa/urq8wbW4wL6zr66mqa+3mm58Z1tjWl1fSEU+QUtJU1hZXkFGOTk9OUY/Pzo3Ozs7NjM6Nzo5Pjg6Ojw9OTk4Ozk7PDo+PTtAQDs8QjxAOjg0Nzw7Qj9BQj4+O0NEREBDQz0+PjlhmZWLkYWNj5aSiHl9e3+Fi4OKgoqJhmuAeJCLlpqRnZ2UlJGTlpeampiWk42Sk5KQm5uIdndzcX1/cpGgnZubm5yenZ2eoKGgm5uWlpucmpybnJuYmZqYmJmampqWi5CTlpmYlZiYlpucl5WSkY2SkZCUk5KXm5mYm5ePjpCLjo2Ch4uLi4qLiI2RjIeHhoqIiZGKh4yEhYqNi4qNhI+UkIyDkJOUmZWQi5OTkZWRlpWOj5GMlI2Oj4qIj4ePhoeJiYmNiomJioWNh46JmJKUmpuXmKChp6Cko5qqqbO2sbWwqKmiqK6tn6qvsK21ubi8wr/BxLixtbCutrOwuL68ury+urOzp7G3wpB1gGNiXlpXUk1IRkVQSVlXX1tDUDpCQz1HRj84Nzo6NzU1OTc8OTw5ODo9Pjo6Nzs7Pjs7PTs9P0E7Pz48Pzo4NDM3OkFBQEI+PjpDREM/QUM7PT45Z6mloqKZn6CippeUiI2CiIJ1h4iKiIp7e3Z7enmPeoiSfn18en6CkYWBgH1zfH99fISHfnRweHZzfHaBj4iIiYeIioyMkZicl4iOhIuNi4iNkI+Pi5GPi4yPj5CQjouFhYeLjIyHiIuOi4eMhYaBjYuGiop/iYqGiJiRiIOIg4KFfIuLjIaJi4iKkIyIi42PjI+Wh4mLio6NjY2Wk5OdnJyalpycm56bmpuYnZeTkZWWkJKRi4+LlpSMjYqDi4SEiYyQkIqOio2LipGJjZOTk5SVk5KcmZ6Xn6CfpaKvsamupKSfmKStpqa4t6ysu729wsPAv7+vpa2wsLS3uLO0uLa0ta6stK+4tLaBeXpjZmBeVlBRQUVMT0lcXl9UR0dCS0xCREA9ODg7OTU3Nzk3Ozc9PDk9Pj05Ozg6O0A8Oj06PkJBOD88Oj84NjQyOTtCQD9CPj04QEI/PkBEO0A+N2CloJqXnaGaoaCPl5efl5WCjaCfo6GdmpKOjIxycXBvdnFucG1ucHZub29waHBxcHR+c3FycXd7cnl2d3Jyd3Z6e3l8fXt/iIGEi3+PkYaNi4uGiouLiYaEgYaCgIKJkYOAg4x/ho+LiYWAh32AgZKQhoSEho2DhIyPj4+IjY+Hi4iRkJWRjpCKk5eOj5WYp6SfnZWYlpaln5udq6aqt7W4srGnr6qnpqGfmp2WkpWVkYqPjImTjZuVjYuLhoaJjJWQkJCLmZKVlZSbkJiTlIyNkYyWl5WilZ6mqauno6OqsJucpp+mq6G0vb6zs7+5u7u6uby9rqiusa6wuLyztLGxqrCpqLGxsqild3J0X2hhYFRWUUlKSFZNXl5eVExKRVFKRUdDPTo5OTc0ODY4Mzg4PTo9PD47OTs4Ojs/PDw+OT9DPzg7Ojg8Nzc2Mzc5RT4/Qz89N0BAQT0/RDw+PThUj4yGh4eUjJWZl5yWmZaNlZyWlZydoKCdmpiWeHFubXJ4cXFsbnJwa3FvcG1yc3t1dnd5fnVxeHZ0d3tybn98gX15eH1/eYOGg4WCg5CLkIuLi42Pi4mJhYKBfX9zfYiAfpyQhIWFiYuPinp9fYaOjYqGjZSRi5CXj5SXkpihlp6XlZunpp+goKawq6GjpbW0sqqmqq+isba5vcK7ucO+vLi9uLWxrLCspZuSk5mfm5SPk5WOmp2doJqfn5edo6qsoZ+em62hp6qwqaampJiRkZWUo6SirKSss7Szs6i3tru4sLKvra2yt7a6srW6s7e5u7i8urayr6yxsbKztLOxsa2us7Gzs6yhl3Zxc19jXlJRVE1PSUdYT1pcZFROR1VPRURKRD44Ojg3NTg4ODU5Nzo6PTw/Ojg8ODk5PTs9PTpCPj84Ozo5Ojk4NjI1N0I+P0RAQDY+P0I/PEM8PT46Tn98go6MjJOTl5eaj5SWjZaRkZSXk5qanqGdnHJvcnFxcXFxcG5zcW91dHJxdneAdXd8eYV+d3t8eX1/fICJiYmDfXp/h4GIiYGAgIGGiIGGi4eIhYSIiImEf4J/enx8fX6SkH+IeIGFi4qDhIWKj4yNkZmdlJSUoJqan6Ktsa2ppKWtr6ysrLWuvrmtrqm1sLexq7G2rK+9wsLAvrq8trKutraxtK66u7OurKepp6unoqmtoKmooq+wuLSxvLq6urK0ta+8tLezt7e7t7mtrbCprLW5sbeytLe2sLu7vLu6ury1vLi0wbWsqqqrtLG3uLm1trSzsKymrrCqq7Cxq6yusLKxtK6qo5N4dnJlZ1tMUlBGTUhTV1JlXmdUUExcUUhMUkNBOTk3OTU4ODY2Ozc5Ojs6Pjk4Ozo6Ojw8Pj08RD45Njs7ODg+OTUxNTZCRkREP0A3Pj5DPjpBP0BAO0t/gomXmJSdlpabmIuSlo6XkZGVl5SZl5+bmZx8dHV2dXl1c3RudnJzdHV2d319gX56gXyDfoJ/fYB/hIKFj52RiYF/go+Xjo6HgoCBiIuFfoqQi3+HjYyLioeSioeGjZGTkZGEh319g4iMjouOiomQj46PlJSYkZWbmp2dqK6yr6+1tLOtsrW4sLy1tbGqsKqztbS7t7SztrS1r7i4t62noqassLCvtre3vrW5vLOysa61u7C0r6+yu7axuMC9tLS0s7izvLq2tLrAvbm6ubq+ubm5vrWysa+yr6q1tLGzsbSzrri4tb+vpKaoo6ussa+zrq6wsKytq6qroqKmqKKnrauqpaynoqeYeHlxZmVZT09NSVJNV0xPX15cTlVUYlFEVE07Pzo8ODk1Nzc1Nzk1Ojo6OTs4Ojw8Oj08Pj4/P0I9ODY6Ojk6QDs1MjY2QUZDQz4/Nz49Q0I5P0I/PjtLjpGTmJmVmZGTopiTkpKLk4uOkI+Vl5ablZSbhoJ9enh2dHRzdH53end2gIKDhouMhISFioaQiYeRk5aRjZaalY+IjI+emJaVkpCTl5qamJCdoJ2Tl5qgmZ2bo6CVkJugpKOak42IiIuJkZGOkY6LmJqPj4yUmpecnJufnKSstLm6vK+2tLi0tLK3uLmzq6+qqKy1srK1rrGrrqa3s7OxpaGotbCvrayrtbqyu7q6tLK3ur67ubG4sLmtqLK4u66ttLS3tbu2trm5vLe0r7G0t7a5s7e1pq2pq6ior6yprq2up6KxtLG0q6aop6Cjq66oqq6orLKwr6+pqKGeoaGjpqOgopqlo56ol3J3bmdiVUtUT09KQ1BLX2JYWlFcU19NSFFJQUA5Ojg2Njc3NTg5NDs5Ozk8Nzs+Ojg8PD0/QkBBPTs2OTk5Oj87NjM3OD5GQkJAQjk+PUBDPkBGQj44R5OWkZWTkpSQkZ+ZnZmVkI+Sko6Mk5aWko6RlZGSkIaBeXJzdXuBhI6HhZGTkpicnJiVkJWYo5yaoaeqqZ+clpeVnaKioZyZnpmlqKyvramnqqmop6GlqKirqamvoZufoaOjoJqfoJyUjZiUmKCgoaSem5qkp6Spq66spaOoq6+xtK6qrK6zr6ystLO0ua6urayqrLKwsK2wqKqmsrS0uK6qtrqwr6qurLC3s7i0t7W0u7y4tbWxtauyrKiys7uvrbGytLa1sbG0s7OvrKuvs7a0sayutKqqpqWnrauoqKupqqifqbOwqqeppaOio7CtqaatpairrayppaSioKWipaOYmZyVnqKippdudWVnZFZPWEtLSktTVHBiWWRXX1tcUlpQTEM8ODo6Njk4NzQ3NzQ4Ojw6PDg6PTk3PDw7PkM/QT47OTo5Ojs+PTg0NThBREVEQkM5PjtAPkI/R0Q+N0KSm5SVlZaVj46Wl5qZlZGKk5SSjo+SkYqKiY2Ul5qTjYmCho6VkZSfmpuin5+jnqGhn5ijpKelpaapqa2rqaKmpKilpKGfnqOjra2srairrq6qqqukoaKlqaenqaijopybm6SgpaijoJidmZ+hoqmnoKKirqyrqqetrqilpKmpqammo6iqqaekp66wr7Ovq7Crqq+yr7Czua+rqLCxrrCyubO0r62vtbCss7GurLW1tLSzs7CvrKyqrKusr7G0s7CwrrCwsKyqrauqq6alrrCysKumqbCvqaOkqaunqKaopquwq6mvqaaoqaalo6iwraqpqKKpo6WnpKGhoKKloZ2el5aYlJugpKmUbnNeamlfVVpOUk5QT1JkXGRjW11ZXFBZT0tAPDs5Ojc6ODczNTMzODo9OTo4OTo5Oj08PEBEPkA9OTo8PDw+Oz45NTo8QkFFQUNBOT47P0BEQENCQDdAkZ6YlJeZlpGHi5SSl5GIg4mLk4+OkI2Hh4SFlZmWmJeZlpqeop2anKKkoaCdn5qfoKGgpqGgoKCjo6KlqKmrramqpqOmpaCloKaopqWnqKapqKOnppmcpKWioaChoaCcmJmfoKGkpKKenpagm5qioqChn6CiqKCcn6GloaCmo6KfpKGspp6foaGkrKqnrKivq6e0sa6ur7WyrKqwq6mtrbWwrq6srreup6yqpKivsq+sq7Kvqqqpq6utqa6urrGxraqtqaunp6uoqauinaapqKilqKisqKilpKWop6iopqmsr6+oq6mhoqKlo6Opq6ymqKWjqKKhoKSdnZ+hoZ2bnZ+amZWcnKOqlG9zZm5yZF1dUFVPV09eZGRsZ2JiWlpSVE9NQTo9Ojo4Ozk1MTYzMjg4Ozk5OTk7OTk8Oz0/Qz5APTk7Ojs8QD0+PDk5PEFBRUFGQTo9Oz9BQUJBRUI4PYqWlJOYmpaPiISNjpGSjIiIiI+JiZCRjoqKiJubmZygpaKlnqKjoZqeoZyanZ6bnKOop6ugoKOYoJ2XnKGjo6WjoqKkrKilqaCepqmnq6mkn6Kgoqahpq2mpp2fn5+fn5manJyhoKGkn6GbnZqcoJ6hn56eoKOZlpqYo6KipJ+ZnKGhoqCbmp6goaSgnaejqrGorqusqaSqqquorKalrKqws6+rq6mwq6appaWoq6ynpqevq6Wnq6upq6irqqqrrailqKOmpaesqayoopykoaOmo6qpqKano6SnqKanqKepqKupoaKoo5yepqWjqKino6WlpqmgpJ6inpeYnZ+doqKlnpiUlZ6go5d1d2t2d2FfXFVZUVVWW2Necl9oX2NTUVlUSD48PTg7OTo4NTM3MzM0Nzo4OT05Ozo5PDxBQEM9PT44Ozw9PEA/Qz86ODo+P0NAREE6Oz48QD9DQ0VDOTyCmJmenZ2alZKKiZGRl5GQh4SJgoGNj4+Sj42cnZ+hpKmlqaeorK2moqKfmKSmo6Stsa6yp6asm56em5qjp6Cfo5+foq+rqqyoqKuwqaipqKGfoKeprbCyr6yjoqahqaWepKOipqClpKKlo56doJ6fpaKinp+imJWemp6fpKGblZigoZ2enJudnZuZmZWen6Oonp2iqKGaoaOmoqSoqaqoq7CxqKWlp6eopKWpqaqnoqWmqKadnqWloqClpaOlpqCjpaOjpaelqamqpKekpqKmp6SrqaenpKGlqKynpqWlo6OopJWdo5+bnaCjqaeopqGjo6mooKiioJyVkZqfoKGmopuXkpCamqCVfHdvfXlmW1tgX1pcVlxoZG9jbmloYl5QUUA/Ozo4Ojg8OzYzNDMzMzc5OTs8OTs7OT49QkBAPTs9ODw9QD08PENBPjo4PT9EP0M+Ojk/PEI/P0FEQjk6gJ6kp6Kem5+gmY+ZnaCWloqGj4iEi4qTl5SRo6Wnqq6trLOys7S4t62pqqevtLKxqq6usbKusa2lq7OssbGpq6+rq6y2sLSwq7GysaOfoqqpp663trS0trOvrKuuq7awqbKxra6npp6io6ObnZyXoqiloZ+eo5ueoZqWnaScm5aZoqefoJ+joJuUlpmWl5qfoJmVnqKZmJ2dpZ2gpKeqqaiqraylqaSlqaeqqaqsp6SkpKOimZmhnpqaoaCfpaWYnqSmpKqooqelpaGqp6mnp6ejqKWmpaGkqKesoqekoaalpaOVl52Ym5mVo6elpaSfnZ2lo6Kqo5+amZiXnJyaoaGakJOTl5ibjX93cnZ4aWJbX15cYllgZG5ta25hX2RgUE9BQDs7OTs4Ojk2MTQzNjQ3Nzc6PTo8Ozk9PUI/Pj89PDo/OTo7PD5BRUA9OTtAQT5DPDs5PzlAQEBAQkM7OXuao6OcoJ2dop2Zn6KioJibmJaYkpSQm5qWl7S0rrW4s7S4tre0uLm3tbm4ub28uKqLnLK4vLS9urW7uru4s7q/uLe5u7G3r6iusq2inJ+qsri8vL27ur+0r7GztbS3t6+1tLWysKikop+gl5Wal6SqpqahpKOkq6WlmKGko52goaKooaOgpaGck5mYmJmco56cmpudl5uZlqWam5+hqKmpqKuvr66pqKmrrKytq6irp6WjoJyfo6Ojn6Cipammmpyip6Spn6GjoqKgpaanpqSooJ+ipKGjoqiop6OloKGopqalo5mbmJuTj6GknqKfmJiVoJuhpaCfm5udnJuamZugmo2YmZiTkYaAdnh5eGNbUllUX19hbGh1a3BnaWliWVNMQDw6Ozg5Nzk3NTU2Mjg1Njc3Ojw7Ozs7QD4/QD0+Pjk6PDk2Nz47QkZCPDg7P0NDRDw+OT43PkFCP0ZDOzhwkpqblJ6bm52Vl52doqajopaXnpaXl6GblJi+t7G4uba3t7i7l5S2vbu9vcDFtaK7mKC3v7+6wcm0nbu2sra/xcGooLazurGqrrSxsLG0tLa8vL68vL3Guri3ur20r7Wxsbq4t7Kzsqqmpp+YpKSnqKSupKurtbWus6CnqqynqqmlpqCnoKGmoZOWmJ2foqSjnZ6coaChnZekmpmdoKaqqqqtrq2tsLGrrK2sqamrrqimpaalpqSkpqaeo6eppKGcoKKjpqCio5+jpJ2foqWgpJyboZ6fo6GhpaSlqaOkpaKkp6ehn52elpOcoJiZko+MjJeWn5uWnJqdnJqTlpSUmJOQmp2YiouHgIB8gnhhXllTYWhgZnNvc2l0ZGlkYltMSz46ODg5ODg5NzM0NTI1NDY2OTw8Oz08P0E/QEA9Pj44OTs4Njc/OUJFQzw7PD5DREM9QDs9Nz1DQ0BFQjw3Z4yRk4qalZiblZWYm6Knq6aVl5iQlZmhnpeXvrWztLu6ubi5woeYt6u4u8DCxbOjw6e4s72/tMTHvbS7uL62wMTErqCworW2tb2+wcPGw8O5vb/AwL2/xL28ur2+tKeqmLHAvbi1ucCzr6+qqqitp6ekr6eqtLyxtLWor7Gwr6yqoqajrJ+fpquXmqifpaWfoJydoKuwsKyiq5yYm6Cor7Kys6uorre1sq2tqaalqKulpaStqaShn6Cnnp6mqKmmnp+anqGlpqmcnaObl6KmmpuanZ+cmqGcmZ2eoKijn6GfnaWioKOioZSZmpmTj4qLhI2Qk5uPjpiVm5eYkJORkomNl5iYk4uKi32AgIVwYGFeXmpiYm53dXZubFtiUVVcTUc7PDk3OTc5Ojc0NDQxNDM3Njg8Ozs8PEBAPUA/Pj8+Ojo5Ojc6Pz5FRUU8PT1AQkJCQUI7PDhAQ0NARD87NV+MjIaFlouUlZeYl5ifpqellpWWkZebn5ual7mxtrO5vLy5urWqsryxvsG0vMe5uLuuv6fGw7/KxsnIxcXJvMLHx7+xsae8vL7FxMbJx8XGu8TAxcbAua+9vMC+vrOrqoyzu760tbfCuq2vsLWqq6aqo62kp7G2q7WyrbOtqK6vp6awr7Ktqq+zpKu1qaeopKCgnqmyuL61tbWqqaausre4t7apq7i8ubexr66noqOop6SfqKOfnqCZoZydoqSnp6GelJuaoKGlnqChnpajnZSQlpiboZqflpORlpSin5qenJudoZ6kn56VnJiPkpOPjImTkJefiZCWkZuUmJGRlZaDjJWXlpKLjIh8f4N/amZoYWtsZm51cXJ1cWZeX1xSSUU/Ojo6Nzg0ODw3NjU0MjMzNjU3PDo7PDs9QD4/QD48PTk5OTs6PDw+QkRFPj49QENDQkREOzo4QUJCQUNAOTJbk4iEjZGKi5GRlZCSmp2fnJOSmJSdnZqXmpW2sbm1tb6+tri1uLO8vMTEusPHwb+0s8XFxr/CzcfLzszMx8HDx8fIysXExcO7vLzBxcHFxb/DwsbFwLGTvrq/w8K2trqptLO0qauzu7uxn5uxr6ykrK60p6qpqKqtrKmlpZ6pr6uyu7q4u7e5t7O5uLOurLO0qrC1ub3Bur6+vL60urm4u7qysbS8u7q7s7Oyp6Smq6uioaCdmpudmpyXmpuenJygnZaclpuZnZ6io52UnJCNiY6OkZ6bnJWNh5KLmJiWmpybmJybnp6cmp6UjpiYmpSRmZeeoZWYmpKXlJWRlJqYk4+TnZaSi5F+enx/dGtrbmRvbGhxeG95aWlhXGdhUUZEQTw5OTc2NDQ6ODQ2NTMzMjY1Nj05OTs7PT47Pj49Oz05OTs7Oz89QUNBQkFAPEBDQ0NFQjs4OUQ/P0BCPzsyV5uQkZCQh4WSjo2IjZCTlZGPjZSUm5STlpqRs7e4uLi+u7C1sri2tbbAw8G+w8LAvru+u7u8xMzEy9DLxsa/xcfLyNTLysjGv7u7vsS+xcjGxsTEw7i0wLe0vMHCucK3t7/Au66lrre8t62co7ewpq20tayupaWjqKSgoKWZqrOyvsG+urm6uLW0srG0tLO6wL7Av769u7u9vsDCt7a3tru7sru+ubi3u7a3tKyoqamrpqijnpOampyYkZKZl5GRmJqXnpiWk5acm5+elJOJiX6GiIuWlJiZkYmVkZeWlZmbmpaYl5idnpyhmJWZmZyYl5ybn56jnJ6WmJeTl5yZmZyUlp2UlpOJdnl6e3Zua2hndVpmcndzeGZmXWRbUlhJRj87Nzg4NzYxNjk3NDQzMzM2NDY7ODo8Oz08OD0+PDo7PDs9Ozs+PkRBQURCQEBBQkNDREM9OTlCQD8/QD89MkyWmpaSk4yKmJCKi4yOkpKKiIaNkJiKj5CUl7O7tba/vb2xtrjBvby0uL/Bsbi3vsHFvbu8wsXJv8jOyMHEwcfKysbKxczIzcbIxb/DwMvNz8nGw8PEwsS+uL7Bw8DEvsHPz87Gq6+2tLWroKe0s66ruLWzq6mjoq2prKatn6y1tL/Cvrm4vbawrausr7W0ur7Fv7u8urO5u7i5ubWtsLS9u7G/vLiytrmzubu0ra2orKyqqaeXnpualY2MmJSTi5WWlJyZl5WWmZKYn5mQiop+iYqKkY6Vl5OUn5mWkJSZmJmWmJOUm6GeoZiYmp2ZmZaenpibopqdnJuYmpuZlpeXlpyZlJyYfoB4eXV1ZWVpamhdam9teHdiYmBgXlhXRkU4Ojg6OTc5NDQ5NzY2NTEyMzM0Ozo9Pzs9PTo6PTs8Pjo7Pz48QkBDQkJFQj0/Q0NDQ0RFQDk6QkFBQj5CQTVCkJeUlZmSj5qQjpKRjZSVi4qHjI2UiImPkpq2u7S8xsHEwr3BxcLAtLO9v6ywr7rDysPCvs3IxbfByMW/wcLIy8rCwsTJzM3Pz8zDx8bIyMjHycfFycfIx7/Fx8TEx8jK0s/SzLy4trS4uMG+vrq9ury6vKytpqm7urm3wLK1uLLAxrq3t8Gzsa2tqau1s7u2w7a2vbWxt762s7e4sLW2v7uwvbq0q7CxsbO8urOzrqutq62xnaOjoJqQjpiXlZCclpaYlpWSnJmTm5+clpGUjpWQiYyQlZOUm56YmZKSnJedlJmSk5aZmJ2VnJ6do5yVnZ+TnKKcnKCfnaOemJSVl5ebmpmgkH99cXRxb2JhZ3VnaWh0bXhsXWRbVWBZTEhDNjw5OTg4OjUzOjY2NDQxMzUyNTs6PD47Ozw9PDs8PTw7PD49P0E/RUFCQ0M+QEFARUVERUE7Nz5DQkI+Q0I4O4+akZaalJKUjZCUlI6VlI6Pi4yJk4uIkJObt8C6xsXEw8zCwcS9vrWvt7uvr7O6wMfFxMHMy8W2ucDCwsTHytHLwsPExsnFzdDOx8zJwsHGwcvLx8bMyc3FxsbDxsXJzdDNz8zHxMDDwsnNx8XBxMfBu760sbCwwb6/wca/vri3w8K6urbAvrWyrKmvsri+tMC0tLi0t7nEua+8vrm+v8K/tbq2q6qsrq+wt768trSura2utaSlqKimmpycnZyeopydmZOQkp2VmKCdmJiVmZmZl46MlH2QkJefmZmYk5GToI6Nko+VjpCUlaKdnKSem56elpyjoKGipKOkop6amZubnJ2enIN9cnx4cGdgamp2bGlkdG5zYlxiVFdUU01HOjc7OTk3Nzo3NDg3ODQ1MjM0MjU7Ojk+Oj08Pz04Oz05OTk9PEBBQEVCQUJBQT9AP0RFREVAPDo+QkNCQENBOjSAoZeUmZiVkImUk5aTiZGMlJGOiJaKi5CXnMXLw8O8wMPHwbm9vbu4tre3rrK3uLzAwsDCx8bHurzAwsXHyMbSycHDxL+/vsTLyMrLyLy7yMfJzcjDyMnJxsXDwsHCx8fJysfMyMfIzcbLz8W3wMDAwLu7vbWzs7+/ub/DucC3u8G8uri7ub27srCvsKy5wri9ube1t7q9xb24xsjCwcLGwr28tamurrCwr7O6t7m2sK+tr7OppquprqannqSlo6OjoqCblZiekZecl5GRlZeZlZmRlJiSlYyYo5qcnp2FiZ+TfJKWlZKUlJennaCipJ+en56foaGkoqKjoaOinJ2fnqOhppl5enl/cm9mZWdjamRham1ubl5YXFZVTlBKRjk5Ozk3Njc3NjM3ODk1NjEzNTI3PDs8QDs/PDw6ODo8OTk4Pj1APz9GP0JBQz89QT5ARENDQTw5PENBQ0RBQDozbKKdlZedlo+PmJiZmIiSjZGVkI+Vjo6TlpbKy7u5urnBu7q3vsG8vLu5sa61uri4u8S6vsC+vru8wMXBxsK+xsG5u8O6uLm8vsHGwca6ucnJw8XEwMTBwsHEwcO+vcLAwMHCy8PGzMvFyNHCsL69uLq7vL63tLC5vrO8vrG5tbi7tryztbm2uba5t7GtusG6vMG/t77Ev8bDw8fHwrvAwr/Cv7iys7O1tLGut7S3tbSxrK2xp6Wlp7CtqJ+nq6ajqKWmpqCgn5SYmZSRkZWUl5OYl5qhnZ6hnKGdoaWglpSbkZeXmJqTnpmZqaSlpKWdoqCanqCkoqOcoqGjoJ6cnp6ppaiVfXuDeG5mYWViYWJjY2piZmNaWVlcWVFORT07ODo7Nzc5OTY0OTk6NTMxNDUyNzo7OkA9Pzw8OTc3Ozo5Ojw+QD8+RDxCQURAPz49QkRCQkI+OjlCP0FCPT44NVmfnJiTmZaRlZiYmpeQkZCQk5GTlJKSkpSUxce4tbq5wrm5vMPFwri7ubGxtry6tbnAu7u5tre0tLW/ur2/ub26urS/uLW3s6+7vLfAt73Cv8G7v8G8u8W+u8HEwL6+uLzBwcu+vcnEwMHKv7HCv7u4u765tbe0uLy0vbi1tLCzvLG3tri/tr25vb65t7q+u7/Axb29y8PGw8TAw762ubq2v7i7v7y4trOyq7CwsrWzs66sq6emnqeurauiqKumpqqjp6iqo5+Ym52bmpicnJiXnJuhpZ2anqGhoKGmoJqbnJiboJ+dnJ+coKiho6SknaKfmqKgop+el6Shop+dmpieqKWhi3x5h31xY2BiYmdqZmZpZWldVlVTWU9TS0U4PzY6Ojc3OTs2NTo7PDYzMTM0MTc7OTg/PT47PDs3Njk5ODo7PUA/PkA9PT9CPjxAQUNDQT9DPTo2PEBBQDw9ODdJlJibj5OUkZWYlZGWkpWRkJGUlZSTkpKYlcHCwLq8ub62uL7EwMKxvbqytLO4vLW3vMC8vbS0sbC1t7W6wbi+uL+8vbe1t7CuuLa5v7vAv7fBu7vDtrrIuLa5u725ura7xcXKvbnFwL+8wb64xr3BwLzFuLa3tLi2tru7uLa0t7q1tLi8vbm/ucPAwLu5vLu+vcjEvcfEw7rAvb62sra4srm0usLCureysaysq62yr7Kur6ijpJ6rrKyqpKakpKiqoqemraihoaGmn6Oiop6bnKKfoKOdnJuhn6KgpKCem5eZn6GdnZ6eoaWkoaKioZ6ho5yinqCZnZijn52eoJqZoKKmnYR6g4B4cG1lZWZvaWVrZ1hYTktLS1JJTEhDOT44PTs2Ojs6Njc8ODk4NjA0MzE3OTk7Pz0+Ojw6ODg5PDg6Ozs7PD1BPj09Q0E8P0NDREA/Pzw6Nz5CREE/QDg4P4mYmoyMkI+Tl5WMkpCakpGXmJaUlJKQmpTDvsbBwby8uLi6v7a8scK2tLyxtLa4s7q9v728sq2vrLGwt7y2u7zAxLm3t7e1urm6u8C9w8C6xMK+x7i5uK23tbi6tLezu8XGy8G7xsDAv728v8nDxMW+xri1srK9uLi4vrq6uby6urS3u7q5v7zEwL+5uri/ubvFxr3Fw8Kyur27sa+2uLO3s7q+wLm2rLGrrqmqqa2qqq6mpKWnrq2ppaOio6GkpaWmoqato6Klo5+ho6Gcmpyhn6CloaCenZygnaWgnpeVmZ2fn52gn6KmpaCknpybn6Ofn5mcmZ2epJyWnKOcnqGcppZ+f4Z8a25wZ3Brc2VibV9cVEhLSkRKQkNHPzk7OD08Nzs7Ojc4Ozc8PDYyNzUxNjk8PD08QTs8Ojs6OT45Ojs9PUA+RD89PkRAPz9BRkQ/Pzw9OTc/QUNCQEI5Ojl3nJiLh4uQkpOWjY+TmpOQnZiSkY6QjpiSvbfHvsO+vbu+vL22uri9ure9s7OwuLi1uby8wLeqraSusLe7s72/u8S3tri2t7+/xLzCxcXHx8rJxs/CwbiutbW8vri7sr7ExMrFwcnDwr+/vr3HzMfHxMe9tbW2wb26u7/CusDCv7y2t729vcHBwL+8ube8wru3v8W7wr++tbe8vK+vt7awtLO6ubq7r6mtq62rrKaqoqeuqKWqra2vp6Sgn6ajnqKjqKOjq6Oiop6dm5ublJaZnJyfpZ6fnpmYnpejoJyXmZqZmqOjop6jo6egpqCbnaCjnp2WoJmcoKCblJegn6WcmKKQgYaBcWVsaW50bndjZ2FcY1FLVEhFRUNHQzw7OTg9Ojc6PTo4OTs3PD01MzY1MDY4OTo8O0A9PDo+PDk+OTk9Pjs/PkM8Pz5APz0/P0ZEQEE/Pjo3P0BDQz9BPTo4ZqGYj4uNlZKVlY6PlpmVl5uVjoyMjY+bk7m2wbS/vLm8w8C+wLq1trKywLmvsry8sLe7tru8q6qjsLm9vrO8vrzFuLK4ub3HycrDx8jGxsnIzM7RzMrEtbrAw8i/v7W/wL/Gxr/LxsO/wbzAw8zKx8XGwbm9vMS/wL/CyL3Hx8XFvLrEv7vBv7rAvLu7wMS9t7nCub69t7S2uLqur7WxsLCytre0t6yurKqsrKuoq6Gms6qlra+trKippaOkp5+io6Onoaeiop6cnZyamYyQlpeZnaKZnpuVkp2UoaCdmZ6fmJimpqKfoqKmoqeloqCko6GbnaCbnKKfl5WVnp6kmpafiYGDgXRvbGx0a2xuX2JeYGFOSE0/RUA/REM7Ozo6Ozo4Ozw6OTw+OTo+NDQ1NTE5OTo5PDtAPD89PTw4PDs6PDs7Pz5DPkI+QD89Pz9FRUJBQj87Nj9CRUQ9QUE6OlmfmJOSlZqVmpOQlpeclZuZlpSVkZKTnZm2uLaxuru6vsG5uca7trWypb69tLbBv66zvbS4wbGwsbS8w7y6ur68xL+3vb+9x8zGx8nGxr/ExMrIzMzNy8bCw8vOwry5vrq5wMO/yMbEwcG/xcDKycPDw8O5w769ub+8wsbCyc7Hxr66xr26v7m3wLm5vsDCvrW0vLi2u7CvsrK1r7Cvrqyus7CzsrirsbKxqrCrq6yrrLatqKyusqarrKmpoaWgpaakrKSmoaChnqGgnaCMlJeTm5+mmZ6emZOYnZ+gnp2eopuYp62ooqSgoKKqpqmhqKGlm6CgnZ2jn5SYmKKdp6Gfm4J7eod6bW13e19wY1tdX15TST5DRUlCQz5DOz42OTo7Ozs7Ozs7PT05PTU2NjIxODo5Ozs6QTs/PDw+Nzs8Ozw9PTw9Pz5BQUE+PkFCQUVDQkRAPDY+Q0RFPkJEPztTmZuZmJ6dmqCalpyZn5KdlZ2boJWWlJqYur20sLu8wcTCv8XGura5sqO7vbS3xLuwtbu2ucS4tLy2ur3BvLu+tr/Bv7y/usDLwsfIwL+8vMDFwsfLyMHDwMDJy8LAu7uwtLy9wMXGxcW/wMK/y8fCwMjAusK7urO6usG+wMrOysS9tby8ub+5ubW1s7/Avre0s7S4rbeqr7CwsrGvq6+nr7ausrG5rra2uLSzsLGttrS6sa6srranrLKsraSjoaenqLKrqqWkp6elpaCml5ujn6SmraKeo6KanaWiop+foaWenrC0sKSlnp+kqaevp6mgq6CiopqipJ2anqGmp6+psZWCe32Cem1zeHNncF1aXlxZUUVEQ01JQUQ9Rzo6NTk7Ojw8Ojs7Oz0/Oj01NDUxMjc4ODs8O0I8Pz46OzY6PTo7Pj0/QD87QUFBPj4/QkBBQkJFPjo1OkFCST9AQkA7TJqdnZ6fnZienZmampySoJWbnp+blZGRlsW+urbDvMbCvr/Ixbe1uLe2ubu0r7e2srWzt7m8u7a7u726w7u3vbe5wLu6uLi1xcHDw7u5s7S6wb2/x8C5wLy+xcS9vrmysK64t7/Dx8PEvb2/v8PDvr/HvLy/tLSutbW8vr/OzcvCt7K4uLi9ubuxtrLIwLu2tLGwt6yzqbCtrbO3r6uuqrG1r7Gvt7O6usC/tre2sru6wLWyrbO3rLC6r7KmoqWrrK+5s7KosK+xr6qiqKGkraitrLOun6inpqWmq6Sknqaqo6ayuLOrpZyfp6anrquqpbClpaWbpKOYn6exrLW4sLKOhHl/fHZsdXpwbmlbX19ZU1BBRUhHS0BEQ0g8PTY7OTk8Ozo6Ozo9Pzw9NTU2MTM2OTg8QT5AOz1AOzs5PD04Oj08QD46Oj49Pj09PkBCQkJBRD03NDU9REc9Q0I/PEWUnqCgoJyXmpiYlZmdmZ2fmp2bnJaRj5LDwMK9wrzEvLy7xbu3s7e2tru7s6CWtayvsrS0tLa4ucHAt725uLm2tb+ztLK4sbvBwMO3t62wtbi4uMK6tLu3u77Au7u8rq+us7K5wcLEw768v7u6uLbBwrW/urWur62wvcC5z8rJw7GvtbS0vbq+ubq7ysO7uravsL2xuK+ys7C3vbaur66wt7CsrLK2vbzEwrq9t7bAv8G3tbC2srGzurGxr6err6u2v7e1qbqztbmxp6uop7ausrG1uaisrK+qr7CqqKessayytr20saykqKuoqKusq6i2qaaonqadmKOuvLG7wbSmiYF8gnpzdnZ3bnFgX2VdW1RKPD4/RkY9RkNDOTo1Ozk5Pjw8Ojo8Pj4+Pjg4MzE1Nzg5Pj9BPzs6Pz08Oz09OTs8OTs6Nzs+PT1DQT8/QUJEQkE8ODU4PUNGPUREPzw/iZ2en52Xl5WUk5aZnpubmpuYlJ2Uio6Owb7Dwr6+vrm2usCxtbGzt7fCtbOrrbOoqa61r620trnDv7e6t7a2srTAtrK0uLO6wMHDubeysrK0sre+urO1sry6vLa6vrK0tLSwuL7DxsTAvb+5s6+yvLquu7Szpquorbq+uMvCv76sq7Cvs7q3ub67wMXBu7y3sLXEtb+0uLu0u8PCs7a2sbisqaWrsr23v7+7u7exvL28trGvq6uprbOvsLCrsLSpuMC2sqm0tbC3tq2spqu7s660uMKwsbG1sbK1saywsri4ubi+tLGzrqyxramvrqqyuK6trainoZ6ptr+4ur+wlol9gHxxdHd0dnJsXmJgW11OSEE/PUhDRk1EPzc3NTs6OT48PDk4PT47PT86ODMyNTc2OD8/Qj86OD4+PTw5PDk7Ozo8Ozs6PEA+QkI9QEE/QkI/PDs3OjxBRD5CQz8+QYqgm6GdlJiVlZKYmpyWm5WalY2bj4SIhru0vb+7vLm3s7y8rLOytLS2wLXAr7Kzqqqxt62pubO3wL27vLi2uraxwLq3ubi5u8HBxMO7u7a0tLC2ura0sqy8ubi1uMG6uLOxrLe8wcfDv7m6ta6lrLOxprCtqJ6gn6WttrXCt7a0pairqLC2s7K6tbu7u7W4trC1xLK+vL+8ubrFybq9vraxp6SeoamxrrW5trKxq7S3trGopp6gmaWmpKynq6y2qq+6sa2kpq2lq7GrrKmtuLawsrjBtrGxtbGvu7ayt7W1sry1urKwsbKutLKqrq2nuLWyta2uqqiosrq9wLa0qY6Ce393b3tvdXJuY1xmWFxdUk5NQT5KQkBKSUA2NjU7Nzg+Ojs4Nz4+PDs/OjkzMjc1NzU8PD48PDg+Pjw8OTk5Ozs7Pjs7OTw+P0E9PEJAPz9CQD47Njc6QERBQ0E/QUKJoJ2loJSWmJiVnqCcl5uYmZGMmYmDhoS1r7S7u7S1sLG2uq6wtLOvtbq1urC1s7GttrqurLyyuLm3u7+9ub7AtL+7vLq4vsK8wsrHvsC4ubaytLaztK+su7q4trnAw7aurqqytry9ubaysa2tn6Snp52jpp2WmZman6muuayrq5+lqKSrrq6nr6yvsbGtsa6usLmwtLy+uLm4x8W8vLu4qaKcmJufp6assq6zqaapqq6popqXl5GcmpijnqKir6ekrKaompqemqGnp6anqa+2squ0trCqsK+xqbm2sbWxrqy3s7avrquuq7S1ra+rq7GtsbKoraurs7W3ur2wq6GLeoJ5cnZzbXVpa11balRdXE9NSERGTEFGTUY4NjY1OjU6PTg7OTc8PTo7PTo5MjM2Nzc3Pjs9Pjo6Pz48PDw6Ojs5Oz47PTk8Pj1CPDtAP0A/QT8+OjU1OkBFQkRBQEJBiJ+ipqGYm56dmqWpmJudmpmUjJmHhoeGrq2uuLmxsqiur7iyq7CwqrK1ubm+tbK4tLm6tbm7tbWztbu8wLu+wLS/ubm6sbrDvMLKxb67v7+5tLSzsbGusLm5try4u7+ysrKusa65r6qrrayjqKGdnZ6XmKGVkpWXkJifqK6ko6Sgoqeio6mpoaanpaqtp6ynqKesq6yyu7SztLm6trK2ramgmpaWm52fq6yrr6Ojo6GpoJuTjo+Qk5KSmZaanaSloJ+ep5iVkpSYnqSjoaWqrK2iqaqppKmtrqW0sa6xraqprq+wraWmqqSos66trKmmpqmrpqqnq7Ksr7Oxq6mWgX+Bd3J4aHRzbmRUYGNXXFFOTEg/SFFETUM9ODg3NTo3PD46Ozw4OTw7Ozw7ODI0ODk3ODs7PDs4PD0+Oz08Ojk8Ojs9PTw6OkA9PDw7QD5CQEE/Pjk1ODs8RkFDRD9BQYijpqKjnqCfp6Coqpufm5yZmI6Xi42PjKqpqLGvsK2lp6ayr6mmq6CvsLu1vby4wMG+vLy8ua6tr7Kyurq3t7W1vLSvtKu2urjAxMG7try9uLKts7CvrK63trK0tK+qpJ6cnJyeqKifoKipn6GnlpuXl4+dk4+Qlo6Xm6SooKCioqKlpZ2jo6CepaCkrKSmqKSio6OrrLOuqa6urqeqraisoZyamJmYm6qoqquepaObo5yVkIyPj5CTkJaVlpifnp6amaaXk4+Slp2ioKWjpqSnoKKko6GhrKuksq2qrKyno6yuraufoaKkpK+srKmmo6KqpKqqpKmrpqmsq6agiHiDfHZ/eWJ3bG5cUWhUUE5HT01MQk9RQD47PjM5OjU7OT07Ojk9OTk8Ozw8OzkzNjk5Njo7Pz06ODs6Pjw6PDs5Oz07PDw9PjxAPT88ODtAQEE/Pz45NDk8N0FDQkQ9QEOOqqSjoqGinaulpqimoZ6dmZ2PmJWTkJWnpKGmqKmlpKChp6uhnKKbp6u1sry9wMLCwL7AuLSnpayqqLWysbCur7Knpq+jr661wbq1t7K3trK0q7K0rqqrr7Cys62lnpKYlI+ZoJ+ioJykpZ+eqJSblpeMl5GNkJeTmJ2iqp+fn6Cjpaicn6ChnKKfo6innKehoKSfrKisrKCpq6agpKimrKOdnp2Zl5qrpqmwo6WnnqCclZOQj5GRmJCWlZiWn5ibmZujmZeUlZqdoJ2nqKWgo6Oho56doKmqpa6upqipoaKqrqqnoaCio6msq6eppqShqaKlqaalpKKmpKijkn18gHV1fW1re2RoVVFjTUlIR05STkpORztEQD0yPzc0OTs+Ozk5Ozg6PDs7Ozk5NDg7ODc7Oz48Ojk8Oj07Ozw9OTw8PD49PUE+QEJAPTc6P0FCQEA/ODU1PDpAQ0BEPkFGlq6koqWeo6KpqKipqqWmnp2imJiZmZWbop6bnqOioKOgoZqgmJiXlqGorK62t7q5ure3u66ooKGpoaCtq6qmqaSpo6SupaystLy3rLKxr7Gtta+vs7Wqp62so5yZlI6RlpeZmZygo6KbnaWemqSXl5eWkJKRkZOal5ugpKqeoaGepqeqop+gp5+dn6SnqJ6jpp+qnaqtqq6nqLClo6Smp6ymoaShm5ier6iusqulqqqgmpiYmJWTlpqTlZWZlpqXl5ignpycl5uhmp6ao6eln6GioqOdm6Gmp6aoraOppZ6kp6mkpaWhpaSsrKmmq6eioKSjpKenoaCgpaKmoIl7gH12eHxkeHpgYlJVX0hJSUtTVElSUEw4PkI2Nz02NTs6PDw5Ozs4Ojw9Ojs4NjU3OjY5Pj0+PDk5PTk9PTw+PTs7PDo+PTw/Pz9APT03Oj5AQEA/Pzg2NT08PkFCRkBAR6CupKaroaOqrK6tp6ypqKCipp6bm56aoJyalZmfn5uen56WlJOXk5OcnqOorq2sq6uvqq+pn5eepZ6epaakoKKfpqCirqusrbWytqavtKupqrSxsLC4raehnJ2alJibmpGOkZWRjI+OlJminJejmZqXmJmUmZiWnZufpaapoKajnqeurqumorGjmqSmpqqioaqiqaSosquxsqu5qKarp6urqaysp6Cgo7GtsbG0qbGvopmcnZ6hmJubmpiZm5SVmpaYnKWhoJqjoZqdmZ+kop6gn6KmnZulpqWkpKijp6OepqOinqaloqWlqKykpq2noJ2dn56gpaGenqWgppmBe4F8dXZzaIJsZVxTWllNUUpOTlVMUkxBNz5CNzg9NzY6PDw9Ojw5ODo7PDo7OTc2Oj01OTw7QD03ODs3PTs9PT06Ozw4Pj09QD5BPj4+ODg8P0BAPT83NTg9Pj1BQEZAQUihqqCrq6GkqquwramtqaelpaWkoKGfnqWXl5SYmZ6YnJ2blo+VmZKSnJihnaqip6Cep6Gln5ySnKKbn6Gjnp2gn6Ogoq+urK+xrLanrbGtpqawrq2ssKegn6Kgl5GUnKGcmZiSk5+doqSbnpuWn5qfl5uinqWhnqSfpKitraisqKSstLe2sKe0rKKtraOvpaSmoamorrWzsr23vrCssa6tqaq0sbCoq6iytbezt6yxtKOgnaWgrKGhoqCgmpiWlZ+bm5ikoaCepKGgnpqcpaCfnZyhqJ+fp6meoaOkoKagnqehn5ymo5+ipaOooKmrpZ+dnZudmqainpyjnqeQgYJ/fHh1aXd1XW1aUmBIUVVIRlVWSkJNRz1KSDhFPDY3Oz49PDo8OTg6Ojs6PDk2Njo8Nzs+PT8+OTc9OT47PEA8OkA6OkA/O0A+QUA9PDk3Oj5APzo+NzU4PT0/QUBEQEJGnKueqamipamprqimqqWmp6aoqqGlpKOmkpOVmJacmpqcmpWTmZuOk56ZqJ2unqeenKGdnpqZkpmenKKioKCdop+fnp+pq6esqaq0q6utq6Wlq6iqrKqln56ZkpKUmJmWlpaMiIuOlZ2dnZ2elp6apqCgqKWxqqeuo6uttrC0srGutri9wLqttbSwt7CutKmmpKWsqbmztbvDvMPBtrq2q6+xube8r7OwtcG8t72zs7Whq6KpqLKpq6inqJqZnZqqpp+Zp6Cfn6eopaSenaqiop6bn6igpaetmZ+jnp6nnqCmnpycoqGbo6KhnZympaWkn6KYnJukn6CboJyjiYWEfnZxbWl3bWhtXFhbQlZNSkdNR0JGTTw+TD00PDk2Oj0/PDs6Ojg4PDk6Ozs8NTQ6PDg5Pj4/Pjg4Pzk8Oz0/Oz1BPTo/PjxAPj8+Pz08Njs/QT07Pzg1ODw8QERBREFCQ5WqoKapo6mqqKmjoamgpqinrK6lqaWpqpSSl5mUmpqanJiYmZyamJqqoLGit6OwpqCenZ2XmJaZnpucpJ+fnaSdmp2cpKKko6Kqr6ynqaOgoayurqqrpqCenqGjnp6em52clJOVlJ6emJSGnZqhm6ukq7KwubKysbKxur28vLm2uMO+v8K/trq6wMS5vbusr6exrbHCtrjCxsDIysDKv7C5ub25wr64tLvFw7zCu7ezqbKtqrO1r7Ouqq6jnauntrGsoq+loKOvsa2wpKSvo6GgmqGnoaSqqpmdoJmao6CmqKGcnqKemaSenpiYo6KhpJ6mmZuipJ6fm5ubnIeFgXt0cWtrdXJwaFdcUUVUSERJT0g+RUEzRUg5NTs9Njs8Pzw8Ojo4OTw4OTs4Ojo4Ozw3Oz49Pj02OEA5Ozs9QDw9QDk3PD07Pj0+PUI+Pjc6QUA+PD45NTg9Oz1DP0FDQkGRqqGlqqelqqimn6KnnKasp7Gyq62jqayVkpWalJecoqGbnqCinJ+psqu7sr+rr6ylnqChnZyYm5+gm6Cfn5elnZWbm5+anpyfpaannaCgq7Gup6Sko6CepaulnpeclJGZnZiUjIqGiIZ5bYigpKKrrLS8tsO+vrO7wcPCxcC/wsbGxcPIwcDFyM3QyMvDsre1vrK+xbu+zM3FzMzM0se+v8DCvcfGwrfDycjCwMW+ubS5urW6t7C1sqq6sa67tr67uqq3rauquLq0vK6tuKKlop6npaKjqaaam5+Ymp2nqqegoaGkmJSjlpSZkZydn6SeqJ+en6KdmJmUmJSIhH16cmtkaW94amVaW0ZKTEREU0xEQkQ3Oj87NTQ5OTc5PT48PDs7OD48Njo9OTw9OTw9Ojs9Pj4+NztBOj45PT45PT44Nzs6Ojs/Pz1CPj83OkFAPTw9ODY2PDo9QT9BQUE+kqugp66ooqulpKKipaGlqquwsq2upKmmlJWVmpaUm6SmnaGqp6KrrLy8v8PBs7K4p6Ghq6qinZ6hop6cm6CSn5+Qlp+ZkpqWnZuZo6Gvs6mhmp2dn5+al5iXkoyPlpeTjo2Qi4KDgndzcW5wj6atrrS5xbvNx8u/wszOzczIydHMzczHycXGzNDS1c7Tyb3Av8O7xsXIxdLTzNPQ09PMysLFxsbKx86/ydDLxsTGxMG7w8C+vr61vbOtvr/Cw8bEx8SuvriyuLzEwcG6vLy1rqenraigoqmlmpagmpmdqKupo6SknpePm4uQmYmVmJugn6OdnZeempOTi5WPhYB5dHNlYmdyb2ZeWllDTkxDRVBJREJANTU1ODlCPTY4OkE+Ozs+PDk+PTc6PTk6PDg8PDw7Pz8+PD0+Qzw7OkA9Ojs6Ojg4ODk7QT48QD8+ODtBQTs7Pjc4Njo8PkI+Q0FAPpOvn6ivpqiro6KloKampKuoq62qrqKqo5Kcl5ebmJujrJ6frqalsarFxszOzb+wwqmlqK2tqqGdo5+cnZqpk5mhkI6gk42UkpeZpLGxq6SgnaCbmZeUk5SWkZCPjIeEg4iHg4CBgYB5cnJvbHmktrq5vsvB09LTyM3O0dPR0tHQ0dHNzs7Qxc7U1djS183Gx8nMw8XKz8rT19HX0tTV09PIzMfNzcnSzM7TzcTHycrBxcvGyMjFvsKzs8fEy8rKzsXKv76/vMHHxMzMyMm/w7+tsLOonqKqo5qTnpyYnqaprKSlppaXipWFkZSHkpKSmZualpiQm5WQjIaRi396cnV1Z2JndmlkVldRRE1GQElRQj1CPDoyM0A8RDw3OTxCPTw9Pzs7Pj05Oj48Oz44Ojk5Oj86Pj1APkA8Pjs+Ozk9PTw5Njo6Pj08PEA/Pjk6QEE6OT44Ojo6Oz4+PEE/QT6QrKKiqaanqKSfop2qqKOso6OnpqyiqZ+To5iWn56dpK6bn7CrqKyxyc3U18/Gu8esrbS4rK6jn6Sjn6CkrJuWqZaNl42MjZemsK6lnZ6doaWhnpuVlJaUinx3cGtlYmhxb3F7hYqAdnBucXRwhbPCvsXR0dfW1tLWzdTW19TT0dPU1NLP0cPQ09bX1dbSy8nO0cvGzdLK0tXW2dXX09bYztLJztHMz9DM0s+/x8bKw8zMy87PxcbHtr/Jv9LMy8/Fyci/w8LIzszP0M/MysfNuLe7qJ+lq6efmJ6jnp2qpa2pqKiSlYiQhIyRho2MiJOVmZCWjJiSj4aHjIR8d3N2b2NgZXJiXVJcSUpGQUVIST47QDg9NDU4NTo3Njo8QD07Pjw7OUA7OTo8Ozs8Nz09Ozo+Oz08Pjw/Ojo8Ozs5Oz89OTU7PD48PD0/Pz46O0BCOzk/OTg7PT0+PzxBQEQ8hqugnKegp6Oim6CbqaSlqaCfoaGmn6ifmKSim6mmoqarmqOwsamotdDU19rSx8bLtLbCxrK2qaKlpqGiq7WnmrGhlpWMkKatq5yVmKGdm6Gin5ydm5WKd2ljYV9fX19eX2BeYmx1c3Fwb2xycXWSxMfG1NXW19fT1s/V1NrU1M/P1dTU0dHM0c7T19bT1dDP0tPRydPRyNDY19jR19LX2dXWzM7Pyc3Ry87Pv8XCx8XOzdDQ0cjLzMDKy8XTzsvOyMTJxsbIzMrT09HVz9LM0sG5xbGlqLWup5qorKWdsqiws6ysk4+TjoiLjoOPi4SQjpmNk4+Zj4+ChYx7enFzdG1hY2ltX1ZQX0pKQkZDUU0/PD40NDo9NTI3NTU8PEA8Ozw6OTpAOjg7Oj46PTg+Ojo8QD08OTs9Pzk6Pz07PTw9PTo2PD0/QD08PT0+OjxAQjs5PDc0Oj48Pz89RkFEPYKknKClnaWlo5mcnaSeo6OfnZ+doJqnnpyhqZ+vrqqqrJ6mrrioq7fY1NXZ2dHO0MC8zMm3wK+nq6mjpLG2s6S2qp+doaqpoZiWmJqbnaGemp2elH5yZWNiX19hX19hYF9gYF9gZm1wcG5rb3J3d5vMwNLV09jY1tnR0tLXz9POy9PN1dTRys/M09bS0dbN0NXV0cbR1MrR1NXWztLQ2NjY18vIzcPIzszJy7/Iv8jJzc3PytDNzsvOzsfKz9DKzsrCycbJzMrM0dLM09HQz8/Kvci5sK27uLWqtrCtqLits7+7sZqPn5SRjo2IjpCFkY2ZjJGRlY6RgIWIeXZvcG5rYmVucGFXXFpJRkZETFdFO0A8MzQ8PTg2ODU1Oz5APDk8PDg8Pjk8QDtAOj04Pjk4Oj88PTg7PkI6Oj08OkE9PTw6Nj09P0A9PDs9Pjg7QEE9Ojw4ODs+PD4+OkVCRT6Bn5mlp6Cfo6eam5+cl56eoZqdmpyappufpKeeuLa1ta2lra6+tLHA2dLX2tzWz83Lw9PQwsKyq62urKazsbirsbapo5+clpSXm56fn52UlpeViWxeXl5hZGJgYGFhYGBhXl9fXl1ibXJvb3N0dnZ5pL7L1dHW1NPY1s7O1MvNzsXOytLSz8bOzc3UzM7TzcrX1dDM0dPLzNDR08rO0dXS1dXKwMnBxczCyMnCzMLFyMnKzsrMzM/N08vFx8/Mx8fKxMbAxcnLzdDRxs/Ozc3Mz8XHwLe5vcPDvcO5srO+sbzExLWqmKWhmZaRlZWSi5SNmpGUlI+PlIKJhXhwcWtuaGBgcWhYWGhWTUdMSVBQQjtEPjs2Nzo4OTo1Nz09QDs6PD05PD05PT06Pjo8ODs9OTtAPD47Pj5BPDk9Pj1CPTs3NzY/PDw/PDw7PDw4O0FAPDo8OTs7Ozw9QTpFQUU+hJ6bqK2epKSqnJ6fmJKXm5+am56ZmaKVoamppcXDwb+7tbKxx8O5y9XW2drb2M3Mz8nW1sXEuLK2qqSurbi7wcXJoZeOjZiWkJOSkZaWlpCMfGViYmJgXV5hY2JgX2BgYWFgX11bXWdycXFyc3FtcnmkxtPPy9DP1NXJxcnJxsa/w8bPzsfFx83K0cjLzs3G0dLPzszUysfLzs/Hx8/Sy9DPxbrEvsbJvMLGyM7EwsfAxs3Hw8vJy8/Hw8PPyMbBxsfDvsDHy8vLzsLKy8jHy8/Exce7x8PIyMLPwL28v7DByse6vaqxsqelnaKcmJCbkKSZl5mRlZiJj4J3bnRkbGBeZnFhW1dgR0hIR0lNVEc/Sj02NDM1NT08NDg9PT06Oz08OTo7OT89OTw7PDg6PDo6QD1APD09Pjw6Qz48Pz04ODk6QD4/Pjw7Ozs7ODo+Pzw7Ojc5PD49Oz49RkFDPYOgm6qupa6qq5qdoJeUjpedmpmgmpqcm6WzsazJzcrIxL69us3NxtDV1dna29jQytDQ0tTKxbq+vrCot6rF3dbHsZGOjpaQhoOEhIJ+hYV/dGBbXl5eYF5gY2RjX11dXl9gYF9bWlxga3Jyb29rbG9vfbjRyMnKz8vNxLrAw7u7urq+yMbCw8DDx8rJyMrHwcXMxsjLzcnEwsvJwsLL0MTLyL+5wbrFx72/xs/Kw7/DusnHyLrHxsTKwL3By8bFw73FvLy/w8TLxMS8v8nCxcfRxcDIv8rKxsjG0MPDxsOvxMvHxMq3v7y6tKmspaWYn5iso6GlmqOgm5R7dnN0ZmpbYW5tWltYUURMRkJHRExERlNANTQzMzQ/PDM6PDw7OTw8PDg7PTtBPTo8Ojs3Oz05Oz07PTs6OD4+PEI+Oz88OTk7Pz07QD48Ozk5OTk6Oz06PDo2OTw+PDs+O0NCRD5/pZypsqm0rrCdnp6YnImUm5man6Kfmp2ov7i8ys/RzMfCw8fNz87N1dDW2djZ0M3Uzs/Qy8S4xsG2tbyv2MN1fZKMk5eHe4CFhoB2eHVycF9aW11gYWJjZGRlZGBcXF1dX15gW1laXGJvcm9raWxwb3OPxrzJxczAxsKxtrqysrOyscK8vLu5uMDBwcW+vbm9v7nEysXGwr3GwLi7xMm/wsm7t7q6xcK+vMHNwsa+vbXAvcO6vMa7wrmzvMXDwsK2v7W1vr+6y8O8tbrIur+9y8PBxcLGyMbIxtDGwszIssfKw87NwcXCv72yt7Czp6ioubGlrbCrrayUeXZ3amVoYGhvY1ZeWUpFSkZIS0FGQkVJQDk6NjQ4ODUzOzo7PDk8PDs5Ozk6QD46Ojw6Nzo7Nzo7Oz88OjxAPUA/PT8/Oz07O0A8Pj4+Ojk5ODk3ODo8PDw7OTo8Pjs7PjpAQEU+fqygrLWqt7SyoZ6fl5qNlJaan52mop2et8bCxMjO0svKysfNzs/SydHG1tXW2M7M0MjNyMrFvsrBsrW6utNwVo6OiouFeYCGhoB+hHx0dWRcXF1eYGBiY2JiZWViXV1bXF5cXl1aW11daHNxbWdnbnByeZ29zMDDusG4rrCwp6qtrKe4tLe0s7KzurW9sbewta+yu8K8wcS8v7u1srq+wLjHuLS7tcDCvLe9xsDDu7Susra6vrPEt7u1q7i8vcC9sLq1r7a6ssW8tq67v7S2tMW8vsPFwMPFxsjLxsDGxrvIy7/PysfDxsHDt8O+vba5vsa/rLW6tbe2jnh0eGdnZWJrbl5WXmBGS0hISkZCQ0FFRT88OjU2NTYzMzs6Oz06Ozs6Oz44PEE9PDo7ODc5OTk7PDo+Ozk+Pz1APz5CQD1AOjo+Oz89PTk6Ojo4NTY7PT48PDo7OT49OT86PEBAPIi3pauzsby8sa2foJmUlJiXnqujr6qnpMbLzsjGyc7M0M3OycvJzMrLxtHP09HPyMvGysbEwL3PvbO5vb25WH+ShomJe3l+hoZ3eIJ9dGheXV1dX2BfYGRhXmNlY19fXFteXF1eWltbXV9scG1oZmptbnJ8pMe/ubi1sKysp56iqqeeq6yzramrqbOttrCyqa6mrLK8urbDubq6saq1ubu0wrqwv7C9vLu1u8e5wratqqiwscC1uLyvsKexs7S7vKuttaWutq66sbCqua+tu667uLu/v725wr/Hw8XBvMbByMu4xcfFv8fDw7rExsK7xcnMy7O5wry6sohydnZraWFibGhZWFdbQUxLTUlFQUM/RkE6OTo5OTU4NTQ6Ojk7PD07Ojs+ODtAPD05Ojc5Pjk7PDo4Ozs6Pj45QT0/QD88Pjo7PDo9PDw4OTg5NzY4PDw9Ozw6Ojs+PTs/Ozs+QDyKwKuouLe5w62zqZ2ZlJaZoZymsLWxt6bGz9LMxMbBxdDIz8LEx8HGxsXFzMTLzMLEwcjBury7yre0vL23rXeTiY+QfHl+ioV6e4SBd25eXV1dXV9gX19kY2JjY2JgX15bW1paXVpaWlpdZG5vaGZnaWtucoGtubC1rqalp6eaoKSgmpylq66jp6KrqayqsKOmn6qttbaxvbmvuK+orri0tLy4s7yut7m0sbvBscGupamirLGys6e8qquoq6yttLSmqK6hpK6psqWnqK6lqLessLK3ubq7sby9vr7Ev7XBwcfIt7/AxbfEwr+7v8TDvsTIzMq/vsPAwKmGcnRyamldYW9kV1ZYUEhaUlNLRkZFPj9AOjc4OTc3NjQzNzo5OTo8Ozs8PDc7PTs7Ozw4OT44PTs8Njo9Oz89N0E+P0A/Ojw8Oj05Ojs6Nzc3ODg3OTw7PDs5Ozo8OTc5Pjw+P0E7jMKvrry3usSwtrCbmZWcmKqpsLGztb2vxtHQzcTIu7vMw8zAvMq5wMbAvMy6w8fFur3Evrq3vca5trm7r7KShImNgXt+gH54dH98c3dmX11cXF5fYF5fY2NhYmBgX15dXFpYWVtbWVhaXF9ma2ZlZ2Voa29yhaqlrKagnKGllJ6km5eRoaOqo6KfpaWnpKyfnZukpqyyr7a3p7Csp6q0q7S5sLa0rLa4sa+6ubG3pJ+jn6exp6uouaqkpqeop7KtoKemnpukpqyen6ekn6Cxra2ssrSytLC1vLa7wcGyur7DwbK5usKzwL2/tbi7vb68wsfEwsO+v8Ogg3dwa2FlX2tvYFVZX0hOaE9USEVKRjw9Pz06Ozs4MjU1MzY5OTk7OTo6PDo3PD88PDs8ODg8OTw6Ozc4Ojo8OTg+Oj89OTg8Ojs9Ojc2NzY3Nzg2NjY7Ojo7OTo7PDg1OTw6Pj5AO43Itba9uLrBu761oJ6VnqGmurars7O7s8XQyczDx7m4ycLOwbrLub3Iu7fIu7fExrO+xby3sLnAu7Gzt7CjhYeHgn15dnRvbWtqanFpX2BdXFxdX2BfYWNiYGBgYF1cW1xcWFlYWFhWWFtdXmRjYmVnZ2dqbW+Inamgl5WaoZabopiVjZ6hoqabn5+jpaGnnpqim5+qsK2xtaKpqqmrrKS1uK23r6yytK6ytK6wqp+dnqOisqSlqbitoaamn6isq5mfoJ6ZnZ+lmpmjnJudr6mrp6qrrK2wsrivuLm7sLa7u7qrsrK5sr20trGxtbS/tb3AvcPBurq9l4N6cmtfZV5kZFhUWF5JV11LUEdJSkZBPD8/QDs/PDA0NTM2Ojs5Ozg5OTw8Nz4/Oz07Ozg4PDg5ODw3ODo7Ozo7Pzo9Ozc4PDo9PDc0Nzc2NzU3NDY2Ozc5Ojs6ODo5ODo7OTo8PzuJyba4vru3wcHBtKSkmZukpsCyr7astLfG0MnJwce8vMXF0MC8yru7wbu2xbi1wcGzwsS8raq1ureosbOpi4aIgHlzbnBua2JeYmZmXV1eXV1dXF1fYGFiY2NiYV9cW1taW1lYV1dXV1hYWFteYmRkZWZmaGlrco2onZSUlJuYm6GWlpCcoaGonZucpaahpJufoJqYra6trrKgpaKtq6ehtbCxsaynrrKnubOmtaGinpqjoq2ioam1qqKjpp2lpqOWmJ6XmJqdn5mXnZycm6yhq6ajpKatq7OzqrSwsqqyubSvqa+ysrK3s62prK6xt7C6trm9v7aysZSFeXVlXmVeW1lWU1pVS1tRTElFSEtJQj0/QUFAQDoyNDUyNDk5ODk7OTo9PDY9Pzs8Pjs3Ozs3Nzc+Njo+Ozo4Oj07PD06Ozw6PTs4Nzk3NDY1NTQ2Nzg1Ojo4Ojk5PDg3Ojg5PkA6gci9uL2/tr69v7OdpaOYpbHCtba9rbS4w83JyMHGuMLByNC6w8bAtry9tsO6tr/Btbu/u6qmsbuxqLKvm32FhYB5cHF0cWhmZGllY1xcW1tdXVxbXmBhXl9fYF5cW1pcWllYVldXVlhXWFhWV2FkZWNkZWRkaGp2opyUlI+Ulpefl5mUmJ+eoZyWoaGoo5+dqJyamqqmr7Crm6Ojt6qgn66otqmmpqywo7ewo7agopuYmKqmoZusuK+ioaScoZ+gk5WhlJaWm5iXlpeclJ+pnamjoZ2jqqqwrqi0q6qmrbKwpaqusrGvsK6up6ensq6xtK+8tLm2rqOUgXl1ZF5hVllXU1JUS01eTFBLR0dMS0U8QD48Qjw7NzY1MzQ5ODg5OTo5Pjo4Pj47PTw8Nz49Njc2PTc7PTs5Nzk7Ozw+OTk6Ozo4Njc2NTQ1MzEwNDU2Nzk6ODo5Ojo3Ojs5OT1AOnbAvLS5wrG+uLyunqeno6q7wL3Aua60uMLNyMfExb7HusrNtcTFxbG/wLnAwbrAwLm6vbeoqLG7pqmipYmBfnhyamxydHBpaGVkZ2JcXFpZWlxcXF1eXVxbXF5cW1xZW1xaWFZXV1ZXWFdXV1VbY2NiYmNiY2RmaoGWk5WLkZSTm5mclpaboJyflaCfpqWkpaaenJ+kn6qvpp+io7aooKGiqLOhpaekr6WwrKu0nqCdlZSpoaGUrLGwnqKinZ6Ym5OLoZSRk5eYkpeXmJadppumoaKZo6Wlq6SlsKelo6urraWorq+uq6iqqrOlpquvtLGuvLWxr6+gknp2cmRhXFpdWE5MUUdSYU1WUE9KTU9FQkQ/OT02OTo3NjQ1OTk7OTg4Nzs4OT0+Oz47PDY5Ojc7Njs3Ozs6ODU6Ozo7OzY8Ozg4NDY4NjMzMjEuLzI1NTY7Ojg7Nzg3Njw7Ojs7QTh4u7uxtb2wu7K3rJ6kp623u7zBxbqxubXFysvBxMfHybjIxrXFwsmvurzCvMPAwb28t7q2pqeytp6iipmHgHdvZGJnaWhmaGpnam1gXVxbWlpZWlxdXFtcXl9cWllbWVlaW1dVWFdUVFdVU1RSVWBgX2BhX2BhY2RpgZSTiZGOlJKTnJSVlqOZoJacoKWhraWjo6KjoZuqqqWZnqWxqaCgnaSqnaehnqysqaitrKKhoZSXo5uckKupsJufop6el5iTip6SjZKTlY+YmJKboaKcpKChlaChpKabo6uloqSqo6uupK6xqaalpqa0pqmorbO1tLm6r6qsnotycG9gW1dWVVFGUU9IWlxPUklUS1NMRUdJQzg7Oz08ODY2Nzo5Ozo5NzY5Nzc6Ozo9PDw3Ozw4PjU5ODo4ODY1OTo7PDk3Pzw5Njc4NDUyMTIxLi4xNDI2Ojg2Ojg1OTg5ODo7OUA5e7W0rbS7srCssq2dp6evubmzwMi6tcCvxsnOu8LLzcm3y7+0wMfMsLa9yLvCx8S9v7e6taWrsK6dmoeOg3x1aWpqbWhqbG5ra21lXVxcW1tcWlhaXVtbXmBgXFhYWllYV1hXVFZWVVRVVVJTT1FZXVxdXl5fX19iZG2Oj4SRho+Rj5mTlJKcmqKcm6CnqKqnqqWopKOYpK6klJmlr6mfm5iaoJ6umZuqs5+lpp6io6CUk5uWlZKoqa2anKChoJqUkIyZjouQjJKMlpSQnaGgo5ybopWboKKgl6Koo6Koq6Crr6Stt6Wjo6Ksramoq6+zuLK9tbOrr5iDcnJoW1hZU1VSRVlMUFxZTVRPUExQUklOSUI8Pz9BPz02NTc5OTw8OTg3Ojc5Ojs8PT47Nzs7Oj02Nzo7ODk3Njk4OTo2Oj05OTU3NzU3MTE0MS0rLzQzNDk4ODo6ODo6NzQ4PTg/OX6zrqiztq6pqK+tm6morLe2rLzKu7a/rMzHxrnCz9DJtca+ur7Gy7WxvcW9w8bEvcGzua+mq6+rnpeGgXd4b25pbm5ucWdnaWdkXVpbW1tbXFtZWltcXF5fX1xYWFlYV1hXVlVUU1VWVVVUU05QUVlaWlpdXFxeX2Bkfo2Bi3+LkIqSjZeRl5mioJufqqmmraqmr6KnmZ+soJWWpKinnZePjpmdrpaXp6qZn52TpaCdkZCSkpKVp6qkmZmanZ2WjYyLlIaIjYOQi5KUkKCeoKOXlZ+VmqCinZObpaWnqKigsbCmsLynoKOstKutp7C0sLm1wLGtsauQfXByYlZUVU5SSUdWUVNSTExYTUpMTlJHTUtBQ0ZEQz5ANzU4ODk7OTo3Ojo3PD06O0A+Ojk7OTo/NzU5Ojk4NzY5NTg3Nzk7ODU1NzY2NjEzMjAtKi4xMDI4Nzc7OTk7ODk0ODs4QDh/s62msbeqpqKwq52qp6mysaS2xrS5urPLxrq8w8vRzLO5ur7AxMe2tLe9s7u8xL7CsbSusa6xrJyiiGtobm9yb3FrcGtkZmdlXlpZWllaWlpbWlpaXFxdXFpYWFhZWVdYV1VVVFJTVVNWVVJOTk5SV1hZWVlZXFxdYWqAen91iY6HkImYiZSUl5uZnaibn6qkpKqcp5igpZuSj56impeWhIORmqOPk6KclZWWh6GampOLjoqPmaOnnJWVl5uQkoeUjoyBi42AkIqSkpGhmp+hlZOYmJWipZiMmaSmqKahoLSyp7K3oZ2it6yqraSysqa1vLWsq7GjiHhybV1OUFFMT0NOTk5QS0ZOTktKTk1RSU1KQUdLSEhDPjg1ODg4OTo7Njk6Njg7OTk+PDg6Pjk7Pzg3ODk6ODg2ODU3Njg4OTc0NTc3ODIwMzAxKyktLzEyNzc2Ojk5OTk4NDk4OEE3d7anpLawpKekqaWgqaWks6qissO1tbKzx8e4u8TKzce1r7y/uLzEs7OutqKttcS6u6+qrLSvr6CXqH1eYGdzcXZxam5pZmhoal9YWVhYWFlZWVpaWVtbXFxZWFhXWVlYVVZSU1JQUVRRU1VRTk1LTFNXV1ZYWFlYW11hb3N2cYWIgoeAkYOOipSRk52gjpqboqCjmKSWoZuVjYeYmoxzjYJ9jZaWhZCZkJONjnqYjpyMgop/iZifop6Qk5iWhI6Ck35+dImOepCGkpCQnZqZmpCVj52OoqOOiZqgoaSjm6K0r6yvrJ+YpbmmpbChsK6csLuqqa+qmYF2cmJWTFFPUE1DU05MUU1DUFBISU5TTUhKSkRKTEVKSz03NDk4ODg7OzY5Ozc6PDk6Ojs3OT85PkA3OTo8ODk3NjQ0NDU4NzQzMTI0ODUvMDEwMikoLC0xMjc2NDc4OTo6NjU6ODdBN3e3oqO0qKWlqKOmpaamprOnpbTAuLC0sMrGubrCz8e/ta+9w6+xx7Ktp6yVpK6/uLGwn6etrauWlaJyV1ZfaGdpaGluY2poZ2JcWFhYWFhZWVlZWVlaW1tbWVlZVldXV1NUUE5QTk9PUFNUUU1NSkhOU1NTVFVVV1lbXWlscm1/hXx0Tlhyj4KXho2cl4qTkJ6XnJWUlpSOlol/k4lfO1dve4uTiX+LkYyPhYZyioSWgXmCeoWTnZSDlY6Qj4KGfZJ4cW+FjX6JgJCNj5eZmJOKj4iciJ6Xh4eWnpqhoJenr6itqaifl620oqatmKyrmKe0oqmto5J9cW1fWk5TUVZMRFRKUE1MRk9PSkZMUU1LUEpJTVBGSUg9NzU5OTk5OTo3Ojs6Pj44Oj09Njo/OD4/NTg5Ozc5Njc1MzMzNzYwLi0vMzQ0MTEwLy8oKSsrLTM4NTQ3Nzk8Ojc5Ozg2QTl4t6CjrqGmpqqgp6mnoqmwqKe0wbmxtbDJw7m0v8/AurGxuMSrrsmup6Oehpuiuq2nqJampaShl4+WaVFNUlZaWlddXmJnY19ZV1dXWFhYWVpZWFlYWVpaWllYWFZXV1VTUk5MS0hHYlxNT1JNS0hGSE5RUU1QUlRWWFpgbW9pe4J0UEJAf5WRkX2JlIyEio2ajJaVipKIhpWGeYh/YEpRbniKkYR8hIyJhH9/bn5/lHd1dniEjZlwUY2IioZ7fniUdmd3hYh+ioiVio2QkpaLg4mHlISajIGEkpuWnpyUpKOnqaWjnpuwq6GkpJCmqpahqpyipqiIdGtlXVtIUVFTTElVTVNJTExQSUhGS09MTVRLUVFPRklDPDc2OTo4Ojs7ODo7OD4/OTk+PTc7PDY7OzQ3ODs2Nzc1MzQ0Njk2LzMvLjExNTIyMS8sJykrKiw0ODMzOTc5Ojk5Ojo6Oj85draco6edn6Guoaeopaeor6yqtry2uLazwry3qLrJubepqre4rbbAqqKbk4OPmbKfopqNoJaZlJCKjGRNTE5OT0xNUVdbXFpYWlVVVlZWV1lZWFhZWFhZWVlaWFhWVldVU1BNSkVAQJtrc3NJTUtERERJTk9oWU5RU1RVWm6DdHd+amldVY+JlIl0f4aBe4WMkoGSmYuPe4aPf3V/eHNudXB0jY2BeX2JqoV5emh2e45wcm14gIqMknh6gHuAdnNykndndYSEhIR6lYmIioyLgH+Eiox/lIN7gI+YlJuVkZ+dqJ6foJ6gqaWfnZiMp6SToKCWnZ6kf3FnYFxcSlZPUUdLWFJPSkxNUkpKSk1QSExRTFJUTUVIQTw3ODs5OT49Ojs8OThAPzo6Pj03PT03OTkzNzc5NTY3NTI1MjU3Mi8yLiwuLzIwMC8tKygoKS4xMjYyMTk4Nzk4Nzc2Ojw8N3aumKOhmJyes6mvqaWsrLCxqr20sry4trq1sqC3u7OrnZ+tq6y1s6WelpKYhpSklp2Mg5eJj4mFhYJkS0lKSUdGSEhQVFRUV1dTVFVVVVZXV1dYWFhYWFhYWVlXV1VWVVNQS0Y+OTNOPH6eTUhKREA9QURqlH5MT1FSU1ZedYN9eWd3jZeYjo99Z3mBdnh/iY98hJiSgXKHj3x2e29rfq18c5CKf3uGkoB9f3RmdnyFbG9oc3yJjIeAbHlxfXBtdY9xaHGAfY5wQ4qEgoOFfnd3eouFfYt6dX6Oko+YipKam6OXmZ2bnZ6inZaNiqSbj52XjpaYjnVta2VhWVdYVFFKUlVUT1BOUVZLTktOT0pRT0lPT0tGRDw7Nzk7Ojo/PTk8Ojk5Pz87ODw9Nzw5OTk5MjY2ODU2NjMzNjIxMjI0LiwsLS4uLTAtKyonJyouMTM2Mi84NzY5NjY1Mjc5OTV5ppefnpagpq+srqunqbCvsay8uKy7vrmzraibsaitnJCXnqesp6SbnZOIln6OlZKVgHyKeoWAfn5/YkpHSEZCQENESUxMTVFSUFFTVVRUVVZXV1dYV1lZWVlZWVlWVlRTUUtENzhmNzA/qGlOSEM9OzpEioV6WkpOUFFUWF5lcHJtiKeqwH51eWJ7eG98eYiPeXyLhW9tjJF4c3hqan+CcpaRi4F9ln9JkphuaHd+gWxpY2x5hZCShmtzbHxucnuGaG1wfnONiIOFen1+e3ZvdHSFgnmBd3B8joyKk4OWl5iakJOWl5mXnpeMg4mfkYqSjIaQln1saG1ubVdVV1RRUVlPU1VUVFhVTU5ITUpNTktDSU5HRUA6ODk7OTk6Pjw5PDs6Oj0+Ojg6Ozk/ODY4NzI3NTc1NTQxNDQyLzAyNCorKiotListKigqKCcsLTEyNTAsNTU2NzQ4NUhBODk1d5mRm5manqStr6Ktqqi1r66stL+rvMK/pqOalaWYno6FjJaipJualJePdpF+hYuQj3x4fnR9eHR3eWRPRUdEQDw+PkFGR0dLS0tNUFJSUlRUVFRWVldXWFlaWVlaV1ZUU1BMRTFAmjMganJBmW87PDk1PICChl9JTU9PUldaUllcYKeIYpppdHplfnBtf3qLiHWBiIZ0bJmRdHN7amudjkx5hJKJhI5nMXaGc2x+fYN0ZmV0foSEhYBmaWx1a3B/fGdwcHtuko2Oe3N9fHFwbnVtgn53eXRpeYmCiImDlpOSkIuNkZSVj5eOgHmIl4iGiYZ/kId1aWluZ2NXUVlXWFlbTVBVVlpZTklJRUpKSEdCQUZEQ0c9OTk4Ozk6OTw6OTs6OjpAPDk6PDk4Pjc4NzcxNTI0NDUzMzY0NTAzMS4qKispLCwrKykoKycpLCwyMjYtKzU3NzU0NzhpTzg7NW6SiJmRmpakqK2esp6muq6rsrDCsrvDx5uXj5SZi46GeoWRmpaPko6SiXSKhHeLj4x/dnd1eHZveHJoVUZJRD88Ozk6P0BBRERFR0pMT1FRUVFSU1RVVlZYWlpZWFZVVFNQS0U4MC9cYLNHOVhQOzk0NDGWuotITE1PUFFWTEFJUUlir7OgcXx4bX1tcYOBhYF5hIaGeXKglHR4gHN1lIc1cZ2onY6hoYSihHZwhnyHfHOMrY2IgGhmYmlucm1wg3Vpb1h1b46akXZsf3p8bXFtcH96c3VtYnaEf4aAhZCRiouJkYuRjIuPg3V4i4+AfoKAfY94cG5ual5aW11bWVhgX1NOW1pZWExISkZKRz9DQUJHP0NEPTs5Nz07Ojs7OTo5OTs6Pzw4OD06ODs2NjY1MTEyMTM1MzQ3NTUzMS4vLCwrKSopKSoqKikoKikrLzNETTIxNjY2NDM8dlI3PTdikoGSiJaRnaSnnq+VpbSorbGuwbO6wcaXkIyUkIGJfW6CkZOKhIuIkIh2hIVvmIqMf3l7e3F7dHxrb19KUEc+QDc0NTg7Ozw9PkBCRUlMTExNTlBRUlVVVldYWVhWVVRTUExFPDUqnUtbQC1nSTk0Lz+Sg6muX0dMTU5QTDdDTVJTREqGdoB8fHZ+bHaIiHx9hYN/jH52opl5foaAhJmFm5xhhqqfnYuCkI16dol+iYiOc4qXj4N7XGRxdHp7d4psZ2lheG+Fj4J6boF3c4R6cHN5d2tuaV13h32HfIiHj4CLk5eDjYaNhn1xhH+EfHV3e32IdG1xcmRlXlpaXVNbZl5YUVVZXFZHS0tFTEc/RkBEQz9BQT06OTc8Ozs9PDo6OTk7Oz0+Nzk+OTk4Njc1NDI0NDAwNDY0NTY1NC0sKSsoJycnJigoKSkoKCsrKy8wMFVxPDIzMzMxRX5XND05XIx3iX+UjJGdnZ+mkaCqn7Cpr8Cxu8a6lo+RlIh6hnZrgIySg36LhZCNeYSCdaKGjX5+goBzg4F9a3psU1hMQUUzMTEyNjY2ODg6PD9CRUdGR0pLTU9QUVNUVVdWVlZUU1BNRkA6Mj0gI5ZjjFs1MzExaT9Hb0lGSUxNT1JMS1RdWVJKaYSJe4l5e3F8j4x7fImGfpeHdqGZiIePkpSljaypSIatr6+KgICTioKLgoSRqIeAmJiKnHNsfIGGh32OaGdneH5uhYaBhXGEhkdrgHdxeXZobWtfd32DiH+IhYx6lZ6ciouJkX97dYt2fHdtb3d+fXFxcGpaW1taY2JXZ2VcVVBRWFpRRExMR09JQ0ZDQ0FAQ0E9OTg4Ojo6Ozs6ODg4Ojo/PjY7Pjc1OTU3NzMzNDQyMzY3NTY3Njg7REZMTU1MQzcrIiYnKykrKywvMDArbnUyMjQyMEyBXDU9PF6EdHx+ioWHkY+WmJKXoJ2soaa4r7O9tJeNkouYi310cH+Kk39+jYOUlX2Gf4elh4mAg4iGeYmLgHWFeV9jVkxDNjAuLzIyMTIzNjY4Oj0/P0JFR0hKTE5RU1RVVFRWVVNRT0dDPzgwLCOHWz4/ODQuXZZwc6NVRklLTU5QV2BZcFpcXmqNk4eVgISChZGTfoWJkYGaloKgoZiVm5qlrZOZu7Gnu8fDp4qMoaWOk4mBkHtyg56fkZx+doWFi4+HkGlob4OAdIyGhItxhoJ3h397doV9bnZ1Z4GUj4aJiIiJiKKro5aJjpiAe4KJenpvZ2t4fXd8cWljXFlZXGhcYWZfWk9MTlhTUUlQS0ROR0NKRENBRERBPDo4Nz08Ojw6ODg3Nzg6PT04PD02ODc1NjYyMzQ0NTU3Njg2NzxCQj88ODo+Q1FeZVxHMicmLCwtLS4xKD+MWy4zMTBPg180PztudnBneIN7gIyAgZCPi5qapJyhrKarr7CXkpGEoZSEeHeAjZR9f5KGk5Z+ioGSm46EgYKMi4KKjoSAioBtcGpeQ0E0LS0vLy8vMDIyMzQ3Nzk7PT9CREhKT1FSU1JTU1RSUE9IREI8ODcvOUM+PDw2My5sk5dNUEhJS0tLTlZgY39nZ211nZuPmpOTi42OmoiTj52LoKGSo6mlo6yTqLaip8HCrsiveLqUmnyMoZ6YhJOFgo+hnpOZkoSKhY+YkJZscHWJi4GVjI2Pdo+EcWyFgYqWkoOFiHKJoZeHk4mPj5eltqmbjZWig4eThH5/a2psfX59f3FfW2JeWWZqXGxrX1hLSFBTUU5NTEZJUURETkZCQ0VHQj46OTc9PDo7Ojk4Nzc2Nzs6Nj06Nzg1NDU2MzQ1NTY2NjY4NTU2MzEwLiosLCkoKS46UGFcQCwoLSsrMCwncog3MjQwT4RiM0A8dW5nWXCDcHWHcXaRhn6XlpqUn5+bp6CqlpOYnmhmpJp+hZOSeoGSiZKSfYuFmZKRg4GBi46JhpGHhIiFeHh/aE5SPi8vLiwvLi0vMDAwMjEyNDU3Oz9DRk5QUlRQUVFTUU5QSUVEPjs8OkNGPz48NzUyPD9SNUhISExMTU5SXm+KfHOBfaCdm6emopmhl6KVnJ+onqmrn6isqaq1l6u/q7bIybfI0c++m6Bwaaupn4STkoWcoJqamaeRkYiVoZmad3p+lJeRoZKWl4GUnnt2lZKrs4mNl6B9lZ6cjpOWmqSjp7awnZGZqIiXkI6BiGxzc3t8eW5mXltfXmFnY19nZ1xSRUtLUU9JSk1GRk1DSExGRkNCR0RBOjg1PDw4OTk5NzU2NTg+NzU9ODQ3NDU3NTQ1NDY5NTg6NjE2ODYzLzAuLSosLy4tJyMqO1hiQigqLDEtKEuXXjA2M1GFZjNBQGliXlBxdWBufWF3jn18lI6Oip+Sl56WnKqYnqpCRH2HiYiYjXmCjYuOjXyKho+QjoGDgImMiYWThYKGiYGAh3dfYlA0NjAtMS8sLjAwLi8uLjAwMTU+QUFNUVJTUFJTVVNOU0xFRUA8Pj1GSEBBQDg2NjI8OTtGSEdJSU1PUVlthpB3lYujp6q1vbilrqysqKm1rLG3srKtu7GzvpyzxKy7ycu4w7+3paOwsqytqqOLlpiFpaagopiCppmNoqqnpIeFk6OgoKqgpKmOnLGLlaOnt7ucoaOwk6Odo56RpKKrsK2ztaKVpqqJmoqTipV6e36De2VeZlpjYF1iYl5mZ19bT0RJSFRPRkhMRktHRkZIQUtGQ0ZGQTs4Nz08ODg6OTc0NjU4PDU0PDc2OjU0NjQ0NzM5PDM4PDIwMjU1MS8xLi0qKi8sLSooKiYlNVhYLywwLCwwhIE4NzFQhWg1QUNbWFRMaWNXanBYeoV2gZSFiIKbg5KRjJLayJ2Wc1aXiI+InI98hoyPi4p7iIOHkY6DhYGMhoWIkoaChImGh4eHcW5hQEU2NDwzLzExMC0sKy0xLy00P0RBTlZRUlNVVVdVTVxRR0dEPD4+RkhDREA4Ozw1Qzs9RktJR0hST1BXgZOghK6js6qywcfEq7PFtq20wLO4vra/tMG2u7ukuMaptsnHtr65tKijtK2wsZuZkpqfiaevqqSVd5+kl6GrsbOYlqmtqK61u7K6rK+1orGssrW8uLSutaCoqKOom6mwrbO6uLionLipjaWPkpOgh3mBgHJXX2JVZGBgYV5fZmBbVUpERUxWUUlKSkVKSEVBQEBLREJNRjw4Njc7PDk3Ojk4NjU1NTcxMTw4ODk1NDY2NDk3Pj0zODkxLjAxMjExMzAsKiwuLCsrKyooJyopRVowMCovK2iSTzYwUodqNkFFV1FKTFxaUWNkV3p1cYGVfYSGk3aGfoCNe7+7o7yCtJSTjpuPhIiPk4qJeoeBjJONh4WBjoCBio+GgIaIhYqHkXp5bl1XQEVOPDY6NDZBQjc2NC8vNkNIQ1FcT1FVWFVcV09fVUlLSkFAP0dLRkZEOz5AN0Q3P0JKSkVHV1RQXo+kraSytMO2uMHMyra7xL2ztMG3uMK1v7C4dLG0prrFpLDGubGzsrSopLa2qrGgopabopKlsa2lraynpJigrLO6oqiyubW7vsy/xcW9vbPCt7q3v7i6uLqtrbGmsaquvrC9vMPDrJm7qJWuj5iZq4l+gHloVWFfVmhjaGRWW2NZVlRKR0dMUkdESUpBSUQ+P0JCTEBATUQ5OTY2OTo/Njo5OTY2MjQ2LzE5NTk5MzY0NjI3Oz0/NjoxLi81ODo5NjUwKigsLS0tLCwqKCgrKyhFUy8qMDBKj2s1MlCHbTY/RlJMQUxSV1RZVlp3anB/j4SBjoVve3J4iGK5oZmjiZWUlpOUlI6Ql5KHh3uHgY6WioGEgYp6fIuIhnyKgoGLhJV9eHp1Zk9cZEdFTDpRZGBbXlNGPztIUERaY1FRWVlaZ1pTYGFNU09FQT9JSkhFRkFAQz1FNkI/SEdLTVNaVF6Ur7i1u7nJwLu9ys28vMG8uLa8u7e+tbqzxmF1sqWxmp6rvqqlqKuqpKKytaCrp56Vlp6Yn66lp6eln6SToqews6iysry2wb3TycnTxsLFzMLKxMC+vr+8vLi0sLm3t8O6xr7EybCeuquirI+lqbeJgHxuXF5eXFVfXWdmU1lhVlJWSUVGTktBPkhEPUtCPUJAPUY+O0hANzk2Mzc5PjQ4OTo1NzA0NS8yNjM4OTM3NDUyNj84QD5HS1JUVFJQT1FSUUpBOS8sLCwqKygoLC0sL1A+KC40OIB9PDJLiHE5PkNLRUBKTVBSTFFdaG1scY+NhpBzbHJydIjVwLWaoI2VmZmRjpeSlpaOhoh9h4ONlop+gn+DeXuLhId7i3mBioKXf3R9emxlcHZZXVxQZWViYGVkXVtYWFxNZG1VUm1uX29fWGdlVVlUS0RCS0tIRkhISEhCSTlEQEhLVFRWXVpck7nAub64xsG7ucrLu7a6tri5tLi1ta62t5lkdamerXBeoq2cmKGim6Seq6WUn5+QlI6WmJeonqafn5qZg6OdrKSqsa23sLy41NDO1s/JzNLMz87Kx8C/wsq9wb3CwMXExsrAyc+0pLyxtbCcrLm9mn12aVtcWVdbX1hhYlFcYVRSTENCRkdFPEBGPkJJQkBEPTpFPj1KPzQ3NTM1Oz00Njg5NzcwMjIvMjQxNjk3NzU1NTVEM0VMTT41MTAwMDY6NDc3QElPSjsuJioqKC0uMCxATSsvNTRtiUkwSIl0Pz5CREBDREdLT0RSXFppYG+XkpGUbmxvdHWHs6yhoZ+LmZyZjY2VkZuShYqKf4iHjJCLiXyBhHN7ioOFe4p0gYqHlX90e3lsbXV8aXNlaWxoZmppaGBmaWltWm10l62kvYiHZ1tvaF1aWVRIS09QSktQS1RRSExBSkZLUF9fYmdqYpe3x7C6tLu+trHFx7awubGxu62zsairuK2NtqienKeaTpqejI+glpGnmKWVipOTiJGJj5GSnZuhmJuVloeemaaarLCor6ezs9PU1NbRy8/T1M7Tz8zGw8rQv8rJy8nSyM3Ow9DSuLDEvcS6pre7xKJ/a2FaWltWXlZZY1lQXVhPUkNCSUVDSTtBRD5CSD9AQjg7RD5AST01NjY1NTs6Njg3NjU0LzEwMTQ2Mjc4ODc1MzY3QzVCOD8tMCwxMzQ4PTk3LC4sMTtGTD0pLCguMDAwN0s/LTQ2VIhXMESHd0M7Qj5FQkFDSk0/VVlTZldzkJGZg2hyb3l5g6GqnqaXjJubmIuOlZGajn2Ji4WOioqLkIh8hIJwf4eBhnuHcoOSi49+cXl1bHB4f3J7bnhzbGmAcG1jaW5weWl3fX7Lv8Pfp25jeG5kW2FgS1BSVU5ZXlBeXU5RTlRRVVRcbm53g3KWrristaiwtqutvcGyq7WmpbmnrK+hrLSkj7Gum5iYjJGUkYSPm4GNp5GciYOLhIqJhIuDlJWXl5SbkJyYmZmenquspKeirKzO0tXRzczS09PQ1NHOyMPU0cjO0tPT183S0cXS1sbBz8jIw6m/uNCcdmtiWl9bVF5RXFlPUFRQTkk+QUdCQ0Y9QUI/RkU+QD86PT08PEpCNDU0NjU8ODg4NjY0NDEyLzAzNTI2NzY4NTMzOz08RT1AMTErLzM0OT81OTAxMDIyLTJFTzMpLzMuMzI9TjI0OEN9XzJBhnREOj09ST5AQ0ZIPFZSTU9bdYeGi3dsd3B9foCgnp6hjI2Zk5SLjJOPloV5hZCQjouKiJGHf4J7cn6Agod6hXaFk5GJgG93c2xzfXx3fHOCeHFrgHJyaXByenlye77Lmn+NsoR2coV3aWFpXURaWltXZmRYZWtUWF1dYGNeY3h7f4uBmaqkpKKgoammqrG5q6a0o6KuoqSuoqexn4mmm5WTkYqSj4iClIlrlaKNmYSBhn6Rg4OTl6yLlY6Vmo6FkpCdl6ewoqChpaSoyM3Px8LL0NPR1NLO083G1tPN1NjW1tjV19XK1NrNytjW0cutxMPLiG9sX1xcVlJXUlpPSkdJSkpAOzo7RUJEPUNEPkhDP0NCOzw5PDpHQzQ2NTQ0PDU2ODc1NDMyNTAvMjU0Njc0NTU0NDw+PUU/QTYyLy0xNjs9MDgxLzI1NC8tLjtSMDE3LzUzMkVEMjg+bmI1PYF0TTk5QEk8QUQ/QTtQTEZLWXCAdX5pc3lygoqAnZWelIWLlomPiomOiI+AeISUmYuNiIiLiX6DeHN8fYSHd4B7h5GXgYRveHFtdX92eH10hnx5bId2dG59doV1eXudtYw8QYvGpX6NfWplV0lDZWNmY2hqZG95W19maGtuaW6BhImRjJ6foJ6Rl5mgo6SmsqSlsqCipZ+iqaGisZyHn5KSk5GLj4uHhI+EfpycjI2ChIV6lH+CqpajjJKLmJOLfZeKmpGqs5ibnKecpr3Dxbm2xc3R0NLQy9LLydTO0dXa19fY1NnYzdjbzsna2tLWv8zNtHVza2FaV1BTUFhVRUdKSUZFPTo3OkBCQzpIRUBFREJEQTs/Ozs3REM3NTY1NTswNjg5NDQzMzQxMDE0NTU4NzQ0NDQ5QD5EQkM8MzMuNkZUV09RSkFKRj8yKiguQlQyOTI1NC83Szc1PGBiQTxzdlY4N0FIOj9DPjw5UUVDSlRsbm9wYnFxdIaNfZeRnot+h5KCiYaFioKIfXiFl5eJj4OHhod6hHlxe3uFhnV6ho6OnXqNcH1wcHqAcnuBcoSHgG6OenV3fX2CdX98h4mwdFmqwreNkoFwbmM9XmhycHFwbnd3gmVpb3J2eHJ7jIePk5KblqCWiIyTnJ+bn6ugoaycopqaoKafn6yZjJqNkZOOhX2Ih4OFi46gmZOIg4d+bJl5hJmHiJOMjpWMhnubiJOOraqUlZefmKautbyorb3Hy8jJy8vPycTSytTX2NfY19Tb19PZ29bP29rS1snVzJN1d2VkWFdOUVJbR0NGSUg+Qj49ODo+QDw+SD1AQkFBRUE+Pzo4N0RCNzU1NDc5LjU2NjQzNTUzMjMyMzY0NzU1MzQ1OEVCRENFQjU2PEZOU01bbmZjbnNrYFY+LDRMRzg2NTQzM0JGND1XX2hMdXheODs/Rjw8Qjw6OUQ/Q0dSa19tZGJmbHaAiHGRkJuAeYCOfoKBgoV/hHx9hJiOh4x/hoeBd4N5bnt7h4J0epKejqF2j3aDdHWBfnSAhG+BkIJvkoV1fIGFenaHfIm4xqXDyriClpyPeHBmTmVjgnqCd4WhkIt5end7hIB8hHVtlJaVlpCYkYOJj5eal5emnZigl5+TkpejnpqrlpGRi42Tg4yFiYmBho+RnpyZiIWLgYWXeoiJn5eQiY6Ki4J8oYmQi7ygmJOXmpyopqWtnqe1v7+/uMbJzc7FzcrR1tXU2dXX29TX2drb19va2djO28aDdnZkZmFdUlVUVE1LRE1DOz08PDk6PD85PUE3Pj9APT8+PTk4NjdDQTY0NTU9ODA2NjU1NDc3NDU2MTM4NTQ1NjQ1NjdISD1ESkU3OTI1O0g+Ozk6N0hQXFpSVVhLOVQ+Ozk1MzI3STg9TllNSHh4ZDU9PkM9PEA6Njo+PkBFUV9ZZmFdXGl0enlsiY2Sd3Z6i3x+gH+AfoV7foKRioWGe4WIfHV+dW18fYd+dH+SnZGfg5J8h354j355i4pvg5uBdJmGfYKKhXx+kXuQqY+Qw6C9jJuknH6KhX2Jc4yLf3OmmpyYlIV7j5GJhGlHcaGknoyMkZKFiIuQkpWPnZuTlJGXjYyVn52UoZWTjo6QjH+Qj46LhImSlpmfn4iMlJGdkIKMf6aZiIWOg4aEgKWGiou4l52RlJahpqCdnZ2jrra5tKvAxsrQyMfNz9PS0tjS1dfA19jZ29ja2tnZ19u2dnV0Z2ZiVF1ZUk5OSENMQz09Pjk5Ozo5OTw9NkA+Pz09OTo6OzM3REA4Mzc4PjcwNjg4MzU3PDM3ODA0OTc2NzU1NTQ2RlA1RE5JODkzOEFLPTszQ0BJPDlEV088TVRITj85NjMzMz5DO1tYPjVZeXBaPDxBPD0+ODU4OT88RFJTUlhfVlhmbW1taYGOinFzeYp7e4B8f3yIe318i4eDfnWEhnpzenNtgX6FfneGm6GbnpSSgIyIf5iHgJySboiphXugjHyRjoOJhJx+m5GKjaOin5Gkr6CLkYuFi4GThldyrYufq5uQg5mckI+OW4OikYKNn5OUjIaIjJKSjJSVlZCMj4qIlpudj5WWkoyTlIaAjImSjoqKnZeYo6KGk52VoIuKiY6dkIOIj4CDh4WlhYuQspickpSXoaCemZKbnaeyuKylvcLHzcjGz8zQzM7Xz9HUrtbV2NrY2trX1tnanWx5cWNjWlpVUVVWQ0BJQz8/Pjo0ODo7Nzo7OjM8PD89Pjc7OToxOkc9OjI3PUA1MDY3NzI1NT82NTs1NTg1ODo1NzczNUhSN0dPSzk5ND1FSkI+MUZDTEE5ODpHWEA1SFdJNjYyMjM6RUNlWD8mX3lpX3o+Pjk8Ozk4OjtAO0JRS0tTWVBUY2J4bGJ+kYNvbniLeHp/e4F9h3x8d4aFgHNwhYJ7dXd2dIWDhX1/kqain6ail4qdkJSXi4qol3KKso2EqJKEmZSFmoyjlqCYk4mbnqKTqbCgkZWRjo6IloxvjbeEmsTIspyippycmJaRsZBkpM3HlY6Gh4mQko2Nk5WKhYqKhpaZm4+QlJOHlZiEgI+LmYiOkKuXl6SjiJmelpqIj4eXmIqFj42Bf4ePpYiNk6iZl5OWmKGYn5mTnJqisrSlo7zBvsfGxcnIycLK08zN1KjS0dbW1tja1NPazn9ve2RgW1tbTUhTWUJBR0Q7Qj44Mzc7PDo5PjY0Ojo8OjcyPzo5MjlJOj42N0JDMzI6OTYyNjQ+PTQ7PjY5NDk7NTc5NDRLUTxKUUs5QTdCR0lANjRKRUxGPjs4OEVUQTc+XDg2MjE0OjtFYFhBRmF0aExjWj41Ozo6NTs6PTpFTUZIUldTUkJjgkd2gY59fG1+iHh6fnuCgoN/d3aBg3xtb4t/e314eHyEh4p+i6Kzp6Ors6KXp5+lpJaVrqKDkbiVkrOajKGhjKWbsKOknZiRp5aomayvpJiVlpWQi5ial6HAjqPJuKuco6atmJKbnbKdhYaoopyYhYmJjpWMi5OPiIGGh4mTmJWMi5STh5SYhoSRkJx1kZmylZakoYecmZKQi5CKl5uJi5aOhn2MmJ6JkJCcmpqTmJefk6CdlJ6boLGuoqO3vrTFx8S9w8PAxs3KydOmzszT0tHW2NPQ2LpvdnJZXlNdVE5HSU1EQUNENT46Nzc6Pzw8Nz00MjY2OTc3ND41OzU8TDw+OzxCQTc1PDs0Mjc3P0A2P0A3ODQ5ODc7PDU1T01EUFJMOEA9RUFHQTU6SkVORUQ6NkFAQlM+OURPMzIzNTc1PXZcPFJcdGlaTV1TPD04ODU2Nz06SkZER01aXFlKZmA7SISLenpuhYZ6fIR4gYaBfnB4fH59b3ONen6CfHiGi4mGhJKmu6yosb2wpa2zs6ijorCsipq1naO4pZWtpZeprbinpKOfmqmYqqSusKqamZ2UlpGXoJiau7uuyqFqtrirsJSZn6Osk5e+o16qsoOKio2Uh5B8jo59g4aOj5SViIiTloyQlY2LjZaYk52ZtJaVq52KnJSRjpGSjJibipKekIuJlp+hjZSNmJmdkpuYnpShoJScnaWvqKGks7iswsjEtrq9vMXHx8LRoMbJzc3F19bRy9OfbXdlWVdQW09ORUM+PEJBQjhAODg1P0c9PDU8MzUzNDU0NTRCNDk6Qk06QjtBSEI7OkA8NzQ2PEI5P0BCODc0Ojo2Pjw0N1RLQ1VRSjc8OklBREA0QUpITkJBPzZEQTxKTkQvVD0yNTQ6RUpcWEpaUW1ncHBEaWBLSTY3NTc6PkpAQ0lQZEhiYGJwSkCLin6Ac4aHfYKIdYOKgn9ufXx9f3B3h3eOgod8jY+MhoyZqcLAr73Gu7O0wL20rauztoyosq6tvqubu6Wnrbm4q6amoqKko6mvsrGqnZylmZuYl5+ipqWSpLqvqcC8ra6yuaWkqH6IhpytvbCCi4yLkIOOg5GPeoGIkI2NnImIj5eNi5WWlJGal52omrGakaycjpqPko6VkJCWl4+RoJGJlJukrJSWj5OcnZOgnZuYn6GUmp6npqSio7CypsHGw6+wurfFxMO/zabHxMfEvdbQzcTKhXBvXllXXFhMSkFLQUZHP0FAQzs6ND5BPT01PTY+MzMzMjQyQTE3QEJOPkdAQ05DQT1DPTs4NkNDNUJJQjo4Nzg7NUI+NzlWS0RXT0Y4PTRLQEM+NEVLSE4+QUE2QkI/QlNFNThQMTQ1Ozw4O0Q+OUxqal07V1JkS2daVU43OUdEP0NGXGVGYGlnWl1ck4yMiXuHjIeDjHWHkYqBb357gn9xfoF7lXqSlJSYkJOWp7PGyb/BzMLDuce9u6+rubuYs7e6ssGupcCkq6+8vaquq6OjnqerrrWwqpygq5yhnJafr7Wni6O6urbBvKypnbOlpKiUhY6pxMOkgouPh4iEhpWUjXmDjZGPkaGMjJSSjomXn5iTmZWXpqCvnIyrnI2Wj5GRlZWOkZWSj6CUhpefoLKelJmTn6CYpJ6an5uglJiepaSmpqSvraXAxMOuqLe2ycO+ts+yxL/EvLPRysjCtHF1aVlVWWdRTEhCTEtMSkFBPkREPDVBRTs7Mz04QjMzMjI2MkEwNUlFTj5JQEhSQEg+Q0A7Pj1GQTVBVUA7OTk4PDdFPjg+VkpDV09HOD80TEBCOzVKS0NMP0I/PEJGPUFITDkrRzwzNjc0NjRBPzdPYU9hRS89PjZrbGpgQDpIPj9FQmVaTWVcZlRia5mNloqMiJOQhol5h5SQgXKAe41/eIeCgpB6jaGWqJmambq9x8jJwdLJy8LMvcKzrby+qLrAvrvEt6zBqayzvL6qsKqkpaSsrrOttrWhn6+fpaKYo7O9qpuovcGktrivrJSyrKysl4eaqaalkYKMk6WWioF1ipJ5hY6SkJ6gk4+TjI+NlKOZlpyVlKOeqp6RpZqMj4+PlZaIfI+Vk5KjmpWfopy1pZCelqSjoaWdnaaYnZWXmqSjqaeisqyou8DDr6Wzt8y/ua/Es7u+wbiswsPCwJdqdl5VVFlYSkpMSUZEREhDQ0FETDo0REk6OzQ8OEUuMTIyNDJCMjZTSE88SkJKUUVLQ0RFOkVMQjw3RVY9Oz04OT88ST86RVVJQVdRRzdBOks6Qjc5Sk1CSUBDPjxERzxCQ089MjBIMzY2MTcwPUI6PWpqSks1UVMzU3BwZE47RD1ARj5pSF9YYlpjY1aej5yOl46ekomKf4qgk4R4hX+Wf36QiIqRgJahma6npJjCvcfDx8XTzs7Ny7zCt7C6vLS9y7zDwra3vK2zv7q9rq+ooKmotq2uqbK3mp6to6ehnau3uKqlsL/Esr25tKirtrSurpeWpayon5GNkrLFp5aOfJKVfIeSmY+qmZiTk4+SlZOknZOdmZOho6KcmJ+Yi4yPjp2IWpCXl5KXpJllmKKfs6WVoZWrq6mmm56mlpiWmJSgpKiln7arqbm7w7SltLXLwLiqtquyu7iuqLi6vbiAaGtXVFJTTUVJUk1LP0FIRUVJSEg5NUVNOz44PUBKLjMyMDI1QzU1T1ZOPExGS1JMT0hHST5JUT86OElTOzs/Nzk+RExCQEhTS0BXUEY6QT9HNkE3O0hNQ0U7Qz00RkU6QkFCRzkvOkEzNjAzPkdEOTQ9dGRNRztFKzpmfGdWOz5AQkZCcEVqSVJlYUxGpZScl6KXqZaMkYOIppOIgoeCnISDlZCQlI+aop6vvq+hxrzExMbGzs/O0sq/u7axuru7vs+2xL24ubezsbWzuLOrp5yrrLmqqaevsJijr6Wno6W1wLCsrLS/w7rAurSnura5tK+Wpa2vrqSLk5ShjXTCmn2XmYSOl5mMsZWbmpWSkpmZpaOVoJuXmqmdm6CgmYqNj5WcYEqWnJqUmqWWVJavn6+cn6SUrq2qpJqgpZOTmJiNnKCnopq0qKqzu7u7qrGyx8C5pqyrrbKyo6GysrSkbWpiWVdNT0pET09QUjtHS0lHSUNDPjpLVT9BOj1FTTA3NTQ0OkI0NE1XTztKS09VTlFKUEhISk9CPD5NUjs+PTg6PENSPkRIUklCV05JQEJBRjM+NThKS0NBPUM7NEVBOkE/PkhANSpCNTIsPmNdZzozNXRkZUBSNyYjM31oVzs6QkNAPVFFV1NzYldGSKqWmaCiqK+ZkZeHi6iWjoiThaCHhJ2Xj52hmqOktcm1qcW5wsPIysnIzc3Gv7uzrrm5wcHMtce6wbm1urCvr7O1p6SbqrS0qqmmrayapK6lpKisu7+orLa3v8G/vrmzssSyub6to6+1rLmmiJuXppt2v5+EmZ2Ok5qajK6XoZycl5SboKGonqifmZqqmqGnnpiQjZGdg252kqKalZ2inZGusqOqlKiql6mto6KepKeRkZmch5Sdop6Wsaapq7m2vbKyrr65tqCjp6ilppybrampi2BiXl1OSktGR01KVkw9TUVOS0xCQ0Q8UVY9QUFCRE8xOD03Nj9CNzVVWE8/SE5RWVNQUVVLUUpKRUFFTVE/Pz04PTtHUjxFRFFCR1lNS0FIREU6OjM5S0lCPkNCOTlDPjxAPjs7RzctMj4tMYJoTnpcLzBraGA8PUJCODZ6Zlc7Oj0uLVJgTVVIfmVeSEWrlZuin7uvmZSgjJOrm5GSk4mrjYahnoyjrZSjo7bGvrTAucLCx8nFws3Iwr65sq+5tMDCyrXGssK8tbqqqK2tsKOjmKq0u6appquqnamvp6Oqq727qK29tbi+x7y3trjCsr7Btaq1t6u+pY+jmJKioLyfiZqgmZefno+3n6mcpaKbnKGaqKSzoJudppyoqp6YlY+Um4uWiYykoZSdop2gtK+lpJKvq5mqqpyco6KokJSUn4KPnp6blamkoaGztLq0rai1srOenKOlmpeVmKqhnnVdWl1bSEdFRkxRSU1FR0dCU0xKQkVHQVZTQ0g9QUdRMTtCNzpCRjc5XFlLQUxQVFVTTVdSTlVKRUBKSk5POUNANT08TlFDPz9QP0VaTUpBS0RHQDUzPUlHPz1FQTk3QTs8QDw8M0A8Lyc7KkiRQjpTSjAsW29XNzE8Kh1CgWRUNDktMTlmXEZDQ51wYkdFp5ejn57DrZyXpZiaqpyWmpqPqpaVp6aVrayYoqu2w8O8vrbBwsDHxL/Nxru9ubKwubO/wse1v7C8t7m2pqSrq62goZmqqsSipKmspp6sr6uiqam+uKetv7K4t8e2tbm4wLPAwri1s7SvvqOXo5eUnJSun5Cio6Wjo6CQvaWpnamrnZ2hm6WevaGZo5+iqayhnZeNlZ6TnoePhI2Tn6SgnrWsppyVsKaZr6WcmaicnoyYlJ6DjqCZm5KlpJqXq7G1saqlqq6sm5igoJKPkJWonpRlX1dfW01IR0pOTEhFRElBPlFJQTxHSUlcUk9LPUhPVTRCRjk+SEc1Q2FbS0JOUlVXVlFYVFJVSUA4UlFQTTpHQTRDSFFTSUM7Qz5HVktDQE8+SzwwNjtHRj47RkE1Nj85Oj85OzE1RDAtLC9Ndlw0S1o1LE1uVzwtPSkeI3piUTVDS1E5bVJGPEt4ZWFWS6Kao5yexayhnqyfnq6gkqOflqSgpqmsmLaxoqqztsXEvb+1wMK7yMK+yse1uLW0sbO0t8HFtr6xuLW5tJ+nrKqsnZ6epaTBpZ+qraCkqa2voaaovbWmsb25t7bEsrS4ur+0xMG5ua+ztbWjnaWVkpShrqCZop6pqKyjmsKsqZ6srpubnpmmoL2hnaSYq6yspqKajZqfkp6Jjld/lp+loaC4qqeTmLSinrGfnpmulZ2NmJOcgY6fl5WNoaOVkKWtsqqpoqKlpZWVnZiLj5GSpJ6JX2JYYl9LR0pKTkZFQUdLPz1KQjk5SktOXlFRST1MVlw5Rkk9RE1JOEhiXExDTFBTWVlWV09aXklBPVdRSUs/SD81SE1YU0hBOkBBRFBIPz5RPks3MDk5RkU7OEc/LjY+Nzg+NzcvMT85MSUxUVVtW0pPMTA9Z1dEMTc9LSt3YFM2U1prV3JHRTY9dWVcS02enqGZn8SopaG0op2zp5OrpaCjn6yprJ27sKistrHHxcHCssPDvcbEvMTJvK+wtq2wtK++xLS5sbC6tKyZqLGpqpqdpaGnwq2brLGbqqOusKmlqby2p7e7vq+3xK2zs8PAtMe0u7istLatqqKmlpWVpKyin6Cbp6qwr6+7saagqamamZiToqO4oKGjkq+wrKWnn5KhnpWej5CNlZ6bop6ntKemjJeym6KtmZyarI+dkpWSmX+RoJWOjZ+gk4umq6+kpqKcoJ6RkZqThYuRjZudf19jWWZkSUhMSlNCQ0BJSDs7Rj85OU9OVl5SU0o+T15dPUhQQkxMSTlNY1xMRUxSVFlbU1VPXGJIQT9aUUFIQUtCN0ZFTEtNPztCSEROQj07TkBBMy85N0NCOTdGOys2PDQ2PDI1LS80QDErJ1Z0U2VPPzEwNGJbTTIzPjA8dl1eP1tUXmVxQDg7SJZ3ZUE0nqOfnKDDqaSqs6KktaqWs6ynoaSyrK6pu7KtsbW0xsDEwrTAxL7JxLW/yMG0q7Wor7isv8Ozt66ttrilmKqyq6uYn6aXrbu0m6iwmqygrbSyqKu5sqi6tLmzuMCqt7LEvbXHqL+vrra1qaesoZiXkqaloqKYmKWuuK6ytbagn6mkmpWWlKSgt6KlpZavsrKnqqainpqam5WXqJ+gmKGer7KipoyXrZikq5aYnaKPmoySlpiFlZ6Ti5CbnZOKqKmqoaehmJ6Vi46Zj4GFlIiTnndiZ1tqaUxPTk5UPkNBTkM6Okk/NzdST11fUlZRQVdgXEJKU0hWS0g6VGRcTkZPTltXW1JQUVhdR0FCW1BCRz5OQzlIR0hPUD8/Q0lCTEI8MklBOTQxNzdCPjs3RTcrNjkxNDgwMS0vLjw2LSNCcWdzazIzLzFbYlozMzgwNnBbYkgwNUlvaFVDV0aMeWZDO6OjnaGmv6enr7GiqbarnrqxrKOrtLaxsLm3sLe4uMS9w8e9vcTCxsC4wMbAuam2pKy7rcDBt7eqrbK6opStsa2ylqSnkaq5qp+msJyroK+0s6uptratvK20s7m3rLixw7u/v6bEq7G3r6irq6eemJmroaKhkZihsa+zrLC5mpupoJqXk5inoLappqOisbG0rLOorJ+coKCbnqWcopedo7Ovm5+Qk6SZn6iZk6Gdk5aIk5aSlZackoiQmpiUjqmopp+jnJebkoWOmYt9i5WEjZlpZ2tgbG1XUFFbVUFCRVRAOztJQTc6WFBkXlBXV0VZX15NTFJOXktKPlljXk5IUE9cVVlQS1RXWkk/RFhQREY/TkA9SUdHUVBCPURGQk0/OjFEPzc3NTQ3Pz05NUU0Kzc1LzI1MS0tLiwxPSonKz1ccD0+MS4wZFpkQDE2NDdnWWBGKD84bH1nW1Y7iXtjQz2nn52iqb2iqrCspLK5qqa2tKygrbW9r7O4u7q+t7bAwr/JxLnEwsC/t8O9wLeutaert7G7vb60qa6xtp6Wq66nrpemqI6nu5+lrLOeq6KxsLOsqba0tb6usbK1rLC0s8G7xresvbCxuKysqqOypp6lqqCkl5Gan7Oqs6urs5qdp5yalY6hpqS0rqihra6usai0rbKqpJyfqKSelaKZm6i1qZeZkpKdmZ2fnZCqnJWWhJSWip2Ym5OKjZaWmpampaOfnZaVl5J/j5SFe42SgouVZGtxZm9xXkZZZ1ZEQk1YRFo5SEI2Pl1RaFxPWV1HW15dT01SWGRKSkJcYl9QTE1OWFdYUEpWVldMPUVVSkVEQU1AQUZISFFQQTtGREZLPTg3Qj02ODcxOT48NjVEMCs4MC8wNS8qLC8tKj0sLCUyKyo1SzEvJ19fYFUxNTA9YFZeOClDM1lVXGdLNox6ZkxApJqhpa23payqpq+ut6qvtbunprG3xbextr3Bw7W1usS+zMa5w8C5vrnDuMC4srSrqbq2urm+tKmtsLWXmKesqaybq6uOq76erK6yo6ugsa6zrq21srm4qq6usai1r7W7vMqzqre1sbSvrqahtKCbqK2gppaWm5qyo62gpq+XoaSampOOo6Wos6qhprOtqrWlr7K1r6SZnaynmpifmpmrt6OXk5COl5ygl5aTqp6akX+Sl4ydm5iVkIqUkp6ZpaKioJiWkpOVeouPhXuMioKKkWptd211e2FGYWtZSUdaWj17SkZENkFiVGlbTVxhS1xdWlJSUmJgTEtFX2BgUUxJUFdWVU9HV1ZVTjpJVklIP0NLP0VESEhRTkE/SEhIRTw3PT46NzU2MDk/ODY2QiwtOCwvMDQsKCwvLSo3NikoOS4kOks1LiJUX1RfLzUoQ19RXC4rQi9KR1BbRzNjWVRLRJmXobGpsqqspqSvrrapt7W6pKy0t8m7tLu6v7+0s7fDwMzIvMO8tr2+v7e+vLG8rae6ube1wraqrbG3lJamrquoo7CplK+7pK2xs6eoo7K1sbGwtbG4tKmvrLKnt6+3tMTGt6m2tqywramno7agoKexoaSVnJqVsZ6nnKCqjqmjnpuWmKampbioo7K1rKixp66xtaylmaCsqJucnpyUqbiclI6OipebopePl6SgnJOCkJSPnJuXlpWIlpCYmqecpKCRlpGQlXaEj4d7hIGDi4psb3Z0e35cTGZtXEpOY1w+YntHSThHZ1dmXExeYk1YWVdVV1RpXU9PSGBdX1BKSFFWVVJLSFdVVk04TVpORUBGSz9IQkNLU00/P0xPSEA7Oj47NjswNDE8PTQ1OD8pMDcpMS4yKSksLC0rLTkkMDQyJTlCNy4jQU5HZjI3J0diTFYlLUIuPUVMUTwzcmtJQ0ORmaWvpa6vq6ilsbO0q7eyuKGrtbnJua3Bu8K4s7G1wsLOxcDBvbS9v766vryyw6epubC1tb+8rqyysZugp7GtpqavpZ2yta2rsbKsqai1u6y0srWttK2qrKisqbitsrDIwLmlurCprKylqK6xpqWjr6SpnJ6dm7Cao6Ojo5Gtn6SgoKKrpqe5pay2tqWrrKmtsLauop6jqaqboJubkqS0mY6KjYeQoaCUjJScn5KQg42Skpyal5WUh5eSlZmnm5+ejJKRjZB2fY2FfHt8hYiIcHJxfXx9XFNkb15OWGZcRkSWW0c7Tm1YYltMYGJOVldWV1RYZ11RUkxjWVtUS0dPVFNOR0lWU1xOO1BeSUJESEpBRT8/S1NPPjpOTUM8PD45OjU9KzMyPTYyNDk6KDQ1KS8rMSgpKywtKiY1Ki8mMCkzODoxJiozQmM6NipIZUhKKzpIPjNCSFMsPpBrO0dIj5yqq6KqsaSppbO1srW2srKhq669zLqtwLrHsbSttMHD0cXGvsCyvsDCu763u8SmrLarsre7wK+rsayfo6etqaiksKOqsqqwrLCvsK6rs72ntrCyqbOqq6Wlo626raqyw7q2rbupqaesqaexpaqko66qqKKfnKOtlaWemJ6ZrJ2ip6miraakrau4s7KiqqKgrK+xrJ6gp6epmaOZmY+gppeGhI6Ki56gjoqMlZqOjYSFj5SfnJSXlYaWlJOXpJucnIqSkI2Jf36HhXx2foWDhXJxcIh1a19aYG5iUXJwXEs7hHxGP1h1WGBaTmRbTlZWVVdRXGFeU09OZ1hXVktHTE5SSEVJVlJdYzxQXUQ8RkhIQkc/PUpQTDo+T0o9OT89Mjo3OyoyNT4xMDQ4NSg1LyosLjMwOyksLCclMjM0JCwyLTg2MCkoMTtcSjAuSmdERjg7QjA1RUtYMUCVWT1MRZWYraiiq7Ocqqqwt624tq+rpqurvcm8sL22wq+xq7PDw87Pw76/tMDBw7m/s8fDqq62rbK4vr6yra2qpKeqsKinqLGltK6rsa+usrG0rLS8pLezrKyvqKufo56wt6uqrbq3pbe2pKqnq6qqraGpp6axsqSnpaGhrJeqoZWboKaepaKrpK2jn6exuK6upKajm6qrrqmdoqWkpJifm5aPmJySgYKQiYScn4uKjouYjY6JgouXopuQkJuMk5KRk6OZm5mKjouLfYaBgYN6c3+Cf3xydYukh3hrX2BuZldkhmNOP2eTTEVieVdiWFJlVE1WVVZUT1xdYVVLTmhWVlZJSkhJT0JHSVNRWW9BTVhAOkpHRkVHPj5FUUg4Q0tFODdDNzI6OjoqMzk/Li80NjMpNCsqLCsuIzQuLSsmKCs3OSomNis8LTIsJjA2VlouMEpnQUE8PEIrOkpPXjREhj1HRkSXk7Cmo6uxmKuqrbastrKspqyqqbzAwLe4sru1pbKvw8nL0b/Au7m/vsG4wbnAxKyxtLGzur+9srCurKqrqLappq6vqrmwqLKyr7Ott6q4uKa0tquspamqnKOes7OpqKS0tKC3rqCqqKqoq6egq6ypubWqqqmpoqqgrZuSqqGdoKWipqOqn52ntK+pp6ujo5ilp6eqnKKko6CZmKCRjo+YjX6HjYeEnZ2Gg4mJjo2Oi4KFlKKajY2akZKRj5Ofl5iWjIqDf3SGgX+AeHSCfnh2fYCHnY9vcmdmcHdcYHKHak9emVZIbnlVZFZRY09NVlRVUE9YW2JVSE9pVFZTR1BZVUk+SUhPUVB4TE1WPTxLRD9AQTxAQ1VDOUFLPTU7RTEzOzo3KjQ6PSstMzQxKjgqKisqLCkpKC8qJiklMzssJDIpMjAyMSUvMlFiMDI/Zj1OWD5DLD5MVF8vSmk1T0Q8lo6xoqarr5qspa2wtLWwrKawqqi6vrvAsK25rqG2r8jHyNHAvr27u8G9usK/vr+tsbGxtby7wrGxs6qzqaS0qKWts7O5sKOuuLKws7usurCqrrasqp+qrJ+joLatqaGfsLOitaqeqKepo6qhoqytqL2vrK6toqion6yZkLChmKKhqKifqJyZqrGqo6CuoqGUo6Ojp5iaqKWYl5iej4qHlIh9jYaEhKOWhIGBioaOjJCDg5OfloiRnJCTkY2RnJSXj4qGhnd0gX98dXh5f3lycnhmf4akdmlfZGmAdGaIi3xTWG9eSnhzU2RTUV5NTVJaZk5NVllkWEdSaFJRP0JOUWFROklITFNJcVFMUzs8ST87PD07QEBXPDw/SDczQ0IxNTo5My01OjopLTMxLS01KSgrLSw0MiMyKScsJS47LiYxLjAtMTQlLDBMZzo0OF89YWQ/RjFDUFtbKkhNOVVANJGQs6Glp62kp6Stp7WzsqulsaequL7Au6+nuaqmr7HJx8jRw7y/vri9vrzIusC3r6+zsbm7uMCysrqsuKyitKeorLK2ubOoqL22rre+sL6nray1rK2cqa+joKWtq6icnquzpbSomqunqaOonaOpqKm+q7Swrp2qpKGvnJuzo5aknKWmoKWcm6mrpp+cq6Kck5yipZ6Yl6ipkpialJCKgo+Ffo+DgIidj4V+fYuHkY2Pg3+TmpOFk6GMlJGLkZuSlYeJfn9ye3p+fGh4fHlzbm97ZoR4hIlkYWdgcoR6bGZ4XV5UP1d7bVRiUFFYS0xOcnVdSFpbZ1lFVWVQRD5KT0RDQTlIR0tTP2piSlE4PUg8PDw+Ojw/VDY6P0M0NUg+Mjs1OTAyNzw1KC41Ly0xMScvPktIMCUaOTAlLCwwOS8sLCs2JzE3Iy0wR2pJMTRYPWZiQUo3R1NgVSo9OURXPSqQlbKaoKCqpqWhq6W4s7OmqbGmrLjBvbWvoritqKiwwsnJzMG2vcC0t7+6yLXCtLKytLG8uLm9ta25tb6toLOnq6uwtri1rJ++vaqzwbS8oa+ztaqsn62wo5ymqaqknpulsKewoJ+rqaehqZykqKGtvKiusa6hq6Okr56fraaXn5uhpJ2fnJqkq6Ocm6WllpeVoKOXm5elrIyekZGRi4KKgICOgHuZlIyIe32Lho+Ni4mEkpiQhpSjiZOSh5GakJOBiH15a352eXhjfHpwbm9xdmd/c2mEaGVnXmxzjWxgaW9gbz1aeWxVXk5QUUpJTVRaV01dXmxXRFdfT15QSE1ERjs3SEVLTzxyaEtLOUFFOzs9PTs7PUo0OUI8MztHPDQ/MTgtNjg7MigwOS8sNC8uPS0qSz4pHTQ5JicuMzQuMCsvNCYsOiQ0MUFoWTE0Uz1lX0RMNktWZE8qOzFOVz0jlJmtmqGYqKWkoKikuLCvpK+wqau4wbmyrZ+5r6uotLrIy8i/tsK+r7S9t8S2wrGtubGzwLS6vbeoubi9qqO0qKmqsa65saucvL2lsMG2t6KvtrWnpqews5+epKaooqWZn6yoqZ6gq66moKaYo6igsbmfo7GvoayhraScp6apmpqbn6WWnZ2bnqqnl5yhqpOZlJmfk5mWoamRmomOkIZ8h36CjX18oIyNiHiCi4SJi4uFh5OajomVnoiRlYKLlo2RfIV8c3B9cXR0YHp4aG1vb21ofXFie21pZWJcZIR+XllzanFKSX9pWFpNUExKSFBSUUlPXV9uU0RYWlJoT0hLRUY1NkhCTEk1WmVKQDZFQjk6Pj0+OjpDNTk+OjNARjwyQDIzLjo7ODMmMjwwLDg1QiopLUIqLDQ7Tk5AOzczLS4rLTcqKjwlNTM8ZmQyNE0/ZV1GTz1RWmdIKj4vV1U1KJeep5qdl62hoaGlobirsqW0tKmoucS1sq2ft62urbC0xsjAtr7BubC0vLa+u76vqr2wtL+wvMO5qLu6t6entamorLGttLGonL+4pq69t7KfsbewqaWnr7GboaSgpaWgl5uwp6Geo6ivoZ+hk6Skorewoaaxq5+so6+YnKqkqZ+Xmp6llJudm56nq5qcnqaXlpiWno6Tl6KoopCJi4+GeoR+hIp6j5aJjYZ4gYeDh4uNhY2TmI2PlpmKj5d+hpeMj3mBenByd29vdF95d2Rqa2pnZ4JsZXJra2RnV2Fyf15Za3VpWUV9XltYT09LSEhSVUcyOl9ebVBEV1VZZU1ISkVFMDdGP0tCNklKSDs2Rjk0OT49PDk4QDg7ODo3QEk+ODw0LTM8PDc1KDU+MSw7QTEoKzY8IzhSPSoxMTM+RDUsLSc0Mis7KzEzOWNsODRIQmZbSFRDVF1oRS47MV5RLDKWpKOYlp2qnqaho6G4qrChu7ilrL3Esq+uorWvra2vtMTEvbO+urews7m4uri6ra2/s7S4rr/Bt6u9urSlorOrqKqzrK6ypJ3Dt6aquLesn7K8qqelqK+rmaOnnKWmlJihs6aZnqWpqZyhn5Sln6S5qKSnraaepaGpk5+poaGhmZueoZObnZeho6ycnJujlpOVlpuOk5Ojp6SQiIqOhnmEfIWGfZyNiYqGeICDh4iHkYWUk5KMkZWUjY6Ue4OXj4p3f3xsdXJtbHNieXRnZmlmY22EZmdoZGZnaF1kYmllWmV6YmBQc1RbW1NLSUdJT1NAICpqXmpMQ1ZVXmBLSEdFQy46QjxGPDZLUEQ4OkQzNTc9PTg5NT86OzQ+OEBMPT45Myk4Pjw6OSo2QDMuRTQoKyw+MC1OPy4rLTctMTE5NSwmLjUtODA1NzZgdEIzQ0RoW0tXR1VgaEIzNzdhTCcyn6Slk4+mp5yfnp6ktq2oqrq3p6zDwLavrKK1rqevr7fBwL2xwbewrrK2tbm4tayqvLOvsrG9wLeuvLyxpJ+2rKamtaqrr6GgxayqqLK1rK21up6oqquxpZidqp6npZKZpa2jmJ2kqqGboZyXoJ2ntqWvqq2hoZ6dopWgpp+ioJmcm5yTmp6Vpp+uo5iYn5aVjpWYjI+YmqegkIeKioh4hXeCgoKch4qCiHt+hYiGhJCElpWPj5CRkJGNknuDlY6Fc399Z3lwbGtsZ3Vza2FnY2Jzf2FjZWZlaGhhZW5ZXVhcbGNhTGdXW2BWSUdIS01SWD45YGxpSEJVU1xbSUhGRUEuPD85QTg5UkZANzpCMDM3PTc2OTI6PDk3OjlETT1CPDAqPEA7QTwtNUIzNz0rKywvQSpKSy4vKiszNzIyKDU3JCs3LjcyNjg1XHlOMj5IaVpMWkpWYmZBOjNAYkYlNZ2koZKNrqGamaCXpbSyo7K+t6Gxxry5sLCjtqyrr6m5vr27rcCyr6+utq6zubKnq7mxr66ztru2r7m+rKWetaugorKlq7CfpsWhs6aws7C3rrWerK+srqKZnaeqpZ6Vm6emoJmlo6mcmp+blZ2drbCmuaeuoqGamp6Zn6OapZ2Xn5iblZqhk6qXramclZ6dlI2Vmo6VlJinp42MiomOe4F0goKLmIWGfIiIhIWKjIiShZSckpGQkJGXj5B/gY2Ogm+Cf2d5bmhsamdxcmtbaGNhcn9gZGdqbmtlaWVjbFxsbHVwYVNiaGNlWklHTE1PWVFQVWFlgVRAVlJaVEZHRkVALzw9Nz82PEZOYTg6PzI0OUAzNzgyOD83PTg+RkpARDkyLT1BPUE9MDVAOUAxLSsuNDw7SzYvLissLTI0OjUjMyopNi41NTQ2NVp8XTE6S2pbTVtLWGRjQEExSGJCJzSUo5yPj7GdnJShm6mzsJ+4wLagtMK7vbmxprawqa6luLq4uKy7sK2rq7eqtbmtpLK1sa+psba2sbO2u6epoLaqnqCqo6qunazEma+msLG3tq2snrGtr6qim52krKmblZympJ2aqqOllpqgnJKco6uqqbqepqSgl5qanqGPa6OWmZ1xg5ecpYF2kqypn5aXopKKmJmAl4qfjniFko2DbWl+d4RxbIaKhn2EioZvXWRgZ4SYhmuLkJSSdXiLhH+DkH9miIBodmlmWFxpdG5OUGpjZnGDZl1kZm5raF1bXYmQhYdoTktDOEVUZ15KSFBQVVZLSFJhcHRlRltRVVBGR0ZDPjE7PTY9NjwzZlw1Ojw3NTtENDg2MDpCNz86PkZMQ0IzNDM9QEBAPTI4QEU9MSwsMDg+RzcwMS4qLiovNjY4LCMxJzIxNDoyNzZYgWwxNU9rW05bS1tmYj5HMU5hPCsvjqSaiJaym52UoZyqrqyjvcWvqbfCuL68rae3saarpLi0s7Owua6qp6y0pbG1oqe4trWop622s660rrSiqZ+0q56jpZ2nqJuwv5Wop7G0ua2upKitq6uloZ+coainm5ihpaacnKeonZOeoJmQn6iqo7Svo6KjnJaYmZejiKGPkpqIoYiVn6J/pYCorZ+UlJ6UiYRyeIyOg4igdYeNaZeJZn5zeKBvh4eEfox8f6Ggn5l/fIiedIiOdpuKbIeCg21oZGR7bXJiVIZtY21pmHFYaXBuhlddaFpralqIcGx5codoh4RZXkZOPkZeTUVSVlZRUFJXVGdeTFpMUlJQRUZHPjw0OT05PDc7MDw8Nzk5OjY9RjU4NjA8Qjs8OT1GUUc9LjU8O0A9QD41OUdBODIqLzE8STovMDEuKi8oLTQ1ODMlJjIxMTU+MTw4WIN0MTVSa1tOW0xbZ189SzFUXjcvKI2nmISdrJ2amp2fq6qoqr7DrrK6vLfBv6qkuLGqrKazta6vs7arqaWxraW2s5ustba0pqeos7Gtsqiunquhs6qgpaWboqWesbiVpqent76mrKepqqynpaGfmaGoo5mZp6OkmJylqpaTo5yUk6SmpqG2pKOfo5iVlJiUnIiukJiViqqMmaOdhrGBpa6flZuhl3qC1Kh/h5TAm8Z4d7Glt5ZkgMCcv3mEhHmPg3yQkJHKcZa8nMV7cranupB7gWyXsauxeWhsWLGub2VpvJK8bmh6bXGP2H1Sa2K2sn1/cJR1mqGqkFZOWGFPVk5GVVxYUFBTi1tXW1BAXERQTkNGSTw8NTc9Ozo5Oi49Ozg3ODs5PkY2Ojc0PkA+Njk/RVJJOi41PjtCPD9BODpKPjUyKjIyQkUvLjMyLisvKS0vMTg2LSAvNDE2QTE9OleDdzExVGtcT1tNXWdcPkwxWls0MSGPp5SBqKqfmJ2epa2yqrDCvbK1wLW4v8KrprSurqmosLWqr7a0qKimtaWoua6csrK2qqWkp7KvrrGmq56npbOloqKgl5yioLKvlp+kobW6o6qooa2tpKKdmpqjqaCYnKmgn5eeqKiRnKeblJ6ip6OhsKOen6OWl5OYkpmFr2tqi46qf2iFloetZnGfnpWbqZdxrqGkfne6fGugj3axX2q0W6WAZZyQYGaBemZ/aXhqqWW+cmemjHaxanyxeHWRlGNtbaduXISgRWlnh5ZFdZxgfWZ7o6aBWF+Lq2h9j3h6aqg4Sq9bWFRtY1pLT1hfXFZWO06HUFdWL0lTU0pDRUY9PzQ2Pzs4OjkwPTg5OTk6PTxEODs6Nj1BQDY8QEhRRzkwNzxBQz5ARDhARz0xMy0zM0UzLy41My8rLyguMC46Ni8nJDIwM0IvPTtVgnYyLVZqXE9ZTF9nWTpNNV5YMzEbkqKVg62npp+jpauyuK20vb6wt8WyuLvDp6mwrLCpqrGvpLC6sKWlr7OjqrmpnbKysKOloaqtsKyvpqigo6KxnKSemZaZnZ6wqZicoqC1s6Grm6GtrZ+dmZeho6mdmZ6loJyZoaekkJ2jmpehoKyfpqagmp+hlpWRl5GahrWbtXmGqZq2mXeHs5u3f5SXmKyXf2uBpnqBhYaRlJJ3q2dqsVuse46HlHSJcI6GgH+IkJd4g4KKl4yDoI+FsHZ3n3Fra218i0+lWEhjY5l+Y2ilX3lxdVKShl1QqW5jcHuFgGGdL1KibltUa2dgTEtcZFhcWkI+sHdXWEEjTWlGQkRBQEExOT44ODo4NDs6OTw5OkE6RTo6OzY6Q0I4PT9LTkg6NTpBRkJBQUQ8RkQ7MDIwMTtGLDAuODQwLC4oLzMsPjgzMR8vMi1EMTw8U31uMytYalxPWE1fZlc3SjlhVDUwHJeglImzpqahrqmos6yqu7bCsLzDrbm3wqutra+vqK+zqqKvvKuiqLatpKy1pKWys6ijop2nqrOpsKimn6CgsJegm5aWl5ugsKScm6Sota+hqI+pp6qbnZaYoaapmp+do6CcoKOlo5abnpianqOrnKaanJqioJaTkpSTnYTVk5m5cbHCf8aHfdaUnLt9nJeoko6djaR7jYaigaWCeat5j51Wr3uJfp9quVq5d4aEfaaClHyZeqp5jp2Qe7FtjoR0kLuGb5VQr6fFilGgemNgqmJzcoZrlodeUrW0yIV+iHxjpDNCnXVdUGpoZFBAWGZZZGFKR0xqSlpTT1lmWkNDP0U/MDw8NTk8NzQ8Ozg9OjxDOkY6Oz42OkBDOzZAT0xIPDo8REhDQkNEPEVGODEyMTFEQi4vMDQ4MystKS4zMjM5NzEjJTUqPjM9PVF3ajYqWWlbSltQX2ZUN0g6YVA3MiWco5OZsaippbOqpbWopLy3wbC6wLK3tb20tqiysaSys6egr7apm6i6rqSwsaGytLGhpJ6eqKmxqbSpppyen6yYmZmYmJaYo66fnJeorbGpo56PrKKnlZ2XnKGmoZiioaKhm6KiqJyfoJ6UmZunoZynlZubn6CYkJKVkJ2Ism5otXKsiHCPp3K0dXS2e5yZpo6QnY2jfo+eo36wdYKQ0tJ1XK58hX+kbpuqpmqGhX2tfZiZkHuxc5Odj3mzZZZ0hZ5un2aUUsmLWsJcn3liX61fdnOFYZaIXVnKnW/AgHRNS7VTVcZkVVFqY2VYQU9qX2xpUFVGSDk9V1JbVllIQj9KPDI/OzU9PDU2Pjs3Pjw9QztHOTtANzs+RDsuQ1JKRz4/PElKRkNFRD5JSToxNzQ2QD4vLjI0MjUyLSkuMjYsNzQyJh82MDs1Oj1QcWg5J1dpXEFOVF9lUDVHPWFNNjIuo56Rpa+tpam7raa1pae2u7yyu7+4t7W8vLSmtbWjs7KjoKywpZinu66lsrGdtLiqoKWdoaqlsqisqqWanZuqn5aWmZmTlKSropiTpquxpqGVkqufpZKUoZylp6CVm6anopujn66aoJ6ekJaco5+dpZSdlZminpWZlpObhax8eKh3o4+Lh6pwrouEqISamqOLk5qLon2Sl4euhH+Bs1xyslOvfYKCo35x1313hH6PnYaZmnevhoqRnIh3tGGaZZqCgZVskluwV0uadZh5ZmCtXnZ2hmeXiGpdr3eVn493bDV5yK6zX0NUb15nYEVQbF9wbVZVTS5lY2hSWVA7QURATDo1PzkxPjwxNj85OEA9OkM6Rzs8Pzo+PkU5LUVVSkVAQzpNS0pCSEc+R0s5Nzw0Njo+LzA0MzMzLjIuLjE4Ki4zMiUhMDM3Njc9UGtlPiZWZ1xAPVZfY042R0JgSTo3N6CdlKC3sZmzwa2osqeqsrq4tLm+ubizt762prm1obauoKCprJ+VqLasqLGyq620pJupoKCoorWnpqqkmp6WpaKUlJ2akpakqJyUkKetsKWglJmon6KPkaKaqaahlZqmqZ6dpJ+tnaCdoI2Un5yfoZmYnJaXoaCUmJGnnoepfn+meaGPkISqcK2Ng6eGl6GjipiXiKOBkIaUqnp/i515cLFaqIOCiKB4dNh/dod0p4GOm42SpHyVkJ+Ee7JenGSgfYKVbpNcq1xbk3+Rf2hnqmNye4BqmIZxXataiaCPa25kT0pDoVxaTXRdYmZNWmFfcnRfSlU1SpqRWEhFPUdFQUwzNUE4Ljs+MDVBNzhAPDY9PEY/Ojw2Pz1CNy5IVkpFQEg2S0lOQElLQEVOOjpANC47PjAwMjE1NCsqMDUvNywmMjEoJCQ2NjcxPE9lZEEmVWZbPzFUX2JMN0ZIX0MxPTeinZqavq2Ys8Guq6yoprSwuLG1v7m6s7K5vKq7tqGypZ+mp6eek6uyqbCqtq2qr6GYoqCmpKS6o6OsoZeckqOglpWfm5WZoaGRjoypsLCmnZaap6afjZKkmKirqJWYqaifn6CkraOgnqGOlaGZoKCSnJeclZ2hlZePrJyPrm5ytHSpjHeLpnS0enW0gpSnpJOdjYmkh451uG6Le4uia2u2WqGGZZeXaKCip22UcrRzk5l/s2qFkoitanW0YZ1mom6GkmuXXK1gTqF8h5FSc6NseX9+bpiGb1yvVjycd2VUb24uW6dPYlJrZWJsWWJcYHB8Y1NZUT4/bG8yQkJAPk06ITdANi47QDM3QzU4Pz8zOzxDREJKRk1JRjYySlRLRUJKNklKUD9IT0NGUD08RTUwOzswMTAvNzUsKywzMjYvIzAwLCwdMjg5LzlOYGVEJ1VkWT4vVV5hTDVGTV44MUE4pZqcnrqjnLHArq6rq6e3qbivtcG1vbKxu7iswreqrKGdp6SinZKrq6i2o7Oorqqhl52ooKWruJ2jrpyWmZCmo5eOnqGcmZ6fkZOVq7awppiTm6yployTppqlraORl6uypKCeqKywmKGikJmhl6CblpuXoZOcqZ2UkKuZh9SUmrt1scSAxId+1pecuHmKkpmOmIqMp4d5orZ1fXd2woKasmGDunnAfHW4YrWBjIepfZaCrKlxe391vIinoGmdYaaOr6F+jHSHq32+bnO8dLKDdXiBim2aiHBtjaR0vV13fVthebxqWlZbaXleaWBkZmJteW9YW1lDQUBxP0NHKzRIIic7PzEwPD83OkI5OT1DNDxATlpeYGBfX19aUFBSS0VGSjRITFJASk5FRk9CPEU4ND05MDIwLjg3LSouLzE4MCItMSwzHiw7OjA4TFhhRidUY1g8L1ReYEs1PExbLTZAOaean6K8o5eww6+tqqqssai5r7fFsbuzr7ywrsGyraajn6SinJyRq6WqsqW1p62kn5aaq5mnrbido66ZlaGQpqCTjp2jn5mfmpCWk6+5sauVlqOnppSQlqWdpK2fkaCoq5+cn6mksp2ipI6moZWhmZuWlaSZkLCgkpWqn4WQmbaAkpKNuJZ4g5ObtndubG90b3mPhI6Jcp7Au7yae4GyqHCAdJG5g3yGhoqHjXuLho2XfaS7ub2cdXmzo3R2l3V0sHWYnmaGaY22dHJxd7aMXn95fYhng3lseWKLrHB0hX5YW6dpRGRZVGZfY11jUWdmcW11Qk1PTEQ7Wkw+SjM8MCA4PjsuMz1BOTk/PTs8QzZCVFlaWltbWlteYGJgXVNHR0g0RElUQktOR0VPRj9HPDc/NzA3MC85Oi4sLy0qOC8lJjIoNCQoPjcvN0tUX0cnU2JXOCpPXV09KztWVic9OjymnaGhv6aVssKzq6qorKuqu6+xxq+1tLC4p7W5rqukoqefoJ2ZlK2lrqqntqion5yWoaSerKW+p6Gql5WckaKbkpCiqKKTnpeSmJSytbasmJ2jpKKLk5KmnKarnZappaacm6Gpp6eiqKCRrJ6Xop6Xlpidno+wqZScp6KPa39qnKl5iXR/m492e2aIe72+wLpvkoNxlIVfcmpaXpuJYWOHj5ZsYH+UY22cdmKVa4CalZRlXmBjcZqJaHKMfIaUZmp+cHR4fn1iW3h0gWhQXG6EfHyLaldseoFySUpvhXBOck1EVlxmYExaV2ZjX09abXZqclJPRERNPEhJPEw+MiwyQT84LzU/Qzw5O0A7PUM+UlZWV1laW1tcXWBhYWFgXFVHNUNGVUVKT0hGUElJSDs4PTUxOi4xOzouLy03Nj01JiIvKjIsJTs4LTdJUl9JJ1NfVjQpUF5MKDM+XE8nPzI+qJ+oocGkmbS5tqOspq6nqLWyrMissLSttqS+srOooaSqnqOcmpqsp66kpbWqpJuYlaKcp62pvqippZWUm5agmpOZpqmokZ+Qj5icsLK+rJqmnaeiiZOSqZuopJycrJ+jmpyjp62in6mhma6blKagl5Sen52YsaWZoqiZnZKfnaSmm6ikm52anJuRl4Jobn1yd5GXlJCEibSqjYWYlY+KjJiXiJSViYOTk5CJjZKUmZOZl5qfoZqblJ+bjYJ6pIVsaXuQfYB1iYuCcoJ4eXZ2ioB8iWpzgXSDdWR3fXZrb3lsX2Jbb2dNWFlmal9XWXB6b21mU09GUzlQWk5STygrOktCNjM1PUBBOTpDPjxFTlNTVFZXWFpaXF1gYmJhX15eW1RLQ1NHS05ER1BMT0k8Ojs0ODksMjs4MjApNklSTzgiKSsvMiM0Oyo3Rk9bSidSXlQxMFReOis9OF1LLDwtQLKgs6K/oqOwsbegqqazp6WwtarJq62yprWmwKm0oZ+lppyllpahq6eto6S3rKCZl5agmK2qpsGfrKSWkpyXn5iUlaOfnqOok5CYqKiyw6+Zqpyqno+Wlqmeq5yeoa2YoZudoqWvpqGkp56smJalnZmZoZ6enbChnaKnlpmUmpSho5ekoJmhjpeVi4uOkJiuj3yVm4KRgYmpqIWAmJaLhI6fiHuEkYaFmpGHhoqVj5uXjpCYnqOWmZKQnI1/jWWhs66EiYR3e5CKfnd5em9neZGBgYlrdYF5iHJoc395dYOGgWp0YnhlX2hkY2Rmalhre3Fqa1xTTFBEX1VGQD4/LDRARjs0NTs+QTs8Pz4+SE5OT1BTVFZWWFpcX2FjYV9eXl1eXVhWSktMQklPTVJKOzw6Nzg2LzM5NjQuKCYkLTEuLikrKjclKzwoNkNNTEQvVFxRMDVNWzE3RTRcRzU8LECzoLmvvq2qrbGyoKqmsq2irLOwxbCrraSzr7yktJyhqKOhnpqXqKappqSms7WelZWempqwpq6+oayikZGempqUkpainJepnYSdqaujtMezn6mjqpaWmJqnnqmcoKWrlJ+fnZ+qrqikoqugq5qen6GYpJ6cn52wpJmfqZSZmZ6TppuZqp+cl2aEk31lf4+bkGN5jGxoanqQo6tqZZqYfmeFi2VlaWh6jaKOa2iMmJGjeGtqi5mjn5hzbG56hIyGeVhlXYWBXmyLioJ3XGdzd3eSgIiCb3eCeH9zbXmEc3aIh42CemiEWF1qc2Rdc4hpa3xxbWNdUU5WSWRYQEkzPUY3P0ZENzE8PT9BQzs7REdISElMTk9SUlRXW15gYWFgXV1dXV1fXVpVT0RIT0tTTj0+PT02NTM1NTU0KiYmJSwqJS4rKyc2KiQ7Jy9BSVtKLjZaTzYpRVkvRE8xWUI7Py49pJ66vbmvq7Owq6Wora6wpq6usL2xqqilrrCwoK2XoaSeopqap6ycraSmqKmzrp6WpJCjsKa2uaWuo4+PmqKak5KboJmZppZ7pKuiqLTDt6Whpq+enZWeo56jnaSqqJKfoZ6gqq+qqaKqnqabpZ6noKuWoZylsaSXnayWop+blKaZoKyZn369hIlztHOFn4ataHe5xLhxkqGjeqaYmXSrgn3LwMC6cYujh4OefZaYiJ7AvYKWnZ2NnMHBfIF6kYyawsB9aqWyb42Bb8p6f5t4koSPgHZ5gYB5cXuAhnB3hYuSeGx1kWJlXndjX2WAYl50aG1kYlhLVUlRWUhPRDJJRT9EQj4vPD8+QEE6OERDQkNFSElLTU5QU1ZZXl9gYV9eXl5eX19fXVxTTVBHVU5BQD89NjQ2ODI2NiomJSMpKiYuKyopMTAfOSojPklbTCojQ1AvI0ZbM1BZL1VBQjsvOJWiucO0r6+/qamUo7CpsK+tprK2r6qmp6axq6CrmJujoJybqqeinayjpailpbSknqOTpq6tuLSnr6KSkZmdppORoKGYm6CeiKarpKutv7+xoKivqZaRn52imaOkqqOToKGenayuqKqlo6Gkn6OknK2pkaSbqa6qnJ6rna6jl5iml6KkmJ1/zpR6e6WCepaXm1+tj12OqIChoXynlZt1q4OBr15kjKp7qIeFoHSXk4izY4KrhqCNjbNqhK90fJaHuGGCrVmjzW6Qdnvbe3+ZcX6Ik3Z/ZXuIdXZsfodtfYWPkH1rgIxfcGpvZmBfeGRbcWhqZGZgUlRTV15KT0M1QUhFRDg+NTtAP0E7PThAPj8/QkRERklKTE5QUk9TXF9fX15dXV9gYF9fXVtXT1VKPT8+PDU1NzgxNjQoJyQhJywmJi8oJiszHTYwJDc7U0wrLC1KMCc7XDpMLSFQQEY0LjGswcC/tLSwt5iekaOqqa21rKayrayspKymsKqhp5yappicoq+foZ+op6OmoZ+wrJuelqaurbGrqKyglJKbn6WTkJ+ll52oo56to6qwqL/Fsqepsa2Wkp6copehqqqflaGenZytrqapqJulpaKgqpKss5aloqqqnqSnp6KyopObp5yhnJaVkZehcoaMmHaGqIdxsXydcax9oKCBpY+eeKuCfq1/nXKtf6yHhp92mJJ7fJd+qoiijJGLnH2reoiSj59/eq1WnMR7kHCTwX2BlW11cIxtZndlhm9heG5yboiJj46DbI+NY21zdW9gZm1kX29pam5mY1dTXGBaUlJDOUlJQEM8PjxARkRDRUE9PDw8PkBAQUJFRkdFQENJU1dZWlxdXl5cXl9hX15eXVtaUkM+OzkxNDc4NDUyJiMfHCAxJyAxJx8nNB41LSY3PVdKLTwoPTEpM1ZARiEcRztDMS0rr9PGx7Kzn52jj6Oioq2vt6+psaeoqqiuq6unoqSdmqOVn6aroKKmoKioo5+esK2Ym5aop6+tqKepnpeVmqSikpShrZqdp6OvrKKstam5zLGspq2rlpScnaKZn66snZahmZ6eqbGnqKibqqejoaqar7GiqKuuppqnq6urs6STmKSnnJaThaRrpHWKeql1e7JxgqWKmIxwiKCbh6RfYVKrhYCug5x1roKohoafepmXhntmgKOKpJiGgaN9qX+BlIauXnuoVZ2ikoF7o5+AfMSwxYxzr7SzuXJiqa/CdWiLi5aNgGuXkG1reHh3bmtmZGRxcWZ7aWNcVl9pWFhUTExRTENDQUI7Q0BAQkk8PTo5Ojw9Pj4/QT04NjtETFBSVFZYW15eXVxeYGFgX15dXF1bU0lCNjc5OTY2NCwmJCIgJychKy0iJC4hMy0mQERXSCxHKzU2KjFQS0wjIEE5RDQsJ8LJ1dbAoZmrqKGvop+wtLCwqa2jp6eqq6uopKagm6WfnaanpqSdrJqirKGjn6+jnpuTqqS1sK+hqZuclpWnpJGboqifoKacsKWiqLGstsextKirqZWRnZ2imaCls52aoZScnqeqqqKtmqqmoKGporKsoaqzsqKcq6mxsLillJelqZqdk32qbZ+EiHareXywboKki4mflpWeloHSuLS4yYGCsl9hlKmDpYiHoHqYlpp5qsl0mqOUqKmQkpqMfpqJmsbGd2WhgqVzgZ+Ogn2vX2+1Y7F1S6OGbadHg5Nkjo+bkXtvlI98bXl0fHptW2VqcnFmgGleYVhjbVxeWUlMTEpFREJBPUE8QT9KOzc5Nzk5Ojs7OzMuNjxBRklMTU9RU1daW1tbXV5fXl9fXlxcXFxcWE1CNzU3ODUvKSglJiUkJiksNUZOUFBNRkxKVkYqTDAvPi00TlRRHRw7PEYyLCSopMDGua2psq6tpqKds7msq6Glm6imqqyppqCmpZiro5+vrJ2moa2an6mlnae1oKOYlKirtrOsnKacoJaQpq2Smpyno6Cqp66ho6epsLPBsbKprKeUiZidpZuipK+ml6KVmJylpamZrpyrpaSdq6O2rKGxubCenLCotLS1ppaZqaWcoZCDnk53moKAn3qEo3yCpISGpp+cn5SEuHx8ermCf8zGw7Z3m6KRi59+mZeXinafl4qkmKSofq+Fm4OehKx9mZRhpWyjcI+FkIF9loRyrGCkc3GAmmG8fVJVdY2RoZV6fJCOh3J5coR+b1tsbndyaoFuWmNfaG5iZF1MTFFTQUhHRkg6Oks+QjEwODg1Njg3Ny0qNT09P0JER0lMTlBUV1lZWltcX19eXV9fXFpaWllVU09IQDc3Mi4sKi4rKicmP1FUVldXV1lYWFdVT1RGPEUyOlBbVBwbNj9HLC0gjIeZqaykq7mrr6CboqyztaafoZWlr66uqKeepaWapKehs66iqaezoJqppJSjtaOjlZehqbW5pJyjnaOTkKKymZ6bpqWhoq+tnKSoorWxw7CtqaypkYaRnKedo6ScpZeemJiZpaOnmK2hq6Kkl66lu6yit7aunp62tLqztaiaoLGjpqCIkNK1w7d6h46FkZOPgKZ4lKJ3jKGShaWDi3Krh4a0bnJpmaSdlYmffZeZh4eQc66CpZujjaaKk5yIlJCabXCyXKVzk3qcbJl/e5l+bqlhonJyfp9ic7K4aHeOkqSXfImKj4h1e3iNgWxod2l4c25/dFxkZG1tZmhgSlpXWDxIRj9TM0BGPjwqKDYzLjAxMykmNDo7PD0+QENFSUtOUFJUVldXWV1fX15eYGBdWltaWFVSUlFGOjIyMzAvKysoQFFSVFVUU1RWV1dYWFdVVVZUUU9RW1UlITJBSCMpJZJyjYquv7+8u7Wel6ikrraiopmVo6qnramqmaWin6agoLWmoqmnsaSUq6OPpK2knZCamqq0tKSdpZypkpSXr6CgnqajnKectZmgqqO1qsKvqKqooYyEj5yioaajlZqanJiamKajpZepp6ugo5uspryslb2wrZ+jsbW7rbapnqu0pqqafKiRfXyweIuApKWInG2yb6GHrXyij4Ool5qBrImGrYWglKigo5eFn4GZloF7kn6rgZ2Zlourd52gj4iTkn95r12jgXymp2SegHyXdWquXaVscoWZXWBbjKBtlI+kl4GSipOId3mBln5pbH5ifXRtf3lfZ2Vwb2dnaEJZX1o9SlMyUzhBQUM3JCQzKycnMywgLzY2NzQzNjpAQ0ZJS01OUVNTU1ZaXV9hYGFhYV5dW1pYU1BPTkk4MTUyLiosQVRWVlZVVFVVVVVUVFVUU1NWV1dYVlVWUUhGSUojKCi8kpuEqcbDt8G0n5qtoK65pqOOmqOkoK+uqZ+jnp2tmJ65oKOrobCqmq6hkaqppZaKmpCtsaynoKibrZiZj62ioZ6loZmknK2Xn6iltqi+rqSpo5+MgI6bm6CmnpKUmZuUmZmlo6KYp6uqoaKeqKe8pJfDraujoq20vK2wqaO2sautmnevfpGLnIWHfLqtiZhksIxllq59oZCEp5ecgq2LhbCGp5qkoqKRhaBcbGuCs2B/rXx7goGybGZumZeLiLFafbRbpINryKJmn4F8u1l2tVqyfVOvgXqsWIChbZeNppiIlI2Sk3h3jJt9Y3N8YoN3dIB8YWpmb21mZWVPVWNcQVRdPUgoPjk9NCEhLCQfMi4gKjEvMDQ1Nzk6PEFDRkhKTE5QUFJUV1peYGBgYWJeX1xbWFVQTUpHQzU1My4vQFVZWFdYV1dYV1dYV1ZXV1dXWFdXWFlaWltcWFdXR0I70p+zsbe+u7TBs6Ocraalt6mgi5mgn52ysaieop+dtZigs6iqq56wrZ6snJWuqKKOiZuOr6ypp6Oomq6Tmo+pmqGdpZ+Zo6KlmJ6iqLGou66kqJ6dj32Lm5ahoJmQkZqckZmXqJ6fl6etpaOkoqSpup6gxqemqaGstreusKmhv7CwsJiCqpKjr46bgIakl5iQgIC4w7qEj52ThaiZnYOsi4Oviqicm6arkX7VvcKqYqS/vX1/o4KD17q3tYSUkoKevb6EaqOBb6uEbp1/erKxx4Nrq7G9rHl4or67dICVjKSZjZiNk5l3f4+ZeWJ8eWSMZniBe2BrZWpqYlBiW1NpXEBUYEJMKTw6NC8fHyQeJTIgHCQoMDQ5NjY3ODs+QURGR0pLTU5OUVRXXWFcX19hXmBbXFlUUU1IQz48QT81PVNZWVhZWVpZWlpZWFdXWFlaWllZWFlbW11dXFpWWFRXWruVtLSxwLmyvbOina6nprOmnYyXpb+ptq+nob+mprGbnrGcuaifrq+lp5WUr6yXjIOaka6mo6yhpZyqoJiKo5OmnaebmqCoopidoKusqbisp6Oal5N7iJmSppuTj5CYmY6Xk6iYnpaoqJ6opqCiqrqeqcWjobCkrLS2rLKso7+rsrKcdXaqpbeFZYqgcGeskIqPbm53pZCboIJ2sZuXcJGOcpeppJuYr6RybG1tZot4b22DmXGBemlwaWeJlpWXcWhphYZncYZkXYpjaW9aXWd+eKZgYnKQk3BmZICNko2glZWXjZKaeoWNk3RkhndnjGp4fnlkbGNmbGJKZVdKa1k6UGREUCdKOSsjHCAaIiwpGBsYLTIuNTo0NTc6PD9BQkRFSEtMTU9RU1ZcV1pcYF9hXV1bVFBMSEQ9OkFCN01YWVpZWVpZWFhZWFdXVldZXV5eXVxcXF1eXV5dW1tVV16ola20qbq5srSqqaKun6SzqpmSvbHDx7y0qZ6/q6yjoKeroLqjpK6sraaOlq2qkIyFlZatn6aqop+ko6CRi6WSppmpmZajqaCWnKWlpq65qqyZmpOSe4SXjqaXjpGQl5SNl5Smk52Wp6KZr6Wdoqu5n7DBqKW0p62xs6ywrqq8p7G7mIyiqaa2nImXo5iGqZuQlJ2SqrSanKStorSYpKOfoqOeoqWilqynjJKTjYeTnZ2VkJmTmJCNlYR/pJqXlY6Lk5KKkIeEfmeMgXSDd3SHjHGnbX2Wk5SUgYGPj46Nm5Gdk5STnYCFkotwaI92b4l3dnx5aWxlZG9jVWFYQGlaR2JfTVgrRT0rJiE2NDAvHxwgJTIoKjc5OTQ2OTs+P0FCREZKS0tNUFBRV1VWWV5fYWNdXlRRSkVDPjk9QEFTWFtcWVdYWFhYWFlYWFpbW1xeX19gXl5eX19gYGBfWVlgpZapqqS1t6+uorClraCgtrGRjqrEvMO5tqmhpJ2bpZ2wqKS3p52ptaeokZiso4uIiY+cp5atpKGaqJ6fk5Wkl6iaqZmUpqCjj5qnmKC0uaeqmJqQjXyBlYyhlIuVkZWQj5KXpI6dmKiemrSjnKart6ivwq+kuKewsLKvq6y2vaOywJqTp6SmtaKSnaefjamfjZKfoq2xm6Kks6uzmqajnqasoJ+enZetnpOaopyUkJermY2YmZeQlp6Rh6CelJSGk4yPjZWMgX9mjYh1iHd6iYR0nGqIkpaVkol9jJaRkJaQnpCZkp2BhpaFeHGUcnmJf3F7fmpvZF9waWBcX1ltYlBgYk9YOUZGRT0yPD04LyomKykmHSY0MDY2NTg6PT0/QUFDSEpHSktMTVNTU1VaYGBpYGVWUEpBQ0I7OUVNVlteXltaXFtbW1xdXV9eXV5fYGFhYmFhYWBiYmJkYlxbY5iWpKijsLOsrqOpp62gqLWqkI+bo7K5raqroaKZepyhsKSmsamXnLimo5SYqZyOhoqJm6KQr56klqigoZKXmZyui6uWj6iZp4yYqI6duLWjpZibjYl5gpSMm5OKlZGTkI2RlqGLnJ2nnJ23on+DrrWisLB1pL+ks6F5e6Kttb+XeLCmoYqAqn9kXGJ3oI6knoOWfm2UtZ2kqbCspWagoZR0epuYcIGZqplsf6SpimWcpZyRl5iXi5KbkISdm5CUg5OHjo6SioV4a5CIdodxfIaBgWFpiYyVk4xbdpWRZ2eOjHF5oZWVZHiXhYB2l2iCiYJueX9rcGVfdm9ra2dcZWNhYW1RWT1NTU5SRj1AVEI5MS8eHyY0OjMwNjY3ODw7PkBBQkZIQkdHSUtMVFVVWV1gaGZnWFFJPERHPDlVUltgYWJgXl9fYGFhX1xdX19fYWFiY2RhYmFhZWRjaGReXWaclqajobCxrKuqpamuo6etpZKVqrSusKWZqaWql3OLnK+gqKunlJe5oKCPnKSekX6IiJqejayapJWnop6Ol5KehXWuj4immqiRlqOIm7mzp6CYmIuJdXeTjZaTipOQkJSMj5OfjZmepZibsZWAjJu1nbSMko+9qKJ+p6N7pbG6g46PqJ+EjIaPsamvjIqWopp5gIushp2eo6mrqYmWh5p3ppx7iJyBmKeDgXuds3uKhqCYmZSYloGQlpaDmZpieYiRhI6PkouEbnGQiHqCcYGBhoCHdIiFl5N4lmiTdKCac3uZgpyZhJh+kYiBgphpjIyEanh7cXBnZXhuaWxqXGRpaWRxWlxHU0tRQEU1LVlUVDYpITA5PT42NDM1Njg7Oj0+Pj9ESUBJRUpLR1JYWlhbYWFpZllRSDlETDw+YlZeYmRlZGBhYWBiYl9dYGFhYmJiY2ZnY2JhYGVkY2djYWFonZikn6aurquoraCpsaenqqWZk6zEvK+glKWntJ2Pg5ysnKeioI2Qvp6ZjZ+aoZF9ho+Yl4isnaOWoaGSjZSJhoCRqI6Hopyjk5adhp65saedmpKOhXB1kImVkIqUj46bi46RnpCVnqOUnauHn7SJtJqui8qIq6+Kt4WNsISzsoapjqmZjZ18qI9ye3ecjqaWaJWkebSMoaCoqpOZwoKAq4mZoXKegJulfZeFlbOBoX2hk5+PmJiAjpSciZiSi3yFlIaNlZOKhG50koaAe3OHgYR9hXWGg5iBj8VmgKmHj6JqnYGel4CZgIqMg4iYb42ShGd3dHt2Z2h1cGdoa15ibmxmaldkRVxQTDJFNDZNYGM3JjM8RUdEOjYzNjU4Ozg+PT0+Qkw/TklKTENQWl1cV2JeamxcUUU9S01ASWRYXWNmaGdiYmJiY2NfX2JhYmNjY2RpaWNiYmJlY2FmY2JiaZWXo6CwqamopqygpbmxqqummpSeoaSpoZSjqbWir3+gp52lnp2JlL2ak42gkp2QeYOWlZGIq5mcm5qihY+MdpubjqCRiJ6jm5aYl4aiuKylmZuMjH9ibY+Lk5CNj4uMl4uPkZ6Nkp6gmKCnfqGnh62doJaukKCenZGHgqGNrbKIpI6sm4yafqJ2gJmUa4GrdU2reIeNnZOcqqmCqqt+hKF8e6dqnoCTbGeXhpi3iZ5+bmBjWIOXf417ZGeLc5l9eZdsXHyXbmBTcYVcYG16hGBZZYJ+hYGZcaira4OjbnKlb5+CnGdknmxabIh6ZVlfgn5hV1BvdmVudHFqam9daW9samdXZk1cV0U5QTRHQ15rNCtJQ1FNTj04NDg1OTs2QDs7PkJPPlFSS01CSltdX1deX2N1YE1FOk1OTVRiXFtmZmlpYmJkYmRkYmFiYGJkY2FiamtkYmRkZ2RiZ2VhY2iYl56guaGqpKaskqK2vauvopmWnqClq6ufnK20oaeRoJ+gp5yZjpm0mZCLnoyVi3WBlJGNiqaWlpien36ThYWso4eckYqYqJiZmZGHpa+mopWZh4mAaW6IiIuOjomKjZGLj5Ghi5Kdn5qhpX+TgY+joZSgd5yWkKeDo6mAhqywh6V6jH6Emn2icHOTh5V7nox5bYecjJqSnKqcj4edfYOidHemZ55+d6VemHt9k3Oibpi3tLpzk4iBgLaoZIHGuHxxlbaMcYCbo2N0rKthfmqds35ufoiDj4OMmHGAo2xyo3Kegn6jXpyZs5Zve5ees3RyW56ygmlicHR1cWhvWGprcXBkW2ZcYUtEPUQ1UUFZcDI8UkdfSlI9PDM5NTo6NkM8O0BJUD9UTk5RQEVfXltZWGBge2RJQzhMV1VWY2FaZmZra2JiZWFkY2BhYmBkY19gY2tuY2NkZGhkYmdmY2holJaVo7mZq5yToI6luLatraCaoZuio6SsmpqxrKuSl6CZoaWZmpSerJuLiZF4i4VxgJaNio+hkJOUnZd9kYqOqKCGmI+KkqKTm5qMiqinpJ6PloeEfmt7h399j42Di5CQiY6Tn4GVm5+boJ+LiXecmKKNoHKhjImpiZ2okZiqroGujH56oJl5o5N4gHOXiIycfZWfh5uOmp2oiKNkoX6KlpCbjW2eaJuOb5qZe4CKp31yaHSqg56Dc6pnlJpdm4V2hJ1oqmqBuGZcqXCBnGGVjF+ndneKioCdaJp1h5OSmI1+nm2ZkGqmmVyofne7an2pWo6EXbNnXG5xeHdraVtwaXd3YV5jVmFBUEVPN1ZCUm00SlpaXk5aREAxNTE7OzdIPzpDSFU/WVNYXT5EYl1WYFFhY3xpRUI5TltdWGRmWGZmbm1iYmVfYWFfX2BgZWNeYmRvcV9kZWVrZGNpaGdraZadiaq2nKiJY5WcrLuysKydpZuap5+drJmdsKeqnZejmqKgmZaWoKOZhomNaYiAcnuXh4yWloSSlJiPeouElqSciZWQhoudkZybiI+ooZ+ai5CKgIBpgYZ5f5eMe4iNjoeOlZl9kqGeoKGTmHJon4qgj4xwko2DqYmaoaWqo6p+sK2koriXdqOzoqN/iJR4nXqqmX+ij5+dmYmYcqF9h42wtX1smpGheH6ZtaOjq6iEmXyafJyaf3SqWl1ve5eMeJ5iTX97e4VkephCTZ9ZompzfI5vgoqEmXabeYeJsbN/fpqSpnR+nW1xfJRvmXJpo12VdkhlY2BzcH19bmVfa2d1emJiXk9dVlxUVkBZRVBmRFJWXGFYXklEPUI4P0E6SEU4TEVYQVdSWlZFRmFcWmBLYG19cUVDPFVeYlplalZnaG1vYmZmXmFgXF1eYGhiX2VkdmxeZWdmbGRlbGhobGmUnYGxrpqEU1+hp7S6s7OpmqKLmqmbm6eSoKujoKePnp2dmpmVmKGdloeHiXeFgW55lYSQm4t9kZOWiHKBiZKhm3KSkIGImJSfmoSOqJuZlYqKinyDbISFcYKhjHiEjIiGkZiUe5Gin56jiK6GfbWEj56de6aWeqmCl56RjKOgf6doeG5+mXOgc3F8nYWYb5OCrXykhKefm4OkcF6paHajZHCmYZ3Tj3x7mXhyc2OihpB+onKjkHZrkLOLYIKYinSqsqi8f3eDbn+/pqq0Xpxvf3KXcIJzonJepGd0pmBopmya05h6gptudnmXa5t5dpdybKmlZ19keXF/hGxoZmNtdXZmXmBRWmVQUWFIVklUX1dTW2RqW2VQRUNLTEpLQUpEOFBAUE1YU1hPU1FgZWVpU2R4eXdJRkVjXWVaaGlTaWhqbmNqZmBjX1xdXV9oYmFoZXxkXmRnZGtkamxmaGxomJt/saxUXUt/qrCytbCzopyYhJemoKCijKSnn5aoiZmYmZSZk5Kgl46IhXtwfYRofI+Dk5qCd5GOj4pwgIaPk5JsmJR8iJGSo5WDjamZk5KKhIl5g3aIgG6Bn4Z3gJGFh5iglXmSoaOZn4mzoaK2i3qsp6SupXCpgJuRhoGelH6lgaOahphxnoSjra+Jl4t/jKSNlYOvo5V3tba2yaJzlIyDn2Cel6lteZaHoJt1oYd4oH6QlouBb01mo5JxmohzpXt6dWKDgm1+oGxyZGCcc390l2t7arS2tMamc5h9eZxqmpqrdIGabHN3l2mZeXSXcVBEfbNeanVreIZma2Zic3RvbFVbUlhnT1JnSVVMWFJVXGdrblVnV01KQUpNS0dKTkFRSlBkY2ptZXVzc354e251iXp7VFFObV5oXGtpUmpoaWxnbWdjZV9cXFxfaWJkaGt7X11kZ2NqZm5tZWlsZaKdibCohWVAlKKyrK+vtaGij3+Wp6Gho4ukppybpYKZl5eOl5CQm5OOiIN5a3mGZYOMf5afeXWPiIyCaoWFkoSLhZ2NeoyKlaWSgpeolouRi4CJeoB9i3lwj6CFeYGUhoiVnpR+k6Smm5WWg2dueJxsomR8cqV4nJhwaKeCmY59pXuhl4OWcp92gYmUlY+5bY+KomJ9maOXiW5za6trdaBub6Zgm2mLkGmWh5uVdaKBfppgi4aNdW+IYmihZp5/apt1cGRniIJvcqJbX1tkoW5eiIxxfIB0cmSlbniiY2anZ5dyi5dtoW9SiI9uoF5kp1SLXVSYbW1ya3GBbXBoa3dzam5RVlVVZVlTbElYT1xIWGhocmpZa1ZQUkVWXE1YU2FVaGped3V7fHB9fHKCe39zd46Ag3deUXNhZ2JwZ1BraGhrbG9oZGdfXV1dYGpiaml2dV1cY2hjamlybGZrbWOdpZmmemV0bYunrqWpsLGln4t/lqmcnaOLoaGaoaKAlZmTjpqPi5eQjop7hnGAiGiLinyXmnN0iX2QfGWDh5WKiZWagnyIhpamj4Chqo+FkIqBin2AgI5zaY+lhH2FkoyHl5+NhpGppZ2JpniWm36liZaMspmekYSvl5+leZiKe6l1qJCEmm6looyShIyDvG18pa+Ch4aHlZedon6mfHKolaGWaJ9+b6xjloqWk3iobaqjgYl1iIJ3q5GmiGuSsWx3s4ypbIuGb2+gnpKVYn+rjKp3gYCOp593n32FpJWdoGiah3WrZp6tjLZzdr6Mo5NZg6aNq2F1cnRve3VwYmp9bmdsUlRYVGBgXGtMXFJcSV1sbXZfW3FYW19aZ3NlbW9xY3F0YHd6fnlyeYNyg36Be3uNgYKAdmJ5ZGNuc2RSbGdnb21yaWZpYV9eXGFqYmxse29cXGJpYm1pd21nbG5ilqarnYGAnqSWqqqeqKeto5iIgZapmZ2iiZqknKichIyaj4ackYWSjYyMdIV6iINvjYV+l5NzdIZykYNuf4uSh4aUkH17goWXpI1/paSNgI6JhJR1goeTbmyLqICCi5ONiJueiIuSqqKgj4B0lJeIfoF4lK+kf4KccY+GeZOOhoF7c6mNcn19epeWm4SNeHt9fYiUlZOLd5GZoaKFe3+KbIyGXHp5c3pxaW9+k4pxgHSCj5STcYaEgmWNf1+BgYx4dnOUdXB6b2+Jb4WGX3dpeI5mgoOGj6qcf3R9lmmJiG9+dXyDdW1sZoxzeHuXd4Raald5j2lud3Jxb3d4b11rhW5oZ1ZZXlZcZGpjVWBVXlFfb3d5a2p3ZWpqanV8cHF0c2FvdWJze4F4dXmCdX+Af4F5i4WCfXttgG1keW5eV25naHVreGppaWRcYFpjaWVscXVuWltia2Rsa3ltaGxvYY6Vuqmni6Gim6ekmaSdq6Gfg4OWqpCdn4iZppqomIKBnIt+lpSHjoqJjHKCfI58fo+Ee5eOdHKDcJWGfH2Si4aGj4Z5foCGmKOMe6afioWPj4SVg4aOmHdxhKqFjZGcj4eenYaKmqigoKuDiY2Vm39+ipetqJCTqJF4cZ+ThX2UcH+rh3F+lXFqb3yBn4t/kY6LaG5dhI2NnJ2gkHOXjYlydWyDdnSAWXJvh5GCfn+Mal1pZHuFhIiAYGl4e5x8hI2DdoKHhGl6jIlsYnFzg3dfc42DipGolodnjY6CbHaKgm6Di3dtZGVjeoJ6lVpbaWZtdlt7eXd0bnNyg2ZcbYlra2JZWFxZWGpxWl5gWV5dZXJ9enRvdGNqaml7fHJ6dnRkbXRobHt/dXp9e3l5f4B/cIaJg3t9c356cn9oVFxyaWx2cHVna2dkXWFZamhranFybVdbZW1sZ3J5b2hqbWCMjKuxoZCjoZqfn5iemaihoH2ClquMn5OGmqGRpJV/e5iFfJKZiYiGhopyfICLdoWLgoSWinJvgHOYhoR+k4ODhoqCeoCEipqfj4Gln4Z3jpeIlYuLnJeEg3qsgZCXmJOJnZyGh6Gqn6Kio4uIk5udo5mWq6Kop6GTnImZkX56kJCGqX+Ak5GSk5yxpZqUnY+NsZKYhKaOjZadoYqRnYSJk4tsfY53d2aDhpGLfYmehYeLj4iIgYWEkXd8e3WbpIqHi6CMh5Z/gI2DgXdxdYaEf3iJiIuRp5GEh46HgouPinqFiYeNf3VqgIN8eZlpcWhgc4pwfXt3dm93dIFdXm+GZ25fXllaXFNncFVjW1thbGh0e3tybnBjamlof3tteH5waHBwbGaAe3KCgHd/fX+Ee22DjIV8enl8fnqDeE5kdmpzbnF7ZGtlYmJgW3NmcGZycWxVXWx0bWh4enBnaWtljYieup+Xo6GYlZmYlJikoJx6fpepjZ2MhZ+cip2WfHmVg3uOmYmGg4SGbXiAf3KAh36Ik4Rta356l4eEg5B+gIaEh3yHg42bnZKGqZ6CcoqPhpKSi5yRfI17qYONkZeVjpuWhYWbpp+imp2Gg5KamZmQmaahpp6ekJeCk4x4fYmQhqd8fY+QkYaYqqGck5yOjamNkoCejYmUm6CEj5iAiI+EcXmGcnVhf4SQh3aMmYGDj4KGhX+GhJVuenZ1lKSMjYabhoaQdYGMfn5zc3yJhXt5jY+FlKiQh4SPgYKJiIh0goaGiHltanx/e21oa2xmXnl/aHx7dnR2dXt3XGBwfW50YGNaW15RZmxTZFpdYGpodHl+cGxsY2pqZ4B/a3J/a2t0bnduhHluhoB2goB9hXdyg42Hfnt7fIB7gotgaXtrdWhqg2RqY2BpXGN1Z29idW1sVGJxeWVveXpyZWptbYuKn7iaoqSfk5KWl4uan56cenecpJCbiYakk4qYmXl6jYV7ipGDjIKCgmx7f3hygIV9ipB8a2h9gpeJgYiOfH6FhId8j4CPm5uQiKabf3CLi4yShqChioWMfKeQh46RlpKWkneMo6ChnZaaf4GQmpiTjZqjoqSbmJKcgJCHe4GGkYmhgX6NjY98l6SgoJKZkI+ljI+BnJKKlJmdf5OTf4iPgnZ1gnF3YX6BjoZzipZ9iIxxjH6ChYaPaHhyeo6ak5GAmH+JjHODiX19cnp8jYZ8e5OOhJemlI2GkHuEhYaEc3+AhIV4ZHB6fnh5cGtqZl5+c2l8dXVzfHOAal5gdHZwd2RjWF1eUmloU2RYXl9naXV4gXFma2NsZ2V/gGptfWdtcGp9d4V6a4uBcoGBfoF1doKNhn98eoCBfX+PanKDbnRpYohobGJfcVZ0b2xtYHhobFdqdHZjdHp6cWJrb3mJjZ+zkqWmnY6QmI+GnKCam3t1o56Nl3+MoYqImpZ4fIaHfoSKfoiCgX9wfnp0dYKFfomQd2djfYaXioKKjXh9gI2DeZaAlZeVjZafmn1vi4GRk4Wlm4eMiYOmlYSRipWXkpF2kZ2hoZiUl3l/jpiXjpaanaWempSVnXuSiIV5h5iPn3+Cio6Mc5einqCSmI6PoYyMg5iYhJSXmn+Zjn2KjoJ4cn5ue2SAfIuGcYeTgJGCa4eDgYCKhWZ2cH2IlJqOfpR5jYt9gol+fHKAeYuGeoWSi4yZo5eChIt2h4OBgHR4f4aCc152d3xzfXZma2Rgfmprd3NzdX1xfGNjYXNudXJtYVlfXVprY1JiV19fZ2p0eYVwYmpjbGZofIJraHRobG9of3yBeWyPhXGAg4N/dHyDjYGAfnqCg358kG11iXR0bWaKbGpiY3VWg2lwbWB5Z2xhanZwZXh7eXBfcWyFhZCdr5inqZ6OjZeHhZ+TlZd8dqiaiZh5lpyLjJmQeHyBi319hHuAgoF4c3h5c32Ag3+IioBkXn2LlId/hYd0fX6Kf36YhJaTloyjoJd+cod7k5GKpo+MjoqSoJGDkI+Tl5GKgY+YoJqSkJF0gI6SlImdnZ6nmZiOlZd1kJGLbYiakZt8iImQiW+XnZqikpWKjJ2LhoGTnYCUk5aImop9i4qCe3F6a3ZtfH+Mf26Fk4OUeG+ChH5+i4Flc2p9gpiYhYCOdZKKhXqJf3d5gX6HgX2Ej4aNlaWReYWCdIiGe35xcn6EgWtgeXR5cHxuYW5iZXtibm92c3h3c3RhdmBvbHVub1xaXl1daV1PXFdiYGdscnqIal9pZWpjaHeHbWZsaGlsZ4B8endukIhzgIOEfXSBhol6g316gYR9fI5yeYt4eG1sh2toX2lyYodocW9ldmdtbGF6aGp8e3dwYXdtioGZmquhpameiouRhomeipSWfHasl4yWfJ6TkZaUiHZ+e4p8fIB2d3+Ab3Rzem+FfYGAiX58YVx+j5KGf4SEcnqAhnqPkYeRkZuSpJuTgX2BfI2KkqOJjYqNlpqMhZCXkpWNiIiMkp2Tj4yNboSQj5GJnpmioZiXipeTcIubhmeJm5CVe4qFkIpwlpqUoZGRiIqYjIJ/kp9+k5CUjZqQfIuGiHRzdWtxb3Z9jHVvhpGOk3J0gHyCgol9ZXJuen+blX6FinWSjIJ1intwgn+Ch32GjYuFjpaqjnuIfX6KhHZ8bmx9goBhZndzdG56YV5vYGt0XnBqe3l5bHJwZXlebmxzbXNYWl1fYWlaT1ZXZGJncHF/h2VdaWhnYmdxjW5jaGhlaWeAend1b46Fc4GBg3x1gomFeIV8eISGeoCJd3+Le3pyeYNqa19waHR/a3FubXFnb2tle2Juf3p3cGt3d4l/o5mjqKGnm4iMioGPnYaSmnR/qJORjYagjJWTkIBzfHaFeHmAcnN7hWtyb3ltiXZ/gIZucVtZfpKNiICBgXZ1gX9/oIaPipGcl6CTlneJfoCMiJydio+GkpeWhYiUmI6Wi4qNjoydio6RhG2Ji4+RipyWoZyZloaZiWyHpYVniJ+Mk4CNhIyBeJOYkp2RkIiJlI1/fpCZfZKOkY6bk32LgYRwdnBsbm9xfIdqc4OPmIpxeIB1gomDemd0cHeCm5B9ioV7lZN7eIp1cot8h457i4eFio+cpYl8hHaBiX53d2xofX9+W3FycW9vdlleb2Bwal5vanx6cW5tam13YHBva3FtWVhgYWFsV1BSWWVlYnVvhIFhXWttZGNla5JtYGZmX2dqgXVycm+LgHR/goB5doCLgHmFfneHhnaDhXuHi397dop/anFifGKFfG9wbHVqaG5sdndfcX55e3N1c3+CfqWWm62fp5eFjIN+lpWDjp10iZ6TkoaKmoyVjox6cnh0gnByhXRxdYhsbmx0bId2g31/bW5VUYGrlIeCeIB2coN5gqCCkIGTkpibkZl3kXqCjJKkmpOOiJSYkoSFlpiLk4uJjo+HnYSRi31yi4WIj4icmZ+bl5WBlYBqiJ+JaIiiiZSFkoSKcYORl4+ajY+Mi46Nd3uTkXuPjI6TmI18iX2BbHdqb2tsbXuAYnp+j5eBd3qBeIONfXpodW12iZeMgImHfJWRcnuGcXiOe4uOe4l/hI6Rn5+GfXx3gYp8dm9naX5/dl12bm1rcHJVXW5icmFfbW55cGhwZmdzdWhwbGF3ZV1VZWBgcFNQTltlZF14b4h7XlxocWJiZWWRaV9oZVtnb35va3Fzin12fYWAdXZ/jHl7hoB4h4NzhoV+jIyEfHmVeGdyaoNgh35vb2t7YGltdH90X3R8eIZ3c3OFfHmhkJqxnKaPg4p/gpmJf4qcfoqYko6EiJeOjo6Ed3R3c4BwcIVzcHGDb2ppdW2Cbn18bXVzUk6C38mS1pN8cHSDdYOfgpF2lJCYm5CZe5NyhZCfoZOTkImSm5OFfZWVh4yNh5KNiJx/joF4e4x/iIyKnJycm5aUeo54aYuUim6KpYaUiZiEhmOMkZiNlImWi4yJi3B6lYp8jomLk5KKeoZ9f218ZXNwa217elyBepCPgXt+f4CGj3t6aXVrdIyQioOHhn6XjG1/gHCCjoCOiX6Fe4SRlpucjH13eIKOd3JrZG58gGlnc25naHNsU11vZHBaX2xxd2dra2JneHNwcGRgeGBhVWtfXnRPTUpfZmJceHCJdFxbZXVgYWRkjmNgZmJYaXN0bmxxdot8dHmGgnZ3fotzf4Z/eol/cYmHgZCKiHx+mXZlc259ZYd/bnBrgFlrbnl6cmB2enuNdnJ2inZ6n4ycr5ugkYOFeIiVfnuInIaEnpCOhYyXhJOOh4F1d3B5cW+Eb21ufnJjZHdwfG56fGpobGKkmsHcru+ic2x1g3WEoYSRbpWPlJ+Um4CRcIWLo5eJjpWKkJ2Vg4CUj4WIj4CSioqXfod7dn+JeIaFjpyal5mPkHaLeHCJi45/jaaGk4uehoZei5SXiY6IjYqKhIlsfJeDfomGipGQhnaGfn5sfWR4dWpvenRYiHuSh4Z6f3+Aho1/emZ0aoGLkIuEhIGNmIZtg3dviZODkoZ/hHuCkpeUmpF1dHiHi3RycGRydn9fcmxvYWh0ZlJgcGdrVV5uc3lhcmNgaX5xcm5bY3JhY1ZuWlx3TExLY2ZhXXZyiW1bXGR4XmBkZoRfY2NeWGlya25rcneLfXN3hIF4eHyJcYOEfH2Ie3SLiIeVhYx/f5hzaHVyeW2Le250cIBXcHp2eXFkdnmGjGh2gIlxgJ2Imaico5OFfXGMk3h4iZyDhJ+MjnyWjYCaiIR8c3dwc2pvgWxqbXx0XmB3dntwdHpnYGV869q1ycPciXNsdIB2ipqIjGmXj46clZKBiHCFiKCOhYuVioyXk3yNkoeCiI96kYuGj4KAd3iDhHKHgpOblpOYho12iIByh4SMiZykhZaOoISKYYOVj4WIhYiMhoCHaH2UgH6DhYqOj4Jyh3+AcndodnJpdHhtWo19k4OGfYCDgYSLg3ZidW2KgpGMhICAk5J+b4NteoiRiJSFfYJ/gpOUkpiJbnF5i4R0am9pb3Z+XXJobVxpdF9RZHFoZlNfcXZ0YHBgXWiDcXNqWGdpY2lXbVdbdExKS2VmXmFyc4VpW1xleV5eZGd6YGRfXVlrbmVuanR3in5zcoF/e3Z6iHOFg3x/h3Z2ioWPmIGNgnuTdmx3dnl4k3Vud3p9WHmFcYBuZ3h2kYJkdoaFcYqWhpqhm6GKhnNvkotxdo2afImZiIl8n3+EmX+CeXJ0bm9kcn5pZmx3d1tfeHt6cXF/aWFnYX/Vto6RpnhucXd7cZKQjIZqmI2ImpCLhXpoh4uZhoGSkIaGl417jIyAgImNe5CNfomFenV7g3xxhoCVmY6SlIKJdoSIeIaDjZWgoYiXkaGAiWF/lIeEh4OIjH9/gmZ9kYB/gIOMj5B+bYN9g3VsbXd1dHd2a2OOgo+AhX98hICFiX9wYHRyhn2QjoN9f5KKenKFZ3uFjIiNhXyFgIGVkJGThW5veIt+dGxtaGl3emBnaWlYa3RZUmhyaWJQYnJ4bWJlXlpqhG50YlxoYGVtX29UWm5NR05mZFxmbnGAa1pbY3NfXGNrdmRlXV1abGxibGpzdoaAcW9/fH10eIZ4hYN8gId1eImBkpV7iYZ2iYFveHl7hJNvbXuAdl6Df3SBbGh6c5RzZ3OHfHKSkoSan5ufhod1dZN+bXWSln2HkIOKjZp8jJp2fnZxb2xqYXR8Z2JpdXlaYHd7eW1xfmVkaGhXnY9fcnOXvMSEdnGUiI99cZaLhpuSi4dyaoiPloB7lYuBhJqMfIqFfHuJi3+UiHWJhnZ3foFydYaBnpSFlI+Eg3KBineGfoybn5qIlY+egYlmfpOCf4WCiIlxgX1mfox8eX+AiIyPfWmBfoR2Z3B5eHN3dGxrjoaLgoqAeYKBhYSBbF9zeXt+jouHfIKQgX9zgmp6hYmNh4V5hX6CmY6RjX5ubXqIfHVzbWVle3NhW3BiV25xU1NtcmhhTmd1eGZgXl1Zb4Fvc1plYl5qbmBwT1lqUURTZmBaam5tfG5ZW11tY1picHZjZlxdYGtpY2xqc3aBg3Btfnx/dHWDeoOCfIGFdn6IgZaQeISKdIGIcnl5fo2Qb297gHFpgXh6fm1se3WVa2p4hHRrk42Gn5mgmYSHbn2LdWl3l45+gYqClJeKeY+Vb3p0cWxqZGBzemhgZXF6WmByfHlncXlhZWWPsbJ3S2JapdnQlnF7kIqPd32TioSYkIuFbmuFkpJ6eZKGgYSYinyGf3d3iYqEloBwi4hxdX57anmFg6WQhJONhH9wgIR4hnuInpuWjZWSloWIcHuTgn2CgoiCbYB3aICFeXKAgYOKiHxlfn+EdmRxc4BpeXFwdZmOhoOLfXd5gYV6g2tccn9zgomHin6HinuJc4JvcoWIkIaGc4V7gpqNjoV5bm59g351eWNlaHtuXlh2Wldwa05XcXJmYEtsd3RhXlxbWnV+c3BYZ15na3Jgb05XZ1I/WGZeWm9rZ3lxW1pYa2VZY3B5XmdcXmVsZ2ZraXF3f4hvbH9+gHVvgnt/gn+Cf3aBhImXiXGCjXF7hnx6eYSTjHVqeX5rb350f3xvcnt6k29ugX54Z5KLg6GZnJGChWeGg29neZWIfX6EgpiKgXyOjWl4c2trZl9hb3ltX2JveFxka4J5YXF2X2Vl1Oq9izI6PouOf3F4hYeNjXWClox+ko2Lfm1rhIyMdXyPf4WBlIh8gndudoeEg5d3b4iFbHV7dWZ5goOmi4KPi4R+boF2eIV8iZ+SjpKTlI6Mh397koZ3foOMgmp/cmiAfnlufHyCi4R3YnqFgnJkcml+bnZydYKcjIGAhYB0dn6Ac4JvXG6AdXmLhIt8iIF+iXl7cm2KhZGFjHODeoCXjIuAdW1qdoB/dHNbZ2d1bldWe1JZb2RMWnJyZVtJcXhvXFtbWV11fnRoWWJbaGZvZGpNV2VQPV1lXF11ZWB1b1pZVG5jWWNxeVpoXWBnbWdpa2lwd32ObWmChH95boB8fYF/gXp1goCNk4RwgYtud36Ae3uIkol/aHp9anN7coV6c3Z9fox5eIR9fGuMjYSbnpaMgYBsjX1raH6Ni3p9foOTgn59iohrdnFnaGJbYmdzb19ha3NgaHCIeWJzdF5jZJugj25cNVqvtXRpgIh8kYZ1hZWFc46KiXZvbISChnR5iXiJfJKHeX5yZ3aJfn6Yb3GHf2l2eW5meYeEpIaAh42Kfm+Ad4KDf4+biYSWk5mKjIWJfJCIcHp9hHtofmxqgHt6ant3goiBcmB3gX5yZHJndoNudXyGlpKCfYKBb3d6fHV/bVlxgXd1jYOHeIh2hIl7eXRvi4KRgoZzgH5/lImKfG9uaW2BgXRtW2VkcW9QWnpNW25bT1tyb2RVS3N4aVdZWlphcYB0YF1dYGdkaWlmTllnTUBgY1tgdWBddWxYV1N0YFpkb3JXal5iaGpnbWxocHd8k2xohIp9fXB+fnuBgIF6d39/iouDcXyHb3F3g397iYyPg2l9e213eHaKdnx4f4KGf4N+fXpthYyImaONhIN7dYt4a2yEh5B4fXqCkYCAfouDcHJxY2ZeWWZfb29fYGdwZmpuiHRhdG9bYWRqdnuAv5ympMi4cYSCcpJ7d4WSgnOQi4dycm+De4N0dId0iHeTiHl5cGN3h3qAk2lyhHZnd3VjanyCh52BgH+Oj35zgHWHe4KUkoV6mI+WkIiCiXuJiWt4eX50Z3poa395dGl6d4CDfWhgeIh9a2t0aHyBanaCjJGVf3t+f3F8dnx0f2JWeH5zdIuFg32EcYeKeHlxcYWEjoB/en9+do+GhHdqcWlsh4Fxb1xmYHFsSWR1S11sVFNZcm5iUU90eGFSWFhdYXCCc1thXGllZWRrZFBbcElDY2BbY29dXXdoVVdWdl1bZW5oVmteYWpnZW5uaHB2epNtaYiNeX1ye355goGBfHZ9g4iGg3B3hHJtd4KCfomLk39wgHt3eHqAjHSCeH6BgYKEeYB1b36Ki5ueiH2FeneFe2h0hYuQeX5/e4iGhHaPgGdwbl9kXFhlWW1yYWBgcGxraIhuYXRpWV9kboB3qdqpx4aHsnGId2+MdHqFjX95kol/dHN0fXd/b3F/bYV0k4V4dGtgeoJ5iY9mcoRwZ3VuW219gJCTf4B4kZN+eXxuiniDk46GdpiMk5CIhoZ8f4VsdHV+bGd2ZG17dm1qd3d/f3xhYniGeml1dWN+fGh1h4+Nlnx1gXdxgHt9boBaV3V/cHaFiH+Bem2JhnR6bHaChIV/fH56fXSMgn50aHRlboqDbHNaaF1zZEdtbUtaYFdWVXdtYlBSdHZYUFZYXmFyhG9cYGNtZWReb2NUXHFGQmVeXWVnXVt7YlFWXHRbWmdrYFZqX2BvZmZrcWhwdniOdGuOjXZ/dnh+d4GEgXt0fYOIh4NvcoB0cXV+hYKJjYp6dn94g3t8hYd3h3x9gX6EgHt+cnV5jI2gjIl5iXZ0g3hefYWXi3iGg3OFhoR3iXpibm1cYltbYVZpc2NgW2ducGaHcWFxZlddY2t/fMrOh7mham1timxxg3F7g4l+epCEeXhzeHV0e2psdmOEdZGCdm9mX32CeouKZXKCa2pxY1hseoWbiIKBc5eUeH99b4pzhIyOiXSZkJKJhouDe3l9cXBvfGZocWJteHFqbHF4fX16XWV6gHhqdnhmg3dodYmMjpV9cohqb36BeW99XVlzf251gYx8gm9wioBxd2l4gYKBgnh+c3x1h317c2dzYW6LgGtxV2lcdltHbWpMVlVdU1V7a2FPVHVyUFFUV15jdIVpXWBsamZjWm9hWGJvR0FnXGBlXVxWe15OVWVwWVtqaF1XZ2BecmVqaHJocHN3hnhulYt0f3p4fnmDiH91cn+GhY6CcHB7eHd2eYaGh4yGeXt/dIt9fYaEg4d+fn59h398eHV4eJGTn3+MfIptdYB4ZIOGlYVzkYpvhYWBeoN0ZG5qWV9bXF1UZ3JkYFlkcXJngHJia2VXW2Bqf3i+rnuft25hc4Voc3pxeIGEen2Lfnd3cnZve3Zlam9hh3WOgHNqYl5+eHmLhGZxf2hra1pWb3eIooCEf3GZk3KBenaEb4OElIp1l4qOiYWJhX14dHFuaHhfamxgbXZqZ2pseXd6dlpnfXx5ZnN+bYV1ZXWHjYaWgHCMZ2t7hHVudWJdcX1sdX2MfIJndod+bnFpdoB5f4B0fm17fIJ7eXFmbGJuiX1sbFVpX3ZVSmlqTlFOZ0xYe2hhTlV1a0xRVFVfZ3aDZl5gcWhnYldqXVxrZ0pEalliY1ZZVXlZTVZtallda2RcWWVjXnRlbWRxZ3JwdYF4cZmGdn9+d398hYd9dXOCiICVgm5zeXt6c3OFh4mJg3iBfXWPfnyEio2DgYR7fouDe3Z7d3eanZh6iYKGaXZ8e2yDg5J/co6BcIWCf4J/cGdsZ1hdW1xbU2RwZF5XYnJ1anVvZWVjV1xbaH9wb3KAc4lkZHl9aXN1c3KBg3eAg3h2cnVtanpxYWdrZ4ZzjYNtZl1ffXB7iX9pbXhnamRVV3JvjKZ8hHt2lpF0fXR+fG9+fZOIeJt9iYeEh4N9dXBxbGd0XGxnXmx0ZGdlaXpve3JZaIF3dWhwgXiCd2J3hot8lYFvjGpte4JxZ3RmYW56aHN4i3x/Y3eEd2pscnV8cnt7dH9ogH+AeXdvZGZibYV7bGpVaGFvUkpoak9LTm9HXXpmYU1VdGRKT1NXYWt3fmZdZ3NpZmBWZFdicFxLS2pXY2FVVFVzVkxYdWRZXmtgW1pjZV92Z21icGl0b3J+dHSZgnd/gHiAf4aEen11goR/l4VucnR8enVxhIWPgYB6i3VzkH98gZWNgIWEfX2Mhnp9gHd7o6WKeYiFhGt0e3p1goCLem6Ec3mEfYKDdm9qaWVWXVtaWlNibmRbWGFze2pobWlgYlhfWml/aWtvgGdsYGh5eGpyc3Ntg4B6f3x1dG16aGp5al9lbmiBdo+EZ2VYYndqfod7b2pwZ2ZdVFhvZ42ndoB6fJCOenZxgHF1eHuRgXqXdoeDgIaIdmpydWdnbltsZF1tcl9nYWp4aHtsW26Dc3RqcIF+enhhd4aFeZGFdIlycHqBc2RyaV1xeGVydIl8eWN0gHFnanl1c215eHZ5ZYV8f3l3cWRkY217fGpqVGdhZVNKa2dPR1FqRWB3ZmFNU3JdSk1VWmVseHxmX25xaWRdVmFVbm5WSlNnV2VdWE1Va1RKW3lfW19rXV1aYmVgeWhsYW9vdm5wd3V6mH53f4F5gICHhnp5eoN+gZODcXR0fnp2dIWIkX2AfJBrcpWAe4KfhX6HfYB+hoKAint3hKuef3qHh4NrcoF5dYB+gHRuhm58gHOKgGpwbmRkWF9aWVpUYmpnW1pfdYJpXm1sXGFXXFxrgWVydH1paVxrdnVnc3ZxbIR7fXx4dXJseWdpeGZdZHNoeneSgWNjVGVwaIKFeHhnaWphV1ZZZ2OOp29+d4CLjntxcn9pe3F8jn14kHOFfoCAhm5kdXJkZ2dcamFdb29cZ19tdGV6aF10gG9ya3F8fnV2YnSGjHuJiIGBeXN1gHZicW5bcnRjcXOFfHVlc4BtYW17cGtqfHp2dGeHdnt6dnFlYmRtcn1pa1NnXVxUS3FiUEZVYEdidmZhS1NvWEpNWFhoa3Z7ZWVucWZkWldeWHdlVEpcYldnV1lIV2RQSGJ4Wl1fbFpeXGFjXn5pamBvdHhtcG52g5d6coCAfH+JjIZ9dXWGeIeMfHN1dYF5enqCjI59foSJaXOWgXqKnX5+hXqBen98holzcY+tjHt7ho99ZHGHeXN8enVyb4Zse35sj3pjcG9iZV1lVllZV2Nma19dXXOFaFhxblteWFpcbHticHd1bGFZbHNzZ3R1b2yDeH5/eHZtbnRkaHRlW2d1ZnZ2kXpfXVJmZmuDgnR+YmRqXFRXXWJjjqRpeHODhpF5bnF8anpvfYd9dop0gnl9eYBpZHZsYGZfXmlfXXRrWWVdb29iemVcd3xrbm5weHl0dWVzhJOAiIOJe3dwc390Y3hlXHFxYnFygn10Z3KAZV9ud2plaHp9dW9wg3Z0fXRyYl9mbW58ZGhTZ1dYU012X1BKWVdIYnRjYUlUbVNKTVpXamxyfGNtbXNjYlpaW2F3XFNLY11XaFNWRlhgTUdpdVheYGxbW19iYlyEaWhhbnh5bW9qdoGQeW2DfoCBk4iEgXZ0iXSMhnRxdnaBeH19foyQgH6TfnB3lYN8mJJ5gIB4en6AdIiEdHGZoXp6f4mUd2N1h3hzd3RrdG5+a3h8cJFzXnBuYGdibFRaWldoY21mW1xxiWVTcm5bWlhXYGx2Y2l1amleWW1zcGtzc3NphHx+fnp2bm5sZGlxY1tqcmR0do5zW1dTZWFygH9ygl1iY11TWmBcY5GfZXFxhYSSdWxse29wcnx+fXOCeIF0e3p7ZGV1Z11iWWBnW152aFdiXXBoYXdhW3x2aWpyb3h0c3VpcYKWhId/hXd0a3F+b2d4WF1sbmNydIF6dGdwflxgcHJiYGtzf21udn9zcXhrcWFcZWxsemBmUmVTVlFPdVtRT1hRSGNzYWBHVmpQSVBaVmtra31mbm9xYltaWFlscVdSUGZWVmhTVEVZW05IcnVYX2NsYlhgYGFdi2pjZG16eGxwaXV5h3trg31/hJp8g4R5fIdtj4dybnZ6fHSCgnyLj4OCl3R4gZOFgZ6JdYGAgXR/gnGIg3ZwoZZzeoaLhnpld4pubXpuZnhwemtzdnONa151bmFnZWtSXVtVZ2Fsa1pccYxkT29uXVZYVWdpc2hidGVkXFhtdGxvdXR4aoZ8f3uHdo9zY2RrbmFcbm1jc3iHa1pUVmNkeH19cYZdZF9jVFpfWWKVlWNtcIOFinRraXxwZ3V4dX1te3V2cHt/dl9mcmNbXVZhY1hhdWVVX2BtZGFxXV1+cGhpdHF0cXV3a22FlIKJfYdyc2dwf3J0cFRcZ2tmcnWBd3RjbXZWY3JsW19wZ35mbnh+c3Rza25hWmRpandeZVNjVFVQU2xWUFZSUEdkcl9hRlhpTklYVFduaWV9aWx4a2JXXVVbdGRTUldoUVhmVFNHWVlPTXh2W19la2lZYWBeXo5uYmZreXVub2l2doB/bIOAfYeYe4CHgYl+a5OIcmZ0gHt1gIN9iY9/i5NyfIqRhYefhnt/hoxzgYZzfoJ2bqSLcoCNi3Z3bHqMYGR7cGZ5c3hsbXF3g2dkfG1jZmdoU19eVWdfbG5bXm6NaE5pbWBUVlNvZ3NrZXhkZFxYb3NscXp3cmyHe392m3p5a2FlbG1eYG9qZXB4fmdaVlhgbHh8e3CEX2NfZ1ZYX1djm4hia3CBh314bGx6bl14c258a3Z0b3B8gXNYam5eWFxVYWJXZHBjU15iaWFibFphfmxmbHR2b213d2xpho2AinuJbnJmcn5udG5kW2FpaXB0gXRzXmltU2VxZVZjb2R8ZHN4fXdscG1rYFlhZmd0XGRVYFVSTldkUk9bTk9IZG9cYkdZaU1KX0tZbWRgeWlufmRgVV9UXXVcU1JgZk5cYFVSSVtYUFl0dV1fZWtoWGJhW16NcWNnanhxc25odnR7hHKCg3qIjn58iYeNeW6QiXRrc4F0f3+IhYeRhJWPeX2MjoeRm4SAfIyFc3+Bc3R4cm+Tk5OTk5OTk5OTkpKSkpKSkpKSkpKSk5OTkpKSkpKSkpKSkpKSkZGRkJCPj4+Pj4+Ojo6Pj46OjY2Njo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo2NjYyMjI2NjY2Njo6Ojo6OjY6OjY2Ojo6Oj4+Pjo2NjY2Oj4+Pj4+PjoKAfnp6fX5+fX1/fn59fn5+fn5+fn+Af4CAgIGAgIB/gIGBgYOHjI6Ojo6NjY2NjY2NjY2NjZKSkpOTkpKSkpKSkpKSkpGRkZGSkpKSkpKSkpKSkpKSkpKSkpGRkZCQkI+Pjo6Ojo6NjY6Ojo2NjY2Njo6Njo6OjY2NjY2Njo6Ojo6Ojo6NjYyMjY2MjIyNjY2Njo6Ojo6NjY2NjY2Njo6Ojo6OjY2NjY2Ojo6Ojo+Ogn99ent8fn59fX59fn5+fn5+fn5+f4B/gICAgICAgH+BgYCBg4aMjY6NjY2NjY2NjIyMjIyMkpGRkZGRkZGSkpKSkpKSkZKSkpKSk5KSkpKRkZGRkZKSkpGRkZGQkJCQj4+Ojo6OjY2NjY2Njo6Ojo6NjIyMjIyMjY6Ojo2Ojo6Pj4+Pjo6NjIyMjIyMjIyNjY2NjY2NjY2NjY2NjY2Njo6Ojo2NjY2NjY2NjY6Ojo6Cf3x6fHx9fn19fn19fX59fn5+fn5+gH9/gICBgYGAf4CAgICDhouOjo2NjY2NjIyMjIyMjIySkZCQkJCQkJKSkpKSkZGSkpKSkpKSkpGRkZGRkZGRkJCQkJGRkZCQkJCPj46Pjo6Ojo6Ojo6Ojo6Ojo2MjIyMjIyNjo6Ojo6Njo6Ojo6OjY2MjIyMjIyMjIyMjY2NjY2NjY2NjY2NjY2Njo6NjY2MjIyNjY2Njo6OjoN/fHp8e31+fH1+fXx9fn59fn5+fn5/f3+BgYGAgICAgYCAgIOGi42NjY2NjIyMjIyMjIyMjJTO2tjY2NjamoGEhISEiF0tMDAwMC1GoaGhoaGhoJqZmpqampqKg4SEhIOEd2VnZmZmaFxDREREREFSzNrY2NjY3W09REREREU4Li8vLy8rSIWDg4ODg4OLjIyMjIyMjY2NjYyMjY2NjY2NjY2NjIyMjIyNjY2NjY2OhX19e3t6fX58fH59fX1+fX1+fn5+fn9/f4GBgYCAgICBgICAgoWKjI2MjIyMjIyMjIyMjIyMlNvp5+fn5+qcfoKCgoKGUxgdHR0dGTekpKSkpKSjnJycnJycnImBgoKBgYJyXV9fX19hUjQ1NTU1MkbY6ufn5+ftZy41NTU1NyccHR0dHRg6g4GBgYGAgYqLi4yMjIyMjIyMjIyMjIyMjY2NjY2MjIyMjIyMjY2NjY2GfH16e3p8fXt8fn19fX59fX5+fn5/f3+AgYCBgYGAgIGBgYGChYqNjYyMjIyMjIyMjIuLi4uSl5iYmJiZmZKPkJCQkJCMh4eHh4eHiZKTkpKSkpKRkZGRkZGRj46Ojo2NjYuJiYmJiYmIhYWFhYWFhpOUlJWVlJWKhYWFhYWFhIODg4KCgoSKioqKioqKi4uLi4uLi4uLjIyLi4yMjIyMjI2NjIyMjIyMjIyMjY2Njoh8f3l6ent8e319fX18fX19fX5+fn9/f4CBgYGBgYGAgYCAgYKFioyMjIyMjIyMjIuLi4uLi5GQj5CQkIuOkZGJh46KkJKSk4+OjY2Oh4+RkZGRkJCQkJCPj4+Pj4+Ojo6Njo6Ojo2Njo2Njo6Ojo6Ni4uLi4uMi42Ojo6Ojo6Ojo6NjY2NjIuLi4uLiouLi4uLi4uLi4uLi4uLjIyMjIyMjIyMjIyMjIyMjIyNjY2NiX59eHh5fH18fX19fHx9fX59fn5+f3+AgICBgYGBgYCBgIGCgoSKjIyMjIyMjIyLi4uLi4qLkJCRkZGPhI6QkIaKj4WNkJCQh4iHh4uGiZCQkJCQkJCQkI+Pj4+Ojo6NjY2NjYyMjIyMjIyMjIyMjIyMjIyMjI2NjIyMjIyMjIyMi4uLi4uLi4uLi4qKiouLi4uLi4uLi4uLi4uLi4yMjIyMjIyMjIyMjIyMjIyMjI2Lfnx3dnh7fXx7fX18fH19fn5+fn5/f4CAgIGBgYGBgIGAgIGChIqMjIyMjIuLi4uLioqKioqQkJCQkIqFjoiOhoaPiY2QkI2EiIaGjoWMj4+Pj4+Qj5CPj4+Ojo6OjY2MjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMi4uLi4uLi4uLi4uLi4qKioqKi4qKi4qKi4uKioqKi4uLi4uLjIyMjIyMjIyMjIyMjIyMjIt+e3d2eHt8fHx9fX19fX1+fn5/fn9/f3+AgIGAgYGAgYCBgYGEiYyMi4uLi4uLioqKioqKipCQkJCPhYOMjpCOiYyJjZCRiYOFhoeMiYmPj4+Pj4+Pj4+Pjo6OjY2NjYyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIuLi4uLi4uLi4qKioqKioqKioqKioqKioqLi4uKioqKiouLi4uLi4yMjIyMjIyMjIyMjIyMin18dnZ4fHx7fH19fH19fn5+fn5+fn9/f4CAgYCBgYGBgIGAgYSJi4yLi4uLi4qKiomJiYmJkJCQkJCMhoyJjoeFjYmOi4yOiYaGhoiGiY+Pjo+Pj4+Pjo6OjY2NjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyLi4uLi4qKioqKioqKioqKioqKioqKioqKi4uLioqKioqKioqLi4uLi4uLjIyMjIyMi4uMjIyKf353eHp7enp8fHx8fX1+fn5+fn9+fn9/gICAgICBgICAgYCBhIqMi4uLioqKioqJiYmJiYmPj4+Pj5CMjouPjIqPjI6MjZCOjYuKjImOj46Ojo6Ojo6Ojo6NjYyMjIyLi4uLi4uLjIyMjIyMjIyMjIyMjIyMjIyMjIyLi4uLioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi4uLi4uLi4uLi4uLjIiAfXh5enp6e318e3t9fn5+fn5/f35+f39/gICBgICAgIGBgIGEiouLioqKioqJiYmJiYmIiI+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pjo+Oj46Ojo6Ojo6Ojo2NjYyMjIyLi4uLi4uLi4uLjIyMjIyMjIyMjIyMjIyMjIyMjIuLi4uKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLi4uLioqKi4uLh4B8eHp6eXt8fHt8fH1+fn5+fn9/fn9/f39/gIB/gIGAgIB/gYSJi4qKioqJiYmJiYmJiIiIj4+Pj4+Pj4+Pj46Pj4+Oj4+Ojo6Ojo6Ojo6OjY2NjY2NjY2MjIyMjIuLi4uLi4uLi4uLi4uLi4uLjIyMjIyMjIyMjIyMi4uLi4qKioqKioqKioqKioqKioqKioqKioqKioqKiYmKioqKioqKioqKioqKioqKioqKi4uHgHt5eXh6fHx6e3t9fX5+fn5+f39+f39/f39/f3+BgYCAgH+BhIiLiomJiYmJiYmJiIiIiIiOjo6Ojo6Pj46MjI+Sj5COjo6Ojo6NjY2NjY2NjY2NjIyMjIyMjIuLi4uLioqKioqLi4uLi4uLi4uLi4uMjIyMjIyMjIyLi4uLi4qKioqKioqKioqKiomKiomJiYqKioqKioqJiYmJioqKioqKioqKioqKioqKioqKi4aBe3h5eHp8ent7fH19fn5+fn5/f35/f39+fn9/f4CAgYCAgIGEiIqJiYmJiYmJiIiIiIeHh46Ojo6Ojo6Ojo+MkJOQkI+Ojo6NjY2NjY2NjYyMjIyMjIyMjIuLi4uLi4qKioqKioqKi4uLi4uLi4uLi4uLi4uMjIyLi4uLi4uLioqKioqKioqKiYmJiYmJiYmJiYmKioqKiomJiYmJiYmJiYqKioqKiomJioqKioqKhYB6eHl5fHt6ent8fH1+fn1+fn9/fX9/f35/f39/gICBgICAgYSIiomJiYiIiIiIiIeHh4eHjY2Ojo6Ojo6Pj4+PjoyNkI2NjY2NjY2MjIyMjIyMjIyMi4uLi4uLioqKioqKioqKioqLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4qKioqKioqJiYmJiYmJiYmJiYmJiYmKioqJiYmJiYmJiYmJiYmKioqJiYmJiYmJioqFf3l6eXh7e3p7fHx7fn5+fX5+f39+f39/fn+Af3+AgICBgYCChIeKiYmIiIiIh4eHh4eHh4eNjY2Njo6Oi42Nj5WPiYyPjYyNjYyMjIyMjIyMjIuLi4uLi4uLi4qKioqKioqKioqKiouLi4uLi4uLi4uLi4uLi4uLi4uLi4uKioqJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYR+eXt5ent7eXt9fHt+fn59fn5+f35/fn9+f3+AgICAf4CAgICEh4mIiIiHh4eHh4eHh4aGhoyNjY2NjY+MjImKj42IjJGPjY2NjIyMjIyMjIyLi4uLi4uKioqKioqKioqKioqKioqKiouLi4uLi4uLi4uLi4uLi4uLi4uKioqJiomJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJg355e3p8e3p7fX17fH9+fn5+fX1/fn9+f3+Af4CAgH+AgH9/f4OGiIiHh4eHh4aGhoaGhoaGjIyMjIyLiYyKiIeJhoyOjJCMjZGOjIyMi4uLi4uLi4uLi4qKioqKioqKioqKioqKioqKioqKiouLi4uLi4uLi4uLioqKioqKiomJiYmJiYmJiImJiYmJiYmJiYmJiYmJiYmJiYmIiImJiYmJiYmJiYmJiYiIiIiIiYmCf3h7e3t6enx9fHx9f39+fn19fn9/f39/f4F/gIB/gICAgICAg4aIh4eHhoaGhoaGhoaGhoWMjIyMi4yOjoyKioeEiIuKjIuNjo+Li4uLi4uLi4uLi4uLioqKiomJiYmKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiomJiYmJiYiIiIiIiIiIiImJiYmJiYmJiYmJiIiIiIiIiYmIiIiIiIiIiIiIiIiIiIJ/eHp7enp6e3x8fX1+f35+fX1+f39/fn+AgICAf3+Af4CAgYCDhYiHh4aGhoaGhoaFhYWFhYyMjI2NjJCSjI2Ii4mJi4uLi4mLjIqMi4uLi4uLioqLi4qKiomJiYmJiYmJiYqKioqKioqKioqKioqKioqKioqKioqKiYqJioqJiYmJiYmIiIiIiIiIiIiIiImJiYmJiYmJiYmIiIiIiIiIiIiIiIiIiIiIiIiIiIiHgXx4e3x5enp8fHx9fX9/fn59fX9/f39+fn+Af4B/f3+Af4CAgIKEh4eGhoaGhYWFhYWFhYWFjIyNkY+PjZGJjIaJjIuIiImMiYeNjo+NioqKioqKioqKiomJiYmJiYmJiYmJioqKioqKioqKioqKioqJioqKioqKiYmJiYmJiYmJiYmJiYiIiIiIiIiIiIiIiImJiYmJiYmJiIiIiIiIiIiIiIiIiIiHh4eHh4eHh4WAenl9e3t7enx8fHx9f39+fn19f39/f35+f39/gH9/f4B/gH+AgoSHhoaGhYWFhYWFhYWFhISLi46PjoyLj4iHiYmMjYWFjo2KiYyNi46KioqKiomJiYmJiYmJiYmJiYmJiYmJiYmKioqKioqKiomJiYmJiYmJiYmJiYmJiYmJiYmJiYmIiIiIiIiIiIiHiIiIiIiIiIiIiIiIiIiIiIiHh4eHh4eHh4eHhoaHh4eHhH55eX16enp7fXt8fX5+f35+fX1/f39/fX5/f3+Af39/f39/f4CChIaFhoWFhYWFhYWFhISEhIuLjI6MjI2Lh4mIiomGgoiNjoiKi5GTj4uJiYmJiYmJiYmJiYmIiYmJiYmJiYmJiYmKioqKiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiIiIiIiIiIeHh4eHh4eIiIiIiIiIiIiIh4eHh4eHhoaGh4aGhoaGhoaGh4eDfXp5e3p5enx8e31+fn5/fn59fn9/fn9+fn+AgICAf35/f39/gIKEhoWFhYWFhYWEhISEhISEioqOjYmIiIqKh4iHiomIioiIh4qGi5GPiomJiYmJiYiIiIiIiIiIiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmIiIiIiIiIiIiHh4iIh4eHh4eHh4eHh4eHh4eHh4eHh4eHhoaGhoaGhoaGhoaGhoaGh4J8eXl6eXp7e3t7fX5+fn5+fn59gH9/f39/f4CAgH9/fn9/gICAgoSGhYWFhISEhISEhISEhISKi5CPiYmJi4qHh4WHiYuKiYSLjYmOjYqJiYmJiIiIiIiIiIiIiIiIiYmJiYmJiYmJiYmJiYmJiYmJiIiIiImJiYmJiYiIiIiIiIiIiIiIiIeHh4eHh4eHh4eHh4eHh4eHh4eHh4eGhoaGhoaGhoaGhoaGhoaGhoaGgXt4enp4e3x7e3x+fn9+fn5+fX5/f39/f3+Af4B/f39/f3+Af4CChIaFhYSEhISEhISEhISEhI+Qj4+IiYuIhoeIiYuLjIuJioqNio6Oj4iJiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIh4eHh4eHh4eHh4eHh4eHh4aGhoaGhoaGhoaGhoaGhoaGhYWFhYWFhoaAe3h5eXh4enp8fX1+f35+fn59fn9/f39/gIB/gICAf39/gIB/gYKDhoiGiIaDhISEhIODg4ODkpKOioeKi4qLh4uNiYqJi4iHiouIio+SioiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIh4eHh4eHh4eHh4eHh4eGhoaGhoaGhoaGhoaGhoaGhoaGhoaFhYWFhYWGhn96eXh4eHl5eXx9fn5/fn5/fn1+f35/f3+Af39/f4CAgH+AgH+BgoOHjo+PjoiHhIWFhoaFhYWSkI6KiYmIiImKioiIh4aKjIiHiYmOkJGNh4iIiIiIiIiIiIiIiIiIiIiIh4iIiIiIiIiIiIiIiIiIiIiIiIiIh4eHh4eHh4eHh4eHh4eHh4eHh4aGh4eHh4aGhoaGhoaGhoaGhoaGhoaGhoaGhoWFhYWFhYWFhYWGf3l4d3d3eXp5e3x9fn9+f35+fn5+f35+fn+Af4CAgICAf3+Af4GBg4eOjo6Ojo6Mjo2OjY2MjZCQjomHhoiJiYeIiouIiYyJiYaKjY6PkYuIiIiIiIeHh4eIiIiIiIiHh4eHh4iIiIiIiIiIiIiIiIiIiIeHh4eHh4eHh4eHh4eHh4eHh4eHh4aGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaFhYWFhYWFhYWFhYZ+eXd5d3d6eXl8e31/fn5/fn5+fn5+fn9+f4B/fn+Af39/f39+gIGEiI6Ojo6Ojo6Ojo6Ojo2NkJGOi42JjIiIiYaHiYaIioiHi4yLjpCQiIeIiYmJiIeHh4iIiYmIh4eHh4iIiYiIiIiIh4iIiIiHh4eHh4eHh4eHh4eHh4eHh4aGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoWFhoaFhYaGhoWGhYSEhIWFhoaFhYWFhX55d3l2eHl4e3x7fn5+fn5+fn5+fn5+f39+f39+f39/f35/f3+AgYOGjY2Ojo6OjY6NjY6OjY2Qj42Ni46KhoiKhISLiYeDhYSDi4mLj42JjI6QkI+NjYyLjY6Pj42NjI2Nj4+Pjo6MjYyMjY2KiYiHiImHh4aHh4eHh4aGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoeHiYqKiIeJi4yNjo2LiImLi42OjYyJiImMgHl3d3Z6eXh8e3t9fn5+fn5+fn5+fn5/f39+fn5/f4B/f4B/f4CBg4aMjY2NjY2NjY2Qj4+Pj46NjI6KiYuMjIeFiY2Lh4aIh4aHh4uNjo6Pj4+Pjo+Pj4+Pj4+Pj4+Pj4+Ojo+Pj4+Pj4+Pj4+Oj46Oj46Mi4uJh4eHh4aIhoaGhoaGhoaGhoeLiYeHiIiLjY2Mi4yLjY2Ojo+Ojo6Pj46Ojo6Ojo6Ojo6Njo6NjY2AeHZ4eHp4enx6fH5+fn5+fn5+fn5+f39/fn59fn9/f39/gH9/gIGDhoyMjIyMjY+QkpOTk5KSjYyMjIqHioyKh4eJiYWCiouIiYWJjpCNjo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6NjI2NjI2LiYaHh4eHiYqLjY6NjYyNjY6OjY2OjY2NjY2NjY2NjY2NjY2OjIyNj4+OjY2MjIyLi313dXd5enp7e3p+fn5+fn5+f35+fn5/f39+fn1+f39/gICAf3+AgYOFj5KRkJGSk5OTk5OTkpKLi4uLiomMiouLiYuKhoeOjYiIjI6OjIuMjIyNj46Njo6Ojo2NjY2MjY2NjIyMjIyMjIyMjY2NjYyMjI2NjYyMjI2NjIyNjIyMi4yMi4yMjI2MjIyMjIyMjIyMjIyLi4uLi4yNjY6Sk5OSkpSRkJOVlZSTk5COjo6Oe3Z2d3h6ent7e31+fn5+fn5/fn5+fn5/f35+fn9/f39/gIB/f4CBgoSNkpKTkpOSkpOTkZKSkoqJioyJi4qJjIuKioiHiYqKi4mKjY2Mj46Nj5KUlJOUlJOTkpGSkI+Ojo2NjY2Pko+OkZGOjIuKioqLi4qKi5CPjoyMjIqKioqKioqKiouKioqKi4yLi4uMjIyKiouLi46RkpOTk5SUk5STk5SUlJOTk5KSkpKSk5F6dXZ2eHt7e3p6fX5+fn5+fn5+fn5+fX5/fn5+f35/f3+Af39/gIGChIuRkZGRkZKSkpGRkpGRiYmIiIqMiYiJiYuJhoSJhoyKh4ySkpKTk5OUlZWWlZWUk5OUlJSUk5SUlJSVlZWVlZWUlJOTkY+QkZKQjoyRlZWVk5KSjo+QjYqKi4qKi42OjY6RkpCRkpKSkpGRkpKSk5OTk5OTk5OTk5OTkpOSkpKSkpKSkpKSj3h1d3l6e3t7ent9fX19fn5/f35+fX5+fn5+f39/f39/f4B/f3+AgYKEi5GQkJCSkpKRkZGRkZGIiIiIi4uJg4eLi4yMiIeHjYyNkpSSkpOTlJWWlpaVlZSSkpOTlJSUlJWVlZaXlpaWlpWUk5SUlJSVlJSUk5OVlZWUk5KTk5OTkJGSkZGSk5OTk5KSkpOSkpKSkpKSkpKSkpKSk5OTk5SUk5OSkpOTkpKSkpGRkZGPdnJ3enp7e3t8fX59fX1+fn9+fn9+fn5+fn6Af39/f3+Af3+Af4CBgoSKkJCRkZGRkZCQkJCQkIeHh4eIiIiFi4+KjI6Njo+OkJWUk5OTk5SUlZWVlJSVk5KSk5KTlZSUlZaWlpaWlpaWlpSTk5OTk5OUlJOSk5SVlZSTkpKSkpOTk5OTk5OTk5KSkpKSkpKSkpGSkpGRkZGRkZKTlJSUlJSTkpGRkZGRkZGRkZGRkYx0c3d6ent7e3x9fX1+fX5+f35+fn5+fn5+fn9/f39/fn9/f39/f4GDhIqQkJGRkJCQj4+Pj4+Ph4iKi4yNjYuOj42Mjo6RkpGSk5OSkpKSk5SUlJKSk5OTk5OSkpOUk5OTk5WVlZWUlZWUk5OTk5KSk5OUk5KTlJSUk5KSkpKSk5OTkpKSkpKRkZKSkpKSkpKSkpKSkZKRkZGSkpOTlJSUk5OSkZGRkZGQkJCQkZCRinN0dnp8fHp7fXx9fn59f35/f35+fn9+f31+f39+fn59f39/gH+AgYKDipCQkZGQj5CPjo+Pjo+Oj4+Pj4+Pj4+PkI2OjpCRkpKSkpKRkpKTk5OTkpGSkpKRkZKSk5OSk5OSk5STk5OTlJOSk5OTk5OTk5OSk5OTkpKSkpKSkpKSkpGRkZGSkZCRkZGRkpKRkZGRkpGRkZGRkpKSkpKSkpKSkpKRkJCQkJCQkJCQkJGGc3V2e3x8e3x9fX1+fn1/f35/fn5/gH9+fX5/fX5/fn5/f3+Af3+BgYGKkI+PkI+Pj4+Pj4+Pj4+Oj46Oj4+Pj5CQiI2PkJGRkpKSkpOTk5OTkpKSk5KSkZGRkZKSk5KTkpGRkpKSkZKSkpKSkpKTk5KRkZKTkpGRkpKSkpKRkJCQkJGRkZGQkJGSkZGRkZGSkZGRkZGRkZGSkpKSkpKSkZCRkZCPj4+Pj4+Pj4+PkX9ydHh8fHx7fHx9fX5+fn9+fn5/f3+AgH99fn5+f39+f39/f4CAf4GBgYqPj4+Pjo6Ojo+Pj46Ojo6Ojo+PkI+Pj4+GjpCQkJCRkZGRkZGRkZGQkJCQkZGRkZGRkZGRkZGQkJCRkZCQkJGRkZGRkZGRkJCQkZGQkJGRkZGRkI+PkJCQkJGRkJCQkJCRkJCQkJCQkZCQkJCQkJCQkZCQkJCPj4+Pjo+Pj46Ojo+Pj4+PeHJ2eXx9fHp9fH19fn5+f35+f39/f4CAf39/fn5/f35/f39/gIB/gYGAio6Ojo6NjY2Ojo6Ojo6NjY2Oj4+Pj4+PjoiQkZCPj4+QkJCQkJCQkI+PkJCQj4+Pj5CQkJCQkJCPj4+PkI+PkJCQkJCQj4+Oj4+QkI+PkJCQkJCPjo+QkJCPj4+Pj4+PkJCQkI+PkI+Qj4+PkI+PkJCQkI+OkI+Pj46OjoyMjY2NjIqDiYhzc3Z4fX58eX18fX1+fn5/fX5/fn9/f39/f4B/f39/f4CAgH+AgH+BgYCJjY2Ojo6Ojo6OjY2OjoyNjY6Ojo6Ojo2NiJCRkI6Njo6Ojo6Ojo6Pjo6Ojo6Ojo6Pjo6Ojo6Ojo6OjY6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Pj46Oj4+Pj4+Pj4+Pjo+PjY2MjYyNjoyLi4mJiYiFhYSDgoKEgnR5fXp4dXJrZWltb2xmZmdncHNzd3l9fnl6e3x9fX1+fn59fn9/fn9/f39/gIB/f3+AgIGAgIB/f4CBgImNjY2NjY2MjYyMjIyMi4uLjYyMjIyMjIyGj5GRjIyMjIyMjIyMjIyMjIyMjIyNjY2MjIyMjYyMjY2MjIyNjY2NjYyMjI2MiomKi4uJh4KAh4iEgXt6gH57fXx8fXlzcnJycnV1cG1ramppZ2NkYV9bXF1eWFVXWFlTS0VJSkpLTE1PT0tgdHR3eX19eHp5e3x8fX5+fn1+f39+f35/f4CAgH+AgICBgYCAgICAgIGAf4OEhYSFiIuLjYyMjIuLi4yGiYqKioqKh4OOkJGNiouLi4uMiYmKioqKiouLi4eDi4qIiYmGhYWEhIeJiYWCg397fHl6e3pzcHFxcW1samdsbWdlZmVmZGNlZGVkZWVlZWRkZGNhYV5dXFpYWFdUUFFSU1JTTU1KSUZESEpHR0hHR0xOSWdzdXh5fXp4d3l8fHx8fn5+fn9/fn9/f39+f4CAgIB/gICBgICAgICBgYFnXmBjYWNucX17ent/fXd8fHZ4ent4eHpvcHt4eXt8e3h3e394dXd0dHZ1dHZ3dXFycW5wcnBnaGtsbm9tamlpaGhlZWRkZF9gYWJgYF5dWVhaWltdXV9gX2BfX19gYmFeXl5eWVldXF1bV1dWUlRSU1NOUUpISUZERUhMTEhGR0lLSklNbXJ0eHp7end3eXt6e3x+fn1+f39+f35/f35+gIGAf3+AgIGAgICAgICCgWdYW1pZXFtcY1xaXF5ga3FtcHBvbm5vbmtpbmxrbG9qaWtraWpraWdmZ2dnaWhnbWdqZ2hlaGdjY2JhYmBgXVhbW1dYV1RWUVBUU1NNSkxLTExOTk9UWFhXVVVUUlBQTU1QT05LTE1QUU9MTEpHSUlHSEhJSEhIR0ZHSEpKSEhISUlISVZwc3V5ent5dnZ5enp7fX59fX5/f35/fn5+f3+AgX9+f4B/gICAgICAgIGBbFtYVlZWWVlaWVlYVVZoamxubmxra2poaGloZGVkYlxiZl9fYGNfXF9dYF1eWl5dWVleYmFeXlpZX1xYV1NOTUxLS0tMSUtNTktKS0tMSktQTEtLRkdHSUlGR0lISUZFSEdGRkVERUVEREVJSUlHSEdIRkZLTUtJSUlIR0hLTU1LTExMVXFzdnl6e3h2d3h3ent9fn1+fn9/f39+f3+AgIGAfn5/f4CAf4CAgIB/gYJoUlRVVlNVV1lZWVdXV1tbYWNfXlxbWFZWWVZSVFJRUVVUU1NTUE1KTU5QUk9NUFFRUVFSVlZRUVFUUFBOTk9MSk1MS0xKSktLRklJSkxJR0pISUlFR0dGRkVFSElKR0ZHRkZHR0hKR0dISEpMSkpLSUlISktLSkhKS0pISUtMTU9QUEtUdHR1eHp6eHZ2d3d6enx+fX5+fn5/f35+fn+AgYB/f3+AgYB/gICAgH+AgmlQUlRXVVRWWVdYWFpbVFRTUlBRU1FRUU9OTlBQUU9MTlBPTk5NTEtNTk5QTU9QUFJRUE5OT05PTk9PUFFPTk5PTk5QTk1NS0lISEpJSUlJR0ZHR0dJSkhJSEhJSEhHSEdISElISUxLSklISkpJSkpIR0pMS0pJSUhKSktMTk1NTU9RTFVzcnN3enl3dnR2eHp7fX19fn5+fn9+fn5+gICBgICAf4GBgH+AgICAgICBbE9PTlRZVVVdW1lXV1hOTUpKSUZKT0xKSkdJSk1NS0pMTUpHSUlJSktMRkRGSktLS0hKTExMT01MTE5PT09NTk9MTk5OUFBPTE1MTk1MTEpJSEdJSElISElJS0xLS0pJS0pJSklJSUlJR0dKSUdJSUpKTk1OTEhJSklJSk1PT01MT1JOWXBwcnd4d3d0c3R3enx+fX5+fn5+fn5+fn9/gICAgICAgYCAf39/gICAgIFvS0pNTlFOTlVXVlZSU0lFQ0VFUkREQT5CP0RAQD5CREFAQURHRkVIRUJBQEBDQ0RFQUNFSEtPS0lJSkhHSklKSUlLSkxQTk1MTU1MTU1NTElIREZGR0ZGRklKSUlLSkhMSklKSkpJSEhKS0tIRkdJSklLTU5OSktPTUxLTU1PUE5QT1BgcG9yd3h2dHJzdXd6fX19fn5+fn9+fn1/gICAgICAf4CAgIB/f3+AgICAgXNQUE5OUE1KS1BSUE5RQ0RCQUZRRT1DPT9FSDk6Oz0/PTxBRkA+Ojw+PjxFRD0/RUE/QEFAREVHR0dHQkRERUZFR0dHR0pHSEpLR0NER0pHQ0RFQUFDR0hHSEdISktKSElMS0lISktLTU5MTUxMSkpMS0lLTU9PUFNRT1BQTk9QUlFNUGdwb3N2dXRycXR4eX19fX1+fn5+f4B+foCAgH9/gIB/f4CAgH+Af4B/gICCdlRVUVFQT0xNUFBOT09BQkFAQkE/Oz48Pj8/Ozg5OTs7OkA7Oz48Ozs8PEhMPT1BQT9CQz1BRERGQkZGREdJSEM/QEBAQUFCQUE/Pjw9PkFAQD8+P0BFR0dHSUtMTk1OTUxNTUpLTVBVU05MTlFOTk1OTE1NTk9OTk1LS05OTk1OTkxUbnBwcnR0c3Fyd3l5fX19fn1+fn5/gH5+gICAgICAgH9/gICAgH9/gH+BgIJ4UVFSVFJTUVNTUVFST0BAPT4/PD8+QEE/PT45Ozo6Ozg5Ojg3Ojw5Nzg7Oz49Ozs6ODpAQEFCP0E/Q0ZEQkNDPzs+PkBDQ0E/Pj9BPkBAQj9APD9CQEFDRUVFSktQT1BPTU1OTExMT1JRUFJOTExPTUtOT0xMTEtMS0tKS0tKTU1LS1xxcXF1c3VzcXN4eHp9fn1+fn5+f39/fn5/gIGAgH+Af4CAgICAf4CAf4CAgXxSTU9RUFFSUlRSU1NOPDs8Ozs7P0BBQkA9PDk8PTw5Nzk6Ojk4ODo6Nzg6OTo7Ozg3ODk7Ojg8Oz1AQUA9Ozs+PD09QEJDQT9BQkE9Pj09Oz0/Q0RCQD9BREJFR0pKSkpKTE1MTExNTExOVVNLTE1USVBKSU1KSUpLS0pJSEdKS0lKZnJxc3RzdXJydnl5e31+fn5+fX9+f39/f36AgICAf4CAgICAgIF/gIF/gYCBgFZMTlBQTlJRUFBRUU44PT88PDo9PkFAQT8+PkA/Pj07PTw+Pz08PTs6PD09PTw8PDw7Ozo7PD49Pj8/QUA+P0E/QEBBQEBAPT8/PTw6Oz09PD9AQUJCQUBCREZGRkdGR0dISUtMTExLTEtKS0lKSk1MTEpMS0lISUxMSklJSElLR01tcHF1dXV1c3V4eXl8fX5+fn5+fn5/gH9+gIB/f39/gH+AgYCAgYCBgICBgYCCYUtPT05OT1BPT1BQTzo8Pjw9Oz8+PkFBPz0/Q0NDQD48PT9APz89Oz49PkNFPz9APTs9PT08Ozo9PkFBPz5AQD9BPz89PD48PTs7PD0+QUA/QD5AQ0NEQkRFSEVFR0hISEdGSUpJSUlJSUhKSkpKTEtKSklJSEhKSktMS0lLSkpIVnBvcXNzdHR1eXp7e31+f35+fn5+f39/f39/f3+Af4CAgICAf4GBgICAgIGBgIJtTFBRTk9QTk5PUFBPPjw8PT4/P0A+QEA/Pz9DRUQ/PTs8QD46Ozo6OTc6PDk9PUA9Ojw7Ozw7ODk7Pz49PD07PEA9PTw8Pjs9PD0+QUBCQUBAP0JEQ0RFRkZGQ0VHSElJSEhJS0tMTUpKSUpNTUpLSktJSEhISEpJSktKSk5MSUlfcHBycnJ0dXZ6e319fX5/fn59fn5/f35/f36AgIB/gICAgICAgYGAgICAgIGAgnZNTk5NTk5MTE5QT0w+QTw8PT8+QkM/PkFBQUJBQD08PTs+PTo6Ojw6ODk4ODo7PUA/PDs7PDs6Ojs+Pz89PDg6Pjw9Pj89Oz4/QEJDQkJDQ0FCQkFCQkRCQkRCRENGSUdGRUhJSUtNSklKSktMSkpJSkVESUlGRkhISUpKTEpGRmdwb3FxdHZ1d3t8fH18fn59fX1+fn9/foB+fn+AgH+AgICAgICBgYCAgICAgICBek5JS0tMTExFSUxOTTw/PDw9PkBAQUE7QkNCQ0A/Pj9APT8/Pjw+QD89PT0/PT0+Q0Q/Ozw9PkA9PT9BQ0A8OTtBPz4+QT07P0JAQkNCQENDQUNBPT0+QD0/QUFBQENFRUBAQ0JDR0dFRENGRUZGR0VEQEFHR0ZDRkRHSEpHQz5IbG9wcHF0dXZ5fHx9fHx+fn1+fn5+fn5+f36Af3+AgICAgICAgIGAf4CAf4CBgIF+UUhLTU1NS0pLTE9RQD8+PkFBQEBBR0FCRENEQT9AQEA/PUA+PD0/P0BAQENAQD9AQD49PD1ARUFCQkZIQz08QERDQUE/Pj1AQT4+Pj88PkBER0VAPkBBP0BDRkVDQkJDQEJEREJERUFCPkFCQkFCQEA9QUJDRENDQUNFR0E/PVZwcHFwcnV1d3p8e3x8fX9+fX19fX1+fX5+fn9/foB/f4CAgICAgYCAgIB/gIGAgX5SSEtNTUxLS05OUlVEQkBDQ0FBQkBCQ0BAQUFAQUA+Oz48Pz08Oj49P0JCRUA/P05hX0pAQ0VJSUlJTE1LRUNGR0hFR0VFRUREQ0E/QD4+QkZKSkdFRUZGRkpOTUtKSUdHSEtMSkdHQ0REREVEQUJCQ0BDREVEREVERUZDQkFEZW9wcXF0dnV4e3x7e3x+f319fX19fn59f4B/f39/f39+gIGBf4CBgICAgH+AgICAfVJJSUpKSEpKTE9SU0dGRUdIREdIREA+PDs+QERFRD88QUNEQj8+QT9BREREQ1d1homKflhHSEpMTE5PT0xIR0hHSElJSEhHR0hIRUNFRUVFRkhKSkZFR0lKTU9PTU1LSktKTU5LSUhHSElIR0ZFRkZGREZIR0VFSEhGSEdIRlFub3BxcnZ2eXt7e3p9fX5+fX19fX1+fn1/f39/fn5/gH+BgYGAgICAgICAf4GBgIB8UEhHSElGR0lKTU5OSkxJSUpLTE5KRkNBQkNGSkhJR0hISUdGQkRGRERDQVV0h4mHh4aIgldJTE1MTU1MSkdHR0dER0dHR0ZIRkhFQ0RERkVEREhIQ0NDR0pKS0xMTExMTElKS0pKSUlJSEpISEdISUhHR0hGRkZISklJSUlIXW9vcXJ0d3d6e3t6e319fn59fX19fX5+fYB/f39+fn+BgIGAgYCAgICAgIB/gYCAgHxNR0ZIRkVGR0dKS0pMTUxLTU5NT0tJSEhKS0tMS0pLTUpLSEhGRkdGRVBshIeGhoaHh4iHfFBLTEtIR0ZGREVDQ0BBQ0NDQ0ZGRUJAPj5AQUFAQkQ/Pz9ERkhERUdJS0lJR0hJR0lJSUpJSEZKSkpKSUpJSkpKRklMTEpKS0tmb3Bzc3R2eHl7e3t8fH1+fn19fX19fn59f39/f35/f4CAgICAgYCAgIGAgICAgICAfU9GRkdGR0hHRUZHR01NTUtMS0lHQ0NDRElLS0tLS0tNTEtNTElGSlZsgYaFhISGhoaHiIaKdUlJRkI/P0A/Pz48PDw+Ojo8QUFAPjw5OTg8PD07Pjs5Oz9BQkFBQ0NDQEFCRURCQ0ZISUhISExNS0dJSk1NTk1KSktLSkxNU2xvcnRzc3d5ent7fH19fn9+fX19fX1+fn5/foB/fn9/gICBgIGBgICAgYCAgIB/f4B+UUZFRkdJSUdEQ0VGTk1MSklIRT85Oj5ARUhHSUhLTE9OTlFOUV5ygYWDhIWFhoeIiIiJiYyOZkJCPTg4Ojo5ODc4ODk2NDc5Ozw6ODU2Nzc4OTc4NzY4OTs7PD5BOzk5OT09Pjs7PUFDRUhKTUxMR0lIT1JRUFBOTE1NT1Fdb3BydHN1eHp7e3x8fn9+f359fX59fX5+f39/gH9/f4CAgICAgYCAgICAgICAgIB/f39RR0ZHSEpIRkVGR0hMTEpJSUdDQjU2OjxDQEJGSEtITEtOVGd7hISDgoOEhomKi4uLiomKi4yJVDs4NjU2NzY2NjQ2NzYzNDY4Ojg3NjU2NTY3Nzc3ODo3Nzc4Ojs3Njg5OTg5ODc2OjxAR0ZJRklGRUZPU1JTU1JPUE9SVGVwcXN0dHd5e3x7fH1+f35/fn19fX19f39/f3+Afn+AgICAgICBgICAgICAgICAgH9/flJISEhJS0lHSUpJSkpLREVIRUJANTc4OD06PERCREZDQ1Z4hISCgoOChYmKiomJioqKiouJiYqBSDY3NjQ2ODg3NDU3ODQ2Nzc5OTc2Njc2NTo6Ozo6PDg5ODk5ODc3Ojo6ODg3ODU4OTtBPT4+QkE/QUtMT1FQUU9PUFFXa3JydHR1d3p7e3t9fX5/fn9+fX19fX5/f4B+fn9/f4CAgH9/gICAgICAgH+AgICAf39+VEhHSUlMTUtKS0tMSUg/QEFAPDo1Nzk4OTc6QTk8R1JgfISDg4SEhIaJioqIh4iIiYqKjIqJiYx6Pjo4ODs8PT45Ojs8ODk7OTo7Ojk5Ozo5PT09Pzs7PD06Pjw6PDs8Ozw8Ojo8ODo6Ozs5OTk8Pzw9QUJESUpNS0pLTFdvcnR1dHZ4e3t7fHt9f39+f359fX19fn9/f35/f39/f3+Bf4CAgICAgICAf4CAgH+Af35URkVGSUxOTkxKSk1CPzo7PDo4OTk4OTk5OTo+PT5Pd4GCg4SEhYaIiYiHhoaGiImIiYuMi4mKioxsPDs+QkNFRUJBQUI+QENBQD89Pj5APz4/QD9APT0/Qj9BQT9BPz1AQUA/P0E8Pjw7Ojs6OTs/PTs7PT1BQUNBQkNBWHBxdHR0dnl7e3x9e31/fn9/fn19fX5+f35+fn9+f4B/f4CAgIB/gIGAf39/gICAf39/flJFQkFHSk5PTElHSzo4Ojs5Ojo7PDo6Ojw7PT5APk59goOEg4WEhomJiIeGhoaHiImKi4uKioqLiotePkRHSUtKSkZHR0RGSEdFQ0FAQ0VDQkBCQ0I/QERIRUNFREVFQUZFRkRGRkRAQj49QD49P0A+Pz8/Pj8+Pjo7PTxgcXJ0dHV3enp7fX19fn5+f39+fX19fX5/fn5+fn5/gH9/gICAgICAgICAf4CAgIB/f4B+UERAPUNIT01HRkJEOTc6PTo8Oj09Pj47Pjw/PkI/TH6DhIWGhoaIiYiIh4aGhoeJioqLjI2MjIuKiodXR0xMTUtOSUlLSElKSklGRERGR0ZEQ0VGREJISUtHSEdGR0dFS0pMSUtLSkNGQ0NEQkFBQ0JEQ0NERENBPTw+QGhwc3R0dnd6eHt8fH19fn5/f359fX1+fn9+fn59fn+Af3+AgH9/gICAgICAgICAgH+AgH9PQT49P0RMS0BCQkE5Nzs+Ozw6PT8+Pzw/PkJBRD5ng4KFhYeHiImJiIiHhoaGiIiIiYqMjYyMi4uKjH9QTVBNS05LSkxJSUpIS0dFR0hISUVFSEZGRUxMTUlKR0dISUpOTU9NTE5LSEZHR0VFQ0ZGRkZERUhIRkNBP0BMbXB0dXZ4eXl5fHx8fX1+fn9/fn19fX1/f35+fn5+f39/f39/f3+AgICAgIB/gICAgICAf1FBPz4/RkdHPTxAQDg3PDo7PDo9Pzw9PT9AQ0JIU36DhISFhoaHiIiIiIiIh4eIiIiJioyNjIyMjIuKjXFNUU9NTExMTEpJSEZKSkVKSEdLSkhKR0dHS0xOTExISElKTVBOT05MT0tJR0lKSElESUhIRkZHR0lHQ0JBQ1VvcXV2eHp7eHh6enx8fX5+f39+fn1+fX5+fn5/f36Af39/f3+Af4CAgICAgICAgICAf39/VERBQUJHSEI/OD9AODo7Nzw9Ojw/PDw9P0JDQ0xthIOEhIWFhoeIiIiIiIeGiIiIiIiJjIyLjIyLi4uLi15SUlBNTk1LSkdGQ0hKR0xKR0tPTEtKSkxNTE9QTkhJS0xPUVBQUU9PSklKSkxKTEZHSEdGR0lGRUVCQEJCXHByd3h5enl5eXp6e3t+fn5/fn59fX19fn9+fn9+f4CAgIB/f39/gICAgICAgICAgIB+f39VRUNFRUdHRUQ7P0E7PTw4Pz09PkBFRD1CRENGSnSGg4ODhISGiIiIiIiIh4eIiIiIiIqLi4uMjIyMi4uNfFdWUlJUUk9MS0pFRkZLT05PV1ZRUE9RU1JNU1RPTVNMUFNVV1JTUlBMS01NTUtOR0dKRkZJSkRERUVCRENjcXV5eXp6ent6e3p7fH59fX9+fX19fXx9fn5/gH9/gICAf39/f3+BgYCAf39/gIB/f39/f1VGRkdHR0dIRj5AQj0/PTxBP0FBRFRLQkhJRklLeIaDhYWEhYeIiIiIiIiIiIiIiIiJiouKioyMjIyOi4uLZ1ZWa2FFUlFRUEo7O1FTUmB1XVVWVFZZWVJYWFJaZlBVV1pdUlRXUVBOUlBQUFFLS0tHSEpIRUZJSUlISWpzdnl5enl6e3t8ent8fXx9f359fX19fX1+f39/f3+AgIB/f39/f4CAgIB/f3+AgH9/f35+VEhKSUlHR0ZFPz9BQEVBQ0ZEQ0RLVlBKT09OUFF5hoWHhoWGh4iIiIiIiIiIiIiIiIiIlJyMioqMfWGKi4uHbFtkVTpYWFhTUD9AVlVZXGRgVllicl5dVl1aVkVRWVpcWV9UWWdSVVZYVFRWU09PTUtMSklJTE1LT01Tb3R2eHl4d3l6ent6e3x9fH5/fn1+fX19fn1/f39+f4CAgH9/f3+AgICAgH9/gH+Afn9+fn5WSkpJSEdGRERCQT9ITElNUEtJSk9TUVBUVlVXVXaFhIWFhYWGh4iHiIiIiIiIiIiIiImcnaCPiY5nO36MiYqLem5wWFpbWlJTUldWVFpadYNZVX2QYVxYXV5XSVZeXltbX1lIWVhZXF1YWFlXUlFNUFFNTU9TUVFVUmFzc3Z3d3Z4eXh6e3t8fX19f39+fX59fX1+fn9/gH9/gIB/f3+Af3+AgICAf39/gIB/gHh5fVlOS0pJSUZCREBBOk9RUVdYUFBQUVJTUlZXV1hYbYGCg4WEhYaHh4eHh4iIiIiIiIiIiJaanJeIioFuhomIh4OKfmZZWVxZU1ZUV1JRV1ZjloBRZXJYWldfaFBgZlpaWFxoYkdPWmlnXVtcXV1XU05TUFBRVlZWVllab3N1d3Z2dHd4eHt7fH19fX5/fn59fn18fn9/f3+Af39/gH+AgH9/gICBgYB/gH1yfX9/b3R8XVNQT01LSkVDP0A7UFBaWlpSU1FPUVJRVVJVU1ZfdXiAhYSEhYaGhoaHh4eHiIiIh4eIh4ORjomJiIaFiIiGfYB7XFBWWFRSVFJRUUxPTUtmeVpdVFlVVl1aTFRaVVNUXlpYV1dXemtYWlxcXlNQUFBJTk9XVlhbWmRxdHZ2dHR2eHl5e3t8fH19fn99fn1+fX1+f39/f4CAf3+Afn56eHd2c3V7f3+AgHRrfn5rcXleW1ZVU1JPS0ZDREFNXoNsVlJTT09RT1FWUVNSUlRjZHaAg4KDhISEhIWFhISDhoaGhoeIhn6JiYiHhoOHh4d5bXFWSUtOTktNS0hKREZIRUM+U2NVf1JRUU5LUlVSTU9ZUU1OUVNVVU1RU1JQTkxMSENJR1JTVFpdbXJ2dnV0dHd7enp7e317fX19fn19fX59fn9/f39/gH99fX5+f39/f4B+e3Zzd31+fmR1fWlxdGBkXV5bWVVRTElMSWFsknRQUVNNUVJQU1tSU1JRUlVVYnN7fH6AgYKBgX99e3uAf4OChYaHgoaGhoGEgYaFhnVfXUtDPkJCQ0NBP0RQQ0NAQz5CSEdWQElOTUddaVFIRk9GREVGSEdIQkNIR0hKR0RCQUNATlBNUmR0dXZ1c3R2eXx6e3t7fHx9fHt+fX19fn5/f3+AgIB/f3x8fX+Af39/f4CBgH12dHt/bWh8Z25xZmhlZWJcWFNRUFVSc1dlW09PTkxRUlBVWVNVUVFUUk9WYGtsc3Z6e3h5dHJuc3RzeXh+foOAg4OCgYKAgoGBa0xHPj46Oj5APz4+PmpQS2FFRkhJRUI/SE1NR01RVUpCRT8+PD08PT0/PT9BQ0I/Pzw9Qj5JTUZVb3V1dnR0dnh6fHp9e3x9fX19fH59fXx+fn9/f4B/f39/enl3eHd2dnh7foB+fXt4dnx1YXhnbHBqbGppZmBbUVFaXFleSUpPUE5LTFFSUVRVVVdRUVdWUFhbYl1hZ21tbG5qaGBucmltbHF1e3p9e3h6fHx4d3hkQkBAQTw6QkNBQUNBW1xPe05PT05LTE1PT1BMS0xXTkhHQUE8OTc3NTk5PTs7Ozg5ODk/O0FHPlx0dXZ2dXZ3eXx8fH18fHx9fn18fX19fX9/f39/fn9/f314dXd6e3p3eXh1d3t8eXh1eXdjcWhpcG1ubW1oZl5PT15cWklHT1FRT01QUU5RUlNWWFNSWVROWVpbV1lcX15fZV9dXnF3a15gZ2t3b29sam9ubmxmYllHRkZIQkFGSEVFRkNMUU9hV1JYUVBTU1JVW09PUVdQTUpERj46OTY1ODc5Nzk6MzY1Nzk1PEI9ZnR1d3h3enl7fX18fHt8fX1+fnt9fn19f39/fn5+fn9/e3d1eX18enh8fHx8dHd2d3Z1d2tuaWhxbm9vb2prYFVXXlpXTUtTVFNQUVVPTFJTVFdYU1RYUUxYWVlWWFhWWFldV1hYaHNrXVZgdGthYV9dZGBfXllVUE1PTUxJR0pLSUhGQ1BPU1pXVFROUVNZU1xlVU9TVFFOS0lIQz9BOTk4ODk3ODg0NzU3ODU5OUducnV5eXp7e319fX18e318fX5+en1+fH1/f359fn59f358dHR1e3hycW9vbnR4cXJzeHZ1cWZkZ3JucHBxbm1kXV9fWVdPUFdWVlNUVk9PVVZXWFlTVVRMS1NVVVVVV1BUVVdUVVJdbl5STllgW1ZZO0RVV1RbZkpMUFJST01NTk1NTEpGUFBVWVNUT0pOT1VTVFxWUlVTU09NTElISEY/Pj06Nzg3NjU5OTY3NTY1V3FxdHh6ent8fX19fnx8fXx+fX15fX18fn5+fXx8fX1+fXxydnF4eHJ1dXFxbnBwb3B1dnRuamRkanBwcXJwbmZlZGNcXlJUWlZXVFNWVFJYV1lZWVJVT0lHT1BPT01SSk9QT09OTk9UTE1JUFBTVFUyPFhNSUFRPWNgUVNRUE5QUE9OTk1QTlRSUFJMSUxLT1JQUVJTVFFTT0xNS0xMSENCQT06OTg3NjtCNDU2NjtlcHJ2eHl7fHx9fnx9fH19fX18e3h8ent9fX58e3l9fH18e3B1b3d1cHV0b3N2cHFxcHV1dmNqZ2VXaHRycnFuaWlocFZWVFVYVVZVUldWVVpZWFdWUVNGRkFGR0dIRkpESEpIR0VITEhLSUdMTVBNRy9FX1I9M0A+am9hUlJRQEdUUU9QUFFOUU9QT0xKTExPUE5NUFFRTlBPSkxNTUtHRUVDQjs9PTw5PUc2Njc2RG5xdXd6e3t8fH18enx8fX5+fXt5dnh3eXl8fXp6dn17fHp6b3Fud3JwdnFtcHNwb3Bzc3N0ZmdgaFpXa3JzcmxtbWtuYmVQU1RSU1VPV1ZVWVlWUVFRT0A+Oz0/QEJBQ0BCRURBQEdIR0hGRkhKTUxER0NPUkI4RE1TXWdTUVNBR1VQT1FRUE1NTkxKTEtMTk9PUUxOTk1JTUxJS0tMS0dGRkVEPEFBPjtARTs8ODlUcnN1eXt7e3x8fHt5fHp6fn58e3V0dXJ2dnp6eHpyfHt8eXltcW94cnF1bm5xcm9vb3Rzc3J1dGtnZ15lam1wa29xbWltY0xPTk1RU0xUVVRXV1VMTEtIPTk4Nzs/QT49PUBAQj0+RUhGREZGSUdKSkBGQUFARUdESU9IUVJhXFFQUk9TTk9PTExPTUtNTE1PTltWS01RT0hKSENJSkxMS0ZGRkU/QkM+PUJHP0I/QGRydXd7ent7fHt6end8d3l9fnt7cXN0cHJzd3R4eHN6e3l2d2xxb3ZxdHRsb3Fybm5vc3ZydHNycmtsZW5zaG1ubWxtbGprSUxISE9RSlFTUVRTT0tIQ0U9OTg3OT9CPzs+QUBAPkFESUVDSEdJR0lFQkI/PjxCQUBHSkVNT2JlUE1PTVdLTE5LS01NTExLTk5TZE1KTFJJSUlFQklKTE1OSkdJRkJCQkA/RUZFSERMb3B2enl5ent6fHp3dHh0eHx8eXpucXJtbm9ycnZyc3h8eHZ2bXBtc3B1dGxwcHJvb29ydnVyVlZucWdseYRqbXFybm5qaG9ISkNHTExJTVBNUE9IS0U/Qj05OTk6P0I/PEFCQUFEREdLRkRJSUdHSENDP0I+Pz9APkNFRExNUVRMSklNVEZJSUpMSUpLSUpMTU9QUVBLR0NLR0NDS0pMTk9OSUpJR0NDQ0RJSk1MSVpzbnh5eHp6e3l8dnJwdXJ0eXl2eGpxbmpsbG50dG1zdXtzdHhyb25xb3ZzbnBvcnBvcHN0eWpOYGdzanR8eWdvc3FpcWhlcUhKQ0ZHSEdKS0lKTERHQjw+PTo6OjtBQj89QkJDQ0hFSkxKRUlJRkdIQ0M7QUBCPkA/QkRESU1PR0hKR0hLREhJS01ISkxISUpMSk1dUkhJRE5HQkVMS05OUU5LTUpLRkdHSk1OUk5NY25qd3Z3e3l7en1xbWxza3B0dHR1aHBtamlra3RwbnR0eXByeXRvcnFvd3NvcXB0cnBydXR5a05WbXVscXt2aW5vaWp0aGVwRkpDRkVGREVFRkVHQ0NAPTw9Ojs6O0FEQD9CQ0VFSUZKSkxGSUlHRkZEQjpBQ0M+P0NDQ0RHS05ISk5IREhFSUxOTUhJTEdGRklJTE5LSUhFT0lDR05NUE5QTk5PTUtJSElPU1FSTlNnZ2Zyb3N4dnt6fGxoam9la3Btc3FmbWxoaWtsdG1wdXR3cW94dG90c3J2c3BxcnRzcnR1dXZ2WFZ1dWtvdHJrb3ZsaG1mX3BHSkNFRURCQkFFQERCPj8+Ozs7PTs9P0RCP0FDRkdLR0pJTEhHR0dGRUM/PURFQj5BQ0JDRUdISUdNUElGRkdLTk9LRkhJRkVDRElJSEtJR0hQS0RKTU1RTk9OT1BOSkpJTVJVVVJQWGVhYW1mcHJvcnl6Z2VoaGNpbGZxbGZsbWdpa2xzbXB2dXRwbnZyb3Nyc3V0cXNzdXRzdXZ2dnl2dXR2bGt1dW1ydnFsbmxlck1HRURGQkFAQUQ8QkE+QT06Oj0/Oz4/QUI/QEJFR0pGSUdJR0ZGRkRDQkFBRUZDQkJCREVFR0dIRkxQTElPSkpMS0lGSEVGRUNDSEhIS0pHS1JNQ09PTlFPT09OT09LS0tQVVdWVlRZYF9daWBtaW5ocnNiZWZmZGhoZm5pZm1taGtrbXJpcXZ1c3Ftdm5vcXJzd3Nyc3R1dXZ2dnd2d3Z2dHd1a3N1bnV0c3Bya2tzTUdHRUdBQUBDRDxBQUBDPDg6PT46Pz1AQkBAQERGSEVIRkZIRkVFRENFQkRJRkNHRUFFR0VGRkdFSk1LSFFNSktISElFRkhIRUNJSUpLTUtQU05EUlNRUVJOT01PUE1MTlNXVldZVlheWl1kYGhjamlna19kZWZjaGdna2dna21rbWxwcWd0dHVyc252b3FwcnR4cXNzdXZ1gpF5dnZ0eHV1d3hub3VvcnN1cXFpcHpNR0dHSEFBQkVFPEBDQkQ8Nzo9Pjs+O0FCPj8/Q0VGREZEREdFQ0VDREZGRkpFRUlHQkdIRkdGRUNGSkpHTUtMS0hKS0ZJSEpIREtLTExOT1JUT0hUVVRRVFBRTU5RTk1RV1pWWllXWl5aWGFgYGBeaGVjYGRlZ2dqaGhqZ2hubGxvbXFwaXV1eHJycHVwcHBydXZwdXN1dnV7fn14dnR3dnZ2d3BsdXBtc3Vub3NzeU1ISEdJQ0FDR0U8QEVCRDw4Oj4+Pjw8QkI9QD5BQkZDRUNDR0RDRERGR0dHSUZISkhDSUhHSUdGREhLSUZLSE1LSktLSEtKTUtJTkxOTk9SVVZPTFZWVFFUUlJMT1FQT1RZWllcWlpcX19dX2NeXGJkbGNgZGdocoVoZ2pmam5ucG9uc3FqdHV4cnNzdHJucHF2cnF1cnV1c355jn11dXZ2dnZ4cml1cWtydGxxd3F1S0lLSEpFQkRHRT1BR0REQDk8PkA/Pj9DQjxAPkFBR0NFRENIREVERkZISEZIR0lLSkVKSEhKSEZGTEhISEpHTExMTExJTUpNTk1PTFBQUVVWV09LVlZVU1NSUUxPUlJRVltbXV5bXV5gYGFgYmZdZGBmaGBlaGpkc3NmamhmbHBycW9zc25zd3dwdXZ0c21vcnVvcnNwdXJ2cnSBdnV1dXd2dXd0Z3Rya3Fya3J3cHdJSkxJS0dCRURFPEFGRERCOz8/QUBAQERBQEI+QUNIQkVERkdFSEVGRUlIRklISkxISEpKSUtKRkpLSElKSkdLS01MSUlMS01OTk9MT1BSVVdWTU5UVlVTUlFQTU5UU1JXW15eX11eYGBhYWJgY2RlYWRpY2Rpamd2i2xraWdtb3NxcHFwcHJ5d3J1dXRzbW1zc21xcm90dXVzcHN3dHV1d3Z1dXRlcXNrcHFqcnZwd0pMS0tMR0NDQUU8P0VFRUM9QUFDQkJDRUFDREFBRUdDSEZIRkVJRkNHSkdHSkZJTEhJSk1LTUxHS0lIS0tOUUtSUUxTTUpNTU5QUFBUT1dYWFtOU1FXXFpTVlBOVFVUVFhaX2JiX2RhXmFjXmBmY2FiZ25pY2loaG14dm1oaW5vc3JwcXJycnZ0c3Vzc3Nua3NxbXByb3R2c3FxdXZ1c3d5d3V0dWNtdGtvcGpxdHB3TE1MTExHREFARD49REVGQz9DQUVEREZDQkVHQ0NJRkJISklHSEpGREtKR0hKSUlLR0pKTktOTElMSEpNS1pmSmRcS2xSR05NX25VbHNbcXBid2NSUGJ2dWh1Y2F2YVhucWJkdmluemZcbHVgbGtWYHd1aGpoaGZnbG1qbW9qbW9zcnBycnFyc3Jzc3J0cm5sdG9ucHFxdXVycXN0dnZ1dXl3dXR0YGt0a3Bwa3FzcXlLTkpLSkZCP0BCPzxERUZEQ0NDRUVERkJFRkdEREtFRUpMS0lLTEdHTklISktHS0pJSkpOTE1NTExJTUxMW3NiZHBebGxVTE5lcl1nZXFsbnRncGlfYVlubWJwcGJrampnb3F0ZXRublxwdmdwTkxyeXZrYWFrZWVseG1rdmxub3NycHJxcHFycXJycnRybW1zbm5vcHJ1dHFzc3R1dXV0d3h2dXRibXVrcHBscnJxektMSUlHRUQ/QUE/PUJFRkJGQ0VERUVEQ0hIR0RES0hHS01NSkxMRkpPSEpLSklMSkpJSk1NTk1NTUtOTU1bcnBvbnBwbGtNT1BtWE5pYnRycGFtb3ZcWWxQW21tWnFta29teHh0c2lwXWBzbHFqVXV5eG9jXmtmYmdwcGppb3Bwc3NwcXBxcXJycXFycnRsbXJtbW5vcnV0cXRydHV1dHV1enZ1dGVudWtwb2xzcnJ5SktHR0VFRUJBQj0/P0VHQkdESEVFREJGSUhIRUdLSkdNTE5KTE1HTE5JTUtISk1JSklKSk5PTk5NTE5NTFxoZHVdbHFXbE1PUW5VWmtea2x2YWxkdFRlY05sWWxcdHBraWx4and1aHBdX3NraFdiY3d8b2NgZ2hhY2l0eWtubnFzc3BxcHFwcnFwcHBydWttcW1tbW9xc3Rxc3J0dnZzd3Z6dnV0aG91bHNvbXNydHZJTUdJRUVEQ0FCPEJAQkZDR0ZLR0VDQ0hLSEhGSUxLRk1LS1JSTEhNTUlOSklITkdKSkhJTk9NTkxKTU1KWnRwcG9xcW1sT1FSbllza2dvb3Fxb210Xm5YYXRfbm9wb3Fyb291c3R0alpedGN3eHJqbnpoYWFjZmFiam10dXBzdXZzcXBwcW9ydHt/fn13bGtxbmxtbnByc3F0dHN1dXR4eHl5dHVrb3VtdG9uc3N2dElLSEpDRERFQEA+Q0NBRkNISU1IRkNGSkxJR0ZKTUxGT0pKV1JLR0tKSk5JSUpMSUtKSUlLTE1NTElLS0tTa2JZaV5famNyclpfWWpvX2VlVWtfZFthYlFgbWhcalxuaWlkW29lZHBdWlxrW21xY3BzbGRnY2RnYGBrbXBwb3R5cnVxb3BxbnmFiIeHhoWAdnNua21tb25xcnR0cnR1dXZ5eHhzdW5xdW53cXJ1dHdySEhGSkRFQ0ZBQEFFRENGQkhKTEdGREdLTElFRkpPTElPSkxbUUpGSEhLTUlISkpLS0lISUdLS0tLR0hLSkxLTEpJS0xOVFtdVFBVTVFPTk9PVVJQUFFPT1FKSk5QUWRxaVRZVltbXFVZWl1YXVxcY2ZhYWZiY2ZfXmZrbWhtdHhydHJvcHB0hoeGhoaFhYaHg3pwbW1sa3FzdHRydHZ0dXl5eHV2cXJ1b3ZydHN1dXNHQ0VHRkZARUM/Q0dERUdDSUtMSEZER0tMSERHSVBLTE9LTFdNSUZFSElKSElLSExKSUZISEpISEhFRkxISEpOS0hPXFdeT1xcYF5PWFlTXFxiXk1ZWk1YYVJLWWFaU2BkXGFYW2RkVlZYXFlaWFxWWVxeY19kYGFfZWhrZ210dHFxdHBxcoGGhoaFhoWFhYaGhoR9cmtpb3Jzc3N0d3l5eHl4d3h0cXhyeHNxcnVydE9CQ0RMTUJDREJESUVHR0ZLSktIRUVKSkpGREdIUEpMTUpNUklIRUFIRkpJS0tJTEpJR0VKSEVGR0VFSkdCSU1JSlRfWWBYYGFbYFVYWVRdXlpfUllcUF5cWU5fXF5TW15kXlpdYGNfWV9iW2BeW1VZWFpfXmNjYmFjZWlla3Jwb3Bwbm93hoaFhYaCe4CFhYaGhYaFf3VxcHJyc3V5eXp5eXh4eHdyeXZ4cnF4dnR2YVNKSk1JRUNCQ0ZHRUdHSUpKSUhERktKSkVFSElOSk5MSExOR0hGPkdHTElLS0pLS0lHRUlGQ0RFQkZKRD9JS0hOW2NZXl5hX1JUU1dfX1xdWV5RWVxNVl9XS1FZW1FbX2JhXV5jYWBiYmJjY2VaUllWV11aXmRgX19jZWJob21tbGxsbHWFf4SDeXV8hIWFhYaGhYWGhoN9d3JydHd5eXl5f359eXV5dnZybnp3dnhYUUpGREdFQkVHSEZHSElGR0pHSEZIS0lLRENLSk1NTExISkpISkc/R0ZOS0tLTUtLS0lHSUVFQERBSElBPkhJRk9dYVpbZF1fVFFSWF1cXFxfW0tXXExSXFlJTV5RUV1fYmNjY2NiXGRjYmRjZVhSV1VUXVlbYV9eX2FhX2Rsa21qa2xudn51gXp8hIWFhYWFhYaGhYaFhoaGgnpyc3V1e4WHh4eGhYSBfnhwend2eFxSTUNASUZDRUtJRkdHSUdHSkZGRklMSk5FQ0tKTE5KTElLSklJR0JISFFNS0tPTUtLSUhIRkU/RUJISEFARkVDVF1ZXlhfWV9bXVVYWFBdXVFLSlZeWF5bXVZaYVJSX19iYmBgYmJfY2JiZGRiWFBSUlNcVFxdXV5eX19fZGhnbGpubnB7e3x+e4CCg4SFhYWFhYWEhIWDhISHh4FzcneFh4eHh4eHh4eHh4WDgHx4XFNLQkFHR0RGTVJIRFJLRkhISERGS0lNUEVHSUpLTkxMSUxLSklHREhLUU9NTFBNTEtLSUpERUFFQ0hGQUFGREFWVUVcVF5TVl9YTlRVTlpbTUpLVGBhW19YX15iXU9ZYlxgYF9iY2FdYmJXYF9UUVBRUllTXlxbXV5fYGFmZmVsZm9vd3x7gHt9f4CEhISEhIWFhYODhYKDgoWFhnpvgYaGhoeHiIeGhoaFhYSFg35JTkZERkZIRElTY1FFV19JR0dIREZNSlBQRklJSktOTExLTUtKSkdFSU5RUU5PUE1OTU5JTEJEQUNDRkRDQUNEQExIQ0xMUE9OTEZNRkZISUhHTExNT1BJTE9QUFNQTFFTUlVaWFdZV1djVk5SVFBRUE9RVVRcWVlbXl5hYWVmY2hkbG1xc3N6eX97en+EhISEhISEhIKEgH57gYOBfXuFhIaGh4eHhYWFhISEgoGAfUtJRUVHRkdES05eTUhIWU1HSEpIR01MUVFJS0pLS05NVU5PS0tMR0dLUFRTTlBQTk9PT0hMRmBFRF5MRGZjQ0xbSF5cc21PTVZtWUxDT19UbFdnSl1XVV5ETVFVTE1TVlFSVFhWVFhUVFxUT2VaaGhlWlVrVFhXVVtcXGBgYWJiYmBnaWdubGhyenx9foGEhISDg4ODgX19enJ7gXp7f4KAg4SEhYWBhIWBg4N/fnp7TElFRkZIRUVLUFRKS0dgVEhKT0pJT01SUUtNS0xPUlVST1BKTE5HSE1RW1lPUFBOUFFQSktRf1FJfFlZcnNXUG1HcW5vYVZQcXF0T0Jqc25xdHBTb19bblhdVlxYVWtoVV1WY1lgWVpeVVVXf2l0dXVfYXZfWWJcXGZbX2FhYWJeYGNnbW9sYHB3dHiBgYKDhIJ/fX6Adnh6bXZ+dHh9gHx+gIGChHyAg3p/gX9+d3dOSUVITU1CRExMR0pMRlJWTEtPSExSWFdRTk9PTFFUTk9RUEtMT0dNUFNbWlRRUk9QUFBLSVp4XVR4ZGhYUlNQdmZ0bHBibmZrUnJOTHdtanJwc3JxcnBvb4BdZXp1eHFxenF+cn1rdX1hUmh8ZXNzb3NzfH1wfnhvf3JgYGBiYlthYWhsbmtibGZnbXd+gYCDfnt4d4B0dnpocn5udHx+d3h7foCDeHyBdXx/fHxzc05LRmBdR0FFTU1IS0tISlFPTU5KTlZeWVVMUVNOWVlMU1JSTkxQSVFSVFlXV1BUUFBRUktIZ3hsY3hxbVpKTFR5cHVtdWJudlBkZEhldnFtd2+AamZ4eGlXclFoem1panp6fWx4en9waG5YdXVqdnVwgGFzaH1pbHh8b19fX2NiXF9kZWdqamVoYmNkbGxwcHN0c3NzeXFyeGJsdGdyeXtzc3V5foFzdnpufH15eHJuTUpSdE5DQkVQUUhLTEpMUU9PT01QWmBaWEtUV1BhXlJWUVlTTVBKU1RVWFdXUFVQT05SSktyb3V1cXVxY2hgVW5LcXBeR2h5V3ZUS2h4fXdgeXtzbmFdbW9kU2dydW5teXB3bHZzdHFsbVxzfnprbXl8bHVufGxxdnV4Xl9fYl9dX2VkaWdoZmVeYmJpaWlqa25va3FubWpwYWNmZG93eG9tcHN5f25xcGp7enRyb21LS1pWSEdFR1JRS01OTExRUVBQUFFXXFlVTlZZVWZYUlJZXlRNTkpUVFZXWVdPU09PTlFJUm1IaXdLYGR2dlRWbE5ubHtyYWpnf3VUS1ZrZ3xsbWx4X1pwentfYHpzY3JveHFoZHxpcntdVEtrX3Z1bGp2fHttfnlrfHBdXl5iW19iZGVnZmZlY1tjY2lra3JzcndnbWloZGdgYWxhZ3NybGdsbXJ8a21oa3t0bW1rbU9HSktISkhIUlFNT1BMTFNTUk9TUlhSV1RQV1pWVlRUVGFgUU9OS1RTU1FWVk9PTU5PUUpIUU1PVUxLS1JTUlFST1ZVUVFPUlJYWFBNT1VUV1hYW1tVUVJXW1dYV1tPUlRXV1hRXVhWXFVUT1hSV1dYWVpgXGdyX1tbW11dX2NaX2NjZWdkZGRjWmRiZ2ZmbW5tdWZmZ2NgZl5dZ2BkbGhmZ2tocHpoZ2drdWpoZ2lsUElLS0xNS0pUUk5SUVBMVlZUUFRVWFVaVlJbXVZVVFdVWVhPT0xOV1RQTlVTTlBOTFFQS0lRUUtRTUpKT1FUUVBRU1JKSE1PUFFSUFBQVFZSWFdcV1NSUFFVVVVTWlFOUlFXVVNZVlRYVFNRVFNVVVlZWF5aX2FdXFtaXFxgY1xdYmNkZ2VlZWJZYGFjYWJoaGpuY2FkXl9jXVpjXGJtYV5mZmdtc2RpaGtrZWRjZmhRSktLTk9MTVRRT1RRUk1YV1VUVlhXV1pWU1xgVldWWVVYVFFQS09YU1BOVVBOUU5MU1BNTlVTTlFOTU5RU1BUUFJUVE5LTU9SVFRRUVFVV1VZWltaU1VSVFhXVllcU09TVFdVVFlVVlhUUlFXVVZYXFpcYF1XWV9dXl1cXWBhXltiYmNoZ2ZlYlhgYGJdYGhlZ2VhXl9dXV5aWl9aX2dgXl5dY2hrYWhmaGZkYGJkYlBLTUxQUUxPVFBQVFFPUVpZWFdZWlpYWVZdamRWWFlaV1ZTVE9LT1ZUUE9UUFBRTk1SUU9RWFRRUU9NT1JUTldRU1RVT05OUVRWVVJTUlRYVlpdXFpWVlFSV1hVW1tWUFNVVVVWWFNXV1RSUVhWVltfW15gX1ZfXV5gXVxgX19fWmJjZWhoZWViWWJgYl5eZmRjYGJdXFxcXFlaW1hbYVteXV1fYl9fYmRkYmRfX2BcUE1OTlJRTVJTUFNVUU9WXFpaV1tbXFlaW2RxbWhkX1tZVlZYUk1OV1NNTVJPUVJPTVBTUVVaVVRQUExQV1VRVlJTUlhNT1BSVVhVVFRTVFlYW15dXFtWUk9VVlVbW1ZRU1ZUVlhUU1haU1JRWVdXXV9bYGBgVmJcYGFdYGJfXGBdY2FjaGllZmBaY2BhX19lZV9gY1taXFtcWlpZWVdcWlxbYF5gW15eYWBfY1xZYFpRTk9OVlFQVVNQVVRTUFdcXFxZXlxfV1xeanB3eYBjXFtWVllSTlBXU05RUVBSVFJMUVRTWVtXVU9STlNYVVNRVFFSWU9RU1NWW1VWVlNWWlhdXlxcXlZTTlRWVltbVVFUVFVXWFJTWVxUUlJcWFpdXl1iYWBXYltjYl5hY19cYmFiX2RnaWVnXVxkYGFgYWNkX2JfWVpfW1xbWFhZV1daWlphXV1bXVxcWl1gV1tbWlBPT09ZUFVVU1JYU1RQW11eXVxgXGBVXFxoanJ9c2xoXFVZV1FPUltTUlFUUlRVVEtSVlVaWlpTT1NRVVVUUk5VUVJaUlRVVFhdV1hYU1hcWF5dWVpdVVVOVlZXXlpYUVRUV1hYU1ZZXFRSVl1ZXV1hXmNjX1lgW2ViX2RkXl5jY2FeZWZpZWZeXmRhYWFiY2RfYl5YW19bXFtYWFhYV1taW2BdW1tcW1haW15WXlldUE9PUlpQWlVWV1ZUVFReXmBfXmJdYFVdXmJreXVtfWxaVVpWUVFUXFRUVFVUVllXTFJaVlxaXFJQVVNXVVVST1dRU1dTV1VWW15YW1lVWl5YX15ZXFlSV1JZWFlfWVlSVFVZWVlVV1lcVVRaXV1eYWJgZWRdXl1dZWFiZmReX2RjYFxnZWhmZGJgZWFfYWFiYl9gXldZXlpcXFpZWVdWXVpdXltaW1xbV1lcXVZYV11TT1BXWVFdVVZZV1dVWF9gYWFgY11gVV1eYmVldoJ7aFhZWlRWVFZcWFdXVlZXXVhPVVxZXl1dVFNYU1dVVFJTV1FTVlRYWFheXlhdW1VdX1hfX1hcVlFZVFlaWmFYW1RWWFtZWlhZWVpXVl1fYF9kY2JlZV5iXGBmYmRmZF9gZGJhW2ZjaGZkZmFmX19hYmFhYF9eVlVdWVtcW1lcWVldW1tbWFhZW1laWl1fXVRZXVVOVFpXVFxVV1dZV1ZcYGFhY2FjX19WW2BkYV96dW9oWlxaVlhWWFtaWVtZWFlgVk9UXVtgYVxVVVlQVFZUUlZVUVNVV1tbXF9fWl9cVl9fWV1eWV5WU1lXWVlcYlldVVZaXFpbWlpZWlhZX19gYGRjZGVlY2RaYmZjZ2ZlXmFiYGNdYmNpZWRoX2deYmJjYWFgXl9YVFpaWltbWFxYWFxbWltXV1pYV1xbXGBdVl1dU09WWlZWWlZZVlhXWF1fYmFkYWRhXllZYWRiYGtmaF5cXVtXV1laXFxcX1tZW2JWU1deXWFjXFNWWVBWVVVVVlVTVVRYXV1fYGBdYV1XYV5bXlxbXlhWWFdbWl9fW15XWFxcXF1dW1pcV1pfYV5gZWRkZmZnY1ljZmVoZ2ReY2BfZWNdZmlkZWlfZ15jYmNhYWBfX1tYWVtZWllYWlhXW1taW1dYWlRaXVxbYFxVXmJNUldZVldaWVtcWVdZXmBiYWVhZGFdXllhY2JfYWBhX11dXVhXW1tdXV9fXFpdY1hZWF1gY2RfUlhZUFdVV1hXVlZXVl1dXmFiYV9iXllhXV1eWVxdWVhVVltbYF5cX1lZXl1eXmBcWlpZW19iX2JlZGVmZ2hjWmVmZ2lnY19jXmBmZVppaWNmaWNmX2JiY2FgYF9dXVpYW1lZWFhaWVdaW1pZV1lWVVtdXV1gYGJieEtXV1xZV11cXF1aV1xdX2BiZGJjYV1gWGJjYmBjYWNeXF1cWFdbXF9dYF9dW2BkXFxYWmJlY2FSXFlPWFZZW1lZV1paYF5hYmNgYWNfXGJdX11bXl1ZWVRYXVxfX15fW1peXmBiYltbV1tdYGJiY2VkZ2ZmZ2VdZWdoaWZjYWJcY2dgXGlpY2hpZmVgYmFjYV9gX11dXFlcWVhXWFlZV1xbWldXWFBYWl1hY2Zmcmt/SllXXVtaX11cXlxZXVteX2JjYmFhXWJbYmRiYGNiYl1cW1pXWGpxYFxgX11cYWNfXllZY2VkYlRfWlFZV1xdXFtZW1tjYGNjY2BiZGFgY15gXF5eXlpYVVteXFxhYV9dW2BhYmZiXltTXF9gY2RkZmVnZ2ZmZmBmZ2hoZ2RkYFtmZ15haGhjaWhmY2BiYGNiX19fXV1bWltZWFhYVlpXXFtaVlZVTFhYXGdpa2h1eIF2dnZ2dnZ2dnZ2dnd3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d4eHh4eXl5enp6enp6e3p6ent7e3t7e3t7e3t7e3t7e3x7e3t7e3t7e3t7fHx8fHx8fHx8fHx8fHt7e3t8fHx8fHx8fHx8e3t7fHx8fHx7e3t7e3t7fYmIh4mHhYKBgoOCg4OCgoKCgoKCgoKCgoGAgYCBgICAgYCBgYGAfnx8fHx8fHx8fHx8fHx8fHZ2dnZ2dnZ2dnZ3dnd3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3h4eHh5eXl6enp6enp6ent7e3t7e3t7e3t7e3t7e3t7e3t7e3t6e3t7e3t7fHx8fHx8fHx8fHx7e3t7e3t7e3t7e3x7e3t7e3t7fHx8fHt7e3t7e3t8iYmHiYaFgoGCgoGCgoKCgYKCgoKCgoKBgYGAgICAgICAgIGBgYB9fHx8e3x8fHx8fHx8fHx8dnZ2dnZ2dnZ2dnZ3dnd3d3d3d3d3d3d3d3d3d3d3d3d3d3d4eHh4eHh5eXl5eXl5eXl5eXt7e3t7e3t7e3t7e3t7e3t7fHt7e3t7e3t7e3t8fHx8fHx8fHx8fHx7e3t7e3t7fHx8e3t7e3t7e3t7fHx8fHx7fHt7e3uHiYiJhYSDgYKCgoODgoKCgoKCgoKCgYGBgICAgICAgICAgYKBgH58fHx8fHx8fHx8fHx8fHx2dnZ2dnZ2d3d2d3d3d3d3d3d3d3d3d3h4eHh4eHh4eHh4eHh4eHh4eHl5eXl5eXl5eXl5e3t7e3t7e3t8e3t7e3x7fHx7e3t7e3t6ent7e3x8fHx8fHx8fHx8fHx8fHx8e3x8fHx8e3t7e3t7e3x8fHx8fHt7e3t7e4aJiYiFhYOBgoKCg4OCgoKCgoKCgoKBgYGAgICAgICAgIGBgYCAfnx8fHx8fHx8fHx9fX18fHVwb29vb3Bwen59fX19fYSMi4uLi454KSkqKiopKz0/Pj4+Pj5tgH5+f397pdfT09PT1r2GiYmJiYqHc3FycnJycYOKiYmJiYqMjY2Njo6OiX9/f39/f359fHx8fHx8fHx8fHx8fHx8fHx7fHx8fHx8fHx8fHt7e3t7hIuHh4aHgoGDg4GCgoKCgoKCgoKCgoGBgYCAgICAgICAgYCBgIB+fHx8fHx8fHx9fXx8fH19dXBub29vb296gH9/f39+hpCPj4+Pk3kZGhoaGhocMTMzMzMzMmqCf4CAgHut6eTk5OToyomMjIyMjIlyb29vb29uhY2MjIyMjI6Qj4+QkJCLf39/f39/f319fXx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx7e3uCjYeIh4eDgoSCgYKCgoKCgoOCgoKCgYGBgICAgICAgICAgICAgH58fHx8fHx8fXx8fH19fX12dXV1dXV1dXZ3d3d3d3d4eXl5enl6eG9wcHBwcHBycnJycnJyd3p5eXp6en6Dg4ODg4SBfHx8fHx8fHp6enp5eXl7fXx8fHx8fH19fX5+fX18fX19fX19fX19fX18fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx7e4CMhomHh4SDhIKCgoKCgYKCg4KCgoGBgYGBgYCAf4CAgICAgICAfnx8fHx8fHx8fX19fX19fXZ2dnZ2dnl3dnZ6e3h7eHd2dnh5enp6fnl5eXh4eHh5eXl5enp5eXl5enp6eXh4eXl5eXl7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7fHx8fHx9fX19fX19fX18fH19fX18fHx8fHx8fHx8fHx8fHx8fHx8fHx8f4uHi4qIhIODgoKCg4KBgoKDgoKCgYGBgYGAgIGAf4CAgH+AgYF+fX18fHx8fHx9fX19fX19d3d3dnZ3fXh3d316eH14d3d3fHx9fHp9e3h3d3d3eHh4eHh5eXl5eXp6ent7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7fHx8fHx8fHx8fHx8fHx9fX19fX19fX19fX19fX19fX19fHx8fHx8fHx7e3x8fHx8fHx8fHx+iomMjImFg4SEgoKDgoGCgoKCgoKBgYGBgYCAgICAgICAf4CAgH19fXx8fH19fX19fX19fX13d3d3d3p9eHt4fHx3e3h3d3l+fH19eX16eHh4eHh4eHh4eHh5eXl6enp6e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3x8fHx8fHx8fHx8fHx8fHx8fX19fXx9fX19fX19fX19fX19fHx8fHx8fHt7fHx8fHx8fHx8fH2Kio2NioWDg4OCgoKCgYGCgoKBgoGBgYKBgIGBgICAgIB/gIGAfXx9fX18fX19fX19fX19fXd3d3d3fX55d3d4e3p8eXd3e359fHx6e3p3eHh4eHh4eHh4eXl5enp6ent7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3x8fHt8fHx8fHx8fHx8fHx8fH19fX18fH18fH18fHx8fX19fX18fHx8fHx8fHx8fHx8fHx8fHx8foqJjo2JhISEg4KDgoKBgYKBgoKCgYGBgoGAgYKAgICAgH+BgIB8fH19fX18fX19fX19fn5+d3d3d3d5fHl7eHx9eXt5enp4e319fHt9e3h4eHh4eHh4eXl5eXp6enp7e3t7e3t7e3t7e3t7e3t7e3t7e3x8fHt7fHx7fHx8fHx8fHx8fXx8fX19fX19fXx8fHx8fHx8fXx9fX19fXx8fHx8fHx8fHx8fHx8fHx8fHx/iIeNioeFhoaDg4ODgoGBgoGCgoGBgYGCgX+AgoF/gICAf4CAgHx8fX19fX19fX19fX5+fn53d3d3d3Z4eHl3eXp4enh5eXd4enp6ent4eHh5eXh4eHh5eXl5enp7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t8fHx8fHx8fHx9fX19fX19fX19fX19fX18fH18fH19fX19fH19fX19fHx8fHx8fHx8fHx8fX+HiIyIhoeHhIKDhISCgYKBgYKCgoGBgoKBgIGBgYGAgIB/gIGAfHx9fX19fX19fX1+fn5+fnd3d3d3d3d3d3d3eHh4eHh4eHh4eHl5eHl5eXl5eXl5eXl6enp6ent7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7fHx8fHx8fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fHx8fHx8fX19fHx8gIeIi4eHiYaDg4SDg4KBgYGCgoGBgYKCgYGBgIGBgYCAgICBgX97fH19fX19fX19fn5+fn5+d3d3d3d3d3d4eHd4dnl5eHh4eHh5eXl5eXl5eXl5eXl5enp6enp6e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7fHx7fHx8fHx8fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fHx8fH19fXx9fXyBhoqKiYmIhIOFhISCgoGBgYGCgYGCgoGBgYCAgYGAgIGAgIGBf3x8fX19fX1+fn5+fn5+f394eHd4eHh4eHZxZGpeam15eXl4eHl5eXl5eXl5enp6enp6enp6enp7e3t8e3x8fHt7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3x8fHx9fHx8fH19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fIGFiYqJioeEhYWEg4KCgYGBgoKBgYKBgYGBgYCBgYCAgYCBgIF+fH1+fn5+fn5+fn5+fn9/f3h4eHh4eHh5bWRiZV9fXm95eXl5eXl5eXl5eXp6enp6enp6enp6e3t7e3t7fHx8fHx8fHt7e3t7e3t7e3t7e3t7e3t7e3t7e3t7fHx8fHx9fHx8fH19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18goWKiomJhISGhYSDg4KBgYKCgoGBgoGBgYKBgIGBgICAgICBgH58fX5+fn5+fn5+fn9/f39/eHh4eHh4eW5kZWdlZGJeZnh5eXl5enp6enp6enp6enp6enp6e3t7e3t7e3x8fHx8fHt8fHt7e3t7e3t7e3t7e3t7e3t7e3t7fHx8fHx8fHx8fHx9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXyChouJiIqEhYaEg4OEgoGBgYGCgYKCgYKBgYCAgYGBgIB/gIGBf3x8fn5+fn5+fn9/f39/f394eHh4eHl3Z2VkZWZkZWFfaXl6enp6enp6enp6enp6ent7e3t7e3t7e3t7e3t8fHx7e3t7e3t7e3t7e3t7e3t7e3t7e3t7fHt8fHx8fHx8fHx9fX19fX19fX19fX19fXx9fX19fX19fX19fX19fX19fX19fX19fX19fIKGi4eJh4SEhoSDg4WBgYGBgYKCgYGBgYKBgICBgYGAgYCAgYF+fHx/f35/f39/f39/f39/gHl5eXl5eWtlYWJlZWFlZV5ieHdze3p6enp6enp6enp6e3t7e3t7e3t7e3t7fHt7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t8fHx8fHx8fH18fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19g4aLhoiFhYaEgoOEhIKBgYGBgoKBgYKBgYGAgYGBgYGAgIGBgn98fH9/f39/f39/f3+AgICAeXl5eXl0Y2NlZGNmY2doZGZsZF5ze3p6enp6enp6enp6ent7e3t7e3t8fHx7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3x8fHx8fHx8fH19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX1+fn6DhouGhoaGhYODg4SDgYGBgYGCgoGBgoKBgYCAgYGBgYCAgYGBfnx8f39/f39/gICAgICAgIB5eXl6d2RhY2diYmRdW2VfYV1eYGFoeHp6enp6enp6enp6e3t7e3t7fHx8e3x7e3t7e3t7e3t7e3t7e3t7e3t7e3t8fHx8fHx8fHx8fH19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX1+fn5+fn5+foSFi4eGhoaGhIODg4KBgYGBgoKCgYKBgoGAgIGBgYGAgYGBgYF+fX1/gH+AgICAgICAgICAgHl5eW9vYmJiZF5jZ19dYWFgXF9kYlttfHp6enp6enp6enp7e3t7fHx8e3t7e3t7e3t7e3t7e3t7e3t7fHx7e3x7fHx8fHx8fHx8fH19fH19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX5+fn5+fn5+fn5/hIiLhoSHhoaEhIODgoGBgYGCgYGBgYKCgYCAgYGBgYGBgYGBgX5+fYCAgICAgICAgICAgICBeXpwXWJlZGJkXmZnZ2BZYmJhY2VfXF1ze3t6enp7e3t7e3t8fHx8fHx8fHt7e3t7e3t7e3t7e3t7fHx8fHx8e3x8fHx8fHx8fHx8fHx9fX19fX19fX19fX19fX19fX19fX19fX19fX19fn19fn5+fn5+fn5+fn5+foCFjIqEhYaGhYODg4SCgYGBgYKBgYGBgoKCgYCBgYGCgICAgIGBf35+gICAgICAgICAgIGBgYF5emxiZGdjYmdmYWBgZGFiZWRjZGNeXGJ1fHt7e3t7e3t7e3x8fHx7e3x8fHx7e3t7e3t7e3t7e3x8fHx8fHx8fHx8fHx8fHx8fHx8fH19fX19fX19fX19fX19fX19fX19fX19fX1+fn5+fn5+fn5+fn5+fn5+fn9/gYeMiYWGhoeFg4SDgoGBgYGBgYKBgoKCg4KBgIGBgYKBgYGCgoF/f36AgICAgICAgIGBgYGBgXp7dGdnZmZkZGZmYF5fYWNlaGRlXmJkYHR8e3t7e3t7fHx8fHx8fHx8fHt7fHt8fHt7e3t7fHx8fHx8fHx8fHx8fHx8fHx8fHx8fH19fX19fX19fX19fX19fX19fX19fX19fX19fX5+fn5+fn5+fn5+fn9/f39/f3+CiYqIhoaIhoWDhIOCgYGBgYGBgoGBgoKCgoKAgYGBgoKBgYKCgX9/f4GBgYGAgYGBgYGBgYGBenptaGNjZ2ZnZWdmZmdiZWRlYmdbYmVgdnx8e3x8fHx8fHx8fHx8e3t8fHx8e3x8fHt7fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx9fXx9fX19fX19fX19fX19fX19fX19fX19fn5+fn5+fn5+fn5+f39/f39/f39/f4SJioiGiYeFhYSEg4KBgYGBgYGCgYKCgYGBgYGBgYKBgoGBgICBgH9/gYGBgYGBgYGBgYGBgYF7emlpZGNqZmFgZmVjY2NnaWRjYmBiZGJ0fXx8fHx8fHt8fHx8fHx8e3x8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fH19fX19fX19fX19fn5+fn5+fn5+fn5+fn5+fn5/f39+fn9/f39/f39/f3+AhIqMiIeJhoSFhYOCgYGBgYGBgYKBgoGBgYGBgYGBgoKBgYGBgYGAgH+BgYGBgYGBgYGBgYGBgXZzZWRnY2RmZWJlZmdkZmhmZWNgYGNkYHF9fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fXx9fX18fHx9fX19fX19fX19fX19fn5+fn5+fn5+fn5+fn5/fn5+f35+f39/f39/f3+AgICFioyJiIqJhoaDgoKCgYGBgYGBgoGBgoGBgYGBgIGBgYGBgYGCgX+Af35/foCCgoKCgoKCgoKCc3NnZWRkZWlqaGZnZ2NhZmZlZmdmZWVjdX18fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fX19fX19fX19fX19fX1+fn5+fn5+fn5+fn5+fn5+fn5+f39/f39/f39/f39/gICAgICAgIWLioqJioeHhoSCgoGBgYGBgYKCgYKBgYGBgIGBgoKBgYGBgYGAf4B+dHRzdX1/goCAfn5/gYB0cmdkZWNmaWppZWNlY2BmZGRnZ2JiZWFwfXx8fHx8fHx8fHx8fHx8fHx9fX18fHx8fHx8fHx8fHx8fHx9fX19fX19fX19fX19fX19fX19fX1+fn5+fn5+fn5+fn5+fn9/f39/f39/f39/f39/f39/f4CAgICAgIB/houLioqLh4eHhIOCgYGBgYGBgYKBgoKBgYGBgYKCgYCBgYGBgoCAgH5zc3NzdHV4dXV0dHV2dXVwZmNmZWhoaWdoZ2VmZWJfZGVmY2BiZ3d8fHx8fX19fX18fHx8fH19fX19fX19fXx9fXx8fX19fX19fX19fX19fX19fX19fX19fX19fn5+fn5+fn5+fn5+fn5+fn5+f39/f39/f39/f39/gIB/f3+AgICAgICAgICHjIyIi4qHh4eEhYKBgYGBgYGBgoGCgoGBgICBgoGBgYKBgoKCgYCAfnNzc3Nzc3NzdHR0dHNzdW9jY2FnZWhoZ2pmZGVnZmhmY2JlYl5ieX18e3t8fX19fX18fHx9fX19fX19e3x9fX19fX19fX19fX19fX19fX19fX5+fn5+fn5+fn5+fn5+fn9/fn5+fn5+fn5/f39/f4CAgH9/gICBgICAgICAgYCAf4CAgYGAgIeLi4iNiYiJhYSFgYGBgYGBgYKCgYKCgYGBgIGCgoGBgYKBgoKBgIB+dHNzc3Nzc3Nzc3Nzc3N1cmdlZWRlamhoZ2ZpaGdjZWViZGNoZGd7eHVzc3R2dnl4dnR0dHZ3d3d2dHR0dXV4d3h4d3d6e3x9fXx9fn5+fn5+fn5+fn5+fn5+fn5+fn5/f39/f39/f35/f39/gH9+fHt7fX58eXl2dnZ5fHx6end2d3l7fXt4hIyMioyHh4iEhYSBgYGBgYGBgoGBgoGBgYGAgYKCgYGBgoGBgoGAgH51c3Nzc3Nzc3Nzc3Nzc3VzaGVnaGVrbGhqZ2lqZ2dnZmRkYmVkbnV0dHNzdHNzc3Nzc3Nzc3Nzc3NzdHNzc3Nzc3Nzc3N0dHV1c3V3eHl7fn59fn98f39/f39/f39/f314fH5+fXx4dXZ3eXd4dnRzc3N0dXRzc3Nzc3NzdHNzc3R0c3R0dHODjI2KiYeIhoOGg4GBgYGBgYGBgYGCgYGAgYGDgoKBgYCBgYGBgICAf3VzdHRzc3Nzc3Nyc3NzdnZpY2hqaGpsZWZpbGhgZmVkY2BkZGZ0dXV1dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHRzdHRzc3Nzc3R2dnV1d3V4fH9+fX9+fHp4dXN0dXV1dHNzc3Nzc3N0dHR0dHR0dHR1dXR0dHV1dHR1dXR1dXV1dIaMjYuIhoeEhIWCgYGBgYGBgYGCgoGAgYCBgYKCgoGBgIGBgYGAgIB/dnNzc3Nzc3Nzc3Nzc3N2dnNnZ2pmaGdmaGhmZGlnY2NnZWVmcHZ1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dHR1dHR0dHR0dHRzdHR0dnV1d3Z0c3R0dHR0dHR0dXV1dXV0dXV1dXV1dXV0dHNzc3N0dHNzdHR0dHR1dXR1iY6MjIqHh4SEhYKBgYGBgYGBgYKCgoGBgICAgoKCgoGBgYGBgYCAgH93c3Nzc3NycnJyc3NzcnZ2dW5kXWNnZWlraGVoZ2dqamlnZXB2dXV1dXV0dHRzdHR0dHR0dHV1dXV1dXV0dHV1dHR1dXV1dXV1dXV1dXR0dHV1dXV1dXV0dHV0dHV1dXV1dXV1dXV1dXV1dXV1dXV0dHNzc3Nzc3N0dHNzc3Nzc3R0dHR0dHWKjoyMiYaGhIeFgoGBgYGBgYGBgoKBgYGAgYGCgYKBgYGBgYKBgICAf3hzc3Nzc3JycnJyc3NzdnZ3d2liaGhnamtpaGZkZGVmaWhwdXR0dHRzc3JxcnJ0dXV0dHR0dHR0c3NycXFxcXNzdHR0dHR0dHR0dHV0cnJyc3R0dHR0dXV1dXV1dXR0dXR0dHR0dHR0dHR0dHR0c3Nzc3Nzc3Nzc3Nzc3N0dHN0dHR0dHR0dYuOjImGhYWFh4SCgYGBgYGBgYGBgoKCgYGAgIKCgoGBgYGBgYGBgIB/eXNzc3NycXJycnJzc3N3d3d3bGpoZGhpa3Z6a2VmZWhnbXJzdHN0c3JwcHBxcnN0dXR0c3NycnNycXBvb29vcHFzc3NycnJyc3R0dHNxcHFyc3R0dHR0dHRzc3Rzc3NzdHR0dHRzdHR0dHR0dHRzdHR0c3NycnFxcnJzc3Nyc3NzdHR0dHN2jZCMh4eFhYSEgoGCgoGBgYGBgYGCgoKBgYGAgYGCgoGBgoKBgYGAf395c3NycnFxcnJycnNzc3d3d3dzc2pnaWloeX99cW51bG5wcXJycnFxcG9wcXFxc3Rzc3NycXFwcG5ubm1ubW5ubnBxcnJycnJycnJzcXBvb3BxcnJzc3JxcnJycnJycnJycnJzc3Jzc3Nzc3Nzc3Nzc3Jxb29ubm9vcXJzc3Jyc3NycnNzcnaPj4uHhoWFhYOCgoKBgYGBgYGBgYGBgoGBgYGCgoKBgoGCgYGCgX9/f3hxcHBwcXFycnJyc3Nzd3d2dnd2cnF0c252f352c3hwcHBycnJycXFwcHFxcXFyc3Nzc3FwcXBvb25ubm5ub25vcHBxcXFxcXBwcXJwb25vcHFxcXFxcHBxcXFxcXJycnJycnJycnFxcnFxcnJycnFwb29ubm1ubW5vcXJycnJycnJyc3JxeI+OjYaDg4aEgoOCgoGCgYGBgYKBgYGCgYGBgYKCgoKCgoKBgYKBf4B/d29wb3BxcnJyc3Nzc3J2dnZ2dnZ3dnZ1c3l/fnd3d29wcXFxcXFxcHBwcXJxcnJzc3JycXBwb29wb29vb29vb29wb3Bvb29vcHBxb29vcHBwcHBvcG9wcHFycXFxcnJycnFxcXFxcXFxcHBwcHBxb29ubm5tbW5tbm9wcXFxcXFxcXFxcXB7j42NhoODhYOCgoKCgYKBgYGBgoGCgYGCgoGCg4KBg4KBgYGAgYF/f392bm9wcHBxcXFxcXBwcHZ2dnZ2dXR0c3NxfYB9fX9zb3BxcXFwcHBwcXFwcHBxcnJxcXFwb3Bvb3Bwb29wcG9vb29vb29vb3BxcXBub3Bwb29wb29wcnJycnFxcXBxcnFwcXFxcHBwcHBwcHBwb29ubm1ubm5ubm9ub3BwcHFxcXFxcXFxcIKRjoqEhIOFhIOCgoGBgoKBgYKBgYGBgYGCgoKCgoKCgYGBgYCBgX9/gHVvb29wcXFxcXBwcHBwdnZ2dXRzcnJycnGAgoCBeXBwcHBvcHBwcHFxcXFwcXFxcXFxcG9vcHBwcHBwb3BxcHBvb29wb29vcXFwcG9wcG9vb25vcHFxcHBwb3Bvb3BwcHBwcHBwcHBvb29vb29vbm5tbW1ubm5ub25vb3BvcHBwcHBwcHBwiZCMiISDhIaDg4KCgYGCgoKCgYGBgYCAgYGBgoKBgYGBgYGBgIGBgH+AdG5vb3BxcXFwcG9vcG92dnVzcnFxcXFxcICDg39ycHBwcHBwcHBwcHFxcHBxcXFxcXBwcHBwcHBwcHFwcHBwcHBwcHBvcHBxcXBwcHFxb29vbm9wcHBvb29vcHBvb3BwcHBwcHBwcHBvb29vbm5ubm5ubW5ubm1ubm9wcG9vb29vb3BzcXWPj4yJg4KFh4ODgoKBgoGCgoKBgYKBgYGBgYGBgYGBgYCAgYGAgYGAf4B0b29vbm9vb29vb29vb3Z1dHNxcXFxcXJygIKCgXRxcXFxcXFxcXFxcXFxcXFxcXBxcXFxcHFwcXBxcXFwcHBwcHFxcXBxcHBwcXBwcHBwcHBwcHBwcHBwcHFxcXBxcHBwcHFwcHFxcHFxcXFxcXJxcnFwcnRycnR0dHR1dnRzdHR0dHd3gpCPi4iDgoaHhISCg4GBgYKCgoGBgoGBgYKBgYGBgYGAgICBgYCBgYB/gHVvb29vb29vb25vb29vdXRzcnJycnJycnKDg4OCdnFycnFxcXJxcnJxcXJycnFxcXFxcnFxcXJycXFycXFxcXFxcXFxcXFwcXFxcXFxcnNzcnJyc3V1dHR0dHR0dHV2d3d3d3d3eHh4eHd3eHh4d3Z3dnV2dnZ2d3h6e3x7e3t6enp6enyGkI2LiIODiIeHhYODgoGCgYKBgYGBgYKCgoGBgYGAgYCAgYGAgIGBgH+Ad3FxcXFxcG5ucG9wcG92dHV1c3Nzc3NzdYiDgoN5cnNzcnJyc3Jyc3NycnJycnN0cnJzcnNzc3Nzc3Nyc3N0dHV1dXV1dHV3eHd3d3d4eHh3eHh4eXl5eXl4eHl5eXp6e3t7e3t6enp5eXh3d3d1dnV2dnd5enp7fn5+fX1+fn5/f35+gIyQi4qHg4WIi4iEg4SDgYGCgYGBgoGBgoKCgoKAgYGBgYCBgYGAgIGAf4B8enp5eXx5eHh2dXZ2dHl2d3h3d3Z3dnZ6f3x+fnx2dnd3dnV4enh4eHh3d3d2eHx5eXx6eXl8e3l5eXh4eXl6enl5eXh4enp5eXh4eHh3dnd3eHh3eHh5eXp7e3p8fH1+fX9/f359e3t7e3p5enl5e3t/foB/fn5/fn19fX5+f35+fn6AjpCNioeEhoqLiIaGhIOBgoKBgYGCgYGCgoKCgoCBgoKBgYGCgYCBgIF/f4B/fn19fX9/f318e3t7eXh4eHh5eXl4eXh5eXl4enp6enp6e3t7fH1+fHt7ent8e318e3t7e3t7enl4eXh4ent6enp5eXp8fHt6enx8fHp6ent9fHx+fn+AgoGAgYKAgH9/gYGBgIB/f35+fn5/fX1+f4CAf35+f39+fn9/f39/gH+Af4OQjoyHhoWIi4yIh4aFg4GCgYGBgYKBgoKCgoKBgYKDgoGBgYGBgIGBgIB/goOCgoGBgX99f39/f4F6enh4d3h4eHh5eHh5enp5e358enx9fXt8fX19fHx8fnx9fn5+fn59fX9/f3x8fYGDgYCAf318fXx9fXt9fXx8fH19fX1+gYGChISDgoB/gYGBgH9/f4B/f39/f39+fn9/f39/f35+f3+Af39/gICAf4CAgICAhJCPi4eGhoiLi4iKhoaDgoKCgYGBgoGCgYKBgYGBgoOCgYCAgYGAgIGBgH+ChIKCgICAgH9+fn+AgH9/fn18fX19fYB/fX+Af35/gH9/fn9/gIGBgICAf3+BgICAf4CBgn9/f4CAf35+f39+f39/fn5+f39/gYB/f4CBgYCAgYOEgoGCgoGCgH+AgYCBgYGAgH+BgICAf39/gICAgYGBgIGBgYCAgICBgoGBgYCAgYGFjo6MiYaHiYyLi4qGhoOCgoKBgYGCgoOCgoKBgIGBgYKCgICBgYCAgYGAf4KFg4KBgYCAf39+fn+AfX5+fn19fX5/fn9/f35+fn+AgYCAgICAfn9/fn+Af3+AgH9/f35/f39+fn59fn9+fn9/f35/gIGBgoKDg4KCg4KBgYKDg4OCgYGBgYKBgoKCgYKBgoGBgYGBgoKCgYGCgYKCgoGBgoKBgYKCgoKCgYGBgoKCgoaPkY+KiImKjY6NiYaFgoKCgoKBgYKCg4KCgoGBgYGBgYF/gIGBgYCBgIF/gYWEg4KCgoGCgYCAgIB8fHx7fH18fH9+fn9+fn5+f35+f39/f39/f35+foB+fn5+fn9/f39+f39+fn5/gIB/gIB/f39/f3+BgYGCgoCAgYKDg4SDg4ODgoKCgoKCgoKCgoKCgoGCgoKDg4OCg4ODgoKCgYKCgoODg4ODgoKCgoODg4KCh5KTkIuKiouPj42Lh4SCgoKCgYGBgoKDgoKBgYGBgIGBgICAgYGBgIGAgYCAg4SDg4OEg4ODgoKCgXx9fHx9gn1+f4GCiIGCgoSCgYGDg4GBgYKCgYKBgYCAf39/gICAf3+AgX9/f39/gYCAgICAgH9/f3+AgICAgH9/gYODhYSEg4SDgoKCg4OCgoOCgoODg4ODg4SDg4KEhYWDg4SEgoKDhIOCg4ODg4OCgoODgoCKlJOPioqMjpCPjYuGg4KCgoKBgYGBgoOCgYGBgIGBgoGBgICBgYGAgYCAgH+BgoODg4SEhIOCgoKCfXx8fn6AgYOAg4OChIaFhoaFhIWFg4ODg4OBgYKEhIKDgoeDgoKAgoGBgoKCg4KCg4KDgoODgoGAgIKCgYOCgYKCg4OEhYWEg4OChISEhIOEhISDg4OEg4ODg4OEg4SDhIWEhISDg4ODgoKCgoKCgoKBgYKCgo+UlI+Njo6RkY6KiISCgoKCgYGBgYGCg4GBgIGBgYGBgYCBgIGBgYCBgICAgIKChIKChIOCg4ODgoJ9fX2AgH+AgoGDg4ODhIaEhIOEhYWDg4GBgoOBgIKDgYKFhYWFhoaHhoWGhoeHh4aGhoeHhoaEgoGCg4SDg4ODg4ODhISFhYWDhYSFhISEg4KBg4OCg4SEg4KCg4SCg4ODg4OCgoKCgoKCg4OEhIOFhYWFhoaIk5OTkI+Pj5KRjIqHgoKCgoKBgYGBgYKDgoKBgIGBgYGBgICAgYGBgICAgICAhISEgoKCgoGBgoKBgX+AgYOCgICAf4CCgoGDg4KCgYODg4SEg4KDhYOCgYGBgoSFh4eHh4aGh4eHiIiHh4eIiIiFhIOBgIGBgoKCg4GCg4SEhYSDg4OEg4OEhIOBgYGCg4OEhISDg4ODg4OEhIODgoSDg4ODhIWFhoeHh4eIiIiJiY6TkpKOj46QkY+LiYeCgoKCgoKBgYGBgoKCgoGBgIGBgYGAgICAgYGAgIGAgICDg4KCgYKCgYGAf4CBhYWFhoOCgYB+fn+BgoSCgYKDhIOCg4ODg4KChISDg4OBg4SFhISFhYSDg4SFhYKEhIWFg4KBgH9/gIB/gIGEg4OEhYWEgoKCgoOCg4OFhIKDhISEhYaGhoaGhoWFhoeHhYaIh4aHiIeGhoaIiYeGhYaGhoeIkZKSkI6QjpCRjImHhYGBgoKCgoGBgYGBgoOBgYGBgYGBgICAgICBgYCAgICAgISEg4KBgoGAgYGAgYKIh4aHhYSCgH99fX6AgH+AgYGBgYGBgoGAgYOCgoGCgYKBgYGCgYKCg4GBgICAf4GAgH+AgH9+gIGBgYKCg4OEg4OEg4OCgoGBgoODg4SEg4SEhIOFhYaFh4eIh4eHh4eHh4eGhoaGh4WFhYaGhIWEhIWEhYaSk5GOjo+OkI6JiYeEgoKCgoKCgoGBgIGCgoKCgoKCgYGBgYGAgYGBgICAgYGAgoSDg4KDgoGCgYKDg4iHh4iHhYSCgX5+gICAfn5+f4CBgYGCgYCBgoGCgH+AgIB+gIKBgIGCg4OAf39/gICAf4CAgICDg4KDg4ODgoOBgYKCgoOCgYKCgoOCgoSDhISDg4SEhYWFhYaGhoaFhISEhYWEhIWFhYSEhISDhISEhISEipSTkZCQj46NiIaFhIOBgYKCgoKCgYGAgYKCgoKBgoKBgYCBgYCBgYGAgICAgYGAg4OCgoOCgoKBgoOCiImJiYiHhYSDgYKEhIOBgYGCgoSCgoOEgoOEhYWEgoSCgX+AgoGBgoGChIOBgYGBgoOCgoGDg4SDg4SEg4OCg4KDg4ODg4KCgoKCgoGDhISEhYSFhYWFhIWEhIWFhYWDg4OEhISEhYWFhISEhISEg4ODg4OOlZKRkZGOjYyHhYODg4GCgoKCgoKBgYCBgoOCgYCCgYGBgICAgIGBgYCAgICBgICDhYSEhIODg4SDhIOGh4mIhoWDhIODg4WDgoCDgoOFhYODg4SDhIODhISFhISEgoGAgYKDgoKEg4OCgoGBhIWEg4ODgoKDhISDg4ODg4SFhISDg4KCgoKCgoSEhYWFhYWFhYODhYWFhYaFhoWEhIWEhYWGhYWFhIWEhISDhIODhJGUk5KSj42MioWEhIODgYKCg4KCgoKBgYGCg4KBgYKBgYGBgICBgIGBgH+AgIGAgYaGhoaGhoaHh4aGhYSDhYaCgIGBgYGHgoB+f4GAgIKBgYCBgYCAgoGCgoKBgYKCgYCCgoKCgoKDg4GCgYKDhYODg4KDg4OEgoKEhIOEhIWEg4OCgoKCgYKCg4ODg4SFhYWFhIOEhYWGhYWEhISEhIOEhIWFhYWFhIODhIOEg4KGlJOSlJKPjYuHhISEg4KBgoODgoKDg4GBgoKBgoKCgYGCgYGBgYCAgYGAgICAgICAhYWFhYaGh4aGhoWGg4ODg4GAgoKCgYKAf35/f4CAf4B/gIGAgH+BgYGBg4GAgYGChIOBgYGBgYKBgYKDgoODgoOCgoKCg4OBg4SDg4ODg4OEhIKCgoKDgoKDg4ODhIWEhISEg4OEhIODg4OEhIODg4ODg4SDg4ODg4KDg4KDgouUk5KTkY2NioaDg4OEgoGCg4ODg4ODgoGBgoGCgoKCgoKBgYGBgICBgYCAf4CAgICDhISFhYSFhYWEhIWCg4KDgoKDg4OBgICAgICAgYCAg4KCg4KBgoKDg4OEgoODg4KAgICCgoKCgoKCg4ODgoODhIKCgoODg4KDg4KCg4KDg4WEg4ODg4SDg4SEhISEhYWEhIWEg4SEg4OEhISEhISEg4SEhYSDg4SEhIODgoKDkJSSkpKPi4yIhoOEg4OBgYKDg4ODg4OCgYGCgoKCgoKDgoCBgoGAgICAgIB/gICAgISDhYWEhYWFhYSFhYSDhIWDg4SFhIKCgoOCgoSCgYKGhYOFg4OEhISGhYSEhYJ/fX19foKEg4ODg4ODg4ODhISEg4KEhISEg4SEhIOEg4OFhoWFhYSFhYWFhYSGhoWGhoWFhYWFhYWFhYWGhoWGhoaFhoaGh4aFhYWFg4SEhIeTk5KRkoyLiIWFhYWCgoGBgoODg4OCg4KBgYKDg4ODgoKBgIGAgICAgICAgH+AgICAhYWFhYWGh4eGhYWFhISFhYSEhISEg4SDg4OEhYOCg4SFhYaFhoaFhoeHhoOBfn9+fn5+f4OEg4OEhISEhISEhISEhISFhYWEhYSGhYWGhYaGhoWGhYWHhYWGhoaGhoaFhIWFhYWFhIWGhoaHhoaGhoaHh4iIiIaFhYaEhYWGjZSTkpGQi4qHhoeGhIGCgoKDg4ODg4KDgoGBgoODg4KAgYGBgICAgICAgICAf4CAgICHh4eGhoeHiIeHhoaEg4ODhIODg4OEg4ODg4OEhIODg4WFhYWHh4WFh4WBf39/f39/f35/gISFhIWGhoaFhYWFhoaHhoaFhoWFhoeHh4iHh4eGhoaHh4eGhoaHh4aGhYSDhIWFhoSFhYaGhoeHhoaGhoeHh4eIiIeGhoaHh4eRk5KQkZCLiIiFhoSDgoKBgoODg4ODgoKDgoKCgoOCgYCBgICBgICAgIGAgIB/gIGAf4aHiIeHh4eIiYmIiIODgoKDgoSEhIWEg4KCg4OEg4OChIWEhYeHhYSCgH9/f39/gH9/f4B/f4WFhoeIiIeHh4eIiIiHiIiIhoaHiIiJiYmIh4aHh4eIiIaHhoeHhoeFhIOEhYaGhYWFhoaGh4eFhoeGh4aHh4eHh4eHh4eFh5OTkY+RkIuHhoWGhIKCgYGCg4ODg4ODgoKCgoGCg4KCgIGBgYCAgICAgICAf3+AgYB/hoiIiIiHh4iJiYmIg4KCg4ODhIWHh4eFg4OFhIODg4KEhISEhYSBgIGCgYGBgYB/gH9/fnt6gIaIiIqKiYmIiImJiYmKi4qIiIiJiouLioqIiIeIiIiHh4iHh4iGh4aEg4OFh4eHhoWFhISEhYWEhYWGhISEhYWFhoWGhYOJlJOQjpGOioaFhoWDgYGBgoKDg4ODgoKCgoKCgoKCgYGBgYGBgYCAgICAgIB/gICBgH+GiYiIiYeIiImJiIiEgoKDg4KDhImKh4eEhIWEg4OFg4WEg4OCgYKCgoKCgH9+fH19fX9+fHt8g4eJi4uKioqIiYqJiImLiomJiImIioqJi4mHhoaGh4WGiIiJiIeGh4SDgoSIiIiIh4WCgoGDg4KDg4SCgoKDgoGEg4SDgY6TkpCPj4uIhYSGhIKBgYGBgoODg4OCgoKCgoKCgoGBgYGBgIGAgICAgICAgH+AgIGAf4WIh4eHhoeIiIiHh4SCg4OCgoOFiYqJh4WHhYSFhYSEhYSDgoKCgoKDgX59fn5+fn5+fXx+fX19g4eJioqHh4WGh4eHh4iHiImHiIaIh4eJiISDhIOFhISFhYaIh4aFg4KChIWHhoeGhoSCgoOEgoOEhYKBgoGBgYODhIOEkZKRjo+Ni4eEhoaDgoGAgYGDg4ODg4KCgoKCgoKCgYGBgIGBgYCAgIB/gIGAf39/gIB/hYaGhYaGhoeHiIeGgYKEhIOChYaIi4qGhYaEgoaFgYSFg4ODg4OCgoF9fH1/gH9+fn59fH19fHp8hIaHhoSDgYKDhIWFhYODhYSEhISFhIWEgoKDgoSEgYKDg4WGhYSCgYGCgoODhYOEhIWEhIaDhISFg4KDgYKDg4SFhIeSkY+Nj4yJhoSFhIWCgYCBgYODg4ODgoKCgoKCgoKBgYGBgYGAgICAf4CAgYB/gICAgICDhIWEhYWFhoeIh4aAgYGFg4OEhYSHiIWDgYCAgX+BjIaDg4ODgoKAfX1/gICBf31+fn19fX16enp+g4SEgoGBgIGBgoKBf36BgYGCgYOAgoGCgoKBg4OAf4CAgYOCgICAgIGBgYGCgYGChIODhYSCg4SDgoKBgoSDhYWGjJORjo+Pi4iFhYOChIGBgYGBgoODg4KCgoKCgoKCgoGBgYCBgYCBgH9/gIGBgICAgH+AgIKCg4OChIOEhYWGhn+BfoCBgICAf4GDgn9+fn9+fH+Hg4OCg4KDgX19fn+AgIGAfn19fX1+fXx6enp/goKAf39/f35/f4B+fYB/f4CAgX+AgIF/f3+BgX99fX+AgX9/fn+AgH+AgICBf4CCgICCgoGCgYGAgYGBgYKEg4aPkpCOj42Kh4eGg4OCgYGBgYGCg4ODgoKCgoKCgoOCgYGCgYGBgICAgH+AgICAgICAf39/gYKDhIGCgoOCg4SFgIF/fH19fn19foCAfn1+fXt9foGDg4KCgYF/fX1+foCAgH9+fX19fHt7e3p6eXqAgH9+f35+fn1+f35/gH9+f3+Af4GAf359fn9/fn18fn+Af35+f3+Af39/f4B/f4B+f4CBf4B+f39/gH9/f4B/hZKSj46Pi4uHiYWEg4KBgYGBgYKDg4ODg4OCgoKDg4KAgYKBgYGAgICAf3+AgIB/gIF/f36BgYSEgYKBg4OCg4OBgH98fn5/fn6Af4B/foB9fX+BhIOCgYB/f359fn5/gICAfn19fX17e3x6enl5eXt/f35/f39+fX5/f4CAf35/f4CAgoB/fH5+f35+fXx/f4B/fn5/f4B/f35/foCAf36Af39+fn5/f35+f318fH2FkpKNjIuKiImIhISEgoKCgYGBgoOCgoODgoODg4ODgYCBgYGBgYCAf39/f4CAgICAgH9/foCBhIOCgoGDhISDhICBgICBgIGAgYKCg4GAgX+AgoODgYGBgYCAfX19fn5+f359fX19fXx8fHt6enl5eX2Af4CBgYF/f4GAf4F/gICAgYGCgoB+gH5/fn5+foGAgoF/f39/gIB/f39/gYB+f3+Afn9/fn+Af31+fX17fIaTkYyLioeHioiGhoSDgoGBgYGCg4ODg4OCg4OCgoKBgICBgYGAgH9/f39/gICAgICAgH9+fn+BgYGAgISGh4aHgoSDhYOBg4ODhYSEhISDgYODg4KCgoGCgX5+fX19fn6AfX19fX19fX18e3p5eXl5eYCCgoKFg4CCg4GAgoCBgYGDgoODgYGCgIGAf4CBg4GEgoCAgYCBgYCAgYCCgn+BgIF/gIB/gICAfn9/fnx8ipOQiomIiIiJiIaGhoSCgoGBgoKDg4ODg4KDgoKCgYCAgICBgYGAf39/f4CAgICAgIGBf359fn5/f39+g4aHh4iChYSFg4SFhIWGhoaGhoWFhoGAg4ODgoKAfX19fX19fn59fX19fX19fX18e3l5eXl4fIKDhIWCgYSDgoKDhYaCg4SDgYKCg4OCgoKCgYKFg4iFgoGBgYKCgYGBgYSDgoOCgoKCgYGBgIF/gIGAf36Ok4yHiIeIh4aGhYaGhIKDgoGCgoODg4ODg4OCgYGBgH+AgYCBgYB/gH9/gICAgH+AgYB/fn19fX5+f36Ag4SHiISGhoaFhoaHh4aHh4eHhoeHf32AgIGCgX59fX19fX19fX19fX18fH5+fnx7eXh3eHl5gIODf4ONhIOEhISXl4ODhIF9foGCgoGCgYKBg4aIjIWDgoKBhIKEg4KDhYWEhYOCg4OCg4OCgoKCg4OCgpKQi4iIh4iHhoaEhoWEhISCgYKCg4ODg4ODgoGBgYCAgICBgIGBgH9/fn+AgYCAf4CBgH9/fn1/fn+Bf4CCgYWFhYaGh4eGh4eIhoeHh4aHh4d/fH18fX9+fX19fX19fX19fX19fXx7iJKCe3x6fIZ5eHl8gYF+iZaEg4OEhJSTgIGBf39/fn6Ei4B/gICEhpCJhYSCgoGFhYuDgYKFhYaGhIOFhYOEhIODhIOFhISIko6LiYiIiYeHh4WGhYSFhIKBgoKDg4ODg4OCgYGBgICAgIGAgICAf39/f4CAgICAgIGBf39/f4CAgIGBgYGBg4OGh4aGh4aGiIeGhoaFhISGhX98fHx8fX18fH19fX19fX19fX18fH+RlZaDe3qElHx4eXp7fH+Cg4GCgIOCgH58fn57iJF8fI6Wf31/f4KGioWDg4SDgYONiX99f4OEhYWDhYaFhIWFg4SFhYaEhI6Rj4uKioyJiYmHhYaFg4OCgYKCgoKDhIODgoGBgICBgICAgYGAgIB/f3+AgIB/gICAgX5+f4GBgoKCg4SDgoOCgoWGhISFhYSGhIOEg4KBgYOBf319fHx9fXx8fH18fH18fX19fHx8e4uRl4x6e3yBenp6e3x5eX19foB/gH98e3t+fn2ClZF/hIh+fH5/goR8fIGChIKAf4eDfYKBgIKCgIODhISEhISChIOEhYKEkZGNi4yMjoqJiYWFhYODgoKBgoODgoKDg4KCgYGAgIGAgICAgICAgH+Af3+Af357gICBenyAgoKDhYODhYWFhYODg4SCgYODgoOCgoGAgIB/gX5+fn59fHx8fHx8fHx8fHx8fHx9fHx8fn6Kgnt6e3p4ent7fH17fn1+f319fX18fH+BgX2Gj4F+fYJ+f36Agnx8f3+BgIKAfnx7ioJ9gH9+gYCAgYKBgoCAgIGAf4uTj4uLjY6NiIiHhYWEhIOCgoKCg4OCgoODgYGBgICAgICAgH9+fXx7fHx9f39/gHx6gYF4e4CCgYOFhIOFhIaGhISAhpSIgIGBgYGBgH9/f39/fn5+gHx8fHx8fHx8fHx8fHx9fHx8fHx8fHl7e3t4eHl7enp8gX+Afn+BfH5+f399gIKCgICAgX+CkYF/f4CAfoB+fn9+gIGBfX19e319fX19fHx9gH+AgH6Afn6ClJGLjI2Nj4qFhoaFhISFg4ODgoODg4OCgoGBgYGAgICBgICAf4CAf39/fXt6fYCAgHh+gXd7gIF/gYKCgoKDhoeGhn6IlYp+gYGAf4B/foB+f39/fn+Bfnx7e3x8fHx8fHx8fH59fHt8fHx8e3x8fHp6eXt8en2Fg4J/gYF+f35/gH6FgoF+gH9+foCFhoKAfn6Dh399fH6AgIGAf39+fX19fX57e31/f3+AfX9+gIyRjYuMjY2Nh4SGhoWEhISDg4OCg4ODg4KBgYGBgYCAgYGAgYGBgYGAgH9/f397en9/e3mAd3p/f31+f3+Af4KDhoaFf3+FgX5/gIB/gH5+f35/gIB/gIB/f319fHx9fn18fX19fX19fH58fXx7fXx8ent6fH19f4aEgoCAgX1+fX5/fouEgYZ+fXx8f36CgX99fX19gHx7fXx+gYSDgYB+fn5+fX1+f399foB+fn6EkoyMi46Mi4qGhIaEhIODg4OCg4KDgoOCgYGBgYGBgYGBgYB/fXx8fH1+f39/f397e399d352eH59fH18fX5+gYGCg4B6fX18fn+AgH6Af35/fn+AgH+AgH9/fn9+fn5+fn1+fn99fH59fn19fHt8fHx6e3p9fn+AhIOCf35/fH18fXx8gYN+jH58e3t9fn1+fn17e3t9fHp7e3uAhoSChIOCf4B+f4KCgn9/goJ/gIqPjIqKjIuKiISEhIOEg4ODgoKCgoKCgoKBgYGAgoGBgYKCf3+AgIB/fn18fH5/fn55fX52e3Z4fXx8fHt9fX6BgICAf31/f31+f39/foB/f39/f3+AgIGBgH99gH9/fn9+fn9/f3yCfn59fX17e319fHp8fH6AgoB/gIB8fH18fHx8fH18fXt/fnt7e3x8fH18e3t7e3x8enp9en6Cf4GDhIKBgoGFhoWFhoaHhYKEkY6MiomKh4eFgoOEhISEg4KCgYGCgoKBgoGBgYGBgoGBgoKAgYKBgYCAgH9+e3x+fnx6fnh5dnd8fHx7e318f4GAf35/foB/f35/fn5/gH9/f39/f3+AgYKAfn6BgIB/f39/f39+fYN8fH19fH99fX19e3x+fn9+fn1/fnx8fHx8fHx+fnt8e3x8fHx9fH18fnx9fHx7e3x5e3x7e317fX5+f4CAg4eJiYmKiYqJhYiRjYuHiIaFhYOCgoOEhIODgoKBgYGBgYKBgYGBgYKCgoGCgoCAgX98e3p6eXt9enx+fnl8eXh4dHx8fHt8fHx+gX9/f39/gIB/fn5+fX+AgH9/f3+Af4CDgoB/gIGAgIB/f4CAgH58enx9fX59fX5+jIZ9fX57e4OCfX19fX18fXx9fX1+fH17fXx9fX58fn19fX18e3t6fHt8fHt6e3t6enp7fn6DhYiHiIqLi4qJjJCNjIiIhoWEg4KCgoODg4OBgYGBgYGBgYGBgYGCgoOCgYKBgIGBf3+Af356eHl5en5+e3l6eH5zfHx8e3x8fH5+fn5/gH+AgIB/fn9+gIF/f4B/gIGAgoSEgYCAgYGAgX+AgYKBf39+f31+gH57foGRjHx9f4qAjYx+fn19fX59fX59fHx8fX18fXx9fX1+fX1+fnx7e3t8fH18e3p7fHl6eXh5e35/hIOEh4mKiImNj4yKiIiFhISDgYKCgoKDgoGCgoKBgYGCgYKCgoGCgoKBgoKAgYGAfoCAf39+e3p5e319eHx6f3KBfXt7fHx8fn59fYGBf4GBgX9/gH+AgX9/gIGCgYGFg4SCgYGCgYKBgICBg4KAf4F/fX6Afnx/f4iCf36DkISEg4F/fn18jYd9fX59fHx/fnx9fXx9fX5+fX5/fX19e3x9fnx8e3x9enp5eXp5e3t+foCBg4eEiI2MiYmGhYSEg4KCgoKCgoKBgYGCgoKBgoKCgoKCgoKCgoGCgn+AgIB+f39/fn5/ent5fX16enp9cX6Cent8fX19fXp4f4KAgYKCgICBgIGBgICBgoKCgoWFhIKBgYGBg4F/gIKEgX9+gYB9foF+fX5/gIB9fn+EgH5+f31+fX2KhX1+fn1+foB/fX19fH5+fn99f4B9fX18fX9/fHx7fH17e3t6enp7e3x9fn2Ag4CJjImKh4WFhYSDg4KCgoKCgYGBgoKBgoKCgoKCgoGBgoKBgYKCf4CAgH9/f39+fn59eXp6fXx5d3t0e4d8dHd9fn17e3Z2foCBg4KBgYKCgoKBgYGDg4OChYaEgoCAgICCgX+AgYSBfn6AgH1+gH59fn6AgH+Bfn+Af39/gH99fn9/f3+Afn9/gH58fX18fn5+foF/gH2CgHx9gIF9fHx9fXx8e3x8e3t7fHt8fHx9fImJh4eFhoWFhISDgYKBg4KAgIGCg4KCgoOCgoKCgoGCgoGBg4J/gIGAf39/fn5+fn57enp8fHt2e3R3f352cnt+fnt4dnd8gIGCgoKBgoODg4OCgoSDhIOFhoOCgX9/gIOAgICAg4F+foCAfX+AfX1+foCAf4J/gYGAgICBf31/f3+AgIGAgIB/fnx9fX19fn59g32AfoKAfX6AgX98fn59fX17fH58fXx8fHt8e3x+iYWGhIWHhYSFhIKBgoGDgYCAgoKDgoKCg4ODg4KBgYGBgYGCgH6AgYB/fn5+fn5+fn56e3p9goN9dXF6fHpxen19eXh0dICAgoKCg4KDhYOEg4KDhISEhIWEgYGAgH6Agn9+f36Bf35/f4B9foB9fX1+gH9/gYCCgYCAgIKBfX6Af4GAf4CAgH9+fX19fn1+fn19gYR/gH9+f4GBf32Af319fn1+fn1+fHt8enx7eoCFgoOEhYSEhIWDgoKBgYKBgICCgoOCgoOEg4SDg4KBgYKBgYOAfoCBf35+fn5+fX1+fnt7en6Jh354cnl9f3F6eHt4eXR1fYKDgoODg4OFhIWEg4OEhIODhIKBgH+Af4CBfn19foB+fn5/gH19f3x9fX6Af4CAgIKAgIGAg4F/f4B+gIF+gIF/gH9+fn5+fn5/fn6FhYCBgH+Ag4F/foGAf36AfoB/fn17ent6fHt6goN/goKCgoOCg4KBgYCAgoGAgIKBg4KBg4SDhIKEgoGBgoGCgn9+gIF/fn1+fn5+fX59fXp7fIWEe3tzeXt8cHd1dnd5dnR6hISBhISDhIWFhoSDg4WEgoODgoCBfn9/f4B9fX1+f31+f39/fn1+fH19foF/gIB/gIB/gIGDgoGAf36AgH+AgYCBgH9/f39/f4CAgIGCgoKBf4GEgX+Ag4F/f4B/gX+Af3x7e3p8e3yBgH+Bf3+BgIKCgYF/f3+BgH6BgoKDgYGDg4KEgoSCgYGBgIGCgH6AgH9/fX5+fX19fn19e3t6gH94fHZ5enxxdHh3dnh1cnmFhYKEhIKEhYWGhISChIOBg4KAgIF+f4B/gHx9fX6AfX5/f39+fX98fn5+gX+Bf39+f4B/gIODg4F/f4GBgIKBgYGAgIGAgICAgIGAgYKDgYF/gISBfYGDhICAgX+BgYKBfXp7e3x8fX99f4B8f39+fYGAgH59fYB/foGBgYKBgIKCgoKBg4KCgYB/gYKAfn9/fn99fX1+fX19fX19ent7fHZ9eXh6enJ1eXl2d3dzdYaFg4WFgoSEhYSEhIKDgoGDgX+AgX5/gH6AfX19fn9+f4B+fn99f3x/f3+BgIF/f3x+gH6AgYKDgYCAgoOEgoGAgYB/gYCAgYGAgYGCg4KBgX9/g4B+goKEgICCgYKChIF+e3t8fHx9fX1+fXp+fX55fn9/fHx8fn1+gYCBgYGAgoGBgYGDgoGBf4CAgoB9fn19f319fX59fH19fX16e3p8dnx6d3t4cnZ5e3Z2dnN0hoSEhYSChISFg4OCgYOBgYOBgIGBfX+BfoF9fX1/f39/gH5+f359fYB/gIGBgX9+fH5/fn5/gYJ/gYGCg4eFgX9/fn6Af4CBgICAgIKCgYCAfoCCf36BgoKBgYOCg4OFgn99fX18e3x8eXp7en55fHl4f357e3t+fX1/f4F/gH6BgICAgoOCgYF/gIGBf31+fH1+fX19fX18fn58fXx5e3x4enx3endzeHd6c3Z2c3SGhISFg4KDhISDgoKCg4GCgoGAgYF8gIB+gH1+fX5/gICAf35/f3x+gH+BgIGAf359f39+fn+BgH2AgIGDhIN/f359fn5+f4B/gIB/gYKBgH9+f4F+f4CCgoCBhIKEhYaDgH59fHx8fHp5dnl5enl2eXZ+fHt7e358e399gH99fX9/f3+BgoGBgX5/gYF+fX18fX19fX19fXx+jYF8fXl7e3p5fHd4eHR1dXhyd3d0doaEhYWDg4ODg4OCgYKDgoGDgn+BgH9/fn+AfX19fX+AgIB/f39/fIB/f4GAgYCAf32Af35+fn9/fX5+gYGCgn5/fn1+fn5+f3+Af32AgYB+fn5/gX5+gIKBf4GDgoOEh4SAgH58fXx8e3x1eXl4eHh5d3t8e3p7foV9fn1/ent+fn59foGAgIGAfX6BgH59fXx9fX19fX18e32Dgnx8ent7e3p7d3Z4dXJzdnF3eXJ4hYWFhYOEhIKCg4KBgYKBgIOBgIB/fn5+foB+fX58foCAgH+AgX97gH6AgH+BgYB/fYB/fn5/f319fX6AgYGBfn9+fn59fX1/fn9+fH6Af35+fn+Cfn6AgIF/gYOCg4OGhICBfnx9fHx7fHh3e3h1eXd3eXx6e3t9kod9fH13en1+fn19f35+gH98foB/fn19fH19fX19fXt8ent9enp4e3x6ent4dHh1cXJ0cHh4cXmEhYWFg4SDgoODgoGBgoKAgYGAgH99fn5/gH18fn1/gIGAf3+CgHyAf4B+f4GAf399gH9+f39+fX18gICAgIB+f35+fn18fn9+f358fYB/fn1+gIJ/foCAf36Bg4KCg4WFgoJ+fX17e3x8eXd7eXd4d3d4e3t6e3yFin17end6fH19fHx9fX1/fnx9fn59fXx8fX5+fX18fHt6enx7e3p5enp7enhzd3VxcXNweHdxe4WGhYWDhYKBg4OBgYGBgoCBgICBgH5/fn9/fXx+fYCAgoGAf4GBfX6Af35/gX+Af3+BgH+Af31+fH1/gICAgH9/f39+fXx+f39/f319f39+fn6CgYF/gIB/foGDgoKEg4SCgn5+fHx6fHt7eXt6d3N2d3h5e3p7eXp/fnt7d3p8fXx8fH59fH19fH19fXx8fX19fX99fXx9e3l7fHx8enp6enp6eHN2dXBwcm93dnJ7hYeEhYOEgoGDgoKCgYGCgYKBgYGAf4B/f399fX9+f4CBgYF/goF9foF+fn+Bf4B/gIKAgIB+fX58f3+BgICAf4B/f4B+fX5+f4B/f39/gH9/f4J/gH9/gIB/gYGAgISBgoKAf39+f3x9fn56fYR+dHx9enp6enx5eXp6hoV3eXx8fHx8fXx8fHx8fX19fHx9fX19fn19fX16eX18fH16enp6enp5c3V1b29xb3d0c3yFhoOEgoOCgYKBgoKCgYKBgoGCgYCAgICAgH59gH+Af4GCgn+CgX+AgX5/gYB/gICAgn+Bf319f35/f4KAgICAgIB/gIB+fn1/gH9/gIB/f39/gH+AgICAgH+AgYCBgYGCgYCAf39/fn1/fnuBkox6fH18e315e3p6eHmBgXh5e3x8fXx8fHx8fHx9fX18fH18fn1+fn59fHp8fHt8fXt5enp6eXlzdXVvb3Fwd3N0fYWGg4OCg4KAgYCCgoKAgYGCgYKBgYCAgIGAfn6Af4GAgYKCgIKCgICCfoCBgX9/gX+BgIF/fH6Af3+AgoCAgICAf3+AgH9+fX6Afn2AgIB/f3+AgICAgYCAf4CAgYCBgYKCgICAf39/fX5/fIGGiXx8fnt7fnl6e3p7jX53d3l7fHt9fHx8fHt9fH19fX18fXx+fn5/f358enx9e319e3l6e3p5eXN0dW5zcXB4cnV6hYaDg4KDgoCAgIGCgX+CgYKBgoGBgYKAgYF/fn9/gYGCgYKBg4OAgYJ/gYGBf4CAgIB/gX99f4F/gICBgICAf4B+gICAf359f4B+fn+Af39/gH9/gICBf4CBgH+BgIGCgoKAgICAgIB9foB9gIOCe35+e3t9e3p8fHuHeXh4eXx8fH17fHx9fX18fH19fn19fX5+f3+Af317fH18fHx7enl7e3l5c3J1bnZycHhxdXaFhYOEg4KCgICAgoF/gIKCgoKDgYGDgoCCgYB/gICCgoKBg4GEhICBgX6BgoB/gICAgH+Cf36AgYCCgICAgIB/gH+AgIB/fn2Af39/f4GAgH+AgH+AgYF/gICAgIGAgYGBgoGAgYCAgH9/gH5/fX59fn57fXx9e3x8d3h1eHh5e3x8fXx8fHx8fX5/f39/fn19fn9/gIGAf3x9fHx9e3p7eXp8eHpzcnVud3FxenF2d4WFg4ODg4KBgYKDgH+CgYWDg4SBgYOBgoKCgYCAgIKDgoCCgoWDf4GAfoKDgICBgICAf4CAf4GBgIJ/f4CBgH9+gICAgICAf4CAgH+AgICAgIB/f4CBgYCAgICAgYGAgoKCgoCCgYGCgYB/f4B/gId+fnx6fXx7fX54d3Z5eXl8fXx8fXt8fH19fn5/gIGAfn1+gICAgoGAfH59fX58d3t6ent5eXNxdW53cHV6cXZ5hYWCg4KDg4KDhISAgIKBhoOEg4GChICEg4KCgICCgoSBgYKChIJ/gIB/gYOCgYCBgYCAf4GBgYGAg4F+gIOCf31/goGAgIB+gYCBf4CAgYGBgYCAgIKBgYKBgYCBgYGBgoOCgoOBg4OCgYCBgH+AhH19fXt/fXp9gHp5dnp4eXt7fH19e3x9fX19fn+AgYGAgH+AgICDg4B9f35+fn15eXt6enp5c3J1b3dxd3lzd3uFgoKDgoOEgoOEg4CAgoOGg4ODgoKEgYSDgYKAgIKBg4GCgoGCgX6BgICCgYKCgYKBgICAgICBgoGEgH6Bg4F/f4CDgoCBfoCCg4KAgYGBg4KDgoGBg4KChIGAgYOBgYKEg4OEhIODhIODgoGBgYCCf4B/fYB8enx/e3t3fHl5eXt6fX59fHx8fH1+fn+BgYCAgIGBgYSEgH2Af39/f357e3t6e3p0cHhyeXR2eHR3e4SCg4KDg4SChIODgYKChIaEgoODg4SBhISAg4CBg4KCgoKCgIKAfoGAgIKBgoGCgoKBgIGBgoOCgoOAfoGDgX9/gYSEgYN/goKBg4KCgoGEg4OEgYKEgoOCgoGCgoOBg4SDhISEhISFg4SCgYOCgoOBgYGAgH58fIB8fHh8eXp5enx9f3x7fHx9fX18fICAgICAgYGBgYKBfoGAgICAf3p7e3p6enVweHd5dnV8dXZ8gICDgoODg4OEhISAgoKFhISDg4KDhIGEhYKCgYKDg4GCgoKAgYB9gICBgYKDgoKCgoGAgYKCg4KCg4B/gYOBgICChIODgoGCgoGDgoKDg4ODg4SAgoSDg4OBgX+Bg4KDhYKEhISEhISDhISChIOEhIKBgoGBgHt+gX59eXx6enp9fHyBfXp8fH19fHp7fn5+gIB/gYGAgICAgIGBgIB/fX18fH18dnJ2eHh2dH92dH2Hh4OChIWDg4SFhICChIWEhIOCg4SEgISFg4KCgoODgoOCgoCCgH2AgIGCg4KCgoKEgoGCgoOEgoKBgICBgoGAgYOFhIOCg4CCgoOCg4ODg4OEg4CCg4KEg4KCfoOBgoSEgoODhISEhIOEhIOEg4WEg4ODgoKAe4CBf3x8fXp6e31/fX9/fHx6fH59fH19fn5/f39/gICAgH9+foCBgICAfnx9fX5/fn18e3h2f3V2f4SHg4KDhYODhIaEgYKFhoWEhIODhISChIWFgoKDg4SCg4KDgoKBfoCAgoKDgoODg4SCgoKCg4OCg4GBgYGDgn+ChISDg4KEf4KEg4ODgoSDg4SCgIOEg4SDg4KCg4KChIOCg4SEhISEhISEg4OEhYSEhIOBgoB9gYKAfXx8e3x8gH19foB+fn1/fnx8fH19fn5/fn+BgYGBgH99fX6BgYB+fn19fX59fX5+f3+AfHyAgYKCg4OGg4SDhoSBgoiHhYSDg4SEhYGFhYWDg4SDhIODgoOCg4F+gYGDg4SCg4OEhIOCg4KEg4ODgoKDgYOCf4KDg4ODgoOAgoWDg4ODhIODhIOAgoSEhYOCgoODg4GEg4GDg4SDhISEhYSEhIWFhYWEg4ODf32BhIB9fXx8fHx/gX59fn9/fX99e3x9fX19fX5+f4CBgIGBgH59fH6Cf39+fn5+fX1/f39/gICAf4CEhIODhIWDhIOFf36CiouFhISDgoOFgYaGhoOEhISEhIODg4OEgn+BgYODhYSFhIWEg4KEhISFhIODgoSDhYKBhISFhYaEgoCDh4SDg4OFhIWFhIGEg4OHgoOCg4GCgYSDgoODhYODhYWEhYWHh4aHhYSEhYSBf4GDf359fH59fX+BgH9+fHx+f358enx9fX19fX5+fn9/gIGBf319fIB/gH5+fn5+f3+AgYGBgYKAgYWFhIOFhIKEg4aAgoWFi4mEhIOEhYWDh4aGhISEhIWEhYSEg4SDgYKDg4OEhIaEhYSDg4SEg3yDhHuBhHd5g4F9hH5+cnWDgoF2foOEgX2BdYF6g39/gH6EhIKDg4KBg4SDg4SFg4SFhoSFhn2EeXx+f4N7hYOAhIOAf319fn19gYOBfXt/fX6Afn18fHx9fX19fH19f4B/gYJ/fX18f4GBgICAgH+BgYGCgYKDg4KChoSEhIaEgYOEhYOEhYOKiIWFhYOFhYSGhoaDhISFhYWEhYWEhIWCgoOEhYWFhoSFhIOEhYWCaICFanx7cXF8gXOGc3R0fYKDdXNxg4Z0cHVyc3SDdnt9dYF/goOBgnZ5hYCDgIR/hYSChYWCaHpyc3N8f3OCg3+Dg32BfX5+fX6Cg4F8f4F9f4B9fXx8fHx9fHx8fn1+gH+BgX99fX2AgYKBgYGBgIGBgYKBgoKCgoSHhIWEhYSBgoSGhoOFg4aIhoaFg4aGh4eGh4OFhYaFg4KFhoSFhYODg4SEhoaGhIaEg4SFhn1xe4FweXZ+g3+CbnlwdXN8dnl5hXKEg3B2eHF2dHR1cnN0dml/gG5yb3R2bnVsd217c26AiHltfXJzdnN2bW14bHB5bHV9f399foGAgX2Af32Af4B/fX18fH19fH1+f32Af4CAfnx/foCBgoCBgICAgYCAgIKDgoOEhYiGhoCChYODhIeGg4WFhYaHh4SDhoeIiYaHhIWGiIeEg4WGhYWEhIOFhIKFhoaFhoWEhoWHdnB0e3BydX+HhYNtdW92b3x1coR5eYd4cXR3bndod3pucHaCcoN+b3p5eW1vbnpvb213fXiGcHF6cHJ0ZoF1fm57eXNveX+Af319gX9/fH99fIF+gIB+foCAgYB+fn9+foF/gH9+fYB9f4CBgIB+fn+BgH9+goOCgoSFh4eEfoeEg4OFh4aEhoWFhoaIhISGh4eIhoeEhoaLiYWEhoeHhYOFhYWEgoWFhYWGhYWGhYZxdXByc29zenl+g3SIdHV+iHZugnKEhnluanJ/cW1zd3x/dXR8hH54cXV3bnl1enF2eHV6eYRxam95eHBreXN6b3p3dnZwgYB/fn5/f356fn19f31/f359gIGDg4CCg4GBhIKBgIGBgH1/f4F+f35+f4GAfn6BgoCAgYSHhoODhoSEhYaHhoWFhYWGhoiFhYaFh4eFhoSGhomIhYSJioiFhIaGhYWDhYWEhYaGhoaFg3iLeXKIentwcIWFeIV4eWtzfnl7a3KDh4N6fG17eXl0fYB2bm+AgG90fHV3cXl9fW1+dW+DhYZ6gHJye3x1cG96bHN8bneCgIF+fn99fXt9e3x9fX9/fn1/f4KCf4GDgYGDgYB/gICAfn9+f31/fn1/gH58fYGAfn6Ag4iFhoOFhYWFhoeFhYWFhoeHiIaEhoWHhoaFhIWFhIWFhomJh4aEhoWGhoWGhoSGhoeGhoWGh4eHhoaEhoWGh4iHhYeGhoOHhoWFg4SGhoWGhIaEg4SEhoSEgYODhISFhIWEhYSGg4aHhYaEhIWHhoSEhYaEhX13hYOEhIOCgX1/fnt8e357fHx9f359fH5+gYB9f4F/f4GAfn5+gH5+f35+fX99fX5/fHt8f358fH+BiYaFhIaGhoWHhoWFhYWHhoeIhoSGhYaGhYWDhIWGhYSGhoaGhYWGhIWGhoaGhYaGh4eGhYeIiIiIhoSHhYaGiIaFiIeIhYeGhoiFhYaGhYaGhYOChYWGhYWDhYSEhIWEhYWEhYWEhoeGhoWEhoeGhISEhYOFhIKEg4OFg4OCfYB/e3t8fnt8fH1/fnx8fn2Af31+gH5+gH99fXyAfX5+fn5+fnx8fX57fHx/fHt7fn+Ih4SEiIaGhoeGhYWEhoaGhoiHhIWGh4aFhIODhIaFhIeFhYaFhYaEhYaGh4eFh4aJiIaGiIeIiYiFhIiFhoeGh4aIhoeFh4eGh4WFhoeFh4aFgoOFhoaEhIOEhIOEhoSFhYWGhoSGhoWGhYSGhoWEg4SEg4WHhYOCgoWDhIF+gIB8e31+e3x7fX59fHx+fX5+fH9+fX1+fn19fH98fn58fYGAfHx8fXx8fH56e3t9foiHgoWIh4eGhoaGhISGhoeGiIaEhYSGhoSFh4OEhYSFh4SFhoaFhoSGhoeHhoaHh4mIhoaIh4iKiIWHiIWHhoWHhoeGh4WIiIeHhYaGh4WGhoWBhISFhoWFhISEg4SFhYaGhoWGhIaFhoeFhYaGhYSChIOChIeDhIGChISDgYCAgHt7fn58fHx9fXx8fH19fH18fn18fX18fHx9fXx+fXt8gX99fH18fXx8fHp6fHx9iIeChoiHhoeGhoaDhYaFhoaGhYOFhIaFhIiJg4GEg4SGhIaGhoaGhIeHiIiHh4eIioiGh4iHiImIhYiHhYeGhYeHh4WHhoiIh4eFh4eHhYaHhIKEg4SGhYeFhYSDhISFhoaGhoaGh4WFh4WGhYaFhIKEg4ODh4GDgIKDg4KCgn+Ae31+fXt8fH59fH19fH17fHx8fHx8fXt7e318e358e3x/fX18fX1/fXx6ent7fHyIh4KGhoaGh4aGhYOFhoWFhYWEg4WChoSDiId/enqChYaEhoaFh4aEh4eJiIiHhoiKh4aHh4aIiYeFiIeGiIeGhoeHhYeGiIiHhoWHhoeGhoeDg4SEg4aGh4WFhISEhYaGhoaGhYaHhoaHhoaEhoWDg4OCgoOGgYN+goKDgIODf398f35+fHx9f318fX18fXp7e3p7fHx8e3t7fnt7fXt7e358fHx8fX5/fXt6fHp8fYmHg4aFhoWGhoWEhIWFhYWFhIOBhYGGhIKEhHyAhn+ChYWGhYWGhYSHh4iIiIaFiYqHhYeGh4eIh4WIhYaHiIaGh4eGh4aIiIeFhoeGh4WFh4OEhoWEhoaHhoWFg4WFhoaGhoeFh4aHhoeHhYSFhYOBg4KAg4WCg36BgYF/g4F/f35/fn98fH1/fXt9fXx9enp7eXt8fXt7e3t+fHx8fHp7fXx8fHx+fYF8e3t7e3x7iYeEhoSGhIaGhYSFhYWEhIOEgoCDgYWDgYJ/eoSMe4CEhYeGhoaFhIeIh4aHhYWHioeEh4WGhoiGhYeEhoeJhoaIiIeHhoeIhoSGhoaHhYWHg4SFhIaGhoeFhYSDhYWHhYeGh4WGhoaFhoaEg4SFgYGCgYCDg4OCfYGBgH6DgX5/f4B8f3x9fX59e359fH15enp5e319enp7e318fXx8ent9fHx9fH5+gHx7e3x+fXyIh4WGhYeEhoWFhYWFhYODgYOBgIKBhYKAgH9/fXx7gYSFhoaEhYSDh4eGhoaFhIaJhoKGhIaGhoWFh4aHiImGhYiHiIeGhoeFhIaFhYaFhIeDhIWEiIaGh4WFhIKGhYaFh4aHhIaGhoaFhoODg4SAf4GAgIOAg4B8gYB+foKAfYB/gXx/fH1+fX57fn18fHl6enl6fX15enp7fHt8e3t6e319fH18fn5+fHt7fX59fIiGhYaGhoWFhYSFhYSDgoGAgoGAgICDgX5+foB5en2Ag4OEh4WEg4OHhoOEhYSChYiFgoSDg4WFhYWHh4aIiIaFiIeJh4aFhoWDhoSFh4OEhoSEhYSHhoWGhYaEg4aFhoaGhoaEhYaGhYWGgoKDg39+gICAgX+DgHuBf31+gn5+gH6Afn99fX59f3t/fXt6eXp6eXp8fXl6ent7enx6e3t7fH19fXx/fn18fH1/fnx7iIWFhoaGhoSFhIWDhYKBgICAgYB+f4KCfX1/f3t/f4KDg4WGhYSDgoaDgYOEgoCFh4WCg4GBg4SEhIaGh4iHhYWIhomHhYOEhIKFg4SGgoOFhISGhIeGhYWFhoOEhYSFhoWGhIOFhIWDhYWBgYODf35/gH9/f4N/e4B9fX+CfYCBfX6Bfn1+fX1/e398e3p5enp5enp8eXp6e3t7fXp7e3t8fX59fYF9fXx8fYB/fXyGg4aGhoaGg4SChYKFgYGAf3+AgH5/gIJ8fn9/foCAgoKChIWDgoGChIGAg4KBgISFhYKBf4CCg4OEhYaIhoaFhYeFh4WFgoOCgoOCgoWBg4WEhYaEhoaHhoaFgoSEg4SGhYWDhISDhIOFhICAgoJ/fX1/fn6Ag357f3x8gIF9gYB9fYN8fn59fX57fnt7enl7enl6ent5enp6e3t8ent8fHt+fn1/gXx9fHx9f4B+gIaEhYWEh4SDg4KGgoOAgYB+fn+AfX9/gnx9f39+fn6BgYKEg4KBgYKCf4CBgoCAgoWEgoB/gIGCgYOFhYeFhISGhoSFg4WBgoGBgoGCg4GChISEhYWGh4eGhYSDg4ODhIaFhIGDgoODhIODgH+AgX59fH5+fH+DfXx+fHyBgH6Cf31/gnx/f319fHx8e3t6enp6eXt6enp6enp6e3x5e317fH5/f4GAfX59fX1/gICAhoSEhYSFgoOCgoSCgoCBgH59fn9+fn6AfX2Af35+foGBgoODgoSHgYF+gICBf3+ChIOBf35/gIJ/goWEhoSCg4WFgoSBg4CBgIGBgYKBgIGEg4OGhYWHh4WEhYWCgoKDhYSCgYGBgoCFg4F/foB/fnx8fn18foN9e358fYF/gIN9fYCBf35/fXx7fH17e3p6enl5e3l6enl6ent7e3p7fXx8f3+BgoB+gH+AgH+AgYDKysrKysrKysrKysrLy8vLy8vLy8vLy8zMzMzNzc3Nzc3Nzc3NzczMzMvLy8vLy8vLy8vLy8vLzMvLy8vLy8vLy8vLy8vMzMzMzM3Nzc7Oz8/Pz9DQ0NHR0dLS0tLS0tLT09PT0tLS0tLS0tPT09TU1NTU09PT09PT09PT09PT09PT09PT09PT09PT09PT09PS0tLS0tLS0tLS0tPT09PT1NTV1dXV1dXV1dXV1dXV1dXV1NTU1NTT09PT09PT09PT09TU09PU1NTU1NTU1NTU09PT09PS0tLS0tPT09TU1NTU1NPT09LS0tLS0tLR0dHR0dPHhnNlYFtLWWdVTUZIQD03Nzg5Nzw8PDo8Oz42Oj04PDs6OTg3ODs7Oj87PTs8PD47P0E/QkJBQ0RFREE+PTw7QENDQUBDQ0FBR0hHSUtSwtXS09PT09TU1NTU1NTU1NTU1NXV1dXV1dXV1dXVysrKysrKysrKysrKy8vLy8vLy8vLy8vMzMzMzMzNzc3Nzc3Nzc3MzMzMy8vLy8vLy8vLy8vLzMzMy8vLy8vLy8vLy8vLzMzMzc3Nzc3Oz8/P0NDQ0NHR0tLS0tLS09PT09PT09PT09PS09PT09TU1NTU1NTU09PT09PT09PT09PT09PT1NTU1NTU1NTT09PT09LS0tLS0tLT09PT09PU1NTU1dXV1dXV1dXV1dXV1dXV1dXV1NTU1NPT09PT09PT09PU1NPT09TU1NTU1NTU1NPT09PS0tLS0tPT09PU1NTU1NTU09PT09PS0tLS0tLR0dHSzIxyZ2BcTVllUktHSz87Mzc4Ozg5Pj05PDpBOjs9Nzs8PDo6Nzg6Oz0/Oz88PTw/Pj9BPUFBPkNDREJAQT46Oz9DREFDRERCQklHSEhJTr7V0tPT09TU1NTU1NTU1NTU1NXV1dXV1dXV1dXV1crKy8vKysrKysrKy8vLy8vLy8vLy8vLy8zMzMzMzM3Nzc3Nzc3NzMzMzMzMy8vLy8vMzMzMzMzMzMzLy8zMzMzLy8vLzMzMzc3Nzc3Ozs/P0NDQ0NDR0dLS0tLS09PT09PT09PU09PT09PT09TU1NXV1dTU1NTT09PU1NPT09PT09PT1NTU1NTU1NTU1NPT09PS0tLS0tLS0tPT09PT1NTV1dXV1dXV1dXV1dXV1tbV1dXV1dTU1NTT09PT09PT09PU1NTU09TU1NTU1NTU1NTT09PT0tLS0tLT09PU1NTU1NTU1NTU09PT09PT0tLS0tHR0s+Sd2hfXk9XZ01LRkw9ODc2NTk5OTw+OT88RDk7PDc5PD07OTc5Ojw9QDs+PT47PD48PT5BQD5EQ0NDP0E9Ojs9QkNFQ0NEQT9FSEpJSky61dPT09TU1NTU1NTU1NTV1dXV1dXV1dXV1dXV1dXLy8vLy8vLy8rKysvLy8vLy8vLy8zLy8vMzMzMzMzNzc3Nzc3Nzc3MzMzMzMzMzMzMzMzMzMzMzczMzMzMzMzMzMzMzMzMzc3Nzc3Ozs/Pz9DQ0NDQ0dHS0tPT09PT09PT09TU1NTU09TU1NTU1NTV1dXU1NTU1NPU1NTU09PT09TU1NTU1dTU1NTV1dTU09PT09LS0tLS0tLS09PT09TU1dXV1dbW1dXV1dXV1tbW1tXV1dXV1NTU1NTT09PT09PT1NTU1NTU1NTU1NTU1NTU09PT09LS0tLT09PU1NTU1dXV1dTU1NTT09PT09PT0tLS0dHRmn5nYWJOVWpKSElLPzw6OTM3Njc3PTs+OT06Ojs4ODo7Ozg4Ojs7PD46PT09Ojw/PD0/QkA/Q0RDRD5APT08QENEQ0JEQkQ+REhJSUtMttfT09TU1NTU1NXV1dXV1dXV1dXV1dXV1dXV1dXVy8vLy8vLy8vLy8vLy8vLy8vLy8zMzMzMzMzMzMzNzc3Nzc3Nzc3Nzc3MzMzMzMzMzMzMzMzNzc3NzczMzMzMzMzMzMzMzc3Nzc3Ozs7Pz8/Q0NDQ0NHS0tLT09PT09PT1NTU1NTU1NTU1NTU1NTV1dXV1NTU1NPT1NTU1NTU1NTU1NTU1dXV1NXV1dXV1NTU09PT09PS0tLT09PT09PU1NXV1dbW1tXV1dbW1tbW1tbW1dXV1dXU1NTU1NTU1NTU1NTU1NTU1NTU1NXU1NTU1NTT09PT09PT09PU1NTU1dXV1dXV1dTU1NTU09PT09PS0tLR0p+DaV9kU1hsSEhIS0A9Nzg0NzY6Oj87RDw8OTw8OTg6OTo6Ojs8Ojo7OT49Pjk9QDs/QUFCP0JCQUM9Pz8+PEBCRUNDQkBBO0ZJR01MSbLY09TU1NTU1NXV1dXV1dXV1dXW1tbW1tbV1dXW1svLy8vLy8vLy8vLy8vLy8vLy8vMzMzMzMzMzM3Nzc3Nzc3Nzc3Ozc3NzczMzMzMzMzMzc3Nzc3Nzc3Nzc3Nzc3Nzc3Mzc3Nzs7Ozs7Pz8/P0NDQ0NHS0tLS09PT09PT09TU1NTU1NTU1NTU1NTV1NXV1dTU1NTU1NTU1NTU1NTV1NTU1dXV1dXV1dXV1dTU1NTU1NPT09PT09PT09PU1NXV1dbW1tbW1tbW1tbW1tbW1tbV1dXV1dTU1NTU1NTU1NTU1NTV1NTU1NXV1dXU1NTU1NTT09PT09PT1NTU1dXV1dXV1dXU1NTU1NTT09PT09LS0tSjiGxfZlJWakdIR0lBPjM2Njo7PDhDPEJBPjxBPDg5Ojw6Ojw8PDk8PTo7PD09PD89QD9AQT9AQUBCPD4+PzxCQ0NDRkBBQT1ISklOTUeu2NPU1NTV1dXV1dXV1dXV1dbW1tbW1tbW1tbW1tbMzMvLy8rKysvLy8vLy8vLy8vMzMzNzc3Nzc3Nzc3Nzc3Nzc3Nzs7Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Ozs3Nzc3Nzc3Nzc3Nzs7Ozs7Oz8/P0NDQ0NHR0dLS0tPT09PT09TU1NTU1NTU1NTU1NTU1NTV1dXV1dTU1NTU1NTU1NTU1dXV1dXU1dTU1NTU1NXU1NTU1NTU09PT09TU1NTU1NXV1dbW1tbW1tbW1tbW1tbX19bW1tXV1dXV1dXV1dXV1dTU1NTU1dXV1dXV1dXU1NTU1NTU09PT09PT1NTU1NXV1dXV1dXV1dXV1NTU1NPT09PT0tLWroprY2VSWGhMSkdJQjg0OTQ6Ozo5QDk/Q0VAPDw5OTk9Oj07PDw6PTw7OTw9Ozs/PUA9PT5AQD9CQT5APD05QERDQkFBQj48SEpLTU5IqNnU1NXV1dXV1dXV1dXW1tbW1tbW1tbW1tbW1tbWzMzQ0dDQ0NDQ0dHR0dHR0c3Ky8vLzMzMzMzMzMzMzM3Nzc3Nzc7Ozs3Nzc3Nzc/Pz8/Pz8/Pz8/Pz9DQ0dHR0dHR0dHR0dHS0tHV2djY2NnZ2dra2tvb29vZ2dnZ2dna2tra2tra2trZ2dnZ2dnZ2tra2trZ2drb29vb29vb2tvc29vb29zb29vb29vb29vb29vb2tra2tra2tra2trb3NzX1dXV1dXV1dXV1dXW1tbX1tbW1tbV1dXV1dXV1dXV1dTU1dXV1dXV1dXU1NTU1NTU1NTU09PU1NTU1NXV1dXW1dXV1dXV1dTU1NTT09PT09PS1bqKa2hoUlhlSUlMT0A5OTo0O0E8Nz05QUM+QD89ODo6Ozk9Oz4/Ojs8PDo7PDo7Pj1APT8/P0FAQUE/QTw8Oz5BRENBREA9PElJSk1ORqPa09TV1dXV1dXV1dXW1tbW1tbW1tbW1tbW1tbW1szNloSGhoaGhoeHh4eHh4Ky4t3d3t7e3t7e3t7e3t3S0NDQ0NDQ0NDQ0NDQ0ci5ubm5ubm5ubm5ubq6t6WkpKSkpKSkpKSkpKSnhmBjY2NjY2NjY2NkZGRlhIuKioqKioqKioqKiomSmZiYmJiYmJiYmJiYmJeMi4qKioqKioqKioqKi4aBgoGBgYGBgYGBgYGBg4uKioqKioqKioqKiouHvebh4uLi4uLi4uLj4+Pi2NfX1tbW1tbW1tbV1dXV1dXV1dXV1dbW1dXV1dXV1dTU1NTU1NTU1NTV1dXV1dXW1dXV1dXV1dXV1NTU1NTT09PT09XDkXFrak5TYkxMVk48Ojo3Nz5DPjg+Oj8/QTw/QDc7Ojs7PTs+Pjo7PD48Oz07PT8+QDw/Pz1AQEBBPj88PjxAQUVCQkZAQD9HSEpLT0ae2tXV1dXV1dXW1tbW1tbW1tbW1tbW19fX19fX19fMzm5QU1NTU1NUVFRUVFNMoPPr6+rq6urq6urq6uvp1dLS0tLS0tLS0tLS0tTEqaqqqqqqqqqqqqqqq6aGhIWFhYWFhYWFhYWFik4MEhISEhISEhISEhIRE0pUU1NTU1NTU1NTU1NRYmxra2tra2tra2tra2tpVVNTU1NTU1NTU1NTU1RLQ0NEQ0NEQ0NERENDQ0ZTU1NTU1NTU1NTU1NTS6ry6+vr6+vr6+vr6+vr6dnX19fX1tbW1tbW1tbW1dXV1dXV1dbW1tbV1dXV1dXV1dXV1dTU1NTV1dXV1dXW1tXV1dXV1dXV1dXU1NTU1NTU1NPUy5h2bGlKTl9NUlVNPjw8NztAQz42Ojc+Pjs9Qj85PDk9Ozw6PD07PTs9Ozs9PD0+PT07QT08QUBBQT08Pzw7QEJDQURFPUFAQ0ZLS09GmNzV1dXV1dbW1tbW1tbW1tbW1tfX19fX19fX19fXzM5xVFhXV1dYWFhYWFhXUKHx6enp6enp6enq6unq6dXS0tLS0tLS0tLS0tLUxaqrq6urq6urq6urq6yoiIeHh4eHh4eHh4eHh41SEhgYGBgYGBgYGBgYFxpOWVdXV1dXV1dXV1dXVmVwb29vb29vb29vb29vbVlXV1dXV1dXV1dXV1dYUEdISEhISEhISEhISEdKV1dXV1dXV1dXV1dXV0+r8erq6urq6urq6urq6unZ19jX19fX19fX1tbW1tbW1tbW1tbW1tbW1tbV1dXV1dXV1dXV1dXV1dXV1dXW1tbW1tXV1dXV1dXV1dXU1NTU1NTU1NGcenFpSlRdT1JVTkQ+Pzs+QEA4Ojs4PDs7PD86Ozs4Ozk5Ozw7Ojw5Ozs8Ozo9PT0+PUE/Pj8/Pj08PT88PEFBQ0FERTw+QEVGSktNRpPc1dXV1tbW1tbW1tbW1tbW1tfX19fX19fX19fX183OeF5hYGBgYGFhYWFgYFqk7ufn5+fn5+fn5+fn5+bV0dLS0tLS0tLS0tLS08Wtrq6urq6urq6urq6vq46NjY2NjY2NjY2NjY2SXSInJycnJycoKCgoKCcpWmNiYWJhYmJiYmJiYmFveHd3d3d3d3d3d3d3d3VjYmJiYmJiYmJiYmJiYlxTVFRUVVVVVVVVVVVUVmBiYmJiYmJiYmJiYmJbr+/p6enp6enp6enp6enn2djY2NjY19fX19fX19fX19fX19bW1tfX19fW1tbW1tbV1dXV1dXV1dXV1dXV1tbW1tbW1tbW1tbV1dXV1dXU1NTU1NTWo3txZElbYE5OVU9AQT89REI/Oz06OTs6PT07PDs6OTg5OTs8Ozw8Ojo7PDo7QD08PTxAQTxBQTs7PEA/PD1CP0RDQ0U8PkJERkpMTEWN3NXV1tbW1tbW1tbW1tbX19fX19fX19fY2NjY2NjNzcfFxcXFxcXFxcXFxcXEy9DPz8/Pz8/Pz9DQ0NDQz87Ozs7Ozs/Ozs/Oz87NzMzMzMzMzMzMzMzMzMvJycrKysrKysrKysrKysfCw8PExMTExcXFxsbGxsvMy8zLzMzNzMzMzMzLzc7Ozs7Ozs7Ozs7Ozs7NzMzMzMzMzMzMzMvLy8zMy8vLy8vLzMzLy8zMzMvNzc3Nzc3Nzc3Nzc3NzdTY2NnZ2dnZ2dnZ2dnZ2djY2NjY2NjY2NjY2NfX19fX19fX1tfX19fX19bW1tbW1tbW1tXV1dXV1dXV1dbV1dbW1tbW1tbW1tXV1dXV1dTU1NTU169/cF5GXmJQUVdOR0ZDQ0lBPz07PDo8OEBCPD04Ojo4OTg7Pzs8PDs7PDw8PD87PD46Pj44PkI8Pj1BPjw+QkBERUNAPD5APkNJSUtEh9zV1tbW1tbW1tbW1tbX19fX19fX19jY2NjY2NjYzs3Pz8/Pz8/Pz8/Pz9PPz87MzczP09LSzs3P0s7Ozs7Ozs7R1NTTz87S1M/OztPTz8/Pz8/Pz8/Pz8/Pz8/P0NDQ0NDR0dHR0dHS09PU1NTU1dXV1tbW1tfW1tbX1tfX19fX19fX19bW19fX19fX1tfX19fX1tfX19fX19fX1tbW1tbW1tfX19fX19fX19fX2NjX2NjY2NjZ2dnZ2dnZ2dnY19jY2NjY2NjY2NnZ2dnZ2dnZ2djY2NjY2NjY2NjY2NjX19fX19jY19fX1tbW1tbW1tbW1tbW1tbW1dbW1dbW1tbW1tbW1tbW1tXV1dXV1NTV1di4gm9XSl9jUlFaS0hBQTxCPT07Oj4+PD4/PT0/Nzk6OTk3OD48PD47Ozw7PDs/PT0+OTs7OT0+P0A+QD07OkI/QkNCPz0+QD5CRUdKQoDc1tbW1tbW1tbW19fX19fX19fX2NjY2NjY2NjY2M7Ozs7Ozs7Nzc3Nzsqfys3Nzc3QuYOEi8fTwJrLz87Ozs7RsIKDk83SqKDQz9GkodDOzs7Ozs7Ozs7Ozs7Oz8/Pz8/P0NDQ0NDQ0NDR0dHR0tLT09PU1NTU1NTV1dXV1dXV1dXV1dXV1dXV1dXW1tbV1dXV1dbW1tbV1dXV1dXV1NTU1NXV1dXV1dXV1dXW1tbW1tbW1tbX19fX19fX19fY2NjY2NjY2NjY2NnZ2dnZ2dnZ2dnZ2dnY2NjY2NjY2NjY2NjY2NjY2NfX19fX1tbW1tbW1tbW1tbW1tXV1tbW1tbW1tbW1tbW1tbW1dXV1dXV1dXYwIBuVU9gY1dZW0xMQ0A9PTs9Ojw+Qj5CQ0A8Ojg5ODo6Ojc7Pz4/PDw7PDo5Pzw8PTg5PD9BPj09PUFAPTtBQkBCQz47QD9BQUlHSkF629bW1tbW1tbX19fX19fX19jY2NjY2NnZ2djY2dnOzs7Ozs7Ozs7OzdKpj63Rzs7Ozpu3tqSiwJOerNPOzs7PyZu6uJuwt56jp9avn6Gp0s7Ozs7Ozs7Ozs7Pz8/Pz8/Pz9DQ0NHR0dHR0dHS0tLT09TU1NTU1dXV1dXV1dXV1dXV1dXV1dXV1dXW1tbW1tXV1dbW1tbW1tXV1dXV1dXU1dXV1dXV1dXW1tbW1tbW1tbW1tfX19fX19jX19fY2NjY2NjY2djY2dnZ2dnZ2dnZ2dnZ2dnZ2djY2NjY2NjY2dnY2NjZ2NjY19fX19fX19bW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tXV1dXV1dXV18h/b1pTYWVeXVxPSkQ9QD8+Ozc6Pjk/RD5BOTg3ODk7Ozw4OT89PTw9PD47OkE7OTs5OzxDQDw7PT5AQT49QkQ/QkM9PT8+Pz5ISUg/ddrW1tbX19fX19fX19fX2NjY2NjZ2dnZ2dnZ2dnZzs7Ozs7Ozs7Ozs/Inrym0tDQzsqgl36Cw6abr6fUz8/P0cOij3+JxZ6ak53AnpiVnMjQzs7Ozs7Ozs7Oz8/Pz8/Pz8/Q0NDR0dHR0dLS0tPT09TU1dXV1dXV1dXV1dXV1dXV1dXV1dXV1tbW1tbW1tbV1dXV1dXW1tbV1dXV1dXV1dXV1dXW1tbW1tbW1tbW1tbW1tfX19fX19jY2NjY2NjY2NjY2NjZ2dnZ2dna2dnZ2dnZ2dnZ2dnZ2djY2NjY2NnZ2dnZ2dnY2NjY2NfX19fX19fX19bW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1dbV1dXV1dfNiHNdWGloXl9gT0lGOkFAPj88PDo2P0JAQzo2NDc6Ozo8Ojk+PD49PTs/PTxBPjw8Ojw8PTw6PEA9QEI+PkFCPUNDPT0+Oz9BRUtIQHDZ1tbX19fX19fX19fY2NjY2NjZ2dnZ2dnZ2dnZ2c/Pz8/Pz87Ozs7SrKWnqdXAvNLHnY+ey9PJipmq1M/Pz9G/noqo076YoZy0mJyinbCy08/Pz8/Pz8/Pz8/Pz8/Pz8/Q0NDQ0dHS0tLS09PT1NTU1dXV1dXV1dbW1tbW1dbW1tbW1tbV1tbW1tbW1tbW1dXV1dXV1dXW1dXV1dXV1dXV1dXW1tbW1tbW1tfX19fX19fX19fX19jY2NjY2NjY2NjY2NnZ2dnZ2dnZ2tnZ2dnZ2dnZ2dnZ2dnZ2dnY2dnZ2dnZ2dnZ2dnY2NjY19fX19fX19fX19bW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbV1dXW0JB1W1tqaWFeXVNOSTxDQEE+QD46OEZBP0M6NzQ5Ojo5Ozs4Oz0/Pj49QT08P0A9Pjw8PDw8Oj1AQD8/PT5CQD9AQkA8QD0+QUVLRz9r19fX19fX19fX2NjY2NjY2NjZ2dnZ2dnZ2dnZ2tnPz8/Pz8/Pz8/QzJ2Nl6zQmpfKxZ6ynpbN1q2ZqtTPz8/RuqStnKG0mZatuYaelq+zqtXQ0M/Pz8/Pz8/Pz8/Pz8/P0NDQ0dHS0tLT09PT1NTU1NXV1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbV1dXV1dXV1dXV1dXV1dXV1dXW1tbW1tbW19fX19fX19fX19fY19fY2NjY2NjY2NjY2NjZ2dnZ2dnZ2drZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2djY2NjY2NfX19fX19fW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1dXV1tKUcl5ea2tqZV1PTEc/RENDQDo9OzxCPD49OTY0Ojk5Ojo5Nzs/QDs8PUA8PEE+PD07PTw/PDo8Q0A+PTs9QD5CPkBBPkA9QD9GSUQ/ZtXX19fX19fY2NjY2NjY2NnZ2dna2tra2tra2traz8/Pz8/Pz8/P07GigJuvyaCjv8qcpYynrdiqmarUz8/P0cCgnpOpkJuBoJZ4m4Sdk6TV0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NHR0tLT09PT1NTU1NXV1dbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1dXV1dXV1dbW1tXW1tbW1tbV1tbW1tbX19fX19fX19fX19fY2NjY2NjY2NjY2NjY2NjY2dnZ2dnZ2dna2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2djZ2djY2NjY2NfX19fX19bW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbSk3BgXnBoZmVaUUhHQkVDQEA3Ojo8Pjo8OTc2NTk6Njo8Ozc8QEA8Ojo9Oj0/Pj08OUA8PDo6OT9APj08PUBBQz9APz5BOz9ARkpCP2LS2NfX2NjY2NjY2NjY2dnZ2dnZ2tra29vb29vb28/Pz8/Pz8/P0M6fkGyclteqo9PSrqa1mJ/Vqpmq1M/Q0NDSprCun4CfqIiceZ+phZmk1dHR0NDQ0dHQ0NDQ0NDQ0NDQ0NHR0tLT09PT1NTU1dXV1dbW1tbX19bW1tbW1tbW1tbX1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tfW1tfX19jY2NfX19fX2NjY2NjY2NjY2NnZ2dnZ2dnZ2dnZ2dna2tnZ2dnZ2dnZ2dnZ2dnZ2dnZ2djY2dnZ2dnZ2dnZ2dnZ2NjY2NjY2NjX19fX1tbW1tbW1tbW1tbW1tbX19fX19fW1tbW1tbX0pNuYFxxZGdkWlVKQENGQ0FCODs/PD07PDw4NTU4OTY4Ozo5PDo+Pzw9PTk8Pz49Ojo+OTw6Ojg+Pzw9PTw+QEFDQT48PDpCRERKRkJd0NnX19jY2NjY2NjY2dnZ2dna2trb29vb29vb29vPz8/Pz8/Pz9G9n8O31pfA09HQ0srSzZeb1KqZq9XRz9DQ0cnXxJyCuK+mnIq9raaYr9bR0dHR0dHR0dHR0NDR0dHR0dHR0tLT09PU1NTV1dXV1tbW1tfX19fX19bW1tbW1tfX19fW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW19fX19fY2NjY2NjY2NjY2NjY2djZ2dnZ2dnZ2dnZ2dnZ2drZ2tnZ2dnZ2dnZ2dnZ2dnZ2djY2NjY2NjZ2dnZ2dnZ2dnZ2dnY2NjY2NjY2NfX19fX19fX19fW1tfX1tbX19fX19fX19fX19bW19GRbF1cb2doYl1PRkBISUdFQDw8Pj48PT48NzU2Ojk2OTs6Ojs4QD86PDw5PD49Ozs6Pzk/Ojs5PT49PTs7PTxAQ0I/Pz47Q0ZGR0hEWc3a2NjY2NjZ2dnZ2dnZ2dna2trb29vb29vb29vb0NDQz8/Pz8/Pz5V+e6WS1KKa08ySl6ObodirmavV0pem1cWNnqCfmaeXl52lp5aYm7vV0dHR0dHR0dHR0dHR0dHR0tLS0tLS09PU1NTV1dXV1tbW19fX19fX19fX19fX19fX19fX1tbW1tbW1tbW1tbX19bW1tbW1tbW1tbW1tbW1tbW1tbW1tfX19fY2NjY2NjY2NjY2NjY2dnZ2dnZ2dnZ2dnZ2dnZ2tra2tra2tnZ2dnZ2dnZ2dnZ2djY2NjY2NjZ2dnZ2tnZ2dnZ2dnZ2djY2NjY2NjY2NjX19fX19fX19fX19fX19fX19fX19fX19fX1tfPjGRWXnBrXGBgTkVITUlJT0M+OkI9PUBCOzU0Nzw6Nzo7Ojo7OT09OTo6OT0+Pz07OT47PDo8Ozk+PD47PD0+QENCPz5BPEFDR0ZGRVXJ29jY2NnZ2dnZ2dnZ2dra2tvb29vb29zc3Nzc3NDQ0NDQ0M/Pz9DR1aeZrcmjqL7KnbGdo7XZqZup2LirocnBoa2hoMGiq6Sb0J+rpJzR09LS0tLS0tLS0tLR0dHS0tLT0tPT09PU1NTV1dbW1tbX19fX19fX19fX19fX19fX19fX19bW1tbW1tfX19fX19fW1tbW1tbW1tbX19fW1tbW1tbW1tbX19fX2NjY2NjY2NnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dra2tra2tra2trZ2dnZ2dnZ2dnZ2djY2NjY2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnY2dnY2NjY2NjX19fX19fX19fX19fX19fY2NfX19fX19fYzYZdV2JvZE9dVEtIRlNRS0xAPj1EPD9DRj01NTc7OTY6Ozo8PTo7Pzo6OTg6PT0/Pjs/Oz49Ojs5Pjs9PD0+QURCQD8+PzxAQUVHRURSxdvY2dnZ2dnZ2dnZ2tra2tvb29vb3Nzc3Nzc3NzQ0NDQ0NDQ0NDQ0NO5gL3Tm5bP1LWLkZ/T1LyBu9TOlKDT1auNj6nYxZCNt9fCj4281dLS0tLS0tLS0tLS0tLS0tLT09PT09PU1NXV1dbW1tfX19fX19fY2NjY19fX19fX19fX19fX19fW1tbX19fX19fW1tbW1tbW1tbW19fX1tbW1tbW1tbX19fX19jY2NjY2NnZ2dnZ2dnZ2dnZ2tnZ2tra2tra2tra29ra2tra2tnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2NjY2NjX19fX19fX19fY2NjY2NjY2NjY2NfX2ct+WlVqaltMX01KTEpVTEZCPD0/R0ZIS0g9NjU3Ojk3OTo7Ojw9OT45OTo4Oz0+PkE+PTk8PDo9Pj46PTk5Oj9FQUA+PT8/QkBHRURFUMHc2dnZ2dnZ2dna2trb29vb29vb3Nzc3Nzc3dzc0NDQ0NDQ0NDQ0NDQ0cHR0crI0tDUxLjS0tHSwtLQ08fM0tHUwb7V0tTHw9bS1cXE1dLS0tLS09PT09PT09LS0tPT09PU1NTU1NXV1dbW1tfX19fX19fX2NjY2NjX19fX2NfX19fX19fX19fX19fX19fX1tbW1tbW1tbW1tfX1tbW1tbW1tbW19fX19fY2NjY2NjY2dnZ2dnZ2dnZ2dra2tra2tra2tra29va2tra2tra2dnZ2dna2tnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dna2tnZ2dnZ2dnZ2djY2NjX19fX19fY2NjY2NjY2NjY2NjY19rHd1xSZ2laTlpOTFBRV0VKPz89P0FFTExBPjc3NTs4ODk5Ojs8Pjw+ODo6OTs+P0A9Pj46NTo6Oz0/Ojs5Ojw+QkJAPz8/P0FCR0RDRE683dnZ2dnZ2dna2tvb29vb29vb3Nzc3Nzc3d3d3dDR0dDQ0NDQ0NDQ0NDS0NDR0dDQ0dPU0dHR0dPR0dHS0tHR0dTV0tLS1NXT09PU1NLS0tPT09PT09PT09PT09PT09PU1NTU1dXV1dbW1tfX19fX2NjY2NjY2NjY2NfX19jY19fX19fX19fX19fX19fX19fX1tbW1tbW1tbX19bW1tbW1tbW1tfX19fX2NjY2NjY2NnZ2dna2tra2tra2tra2tra2tra2tvb2tra2tra2trZ2tra2tra2tra2tra2tnZ2dnZ2dnZ2dnZ2trZ2tra29ra2trZ2dnZ2dnZ2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjbwXNYVWlrU0xSTlBSWVRGSTw+Qz9BQkVKPj43ODY5Nzc4OTk7Oz0/QDw9ODk7Ozs/Pjw8OTU6PT47OTk7PD8/P0JCQT1BPUBBQkZCQkJLtd7Z2dra2tra2tvb29vb29vc3Nzc3Nzd3d3d3d3R0dHR0dHR0dHR0dDQ0NDQ0NDQ0dHR0dHR0dHR0dHR0dHS0tLS0tLS0tPT09PT09PT09PT09PT09TU1NPT1NTU1NTU1NXV1dXV1dXW1tbX19fX2NjY2NjY2NjY2NjY19fY2NjX19fX19fX19fX19fX19fX19fX19fW1tbX19fX1tbW1tbW1tbX19fX19jY2NjY2NnZ2dna2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tnZ2dnZ2dnZ2NjY2NjY2NnZ2dnZ2dnZ2NjY2NjY3LxvVFRsbExLUkpUUlVLRkQ6PkdEREFERjw/ODk6OTU5OTo3PD07PkA9PTc5Ojs5Pjs5OTY2Oj1AQT47PDk6Pj9DQT4/Qj0+QkNFQkFCSrDe2dra2tvb29vb29vb29vc3Nzc3Nzd3d3d3d3d0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0tLS0tLS0tLS0tLS0tLS0tPT09PT09PT09PT09PT1NTU1NTU1NTU1NTU1dXV1dXV1tbW1tbW19fX19jY2NjY2NjY2NjY2NjY2NjY2NjY19fX19fX19fX19fX19fX19fX19fX19fX19fW1tbW1tfW19fX19jY2NjY2NjZ2dnZ2dra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2trZ2dnZ2dnZ2djZ2dnZ2dnZ2dnZ2dnZ2dnY2Ny2a1NbcGtLVVdSXFFXSEQ+PEJKRT1ISj89PDc4ODo1OTg5Njs+PD1APDw1OTk8Oj87OTk0ODw9PUFBPD47Ojw+QD89PkE9PUNGR0I/Qkmq39ra29vb29vb29vb3Nzc3Nzc3N3d3d3d3d3d3dHR0dHR0dHR0dHR0dHR0dHR0dHS0M/U0M7P0tLT0tLS0tLS0tLS0tPT09TU1NTU1NTU1NTU1NTU1NTU1NTU1NTV1dXV1dXV1dbW1tbW19fX19fY2NjY2NjY2NjY2NjY2NjY2NjY2NjX19fX19fX19jY2NfX19fX19fX19fX19fX19fX19fX19fX19jY2NjY2NjY2dnZ2dra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tvb29va2tra2tra2tra2tra2tra2tnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dndsGRTYXJfT1pUV19RUkdCPUVJTEFBTEQ/Pzs6ODg5Mzg2ODY5Pj0+Pz06Njo7Pjs9PTo5Njg6PTtAQDxAPz0/P0I+PD48PEJFR0lCPkNJpODa29vb29vb3Nzc3Nzc3Nzc3N3d3d3d3d3d3t7S0tLS0tLS0tLS0dHR0dHR0dPT0bm7zLqbnLrQyNPT0tLS09PT09PT09PU1NTU1NTU1NTU1NTU1dXV1dXV1dXV1dXV1dbW1tbW1tbX19fX19fY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjX19fX19fX19fX19fX19fX19fX19jY2NjY2NjY2NjZ2dra2tra2tra2tra2tra2tra2tra2tra29va2tra29va2tvb2tra2tra2tra2tra2trb29vb29va2tra2tra2tra2tra2tra2tra2tnZ2dnZ2trZ2dnZ2dnZ2dnZ2dnZ3qpfVWBuW1VZUVpeT0xHQ0ZNSUZEREo7QUE7PDg4NjQ4Njk4Nzw/QT89Ojc8Pz48Pz87OjY4OD09QEE9QD5BQD1AOjs6Pj1BRUdJQkBDR57h29vb29vc3Nzc3Nzc3Nzc3d3d3d3d3d7e3t7e0tLS0tLS0tLS0tLS0tLS0tO+wMqaoKKViJGeqpOpz9TT09PT09PT09PU1NTU1NTU1NTU1NTV1dXV1dXV1dXV1dXV1tbW1tbW1tbX19fX19fY2NjY2NnZ2dnZ2dnZ2dnZ2djY2djY2NjY2NjY2NjY2NjY2NjY2NjX19fX19fX19fX19fX19fX19fY2NjY2NjY2NjZ2dna2tra2tra2tra2tra2tra2tra29vb29vb29vb29vb29vb29vb29ra2tra2tra2tra2tvb29vb29va29vb29vb29va2tra2tra2tra2tra2tra2trZ2dnZ2dnZ2dnZ2d6iXFVeblheXU5aUFROQ0NMSUlJRkpEPEJBPDs4NzY3OTc3OTk9P0E/PDo5QD88PkI/Ojg3NzY9Pz9APUBBPz88PTs7OD48P0VJSEE/Q0aX4dvb29zc3Nzc3Nzc3N3d3d3d3d3d3t7e3t7e3tPT09PT0tLS0tLS0tLS0tTIlZyum5m1iX2TjIKBhMTV09PT09PT09PU1NTU1dXV1dXV1dXV1dXV1dXV1dXV1tbW1tbW1tbW1tfX19fX19fX2NjY2NjY2dnZ2dnZ2dnZ2dnZ2dnZ2NjY2NjY2NjY2NjY2NjY2NjY2NfX19fX19fX19fX19fX19fX2NjY2NjY2NjY2dnZ2dnZ2dna2tra2tra2tra2tra29vb29vb29vb29vb29vb29vb29vb2tra2tra2tra2tvb29vb29vb2tvb29vb29vb2tra2tra2tra2tra2tra2tra2tra2tra2tnZ2dndmlpYYW5ZYVdPV01QRUJETElNS0ZJRT5CRDk4ODY3OTc1Njk4PT1BPjo4OT4+PD9APzw1Njc2PD4/PjtAQEA/Pj4/Pjs/PkFCRkdCQENIkeLb29zc3Nzc3d3d3d3d3d3d3d7e3t7e3t7f39/U09PT09PT09PT09LS0tLTz6h+kayPko6MhoCIiYSQo8rU09PT09PU1NTU1dXV1dXV1dXV1dXV1dbW1tbW1tbW1tbW1tbW19fX19fX19fX2NjY2NjY2dnZ2dnZ2dnZ2dnZ2dnZ2dnY2NjY2NjY19jY2NjY2NjY2NjY2NjX19fX19fX19fX19fY2NjY2NjY2NjY2NnZ2dnZ2dna2tra2tra2tra2tra29vb29vb29vb29vb29vb29vb29vb29ra2tra2tra2tvb29vb29vb29vb29vb29vb29va2tra2tra2tra2tra29vb29ra2tra2tra2tna3JJaWWNuWlpSVV5QTDxAR05IUklIRT47SEY4OTc1Nzg3NTg5ODs+Pj07ODlBPj1AP0E+NzU5Njs+QUI/P0BAQkI/Pj8+QUBEQUZIQj9FSozi3Nzc3Nzc3d3d3d3d3d3e3t7e3t7f39/f39/f1NTU09PT09PT09PT09PWtaWaiIuQhYCFi4iBg4qLf4bC1tTU1NTU1NTV1dXV1dXV1dXV1dXW1tbW1tbW1tbX19fX19fX19fX2NjY2NjY2NjY2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2djY2NjY2NjY2NjY2NjY2NjY2NjY2NjX19fX19fX19fY2NjY2NjY2NjY2dnZ2dna2dra2tra2tra2tra2tra2tvb29vb29vb29vb29vb29vb29vb29vb29ra2tra2trb29vb29vb29vb29vb29vb29vb29vb2tra2tra2tra29vb29vb29vb29vb2tra29uIWltnalxYTFpfVkg6TEhMSkpDRUZDQExINzo3Njc4ODU4Nzg5PDw7Ozk4QD89Pj8/PDY3PDQ3P0JCQUBAPz8/QT09P0A+QEBGRT09REuI4tzc3Nzd3d3d3d7e3t7e3t7e3t/f39/f39/f39TU1NTU1NPT09PT09PUxZKCg4WGfYGCfXx5foGCg36k29bU1NTU1NTV1dXV1dXV1tbV1tbW1tbW1tfX19fX19fX19fX19fX19jY2NjY2NjZ2dnZ2dnZ2dna2tnZ2dnZ2dnZ2dnY2NnY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjX19fX19fY2NjY2NjY2NjY2dnZ2dna2tra2tra2tra2tra29vb29vb29vb29vc3Nzc3Nvb29vb29vb29vb29vb2tra2tra29vb29zb29zb29vb29vb29vb29vb29vb29va2tvb29vb29vb29vb29vb29vb2tvZgFpebWhaU0ldW1hKRE1ISlNMR0ZBQD9KQjg7NjY5OTc1ODY4Ozo7Ojw5OD09O0A9Ozo2NTw3Oz1CQEFBPD49QEE9PEA/Pz5CREU+PERLg+Lc3d3d3d3d3t7e3t7e3t7f39/f39/f39/f39/V1dTU1NTU1NPT09PT2LKEkKh9g3l2hIh/e3d5gn5+i67A1dTU1NXV1dXV1tbW1tbW1tbW1tbW1tfX19fX19fY2NjY2NjY2NjY2NjY2NjZ2dnZ2dnZ2dna2trZ2dnZ2dnZ2dnY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2dnZ2dnZ2tra2tra2trb2tra2tvb29vb29vb29vc3Nzc3Nzc29vb29vb29vb29vb29va2trb29vb29zc3Nzc3Nvb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vc1nlcWmxmWFJPYFFSQUhHSkZYTEZAQENDSz87Ozc4ODc2NTc2ODo5PDw6PTs/PTs9Pjw7ODg8OT0/QkFCQzw8P0FCPj1BQkNCREVDQDtDTH3h3d3d3d3e3t7e3t7e39/f39/f39/f39/g4ODg1dXV1NXU1NTU1NPU0ruen3WKeXuIgICChYGDcnOAhYOMrNfV1NXV1dXW1tbW1tbW1tbW1tbW19fX19fX2NjY2NjY2NjY2NjZ2dnZ2dnZ2dnY2NnZ2dna2tra2trZ2dnZ2dnZ2djY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2dnZ2dna2tra2tra29vb29ra2trb3Nzc3Nzc29zc3Nzc3Nzc3Nzb29vb29vb29vb29rb29vb29vb29zc3Nzc3Nzc3Nvb29zc3Nzc3Nvb29vb29vb29vb29vc3Nzc3Nzc3Nvb29vb3dByXV9wZVdLUGNPS0JHQ0pIS0ZBPEE9SFBBOjo3Nzg3Njc4Nzw6OD09PD47QD88Pz07Ojs5Ojk8QEJAQkNAPUFAPz1AQkNDQUBAP0A7RU144N3d3d7e3t/f39/f39/f39/f3+Dg4ODg4ODg4NXV1dXV1dXV1NXU18h4i4V8goh6g4SBfoKCc2l0hYuGkJ3U1tXU1dbW1tbW1tbW1tbW19fX19fX19jY2NjY2NjY2NjZ2dnZ2dnZ2dnZ2dnZ2dnZ2dra2tra2tra2dnZ2dnZ2dnY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2dnZ2dna2tra2tra2tra2tvb2tvb3Nzc3Nzc3Nvc3Nzc3Nzc3Nzc29zb29vb29vb29vb29vb29vb29vc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc29vb297KalxjcWVST1heSz9HTElPS0VAPkFCP0lPPjk6NzY7NzY6Ozc7Ojg6PDw+Oz09Oz48Ojs4OTo4OUFCQkFAQDtAQj06PkFCQz8+PT4/PUZOdN/e3t7e3t7f39/f39/f4ODg4ODg4ODg4ODg4OHV1dXV1dXV1dXV1s6dhpl+f5OTin+CgXx9gnNxm4mAgoOJwNnat7TQ19bW1tbX19fX19fX19fX2NjY2NjY2NjY2NjZ2dnZ2dnZ2dnZ2tnZ2dnZ2dra2tra2tra2trZ2dnZ2dnZ2dnZ2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NnZ2dna2tra2tra2tra2tra29vb3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nvb29vb29vb29vb29vb29vc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3NvfwGNaW21gVlBTU0pETEhNSEk8PkFEQ0ZORDw8OTc5OjY4Ozk3PDk4OTw9OzlAPjpBPzw3NTc7ODpAQUVBPz45PUI/Oz1CQkI6Pj07PT5GTnHe3t7e3t/f39/f39/g4ODg4ODg4ODg4OHh4eHh1tbW1tbW1tbV1tjLioCHhYOXjHh7e3lvfYF1a3ebdHZ7eInHxpiMrdjZ19fX19fX19fY2NjY2NjY2NjY2NjY2NjY2dnZ2drZ2dna2tra2tra2tra2tra2tra2tra2dnZ2dnZ2dnZ2dnZ2dnZ2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NnZ2dnZ2dnZ2dna2tra2tra2tra2tra29vb3Nzc3dzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nvb29vb29zb29vb3Nzc3Nzc3Nzd3dzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3d3d3d3d3Nzc3Nzc4LdjV1lrYlJNVVFMSktGS0ZDQD5CQT9FTT4+PTg5OTo3OTo3NT03Nzo+PDs7Qjw5Pz05NjY4PTk6QEJGQD49PEBCREA9QD9DO0A9PD4/Rk9t3N/e3t/f3+Dg4ODg4ODg4ODg4OHh4eHh4eHh4dbW1tbW1tbW1tfVrYZ6d32rn3l4entzdH+Dfm9xe3l6c3t2k4qFgImkzdnY19fX2NjY2NjY2NjY2NjY2NjY2NjY2NnZ2dna2tna2tra2tra2tra2tra2tra2tra2tnZ2dnZ2dnZ2dnZ2dnZ2dnZ2djY2NjY2NjY2NjY2NjY2NjY2NjY2dnZ2dnZ2dnZ2dra2tra2tra2tra29vb29vc3Nzc3N3d3d3c3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc29vb29vc3Nzb3Nzc3Nzc3N3d3d3d3d3d3dzc3Nzc3Nzd3d3c3Nzc3Nzc3N3d3d3d3d3d3d3d3dzc3OGtYVtebGJSTVZMTUdLS0RGQkI7QT08RUxDQT44Ojk6Nzc5NjY6NTs+QDs9Oz89PD89Ojk5Ojw5PEVDRkA/PkBDQkQ9OT0/QT1CPz1APkdPadvf3t/f3+Dg4ODg4ODh4eHh4eHh4eHh4eHi4uLW1tbW1tbW1tfQmH+Qh4N9eoN2e3Vzenl6kKqmd3JyfoeHh4CAfoKEhJHJzNnX19jY2NjY2NjY2NjY2NjY2NjY2NnZ2dnZ2tra2tra2tra2tra29va2tra2tra2tra2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2djZ2dnZ2dnZ2djY2NnZ2dnZ2dnZ2dnZ2tra2tra2tra2tra29vb29vb3Nzc3N3d3d3d3d3d3d3d3d3d3d3c3Nzc3Nzc3Nzb29vb3Nzc3Nzc3Nzc3Nzd3d3d3d3d3d3d3dzc3N3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3NzhpV9UYm1iUE9TSUhHRkpJSUJBPkJCPEVFREA+ODo4Ozc3Ojc4ODY+Pz07PDk9PDo+PTs6Njc7NjpEQUY+Pz8/PkNBPzs9PT47REM/PjxIT2fZ4N/f3+Dg4ODg4eHh4eHh4eHh4eLi4uLi4uLi1tbW1tbW19jYyH52doN+fnR2eIaCenl1d5yhu6GEgoCAfoeKinx/gYaMnKjO2NjY2NjY2NjY2djY2NjZ2djY2NjY2dnZ2dra2tra2trb29rb29rb2tra2tra2tra2tnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dna2tra2tra2tra2tra2trb29vb29zc3Nzc3N3d3d3d3d3d3d3d3d3d3d3d3dzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3e3t7e3t7e3d3d3d3c35pbT2drXFBRUElDT0pLR0xHSkJAP0FHREBBPDg8ODg1ODk3Njc3QEA/Ozw5Pj04PTw8Ojc4PTk/RENGPkE/QkBDPzw6Pj0/PkVEPz07S1Fj1+Hf4ODg4ODh4eHh4eHh4uLi4uLi4uLi4uLj49bW1tbW19XB3LRueHJze3B6eXaFiIR7eH2AgZiljH98fnuRhZaLhoGDgY6Rvd3Z2NjY2NjZ2dnZ2dnZ2dnZ2dnY2dnZ2dna2tra2trb29va2tva2tra2trb29ra2tra2tnZ2dnZ2dnZ2dnZ2dna2trZ2dnZ2dra2tra2tnZ2dnZ2dna2tra2tra2tra2tra2tra2trb29vc3Nzc3Nzc3N3d3d3d3d3d3d3d3d3d3d3d3d3d3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3e3t7e3t7e3t7e3t7e3t7e3t3d3d6NWFdobllQUUtISlNJTUhNSUtBQz9DRkJBRDo6PDg2NDg4NzY2Nj8+Pjo8OTw7Oj09PDw4Ozw7RERERT4/PkI+Qj84PT8/Q0NCQEE+O0xUY9Xh3+Dg4OHh4eHh4eLi4uLi4uLi4uLi4uPj4+PW1tbW1teslLZ6eHJvd5V7dHuLgHh1bn6Fg3t/hYhyfH2bnI6JioJ+g32Hk5rH1NjY2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dna2tra2trb29vb29vb29vb2tra2tra2tra2tra2tnZ2dnZ2dnZ2dna2tra2tra2tra2tra2tra2tra2tra2tra2trb2tra2tra2tra2trb29vc3Nzc3Nzc3Nzd3d3d3d3d3d3d3d3d3d3d3d3d3d3c3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3N3d3d3d3d3d3d3d3d3d3d3d3d3e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3d7Zf1lgaGxcUUtHR09LTk5PTURGQkg/Q0hEREA6Ozs4NzU3Nzc4NThAPkA7PDk8Ozw+Ojk7OTk7OUZERUI8QD4/PEBDOz5AP0A/Qj8+OjtKVWPV4eDg4eHh4eHi4uLi4uLi4uLi4uPj4+Pj4+Pj1tbX19vKhYR3cXJubniVhHt4hH95dnB4c3eLkY6CdnN9ioaId3d1d4ODfIiIk8Pb2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dra2trb2tvb29vb29vb29vb29rb2tra2tra2tra2tra2tnZ2dnZ2dna2tra2tra2tra2trb2tra2tra2tra2tra2trb29vb29ra2trb29vb29vb3Nzc3Nzc3Nzd3d3d3d3d3d3d3d3d3d3d3d7e3d3d3d3c3Nzc3Nzc3Nzc3Nzc3Nzc3d3d3d3d3d3d3d3d3d3d3d3d3d7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7f0nVZaGlqVk5KSE1OR01EUElGSD9FPUZMREM+Ozs8OTc3OTY2OTU4Pj4/PTs8QDs9PDo3Ozc5OThHREVCPUE9Qj8+QDw/QUE/QEJAPjs8S1Ri1OLg4eHh4eLi4uLi4uLi4+Pj4+Pj4+Pj4+Pj49fX19fEknuJf29sbnV2foSBg4qGfnVybWVtiIaKjoR7c4OHint4e4OPj4GEioqxztrZ2dnZ2dnZ2dna2tra2tra2tra2trb29vb29zc3Nzb29vb29vb29va2tra2tra2tra2tra2tra2tra2tra2tra2tra2tvb29va2tra2tra2tvb2tvb29vb29vb29vb29vb29vb29zc3Nzc3Nzc3d3d3d3d3d3d3d3d3d3d3t7e3t3d3d3d3d3d3d3d3dzc3Nzc3Nzc3d3d3d3d3d3e3t7e3t7e3t7e3t7e3t7e3t7e3t7f39/f39/f39/f39/f3t7e4clsW2pqalNOR0dOT0VIRk1JSUA7RD5ISUA9PDo6Ojg2ODo3Nzk0OD08PT07ODw8PDw4Njc4OTo6RUJFQT9APEI/Q0M+PkNEQUBAP0A8PUtRYdPj4OHh4uLi4uLi4uPj4+Pj4+Pj4+Pj4+Pj5OTX19fZqXaFfnx3bHB3eXh8jH2KhYB3anN0d3p9bot7fnl6foR/gIGDfnh8foeGlrbT2tnZ2dra2tra2tra2tra2tra2tvb29vb3Nzc3Nzc3Nvb29vb29vb29ra2tra2tra2tra2tra2tra2tra2tra29ra29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb3Nzc3Nzc3Nzc3d3d3d3d3d3d3d3d3d3d3d7e3t7d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3t7e3t7e3t7e3t7e3t7e3t7e3t7e39/f39/f39/f39/f39/f39/e3uO9amFpa2lRTkZNTEtKWE1OR0FAQE9BQz9AOzw4OTk5Njg2NjY4NDs+PD07OTY6Ojk6OTU4OTg5OkJERj8+Pj5AQEBCPzxBQD88Pj9BOT5KT17S4+Hh4eLi4uLi4+Pj4+Pj4+Pj4+Pj4+Tk5OTk19fX2sqKhIB5c29tcXN1d4CUeHaAfHWHhXd1cnWgmXp7d3Z5doR0bWxue3iAmouTu9za2tra2tra2trb29vb29vb29vb29zc3Nzc3Nzc3Nzc3Nzc29vb29vb2tra2tra2tra2tra2tra2tra2tra29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vc3Nzc3Nzc3Nzc3d3d3d3d3d3d3d3d3d3d3d3e3t7e3t3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3t7e3t7e3t7e3t7e3t7e3t7e3t/f39/f39/f39/f39/f39/f39/f397js2lpbmloUFBPTExPUk9LU0Y/RURERD48PDg7ODc5OTU2ODY2NzM6Pjs+PTc6Pjk5OTk2Ojo4NzxDRUc/Pzs/PkA9PkE9Oz0+OUFAQDhBTlFc0OTh4eLi4uLj4+Pj4+Pj4+Pj4+Pk5OTk5OTk5NjY2NjauY6AenZ1bmpveHCBfWt0cnZ3hIV5h4d5lY55eXp1d3pza298gHx2fYh8gLLe2tra2tvb29vb29vb29vc3Nzc3Nzc3Nzc3dzc3Nzc3Nzc3Nzb29vb29rb29vb29ra2tra2tra2tra29va29vb29vb29vb29zc3Nzb29vb29vb29vb29vc3Nvb3Nzc3Nzc3Nzc3Nzc3Nzc3d3d3d3d3t7e3t7e3d7e3t3d3t7e3t7e3t7d3d3d3d3d3d3d3d3d3d3d3d3d3t7e3t7e3t7e3t7f39/f39/f39/f39/f39/f39/f4ODg4ODg4N/f39/f4qpqa2hrZFNQT0ZQVFJOSFJLPkREQ0I7Ozk6Ojg2Nzg1NjY4ODg0Oz88Pzw5PDw3Ozo6Nzo6Nzo9Q0JDPUE+Pzw5PT5BQDs8PDtFQD47Q05TXNDk4eLi4uLj4+Pj4+Pj4+Pj5OTk5OTk5OTk5OTY2NjZ1p5vdntveHh2cG50d3BwdHBzb36Jc3qGhY2EenNtcoB6hn1vg5OBdnx9g4a13drb29vc29vc3Nzc3Nzc3Nzc3Nzc3Nzc3d3d3Nzc3Nzc3Nzc3Nzb29vb29vb29vb29ra2tra2tvb29vb29vb3Nzc3Nzc3Nzc3Nzc3Nzc3Nvb29vb29vc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzd3d3d3d3d3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3d3d3d3d3d7e3t7e3t7e3t7e3t7f39/f39/f39/f39/f39/f39/g4ODg4ODg4ODg4ODg4N/f3+KgbWhma2ZVVlJHUFFOS0xMRUJIRUc9OD08Ojo3Nzg2Nzc2NTY3NDg+PD09Ojg6OD46Ozc4Nzc6Oj5DRDtDQj49OD1AQUM/Pjw+RTw+PUJNUF/S4+Hi4uLj4+Pj4+Pj4+Pk5OTk5OTk5OTk5OTk2NjY3MB2doCCfnp4eHBsdXlya399bHNvdGdoaYB/aWh4c2d+iYl4cIKGe3d9foWKvd3b3Nzc3Nzc3Nzc3Nzc3Nzc3d3c3Nzc3N3d3dzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nvb29vb29vb29vb3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzd3d3d3d3d3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7f39/f39/f39/f39/f39/f4ODg4ODg4ODg4ODg4ODg4ODg4ODflGttZm5mU1NJUFlUTEhGTkZGRUJGPTs+PDs5Nzc4NTc5NjQ1NzU4PDs9Pjo6OztAOTs7ODc6OTlAQkE8QUE/Pzk/QEJFQ0FAQEM7Oz1ES01g1uTi4uLi4+Pj4+Pj4+Pk5OTk5OTk5OTk5OTk5NnZ2tmYc3uqhJaCcnR1dn14aGx8d2h4d25rcHR5gIN2dHyBhIJ9c3CAin94gn95g8je3Nzc3Nzc3Nzc3Nzc3d3d3d3d3d3d3d3d3N3d3dzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nvb29zc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3N3d3d3d3d3d3d3d3d3d3d3d3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e39/f39/f39/f4N/f39/f3+Dg4ODg4ODg4ODg4ODg4ODg4ODg4ODh24tubWdzY1lRTVVbV0hDSUZOS0dCRD8/Qjo7OjY2NzU2NzY0ODc2Ozw7Pj86PDk8Qjg3OTo6Ojk6QUFCQUJDQEE+PT9CQ0NEQUJGOTg9REpOYtjk4uLi4+Pj4+Pj5OTk5OTk5OTk5OTk5OTk5OXZ2drcqHGCtXiRfnNsem6EgXaCfWtoan+DeHZ8dX2FhXRmcHl9d316gIqFe318foC03tzc3Nzc3N3d3d3d3d3d3d3d3d3d3d3d3dzd3d3d3dzc3N3c3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzd3Nzd3d3d3d3d3Nzc3Nzc3Nzc3Nzc3N3d3d3d3d3d3d3d3d3d3d3d3d3d3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e397e3t7e39/f39/f39/f39/g4ODg4ODg4ODg4ODg4ODg4ODg4ODg4eDg4ODg4ODg4tiFb3FrdWFWT1VVXE9ETUY+SkdKRUQ8P0I6PDk4Njg0NTY3NDc2NDk7Ozw7OD47PEE4ODo9OD04Oj09QEBAP0FCP0A+QENCQ0FBRTc2O0RMTmPa5OLi4+Pj4+Pj5OTk5OTk5OTk5OTk5OTk5OXl29ra3Z5sbnNxhY1ybXBuf391hH5rcnZ2enN4gXhzb3VwbWt2fHmFiIB/f392coODsd/c3Nzc3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3Nzd3d3c3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3N3d3d3d3d3d3d3d3d3d3d3d3d3c3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e39/f39/f39/f39/f39/f39/f39/f39/f39/f4ODg4ODg4ODg4ODg4ODg4ODg4OHh4eDg4eHh4eHh4eHh4OLXhW1xb3ZeUldTWlpRSkhDQFFAQkQ8OT9BOjw5NzU3NDU2NjQ3NTY9PDo9PTk+OjxAODo6PDY7OTs+PUJCQjtBQkBDQEBEREM8PUA3OjxFS01l3OPi4uPj4+Pj5OTk5OTk5OTk5OTk5OXl5eXl5dPOxsB+cWxveHt2b3VuanNzbZKGeG50dG5vdIZ/b2twboJ0bXZyfY2DdnF/d3mKgabf3Nzc3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3dzc3d3d3dzc3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3t7e3t7e3t7e3t7e3t/f3t7e3t7f39/f39/f39/f39/f39/f39/f39/f39/f39/f4ODg4ODg4ODg4ODg4ODg4ODg4ODg4eHh4eHh4eHh4eHh4eHh4eHi1oZucG1xYFJZUFdfWUpMTElSP0Q9OTtCRjs6OTc0NTY1NzU0NjY2Pj07Pz45PTk7Pjg9Ozo0ODtAQENCQ0FCRkE/Q0BBQkREOz0+OTs8QkxNZODl4+Pk5OTj4+Tk5OTk5OTk5OTk5eXl5eXl5eW5t7Woc3JscHd6dHd4bXFydXd/hHRyc2xsa3F8bnBudGuBf3GAd32Eg355gHNygYqg2d3c3d3d3d3d3d7e3t3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3e3t7e3t7e3t7d3d3d3t7e3t7e3t7e3t7f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f4ODg4ODg4ODg4ODg4ODg4ODg4OHh4eHh4eHh4eHh4eHh4eHh4eHh49WHcWxqbF5YWlVXYFZWUE9QTD1BOjs8RkE4Ojg3MzY1Njk2NTg1Nz89Oz8+OT04Ozw5PTs7NTo9Q0JCPENDREREQUE/PkJDQzw9Pjg5PENLS2PN0dnh1sjY4+Tk5OTk5OTk5OTk5eXl5eXl5eXltbW2q3J5cm59f3Z1d2hqaGlwb3Zta2tnZWZxdG15gG5teXd2iHhxa2podXV5dHV/wd/c3d3d3d3d3d3e3t7e3d3d3d7d3d3d3d3d3d3d3t7e3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3e3t7e3t7e3t3d3d3d3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f4ODg39/g4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4OHh4eHh4eHh4eHh4eHh4eHi4uHh4ePVhnFwY2lhV1NZV19MUk9STUtAPjg5O0E+ODc5NjQ3Njc6NjY2NDk+Pzo8Pzo/OTo6Nzo9PDk5PEFBPTtBQ0VDRkA+Pj5BRUQ+QEE3OD5GSEpesrW4wbm1u8jg5eXl5OTl5OXl5+fn5+fm5ebm5ra2tbWOfX5weoR1cnZnYmNlbGtyb2ZpbHZtd4Z9hXlsbHd4a3ZwfH14c3V5fHd2h7ng3d3d3d3d3d7e3t7e3t7d3t7e3t7d3d3d3d3d3t7e3t7d3t7e3t7e3t3d3d3d3d3d3d7e3t7e3t7e3t7d3d3d3d3d3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4OHh4eHh4eHh4eLi4uLi4uLi4uLi4eHj1Yd1bl5uY1pUU1hXS1NLSk1SR0E4Ozs+PDk4NzU2NTY2OTY4NjY5Pzw6PT07Pzo7Ozk8PDs5Oj4+Pjs8PUFEQkNBQEBBP0JDPDw9Nzs+REVKXrG1tLW2t7e2y9rJ3uXl3eDi3tXU1tPU4OPg39+2treuh3t/bnmNenJ1bWNobGxtaXR4enF5enqIh4N6aWh9cWRvcXyGgX55e318e4an2t7d3d3d3d7e3t7e3t7e3t7e3t7e3d3d3d3d3t7e3t7e3t7e3t7e3t7e3t3e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7f39/e3t7e3t7f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4OHh4eHh4eHh4eLi4uLi4uLi4uLi4uHh49aGdmxhb19dV1lcWlJQSEpXTEVHPUA9Ozs9OTY0NjU1NTg2NzY3OD87OT09PDw5OTw6Pjw6OTg+Qjs7Pj5AREBDRUFAQD0/QDw9PTU5PEJHRl2xtbW2uLm5ubq9uMPT0r3BwcC6u7y6u8TMxb/Dt7e3hGl1gX1ndYd5Z3Vxa2t5eHB3fH15bWl3e3h3bml1j4FwbHl4d3d9gXuGgnmAoNze3d3d3t7e3t7e3t7e3t7e3t7e3t3d3d3d3d7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t/f39/e3t7e3t/f39/f39/f39/f39/f39/f39/f39/f39/f39/f4ODg4ODg39/f39/f39/f3+Dg4N/f4ODg4ODg4ODg4ODg4ODg4ODg4ODh4OHh4eHh4eHh4eHh4eHh4eHh4uLi4uLi4uLi4uLi4uLi4ePXhXJrZ3RhW1hYX15TVVVRVUpMRj9JRDs5PTY2NDc3NTc4Nzc3ODk8PDo+PDg8Oj0+OTs8OTs5P0E8PT9DP0FARUJCQTw9Q0A6Pjw1NDlER0dasbW1tre5ubm5ubm3ubm4uLm5urq6urm5urm6u7e3uX9ucHN6b3B/eXNuc3Vsc3Z4cXFwb2tvcX6Bc2mHhIF9dHOHdW11hYmBgHJ2hafd3d3d3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7f39/f3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f4ODg4ODg4ODg39/f3+Dg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4eDg4eHh4eHh4eHh4eHh4eHh4eHh4eHh4uLi4uLi4uLi4uLi4uLi4uHj14lxa2xyW1dXXWBUUVVUUFJPSkNATUE9Ozk2NTM0NjQ2ODc3Nzk6Pjs8Pjs5PDo8PDk8PTw7PT0+PUNEREBDQkE/QD48PkE8OD06NjY6QkpIWLG1tLa2uLm5uLi5uLe3uLi5urq5ubi4uLi6uru3uKx7cnhxf3ZzfnBsbXpyZ29sbW50cHt3d3Jyd3pvhpJ2f3x8enZ5fH9zfYdyda3T393d3d7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e39/f39/f39/f39/e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f4ODg4ODg4ODg4ODg4ODg4ODf3+Dg4ODg4ODg4ODg4ODg4ODg4eHh4eDg4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4uLi4uLi4uLi4uLi4uLi4uLi49eHb2pxalVWV2FbT1FSUE5XSURESUo/Ojk6NzUzNDk1NzY2Nzg4Ojw7PD46PDo6PTw5PDw9Oz09PDs9REdEQ0E8PDw8Pj5AOzg8ODE1OkFGRVautbW1tre4uLm4uLi4uLe4ubq5uLi3t7i4ubq7t7mqcnB4d3x7e4J3aG5xam9qY2lyf21zcn54dHFsanaAeX2AgH91doB1a4qLgHaR1d/d3d7e39/f3t/f3t7e3t7e3t7e3t7e3t7e3t7e39/f39/f39/f39/f4N/e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t/f39/f39/f39/f39/f39/f39/f39/f3+Dg4ODg4ODf4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHi4uLi4uLi4uLi4uLi4uLi4uLi4uPYhm1sdGVWUFxnWE1YU1JRWUVDS1BOOzk4ODc1NTM5NTY2NzY4Nzk+OT0+OTw5OTw7Njg5OTo8QEA9PkBGQEJCQDo+PEE9Pzs7OzYxNjxCR0RQqLa1tba2tre4t7i4uLi4uLm6ubi4t7e3t7e5ure2tIlyd3h9iXxwem99c2hqbGdnbHRscXd0cWx2c3Fxd3FyfHl4g3Z7d2mLkYp9kM7f3d7e3tvY2drZ297f39/e3+De39/f3Nvc3N3e3uDg3+Dg4ODf3t7e39jS397f397e3t/f3t7f3t/f3t7e3t7e3t7e3t7e3t/f39/f39/f39/f39/f39/f39/f4ODf4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODh4eHh4eHh4eHh4eHh4eHh4eLi4eLi4uLi4uLi4uLi4uLj4+Lj4+Li4uPj4+Pi4uLi4+Lk14NoZ3VkVlVkZVdKWllXW1Q9RU1LSD04NzU3NjQzOTQ0Nzc1Njc5PTo9Pjw9PDk7PDk5Oj45PD4/PkFBQ0FFRUQ+OzxBPjw5PDs3Mzc+REhFSqG2tbW1tbW2tre4uLi4t7e4uLi3tra2tra3uLm2traLfXpsbHp/cGx5dm5qaGdlcXp4b2lvb3B1c21zd4Fnb32CgYNyf3lqcHJ6f6ng393Zy8a/vL2/vsLN0tDW3tnc4NfQzcPCw8PH1dfT2dzX1NjX0MfExce9vM/Kz87Y3djO3N3c2t3T0dze39/e397e3t7e4N/f39/f39/f39/f39/f39/f4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4OHh4eLi4uLi4uLf4uPi4eLg4d7W29/Sw8rJx9Hb3OLk4eHg2dre1sbExcTN2trf5OHi4trX3st9aWZxYVleZWFNTFRLUlpMO0hNSEZBPTc2NjUzNDY2NDg3NjU2OTw7Pj46Pjk5PDk3OTs7Oj49PEBAQ0RCR0ZCQT08Q0A9OTw7Nzc3P0RGRkaZtrS1tbW2tra4uLi4uLi3uLi3s7W2t7a3t7i5tba3opdxb29waW50dnFmZWNrbmdvcm1mZ2tygWVvdnyAeGRzj39zaHFyaWVlbm+w39HFv7u5ubm5ubq6uru6vc3Gw8e/urq6uru7u8HCvcHFvby/vry7urq5ubq6ubm6w8XDucDDwby/ube/z8/U3tjc3t/g3tLa4N/f4ODg39/f39/f39/f3+Dg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODh4eDg4ODg4ODg4ODh4eHh4uLi4eDh4uLi4uHa2t3RwsPCu8XT1uDdydPDrrnAsaqrq6uwtLbJ0sXRxLG4v7Srq6usr7S0vMzE1c60tLureGxtbWBdYl9ZS1NVVFFQREBRTUhEPzo3ODU3MzE1NjQ5ODQ2Njo8Oz08ODw5Njo6ODg5NzU8PDw/QEFAQkRDQkE8PkI/Pz09PTc1OD5DRUNAj7a0tLW1t7i4uLi4uLm5uLe1sautr7Oxs7OztLS0tqaei2tue3ZxeXhnY2hfcXdha25vaG99b25ja2lseHdsa4Z+bHB6dm1scG95sca8uru7urm5ubq6urq6urq6urq6urq6urq7u7q7u7y7urq6ubq7u7q6urq6urq6ubi3t7i4t7e2tbW1tbi3u8e+w8XHzcS4wMnH0tzZ2d/e3uDf39/f4ODh4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODh3Nji4uLi4eHh4OHg3tfGxtHQztTe3tPO0t/SuLi8sq2trKysrrG+ua63rKipqamqq6urqqqqq6ysuKyqqqqrq6urra6urq6urryzrayrpHlub21fXl1dVE1SU1xUSkE/UElIPjg5NjgzNzMwNTczNzg1NzY2Ojw/PDg5Ozo6Ojg5OjY1OTs8Pj9EP0NFQkNCP0BAQT9APjw3ODc6QUVEP4W4tLS1tbe4uLm5uLi3t7SurKuqqq2urq6vsLGzs7WjcG5ucm1wg311aWFlaGZkY2Rxc21td25naW1tZXBzb29zcXN8h4F6dX11n7u6uru7urq5ubm6urq6urq6ubq6urq5uLm5ubm6urq6u7q5ubm5ubq6ubm6ubm4uLi3t7e4uLe3t7a2tbW2tra1tbW1tba1t7e3t7rBvrzGycrb3+Dg3tvd3d7h4tDW4uHg4ODg4ODg4ODg4ODg4OHg4OHi0768zNjd3OLg0dnbxL23sLCxsa+zu7uzsLS9s66urq2tra2sq6qqqqmpqKmpqampqqurqqqqqamoqampqampqaqqqqytrq6urq6urq6sraR4aWJxZmFZWlZRUk5cU0Y9QlJEQTc8OzY5NTY1NDU2NTg3NTY1Nzg7Pjw7OTk5Ojg3Nzk3Njg8Oz47RD8/Q0BBREE+P0M9Pjw+Ojo3Nz9DRj54srCztLW2t7i3trKurq2sq6uqqaqtraysrq+xs7S1t4xucnRqaIB5ZmpmZWxdaG5waGxxYmNmcoJ+dmhobGpueoaBhXx4cXF5gK+6ubq6urm5uLm5ubm5ubm5ubm5ubm4uLe3t7e3uLm5ubm5uLe3t7i5ubi4uLi3t7a2tre3t7e3tra2trW0tLW1tbW2trW1tre3t7e3t7e3tre4v8bP0MS+v8DE19e8ydra4OHg4ODh4eDg4ODh4eDb3t7Uzby3tre6wMDJxLfIvrKwsLCwr7Cvrq6ur7Cwr66urq6uraytrKurq6qpqampqampqampqKmpqKmpqampqKmpqKmpqqqrraytra2ur66trK2heWpkbWdiXFhRUFFLVEpCOklRP0E3PDk0OjU2NTQ1NTY4ODY4Njs6OTw9PTs6ODY2ODg6ODY3Pj09PT5BQUVCQkNBQUBBOj09Pz05Ojc9QUc8bKqmqKutsLGwrqupqKqrq6mpqamrrKytra2usLO0tbilgIdvaWdzdGZrcG1qZGxvcm5rbWNrcHyJhG5qbHx4Y3uKfnNqc25rcY+7ubm5ubm5ubi4ubm5ubm5ubq5uLi3t7e3t7e3t7i5ubi4uLe2tra3t7e3t7a2t7a2tra3tra2tbW1tba1tLS0tbW1tra2tra3t7e3t7i4uLe2t7a2uLm4uLe3uL6+uLq9vcfb4OHg2Nnd4eHg3dfKwcPCurm5uLe4uLi3tbS0tLKysbGxsLCvr6+vr6+vr6+vr66ura2srKyrq6yqqqmoqKmppqepqaehpaipqamoop+hoZyip6inqausrK2ur7Cwrq2unXhwbGphY2BZUU1RTFJGQzlNUEU+ODs3Mjc5Njc0NDM1ODg3OTc7OTo9PTw6Ojk3NDo5ODY1OD8/QEI9RENDQ0FDQEJBQDtAP0A/PDw6O0NIPWOopaWlpqioqKenp6ipqqmoqKipqqqsra6wsLCztLW1taWYdn5xZmt4cW9tZmVsaGNsZ2ZpaX11bWlvfXZ5hWZod294b3Fvcninu7m5ubm5ubm4uLm6ubm5ubm5ubi3t7W1tba2tre3t7e3t7a2tbW2tre2tbW1tra3t7e2tbS0tLS0tLS1tLS0tLW1tba2tra2t7e3t7e3t7a2tre2tre3uLe2t7i4t7i4uLi4wMXTyry8w83PyMC9urm5ubq6ubi4uLi4t7W0tLSzs7KysrGwr6+vr66urq+vr6+uraysrKurrKysq6ehoJ6gn5udoaGdlpmkpKaon5mZmZmanZ+gn56fpKqtrq+ura2srJl1cGlrY2FeXVVOU0tSREQ4TktHQTo4NTI2OTY1NDczNzc3ODk3OTo7PT0+ODg4NzU6OTk1OD9AQEFEPkZBQkNAQkNCQT88QEJCQD0+OjpERj5cpqWmpqampqanqKenqKioqKenqaurrKytra2ttLS0tbekc311bnONf3JmanFjaW1jaGZobG51aV9jZ3VzdnpuZ3Bwcn56cYihu7m5ubm6urq6urm2s7a1uLm2trW1tra1tbW1tbW3tra3tra2tbW2tbW1tbS0tLa2t7e3tbS0s7O0tLW1tLS0tbW1tra2tra2t7e3uLe3tra2trW2tbW2tra2tra2tra3tra3uLi3uri4uLi3uLi5ubm5urq6urm4t7e3t7W1tLS0s7OysrKxsbCwr66urq6urq+vra2srKuppaSmpqScmZubmpmampmXl5eXl5aZm5iZmJmZm52en5+dnJ6gpKWko6OioqKQdG5jcGFeXltUU1RIVEo/PFFCRkM7ODYzNzo1NTQ4Mzg5OTc4OTc7OTs9Ozc6NzU2OTk4NTg+Pz9ART5CPz9DPzxBQUI/PT9EQT8+PTk9Q0Y/VaSlpqanqKeoqamop6ioqKioqKiqrKuqqaipq7W1tba5o3eKcXKHhnd0cGh5a2JjYWVsaW5zal9jZWNjZWprYmRqbHaXjX6ovbm3tre5u7u6uLWxrKurqq6wrKyrq62tq6uvsLGvr7CytbW2t7W1trW1tbW1tbW2trSvr7O0tLSvra6vsrW0tbW1tbW2t7e3t7e3t7e3t7e3t7Owsra1tLa2tre3tra2tbW1tra3t7e5uLi4t7e3uLi4ubq6urq5uLi3t7e1tbS0tLS0tLS0s7OysbCvr6+vr66vr62oo6KgnJqampqZmZqbm5qampqbmpmZmZiXl5aYmZmZmpycnZ+foJ+goKChoaCgoJ+fi3RuaXRdYGZeUlRLRFRJPUVTSEVCOzo0NDY5NDQ1NzM4ODg3ODk5Ojs7Pz04OjkzNTg5NjM5PT5AP0A6QEJCQkA/QEJCPz0+QUFCPz06PkVDQFGjpqWlp6inqauqqKaoqKipp6ioqKinp6ioqaq1tbe3t7KZtH99kIx1Z2lqbGZjYGNoZW94cGlicXx5cGpmZmRma3NqhYystrKwra2ttLeysLCtrKuqqaiop6ipqampqKinqKipqaeoqqurra2sqqytraysrq6traunpaSnqqyopKOkpamwsbGztbW2t7i3t7W1tre4t7e3t7Kppaasq6ivtLa1s7W3t7a1tbW2tra3t7e3t7a2t7e3t7m6urq5uLi3t7Wxs7S0tLKxsK6sq6yurrCxsK2rqqmqqKijnJqZmJmYmJiYmZmZmZmZmpqZm5ubnJybmZeYmpqcnJydnJ2foKGhoqKioKGgoKCfnop1amtuWVxhVktPREdVRz5PV0hEPTw4MzQ0ODQ1NDgyODk4ODk6Ojw5OUA8Njk6MzY3OTE0PD8/QEBBOkNGRUJBREJDQTo7P0FCQz9APUBEQ0BPo6empaemqKqqqqakpqenqKioqKimpqaoq6uttba3t7e4rbJ1cHuDdmBiaWtiZWZhZGdmfYh5bHKAfXFvcXhjbW5xZo+srKurq6ysra6urK2trKyqp6WmpaWlpqioqKiopaeoqKioqKeoqampp6Wko6KioqOioKKioaKhoKChoaKjpKOjpaWlqLC0s7OzsKuqqaqztLa3trGopaOioaGipKiqqairs7Sxrq6xs7W2tra3uLi3t7e3t7e3t7a2uLe0sa6ppqerrKmnpqWkpKSkpKWnqaajoJ+enZycm5uampmZmJeXmZmZmJiZmpqampqampqbm5mYmpydnZ2dnZucoKGgoaOjoqCgoKCfnp2FdGtsaFdYU0pHTUVITUdAU1dGRz09OTM2Mzc0NTU3Mzg6Ojo6OTw9OjpBPDY9ODM3ODgzNztAPz9AQDpCRUNAQkRDQT87PEBDQkNBQDxBQ0A9TqKnpqanp6mqq6mkpaWlpaaoqKippqanqKmpqrW2tre3t7izc2h7c2JnamtpaWJhZGloXV1tfHJma3J/fHR8bm1zc36gqamrq6uqq62trKusq6mpqKWjpKampqWmp6eqqaamp6enqKinp6iop6WjpKKhoaGhn56en5+fn56foKGho6Wko6OkpKSmp6enpqWkpaampqeqraumpKKhoaChpKWlpaenpaeoqKalpaivtLa3trW1tra1tbOwrKupqa6rqKWlpqampaSkpaWlpqWkpKSkpaKhoaGgnp2bm5ucm5qamZiXmJiYmJiZmpmZmZmYmZmZmZqZmZydnJycnJybnJ+fn6ChoaKgoKCfnZ2cgHNrbmReU0pITUZETEtFRFFTQ0c9PDgzNjI4NDY0NjQ4OTg6Ozk7Pjw5PTs5PTczNTk2NTY8QD0/QD88P0JDPkJCQj89Pj5CQ0FFQD86PkVAO0+jpqWkpqeoqaelpKWlpKWnp6eoqKanp6alpqa1tba2trW2uYptcW1vfHxxZ2pmYGFsYFROW2hqbm9tgYJ9cWdxdn6aqKeoqqmpqqurrKqqqqimpaWkoqOlpqalpaWmqaqppqWjpKWmpqSjo6KioqKgoJ+fnp6cnJycnJ2dnJ2en6CioaKjo6KhoqKkpaSioqOjpKSjpKSko6Ggn6GipKanp6ipqaelpaSipKSlqK2wsKyrqqusqqmnpaWmpaWlpaalpqioqailpaWkpKSlpKOjpKOioaGhoqKgnp2cnJubm5qZmJiYmJmam5mXl5eWlpeXmJiZmpqcm5qampubm5ucnJ6goKGgnp6enpycm356bnJiXlNNSlBFRk5NQkBPRT5JOz01MzYzODM2Njc1Ojs4OTs5Oj49Ozo5OT03NjY5NjU2PkI+PkE/PT5DQT5DQ0BAO0BAQkJCRUA+Oz5FPzxQoKSjpKOjo6SkoqSlpaSlpqamp6empqalpqaltLW1tbS0tbiBaHx9ZXOCemxwdWFfY1ROT1FbaGxpbGxxbW5xbnScoqSnqKioqauqqqqqqaempaSjo6OjpKSlpqalp6ytqaShnp2eo6Shnp6foKCenJ2dnJycmpqam5ucnJubm5ydnp6foKChoJ+goaOioKGjpKSjoqSlpaWkop+go6SkpKapqainpaGdnJ+jpaipqainqKioqaempaWkpKSlpqampqampqenpaWko6Ojo6KioqGhoqKhoqOkop+enZ2cmpubmpqZmJeXmJaWlZSUlJWVl5iYmpubnJuampqam5ucm5ucnp+fnpucnJyam5p/fnF0YFtUTUdNSEZMSj8/TkM8QDs8NDM4Mzc0NzY3ODs9ODo6OTk7PTs7ODk9Nzc4OTU4OD9APT9BPjs9RD89REA/PzpAQUE/QUVAPjw8Qz88Tp2ioaKioKCipaSkpKWlpqenp6empqampaampbW1tbS0tLS3jHalsXdmc3Jvc2xjZGlYT1JRT09dgG1kYFptkZGSoqKjpaampqenqKiop6alpaSjoqGhoaKjpaempqesrKemoJ2cm6Ghnpuamp2cmZiam5qampmZmZubm5uampqampucnZ6goaCfnp+hoJ6foqOko6Omp6inqKWioKGhoaGkpaWlpKCcmZmbnqOmpqampqanpqempaOlpKWlpqiop6enpaWlpaWkpKOjo6KhoqKioqKhoaKjo6Kgn56enZybnJubmZaUlJSTk5OTk5SUlJWWl5qam5ubm5qZmZqanJ2dnZ2dnZuampqamZqXf3dvc11aTkhKTkdFRklERU5APD09PDQ1OzQ2NDY1Njc5Ozg5OTg5OTw7PDc6Ozc4ODg1ODg/Qj9BQTw+P0A8PEJAQT49QT4/Pz1CQUA6OkA8PE+doqGfoJ+dn6OkpKSlpqeoqKenp6ampqampqW1tLS0tLS0tbSXtqd1Znh2Y2xjY2VjW1JTU1JNXqCMeFhodpajnp6hoaOjo6OjpKSlpqalpKSioaGko6OjoqOlpqWmpqenpp+bmpuioJmWlpWam5mXl5iYmpqYmJqampqbm5qZmZmenZ2goqOjo6KkpKWinqGhoaKjpaampaSjoaCgn5+hoZ+goJ2amJeZmpygpKOjpKWmp6alpaOjpKSkpKWnp6ampqampaWmpKOjo6SjoqKjpKGfoKGhoKGgoaCfn56dnZyamJeVk5KSkpKSkpOTkpOUlZaZmpqbm5qampqbnZ6enp2cnJybm5qamZmZlH10bHReWk9IRUdGQkVORT9GOzo+Pzs0Njo2OTM2NDY4ODo4OTc4ODo8Ozw5Ozs6OjY3ODk5Pj9APjw9QD5AOjlAQT89QT8/QUE+QUE/Ojk9PjpQnaCfnZucnJufoqOlpaWlp6iop6ampqanpqantLS0tLOysrGwsK2rkHiGj36bmn93Yl1TUlFRTGKgootaiKCgn52YmZycnZ2eoaGgpKenpqWkoqGjp6alpaKipaampaanpqagm5mboaCXk5OSl5qcmpeXl5iampmampqam5qYmJmaoKCgoKGfoaKipKamop6gn5+goaOko6Khn56enpyanZuZmpqZmJeZnqChoaKioqKkpaWmpKSkpKKioqKkpaWlpaWlpaalpaOko6KioqGgoKGgnp+fn5+fnp+foJ+cm5qZl5WUlJSTkZCRkpKSkpKSk5SVl5iZmpmZmpqam5+fnp2cnJycmpmZmpiXl5F8cmdxXl1QRj9BRD9KT0JCRjhDRT4+OTg7Nzc0ODQ1OTo6Ozk3OTo8Ozo8PT48PDo2NzY5OD4/QT47Pz49PDg6PkFAQUE/P0FCQERBPjo4PkE8U5ycm5uampycnaGio6KjoqSmp6alpaampqSjo7KysK2rp6amp6alpqiln6iop6qnoXmEXFFST0xcnKCAYpmgnp2clZOVlpeZmp2dnqGmpqampKOioqanp6ajpaampaWmp6amop2cnqGfl5GRkJSXm52YlpaWmJuZmpqampqZl5iam6Ghn56fnpybnJ6goJ6dn56fn6Cio6SjoqCfnp2ZlpeXl5iYmZubnqKioqKioqGio6WlpKOio6SioaGhoqOkpKSko6SkpKSioqKhoqGgn5+gnp2enp2dnZ2dnp6em5mYl5WTk5SUk5KQj5GSkZKSkZKTlJaXl5iYmZqampyenZ2dnJubmpiYmpmXlZaNempmamBiTkY+P0A9SkVAQ0A7QEE8Ozs5Ojc2NTg0Njc4OT04ODs6Oz87Ojs8Ojk6Nzc2ODs7Oz08Ojo8PTw3Oz5DQkRDPz1BQ0FEQT88OkBCO1eZmJqamZmam5ucnp2foqKhoqSlpKSlpqSioJ6op6alpqWlpaemp6ampqakpaanqKehqXJOUU1KVJahenKanJyenJeVlJWWmJiXl5qeoqKhoqOkpKOjpaalpaanpqSlpqalpaOgoKGhn5mSkI+WmpmenJaXl5eZm5ycnJqamZeZm5uen52cnZyZmZqcnZydnp6fn5+hoaCgoaKgn56bl5WVlZeanZ6fn6GhoqKio6OhoaCgoJ2cnaGioqOkpKOioaSlpKOko6SjoqKioqKhoKGfn52cnZ2cnJ2dnJ2enpqXlpaVlJOTkpKSkpCRkpKSkpGSlJWWl5iYmJiam5ycnJycnJ2cm5mYmZiWlJWXi3hsY2RiZFFHQT1DO0tIRDo7Ozw+OTo6OTo3Mzc5NTo4ODg8OTg7OT09Ozo7Ojk8PDc2NDc/PDo9Ozw/Pjw7ODxBQ0FDQkI+P0NAQkFAOj9APztZmZiampqam5ubm5ydoKGhoaGhoqKioqKhn5+dpKWmpqenpaWmp6ampqWkpKalpKSkpaaGUFJQT0+PmHB6mpubnJ6cnJycm5ubmZiYm56dnp6foKOkoqGhoqKio6SkpaalpKOjoaGhnpyalZOUmJuam56amJiYmJqcnpyam5iWmZybnJycnJydmpqbnJ2dnp6dnp6fn52cnJyhoaCblpWVlZacoKGgn5+hoKKjoqOhnZuZlpaWlpicnqCip6ikoaCgoqOjoqKioKCgoJ+fn5+gnp2cm5ucnZydnJmanJuWk5KSkpKUk5KSkpKSkpOSkpKRkpSVlpeYmJiYmZqcm5qbm5ucnJqZmJiXlZWWl4d3ZGdoZGJNQ0U8RDlJSkU5Ojs9PTo6ODg6NjQ3OTU8OTY4OTc5PDs7PDo6PDs6PDw4Nzg3Pj07Pj46Qj86Ojo/QURCQ0FBQD9EQUFAPjpAPj06W5qYmZqbmpubm5uen6CgoaKioKCgn5+enp2dnKWkpaanpqWlpqakoqKio6Oko6Kjo6KnllRYVVJOZ21rgZ6am5udn6Cgn56enp6dnJ2dnJ6enp+goaCfn6CgoKGio6Ojo6OjoqGgnpuZmZiZmZmamZienpiYmZmam5qWlZeWlZicnJ2cm52dnpybnJ2cnZ6bmJqeoaGdm5udoKKhmpWVlpaZoKKgnZueoKGjop+em5eXlJKSlJeYmZ2goqenpaGgn56goaGioaCfnp2cnJubnJubmpqZmpydnJmXmZaVk5GQkJCPkZKSkpKSkZKTk5OTk5OTlJWWlpeXl5manJubnJucnJqamZeXlpaVlZSEcmZsYmRbREJMPT84RktCPEA+Pj05Ozk6PTg1ODg2Ozg1Njo4PDw7Ozw8Ozk8Oj09OTU4Nzw5PD88OkE/Ojo6QEBDQkRBQ0A/Q0FAPj08QD09Ol+al5mamJeYmpycn5+foaGhoJ+fn56foKCenZ2lpKSko6OioqOjoZ+foaGipKOio6SiradXXl1UV19ua42dmpqbnJ6dm5ucnZ+enZycnJydnZ+goKChoaGgoKGgoKGioaGioZ+enJqampqbnJqZmpuZnJ6ZlpaWl5eTjo6QlJabnJuam5udn52cnJycnJ6dlpSZnJ+in5ycnZ+hoJuXl5mZmpycnJubnZ6fnZqXlpaWlJOTlJiampqfoKGmpqWgn56fnqChoaCenJubnJybm5ybm5qZmJmZmZmXl5iVlJKQkJCQj5CSkpKSkZGTk5aYl5STkpSVlJWWlZaZmZmam52cnJyampmXlpaWlpaQgG9vZV5gV0BKSDg/N0lFP0VBPD07Ojo8Ozs3NTs4Njs3NDY6Oj47Oj0+Pj07Ozs+Ozo4Ojk5NkBBPTo8PTo6OT9BQ0JERUM+P0FBPz8+Pj89PDtgl5WXl5aVl5mbnqGhoKGioqCenp6enqCgn52bpaWjpKSioKCfoJ+dnZ+hoqOjo6OkobCjXWVkYGFua4GenJubm5ubmZianJ2enJubm5ycnJ6ipKGeoKGhoqKhoKCgoaGgn5+enJqZmpubm5ybmp2dm5manJiXlZWWkY6Nj5KYnZycm5ycnqCdnJucnJyempWVm56foZ+dnJyenp2cmpqampqampqbm5qXl5aTkpWVlpWTlZaam5qanZ6foqWjnp6fn5+en5+enZ6fnZycm5qcmpqbmpiZmJiYmJiYlZSTkZCRkJCQkZKTk5CRk5SYmZiVk5SVlZWWlZaXmZmXmZqenpyamJiXl5aWl5eYjX1ubV9lVlRFSzw3PjdSRUM+QkE4Ozw7OTg6ODY7Nzc6Njc5Oj0+Ojw8PT49PD06Pz06ODw9OTtAPj4/PT45ODs/QkNAQ0VDPT9DQj5AQD5APTw8YZWSlJWWlpeanJ6goKCgoaCgnp6enp6gn56em6WlpKOioJ+fnp2dm5mbnJydnp+gn56rmGNpbW5pZm2enZybm5ybmpmZmZqam5ucm5uam5ygo6SgnZ6en6CgoKCgn6ChoKCfnpuamZqam5ubm5ufnpyZmJqamJiYmJKOj5OXnJ2bnJ2cnJycnZycnp6dnpqVl5ygoaGfnp2eoJ+cnJuampqbmpqYmpmVk5OTkpOWl5eVlJiYmZucnJydoJ+gnp6enp+fn56en6KjpKKgnp6cm5qampuZmJmZmJeXlpWUlJORkZCQkZKTk5OSkpOUmJmYlpWUlZaWlpaWl5iYmJiXmZqamZeXl5aXlpeWl4l4dmddX1dURUU5OTs8WT5AOEI/OTs7Pjk4Ozg6Ozc5OjU4OTs9PDk9Oz0+PD0+Oz8/Ozk+PDw+Pz5AQUE9ODc7QkNFP0FFQz1AREJBQEQ7Oz47PGKWk5SUlpWUlpiYmZubnJycnZ2cnJ2en56dnJqkpKSkoJ+enpybm5qZmJiYmZucnZ6cpolla3R4bVuFop2dnJydnJqbmpqampydnZ2bmpuboKKinpucnZybnJ2enp2dnZ2fnpyampucnZycm5ycnp6cm5qanZqam5yVkZOXm52dnJ2fnZycnJycnZ6fnp+cl5idn6GhoJ6cn6CfnJubm5qbmpmZmZmZl5WWlZaYl5eXlpaYmZuenp2dn6GhoJ+fnp6fn5+dn5+hoqKhoZ+fn5yZm5qcnZuampmXlpaYl5eXlpWTkpGTlJSTlJSUlJaZmJaVlZeZmJeYl5eXl5eYl5iXl5eXlpaYl5eVl5eDeHZfW11eUT1GOjk4P1VDQTtDQzo8Pz86Ojk3Ozg4ODc0ODk8Ozw4Ozs8PTo9Pjo/QT06PTw+PkA/PUBBPjk2PERDRUBBRUU9PkVERD9COzo8OTpkl5SVlZaUlJSUlJWXmJiamZqcnJydnp6dnZybo6Oko6CenJuamZqZmJiYmZiam5ubm6WJa3F2em9lmp+enp2dnJybnZ6dnJ2enp2dnJydm5ygoJuampubmpudnJqampucnJuZmZycnJ2dnZ2dnZ2dnpybmp+fm5ydm5mZmZudnZ2dn52dn5+dnJydn5+fn5uanZ+goJ+dnJ6gnpubm5ubm5yampuamZudnJqZmJeYmJiYmp2foKCgoJ+hoaGgoJ+en5+fnp6foaKhoJ+enp+enJqam5ubmpqZlpaXmZmYmJiWlJOUlJWVk5OVlZSVlpWVlZSYmZuamZaWl5WWmJiWl5OUlJGRk4yRkJOWfXhqYWJiXFA8QDw2OENWSERCOjg7Oj47Nzc5Nj06OTk2NDc6Ozw9OTo6Oz87PT08QD47Oz46PT89PkBBP0A8NztBQ0U/P0REPj9EREM+Qj07PDs6Z5aTk5OTk5OTlJSVlpeWl5aWl5mbm5ybm5uamaOjoqCfnpuamJeYl5eXmJmYmZybm5qkgGpqb3lzcZegnp2dnJydnp6enp+enp2cnJydnp2bnJuampqam5ubmZiYmpqamZmZmJqdm5ydnZ2dnJ2cnZ2cm5qdn5ucnJubnJubnZ2dnJydnp2enZydnZ2cnJ2dm5uenp6dnZybnpubnJycnJydnJubmpmbmpmYmZmYmpmZmpyfn5+jpaKfoaKioaGfnqCgn5+fnqCioaGhn5+fn52ZmpudnZqZmJWWl5aVlZaTkpOUk5STkJCSk5GUkY+OkJGOlZabmJWYlJmXlJiRjJCPk5yTkoyFjIeDhndxZ2pkW1xRQT44NkJHYEJFR0A+Ozw7Ojg4NjU8ODo4MzQ6Njk9PTk5Ojs9Ozw6PD48Oj5AOj5APjw/QD8+PDg6Q0FEPz5CRD8+Q0VCPUJAPDw8OmeYk5KSk5OSk5SVlJWXl5aWlZaXmZmZmpqampqkoqCfn52bmpmYmJiXl5iZmJmcnZ2cqH1nZXN7enOJop+enp2dnp6enZ2enZ6enp2dnZ6cm5ybmpubm5ucm5iYmJmZmJiZmZmbnZycnZ6enp6enp6dnZybm52bnJybnJ2dnZ2dnJ2dnp+fn52cnZ2dm5qbnJmZnJ2dnZ2dm5uanJ2dnJycnp2dnZybmZeVlZeXmJqam5ubnZ6foqOhoKGhnJucm5ubnZqcmZycn6CfnZiZmZmUkpKUl5SPj4+OkYyNiYuQi4mLjpGRj4mQmJiQkoyNi5KQj5iYoqiqpqWlrKOmoZqep6eyqKKVo6Cfl39wcWlsXFtcTUY8NzdHR1g+SE5URjk+Ojg5ODc1PTk4NzMzOTY6Pjw6Nzo8Ozo6Ojo8PDs/PjtAQD47PT5BPDw2N0A+QkA+QUY+PEFEQT1DQj49PDlmmJSTk5OTkpOUlZOVl5iYmJaXl5iZmZqampqaoqGfnp2cm5mYmJiYmJiYmZmZm5ybnKx/am16f3lxh6Genp2cnZ6enp6enp6dnp2dnZ6enJubnJubm5ubm5uZmJiYmJiYmJmZnJ2dnJyenp6enp+fnp6dnp6dnJydnJ2dnZ6fnZ2fn56goJ+enZ2dnZybnJ2em5qbm52enZ6dm5ubnJ2cnp2cnZqYl5SRjo+QkJGVmJSWlJiZmpudmJuYlY2Mjo6TkpKRj4mQjpGRjo+Ki42NjYiIi4+Lg42NkY+MkI2Qk5WVnJihoJySn6SipKmam5eanKOprb3Bwbq8uL26ucC8ubq3uru7tL2zwbV/bnVmZ1peWUxJRTo7TElTPFZSSUM6QTo7Ozc3NTo6OjgyNTY4Oz08OTk7Ozw5Nzo4Ojw6PT85PD8+PDw9QTs5NTg8O0A/QT9EPTxBQkA8REM9PT06YZOTkZCUlJOTk5OTlJeYlpeZmJmYmZqbmpqamp+gnp+fnJqZmpqampmYl5iZmZmZmZmphXB1e4B3b4mhnp6enp6fn56en56fn56dnp6fnp2dnJ2cm5ubm5ubmpiYmJiZmZiam52cnJ2dnp2dnp6goJ+enZ6hoJ6dnp2enZ6fn56en6CenZ6enJydnZ2cm5qYnJuVmJqamJiYmJmSjJCXlKCXk4+MjYqKiImMiJORh5CPjYqKkJCLjoqMi4+IiImJjpGOjYaFiYaKhoWLiI+SkJCNkJKXlpKamJ2TlJ6kpqaqq7Gsr6+rpquqsbm5tbS0rqyvtMDIxcXBvsbDxMTDurW+t7a0s7C2tb6qcHRyXGZfXV1JRj8/RUtMVklcTEQ/PUI6Qzk5Nzc7OTk3MTc5ODo+ODg6PDw7OTc5OTs9Oj4/OT5BPDs+PD46OTY5PDpBPkNBQT08QkBAPkJEPj8+OVyHhIOHi42KiYaFgYqMkZOVmJiHlZaWkpiampmenZ+gn52ampubm5ycm5iWmJmXl5ibqo56dXZ7f3mCoJ+fnp+goKCfn5+foKCfnp2dnp+enp2dnJqbm5ubm5uYmJiXl5iZm5ucnJydnp6enpybm52dnZycoaGfnZ6dnZ2dnp2dnJiWlpaYlZWSlpmWk5GKjI+PjI+NkIuLj4+WiYiEi5GZjn2Fi42PjYyHioyQm4yRj4+Lio6TjIyNjIiSi4yFiYyPhouIh42KhYyEj4qXkJOYmpWbnKOqoaKknKKrsbe0ubWxs62vsrKlp7O6sbq6vLa3tsDDw729vLa/urq8wbW4wL60r66mqa+3mm58Z1tjWl1fSEU+QUtJU1hZXkFGOTk9OUY/Pzo3Ozs7NjM6Nzo5Pjg6Ojw9OTk4Ozk7PDo+PTtAQDs8QjxAOjg0Nzw7Qj9BQj4+O0NEREBDQz0+PjlhmZWLkYWNj5aSiHl9e3+Fi4OKgoqJhmuAeJCLlpqRnZ2UlJGTlpeampiWk42Sk5KQm5uIdndzcX1/cpGgnZubm5yenZ2eoKGgm5uWlpucmpybnJuYmZqYmJmampqWi5CTlpmYlZiYlpucl5WSkY2SkZCUk5KXm5mYm5ePjpCLjo2Ch4uLi4qLiI2RjIeHhoqIiZGKh4yEhYqNi4qNhI+UkIyDkJOUmZWQi5OTkZWRlpWOj5GMlI2Oj4qIj4ePhoeJiYmNiomJioWNh46JmJKUmpuXmKChp6Cko5qqqbO2sbWwqKmiqK6tn6qvsK21ubi8wr/BxLixtbCutrOwuL68ury+urOzp7G3wpB1gGNiXlpXUk1IRkVQSVlXX1tDUDpCQz1HRj84Nzo6NzU1OTc8OTw5ODo9Pjo6Nzs7Pjs7PTs9P0E7Pz48Pzo4NDM3OkFBQEI+PjpDREM/QUM7PT45Z6mloqKZn6CippeUiI2CiIJ1h4iKiIp7e3Z7enmPeoiSfn18en6CkYWBgH1zfH99fISHfnRweHZzfHaBj4iIiYeIioyMkZicl4iOhIuNi4iNkI+Pi5GPi4yPj5CQjouFhYeLjIyHiIuOi4eMhYaBjYuGiop/iYqGiJiRiIOIg4KFfIuLjIaJi4iKkIyIi42PjI+Wh4mLio6NjY2Wk5OdnJyalpycm56bmpuYnZeTkZWWkJKRi4+LlpSMjYqDi4SEiYyQkIqOio2LipGJjZOTk5SVk5KcmZ6Xn6CfpaKvsamupKSfmKStpqa4t6ysu729wsPAv7+vpa2wsLS3uLO0uLa0ta6stK+4tLaBeXpjZmBeVlBRQUVMT0lcXl9UR0dCS0xCREA9ODg7OTU3Nzk3Ozc9PDk9Pj05Ozg6O0A8Oj06PkJBOD88Oj84NjQyOTtCQD9CPj04QEI/PkBEO0A+N2CloJqXnaGaoaCPl5efl5WCjaCfo6GdmpKOjIxycXBvdnFucG1ucHZub29waHBxcHR+c3FycXd7cnl2d3Jyd3Z6e3l8fXt/iIGEi3+PkYaNi4uGiouLiYaEgYaCgIKJkYOAg4x/ho+LiYWAh32AgZKQhoSEho2DhIyPj4+IjY+Hi4iRkJWRjpCKk5eOj5WYp6SfnZWYlpaln5udq6aqt7W4srGnr6qnpqGfmp2WkpWVkYqPjImTjZuVjYuLhoaJjJWQkJCLmZKVlZSbkJiTlIyNkYyWl5WilZ6mqauno6OqsJucpp+mq6G0vb6zs7+5u7u6uby9rqiusa6wuLyztLGxqrCpqLGxsqild3J0X2hhYFRWUUlKSFZNXl5eVExKRVFKRUdDPTo5OTc0ODY4Mzg4PTo9PD47OTs4Ojs/PDw+OT9DPzg7Ojg8Nzc2Mzc5RT4/Qz89N0BAQT0/RDw+PThUj4yGh4eUjJWZl5yWmZaNlZyWlZydoKCdmpiWeHFubXJ4cXFsbnJwa3FvcG1yc3t1dnd5fnVxeHZ0d3tybn98gX15eH1/eYOGg4WCg5CLkIuLi42Pi4mJhYKBfX9zfYiAfpyQhIWFiYuPinp9fYaOjYqGjZSRi5CXj5SXkpihlp6XlZunpp+goKawq6GjpbW0sqqmqq+isba5vcK7ucO+vLi9uLWxrLCspZuSk5mfm5SPk5WOmp2doJqfn5edo6qsoZ+em62hp6qwqaampJiRkZWUo6SirKSss7Szs6i3tru4sLKvra2yt7a6srW6s7e5u7i8urayr6yxsbKztLOxsa2us7Gzs6yhl3Zxc19jXlJRVE1PSUdYT1pcZFROR1VPRURKRD44Ojg3NTg4ODU5Nzo6PTw/Ojg8ODk5PTs9PTpCPj84Ozo5Ojk4NjI1N0I+P0RAQDY+P0I/PEM8PT46Tn98go6MjJOTl5eaj5SWjZaRkZSXk5qanqGdnHJvcnFxcXFxcG5zcW91dHJxdneAdXd8eYV+d3t8eX1/fICJiYmDfXp/h4GIiYGAgIGGiIGGi4aIhYSIiImEf4J/enx8fX6SkH+IeIGFi4qDhIWKj4yNkZmdlJSUoJqan6Ktsa2ppKWtr6ysrLWuvrmtrqm1sLexq7G2rK+9wsLAvrq8trKutraxtK66u7OurKepp6unoqmtoKmooq+wuLSxvLq6urK0ta+8tLezt7e7t7mtrbCprLW5sbeytLe2sLu7vLu6ury1vLi0wbWsqqqrtLG3uLm1trSzsKymrrCqq7Cxq6yusLKxtK6qo5N4dnJlZ1tMUlBGTUhTV1JlXmdUUExcUUhMUkNBOTk3OTU4ODY2Ozc5Ojs6Pjk4Ozo6Ojw8Pj08RD45Njs7ODg+OTUxNTZCRkREP0A3Pj5DPjpBP0BAO0t/gomXmJSdlpabmIuSlo6XkZGVl5SZl5+bmZx8dHV2dXl1c3RudnJzdHV2d319gX56gXyDfoJ/fYB/hIKFj52RiYF/go+Xjo6HgoCBiIuFfoqQi3+HjYyLioeSioeGjZGTkZGEh319g4iMjouOiomQj46PlJSYkZWbmp2dqK6yr6+1tLOtsrW4sLy1tbGqsKqztbS7t7SztrS1r7i4t62noqassLCvtre3vrW5vLOysa61u7C0r6+yu7axuMC9tLS0s7izvLq2tLrAvbm6ubq+ubm5vrWysa+yr6q1tLGzsbSzrri4tb+vpKaoo6ussa+zrq6wsKytq6qroqKmqKKnrauqpaynoqeYeHlxZmVZT09NSVJNV0xPX15cTlVUYlFEVE07Pzk8ODk1Nzc1Nzk1Ojo6OTs4Ojw8Oj08Pj4/P0I9ODY6Ojk6QDs1MjY2QUZDQz4/Nz49Q0I5P0I/PjtLjpGTmJmVmZGTopiTkpKLk4uOkI+Vl5ablZSbhoJ9enh2dHRzdH53end2gIKDhouMhISFioaQiYeRk5aRjZaalY+IjI+emJaVkpCTl5qamJCdoJ2Tl5qgmZ2bo6CVkJugpKOak42IiIuJkZGOkY6LmJqPj4yUmpecnJufnKSstLm6vK+2tLi0tLK3uLmzq6+qqKy1srK1rrGrrqa3s7OxpaGotbCvrayrtbqyu7q6tLK3ur67ubG4sLmtqLK4u66ttLS3tbu2trm5vLe0r7G0t7a5s7e1pq2pq6ior6yprq2up6KxtLG0q6aop6Cjq66oqq6orLKwr6+pqKGeoaGjpqOgopqlo56ol3J3bmdiVUtUT09KQ1BLX2JYWlFcU19NSFFJQUA5Ojg2Njc3NTg5NDs5Ozk8Nzs+Ojg8PD0/QkBBPTs2OTk5Oj87NjM3OD5GQkJAQjk+PUBDPkBGQj44R5OWkZWTkpSQkZ+ZnZmVkI+Sko6Mk5aWko6RlZGSkIaBeXJzdXuBhI6HhZGTkpicnJiVkJWYo5yaoaeqqZ+clpeVnaKioZyZnpmlqKyvramnqqmop6GlqKirqamvoZufoaOjoJqfoJyUjZiUmKCgoaSem5qkp6Spq66spaOoq6+xtK6qrK6zr6ystLO0ua6urayqrLKwsK2wqKqmsrS0uK6qtrqwr6qurLC3s7i0t7W0u7y4tbWxtauyrKiys7uvrbGytLa1sbG0s7OvrKuvs7a0sayutKqqpqWnrauoqKupqqifqbOwqqeppaOio7CtqaatpairrayppaSioKWipaOYmZyVnqKippdudWVnZFZPWEtLSktTVHBiWWRXX1tcUlpQTEM8ODk6Njk4NzQ3NzQ4Ojw6PDg6PTk3PDw7PkM/QT47OTo5Ojs+PTg0NThBREVEQkM5PjtAPkI/R0Q+N0KSm5SVlZaVj46Wl5qZlZGKk5SSjo+SkYqKiY2Ul5qTjYmCho6VkZSfmpuin5+jnqGhn5ijpKelpaapqa2rqaKmpKilpKGfnqOjra2srairrq6qqqukoaKlqaenqaijopybm6SgpaijoJidmZ+hoqmnoKKirqyrqqetrqilpKmpqammo6iqqaekp66wr7Ovq7Crqq+yr7Czua+rqLCxrrCyubO0r62vtbCss7GurLW1tLSzs7CvrKyqrKusr7G0s7CwrrCwsKyqrauqq6alrrCysKumqbCvqaOkqaunqKaopquwq6mvqaaoqaalo6iwraqpqKKpo6WnpKGhoKKloZ2el5aYlJugpKmUbnNeamlfVVpOUk5QT1JkXGRjW11ZXFBZT0tAPDs5Ojc6ODczNTMzODo9OTo4OTo5Oj08PEBEPkA9OTo8PDw+Oz45NTo8QkFFQUNBOT47P0BEQENCQDdAkZ6YlJeZlpGHi5SSl5GIg4mLk4+OkI2Hh4SFlZmWmJeZlpqeop2anKKkoaCdn5qfoKGgpqGgoKCjo6KlqKmrramqpqOmpaCloKaopqWnqKapqKOnppmcpKWioaChoaCcmJmfoKGkpKKenpagm5qioqChn6CiqKCcn6GloaCmo6KfpKGspp6foaGkrKqnrKivq6e0sa6ur7WyrKqwq6mtrbWwrq6srreup6yqpKivsq+sq7Kvqqqpq6utqa6urrGxraqtqaunp6uoqauinaapqKilqKisqKilpKWop6iopqmsr6+oq6mhoqKlo6Opq6ymqKWjqKKhoKSdnZ+hoZ2bnZ+amZWcnKOqlG9zZm5yZF1dUFVPV09eZGRsZ2JiWlpSVE9NQTo9Ojo4Ozk1MTYzMjg4Ozk5OTk7OTk8Oz0/Qz5APTk7Ojs8QD0+PDk5PEFBRUFGQTo9Oz9BQUJBRUI4PYqWlJOYmpaPiISNjpGSjIiIiI+JiZCRjoqKiJubmZygpaKlnqKjoZqeoZyanZ6bnKOop6ugoKOYoJ2XnKGjo6WjoqKkrKilqaCepqmnq6mkn6Kgoqahpq2mpp2fn5+fn5manJyhoKGkn6GbnZqcoJ6hn56eoKOZlpqYo6KipJ+ZnKGhoqCbmp6goaSgnaejqrGorqusqaSqqquorKalrKqws6+rq6mwq6appaWoq6ynpqevq6Wnq6upq6irqqqrrailqKOmpaesqayoopykoaOmo6qpqKano6SnqKanqKepqKupoaKoo5yepqWjqKino6WlpqmgpJ6inpeYnZ+doqKlnpiUlZ6go5d1d2t2d2FfXFVZUVVWW2Necl9oX2NTUVlUSD48PTg7OTo4NTM3MzM0Nzo4OT05Ozo5PDxBQEM9PT44Ozw9PEA/Qz86ODo+P0NAREE6Oz48QD9DQ0VDOTyCmJmenZ2alZKKiZGRl5GQh4SJgoGNj4+Sj42cnZ+hpKmlqaeorK2moqKfmKSmo6Stsa6yp6asm56em5qjp6Cfo5+foq+rqqyoqKuwqaipqKGfoKeprbCyr6yjoqahqaWepKOipqClpKKlo56doJ6fpaKinp+imJWemp6fpKGblZigoZ2enJudnZuZmZWen6Oonp2iqKGaoaOmoqSoqaqoq7CxqKWlp6eopKWpqaqnoqWmqKadnqWloqClpaOlpqCjpaOjpaelqamqpKekpqKmp6SrqaenpKGlqKynpqWlo6OopJWdo5+bnaCjqaeopqGjo6mooKiioJyVkZqfoKGmopuXkpCamqCVfHdvfXlmW1tgX1pcVlxoZG9jbmloYl5QUEA/Ozo4OTg8OzYzNDMzMzc5OTs8OTs7OT49QkBAPTs9ODw9QD08PENBPjo4PT9EP0M+Ojk/PEI/P0FEQjk6gJ6kp6Kem5+gmY+ZnaCWloqGj4iEi4qTl5SRo6Wnqq6trLOys7S4t62pqqevtLKxqq6usbKusa2lq7OssbGpq6+rq6y2sLSwq7GysaOfoqqpp663trS0trOvrKuuq7awqbKxra6npp6io6ObnZyXoqiloZ+eo5ueoZqWnaScm5aZoqefoJ+joJuUlpmWl5qfoJmVnqKZmJ2dpZ2gpKeqqaiqraylqaSlqaeqqaqsp6SkpKOimZmhnpqaoaCfpaWYnqSmpKqooqelpaGqp6mnp6ejqKWmpaGkqKesoqekoaalpaOVl52Ym5mVo6elpaSfnZ2lo6Kqo5+amZiXnJyaoaGakJOTl5ibjX93cnZ4aWJbX15cYllgZG5ta25hX2RgUE9BQDs7OTs4Ojk2MTQzNjQ3Nzc6PTo8Ozk9PUI/Pj89PDo/OTo7PD5BRUA9OTtAQT5DPDs5PzlAQEBAQkM7OXuao6OcoJ2dop2Zn6KioJibmJaYkpSQm5qWl7S0rrW4s7S4tre0uLm3tbm4ub28uKqLnLK4vLS9urW7uru4s7q/uLe5u7G3r6iusq2inJ+qsri8vL27ur+0r7GztbS3t6+1tLWysKikop+gl5Wal6SqpqahpKOkq6WlmKGko52goaKooaOgpaGck5mYmJmco56cmpudl5uZlqWam5+hqKmpqKuvr66pqKmrrKytq6irp6WjoJyfo6Ojn6Cipammmpyip6Spn6GjoqKgpaanpqSooJ+ipKGjoqiop6OloKGopqalo5mbmJuTj6GknqKfmJiVoJuhpaCfm5udnJuamZugmo2YmZiTkYaAdnh5eGNbUllUX19hbGh1a3BnaWliWVNMQDw6Ozg5Nzk3NTU2Mjg1Njc3Ojw7Ozs7QD4/QD0+Pjk6PDk2Nz47QkZCPDg7P0NDRDw+OT43PkFCP0ZDOzhwkpqblJ6bm52Vl52doqajopaXnpaXl6GblJi+t7G4uba3t7i7l5S2vbu9vcDFtaK7mKC3v7+6wcm0nbu2sra/xcGooLazurGqrrSxsLG0tLa8vL68vL3Guri3ur20r7Wxsbq4t7Kzsqqmpp+YpKSnqKSupKurtbWus6CnqqynqqmlpqCnoKGmoZOWmJ2foqSjnZ6coaChnZekmpmdoKaqqqqtrq2tsLGrrK2sqamrrqimpaalpqSkpqaeo6eppKGcoKKjpqCio5+jpJ2foqWgpJyboZ6fo6GhpaSlqaOkpaKkp6ehn52elpOcoJiZko+MjJeWn5uWnJqdnJqTlpSUmJOQmp2YiouHgIB8gnhhXllTYWhgZnNvc2lzY2lkYltMSz46ODg5ODg5NzM0NTI1NDY2OTw8Oz08P0E/QEA9Pj44OTs4Njc/OUJFQzw7PD5DREM9QDs9Nz1DQ0BFQjw3Z4yRk4qalZiblZWYm6Knq6aVl5iQlZmhnpeXvrWztLu6ubi5woeYt6u4u8DCxbOjw6e4s72/tMTHvbS7uL62wMTErqCworW2tb2+wcPGw8O5vb/AwL2/xL28ur2+tKeqmLHAvbi1ucCzr6+qqqitp6ekr6eqtLyxtLWor7Gwr6yqoqajrJ+fpquXmqifpaWfoJydoKuwsKyiq5yYm6Cor7Kys6uorre1sq2tqaalqKulpaStqaShn6Cnnp6mqKmmnp+anqGlpqmcnaObl6KmmpuanZ+cmqGcmZ2eoKijn6GfnaWioKOioZSZmpmTj4qLhI2Qk5uPjpiVm5eYkJORkomNl5iYk4uKi32AgIVwYGFeXmpiYm53dXZubVtiUVVcTUc7PDk3OTc5Ojc0NDQxNDM3Njg8Ozs8PEBAPUA/Pj8+Ojo5Ojc6Pz5FRUU8PT1AQkJCQUI7PDhAQ0NARD87NV+MjIaFlouUlZeYl5ifpqellpWWkZebn5ual7mxtrO5vLy5urWqsryxvsG0vMe5uLuuv6fGw7/KxsnIxcXJvMLHx7+xsae8vL7FxMbJx8XGu8TAxcbAua+9vMC+vrOrqoyzu760tbfCuq2vsLWqq6aqo62kp7G2q7WyrbOtqK6vp6awr7Ktqq+zpKu1qaeopKCgnqmyuL61tbWqqaausre4t7apq7i8ubexr66noqOop6SfqKOfnqCZoZydoqSnp6GelJuaoKGlnqChnpajnZSQlpiboZqflpORlpSin5qenJudoZ6kn56VnJiPkpOPjImTkJefiZCWkZuUmJGRlZaDjJWXlpKLjIh8f4N/amZoYWtsZm51cXJ1cWZeX1xSSUU/Ojo6Nzg0ODw3NjU0MjMzNjU3PDo7PDs9QD4/QD48PTk5OTs6PDw+QkRFPj49QENDQkREOzo4QUJCQUNAOTJbk4iEjZGKi5GRlZCSmp2fnJOSmJSdnZqXmpW2sbm1tb6+tri1uLO8vMTEusPHwb+0s8XFxr/CzcfLzsvLx8HDxsfIysXExcO7vLzBxcHFxb/DwsbFwLGTvrq/w8K2trqptLO0qauzu7uxn5uxr6ykrK60p6qpqKqtrKmlpZ6pr6uyu7q4u7e5t7O5uLOurLO0qrC1ub3Bur6+vL60urm4u7qysbS8u7q7s7Oyp6Smq6uioaCdmpudmpyXmpuenJygnZaclpuZnZ6io52UnJCNiY6OkZ6bnJWNh5KLmJiWmpybmJybnp6cmp6UjpiYmpSRmZeeoZWYmpKXlJWRlJqYk4+TnZaSi5F+enx/dGtrbmRvbGhxeG95aWlhXGdhUUZEQTw5OTc2NDQ6ODQ2NTMzMjY1Nj05OTs7PT47Pj49Oz05OTs7Oz89QUNBQkFAPEBDQ0NFQjs4OUQ/P0BCPzsyV5uQkZCQh4WSjo2IjZCTlZGPjZSUm5STlpqRs7e4uLi+u7C1sri2tbbAw8G+w8LAvru+u7u8xMzEzNDLxsa/xcfLyNTLysjGv7u7vsS+xcjGxsTEw7i0wLe0vMHCucK3t7/Au66lrre8t62co7ewpq20tayupaWjqKSgoKWZqrOyvsG+urm6uLW0srG0tLO6wL7Av769u7u9vsDCt7a3tru7sru+ubi3u7a3tKyoqamrpqijnpOampyYkZKZl5GRmJqXnpiWk5acm5+elJOJiX6GiIuWlJiZkYmVkZeWlZmbmpaYl5idnpyhmJWZmZyYl5ybn56jnJ6WmJeTl5yZmZyUlp2UlpOJdnl6e3Zua2hndVpmcndzeGZmXWRbUlhJRj87Nzg4NzYxNjk3NDQzMzM2NDY7ODo8Oz08OD0+PDo7PDs9Ozs+PkRBQURCQEBBQkNDREM9OTlCQD8/QD89MkyWmpaSk4yKmJCKi4yOkpKKiIaNkJiKj5CUl7O7tba/vb2xtrjBvby0uL/Bsbi3vsHFvbu8wsbJv8jOyMHEwcfKysbKxczIzcbIxb/DwMvNz8nGw8PEwsS+uL7Bw8DEvsHPz87Gq6+2tLWroKe0s66ruLWzq6mjoq2prKatn6y1tL/Cvrm4vbawrausr7W0ur7Fv7u8urO5u7i5ubWtsLS9u7G/vLiytrmzubu0ra2orKyqqaeXnpualY2MmJSTi5WWlJyZl5WWmZKYn5mQiop+iYqKkY6Vl5OUn5mWkJSZmJmWmJOUm6GeoZiYmp2ZmZaenpibopqdnJuYmpuZlpeXlpyZlJyYfoB4eXV1ZWVpamhdam9teHdiYmBgXlhXRkU4Ojg6OTc5NDQ5NzY2NTEyMzM0Ozo9Pzs9PTo6PTs8Pjo7Pz48QkBDQkJFQj0/Q0NDQ0RFQDk6QkFBQj5CQTVCkJeUlZmSj5qQjpKRjZSVi4qHjI2UiImPkpq2u7S8xsHEwr3BxcLAtLO9v6ywr7rDysPCvs3IxbfByMW/wcLIy8rCwsTJzM3Pz8zDx8bIyMjHycfFycfIx7/Fx8TEx8jK0s/SzLy4trS4uMG+vrq9ury6vKytpqm7urm3wLK1uLLAxrq3t8Gzsa2tqau1s7u2w7a2vbWxt762s7e4sLW2v7uwvbq0q7CxsbO8urOzrqutq62xnaOjoJqQjpiXlZCclpaYlpWSnJmTm5+clpGUjpWQiYyQlZOUm56YmZKSnJedlJmSk5aZmJ2VnJ6do5yVnZ+TnKKcnKCfnaOemJSVl5ebmpmgkH99cXRxb2JhZ3VnaWh0bXhsXWRbVWBZTEhDNjw5OTg4OjUzOjY2NDQxMzUyNTs6PD47Ozw9PDs8PTw7PD49P0E/RUFCQ0M+QEFARUVERUE7Nz5DQkI+Q0I4O4+akZaalJKUjZCUlI6VlI6Pi4yJk4uIkJObt8C6xsXEw8zCwcS9vrWvt7uvr7O6wMfFxMHMy8W2ucDCwsTHytHLwsPExcnFzdDOx8zJwsHGwcvLx8bMyc3FxsbDxsXJzdDNz8zHxMDDwsnNx8XBxMfBu760sbCwwb6/wca/vri3w8K6urbAvrWyrKmvsri+tMC0tLi0t7nEua+8vrm+v8K/tbq2q6qsrq+wt768trSura2utaSlqKimmpycnZyeopydmZOQkp2VmKCdmJiVmZmZl46MlH2QkJefmZmYk5GToI6Nko+VjpCUlaKdnKSem56elpyjoKGipKOkop6amZubnJ2enIN9cnx4cGdgamp2bGlkdG5zYlxiVFdUU01HOjc7OTk3Nzo3NDg3ODQ1MjM0MjU7Ojk+Oj08Pz04Oz05OTk9PEBBQEVCQUJBQT9AP0RFREVAPDo+QkNCQENBOjSAoZeUmZiVkImUk5aTiZGMlJGOiJaKi5CXnMXLw8O8wMPHwbm9vbu4tre3rrK3uLzAwsDCx8bHurzAwsXHyMbSycHDw7+/vsTLyMrLyLy7yMfJzcjDyMnJxsXDwsHCx8fJysfMyMfIzcbLz8W3wMDAwLu7vbWzs7+/ub/DucC3u8G8uri7ub27srCvsKy5wri9ube1t7q9xb24xsjCwcLGwr28tamurrCwr7O6t7m2sK+tr7OppquprqannqSlo6OjoqCblZiekZecl5GRlZeZlZmRlJiSlYyYo5qcnp2FiZ+TfJKWlZKUlJennaCipJ+en56foaGkoqKjoaOinJ2fnqOhppl5enl/cm9mZWdjamRham1ubl5YXFZVTlBKRjk5Ozk3Njc3NjM3ODk1NjEzNTI3PDs8QDs/PDw6ODo8OTk4Pj1APz9GP0JBQz89QT5ARENDQTw5PENBQ0RBQDozbKKdlZedlo+PmJiZmIiSjZGVkI+Vjo6TlpbKy7u5urnBu7q3vsG8vLu5sa61uri4u8S6vsC+vru8wMXBxsK+xsG5u8O6uLm8vsHGwca6ucnJw8XEwMTBwsHEwcO+vcLAwMHCy8PGzMvFyNHCsL69uLq7vL63tLC5vrO8vrG5tbi7tryztbm2uba5t7GtusG6vMG/t77Ev8bDw8fHwrvAwr/Cv7iys7O1tLGut7S3tbSxrK2xp6Wlp7CtqJ+nq6ajqKWmpqCgn5SYmZSRkZWUl5OYl5qhnZ6hnKGdoaWglpSbkZeXmJqTnpmZqaSlpKWdoqCanqCkoqOcoqGjoJ6cnp6ppaiVfXuDeG5mYWRiYWJjY2piZmNaWVlcWVFORT07OTo7Nzc5OTY0OTk6NTMxNDUyNzo7OkA9Pzw8OTc3Ozo5Ojw+QD8+RDxCQURAPz49QkRCQkI+OjlCP0FCPT44NVmfnJiTmZaRlZiYmpeQkZCQk5GTlJKSkpSUxce4tbq5wrm5vMPFwri7ubGxtry6tbnAu7u5tre0tLW/ur3Aub26urS/uLW3s6+7vLfAt73Cv8G7v8G8u8W+u8HEwL6+uLzBwcu+vcnEwMDKwLHBv7u4u765tbe0uLy0vbi1tLCzvLG3tri/tr25vb65t7q+u7/Axb29y8PGw8TAw762ubq2v7i7v7y4trOyq7CwsrWzs66sq6emnqeurauiqKumpqqjp6iqo5+Ym52bmpicnJiXnJuhpZ2anqGhoKGmoJqbnJiboJ+dnJ+coKiho6SknaKfmqKgop+el6Shop+dmpieqKWhi3x5h31xY2BiYmdqZmZpZWldVlVTWU9TS0U4PzY7Ojc3OTs2NTo7PDYzMTM0MTc7OTg/PT47PDs3Njk5ODo7PUA/PkA9PT9CPjxAQUNDQT9DPTo2PEBBQDw9ODdJlJibj5OUkZWYlZGWkpWRkJGUlZSTkpKYlcHCwLq8ub62uL7EwMKxvbqytLO4vLW3vMC8vbS0sbC1t7W6wbi+uL+8vbe1t7CuuLa5v7vAv7fBvLvDtrrIuLa5u725ura7xcXKvbnFwL+8wb64xr3BwLzFuLa3tLi2tru7uLa0t7q1tLi8vbm/ucPAwLu5vLu+vcjEvcfEw7rAvb62sra4srm0usLCureysaysq62yr7Kur6ijpJ6rrKyqpKakpKiqoqemraihoaGmn6Oiop6bnKKfoKOdnJuhn6KgpKCem5eZn6GdnZ6eoaWkoaKioZ6ho5yinqCZnZijn52eoJqZoKKmnYR6g4B4cG1lZWZvaWVrZ1hYTktLS1JJTEhDOT44PTs2Ojs5Njc8ODk4NjA0MzE3OTk7Pz0+Ojw6ODg5PDg6Ozs7PD1BPj09Q0E8P0NDREA/Pzw6Nz5CREE/QDg4P4mYmoyMkI+Tl5WMkpCakpGXmJaUlJKQmpTDvsbBwby8uLi6v7a8scK2tLyxtLa4s7q9v728sq2vrLGwt7y2u7zAxLm3t7e1urm6u8C9w8C6xMK+x7i5uK23tbi6tLezu8XGy8G7xsDAv728v8nDxMW+xri1srK9uLi4vrq6uby6urS3u7q5v7zEwL+5uri/ubvFxr3Fw8Kyur27sa+2uLO3s7q+wLm2rLGrrqmqqa2qqq6mpKWnrq2ppaOio6GkpaWmoqato6Klo5+ho6Gcmpyhn6CloaCenZygnaWgnpeVmZ2fn52gn6KmpaCknpybn6Ofn5mcmZ2epJyWnKOcnqGcppZ+f4Z8a25wZ3Brc2VibV9cVEhLSkRKQkNHPzk7OD08Nzs7OTc4Ozc8PDYyNzUxNjk8PD08QTs8Ojs6OT45Ojs9PUA+RD89PkRAPz9BRkQ/Pzw9OTc/QUNCQEI5Ojl3nJiLh4uQkpOWjY+TmpOQnZiSkY6QjpiSvbfHvsO+vbu+vL22uri9ure9s7OwuLi1uby8wLeqraSusLe7s72/u8S3tri2t7+/xLzCxcXHx8rJxs/CwbiutbW8vri7sr7ExMrFwcnDwr+/vr3HzMfHxMe9tbW2wb26u7/CusDCv7y2t729vcHBwL+8ube8wru3v8W7wr++tbe8vK+vt7awtLO6ubq7r6mtq62rrKaqoqeuqKWqra2vp6Sgn6ajnqKjqKOjq6Oiop6dm5ublJaZnJyfpZ6fnpmYnpejoJyXmZqZmqOjop6jo6egpqCbnaCjnp2WoJmcoKCblJegn6WcmKKQgYaBcWVsaW50bndjZ2FcY1FLVEhFRUNHQzw7OTg9Ojc6PTo4OTs3PD01MzY1MDY4OTo8O0A9PDo+PDk+OTk9Pjs/PkM8Pz5APz0/P0ZEQEE/Pjo3P0BDQz9BPTo4ZqGYj4uNlZKVlY6PlpmVl5uVjoyMjY+bk7m2wbS/vLm8w8C+wLq1trKywLmvsry8sLe7tru8q6qjsLm9vrO8vrzFuLK4ub3HycrDx8jGxsnIzM7RzMrEtbrAw8i/v7W/wL/Gxr/LxsO/wbzAw8zKx8XGwbm9vMS/wL/CyL3Hx8XFvLrEv7vBv7rAvLu7wMS9t7nCub69t7S2uLqur7WxsLCytre0t6yurKqsrKuoq6Gms6qlra+trKippaOkp5+io6Onoaeiop6cnZyamYyQlpeZnaKZnpuVkp2UoaCdmZ6fmJimpqKfoqKmoqeloqCko6GbnaCbnKKfl5WVnp6kmpafiYGDgXRvbGx0a2xuX2JeYGFOSE0/RUA/REM7Ozo6Ozo4Ozw6OTw+OTo+NDQ1NTE5OTo5PDtAPD89PTw4PDs6PDs7Pz5DPkI+QD89Pz9FRUJBQj87Nj9CRUQ9QUE6OlmfmJOSlZqVmpOQlpeclZuZlpSVkZKTnZm2uLaxuru6vsG5uca7trWypb69tLbBv66zvbS4wbGwsbS8w7y6ur68xL+3vb+9x8zGx8nGxr/ExMrIzMzNy8bCw8vOwry5vbq5wMO/yMbEwcG/xcDKycPDw8O5w769ub+8wsbCyc7Hxr66xr26v7m3wLm5vsDCvrW0vLi2u7CvsrK1r7Cvrqyus7CzsrirsbKxqrCrq6yrrLatqKyusqarrKmpoaWgpaakrKSmoaChnqGgnaCMlJeTm5+mmZ6emZOYnZ+gnp2eopuYp62ooqSgoKKqpqmhqKGlm6CgnZ2jn5SYmKKdp6Gfm4J7eod6bW13e19wY1tdX15TST5DRUlCQz5DOz42OTo7Ozs7Ozs7PT05PTU2NjIxODo5Ozs6QTs/PDw+Nzs8Ozw9PTw9Pz5BQUE+PkFCQUVDQkRAPDY+Q0RFPkJEPztTmZuZmJ6dmqCalpyZn5KdlZ2boJWWlJqYur20sLu8wcTCv8XGura5sqO7vbS3xLuwtbq2ucS4tLy2ur3BvLu/tr/Bv7y/usDLwsfIwL+8vL/FwsfLyMHDwMDJysLAu7uwtLu9wMXGxcW/wMK/y8fCwMjAusK7urO6usG+wMrOysS9tby8ub+5ubW1s7/Avre0s7S4rbeqr7CwsrGvq6+nr7ausrG5rra2uLSzsLGttrS6sa6srranrLKsraSjoaenqLKrqqWkp6elpaCml5ujn6SmraKeo6KanaWiop+foaWenrC0sKSlnp+kqaevp6mgq6CiopqipJ2anqGmp6+psZWCe32Cem1zeHNncF1aXlxZUUVEQ01JQUQ9Rzo6NTk7Ojw8Ojs7Oz0/Oj01NDUxMjc4ODs8O0I8Pz46OzY6PTo7Pj0/QD87QUFBPj4/QkBBQkJFPjo1OkFCST9AQkA7TJqdnZ6fnZienZmampySoJWbnp+blZGRlsW+urbDvMbCvr/Ixbe1uLe2ubu0r7e2srWzt7m8u7a7u726w7u3vbe5wLu6uLi1xcHDw7u5s7S6wb2/x8C5wLy+xcS9vrmysK64t7/Dx8PEvb2/v8PDvr/HvLy/tLSutbW8vr/OzcvCt7K4uLi9ubuxtrLIwLu2tLGwt6yzqbCtrbO3r6uuqrG1r7Gvt7O6usC/tre2sru6wLWyrbO3rLC6r7KloqWrrK+5s7KosK+xr6qiqKGkraitrLOun6inpqWmq6Sknqaqo6ayuLOrpZyfp6anrquqpbClpaWbpKOYn6exrLW4sLKOhHl/fHZsdXpwbWhcX19ZU1BBRUhHS0BEQ0g8PTY7OTk8Ozo6Ozo9Pzw9NTU2MTM2OTg8QT5AOz1AOzs5PD04Oj08QD46Oj49Pj09PkBCQkJBRD03NDU9REc9Q0I/PEWUnqCgoJyXmpiYlZmdmZ2fmp2bnJaRj5LDwMK9wrzEvLy7xbu3s7e2tru7s6CWtayvsbS0tLa4ucHAt725uLm2tb+ztLK4sbvBwMO3t62wtbi4uMK6tLu3u77Au7u8rq+us7K5wcLEw768v7u6uLbBwrW/urWur62wvcC5z8rJw7GvtbS0vbq+ubq7ysO7uravsL2xuK+ys7C3vbaur66wt7CsrLK2vbzEwrq9t7bAv8G3tbC2srGzurGxr6err6u2v7e1qbqztbmxp6uop7ausrG1uaisrK+qr7CqqKessayytr20saykqKuoqKusq6i2qaaonqadmKOuvLG7wbSmiYF8gnpzdnZ3bXBgXmVdW1RKPD4/RkY9RkNDOTo1Ozk5Pjw8Ojo8Pj4+Pjg4MzE1Nzg5Pj9BPzs6Pz08Oz09OTs8OTs6Nzs+PT1DQT8/QUJEQkE8ODU4PUNGPUREPzw/iZ2en52Xl5WUk5aZnpubmpuYlJ2Uio6Owb7Dwr6+vrm2usCxtbGzt7fCtbOrrbOoqa61r620trnDv7e6t7a2srTAtrK0uLO6wMHDubeysrK0sre+urO1sry6vLa6vrK0tLSwuL7DxsTAvb+5s6+yvLquu7Szpquorbq+uMvCv76sq7Cvs7q3ub67wMXBu7y3sLXEtb+0uLu0u8PCs7a2sbisqaWrsr23v7+7u7exvL28trGvq6uprbOvsLCrsLSpuMC2sqm0tbC3tq2spqu7s660uMKwsbG1sbK1saywsri4ubi+tLGzrqyxramvrqqyuK6trainoZ6ptr+4ur+wlol9gHxxdHd0dnJsXmJgW11OSEE/PUhDRk1EPzc3NTs6OT48PDk4PT47PT86ODMyNTc2OD8/Qj86OD4+PTw5PDk7Ozo8Ozs6PEA+QkI9QEE/QkI/PDs3OjxBRD5CQz8+QYqgm6GdlJiVlZKYmpyWm5WalY2bj4SIhru0vb+7vLm3s7y8rLOytLS2wLXAr7Kzqqqxt62pubO3wL27vLi2uraxwLq3ubi5u8HBxMO7u7a0tLC2ura0sqy8ubi1uMG6uLOxrLe8wcfDv7m6ta6lrLOwprCtqJ6gn6WttrXCt7a0pairqLC2s7K6tbu7u7W4trC1xLK+vL+8ubrFybq9vraxp6SeoamxrrW5trKxq7S3trGopp6gmaWmpKynq6y2qa+6sa2kpq2lq7GrrKmtuLawsrjBtrGxtbGvu7ayt7W1sry1urKwsbKutLKqrq2nuLWyta2uqqiosrq9wLa0qY6Ce393b3tvdXJtY1xmWFxdUk5NQT5KQkBKSUA2NjU7Nzg+Ojs4Nz4+PDs/OjkzMjc1NzU8PD48PDg+Pjw8OTk5Ozs7Pjs7OTw+P0E9PEJAPz9CQD47Njc6QERBQ0E/QUKJoJ2loJSWmJiVnqCcl5uYmZGMmYmDhoS1r7S7u7S1sLG2uq6wtLOvtbq1urC1s7GttrqurLyyuLm3u7+9ub7AtL+7vLq4vsK8wsrHvsC4ubaytLaztK+su7q4trnAw7aurqqytry9ubaysa2tn6Snp52jpp2WmZman6muuayrq5+lqKSrrq6nr6yvsbGtsa6usLmwtLy+uLm4x8W8vLu4qaKcmJufp6assq6zqaapqq6popqXl5GcmpijnqKir6ekrKaompqemqGnp6anqa+2squ0trCqsK+xqbm2sbWxrqy3s7avrquuq7S1ra+rq7GtsbKoraurs7W3ur2wq6GLeoJ5cnZzbXVpa11aalRdXE9NSERGTEFGTUY4NjY1OjU6Pjg7OTc8PTo7PTo5MjM2Nzc3Pjs9Pjo6Pz48PDw6Ojs5Oz47PTk8Pj1CPDtAP0A/QT8+OjU1OkBFQkRBQEJBiJ+ipqGYm56dmqWpmJudmpmUjJmHhoeGrq2uuLmxsqiur7iyq7CwqrK1ubm+tbK4tLm6tbm7tbWztbu8wLu+wLS/ubm6sbrDvMLKxb+7v7+5tLSzsbGusLm5try4u7+ysrKusa65r6qrrayjqKGdnZ6XmKGVkpWXkJifqK6ko6Sgoqeio6mpoaanpaqtp6ynqKesq6yyu7SztLm6trK2ramgmpaWm52fq6yrr6Ojo6GpoJuTjo+Qk5KSmZaanaSloJ+ep5iVkpSYnqSjoaWqrK2iqaqppKmtrqW0sa6xraqprq+wraWmqqSos66trKmmpqmrpqqnq7Ksr7Oxq6mWgX+Bd3J4aHRzbmRUYGNXXFFOTEg/SFFETUM9ODg3NTo3PD46Ozw4OTw7Ozw7ODI0ODk3ODs7PDs4PD0+Oz08Ojk8Ojs9PTw6OkA9PDw7QD5CQEE/Pjk1ODs8RkFDRD9BQYijpqKjnqCfp6Coqpufm5yZmI6Xi42PjKqpqLGvsK2lp6ayr6mmq6CvsLu1vby4wMG+vLy8ua6tr7Kyurq3t7W1vLSvtKu2urjAxMG7tby9uLKts7CvrK62trK0tK+qpJ6cnJyeqKifoKipn6GnlpuXl4+dk4+Qlo6Xm6SooKCioqKlpZ2jo6CepaCkrKSmqKSio6OrrLOuqa6urqeqraisoZyamJmYm6moqquepaObo5yUkIyOj5CTkJeVlpifnp6amaaXk4+Slp2ioKWjpqSnoKKko6Ghq6uksq2qrKyno6yuraufoaKkpK+srKmmo6KqpKqqpKmrpqmsq6agiHiDfHZ/eWJ3bG5cUGhUUE5HT01MQk9RQD47PjM5OjU7OT07Ojk9OTk8Ozw8OzkzNjk5Njo7Pz06ODs6Pjw6PDs5Oz07PDw9PjxAPT88ODtAQEE/Pz45NDk8N0FDQkQ9QEOOqqSjoqGinaulpqimoZ6dmZ2PmJWTkJWnpKGmqKmlpKChp6uhnKKbp6u1sry9wMLCwL7AuLSnpayqqLWysbCur7Knpq+jr661wbq1t7K3trK0q7K0rqqrr7Cys62lnpKYlI+ZoJ+ioJykpZ+eqJSblpeMl5GNkJeTmJ2iqp+fn6Cjpaicn6ChnKKfo6innKehoKSfrKisrKCpq6agpKimrKOdnp2Zl5qrpqmwo6WnnqCclZOPj5GQmJCWlZiXn5ibmZujmZeUlZqdoJ2nqKWgo6Kho56doKmqpa6upqipoaKqrqqnoaCio6msq6eppqShqaKlqaalpKKmpKijkn18gHV1fW1re2RoVVFjTUlIR05STkpORztEQD0yPzg1OTs+Ozk5Ozg6PDs7Ozk5NDg7ODc7Oz48Ojk8Oj07Ozw9OTw8PD49PUE+QEJAPTc6P0FCQEA/ODU1PDpAQ0BEPkFGlq6koqWeo6KpqKipqqWmnp2imJiZmZWbop6bnqOioKOgoZqgmJiXlqGorK62t7q5ure3u66ooKGpoaCtq6qmqaSpo6SupaystLy3rLKxr7Gtta+vs7Wqp62so5yZlI6RlpeZmZygo6KbnaWemqSXl5eWkJKRkZOal5ugpKqeoaGepqeqop+gp5+dn6SnqZ6jpp+qnaqtqq6nqLClo6Smp6ymoaShm5ier6iusqulqqqgmpiYmJWTlpqTlZWZlpqXl5ignpycl5uhmp6ao6eln6GioqOdm6Gmp6aoraOppZ6kp6mkpaWhpaSsrKmmq6eioKSjpKenoaCgpaKmoIl7gH12eHxkeHpgYlJVX0hJSUtTVElSUEw4PkI2Nz02NTs6PDw5Ozs4Ojw9Ojs4NjU3OjY5Pj0+PDk5PTk9PTw+PTs7PDo+PTw/Pz9APT03Oj5AQEA/Pzg2NT08PkFCRkBAR6CupKaroaOqrK6tp6ypqKCipp6bm56aoJyalZmfn5uen56WlJOXk5OcnqOorq2sq6uvqq+pn5eepZ6epaakoKKfpqCirqusrbWytqavtKupqrSxsLC4raehnJ2alJibmpGOkZWRjI+OlJminJejmZqXmJmUmZiWnZufpaapoKajnqeurqumorGjmqSmpqqioaqiqaSosquxsqu5qKarp6urqaysp6Cgo7GtsbG0qbGvopmcnZ6hmJubmpiZm5SVmpaYnKWhoJqjoZqcmZ+kop6gn6KmnZulpqWkpaijp6OepqOinqaloqWlqKykpq2noJ2dn56gpaGenqWgppmBe4F8dnZzaIJsZVtTWllNUUpOTlVMUkxBNz5CNzg9NzY6PDw9Ojw5ODo7PDo7OTc2Oj01OTw7QD03ODs3PTs9PT06Ozw4Pj09QD5BPj4+ODg8P0BAPT83NTg9Pj1BQEZAQUihqqCrq6GkqquwramtqaelpaWkoKGfnqWXl5SYmZ6YnJ2blo+VmZKSnJihnaqip6Cep6Gln5ySnKKbn6Gjnp2gn6Ogoq+urK+xrLanrbGtpqawrq2ssKegn6Kgl5GUnKGcmZiSk5+doqSbnpuWn5qfl5uinqWhnqSfpKitraisqKSstLe2sKe0rKKtraOvpaSmoamorrWzsr23vrCssa6tqaq0sbCnq6iytbezt6yxtKOgnaWfq6GhoqCfmpiWlZ+bm5ikoaCeo6GgnpqcpaCfnZyhqJ+fp6meoaOkoKagnqehn5ymo5+ipaOooKmrpZ+dnZudmqainpyjnqeQgYJ/fHh1aXd1XWxaUmBIUVVIRlVWSkJNRz1KSDhFPDY3Oz49PDo8OTg6Ojs6PDk2Njo8Nzs+PT8+OTc9OT47PEA8OkA6OkA/O0A+QUA9PDk3Oj5APzo+NzU4PT0/QUBEQEJGnKueqamipamprqimqqWmp6aoqqGlpKOmkpOVmJacmpqcmpWTmZuOk56ZqJ2unqeenKGdnpqZkpmenKKioKCdop+fnp+pq6esqaq0q6utq6Wlq6iqrKqln56ZkpKUmJmWlpaMiIuOlZ2dnZ2elp6apqCgqKWxqqeuo6uttrC0srGutri9wLqttbSwt7CutKmmpKWsqbmztbvDvMPBtrq2q6+xube8r7OwtcG8t72zs7Whq6KpqLGpqqinp5qZnZqqpp+Zp6Cfn6eopaSenaqhop6bn6igpKetmZ+jnp6nnqCmnpycoqGbo6KhnZympaWkn6KZnJukn6CboJyjiYWEfnZxbWl3bWhtXFhbQlZNSkdNR0JGTTw+TD00PDk2Oj0/PDs6Ojg4PDk6Ozs8NTQ6PDg5Pj4/Pjg4Pzk8Oz0/Oz1BPTo/PjxAPj8+Pz08Njs/QT07Pzg1ODw8QERCREFCQ5WqoKapo6mqqKmjoamgpqinrK6lqaWpqpSSl5mUmpqanJiYmZyamJqqoLGit6OwpqCenZ2XmJaZnpucpJ+fnaSdmp2cpKKko6Kqr6ynqaOgoayurqqrpqCenqGjnp6em52clJOVlJ6emJSGnZqhm6ukq7KwubKysbKxur28vLm2uMO+v8K/trq6wMS5vbusrqexrbHCtrjCxsDIysDKv7C5ub25wr24s7vFw7zCu7ezqbKtqrO0r7Ouqa6jnauntrGsoq+loKOvsa2wpKSvo6GgmqGnoaSqqpmdoJmao6CmqKGcnqKemaSenpiYo6OhpZ6mmZuipJ6fm5ubnIeFgXt0cmtrdXJwZ1dcUUVUSERJT0g+RUEzRUg5NTs9Njs8Pjw8Ojo4OTw4OTs4Ojo4Ozw3Oz49Pj02OEA5Ozs9QDw9QDk3PD07Pj0+PUI+Pjc6QUA+PD45NTg9Oz1DQEFDQkGRqqGlqqelqqimn6KnnKasp7Gyq62jqayVkpWalJecoqGbnqCinJ+psqu7sr+rr6ylnqChnZyYm5+gm6Cfn5elnZWbm5+anpyepaannaCgq7Gup6Sko6CepaulnpeclJGZnZiUjIqGiIZ5bYigpKKrrLS8tsO+vrO7wcPCxcC/wsbGxcPIwsDFyM3QyMvDsre1vrK+xbu+zM3FzMvM0se+v8DCvcfGwrfDycjCwMW+ubS5urW6t7C1sqq6sa67tr67uqq3rKqquLq0u66tuKOlop6npaKjqaaZm5+Ymp2nqqegoaGkmJSjlpSakZydn6Sep5+en6KdmJmUmJSIhH16cmtkaW94amVaW0ZKTEREU0xEQkQ3Oj87NTQ5OTc4Pj87PDs7OD48Njo9OTw9OTw9Ojs9Pj4+NztBOj45PT45PT44Nzs6Ojs/Pz1CPj83OkFAPTw9ODY2PDo8QT9BQUE+kqugp66ooqulpKKipaGlqquwsq2upKmmlJWVmpaUm6SmnaGqp6KrrLy8v8PBs7K4p6Ghq6qinZ6hop6cm6CSn5+Qlp+ZkpqWnZuZo6Gvs6mhmp2dn5+al5iXkoyPlpeTjo2Qi4KDgndzcW5wj6atrrS5xbvNx8u/wszOzczHydHMzczHycXGzNDS1c7Tyb3Av8O7xsXIxdHTzNPP09PMysLFxsbKx86/yNDLxsTGxMC7w8C+vr61vbOtvr/Cw8bEx8OtvriyuLzEwcG6vLy1rqenraigoqmlmpagmpmdqKupo6SknpePm4uQmYmVmJugn6OdnZeempOTi5WPhYB5dHNlYmdyb2ZeWllDTkxDRVBJREJANTU1ODlCPTY4OkE+Ozs+PDk+PTc6PTk6PDg8PDw7Pz8+PD0+Qzw7OkA9Ojs6Ojg4ODk7QT48QD8+ODtBQTs7Pjc4Njo8PkI+Q0FAPpOvn6ivpqiro6KloKampKuoq62qrqKqo5Kcl5ebmJujrJ6frqalsarFxszOzb+wwqmlqK2tqqGdo5+cnZqpk5mhkI6gk42UkpeZpLGxq6SgnaCbmZeUk5SWkZCPjIeEg4iHg4CBgYB5cnJvbHmktrq5vsvB09LTyM3O0dPR0tHQ0dHNzs7Qxc7U1djS183Gx8nMw8XKz8rT19HX0tTV09PIzMfNzcnSzM3TzcTHycnAxsvGyMjFvsKzs8fEy8rKzsXJv72/vMHHxMzMyMm/w7+tsLOonqKqo5qTnpyYnqaprKSlppaXipWFkZSHkpKSmZualpiQm5WQjIaRi396cnV1Z2JndmlkVldRRE1GQElRQj1CPDoyM0A8RDw3OTxCPTs9Pzs7Pj05Oj48Oz44Ojk5Oj86Pj1APkA8Pjs+Ozk9PTw5Njo6Pj08PEA/Pjk6QEE6OT44Ojo6Oz4+PEE/QT6QrKKiqaanqKSfop2qqKOso6OnpqyiqZ+To5iWn56dpK6bn7CrqKyxyc3U18/Gu8esrbS4rK6jn6Sjn6CkrJuWqZaNl42MjZemsK6lnZ6doaWhnpuVlJaUin13cGtlYmhxb3F7hYqAdnBucXRwhbPCvsXR0NfW1tLWzdTW19TT0dLU1NLP0cPQ09bX1dbSy8nO0MvGzdLJ0tXW2dXX09bYztLJztHMztDL0s+/x8bJw8vLy87PxcbHtr/Jv9LMy8/Fyce/w8LHzszQ0M/MysfNuLe7qJ+lq6efmJ6jnp2qpa2pqKiSlYiQhIyRho2MiJOVmZCWjJiSj4aHjIR8d3N2b2NgZXJiXVJcSUpGQUVIST47QDg9NDU4NTo3Njo8QD07Pjw7OUA7OTo8Ozs8Nz09Ozo+Oz08Pjw/Ojo8Ozs5Oz89OTU7PD48PD0/Pz46O0BCOzk/OTg7PT0+PzxBQEQ8hqugnKegp6Oim6CbqaSlqaCfoaGmn6ifmKSim6mmoqarmqOwsamotdDU19rSx8bLtLbCxrK2qaKlpqGiq7WnmrGhlpWMkKatq5yVmKGdm6Gin5ydm5WKd2ljYF9fX19eX2BeYmx1c3Fwb2xycXWSxMfG1NXW19fT1s/V1NrU1M7P1dTU0dHM0c7T19bT1dDP0tPRydPRx9DY19jR19LX2dXWzM7PyczRy87Qv8XBx8XNzNDQ0cjLzMDKy8XTzsvOyMTJxsbIy8rT09DVz9LM0sG5xbGlqLWup5qorKWdsqiws6ysk4+TjoiLjoOPi4SQjpmNk4+Zj4+ChYx7enFzdG1hY2ltX1ZQX0pKQkZDUU0/PD40NDo9NTI3NTU8PEA8Ozw6OTpAOjg7Oj46PTg+Ojo8QD08OTs9Pzk6Pz07PTw9PTo2PD0/QD08PT0+OjxAQjs5PDc0Oj48Pz89RkFEPYKknKClnaWlo5mcnaSeo6OfnZ+doJqnnpyhqZ+vrqqqrJ6mrrioq7fY1NXZ2dHO0MC8zMm3wK+nq6mjpLG2s6O2qp+doaqpoZiWmJqbnaGemp2elH5yZWNiX19hX19hYF9gYF9gZm1wcG5rb3J3d5vMwNLV09jY1tnR0tLXz9POy9PN1dTRys/M09bS0dbN0NXV0cXR1MrQ1NXWztLQ2NjY18vIzcPIzszKy7/Jv8fIzc3PytDNzsvOzsfKz9DKzsrCyMbJzMrL0dLM09HQz8/Kvci5sK27uLWqtrCtqLits7+7sZqPn5SRjo2IjpCFkY2ZjJGRlY6RgIWIeXZvcG5rYmVucGFXXFpJRkZETFdFO0A8MzM8PTg2ODU1Oz5APTk8PDg8Pjk8QDtAOj04Pjk4Oj88PTg7PkI6Oj08OkE9PTw6Nj08P0A9PDs9Pjg7QEE9Ojw4ODs+PD4+OkVCRT6Bn5mlp6Cfo6eam5+cl56eoZqdmpyappufpKeeuLa1ta2lra6+tLHA2dLX2tzWz83Lw9PQwsKyq62urKazsbirs7epo5+clpSXm56fn52UlpeViWxeXl5hZGJgYGFhYGBhXl9fXl1ibXJvb3N0dnZ5pL7L1dHW1NPY1s7O08vNzsXOytLSz8bOzc3UzM7TzcrX1dDM0dPLy8/R08nO0dXS1dXKwMnBxczCyMnCzMLFyMnKzsrMzM/N08vFx8/Mx8fKxMbAxcnLzc/Qxs/Ozc3Mz8XHwLe5vcLDvcO5srO+sLvDxLWpmKWhmZaRlZWSi5SNmpGUlI+PlIKJhXhwcWttaGBgcWhYWGhWTUdMSVBQQjtEPjs2Nzo4OTo1Nz09QTs6PD05PD05PT06Pjo8ODs9OTtAPD47Pj5BPDk9Pj1CPTs3NzU/PDw/PDw7PDw4O0FAPDo8OTs7Ozw9QTpFQUU+hJ6bqK2epKSqnJ6fmJKXm5+am56ZmaKVoamppcXDwb+7tbKxx8O5y9XW2drb2M3Mz8nW1sXEuLK2qqSurLm5sbLAoZeOjZiWkJOSkZaWlpCMfGViYmJgXV5hY2JgX2BgYWFgX11bXWdycXFyc3FtcnmkxtPPy9DP1NXJxMnJxsa/w8XOzsfFx83K0cjLzs3G0dLPzszUysfKzc7Hx8/Sy9DPxbrEvsbJvMLGyM7EwsfAxs3Hw8vJy8/Hw8PPyMbBxsfDvsDHy8vLzsLKy8jHy8/Exce7x8LIyMLPwL28v7DByse6vaqwsqelnaKcmJCbkKSZl5mRlZiJj4J3bnRka2BeZnFhW1dgR0hIR0lNVEc/Sj02NDM1NT08NDg9PT06Oz08OTo7OT89OTw7PDg6PDo6QD1APD09Pjw6Qz48Pz04ODk6QD4/Pjw7Ozs7ODo+Pzw7Ojc5PD49Oz49RkFDPYOgm6qupa6qq5qdoJeUjpedmpmgmpqcm6WzsazJzcrIxL69us3NxtDV1dna29jQytDQ0tTKxbq+vrCot6u+ubmzpZKOjpaQhoOEhIJ+hYV/dGBbXl5eYF5gY2RjX11dXl9gYF9bWlxha3Jyb29rbG9vfbjRyMnKz8vNxLq/w7u7urm+yMbCw8DDx8rJyMrHwcXLxsjLzcnEwsrJwcLL0MTLyL+5wbrFx72/xs/Kw7/DusnHyLrHxsTKwL3By8bFw73FvLy/w8TLxMS8v8nCxcfRxcDIv8rJxsfG0MPDxsOvxMvHxMq3v7y6tKmspaWYn5iso6GlmqOgm5R7dnJ0ZmlaYW5tWltYUURMRkJHRExERlNANTQzMzQ/PDM6PDw7OTw8PDg7PTtBPTo8Ojs3Oz05Oz07PTs6OD4+PEI+Oz88OTk7Pz07QD48Ozk5OTk6Oz06PDo2OTw+PDs+O0NCRD5/pZypsqm0rrCdnp6YnImUm5man6Kfmp2ov7i8ys/RzMfCw8fNz87N1dDW2djZ0M3Uzs/Qy8S4xsG2tbyxwLe6rZGMk5eHe4CFhoB2eHVycF9aW11gYWJjZGRlZGBcXF1dX15gW1laXGJvcm9raWxwb3OPxrzJxczAxsGwtrqysrSyscG8u7u5uMDBwcW+vbm9v7nEysXGwr3GwLe7xMm/wsm7t7q6xcK+vMHNwsa+vbXAvcO6vMa7wrmzvMXDwsK2v7W1vr+6y8O8tbrIur+9y8PBxcLFyMXIxdDGwszHssbJw87NwcXCv72yt7Czp6ioubGlrbCrrayUeXZ3amVoYGhvY1ZeWUpFSkZIS0FGQkVJQDk6NjQ4ODUzOzo7PDk8PDs5Ozk6QD46Ojw6Nzo7Nzo7Oz88OjxAPUA/PT8/Oz07O0A8Pj4+Ojk5ODk3ODo8PDw7OTo8Pjs7PjpAQEU+fqygrLWqt7SyoZ6fl5qNlJaan52mop2et8bCxMjO0svKysfNzs/SydHG1tXW2M7M0MjNyMrFvsrBsrW6t7u2sJGNiouFeYCGhoB+hHx0dWRcXF1eYGBiY2JiZWViXV1bXF5cXl1aW11daHNxbWdnbnByeZ29zMDDusC4rbCwp6qtrKe4tLa0s7KzurW9sbewtK6yu8K8wcS8v7q1srq+wLjHuLS7tcDCvLe9xsDDu7Susra6vrPEt7u1q7i8vcC9sLq1r7a6ssW8tq67v7S2tMW8vsPFv8PExcfLxcDGxrvHy7/PycfDxsHDt8O+vba5vsa/rLW6tbe2jnh0eGZnZWJrbl5WXmBGS0hISkZCQ0FFRT88OjU2NTYzMzs6Oz06Ozs6Oz44PEE9PDo7ODc5OTk7PDo+Ozk+Pz1APz5CQD1AOjo+Oz89PTk6Ojo4NTY7PT48PDo7OT49OT86PEBAPIi3pauzsby8sa2foJmUlJiXnqujr6qnpMbLzsjGyc7M0M3OycvJzMrLxtHP09HPyMvGysbEwL3PvbO5vbm4t5yOh4mJe3l+hoZ3eIJ9dGheXV1dX2BfYGRhXmNlY19fXFteXF1eWltbXV9scG5oZmpubnJ8pMe/ubi1sKusp56iqqeeq6yzramrqbOttrCyqK6mrLK8urbDubq5sKu1ubu0wrqwv7C9vLu1u8e5wratqqiwscC1uLyvsKexs7S7vKuttaWutq66sbCqua+tu667uLu/v725wr/GwsXAvMbByMu4xcfFv8fDw7rExsK7xcnMy7O5wry6sohydnZraWFibGhZV1dbQUxLTUlFQUM/RkE6OTo5OTU4NTQ6Ojk7PD07Ojs+ODtAPD05Ojc5Pjk7PDo4Ozs6Pj45QT0/QD87Pjo7PDo9PDw4OTg5NzY4PDw9Ozw6Ojs+PTs/Ozs+QDyKwKuouLe5w62zqZ2ZlJaZoZymsLWxt6bGz9LMxMbBxdDIz8LEx8HGxsXFzMTLzMLEwcjBury7yre0vL22tauRiZCQfHl+ioV6e4SBd25eXV1dXV9gX19kY2JjY2JgX11bW1paXVpaWlpdZG5vaGZnaWtucoGtubC1rqalp6eaoKSgmpylq62jp6KrqayqsKOmn6qttbaxvbmvt6+orri0tLy4s7yut7m0sbvBscGupamirLGys6e8qquoq6yttLSmqK6hpK6psqWnqK6lqLessLK3ubq7sby9vr7Ev7XBwcfIt7/AxbfEwr+7v8TDvsTIzMq/vsPAwKmGcnRyamldYW9kV1ZYUEhaUlNLRkZFPj9AOTc4OTc3NjQzNzo5OTo8Ozs8PDc7PTs7Ozw4OT44PTs8Njo9Oz89N0E+P0A/Ojw8Oj05Ojs6Nzc3ODg3OTw7PDs5Ozo8OTc5Pjw+P0E7jMKvrry3usSwtrCbmZWcmKqpsLGztb2vxtHQzcTIu7vMw8zAvMq5wMbAvMy6w8fFur3Evrq3vca5trm7rrKVg4mNgXt+gH54dH98c3dmX11cXF5fYF5fY2NhYmBgX15dXFpYWVtbWVhaXF9ma2ZlZ2Voa29yhaqlrKagnKGllJ6km5eRoaOqo6KfpaWnpKyfnZukpqyyr7a3p7Csp6q0q7S5sLa0rLa4sa+6ubG3pJ+jn6exp6uouaqkpqeop7KtoKemnpukpqyen6ekn6Cxra2ssrSys7C1vLa7wcGyur7DwbK5usKzwL2/tbi7vb68wsfEwsO+v8Ogg3dwa2FlX2tvYFVZX0hOaE9UR0VKRjw9Pz06Ozs4MjU1MzY5OTk7OTo6PDo3PD88PDs8ODg8OTw6Ozc4Ojo8OTg+Oj89OTg8Ojs9Ojc2NzY3ODg2NjY7Ojo7OTo7PDg1OTw6Pj5AO43Itba9uLrBu761oJ6UnaGmurars7O7s8XQyczDx7m4ycLOwbrLub3Iu7fIu7fExrO+xby3sLnAu7Gzt7CihIeHgn15dnRvbWtqanFpX2BdXFxdX2BfYWNiYGBgYF1bW1tcWFlYWFhWWFtdXmRjYmVnZ2dqbW+Inamgl5WaoZabopiVjZ6hoqabn5+jpaGnnpqim5+qsK2xtaKpqqmrrKS1uK23r6yytK6ytK6wqp+dnqOisqSlqbitoaamn6isq5mfoJ6ZnZ+lmpmjnJudr6mrp6qrrK2wsrivuLm7sLa7u7qrsrK5sr20trGxtbS/tb3AvcPBurq9l4J6cmtfZV5kZFhUWF5JV11LUEdJSkZBPD8/QDs/PDA0NTM1Ojs5Ozg5OTw8Nz4/Oz07Ozg4PDg5ODw3ODo7Ozo7Pzo9Ozc4PDo9PDc0Nzc2NzU3NDY2Ozc5Ojs6ODo5ODo7OTo8PzuJyba4vru3wcHBtKSkmZqkpsCyr7astLfG0MnJwce8vMXF0MC8yru7wbu2xbi1wcGzwsS8raq1ureosbOpi4aIgHlzbnBua2JeYmZmXV1eXV1dXF1fYGFiY2NiYV9cW1taW1lYV1dXV1hYWFteYmRkZWZmaGlrco2onZSUlJuYm6GWlpCcoaGonZucpaahpJufoJqYra6trrKgpaKtq6ehtbCxsaynrrKnubOmtaGinpqjoq2ioam1qqKjpp2lpqOWmJ6XmJqdn5mXnZycm6yhq6ajpKatq7KzqrSwsqqyubSvqa+ysrK3s62prK6xt7C6trm9v7aysZSEeXVlXmVeW1lWU1pVS1tRTElFSEtJQj0/QUFAQDoyNDUyNDk5ODk7OTo9PDY9Pzs8Pjs3Ozs3Nzc+Njo+Ozo4Oj07PD06Ozw6PTs4Nzk3NDY1NTQ2Nzg1Ojo4Ojk5PDg3Ojg5PkA6gci9uL2/tr69v7OdpaOYpbHCtba9rbS4w83JyMHGuMLByNC6w8bAtry9tsO6tr/Btbu/u6qmsbuxqLKvm32FhYB5cHF0cWhmZGllY1xcW1tdXVxbXmBhXl9fYF5cW1pcWllYVldXVlhXWFhWV2FkZWNkZWRkaGp2opyUlI+Ulpefl5mUmJ+eoZyWoaGoo5+dqJyamqqmr7Crm6Ojt6qgn66otqmmpqywo7ewo7agopuYmKqmoZusuK+ioaScoZ+gk5WhlJaWm5iXlpeclJ+pnamjoZ2jqqqwrai0q6qmrbKwpaqusrGvsK6up6ensq6xtK+8tLm2rqOUgXl1ZF5hVllXU1JUS01eTFBLR0dMS0U8QD48Qjw7NzY1MzQ5ODg5OTo5Pjo4Pj47PTw8Nz49Njc2PTc7PTs5Nzk7Ozw+OTk6Ozo4Njc2NTQ1MzEwNDU2Nzk6ODo5Ojo3Ojs5OT1AOnbAvLS5wrG+uLyunaeno6q7wL3Aua60uMLNyMfExb7HusrNtcTFxbG/wLnAwbrAwLm6vbeoqLG7pqmipYmBfnhyamxydHBpaGVkZ2JcXFpZWlxcXF1eXVxbXF5cW1xZW1xaWFZXV1ZXWFdXV1VbY2NiYmNiY2RmaoGWk5WLkZSTm5mclpaboJyflaCfpqWkpaaenJ+kn6qvpp+io7aooKGiqLOhpaekr6WwrKu0nqCdlZSpoaGUrLGwnqKinZ6Ym5OLoZSRk5eYkpeXmJadppumoaKZo6Wkq6SlsKelo6urraWorq+uq6iqqrOlpquvtLGuvLWxr6+gknp2cmRhXFpdWE5MUUdSYU1WUE9KTU9FQkQ/OT02OTo3NjQ1OTk7OTg4Nzs4OT0+Oz47PDY5Ojc7Njs3Ozs6ODU6Ozo7OzY8Ozg4NDY4NjMzMjEuLzI1NTY7Ojg7Nzg3Njw7Ojs7QTh4u7uxtb2wu7K3rJ6kp623u7zBxbqxubXFysvBxMfHybjIxrXFwsmvurzCvMPAwb28t7q2pqeytp6iipmIgHdvZGJnaWhmaGpnam1gXVxbWlpZWlxdXFtcXl9cWllbWVlaW1dVWFdUVFdVU1RSVWBgX2BhX2BhY2RpgZSTiZGOlJKTnJSVlqOZoJacoKWhraWjo6KjoZuqqqWZnqWxqaCgnaSqnaehnqysqaitrKKhoZSXo5uckKupsJufop6el5iTip6SjZKTlY+YmJKboaKcpKChlaCho6Wbo6uloqSqo6uupK2xqaalpqa0pqmorbO1tLm6r6qsnotycG9gW1dWVVFGUU9IWlxPUklUS1NMRUdJQzg7Oz08ODY2Nzo5Ozo5NzY5Nzc6Ozo9PDw2Ozw4PjU5ODo4ODY1OTo7PDk3Pzw5Njc4NDUyMTIxLi4xNDI2Ojg2OTg1OTg5ODk7OUA5e7W0rbS7srCssq2dp6evubmzwMi6tcCvxsnOu8LLzcm3y7+0wMfMsLa9yLvCx8S9v7e6taWrsK6dmoeOg3x1aWpqbWhqbG5ra21lXVxcW1tcWlhaXVtbXmBgXFhYWllYV1hXVFZWVVRVVVJTT1FZXVxdXl5eX19iZG2Oj4SRho+RjpmTlJKcmqKcm6CnqKqnqqWopKOYpK6klJmlr6mfm5iaoJ6umZuqs5+lpp6io6CUk5uWlZKoqa2anKChoJqUkIyZjouQjJKMlpSQnaGgo5ybopWboKKgl6Koo6Koq6Crr6Stt6Wjo6Ksramoq6+zuLK9tbOrr5iDcnJoW1hZU1VSRVlMUFxZTVROUExQUklOSUI8Pz9BPzw2NTc5OTw8OTg3Ojc5Ojs8PT47Nzs7Oj02Nzo7ODk3Njk4OTo2Oj05OTU3NzU3MTE0MS0rLzQzNDk4ODo6ODo6NzQ4PTg/OX6zraiztq6pqK+tm6morLe2rLzKu7a/rMzHxrnCz9DJtca+ur7Gy7WxvcW9w8bEvcGzua+mq6+rnpeGgXd4b25pbm5ucWdnaWdkXVpbW1tbXFtZWltcXF5fX1xYWFlYV1hXVlVUU1VWVVVUU05QUVlaWlpdXFxeX2Bkfo2Bi3+LkIqSjZeRl5mioJufqqmmraqmr6KnmZ+soJWWpKinnZePjpmdrpaXp6qZn52TpaCdkZCSkpKVp6qkmZmanZ2WjYyLlIaIjYOQi5KUkKCeoKOXlZ+VmqCinZObpaWnqKigsbCmsbynn6OstKutp7C0sLi1wLGtsauQfXByYlZUVU5SSUdWUVNSTExYTUpMTlJHTUtBQ0ZEQz5ANzU4ODk7OTo3Ojo3PD06O0A+Ojk7OTo/NzU5Ojk4NzY5NTg3Nzk7ODU1NzY2NjEzMjAtKi4xMDI4Nzc7OTk7ODk0ODs4QDh/s6ymsbeqpqKwq52qp6mysaS2xrS5urPLxrq8w8vRzLO5ur7AxMe2tLe9s7u8xL7CsbSusa6xrJyiiGtobm9yb3FrcGtkZmdlXlpZWllaWlpbWlpaXFxdXFpYWFhZWVdYV1VVVFJTVVNWVVJOTk5SV1haWVlZXFxdYWqAen92iY6HkImYiZSUl5uZnaibn6qkpKqcp5igpZuSj56impeWhIORmqOPk6KclZWWh6GampOLjoqPmaOnnJWVl5uQkoeUjoyBi42AkIqSkpGhmp+hlZOYmJWipZiMmaSmqKahoLSyp7K3oZ2it6yqraSysqa1vLWrq7GjiHhybV1OUFFMT0NOTk5QS0ZOTktKTk1RSE1KQUdLSEhDPTg1ODg4OTo7Njk6Njg7OTk+PDg6Pjk7Pzg3ODk6ODg2ODU3Njg4OTc0NTc3ODIwMzAxKyktLzEyNzc2Ojk5OTk4NDk4OEE3d7anpLawpKekqaWgqaWks6qissO1tbKzx8e4u8TKzce1r7y/uLzEs7OutqKttcS6u6+qrLSvr6CXqH1eYGdzcXZxam5pZmhoal9YWVhYWFlZWVpaWVtbXFxZWFhXWVlYVVZSU1JQUVRRU1VRTk1LTFNXV1ZYWFlYW11hb3N2cISIgoeAkYOOipSRk52gjpqboqCjmKSWoZuVjYeYmoxzjYJ9jZaWhZCZkJONjnqYjpyMgop/iZifop6Qk5iWhI6Ck35+c4mNepCGkpCQnZqZmpCVj52OoqOOiZqgoaSjm6K0r6yvrJ+YpbmmpbChsK6csLuqqa+qmYF2cmJWTFFPUE1DU05MUU1DUFBISU5TTUhKSkRKTEVLSzw3NDk4ODg7OzY5Ozc6PDk6Ojs3OT85PkA3OTo8ODk3NjQ0NDU4NzQzMTI0ODUvMDEwMikoLC0xMjc2NDc4OTo6NjU6ODdBN3e3oaO0qKWlqKOmpaamprOnpbTAuLC0sMrGubrCz8e/ta+9w6+xx7Ktp6yVpK6/uLGwn6etrauWlaJyV1ZfaGdpaGluY2poZ2JcWFhYWFhZWVlZWVlaW1tbWVlZVldXV1NUUE5QTk9PUFNUUk1NSkhOU1NTVFVVV1lbXWlscm1/hXx0Tlhyj4KXho2cl4qTkJ6XnJWUlpSOlol/k4lfO1dve4uTiX+LkYyPhYZyioSWgXmCeoWTnZSDlY6Qj4KGfZJ4cW+FjH2JgJCNj5eZmJOKj4iciJ6Xh4eWnpqhoJenr6itqaielq20oqatmKyrmKezoamto5J9cW1fWk5TUVZMRFRKUE1MRk9PSUVMUU1LT0pJTVBGSUg9NzU5OTk5OTo3Ojs6Pj44Oj09Njo/OD4/NTg5Ozc5Njc1MzMzNzYwLi0vMzQ0MTEwLy8oKSsrLTM4NTQ3Nzk8Ojc5Ozg2QTl4t6CjrqGmpqqgp6mnoqmwqKe0wbmxtbDJw7m0v8/AurGxuMSrrsmup6Oehpuiuq2nqJampaShl4+WaVFNUlZaWlddXmJnY19ZV1dXWFhYWVpZWFlYWVpaWllYWFZXV1VTUk5MS0hHYlxNT1JNS0hGSE5RUU1QUlRWWFpgbW9peoJ0UEJAf5WRkX2JlIyEio2ajJaVipKIhpWGeYh/YEpRbniKkYR8hIyJhH9/bn5/lHd1dniEjZlwUY2IioZ7fniUdmd3hYd+iYiVio2QkpaLg4mHlISajIGEkpuWnpyUpKOnqaWjnpuxq6GkpJCmqpahqZyipqiIdGtlXVtIUVFTTElVTVNJTExQSUdGS05MTVRLUVFPRklDPDc2OTo4Ojs7ODo7OD4/OTk+PTc7PDY7OzQ3ODs2Nzc1MzQ0Njk2LzMvLjExNTIyMS8sJykrKiw0ODMzOTc5Ojk5Ojo6Oj85dracoqedn6Guoaeopaeor6yqtry2uLazwry3qLrJubepqre4rbbAqqKbk4OPmbKfopqNoJaZlJGLjGVNTE5OT0xNUVdbXFpYWlVVVlZWV1lZWFhZWFhZWVlaWFhWVldVU1BNSkVAQJtrc3NJTUtERERJTk9oWU5RU1RVWm6DdHd+amldVY+JlIl0f4aBe4WMkoGSmYuPe4aPf3V/eHNudXB0jY2BeX2JqoV5emh2e45wcm14gIqMknh6gHuAdnJykndndYSEhIR6lYmIioyLgH+Diox/k4N7gI+YlJuVkZ+dqJ6foJ6gqaWfnZiMp6SToJ+VnZ6kf3FnYFxcSlZPUUdLWFJPSkxNUkpKSk1QSExRTFJUTUVIQTw3ODs5OT49Ojs8OThAPzo6Pj03PT03OTkzNzc5NTY3NTI1MjU3Mi8yLiwuLzIwMC8tKygoKS4xMjYyMTk4Nzk4Nzc1Ojw8N3aumKOhmJyes6mvqaWsrLCxqr20sry4trq1sqC3u7OrnZ+tq6y1s6WelpKYhpSklp2Mg5eJj4mGhoNmSklKSUdGSEhQVFRUV1dTVFVVVVZXV1dYWFhYWFlYWVlXV1VWVVNQS0Y+OTNOPH6eTUhKREA9QURqlH5MT1FSU1ZedYN9eWd3jZeYjo99Z3mBdnh/iY98hJiSgXKHj3x2e29rfq18c5CKf3uGkoB9f3RmdnyFbG9oc3yJjIeAbHlxfXBtdY9xaHGAfY5wQ4qEgoOFfnd3eouFfYt6dX6Oko+YipKam6OXmZ2bnZ6inZaNiqSbj52XjpaYjnVta2VhWVdYVFFKUlVUT1BOUVZLTktOT0pRT0lOT0tGRDw7Nzk7Ojo/PTk8Ojk5Pz87ODw9Nzw5OTk5MjY2ODU2NjMzNjIxMjI0LiwsLS4uLTAtKyonJyouMTM2Mi84NzY5NjY1Mjc5OTV5ppefnpagpq+srqunqbCvsay8uKy7vrmzraibsaitnJCXnqesp6SbnZOIln6OlZKVgHyKeoWAf3+BZUpHSEZCQENESUxMTVFSUFFTVVRUVVZXV1dYV1lZWVlZWVlWVlRTUUtENzhmNzA/qGlOSEM9OzpEioV6WkpOUFFUWF5lcHJtiKeqwH51eWJ7eG98eYiPeXyLhW9tjJF4c3hqan+CcpaRi4F9ln9JkphuaHd+gmxpY2x5hZCShmtzbHxucnuGaG1wfnONiIOFen1+e3ZvdHOFgnmBd3B8joyKk4OWl5iakJOWl5mXnpeMg4mfkYqSjIaQln1saG1ubVdVV1RRUVlPU1VUVFhVTU5ITUpNTktDSU5HRT86ODk7OTk6Pjw5PDs6Oj0+Ojg6Ozk/ODY4NzI3NTc1NTQxNDQyLzAyNCorKiotListKigqKCcsLTEyNTAsNTU2NzQ4NUhBODk1d5mRm5manqStr6Ktqqi1r66stL+rvMK/pqOalaWYno6FjJaipJualJePdpF+hYuQj3x4fnR9eHV3fGZPRUdEQDw+PkFGR0dLS0tNUFJSUlRUVFRWVldXWFlaWVlaV1ZUU1BMRTFAmjMganJBmW87PDk1PICChl9JTU9PUldaUllcYKeIYpppdHplfnBtf3qLiHWBiIZ0bJmRdHN7amudjkx5hJKJhI5nMXaGc2x+fYN0ZmV0foSEhYBmaWx1a3B/fGdwcHtuko2Oe3N9fHFwbnVtgn53eXRpeYmCiImDlpOSkIuNkZSVj5eOgHmIl4iGiYZ/kId1aWluZ2NXUVlXWFlbTVBVVlpZTklJRUpKSEdCQUZEQ0c9OTk4Ozk6OTw6OTs6OjpAPDk6PDk4Pjc4NzcxNTI0NDUzMzY0NTAzMS4qKispLCwrKykoKycpLCwyMjYtKzU3NzU0NzhpTzg7NW6SiJmRmpakqK2esp6muq6rsrDCsrvDx5uXj5SZi46GeoWRmpaPko6SiXSKhHeLj4x/dnd1eHZveHNpVUZJRD88Ozk6P0BBRERFR0pMT1FRUVFSU1RVVlZYWlpZWFZVVFNQS0U4MC9cYLNHOVhQOzk0NDGWuotITE1PUFFWTEFJUUlir7OgcXx4bX1tcYOBhYF5hIaGeXKglHR4gHN1lIc1cZ2onY6hoYSihHZwhnyGe3OMrY2IgGhmYmltcW1vg3Vpb1h1b46akXZsf3p8bXFtcH96c3VtYnaEf4aAhZCRiouJkYuRjIuPg3V4i4+AfoKAfY94cG5ual5aW11bWVhgX1NOW1pZWExISkZKRz9DQUJHP0NEPTs5Nz07Ojs7OTo5OTs6Pzw4OD06ODs2NjY1MTEyMTM1MzQ3NTUzMS4vLCwrKSopKSoqKikoKikrLzNETTIxNjY2NDM8dlI3PTdikoGSiJaRnaSnnq+VpbSorbGuwbO6wcaXkIyUkIGJfW6CkZOKhIuIkIh2hIVvmIqMf3l7e3F7dHxrb15KUEc+QDc0NTg7Ozw9PkBCRUlMTExNTlBRUlVVVldYWVhWVVRTUExFPDUqnUtbQC1nSTk0Lz+Sg6muX0dMTU5QTDdDTVJTREqGdoB8fHZ+bHaIiHx9hYN/jH52opl5foaAhJmFm5xhhqqfnYuCkI16dol+iYeOc4qXj4N7XGRxdHp7d4psZ2lheW+Fj4J6boF3c4R6cHN5d2tuaV13h32HfIiHj4CLk5eDjYaNhn1xhH+EfHV3e32IdG1xcmRlXlpaXVNbZl5YUVVZXFZHS0tFTEc/RkBEQz9BQT06OTc8Ozs9PDo6OTk7Oz0+Nzk+OTk4Njc1NDI0NDAwNDY0NTY1NC0sKSsoJycnJigoKSkoKCsrKy8wMFVxPDIzMzMxRX5XND05XIx3iX+UjJGdnZ+mkaCqn7Cpr8Cxu8a6lo+RlIh6hnZrgIySg36LhZCNeYSCdaKGjX5+goBzg4F9bHlsU1hMQUUzMTEyNjY2ODg6PD9CRUdGR0pLTU9QUVNUVVdWVlZUU1BNRkA6Mj0gI5ZjjFs1MzExaT9Hb0lGSUxNT1JMS1RdWVJKaYSIe4l5e3F8j4x7fImGfpeHdqGZiIePkpSljaypSIatr6+KgICTioKLgoSRqIeAmJiKnHNsfIGGh32OaGdneH5thYaBhXGEhkdrgHdxeXZobWtfd32DiH+IhYx6lZ6ciouJkX97dYt2fHdtb3d+fXFxcGpaW1taY2JXZ2VcVVBRWFpRRExMR09JQ0ZDQ0FAQ0E9OTc4Ojo6Ozs6ODg4Ojo/PjY7Pjc1ODU3NzMzNDQyMzY2NTY3Njg7REZMTU1MQzcrIiUnKykrKywvMDArbnUyMjQyMEyBXDU9PF6EdHx+ioWHkY+WmJKXoJ2soaa4r7O9tJeNkouYi310cH+Kk39+jYOUlX2Gf4elh4mAg4iGeYmLgHWFeV9jVkxDNjAuLzIyMTIzNjY4Oj0/P0JFR0hKTE5RU1RVVFRWVVNRT0dDPzgwLCOHWz4/ODQuXZZwc6NVRklLTU5QV2BZcFpcXmqNk4eVgISChZGTfoWJkYGaloKgoZiVm5qlrZOZu7Gnu8fDp4qMoaWOk4mBkHtyg56fkZx+doWFi4+HkGlob4OAdIyGhItxhoJ3h397doV9bnZ1Z4GUj4aJiIeJiKGro5aJjpiAe4KJenpvZ2t4fXd8cWljXFlZXGhcYWZfWk9MTlhTUUlQS0ROR0NKRENBRERBPDo4Nz08Ojw6ODg3Nzg6PT04PD02ODY1NjYyMzQ0NTU3Njg2NzxCQj88ODo+Q1FeZVxHMicmLCwtLS4xKD+MWy4zMTBPg180PztudnBneIN7gIyAgZCPi5qapJyhrKarr7CXkpGEoZSEeHeAjZR9f5KGk5Z+ioGSm46EgYKMi4KKjoSAioBtcGpeQ0E0LS0vLy8vMDIyMzQ3Nzk7PT9CREhKT1FSU1JTU1RSUE9IREI8ODcvOUM+PDw2My5sk5dNUEhJS0tLTlZgY39nZ211nZuPmpOTi42OmoiTj52LoKGSo6mlo6yTqLaip8HCrsiveLqUmnyMoZ6YhJOEgo+hnpOZkoSKhY+YkJZscHWJi4GVjI2Pdo+EcWyFgYqWkoOFiHKJoZeHk4mPkJeltqmbjZWig4eThH5/a2psfX59f3FfW2JeWWZqXGxrX1hLSFBTUU5NTEZJUURETkZCQ0VHQj46OTc9PDo7Ojk4Nzc2Nzs6Nj06Nzg1NDU2MzQ1NTY2NjY4NTU2MzEwLiosLCkoKS46UGFcQCwoLSsrMCwncog3MjQwT4RiM0A8dW5nWXCDcHWHcXaRhn6XlpqUn5+bp6CqlpOYnmhmpJp+hZOSeoGSiZKSfYuFmZKRg4GBi46JhpGHhIiFeHh/aE5SPi8vLiwvLi0vMDAwMjEyNDU3Oz9DRk5QUlRQUVFTUU5QSUVEPjs8OkNGPz48NzUyPD9SNUhISExMTU5SXm+KfHOBfaCdm6emopmhl6KVnJ+onqmrn6isqaq1l6u/q7bIybfI0c++m6BwaaupnoSTkYWcoJqamaeRkYiVoZmad3p+lJiRoZKWl4GUnnt2lZKrs4mNl6B9lZ6cjpOWmqSjp7awnZGZqIiXkI6BiGxzc3t8eW5mXltfXmFnY19nZ1xSRUtLUU9JSk1GRk1DSExGRkNCR0RBOjg1PDw4OTk5NzU2NTg+NzU9ODQ3NDU3NTQ1NDY5NTg6NjE2ODYzLzAuLSosLy4tJyMqO1hiQigqLDEtKEuXXjA2M1GFZjNBQGliXlBxdWBufWF3jn18lI6Oip+Sl56WnKqYnqpCRH2HiYiYjXmCjYuOjXyKho+QjoGDgImMiYWThYKGiYGAh3dfYlA0NjAtMS8sLjAwLi8uLjAwMTU+QUFNUVJTUFJTVVNOU0xFRUA8Pj1GSEBBQDg2NjI8OTtGSEdJSU1PUVlthpB3lYujp6q1vbilrqysqKm1rLG3srKtu7GzvpyzxKy7ycu4w7+3paOwsqytqqOKlpiFpaagopiCppmNoqqnpIeFk6OgoKqhpKmOnLGLlaOnt7ucoaOwk6Odo56RpKKrsK6ztaKVpqqJmoqSipV6e36De2VeZlpjYF1iYl5mZ19bT0RJSFRPRkhMRktHRkZIQUtGQ0ZGQTs4Nz08ODg6OTc0NjU4PDU0PDc2OjQ0NjQ0NzM5PDM4PDIwMjU1MS8xLi0qKi8sLSooKiYlNVhYLywwLCwwhIE4NzFQhWg1QUNbWFRMaWNXanBYeoV2gZSFiIKbg5KRjJLayJ2Wc1aXiI+InI98hoyPi4p7iIOHkY6DhYGMhoWIkoaChImGh4eHcW5hQEU2NDwzLzExMC0sKy0xLy00P0RBTlZRUlNVVVdVTVxRR0dEPD4+RkhDREA4Ozw1Qzs9RktJR0hST1BXgZOghK6js6qywcfEq7PFtq20wLO4vra/tMG2u7ukuMaptsnHtr65tKijtK2wsZuZkpqfiaevqqSVd5+kl6GrsbOYlqmtqK61u7K6rK+1orGssrW8uLWutaCoqKOom6mwrbO6uLionLipjaWPkpOghnmBgHJXX2JVZGBgYV5fZmBbVUpERUxWUUlKSkVKSEVBQEBLREJNRjw4Njc7PDk3Ojk4NjU1NTcxMTw4ODk1NDY2NDk3Pj0zODkxLjAxMjExMzAsKiwuLCsrKyooJyopRVowMCovK2iSTzYwUodqNkFFV1FKTFxaUWNkV3p1cYGVfYSGk3aGfoCNe7+7o7yCtJSTjpuPhIiPk4qJeoeBjJONh4WBjoCBio+GgIaIhYqHkXp5bl1XQEVOPDY6NDZBQjc2NC8vNkNIQ1FcT1FVWFVcV09fVUlLSkFAPkdLRkZEOz5AN0Q3P0JKSkVHV1RQXo+kraSytMO2uMHMyra7xL2ztMG3uMK1v7C4dLG0prrFpLDGubGzsrSopLa2qrGgopabopKlsa2lraynpJigrLO6oqiyubW7vsy/xcW9vbPCt7q4v7i6uLqtrbGmsaquvrC9vMLDrJm7qJWuj5iYq4l+gHloVWFfVmhjaGRWW2NZVlRKR0dMUkdESUpBSUQ+P0JCTEBATUQ5OTY2OTo/Njo5OTY2MjQ2LzE5NTk5MzY0NjI3Oz0/NjoxLi81ODo5NjUwKigsLS0tLCwqKCgrKyhFUy8qMDBKj2s1MlCHbTY/RlJMQUxSV1RZVlp3anB/j4SBjoVve3J4iGK5oZmjiZWUlpOUlI6Ql5KHh3uHgY6WioGEgYp6fIuIhnyKgoGLhJV9eHp1ZU9cZEdFTDpRZGBbXlNGPztIUERaY1FRWVlaZ1pTYGFNU09FQT9JSkhFRkFAQzxENkI/SEdLTVNaVF6Ur7i1u7nJwLu9ys28vMG8uLa8u7e+tbqzxmF1sqWxmp6rvqqlqKuqpKKytaCrp56Vlp6Yn66lp6elnqOToqews6ixsry2wb3TycnTxsLFzMLKw8G+vr+8vLi0sLm3t8O6xr7EybCeuquirI+lqbeJgHxuXF5eXFVfXWdmU1lhVlJWSUVGTktBPkhEPUtCPUJAPUY+O0hANzk2Mzc5PjQ4OTo1NzA0NS8yNjM4OTM3NDUyNj84QD5HS1JUVFJQT1FSUUpBOS8sLCwqKygoLC0rL1A+KC40OIB9PDJLiHE5PkNLRUBKTVBSTFFdaG1scY+NhpBzbHJydIjVwLWaoI2VmZmRjpeSlpaOhoh9h4ONlop+gn+DeXuLhId7i3mBioKXf3R9emtlcHZZXVxQZWViYGVkXVtYWFxNZG1VUm1uX29fWGdlVVlUSkRCS0tIRkhISEhCSTlEQEhLVFRWXVpck7nAub64xsG7ucrLu7a6tri5tLi1ta62t5lkdamerXBeoq2cmKGim6Seq6WUn5+QlI6WmJeonqafn5qZg6OdrKSqsKy3sLy41NDO1s/JzNLMz87Kx8DAwsq9wb3CwMXExsrAyc+0pLyxtbCcrLm9mn12aVtcWVdbX1hhYlFcYVRSTENCRkdFPEBGPkJJQkBEPTpFPj1KPzQ3NTM1Oz00Njg5NzcwMjIvMjQxNjk3NzU1NTVEM0VMTT41MTAwMDY6NDc3QElPSjsuJioqKC0uLyxATSsvNTRtiUkwSIl0Pz5CREBDREdLT0RSXFppYG+XkpGUbmxvdHWHs6yhoZ+LmZyZjY2VkZuShYqKf4iHjJCLiXyBhHN7ioOFe4p0gYqHlX90e3lsbXV8aXNlaWxoZmppaGBmaWltWm10l62kvYiHZ1tvaF1aWVRIS09QSktQTFNRSExBSkZLUF9fYmdqYpe3x7C6tLu+trHFx7awubGxu62zsairuK2NtqienKeaTpqejI+glpGnmKWVipOTiJGJj5GSnZuhmJuUloeemaaarK+or6ezs9TU1NbRy8/T1M7Tz8zFwsrQv8rJy8nSyM3Ow9DSuLDEvcS6pre7xKJ/a2FaWltWXlZZY1lQXVhPUkNCSUVDSTtBRD5CSD9AQjg7RD5AST01NjY1NTs6Njg3NjU0LzEwMTQ2Mjc4ODc1MzY3QzVCOD8tMCwxMzQ4PTk3LC4sMTtGTD0pLCguMDAwN0s/LTQ2VIhXMESHd0M7Qj5FQkFDSk0/VVlTZldzkJGZg2hyb3l5g6GqnqaXjJubmIuOlZGajn2Ji4WOioqLkIh8hIJwf4eBhnuHcoOSi49+cXl1bHB4f3J7bnhzbGmAcG1jaW5weWl3fX7Lv8Pfp25jeG5kW2FgSlBSVU5ZXlBdXU1RTlRRVVRcbm53g3KWrristaiwtqutvcGyq7WmpbmnrK+hrLSkj7Gum5iYjJGUkYSPm4GNp5GciYOLhIqJhIuDlJWXl5SbkJuYmZmenauspKeirKzO0tXRzcvS09PQ1NHOyMPU0cjO0tPT183S0cXS1sbBz8jIw6m/uNCcdmtiWl9bVF5RXFlPUFRQTkk+QUdCQ0Y9QUI/RkU+QD86PT08PEpBNDU0NjU8ODg4NjY0NDEyLzAzNTI2NzY4NTMzOz08RT1AMTErLzM0OT81OTAxMDIyLTJFTzMpLzMuMzI9TjI0OEN9XzJBhnREOj09ST5AQ0ZIPFZSTU9bdYeGi3dsd3B9foCgnp6hjI2Zk5SLjJOPloV5hZCQjouKiJGHf4J7cn6Agod6hXaFk5GJgG93c2xzfXx3fHOCeHFrgHJyaXByenlye77Lmn+NsoR2coV3aWFpXUNaWltXZmRYZWtUWF1dYGNeY3h7f4uBmaqkpKKgoammqrG5q6a0o6KuoqSuoqexn4mmm5WTkYqSj4iClIlrlaKNmYSBhn6Rg4OTl6yLlY6Vmo6FkpCdl6ewoqCgpaSoyM3Px8LL0dPR1NLO083G1tPN1NjW1tjV19XK1NrNytjW0cutxMPLiG9sX1xcVlJXUlpPSkdJSkpAOzo7RUJEPUNEPkhDP0NCOzw5PDpHQjQ2NTQ0PDU2ODc1NDMyNTAvMjU0Njc0NTU0NDw+PUU/QTYyLy0xNjs9MDgxLzI1NC8tLjtSMDE3LzUzMkVEMjg+bmI1PYF0TTk5QEk8QUQ/QTtQTEZLWXCAdX5pc3lygoqAnZWelIWLlomPiomOiI+AeISUmYuNiIiLiX6DeHN8fYSHd4B7h5GXgYRveHFtdX92eH10hnx5bId2dG59doV1eXudtYw8QYvGpX6NfWplV0lDZWNmY2hqZG95W19maGtuaW6Bg4mRjJ6foJ6Rl5mgo6SmsqSlsqCipZ+iqaGisZyHn5KSk5GLj4uHhI+EfpycjI2ChIV6lH+CqpajjJKLmJOLfZeKmpGqs5ianKecpr3Dxbi2xc3R0NLQy9LLydTO0dXa19fY1NnYzdjbzsna2tLWv8zNtHVza2FaV1BTUFhVRUdKSUZFPTo3OkBCQzpIRUBFREJEQTs/Ozs3REM3NTY1NTswNjg5NDQzMzQxMDE0NTU4NzQ0NDQ5QD5EQkM8MzMuNkZUV09RSkFKRj8yKiguQlQyOTI1NC83Szc1PGBiQTxzdlY4N0FIOj9CPjw5UUVDSlRsbm9wYnFxdIaNfZeRnot+h5KCiYaFioKIfXiFl5eJj4OHhod6hHlxe3uFhnV6ho6OnXqNcH1wcHqAcnuBcoSHgG6OenV3fX2CdX98h4mwdFmqwreNkoFwbmM9XmhycHFwbnd3gmVpb3J2eHJ6i4ePk5KblqCWiIyTnJ+bn6ugoaycopqaoKafn6yZjJqNkZOOhX2Ih4OFi46gmZOIg4d+bJl5hJmGiJOMjpWMhnubiJOOraqUlZefmKautbyorb3Hy8jJy8vPycTSytTX2NfY19Tb19PZ29bP29rS1snVzJN1d2VkWFdOUVJbR0NGSUg+Qj49ODo+QDw+SD1AQkFBRUE+Pzo4N0RCNzU1NDc5LjU2NjQzNTUzMjMyMzY0NzU1MzQ1OEVCRENFQjU2PEZOU01bbmZjbnNrYFY+LDRMRzg2NTQzM0JGND1XX2hMdXheODs/Rjw8QTw6OUQ/Q0dSa19tZGJmbHaAiHGRkJuAeYCOfoKBgoV/hHx9hJiOh4x/hoeBd4N5bnt7h4J0epKejqF2j3aDdHWBfnSAhG+BkIJvkoV1fIGFenaHfIm4xqXDyriClpyPeHBlTmVjgnqCd4WhkIt5end7hIB8hHZtlJaVlpCYkYOJj5eal5emnZigl5+TkpejnpqrlpGRi42Tg4yFiYmBho+RnpyZiIWLgYWXeoiJn5ePiY6Ki4J8oYmQiruhmJOXmpyopqWtnqe1v7+/uMbJzc7FzcnR1dXU2dXX29TX2drb19va2djO28aDdnZkZmFdUlVUVE1LRE1DOz08PDk6PD85PUE3Pj9APT8+PTk4NjdDQTY0NTU9ODA2NjU1NDc3NDU2MTM4NTQ1NjQ1NTdISD1ESkU3OTI1O0g+Ozk6N0hQXFpSVVhLOVQ+Ozk1MzI3STg9TllNSHh4ZDU9PkM9PEA6Njo+PkBFUV9ZZmFdXGl0enlsiY2Sd3Z6i3x+gH+AfoV7foKRioWGeoWIfHV+dW18fYd+dH+SnZGfg5J8h354j355i4pvg5uBdJmGfYKKhXx+kXuQqY+Qw6C9jJuknH2JhX2Jc4yLf3OmmpyYlIV7j5GJhGlHcaGknoyMkZKFiIuQkpWPnZuTlJGXjYyVn52UoZWTjo6QjH+Qj46LhImSlpmfn4iMlJGdkIKMf6aZiIWOg4aEgKSGiou3l52RlJahpqCdnZ2jrra5tKvAxsrQyMfMz9PS0tjS1dfA19jZ29ja2tnZ19u2dnV0Z2ZiVF1ZUk5OSENMQz09Pjk5Ozo5OTw9NkA+Pz09OTo6OzM3REA4Mzc4PjcwNjg4MzU3PDM3ODA0OTc2NzU1NTQ2RlA1RE5JODkzOEFLPTszQ0BJPDlEV088TVRITj85NjMzMz5DO1tYPjVZeXBaPDxBPD0+ODU4OT88RFJTUlhfVlhmbW1taYGOinFzeYp7e4B8f3yIe318i4eCfnWDhnpzenNtgX6FfneGm6GbnpSSgIyIf5iHgJySboiphXugjHyRjoOJhJx+m5GKjaOin5Gkr6CLkYuFi4GThldyrYufq5uQg5mckI+OW4OikYKNn5OUjIaIjJKSjJSVlZCMj4qIlpudj5WWkoyTlIaAi4mSjoqKnZeYo6KGk52VoIuKiY6ckIOIj4CDh4WkhIuQspickpSXoaCemZKbnaeyuKylvcLHzcjGz8vPzM7Xz9HUrtbV2NrY2trX1tnanWx5cWNjWlpVUVVWQ0BJQz8/Pjo0ODo7Nzo7OjM8PD89Pjc7OToxOkc9OjI3PUA1MDY3NzI1NT82NTs1NTg1ODo1NzczNUhSN0dPSzk5ND1FSkI+MUZDTEE5ODpHWEA1SFdJNjYyMjM6RUNlWD8mX3lpX3o+Pjk8Ozk4OjtAO0JRS0tTWVBUY2J4bGJ+kYNvbniLeHp/e4F9h3x8d4aFgHNwhYJ7dXd2dIWDhX1/kqain6ail4qdkJSXi4qol3KKso2EqJKEmZSFmoyjlqCYk4mbnqKTqbCgkZWRjo6IloxvjbeEmsTIspyippycmJaRsZBkpM3HlY6Gh4mQko2Nk5WKhYqKhpaZm4+QlJOHlZiEgI+LmYiOkKuXl6SjiJmelpqIj4eXl4qFj42Bf4ePpYiNk6ial5OWmKGYn5mTnJqisrSlo7zBvsfGxcjIycLK08zN1KjS0dbW1tja1NPazn9ve2RgW1tbTUhTWUJBR0Q7Qj44Mzc7PDo5PjY0Ojo8OjcyPzo5MjlJOj42N0JDMzI6OTYyNjQ+PTQ7PjY5NDk7NTc5NDRLUTxKUUs5QTdCR0lANjRKRUxGPjs4OEVUQTc+XDg2MjE0OjtFYFhBRmF0aExjWj41Ozo6NTs6PTpFTUZIUldTUkJjgkd2gY59fG1+iHh6fnuCgoN/d3aAg3xtbot/e314eHyEh4p+i6Kzp6Ors6KXp5+lpJaVrqKDkbiVkrOajKGhjKWbsKOknZiRp5aomayvpJiVlpWQi5ial6HAjqPJuKuco6atmJKbnbKdhYaoo5yYhYmJjpWMi5OPiIGGh4mTmJWMi5STh5SYhoSRkJx1kZmylZakoYecmZKQi5CKl5uJi5aOhn2MmJ6JkJCbmpqTmJefk6CdlJ6boLGuoqO3vrTFx8S9w8PAxs3KydOmzszT0tHW2NPQ2LpvdnJZXlNdVE5HSU1EQUNENT46Nzc6Pzw8Nz00MjY2OTc3ND41OzU8TDw+OzxCQTc1PDs0Mjc3P0A2P0A3ODQ5ODc7PDU1T01EUFJMOEA9RUFHQTU6SkVORUQ6NkFAQlM+OURPMzIzNTc1PXZcPFJcdGlaTV1TPD04ODU2Nz06SkZER01aXFlKZmA7SISLenpuhYZ6fIR4gYaBfnB4fH59b3ONen6CfHiGi4mGhJKmu6yosb2wpa2zs6ijorCsipq1naO4pZWtpZeprbinpKOfmqmYqqSusKqamZyUlpGXoJiau7uuyqFqtrirsJSZn6Osk5e+o16qsoOKio2Uh5B8jo59g4aOj5SViIiTloyQlY2LjZaYk52ZtJaVq52KnJSRjpGSjJmbipKekIuJlp+hjJSNl5mdkpuYnpShoJScnaWuqKGks7iswsjEtbq9vMXHx8LRoMbJzc3F19bRy9OfbXdlWVdQW09ORUM+PEJBQjhAODg1P0c9PDU8MzUzNDU0NTRCNDk6Qk06QjtBSEI7OkA8NzQ2PEI5P0BCODc0Ojo2Pjw0N1RLQ1VRSjc8OklBREA0QUpITkJBPzZEQTxKTkQvVD0yNTQ6RUpcWEpaUW1ncHBEaWBLSTY3NTc6PkpAQ0lQZEhiYGJwSkCLin6Ac4aHfYKIdYOKgn9ufXx9f3B3h3eOgod8jY+MhoyZqcLAr73Gu7O0wL20rauztoyosq6uvaubu6Wnrbm4q6amoqKko6mvsrGqnZykmZuYl5+ipqWSpLqvqcC8ra6yuaWkqH6IhpytvbCCi4yLkIOOg5GPeoGIkI2NnImIj5eNi5WWlJGal52omrGakaycjpqPko6VkJCWl4+RoJGJlJukrJSWj5OcnZOgnZuYn6GUmp6npqSio7CypsHGw6+wurfFxMO/zabHxMfEvdbQzcTKhXBvXllXXFhMSkFLQEVHPkFAQzs6NT5BPT01PTY+MzMzMjQyQTE3QEJOPkdAQ05DQT1DPTs4NkNDNUJJQjo4Nzg7NUI+NzlWS0RXT0Y4PTRLQEM+NEVLSE4+QUE2QkI/QlNFNThQMTQ1Ozw4O0Q+OUxqal07V1JkS2daVU43OUdEP0NGXGVGYGlnWl1ck4yMiXuHjIeDjHWHkYqBb357gn9xfoF7lXqSlJSYkJOWp7PGyb/BzMLDuce9u6+rubuYs7e6ssCupcCkq6+8vaquq6OjnqerrrWwqpygq5yhnJafr7Wni6O6urbBvKypnbOlpKiUhY2qw8OkgouPh4iEhpWUjXmDjZGPkaGMjJSSjomXn5iTmZWXpqCvnIyrnI2Wj5GRlZWNkZWSj6CUhpefoLKelJmTn6CYpJ6an5uglJiepaOmpqSvraXAxMOuqLe2ycO+ts+yxL/EvLPRysjCtHF1aVlVWWdRTEhCTEtLSkFCPUNEPDVBRTs7Mz04QjMzMjI2MkEwNUlFTj5JQEhSQEg+Q0A7Pj1GQTVBVUA7OTk4PDdFPjg+VkpDV09HOD80TEBCOzVKS0NMP0I/PEJGPUFITDkrRzwzNjc0NjRBPzdPYU9hRS89PjZrbGpgQDpIPj9FQmVaTWVcZlRia5mNloqMiJOQhol5h5SQgXKAe41/eIeCgpB6jaGWqJmambq9x8jJwdLJy8LMvcKzrby+qLrAvbvEt6zBqayzvL6qsKqkpaSsrrOttrWhn6+fpaKYo7O9qpuovcGktrivrJSyrKysl4aaqaalkYKMk6WWioF1ipJ5hY6SkJ6gk4+TjI+NlKOZlpyVlKOeqp6RpZqMj4+PlZaIfI+Vk5KjmpWfopy1pZCelqSjoaWdnaaYnZWXmqSjqaeisqyou8DDr6Wzt8y/ua/Es7u+wbiswsPCwJdqdl5VVFlYSkpMSUZEREhDQ0FETDo0REk6OzQ8OEUuMTIyNDJCMjZTSE88SkJKUUVLQ0RFOkVMQjw3RVY9Oz04OT88ST86RVVJQVdRRzdBOks6Qjc5Sk1CSUBDPjxERzxCQ089MjBIMzY2MTcwPUI6PWpqSks1UVMzU3BwZE47RD1ARj5pSF9YYlpjY1aej5yOl46ekomKf4qgk4R4hX+Wf36QiIqRgJahma6npJjCvcfDx8XTzs7Ny7zCt7C6vLS9y7vDwra3vK2zv7q9rq+ooKmotq2uqbK3mp6to6ehnau3uKqlsL/Esr25tKirtrSurpeWpayon5GNkrLFp5aOfJKVfIeSmY+qmZiTk4+SlZOknZOdmZOho6KcmJ+Yi4yPjp2IWpCXl5KXpJllmKKfs6WVoZWrq6mmm56mlpiWmJSho6ilnrarqbm7w7SltLXLwLiqtquyu7iuqLi6vbiAaGtXVFJTTUVJUkxLP0FIRUVIR0c5NUZNOz43PUBKLjMyMDI1QzU1T1ZOPExGS1JMT0hHST5JUT86OElTOzs/Nzk+RExCQEhTS0BXUEY6QT9HNkE3O0hNQ0U7Qz00RkU6QkFCRzkvOkEzNjAzPkdEOTQ9dGRNRztFKzpmfGdWOz5AQkZCcEVqSVJlYUxGpZScl6KXqZaMkYOIppOIgoeCnISDlZCQlI+aop6vvq+hxrzExMbGzs/O0sq+u7axuru7vs+1w724ubezsbWzuLOrp5yrrLmqqaevsJijr6Wno6W1wLCsrLS/w7rAurSnura5tK+Wpa2urqSLk5ShjXTCmn2XmYSOl5mMsZWbmpWSkpmZpaOVoJuXmqmdm6CgmYqNj5WcYEqWnJqUmqWWVJavn6+cn6SUrq2qpJqgpZOTmJiNnJ+nopm0qKqzu7u7qrGyx8C5pqyrrbKyo6GysrSkbWpiWVdNT0pET09QUjtIS0lHSUNDPjpLVT9BOj1FTTA3NTQ0OkI0NE1XTztKS09VTlFKUEhISk9CPD5NUjs+PTg6PENSPkRIUklCV05JQEJBRjM+NThKS0NBPUM7NEVBOkE/PkhANSpCNTIsPmNdZzozNXRkZUBSNyYjM31oVzs6QkNAPVFFV1NzYldGSKqWmaCiqK+ZkZeHi6iWjoiThaCHhJ2Xj52hmqOktcm1qcW5wsPIysjIzM3Gv7uzrrm5wcHMtce6wbm1urCvr7O1p6SbqrS0qqmmrayapK6lpKisu7+orLa3v8G/vrmzssSyub6to6+1rLmmiJuXppt2v5+EmZ2Ok5qajK6XoZycl5SboKGonqifmZqqmqGnnpiQjZGdg252kqKalZ2inZGusqOqlKiql6mto6KepKeRkZmch5Sdop6Wsaapq7m2vbKyrr65tqCjp6ilppybrampi2BiXl1OSktGR01KVkw9TUVOS0xCQ0Q8UVY9QUFCRE8xOD03Nj9CNzVVWE8/SE5RWVNQUVVLUUpKRUFFTVE/Pz04PTtHUjxFRFFCR1lNS0FIREU6OjM5S0lCPkNCOTlDPjxAPjs7RzctMj4tMYJoTnpcLzBraGA8PUJCODZ6Zlc7Oj0uLVJgTVVIfmVeSEWrlZuin7uvmZSfjJOrm5GSk4mrjYahnoyjrZSjo7bGvrTAucLCx8nFws3Iwb65sq+5tMDCybXGssK8tbqqqK2tsKOjmKq0u6appquqnamvp6Oqq727qK29tbi+x7y3trjCsr7Btaq1tqu+pY+jmJKioLyfiZqgmZefno+3n6mcpaKbnKGaqKSzoJudppyoqp6YlY+Um4uWiYykoZSdop2gtK+lpJKvq5mqqpyco6KokJSUn4KPnp6blamkoaGztLq0rai1srOenKOlmpeVmKqhnnVdWl1bSEdFRkxQSU1FR0dCU0xKQkVHQVdTQ0g9QUdRMTtCNzpCRjc5XFlLQUxQVFVTTVdSTlVKRUBKSk5POUNANT08TlFDPz9QP0VaTUpBS0RHQDUzPUlHPz1FQTk3QTs8QDw8M0A8Lyc7KkiRQjpTSjAsW29XNzE8Kh1CgGRUNDktMTlmXEZDQ51wYkdFp5ejn57DrZyXpZiZqZyWmpqPqpaVp6aVrayYoqu2w8O8vrbBwsDHxL/Nxru9ubKwubO/wse1v7C8t7m2pqSrq62goZmqqsSipKmrpp6sr6uiqam+uKetv7K4t8e2tbm4wLLAwre1s7SvvaOXo5eUnJSun5Cio6Wjo6CQvaWpnamrnJyhm6WevaGZo5+iqauhnZeNlZ6TnoePhI2Tn6SgnrWsppyVsKaZr6WcmaicnoyYlJ6DjqCZm5KlpJqXq7G1saqlqq6sm5igoJKPkJWonpRlX1dfW01IR0lOTEhFRElBPlFJQTxHSUlcUk9LPUhPVTRCRjk+SEc1Q2FbS0JOUlVXVlFYVFJVSUA4UlFQTTpHQTRDSFFTSUM7Qz5HVktDQE8+SzwwNjtHRj47RkE1Nj85Oj85OzE1RDAtLC9Ndlw0S1o1LE1uVzwtPSkeI3piUTVDS1E5bVJGPEt4ZWFWS6Kao5yexayhnqyfna6gkqOflqSgpqmsmLaxoqqztsXEvb+1wMK7yMK+yse1uLW0sbO0t8HFtr6xuLW5tJ+nrKqsnZ6epaTBpZ+praCkqa2voaaovbWmsb25t7bEsrS4ur+0xMG4ua6ztbWjnaWVkpShrqCZop6pqKyjmsKsqZ6srpubnpmmoL2hnaSYq6uspqGajZqfkp6Jjld/lp+loaC4qqeTmLSinrGfnpmulZ2NmJOcgY6fl5WNoaOVkKWtsqqpoqKlpZWVnZiLj5GSpJ6JX2JYYl9LR0pKTkZFQUdLPz1KQjk5SktOXVFRST1MVlw5Rkk9RE1JOEhiXExDTFBTWVlWV09aXklBPVdRSUs/SD81SE1YU0hBOkBBRFBIPz5RPks3MDk5RkU7OEc/LjY+Nzg+NzcvMT85MSUxUVVtW0pPMTA9Z1dEMTc9LSt3YFM2U1prV3JHRTY9dWVcS02enqGZn8SopaG0op2zp5OrpaCjn6yprJ27sKistrHHxcHCssPDvcbEvMTJvK+wtq2wtK++xLS5sbC6tKyZqLGpqpqdpaGnwa2brLGbqqOusKmlqby2p7e7vq+3xK2zs8PAtMe0u7ess7atqqKmlpWVpKyin6Cbp6qwr6+7saagqaiamZiToqO4oKGjkrCvrKWmn5KhnpWej5CNlZ6bop6ntKemjJeym6KtmZyarI+dkpWSmX+RoJWOjZ+gk4umq6+kpqKcoJ6RkZqThYuRjZudf19jWWZkSUhMSVNBQ0BJSDs7Rj85OU9OVl5SU0o+T15dPUhQQkxMSTlNY1xMRUxSVFlbU1VPXGJIQT9aUUFIQUtCN0ZFTEtNPztCSEROQj07TkBBMy85N0NCOTdGOys2PDQ2PDI1LS80QDErJ1Z0U2VPPzEwNGJbTTIzPjA8dl1eP1tUXmVxQDg7SJZ3ZUE0nqOfnKDDqaSqs6KktaqWs6ynoaSyrK6pu7KtsbW0xsDEwrTAxL7JxLW/yMG0q7Wor7isv8Ozt66ttrilmKqyq6uYn6aXrbu0m6iwmqygrbSyqKu5sqi6tLmzuMCqt7LEvbXGqL+vrba1qaesoZiXkqaloqKYmKWuuK6ytbagn6mkmpSWlKSgt6KlpZavsbKnq6ainpqam5WXqJ+gmKGer7KipoyXrZikq5aYnaKPmoySlpiFlZ6Ti5CbnZOKqKmqoaehmJ6Vi46Zj4GFlIiTnndiZ1tqaUxPTU5UPUJBTkM6Okk/NzdST11eUlZRQVdgXEJKU0hWS0g6VGRcTkZPTltXW1JQUVhdR0FCW1BCRz5OQzlIR0hPUD8/Q0lCTEI8MklBOTQxNzdCPjs3RTcrNjkxNDgwMS0vLjw2LSNCcWdzazIzLzFbYlozMzgwNnBbYkgwNUlvaFVDV0aMeWZDO6OjnaGmv6enr7GiqbWrnrqxrKOrtLaxsLm3sLe4uMS9w8e9vcTCxsC4wMbAuam2pKy7rcDBt7eqrbK6opStsa2ylqSnkaq5qp+msJyroK+0s6uptratvK20s7m3rLixw7u/v6bDq7C2rqirq6eemJmroaKhkZihsa+zrLC5mpupn5qXk5inoLappqOisLG0rLOnrJ+coKCbnqWcopedo7Ovm5+Qk6SZn6iZk6Gdk5aIk5aSlZackoiQmpiUjqmopp+jnJebkoWOmYt9i5WEjZlpZ2tgbG1XUFFbVUFCRVRAOztJQTc6WFBkXlBXV0VZX15NTFJOXktKPlljXk5IUE9cVVlQS1RXWkk/RFhQREY/TkA9SUdHUVBCPURGQk0/OjFEPzc3NTQ3Pz05NUU0Kzc1LzI1MS0tLiwxPSonKz1ccD0+MS4wZFpkQDE2NDdnWWBGKD84bH1nW1Y7iXtjQz2nn52iqb2iqrCspLK5qqa2tKygrbW9r7O4u7q+t7bAwr/JxLnEwsC/t8O9wLeutaert7G7vb60qa6xtp6Wq66nrpemqI6nu5+krLOeq6KxsLOsqba0tb6usbK1rLC0s8G6xbesvbCxt6usqqOypp6lqqCkl5Gan7Oqs6urs5qdp5yalY6hpqS0rqihra6usai0rbKqpJyfqKSelaKZm6i1qZeZkpKdmZ2fnZCqnJWWhJSWip2Ym5OKjZaWmpampaOfnZaVl5J/j5SFe42SgouVZGtxZm9xXkZZZ1ZEQk1YRFo5SEI2Pl1RaFxOWl1HW15dT01SWGRKSkJcYl9QTE1OWFdYUEpWVldMPUVVSkVEQU1AQUZISFFQQTtGREZLPTg3Qj02ODcxOT48NjVEMCs4MC8wNS8qLC8tKj0sLCUyKyo1SzEvJ19fYFUxNTA9YFZeOClDM1lVXGdLNox6ZkxApJqhpa23payqpq+ut6qvtbunprG3xbextr3Bw7W1usS+zMa5w8C5vrnDuMC4srSrqbq2urm+tKmtsLWXmKesqaybq6uOq76eq62yo6ugsa6zrq21srm4qq6usai1r7W7vMqzqre1sbSvrqahtKCbqK2gppaWm5qyo62gpq+XoaSampOOo6Wns6qhprOtqrWlr7K1r6SZnaynmpifmpmrt6OXk5COl5ygl5aTqp6akX+Sl4ydm5iVkIqUkp6ZpKKioJiWkpOVeouPhXuMioKKkWptd2x1emFGYWtZSUdaWj17SkZENkFiVGlbTVxhS1xdWlJSUmJgTEtFX2BgUUxJUFdWVU9HV1ZVTjpJVklIP0NLP0VESEhRTkE/SEhIRTw3PT46NzU2MDk/ODY2QiwtOCwvMDQsKCwvLSo3NikoOS4kOks1LiJUX1RfLzUoQ19RXC4rQi9KR1BbRzNjWVRLRJmXobGpsqqspqSvrrapt7W6pKy0t8m7tLu6v7+0s7fDwMzIvMO8tr2+v7e+vLG8rae6ube1wraqrbG3lJamrquoo7CplK+7pK2xs6eoo7K1sbGwtbG4tKmvrLKnt6+3tMTGt6m2tqywramno7agoKeyoaSVnJqVsZ6nnKCqjqmjnpuWmKampbioo7K1rKixp66xtaylmaCsqJucnpyUqbiblI6OipebopePl6SgnJOCkJSPnJuXlpWIlo+XmqecpKCRlpGQlXaEj4d7hIGDi4psb3Z0e35cTGZtXEpOY1w+YntHSThHZ1dmXExeYk1YWVdVV1RpXU9PSGBdX1BKSFFWVVJLSFdVVk04TVpORUBGSz9IQkNLU00/P0xPSEA7Oj47NjswNDE8PTQ1OD8pMDcpMS4yKSksLC0rLTkkMDQyJTlCNy4jQU5HZjI3J0diTFYlLUIuPUVMUTwzcmtJQ0ORmaWvpa6vq6ilsbO0q7eyuKGrtbnJua3Bu8K4s7G1wsLOxcDBvbS9v766vryyw6epubC1tb+8rqyysZugp7GtpqavpZ2yta2qsbGsqai1u6y0srWttK2qrKisqbitsrDIwLmlurCprKylqK6xpqWjr6SpnJ6dm6+ao6Ojo5GtnqOgoKKrpqa5pay2tqWrrKmtsLauop6jqaqboJubkqOzmY6KjYeQoaCUjJScn5KQg42Skpyal5WUh5eSlZmnm5+ejJKRjZB2fY2FfHt8hYiIcHJxfXx9XFNkb15OWGZcRkSWW0c7Tm1YYltMYGJOVldWV1RYZ11RUkxjWVtUS0dPVFNOR0lWU1xOO1BeSUJESEpBRT8/S1NPPjpOTUM8PD45OjU9KzMyPTYyNDk6KDQ1KS8rMSgpKywtKiY1Ki8mMCkzODoxJiozQmM6NipIZUhKKzpIPjNCSFMsPpBrO0dIj5yqq6KqsaSppbO1srW2srKhq669zLqtwLrHsbSttMHD0cXGvsCyvsDCu763u8SmrLarsre7wK+rsayfo6etqaiksKOqsqqwq7CvsK6rs72ntrCyqbOqq6Wlo626raqyw7q2rbupqaesqaexpaqlo66qqKKfnKOtlaWemJ6ZrJ2ip6miraakrau4s7KiqqKgrK+xrJ6gp6epmaOZmY+gppeGhI6Ki56gjoqMlZqOjYSFj5SfnJSXlYaWlJOXpJucnIqSkI2Jf36HhXx2foWDhHJxcIh1a19aYG5iUXJwXEs7hHxGP1h1WGBaTmRbTlZWVVdRXGFeU09OZ1hXVktHTE5SSEVJVlJdYzxQXUQ8RkhIQkc/PUpQTDo+T0o9OT89Mjo3OyoyNT4xMDQ4NSg1LyosLjMwOyksLCclMjM0JCwyLTg2MCkoMTtcSjAuSmdERjg7QjA1RUtYMUCVWT1MRZWYraiiq7Ocqqqwt624tq+rpqurvcm8sL22wq+xq7PDw87Pw76/tMDBw7m/s8fDqq62rbK4vr6yra2qpKeqsKinqLGltK6qsa6usrG0rLS8pLezrKyvqKufo56wt6uqrbq3pbe2pKqnq6qqraGpp6eysqSnpaGhrJeqoZWboKaepaKrpK2in6exuK6upKajm6qrrqmdoqWkpJifm5aPmJySgYKQiYScn4uKjouYjY6JgouXopuQkJuMk5KRk6OZm5mKjouLfYaBgYN6c3+Cf3xydYukh3hrX2BuZldkhmNOP2eTTEVieVdiWFJlVE1WVVZUT1xdYVVLTmhWVVZJSkhJT0JHSVNRWW9BTVhAOkpHRkVHPj5FUUg4Q0tFODdDNzI6OjoqMzk/Li80NjMpNCsqLCsuIzQuLSsmKCs3OSomNis8LTIsJjA2VlouMEpnQUE8PEIrOkpPXjREhj1HRkSXk7Cmo6uxmKuqrbastrKspqyqqbzAwLe4sru1pbKvw8nL0b/Au7m/vsG4wbnAxKyxtLGzur+9srCurKqrqLappq6vqrmwqLKyr7Ktt6q4uKaztquspamqnKOes7OpqKS0tKC3rqCqqKqoq6egq6ypuraqqqmpoqqgrZuSqqGdoKWipqOqn52ntK+pp6ujo5ilp6eqnKKko6CZmKCRjo+YjX6HjYeEnZ2Gg4mJjo2Oi4KFlKKajY2akZKRj5Ofl5iWjIqDf3SGgX+AeHSCfnh2fYCHnY9vcmdmcHdcYHKHak9emVZIbXlUZFZRY09NVlRVUE9YW2JVSE9pVFZTR09YVUk+SUhPUVB4TE1WPTxLRD9AQTxAQ1VDOUFLPTU7RTEzOzo3KjQ6PSstMzQxKjgqKisqLCkpKC8qJiklMzssJDIpMjAyMSUvMlFiMDI/Zj1OWD5DLD5MVF8vSmk1T0Q8lo6xoqarr5qspa2wtLWwrKawqqi6vrvAsK25rqG2r8jHyNHAvr27u8G9usK/vr+tsbGxtby7wrGxs6qzqaS0qKWts7O5sKOuuLKws7usurCprbarqp+qrJ+joLatqaGfsLOitaqeqKepo6qhoq2tqL2vrK6toqion6yZkLChmKKhqKifqJuZqrGqo6CuoqGUo6Ojp5iaqKWYl5iej4qHlIh9jYaEhKOWhIGBioWOi5CDg5OfloiRnJCTkI2RnJSXj4qGhnd0gX98dXh5f3lycnhmf4akdmlfZGmAdGaIi3xTWG9eSnhzU2RTUV9NTVJaZk5NVllkWEdSaFFRP0JOUWFROklITFNJcVFMUzs8ST87PD07QEBXPDw/SDczQ0IxNTo5My01OjopLTMxLS01KSgrLSw0MiMyKScsJS47LiYxLjAtMTQlLDBMZzo0OF89YWQ/RjFDUFtbKkhNOVVANJGQs6Glpq2kp6Stp7WzsqulsaequL7Au6+nuaqmr7HJx8jRw7y/vri9vrzIusC3r6+zsbm7uMCysrqsuKyitKeorLK2ubOoqL22rre+sL6nray1q62cqa+joKWtq6icnquzpbSomqqnqaOonaOpqKm+q7Swrp2qpKGvnJuzo5aknKWmoKWcm6mrpp+cq6Kck5yipZ6Yl6ipkpialJCKgo+Ffo+DgIidj4V+fYuHkI2Og3+TmpOFk6GMlJGLkZuSlYeJfn9ye3p+fGh4fHlzbm97ZoR4hIlkYWdgcoR6bGZ4XV5UP1d7bFRhUFFZS0xOcnVdSFpbZ1lFVWVQRD5KTkRDQTlIR0tTP2piSlE4PUg8PDw+Ojw/VDY6P0M0NUg+Mjs1OTAyNzw1KC41Ly0xMScvPktIMCUaOTAlLCwwOS8sLCs2JzE3Iy0wR2pJMTRYPWZiQUo3R1NgVSo9OURXPSqQlbKaoKCqpqWhq6W4s7OmqbGmrLjBvbWvoritqKiwwsnJzMG2vcC0t7+6yLXCtLKytLG8uLm9ta25tb6toLOnq6uwtri1rJ+/vaqzwbS8oa+ytaqsn62wo5ymqaqknpulsKewoJ+rqaehqZylqaGtvKiusa6hq6Okr56fraaXn5qhpJ2fnJqkq6Ocm6WllpeVoKOXm5elrIyekZGRi4KKgICOgHuZlIyIe36LhY+Ni4mEkpiQhpSjiZOSh5GakJOBiH15a352eXhjfHpwbm9xdmd/c2mEaGVnXmxzjWxgaW9gbz1aeGxVXU5QUktJTVRaV01dXmxXRFdfT15QSE1ERjs3SEVLTzxyaEtLOUFFOzs9PTs7PUo0OUI8MztHPDQ/MTgtNjg7MigwOS8sNC8uPS0qSz4pHTQ5JicuMzQuMCsvNCYsOiQ0MUFoWTE0Uz1lX0RMNktWZE8qOzFOVz0jlJmtmqCYqKWkoKikuLCvpK+wqau4wbmyrZ+5r6uotLrIy8i/tsK+r7S9t8S2wrGtubGzwLS6vbeoubi9qqO0qKmqsa65saucvL2lsMG2t6KvtrWnpqews5+epKaooqWZn6yoqZ6gqq6moKaYpKmgsbmfo7GvoayhraScp6apmpqbn6WWnZ2bnqqnl5yhqpOZlJmfk5mWoamRmomOkIZ8h36CjX18oIyNiHiCi4SJi4uFh5OajomVnoiRlYKLl42RfYV8c3B9cXR0YHp4aG1vb21ofXFie21pZWJcZIR+XllzanFKSX5pWFlNUExKSFBSUUlPXV9uU0RYWlJoTkdLRUY1NkhCTEk1WmVKQDZFQjk6Pj0+OjpDNTk+OjNARjwyQDIzLjo7ODMmMjwwLDg1QiopLUIqLDQ7Tk5AOzczLS4rLTcqKjwlNTM8ZmQyNE0/ZV1GTz1RWmdIKj4vV1U1KJeep5qdl66hoaGlobirsqW0tKmoucS1sq2ft62urbC0xsjAtr7BubC0vLa+u76vqr2wtL+wvMO5qLu6t6entamorLGttLGom7+3pq69t7KfsbewqaWnr7GboaSgpaWgl5uwp6Geo6ivoZ+hk6Wlo7ewoaaxq5+so6+YnKqkqZ+Xmp6llJudm56nq5qcnqaXlpiWno6Tl6KoopCJi4+GeoR+hIp6j5aJjYZ4gYeDh4uNhY2TmI2PlpmKj5d+hpeMj3mCenByd29vdF95d2Rqa2pnZ4JsZXJra2RnV2Fyf15Za3VpWUV9XltYT09LSEhSVUcyOl9ebVBEV1VZZUxISkVFMDdGP0tCNklKSDs2Rjk0OT49PDk4QDg7ODo3QEk+ODw0LTM8PDc1KDU+MSw7QTEoKzY8IzhSPSoxMTM+RDUsLSc0Mis7KzEzOWNsODRIQmZbSFRDVF1oRS47MV5RLDKWpKOYlp2rnqaho6G4qrChu7ilrL3Esq+uorWvra2vtMTEvbO+urews7m4uri6ra2/s7S4rr/Bt6u9urSlorOrqKqzrK6yo53Dt6aquLesn7K7qqelqK+rmaOnnKWmlJihs6aZnqSpqZyhn5SmoKS5qKSnraaepaGpk5+poaGhmZueoZObnZeho6ycnJujlpOVlpuOk5Ojp6SQiIqOhnmEfIWGfZyNiYqGeICDh4iHkYWVk5KMkZWUjY6Ue4OXj4p3f3xsdXJtbHNieXRnZmlmY22EZmdoZGZnaF1kYmllWmV6YmBQclRbW1JLSkdJT1NAICpqXmpMQ1ZVXmBLSEdFQy46QjxGPDZLUEQ4OkQzNTc9PTg5NT86OzQ+OEBMPT45Myk4Pjw6OSo2QDMuRTQoKyw+MC1OPy4rLTctMTE5NSwmLjUtODA1NzZgdEIzQ0RoW0tXR1VgaEIzNzdhTCcyn6Slk4+mp5yfnp6ktq2oqrq3p6vDwLavrKK1rqevr7fBwL2xwLaxrrK2tbm4tayqvLOvsrC9wLeuvLywpJ+2rKamtaqrr6GhxaypqLK1rKy0uZ2oqquxpZidqp6npZKZpa2jmJ2kqqGboZyYoZ6nt6avqq2hoZ6dopWgpp+ioJmcm5yUmp6Vpp+uo5iYn5aVjpWYjI+YmqegkIeKioh4hXeCgoKch4qCiHt+hYiGhJCDlpWPj5CRkJGNknuDlY6Fc399Z3lwbGtsZ3Vza2FnY2Jzf2FjZWZlaGhhZW5ZXVhcbGNhTGdXWmBWSUdIS01SWD45YGxpSEJVU1xbSEhGRUEuPD85QTg5UkZANzpCMDM3PTc2OTI6PDk3OjlETT1CPDAqPEA7QTwtNUIzNz0rKywvQSpKSy4vKiszNzIyKDU3JCs3LjcyNjg1XHlOMj5IaVpMWkpWYmZBOjNAYkYlNZ2koZKMrqGamaCXpbSyo7K+t6Gxxbu5sLCjtqyrrqm5vr27rcCyrq+utq6zubKnq7mwr660tru2r7m+rKadtaugobKlq7CfpsWhs6awsrG3rbSdrK+srqKZnaeqpZ6Vm6emoJmlo6icmp6blZ2drbCmuaeuoqGamp6Zn6OapZ2Xn5iblpuhk6qXramclZ6dlI2Vmo6VlJinp42MiomOe4F0goKLmIWGfIiIhIWKjIiShZSckpGQkJGXj5B/gY2Ogm+Cf2d5bmlramdxcmtbaGNhcX9gZGdqbmtlaWVjbFxsbHVwYVNiaGNlWklGTE1PWVFQVWFlgVRAVlJaVEZHRkVALzw9Nz82PEZOYTg6PzI0OUAzNzgyOD83PTg+RkpARDkyLT1BPUE9MDVAOUAxLSsuMzw7SzYvLissLTI0OjUjMyopNi41NTQ2NVp8XTE6S2pbTVtLWGRjQEExSGJCJzSUo5yPj7GdnJWhm6mzsJ+4wLagtMG7vbmxprawqa6luLq4uKy7r6yrq7eqtbmtpLO1sa+psba2sbO2u6epoLaqnp+qo6qunazEma+msLG3tqyrnrCtr6qim52krKmblZympJ2aqqOklpqgnJKco6yrqbqepqSgl5qanqGPa6OWmZ1xg5idpYF2kqypn5aXopKKmJmAl4qfjniFko2DbWl+d4RxbIaKhn2EioZvXWRgZ4SYhmuLkJSSdXiLhH+DkH9miIBodmlmV1xpdG5OUGpjZXGDZl1kZm5raF1bXYmQhYdoTktDOEVUZ15KSFBQVVZLSFJhcHRlRltRVVBGR0ZDPjE7PTY9NjwzZlw1Ojw3NTtENDg2MDpCNz86PkZMQ0IzNDM9QEBAPTI4QEU9MSwsMDg+RzcwMS4qLiovNjY4LCMxJzIxNDoyNzZYgWwxNU9rW05bS1tmYj5HMU5hPCsvjqSaiJaym52UoZyqrqyjvcWvqbfCuL68rae3saarpLi0s7Owua2pp6y0pbG1oqe4trWop622s660rrSiqZ+0q56jpZ2nqJuwv5Wop7C1ua2to6isq6uloZ+coainm5ihpaacnKeonZOen5mQn6irpLSvo6KjnJaYmZejiKGPkpuIoYiVn6KApYCorZ+UlJ6UiYRyeIyOg4igdYeNaZeJZn5zeKBvh4eEfox8f6Ggn5l/fIefdIiOdpuKbIeCg21oZGR7bXJiVIZtY21pmHFYaW9uhlddaFpralqIcGx5codoh4RZXkZOPkZeTUVSVlZRUFJXVGdeTFpMUlJQRUZHPjw0OT05PDc7MDw8Nzk5OjY9RjU4NjA8Qjs8OT1GUUc9LjU8O0A9QD41OUdBODIqLzE8STovMDEuKi8oLTQ1ODMlJjIxMTU+MTw4WIN0MTVSa1tOW0xbZ189SzFUXjcvKI2nmISerJ2amp2fq6qoqr7Dr7K5vLfBv6qkt7GqrKazta6vs7arqaWxraW2s5ustba1paaps7Gtsqiunqqhs6mgpKWboqWesbiVpqent72mrKapqaynpaGfmaGoo5mZp6OkmJylqpaUopyUk6Smp6G2pKOfo5iVlJiUnIiukJiViqqMmaOdhrGBpa6flZuhl3qC1Kh/h5TAm8Z4d7Glt5ZkgMCcv3mEhHmPg3yQkJHKcZa8nMV7cranupB7gWyXsauxeWhsWLGubmVpvJK8bmh5bXGP2H1Sa2K2sn1+cJR1mqGqkFZOV2FPVk5GVVxYUFBTi1tXW1BAXERQTkNGSTw8NTc9Ozo5Oi49Ozg3ODs5PkY2Ojc0PkA+Njk/RVJJOi41PjtCPD9BODpKPjUyKjIyQUUvLjMyLisvKS0vMTg2LSAvNDE2QTE9OleDdzExVGtcT1tNXWdcPkwxWls0MSGPp5SBqKqfmJ2epa2yqrDCvbK1wLW3v8KrprSuramosLWqr7a0qKimtaWoua6csrK2qqWkp7KvrrGmq56npbKloqKgl5yioLKvlp+kobW6o6mooKytpKKdmpqjqaCYnKmgn5eeqKiRnKeblJ6ip6OhsKOen6OWl5OYkpmFr2tqjI6qf2iFloetZnGfnpWbqZdxrqGkfne6fGugj3axX2q0W6WAZZyQYGaBemZ/aXhqqWW+cmemjHaxanyxeHWRlGNtbaduXISgRWlnh5ZFdZxgfWZ7o6aBWF+Lq2h9j3h6aqg4Sq9bWFRsY1pLT1hfXFZWO06HUFdWL0lTU0pDRUY9PzQ2Pzs4OjkwPTg5OTk6PTxEODs6Nj1BQDY8QEhRRzkwNzxBQz5ARDhARz0xMy0zM0UzLy41My8rLyguMC46Ni8nJDIwM0IvPTtVgnYyLVZqXE9ZTF9nWTpNNV5YMzEbkqKVg62npp+jpauyuK20vb6wt8WyuLrDp6mwrLCpqrGvpLG6sKSlr7OjqrmpnbKysKOkoKqtsKyvpqifo6KxnKSemZaZnZ6wqZicoqC1s6Gqm6GtrZ+dmZeho6mdmZ6loJyZoaikj5yimpehoKyfpqagmp+hlpWRl5GahrWbtXmHqZq2mXeHs5u3f5SXmKyXf2uBpnqBhYaRlJJ3q2dqsVuse46HlHSJcI6GgH+IkJd4g4KKl4yDoI+FsHZ3n3Fra218i0+lWEhjY5l+Y2ilX3lxdVKShl1QqW5jcHqFgGGdL1KibltUa2dgTEtcZFhcWkI+sHdXWEEjTWlGQkRBQEExOT44ODo4NDs6OTw5OkE6RTo6OzY6Q0I4PT9LTkg6NTpBRkJBQUQ8RkQ7MDIwMTtFLDAuOTQwLC4oLzMsPjgzMR8vMi1EMTw8U31uMytYalxPWE1fZlc3SjlhVDUwHJeglImzpqahrqmos6yqu7fCsLzDrbm2wqusra+vqK+zqqKvvKuiqLatpKy1pKWys6ijop2nqrOpsKimn6CgsJegm5aWl5ugsKScm6Sota+hqI6pp6qbnZaYoaapmp+do6CcoKOlo5abnpianqOrnKaanJqioJeTkZOTnYTVk5m5cbHCf8aHfdaUnLt9nJeoko+djaR7jYaigaWCeat5j51Wr3uJfp9quVq5d4aEfaaClHyZeqp5jp2Qe7FtjoR0kLuGb5VQr6fFilGgemNgqmJzcoZrlodeUrW0yIV+iHxjpDNCnXVdUGpoZFBAWGZZZGFKR0xqSlpTT1lmWkNDP0U/MDw8NTk8NzQ8Ozg9OjxDOkY6Oz42OkBDOzZAT0xIPDk7REhDQkNEPEVGODEyMTFEQi4wMDQ4MystKS4zMjM5NzEjJTUqPjM9PVF3ajYqWWlbSltQX2ZUN0g6YVA3MiWco5OZsaippbOqpbWopLy4wbC6wLK3tL20tqiysaSys6egr7apm6i6rqSwsaGytLGhpJ6eqKmxqbSpppyen6yYmZmYmJaYo66fnJeorbGpo56PrKKnlZ2XnKGmoZiioaKhm6KiqJyfoJ6VmZunoZynlZuan6GYkJKVkJ2Ism5otXKsiHCPp3K0dXS2e5yZpo6QnY2jfo+eo36wdYKQ0tJ1XK58hX+kbpuqpmqGhX2tfZiZkHuxc5Odj3mzZZZ0hZ5un2aUUsmLWsJcn3liX61fdnOFYZaIXVnKnW/AgHRNS7VTVcZkVVFqY2VYQU9qX2xpUFVGSDk9V1JbVllIQj9KPDI/OzU9PDU2Pjs3Pjw9QztHOTtANzs+RDsuQ1JKRz4/PElKRkNFRD5JSToxNzQ2QD4vLjI0MjUyLSkuMjYsNzQyJh82MDs1Oj1QcWg5J1dpXEFOVF9lUDVHPWFNNjIuo56Rpa+tpam7raa1pai2u7yzu7+4t7W8vLSmtbWjs7KkoKywpZinu66lsrGdtLiqoKWdoaqlsqisqqWanZuqn5aWmZmTlKSropiTpquxpqGVkqufpZKUoZylp6CVm6anopujn66aoJ6ekJaco5+dpZSdlZmjnpWZlpObhax8eKh3o4+Lh6pwrouFqISamqOLk5qLon2Sl4euhH+Bs1xyslOvfYKCo35x1313hH6PnYaZmnevhoqRnIh3tGGaZZqCgZVskluwV0uadZh5ZmCtXnZ2hmeXiGpdr3eVn493bDV5yK6zX0NUb15nYEVQbF9wbVZVTS5lY2hSWVA7QURATDo1PzkxPjwxNj85OEA9OkM6Rzs8Pzo+PkU5LUVVSkVAQzpNS0pCSEc+R0s5Nzw0Njo+LzA0MzMzLjIuLjE4Ki4zMiUhMDM3Njc9UGtlPiZWZ1xAPVZfY042R0JgSTo3N6CdlKC3sZmzwa2osqeqsrq3tbm+ubizt761prm1obatoKCprJ+VqLasqLGyq620pJupoKCoorWnpqqkmp6WpaGUlJ2akpakqJyUkKetsKWglJmon6KPkaKaqaahlZqmqZ6dpJ+tnaCdoI2Un5yfoZmYnJWWoqCUmJGmnYapfn+meaGPkISqcK2Ng6eGl6GjipiXiKOBkIaUqnp/i515cLFaqIOCiKB4dNh/dod0p4GOm42SpHyVkJ+Ee7JenGSgfYKVbpNcq1xbk3+Rf2hnqmNye4BqmIZxXataiaCPa25kT0pDoVxaTXRdYmZNWmFfcnRfSlU1SpqRWEhFPUdFQUwzNUE4Ljs+MDVBNzhAPDY9PEY/Ojw2Pz1CNy5IVkpFQEg2S0lOQElLQEVOOjpANC47PjAwMjE1NCsqMDUvNywmMjEoJCQ2NjcxPE9lZEEmVWZbPzFUX2JMN0ZIX0MxPTeinZqavq2Ys8Guq6yop7WxuLG1v7m6s7K5vKq7tqGypZ+mp6eek6uyqbCqtq2qr6GYoqCmpKS6o6OsoZeckqOglpWfm5WZoaGRjoypsLCmnZaap6afjZKkmKirqJWYqaifn6CkraOgnqGOlaGZoKCSnJeblZ6hlpePq5yPrm5ytHSpjHeLpnS0enW0gpSnpJOdjYmkh451uG6Le4uia2u2WqGGZZeXaKCip22UcrRzk5l/s2qFkoitanW0YZ1mom6GkmuXXK1gTqF8h5FSc6NseX9+bpiGb1yvVjycd2VUb24uW6dPYlJrZWJsWWJcYHB8Y1NZUT4/bG8yQkJAPk06ITdANi47QDM3QzU4Pz8zOzxDREJKRk1JRjYySlRLRUJKNklKUD9IT0NGUD08RTUwOzswMTAvNzUsKywzMjYvIzAwLCwdMjg5LzlOYGVEJ1VkWT4vVV5hTDVGTV44MUE4pZqcnrqjnLHArq6rq6i3qrivtcG1vbKxu7iswreqrKGcp6SinZKrq6i2o7Oorqqhl52ooKWruJ2jrpyWmZCmo5eOnqGcmZ6fkZOVq7awppiTm6yployTppqlraORl6uypKCeqKywmKGikJmhl6CblpuXoZOdqZ2UkKuZh9OUmrt1scSAxId+1pecuHmKkpmOmIqMp4d5orZ1fXd2woKasmGDunnAfHW4YrWBjIepfZaCrKlxe391vIinoGmdYaaOr6F9jHSHq32+bnO8dLKDdXiBim2aiHBtjaR0vV13fVthebxqWlZbaXleaWBkZmJteG9YW1lDQUBxP0NHKzRIIic7PzEwPD83OkI5OT1DNDxATlpeYGBfX19aUFBSS0VGSjRITFJASk5FRk9CPEU4ND05MDIwLjg3LSouLzE4MCItMSwzHiw7OjA4TFhhRidUY1g8L1ReYEs1PExcLTZAOaean6K8o5eww6+tqqqtsai5r7fFsbuzr7ywrsGyraajn6SinJyRq6WqsqW1p62kn5aaq5mnrbido66ZlaGRpqCTjp2jn5mfmpCWk6+5sauVlqOnppSQlqWdpK2fkaCoq6Ccn6mksp2ipI6moZWhmZuWlaSZkLCgkpWqn4WQmbaAkpKNuJZ4g5ObtndubG90b3mPhI6Jcp7Au7yae4GyqHCBdJG5g3yGhouGjHuKh4yXfaS7ub2cdXmzo3R1l3V0sHWYnmaGaY22dHJxd7aMXn95fYhng3lseWKLrHB0hX5YW6dpRGRZVGZfY11jUWdmcW11Qk1PTEQ7Wkw+SjM8MCA4PjsuMz1BOTk/PTs8QzZCVFlaWltbWlteYGJgXVNHR0g0RElUQktOR0VPRj9HPDc/NzA3MC85Oi4sLy0qOC8lJjIoNCQoPjcvN0tUX0cnU2JXOCpPXV09KztWVic9OjymnaGhv6aVssKzq6qorKuqu6+xxq+1tLC4qLW5rqukoqefoJ2ZlK2lrqqntqion5yWoaSerKW+p6Gql5WckaKbkpCiqKKTnpeSmJSytbasmJ2jpKKLk5KmnKarnZappaadm6Gpp6eiqKCRrJ6Xop6Xlpidno+wqZScp6KPa39qnKl5iXR/m492e2aIe72+wLpvkoNxlIVfcmpaXpuJYWOHj5ZsYH+UY22cdmKVbICZlZRlXmBjcZqJaHKMe4aUZmp+cHR4fn1iW3h0gWhQXG6EfHyKaldseoFySUpvhXBOck1EVlxmYExaV2ZjX09abXZqclJPRERNPEhJPEw+MiwyQT84LzU/Qzw5O0A7PUM+UlZWV1laW1tcXWBhYWFgXFVHNUNGVUVKT0hGUElJSDs4PTUxOi4xOzouLy03Nj01JiIvKjIsJTs4LTdJUl5JJ1NfVjQpUF5MKDM+XE8nPzI+qJ+oocGkmbS5tqOspq6nqLWyrMissLSttqS+srOooaSqnqOcmpqsp66kpbWqpJuYlaKcp62pvqippZWUm5agmpOZpqmokZ+Qj5icsLK+rJqmnaeiiZOSqZuopJycrKCjmpyjp62in6mhma6blKagl5Sen52YsaWZoqiZnZKfnaSmm6ikm52anJuRl4Jobn1yd5GXlJCEibSqjYWYlY+KjJiXiJSViYOTk5CJjZKUmZOZl5qfoZqblJ+bjYF5pIVsaXuQfYB1iYuCcoJ4eXZ2in98iWpzgXSDdWR3fXZrb3lsX2Jbb2dNWFlmal9XWXB6b21mU09GUzlQWk5STygrOktCNjM1PUBBOTpDPjxFTlNTVFZXWFpaXF1gYmJhX15eW1RLQ1NHS05ER1BMT0k8Ojs0ODksMjs4MjApNklSTzgiKSsvMiM0Oyo3Rk9bSidSXlQxMFReOis9OF1LLDwtQLKgs6K/oqOwsbegqqazp6awtarJq62yprWmwKm0oZ+lppyllpWhq6eto6S3rKCZl5agmK2qpsGfrKSWkpyXn5iUlaOfnqOok5CYqKiyw6+Zqpyqno+Wlqmeq5yeoa2YoZudoqWvpqGkp56smJalnZmZoZ6enbChnaKnlpmUmpSho5ekn5mhjpiVi4uOkJiuj3yVm4KRgYmpqIWAmJaLhI6fiHuEkYWFmpGHhoqVj5uXjpCYnqOWmZKQnI1+jWWhs66EiYR3e5CKfnd5em9neZGAgYhqdYF5iHJoc395dYOGgWp0YnhlX2hkY2Rmalhre3Fqa1xTTFBEX1VGQD4/LDRARjs0NTs+QTs8Pz4+SE5OT1BTVFZWWFpcX2FjYV9eXl1eXVhWSktMQklPTVJKOzw6Nzg2LzM5NjQuKCYkLTEuLikrKjclKzwoNkNNTEQvVFxRMDVNWzE3RTRcRzU8LECzoLmvvq2qrbGyoKqmsq2jrLOwxbCrraSzr7yktJyhqKOhnpqXqKappqSms7WflZWempqwpq6+oayikZGempqUkpainJepnYSdqaujtMezn6mjqpaWmJqnnqmcoKWslJ+fnZ+qrqikoqugq5qen6GYpJ6cn52wpJmfqZSZmZ6TppuZqp+cl2aFk31lf4+bkGN5jGxoanqQo6tqZZqYfmeFi2VlaWh6jaKOa2iMmJGid2tqi5mjn5hza216hIyGeVhlXYWBXmyLioJ3XGdzd3eSgIiBbneCeH9zbXmEc3aIh42CemiEWF1qc2Rdc4hpanxxbWNdUU5WSWRYQEkzPUY3P0ZENzE8PT9BQzs7REdISElMTk9SUlRXW15gYWFgXV1dXV1fXVpVT0RIT0tTTj0+PT02NTM1NTU0KiYmJSwqJS4rKyc2KiQ7Jy9BSVtKLjZaTzYpRVkvRE8xWUI7Py49pJ66vbmvq7Owq6Wora6wp66usL2xqqilrrCwoK2XoaSeopqapqycraSmqKmzrp6WpJCjsKa2uaWuo4+PmqKak5KboJmZppZ7pKuiqLTDt6Whpq+enZWeo56jnaSqqZKfoZ6gqq+qqaKqnqabpZ6noKuWoZylsaSXnayWop+blKaZoKyZn369hIlztHOFn4ataHe5xLhxkqGjeqaYmXSrgn3LwMC6cYujh4OefZaYiJ7AvYKWnZ2NnMHBe4F6kYyawsB9aqWyb42Bb8p6f5t4koSPgHZ5gYB5cXuAhnB3hYuSeGx1kWJlXndjX2WAYl50aG1kYlhLVUlRWUhPRDJJRT9EQj4vPD8+QEE6OERDQkNFSElLTU5QU1ZZXl9gYV9eXl5eX19fXVxTTVBHVU5BQD89NjQ2ODI2NiomJSMpKiYuKyopMTAfOSojPklbTCojQ1AvI0ZbM1BZL1VBQjsvOJWiucO0r6+/qamUo7CqsK+uprK1r6qmp6axq6CrmJujoJybqqeinayjpailpbSknqOTpq6tuLSnr6KSkZmdppORoKGYm6CeiKarpKutv7+xoKivqZaRn52imaOkqqOToaGenayuqKqlo6Gkn6OknK2pkaSbqa6qnJ6rna6jl5iml6KkmJ5/zpR6e6WCepaXm1+tj12OqIChoXynlZt1q4OBr15kjKp7qIeFoHSXk4izY4KrhqCNjbNqhK90fJaHuGGCrVmjzW6Qdnvbe3+ZcX6Ik3Z/ZXuIdXZsfodtfYWPkH1rgIxfcGpvZmBfeGRbcWhqZGZgUlRTV15KT0M1QUhFRDg+NTtAP0E7PThAPj8/QkRERklKTE5QUk9TXF9fX15dXV9gYF9fXVtXT1VKPT8+PDU1NzgxNjQoJyQhJywmJi8oJiszHTYwJDc6U0wrLC1KMCc7WzpMLSFQQEY0LjGswcC/tLSwt5iekaOqqa21q6ayrayspKymsKqhp5yappicoq+foZ+op6OmoZ+wrJuelqaurbGrqKyglJKbn6WTkJ+ll52oo56to6qwqL/Fsqepsa2Wkp6copehqqqflaGenZytrqapqJulpaKgqpKss5aloqqqnqSnp6KyopObp5yhnJaVkZehcoaMmHaGqIdxsXydcax9oKCBpY+eeKuCfq1/nXKtf6yHhp92mJJ7fJd+qoiijJGLnH2reoiSj59/eq1WnMR7kHCSwX2BlW11cIxtZndlhm9heG5yboiJj46DbI+NY21zdW9gZm1kX29pam5mY1dTXGBaUlJDOElJQEM8PjxARkRDRUE9PDw8PkBAQUJFRkdFQENJU1dZWlxdXl5cXl9hX15eXVtaUkM+OzkxNDc4NDUyJiMfHCAxJyAxJx8nNB41LSY3PVdKLTwoPTEpM1ZARiEcRztDMS0rr9PGx7Kzn52jj6Oioq2vt6+psaeoqqiuq6unoqSdmqOVn6aroKKmoKioo5+esK2Ym5aop6+tqKepnpeVmqSikpShrZudp6OvrKKstam5zLGspq2rlpScnaKZn66snZahmZ6eqbGnqKibqqejoaqar7GiqKuuppqnq6urs6STmKSnnJaThaRrpHWKeql1e7JxgqWKmIxwiKCbh6RfYVKrhYCug5x1roKohoafepmXhntmgKOKpJiGgaN9qX+BlIauXnuoVZ2ikoF7o5+AfMSwxYxzr7SzuXJiqa/CdGiLi5aNgGuXkG1reHh3bmtmZGRxcWZ7aWNcVl9pWFhUTExRTENDQUI7Q0BAQkk8PTo5Ojw9Pj4/QT04NjtETFBSVFZYW15eXVxeYGFgX15dXF1bU0lCNjc5OTY2NCwmJCIgJychKy0iJC4hMy0mQERXSCxHKzU2KjFQS0wjIEE5RDQsJ8LJ1dbAoZmrqKGvop+wtLCwqa2jp6eqq6uopKagm6WfnaanpqSdrJqirKGjn6+jnpuTqqS1sK+hqZuclpWnpJGboqifn6acsKWiqLGstsextKirqZWRnZ2hmaCls52aoZScnqeqqqKtmqqmoKGporKsoaqzsqKcq6mxsLillJelqpqdk32qbZ+DiHareXywboKki4mflpWeloHSuLS4yYGCsl9hlKmDpYiHoHqYlpp5qsl0mqOUqKmQkpqMfpqJmsbGd2WhgqVzgZ+Ogn2vX2+1Y7F1S6OGbadHg5Nkjo+bkXtvlI98bXl0fHptW2VqcnFmgGleYVhjbVxeWUlMTEpFREJBPUE8QT9KOzc5Nzk5Ojs7OzMuNjxBRklMTU9RU1daW1tbXV5fXl9fXlxcXFxcWE1CNzU3ODUvKSglJiUkJiksNUZOUFBNRkxKVkYqTDAvPi00TlRRHRw7PEYyLCSopMDGua2psq6tpqKcsrmsq6Glm6imqqyppqCmpZiro5+vrJ2moa2an6mlnae1oKOYlKirtrOsnKacoJaQpq2Smpyno6Cqp66ho6epsLPBsbKprKeUiZidpZuipK+ml6KVmJylpamZrpyrpaSdq6O2rKGxubCenLCotLS1ppaZqqacoZCDnk53moKAnnqEo3yCpISGpp+cn5SEuHx8ermCf8zGw7Z3m6KRi59+mZeXinafl4qkmKSnfq+Fm4OehKx9mZRhpWyjcI+FkIF9loRyrGCkc3GAmmG8fVJVdY2RoZV6fJCOh3J5coR+b1tsbndyaoFuWmNfaG5iZF1MTFFTQUhHRkg6Oks+QjEwODg1Njg3Ny0qNT09P0JER0lMTlBUV1lZWltcX19eXV9fXFpaWllVU09IQDc3Mi4sKi4rKicmP1FUVldXV1lYWFdVT1RGPEUyOlBbVBwbNj9HLC0gjIeZqaykq7mrr6CboqyztaafoZWlr66uqKeepaWapKehs66iqaezoJqppJSjtaOjlZehqbW5pJyjnaOTkKKymZ6bpqWgoq+tnKSoorWxw7CtqaypkYaRnKedo6ScpZeemJiZpaOnmK2hq6Kkl66lu6yit7aunp62tLqztaiaoLGkpqCIkNK1w7d5h46FkZOPgKZ4lKJ3jKGShaWDi3Krh4a0bnJpmaSdlYmffZeZh4eQc66CpZujjaaKk5yIlJCabXCyXKVzk3qcbJl/e5l+bqlhonJyfqBic7K4aHeOkqSXfImKj4h1e3iNgWxod2l4c25/dFxkZG1tZmhgSlpXWDxIRj9TM0BGPjwqKDYzLjAxMykmNDo7PD0+QENFSUtOUFJUVldXWV1fX15eYF9dWltaWFVSUlFGOjIyMzAvKysoQFFSVFVUU1RWV1dYWFdVVVZUUU9RW1UlITJBSCMpJZJyjYquv7+8u7Wel6ikrraiopmVo6qnramqmaWin6agoLWmoqmnsaSUq6OPpK2knZCamqq0tKSdpZypkpSXr6CgnqajnKectZmgqqO1qsKvqKqooYyEj5yioaajlZqanJiamKajpZepp6ugo5uspryslb2wrZ+jsbW7rbapnau0pquafKiRfXyweIuApKWInG2yb6GHrXyij4Ool5qBrImGrYWglKigo5eFn4GZloF7kn6rgZ2Zlourd52gj4iTkn95r12jgXymp2SegHyXdWquXaVscoWZXWBbjKBtlI+kl4GSipOId3mBln5pbH5ifXRtf3lfZ2Vwb2dnaEJZX1o9SlMyUzhBQUM3JCQzKycnMywgLzY2NzQzNjpAQ0ZJS01OUVNTU1ZaXV9hYGFhYV5dW1pYU1BPTkk4MTUyLiosQVRWVlZUVFVVVVVUVFVUU1NWV1dYVlVWUUhGSUojKCi8kpuEqcbDt8G0n5qtoK65pqOOmqOkoK+uqZ+jnp2tmJ65oKOrobCqmq6hkaqppZaKmpCtsaynoKibrZiZj62ioZ2loZmknK2Xn6iltqi+rqSpo5+Lf46bm6CmnpKUmZuUmZmlo6KYp6uqoaKeqKe8pJfDraujoq20vK2wqaO2sautmnevfpGLnIaHfLqtiZhksIxllq59oZCEp5ecgq2LhbCGqJqkoqKRhaBcbGuCs2B/rXx7goGybGZumZeLiLFafbRbpINryKJmn4F8u1l2tVqyfVOvgXqsWIChbZeNppiIlI2Sk3h3jJt8Y3N8YoN3dIB8YWlmb21mZWZPVWNcQVRdPUgoPjk9NCEhLCQfMi4gKjEvMDQ1Nzk6PEFDRkhKTE5QUFJUV1peYGBgYWJeX1xbWFVQTUpHQzU1My4vQFVZWFdYV1hYV1dYV1ZXV1dXWFdXWFlaWltcWFdXR0I70p+zsbe+u7TBs6Ocraalt6mgi5mgn52ysaieop+dtZigs6iqq56wrZ6snJWuqKKOiZuOr6ypp6Oomq6Tmo+pmqGdpZ+Zo6KlmJ6iqLGou66kqJ6djnyLmpahoJmQkZqckZmXqJ6fl6etpaOkoqSpup6gxqemqaGstreusKmhv7CwsJiCqpKjr46bgIakl5iQgIC4w7qEj52ThaiZnYOsi4OviqmdmqarkX7VvcKqYqS/vX1/o4KD17q3tYSUkoKevb6EaqOBb6uEbp1/erKxx4Nrq7G9rHl4or67dICVjKSZjZiNk5l3f4+ZeWJ8eWSMZniBe2BrZWpqYlBiW1NpXEBUYEJMKTw6NC8fHyQeJTIgHCQoMDQ5NjY3ODs+QURGR0pLTU5OUVRXXWFcX19hXmBbXFlUUU1IQz48QT81PVNZWVhZWVpZWlpZWFdXWFlaWllZWFlbW11dXFpWWFRXWruVtLSxwLmyvbOina6nprOmnYyXpb+ptq+nob+mprGbnrGcuaifrq+lp5WUr6yXjIOaka6mo6yhpZyqoJiKo5OmnaebmqCoopidoKusqbisp6Oal5J7h5mRppuSj5CYmY6Xk6iYnpaoqJ6opqCiqrqeqcWjobCkrLS1rLKso7+rsrKcdXaqpbeGZYqgcGeskIqPbm53pZCboIJ2sZuXcJGOcpeqpJuZr6RybG1tZot4b22DmXGAemlwaWeJlpWXcWhphYZncYZkXYpjaW9aXWd+eKZgYnKQknBmZICNko2glZWXjZKaeoWNk3RkhndnjGp4fnlkbGNmbGJKZFdJalk6UGREUCdKOSsjHCAaIiwpGBsYLTIuNTo0NTc6PD9BQkRFSEtMTU9RU1ZcV1pcYF9hXV1bVFBMSEQ9OkFCN01YWVpZWVpZWFhZWFdXVldZXV5eXVxcXF1eXV5dW1tVV16ola20qbq5srSqqaKun6SzqpmSvbHDx7y0qZ6/q6yjoKeroLqjpK6sraaOlq2qkIyFlZatn6aqop+ko6CRi6WSppmpmZajqaCWnKWlpq65qqyZmpOSe4SXjaaXjZGQl5SNl5Smk52Wp6KZr6Wdoqu5n7DBqKW0p62xs6ywrqq8p7G7mIyiqaa1nImXo5iGqZuQlJ2SqrSanKStorSYpKOfoqOeo6Wil6ynjJKTjYeTnZ2VkJmTmJCNlYR/pJqXlY6Lk5KKkIeEfmeMgXSDd3SHjHGnbX2Wk5SUgYGPj46Nm5Gdk5STnYCFkotwaI92b4l3dXx5aWtkZG9jVWFYQGlaR2JfTVgrRT0rJiE2NDAvHxwgJTIoKjc5OTQ2OTs+P0FCREZKS0tNUFBRV1VWWV5fYWNdXlRRSkVDPjk9QEFTWFtcWVdYWFhYWFlYWFpbW1xeX19gXl5eX19gYGBfWVlgpZapqqS1t6+uorClraCgtrGRjqrEvMO5tqmhpJ2bpZ2wqKS3p52ptaeokZiso4uIiY+cp5atpKGaqJ6fk5Wkl6iaqZmUpqCjj5qnmKC0uaeqmJqQjHuBlIyhlIqVkZWQj5KXpI6dmKiemrSjnKart6ivwq+kuKewsLKvq6y2vaOywJqTp6SmtaKSnaefjamfjZKfoq2xm6Kks6uzmqajnqasoJ+enZitnpOaopyUkJermY2YmZeQlp6Rh6CelJSGk4yPjZWMgX9mjYh1iHd6iYR0nGqIkpaVkol9jJaRkJaQnpCZkp2BhpaFeHGUcnmJf3F7fmpuZF9waWBcX1ltYlBgYk9YOUZGRT0yPD04LyomKykmHSY0MDY2NTg6PT0/QUFDSEpHSktMTVNTU1VaYGBpYGVWUEpBQ0I7OUVNVlteXltaXFtbW1xdXV9eXV5fYGFhYmFhYWBiYmJkYlxbY5iWpKijsLOsrqOpp62gqLWqkI+bo7K5raqroaKZepyhsKSmsamXnLimo5SYqZyOhoqJm6KQr56klqigoZKXmZyui6uWj6iZp4yYqI6duLWjpZibjYh5gpOMm5OJlZGTkI2RlqGLnJ2nnJ23on+DrrWisLB1pL+ks6B5e6Kttb+XeLCmoYqAqn9kXGJ3oI6knoOWfm2UtZ2kqbCspWagoZR0epuZcIGZqplsf6SpimWcpZyRl5iXi5KbkISdm5CUg5OHjo6SioV4a5CIdodxfIaBgWFpiYyVk4xbdpWRZ2eOjHF5oZWVZHiXhYB2l2iCiYJueX9rcGRfdm9ra2dbZWNhYW1RWT1NTU5SRj1AVEI5MS8eHyY0OjMwNjY3ODw7PkBBQkZIQkdGSUtMVFVVWV1gaGZnWFFJPERHPDlVUltgYWJgXl9fYGFhX1xdX19fYWFiY2RhYmFhZWRjaGReXWaclqajobCxrKuqpamuo6etpZKVqrSusKWZqaWql3OLnK+gqKunlJe5oKCPnKSekX6IiJqejayapJWnop6Ol5KehXWuj4immqiRlqOIm7mzp6CYmIuJdHaSjZaTiZOQkJSMj5OfjZmepZibsZWAjJu1nbSMko+9qKJ+p6N7pbG6g46PqJ+EjIaPsamvjIqWopp5gIushp2eo6mrqYmWh5p3pZx7iJyBmKeDgXuds3uKhqCYmZSYloGQlpaDmZpieYiRhI2PkouEbnGQiHqCcYGBhoCHdIiFl5N4lmiTdKCac3uZgpuZhJh+kYiBgphpjIyEanh7cXBmZXhuaWxqW2RpaWRxWlxHU0tRQEU1LVlUVDYpITA5PT42NDM1Njg7Oj0+Pj9ESUBJRUpLR1JYWlhbYWFpZllRSDlETDw+YlZeYmRlZGBhYWBiYl9dYGFhYmJiY2ZnY2JhYGVkY2djYWFonZikn6aurquoraCpsaenqqWZk6zEvK+glKWntJ2Pg5yrnKeioI2Qvp6ZjZ+aoZF9ho+Yl4isnaOWoaGSjZSJhoCRqI6Hopyjk5adhp65saedmpKOhXB1j4mVkIqUj46bi46RnpCVnqOUnauHn7SJtJqui8qIq6+Kt4WNsISzsoapjqmZjZ18qI9ye3ecjqaWaJWkebSMoaCoqpOZwoKAq4mZoXKegJulfZeFlbOBoX2hk5+PmJiAjpSciZiSi3yFlIaNlZOKhG50koaAe3OHgYR9hXWGg5iBj8VmgKmHj6JqnYGdl4CZgIqMg4iYb42ShGd3dHt2Z2h1cGdoa15ibmxmaldkRVxQTDJFNDZNYGM3JjM8RUdEOjYzNjU4Ozg+PT0+Qkw/TklKTENQWl1cV2JeamxcUUU9S01ASWRYXWNmaGdiYmJiY2NfX2JhYmNjY2RpaWNiYmJlY2FmY2JiaZWXo6CwqamopqygpbmxqaummpSeoaSpoZSjqbWir3+gpp2lnp2JlL2ak42gkp2QeYOWlZGIq5mcm5qihY+MdpubjqCRiJ6jm5aYl4aiuKylmZuMjH5ibY+Lk5CMj4uMl4uPkZ6Nkp6gmKCnfqGnh62doJaukKCenZGHgqGNrbKIpI6sm4yafqJ2gJmUa4GrdU2reIeNnZOcqqmCqqt+hKF8e6dqnoCTbGeXhpi3iZ5+bmBjWIOXf417ZGeLc5l9eZdsXHyXbmBTcYVcYG16hGBZZYJ+hYGZcaiqa4OjbnKlb5+Bm2dknmxabIh6ZVlfgn5hV1BvdmVudHFqam9daW9samdXZk1cV0U4QTRHQ15rNCtJQ1FNTj04NDg1OTs2QDs7PkJPPlFSS01CSltdX1deXmN1YE1FOk1OTVRiXFtmZmlpYmJkYmRkYmFiYGJkY2FiamtkYmRkZ2RiZ2VhY2iYl56guaGqpKaskqK2vauvopmWnqClq6ufnK20oaeRoJ+gp5yZjpm0mZCLnoyVi3WBlJGNiqaWlpien36ThYWso4eckYqYqJiZmZGHpa+mopWZh4mAaW6IiIuOjomKjZGLj5Ghi5Kdn5qhpX+TgY+joZSgd5yWkKeDo6mAhqywh6V6jH6Emn2icHOTh5V7nox5bYeci5qSnKqcj4edfYOidHemZ55+d6VemHt9k3Oibpi3tLpzk4iBgLaoZIHGuHxxlbaMcYCbo2N0rKthfmqds35ufoiDj4OMmHGAo2xyo3Kegn2jXpyZs5Vve5ees3RyW56ygmlicHR1cWhvWGprcXBkW2ZcYUtDPUQ1UUFZcDI8UkdfSlI9PDM5NTo6NkM8O0BJUD9UTk5RQEVfXltZV2Bge2RJQzhMV1VWY2FaZmZra2JiZWFkY2BhYmBjY19gY2tuY2NkZGhkYmdmY2holJaVo7mZq5yToI6luLWtraCaoZuio6SsmpqxrKuSl6CZoaWZmpSerJuLiZF4i4VxgJaNio+hkJOUnZd9kYqOqKCGmI+KkqKTm5qMiqinpJ6PloeEfmt7hn99j42Di5CQiY6Tn4GVm5+boJ+LiXecmKKNoHKhjImpiZ2okZiqroGujH56oJl5o5N4gHOXiIycfZWfh5uOmp2oiKNkoX6KlpCbjW2eaJuOb5qZe4CKp31yaHSqg56Dc6pnlJpdm4V2hJ1oqmqBuGZcqXCBnGGVjF+ndneKioCdaJp1h5OSmI1+nmyYj2qmmVyofne7an2pWo6EXbNnXG5xeHdraVtwaXd3YV5jVmFBUEVON1ZCUm00SlpaXk5aREAxNTE7OzdIPzpDSFU/WVNYXT5EYl1WYFFhZHxpRUI5TltdWGRmWGZmbm1iYmVfYWFfX2BgZWNeYmRvcV9kZWVrZGNpaGdraZWdiaq2nKiJY5WcrLuysKydpZuap5+drJmdsKeqnZejmqKfmZaWoKOZhomNaYiAcnuXh4yWloSSlJiPeouElqSciZWQhoudkZybiI+ooZ+ai5CKgIBpgYZ5f5aMe4iNjoeOlZl9kqGeoKGTmHJon4qgj4xwko2CqYmaoaWqoqp+sK2koriXdqOzoqN/iJR4nXqqmX+ij5+dmYmYcqF9h42wtX1smpGheH6ZtaOjq6iEmXyafJyaf3SqWl1ve5eMeJ5iTX97e4VkephCTZ9ZompzfI5vgoqEmXabeYeJsbN/fpqSpnN9nW1wfJRvmXJpo12VdkhlY2BzcH19bmVfa2d1emJiXk9dVlxUVkBZRVBmRFJWXGFYXklEPUI4P0I6SEU4TEVYQVdSWlZFRmFcWmBLYG19cUVDPFVeYlplalZnaG1vYmZmXmFgXF1eYGhiX2VjdmxeZWdmbGRlbGhobGmUnYGxrpqEVF+hp7S6s7OpmqKLmqmbm6eSoKujoKePnp2dmpmVmKGdloeHiXeFgW55lYSQm4t9kZOWiHKBiZKhm3KSkIGImJSfmoSOqJuZlYqKinyDbISFcYKhjHeEjIiGkZiUe5Gin56jiK6GfbWEj56de6aWeqmCl56RjKOgf6doeG5+mXOgc3F8nYWYb5OCrXykhKefm4KkcF6paHajZHCmYZzTj3x7mXhyc2OihpB+onKjkHZrkLOLYIKYinSqsqi8f3eDbn+/pqq0Xpxvf3KXcIJzonJepGd0pmBopmyb05h5gZpudnmXa5t5dpdybKmlZ19keXF/hGxoZmNtdXZmXmBRWmVQUWFIVklUX1dTW2RqW2VQRUNLTEpLQUpEOFBAUE1YU1hPU1FgZWVqU2R4eXdJRkVjXWVaaGlTaWhqbmNqZmBjX1xdXV9oYmFoZXxkXmRnZGtkamxmaGxomJt/saxUXUt/qrCytbCzopyYhJemoKCijKSnn5aoiZmYmZSZk5Kgl46IhXtwfYRofI+Dk5qCd5GOj4pwgIaPk5JsmJR8iJGSo5WDjamZk5KKhYl5g3aIgG6Bn4Z3gJGFh5ihlXiSoaOZn4mzoaK2i3qsp6SupXCpgJuRhoGelH6lgaOahphxnoSira+Jl4t/jKSNlYOvo5V3tba2yaJzlIyDn2Gdl6lteZaHoJt1oYd3oH6QlouBb01mo5JxmohzpXt6dWKDgm1+oGxyZGCcc390l2t7arS2tMamc5h9eZxqmpmrc4GabHN3l2mZeXSXcVBEfbNeanVreIZma2Zic3RvbFVbUlhnT1FnSVVMWFJVXGdrblVnV01KQUlNSkdKTkFRSlBkY2ptZXVzc354e250iXp7VFFObV5oXGtpUmpoaWxnbWdjZV9cXFxfaWJkaGt7X11kZ2NqZm5tZWlsZaKdibCohWU/lKKyrK+vtaGij3+Wp6Gho4ukppybpYKZl5eOl5CQm5OOiIN5a3mGZYOMf5afeXWPiIyCaoWFkoSLhZ2NeoyKlaWSgpeolouRi4CIeoB9i3lwkKCFeYGUhoiVnpR+k6Smm5aWg2dueJxsomR8cqV4nJhwaKeCmY59pXuhl4OWcp92gYmUlY+5bY+KomJ9maOXiW5za6trdaBub6Zhm2mLkGmWh5uVdaKBfppgi4aNdW+IYmihZp5/apt1cGRniIJvcqJbX1tkoW5eiIxxfIB0cmSlbniiY2anZ5dxi5dtoW9SiI9uoF5kp1SLXVSYbW1ya3GBbXBoa3dzam5RVlVVZVlTbElYTltIV2hocmpZa1ZQUkVWXE1YU2FVaGped3V7fHB9fHKCe39zd42Ag3deUXNhZ2JwZ1BraGhrbG9oZGdfXV1dYGpiaml2dV1cY2hjamlybGZrbWOdpZmmemV0bYunrqWpsLGln4t/lqmcnaOLoaGaoaKAlZmTjpqPi5eQjop7hnGAiGiLinyXmnN0iX2QfGWDh5WKiZWagnyIhpamj4Chqo+FkIqBiX2AgI5zaY+lg32FkoyHl56Nh5GppZ2JpniWm36liZaMspmekYSvl5+leZiKe6l1qJCEmm6looyShIyDvG18pa+Ch4WHlZeeon6mfHKolaGWaJ9+b6xjloqWk3iobaqjgYl1iIJ3q5GmiGuSsWx3s4ypbIuGb2+gnpKVYn+rjKp3gYCOp593n32FpJWdoGeZh3WsZp6tjLZzdr6Mo5NZg6aNq2F1cnRve3VwYmp9bmdsUlRYVGBgXGtMW1FbSV1sbXZfW3FZW19aZ3NkbW9xY3F0YHd6fnlyeYNzg36Be3uMgYKAdmJ5ZGNuc2RSbGdnb21yaWZpYV9eXGFqYmxse29cXGJpYm1pd21nbG5ilqarnYGAnqSWqqqeqKeto5iIgZapmZ2iiZqknKichIyaj4ackYWSjYyMdIV6iINvjYV+l5NzdIZykYNuf4uSh4aUkH17goWXpI1/paSNgI6JhJR1goeTbmyLqICCi5ONiJueiIuSqqKgj4B0lJeIfoF4lK+kf4KccY+GeZOOhoF7c6mNcn19epeWm4SNeHt9fYiUlZOLd5GZoaKFe3+KbIyGXHp5c3pxaW5+k4pxgHSCj5STcYaEgmWNf1+BgYx4dnOUdXB6b2+Jb4WGX3dpeI5mgoOGj6qcf3R9lmmJiG9+dXuCdG1sZoxzd3uXd4Raald5j2lud3Jxb3d4b11rhW5oZ1ZZXlZcZGpjVWBUXVFeb3d5a2p3ZGlqanV8cHF0c2FvdWJze4F4dXmCdX+Af4F5i4WCfXttgG1keW5eV25naHVreGppaWRcYFpjaWVscXVuWltia2Rsa3ltaGxvYY6Vuqmni6Gim6ekmaSdq6Gfg4OWqpCdn4iZppqomIKBnIt+lpSHjoqJjHKCfI58fo+Ee5eOdHKDcJWGfH2Si4aGj4Z5foCGmKOMe6afioWPj4SVgoaOmHdxhKqFjZGcj4eenYaLm6efoKuDiY2Vm39+ipetqJCTqJF4cZ+ThX2UcH+rh3F+lXFqb3yBn4t/kY6LaG5dhI2NnJ2gkHOXjYlydWyDdnSAWXJvh5GCfn+Mal1pZHuFhIiAYGl4e5x8hI2DdoKHhGl6jIlsYnFzg3dfc42DipGolodnjY6CbHaKgm6CindtZGVjeYJ6lVpbaWZtdlt7eXd0bnNyg2ZcbYlra2JZWFxZWGpxWl5gWV1dZHJ9enRvdGJqaml7fHF6dnRkbXRobHt/dXp9e3l6gIB/b4aJg3t9c356cn9oVFxyaWx2cHVna2dkXWFZamhranFybVdbZW1sZ3J5b2hqbWCMjKuxoZCjoZqfn5iemaihoH2ClquMn5OGmqGRpJV/e5iFfJKZiYiGhopyfICLdoWLgoSWinJvgHOYhoR+k4ODhoqCeoCEipqfj4Gln4Z3jpeIlYqLnJeEg3msgZCXmJOJnZyGh6GqnqKio4uIk5udo5mWq6Kop6GTnImZkX56kJCGqX+Ak5GSk5yxpZqUnY+NsZKYhKaNjZadoYqRnYSJk4tsfY53d2aChpGLfYmehYeLj4iIgYWEkXd8e3WbpIqHi6CMh5Z/gI2DgXdxdYaEf3iJiIuRp5GEh46HgouPinqDiIaMf3VqgIN8eZlpcWhgc4pwfXt3dm93dIFdXm+GZ25fXllaXFNncFVjW1tgbGd0e3tybm9jamlof3tteH5waHBwbGaAe3KCgHd/fX+Ee22DjIV8enl8fnqDeE5kdmpzbnF7ZGtlYmJgW3NmcGZycWxVXWx0bWh4enBnaWtljYieup+XoqGYlZmYlJikoJx6fpepjZ2MhZ+cip2WfHmVg3uOmYmGg4SGbXiAf3KAh36Ik4Rta356l4eEg5B+gIaEh3yHg4yanJKGqZ2CcoqPhZKRi5yRfI16qYONkZeVjpuWhYWbpp+imp2Gg5KamZmQmaahpp6ekJeCk414fYmQhqd8fY+QkYaYqqGck5yOjamNkoCejYmVm6CEj5iAiI+EcXmGcnVhf4SQh3aMmYGDj4KGhX+GhJVuenZ1lKSMjYabhoaQdYGMfn5zc3yJhXt5jY+FlKiQh4SPgYKJiIh0goWGiHltanx/e21oa2xmXnl/Z3x7dnR2dXt3XGBwfW50YGNaW15RZmxTZFpdYGpodHl+cGxsY2pqZ4B/a3J/a2t0bnduhHluhoB2goB9hXdxgo2Hfnt7fIB7gotgaXtrdWhqg2RqY2BpXGN1Z29idW1sVGJxeWVveXpyZWptbYuKn7iaoaSfk5KWl4uan56cenecpJCbiYakk4qYmXl6jYV7ipGDjIKCgmx7f3hygIV9ipB8a2h9gpeJgYiOfH6FhId8j4COm5uQh6abf3CKiouShqChioWMfKeQh46RlpKWkneMo6ChnZaaf4GQmpiTjZqjoqSbmJKcgJCHe4GGkYmhgX6NjY98l6SgoJKZkI+ljI+BnJKKlZmdf5OTf4iPg3V1gnF3YX2BjoZzipZ9iIxxjH6ChYaPaHhyeo6ak5GAmH+JjHODiX19cnp8jYZ8e5OOhJemlI2GkHuEhYaEc3+AhIV3ZHB6fnh5cGtqZl5+c2h8dXVzfHOAal5gdHZwd2RjWF1eUmloU2RYXmBnaXV4gXFma2NsZ2V/gGptfWdtcGp9d4V6a4uBcoGBfoF1doKNhn98eoCBfX+PanKDbnRpYohobGJfcVZ0b2xtYHhobFdqc3ZjdHp6cWJrb3mJjZ+zkqWmnY6QmI+GnKCam3t1o56Nl3+MoYqImpZ4fIaHfoSKfoiCgX9wfnp0dYKFfomQd2djfYaXioKKjXh9gI2DeZaAlZeVjJWemn1vi4GQk4Wlm4eMiYOmlYSRipWXkpF2kZ2hoZiUl3l/jpiXjpaanaWempSVnXuSiYV5h5iPn3+Cio6Mc5einqCSmI6PoYyMg5iYhJSXmn+Zjn2KjoJ3cn5ue2SAfIuGcYeTgJGCa4eDgYCKhWZ2cH2IlJqOfpR5jYt9gol+fHKAeYuGeoWSi4yZo5eChIt2h4OBgHR4f4aCc152d3xzfXZma2Rgfmlqd3NzdX1xfGNjYXNudXJtYVlfXVprY1JiV19fZ2p0eYVwYmpjbGZofIJraHRobG9of3yBeGyPhXGAg4N/dHyDjIGAfnqCg358kG11iXR0bWaKbGphY3VWg2lwbWB5Z2xhanZwZXh7eXBfcWyFhZCdr5inqZ6OjZeHhZ+TlZd8dqiaiZh5lpyLjJmQeHyBi319hHuAgoB4c3h5c32Ag3+IioBkXn2LlId/hYd0fX6Kf36YhJaTloyjoJd+cYZ7k5GKpo+MjoqSoJGDkI+Tl5GKgY+YoJqSkJF0gI6SlImdnZ6nmZiOlZd1kJGLbYiakZt8iImQiW+XnZqikpWKjJ2LhoGTnYCUlJaImop9i4qCe3F6a3Zte3+Mf26Fk4OUeG+ChH5+i4Flc2p9gpiYhYCOdZKKhXqJf3d5gX6HgX2Ej4aNlaWReYWCdIiGe35xcn6EgWtgeXR5cHxuYG1iZXtibm92c3h3c3RhdmBvbHVub1xaXl1daV1PXFdiYGdscnqIa19pZGpjaHeHbWZsaGlsZ4B8endukIhzgIOEfXSBhol6g316gYR9fI5yeYt4eG1sh2toX2lxYodocW9ldmdtbGF6aGp8e3dwYXdtioGZmquhpKmeiouRhomeipSWfHasl4yWfJ6TkZaUiHZ+e4p8fIB2d3+AcHRzem+FfYGAiX58YVx+j5KGf4SEcnqAhnqPkYeRkZuRpJqTgX2AfI2KkqOJjYqNlpqMhZCXkpWNiIiMkp2Tj4yNboSQj5GJnpmioZiXipeTcIychmeJm5CVe4qFkIpwlpqUoZGRiIqYjIJ/kp99k5GUjZqQfIuGiHRzdWtxb3V9i3VvhpGOk3J0gHyCgol9ZXJuen+blX6FinWSjIJ1intwgn+Ch32GjYuFjpaqjnuIfX6KhHZ8bmx9goBhZndzdG56YV5vYGt0XnBqenl5bHJwZXlebmxzbXNYWl1fYWlaT1ZXZGJlcHF/h2VdaWhnYmdxjW5jaGhlaWeAend1b46Fc4GBg3x1gomFeIV8eISGeoCJd3+Le3pyeYNra19vaHR/a3FubXFnb2tle2Ftf3p3cGt3d4l/o5mjqKGmm4iMioGPnYaSmnR/qJORjYagjJWTkIBzfHaFeHmAcnN6hmxyb3ltiXZ/gIZucVtZfpKNiICBgXZ1gX9/oIaPipGbl6CSlneJfoCMiJydio+GkpeWhYiUmI6Wi4qNjoydio6RhG2Ji4+RipyWoZyZloaZiWyHpoVniJ+Mk4CNhIyBeJOYkp2RkIiJlI1/fpCZfZKOkY6bk32LgYRwdnBsbm9wfIZpc4OPmIpxeIB1gomDemd0cHeCm5B9ioV7lZN7eIp1cot8h457i4eFio+cpYl8hHaBiX53d2xofX9+W3FycW9vdlleb2Bwal5vanx6cW5tam13YHBva3FtWVhgYWFsV1BSWWVlYXRvhIFhXGttZGNla5JtYGZmX2dqgXVycm+LgHR/goB5doCLgHmFfneHhnaDhXuHi397dop/anFjfGKFfG9wbHVqaG5sd3dfcX55e3N1c3+CfqWVm62fp5aFjIN+lpWDjp10iZ6TkoaKmoyVjox6cnh0gnByhXRxdYhsb2x0bId2g31/bW5VUYGrlIeCeIB2coN5gqCCkIGSkpibkZh3kHqCjJKkmpOOiJSYkoSFlpiLk4uJjo+HnYSRi31yi4WIj4icmZ+bl5WBlYBqiJ+KaIiiiZSFkoSKcYORl4+ajY+Mi46Nd3uTkXuQjI6TmI18iX2BbHdqb2tsbXuAYnp+j5eBd3qBeIONfXpodW12iZeMgImHfJWRcnuGcXiOe4uOe4l/hI6Rn5+GfXx3gYp8dm9naX5/dl12bm1rcHJVXW5icmFfbW55cGhwZmdzdWhwbGF3ZV1VZWBgcVNQTltlY1x3b4h7XlxocWJiZWWRaV9oZVtnb35va3Fzin12fYWAdXZ/jHl7hoB4h4NzhoV+jIyEfHmVeGZya4Ngh35vb2p7YGltdIB0XnN8eIZ3c3OFfHigkJuxnaaOgop/gpmJf4qcfoqYko6Eh5eOjo6Ed3R3c4BwcIVzcHGDb2ppdW2Cbn18bXVzUk6C38mS1pN8cHSDdYOfgpF2lJCYm4+Ye5NyhZCfoZOTkImSm5OFfZWVh4yNh5KNiJx/joF4e4x/iIyKnJycm5aUeo54aYuUim6KpYaUiZiEhmOMkZiNlImWi4yJi3B6lYp8j4mLk5KKeod9f218ZXNva217elyBeZCPgXt+f4CGj3t6aXVrdIyQioOHhn6XjG1/gHCCjoCOiX6Fe4SRlpucjH13eIKOd3JrZG58gGlnc25naHNsU11vZHBaX2xxd2dra2JneHNwcGRgeGBgVWtfXnRPTUtfZmJbd3CJdFxbZXVgYWRkjmNgZmJYaXN0bmtxdot8dHmGgnZ3fotzf4Z/eol/cYmHgZCKiHx+mXZlc258ZYd+bm9rf1lrbnl6cmB2enuNdnJ2inZ5n4ycr5ugkIKFeIiVfnuInIaEnpCOhYyXhJOOh4F1d295cW+Db21ufnJjZHdwfG56fGpobGKkmsHcru+ic2x1g3WEoYSRbpWPlJ+TmoCRcIWLo5eJjpWKkJ2Wg4CUj4WIj4CSioqXf4d7dn+JeIaFjpyal5mPkHaLeHCJi45/jaaHlIuehoZei5SXiY6IjYqKhIlsfJeDfomGipGQhnaHfn5sfWR4dWpveXRYiHuSh4Z6f3+Aho1/emd0aoGLkIuEhIGNmIZtg3dviZODkoZ/hHuCkpeUmpF1dHiHi3RycGRydn9fcmxvYWh0ZlJgcGdrVV9uc3lhcmNgaX5xcm5bY3JhYlZuWlx3TExLY2ZgXXVyiW1bXGR5XmBkZoRfY2NeWGlya25rcneLfXN3hIF4eHyJcYOEfH2Ie3SLiIeVhYx/f5hzaHVyeW2Lem5zcIBXcHp2eXFkdnmGjGh2gIlxgJ2HmaicopKEfXGMk3h4iZyDhJ+MjnyWjYCaiIR8c3Zwc2pvgWxqbXx0XmB3dntwdHpnYGV869q1ycPciXNsdIB2ipqIjGmXj46bk5GBiHCFiKCOhYuVioyXk3uNkoeCiJB6kYuGj4KAd3iDhHKHgpKblpOYho12iIByh4SMiZykhZaOoISKYYOVj4WIhYiMhoCHaH2UgH6DhYqOj4Jyh3+AcndodnJpdHhtWox9k4OGfYCDgYSLg3didW2KgpGMg4CAk5J+b4NteoiRiJSFfYJ/gpOUkpiJbnF5i4R0am9pb3Z+XXJobVxpdF9RZHFoZlNfcXZ0YHBgXWiDcXJqV2dpY2hXbVdbdExKS2VmXmFxc4VpW1xleV5eZGd6YGRfXVlrbmVuanN3in1zcoF/e3Z6iHOFg3x/h3Z2ioWPmIGNgnuTdmx3dnl4k3Rud3p9WHmFcYBuZ3h2kYJkdoaFcYqXhpqhm6GKhnNvkotxdo2afImZiIl8n3+EmX+CeXJzbm9kcn5pZmx3d1tfeHt6cXF/aWFnYX/Vto6RpnhucXd7cZKQjIZqmI2ImpCKhXpoh4qZh4GSkIaGl418jIyAgImNe5CNfYmFenV7g3xxhoCVmY6SlIKJdoSIeIaDjZWgoYiYkaGAiWF/lIeEh4OIjH9/gmZ9kYB/gIOMj5B+bYN9g3VsbXd1dHd2a2OOgo+AhX98hICFiX9wYHRyhn2QjoN9f5KKenKFZ3uFjIiNhXyFgIGVkJGThW5veIt+dGxtaGl3emBnaWlYa3RZUmhyaWJQYnJ4bWJlXlpqhG50YlxoYGVtX29UWm5NR05mZFtmbXGAa1pbY3NfXGNrdmRlXV1abGxibGpzdoZ/cW9/fH10eIZ4hYN8gId1eImBkpV7iYZ2iYFveHl7hJJvbXqAdl6Df3SBbGh6c5RzZ3OHfHKSkoSan5ufhod1dZN+bXWSln2HkIOKjZp8jJp2fnZxb2xqYXR8Z2JpdXlaYHd7eW1xfmVkaGhXnY9fcnOXvMSEdnGUiI99cZaLhpuSi4dyaoiOloB7lYuBhJqLfIqFfHuJi3+UiHWJhnZ3foFydYaBnZOFlI+Eg3KBineGfoybn5uIlY+egYlmfpOCf4WCiIlxgX1mfox8eX+AiIyPfWmBfoR2Z3B5eHN3dGxrjoaLgouAeYKBhYSBbF9zeXt+jouGfIKQgX9zgmp6hYmNh4V5hX6CmY6RjX5ubXqIfHVzbWVle3NhW3BiV25xU1NtcmhhTmd1eGZgXl1Zb4Fvc1plYl5qbmBwT1lqUURTZmBZam1tfG5ZW11tY1picHZjZlxdYGtpY2xqc3aBg3Ftfnx/dHWDeoOCfIGFdn6IgZaQeISKdIGIcnh5fo2Qb296gHFpgXh6fm1se3WVa2p4hHRrk42Gn5mgmYSHbn2LdWl3l45+gYqClJeKeY+Vb3p0cWtqZGBzemhfZXF6WmByfHlncXlhZWWPsbJ3S2JapdnQlnF7kIqPd32TioSYkIuFbmuFkpJ6eZKGgYSYinyGf3d3iYqEloBvi4hxdX57anmFg6SQhJONhH9wgIR4hnuInpuXjZWSloWIcHuTgn2CgoiCbYB2aICFeXKAgYOKiHxlfn+FdmRxc4BpeXFwdZmOhoOLfXd5gYV6g2tccn9zgomHin6HinuJc4JvcoWIkIaGc4V7gpqNjoV5bm59g351eWNlaHtuXlh2Wldwa05XcXJmYEtsd3RhXlxbWnV+c3BYZ11nanJgb05XZ1I/WGZeWm9qZ3lxWlpYa2VZY3B5XmdcXmVsZ2ZraXF3f4dubH9+gHVwgnt/gn+Cf3aBhImXiXGCjXF7hnx6eYOTjHVqeX5rb350f3xvcnt6k29ugX54Z5KLgqGZnJGChWeGg29neZWIfX6EgpiKgXyNjWl4c2trZl9hb3ltX2JveFxka4J5YXF2X2Vl1Oq9izI6PouOf3F4hYeNjXWClox+ko2Lfm1rhIyMdXyPf4WBlIh8gndudoeEg5d3boiFbHV7dWZ5goOmi4KPi4R+boF2eIV8iZ+Sj5KTlI6Mh397koZ3foOMgmp/cWiAfnlufHyCi4R3YnqFgnJkcml+bnVydYKcjIGAhYB0dn6Ac4JvXG6AdXmLhIt8iIF+iXl7cm2KhZGFjHODeoCXi4uAdW1qdoB/dHNbZ2d1bldWe1JZb2RMWnJyZVtJcXhvXFtbWV11f3VpWWJbaGZvZGpNV2VQPV1lXF11ZWB0b1pZVG5jWWNxeVpoXWBnbWdpa2lwd32ObGmChH95boB8fIF/gXp1goCNk4RwgYtud36Ae3uIkol/aHp9anN7coV6c3Z9fox5eIR9fGuMjYObnpaMgYBsjH1raH6Ni3p9foOUgn59iohrdnFnaGJbYmdyb2Bha3NgaHCIeWJzdF5jZJugj25cNVqvtXRpgIh8kYZ1hZWFc46KiXZvbISCh3R5iXiJfJKHeX5yZ3aJfn6Yb3GHf2l2eW5meYeEpIaAh4yKfm+Ad4KDgI+ciYSWk5mKjIWJfJCIcHp9hHtofmxqgHt6ant3goiBcmB3gX5yZHJndoNudXyGlpKCfYKBb3d6fHV/bVlwgHd1jYOHeIh2g4l7eXRvi4KRgoZzgH5/lImKfG9uaW2BgXRtW2VkcW9QWnpNW25bT1tyb2RVS3N4aVdZWlphcYF1YV5dYGdkaWlmTllnTUBgY1tgdWBddWxXV1N0YFpkb3JXal5iaGpnbWxocHd8kmtohIp9fG9+fnuBgIF6d39/iouDcXyHb3F3g397iYyPg2l9e213eHaKdnx4f4KGf4N+fXpthIyImaONhIN7dYt4a2yEh5B4fXqCkYCAfouDcHJxY2ZeWWZfcHBfYGdwZmpuiHRhdG9bYWRqdnuAv5ympMi4cYSCcpJ7d4WSgnOQi4dycm+De4NzdIZ0iHeTiHl5cGN3h3qAk2lyhHZnd3VjanyCh52BgH+Oj35zgHWHe4KVkoV7mI+WkIiCiXuJiWt4eX50Z3poa395dGl6d4CDfWhgeIh9a2t0aHyBaXaCjJGVf3t+f3F8dnx0f2JWeH5zdIuFgn2EcYeKeHlxcYWEjoB/en9+do+Gg3dqcWhsh4Fxb1xmYHFsSWR1S11sVFNZcm5iUU90eGFSWFhdYXCDdFxhXGllZWRrZFBbcElDY2BbY29dXXhnVFdWdl1bZW5oVmteYWpnZW5uaHB2epJtaYiMeX1ye355goGBfHZ9g4iGg3B3hHJtd4KCfomLk39wgHt3eHqAjHSCeH6BgYKEeYB1b36Ki5ueiH2FeneFe2d0hYuQeX5/e4iGhHaPgGdwbl9kXFhlWW1zYWBgcGxraIhuYXRpWV9kboB3qdqpx4aHsnGId2+MdHqFjX95kol/dHN0fXd/b3F/bYV0k4V4dGtgeoJ5iY9mcoRwZ3VuW219gJCTf4B4kZN+eXxuiniDk42Gd5iMk5CIhoV8f4VsdHZ+bGd2ZG17dm1qd3d/f3xhYniGeml1dWN+fGh1h4+Nlnx1gXdxgHt9boBaV3V/cHaFiH+BeW2JhnR6bHaChIV/fH56fXSMgn10aHRlboqDbHNaaF1zZEdtbUtaYFdWVXdtYlBSdHZYUFZYXmByhG9dYGNtZWReb2NUXHFGQmVeXWVnXVt6YlFWXHRbWmdrYFZqX2BvZmZrcWhwdniOdGqOjXV+dnh9d4GEgXt0fYOIh4NvcoB0cXV+hYKJjYp6dn94g3t8hYd3h3x9gX6EgHt+cnV5jI2gjIl5iXZ0gnhefYWXi3iGg3OFhoR3iXpibm1cYltbYVZpc2NgW2ducGaHcWFxZlddY2t/fMrOh7mham1timxxg3F7g4l+epCEeXhzeHV0e2psdmOEdZGCdm9mX32CeoyKZXKCa2pxY1hseoWbiIKBcpaUd399b4pzhY2OinSZkJKJhouDe3l9cHBvfGZocWFteHFqbHF4fX16XWV6gHhqdnhmg3dodIiMjpV9cohqb36BeW99XVlzf250gYt8gm9vioBxd2l4gYKBgnh+c3x1h317c2dzYW6LgGtxV2lcdltHbWpMVlVdU1V7a2FPVHVyUFFUV15jdYZpXWBsamZjWm9hWGJvR0FnXGBlXVxWe11OVWVwWVtqaF1XZ2BecmVqaHJncHN3hnhulYt0f3p4fnmDiH91cn+GhY6CcHB7eHd2eYaFh4yGeXt/dIt9fYaEg4d+fn59h398eHV4eJGTn3+MfIptdX94ZIOGlYVzkYpvhYWBeoN0ZG5qWV9bXF1UZ3NlYFhjcXJngHJia2VXW2Bqf3i+rnuft25hc4Voc3pxeIGEen2Lfnd3cnZve3Zlam9hh3WOgHNqYl5+eHmLhGZxf2hra1pWb3eIooCEf3GZk3KBenaEb4OElIp1l4qOiYWJhX14dHFuaHhfamxgbXZqZ2preXd6dlpnfXx5ZnN+bYV1ZXWGjYaXgHCMZ2t7hHVudWJdcX1sdX2Me4JndYd+bnFpdoB5f4B0fm17fIJ7eHFmbGFtiX1sbFVpX3ZVSmlqTlFOZ0xYe2hhTlV1a0xRVFVfZ3aEZ15hcWhnYldqXVxrZ0pEalliY1ZZVXlZTVZtallda2RcWWRiXnRlbWRxZ3JwdYB3cJmGdn9+d398hYd9dXOCiICVgm5zeXt6c3KEh4mIg3iBfXWPfnyEio2DgYR7fouDe3Z7d3eanZh6iYKGaXZ8e2yDg5J/co6BcIWCf4J/cGdsZ1hdW1xbU2RwZF5XYnJ1anVvZWVjV1xbaH9wb3KAc4lkZHl9aXN1c3KBg3eAg3h2cnVtanpxYWdrZ4ZzjYNtZl1ffXB7iX9pbXhnamRVV3JvjKZ8hHt2lpF0fXR+fG9+fZOIeJt9iYeDh4N9dXBxbGd0XGxnXmx0ZGdlaXpve3JZZ4F3dWhwgXiCd2J3hot8lYJvjGpte4JxZ3RmYW56aHN4int+YnaEd2pscnV8cnt7dH9ogH+AeXdvZGZibYV7bGpVaGFvUkpoak9LTm9HXXpmYU1VdGRKT1NXYWt3f2ZdZ3RpZmBWZFdicFxLS2pXY2FVVFVzVkxYdWRZXmtgW1pjZF92Z21icGl0b3J+dHSZgnd+gHiAf4aEen11goR/l4VucnR8enVxhIWPgYB6i3VzkH98gZWNgIWEfX2Mhnp9gHd7o6WKeYiFhGt0e3p1goCLem6Ec3mEfYKDdm9qaWVWXVtaWlNibmRbWGFze2pobWlgYlhfWml/aWtvgGdsYGh5eGpyc3Ntg4B6f3x1dG16aGp5al9lbmiBdo+EZ2VYYndqf4d7b2pwZ2ZdVFhvZ42ndoB6fJCOenZxgHF1eHuSgnqXdoaEgIaIdmpydWdnbltsY11tcl9nYWp4aHtsW26DcnRqcIF+enhhd4aFeZCFdIlycHqBcmNyaV1xeGVydIh8eWN0gHFnanl1c215eXZ5ZYV8f3l3cWRkY217fGpqVGdhZVNJa2ZPR1FqRWB3ZmFNU3JdSk1VWWVseHxmX25xamVdVmFVbm5WSlNnV2VdWE1Va1RKW3lfW19rXV1aYmVfeWhsYW9vdm5wd3V6mH52f4F5gICHhnp5eoN+gZODcXR0fnp2dISIkX2AfJBrcpWAe4KfhX6HfYB+hoKAint3hKuef3qHh4NrcoF5dYB+gHRuhm58gHOKgGpwbmRkWF9aWVpUYmpnW1pfdYJpXm1sXGFXXFxrgWVydH1paVxrdnVnc3ZxbIR7fXx4dXFseWdpeGZdZHNoeneSgWNjVGVwaIKFeHhnaWphV1ZZZ2OOp29+d4CLjntxcn9pe3F8jn14kHOFfoCAhm5kdXJkZ2dcamFdb29bZ15tdGV6aF10gG9ya3F8fnV2YnSGjHuJiIGBeXN1gHZicW5bcnRjcXOFfHVlc4BtYW17cGtqfHp2dGeHdnt7dnFlYmRtcn1pa1NnXVxUS3FiUEZVYEdidmZhS1NvWEpNWFhoa3Z7ZWVucWdkWldeWHdlVEpcYldnV1lIV2RQSGJ4Wl1fbFpeXGJjXX5pamBvdHhtcG52g5d6coCAfH+JjIZ9dXWGeIeMfHN1dYF5enqBjI58foSJaXOWgXqKnX5+hXqBen98holzcY+tjHt7ho99ZHGHeXN8enVyboZse35sj3pjcG9iZV1lVllZV2Nma19dXHOFaFhxblteWFpcbHticHd1bGFZbHNzZ3R1b2yDeH5/eHZtbnNkaHRlW2d1ZnZ2kXpfXVJmZ2uDgnR+YmRqXFRXXWJjjqRpeHODhpF5bnF8anpvfoh9dop0gnl9eYBpZHZsYGZfXmlfXXRrWWVcb29iemVcd3xrbm5weHl0dWVzhJOAiIOJe3dwc390Y3hlXHFxYnFygnx0Z3KAZV9ud2plaHp9dW9wg3Z0fXNyYl9mbW58ZGhTZ1dYU012XlBJWVdIYnRjYUlUbVNKTVpXamxyfGNtbXNjYlpaW2F3XFNLY11XaFNWRlhgTUdpdVheYGxbW19hYlyEaWhhbnh5bW9qdoGQeW2CfoCBk4iEgXZ0iXSMhnRxdnaBeH19foyQf36TfnB3lYN8mJJ5gIB4en6AdIiEdHGZoXp6f4mUd2N1h3hzd3RrdG9+a3h8cJFzXnBuYGdibFRaWldoY21mXFxxiWVTcm5bWlhXYGx2Y2l1amleWW1zcGtzc3NphHx+fnp2bm1rZGlxY1tqcmR0do5zW1dTZWFygH9ygl1iY11TWmBcY5GfZXFxhYSSdWxse29wcnx9fXOCeIF0e3p6ZGV1Z11iWWBnW152aFdiXXBoYXdhW3x2aWpyb3h0c3VpcYKWhId/hXd0a3F+b2d4WF1sbmNyc4B6c2dwflxgcHJiYGtzf21udn9zcXhrcGFcZWxsemBmUmVTVlFPdVpRT1hRSGNzYWBHVmpQSVBaVmtra31mbm9yYltaWFlscVdSUGZWVmhTVEVZW05IcXRYX2NsYlhgYGFdi2pjZG16eGxwaXV5h3trg31/hJp8g4R5fIdtj4dybnZ6fHSCgnyLj4KCl3R4gZOFgZ6JdYGAgXR/gnGIg3ZwoZZzeoaLhnpld4pubXpuZnhwemtzdnONa151bmFnZWtSXVtVZ2Fsa1pccYxkT29uXVZYVWdpc2hidGVkXFhtdGxvdXR4aoZ8f3uHdo9yY2RrbmFcbm1jc3iHa1pUVmNkeH19cYZdZF9jVFpfWWKVlWNtcIOFinRraXxwZ3V5dX1te3V2cHt/dV9mcmNbXVZhY1hhdGVVX2BtZGFxXV1+cGhpdHF0cXV3a22FlIKJfYdyc2dwf3J0cFRcZ2tmcnSAdnNjbXZWY3JsW19wZ35mbnh+c3Rzam1hWmRpandeZVNjVFVQU2xWUFZSUEdkcl9hRlhpTklYVFduaWV9aWx4bGJXXVVbdGRTUldoUVhmVFNHWVlPTXd2Wl9la2lZYWBeXY5uYmZreXVub2l2doB/bIOAfYeYe4CHgYl+a5OIcmZ0gHt1gIN9iY5/i5NyfIqRhYefhnt/hoxzgYZzfoJ2bqSLcoCNi3Z3bHqMYGR7cGZ5c3hsbXF3g2dkfG1jZmdoU19eVWdfbG5bXm6NaE5pbWBUVlNvZ3NrZXhkZFxYb3NscXp3cmyHe392m3p5a2FlbG1eYG9qZXB4fmdaVlhgbHh8e3CEX2NfZ1ZYX1djm4hia3CBh314bGx6bl14c218a3Z0b3B8gXNYam5eWFxVYWJXZHBjU15iaWFibFphfmxmbHR2b213d2xpho2AinuJbnJmcn5udG5kW2FpaXB0gXRzXmltU2VxZVZjb2R8ZHN4fXdscG1rYFlhZmd0XGRVYFVSTldkUU9bTk9IZG9cYkdZaU1KX0tZbWRgeWlufmVgVV9UXXVcU1JgZk5cYFVSSVtYUFl0dV1fZWtoWGJgW16NcWNnanhxc25odnR7hHKCg3qIjn58iYeNeW6QiXRrc4F0f3+IhYeRhJWPeX2MjoeRm4SAfIyFc3+Bc3R4cm+Tk5OTk5OTk5OTkpKSkpKSkpKSkpKSk5OTkpKSkpKSkpKSkpKSkZGRkJCPj4+Pj4+Ojo6Pj46OjY2Njo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo2NjYyMjI2NjY2Njo6Ojo6OjY6OjY2Ojo6Oj4+Pjo2NjY2Oj4+Pj4+PjoKAfnp6fX5+fX1/fn59fn5+fn5+fn+Af4CAgIGAgIB/gIGBgYOHjI6Ojo6NjY2NjY2NjY2NjZKSkpOTkpKSkpKSkpKSkpGRkZGSkpKSkpKSkpKSkpKSkpKSkpGRkZCQkI+Pjo6Ojo6NjY6Ojo2NjY2Njo6Njo6OjY2NjY2Njo6Ojo6Ojo6NjYyMjY2MjIyNjY2Njo6Ojo6NjY2NjY2Njo6Ojo6OjY2NjY2Ojo6Ojo+Ogn99ent8fn59fX59fn5+fn5+fn5+f4B/gICAgICAgH+BgYCBg4aMjY6NjY2NjY2NjIyMjIyMkpKSkpKSkpKSkpKSkpKSkZKSkpKSk5KSkpKRkZGRkZKSkpGRkZGQkJCQj4+Ojo6OjY2NjY2NjY2NjY2OjY2NjY2NjY2NjY2Njo6Ojo6Ojo2NjIyMjIyMjIyNjY2NjY2NjY2NjY2NjY2Njo6Ojo2NjY2NjY2NjY6Ojo6Cf3x6fHx9fn19fn19fX59fn5+fn5+gH9/gICBgYGAf4CAgICDhouOjo2NjY2NjIyMjIyMjIySkpOTk5KTk5KSkpKSkZGSkpKSkpKSkpGRkZGRkZGRkJCQkJGRkZCQkJCPj46Pjo6Ojo6NjYyMjIyMjI2NjY2NjY2NjY2Ojo6Ojo6Ojo6OjY2MjIyMjIyMjIyMjY2NjY2NjY2NjY2NjY2Njo6NjY2MjIyNjY2Njo6OjoN/fHp8e31+fH1+fXx9fn59fn5+fn5/f3+BgYGAgICAgYCAgIOGi42NjY2NjIyMjIyMjIyMjJFtZmdnZ2dnfYWEhISEiF0tMDAwMC1GoaGhoaGhoJqZmpqampqKg4SEhIOEd2VnZmZmY4C+u7u7u72zbWZnZ2dnZ21ubm5ubm9qZmdnZ2dmb4SDg4ODg4OLjIyMjIyMjY2NjYyMjY2NjY2NjY2NjIyMjIyNjY2NjY2OhX19e3t6fX58fH59fX1+fX1+fn5+fn9/f4GBgYCAgICBgICAgoWKjI2MjIyMjIyMjIyMjIyMkWdfYGBgX155g4KCgoKGUxgdHR0dGTekpKSkpKSjnJycnJycnImBgoKBgYJyXV9fX19bfsjExMTExrtnXl9fX19fZWdnZ2dnaGNfX19fX15qgoGBgYGAgYqLi4yMjIyMjIyMjIyMjIyMjY2NjY2MjIyMjIyMjY2NjY2GfH16e3p8fXt8fn19fX59fX5+fn5/f3+AgYCBgYGAgIGBgYGChYqNjYyMjIyMjIyMjIuLi4uRjo2NjY2NjY+QkJCQkJCMh4eHh4eHiZOTkpKSkpKRkZGRkZGRj46Ojo2NjYuJiYmJiYmMkpGRkZGRkImIiYmJiYmJioqKioqKiYiIiIiIiImKioqKioqKi4uLi4uLi4uLjIyLi4yMjIyMjI2NjIyMjIyMjIyMjY2Njoh8f3l6ent8e319fX18fX19fX5+fn9/f4CBgYGBgYGAgYCAgYKFioyMjIyMjIyMjIuLi4uLi5GSkpKSko2RkpGJh46KkJKTjoiOjo2RiI+RkZGRkJCQkJCPj4+Pj4+Ojo6Njo6Ojo2NjoyLi4uLi4uLjY2Njo6Ojo2NjY2NjY2NjY2MjIyMjIuLi4uLiouLi4uLi4uLi4uLi4uLjIyMjIyMjIyMjIyMjIyMjIyNjY2NiX59eHh5fH18fX19fHx9fX59fn5+f3+AgICBgYGBgYCBgIGCgoSKjIyMjIyMjIyLi4uLi4qLkJCRkZGPhI6QkIaKj4WNkJGKho2HhomFiJCQkJCQkJCQkI+Pj4+Ojo6NjY2NjYyMjIyMjIyMjIyMjIyMjIyMjI2NjIyMjIyMjIyMi4uLi4uLi4uLi4qKiouLi4uLi4uLi4uLi4uLi4yMjIyMjIyMjIyMjIyMjIyMjI2Lfnx3dnh7fXx7fX18fH19fn5+fn5/f4CAgIGBgYGBgIGAgIGChIqMjIyMjIuLi4uLioqKioqQkJCQkIqFjoiOhoaPiY2QkYqEiYaFhYWHj4+Pj4+Qj5CPj4+Ojo6OjY2MjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMi4uLi4uLi4uLi4uLi4qKioqKi4qKi4qKi4uKioqKi4uLi4uLjIyMjIyMjIyMjIyMjIyMjIt+e3d2eHt8fHx9fX19fX1+fn5/fn9/f3+AgIGAgYGAgYCBgYGEiYyMi4uLi4uLioqKioqKipCQkJCPhYOMjpCOiYyJjZCQj42FhIeEhoiPj4+Pj4+Pj4+Pjo6OjY2NjYyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIuLi4uLi4uLi4qKioqKioqKioqKioqKioqLi4uKioqKiouLi4uLi4yMjIyMjIyMjIyMjIyMin18dnZ4fHx7fH19fH19fn5+fn5+fn9/f4CAgYCBgYGBgIGAgYSJi4yLi4uLi4qKiomJiYmJkJCQkJCMhoyJjoeFjYmOi4yLhYiGhoiDio+Pjo+Pj4+Pjo6OjY2NjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyLi4uLi4qKioqKioqKioqKioqKioqKioqKi4uLioqKioqKioqLi4uLi4uLjIyMjIyMi4uMjIyKf353eHp7enp8fHx8fX1+fn5+fn9+fn9/gICAgICBgICAgYCBhIqMi4uLioqKioqJiYmJiYmPj4+Pj5CMjouPjIqPjI6MjY2JjYyLjomOj46Ojo6Ojo6Ojo6NjYyMjIyLi4uLi4uLjIyMjIyMjIyMjIyMjIyMjIyMjIyLi4uLioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi4uLi4uLi4uLi4uLjIiAfXh5enp6e318e3t9fn5+fn5/f35+f39/gICBgICAgIGBgIGEiouLioqKioqJiYmJiYmIiI+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Ojo6Oj46Ojo6Ojo6Ojo2NjYyMjIyLi4uLi4uLi4uLjIyMjIyMjIyMjIyMjIyMjIyMjIuLi4uKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLi4uLioqKi4uLh4B8eHp6eXt8fHt8fH1+fn5+fn9/fn9/f39/gIB/gYGAgIB/gYSJi4qKioqJiYmJiYmJiIiIj4+Pj4+Pj4+Pj46Pj4+Oj4+Ojo6Ojo6Ojo6OjY2NjY2NjY2MjIyMjIuLi4uLi4uLi4uLi4uLi4uLjIyMjIyMjIyMjIyMi4uLi4qKioqKioqKioqKioqKioqKioqKioqKioqKiYmKioqKioqKioqKioqKioqKioqKi4uHgHt5eXh6fHx6e3t9fX5+fn5+f39+f39/f39/f3+BgYCAgH+BhIiLiomJiYmJiYmJiIiIiIiOjo6Ojo6Pj46MjI+Sj5COjo6Ojo6NjY2NjY2NjY2NjIyMjIyMjIuLi4uLioqKioqLi4uLi4uLi4uLi4uMjIyMjIyMjIyLi4uLi4qKioqKioqKioqKiomKiomJiYqKioqKioqJiYmJioqKioqKioqKioqKioqKioqKi4aBe3h5eHp8ent7fH19fn5+fn5/f35/f39+fn9/f4CAgYCAgIGEiIqJiYmJiYmJiIiIiIeHh46Ojo6Ojo6Ojo+MkJOQkI+Ojo6NjY2NjY2NjYyMjIyMjIyMjIuLi4uLi4qKioqKioqKi4uLi4uLi4uLi4uLi4uMjIyLi4uLi4uLioqKioqKioqKiYmJiYmJiYmJiYmKioqKiomJiYmJiYmJiYqKioqKiomJioqKioqKhYB6eHl5fHt6ent8fH1+fn1+fn9/fX9/f35/f39/gICBgICAgYSIiomJiYiIiIiIiIeHh4eHjY2Ojo6Ojo6Pj4+PjoyNkI2NjY2NjY2MjIyMjIyMjIyMi4uLi4uLioqKioqKioqKioqLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4qKioqKioqJiYmJiYmJiYmJiYmJiYmKioqJiYmJiYmJiYmJiYmKioqJiYmJiYmJioqFf3l6eXh7e3p7fHx7fn5+fX5+f39+f35/fn+Af3+AgICBgYCChIeKiYmIiIiIh4eHh4eHh4eNjY2Njo6Oi42Nj5WPiYyPjYyNjYyMjIyMjIyMjIuLi4uLi4uLi4qKioqKioqKioqKiouLi4uLi4uLi4uLi4uLi4uLi4uLi4uKioqJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYR+eXt5ent7eXt9fHt+fn59fn1+f35/fn9+f3+AgICAf4CAgICEh4mIiIiHh4eHh4eHh4aGhoyNjY2NjY+MjImKj42IjJGPjY2NjIyMjIyMjIyLi4uLi4uKioqKioqKioqKioqKioqKiouLi4uLi4uLi4uLi4uLi4uLi4uKioqJiomJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJg355e3p8e3p7fX17fH9+fn5+fX5/fn9+f3+Af4CAgH+AgH9/f4OGiIiHh4eHh4aGhoaGhoaGjIyMjIyLiYyKiIeJhoyOjJCMjZGOjIyMi4uLi4uLi4uLi4qKioqKioqKioqKioqKioqKioqKiouLi4uLi4uLi4uLioqKioqKiomJiYmJiYmJiImJiYmJiYmJiYmJiYmJiYmJiYmIiImJiYmJiYmJiYmJiYiIiIiIiYmCf3h7e3t6enx9fHx9f39+fn19fn9/f39/f4F/gIB/gICAgICAg4aIh4eHhoaGhoaGhoaGhoWMjIyMi4yOjoyKioeEiIuKjIuNjo+Li4uLi4uLi4uLi4uLioqKiomJiYmKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiomJiYmJiYiIiIiIiIiIiImJiYmJiYmJiYmJiIiIiIiIiYmIiIiIiIiIiIiIiIiIiIJ/eHp7enp6e3x8fX1+f35+fX1+f39/fn+AgICAf3+Af4CAgYCDhYiHh4aGhoaGhoaFhYWFhYyMjI2NjJCSjI2Ii4mJi4uLi4mLjIqMi4uLi4uLioqLi4qKiomJiYmJiYmJiYqKioqKioqKioqKioqKioqKioqKioqKiYqJioqJiYmJiYmIiIiIiIiIiIiIiImJiYmJiYmJiYmIiIiIiIiIiIiIiIiIiIiIiIiIiIiHgXx4e3x5enp8fHx9fX9/fn59fX9/f39+fn+Af4B/f3+Af4CAgIKEh4eGhoaGhYWFhYWFhYWFjIyNkY+PjZGJjIaJjIuIiImMiYeNjo+NioqKioqKioqKiomJiYmJiYmJiYmJioqKioqKioqKioqKioqJioqKioqKiYmJiYmJiYmJiYmJiYiIiIiIiIiIiIiIiImJiYmJiYmJiIiIiIiIiIiIiIiIiIiHh4eHh4eHh4WAenl9e3t7enx8fHx9f39+fn19f39/f35+f4B/gH9/f4B/gH+AgoSHhoaGhYWFhYWFhYWFhISLi46PjoyLj4iHiYmMjYWFjo2KiYyNi46KioqKiomJiYmJiYmJiYmJiYmJiYmJiYmKioqKioqKiomJiYmJiYmJiYmJiYmJiYmJiYmJiYmIiIiIiIiIiIiHiIiIiIiIiIiIiIiIiIiIiIiHh4eHh4eHh4eHhoaHh4eHhH55eX16enp7fXt8fX5+f35+fX5/f39/fX5/f3+Af39/f39/f4CChIaFhoWFhYWFhYWFhISEhIuLjI6MjI2Lh4mIiomGgoiNjoiKi5GTj4uJiYmJiYmJiYmJiYmIiYmJiYmJiYmJiYmKioqKiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiIiIiIiIiIeHh4eHh4eIiIiIiIiIiIiIh4eHh4eHhoaGh4aGhoaGhoaGh4eDfXp5e3p5enx8e31+fn5/fn59fn9/fn9+fn+AgICAf35/f39/gIKEhoWFhYWFhISEhISEhISEioqOjYmIiIqKh4iHiomIioiIh4qGi5GPiomJiYmJiYiIiIiIiIiIiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmIiIiIiIiIiIiHh4iIh4eHh4eHh4eHh4eHh4eHh4eHh4eHhoaGhoaGhoaGhoaGhoaGh4J8eXl6eXp7e3t7fX5+fn5+fn59gH9/f39/f4CAgH9/fn9/gICAgoSGhYWFhISEhISEhISEhISKi5CPiYmJi4qHh4WHiYuKiYSLjYmOjYqJiYmJiIiIiIiIiIiIiIiIiYmJiYmJiYmJiYmJiYmJiYmJiIiIiImJiYmJiYiIiIiIiIiIiIiIiIeHh4eHh4eHh4eHh4eHh4eHh4eHh4eGhoaGhoaGhoaGhoaGhoaGhoaGgXt4enp4e3x7e3x+fn9+fn5+fX1/f39/f3+Af4B/f39/f3+Af4CChIaFhYSEhISEhISEhISEhI+Qj4+IiYuIhoeIiYuLjIuJioqNio6Oj4iJiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIh4eHh4eHh4eHh4eHh4eHh4aGhoaGhoaGhoaGhoaGhoaGhYWFhYWFhoaAe3h5eXh4enp8fX1+f35+fn59fn9/f39/gIB/gICAf39/gIB/gYKDhoiGiIaDhISEhIODg4ODkpKOioeKi4qLh4uNiYqJi4iHiouIio+SioiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIh4eHh4eHh4eHh4eHh4eGhoaGhoaGhoaGhoaGhoaGhoaGhoaFhYWFhYWGhn96eXh4eHl5eXx9fn5/fn5/fn1+f35/f3+Af39/f4CAgH+AgH+BgoOHjo+PjoiHhIWFhoaFhYWSkI6KiYmIiImKioiIh4aKjIiHiYmOkJGNh4iIiIiIiIiIiIiIiIiIiIiIh4iIiIiIiIiIiIiIiIiIiIiIiIiIh4eHh4eHh4eHh4eHh4eHh4eHh4aGh4eHh4aGhoaGhoaGhoaGhoaGhoaGhoaGhoWFhYWFhYWFhYWGf3l4d3d3eXp5e3x9fn9+f35+fn5+f35+fn+Af4CAgICAf3+Af4GBg4eOjo6Ojo6Mjo2OjY2MjZCQjomHhoiJiYeIiouIiYyJiYaKjY6PkYuIiIiIiIeHh4eIiIiIiIiHh4eHh4iIiIiIiIiIiIiIiIiIiIeHh4eHh4eHh4eHh4eHh4eHh4eHh4aGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaFhYWFhYWFhYWFhYZ+eXd5d3d6eXl8e31/fn5/fn5+fn5+fn9+f4B/fn+Af39/f39+gIGEiI6Ojo6Ojo6Ojo6Ojo2NkJGOi42JjIiIiYaHiYaIioiHi4yLjpCQiIeIiYmJiIeHh4iIiYmIh4eHh4iIiYiIiIiIh4iIiIiHh4eHh4eHh4eHh4eHh4eHh4aGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoWFhoaFhYaGhoWGhYSEhIWFhoaFhIWFhX55d3l2eHl4e3x7fn5+fn5+fn5+fn5+f39+f39+f39/f35/f3+AgYOGjY2Ojo6OjY6NjY6OjY2Qj42Ni46KhoiKhISLiYeDhYSDi4mLj42JjI6QkI+NjYyLjY6Pj42NjI2Nj4+Pjo6MjYyMjY2KiYiHiImHh4aHh4eHh4aGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoeHiYqKiIeJi4yNjo2LiImLi42OjYyJiImMgHl3d3Z6eXh7e3t9fn5+fn5+fn5+fn5/f39+fn5/f4B/f4B/f4CBg4aMjY2NjY2NjY2Qj4+Pj46NjI6KiYuMjIeFiY2Lh4aIh4aHh4uNjo6Pj4+Pjo+Pj4+Pj4+Pj4+Pj4+Ojo+Pj4+Pj4+Pj4+Oj46Oj46Mi4uJh4eHh4aIhoaGhoaGhoaGhoeLiYeHiIiLjY2Mi4yLjY2Ojo+Ojo6Pj46Ojo6Ojo6Ojo6Njo6NjY2AeHZ4eHp4enx6fH5+fn5+fn5+fn5+f39/fn59fn9/f39/gH9/gIGDhoyMjIyMjY+QkpOTk5KSjYyMjIqHioyKh4eJiYWCiouIiYWJjpCNjo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6NjI2NjI2LiYaHh4eHiYqLjY6NjYyNjY6OjY2OjY2NjY2NjY2NjY2NjY2OjIyNj4+OjY2MjIyLi313dXd5enp7e3p+fn5+fn5+f35+fn5/f39+fn1+f39/gICAf3+AgYOFj5KRkJGSk5OTk5OTkpKLi4uLiomMiouLiYuKhoeOjYiIjI6OjIuMjIyNj46Njo6Ojo2NjY2MjY2NjIyMjIyMjIyMjY2NjYyMjI2NjYyMjI2NjIyNjIyMi4yMi4yMjI2MjIyMjIyMjIyMjIyLi4uLi4yNjY6Sk5OSkpSRkJOVlZSTk5COjo6Oe3Z2d3h6ent7e31+fn5+fn5/fn5+fn5/f35+fn9/f39/gIB/f4CBgoSNkpKTkpOSkpOTkZKSkoqJioyJi4qJjIuKioiHiYqKi4mKjY2Mj46Nj5KUlJOUlJOTkpGSkI+Ojo2NjY2Pko+OkZGOjIuKioqLi4qKi5CPjoyMjIqKioqKioqKiouKioqKi4yLi4uMjIyKiouLi46RkpOTk5SUk5STk5SUlJOTk5KSkpKSk5F6dXZ2eHt7e3p6fX5+fn5+fn5+fn5+fX5/fn5+f35/f3+Af39/gIGChIuRkZGRkZKSkpGRkpGRiYmIiIqMiYiJiYuJhoSJhoyKh4ySkpKTk5OUlZWWlZWUk5OUlJSUk5SUlJSVlZWVlZWUlJOTkY+QkZKQjoyRlZWVk5KSjo+QjYqKi4qKi42OjY6RkpCRkpKSkpGRkpKSk5OTk5OTk5OTk5OTkpOSkpKSkpKSkpKSj3h1d3l6e3t7ent9fX19fn5/f35+fX5+fn5+f39/f39/f4B/f3+AgYKEi5GQkJCSkpKRkZGRkZGIiIiIi4uJg4eLi4yMiIeHjYyNkpSSkpOTlJWWlpaVlZSSkpOTlJSUlJWVlZaXlpaWlpWUk5SUlJSVlJSUk5OVlZWUk5KTk5OTkJGSkZGSk5OTk5KSkpOSkpKSkpKSkpKSkpKSk5OTk5SUk5OSkpOTkpKSkpGRkZGPdnJ3enp7e3t8fX59fX1+fn9+fn9+fn5+fn6Af39/f3+Af3+Af4CBgoSKkJCRkZGRkZCQkJCQkIeHh4eIiIiFi4+KjI6Njo+OkJWUk5OTk5SUlZWVlJSVk5KSk5KTlZSUlZaWlpaWlpaWlpSTk5OTk5OUlJOSk5SVlZSTkpKSkpOTk5OTk5OTk5KSkpKSkpKSkpGSkpGRkZGRkZKTlJSUlJSTkpGRkZGRkZGRkZGRkYx0c3d6ent7e3x9fX1+fX5+f35+fn5+fn5+fn9/f39/fn9/f39/f4GDhIqQkJGRkJCQj4+Pj4+Ph4iKi4yNjYuOj42Mjo6RkpGSk5OSkpKSk5SUlJKSk5OTk5OSkpOUk5OTk5WVlZWUlZWUk5OTk5KSk5OUk5KTlJSUk5KSkpKSk5OTkpKSkpKRkZKSkpKSkpKSkpKSkZKRkZGSkpOTlJSUk5OSkZGRkZGQkJCQkZCRinN0dnp8fHp7fXx9fn59f35/f35+fn9+f31+f39+fn59f39/gH+AgYKDipCQkZGQj5CPjo+Pjo+Oj4+Pj4+Pj4+PkI2OjpCRkpKSkpKRkpKTk5OTkpGSkpKRkZKSk5OSk5OSk5STk5OTlJOSk5OTk5OTk5OSk5OTkpKSkpKSkpKSkpGRkZGSkZCRkZGRkpKRkZGRkpGRkZGRkpKSkpKSkpKSkpKRkJCQkJCQkJCQkJGGc3V2e3x8e3x9fX1+fn1/f35/fn5/gH9+fX5/fX5/fn5/f3+Af3+BgYGKkI+PkI+Pj4+Pj4+Pj4+Oj46Oj4+Pj5CQiI2PkJGRkpKSkpOTk5OTkpKSk5KSkZGRkZKSk5KTkpGRkpKSkZKSkpKSkpKTk5KRkZKTkpGRkpKSkpKRkJCQkJGRkZGQkJGSkZGRkZGSkZGRkZGRkZGSkpKSkpKSkZCRkZCPj4+Pj4+Pj4+PkX9ydHh8fHx7fHx9fX5+fn9+fn5/f3+AgH99fn5+f39+f39/f4CAf4GBgYqPj4+Pjo6Ojo+Pj46Ojo6Ojo+PkI+Pj4+GjpCQkJCRkZGRkZGRkZGQkJCQkZGRkZGRkZGRkZGQkJCRkZCQkJGRkZGRkZGRkJCQkZGQkJGRkZGRkI+PkJCQkJGRkJCQkJCRkJCQkJCQkZCQkJCQkJCQkZCQkJCPj4+Pjo+Pj46Ojo+Pj4+PeHJ2eXx9fHp9fH19fn5+f35+f39/f4CAf39/fn5/f35/f39/gIB/gYGAio6Ojo6NjY2Ojo6Ojo6NjY2Oj4+Pj4+PjoiQkZCPj4+QkJCQkJCQkI+PkJCQj4+Pj5CQkJCQkJCPj4+PkI+PkJCQkJCQj4+Oj4+QkI+PkJCQkJCPjo+QkJCPj4+Pj4+PkJCQkI+PkI+Qj4+PkI+PkJCQkI+OkI+Pj46OjoyMjY2NjIqDiYhzc3Z4fX58eX18fX1+fn5/fX5/fn9/f39/f4B/f39/f4CAgH+AgH+BgYCJjY2Ojo6Ojo6OjY2OjoyNjY6Ojo6Ojo2NiJCRkI6Njo6Ojo6Ojo6Pjo6Ojo6Ojo6Pjo6Ojo6Ojo6OjY6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Pj46Oj4+Pj4+Pj4+Pjo+PjY2MjYyNjoyLi4mJiYiFhYSDgoKEgnR5fXp4dXJrZWltb2xmZmdncHNzd3l9fnl6e3x9fX1+fn59fn9/fn9/f39/gIB/f3+AgIGAgIB/f4CBgImNjY2NjY2MjYyMjIyMi4uLjYyMjIyMjIyGj5GRjIyMjIyMjIyMjIyMjIyMjIyNjY2MjIyMjYyMjY2MjIyNjY2NjYyMjI2MiomKi4uJh4KAh4iEgXt6gH57fXx8fXlzcnJycnV1cG1ramppZ2NkYV9bXF1eWFVXWFlTS0VJSkpLTE1PT0tgdHR3eX19eHp5e3x8fX5+fn1+f39+f35/f4CAgH+AgICBgYCAgICAgIGAf4OEhYSFiIuLjYyMjIuLi4yGiYqKioqKh4OOkJGNiouLi4uMiYmKioqKiouLi4eDi4qIiYmGhYWEhIeJiYWCg397fHl6e3pzcHFxcW1samdsbWdlZmVmZGNlZGVkZWVlZWRkZGNhYV5dXFpYWFdUUFFSU1JTTU1KSUZESEpHR0hHR0xOSWdzdXh5fXp4d3l8fHx8fn5+fn9/fn9/f39+f4CAgIB/gICBgICAgICBgYFnXmBjYWNucX17ent/fXd8fHZ4ent4eHpvcHt4eXt8e3h3e394dXd0dHZ1dHZ3dXFycW5wcnBnaGtsbm9tamlpaGhlZWRkZF9gYWJgYF5dWVhaWltdXV9gX2BfX19gYmFeXl5eWVldXF1bV1dWUlRSU1NOUUpISUZERUhMTEhGR0lLSklNbXJ0eHp7end3eXt6e3x+fn1+f39+f35/f35+gIGAf3+AgIGAgICAgICCgWdYW1pZXFtcY1xaXF5ga3FtcHBvbm5vbmtpbmxrbG9qaWtraWpraWdmZ2dnaGhnbWdqZ2hlaGdjY2JhYmBgXVhbW1dYV1RWUVBUU1NNSkxLTExOTk9UWFhXVVVUUlBQTU1QT05LTE1QUU9MTEpHSUlHSEhJSEhIR0ZHSEpKSEhISUlISVZwc3V5ent5dnZ5enp7fH59fX5/f35/fn5+f3+AgX9+f4B/gICAgICAgIGBbFtYVlZWWVlaWVlYVVZoamxubmxra2poaGloZGVkYlxiZl9fYGNfXF9dYF1eWl5dWVleYmFeXlpZX1xYV1NOTUxLS0tMSUtNTktKS0tMSktQTEtLRkdHSUlGR0lISUZFSEdGRkVERUVEREVJSUlHSEdIRkZLTUtJSUlIR0hLTU1LTExMVXFzdnl6e3h2d3h3ent8fn1+fn9/f39+f3+AgIGAfn5/f4CAf4CAgIB/gYJoUlRVVlNVV1lZWVdXV1tbYWNfXlxbWFZWWVZSVFJRUVVUU1NTUE1KTU5QUk9NUFFRUVFSVlZRUVFUUFBOTk9MSk1MS0xKSktLRklJSkxJR0pISUlFR0dGRkVFSElKR0ZHRkZHR0hKR0dISEpMSkpLSUlISktLSkhKS0pISUtMTU9QUEtUdHR1eHp6eHZ2d3d6enx+fX5+fn5/f35+fn+AgYB/f3+AgYB/gICAgH+AgmlQUlRXVVRWWVdYWFpbVFRTUlBRU1FRUU9OTlBQUU9MTlBPTk5NTEtNTk5QTU9QUFJRUE5OT05PTk9PUFFPTk5PTk5QTk1NS0lISEpJSUlJR0ZHR0dJSkhJSEhJSEhHSEdISElISUxLSklISkpJSkpIR0pMS0pJSUhKSktMTk1NTU9RTFVzcnN3enl3dnR2eHp7fX19fn5+fn9+fn5+gICBgICAf4GBgH+AgICAgICBbE9PTlRZVVVdW1lXV1hOTUpKSUZKT0xKSkdJSk1NS0pMTUpHSUlJSktMRkRGSktLS0hKTExMT01MTE5PT09NTk9MTk5OUFBPTE1MTk1MTEpJSEdJSElISElJS0xLS0pJS0pJSklJSUlJR0dKSUdJSUpKTk1OTEhJSklJSk1PT01MT1JOWXBwcnd4d3d0c3R3enx+fX5+fn5+fn5+fn9/gICAgICAgYCAf39/gICAgIFvS0pNTlFOTlVXVlZSU0lFQ0VFUkREQT5CP0RAQD5CREFAQURHRkVIRUJBQEBDQ0RFQUNFSEtPS0lJSkhHSklKSUlLSkxQTk1MTU1MTU1NTElIREZGR0ZGRklKSUlLSkhMSklKSkpJSEhKS0tIRkdJSklLTU5OSktPTUxLTU1PUE5QT1BgcG9yd3h2dHJzdXd6fX19fn5+fn9+fn1/gICAgICAf4CAgIB/f3+AgICAgXNQUE5OUE1KS1BSUE5RQ0RCQUZRRT1DPT9FSDk6Oz0/PTxBRkA+Ojw+PjxFRD0/RUE/QEFAREVHR0dHQkRERUZFR0dHR0pHSEpLR0NER0pHQ0RFQUFDR0hHSEdISktKSElMS0lISktLTU5MTUxMSkpMS0lLTU9PUFNRT1BQTk9QUlFNUGdwb3N2dXRycXR4eX19fX1+fn5+f4B+foCAgH9/gIB/f4CAgH+Af4B/gICCdlRVUVFQT0xNUFBOT09BQkFAQkE/Oz48Pj8/Ozg5ODs7OkA7Oz48Ozs8PEhMPT1BQT9CQz1BRERGQkZGREdJSEM/QEBAQUFCQUE/Pjw9PkFAQD8+P0BFR0dHSUtMTk1OTUxNTUpLTVBVU05MTlFOTk1OTE1NTk9OTk1LS05OTk1OTkxUbnBwcnR0c3Fydnl5fX19fn1+fn5/gH5+gICAgICAgH9/gICAgH9/gH+BgIJ4UVFSVFJTUVNTUVFST0BAPT4/PD8+QEE/PT45Ozo6Ozg5Ojg3Ojw5Nzg7Oz49Ozs6ODpAQEFCP0E/Q0ZEQkNDPzs+PkBDQ0E/Pj9BPkBAQj9APD9CQEFDRUVFSktQT1BPTU1OTExMT1JRUFJOTExPTUtOT0xMTEtMS0tKS0tKTU1LS1xxcXF1c3VzcXN4eHp9fn1+fn5+f39/fn5/gIGAgH+Af4CAgICAf4CAf4CAgXxSTU9RUFFSUlRSU1NOPDs8Ozs7P0BBQkA9PDk8PTw5Nzk6Ojk4ODo6Nzg6OTo7Ozg3ODk7Ojg8Oz1AQUA9Ozs+PD09QEJDQT9BQkE9Pj09Oz0/Q0RCQD9BREJFR0pKSkpKTE1MTExNTExOVVNLTE1USVBKSU1KSUpLS0pJSEdKS0lKZnJxc3RzdXJydnl5e31+fn5+fX9+f39/f36AgICAf4CAgICAgIF/gIF/gYCBgFZMTlBQTlJRUFBRUU44PT88PDo9PkFAQT8+PkA/Pj07PDw+Pz08PTs6PD09PTw8PDw7Ozo7PD49Pj8/QUA+P0E/QEBBQEBAPT8/PTw6Oz09PD9AQUJCQUBCREZGRkdGR0dISUtMTExLTEtKS0lKSk1MTEpMS0lISUxMSklJSElLR01tcHF1dXV1c3V4eXl8fX5+fn5+fn5/gH9+gIB/f39/gH+AgYCAgYCBgICBgYCCYUtPT05OT1BPT1BQTzo8Pjw9Oz8+PkFBPz0/Q0NDQD48PT9APz89Oz49PkNFPz9APTs9PT08Ozo9PkFBPz5AQD9BPz89PD48PTs7PD0+QUA/QD5AQ0NEQkRFSEVFR0hISEdGSUpJSUlJSUhKSkpKTEtKSklJSEhKSktMS0lLSkpIVnBvcXNzdHR1eXp7e31+f35+fn5+f39/f39/f3+Af4CAgICAf4GBgICAgIGBgIJtTFBRTk9QTk5PUFBPPjw8PT4/P0A+QEA/Pz9DRUQ/PTs8QD46Ozo6OTc6PDk9PUA9Ojw7Ozw7ODk7Pz49PD07PEA9PTw8Pjs9PD0+QUBCQUBAP0JEQ0RFRkZGQ0VHSElJSEhJS0tMTUpKSUpNTUpLSktJSEhISEpJSktKSk5MSUlfcHBycnJ0dXZ6e319fX5/fn5+fn5/f35/f36AgIB/gICAgICAgYGAgICAgIGAgnZNTk5NTk5MTE5QT0w+QTw8PT8+QkM/P0FBQUJBQD08PTs+PTo6Ojw6ODk4ODo7PT8/PDs7PDs6Ojs+Pz89PDg6Pjw9Pj89Oz4/QEJDQkJDQ0FCQkFCQkRCQkRCRENGSUdGRkhJSUtNSklKSktMSkpJSkVESUlGRkhISUpKTEpGRmdwb3FxdHZ1d3t8fH18fn59fX1+fn9/foB+fn+AgH+AgICAgICBgYCAgICAgICBek5JS0tMTExFSUxOTTw/PDw9PkBAQUE7QkNCQ0A/Pz9APT9APjw+QD89PT0/PT0+Q0Q/Ozw9PkA9PT5BQ0A8OTtBPz4+QT07P0JAQkNCQENDQUNBPT0+QD0/QUFBQENFRUBAQ0JDR0dFRENGRUZGR0VEQEFHR0ZDRkRHSEpHQz5IbG9wcHF0dXZ5fHx9fHx+fn1+fn5+fn5+f36Af3+AgICAgICAgIGAf4CAf4CBgIF+UUhLTU1NS0pLTE9RQD8+PkFBQEBBR0FCRENEQT9AQEA/PUA+PD0/P0BAQENAQD9AQD49PD1ARUFCQkZIQz08QERDQUE/Pj1AQT4+Pj88PkBER0VAPkBBP0BDRkVDQkNDQEJEREJERUFCPkFCQkFCQEA9QUJDRENDQUNFR0E/PVZwcHFwcnV1d3p8e3x8fX9+fX19fX1+fX5+fn9/foB/f4CAgICAgYCAgIB/gIGAgX5SSEtNTUxLS05OUlVEQkBDQ0FBQkBCQ0BAQUFAQUA+Oz48Pz08Oj49P0JCRUA/P05hX0pAQ0VJSUlJTU1LRUNGR0hFR0VFRUREQ0E/QD4+QkZKSkdFRUZGRkpOTktKSUdHSEtMSkdHQ0REREVEQUJCQ0BDREVEREVERUZDQkFEZW9wcXF0dnV4e3x7e3x+f319fX19fn59f4B/f39/f39+gIGBf4CBgICAgH+AgICAfVJJSUpKSEpKTE9SU0dGRUdIREdIREA+PDs+QERFRD87QUNEQj8+QT9BREVEQ1d1homKflhHSEpMTE1PT0xIR0hHSElJSEhHR0hIRUNFRUVFRkhKSkZFR0lKTU9PTU1LSktKTU5LSUhHSElIR0ZFRkZGREZIR0VFSEhGSEdIRlFubnBxcnZ2eXt7e3p9fX5/fX19fX1+fn1/f39/fn5/gH+BgYGAgICAgICAf4GBgIB8UEhHSElGR0lKTU5OSkxJSUpLTE5KRkNBQkNGSkhJR0hISUdGQkRGRERDQVV0h4mHh4aIgldJTE1MTU5MSkdHR0dER0dHR0ZIRkhFQ0RERkVEREhIQ0NDR0pKS0xMTExMTElKS0pKSUlJSEpISEdISUhHR0hGRkZISklJSUlIXW9vcXJzd3d6e3t6e319fn59fX19fX5+fYB/f39+fn+BgIGAgYCAgICAgIB/gYCAgHxNR0ZIRkVGR0dKS0pMTUxLTU5NT0tJSEhKS0tMS0pLTUpLSEhGRkdGRVBshIeGhoaHh4iHfFBLTEtIR0ZGREVDQ0BBQ0NDQ0ZGRUJAPj5AQUFAQkQ/Pz9ERkhERUdJS0lJR0hJR0lJSkpJSEZKSkpKSUpJSkpKRklMTEpKS0tmb3Bzc3R2eHl7e3t8fH1+f319fX19fn59f39/f35/f4CAgICAgYCAgIGAgICAgICAfU9GRkdGR0hHRUZHR01NTUtMS0lHQ0NDRElLS0tLS0tNTEtNTElGSlZsgYaFhISGhoaHiIaKdUlJRkI/P0A/Pz88PDw+Ojo8QUFAPjw5OTg8PD07Pjs5Oz9BQkFBQ0NDQEFCRURCQ0ZISUhISExNTEdJSk1NTk1KSktLSkxNU2xvcXRzc3d5ent7fH19fn9+fX19fX1+fn5/foB/fn9/gICBgIGBgICAgYCAgIB/f39+UUZFRkdJSUdEQ0VGTk1MSklIRT85Oj5ARUhHSUlLTE9OTlFOUV5ygYWDhIWFhoeIiIiJiYyOZkJCPTg4Ojo5ODc4ODk2NDc5Ozw6ODU2Nzc4OTc4NzY4OTs7PD5BOzk5OT09Pjs7PUFERUhKTUxMR0lIT1JRUFBOTE1NT1Fdb3BydHN1eHp7e3x8fn9+f359fX59fX5+f39/gH9/f4CAgICAgYCAgICAgICAgIB/f39RR0ZHSEpIRkVGR0hMTEpJSUdDQjU2OjxDQEJGSEtITEtOVGd7hISDgoOEhomKi4uLiomKi4yJVDs4NjU2NzY2NjQ1NzYzNDY4Ojg3NjU2NTY3Nzc3ODo3Nzc4Ojs3Njg5OTg5ODc2OjxAR0ZJRklGRUZPU1JTU1JPUFBSVGVwcXN0dHd5e3x7fH1+f35/fn19fX19f39/f3+Afn+AgICAgICBgICAgICAgICAgH9/flJISEhJS0lHSUpJSkpLREVIRUJANTc4OD06PERCREZGRFZ4hISCgoOChYmKiomJioqKiouJiYqBSDY3NjQ2ODg3NDU3ODQ2Nzc5OTc2Njc2NTo6Ozo6PDg5ODk5ODc3Ojo6ODg3ODU4OTtBPT4+QkE/QUtMT1FQUU9PT1FXa3JydHR1d3p7e3t9fX5/fn9+fX19fX5/f4B+fn9/f4CAgH9/gICAgICAgH+AgICAf39+VEhHSUlMTUtKS0tMSUg/QEFAPDo1Nzk4OTc6QTk8RD9QfYSDg4SEhIaJioqIh4iIiIqKjIqJiYx6Pjo4ODs8PT45Ojs8ODk7OTo7Ojk5Ozo5PT09Pzs7Oz06Pjw6PDs8Ozw8Ojo8ODo6Ozo5OTk8Pzw9QUJESUpNS0pLTFdvcnN1dHZ4e3t7fHt9f39+f359fX19fn9/f35/f39/f3+Bf4CAgICAgICAf4CAgH+Af35URkVGSUxOTkxKSk1CPzo7PDo4OTk4OTk5OTo+PT8/Q3aEg4SEhYaIiYiHhoaGiImIiYuMi4mKioxsPDs+QkNFRUJBQUI+QENBQD89Pj5APz4/QD9APT0/Qj9BQT9BPz1AQUA/P0E8Pjw7Ojs6OTs/PTs7PT1BQUNBQkNBWHBxdHR0dnl7e3x9e31/fn9/fn19fX5+f35+fn9+f4B/f4CAgIB/gIGAf39/gICAf39/flJFQ0FHSk5PTElHSzo4Ojs5Ojo7PDo6Ojw7PT5APz1hhYOEg4WEhomJiIeGhoaHiImKi4uKioqLiotePkRHSUtKSkZHR0RGSEdFQ0BAQ0VDQkBCQ0I/QERIRUNFREVFQUZFRkRGRkRAQj49QD49P0A+Pz8/Pj8+Pjo7PTxgcXJ0dHV3enp6fX19fn5+f39+fX19fX5/fn5+fn5/gH9/gICAgICAgICAf4CAgIB/f4B+UERAPUNIT01HRkJEOTc6PTo8Oj09Pj47Pjw/PkI/Sn6DhIWGhoaIiYiIh4aGhoeJioqLjI2MjIuKiodXR0xMTUtOSUlLSElKSklFQ0RGR0ZEQ0VGREJISUtHSEdGR0dFS0pMSUtLSkNGQ0NEQkFBQ0JEQ0NERENBPTw+QGhwc3R0dnd6eHt8fH19fn5/f359fX1+fn9+fn59fn+Af3+AgH9/gICAgICAgICAgH+AgH9PQT49P0RMS0BCQkE5Nzs+Ozw6PT8+Pzw/PkJBRD5ohIKFhYeHiImJiIiHhoaGiIiIiYqMjYyMi4uKjH9QTVBNS05LSkxJSUpIS0ZER0hISUVFSEZGRUxMTUlKR0dISUpOTU9NTE5LSEZHR0VFQ0ZGRkZERUhIRkNBP0BMbXB0dXZ4eXl5fHx8fX1+fn9+fn19fX1/f35+fn5+f39/f39/f3+AgICAgIB/gICAgICAf1FBPz4/RkdHPTxAQDg3PDo7PDo9Pzw9PT9AQ0JIU36DhISFhoaHiIiIiIiIh4eIiIiJioyNjIyMjIuKjXFNUU9NTExMTEpJSEZKSURKSEdLSkhKR0dHS0xOTExISElKTVBOT05MT0tJR0lKSElESUhIRkZHR0lGQ0JBQ1VvcHV3eHp7eHh6enx8fX5+f39+fn1+fX5+fn5/f36Af39/f3+Af4CAgICAgICAgICAf39/VERBQUJHSEI/OD9AODo7Nzw9Ojw/PDw9P0JDQ0xthIOEhIWFhoeIiIiIiIeGiIiIiIiJjIyLjIyMi4uLi15SUlBNTk1LSkdGQ0hKR0xKR0tPTEtKSkxNTE9QTkhJS0xPUVFQUU9PSklKSkxKTEZHSEdGR0lGRUVCQEJCXHByd3h5enl5eXp6e3t+fn5/fn59fX19fn9+fn9+f4CAgIB/f39/gICAgICAgICAgH9/f39VRUNFRUdHRUQ7P0E7PTw4Pz09PkBFRD1CRENGSnWGg4ODhISGiIiIiIiIh4eIiIiIiIqLi4uMjIyMi4uNfFdWUlJUUk9MS0pFRkZLT05PV1ZRUE9RU1JNU1RPTVNMUFNVV1JTUlBMSk1NTUtOR0dKRkZISkRERUVCRENjcXV5eXp6ent6e3p6fH59fX9+fX19fXx9fn5/gH9/gICAf39/f3+BgYCAf39/gIB/f39/f1VGRkdHR0dIRj5AQj0/PTxBP0FBRFRLQkhJRklLeIaDhYWEhYeIiIiIiIiIiIiIiIiJiouKioyMjIyOi4uLZ1ZWa2FFUlFRUEo7O1FTUmB1XVVWVFZZWVJYWFJaZlBVV1pdUlRXUVBOUlBQUFFLS0tHSEpIRUZJSUlISWpzdnl5enl6e3t8ent8fXx9gH59fX19fX1+f39/f3+AgIB/f39/f4CAgIB/f3+AgH9/f35+VEhKSUlHR0ZFPz9BQEVBQ0ZEQ0RLVlBKT09OUFB5hoWHhoWGh4iIiIiIiIiIiIiIiIiIlJyMioqMfWGKi4uHbFtkVTpYWFhTUD9AVlVZXGRgVllicl5dVl1aVkVRWVpcWV9UWWdSVVZYVFRWU09PTUtMSklJTE1LT01Tb3R2eHl4d3l6ent6e3x9fH5/fn1+fX19fn1/f39+f4CAgH9/f3+AgICAgH9/gH+Afn9+fn5WSkpJSEdGRERCQT9ITElNUEtJSk9TUVBUVlVWVHWFhIWFhYWGh4iHiIiIiIiIiIiIiImcnaCPiY5nO36MiYqLem5wWFpbWlJTUldWVFpadYNZVX2QYVxYXV5XSVZeXltbX1lIWVhZXF1YWFlXUlFNUFFNTU9TUVFVUmFzc3Z3d3Z4eXh6e3t8fX19f39+fX59fX1+fn9/gH9/gIB/f3+Af3+AgICAf39/gIB/gHh5fVlOS0pJSUZCREBBOk9RUVdYUFBQUVJTUlZXV1dXbIGCg4WEhYaHh4eHh4iIiIiIiIiIiJaanJeIioFuhomIh4OKfmZZWVxZU1ZUV1JRV1ZjloBRZXJYWldfaFBgZlpaWFxoYkdPWmlnXFtcXV1XU05TUFBRVlZWVllab3N1d3Z2dHd4eHt7fH19fX5/fn59fn18fn9/f3+Af39/gH+AgH9/gICBgYB/gH1yfX9/b3R8XVNQT01LSkVDP0A7UFBaWlpSU1FPUVJRVVJVU1ZedXiAhYSEhYaGhoaHh4eHiIiIh4eIh4ORjomJiIaFiIiGfYB7XFBWWFRSVFJRUUxPTUtmeVpdVFlVVl1aTFRaVVNUXlpYV1dXemtYWlxcXlNQUFBJTk9XVlhbWmRxdHZ2dHR2eHl5e3t8fH19fn99fX1+fX1+f39/gICAf3+Afn56eHd2c3V7f3+AgHRrfn5rcnleW1ZVU1JPS0ZDREFNXoNsVlJTT09RT1FWUVNSUlRjZHaAg4KDhISEhIWFhISDhoaGhoeIhn6JiYiHhoOHh4d5bXFWSUtOTktNS0hKREZIRUM+U2NVf1JRUU5LUlVSTU9ZUU1OUVNVVU1RU1JQTkxLR0NJR1JTVFpdbXJ2dnV0dHd7enp7e317fX19fn19fX59fn9/f39/gH99fX5+f39/f4B+e3Zzd31+fmR1fWlxdGBkXV5bWVVRTElMSWFsknRQUVNNUVJQU1tSU1JRUlVVYnN7fH6AgYKBgX99e3uAf4OChYaHgoaGhoGEgYaFhnVfXUtDPkJCQ0NBP0RQQ0NAQz5CSEdWQEhOTUddaVFIRk9GREVGSEdIQkNIR0hKR0NCQUNATlBNUmR0dXZ1c3R2eXx6e3t7fHx9fHt+fX19fn5/f3+AgIB/f3x8fX+Af39/f4CBgH12dHt/bWh8Z25xZmhlZWJcWFNRUFVSc1dlW09PTkxRUlBVWVNVUVFUUk9WYGtsc3Z6e3h5dHJuc3RzeXh+foOAg4OCgIKAgoGBa0xHPj46Oj5APz4+PmpQS2FFRkhJRUI/SExNR01RVUpCRT8+PD08PT0/PT9BQ0I/Pjw9Qj5JTUZVb3V1dnN0dnh6fHp9e3x9fX19fH59fXx+fn9/f4B/f39/enl3eHd2dnh7foB+fXt4dnx1YXhnbHBqbGppZmBbUVFaXFleSUpPUE5LTFFSUVRVVVdRUVdWUFhbYl1hZ21tbG5qaGBucmltbHF1e3p9e3h6fHx4d3hkQkBAQTw6QkNBQUNBW1xPe05PT05LTE1PT1BMS0xXTkhHQUE8OTc3NTk5PTs7Ozg5ODk/O0FHPlx0dXV2dXZ3eXx8fH18fHx8fn18fX19fX9/f39/fn9/f314dXd6e3p3eXh1d3t8eXh1eXdjcWhpcG1ubW1oZl5PT15cWklHT1FRT01QUU5RUlNWWFNSWVROWVpbV1lcX15fZV9dXnF3a15gZ2t3b29sam9tbmxmYllHRkZIQkFGSEVFRkNMUU9hV1JYUVBTU1JVW09PUVdQTUlERj45OTY1ODc5Nzk6MzY1Nzk1PEI9ZnR1d3h3enl7fX18fHt8fX1+fnt9fn19f39/fn5+fn9/e3d1eX18enh8fHx8dHd2d3Z1d2tuaWhxbm9vb2prYFVXXlpXTUtTVFNQUVVPTFJTVFdYU1RYUUxYWVlWWFhWWFldV1hYaHNrXVZgdGthYV9dZGBfXllVUE1PTUxJR0pLSUhGQ1BPU1pXVFROUVNZU1xlVU9TVFFOS0lIQz9BOTk4ODk3ODg0NzU3ODU5OUducnV5eXp7e319fX18e318fX5+en1+fH1/f359fn59f358dHR1e3hycW9vbnR4cXJzeHZ1cWZkZ3JucHBxbm1kXV9fWVdPUFdWVlNUVk9PVVZXWFlTVVRMS1NVVVVVV1BUVVdUVVJdbl5STllgW1ZZO0RVV1RbZkpMUFJST01NTk1NTEpGUFBVWVNUT0pOT1VTVFxWUlVTU09NTElISEY/Pj06Nzg3NjU5OTY3NTY1V3FxdHh6ent8fX19fnx8fXx+fX15fX18fn5+fXx8fX1+fXxydnF4eHJ1dXFxbnBwb3B1dnRuamRkanBwcXJwbmZlZGNcXlJUWlZXVFNWVFJYV1lZWVJVT0lHT1BPT01SSk9QT09OTk9UTE1JUFBTVFUyPFhNSUFRPWNgUVNRUE5QUE9OTk1QTlRSUFJMSUxLT1JQUVJTVFFTT0xNS0xMSENCQT06OTg3NjtCNDU2NjtlcHJ2eHl7fHx9fnx9fH19fX18e3h8ent9fX58e3l9fH18e3B1b3d1cHV0b3N2cHFxcHV1dmNqZ2VXaHRycnFuaWlocFZWVFVYVVZVUldWVVpZWFdWUVNGRkFGR0dIRkpESEpIR0VITEhLSUdMTVBNRy9FX1I9M0A+am9hUlJRQEdUUU9QUFFOUU9QT0xKTExPUE5NUFFRTlBPSkxNTUtHRUVDQjs9PTw5PUc2Njc2RG5xdXd6e3t8fX18enx8fX5+fXt5dnh3eXl8fXp6dn17fHp6b3Fud3JwdnFtcHNwb3Bzc3N0ZmdgaFpXa3JzcmxtbWtuYmVQU1RSU1VPV1ZVWVlWUVFRT0A+Oz0/QEJBQ0BCRURBQEdIR0hGRkhKTUxER0NPUkI4RE1TXWdTUVNBR1VQT1FRUE1NTkxKTEtMTk9PUUxOTk1JTUxJS0tMS0dGRkVEPEFBPjtARTs8ODlUcnN1eXt7e3x8fHt5fHp6fn58e3V0dXJ2dnp6eHpyfHt8eXltcW94cnF1bm5xcm9vb3Rzc3J1dGtnZ15lam1wa29xbWltY0xPTk1RU0xUVVRXV1VMTEtIPTk4Nzs/QT49PUFAQj0+RUhGREZGSUdKSkBGQUFARUdESU9IUVJhXFFQUk9TTk9PTExPTUtNTE1PTltWS01RT0hKSENJSkxMS0ZGRkU/QkM+PUJHP0I/QGRydXd7ent7fHt6end8d3l+fnt7cXN0cHJzd3R4eHN6e3l2d2xxb3ZxdHRsb3Fybm5vc3ZydHNycmtsZW5zaG1ubWxtbGprSUxISE9RSlFTUVRTTktIQ0U9OTg3OT9CPzs+QUBAPkFESUVDSEdJR0lFQkI/PjxCQUBHSkVNT2JlUE1PTVdLTE5LS01NTExLTk5TZE1KTFJJSUlFQklKTE1OSkdJRkJCQkA/RUZFSERMb3B2enl5e3t6fHp3c3h0eHx8eXpucXJtbm9ycnZyc3h8eHZ2bXBtc3B1dGxwcHJvb29ydnVyVlZucWdseYRqbXFybm5qaG9ISkNHTExJTVBNUE9HS0U/Qj05OTk6P0I/PEFCQUFEREdLRkRJSUdHSENDP0I+Pz9APUNFRExNUVRMSklNVEZJSUpMSUpLSUlMTU9QUVBLR0NLR0NDS0pMTk9OSUpJR0NDQ0RJSk1MSVpzbnh5eHp6e3l8dnJwdXJ0eXl2eGpxbmpsbG50dG1zdXtzdHhyb25xb3ZzbnBvcnBvcHN0eWpOYGdzanR8eWdvc3FpcWhlcUhKQ0ZHSEdKS0lKTERHQjw+PTo6OjtBQj89QkJDQ0hFSkxKRUlJRkdIQ0M7QUBCPkA/QkRESU1PR0hKR0hLREhJS01ISkxISUpMSk1dUkhJRE5HQkVMS05OUU5LTUpLRkdHSk1OUk5NY25qd3Z3e3l7en1xbWxza3B0dHR1aHBtamlra3RwbnR0eXByeXRvcnFvd3NvcXB0cnBydXR5a05WbXVscXt2aW5vaWp0aGVwRkpDRkVGREVFRkVHQ0NAPTw9Ojs6O0FEQD9CQ0VFSUZKSkxGSUlHRkZEQjpBQ0M+P0NDQ0RHS01ISk5IREhFSUxOTUhJTEdGRklJTE5LSUhFT0lDR05NUE5QTk5PTUtJSElPU1FSTlNnZ2Zyb3N4dnt6fGxoam9la3Btc3FmbWxoaWtsdG1wdXR3cW94dG90c3J2c3BxcnRzcnR1dXZ2WFZ1dWtvdHJrb3ZsaG1mX3BHSkNFRURCQkFFQERCPj8+Ozs7PTs9P0RCP0FDRkdKRkpJTEhHR0dGRUM/PURFQj5BQ0JDRUdISUdNUElGRUZLTk9LRkhJRkVDRElJSEtJR0hQS0RKTU1RTk9OT1BOSkpJTVJVVVJQWGVhYW1mcHJvcnl6Z2VoaGNpbGZxbGZsbWdpa2xzbXB2dXRwbnZyb3Nyc3V0cXNzdXRzdXZ2dnl2dXR2bGt1dW1ydnFsbmxlck1HRURGQkFAQUQ8QkE+QT06Oj0/Oz4/QUI/QEJFR0pGSkdJR0ZGRkRDQkFBRUZDQkJCREVFR0dIRkxQTEhOSUpMS0lGSEVGRUNDSEhIS0pHS1JNQ09PTlFPT09OT09LS0tQVVdWVlRZYF9daWBtaW5ocnNiZWZmZGhoZm5pZm1taGtrbXJpcXZ1c3Ftdm5vcXJzd3Nyc3R1dnZ2dnd2d3Z2dHd1a3N1bnV0c3Bya2tzTUdHRUdBQUBDRDxBQUBDPDg6PT46Pz1AQkBAQERGSEVIRkZIRkVFRENFQkRJRkNHRUFFR0VGRkdFSU1LSFFMSktISElFRkhIRUNJSUpLTUtQU05EUlNRUVJOT01PUE1MTlNXVldZVlheWl1kYGhjamlna19kZWZjaGdna2dna21rbWxwcWd0dHVyc252b3FwcnR4cXNzdXZ1gpF5dnZ0eHV1d3hub3VvcnN1cXFpcHpNR0dHSEFBQkVFPEBDQkQ8Nzo9Pjs+O0FCPj8/Q0VGREZEREdFQ0VDREZGRkpFRUlHQkdIRkdGRUNGSkpHTUpMS0hKS0ZJSEpIRUtLTExOT1JUT0hUVVRRVFBRTU5RTk1RV1pWWllXWl5aWGFgYGBeaGVjYGRlZ2dqaGhqZ2hubGxvbXFwaXV1eHJycHVwcHBydXZwdXN1dnV7fn14dnR3dnZ2d3BsdXBtc3Vub3NzeU1ISEdIQ0FDR0U8QEVCRDw4Oj4+Pjw8QkI9QD5BQkZDRUNDR0NDRERGR0dHSUZHS0hDSUhHSUdGREhLSUZLSE1LSktLSEtKTUtJTkxOTk9SVVZPTFZWVFFUUlJMT1FQT1RZWllcWlpcX19dX2NeXGJkbGNgZGdocoVoZ2pmam5ucG9uc3FqdHV4cnNzdHJucHF2cnF1cnV1c355jn11dXZ2dnZ4cml1cWtydGxxd3F1S0lKSEpFQkRHRT1BR0REQDk8PkA/Pj9DQjxAPkFBRkNFRENIREVERkZHSEZIR0lLSkVKSEhKSEZGTEhISEpHTEtMTExJTUpNTk1PTFBQUVVWV09LVlZVU1NSUUxPUlJRVltbXV5bXV5gYGFgYmZdZGBmZ2BlaGpkc3NmamhnbHBycW9zc25zd3dwdXZ0c21vcnVvcnNwdXJ2cnSBdnV1dXd2dXd0Z3Rya3Fya3J3cHdJSktJS0dCRURFPEFGRERCOz8/QUBAQERBQEI+QUNIQkVERkdFSEVGRUlIRklISkxISEpKSUtKRkpLSElKSkdLSkxMSUlMS01OTk9MT1BSVVdWTU5UVlVTUlFQTU5UU1JXW15eX11eYGBhYWJgY2RlYWRpYmRpamd2i2xraWdtb3NxcHFwcHJ5d3J1dXRzbW1zc21xcm90dXVzcHN3dHV1d3Z1dXRlcXNrcHFqcnZwd0pMTEtMR0NDQUU8P0VFREM9QUFDQkJDRUFDREFBRUdDR0dIRkVJRkNHSkdHSkZJTEhJSk1LTUxHS0lIS0tOUUtSUExTTUpNTU5QUFBUT1dYWFtOU1FXXFpTVlBOVFVUVFhaX2JiX2RhXmFjXmBmY2FiZ25oYmloaG14dm1oaW5vc3JwcXJycnZ0c3Vzc3Nua3NxbXByb3R2c3FxdXZ1c3d5d3V0dWNtdGtvcGpxdHB3TE1MTExHREFARD49REVGQz9DQUVEREZDQkVHQ0JIRkJISklHSEpGREtKR0hKSElLR0pKTktOTElMSEpNS1pmSmRbS2xSR05NX25VbHNbcXBid2NSUGJ2dWh1Y2F2YVhucWJkdmluemZcbHVgbGtWYHd1aGpnaGZnbG1qbW9qbW9zcnBycnFyc3Jzc3J0cm5sdG9ucHFxdXVycXN0dnZ1dXl3dXR0YGt0a3Bwa3FzcXlLTkpLSkZCP0BCPzxEREZEQ0NCRUVERkJFRkdEREpFRUpMS0lLTEdHTkpISktHS0pJSkpOTE1NTExJTUxMW3NiZHBebGxVTE5lcl1nZXFsbnRncGlfYVlubWJwcGJraWpnb3F0ZXRublxwdmdwTkxyeXZrYWFrZWVseG1rdmxub3NycHJxcHFycXJycnRybW1zbm5vcHJ1dHFzc3R1dXV0d3h2dXRibXVrcHBscnJxektMSUlHRUQ/QUE/PUJFRkJFQ0VERUVEQ0hIR0RES0hHS01NSkxMRkpOSEpLSklMSkpJSk1NTk1NTUtOTU1bcnBvbnBwa2pMT1BtWE5pYnRycGFtb3ZcWWxQW21tWnFta29teHh0c2lwXWBzbHFqVXV5eG9jXmtmYmdwcGppb3Bwc3NwcXBxcXJycXFycnRsbXJtbW5vcnV0cXRydHV1dHV1enZ1dGVudWtwb2xzcnJ5SktHR0VFRUJBQj0/P0VHQkdESEVFREJGSUhIRUdLSkdNTE5KTE1HTE5JTUtISk1JSklKSk5PTk5NTE5NTFxoZHVdbHFWa01PUW5VWmtea2x2YWxkdFRlY05sWWxcdHBraWx4and1aHBdX3NraFdiY3d8b2NgZ2hhY2l0eWtubnFzc3BxcHFwcnFwcHBydWttcW1tbW9xc3Rxc3J0dnZzd3Z6dnV0aG91bHNvbXNydHZJTUdJRUVEQ0FCPEJAQkZDR0ZLR0VDQ0hLSEhGSUxLRk1LS1JSTEhNTUlOSklITkdKSkhJTk9NTkxKTU1KWnRwcG9xcWxrT1FSbllza2dvb3Fxb210Xm5YYXRfbm9wb3Fyb291c3R0alpedGN3eHJqbnpoYWFjZmFiam10dXBzdXZzcXBwcW9ydHt/fn13bGtxbmxtbnByc3F0dHN1dXR4eHl5dHVrb3VtdG9uc3N2dElLSEpDRERFQEA+Q0NBRkNISU1IRkNGSkxJR0ZKTUxGT0pKV1JLR0tKSk5JSUpMSUtKSUlLTE1NTElLS0tTa2JZaV5famNyclpfWWpvX2VlVWtfY1thYVFgbWhcalxuaWlkW29lZHBdWlxrW21xY3BzbGRnY2RnYGBrbXBwb3R5cnVxb3BxbnmFiIeHhoWAdnNua21tb25xcnR0cnR1dXZ5eHhzdW5xdW53cXJ1dHdySEhGSkRFQ0ZBQEFFRENGQkhKTEdGQ0ZLTElFRkpPTElPSkxbUUpGSEhLTUlISkpLS0lISUdLS0tLR0hLSkxLTEpJS0xOVFtdVFBVTVFPTk9PVlFPUFFOT1FKSk5QUWRxaVRZVltbXFVZWl1YXVxcY2ZhYWZiY2ZfXmZrbWhtdHhydHJvcHB0hoeGhoaFhYaHg3pwbW1sa3FzdHRydHZ0dXl5eHV2cXJ1b3ZydHN1dXNHQ0VHRkZARUM+Q0dERUdDSUtMR0ZER0pMSERHSVBLTE9LTFdNSUZFSElKSElLSExKSUZISEpISEhFRkxJSEpOS0hPXFdeT1xcYF5PWFlTXFxiXk1YWk1YYVJLWWFaU2BkXGFYW2RkVlZYXFlaWFxWWVxeY19kYGFfZWhrZ210dHFxdHBxcoGGhoaFhoWFhYaGhoR9cmtpb3Jzc3N0d3l5eHl4d3h0cXhyeHNxcnVydE9CQ0RMTEFDREFESUVHR0ZLSktHRUVKSkpGREdIUEpMTUpNUklIRUFIRkpJS0tJTEpJR0VKSEVGR0VFSkdCSUxJSlRfWWBYYGFbYFVYWVRdXlpfUllcUF5cWU5fXF5TW15kXlpdYGNfWV9iW2BeW1VZWFpfXmNjYmFjZWlla3Jwb3Bwbm93hoaFhYaCe4CFhYaGhYaFf3VxcHJyc3V5enp5eXh4eHdyeXZ4cnF4dnR2YVNKSk1IRENCQ0ZHRUdHSUpKSUhERktLS0VFSElOSk5MSExOR0hGPkdHTElLS0pLS0lHRUlGQ0RFQkZKRD9JSkhOWmJZXl5hX1JUU1dfX1xdWV5RWVxNVl9XS1FZW1FbX2JhXV5jYWBiYmJjY2VaUllWV11aXmRgX19jZWJob21tbGxsbHWFf4SDeXV8hIWFhYaGhYWGhoN9d3JydHd5eXl5f359eXV5dnZybnp3dnhYUUpGREdFQkVHSEZHSElGR0pHSEZIS0lLRENLSk1NTExISkpISkc/R0ZOSktLTUtLS0lHSUVFQERBSElBPkhJRk9dYFpbZF1fVFFSWF1cXFxfW0tXXExSXFlJTV5RUV1fYmNjY2NiXGRjYmRjZVhSV1VUXVlbYV9eX2FhX2Rsa21qa2xudn51gXp8hIWFhYWFhYaGhYaFhoaGgnpyc3V1e4WHh4eGhYSBfnhwend2eFxSTUNASUZDRUtJRkdHSUdHSkZGRklMSk5FQ0tKTE5KTElLSklJR0JISFFNS0tPTUtLSUhIRkU/RUJISEFARkVDU11ZXlhfWV9bXVVYWE9cXFFLSlZeWF5bXVZaYVJSX19iYmBgYmJfY2JiZGRiWFBSUlNcVFxdXV5eX19fZGhnbGpubnB7e3x+e4CCg4SFhYWFhYWEhIWDhISHh4FzcneFh4eHh4eHh4eHh4WDgHx4XFNLQkFHR0RGTVJIRFJLRkhISERGS0lNUEVHSUpLTkxMSUxLSklHREhLUU9NTFBNTEtLSUpERUFFQ0hGQUFGQ0FVVUVcVF5TVl9YTlRVTVlaTEpLVGBhW19YX15iXU9ZYlxgYF9iY2FdYmFXYF9UUVBRUllTXlxbXV1eYGJmZmVsZm9vd3x7gHt9f4CEhISEhIWFhYODhYKDgoWFhnpvgYaGhoeHiIeGhoaFhYSFg35JTkZERkZIRElTY1FFV19JR0dIREZNSlBQRklISktOTExLTUtKSkdFSk5RUU5OUE1OTU5JTEJEQUNDRkNCQENEQExIQ0xMUE9OTEZNRkZISUdGTEtNT1BJTE9QUFNQTFFTUlVaWFdZV1djVk5SVFBRUE9RVVRcWVlbXVxhYWVmY2hkbG1xc3N6eX97en+EhISEhISEhIKEgH57gYOBfXuFhIaGh4eHhYWFhISEgoGAfUtJRUVHRkdES05eTUhIWU1HSEpIR01MUVFJS0pLS05NVU5PS0tMR0dLUFNTTlBQTk9PT0hMRmBFRF5MRGZiQ0xaSF5cc21PTVZtWEtDT19Ua1ZnSV1XVV5ETFFVTE1TVlFSVFhWVFhUVFxUT2VaaGhlWlVrVFhXVVtcW2BgYWJiYmBnaWdubGhyenx9foGEhISEg4ODgX19enJ7gXp7f4KAg4SEhYWBhIWBg4N/fnp7TElFRkZIRUVLUFRKS0dgVEhKT0pJT01SUUtNS0xPUlVST1BKTE5HSE1RW1lPUFBOUFFQSktRf1FJfFlZcnNXUG1HcW5vYVZQcXF0T0Jqc25xc3BTb19bblhdVlxYVWtoVV1WY1lgWVpeVVVXf2l0dXVfYXZfWGJcXGZbX2FhYWJeYGNnbW9sYHB3dHiBgYKDhIJ/fX6Adnh6bXZ+dHh9gHx+gIGChHyAg3p/gX9+d3dNSUVITU1CRExMR0pMRlJWTEtPSExSWFdRTk9PTVFUTk9RUEtMT0dNUFNbWlRRUk9QUFBLSVp4XVR4ZGhYUlNQdmZ0bHBibmZrUnJOTHdtanJwc3JxcnBvb4BdZXp1eHFxenF+cn1rdX1hUmh8ZXNzb3NzfH1vfnhvf3JgYGBiYlthYWhsbmtibGZnbXd+gYCDfnt4d4B0dnpocn5udHx+d3h7foCDeHyBdXx/fHxzc01LRmBdR0FFTU1IS0tISlBPTU5KTlZeWVVMUVNOWVlMU1JSTkxQSVFSVFlXV1FUUFBQUktIZ3hsY3hxbVpKS1R5cHVtdWJudlBkZEhldnFtd2+AamZ4eGlXclFoem1panp6fWx4en9waG5YdXVqdnVwgGFzaH1pbHh8b19fX2NiXF9kZWdqamVnYmNkbGxwcHN0c3NzeXFyeGJsdGdyeXtzc3V5foFzdnpufH15eHJuTUlSdE5DQkVQUUhLTEpMUU9PT01QWmBaWEtUV1BhXlJWUVlTTVBKU1RVWFdXUFVQT05TSktyb3V1cXVxY2hgVm5LcXBeR2h5V3ZUS2h4fXdgeXtzbmFdbW9kU2dydW5teXB3bHZzdHFsbVxzfnprbXl8bHVufGxxdnV4Xl9fYl9dX2VlaWdoZmVeYmJpaWlqa25va3FubWpwYWNmZG93eG9tcHN5f25xcGp7enRyb21LS1pWSEdFR1JRS01OTExRUVBQUFFXXFlVTlZZVWZYUlJZXlRNTkpUVFZXWVdPU09PTlJJUm1IaXdLYGR2dlRWbE5ubHtyYWpnf3VUS1drZ3xsbWx4X1pwentfYHpzY3JveHFoZHxpcntdVEtrX3Z1bGp2fHttfnlrfHBdXl5iW19iZGVnZmVlY1tjY2lra3JzcndnbWloZGdgYWxhZ3NybGdsbXJ8a21oa3t0bW1rbU9HSktISkhIUlFNT1BMTFNTUk9TUlhSV1RQV1pWVlRUVGFgUU9OS1RTU1FWVk9PTU5PUUpIUU1PVUxLS1JTUlFST1ZVUVFPUlJYWFBNT1VUV1hYW1tVUVJXW1dYV1tPUlRXV1hRXVhWXFVUT1hSV1dYWVpgXGdyX1tbWl1dX2NaX2NjZWdkZGRjWmRiZ2ZmbW5tdWZmZ2NgZl5dZ2BkbGhmZ2tocHpoZ2drdWpoZ2lsUElLS0xNS0pUUk5SUVBMVlVUUFRVWFVaVlJbXVZVVFdVWVhPT0xOV1RQTlVTTlBOTFFQS0lRUUtRTUpKT1FUUVBRU1JKSE1PUFFSUFBQVFVSWFdcV1NSUFFVVVVTWlFOUlFXVVNZVlRYVFNRVFNVVVlZWF5aX2FdXFpaXFxgY1xeYmJkZ2VlZWJZYGFjYWJoaGpuY2FkXl9jXVpjXGJtYV5mZmdtc2RpaGtrZWRjZmhRSktLTk9MTVRRT1RRUk1YV1VUVlhXV1pWU1xgVldWWVVYVFFQS09YU1BOVVBOUU5MU1BNTlVTTlFOTU5RU09UUFJUVE5LTU9SVFRRUVFVV1VZWltZUlVSVFhXVllcU09TVFdVVFlVVlhUUlFXVVZYXFpcYF1XWV9dXl1cXWBhXltiY2NoZ2ZlYlhgYGJdYGhlZ2VhXl9dXV5aWl9aX2dgXl5dY2hrYWhmaGZkYGJkYlBLTUxQUUxPVFBQVFFPUVpZWFdZWlpYWVZdamRWWFlaV1ZTVE9LT1ZUUE9UUFBRTk1SUU9RWFRRUU9NT1JUTVdRU1RVT05OUVRWVVJSUlRYVlpdXFpWVlFSV1hVW1tWUFNVVVVWWFNXV1RSUVhWVltfW19gX1ZfXV5gXVxgX19fWmJjZWloZWViWWJgYl5eZmRjYGJdXFxcXFlaW1hbYVteXV1fYl9fYmRkYmRfX2BcUE1OTlJRTVJTUFNVUU9WXFpaV1tbXFlaW2RxbWhkX1tZVlZYUk1NV1NNTVJPUVJPTVBTUlVaVVRQUExQV1VQVlJTUlhNT1BSVVhVVFRTVFlYW15dXFtWUk9VVlVbWlZRU1ZUVlhUU1haU1JRWVdXXV9bYGBgVmJcYGFdYGJfXGBdY2FjaGllZmBaY2BhX19lZV9gY1taXFtcWlpZWVdcWlxbYF5gW15eYWBfY1xZYFpRTk9OVlFQVVNQVVRTUFdcXFxZXlxfV1xeanB3eYBjXFtWVllSTlBXU05RUVBSVFJMUlRTWVtXVU9STlNYVVNRVFFRWU9RU1NWW1ZWVlNWWlhdXlxcXlZTTlRWVltbVVFUVFVXWFJTWVxUUlJcWFpdXl1iYWBXYltjYl5hY19cYmFiX2RnaWVnXVxkYGFgYWNkX2JfWVpfW1xbWFhZV1daWlphXV1bXVxcWl1gV1tbWlBPT09ZUFVVU1JYUlRQW11eXVxgXGBVXFxoanJ9c2xoXFVZV1FPUltTUlFUUlRVVEtRVlVaWlpTT1NRVVVUUk5VUVJaUlRVVFhdV1hYU1hcWF5dWVpdVVVOVlZXXlpXUVRUV1hYU1ZZXFRSVl1ZXV1hXmNjX1lgW2ViX2RkXl5jY2FeZWZpZWZeXmRhYWFiY2RfYl5YW19bXFtYWFhYV1taW2BdW1tcW1haW15WXlldUE9PUlpQWlVWV1ZUVFReXmBfXmJcYFVdXmJreXVtfWxaVVpWUVFUXFRUVFVUVllXTFJaVlxaXFJQVVNXVVVST1dRU1dTV1VWW15YW1lVWl5YX15ZXFlSV1JZWFlfWVlSVFVZWVlVV1lcVVRaXV1eYWJgZWRdXl1dZWFiZmReX2RjYFxnZWhmZGJgZWFfYWFiYl9gXldZXlpcXFpZWVdWXVpdXltaW1xbV1lcXVZYV11TT1BXWVFcVVZZV1dVWF9gYWFgY11gVV1eYmVldoJ7aFhZWlRWVFZcWFdXVlZXXVhPVVxZXl1dVFNYUlZVU1FSV1FTVlRYWFheXlhdW1VdX1hfX1hcVlFYVFlaWmFYW1RWWFtZWldYWVpXVl1eYF9kY2JlZV5iXGBmYmRmZF9gZGJhW2ZjaGZkZmFmX19hYmFhYF9eVlVdWVtcW1lcWVldW1tbWFhZW1laWl1fXVRZXVVOVFpWVFxVV1dZV1ZcYGFiY2FjX19WW2BkYV96dW9oWlxaVlhWWFtaWVtZWFlgVk9UXVtgYVxVVVlQVFZUUlVVUVNVV1tbXF9fWl9cVl9fWV1eWV1WUlhXWVlcYlldVVZaXFpbWlpZWlhZX19gYGRjZGVlY2RaYmZjZ2ZlXmFiYGNdYmNpZWRoX2deYmJjYWFgXl9YVFpaWltbWFxYWFxbWltXV1pYV1xbXGBdVl1dU09WWlZWWlZZVlhXWF1fYmFkYWRhXllZYWRiYGtmaF5cXVtXV1laXFxcX1tZW2JWU1deXWFjXFNWWVBWVVVVVVVTVVRYXV1fYGBdYV1XYV5bXlxbXlhVWFdbWl9fW15XWFxcXF1dW1pcV1pfYV5gZGRkZmZnY1ljZmVoZ2ReY2BfZWNdZmlkZWlfZ15jYmNhYWBfX1tYWVtZWllYWlhXW1taW1dYWlRaXVxbYFxVXmJNUldZVldaWVtcWVdZXmBiYWVhZGFdXllhY2JfYWBhX11dXVhXW1tdXV9fXFpdY1hZWF1gY2RfUlhZUFdVV1hXVlZXVl1dXmFiYV9iXllhXV1eWVxdWVhVVltbYF5cX1lZXl1eXmBcWlpZW19iX2JlZGVmZ2hjWmVmZ2lnY19jXmFmZVppaWNmaWNmX2JiY2FgYF9dXVpXW1lZWFhaWVdaW1pZV1hWVVtdXV1gYGJheEtXV1xZV11cXF1aV1xdX2BiZGJjYV1gWGJjYmBjYWNeXF1cWFdbXF9dYF9dW2BkXFxYWmJlY2FSXFlPWFZZW1lZV1laYF5hYmNgYWNfXGJdX11bXl1ZWVRYXVxfX15fW1peXmBiYltbV1tdYGJiY2VkZ2ZmZ2VdZWdoaWZjYWJbY2dgXGlpY2hpZmVgYmFjYV9gX11dXFlcWVhXWFlZV1xbWldWWFBYWl1hY2Zmcmt/SllXXVtaX11cXlxYXVteX2JjYmFhXWJbYmRiYGNiYl1cW1pXWGpxYFxgX11cYWNfXllZY2VkYlRfWlFZV1xdXFtZW1tjYGNjY2BiZGFgY15gXF5eXlpYVVteXFxhYV9dW2BhYmZiXltTXF9gY2RkZmVnZ2ZmZmBmZ2hoZ2RkYFtlZ15haGhjaWhmY2BiYGNiX19fXV1bWltZWFhYVlpXXFtaVlZVTFhYXGdpa2h1eIF2dnZ2dnZ2dnZ2dnd3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d4eHh4eXl5enp6enp6e3p6ent7e3t7e3t7e3t7e3t7e3x7e3t7e3t7e3t7fHx8fHx8fHx8fHx8fHt7e3t8fHx8fHx8fHx8e3t7fHx8fHx7e3t7e3t7fYmIhomHhYKBgoOCg4OCgoKCgoKCgoKCgoGAgYCBgICAgYCBgYGAfnx8fHx8fHx8fHx8fHx8fHZ2dnZ2dnZ2dnZ3dnd3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3h4eHh5eXl6enp6enp6ent7e3t7e3t7e3t7e3t7e3t7e3t7e3t6e3t7e3t7fHx8fHx8fHx8fHx7e3t7e3t7e3t7e3x7e3t7e3t7fHx8fHt7e3t7e3t8iYmHiYaFgoGCgoGCgoKCgYKCgoKCgoKBgYGAgICAgICAgIGBgYB9fHx8e3x8fHx8fHx8fHx8dnV1dXV1dXV2dnZ3dnd3d3d3d3d3d3d3d3d3d3d3d3d3d3d4eHh4eHh5eXl5eXl5eXl5eXp7e3p6e3p6enp6enp6ent7e3t6enp6enp6ent7fHx8fHx8fHx8fHx7e3t7e3t7fHx8e3t7e3t7e3t7fHx8fHx7fHt7e3uHiYiJhYSDgYKCgoODgoKCgoKCgoKCgYGBgICAgICAgICAgYKBgH58fHx8fHx8fHx8fHx8fHx2dXR1dXV1dHV2d3d3d3d3d3d3d3d3d3h4eHh4eHh4eHh4eHh4eHh4eHl5eXl5eXl5eXl5enp6e3t6enp6enp6enp7e3p7enp6enp6enp6e3t8fHx8fHx8fHx8fHx8fHx8e3x8fHx8e3t7e3t7e3x8fHx8fHt7e3t7e4aJiYiFhYOBgoKCg4OCgoKCgoKCgoKBgYGAgICAgICAgIGBgYCAfnx8fHx8fHx8fHx9fX18fHjF1NLS0tLUk3t9fX19fYSMi4uLi454KSkqKiopKz0/Pj4+Pj5tgH5+f397pdfT09PT08/ExcXFxcXH0tTU1NPT08S+vr6+vr7K09LS0tLWun1+f39/f359fHx8fHx8fHx8fHx8fHx8fHx7fHx8fHx8fHx8fHt7e3t7hIuHh4aHgoGDg4GCgoKCgoKCgoKCgoGBgYCAgICAgICAgYCBgIB+fHx8fHx8fHx9fXx8fH19eNXn5OTk5OeZe39/f39+hpCPj4+Pk3kZGhoaGhocMTMzMzMzMmqCf4CAgHut6eTk5OTl4NTU1NTU1Nbj5eXl5eTl0svMzczNzNvm5eXl5enHfX5/f39/f319fXx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx7e3uCjYeIh4eDgoSCgYKCgoKCgoOCgoKCgYGBgICAgICAgICAgICAgH58fHx8fHx8fXx8fH19fX12fn9/f39/gHl3d3d3d3d4eXp6enp6eG9vb3BwcHBycnJycnJyd3p5eXp6en6Dg4ODg4ODgoKDg4OCg4SEhISEg4OCgoKCgoKChISEhISEhYJ8fX19fX19fX19fX18fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx7e4CMhomHh4SDhIKCgoKCgYKCg4KCgoGBgYGBgYCAf4CAgICAgICAfnx8fHx8fHx8fX19fX19fXZ0dHR0dHd1dnd6e3h7eHd2eXx6enp5fXl5eXh4eHh5eXl5enp5eXl5enp6eXh4eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXp6enp6enp6e3x8fHx9fX19fX19fX18fH19fX18fHx8fHx8fHx8fHx8fHx8fHx8fHx8f4uHi4qIhIODgoKCg4KBgoKDgoKCgYGBgYGAgIGAf4CAgH+AgYF+fX18fHx8fHx9fX19fX19d3d3dnZ3fXh3d316eH14d3Z6fHl9fXt9e3h3d3d3eHh4eHh5eXl5eXp6ent7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7fHx8fHx8fHx8fHx8fHx9fX19fX19fX19fX19fX19fX19fHx8fHx8fHx7e3x8fHx8fHx8fHx+iomMjImFg4SEgoKDgoGCgoKCgoKBgYGBgYCAgICAgICAf4CAgH19fXx8fH19fX19fX19fX13d3d3d3p9eHt4fHx3e3h3dnp+e319fX58eHh4eHh4eHh4eHh5eXl6enp6e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3x8fHx8fHx8fHx8fHx8fHx8fX19fXx9fX19fX19fX19fX19fHx8fHx8fHt7fHx8fHx8fHx8fH2Kio2NioWDg4OCgoKCgYGCgoKBgoGBgYKBgIGBgICAgIB/gIGAfXx9fX18fX19fX19fX19fXd3d3d3fX55d3d4e3p7eHd3eHl9fXt9fnx4eHh4eHh4eHh4eXl5enp6ent7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3x8fHt8fHx8fHx8fHx8fHx8fH19fX18fH18fH18fHx8fX19fX18fHx8fHx8fHx8fHx8fHx8fHx8foqJjo2JhISEg4KDgoKBgYKBgoKCgYGBgoGAgYKAgICAgH+BgIB8fH19fX18fX19fX19fn5+d3d3d3d5fHl7eHx9eXt4enp6fHx8fHt+e3h4eHh4eHh4eXl5eXp6enp7e3t7e3t7e3t7e3t7e3t7e3t7e3x8fHt7fHx7fHx8fHx8fHx8fXx8fX19fX19fXx8fHx8fHx8fXx9fX19fXx8fHx8fHx8fHx8fHx8fHx8fHx/iIeNioeFhoaDg4ODgoGBgoGCgoGBgYGCgYCAgoF/gICAf4CAgHx8fX19fX19fX19fX5+fn53d3d3d3Z4eHl3eXp4enh5eXl7eHp6eXx4eHh5eXh4eHh5eXl5enp7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t8fHx8fHx8fHx9fX19fX19fX19fX19fX18fH18fH19fX19fH19fX19fHx8fHx8fHx8fHx8fX+HiIyIhoeHhIKDhISCgYKBgYKCgoGBgYKBgIGBgYGAgIB/gIGAfHx9fX19fX19fX1+fn5+fnd3d3d3d3d3d3d3eHh4eHh4eHh4eHl5eHl5eXl5eXl5eXl6enp6ent7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7fHx8fHx8fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fHx8fHx8fX19fHx8gIeIi4eHiYaDg4SDg4KBgYGCgoGBgYKCgYGBgIGBgYCAgICBgX97fH19fX19fX19fn5+fn5+d3d3d3d3d3d4eHd4dnl5eHh4eHh5eXl5eXl5eXl5eXl5enp6enp6e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7fHx7fHx8fHx8fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fHx8fH19fXx9fXyBhoqKiYmIhIOFhISCgoGBgYGCgYGCgoGBgYCAgYGAgIGAgIGBf3x8fX19fX1+fn5+fn5+f394eHd4eHh4eHZxZGpeam15eXl4eHl5eXl5eXl5enp6enp6enp6enp7e3t8e3x8fHt7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3x8fHx9fHx8fH19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fIGFiYqJioeEhYWEg4KCgYGBgoKBgYKBgYGBgYCBgYCAgYCBgIF+fH1+fn5+fn5+fn5+fn9/f3h4eHh4eHh5bWRiZV9fXm95eXl5eXl5eXl5eXp6enp6enp6enp6e3t7e3t7fHx8fHx8fHt7e3t7e3t7e3t7e3t7e3t7e3t7e3t7fHx8fHx9fHx8fH19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18goWKiomJhISGhYSDg4KBgYKCgoGBgoGBgYKBgIGBgICAgICBgH58fX5+fn5+fn5+fn9/f39/eHh4eHh4eW5kZWdlZGJeZnh5eXl5enp6enp6enp6enp6enp6e3t7e3t7e3x8fHx8fHt8fHt7e3t7e3t7e3t7e3t7e3t7e3t7fHx8fHx8fHx8fHx9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXyChouJiIqEhYaEg4OEgoGBgYGCgYKCgYGBgYCAgYGBgIB/gIGBf3x8fn5+fn5+fn9/f39/f394eHh4eHl3Z2VkZWZkZWFfaXl6enp6enp6enp6enp6ent7e3t7e3t7e3t7e3t8fHx7e3t7e3t7e3t7e3t7e3t7e3t7e3t7fHt8fHx8fHx8fHx9fX19fX19fX19fX19fXx9fX19fX19fX19fX19fX19fX19fX19fX19fIKGi4eJh4SEhoSDg4WBgYGBgYKCgYGBgYKBgICAgYGAgYCAgYF+fHx/f35/f39/f39/f39/gHl5eXl5eWtlYWJlZWFlZV5ieHdze3p6enp6enp6enp6e3t7e3t7e3t7e3t7fHt7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t8fHx8fHx8fH18fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19g4aLhoiFhYaEgoOEhIKBgYGBgoKBgYKBgYGAgYGBgYGAgIGBgn98fH9/f39/f39/f3+AgICAeXl5eXl0Y2NlZGNmY2doZGZsZF5ze3p6enp6enp6enp6ent7e3t7e3t8fHx7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3x8fHx8fHx8fH19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX1+fn6DhouGhoaGhYODg4SDgYGBgYGCgoGBgYKBgYCAgYGBgYCAgYGBfnx8f39/f39/gICAgICAgIB5eXl6d2RhY2diYmRdW2VfYV1eYGFoeHp6enp6enp6enp6e3t7e3t7fHx8e3x7e3t7e3t7e3t7e3t7e3t7e3t7e3t8fHx8fHx8fHx8fH19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX1+fn5+fn5+foSFi4eGhoaGhIODg4KBgYGBgoKCgYKBgoGAgIGBgYGAgYGBgYF+fX1/gH+AgICAgICAgICAgHl5eW9vYmJiZF5jZ19dYWFgXF9kYlttfHp6enp6enp6enp7e3t7fHx8e3t7e3t7e3t7e3t7e3t7e3t7fHx7e3x7fHx8fHx8fHx8fH19fH19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX5+fn5+fn5+fn5/hIiLhoSHhoaEhIODgoGBgYGCgYGBgYKCgYCAgYGBgYGBgYGBgX5+fYCAgICAgICAgICAgICBeXpwXWJlZGJkXmZnZ2BZYmJhY2VfXF1ze3t6enp7e3t7e3t8fHx8fHx8fHt7e3t7e3t7e3t7e3t7fHx8fHx8e3x8fHx8fHx8fHx8fHx9fX19fX19fX19fX19fX19fX19fX19fX19fX19fn19fn5+fn5+fn5+fn5+foCFjIqEhYaGhYODg4SCgYGBgYKBgYGBgoKCgYCBgYGCgICAgIGBf35+gICAgICAgICAgIGBgYF5emxiZGdjYmdmYWBgZGFiZWRjZGNeXGJ1fHt7e3t7e3t7e3x8fHx7e3x8fHx7e3t7e3t7e3t7e3x8fHx8fHx8fHx8fHx8fHx8fHx8fH19fX19fX19fX19fX19fX19fX19fX19fX1+fn5+fn5+fn5+fn5+fn5+fn9/gYeMiYWGhoeFg4SDgoGBgYGBgYKBgoKCg4KBgIGBgYKBgYGCgoF/f36AgICAgICAgIGBgYGBgXp7dGdnZmZkZGZmYF5fYWNlaGRlXmJkYHR8e3t7e3t7fHx8fHx8fHx8fHt7fHt8fHt7e3t7fHx8fHx8fHx8fHx8fHx8fHx8fHx8fH19fH19fX19fX19fX19fX19fX19fX19fX19fX5+fn5+fn5+fn5+fn9/f39/f3+CiYqIhoaIhoWDhIOCgYGBgYGBgoGBgoKCgoGAgYGBgoKBgYKCgX9/f4GBgYGAgYGBgYGBgYGBenptaGNjZ2ZnZWdmZmdiZWRlYmdbYmVgdnx8e3x8fHx8fHx8fHx8e3t8fHx8e3x8fHt7fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx9fXx9fX19fX19fX19fX19fX19fX19fX19fn5+fn5+fn5+fn5+f39/f39/f39/f4SJioiGiYeFhYSEg4KBgYGBgYGCgYKCgYGBgYGBgYKBgoGBgICBgH9/gYGBgYGBgYGBgYGBgYF7emlpZGNqZmFgZmVjY2NnaWRjYmBiZGJ0fXx8fHx8fHt8fHx8fHx8e3x8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fH19fX19fX19fX19fn5+fn5+fn5+fn5+fn5+fn5/f39+fn9/f39/f39/f3+AhIqMiIeJhoSFhYOCgYGBgYGBgYKBgoGBgYGBgYGBgoKBgYGBgYGAgH+BgYGBgYGBgYGBgYGBgXZzZWRnY2RmZWJlZmdkZmhmZWNgYGNkYHF9fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fXx8fHx8fHx9fX19fX19fX19fX19fn5+fn5+fn5+fn5+fn5/fn5+f35+f39/f39/f3+AgICFioyJiIqJhoaDgoKCgYGBgYGBgoGBgoGBgYGBgIGBgYGBgYGCgX+Af35/foCCgoKCgoKCgoKCc3NnZWRkZWlqaGZnZ2NhZmZlZmdmZWVjdX18fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fX19fX19fH19fX19fX1+fn5+fn5+fn5+fn5+fn5+fn5+f39/f39/f39/f39/gICAgICAgIWLioqJioeHhoSCgoGBgYGBgYKCgYKBgYGBgIGBgoKBgYGBgYGAf4B+dHRzdX1/goCAfn5/gYB0cmdkZWNmaWppZWNlY2BmZGRnZ2JiZWFwfXx8fHx8fHx8fHx8fHx8fHx9fX18fHx8fHx8fHx8fHx8fHx9fX19fX19fX19fX19fX19fX19fX1+fn5+fn5+fn5+fn5+fn9/f39/f39/f39/f39/f39/f4CAgICAgIB/houLiouLh4eHhIOCgYGBgYGBgYKBgoKBgYGBgYKCgYCBgYGBgoCAgH5zc3NzdHV4dXV0dHV2dXVwZmNmZWhoaWdoZ2VmZWJfZGVmY2BiZ3d8fHx8fX19fX18fHx8fH19fX19fX19fXx9fXx8fX19fX19fX19fX19fX19fX19fX19fX19fn5+fn5+fn5+fn5+fn5+fn5+f39/f39/f39/f39/gIB/f3+AgICAgICAgICHjIyIi4qHh4eEhIKBgYGBgYGBgoGCgoGBgICBgoGBgYKBgoKCgYCAfnNzc3Nzc3NzdHR0dHNzdW9jY2FnZWhoZ2pmZGVnZmhmY2JlYl5ieX18e3t8fX19fX18fHx9fX19fX19e3x9fX19fX19fX19fX19fX19fX19fX5+fn5+fn5+fn5+fn5+fn9/fn5+fn5+fn5/f39/f4CAgH9/gICBgICAgICAgYCAf4CAgYGAgIeLi4iNiYiJhoSFgYGBgYGBgYKCgYKCgYGBgIGCgoGBgYKBgoKBgIB+dHNzc3Nzc3Nzc3Nzc3N1cmdlZWRlamhoZ2ZpaGdjZWViZGNoZGd7eHVzc3R2dnl4dnR0dHZ3d3d2dHR0dXV4d3h4d3d6e3x9fXx9fn5+fn5+fn5+fn5+fn5+fn5+fn5/f39/f39/f35/f39/gH9+fHt7fX58eXl2dnZ5fHx6end2d3l7fXt4hIyMioyHh4iEhYSBgYGBgYGBgoGBgoGBgYGAgYKCgYGBgoGBgoGAgH51c3Nzc3Nzc3Nzc3Nzc3VzaGVnaGVrbGhqZ2lqZ2dnZmRkYmVkbnV0dHNzdHNzc3Nzc3Nzc3Nzc3NzdHNzc3Nzc3Nzc3N0dHV1c3V3eHl7fn59fn98f39/f39/f39/f314fH5+fXx4dXZ3eXd4dnRzc3N0dXRzc3Nzc3NzdHNzc3R0c3R0dHODjI2KiYeIhoOGg4GBgYGBgYGBgYGCgYGAgYGDgoKBgYCBgYGBgICAf3VzdHRzc3Nzc3Nyc3NzdnZpY2hqaGpsZWZpbGhgZmVkY2BkZGZ0dXV1dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHRzdHRzc3Nzc3R2dnV1d3V4fH9+fX9+fHp4dXN0dXV1dHNzc3Nzc3N0dHR0dHR0dHR1dXR0dHV1dHR1dXR1dXV1dIaMjYuIhoeEhIWCgYGBgYGBgYGCgoGAgYCBgYKCgoGBgIGBgYGAgIB/dnNzc3Nzc3Nzc3Nzc3N2dnNnZ2pmaGdmaGhmZGlnY2NnZWVmcHZ1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dHR1dHR0dHR0dHRzdHR0dnV1d3Z0c3R0dHR0dHR0dXV1dXV0dXV1dXV1dXV0dHNzc3N0dHNzdHR0dHR1dXR1iY6MjIqHh4SEhYKBgYGBgYGBgYKCgoGBgICAgoKCgoGBgYGBgYCAgH93c3Nzc3NycnJyc3NzcnZ2dW5kXWNnZWlraGVoZ2dqamlnZXB2dXV1dXV0dHRzdHR0dHR0dHV1dXV1dXV0dHV1dHR1dXV1dXV1dXV1dXR0dHV1dXV1dXV0dHV0dHV1dXV1dXV1dXV1dXV1dXV1dXV0dHNzc3Nzc3N0dHNzc3Nzc3R0dHR0dHWKjoyMiYaGhIeFgoGBgYGBgYGBgoKBgYGAgYGCgYKBgYGBgYKBgICAf3hzc3Nzc3JycnJyc3NzdnZ3d2liaGhnamtpaGZkZGVmaWhwdXR0dHRzc3JxcnJ0dXV0dHR0dHR0c3NycXFxcXNzdHR0dHR0dHR0dHV0cnJyc3R0dHR0dXV1dXV1dXR0dXR0dHR0dHR0dHR0dHR0c3Nzc3Nzc3Nzc3Nzc3N0dHN0dHR0dHR0dYuOjImGhYWFh4SCgYGBgYGBgYGBgoKCgYGAgIKCgoGBgYGBgYGBgIB/eXNzc3NycXJycnJzc3N3d3d3bGpoZGhpa3Z6a2VmZWhnbXJzdHN0c3JwcHBxcnN0dXR0c3NycnNycXBvb29vcHFzc3NycnJyc3R0dHNxcHFyc3R0dHR0dHRzc3Rzc3NzdHR0dHRzdHR0dHR0dHRzdHR0c3NycnFxcnJzc3Nyc3NzdHR0dHN2jZCMh4eFhYSEgoGCgoGBgYGBgYGCgoKBgYGAgYGCgoGBgoKBgYGAf395c3NycnFxcnJycnNzc3d3d3dzc2pnaWloeX99cW51bG5wcXJycnFxcG9wcXFxc3Rzc3NycXFwcG5ubm1ubW5ubnBxcnJycnJycnJzcXBvb3BxcnJzc3JxcnJycnJycnJycnJzc3Jzc3Nzc3Nzc3Nzc3Jxb29ubm9vcXJzc3Jyc3NycnNzcnaPj4uHhoWFhYOCgoKBgYGBgYGBgYGBgoGBgYGCgoKBgoGCgYGCgX9/f3hxcHBwcXFycnJyc3Nzd3d2dnd2cnF0c252f352c3hwcHBycnJycXFwcHFxcXFyc3Nzc3FwcXBvb25ubm5ub25vcHBxcXFxcXBwcXJwb25vcHFxcXFxcHBxcXFxcXJycnJycnJycnFxcnFxcnJycnFwb29ubm1ubW5vcXJycnJycnJyc3JxeI+OjYaDg4aEgoOCgoGCgYGBgYKBgYGCgYGBgYKCgoKCgoKBgYKBf4B/d29wb3BxcnJyc3Nzc3J2dnZ2dnZ3dnZ1c3l/fnd3d29wcXFxcXFxcHBwcXJxcnJzc3JycXBwb29wb29vb29vb29wb3Bvb29vcHBxb29vcHBwcHBvcG9wcHFycXFxcnJycnFxcXFxcXFxcHBwcHBxb29ubm5tbW5tbm9wcXFxcXFxcXFxcXB7j42NhoODhYOCgoKCgYKBgYGBgoGCgYGCgoGCg4KBg4KBgYGAgYF/f392bm9wcHBxcXFxcXBwcHZ2dnZ2dXR0c3NxfYB9fX9zb3BxcXFwcHBwcXFwcHBxcnJxcXFwb3Bvb3Bwb29wcG9vb29vb29vb3BxcXBub3Bwb29wb29wcnJycnFxcXBxcnFwcXFxcHBwcHBwcHBwb29ubm1ubm5ubm9ub3BwcHFxcXFxcXFxcIKRjoqEhIOFhIOCgoGBgoKBgYKBgYGBgYGCgoKCgoKCgYGBgYCBgX9/gHVvb29wcXFxcXBwcHBwdnZ2dXRzcnJycnGAgoCBeXBwcHBvcHBwcHFxcXFwcXFxcXFxcG9vcHBwcHBwb3BxcHBvb29wb29vcXFwcG9wcG9vb25vcHFxcHBwb3Bvb3BwcHBwcHBwcHBvb29vb29vbm5tbW1ubm5ub25vb3BvcHBwcHBwcHBwiZCMiISDhIaDg4KCgYGCgoKCgYGBgYCAgYGBgoKBgYGBgYGBgIGBgH+AdG5vb3BxcXFwcG9vcG92dnVzcnFxcXFxcICDg39ycHBwcHBwcHBwcHFxcHBxcXFxcXBwcHBwcHBwcHFwcHBwcHBwcHBvcHBxcXBwcHFxb29vbm9wcHBvb29vcHBvb3BwcHBwcHBwcHBvb29vbm5ubm5ubW5ubm1ubm9wcG9vb29vb3BzcXWPj4yJg4KFh4ODgoKBgoGCgoKBgYKBgYGBgYGBgYGBgYCAgYGAgYGAf4B0b29vbm9vb29vb29vb3Z1dHNxcXFxcXJygIKCgXRxcXFxcXFxcXFxcXFxcXFxcXBxcXFxcHFwcXBxcXFwcHBwcHFxcXBxcHBwcXBwcHBwcHBwcHBwcHBwcHFxcXBxcHBwcHFwcHFxcHFxcXFxcXJxcnFwcnRycnR0dHR1dnRzdHR0dXd3gpCPi4iDgoaHhISCg4GBgYKCgoGBgoGBgYKBgYGBgYGAgICBgYCBgYB/gHVvb29vb29vb25vb29vdXRzcnJycnJycnKDg4OCdnFycnFxcXJxcnJxcXJycnFxcXFxcnFxcXJycXFycXFxcXFxcXFxcXFwcXFxcXFxcnNzcnJyc3V1dHR0dHR0dHV2d3d3d3d3eHh4eHd3eHh4d3Z3dnV2dnZ2d3h6e3x7e3t6enp6enyGkI2LiIODiIeHhYODgoGCgYKBgYGBgYKCgoGBgYGAgYCAgYGAgIGBgH+Ad3FxcXFxcG5ucG9wcG92dHV1c3Nzc3NzdYiDgoN5cnNzcnJyc3Jyc3NycnJycnN0cnJzcnNzc3Nzc3Nyc3N0dHV1dXV1dHV3eHd3d3d4eHh3eHh4eXl5eXl4eHl5eXp6e3t7e3t6enp5eXh3d3d1dnV2dnd5enp7fn5+fX1+fn5/f35+gIyQi4qHg4WIi4iEg4SDgYGCgYGBgoGBgoKCgoKAgYGBgYCBgYGAgIGAf4B8enp5eXx5eHh2dXZ2dHl2d3h3d3Z3dnZ6f3x+fnx2dnd3dnV4enh4eHh3d3d2eHx5eXx6eXl8e3l5eXh4eXl6enl5eXh4enp5eXh4eHh3dnd3eHh3eHh5eXp7e3p8fH1+fX9/f359e3t7e3p5enl5e3t/foB/fn5/fn19fX5+f35+fn6AjpCNioeEhoqLiIaGhIOBgoKBgYGCgYGCgoKCgoCBgoKBgYGCgYCBgIF/f4B/fn19fX9/f318e3t7eXh4eHh5eXl4eXh5eXl4enp6enp6e3t7fH1+fHt7ent8e318e3t7e3t7enl4eXh4ent6enp5eXp8fHt6enx8fHp6ent9fHx+fn+AgoGAgYKAgH9/gYGBgIB/f35+fn5/fX1+f4CAf35+f39+fn9/f39/gH+Af4OQjoyHhoWIi4yIh4aFg4GCgYGBgYKBgoKCgoKBgYKDgoGBgYGBgIGBgIB/goOCgoGBgX99f39/f4F6enh4d3h4eHh5eHh5enp5e358enx9fXt8fX19fHx8fnx9fn5+fn59fX9/f3x8fYGDgYCAf318fXx9fXt9fXx8fH19fX1+gYGChISDgoB/gYGBgH9/f4B/f39/f39+fn9/f39/f35+f3+Af39/gICAf4CAgICAhJCPi4eGhoiLi4mKhYaDgoKCgYGBgoGCgYKBgYGBgoOCgYCAgYGAgIGBgH+ChIKCgICAgH9+fn+AgH9/fn18fX19fYB/fX+Af35/gH9/fn9/gIGBgICAf3+BgICAf4CBgn9/f4CAf35+f39+f39/fn5+f39/gYB/f4CBgYCAgYOEgoGCgoGCgH+AgYCBgYGAgH+BgICAf39/gICAgYGBgIGBgYCAgICBgoGBgYCAgYGFjo6MiYaHiYyLi4qGhoOCgoKBgYGCgoOCgoKBgIGBgYKCgICBgYCAgYGAf4KFg4KBgYCAf39+fn+AfX5+fn19fX5/fn9/f35+fn+AgYCAgICAfn9/fn+Af3+AgH9/f35/f39+fn59fn9+fn9/f35/gIGBgoKDg4KCg4KBgYKDg4OCgYGBgYKBgoKCgYKBgoGBgYGBgoKCgYGCgYKCgoGBgoKBgYKCgoKCgYGBgoKCgoaPkY+KiImKjY6NiYaFgoKCgoKBgYKCg4KCgoGBgYGBgYF/gIGBgYCBgIF/gYWEg4KCgoGCgYCAgIB8fHx7fH18fH9+fn9+fn5+f35+f39/f39/f35+foB+fn5+fn9/f39+f39+fn5/gIB/gIB/f39/f3+BgYGCgoCAgYKDg4SDg4ODgoKCgoKCgoKCgoKCgoGCgoKDg4OCg4ODgoKCgYKCgoODg4ODgoKCgoODg4KCh5KTkIuKiouPj42Kh4SCgoKCgYGBgoKDgoKBgYGBgIGBgICAgYGBgIGAgYCAg4SDg4OEg4ODgoKCgXx9fHx9gn1+f4GCiIGCgoSCgYGDg4GBgYKCgYKBgYCAf39/gICAf3+AgX9/f39/gYCAgICAgH9/f3+AgICAgH9/gYODhYSEg4SDgoKCg4OCgoOCgoODg4ODg4SDg4KEhYWDg4SEgoKDhIOCg4ODg4OCgoODgoCKlJOPioqMjpCPjYuGg4KCgoKBgYGBgoOCgYGBgIGBgoGBgICBgYGAgYCAgH+BgoODg4SEhIOCgoKCfXx8fn6AgYOAg4OChIaFhoaFhIWFg4ODg4OBgYKEhIKDgoeDgoKAgoGBgoKCg4KCg4KDgoODgoGAgIKCgYOCgYKCg4OEhYWEg4OChISEhIOEhISDg4OEg4ODg4OEg4SDhIWEhISDg4ODgoKCgoKCgoKBgYKCgo+UlI+Njo6RkY6KiISCgoKCgYGBgYGCg4GBgIGBgYGBgYCBgIGBgYCBgICAgIKChIKChIOCg4ODgoJ9fX2AgH+AgoGDg4ODhIaEhIOEhYWDg4GBgoOBgIKDgYKFhYWFhoaHhoWGhoeHh4aGhoeHhoaEgoGCg4SDg4ODg4ODhISFhYWDhYSFhISEg4KBg4OCg4SEg4KCg4SCg4ODg4OCgoKCgoKCg4OEhIOFhYWFhoaIk5OTkI+Pj5KRjIqIgoKCgoKBgYGBgYKDgoKBgIGBgYGBgICAgYGBgICAgICAhISEgoKCgoGBgoKBgX+AgYOCgICAf4CCgoGDg4KCgYODg4SEg4KDhYOCgYGBgoSFh4eHh4aGh4eHiIiHh4eIiIiFhIOBgIGBgoKCg4GCg4SEhYSDg4OEg4OEhIOBgYGCg4OEhISDg4ODg4OEhIODgoSDg4ODhIWFhoeHh4eIiIiJiY6TkpKOj46QkY+LiYeCgoKCgoKBgYGBgoKCgoGBgIGBgYGAgICAgYGAgIGAgICDg4KCgYKCgYGAf4CBhYWFhoOCgYB+fn+BgoSCgYKDhIOCg4ODg4KChISDg4OBg4SFhISFhYSDg4SFhYKEhIWFg4KBgH9/gIB/gIGEg4OEhYWEgoKCgoOCg4OFhIKDhISEhYaGhoaGhoWFhoeHhYaIh4aHiIeGhoaIiYeGhYaGhoeIkZKSkI6QjpCRjImHhYGBgoKCgoGBgYGBgoOBgYGBgYGBgICAgICBgYCAgICAgISEg4KBgoGAgYGAgYKIh4aHhYSCgH99fX6AgH+AgYGBgYGBgoGAgYKCgoGCgoKBgYGCgYKCg4GBgICAf4GAgH+AgH9+gIGBgYKCg4OEg4OEg4OCgoGBgoODg4SEg4SEhIOFhYaFh4eIh4eHh4eHh4eGhoaGh4WFhYaGhIWEhIWEhYaSk5GOjo+OkI6JiYeEgoKCgoKCgoGBgIGCgoKCgoKCgYGBgYGAgYGBgICAgYGAgoSDg4KDgoGCgYKDg4iHh4iHhYSCgX5+gICAfn5+f4CBgYGCgYCCgoGCgH+AgIB+gIKBgIGCg4OAf39/gICAf4CAgICDg4KDg4ODgoOBgYKCgoOCgYKCgoOCgoSDhISDg4SEhYWFhYaGhoaFhISEhYWEhIWFhYSEhISDhISEhISEipSTkpCQj46NiIaFhIOBgYKCgoKCgYGAgYKCgoKBgoKBgYCBgYCBgYGAgICAgYGAg4OCgoOCgoKBgoOCiImJiYiHhYSDgYKEhIOBgYGCgoSCgoOEgoOEhYWEgoSCgX+AgoGBgoGChIOBgYGBgoOCgoGDg4SDg4SEg4OCg4KDg4ODg4KCgoKCgoGDhISEhYSFhYWFhIWEhIWFhYWDg4OEhISEhYWFhISEhISEg4ODg4OOlZKQkZGOjYyHhYODg4GCgoKCgoKBgYCBgoOCgYCCgYGBgICAgIGBgYCAgICBgICDhYSEhIODg4SDhIOGh4mIhoWDhIODg4WDgYCDgoOFhYODg4SDhIODhISFhISEgoGAgYKDgoKEg4OCgoGBhIWEg4ODgoKDhISDg4ODg4SFhISDg4KCgoKCgoSEhYSFhYWFhYODhYWFhYaFhoWEhIWEhYWGhYWFhIWEhISDhIODhJGUk5OSj4yMioWEhIODgYKCg4KCgoKBgYGCg4KBgYKBgYGBgICBgIGBgH+AgIGAgYaGhoaGhoaHh4aGhYSDhYaCgIGBgYGHgoB+f4GAgIKBgX+BgYCAgoGCgoKBgYKCgYCCgoKCgoKDg4GCgYKDhYODg4KDg4OEgoKEhIOEhIWEg4OCgoKCgYKCg4ODg4SFhYWFhIOEhYWGhYWEhISEhIOEhIWFhYWFhIODhIOEg4KGlJOSlJKPjYuHhISEg4KBgoODgoKDg4GBgoKBgoKCgYGCgYGBgYCAgYGAgICAgICAhYWFhYaGh4aGhoWGg4ODg4GAgoKCgYKAf35/f4CAf4B/gIGAgH+BgYGBg4GAgYGChIOBgYGBgYKBgYKDgoODgoOCgoKCg4OBg4SDg4ODg4OEhIKCgoKDgoKDg4ODhIWEhISEg4OEhIODg4OEhIODg4ODg4SDg4ODg4KDg4KDgouUk5KTkY2NioaDg4OEgoGCg4ODg4ODgoGBgoGCgoKCgoKBgYGBgICBgYCAf4CAgICDhISFhYSFhYWEhIWCg4KDgoKDg4OBgICAgICAgYCAg4KCg4KBgoKDg4OEgoODg4KAgICCgoKDgoKDg4ODgoODhIKCgoODgoKDg4KCg4KDg4WEg4ODg4SDg4SEhISEhYWEhIWEg4SEg4OEhISEhISEg4SEhYSDg4SEhIODgoKDkJSSkpKPi4yIhoOEg4OBgYKDg4ODg4OCgYGCgoKCgoKDgoCBgoGAgICAgIB/gICAgISDhYWEhYWFhYSFhYOEhIWDg4SFhIKCgoOCgoSCgYKGhYOFg4OEhISGhYSEhYJ/fX19foKEg4ODg4OEg4ODhISEg4OEhISEg4SEhIOEg4OFhoWFhYSEhoWFhYSFhoWGhoWFhYWFhYWFhYWGhoWGhoaFhoaGh4aFhYWFg4SEhIeTk5KRkoyKiIWFhYWCgoGBgoODg4OCg4KBgYKDg4ODgoKBgIGAgICAgICAgH+AgICAhYWFhYWGh4eGhYWFhISFhYSEhISEg4SDg4OEhYOCg4SFhYaFhoaFhoeHhoOBfn9+fn5+f4OEg4OEhISEhISEhISEhISFhYWEhYSGhYWGhYaGhoWGhYWHhYWGhYaGhoaFhIWFhYWFhIWGhoaHhoaGhoaHh4iIiIaFhYaEhYWGjZSTkpGQi4qHhoeGhIGCgoKDg4ODg4KDgoGBgoODg4KAgYGBgICAgICAgICAf4CAgICHh4eGhoeHiIeHhoaEg4ODhIODg4OEg4ODg4OEhIODg4WFhYWHh4WFh4WBf39/f39/f35/gISFhIWGhoaFhYWFhoaHhoaFhoWFhoeHh4iHh4eGhoaHh4eGhoaHhoaGhYSDhIWFhYSFhYaGhoeHhoaGhoeHh4eIiIeGhoaHh4eRk5KQkZCLiIiFhoSDgoKBgoODg4ODgoKDgoKCgoOCgYCBgICBgICAgIGAgIB/gICAf4aHiIeHh4eIiYmIiIODgoKDgoSEhIWEg4KCg4OEg4OCg4WEhYeHhYSCgH9/f39/gH9/f4B/f4WFhoeIiIeHh4eIh4iHiIiIhoaHiIiJiYmIh4aHh4eIiIaHhoeHhoaFhIOEhYaGhYWFhoaGh4eFhoeGh4aGh4eHh4eHh4eFh5OTkY+RkIuHhoWGhIKCgYGCg4ODg4ODgoKCgoGCg4KCgIGBgYCAgICAgICAf3+AgYB/hoiIiIiHh4iJiYmIg4KCg4ODhIWHh4eFg4OFhIODg4KEhISEhYSBgIGCgYGBgYB/gH9/fnt6gIaIiIqKiYmIiImJiYmKi4qIiIiJiYuLioqIiIeIiIiHh4iIh4iGh4aEg4OFh4eHhoWFhISEhYWEhYWGhISEhYWFhoWGhYOJlJOQjpGOioaFhoWDgYGBgoKDg4ODgoKCgoKCgoKCgYGBgYGBgYCAgICAgIB/gICBgH+GiYiIiYeIiImJiIiEgoKDg4KDhImKh4eEhIWEg4OFg4WEg4OCgYKCgoKCgH9+fH19fX9+fHt8g4eJi4uKioqIiIqJiImLiomJiImIioqJi4mHhoaGh4WGiIiJiIeGh4SDgoSIiIeIh4WCgoGDg4KDg4SCgoKDgoGEg4SDgY6TkpCPj4uIhYSGhIKBgYGBgoODg4OCgoKCgoKCgoGBgYGBgIGAgICAgICAgH+AgIGAf4WIh4eHhoeIiIiHh4SCg4OCgoOFiYqJh4WHhYSFhYSDhYSDgoKCgoKDgX59fn5+fn5+fX1+fX19g4eJioqHh4WGh4eHh4iHh4mGiIaIh4eJiISDhIOFhISFhYaIh4aFg4KCg4WHhoeGhoOCgoOEgoODhIKBgoGBgYODg4OEkZKRjo+Ni4eEhoaDgoGAgYGDg4ODg4KCgoKCgoKCgYGBgIGBgYCAgIB/gIGAf39/gIB/hYaGhYaGhoeHiIeGgYKEhIOChYaIi4qGhIaEgoaGgoCDg4ODg4OCgoF9fH1/gH9+fn59fH19fHp8hIaHhoSDgYODhIWFhYODhYSEhISEhIWEgoKDgYSEgYKDg4WGhYSCgYGCgoODhYOEhIWEhIaDhISFg4KDgYKDg4SFhIeSkY+Nj4yJhoSFhIWCgYCBgYODg4ODgoKCgoKCgoKBgYGBgYGAgICAf4CAgYB/gICAgICDhIWEhYWFh4eHh4aAgYGFg4OEhYSHiIWDgYCAgX9+fYKDg4ODgoKAfX1/gICBf31+fn19fX16enp+g4SEgoGBgIGBgoKBf36BgYGCgYOAgoGCgoKBg4OAf4CAgYOCgICAgIGBgYGCgYGChIODhYSCg4SDgoKBgoSDhYWGjJORjo+Pi4iFhYOChIGBgYGBgoODg4KCgoKCgoKCgoGBgYCBgYCBgH9/gIGBgICAgH+AgIKCg4OChIOEhYWGhn+BfoCBgICAf4GDgn9+fn9+fHx/g4OCg4KDgX19fn+AgIGAfn19fX1+fXx6enp/goKAf39/f35/f4B+fYB/f4CAgX+AgIF/f3+BgX59fX+AgX9/fn+AgH+AgICBf4CCgICCgYGCgYGAgYGBgYKEg4aPkpCOj42Kh4eGg4OCgYGBgYGCg4ODgoKCgoKCgoOCgYGCgYGBgICAgH+AgICAgICAf39/gYKDhIGCgoOCg4SFgIF/fH19fn19foCAfn1+fXt9foKDg4KCgYF/fX1+f4CAgH9+fX19fHt7e3p6eXqAgH9+f35+fnx+f35/gH9+f3+Af4GAf359fn9/fn18fn+Af35+f3+Af39/f4B/f4B+f4CBf4B+f39/gH9/f4B/hZKSj46Pi4uHiYWEg4KCgYGBgYKDg4ODg4OCgoKDg4KAgYKBgYGAgICAf3+AgIB/gIF/f36BgYSEgYKBg4OCg4OBgH98fn5/fn6Af4B/foB9fX+BhIOCgYB/f359fn5/gICAfn19fX17e3x6enl5eXt/f35/f39+fX5/f4CAf35/f4CAgoB/fH5+f35+fXx/f4B/fn5/f4B/f35/foCAf36Af39+fn5/f35+f318fH2FkpKNjIuKiImIhISEgoKCgYGBgoOCgoODgoODg4ODgYCBgYGBgYCAf39/f4CAgICAgIB/foCBhIOCgYGDhISDhICBgICBgIGAgYKCg4GAgX+AgoODgYGBgYCAfX19fn5+f359fX19fXx8fHt6eXl5eX2Af4CBgYF/f4GAf4F/gICAgYGCgoB+gH5/fn5+foGAgoF/f39/gIB/f39/gYB+f4CAfn9/fn+Af31+fX17fIaTkYyLioeHioiGhoSDgoGBgYGCg4ODg4OCg4OCgoKBgICBgYGAgH9/f39/gICAgICAgH9+fn+BgYGAgISGh4aHgoSDhYOBg4ODhYSEhISDgYODg4KCgoGCgX5+fX19fn6AfX19fX19fX18e3p6eXl5eYCCgoKEg4CCg4GAgoCBgYGDgoODgYGCgIGAf4CBg4GEgoCAgYCBgYCAgYCCgn+BgIF/gIB/gICAfn9/fnx8ipOQiomIiIiJiIaGhoSCgoGBgoKDg4ODg4KDg4KCgYCAgICBgYGAf39/f4CAgICAgIGBf359fn5/f39+g4aHh4iChYSFg4SFhIWGhoaGhoWFhoGAg4ODgoKAfX19fX19fn59fX19fX19fX18e3l5eXl4fIKDhIWCgYSDgoKDhYaCg4SDgYKCg4OCgoKCgYKFg4iFgoGBgYKCgYGBgYSDgoOCgoKCgYGBgIF/gIGAf36Ok4yHiIeIh4aGhYaGhIKDgoGCgoODg4ODg4OCgYGBgH+AgYCBgYB/gH9/gICAgH+AgYB/fn19fX5+f36Ag4SHiISGhoaFhoaHh4aHh4eHhoeHf32AgIGCgX59fX19fX19fX19fX18fH5+fnx7eXh3eHl5gIODf4ONhIOEhISXl4ODhIF9foGCgoGCgYKBg4aIjIWDgoKBhIKEg4KDhYWEhYOCg4OCg4OCgoKCg4OCgpKQi4iIh4iHhoaEhoWEhISCgYKCg4ODg4ODgoGBgYCAgICBgIGBgH9/fn+AgYCAf4CAgH9/fn1+fn+Bf4CCgYWFhYaGh4eGh4eIhoeHh4aHh4d/fH18fX9+fX19fX19fX19fX19fXx7iJKCe3x6fIZ5eHl8gYF+iZeEg4OEhJSTgIGBf39/fn6Ei4B/gICEhpCJhYSCgoGFhYuDgYKFhYaGhIOFhYOEhIODhIOFhISIko6LiYiIiYeHh4WGhYSFhIKBgoKDg4ODg4OCgYGBgICAgIGAgICAf39/f4CAgICAgYGBf39/f4CAgIGBgYGBg4OGh4aGh4aGiIeGhoaFhISGhX98fHx8fX18fH19fX19fX19fX18fH+RlZaDe3qElHx4eXp7fH+Cg4GBgIOCgH58fn57iJF8fI6Wf31/f4KGioWDg4SDgYONiX9+f4OEhYWDhYaFhIWFg4SFhYaEhI6Rj4uKioyJiYmHhYaFg4OCgYKCgoKDhIODgoGBgICBgICAgYGAgIB/f3+AgIB/gICAgX5+f4GBgoKCg4SDgoOCgoWGhISFhYSGhIOEg4KBgYOBf319fHx9fXx8fH18fH18fX19fHx8e4uRl4x6e3yBenp6e3x5eX19foB/gH98e3t+fn2ClZF/hIh+fH5/goR8fIGChIKAf4eDfYKBf4KCgIODhISEhISChIOEhYKEkZGNi4yMjoqJiYWFhYODgoKBgoODgoKDg4KCgYGAgIGAgICAgICAgH+Af3+Af357gICBenyAgYKDhYODhYWFhYODg4SCgYODgoOCgoGAgIB/gX5/fn59fHx8fHx8fHx8fHx8fHx9fHx8fn6Kgnt6e3p4ent7fH17fn1+f319fX18fH+BgX2Gj4F+fYJ+f36Agnx8f3+BgIKAfnx7ioJ9gH9+gYCAgYKBgoCAgIGAf4uTj4uLjY6NiIeHhYWEhIOCgoKCg4OCgoODgYGBgICAgICAgH9+fXx7fHx9f3+AgHx6gYF4e4CCgYOFhIOFhIaGhISAhpSIgIGBgYGBgH9/f39/fn5+gHx8fHx8fHx8fHx8fHx9fHx8fHx8fHl7e3t4eHl7enp8gX+Afn+BfH5+f399gIKCgICAgX+CkYF/f4CAfoB+fn9+gIGBfX19e319fXx9fHx9gH+AgH6Afn6ClJGLjI2Nj4qFhoaFhISFg4ODgoODg4OCgoGBgYGAgICBgICAf4CAf39/fXt6fICAgHh+gXd7gIF/gYKCgoKDhoeGhn6IlYp+gYGAf4B/foB+f39/fn+Bfnx7e3x8fHx8fHx8fH59fHt9fHx8e3x8fHp6eXt8en2Fg4J/gYF+f35/gH6FgoF+gH9+foCFhoKAfn6Dh399fH6AgIGAf39+fX19fX57e31/f3+AfX9+gIyRjYuMjY2Nh4SGhoWEhISDg4OCg4ODg4KBgYGBgYCAgYGAgYGBgYGAgH9/f397en9/e3mAd3p/f31+f3+Af4KDhoaFf3+FgX5/gIB/gH5+f35/gIB/gIB/f319fHx9fn18fX19fX19fH58fXx7fXx8ent6fH19f4aEgoCAgX1+fX5/fouEgYZ+fXx8f36CgX99fX19gHx7fXx+gYSDgYB+fn5+fX1+f399foB+fn6EkoyLi46Mi4qGhIaEhIODg4OCg4KDgoOCgYGBgYGBgYGBgYB/fXx8fH1+f39/f397e399d352eH59fH18fX5+gYGCg4B6fX18fn+AgH6Af35/fn+AgH+AgH9/fn9+fn5+fn1+fn99fH59fn19fHt8fHx6e3p9fn+Ag4OCf35/fH18fXx8gYN+jH58e3t9fn1+fn17e3t9e3p7e3uAhoSChIOCf4B+f4KCgn9/goJ/gIqPjIqKjIuKiISEhIOEg4ODgoKCgoKCgoKBgYGAgoGBgYKCf3+AgIB/fn18fH5/fn55fX52e3Z4fXx8fHt9fX6BgICAf31/f31+f39/foB/f39/f3+AgIGBgH99gH9/fn9+fn9/f3yCfn59fX17e319fHp8fH6AgoF/gIB8fH18fHx8fH18fXt/fnt7e3x8fH18e3t7e3x8enp9en6CfoGDhIKBgoGFhoWFhoaHhYKEkY6MiomKh4eFgoOEhISEg4KCgYGCgoKBgoGBgYGBgoGBgoKAgYKBgYCAgH9+e3x+fnx6fnh5dnd8fHx7e318f4GAf35/foB/f35/fn5/gH9/f39/f3+AgYKAfn6BgIB/f39/f39+fYN8fH19fH99fX19e3x+fn9+fn1/fnx8fHx8fHx+fnt8e3x8fHx9fH18fnx9fHx7enx5e3x7e317fX5+f4CAg4eJiYmKiYqJhYiRjYuHiIaFhYOCgoOEhIODgoKBgYGBgYKBgYGBgYKCgoGCgoCAgX98e3p6eXt9enx+fnl8eXh4dHx8fHt8fHx+gX9/f39/gIB/fn5+fX+AgH9/f3+Af4CDgoB/gIGAgIB/f4CAgH58enx9fX59fX5+jIZ9fX57e4OCfX19fX18fXx9fX1+fH17fXx9fX58fn19fX18e3t6fHt8fHt6e3t6enp7fn6ChYiHiIqLi4qJjJCNjIiIhoWEg4KCgoODg4OBgYGBgYGBgYGBgYGCgoOCgYKBgIGBf3+Af356eHl5en5+e3l6eH5zfHx8e3x8fH5+fn5/gH+AgIB/fn9+gIF/f4B/gIGAgoSEgYCAgYGAgX+AgYKBf39+f31+gH57foGRjHx9f4qAjYx+fn19fX59fX59fHx8fX18fXx9fX1+fX1+fnx7e3t8fH18e3p7fHl6eXh5e35/hIOEh4mKiImNj4yKiIiFhISDgYKCgoKDgoGCgoKBgYGCgYKCgoGCgoKBgoKAgYGAfoCAf39+e3p5e319eHx6f3KBfXt7fHx8fn59fYGBf4GBgX9/gH+AgX9/gIGCgYGFg4SCgYGCgYKCgICBg4KAf4F/fX6Afnx+f4iCf36DkISEg4F/fn18jYd9fX59fHx/fnx9fXx9fX1+fX5/fX19e3x9fnx8e3x9enp5eXp5e3t+foCBg4eEiI2MiYmGhYSEg4KCgoKCgoKBgYGCgoKBgoKCgoKCgoKCgoGCgn+AgIB+f39/fn5/ent5fX16enp9cX6Cent8fX19fXp4f4KAgYKCgICBgIGBgICBgoKCgoaFhIGBgYGBg4F/gIKEgX9+gYB9foF+fX5/gIB9fn+EgH5+f31+fX2KhX1+f31+foB/fX19fH5+fn99f4B9fX18fX9/fHx7fH17e3t6enp7e3x9fn2Ag4CJjImKh4WFhYSDg4KCgoKCgYGBgoKBgoKCgoKCgoGBgoKBgYKCf4CAgH9/f39+fn59eXp6fXx5d3t0e4d8dHd9fn17e3Z2foCBg4KBgYKCgoKBgYGDg4OChYaEgoCAgICCgX+AgYSBfn6AgH1+gH59fn6AgH+Bfn+Af39/gH99fn9/f3+Afn9/gH58fX18fn5+foF/gH2CgHx9gIF9fHx9fXx8e3x8e3t7fHt8fHx9fImJh4eFhoWFhISDgYKBg4KAgIGCg4KCgoOCgoKCgoGCgoGBg4J/gIGAf39/fn5+fn57enp8fHt2e3R3f352cnt+fnt4dnd8gIGCgoKBgoODg4OCgoSDhIOFhoOCgX9/gIOAgICAg4F+foCAfX+AfX1+foCAf4J/gYGAgICBf31/f3+AgIGAgIB/fnx9fX19fn59g32AfoKAfX6AgX98fn59fX17fH58fXx8fHt8e3x+iYWGhIWHhYSFhIKBgoGDgYCAgoKDgoKCg4ODg4KBgYGBgYGCgH6AgYB/fn5+fn5+fn56e3p9goN9dXF6fHpxen19eXh0dICAgoKCg4KDhYOEg4KDhISEhIWEgYGAgH6Agn9+f36Bf35/f4B9foB9fX1+gH9/gYCCgYCAgIKBfX6Af4GAf4CAgH9+fX19fn1+fn19gYR/gH9+f4GBf32Af319fn1+fn1+fHt8enx7eoCFgoOEhYSEhIWDgoKBgYKBgICCgoOCgoOEg4SDg4KBgYKBgYOAfoCBf35+fn5+fX5+fnt7en6Jh354cnl9f3F6eHt4eXR1fYKDgoODg4OFhIWEg4OEhIODhIKBgH+Af4CBfn19foB+fn5/gH19f3x9fX6Af4CAgIKAgIGAg4F/f4B+gIF+gIGAgH9+fn5+fn1/fn6FhYCBgH+Ag4F/foGAf36AfoB/fn17ent6fHt6goN/goKCgoOCg4KBgYCAgoGAgIKBg4KBg4SDhIKEgoGBgoGCgn9+gIF/fn1+fn5+fX59fXp7fIWEe3tzeXt8cHd1dnd5dnR6hISBhISDhIWFhoSDg4WEgoODgoCBfn9/f4B9fX1+f31+f39/fn1+fH19foF/gIB/gIB/gIGDgoGAf36AgH+AgYCBgH9/f39/f4CAgIGCgoKBf4GEgX+Ag4F/f4B/gX+Af3x7e3p8e3yBgH+Bf3+BgIKCgYF/f3+BgH6BgoKDgYGDg4KEgoSCgYGBgIGCgH6AgH9/fX5+fX19fn19e3t6gH94fHZ5enxxdHh3dnh1cnmFhYKEhIKEhYWGhISChIOBg4KAgIF+f4B/gHx9fX6AfX5/f39+fX98fn5+gX+Bf39+f4B/gIODg4B/f4GBgIKBgYGAgIGAgIB/gIGAgYKDgYF/gISBfYGDhICAgX+BgYKBfXp7e3x8fX99f4B8f39+fYGAgH59fYB/foGBgYKBgIKCgoKBg4KCgYB/gYKAfn9/fn99fX1+fX19fX19ent7fHZ9eXh6enJ1eXl2d3dzdYaFg4WFgoSEhYSEhIKDgoGDgX+AgX5/gH6AfX19fn9+f4B+fn99f3x/f3+BgIF/f3x+gH6AgYKDgYCAgoOEgoGAgYB/gYCAgYGAgYGCg4KBgX9/g4B+goKEgICCgYKChIF+e3t8fHx9fX1+fXp+fX55fn9/fHx8fn1+gYCBgYGAgoGBgYGDgoGBf4CAgoB9fn19f319fX59fH19fX16e3p8dnx6d3t4cnZ5e3Z2dnN0hoSEhYSChISFg4OCgYOBgYOBgIGBfX+BfoF9fX1/f39/gH5+f359fYB/gIGBgX9+fH5/fn5/gYJ/gYGCg4eFgX9/fn6Af4CBgICAgIKCgYCAfoCCf36BgoKBgYOCg4OFgn99fX18e3x8eXp7en55fHl4f357e3t+fX1/f4F/gH6BgICAgoOCgYF/gIGBf31+fH1+fX19fX18fn58fXx5e3x4enx3endzeHd6c3Z2c3SGhISFg4KDhISDgoKCg4GCgoGAgYF8gIB+gH1+fX5/gICAf35/f3x+gH+BgIGAf359f39+fn+BgH2AgIGDhIN/f359fn5+f4B/gIB/gYKBgH9+f4F+f4CCgoCBhIKEhIaEgH59fHx8fHp5dnl5enl2eXZ+fHt7e358e399gH99fX9/f3+BgoGBgX5/gYF+fX18fX19fX19fXx+jYF8fXl7e3p5fHd4eHR1dXhyd3d0doaEhIWDg4ODg4OCgYKDgoGDgn+BgH9/fn+AfX19fX+AgIB/f4B/fIB/f4GAgYCAf3yAf35+fn9/fX5+gYGCgn5/fn1+fn5+f3+Af32AgYB+fn5/gX5+gIKBf4GDgoOEh4SAgH58fXx8e3x1eXl4eHh5d3t8e3p7foV9fn1/ent+fn59foGAgIGAfX6BgH59fXx9fX19fX18e32Dgnx8ent7e3p7d3Z4dXJzdnF3eXJ4hYWFhYOEhIKCg4KBgYKBgIOBgIB/fn5+foB+fX58foCAgH+AgX97gH6AgH+BgYB/fYB/fn5/f319fX6AgYGBfn9+fn59fX1/fn9+fH6Af35+fn+Cfn6AgIF/gYOCg4OGhICBfnx9fHx7fHh3e3h1eXd3eXx6e3t9kod9fH13en1+fn19f35+gH98foB/fn19fH19fX19fXt8ent9enp4e3x6ent4dHh1cXJ0cHh4cXmEhYWFg4SDgoODgoGBgoKAgYGAgIB9fn5/gH18fn1/gIGAf3+BgHyAf4B+f4GAf399gH9+f39+fX18gICAgIB+f35+fn18fn9+f358fYB/fn1+gIJ/foCAf36Bg4KCg4WFgoJ+fnx7e3x8eXd7eXd4d3d4e3t6e3yFin17end6fH19fHx9fX1/fnx9fn59fXx8fX5+fX18fHt6enx7e3p5enp7enhzd3VxcXNweHdxe4WGhYWDhYKBg4OBgYGBgoCBgICBgH5/fn9/fXx+fYCAgoGAf4GAfX6Af35/gX+Af3+BgH+Af31+fH1/gICAgH9/f35/fXx+f39/f319f39+fn6CgYF/gIB/foGDgoKEg4SCgn5+fHx6fHt7eXt6d3N2d3h5e3p7eXp/fnt7d3p8fXx8fH59fH19fH19fXx8fX19fX99fXx9e3l7fHx8enp6enp6eHN2dXBwcm93dnJ7hYeEhYOEgoGDgoKCgYGCgYKBgYGAf4B/f399fX9+f4CBgYF/goF9foF+fn+Bf4B/gIKAgIB+fX58f3+BgICAf4B/f4B+fX5+f4B/f39/gH9/f4J/gH9/gIB/gYGAgISBgoKAf39+f3x9fn56fYR+dHx9enp6enx5eXp6hoV3eXx8fHx8fXx8fHx8fX19fHx9fX19fn19fX16eX18fH16enp6enp5c3V1b29xb3d0c3yFhoOEgoOCgYKBgoKCgYKBgYGBgYCAgICAgH59gH+Af4GCgn+CgX+AgX5/gYB/gICAgn+Bf319f35/f4KAgICAgIB/gIB+fn1/gH9/gIB/f39/gH+AgICAgH+AgYCBgYGCgYCAf39/fn1/fnuBkox6fH18e315e3p6eHmBgXh5e3x8fXx8fHx8fHx9fX18fH18fn1+fn59fHp8fHt8fXt5enp6eXlzdXVvb3Fwd3N0fYWGg4OCg4KAgYCCgoGAgYGBgYKBgYCAgIGAfn6Af4GAgYKCgIKCgICCfoCBgX9/gX+BgIF/fH6Af3+AgoCAgICAf3+AgH9+fX6Afn2AgIB/f3+AgICAgYCAf4CAgYCBgYKCgICAf39/fX5+fIGGiXx8fnt7fnl6e3p7jX53d3l7fHt9fHx8fHt9fH19fX18fXx+fn5/f358enx9e319e3l6e3p5eXN0dW5zcXB4cnV6hYaDg4KDgoCAgIGCgX+CgYKBgoGBgYKAgYF/fn9/gYGCgYKBg4OAgYJ/gYGBf4CAgIB/gX99f4F/gICBgICAf4B+gICAf359f4B+fn+Af39/gH9/gICBf4CBgH+BgIGCgoKAgICAgIB9foB9gIOCe35+e3x9e3p8fHuHeXh4eXx8fH17fHx9fX18fH19fn19fX5+f3+Af317fH18fHx7enl7e3l5c3J1bnZycHhxdXaFhYOEg4KCgICAgoF/gIKCgoKDgYGDgoCCgYB/gICCgoKBg4GEhICBgX6BgoF/gICAgH+Cf36AgYCCgICAgIB/gH+AgIB/fn2Af39/f4GAgH+AgH+AgYF/gICAgIGAgYGBgoGAgYCAgH9/gH5/fX59fn57fXx9e3x8d3h1eHh5e3x8fXx8fHx8fX5/f39/fn19fn9/gIGAf3x9fHx9e3p7eXp8eHpzcnVud3FxenF2d4WFg4ODg4KBgYKDgH+CgYWDg4SBgYOAgoOBgYCAgIKDgoCCgoWDf4GAfoKDgICBgICAf4CAf4GBgIKAf4CBgH9+gICAgICAf4CAgH+AgICAgIB/f4CBgYCAgICAgYGAgoKCgoCCgYGCgYB/f4B/gId+fnx6fXx7fX54d3Z5eXl8fXx8fXt8fH19fn5/gIGAfn1+gICAgoGAfH59fX58d3t6ent5eXNxdW53cHV6cXZ5hYWCg4KDg4KChISAgIKBhoKEg4GChICEg4KCgICCgoSBgYKChIJ/gIB/gYOCgYCBgYCAf4GBgYGAg4F+gIOCf31/goGAgIB+gYCBf4CAgYGBgYCAgIKBgYKBgYCBgYGBgoOCgoOBg4OCgYCBgH+AhH19fXx/fXp9gHp5dnp4eXt7fH19e3x9fX19fn+AgYGAgH+AgICDg4B9f35+fn15eXt6enp5c3J1b3dxd3lzd3uFgoKDgoOEgoOEg4CAgoOGg4ODgoKEgYSDgYKAgIKBg4GCgoGCgX6BgICCgYKBgYOBgICAgICBgoGEgH6Bg4F/f4CDgoCBfoCCg4KAgYGBg4KDgoGBg4KChIGAgYOBgYKEg4OEhIODhIODgYGBgYCCf4B/fYB8enx/e3t3fHl5eXt6fX59fHx8fH1+fn+BgYCAgIGBgYSEgH2Af39/f357e3t6e3p0cHhyeXR2eHR3e4SCg4KDg4SChIODgYKChIaEgoODg4SBhISAg4CBg4KCgoKCgIKAfoGAgIKBgoGCgoKBgIGBgYOCgoOAfoGDgX9/gYSEgYN/goKBg4KCgoGEg4OEgYKEgoOCgoGCgoOBg4SDhISEhISFg4SCgYOCgoOBgYGAgH58fIB8fHh8eXp5enx9f3x7fHx9fX18fICAgICAgYGBgYKBfoGAgICAf3t7e3p6enVweHd5dnV8dXZ8gICDgoODg4OEhISAgoKFhISDg4KDhIGEhYKCgYKDg4GCgoKAgYB9gICBgYKDgoKCgoGAgYKCg4KCg4B/gYOBgICChIODgoGCgoGDgoKDg4ODg4SAgoSDg4OBgX+Bg4KDhYKEhISEhISDhISChIOEhIKBgoGBgHt+gX59eXx6enp9fHyBfXp8fH19fHp7fn5+gIB/gYGAgICAgIGBgIB/fX18fH18dnJ2eHh2dH92dH2Hh4OChIWDg4SFhICChIWEhIOCg4SEgISFg4KCgoODgoOCgoCCgH2AgIGCg4KCgoKEgoGCgoOEgoKBgICBgoGAgYOFhIOCg4CCgoOCg4ODg4OEg4CCg4KEg4KCfoOBgoSEgoODhISEhIOEhIOEg4WEg4ODgoKAe4CBf3x8fXp6e31/fX9/fHx6fH59fH19fn5/f39/gICAgH9+foCBgICAfnx9fX5/fn18e3h2f3V2f4SHg4KDhYODhIaEgYKFhoWEhIODhISChIWFgoKDg4SCg4KDgoKBfoCAgoKDgoODg4SCgYKCg4OCg4GBgYGDgX+ChISDg4KEf4KEg4ODgoSDg4SCgIOEg4SDg4KCg4KChIOCg4SEhISEhIWEg4OEhYSEhIOBgoB9gYKAfXx8e3x8gH19foB+fn1/fnx8fH19fn5/fn+BgYGBgH99fX6BgYB+fn19fX59fX5+f3+AfHyAgYKCg4OGg4SDhoSBgoiHhYSDg4SEhYGFhYWDg4SDhIODgoOCg4F+gYGDg4SCg4OEhIOCg4KEg4ODgoKDgoOBf4KEg4ODgoOAgoWDg4ODhIODhIOBgoSEhYOCgoODg4GEg4GDg4SDhISEhYSEhIWFhYWEg4ODf32BhIB9fXx8fHx/gX59fn9/fX99e3x9fX19fX5+f4CBgIGBgH59fH6Cf39+fn5+fX1/f39/gICAf4CEhIODhIWDhIOFf36CiouFhISDgoOFgYaGhoOEhISEhIODg4OEgn+BgYODhYSFhIWEg4KEhISFhIODgoSDhYGBhISFhYaEgoCDh4SDg4OFhIWFhIGEg4OHgoOCg4GCgYSDgoODhYODhYWEhYWHh4aHhYSEhYSBf4GDf359fH59fX+BgH9+fHx+f358enx9fX19fX5+fn9/gIGBf319fIB/gH5+fn5+f3+AgYGBgYKAgYWFhIOFhIKEg4aAgoWFi4mEhIOEhYWDh4aGhISEhIWEhISEg4SDgYKDg4OEhIaEhYSDg4SEg3yDhHuBhHd5g4F9hH5+cnWDgoF2foOEgX2BdYF5g39/gH6EhIKDg4KBg4SDg4SFg4SFhoSFhn2EeXx+f4N7hYOAhIOAf319fn19gYOBfXt/fX6Afn18fHx9fX19fH19f4B/gYJ/fX18f4GBgICAgH+BgYGCgYKDg4KChoSEhIaEgYOEhYOEhYOKiIWFhYOFhYSGhoaDhISFhYWEhYWEhIWCgoOEhYWFhoSFhIOEhYWCaICFanx7cXF8gXOGc3R0fYKDdXNxg4Z0cHVyc3SDdnt9dYF/goOBgnZ5hYCDgIR/hYSChYWCaHpyc3N8f3OCg3+Dg32BfX1+fX6Cg4F8f4F9f4B9fXx8fHx9fHx8fn1+gH+BgX99fX2AgYKBgYGBgIGBgYKBgoKCgoSHhIWEhYSBgoSGhoOFg4aIhoaFg4aGh4eGh4OFhYaFg4KFhoSFhYODg4SEhoaGhIaEg4SFhn1xe4FweXZ+g3+CbnlwdXN8dnl5hXKEg3B2eHF2dHR1cnN0dml/gG5yb3R2bnVsd217c26AiHltfXJzdnN2bW14bHB5bHV9f359foGAgX2Afn2Af4B/fX18fHx9fH1+f32Af4CAfnx/foCBgoCBgICAgYCAgIKDgoOEhYiGhoCChYODhIeGg4WFhYaHh4SDhoeIiYaHhIWGiIeEg4WGhYWEhIOFhIKFhoaFhoWEhoWHdnB0e3BydX+HhYNtdW92b3x1coR5eYd4cXR3bndod3pucHaCcoN+b3p5eW1vbnpvb213fXiGcHF6cHJ0ZoF1fm57eXNveX+Af319gX9/fH99fIF+gIB+foCAgYB+fn9/foF/gH9+fYB9f4CBgIB+fn+BgH9+goOCgoSFh4eEfoeEg4OFh4aEhoWFhoaIhISGh4eIhoeEhoaLioWEhoeHhYOFhYWEgoWFhYWGhoWGhYZxdXByc29zenl+hHSIdHV+iHZugnKEhnluanJ/cW1zd3x/dXR8hH54cXV3bnl1enF2eHV6eYRxam95eHBreXN6b3p3dnZwgYB/fn5/f356fn19f31/f359gIGDg4CCg4GBhIKBgIGBgH1/f4F+f35+f4GAfn6BgoCAgYSHhoODhoSEhYaHhoWFhYWGhoiFhYaFh4eFhoSGhomIhYSJioiFhIaGhYWDhYWEhYaGhoaFg3iLeXKIentwcIWEeIV4eWtzfnl7a3KDh4N6fG17eXl0fYB2bm+AgG90fHV3cXl9fW1+dW+DhYZ6gHJye3x1cG96bHN8bneCgIF+fn99fXt9e3x9fX9/fn1/f4KCf4GDgYGDgYB/gICAfn9+f31/fn1/gH58fYGAfn6Ag4iFhoOFhYWFhoeFhYWFhYeHiIaEhoWHhoaFhIWFhIWFhomJh4aEhoWGhoWGhYSGhoeGhoWGh4eHhoaEhoWGh4iHhYeGhoOHhoWFg4SFhoWGhIaEg4SEhoSEgYODhISFhIWEhYSGg4aHhYaEhIWHhoSEhYaEhX13hYOEhIKCgX1/fnt8e357fHx9f359fH59gIB9f4F/f4GAfn5+gH5+f35+fX99fX5/fHt8f358fH+BiYaFhIaGhoWHhoWFhYWGhoeIhoSGhYaGhYWDhIWGhYSGhoaGhYWGhIWGhoaGhYaGh4eGhYeIiIiIhoSHhYaGiIaFiIeIhYeGhoiFhYaHhYaGhYOChYWGhYWDhYSEhIWEhYWEhYWEhoeGhoWEhoeGhISEhYOFhIKEg4OFg4OCfYB/e3t8fXt8fH1/fnx8fn1/f31+gH5+gH99fXyAfX5+fn5+f3x8fX57fHx/fHt7fn+Ih4SEiIaGhoeGhYWEhoaGhoiHhIWGh4aFhIODhIaFhIeFhYaFhYaEhYaGh4eFh4aJiIaGiIeIiYiFhIiFhoeGh4aIhoeFh4eGh4WFhoeFh4aFgoOFhoaEhIOEhIOEhoSFhYWGhoSGhoWGhYSGhoWEg4SEg4WHhYOCgoWDhIF+gIB8e31+e3x7fX59fHx+fX5+fH9+fX1+fn19fH98fn58fYGAfHx8fXx8fH56e3t9foiHgoWIh4eGhoaGhISGhoeGiIaDhISGhoSFh4OEhYSFh4SFhoaFhoSGhoeHhoaHh4mIhoaIh4iKiIWHiIWHh4WHhoeGh4WIiIeHhYaGh4WGhoWBhISFhoWFhISEg4SFhYaGhoWGhIaFhoeFhYaGhYSChIOChIeDhIGChISDgYCAgHt7fn18fHx9fXx8fH19fH18fn18fX18fHx9fXx+fXt8gX99fH18fnx8fHp6fHx9iIeChoiHhoeGhoaDhYaFhoaGhYOFhIaFhIiJg4GEg4SGhIaGhoaGhIeHiIiHh4eIioiGh4iHiImIhYiHhYeGhoeHh4WHhoiIh4eFh4eHhYaHhIKEg4SGhYeFhYSDhISFhoaGhoaGh4WFh4WGhYaFhIKEg4ODh4GDgIKDg4KCgn+Ae31+fXt8fH59fH19fH17fHx8fHx8fXt7e318e358e3x/fX18fX1/fXx6ent7fHyIh4KGhoaGh4aGhYOFhoWFhYWEg4WChoSDiId/enqChYaEhoaFh4aEh4eJiIiHhoiKh4aHh4aIiYeFiIeGiIeGhoeHhYeGiIiHhoWHhoeGhoeDg4SEg4aGh4WFhISEhYaGhoaGhYaHhoaHhoaEhoWDg4OCgoOGgYN+goKDgIODf398f35+fHx9f318fX18fXp7e3p7fHx8e3t7fnt7fXt7e358fHx8fX5/fXt6fHp8fYmHg4aFhoWGhoWEhIWFhYWFhIOBhYGGhIKEhHyAhn+ChYWGhYWGhYSHh4iIiIaFiYqHhYeGh4eIh4WIhYaHiIaGh4eGh4aIiIeFhoeGh4WFh4OEhoWEhoaHhoWFg4WFhoaGhoeFh4aHhoeHhYSFhYOBg4KAg4WCg36BgYF/g4F/f35/fn98fH1/fXt9fXx9enp7eXt8fXt7e3t+fHx8fHp7fXx8fHx+fYF8e3t7e3x7iYeEhoSGhIaGhYSFhoWEhIOEgoCDgYWDgYJ/eoSMe4CEhYeGhoaFhIeIh4aHhYWHiYeEh4WHhoiGhYeEhoeJhoaIh4eHhoeIhoSGhoaHhoWHg4SFhIaGhoeFhYSDhYWHhYeGh4WGhoaFhoaEg4SFgYGCgYCDg4OCfYGBgH6DgX5/f4B8f3x9fX59e359fH15enp5e319enp7e318fXx8ent9fHx9fH5+gHx7e3x+fXyIh4WGhYaEhoWFhYWFhYODgYOBgIKBhYKAgH9/fXx7gYSFhoaEhYSDh4eGhoaFhIaJhoKGhIaGhoWFh4WHiImGhYiHiYeGhoeFhIaFhYaFhIeDhIWEiIaGh4WFhIKGhYaFh4aHhIaGhoaFhoODg4WAf4GAgISAg4B8gYB+foKAfYB/gXx/fH1+fX57fn18fHl6enl6fX15enp7fHt8e3t6e319fH18fn5+fHt7fX59fIeGhYaGhoWFhYSFhYSDgoGAgoGAgICDgX5+foB5en2Ag4OEh4WEg4OHhoOEhYSChYiFgoSDg4WFhYWHh4aIiIWFiIeJh4aFhoWDhoSFh4OEhoSEhYSHhoWGhYaEg4aFhoaGhoaEhYaGhYWGgoKDhH9+gICAgX+DgHuBf31+gn5+gH6Afn99fX59f3t/fXt6eXp6eXp8fXl6ent7enx6e3t7fH19fXx/fn18fH1/fnx7h4WFhoaGhoSFhIWDhYKBgICAgYB+f4KCfX1/f3t/f4KDg4WGhYSDgoaDgYOEgoCFh4WCg4GBg4SEhIaGh4iHhYWIhomHhYOEhIKFg4SGgoOFhISGhIeGhYWFhoOEhYSFhoWGhIOFhIWDhYWBgYODf35/gH9/f4N/fIB9fX+CfYCBfn6Bfn19fX1/e398e3p5enp5enp8eXp6e3t7fXp7e3t7fX59fYB9fXx8fYB/fXyGg4aGhoaGg4SChYKFgYGAf3+AgH5/gIJ8fn9/foCAgoKChIWDgoGChIGAg4KBgISFhYKBf4CCg4OEhYaIhoWEhYeFh4WFgoOCgYOCgoWBg4WEhYaEhoaHhoaFgoSEg4SGhYWDhISDhIOFhICAgoJ/fX1/fn6Ag357f3x8gIF9gYB9fYN8fn59fX57fnt7enl7enl6ent5enp6e3t8ent8e3t+fn1/gXx9fHx9f4B+gIaEhYWEh4SDg4KGgoOAgYB+fn+AfX9/gnx9f39+fn6BgYKEg4KBgYKCf4CBgoCAgoWEgoB/gIGCgYOFhYeFhISGhoSFg4WBgoGBgoGCg4GChISEhYWGh4eGhYSDg4ODhIaFhIGDgoODhIODgH+AgX59fH5+fH+DfXx+fHyBgH6Cf31/gnx/fn19fHx8e3t6enp6eXt6enp6enp6e3x5e317fH5/f4GAfX59fX1/gICAhoSEhYSFgoOCgoSCgoCBgH59fn9+fn6AfX2Af35+foGBgoODgoSHgYF+gICBf3+ChIOBf35/gIJ/goWEhoSCg4WFgoSBg4CBgIGBgYKBgIGEg4OGhYWHh4WEhYWCgoKDhYSCgYGBgoCFg4F/foB/fnx8fn18foN9e358fYF/gIN+fYCBf35/fXx7fH17e3p6enl5e3l6enl6ent7e3p7fXx8f3+BgoB+gH+AgH+AgYDKysrKysrKysrKysrLy8vLy8vLy8vLy8zMzMzNzc3Nzc3Nzc3NzczMzMvLy8vLy8vLy8vLy8vLzMvLy8vLy8vLy8vLy8vMzMzMzM3Nzc7Oz8/Pz9DQ0NHR0dLS0tLS0tLT09PT0tLS0tLS0tPT09TU1NTU09PT09PT09PT09PT09PT09PT09PT09PT09PT09PS0tLS0tLS0tLS0tPT09PT1NTV1dXV1dXV1dXV1dXV1dXV1NTU1NTT09PT09PT09PT09TU09PU1NTU1NTU1NTU09PT09PS0tLS0tPT09TU1NTU1NPT09LS0tLS0tLR0dHR0dPHhnNlYFtLWWdVTUZIQD03Nzg5Nzw8PDo8Oz42Oj04PDs6OTg3ODs7Oj87PTs8PD47P0E/QkJBQ0RFREE+PTw7QENDQUBDQ0FBR0hHSUtSwtXS09PT09TU1NTU1NTU1NTU1NXV1dXV1dXV1dXVysrKysrKysrKysrKy8vLy8vLy8vLy8vMzMzMzMzNzc3Nzc3Nzc3MzMzMy8vLy8vLy8vLy8vLzMzMy8vLy8vLy8vLy8vLzMzMzc3Nzc3Oz8/P0NDQ0NHR0tLS0tLS09PT09PT09PT09PS09PT09TU1NTU1NTU09PT09PT09PT09PT09PT1NTU1NTU1NTT09PT09LS0tLS0tLT09PT09PU1NTU1dXV1dXV1dXV1dXV1dXV1dXV1NTU1NPT09PT09PT09PU1NPT09TU1NTU1NTU1NPT09PS0tLS0tPT09PU1NTU1NTU09PT09PS0tLS0tLR0dHSzIxyZ2BcTVllUktHSz87Mzc4Ozg5Pj05PDpBOjs9Nzo8PDo6Nzg6Oz0/Oz88PTw/Pj9BPUFBPkNDREJAQT46Oz9DREFDRERCQklHSEhJTr7V0tPT09TU1NTU1NTU1NTU1NXV1dXV1dXV1dXV1crKy8vKysrKysrKy8vLy8vLy8vLy8vLy8zMzMzMzM3Nzc3Nzc3NzMzMzMzMy8vLy8vMzMzMzMzMzMzLy8zMzMzLy8vLzMzMzc3Nzc3Ozs/P0NDQ0NDR0dLS0tLS09PT09PT09PU09PT09PT09TU1NXV1dTU1NTT09PU1NPT09PT09PT1NTU1NTU1NTU1NPT09PS0tLS0tLS0tPT09PT1NTV1dXV1dXV1dXV1dXV1tbV1dXV1dTU1NTT09PT09PT09PU1NTU09TU1NTU1NTU1NTT09PT0tLS0tLT09PU1NTU1NTU1NTU09PT09PT0tLS0tHR0s+Sd2hfXk9XZ01LRkw9ODc2NTk5OTw+OT88RDo7PDg6PD47OTc5Ojw9QDs+PT47PD48PT5BQD5EQ0NDP0E9Ojs9QkNFQ0NEQT9FSEpJSky61dPT09TU1NTU1NTU1NTV1dXV1dXV1dXV1dXV1dXLy8vLy8vLy8rKysvLy8vLy8vLy8zLy8vMzMzMzMzNzc3Nzc3Nzc3MzMzMzMzMzMzMzMzMzMzMzczMzMzMzMzMzMzMzMzMzc3Nzc3Ozs/Pz9DQ0NDQ0dHS0tPT09PT09PT09TU1NTT1NTU1NTU1NTV1dXU1NTU1NPU1NTU09PT09TU1NTU1dTU1NTV1dTU09PT09LS0tLS0tLS09PT09TU1dXV1dbW1dXV1dXV1tbW1tXV1dXV1NTU1NTT09PT09PT1NTU1NTU1NTU1NTU1NTU09PT09LS0tLT09PU1NTU1dXV1dTU1NTT09PT09PT0tLS0dHRmn5nYWJOVWpKSElLPzw6OTM3Njc3PTs+OT06Ojs4OTo7Ozg4Ojs7PD46PT09Ojw/PD0/QkA/Q0RDRD5APT08QENEQ0JEQkQ+REhJSUtMttfT09TU1NTU1NXV1dXV1dXV1dXV1dXV1dXV1dXVy8vLy8vLy8vLy8vLy8vLy8vLy8zMzMzMzMzMzMzNzc3Nzc3Nzc3Nzc3MzMzMzMzMzMzMzMzNzc3NzczMzMzMzMzMzMzMzc3Nzc3Ozs7Pz8/Q0NDQ0NHS0tLT09PT09PT1NTU1NTU1NTU1NTU1NTV1dXV1NTU1NPT1NTU1NTU1NTU1NTU1dXV1NXV1dXV1NTU09PT09PS0tLT09PT09PU1NXV1dbW1tXV1dbW1tbW1tbW1dXV1dXU1NTU1NTU1NTU1NTU1NTU1NTU1NXU1NTU1NTT09PT09PT09PU1NTU1dXV1dXV1dTU1NTU09PT09PS0tLR0p+DaV9kU1hsSEhIS0A9Nzg0NzY6Oj87RDw8OTw8OTc6OTo6Ojs8Ojo7OT49Pjk9QDs/QUFCP0JCQUM9Pz8+PEBCRUNDQkBBO0ZJR01MSbLY09TU1NTU1NXV1dXV1dXV1dXW1tbW1tbV1dXW1svLy8vLy8vLy8vLy8vLy8vLy8vMzMzMzMzMzM3Nzc3Nzc3Nzc3Ozc3NzczMzMzMzMzMzc3Nzc3Nzc3Nzc3Nzc3Nzc3Mzc3Nzs7Ozs7Pz8/P0NDQ0NHS0tLS09PT09PT09TU1NTU1NTU1NTU1NTV1NXV1dTU1NTU1NTU1NTU1NTV1NTU1dXV1dXV1dXV1dTU1NTU1NPT09PT09PT09PU1NXV1dbW1tbW1tbW1tbW1tbW1tbV1dXV1dTU1NTU1NTU1NTU1NTV1NTU1NXV1dXU1NTU1NTT09PT09PT1NTU1dXV1dXV1dXU1NTU1NTT09PT09LS0tSjiGxfZlJWakdIR0lBPjM2Njo7PDhDPEJBPjxBPDg5Ojw6Ojw8PDk8PTo7PD09PD89QD9AQT9AQUBCPD4+PzxCQ0NDRkBBQT1ISklOTUeu2NPU1NTV1dXV1dXV1dXV1dbW1tbW1tbW1tbW1tbMzMvLy8vLy8vLy8vLy8vLy8vMzMzNzc3Nzc3Nzc3Nzc3Nzc3Nzs7Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Ozs3Nzc3Nzc3Nzc3Nzs7Ozs7Oz8/P0NDQ0NHR0dLS0tPT09PT09TU1NTU1NTU1NTU1NTU1NTV1dXV1dTU1NTU1NTU1NTU1dXV1dXU1dTU1NTU1NXU1NTU1NTT0tPU1NTU1NTU1NTV1dbW1tbW1tbW1tbW1tbX19bW1tXV1dXV1dXV1dXV1dTU1NTU1dXV1dXV1dXU1NTU1NTU09PT09PT1NTU1NXV1dXV1dXV1dXV1NTU1NPT09PT0tLWroprY2VSWGhMSkdJQjg0OTQ6Ozo5QDk/Q0VAPDw5OTk9Oj07PDw6PTw7OTw9Ozs/PUA9PT5AQD9CQT5APD05QERDQkFBQj48SEpLTU5IqNnU1NXV1dXV1dXV1dXW1tbW1tbW1tbW1tbW1tbWzMzLy8vLy8vLy8vLy8vLy8rKy8vLzMzMzMzMzMzMzM3Nzc3Nzc7Ozs3Nzc3Nzc/Pz8/Pz8/Pz8/Pz9DQ0dHR0dHR0dHR0dHS0tHV2djY2NnZ2dra2tvb29vZ2dnZ2dna2tra2tra2trZ2dnZ2dnZ2tra2trZ2drb29vb29vb2tvc29vb29zb29vb29vb29vb29va09LT09PT09TU1NTU1NXW1dXV1dXV1dXV1dXW1tbX1tbW1tbV1dXV1dXV1dXV1dTU1dXV1dXV1dXU1NTU1NTU1NTU09PU1NTU1NXV1dXW1dXV1dXV1dTU1NTT09PT09PS1bqKa2hoUlhlSUlMT0A5OTo0O0E8Nz05QUM+QD89ODo6Ozk9Oz4/Ojs8PDo7PDo7Pj1APT8/P0FAQUE/QTw8Oz5BRENBREA9PElJSk1ORqPa09TV1dXV1dXV1dXW1tbW1tbW1tbW1tbW1tbW1szMz9DPz8/Pz8/Pz8/Pz8/W3t3d3t7e3t7e3t7e3t3S0NDQ0NDQ0NDQ0NDQ0ci5ubm5ubm5ubm5ubq6t6WkpKSkpKSkpKSkpKSnhmBjY2NjY2NjY2NkZGRlhIuKioqKioqKioqKiomSmZiYmJiYmJiYmJiYmJeMi4qKioqKioqKioqKi4aBgoGBgYGBgYGBgYF/j9PS0tLS0tLT09PS09PS3ePi4uLi4uLi4uLj4+Pi2NfX1tbW1tbW1tbV1dXV1dXV1dXV1dbW1dXV1dXV1dTU1NTU1NTU1NTV1dXV1dXW1dXV1dXV1dXV1NTU1NTT09PT09XDkXFrak5TYkxMVk48Ojo3Nz5DPjg+Oj8/QTw/QDc7Ojs7PTs+Pjo7PD48Oz07PT8+QDw/Pz1AQEBBPj88PjxAQUVCQkZAQD9HSEpLT0ae2tXV1dXV1dXW1tbW1tbW1tbW1tbW19fX19fX19fMzNDS0tLS0tLS0tLS0tLR3uzr6+rq6urq6urq6uvp1dLS0tLS0tLS0tLS0tTEqaqqqqqqqqqqqqqqq6aGhIWFhYWFhYWFhYWFik4MEhISEhISEhISEhIRE0pUU1NTU1NTU1NTU1NRYmxra2tra2tra2tra2tpVVNTU1NTU1NTU1NTU1RLQ0NEQ0NEQ0NERENDP13S09LS0tLS0tLS0tLS0ODs6+vr6+vr6+vr6+vr6dnX19fX1tbW1tbW1tbW1dXV1dXV1dbW1tbV1dXV1dXV1dXV1dTU1NTV1dXV1dXW1tXV1dXV1dXV1dXU1NTU1NTU1NPUy5h2bGlKTl9NUlVNPjw8NztAQz42Ojc+Pzs9Qj85PDk9Ozw6PD07PTs9Ozs9PD0+PT07QT08QUBBQT08Pzw7QEJDQURFPUFAQ0ZLS09GmNzV1dXV1dbW1tbW1tbW1tbW1tfX19fX19fX19fXzMzR0tLS0tLS0tLS0tLS0d3q6enp6enp6enq6unq6dXS0tLS0tLS0tLS0tLUxaqrq6urq6urq6urq6yoiIeHh4eHh4eHh4eHh41SEhgYGBgYGBgYGBgYFxpOWVdXV1dXV1dXV1dXVmVwb29vb29vb29vb29vbVlXV1dXV1dXV1dXV1dYUEdISEhISEhISEhISERg0dPS0tLS0tLS0tLS0tDf6+rq6urq6urq6urq6unZ19jX19fX19fX1tbW1tbW1tbW1tbW1tbW1tbV1dXV1dXV1dXV1dXV1dXV1dXW1tbW1tXV1dXV1dXV1dXU1NTU1NTU1NGcenFpSlRdT1JVTkQ+Pzs+QEA4Ojs4PDs7PD86Ozs4Ozk5Ozw7Ojw5Ozs8Ozo9PT0+PUE/Pj8/Pj08PT88PEFBQ0FERTw+QEVGSktNRpPc1dXV1tbW1tbW1tbW1tbW1tfX19fX19fX19fX183N0NLS0tLS0tLS0dHR0dDc6Ofn5+fn5+fn5+fn5+bV0dLS0tLS0tLS0tLS08Wtrq6urq6urq6urq6vq46NjY2NjY2NjY2NjY2SXSInJycnJycoKCgoKCcpWmNiYWJhYmJiYmJiYmFveHd3d3d3d3d3d3d3d3VjYmJiYmJiYmJiYmJiYlxTVFRUVVVVVVVVVVVRa9LT0tLS0tLS0tLS0tLS3unp6enp6enp6enp6enn2djY2NjY19fX19fX19fX19fX19bW1tfX19fW1tbW1tbV1dXV1dXV1dXV1dXV1tbW1tbW1tbW1tbV1dXV1dXU1NTU1NTWo3txZElbYE5OVU9AQT89REI/Oz06OTs6PT07PDs6OTg5OTs8Ozw8Ojo7PDo7QD08PTxAQTxBQTs7PEA/PD1CP0RDQ0U8PkJERkpMTEWN3NXV1tbW1tbW1tbW1tbX19fX19fX19fY2NjY2NjNzc7Ozs7Ozs7Ozc3Nzc3Nzs/Pz8/Pz8/Pz9DQ0NDQz87Ozs7Ozs/Ozs7Oz87NzMzMzMzMzMzMzMzMzMvJycrKysrKysrKysrKysfCw8PExMTExcXFxsbGxsvMy8zLzMzNzMzMzMzLzc7Ozs7Ozs7Ozs7Ozs7NzMzMzMzMzMzMzMvLy8zMy8vLy8vLzMzLy8zMy83U1NTV1dXV1dXW1dbW1tjY2NnZ2dnZ2dnZ2dnZ2djY2NjY2NjY2NjY2NfX19fX19fX1tfX19fX19bW1tbW1tbW1tXV1dXV1dXV1dbV1dbW1tbW1tbW1tXV1dXV1dTU1NTU169/cF5GXmJQUVdOR0ZDQ0lBPz07PDo8OEBCPD04Ojo4OTg7Pzs8PDs7PDw8PD87PD46Pj44PkI8Pj1BPjw+QkBERUNAPD5APkNJSUtEh9zV1tbW1tbW1tbW1tbX19fX19fX19jY2NjY2NjYzs3Nzc3Nzc3Nzc3NzdHNzc3NzczP09LSzs3P0s7Ozs7Ozs7R1NTTz87R0s7P0tTV1NDPz8/Pz8/Pz8/Pz8/P0NDQ0NDR0dHR0dHS09PU1NTU1dXV1tbW1tfW1tbX1tfX19fX19fX19bW19fX19fX1tfX19fX1tfX19fX19fX1tbW1tbW1tfX19fX19fX19fX2NjX1tbW1tbX19fX19fX19fX19jY2NjY2NjY2NnZ2dnZ2dnZ2djY2NjY2NjY2NjY2NjX19fX19jY19fX1tbW1tbW1tbW1tbW1tbW1dbW1dbW1tbW1tbW1tbW1tXV1dXV1NTV1di4gm9XSl9jUlFaS0hBQTxCPT07Oj4+PD4/PT0/Nzk6OTk3OD48PD47Ozw7PDs/PT0+OTs7OT0+P0A+QD07OkI/QkNCPz0+QD5CRUdKQoDc1tbW1tbW1tbW19fX19fX19fX2NjY2NjY2NjY2M7Ozs7Ozs7Nzc3Nzsqfys3Nzc3QuYOEi8fTwJrLz87Ozs7RsIOEk87TuJ7P0ZyChIrGz87Ozs7Ozs7Ozs7Oz8/Pz8/P0NDQ0NDQ0NDR0dHR0tLT09PU1NTU1NTV1dXV1dXV1dXV1dXV1dXV1dXW1tbV1dXV1dbW1tbV1dXV1dXV1NTU1NXV1dXV1dXV1dXW1tbW1tbW1tbX19fX19fX19fY2NjY2NjY2NjY2NnZ2dnZ2dnZ2dnZ2dnY2NjY2NjY2NjY2NjY2NjY2NfX19fX1tbW1tbW1tbW1tbW1tXV1tbW1tbW1tbW1tbW1tbW1dXV1dXV1dXYwIBuVU9gY1dZW0xMQ0A9PTs9Ojw+Qj5CQ0A8Ojg5ODo6Ojc7Pz4/PDw7PDo5Pzw8PTg5PD9BPj09PUFAPTtBQkBCQz47QD9BQUlHSkF629bW1tbW1tbX19fX19fX19jY2NjY2NnZ2djY2dnOzs7Ozs7Ozs7OzdKpj63Rzs7Ozpu3tqSiwJOerNPOzs7PyZu7uJ2vt5eZubqVuLmvodLOzs7Ozs7Ozs7Pz8/Pz8/Pz9DQ0NHR0dHR0dHS0tLT09TU1NTU1dXV1dXV1dXV1dXV1dXV1dXV1dXW1tbW1tXV1dbW1tbW1tXV1dXV1dXU1dXV1dXV1dXW1tbW1tbW1tbW1tfX19fX19jX19fY2NjY2NjY2djY2dnZ2dnZ2dnZ2dnZ2dnZ2djY2NjY2NjY2dnY2NjZ2NjY19fX19fX19bW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tXV1dXV1dXV18h/b1pTYWVeXVxPSkQ9QD8+Ozc6Pjk/RD5BOTg3ODk7Ozw4OT89PTw9PD47OkE7OTs5OzxDQDw7PT5AQT49QkQ/QkM9PT8+Pz5ISUg/ddrW1tbX19fX19fX19fX2NjY2NjZ2dnZ2dnZ2dnZzs7Ozs7Ozs7Ozs/Inrym0tDQzsqgl36Cw6abr6fUz8/P0cOij4CJyZ2jqLLRkn1+r7HSzs7Ozs7Ozs7Oz8/Pz8/Pz8/Q0NDR0dHR0dLS0tPT09TU1dXV1dXV1dXV1dXV1dbV1dXV1dXV1tbW1tbW1tbV1dXV1dXW1tbV1dXV1dXV1dXV1dXW1tbW1tbW1tbW1tbW1tfX19fX19jY2NjY2NjY2NjY2NjZ2dnZ2dna2dnZ2dnZ2dnZ2dnZ2djY2NjY2NnZ2dnZ2dnY2NjY2NfX19fX19fX19bW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1dbV1dXV1dfNiHNdWGloXl9gT0lGOkFAPj88PDo2P0JAQzo2NDc6Ozo8Ojk+PD49PTs/PTxBPjw8Ojw8PTw6PEA9QEI+PkFCPUNDPT0+Oz9BRUtIQHDZ1tbX19fX19fX19fY2NjY2NjZ2dnZ2dnZ2dnZ2c/Pz8/Pz87Ozs7SrKWnqdXAvNLHnY+ey9PJipmq1M/Pz9G/noqn0NPChpq11dPNnp7E0M/Pz8/Pz8/Pz8/Pz8/Pz8/Q0NDQ0dHS0tLS09PT1NTU1dXV1dXV1dbW1tbW1dbW1tbW1tbV1tbW1tbW1tbW1dXV1dXV1dXW1dXV1dXV1dXV1dXW1tbW1tbW1tfX19fX19fX19fX19jY2NjY2NjY2NjY2NnZ2dnZ2dnZ2tnZ2dnZ2dnZ2dnZ2dnZ2dnY2dnZ2dnZ2dnZ2dnY2NjY19fX19fX19fX19bW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbV1dXW0JB1W1tqaWFeXVNOSTxDQEE+QD46OEZBP0M6NzQ5Ojo5Ozs4Oz0/Pj49QT08P0A9Pjw8PDw8Oj1AQD8/PT5CQD9AQkA8QD0+QUVLRz9r19fX19fX19fX2NjY2NjY2NjZ2dnZ2dnZ2dnZ2tnPz8/Pz8/Pz8/QzJ2Nl6zQmpfKxZ6ynpbN1q2ZqtTPz8/RuqSsnJ7R1qOYtNTTwKCg0NDQ0M/Pz8/Pz8/Pz8/Pz8/P0NDQ0dHS0tLT09PT1NTU1NXV1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbV1dXV1dXV1dXV1dXV1dXV1dXW1tbW1tbW19fX19fX19fX19fY19fY2NjY2NjY2NjY2NjZ2dnZ2dnZ2drZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2djY2NjY2NfX19fX19fW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1dXV1tKUcl5ea2tqZV1PTEc/RENDQDo9OzxCPD49OTY0Ojk5Ojo5Nzs/QDs8PUA8PEE+PD07PTw/PDo8Q0A+PTs9QD5CPkBBPkA9QD9GSUQ/ZtXX19fX19fY2NjY2NjY2NnZ2dna2tra2tra2traz8/Pz8/Pz8/P07GigJuvyaCjv8qcpYynrdiqmarUz8/P0cCgnpOlt9iimbXU1bCiqdXQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NHR0tLT09PT1NTU1NXV1dbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1dXV1dXV1dbW1tXW1tbW1tbV1tbW1tbX19fX19fX19fX19fY2NjY2NjY2NjY2NjY2NjY2dnZ2dnZ2dna2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2djZ2djY2NjY2NfX19fX19bW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbSk3BgXnBoZmVaUUhHQkVDQEA3Ojo8Pjo8OTc2NTo6Njo8Ozc8QEA8Ojo9Oj0/Pj08OUA8PDo6OT9APj08PUBBQz9APz5BOz9ARkpCP2LS2NfX2NjY2NjY2NjY2dnZ2dnZ2tra29vb29vb28/Pz8/Pz8/P0M6fkGyclteqo9PSrqa1mJ/Vqpmq1M/Q0NDSpq+um6bZopm11NWkobnU0dHR0NDQ0dHQ0NDQ0NDQ0NDQ0NHR0tLT09PT1NTU1dXV1dbW1tbX19bW1tbW1tbW1tbX1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tfW1tfX19jY2NfX19fX2NjY2NjY2NjY2NnZ2dnZ2dnZ2dnZ2dna2tnZ2dnZ2dnZ2dnZ2dnZ2dnZ2djY2dnZ2dnZ2dnZ2dnZ2NjY2NjY2NjX19fX1tbW1tbW1tbW1tbW1tbX19fX19fW1tbW1tbX0pNuYFxxZGdkWlVKQENGQ0FCODs/PD07PDw4NTU4OTY4Ozo5PDo+Pzw9PTk8Pz49Ojo+OTw6Ojg+Pzw9PTw+QEFDQT48PDpCRERKRkJd0NnX19jY2NjY2NjY2dnZ2dna2trb29vb29vb29vPz8/Pz8/Pz9G9n8O31pfA09HQ0srSzZeb1KqZq9XRz9DQ0cnXxJig2aKattTOnp/J0tHR0dHR0dHR0dHR0NDR0dHR0dHR0tLT09PU1NTV1dXV1tbW1tfX19fX19bW1tbW1tfX19fW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW19fX19fY2NjY2NjY2NjY2NjY2djZ2dnZ2dnZ2dnZ2dnZ2drZ2tnZ2dnZ2dnZ2dnZ2dnZ2djY2NjY2NjZ2dnZ2dnZ2dnZ2dnY2NjY2NjY2NfX19fX19fX19fW1tfX1tbX19fX19fX19fX19bW19GRbF1cb2doYl1PRkBISUdFQDw8Pj48PT48NzU2Ojk2OTs6Ojs4QD86PDw5PD49Ozs6Pzk/Ozw5PT49PTs7PTxAQ0I/Pz47Q0ZGR0hEWc3a2NjY2NjZ2dnZ2dnZ2dna2trb29vb29vb29vb0NDQz8/Pz8/Pz5V+e6WS1KKa08ySl6ObodirmavV0pem1cWNnqCdqNqjmrXXw5+h0tHR0dHR0dHR0dHR0dHR0dHR0tLS0tLS09PU1NTV1dXV1tbW19fX19fX19fX19fX19fX19fX1tbW1tbW1tbW1tbX19bW1tbW1tbW1tbW1tbW1tbW1tbW1tfX19fY2NjY2NjY2NjY2NjY2dnZ2dnZ2dnZ2dnZ2dnZ2tra2tra2tnZ2dnZ2dnZ2dnZ2djY2NjY2NjZ2dnZ2tnZ2dnZ2dnZ2djY2NjY2NjY2NjX19fX19fX19fX19fX19fX19fX19fX19fX1tfPjGRWXnBrXGBgTkVITUlJT0M+OkI9PUBCOzU1Nzw6Nzo7Ojo7OT09OTo6OT0+Pz07OT47PDo8Ozk+PD47PD0+QENCPz5BPEFDR0ZGRVXJ29jY2NnZ2dnZ2dnZ2dra2tvb29vb29zc3Nzc3NDQ0NDQ0M/Pz9DR1aeZrcmjqL7KnbGdo7XZqZup2LirocnBoa2hoL/Yopu02bKkptbS0tLS0tLS0tLS0tLR0dHS0tLT0tPT09PU1NTV1dbW1tbX19fX19fX19fX19fX19fX19fX19bW1tbW1tfX19fX19fW1tbW1tbW1tbX19fW1tbW1tbW1tbX19fX2NjY2NjY2NnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dra2tra2tra2trZ2dnZ2dnZ2dnZ2djY2NjY2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnY2dnY2NjY2NjX19fX19fX19fX19fX19fY2NfX19fX19fYzYZdV2JvZE9dVEtIRlNRS0xAPj1EPD9DRj01NTc7OTY6Ozo8PTo7Pzo6OTg6PT0/Pjs/Oz49Ojs5Pjs9PD0+QURCQD8+PzxAQUVHRURSxdvY2dnZ2dnZ2dnZ2tra2tvb29vb3Nzc3Nzc3NzQ0NDQ0NDQ0NDQ0NO5gL3Tm5bP1LWLkZ/T1LyBu9TOlKDT1auNj6nV1rKExta5g7/V0tLS0tLS0tLS0tLS0tLS0tLT09PT09PU1NXV1dbW1tfX19fX19fY2NjY19fX19fX19fX19fX19fW1tbX19fX19fW1tbW1tbW1tbW19fX1tbW1tbW1tbX19fX19jY2NjY2NnZ2dnZ2dnZ2dnZ2tnZ2tra2tra2tra29ra2tra2tnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2NjY2NjX19fX19fX19fY2NjY2NjY2NjY2NfX2ct+WlVqaltMX01KTEpVTEZCPD0/R0ZIS0g9NjU3Ojk3OTo7Ojw9OT45OTo4Oz0+PkE+PTk8PDo9Pj47PTk5Oj9FQUA+PT8/QkBHRURFUMHc2dnZ2dnZ2dna2trb29vb29vb3Nzc3Nzc3dzc0NDQ0NDQ0NDQ0NDQ0cHR0crI0tDUxLjS0tHSwtLQ08fM0tHUwb3V0tLRxNXR0cLT0tLS0tLS09PT09PT09LS0tPT09PU1NTU1NXV1dbW1tfX19fX19fX2NjY2NjX19fX2NfX19fX19fX19fX19fX19fX1tbW1tbW1tbW1tfX1tbW1tbW1tbW19fX19fY2NjY2NjY2dnZ2dnZ2dnZ2dra2tra2tra2tra29va2tra2tra2dnZ2dna2tnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dna2tnZ2dnZ2dnZ2djY2NjX19fX19fY2NjY2NjY2NjY2NjY19rHd1xSZ2laTlpOTFBRV0VKPz89P0FFTExAPjc3NTs4ODk5Ojs8Pjw+ODo6OTs+P0A9Pj46NTo6Oz0/Ojs5Ojw+QkJAPz8/P0FCR0RDRE683dnZ2dnZ2dna2tvb29vb29vb3Nzc3Nzc3d3d3dDR0dDQ0NDQ0NDQ0NDS0NDR0dDQ0dPU0dHR0dPR0dHS0tHR0dTV0tLS09XT09PV0tLS0tPT09PT09PT09PT09PT09PU1NTU1dXV1dbW1tfX19fX2NjY2NjY2NjY2NfX19jY19fX19fX19fX19fX19fX19fX1tbW1tbW1tbX19bW1tbW1tbW1tfX19fX2NjY2NjY2NnZ2dna2tra2tra2tra2tra2tra2tvb2tra2tra2trZ2tra2tra2tra2tra2tnZ2dnZ2dnZ2dnZ2trZ2tra29ra2trZ2dnZ2dnZ2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjbwXNYVWlrU0xSTlBSWVRGSTw+Qz9BQkVKPj43ODY5Nzc4OTk7Oz0/QDw9ODk7Ozs/Pjw8OTU6PT47OTk7PD8/P0JCQT1BPUBBQkZCQkJLtd7Z2dra2tra2tvb29vb29vc3Nzc3Nzd3d3d3d3R0dHR0dHR0dHR0dDQ0NDQ0NDQ0dHR0dHR0dHR0dHR0dHS0tLS0tLS0tPT09PT09PT09PT09PT09TU1NPT1NTU1NTU1NXV1dXV1dXW1tbX19fX2NjY2NjY2NjY2NjY19fY2NjX19fX19fX19fX19fX19fX19fX19fW1tbX19fX1tbW1tbW1tbX19fX19jY2NjY2NnZ2dna2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tnZ2dnZ2dnZ2NjY2NjY2NnZ2dnZ2dnZ2NjY2NjY3LxvVFRsbExLUkpUUlVLRkQ6PkdEREFERjw/ODk6OTU5OTo3PD07PkA9PTc5Ojs5Pjs5OTY2Oj1AQT47PDk6Pj9DQT4/Qj0+QkNFQkFCSrDe2dra2tvb29vb29vb29vc3Nzc3Nzd3d3d3d3d0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0tLS0tLS0tLS0tLS0tLS0tPT09PT09PT09PT09PT1NTU1NTU1NTU1NTU1dXV1dXV1tbW1tbW19fX19jY2NjY2NjY2NjY2NjY2NjY2NjY19fX19fX19fX19fX19fX19fX19fX19fX19fW1tbW1tfW19fX19jY2NjY2NjZ2dnZ2dra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2trZ2dnZ2dnZ2djZ2dnZ2dnZ2dnZ2dnZ2dnY2Ny2a1NbcGtLVVdSXFFXSEQ+PEJKRT1ISj89PDc4ODo1OTg5Njs+PD1APDw1OTk8Oj87OTk0ODw9PUFBPD47Ojw+QD89PkE9PUNGR0I/Qkmq39ra29vb29vb29vb3Nzc3Nzc3N3d3d3d3d3d3dHR0dHR0dHR0dHR0dHR0dHR0dHS0M/U0M7P0tLT0tLS0tLS0tLS0tPT09TU1NTU1NPU1NTU1NTU1NTU1NTU1NTV1dXV1dXV1dbW1tbW19fX19fY2NjY2NjY2NjY2NjY2NjY2NjY2NjX19fX19fX19jY2NfX19fX19fX19fX19fX19fX19fX19fX19jY2NjY2NjY2dnZ2dra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tvb29va2tra2tra2tra2tra2tra2tnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dndsGRTYXJfT1pUV19RUkdCPUVJTEFBTEQ/Pzs6ODg5Mzg2ODY5Pj0+Pz06Njo7Pjs9PTo5Njg6PTtAQDxAPz0/P0I+PD48PEJFR0lCPkNJpODa29vb29vb3Nzc3Nzc3Nzc3N3d3d3d3d3d3t7S0tLS0tLS0tLS0dHR0dHR0dPT0bm7zLqbnLrQyNPT0tLS09PT09PT09PU1NTU1NTU1NTU1NTU1dXV1dXV1dXV1dXV1dbW1tbW1tbX19fX19fY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjX19fX19fX19fX19fX19fX19fX19jY2NjY2NjY2NjZ2dra2tra2tra2tra2tra2tra2tra2tra29va2tra29va2tvb2tra2tra2tra2tra2trb29vb29va2tra2tra2tra2tra2tra2tra2tnZ2dnZ2trZ2dnZ2dnZ2dnZ2dnZ3qpfVWBuW1VZUVpeT0xHQ0ZNSUZEREo7QUE7PDg4NjQ4Njk4Nzw/QT89Ojc8Pz48Pz87OjY4OD09QEE9QD5BQD1AOjs6Pj1BRUdJQkBDR57h29vb29vc3Nzc3Nzc3Nzc3d3d3d3d3d7e3t7e0tLS0tLS0tLS0tLS0tLS0tO+wMqaoKKViJGeqpOpz9TT09PT09PT09PU1NTU1NTU1NTU1NTV1dXV1dXV1dXV1dXV1tbW1tbW1tbX19fX19fY2NjY2NnZ2dnZ2dnZ2dnZ2djY2djY2NjY2NjY2NjY2NjY2NjY2NjX19fX19fX19fX19fX19fX19fY2NjY2NjY2NjZ2dna2tra2tra2tra2tra2tra2tra29vb29vb29vb29vb29vb29vb29ra2tra2tra2tra2tvb29vb29va29vb29vb29va2tra2tra2tra2tra2tra2trZ2dnZ2dnZ2dnZ2d6iXFVeblheXU5aUFROQ0NMSUlJRkpEPEJBPDs4NzY3OTc3OTk9P0E/PDo5QD88PkI/Ojg3NzY9Pz9APUBBPz88PTs7OD48P0VJSEE/Q0aX4dvb29zc3Nzc3Nzc3N3d3d3d3d3d3t7e3t7e3tPT09PT0tLS0tLS0tLS0tTIlZyum5m1iX2TjIKBhMTV09PT09PT09PU1NTU1dXV1dXV1dXV1dXV1dXV1dXV1tbW1tbW1tbW1tfX19fX19fX2NjY2NjY2dnZ2dnZ2dnZ2dnZ2dnZ2NjY2NjY2NjY2NjY2NjY2NjY2NfX19fX19fX19fX19fX19fX2NjY2NjY2NjY2dnZ2dnZ2dna2tra2tra2tra2tra29vb29vb29vb29vb29vb29vb29vb2tra2tra2tra2tvb29vb29vb2tvb29vb29vb2tra2tra2tra2tra2tra2tra2tra2tra2tnZ2dndmlpYYW5ZYVdPV01QRUJETElNS0ZJRT5CRDk4ODY3OTc1Njk4PT1BPjo4OT4+PD9APzw1Njc2PD4/PjtAQEA/Pj4/Pjs/PkFCRkdCQENIkeLb29zc3Nzc3d3d3d3d3d3d3d7e3t7e3t7f39/U09PT09PT09PT09LS0tLTz6h+kayPko6MhoCIiYSQo8rU09PT09PU1NTU1dXV1dXV1dXV1dXV1dbW1tbW1tbW1tbW1tbW19fX19fX19fX2NjY2NjY2dnZ2dnZ2dnZ2dnZ2dnZ2dnY2NjY2NjY19jY2NjY2NjY2NjY2NjX19fX19fX19fX19fY2NjY2NjY2NjY2NnZ2dnZ2dna2tra2tra2tra2tra29vb29vb29vb29vb29vb29vb29vb29ra2tra2tra2tvb29vb29vb29vb29vb29vb29va2tra2tra2tra2tra29vb29ra2tra2tra2tna3JJaWWNuWlpSVV5QTDxAR05IUklIRT47SEY4OTc1Nzg3NTg5ODs+Pj07ODlBPj1AP0E+NzU5Njs+QUI/P0BAQkI/Pj8+QUBEQUZIQj9FSozi3Nzc3Nzc3d3d3d3d3d3e3t7e3t7f39/f39/f1NTU09PT09PT09PT09PWtaWaiIuQhYCFi4iBg4qLf4bC1tTU1NTU1NTV1dXV1dXV1dXV1dXW1tbW1tbW1tbX19fX19fX19fX2NjY2NjY2NjY2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2djY2NjY2NjY2NjY2NjY2NjY2NjY2NjX19fX19fX19fY2NjY2NjY2NjY2dnZ2dna2dra2tra2tra2tra2tra2tvb29vb29vb29vb29vb29vb29vb29vb29ra2tra2trb29vb29vb29vb29vb29vb29vb29vb2tra2tra2tra29vb29vb29vb29vb2tra29uIWltnalxYTFpfVkg6TEhMSkpDRUZDQExINzo3Njc4ODU4Nzg5PDw7Ozk4QD89Pj8/PDY3PDQ3P0JCQUBAPz8/QT09P0A+QEBGRT09REuI4tzc3Nzd3d3d3d7e3t7e3t7e3t/f39/f39/f39TU1NTU1NPT09PT09PUxZKCg4WGfYGCfXx5foGCg36k29bU1NTU1NTV1dXV1dXV1tbV1tbW1tbW1tfX19fX19fX19fX19fX19jY2NjY2NjZ2dnZ2dnZ2dna2tnZ2dnZ2dnZ2dnY2NnY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjX19fX19fY2NjY2NjY2NjY2dnZ2dna2tra2tra2tra2tra29vb29vb29vb29vc3Nzc3Nvb29vb29vb29vb29vb2tra2tra29vb29zb29zb29vb29vb29vb29vb29vb29va2tvb29vb29vb29vb29vb29vb2tvZgFpebWhaU0ldW1hKRE1ISlNMR0ZBQD9KQjg7NjY5OTc1ODY4Ozo7Ojw5OD09O0A9Ozo2NTw3Oz1CQEFBPD49QEE9PEA/Pz5CREU+PERLg+Lc3d3d3d3d3t7e3t7e3t7f39/f39/f39/f39/V1dTU1NTU1NPT09PT2LKEkKh9g3l2hIh/e3d5gn5+i67A1dTU1NXV1dXV1tbW1tbW1tbW1tbW1tfX19fX19fY2NjY2NjY2NjY2NjY2NjZ2dnZ2dnZ2dna2trZ2dnZ2dnZ2dnY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2dnZ2dnZ2tra2tra2trb2tra2tvb29vb29vb29vc3Nzc3Nzc29vb29vb29vb29vb29va2trb29vb29zc3Nzc3Nvb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vc1nlcWmxmWFJPYFFSQUhHSkZYTEZAQENDSz87Ozc4ODc2NTc2ODo5PDw6PTs/PTs9Pjw7ODg8OT0/QkFCQzw8P0FCPj1BQkNCREVDQDtDTH3h3d3d3d3e3t7e3t7e39/f39/f39/f39/g4ODg1dXV1NXU1NTU1NPU0ruen3WKeXuIgICChYGDcnOAhYOMrNfV1NXV1dXW1tbW1tbW1tbW1tbW19fX19fX2NjY2NjY2NjY2NjZ2dnZ2dnZ2dnY2NnZ2dna2tra2trZ2dnZ2dnZ2djY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2dnZ2dna2tra2tra29vb29ra2trb3Nzc3Nzc29zc3Nzc3Nzc3Nzb29vb29vb29vb29rb29vb29vb29zc3Nzc3Nzc3Nvb29zc3Nzc3Nvb29vb29vb29vb29vc3Nzc3Nzc3Nvb29vb3dByXV9wZVdLUGNPS0JHQ0pIS0ZBPEE9SFBBOjo3Nzg3Njc4Nzw6OD09PD47QD88Pz07Ojs5Ojk8QEJAQkNAPUFAPz1AQkNDQUBAP0A7RU144N3d3d7e3t/f39/f39/f39/f3+Dg4ODg4ODg4NXV1dXV1dXV1NXU18h4i4V8goh6g4SBfoKCc2l0hYuGkJ3U1tXU1dbW1tbW1tbW1tbW19fX19fX19jY2NjY2NjY2NnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dra2tra2tra2dnZ2dnZ2dnY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2dnZ2dna2tra2tra2tra2tvb2tvb3Nzc3Nzc3Nvc3Nzc3Nzc3Nzc29zb29vb29vb29vb29vb29vb29vc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc29vb297KalxjcWVST1heSz9HTElPS0VAPkFCP0lPPjk6NzY7NzY6Ozc7Ojg6PDw+Oz09Oz48Ojs4OTo4OUFCQkFAQDtAQj06PkFCQz8+PT4/PUZOdN/e3t7e3t7f39/f39/f4ODg4ODg4ODg4ODg4OHV1dXV1dXV1dXV1s6dhpl+f5OTin+CgXx9gnNxm4mAgoOJwNnat7TQ19bW1tbX19fX19fX19fX2NjY2NjY2NjY2NjZ2dnZ2dnZ2dnZ2tnZ2dnZ2dra2tra2tra2trZ2dnZ2dnZ2dnZ2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NnZ2dna2tra2tra2tra2tra29vb3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nvb29vb29vb29vb29vb29vc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3NvfwGNaW21gVlBTU0pETEhNSEk8PkFEQ0ZORDw8OTc5OjY4Ozk3PDk4OTw9OzlAPjpBPzw3NTc7ODpAQUVBPz45PUI/Oz1CQkI6Pj07PT5GTnHe3t7e3t/f39/f39/g4ODg4ODg4ODg4OHh4eHh1tbW1tbW1tbV1tjLioCHhYOXjHh7e3lvfYF1a3ebdHZ7eInHxpiMrdjZ19fX19fX19fY2NjY2NjY2NjY2NjY2NjY2dnZ2drZ2dna2tra2tra2tra2tra2tra2tra2dnZ2dnZ2dnZ2dnZ2dnZ2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NnZ2dnZ2dnZ2dna2tra2tra2tra2tra29vb3Nzc3dzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nvb29vb29zb29vb3Nzc3Nzc3Nzd3dzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3d3d3d3d3Nzc3Nzc4LdjV1lrYlJNVVFMSktGS0ZDQD5CQT9FTT4+PTg5OTo3OTo3NT03Nzo+PDs7Qjw5Pz05NjY4PTk6QEJGQD49PEBCREA9QD9DO0A9PD4/Rk9t3N/e3t/f3+Dg4ODg4ODg4ODg4OHh4eHh4eHh4dbW1tbW1tbW1tfVrYZ6d32rn3l4entzdH+Dfm9xe3l6c3t2k4qFgImkzdnY19fX2NjY2NjY2NjY2NjY2NjY2NjY2NnZ2dna2tna2tra2tra2tra2tra2tra2tra2tnZ2dnZ2dnZ2dnZ2dnZ2dnZ2djY2NjY2NjY2NjY2NjY2NjY2NjY2dnZ2dnZ2dnZ2dra2tra2tra2tra29vb29vc3Nzc3N3d3d3c3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc29vb29vc3Nzb3Nzc3Nzc3N3d3d3d3d3d3dzc3Nzc3Nzd3d3c3Nzc3Nzc3N3d3d3d3d3d3d3d3dzc3OGtYVtebGJSTVZMTUdLS0RGQkI7QT08RUxDQT44Ojk6Nzc5NjY6NTs+QDs9Oz89PD89Ojk5Ojw5PEVDRkA/PkBDQkQ9OT0/QT1CPz1APkdPadvf3t/f3+Dg4ODg4ODh4eHh4eHh4eHh4eHi4uLW1tbW1tbW1tfQmH+Qh4N9eoN2e3Vzenl6kKqmd3JyfoeHh4CAfoKEhJHJzNnX19jY2NjY2NjY2NjY2NjY2NjY2NnZ2dnZ2tra2tra2tra2tra29va2tra2tra2tra2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2djZ2dnZ2dnZ2djY2NnZ2dnZ2dnZ2dnZ2tra2tra2tra2tra29vb29vb3Nzc3N3d3d3d3d3d3d3d3d3d3d3c3Nzc3Nzc3Nzb29vb3Nzc3Nzc3Nzc3Nzd3d3d3d3d3d3d3dzc3N3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3NzhpV9UYm1iUE9TSUhHRkpJSUJBPkJCPEVFREA+ODo4Ozc3Ojc4ODY+Pz07PDk9PDo+PTs6Njc7NjpEQUY+Pz8/PkNBPzs9PT47REM/PjxIT2fZ4N/f3+Dg4ODg4eHh4eHh4eHh4eLi4uLi4uLi1tbW1tbW19jYyH52doN+fnR2eIaCenl1d5yhu6GEgoCAfoeKinx/gYaMnKjO2NjY2NjY2NjY2djY2NjZ2djY2NjY2dnZ2dra2tra2trb29rb29rb2tra2tra2tra2tnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dna2tra2tra2tra2tra2trb29vb29zc3Nzc3N3d3d3d3d3d3d3d3d3d3d3d3dzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3e3t7e3t7e3d3d3d3c35pbT2drXFBRUElDT0pLR0xHSkJAP0FHREBBPDg8ODg1ODk3Njc3QEA/Ozw5Pj04PTw8Ojc4PTk/RENGPkE/QkBDPzw6Pj0/PkVEPz07S1Fj1+Hf4ODg4ODh4eHh4eHh4uLi4uLi4uLi4uLj49bW1tbW19XB3LRueHJze3B6eXaFiIR7eH2AgZiljH98fnuRhZaLhoGDgY6Rvd3Z2NjY2NjZ2dnZ2dnZ2dnZ2dnY2dnZ2dna2tra2trb29va2tva2tra2trb29ra2tra2tnZ2dnZ2dnZ2dnZ2dna2trZ2dnZ2dra2tra2tnZ2dnZ2dna2tra2tra2tra2tra2tra2trb29vc3Nzc3Nzc3N3d3d3d3d3d3d3d3d3d3d3d3d3d3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3e3t7e3t7e3t7e3t7e3t7e3t3d3d6NWFdobllQUUtISlNJTUhNSUtBQz9DRkJBRDo6PDg2NDg4NzY2Nj8+Pjo8OTw7Oj09PDw4Ozw7RERERT4/PkI+Qj84PT8/Q0NCQEE+O0xUY9Xh3+Dg4OHh4eHh4eLi4uLi4uLi4uLi4uPj4+PW1tbW1teslLZ6eHJvd5V7dHuLgHh1bn6Fg3t/hYhyfH2bnI6JioJ+g32Hk5rH1NjY2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dna2tra2trb29vb29vb29vb2tra2tra2tra2tra2tnZ2dnZ2dnZ2dna2tra2tra2tra2tra2tra2tra2tra2tra2trb2tra2tra2tra2trb29vc3Nzc3Nzc3Nzd3d3d3d3d3d3d3d3d3d3d3d3d3d3c3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3N3d3d3d3d3d3d3d3d3d3d3d3d3e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3d7Zf1lgaGxcUUtHR09LTk5PTURGQkg/Q0hEREA6Ozs4NzU3Nzc4NThAPkA7PDk8Ozw+Ojk7OTk7OUZERUI8QD4/PEBDOz5AP0A/Qj8+OjtKVWPV4eDg4eHh4eHi4uLi4uLi4uLi4uPj4+Pj4+Pj1tbX19vKhYR3cXJubniVhHt4hH95dnB4c3eLkY6CdnN9ioaId3d1d4ODfIiIk8Pb2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dra2trb2tvb29vb29vb29vb29rb2tra2tra2tra2tra2tnZ2dnZ2dna2tra2tra2tra2trb2tra2tra2tra2tra2trb29vb29ra2trb29vb29vb3Nzc3Nzc3Nzd3d3d3d3d3d3d3d3d3d3d3d7e3d3d3d3c3Nzc3Nzc3Nzc3Nzc3Nzc3d3d3d3d3d3d3d3d3d3d3d3d3d7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7f0nVZaGlqVk5KSE1OR01EUElGSD9FPUZMREM+Ozs8OTc3OTY2OTU4Pj4/PTs8QDs9PDo3Ozc5OThHREVCPUE9Qj8+QDw/QUE/QEJAPjs8S1Ri1OLg4eHh4eLi4uLi4uLi4+Pj4+Pj4+Pj4+Pj49fX19fEknuJf29sbnV2foSBg4qGfnVybWVtiIaKjoR7c4OHint4e4OPj4GEioqxztrZ2dnZ2dnZ2dna2tra2tra2tra2trb29vb29zc3Nzb29vb29vb29va2tra2tra2tra2tra2tra2tra2tra2tra2tra2tvb29va2tra2tra2tvb2tvb29vb29vb29vb29vb29vb29zc3Nzc3Nzc3d3d3d3d3d3d3d3d3d3d3t7e3t3d3d3d3d3d3d3d3dzc3Nzc3Nzc3d3d3d3d3d3e3t7e3t7e3t7e3t7e3t7e3t7e3t7f39/f39/f39/f39/f3t7e4clsW2pqalNOR0dOT0VIRk1JSUA7RD5ISUA9PDo6Ojg2ODo3Nzk0OD08PT07ODw8PDw4Njc4OTo6RUJFQT9APEI/Q0M+PkNEQUBAP0A8PUtRYdPj4OHh4uLi4uLi4uPj4+Pj4+Pj4+Pj4+Pj5OTX19fZqXaFfnx3bHB3eXh8jH2KhYB3anN0d3p9bot7fnl6foR/gIGDfnh8foeGlrbT2tnZ2dra2tra2tra2tra2tra2tvb29vb3Nzc3Nzc3Nvb29vb29vb29ra2tra2tra2tra2tra2tra2tra2tra29ra29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb3Nzc3Nzc3Nzc3d3d3d3d3d3d3d3d3d3d3d7e3t7d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3t7e3t7e3t7e3t7e3t7e3t7e3t7e39/f39/f39/f39/f39/f39/e3uO9amFpa2lRTkZNTEtKWE1OR0FAQE9BQz9AOzw4OTk5Njg2NjY4NDs+PD07OTY6Ojk6OTU4OTg5OkJERj8+Pj5AQEBCPzxBQD88Pj9BOT5KT17S4+Hh4eLi4uLi4+Pj4+Pj4+Pj4+Pj4+Tk5OTk19fX2sqKhIB5c29tcXN1d4CUeHaAfHWHhXd1cnWgmXp7d3Z5doR0bWxue3iAmouTu9za2tra2tra2trb29vb29vb29vb29zc3Nzc3Nzc3Nzc3Nzc29vb29vb2tra2tra2tra2tra2tra2tra2tra29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vc3Nzc3Nzc3Nzc3d3d3d3d3d3d3d3d3d3d3d3e3t7e3t3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3t7e3t7e3t7e3t7e3t7e3t7e3t/f39/f39/f39/f39/f39/f39/f397js2lpbmloUFBPTExPUk9LU0Y/RURERD48PDg7ODc5OTU2ODY2NzM6Pjs+PTc6Pjk5OTk2Ojo4NzxDRUc/Pzs/PkA9PkE9Oz0+OUFAQDhBTlFc0OTh4eLi4uLj4+Pj4+Pj4+Pj4+Pk5OTk5OTk5NjY2NjauY6AenZ1bmpveHCBfWt0cnZ3hIV5h4d5lY55eXp1d3pza298gHx2fYh8gLLe2tra2tvb29vb29vb29vc3Nzc3Nzc3Nzc3dzc3Nzc3Nzc3Nzb29vb29rb29vb29ra2tra2tra2tra29va29vb29vb29vb29zc3Nzb29vb29vb29vb29vc3Nvb3Nzc3Nzc3Nzc3Nzc3Nzc3d3d3d3d3t7e3t7e3d7e3t3d3t7e3t7e3t7d3d3d3d3d3d3d3d3d3d3d3d3d3t7e3t7e3t7e3t7f39/f39/f39/f39/f39/f39/f4ODg4ODg4N/f39/f4qpqa2hrZFNQT0ZQVFJOSFJLPkREQ0I7Ozk6Ojg2Nzg1NjY4Nzg0Oz88Pz05PDw3Ozo6Nzo6Nzo9Q0JDPUE+Pzw5PT5BQDs8PDtFQD47Q05TXNDk4eLi4uLj4+Pj4+Pj4+Pj5OTk5OTk5OTk5OTY2NjZ1p5vdntveHh2cG50d3BwdHBzb36Jc3qGhY2EenNtcoB6hn1vg5OBdnx9g4a13drb29vc29vc3Nzc3Nzc3Nzc3Nzc3Nzc3d3d3Nzc3Nzc3Nzc3Nzb29vb29vb29vb29ra2tra2tvb29vb29vb3Nzc3Nzc3Nzc3Nzc3Nzc3Nvb29vb29vc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzd3d3d3d3d3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3d3d3d3d3d7e3t7e3t7e3t7e3t7f39/f39/f39/f39/f39/f39/g4ODg4ODg4ODg4ODg4N/f3+KgbWhma2ZVVlJHUFFOS0xMRUJIRUc9OD08Ojo3Nzg2Nzc2NTY3NDg+PD09Ojg6OD46Ozc4Nzc6Oj5DRDtDQj49OD1AQUM/Pjw+RTw+PUJNUF/S4+Hi4uLj4+Pj4+Pj4+Pk5OTk5OTk5OTk5OTk2NjY3MB2doCCfnp4eHBsdXlya399bHNvdGdoaYB/aWh4c2d+iYl4cIKGe3d9foWKvd3b3Nzc3Nzc3Nzc3Nzc3Nzc3d3c3Nzc3N3d3dzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nvb29vb29vb29vb3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzd3d3d3d3d3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7f39/f39/f39/f39/f39/f4ODg4ODg4ODg4ODg4ODg4ODg4ODflGttZm5mU1NJUFlUTEhGTkZGRUJGPTs+PDs5Nzc4NTc5NjQ1NzU4PDs9Pjo6OztAOTs7ODc6OTlAQkE8QUE/Pzk/QEJFQ0FAQEM7Oz1ES01g1uTi4uLi4+Pj4+Pj4+Pk5OTk5OTk5OTk5OTk5NnZ2tmYc3uqhJaCcnR1dn14aGx8d2h4d25rcHR5gIN2dHyBhIJ9c3CAin94gn95g8je3Nzc3Nzc3Nzc3Nzd3d3d3d3d3d3d3d3d3N3d3dzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nvb29zc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3N3d3d3d3d3d3d3d3d3d3d3d3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e39/f39/f39/f4N/f39/f3+Dg4ODg4ODg4ODg4ODg4ODg4ODg4ODh24tubWdzY1lRTVVbV0hDSUZOS0dCRD8/Qjo7OjY2NzU2NzY0ODc2Ozw7Pj86PDk8Qjg3OTo6Ojk6QUFCQUJDQEE+PT9CQ0NEQUJGOTg9REpOYtjk4uLi4+Pj4+Pj5OTk5OTk5OTk5OTk5OTk5OXZ2drcqHGCtXiRfnNsem6EgXaCfWtoan+DeHZ8dX2FhXRmcHl9d316gIqFe318foC03tzc3Nzc3N3d3d3d3d3d3d3d3d3d3d3d3dzd3d3d3dzc3N3c3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzd3Nzd3d3d3d3d3Nzc3Nzc3Nzc3Nzc3N3d3d3d3d3d3d3d3d3d3d3d3d3d3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e397e3t7e39/f39/f39/f39/g4ODg4ODg4ODg4ODg4ODg4ODg4ODg4eDg4ODg4ODg4tiFb3FrdWFWT1VVXE9ETUY+SkdKRUQ8P0I6PDk4Njg0NTY3NDc2NDk7Ozw7OD47PEE4ODo9OD04Oj09QEBAP0FCP0A+QENCQ0FBRTc2O0RMTmPa5OLi4+Pj4+Pj5OTk5OTk5OTk5OTk5OTk5OXl29ra3Z5sbnNxhY1ybXBuf391hH5rcnZ2enN4gXhzb3VwbWt2fHmFiIB/f392coODsd/c3Nzc3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3Nzd3d3c3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3N3d3d3d3d3d3d3d3d3d3d3d3d3c3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e39/f39/f39/f39/f39/f39/f39/f39/f39/f4ODg4ODg4ODg4ODg4ODg4ODg4OHh4eDg4eHh4eHh4eHh4OLXhW1xb3ZeUldTWlpRSkhDQFFAQkQ8OT9BOjw5NzU3NDU2NjQ3NTY9PDo9PTk+OjxAODo6PDY7OTs+PUJCQjtBQkBDQEBEREM8PUA3OjxFS01l3OPi4uPj4+Pj5OTk5OTk5OTk5OTk5OXl5eXl5dPOxsB+cWxveHt2b3VuanNzbZKGeG50dG5vdIZ/b2twboJ0bXZyfY2DdnF/d3mKgabf3Nzc3d3d3d3d3d3e3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3dzc3d3d3dzc3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3t7e3t7e3t7e3t7e3t/f3t7e3t7f39/f39/f39/f39/f39/f39/f39/f39/f39/f4ODg4ODg4ODg4ODg4ODg4ODg4ODg4eHh4eHh4eHh4eHh4eHh4eHi1oZucG1xYFJZUFdfWUpMTElSP0Q9OTtCRjs6OTc0NTY1NzU0NjY2Pj07Pz45PTk7Pjg9Ozo0ODtAQENCQ0FCRkE/Q0BBQkREOz0+OTs8QkxNZODl4+Pk5OTj4+Tk5OTk5OTk5OTk5eXl5eXl5eW5t7Woc3JscHd6dHd4bXFydXd/hHRyc2xsa3F8bnBudGuBf3GAd32Eg355gHNygYqg2d3c3d3d3d3d3d7e3t3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3e3t7e3t7e3t7d3d3d3t7e3t7e3t7e3t7f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f4ODg4ODg4ODg4ODg4ODg4ODg4OHh4eHh4eHh4eHh4eHh4eHh4eHh49WHcWxqbF5YWlVXYFZWUE9QTD1BOjs8RkE4Ojg3MzY1Njk2NTg1Nz89Oz8+OT04Ozw5PTs7NTo9Q0JCPENDREREQUE/PkJDQzw9Pjg5PENLS2PN0dnh1sjY4+Tk5OTk5OTk5OTk5eXl5eXl5eXltbW2q3J5cm59f3Z1d2hqaGlwb3Zta2tnZWZxdG15gG5teXd2iHhxa2podXV5dHV/wd/c3d3d3d3d3d3e3t7e3d3d3d7d3d3d3d3d3d3d3t7e3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3e3t7e3t7e3t3d3d3d3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f4ODg39/g4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4OHh4eHh4eHh4eHh4eHh4eHi4uHh4ePVhnFwY2lhV1NZV19MUk9STUtAPjg5O0E+ODc5NjQ3Njc6NjY2NDk+Pzo8Pzo/OTo6Nzo9PDk5PEFBPTtBQ0VDRkA+Pj5BRUQ+QEE3OD5GSEpesrW4wbm1u8jg5eXl5OTl5OXl5+fn5+fm5ebm5ra2tbWOfX5weoR1cnZnYmNlbGtyb2ZpbHZtd4Z9hXlsbHd4a3ZwfH14c3V5fHd2h7ng3d3d3d3d3d7e3t7e3t7d3t7e3t7d3d3d3d3d3t7e3t7d3t7e3t7e3t3d3d3d3d3d3d7e3t7e3t7e3t7d3d3d3d3d3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4OHh4eHh4eHh4eLi4uLi4uLi4uLi4eHj1Yd1bl5uY1pUU1hXS1NLSk1SR0E4Ozs+PDk4NzU2NTY2OTY4NjY5Pzw6PT07Pzo7Ozk8PDs5Oj4+Pjs8PUFEQkNBQEBBP0JDPDw9Nzs+REVKXrG1tLW2t7e2y9rJ3uXl3eDi3tXU1tPU4OPg39+2treuh3t/bnmNenJ1bWNobGxtaXR4enF5enqIh4N6aWh9cWRvcXyGgX55e318e4an2t7d3d3d3d7e3t7e3t7e3t7e3t7e3d3d3d3d3t7e3t7e3t7e3t7e3t7e3t3e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t/f39/e3t7e3t7f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4OHh4eHh4eHh4eLi4uLi4uLi4uLi4uHh49aGdmxhb19dV1lcWlJQSEpXTEVHPUA9Ozs9OTY0NjU1NTg2NzY3OD87OT09PDw5OTw6Pjw6OTg+Qjs7Pj5AREBDRUFAQD0/QDw9PTU5PEJHRl2xtbW2uLm5ubq9uMPT0r3BwcC6u7y6u8TMxb/Dt7e3hGl1gX1ndYd5Z3Vxa2t5eHB3fH15bWl3e3h3bml1j4FwbHl4d3d9gXuGgnmAoNze3d3d3t7e3t7e3t7e3t7e3t7e3t3d3d3d3d7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t/f39/f3t7e3t/f39/f39/f39/f39/f39/f39/f39/f39/f39/f4ODg4ODg39/f39/f39/f3+Dg4N/f4ODg4ODg4ODg4ODg4ODg4ODg4ODh4OHh4eHh4eHh4eHh4eHh4eHh4uLi4uLi4uLi4uLi4uLi4ePXhXJrZ3RhW1hYX15TVVVRVUpMRj9JRDs5PTY2NDc3NTc4Nzc3ODk8PDo+PDg8Oj0+OTs8OTs5P0E8PT9DP0FARUJCQTw9Q0A6Pjw1NDlER0dasbW1tre5ubm5ubm3ubm4uLm5urq6urm5urm6u7e3uX9ucHN6b3B/eXNuc3Vsc3Z4cXFwb2tvcX6Bc2mHhIF9dHOHdW11hYmBgHJ2hafd3d3d3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7f39/f3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f4ODg4ODg4ODg39/f3+Dg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4eDg4eHh4eHh4eHh4eHh4eHh4eHh4eHh4uLi4uLi4uLi4uLi4uLi4uHj14lxa2xyW1dXXWBUUVVUUFJPSkNATUE9Ozk2NTM0NjQ2ODc3Nzk6Pjs8Pjs5PDo8PDk8PTw7PT0+PUNEREBDQkE/QD48PkE8ODw6NjY6QkpIWLG1tLa2uLm5uLi5uLe3uLi5urq5ubi4uLi6uru3uKx7cnhxf3ZzfnBsbXpyZ29sbW50cHt3d3Jyd3pvhpJ2f3x8enZ5fH9zfYdyda3T393d3d7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e39/f39/f39/f39/e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f4ODg4ODg4ODg4ODg4ODg4ODf3+Dg4ODg4ODg4ODg4ODg4ODg4eHh4eDg4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4uLi4uLi4uLi4uLi4uLi4uLi49eHb2pxalVWV2FbT1FSUE5XSURESUo/Ojk6NzUzNDk1NjY2Nzg4Oj07PD46PDo6PT05PDw9PD09PDs9REhEQ0E8PDw8Pj5AOzg8ODE1OkFGRVeutbW1tre4uLm4uLi4uLe4ubq6uLi3t7i4ubq7t7mqcnB4d3x7e4J3aG5xam9qY2lyf21zcn54dHFsanaAeX2AgH91doB1a4qLgHaR1d/d3d7e39/f3t/f3t7e3t7e3t7e3t7e3t7e3t7e39/f39/f39/f39/f4N/e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t/f39/f39/f39/f39/f39/f39/f39/f3+Dg4ODg4ODf4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHi4uLi4uLi4uLi4uLi4uLi4uLi4uPYhm1sdGVWUFxnWE1YU1JRWUVDS1BOOzk4ODc1NTM5NTY2NzY4ODk+OT0+OTw5OTw7Njg5OTo8QEA9PkBGQEJCQDo+PEE9Pzs7OzYxNjxCR0RQqLa1tba2tre4t7i4uLi4uLm6ubi4t7e3t7e5ure2tIlyd3h9iXxwem99c2hqbGdnbHRscXd0cWx2c3Fxd3FyfHl4g3Z7d2mLkYp9kM7f3d7e3tvY2drZ297f39/e3+De39/f3Nvc3N3e3uDg3+Dg4ODf3t7e39jS397f397e3t/f3t7f3t/f3t7e3t7e3t7e3t7e3t/f39/f39/f39/f39/f39/f39/f4ODf4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODh4eHh4eHh4eHh4eHh4eHh4eLi4eLi4uLi4uLi4uLi4uLj4+Lj4+Li4uPj4+Pi4uLi4+Lk14NoZ3VkVlVkZVdKWllXW1Q9RU1LSD04NzU3NjQzOTQ0Nzc1Njc5PTo9Pjw9PDk7PDk5Oj45PD4/PkFBQ0FFRUQ+OzxBPjw5PDs3Mzc+REhFSqG2tbW1tbW2tre4uLi4t7e4uLi3tra2tra3uLm2traLfXpsbHp/cGx5dm5qaGdlcXp4b2lvb3B1c21zd4Fnb32CgYNyf3lqcHJ6f6ng393Zy8a/vL2/vsLN0tDW3tnc4NfQzcPCw8PH1dfT2dzX1NjX0MfExce9vM/Kz87Y3djO3N3c2t3T0dze39/e397e3t7e4N/f39/f39/f39/f39/f39/f4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4OHh4eLi4uLi4uLf4uPi4eLg4d7W29/Sw8rJx9Hb3OLk4eHg2dre1sbExcTN2trf5OHi4trX3st9aWZxYVleZWFNTFRLUlpMO0hNSEZBPTc2NjUzNDY2NDg3NjU2OTw7Pj46Pjk5PDk3OTs7Oj49PEBAQ0RCR0ZCQT08Q0A9OTw7Nzc3P0RGRkaZtrS1tbW2tra4uLi4uLi3uLi3s7W2t7a3t7i5tba3opdxb29waW50dnFmZWNrbmdvcm1mZ2tygWVvdnyAeGRzj39zaHFyaWVlbm+w39HFv7u5ubm5ubq6uru6vc3Gw8e/urq6uru7u8HCvcHFvby/vry7urq5ubq6ubm6w8XDucDDwby/ube/z8/U3tjc3t/g3tLa4N/f4ODg39/f39/f39/f3+Dg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODh4eDg4ODg4ODg4ODh4eHh4uLi4eDh4uLi4uHa2t3RwsPCu8XT1uDdydPDrrnAsaqrq6uwtLbJ0sXRxLG4v7Srq6usr7S0vMzE1c60tLureGxtbWBdYl9ZS1NVVFFQREBRTUhEPzo3ODU3MzE1NjQ5ODU2Njo8Oz08ODw5Njo6ODg5NzU8PDw/QEFAQkRDQkE8PkI/Pz09PTc1OD5DRUNAj7a0tLW1t7i4uLi4uLm5uLe1sautr7Oxs7OztLS0tqaei2tue3ZxeXhnY2hfcXdha25vaG99b25ja2lseHdsa4Z+bHB6dm1scG95sca8uru7urm5ubq6urq6urq6urq6urq6urq7u7q7u7y7urq6ubq7u7q6urq6urq6ubi3t7i4t7e2tbW1tbi3u8e+w8XHzcS4wMnH0tzZ2d/e3uDf39/f4ODh4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODh3Nji4uLi4eHh4OHg3tfGxtHQztTe3tPO0t/SuLi8sq2trKysrrG+ua63rKipqamqq6urqqqqq6ysuKyqqqqrq6urra6urq6urryzrayrpHlub21fXl1dVE1SU1xUSkE/UElIPjg5NjgzNzMwNTczNzg1NzY2Ojw/PDg5Ozo6Ojg5OjY1OTs8Pj9EP0NFQkNCP0BAQT9APjw3ODc6QUVEP4W4tLS1tbe4uLm5uLi3t7SurKuqqq2urq6vsLGzs7WjcG5ucm1wg311aWFlaGZkY2Rxc21td25naW1tZXBzb29zcXN8h4F6dX11n7u6uru7urq5ubm6urq6urq6ubq6urq5uLm5ubm6urq6u7q5ubm5ubq6ubm6ubm4uLi3t7e4uLe3t7a2tbW2tra1tbW1tba1t7e3t7rBvrzGycrb3+Dg3tvd3d7h4tDW4uHg4ODg4ODg4ODg4ODg4OHg4OHi0768zNjd3OLg0dnbxL23sLCxsa+zu7uzsLS9s66urq2tra2sq6qqqqmpqKmpqampqqurqqqqqamoqampqampqaqqqqytrq6urq6urq6sraR4aWJxZmFZWlZRUk5cU0Y9QlJEQTc8OzY5NTY1NDU2NTk3NTY1Nzg7Pjw7OTk5Ojg3Nzk3Njg8Oz47RD8/Q0BBREE+P0M9Pjw+Ojo3Nz9DRj54srCztLW2t7i3trKurq2sq6uqqaqtraysrq+xs7S1t4xucnRqaIB5ZmpmZWxdaG5waGxxYmNmcoJ+dmhobGpueoaBhXx4cXF5gK+6ubq6urm5uLm5ubm5ubm5ubm5ubm4uLe3t7e3uLm5ubm5uLe3t7i5ubi4uLi3t7a2tre3t7e3tra2trW0tLW1tbW2trW1tre3t7e3t7e3tre4v8bP0MS+v8DE19e8ydra4OHg4ODh4eDg4ODh4eDb3t7Uzby3tre6wMDJxLfIvrKwsLCwr7Cvrq6ur7Cwr66urq6uraytrKurq6qpqampqampqampqKmpqKmpqampqKmpqKmpqqqrraytra2ur66trK2heWpkbWdiXFhRUFFLVEpCOklRP0E3PDk0OjU2NTQ1NTU4ODY4Njs6OTw9PTs6ODY2ODg6ODY3Pj09PT5BQUVCQkNBQUBBOj09Pz05Ojc9QUc8bKqmqKutsLGwrqupqKqrq6mpqamrrKytra2usLO0tbilgIdvaWdzdGZrcG1qZGxvcm5rbWNrcHyJhG5qbHx4Y3uKfnNqc25rcY+7ubm5ubm5ubi4ubm5ubm5ubq5uLi3t7e3t7e3t7i5ubi4uLe2tra3t7e3t7a2t7a2tra3tra2tbW1tba1tLS0tbW1tra2tra3t7e3t7i4uLe2t7a2uLm4uLe3uL6+uLq9vcfb4OHg2Nnd4eHg3dfKwcPCurm5uLe4uLi3tbS0tLKysbGxsLCvr6+vr6+vr6+vr66ura2srKyrq6yqqqmoqKmppqepqaehpaipqamoop+hoZyip6inqausrK2ur7Cwrq2unXhwbGphY2BZUU1RTFJGQzlNUEU+ODs3Mjc5Njc0NDM1Nzg3OTc7Ojo9PTw6Ojk3NDo5ODY1OD8/QEI9RENDQ0FDQEJBQDtAP0A/PDw6O0NIPWOopaWlpqioqKenp6ipqqmoqKipqqqsra6wsLCztLW1taWYdn5xZmt4cW9tZmVsaGNsZ2ZpaX11bWlvfXZ5hWZod294b3Fvcninu7m5ubm5ubm4uLm6ubm5ubm5ubi3t7W1tba2tre3t7e3t7a2tbW2tre2tbW1tra3t7e2tbS0tLS0tLS1tLS0tLW1tba2tra2t7e3t7e3t7a2tre2tre3uLe2t7i4t7i4uLi4wMXTyry8w83PyMC9urm5ubq6ubi4uLi4t7W0tLSzs7KysrGwr6+vr66urq+vr6+uraysrKurrKysq6ehoJ6gn5udoaGdlpmkpKaon5mZmZmanZ+gn56fpKqtrq+ura2srJl1cGlrY2FeXVVOU0tSREQ4TktHQTo4NTI2OTY1NDczNzc3ODk3OTo7PT0+ODg4NzU6OTk1OD9AQEFEPkZBQkNAQkNCQT88QEJCQD0+OjpERj5cpqWmpqampqanqKenqKioqKenqaurrKytra2ttLS0tbekc311bnONf3JmanFjaW1jaGZobG51aV9jZ3VzdnpuZ3Bwcn56cYihu7m5ubm6urq6urm2s7a1uLm2trW1tra1tbW1tbW3tra3tra2tbW2tbW1tbS0tLa2t7e3tbS0s7O0tLW1tLS0tbW1tra2tra2t7e3uLe3tra2trW2tbW2tra2tra2tra3tra3uLi3uri4uLi3uLi5ubm5urq6urm4t7e3t7W1tLS0s7OysrKxsbCwr66urq6urq+vra2srKuppaSmpqScmZubmpmampmXl5eXl5aZm5iZmJmZm52en5+dnJ6gpKWko6OioqKQdG5jcGFeXltUU1RIVEo/PFFCRkM7ODYzNzo1NTQ4Mzg5OTc4OTc7OTs9Ozc6NzU2OTk4NTg+Pz9ART5CPz9DPzxBQUI/PT9EQT8+PTk9Q0Y/VaSlpqanqKeoqamop6ioqKioqKiqrKuqqaipq7W1tba5o3eKcXKHhnd0cGh5a2JjYWVsaW5zal9jZWNjZWprYmRqbHaXjX6ovbm3tre5u7u6uLWxrKurqq6wrKyrq62tq6uvsLGvr7CytbW2t7W1trW1tbW1tbW2trSvr7O0tLSvra6vsrW0tbW1tbW2t7e3t7e3t7e3t7e3t7Owsra1tLa2tre3tra2tbW1tra3t7e5uLi4t7e3uLi4ubq6urq5uLi3t7e1tbS0tLS0tLS0s7OysbCvr6+vr66vr62oo6KgnJqampqZmZqbm5qampqbmpmZmZiXl5aYmZmZmpycnZ+foJ+goKChoaCgoJ+fi3RuaXRdYGZeUlRLRFRJPUVTSEVCOzo0NDY5NDQ1NzM4ODg3ODk5Ojs7Pz04OjkzNTg5NjM5PT5AP0A6QEJCQkA/QEJCPz0+QUFCPz06PkVDQFGjpqWlp6inqauqqKaoqKipp6ioqKinp6ioqaq1tbe3t7KZtH99kIx1Z2lqbGZjYGNoZW94cGlicXx5cGpmZmRma3NqhYystrKwra2ttLeysLCtrKuqqaiop6ipqampqKinqKipqaeoqqurra2sqqytraysrq6traunpaSnqqyopKOkpamwsbGztbW2t7i3t7W1tre4t7e3t7Kppaasq6ivtLa1s7W3t7a1tbW2tra3t7e3t7a2t7e3t7m6urq5uLi3t7Wxs7S0tLKxsK6sq6yurrCxsK2rqqmqqKijnJqZmJmYmJiYmZmZmZmZmpqZm5ubnJybmZeYmpqcnJydnJ2foKGhoqKioKGgoKCfnop1amtuWVxhVktPREdVRz5PV0hEPTw4MzQ0ODQ1NDgyODk4ODk6Ojw5OUA8Njk6MzY3OTE0PD8/QEBBOkNGRUJBREJDQTo7P0FCQz9APUBEQ0BPo6empaemqKqqqqakpqenqKioqKimpqaoq6uttba3t7e4rbJ1cHuDdmBiaWtiZWZhZGdmfYh5bHKAfXFvcXhjbW5xZo+srKurq6ysra6urK2trKyqp6WmpaWlpqioqKiopaeoqKioqKeoqampp6Wko6KioqOioKKioaKhoKChoaKjpKOjpaWlqLC0s7OzsKuqqaqztLa3trGopaOioaGipKiqqairs7Sxrq6xs7W2tra3uLi3t7e3t7e3t7a2uLe0sa6ppqerrKmnpqWkpKSkpKWoqaajoJ+enZycm5uampmZmJeXmZmZmJiZmpqampqampqbm5mYmpydnZ2dnZucoKGgoaOjoqCgoKCfnp2FdGtsaFdYU0pHTUVITUdAU1dGRz09OTM2Mzc0NTU3Mzg6Ojo6OTw9OjpBPDY9ODM3ODgzNztAPz9AQDpCRUNAQkRDQT87PEBDQkNBQDxBQ0A9TqKnpqanp6mqq6mkpaWlpaaoqKippqanqKmpqrW2tre3t7izc2h7c2JnamtpaWJhZGloXV1tfHJma3J/fHR8bm1zc36gqamrq6uqq62trKusq6mpqKWjpKampqWmp6eqqaamp6enqKinp6iop6WjpKKhoaGhn56en5+fn56foKGho6Wko6OkpKSmp6enpqWkpaampqeqraumpKKhoaChpKWlpaenpaeoqKalpaivtLa3trW1tra1tbOwrKupqa6rqKWlpqampaSkpaWlpqWkpKSkpaKhoaGgnp2bm5ucm5qamZiXmJiYmJiZmpmZmZmYmZmZmZqZmZydnJycnJybnJ+fn6ChoaKgoKCfnZ2cgHNrbmReU0pITUZETEtFRFFTQ0c9PDgzNjI4NDY0NjQ4OTg6Ozk7Pjw5PTs5PTczNTk2NTY8QD0/QD88P0JDPkJCQj89Pj5CQ0FFQD86PkVAO0+jpqWkpqeoqaelpKWlpKWnp6eoqKanp6alpqa1tba2trW2uYptcW1vfHxxZ2pmYGFsYFROW2hqbm9tgYJ9cWdxdn6aqKeoqqmpqqurrKqqqqimpaWkoqOlpqalpaWmqaqppqWjpKWmpqSjo6KioqKgoJ+fnp6cnJycnJ2dnJ2en6CioaKjo6KhoqKkpaSioqOjpKSjpKSko6Ggn6GipKanp6ipqaelpaSipKSlqK2wsKyrqqusqqmnpaWmpaWlpaalpqioqailpaWkpKSlpKOjpKOioaGhoqKgnp2cnJubm5qZmJiYmJmam5mXl5eWlpeXmJiZmpqcm5qampubm5ucnJ6goKGgnp6enpycm356bnJiXlNNSlBFRk5NQkBPRT5JOz01MzYzODM2Njc1Ojs4OTs5Oj49Ozo5Oj43NjY5NjU2PkI+PkE/PT5DQT5DQ0BAO0BAQkJCRUA+Oz5FPzxQoKSjpKOjo6SkoqSlpaSlpqamp6empqalpqaltLW1tbS0tbiBaHx9ZXOCemxwdWFfY1ROT1FbaGxpbGxxbW5xbnScoqSnqKioqauqqqqqqaempaSjo6OjpKSlpqalp6ytqaShnp2eo6Shnp6foKCenJ2dnJycmpqam5ucnJubm5ydnp6foKChoJ+goaOioKGjpKSjoqSlpaWkop+go6SkpKapqainpaGdnJ+jpaipqainqKioqaempaWkpKSlpqampqampqenpaWko6Ojo6KioqGhoqKhoqOkop+enZ2cmpubmpqZmJeXmJaWlZSUlJWVl5iYmpubnJuampqam5ucm5ucnp+fnpucnJyam5p/fnF0YFtUTUdNSEZMSj8/TkM8QDs8NDM4Mzc0NzY3ODs9ODo6OTk7PTs7ODk9Nzc4OTU4OD9APT9BPjs9RD89REA/PzpAQUE/QUVAPjw8Qz88Tp2ioaKioKCipaSkpKWlpqenp6empqampaampbW1tbS0tLS3jHalsXdmc3Jvc2xjZGlYT1JRT09dgG1kYFptkZGSoqKjpaampqenqKiop6alpaSjoqGhoaKjpaempqesrKemoJ2cm6Ghnpuamp2cmZiam5qampmZmZubm5uampqampucnZ6goaCfnp+hoJ6foqOko6Omp6inqKWioKGhoaGkpaWlpKCcmZmbnqOmpqampqanpqempaOlpKWlpqiop6enpaWlpaWkpKOjo6KhoqKioqKhoaKjo6Kgn56enZybnJubmZaUlJSTk5OTk5SUlJWWl5qam5ubm5qZmZqanJ2dnZ2dnZuampqamZqXf3dvc11aTkhKTkdFRklERU5APD09PDQ1OzQ2NDY1Njc5Ozg5OTg5OTw7PDc6Ozc4ODg1ODg/Qj9BQTw+P0A8PEJAQT49QT4/Pz1CQUA6OkA8PE+doqGfoJ+dn6OkpKSlpqeoqKenp6ampqampqW1tLS0tLS0tbSXtqd1Znh2Y2xjY2VjW1JTU1JNXqCMeFhodpajnp6hoaOjo6OjpKSlpqalpKSioaGko6OjoqOlpqWmpqenpp+bmpuioJmWlpWam5mXl5iYmpqYmJqampqbm5qZmZmenZ2goqOjo6KkpKWinqGhoaKjpaampaSjoaCgn5+hoZ+goJ2amJeZmpygpKOjpKWmp6alpaOjpKSkpKWnp6ampqampaWmpKOjo6SjoqKjpKGfoKGhoKGgoaCfn56dnZyamJeVk5KSkpKSkpOTkpOUlZaZmpqbm5qampqbnZ6enp2cnJybm5qamZmZlH10bHReWk9IRUdGQkVORT9GOzo+Pzs0Njo2OTM2NDY4ODo4OTc4ODo8Ozw5Ozs6OjY3ODk5Pj9APjw9QD5AOjlAQT89QT8/QUE+QUE/Ojk9PjpQnaCfnZucnJufoqOlpaWlp6iop6ampqanpqantLS0tLOysrGwsK2rkHiGj36bmn93Yl1TUlFRTGKgootaiKCgn52YmZycnZ2eoaGgpKenpqWkoqGjp6alpaKipaampaanpqagm5mboaCXk5OSl5qcmpeXl5iampmampqam5qYmJmaoKCgoKGfoaKipKamop6gn5+goaOko6Khn56enpyanZuZmpqZmJeZnqChoaKioqKkpaWmpKSkpKKioqKkpaWlpaWlpaalpaOko6KioqGgoKGgnp+fn5+fnp+foJ+cm5qZl5WUlJSTkZCRkpKSkpKSk5SVl5iZmpmZmpqam5+fnp2cnJycmpmZmpiXl5F8cmdxXl1QRj9BRD9KT0JCRjhDRT4+OTg7Nzc0ODQ1OTo6Ozk3OTo8Ozo8PT48PDo2NzY5OD4/QT47Pz49PDg6PkFAQUI/P0FCQERBPjo4PkE8U5ycm5uampycnaGio6KjoqSmp6alpaampqSjo7KysK2rp6amp6alpqiln6iop6qnoXmEXFFST0xcnKCAYpmgnp2clZOVlpeZmp2dnqGmpqampKOioqanp6ajpaampaWmp6amop2cnqGfl5GRkJSXm52YlpaWmJuZmpqampqZl5iam6Ghn56fnpybnJ6goJ6dn56fn6Cio6SjoqCfnp2ZlpeXl5iYmZubnqKioqKioqGio6WlpKOio6SioaGhoqOkpKSko6SkpKSioqKhoqGgn5+gnp2enp2dnZ2dnp6em5mYl5WTk5SUk5KQj5GSkZKSkZKTlJaXl5iYmZqampyenZ2dnJubmpiYmpmXlZaNempmamBiTkY+P0A9SkVAQ0A7QEE8Ozs5Ojc2NTg0Njc4OT04ODs6Oz87Ojs8Ojk6Nzc2ODs7Oz08Ojo8PTw3Oz5DQkRDPz1BQ0BEQT88OkBCO1eZmJqamZmam5ucnp2foqKhoqSlpKSlpqSioJ6op6alpqWlpaemp6ampqakpaanqKehqXJOUU1KVJahenKanJyenJeVlJWWmJiXl5qeoqKhoqOkpKOjpaalpaanpqSlpqalpaOgoKGhn5mSkI+WmpmenJaXl5eZm5ycnJqamZeZm5uen52cnZyZmZqcnZydnp6fn5+hoaCgoaKgn56bl5WVlZeanZ6fn6GhoqKio6OhoaCgoJ2cnaGioqOkpKOioaSlpKOko6SjoqKioqKhoKGfn52cnZ2cnJ2dnJ2enpqXlpaVlJOTkpKSkpCRkpKSkpGSlJWWl5iYmJiam5ycnJycnJ2cm5mYmZiWlJWXi3hsY2RiZFFHQT1DO0tIRDo7Ozw+OTo6OTo3Mzc5NTo4ODg8OTg7OT09Ozo7Ojk8PDc2NDc/PDo9Ozw/Pjw7ODxBQ0FDQkI+P0JAQkFAOj9APztZmZiampqam5ubm5ydoKGhoaGhoqKioqKhn5+dpKWmpqenpaWmp6ampqWkpKalpKSkpaaGUFJQT0+PmHB6mpubnJ6cnJycm5ubmZiYm56dnp6foKOkoqGhoqKio6SkpaalpKOjoaGhnpyalZOUmJuam56amJiYmJqcnpyam5iWmZybnJycnJydmpqbnJ2dnp6dnp6fn52cnJyhoaCblpWVlZacoKGgn5+hoKKjoqOhnZuZlpaWlpicnqCip6ikoaCgoqOjoqKioKCgoJ+fn5+gnp2cm5ucnZydnJmanJuWk5KSkpKUk5KSkpKSkpOSkpKRkpSVlpeYmJiYmZqcm5qbm5ucnJqZmJiXlZWWl4d3ZGdoZGJNQ0U8RDlJSkU5Ojs9PTo6ODg6NjQ3OTU8OTY4OTc5PDs7PDo6PDs6PDw4Nzg3Pj07Pj46Qj86Ojo/QURCQ0FBQD9EQUFAPjpAPj06W5qYmZqbmpubm5uen6CgoaKioKCgn5+enp2dnKWkpaanpqWlpqakoqKio6Oko6Kjo6KnllRYVVJOZ21rgZ6am5udn6Cgn56enp6dnJ2dnJ6enp+goaCfn6CgoKGio6Ojo6OjoqGgnpuZmZiZmZmamZienpiYmZmam5qWlZeWlZicnJ2cm52dnpybnJ2cnZ6bmJqeoaGdm5udoKKhmpWVlpaZoKKgnZueoKGjop+em5eXlJKSlJeYmZ2goqenpaGgn56goaGioaCfnp2cnJubnJubmpqZmpydnJmXmZaVk5GQkJCPkZKSkpKSkZKTk5OTk5OTlJWWlpeXl5manJubnJucnJqamZeXlpaVlZSEcmZsYmRbREJMPT84RktCPEA+Pj05Ozk6PTg1ODg2Ozg1Njo4PDw7Ozw8Ozk8Oj09OTU4Nzw5PD88OkE/Ojo6QEBDQkRBQ0A/Q0FAPj08QD09Ol+al5mamJeYmpycn5+foaGhoJ+fn56foKCenZ2lpKSko6OioqOjoZ+foaGipKOio6SiradXXl1UV19ua42dmpqbnJ6dm5ucnZ+enZycnJydnZ+goKChoaGgoKGgoKGioaGioZ+enJqampqbnJqZmpuZnJ6ZlpaWl5eTjo6QlJabnJuam5udn52cnJycnJ6dlpSZnJ+in5ycnZ+hoJuXl5mZmpycnJubnZ6fnZqXlpaWlJOTlJiampqfoKGmpqWgn56fnqChoaCenJubnJybm5ybm5qZmJmZmZmXl5iVlJKQkJCQj5CSkpKSkZGTk5aYl5STkpSVlJWWlZaZmZmam52cnJyampmXlpaWlpaQgG9vZV5gV0BKSDg/N0lFP0VBPD07Ojo7Ozs3NTs4Njs3NDY6Oj47Oj0+Pj07Ozs+Ozo4Ojk5NkBBPTo8PTo7OT9BQ0JERUM+P0FBPz8+Pj89PDtgl5WXl5aVl5mbnqGhoKGioqCenp6enqCgn52bpaWjpKSioKCfoJ+dnZ+hoqOjo6OkobCjXWVkYGFua4GenJubm5ubmZianJ2enJubm5ycnJ6ipKGeoKGhoqKhoKCgoaGgn5+enJqZmpubm5ybmp2dm5manJiXlZWWkY6Nj5KYnZycm5ycnqCdnJucnJyempWVm56foZ+dnJyenp2cmpqampqampqbm5qXl5aTkpWVlpWTlZaam5qanZ6foqWjnp6fn5+en5+enZ6fnZycm5qcmpqbmpiZmJiYmJiYlZSTkZCRkJCQkZKTk5CRk5SYmZiVk5SVlZWWlZaXmZmXmZqenpyamJiXl5aWl5eYjX1ubV9lVlRFSzw3PjdSRUM+QkE4Ozw7OTg6ODY7Nzc6Njc5Oj0+Ojw8PT49PD06Pz06ODw9OTtAPj4/PT45OTs/QkNAQ0VDPT9DQj5AQD5APTw8YZWSlJWWlpeanJ6goKCgoaCgnp6enp6gn56em6WlpKOioJ+fnp2dm5mbnJydnp+gn56rmGNpbW5pZm2enZybm5ybmpmZmZqam5ucm5uam5ygo6SgnZ6en6CgoKCgn6ChoKCfnpuamZqam5ubm5ufnpyZmJqamJiYmJKOj5OXnJ2bnJ2cnJycnZycnp6dnpqVl5ygoaGfnp2eoJ+cnJuampqbmpqYmpmVk5OTkpOWl5eVlJiYmZucnJydoJ+gnp6enp+fn56en6KjpKKgnp6cm5qampuZmJmZmJeXlpWUlJORkZCQkZKTk5OSkpOUmJmYlpWUlZaWlpaWl5iYmJiXmZqamZeXl5aXlpeWl4l4dmddX1dURUU5OTs8WT5AOEI/OTs7Pjk4Ozg6Ozc5OjU4OTs9PDk9Oz0+PD0+Oz8/Ozk+PDw+Pz5AQUE9ODc7QkNFP0FFQz1AREJBQEQ7Oz47PGKWk5SUlpWUlpiYmZubnJycnZ2cnJ2en56dnJqkpKSkoJ+enpybm5qZmJiYmZucnZ6cpolla3R4bVuFop2dnJydnJqbmpqampydnZ2bmpuboKKinpucnZybnJ2enp2dnZ2fnpyampucnZycm5ycnp6cm5qanZqam5yVkZOXm52dnJ2fnZycnJycnZ6fnp+cl5idn6GhoJ6cn6CfnJubm5qbmpmZmZmZl5WWlZaYl5eXlpaYmZuenp2dn6GhoJ+fnp6fn5+dn5+hoqKhoZ+fn5yZm5qcnZuampmXlpaYl5eXlpWTkpGTlJSTlJSUlJaZmJaVlZeZmJeYl5eXl5eYl5iXl5eXlpaYl5eVl5eDeHZfW11eUT1GOjk4P1VDQTtDQzo8Pj86Ojk3Ozg4ODc0ODk8Ozw4Ozs8PTo9Pjo/QT06PTw+PkBAPUBBPjk2PERDRUBBRUU9PkVERD9COzo8OTpkl5SVlZaUlJSUlJWXmJiamZqcnJydnp6dnZybo6Oko6CenJuamZqZmJiYmZiam5ubm6WJa3F2em9lmp+enp2dnJybnZ6dnJ2enp2dnJydm5ygoJuampubmpudnJqampucnJuZmZycnJ2dnZ2dnZ2dnpybmp+fm5ydm5mZmZudnZ2dn52dn5+dnJydn5+fn5uanZ+goJ+dnJ6gnpubm5ubm5yampuamZudnJqZmJeYmJiYmp2foKCgoJ+hoaGgoJ+en5+fnp6foaKhoJ+enp+enJqam5ubmpqZlpaXmZmYmJiWlJOUlJWVk5OVlZSVlpWVlZSYmZuamZaWl5WWmJiWl5OUlJGRk4yRkJOWfXhqYWJiXFA8QDw2OENWSERCOjg7Oj47Nzc5Nj06OTk2NDc6Ozw9OTo6Oz87PT08QD47Oz46PT89PkBBP0A8NztBQ0U/P0REPj9EREM+Qj07PDs6Z5aTk5OTk5OTlJSVlpeWl5aWl5mbm5ybm5uamaOjoqCfnpuamJeYl5eXmJmYmZybm5qkgGpqb3lzcZegnp2dnJydnp6enp+enp2cnJydnp2bnJuampqam5ubmZiYmpqamZmZmJqdm5ydnZ2dnJ2cnZ2cm5qdn5ucnJubnJubnZ2dnJydnp2enZydnZ2cnJ2dm5uenp6dnZybnpubnJycnJydnJubmpmbmpmYmZmYmpmZmpyfn5+jpaKfoaKioaGfnqCgn5+fnqCioaGhn5+fn52ZmpudnZqZmJWWl5aVlZaTkpOUk5STkJCSk5GUkY+OkJGOlZabmJWYlJmXlJiRjJCPk5yTkoyFjIeDhndxZ2pkW1xRQT44NkJHYEJFR0A+Ozw7Ojg4NjU8ODo4MzQ6Njk9PTk5Ojw9Ozw6PD48Oj5AOj5APjw/QD8+PDg6Q0FEPz5CRD8+Q0VCPUJAPDw8OmeYk5KSk5OSk5SVlJWXl5aWlZaXmZmZmpqampqkoqCfn52bmpmYmJiXl5iZmJmcnZ2cqH1nZXN7enOJop+enp2dnp6enZ2enZ6enp2dnZ6cm5ybmpubm5ucm5iYmJmZmJiZmZmbnZycnZ6enp6enp6dnZybm52bnJybnJ2dnZ2dnJ2dnp+fn52cnZ2dm5qbnJmZnJ2dnZ2dm5uanJ2dnJycnp2dnZybmZeVlZeXmJqam5ubnZ6foqOhoKGhnJucm5ubnZqcmZycn6CfnZiZmZmUkpKUl5SPj4+OkYyNiYuQi4mLjpGRj4mQmJiQkoyNi5KQj5iYoqiqpqWlrKOmoZqep6eyqKKVo6Cfl39wcWlsXFtcTUY8NzdHR1g+SE5URjk+Ojg5ODc1PTk4NzMzOTY6Pjw6Nzo8Ozo6Ojo8PDs/PjtAQD47PT5BPDw2N0A+QkA+QUY+PEFEQT1DQj49PDlmmJSTk5OTkpOUlZOVl5iYmJaXl5iZmZqampqaoqGfnp2cm5mYmJiYmJiYmZmZm5ybnKx/am16f3lxh6Genp2cnZ6enp6enp6dnp2dnZ6enJubnJubm5ubm5uZmJiYmJiYmJmZnJ2dnJyenp6enp+fnp6dnp6dnJydnJ2dnZ6fnZ2fn56goJ+enZ2dnZybnJ2em5qbm52enZ6dm5ubnJ2cnp2cnZqYl5SRjo+QkJGVmJSWlJiZmpudmJuYlY2Mjo6TkpKRj4mQjpGRjo+Ki42NjYiIi4+Lg42NkY+MkI2Qk5WVnJihoJySn6SipKmam5eanKOprb3Bwbq8uL26ucC8ubq3uru7tL2zwbV/bnVmZ1peWUxJRTo7TElTPFZSSUM6QTo7Ozc3NTo6OjgyNTY4Oz08OTk7Ozw6Nzo4Ojw6PT85PD8+PDw9QTs5NTg8O0A/QT9EPTxBQkA8REM9PT06YZOTkZCUlJOTk5OTlJeYlpeZmJmYmZqbmpqamp+gnp+fnJqZmpqampmYl5iZmZmZmZmphXB1e4B3b4mhnp6enp6fn56en56fn56dnp6fnp2dnJ2cm5ubm5ubmpiYmJiZmZiam52cnJ2dnp2dnp6goJ+enZ6hoJ6dnp2enZ6fn56en6CenZ6enJydnZ2cm5qYnJuVmJqamJiYmJmSjJCXlKCXk4+MjYqKiImMiJORh5CPjYqKkJCLjoqMi4+IiImJjpGOjYaFiYaKhoWLiI+SkJCNkJKXlpKamJ2TlJ6kpqaqq7Gsr6+rpquqsbm5tbS0rqyvtMDIxcXBvsbDxMTDurW+t7a0s7C2tb6qcHRyXGZfXV1JRj8/RUtMVklcTEQ/PUI6Qzk5Nzc7OTk3MTc5ODo+ODg6PDw7OTc6Ojs9Oj4/OT5BPDs+PD46OTY5PDpBPkNBQT08QkBAPkJEPj8+OVyHhIOHi42KiYaFgYqMkZOVmJiHlZaWkpiampmenZ+gn52ampubm5ycm5iWmJmXl5ibqo56dXZ7f3mCoJ+fnp+goKCfn5+foKCfnp2dnp+enp2dnJqbm5ubm5uYmJiXl5iZm5ucnJydnp6enpybm52dnZycoaGfnZ6dnZ2dnp2dnJiWlpaYlZWSlpmWk5GKjI+PjI+NkIuLj4+WiYiEi5GZjn2Fi46PjYyHioyQm4yRj4+Lio6TjIyNjIiSi4yFiYyPhouIh42KhYyEj4qXkJOYmpWbnKOqoaKknKKrsbe0ubWxs62vsrKlp7O6sbq6vLa3tsDDw729vLa/urq8wbW4wL60r66mqa+3mm58Z1tjWl1fSEU+QUtJU1hZXkFGOTk9OUY/Pzo3Ozs7NjM6Nzo5Pjg6Ojw9OTk4Ozk7PDo+PTtAQDs8QjxAOjg0Njw7Qj9BQj4+O0NEREBDQz0+PjlhmZWLkYWNj5aSiHl9e3+Fi4OKgoqJhmuAeJCLlpqRnZ2UlJGTlpeampiWk42Sk5KQm5uIdndzcX1/cpGgnZubm5yenZ2eoKGgm5uWlpucmpybnJuYmZqYmJmampqWi5CTlpmYlZiYlpucl5WSkY2SkZCUk5KXm5mYm5ePjpCLjo2Ch4uLi4qLiI2RjIeHhoqIiZGKh4yEhYqNi4qNhI+UkIyDkJOUmZWPi5STkZWRlpWOj5GMlI2Oj4qIj4ePhoeJiYmNiomJioWNh46JmJKUmpuXmKChp6Cko5qqqbO2sbWwqKmiqK6tn6qvsK21ubi8wr/BxLixtbCutrOwuL68ury+urOzp7G3wpB1gGNiXlpXUk1IRkVQSVlXX1tDUDpCQz1HRj84Nzo6NzU1OTc8OTw5ODo9Pjo6Nzs7Pjs7PTs9P0E7Pz48Pzo4NTM3OkFBQEI+PjpDREM/QUM7PT45Z6mloqKZn6CippeUiI2CiIJ1h4iKiIp7e3Z7enmPeoiSfn18en6CkYWBgH1zfH99fISHfnRweHZzfHaBj4iIiYeIioyMkZicl4iOhIuNi4iNkI+Pi5GPi4yPj5CQjouFhYeLjIyHiIuOi4eMhYaBjYuGiop/iYqGiJiRiIOIg4KFfIuLjIaJi4iKkIyIi42PjI+Wh4mLio6NjY2Wk5OdnJyalpycm56bmpuYnZeTkZWWkJKRi4+LlpSMjYqDi4SEiYyQkIqOio2LipGJjZOTk5SVk5KcmZ6Xn6CfpaKvsamupKSfmKStpqa4t6ysu729wsPAv7+vpa2wsLS3uLO0uLa0ta6stK+4tLaBeXpjZmBeVlBRQUVMT0lcXl9UR0dCS0xCREA9ODg7OTU3Nzk3Ozc9PDk9Pj05Ozg6O0A8Oj06PkJBOD88Oj84NjQyOTtCQD9CPj04QUI/PkBEO0A+N2CloJqXnaGaoaCPl5efl5WCjaCfo6GdmpKOjIxycXBvdnFucG1ucHZub29waHBxcHR+c3FycXd7cnl2d3Jyd3Z6e3l8fXt/iIGEi3+PkYaNi4uGiouLiYaEgYaCgIKJkYOAg4x/ho+LiYWAh32AgZKQhoSEho2DhIyPj4+IjY+Hi4iRkJWRjpCKk5eOj5WYp6SfnZWYlpaln5udq6aqt7W4srGnr6qnpqGfmp2WkpWVkYqPjImTjZuVjYuLhoaJjJWQkJCLmZKVlZSbkJiTlIyNkYyWl5WilZ6mqauno6OqsJucpp+mq6G0vb6zs7+5u7u6uby9rqiusa6wuLyztLGxqrCpqLGxsqild3J0X2hhYFRWUUlKSFZNXl5eVExKRVFKRUdDPTo5OTc0ODY4Mzg4PTo9PD47OTs4Ojs/PDw+OT9DPzg7Ojg8Nzc2Mzc5RT4/Qz89N0BAQT0/RDw+PThUj4yGh4eUjJWZl5yWmZaNlZyWlZydoKCdmpiWeHFubXJ4cXFsbnJwa3FvcG1yc3t1dnd5fnVxeHZ0d3tybn98gX15eH1/eYOGg4WCg5CLkIuLi46Pi4mJhYKBfX9zfYiAfpyQhIWFiYuPinp9fYaOjYqGjZSRi5CXj5SXkpihlp6XlZunpp+goKawq6GjpbW0sqqmqq+isba5vcK7ucO+vLi9uLWxrLCspZuSk5mfm5SPk5WOmp2doJqfn5edo6qsoZ+em62hp6qwqaampJiRkZWUo6SirKSss7Szs6i3tru4sLKvra2yt7a6srW6s7e5u7i8urayr6yxsbKztLOxsa2us7Gzs6yhl3Zxc19jXlJRVE1PSUdYT1pcZFROR1VPRURKRD44Ojg3NTg4ODU5Nzo6PTw/Ojg8ODk5PTs9PTpCPj84Ozo5Ojk4NjI1N0I+P0RAQDY+P0I/PEM8PT46Tn98go6MjJOTl5eaj5SWjZaRkZSXk5qanqGdnHJvcnFxcXFxcG5zcW91dHJxdneAdXd8eYV+d3t8eX1/fICJiYmDfXp/h4GIiYGAgIGGiIGGi4eIhYSIiImEgIJ/enx8fX6SkH+IeIGFi4qDhIWKj4yNkZmdlJSUoJqan6Ktsa2ppKWtr6ysrLWuvrmtrqm1sLexq7G2rK+9wsLAvrq8trKutraxtK66u7OurKepp6unoqmtoKmooq+wuLSxvLq6urK0ta+8tLezt7e7t7mtrbCprLW5sbeytLe2sLu7vLu6ury1vLi0wbWsqqqrtLG3uLm1trSzsKymrrCqq7Cxq6yusLKxtK6qo5N4dnJlZ1tMUlBGTUhTV1JlXmdUUExcUUhMUkNBOTk3OTU4ODY2Ozc5Ojw6Pjk4Ozo6Ojw8Pj08RD45Njs7ODg+OTUxNTdCRkREP0A3Pj5DPjpBP0BAO0t/gomXmJSdlpabmIuSlo6XkZGVl5SZl5+bmZx8dHV2dXl1c3RudnJzdHV2d319gX56gXyDfoJ/fYB/hIKFj52RiYF/go+Xjo6HgoCBiIuFfoqQjH+HjYyLi4eSioeGjZGTkZGEh319g4iMjouOiomQj46PlJSYkZWbmp2dqK6yr6+1tLOtsrW4sLy1tbGqsKqztbS7t7SztrS1r7i4t62noqassLCvtre3vrW5vLOysa61u7C0r6+yu7axuMC9tLS0s7izvLq2tLrAvbm6ubq+ubm5vrWysa+yr6q1tLGzsbSzrri4tb+vpKaoo6ussa+zrq6wsKytq6qroqKmqKKnrauqpaynoqeYeHlxZmVZT09NSVJNV0xPX15cTlVUYlFEVE07Pzk8ODk1Nzc1Nzk1Ojo6OTs4Ojw8Oj08Pj4/P0I9ODY6Ojk6QDs1MjU2QUZDQz4/Nz49Q0I5P0I/PjtLjpGTmJmVmZGTopiTkpKLk4uOkI+Vl5ablZSbhoJ9enh2dHRzdH53end2gIKDhouMhISFioaQiYeRk5aRjZaalY+IjI+emJaVkpCTl5qamJCdoJ2Tl5qgmZ2bo6CVkJugpKOak42IiIuJkZGOko6LmJqPj4yUmpecnJufnKSstLm6vK+2tLi0tLK3uLmzq6+qqKy1srK1rrGrrqa3s7OxpaGotbCvrayrtbqyu7q6tLK3ur67ubG4sLmtqLK4u66ttLS3tbu2trm5vLe0r7G0t7a5s7e1pq2pq6ior6yprq2up6KxtLG0q6aop6Cjq66oqq6orLKwr6+pqKGeoaGjpqOgopqlo56ol3J3bmdiVUtUT09KQ1BLX2JYWlFcU19NSFFJQUA5Ojg2Njc3NTg5NDs5Ozk8Nzs+Ojg8PD0/QkBBPTs2OTk5Oj87NjM3OD5GQkJAQjk+PUBDPkBGQj44R5OWkZWTkpSQkZ+ZnZmVkI+Sko6Mk5aWko6RlZGSkIaBeXJzdXuBhI6HhZGTkpicnJiVkJWYo5yaoaeqqZ+clpeVnaKioZyZnpmlqKyvramnqqmop6GlqKirqamvoZufoaOjoJqfoJyUjZiUmKCgoaSem5qkp6Spq66spaOoq6+xtK6qrK6zr6ystLO0ua6urayqrLKwsK2wqKqmsrS0uK6qtrqwr6qurLC3s7i0t7W0u7y4tbWxtauyrKiys7uvrbGytLa1sbG0s7OvrKuvs7a0sayutKqqpqWnrauoqKupqqifqbOwqqeppaOio7CtqaatpairrayppaSioKWipaOYmZyVnqKippdudWVnZFZPWEtLSktTVHBiWWRXX1tcUlpQTEM8ODk6Njk4NzQ3NzQ4Ojw6PDg6PTk3PDw7PkM/QT47OTo5Ojs+PTg0NThBREVEQkM5PjtAPkI/R0Q+N0KSm5SVlZaVj46Wl5qZlZGKk5SSjo+SkYqKiY2Ul5qTjYmCho6VkZSfmpuin5+jnqGhn5ijpKelpaapqa2rqaKmpKilpKGfnqOjra2srairrq6qqqukoaKlqaenqaijopybm6SgpaijoJidmZ+hoqmnoKKirqyrqqetrqilpKmpqammo6iqqaekp66wr7Ovq7Crqq+yr7Czua+rqLCxrrCyubO0r62vtbCss7GurLW1tLSzs7CvrKyqrKusr7G0s7CwrrCwsKyqrauqq6alrrCysKumqbCvqaOkqaunqKaopquwq6mvqaaoqaalo6iwraqpqKKpo6WnpKGhoKKloZ2el5aYlJugpKmUbnNeamlfVVpOUk5QT1JkXGRjW11ZXFBZT0tAPDs5Ojc6ODczNTMzODo9OTo4OTo5Oj08PEBEPkA9OTo8PDw+Oz45NTo8QkFFQUNBOT47P0BEQENCQDdAkZ6YlJeZlpGHi5SSl5GIg4mLk4+OkI2Hh4SFlZmWmJeZlpqeop2anKKkoaCdn5qfoKGgpqGgoKCjo6KlqKmrramqpqOmpaCloKaopqWnqKapqKOnppmcpKWioaChoaCcmJmfoKGkpKKenpagm5qioqChn6CiqKCcn6GloaCmo6KfpKGspp6foaGkrKqnrKivq6e0sa6ur7WyrKqwq6mtrbWwrq6srreup6yqpKivsq+sq7Kvqqqpq6utqa6urrGxraqtqaunp6uoqauinaapqKilqKisqKilpKWop6iopqmsr6+oq6mhoqKlo6Opq6ymqKWjqKKhoKSdnZ+hoZ2bnZ+amZWcnKOqlG9zZm5yZF1dUFVPV09eZGRsZ2JiWlpSVE9NQTo9Ojo4Ozk1MTYzMjg4Ozk5OTk7OTk8Oz0/Qz5APTk7Ojs8QD0+PDk5PEFBRUFGQTo9Oz9BQUJBRUI4PYqWlJOYmpaPiISNjpGSjIiIiI+JiZCRjoqKiJubmZygpaKlnqKjoZqeoZyanZ6bnKOop6ugoKOYoJ2XnKGjo6WjoqKkrKilqaCepqmnq6mkn6Kgoqahpq2mpp2fn5+fn5manJyhoKGkn6GbnZqcoJ6hn56eoKOZlpqYo6KipJ+ZnKGhoqCbmp6goaSgnaejqrGorqusqaSqqquorKalrKqws6+rq6mwq6appaWoq6ynpqevq6Wnq6upq6irqqqrrailqKOmpaesqayoopykoaOmo6qpqKano6SnqKanqKepqKupoaKoo5yepqWjqKino6WlpqmgpJ6inpeYnZ+doqKlnpiUlZ6go5d1d2t2d2FfXFVZUVVWW2Necl9oX2NTUVlUSD48PTg7OTo4NTM3MzM0Nzo4OT05Ozo5PDxBQEM9PT44Ozw9PEA/Qz86ODo+P0NAREE6Oz48QD9DQ0VDOTyCmJmenZ2alZKKiZGRl5GQh4SJgoGNj4+Sj42cnZ+hpKmlqaeorK2moqKfmKSmo6Stsa6yp6asm56em5qjp6Cfo5+foq+rqqyoqKuwqaipqKGfoKeprbCyr6yjoqahqaWepKOipqClpKKlo56doJ6fpaKinp+imJWemp6fpKGblZigoZ2enJudnZuZmZWen6Oonp2iqKGaoaOmoqSoqaqoq7CxqKWlp6eopKWpqaqnoqWmqKadnqWloqClpaOlpqCjpaOjpaelqamqpKekpqKmp6SrqaenpKGlqKynpqWlo6OopJWdo5+bnaCjqaeopqGjo6mooKiioJyVkZqfoKGmopuXkpCamqCVfHdvfXlmW1tfXlpcVlxoZG9jbmloYl5QUEA/Ozo4OTg8OzYyNDMzMzc5OTs8OTs7OT49QkBAPTs9ODw9QD08PENBPjo4PT9EP0M+Ojk/PEI/P0FEQjk6gJ6kp6Kem5+gmY+ZnaCWloqGj4iEi4qTl5SRo6Wnqq6trLOys7S4t62pqqevtLKxqq6usbKusa2lq7OssbGpq6+rq6y2sLSwq7GysaOfoqqpp663trS0trOvrKuuq7awqbKxra6npp6io6ObnZyXoqiloZ+eo5ueoZqWnaScm5aZoqefoJ+joJuUlpmWl5qfoJmVnqKZmJ2dpZ2gpKeqqaiqraulqaSlqqeqqaqsp6SkpKOimZmhnpqaoaCfpaWYnqSmpKqooqelpaGqp6mnp6ejqKWmpaGkqKesoqekoaalpaOVl52Ym5mVo6elpaSfnZ2lo6Kqo5+amZiXnJyaoaGakJOTl5ibjX93cnZ4aWJbX15cYllgZG5ta25hX2RgUE9BQDs7OTs4Ojk2MTQzNjQ3Nzc6PTo8Ozk9PUI/Pj89PDo/OTs7PD5CRUA9OTtAQT5DPDs5PzlAQEBAQkM7OXuao6OcoJ2dop2Zn6KioJibmJaYkpSQm5qWl7S0rrW4s7S4tre0uLm3tbm4ub28uKqLnLK4vLS9urW7uru4s7q/uLe5u7G3r6iusq2inJ+qsri8vL27ur+0r7GztbS3t6+1tLWysKikop+gl5Wal6SqpqahpKOkq6WlmKGko52goaKooaOgpaGck5mYmJmco56cmpudl5uZlqWam5+hqKmpqKuvr66pqKmrrKytq6irp6WjoJyfo6Ojn6Cipammmpyip6Spn6GjoqKgpaanpqSooJ+ipKGjoqiop6OloKGopqalo5mbmJuTj6GknqKfmJiVoJuhpaCfm5udnJuamZugmo2YmZiTkYaAdnh5eGNbUllUX19hbGh1a3BnaWliWVNMQDw6Ozg5Nzk3NTU2Mjg1Njc4Ojw7Ozs7QD4/QD0+Pjk6PDk2Nz47QkZCPDg7P0NDRDw+OT43PkFCP0ZDOzhwkpqblJ6bm52Vl52doqajopaXnpaXl6GblJi+t7G4uba3t7i7l5S2vbu9vcDFtaK7mKC3v7+6wcm0nbu2sra/xcGooLazurGqrrSxsLG0tLa8vL68vL3Guri3ur20r7Wxsbq4t7Kzsqqmpp+YpKSnqKSupKurtbWus6CnqqynqqmlpqCnoKGmoZOWmJ2foqSjnZ6coaChnZekmpmdoKaqqqqtrq2tsLGrrK2sqamrrqimpaalpqSkpqaeo6eppKGcoKKjpqCio5+jpJ2foqWgpJyboZ6fo6GhpaSlqaOkpaKkp6ehn52elpOcoJiZko+MjJeWn5uWnJqdnJqTlpSUmJOQmp2YiouHgIB8gnhhXllUYWhgZnNvc2l0Y2lkYltMSz46ODg5ODg5NzM0NTI1NDY2OTw8Oz08P0E/QEA9Pj44OTs4Njc/OUJFQzw7PD5DREM9QDs9Nz1DQ0BFQjw3Z4yRk4qalZiblZWYm6Knq6aVl5iQlZmhnpeXvrWztLu6ubi5woeYt6u4u8DCxbOjw6e4s72/tMTHvbS7uL62wMTErqCworW2tb2+wcPGw8O5vb/AwL2/xL28ur2+tKeqmLHAvbi1ucCzr6+qqqitp6ekr6eqtLyxtLWor7Gwr6yqoqajrJ+fpquXmqifpaWfoJydoKuwsKyiq5yYm6Cor7Kys6uorre1sq2tqaalqKulpaStqaShn6Cnnp6mqKmmnp+anqGlpqmcnaObl6KmmpuanZ+cmqGcmZ2eoKijn6GfnaWioKOioZSZmpmTj4qLhI2Qk5uPjpiVm5eYkJORkomNl5iYk4uKi32AgIVwYGFeXmpiYm53dXZubVtiUVVcTUc7PDk3OTc5Ojc0NDQxNDM3Njg8Ozs8PEBAPUA/Pj8+Ojo5Ojc6Pz5FRUU8PT1AQkJCQUI7PDhAQ0NARD87NV+MjIaFlouUlZeYl5ifpqellpWWkZebn5ual7mxtrO5vLy5urWqsryxvsG0vMe5uLuuv6fGw7/KxsnIxcXJvMLHx7+xsae8vL7FxMbJx8XGu8TAxcbAua+9vMC+vrOrqoyzu760tbfCuq2vsLWqq6aqo62kp7G2q7WyrbOtqK6vp6awr7Ktqq+zpKu1qaeopKCgnqmyuL61tbWqqaausre4t7apq7i8ubexr66noqOop6SfqKOfnqCZoZydoqSnp6GelJuaoKGlnqChnpajnZSQlpiboZqflpORlpSin5qenJudoZ6kn56VnJiPkpOPjImTkJefiZCWkZuUmJGRlZaDjJWXlpKLjIh8f4N/amZoYWtsZm51cXJ1cWZeX1xSSUU/Ojo6Nzg0ODw3NjU0MjMzNjU3PDo7PDs9QD4/QD48PTk5OTs6PDs+QkRFPj49QENDQ0REOzo4QUJCQUNAOTJbk4iEjZGKi5GRlZCSmp2fnJOSmJSdnZqXmpW2sbm1tb6+tri1uLO8vMTEusPHwb+1s8XFxr/CzcfLzsvLx8HDxsfIysXExcO7vLzBxcHFxb/DwsbFwLGTvrq/w8K2trqptLO0qauzu7uxn5uxr6ykrK60p6qpqKqtrKmlpZ6pr6uyu7q4u7e5t7O5uLOurLO0qrC1ub3Bur6+vL60urm4u7qysbS8u7q7s7Oyp6Smq6uioaCdmpudmpyXmpuenJygnZaclpuZnZ6io52UnJCNiY6OkZ6bnJWNh5KLmJiWmpybmJybnp6cmp6UjpiYmpORmZeeoZWYmpKYlJWRlJqYk4+TnZaSi5F+enx/dGtrbmRvbGhxeG95aWlhXGdhUUZEQTw5OTc2NDQ6ODQ2NTMzMjY1Nj05OTs7PT47Pj49Oz05OTs7Oz89QUNBQkJAPUBDQ0NFQjs4OUQ/P0BCPzsyV5uQkZCQh4WSjo2IjZCTlZGPjZSUm5STlpqRs7e4uLi+u7C1sri2tbbAw8G+w8LAvru+u7u8xMzEzNDLxsbAxcfLyNTLysjGv7u7vsS+xcjGxsPEw7i0wLe0vcHCucK3t7/Au66lrre8t62co7ewpq20tayupaWjqKSgoKWZqrOyvsG+urm6uLW0srG0tLO6wL7Av769u7u9vsDCt7a3tru7sru+ubi4u7a3tKyoqamrpqijnpOampyYkZKZl5GRmJqXnpiWk5acm5+elJOJiX6GiIuWlJiZkYmVkZeWlZmbmpaYl5idnpyhmJWZmZuYl5ybn56jnJ6WmJeTl5yZmZyUlp2UlpOJdnl6e3Zua2lndVpmcndzeGZmXWRbUlhJRj87Nzg4NzYxNjk3NTQzMzM2NDY7ODo8Oz08OD0+PDo7PDo9Ozs+PkRBQUNCQEBBQkNDREM9OTlCQD8/QD89MkyWmpaSk4yKmJCKi4yOkpKKiIaNkJiKj5CUl7O7tba/vb2xtrjBvby0uL/Bsbi3vsHFvbu8wsbJv8nOycHEwcfKysbKxczIzcbIxb/DwMvNz8nGw8PEwsS9uL7Bw8DEvsHPz87Gq6+2tLWroKe0s66ruLWzq6mjoq2prKatn6y1tL/Cvrm4vbawrausr7W0ur7Fv7u8urO5u7i5ubWtsLS9u7G/vLiytrmzubu0ra2orKyqqaeXnpualY2MmJSTi5WWlJyZl5WWmZKYn5mQiop+iYqKkY6Vl5OUn5mWkJSZmJmWmJOUm6GeoZiYmp2ZmZaenpibopqdnJuYmpuZlpeXlpyZlJyYfoB4eXV1ZWVpamhdam9teHdiYmBgXVhXRkU4Ojg6OTc5NDQ5NzY2NTEyMzM1Ozo9Pzs9PTo6PTs8Pjo7Pz48QkBDQkJFQj0/Q0NDQ0RFQDk6QkFBQj5CQTVCkJeUlZmSj5qQjpKRjZSVi4qHjI2UiImPkpq2u7S8xsHEwr3BxcLAtLO9v6ywr7rDysPCvs3IxbfByMW/wcLIy8rCwsTJzM3Pz8zDx8bIyMjHycfFycfIx7/Fx8TEx8jK0s/SzLy4trS4uMG+vrq9ury6vKytpqm7urm3wLK1uLLAxrq3t8Gzsa2tqau1s7u2w7a2vbWxt762s7e4sLW2v7uwvbq0q7CxsbO8urOzrqutq62xnaOjoJqQjpiXlZCclpaYlpWSnJmTm5+clpGUjpWQiYyQlZOUm56YmZKSnJedlJmSk5aZmJ2VnJ6do5yVnZ+TnKKcnKCfnaOemJSVl5ebmpmgkH99cXRxb2JhZ3VnaWh0bXhsXWRbVV9ZTEhENjw5OTg4OjUzOjY2NDQxMzUyNTs6PD47Ozw9PDs8PTw7PD89P0I/RUFCQ0M+QEFARUVERUE7Nz5DQkI+Q0I4O4+akZaalJKUjZCUlI6VlI6Pi4yJk4uIkJObt8C6xsXEw8zCwcS9vrWvt7uvr7O6wMfFxMHMy8W2ucDCwsTHytHLwsPExsnFzdDOx8zJwsHGwcvKyMbMyc3FxsXDxsXJzdDNz8zHxMDDwsnNx8XBxMfBu760sbCwwb6/wca/vri3w8K6urbAvrWyrKmvsri+tMC0tLi0t7nEua+8vrm+v8K/tbq2q6qsrq+wt768trSura2utaSlqKimmpycnZyeopydmZOQkp2VmKCdmJiVmZmZl46MlH2QkJefmZmYk5GToI6Nko+VjpCUlaKdnKSem56elpyjoKGipKOkop6amZubnJ2enIN9cnx4cGdgamp2bGlkdG5zYlxiVFdUU01HOjc7OTk3Nzo3NDg3ODQ1MjM0MjU7Ojk+Oj08Pz04Oz05OTk9PEBBQEVCQUJBQT9AP0RFREVAPDo+QkNCQENBOjSAoZeUmZiVkImUk5aTiZGMlJGOiJaKi5CXnMXLw8O8wMPHwbm9vbu4tre3rrK3uLzAwsDCx8bHurzAwsXHyMbSycHDw7+/vsTLyMrLyLy7yMfJzcjDyMnJxcXDwsHCx8fJysfMyMfIzcbLz8W3wMDAwLu7vbWzs7+/ub/DucC3u8G8uri7ub27srCvsKy5wri9ube1t7q9xb24xsjCwcLGwr28tamurrCwr7O6t7m2sK+tr7OppquprqannqSlo6OjoqCblZiekZecl5GRlZeZlZmRlJiSlYyYo5qcnp2FiZ+TfJKWlZKUlJennaCipJ+en56foaGkoqKjoaOinJ2fnqOhppl5enl/cm9mZWdjamRham1ubl5YXFZVTlBKRjk5Ozk3Njc3NjM3ODk1NjEzNTI3PDs8QDs/PDw6ODo8OTk4Pj1APz9GP0JBQz89QT5ARENDQTw5PENBQ0RBQDozbKKdlZedlo+PmJiZmIiSjZGVkI+Vjo6TlpbKy7u5urnBu7q3vsG8vLu5sa61uri4u8S6vsC+vru8wMXBxsK+xsG5u8O6uLm8vsHGwca6ucnJw8XEwMTBwsHEwcO+vsLAwMHCy8PGzMvFyNHCsL69uLq7vL63tLC5vrO8vrG5tbi7tryztbm2uba5t7GtusG6vMG/t77Ev8bDw8fHwrvAwr/Cv7iys7O1tLGut7S3tbSxrK2xp6Wlp7CtqJ+nq6ajqKWmpqCgn5SYmZSRkZWUl5OYl5qhnZ6hnKGdoaWglpSbkZeXmJqTnpmZqaSlpKWdoqCanqCkoqOcoqGjoJ6cnp6ppaiVfXuDeG5mYWRiYWJjY2piZmJaWVlcWFFORT07OTo7Nzc5OTY0OTk6NTMxNDUyNzo7OkA9Pzw8OTc3Ozs6Ojw+QD8+RDxCQURAPz49QkRCQkI+OjlCP0FCPT44NVmfnJiTmZaRlZiYmpeQkZCQk5GTlJKSkpSUxce4tbq5wrm5vMPFwri7ubGxtry6tbnAu7u5tre0tLW/ur3Aub26urS/uLW3s6+7vLfAt77Cv8G7v8C8u8W+u8HEwL6+uLzBwcu+vcnEwMDKwLHBv7u4u765tbe0uLy0vbi1tLCzvLG3tri/tr25vb65t7q+u7/Axb29y8PGw8TAw762ubq2v7i7v7y4trOyq7CwsrWzs66sq6emnqeurauiqKumpqqjp6iqo5+Ym52bmpicnJiXnJuhpZ2anqGhoKGmoJqbnJiboJ+dnJ+coKeho6SknaKfmqKgop+el6Shop+dmpieqKWhi3x5h31xY2BiYmdqZmZpZWldVVVTWU9TS0U4PzY7Ojc3OTs2NTo7PDYzMTM0MTc7OTg/PT47PDs3Njk5ODo8PUA/PkA9PT9CPjxAQUNDQT9DPTo2PEBBQDw9ODdJlJibj5OUkZWYlZGWkpWRkJGUlZSTkpKYlcHCwLq8ub62uL7EwMKxvbqytLO4vLW3vMC8vbS0sbC1t7W6wbi+uL+8vbe1t7CuuLa5v7vAwLfBvLvDtrrIuLa5u725ura7xcXKvbnFwL+8wb64xr3BwLzFuLa3tLi2tru7uLa0t7q1tLi8vbm/ucPAwLu5vLu+vcjEvcfEw7rAvb62sra4srm0usLCureysaysq62yr7Kur6ijpJ6rrKyqpKakpKiqoqemraihoaGmn6Oiop6bnKKfoKOdnJuhn6KgpKCem5eZn6GdnZ6eoaWkoaGioZ6ho5yinqCZnZijn52eoJqZoKKmnYR6g4B4cG1lZGZvaWVrZ1hYTktLSlJJTEhDOT44PTs2Ojs5Njc8ODk4NjA0MzE3OTk7Pz0+Ojw6ODg5PDg6Ozs7PD1BPj09Q0E8P0NDREA/Pzw5Nz5CREE/QDg4P4mYmoyMkI+Tl5WMkpCakpGXmJaUlJKQmpTDvsbBwby8uLi6v7a8scK2tLyxtLa4s7q9v728sq2vrLGwt7y2vLzAxLm3t7e2urm6u8C9w8C6xMK+x7i5uK23tbi6tLezu8XGy8G7xsDAv728v8nDxMW+xri1srK9uLi4vrq6uby7urS3u7q5v7zEwL+5uri/ubvFxr3Fw8Kyur27sa+2uLO3s7q+wLm2rLGrrqmqqa2qqq6mpKWnrq2ppaOio6GkpaWmoqato6Klo5+ho6Gcmpyhn6CloaCenZygnaWgnpeVmZ2fn52gn6KmpaCknpybn6Ofn5mcmZ2epJyWnKOcnqGcppZ+f4Z8a25wZ3Brc2VibF9bVEhLSkRKQkNHPzk7OD08Nzs7OTc4Ozc8PDYyNzUxNjk8PD08QTs8Ojs6OT45Ojs9PUA+RD89PkRAPz9BRkQ/Pz09OTc/QUNCQEI5Ojl3nJiLh4uQkpOWjY+TmpOQnZiSkY6QjpiSvbfHvsO+vbu+vL22uri9ure9s7OwuLi1uby8wLeqraSusLe7s72/u8S3tri2t8C/xLzCxcXHx8rJxs/CwbiutrW8vri7sr7ExMrFwcnDwr+/vr3HzMfHxMe9tbW2wb26u7/Cur/Bv722t729vcHBwL+8ube8wru3v8W7wr++tbe8vK+vt7awtLO6ubq7r6mtq62rrKaqoqeuqKWqra2vp6Sgn6ajnqKjqKOjq6Oiop6dm5ublJaZnJyfpZ6fnpmYnpejoJyXmZqZmqOjop6jo6egpqCbnaCjnp2WoJmcoKCblJegn6WcmKKQgYaBcWVsaW50bndjZ2FbYlBLVEhFRUNHQzw7OTg9Ojc6PTo4OTs3PD01MzY1MDY4OTo8O0A9PDs+PDk+OTk9Pjs/PkM8Pz5APz0/P0ZEQEE/Pjo3P0BDQz9BPTo4ZqGYj4uNlZKVlY6PlpmVl5uVjoyMjY+bk7m2wbS/vLm8w8C+wLq1trKywLmvsry8sLe7tru8q6ujsLm9vrO8vrzFuLK4ub3HycrDx8jGxsnIzM7RzMrEtbrAw8i/v7W/wL/Gxr/LxsO/wbzAw8zKx8XGwbm9vMS/wL/CyL3Hx8XFvLrEv7vBv7rAvLu7wMS9t7nCub69t7S2uLqur7WxsLCytre0t6yurKqsrKuoq6Gms6qlra+trKippaOkp5+io6Onoaeiop6cnZyamYyQlpeZnaKZnpuVkp2UoaCdmZ6fmJimpqKfoqKmoqeloqCko6GbnaCbnKKfl5WVnp6kmpafiYGDgXRvbGx0a2xuX2JeYWFNSE0/RUA/REM7Ozo6Ozo4Ozw6OTw+OTo+NDQ1NTE5OTo5PDtAPD89PTw4PDs6PDs7Pz5DPkI+QD89Pz9FRUJBQj87Nj9CRUQ8QUE6OlmfmJOSlZqVmpOQlpeclZuZlpSVkZKTnZm2uLaxuru6vsG5uca7trWypb69tLbBv62zvbS4wbGwsbS8w7y6ur68xL+3vb+9x8zGx8nGxr/ExMrIzMzNy8bCw8vOwry5vbq5wMO/yMbEwcG/xcDKycPDw8O5w769ub+8wsbCyc7Hxr66xr26v7m3wLm5vsDCvrW0vLi2u7CvsrK1r7Cvrqyus7CzsrirsbKxqrCrq6yrrLatqKyusqarrKmpoaWgpaakrKSmoaChnqGgnaCMlJeTm5+mmZ6emZOYnZ+gnp2eopuYp62ooqSgoKKqpqmhqKGlm6CgnZ2jn5SYmKKdp6Gfm4J7eod6bW13e19wY1tdX15TST5CRUlCQz5DOz42OTo7Ozs7Ozs7PT05PTU2NjIxODo5Ozs6QTs/PDw+Nzs8Ozw9PTw9QD5BQUE+PkFCQUVDQkRAPDY+Q0RFPkJEPztTmZuZmJ6dmqCalpyZn5KdlZ2boJWWlJqYur20sLu8wcTCv8XGura5sqO7vbS3xLuwtbq2ucS4tby2ur3BvLu/tr/Bv7y/usDLwsfIwL+8vL/FwsfLyMHDwMDJysLAu7uwtLu9wMXGxcW/wMK/y8fCwMjAusK7urO6usG+wMrOysS9tby8ub+5ubW1s7/Avre0s7S4rbeqr7CwsrGvq6+nr7ausrG5rra2uLSzsLGttrS6sa6srranrLKsraSjoaenqLKrqqWkp6elpaCml5ujn6SmraKeo6KanaWiop+foaWenrC0sKSlnp+kqaevp6mgq6CiopqipJ2anqGmp6+psZWCe32Cem1zeHNncF1aXlxZUUVEQ01JQUQ9Rzo6NTk7Ojw8Ojs7Oz0/Oj01NDUxMjc4ODs8O0I7Pz46OzY6PTo7Pj0/QD87QUFBPj4/QkBBQkJFPjo1OkFCST9AQkA7TJqdnZ6fnZienZmampySoJWbnp+blZGRlsW+urbDvMbCvr/Ixbe1uLe2ubu0r7e2srWzt7m8u7a7u726w7u3vbe5wLu6uLi1xcHDw7u5s7S6wb2/x8C5wLy+xcS9vrmysK64t7/Dx8PEvb2/v8PDvr/HvLy/tLSutbW8vr/OzcvCt7K4uLi9ubuxtrLIwLu2tLGwt6yzqbCtrbO3r6uuqrG1r7Gvt7O6usC/tre2sru6wLWyrbO3rLC6r7KmoqWqrK+5s7KosK+xr6qiqKGkraitrLOun6inpqWmq6Sknqaqo6ayuLOrpZyfp6anrquqpbClpaWbpKOYn6exrLW4sLKOhHl/fHZsdXpwbWhcX19ZU1BBRUhHS0BEQ0g8PTY7OTk8Ozo6Ozo9Pzw9NTU2MTM2OTg8QT5AOz1AOzs5PD04Oj08QD46Oj49Pj09PkBCQkJBRD03NDU9REc9Q0I/PEWUnqCgoJyYmpiYlZmdmZ2fm52bnJaRj5LDwMK9wrzEvLy7xbu3s7e2tru7s6CWtayvsbS0tLa4ucHAt725uLm2tb+ztLK4sbvBwMO3t62wtbi4uMK6tLu3u77Au7u8rq+us7K5wcLEw768v7u6uLbBwrW/urWur62wvcC5z8rJw7GvtbS0vbq+ubq7ysO7uravsL2xuK+ys7C3vbaur66wt7CsrLK2vbzEwrq9t7bAv8G3tbC2srGzurGxr6err6u2v7e1qbqztbmxp6uop7ausrG1uaisrK+qr7CqqKessayytr20saykqKuoqKusq6i2qaaonqadmKOuvLG7wbSmiYF8gnpzdnZ3bXBgXmVdW1RKPD4/RkY9RkNDOTo1Ozk5Pjw8Ojo8Pj4+Pjg4MzE1Nzg5Pj9BPzs6Pz08Oz09OTs8OTs6Nzs+PT1DQT8/QUJEQkE8ODU4PUNGPUREPzw/iZ2en52Xl5WUk5aZnpubmpuYlJ2Uio6Owb7Dwr6+vrm2usCxtbGzt7fCtbOrrbOoqa61r620trnDv7e6t7a2srTAtrK0uLO6wMHDubeysrK0sre+urO1sry6vLa6vrK0tLSwuL7DxsTAvb+5s6+yvLquu7Szpquorbq+uMvCv76sq7Cvs7q3ub67wMXBu7y3sLXEtb+0uLu0u8PCs7a2sbisqaWrsr23v7+7u7exvL28trGvq6uprbOvsLCrsLSpuMC2sqm0tbC3tq2spqu7s660uMKwsbG1sbK1saywsri4ubi+tLGzrqyxramvrqqyuK6trainoZ6ptr+4ur+wlol9gHxxdHd0dnFsXmJgW11OSEE/PUhDRk1EQDc3NTs6OT48PDk4PT47PT86ODMyNTc2OD8/Qj86OD4+PTw5PDk7Ozo8Ozs6PEA+QkI9QEE/QkI/PDs3OjxBRD5CQz8+QYqgm6GdlJiVlZOYmpyWm5WalY2bj4SIhru0vb+7vLm3s7y8rLOytLS2wLXAr7Kzqqqxt62pubO3wL27vLi2uraxwLq3ubi5u8HBxMO7u7a0tLC2ura0sqy8ubi1uMG6uLOxrLe8wcfDv7m6ta6lrLOwprCtqJ6gn6WttrXCt7a0pairqLC2s7K6tbu7u7W4trC1xLK+vL+8ubrFybq9vraxp6SeoamxrrW5trKxq7S3trGopp6gmaWmpKynq6y2qa+6sa2kpq2lq7GrrKmtuLawsrjBtrGxtbGvu7ayt7W1sry1urKwsbKutLKqrq2nuLWyta2uqqiosrq9wLa0qY6Ce393b3xvdXJtY1xmWFxdUk5NQT5KQkBKSUA2NjU7Nzg+Ojs4Nz4+PDs/OjkzMjc1NzU8PD48PDg+Pjw8OTk5Ozs7Pjs7OTw+P0E9PEJAPz9CQD47NjY6QERBQ0E/QUKJoJ2loJSWmJiVnqCcl5uYmZGMmYmDhoS1r7S7u7S1sLG2uq6wtLOvtbq1urC1s7GttrqurLyyuLm3u7+9ub7AtL+7vLq4vsK8wsrHvsC4ubaytLaztK+su7q4trnAw7aurqqytry9ubaysa2tn6Snp52jpp2WmZman6muuayrq5+lqKSrrq6nr6yvsbGtsa6usLmwtLy+uLm4x8W8vLu4qaKcmJufp6assq6zqaapqq6popqXl5GcmpijnqKir6ekrKapmpqemqGnp6anqa+2squ0tq+qsK+xqbm2sbWxrqy3s7avrquuq7S1ra+rq7GtsbKoraurs7W3ur2wq6GLeoJ5cnZzbXRpa11balRdXE9NSERGTEFGTUY4NjY1OjU6Pjg7OTc8PTo7PTo5MjM2Nzc3Pjs9Pjo6Pz48PDw6Ojs5Oz47PTk8Pj1CPDtAP0A/QT8+OjU1OkBFQkRBQEJBiJ+ipqGYm56dmqWpmJudmpmUjJmHhoeGrq2uuLmxsqiur7iyq7CwqrK1ubm9tbK4tLm6tbm7tbWztbu8wLu+wLS/ubm6sbrDvMLKxb+7v7+5s7SzsbGusLm5try4u7+ysrKusa65r6qrrayjqKGdnZ6XmKGVkpWXkJifqK6ko6Sgoqeio6mpoaanpaqtp6ynqKesq6yyu7SztLm6trK2ramgmpaWm52fq6yrr6Ojo6GpoJuTjo+Qk5KSmZaanaSloJ+ep5iVkpSYnqSjoaWqrK2iqaqppKmtrqW0sa6xraqprq+wraWmqqSos66trKmmpqmrpqqnq7Ksr7Oxq6mWgX+Bd3J4aHRzbmRUYGNXXFFOTEg/SFFETUM9ODg3NTo3PD46Ozw4OTw7Ozw7ODI0ODk3ODs7PDs4Oz0+Ozw8Ojk8Ojs9PTw6OkA9PDw7QD5CQEE/Pjk1ODs8RkFDRD9BQYijpqKknqCfp6Coqpufm5yZmI6Xi42PjKqpqLGvsK2lp6ayr6mmq6CvsLu1vby4wMG+vLy8ua6tr7Kyurq3t7W1vLSvtKu2urjAxMG7tby9uLKts7CvrK63trK0ta+qpJ6bnJyeqKifoKipn6GnlpuXl4+dk4+Qlo6Xm6SooKCioqKlpZ2jo6CepaCkrKSmqKSio6OrrLOuqa6urqeqraisoZyamJmYm6moqquepaObo5yVkIyPj5CTkJaVlpifnp6amaaXk4+Slp2ioKWjpqSnoKKko6Ghq6uksq2qrKyno6yuraufoaKkpK+srKmmo6KqpKqqpKmrpqmsq6agiHiDfHZ/eWJ3bG5cUGhUUE5HT0xMQ09RQD47PjM5OjU7OT07Ojk9OTk8Ozw8OzkzNjk5Njo7Pz06ODs6Pjw6PTs5Oz07PDw9PjxAPT88ODtAQEE/Pz85NDk8N0FDQkQ9QEOOqqSjoqGinaulpqimoZ6dmZ2PmJWTkJWnpKGmqKmlpKChp6uhnKKbp6u1sry9wMLCwL7AubWnpayqqLWysbCur7Knpq+jr661wbq1t7K3trK0q7K0rqqrr7CytK6lnpKYlI+ZoJ+ioJykpZ+eqJSblpeMl5GNkJeTmJ2iqp+fn6Cjpaicn6ChnKKfo6innKehoKSfrKisrKCpq6agpKimrKOdnp2Zl5qrpqmwo6WnnqCclZOQj5GQmJCWlZiXn5ibmZujmZeUlZqdoJ2nqKWgo6Kho56doKmqpa6upqipoaKqrqqnoaCio6msq6eppqShqaKlqaalpKKmpKijkn18gHV1fW1re2RoVVFjTUlIR05STUpNRztEQDwyPzg1OTs+Ozk5Ozg6PDs7Ozk5NDg7ODc7Oz48Ojk8Oj07Ozw9OTw8PD49PUE+QEJAPTc6P0FCQEA/ODU1PDpAQ0BEPkFGlq6koqWeo6KpqKipqqWmnp2imJiZmZWbop6bnqOioKOgoZqgmJiXlqGorK62t7q5ure3u66ooKGpoaCtq6qmqaSpo6SupaystLy3rLKxr7Gtta+vs7Wqp62so5yZlI6RlpeZmZ2go6KbnaWemqSXl5eWkJKRkZOal5ugpKqeoaGepqeqop+gp5+dn6SnqZ6jpp+qnaqtqq6nqLClo6Smp6ymoaShm5ier6iusqulqqqgmpiYmJWTlpqTlZWZlZqXl5ignpycl5uhm56ao6eln6GioqOcm6Gmp6aoraOppZ6kp6mkpaWhpaSsrKmmq6eioKSjpKenoaCgpaKmoIl7gH12eHxkeHpgYlJVX0hJSUtTVElSUEw5PkE2Nz02NTs6PDw5Ozs4Ojw9Ojs4NjU3OjY5Pj0+PDk5PTk9PTw+PTs7PDo+PTw/Pz9APT03Oj5AQEA/Pzg2NT08PkFCRkBAR6CupKaroaOqrK6tp6ypqKCipp6bm56aoJyalZmfn5uen56WlJOXk5OcnqOorq2sq6uvqq+pn5eepZ6epaakoKKfpqCirqusrbWytqavtKupqrSxsLC4raehnJ6alJibmpGOkZaRjI+OlJminJejmZqXmJmUmZiWnZufpaapoKajnqeurqumorGjmqSmpqqioaqiqaSosquxsqu6qKarp6urqaysp6Cgo7GtsbG0qbGvopmcnZ6hmZubmpiZm5SVmpaYnKShoJqjoZqcmZ+kop6gn6KmnZulpqWkpaijp6OepqOinqaloqWlqKykpq2noJ2dn56gpaGenqWgppmBe4F8dnZzaIJsZVxTWllNUUpOT1RMUkxBNz5CNjg8NzY6PDw9Ojw5ODo7PDo7OTc2Oj01OTw7QD03ODs3PTs9PT06Ozw4Pj09QD5BPj4+ODg8P0BAPT83NTg9Pj1BQEZAQUihqqCrq6GkqquwramtqaelpaWkoKGfnqWXl5SYmZ6YnJ2blo+VmZKSnJihnaqip6Cep6Gkn5ySnKKbn6Gjnp2gn6Ogoq+urK+xrLanrbGtpqawrq2ssKegn6Kgl5GUnKGcmZiSk5+doaSbnpuWn5qfl5uinqWhnqSfpKitraisqKSstLe2sKe0rKKtraOvpaSmoamorrWzsr23vrCssa6tqaq0sbCnq6iytbezt6yxtKOgnaWgrKGhoqCfmpiWlZ+bm5ikoaCeo6GgnpucpaCfnZyhqJ+fp6meoaOkoKagnqehn5ymo5+ipaOooKmrpZ+dnZudmqainpyjnqeQgYJ/fHh1aXd1XW1aUmBIUVVIRlVWSkJNRz1KSDhFPDY3Oz49PDo8OTg6Ojs6PDk2Njo8Nzs+PT8+OTc9OT47PEA8OkA6OkA/O0A+QUA9PDk3Oj5APzo+NzU4PT0/QUBEQEJGnKueqamipamprqimqqWmp6aoqqGlpKOmkpOVmJacmpqcmpWTmZuOk56ZqJ2unqeenKGdnpqakpienKKioKCdop+fnp+pq6esqaq0q6utq6WlqqirrKqln56ZkpKUmJmWlpaMiIuPlZ2dnZ2elp6apqCgqKWxqqeuo6uttrC0srGutri9wLqttbSwt7CutKmmpKWsqbmztbvDvMPBtrq2q6+xube8r7OwtcG8t72zs7Whq6KpqLKpqqinp5qZnpmppqCZp6Cfn6eopaSenaqhop6bn6igpKetmZ+jnp6nnqCmnpycoqGbo6KhnZympaWkn6KZnJukn6CboJyjiYWEfnZxbWl2bWhtXFhbQlZNSkdNR0JGTTw+TD00PDk2Oj0/PDs6Ojg4PDk6Ozs8NTQ6PDg5Pj4/Pjg4Pzk8Oz0/Oz1BPTo/PjxAPj8+Pz08Njs/QT07Pzg1ODw8QERCREFCQ5WqoKapo6mqqKmjoamgpqinrK6lqaWpqpSSl5mUmpqanJiYmZyamJqqoLGit6OwpqCenZ2XmZaZnpucpJ+fnaSdmp2cpKKko6Kqr6ynqaOgoayvrqqrp6Cen6Kjnp+em52clJSVlZ6emJSGnZqhm6ukq7KwubKysbKxur28vLm2uMO+v8K/trq6wMS5vbusrqexrbHCtrjCxsDIysDKv7C5ub25wr24s7vFw7zCu7ezqbKtqrO0r7Ouqa6jnauntrGsoq+loKOvsa2wpKSvo6GgmqGmoaSqqpmdoJmao6CmqKGcnqKemaSenpiYo6OhpJ6mmZuipJ6fm5ubnIeGgXt0cmtrdXJwaFdcUUVUSERJUEg+RUE0RUg5NTs9Njs8Pjw8Ojo4OTw4OTs4Ojo4Ozw3Oz49Pj02OEA5Ozs9QDw9QDk3PD07Pj0+PUI+Pjc6QUA+PD45NTg9Oz1DQEFDQkGRqqGlqqelqqimn6KnnKasp7Gyq62jqayVkpWalJecoqGbnqCinJ+psqu7sr+rr6ylnqChnZyYm5+gm6Cfn5elnZWbm5+anp2fpaannaCgrLGvp6Sko6Gfpqymn5eclJGZnZmVjIqGiIZ5bYigpKKrrLS8tsO+vrO7wcPCxcC/wsbGxcPIwsDFyM3QyMvDsre1vrK+xbu+zM3FzMvM0se+v8DCvcfGwrfDycjCwMW9ubO5urS7t7C1sqq6sa67tr66uqq3rKqquLq0u66tuKOlop6npaKjqaaZm5+Ymp2nqqegoaGkmJSjlpSakZydn6Sep5+en6KdmJmUmJSIhH56cmtkaW94amVaW0ZKTEREU0xEQkQ3Oj87NTQ5OTc5Pj87PDs7OD48Njo9OTw9OTw9Ojs9Pj4+NztBOj45PT45PT44Nzs6Ojs/Pz1CPj83OkFAPTw9ODY2PDo8QT9BQUE+kqugp66ooqulpKKipaGlqquwsq2upKmmlJWVmpaUm6SmnaGqp6KrrLy8v8PBs7K4p6Ghq6qinZ6hop6cm6CSn5+Qlp+ZkpqWnZuZo6Gvs6mhm52dn5+al5iYk42PlpeTjo2QjIKDgndzcW5wj6atrrS5xbvNx8u/wszOzczIydHMzczHycXGzNDS1c7Tyb3Av8O7xsXIxdLTzNPP09PMysLFxsbKx86/yNDLxsXGxMC7wsC+vr61vbOtvr/Cw8bExsOtvriyuLzDwcG6vLy1rqenraigoqmlmpagmpmdqKupo6SknpePm4uQmYmVmJugn6OdnZeempOTi5WPhYB5dHNlYmdyb2ZeWllDTkxDRVBJREJANTU1ODlCPTY4OkE+Ozs+PDk+PTc6PTk6PDg8PDw7Pz8+PD0+Qzw7OkA9Ojs6Ojg4ODk7QT48QD8+ODtBQTs7Pjc4Njo8PkI+Q0FAPpOvn6ivpqiro6KloKampKuoq62qrqKqo5Kcl5ebmJujrJ6frqalsarFxszOzb+wwqmlqK2tqqGdo5+cnZqpk5mhkI6gk42UkpeZpLGxq6SgnaCcmZeVk5SXkZCPjIeEg4iHg4CBgYB5cnJvbHmktrq5vsvB09LTyM3O0dPR0tHQ0dHNzs7Qxc7U1dfS183Gx8nMw8XKz8rT19HX0tXV09PIzMfNzcnSzM3TzcTHycnAxcvHyMjFvsKzs8fEy8rKzsXJv72/vMHGxMzMyMm/w7+tr7KonqKqo5qTnpyYnqaprKSlppaXipWFkZSHkpKSmZualpiQm5WQjIaRi397cnV2Z2Jod2lkVldRRE1GQElRQj1CPDoyM0A8RDw3OTxCPTs9Pzs7Pj05Oj48Oz44Ojk5Oj86Pj1APkA8Pjs+Ozk9PTw5Njo6Pj08PEA/Pjk6QEE6OT44Ojo6Oz4+PEE/QT6QrKKiqaanqKSfop2qqKOso6OnpqyiqZ+Uo5iWn56dpK+boLCrqKyxyc3U18/Gu8esrbS4rK6jn6Sjn6CkrJuWqZaNl42MjZemsK6lnZ6doaWinpuWlZaUin13cGtlYmhxb3F7hYqAdnBucXRwhbPCvsXR0NfW1tLWzdTW19TT0dPU1NLP0cPQ09bX1dbSy8nO0MvGzdLK0tXW2dXX09bYztLJztHMztDL0s+/x8bJwsvLy87PxcbHtr/Kv9LMy8/Fyce/w8LIzszP0M7MysfNuLe7qJ+mq6efmJ6jnp2qpa2pqKiSlYiQhIyRho2MiJOVmZCWjJiSj4aHjIR8eHN2cGNgZXJiXVJcSUpGQUVIST47QDg9NDU4NTo3Njo8QD07Pjw7OUA7OTo8Ozs8Nz09Ozo+Oz08Pjw/Ojo8Ozs5Oz89OTU7PD48PD0/Pz46O0BCOzk/OTg7PT0+PzxBQEQ8hqugnKegp6Oim6CbqaSlqaCfoaGmn6ifmKSim6mmoqasmqSwsamotdDU19rSx8bLtLbCxrK2qaKlpqGiq7WnmrGhlpWMkKatq5yVmaGdm6Gin52em5aKeGlkYV9fX19eX2BeYmx1c3Fwb2xycXWSxMfG1NXW19fT1s/V1NrU1M/P1dTU0dHM0c7T19bT1dDP0tPRydPRyNDY19jR19LX2dXWzM7PyczRy87Qv8XBxsXOzNDQ0cjLzMDKy8XTzsvOx8PJxsbIy8rU09DUz9LM0sG5xbGlqLWup5qorKWdsqiws6ysk4+TjoiLjoOPi4SQjpmNk4+Zj4+ChYx7enFzdG1hY2ltX1ZQX0pKQkZDUU0/PD40NDo9NTI3NTU8PEA8Ozw6OTpAOjg7Oj46PTg+Ojo8QD08OTs9Pzk6Pz07PTw9PTo2PD0/QD08PT0+OjxAQjs5PDc0Oj48Pz89RkFEPYKknKClnaWlo5mcnaSeo6OfnZ+doJqnnpyhqZ+vrquqq52mrrioq7fY1NXZ2dHO0MC8zMm3wK+nq6mjpLG2s6O2qp+doaqpoZiWmJqbnaGemp2elH5yZmNjX19hYF9hYF9gYF9gZm1wcG5rb3J2d5vMwNLV09jY1tnR0tLXz9POy9PN1dTRys/M09bS0dbN0NXV0cbR1MrR1NXWztLQ2NjY18vIzsPIzsvKzL/Jv8fIzc3PytDNzsvOz8fKz9DKzsrByMbJzMrL0dLM09HRz8/Kvce5sK27uLWqtrCtqLits7+7sZqPn5SRjo2IjpCFkY2ZjJGRlY6RgIWIeXZvcG9rYmVucGFXXFpJRkZETFdFO0A8MzM8PTg2ODU1Oz5APTk8PDg8Pjk8QDtAOj04Pjk4Oj88PTg7PkI6Oj08OkE9PTw6Nj08P0A9PDs9Pjg7QEE9Ojw4ODs+PD0+OkVCRT6Bn5mlp6Cfo6eam5+cl56eoZqdmpyappufpKeeuLa1ta2lra6+tbHA2dPX2tzWz83Lw9PQwsKyq62urKazsrmrs7epo5+clpSXnJ6fn56VlpiVimxfX15hZGJgYGFhYGBhXl9fXl1ibXJvb3N0dXZ5pL7L1dHW1NPY1s7O08vNzsXOytLSz8bOzc3UzM7TzcrX1dDM0dTLzM/R08rN0dXS1dXKwMnBxczCyMnCzMLFx8rKzsrMzNDN08vFx8/Mx8fKxMbAxcnLzc/Qxs/Ozc3Mz8XHwLe5vcLDvcO5srO+sLvDxLaqmKWhmZaRlZWSi5SNmpGUlI+PlIKJhXhwcmttaGBgcWhYWGhWTUdMSVBQQjtEPjs2Nzo4OTo1Nj09QTw6PD05PD05PT06Pjo8ODs9OTtAPD47Pj5BPDk9Pj1CPTs3NzU/PDw/PDw7PDw4O0FAPDo8OTs7Ozw9QTpFQUU+hJ6bqK2epKSqnJ6fmJKXm5+am56ZmaKVoamppcXDwb+7tbKxx8O5y9XW2drb2MzNz8nW1sXEuLK2qqSurbm5sbLAoZeOjZiWkJSSkZaXlpGMfWZiY2JgXV5hY2JgX2BgYWFgX11bXWdycXFyc3FtcnmkxtPPy9DP1NXJxMnJxsa/w8XOzsfFx83K0cjLzs3G0dLPzszUysfKzc7Hxs/Sy9DPxbrEvsbJvMLGyM7EwsfAxs3Hw8vJy8/Hw8PPyMbBxsfDv8DHy8vLzsLKy8jHzNDExce6x8PIyMLPwL28v7DByse6vaqxsqelnaKcmJCbkKSZl5mRlZiJj4J3bnRka2BeZnFhW1dgR0hIR0lNVEc/Sj02NDM1NTw8NDg9PT06Oz08OTo7OT89OTw7PDg6PDo6QD1APD09Pjw6Qz48Pz04ODk6QD4/Pjw7Ozs7ODo+Pzw7Ojc5Oz49Oz49RkFDPYOgm6qupa6qq5qdoJeUjpedmpmgmpqcm6WzsazJzcrIxL69us3NxtDV1dna29jQytDQ0tTKxbq+vrCpt6u/urmzpZKOjpaQhoOEhIJ+hYWAdGBbXl5eYF5gY2RjX11dXl9gYF9bWlxha3Jyb29rbG9vfbjRyMnKz8vNxLq/w7u7urm+yMbCw8DDx8rJyMrHwcXLxsjLzcnEwcnJwcHL0MTLyL+5wbrFx72/xc7Kw7/DusnHyLrHxsTKwL3By8bFw73FvLy/w8TLxMS7v8nCxcfSxcHIvsrJxsfG0MPDxsOvxMvHxMq3v7y6tKmspaWYn5iso6GlmqOgm5R7dnJ0ZmlaYW5tWltYUURMRkJHRExDRlI/NTQzMzQ/PDM6PDw7OTw8PDg7PTtBPTo8Ojs3Oz05Oz07PTs6OD4+PEI+Oz88OTk7Pz07QD48Ozk5OTk6Oz06PDo2OTw+PDs+O0NCRD5/pZypsqm0rrCdnp6YnImUm5man6Kfmp2ov7i8y9DRzMfCw8fNz87N1dDW2djZ0MzUzs/Qy8S4xsG2tbyxwLa6rJGMk5eHe4CFhoB2eHVzcV9aW11gYWJjZGRlZGBcXF1dX15gW1laXGJvcm9raWxwb3OPxrzJxczAxsGwtrqysrSyscG8u7u5uMDBwcW+vbm9v7nEysXGwr3GwLe7xMm/wsm7t7q6xcK+vMHNwsa+vbXAvcO6vMa7wrmzvMXDwsK2v7a1vr+6y8K8tbrIur+9y8PBxcLFyMXIxdDGwszHssbJw87NwcXCv72yt7Czp6ioubGlrbCrrayUeXZ3amVoYGhvY1ZeWUpFSkZIS0FFQkVJQDk6NjQ4ODUzOzo7PDk8PDs5Ozk6QD46Ojw6Nzo7Nzo7Oz88OjxAPUA/PT8/Oz07O0A8Pj4+Ojk5ODk3ODo8PDw7OTs8Pjs7PjpAQEU+fqygrLWqt7SyoZ6fl5qNlJaan52mop2et8bCxMjO0svKysfNzc/SydHG1tXW2M/M0MjNyMrFvcrBsrW6t7u2r5GNioyFeYCGhoB+hHx0dWRcXF1eYGBiY2JiZWViXV1bXF5cXl1aW11daHNxbWdnbnByeZ29zMDDusC4rbCwp6qtrKe4tLa0s7KzurW9sbewtK6yu8K8wcS8v7q1srq+wLjHuLO7tcDCvLe9xsDDu7Wusra6vrPEt7q1q7i8vcC9sLq2r7a6ssW8tq67v7S2tMW8vsLFv8PExcfLxcDGxrvHy8DPycfDxsHDt8O+vra5vsa/rLW6tbe2jnh0eGZnZWJrbl5WXmBGS0hISkZCQ0FERT88OjU2NTYzMzs6Oz06Ozs6Oz44PEE9PDo7ODc5OTk7PDo+Ozk+Pz1APz5CQD1AOjo+Oz89PTk6Ojo4NTY7PT48PDo7OT49OT86PEBAPIi3pquzsby8sa2foJmUlJiXnqujr6qnpMbLzsjGyc7M0M3OycvJzMrLxtHP09HPx8rGysXEwLzPvbO5vbm4t5uOh4mKe3l+h4Z3eIF9dGheXV1dX2BfYGRhXmNlY19fXFteXF1eWltbXV9scG1oZmpubnJ8pMe/ubi1sKusp56iqqeeq6yzramrqbOttrCyqK6mrLK8urbDubq5sKu1ubu0wrmvv7C9vLu1u8e5wratqqiwscC1uLyvsKexs7S7vKuttaWutq66sbCqua+tu627uLu/v725wr/GwsXAvMbByMu4xcfFv8fDw7rExsK7xcnMy7O5wry6sohydnZraWFibGhZV1dbQUxLTUlFQUM/RkE7OTo5OTU4NTQ6Ojk7PD07Ojs+ODtAPD05Ojc5Pjk7PDo4Ozs6Pj45QT0/QD87Pjo7PDo9PDw4OTg5NzY4PDw9Ozw6OTs+PTs/Ozs+QDyKwKuouLe5w62zqZ2ZlJaZoZymsLWxt6bGz9LMxMbCxdDIz8PEx8HGxsXFzMPKzMPEwcfAury7yre0u721tauRiZCQfHl+ioZ6e4SBeG5eXV1dXV9gX19kY2JjY2JgX15bW1paXVpaWlpdZG1vaGdnaWtucoGtubC1rqalp6eaoKSgmpylq62jp6KrqayqsKOmn6qttbaxvbmvt6+orri0tLu3s7yut7m0sbvBscGupaiiq7Gys6e8qquoq6yttLSmqK6hpK+psqWnqK6lqLessLK3ubq7sby9vr7Ev7XBwcfIt7/AxbfEwsC7v8TDvsTIzMq/vsPAwKmGcnNyamldYW9kV1ZYUEhaUlNLRkZFPj9AOjc4OTc3NjQzNzo5OTo8Ozs8PDc7PTs7Ozw4OT44PTs8Njo9Oz89N0E+P0A/Ojw8Oj05Ojs6Nzc3ODg3OTw7PDs5Ozo8OTc5Pjw+P0E7jMKvrry3usSwtrCbmZWcmKqpsLGztb2vxtHQzcTIu7vMw8zAvcq5wMXAvMy6w8fFur3Evrq3vcW4tri7rrGVg4mNgXt+gH94dH98c3dmX11dXF5fYF5fY2NhYmBgX15dXFpYWVtbWVhaXF9ma2ZlZ2Voa29yhaqlrKagnKGllJ6jm5eRoaOqo6KfpaWnpa2fnZukpauyr7a3p7Csp6q0q7S5sLa0rLa4sa+6ubG3pJ+jn6axp6unuaqkpqeop7KtoKemnpqkpqyen6ekn6Cxra2ssbOys7C1vLa7wcGyur7DwbG5ucKzwL2/tbi7vb68wsbEwsO+v8Ogg3dwa2FlX2tvYFVZX0hOaE9UR0VKRjw9QD06Ozs4MjU1MzY5Ojg7OTo6PDo3PD88PDs8ODg8OTw6Ozc4Ojo8OTg+Oj89OTg8Ojs9Ojc2NzY3Nzg2NjY7Ojo7OTs7PDg1OTw6Pj5AO43Itba9uLrBu761oJ6UnaGmurars7O7s8XQyczDx7m4ycLOwbrLub3Iu7bHu7fExrO+xby3sLm/u7Cztq+ihIeHgn15dnRwbWtqanFpX2BdXFxdX2BfYWNiYGBgYF1cW1xcWFlYWFhWWFtdXmRjYmVnZ2dqbW+Inamgl5WaoZabopiVjZ6hoqabn5+jpaGnnpqim5+qsKyxtaKpqqmrrKS1uK23r6yytK6zta6xqp+dnqOisqSlqbitoaamn6isq5mfoJ6ZnZ+lmpmjnJudr6mrp6qrrK2wsriuuLm7sLa7u7qrs7K5sr20trGxtbS/tb2/vcLBurq9l4N6cmtfZV5kZFhUWF5JV11LUEdJSkZBPD8/QDs/PDA0NTM1Ojs5Ojg5OTw8Nz4/Oz07Ozg4PDg5ODw3ODo7Ozo7Pzo9Ozc4PDo9PDc0Nzc2NzU3NDY2Ozc5Ojs6ODo5ODo7OTo8PzuJyba4vru3wcHBtKSkmZqkpsCyr7astLfG0MnJwce8vMXF0MG8yru7wbu1xbi1wcGzwsS8raq1ubensbKpi4aIgHlzbnBua2NeYmZmXV1eXV1dXF1fYGFiY2NiYV9cW1taW1lYWFdXV1hYWFteYmRkZWZmaGlrco2onZSUlJuXm6GWlpCcoaGonZucpaahpJufoJqYra2tr7KgpaKtq6ehtbCxsaynrrKnubOmtqGinpqjoa2ioam1qqKjpp2lpqOWmJ6XmJudn5mXnZycm6yhq6aio6Wtq7KzqrSwsqqyubSvqa+ysrK3s62prK6xt7C6tbm9vrazsZSEeXVlXmVeW1lWU1pVTFxRTEpFSEtJQj0/QUFAQDoyNDUyNDk5ODk7OTo9PDY9Pzs8Pjs3Ozs3Nzc+Njo+Ozo4Oj07PD06Ozw6PTs4Nzk3NDY1NTQ2Nzg1Ojo4Ojk5PDg3Ojg5PkA6gci9uL2/tr69v7OdpaOYpbHCtba9rbW4w83JyMHGuMLByNC6w8bAtry9tsO6tr/Btbu/u6qmsbqxp7Gvmn2FhYB5cHF0cWhlZGllY1xcW1tdXVxbXmBhXl9fYF5cW1pcWllYVldXVlhXWFhWV2FkZWNkZWRkaGp2opyUlI+Vl5efl5mUmJ+eoZyWoaGoo5+dqJybmqqmrrCrm6Ojt6qgn66otqmmpqywo7ewo7agopuYmKumoZusuK+ioaScoZ+gk5WhlJaWm5iXlpeclJ+pnamjoZyjqqqwrai0q6qmrbKwpaqusrGvsK6vpqensq6xtK+7s7m3raOUgXl1ZF5hVllXU1JUS01eTFBMR0hMS0U8QD48Qjw7NzY1MzQ5ODg5OTo5Pjo4Pj47PTw8Nz49Njc2PTc7PTs5Nzk7Ozw+OTk6Ozo4Njc2NTQ1MzEwNDU2Nzk6ODo5Ojo3Ojs5OT1AOnbAvLS5wrG+uLyunaeno6q7wL3Aua60uMLNyMfExb7HusrNtcTFxLG/v7nAwbrAwLm6vbeoqLG7pqihpImBfnhyamxydHBpaGVkZ2JcXFpZWlxcXF1eXVxbXF5cW1xaW1xaWFZXV1ZXWFdXV1VbY2NiYmNiY2RmaoGWk5WLkpSTm5iclpaboJyflaCfpqWkpaaenJ+kn6qvpp+io7aooKGiqLOhpaekr6WwrKu0nqCdlZSpoaGUrLGwnqKjnZ6Ym5OLoZSRk5eYkpeXmJadppumoaKZpKSkq6OlsKelo6urraWorq6uq6ipqbOlpquvtLGuu7Wwr66fknl2cmVhXFpdWE5MUUdSYU1WUE9KTU9FQkQ/OT02OTo3NjQ1OTk7OTg4Nzw4OT0+Oz47PDY5Ojc7Njs3Ozs6ODU6Ozo7OzY8Ozg4NDY4NjMzMjEuLzI1NTY7Ojg7Nzg3Njw7Ojs7QTh4u7uxtb2wu7K3rJ6kpq23u7zBxbqxubbFysvBxMfHybjIxrXFwsiuurzCvMLAwb28t7q2pqeytZ6iipiHgHdvZGJnaWhmaGpnam1gXVxbWlpZWlxdXFtcXl9cWllbWVlZW1dVWFdUVFdVU1RSVWBgX2BhX2BhY2RpgZSTiZGOk5KTnJSVlqOZoJacoKWhraWjo6KjoZuqqqWZnqWxqaCgnaSqnaehnaysqaitraKhopSXopqcj6upsJufop+el5iTip6SjZKSlY+YmJOboaKcpKChlaCho6Sao6uloqSqo6uupa2xqaalpqa1pqmorbO1tLm6r6msnotycG9gW1dWVVFGUU9IWlxPUkpUS1NMRUdJQzg7Oz08ODY2Njo5Ozo6NzY5Nzc6Ozo9PD02Ozw4PjU5ODo4ODY1OTo7PDk3Pzw5Njc4NDUyMTIxLi4xNDI2Ojg2OTg2OTg5ODo7OUA5e7W0rbS7srCssq2dp6evubmzv8i6tsCvxsnOvMLLzcm3y8C0wMfMsLa9x7vBx8O9v7e6taSqr66dmYeOg3x1aWpqbWhqbG5ra21lXVxcW1tcWlhaXVtbXmBgXFhYWllYV1hXVFZWVVRVVVJTT1FZXVxdXl9fX19iZG2Oj4SRho+RjpmTlJKcmqKcm6CnqKqnqqWopKKYpK6klJmlr6mfm5iaoJ6umZupsp+kpp+jpKCUk5uWlZGpqa2anKChoJqUkIyZjouQjJKMlpSQnaGgopybopWboKKgl6Goo6Koq6Crr6Stt6Wio6Ksramoq6+zuLK9tbOrr5iDcnJoW1lZU1VSRVlMUVxZTVROUExRUklOSUI8Pz9BPz02NTc5OTw8OTg3Ojc5Ojs8PT47Nzs7Oj02Nzo7ODk3Njk4OTo2Oj05OTU3NzU3MTE0MS0rLzQzNDk4ODo6ODo6NzQ4PTg/OX6zrqiztq6op6+tm6morLe2rLvKu7a/rMzHxrnCz9DJtca+ur7GzLWxvcS8wsXDvcGzua+lqq+rnpeGgXd4b25pbm5ucWdnaWdkXVpbW1tbXFtZWltcXF5fX1xYWFlYV1hXVlVUU1VWVVVUU05QUVlaWlpdXFxeX2Bkfo2Bi3+LkIqSjZeRlpmioJufqqmmraqmr6KnmZ+soJSVpKinnZePjpmdrpaXpqmYnpyTpaGekZCSkpKVp6qkmZmanZ2WjoyLlIaIjYOQipGUkKCdoKOXlZ+VmqChnZKbpaWnqKigsbCmsbymn6OstKutp7C0sLm1v7GtsauQfHByYlZUVU5SSUdWUVJSTExYTUpMTlJHTUtBQ0ZEQz5ANzU4ODk7OTo3Ojo3PD06O0A+Ojk7OTo/NzU5Ojo4NzY5NTg3Nzk7ODU1NzY2NjEzMjAtKi4xMDI4Nzc7OTk7ODk0ODs4QDh/s62msbeqpaKwq52qp6mysKS2xrS5urPLxrq8w8vRzLO5ur7Axce2tLe8srq7xL7CsbOtsK6wrJyiiGtobW9yb3FrcGtkZmdlXlpZWllaWlpbWlpaXFxdXFpYWFhZWVdYV1VVVFJTVVNWVVJOTk5SV1hZWVlZXFxdYWqAen92iY2HkImYiZSTmJqYnaibn6qkpKqcp5mgpZuSj56impeWhIORmqOPk6KclZWWh6KampOLjoqPmaOnnJWVl5uQkoeUjoyBi42AkIqRkpGgmZ+hlZOYmJShpJiMmaSmqKahoLSyp7K3oJyit6yqraSysqa1vLWrq7GjiHhybV1OUFFMT0NOTk5QTEZOTktKTk5RSE1KQUdLSEhDPTg1ODg4OTo7Njk6Njg7OTk+PDg6Pjk7Pzg3ODk6ODg2ODU3Njg4OTc0NTc3ODIwMzAxKyktLzEyNzc2Ojk5OTk4NDk4OEE3d7anpLawpKejqaWgqaWks6qissO1tbKzx8e4u8TKzce1r7y/uLzEs7OutqKstcS6u6+qrLSvr6CXqH1eYGdzcXZxam5pZmhoal9YWVhYWFlZWVpaWVtbXFxZWFhXWVlYVVZSU1JQUVRRU1VRTk1LTFNXV1ZYWFlYW11hb3N2cISIgoeAkYOOipSQk52gjpqboqCjmKSWoZuVjIeYmoxzjYJ9jJaWhZCZkJONjnqZj5yMgol/iZifop6Qk5iWhI6Ck35+dImOepCGkpCQnJqZmZCVj52NoqKNiZqgoaSjm6K0r6yvrJ+YpbmmpbChsa6csLuqqa+qmYF2cmJWTFFPUE1DU05MUU1DUFBISE1TTUhKSkRKTEVKSjw3NDk4ODg7OzY5Ozc6PDk6Ojs3OT85PkA3OTo8ODk3NjQ0NDU4NzQzMTI1ODUvMDEwMikoLC0xMjc2NDc4OTo6NjU6ODdBN3e3oqO0qKWlqKOmpaalprOnpbTBuLC0sMrGubrCz8e/ta+9w6+xx7Ktp6yVo62/uLGwoKitrKqWlaJyV1ZgaGdpaGluY2poZ2JcWFhYWFhZWVlZWVlaW1tbWVlZVldXV1NUUE5QTk9PUFNUUU1NSkhOU1NTVFVVV1lbXWlscmx/hXx0Tlhyj4KXho2cl4qTkJ6XnJWUlpSOloh/k4lfO1dve4qTiX+LkYyPhYZyioSWgXmCeoWTnZSDlY6Qj4KGfZJ4cW+FjX6JgJCNj5eZmJOKj4ich56XhoeWnpqhoJenr6itqaielq20oqatmayrmKezoamto5J8cW1fWk5TUVZMRFRKUE1NRk9PSkVMUU1LT0pJTU9GSUg9NzU5OTk5OTo3Ojs6Pj44Oj09Njo/OD4/NTg5Ozc5Njc1MzMzNzYwLi0vMzQ0MTEwLy8oKSsrLTM4NTQ3Nzk8Ojc5Ozg2QTl4t6CiraGmpqmgp6inoqmwqKe0wrmxtbDJw7m0v8/AurGxuMSrrsmup6KdhZqiuq2nqJampaOgl4+WaVBOUlZaWlddXmJnY19ZV1dXWFhYWVpZWFlYWVpaWllYWFZXV1VTUk5MS0hHYlxNT1JNS0hGSE5RUU1QUlRWWFpgbW9peoJ0UEJAf5WRkX2JlIyEio2ajJaVipKIhpWFeIh/YEpRbniKkYR8hIyJhH5/bn5/lHd1dniEjZlwUY2IioZ7fniUdmd3hYh+ioiVio2QkZaLg4mHlISai4GEkpuWnpyUpKOnqaWjnpuxq6GkpJGmqpahqZyipqiHc2tlXVtIUVFTTUlVTVNJTExQSUdGSk5MTVRLUVFPRklDPDc2OTo4Ojs7ODo7OD4/OTk+PTc7PDY7OzQ3ODs2Nzc1MzQ0Njk2LzMvLjExNTIyMS8sJykrKiw0ODMzOTc5Ojk5Ojo6Oj85dracoqadn6Guoaeopaanr6yqtry2uLazwry3qLvJubepqre4rbbAqqKbkoKPmbKfopqNoJaYlJGLjGVNTE5OT0xNUVdbXFpYWlVVVlZWV1lZWFhZWFhZWVlaWFhWVldVU1BNSkVAQJtrc3NJTUtERERJTk9oWU5RU1RVWm6DdHd+amldVY+JlIl0f4aBe4WMkoCRmYuPe4aPf3V/eHNudXB0jY2BeX2JqoR5emh2e45wcm14gIqMknh6gHuAdnJyknhndYSEhIR6lYmIioyKgH+Diox/k4N6gI+YlJuVkZ+dqJ6fn52gqaWfnZiNqKSToJ+Vnp6kf3FmYFxcSlZPUUdLWFJPSk1NU0pKSkxQSExRTFJUTUVIQTw3ODs5OT49Ojs8OThAPzo6Pj03PT03OTkzNzc5NTY3NTI1MjU3Mi8yLiwvLzIwMC8tKygoKS4xMjYyMTk4Nzk4Nzc1Ojw8N3aumKOhmJyes6mvqaWsq7Cxqr20sry4tru1s6C4u7OrnZ+tq6y1s6WelpGYhpSklp2Mg5eJj4mGhoNmSklKSUdGSEhQVFRUV1dTVFVVVVZXV1dYWFhYWFlYWVlXV1VWVVNQS0Y+OTNOPH6eTUhKREA9QURqlH5MT1FSU1ZedYN9eWd3jZeYjo99Z3mAdnh/iY98hJiSgXKHj3x2e29rfq18c5CKf3uGkoB9f3RmdnyFbG9oc3yJjIeAbHlxfXBtdY9yaHGAfY5wQ4qEgoOEf3d3eoqEfYt6dH6Oko+YipKam6OXmZ2anZ6inZaNi6Wbj52XjpaYjnVta2VhWVdYVFFKU1ZUT1BPUVdLTktPT0pRT0lPT0tGRDw7Nzk7Ojo/PTk8Ojk5Pz87ODw9Nzw5OTk5MjY2ODU2NjMzNjIxMjI0LiwsLS4uLTAtKyonJyouMTM2Mi84NzY5NjY1Mjc5OTV5ppefnpagprCsrqunqbCvsay8uKy7vrm0rqmbsaitnJCXnqesp6SbnZOHln2OlZKVgHyKeoWAf3+BZUpHSEZCQENESUxMTVFSUFFTVVRUVVZXV1dYWFlZWVlZWVlWVlRTUUtENzhmNzA/qGlOSEM9OzpEioV6WkpOUFFUWF5lcHJtiKeqwH51eWJ7d298eYiPeXyLhW9tjJF4c3hqan+CcpaRi4F9ln9JkphuaHd+gmxpY2x5hZCShmtzbHxucnuFaW1wfnONiIOFen1+enZvdHSFgXmBd3B8joyKk4OWl5iakJOWl5mXnpeMg4mfkoqSjYaQln1saG1ubVdVV1RSUVlPU1VVVFlWTU5ITktOTktDSU5HRT86ODk7OTk6Pjw5PDs6Oj0+Ojg6Ozk/ODY4NzI3NTc1NTQxNDQyLzAyNCorKiotListKigqKCcsLTEyNTAsNTU2NzQ4NUhBODk1d5mRm5manqStr6Ktqqi1r66stL+rvMK/pqOalaWYn46FjJaipJublJaPdpF9hIuQj3x4fnR9eHV3fGZPRUdEQDw+PkFGR0dLS0tNUFJSUlRUVFRWVldXWFlaWVlaV1ZUU1BMRTFAmjMganJBmW87PDk1PICChl9JTU9PUldaUllcYKeIYpppdHplfm9tf3qLiHWBiIZ0bJmRdHN8amudjkx5hJKJhI5nMXaGc2x+fYN0ZmV0foSEhYBmaWx1a3B/e2dwcHtuko2Oe3N9fXFwbnVtgn53eXRqeYmCiImDlpOSkIuNkZSVj5eOgHmIl4iGiYZ/kId1aWluZ2NXUVlXWFlcTlBWV1pZT0lJRUpKSEdCQUZEQ0c9OTk4Ozk6OTw6OTs6OjpAPDk6PDk4Pjc4NzcxNTI0NDUzMzY0NTAzMS4qKisqLCwrKykoKycpLCwyMjYtKzU3NzU0NzhpTzg7NW6SiJmRmpakqK2esp6muq6rsrDCsrvDx5uXj5SZi46GeoWRmpaPko6SinOJhHeLj4x/dnd1eHZveHNpVUZJRD88Ozk6P0BBRERFR0pMT1FRUVFSU1RVVlZYWlpZWFZVVFNQS0U4MC9cYLNHOVhQOzk0NDGWuotITE1PUFFWTEFJUUlir7OgcXx4bX1scYOBhYF5g4aGeXKglHR4gHN1lIc1cZ2onY6hoYSihHZwhnuGe3OMrY2IgGhmYmltcW1vgnVpb1h1b46akXZsf3t8bXJucH96c3VtYnaEf4aAhZCRiouKkouRjIuPg3Z5i4+AfoOAfY54cG5ual5aW11bWVhhYFNPXFtZWExISkZKRz9DQUJHPkNEPTs5Nz07Ojs7OTo5OTs6Pzw4OD06ODs2NjY1MTEyMTM1MzQ3NTUzMS4vLCwrKSopKSoqKikoKikrLzNETTIxNjY2NDM8dlI3PTdikoGSiJaRnaSnnq+VpbSorbCuwbO6wcaXkIyUkIGJfW6CkZOKhIuJkIh3hIVumIqMf3l7e3F7dHxrb15KUEc+QDc0NTg7Ozw9PkBCRUlMTExNTlBRUlVVVldYWVhWVVRTUExFPDUqnUtbQC1nSTk0Lz6Sg6muX0dMTU5QTDdDTVJTREqGdoB8fHZ+bHeHh3x9hYJ/jH52opl5foaAhJmFm5xhhqqfnYuCkI16doh+iYeOc4qXj4N7XGRxdHp7d4ptZ2lheW+Fj4J6boF3c4R6cXN5d2tuaV13h32HfIiHj4CLk5eDjYaNh31xhYCEfHV3e3yHdG1xcmRlXlpaXVNbZ15YUVZZXVdHS0tFTEc/RkBEQz5BQT07OTc8Ozs9PDo6OTk7Oz0+Nzk+OTk4Njc1NDI0NDAwNDY0NTY1NC0sKSsoJycnJigoKSkoKCsrKy8wMFVxPDIzMzMxRX5XND05XIx3iX+UjJGdnZ+mkaCqn7Cpr8Cxu8W6lo+RlIh6hnZrgIySg36LhZCNeYSCdKKFjX9/g4Fzg4F9bHlsU1hMQUUzMTEyNjc2ODg6PD9CRUdGR0pLTU9QUVNUVVdWVlZUU1BNRkA6Mj0gI5ZjjFs1MzExaT9Hb0lGSUxNT1JMS1RdWVJKaYSIe4l5fHJ8j4t6fIiGfpeHdqGZiIePkpSljaypSIatr6+KgICTioGLgYSRqIeAmJiKnHNsfIGGh32OaGdneH5thYaBhXGEhUdrgHhxeXZobWtfd32DiH+IhYx6lZ6ciouJkoB7dYt2fHhtb3d+fXFxcGpaXFtaY2NXZ2ZcVlBRWFpRRExMR09JREZDQ0FAQ0E9OTc4Ojo6Ozs6ODg4Ojo/PjY7Pjc1OTU3NzMzNDQyMzY2NTY3Njg7REZMTU1MQzcrIiUnKykrKywvMDArbnUyMjQyMEyBXDU9PF6EdHx+ioWHkY+WmJKXoJ2soKe5r7O9tJeNkouYi310cX+Kk39+jYOUlX2Hf4alh4mAg4iGeYmKgHWFeV9jVkxDNjAuLzIzMTMzNjY4Oj0/P0JFR0hKTE5RVFRVVFRWVVNRT0dDPzgwLCOHWz4/ODQuXZZwc6NVRklLTU5QV2BZcFpcXmqNk4eVgISChZGTfoWJkYCaloKgoZiVm5qlrZOZu7Gnu8jEp4qMoaSOk4mAkHtyg56fkZx+doWFi4+HkGlob4OAdIyGhItxhoJ2h4B7doV9bnZ1Z4GUj4aJiYiJiKKro5aJj5iAe4KKe3pvZ2t4fXd8cWljXFlZXGldYWdgWk9MTlhTUklRS0ROR0NLRENBRERBPDo4Nz08Ojw6ODg3Nzg6PT04PD02ODc1NjYyMzQ0NTU3Njg2NzxCQj88ODo+Q1FeZVxHMicmLCwtLS4xKD+MWy4zMTBPg180PztudnBneIN7gIyAgZGPi5qapJyhrKarr7CXkpGEoZSEeHeAjZR9f5KGk5Z/i4GSm46EgYKMjIKKjoWAioBtcGpeQ0E0LS0vLy8vMDIyMzQ3Nzk7PT9CREhKT1FSU1JTU1RSUE9IREI8ODcvOUM+PDw2My5sk5dNUEhKS0xLTlZgY39nZ211nZuPmpOTi46PmoiTj52LoKGSo6mlo6yTqLaip8HCrsiveLqUmnyMoZ6ZhJKEgo+hnpOZkoSKhY+YkJZscHWJi4GVjI2Pdo+EcWyFgYqXkoOFiHKJoZeHk4qPkJeltqmbjZaig4eThX6Aa2prfX59f3FfW2JeWWZqXGxsX1hLSE9TUU5OTEZJUURETkZCQ0VHQj46OTc9PDo7Ojk4Nzc2Nzs6Nj06Nzg1NDU2MzQ1NTY2NjY4NTU2MzEwLiosLCkoKS46UGFcQCwoLSsrMCwncog3MjQwT4RiM0A8dW5oWXCDcHWHcXaRhn6XlpqUn5+bp6CqlpOYnmhmpJp9hZOSeoGSiZKSfYuFmZKRg4CBi46JhpKIhImFeHh/aE5SPi8vLiwvLi0vMDAwMjEyNDU3Oz9DRk5QUlRQUVFTUU5QSUVFPjs8OkNGPz48NzUyPD9SNUhISExMTU5SXm+KfHOBfaCdm6emopmhl6KVnJ+onqmrn6isqaq1l6u+q7bIybfI0c++m6Bwaaqon4STkYWcoJqamaeRkYiVoZmad3p+lJiRoZKWl4GUnnt2lZKrs4mNl6B9lZ6cjpOWmqSjp7awnpGaqIiXkI6CiWxzc3t8eW5mXltfX2FnY2BnZ11SRUtLUU9KSk1GRk1DSE1GRkNCR0RBOjg1PDw4OTk5NzU2NTg+NzU9ODQ3NDU3NTQ1NDY5NTg6NjE2ODYzLzAuLSosLy4tJyMqO1hiQigqLDEtKEuXXjA2M1GFZjNBQGliX1BxdWBufWF3jn18lI6Oip+Sl56VnKqYnqpCRH2HiYiYjXmCjYuOjXyKhpCRj4KDgYmMioWThYKGiYGAh3dfYlA0NjAtMS8sLjAwLi8uLjAwMTU+QUFNUVJTUFJUVVNOU0xFRUA8Pj1GSEBBQDg2NjI8OTtGSEdJSk5PUVlthpB3lYujp6q1vbilrqysqKm1rLG3srKtu7Gzvpyzw6y7ycu4w7+3paOwsqysqqOKlpiFpaagopiCppmNoqqnpIeFk6OgoKqhpKmOnLCLlaSnuLucoaOwk6Odo56RpKKssK2ztqOVpquJmoqTi5V6e36De2VeZlpjYF1iY15mZ2BbT0RJSFRPRkhMRktHRkdIQUtGQ0ZGQTs4Nz08ODg6OTc0NjU4PDU0PDc2OjU0NjQ0NzM5PDM4PDIwMjU1MS8xLi0qKi8sLSooKiYlNVhYLywwLCwwhIE4NzFQhWg1QUNbWFRMaWNXanBYeoV2gpOFiIKcg5KRjJLayJ2Wc1aXiI+InI98hoyPi4p7iYOHkY+DhYGMhoWIkoaChImGh4eHcW5hQEU2NDwzLzExMC0sKy0xLy00P0RBTlZRUlNVVVdVTVxRR0dEPD4+RkhDREE4Ozw1Qzs9RktJR0hST1BXgZOghK6js6qywcfEq7PFtq20wLO4vra/tcG2u7ukuMaptsnHtr65tKijtK2wsJuZkpqfiaevqqSVd5+kl6GrsbOYlqmtqK61u7K6rK+1orGssrW8uLWutaCnqKOom6mwrrO6uLmonLiqjaWPkpSghnqBgHJXX2JVZGBgYV9fZmBcVUpERUxWUklKS0VKSEVBQEBLREJNRjw4Njc7PDk3Ojk4NjU1NTcxMTw4ODk1NDY2NDk3Pj0zODkxLjAxMjExMzAsKiwuLCsrKyooJyopRVowMCovK2iSTzYwUodqNkFFV1FKTFxaUWNkV3p1cYGUfYSGk3aGfoCNe7+7o7yCtJSTjpuPhIiPk4qJeoeBjJONiIWCjoCBiY+Gf4aIhYqHkXp5b11XQEVOPDY6NDZBQjc2NC8vN0NIQ1FcT1FVWFVcV09fVUlLSkFAPkdLRkZEOz5AN0Q3P0JKSkVHV1RQXo+kraSytMO2uMHMyre8xL2ztMG3uMK1v7C4dLG0prrFpLDGubGzsrSopLa2qrCgopabopKlsa2lraynpJigrLO6oqmyubW7vsy/xcW9vbPCuLq4v7i7uLqtrbGmsaquvrG9vMPDrZm7qZWuj5iZq4l+gHloVWFgV2ljaWVWW2RaV1VKR0dMUkhESUtBSUQ+P0JCTEBATUQ5OTY2OTo/Njo5OTY2MjQ2LzE5NTk5MzY0NjI3Oz0/NjoxLi81Nzo6NjUwKigsLS0tLCwqKCgrKyhFUy8qMDBKj2s1MlCHbTY/RlJMQUxSV1RZVlp3anB/j4SBjoRve3J4iGK5oZqjiZWUlpOUlI6Ql5KHh3yHgY6WioGEgYp6fIuIhnyKgoGLhJV9eHp1ZlBcZEdFTDpRZGBbXlNGPztIUEVbY1FRWVlaZ1pTYGFNU09FQT9JSkhFRkFAQzxENkI/SEdLTVRaVF6Ur7i1u7nJwLu9ys28vcG8uLa8u7e+tbqyxmF1sqWxmp6rvqqlqKuqpKKztaCrp56Vlp6Yn66lp6elnqOUoqews6eysry2wb3TycnTxsLFzMLKw8G+vr+8vLi1sLm3t8O6xr7EybGeuquirI+mqbeKgHxvXV5eXFVgXWhmU1liV1NXSUVGT0tAPkhEPUtCPUJAPUY+O0hANzk2Mzc5PjQ4OTo1NzA0NS8yNjM4OTM3NDUyNj84QD5HS1JUVFJQUFFSUUpBOS8sLCwqKygoLC0rL1A+KC40OIB9PDJLiHE5PkNLRUBKTVBSTFFdaG1scZCNhpBzbHJyc4jVwLaaoI2VmZmRjpeSlpaOhoh9h4ONlop/g4CCeXuLhId7i3mBioKXf3R9emxmcHZZXVxQZWViYGVkXVtYWFxOZG1VUm1uX29fWGdlVVlUSkRCS0tIRkhISEhCSTlEQEhLVFRWXVpbk7nAub64xsG7ucrLu7a6tri5tLi1ta63t5lkdamerXBeoq2cmKGim6Seq6WUn5+QlI6WmJionqafn5qZg6OdrKSqsKy3sLy41NDO1s/JzNLMz87Kx8DAwsq9wb3BwcXExsrAyc+0pLyxtbCcrLm9mn13aVtdWVdbX1hhYlFcYVRSTENCRkhGPEBGPkJJQkBEPTpFPj1KPzQ3NTM1Oz00Njg5NzcwMjIvMjQxNjk3NzU1NTVEM0VMTT41MTAwMDY6NDc3QElPSjsuJioqKC0uLyxATSsvNTRtiUkwSIl0Pz5CREBDREdLT0RSXFppYHCXk5GUbmxvdHWHs6yhoZ+LmZyZjY2VkZuShYqKf4mHjJCMiXyBg3N7ioOFe4p0gYqHlX90e3lsbXV8aXNlaWxoZmppaGBmaWltWm50l62kvYiHZ1tvaF1aWVRIS09QSktQTFNRSExBSkZLUF9fYmdqYpi4x7C6tLu+trHFx7awubGxu62zsqisuK2NtqienKeaTpqejI+glpGnmKWVipOTiJGJkJGSnZuhmJuVloeemaaarK+or6ezs9TU1NbRy8/T1M7Tz8zFwsrQv8rJy8nSyM3Ow9DSuLDEvcS6pre7xaJ+bGFaWltWXlZZZFpQXVhPUkNCSEZESjtBRD5CSD9AQjg7RD5AST01NjY1NTs6Njg3NjU0LzEwMTQ2Mjc4ODc1MzY3QzVCOD8tMCwxMzQ4PTk3LC4sMTtGTD0pLCguMDAwN0s/LTQ2VIhXMESHd0M7Qj5FQkFDSk0/VVlTZldzkJGZgmhycHl5g6GqnqaXjJubmIuOlZGajn2Ji4aOi4uLkIh8hYJwf4eChnuHcoOSjI9+cXl1bHF4f3J7bnhzbGmAcG1jaW5weWl4fX7Lv8Pfp25jeG5kW2FgS1BSVU5ZXlBdXU1RTlRRVVRcbm53g3KXrristaiwtqutvcGyq7WmpbmnrK+irLSkj7Gum5iYjJGUkYSPm4GNp5KciYOLhIqJhIuElJWXl5SbkJyYmZmenauspKeirKzO0tXRzcvS09PQ1NHOyMPU0cjO0tPT1s3S0cXS1sbBz8jIw6m/uNCcdmtiWl9bVV5RXFpQUFVRT0k+QUdCQ0Y9QUI/RkU+QD86PT08PEpBNDU0NjU8ODg4NjY0NDEyLzAzNTI2NzY4NTMzOz08RT1AMTErLzM0OT81OTAxMDIyLTJFTzMpLzMuMzI9TjI0OEN9XzJBhnREOj09ST5AQ0ZIPFZSTU9bdYeGi3dsd3B9foCgnp6hjI2Zk5SLjJOPloV5hZCRj4yKiJGHf4N7cn6Agod6hXaFk5GJgG93c2xzfXx3fHOCeHFrgHJyaXByenlye77Lm3+NsoR2coV3aWFpXURaWltXZmRYZWtUWF1dYWNeY3h7f4yCmaqkpKKgoammqrG5q6a0o6KuoqSuo6eyoImmm5WTkYqSj4iClIlrlaONmYSBhn6Rg4OUl62LlY6Vmo6FkpCdl6evoaCgpaSoyM3Px8LL0dPR1NLO083G1tPN1NjW1tjV19XK1drNytjW0cutxMPMh29rYF1cVlJXUltQSkhKSktAOzo7RUJEPUNEPkhDP0NCOzw5PDpHQjQ2NTQ0PDU2ODc1NDMyNTAvMjU0Njc0NTU0NDw+PUU/QTYyLy0xNjs9MDgxLzI1NC8tLjtSMDE3LzUzMkVEMjg+bmI1PYF0TTk5QEk8QUQ/QTtQTEZLWXGAdn5pc3lygoqAnZWelIWLlomPiomOiI+AeISUmYuNiYiLiX+EeXN7fYOHd4B7h5GXgYRveHFudn92eH10hnx5bId2dW59doR1eXyeto08QYvGpX6NfWplV0lDZWNmY2hqZG95W19maGxuaW6Bg4mSjJ6foJ6Rl5mgo6SmsqSlsqCipZ+iqaKjspyHn5KSk5GLj4uHhI+EfpycjI2ChIV6lH+CqpajjJKLmJOLfZeKmpGqs5ianKecpr3Dxbi2xc3R0NLQy9LLydTO0dXa19fY1NnYzdjbzsna2tLWv8zNtHRza2FaV1BTUFhVRUdLSkZGPjo3OkBCQzpHRUBFREJEQTs/Ozs3REM3NTY1NTswNjg5NDQzMzQxMDE0NTU4NzU0NDQ5QD5EQkM8MzMuNkZUV09RSkFKRj8yKiguQlQyOTI1NC83Szc1PGBiQTxzdlY4N0FIOj9CPjw5UUVDSlRsbm9wYnFxdIaNfZeRnot/h5KDiYaFioKIfXiFl5eJj4OHhod7hXlxe3uEhnZ7ho6OnnqNcH1wcHqAcnuBcoSHgG6OenV3fX2DdYB9h4mwdFmqwreNkoFwbmM9XmhycXFwbnd3gmZpb3J2eXJ6i4ePlJKblqCWiIyTnJ+bn6ugoaycopqaoKafoKyajJqNkZOOhX2Ih4OFi46gmZSIg4d+bJl6hJmHiJOMjpWMhnubiJOPrquTlZefmKautbyorb3Hy8jJy8vPycTSytTX2NfY19Tb19Pa29bQ2trS1snVzJN1d2ZlWFdOUVJcR0NGSUk/Qj49ODo+QDw+ST1AQkFBRUE+Pzo4N0RCNzU1NDc5LjU2NjQzNTUzMjMyMzY0NzU1MzQ1OEVCRENFQjU2PEZOU01bbmZjbnNrYFY+LDRMRzg2NTQzM0JGND1XX2hMdXheODs/Rjw8QTw6OUQ+Q0dSa19tZGJmbHaAiHGRkJuAeYCOfoOBgoV/hHx9hJiOh4x/hoeBd4N5b3t7h4J0epKejqF2kHaDdHWBfnSAhG+BkIJvkoV1fYKFeneHfIm4xqXDyriClpyPeHBmTmVjgnqCd4WhkYt5eXd7hIB8hHZtlJaVlpCYkYOJj5eal5emnZigl5+Tk5ijnpuslpGRi42Tg4yFiYmBho+RnpyaiIWMgYaXe4iJn5ePiY6Li4J8oIiQirygmJOXmpyopqWtnqe1v7+/uMfJzc7FzcnR1dXU2dXX29TX2drb19va2djO28aDdnZkZmFdUlVVVE1LRE5EOz09PTk6PD85PkE3Pj9APT8+PTk4NjdDQTY0NTU9ODA2NjU1NDc3NDU2MTM4NTQ1NjQ1NTdISD1ESkU3OTI1O0g+Ozk7N0lQXFpSVVhLOVQ+Ozk1MzI3STg9TllNSHh4ZDU9PkM9PEA6Njo+PkBFUV9ZZmFdXGl0enlsiY2Sd3Z6inx+gH+AfoZ7foKRioWGeoWIfHZ+dW59fYd+dH+SnpGgg5J8hn54j355i4pvg5uBdJmHfoKKhXx+kXuQqY+Qw6C9jJuknH6KhX2Jc4yLgHOmmpyYlIV7j5GJhGlHcKGknoyMkZKFiIuRk5WPnZuTlJGXjYyWn52UoZWTjo6RjH6Qj46LhImSlpmfn4iMlJGdkYOMf6aZiIWOg4aEgKSFiou3l52RlJahpqCdnZ2jrra5tKvAxsrQyMfMz9PS0tjS1dfA19jZ29ja2tnZ19u3dXV0Z2ZiVF1ZUk9OSERMQz49Pzk5Ozo6Ojw+NkE+Pz09OTo7OzM3REA4Mzc4PjcwNjg4MzU3PDM3ODA0OTc2NzU1NTQ2RlA1RE5JODkzOEFLPTszQ0BJPDpEV048TVRITj85NjMzMz5DO1tYPjVZeXBaPDxBPD0+ODU4OT89RFJTUlheVlhmbW1taYGOinFzeIp7e4B8f3yIe318i4eCfnWDhnpzenRtgX6EfneFm6GbnpSTgIyIf5iHgJySboiphXuhjH2RjoOJhZ1/m5GKjaOin5Gkr6CLkYuFi4GThldyrYufq5yQg5mckJCOW4KikYKNn5OVjIeIjJKSjJSVlZCMj4qIlpydj5aXkoyTlIaAjImSjoqKnZeYo6OGk52VoIuKiY6ckIOJj4CDh4WkhIuQspickpSXoaCemZKbnaeyuKylvcLHzcjGz8vPzM7Xz9HUrtbV2NrY2trX1tnanWx5cWNjWlpVUVVXQ0BJRD8/Pzo0OTo7Nzo8OzQ8PD89Pjc7OjoxOkc9OjI3PUA1MDY3NzI1NT82NTs1NTg1ODo1NzczNUhSN0dPSzk5ND1FSkI+MUZDTEI5ODpHWEA1SFdJNjYyMjM6RUNlWD8mX3lpX3o+Pjk8Ozg4OzxAO0JRS0tTWVBUY2J5bWJ+kYNvbniLeXp/e4F9h3x8d4aFgHNwhYJ7dXd2dIWChH1/kqain6ail4qdkJSXi4qol3KKs42EqJKEmZSFmo2jlqCYk4mbnqKTqbCfkZWRjo6IloxvjbeEmsTIsp2ipp2cmJaRspBkpM3HlY6Gh4mQko2Nk5WKhYqKhpaanI+RlZOHlZiEgJCMmYiOkKuXl6SjiJmelZqJj4eYl4qFj42Bf4ePpIiNk6ial5OWmKGYn5mTnJuisrSlo73BvsfGxcjIycLK08zN1KjS0dbW1tja1NPazn9ve2RgW1tbTEhUWkJCSEQ8Qj44Mzc8PDo5PjY0Ojo8OjcyPzo5MjlJOj42N0JDMzI6OTYyNjQ+PTQ7PjY5NDk7NTc5NDRLUTxKUUs5QTdCR0lANjRKRUxGPjs4OEVUQTc+XDg2MjE0OjtFYFhBRmF0aExjWj41Ozo6NTs6PTpFTUZIU1dTUkJjgkd2gY59fG1+iHl7fnuCgoN/d3eAg3xtbot/e314eHyFh4p+iqKzp6Oqs6KXp6ClpJaVrqKDkbiVkrOajaKhjKWcsKOknZmRp5aomayvpJiVlpWQi5ial6HAjqPJuKuco6aumJKbnbKdhYaoopyYhYmJjpWMi5OPiIGGh4mTmJWMjJSTh5SYhoSSkJx1kZmylpeloYecmZKPi5GKl5uJi5eOhn6MmJ6JkJCbmpqTmJeflKCdlJ6boLGuoqS4vrTFx8S9w8PAxs3KydOmzs3U0tDW2NPQ2LpvdnJZXlNdVU5HSU5FQUNFNT87Nzc6Pzw8Nz00MzY2OTc3ND41OzU8TDw+OzxCQTc1PDs0Mjc3P0A2P0A3ODQ5ODc7PDU1T01EUFJMOEA9RUFHQTU6SkVORUQ6NkFAQlM+OURPMzIzNTc1PXZcPFJcdGlaTV1TPD04ODQ2Nz06SkZER05aXFlKZmA7SYSLenpuhYZ6fYR4gYaBfnB4fX59b3ONen6CfHmGi4mGhJKmu6yosb2vpa2zs6mkorCsipq1naO5ppWtpZaqrbinpKOgmqmYqqSusKqamZyUlpGXoJiau7uuyqFqt7irsJWZnqOsk5e+o16qsoOKio2Uh5F8jo59g4aOkJSViIiTloyQlY2LjZeYk52ZtJeVq52KnJSRjpGSjJmbi5OekIuKlp+hjJSNl5mdkpuYnpShoJScnaWuqKGktLirwsjEtbq9vMXHx8LRocbKzc3F19bRy9SfbXdlWVdRXFBORUM/PUNCQjhAODg1P0c9PDY8MzUzNDU0NTRCNDk6Qk06QjtBSEM7OkA8NzQ2PEI5P0BCODc0Ojo2Pjw0N1RLQ1VRSjc8OklBREA0QUpITkJBPzZEQTxKTkQvVD0yNTQ6RUpcWEpaUW1ncHBEaWBLSTY3NTc6PkpAQ0lQZEhiYGJwSUCLin6Bc4aHfYKIdYOKgn9ufXx9f3B3h3eOgod8jY+MhoyZqcHAr73Gu7O0wL21rauztouosq6uvqubu6Worbm5q6emoqKko6qvsrGqnpykmZuYmJ+jpqWSpLqvqcC8ra6yuaWkqH6Ih5ytvbCCi4yLkIOOg5GPeoGIkI2NnImIj5eNjJWXlJGal52om7GakaycjpqPko6UkJCWl4+RoJGJlZujrJSWj5ScnZKgnZuYn6GUmp6mpaSio7CypsHGw6+wurfFxMO/zabHxMfEvdbRzcXKhXBvXllXXFlMSkJLQUZIP0FAQzs6NT5BPj01PTc+MzMzMjQxQTE3QEJOPkdAQ05DQT1DPTs4NkNDNUJJQjo4Nzg6NUI+NzlWS0RXT0Y4PTRLQEM+NEVLSE4+QkE2QkI/QlNFNThQMTQ1Ozw4O0Q+OUxqal07V1JkS2daVU43OUdEP0NGXGVGYGlnWl1dk4yMiXuHjIeDjHWHkYqBb357gn9xfoF6lXqSlJSYkJOWp7PGyb/BzMLDuce9u6+ruruYs7e6ssCupcCkq7C7vaquq6OjnqerrrWwqpygq5yhnJafsLWnjKO7u7bBvKypnbOlpKiUhY6qxMOkgouPh4iEhpWUjXqDjZGPkaGMjJSSjomXn5iTmZWXpqCvnIyrnI2Wj5GRlZWOkZWSj6CUh5efobOelJmTn6CXpJ6an5uglJiepaOmpqSvraXAxMOuqLe2ycO+ts+yxL/EvLPRysjCtHF1aVlVWWdRTEhDTUtMSkFCPkRFPDVBRTw7Mz04QjMzMjI2M0EwNUlFTj5JQEhSQEg+Q0A7Pj1GQTVBVUA7OTk4PDdFPjg+VkpDV09HOD80TEBCOzVKS0NMP0I/PEJGPUFITDkrRzwzNjc0NjRBPzdPYU9hRS89PjZrbGpgQDpIPj9FQmVaTWVcZVRiapmNloqMiJOQhol5h5SQgXKAe41/eIeCgpB5jaGWqJmambq9x8jJwdLJysLNvcKzrby+qLrAvbvEt6zBqayzvL+qsKqkpaSsrrOttrWhoLCfpaKZo7S9qpypvcKktrevrJSyrKysl4eaqqalkYKMk6WWioF1ipJ5hY6SkJ6gk4+Ti4+NlKOZl5yVlKOeqp6RpZqMj4+PlZaIfI+Vk5KjmpWgopy1pZCelqSjoaWdnaWYnZWXm6Sjqaeisqyou8DDr6Wzt8zAua/Es7u+wrmtwsPCwJdpdl5VVFlYSkpMSUZERElEQ0JETDo0REk6OzQ9OEYuMTIyNDJCMjZTSE88SkJKUUVLQ0RFOkVMQjw3RVY9Oz04OT88ST86RVVJQVdRRzdBOks6Qjc5Sk1CSUBDPjxERzxCQ089MjBIMzY2MTcwPUI6PWpqSks1UVMzU3BwZE47RD1ARj5pSF9YYVpjY1aej52Ol46ekomKf4qgk4R4hX+Vf3+QiIqRgJahma6npJjCvcfDx8XTzs7Ny7zCuLC6vLS9y7vDwra3vK2zv7m9rq+ooKmotq6tqbK3m5+toqehnqu3uKqlr7/Fsr26s6irtrSurpeWpaynn5GNkrLFp5aOfJKVfIeSmY+qmZiTk4+SlZOlnZOdmZOho6KcmJ+Yi4yPjp2IWpCXl5KXpJllmKKfsqWVoZWqq6mmmp6ml5iWmJSgo6ilnrarqbm7w7SltLbLwLiqtquyu7iuqLi6vbd/aGtXVFJTTUVKUk1LP0JIRUVJSEc5NkZNOz43PkFLLjMyMDI1QzU1T1ZOPExGS1JMT0hHST5JUT86OElTOzs/Nzk+RExCQEhTS0BXUEY6QT9HNkE3O0hNQ0U7Qz40RkU6QkFCRzkvOkEzNjAzPkdEOTQ9dGRNRztFKzpmfGdWOz5AQkZCcEVqSVJlYUxGpZScl6KXqZaMkYOIppOIgoeCnISDlZCQlI+aop6vvq+hxrzExMbGzs7O0sq/u7ayu7u7vs+1xL65ubezsbWzuLOrp5yrrLmqqKevsJikr6SnpKW1wLGsrLS/w7rAurSoura5tK+Wpa2vrqSLk5ShjXTCmn2XmoSOl5mMsZWbmpWSkpmZpaOVoJqWmqmdm6CgmYqNj5WcYEqWnJqUmqWWVJavn6+cnqOUrq2qpJmgpZOTmJiNm5+nopm0qKqzu7u7qrCyyMC5pqyrrbKyo6GysrSkbWtjWVdNT0pET1BQUjtIS0lISkNEPjpLVT9BOj1FTTA3NTQ0OkI0NE1XTztKS09VTlFKUEhISk9CPD5NUjs+PTg6PENSPkRIUklCV05JQEJBRjM+NThKS0NBPUM7NUVBOkE/PkhANSpCNTIsPmNdZzozNXRkZUBSNyYjM31oVzs6QkNAPVFFV1NzYldGSKqXmaCiqK+ZkZeHi6iWjoiThaCHhJ2Xj52gmqOktcm1qcW5wsTIysnIzM3Hv7uzrrm5wcHMtci6wrm1urCvr7O1pqObqrS1qqmmrayapa6lpKisur+orLa4v8LAvrmzs8Wyub6tpK+1rLmmiJuXppt2v5+EmZ6Ok5qajK6XoZybl5San6GpnqifmZqqmqGnnpiQjZGdg252kqKalZ2inZGusqOrlKepl6qso6KepKeSkZmch5Scop2Wsaapq7m2vbKyrr65t6Cjp6ilppybrampi19iXl1PSktGR01KVk09TkZPS01CREQ8UVY9QUFCRE8xOD03Nj9CNzVVWE8/SE5RWVNQUVVLUUpKRUFFTVE/Pz04PTtHUjxFRFFCR1lNS0FIREU6OjM5S0lCPkNCOTlDPjxAPjs7RzctMj4tMYJoTnpcLzBraGA8PUJCODZ6Zlc7Oj0uLVJgTVVIfmVeSEWrlZuin7uvmZSgjJOrm5GSk4mrjYahnoyjrJSjpLbGvrTAucLCx8nFws3Iwr65sq+6tcHCyrXGssK8tbqqqK2tsKKjmKq0u6appquqnamvp6Oqq727qK29tbi+x7y3trnCsr/Btaq2t6y+pY+jmJKioL2fiZqhmZefno+3n6mcpqKbnKGaqKSzoJudppyoqp6YlZCUm4uWiYykoZSdop2gtK+lpZKvqpmqqZycoqKokJSUn4KPnp6blamkoaGztLq0rai2srOenaOlm5eUmKqhnnVcWl1cSEdFRkxQSU5FR0hDU0xKQkVHQVdTQ0g9QUdRMTtCNzpCRjc5XFlLQUxQVFVTTVdSTlVKRUBKSk5POURANT08TlFDPz9QP0VaTUpBS0RHQDUzPUlHPz1FQTk3QTs8QDw8M0A8Lyc7KkiRQjpTSjAsW29XNzE8Kh1CgGRUNDktMTlmXEZDQ51wYkdFp5ekn57DrZyXpZiaqpyWmpqPqpaVp6aVrayZoqu2xMO8vrbBwsDHxL/Mxbu9ubKwubO/wse1v7C8t7m2pqSrq62goZmqqsSipKmrpp6sr6uiqam+t6etv7K5t8e2tbm5wLPAw7i2s7SwvaOXo5eUnJSuoJCio6Wjo6CQvaWpnamrnJyhm6WevaKZo5+iqayhnZeOlp6TnoePhI2Tn6SgnrWsppyVsKaZrqWcmaicn4yYlJ6DjqCZm5KlpJqYq7G1saqlqq6sm5igoJKOkJWonpRlX1dfW01IR0lOTEhGRElBPlFJQTxHSUlcUk9LPUlPVTVCRjk+SEc1Q2FbS0JOUlVXVlFYVFJVSUA4UlFQTTpHQTRDSFFTSUM7Qz5HVktDQE8+SzwwNjtHRj47RkE1NT85Oj85OzE1RDAtLC9Ndlw0S1o1LE1uVzwtPSkeI3piUTVDS1E5bVFGPEt4ZWFWS6Kao5yexayhn6yfnq6gkqOflqSgpqmsmLaxo6qztsXEvb+1wMK7yMK+yce2uLW0sbO0t8HFtr6xuLW5tJ+mrKqsnZ6epaTBpZ+praCkqa2voqaovLWmsb25t7bEsrS4u8C0xcK5ua+ztbWjnaWVkpShrqCZop6pqKyjmsKsqZ6srpubnpmmoL2hnaSYq6uspqGajZqfkp6Jjld/lp+loaC4qqaTmLSinrCfnZmulZ2NmJOcgY6fl5WNoaOWkKWtsaupoqKlpZWVnZiLjpGSpJ6IXmFYYl9LR0pKTkZFQUdLPz1KQjk5SktOXVFRST1MV1w5Rkk9RE1JOEhiXExDTFBTWVlWV09aXklBPVdRSkw/SD81SExYU0hBOkBBRFBIPz5RPks3MDk5RkU7OEc/LjY+Nzg+NzcvMT85MSUxUVVtW0pPMTA9Z1dEMTc9LSt3YFM2U1trV3FHRTY9dWVcS02enqGZn8SopqG0op2zqJOrpaCjn6yprJ27sKistrHHxcHCssPDvcbDvMTJvK+wtq2wta++xLS5srC6tKyZqLGpqpqdpaGnwa2brLGbqqOusKmkqLy2p7e7vrC3xK2zs8PAtMi0vListLatqqKmlpWVpKyin6Cbp6uwr6+7saagqaiamZiToqO4oKGjkrCwrKWmn5OinpWej5CNlZ6bop6ntKemjJeym6KtmZyarI+dk5WSmX+RoJWOjZ+glIulq6+lpqKcoJ6RkpqThYqRjZudfl9kWWZkSUhMSVNBQ0BJSDs7Rj85OU9OVl5SU0o/UF5dPUhQQkxMSTlOY1xMRUxSVFlbU1VPXGJIQT9aUUFIQUtCN0ZFTEtNPztCSEROQj07TkBBMy85N0NCOTdGOys2PDQ2PDI1LS80QDErJ1Z0U2VPPzEwNGJbTTIzPjA8dl1eP1tUXWVwQDg7SJZ3ZUE0nqOfnKDDqaSqs6KktaqWs6ynoaSyrK6pu7KtsbW0xsDEwrTAxL7JxLW/x8G0q7WosLmsv8OzuK+ttrmlmKqyq6uYn6aXrbu0m6iwmqygrbSyp6u5sqi6tLmzucCqt7LEvrbHqMCvrre1qaesoZiXkqaloqKYmaWvuK6ytbagn6mkmpSWlKSgt6KlpZawsrKnq6ain5qam5WXqJ+gmKGer7Kipo2WrZikqpaXnaKPmoySlpiFlZ6Ti5CbnZOKqKiqoqahmJ6Vi46Zj4GFlIiTnndhZ1tqaUxPTU5UPUNBTkM6Okk/NzdST11eUlZRQVdgXEJKU0hWS0g6VWRcTkZPTltXW1JQUVhdR0FCW1BCRz5OQzlIR0hPUD8/Q0lCTEI8MklBOTQxNzdCPjs3RTcrNjkxNDgwMS0vLjw2LSNCcWdzazIzLzFbYlozMzgwNnBbYkgwNElvZ1VDV0aMeWZDO6OjnaGmv6eor7GiqrWrnrqxrKOrtLaxsLm3sLe4uMW9w8e9vcTCxsC4wMXAuam2pKy7rcDBt7eqrbK6opStsa2ylqSnkaq5qp+msJyroK+0s6uptbatvK20s7m3rLixw7vAwKfEq7G3r6mrq6eemJmroaKhkZihsa+zrLC5mpupn5qXk5inoLeppqOisbG0rLOoraCcoKCbnqWcopedo7Ovm5+Qk6SZn6eZk6Gdk5eIk5aSlZackoiQmpiUjqiopp+inJebkoWOmYt9i5WEjZloZmtgbG1XUFFbVUFCRVRAOztJQTc6WFBkXlBXV0VZX15OTVJOXktKPlljXk5IUE9cVVlQS1RXWkk/RFhQREY/TkA9SUdHUVBCPURFQk0/OjFEPzc3NTQ3Pz05NUU0Kzc1LzI1MS0tLiwxPSonKz1ccD0+MS4wZFpkQDE2NDdnWWBGKD84bH1nW1Y7iXtjQz2nn52iqr2iqrCspLK5qqa2tayhrbW9r7O4u7q+t7fAwr/JxLnEw8C/t8O8wLautaert7G7vb60qa6xtp6Wq66nrpemqI6nu5+krLOeq6KxsLOsqbW0tb2usbK1rLC0s8G7xresvbCxuKytqqOypp6lqqCkl5Can7Oqs6urs5qdp5yblo6hpqW0rqihra6usai0rbKqpJyfqKSelaKZm6i1qZeZkZGdmZ2fnY+qnJWXhJSWip2Ym5OKjZaWmpampaOgnZaVl5N/j5SFe42SgouUZGpxZm9xXkZZZ1ZEQ01XRFo5SEI2Pl1RaFxOWl1HW15eT05SWGRKSkJcYl9QTE1PWFdYUEpWVldMPUVVSkVEQU1AQUZISFFQQTtHREZLPTg3Qj02ODcxOT48NjVEMCs4MC8wNS8qLC8tKj0sLCUyKyo1SzEvJ19fYFUxNTA9YFZeOCpDM1lVXGdLNox6ZkxApJqhpa23payqpq+ut6qvtryop7G3xrextr3Bw7W1usS+zMa5w8C5vrnDt8C4srSsqbq2urm+tKmtsLWXmKesqaybq6uOq76dq62xo6ugsa2zrq21sri4qq6vsai1r7W7vMqzqre2sbSvrqahtKCbqa2gppaWm5qyo66hpq+XoaSampOOo6aos6qip7Otq7alr7G1r6OZnaynmpefm5mrt6KXk5COmJyhl5aTqp2akn+Rl4ydm5iWkIqUkp6ZpKKioJiWkpOVeouPhXuMioKKkWptd2x0e2FGYWtZSUdaWj17SkZENkFiVGlbTVxiS1xdW1JTUmJgTEtFX2BgUUxJUFdWVU9HV1ZVTjpJVklIP0NLP0VESEhRTkE/SEhIRTw3PT46NzU2MDk/ODY2QiwtOCwvMDQsKCwvLSo3NigoOS4kOks1LiJVX1RfLzUoQ19RXC4qQS9KR1BbRzNjWVVLRJmXobKpsqqspqSvrraquLa6pay0t8q7tLu6v7+1s7fDwMzIvMO8tb2/v7e+vLG8rae6ube1wraqrbC3lJanrqupo7CplK+6pKyxs6eoo7K0sbKwtLG3s6mvrLKnt6+3tMTGt6m2t6yxramno7agoKiyoaWVnJqVsp6onKCqjqmjnpuWmKampbioo7K1rKiyqK6xtaukmaCrqJucnpyUqbiclI6OipebopePl6Sfm5SCkJWPnJuXlpWIlo+XmqecpKCRlpGQlXaEj4d7hIGDi4psb3Z0e35cTGZtXEtOY1w+YntHSThHZ1dmXExeY01ZWVdVWFRpXU9PSGBdX1BKSFFWVVJLSFdVVk04TVpORUBGSz9IQkNLU00/P0xPSEA7Oj47NjswNDE8PTQ1OD8pMDcpMS4yKSksLC0rLTkkMDQyJTlCNy4jQU5HZTI3J0diTFYlLUEuPUVMUTwzcmtJQ0ORmaWvpa2vq6ilsbO0q7iyuKGstbnJua3Bu8K4s7G1wsLOxb/BvbO8v766vryyw6ipubC1tb+8rquysZugp7GtpqavpZ2yta2qsbGsqai1u620srSts62qrKisqbitsrDIwbmlurGpra2lqK6xpqWkr6SpnJ6dm7Cao6Ojo5Gtn6SgoKKrpqe6pay2tqarrKmtsLWuo56jqKqboJubkqOzmY+JjYaQoZ+UjJSbnpGRg42Skpyal5WUh5eSlZmnnKCejJORjpB3fY6FfHt8hYiIcHJxfXx8XFNkb15OWGZcRkSWW0c7Tm1YYlxNYGJOVldWV1RYZ11RUkxjWVtUS0dPVFNOR0lWU1xOO1BeSUJESEpBRT8/S1NPPjpOTUM8PD45OjU9KzMyPTYyNDk6KDQ1KS8rMSgpKywtKiY1Ki8mMCkzODoxJiozQmM6NipIZUhKKzpHPjNCSFMsPpBrO0dIj5yqrKKqsaSppbS1srW2srKirK69zLqtwLrHsbSttMHD0cXGvsCyvsDCu763u8SnrLassre8wK+rsayfo6etqamlsKOqsqqwq6+usK6rs7yntrCyqbKpq6Wlo626raqyw7q2rbupqaisqaexpaqlo6+qqKKfnKOtlaWemJ6ZrJ2ip6miraakrqy4s7KiqqOgq6+wrJ2fpqepmaSZmY+fppiHhI6Ji52gjoqMlZqNjYSFj5SfnJSXlYaWlJOXpJydnIuSkY6Jfn6HhXx2foWDhHJxcId0bF9aYW5iUXJwXEs8hXxGP1h1WGFaTmRcTlZWVVdRXGFeU09OZ1hWVktHTE5SSEVJVlJdYzxQXUQ8RkhIQkc/PUpQTDo+T0o9OT89Mjo3OyoyNT4xMDQ4NSg1LyosLjMwOyksLCclMjM0JCwyLTg2MCkoMTtcSjAuSmdERjg8Qi80RUtYMkCVWT1MRZaYramiq7Ocqqqxt625t6+spqurvcm8sL22wq+xrLPDw87Pw76/s8DBw7m/s8fDq6+3rbK4v76xrK2rpKeqsKioqbGltK6qsa6tsbG0rLS8pLezrKyuqKugo56wt6uqrbq3pbe2pKqnrKuqraGpp6eysqSnpqGhrJeqoZWboKaepaKqpK2joKexuK6upKajm6qsramcoaSjpJigm5aPl5yTgoOPiIWboIuKjouXjY6JgouXo5uQkJuMk5KRk6Oam5qKj4uLfIaBgYN6c3+Cf3xydYukh3hrX2BtZVdkhmNOP2eTTEVieVdiWVJlVU5WVVZUT1xdYVVLTmhWVVZJSkhJT0JHSVNRWW9BTlhAOkpHRkVHPj5FUUg4Q0tFODdDNzI6OjoqMzk/Li80NjMpNCsqLCsuIzQuLSsmKCs3OSomNis8LTIsJjA2VlouMEpnQUE8PEIrOkpPXjREhz1HRkSXk7Cmo6uxmKuqrrast7OspqyqqbzAwLe4sry1prKww8nL0b/Auri/vsG5wbnAxKyxtLGzusC+srCurKurqLaqp66vqrmwqLKxrrKtt6q4uKa0tquspKmqnaSes7OpqKS0tKC3rqCqqKqoq6egq6ypuraqq6qqoqqgrZuSqqGdoKWipqOqn52ota+ppqujpJmlqKepm6Kjo5+ZmaCQjY+YjX6HjIeDnZ2Gg4mJjYyOi4KFlaKajY2akJKRj5Ofl5mWjIuDf3WHgX+AeHSCfnh2fYCHnY9vcWdmb3dcYHKHak9emVZIbnlVZVdRY1BNVlRVUE9YWmJVSE9pVFZTR09YVUk+SUhPUVB4TE5XPTxLRD9AQTxAQ1VDOUFLPTU7RTEzOzo3KjQ6PSstMzQxKjgqKisqLCkpKC8qJiklMzssJDIpMjAyMSUvMVBiMDI/Zj1OWD5DLD5MVF8wSmk1T0Q8l4+xoqasr5qspq2wtLWwrKawqqm6vrvAsK25rqG2sMnHyNHAvry6u8G9usK/vr+tsbGxtby7wbGxs6qzqaS0qaaus7O5saOuuLKws7usu7Cprbasqp6qq5+joLauqaGfsLOitqqeqKeqo6qhoq2tqL2vrK6toqiooKyZkLChmKKhp6ifqJuaq7Gqo6CuoqGUoqSjp5iaqKWYl5iej4qHlIh9jYaEhKOWhIGBioWOi5CDg5OfloiRnJCTkI2RnJSXj4qGhnh0gn98dXh5f3lycnhmf4akdmlfZGmAdGaIi3xSWHBfSnhzU2RUUV9NTVNaZk5MVllkWEdSaFJRP0JOUWFROklITFNJcVFMUzs8ST87PD07QEBXPDw/SDczQ0IxNTo5My01OjopLTMxLS01KSgrLSw0MiMyKScsJS47LiYxLjAtMTQlLDBLZzo0OF89YWQ/RjFDUFtbKkhMOVVANJKQs6Glp62kp6Stp7WzsqulsaequL7Au6+nuaqmr7HJx8jRw7y/vri9vrzIusC3r6+zsbm7uMCzsrqsuKyitKeorbO3urOoqL62r7e+sL+nray1q62cqa+joKWtrKicnquzpbSomqqnqaOonaOpqKm+q7Swrp2qpKGvnJuzo5aknKWmoKWbm6qspqCcq6Kck5yipp2Yl6ipkpialJCKgo+Ffo+DgIidj4V+fYuHkI2Pg3+TmpOFk6GMlJGLkZuSlYeJf4Bye3p+fGl4fHlzbm97ZoR3hYpkYWdfcoR6bGZ4XV5UP1d7bFRhUFFZTExOcnVdSFpbZ1lFVWVPQz5KTkRDQTlIR0tTP2phSVE4PUg8PDw+Ojw/VDY6P0M0NUg+Mjs1OTAyNzw1KC41Ly0xMScvPktIMCUaOTAlLCwwOS8sLCs2JzE3Iy0wR2pJMTRYPWZiQUo3R1NgVSo9OUNWPSqQlbKaoKGqpqWiq6W4s7SmqrGmrLjBvbWvormtqKiwwsrJzMG2vcC0t7+6yLTCtLKxtLG8uLm9ta24tb6sobOnq6yxtri1rJ+/vaqzwrS9oa+ytaqsn62wo5ymqaqknpulsaewoJ+rqaehqZylqaGtvKiusa6hq6Okr5+fraaYn5uhpJ2gnZukq6Obm6WllpeVoKOXm5alrIyekZGRi4KKgICOgXuZlIyIe36Lho+Ni4mEkpiQhpSjiZOSh5GakZOAiX15bH52eXhjfHpwbm9xdmd/cmqEZ2VnXWxzjWxgaHBgbz1beGxVXU5QUktKTVRaV01cXmxXRFdfT15PSE1ERjs3SEVLTzxyaEtLOUFFOzs9Pjs7PUo0OUI8MztHPDQ/MTgtNjg7MigwOS8sNC8uPS0qSz4pHTQ5JicuMzQuMCsvNCYsOiQ0MUFoWTE0Uz1lX0RMNktWZE8qOzFOVz0jlJqtmqCYqKSkoKikuLCvpK+wqau4wbmyrZ+5r6uotLrIy8i+tsK+r7S9t8S2wrGtuLGzwLS7vbeoube9qqO0qKmrsq+6saucvb6msMG2t6KutrWnpqews6CepaaooqWZn62oqp6gqq6moKaYpKmgsbmfo7GvoayhraWcp6epmpqbn6WWnZ2bn6unl52hqpOalJmflJmWoamRmomOkIZ8h36CjX18oIyNiHiCi4SJi4uFh5OajomVnoiRlYKLl46RfYV8c3B+cnR0YHp4aG1vb21ofXFje21pZWFcZIR+XllzanJJSH5pWFlNUExLSFBSUUlPXF9uU0RYWlJnTkdLRUY1NkhCTEk1WmVKQDZFQjk6Pj0+OjpDNTk+OjNARjwyQDIzLjo7ODMmMjwwLDg1QiopLUIqLDQ7Tk5AOzczLS4rLTcqKjwlNTM8ZmQyNE0/ZV1GTz1RWmdIKj0vV1Q1KJefp5qdl66hoaGlobersqa0tKqoucS0sq2gt62urbC1xsjAtr7BubC0vLe+u72vqr2wtL+wvcO5qbu6t6entamorLKttLGonL+4pq69uLOfsbewqaWnr7GboaShpaWgl5uvpqGeo6ivoZ+hk6Wlo7ewoaaxq5+so6+YnKqlqZ+Xmp6mlJudm56orJqdn6aXl5iWno6Tl6KoopCJi4+GeoR+hIt6j5eJjYZ4gYeDh4uNhY2TmI2PlpmKj5d+hpeNj3mBenByd3BwdF95d2Rqa2pnZ4JsZXJqa2RnV2Fyf15Za3VpWEV9XltYT09LSEhSVUcyOV5ebVBEV1VZZUxISkVFMDdGP0tCNklKSDs2Rjk0OT49PDk4QDg7ODo3QEk+ODw0LTM8PDc1KDU+MSw7QTEoKzY8IzhSPSoxMTM+RDUsLSc0Mis7KzEzOWNsODRIQmZbSFRDVF1oRS46MV1RLDKXpKOYlp2rnqaho6G4qrChu7ilrL3Esq+uorWwrK2vtcTEvbO+urews7m4uri6rq2/s7S4r7/BuKu9urSlorOrqau0ra6zpJ7Et6equLesn7K7qqelqK+rmaOnnKSmlJihsqWZnqSpqZyhn5SmoKS5qKSnraaepaGok6CpoaGhmZueoZOcnZeho6ycnJujlpOWlpyOlJOjp6SQiYqOhnmEfIWGfZ2NiYqGeICDh4iIkYWUk5KMkZWUjY6Ue4OXkIt3f3xtdXNtbXRieXRoZmlmY22EZmdoZGZnaF1kYmllWmV6YmBQclRbW1JLSkhJT1NAICppXmpMQ1ZVXmBLSEdFQy46QjxGPDZLUEQ4OkQzNTc9PTg5NT86OzQ+OEBMPT45Myk4Pjw6OSo2QDMuRTQoKyw+MC1PPy4rLTctMTE5NSwmLjUtODA1NzZgdEIzQ0RoW0tXR1VgaEIzNzdgTCcyn6Slk4+mp5yfnp6ktq2oqrq3p6zDwLavrKK1rqevr7fBwL2xwbexrrK2tbm4tayqvLOvsrG9wLeuvLywpZ+2rKantaqrr6GhxayqqLK1ray0uZ2oqquxpZidqp+npZKZpa2imJ2kqqGboZyYoZ6nt6avqq2hoZ6dopWhpp+ioJmcmp2Um56Vpp+uo5mYn5aVj5WZjI+YmqegkIeKioh4hXeCgoKdh4qCiHt/hYiGhZCElpWPj5CRkJGNknuDlY+Fc39+Z3lwbGtsZ3VzamFmY2Fzf2FkZWZkaGhhZW5ZXVhcbGNhTWdXWmBWSUhJS01SWD45YGxpSEJVU1xaSUdGRUEuPD85QTg5UkdANzpCMDM3PTc2OTM6PDk3OjlETT1CPDAqPEA7QTwtNUIzNz0rKywvQSpKSy4vKiszNzIyKDU3JCs3LjcyNjg1XHlOMj5IaVpMWkpWYmZBOjNAYUUlNZ2loZKNrqGamaCXpbSyo7K+t6Gxxbu5sLGjt6urrqm5vr27rcCyrq+utq+zubKnq7mwr660tru2r7m+raaetaugobKmq7CgpsWhs6awsrG3rbSdrK+srqKZnairpp+Vm6emoJmlo6mdmp+blZ2drbGmuqiuoqGam56Zn6SapZ2Xn5iblpqhlKqXramclZ6dlI2Vmo6VlJinp42MiomOe4F0goKLmIWGfIiIhIWKjIiThZSck5KQkJGXj5B/gY2Og2+Cf2d5bmlsamdxcmtaaGNhcX9gZGdqbmtlaWVjbFxsbHVxYlNiaWNlWklHTE1PWVFQVWFlgVRAVlJaVUZHRkVALzw9Nz82PEZOYTg6PzI0OUAzNzgyOD83PTg+RkpARDkyLT1BPUE9MDVAOUAxLSsuMzw7SzYvLissLTI0OjUjMyopNi41NTQ2NVp8XTE6TGpbTVtLWGRjQEExR2BBJzSUo5yPj7GdnJWhm6mzsJ+4wLagtMG7vbmxprawqa6luLq4uK27sK2rq7eqtbmtpLO1sa+psba2sbO2u6epoLaqnp+ro6qunazEma+msLG3tqyrnrCtr6qim52kramblZ2npJ2aqqOllpqgnJKco6yrqbuepqSgl5qanqGPa6OWmZ1xg5idpYB2kqypn5aXopKKmJmAl4qfjniFko2CbGl+d4RxbIaKhn2Ei4ZvXWRhZ4SYhmyLkJSSdXmLhH+DkH9miIFodmpmWFxpdG5NT2liZXCDZl1kZm5raF1bXImQhIhoT0tEOEZUZ15KSFFQVVZLSFJhcHRlRltRVVBGR0ZDPjE7PTY9Njw0Zlw1Ojw3NTtENDg2MDpCNz86PkZMQ0IzNDM9QEBAPTI4QEU9MSwsMDg+RzcwMS4qLiovNjY4LCMxJzIxNDoyODZYgWwxNU9rXE5bS1tmYj5HMU5fOysuj6SbiJaxm52UoZyqrqyjvcWvqbfCuL68rae3saarpLi0s7Swua6pp6y0prG1oqe4trWop622s660rrSiqp+0q56jpp2nqZywv5Wop7C1ua2to6isq6uloZ+coaiom5iipqacnKeonZOen5mQn6irpLWwo6KjnJaYmZijiKGPkpqHoYiVn6KApYCorZ+UlJ6UiYRyeI2Og4igdYeMaZaIZn5zeKBvh4eEfox8f6GgoJmAfIefdIiOdpuKa4eCg25pZWR7bXJiVIZtZG1pmHFYaW9thlddaFpralqIcGt5codoh4RZXkZOPkZeTUZSVlZRUFJXVGdeTVpMUlJQRUZHPjw0OT05PDc7MDw8Nzk5OjY9RjU4NjA8Qjs8OT1GUUc9LjU8O0A9QD41OUdBODIqLzE8STovMDEuKi8oLTQ1ODMlJjIxMTU+MTw4WIN0MTVSa1tPW0xbZ189SzFUXTcvKI6nmISerJ2amp2fq6qoqr7Dr7K5vLfBv6qkt7GqrKa0ta6vs7erqaWyraW2s5ustba1paaps7GtsqivnqqhsqmgpaWcoqWesbiVpqent72mrKapqaynpaGfmaGopJqZp6OkmJylqpeUopyUk6Smp6G3paOfo5iVlJiUnYiukJiViqqMmaSdhrGBpa6flZuhl3qC1KiAh5TAm8Z4d7Glt5dkgMCcv3mEhHmPg3yQkJHKcZa8nMV7cranupB7gmyXsauxeWlsWLGub2ZqvJO8bmd5bXGP2H5Sa2K2sn1+cJV1mqGqkFZOV2FPVk5HVlxYUFBTi1xXW1BBXERQTkNGSTw8NTc9Ozo5Oi49Ozg3ODs5PkY2Ojc0PkA+Njk/RVJJOi41PjtCPD9BODpKPjUyKjIyQUUvLjMyLisvKS0vMTg2LSAvNDE2QTE9OleDdzExVGtcT1tNXWdcPkwxWVo0MSGPp5SBqKqfmJ2epa2yqrDCvbK1wLW3v8KrprSuramosLWqsLa0qKimtqaoua6csrK2qqWkp7KvrrGnq56npbKloqKgmJyiobKvlp+kobW6o6mooKytpKKdmpqjqaCYm6mgn5eeqKiRnaeblJ6ip6OhsKOen6OWl5OYkpmFr2tqjI6qf2iFloetZnGfnpWbqZdxrqGkf3e6fGugj3axX2q0W6WAZZyQYGaBemZ/aXhrqmW+c2emjHaxanyxeHWSlGNtbaduXISgRWlniJZFdZxffWZ7o6eCWV+Lq2h8jHd7aqg4Sq9bWFRsY1pLT1lgXFZWO06IUFdWMElTU0pDRUY9PzQ2Pzs4OjkwPTg5OTk6PTxEODs6Nj1BQDY8QEhRRzkwNzxBQz5ARDhARz0xMy0zM0UzLy41My8rLyguMC46Ni8nJDIwM0IvPTtVgnYyLVZqXE9ZTF9nWTpONV1XMzEbkqOWg62npp+jpauyuK20vb6wt8WyuLrDp6mwrLCpqrGvpLG7saWlr7OjqrmpnbKysKOkoKqtsKyvp6igo6OxnKSemZeZnp+wqZicoqC1s6Gqm6GtrZ+dmpeho6mdmZ6loJyZoaekkJ2impehoKyfpqagmp+hlpWRl5GbhrWbtXmHqZq2mXiItJu3f5SXmKyXf2uBpnuBhYaRlJJ3q2dqsVuse46HlHSJcI6GgX+IkZd4g4OLl4yDoI+FsHZ3n3Jra218i0+lWEhkZJl+Y2imX3hxdFKShl1QqW5jcHqFgGGdL1OibltUa2dgTEtdZFhcWkI+sHdXWEEjTWlFQkRBQEExOT44ODo4NDs6OTw5OkE6RTo6OzY6Q0I4PT9LTkg6NTpBRkJBQUQ8RkQ7MDIwMTtFLDAuOTQwLC4oLzMsPjgzMR8vMi1EMTw8U31uMytYalxPWE1fZlc3SjlgVDUwHJeglYm0pqehramos6yqu7fCsLzDrbm2wqutra+vqK+zqqKwvKuiqLato6y1pKWys6ijop2oq7OpsKimn6CgsJegm5eWl5uhsaWcm6Sotq+hqI6pp6qbnZaYoKapm5+dpKCcoKOlo5abnpianqOrnKaanJqioJeTkZSTnYTVk5m5cbHCf8aHfdaUnLt9nJeoko+djaR7jYahgKWCeat5j51Wr3uJfp9quVq5d4eEfaaDlHyZe6l5jp2Qe7FtjoR1kLyGb5VQr6fFilGgemNgqmFzcoZrlodeUrW0yIV+iXxjpDRDnXVdUGpoZFBAWGdZZGFKSE1qSlpTT1lmWkNEP0U/MDw8NTk8NzQ8PDg9OjxDOkY6Oz42OkBDOzZAT0xIPDo8REhDQkNEPEVGODEyMTFEQi4wMDQ4MystKS4zMjM5NzEjJTUqPjM9PVF3ajYqWWlbSltQX2ZUN0g6YVA3MiWco5OZsqippbOqpbWopLy4wbC6wLK3tL20tqiysaSytKegr7apm6m7rqOxsqGytLGhpJ6eqKqxqbSppp2en6yYmZmYmJeZpK6fnJeorbGpo56Oq6KnlZ2Ym6GnoZiioqOhm6KiqJyeoJ6VmZunoZynlZuan6GYkJKVkJ2Ism5otXKsiHCPp3K0dnS2e5yapo6QnY2jfo+eo32wdYKQ0tJ1XK58hX+kbpuqpmuHhX2tfZiZkHuxc5Odj3mzZZZ0hZ5vn2aUUsmLWsJcn3liX61fdnOFYZaIXVnKnW+/fnJNS7VTVcZkVVFqY2VYQU9rX2xpUFVGSDk9V1JbV1hIQj9KPDI/OzU9PDU2Pjs3Pjw9QztHOTtANzs+RDsuQ1JKRz4/PElKRkNFRD5JSToxNzQ2QD4vLjI0MjUyLSkuMjYsNzQyJh82MDs1Oj1QcWg5J1dpXEFOVF9lUDVHPWFNNjIuo56RprCtpam7raa1pae2u7yzu7+4uLW8vLSmtbWjs7KjoKywpZiou66lsrGctLiqoKWdoaqlsqisqqWanZupn5aWmpqTlaWropiTpquxpqGVkqyfpZKUoZylp6CVm6anopujoK6aoJ6dkJabo5+dppSdlZmjnpWZlpKbhax8eKh3o4+Lh6pwrYyFqISam6OLk5uLon6Rl4euhH+Bs1xyslOvfYKCo35x1313hX6PnoeZmnevhoqRnIh3tGGaZZuCgpVskluwV0uadZh5ZmCtXnZ2hmeXiGpdr3aVno93azV5yK6zX0NUb15nYEVQbF9wbVZVTS5lY2hSWVE7QUNATDo1PzkxPjwxNj85OEA9OkM6Rzs8Pzo+PkU5LUVVSkVAQzpNS0pCSEc+R0s5Nzw0Njo+LzA0MzMzLjIuLjE4Ki4zMiUhMDQ3Njc9UGtlPiZWZ1xAPVZfY042R0JgSTo3N6CdlKG3sZmzwa2osqeqs7q3tbm/urizt762pri1obauoKCprJ+VqbarqbKyq620pJupoKCoorWnpqqkmZ6VpaGUlJ2ak5elqJyUkKetsKWglJmon6KPkaKaqaWhlZqmqZ6dpJ+tnKCdn42UnpyfoZmYnJWWoqCUmJGnnYepfn+meaGPkISqcK2Ng6eGl6Gji5iXiKOBkIaUqnp/i515cLFaqIOCiKB4dNh/dod0qIKPm42SpHyWkJ+Ee7JenGSgfoKVbpNdq1xbk3+Rf2hnqmNye4BqmIZxXataiaCPa21kT0pDoVxaTXRdYmZNWmFfcnRfSlU1SpqRWEhFPUdFQUwzNUE4Ljs+MDVBNzhAPDY9PEY/Ojw2Pz1CNy5IVkpFQEg2S0lOQElLQEVOOjpANC47PjEwMjE1NCsqMDUvNywmMjEoJCU2NjcxPE9lZEEmVWZbPzFUX2JMN0ZIX0MxPTeinZqav62Ys8Kuq6yop7WxuLG1v7q7s7K4vKq7tqGypZ+mqKifk6yxqbCrt62qr6GYoqCmpaS6o6OsoZeckqOglpWfm5WaoqGRjoypsLCmnZaap6afjZKkmKerqJaYqaifoKGkrqOgnqGOlaGZoKCSnJeblZ6hlpaPrJyPrm5ytHSpjHeLpnS0enW0gpSnpJSdjYmkh451uG+Le4uia2u2WqGGZZeXaKCip22UcrR0k5l/s2qGkoitanW0YZ1mom+HkmuYXa1gTqF8h5FSc6NseX9+bpiGb1yvVjycd2VUb24uW6dPYlJrZWJsWmJcYHB8Y1NZUT4/bG8yQkJAPk06ITdANi47QDM3QzU4Pz8zOzxDREJKRk1JRjYySlRLRUJKNklKUD9IT0NGUD08RTUwOzswMTAvNzUsKywzMjYvIzAwLCwdMjg5LzlOYGVEJ1VkWT4vVV5hTDVGTV44MUE4pZqcnrqkm7HArq6rq6i3qrivtcG1vbKxu7iswreqrKGdp6SinZKsq6i2pLSorqqhl52ooKWruJ2jrZyWmZCmo5eOnqGcmZ+fkZSVq7awppiTm6yployUppqlraOSmKuzpKCeqKywmKGikJmhl6CblpuXoZOdqZ2UkKuZh9SUmrt1scSAxId+1pecuHmKkpmOmIqMp4d5orZ1fXd2wYOasmGDunnAfHW4YrWBjIepfZWCrKlxe391vIinoGmdYaaPr6J+jXWHq32+bnO8dLKDdXiBim2aiHBtjaR0vV13fVthebxqWlZbaXleaWFjZmJteG9YW1lDQUBxP0NHKzRIIic7PzEwPD83OkI5OT1DNDxATlpeYGBfX19aUFBSS0VGSjRITFJASk5FRk9CPEU4ND05MDIwLjg3LSouLzE4MCItMSwzHiw7OjA4TFhhRidUY1g8L1ReYEs1PExcLTY/Oaean6K8o5eww6+tqqqtsai5r7fFsbuzr7ywrsKyraajn6WinZyRq6Wqs6W1p62koJaaq5mnrbmdo66YlaGRpqCTjp2jnpmfmpCWk6+5sauVlqOnppSQlqWdpK2fkaGorKCcn6mksp2ipI6moZWhmpyXlaSZkLCgkpWqnoWQmbaAkpKNuJZ5g5ObtndubG90b3mPhI6Jcp7Au7yae4GyqHCBdJG5g3yGhouGjXuKh4yXfaS7ub2cdXmzo3R1l3V0sHWZnmaHao22dHNxd7aMXoB5fYhng3lsemKLrHB0hX5XW6dpRGRZVGZfY11jUWdmcW11Qk1PTEQ7Wkw+SjI7MCA4PjsuMz1BOTk/PTs8QzZCVFlaWltbWlteYGJgXVNHR0g0RElUQUtOR0VPRj9HPDc+NzA3MC85Oi4sLy0qOC8lJjIoNCQoPjcvN0tUX0cnU2JXOCpPXV09KztWVic9OjymnaGhv6aVssKzq6qorauqu6+xxq+1tLC5qLW5rqukoqefoJ2ZlK2lrquntqion5yWoaSerKW+p6Gql5WckaKbkpCiqKKUn5eSmJSytbasl52jo6KLkpKmnKarnZappaacm6GqpqaiqKGRrJ6Xop6XlpidnpCwqZScp6KPa39qnap6iXR/nI92e2aIe72+wLpvkoNxlIVfcmpaXpuKYWSHj5ZsYH+VY22cdmKVbICZlZRmXmBjcZuJaHKMfIaUZmp+cXR4f35jXHh1gWhQXG6EfHyKaldseoJySUpvhXBOcU1EVlxmYExaV2ZjX09bbXVqcVJPRERNPEhIPEw/MSwyQT84LzU/Qzw5O0A7PUM+UlZWV1laW1tcXWBhYWFgXFVHNUNGVUVLT0hGUElJSDs4PTUxOi4xOzouLy03Nj01JiIvKjIsJTs4LTdJUl5JJ1NfVjQpUF5MKDM+XE8nPzI+qJ+posGkmrO5tqOspq+mqLayrMissLSttqS+srOnoaSqnaOcmpqsp66kpbaqpZuYlqKcp62pvqippZWUm5agmpOZpqmokp+Qj5icsLK+q5qmnaeiiZORqZuppJycrKCjmpujp6yin6mhma6blKagl5Sdn52YsaWZoqiZnZKfnaSmm6ikm56bnJuRl4Job35xd5GXlJCEibSqjYWYlY+KjJmXiJSViYOTk5GJjpKUmJSZl5qfoZqblJ+bjYF6pIVranyRfYF1iouDcoJ4enZ2i398iWpzgXSDdWR3fXZrb3hsX2Jbb2dNWFlmal9XWW95bm1mU09GUzlQWk5STycqO0tCNjM1PUBBOTpDPjxFTlNTVFZXWFpaXF1gYmJhX15eW1RLQ1NHS05ER1BMT0k8Ojs0ODksMjs4MjApNklSTzgiKSsvMiM0Oyo3Rk9bSSdSXlQxMFReOis9OF1LLDwtQLKgs6K/oqOwsbegqqazp6WwtarJq62yp7amwai1oZ+lppyllpWhrKetpKS3rKCZl5ehmK2qpsGfrKSWkpyXn5iUlaOenaOok5CYqKiywq+Zqpyqno+Vlqmeqpyeoa2YoZudoqWvpqGjp56smJalnZmaoZ6enbChnaKnlpmUmpWipJikoJmij5iVi4uOkJiukHyVnIKRgYmpqIWAmJeLhI+giHuEkYWFmpGHhoqVj5uXjpGYnqOWmZKQnI1+jWWhs66FioR3e5CLfnh5enBneZGBgYhrdYF5iHJoc395dYOGgWp0YnhlX2hkY2Rmallre3BqalxTTFBEX1VGQD4+LDRARjs0NTs+QTs8Pz4+SE5OT1BTVFZWWFpcX2FjYV9eXl1eXVhWSktMQklPTVJKOzw6Nzg2LzM5NjQuKCYkLTEuLikrKjclKzwoNkNNTEQvVFxRMDVNWzE3RTRcRzU8LECyn7mvvq2rrbGyoKqmsq2jrLOwxbCrrqSzr7yltZyhqKOhnpmXqaeqpqWms7aflZWempqwpq6/oayikZGempqUkpainZepnYSdqaujtMezn6mjqpaVl5qnnqmcoKWslJ+fnZ+qrqikoqqhq5qen6GYpZ+cn52wpJmfqZSZmZ6Sppyaqp+cmGaFk31lf4+bkGN6jW1oanqQo6tqZZqYfmeFi2VlaWh6jaKOa2iMmJGid2tqi5mjn5hzbG56hIyGeVhlXYaCXmyLi4N3XGh0d3eSgIeBb3eCeH9zbXmEc3aIh42CemiEWF1qc2Rdc4lpanxybWNdUU5WSmRYQEkzPUY4P0ZENzE8PT9BQzs7REdISElMTk9SUlRXW15gYWFgXV1dXV1fXVpVT0RIT0tTTj0+PT02NTM1NTU0KiYmJSwqJS4rKyc2KiQ7Jy9CSVtKLjZaTzYpRVkvRE8xWUI7Py49pJ66vLmvq7Kwq6Wora+xp66usL2xqqmlrrCxoK2XoaSeopqapqydraSmqKqzrp6WpJCjsKa3uaWuo4+PmqKak5KboJmZppZ7pKuiqLTDt6Shpq6enZSeo5+knaSqqZKfoJ6gqq+pqaKpnqabpZ6noKyXopylsaWYnayWop+bk6eZoayaoH+9hIlztHOFn4ataHe5xLhxkqGjeqaZmXSrgn3LwMC6cYujh4OefZaYiJ7AvYKWnZ2NnMHBfIF6kYyawsB9aqWycI6Cb8p6gJt4koOOgHZ5gYB5cXuAhnB4hIqSeGx1kWJlXndjX2WBYl10aG1kYlhLVUlRWUhPRDJJRT9EQj4vPD8+QEE6OERDQkNFSElLTU5QU1ZZXl9gYV9eXl5eX19fXlxTTVBHVU5BQD89NjQ2ODI2NiomJSMpKiYuKyopMTAfOSojPklbTCojQ1AvI0ZbM1BZL1VBQjsvOJWhucO0r6+/qamUo7CqsK+uprK1r6ump6axq6CrmJujoJybqqejnqyjpamlpbSknqOUpq6tuLSnr6KSkZmdppORoKKYnKCeiKarpKutv7+woKiuqJaRn52imaOkqqOToaGdnayuqKqlo6Kkn6OknK2pkqSbqa6qnJ6rna6jl5inmKOkmZ5/zpR6e6WCepaXm1+tj12OqIChoXynlZt1q4OBr15kjKp7qIeFoHSXk4izY4KrhqCNjbNqhK90fJaHuGGCrVmjzW6Rdnvbe3+ZcX6IknV/ZXuIdnZsfodtfYSOkH1rgIxfcGpvZmBfeGRbcWhqY2ZgUlRTV15KT0M0QUhFRDg+NTtAP0E7PThAPj8/QkRERklKTE5QUk9TXF9fX15dXV9gYF9eXltXT1VKPT8+PDU1NzgxNjQoJyQhJywmJi8oJiszHTYwJDc7U0wrLC1KMCc7XDpMLSFQQEY0LjGswcDAtLSwt5iekaSqqa21q6ayrKyspaymsKqhp5yappicoq+foZ+op6OmoZ+xrJyelaaurbGrqKyglJKbn6WTkJ+ll52opJ6to6qwqL/Fsqepsa2Wkp6copehqqqflaGenZytrqapqJulpaKgqpKss5aloquqnqSop6OyopSbqJyhnJaVkZehcoaMmHaGqIdxsHydcax9oKCCpY+eeKuCfq1/nXKtf6yHhp92mJJ7fJd/qoiijJGMnH2reoiTj59/eq1WnMR7kHCTwX2BlW11cIxtZndlh25heG5yboeJj46CbI6NY25zdW9gZm1kX29pam5mY1hTXGBaUlJDOElIQEM8PjxARkRDRUE9PDw8PkBAQUJFRkdFQENJU1dZWlxdXl5cXl9hX15eXVtaUkM+OzkyNDc4NDUyJiMfHCAxJyAxJx8nNB41LSY3PVdKLTwoPTEpM1ZARiEcRztDMS4rr9PGx7Kzn52jj6Ojoq6vt6+psaeoqqmuq6ynoqSdmqOVn6aroKKmoKioo5+esK2Ym5aop6+tqKepnpeVmqSikpShrpqdp6OurKKstam5zLGspq2rlpScnaKZn66snZahmZ6eqbGoqKibqqajoaqar7GiqKyvppqnrKurs6STmaWnnJaThaRrpHWKeql1e7JxgqWKmItxiKCbh6RfYVKrhYCug5x1roKohoafepmXhntmgKOKpJiGgqN9qX+BlIauXnuoVZ2ikoJ7o5+AfMSwxYxzr7SzuXJiqa/CdGiLi5WNgGuWj21seHd3bmtmZWRxcWZ8aWNdVl9pWFhUTExQTENDQUI7Q0BAQkk8PTo5Ojw9Pj4/QT04NjtETFBSVFZYW15eXVxeYWFgX15dXF1bU0lCNjc5OTY2NCwmJCIgJychKy0iJC4hMy0mQERXSCxHKzU2KjFQS0wjIEE5RDQsJ8HJ1tbAoZmrqKGvop+xtLCvqayjp6erq6uppaagm6WfnaanpqSdrJqirKGkoK+jnpuTqqS1sK+hqZuclpWnpJGboqifn6acsKWiqLGstsextKmrqZWRnZ2hmaCls52aoZScnqeqqqKtmqqmoKGporKsoaqzsqGcq6qxsbmmlJilqZqdk32qbZ+EiHareXywboKki4iflpWeloHSuLS4yYGCsl9glKmDpYiHoHqYlpp5qsl0mqOUqKmQkpqMfpqJmsbGd2WhgqV0gqCOgn2vX2+1Y7F1S6OHbadHg5NkjY+ckHpulI58bnl0fHptW2ZqcnFngWleYVhjbVxeWUlMTEpFREJCPUE8QT9KOzc5Nzk5Ojs7OzMuNjxBRklMTU9RU1daW1tbXV5fXl9gXlxcXFxcWE1CNzU3ODUvKSglJiUkJiksNUZOUFBNRkxKVkYqTDAvPi00T1RRHRw7PEYyLSSnpMDHua2psq6tpaOcs7msq6Glm6imq6yppqCmpZiro5+vrJ2moa2an6mlnae2oKOYlKirtrOsnKacoJaQpq2Smpyno6Cqpq2goqapsLPBsbKprKeTiZedpZuipK+ml6KVmJylpamZrpyrpaSdq6O2rKGxubCenLCotbW2p5aZqqacoZCDnk53moKAn3uEo3yCpIOGpp+cn5SEuHx9ermDgM3Gw7Z4m6KSi59+mZeXinafl4qkmKSofq+FnIOehKx9mZRhpWyjcZCFkIF9loRyrGCkc3GAmmG8fVJVdY2RoZR6e4+NhnJ5c4R+b1tsbndzaoFuWmRfaG5iZF1LS1FTQUdHRkg6Oks+QjEwODg1Njg3Ny0qNT09P0JER0lMTlBUV1lZWltcX19eXV9fXFpaWllVU09IQDc3Mi4sKi4rKicmP1FUVldXV1lYWFdVT1RGPEUyOlBbVBwbNj9HLC0hi4eZqaykq7mrr6Ccoa2ztKafoZWlr66uqaeepaWapKehs66iqaezoJqppJSjtaOjlpehqbW5pJujnaOTkKKymZ6bpqWgoq+sm6OnorWxw7CtqaypkYeQnKedo6ScpZeemJiZpaOomK2hq6Kkl66lu6yit7aunp62tLqztqmaoLKjpqCIkNK1w7d6h46GkZOPgKZ3lKJ3jKGShaWDjHKriIa0bnNqmqSdloqffZeZh4eQc66CpZujjaaKk52IlJCabXCyXKVzk3qcbJl/e5l+bqlhonJzfp9ic7K4aHeOkqOWe4mJjod1e3iNgWxod2h4c26AdF1kZG1tZmhgSllXVzxHRj9TM0BGPjwqKDYzLjAxMykmNDo7PD0+QENFSUtOUFJUVldXWV1fX15eYGBdWltaWFVSUlFGOjIyMzAvKysoQFFSVFVUU1RWV1dYWFdVVVZUUU9RW1UlITJBSCQqJZJyjYqtv7+8u7Wel6ikrraiopmVo6qorqmrmaWin6agoLWmoqmnsaSUq6OPpK2knpGamqq0tKSdpZypkpSXr6CgnqajnKecs5ifqaO1qsKvqKqooYyDj52ioaajlZqanJiamKajpZepp6ugo5uspryslb2wrZ+jsrW7rbepnqy1pquafKiSfXyweIuApKWInG2xb6CHrXyij4Ool5qCrIqGrYahlaiho5iGn4GZloF7kn6rgZ2Zlourd52gj4iTkn96r12jgX2mp2WegHyXdWquXaVscoaZXWBbjKBtlI+jloCRiZKIeHmBln5pbH5ifXRtgHlgZ2Vwb2dnaEJYX1o9SlMyUzhBQUM3JCQzKycnMywgLzY2NzQzNjpAQ0ZJS01OUVNTU1ZaXV9hYGFhYV5dW1pYU1BPTkk4MTUyLiosQVRWVlZVVFVVVVVUVFVUU1NWV1dYVlVWUUhGSUokKSm8kpqEqcbDt8G0n5utoK65pqOOmqOkoK+uqZ+jnp2tmJ65oKOrobCqmq6hkaqppZeKmpCusa2noKibrZiZj62ioZ2loZmlnK2Xn6iltqi+rqSpo5+Lf46bmqCmnpKTmZqTmpmlo6KYp6uqoaKeqKi8pJfDrKujoq20u62wqaO2sayumnevf5CKnIaHfLqtiZhksIxklq59oZCEp5ecgq2MhrCHqJqkoqOShaBcbGuCs2B/rXx7goGybGdumZeLh7FafbVcpINryKJmn4F8u1l2tVqyfVOvgXqsWIChbZaNpZiIlI2Sk3l3jJt8Y3N8YoN3dIB8YWlmb25mZWZPVGJbQVNdPUgoPjk9NCEhLSQfMS4gKjEvMDQ1Nzk6PEFDRkhKTE5QUFJUV1peYGBgYWJfX1xbWFVQTkpHQzU1My4vQFVZWFdYV1hYV1dYV1ZXV1dXWFdXWFlaWltcWFdXR0I70p+zsbe+u7TCs6Ocraelt6mgi5mgn52ysaieop+dtZigs6iqq56wrZ6snJWvqaOOiZuOr6ypp6Oomq6Tmo+pmqGdpZ+ZpKKlmJ6iqLGou66kqJ6djnyLm5ahoJmPkZmbkZmXqJ6fl6etpaSkoqSoup+gxqemqaGstreusKmhv7CwsJiCqpOjro6bgIakl5iQgYC4w7qEj52UhaiZnoOsjISviqmdmqarkn/WvcKqYqS/vX1/o4KD17u4tYSUkoKevb6Ea6OCcKuFb51/erKxx4Nrq7G9rHl4or67dICUjKOZjZiNk5l3f4+ZeWJ8eWSMZniBe2BrZWpqYlBiW1JpXD9TYEJMKTw6NC8fHyQeJTIgHSQoMDQ5NjY3ODs+QURGR0pLTU5OUVRXXWFcX19hXmBbXFlUUU1JQz48QT81PVNZWVhZWVpZWlpZWFdXWFlaWllZWFlbW11dXFpWWFRXWruVtLSywLqyvrOina+nprOnnYyXpb+ptq+nob+mprGbnrGcuaifrq+lp5WUr6yXjIOaka6mo6yhpZyqoJiKo5OmnaebmqCoopidoKysqbitp6Oal5J7h5mRp5uTjo+XmI+Yk6mYnpaoqJ6opqCiqrqeqcWjobCkrLS1rLKso7+rs7KddXaqpLaFZYqgcGeskIqPbm53pZCboYJ2spyYcZGOcpeqpJuZsKVybW1tZot4b22DmnGBempxaWeJlpWXcmlphYdncYdkXotjaW9aXWd+eKZgYnKQknBmZICMkY6flZWXjZKaeoWNk3RkhndnjGp4fnlkbGNlbGJKZFdJalk5T2NETydKOSsjHCAbIiwpGBsYLTIuNTo0NTc6PD9BQkRFSEtMTU9RU1ZcV1tcYGBhXV1bVFBMSEQ9OkFCN01YWVpZWVpZWFhZWFdXVldZXV5eXVxcXF1eXV5dW1tVV16ola20qbq6srOrqaKun6S0qpmSvbHDx7y0qZ6/q6yjoKeroLqjpK6sraaOlq2qkIyFlZetn6arop+kpKCSi6WSppmpmpajqaCVnKWlpq65qquZmpOSe4SXjaaXjZGQl5SOl5Wmk52Wp6KZr6Wdoau5n7DBqKW0p62xs6ywrqq8p7K7mIyjqaW1nImXo5iHqZuQlJ2SqrSanKSuorWZpaOgo6Seo6Wil6ynjZOTjYeTnZ2VkJmTmJGPlYV/pJqXlo6MlJOKkIiFf2iMgXSDd3SHjHGnbX2Wk5SUgYGPj46Om5Gek5STnYCFk4twaI92b4l3dXx5aWtlY29jVWFYP2haR2FeTVcrRT0rJiE2NDAuHxwgJTIoKjc5OTQ2OTs+P0FCREZKS0tNUFBRV1VWWV5gYWJdXlVRS0VDPjk9QEFTWFtcWVdYWFhYWFlYWFpbW1xeX19gXl5eX19gYGBfWVlgpZapqqS1uK6vorClrqCht7GRjqrEvMO5tqmhpJ2bpZ2wqKS3p52ptaeokZiso4yIio+cp5atpKGaqJ6fk5akl6iaqZmUpqCjj5qnmKC0uaeqmJqQjXuBlYuhlIqVkZWQj5KXpI6emKeemrSjnKart6ivwq+kuKewsLKvq6y2vaOywJqTp6WmtKKSnaefjqmgjZKfoq2xm6Kls6uzmqajn6esoJ+enZitnpOaopyUkJermY2ZmpeQl5+Rh6CelZSGlI2QjpaNgn9mjoh1iHd6iYR0nGqIkpaVkol9jJaRkpaQnpCZkp2BhpeFeHGUcnmJf3F7fmpuZF5waWBcX1hsYk9fYk5YOUZGRD0yPD03LiolKykmHSY0MDY2NTg6PT0/QUFDSEpHSktMTVNTU1VaYGFpYWVWUEpBQ0I7OUVNVlteXltaXFtbW1xdXV9eXV5fYGFhYmFhYWBiYmJkYlxbY5iWpKijsLSsr6Oqp66gqLaqkY+bo7K5raqroaKZepyhsKSmsamXnLimo5SYqZyOhoqJnKOQr5+klqmgoZOXmZyui6uWj6iZp4yYqI6duLWjpZebjYl5gpOMm5OKlZGTkI6RlqGLnJ2nnZ23on+DrrWisLB1pL+ks6B5e6Kttb+Xd6+moYqAqn5kXGJ3oI+knoOWfm2UtZ2lqbGtpmagopV1e5yZcIGZqpltgKSpimWcpZyRmJmXjJOckYSdm5CVhJSIj4+Ti4Z5bJGIdodxfIaBgWFpiYyVk4xbdpWQZmiOjHF5oZWVZHiXhYB2l2iCiYJueX9rcGVgdm9ra2hbZGNhYGxQWT1NTU1SRj0/U0I5MC8eHyY0OjMwNjY3ODw7PkBBQkZIQkdHSUtMVFVVWV1fZ2dnWFFKPERIPDlWUltgYWJgXl9fYGFhX1xdX19fYWFiY2RhYmFhZWRjaGReXWaclqajobCxrKuqpqmuo6etpZKVqrSusKWZqaWqlnSLnK+gqKunlJe5oKCPnKSekX6IiZuejqyapJWoop6Ol5KehXWuj4immqiRlqOIm7mzp5+YmIuJdXeSjZeTiZOQkJOMj5KfjZmepZibsZWAjJu1nbSMko+9p6J+p6N7pbG6g46PqaCEjIWPsaqvjIqWo5p5gYushp2fo6mrqomWiJt3pZx7iJyBmKeEgnues3uKhqCYmZWYl4KRl5aEmppieYiShY6Qk4uEbnKRiHqCcYGBhoCHdIiGl5N4lmiTdKCadHuZgpuZhJh+kYiBgphpjIyEanh7cXBnZXhtaWxqW2NpaGRwWltIU0tQQEU1LVlTVDYpITA5PT42NDM1Njg7Oj0+Pj9ESUBJRUpLR1NYW1hbYWFpZllRSDlFTDw/YlZeYmRlZGBhYWBiYl9dYGFhYmJiY2ZnY2JhYGVkY2djYWFonZikoKaurquoraCpsaanqqWZk6zEvK+glKWntJ2Qg52snaeioI2Qvp6ZjZ+aoZF9ho6Yl4isnaOWoaGSjZSJhoCRqI6GoZyjk5adhp65saedmpKOhXB1j4mVkIqUj46bi46RnZCVnqOUnauHn7SJtJqui8qIq6+Kt4WNsISzsYapj6qajZ18qI9ye3ecjqaWaJWkebSMoaCoqpSawoOBq4mZoXKegJulfpeGlrKBoX2hk5+PmJiAj5SbiZmSi3yFlIeNlpSKhW50k4aAe3OHgoR9hXWGg5iCj8VmgKmHj6JqnYGdl4CZgIqMg4iYb42ShGd3dHt2Z2l2cGdoa15ibmxmaldkRlxRTDJFNDZNYGM3JjM8RUdEOjYzNjU4Ozg+PT0+Qkw/TklKTENRWl1cV2JeamxbUUU9S01ASWRYXWNmaGdiYmJiY2NfX2JhYmNjY2RpaWNiYmJlY2FmY2JiaZWXoqCwqamopqygpbmxqaummpSeoaSpoZSjqbaisH+gp52lnp2JlL2ak42gkp2QeYOWlpGIq5mcm5qihY+MdpubjqCRh52jm5aYl4aiuKylmZuMjH5ibY+Lk5CMkIyMl4uPkZ6Nkp6gmKGnfqGnh62doJaukKCenZGHgqGNrbKJpI+snIyafqJ2gJmUa4KrdU2reIeNnZOcqqmCqqt/haJ8e6dqnoCTbGeXhpi3iZ5+bmBjWIOYf418ZGeMc5l9eZdsXX2Yb2FUcoZdYG16hGBZZYJ+hYGZcqiqa4OjbnKlb5+Bm2dknmxabIl7ZVlfgn5hV1BvdmVvdHFqam9daW9samdXZk1cV0U4QTRHQ15rNCtJQ1FNTj04NDg1OTs2QDs7PkJPPlFSS01CSlxdX1deXmN1X01EOk1OTVRiXFxmZmlpYmJkYmRkYmFiYGJkY2FiamtkYmRkZ2RiZ2VhY2iYl52huaGqpKaskqK2vKuvopmWnqClq6ufnK20oqiSoKChp5yZjpi0mZCLnoyVi3WBlJKNiqaWlpien36ThYWso4eckYqYqJeZmpGHpa+mopWZh4mAaW6IiIuOjomLjJGLj5GhipKdn5qhpH+TgY+joZSgd5yWkKeDo6mAh6yvh6V6jX+Emn2icHOTh5V7nox5bYeci5qSnaqcj4edfoSidHemZ55+d6VfmHt9k3Oibpi3tLp0k4iCgLaoZIHGuHxxlbaMcoGbpGR0rKthfmqds35ufomEj4OMmHGAo2xyo3Kegn2jXpyZs5VwfJees3RyW56ygmlicXR1cWhvWGprcXBkW2dcYUtDPUQ1UUFZcTI8U0dfSlI9PDM5NTo6NkM8O0BJUD9UTk5RQERfXltaV2Bge2RJQzdMV1VWY2FaZmZra2JiZWFkY2BhYmBkZF9gY2tuY2NkZGhkYmdmY2holJaVpLmZq5yToI6luLatrqCaoZuio6SsmpqxrKuTl6GZoaWampSerJuLiZF4i4VxgJaNiZChkJOUnZd9kYqOqKCGmI6JkaKTm5qMi6inpJ6PloeEfmt7hn99j42Di5CQiY6Tn4GVm5+coJ+LiXecmKKNoHKhjImpiZ2okpmqroGujX56oJl5o5N4gHOXh4ycfZWfh5uOmp2oiKNkoX6Ml5CbjW2eaJuOb5qZe4CKp31yaHSrg56Dc6pnlJpdm4V2hJ1oqmqAuWZcqXCBnGGVjF+ndneKi4CdaJp1h5OSmI1+nmyYj2qmmVyofne7an2pWo6EXbNnW25yeHdraVtwaXd3YV5kVmFBUERONlZCUm00SlpaXk5aREAxNTE7OzdIPzpDSFU/WVNYXT5EYl1WYFFhZHxpRkI5TltdWGVmWGZmbm1iYmVfYWFfX2BgZWNeYmRvcV9kZWVrZWNpaGdraZadiaq2nKiJY5WcrLuysKydpZuap5+drJmdsKernpejmqKgmZaWoKSZhomNaYiAcnuXiIuWloSSlZiPeouElqSciZWPhoqdkpybiI+ooZ+ai5CKgIBpgYZ5f5aMe4iNjoeOlZl9kqGen6GTmHJon4qgj4xwko2CqYmaoaWroqp/sa6koriXd6OzoqN/iJR4nXqqmX+ij5+dmYmYcqF+iI6wtX1smpGheH6ZtaOjq6iEmXybfZybf3SqWl1ve5eLeJ5iTX97e4ZlephCTZ9ZompzfY9vgoqEmXabeYeJsbN/fpqSpnN9nW1wfJRvmXJpo12VdkhlY190cXx9bmVfa2d1emJjX1BdV1xTVkBZRVFnRFJWXGFYXklEPUI4P0E6SEU4TEVYQVdSWlZFRmJcWmBLYG19cUVDPFZeYlplalZnaG1vYmZmXmFgXF1eYGhiX2VjdmxeZWdmbGRlbGhpbGmUnoGxrpqEU1+hp7S6s7OomqKLmqmbm6eSoKujoKiPnp6dmpmVmKCdloeHiXeFgW54lYWQm4t9kZOWiHKBiZKhm3KSkICImJSfmoSOqJuZlYqKinyDbISFcYKhjHiFjIiHkZiUepGjn56jiK6GfbWEj56de6aWeqmCl5+RjKOff6dpeG5+mXSgc3F8nYWYb5OCrXykhKefm4OkcF6paHajZHCmYZzTj3x7mXhyc2OihpF+onKjkHZrkLOMYIOYinSqsqi8f3eEb3+/pqq0Xpxvf3KXcIJ0o3JepGd0pmBopmyb05h5gZpudnmXa5t5dpdybKmlZ19leXF/hGxoZmNtdXZmXmFRWmVQUWFIVklUX1dTW2VqW2VQRUNLTEpLQUpEOFBAUU5YU1hPU1FgZWVqU2R4eXdKR0VkXWVaaGlTaWhqbmNqZmBjX1xdXV9pYmFoZXxkXmRnZGtkamxmaG1omJt/sKxUXUt+qq+xtLCzopyYhJemoKCijKSnn5epipmYmZSak5KgmI6IhXtwfYNofY+Ck5qBd5GOj4pwgIaPk5JsmJN8iJGSo5WDjqmZk5KKhYl5g3aIgG6Bn4Z3gJGFh5ihlniSoaOZn4mzoaK2i3qsp6SupXGpgJuRhoKflX6lgaObhphxnoSira6Jl4t/jKSNlYOvo5V3tba2yaJ0lI2Dn2Cdl6lteZaHoJt1oYd3oH6Rl4uBb01mo5Nym4l0pXt6dWKEg25+oW1yZGCcc390mGt7arS2tMamc5h9eZxqmpmrc4CabHN3l2mZeXSYcVBEfbNeanZreIdma2Zic3RvbFVbUlloT1FoSVVMWFJVXGdrblVnV01KQUpNS0hKTkFRSlBlY2ptZXVzc354e250iXp7VVFObV5oXGtpUmpoaWxnbWZjZV9cXFxfaWJkaGt7X11kZ2NqZm5tZWltZaKdibCohWVAlKKyq6+vtaGij3+Wp6Gho4ukpp2cpoKZl5eOl5CQm5OOiIN5a3mGZYOMf5efeXWPiIyCaoWFkoSLhZ2NeoyKlaWSgpeolouRi4CIeoB9i3lwj6CFeYGUhoiVnpR+k6Smm5WWg2dueJxsomR8cqV4nJhwaKeDmo59pXuil4OWcp92gImUlY+5bpCKomJ9maOXiW5za6trdaBucKdhm2qLkGmWh5uVdaKBfppgi4aNdW+IYmihZp5/apt1cWVniYJvc6JbX1tkoW5eiY1xfIB0cmSlbniiY2anZ5dxi5dtoW9SiI9uoF5kp1SLXVSYbW1ya3GBbXBoa3dzam5RVlVVZVhTbElYTltIV2hoc2pZa1ZQUkVWXE1YUmFVaGped3V7fHB9fHKCe39zd42Ag3deUXNhZ2JwZ1BraGhrbG9oZGdfXV1dYGpiaml2dV1cY2hjamlybGZrbWOdpZmmemV0bYynrqWpsLGln4t/lqmcnaOLoaGaoqKAlZmTjpqQi5eRjop7hnGAiGiLinyXmnN1iX2QfGWDh5WKiZWagnyIhpamj4Chqo+FkIqBiX2AgI5zaY+mg32FkoyHl5+NhpGppZ2JpniWm36liZaMspmekYSvl5+lepiJe6l1qJCEmm6looyShIyDvG18pa+Ch4WHlZieon6mfHOolaGWaZ9/cKxjloqWk3iobaqjgYl2iYN3q5GmiGuSsWx3s42pbIuGb2+gnpKVYn+rjKp4gYCOp593n32FpJadoGiZh3WsZp6tjLZzdr6MpJNZg6aNq2F1cnRve3VwYmp9bmdsUlRYVGBgXGtMXFFbSV1sbXZfW3FYW19aZ3Nlbm9xY3F0YHd6fnlyeYNzg36Be3uMgYKAdmJ5ZGNuc2RSbGdnb21yaWZpYV9eXGFqYmxsem9cXGJpYm1pd21nbG9ilqarnYGAn6WWqqqep6eto5iIgZapmZ2iiZqknKidhIyaj4ackYWSjYyMdIV6iINvjYV+l5N0dYZykYNuf4uSh4aUj3x7gYWXpI1/paSNgI6JhJR1goeTbmyLqICCi5ONiJueiIuSqqKgkIB0lJeIfoF5lK+kf4KdcY+GeZOOh4F7c6mNcX19epiWm4SNeHt9fYeTlZOLd5KaoaKEe3+LbY2GXHp5c3txaW5+k4pygHSCj5STcYaEg2aNf1+CgYx4d3SVdnB6b3CJboWGX3dpeI5ngoOGj6qcf3R9lmmJiG99dXuCdGxsZoxzeHuXd4Rba1d5j2lud3Jxb3d4b11rhW5pZ1ZZXlZcZWpjVWBUXVFeb3d5a2p2ZGlqanV8cHF0c2FvdGJ0e4F4dXmCdX+Af4F5i4WCfntugG1keW5eV25naHVreGppamRcYFpjaWVscXVuWltia2Rsa3ltaGxvYY6Vuqmni6Gjm6akmaSdq6Gfg4OWqpGdn4iZppqomYOBnIt+lpSHjoqJjHKCfI58fo+Ee5eOdHOEcJWGfH2Si4aGj4V4foCGmKOMe6afioWPj4SVgoaOmHdxhKqFjZGcj4eenYeLmqefoKuDiY2Vm39+ipetqJCTqJF5cZ+UhX2VcICrh3F+lXFqb3yBn4t/kY2KZ21dhI2OnZ6gkHOXjYpzdWyDd3SBWXJvh5GCfn+Mal1pZHuFhImAYGl5fJx8hI2Ed4KIhWp6jYlsYnFzg3dgdI2DipGolodnjY6CbHaKgW6CindtY2VjeYN6lVpcaWdudlt7eXd0bXNyg2ZcbYpra2JZWFxZWGtxW15gWV1dZXJ9enRvdGJqamp7fHF6dnRkbXRobXt+dXp9e3l6gIB/b4aJg3t9c396c39oVFxyaWx2cHVnbGdkXWFZamhranFybVdbZW1sZ3J5b2hqbWCMjKuyopCjoZqenpidmaihoH2ClquMn5OGmqKRpZV/e5iFfJKZiYiGhopyfYCKdoSLgoSWinJvgHOYhoR+k4ODhoqCeoCDipqfj4GloIZ4jpeIlYqLnJeEg3msgZCXmJOJnZyGh6GqnqKipIuHk5udo5qWq6KoqKKTnYmZkX56kZCGqoB/k5GSk5yxpZqUno6MsJGYhKaOjpadoYqRnYSKk4tsfY93eGaChpGLfYmehIiMj4iIgYWEkXh8e3WcpIqIjKCMh5aAgI6DgXdxdYaFgHmJiIuRp5GEh46HgouPinqDiIaMf3RqgYN8eZlpcmhgdIpxfnt3dm92dIFdXm+HZ25fXllaXFNncVVjW1tgbGd0e3tybm9jampof3tteH5waG9va2aAe3KCgHd/fX+Fe22DjIV8enl8fXqEeE5kdmpzbnF7ZWxlYmJgW3NmcGZycW1VXWx0bWh4enBnaWtljYieu5+Xo6GYlZmYlJikoJx6fpepjZ2MhZ+ci56XfXiVg3uOmYmHg4SGbXiAf3KAh36Ik4RtbH56l4eEg5B+gIaEh3yHg4yanZKGqZ2CcoqPhZKRi52RfI17qYONkZeVjpuWhYWbpp+imp6Gg5KamZmQmaahpp6ekJeClI15foqQhqd8fY+QkYaYqqGckpyOjamNkYCejoqVnKCEj5iAiJCEcHmHcnVhf4SQiHeMmYGEj4GGhX+GhJVuenZ1lKSMjYechoaPdYKMfn5zc3yKhXx6jo+FlKiQh4SPgYKJh4dzgoWGiHltan1/e21oa2xnXnl/Z317dnV2dXt3XGBwfW50YGNaW11RZmxTZFpdYGpodXl+cGxsY2tqZ4B/a3J/a2t0bndthHluhoB2goB9hXdxgo2Hfnt7fYB7gotgaXtrdWhqg2VqY2BpXGN1Z29idW1sVGJxeWVveXpyZWptbYuKn7iaoqSfk5KWl4uan56cenebpJCbiYaklIuYmnl6joV8ipGDjIKCgmx7f3hygIV9ipB9a2h9gpeJgYiOfH6FhId8j4GPm5uQiKabf2+KiouShqChioWMfKiQh46RlpKWkneMo6ChnZabgIGQmpiTjZqjoqSbmJKcf5CIe4KGkImhgX6NjY98l6SgoJGZkI+ljI+BnJKKlJmdf5OTf4iQg3V1gnF3YX6BjohzipZ9iYxxjX+DhoePaHhyeo6ak5GBmYCJjHODiX1+cnp8jYZ8e5OOhJemlIyGkHuEhYWCc3+AhIV4ZHB6f3h5cGxqZl5+c2h8dXZ0fHOAal5gdHdwd2RjWF1eUmloVGRYXmBnaXV5gXFmamNsZ2V/gGptfWdtcGp9d4Z6a4uBcoGBfoF1doKNhn98e4CBfX+PanKDbnRpYohpbGJfcVZ0b2xtYHhobVdqc3ZjdHp6cWJrb3mJjZ+zkqWmnY6QmI+FnKGam3x1o5+Nl3+MoYqIm5Z4fIaHfoSKfoiCgH9wfnt0dYKFfomQd2djfYaXioKKjXh9gIyDeZaAlZeVjZWemX1vi4GQk4Wlm4eMiYOmlYSSipWXkpF2kZ2hoZiUmHp/j5iXjpaanaWempSVnXuSiYV6iJiPn3+Ci46Mc5einqCRl46OoYyMg5iYhJSXmn+Zjn2KjoJ4cn5ue2SBfYuHcYeUgJGCa4eDgoCLhmZ2cH2IlJqOfpV5jYt9gol+fXKAeYuHe4aSi4yZpJeChIx2h4OAf3R4f4aCc152d31zfXZmbGVhf2lqd3N0dX1xfGNkYXNudXJtYVlfXVprY1JiV19fZ2p0eYVwYmpia2ZofIJraHRobG5of3yCeWyPhXGAg4N/dHyDjIGAfnqCg358kG11iXR0bWaKbGphY3VWg2lwbmB4Z2xhanZwZnh7eXFfcWyFhZCdr5inqZ6OjZeHhZ+TlZd8d6ibiph5lpyLjJmQeXyBjH19g3uAg4B4c3h5c32Ag3+Ii4BkXn2LlYd/hYh0fX6Jf36YhJaUloyjoJZ+cYZ7k5GKpo+MjoqSoJGDkI+Tl5GKgY+XoJqSkJJ0gI6SlImdnZ6nmZmOlZd1kZKMbYiakZt7iImQiW+XnZqikZSKi52LhoGTnYCUlJaImop9i4qCe3F6a3ZtfH+Mf26Fk4OVeHCChH5/jIFlc2p9gpiYhYCPdZKKhXqJf3d4gX6Hgn6Fj4eNlaWReYWCdIiGe35xcn6EgWtgeXR5cHxuYW5jZXtibm92c3h3dHRhd2BvbHVucF1aXl1daV1PXFdiYGdscnqIa19pZGljaHeHbWZsaGlsZ4B8endukIhzgIOFfXSBhol6g316gYR9fI5yeYt4eG5siGtoX2lxYodocW9ldmdtbGF6aGp8e3hwYXdti4GZmquhpamei4uRhomdi5SWfHasmIyWfJ6TkZeUiXd+e4p9fIB2eH+AcHRzem+FfYGAiX58YVx+j5GHgISEcnp/hnqPkYeRkZuSpJqTgXyBfI2KkqSJjYqNlpqMhZCXkpWNiIiMkp2Tj4yNboSQj5GJnpmioZiYipeTcIychmiJm5CVe4mFkIpwlpqUoZCQiIqYjIJ/kp99k5GUjZqQfIuGiXVzdWtxbnV9i3VvhpGOknJ0gHyCgop+ZXJuen+blX6FinWSjIJ1intwgn+CiH6GjouGjparjnuIfX6KhHZ8bmx+goBhZndzdG56Yl5vYWt0XnBqenl5bXRxZXpebmxzbXNZWV1fYGlaT1ZXZGJlcHF/h2VdaWhmYmdxjW5jaGhlaWiBend1b46Fc4GCg3x2g4mFeIV8eISGeoCJd3+Le3tzeYRra19vaHR/a3FvbXFnb2tle2Ftf3l3cGx3d4l/o5mjqKGnm4iLioGOnIaSmnR/qJSSjYagjJaUkYF0fHaFeHh/cnN6hmxyb3htiXaAgIducVtZfpKNiICBgXZ1gH9/oIaPipKcl6CSlneJfoCMiJyeio+GkpeWhYiTmI6Wi4qNjoydio6RhG2Ji4+RipyWoZyZloaZiWyIpoVoiZ+Mk4CNhYyBeJOYkp2Qj4iIk41/fpCZfZKOkY6bk32LgYVwdnBsbm9xfIdqc4OPmYtyeIB1gomEemd0cHeCm5B9ioV7lZN7eIp1cot8h458jIiFio+cpYl8hHaBiX53d2xofX9+W3FycW9vd1pecGBwa15vanx6cW5tam13YHBva3FuWVhgYGBsV1BTWWVlYXRvhIJhXWtsZGJma5JuYGZmX2dqgXVycm+LgHR/g4F5doGLgHmGf3iHhnaDhXuHi398d4t/anFjfGKFfG9wbHRqaG5sd3dfcX55e3R1c3+CfqWVm62fp5eFjIN+lpWDjp10iZ6TkoaLmoyWjox6cnh0gnByhHRxdYhsb2x0bId2g31/bW5VUYGrlIeCeIB2coJ5gaCCkIGSkpiakZh3kHqCjJKjmpOOiJSYkoSFlpiLk4uJjo+InYSRi31yi4WIj4icmp+bl5aBlYBqiZ+KaYmiiZSFkoSKcYORl4+ajI6Li46Nd3uTkXuQjI6TmI18iX6CbHdqb2xsbXuAYnp+kJeCd3qCeIONfXpodW12iJeMgImHfJWScnyGcniOe4yOfIp/hY6Rn6CGfXx3gYp8dm9naX5/dl12bm1rcHJVXW5icmFfbW55cGhwZmd0dmlxbGF3Zl1VZWBfcVNQTltlY1x3b4h7XlxocGFiZWaRal9nZFtnb35vbHFzin12fIaBdXZ/jHl8hoB4h4NzhoV+jIyEfHqVeGdya4Ngh35vb2t7YGltdIB0XnN8eIZ4dHOFfHmhkJqxnKWPg4p/gpmIf4mbfoqYko6EiJiOj4+Ed3R3c4BwcIV0cHGDb2ppdW2Cbn18bXVzUk6C38mS1pN8b3SDdYOfgpF2lJCYm4+Ye5NyhZCfoZOTkImSm5OFfZWVh4yNh5KNiZx/joF4e41/iIyJnJycm5aUeo54aYuUim6KpYaUiZiEhmOMkZiNlImWi4yJi3B6lYp8j4mLk5KKeod9f218ZXNva217elyBepCQgXt+f4CGj3t6aXVrdIyQi4OHhn6XjW2AgHCCjoCOiX6FfISRlpucjH13eIKOd3JrZG58gGlnc25naXNsU11uZHBZX2xxd2dra2JneXRwcGRgeGFgVWtfXnRPTUtfZmJbd3CJdFxbZHVgYmVljmNgZmJYaXNzbWtxdot8dHmHgnZ3fotzgId/eol/comHgZCKiH1+mXZlc258ZYd+bm9rf1lsbnl6cmB2enuNdnJ2iXZ5n4ycr5ugkIKEeIeUfnuIm4aEnpCOhYyXhJOPiIF1d3B5cW+DcG1ufnJjZHdwfG56fGpobGKkmsHcru+ic2x2g3WEoYSRbpWPlZ+TmoCRcIWLo5eJjpWKkJ2Wg4CUj4WIj4CSioqXf4d7dn+KeIaFjZubl5mQkHaLeHCJi45/jaaGk4uehoZei5SXiY6IjYqKhIlsfJeDfomGipGQhnaHfn5sfWR4dWpvenRYiXuSiIZ6f3+Aho1/emd0aoGKj4uEhIGNmIdtg3dwiZKDkoaAhHyBkpeUm5F1dHiHi3Ryb2Rydn9fcmxvYWh0ZlJgcGdrVV9uc3lhcmNgaX5xc25bY3NiY1ZuWlx3TExLY2ZgXXVyiW1bXGR4XmBkZYRfY2NeWGlya25rcneLfXN3hIF5eHyJcYOFfX2Ie3SLiYeVho1/fphzZ3VxeW2Lem5zcIBXcXp2eXFkdnmGjGh2gIlxgJ2Imaico5KEfXCLk3d4iZuDhJ+MjnyWjX+aiIV8c3dwc2pvgWxqbXx0XmB3dntwdHpnYGV869q1ycPciXNsdIF2ipqIjGmXj4+blJKBiHCFiKCNhYuVioyXk3uNkoeCiI96kYuGj4KAd3iDhHKHgpKblpOYh4x2iIByh4SMiZykhZaOoISKYYOVj4WIhYiMhoCHaH2UgH6DhYqOj4Jyh3+AcndodnJpdXhtWo19k4OGfYCDgYSLg3didW2KgpGMg3+AlJN/cINteoiRiJSGfYN/gZOUkZiJbnF5i4R0am9pb3V+XXJobVxpdF9RZHFoZlNfcXZ0YHBgXWiEcXNqV2dpZGlYbVdbdExKS2VmXmFxc4VpW1xleF1eZGd6YGRfXVlrbmVuanN3in5zc4J/e3Z6iHOFhHx/h3Z2ioaPmIGNgnuTdmx3dnl4k3Rud3p8WHmGcYBuZ3h2kYJkdoaFcIqXhpqhm6KKhnNukYpydo2afImZiIl8n3+Emn+CeXJzbm9kcn5pZmx3d1tfeHt6cXF/aWFnYX/Vto6RpnhucXd7cJKQjIZqmI2ImpCLhXpoh4uZhoGSkIaGl418jIyAgImNe5CNfomFenV7g3xxhoCVmY2SlIKJdoSIeIaDjZWgoYiXkaGAiWF/lIeEh4OIjH9/gmZ9kYB/gIOMj5B+bYN9g3VsbXd1dHh2a2OOgo+BhX98hICFiX9wYHRyhn2QjoN9gJKKe3KFZ3uFjImOhX2GgIGVkJGUhW5veIt+dGxtaGh3eV9naWlYa3RZUmhyaWJQYnJ4bWJlXlpqhG50Y1xoYGVtX29UWm5NR05mZFtmbXGAa1pbYnJfXGNsdmRlXV1abGxibGpzdoZ/cW9/fH10eIZ4hYN9gId1eImBkpV8iYZ2iYFveHl6hJJvbXqAdl6Df3SBbGh6c5RzZ3KHfHGSkoSan5ugh4Z1dZN+bXWSlX2HkIOKjZp9jJp2fndyb2xqYXR8Z2JpdXlaYHd7eW1xfmVkaGhXnY9fcnOXvMSEdXGUiI99cZaLhpuSi4dyaYiOlYB7lYuBhJqLfIqFfHuJi3+UiHWJhnZ3foFydYWBnZSFlI+EhHKBineGfoybn5qIlY+egYlmfpOCf4WCiIhxgX1mfox8eX+AiIyPfWmBfoR2Z3B5eHR4dGxqj4aLgouAeYKBhYSBbF9zeXt+jouGfIOQgn9zg2p6hYmNiIZ5hX6CmY6RjX5ubXqIfHVzbWZlenNhW3BiV25xU1NtcmhhTmd1eGZgXl1Zb4FvdFpmYl5rbmBwT1lqUURTZmBZam1tfG5ZW11sYlpib3ZkZ1xdYGtpY2tqc3aBg3Fuf3yAdHWDeoODfYGFdn6IgZaQeISKdIGIcnh5fo2Qb296gHFpgXh6fm1se3WVamp3hHNsk42Gn5mfmYWHbn2LdWl3lo1+gYqClJeKepCWb3t0cWtqZGBze2hgZXF6WmByfHlncXlgZWWPsbJ3S2JapdnQlnF6kIqPd32TioSYkIuFbmuFkZF6eZKGgYSYinyGf3d3iYqEloBvi4hxdX57anmFg6SQg5ONhIBwgIR4hnuInpuWjZWRloWIcHuTgn2CgoiCbYF2aICFeHKAgYOKiHxlfn+FdmRxc4BpeXFwdZmOhoOKfXd5gYV6g2tccn9zgomGin6HinyJc4JucoaIkYeHdIZ7gpqNjoV5bm59g351eWNlZ3puXVh2Wldwa05XcXJmYEtsd3RhXlxbWnV+c3BYZ15nanJgb05XZ1I/WGZeWm9qZ3lxW1pYamVZY3B4X2dcXmVsZ2ZraXF3f4dvbH9+gHVwgnuAgn+Cf3aBhIiXiXGCjXF7hnx6eYSUjHVqeX5rb350f3xvcnt6k29ugX54Z5KLgqGZnJGChWaGgm9neZSIfX6EgpiKgXyOjWh4c2trZl9hb3htX2JveFxka4J5YXF1X2Vl1Oq9izI6PouOf3F5hYeNjXWClox+ko2Lfm1rhIyMdX2Pf4WBlIh8gndudoeEg5d3boiFbHV7dWZ5goOmi4KOi4R+boF2eIV8iZ+Sj5KTlI6Mh397koZ3foOMgmt/cWiAfnlufHyCi4R3YnqFgnJkcml+bnVydYKcjIGAhoB0dn+BdIJwXG6AdXmMhIt8iIF+iXl7cm2KhZKFjXSDeoCYjIuAdW1qdoB/dHNbZ2d1bldWfFNZb2RMWnJyZVtJcXhvXFtbWV11f3VpWmJbaGZvZGpNV2VQPV1lXF11ZWB0b1pZVW5jWWRxeVpoXWBnbWdpa2lwd32ObGmChH95boB8fYF/gnp1goGNk4RwgYtueH6Ae3uIk4l/aHp9anN7coZ6c3Z9fox5eIR9fGuLjYObnpaLgYBsjH1qaH6Ni3p9foOUgn59iohrdXFnaGJbYmdybl9ha3NgaHCIeWJzc15jZJugj25dNlqvtXRpgIh8kYZ1hZWFc46KiXZvbISChnR5iXiJfJKHeX5yZ3aJfn6Yb3GHf2l2eW5meYeEpIeAh4yKf2+Ad4KDgI+ciYSWk5mKjIWJfJCIcHp9hHtofmxqgHt6ant3goiBcmB3gX5yZHJndoNudXyGlpKCfYOBcHh6fHWAbVlwgHd1jYOHeIh2hIl8eXRvi4KSgodzgH5/lImKfG9uaW2BgXRtW2VkcW9QWnpOW25bT1tyb2RVS3N4aVdZWlphcYF1YV5dYGdkaWlmTllnTUBgY1tgdWBddWxXV1N0YFpkb3JXal5iaGtnbWxpcHd8kmtohIp9fG9+fnuBgIF6d4B/iouDcXyHb3J4g397iYyPg2l9e213eHaLdnx4f4KGf4N+fXpthIuHmKOMhIN7dYp4amyDh5B4fXqCkYCAfouDcHJwY2ZeWWdfcG9fYGdwZmpuiXRhdG9bYWRqdXqAv5ympMi4cYSCcpJ7d4WSgnOQi4dycm+De4NzdId0iHeTiHl5cGN3h3qAk2lyhHdnd3VjanyCh52BgH+Oj35zgHWHe4KVkoV7mI+WkIiCiXuJiWt4eX50Z3poa395dGl6d4CDfWhgeIh9a2t0aHyBaXaCjJKVf3x/gHF8d3x0gGNWeH5zdIuFgn2EcoiKeXlycYWDj4CAen9+d5CGhHdqcWhsh4Fxb1xmYHFsSWR1S11sVFNZcm5iUU90eGFSWFhdYXCCdF1iXGllZWRrZFBbcElDY2BbY29dXXhnVFdWdl5bZm5oVmteYWpnZW5uaXB3epJtaYiMeX1ye355goGBfHZ9g4iGg3B3hHJud4KCfoiLk39wgHt4eXqBjHSCeH+BgYKEeoB1b36Ki5ueh32FeXeFemd0hYuQeX5/e4iFhHeQgGdwbl9kXFhlWWxyYWBgcGxraIluYHNoWV5jbn93qdqpx4aHsnGId2+MdHqFjX95kol/dHN0fXd/cHF/bYR0k4V4dGtgeoJ5iY9mcoRwaHVuW219gJCTf4B4kZN+eXxuiniDk42Gd5iMk5CIhoV8f4VsdHZ+bGd2ZG17dm1qd3d/f3xhYniGeml1dWN+fGh1h4+Nln12gXdxgHt9boFaV3V/cHaFiH+Aem2Kh3V5bHaChIV/fX56fXSMgn50aHRlboqDbHJZaF1zZEZtbUtaYFdWVXdtYlBSdHZYUFZYXmByhHBeYWNtZWReb2NUXHFGQmVeXWVnXVt6YlFWXHRbW2drYFZqX2BvZmZrcGhwdniOdGuOjXV/dnh9d4GEgXt0fYOIh4NvcoB0cXV+hYGJjYp6dn94g3t8hod3h3x9gX2EgHt+cnV5i42gjIh5iHZ0gnhefYWXi3iGg3SFhoR4intibmxbYltbYVZpc2JgW2ducGaHcmFxZVdcYmt/fMrOh7mham1timxxg3F7g4l+epCEeXhzeHV0e2psdmOEdZGCdm9mX32CeoyKZXKCa2pxY1hseoWbiIKBcpaVd399b4pzhY2OinSZkJKJhouDe3l9cHBvfGZncWFteHFqbHF4fX16XWV6gHhqdnhmg3dodIiMjpZ+c4lrb36CeW99Xllzf250gYt8gm9wioByd2l4gYKBg3h/c3t1iH17c2dzYW6LgGtwVmlcdltHbWpNVlVdU1V7a2FPVHVyUFFUV15jdYZpXWBsamZjWm9hWGJvR0FnXGBlXlxWe11OVWVwWVtqaF1XZ2BfcmZrZ3FncHN3hnhulYt0f3p4fnmDiH91cn+HhY6DcHB8eHd2eoWFh4yGeXt/dIt9fYaEg4d/fn59hn58eXV4d5GTn36LfIptdX94Y4KGlYZzkYpvhYWBe4R1Y25qWV9bXF1UZ3NkYFhjcXJngHJia2RWWl9qf3i+rnuft25hc4Voc3pxeIGFen2Lfnd3cnZve3Zlam9hh3WOgHNqYl5+eXmLhGZxf2hra1pWb3eJo4GFf3CZk3KBenaEb4OElIp1l4qOiYWJhX14dHFuaHhfamxgbXZqZ2pseXd6dlpnfXx5ZnN+bYV1ZXWGjoaXgHGNaGt7hHVudmNdcX1sdX2Me4Jndoh+b3Jpd4B6gIF0fm17fIN7eHFmbGFtiX1rbFVpX3ZVSmlqTlJOZ0xYe2hhTlV1a0xQVFVfZ3aEZ15hcWhnYlhpXVxrZ0pEalliY1ZZVXlZTVZtallda2RcWWRiXnRmbGRxZ3JwdYF3cZmGdn9+d398hYd9dXOCiICVg25zeXt6dHOEhomJg3iBfXWPfnyFio2DgoR7foqDe3d8d3eanJd6iIKGaXZ8e2yDg5KAco6BcYaCf4OAcGZsZ1hdW1xbU2RwZF5XYnJ1aXVvZWViV1tbaH9wb3KAc4lkZHl9aXN1c3KBg3eAg3h2cnVtanpxYWdrZ4ZzjYNtZl1ffXB7iX9pbXhnamRVV3JvjKZ8hHt2lpF0fXR+fG9+fZOIeJt9iYeDh4N9dXBxbGd0XGxnXmx0ZGdmaXpve3JZZ4F3dWhwgXiCd2J3hot8lYJvjWtue4NyZ3RmYW56aHN4i3t+Y3eEd2tscnV8cnt7dX9of4CAeXdvZGZibYV7bGpVaGFvUkpoak9LTm9HXnpmYU1VdGRKT1NXYWt3f2ZdZ3RpZmBXZFdicFxLS2pXY2FVVFVyVktYdWRaX2tgW1pjZF92Z21icGl0b3J/dXSZgnd/gHiAf4aEenx1goR+l4VucnR8enVxhIWPgYB6i3ZzkH98gZWNgIWEfX2Mhnp+gHd7o6WKeYeFg2t0e3p1goCLem6Ec3mEfYKDdm9qaWVWXVtaWlNibmRbWGFze2pobWlgYlheWml/aWtwgGdsYGh5eGpyc3Ntg4B6f3x1dG16Z2l5al9lbmiBdo+EZ2VYYndqfod7b2pwZ2ZdVFhvZ42ndoB6fJCOenZxgHF1eHyTgnqXdoaEgIaIdmpydWdnbltsZF1tcl9oYWp5aHtsW26DcnRqcIF+enhhd4aFeZCFdIlycHqBc2Nyal1xeGVydIh8eWN0gXFnanl1c215eHZ5ZYR8gHl3cWRkY217fGpqVGdhZVNKa2ZPR1FqRWF4ZmFNU3JdSk5VWWVseHxmX25xamVdVmFVbm5WSlNnV2VdWE1Va1RJW3lfW19qXV1aYmVfeWhsYW9vdm5weHV6mH53f4F5gICHhnp4eYN+gZODcXR0fnp2dISIkX2BfJFrcpWAe4OfhX6HfYB+hoKAint3hKuef3qHh4JqcoB5dYB+gXRuhm59gHOKgGpwbmRkWV9aWVpUYmpnW1pfdYJpXm1sXGFXW1trgWVxdH1paVxrdnVnc3ZxbIR7fXx4dXJseWZpd2ZdZHNoeneSgWNjVGVwaIKFeHhnaWphV1ZZZ2OOp29+d4CLjntxcn9pe3F9j354kHOFfoCAhm5kdnJkZ2dcamFdb29baF9tdWV6aF10gG9ya3J8fnV2YnWGjHuJiIGBeXN1gHZicW5bcnRjcXOFfHVlc4BtYW17cGtqfHp2dGeHd3t6dnFlYmRtcn1palNnXVxUS3FiUEZWYEdjdmZhS1NvWEtNWFhoa3Z7ZWVucWdkW1ddWHdlVEpcYldnV1lIV2RPR2F4Wl1fbFpeXGJjXn5pamBvdHhtcG92g5h6coCAfH+JjIZ9dXWFeYeMfHN1dYF5enqBjI58foWJaXOWgXqKnH5+hXqBe399holzcY+ti3t7ho98ZXGHeXN8enVyboVse35sj3pjcG9iZV5lVllZV2Nma19dXHOFaFhxblteWFpba3picHd2bGFZbHNzZ3R1b2yDeH5/eHZtbnNkaHRlW2d1ZnZ2kXpfXVJmZ2uDgnR+YmRqXFRXXWJjjqRpeHODhpF5bnF8anpvf4l+dop0gnl9eYBpZHZtYGZfXmlfXXRrWWZdb29iemVcd3xrbm9weHl0dWVzhJOAiIOJe3dwc350Y3hlXHFxYnFygnx0Z3OBZV9ud2plaHp9dW9wg3Z0fXNyYl9mbW58ZGhTZldYU012XlBJWVdIYnRjYUlUbVNKTlpXamxyfGNtbXNjYlpaW2F3XFNLY11XaFNWRlhfTUZpdVheYGxbW19hYl2EaWhhbnh5bXBrdoGQeW2CfoCBk4iEgXZ0iHSMhnRxdnaBeH19foyQf36UfnB3lYN9mZJ5gIB4en1/dIiEdHGZoHp6foeUd2N0h3hyd3RrdG9+a3h8cJFzXnBvYGdibFRaWldoY21mXFxxiWVTcm5bWVhXX2t2ZGl1amldWW1zcGtzc3NphHx+fnp2bm1rZGlwY1tqcmR0do5zW1ZTZWFygH9ygl1iY11TWmBcY5GfZXFxhYSSdWxse29wcn1/fnOCeIF0e3p6ZGV1Z11iWWBnW152aFdiXXBpYXdhW3x2aWpyb3h0c3VpcYKWhId/hXd0a3F+b2d4WF1sbmNyc4B6dGdwflxgcHJiYGtzf21udn9zcXhrcGFcZWxsemBmUmVUV1FPdVpRT1hRSGNzYWBHVmpRSVFaVmtra31mbm9yYltaWFlscVdSUGZWVmhTVEVZW05IcXRYX2NsYlhgYGBdi2pjZG16eGxwaXV5h3trg32AhJp8g4R5fIhuj4dybnZ6fHSCgnyLj4KDmHR4gZOFgZ6JdYGAgnR/gnGIg3ZwoZZzeYWKhnpkdopubnpuZnhweWtydnONa151b2FnZWtSXVtVZ2Fsa1pccYxkT29uXFZXVGZpc2hidGVkXFhudGxvdXR4aoZ8f3uHdo9zY2RrbmBcbm1jc3iHa1pUVmNkeH19cYZdZF9jVFpfWWKVlWNtcIOFinRraXxwZ3V5dn5te3V2cHt/dV9mc2NbXVZhY1hhdGVVX2BtZGFxXV1+cGhpdHF0cXV3a22FlIKJfYdyc2dwf3J0cFRcZ2tmcnSAdnRjbXdWY3JsW19wZ35mbnh+c3Rzam1hWmRpandeZVNjVFVQU2xWUFZTUEdkcl9hRlhpT0lYVFduaWV9amx4bGJXXVVbdGRTUldoUVhmVFNHWVlPTXd2Wl9la2lZYWBdXo5uYmZreXZub2l2doB/bIOAfYeYe4CHgIl/a5OIcmZ0gHt1gIN9iY5/jJNyfIqRhIefhnt/ho10gYZzfoN2bqSLcoCMinZ2bHmLYGR7cGZ5c3hsbXJ3g2dkfG1jZmdoU19eVWdfa29bXm6NaE5pbWBVVlNuZnNrZXhlZFxYb3NscXp3cmyHe392m3p5a2FlbG1eYG9qZXF4fmdaVlhgbHh8e3CEX2NeZ1ZYX1djm4hia3CBh314bGx6bl14dG58a3Z0b3B8gXNYam5fWVxVYWJXZHBiU19iaWJibFphfmxmbHR2b213d2xpho2AinuJbnJmcn5udG5kW2FpaXB0gXRzX2ltU2VxZVZjb2R8ZHN4fXdscG1rYFlhZmd0XGRVYFVSTldkUU9bTk9IZG9cYkdZaU1KX0tZbWRgeWlufmVgVV9UXXVcU1JgZk5cYFVSSVtYUFl0dV1fZWtoWGJgWl6NcWNnanhxc25odnR7hHKCg3qIjn58iYiNeW6QiXRrc4F0f3+IhYeRhJaPeX2Mj4eRm4SAfI2Fc4CBc3R5c2+Tk5OTk5OTk5OTkpKSkpKSkpKSkpKSk5OTkpKSkpKSkpKSkpKSkZGRkJCPj4+Pj4+Ojo6Pj46OjY2Njo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo2NjYyMjI2NjY2Njo6Ojo6OjY6OjY2Ojo6Oj4+Pjo2NjY2Oj4+Pj4+PjoKAfnp6fX5+fX1/fn5+fn5+fn5+fn+Af4CAgIGAgIB/gIGBgYOHjI6Ojo6NjY2NjY2NjY2NjZKSkpOTkpKSkpKSkpKSkpGRkZGSkpKSkpKSkpKSkpKSkpKSkpGRkZCQkI+Pjo6Ojo6NjY6Ojo2NjY2Njo6Njo6OjY2NjY2Njo6Ojo6Ojo6NjYyMjY2MjIyNjY2Njo6Ojo6NjY2NjY2Njo6Ojo6OjY2NjY2Ojo6Ojo+Ogn99ent8fn59fX59fn5+fn5+fn5+f4B/gICAgICAgH+BgYCBg4aMjY6NjY2NjY2NjIyMjIyMkpKSkpKSkpKSkpKSkpKSkZKSkpKSk5KSkpKRkZGRkZKSkpGRkZGQkJCQj4+Ojo6OjY2NjY2NjY2NjY2OjY2NjY2NjY2NjY2Njo6Pj4+Pjo6NjIyMjIyMjIyNjY2NjY2NjY2NjY2NjY2Njo6Ojo2NjY2NjY2NjY6Ojo6Cf3x6fHx9fn19fn19fX59fn5+fn5+gH9/gICBgYGAf4CAgICDhouOjo2NjY2NjIyMjIyMjIySk5OTk5OTk5OSkpKSkZGSkpKSkpKSkpGRkZGRkZGRkJCQkJGRkZCQkJCPj46Pjo6Ojo6NjYyMjIyMjI2NjY2NjY2NjY2Ojo6Ojo+Pj46Ojo2MjIyMjIyMjIyMjY2NjY2NjY2NjY2NjY2Njo6NjY2MjIyNjY2Njo6OjoN/fHp8e31+fH1+fXx9fn59fn5+fn5/f3+BgYGAgICAgYCAgIOGi42NjY2NjIyMjIyMjIyMjJA+LjExMTEvb4eEhISEiF0tMDAwMC1GoaGhoaGhoJqZmpqampqKg4SEhIOEd2VnZmZmY4C+u7u7u72zbWZnZ2dnZ21ubm5ub3JKLDAwLy8sSYWDg4ODg4OLjIyMjIyMjY2NjYyMjY2NjY2NjY2NjIyMjIyNjY2NjY2OhX19e3t6fX58fH59fX1+fX1+fn5+fn9/f4GBgYCAgICBgICAgoWKjI2MjIyMjIyMjIyMjIyMjy0aHR0dHBpohYKCgoKGUxgdHR0dGTekpKSkpKSjnJycnJycnImBgoKBgYJyXV9fX19bfsjExMTExrtnXl9fX19fZWdnZ2doaz0aHR0cHBg7g4GBgYGAgYqLi4yMjIyMjIyMjIyMjIyMjY2NjY2MjIyMjIyMjY2NjY2GfH16e3p8fXt8fn19fX59fX5+fn5/f3+AgYCBgYGAgIGBgYGChYqNjYyMjIyMjIyMjIuLi4uRiYiIiIiIh42QkJCQkJCMh4eHh4eHiZKTkpKSkpKRkZGRkZGRj46Ojo2NjYuJiYmJiYmMkpGRkZGRkImIiYmJiYmKioqKioqKhoODg4KCgoSKioqKioqKi4uLi4uLi4uLjIyLi4yMjIyMjI2NjIyMjIyMjIyMjY2Njoh8f3l6ent8e319fX18fX19fX5+fn9/f4CBgYGBgYGAgYCAgYKFioyMjIyMjIyMjIuLi4uLi5GTk5OTk46SkpGJh46KkJKTj4iNjo6OhYqRkZGRkJCQkJCPj4+Pj4+Ojo6Njo6Ojo2NjoyLi4uLi4uLjY2Njo6Ojo2NjY2NjY2Njo6NjY2NjIuLi4uLiouLi4uLi4uLi4uLi4uLjIyMjIyMjIyMjIyMjIyMjIyNjY2NiX59eHh5fH18fX19fHx9fX59fn5+f3+AgICBgYGBgYCBgIGCgoSKjIyMjIyMjIyLi4uLi4qLkJCRkZGPhI6QkIaKj4WNkJGKho6JiY6IiZCQkJCQkJCQkI+Pj4+Ojo6NjY2NjYyMjIyMjIyMjIyMjIyMjIyMjI2NjIyMjIyMjIyMi4uLi4uLi4uLi4qKiouLi4uLi4uLi4uLi4uLi4yMjIyMjIyMjIyMjIyMjIyMjI2Lfnx3dnh7fXx7fX18fH19fn5+fn5/f4CAgIGBgYGBgIGAgIGChIqMjIyMjIuLi4uLioqKioqQkJCQkIqFjoiOhoaPiY2QkYqEi42JkImLj4+Pj4+Qj5CPj4+Ojo6OjY2MjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMi4uLi4uLi4uLi4uLi4qKioqKi4qKi4qKi4uKioqKi4uLi4uLjIyMjIyMjIyMjIyMjIyMjIt+e3d2eHt8fHx9fX19fX1+fn5/fn9/f3+AgIGAgYGAgYCBgYGEiYyMi4uLi4uLioqKioqKipCQkJCPhYOMjpCOiYyJjZCQj42IjIiPh42Pj4+Pj4+Pj4+Pjo6OjY2NjYyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIuLi4uLi4uLi4qKioqKioqKioqKioqKioqLi4uKioqKiouLi4uLi4yMjIyMjIyMjIyMjIyMin18dnZ4fHx7fH19fH19fn5+fn5+fn9/f4CAgYCBgYGBgIGAgYSJi4yLi4uLi4qKiomJiYmJkJCQkJCMhoyJjoeFjYmOi4yLhomMiI2Gj4+Pjo+Pj4+Pjo6OjY2NjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyLi4uLi4qKioqKioqKioqKioqKioqKioqKi4uLioqKioqKioqLi4uLi4uLjIyMjIyMi4uMjIyKf353eHp7enp8fHx8fX1+fn5+fn9+fn9/gICAgICBgICAgYCBhIqMi4uLioqKioqJiYmJiYmPj4+Pj5CMjouPjIqPjI6MjY2JjY2LjYuOj46Ojo6Ojo6Ojo6NjYyMjIyLi4uLi4uLjIyMjIyMjIyMjIyMjIyMjIyMjIyLi4uLioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi4uLi4uLi4uLi4uLjIiAfXh5enp6e318e3t9fn5+fn5/f35+f39/gICBgICAgIGBgIGEiouLioqKioqJiYmJiYmIiI+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Ojo6Ojo6Ojo6Ojo6Ojo2NjYyMjIyLi4uLi4uLi4uLjIyMjIyMjIyMjIyMjIyMjIyMjIuLi4uKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLi4uLioqKi4uLh4B8eHp6eXt8fHt8fH1+fn5+fn9/fn9/f39/gIB/gYGAgIB/gYSJi4qKioqJiYmJiYmJiIiIj4+Pj4+Pj4+Pj46Pj4+Oj4+Ojo6Ojo6Ojo6OjY2NjY2NjY2MjIyMjIuLi4uLi4uLi4uLi4uLi4uLjIyMjIyMjIyMjIyMi4uLi4qKioqKioqKioqKioqKioqKioqKioqKioqKiYmKioqKioqKioqKioqKioqKioqKi4uHgHt5eXh6fHx6e3t9fX5+fn5+f39+f39/f39/f3+BgYCAgH+BhIiLiomJiYmJiYmJiIiIiIiOjo6Ojo6Pj46MjI+Sj5COjo6Ojo6NjY2NjY2NjY2NjIyMjIyMjIuLi4uLioqKioqLi4uLi4uLi4uLi4uMjIyMjIyMjIyLi4uLi4qKioqKioqKioqKiomKiomJiYqKioqKioqJiYmJioqKioqKioqKioqKioqKioqKi4aBe3h5eHp8ent7fH19fn5+fn5/f35/f39+fn9/f4CAgYCAgIGEiIqJiYmJiYmJiIiIiIeHh46Ojo6Ojo6Ojo+MkJOQkI+Ojo6NjY2NjY2NjYyMjIyMjIyMjIuLi4uLi4qKioqKioqKi4uLi4uLi4uLi4uLi4uMjIyLi4uLi4uLioqKioqKioqKiYmJiYmJiYmJiYmKioqKiomJiYmJiYmJiYqKioqKiomJioqKioqKhYB6eHl5fHt6ent8fH1+fn1+fn9/fX9/f35/f39/gICBgICAgYSIiomJiYiIiIiIiIeHh4eHjY2Ojo6Ojo6Pj4+PjoyNkI2NjY2NjY2MjIyMjIyMjIyMi4uLi4uLioqKioqKioqKioqLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4qKioqKioqJiYmJiYmJiYmJiYmJiYmKioqJiYmJiYmJiYmJiYmKioqJiYmJiYmJioqFf3l6eXh7e3p7fHx7fn5+fX5+f39+f35/fn+Af3+AgICBgYCChIeKiYmIiIiIh4eHh4eHh4eNjY2Njo6Oi42Nj5WPiYyPjYyNjYyMjIyMjIyMjIuLi4uLi4uLi4qKioqKioqKioqKiouLi4uLi4uLi4uLi4uLi4uLi4uLi4uKioqJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYR+eXt5ent7eXt9fHt+fn59fn1+f35/fn9+f3+AgICAf4CAgICEh4mIiIiHh4eHh4eHh4aGhoyNjY2NjY+MjImKj42IjJGPjY2NjIyMjIyMjIyLi4uLi4uKioqKioqKioqKioqKioqKiouLi4uLi4uLi4uLi4uLi4uLi4uKioqJiomJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJg355e3p8e3p7fX17fH9+fn5+fX5/fn9+f3+Af4CAgH+AgH9/f4OGiIiHh4eHh4aGhoaGhoaGjIyMjIyLiYyKiIeJhoyOjJCMjZGOjIyMi4uLi4uLi4uLi4qKioqKioqKioqKioqKioqKioqKiouLi4uLi4uLi4uLioqKioqKiomJiYmJiYmJiImJiYmJiYmJiYmJiYmJiYmJiYmIiImJiYmJiYmJiYmJiYiIiIiIiYmCf3h7e3t6enx9fHx9f39+fn19fn9/f39/f4F/gIB/gICAgICAg4aIh4eHhoaGhoaGhoaGhoWMjIyMi4yOjoyKioeEiIuKjIuNjo+Li4uLi4uLi4uLi4uLioqKiomJiYmKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiomJiYmJiYiIiIiIiIiIiImJiYmJiYmJiYmJiIiIiIiIiYmIiIiIiIiIiIiIiIiIiIJ/eHp7enp6e3x8fX1+f35+fX1+f39/fn+AgICAf3+Af4CAgYCDhYiHh4aGhoaGhoaFhYWFhYyMjI2NjJCSjI2Ii4mJi4uLi4mLjIqMi4uLi4uLioqLi4qKiomJiYmJiYmJiYqKioqKioqKioqKioqKioqKioqKioqKiYqJioqJiYmJiYmIiIiIiIiIiIiIiImJiYmJiYmJiYmIiIiIiIiIiIiIiIiIiIiIiIiIiIiHgXx4e3x5enp8fHx9fX9/fn59fX9/f39+fn+Af4B/f3+Af4CAgIKEh4eGhoaGhYWFhYWFhYWFjIyNkY+PjZGJjIaJjIuIiImMiYeNjo+NioqKioqKioqKiomJiYmJiYmJiYmJioqKioqKioqKioqKioqJioqKioqKiYmJiYmJiYmJiYmJiYiIiIiIiIiIiIiIiImJiYmJiYmJiIiIiIiIiIiIiIiIiIiHh4eHh4eHh4WAenl9e3t7enx8fHx9f39+fn19f39/f35+f4B/gH9/f4B/gH+AgoSHhoaGhYWFhYWFhYWFhISLi46PjoyLj4iHiYmMjYWFjo2KiYyNi46KioqKiomJiYmJiYmJiYmJiYmJiYmJiYmKioqKioqKiomJiYmJiYmJiYmJiYmJiYmJiYmJiYmIiIiIiIiIiIiHiIiIiIiIiIiIiIiIiIiIiIiHh4eHh4eHh4eHhoaHh4eHhH55eX16enp7fXt8fX5+f35+fX1/f39/fX5/f3+Af39/f39/f4CChIaFhoWFhYWFhYWFhISEhIuLjI6MjI2Lh4mIiomGgoiNjoiKi5GTj4uJiYmJiYmJiYmJiYmIiYmJiYmJiYmJiYmKioqKiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiIiIiIiIiIeHh4eHh4eIiIiIiIiIiIiIh4eHh4eHhoaGh4aGhoaGhoaGh4eDfXp5e3p5enx8e31+fn5/fn59fn9/fn9+fn+AgICAf35/f39/gIKEhoWFhYWFhYWEhISEhISEioqOjYmIiIqKh4iHiomIioiIh4qGi5GPiomJiYmJiYiIiIiIiIiIiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmIiIiIiIiIiIiHh4iIh4eHh4eHh4eHh4eHh4eHh4eHh4eHhoaGhoaGhoaGhoaGhoaGh4J8eXl6eXp7e3t7fX5+fn5+fn59gH9/f39/f4CAgH9/fn9/gICAgoSGhYWFhISEhISEhISEhISKi5CPiYmJi4qHh4WHiYuKiYSLjYmOjYqJiYmJiIiIiIiIiIiIiIiIiYmJiYmJiYmJiYmJiYmJiYmJiIiIiImJiYmJiYiIiIiIiIiIiIiIiIeHh4eHh4eHh4eHh4eHh4eHh4eHh4eGhoaGhoaGhoaGhoaGhoaGhoaGgXt4enp4e3x7e3x+fn9+fn5+fX1/f39/f3+Af4B/f39/f3+Af4CChIaFhYSEhISEhISEhISEhI+Qj4+IiYuIhoeIiYuLjIuJioqNio6Oj4iJiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIh4eHh4eHh4eHh4eHh4eHh4aGhoaGhoaGhoaGhoaGhoaGhYWFhYWFhoaAe3h5eXh4enp8fX1+f35+fn59fn9/f39/gIB/gICAf39/gIB/gYKDhoiGiIaDhISEhIODg4ODkpKOioeKi4qLh4uNiYqJi4iHiouIio+SioiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIh4eHh4eHh4eHh4eHh4eGhoaGhoaGhoaGhoaGhoaGhoaGhoaFhYWFhYWGhn96eXh4eHl5eXx9fn5/fn5/fn1+f35/f3+Af39/f4CAgH9/gH+BgoOHjo+PjoiHhIWFhoaFhYWSkI6KiYmIiImKioiIh4aKjIiHiYmOkJGNh4iIiIiIiIiIiIiIiIiIiIiIh4iIiIiIiIiIiIiIiIiIiIiIiIiIh4eHh4eHh4eHh4eHh4eHh4eHh4aGh4eHh4aGhoaGhoaGhoaGhoaGhoaGhoaGhoWFhYWFhYWFhYWGf3l4d3d3eXp5e3x9fn9+f35+fn5+f35+fn+Af4CAgICAf3+Af4GBg4eOjo6Ojo6Mjo2OjY2MjZCQjomHhoiJiYeIiouIiYyJiYaKjY6PkYuIiIiIiIeHh4eIiIiIiIiHh4eHh4iIiIiIiIiIiIiIiIiIiIeHh4eHh4eHh4eHh4eHh4eHh4eHh4aGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaFhYWFhYWFhYWFhYZ+eXd5d3d6eXl8e31/fn5/fn5+fn5+fn9+f4B/fn+Af39/f39+gIGEiI6Ojo6Ojo6Ojo6Ojo2NkJGOi42JjIiIiYaHiYaIioiHi4yLjpCQiIeIiYmJiIeHh4iIiYmIh4eHh4iIiYiIiIiIh4iIiIiHh4eHh4eHh4eHh4eHh4eHh4aGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoWFhoaFhYaGhoWGhYSEhIWFhoaFhYWFhX55d3l2eHl4e3x7fn5+fn5+fn5+fn5+f39+f39+f39/f35/f3+AgYOGjY2Ojo6OjY6NjY6OjY2Qj42Ni46KhoiKhISLiYeDhYSDi4mLj42JjI6QkI+NjYyLjY6Pj42NjI2Nj4+Pjo6MjYyMjY2KiYiHiImHh4aHh4eHh4aGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoeHiYqKiIeJi4yNjo2LiImLi42OjYyJiImMgHl3d3Z6eXh7e3t9fn5+fn5+fn5+fn5/f39+fn5/f4B/f4B/f4CBg4aMjY2NjY2NjY2Qj4+Pj46NjI6KiYuMjIeFiY2Lh4aIh4aHh4uNjo6Pj4+Pjo+Pj4+Pj4+Pj4+Pj4+Ojo+Pj4+Pj4+Pj4+Oj46Oj46Mi4uJh4eHh4aIhoaGhoaGhoaGhoeLiYeHiIiLjY2Mi4yLjY2Ojo+Ojo6Pj46Ojo6Ojo6Ojo6Njo6NjY2AeHZ4eHp4enx6fH5+fn5+fn5+fn5+f39/fn59fn9/f39/gH9/gIGDhoyMjIyMjY+QkpOTk5KSjYyMjIqHioyKh4eJiYWCiouIiYWJjpCNjo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6NjI2NjI2LiYaHh4eHiYqLjY6NjYyNjY6OjY2OjY2NjY2NjY2NjY2NjY2OjIyNj5COjY2MjIyLi313dXd5enp7e3p+fn5+fn5+f35+fn5/f39+fn1+f39/gICAf3+AgYOFj5KRkJGSk5OTk5OTkpKLi4uLiomMiouLiYuKhoeOjYiIjI6OjIuMjIyNj46Njo6Ojo2NjY2MjY2NjIyMjIyMjIyMjY2NjYyMjI2NjYyMjI2NjIyNjIyMi4yMi4yMjI2MjIyMjIyMjIyMjIyLi4uLi4yNjY6Sk5OSkpSRkJOVlZSTk5COjo6Oe3Z2d3h6ent7e31+fn5+fn5/fn5+fn5/f35+fn9/f39/gIB/f4CBgoSNkpKTkpOSkpOTkZKSkoqJioyJi4qJjIuKioiHiYqKi4mKjY2Mj46Nj5KUlJOUlJOTkpGSkI+Ojo2NjY2Pko+OkZGOjIuKioqLi4qKi5CPjoyMjIqKioqKioqKiouKioqKi4yLi4uMjIyKiouLi46RkpOTk5SUk5STk5SUlJOTk5KSkpKSk5F6dXZ2eHt7e3p6fX5+fn5+fn5+fn5+fX5/fn5+f35/f3+Af39/gIGChIuRkZGRkZKSkpGRkpGRiYmIiIqMiYiJiYuJhoSJhoyKh4ySkpKTk5OUlZWWlZWUk5OUlJSUk5SUlJSVlZWVlZWUlJOTkY+QkZKQjoyRlZWVk5KSjo+QjYqKi4qKi42OjY6RkpCRkpKSkpGRkpKSk5OTk5OTk5OTk5OTkpOSkpKSkpKSkpKSj3h1d3l6e3t7ent9fX19fn5/f35+fX5+fn5+f39/f39/f4B/f3+AgYKEi5GQkJCSkpKRkZGRkZGIiIiIi4uJg4eLi4yMiIeHjYyNkpSSkpOTlJWWlpaVlZSSkpOTlJSUlJWVlZaXlpaWlpWUk5SUlJSVlJSUk5OVlZWUk5KTk5OTkJGSkZGSk5OTk5KSkpOSkpKSkpKSkpKSkpKSk5OTk5SUk5OSkpOTkpKSkpGRkZGPdnJ3enp7e3t8fX59fX1+fn9+fn9+fn5+fn6Af39/f3+Af3+Af4CBgoSKkJCRkZGRkZCQkJCQkIeHh4eIiIiFi4+KjI6Njo+OkJWUk5OTk5SUlZWVlJSVk5KSk5KTlZSUlZaWlpaWlpaWlpSTk5OTk5OUlJOSk5SVlZSTkpKSkpOTk5OTk5OTk5KSkpKSkpKSkpGSkpGRkZGRkZKTlJSUlJSTkpGRkZGRkZGRkZGRkYx0c3d6ent7e3x9fX1+fX5+f35+fn5+fn5+fn9/f39/fn9/f39/f4GDhIqQkJGRkJCQj4+Pj4+Ph4iKi4yNjYuOj42Mjo6RkpGSk5OSkpKSk5SUlJKSk5OTk5OSkpOUk5OTk5WVlZWUlZWUk5OTk5KSk5OUk5KTlJSUk5KSkpKSk5OTkpKSkpKRkZKSkpKSkpKSkpKSkZKRkZGSkpOTlJSUk5OSkZGRkZGQkJCQkZCRinN0dnp8fHp7fXx9fX59f35/f35+fn9+f31+f39+fn59f39/gICAgYKDipCQkZGQj5CPjo+Pjo+Oj4+Pj4+Pj4+PkI2OjpCRkpKSkpKRkpKTk5OTkpGSkpKRkZKSk5OSk5OSk5STk5OTlJOSk5OTk5OTk5OSk5OTkpKSkpKSkpKSkpGRkZGSkZCRkZGRkpKRkZGRkpGRkZGRkpKSkpKSkpKSkpKRkJCQkJCQkJCQkJGGc3V2e3x8e3x9fX1+fn1/f35/fn5/gH9+fX5/fX5/fn5/f3+Af3+BgYGKkI+PkI+Pj4+Pj4+Pj4+Oj46Oj4+Pj5CQiI2PkJGRkpKSkpOTk5OTkpKSk5KSkZGRkZKSk5KTkpGRkpKSkZKSkpKSkpKTk5KRkZKTkpGRkpKSkpKRkJCQkJGRkZGQkJGSkZGRkZGSkZGRkZGRkZGSkpKSkpKSkZCRkZCPj4+Pj4+Pj4+PkX9ydHh8fHx7fHx9fX5+fn9+fn5/f3+AgH99fn5+f39+f39/f4CAf4GBgYqPj4+Pjo6Ojo+Pj46Ojo6Ojo+PkI+Pj4+GjpCQkJCRkZGRkZGRkZGQkJCQkZGRkZGRkZGRkZGQkJCRkZCQkJGRkZGRkZGRkJCQkZGQkJGRkZGRkI+PkJCQkJGRkJCQkJCRkJCQkJCQkZCQkJCQkJCQkZCQkJCPj4+Pjo+Pj46Ojo+Pj4+PeHJ2eXx9fHp9fH19fn5+f35+f39/f4CAf39/f35/f35/f39/gIB/gYGAio6Ojo6NjY2Ojo6Ojo6NjY2Oj4+Pj4+PjoiQkZCPj4+QkJCQkJCQkI+PkJCQj4+Pj5CQkJCQkJCPj4+PkI+PkJCQkJCQj4+Oj4+QkI+PkJCQkJCPjo+QkJCPj4+Pj4+PkJCQkI+PkI+Qj4+PkI+PkJCQkI+OkI+Pj46OjoyMjY2NjIqDiYhzc3Z4fX58eX18fX1+fn5/fX5/fn9/gH9/f4B/f39/f4CAgH+AgH+BgYCJjY2Ojo6Ojo6OjY2OjoyNjY6Ojo6Ojo2NiJCRkI6Njo6Ojo6Ojo6Pjo6Ojo6Ojo6Pjo6Ojo6Ojo6OjY6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Pj46Oj4+Pj4+Pj4+Pjo+PjY2MjYyNjoyLi4mJiYiFhYSDgoKEgnR5fXp4dXJrZWltb2xmZmdncHNzd3l9fnl6e3x9fX5+fn59fn9/fn9/f39/gIB/gH+AgIGAgIB/f4CBgImNjY2NjY2MjYyMjIyMi4uLjYyMjIyMjIyGj5GRjIyMjIyMjIyMjIyMjIyMjIyNjY2MjIyMjYyMjY2MjIyNjY2NjYyMjI2MiomKi4uJh4KAh4iEgXt6gH57fXx8fXlzcnJycnV1cG1ramppZ2NkYV9bXF1eWFVXWFlTS0VJSkpLTE1PT0tgdHR3eX19eHp5e3x8fX5+fn1+f39+f35/f4CAgH+AgICBgYCAgICAgIGAf4OEhYSFiIuLjYyMjIuLi4yGiYqKioqKh4OOkJGNiouLi4uMiYmKioqKiouLi4eDi4qIiYmGhYWEhIeJiYWCg397fHl6e3pzcHFxcW1samdsbWdlZmVmZGNlZGVkZWVlZWRkZGNhYV5dXFpYWFdUUFFSU1JTTU1KSUZESEpHR0hHR0xOSWdzdXh5fXp4d3l8fHx8fn5+fn9/fn9/f39+f4CAgIB/f4CBgICAgICBgYFnXmBjYWNucX17ent/fXd8fHZ4ent4eHpvcHt4eXt8e3h3e394dXd0dHZ1dHZ3dXFycW5wcnBnaGtsbm9tamlpaGhlZWRkZF9gYWJgYF5dWVhaWltdXV9gX2BfX19gYmFeXl5eWVldXF1bV1dWUlRSU1NOUUpISUZERUhMTEhGR0lLSklNbXJ0eHp7end3eXt6e3x+fn1+f39+f35/f35+gIGAf3+AgIGAgICAgICCgWdYW1pZXFtcY1xaXF5ga3FtcHBvbm5vbmtpbmxrbG9qaWtraWpraWdmZ2dnaWhnbWdqZ2hlaGdjY2JhYmBgXVhbW1dYV1RWUVBUU1NNSkxLTExOT09UWFhXVVVUUlBQTU1QT05LTE1QUU9MTEpHSUlHSEhJSEhIR0ZHSEpKSEhISUlISVZwc3V5ent5dnZ5enp7fH59fX5/f35/fn5/f3+AgX9+f4B/gICAgICAgIGBbFtYVlZWWVlaWVlYVVZoamxubmxra2poaGloZGVkYlxiZl9fYGNfXF9dYF1eWl5dWVleYmFeXlpZX1xYV1NOTUxLS0tMSUtNTktKS0tMSktQTEtLRkdHSUlGR0lISUZFSEdGRkVERUVEREVJSUlHSEdIRkZLTUtJSUlIR0hLTU1LTExMVXFzdnl6e3l2d3h3ent8fn1+fn9/f39+f3+AgIGAfn5/f4CAf4CAgIB/gYJoUlRVVlNVV1lZWVdXV1tbYWNfXlxbWFZWWVZSVFJRUVVUU1NTUE1KTU5QUk9NUFFRUVFSVlZSUVFUUFBOTk9MSk1MS0xKSktLRklJSkxJR0pISUlFR0dGRkVFSElKR0ZHRkZHR0hKR0dISEpMSkpLSUlISktLSkhKS0pISUtMTU9QUEtUdHR1eHp6eHZ2d3d6e3x+fX5+fn5/f35+fn+AgYB/f3+AgYB/gICAgH+AgmlQUlRXVVRWWVdYWFpbVFRTUlBRU1FRUU9OTlBQUU9MTlBPTk5NTEtNTk5QTU9QUFJRUE5OT09PTk9PUFFPTk5PTk5QTk1NS0lISEpJSUlJR0ZHR0dJSkhJSEhJSEhHSEdISElISUxLSklISkpJSkpIR0pMS0pJSUhKSktMTk1NTU9RTFVzcnN3enl3dnR2eHp7fX19fn5+fn9+fn5+gICBgICAf4GBgH+AgICAgH+BbE9PTlRZVVVdW1lXV1hOTUpKSUZKT0xKSkdJSk1NS0pMTUpHSUlJSktMRkRGSktLS0hKTExMT01MTE5PT09NTk9MTk5OUFBPTE1MTk1MTEpJSEdJSElISElJS0xLS0pJS0pJSklJSUlJR0dKSUdJSUpKTk1OTEhJSklJSk1PT05MT1JOWXBwcnd4d3d0dHR3enx+fX5+fn5+fn5+fn9/gIGAgICAgYCAf39/gICAgIFvS0pNTlFOTlVXVlZSU0lFQ0VFUkREQT5CP0RAQD5CREFAQURHRkVIRUJBQEBDQ0RFQUNFSEtPS0lJSkhHSklKSUlLSkxQTk1MTU1MTU1NTElIREZGR0ZGRklKSUlLSkhMSklKSkpJSEhKS0tIRkdJSklLTU5OSktPTUxLTU1PUE5QT1BgcHByeHh2dHJzdXd6fX19fn5+fn9+fn1/gICAgICAf4CAgIB/f3+Af4CAgXNQUE5OUE1KS1BSUE5RQ0RCQUZRRT1DPT9FSDk6Oz0/PTxBRkA+Ojw+PjxFRD0/RUE/QEFAREVHR0dHQkRERUZFR0dHR0pHSEpLR0NER0pHQ0RFQUFDR0hHSEdISktKSElMS0lISktLTU5MTUxMSkpMS0lLTU9PUFNRT1BQTk9QUlFNUGdwb3N2dXRycXR4eX19fX1+fn5+f4B+foCAgH9/gIB/f4CAgH+Af4B/gICCdlRVUVFQT0xNUFBOT09BQkFAQkE/Oz48Pj8/PDg5OTs7OkA6Oz48Ozs8PEhMPT1BQT9CQz1BRERGQkZGREdJSEM/QEBAQUFCQUE/Pjw9PkFAQD8+P0BFR0dHSUtMTk1OTUxNTUpLTVBVU05MTlFOTk1OTE1NTk9OTk1LS05OTk1OTkxUbnBwcnR0c3Fyd3h5fX19fn1+fn5/gH5+gICAgICAgH9/gICAgH9/gH+BgYJ4UVFSVFJTUVNTUVFST0BAPT4/PD8+QEE/PT45Ozo6Ozg4Ojg3Ojw5Nzg7Oz49Ozs6ODpAQEJCP0E/Q0ZEQkNDPzs+PkBDQ0E/Pj9BPkBAQj9APD9CQEFDRUVFSktQT1BPTU1OTExMT1JRUFJOTExPTUtOT0xMTEtMS0tKS0tKTU1LS1xxcXF1c3VzcXR4eHp9fn1+fn5+f39/fn5/gIGAgH+Af4CAgICAf4CAf4CAgXxSTU9RUFFSUlRSU1NOPDs8Ozs8P0BBQkA9PDk8PTw5Nzk6Ojk4OTo6Nzg6OTo7Ozg3ODk7Ojg8Oz1AQUA9Ozs+PD09QEJDQT9BQkE9Pj09Oz0/Q0RCQD9BREJFR0pKSkpKTE1MTExNTExOVVNLTE1USVBKSU5KSUpLS0pJSEdKS0lKZnJxc3RzdXJydnl5e31+fn5+fX9+f39/f36AgICAf4B/gICAgIF/gIF/gYGBgFZMTlBQTlJRUFBRUU44PT89PDo9PkFAQT8+PkA/Pj07PDw+Pz08PTs6PD09PTw8PDw7PDo7PD49Pj8/QUA+P0E/QEBBQEBAPT8/PTw6Oz09PD9AQUJCQUBCREZGRkdGR0dISUtMTExLTEtKS0lKSk1MTEpMS0lISUxMSklJSElLR01tcHF1dXV1c3V4eXl8fX5+fn5+fn5/gH9+gICAf39/gH+AgYCAgYCBgICBgYCCYUtPT05OT1BPT1BQTzo8Pjw9Oz8+PkFCPz0/Q0NDQD48PT9APz89Oz49PkNFPz9APTs9PT08Ozo9PkFBPz5AQD9BPz89PD48PTs7PD0+QUA/QD5AQ0NEQkRFSEVFR0hISEdGSUpJSUlJSUhKSkpKTEtKSklJSEhKSktMS0lLSkpIVnBvcXNzdHR1eXp7e3x+f35+fn5+f39/f39/f3+Af4CAgICAf4GBgICAgIGBgIJtTFBRTk9QTk5PUFBPPjw8PT4/P0A+QEA/Pz9DRUQ/PTs8QD46Ozo6OTc6PDk9PUA9Ojw7Ozw7ODk7Pz49PD07PEA9PTw8Pjs9PD0+QUBCQUFAP0JEQ0RFRkZGQ0VHSElJSEhJS0tMTUpKSUpNTUpLSktJSEhISEpJSktKSk5MSUlfcHBycnJ0dXZ6e319fX5/fn5+fn5/f35/f36AgIB/gICAgICAgYGAgICAgIGAgnZNTk5NTk5MTE5QT0w+QTw8PT8+QkM/P0FBQUJBQD08PTs+Pjo6Ojw6ODk4ODo7PUA/PDs7PDs6Ojs+Pz89PDg6Pjw9Pj89Oz4/QEJDQkJDQ0FCQkFCQkRCQkRCRENGSUdGRkhJSUtNSklKSktMSkpJSkVESUlGRkhISUpKTEpGRmdwb3FxdHZ2d3t8fH18fn59fX1+fn9/foB+fn+AgH+AgICAgICBgYCAgICAgICBek5JS0tMTExFSUxOTTw/PDw9PkBAQUA7QkNCQ0A/Pz9APT9APjw+QD89PT0/PT0+Q0Q/Ozw9PkA9PT5BQ0A8OTtBPz4+QT07P0JAQkNCQENDQUNBPT0+QD0/QUFBQENFRUBAQ0JDR0dFRENGRUZGR0VEQEFHR0ZDRkRHSEpHQz5IbHBwcHF0dXZ5fHx9fHx+fn1+fn5+fn5+f36Af3+AgICAgICAgIGAf4CAf4CBgIF+UUhLTU1NS0pLTE9RQD8+PkFBQEBBR0FCRENEQT9AQEA/PUA+PD0/P0BAQENAQD9AQD49PD1ARUFCQkZIQz08QERDQUE/Pj1AQT4+Pj88PkBER0VAPkBBP0BDRkVDQkJDQEJEREJERUFCPkFCQkFCQD89QUJDRENDQUNFR0E/PVZwcHFwcnV1d3p8fHx8fX9+fX19fX1+fX5+fn9/foB/f4CAgICAgYCAgIB/gIGAgX5SSEtNTUxLS05OUlVEQkBDQ0FBQkBCQ0BAQUFAQUA+Oz48Pz08Oj49P0JCRUA/P05hX0pAQ0VJSUlJTU1LRUNGR0hFR0VFRUREQ0E/QD4+QkZKSkdFRUZGRkpOTUtKSUdHSEtMSkdHQ0REREVEQUJCQ0BDREVEREVERUZDQkFFZW9wcXF0dnV4e3x7fHx+f319fX19fn59f4B/f39/f39+gIGBf4CBgICAgH+AgICAfVJJSUpKSEpKTE9SU0dGRUdIREdIREA+PDs+QERFRD88QUNEQj8+QT9BREVEQ1d1homKflhHSEpMTE1PT0xIR0hHSElJSEhHR0hIRUNFRUVFRkhKSkZFR0lKTU9PTU1LSktKTU5LSUhHSElIR0ZFRkZGREZIR0VFSEhGSEdIRlFub3BxcnZ2eXt7e3p9fX5/fX19fX1+fn1/f39/fn5/gH+AgYGAgICAgICAf4GBgIB8UEhHSElGR0lKTU5OSkxJSUpLTE5KRkNBQkNGSUhJR0hISUdGQkRGRERDQVV0h4mHh4aIgldJTE1MTU5MSkdHR0dER0dHR0ZIRkhFQ0RERkVEREhIQ0NDR0pKS0xMTEtMTElKS0pKSUlJSEpISEdISUhHR0hGRkZISklJSUlIXW9vcXJ0d3d6e3t6e359fn59fX19fX5+fYB/f39+fn+BgIGAgYCAgICAgIB/gYCAgHxNR0ZIRkVGR0dKS0pMTUxLTU5NT0tJSEhKS0tLS0pLTUpLSEhGRkdGRVBshIeGhoaHh4iHfFBLTEtIR0ZGREVDQ0BBQ0NDQ0ZGRUJAPj5AQUFAQkQ/Pz9ERkdERUdJS0lJR0hJR0lJSUpJSEZKSkpKSUpJSkpKRklMTEpKS0tmb3Bzc3R2eHl7e3t8fH1/fn19fX19fn59f39/f35/f4CAgICAgYCAgIGAgICAgICAfU9GRkdGR0hHRUZHR01NTUtMS0lHQ0NDRElLS0tLS0tNTEtNTElGSlZsgYaFhISGhoaHiIaKdUlJRkI/P0A/Pz88PDw+Ojo8QUFAPjw5OTg8PD07Pjs5Oz9BQkFBQ0NDQEFCRURCQ0ZISUhISExNTEdJSk1NTk1KSktLSkxNU2xvcXRzc3d5e3t7fH19fn9+fX19fX1+fn5/foB/fn9/gICBgIGBgICAgYCAgIB/f39+UUZFRkdJSUdEQ0VGTk1MSklIRT85Oj5ARUhHSUhLTE9OTlFOUV5ygYWEhIWFhoeIiIiJiYyOZkJCPTg4Ojo5ODc4ODk2NDc5Ozw6ODU2Nzc4OTc4NzY4OTs8PD5BOzk5OT09Pjs7PUFERUhKTUxMR0lIT1JRUFBOTE1NT1Fdb3BydHN1eHp7e3x8fn5+f359fX59fX5+f39/gH9/f4CAgICAgYCAgICAgICAgIB/f39RR0ZHSEpIRkVGR0hMTEpJSUdDQjU2OjxDQEJGSEtITEtOVGd7hISDgoOEhomKi4yLiomKi4yJVDo4NjU2NzY2NjQ2NzYzNDY4Ojg3NjU2NTY3Nzc3ODo3Nzg4Ojs3Njg4OTg5ODc2OjxAR0ZJRklGRUZPU1JTU1JPUFBSVGVwcXN0dHd5e3x7fH1+f35/fn19fX19f39/f3+Afn+AgICAgICBgICAgICAgICAgH9/flJISEhJS0lHSUpJSkpLREVIRUJANTc4OD06PURCREZGRFZ4hISCgoOChomKiomJioqKiouJioqBSDY3NjQ2ODg3NDU3ODQ2Nzc5OTc3Njc2NTo6Ozo6PDg5OTk5ODc3Ojo6ODg3ODU4OTtBPT4+QkE/QUtMT1FQUU9PUFFXa3FydHR1d3p7e3t9fX5/fn9+fX19fX5/f4B+fn9/f4CAgH9/gICAgICAgH+AgICAf39+VEhHSUlMTUtKS0tMSUg/QEFAPDo1Nzk4OTc6QTk8RD9QfYSDg4SEhIaJioqIh4iIiYqKjIqJiYx6Pjo4ODs8PT45Ojs8ODk7OTo7Ojo5Ozo6Pj09Pzs7PD06Pjw6PDs8PD08Ojo8ODo6Ozo5OTk8Pzw9QUJESUlMS0pLTFdvcnN1dHZ4e3t7fHt9f39+f359fX19fn9/f35/f39/f3+Bf4CAgICAgICAf4CAgH+Af35URkVGSUxOTkxKSk1CPzs7PDo4OTk4OTk5OTo+PT8/Q3aEg4SFhYaIiYiHhoaGiImIiYuMi4mKioxsPDs+QkNFRUJBQUI+QENBQD89Pj5APz8/QD9APT0/Qj9BQT9BPz1BQUA/P0E8Pjw7Ojs6OTs/PTs7PT1BQUNBQkNBWHBxdHR0dnl7e3x9e31/fn9/fn19fX5+f35+fn9+f4B/f4CAgIB/gIGAf39/gICAf39/flJFQkFHSk5PTElHSzo4Ojs5Ojo8PDo6Ojw7PT5APz1hhYOEhIWEhomJiIeGhoaHiImKi4uKioqLiYtePkRHSUtKSkZHR0RGSEdFQ0FAQ0VDQ0BCQ0I/QERIRUNFREVFQUZFRkRGRkRAQj49QD49P0A+Pz8/Pj8+Pjo7PTxgcXJ0dHV3enp6fX19fn5+f39+fX19fX5/fn5+fn5/gH9/gICAgICAgICAf4CAgIB/f4B+UERAPUNIT01HRkJEOTc5PTo8Oz49Pj47Pjw/P0M+Sn6DhIWGhoaIiYiIh4aGhoeJioqLjI2MjIuKiodXR0xMTUtOSUlLSElKSklGRERGR0ZEQ0ZHRUJISUtHSEdGR0dFS0pMSUpLSkNGQ0NEQkFBQ0JEQ0NERENBPTs9QGhwc3R0dnd6eHt8fH19fn5/f359fX1+fn9+fn59fn+Af3+AgH9/gICAgICAgICAf3+AgH9PQT49P0RMS0BCQkE5Nzs+Ozw6PT8+Pzw/PkJBRT9ohIKFhYeIiImJiIiHhoaGiIiIiYqMjYyMi4uKjH9QTVBNS05LSkxJSUpIS0dFR0hISUVFSUdGRUxMTUlKR0dISUpOTU9NTE5LSEdHR0VFQ0ZGRkZERUhIRkNBP0BMbXB0dXZ4eXl5fHx8fX1+fn9+fn19fX1/f35+fn5+f39/f39/f3+AgICAgIB/gICAgICAf1FBPz4/RkdHPTxAQDg3PDo7PDo9Pzw9PT9AQ0JIU36DhISFhoeHiIiIiIiIh4eIiIiJioyNjIyMjIuKjXFNUU9NTExMTElISEZKSkVKSEdLSklKSEhHS0xOTExISElKTVBOT05NT0tJR0lKSElESUhIRkZHR0lHQ0JBQ1VvcXV3eHp7eHl6enx8fX5+f39+fn1+fX5+fn5/f36Af4B/f3+Af4CAgICAgICAgICAf39/VERBQUJHR0I/OD9AODo7Nzw9Ojw/PD0+QEJDQ0xthIOEhIWFhoeIiIiIiIeGiIiIiImJjIyLjIyMi4uLi15SUlBNTk1LSkdGQ0hLR0xKRktPTEtKSkxNTE9QTkhJS0xPUVFQUU9PSklKSk1LTEZHSEdGR0lGRUVCQEJCXHByd3h5enl5eXt6e3x+fn5/fn59fX19fn9+fn9+f4CAgIB/f39/gICAgICAgICAgH9/f39VRUNFRUdHRUQ7P0E7PTw4Pz09PkBFRD5CRENGSnSGg4ODhISGiIiIiIiIh4eIiIiIiIqLi4uMjIyMi4uNfFdWUlJUUk9MS0tFRkZLT05PV1ZRUE9SU1JNU1RPTVNMUFNVV1JTUlBMSk1NTUxOR0dKRkZISkRERUVCRENjcXV5eXp6ent6e3p6fH59fX9+fX19fXx9fn5/gH9/gICAf39/f3+BgYCAf39/gIB/f39/f1VGRUdHR0dIRj5AQj0/PTxBP0FBRFRLQkhJRklLeIaDhYWEhYeIiIiIiIiIiIiIiIiJiouKioyMjIyOi4uLZ1ZWa2FFUlFRUEs7O1FTUmB1XVVWVFZZWVJYWFJaZlBVV1pdUlRXUVBOUlBQUVFLS0tHSEpIRUZJSUlISWpzdnl5enl6e3t8ent8fXx9f359fX19fX1+f39/f3+AgIB/f39/f4CAgIB/f3+AgH9/f35+VEhKSUlHRkZFPz9BQEVBQ0ZEQ0RLVlBKUFBOUFB5hoWHhoWGh4iIiIiIiIiIiIiIiIiIlJyMioqMfWGKi4uHbFtkVTpYWFhTUT9AVlVZXGRgVllicl5dVl1aVkVRWVpcWV9UWWdSVVZYVFRWU09PTUtMSklJTE1LT01UcHR2eHl4eHp5ent6e3x9fH5/fn1+fX19fn1/f39+f4CAgH9/f3+AgICAgH9/gH+Afn9+fn5WSkpJSEdGRERCQT9ITElNUEtJSk9TUlFUVlVWVHWFhIWFhYWGh4iHiIiIiIiIiIiIiImcnaCPiY5nO36MiYqLem5wWFpbWlJTUldWVFpadYNZVX2QYVxYXV5XSVZeXltbX1lIWVhZXF1YWFlXUlFNUFFNTU9TUVFVUmJ0c3Z3d3Z4eHh6e3t8fX19f39+fX59fX1+fn9/gH9/gIB/f3+Af3+AgICAf39/gIB/gHh5fVlOS0pJSUZCREBBOk9RUVdYUFBQUVJTUlZXV1dXbIGCg4WEhYaHh4eHh4iIiIiIiIiIiJaanJeIioFuhomIh4OKfmZZWVxZU1ZUV1JRV1ZjloBRZXJYWldfaFBgZlpaWFxoYkdPWmlnXFtcXV1XU05TUFBRVlZWVllab3N0d3Z2dHd4eHt7fH19fX5/fn59fn19fX9/f3+Af39/gH+AgH9/gICBgYB/gH1yfX9/b3R8XVNQT01LSkVDP0A7UFBaWlpSU1FPUVJRVVJVU1ZedXiAhYSEhYaGhoaHh4eHiIiIh4eIh4ORjomJiIaFiIiGfYB7XFBWWFRSVFJRUUxPTUtmeVpdVFlVVl1aTFRaVVNUXlpYV1dXemtYWlxcXlNQUE9JTk9XVlhaWmRxdHd2dHR2eHl5e3t8fX19fn99fX1+fX1+f39/f4CAf3+Afn56eHd2c3V7f3+AgHRrfn5rcnleW1ZVU1JPS0ZDREFNXoNsVlJTT09RT1FWUVNSUlRjZHaAg4KDhISEhIWFhISDhoaGhoeIhn6JiYiHhoOHh4d5bXFWSUtOTktNS0hKREZIRUM+U2NVf1JRUU5LUlVSTU9ZUU1OUVNVVU1RU1JQTkxLSENJR1JTVFldbXJ2d3V0dHd7enp7e318fX19fn19fX59fn9/f3+AgH99fX5+fn9/gIB+e3Zzd31+fmR1fWlxdGBkXV1bWVVRTEhMSWFsknRQUVNNUVJQU1tSU1JRUlVVYnN7fH6AgYKBgX99e3uAf4OChYaHgoaGhoGEgYaFhnVfXUtDPkJCQ0NBP0RQQ0NAQz5CSEdWQEhOTUddaVFIR09GREVGSEdIQkNIR0hKR0RBQUNATlBNUmR0dXZ1dHR2eXx7e3t7fX19fHt+fX19fn5/f3+AgIB/f3x8fX+Af39/f4CBgH12dHt/bWh8Z25xZmllZGJcWFNRUFVSc1dlW09PTkxSUlBVWVNVUVFUUk9WYGtsc3Z6e3h5dHJuc3RzeXh+foOAg4OCgIKAgoGBa0xHPj46Oj5APz4+PmpQS2FFRkhJRUI/R0xNR01RVUpCRT8+PD08PT0/PT9BQ0I/Pjw9Qj5JTUZVb3V1dnN0dnh7fHt9e3x9fX19fH59fXx+fn9/f4B/f39/enl3eHd2dnh7foB+fXt4dnx1YXhnbHBqbGppZmBbUVFaXFleSUpPUE5LTFFSUVRWVVdRUVdWUFhbYl1hZ21tbG5qaGBucmltbHF1e3p9e3h6fHx4d3hkQkBAQTw6QkNBQUNBW1xPe05PT05LTE1PT1BMS0xXTklHQUE8OTc3NTk5PTs7Ozg5ODk/O0JHPlx0dXZ2dXZ3eXx8fH18fH19fn18fX19fX9/f39/fn9/f314dXd6e3p3eXh1d3t8eXh1eXdjcWhpcG1ubW1oZl5PT15cWklHT1FRT01QUU5RUlRWWFNSWVROWVpbV1lcX15fZV9dXnF3a15gZ2t3b29sam9tbmxmYllHRkZIQkFGSEVFRkNMUU9hV1JYUVBTU1JVW09PUVZQTUlERj45OTY1ODc5Nzk6MzY1Nzk1PEI9ZnR1d3h3enl7fX18fHt8fX5+fnt9fn19f39/fn5+fn9/e3d1eX18enh8fHx8dHd2d3Z1d2tuaWhxbm9vb2prYFVXXlpXTUtTVFNQUVVPTFJTVFdYU1RYUUxYWVlWWFhWWFldV1hYaHNrXVZgdGthYV9dZGBfXllVUE1PTkxJR0pLSUhGQ1BPU1pXVFROUVNZU1xlVU9TVFFOS0lIQz9BOTk4ODk3ODg0NzU3ODU5OUducnV5eXp7e319fX18e318fX5+en1+fH1/f359fn59f358dHR1e3hycW9vbnR4cXJzeHZ1cWZkZ3JucHBxbm1kXV9fWVdPUFdWVlNUVk9PVVZXWFlTVVRMS1NVVVVVV1BUVVdUVVJdbl5STllgW1ZZO0RVV1NbZkpMUFJST01NTk1NTEpGUFBVWVNUT0pOT1VTVFxWUlVTUk5NTElISEY/Pj06Nzg3NjU5OTY3NjY1WHFxdHh6ent8fX19fnx8fXx+fX15fX18fn5+fXx8fX1+fXxydnF4eHJ1dXFxbnBwb3B1dnRuamRkanBwcXJwbmZlZGNcXlJUWlZXVFNWVFJYV1lZWVJVT0lHT1BPT01SSk9QT09OTk9UTE1JUFBTVFUyPFhNSUBRPWNgUVNRUE1QUE9OTk1QTlRSUFJMSUxLT1JQUVJSVFFST0xNS0xMSENCQT06OTg3NjtCNDU2NjtlcHJ2eHl7fHx9fnx9fH19fX18e3h8ent9fX58e3l9fH18e3B1b3d1cHV0b3N2cHFxcHV1dmNqZ2VXaHRycnFuaWlocFZWVFVYVVZVUldWVVpZWFdWUVNGRkFGR0dIRkpESEpIR0VITEhLSUdMTVBNRy9FX1I+NEA+am9hUlJRQEdUUU9QUFFOUU9QT0xKTExQUE5NUFFRTlFPSkxNTUtHRUVDQjs9PTw5PUc2Njc2RW5xdXd6e3t8fX18enx8fX5+fXt5dnh3eXl8fXp6dn17fHp6b3Fud3JwdnFtcHNwb3Bzc3N0ZmdgaFpXa3JzcmxtbWtuYmVQU1RSU1VPV1ZVWVlWUVFRT0A+Oz0/QEJBQ0BCRURBQEdIR0hGRkhKTUxER0NPUkM4RE1TXWdTUVNBR1VQT1FRUE1NTkxKTEtMTk9PUUxPTk1JTEtJS0tMS0dGRkVEPEFBPjtARTs8ODlUcnN1eXt7e3x8fHt5fHp6fn58e3V0dXJ2dnp6eHpyfHt8eXltcW94cnF1bm5xcm9vb3Rzc3J1dGtnZ15lam1wa29xbWltY0xPTk1RU0xUVVRXV1VMTEtIPTk4Nzs/QT89PUFAQj09RUhGREZGSUdKSkBGQUFARkdESU9IUVJhXFFQUk9TTk9PTExPTUtNTE1PTltWS01RT0dJSENJS0xMS0ZGRkU/QkM+PUJHP0I/QGRydXd7ent7fHt6end8eHl+fnt7cXN0cHJzd3R4eHN6e3l2d2xxb3ZxdHRsb3Fybm5vc3ZydHNycmtsZW5zaG1ubWxtbGprSUxISE9RSlFTUVRTT0tIQ0U9OTg3OT9CPzs+QUBAPkFFSkVDSEdJR0lFQkI/PjxCQEBHSkVNT2JlUE1PTVdLTE5LTE1NTExLTk5TZE1KTFJJSUlGQkpLTE1OSkdJRkJCQkA/RUZFSERMb3B2enl5e3t6fHp3c3h1eHx8eXpucXFtbm9ycnZyc3h8eHZ2bXBtc3B1dGxwcHJvb29ydnVyVlZucWdseYRqbXFybm5qaG9ISkNHTExJTVBNUE9IS0U/Qj05OTo6P0I/PEFCQUFERUdLRkRJSUdHSENDP0I+P0BAPUNFRExNUVRMSklNVEZJSUpMSUpLSUlMTU9QUVBLR0NLSENDS0tMTk9OSUpJR0NDQ0RJSk1MSVpzbnh5eHp6e3l8dnJwdXJ0eXl2eGpxb2tsbG50dG1zdntzdHhyb25xb3ZzbnBvcnBvcHN0eWpOYGdzanR8eWdvc3FqcWhlcUhLQ0ZHSEdKS0lKTERHQjw+PTo6OjtBQj89QkJDQ0hFSkxKRUlJRkdIQ0M7QUBCPkA/QkRESU1PR0hKR0hLREhJS01ISkxISUpMSk1dUkhJRE5HQkVMTE5OUE5LTUpLRkdHSk1OUk5NY25qd3Z3e3l7en1xbWxza3B0dHR1aHBtamlra3RwbnR0eXByenRvcnFvd3NvcXB0cnBydXR5a05WbXVscXt2aW5vaWt0aGVwRkpDRkVGREVFRkVHQ0NAPTw9Ojs6O0FEQD9CQ0VFSUZKSkxGSUlHRkZEQjpBQ0M+P0NDQ0VHS01ISk5IREhFSUxOTUhJTEdGRklJTE5LSUhFT0lDR05NT01QTk5PTUtJSElPU1FSTlNnZ2Zyb3N4dnt6fGxoam9la3Btc3FmbWxoaWtsdG1vdXR3cW94dG90c3J2c3BxcnRzcnR1dXZ2WFZ1dWtvdHJrb3ZsaG1mX3BHSkNFRURCQkFFQERCPj8+Ozs7Pjs9P0RCP0FDRkdLR0pJTEhHR0dGRUM/PURFQj5BQ0JDRUdISUdNUElFRkdLTk9LRkhJRkVDRElKSEtJR0hQS0RKTkxRTk9OT1BPSkpJTVJVVVJQWGVhYW1mcHJvcnl6Z2VoaGNpbGZxbGZsbWdpa2xzbXB3dXRwbnZyb3Nyc3V0cXNzdXRzdXZ2dnl2dXR2bGt1dW1ydnFsbmxlck1HRURGQkFAQUQ8QkE+QT06Oj0/Oz4/QUI/QEJFR0pGSkdJR0ZGRkRDQkFBRUZDQkJCREVFR0dIRkxQTEhOSkpMS0lGSEVGRUNDSElIS0pHS1JOQ09PTlFQT09OT1BLS0tQVVdWVlRZYF9daWBuaW5ocnNiZWZmZGhoZm5pZm1taGtrbXJpcXZ1c3Ftdm5vcXJzd3Nyc3R1dnZ2dnd2d3Z2dHd1a3N1bnV0c3Fza2tzTUdHRUZBQkBERTxBQUBDPDg6PT46QD1AQ0BAQURGSUVIRkZIRkVFRENFQkRJRkNHRUFFR0VGRkdFSU1LSFFNSktISElFRkhIRUNJSUlLTUtQU05EUlNSUVNOUE1PUE1MTlNXVlhZVlheWl1kYGljamlna19kZWZjaGdna2dna21rbWxwcWd0dHVyc252b3FwcnR4cXNzdXZ1gpF5dnZ0eHV1d3hub3VvcnN1cXFpcHpNR0dHSEJCQkVFPEBDQkQ8Nzo+Pjs+O0FCPj8/Q0VHREZEREdFQ0VDREZGRkpFRUlHQkdIRkdGRUNGSkpHTUtMS0hKS0ZJSEpIRUtLTExOT1JUT0hUVVRRVFBSTU5RT01RV1pWWllXWl5aWGFgYWBeaGVjYGRlZ2dqaGhqZ2hubGxvbXFwaXV1eHJycHVwcHBydXZwdXN1dnV7fn14dnR3dnZ2d3BsdXBtc3Vub3NzeU5ISEdJREJDSEU9QEVCRD04Oj4+PTw8QkI9QD5BQkZDRUNDR0NDRERGR0dHSUZISkhDSUhHSUdGREhLSUdLSE1LSktMSEtKTUtJTkxPTk9SVVZPTFZWVFFUUlJMT1FQT1RaWllcWlpcX19dX2NfXGJkbGNgZGdocoVoZ2pmam5ucG9uc3FqdHV4cnNzdHJucHF2cnF1cnV1c355jn11dXZ2dnZ4cml1cWtydGxxd3F1TElKSEpGQkRHRT1BR0REQDo8PkA/Pj9DQjxAPkFBR0NFRENIREVERkZHSEZIR0lLSkVKSEhKSEZGTEhISEpHTEtMTExJTUpNTk1PTFBQUlVWV09LVlZVU1NSUUxPUlJRVltbXV5bXV5gYGFgYmZdZGBmZ2BlaWpkc3NmamhmbHBycW9zc25zd3dwdXZ0c21vcnVvcnNwdXJ2cnSBdnV1dXd2dXdzZ3Rya3Fya3J3cHdKSktJS0dCRURFPEFGRERCOz8/QUBAQURBQEI+QUNIQkVERkdFSEVGRUlIRklISkxISEpKSUtKRkpLSElLSkdLS0xMSUlNS01OTk9MT1FSVVdWTU5UVlVTUlFQTU5UU1JXW15eX11eYGBhYmJgZGRlYmRpYmRpamd2i2xraWdtb3NxcHFwcHJ5d3J1dXRzbW1zc21xcm90dXVzcHN3dHV1d3Z1dXVmcXNrcHFqcnZwd0pMTEtMR0NDQUU8QEVFREM9QUFDQkJDRUFDREFBRUdDR0dIRkVJRkNHSkdHSkZJTEhJSk1KTUxHS0lITEtOUUtSUExSTEpNTU5QUFBVT1dYWFtOU1FXXFpTVlBOVFVUVFhaX2JiX2RhXmFjX2FmY2FiaG5oYmloaG14dm1oaW5vc3JwcXJycnZ0c3Vzc3Nua3NxbXByb3R2c3FxdXZ1c3d5d3V0dWNtdGtvcGpxdHF3TE1MTExHREFARD4+REVGQz9DQUVEREZDQkVHQ0JIRkJISklHSEpGREtKR0hKSElLR0pKTktOTElMSEpNSlpmSmRbSmxSR05NX25VbHNbcXBid2NSUGJ2dWh1Y2F2YVhucWJkdmltemZcbHRgbGtWYHd2aWpnaGZnbG1qbW9qbW9zcnBycnFyc3Jzc3J0cm5sdG9ucHFxdXVycXN0dnZ1dXl3dXR0YGt0a3Bwa3FzcnlMTkpLSkZCP0BCPzxEREZEQ0NDRUVERkJFRkdEREpFRUpMS0lLTEdHTklISktHS0pJSkpOTE1NTExJTU1MW3NiZHBdbGxVTE5lcl1nZXFsbnRncGlfYVlubWJwcGJrampnb3F0ZXRub1xwdmdwT0xyeXZrYWFrZWVseG1rdmxucHNycHJxcHFycXJycnRybW1zbm5vcHJ1dHFzc3R1dXV0d3l2dHRibXVrcHBscnJye0tMSUhHRUQ/QUE/PUJFRkJFQ0VERUVEQ0hIR0RES0hHS01NSkxMRkpPSEpLSklLSkpJSk1NTk1NTUtOTU5bcnBvbnBwa2pMT1BtWE5pYnRycGFtb3ZcWWxQW21tWnFta3BseHh0c2lwXGBzbHFrVXV5eG9jXmtmYmdwcGppb3Bwc3NwcXBxcXJycXFycnRsbXJtbW5vcnV0cXRydHV1dHV1enZ1dGVudWtwb2xzcnJ5SktHR0VFREJBQj0/P0VHQkdESEVFREJGSUhIRUdLSkdNTE5KTE1HTE5JTUtISU1JSklKSk5PTk5NTE5NTFxoZHVdbHFWa01PUW5VWmtea2x2YWxkdFRlY05sWWxcdG9samx4and1aHBdX3NraFdiY3d8b2NgZ2hhY2l0eWtubnFzc3BxcHFwcnFwcHBydWttcW1tbW9xc3Ryc3J0dnZzd3Z6dnV0aG91bHNvbXNydHZJTUZJRUVEQ0FCPEJAQkZDR0ZLR0VDQ0hLSEhGSUxLRk1LS1JSTEhNTUlOSklHTUdKSkhJTk9NTkxKTU1KWnRwcG9xcWxrT1FSbllza2dvb3Fxb210Xm5YYXRfbm9wb3Fzb291c3R0alpedGN3eHJqbnpoYWFjZmFiam10dXBzdXZzcXBwcW9ydHt/fn13bGtxbmxtbnByc3F0dHN1dXR4eHl5dHVrb3VtdG9uc3N2dElLSEpDRERFQEA+Q0NBRkNISU1IRkNGSkxJR0ZKTUxGT0pKV1JLR0xLS05JSUpMSUtKSUlLTE1NTElLS0pTa2JZaV5famNyclpfWWpvX2VlVWtfY1thYVFgbWhcalxuaWpkW29lZHBdWlxrW21xY3BzbGRnY2RnYGBrbXBwb3R5cnVxb3BxbnmFiIeHhoWAdnNua21tb25xcnR0cnR1dXZ5eHhzdW5xdW52cXJ1dHdySEhGSkRFQ0ZBQEFFRENGQkhKTEdGQ0ZLTElFRkpPTElPSkxbUUpGSElMTUlISkpLS0lISUdLS0tLR0hKSUtLTEpJS0xOVFtdVFBVTVFPTk9PVlFPUFFOT1FKSk5QUWRxaVRZVltbXFVZWl1YXVxcY2ZhYWZiY2ZfXmZrbWhtdHlydHJvcHB0hoeGhoaFhYaHg3pwbW1sa3FzdHRydHZ0dXl5eHV2cXJ1b3ZydHN1dXNIQ0VHRkZARUM/Q0dERkdDSUtMR0ZER0pMSERHSVBLTE9LTFdNSUZFSEpKSElLSExKSUdISEpISEhFRktISEpOS0hPXFdeT1xcYF5PWFlTXFxiXk1ZWk1YYVJLWWFaU2BkXGFYW2RkVlZYXFlaWFxWWVxeY19kYGFfZWhrZ210dHFxdHBxcoGGhoaFhoWFhYaGhoR9cmtpb3Jzc3N0d3l5eHl4d3h0cXhyeHNxcnVydFBCQ0RMTUFDQ0JESUVHR0ZLSktIRUVKSkpGRUhIUEpMTUpNUklIRUFIRkpJS0tJTEpJR0ZKSEVGR0VFSkZCSUxJSlNfWWBYYGFbYFVYWlRdXlpfUllcUF5cWU5fXF5TW15kXlpdYGNfWV9iW2BeW1VZWVpfXmNjYmFjZWlla3Jwb3Bwbm93hoaFhYaCe4CFhYaGhYaFf3VxcHJyc3V5enp5eXh4eHdyeXZ4cnF4dnR2YVNKSk1JRENBQ0ZHRUdHSUpKSUlERktLS0VGSUlOSk5MSExOR0hGPkhHTElLS0pLS0lHRUlGQ0RFQkZKRD9JS0hOWmJZXl5hX1JUU1dfX1xdWV5RWVxNVl9XS1FZW1FbX2JhXV5jYWBiYWJjY2VaUlpXV11aXWRgX19jZWJob21tbGxsbHWFf4SDeXV8hIWFhYaGhYWGhoN9d3JydHd5eXl5f359eXV5dnZybnp3dnhZUUpGREdFQkRISEZHSElGR0pHSEZIS0lLRERKSk1NTExISkpISkdAR0ZOS0tLTUtLS0lHSUVFQERBSElBPkhJRk9dYFpbZF1fVFFSWF1cXFxfW0tXXExSXFlJTV5RUV1fYmNjY2NiXGRiYWRjZlhSV1VUXFhbYV9eX2FhX2Rsa21qa2xudn51gXp8hIWFhYWFhYaGhoaFhYaGgnpyc3V1e4WHh4eGhYSBfnhwend2eFxSTUNASUZDRUtJRkdHSUdHSkdGRklMSk5FQ0pKTE5KTElLS0lJR0NISFFNS0tPTUtLSUhIRkU/RUJISEFARkVDU11ZXlhfWF9bXVVYWE9dXFFLSlZeWF5bXVZaYVJSX19iYmBgYmJfY2JhZGRhWFBSUlNcU1xdXV5eX19fZGlnbGtubnB7e3x+e4CCg4SFhYWFhYWEhIWDhIWHh4FzcneFh4eHh4eHh4eHh4WDgHx4XFNLQkFHRkRHTVJIRFJLRkhISERGS0lNUEVHSUpLTkxMSkxMSklHREhLUU9NTFBNTUtMSUpERUFFQ0hGQUFGQ0FVVUVcVF5TV2BYTlRVTVlaTEpLVGBhW19YX15iXU9ZYlxgYF9iY2FdYmFXYF9VUVBRUllTXlxbXV1eYGJmZmZsZm9vd3x7gHt9f4CEhISEhIWFhYODhYKDgoWFhnpvgYaGhoeHiIeGhoaFhYSFg35JTkZERkZIRElTY1FFV19JR0dIREZNSlBQRklJSktOTExLTUxKSkdFSk5RUU5OUE1OTU5JTEJFQUNDRkNCQENEP0xHQ0xMUE9PTUZNRkZISUdGTEtNT1BJTE9QUFNQTFFUU1VaWFdZV1djVk5SVFBRUE9RVlRcWVlbXVxhYWVmZGhkbG1xc3N6eX97en+EhISEhISEhIKEgH57gYOBfXuFhIaGh4eHhYWFhISEgoGAfUtJRUVHRkdES05eTUhIWU1HSEpIR01MUVFJS0pLS05NVU5PS0tMR0dLUFNTTlBQTk9PT0lMRmFFRF5MRGZiQ0xaR15cc21PTVZuWUtDUF9Ua1ZnSl1YVV5ETFFVTE1TVlFSVFhWVFhUVFxUT2VaaGhlWlVrVFhXVVtcW2BgYWJiY2FnaWdubGhzenx9foGEhISDg4ODgX19enJ7gXp7f4KAg4SEhYWBhIWBg4N/fnp7TElFRkZIRUVMUFRKS0dgVEhKT0pJT01SUUtNS0xPUlVST1BKTE5HSE1RW1lPUFBOUFFQSktRf1FJfFlZcnNXUG1HcW5vYVZQcXF0T0Jrc21xc3BTb19bblhdVlxYVWtoVV1WY1lgWVpeVVVXf2l0dXVgYXZfWWJcXGZbX2FhYWJfYWNnbW9tYHB3dHiBgYKDhIJ/fX6Adnh6bXZ+dHh9gHx+gIGChHyAg3p/gX9+d3dOSUVITU1CRExMR0pMRlJWTEtPSExSWFdRTk9PTVFUTk9RUExMT0dNUFNbWlRRUk9QUFFMSVp4XVR4ZGhYUlNQdmZ0bHBibmZrUnJOTHdtanJwc3JxcnBvb4BdZXp1eHFxenF+cn1rdX1hUmh8ZXNzcHNzfH1wfnhvf3JgYGBiYltiYWhsbmtibGZnbXd+gYCDfnt4d4B0dnppcX5udHx+d3h7foCDeHyBdXx/fHxzc05LRmBdR0FETU1IS0tIS1BPTU5KTlZeWVVMUVNOWVlMU1NTTkxQSVFSVFlXV1BUUFBQU0xIZ3hsY3hxbVpKS1R5cHVtdWJudlBkZEhldnFtd2+AamZ4eGlXclFoem1panp6fmx4en9waG5YdXVqdnVxgWFzaH1pbHh8b19fX2NiXF9jZWdqamVnYmNkbG1wcHN0c3NzeXFyeGJtdGdyeXtzc3V5foFzdnpufH15eHJuTUpSdE5DQkVQUUhLTEpMUU9PT01QWmBaWEtTV1BhXlJWUVlTTVBKU1RWWFdXT1VQT05SS0xyb3V1cXVxY2hgVW5LcXBeR2h5V3ZUS2h4fXdgeXtzbmFdbW9kU2dydW5teXB3a3VzdHFsbVxzfnprbXl8bHVufGtxd3V4Xl9fYl9eYGVkaWdoZmVeYmJpaWlqa25va3FubWpwYWNmY293eG9tcHN5f25xcGp7enRyb21LS1pWSEdFR1JRS01OTExRUVBQUFFXXFlVTlZZVWZYUlJZXlRNTkpUVFdXWVdPU09PTlJJUm1IaXdLYGR2dlRWbE5ubHtyYWpnf3VUS1drZ3xsbWx4X1pwentfYHpzY3JveHFnY3xpcntdVEtsX3Z1bGp2fHtuf3lsfHBdXl5iW19jZWVnZmVlY1tjY2lra3JzcndnbWloZGdgYWxhZ3NybGdsbXJ8a21oa3t0bW1rbU9HSktISkhIUlFNT1BMTFNTUk9TUlhSV1RQV1pWVlRUVGFgUU9OS1RTU1FWVk9PTU5PUUtIUU5QVUxLS1JTUlFST1ZVUVFPUlJYWFBNT1VUV1hYW1tVUVJXW1dYV1tPUlRXV1hRXVhWXFVUT1hSV1dYWVpgXGhzX1xbW11dX2NaX2RkZWdkZGRjWmRiZ2ZmbW5tdWZmZ2NgZl5dZ2BkbGhmZ2tocHpoZ2drdWpoZ2lsUElLS0xNS0pUUk5SUVBMVlZUUFRVWFVaVVJaXVVVVFdVWVhPT0xOV1RQTlVTTlBOTFFQS0lRUUtRTUpKT1FUUVBRU1JKSE1PUFFSUFBQVFVSWFdcV1NTUFFVVVZTWlFOUlJXVFJYVVNYVFNRVVNVVVlZWF5aX2FdXFtaXFxgY1xeYmNkZ2VlZWNaYGFkYWJoaGpuY2FkXl9jXVpjXGJtYV5mZmdtc2RpaGtrZWRjZ2hRSktLTk9MTVRRT1RRUk1YV1VUVlhXV1pWU1xgVldWWVVYVFFQS09YU1BOVVBOUU9MU1BNT1VTTlFOTU5RU1BUUFFUVE5LTU9SVFRRUVFVV1VZWltZUlVSVFhXVllcU09TVFdUU1lUVlhUUlFXVlZYXFpcYF1XWV9dXl1cXWFhXltiY2NoZ2ZkY1hgYGJeYGhlZ2VhXl9dXV5aWl9aX2dgXl5dY2hrYWhmaGZkYGJkYlBLTUxQUUxQVVBQVFFPUVpZWFdZWlpYWFZdamRWWFlaV1ZTVE9LT1ZUUE9UUFBRT01SUU9SWFRRUU9NT1JUTVdRU1RVT05OUVRWVVJSUlRYVlpdXFpWVlFSV1hVW1tWUFNVVVVVWFNXWFRSUVhWVltfW15gX1ZfXV5gXVxgX19fWmNjZWhoZWViWWJgYl5fZmRjYGJdXFxcXFlaW1hbYVteXV1fYl9fYmRkYmRfX2BcUE1OTlJRTVJTUFNUUU9WXFpaV1tbXFlaW2RxbWhkX1tZVlZYUk1NV1NNTVJPUlNPTVBTUlVbVVRQUExQV1VQVlFSUlhNT1BSVVhVVFRTVFlYW15dXFtWUk9VV1VbWlZRU1ZUVVdVU1haU1JRWldXXV9bYGBgVmJcYGFdYGJfXGBdY2FjaGllZ2FaY2BhX19lZV9gY1taXFtcWlpZWVdcWlxaYF5fW15eYWBfY1xZYFpRTk9OVlFQVVNQVVVTUFdcXFxZXl1fV1xeanB3eYBjXFtWVllSTlBXU05RUVBSVFJMUlRUWVtXVU9STlNYVVNRUlBSWk9RU1RWW1ZWVlNWWlhdXlxcXlZTTlRWVltbVVFUVVVXWFJTWVtTUlJcWFpeX11iYWBXYltjYl5hY19cYmFiX2RnaWVnXlxkYGFgYWNkX2JfWVpfW1xbWFhZV1daWlphXV1bXVxcWl1gV1tbWlBPT09ZUFVVU1JXUlRQW11eXVxgXGBVXFxoanJ9c2xoXFVZV1FPU1tTUlFTUlVVVUtSV1ZaWlpTT1NRVVVUUk1UUFJaUlRVVFhdV1hYU1hcWF5dWVpdVVVOVlZXXlpXUVRVV1hYU1ZZW1RSVl1ZXV5hXmNjX1lgW2ViX2RkXl5jY2FeZWZpZWdfXmRhYWFiY2RfYl5YW19bXFtYWFhYV1taW2BdW1tcW1haW15WXlldUE9PUltQWlVWV1ZTVFReXmBfXmJcYFVdXmJreXVtfWxaVVpWUVFUXFRUVFZUVllXTFJaVlxbXFJQVVNXVVVST1ZQU1hTV1VWW15YW1lVWl5YX15ZXFlSV1JZWFlfWVlSVFVZWVlVV1lbVVRaXV1eYWJgZWRdXl1dZWFiZmReX2RjYFxnZWhmZWJgZWFfYWFiYl9gXlZZXlpcXFpZWVdWXVpdXltaW1xbV1lcXVZYV11TT1BXWVFdVVdZV1dVWF9gYWFgY11gVV1eYmVldoJ7aFhZWlRWVFZcWFdXVldXXVhPVVxZXl1dVFNYUlZVU1FSV1FTVlRYWFheXlhdW1VdX1hfX1hcVlFYVFpaWmFYW1RWV1pZWldYWVlXVl1eYF9kY2JmZV5iXGBmYmRmZF9gZGJhW2ZjaGZkZmFmX19iYmFhYF9eVlVdWltcW1lcWVldW1tbWFhZW1paWl1fXVRZXVVOVFpWVFxVV1dZV1ZcYGFiY2FjX19WW2BkYV96dW9oWlxaVlhWWFtaWVtZWFlgVk9VXVtgYVxVVVlQVFZUUlVVUVRVV1tbXF9fWl9cVl9fWV1eWV1WUlhXWllcYlldVVZaW1pbWlpYWlhZX19gYGRjZGVlY2RaYmZjZ2ZlXmFiYGNdYmNpZWRnYGheYmJjYWFgXl9ZVFtaWltbWFxYWFxbWltXV1pYWFxbXGBdVl1dU09WWlZWWlZZVlhXWF5gYmFkYWRhXllZYWRiYGtmaF5cXVtXWFlaXFxcX1taW2JWU1deXWFjXFNWWVBWVVVVVVVTVVRYXV1fYGBdYV1XYV5bXlxbXlhVWFdbWl9fW15XWFxcXF1dW1pcV1pfYV5gZGRlZmZnY1ljZmVoZ2ReY2BfZWNdZmlkZWlgZ15jYmNhYWBfX1xYWVtZWllZWlhXW1taW1dYWlRaXVxbYFxVXmJNUldaV1daWVtcWFdZXmBiYWRhZGFdXllhY2JfYWBhX1xdXVhXW1tdXV9fXFpdY1hZWF1gY2RfUlhZUFdVV1hXVlZXVl1dXmFiYV9iXllhXV1eWV1dWVhVVltbYF5dX1lZXl1eXmBcWlpZW19iX2NmZGZnZmhjWmVmZ2lnY19jXmFmZVppaWNmamRmX2JiY2FgYF9dXVpXW1lZWFhaWVdaW1pZV1hWVVxdXV1gYGJieEtXV1xZV11cXF1aV1xdX2BiZGJjYV1gWGJjYmBjYWNeXF1cWFdbXV9dYF9dW2BkXFxYWmJlY2FSXFlPWFZZW1lZV1laYF5hYmNgYWNfXGJdX11bXl1ZWVRYXVxfX15fW1peXmBiYltbV1tdYGJiZGZkZ2ZmaGVdZWdoaWZjYWJbY2dgXGlpY2hqZ2VgYmFjYV9gX11dXFlcWVhXWFlZV1xbWldWWFBYWl1hY2Zmcmt/SllXXVtaX11cXlxZXVteX2JjYmFhXWJbYmRiYGNiYl1dW1pXWGpxYFxgX11cYWNfXllZY2VkYlRfWlFZV1xdXFtZW1tjYGNjY2BiZGFgY15gXF5eXlpYVVteXFxhYV9dW2BhYmZiXltTXF9gY2RkZmVnZmZnZl9mZ2hoZ2RkYFtlZ15haGhjaGlnZGBiYGNiX19fXV1bWltZWFhYVlpWXFtaVlZVTFhYXGdpa2h1eIF2dnZ2dnZ2dnZ2dnd3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d4eHh4eXl5enp6enp6e3p6ent7e3t7e3t7e3t7e3t7e3x7e3t7e3t7e3t7fHx8fHx8fHx8fHx8fHt7e3t8fHx8fHx8fHx8e3t7fHx8fHx7e3t7e3t7fYmIh4mHhYKBgoOCg4OCgoKCgoKCgoKCgoGAgYCBgICAgYCBgYGAfnx8fHx8fHx8fHx8fHx8fHZ2dnZ2dnZ2dnZ3dnd3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3h4eHh5eXl6enp6enp6ent7e3t7e3t7e3t7e3t7e3t7e3t7e3t6e3t7e3t7fHx8fHx8fHx8fHx7e3t7e3t7e3t7e3x7e3t7e3t7fHx8fHt7e3t7e3t8iYmHiYaFgoGCgoGCgoKCgYKCgoKCgoKBgYGAgICAgICAgIGBgYB9fHx8e3x8fHx8fHx8fHx8dnZ2dnZ2dnZ2dnZ3dnd3d3d3d3d3d3d3d3d3d3d3d3d3d3d4eHh4eHh5eXl5eXl5eXl5eXp7e3p6e3p6enp6enp6ent7e3t6ent7e3t7e3t8fHx8fHx8fHx8fHx7e3t7e3t7fHx8e3t7e3t7e3t7fHx8fHx7fHt7e3uHiYiJhYSDgYKCgoODgoKCgoKCgoKCgYGBgICAgICAgICAgYKBgH58fHx8fHx8fHx8fHx8fHx2dnV2dnZ2dXZ2d3d3d3d3d3d3d3d3d3h4eHh4eHh4eHh4eHh4eHh4eHl5eXl5eXl5eXl5enp6e3t6enp6enp6enp7e3p7enp6ent7e3t7fHx8fHx8fHx8fHx8fHx8fHx8e3x8fHx8e3t7e3t7e3x8fHx8fHt7e3t7e4aJiYiFhYOBgoKCg4ODgoKCgoKCgoKBgYGAgICAgICAgIGBgYCAfnx8fHx8fHx8fHx9fX18fHaIi4uLi4uLgX19fX19fYSMi4uLi454KSkqKiopKz0/Pj4+Pj5tgH5+f397pdfT09PT08/ExcXFxcXH0tTU1NPT08S+vr6+vsKiioyMjIyNiX5/f39/f359fHx8fHx8fHx8fHx8fHx8fHx7fHx8fHx8fHx8fHt7e3t7hIuHh4aHgoGDg4GCgoKCgoKCgoKCgoGBgYCAgICAgICAgYCBgIB+fHx8fHx8fHx9fXx8fH19doyQj4+Pj5CDfn9/f39+hpCPj4+Pk3kZGhoaGhocMTMzMzMzMmqCf4CAgHut6eTk5OTl4NTU1NTU1Nbj5eXl5eTl0svMzczN0KqNkJCQkJKLf39/f39/f319fXx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx7e3uCjYeIh4eDgoSCgYKCgoKCgoOCgoKCgYGBgICAgICAgICAgICAgH58fHx8fHx8fXx8fH19fX12eHh4eHh4eHd3d3d3d3d4eXl6enl5d29wcHBwcHBycnJycnJyd3p5eXp6en6Dg4ODg4ODgoKDg4OCg4SEhISEg4OCgoODg4KDgHx8fX19fX18fX19fX19fX19fX18fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx7e4CMhomHh4SDhIKCgoKCgYKCg4KCgoGBgYGBgYCAf4CAgICAgICAfnx8fHx8fHx8fX19fX19fXZ2dnV1dXh2dnZ6e3h7eHd2eHx6eXl6fnx5eXh4eHh5eXl5enp5eXl5enp6eXh4eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXp7e3t7fHx7fHx8fHx9fX19fX19fX18fH19fX18fHx8fHx8fHx8fHx8fHx8fHx8fHx8f4uHi4qIhIODgoKCg4KBgoKDgoKCgYGBgYGAgIGAf4CAgH+AgYF+fX18fHx8fHx9fX19fX19d3d3dnZ3fXh3d316eH14d3Z6fXl7e3l8e3h3d3d3eHh4eHh5eXl5eXp6ent7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7fHx8fHx8fHx8fHx8fHx9fX19fX19fX19fX19fX19fX19fHx8fHx8fHx7e3x8fHx8fHx8fHx+iomMjImFg4SEgoKDgoGCgoKCgoKBgYGBgYCAgICAgICAf4CAgH19fXx8fH19fX19fX19fX13d3d3d3p9eHt4fHx3e3h3dnp+enl7eHt6eHh4eHh4eHh4eHh5eXl6enp6e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3x8fHx8fHx8fHx8fHx8fHx8fX19fXx9fX19fX19fX19fX19fHx8fHx8fHt7fHx8fHx8fHx8fH2Kio2NioWDg4OCgoKCgYGCgoKBgoGBgYKBgIGBgICAgIB/gIGAfXx9fX18fX19fX19fX19fXd3d3d3fX55d3d4e3p7eHd3eHl8enx3fHl4eHh4eHh4eHh4eXl5enp6ent7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3x8fHt8fHx8fHx8fHx8fHx8fH19fX18fH18fH18fHx8fX19fX18fHx8fHx8fHx8fHx8fHx8fHx8foqJjo2JhISEg4KDgoKBgYKBgoKCgYGBgoGAgYKAgICAgH+BgIB8fH19fX18fX19fX19fn5+d3d3d3d5fHl7eHx9eXt4enp6fXx6fHh8eHh4eHh4eHh4eXl5eXp6enp7e3t7e3t7e3t7e3t7e3t7e3t7e3x8fHt7fHx7fHx8fHx8fHx8fXx8fX19fX19fXx8fHx8fHx8fXx9fX19fXx8fHx8fHx8fHx8fHx8fHx8fHx/iIeNioeFhoaDg4ODgoGBgoGCgoGBgYGCgYCAgoGAgICAf4CAgHx8fX19fX19fX19fX5+fn53d3d3d3Z4eHl3eXp4enh5eXl7eXl6eXl4eHh5eXh4eHh5eXl5enp7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t8fHx8fHx8fHx9fX19fX19fX19fX19fX18fH18fH19fX19fH19fX19fHx8fHx8fHx8fHx8fX+HiIyIhoeHhIKDhISCgYKBgYKCgoGBgYKBgIGBgYGAgIB/gIGAfHx9fX19fX19fX1+fn5+fnd3d3d3d3d3d3d3eHh4eHh4eHh4eHl5eXl5eXl5eXl5eXl6enp6ent7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7fHx8fHx8fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fHx8fHx8fX19fHx8gIeIi4eHiYaDg4SDg4KBgYGCgoGBgYKCgYGBgIGBgYCAgICBgX97fH19fX19fX19fn5+fn5+d3d3d3d3d3d4eHd4dnl5eHh4eHh5eXl5eXl5eXl5eXl5enp6enp6e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7fHx7fHx8fHx8fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fHx8fH19fXx9fXyBhoqKiYmIhIOFhISCgoGBgYGCgYGCgoGBgYCAgYGAgIGAgIGBf3x8fX19fX1+fn5+fn5+f394eHd4eHh4eHZxZGpeam15eXl5eXl5eXl5eXl5enp6enp6enp6enp7e3t8e3x8fHt7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3x8fHx9fHx8fH19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fIGFiYqJioeEhYWEg4KCgYGBgoKBgYKBgYGBgYCBgYCAgYCBgIF+fH1+fn5+fn5+fn5+fn9/f3h4eHh4eHh5bWRiZV9fXm94eXl5eXl5eXl5eXp6enp6enp6enp6e3t7e3t7fHx8fHx8fHt7e3t7e3t7e3t7e3t7e3t7e3t7e3t7fHx8fHx9fHx8fH19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18goWKiomJhISGhYSDg4KBgYKCgoGBgoGBgYKBgIGBgICAgICBgH58fX5+fn5+fn5+fn9/f39/eHh4eHh4eW5kZWdlZGJeZnh5eXl5enp6enp6enp6enp6enp6e3t7e3t7e3x8fHx8fHt8fHt7e3t7e3t7e3t7e3t7e3t7e3t7fHx8fHx8fHx8fHx9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXyChouJiIqEhYaEg4OEgoGBgYGCgYKCgYGBgYCAgYGBgIB/gIGBf3x8fn5+fn5+fn9/f39/f394eHh4eHl3Z2VkZWZkZWFfaXl6enp6enp6enp6enp6ent7e3t7e3t7e3t7e3t8fHx7e3t7e3t7e3t7e3t7e3t7e3t7e3t7fHt8fHx8fHx8fHx9fX19fX19fX19fX19fXx9fX19fX19fX19fX19fX19fX19fX19fX19fIKGi4eJh4SEhoSDg4WBgYGBgYKCgYGBgYKBgICAgYGAgYCAgYF+fHx/f35/f39/f39/f39/gHl5eXl5eWtlYWJlZWFlZV5ieHdze3p6enp6enp6enp6e3t7e3t7e3t7e3t7fHt7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t8fHx8fHx8fH18fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19g4aLhoiFhYaEgoOEhIKBgYGBgoKBgYKBgYGAgYGBgYGAgIGBgn98fH9/f39/f39/f3+AgICAeXl5eXl0Y2NlZGNmY2doZGZsZF5ze3p6enp6enp6enp6ent7e3t7e3t8fHx7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3x8fHx8fHx8fH19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX1+fn6DhouGhoaGhYODg4SDgYGBgYGCgoGBgYKBgYCAgYGBgYCAgYGBfnx8f39/f39/gICAgICAgIB5eXl6d2RhY2diYmRdW2VfYV1eYGFoeHp6enp6enp6enp6e3t7e3t7fHx8e3x7e3t7e3t7e3t7e3t7e3t7e3t7e3t8fHx8fHx8fHx8fH19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX1+fn5+fn5+foSFi4eGhoaGhIODg4KBgYGBgoKCgYKBgoGAgIGBgYGAgYGBgYF+fX1/gH+AgICAgICAgICAgHl5eW9vYmJiZF5jZ19dYWFgXF9kYlttfHp6enp6enp6enp7e3t7fHx8e3t7e3t7e3t7e3t7e3t7e3t7fHx7e3x7fHx8fHx8fHx8fH19fH19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX5+fn5+fn5+fn5/hIiLhoSHhoaEhIODgoGBgYGCgYGBgYKCgYCAgYGBgYGBgYGBgX5+fYCAgICAgICAgICAgICBeXpwXWJlZGJkXmZnZ2BZYmJhY2VfXF1ze3t6enp7e3t7e3t8fHx8fHx8fHt7e3t7e3t7e3t7e3t7fHx8fHx8e3x8fHx8fHx8fHx8fHx9fX19fX19fX19fX19fX19fX19fX19fX19fX19fn19fn5+fn5+fn5+fn5+foCFjIqEhYaGhYODg4SCgYGBgYKBgYGBgoKCgYCBgYGCgICAgIGBf35+gICAgICAgICAgIGBgYF5emxiZGdjYmdmYWBgZGFiZWRjZGNeXGJ1fHt7e3t7e3t7e3x8fHx7e3x8fHx7e3t7e3t7e3t7e3x8fHx8fHx8fHx8fHx8fHx8fHx8fH19fX19fX19fX19fX19fX19fX19fX19fX1+fn5+fn5+fn5+fn5+fn5+fn9/gYeMiYWGhoeFg4SDgoGBgYGBgYKBgoKCg4KBgIGBgYKBgYGCgoF/f36AgICAgICAgIGBgYGBgXp7dGdnZmZkZGZmYF5fYWNlaGRlXmJkYHR8e3t7e3t7fHx8fHx8fHx8fHt7fHt8fHt7e3t7fHx8fHx8fHx8fHx8fHx8fHx8fHx8fH19fX19fX19fX19fX19fX19fX19fX19fX19fX5+fn5+fn5+fn5+fn9/f39/f3+CiYqIhoaIhoWDhIOCgYGBgYGBgoKBgoKCgoGAgYGBgoKBgYKCgX9/f4GBgYGAgYGBgYGBgYGBenptaGNjZ2ZnZWdmZmdiZWRlYmdbYmVgdnx8e3x8fHx8fHx8fHx8e3t8fHx8e3x8fHt7fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx9fXx9fX19fX19fX19fX19fX19fX19fX19fn5+fn5+fn5+fn5+f39/f39/f39/f4SJioiGiYeFhYSEg4KBgYGBgYGCgYKCgYGBgYGBgYKBgoGBgICBgH9/gYGBgYGBgYGBgYGBgYF7emlpZGNqZmFgZmVjY2NnaWRjYmBiZGJ0fXx8fHx8fHt8fHx8fHx8e3x8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fH19fX19fX19fX19fn5+fn5+fn5+fn5+fn5+fn5/f39+fn9/f39/f39/f3+AhIqMiIeJhoSFhYOCgYGBgYGBgYKBgoGBgYGBgYGBgoKBgYGBgYGAgH+BgYGBgYGBgYGBgYGBgXZzZWRnY2RmZWJlZmdkZmhmZWNgYGNkYHF9fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fXx9fX18fHx9fX19fX19fX19fX19fn5+fn5+fn5+fn5+fn5/fn5+f35+f39/f39/f3+AgICFioyJiIqJhoaDgoKCgYGBgYGBgoGBgoGBgYGBgIGBgYGBgYGCgX+Af35/foCCgoKCgoKCgoKCc3NnZWRkZWlqaGZnZ2NhZmZlZmdmZWVjdX18fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fX19fX19fX19fX19fX1+fn5+fn5+fn5+fn5+fn5+fn5+f39/f39/f39/f39/gICAgICAgIWLioqJioeHhoSCgoGBgYGBgYKCgYKBgYGBgIGBgoKBgYGBgYGAf4B+dHRzdX1/goCAfn5/gYB0cmdkZWNmaWppZWNlY2BmZGRnZ2JiZWFwfXx8fHx8fHx8fHx8fHx8fHx9fX18fHx8fHx8fHx8fHx8fHx9fX19fX19fX19fX19fX19fX19fX1+fn5+fn5+fn5+fn5+fn9/f39/f39/f39/f39/f39/f4CAgICAgIB/houLioqLh4eHhIOCgYGBgYGBgYKBgoKBgYGAgYKCgYCBgYGBgoCAgH5zc3NzdHV4dXV0dHV2dXVwZmNmZWhoaWdoZ2VmZWJfZGVmY2BiZ3d8fHx8fX19fX18fHx8fH19fX19fX19fXx9fXx8fX19fX19fX19fX19fX19fX19fX19fX19fn5+fn5+fn5+fn5+fn5+fn5+f39/f39/f39/f39/gIB/f3+AgICAgICAgICHjIyIi4qHh4eEhYKBgYGBgYGBgoGCgoGBgYCBgoGBgYKCgoKCgYCAfnNzc3Nzc3NzdHR0dHNzdW9jY2FnZWhoZ2pmZGVnZmhmY2JlYl5ieX18e3t8fX19fX18fHx9fX19fX19e3x9fX19fX19fX19fX19fX19fX19fX5+fn5+fn5+fn5+fn5+fn9/fn5+fn5+fn5/f39/f4CAgH9/gICBgICAgICAgYCAf4CAgYGAgIeLi4iNiYiJhoSFgYGBgYGBgYKCgYKCgYGBgIGCgoGBgYKBgoKBgIB+dHNzc3Nzc3Nzc3Nzc3N1cmdlZWRlamhoZ2ZpaGdjZWViZGNoZGd7eHVzc3R2dnl4dnR0dHZ3d3d2dHR0dXV4d3h4d3d6e3x9fXx9fn5+fn5+fn5+fn5+fn5+fn5+fn5/f39/f39/f35/f39/gH9+fHt7fX58eXl2dnZ5fHx6end2d3l7fXt4hIyMioyHh4iEhYSBgYGBgYGBgoGBgoGBgYGAgYKCgYGBgoGBgoGAgH51c3Nzc3Nzc3Nzc3Nzc3VzaGVnaGVrbGhqZ2lqZ2dnZmRkYmVkbnV0dHNzdHNzc3Nzc3Nzc3Nzc3NzdHNzc3Nzc3Nzc3N0dHV1c3V3eHl7fn59fn98f39/f39/f39/f314fH5+fXx4dXZ3eXd4dnRzc3N0dXRzc3Nzc3NzdHNzc3R0c3R0dHODjI2KiYeIhoOGg4GBgYGBgYGBgYGCgYGAgYGDgoKBgYCBgYGBgICAf3VzdHRzc3Nzc3Nyc3NzdnZpY2hqaGpsZWZpbGhgZmVkY2BkZGZ0dXV1dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHRzdHRzc3Nzc3R2dnV1d3V4fH9+fX9+fHp4dXN0dXV1dHNzc3Nzc3N0dHR0dHR0dHR1dXR0dHV1dHR1dXR1dXV1dIaMjYuIhoeEhIWCgYGBgYGBgYGCgoGAgYCBgYKCgoGBgIGBgYGAgIB/dnNzc3Nzc3Nzc3Nzc3N2dnNnZ2pmaGdmaGhmZGlnY2NnZWVmcHZ1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dHR1dHR0dHR0dHRzdHR0dnV1d3Z0c3R0dHR0dHR0dXV1dXV0dXV1dXV1dXV0dHNzc3N0dHNzdHR0dHR1dXR1iY6MjIqHh4SEhYKBgYGBgYGBgYKCgoGBgICAgoKCgoGBgYGBgYCAgH93c3Nzc3NycnJyc3NzcnZ2dW5kXWNnZWlraGVoZ2dqamlnZXB2dXV1dXV0dHRzdHR0dHR0dHV1dXV1dXV0dHV1dHR1dXV1dXV1dXV1dXR0dHV1dXV1dXV0dHV0dHV1dXV1dXV1dXV1dXV1dXV1dXV0dHNzc3Nzc3N0dHNzc3Nzc3R0dHR0dHWKjoyMiYaGhIeFgoGBgYGBgYGBgoKBgYGAgYGCgYKBgYGBgYKBgICAf3hzc3Nzc3JycnJyc3NzdnZ3d2liaGhnamtpaGZkZGVmaWhwdXR0dHRzc3JxcnJ0dXV0dHR0dHR0c3NycXFxcXNzdHR0dHR0dHR0dHV0cnJyc3R0dHR0dXV1dXV1dXR0dXR0dHR0dHR0dHR0dHR0c3Nzc3Nzc3Nzc3Nzc3N0dHN0dHR0dHR0dYuOjImGhYWFh4SCgYGBgYGBgYGBgoKCgYGAgIKCgoGBgYGBgYGBgIB/eXNzc3NycXJycnJzc3N3d3d3bGpoZGhpa3Z6a2VmZWhnbXJzdHN0c3JwcHBxcnN0dXR0c3NycnNycXBvb29vcHFzc3NycnJyc3R0dHNxcHFyc3R0dHR0dHRzc3Rzc3NzdHR0dHRzdHR0dHR0dHRzdHR0c3NycnFxcnJzc3Nyc3NzdHR0dHN2jZCMh4eFhYSEgoGCgoGBgYGBgYGCgoKBgYGAgYGCgoGBgYKCgYGAf395c3NycnFxcnJycnNzc3d3d3dzc2pnaWloeX99cW51bG5wcXJycnFxcG9wcXFxc3Rzc3NycXFwcG5ubm1ubW5ubnBxcnJycnJycnJzcXBvb3BxcnJzc3JxcnJycnJycnJycnJzc3Jzc3Nzc3Nzc3Nzc3Jxb29ubm9vcXJzc3Jyc3NycnNzcnaPj4uHhoWFhYOCgoKBgYGBgYGBgYGBgoGBgYGCgoKBgoGCgoGCgX9/f3hxcHBwcXFycnJyc3Nzd3d2dnd2cnF0c252f352c3hwcHBycnJycXFwcHFxcXFyc3Nzc3FwcXBvb25ubm5ub25vcHBxcXFxcXBwcXJwb25vcHFxcXFxcHBxcXFxcXJycnJycnJycnFxcnFxcnJycnFwb29ubm1ubW5vcXJycnJycnJyc3JxeI+OjYaDg4aEg4OCgoGCgYGBgYKBgYGCgYGBgYKCgoKCgoKBgYKBf4B/d29wb3BxcnJyc3Nzc3J2dnZ2dnZ3dnZ1c3l/fnd3d29wcXFxcXFxcHBwcXJxcnJzc3JycXBwb29wb29vb29vb29wb3Bvb29vcHBxb29vcHBwcHBvcG9wcHFycXFxcnJycnFxcXFxcXFxcHBwcHBxb29ubm5tbW5tbm9wcXFxcXFxcXFxcXB7j42NhoODhYOCgoKCgYKBgYGBgoGCgYGCgoGCg4KBg4KBgYGAgYF/f392bm9wcHBxcXFxcXBwcHZ2dnZ2dXR0c3NxfYB9fX9zb3BxcXFwcHBwcXFwcHBxcnJxcXFwb3Bvb3Bwb29wcG9vb29vb29vb3BxcXBub3Bwb29wb29wcnJycnFxcXBxcnFwcXFxcHBwcHBwcHBwb29ubm1ubm5ubm9ub3BwcHFxcXFxcXFxcIKRjoqEhIOFhIOCgoGBgoKBgYKBgYGBgYGCgoKCgoKCgYGBgYCBgX9/gHVvb29wcXFxcXBwcHBwdnZ2dXRzcnJycnGAgoCBeXBwcHBvcHBwcHFxcXFwcXFxcXFxcG9vcHBwcHBwb3BxcHBvb29wb29vcXFwcG9wcG9vb25vcHFxcHBwb3Bvb3BwcHBwcHBwcHBvb29vb29vbm5tbW1ubm5ub25vb3BvcHBwcHBwcHBwiZCMiISDhIaDhIKCgYGCgoKCgYGBgYCAgYGBgoKBgYGBgYGBgIGBgH+AdG5vb3BxcXFwcG9vcG92dnVzcnFxcXFxcICDg39ycHBwcHBwcHBwcHFxcHBxcXFxcXBwcHBwcHBwcHFwcHBwcHBwcHBvcHBxcXBwcHFxb29vbm9wcHBvb29vcHBvb3BwcHBwcHBwcHBvb29vbm5ubm5ubW5ubm1ubm9wcG9vb29vb3BzcXWPj4yJg4KFh4ODgoKBgoGCgoKBgYKBgYCBgoGBgYGBgYCAgYGAgYGAf4B0b29vbm9vb29vb29vb3Z1dHNxcXFxcXJygIKCgXRxcXFxcXFxcXFxcXFxcXFxcXBxcXFxcHFwcXBxcXFwcHBwcHFxcXBxcHBwcXBwcHBwcHBwcHBwcHBwcHFxcXBxcHBwcHFwcHFxcHFxcXFxcXJxcnFwcnRycnR0dHR1dnRzdHR0dXd3gpCPi4iDgoaHhISCg4GBgYKCgoGBgoGBgYKBgYGBgYGAgICBgYCBgYB/gHVvb29vb29vb25vb29vdXRzcnJycnJycnKDg4OCdnFycnFxcXJxcnJxcXJycnFxcXFxcnFxcXJycXFycXFxcXFxcXFxcXFwcXFxcXFxcnNzcnJyc3V1dHR0dHR0dHV2d3d3d3d3eHh4eHd3eHh4d3Z3dnV2dnZ2d3h6e3x7e3t6enp6enyGkI2LiIODiIeHhYODgoGCgYKBgYGBgYKCgoGBgYGAgYCAgYGAgIGBgH+Ad3FxcXFxcG5ucG9wcG92dHV1c3Nzc3NzdYiDgoN5cnNzcnJyc3Jyc3NycnJycnN0cnJzcnNzc3Nzc3Nyc3N0dHV1dXV1dHV3eHd3d3d4eHh3eHh4eXl5eXl4eHl5eXp6e3t7e3t6enp5eXh3d3d1dnV2dnd5enp7fn5+fX1+fn5/f35+gIyQi4qHg4WIi4iEg4SDgYGCgYGBgoGBgoKDgoKAgYGBgYCBgYGAgIGAf4B8enp5eXx5eHh2dXZ2dHl2d3h3d3Z3dnZ6f3x+fnx2dnd3dnV4enh4eHh3d3d2eHx5eXx6eXl8e3l5eXh4eXl6enl5eXh4enp5eXh4eHh3dnd3eHh3eHh5eXp7e3p8fH1+fX9/f359e3t7e3p5enl5e3t/foB/fn5/fn19fX5+f35+fn6AjpCNioeEhoqMiIaGhIOBgoKBgYGCgYGCgoKCgoCBgoKBgYGBgYCBgIF/f4B/fn19fX9/f318e3t7eXh4eHh5eXl4eXh5eXl4enp6enp6e3t7fH1+fHt7ent8e318e3t7e3t7enl4eXh4ent6enp5eXp8fHt6enx8fHp6ent9fXx+fn+AgoGAgYKAgH9/gYGBgIB/f35+fn5/fX1+f4CAf35+f39+fn9/f39/gH+Af4OQjoyHhoWIi4yIh4aFg4GCgYGBgYKBgoKCgoKBgYKDgoGBgYGBgIGBgIB/goOCgoGBgX99f39/f4F6enh4d3h4eHh5eHh5enp5e358enx9fXt8fX19fHx8fnx9fn5+fn59fX9/f3x8fYGDgYCAf318fXx9fXt9fXx8fH19fX1/gIGChISDgoB/gYGBgH9/f4B/f39/f39+fn9/f39/f35+f3+Af39/gICAf4CAgICAhJCPi4eGhoiLi4mKhoaDgoKCgYGBgoGCgYKBgYGBgoOCgYCBgYGAgIGBgH+ChIKCgICAgH9+fn+AgH9/fn18fX19fYB/fX+Af35/gH9/fn9/gIGBgICAf3+BgICAf4CBgn9/f4CAf35+f39+f39/fn5+f39/gYB/f4CBgYCAgYOEgoGCgoGCgH+AgYCBgYGAgH+BgICAf39/gICAgYGBgIGBgYCAgICBgoGBgYCAgYGFjo6MiIaHiYyLi4qGhYOCgoKBgYGCgoOCgoKBgIGBgoKCgICBgYCAgYGAf4KFg4KBgYCAf39+fn+AfX5+fn19fX5/fn9/f35+fn+AgYCAgICAfn9/fn+Af3+AgH9/f35/f39+fn59fn9+fn9/f35/gIGBgoKDg4KCg4KBgYKDg4OCgYGBgYKBgoKCgYKBgoGBgYGBgoKCgYGCgYKCgoGBgoKBgYKCgoKCgYGBgoKCgoaPkY+Kh4iKjY6NiYaFgoKCgoKBgYKCg4KCgoGBgYGBgYF/gIGBgYCBgIF/gYWEg4KCgoGCgYCAgIB8fHx7fH18fH9+fn9+fn5+f35+f39/f39/f35+foB+fn5+fn9/f39/f39+fn5/gIB/gIB/f39/f3+BgYGCgoCAgYKDg4SDg4ODgoKCgoKCgoKCgoKCgoGCgoKDg4OCg4ODgoKCgYKCgoODg4ODgoKCgoOEg4KCh5KTkIuKiouPj42Kh4SCgoKCgYGBgoKDgoKBgYGBgIGBgICAgYGBgIGBgYCAg4SDg4OEg4ODgoKCgXx9fHx9gn1+f4GCiIGCgoSCgYGDg4GBgYKCgYKBgYCAf39/gICAf3+AgX9/f39/gYCAgICAgH9/f3+AgICAgH9/gYODhYSEg4SDgoKCg4OCgoOCgoODg4ODg4SDg4KEhYWDg4SEgoKDhIOCg4ODg4OCgoODgoCKlJOPioqMjpCPjYuGg4KCgoKBgYGBgoOCgYGBgIGBgoGBgICBgYGAgYCAgH+BgoODg4SEhIOCgoKCfXx8fn6AgYOAg4OChIaFhoaFhIWFg4ODg4OBgYKEhIKDgoeDgoKAgoGBgoKCg4KCg4KDgoODgoGAgIKCgYOCgYKCg4OEhYWEg4OChISEhIOEhISDg4OEg4ODg4OEg4SDhIWEhISDg4ODgoKCgoGCgoKBgYKCgo+UlI+Njo6RkY6KiISCgoKCgYGBgYGCg4GBgIGBgYGBgYCBgIGBgYCBgICAgIKChIKChIOCg4ODgoJ9fX2AgH+AgoGDg4ODhIaEhISEhYWDg4KBgoOBgIKDgYOFhYWFhoaHhoaGhoeHh4aGhoeHhoaEgoGCg4SDg4ODg4ODhIWFhIWDhYSFhISEg4KBg4OCg4SEg4KCg4SCg4ODg4OCgoKCgoKCg4OEhIOFhYWFhoaIk5OTkI+Pj5KRjIqHgoKCgoKBgYGBgYKDgoKBgIGBgYGBgICAgYGBgICAgICAhISEgoKCgoGBgoKBgX+AgYOCgICAf4CCgoKDg4KCgYODg4SEg4KDhYOCgYGBgoSFh4eHh4aGh4eHiIiHh4eIiIiFhIOBgIGBgoKCg4GCg4SEhYSDg4OEg4OEhIOBgYGCg4OEhISDg4ODg4OEhIODgoSDg4ODhIWFhoeHh4eIiIiJiY6TkpKOkI6QkY+LiYeCgoKCgoKBgYGBgoKCgoGBgYGBgYGAgICAgYGAgIGAgICDg4KCgYKCgYGAf4CBhYWFhoOCgYB+fn+BgoSCgYKDhIOCg4ODg4KChISDg4OCg4SFhISFhYSDgoSFhYKEhIWFg4KBgH9/gIB/gIGEg4OEhYWEgoKCgoOCg4OFhIKDhISEhYaGhoaGhoWFhoeHhYaIh4aHiIeGhoaIiIeGhYaGhoeIkZKSkI6QjpCRjImHhYGBgoKCgoGBgYGBgoOBgYGBgYGBgICAgICBgYCAgICAgISEg4KBgoGAgYGAgYKIh4aHhYSCgH99fX6AgH+AgYGBgYGCgoGAgYOCgoGCgoKBgYGCgYKCg4GBgICAf4GAgH+AgH9+gIGBgYKCg4OEg4OEg4OCgoGBgoODg4SEg4SEhIOFhYaFh4eIh4eHh4eHh4eGhoaGh4WFhYaGhIWEhIWEhYaSk5GOjo+OkI6JiIeEgoKCgoKCgoGBgIGCgoKCgoKCgoGBgYGBgYGBgICAgYGAgoSDg4KDgoKCgYKDg4iHh4eHhYSCgX5+gICAfn5+f4CBgYGCgYCCgoGCgH+AgIB+gIKBgIGCg4OAf39/gICAf4CAgICDg4KDg4ODgoOBgYKCgoOCgYKCgoOCgoSDhISDg4SEhYWFhYaGhoaFhISEhYWEhIWFhYSEhISDhISEhISEipSTkZCQj46NiIaFhIOBgYKCgoKCgYGAgYKCgoKBgoKBgYCBgYCBgYGAgICAgYGAg4OCgoOCgoKBgoOCiImJiYmHhYSDgYKEhIOBgYGCgoOCgoOEgoOEhYWEgoSCgX+AgoGBgoGChIOBgYGBgoOCgoGDg4SDg4SEg4OCg4KDg4ODg4KCgoKCgoGDhISEhYSFhYWFhIWEhIWFhYWDg4OEhISEhYWFhISEhISEg4ODg4OOlZKRkZGOjYyHhYODg4GCgoKCgoKBgYCBgoOCgYCCgYGBgICAgIGBgYCAgICBgICDhYSEhIODg4SDhIOGh4mIhoWDhIOEhISDgoGDgoOFhYODg4SDhIODhYSFhISEgYGAgYKDgoKEg4OCgoGBhIWEg4ODgoKDhISDg4ODg4SFhISDg4KCgoKCgoSEhYSFhYaFhYODhYWFhYaFhoWEhIWEhYWGhYWFhIWEhISDhIODhJGUk5OSj4yMioWEhIODgYKCg4KCgoKBgYGCg4KBgoKBgYGBgICBgIGBgH+AgIGAgYaGhoaGhoaHh4aGhYSDhYaCgIGBgYGHgoB+f4GAgIKBgYCBgYCAgoGCgoKBgYKCgYCBgoKCgoKDg4GCgYKDhYODg4KDg4OEgoKEhIOEhIWEg4OCgoKCgYGCg4ODg4SFhIWFhIOEhYWGhYWFhISEhIOEhIWFhYWFhIODhIOEg4KGlJSSlJKPjYuHhISDg4KBgoODgoKDg4GBgoKCgoKCgYGCgYGBgYCAgYGAgICAgICAhYWFhYaGh4eGhoWGg4ODg4GAgoKCgYKAf35/f4CAf4B/gIGAgH+BgYGBg4GAgYGChIOBgYGBgYKBgYKDgoODgoOCgoKCg4OBg4SDg4ODg4OEhIKCgoKDgoKDg4ODhIWEhISEg4OEhIODg4OEhIODg4ODg4SDg4ODg4KDg4KDgouUk5KTkY2NioaDg4OEgoGCg4ODg4ODgoGBgoGCgoKCgoKBgYGBgICBgYCAf4CAgICDhISFhYSFhYWEhYWCg4KDgoKDg4OBgICAgICAgYCAg4KCg4GBgoKDg4OEgoODg4KAgICCgoKDgoKDg4ODgoODhIKCgoODgoKDg4KCg4KDg4WEg4ODg4SDg4SEhISEhYWEhIWEg4SEg4OEhISEhISEg4SEhYSDg4SEhIODgoKDkJSSkpKPi4yIhoOEg4OBgYKDg4ODg4OCgYGCgoKCgoKDgoCBgoGAgICAgIB/gICAgISDhYWEhYWFhYSFhYOEhIWDg4SFhYKBgoOCgoSCgYKGhYSEg4OEhISGhYSEhYJ/fX19foKEg4ODg4OEg4ODhISEg4OEhISEg4SEhIOEg4OFhoWFhYSEhYWFhYSFhoWGhYWFhYWFhYWFhYWGhoWGhoaFhoaGh4aFhYWFg4SEhIeTk5KRkoyLiIWFhYWCgoGBgoODg4OCg4KBgYKDg4ODgoKBgIGAgICAgYCAgH+AgICAhYWFhYWGh4eGhYWFhISFhYSEhISEg4SDg4OEhYOCg4SFhYaFhoaFhoeHhoOBfn9+fn5+f4OEg4OEhISEhISEhISEhISFhYWEhYSGhYWGhYaGhoWGhYWHhYWGhYaGhoaFhIWFhYWFhYWGhoaHhoaGhoaHh4iIiIaFhYaEhYWGjZSTkpGQi4qHhoeGhIGCgoKDg4ODg4KDgoGBgoODg4KAgYGBgICAgICAgICAf4CAgICHh4eGhoeHiIeHhoaEg4ODhIODg4OEg4ODg4OEhIODg4WFhYWHh4WFh4WBf39/f39/f35/gISFhIWGhoaFhYWFhoaHhoaFhoWFhoeHh4iHh4eGhoaHh4eGhoaGhoaGhYSDhIWFhYSFhYaGh4eHhoaGhoeHh4eIiIeGhoaHh4eRk5KQkZCLiIiFhoSDgoKBgoODg4ODgoKDgoKCgoOCgYCBgICBgICAgIGAgIB/gICAf4aHiIeHh4eIiYmIiIODgoKDg4SEhIWEg4KCg4OEg4OChIWEhYeHhYSCgH9/f39/gH9/f4B/f4WFhoeIiIeHh4eIh4iHiIiIhoaHiIiJiYmIh4aHh4eIiIaHhoeIhoeFhIOEhYaGhYWFhoaGh4eFhoeGh4aGh4eHh4eHh4eFh5OTkY+RkIuHhoWGhIKCgYGCg4ODg4ODgoKCgoGCg4KCgIGBgYCAgICAgICAf3+AgYB/hoiIiIiHh4iJiYmIg4KCg4ODhIWHh4eFg4OFhIODg4KEhISEhYSBgIGCgYGBgYB/gH9/fnt6gIaIiIqKiYmIiImJiYmKi4qIiIiJiouLiomIiIeIiIiHh4iHh4iGh4aEg4OFh4eHhoWFhISEhYWEhYWGhISEhYWFhoWGhYOJlJOQjpGOioaFhoWDgYGBgYKDg4ODgoKCgoKCgoKCgYGBgYGBgYCAgICAgIB/gICBgH+GiYiIiYeIiImJiIiEgoKDg4ODhImKh4eEhIWEg4OEg4WEg4OCgYKCgoKCgH9+fH19fX9+fHt8g4eJi4uKioqIiIqJiImLiomJiImIioqJi4mHhoaGh4WGiIiJiIeGh4SDgoWIiIiHh4WCgoGDg4KDg4SCgoKDgoGEg4SDgY6TkpCPj4uIhYSGhIKBgYGBgoODg4OCgoKCgoKCgoGBgYGBgIGAgICAgICAgH+AgIGAf4WIh4eHhoeIiIiHh4SCg4OCg4OFiYqJh4WHhYSFhYSDhYSDgoKCgoKDgX59fn5+fn5+fX1+fX19g4eJioqHh4WGh4eHh4iHh4mGiIaIh4eJiISDhIOFhISFhYaIh4aFg4KChIWHhoeGhoOCgoOEgoOEhIKBgYGBgYODhIOEkZKRjo+Ni4eEhoaDgoGAgYGDg4ODg4KCgoKCgoKCgYGBgIGBgYCAgIB/gIGAf3+AgIB/hYaGhYaGhoeHiIeGgYKEhIODhYaIi4qGhYaEgoaGgoCDg4ODg4OCgoF9fH1/gH9+fn59fH19fHp8hIaHhoSDgYODhIWFhYODhYSEhISFhIWEgoKDgoSEgYKDg4WGhYSCgYGCgoODhYOEhIWEhIaDhISFg4KDgYKDg4SFhIeSkY+Nj4yJhoSFhIWCgYCBgYODg4ODgoKCgoKCgoKBgYGBgYGAgICAf4CAgYB/gICAgICEhIWEhYWFh4eHh4aAgYGFg4OFhYSHiIWDgYCAgX9+fYKDg4ODgoKAfX1/gICBf31+fn19fX16enp+g4SEgoGBgIGBgoKBf36BgYGCgYOBgoGCgoKBg4OAf4CAgYOCgICAgIGBgYGCgYGChIODhYSCgoSDgoKBgoSDhYWGjJORjo+Pi4iFhYOChIGBgYGBgoODg4KCgoKCgoKCgoGBgYCBgYCBgH9/gIGBgICAgH+AgIKCg4OChIOEhYWGhn+BfoCBgICAf4GDg39+fn9+fHx/g4OCg4KDgX59fn+AgIGAfn19fX1+fXx6enp/goKAf39/f35/gIB+fYB/f4CAgX+AgIGAf3+BgX99fX+AgX9/fn+AgH+AgICBf4CCgICCgYGCgYGAgYGBgYKEg4aPkpCOj42Kh4eGg4OCgYGBgYGCg4ODgoKCgoKCgoOCgYGCgYGBgICAgH+AgICAgICAf39/gYKDhIGCgoOCg4SFgIF/fH19fn19foCAfn1+fXx9foKDg4KCgYF/fX1+foCAgH9+fX19fHt7e3p6eXqAgH9+f35+fnx+f35/gH9+f3+Af4CAf35+fn9/fn18fn+Af35+f3+Af39/f4B/f4B+f4CBf4B+f39/gH9/f4B/hZKSj46Pi4uHiYWEhIKCgYGBgYKDg4ODg4OCgoKDg4KAgYKBgYGAgICAf3+AgIB/gIF/f36BgYSEgYKBg4OCg4OBgH98fn5/fn6Af4B/foB9fX+BhIOCgYB/f359fn5/gICAfn19fX17e3x6enl5eXt/f35/f39+fX5/f4CAf35/f4CAgoB/fH5+f35+fXx/f4B/fn5/f4B/f39/foCAf36Af39+fn5/f35+f318fH2FkpKNjIuKiImIhIWEgoKCgYGBgoOCgoODgoODg4ODgYCBgYGBgYCAf39/f4CAgICAgH9/foCBhIOCgYGDhISDhICBgYCBgIGAgYKCg4GAgX+AgoODgYGBgYCAfn19fn5+f359fX19fXx8fHt6eXl5eX2Af4CBgYF/f4GAf4F/gICAgYGCgoB+gH5/fn5+foGBgoF/f39/gIB/f4B/gYB+f4CAfn9/fn+Af31+fX17fIaTkYyLioiHioiGhoSDgoGBgYGCg4ODg4OCg4OCgoKBgICBgYGAgH9/f39/gICAgICAgH9+fn+BgYGAgISGh4aHgoSDhYOBg4ODhYSEhISDgYOCg4KCgoGCgX9+fX19fn6AfX19fX19fX18e3p6eXl5eYCCgoOFg4CBg4GAgoCBgYGDgoKDgYGCf4GAf4CBg4GEgoCAgYCBgYCAgYCCgn+BgIF/gIB/gICAfn9/fnx8ipOQiomIiIiJiIaGhoSCgoGBgoKDg4ODg4KDg4KCgYCAgIGBgYGAf39/f4CAgIB/gIGBf359fn5/f39+g4aHh4iChoSFhISFhIWGhYaGhoWFhoGAg4ODgoKAfX19fX19fn59fX19fX19fX18e3l5eXl4fIODhIWCgYSDgoKDhYaCg4SDgYKCg4OBg4KCgYKFg4iFgoGBgYKCgYGBgYSDgoOCgoKCgIGBgIF/gIGAf36Ok4yHiIeIh4aGhYaGhIKDgoGCgoODg4ODg4OCgYGBgH+AgYCBgYB/f39/gICAgH+AgYB/fn19fX5+f36Ag4SHiISGhoaFhoaHh4aGh4eHhoeHf32AgIGCgX59fX19fX19fX19fX18fH5+fnx7eXh3eHl5gIKDf4ONhIOEhISXl4ODhIF9foGCgoGCgYKBg4aIjIWDgoKBhIKEg4KDhYWEhYOCg4OCg4OCgoKCg4OCgpKQi4iIh4iHhoaEhoWEhISCgYKCg4ODg4ODgoGBgYCAgICBgIGBgH9/fn+AgYCAf4CBgH9/fn1/fn+Bf4CCgYWFhYaGh4eGh4eIhoeHh4aGiId/fH18fX9+fX19fX19fX19fX19fXx7iJKCe3x6fIZ5eHl8gYF+iZeEg4OEhJSTgIGBf39/fn6Ei4B/gICEhpCJhYSBgoGFhYuDgYKFhYaGhIOFhYOEhIODhIOEhISIko6LiYiIioeIh4WGhYSFhIKBgoKDg4ODg4OCgYGBgICAgIGAgIB/f39/f4CAgICAgIGBf39/f4CAgIGBgYGBg4OGh4aGh4aGiIeGhoaFhISGhX98fHx8fX18fH19fX19fX19fX18fH+RlZaDe3qElHx4eXp7fH+Cg4GBgIOCgH58fn57iJF8fI6Wf31/f4KGioWDg4SDgYONiX99f4OEhYWDhYaFhIWFg4SFhYaEhI6Rj4uKioyKiYqHhYaFg4OCgYKCgoKDhIODgoGBgICBgICAgYGAgIB/f3+AgIB/gICAgX5+f4GBgoKCg4SDgoOCgoWGhISFhYSGhIOEg4KBgYOBf319fHx9fXx8fH18fH18fX19fHx8e4uRl4x6e3yAenp6e3x5eX19foB/gH98e3t+fn2ClZF/hIh+fH5/goR8fIGChIKAf4eDfYKBf4KCgIODhISEhISChIOEhYKEkZGNi4yMjoqJiYaFhYODgoKBgoODgoKDg4KCgYGAgIGAgICAgICAgH+Af3+Af357gICBenyAgoKDhYOEhYWFhYODg4SCgYODgoOCgoGAgIB/gX5/fn59fHx8fHx8fHx8fHx8fHx9fHx8fn6Kgnt6e3p4ent7fH17fn1+f319fX18fH+BgX2Gj4F+fYJ+f36Agnx8gH+CgIGAfn17ioJ9gH9+gYCAgYKBgoCAgIGAf4uTj4uLjY6MiIeIhYWEhIOCgoKCg4OCgoODgYGBgICAgICAgH9+fXx7fHx9f3+AgHx6gYF4e4CCgYOFhIOFhIaGhISAhpSIgIGBgYGBgH9/f39/fn5+gHx8fHx8fHx8fHx8fHx9fHx8fHx8fHl7e3t4eHl7e3p8gX+Afn+BfH5+f399gIKCgICAgX+CkYF/f4CAfoB+fn9+gIGBfX19e319fX19fHx9gH+AgH6Afn6Ck5GLjIyNj4qFhoaFhISFg4ODgoODg4OCgoGBgYGAgICBgICAgICAf39/fXt6fICAgHh+gXd7gIF/gYKCgoKDhoeGhn6IlYp+gYGAgIB/foB+f39/fn+Bfnx7e3x8fHx8fHx8fH59fHt9fHx8e3x8fHp6eXt8en2Fg4J/gYF+f35/gH6FgoF+gH9+foCFhoKAfn6Dh399fH6AgIGAf39+fX19fX57fH1/f3+AfX9+gIyRjYuNjo2Nh4SGhoWEhIODg4OCg4ODg4KBgYGBgICBgYGAgYGBgYGAgH9/f397en9/e3mAd3p/f31+f3+Af4KEhoaFf3+FgX5/gIB/gH5+f31/gIB/gIB/f319fHx9fn18fX19fX19fH58fXx7fXx8ent6fH19f4aEgoCAgX1+fX5/foyEgYZ+fXx8f36CgX99fX19gHx7fXx+gYSDgYB+fn5+fX1/f399foB+fn6EkoyMi46Ni4qGhIaEhIODg4OCg4KDgoOCgYGBgYGAgYGBgYB/fXx8fH1+f39/f397e399d352eH59fH18fX5+gYGCg4B7fn18fn6AgH6Af35/fn+AgH+AgH9/fn9+fn5+fn1+fn99fH59fn19fHt8fHx7fHp9fn+Ag4OCf35/fH18fXx9gYN+jH58e3t9fn1+fn17e3t9e3p7e3uAhoSChIOCf4B+f4KCgn9/goJ/gIqPjIqKjIuKiISEhIOEg4ODgoKCgoKCgoKBgYGAgoGBgYKCf3+AgIB/fn18fH5/fn55fX52e3Z4fXx8fHt9fX6BgICAf35/f31+f39/foB/f39/f3+AgIGBgH99gH9/fn9+fn9/f3yCfn59fX17e319fHp8fH6AgoF/gIB8fH18fHx8fH18fXt/fnt7e3x8fH18e3t7e3x8enp9en6CfoGDhIKBgoGFhoWFhoaHhoKEkI6MiomKhoeFgoOEhISEg4KCgYGCgoKBgoGBgYGBgoGBgoKAgYKBgYCAgH9+e3x+fnx6fnh5dnd8fHx7e318f4GAf35/foB/f35/fn5/gH9/f39/f3+AgoKAfn6BgIB/f39/f39+fYN8fH19fH99fX19e3x+fn9+fn1/fnx8fHx8fHx+fnt8e3x8fHx9fH18fnx9fHx7e3x5e3x7e317fX5+f4CAg4eJiYmKiYuJhYiQjYuIiIaFhYOCgoOEhIODgoKBgYGBgYKBgYGBgYKCgoGCgoCAgX98e3p6eXt9enx+fnl8eXh4dHx8fHt8fHx+gX9/f39/gIB/fn5+fX+AgH9/f3+Af4CDg4B/gIGAgIB/f4CAgH58enx9fX59fX5+jIZ9fX57e4OCfX19fX18fXx9fX1+fH17fXx9fX58fn19fX18e3t6fHt8fHt6e3t6enp7fn6ChYiHiIuLi4qJjJCNjImHhoWEg4KCgoODg4OBgYGBgYGBgYGBgYGCgoOCgYKBgIGBf3+Af356eHl5en5+e3l6eH5zfHx8e3x8fH5+fn9/gH+AgIB/fn9+gIF/f4CAgIGAgoSDgYCAgYGAgX+AgYGBf39+f31+gH57foGRjHx9f4qAjYx+fn19fX59fX59fHx8fX18fXx9fX1+fX1+fnx7e3t8fH18e3p7fHl6eXh5e35/hIOEiImKiImNj4yKh4iFhISDgYKCgoKDgoGCgoKBgYGCgYKCgoGCgoKBgoKAgYGAfoCAf39+e3p5e319eXx6f3KBfXt7fHx8fn59fYGCf4GBgX9/gH+AgX9/gIGCgYGFg4SCgYGCgYKCgICBg4KAf4F/fX6Afnx/f4iCf36DkISEg4F/fn18jYd9fX59fHx/fnx9fXx9fX1+fX5/fX19e3x9fnx8e3x9enp5eXp5e3t+foGBg4eEiI2MiomFhYSEg4KCgoKCgoKBgYGCgoKBgoKCgoKCgoKCgoGCgn+AgIB+f39/fn5/ent5fX16enp9cX6Cent8fX19fXp4foKAgYKCgICBgIGBgICBgoKCgoaFhIGBgYGBg4F/gIKEgX9+gYB9foF+fX9/gIB9fn+EgH5+f31+fX2KhX1+f31+foB/fX19fH5+fn99f4B9fX18fX9/fHx7fH17e3t6enp7e3x9fn2Ag3+IjImKh4WFhYSDgoKCgoKCgYGBgoKBgoKCgoKCgoGBgoKBgYKCf4CAgH9/f39+fn59eXp6fXx5d3t0e4d8dHd9fn17e3Z2foCBg4KBgYKCgoKBgYGDg4OChYaEgoCAgICCgX+AgYSBfn6AgH1+gH59fn6AgH+Bfn+Af39/gH99fn9/f3+Afn9/gH58fX18fn5+foF/gH2CgHx9gIF9fHx9fXx8e3x8e3t7fHt8fHx9fIiJh4eFhoWFhISDgYKBg4KAgIGCg4KCgoOCgoKCgoGCgoGBg4J/gIGAf39/fn5+fn57enp8fHt2e3R3f352cnt+fnt4dXd8gIGCgoKBgoODg4OCgoSDhIOFhoOCgX9/gIOAgICAg4F+foCAfX+AfX1+foCAf4J/gYGAgICBf31/f3+AgIGAgIB/fnx9fX19fn59g32AfoKAfX6BgX98fn59fX17fH58fXx8fHt8e3x9iIaGhIWHhYSFhIKBgoGDgYCAgoKDgoKCg4ODg4KBgYGBgYGCgH6AgYB/fn5+fn5+fn56e3p9goN9dXF6fHpxen19eXh0dICAgoKCg4KDhYOEg4KDhISEhIWEgYGAgH6Agn9+f36Bf35/f4B9foB9fX1+gH9/gYCCgYCAgIKBfX6Af4GAf4CAgH9+fX19fn1+fn19gYR/gH9+f4GBf32Af319fn1+fn1+fHt8enx7eoCFgoOEhYSEhIWDgoKBgYKBgICCgoOCgoOEg4SDg4KCgYKBgYOAf4CBf35+fn5+fX5+fnt7en6Jh354cnl9f3F6eHt4eXR1fYKDgoODg4OFhIWEg4OEhIODhIKBgH+Af4CBfn19foB+fn5/gH19f3x9fX6Af4CAgIKAgIGAg4F/f4B+gIF+gIGAgH9+fn5+fn1/fn6FhYCBgH+Ag4F/foGAf36AfoB/fn17ent6fHt6goN/goKCgoOCg4KBgYCAgoGAgIKBg4KBg4SDhIKEgoGBgoGCgoB+gIF/fn1+fn5+fX59fXp7fIWEe3tyeXt8cHd1dnd5dnR6hISBhISDhIWFhoSDg4WEgoODgoCBf4B/f4B9fX1+f31+f39/fn1+fH19foF/gIB/gIB/gIGDgoGAf36AgH+AgYCBgH9/f39/f4CAgIGCgoKBf4GEgX+Ag4F/f4B/gX+Af3x7e3p8e3yBgH+Bf3+BgYGCgYF/f3+BgH6BgoKDgYGDg4KEgoSCgYGBgIGCgH6AgH9/fX5+fX19fn19e3t6gH94fHZ5enxxdHh3dnh1cnmFhYKEhIKEhYWGhISChIOBg4KAgIF+f4B/gHx9fX6AfX5/f39+fX98fn5+gX+BgH9+f4B/gIODg4B/f4GBgIKBgYGAgIGAgICAgIGAgYKDgYF/gISBfYGDhICAgX+BgYKBfXp7e3x8fX99f4B8f39+fYGAgH59fYB/foGBgYKBgIKCgoKBg4KCgYB/gYKAfn9/fn99fX1+fX19fX19ent7fHZ9eXh6enJ1eXl2d3dzdYaFg4WFgoSEhYSEhIKDgoGDgX+AgX5/gH6AfX19fn9+f4B+fn59f3x/f3+BgIF/f3x+gH6AgYKDgYCAgoOEgoGAgYB/gYCAgYGAgYGCg4KBgX9/g4B+goKEgICCgYKChIJ+e3t8fHx9fX1+fXp+fX55fn9/fHx8fn1+gYCBgYGAgoGBgYGDgoGBf4CAgoB9fn19f319fX59fH19fX16e3p8dnx6d3t4cnZ5e3Z2dnN0hoSEhYSChISFhIOCgYOBgYOBgIGBfX+BfoF9fX1/f39/gH5+fn19fYB/gIGBgX9+fH6Afn9/gYJ/gYGCg4eFgYB/fn6Af4CBgICAgIGCgYCAfoCCf3+BgoKBgYOCg4OFgn99fX18e3x8eXp7en55fHl4f357e3t+fX1/f4F/gH6BgICAgoOCgYF/gIGBf31+fH1+fX19fX18fn58fXx5e3x4enx3endzeHd6c3d2c3SGhISFg4KDhISDg4KCg4GCgoGAgYF8gIB+gH1+fX5/gICAf35/f3x+f3+BgIGAf359f39+fn+BgH2AgIGDhIN/f359fn5+f4B/gIB/gYKBgH9+gIF+f4CCgoCBhIKEhYaDgH59fHx8fHp5dnl5enl2eXZ+fHt7e359e399gH99fX9/f3+BgoGBgX5/gYF+fX18fX19fX19fXx+jYF8fXl7e3p5fHd4eHR1dXhyd3d0doaEhIWDg4ODgoOCgYKDgoGDgn+BgH9/fn+AfX19fH+AgIB/f39/fIB/f4GAgYCAf32Af35+fn9/fX5+gYKCgn5/fn1+fn5+f3+Af32AgYB+fn5/gX5+gIKBf4GDgoOEh4SAgH58fXx8e3x1eXl4eHh5d3t8e3p7foZ9fn1/ent+fn59foGAgIGAfX6BgH59fXx9fX19fX18e32Dgnx8ent7e3p7d3Z4dXJzdnF4eXJ4hYWFhYOEhIKCg4KBgYKBgIOBgIB/fn5+foB+fX58f4CAgH+AgX97gH6AgH+BgIB/fYB/fn5/f319fX6AgYKBfn9+fn59fX1/fn9+fH6Af35+fn+Cfn6AgIF/gYOCg4OGhICBfnx9fHx7fHh3e3h1eXd3eXx6e3t9kod9fH13en1+fn19f35+gH98foB/fn19fH19fX19fXt8ent9enp4e3x6ent4dHh1cXJ0cHh4cXmEhYWFg4SDgoODgoGBgoKAgoCAgIB9fn5/gH18fn1/gIGAf3+BgHyAf4B+f4GAf399gH9+f39+fX18gICAgIB+f35+fn18fn9/f358fYB/fn1+gIJ/foCAf36Bg4KChIWFgoJ+fX17e3x8end7eXd4d3d4e3t6e3yFin17end6fH19fHx9fX1/fnx9fn59fXx8fX5+fX18fHt6enx7e3p5enp7enhzd3VxcXNweHdxe4WGhYWDhYKBg4OBgYGBgoCBgICBgH5/fn9/fXx+fYCAgoGAf4GAfX6Af35/gX+Af3+BgH+Af31+fH1/gICAgH9/f39+fXx+f39/f319f399fn6CgYF/gIB/foGDgoKEg4SCgn5+fHx6fHt7eXt6d3N2d3h5e3p7eXp/fnt7d3p8fXx8fH59fH19fH19fXx8fX19fX99fXx9e3l7fHx8enp6enp6eHN2dXBwcm93dnJ7hYeEhYOEgoGDgoKCgYGCgYKBgYGAf4B/f399fX9+f4CBgYF/goF9foF+fn+Af4B/gIKAgIB+fX58f3+BgYCAf4B/f4B+fX5+f4B/f39/gH9/f4J/gH9/gIB/gYGAgISBgoKAf39+f3x9fn56fYR9dHx9enp6enx5eXp6hoV3eXx8fHx8fXx8fHx8fX19fHx9fX19fn19fX16eX18fH16enp6enp5c3V1b29xb3d0c3yFhoOEgoOCgYKBgoKCgYKBgoGBgYCAgICAgH59gH+Af4GCgn+Cgn+AgX5/gYB/gICAgn+Bf319f35/f4KAgICAgIB/gIB+fn1/gH9/f4B/f39/gH+AgICAgH+AgYGBgYGCgYCAf39/fn1/fnqBkot6fH18e315e3p6eHmBgXh5e3x8fXx8fHx8fHx9fX18fH18fn1+fn59fHp8fHt8fXt5enp6eXlzdXVvb3Fwd3N0fYWHg4OCg4KAgYCCgoGAgYGBgYKBgYCAgIGAfn6Af4GAgYKCgIKCgICCfoCBgX9/gX+BgIF/fH6Af3+Agn+AgICAf3+AgH9/fX6Afn2AgH9/f3+AgICAgYCAf4CAgYCBgYKCgICAf39/fX5/fIGGiHx8fnt7fnl6e3p7jX53d3l7fHt9fHx8fHt9fH18fX18fXx+fn5/f358enx9e319e3l6e3p5eHN0dW5zcXB4cnV6hYaDg4KDgoCAgIGCgX+CgYKBgoGBgYKAgYF/fn9/gYGCgYKBg4OAgYJ/gYGBf4CAgIB/gX99f4F/gICBgICAf4B+gICAf359f4B+fn+Af39/gH9/gICBf4CBgH+BgIGCgoKAgICAgIB9foB9gIOCe35+e3x9e3p8fHuHeXh4eXx8fH17fHx9fX18fH19fn19fX5+f3+Af317fH18fHx7enl7e3l5c3J1bnZycHhxdXaFhYOEg4KCgICAgoF/gIKCgoKDgYGDgoCCgYB/gICCgoKBg4GEhICBgX6BgoF/gICAgH+Cf36AgYCCgICAgIB/gH+AgIB/fn2Af35/f4CAgH+AgH+AgYGAgICAgIGAgYGBgoGAgYCAgH9/gH5/fX59fn57fXx9fHx8d3h1eHh5e3x8fXt8fHx8fX5/f39/fn19foB/gIGAf3x9fHx9e3p7eXp8eHpzcnVud3FxenF2d4WFg4SDg4KBgYODgH+CgYWDg4SBgYOBgoKBgYCAgIKDgoCCgoWDf4CAfoKDgYCBgICAf4CAf4GBgIKAf4CCgH9+gICAgICAf4CAgH+AgICAgIB/f4CBgYCAgICAgYGAgoKCgoCCgYGCgYB/f4B/gId+fnx6fXx7fX54d3Z5eXl8fXx8fHt8fH19fn5/gIGAfn1+gICAgoGAfH59fX58d3t6ent5eXNxdW53cHV6cXZ5hYWCg4KDg4KDhISAgIKBhoODg4GChICEg4KCgICCgoSBgYKChIJ/gIB/gYOCgYCBgYCAf4GBgYGAg4F+gIOCf31/goGAgIB+gYCBf4CAgYGBgYCAgIKBgYKBgYCBgYGBgoOCgoOBg4OCgYCBgH+AhH19fXx/fXp9gHp5dnp4eXt7fH19e3x9fX19fn+AgYGAgH+AgICDg4B9f35+fn15eXt6enp5c3J1b3dxd3lzd3uFgoKDgoOEgoOEg4CAgoOGg4ODgoKEgYSDgYKAgIKBg4GCgoGCgX6BgICCgYKCgYKBgIGAgICBgoGEgH6Bg4J/foCDgoCBfoCCg4KAgYGBg4KDgoGBg4KChIGAgYOBgYKEg4OEhIODhIODgoGBgYCCf4B/fYB8enx/e3t3fHl5eXt6fX59fHx8fH1+fn+BgYCAgIGBgYOEgH2Af39/f357e3t6e3p0cHhyeXR2eHR3e4SCg4KDg4SChIODgYKChIaEgoODg4SBhISAg4CBg4KCgoKCgIKAfoGAgIKBgoGCgoKBgIGBgYOCgoOAfoGDgX9/gYSEgYN/goKBg4KCgoGEg4OEgYKEgoOCgoGCgoOBg4SDhISEhISFg4SCgYOCgoOBgYGAgH58fIB8fHh8eXp5enx9f3x7fHx9fX18fICAgICAgYGBgYKBfoGAgICAf3t7fHp6enVweHd5dnV8dXZ8gICDgoODg4OEhISAgoKFhISDg4KDhIGEhYKCgYKDg4GCgoKAgYB9gICBgYKDgoKCgoGAgYKCg4KCg4B/gYKBgICChIODgoGCgoGDgoKDg4ODg4SAgoSDg4OBgX+Bg4KDhYKEhISEhISDhISChIOEhIKBgoGBgHt+gX59eXx6enp9fHyBfXp8fH19fHp7fn5+gH9/gYGAgICAgIGBgIB/fX18fH18dnJ2eHh2dH92dH2Hh4OChIWDg4SFhICChIWEhIOCg4SEgISFg4KCgoODgoOCgoCCgH2AgIGCg4KCgoKEgoGCgoOEgoKBgICBgoGAgYOFhIOCg4CCgoOCg4ODg4OEg4CCg4KEg4KCfoOBgoSEgoODhISEhIOEhIOEg4WEg4ODgoKAe4CBf3x8fXp6e31/fX9/fHx6fH59fX19fn5/f39/gICAgH9+foCBgICAfnx9fX5/fn18e3h2f3V2f4SHg4KDhYODhIaEgYKFhoWEhIODhISChIWFgoKDg4SCg4KDgoOBfoCAgoKDgoODg4SCgYKCg4OCg4GCgYGDgX+BhISDg4KEf4KEg4ODgoSDg4SCgIOEg4SDg4KCg4KChIOCg4SEhISEhIWEg4OEhYSEhIOBgoB9gYKAfXx8e3x8gH19foB+fn1/fnx8fX19fn5/fn+BgYGBgH99fX6BgYB+fn19fX59fX5+f3+AfHyBgYKCg4OGg4SDhoSBgoiHhYSDg4SEhYKEhYWDg4SDhIODgoOCg4F+gYGDg4SCg4OEhIOCg4KEg4ODgoKDgoOBf4GDg4ODgoOAgoWDg4ODhIODhIOBgoSEhYOCgoODg4GEg4GDg4SEhISFhYSEhIWFhYWEg4ODf32BhH99fXx8fHx/gX59fn9/fX99e3x9fX19fX5+f4CBgIGBgH59fH6Cf39+fn5+fX1/f39/gICAf4CEhIODhIWDhIOFf36CiouFhISDgoOFgYaGhoOEhISEhIODg4OEgn+BgYODhYSFhIWEg4KEhISFhIODgoSDhYGBg4SFhYaEgoCDh4SDg4OFhIWFhIGEg4OHgoOCg4GCgYSDgoODhYODhYWEhYWHh4aHhYSEhYSBf4GDf35+fH59fX+BgH9+fHx+f358enx9fX19fX5+fn9/gIGBf319fIB/gH5+fn5+f3+AgYGBgYKAgYWFhIOFhIKEg4aAgoWFiomEhIOEhYWDh4aGhISEhIWEhYSEg4SEgYKDg4OEhIaEhYSDg4SEg3yDhHuBhHd5g4F9hH5+cnWDgoF2foOEgX2BdYF6g39/gH6EhIKDg4KBg4SDg4SFg4SFhoSFhn2EeXx+f4N7hYOAhIOBf359fn19goOBfXt/fX6Afn17fHx9fX19fH19f4B/gYJ/fX18f4GBgICAgH+BgYGCgYKDg4KChoSEhIaEgYOEhYOEhoSKiIWFhYOFhYSGhoaDhISFhYWEhYWEhIWCgoOEhYWFhoSFhIOEhYWCaICFanx7cXF8gXOGc3R0fYKEdXNxg4Z0cHVyc3SDdnt9dYF/goOBgnZ5hYCDgIR/hYSChYWCaHpyc3N8gHOCg3+Dg32BfX1+fX6Cg4F8f4F9f4B9fXx8fHx9fHx8fn1+gH+BgX99fX2AgYKBgYGBgIGBgYKBgoKCgoSHhIWEhYSBgoSGhoOFg4aIhoaFg4aGh4eGh4OFhYaFg4KFhoSFhYODg4SEhoaGhIaEg4SFhn1xe4FweXZ+g3+CbnlwdXN8dnp5hXKEg3B2eHF2dHR1cnN0dml/gG5yb3R2bnVsd217c26AiHltfXJzdnN2bW14bHB5bHV9f359foGAgX2Afn2Af4B/fX18fH19fH1+f32Af4CAfnx/foCBgoCBgICAgYCAgIKDgoOEhYiGhoCChYODhIeGg4WFhYaHh4SDhoeIiYaHhIWGiIeEg4WGhYWEhIOFhIKFhoaFhoWEhoWHdnB0e3BydX+HhYNtdW92b3x1coR5eYd4cXR3bndod3pucHaCcoN+b3p5eW1vbnpvb213fXiGcHF6cHJ0ZoF1fm57eXNveX+Af319gYB/fH99fIF+gIB+foCAgYB+fn9/foF/gH9+fYB9f4CBf4B+fn+BgH9/goOCgoSFh4eEfoeEg4OFh4aEhoWFhoaIhISGh4iIhoeFhoaLioWEhoeHhYSFhYWEgoWFhYWGhYWGhYZxdXByc29zenl+g3SIdHV+iHZugnKEhnluanJ/cW1zd3x/dXR8hH54cXV3bnl1enF2eHV6eYRxam95eHBreXN6b3p3dnZwgYB/fn5/f356fn19f31/f359gIGDg4CCg4GBhIGBgIGBgH1/f4F+gH59foGAfn6BgoCAgYSHhoODhoSEhYaHhoWFhYWGhoiFhIaFh4aFhoSGhomIhYSJioiFhIaGhYWDhYWEhYaGhoaFg3iLeXKIentwcIWFeIV4eWtzfnl7a3KDh4N6fG17eXl0fYB2bm+AgG90fHV3cXl9fW1+dW+DhYZ6gHJye3x0cG96bHN8bneCgIF+fn99fXt9e3x9fX9/fn1/f4KCf4GDgYGDgYB/gICAfn9+f31/fn1/gH58fYGAfn6Ag4iFhoOFhYWFhoeFhYWFhYeHiIaEhoWGhoaFhIWFhYWFhomJh4WEhoWGhoWGhoSGhoeGhoWGh4eHhoaEhoWGh4iHhYeGhoOGhoWFg4SGhoWGhIaEg4SEhoSEgYSDhISFhIWEhYSGg4aHhYaEhIWHhoSEhYWEhX13hYSEhIOCgX1/fnt8e357fHx9f359fH5+gIB9f4F/f4GAfn5+gH5+f35+fX99fX5/fHt8f358fH+BiYaFhIaGhoWHh4WFhYWGhoeIhoSGhYaGhYWDhYWGhYSGhoaGhYWGhIWGhoaGhYaGh4eGhYeIiIiIhoSHhYaHiIaFiIeIhYeGhoiFhYaHhYaGhYSDhYWGhYWDhISEhIWEhYWEhYWEhoeGhoWEhoeGhISFhoOFhIKEg4OFg4OCfYB/e3t8fXt8fH1/fnx8fn2Af31+gH5+gH99fXyAfX5+fn5+fnx8fX57fHx/fHt7fn+Ih4SEiIaGhoeGhYWEhoaGhoiHhIWGh4aFhIODhIaFhIeFhYaFhYaEhYaGh4eFh4aJiIaGiIeIiYiFhIiFhoeHh4aIhoeFh4eGh4WFhoeFh4aFgoOFhoaEhIOEhIOEhoSFhYWGhoSGhoWGhYSGhoWEg4WFgoWHhYOCgoWDhIF+gIB8e31+e3x7fX59fHx+fX5+fH9+fX1+fn19fH98fn58fYGAfHx8fXx8fH56e3t9foiHgoWIh4eGhoaGhISGhoeGiIaDhYSHhoSFh4OEhYSFh4SFhoaFhoSGhoeHhoaIh4mIhoaIh4iKiIWHiIWHh4aHhoeGh4WIiIeHhYaGh4WHh4WBhISFhoWFhISEg4SFhYaGhoWGhIeGhoeFhYaGhYSDhIOChIeDhIGChISDgYCAgHt7fn58fHx9fXx8fH19fH18fn18fX18fHx9fXx+fXt8gX99fH18fnx8fHp6fHx9iIeChoiHhoeGhoaEhYaFhoaGhYOFhIaFhIiJg4GEg4SGhIaGhoaGhIeHiIiHh4eIioiGh4iHiImIhYiHhYeGhYeHh4WHhoiIh4eFh4eHhYaHhIKEg4SGhYeFhYSDhISFhoaGhoaGh4aGiIWGhYaFhIKDgoODh4GDgIKDg4KCgn+Ae31+fnt8fH59fH19fH17fHx8fHx8fXt7e318e358e3x/fX18fX1/fXx6ent7fHyIh4KGhoaGh4aGhYSFhoWFhYWEg4WChoSDiId/enqChYaEhoaFh4aEh4eJiIiHhoiKh4aHh4eIiYeFiIeGiIeGhoeHhYeGiIiHhoWHhoeGhoeDg4SEg4aGh4WFhISEhYaGhoaGhYeHh4eIhoaEhoWDg4KCgoOGgYN+goKDgIODf398f35+fHx9f318fX18fXp7e3p7fHx8e3t7fnt7fXt7e358fHx8fX5/fXt6fHp8fYmHg4aFhoWGhoWFhIWFhYWFhIOBhYGGhIKEhHyAhn+ChYWGhYWGhYSHh4iIiIaFiYqHhYeGh4eIh4WIhYaHiIaGh4eGh4aIiIeFhoeGh4WFh4OEhoWEhoaHhoWFg4WFhoaGhoeFh4aHh4eHhYSFhYOBgoGAg4WCg36BgYF/g4F+f35/fn98fH1/fXt9fXx9enp7eXt8fXt7e3t+fHx8fHp7fXx8fHx+fYF8e3t7e3x7iYeEhoSGhIaGhYSFhYWEhIOEgoCDgYWCgYJ/eoSMe4CEhYeGhoaFhIeIh4aHhYWHioeEh4WHhoiGhYeEhoeJhoaIiIeHhoeIhoSGhoaHhoWHg4SFhIaGhoeFhYSDhYWHhYeGh4WGhoeGhoaEg4SFgYCBgYCDg4OCfYGBgH6DgX5/f4B8f3x9fX59e359fH15enp5e319enp7e318fXx8ent9fHx9fH5+gHx7e3x+fXyIh4WGhYaEhoWFhYWFhYODgYOBgIGBhYKAgH9/fXx7gYSFhoaEhYSDh4eGhoaFhIaJhoKGhIaGhoWFh4WHiImGhYiHiYeGhoeFhIaFhYaFhIeDhIWEiIaGh4WFhIKGhYaFh4aHhIaGhoWFhoODg4SAf4GAgISAg4B8gYB+foKAfYB/gXx/fH1+fX57fn18fHl6enl6fX15enp7fHt8e3t6e319fH18fn5+fHt7fX59fIiGhYaGhoSFhYSFhYSDgoKAgoGAgICDgX5+foB5en2Ag4OFh4WEg4OHhoOEhYSChYiFgoSDg4WFhYWHh4aIiIWFiIeJh4aFhoWDhoSFh4OEhoSEhYSHhoWGhYaEg4aFhoaGhoaEhYaHhYWGgoKDg39+gICAgX+DgHuBf31+gn5+gH6Afn99fX59f3t/fXt6eXp6eXp8fXl6ent7enx7e3t7fH19fXx/fn18fH1/fnx7iIWFhoaGhoSFhIWDhYKBgICAgYB+gIKCfX1/f3t/f4KDg4WGhYSDg4aDgYOEgoCFh4WCg4GBg4SEhIWGh4iHhYWIhomHhYOEhIKFg4SGgoOFhYWGhIeGhYWFhoOEhYSFhoWGhIOFhYaDhYWBgYODf35/gH9+f4N/e4B9fX+CfYCBfn6Bfn19fX1/e398e3p5enp5enp8eXp6ent7fHp7e3t8fX59fYF9fXx8fYB/fXyGg4aGhoaFg4SDhYKFgYGAf3+AgH5/gIF8fn9/foCAgoKChIWDgoGChIGAg4KBgISFhYKBf4CCg4OEhYaIhoWEhYeFh4WFgoOCgYOCgoWBg4WEhYaEhoaHhoaFgoSEg4SGhYWDhISDhIOFhICAgoJ/fX1/fn6AhH57f3x8gIF9gYB9fYN8fn59fX57fnt7enl6enl6ent5enp6e3t8ent8e3t9fn1/gXx9fHx9f4B+gIaEhYWEh4SDg4KGgoOAgYB+fn+AfX9/gXx9f39+fn6BgYKEg4KBgYKCf4CBgoCAgoWEgoB/gIGCgYOFhYeGhISGhoSFg4WBgoGBgoGCg4GChISEhYWGh4eGhYSDg4ODhIaFhIGDgoOChIODgH+AgX59fH5+fH+DfXx+fHyBgH6Cf31/gnx/fn18fHx8e3t6enp6eXt6enp6enp6e3x5e318fH5/f4GAfX59fX1/gICAhoSEhYSFgoOCgoSCgoCBgH59fn9+fn6AfX2Af35+foGBgoODgoSHgYF+gICBf3+ChIOBf35/gIJ/goWEhoSDg4WFgoSBg4CBgIGBgYKBgIGEg4OGhYWHh4WEhYWCgoKDhYSCgYGBgoCFg4F/foB/fnx8fn18foN9e358fYF/gIN+fYCBf35/fXx8fH17e3p6enl5e3l6enl6ent7e3p7fXx8f3+BgoB+gH+AgH+AgYDKysrKysrKysrKysrLy8vLy8vLy8vLy8zMzMzNzc3Nzc3Nzc3NzczMzMvLy8vLy8vLy8vLy8vLzMvLy8vLy8vLy8vLy8vMzMzMzM3Nzc7Oz8/Pz9DQ0NHR0dLS0tLS0tLT09PT0tLS0tLS0tPT09TU1NTU09PT09PT09PT09PT09PT09PT09PT09PT09PT09PS0tLS0tLS0tLS0tPT09PT1NTV1dXV1dXV1dXV1dXV1dXV1NTU1NTT09PT09PT09PT09TU09PU1NTU1NTU1NTU09PT09PS0tLS0tPT09TU1NTU1NPT09LS0tLS0tLR0dHR0dPHhnNlYFtLWWdVTUZIQD03Nzg5Nzw8PDo8Oz42Oj04PDs6OTg3ODs7Oj87PTs8PD47P0E/QkJBQ0RFREE+PTw7QENDQUBDQ0FBR0hHSUtSwtXS09PT09TU1NTU1NTU1NTU1NXV1dXV1dXV1dXVysrKysrKysrKysrKy8vLy8vLy8vLy8vMzMzMzMzNzc3Nzc3Nzc3MzMzMy8vLy8vLy8vLy8vLzMzMy8vLy8vLy8vLy8vLzMzMzc3Nzc3Oz8/P0NDQ0NHR0tLS0tLS09PT09PT09PT09PS09PT09TU1NTU1NTU09PT09PT09PT09PT09PT1NTU1NTU1NTT09PT09LS0tLS0tLT09PT09PU1NTU1dXV1dXV1dXV1dXV1dXV1dXV1NTU1NPT09PT09PT09PU1NPT09TU1NTU1NTU1NPT09PS0tLS0tPT09PU1NTU1NTU09PT09PS0tLS0tLR0dHSzIxyZ2BcTVllUktHSz87Mzc4Ozg5Pj05PDpBOjs9Nzo8PDo6Nzg6Oz0/Oz88PTw/Pj9BPUFBPkNDREJAQT46Oz9DREFDRERCQklHSEhJTr7V0tPT09TU1NTU1NTU1NTU1NXV1dXV1dXV1dXV1crKy8vKysrKysrKy8vLy8vLy8vLy8vLy8zMzMzMzM3Nzc3Nzc3NzMzMzMzMy8vLy8vMzMzMzMzMzMzLy8zMzMzLy8vLzMzMzc3Nzc3Ozs/P0NDQ0NDR0dLS0tLS09PT09PT09PU09PT09PT09TU1NXV1dTU1NTT09PU1NPT09PT09PT1NTU1NTU1NTU1NPT09PS0tLS0tLS0tPT09PT1NTV1dXV1dXV1dXV1dXV1tbV1dXV1dTU1NTT09PT09PT09PU1NTU09TU1NTU1NTU1NTT09PT0tLS0tLT09PU1NTU1NTU1NTU09PT09PT0tLS0tHR0s+Sd2hfXk9XZ01LRkw9ODc2NTk5OTw+OT88RDk7PDg6PD07OTc5Ojw9QDs+PT47PD48PT5BQD5EQ0NDP0E9Ojs9QkNFQ0NEQT9FSEpJSky61dPT09TU1NTU1NTU1NTV1dXV1dXV1dXV1dXV1dXLy8vLy8vLy8rKysvLy8vLy8vLy8zLy8vMzMzMzMzNzc3Nzc3Nzc3MzMzMzMzMzMzMzMzMzMzMzczMzMzMzMzMzMzMzMzMzc3Nzc3Ozs/Pz9DQ0NDQ0dHS0tPT09PT09PT09TU1NTT1NTU1NTU1NTV1dXU1NTU1NPU1NTU09PT09TU1NTU1dTU1NTV1dTU09PT09LS0tLS0tLS09PT09TU1dXV1dbW1dXV1dXV1tbW1tXV1dXV1NTU1NTT09PT09PT1NTU1NTU1NTU1NTU1NTU09PT09LS0tLT09PU1NTU1dXV1dTU1NTT09PT09PT0tLS0dHRmn5nYWJOVWpKSElLPzw6OTM3Njc3PTs+OT06Ojo4OTo7Ozg4Ojs7PD46PT09Ojw/PD0/QkA/Q0RDRD5APT08QENEQ0JEQkQ+REhJSUtMttfT09TU1NTU1NXV1dXV1dXV1dXV1dXV1dXV1dXVy8vLy8vLy8vLy8vLy8vLy8vLy8zMzMzMzMzMzMzNzc3Nzc3Nzc3Nzc3MzMzMzMzMzMzMzMzNzc3NzczMzMzMzMzMzMzMzc3Nzc3Ozs7Pz8/Q0NDQ0NHS0tLT09PT09PT1NTU1NTU1NTU1NTU1NTV1dXV1NTU1NPT1NTU1NTU1NTU1NTU1dXV1NXV1dXV1NTU09PT09PS0tLT09PT09PU1NXV1dbW1tXV1dbW1tbW1tbW1dXV1dXU1NTU1NTU1NTU1NTU1NTU1NTU1NXU1NTU1NTT09PT09PT09PU1NTU1dXV1dXV1dTU1NTU09PT09PS0tLR0p+DaV9kU1hsSEhIS0A9Nzg0NzY6Oj87RDw8OTw8OTc6OTs6Ojs8Ojo7OT49Pjk9QDs/QUFCP0JCQUM9Pz8+PEBCRUNDQkBBO0ZJR01MSbLY09TU1NTU1NXV1dXV1dXV1dXW1tbW1tbV1dXW1svLy8vLy8vLy8vLy8vLy8vLy8vMzMzMzMzMzM3Nzc3Nzc3Nzc3Ozc3NzczMzMzMzMzMzc3Nzc3Nzc3Nzc3Nzc3Nzc3Mzc3Nzs7Ozs7Pz8/P0NDQ0NHS0tLS09PT09PT09TU1NTU1NTU1NTU1NTV1NXV1dTU1NTU1NTU1NTU1NTV1NTU1dXV1dXV1dXV1dTU1NTU1NPT09PT09PT09PU1NXV1dbW1tbW1tbW1tbW1tbW1tbV1dXV1dTU1NTU1NTU1NTU1NTV1NTU1NXV1dXU1NTU1NTT09PT09PT1NTU1dXV1dXV1dXU1NTU1NTT09PT09LS0tSjiGxfZlJWakdIR0lBPjM2Njo7PDhDPEJBPjxBPDg5Ojw6Ojw8PDk8PTo7PD09PD89QD9AQT9AQUBCPD4+PzxCQ0NDRkBBQT1ISklOTUeu2NPU1NTV1dXV1dXV1dXV1dbW1tbW1tbW1tbW1tbMzMvLy8vLy8vLy8vLy8vLy8vMzMzNzc3Nzc3Nzc3Nzc3Nzc3Nzs7Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Ozs3Nzc3Nzc3Nzc3Nzs7Ozs7Oz8/P0NDQ0NHR0dLS0tPT09PT09TU1NTU1NTU1NTU1NTU1NTV1dXV1dTU1NTU1NTU1NTU1dXV1dXV1NXV1dXV1dXU1NTU1NTU09PT09TU1NTU1NXV1dbW1tbW1tbW1tbW1tbX19bW1tXV1dXV1dXV1dXV1dTU1NTU1dXV1dXV1dXU1NTU1NTU09PT09PT1NTU1NXV1dXV1dXV1dXV1NTU1NPT09PT0tLWroprY2VSWGhMSkdJQjg0OTQ6Ozo5QDk/Q0VAPDw5OTk9Oj07PDw6PTw7OTw9Ozs/PUA9PT5AQD9CQT5APD05QERDQkFBQj48SEpLTU5IqNnU1NXV1dXV1dXV1dXW1tbW1tbW1tbW1tbW1tbWzMzR09PT09PT09PT09PT087Ky8vLzMzMzMzMzMzMzM3Nzc3Nzc7Ozs3Nzc3Nzc/Pz8/Pz8/Pz8/Pz9DQ0dHR0dHR0dHR0dHS0tHV2djY2NnZ2dra2tvb29vZ2dnZ2dna2tra2tra2trZ2dnZ2dnZ2tra2trZ2drb29vb29vb2tvc29zb2dfX19fX19fX1tbW1tbX2tra2tra2tra2trb3NzX1dXV1dXV1dXV1dXW1tbX1tbW1tbV1dXV1dXV1dXV1dTU1dXV1dXV1dXU1NTU1NTU1NTU09PU1NTU1NXV1dXW1dXV1dXV1dTU1NTT09PT09PS1bqKa2hoUlhlSUlMT0A5OTo0O0E8Nz05QUM+QD89ODo6Ozk9Oz4/Ojs8PDo7PDo7Pj1APT8/P0FAQUE/QTw8Oz5BRENBREA9PElJSk1ORqPa09TV1dXV1dXV1dXW1tbW1tbW1tbW1tbW1tbW1szNhG1wcHBwcHBwcHBwcGqn493d3t7e3t7e3t7e3t3S0NDQ0NDQ0NDQ0NDQ0ci5ubm5ubm5ubm5ubq6t6WkpKSkpKSkpKSkpKSnhmBjY2NjY2NjY2NkZGRlhIuKioqKioqKioqKiomSmZiYmJiYmJiYmJiYmJeMi4qKioqKioqKioqKiKC/vL29vb29vb29vb2+tIqKioqKioqKioqKiouHvebh4uLi4uLi4uLj4+Pi2NfX1tbW1tbW1tbV1dXV1dXV1dXV1dbW1dXV1dXV1dTU1NTU1NTU1NTV1dXV1dXW1dXV1dXV1dXV1NTU1NTT09PT09XDkXFrak5TYkxMVk48Ojo3Nz5DPjg+Oj8/QTw/QDc7Ojs7PTs+Pjo7PD48Oz07PT8+QDw/Pz1AQEBBPj88PjxAQUVCQkZAQD9HSEpLT0ae2tXV1dXV1dXW1tbW1tbW1tbW1tbW19fX19fX19fMzk4mKysrKysrKysrKysiivTr6+rq6urq6urq6uvp1dLS0tLS0tLS0tLS0tTEqaqqqqqqqqqqqqqqq6aGhIWFhYWFhYWFhYWFik4MEhISEhISEhISEhIRE0pUU1NTU1NTU1NTU1NRYmxra2tra2tra2tra2tpVVNTU1NTU1NTU1NTU056r6qqqqqqqqqqqqqqrJtTUlNTU1NTU1NTU1NTS6ry6+vr6+vr6+vr6+vr6dnX19fX1tbW1tbW1tbW1dXV1dXV1dbW1tbV1dXV1dXV1dXV1dTU1NTV1dXV1dXW1tXV1dXV1dXV1dXU1NTU1NTU1NPUy5h2bGlKTl9NUlVNPjw8NztAQz42Ojc9Pzs9Qj85PDk9Ozw6PD07PTs9Ozs9PD0+PT07QT08QUBBQT08Pzw7QEJDQURFPUFAQ0ZLS09GmNzV1dXV1dbW1tbW1tbW1tbW1tfX19fX19fX19fXzc5SKzExMTExMTExMTExJ43z6enp6enp6enq6unq6dXS0tLS0tLS0tLS0tLUxaqrq6urq6urq6urq6yoiIeHh4eHh4eHh4eHh41SEhgYGBgYGBgYGBgYFxpOWVdXV1dXV1dXV1dXVmVwb29vb29vb29vb29vbVlXV1dXV1dXV1dXV1dTfrCsq6urq6urq6urq66dWFdXV1dXV1dXV1dXV0+r8erq6urq6urq6urq6unZ19jX19fX19fX1tbW1tbW1tbW1tbW1tbW1tbV1dXV1dXV1dXV1dXV1dXV1dXW1tbW1tXV1dXV1dXV1dXU1NTU1NTU1NGcenFpSlRdT1JVTkQ+Pzs+QEA4Ojs4PDs7PD86Ozs4Ozk5Ozw7Ojw5Ozs8Ozo9PT0+PUE/Pj8/Pj08PT88PEFBQ0FERTw+QEVGSktNRpPc1dXV1tbW1tbW1tbW1tbW1tfX19fX19fX19fX183PXDk9PT09PT09PT09PTWT8Ofn5+fn5+fn5+fn5+bV0dLS0tLS0tLS0tLS08Wtrq6urq6urq6urq6vq46NjY2NjY2NjY2NjY2SXSInJycnJycoKCgoKCcpWmNiYWJhYmJiYmJiYmFveHd3d3d3d3d3d3d3d3VjYmJiYmJiYmJiYmJiXoWyr6+vr6+vr6+vr6+xoWJhYmJiYmJiYmJiYmJbr+/p6enp6enp6enp6enn2djY2NjY19fX19fX19fX19fX19bW1tfX19fW1tbW1tbV1dXV1dXV1dXV1dXV1tbW1tbW1tbW1tbV1dXV1dXU1NTU1NTWo3txZElbYE5OVU9AQT89REI/Oz06OTs6PT07PDs6OTg5OTs8Ozw8Ojo7PDo7QD08PTxAQTxBQTs7PEA/PD1CP0RDQ0U8PkJERkpMTEWN3NXV1tbW1tbW1tbW1tbX19fX19fX19fY2NjY2NjNzcXCw8PDw8PDw8PDw8PCydDPz8/Pz8/Pz9DQ0NDQz87Ozs7Ozs/Ozs7Oz8/NzMzMzMzMzMzMzMzMzMvJycrKysrKysrKysrKysfCw8PExMTExcXFxsbGxsvMy8zLzMzNzMzMzMzLzc7Ozs7Ozs7Ozs7Ozs7NzMzMzMzMzMzMzMvLy8vP09PS0tLS0tLS0tLT09HNzc3Nzc3Nzc3Nzc3NzdTY2NnZ2dnZ2dnZ2dnZ2djY2NjY2NjY2NjY2NfX19fX19fX1tfX19fX19bW1tbW1tbW1tXV1dXV1dXV1dbV1dbW1tbW1tbW1tXV1dXV1dTU1NTU169/cF5GXmJQUVdOR0ZDQ0lBPz07PDo8OEBCPD04Ojo4OTg7Pzs8PDs7PDw8PD87PD46Pj44PkI8Pj1BPjw+QkBERUNAPD5APkNJSUtEh9zV1tbW1tbW1tbW1tbX19fX19fX19jY2NjY2NjYzs3P0NDPz8/Pz8/P0NTQ0M7MzczP09LSzs3P0s7Ozs7Ozs7R1NTTztDU0s/O0NTSz8/Pz8/Pz8/Pz8/Pz8/P0NDQ0NDR0dHR0dHS09PU1NTU1dXV1tbW1tfW1tbX1tfX19fX19fX19bW19fX19fX1tfX19fX1tfX19fX19fX1tbW1tbW1dXW1dbW1tbW1tbW19bW2NjY2NjZ2dnZ2dnZ2dnY19jY2NjY2NjY2NnZ2dnZ2dnZ2djY2NjY2NjY2NjY2NjX19fX19jY19fX1tbW1tbW1tbW1tbW1tbW1dbW1dbW1tbW1tbW1tbW1tXV1dXV1NTV1di4gm9XSl9jUlFaS0hBQTxCPT07Oj4+PD4/PT0/Nzk6OTk3OD48PD47Ozw7PDs/PT0+OTs7OT0+P0A+QD07OkI/QkNCPz0+QD5CRUdKQoDc1tbW1tbW1tbW19fX19fX19fX2NjY2NjY2NjY2M7Ozs7Ozs7Nzc3Nzsqfys3Nzc3QuYOEi8fTwJrLz87Ozs7RsIOEk8/JlKjS0MaTq9LOzs7Ozs7Ozs7Ozs7Oz8/Pz8/P0NDQ0NDQ0NDR0dHR0tLT09PU1NTU1NTV1dXV1dXV1dXV1dXV1dXV1dXW1tbV1dXV1dbW1tbV1dXV1dXV1NTU1NXV1dXV1dXV1dXW1tbW1tbW1tbX19fX19fX19fY2NjY2NjY2NjY2NnZ2dnZ2dnZ2dnZ2dnY2NjY2NjY2NjY2NjY2NjY2NfX19fX1tbW1tbW1tbW1tbW1tXV1tbW1tbW1tbW1tbW1tbW1dXV1dXV1dXYwIBuVU9gY1dZW0xMQ0A9PTs9Ojw+Qj5CQ0A8Ojg5ODo6Ojc7Pz4/PDw7PDo5Pzw8PTg5PD9BPj09PUFAPTtBQkBCQz47QD9BQUlHSkF629bW1tbW1tbX19fX19fX19jY2NjY2NnZ2djY2dnOzs7Ozs7Ozs7OzdKpj63Rzs7Ozpu3tqSiwJOerNPOzs7PyZu6uJ2snqubsNCZrZmz0s7Ozs7Ozs7Ozs7Pz8/Pz8/Pz9DQ0NHR0dHR0dHS0tLT09TU1NTU1dXV1dXV1dXV1dXV1dXV1dXV1dXW1tbW1tXV1dbW1tbW1tXV1dXV1dXU1dXV1dXV1dXW1tbW1tbW1tbW1tfX19fX19jX19fY2NjY2NjY2djY2dnZ2dnZ2dnZ2dnZ2dnZ2djY2NjY2NjY2dnY2NjZ2NjY19fX19fX19bW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tXV1dXV1dXV18h/b1pTYWVeXVxPSkQ9QD8+Ozc6Pjk/RD5BOTg3ODk7Ozw4OT89PTw9PD47OkE7OTs5OzxDQDw7PT5AQT49QkQ/QkM9PT8+Pz5ISUg/ddrW1tbX19fX19fX19fX2NjY2NjZ2dnZ2dnZ2dnZzs7Ozs7Ozs7Ozs/Inrym0tDQzsqgl36Cw6abr6fUz8/P0cOij3+KwpSHnJ7Fk4adnc7Pzs7Ozs7Ozs7Oz8/Pz8/Pz8/Q0NDR0dHR0dLS0tPT09TU1dXV1dXV1dXV1dXV1dbV1dXV1dXV1tbW1tbW1tbV1dXV1dXW1tbV1dXV1dXV1dXV1dXW1tbW1tbW1tbW1tbW1tfX19fX19jY2NjY2NjY2NjY2NjZ2dnZ2dna2dnZ2dnZ2dnZ2dnZ2djY2NjY2NnZ2dnZ2dnY2NjY2NfX19fX19fX19bW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1dbV1dXV1dfNiHNdWGloXl9gT0lGOkFAPj88PDo2P0JAQzo2NDc6Ozo8Ojk+PD49PTs/PTxBPjw8Ojw8PTw6PEA9QEI+PkFCPUNDPT0+Oz9BRUtIQHDZ1tbX19fX19fX19fY2NjY2NjZ2dnZ2dnZ2dnZ2c/Pz8/Pz87Ozs7SrKWnqdXAvNLHnY+ey9PJipmq1M/Pz9G/noqo0NS7yJiZxr3JlpnG0M/Pz8/Pz8/Pz8/Pz8/Pz8/Q0NDQ0dHS0tLS09PT1NTU1dXV1dXV1dbW1tbW1dbW1tbW1tbV1tbW1tbW1tbW1dXV1dXV1dXW1dXV1dXV1dXV1dXW1tbW1tbW1tfX19fX19fX19fX19jY2NjY2NjY2NjY2NnZ2dnZ2dnZ2tnZ2dnZ2dnZ2dnZ2dnZ2dnY2dnZ2dnZ2dnZ2dnY2NjY19fX19fX19fX19bW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbV1dXW0JB1W1tqaWFeXVNOSTxDQEE+QD46OEZBP0M6NzQ5Ojo5Ozs4Oz0/Pj49QT08P0A9Pjw8PDw8Oj1AQD8/PT5CQD9AQkA8QD0+QUVLRz9r19fX19fX19fX2NjY2NjY2NjZ2dnZ2dnZ2dnZ2tnPz8/Pz8/Pz8/QzJ2Nl6zQmpfKxZ6ynpbN1q2ZqtTPz8/RuqWtnJ7S0ZSWn87RkZigztDQ0M/Pz8/Pz8/Pz8/Pz8/P0NDQ0dHS0tLT09PT1NTU1NXV1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbV1dXV1dXV1dXV1dXV1dXV1dXW1tbW1tbW19fX19fX19fX19fY19fY2NjY2NjY2NjY2NjZ2dnZ2dnZ2drZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2djY2NjY2NfX19fX19fW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1dXV1tKUcl5ea2tqZV1PTEc/RENDQDo9OzxCPD49OTY0Ojk5Ojo5Nzs/QDs8PUA8PEE+PD07PTw/PDo8Q0A+PTs9QD5CPkBBPkA9QD9GSUQ/ZtXX19fX19fY2NjY2NjY2NnZ2dna2tra2tra2traz8/Pz8/Pz8/P07GigJuvyaCjv8qcpYynrdiqmarUz8/P0cCgn5OlvLOfwpvaraO/ndXQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NHR0tLT09PT1NTU1NXV1dbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1dXV1dXV1dbW1tXW1tbW1tbV1tbW1tbX19fX19fX19fX19fY2NjY2NjY2NjY2NjY2NjY2dnZ2dnZ2dna2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2djZ2djY2NjY2NfX19fX19bW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbSk3BgXnBoZmVaUUhHQkVDQEA3Ojo8Pjo8OTc2NTk6Njo8Ozc8QEA8Ojo9Oj0/Pj08OUA8PDo6OT9APj08PUBBQz9APz5BOz9ARkpCP2LS2NfX2NjY2NjY2NjY2dnZ2dnZ2tra29vb29vb28/Pz8/Pz8/P0M6fkGyclteqo9PSrqa1mJ/Vqpmq1M/Q0NDSpq+um6fQi5Oex8uIlZ7I0tHR0NDQ0dHQ0NDQ0NDQ0NDQ0NHR0tLT09PT1NTU1dXV1dbW1tbX19bW1tbW1tbW1tbX1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tfW1tfX19jY2NfX19fX2NjY2NjY2NjY2NnZ2dnZ2dnZ2dnZ2dna2tnZ2dnZ2dnZ2dnZ2dnZ2dnZ2djY2dnZ2dnZ2dnZ2dnZ2NjY2NjY2NjX19fX1tbW1tbW1tbW1tbW1tbX19fX19fW1tbW1tbX0pNuYFxxZGdkWlVKQENGQ0FCODs/PD07PDw4NTU4OTY4Ozo5PDo+Pzw9PTk8Pz49Ojo+OTw6Ojg+Pzw9PTw+QEFDQT48PDpCRERKRkJd0NnX19jY2NjY2NjY2dnZ2dna2trb29vb29vb29vPz8/Pz8/Pz9G9n8O31pfA09HQ0srSzZeb1KqZq9XRz9DQ0cnXxJih0NqlmbPQ26KZtdXR0dHR0dHR0dHR0NDR0dHR0dHR0tLT09PU1NTV1dXV1tbW1tfX19fX19bW1tbW1tfX19fW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW19fX19fY2NjY2NjY2NjY2NjY2djZ2dnZ2dnZ2dnZ2dnZ2drZ2tnZ2dnZ2dnZ2dnZ2dnZ2djY2NjY2NjZ2dnZ2dnZ2dnZ2dnY2NjY2NjY2NfX19fX19fX19fW1tfX1tbX19fX19fX19fX19bW19GRbF1cb2doYl1PRkBISUdFQDw8Pj48PT48NzU2Ojk2OTs6Ojs4QD86PDw5PD49Ozs6Pzk/Ojs5PT49PTs7PTxAQ0I/Pz47Q0ZGR0hEWc3a2NjY2NjZ2dnZ2dnZ2dna2trb29vb29vb29vb0NDQz8/Pz8/Pz5V+e6WS1KKa08ySl6ObodirmavV0pem1cWNnqCeoJKnmaCtkKiYnrvV0dHR0dHR0dHR0dHR0dHR0tLS0tLS09PU1NTV1dXV1tbW19fX19fX19fX19fX19fX19fX1tbW1tbW1tbW1tbX19bW1tbW1tbW1tbW1tbW1tbW1tbW1tfX19fY2NjY2NjY2NjY2NjY2dnZ2dnZ2dnZ2dnZ2dnZ2tra2tra2tnZ2dnZ2dnZ2dnZ2djY2NjY2NjZ2dnZ2tnZ2dnZ2dnZ2djY2NjY2NjY2NjX19fX19fX19fX19fX19fX19fX19fX19fX1tfPjGRWXnBrXGBgTkVITUlJT0M+OkI9PUBCOzU1Nzw6Nzo7Ojo7OT09OTo6OT0+Pz07OT47PDo8Ozk+PD47PD0+QENCPz5BPEFDR0ZGRVXJ29jY2NnZ2dnZ2dnZ2dra2tvb29vb29zc3Nzc3NDQ0NDQ0M/Pz9DR1aeZrcmjqL7KnbGdo7XZqZup2LirocnBoa2ho6WmpKigr6eiqZzQ09LS0tLS0tLS0tLR0dHS0tLT0tPT09PU1NTV1dbW1tbX19fX19fX19fX19fX19fX19fX19bW1tbW1tfX19fX19fW1tbW1tbW1tbX19fW1tbW1tbW1tbX19fX2NjY2NjY2NnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dra2tra2tra2trZ2dnZ2dnZ2dnZ2djY2NjY2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnY2dnY2NjY2NjX19fX19fX19fX19fX19fY2NfX19fX19fYzYZdV2JvZE9dVEtIRlNRS0xAPj1EPD9DRj01NTc7OTY6Ozo8PTo7Pzo6OTg6PT0/Pjs/Oz49Ojs5Pjs9PD0+QURCQD8+PzxAQUVHRURSxdvY2dnZ2dnZ2dnZ2tra2tvb29vb3Nzc3Nzc3NzQ0NDQ0NDQ0NDQ0NO5gL3Tm5bP1LWLkZ/T1LyBu9TOlKDT1auNj6rWnJGOutWakY6+1tLS0tLS0tLS0tLS0tLS0tLT09PT09PU1NXV1dbW1tfX19fX19fY2NjY19fX19fX19fX19fX19fW1tbX19fX19fW1tbW1tbW1tbW19fX1tbW1tbW1tbX19fX19jY2NjY2NnZ2dnZ2dnZ2dnZ2tnZ2tra2tra2tra29ra2tra2tnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2NjY2NjX19fX19fX19fY2NjY2NjY2NjY2NfX2ct+WlVqaltMX01KTEpVTEZCPD0/R0ZIS0g9NjU3Ojk3OTo7Ojw9OT45OTo4Oz0+PkE+PTk8PDo9Pj46PTk5Oj9FQUA+PT8/QkBHRURFUMHc2dnZ2dnZ2dna2trb29vb29vb3Nzc3Nzc3dzc0NDQ0NDQ0NDQ0NDQ0cHR0crI0tDUxLjS0tHSwtLQ08fM0tHUwb7V09O5x9bT07jI1dLS0tLS09PT09PT09LS0tPT09PU1NTU1NXV1dbW1tfX19fX19fX2NjY2NjX19fX2NfX19fX19fX19fX19fX19fX1tbW1tbW1tbW1tfX1tbW1tbW1tbW19fX19fY2NjY2NjY2dnZ2dnZ2dnZ2dra2tra2tra2tra29va2tra2tra2dnZ2dna2tnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dna2tnZ2dnZ2dnZ2djY2NjX19fX19fY2NjY2NjY2NjY2NjY19rHd1xSZ2laTlpOTFBRV0VKPz89P0FFTExAPjc3NTs4ODk5Ojs8Pjw+ODo6OTs+P0A9Pj46NTo6Oz0/Ojs5Ojw+QkJAPz8/P0FCR0RDRE683dnZ2dnZ2dna2tvb29vb29vb3Nzc3Nzc3d3d3dDR0dDQ0NDQ0NDQ0NDS0NDR0dDQ0dPU0dHR0dPR0dHS0tHR0dTV0tLS1dTT09PW1NLS0tPT09PT09PT09PT09PT09PU1NTU1dXV1dbW1tfX19fX2NjY2NjY2NjY2NfX19jY19fX19fX19fX19fX19fX19fX1tbW1tbW1tbX19bW1tbW1tbW1tfX19fX2NjY2NjY2NnZ2dna2tra2tra2tra2tra2tra2tvb2tra2tra2trZ2tra2tra2tra2tra2tnZ2dnZ2dnZ2dnZ2trZ2tra29ra2trZ2dnZ2dnZ2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjbwXNYVWlrU0xSTlBSWVRGSTw+Qz9BQkVKPj43ODY5Nzc4OTk7Oz0/QDw9ODk7Ozs/Pjw8OTU6PT47OTk7PD8/P0JCQT1BPUBBQkZCQkJLtd7Z2dra2tra2tvb29vb29vc3Nzc3Nzd3d3d3d3R0dHR0dHR0dHR0dDQ0NDQ0NDQ0dHR0dHR0dHR0dHR0dHS0tLS0tLS0tPT09PT09PT09PT09PT09TU1NPT1NTU1NTU1NXV1dXV1dXW1tbX19fX2NjY2NjY2NjY2NjY19fY2NjX19fX19fX19fX19fX19fX19fX19fW1tbX19fX1tbW1tbW1tbX19fX19jY2NjY2NnZ2dna2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tnZ2dnZ2dnZ2NjY2NjY2NnZ2dnZ2dnZ2NjY2NjY3LxvVFRsbExLUkpUUlVLRkQ6PkdEREFERjw/ODk6OTU5OTo3PD07PkA9PTc5Ojs5Pjs5OTY2Oj1AQT47PDk6Pj9DQT4/Qj0+QkNFQkFCSrDe2dra2tvb29vb29vb29vc3Nzc3Nzd3d3d3d3d0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0tLS0tLS0tLS0tLS0tLS0tPT09PT09PT09PT09PT1NTU1NTU1NTU1NTU1dXV1dXV1tbW1tbW19fX19jY2NjY2NjY2NjY2NjY2NjY2NjY19fX19fX19fX19fX19fX19fX19fX19fX19fW1tbW1tfW19fX19jY2NjY2NjZ2dnZ2dra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2trZ2dnZ2dnZ2djZ2dnZ2dnZ2dnZ2dnZ2dnY2Ny2a1NbcGtLVVdSXFFXSEQ+PEJKRT1ISj89PDc4ODo1OTg5Njs+PD1APDw1OTk8Oj87OTg0ODw9PUFBPD47Ojw+QD89PkE9PUNGR0I/Qkmq39ra29vb29vb29vb3Nzc3Nzc3N3d3d3d3d3d3dHR0dHR0dHR0dHR0dHR0dHR0dHS0M/U0M7P0tLT0tLS0tLS0tLS0tPT09TU1NTU1NPU1NTU1NTU1NTU1NTU1NTV1dXV1dXV1dbW1tbW19fX19fY2NjY2NjY2NjY2NjY2NjY2NjY2NjX19fX19fX19jY2NfX19fX19fX19fX19fX19fX19fX19fX19jY2NjY2NjY2dnZ2dra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tvb29va2tra2tra2tra2tra2tra2tnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dndsGRTYXJfT1pUV19RUkdCPUVJTEFBTEQ/Pzs6ODg5Mzg2ODY5Pj0+Pz06Njo7Pjs9PTo5Njg6PTtAQDxAPz0/P0I+PD48PEJFR0lCPkNJpODa29vb29vb3Nzc3Nzc3Nzc3N3d3d3d3d3d3t7S0tLS0tLS0tLS0dHR0dHR0dPT0bm7zLqbnLrQyNPT0tLS09PT09PT09PU1NTU1NTU1NTU1NTU1dXV1dXV1dXV1dXV1dbW1tbW1tbX19fX19fY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjX19fX19fX19fX19fX19fX19fX19jY2NjY2NjY2NjZ2dra2tra2tra2tra2tra2tra2tra2tra29va2tra29va2tvb2tra2tra2tra2tra2trb29vb29va2tra2tra2tra2tra2tra2tra2tnZ2dnZ2trZ2dnZ2dnZ2dnZ2dnZ3qpfVWBuW1VZUVpeT0xHQ0ZNSUZEREo7QUE7PDg4NjQ4Njk4Nzw/QT89Ojc8Pz48Pz87OjY4OD09QEE9QD5BQD1AOjs6Pj1BRUdJQkBDR57h29vb29vc3Nzc3Nzc3Nzc3d3d3d3d3d7e3t7e0tLS0tLS0tLS0tLS0tLS0tO+wMqaoKKViJGeqpOpz9TT09PT09PT09PU1NTU1NTU1NTU1NTV1dXV1dXV1dXV1dXV1tbW1tbW1tbX19fX19fY2NjY2NnZ2dnZ2dnZ2dnZ2djY2djY2NjY2NjY2NjY2NjY2NjY2NjX19fX19fX19fX19fX19fX19fY2NjY2NjY2NjZ2dna2tra2tra2tra2tra2tra2tra29vb29vb29vb29vb29vb29vb29ra2tra2tra2tra2tvb29vb29va29vb29vb29va2tra2tra2tra2tra2tra2trZ2dnZ2dnZ2dnZ2d6iXFVeblheXU5aUFROQ0NMSUlJRkpEPEJBPDs4NzY3OTc3OTk9P0E/PDo5QD88PkI/Ojg3NzY9Pz9APUBBPz88PTs7OD48P0VJSEE/Q0aX4dvb29zc3Nzc3Nzc3N3d3d3d3d3d3t7e3t7e3tPT09PT0tLS0tLS0tLS0tTIlZyum5m1iX2TjIKBhMTV09PT09PT09PU1NTU1dXV1dXV1dXV1dXV1dXV1dXV1tbW1tbW1tbW1tfX19fX19fX2NjY2NjY2dnZ2dnZ2dnZ2dnZ2dnZ2NjY2NjY2NjY2NjY2NjY2NjY2NfX19fX19fX19fX19fX19fX2NjY2NjY2NjY2dnZ2dnZ2dna2tra2tra2tra2tra29vb29vb29vb29vb29vb29vb29vb2tra2tra2tra2tvb29vb29vb2tvb29vb29vb2tra2tra2tra2tra2tra2tra2tra2tra2tnZ2dndmlpYYW5ZYVdPV01QRUJETElNS0ZJRT5CRDk4ODY3OTc1Njk4PT1BPjo4OT4+PD9APzw1Njc2PD4/PjtAQEA/Pj4/Pjs/PkFCRkdCQENIkeLb29zc3Nzc3d3d3d3d3d3d3d7e3t7e3t7f39/U09PT09PT09PT09LS0tLTz6h+kayPko6MhoCIiYSQo8rU09PT09PU1NTU1dXV1dXV1dXV1dXV1dbW1tbW1tbW1tbW1tbW19fX19fX19fX2NjY2NjY2dnZ2dnZ2dnZ2dnZ2dnZ2dnY2NjY2NjY19jY2NjY2NjY2NjY2NjX19fX19fX19fX19fY2NjY2NjY2NjY2NnZ2dnZ2dna2tra2tra2tra2tra29vb29vb29vb29vb29vb29vb29vb29ra2tra2tra2tvb29vb29vb29vb29vb29vb29va2tra2tra2tra2tra29vb29ra2tra2tra2tna3JJaWWNuWlpSVV5QTDxAR05IUklIRT47SEY4OTc1Nzg3NTg5ODs+Pj07ODlBPj1AP0E+NzU5Njs+QUI/P0BAQkI/Pj8+QUBEQUZIQj9FSozi3Nzc3Nzc3d3d3d3d3d3e3t7e3t7f39/f39/f1NTU09PT09PT09PT09PWtaWaiIuQhYCFi4iBg4qLf4bC1tTU1NTU1NTV1dXV1dXV1dXV1dXW1tbW1tbW1tbX19fX19fX19fX2NjY2NjY2NjY2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2djY2NjY2NjY2NjY2NjY2NjY2NjY2NjX19fX19fX19fY2NjY2NjY2NjY2dnZ2dna2dra2tra2tra2tra2tra2tvb29vb29vb29vb29vb29vb29vb29vb29ra2tra2trb29vb29vb29vb29vb29vb29vb29vb2tra2tra2tra29vb29vb29vb29vb2tra29uIWltnalxYTFpfVkg6TEhMSkpDRUZDQExINzo3Njc4ODU4Nzg5PDw7Ozk4QD89Pj8/PDY3PDQ3P0JCQUBAPz8/QT09P0A+QEBGRT09REuI4tzc3Nzd3d3d3d7e3t7e3t7e3t/f39/f39/f39TU1NTU1NPT09PT09PUxZKCg4WGfYGCfXx5foGCg36k29bU1NTU1NTV1dXV1dXV1tbV1tbW1tbW1tfX19fX19fX19fX19fX19jY2NjY2NjZ2dnZ2dnZ2dna2tnZ2dnZ2dnZ2dnY2NnY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjX19fX19fY2NjY2NjY2NjY2dnZ2dna2tra2tra2tra2tra29vb29vb29vb29vc3Nzc3Nvb29vb29vb29vb29vb2tra2tra29vb29zb29zb29vb29vb29vb29vb29vb29va2tvb29vb29vb29vb29vb29vb2tvZgFpebWhaU0ldW1hKRE1ISlNMR0ZBQD9KQjg7NjY5OTc1ODY4Ozo7Ojw5OD09O0A9Ozo2NTw3Oz1CQEFBPD49QEE9PEA/Pz5CREU+PERLg+Lc3d3d3d3d3t7e3t7e3t7f39/f39/f39/f39/V1dTU1NTU1NPT09PT2LKEkKh9g3l2hIh/e3d5gn5+i67A1dTU1NXV1dXV1tbW1tbW1tbW1tbW1tfX19fX19fY2NjY2NjY2NjY2NjY2NjZ2dnZ2dnZ2dna2trZ2dnZ2dnZ2dnY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2dnZ2dnZ2tra2tra2trb2tra2tvb29vb29vb29vc3Nzc3Nzc29vb29vb29vb29vb29va2trb29vb29zc3Nzc3Nvb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vc1nlcWmxmWFJPYFFSQUhHSkZYTEZAQENDSz87Ozc4ODc2NTc2ODo5PDw6PTs/PTs9Pjw7ODg8OT0/QkFCQzw8P0FCPj1BQkNCREVDQDtDTH3h3d3d3d3e3t7e3t7e39/f39/f39/f39/g4ODg1dXV1NXU1NTU1NPU0ruen3WKeXuIgICChYGDcnOAhYOMrNfV1NXV1dXW1tbW1tbW1tbW1tbW19fX19fX2NjY2NjY2NjY2NjZ2dnZ2dnZ2dnY2NnZ2dna2tra2trZ2dnZ2dnZ2djY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2dnZ2dna2tra2tra29vb29ra2trb3Nzc3Nzc29zc3Nzc3Nzc3Nzb29vb29vb29vb29rb29vb29vb29zc3Nzc3Nzc3Nvb29zc3Nzc3Nvb29vb29vb29vb29vc3Nzc3Nzc3Nvb29vb3dByXV9wZVdLUGNPS0JHQ0pIS0ZBPEE9SFBBOjo3Nzg3Njc4Nzw6OD09PD47QD88Pz07Ojs5Ojk8QEJAQkNAPUFAPz1AQkNDQUBAP0A7RU144N3d3d7e3t/f39/f39/f39/f3+Dg4ODg4ODg4NXV1dXV1dXV1NXU18h4i4V8goh6g4SBfoKCc2l0hYuGkJ3U1tXU1dbW1tbW1tbW1tbW19fX19fX19jY2NjY2NjY2NnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dra2tra2tra2dnZ2dnZ2dnY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2dnZ2dna2tra2tra2tra2tvb2tvb3Nzc3Nzc3Nvc3Nzc3Nzc3Nzc29zb29vb29vb29vb29vb29vb29vc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc29vb297KalxjcWVST1heSz9HTElPS0VAPkFCP0lPPjk6NzY7NzY6Ozc7Ojg6PDw+Oz09Oz48Ojs4OTo4OUFCQkFAQDtAQj06PkFCQz8+PT4/PUZOdN/e3t7e3t7f39/f39/f4ODg4ODg4ODg4ODg4OHV1dXV1dXV1dXV1s6dhpl+f5OTin+CgXx9gnNxm4mAgoOJwNnat7TQ19bW1tbX19fX19fX19fX2NjY2NjY2NjY2NjZ2dnZ2dnZ2dnZ2tnZ2dnZ2dra2tra2tra2trZ2dnZ2dnZ2dnZ2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NnZ2dna2tra2tra2tra2tra29vb3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nvb29vb29vb29vb29vb29vc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3NvfwGNaW21gVlBTU0pETEhNSEk8PkFEQ0ZORDw8OTc5OjY4Ozk3PDk4OTw9OzlAPjpBPzw3NTc7ODpAQUVBPz45PUI/Oz1CQkI6Pj07PT5GTnHe3t7e3t/f39/f39/g4ODg4ODg4ODg4OHh4eHh1tbW1tbW1tbV1tjLioCHhYOXjHh7e3lvfYF1a3ebdHZ7eInHxpiMrdjZ19fX19fX19fY2NjY2NjY2NjY2NjY2NjY2dnZ2drZ2dna2tra2tra2tra2tra2tra2tra2dnZ2dnZ2dnZ2dnZ2dnZ2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NnZ2dnZ2dnZ2dna2tra2tra2tra2tra29vb3Nzc3dzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nvb29vb29zb29vb3Nzc3Nzc3Nzd3dzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3d3d3d3d3Nzc3Nzc4LdjV1lrYlJNVVFMSktGS0ZDQD5CQT9FTT4+PTg5OTo3OTo3NT03Nzo+PDs7Qjw5Pz05NjY4PTk6QEJGQD49PEBCREA9QD9DO0A9PD4/Rk9t3N/e3t/f3+Dg4ODg4ODg4ODg4OHh4eHh4eHh4dbW1tbW1tbW1tfVrYZ6d32rn3l4entzdH+Dfm9xe3l6c3t2k4qFgImkzdnY19fX2NjY2NjY2NjY2NjY2NjY2NjY2NnZ2dna2tna2tra2tra2tra2tra2tra2tra2tnZ2dnZ2dnZ2dnZ2dnZ2dnZ2djY2NjY2NjY2NjY2NjY2NjY2NjY2dnZ2dnZ2dnZ2dra2tra2tra2tra29vb29vc3Nzc3N3d3d3c3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc29vb29vc3Nzb3Nzc3Nzc3N3d3d3d3d3d3dzc3Nzc3Nzd3d3c3Nzc3Nzc3N3d3d3d3d3d3d3d3dzc3OGtYVtebGJSTVZMTUdLS0RGQkI7QT08RUxDQT44Ojk6Nzc5NjY6NTs+QDs9Oz89PD89Ojk5Ojw5PEVDRkA/PkBDQkQ9OT0/QT1CPz1APkdPadvf3t/f3+Dg4ODg4ODh4eHh4eHh4eHh4eHi4uLW1tbW1tbW1tfQmH+Qh4N9eoN2e3Vzenl6kKqmd3JyfoeHh4CAfoKEhJHJzNnX19jY2NjY2NjY2NjY2NjY2NjY2NnZ2dnZ2tra2tra2tra2tra29va2tra2tra2tra2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2djZ2dnZ2dnZ2djY2NnZ2dnZ2dnZ2dnZ2tra2tra2tra2tra29vb29vb3Nzc3N3d3d3d3d3d3d3d3d3d3d3c3Nzc3Nzc3Nzb29vb3Nzc3Nzc3Nzc3Nzd3d3d3d3d3d3d3dzc3N3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3NzhpV9UYm1iUE9TSUhHRkpJSUJBPkJCPEVFREA+ODo4Ozc3Ojc4ODY+Pz07PDk9PDo+PTs6Njc7NjpEQUY+Pz8/PkNBPzs9PT47REM/PjxIT2fZ4N/f3+Dg4ODg4eHh4eHh4eHh4eLi4uLi4uLi1tbW1tbW19jYyH52doN+fnR2eIaCenl1d5yhu6GEgoCAfoeKinx/gYaMnKjO2NjY2NjY2NjY2djY2NjZ2djY2NjY2dnZ2dra2tra2trb29rb29rb2tra2tra2tra2tnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dna2tra2tra2tra2tra2trb29vb29zc3Nzc3N3d3d3d3d3d3d3d3d3d3d3d3dzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3e3t7e3t7e3d3d3d3c35pbT2drXFBRUElDT0pLR0xHSkJAP0FHREBBPDg8ODg1ODk3Njc3QEA/Ozw5Pj04PTw8Ojc4PTk/RENGPkE/QkBDPzw6Pj0/PkVEPz07S1Fj1+Hf4ODg4ODh4eHh4eHh4uLi4uLi4uLi4uLj49bW1tbW19XB3LRueHJze3B6eXaFiIR7eH2AgZiljH98fnuRhZaLhoGDgY6Rvd3Z2NjY2NjZ2dnZ2dnZ2dnZ2dnY2dnZ2dna2tra2trb29va2tva2tra2trb29ra2tra2tnZ2dnZ2dnZ2dnZ2dna2trZ2dnZ2dra2tra2tnZ2dnZ2dna2tra2tra2tra2tra2tra2trb29vc3Nzc3Nzc3N3d3d3d3d3d3d3d3d3d3d3d3d3d3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3e3t7e3t7e3t7e3t7e3t7e3t3d3d6NWFdobllQUUtISlNJTUhNSUtBQz9DRkJBRDo6PDg2NDg4NzY2Nj8+Pjo8OTw7Oj09PDw4Ozw7RERERT4/PkI+Qj84PT8/Q0NCQEE+O0xUY9Xh3+Dg4OHh4eHh4eLi4uLi4uLi4uLi4uPj4+PW1tbW1teslLZ6eHJvd5V7dHuLgHh1bn6Fg3t/hYhyfH2bnI6JioJ+g32Hk5rH1NjY2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dna2tra2trb29vb29vb29vb2tra2tra2tra2tra2tnZ2dnZ2dnZ2dna2tra2tra2tra2tra2tra2tra2tra2tra2trb2tra2tra2tra2trb29vc3Nzc3Nzc3Nzd3d3d3d3d3d3d3d3d3d3d3d3d3d3c3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3N3d3d3d3d3d3d3d3d3d3d3d3d3e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3d7Zf1lgaGxcUUtHR09LTk5PTURGQkg/Q0hEREA6Ozs4NzU3Nzc4NThAPkA7PDk8Ozw+Ojk7OTk7OUZERUI8QD4/PEBDOz5AP0A/Qj8+OjtKVWPV4eDg4eHh4eHi4uLi4uLi4uLi4uPj4+Pj4+Pj1tbX19vKhYR3cXJubniVhHt4hH95dnB4c3eLkY6CdnN9ioaId3d1d4ODfIiIk8Pb2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dra2trb2tvb29vb29vb29vb29rb2tra2tra2tra2tra2tnZ2dnZ2dna2tra2tra2tra2trb2tra2tra2tra2tra2trb29vb29ra2trb29vb29vb3Nzc3Nzc3Nzd3d3d3d3d3d3d3d3d3d3d3d7e3d3d3d3c3Nzc3Nzc3Nzc3Nzc3Nzc3d3d3d3d3d3d3d3d3d3d3d3d3d7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7f0nVZaGlqVk5KSE1OR01EUElGSD9FPUZMREM+Ozs8OTc3OTY2OTU4Pj4/PTs8QDs9PDo3Ozc5OThHREVCPUE9Qj8+QDw/QUE/QEJAPjs8S1Ri1OLg4eHh4eLi4uLi4uLi4+Pj4+Pj4+Pj4+Pj49fX19fEknuJf29sbnV2foSBg4qGfnVybWVtiIaKjoR7c4OHint4e4OPj4GEioqxztrZ2dnZ2dnZ2dna2tra2tra2tra2trb29vb29zc3Nzb29vb29vb29va2tra2tra2tra2tra2tra2tra2tra2tra2tra2tvb29va2tra2tra2tvb2tvb29vb29vb29vb29vb29vb29zc3Nzc3Nzc3d3d3d3d3d3d3d3d3d3d3t7e3t3d3d3d3d3d3d3d3dzc3Nzc3Nzc3d3d3d3d3d3e3t7e3t7e3t7e3t7e3t7e3t7e3t7f39/f39/f39/f39/f3t7e4clsW2pqalNOR0dOT0VIRk1JSUA7RD5ISUA9PDo6Ojg2ODo3Nzk0OD08PT07ODw8PDw4Njc4OTo6RUJFQT9APEI/Q0M+PkNEQUBAP0A8PUtRYdPj4OHh4uLi4uLi4uPj4+Pj4+Pj4+Pj4+Pj5OTX19fZqXaFfnx3bHB3eXh8jH2KhYB3anN0d3p9bot7fnl6foR/gIGDfnh8foeGlrbT2tnZ2dra2tra2tra2tra2tra2tvb29vb3Nzc3Nzc3Nvb29vb29vb29ra2tra2tra2tra2tra2tra2tra2tra29ra29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb3Nzc3Nzc3Nzc3d3d3d3d3d3d3d3d3d3d3d7e3t7d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3t7e3t7e3t7e3t7e3t7e3t7e3t7e39/f39/f39/f39/f39/f39/e3uO9amFpa2lRTkZNTEtKWE1OR0FAQE9BQz9AOzw4OTk5Njg2NjY4NDs+PD07OTY6Ojk6OTU4OTg5OkJERj8+Pj5AQEBCPzxBQD88Pj9BOT5KT17S4+Hh4eLi4uLi4+Pj4+Pj4+Pj4+Pj4+Tk5OTk19fX2sqKhIB5c29tcXN1d4CUeHaAfHWHhXd1cnWgmXp7d3Z5doR0bWxue3iAmouTu9za2tra2tra2trb29vb29vb29vb29zc3Nzc3Nzc3Nzc3Nzc29vb29vb2tra2tra2tra2tra2tra2tra2tra29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vc3Nzc3Nzc3Nzc3d3d3d3d3d3d3d3d3d3d3d3e3t7e3t3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3t7e3t7e3t7e3t7e3t7e3t7e3t/f39/f39/f39/f39/f39/f39/f397js2lpbmloUFBPTExPUk9LU0Y/RURERD48PDg7ODc5OTU2ODc2NzM6Pjs+PTc6Pjk5OTk2Ojo4NzxDRUc/Pzs/PkA9PkE9Oz0+OUFAQDhBTlFc0OTh4eLi4uLj4+Pj4+Pj4+Pj4+Pk5OTk5OTk5NjY2NjauY6AenZ1bmpveHCBfWt0cnZ3hIV5h4d5lY55eXp1d3pza298gHx2fYh8gLLe2tra2tvb29vb29vb29vc3Nzc3Nzc3Nzc3dzc3Nzc3Nzc3Nzb29vb29rb29vb29ra2tra2tra2tra29va29vb29vb29vb29zc3Nzb29vb29vb29vb29vc3Nvb3Nzc3Nzc3Nzc3Nzc3Nzc3d3d3d3d3t7e3t7e3d7e3t3d3t7e3t7e3t7d3d3d3d3d3d3d3d3d3d3d3d3d3t7e3t7e3t7e3t7f39/f39/f39/f39/f39/f39/f4ODg4ODg4N/f39/f4qpqa2hrZFNQT0ZQVFJOSFJLPkREQ0I7Ozk6Ojg2Nzg1NjY4Nzg0Oz88Pz05PDw3Ozo6Nzo6Nzo9Q0JDPUE+Pzw5PT5BQDs8PDtFQD47Q05TXNDk4eLi4uLj4+Pj4+Pj4+Pj5OTk5OTk5OTk5OTY2NjZ1p5vdntveHh2cG50d3BwdHBzb36Jc3qGhY2EenNtcoB6hn1vg5OBdnx9g4a13drb29vc29vc3Nzc3Nzc3Nzc3Nzc3Nzc3d3d3Nzc3Nzc3Nzc3Nzb29vb29vb29vb29ra2tra2tvb29vb29vb3Nzc3Nzc3Nzc3Nzc3Nzc3Nvb29vb29vc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzd3d3d3d3d3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3d3d3d3d3d7e3t7e3t7e3t7e3t7f39/f39/f39/f39/f39/f39/g4ODg4ODg4ODg4ODg4N/f3+KgbWhma2ZVVlJHUFFOS0xMRUJIRUc9OD08Ojo3Nzg2Nzc2NTY3NDg+PD09Ojg6OD46Ozc4Nzc6Oj5DRDtDQj49OD1AQUM/Pjw+RTw+PUJNUF/S4+Hi4uLj4+Pj4+Pj4+Pk5OTk5OTk5OTk5OTk2NjY3MB2doCCfnp4eHBsdXlya399bHNvdGdoaYB/aWh4c2d+iYl4cIKGe3d9foWKvd3b3Nzc3Nzc3Nzc3Nzc3Nzc3d3c3Nzc3N3d3dzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nvb29vb29vb29vb3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzd3d3d3d3d3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7f39/f39/f39/f39/f39/f4ODg4ODg4ODg4ODg4ODg4ODg4ODflGttZm5mU1NJUFlUTEhGTkZGRUJGPTs+PDs5Nzc4NTc5NjQ1NzU4PDs9Pjo6OztAOTs7ODc6OTlAQkE8QUE/Pzk/QEJFQ0FAQEM7Oz1ES01g1uTi4uLi4+Pj4+Pj4+Pk5OTk5OTk5OTk5OTk5NnZ2tmYc3uqhJaCcnR1dn14aGx8d2h4d25rcHR5gIN2dHyBhIJ9c3CAin94gn95g8je3Nzc3Nzc3Nzc3Nzd3d3d3d3d3d3d3d3d3N3d3dzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nvb29zc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3N3d3d3d3d3d3d3d3d3d3d3d3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e39/f39/f39/f4N/f39/f3+Dg4ODg4ODg4ODg4ODg4ODg4ODg4ODh24tubWdzY1lRTVVbV0hDSUZOS0dCRD8/Qjo7OjY2NzU2NzY0ODc2Ozw7Pj86PDk8Qjg3OTo6Ojk6QUFCQUJDQEE+PT9CQ0NEQUJGOTg9REpOYtjk4uLi4+Pj4+Pj5OTk5OTk5OTk5OTk5OTk5OXZ2drcqHGCtXiRfnNsem6EgXaCfWtoan+DeHZ8dX2FhXRmcHl9d316gIqFe318foC03tzc3Nzc3N3d3d3d3d3d3d3d3d3d3d3d3dzd3d3d3dzc3N3c3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzd3Nzd3d3d3d3d3Nzc3Nzc3Nzc3Nzc3N3d3d3d3d3d3d3d3d3d3d3d3d3d3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e397e3t7e39/f39/f39/f39/g4ODg4ODg4ODg4ODg4ODg4ODg4ODg4eDg4ODg4ODg4tiFb3FrdWFWT1VVXE9ETUY+SkdKRUQ8P0I6PDk4Njg0NTY3NDc2NDk7Ozw7OD47PEE4ODo9OD04Oj09QEBAP0FCP0A+QENCQ0FBRTc2O0RMTmPa5OLi4+Pj4+Pj5OTk5OTk5OTk5OTk5OTk5OXl29ra3Z5sbnNxhY1ybXBuf391hH5rcnZ2enN4gXhzb3VwbWt2fHmFiIB/f392coODsd/c3Nzc3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3Nzd3d3c3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3N3d3d3d3d3d3d3d3d3d3d3d3d3c3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e39/f39/f39/f39/f39/f39/f39/f39/f39/f4ODg4ODg4ODg4ODg4ODg4ODg4OHh4eDg4eHh4eHh4eHh4OLXhW1xb3ZeUldTWlpRSkhDQFFAQkQ8OT9BOjw5NzU3NDU2NjQ3NTY9PDo9PTk+OjxAODo6PDY7OTs+PUJCQjtBQkBDQEBEREM8PUA3OjxFS01l3OPi4uPj4+Pj5OTk5OTk5OTk5OTk5OXl5eXl5dPOxsB+cWxveHt2b3VuanNzbZKGeG50dG5vdIZ/b2twboJ0bXZyfY2DdnF/d3mKgabf3Nzc3d3d3d3d3d3e3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3dzc3d3d3dzc3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3t7e3t7e3t7e3t7e3t/f3t7e3t7f39/f39/f39/f39/f39/f39/f39/f39/f39/f4ODg4ODg4ODg4ODg4ODg4ODg4ODg4eHh4eHh4eHh4eHh4eHh4eHi1oZucG1xYFJZUFdfWUpMTElSP0Q9OTtCRjs6OTc0NTY1NzU0NjY2Pj07Pz45PTk7Pjg9Ozo0ODtAQENCQ0FCRkE/Q0BBQkREOz0+OTs8QkxNZODl4+Pk5OTj4+Tk5OTk5OTk5OTk5eXl5eXl5eW5t7Woc3JscHd6dHd4bXFydXd/hHRyc2xsa3F8bnBudGuBf3GAd32Eg355gHNygYqg2d3c3d3d3d3d3d7e3t3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3e3t7e3t7e3t7d3d3d3t7e3t7e3t7e3t7f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f4ODg4ODg4ODg4ODg4ODg4ODg4OHh4eHh4eHh4eHh4eHh4eHh4eHh49WHcWxqbF5YWlVXYFZWUE9QTD1BOjs8RkE4Ojg3MzY1Njk2NTg1Nz89Oz8+OT04Ozw5PTs7NTo9Q0JCPENDREREQUE/PkJDQzw9Pjg5PENLS2PN0dnh1sjY4+Tk5OTk5OTk5OTk5eXl5eXl5eXltbW2q3J5cm59f3Z1d2hqaGlwb3Zta2tnZWZxdG15gG5teXd2iHhxa2podXV5dHV/wd/c3d3d3d3d3d3e3t7e3d3d3d7d3d3d3d3d3d3d3t7e3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3e3t7e3t7e3t3d3d3d3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f4ODg39/g4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4OHh4eHh4eHh4eHh4eHh4eHi4uHh4ePVhnFwY2lhV1NZV19MUk9STUtAPjg5O0E+ODc5NjQ3Njc6NjY2NDk+Pzo8Pzo/OTo6Nzo9PDk5PEFBPTtBQ0VDRkA+Pj5BRUQ+QEE3OD5GSEpesrW4wbm1u8jg5eXl5OTl5OXl5+fn5+fm5ebm5ra2tbWOfX5weoR1cnZnYmNlbGtyb2ZpbHZtd4Z9hXlsbHd4a3ZwfH14c3V5fHd2h7ng3d3d3d3d3d7e3t7e3t7d3t7e3t7d3d3d3d3d3t7e3t7d3t7e3t7e3t3d3d3d3d3d3d7e3t7e3t7e3t7d3d3d3d3d3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4OHh4eHh4eHh4eLi4uLi4uLi4uLi4eHj1Yd1bl5uY1pUU1hXS1NLSk1SR0E4Ozs+PDk4NzU2NTY2OTY4NjY5Pzw6PT07Pzo7Ozk8PDs5Oj4+Pjs8PUFEQkNBQEBBP0JDPDw9Nzs+REVKXrG1tLW2t7e2y9rJ3uXl3eDi3tXU1tPU4OPg39+2treuh3t/bnmNenJ1bWNobGxtaXR4enF5enqIh4N6aWh9cWRvcXyGgX55e318e4an2t7d3d3d3d7e3t7e3t7e3t7e3t7e3d3d3d3d3t7e3t7e3t7e3t7e3t7e3t3e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t/f39/e3t7e3t7f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4OHh4eHh4eHh4eLi4uLi4uLi4uLi4uHh49aGdmxhb19dV1lcWlJQSEpXTEVHPUA9Ozs9OTY0NjU1NTg2NzY3OD87OT09PDw5OTw6Pjw6OTg+Qjs7Pj5AREBDRUFAQD0/QDw9PTU5PEJHRl2xtbW2uLm5ubq9uMPT0r3BwcC6u7y6u8TMxb/Dt7e3hGl1gX1ndYd5Z3Vxa2t5eHB3fH15bWl3e3h3bml1j4FwbHl4d3d9gXuGgnmAoNze3d3d3t7e3t7e3t7e3t7e3t7e3t3d3d3d3d7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t/f39/f3t7e3t/f39/f39/f39/f39/f39/f39/f39/f39/f39/f4ODg4ODg39/f39/f39/f3+Dg4N/f4ODg4ODg4ODg4ODg4ODg4ODg4ODh4OHh4eHh4eHh4eHh4eHh4eHh4uLi4uLi4uLi4uLi4uLi4ePXhXJrZ3RhW1hYX15TVVVRVUpMRj9JRDs5PTY2NDc3NTc4Nzc3ODk8PDo+PDg8Oj0+OTs8OTs5P0E8PT9DP0FARUJCQTw9Q0A6Pjw1NDlER0dasbW1tre5ubm5ubm3ubm4uLm5urq6urm5urm6u7e3uX9ucHN6b3B/eXNuc3Vsc3Z4cXFwb2tvcX6Bc2mHhIF9dHOHdW11hYmBgHJ2hafd3d3d3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7f39/f3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f4ODg4ODg4ODg39/f3+Dg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4eDg4eHh4eHh4eHh4eHh4eHh4eHh4eHh4uLi4uLi4uLi4uLi4uLi4uHj14lxa2xyW1dXXWBUUVVUUFJPSkNATUE9Ozk2NTM0NjQ2ODc3Nzk6Pjs8Pjs5PDo8PDk8PTw7PT0+PUNEREBDQkE/QD48PkE8OD06NjY6QkpIWLG1tLa2uLm5uLi5uLe3uLi5urq5ubi4uLi6uru3uKx7cnhxf3ZzfnBsbXpyZ29sbW50cHt3d3Jyd3pvhpJ2f3x8enZ5fH9zfYdyda3T393d3d7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e39/f39/f39/f39/e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f4ODg4ODg4ODg4ODg4ODg4ODf3+Dg4ODg4ODg4ODg4ODg4ODg4eHh4eDg4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4uLi4uLi4uLi4uLi4uLi4uLi49eHb2pxalVWV2FbT1FSUE5XSURESUo/Ojk6NzUzNDk1NzY2Nzg4Ojw7PD46PDo6PTw5Ozw9Oz09PDs9REdEQ0E8PDw8Pj5AOzg8ODE1OkFGRVautbW1tre4uLm4uLi4uLe4ubq6uLi3t7i4ubq7t7mqcnB4d3x7e4J3aG5xam9qY2lyf21zcn54dHFsanaAeX2AgH91doB1a4qLgHaR1d/d3d7e39/f3t/f3t7e3t7e3t7e3t7e3t7e3t7e39/f39/f39/f39/f4N/e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t/f39/f39/f39/f39/f39/f39/f39/f3+Dg4ODg4ODf4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHi4uLi4uLi4uLi4uLi4uLi4uLi4uPYhm1sdGVWUFxnWE1YU1JRWUVDS1BOOzk4ODc1NTM5NTY2NzY4ODk+OT0+OTw5OTw7Njg5OTo8QEA9PkBGQEJCQDo+PEE9Pzs7OzYxNjxCR0RQqLa1tba2tre4t7i4uLi4uLm6ubi4t7e3t7e5ure2tIlyd3h9iXxwem99c2hqbGdnbHRscXd0cWx2c3Fxd3FyfHl4g3Z7d2mLkYp9kM7f3d7e3tvY2drZ297f39/e3+De39/f3Nvc3N3e3uDg3+Dg4ODf3t7e39jS397f397e3t/f3t7f3t/f3t7e3t7e3t7e3t7e3t/f39/f39/f39/f39/f39/f39/f4ODf4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODh4eHh4eHh4eHh4eHh4eHh4eLi4eLi4uLi4uLi4uLi4uLj4+Lj4+Li4uPj4+Pi4uLi4+Lk14NoZ3VkVlVkZVdKWllXW1Q9RU1LSD04NzU3NjQzOTQ0Nzc1Njc5PTo9Pjw9PDk7PDk5Oj45PD4/PkFBQ0FFRUQ+OzxBPjw5PDs3Mzc+REhFSqG2tbW1tbW2tre4uLi4t7e4uLi3tra2tra3uLm2traLfXpsbHp/cGx5dm5qaGdlcXp4b2lvb3B1c21zd4Fnb32CgYNyf3lqcHJ6f6ng393Zy8a/vL2/vsLN0tDW3tnc4NfQzcPCw8PH1dfT2dzX1NjX0MfExce9vM/Kz87Y3djO3N3c2t3T0dze39/e397e3t7e4N/f39/f39/f39/f39/f39/f4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4OHh4eLi4uLi4uLf4uPi4eLg4d7W29/Sw8rJx9Hb3OLk4eHg2dre1sbExcTN2trf5OHi4trX3st9aWZxYVleZWFNTFRLUlpMO0hNSEZBPTc2NjUzNDY2NDg3NjU2OTw7Pj46Pjk5PDk3OTs7Oj49PEBAQ0RCR0ZCQT08Q0A9OTw7Nzc3P0RGRkaZtrS1tbW2tra4uLi4uLi3uLi3s7W2t7a3t7i5tba3opdxb29waW50dnFmZWNrbmdvcm1mZ2tygWVvdnyAeGRzj39zaHFyaWVlbm+w39HFv7u5ubm5ubq6uru6vc3Gw8e/urq6uru7u8HCvcHFvby/vry7urq5ubq6ubm6w8XDucDDwby/ube/z8/U3tjc3t/g3tLa4N/f4ODg39/f39/f39/f3+Dg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODh4eDg4ODg4ODg4ODh4eHh4uLi4eDh4uLi4uHa2t3RwsPCu8XT1uDdydPDrrnAsaqrq6uwtLbJ0sXRxLG4v7Srq6usr7S0vMzE1c60tLureGxtbWBdYl9ZS1NVVFFQREBRTUhEPzo3ODU3MzE1NjQ5ODQ2Njo8Oz08ODw5Njo6ODg5NzU8PDw/QEFAQkRDQkE8PkI/Pz09PTc1OD5DRUNAj7a0tLW1t7i4uLi4uLm5uLe1sautr7Oxs7OztLS0tqaei2tue3ZxeXhnY2hfcXdha25vaG99b25ja2lseHdsa4Z+bHB6dm1scG95sca8uru7urm5ubq6urq6urq6urq6urq6urq7u7q7u7y7urq6ubq7u7q6urq6urq6ubi3t7i4t7e2tbW1tbi3u8e+w8XHzcS4wMnH0tzZ2d/e3uDf39/f4ODh4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODh3Nji4uLi4eHh4OHg3tfGxtHQztTe3tPO0t/SuLi8sq2trKysrrG+ua63rKipqamqq6urqqqqq6ysuKyqqqqrq6urra6urq6urryzrayrpHlub21fXl1dVE1SU1xUSkE/UElIPjg5NjgzNzMwNTczNzg1NzY2Ojw/PDg5Ozo6Ojg5OjY1OTs8Pj9EP0NFQkNCP0BAQT9APjw3ODc6QUVEP4W4tLS1tbe4uLm5uLi3t7SurKuqqq2urq6vsLGzs7WjcG5ucm1wg311aWFlaGZkY2Rxc21td25naW1tZXBzb29zcXN8h4F6dX11n7u6uru7urq5ubm6urq6urq6ubq6urq5uLm5ubm6urq6u7q5ubm5ubq6ubm6ubm4uLi3t7e4uLe3t7a2tbW2tra1tbW1tba1t7e3t7rBvrzGycrb3+Dg3tvd3d7h4tDW4uHg4ODg4ODg4ODg4ODg4OHg4OHi0768zNjd3OLg0dnbxL23sLCxsa+zu7uzsLS9s66urq2tra2sq6qqqqmpqKmpqampqqurqqqqqamoqampqampqaqqqqytrq6urq6urq6sraR4aWJxZmFZWlZRUk5cU0Y9QlJEQTc8OzY5NTY1NDU2NTg3NTY1Nzg7Pjw7OTk5Ojg3Nzk3Njg8Oz47RD8/Q0BBREE+P0M9Pjw+Ojo3Nz9DRj54srCztLW2t7i3trKurq2sq6uqqaqtraysrq+xs7S1t4xucnRqaIB5ZmpmZWxdaG5waGxxYmNmcoJ+dmhobGpueoaBhXx4cXF5gK+6ubq6urm5uLm5ubm5ubm5ubm5ubm4uLe3t7e3uLm5ubm5uLe3t7i5ubi4uLi3t7a2tre3t7e3tra2trW0tLW1tbW2trW1tre3t7e3t7e3tre4v8bP0MS+v8DE19e8ydra4OHg4ODh4eDg4ODh4eDb3t7Uzby3tre6wMDJxLfIvrKwsLCwr7Cvrq6ur7Cwr66urq6uraytrKurq6qpqampqampqampqKmpqKmpqampqKmpqKmpqqqrraytra2ur66trK2heWpkbWdiXFhRUFFLVEpCOklRP0E3PDk0OjU2NTQ1NTY4ODY4Njs6OTw9PTs6ODY2ODg6ODY3Pj09PT5BQUVCQkNBQUBBOj09Pz05Ojc9QUc8bKqmqKutsLGwrqupqKqrq6mpqamrrKytra2usLO0tbilgIdvaWdzdGZrcG1qZGxvcm5rbWNrcHyJhG5qbHx4Y3uKfnNqc25rcY+7ubm5ubm5ubi4ubm5ubm5ubq5uLi3t7e3t7e3t7i5ubi4uLe2tra3t7e3t7a2t7a2tra3tra2tbW1tba1tLS0tbW1tra2tra3t7e3t7i4uLe2t7a2uLm4uLe3uL6+uLq9vcfb4OHg2Nnd4eHg3dfKwcPCurm5uLe4uLi3tbS0tLKysbGxsLCvr6+vr6+vr6+vr66ura2srKyrq6yqqqmoqKmppqepqaehpaipqamoop+hoZyip6inqausrK2ur7Cwrq2unXhwbGphY2BZUU1RTFJGQzlNUEU+ODs3Mjc5Njc0NDM1Nzg3OTc7Ojo9PTw6Ojk3NDo5ODY1OD8/QEI9RENDQ0FDQEJBQDtAP0A/PDw6O0NIPWOopaWlpqioqKenp6ipqqmoqKipqqqsra6wsLCztLW1taWYdn5xZmt4cW9tZmVsaGNsZ2ZpaX11bWlvfXZ5hWZod294b3Fvcninu7m5ubm5ubm4uLm6ubm5ubm5ubi3t7W1tba2tre3t7e3t7a2tbW2tre2tbW1tra3t7e2tbS0tLS0tLS1tLS0tLW1tba2tra2t7e3t7e3t7a2tre2tre3uLe2t7i4t7i4uLi4wMXTyry8w83PyMC9urm5ubq6ubi4uLi4t7W0tLSzs7KysrGwr6+vr66urq+vr6+uraysrKurrKysq6ehoJ6gn5udoaGdlpmkpKaon5mZmZmanZ+gn56fpKqtrq+ura2srJl1cGlrY2FeXVVOU0tSREQ4TktHQTo4NTI2OTY1NDczNzc3ODk3OTo7PT0+ODg4NzU6OTk1OD9AQEFEPkZBQkNAQkNCQT88QEJCQD0+OjpERj5cpqWmpqampqanqKenqKioqKenqaurrKytra2ttLS0tbekc311bnONf3JmanFjaW1jaGZobG51aV9jZ3VzdnpuZ3Bwcn56cYihu7m5ubm6urq6urm2s7a1uLm2trW1tra1tbW1tbW3tra3tra2tbW2tbW1tbS0tLa2t7e3tbS0s7O0tLW1tLS0tbW1tra2tra2t7e3uLe3tra2trW2tbW2tra2tra2tra3tra3uLi3uri4uLi3uLi5ubm5urq6urm4t7e3t7W1tLS0s7OysrKxsbCwr66urq6urq+vra2srKuppaSmpqScmZubmpmampmXl5eXl5aZm5iZmJmZm52en5+dnJ6gpKWko6OioqKQdG5jcGFeXltUU1RIVEo/PFFCRkM7ODYzNzo1NTQ4Mzg5OTc4OTc7OTs9Ozc6NzU2OTk4NTg+Pz9ART5CPz9DPzxBQUI/PT9EQT8+PTk9Q0Y/VaSlpqanqKeoqamop6ioqKioqKiqrKuqqaipq7W1tba5o3eKcXKHhnd0cGh5a2JjYWVsaW5zal9jZWNjZWprYmRqbHaXjX6ovbm3tre5u7u6uLWxrKurqq6wrKyrq62tq6uvsLGvr7CytbW2t7W1trW1tbW1tbW2trSvr7O0tLSvra6vsrW0tbW1tbW2t7e3t7e3t7e3t7e3t7Owsra1tLa2tre3tra2tbW1tra3t7e5uLi4t7e3uLi4ubq6urq5uLi3t7e1tbS0tLS0tLS0s7OysbCvr6+vr66vr62oo6KgnJqampqZmZqbm5qampqbmpmZmZiXl5aYmZmZmpycnZ+foJ+goKChoaCgoJ+fi3RuaXRdYGZeUlRLRFRJPUVTSEVCOzo0NDY5NDQ1NzM4ODg3ODk5Ojs7Pz04OjkzNTg5NjM5PT5AP0A6QEJCQkA/QEJCPz0+QUFCPz06PkVDQFGjpqWlp6inqauqqKaoqKipp6ioqKinp6ioqaq1tbe3t7KZtH99kIx1Z2lqbGZjYGNoZW94cGlicXx5cGpmZmRma3NqhYystrKwra2ttLeysLCtrKuqqaiop6ipqampqKinqKipqaeoqqurra2sqqytraysrq6traunpaSnqqyopKOkpamwsbGztbW2t7i3t7W1tre4t7e3t7Kppaasq6ivtLa1s7W3t7a1tbW2tra3t7e3t7a2t7e3t7m6urq5uLi3t7Wxs7S0tLKxsK6sq6yurrCxsK2rqqmqqKijnJqZmJmYmJiYmZmZmZmZmpqZm5ubnJybmZeYmpqcnJydnJ2foKGhoqKioKGgoKCfnop1amtuWVxhVktPREdVRz5PV0hEPTw4MzQ0ODQ1NDgyODk4ODk6Ojw5OUA8Njk6MzY3OTE0PD8/QEBBOkNGRUJBREJDQTo7P0FCQz9APUBEQ0BPo6empaemqKqqqqakpqenqKioqKimpqaoq6uttba3t7e4rbJ1cHuDdmBiaWtiZWZhZGdmfYh5bHKAfXFvcXhjbW5xZo+srKurq6ysra6urK2trKyqp6WmpaWlpqioqKiopaeoqKioqKeoqampp6Wko6KioqOioKKioaKhoKChoaKjpKOjpaWlqLC0s7OzsKuqqaqztLa3trGopaOioaGipKiqqairs7Sxrq6xs7W2tra3uLi3t7e3t7e3t7a2uLe0sa6ppqerrKmnpqWkpKSkpKWoqaajoJ+enZycm5uampmZmJeXmZmZmJiZmpqampqampqbm5mYmpydnZ2dnZucoKGgoaOjoqCgoKCfnp2FdGtsaFdYU0pHTUVITUdAU1dGRz09OTM2Mzc0NTU3Mzg6Ojo6OTw9OjpBPDY9ODM3ODgzNztAPz9AQDpCRUNAQkRDQT87PEBDQkNBQDxBQ0A9TqKnpqanp6mqq6mkpaWlpaaoqKippqanqKmpqrW2tre3t7izc2h7c2JnamtpaWJhZGloXV1tfHJma3J/fHR8bm1zc36gqamrq6uqq62trKusq6mpqKWjpKampqWmp6eqqaamp6enqKinp6iop6WjpKKhoaGhn56en5+fn56foKGho6Wko6OkpKSmp6enpqWkpaampqeqraumpKKhoaChpKWlpaenpaeoqKalpaivtLa3trW1tra1tbOwrKupqa6rqKWlpqampaSkpaWlpqWkpKSkpaKhoaGgnp2bm5ucm5qamZiXmJiYmJiZmpmZmZmYmZmZmZqZmZydnJycnJybnJ+fn6ChoaKgoKCfnZ2cgHNrbmReU0pITUZETEtFRFFTQ0c9PDgzNjI4NDY0NjQ4OTg6Ozk7Pjw5PTs5PTczNTk2NTY8QD0/QD88P0JDPkJCQj89Pj5CQ0FFQD86PkVAO0+jpqWkpqeoqaelpKWlpKWnp6eoqKanp6alpqa1tba2trW2uYptcW1vfHxxZ2pmYGFsYFROW2hqbm9tgYJ9cWdxdn6aqKeoqqmpqqurrKqqqqimpaWkoqOlpqalpaWmqaqppqWjpKWmpqSjo6KioqKgoJ+fnp6cnJycnJ2dnJ2en6CioaKjo6KhoqKkpaSioqOjpKSjpKSko6Ggn6GipKanp6ipqaelpaSipKSlqK2wsKyrqqusqqmnpaWmpaWlpaalpqioqailpaWkpKSlpKOjpKOioaGhoqKgnp2cnJubm5qZmJiYmJmam5mXl5eWlpeXmJiZmpqcm5qampubm5ucnJ6goKGgnp6enpycm356bnJiXlNNSlBFRk5NQkBPRT5JOz01MzYzODM2Njc1Ojs4OTs5Oj49Ozo5Oj43NjY5NjU2PkI+PkE/PT5DQT5DQ0BAO0BAQkJCRUA+Oz5FPzxQoKSjpKOjo6SkoqSlpaSlpqamp6empqalpqaltLW1tbS0tbiBaHx9ZXOCemxwdWFfY1ROT1FbaGxpbGxxbW5xbnScoqSnqKioqauqqqqqqaempaSjo6OjpKSlpqalp6ytqaShnp2eo6Shnp6foKCenJ2dnJycmpqam5ucnJubm5ydnp6foKChoJ+goaOioKGjpKSjoqSlpaWkop+go6SkpKapqainpaGdnJ+jpaipqainqKioqaempaWkpKSlpqampqampqenpaWko6Ojo6KioqGhoqKhoqOkop+enZ2cmpubmpqZmJeXmJaWlZSUlJWVl5iYmpubnJuampqam5ucm5ucnp+fnpucnJyam5p/fnF0YFtUTUdNSEZMSj8/TkM8QDs8NDM4Mzc0NzY3ODs9ODo6OTk7PTs7ODk9Nzc4OTU4OD9APT9BPjs9RD89REA/PzpAQUE/QUVAPjw8Qz88Tp2ioaKioKCipaSkpKWlpqenp6empqampaampbW1tbS0tLS3jHalsXdmc3Jvc2xjZGlYT1JRT09dgG1kYFptkZGSoqKjpaampqenqKiop6alpaSjoqGhoaKjpaempqesrKemoJ2cm6Ghnpuamp2cmZiam5qampmZmZubm5uampqampucnZ6goaCfnp+hoJ6foqOko6Omp6inqKWioKGhoaGkpaWlpKCcmZmbnqOmpqampqanpqempaOlpKWlpqiop6enpaWlpaWkpKOjo6KhoqKioqKhoaKjo6Kgn56enZybnJubmZaUlJSTk5OTk5SUlJWWl5qam5ubm5qZmZqanJ2dnZ2dnZuampqamZqXf3dvc11aTkhKTkdFRklERU5APD09PDQ1OzQ2NDY1Njc5Ozg5OTg5OTw7PDc6Ozc4ODg1ODg/Qj9BQTw+P0A8PEJAQT49QT4/Pz1CQUA6OkA8PE+doqGfoJ+dn6OkpKSlpqeoqKenp6ampqampqW1tLS0tLS0tbSXtqd1Znh2Y2xjY2VjW1JTU1JNXqCMeFhodpajnp6hoaOjo6OjpKSlpqalpKSioaGko6OjoqOlpqWmpqenpp+bmpuioJmWlpWam5mXl5iYmpqYmJqampqbm5qZmZmenZ2goqOjo6KkpKWinqGhoaKjpaampaSjoaCgn5+hoZ+goJ2amJeZmpygpKOjpKWmp6alpaOjpKSkpKWnp6ampqampaWmpKOjo6SjoqKjpKGfoKGhoKGgoaCfn56dnZyamJeVk5KSkpKSkpOTkpOUlZaZmpqbm5qampqbnZ6enp2cnJybm5qamZmZlH10bHReWk9IRUdGQkVORT9GOzo+Pzs0Njo2OTM2NDY4ODo4OTc4ODo8Ozw5Ozs6OjY3ODk5Pj9APjw9QD5AOjlAQT89QT8/QUE+QUE/Ojk9PjpQnaCfnZucnJufoqOlpaWlp6iop6ampqanpqantLS0tLOysrGwsK2rkHiGj36bmn93Yl1TUlFRTGKgootaiKCgn52YmZycnZ2eoaGgpKenpqWkoqGjp6alpaKipaampaanpqagm5mboaCXk5OSl5qcmpeXl5iampmampqam5qYmJmaoKCgoKGfoaKipKamop6gn5+goaOko6Khn56enpyanZuZmpqZmJeZnqChoaKioqKkpaWmpKSkpKKioqKkpaWlpaWlpaalpaOko6KioqGgoKGgnp+fn5+fnp+foJ+cm5qZl5WUlJSTkZCRkpKSkpKSk5SVl5iZmpmZmpqam5+fnp2cnJycmpmZmpiXl5F8cmdxXl1QRj9BRD9KT0JCRjhDRT4+OTg7Nzc0ODQ1OTo6Ozk3OTo8Ozo8PT48PDo2NzY5OD4/QT47Pz49PDg6PkFAQUI/P0FCQERBPjo4PkE8U5ycm5uampycnaGio6KjoqSmp6alpaampqSjo7KysK2rp6amp6alpqiln6iop6qnoXmEXFFST0xcnKCAYpmgnp2clZOVlpeZmp2dnqGmpqampKOioqanp6ajpaampaWmp6amop2cnqGfl5GRkJSXm52YlpaWmJuZmpqampqZl5iam6Ghn56fnpybnJ6goJ6dn56fn6Cio6SjoqCfnp2ZlpeXl5iYmZubnqKioqKioqGio6WlpKOio6SioaGhoqOkpKSko6SkpKSioqKhoqGgn5+gnp2enp2dnZ2dnp6em5mYl5WTk5SUk5KQj5GSkZKSkZKTlJaXl5iYmZqampyenZ2dnJubmpiYmpmXlZaNempmamBiTkY+P0A9SkVAQ0A7QEE8Ojs5Ojc2NTg0Njc4OT04ODs6Oz87Ojs8Ojk6Nzc2ODs7Oz08Ojo8PTw3Oz5DQkRDPz1BQ0BEQT88OkBCO1eZmJqamZmam5ucnp2foqKhoqSlpKSlpqSioJ6op6alpqWlpaemp6ampqakpaanqKehqXJOUU1KVJahenKanJyenJeVlJWWmJiXl5qeoqKhoqOkpKOjpaalpaanpqSlpqalpaOgoKGhn5mSkI+WmpmenJaXl5eZm5ycnJqamZeZm5uen52cnZyZmZqcnZydnp6fn5+hoaCgoaKgn56bl5WVlZeanZ6fn6GhoqKio6OhoaCgoJ2cnaGioqOkpKOioaSlpKOko6SjoqKioqKhoKGfn52cnZ2cnJ2dnJ2enpqXlpaVlJOTkpKSkpCRkpKSkpGSlJWWl5iYmJiam5ycnJycnJ2cm5mYmZiWlJWXi3hsY2RiZFFHQT1DO0tIRDo7Ozw+OTo6OTo3Mzc5NTo4ODg8OTg7OT09Ozo7Ojk8PDc2NDc/PDo9Ozw/Pjw7ODxBQ0FDQkI+P0JAQkFAOj9APztZmZiampqam5ubm5ydoKGhoaGhoqKioqKhn5+dpKWmpqenpaWmp6ampqWkpKalpKSkpaaGUFJQT0+PmHB6mpubnJ6cnJycm5ubmZiYm56dnp6foKOkoqGhoqKio6SkpaalpKOjoaGhnpyalZOUmJuam56amJiYmJqcnpyam5iWmZybnJycnJydmpqbnJ2dnp6dnp6fn52cnJyhoaCblpWVlZacoKGgn5+hoKKjoqOhnZuZlpaWlpicnqCip6ikoaCgoqOjoqKioKCgoJ+fn5+gnp2cm5ucnZydnJmanJuWk5KSkpKUk5KSkpKSkpOSkpKRkpSVlpeYmJiYmZqcm5qbm5ucnJqZmJiXlZWWl4d3ZGdoZGJNQ0U8RDlJSkU5Ojs9PTo6ODg6NjQ3OTU8OTY4OTc5PDs7PDo6PDs6PDw4Nzg3Pj07Pj46Qj86Ojo/QURCQ0FBQD9EQUFAPjpAPj06W5qYmZqbmpubm5uen6CgoaKioKCgn5+enp2dnKWkpaanpqWlpqakoqKio6Oko6Kjo6KnllRYVVJOZ21rgZ6am5udn6Cgn56enp6dnJ2dnJ6enp+goaCfn6CgoKGio6Ojo6OjoqGgnpuZmZiZmZmamZienpiYmZmam5qWlZeWlZicnJ2cm52dnpybnJ2cnZ6bmJqeoaGdm5udoKKhmpWVlpaZoKKgnZueoKGjop+em5eXlJKSlJeYmZ2goqenpaGgn56goaGioaCfnp2cnJubnJubmpqZmpydnJmXmZaVk5GQkJCPkZKSkpKSkZKTk5OTk5OTlJWWlpeXl5manJubnJucnJqamZeXlpaVlZSEcmZsYmRbREJMPT84RktCPEA+Pj05Ozk6PTg1ODg2Ozg1Njo4PDw7Ozw8Ozk8Oj09OTU4Nzw5PD88OkE/Ojo6QEBDQkRBQ0A/Q0FAPj08QD09Ol+al5mamJeYmpycn5+foaGhoJ+fn56foKCenZ2lpKSko6OioqOjoZ+foaGipKOio6SiradXXl1UV19ua42dmpqbnJ6dm5ucnZ+enZycnJydnZ+goKChoaGgoKGgoKGioaGioZ+enJqampqbnJqZmpuZnJ6ZlpaWl5eTjo6QlJabnJuam5udn52cnJycnJ6dlpSZnJ+in5ycnZ+hoJuXl5mZmpycnJubnZ6fnZqXlpaWlJOTlJiampqfoKGmpqWgn56fnqChoaCenJubnJybm5ybm5qZmJmZmZmXl5iVlJKQkJCQj5CSkpKSkZGTk5aYl5STkpSVlJWWlZaZmZmam52cnJyampmXlpaWlpaQgG9vZV5gV0BKSDg/N0lFP0VBPD07Ojo7Ozs3NTs4Njs3NDY6Oj47Oj0+Pj07Ozs+Ozo4Ojk5NkBBPTo8PTo7OT9BQ0JERUM+P0FBPz8+Pj89PDtgl5WXl5aVl5mbnqGhoKGioqCenp6enqCgn52bpaWjpKSioKCfoJ+dnZ+hoqOjo6OkobCjXWVkYGFua4GenJubm5ubmZianJ2enJubm5ycnJ6ipKGeoKGhoqKhoKCgoaGgn5+enJqZmpubm5ybmp2dm5manJiXlZWWkY6Nj5KYnZycm5ycnqCdnJucnJyempWVm56foZ+dnJyenp2cmpqampqampqbm5qXl5aTkpWVlpWTlZaam5qanZ6foqWjnp6fn5+en5+enZ6fnZycm5qcmpqbmpiZmJiYmJiYlZSTkZCRkJCQkZKTk5CRk5SYmZiVk5SVlZWWlZaXmZmXmZqenpyamJiXl5aWl5eYjX1ubV9lVlRFSzw3PjdSRUM+QkE4Ozw7OTg6ODY7Nzc6Njc5Oj0+Ojw8PT49PD06Pz06ODw9OTtAPj4/PT45OTs/QkNAQ0VDPT9DQj5AQD5APTw8YZWSlJWWlpeanJ6goKCgoaCgnp6enp6gn56em6WlpKOioJ+fnp2dm5mbnJydnp+gn56rmGNpbW5pZm2enZybm5ybmpmZmZqam5ucm5uam5ygo6SgnZ6en6CgoKCgn6ChoKCfnpuamZqam5ubm5ufnpyZmJqamJiYmJKOj5OXnJ2bnJ2cnJycnZycnp6dnpqVl5ygoaGfnp2eoJ+cnJuampqbmpqYmpmVk5OTkpOWl5eVlJiYmZucnJydoJ+gnp6enp+fn56en6KjpKKgnp6cm5qampuZmJmZmJeXlpWUlJORkZCQkZKTk5OSkpOUmJmYlpWUlZaWlpaWl5iYmJiXmZqamZeXl5aXlpeWl4l4dmddX1dURUU5OTs8WT5AOEI/OTs7Pjk4Ozg6Ozc5OjU4OTs9PDk9Oz0+PD0+Oz8/Ozk+PDw+Pz5AQUE9ODc7QkNFP0FFQz1AREJBQEQ7Oz47PGKWk5SUlpWUlpiYmZubnJycnZ2cnJ2en56dnJqkpKSkoJ+enpybm5qZmJiYmZucnZ6cpolla3R4bVuFop2dnJydnJqbmpqampydnZ2bmpuboKKinpucnZybnJ2enp2dnZ2fnpyampucnZycm5ycnp6cm5qanZqam5yVkZOXm52dnJ2fnZycnJycnZ6fnp+cl5idn6GhoJ6cn6CfnJubm5qbmpmZmZmZl5WWlZaYl5eXlpaYmZuenp2dn6GhoJ+fnp6fn5+dn5+hoqKhoZ+fn5yZm5qcnZuampmXlpaYl5eXlpWTkpGTlJSTlJSUlJaZmJaVlZeZmJeYl5eXl5eYl5iXl5eXlpaYl5eVl5eDeHZfW11eUT1GOjk4P1VDQTtDQzo8Pj86Ojk3Ozg4ODc0ODk8Ozw4Ozs8PTo9Pjo/QT06PTw+PkBAPUBBPjk2PERDRUBBRUU9PkVERD9COzo8OTpkl5SVlZaUlJSUlJWXmJiamZqcnJydnp6dnZybo6Oko6CenJuamZqZmJiYmZiam5ubm6WJa3F2em9lmp+enp2dnJybnZ6dnJ2enp2dnJydm5ygoJuampubmpudnJqampucnJuZmZycnJ2dnZ2dnZ2dnpybmp+fm5ydm5mZmZudnZ2dn52dn5+dnJydn5+fn5uanZ+goJ+dnJ6gnpubm5ubm5yampuamZudnJqZmJeYmJiYmp2foKCgoJ+hoaGgoJ+en5+fnp6foaKhoJ+enp+enJqam5ubmpqZlpaXmZmYmJiWlJOUlJWVk5OVlZSVlpWVlZSYmZuamZaWl5WWmJiWl5OUlJGRk4yRkJOWfXhqYWJiXFA8QDw2OENWSERCOjg7Oj47Nzc5Nj06OTk2NDc6Ozw9OTo6Oz87PT08QD47Oz46PT89PkBBP0A8NztBQ0U/P0REPj9EREM+Qj07PDs6Z5aTk5OTk5OTlJSVlpeWl5aWl5mbm5ybm5uamaOjoqCfnpuamJeYl5eXmJmYmZybm5qkgGpqb3lzcZegnp2dnJydnp6enp+enp2cnJydnp2bnJuampqam5ubmZiYmpqamZmZmJqdm5ydnZ2dnJ2cnZ2cm5qdn5ucnJubnJubnZ2dnJydnp2enZydnZ2cnJ2dm5uenp6dnZybnpubnJycnJydnJubmpmbmpmYmZmYmpmZmpyfn5+jpaKfoaKioaGfnqCgn5+fnqCioaGhn5+fn52ZmpudnZqZmJWWl5aVlZaTkpOUk5STkJCSk5GUkY+OkJGOlZabmJWYlJmXlJiRjJCPk5yTkoyFjIeDhndxZ2pkW1xRQT44NkJHYEJFR0A+Ozw7Ojg4NjU8ODo4MzQ6Njk9PTk5Ojw9Ozw6PD48Oj5AOj5APjw/QD8+PDg6Q0FEPz5CRD8+Q0VCPUJAPDw8OmeYk5KSk5OSk5SVlJWXl5aWlZaXmZmZmpqampqkoqCfn52bmpmYmJiXl5iZmJmcnZ2cqH1nZXN7enOJop+enp2dnp6enZ2enZ6enp2dnZ6cm5ybmpubm5ucm5iYmJmZmJiZmZmbnZycnZ6enp6enp6dnZybm52bnJybnJ2dnZ2dnJ2dnp+fn52cnZ2dm5qbnJmZnJ2dnZ2dm5uanJ2dnJycnp2dnZybmZeVlZeXmJqam5ubnZ6foqOhoKGhnJucm5ubnZqcmZycn6CfnZiZmZmUkpKUl5SPj4+OkYyNiYuQi4mLjpGRj4mQmJiQkoyNi5KQj5iYoqiqpqWlrKOmoZqep6eyqKKVo6Cfl39wcWlsXFtcTUY8NzdHR1g+SE5URjk+Ojg5ODc1PTk4NzMzOTY6Pjw6Nzo8Ozo6Ojo8PDs/PjtAQD47PT5BPDw2N0A+QkA+QUY+PEFEQT1DQj49PDlmmJSTk5OTkpOUlZOVl5iYmJaXl5iZmZqampqaoqGfnp2cm5mYmJiYmJiYmZmZm5ybnKx/am16f3lxh6Genp2cnZ6enp6enp6dnp2dnZ6enJubnJubm5ubm5uZmJiYmJiYmJmZnJ2dnJyenp6enp+fnp6dnp6dnJydnJ2dnZ6fnZ2fn56goJ+enZ2dnZybnJ2em5qbm52enZ6dm5ubnJ2cnp2cnZqYl5SRjo+QkJGVmJSWlJiZmpudmJuYlY2Mjo6TkpKRj4mQjpGRjo+Ki42NjYiIi4+Lg42NkY+MkI2Qk5WVnJihoJySn6SipKmam5eanKOprb3Bwbq8uL26ucC8ubq3uru7tL2zwbV/bnVmZ1peWUxJRTo7TElTPFZSSUM6QTo7Ozc3NTo6OjgyNTY4Oz08OTk7Ozw6Nzo4Ojw6PT85PD8+PDw9QTs5NTg8O0A/QT9EPTxBQkA8REM9PT06YZOTkZCUlJOTk5OTlJeYlpeZmJmYmZqbmpqamp+gnp+fnJqZmpqampmYl5iZmZmZmZmphXB1e4B3b4mhnp6enp6fn56en56fn56dnp6fnp2dnJ2cm5ubm5ubmpiYmJiZmZiam52cnJ2dnp2dnp6goJ+enZ6hoJ6dnp2enZ6fn56en6CenZ6enJydnZ2cm5qYnJuVmJqamJiYmJmSjJCXlKCXk4+MjYqKiImMiJORh5CPjYqKkJCLjoqMi4+IiImJjpGOjYaFiYaKhoWLiI+SkJCNkJKXlpKamJ2TlJ6kpqaqq7Gsr6+rpquqsbm5tbS0rqyvtMDIxcXBvsbDxMTDurW+t7a0s7C2tb6qcHRyXGZfXV1JRj8/RUtMVklcTEQ/PUI6Qzk5Nzc7OTk3MTc5ODo+ODg6PDw7OTc5Ojs9Oj4/OT5BPDs+PD46OTY5PDpBPkNBQT08QkBAPkJEPj8+OVyHhIOHi42KiYaFgYqMkZOVmJiHlZaWkpiampmenZ+gn52ampubm5ycm5iWmJmXl5ibqo56dXZ7f3mCoJ+fnp+goKCfn5+foKCfnp2dnp+enp2dnJqbm5ubm5uYmJiXl5iZm5ucnJydnp6enpybm52dnZycoaGfnZ6dnZ2dnp2dnJiWlpaYlZWSlpmWk5GKjI+PjI+NkIuLj4+WiYiEi5GZjn2Fi42PjYyHioyQm4yRj4+Lio6TjIyNjIiSi4yFiYyPhouIh42KhYyEj4qXkJOYmpWbnKOqoaKknKKrsbe0ubWxs62vsrKlp7O6sbq6vLa3tsDDw729vLa/urq8wbW4wL60r66mqa+3mm58Z1tjWl1fSEU+QUtJU1hZXkFGOTk9OUY/Pzo3Ozs7NjM6Nzo5Pjg6Ojw9OTk4Ozk7PDo+PTtAQDs8QjxAOjg0Nzw7Qj9BQj4+O0NEREBDQz0+PjlhmZWLkYWNj5aSiHl9e3+Fi4OKgoqJhmuAeJCLlpqRnZ2UlJGTlpeampiWk42Sk5KQm5uIdndzcX1/cpGgnZubm5yenZ2eoKGgm5uWlpucmpybnJuYmZqYmJmampqWi5CTlpmYlZiYlpucl5WSkY2SkZCUk5KXm5mYm5ePjpCLjo2Ch4uLi4qLiI2RjIeHhoqIiZGKh4yEhYqNi4qNhI+UkIyDkJOUmZWPi5STkZWRlpWOj5GMlI2Oj4qIj4ePhoeJiYmNiomJioWNh46JmJKUmpuXmKChp6Cko5qqqbO2sbWwqKmiqK6tn6qvsK21ubi8wr/BxLixtbCutrOwuL68ury+urOzp7G3wpB1gGNiXlpXUk1IRkVQSVlXX1tDUDpCQz1HRj84Nzo6NzU1OTc8OTw5ODo9Pjo6Nzs7Pjs7PTs9P0E7Pz48Pzo4NTM3OkFBQEI+PjpDREM/QUM7PT45Z6mloqKZn6CippeUiI2CiIJ1h4iKiIp7e3Z7enmPeoiSfn18en6CkYWBgH1zfH99fISHfnRweHZzfHaBj4iIiYeIioyMkZicl4iOhIuNi4iNkI+Pi5GPi4yOj5CQjouFhYeLjIyHiIuOi4eMhYaBjYuGiop/iYqGiJiRiIOIg4KFfIuLjIaJi4iKkIyIi42PjI+Wh4mLio6NjY2Wk5OdnJyalpycm56bmpuYnZeTkZWWkJKRi4+LlpSMjYqDi4SEiYyQkIqOio2LipGJjZOTk5SVk5KcmZ6Xn6CfpaKvsamupKSfmKStpqa4t6ysu729wsPAv7+vpa2wsLS3uLO0uLa0ta6stK+4tLaBeXpjZmBeVlBRQUVLT0lcXl9UR0dCS0xCREA9ODg7OTU3Nzk3Ozc9PDk9Pj05Ozg6O0A8Oj06PkJBOD88Oj84NjQyOTtCQD9CPj04QUI/PkBEO0A+N2CloJqXnaGaoaCPl5efl5WCjaCfo6GdmpKOjIxycXBvdnFucG1ucHZub29waHBxcHR+c3FycXd7cnl2d3Jyd3Z6e3l8fXt/iIGEi3+PkYaNi4uGiouLiYaEgYaCgIKJkYOAg4x/ho+LiYWAh32AgZKQhoSEho2DhIyPj4+IjY+Hi4iRkJWRjpCKk5eOj5WYp6SfnZWYlpaln5udq6aqt7W4srGnr6qnpqGfmp2WkpWVkYqPjImTjZuVjYuLhoaJjJWQkJCLmZKVlZSbkJiTlIyNkYyWl5WilZ6mqauno6OqsJucpp+mq6G0vb6zs7+5u7u6uby9rqiusa6wuLyztLGxqrCpqLGxsqild3J0X2hhYFRWUUlKSFZNXl5eVExKRVFKRUdDPTo5OTc0ODY4Mzg4PTo9PD47OTs4Ojs/PDw+OT9DPzg7Ojg8Nzc2Mzc5RT4/Qz89N0BAQT0/RDw+PThUj4yGh4eUjJWZl5yWmZaNlZyWlZydoKCdmpiWeHFubXJ4cXFsbnJwa3FvcG1yc3t1dnd5fnVxeHZ0d3tybn98gX15eH1/eYOGg4WCg5CLkIuLi46Pi4mJhYKBfX9zfYiAfpyQhIWFiYuPinp9fYaOjYqGjZSRi5CXj5SXkpihlp6XlZunpp+goKawq6GjpbW0sqqmqq+isba5vcK7ucO+vLi9uLWxrLCspZuSk5mfm5SPk5WOmp2doJqfn5edo6qsoZ+em62hp6qwqaampJiRkZWUo6SirKSss7Szs6i3tru4sLKvra2yt7a6srW6s7e5u7i8urayr6yxsbKztLOxsa2us7Gzs6yhl3Zxc19jXlJRVE1PSUdYT1pcZFROR1VPRURKRD44Ojg3NTg4ODU5Nzo6PTw/Ojg8ODk5PTs9PTpCPj84Ozo5Ojk4NjI1N0I+P0RAQDY+P0I/PEM8PT46Tn98go6MjJOTl5eaj5SWjZaRkZSXk5qanqGdnHJvcnFxcXFxcG5zcW91dHJxdneAdXd8eYV+d3t8eX1/fICJiYmDfXp/h4GIiYGAgIGGiIGGi4aIhYSIiImEgIJ/enx8fX6SkH+IeIGFi4qDhIWKj4yNkZmdlJSUoJqan6Ktsa2ppKWtr6ysrLWuvrmtrqm1sLexq7G2rK+9wsLAvrq8trKutraxtK66u7OurKepp6unoqmtoKmooq+wuLSxvLq6urK0ta+8tLezt7e7t7mtrbCprLW5sbeytLe2sLu7vLu6ury1vLi0wbWsqqqrtLG3uLm1trSzsKymrrCqq7Cxq6yusLKxtK6qo5N4dnJlZ1tMUlBGTUhTV1JlXmdUUExcUUhMUkNBOTk3OTU4ODY2Ozc5Ojw6Pjk4Ozo6Ojw8Pj08RD45Njs7ODg+OTUxNTZCRkREP0A3Pj5DPjpBP0BAO0t/gomXmJSdlpabmIuSlo6XkZGVl5SZl5+bmZx8dHV2dXl1c3RudnJzdHV2d319gX56gXyDfoJ/fYB/hIKFj52RiYF/go+Xjo6HgoCBiIuFfoqQi3+HjYyLioeSioeGjZGTkZGEh319g4iMjouOiomQj46PlJSYkZWbmp2dqK6yr6+1tLOtsrW4sLy1tbGqsKqztbS7t7SztrS1r7i4t62noqassLCvtre3vrW5vLOysa61u7C0r6+yu7axuMC9tLS0s7izvLq2tLrAvbm6ubq+ubm5vrWysa+yr6q1tLGzsbSzrri4tb+vpKaoo6ussa+zrq6wsKytq6qroqKmqKKnrauqpaynoqeYeHlxZmVZT09NSVJNV0xPX15cTlVUYlFEVE07Pzk8ODk1Nzc1Nzk1Ojo6OTs4Ojw8Oj08Pj4/P0I9ODY6Ojk6QDs1MjY2QUZDQz4/Nz49Q0I5P0I/PjtLjpGTmJmVmZGTopiTkpKLk4uOkI+Vl5ablZSbhoJ9enh2dHRzdH53end2gIKDhouMhISFioaQiYeRk5aRjZaalY+IjI+emJaVkpCTl5qamJCdoJ2Tl5qgmZ2bo6CVkJugpKOak42IiIuJkZGOkY6LmJqPj4yUmpecnJufnKSstLm6vK+2tLi0tLK3uLmzq6+qqKy1srK1rrGrrqa3s7OxpaGotbCvrayrtbqyu7q6tLK3ur67ubG4sLmtqLK4u66ttLS3tbu2trm5vLe0r7G0t7a5s7e1pq2pq6ior6yprq2up6KxtLG0q6aop6Cjq66oqq6orLKwr6+pqKGeoaGjpqOgopqlo56ol3J3bmdiVUtUT09KQ1BLX2JYWlFcU19MSFFJQUA5Ojg2Njc3NTg5NDs5Ozk8Nzs+Ojg8PD0/QkBBPTs2OTk5Oj87NjM3OD5GQkJAQjk+PUBDPkBGQj44R5OWkZWTkpSQkZ+ZnZmVkI+Sko6Mk5aWko6RlZGSkIaBeXJzdXuBhI6HhZGTkpicnJiVkJWYo5yaoaeqqZ+clpeVnaKioZyZnpmlqKyvramnqqmop6GlqKirqamvoZufoaOjoJqfoJyUjZiUmKCgoaSem5qkp6Spq66spaOoq6+xtK6qrK6zr6ystLO0ua6urayqrLKwsK2wqKqmsrS0uK6qtrqwr6qurLC3s7i0t7W0u7y4tbWxtauyrKiys7uvrbGytLa1sbG0s7OvrKuvs7a0sayutKqqpqWnrauoqKupqqifqbOwqqeppaOio7CtqaatpairrayppaSioKWipaOYmZyVnqKippdudWVnZFZPWEtLSktTVHBiWWRXX1tcUlpQTEM8ODk6Njk4NzQ3NzQ4Ojw6PDg6PTk3PDw7PkM/QT47OTo5Ojs+PTg0NThBREVEQkM5PjtAPkI/R0Q+N0KSm5SVlZaVj46Wl5qZlZGKk5SSjo+SkYqKiY2Ul5qTjYmCho6VkZSfmpuin5+jnqGhn5ijpKelpaapqa2rqaKmpKilpKGfnqOjra2srairrq6qqqukoaKlqaenqaijopybm6SgpaijoJidmZ+hoqmnoKKirqyrqqetrqilpKmpqammo6iqqaekp66wr7Ovq7Crqq+yr7Czua+rqLCxrrCyubO0r62vtbCss7GurLW1tLSzs7CvrKyqrKusr7G0s7CwrrCwsKyqrauqq6alrrCysKumqbCvqaOkqaunqKaopquwq6mvqaaoqaalo6iwraqpqKKpo6WnpKGhoKKloZ2el5aYlJugpKmUbnNeamlfVVpOUk5QT1JkXGRjW1xZXFBZT0tAPDs5Ojc6ODczNTMzODo9OTo4OTo5Oj08PEBEPkA9OTo8PDw+Oz45NTo8QkFFQUNBOT47P0BEQENCQDdAkZ6YlJeZlpGHi5SSl5GIg4mLk4+OkI2Hh4SFlZmWmJeZlpqeop2anKKkoaCdn5qfoKGgpqGgoKCjo6KlqKmrramqpqOmpaCloKaopqWnqKapqKOnppmcpKWioaChoaCcmJmfoKGkpKKenpagm5qioqChn6CiqKCcn6GloaCmo6KfpKGspp6foaGkrKqnrKivq6e0sa6ur7WyrKqwq6mtrbWwrq6srreup6yqpKivsq+sq7Kvqqqpq6utqa6urrGxraqtqaunp6uoqauinaapqKilqKisqKilpKWop6iopqmsr6+oq6mhoqKlo6Opq6ymqKWjqKKhoKSdnZ+hoZ2bnZ+amZWcnKOqlG9zZm5yZF1dUFVPV09eZGRsZ2JhWlpSVE9NQTo9Ojo4Ozk1MTYzMjg4Ozk5OTk7OTk8Oz0/Qz5APTk7Ojs8QD0+PDk5PEFBRUFGQTo9Oz9BQUJBRUI4PYqWlJOYmpaPiISNjpGSjIiIiI+JiZCRjoqKiJubmZygpaKlnqKjoZqeoZyanZ6bnKOop6ugoKOYoJ2XnKGjo6WjoqKkrKilqaCepqmnq6mkn6Kgoqahpq2mpp2fn5+fn5manJyhoKGkn6GbnZqcoJ6hn56eoKOZlpqYo6KipJ+ZnKGhoqCbmp6goaSgnaejqrGorqusqaSqqquorKalrKqws6+rq6mwq6appaWoq6ynpqevq6Wnq6upq6irqqqrrailqKOmpaesqayoopykoaOmo6qpqKano6SnqKanqKepqKupoaKoo5yepqWjqKino6WlpqmgpJ6inpeYnZ+doqKlnpiUlZ6go5d1d2t2d2FfXFVZUVVWW2NecmBoX2NTUVhUSD48PTg7OTo4NTM3MzM0Nzo4OT05Ozo5PDxBQEM9PT44Ozw9PEA/Qz86ODo+P0NAREE6Oz48QD9DQ0VDOTyCmJmenZ2alZKKiZGRl5GQh4SJgoGNj4+Sj42cnZ+hpKmlqaeorK2moqKfmKSmo6Stsa6yp6asm56em5qjp6Cfo5+foq+rqqyoqKuwqaipqKGfoKeprbCyr6yjoqahqaWepKOipqClpKKlo56doJ6fpaKinp+imJWemp6fpKGblZigoZ2enJudnZuZmZWen6Oonp2iqKGaoaOmoqSoqaqoq7CxqKWlp6eopKWpqaqnoqWmqKadnqWloqClpaOlpqCjpaOjpaelqamqpKekpqKmp6SrqaenpKGlqKynpqWlo6OopJWdo5+bnaCjqaeopqGjo6mooKiioJyVkZqfoKGmopuXkpCamqCVfHdvfXlmW1tfXlpcVlxoZG9jbWloYl5QUEA/Ozo4OTg8OzYzNDMzMzc5OTs8OTs7OT49QkBAPTs9ODw9QD08PENBPjo4PT9EP0M+Ojk/PEI/P0FEQjk6gJ6kp6Kem5+gmY+ZnaCWloqGj4iEi4qTl5SRo6Wnqq6trLOys7S4t62pqqevtLKxqq6usbKusa2lq7OssbGpq6+rq6y2sLSwq7GysaOfoqqpp663trS0trOvrKuuq7awqbKxra6npp6io6ObnZyXoqiloZ+eo5ueoZqWnaScm5aZoqefoJ+joJuUlpmWl5qfoJmVnqKZmJ2dpZ2gpKeqqaiqraylqaSlqaeqqaqsp6SkpKOimZmhnpqaoaCfpaWYnqSmpKqooqelpaGqp6mnp6ejqKWmpaGkqKesoqekoaalpaOVl52Ym5mVo6elpaSfnZ2lo6Kqo5+amZiWnJyaoaGakJOTl5ibjX93cnZ4aWJbX15cYllgZG5ta21hX2RgUE9BQDw7OTs4Ojk2MTQzNjQ3Nzc6PTo8Ozk9PUI/Pj89PDo/OTo7PD5CRUA9OTtAQT5DPDs5PzlAQEBAQkM7OXuao6OcoJ2dop2Zn6KioJibmJaYkpSQm5qWl7S0rrW4s7S4tre0uLm3tbm4ub28uKqLnLK4vLS9urW7uru4s7q/uLe5u7G3r6iusq2inJ+qsri8vL27ur+0r7GztbS3t6+1tLWysKikop+gl5Wal6SqpqahpKOkq6WlmKGko52goaKooaOgpaGck5mYmJmco56cmpudl5uZlqWam5+hqKmpqKuvr66pqKmrrKytq6irp6WjoJyfo6Ojn6Cipammmpyip6Spn6GjoqKgpaanpqSooJ+ipKGjoqiop6OloKGopqalo5mbmJuTj6GknqKfmJiVoJuhpaCfm5udnJuamZugmo2YmZiTkYaAdnh5eGNbUllUX19hbGh1a3BnaWliWVNMQDw6Ozg5Nzk3NTU2Mjg1Njc4Ojw7Ozs7QD4/QD0+Pjk6PDk2Nz47QkZCPDg7P0NDRDw+OT43PkFCP0ZDOzhwkpqblJ6bm52Vl52doqajopaXnpaXl6GblJi+t7G4uba3t7i7l5S2vbu9vcDFtaK7mKC3v7+6wcm0nbu2sra/xcGooLazurGqrrSxsLG0tLa8vL68vL3Guri3ur20r7Wxsbq4t7Kzsqqmpp+YpKSnqKSupKurtbWus6CnqqynqqmlpqCnoKGmoZOWmJ2foqSjnZ6coaChnZekmpmdoKaqqqqtrq2tsLGrrK2sqamrrqimpaalpqSkpqaeo6eppKGcoKKjpqCio5+jpJ2foqWgpJyboZ6fo6GhpaSlqaOkpaKkp6ehn52elpOcoJiZko+MjJeWn5uWnJqdnJqSlpSUmJOQmp2YiouHgIB8gnhhXVlTYWhgZnNvc2l0Y2lkYltMSz46ODg5ODg5NzM0NTI1NDY2OTw8Oz08P0E/QEA9Pj44OTs4Njc/OUJFQzw7PD5DREM9QDs9Nz1DQ0BFQjw3Z4yRk4qalZiblZWYm6Knq6aVl5iQlZmhnpeXvrWztLu6ubi5woeYt6u4u8DCxbOjw6e4s72/tMTHvbS7uL62wMTErqCworW2tb2+wcPGw8O5vb/AwL2/xL28ur2+tKeqmLHAvbi1ucCzr6+qqqitp6ekr6eqtLyxtLWor7Gwr6yqoqajrJ+fpquXmqifpaWfoJydoKuwsKyiq5yYm6Cor7Kys6uorre1sq2tqaalqKulpaStqaShn6Cnnp6mqKmmnp+anqGlpqmcnaObl6KmmpuanZ+cmqGcmZ2eoKijn6GfnaWioKOioZSZmpmTj4qLhI2Qk5uPjpiVm5eYkJORkomNl5iYk4uKi32AgIVwYGFeXmpiYm53dXZubFtiUVVcTUc7PDk3OTc5Ojc0NDQxNDM3Njg8Ozs8PEBAPUA/Pj8+Ojo5Ojc6Pz5FRUU8PT1AQkJCQUI7PDhAQ0NARD87NV+MjIaFlouUlZeYl5ifpqellpWWkZebn5ual7mxtrO5vLy5urWqsryxvsG0vMe5uLuuv6fGw7/KxsnIxcXJvMLHx7+xsae8vL7FxMbJx8XGu8TAxcbAua+9vMC+vrOrqoyzu760tbfCuq2vsLWqq6aqo62kp7G2q7WyrbOtqK6vp6awr7Ktqq+zpKu1qaeopKCgnqmyuL61tbWqqaausre4t7apq7i8ubexr66noqOop6SfqKOfnqCZoZydoqSnp6GelJuaoKGlnqChnpajnZSQlpiboZqflpORlpSin5qenJudoZ6kn56VnJiPkpOPjImTkJefiZCWkZuUmJGRlZaDjJWXlpKLjIh8f4N/amZoYWtsZm51cXJ1cWZeX1xSSUU/Ojo6Nzg0ODw3NjU0MjMzNjU3PDo7PDs9QD4/QD48PTk5OTs6PDw+QkRFPj49QENDQ0REOjo4QUJCQUNAOTJbk4iEjZGKi5GRlZCSmp2fnJOSmJSdnZqXmpW2sbm1tb6+tri1uLO8vMTEusPHwb+0s8XFxr/CzcfLzsvLx8HDxsfIysXExcO7vLzBxcHFxb/DwsbFwLGTvrq/w8K2trqptLO0qauzu7uxn5uxr6ykrK60p6qpqKqtrKmlpZ6pr6uyu7q4u7e5t7O5uLOurLO0qrC1ub3Bur6+vL60urm4u7qysbS8u7q7s7Oyp6Smq6uioaCdmpudmpyXmpuenJygnZaclpuZnZ6io52UnJCNiY6OkZ6bnJWNh5KLmJiWmpybmJybnp6cmp6UjpiYmpORmZeeoZWYmpKXlJSRlJqYk4+TnZaSi5F+enx/dGtsbmNvbGhxd255aWlhXGdhUUZEQTw5OTc2NDQ6ODQ2NTMzMjY1Nj05OTs7PT47Pj49Oz05OTs7Oz89QUNBQkFAPEBDQ0NFQjs4OUQ/P0BCPzsyV5uQkZCQh4WSjo2IjZCTlZGPjZSUm5STlpqRs7e4uLi+u7C1sri2tbbAw8G+w8LAvru+u7u8xMzEzNDKxsbAxcfLyNTLysjGv7u7vsS+xcjGxsPEw7i0wLe0vMHCucK3t7/Au66lrre8t62co7ewpq20tayupaWjqKSgoKWZqrOyvsG+urm6uLW0srG0tLO6wL7Av769u7u9vsDCt7a3tru7sru+ubi4u7a3tKyoqamrpqijnpOampyYkZKZl5GRmJqXnpiWk5acm5+elJOJiX6GiIuWlJiZkYmVkZeWlZmbmpaYl5idnpyhmJWZmZuYl5ybn56jnJ6WmJeTl5yZmZyUlp2UlpOJdnl6e3Zua2lndVpmcndzeGVmXWRbUlhJRj87Nzg4NzYxNjk3NDQzMzM2NDY7ODo8Oz08OD0+PDo7PDo9Ozs+PkRBQURCQEBBQkNDREM9OTlCQD8/QD89MkyWmpaSk4yKmJCLi4yNkpKKiIaNkJiKj5CUl7O7tba/vb2xtrjBvby0uL/Bsbi3vsHFvbu8wsbJv8jOycHEwcfKysbKxczIzcbIxb/DwMvNz8nGw8PEwsS9uL7Bw8DEvsHPz87Gq6+2tLWroKe0s66ruLWzq6mjoq2prKatn6y1tL/Cvrm4vbawrausr7W0ur7Fv7u8urO5u7i5ubWtsLS9u7G/vLiytrmzubu0ra2orKyqqaeXnpualY2MmJSTi5WWlJyZl5WWmZKYn5mQiop+iYqKkY6Vl5OUn5mWkJSZmJmWmJOUm6GeoZiYmp2ZmZaenpibopqdnJuYmpuZlpeXlpyZlJyYfoB4eXV1ZWVpaWddaW9teHdiYmBgXVhXRkU4Ojg6OTc5NDQ5NzY2NTEyMzM0Ozo9Pzs9PTo6PTs8Pjo7Pz48QkBDQkJFQj0/Q0NDQ0RFQDk6QkFBQj5CQTVCkJeUlZmSj5qQjpKRjZSVi4qHjI2UiImPkpq2u7S8xsHEwr3BxcLAtLO9v6ywr7rDysPCvs3IxbfByMW/wcLIy8rCwsTJzM3Pz8zDx8bIyMjHycfFycfIx7/Fx8TEx8jK0s/SzLy4trS4uMG+vrq9ury6vKytpqm7urm3wLK1uLLAxrq3t8Gzsa2tqau1s7u2w7a2vbWxt762s7e4sLW2v7uwvbq0q7CxsbO8urOzrqutq62xnaOjoJqQjpiXlZCclpaYlpWSnJmTm5+clpGUjpWQiYyQlZOUm56YmZKSnJedlJmSk5aZmJ2VnJ6do5yVnZ+TnKKcnKCfnaOemJSVl5ebmpmgkH99cXRxb2JgZ3VnaWl0bXhsXWRbVV9ZTEhDNjw5OTg4OjUzOjY2NDQxMzUyNTs6PD47Ozw9PDs8PTw7PD89P0I/RUFCQ0M+QEFARUVERUE7Nz5DQkI+Q0I4O4+akZaalJKUjZCUlI6VlI6Pi4yJk4uIkJObt8C6xsXEw8zCwcS9vrWvt7uvr7O6wMfFxMHMy8W2ucDCwsTHytHLwsPExsnFzdDOx8zJwsHGwcvKyMbMyc3FxsXDxsXJzdDNz8zHxMDDwsnNx8XBxMfBu760sbCwwb6/wca/vri3w8K6urbAvrWyrKmvsri+tMC0tLi0t7nEua+8vrm+v8K/tbq2q6qsrq+wt768trSura2utaSlqKimmpycnZyeopydmZOQkp2VmKCdmJiVmZmZl46MlH2QkJefmZmYk5GToI6Nko+VjpCUlaKdnKSem56elpyjoKGipKOkop6amZubnJ2enIN9cnx4cGdgamp2bGlkdG5zYlxiVFdUU01HOjc7OTk3Nzo3NDg3ODQ1MjM0MjU7Ojk+Oj08Pz04Oz05OTk9PEBBQEVCQUJBQT9AP0RFREVAPDo+QkNCQENBOjSAoZeUmZiVkImUk5aTiZGMlJGOiJaKi5CXnMXLw8O8wMPHwbm9vbu4tre3rrK3uLzAwsDCx8bHurzAwsTHyMbSycHDw7+/vsTLyMrLyLy7yMfJzcjDyMnJxcXDwsHCx8fIysfMyMfIzcbMz8W3wMDAwLu7vbWzs7+/ub/DucC3u8G8uri7ub27srCvsKy5wri9ube1t7q9xb24xsjCwcLGwr28tamurrCwr7O6t7m2sK+tr7OppquprqannqSlo6OjoqCblZiekZecl5GRlZeZlZmRlJiSlYyYo5qcnp2FiZ+TfJKWlZKUlJennaCipJ+en56foaGkoqKjoaOinJ2fnqOhppl5enl/cm9mZWdjamRham1ubl5YXFZVTlBKRjk5Ozk3Njc3NjM3ODk1NjEzNTI3PDs8QDs/PDw6ODo8OTk4Pj1APz9GP0JBQz89QT5ARENDQTw5PENBQ0RBQDozbKKdlZedlo+PmJiZmIiSjZGVkI+Vjo6TlpbKy7u5urnBu7q3vsG8vLu5sa61uri4u8S6vsC+vru8wMXBxsK+xsG5u8O6uLm8vsHGwca6ucnJw8XEwMTBwsHEwcO+vcLAwMHCy8PGzMvFyNDCsL69uLq7vL63tLC5vrO8vrG5tbi7tryztbm2uba5t7GtusG6vMG/t77Ev8bDw8fHwrvAwr/Cv7iys7O1tLGut7S3tbSxrK2xp6Wlp7CtqJ+nq6ajqKWmpqCgn5SYmZSRkZWUl5OYl5qhnZ6hnKGdoaWglpSbkZeXmJqTnpmZqaSlpKWdoqCanqCkoqOcoqGjoJ6cnp6ppaiVfXuDeG5mYWRiYWJjY2piZmJaWVlcWFFORT07OTo7Nzc5OTY0OTk6NTMxNDUyNzo7OkA9Pzw8OTc3Ozo5Ojw+QD8+RDxCQURAPz49QkRCQkI+OjlCP0FCPT44NVmfnJiTmZaRlZiYmpeQkZCQk5GTlJKSkpSUxce4tbq5wrm5vMPFwri7ubGxtry6tbnAu7u5tre0tLW/ur2/ub26urS/uLW3s6+7vLfAt77Cv8G7v8C8u8W+u8HEwL6+uLzBwcu+vcnEwMDKwLHBv7u4u765tbe0uLy0vbi1tLCzvLG3tri/tr25vb65t7q+u7/Axb29y8PGw8TAw762ubq2v7i7v7y4trOyq7CwsrWzs66sq6emnqeurauiqKumpqqjp6iqo5+Ym52bmpicnJiXnJuhpZ2anqGhoKGmoJqbnJiboJ+dnJ+coKiho6SknaKfmqKgop+el6Shop+dmpieqKWhi3x5h31xY2BiYmdqZmZpZWldVVVTWU9TS0U4PzY7Ozc3OTs2NTo7PDYzMTM0MTc7OTg/PT47PDs3Njk5ODo7PUA/PkA9PT9CPjxAQUNDQT9DPTk2PEBBQDw9ODdJlJibj5OUkZWYlZGWkpWRkJGUlZSTkpKYlcHCwLq8ub62uL7EwMKxvbqytLO4vLW3vMC8vbS0sbC1t7W6wbi+uL+8vbe1t7CuuLa5v7vAwLfBvLvDtrrIuLa5u725ura7xcXKvbnFwL+8wb64xr3BwLzFuLa3tLi2tru7uLa0t7q1tLi8vbm/ucPAwLu5vLu+vcjEvcfEw7rAvb62sra4srm0usLCureysaysq62yr7Kur6ijpJ6rrKyqpKakpKiqoqemraihoaGmn6Oiop6bnKKfoKOdnJuhn6KgpKCem5eZn6GdnZ6eoaWkoaKioZ6ho5yinqCZnZijn52eoJqZoKKmnYR6g4B4cG1lZWZvaWVrZ1hYTktLSlJJTEhDOT44PTs2Ojs5Njc8ODk4NjA0MzE3OTk7Pz0+Ojw6ODg5PDg6Ozs7PD1BPj09Q0E8P0NDREA/Pzw6Nz5CREE/QDg4P4mYmoyMkI+Tl5WMkpCakpGXmJaUlJKQmpTDvsbBwby8uLi6v7e8scK2tLyxtLa4s7q9v728sq2vrLGwt7y2u7zAxLm3t7e2urm6u8C9w8C6xMK+x7i5uK23tbi6tLezu8XGy8G7xsDAv728v8nDxMW+xri1srK9uLi4vrq6uby7urS3u7q5v7zEwL+5uri/ubvFxr3Fw8Kyur27sa+2uLO3s7q+wLm2rLGrrqmqqa2qqq6mpKWnrq2ppaOio6GkpaWmoqato6Klo5+ho6Gcmpyhn6CloaCenZygnaWgnpeVmZ2fn52gn6KmpaCknpybn6Ofn5mcmZ2epJyWnKOcnqGcppZ+f4Z8a25wZ3Brc2VibF9bVEhLSkRKQkNHPzk7OD08Nzs7OTc4Ozc8PDYyNzUxNjk8PD08QTs8Ojs6OT45Ojs9PUA+RD89PkRAPz9BRkQ/Pzw9OTc/QUNCQEI5Ojl3nJiLh4uQkpOWjY+TmpOQnZiSkY6QjpiSvbfHvsO+vbu+vL22uri9ure9s7OwuLi1uby8wLeqraSusLe7s72+u8S3tri2t8C/xLzCxcXHx8rJxs/CwbivtbW8vri7sr7ExMrFwcnDwr+/vr3HzMfHxMe9tbW2wb26u7/Cur/Bv722t729vcHBwL+8ube8wru3v8W7wr++tbe8vK+vt7awtLO6ubq7r6mtq62rrKaqoqeuqKWqra2vp6Sgn6ajnqKjqKOjq6Oiop6dm5ublJaZnJyfpZ6fnpmYnpejoJyXmZqZmqOjop6jo6egpqCbnaCjnp2WoJmcoKCblJegn6WcmKKQgYaBcWVsaW50bndjZ2FbYlBLVEhFRUNHQzw7OTg9Ojc6PTo4OTs3PD01MzY1MDY4OTo8O0A9PDo+PDk+OTk9Pjs/PkM8Pz5APz0/P0ZEQEE/Pjo3P0BDQz9BPTo4ZqGYj4uNlZKVlY6PlpmVl5uVjoyMjY+bk7m2wbS/vLm8w8C+wLq1trKywLivsry8sLe7tru8q6qjsLm9vrO8vrzFuLK4ub3HycrDx8jGxsnIzM7RzMrFtbrAw8i/v7W/wL/Gxr/LxsO/wbzAw8zKx8XGwbm9vMS/wL/CyL3Hx8XFvLrEv7vBv7rAvLu7wMS9t7nCub69t7S2uLqur7WxsLCytre0t6yurKqsrKuoq6Gms6qlra+trKippaOkp5+io6Onoaeiop6cnZyamYyQlpeZnaKZnpuVkp2UoaCdmZ6fmJimpqKfoqKmoqeloqCko6GbnaCbnKKfl5WVnp6kmpafiYGDgXRvbGx0a2xuX2JeYWFNSE0/RUA/REM7Ozo6Ozo4Ozw6OTw+OTo+NDQ1NTE5OTo5PDtAPD89PTw4PDs6PDs7Pz5DPkI+QD89Pz9FRUJBQj87Nj9CRUQ9QUE6OlmfmJOSlZqVmpOQlpeclZuZlpSVkZKTnZm2uLaxuru6vsG5uca7trWypb69tLbBv62zvbS4wbGwsbS8w7y6ur68xL+3vb+9x8zGx8nGxr/ExMrIzMzNy8bCw8vOwry5vbq5wMO/yMbEwcG/xcDKycPDw8O5w769ub+8wsbCyc7Hxr66xr26v7m3wLm5vsDCvrW0vLi2u7CvsrK1r7Cvrqyus7CzsrirsbKxqrCrq6yrrLatqKyusqarrKmpoaWgpaakrKSmoaChnqGgnaCMlJeTm5+mmZ6emZOYnZ+gnp2eopuYp62ooqSgoKKqpqmhqKGlm6CgnZ2jn5SYmKKdp6Gfm4J7eod6bW13e19wY1tdX15TST5CRUlCQz5DOz42OTo7Ozs7Ozs7PT05PTU2NjIxODo5Ozs6QTs/PDw+Nzs8Ozw9PTw9QD5BQUE+PkFCQUVDQkRAPDY+Q0RFPkJEPztTmZuZmJ6dmqCalpyZn5KdlZ2boJWWlJqYur20sLu8wcTCv8XGura5sqO7vbS3xLuwtbq1ucS4tLy2ur3BvLu/tr/Bv7y/usDLwsfIwL+8vL/FwsfLyMHDwMDJysLAu7uwtLu9wMXGxcW/wMK/y8fCwMjAusK7urO6usG+wMrOysS9tby8ub+5ubW1s7/Avre0s7S4rbeqr7CwsrGvq6+nr7ausrG5rra2uLSzsLGttrS6sa6srranrLKsraSjoaenqLKrqqWkp6elpaCml5ujn6SmraKeo6KanaWiop+foaWenrC0sKSlnp+kqaevp6mgq6CiopqipJ2anqGmp6+psZWCe32Cem1zeHNncF1aXlxZUUVEQ01JQUQ9Rzo6NTk7Ojw8Ojs7Oz0/Oj01NDUxMjc4ODs8O0I8Pz46OzY6PTo7Pj0/QD87QUFBPj4/QkBBQkJFPjo1OkFCST9AQkA7TJqdnZ6fnZienZmampySoJWbnp+blZGRlsW+urbDvMbCvr/Ixbe1uLe2ubu0r7e2srWzt7m8u7a7u726w7u3vbe5wLu6uLi1xcHDw7u5s7S6wb2/x8C5wLy+xcS9vrmysK64t7/Dx8PEvb2/v8PDvr/HvLy/tLSutbW8vr/OzcvCt7K4uLi9ubuxtrLIwLu2tLGwt6yzqbCtrbO3r6uuqrG1r7Gvt7O6usC/tre2sru6wLWyrbO3rLC6r7KloqWrrK+5s7KosK+xr6qiqKGkraitrLOun6inpqWmq6Sknqaqo6ayuLOrpZyfp6anrquqpbClpaWbpKOYn6exrLW4sLKOhHl/fHdsdXpwbWhcX19ZU1BBRUhHS0BEQ0g8PTY7OTk8Ozo6Ozo9Pzw9NTU2MTM2OTg8QT5AOz1AOzs5PD04Oj08QD46Oj49Pj09PkBCQkJBRD03NDU9REc9Q0I/PEWUnqCgoJyXmpiYlZmdmZ2fmp2bnJaRj5LDwMK9wrzEvLy7xbu3s7e2tru7s6CWtayvsbS0tLa4ucHAt725uLm2tb+ztLK4sbvBwMO3t62wtbi4uMK6tLu3u77Au7u8rq+us7K5wcLEw768v7u6uLbBwrW/urWur62wvcC5z8rJw7GvtbS0vbq+ubq7ysO7uravsL2xuK+ys7C3vbaur66wt7CsrLK2vbzEwrq9t7bAv8G3tbC2srGzurGxr6err6u2v7e1qbqztbmxp6uop7ausrG1uaisrK+qr7CqqKessayytr20saykqKuoqKusq6i2qaaonqadmKOuvLG7wbSmiYF8gnpydnZ3bXBgXmVdW1RKPD4/RkY9RkNDOTo1Ozk5Pjw8Ojo8Pj4+Pjg4MzE1Nzg5Pj9BPzs6Pz08Oz09OTs8OTs6Nzs+PT1DQT8/QUJEQkE8ODU4PUNGPUREPzw/iZ2en52Xl5WUk5aZnpubmpuYlJ2Uio6Owb7Dwr6+vrm2usCxtbGzt7fCtbOrrbOoqa61r620trnDv7e6t7a2srTAtrK0uLO6wMHDubeysrK0sre+urO1sry6vLa6vrK0tLSwuL7DxsTAvb+5s6+yvLquu7Szpquorbq+uMvCv76sq7Cvs7q3ub67wMXBu7y3sLXEtb+0uLu0u8PCs7a2sbisqaWrsr23v7+7u7exvL28trGvq6uprbOvsLCrsLSpuMC2sqm0tbC3tq2spqu7s660uMKwsbG1sbK1saywsri4ubi+tLGzrqyxramvrqqyuK6trainoZ6ptr+4ur+wlol9gHxxc3d0dnFsXmJgW11OSEE/PUhDRk1EQDc3NTs6OT48PDk4PT47PT86ODMyNTc2OD8/Qj86OD4+PTw5PDk7Ozo8Ozs6PEA+QkI9QEE/QkI/PDs3OjxBRD5CQz8+QYqgm6GdlJiVlZOYmpyWm5WalY2bj4SIhru0vb+7vLm3s7y8rLOytLS2wLXAr7Kzqqqxt62pubO3wL27vLi2uraxwLq3ubi5u8HBxMO7u7a0tLC2ura0sqy8ubi1uMG6uLOxrLe8wcfDv7m6ta6lrLOwprCtqJ6gn6WttrXCt7a0pairqLC2s7K6tbu7u7W4trC1xLK+vL+8ubrFyLq9vraxp6SeoamxrrW4trKwq7S3trGopp6gmaWmpKynq6y2qa+6sa2kpq2lq7GrrKmtuLawsrjBtrGxtbGvu7ayt7W1sry1urKwsbKutLKqrq2nuLWyta2uqqiosrq9wLa0qY6Ce392b3tvdXJtYlxmWFxdUk5NQT5KQkBKSUA2NjU7Nzg+Ojs4Nz4+PDs/OjkzMjc1NzU8PD48PDg+Pjw8OTk5Ozs7Pjs7OTw+P0E9PEJAPz9CQD47Njc6QERBQ0E/QUKJoJ2loJSWmJiVnqCcl5uYmZGMmYmDhoS1r7S7u7S1sLG2uq6wtLOvtbq1urC1s7GttrqurLyyuLm3u7+9ub7AtL+7vLq4vsK8wsrHvsC4ubaytLaztK+su7q4trnAw7aurqqytry9ubaysa2tn6Snp52jpp2WmZman6muuayrq5+lqKSrrq6nr6yvsbGtsa6usLmwtLy+uLm4x8W8vLu4qaKcmJufp6assa6yqaapqq6popqXl5GcmpijnqKir6ekrKaompqemqGnp6anqa+2squ0tq+qsK+xqbm2sbWxrqy3s7avrquuq7S1ra+rq7GtsbKoraurs7W3ur2wq6GLeoJ5cXZzbXRpa11balRcXE9NSERGTEFGTUY4NjY1OjU6Pjg7OTc8PTo7PTo5MjM2Nzc3Pjs9Pjo6Pz48Ozw6Ojs5Oz47PTk8Pj1CPDtAP0A/QT8+OjU1OkBFQkRBQEJBiJ+ipqGYm56dmqWpmJudmpmUjJmHhoeGrq2uuLmxsqiur7iyq7CwqrK1ubm+tbK4tLm6tbm7tbWztbu8wLu+wLS/ubm6sbrDvMLKxb+7v7+5s7SzsbGusLm5try4u7+ysrKusa65r6qrrayjqKGdnZ6XmKGVkpWXkJifqK6ko6Sgoqeio6mpoaanpaqtp6ynqKesq6yyu7SztLm6trK2ramgmpaWm52fq6yrr6Ojo6GpoJuTjo+Qk5KSmZaanaSloJ+ep5iVkpSYnqSjoaWqrK2iqaqppKmtrqW0sa6xraqprq+wraWmqqSos66trKmmpqmrpqqnq7Ksr7Oxq6mWgX+Bd3J4aHRzbmRUYGNXXFFOTEg/SFFDTUM9ODg3NTo3PD46Ozw4OTw7Ozw7ODI0ODk3ODs7PDs4PD0+Oz08Ojk8Ojs9PTw6OkA9PDw7QD5CQEE/Pjk1ODs8RkFDRD9BQYijpqKjnqCfp5+oqpufm5yZmI6Xi42PjKqpqLGvsK2lp6ayr6mmq6CvsLu1vby3wMG+vLy8ua6tr7Kyurq3t7W1vLSvtKu2urjAxMG7tby9uLKts7CvrK63trK0tK+qpJ6bnJyeqKifoKipn6GnlpuXl4+dk4+Qlo6Xm6SooKCioqKlpZ2jo6CepaCkrKSmqKSio6OrrLOuqa6urqeqraisoZyamJmYm6moqquepaKbo5yUkIyOj5CTkJaVlpifnp6amKaXk4+Slp2ioKWjpqSnoKKko6Ghq6uksq2qrKyno6yuraufoaKkpK+srKmmo6KqpKqqpKmrpqmsq6agiHmDfHZ/eWJ2bG5cUGhUUE5HT0xMQ09RQD47PjM5OjU7OT07Ojk9OTk8Ozw8OzkzNjk5Njo7Pz06ODs6Pjw6PDs5Oz07PDw9PjxAPT88ODtAQEE/Pz45NDk8N0FDQkQ9QEOOqqSjoqGinaqkpqimoZ6dmZ2PmJWTkJWnpKGmqKmlpKChp6uhnKKbp6u1sry9wMLCwL7AubWnpayqqLWysbCur7Knpq+jr661wbq1t7K3trK0q7K0rqqrr7CytK6lnpKYlI+ZoJ+ioJykpZ+eqJSblpeMl5GNkJeTmJ2iqp+fn6Cjpaicn6ChnKKfo6innKehoKSfrKisrKCpq6agpKimrKOdnp2Zl5qrpqmwo6WnnqCclZOPj5GQmJCWlZiXn5ibmZujmZeUlZqdoJ2nqKWgo6Kho56doKmqpa6upqipoaKqrqqnoaCio6msq6eppqShqaKlqaalpKKmpKijkn19gHV1fW1re2RoVVFjTUlIR05STUpNRztEQDwyPzg1OTs+Ozk5Ozg6PDs7Ozk5NDg7ODc7Oz48Ojk8Oj07Ozw9OTw8PD49PUE+QEJAPTc6P0FCQEA/ODU1PDpAQ0BEPkFGlq6koqWeo6KpqKipqqWmnp2imJiZmZWbop6bnqOioKOgoZqgmJiXlqGorK62t7q5ure3u66ooKGpoaCtq6qmqaSpo6SupaystLy3rLKxr7Gtta+vs7Wqp62so5yZlI6RlpeZmZ2go6KbnaWemqSXl5eWkJKRkZOal5ugpKqeoaGepqeqop+gp5+dn6SnqZ6jpp+qnaqtqq6nqLClo6Smp6ymoaShm5ier6iusaqlqqqgmpiYmJWTlpqTlZWZlZqXl5ignpycl5uhmp6aoqeln6GioqOcm6Gmp6aoraOppZ6kp6mkpaWhpaSsrKmmq6eioKSjpKenoaCgpaKmoIl7gH12eHxkeHlgYlJVX0hJSUtTVElSUEw5PkE2Nz02NTs6PDw5Ozs4Ojw9Ojs4NjU3OjY5Pj0+PDk5PTk9PTw+PTs7PDo+PTw/Pz9APT03Oj5AQEA/Pzg2NT08PkFCRkBAR6CupKaroaOqrK6tp6ypqKCipp6bm56aoJyalZmfn5uen56WlJOXk5OcnqOorq2sq6uvqq+pn5eepZ6epaakoKKfpqCirqusrbWytqavtKupqrSxsLC4raehnJ6alJiampGOkpaRjI+OlJminJejmZqXmJmUmZiWnZufpaapoKajnqeurqumorGjmqSmpqqioaqiqaSosquxsqu6qKarp6urqaysp6Cgo7GtsrC0qbGvopmcnZ6hmJubmpiZm5SVmpaYnKShoJqjoJqcmZ+kop6gn6KmnZulpqWkpaijp6OepqOinqaloqWlqKykpq2noJ2dn56gpaGenqWgppmBe4F8dnZzaIJsZVtTWllNUUpOT1RMUkxBNz5CNjg8NzY6PDw9Ojw5ODo7PDo7OTc2Oj01OTw7QD03ODs3PTs9PT06Ozw4Pj09QD5BPj4+ODg8P0BAPT83NTg9Pj1BQEZAQUihqqCrq6GkqquwramtqaelpaWkoKGfnqWXl5SYmZ6YnJ2blo+UmZKSnJihnaqipqCep6Gkn5ySnKKbn6Gjnp2gn6Ogoq+urK+xrLanrbGtpqawrq2ssKefn6Ogl5GUnKGcmpiSk5+doaSbnpuWn5qfl5uinqWhnqSfpKitraisqKSstLe2sKe0rKKtraOvpaSmoamorrWzsr22vrCssa6tqaq0sbCnq6iytbezt6yxtKOgnaWfq6GhoqCfmpiVlZ+bm5ikoaCdo6GgnpucpaCfnZyhqJ+fp6meoaOkoKagnqehn5ymo5+ipaOooKmrpZ+dnZudmqainpyjnqeQgYJ/fHh1aXd1XWxaUmBIUVVIRlVWSkJNRz1KSDhFPDY3Oz49PDo8OTg6Ojs6PDk2Njo8Nzs+PT8+OTc9OT47PEA8OkA6OkA/O0A+QUA9PDk3Oj5APzo/NzU4PT4/QUBEQEJGnKueqamipamprqimqqWmp6aoqqGlpKOmkpOVmJacmpqcmpWTmZuOk56ZqJ2unqeem6GdnpqakpienKKioKCdop+fnp+pq6esqaq0q6utq6WlqqirrKqloJ+akpKUmJmWlpaMiIuPlZ2dnZ2elp6apqCgqKWxqqeuo6uttrC0srGutri9wLqttbSwt7CutKmmpKWsqbmztbvDvMPBtrq2q6+xube8r7OwtcG8t7yysrShq6KpqLGpqqinp5qYnZmppqCZp6CfnqenpaSenaqhop6bn6igpKetmZ+jnp6nnqCmnpycoqGbo6KhnZympaWkn6KZnJukn6CboJyjiYWEfnZxbWl2bWhtXFhbQlZNSkdNR0JGTTw+TD00PDk2Oj0/PDs6Ojg4PDk6Ozs8NTQ6PDg5Pj4/Pjg4Pzk8Oz0/Oz1BPTo/PjxAPj8+Pz08Njs/QT07Pzg2Nzw8QERCREFCQ5WqoKapo6mqqKmjoamgpqinrK6lqaWpqpSSl5mUmpqanJiYmZyamJqqoLGit6OwpqCenZ2XmZaZnpucpJ+fnaSdmp2cpKKko6Kqr6ynqaOgoayvrqqrp6Cfn6Kjnp+em52blJSVlZ6emJSGnZqhm6ukq7KwubKysbKxur28vLm2uMO+v8K/trq6wMS5vbusrqexrbHCtrjCxsDIysDKv7C5ub25wr24s7vFw7zCurazqbKtqrK0r7Ouqa6jnaumtbGsoq+loKKvsa2wpKSvo6GgmqGnoaSqqpmdoJmao6CmqKGcnqKemaSenpiYo6OhpJ6mmZuipJ6fm5ubnIeFgXt0cmtrdXJwaFdbUUVUSERJUEg+RUE0RUg5NTs9Njs8Pjw8Ojo4OTw4OTs4Ojo4Ozw3Oz49Pj02OEA5Ozs9QDw9QDk3PD07Pj0+PUI+Pjc6QUA+PD45NTg9Oz1DQEFDQkGRqqGlqqelqqimn6KnnKasp7Gyq62jqayVkpWalJecoqGbnqChnJ+psqu7sr+rr6ylnqChnZyYm5+gm6Cfn5eknZWbm56anpyfpaannaCgrLGvp6Sko6Gfpqynn5eclZKanZmVjIqGiIZ5bYigpKKrrLS8tsO+vrO7wcPCxcC/wsbGxcPIwsDFyM3QyMvDsre1vrK+xbu+zM3FzMvL0sa+v8DCvcfGwrfDycjCwMW9ubO5urS7t7C1sqq6sa66tr66uqq3rKqquLq0u66tuKOmop6npaKjqaaZm5+Ymp2nqqegoaGkmJSjlpSakZydn6Sep5+en6KdmJmUmJSIhH16cmtkaW94amVaW0ZKTEREU0xEQkQ3Oj87NTQ5OTc5Pj87PDs7OD48Njo9OTw9OTw9Ojs9Pj4+NztBOj45PT45PT44Nzs6Ojs/Pz1CPj83OkFAPTw9ODY2PDo8QT9BQUE+kqugp66ooqulpKKipaGlqquwsq2upKmmlJWVmpaUm6SmnaGqp6KrrLy8v8PBs7K4p6Ghq6qinZ6hop6cm6CSn5+Qlp+ZkpqWnZuZo6Gvs6mhm52dn5+al5iYk42PlpeUj42Qi4KDgndzcW5wj6atrrS5xbvNx8u/wszOzczIydHMzczHycXGzNDS1c7Tyb3Av8O7xsXIxdHTzNPP0tPMysLFxsbKx86/yNDLxsTGxMC7wsC+vr61vbOtvr/CwsbExsOtvrixuLzDwcG6vLy1rqenraigoqmlmpagmpmdqKupo6SknpePm4uQmYmVmJugn6OdnZeempOTi5WPhYB5dHNlYmdyb2ZeWllDTkxDRVBJREJANTU1ODlCPTY4OkE+Ozs+PDk+PTc6PTk6PDg8PDw7Pz8+PD0+Qzw7OkA9Ojs6Ojg4ODk7QT48QD8+ODtBQTw7Pjc4Njo8PkI+Q0FAPpOvn6ivpqiro6KloKampKuoq62qrqKqo5Kcl5ebmJujrJ6frqalsarFxszOzb+wwqmlqK2tqqGdo5+cnZqpk5mhkI6gk42UkpeZpLGxq6SgnaCcmZeVk5SXkpCPjIeEhImHg4CBgYB5cnJvbHmktrq5vsvB09LTyM3O0dPR0tHQ0dHNzs7Qxc7U1djS183Gx8nMw8XKzsrT19HX0tTV09PIzMbMzcnSzM3TzcTGycnAxcvHyMjFvsKzs8fEy8rKzsXJv72+vMHHxMzMyMnAw7+tr7KonqKqo5qTnpyYnqaprKSlppaXipWFkZSHkpKSmZualpiQm5WQjIaRi397cnV2Z2Jod2lkVldRRE1GQElRQj1CPDoyM0A8RDw3OTxCPTs9Pzs7Pj05Oj48Oz44Ojk5Oj86Pj1APkA8Pjs+Ozk9PTw5Njo6Pj08PEA/Pjk6QEE7OT45Ojo6Oz4+PEE/QT6QrKKiqaanqKSfop2qqKOso6OnpqyiqZ+Uo5iWn56dpK+boLCrqKyxyc3U18/Gu8esrbS4rK6jn6SjnqCkrJuWqZaNl42MjZemsK6lnZ6doaWinpuWlZaUin13cGtlYmhxb3F7hYqAdnBucXRwhbPCvsXR0NfW1tLWzdTW19TT0dPU1NLP0cPQ09bX1dbSy8nO0MvGzdHJ0dXW2dXX0tbYztLJztHMztDL0s++xsbJwsvLy87PxcbGtr/JvtLMy8/Fyce+wsLHzszP0M7MysfNuLe7qJ+mq6efmJ6jnp2qpa2pqKiSlYiQhIyRho2MiJOVmZCWjJiSj4aHjIR8eHN2cGNgZXJiXVJcSUpGQUVIST47QDg9NDU4NTo3Njo8QD07Pjw7OUA7OTo8Ozs8Nz09Ozo+Oz08Pjw/Ojo8Ozs5Oz89OTU7PD48PD0/Pz46O0BCOzk/OTg7PT0+PzxBQEQ8hqugnKegp6Oim6CbqaSlqaCfoaGmn6ifmKSim6mmoqasmqSwsamotdDU19rSx8bLtLbCxrK2qaKlpqGiq7WnmrGhlpWMkKatq5yVmKGdm6Gin52em5aKeGlkYV9fX19eX2BeYmx1c3Fwb2xycXWSxMfG1NXW19fT1s/V1NrU1M/P1dTU0dHM0c7T19bT1dDP0tPRydPQx9DY19jQ19LX2dXVzM7PyczRy87Pv8XBxsXOzNDQ0cjLy7/Jy8XTzcvOx8PJxsbIy8rU09DUz9LM0sG5xbGlqLWup5qorKWdsqiws6ysk4+TjoiLjoOPi4SQjpmNk4+Zj4+ChYx7enFzdG1hY2ltX1ZQX0pKQkZDUU0/PD40NDo9NTI3NTU8PEA8Ozw6OTpAOjg7Oj46PTg+Ojo8QD08OTs9Pzk6Pz07PTw9PTo2PD0/QD08PT0+OjxAQjs6PTc0Oj48Pz89RkFEPYKknKClnaWlo5mcnaSeo6OfnZ+doJqnnpyhqZ+vrquqq52mrrioq7fY1NXZ2dHO0MC8zMm3wK+nq6mjpLG2s6O2qp+doaqpoZiWmJqbnaGemZ2elH5yZmNjX19hYF9hYF9gYF9gZm1wcG5rb3J3d5vMwNLV09jY1tnR0tLXz9POy9PN1dTRys/M09bS0dbN0NXV0cXR1MrQ1NXVzdHQ2NfX18vIzsPIzszJzL/IvsfIzc3PytDNzsvOzsfKz8/KzsrByMbJzMnL0dLM09HRz8/Kvce5sK27uLWqtrCtqLits7+7sZqPn5SRjo2IjpCFkY2ZjJGRlY6RgIWIeXZvcG9rYmVucGFXXFpJRkZETFdFO0A8MzM8PTg2ODU1Oz5APTk8PDg8Pjk8QDtAOj04Pjk4Oj88PTg7PkI6Oj08OkE9PTw6Nj08P0A9PDs9Pjg7QEE9Ojw4ODs+PD0+OkVCRT6Bn5mlp6Cfo6eam5+cl56eoZqdmpyappufpKeeuLa1ta2lra6+tbHA2dLX2tzWz83Lw9PQwsKyq62urKazsbirs7epo5+clpSXm56fn56VlpiVimxfX15hZGJgYGBhYGBhXl9fXl1ibXJvb3N0dXZ5pL7L1dHW1NPY1s7O08vNzsXOytLSz8bOzc3UzM7TzcrX1dDM0dPKy9DR08nN0dXS1dXKwMnBxczCx8nCzMLFx8rKzsrMzM/N08vFx8/Mx8fKxMbAxcnLzM/Qxs/Ozc3Mz8XHwLe5vcLDvcO5srO+sLvDxLaqmKWhmZaRlZWSi5SNmpGUlI+PlIKJhXhwcmttaGBgcWhYWGhWTUdMSVBQQjtEPjs2Nzo4OTo1Nz09QDs6PD05PD05PT06Pjo8ODs9OTtAPD47Pj5BPDk9Pj1CPTs3NzU/PDw/PDw7PDw4O0FAPDo8OTs6Ozw9QTpFQUU+hJ6bqK2epKSqnJ6fmJKXm5+am56ZmaKVoamppcXDwb+7tbKxx8K5y9XW2drb2MzNz8nW1sXEuLK2qqOurbi5sbLAoZeOjZiWkJSSkZaXlpGMfWZiY2JgXV5hY2JgX2BgYWFgX11bXWdycXFyc3FtcnmkxtPPy9DP1NXJxMnJxsa/w8XOzsfFx83K0cjLzs3G0dLPzszUysfKzc7Hxs/Sy9DPxbrEvsbJvMLGyM7EwsfAxs3Hw8vJys/Hw8PPyMbBxsfDv8DGy8vLzsLKy8jHzNDExce6x8PIyMLPwL28v7DByse5vaqwsqelnaKcmJCbkKOZl5mRlZiJj4J3bnRka2BeZnFhW1dgR0hIR0lNVEc/Sj02NDM1NTw8NDg9PT06Oz08OTo7OT89OTw7PDg6PDo6QD1APD09Pjw6Qz48Pz04ODk6QD4/Pjw7Ozs7ODo+Pzw7Ojc5PD49Oz49RkFDPYOgm6qupa6qq5qdoJeUjpedmpmgmpqcm6WzsazJzcrIxL69us3NxtDV1dna29jQytDQ0tTKxbq+vrCot6q+ubmzpZKOjpaQhoOEhIJ+hYWAdGBbXl5eYF5gY2RjX11dXl9gYF9bWlxha3Jyb29rbG9vfbjRyMnKz8vNxLq/w7u7urm+yMbCw8DDx8rJyMrHwcXLxsjLzcnEwcnJwcHL0MTLyL+5wbrFx72/xc7Kwr/DusnHyLrHxcTKv73By8bFw77FvLy/wsTLxMS7v8nCxcfSxcHIvsrJxsfG0MPDxsOvxMvHw8q3v7y6tKmspaWYn5iso6ClmqOgm5R7dnJ0ZmlaYW5tWltYUURMRkJHRExDRlI/NTQzMzQ/PDM6PDw7OTw8PDg7PTtBPTo8Ojs3Oz05Oz07PTs6OD4+PEI+Oz88OTk7Pz07QD48Ozk5OTk6Oz06PDo2OTw+PDs+O0NCRD5/pZypsqm0rrCdnp6YnImUm5man6Kfmp2ov7i8y9DSzMfCw8fNz87N1dDW2djZ0MzUzs/Qy8S4xsG2tbyxwLa6rJGMk5eHe4CFhoB2eHVzcV9aW11gYWJjZGRlZGBcXF1dX15gW1laXGJvcm9raWxwb3OPxrzJxczAxsGwtrqysrSyscG8u7u5uMDBwcW+vbm9v7nEysXFwr3GwLe7xMm/wsm7t7q6xcO+vMHNwsa+vbXAvcO6vMa6wrmzu8XDwsK2v7a1vr+6y8K8tbrIur+9y8PBxcLFyMXIxdDGwszHssbJw87NwMXCv72yt7Czp6ioubGlrbCrrayUeXZ3amVoYGhvY1ZeWUpFSkZIS0FFQkVJQDk6NjQ4ODUzOzo7PDk8PDs5Ozk6QD46Ojw6Nzo7Nzo7Oz88OjxAPUA/PT8/Oz07O0A8Pj4+Ojk5ODk3ODo8PDw7OTo8Pjs7PjpAQEU+fqygrLWqt7SyoZ6fl5qNlJaan52mop2et8bCxMjO0svKysfNzc/SydHG1tXW2M/M0MjNyMrFvcrBsrW6t7q2r5GNioyFeYCGhoB+hHx0dWRcXF1eYGBiY2JiZWViXV1bXF5cXl1aW11daHNxbWdnbnByeZ29zMDDusC4rbCwp6qtrKe4tLa0s7KzurW9sbewtK6yu8K7wcS8v7q1srq+wLjHuLO7tcDCvLe9xsDDu7Svsra6vrPEtrq1rLi8vcC9sLm2rra6ssW8tq67v7S2tMW8vsLFv8PExcfLxcDGxrvHy8DPycfDxsHDt8O+vra5vsa/rLW6tbe2jnh0eGZnZWJrbl5WXmBGS0hISkZCQ0FERT88OjU2NTYzMzs6Oz06Ozs6Oz44PEE9PDo7ODc5OTk7PDo+Ozk+Pz1APz5CQD1AOjo+Oz89PTk6Ojo4NTY7PT48PDo7OT49OT86PEBAPIi3pquzsby8sa2foJmUlJiXnqujr6qnpMbLzsjGyc7M0M3OycvJy8rLxtHP09HPx8rGysXEwLzPvbO5vbm4t5uOh4mKe3l+hoZ3eIF9dGheXV1dX2BfYGRhXmNlY19fXFteXF1eWltbXV9scG5oZmpubnJ8pMe/ubi1sKusp56iqqeeq6yzramrqbOttrCyqK6nrLK7urbCubq5sKu1ubu0wrmvv7C9vLu1u8e5wratqqiwscC1uLyvsKexs7S7vKuttaWutq66sbCqua+tu627uLu/v725wr/GwsXAvMbBx8u4xcfFv8fDw7rExsK7xcnMy7O5wry6sohydnZraWFibGhZV1dbQUxLTUlFQUM/RkE7OTo5OTU4NTQ6Ojk7PD07Ojs+ODtAPD05Ojc5Pjk7PDo4Ozs6Pj45QT0/QD87Pjo7PDo9PDw4OTg5NzY4PDw9Ozw6Ojs+PTs/Ozs+QDyKwKuouLe5w62zqZ2ZlJaZoZymsLWxt6bGz9LMxMbCxdDIz8PEx8HGxsXFzMPKzMPEwcfAuru7yre0u721tauRiZCQfHl+ioV6e4SBeG5eXV1dXV9gX19kY2JjY2JgX15bW1paXVpaWlpdZG5vaGZnaWtucoGtubC1rqalp6eaoKSgmpylq62jp6KrqayqsKOmn6qttLaxvbmvt6+orri0tLu3s7yut7m0sbvBscGupKiiq7Gys6e8qquoq6yttLOlqK2gpK+psqWnqK6lp7assLK3ubq7sby9vr7Ev7XBwMfIt7/AxLfEwsC7v8TDvsTIzMq/vsPAwKmGcnNyamldYW9kV1ZYUEhaUlNLRkZFPj9AOjc4OTc3NjQzNzo5OTo8Ozs8PDc7PTs7Ozw4OT44PTs8Njo9Oz89N0E+P0A/Ojw8Oj05Ojs6Nzc3ODg3OTw7PDs5Ozo8OTc5Pjw+P0E7jMKvrry3ucSwtrCbmZWcmKqpsLGztb2vxtHQzcTIu7vMw8zAvcq5wMXAvMy6w8bFurzEvbm2vMW4tri7rrGVg4mNgXt+gH94dH98c3dmX11cXF5fYF5fY2NhYmBgX15dXFpYWVtbWVhaXF9ma2ZlZ2Voa29yhaqlrKagnKGllJ6jm5eRoaOqo6KfpKSnpKyfnZukpauyr7a3p7Csp6q0q7S5sLa0rLa4sa+6ubC3pJ+jn6axp6unuaqkpqeop7KtoKemnpqkpqyen6ekn6CwrKyssbOys7C1vLa7wcGyur7DwbG5ucKzwL2/tbi7vb68wsbEwsO+v8Ogg3dwbGFlX2tvYFVZX0hOaE9UR0VKRjw9Pz06Ozs4MjU1MzY5OTk7OTo6PDo3PD88PDs8ODg8OTw6Ozc4Ojo8OTg+Oj89OTg8Ojs9Ojc2NzY3ODg2NjY7Ojo7OTo7PDg1OTw6Pj5AO43Itba9uLrBu761oJ6UnaGmurars7O7s8XQyczDx7m4ycLOwbrLub3Iu7bHu7fDxrO+xbu2r7i/u7Cztq+ihIeHgn15dnRwbWtqanFpX2BdXFxdX2BfYWNiYGBgYF1cW1xcWFlYWFhWWFtdXmRjYmVnZ2dqbW+Inamgl5WaoZabopiVjZ6hoqabnp+jpaCnnpqim5+qsKyxtaKpqqmrrKS1uK22r6yytK6yta6wqp+dnqOisqSlqbitoaamn6isq5mfn52ZnZ+lmpmjnJudr6irp6qrrK2wsriuuLm6sLa7u7qrs7K5sr20trGxtbS/tb2/vcLBurq9l4N6cmtfZV5kZFhUWF5JV11LUEdJSkZBPD8/QDs/PDA0NTM2Ojs5Ozg5OTw8Nz4/Oz07Ozg4PDg5ODw3ODo7Ozo7Pzo9Ozc4PDo9PDc0Nzc2NzU3NDY2Ozc5Ojs6ODo5ODo7OTo8PzuJyba4vru3wcHBtKSkmZqkpsCyr7astLfG0MnJwce8vMXF0MG8yru7wbu1xbi1wcGzwsO7rKm0ubensbKpi4aIgHlzbnBua2NeYmZmXV1eXV1dXF1fYGFiY2NiYV9cW1taW1lYWFdXV1hYWFteYmRkZWZmaGlrco2onZSUlJuXm6GWlpCcoaGonZucpaWgpJufoJqYra2tr7KgpaKtq6ahtbCxsaynrrKnubKmtqCinpqjoa2ioam1qqKjpp2lpqOWmJ2XmJudn5mXnZycm6yhq6aio6Wtq7KzqrSwsqqyuLOuqa+ysrK3s62prK6xt7C6tbm9vrazsZSEeXVlXmVeW1lWU1pVTFxRTEpFSEtJQj0/QUFAQDoyNDUyNDk5ODk7OTo9PDY9Pzs8Pjs3Ozs3Nzc+Njo+Ozo4Oj07PD06Ozw6PTs4Nzk3NDY1NTQ2Nzg1Ojo4Ojk5PDg3Ojg5PkA6gci9uL2/tr69v7OdpaOYpbHCtba9rbW4w83JyMHGuMLByNC6w8bAtry9tsO6tr/Btbu/uqqmsLqxp7Gvmn2FhYB5cHF0cWhlZGllY1xcW1tdXVxbXmBhXl9fYF5cW1pcWllYVldXVlhXWFhWV2FkZWNkZWRkaGp2opyUlI+Vl5efl5mUmJ+doZuWoKGoo5+dqJybmqqmrrCrm6Ojtqmgn66otammpqywo7avo7agopuYmKumoZusuK+ioaOcoZ+gk5WhlJaWm5iXlpeclZ+onamjoZyjqqqwraezq6qmrLKwpaqusrGvsK6vpqensq6xtK+7s7m3raOUgXl1ZF5hVllXU1JUS01eTFBMR0hMS0U8QD48Qjw7NzU1MzM5ODg5OTo5Pjo4Pj47PTw8Nz49Njc2PTc7PTs5Nzk7Ozw+OTk6Ozo4Njc2NTQ1MzEwNDU2Nzk6ODo5Ojo3Ojs5OT1AOnbAvLW5wrG+uLyunaeno6q7wL3Aua60uMLNyMfExb7HusrNtcTFxLG/v7nAwbq/v7m5vLenprC7pqihpImBfnhyamxydHBpaGVkZ2JcXFpZWlxcXF1eXVxbXF5cW1xZW1xaWFZXV1ZXWFdXV1VbY2NiYmNiY2RmaoGWk5WLkpSTm5iclpaboJyflaCfpaSjpaaenJ+kn6qvpp+ipLWnoKGip7OhpaekrqSwrKu0nqCdlJSpoaGUrLGwnqKjnZ6Ym5OLoZSRk5eYkpeXmJadppumoaKZpKSkq6SksKaloqqrrKWorq6uq6ipqbOlpquus7Guu7Wwr66fknl2cmVhXFpdWE5MUUdSYU1WUE9KTU9FQkQ/OT02OTo3NTQ1OTk7OTg4Nzw4OT0+Oz47PDY5Ojc7Njs3Ozs6ODU6Ozo7OzY8Ozg4NDY4NjMzMjEuLzI1NTY7Ojg7Nzg3Njw7Ojs7QTh4u7uxtb2wu7K3rJ6kpq23u7zBxbqxubbFysvBxMfHybjIxrXFwsiuurzCvMLAwb28t7q2paextZ2iipiIgHdvZGJnaWhmaGpnam1gXVxbWlpZWlxdXFtcXl9cWllbWVlZW1dVWFdUVFdVU1RTVWBgX2BhX2BhY2RpgZSTiZGOk5KTnJSVlqSZoJacn6ShrKWjo6KjoZuqqqWZnqWwqZ+fnKSqnaehnaurqaitraKhoZSXopqcj6qosJufop+el5iTip6SjZKSlY+YmJOboKKcpKChlaCho6SboqqkoqSqoqutpa2xqaalpqa1pqqorbO1tLm6r6msnotycG9gW1dWVVJGUU9IWlxPUkpUS1NMRUdJQzg7Oz08ODY2Njo5Ozo6NzY5Nzc6Ozo9PDw2Ozw4PjU5ODo4ODY1OTo7PDk3Pzw5Njc4NDUyMTIxLi4xNDI2Ojg2Ojg1OTg5ODo7OUA5e7W0rbS7srCssq2dp6evubmzv8i6tsCvxsnOvMLLzcm3y8C0wMfMsLW8x7vBx8O9vra6taSqr66dmYeOg3x1aWpqbWhqbG5ra21lXVxcW1tcWlhaXVtbXmBgXFhYWllYV1hXVFZWVVRVVVJTT1FZXVxdXl9fX19iZG2Oj4SRho+RjpmTlJKcmqKcm6CnqKqnqqWopKKYpK6klJmlr6mfm5iaoJ6umZupsp+kpp+jo6CUk5uWlZGoqayanKChoJqUkIyZjouQjJKMlpSQnaGgopybopWboKKgl6GooqKoq6Crr6Stt6Wio6Ksramoq6+zuLK9tbOrr5iDcnJoW1hZU1VSRVlMUVxZTVROUExRUklOSUI8Pz9BPz02NTc5OTw8OTg3Ojc5Ojs8PT47Nzs7Oj02Nzo7ODk3Njk4OTo2Oj05OTU3NzU3MTE0MC0rLzQzNDk4ODo6ODo6NzQ4PTg/OX6zrqiztq6op6+tm6morLe2rLvKu7a/rMzHxrnCz9DJtca+ur7Gy7SwvcS8wsTDvMCyua+lqq+rnpeGgXd4b25pbm5ucWdoaWdkXVpbW1tbXFtZWltcXF5fX1xYWFlYV1hXVlVUU1VWVVVUU05PUVlaWlpdXFxeX2Bkfo2Bi3+LkIqSjZeRlpmioJufqqqmraqmr6KnmZ+soJSVpKinnZePjpmdrpaXpqmYnpyTpaCdkZCSkpKVp6qkmZmZnZ2WjoyLk4aIjYOQipGUkKCdoKOXlZ+VmqChnZKbpaWnqKigsbCmsbymn6Ostautp7C0sLm1v7GtsauQfHByYlZUVU5SSUdWUFNSTExYTUpMTlJHTUtBQ0ZEQz5ANzU4ODk7OTo3Ojo3PD06O0A+Ojk7OTo/NzU5Ojo4NzY5NTg3Nzk7ODU1NzY2NjEzMjAtKi4xMDI4Nzc7OTk7ODk0ODs4QDh/s62msbeqpaKwq52qp6mysKS2xrS5urPLxrq8w8vRzLS5ur7AxMe1tLa8srq7w77BsLOtsK6wq5uiiGtobW9yb3FrcGtkZmdlXlpZWllaWlpbWlpaXFxdXFpYWFhZWVdYV1VVVFJTVVNWVVJOTk5SV1hZWVlZXFxdYWqAen92iY2HkImYiZSTmJqYnaibn6qkpKucppigpZuSj56impeWhIORmqOPk6KclZWWh6GampOLjoqPmaOnnJWVl5uQkoeUjoyAi42AkIqRkpGgmZ+hlZOYmJShpJiMmaSmp6agn7Syp7K3oJyit6yqraSysqa1vLWrq7GjiHhybV1OUFFMT0ROTk5QTEZOTktKTk5RSE1KQUdLSEhDPTg1ODg4OTo7Njk6Njg7OTk+PDg6Pjk7Pzg3ODk6ODg2ODU3Njg4OTc0NTc3ODIwMzAxKiktLzEyNzc2Ojk5OTk4NDk4OEE3d7anpLawpKejqaWgqaWks6qissO1tbKzx8e4u8TKzce1r7y/uLzEs7KutqKstcO6uq6qq7Svr5+Xp31eYGdzcXZxam5pZmhoal9YWVhYWFlZWVpaWVtbXFxZWFhXWVlYVVZSU1JQUVRRU1VRTk1LTFNXV1ZYWFlYW11hb3N2cISIgoeAkYOOipSQk52hjpqboqCil6SWoZuVjIeYmoxzjYJ9jJaWhZCZkJONjnqZjpuLgol/iZifop6Qk5iWhI6Bk35+c4mOepCGkpCQnJqZmZCVj52NoqKNiZqgoaOjm6K0r6yvrJ+YpbimpbChsa6csLuqqa+qmYF2cmJWTFFPUE1DU05MUU1DUFBISU5TTUhKSkRKTEVKSjw3NDk4ODg7OzY5Ozc6PDk6Ojs3OT85PkA3OTo8ODk3NjQ0NDU4NzQzMTI1ODUvMDEwMikoLC0xMjc2NDg4OTo6NjU6ODdBN3e3oqO0qKWlqKOmpaalprOnpbTBuLC0sMrGubrCz8e/tK+9w6+xx7Ktp6yVo62/t7Cvn6esrKqWlKJyV1ZgaGdpaGluY2poZ2JcWFhYWFhZWVlZWVlaW1tbWVlZVldXV1NUUE5QTk9PUFNUUk1NSkhOU1NTVFVVV1lbXWlscmx/hXx0Tlhyj4KXho2cl4qTkJ6XnJWUlZOOloh/k4lfO1dve4qTiX+LkYyPhYZyioSWgXiCeoWTnZSDlY6Rj4KGfJJ4cW+FjX6JgJCNj5eZmJOKj4ich56XhoeWnpqgoJenr6itqaielq20oqatmayrmKezoamto5J8cW1fWk5TUVZMRFRKUE1NRk9PSkVMUU1LT0pJTU9GSUg9NzU5OTk5OTo3Ojs6Pj44Oj09Njo/OD4/NTg5Ozc5Njc1MzMzNzYwLi0vMzQ0MTEwLy8oKSsrLTM4NDQ4Nzk8Ojc5Ozg2QTl4t6CiraGmpqmgp6inoqmwqKe0wrmxtbDJw7m0v8/AurGxuMSrrsmup6KdhZqiuq2mp5WlpKOglo6WaVBNUlZaWlddXmJnY19ZV1dXWFhYWVpZWFlYWVpaWllYWFZXV1VTUk5MS0hHYlxNT1JOS0hGSE5RUU1QUlRWWFpgbW9peoJ0UEJAf5WRkX2JlIyEio2ajJaVipKHhZWFeIh/YEpRbniKkYR8hIyJhH5/bn5/k3d1dniEjZlwUY2Iiod7fniUdmd3hYh+ioiVio2QkZaLg4mHlISai4GEkpuWnpyUpKOnqaWjnpuxq6GkpJGmqpahqZyipqiHc2tlXVtIUVFTTUlVTVNJTExQSUdGS05MTVRLUVFPRklDPDc2OTo4Ojs7ODo7OD4/OTk+PTc7PDY7OzQ3ODs2Nzc1MzQ0Njk2LzMvLjExNTIyMS8sJykrKiw0ODMzOTc5Ojk5Ojo6Oj85dracoqadn6Guoaeopaanr6yqtry2uLazwry3qLvJubepqre4rbbAqqKbkoKPmbGfoZmMn5aYlJGKjGVNTE5OT0xNUVdbXFpYWlVVVlZWV1lZWFhZWFhZWVlaWFhWVldVU1BNSkVAQJtrc3NJTUtERERJTk9oWU5RU1RVWm6DdHd+amldVY+JlIl0f4aAe4WMkoCRmYuPe4aPf3V/eHNudXB0jY2BeX2JqoR5emh2e45wcm14gIqMknh6gHuAdnJxknhndYSDhIR6lYmIioyKgH+Diox/k4N6gI+YlJuVkZ+dqJ6fn52gqaWfnZiNqKSToJ+Vnp6kf3FmYFxcSlZPUUdLWFJPSk1NU0pKSk1QSExRTFJUTUVIQTw3ODs5OT49Ojs8OThAPzo6Pj03PT03OTkzNzc5NTY3NTI1MjU3Mi8yLiwuLzIwMC8tKygoKS4xMjYyMTk4Nzk4Nzc2Ojw8N3aumKOhmJyetKmvqaWsq7Cxqr20sry4tru1s6C4u7OrnZ+tq6y1s6WelpGYhpOklpyMgpaIj4mGhoNmSklKSUdGSEhQVFRUV1dTVFVVVVZXV1dYWFhYWFlYWVlXV1VWVVNQS0Y+OTNOPH6eTUhKREA9QURqlH5MT1FSU1ZedYN9eWd3jZeYjo99Z3mAdnh/iY98hJiSgXKGj3t2em9rfq18c5CKf3uGkoB9f3RmdnyFbG9nc3yJjIeAbHlxfXBtdY9yaHGAfY5wQ4qEgoOEf3d3eoqEfYt6dH6Oko+YipKbm6OXmZ2anZ6inZaNi6Wbj52XjpaYjnVta2VhWVdYVFFKU1ZUT1BPUVdLTktPT0pRT0lPT0tGRDw7Nzk7Ojo/PTk8Ojk5Pz87ODw9Nzw5OTk5MjY2ODU2NjMzNjIxMjI0LiwsLS4uLTAtKyonJyouMTM2Mi84NzY5NjY1Mjc5OTV5ppefnpagprCsrqunqbCvsay8uKy7vrm0rqmbsaitnJCXnqesp6SbnZOHln2OlZGUgHuKeoSAfn6AZUpHSEZCQENESUxMTVFSUFFTVVRUVVZXV1dYV1lZWVlZWVlWVlRTUUtENzhmNzA/qGlOSEM9OzpEioV6WkpOUFFUWF5lcHJtiKeqwH51eWJ7d298eYiPeXyLhW9tjJF4c3hqan+CcpaRi4F9ln9JkphuaHd+gmxpY2x5hZCShmtzbHxucnuFaW1wfnOMiIOFen1+enZvdHSFgXmBd3B8joyKk4OWl5iakJOWl5mXnpeMg4mfkoqSjYaQln1saG1ubVdVV1RSUVlPU1VVVFlWTU5ITktOTktDSU5HRT86ODk7OTk6Pjw5PDs6Oj0+Ojg6PDk/ODY4NzI3NTY1NTQxNDQyLzAyNCorKiotListKigqKCcsLTEyNTAsNTU2NzQ4NUhBODk1d5mRm5manqStsKKtqqi1r66stL+rvMK/pqOalaWYn46FjJaipJublJaPdpF9hIuQj3x4fnR9d3R3fGZPRUdEQDw+PkFGR0dLS0tNUFJSUlRUVFRWVldXWFlaWVlaV1ZUU1BMRTFAmjMganJBmW87PDk1PICChl9JTU9PUldaUllcYKeIYpppdHplfm9tf3qLiHWBiIZ0bJmRc3N8amudjkx5hJKJhI5nMXaGc2x+fYN0ZmV0foSEhYBmaWx1a3B/e2dwcHtuko2Oe3N9fXFwbnVtgn53eXRqeYmCiImDlpOSkIuNkZSVj5eOgHmIl4iGiYZ/kId1aWluZ2NXUVlXWFlcTlBWV1pZT0lJRUpKSEdCQUZEQ0c9OTk4Ozk6OTw6OTs6OjpAPDk6PDk4Pjc4NzcxNTI0NDUzMzY0NTAzMS4qKisqLCwrKykoKycpLCwyMjYtKzU3NzU0NzhpTzg7NW6SiJmRmpakqK6esp6muq6rsrDCsrvDx5uXj5SZi46GeoWRmpaPko6SinOJhHeLj4x/dnd1eHZveHNpVUZJRD88Ozk6P0BBRERFR0pMT1FRUVFSU1RVVlZYWlpZWFZVVFNQS0U4MC9cYLNHOVhQOzk0NDGWuotITE1PUFFWTEFJUUlir7OgcXx4bX1scYOBhYF5g4aGeXGflHN4gHN1lIc1cZ2onY6hoYSihHZwhnuGe3OMrY2IgGhmYmltcW1vgnVpb1h1b42akXZsf3t8bXJucH96c3VtYnaEf4aAhpGRiouKkouRjIuPg3Z5i4+AfoOAfY54cG5ual5aW11bWVhhYFNPXFtZWExISkZKRz9DQUJHPkNEPTs5Nz07Ojs7OTo5OTs6Pzw4OD06ODs2NjY1MTEyMTM1MzQ3NTUzMS4vLCwrKSopKSoqKikoKikrLzNETTIxNjY2NDM8dlI3PTdikoGSiJaRnaSnnq+VpbSorbCuwbO6wcaXkIyUkIGJfW6CkZOKhIuJkIh3hIVul4qMf3l7e3F7dHxrb15KUEc+QDc0NTg7Ozw9PkBCRUlMTExNTlBRUlVVVldYWVhWVVRTUExFPDUqnUtbQC1nSTk0Lz6Sg6muX0hMTU5QTDdDTVJTREqGdoB8fHZ+bHeHh3x9hYJ/jH51oZl5foaAhJmFm5xhhqqfnYuCkI16doh+iYeOc4qXj4N7XGRxdHp7d4ptZ2lheW6Fj4J6boF3c4R6cXN5d2tuaV13h32HfIiIj4CLk5eDjYaNh31xhYCEfHV3e3yHdG1xcmRlXlpaXVNbZ15YUVZZXVdHS0tFTEc/RkBEQz5BQT07OTc8Ozs9PDo6OTk7Oz0+Nzk+OTk4Njc1NDI0NDEwNDY0NjY1NC0sKSsoJycnJigoKSkoKCsrKy8wMFVxPDIzMzMxRX5XND05XIx3iX+UjJGdnZ+mkaCqn7Cpr8Cxu8W6lo+RlIh6hnZrgIySg36LhZCNeYSCdKKFjX9/g4Bzg4F9bHlsU1hMQUUzMTEyNjc2ODg6PD9CRUdGR0pLTU9QUVNUVVdWVlZUU1BNRkA6Mj0gI5ZjjFs1MzExaT9Hb0lGSUxNT1JMS1RdWVJKaYSIe4l5fHJ8j4t6fIiGfpeHd6GZiIaPkpSljaypSIatr6+KgICTioGLgYSRqIeAmJiKnHNsfIGGh32OaGdneH5thYaBhXGEhUdrgHhxeXZobWtfd32DiH+IhYx6lZ6ciouJkn97dYt2fHhtb3d+fXFxcGpaXFtaY2NXZ2ZdVlBRWFpRRExMR09JREZDQ0FAQ0E9OTc4Ojo6Ozs6ODg4Ojo/PjY7Pjc1OTU3NzMzNDQyMzY2NTY3Njg7REZMTU1MQzcrIiUnKykrKywvMDArbnUyMjQyMEyBXDU9PF6EdHx+ioWHkY+WmJKXoJ2soKe5r7O9tJeNkouYi310cX+Kk39+jYOUlX2Hf4alh4mAg4iGeYiKgHWFeV9jVkxDNjAuLzIzMTIzNjY4Oj0/P0JFR0hKTE5RU1RVVFRWVVNRT0dDPzgwLCOHWz4/ODQuXZVwc6NVRklLTU5QV2BZcFpcXmqNk4eVgISChZGTfoWIkICaloKgoJeVm5qlrZOZu7Gnu8jDp4qMoaSOk4mAkHtyg56fkZx+doWFi4+HkGlob4OAdIyGhItxh4J2h4B7doV9bnZ1Z4GUj4aJiYiJiKKro5aJj5iAe4KKe3pvZ2t5fnd7cGljXFlZXGldYWdgW1BNTllTUklRS0ROR0NLREJARERBPDo4Nz08Ojw6ODg3Nzg6PT04PD02ODc1NjYyMzQ0NTU3Njg2NzxCQj88ODo+Q1FeZVxHMicmLCwtLS4xKD+MWy4zMTBPg180PztudnBneIN7gIyAgZGPi5qapJyhrKarr7CXkpGEoZSEeHeAjZR9f5KGk5Z/i4GSm46EgIKMi4KJjoWAioBtcGpeQ0E0LS0vLy8vMDIyMzQ3Nzk7PT9CREhKT1FSU1JTU1RSUE9IREI8ODcvOUM+PDw2My5sk5dNUUlJS0xLTlZgY39nZ211nZuPmpOTi46PmoiTj52LoKGSo6mko6yTqLaip8HCrseveLqUmnyMoZ6ZhJKEgo+hnpOZkoSKhY+YkJVsb3WJi4GVjI2Pd5CEcWyFgYqXkoOFiHKJoZeHk4qPkJeltqmbjZaig4eThX6Aa2prfX59f3FfW2JeWWZqXGxsX1lMSFBTUU5OTUdJUURETkZBQ0VHQj46OTc9PDo7Ojk4Nzc2Nzs6Nj06Nzg1NDU2MzQ1NTY2NjY4NTU2MzEwLiosLCkoKS46UGFcQCwoLSsrMCwncog3MjQwT4RiM0A8dW5oWXCDcHWHcXaRhn6XlpqUn5+bp6CqlpOYnmhmpJp+hZSSeoCRiZKSfYuFmZKRg4CBi46JhpKIhImFeHh/aE5SPi8vLiwvLi0vMDAwMjEyNDU3Oz9DRk5QUlRQUVFTUU5QSUVFPjs8OkNGPz48NzUyPEBSNUhISExMTU5SXm+KfHOBfaCdm6emopmhl6KVnJ+onqmrn6isqaq1l6u+q7bIybfI0c++m6Bwaaqon4STkYWcoJqamaeRkYiVoZmad3p+lJiRoZKXl4GUnnt2lZKrs4mNl6B9lZ6cjpOWmqSjp7awnpGaqIiXkI6CiWxzc3x8eW5mXltfX2FnY2BnZ11SRUtLUU9KSk1HR01DSE1GRkNCR0RBOjg1PDw4OTk5NzU2NTg+NzU9ODQ3NDU3NTQ1NDY5NTg6NjE2ODYzLzAuLSosLy4tJyMqO1hiQigqLDEtKEuXXjA2M1GFZjNBQGliX1BxdWBufWF3jn18lI6Oip+Sl56VnKqYnqpCRH2HiYiZjnmCjYuOjXyKhpCRj4KDgYmMioWThYKGiYGAh3dfYlA0NjAtMS8sLjAwLi8uLjAwMTU+QUFNUVJTUFJUVVNOU0xFRUA8Pj1GSEBBQDg2NjI8OTxGSEdJSk5PUVlthpB3lYujp6q1vbilrqysqKm0rLC3srKtu7Gzvpyzw6y7ycu4w7+3paOwsqysqqOKlpiFpaagopiCppmNoqqnpIeFk6OgoKqhpKmOnLCLlaSnuLucoaOwk6Odo56RpKKssK2ztaOVpquJmoqTi5V6e36De2VeZlpjYF1iY15mZ2BbUERKSFRPRkhMR0tIRkdIQUtGQ0ZGQTo4Nz08ODg6OTc0NjU4PDU0PDc2OjU0NjQ0NzM5PDM4PDIwMjU1MS8xLi0qKi8sLSooKiYlNVhYLywwLCwwhIE4NzFQhWg1QUNbWFRMaWNXanBYeoV2gpOFiIKcg5KRjJLayJ2Wc1aXiI+InI99hoyPi4p7iYOHkY6DhYGMhoWIkoaChImGh4eHcW5hQEU2NDwzLzExMC0sKy0xLy00P0RBTlZRUlNVVVdVTVxRR0dEPD4+RkhDREA4Ozw1Qzs9RktKR0hST1BXgZOghK6js6qywcfEq7PFtq2zwLO4vra/tcG2u7ukuMaptsnHtr65tKijtK2wsJuZkpqfiaevqqSVd5+kl6GrsbKYlqmtqK61u7K6rK+1orGssrW8uLWutaCnqKOom6mwrrO6t7monLiqjaWPkpSghnqBgHJYX2JVZGBgYV9fZmBcVUpERUxWUklKS0VLSEVBQEBLREJNRjw4Njc7PDk3Ojk4NjU1NTcxMTw4ODk1NDY2NTk3Pj0zODkxLjAxMjExMzAsKiwuLCsrKyooJyopRVowMCovK2iSTzYwUodqNkFFV1FKTFxaUWNkV3p1cYGUfYSGk3aGfoCNe7+7o7yCtJSTjpuPhIiPk4qJeoeBjJONiIWCjoCBiY+Gf4aIhYqHkXp5b11XQEVOPDY6NDZBQjc2NC8vN0NIQ1FcT1FVWFVcV09fVUlLSkFAPkdLRkZEOz5AN0Q3P0JKS0VGV1RQXo+kraSytMO2uMHMyre8xL2ztMK4uMK1v7C4dLG0prrFpLDGubGzsrSopLa2qrCgopabopKlsa2lraynpJigrLO5oaixubW7vsy/xcW9vLPCuLq4v7i7uLqtrbGmsaquvrG9vMLCrZm7qZWuj5iZq4l+gHloVWFfVmhjaWVWW2RaV1VKSEdNUkhESUtBSUQ+P0JCTEBATUQ5OTY2OTo/Njo5OTY2MjQ2LzE5NTk5MzY0NjI3Oz0/NjoxLi81ODo6NjUwKigsLS0tLCwqKCgrKyhFUy8qMDBKj2s1MlCHbTY/RlJMQUxSV1RZVlp3anB/j4SBjoRve3J4iGK5oZqjiZWUlpOUk42Pl5KHh3uHgY2VioGEgYp6fIuIhnyKgoGLhJV9eHp1ZlBcZEdFTDpRZGBbXlNGPztIUEVbY1FRWVlaZ1pTYGFNU09FQT9JSkhFRkFAQzxENkI/SEdKTFRaVF6Ur7i1u7nJwLu9ys28vcG8uLa8vLe+tbqyxmB1sqWxmp6rvqqlqKuqpKKztaCrp56Vlp6Yn66lp6elnqOUoqews6eysry2wb3TycnTxsLFzMLKw8G+vr+8vbi1sLm3t8O6xr7EybGeuquirI+mqbeKgHxvXF5eXFVgXWhmU1liV1NXSkZGTktBPkhEPUtCPUJAPUY+O0hANzk2Mzc5PjQ4OTo1NzA0NS8yNjM4OTM3NDUyNj84QD5HS1JUVFJQUFFSUUpBOS8sLCwqKygoLC0rL1A+KC40OIB9PDJLiHE5PkNLRUBKTVBSTFFdaG1scZCNhpBzbHJyc4jVwLaaoI2VmZmRj5eSlpaOhoh9h4OMlop/goCCeXuLhId7i3mBioKXf3R9emxmcHZZXVxQZWViYGVkXVtYWFxOZG1VUm1uX29fWGdlVVlUSkRCS0tIRkhISEhCSTlEQEhLVFRWXVpbk7nAub64xsG7ucrLu7e6tri5tLi1ta63t5lkdamerXBeoq2dmKGim6Seq6WUn5+QlI6WmJionqafn5qZg6OdrKSqsKy3sLy41NDO1s/Jy9HMz87Kx8DAwsq+wb3BwcXExsrAyc+0pLyxtbCcrLm9mn13aVtcWVdbX1hhYlFcYVRSTERCRkhGPEBGPkJJQkBEPTpFPj1KPzQ3NTM1Oz00Njg5NzcwMjIvMjQxNjk3NzU1NTVEM0VMTT41MTAwMDY6NDc3QElPSjsuJioqKC0uLyxATSsvNTRtiUkwSIl0Pz5CREBDREdLT0RSXFppYHCXk5GUbmxvdHWHs6yhoZ+LmZyZjY2WkZuShYqKf4mGjJCMiXyBg3N7ioOFe4p0gYqHlX90e3lsbXV8aXNlaWxoZmppaGBmaWltWm50l62kvYiHZ1tvaF1aWVRIS09QSktQTFNRSExBSkZLUF9fYmdqYpi4x7C6tLu+trHFx7awubGxu62zsqisuK2NtqienKeaTpuejY+glpGnmKWVipOTiJGJkJGSnZuhmJuVloeemaaarK+or6ezs9TU1NbRy8/T1M7Tz8zFwsrQv8rJy8nSyM3Ow9DSuLDEvcS6pre7xaJ+bGFZWltWXlZZZFpQXVhPUkNDSUZESjtBRD5CSD9AQjg7RD5AST01NjY1NTs6Njg3NjU0LzEwMTQ2Mjc4ODc1MzY3QzVCOD8tMCwxMzQ4PTk3LC4sMTtGTD0pLCguMDAwN0s/LTQ2VIhXMESHd0M7Qj5FQkFDSk0/VVlTZldzkJGZgmhycHl5g6GqnqaXjJubmIuOlZGajn2Ji4aOioqLkIh8hYJwf4eChnuHcoOSi49+cXl1bHF4f3J7bnhzbGmAcG1jaW5weWl4fX7Lv8Pfp25jeG5kW2FgS1BSVU5ZXlBdXU1RTlRRVVRcbm53g3KXrristaiwtqutvcGyq7WmpbmnrK+irLSkj7Gum5iYjJGUkoWPm4GNp5KciYOLhIqJhIuElJWXl5SbkJyYmZmenauspKeirKzO0tXRzcvS09PQ1NHOyMPU0cjO0tPT1s3S0cXS1sbBz8jIw6m/uNCcdmtiWl9bVV5RXFpQUFVRT0k+QUdCQ0Y9QUI/RkU+QD86PT08PEpBNDU0NjU8ODg4NjY0NDEyLzAzNTI2NzY4NTMzOz08RT1AMTErLzM0OT81OTAxMDIyLTJFTzMpLzMuMzI9TjI0OEN9XzJBhnREOj09ST5AQ0ZIPFZSTU9bdYeGi3dsd3B9foCgnp6hjI2Zk5SLjJOPloV5hZCRj4yKiJGHf4N7cn6Agod6hXaFk5GJgG93c2xzfHx3fHOCeHFrgHJyaXByenlye77Lm3+NsoR2coV3aWFpXURaWltXZmRYZWtUWF1dYWNeY3h7f4yCmaqkpKKgoammqrK6q6a0o6KuoqSuo6eyoImmm5WTkYqSj4mClIlrlaONmYSBhn6Rg4OUl62LlY6Vmo6FkpCdl6evoaCgpaSoyM3Px8LL0NPR1NLO083G1tPN1NjW1tjV19XK1drNytjW0cutxMPMh29rX11cVlJXUltQSkhKSktAOzo8RUNFPUNEPkhDP0NCOzw5PDpHQjQ2NTQ0PDU2ODc1NDMyNTAvMjU0Njc0NTU0NDw+PUU/QTYyLy0xNjs9MDgxLzI1NC8tLjtSMDE3LzUzMkVEMjg+bmI1PYF0TTk5QEk8QUQ/QTtQTEZLWXGAdn5pc3lygoqAnZWelIWLlomPiomOiI+AeISUmYuNiYiLiX+EeXN7fYOHd4B7h5GXgYRveHFudYB2eH10hnx5bId2dW59doR1eXyeto08QYvGpX6NfWplV0lDZWNmY2hqZG95W19maGtuaW6Bg4mSjJ6foJ6Rl5mgo6Sns6WksqCipZ+iqaKjspyHn5KSk5GLj4uHhI+EfpycjI2ChIV6lH+CqpajjJKLmJOLfZeKmpGqs5ianKecpr3Dxbi2xc3R0NLQy9LLydTO0dXa19fY1NnYzdjbzsna2tLWv8zNtHRzamFZVlBTUFhVRUdLSkZGPjo3OkBCQzpHRUBFREJEQTs/Ozs3REM3NTY1NTswNjg5NDQzMzQxMDE0NTU4NzQ0NDQ5QD5EQkM8MzMuNkZUV09RSkFKRj8yKiguQlQyOTI1NC83Szc1PGBiQTxzdlY4N0FIOj9CPjw5UUVDSlRsbm9wYnFxdIaNfZeRnot/h5KDiYaFioKIfXiFl5eJj4OIhod7hXlxe3uEhXV6hY6NnnqNcH1wcHqAcnuBcoSHgG6OenV3fX2DdYB9h4mwdFmqwreNkoFwbmM9XmhycXFwbnd3gmZpb3J1eXJ6i4ePlJKblqCWiIyTnJ+bn6ugoaycopqaoKafoKyajJqNkZOOhX2IiIOFi46gmZSIg4d+bJl6hJmHiJOMjpWMhnubiJOPrquTlZeemKautbyorb3Gy8jJy8vPycPSytTX2NfY19Tb19PZ29bP29rS1snVzJJ0d2VkWFdOUVJcR0NGSUk/Qj49ODo+QDs+ST1AQkFCRUE+Pzo4N0RCNzU1NDc5LjU2NjQzNTUzMjMyMzY0NzU1MzQ1OEVCRENFQjU2PEZOU01bbmZjbnNrYFY+LDVMRzg2NTQzM0JGND1XX2hMdXheODs/Rjw8QTw6OUQ+Q0dSa19tZGJmbHaAiHGRkJuAeYCOfoOBgoV/hHx9hJiOh4x/hoeBd4N5b3t7h4J0epKejqF2kHaDdHWBfnSAhG+BkIJvkoV1fYKFeneHfIm4xqXDyriClpyPeHBmTmVjgnqCd4WhkYt5eXd7hIB8hHZtlJaVlpCYkYOJj5eal5emnZigl5+Tk5ijnpuslpGQi46Tg4yFiYmChpCRnpyaiIWMgYaYe4iJn5ePiY6Li4J8oIiQirygmJOXmZyopqWtnqe1v7+/uMfJzc7EzcrR1dXU2dXX29TX2drb19va2djO28aCdXVjZWFdUlVVVE1LRE5EOz09PDk6PD85PkE2Pj9APT8+PTk4NjdDQTY0NTU9ODA2NjU1NDc3NDU2MTM4NTQ1NjQ1NTdISD1ESkU3OTI1O0g+Ozk7N0lQXFpSVVhMOVQ+Ozk1MzI3STg9TllNSHh4ZDU9PkM9PEA6Njo+PkBFUV9ZZmFdXGl0enlsiY2Sd3Z6inx+gH+AfoZ7foKRioWGeoWIfHZ+dW19fYd+dH+SnpGgg5J8hn54j355i4pvg5uBdJmHfoKKhXx+kXuQqY+Qw6C9jZyknH6KhX2Jc4yLgHOmmpyYlIV7j5GJhGlHcKGknoyMkZKFiIuRk5WPnZuTlJGXjYyWn52UoZWSjo6RjH6Qj46LhImSlpmfn4iMlJGdkIOMf6aZiIWOg4aEgKSFiou3l52RlJWhpqCdnZ2jrra5tKvAxsrQx8fMz9PS0tjS1dfA19jZ29ja2tnZ19y2dHRzZmZiVF1ZUk9OSERMQz49Pjk5Ozo6Ojw9NkE+Pz09OTo7OzM3REA4Mzc4PjcwNjg4MzU3PDM3ODA0OTc2NzU1NTQ2RlA1RE5JODkzOEFLPTszQ0BJPDpEV088TVRITj85NjMzMz5DO1tYPjVZeXBaPDxBPD0+ODU4OT89RFJTUlheVlhmbW1taYGOinFzeIp7e4B8f3yIe318i4eCfnWDhnpzenRtgX6FfneGm6GbnpSTgIyIf5iHgJySboiphXuhjH2RjoOJhZ1/m5GKjaOin5Gkr6CLkYuFi4GThldyrYufq5yQg5mckJCOW4KikYKNn5OVjIeIjJKSjJSVlZCMj4qIlpydj5aXkoyTlIaAjImSjouKnZeYo6OGk52VoIqKiI6ckIOJj4CDh4WkhIuQspickpSXoaCemZKbnaeyuKylvcLHzcfGz8vPzM7W0NHUrdbV2NrY2trX1tnZnGt4cGNjWVlVUVVXQ0BJRD8/Pzo0ODo7Nzo8OzQ8PD89Pjc7OjoxOkc9OjI3PUA1MDY3NzI1NT82NTs1NTg1ODo1NzczNUhSN0dPSzk5ND1FSkI+MUZDTEI5ODpHWEA1SFdJNjYyMjM6RUNlWD8mX3lpX3o+Pjk8Ozg4OzxAO0JRS0tTWVBUY2J5bWJ+kYNvbniLeXp/e4F9h3x8d4aFgHNwhYJ7dXd2dISChX1/kqain6ail4qdkJSXi4qol3KKs42EqJKEmZSFmo2jlqCYk4mbnqKTqbCfkZWRjo6IloxvjbeEmsTIsp2ipp2cmJaRspBkpM3HlY6Gh4mQko2Nk5WKhYqKhpaanI+RlZOHlZiEgJCMmYmOkKuXl6SjiJmelZqJj4eXl4qFj42Bf4ePpIiNk6ial5OWmKGYnpmTnJuisrSlo73BvsfFxcjIycLK0s3N1KjS0dbW1tja1NPazn9uemRfW1pbTEhUWkJCSEQ7Qj44Mzc8PDo5PjY0Ojo8OjcyPzo5MjlJOj42N0JDMzI6OTYyNjQ+PTQ7PjY5NDk7NTc5NDRLUTxKUUs5QTdCR0lANjRKRUxGPjs4OEVUQTc+XDg2MjE0OjtFYFhBRmF0aExjWj41Ozo6NTs6PTpFTUZIU1dTUkJjgkd2gY59fG1+iHl7fnuCgoN/d3eAg3xtbot/e314eHyEh4p+i6Kzp6Oqs6KXp6ClpJaVrqKDkbiVkrOajaKhjKWcsKOknZmRp5apmqyvpJiVlpWQi5ial6HAjqPJuKuco6aumJKbnbKdhYaoopyYhYmJjpWMi5OPiIGGh4mTmJWMjJSTh5SYhoSSkJx1kpmzlpeloYecmZKPipGKl5uJi5eOhn6MmJ6JkJCbmpqTmJefk6CdlJ6boLGuoqS4vrTFx8S9w8PAxs3KydKmzs3U0tDW2NPQ2LludXFZXVJdVU5HSU5FQUNFNT47Nzc6Pzw8Nz00MzY2OTc3ND41OzU8Szw+OzxCQTc1PDs0Mjc3P0A2P0A3ODQ5ODc7PDU1T01EUFJMOEA9RUFHQTU6SkVORUQ6NkFAQlM+OURPMzIzNTc1PXZcPFJcdGlaTV1TPD04ODQ2Nz06SkZER05aXFlKZmA7SYSLenpuhYZ6fYR4gYaBfnB4fX59b3ONen6CfHiGi4mGhJKmu6yosb2vpa2zs6mkorCsipq1naO5ppWtpZaqrbinpKOgmqmYqqSusKqamZyUlpGXoJiau7uuyqFqt7irsJWZnqOsk5e+o16qsoOKio2Uh5F8jo59g4aOkJSViIiTloyQlY2LjZeZk52ZtJeVq52KnJSRjZCSjJmbi5OekIuKlp+hjJSNl5mdkpuYnpShoJScnaWuqKGktLiswsjFtbq9vMXHyMLRoMbKzc3F19bRy9SebHZkWVdQW1BORUM/PUNCQjhAODg1P0c9PDY8MzUzNDU0NTRCNDk6Qkw6QjtBSEM7OkA8NzQ2PEI5P0BCODc0Ojo2Pjw0N1RLQ1VRSjc8OklBREA0QUpITkJBPzZEQTxKTkQvVD0yNTQ6RUpcWEpaUW1ncHBEaWBLSTY3NTc6PkpAQ0lQZEhiYGJwSUCLin6Bc4aHfYKIdYOKgn9ufX19f3B3h3eOgod8jY+MhoyZqsLAr73Gu7O0wL21rauztoyosq6tvaubu6Worbm5q6emoqKko6qvsrGqnpykmZuYmJ+jpqWSo7qvqb+8ra6yuaWlqH6Ih5ytvbCDjIyLkIOOg5GPeoGIkI2OnIiIj5eNi5WXlJGalp2omrGakaycjpqPko6UkJCWl4+SoJKJlZujrJSWj5ScnZKgnZuYn6CTmp6mpaSio7CypsHGw7Cwu7fFw8O/zabHxMfEvdbRzcXKhW9vXllXXFlMSkJLQUZIP0FAQzs6NT5BPj41PDc9MzMzMjQxQTE3QEJNPkdAQ05DQT1DPTs4NkNDNUJJQjo4Nzg6NUI+NzlWS0RXT0Y4PTRLQEM+NEVLSE4+QkE2QkI/QlNFNThQMTQ1Ozw4O0Q+OUxqal07V1JkS2daVU43OUdEP0NGXGVGYGlnWl1dk4yMiXuHjIeDjHWHkYqBb357gn9xfoF6lXqSlJSYkJOWp7PGyb/BzMLDuce9u6+ruruYs7e6ssCupsCkq7C7vaquq6OjnqerrrWwqZugqpyhnJafsLWnjKO7urbBvKypnbSlpamUhY6qxMOkgouPh4iEhpWUjXqDjZGPkaGMjJSSjomXn5iTmZWXpqCvnIyrnI2Wj5GRlZWOkZWSkKGUh5efobOelJmTn6CXpJ6an5uflJiepaOmpqSvraXAxMOuqLe2ycO9ts+yxL/EvLPRysjCtHB1aVlVWWdQS0hDTUtMSkFCPkRFPDVBRTw7Mz05QjMzMjI2M0EwNUlFTj5JQEhSQEg+Q0A7Pj1GQTVBVUA7OTk4PDdFPjg+VkpDV09HOD80TEBCOzVKS0NMP0I/PEJGPUFITDkrRzwzNjc0NjRBPzdPYU9hRS89PjZrbGpgQDpIPj9FQmVaTWVcZVRiapmNloqLiJOQhol5h5SQgXKAe41/eIeCgpB5jaGWqJmambq9x8jJwdLJysLNvcKzrby+p7rAvbvEt6zBqayzvL+qsKqkpaSsrrOttrWgoK+fpaKZo7S9qZypvcKjtrevrJSyrKytl4eaqqalkYKMk6WWioF1ipJ5hY6SkJ2fk4+Ui4+NlKOZl5yUlKOeqp6RpZqMj4+PlZaIfI+Wk5Ojm5Wgopy1pZCelqSjoaWdnaWYnZWXm6Sjqaeisqyou8DEr6Wzt8y/ua/Es7u+wrmtwsPCwJdodV5WVFhYSUpMSUZERElEQ0JETDo0REk6OzQ9OEUuMTIyNDJCMjZTSE88SkJKUUVLQ0RFOkVMQjw3RVY9Oz04OT88ST86RVVJQVdRRzdBOks6Qjc5Sk1CSUBDPjxERzxCQ089MjBIMzY2MTcwPUI6PWpqSks1UVMzU3BwZE47RD1ARj5pSF9YYVpjY1aej52Ol46ekomKf4qgk4R4hX+Vf3+QiIqRgJahma2npJjCvcfDx8XTzs7Ny7zCuLC6vLS9y7vDwra2vK2zv7m9rq+ooKmotq6tqbK3mp6toqehnqu3uKqlr7/Fsb26s6irt7Svr5eWpayooJGOk7LFp5aOfJKVfIeSmY+pmJeTk4+SlZOlnZOdmZOho6KcmJ+Yi4yPjp2IWpCXl5KXpJllmKKfsqWVoZWqq6mmmp6ml5iWmJSgo6ilnrarqbm7w7SltLbLwLiqtquyu7iuqLi6vbd/Z2pXVFJTTUVKUk1LP0JIRUVJSEc5NkZNOz43PkFKLjMyMDI1QzU1T1ZOPExGS1JMT0hHST5JUT86OElTOzs/Nzk+RExCQEhTS0BXUEY6QT9HNkE3O0hNQ0U7Qz40RkU6QkFCRzkvOkEzNjAzPkdEOTQ9dGRNRztFKzpmfGdWOz5AQkZCcEVqSVJlYUxGpZScl6KXqZaMkYOIppOIgoeCnISDlZCQlI+aop6vvq+hxrzExMbGzs7O0sq/u7ayu7u7vs+1xL65ubezsbWzuLOrp5yrrLmqqKevr5ikr6SnpKW1wLCsrLS/w7nAurSoure5tLCWpa2vrqSLk5WhjXTCmn2XmoSOl5mMsJWampWSkpmZpaOVoJqWmqmdm6CgmYqNj5WcYEqWnJuVmqWWVJavn6+cnqOUrq2qpJmgpZOTmJiNm5+nopm0qKqzu7u7q7CyyL+4pqyrrbKyo6GysrSkbWpiWVdNT0pET1BQUjtIS0lISkNEPjpLVT9BOj1FTTA3NTQ0OkI0NE1XTztKS09VTlFKUEhISk9CPD5NUjs+PTg6PENSPkRIUklCV05JQEJBRjM+NThKS0NBPUM7NUVBOkE/PkhANStDNTIsPmNdZzozNXRkZUBSNyYjM31oVzs6QkNAPVFFV1NzYldGSKqXmaCiqK+ZkZeHi6iWjoiThaCHhJ2Xj52gm6OktMm1qcW5wsTIysnIzM3Hv7uzrrm5wcHMtci6wrm1urCvr7O1pqObqrS1qqmmrayapa6lpKisur+orLa3v8LAvrmzs8Wzur6tpK+1rLmmiJuYppt2v5+EmZ6Ok5qajK6XoZybl5San6ConqifmZqqmqGnnpiQjZGdg252kqKalZ2inZGusqOrlKepl6qso6KepKeSkZmch5Scop2Wsaapq7m2vbKyrr65tqCjp6ilppybrampi19iXl1PSktGR01KVk09TkZPS01CREQ8UVY9QUFCRE8xOD03Nj9CNzVVWE8/SE5RWVNQUVVLUUpKRUFFTVE/Pz04PTtHUjxFRFFCR1lNS0FIREU6OjM5S0lCPkNCOTlDPjxAPjs7RzctMj4tMYJoTnpcLzBraGA8PUJCODZ6Zlc7Oj0uLVJgTVVIfmVeSEWrlZuhn7uvmZSgjJOrnJGSk4mrjYahnoyjrJSjpLbGvrTAucLCx8nFws3Iwr65sq+6tcHCybXGssK8tbqqqK2tsKKjmKq0u6appquqnamvp6Oqq727qKy9tbi+x7y3trnCs7/Btaq2t6y+pY+jmJKioL2fiZqhmZefno+3n6mcpaKbnKGaqKSzoJudppyoqp6YlZCUm4uWiYykoZSdop2gtK+lpZKvqpmqqZycoqKokJSUn4KPnp6blamkoaGztLq0rai2srKenaOlm5eUmKqhnnVcWV1cSEdFRkxQSU5FR0hDU0xKQkVHQVdTQ0g9QUdRMTtCNzpCRjc5XFlLQUxQVFVTTVdSTlVKRUBKSk5POURANT08TlFDPz9QP0VaTUpBS0RHQDUzPUlHPz1FQTk3QTs8QDw8M0A8Lyg7KkiRQjpTSjAsW29XNzE8Kh1CgGRUNDktMTlmXEZDQ51wYkdFp5ejn57DrZyXpZiaqpyXm5qPqpaVp6aVrayZoqu2xMO8vrbBwsDHw7/Mxbu9ubKwubO/wse1v7C8t7m2paSrq62goZmqqsSipKmrpZ6sr6uiqam+t6etv7K5t8e2tbm5wLPAw7i2s7SwvaOXo5eUnJSun5Cio6Wjo6CQvaWpnamrnJyhm6WevaKZo5+iqayhnZeOlp6TnoePhI2Tn6SgnrWsppyVsKaZrqWcmaicn4yYlJ6DjqCZm5KlpJqYq7G1saqlqq2snJigoJKOkJWonpRlX1dfXE1IR0lOTEhGRElCPlFJQTxHSUlcUk9LPUlPVTVCRjk+R0c1Q2FaS0JOUlVXVlFYVFJVSUA4UlFQTTpHQTRDSFFTSUM7Qz5HVktDQE8+SzwwNjtHRj47RkE1NT85Oj85OzE1RDAtLC9Ndlw0S1o1LE1uVzwtPSkeI3piUTVDS1E5bVFGPEt4ZWFWS6Kao5yexayhn6yfnq6gk6OflqWgpqmsmLaxo6qztsXEvb+1wMK7yMG+yce2uLW0sbO0t8HFtr6xuLW4tJ+mrKqsnZ6epaTBpZ+prZ+kqq2voqaovLWmsb25t7bEsrS4u8C0xcK5ua+ztbWjnaWVkpShrp+Zop6pqKyjmsKsqZ6srpubnpmloL2hnaSYq6uspqGajZqfkp6Jjld/lp+loaC4qqaTmLSinrCfnZmtlZ2OmJOcgY6fl5WNoaOWkKWtsaupoaKlpJWVnZiKjpGSpJ6IXmFYYl9LSEpKTkZFQUdLPz5LQjo5SktOXVFRST1MV1w5Rkk9RE1IOEhiW0tDTFBTWVlWV09aXklBPVdRSkw/SD81SExYU0hBOkBBRFBIPz5RPks3MDk5RkU7OEc/LjY+Nzg+NzcvMT85MSUxUVVtW0pPMTA9Z1dEMTc9LSt3YFM2U1trV3FHRTY9dWVcS02enqGZn8SopqG0op2zqJSrpaCkn62prJ27sKistrHHxcHCssPDvcbDvMTJvK+wtq2wtK++w7S5srC6tKyZqLGpqpqdpaGnwa2brLCbqqOusamkqLy2p7e7vrC3xK2zs8PAtMi0vListLatqqKmlpWVo6yhn6Cbp6uwr6+7saagqaiamZiToqO4oKGjkrCwrKWmn5OinpWej5CNlZ6bop6ntKemjJeym6KtmZyaq4+dkpWSmX+RoJWOjZ+glIulq6+lpqGcoJ2RkZqThYqRjZudfl9kWWZlSUhMSVNBQ0BJSDs7Rz85OU9OVl5SU0o/UF5dPUhQQkxMSTlOY1xMRUxSVFlbU1VPXGJIQT9aUUFIQUtCN0ZFTEtNPztCSEROQj07TkBBMy85N0NCOTdGOys2PDQ2PDI1LS80QDErJlZ0U2VPPzEwNGJbTTIzPjA8dl1eP1tUXWVwQDg7SJZ3ZUE0nqOfm6DDqaSqs6KktaqWs62noqSyrK6pu7KtsbW0xsDEwrTAxL3JxLW/x8G0q7Wor7isv8OzuK+ttrmlmKqyq6uYn6aXrbu0m6iwmq2grbSyp6u5sqi6tLmzucCqt7LEvrbHqMCvrre1qaesoZiXkqaloqKYmaWvuK6ytbagn6mkmpSWlKSgt6KlpZawsrKnq6ain5qam5WXqJ+gmKGer7Kipo2WrZikqpaXnKKPmoySlpiFlZ6Ti5CbnZOKqKiqoqagmZ2Vi46Zj4GFlIiTnndhZ1tqaUxPTU5UPUNBTkM7OklANzdST11eUlZRQVdgXEJKU0hWS0g6VGRcTkZPTltXW1JQUVhdR0FCW1BCRz5OQzlIR0hPUD8/Q0lCTEI8MklBOTQxNzdCPjs3RTcrNjkxNDgwMS0vLjw2LSNCcWdzazIzLzFbYloyMzgwNnBbYkgwNElvZ1VDV0aMeWZDO6OjnaGmwKeor7GiqrWrnrqxrKSrtLaxsLm3sLe4uMW9w8e9vcTCxb+4wMXAuam2pKy7rcDBt7eqrbG6oZOtsa2ylqSnkaq5qp+msZyroK+0s6uptbatvK20s7m3rLixw7vAwKfEq7G3r6mrq6eemJmroaKhkZihsa+zrLC5mpupn5qXk5inoLappqOisbG0rLOoraCcoKCbnqWcopedo7Ovm5+Qk6SZn6eZk6Gdk5eIk5aSlZackoiQmpiUjqiopp+im5ibkoWNmYp9i5WEjZloZmtgbG1XUFFbVUFCRVRAPDtJQTg6WFBkXlBXV0VZX15OTVJOXktKPlljXk9IUE9cVVlQS1RXWkk/RFhQREY/TkA9SUdHUVBCPURFQk0/OjFEPzc3NTQ3Pz05NUU0Kzc1LzI1MS0tLiwxPSonKz1ccD0+MS4wZFpjPzE2NDdnWWBGKD84bH1nW1Y7iXtjQz6nn52iqr2iqrCspLK5qqa2tayhrbW9r7O4u7u+t7bAwr/JxLnEw7+/t8O8wLautaart7G7vb60qa6xtp6Wq66nrpemqI6nu5+krLOerKKxsLOsqbW0tb2usbK1rLC0s8G7xresvbCxuKytqqOypp6lqqCkl5Can7Oqs6urs5qdp5yblo6hpqS0rqihra6usai0rbOqpJyfqKSelaKZm6i1qZeZkZGdmZ2fnY+pnJWXhJSWip2Ym5OKjZaWmpampaOgnJaVlpJ/j5SFeo6SgouUZGpxZm9xXkZZZ1ZEQ01XRFs5SEM2Pl1RaFxOWl1HW15eT05SWGRKSkJcYl9RTE1PWFdYUEpWVldMPUVVSkVEQU1AQUZISFFQQTtHREZLPTg3Qj02ODcxOT48NjVEMCs4MC8wNS8qLC8tKj0sLCUyKyo1SzEvJ19eX1QxNTA9YFZeOCpDM1lVXGdLNox6ZkxApJqhpa23pKyqpq+ut6qvtryop7G3xrextr3Bw7W1usS+zMa5w8C5vrnDt8C4sbOrqbq2urm+tKmtsLWXmKesqaybq6uOq76dq62xo6ugsa2zrq21sri4qq6vsai1r7W7vMqzqre2sbSvrqahtKCbqa2gppaWm5qyo66hpq+XoaSampOOo6aos6qip7Otq7alr7K2r6OZnaynmpefm5mrt6KXk5COmJygl5aSqZ2akn+Rl4ycm5iWkIqUkp6ZpKGioJiWkpKVeouPhXqMioKKkWptd2x0e2FGYWtZSUdaWj17SkZENkFiVGlbTVxiS1xdW1JTUmJgTEtFX2BfUUxJUFdWVU9HV1ZVTjpJVklIP0NLP0VESEhRTkE/SEhIRTw3PT46NzU2MDk/ODY2QiwtOCwvMDQsKCwvLSo3NigoOS4kOks1LiJVX1RfLzUoQ19RXC4qQS9KR1BbRzNjWVVLRJmXobKpsqqtpqSvrraquLa6pay0t8q7tLu6v7+1s7fDwMzIvMO8tr2/v7e+u7C7raa5uba1wraqrbC3lJanrqupo7CplK+6pKyxs6eoo7K0sbKwtLG3s6mvrLKnt6+3tMTGt6m2t6yxramno7agoKiyoaWVnJqVsp6onKCqjqmjnpuWmKampbioo7K1rKiyqK6ytqukmaCrqJucnpyUqbiclI6OipeboZePlqSfm5SCkJSPnJqXlpWIlo+XmqecpJ+Rl5GQlXaDj4d7hIGDi4psb3Z0e35cTGZtW0tOY1w+YntHSThHZ1dmXExeY01ZWVdVWFRpXU9PSGBcXlBKSFFWVVJLSFdVVk04TVpORUBGSz9IQkNLU00/P0xPSEA7Oj47NjswNDE8PTQ1OD8pMDcpMS4yKSksLC0rLTkkMDQyJTlCNy4jQU5HZTI3J0diTFYlLEEuPUVMUTwzcmtJQ0ORmaWvpa6vq6ilsbO0q7iyuKGstbnJua7Bu8O4s7G1wsLOxcDBvbS9v766vryyw6eouLC1tb+8rquysZugp7GtpqavpZ2yta2qsbGsqai1u620srSts62qrKisqbitsrDIwbmlurGpra2lqK6xpqWkr6SpnJ6dm7Cao6Ojo5Gtn6SgoKKrpqe6pay2tqarrKmtsbauo56jqKqboJubkqOzmY+JjYaQoZ+UjJObnpGRg4ySkpyZl5WUh5eSlZmnm6CejJORjpB3fY2FfHt8hoiIcHJxfXx8XFNkb11OWGVcRkSWW0c7Tm1YYlxNYGJOVldWV1RYZ11RUkxjWVpUS0dPVFNOR0lWU1xOO1BeSUJESEpBRT8/S1NPPjpOTUM8PD45OjU9KzMyPTYyNDk6KDQ1KS8rMSgpKywtKiY1Ki8mMCkzODoxJiozQmM6NipIZUhKKjpHPjNCSFMsPpBrO0dIj5yqrKOqsaSppbS1srW2srKirK69zLquwLrHsbSttMLD0cXGvsCyvsDCu763u8Smq7arsra8wK+rsayfo6etqamlsKOqsqqvrLCvsK6stL2ntrCyqbKpq6Wlo626raqyw7q2rbupqaisqaexpaqlo6+qqKKfnKOtlaWemJ6ZrJ2ip6miraakrqy4s7KiqqOgq6+xrJ6fpqepmaSZmY+fppiHhI6Ji52gjoqLlJqNjYSFj5SenJSXlYaWlJOXpJydm4uSkI6Jfn6HhXx2foWDhHJxcId0bF9aYG1hUXJwXEs8hXxGP1h0WGFaTmRcTlZWVVdRXGFeU09OZ1hWVktHTE5SSEVJVlJdYzxQXUQ8RkhIQkc/PUpQTDo+T0o9OT89Mjo3OyoyNT4xMDQ4NSg1LyosLjMwOyksLCclMjM0JCwyLTg2MCkoMTtcSjAuSmdFRjY7Qi80RUtYMkCVWT1MRZaYramiq7Ocqqqxt625t6+spqurvcm8sL22wq+xq7PDw87Pw7+/tMDBw7m/s8fDqq62rbK4v76xrK2rpKeqsKioqbGltK6qsa6usrG0rrW9pLezrKyuqKugo56wt6uqrbq3pbe2pKqnrKuqraGpp6eysqSnpqGhrJeqoZWboKaepaKqpK2joKexuK6upKajm6qsraqdoqSjpJigm5aPl5yTgoOPiIWboIuJjYqXjY6JgouXopqQkJuMk5KRk6Oam5qJj4uLfIaAgYN6c3+Cf3xydYukh3hrX2BsZVdkhmNOP2eTTEVieVdjWVJlVU5WVVZUT1xdYVVLTWhWVVZJSkhJT0JHSVNRWW9BTlhAOkpHRkVHPj5FUUg4Q0tFODdDNzI6OjoqMzk/Li80NjMpNCsqLCsuIzQuLSsmKCs3OSomNis8LTIsJjA2VlkuMEpnQUE7O0IrOkpPXjREhz1HRkSXk7Cmo6uxmKuqrrast7OspqyqqbzAwLe4sry1prKww8nL0cDAu7m/vsG5wbnAw6yxtLGzusC+srCurKurqLaqp66vqrmwqLKyr7Ott6u5uKa0t6uspKmqnaSes7OpqKS0tKC3rqCqqKqoq6egq6ypubaqqqqqoqqgrZySqqGdoKWipqOqn52ota+ppqujpJmlqKeqnKKjo5+ZmaCQjY+YjX6HjIeDnZ2Gg4iJjYyOi4KFlaGZjY2akJKRj5Ofl5mWjIuDf3WHgX9/eHSCfnh2fYCHnY9vcWdmb3dcX3KIak9emVZIbnlVZVdRY1BNVlRVUE9YWmJVSE9pVFVTR09YVUk+SUhPUVB4TE5XPTxLRD9AQTxAQ1VDOUFLPTU7RTEzOzo3KjQ6PSstMzQxKjgqKisqLCkpKC8qJiklMzssJDIpMjAyMSUvMVBhMDI/Zj1OWD9DLD5MVF8wSmk1T0Q8l4+xoqasr5qspq2wtLWwrKawqqm6vru/sK25rqK2r8nHyNHAvr27u8G9usO/vr+tsbGxtby7wbGws6qzqaS0qaWus7O5saOuuLKxs7uru7Cqrrarqp6qq5+joLauqaGfsLKhtqqeqKeqo6qhoq2tqL6wrK6toqiooKyZkLChmKKgp6ifqJuaq7Gqo6CuoqGUoqSjp5iaqKWYl5iej4qHlIh9jYaEhKOWhIGBioWNi5CDg5OfloeRnZCTkI2RnJSXj4qGhnh1gn98dXh5f3lycXdmfoakdmlfY2mAdGaIjHxSWHBfS3hzU2RUUV9NTVNaZk5MVllkWEdSaFJRP0JOUWFROklITFNJcVFMUzs8ST87PD07QEBXPDw/SDczQ0IxNTo5My01OjopLTMxLS01KSgrLSw0MiMyKScsJS47LiYxLjAtMTQlLDBLZzo0OF89YWQ/RjFDUFtbKkhMOVVANJKQs6Glp62kp6Stp7WzsqulsKeqt73Au6+nuaqmrrDJx8jRw7y/vri9vrzIusC3r6+zsbq6t8CysrqsuKyitKeorbO3urOoqL62r7e+sL+nray1q62cqa+jn6StrKicnqqypLSom6unqaOonaOpqKm+rLSwrp2qpKCunJuzopWkm6SmoKWbm6qspqCcq6Kck5yipp2Yl6ipkpialJCKgo+Ffo+DgIidj4V+fYuGkI2Pg3+TmpKFk6KMlJGLkZuSlYeJf4Bye3p+fGl4fHlzbm56ZoN3hYpkYWZfcYN5bGZ4XV5UP1d7bVRiUFFZTExOcnVdSFpbZ1lFVWVPQz5KTkRDQTlIR0tTP2phSVE4PUg8PDw+Ojw/VDY6P0M0NUg+Mjs1OTAyNzw1KC41Ly0xMScvPktIMCUaOTAlLCwwOS8sLCs2JzE3Iy0wR2lJMjRYPWZiQUo3R1NgVSo9OUNWPSqQlbKaoKGqpqWiq6W4s7SmqrGmrLfBvbWvormsp6ewwsrJzMG2vcC0t7+6yLTCtLKxtLG9t7m9ta24tb6sobOnq6yxtri1rJ+/vaqzwbS8oa+ztaqsn62wo5ylqaqknpyksKWwoJ+rqaehqZylqaGtvKiusa6hq6Okrp6fraaXn5uhpJ2gnZukq6Obm6WllpeVoKOXm5alrIyekZGRi4KKgICOgXuZlIyIe36LhY6Ni4mEkpeQhpSjipOSh5GakZOAiX15bH52eXhjfHpwbm5wdWZ/cmqEaGRmXWtyjGxgaHBgbz1beWxVXk5QUktKTVRaV01cXmxXRFdfT15PSE1ERjs3SEVLTzxyaEtLOUFFOzs9Pjs7PUo0OUI8MztHPDQ/MTgtNjg7MigwOS8sNC8uPS0qSz4pHTQ5JicuMzQuMCsvNCYsOiQ0MUFnWTE0Uz1lX0RMNktWZE8qOzFOVz0jlJqtmqCYqKSkoKikuLCvpK+vqau4wbmyrZ+5r6uotLrIy8i+tsK+r7S9t8S2wrGtuLGywLS7vbeoube9qqO0qKmrsq+6saucvb6msMG2t6KvtrWnpqews5+epaaooqaZn6yoqZ6hqq6moKaYpKmgsbmfpLGvoayhrKScp6eomZqbn6WWnZ2bn6unl52hqpOalJmflJmWoamRmomOkIZ8h36CjX18oIyNiHiCi4SJi4uFh5OajomVn4mRlYKLl46RfYV8c3B+cnR0YHp4aG1ubm1nfXFje21pZGBbZIR+XllzanJJSX9pWFpNUExLSFBSUUlPXF9uU0RYWlJnTkdLRUY1NkhCTEk1WmVKQDZFQjk6Pj0+OjpDNTk+OjNARjwyQDIzLjo7ODMmMjwwLDg1QiopLUIqLDQ7Tk5AOzczLS4rLTcqKjwlNTM8ZWMyNE0/ZV1GTz1RWmdIKj0vV1Q1KJefp5qdl66hoaGlobersqa0tKmoucO0sq2guK2urbC1xsjAtr7BubC0vLe+u72vqr2wtL+xvcO5qbu6t6entamorLKutLGonL+4pq69uLOgsbewqKWnr7GboaSgpaWgl5yvpqGeo6ivoZ+hlKWloriwoaaxq5+so6+YnKqlqJ6Xmp6llJudm56orJqdn6aXl5iWno6Tl6KoopCJi4+GeoR+hIt6j5eJjYZ4gYaDh4uNhY2TmI2OlpmKj5d+hpeNj3mBenByd3BwdF95d2Rra2pnZoJsZXJqa2RnV2Byf15Za3VpWEV+XlpYT09LSEhSVUcyOV5ebVBEV1VZZUxISkVFMDdGP0tCNklKSDs2Rjk0OT49PDk4QDg7ODo3QEk+ODw0LTM8PDc1KDU+MSw7QTEoKzY8IzhSPSoxMTM+RDUsLSc0Mis7KzEzOWNsODRIQmZbSFRDVF1oRS46MV1RLDKXpKOYlp2rnqaho6G4qrChu7ilrL3Dsq+uorWwrK2vtcXEvbO+urews7m4uri6rq2/s7W4r7/BuKu9urSlorOrqau0ra6zpJ7DtqequLesoLO8qqelqK+rmaKnnKSmlJihsqWZnqSpqZyhn5SmoKS5qKSnraaepaGok6CpoaGgmZueoZOcnZeho6ycnJujlpOWlpyOlJOjp6SQiYqOhnmEfIWGfZ2NiYqGeICEh4eIkYWUk5KMkJWUjY6Ue4OXkIt3f3xtdXNtbXRieHRoZmlmY22DZmdoZGZnaF1kYWhlWmV6YmBQc1RbW1NLSkhJT1NAICppXmpMQ1ZVXmBLSEdFQy46QjxGPDZLUEQ4OkQzNTc9PTg5NT86OzQ+OEBMPT45Myk4Pjw6OSo2QDMuRTQoKyw+MC1PPy4rLTctMTE5NSwmLjUtODA1NzZgc0IzQ0RoW0tXR1VgaEIzNzdgTCcyn6Slk4+mp5yfnp6ktq2oqrq3p6zDwLavrKK2rqevr7fAwLyxwbexrrK2tbm4tayqvLOvsrG9v7euvLywpZ+2rKantaqrr6GhxayqqLK1rK20up2nqauxpZedqp+npZKZpa2imJ2kqqGboZyYoZ6nt6Wwq62hoZ6doZWhpp+ioJmcmpyUm56Vpp+uo5mYn5aVj5WZjI+YmqegkIeKioh4hXeCgoKdh4qCiHt/hYiFhZCElpWPj5CRkJGNknuDlY+Fc39+Z3lwbGtsZ3Vza2FmY2FzfmFkZWZkaGhiZW5ZXVhcbGNhTGdXWmBWSUdJS01SWD45YGxpSEJVU1xaSUdGRUEuPD85QTg5UkZANzpCMDM3PTc2OTI6PDk3OjlETT1CPDAqPEA7QTwtNUIzNz0rKywvQSpKSy4vKiszNzIyKDU3JCs3LjcyNjg1XHlOMj5IaVpMWkpWYmZBOjNAYUUlNZ2loZKMr6GamaCXpbSyo7K+t6Gxxbu5sLGjt6urrqm5vby7rcCyrq+utq+zubKnq7mwr660tru2r7m+raaetaugobKmq7CgpsWhs6awsrG3rbSdq66srqKZnairpp+Vm6emoJmlo6mdmp+blZ2drbGluqiuoqGam56Zn6SapZ2Xn5iclpqhlKqXraqclZ6dlI2Vmo6VlJinp42MiomOe4F0goKLmIWGfIiIhIWKjIiShZSck5KQkJGXj5B/gY2Og2+Cf2d5bmlsamdxcmtaaGNhcX9gZGdqbWpkaGVjbFxsbHVxYlNiaWNlWklHTE1PWVFQVWFlgVRAVlJaVEZHRkVALzw9Nz82PEVNYTg6PzI0OUAzNzgxOD83PTg+RkpARDkyLT1BPUE9MDVAOUAxLSsuMzw7SzYvLissLTI0OjUjMyopNi41NTQ2NVp8XTE6TGpbTVtLWGRjQEExR2BBJzSUo52Pj7KdnJWhm6mzsJ+4wLagtMG7vbmxprawqa6luLm3t627sK2rq7eqtbmtpLO1sa+psba2sbO2u6epoLaqnp+ro6qunazEma+nsLK4tayrnrCtr6qim52kramblZ2npJ2aqqOllpqgnJKco6yrqbuepqSgl5qanaGPa6OWmZ1xg5idpYB2kqypnpeYopOKmJmAl4qfjniFko2CbGl+d4RxbIaKhn2Ei4ZvXWRhZ4SYhmyLkJSSdXiLhH+DkH9miIFodmpmWFxpdG5NT2liZXCDZV1kZm5qZ1xbXImQhIhoT0tEOEZUZ15KSFFQVVZLSFJhcHRlRltRVVBFR0ZDPjE7PTY9Njw0Zlw1Ojw3NTtENDg2MDpCNz86PkZMQ0IzNDM9QEBAPTI4QEU9MSwsMDg+RzcwMS4qLiovNjY4LCMxJzIxNDoyODZYgWwxNU9rXE5bS1tmYj5HMU5fOysuj6SbiJaym52UoZyqrqyjvcWvqbfCuL68rae3saarpLi0srOxua6pp6y0prG1oqe4trWop622s660rrSiqp+0q56jpp2nqZywv5WoqLG1ua2tpKisqquloZ+coaiom5iipqacnKeonZOen5mQn6irpLWwo6KjnJaYmZejiKGPkpqHoYiVn6KApYCorZ+VlJ6UiYRyeI2Og4igdYeMaZaIZn5zeKBvh4eEfox8f6GgoJmAfIefdIiOdpuKa4eCg25pZWR7bXJiVIZtZG1pmHFYaW9thlZdaFpraVmHcGt5codoh4RZXkZOPkZeTUZTVlZRUFJXVGdeTVpMUlJQRUZHPjw0OT05PDc7MDw8Nzk5OjY9RjU4NjA8Qjs8OT1GUUc9LjU8O0A9QD41OUdBODIqLzE8STovMDEuKi8oLTQ1ODMlJjIxMTU+MTw4WIN0MTVSa1tPW0xbZ189SzFUXTcvKI6nmISerZ2amZ2fq6qoqr7DrrK5vLfBv6qkt7GqrKazta+vs7erqaWyraW2tJustba1paaps7KtsqivnqqhsqmgpKWcoqWesbiVpqiot76mraapqaynpaGfmaGopJqZp6OkmJylqpeUopyUk6Smp6G3paOfo5iVk5iUnYiukJiViqqMmaSdhrGBpa+glZuhl3qC1KiAh5TAm8Z4d7Glt5dkgMCcv3mEhHmPg3yQkJHKcZa8nMV7cranupB7gWyXsauxeWlsWLGub2ZqvJO8bmd5bXGO2H1SamK2snx+cJV1mqGqkFZOV2FPVk1GVlxYUFBTi1xXW1BBXERQTkRGSTw8NTc9Ozo5Oi49Ozg3ODs5PkY2Ojc0PkA+Njk/RVJJOi41PjtCPD9BODpKPjUyKjIyQUUvLjMyLisvKS0vMTg2LSAvNDE2QTE9OleDdzExVGtcT1tNXWdcPkwxWVo0MSGPp5SBqKqfmJ2epa2yqrDCvbK1wLW3v8KrprSuramor7SqsLa0qKimtqaoua+csrK2qqWkp7KvrrGnq56npbKloqKgmJyiobKvlp+kobW6o6qooKytpKGdm5qjqaCYm6mgn5eeqKiRnaeblJ6ip6OhsKOen6OWlpOYkpmFr2tqjI6qf2iFloetZnKgn5abqZdxrqGkf3e6fGugj3axX2q0W6WAZZyQYGaBemZ/aXhrqmW+c2emjHaxanyxeHWSlGNtbaduXISgRWlniJZFdZxffWZ7o6aBWF6Kq2d8jHd7aqg4Sq9bWFRsY1pLT1lgXFZWO06IUFdWMElTU0pDRUY9PzQ2Pzs4OjkwPTg5OTk6PTxEODs6Nj1BQDY8QEhRRzkwNzxBQz5ARDhARz0xMy0zM0UzLy41My8rLyguMC46Ni8nJDIwM0IvPTtVgnYyLVZqXE9ZTF9nWTpONV1XMzEbkqOWg62npZ+jpauyuK20vb6wt8WyuLrDp6mwrLCpqrGvpLG7saWlr7OjqrmpnbOzsaOkoKqtsKyvp6igo6OxnKSemZaZnZ6wqZico6C1s6GrmqGsrJ+dmpego6mdmZ6loJyZoaekkJ2im5ehoKyfpqagmp+hlZSRl5GbhrWbtXmHqZq2mXiHtJu3f5WYmKyXf2uBpnuBhYaRlJJ3q2dqsVuse46HlHSJcI6GgX+IkZd4g4OLl4yDoI+FsHZ3n3Jra218i0+lWEhkZJl+Y2imX3hxdFKShl1PqW1ib3qFgGGdL1OibltUa2dgTEtdZFhcWkI+sHdXWEEjTWlFQkRBQEExOT44ODo4NDs6OTw5OkE6RTo6OzY6Q0I4PT9LTkg6NTpBRkJBQUQ8RkQ7MDIwMTtFLDAuOTQwLC4oLzMsPjgzMR8vMi1EMTw8U31uMytYalxPWE1fZlc3SzlgVDUwHJeglYm0p6ehramos6yqu7fCsLzCrbm2wqutra+vqK+zqqKwvKuiqLato6y1pKWztKijop2oqrKosKimn6CgsJegm5aWl5uhsaWcm6Wptq+hqI6pp6mbnZaYoKapm5+dpKCcoKOlo5abnpianqOrnKaanJqioJaTkZOTnYTVk5m5cbHCf8aHfdaUnLt9nJeoko+djaR7jYahgKWCeat5j51Wr3uJfp9quVq5d4eEfaaDlHyZe6l5jp2Qe7FtjoR1kLyGb5VQr6fFilGgemNgqmFzcoZrlodeUrW0yIV+iXxjpDRDnXVdUWloZFBAWGdZY2FKSE1qSlpTT1lmWkNEP0U/MDw8NTk7NzQ8PDg9OjxDOkY6Oz42OkBDOzZAT0xIPDo8REhDQkNEPEVGODEyMTFEQi4wMDQ4MystKS4zMjM5NzEjJTUqPjM9PVF3ajYqWWlbSltQX2ZUN0g6YVA3MiWco5OZsqippbOqpbWopLy4wbC6wLK3tL20tqeysaSytKegr7apm6m7rqOxsqGytLGhpJ6eqKmwqbSppp2en6yYmZmYmJaYo66gnJeprrGpo56OrKKnlZ2Xm6GnoZiioqOhm6KiqJyeoJ6VmZunoZynlJuan6GYkJKVkJ2Ism5otXKsiHCPp3K0dnS2e5yapo6QnY2jfo+eo32wdYKQ0tJ1XK58hX+kbpuqpmuHhX2tfZiZkHuxc5Odj3mzZZZ0hZ5un2aUUsmLWsJcn3liX61fdnOEYZaIXVnKnW+/fnJNS7VTVcZkVVFqY2VYQU9rX2xoUFVGSDk9V1JbV1hIQj9KPDI/OzU9PDU2Pjs3Pjw9QztHOTtANzs+RDsuQ1JKRz4/PElKRkNFRD5JSToxNzQ2QD4vLjI0MjUyLSkuMjYsNzQyJh82MDs1Oj1QcWg5J1dpXEJNVF9lUDVHPWFNNjIuo56RprCtpam7raa0pae2u7yzu764uLW8vLSmtbWjs7KjoKywpZiou66lsrGctLiqoKWdoaqlsqisqqWanZupn5aWmZmTlKWropiUp6uxpqGVkqyfpZKUoZylp6CVm6anopujoK6aoJ6dkJabo5+cpZSdlZmjnpWZlpKbhax8eKh3o4+Lh6pwrYyFqISam6OLk5uLon6Rl4euhH+Bs1xyslOvfYKCo35x1313hX6PnoeZmnevhoqRnIh3tGGaZZuBgZVskluwV0uadZh5ZmGtXnZ2hWaXiGpdr3aVno93azV5yK6zYERVb11nYEVQbF9wbVZVTS5lY2hSWVE7QUNATDo1PzkxPjwxNj85OEA9OkM6Rzs8Pzo+PkU5LUVVSkVAQzpNS0pCSEc+R0s5Nzw0Njo+LzA0MzMzLjIuLjE4Ki4zMiUhMDQ3Njc9UGtlPiZWZ1xAPFVfY042R0JgSTo3N6CdlKG3sZmzwa2osqeqs7q3tbm+urizt762pri1obauoKCprJ+VqbarqbKyq620pJupoKCoorWnpqqkmZ6VpaGUlJ2akpalqJyUkaitsKWglJmonqKPkaKaqaWhlZqmqZ6dpJ+tnKCdn42UnpyfoZmYm5WWoqCUmJGnnYepfn+meaGPkISqcK2Ng6eGl6Gji5iXiKOBkIaUqnp/i515cLFaqIOCiKB4dNh/dod0qIKPm42SpHyWkJ+Ee7JenGSgfYKVbpNdq1xbk3+Rf2hnqmNyeoBqmIZxXataiaCPa21kT0pDoVxbTXRdYmZNWmFfcnRgSlU1SpqRWEhFPUdFQUwzNUE4Ljs+MDVBNzhAPDY9PEY/Ojw2Pz1CNy5IVkpFQEg2S0lOQElLQEVOOjpANC47PjEwMjE1NCsqMDUvNywmMjEoJCU2NjcxPE9lZEEmVWZbPzBUX2JMN0ZIX0MxPTeinZqav62Ys8Kuq6yop7WxuLG1vrq7s7K5vKq7tqGypZ+mqKifk6yxqbCrt62qr6GYoqCmpaS5o6OsoZeckqOglpWfm5WZoqGRjoyqsLCmnZaap6afjJKkmKerqJaYqaifoKGkrqOgnqGOlaGZoKCSnJeblZ6hlpaPrJyPrm5ytHSpjHeLpnS0enW0gpSnpJSdjYmkh451uG+Le4uia2u2WqGGZZeXaKCip22UcrR0k5l/s2qGkoitanW0YZ1mom+GkmuYXa1gTqF8h5FSc6NseX59bpiGb1yvVjycd2VUb24uW6dPY1JrZWJsWmJcYHF8Y1NZUT4/bG8yQkJAPk06ITdANi47QDM3QzU4Pz8zOzxDREJKRk1JRjYySlRLRUJKNklKUD9IT0NGUD08RTUwOzswMTAvNzUsKywzMjYvIzAwLCwdMjg5LzlOYGVEJ1VkWT4uVV5iTDVGTV44MUE4pZqcnrqkm7HArq2rq6i3qrivtcC1vbKxu7iswreqrKGdp6SinZKsq6i2pLSorqqhl52ooKWruJ2jrZyWmZCmo5eOnqGcmZ+gkZSVrLawppiTm6yployUppmlraOSl6uzpKCeqKywmKGikJmhl6CblpuXoJSdqZ2UkKuZh9SUmrt1scSAxId+1pecuHmKkpmOmIqMp4d5orZ1fXd2wYOasmGDunnAfHW4YrWBjIepfZWCrKlxe391vIinoGmdYaaOr6J+jXWHq32+bnO8dLKDdXiAiW2aiHBtjaR0vV13fVthebxqWlZcanpeaWFjZmJueW9YW1lDQUBxP0NHKzRIIic7PzEwPD83OkI5OT1DNDxATlpeYGBfX19aUFBSS0VGSjRITFJASk5FRk9CPEU4ND05MDIwLjg3LSouLzE4MCItMSwzHiw7OjA4TFhhRidUY1g8L1NdYEs1PExbLTY/Oaean6K8o5eww6+tqautsai5r7fEsbuzr7ywrsKyraajn6WinZyRq6Wqs6W1p62koJaaq5mnrLido66YlaGRpqCTjp2jnpmfmpCWk7C5sauVlqOnp5SQlqWdpK2fkaGorKCcn6mksp2ipI6moZWhmZuWlaOZkLCgkpWqnoWQmbaAkpKNuJZ5g5ObtndubG90b3mPhI6Jcp7Au7yae4GyqHCBdJG5g3yGhouGjXuKh4yXfaS7ub2cdXmzo3R1l3V0sHWZnmaHao22dHNxd7aLXoB5fIhng3lsemKLrHB0hX5XW6dpRGRaVGZfY11iUGdmcW51Qk1PTEQ7Wkw+SjI7MCA4PjsuMz1BOTk/PTs8QzZCVFlaWltbWlteYGJgXVNHR0g0RElUQUtOR0VPRj9HPDc/NzA3MC85Oi4sLy0qOC8lJjIoNCQoPjcvN0tUX0cnU2JXOCpPXV09KztWVic9OjymnaGhv6aVssKzrKqorauqu6+wxq+1tLC4p7W5rqukoqefoJ2ZlK2lrquntqion5yWoaSerKS9p6Gql5WckaKbkpCiqKKUn5eSmJSytbasl52jo6KLkpKmm6WrnJappaacm6GqpqaiqKGRrJ6Xop6Xlpedno+wqZScp6KPa39qnap6iXR/nI92e2aIe72+wLpvkoNxlIVfcmpaXpuKYWOHj5ZsYH+VY22cdmKVbICZlZRmXmBjcZuJaHKMfIaUZmp+cXR4f35jXHh1gWhQXG6EfHyKalhseoJxSEpvhXBOcU1EVlxmYUxbV2ZjXk9bbXVrclJPRERNPEhIPEw/MSwyQT84LzU/Qzw5O0A7PUM+UlZWV1laW1tcXWBhYWFgXFVHNUNGVEVKT0hGUElJSDs4PTUxOi4xOzouLy03Nj01JiIvKjIsJTs4LTdJUl5JJ1NfVjQpUF5MKDM+XE8nPzI+qJ+posGkmrO5tqOspq+mqLayrMissLSttqS+srOnoaSqnaOcmpqsp66kpbaqpZuYlqKcp62pvqippZWUm5agmpOZpqmokp+Qj5icsLK+q5qmnaeiiZORqZuopJycrKCjmpujp6yin6mhma6blKaglpSdn52XsaWZoqiZnZKfnaWmm6ikm56bnJuSl4Job35xd5GXlJCEibSqjYWYlY+KjJmXiJSViYOTk5GJjpKUmJSZl5qfoZqblJ+bjYF6pIVranyRfYF1iouDcoJ3eXZ2i398iWpzgXSEdGN2fXZrb3hsX2Jbb2dNWFlmal9XWW96b25mU09GUjlQWk5STycqO0tCNjM1PUBBOTpDPjxFTlNTVFZXWFpaXF1gYmJhX15eW1RLQ1JHS05ER1BMT0k8Ojs0ODksMjs4MjApNklSTzgiKSsvMiM0Oyo3Rk9bSSdSXlQxMFReOis9OF1LLDwtQLKgs6K/oqOwsbegqqazp6WwtarIq62zp7amwai1oZ+lppyllpWhrKetpKS3rKCZl5ahmK2qpcGfrKSWkpyXn5iUlaOenaOok5CYqKiywq+Zqpyqno+Vlqmeqpyeoa2ZoZudoqWvpqGjp56smJalnZmaoZ6enbChnaKnlpmUmZSipJikoJmij5iVjIuOkJiukHyVnIKRgYmpqIWAmJeLhI+giHuEkYWFmpGHhoqVj5uXjpGYnqOWmZKQnI1+jWWhs66FioR3e5CLfnh5em9meZGBgYhrdYF5iXFoc395dYOGgGpzYndlX2hlY2Rmallre3FqalxSS1BEX1VGQD4+LDRARjs0NTs+QTs8Pz4+SE5OT1BTVFZWWFpcX2FjYV9eXl1eXVhWSktMQklPTVJKOzw6Nzg2LzM5NjQuKCYkLTEuLikrKjclKzwoNkNNTEQvVFxRMDVNWzE3RTRcRzU8LECyn7mvvq2rrbGyoKqmsq2jrLOwxbCrrqSzr7yltZyhqKOhnpmXqaeqpqWms7aflZWempqwpq6+oayikZGempqUkpahm5epnYSdqaujtMezn6mjqpaVl5qnnqicoKSslJ+fnZ+qrqikoqqhq5qen6CYpZ+cnp2wpJmfqZSamZ6Sppyaqp+cmGaFlH1lf4+bkGN6jW1oanqQo6tqZZqYfmeFi2VlaWh6jaKOa2iMmJGid2tqi5mjn5hzbG16hIyGeVhlXYaCXmyLi4N3XGh0d3eSgIeBb3iCeIBybXiEc3aIh46DemiEWF1qdGRdc4hoanxxbWNdUU1XSmRYQEkzPUY4P0ZENzE8PT9BQzs7REdISElMTk9SUlRXW15gYWFgXV1dXV1fXlpUT0RIT0tTTj0+PT02NTM1NTU0KiYmJSwqJS4rKyc2KiQ7Jy9CSVtKLjZaTzYpRVkvRE8xWUI7Py49pJ66vLmvq7Kwq6Wora+xp66usL2xqqmlrrCxoK2XoaSeopqapqydraSmqKq0rp6WpJCjsKa3uaWuo4+PmqKak5KboJiYppZ7pKuiqLTDt6Shpq6enZSeo5+jnaSqqZOfoJ6gqq+pqaKpnqabpZ6noKyXoZulsaWYnayWo5+bk6eZoKyan3+9hIp0tHOFn4ataHe5xLhxkqGjeqaZmXSrgn3LwMC6cYujh4OefZaYiJ7AvYKWnZ2NnMHBfIF6kYyawsB9aqWycI6Cb8p6gJt4koOOgHd5gYB5cHt/hnB4hIqSeGx1kWFlXnhkX2WBYl10aG1kYlhMVUlRWUhPRDJJRT9EQj4vPD8+QEE6OERDQkNFSElLTU5QU1ZZXl9gYV9eXl5eX19fXlxTTVBHVU5BPz89NjQ2ODI2NiomJSMpKiYuKyopMTAfOSojPklbTCojQ1AvI0ZbM1BZL1VBQjsvOJWhucO0r6+/qamUo7CqsK+uprK1r6qnp6axq6CrmJujoJybqqejnqyjpamlpbSknqOUpq6suLSnr6KSkZmdppORoKGXm6CeiKarpKutv7+woKiuqJaRn52imaKkqqSUoaGdnayuqKqloqKkn6OknK2pkqSaqK6qnJ6rna6jl5inmKOkmZ5/zpR6e6WCepaXm1+tj12OqIChoXynlZt1q4OBr15kjKp7qIeFoHSXk4izY4KrhqCNjbNqhK90fJaHuGGCrVmjzW6Rdnvbe3+ZcX6IknZ/ZXuIdXZrfYdtfYSOkH5rgIxecGpwZ2BfeGRbcWhqY2VgUlRTV15KT0M0QUhFRDg+NTtAP0E7PThAPj8/QkRERklKTE5QUk9TXF9fX15dXV9gYF9eXltXT1VKPT8+PDU1NzgxNjQoJyQhJywmJi8oJiszHTYwJDc7U0wrLC1KMCc7XDpMLSFQQEY0LjGswcDAtLSwt5iekaSqqa21q6ayrKyspa2msKqhp5yappicoq+foZ+op6OmoZ+xrJyflaaurbGrqKyglJKbn6WTkJ+ll52opJ6to6qwqL/Fsqepsa2Wkp6copehqqqflaGenZytrqapp5umpaKgqpKss5aloquqnqSop6OyopObqZyinJaVkZehcoaMmHaGqIdxsHydcax9oKCCpY+eeKuCfq1/nXKtf6yHhp92mJJ7fJd/qoiijJGMnH2reoiTj59/eq1WnMR7kHCTwX2BlW11cIxtZndlh25heG5yboeJj46CbI6NY25zdW9gZm1kX29pam5mY1hTXGBaUlJDOElIQEM8PjxARkRDRUE9PDw8PkBAQUJFRkdFQENJU1dZWlxdXl5cXl9hX15eXVtaUkM+OzkyNDc4NDUyJiMfHCAxJyAxJx8nNB41LSY3PVdKLT0oPjEpM1ZARiEcRztDMS4rr9PGx7KzoJ2jj6Ojoq6vt6+psaeoqqmuq6ynoqSdmqOVn6aroKKmoKioo5+esKyYm5aop6+tqKepnpeVmqSikpShrpqdp6OurKKstam5zLGspq2rlpScnaKZn66snZahmZ6eqbGnqKiaqqajoaqarrGiqKuvppqnrKurs6STmaWnnJaThaRrpHWKeql1e7JxgqWKmItxiKCbh6RfYVKrhYCug5x1roKohoafepmXhntmgKOKpJiGgqN9qX+BlIauXnuoVZ2ikoJ7o5+AfMSwxYxzr7SzuXJiqa/CdGiLi5WNgGuWj21seHd3bmtmZWRxcWZ8aWNdVl9pWFhUTExQTENDQUI7Q0BAQkk8PTo5Ojw9Pj4/QT04NjtETFBSVFZYW15eXVxeYWFgX15dXF1bU0lCNjc5OjY2NCwmJCIgJychKy0iJC4hMy0mQERXSCxHKzY2KjFQS0wjIEE5RDQsJ8HJ1tbAoJmrqKGvop+xtLCvqayjp6erq6uppaagm6WfnaanpqSdrJqirKGkoK+jnpuTqqS1sK+hqZuclpWnpJGboqifn6acsKWiqLGstsextKmrqZWRnZ2hmaCls52aoZScnqeqqqKsmaqmoKGpobKtoamysqGcq6qxsLimlJimqpqdk32qbZ+EiHareXywboKki4iflpWeloHSuLS4yYGCsl9glKmDpYiHoHqYlpp5qsl0mqOUqKmQkpqMfpqJmsbGd2WhgqV0gqCOgn2vX2+1Y7F1S6OHbadHg5NkjY+ckHpulI58bnl0fHptW2ZqcnFngWleYVdjbVxeWUlMTEpFREJCPUE8QT9KOzc5Nzk5Ojs7OzMuNjxBRklMTU9RU1daW1tbXV5fXl9gXlxcXFxcWE1CNzU3ODUvKSglJiUkJiksNUZOUFBNRkxKVkYqTDEvPS00T1RRHRw7PEYyLCSnpMDHua2psq6tpaOcs7msq6Glm6imq6yppqCmpZiro5+vrJ2moa2an6mlnae1oKSYlKirtrOsnKacoJaQpq2Smpyno6Cqpq2go6epsLPBsbKprKeTiZedpZuipK+ml6KVmJylpamZrZyrpaSdq6O2q6CxuLCenLCotbW2p5aZqqacoZCDnk53moKAn3uEo3yCpIOGpp+cn5SEuHx9ermDgM3Gw7Z4m6KSi59+mZeXinafl4qkmKSofq+FnIOeg6x9mZRhpWyjcZCFkIF9loRyrGCkc3GAmmG8fVJVdY2RoZR6e4+NhnJ5c4V/cFtsbndzaoFuWmReZ25iZF1LS1FTQUdHRkg6Oks+QjEwODg1Njg3Ny0qNT09P0JER0lMTlBUV1lZWltcX19eXV9fXFpaWllVU09IQDc3Mi4sKi4rKicmP1FUVldXV1lYWFdVT1RGPEUyOlBbUxwbNj9HLC0gi4eZqaukq7mrr6Ccoa2ztKafoZWlr66uqaeepaWapKehs66iqaezoJqppJSjtaOjlpehqbW5pJujnaOTkKKymZ6bpqWgoq+snKSoorWxw7CtqaypkYeQnKedo6ScpZeemJiZpaOomKyhq6Kkl66kuqyhtraunp62tLqztqmaoLKkpqCIkNK1w7d6h46GkZOPgKZ3lKJ3jKGShaWDjHKriIa0bnNqmqSdloqffZeZh4eQc66CpZujjaaKk52IlJCabXCyXKVzk3qcbJl/e5l+bqlhonJzfp9ic7K4aHeOkqOWe4mJjod1e3iOgmxod2h4c26AdF1kY21tZmhgSllXVzxHRj9TM0BGPjwqKDYzLjAxMykmNDo7PD0+QENFSUtOUFJUVldXWV1fX15eYGBdWltaWFVSUlFGOjIyMzAvKysoQFFSVFVUU1RWV1dYWFdVVVZVUU9RW1UlITJBSCMqJZJyjYqtv7+8u7Wel6ikrraiopmVo6qorqmrmaWin6agoLWmoqmnsaSUq6OPpK2knpGamqq0tKSdpZypkpSXr6CgnqajnKecs5mgqqO1qsKvqKqooYyDj52ioaajlZqanJiamKajpZeppqugo5uspryslL2wrZ+jsbW7rbepnqu1p6uafKiSfXyweIuApKWInG2xb6CHrXyij4Ool5qCrIqGrYahlaiho5iGn4GZloF7kn6rgZ2Zlourd52gj4iTkn96r12jgX2mp2WegHyXdWquXaVscoaZXWBbjKBtlI+jloCRiZKIeHmBl39qbH5ifXRtgHlgaGVvb2hnaEJYX1o9SlMyUzhBQUM3JCQzKycnMywgLzY2NzQzNjpAQ0ZJS01OUVNTU1ZaXV9hYGFhYV5dW1pXU1BPTkk4MTUyLiosQVRWVlZVVFVVVVVUVFVUU1NWV1dYVlVVUUhGSUojKCi8kpqEqcbDt8G0n5utoK65pqOOmqOkoK+uqZ+jnp2tmJ65oKOrobCqmq6hkaqppZeKmpCtsa2noKibrZiZj62ioZ2loZmknK2Xn6iltqi+rqSpo5+Lf46bmqCmnpKUmZqTmpmko6KYp6qqoKKep6e8pJfCrKujoq20u62wqaO2sqyumnevf5CKnIWHfLqtiZhksIxklq59oZCEp5ecgq2MhbCHqJqkoqOShaBcbGuCs2B/rXx7goGybGdumZeLh7FafbVcpINryKJmn4F7u1l2tVqyfVOvgXqsWIChbZaNpZiHlI2Rknl3jJx9Y3N8YoN3dIB8YWpmb25mZWZPVGJbQVNdPUgoPjk9NCEhLCQfMS4gKjEvMDQ1Nzk6PEFDRkhKTE5QUFJUV1peYF9gYWJeX1xbWFVQTUpHQzU1My4vQFVZWFdYV1dYV1dYV1ZXV1dXWFdXWFlaWltcWFdXR0I70p+zsbe+u7TCs6Ocraelt6mgi5mgn52ysaieop+dtZigs6iqq56wrZ6snJWvqaOOiZuOrqypp6Oomq6Tmo+pmqGdpJ+Zo6KlmJ6iqLGou66kqJ6djnyLm5ahoJmQkpqbkZmXqJ6fl6espKOkoqOoup6fxqemqaGstreusaqhv7GwsJiCqpOjro6bgIakl5iQgIC4w7qEj52UhaiZnoOsjISviqmdm6arkn/VvcKqYqS/vX1/o4KD17u4tYSUkoKevb6Ea6OCcKuEb52AerKxx4Nrq7G9rHl4or67dICUjKOZjJiNkpl3f4+ZeWJ8eWSMZniBe2BrZWpqYlBiW1JpXD9TYEJMKTw6NC8fHyQeJTIgHSQoMDQ5NjY3ODs+QURGR0pLTU5OUVRXXWFcX19hXmBbXFlUUU1IQz48QT81PVNZWVhZWVpZWlpZWFdXWFlaWllZWFlbW11dXFpWWFRXWruVtLSywLqyvrOina6npbOnnYyXpb+ptq+nob+mprGbnrGcuaifrq+lp5WUr6yXjIOaka6mo6yhpZyqoJiKo5OmnaabmqCoopidoKysqbitp6Oal5J7h5mRp5uTj5CXmI+Yk6mYnpaop56opqChqrqdqMWjobCkrLS1rLKso7+rs7KddXaqpLaFZYmfcGeskIqPbm53pZCboYJ2spyYcZGOcperpJuZr6VybW1tZot4b22DmnGBempxaWeJlpWXcmlphYdncYdkXotjanBaXWd+eKZgYnKQknBmZICMkY6flJSWjZKaeoSNk3RkhndnjGp4fnlkbGNlbGJKZFdJalk5T2NETydKOSsjHCAbIiwpGBsYLTIuNTo0NTc6PD9BQkRFSEtMTU9RU1ZcV1tcYGBhXV1bVFBMSEQ9OkFCN01YWVpZWVpZWFhZWFdXVldZXV5eXVxcXF1eXV5dW1tVV16ola20qbq6srOrqaKun6OzqpiSvbHDx7y0qZ6/q6yjoKeroLqjpK6sraaOlq2qkIyFlZatn6arop+kpKCSi6WSppmpmpaiqaCVnKWlpq65qquZmpOSe4SXjaaXjZGQl5SOl5Wmk52WpqGZrqWcoau4nrDBqKW0p62xs6ywrqq8p7K8mIyjqaW1nImWopiHqZuPlJ2SqrSanKSuorWZpaSgo6SfpKailqynjZOTjYeTnZ2VkJmTmJGPlYV/pJqXlo6MlJOKkIiFf2iMgXWDd3WHjHGnbX2Wk5SUgYGPj46Om5CdkpOSnX+Fk4xwaI92b4l3dXx5aWtlY29jVWFYP2haR2JfTlcrRT0rJiE2NDAuHxwgJTIoKjc5OTQ2OTs+P0FCREZKS0tNUFBRV1RWWV5gYWJdXlVQS0VDPjk9QEFTWFtcWVdYWFhYWFlYWFpaW1xeX19gXl5eX19gYGBfWVlgpZapqqS1uK6vorClrqCgt7GQjqrEvMO5tqmhpJ2bpZ2wqKS3p52ptaeokZiso4yIio+cp5atpKGaqJ6fk5akl6iaqJmTpaCjj5qnmKC0uaeqmJqQjXuBlYuhlIqVkZWQj5KXpI6dmKeemrOinKWqtqeuwa+kuKewsLKvrK22vqSzwZqTp6WmtKKSnaaejqmgjJKfoq2xm6Kls6uzmqajn6esoKCenpitnpOaopyUkJermY2ZmpeQl5+Rh6CdlZSGlI2QjpaNgn9mjoh2iHd6iIR0nGqIkpaVkol9jJaRkpaQnY6Ykp2BhZeGenGUcnmJf3F7fmpuZF5waWBcX1hsYk9fY09YOUZGRD0yPD03LiolKykmHSY0MTY2NTg6PT0/QUFDSEpHSktMTVNTU1VaYGFpYWVVUEpBQ0I7OUVNVlteXltaXFtbW1xdXV9eXV5fYGFhYmFhYWBiYmJkYlxbY5iWpKijsLSsr6Oqp66gp7WqkY+bo7K5raqroaKZepyhsKSmsamXnLimo5SYqZyOhoqJnKKQr5+klqmgoZOXmZyui6qWjqeYp4yYqI6duLWjpZebjYl5gpOMm5OKlZGTkI6RlqGLnJ2mnJ22on6DrrSisK91pL+ks6B5e6OttcCYeLCmoYqAqn5kXGJ2n4+knoOWfm2UtZ2lqbGtpmagopV1e5yZcYGZqpltgKSpimWcpZyRmJmXjJOckYWdm5CVhJSIj4+Ti4Z5bJGIdohyfIaBgWFpiYyVk4xbdpWQZmiOi3F4n5WUZHeXhoF3l2iCiYJueX9rcGVgdm9ra2hbZGNhYW1RWT1NTU1SRj0/U0I5MC8eHyY0OjMwNjY3ODw7PkBBQkZIQkdGSUtMVFVVWV1fZ2dnV1FJPERIPDlWUltgYWJgXl9fYGFhX1xdX19fYWFiY2RhYmFhZWRjaGReXWaclqajobCxrKuqpqmuo6etpZKVqrSusKWZqaWqlnOLnK+gqKunlJe5oKCPnKSekX6IiZqejayapJWoop6Ol5KehXWuj4ilmaiRlqOImrizp5+YmIuJdHeSjZeTiZOQkJOMj5KfjJmepJibsJSAjJu1nbSMko+9p6J+p6N7pbK7hI6QqaCEjIWPsaqvjImWo5p5gIushp2fo6mrqomWiJt3pZx7iJyBmKeEgnues3uKhqCYmZWYl4GRl5aEmppieYiShY6Qk4uEbnKRiHqCcoGBhoCHdIiGl5N4lmiTdKCadHuZgZuYhJh+kImBgpdpjIyEanh7cXBnZXhtaWxqW2NpaGRxWltIU0tQQEU1LVlTVDYpITA5PT43NDM1Njg7Oj0+Pj9ESUBJRUpLR1NYW1hbYWFpZllRSDlFTDw/YlZeYmRlZGBhYWBiYl9dYGFhYmJiY2ZnY2JhYGVkY2djYWFonZikoKaurquoraCpsaanqqWZk6zEvK+glKWns5yPg52snaeioI2Qvp6ZjZ+aoZF9ho6Yl4isnaOWoaGSjZSJhoCRqI6GoZyjk5adhZ64saidmpKPhXB1kImVkIqTj46bi46RnZCVnqKUnaqGn7SJtJqui8qIq6+Kt4WNsISzs4epj6qajZ17qI9ye3ecjqaWaJWkebSMoaCoqpSawoKBq4mZoXKegJulfpeGlrKBoX2hk5+PmJiAj5SbiZmSi32GlIeNlpSKhW50k4aAe3OHgoR9hXWGg5iCj8VmgKmHj6JpnYGdloCZgIqLg4iYb42ShGd3dHx3Z2l2cGdoa15ibmxmaldkRlxRTDJFNDZNYGM3JjM8RUdEOjYzNjU4Ozg+PT0+Qkw/TklKTENRWl1cV2JeamxbUUU9S01ASmRYXWNmaGdiYmJiY2NfX2JhYmNjY2RpaWNiYmJlY2FmY2JiaZWXoqCwqamopqygpbmxqaummpSeoaSpoZSjqLWhr3+gp52lnp2JlL2ak42gkp2QeYOWlpGIq5mcm5qihY+Md5ucjqCRh52jm5aYl4WhuK2lmZuMjH5ibY+Lk4+Mj4yMl4uPkZ6Nkp6fl6CmfaGnh62doJaukKCenZGHgqGNrrOJpI+snIyafaJ1gJmUa4KrdU2reIeNnZOcqqmCqqt/haJ8e6dqnoCTbGeXhpi3iZ5+bmBjWIOYf418ZGeMc5l+ephsXX2Yb2FUcoddYG16hGBZZYJ+hYGZcqiqa4OjbnKlb5+BmmdknmxabIl7ZVlfgn5hV1BwdmVvdHFqam9daW9samdXZk1cV0U4QTRGQ15rNCtJQ1FNTj04NDg1OTs2QDs7PkJPPlFSS01CSlxdX1deXmN1X01EOk1PTlRiXFxmZmlpYmJkYmRkYmFiYGJkY2FiamtkYmRkZ2RiZ2VhY2iYl52huaGqpKaskqK2vKquopmWnqClq6ufnK20oaeRoKChp5yZjpi0mZCLnoyVi3WBlJGNiqaWlpien36ThYaspIeckYqYqJeZmpGHpK+mopWZh4mAaW6IiIuOjYmKjZGLj5GhipKcnpqho3+TgY+joZSgd5yWkKeDo6mAh6yxiKV6jX+EmnyicHKTh5V7nox5bYebi5qSnaqcj4edfoSidHemZ55+d6VfmHt9k3Oibpi3tLp0k4iCgLaoZIHFuXxxlbaMcoGbpGR1rKthfmqds35ufomEj4OMmHGAo2tyo3KegXyjXpyZs5VwfJees3RyW56yg2picXR1cWhvWGprcXBkW2dcYUtDPUQ2UUFZcTI8U0dfSlI9PDM5NTo5NkM8O0BJUD9UTk5RQEVfXltZV2Bge2RJQzdMV1VWY2FaZmZra2JiZWFkY2BhYmBkZF9gY2tuY2NkZGhkYmdmY2holJaVpLmZq5yToI6luLWsraCaoZuio6SsmpqxrKuTmKGZoaWampSerJuLiZF4i4VxgJWMiZChkJOUnZd9kYqOqKCHmI6JkaKTm5qMiqinpJ6PloeEfmp6hn59j42Dio+QiY6Tn4GUnJ6bn56LiXecmKKNoHKhjImpiZ2okpmrroKujX56oJl5o5N4gHOXh4ycfZSehpuOmp2oiKNkoX6Ml5CbjW2eaJuOb5qZe4CKp31yaHSrg56Dc6pnlJpdm4V3hZ5oqmqAuWZcqXCBnGGVjF+ndneKi4CdaJp1h5OSmI19nmyYj2qmmVyofne7an2pWo6EXbNnW25yeHdraVtwaXd3YV5kVmFBUERON1VCUW00SlpaXk5aREAxNTE8OzdIPzpDSFU/WVNYXT5EYl1WYFFhZHxpRkI5TltdWWVmWGZmbm1iYmVfYWFfX2BgZWNeYmRvcV9kZWVrZWNpaGdraZadiaq2nKiJY5WcrLuxr6udpZuap5+drJmdsKernpejmqKgmZaWoKSZhomNaYiAcnqWiIuWloSSlJiPeouElqSciZWPhoqdkpybiI+oop+ai5CKgIBpgIV5f5aLeoiNjoeOlZl9kqGdn6GSl3Jon4qgj4xwko2CqYmaoaWqo6t/sK6koriXdqOzoqN/iJR4nXqpmH+ij5+dmYmYcqB9iI6wtX1smpGheH6ZtaOjq6iEmXybfZybf3SqWl1ve5eMeZ5jTX97e4ZlephCTZ9ZompzfY9vgoqEmXabeYeJsbN/fZmSpnN9nW1wfJRvmXJpo12VdkhlY190cXx9bmVfa2d1emJjX1BdV1xTVkBZRVBnRFJWXGFYXklEPUI4P0I6SUU3TEVYQVdSW1ZFRmJcWmBLYG19cUVDPFZeYlplalZnaG1vYmZmXmFgXF1eYGhiX2VjdmxeZWdmbGRlbGhpbGmUnoGwrpqEU1+hp7S6srKomqKLmqmbm6eSoKujoKiPnp6dmpmVmKCdloeHiXeFgW54lISPm4t9kZOWiHKBiZKhm3KSkICImJSfmoSOqJyalYqKinyDbISFcYKhi3eEjIiHkZiUepGin52ih62GfbWEj56de6aWeqmCl5+RjKShgKdpeG5+mXOgc3F8nYWYb5OCrHujhKefm4OkcF+paHajZHCmYZzTj3x7mXhyc2OihpF+onKjkHZrkLOMYIOYi3Wrs6i8f3eEb3+/pqq0Xpxvf3KXcIJ0o3JepGd0pmBopmua05h5gZpudnmXa5t5dpdybKmlZ19leXF/hGxoZmNtdXZmX2FRWmVQUWFIVklUX1dTW2VqW2VQRUNLTElLQktFOFBAUU5YU1hPU1FgZWRpU2R4eXdKR0VkXWVaaGlTaWhqbmNqZmBjX1xdXV9oYmFoZXxkXmRnZGtkamxnaG1omJt/sKxUXUt+qq+xtLCyopyYhJemoKCijKSnn5epipmYmZSak5KgmI6HhXtwfYNofI+Ck5qBd5GOj4pwgIaPk5FrmJN8iJGSo5WCjaiZk5KKhYl5g3aIgG6Bn4Z3f5GFhpeglXiRoKKZn4izoaK2i3qsp6SupXGpgJuRhoKflX6lgaObhphxnoSira+Kl4t/jKSNlYOvo5V3tba2yqJ0lI2Dn2Cdl6lteZaHoJt1oYd3oH6Rl4uBb01mo5Nxm4l0pXt6dWKEg25+oG1yZGCcc390mGt7arS2tMamc5h9eZxqmpmrc4CabHN3l2mZeXSYcVBEfbNeaXZreIZma2Zic3RvbFVbUlloT1FnSVVMWFJVXGdrblVnV01KQUlNS0hKTkFRSlBlY2ptZXVzc395e250iXp7VVFObV5oW2tpUmpoaWxnbWZjZV9cXFxfaWJkaGt7X11kZ2NqZm5sZWltZaKdiK+nhWVAlKKyq6+vtaGij3+Wp6Gho4ukpp2cpoKZl5eOl5CQm5OOiIN5a3mGZYOMf5egeXWPiIyCaoWFkoSLhZ2NeoyKlaWSgpeoloyRi4CIeoB9i3lwj6CFeYCUhoiVnpR+kqSmm5WWhGZueJxsomR8cqV4nJhwaKeDmo59pXuil4OWcp92gYmUlo+5bpCKomJ9mqOXiW50a6trdaBucKdhm2qLkGmWh5uVdaKBfppgi4aNdW+IYmihZp5/apt1cWVniYJvc6JbX1tkoW5eiY1xfIB0cmSlbniiY2anZ5dxipdtoW9SiI9uoF5kp1SLXVSYbW1za3GBbXBoa3dzam5RVlVVZVhSbElYT1tIV2hoc2pZa1ZQUkVWXExYUmFVaGped3V7fHB9fHKDe39zd42Ag3deUXNhZ2JwZ1BraGhrbG9oZGdfXV1dYGpiaml2dV1cY2hjamlybGZrbWOdppmme2V0bYynrqWpsLGln4t/lamcnaOLoaGaoqKAlZmTjpqQi5eRjop7hnGAiGiKinyXm3N1iX2QfGWDh5WKiZWagnyIhpamkIChqo+EkIqBiX2AgI5zaY+mg32FkoyHl5+NhpGopZyIpniVm36liZaMspmekYSvl5+lepiJe6l1qJGEmm6looyShIyDvG18pa+Ch4WHlZieo36mfHOolaGWaZ9/cKxjloqWk3iobaqjgYl2iYN3q5GmiGuSsWx3s42pbIuGb2+gnpKVYn+rjKp4gYCOp593n32FpJadoGeZhnSrZp6tjLZzdr6MpJNZg6aNq2F2cnRve3VwYmp+bmdsUlRYVGBgXGpMXFFbSF1sbXZfW3FYW19aZ3Nlbm9xY3F0YHd6fnlyeYNzhH6Be3uMgYKAdmJ5ZGNuc2RSbGdnb21yaWZpYV9eXGFqYmxsem9cXGJpYm1pd21nbG9ilqaqnYGAn6WWqqqep6eto5iIgZapmZ2iiZqknKidhIyaj4ackYWSjYyMdIV6iINvjIR+l5N0dYZykYNuf4uShoWUj3x7gYWXpI1/pKSNgI2JhJR1goeTbmyLqICCipONiJudiIqSqaKfj390k5eIfoF5lK+kf4KdcY+GeZOOhoF7c6mNcX19epeWm4WOeHt9fYaTlZOLd5KaoaOFfH+LbY2GXHp5c3txaW5+k4pygHSCj5STcYaEg2aNf1+CgYx4d3SVdnB6b3CJboWGX3dpeI5ngoOGj6qcf3R9lmmJiG99dXuCdGxsZoxzeHuXd4Rba1d5j2lud3Jyb3d4b1xrhW5pZlZZXlZcZWpjVWBUXVBeb3d5a2p2ZGlqanV7cHF0c2FvdGJ0e4F4dXqCdX+Af4F5i4WCfntugG1keW5eV25oaHVreGppamRcYFpjaWVscXVuWltia2Rsa3ltaGxvYI6Uuamni6Gjm6akmaSdq6Gfg4OWqZGdn4iZppqomYOBnIt+lpSHjoqJjXKCfI58fo6Ee5eOdHOEcJWGfH2Si4aGj4V4foCGmKOMe6afioSPj4SVgoaOmHdxhKqFjZGbjoednYaKmqafoKuDiI2Um39+ipetqJCTqJF5cZ+UhXyVcICsh3F+lXFqcH2Bn4t/kY2KZ21dhIyOnZ6hkXSXjopzdWyDd3SBWXJvh5GCfn+Mal1pZHuFhImAYGl5fJx8hI2Ed4KIhWp6jYlsYnFzg3dgdI2DipGolodnjY6CbHaKgW2CinZtY2VjeYN6lVpcaWdudlt7eXd1bnNyg2ZbbIlra2JZWFxZWGtxW15fWV1cZXJ9enRvdGJqaml7e3F6dnRkbXRobXt+dXp9e3l6gIB/b4aJg3t9c396c39oVFxyaWx2b3VnbGdkXWFZamhranFybVdbZW1sZ3J5b2hqbWCMjKuxopCjoZqenpidmaihoH2ClquMn5OGmqKRpZV/e5iFfJKZiYiHh4pxfYCKdoSLgYSWinJvgHOYh4R+k4ODhoqCeoCDipqfj4Gln4Z3jpeIlYqLnJeEg3msgZCXmJOJnZyFh6CpnqGio4uHkpudo5qWq6KoqKKTnYmZkX56kZCGqn9/k5GSk52yppqUno6MsJGYhKeOjpadoouSnYWKk4tsfY93eGaChpGLfYmehIiMj4iIgYWEkXh8e3WcpIqIjKCMh5aAgI6DgXdxdYaFgHmKiIuRp5GEh46HgouPinmDiIWMf3RqgYN8eZlpcmhhc4pxfnt3d3B3dIFdXW6GaG5fXllaXFNncVVjW1pga2d0e3tybm9jampofntseH5waG9va2aAe3KCgHd/fX+Ee22DjIV8enl8fXqEeU9kd2tzbnB6ZWxlYmJgW3NmcGZycW1VXWx0bWh4enBnaWtljYieu5+Xo6GYlZmYlJikoJx6fpepjZ2MhZ+ci56XfXiVg3uOmYmGg4SGbXiAf3KAh36Ik4Rta356l4eEg5B+gIaEh3yHgoyanZKGqZ2CcoqPhZKRi52RfI17qYONkZaUjZuVhYWapZ+imp6Gg5KamZmQmaagpp6ekJeClI15foqQhqd8fY+QkYaYqqGdk52OjaiMkYCfjoqVnKGEkJmAiI+EcHmHcnVhf4SQiHeMmYGEj4GGhX+GhJVuenZ1lKSMjoechoaQdoKNfn50c3yKhXx6jo+FlKiQh4SPgYKJiIhzgoWFiHltan1/e21oa2xnXnl/Z317dnV2dXt3XF9wfW10YGNaW15QZmxTZFpdYGpodHl+cGxsY2tqZ4B/a3J/a2t0bndthHluhoB2goB9hXZxgo2Hfnt7fYB7gotgaXxrdWhpg2VqY2BpXGN1Z29idW1sVGJxeWVveXpyZWptbYuKn7iaoqSfk5KWl4uan56cenebpJCbiYaklIuYmnl6jYZ8ipKDjIKCgm17fndygIV9ipB9a2h9gZeJgYiOfH6FhId8j4GPm5uQiKabf3CLiouShqChioWMfKiQh46RlZGUkXeMo6ChnZabgIGQmpiTjZqioqSbmJKcf5CIe4KGkYmjgX6NjY98mKSgoJKakI+li4+BnJKKlJmdgJSUf4iPgnV1gnF3YX6BjohzipZ9iYxxjX+DhoePaHhyeo6alJGBmYCKjXSEin5/c3t8jYZ8e5OOhJemlIyGkHuEhYaDc36AhIV4ZHB6f3d5cGxqZl59c2h8dXZ0fHOAal5gdHdwd2RjWF1eUmlnVGRYXmBnaXV4gXBma2NsZ2V/gWptfWdtcGp8d4Z6a4uBcoGBfoF1doKNhn98e4CBfX+PanKEbnRpYohpbGJfcVZ0b2xtYHhobVdqc3ZjdHp6cWJrb3mJjZ+zkqWmnY6QmI+FnKGam3x1op6Nl3+MoYqIm5Z4fIaIfoSKfoiCgX9wf3pzdYKFfomQd2djfYaXioKKjXh9gIyDeZaAlZeVjZWemX1vi4GQk4Wlm4eMiYOmlISRiZSVkZB1kZ2hoZiUmHp/j5iXjpaanaWempSVnXuSiYV6iJmPoH+Ci46Mc5ijnqCSmI6OoIuLg5iYhJSXm4Caj32JjoJ3cn5ue2SAfYuHcYeUgJGCa4eDgoCLhmZ2cH2IlJqOf5V5jot+gol+fXOBeYuHe4aSi4yZpJeDhIt2h4OBgHN4f4aCc152d31yfXZmbGVgf2lqd3N0dX1xfGNkYXNvdXJtYVlfXVpqY1JiV19fZ2p0eIZwYmpia2ZofIJraHRobG9of3yBeWyPhXGAg4N/dHyDjIGAfnqCg358kG11iXR0bWaKbGpiY3VWg2lwbmB4Z2xhanZwZnh7eXFfcWyFhZCdr5inqZ6OjZeHhZ+TlZd8dqebiph5l5yLjJmQeXyBjH19g3uAgoB4c3h5c32Ag3+Ii4BkXn2LlYd/hYh0fX6Jf36YhJaUloyjoJZ+cYZ7k5GKpo+MjoqSoJCCj46TlpCKgI+XoJqSkJJzgI6SlImdnZ6nmZmOlZd1kZKMbYiakpx8iImQiW+YnZqikpWKi52LhoGTnYCUlJeIm4p9ioqCe3F6a3ZtfH+Mf26Fk4OVeHCChH5/jIFlc2p9gpiYhoGPdZKLhnuJf3d6gn+Ign6Fj4eNlaWReYWCdIiGe35xcn6EgGtgeXR5cHtuYW5jZXtibm92c3h3dHRhd2BvbHVucF1aXl1daV1PXFdiYGdscnqIal9pZGljaHeHbWZsaGlsZ4B8enduj4hzgIOFfXSBhol6g316gYR9fI5yeYt5eG5sh2toX2lyYodocW9ldmdtbGF6aGp8e3hwYXdti4GZmauhpamei4uRhomdi5SWfHasmIyWfJ+TkZeUiXd+e4p8fIB2eH+Ab3Nzem+FfICAiX58YFt+j5GHgISEcnp/hnqPkYeRkZuSpJqTgXyBfI2KkqSJjYqNlpqMhI+XkZSNiIiMkp2TkIyNboSQj5GJnpmioZiYipeTcIychmiKm5GWe4mFkIpwlpqUoZGRiIqYjIJ/kp99k5GUjZqQfIuGiHVzdWtxbnV9i3VvhpGOknJ0gHyCgop+Z3Nuen+blX6GinaSjYN1intxg4CDiX6GjouGjparjnuIfH6KhHZ8bmx9goBhZndzdG56YV5vYWt0XnBqenl5bXRxZXpebmxzbXNZWV1fYGlaT1ZXZGJlcHB+h2VdaWhmYmdwjW5jaGhlaGeAend0b46Fc4GCg3x2g4mFeIV8eISGeoCJd3+LfHtzeYNqal9waHR/a3FvbXFnb2tle2Ftf3l3cGx3d4l/o5ijqKGnm4iLioGOnIaSmnR/qJSRjYehjZaUkYF0fHaFeHh/cnN6hWxxb3hsiXZ/gIZucVtZfpKNiICBgXZ1gH9/oIaPipKcl6CSlneJfoCMiJydio+GkpeWhYiTmI6Wi4qNjoydio6Rg22Ji4+RipyWoZyZloaZiWyIpoVoiaCMk4CNhYyBeJSYkp2RkIiIk41/fpCZfZKOkY+bk32LgYVwdnBsbm9wfIZqc4OPmYtyeIB1gomDemh1cHeCm5B9ioZ7lpN8eIp2cox9iI98jIiFio+cpYl8hHaBin53d2tofn9+W3FycW9vd1pecGFwa15vanx6cW5tam13YHBva3FuWVhgYGBsV1BSWWVlYXRvhIFhXWtsZGJma5JuYGZmX2ZqgXVxcm+LgHR/g4F5doGLgHmGf3iHhnaDhXuGi4B7d4t/anBjfGKFfG9wbHRqaG5sd3dfcX55e3R1c3+CfqWVm62fp5eFjIN+lpWDjp10iZ6TkoWLm4yWjox6cnh0gnByhHRxdYhsbmx0bId2gn1/bW5VUYGrlIeCeIB2coJ5gqCCkIGSkpiakZh3kHqCjJKjmpOOiJSYkoOFlZiKkouJjo+InYSRi31yioWIj4icmZ6bl5aBlYBpiZ+KaYmjipSGkoSKcYORmI+ajY+Li46Nd3uTkXuQjI6Tl459iX6CbHdqb2xsbXuAYnp+kJeCd3uCeIONfXppdm12iJeMgImIfZWSc3uGcnmPfIyPfIp/hY6Rn6CHfXx3gYp8dm9naX5/dl12bm1rcHJVXW5icmFfbW55cGhwZmd0dmlxbGF3Zl1VZWBfcVNQTVtlY1x3b4h7XlxocGFiZWaRal9nZFtnb31vbHFziX12fIaBdXZ/jHl8hoB4h4NzhoV+jIyEfHqVeGdxaoNgh35vb2t7YGltdIB0XnN8eIZ4dHOFfHmhkJqxnKWPg4p/gpmIf4mbfomYko6EiJiOj4+Ed3R3c4Bwb4R0cHGDb2ppdW2Cbnx8bXRzUk6C38mS1pN8b3SDdYOfgpF2lJCYm4+Ye5NyhY+doZOTkImSmpOFfZWVh4yNh5KNiZx/joF4e41/iIyJnJycm5aUe453aYyUim6LpoeVipiEhmOMkZiOlImWi4yJi3B6lYp8jomLlJKLe4d9gG18ZXNva217eluBepCQgXt+f4CGj3t6aXVrdIyQi4OHhn6XjW2AgHCCjoCOiX6FfISRlpucjH13eIKOd3FrZG58gGlnc25naXNsU15vZXBZX2xxd2dra2JneXRwcGRgeGFgVWtfXXRPTUtfZWJbd3CJc1xbZHVgYmVljmNgZmJYaXNzbWtxdot8c3mGgnZ3fotzgId/eol/comHgZCJiX1+mXZlc258ZYd+bm9rf1lsbnl6cmB2enuNdnJ2iXZ5n4ycr5ugkIKEeIeUfnuIm4aEnZCOhYyXhJOPiIF1d3B5cW+EcG1tfnJjZHdwfG15fGpobGOkmsHcru+ic2x2g3WEoYSQbpWPlZ+TmoCRcIWKoZaJjpWKkJyVgoCUj4WIj4CSioqXf4d7dn+KeIaFjZubl5mQkHeMd3CKi46AjaeHlIuehoZei5SXio6IjYqKhIlsfJeDfomGi5OQh3eHf39sfWR4dWpvenRYiXuSiIZ7f3+Aho1/emd0aoGKj4uEhIGNmIdtg3dwiZKDkoaAhHyBkpeUm5F1dHiHi3RycGRydn9fcmxvYWh0ZlJgcWdrVV9uc3lhcmNgaX5xc25bY3NhY1ZuWlt2TExLYmVgXXVyiW1bXGR4XmBkZYRfY2NeWGlya25rcneLfXN2hIF4eHyJcYOFfX2Ie3SLiIeVhYx/f5hzaHVxeW2Lem5zcIBXcXp2eXFkdnmGjGh2gIlxgJ2Imaico5KEfXCLk3d4iZuDhJ+NjnyWjX+aiIV8c3dwc2pvgWxqbHx0XmB3dntwdHpnYGV869q1ycPciXNsdIF2iZmIjGiXj4+blJKBiHCFiJ+NhYuVioyXk3uMkoeCiI96kYuGj4KAd3iDhHKHgpKblpOYh412iH9xiIWMip2lhpeOoISKYYSVj4aIhYiMhoCHaH2UgH6DhYuPj4NyiICAcndodnJpdXdsWo19k4OGfoGEgYSLg3didW2KgpGMg3+AlJN/cINteoiRiJSGfYN/gZOUkZiKbnF5i4V0am9pb3V+XXJobVxpdF9SZHFpZlNfcXZ0YHBgXWiEcXNqV2dpZGlXbVdbc0tJS2RlXWFxcoVpW1xleF1eZGd6YGRfXVlrbmVuanN3in5zc4F+e3Z6iHOFhHx/h3Z2iYWPmIGMgnyUdmx3dnl4k3Rud3p8WHmGcYBuZ3h2kYJkdoaFcIqXhpqhm6KKhnNukYpydo2afYqZiIl8n3+Emn+CeXJzbm9kcn5pZmx3d1tfeHp6cXF/aWFnYX/Vto6RpnhucXd7cJKQjIVpmI2ImpCLhXpoh4uZhoGSkIaGl417jIyAgImNe5CNfomFenV7g3xxhoCVmY2SlIKJdoWIeYaDjpagoomYkqGAiWF/lIeEh4OIjH9/gmZ9kYB/gIOOkJF/boR+hHVsbXd1dHh2a2OOgo+Bhn99hYCFiX9wYHRyhn2QjoN9gJKKe3KFZ3uFjImOhX2GgIGVkJGUhW5veIt+dGxtaGl4emBnaWlYa3VZUmlyaWJRYnJ4bWJlXlpqhG50YlxoYGVtXm5UWm1NR05lY1tmbXB/a1lbYnJfXGNsdmRlXV1abGxibGpzdoZ/cW9/fH10eIZ4hYN9gId1eImAkpV8iYZ3iYFveHl6hJJvbXqAdl6Df3SBbGh6c5RzZ3KHfHGSkoSan5ugh4Z1dZN+bXWSlX2Hj4SKjZp9jJp2fndyb2xqYXR8Z2JpdXlaYHd7eW1wfmVkaGhXnY9fcnOXvMSEdXGUiI99cZaLhpuSi4dyaYiOlYB7lYuBhJqLe4qGfHqJi3+UiHWJhnZ3foFydYWBnZSFlI+EhHOBineHf4ycoJyJlo+egYlmfZOCf4WCiIhxgX1mfox8eX+AiY2QfmqBfoV2ZnB5eHR4dGxqj4aLgouBeYOBhYSBbF9zeXt+jouGfIOQgn9zg2p6hYmNiIZ5hX6CmY6RjX5ubXqIfHVzbWZle3RiW3BiV25xU1Nuc2hhTmd1eGZgXl1Zb4FvdFpmYl5rbmBwUFlqUURSZmBZam1se25ZW11sYlpib3ZkZ1xdYGtpY2tqc3aBgnBufnyAdHWDeoODfYGFdn2IgZaQeISLdYGIcnh5fo2Qb296gHFpgXh6fm1se3WVa2p3hHNsk42Gn5mfmYWHbn2LdWl3lo1+gImDlZeKepCWb3t0cWtqZGBzemhfZXF6WmFyfHlncHlhZWSPsbJ3S2JapdnQlnF6kIqPd3yTioSYkIuFbmuFkZF6eZKGgYSYiXuGf3d3iYqEloBvi4hxdX57anmFg6WQg5ONhIBwgIV4hnyJn5yYjpaSloWIcHuTgn2CgoiCbYF2aICFeXKAgYWLiH1mfn+FdmRxc4BpeXBwdZmOhoOLfXd5gYR6g2tccn9zgomGin6HinyJc4JucoaIkYeHdIZ7gpqNjoV5bm59g351eWNmaHtvXlh2WldwbE5XcXNnYEtsd3RhXlxbWnV+c3BYZ15nanFgb05XZ1E+WGVdWW5qZ3lwWlpYamVZY3B4X2dcXmVsZ2ZraXF3f4dubH9+gHVwgnuAgn+Cf3aBhIiXiXGCjXF7hnx6eYSUjHVqeX5rb350f3xvcnt6k29vgX54Z5KLgqGZnJGChWaGgm9neZSIfX6EgpiJgXyOjWh4c2trZl9gb3htX2JveFxka4J6YHF1X2Vl1Oq9izI6PouOf3F5hYeNjHWClox+ko2Lfm1rhIyMdX2Pf4SBlIh7gndtdYaEg5d3boiFbHV7dWZ5gYOmi4KPi4R+boF2eYZ9iaCTj5OUlY6Mh397koZ4f4OMgmt/cWiAfnlufHyDi4R4YnqFgnJlcml/bnVydYKcjIGAhoB0dn+BdIJwW26AdXmMhIt8iIF+iXl7cm2KhZKFjXSDeoCYjIuAdW5qdoB/dHNbZ2d1bldWfFNZb2RLWnJyZVtJcXhvXFtbWV11f3RpWmJbaGZvY2pNV2VQPV1lXFx1ZWB0b1pYVG5jWWRxeVpoXWBnbWdpa2lwd32ObGmChH95boB8fYKAgnp1goCNk4RwgItueH6Ae3uIk4p/aHp9anN7coZ6c3Z9fox5eIR9fGuLjYObnpaLgYBsjH1qaH6Ni3p9foOUgn59iohrdXFnaGJbYmZybl9ha3NgaHCIeWJzc15jZJugj25dNlqvtXRpgIh8kYZ1hZWFc46KiXZva4SCh3R5iXiIfJKHeX5yZnWIfn6Yb3GHf2l2eW5meYeEpIaAh4yKf2+AeIKEgJCcioWXk5qKjIWJfJCIcXt9hHtofmxqgHt6ant3g4iBc2B4gn9yZXNndoNudXyGlpKCfYOBcHh6fHWAbVhwgHd1jYOHeIh2hIl8eXRvi4KSgodzgH5/lImKfG9uaW2BgXRtW2VkcW9QWnpOW29bTltyb2RVS3N4aVdZWlphcYF1YV5dYGdkaWlmTllnTUBgY1tgdWBddWxXV1N0YFpkb3JXal1iaGtnbWxocHd8kmtohIp9fG9+fnyCgIF6d4B/iouDcXyHb3J4g397iYyPg2p9e212eHaKdnx4f4KGf4N+fXpthIuHmKOMhIN7dYp4amyDh5B4fXqCkYCAfouDcHJwY2ZeWWZfcG9fYGdvZmpuiXRhdG9bYWRqdXqAv5ympMi4cYWCcpJ7d4WSgnOQi4dycm+DeoNzdId0h3eTh3h5cGJ2h3qAk2lyhHdnd3VjanyCh52BgH+Oj35zgXWHfIOWk4Z7mZCXkIiCiXuJiWt4eX50Z3poa395c2l6d4GEfmhgeIl+bGt0aHyBaXaCjJKVf3x/gHF8d3x0gGJWeH5zdIuFgn2EcoiKeXlycYWDj4CAen9+d4+GhHdqcWhsh4Fxb1xmYHFsSWR1S11tVVNZc25iUU90eGFSWFhdYXCDc1xiXGllZWRrZFFbcElDY2BbY29dXXhnVFZVdl5bZW5oVmtdYGpnZW5uaHB3epJtaYiMeX1ye355goGBfHZ9g4iGg293hHJud4KCfoiLk39wgHx3eHqBjHSCeH+BgYKEeoB1b36Ki5ueh32FeXeFemd0hYuQeX5/e4iFhHeQgGdwbl9kXFhkWWxyYWBgcGxraIluYHNoWV5jbn93qdqpx4aHsnGId2+MdHqFjX95kol/dHNzfXZ/b3F/bYRzk4V4dGtgeYJ5iY9mcoRwaHVuW219f5CSf4B4kZN+eXxviniElI6Hd5mNk5CIhoV8gIVtdHV+bGZ2ZG17dm5rd3eAgH1hY3mHeml2dmN+fGh1h4+Nln12gXdxgHt9boFaV3V/cHaFiH+Aem2Kh3V5bHaChIV/fX56fXSMgn50aHRlboqDbHJZaF1zZEZtbUtaYVdWVXhtYlBSdHZYUFZYXmByhG9dYWNtZWReb2NUXHFGQmVeXWVnXVt6YlFVW3RbWmdrYFZqXmBvZmZrcWhwdniOdGuOjXV/dnh+d4GEgXt0fYOIh4NvcoB0cXV+hYGJjYt7d4B4gnt8hYd3h3x9gX2EgHt+cnV5i42gjIh5iHZ0gnhefYWXi3iFg3SFhoR4intibmxbYltbYFZpc2JgW2dub2aHcmFxZVdcYmt/fMrOh7mham1tiWtxg3F7g4l+epCEeXhzeHR0e2psdWKDdZGBdm5mX32CeoyKZXKCa2pxY1hseoSbiIGBcpaVd399cItzhY2PinSakJKJhouDe3l+cXBvfGRncGFteHFrbXF4fn56XWZ7gXhqdnlmg3dodIiMjpZ+c4lrb36CeW99Xll0gG10gYt8gm9wioByd2l4gYKBg3h/c3t1iH17c2dyYW6LgGtwVmlcdltHbWpNVlVdU1V7a2FPVHVyUFFUV15jdYVpXWBsamZjWm9hWGJvR0FnXGBlXlxWe11OVWRvWVpqaF1XZ2BfcmZqaHJncHN3hnhulYt0f3p3fnqDiH91cn+HhY6CcHB8eHZ2eoWFh4yGent/dIp9fYaEg4d/fn59hn58eXV4d5GTn36LfIptdX94Y4KGlYZzkYpvhYWBe4R1Y25qWV9aXF1UZ3NkYFhkcXJngHJia2RWWl9qf3i+rnuftm1hc4Rnc3pxeIGFen2Lfnd3cnVve3Zlam5ghnWOgHNpYV5+eXmLhGZxf2hra1pWb3eJooCEf3CZk3KBeneFcIWFlYt2mIuOiYWJhX15dHJvaHhfaWxgbXZraGtreXh7d1tnfn15ZnN+bYV1ZXWGjoaXgHGNaGt7hHVudmNdcn5sdX2Me4Jndoh+b3Jpd4B6gIF0fm17fIN7eHFmbGFtiX1rbFVpX3ZVSmlqTlJOZ0xYfGhhTlV1a0xQVFVfZ3aDZ15hcWhnYlhpXVxrZ0pEalliY1ZZVXlZTVZtaVlda2RcWWRiXnRmbGRxZ3JwdYF3cJmGdn9+d399hYd9dXOCiICUgm5zeXt6dHOEhomJg3mBfnWOfnyEio2DgoR7foqDe3d8d3eanJd6iIKGaXZ8e2yDg5J/co6BcYaCf4OAcGZsZlddW1xaU2RwZF5XYnJ1aXVvZWViV1tbaH9wb3KAc4lkZHl8aHN1c3KBg3eAgnh2cnVtanpxYWdrZoZzjYNtZl1ffXB7iX9pbXhnamRVV3JvjKV8hHt2lpF0fXR+fXB/fpSIeZt+iYeDh4N9dXBxbGd0W2tnXmx0ZGhmaXpvfHJaaIF3dWlxgXiCd2J3hot8lYJwjWtue4NyZ3RmYW97Z3N4inx+Y3eEd2tscnZ8cnx7dX9of4CAeXdvZGZibYV7bGpVaGFvUkpoaU9LTm9HXnpmYU1VdGRKT1NXYWt3f2ZdZ3RpZmBXZFdicFxLS2pXY2FVVFVyVktYdWRZXmtgW1pjZF92Zm1icGl0b3J/dXSZgnd/gHd/f4aEen11goR+l4VtcnR8enVxhIWPgYB6i3ZzkH98gZWNgIWEfX2Mhnp+gXd7o6WKeYeFg2t0e3p1goCLeW6Ec3mEfYKDdm9qaGVWXVtaWVNibmRbWGFze2pobGlgYlheWml/aWtwgGdsYGd5d2lyc3Nsg4B5fnt1dG16Z2l5al9lbmiAdo+EZmVYYndqf4d7b2pwZ2ZdVFhvZ42ndoB6fJCOenZxgHF1eHyTg3uXdoaEgIaIdmpydWdnbltsZF1tcl9oYWp5aHxtW26Dc3VrcIF+enhhd4aFeZGGdIlycXqBc2Nyal1weGVydIh8eWN0gXFnanp1c216eXZ5ZYR8gHl3cWRkY217fGpqVGdhZVNKa2ZPR1FqRWF4ZmFNU3JdSk5VWWVseHtmX25xamRdVmFVbm5WSlNnV2VdWE1Va1RJW3heW19rXV1aYmVfeWhsYW9vdm5weHV6mH53f4F5gICHhnp5eoN+gZODcXR0f3p3dISIkX2BfJFrcpWAe4KfhX6HfYB+hoKAiXt3hKuef3qHh4JqcoB5dYB+gHRuhm59gHOKgGpvbWRkWV9aWVlUYmpnW1pfdYJpXm1sXGFXW1trgWVxdH1paVxqdnRmc3Zxa4N6fXx4dXJseWZpd2ZdZHJneXeSgGJiVGVwaIKFeHhnaWphV1ZZZ2KOp29+d4CLjntxcn9pe3F9j395kXOFfoCAhm5kdnJkZ2dcamFdb29baF9tdWV7aF51gW9ya3J8fnV2YnWGjHuJiIKBeXN2gHZicW5bcnRjcXKFfHVlc4BtYW17cWtqfHt2c2eHd3t6dnFlYmRtcn1palNnXVxUS3FhUEZWYEdjdmZhS1NvWEtNWFhoa3Z7ZWVucWdkWlhdWHdlVEpcYldnV1lIV2RPR2F4Wl1fbFteXGFjXn5pamBvdHhtcG92g5h6coCAfH+JjIZ9dnaGeIeMfHN1dYJ5e3qCjI58foWJaXOWgXqKnH5+hXqBe399holzcY+ti3t7ho98ZXGHeXN8enVyboVse35sj3pjcG9iZV1lVllZVmNma19dXHOFaFhwblpeWFpba3picHd2bGFZbHJyZnR1b2uDd35/eHZtbnNkaHRlW2d0ZXV2kXleXFJmZ2uDgnR+YmRqXFRXXWFijqRpeHODhpF5bnF8anpvf4l+d4t0gnl9eYBpZHZtYGZfXmlfXXRrWWZdb29jemVceH1sb29weHl0dWVzhJOAh4SKfHhwc350Y3hlXHFxYnFygXx0Z3OBZV9ud2plaHt9dW9wg3Z0fXNyYl9mbW58ZGhTZldYU012XlBJWVdIYnRjYUlTbFNKTlpXamxyfGRtbXNjYVpaW2F3XFNLY11XaFNWRlhfTUZpdVheYGxbW15hYl2EaWhhbnh5bXBrdoCQeW2CfoCBk4iEgXZ0iXSMhnRxdnWCeH19foyQf36UfnB3lYN9mZJ5gIB4en1/dIiEdHCZoHp6foeUd2N0h3hyd3RrdG9+a3h8cJFzXnBvYGdibFRaWldoY21mXFxxiWVTcW5bWlhXX2t2ZGl1amleWWxyb2tzc3JohHx+f3t2bm1rZGlwY1trcmR0do5zWlZUZWFygH9ygl1iY11TWWBbY5CfZXFxhYSSdWxse29wcn1/fnOCeIF0e3p6ZGV1Z11iWWBnW152aFdiXXBpYXhhXHx2amtyb3h0c3VpcYKWhIeAhXd0a3J+b2d4WF1sbmNyc4B6dGdwflxgcXNjYWtzgG1udn9zcnhrcGFcZWxsemBmUmVUV1FPdVpQT1hRSGNzYWBGVWpRSlFaVmtra31mbm9yYltaWFlscVdSUGZWVmhTVEVZW05IcXRYX2NsYlhgYGBdi2pjZG16eGxwaXV5h3trg32AhJp8g4R5fIhuj4dybnZ6fXSCgnyLj4KDmHR4gZOFgZ6JdYGAgnR/gnGIg3ZwoZZzeYWKhnpkdopubnpuZnhweWtydnONa150bmFnZWtSXVtVZ2Fsa1pccYxkT29tXFZXVGZpc2hidGVkXFhtdGxvdXR4aoV8f3uHdo9zY2RrbmBcbW1jc3iHa1lUVmNkeH19cYZdZF9jVFpfWGKVlWNtcIOFinRraXxwZ3V5dn5te3V2cHt/dV9mc2NbXVZhY1hhdGVVX2BtZGFxXV1+cGhpdHF0cXV3a22FlIKJfYdyc2hwf3F0cFRcZ2tmcXSAdnNjbXdWY3NsXGBwaH9nbnh+c3Nzam1hWmRpandeZVNjVFVQU2xWUFZTUEdkcl9gRVdpT0lYVFduaWV9aWx4bGJXXVVbdGRTUldoUVhmVFNHWVlPTXd1Wl9la2lZYWBdXo5uYmZreXZub2l1doB/bIOAfYeYe4CHgIl/a5OIcmZ0gHt1gIN9iY9/jJNyfIqRhIefhnt/ho10gYZzfoJ2bqSLcoCMinZ2bHmLYGR7cGZ5c3hsbXJ3g2dke2xiZmdoU19eVWdfa29bXm6NaE1pbGBVVlNuZnNrZXhlZFxYb3NrcXp3cmuHen92nHp5a2FlbG1eYG5qZXF4fmdZVlhgbHh8e3CEX2NeZ1ZYX1djm4hia3CBh314bGx6bl14c259a3Z0b3B8gXNYam5fWVxVYWJXZHBiU19iaWJibFphfmxmbHR2b213d2xpho2AinyJbnJncX5udG5kW2FpaW90gHRyX2ltU2VyZVZkcGR8ZXN4fXdrcG1rYFlhZmd0XGRVYFVSTldkUU5bTk9IZG9cYkZZaU1KX0tZbWRgeWlufmVgVV9UXXVcU1JgZk5cYFVSSVtYUFl0dV1fZWtoWGJgWl6NcWNnanhxc25odnN7g3KCg3qIjn58iYeNeW6QiXRrc4F0f3+IhYeShJaPeX2Mj4eRm4SAfI2Fc4CBc3R4c2+Tk5OTk5OTk5OTkpKSkpKSkpKSkpKSk5OTkpKSkpKSkpKSkpKSkZGRkJCPj4+Pj4+Ojo6Pj46OjY2Njo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo2NjYyMjI2NjY2Njo6Ojo6OjY6OjY2Ojo6Oj4+Pjo2NjY2Oj4+Pj4+PjoKAfnp6fX5+fX1/fn5+fn5+fn5+fn+Af4CAgIGAgIB/gIGBgYOHjI6Ojo6NjY2NjY2NjY2NjZKSkpOTkpKSkpKSkpKSkpGRkZGSkpKSkpKSkpKSkpKSkpKSkpGRkZCQkI+Pjo6Ojo6NjY6Ojo2NjY2Njo6Njo6OjY2NjY2Njo6Ojo6Ojo6NjYyMjY2MjIyNjY2Njo6Ojo6NjY2NjY2Njo6Ojo6OjY2NjY2Ojo6Ojo+Ogn99ent8fn59fX59fn5+fn5+fn5+f4B/gICAgICAgH+BgYCBg4aMjY6NjY2NjY2NjIyMjIyMkpGRkZGRkZGSkpKSkpKSkZKSkpKSk5KSkpKRkZGRkZKSkpGRkZGQkJCQj4+Ojo6OjY2NjY2NjY2NjY2OjY2NjY2NjY2NjY2NjY6Ojo6Ojo2NjIyMjIyMjIyNjY2NjY2NjY2NjY2NjY2Njo6Ojo2NjY2NjY2NjY6Ojo6Cf3x6fHx9fn19fn19fX59fn5+fn5+gH9/gICBgYGAf4CAgICDhouOjo2NjY2NjIyMjIyMjIySkZCQkJCQkJKSkpKSkZGSkpKSkpKSkpGRkZGRkZGRkJCQkJGRkZCQkJCPj46Pjo6Ojo6NjYyMjIyMjI2NjY2NjY2NjY2NjY2Njo6Ojo6OjY2MjIyMjIyMjIyMjY2NjY2NjY2NjY2NjY2Njo6NjY2MjIyNjY2Njo6OjoN/fHp8e31+fH1+fXx9fn59fn5+fn5/f3+BgYGAgICAgYCAgIOGi42NjY2NjIyMjIyMjIyMjJTO2tjY2NjamoGEhISEiF0tMDAwMC1GoaGhoaGhoJqZmpqampqKg4SEhIOEd2VnZmZmY4C+u7u7u72zbWZnZ2dnZZChoKCgoKOAY2dnZ2dmb4SDg4ODg4OLjIyMjIyMjY2NjYyMjY2NjY2NjY2NjIyMjIyNjY2NjY2OhX19e3t6fX58fH59fX1+fX1+fn5+fn9/f4GBgYCAgICBgICAgoWKjI2MjIyMjIyMjIyMjIyMlNvp5+fn5+qcfoKCgoKGUxgdHR0dGTekpKSkpKSjnJycnJycnImBgoKBgYJyXV9fX19bfsjExMTExrtnXl9fX19dkKWjpKSkp3xcX19fX15qgoGBgYGAgYqLi4yMjIyMjIyMjIyMjIyMjY2NjY2MjIyMjIyMjY2NjY2GfH16e3p8fXt8fn19fX59fX5+fn5/f3+AgYCBgYGAgIGBgYGChYqNjYyMjIyMjIyMjIuLi4uSl5iYmJiZmZKPkJCQkJCMh4eHh4eHiZOTkpKSkpKRkZGRkZGRj46Ojo2NjYuJiYmJiYmMkpGRkZGRkImIiYmJiYmOj5CQj4+Pi4iIiIiIiImKioqKioqKi4uLi4uLi4uLjIyLi4yMjIyMjI2NjIyMjIyMjIyMjY2Njoh8f3l6ent8e319fX18fX19fX5+fn9/f4CBgYGBgYGAgYCAgYKFioyMjIyMjIyMjIuLi4uLi5GQj5CQkIuOkZGJh46KkJKTj4iNjI6PiI+RkZGRkJCQkJCPj4+Pj4+Ojo6Njo6Ojo2NjoyLi4uLi4uLjY2Njo6Ojo2MjIyMjIyMjY2MjIyMjIuLi4uLiouLi4uLi4uLi4uLi4uLjIyMjIyMjIyMjIyMjIyMjIyNjY2NiX59eHh5fH18fX19fHx9fX59fn5+f3+AgICBgYGBgYCBgIGCgoSKjIyMjIyMjIyLi4uLi4qLkJCRkZGPhI6QkIaKj4WNkJGKh46Lh42HipCQkJCQkJCQkI+Pj4+Ojo6NjY2NjYyMjIyMjIyMjIyMjIyMjIyMjI2NjIyMjIyMjIyMi4uLi4uLi4uLi4qKiouLi4uLi4uLi4uLi4uLi4yMjIyMjIyMjIyMjIyMjIyMjI2Lfnx3dnh7fXx7fX18fH19fn5+fn5/f4CAgIGBgYGBgIGAgIGChIqMjIyMjIuLi4uLioqKioqQkJCQkIqFjoiOhoaPiY2QkYqEjIuGj4aMj4+Pj4+Qj5CPj4+Ojo6OjY2MjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMi4uLi4uLi4uLi4uLi4qKioqKi4qKi4qKi4uKioqKi4uLi4uLjIyMjIyMjIyMjIyMjIyMjIt+e3d2eHt8fHx9fX19fX1+fn5/fn9/f3+AgIGAgYGAgYCBgYGEiYyMi4uLi4uLioqKioqKipCQkJCPhYOMjpCOiYyJjZCQj42HjYaMiYmPj4+Pj4+Pj4+Pjo6OjY2NjYyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIuLi4uLi4uLi4qKioqKioqKioqKioqKioqLi4uKioqKiouLi4uLi4yMjIyMjIyMjIyMjIyMin18dnZ4fHx7fH19fH19fn5+fn5+fn9/f4CAgYCBgYGBgIGAgYSJi4yLi4uLi4qKiomJiYmJkJCQkJCMhoyJjoeFjYmOi4yLhYeHhoiGiY+Pjo+Pj4+Pjo6OjY2NjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyLi4uLi4qKioqKioqKioqKioqKioqKioqKi4uLioqKioqKioqLi4uLi4uLjIyMjIyMi4uMjIyKf353eHp7enp8fHx8fX1+fn5+fn9+fn9/gICAgICBgICAgYCBhIqMi4uLioqKioqJiYmJiYmPj4+Pj5CMjouPjIqPjI6MjY2JjYqLjImOj46Ojo6Ojo6Ojo6NjYyMjIyLi4uLi4uLjIyMjIyMjIyMjIyMjIyMjIyMjIyLi4uLioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi4uLi4uLi4uLi4uLjIiAfXh5enp6e318e3t9fn5+fn5/f35+f39/gICBgICAgIGBgIGEiouLioqKioqJiYmJiYmIiI+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Oj46Oj46Ojo6Ojo6Ojo2NjYyMjIyLi4uLi4uLi4uLjIyMjIyMjIyMjIyMjIyMjIyMjIuLi4uKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLi4uLioqKi4uLh4B8eHp6eXt8fHt8fH1+fn5+fn9/fn9/f39/gIB/gYGAgIB/gYSJi4qKioqJiYmJiYmJiIiIj4+Pj4+Pj4+Pj46Pj4+Oj4+Ojo6Ojo6Ojo6OjY2NjY2NjY2MjIyMjIuLi4uLi4uLi4uLi4uLi4uLjIyMjIyMjIyMjIyMi4uLi4qKioqKioqKioqKioqKioqKioqKioqKioqKiYmKioqKioqKioqKioqKioqKioqKi4uHgHt5eXh6fHx6e3t9fX5+fn5+f39+f39/f39/f3+BgYCAgH+BhIiLiomJiYmJiYmJiIiIiIiOjo6Ojo6Pj46MjI+Sj5COjo6Ojo6NjY2NjY2NjY2NjIyMjIyMjIuLi4uLioqKioqLi4uLi4uLi4uLi4uMjIyMjIyMjIyLi4uLi4qKioqKioqKioqKiomKiomJiYqKioqKioqJiYmJioqKioqKioqKioqKioqKioqKi4aBe3h5eHp8ent7fH19fn5+fn5/f35/f39+fn9/f4CAgYCAgIGEiIqJiYmJiYmJiIiIiIeHh46Ojo6Ojo6Ojo+MkJOQkI+Ojo6NjY2NjY2NjYyMjIyMjIyMjIuLi4uLi4qKioqKioqKi4uLi4uLi4uLi4uLi4uMjIyLi4uLi4uLioqKioqKioqKiYmJiYmJiYmJiYmKioqKiomJiYmJiYmJiYqKioqKiomJioqKioqKhYB6eHl5fHt6ent8fH1+fn1+fn9/fX9/f35/f39/gICBgICAgYSIiomJiYiIiIiIiIeHh4eHjY2Ojo6Ojo6Pj4+PjoyNkI2NjY2NjY2MjIyMjIyMjIyMi4uLi4uLioqKioqKioqKioqLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4qKioqKioqJiYmJiYmJiYmJiYmJiYmKioqJiYmJiYmJiYmJiYmKioqJiYmJiYmJioqFf3l6eXh7e3p7fHx7fn5+fX5+f39+f35/fn+Af3+AgICBgYCChIeKiYmIiIiIh4eHh4eHh4eNjY2Njo6Oi42Nj5WPiYyPjYyNjYyMjIyMjIyMjIuLi4uLi4uLi4qKioqKioqKioqKiouLi4uLi4uLi4uLi4uLi4uLi4uLi4uKioqJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYR+eXt5ent7eXt9fHt+fn59fn1+f35/fn9+f3+AgICAf4CAgICEh4mIiIiHh4eHh4eHh4aGhoyNjY2NjY+MjImKj42IjJGPjY2NjIyMjIyMjIyLi4uLi4uKioqKioqKioqKioqKioqKiouLi4uLi4uLi4uLi4uLi4uLi4uKioqJiomJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJg355e3p8e3p7fX17fH9+fn5+fX5/fn9+f3+Af4CAgH+AgH9/f4OGiIiHh4eHh4aGhoaGhoaGjIyMjIyLiYyKiIeJhoyOjJCMjZGOjIyMi4uLi4uLi4uLi4qKioqKioqKioqKioqKioqKioqKiouLi4uLi4uLi4uLioqKioqKiomJiYmJiYmJiImJiYmJiYmJiYmJiYmJiYmJiYmIiImJiYmJiYmJiYmJiYiIiIiIiYmCf3h7e3t6enx9fHx9f39+fn19fn9/f39/f4F/gIB/gICAgICAg4aIh4eHhoaGhoaGhoaGhoWMjIyMi4yOjoyKioeEiIuKjIuNjo+Li4uLi4uLi4uLi4uLioqKiomJiYmKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiomJiYmJiYiIiIiIiIiIiImJiYmJiYmJiYmJiIiIiIiIiYmIiIiIiIiIiIiIiIiIiIJ/eHp7enp6e3x8fX1+f35+fX1+f39/fn+AgICAf3+Af4CAgYCDhYiHh4aGhoaGhoaFhYWFhYyMjI2NjJCSjI2Ii4mJi4uLi4mLjIqMi4uLi4uLioqLi4qKiomJiYmJiYmJiYqKioqKioqKioqKioqKioqKioqKioqKiYqJioqJiYmJiYmIiIiIiIiIiIiIiImJiYmJiYmJiYmIiIiIiIiIiIiIiIiIiIiIiIiIiIiHgXx4e3x5enp8fHx9fX9/fn59fX9/f39+fn+Af4B/f3+Af4CAgIKEh4eGhoaGhYWFhYWFhYWFjIyNkY+PjZGJjIaJjIuIiImMiYeNjo+NioqKioqKioqKiomJiYmJiYmJiYmJioqKioqKioqKioqKioqJioqKioqKiYmJiYmJiYmJiYmJiYiIiIiIiIiIiIiIiImJiYmJiYmJiIiIiIiIiIiIiIiIiIiHh4eHh4eHh4WAenl9e3t7enx8fHx9f39+fn19f39/f35+f4B/gH9/f4B/gH+AgoSHhoaGhYWFhYWFhYWFhISLi46PjoyLj4iHiYmMjYWFjo2KiYyNi46KioqKiomJiYmJiYmJiYmJiYmJiYmJiYmKioqKioqKiomJiYmJiYmJiYmJiYmJiYmJiYmJiYmIiIiIiIiIiIiHiIiIiIiIiIiIiIiIiIiIiIiHh4eHh4eHh4eHhoaHh4eHhH55eX16enp7fXt8fX5+f35+fX1/f39/fX5/f3+Af39/f39/f4CChIaFhoWFhYWFhYWFhISEhIuLjI6MjI2Lh4mIiomGgoiNjoiKi5GTj4uJiYmJiYmJiYmJiYmIiYmJiYmJiYmJiYmKioqKiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiIiIiIiIiIeHh4eHh4eIiIiIiIiIiIiIh4eHh4eHhoaGh4aGhoaGhoaGh4eDfXp5e3p5enx8e31+fn5/fn59fn9/fn9+fn+AgICAf35/f39/gIKEhoWFhYWFhYSEhISEhISEioqOjYmIiIqKh4iHiomIioiIh4qGi5GPiomJiYmJiYiIiIiIiIiIiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmIiIiIiIiIiIiHh4iIh4eHh4eHh4eHh4eHh4eHh4eHh4eHhoaGhoaGhoaGhoaGhoaGh4J8eXl6eXp7e3t7fX5+fn5+fn59gH9/f39/f4CAgH9/fn9/gICAgoSGhYWFhISEhISEhISEhISKi5CPiYmJi4qHh4WHiYuKiYSLjYmOjYqJiYmJiIiIiIiIiIiIiIiIiYmJiYmJiYmJiYmJiYmJiYmJiIiIiImJiYmJiYiIiIiIiIiIiIiIiIeHh4eHh4eHh4eHh4eHh4eHh4eHh4eGhoaGhoaGhoaGhoaGhoaGhoaGgXt4enp4e3x7e3x+fn9+fn5+fX1/f39/f3+Af4B/f39/f3+Af4CChIaFhYSEhISEhISEhISEhI+Qj4+IiYuIhoeIiYuLjIuJioqNio6Oj4iJiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIh4eHh4eHh4eHh4eHh4eHh4aGhoaGhoaGhoaGhoaGhoaGhYWFhYWFhoaAe3h5eXh4enp8fX1+f35+fn59fn9/f39/gIB/gICAf39/gIB/gYKDhoiGiIaDhISEhIODg4ODkpKOioeKi4qLh4uNiYqJi4iHiouIio+SioiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIh4eHh4eHh4eHh4eHh4eGhoaGhoaGhoaGhoaGhoaGhoaGhoaFhYWFhYWGhn96eXh4eHl5eXx9fn5/fn5/fn1+f35/f3+Af39/f4CAgH+AgH+BgoOHjo+PjoiHhIWFhoaFhYWSkI6KiYmIiImKioiIh4aKjIiHiYmOkJGNh4iIiIiIiIiIiIiIiIiIiIiIh4iIiIiIiIiIiIiIiIiIiIiIiIiIh4eHh4eHh4eHh4eHh4eHh4eHh4aGh4eHh4aGhoaGhoaGhoaGhoaGhoaGhoaGhoWFhYWFhYWFhYWGf3l4d3d3eXp5e3x9fn9+f35+fn5+f35+fn+Af4CAgICAf3+Af4GBg4eOjo6Ojo6Mjo2OjY2MjZCQjomHhoiJiYeIiouIiYyJiYaKjY6PkYuIiIiIiIeHh4eIiIiIiIiHh4eHh4iIiIiIiIiIiIiIiIiIiIeHh4eHh4eHh4eHh4eHh4eHh4eHh4aGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaFhYWFhYWFhYWFhYZ+eXd5d3d6eXl8e31/fn5/fn5+fn5+fn9+f39/fn+Af39/f39+gIGEiI6Ojo6Ojo6Ojo6Ojo2NkJGOi42JjIiIiYaHiYaIioiHi4yLjpCQiIeIiYmJiIeHh4iIiYmIh4eHh4iIiYiIiIiIh4iIiIiHh4eHh4eHh4eHh4eHh4eHh4aGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoWFhoaFhYaFhoWGhYSEhIWFhoaFhIWFhX55d3l2eHl4e3x7fn5+fn5+fn5+fn5+f39+f39+f39/f35/f3+AgYOGjY2Ojo6OjY6NjY6OjY2Qj42Ni46KhoiKhISLiYeDhYSDi4mLj42JjI6QkI+NjYyLjY6Pj42NjI2Nj4+Pjo6MjYyMjY2KiYiHiImHh4aHh4eHh4aGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoeHiYqKiIeJi4yNjo2LiImLi42OjYyJiImMgHl3d3Z6eXh7e3t9fn5+fn5+fn5+fn5/f39+fn5/f4B/f4B/f4CBg4aMjY2NjY2NjY2Qj4+Pj46NjI6KiYuMjIeFiY2Lh4aIh4aHh4uNjo6Pj4+Pjo+Pj4+Pj4+Pj4+Pj4+Ojo+Pj4+Pj4+Pj4+Oj46Oj46Mi4uJh4eHh4aIhoaGhoaGhoaGhoeLiYeHiIiLjY2Mi4yLjY2Ojo+Ojo6Pj46Ojo6Ojo6Ojo6Njo6NjY2AeHZ4eHp4enx6fH5+fn5+fn5+fn5+f39/fn59fn9/f39/gH9/gIGDhoyMjIyMjY+QkpOTk5KSjYyMjIqHioyKh4eJiYWCiouIiYWJjpCNjo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6NjI2NjI2LiYaHh4eHiYqLjY6NjYyNjY6OjY2OjY2NjY2NjY2NjY2NjY2OjIyNj5COjY2MjIyLi313dXd5enp7e3p+fn5+fn5+f35+fn5/f39+fn1+f39/gICAf3+AgYOFj5KRkJGSk5OTk5OTkpKLi4uLiomMiouLiYuKhoeOjYiIjI6OjIuMjIyNj46Njo6Ojo2NjY2MjY2NjIyMjIyMjIyMjY2NjYyMjI2NjYyMjI2NjIyNjIyMi4yMi4yMjI2MjIyMjIyMjIyMjIyLi4uLi4yNjY6Sk5OSkpSRkJOVlZSTk5COjo6Oe3Z2d3h6ent7e31+fn5+fn5/fn5+fn5/f35+fn9/f39/gIB/f4CBgoSNkpKTkpOSkpOTkZKSkoqJioyJi4qJjIuKioiHiYqKi4mKjY2Mj46Nj5KUlJOUlJOTkpGSkI+Ojo2NjY2Pko+OkZGOjIuKioqLi4qKi5CPjoyMjIqKioqKioqKiouKioqKi4yLi4uMjIyKiouLi46RkpOTk5SUk5STk5SUlJOTk5KSkpKSk5F6dXZ2eHt7e3p6fX5+fn5+fn5+fn5+fX5/fn5+f35/f3+Af39/gIGChIuRkZGRkZKSkpGRkpGRiYmIiIqMiYiJiYuJhoSJhoyKh4ySkpKTk5OUlZWWlZWUk5OUlJSUk5SUlJSVlZWVlZWUlJOTkY+QkZKQjoyRlZWVk5KSjo+QjYqKi4qKi42OjY6RkpCRkpKSkpGRkpKSk5OTk5OTk5OTk5OTkpOSkpKSkpKSkpKSj3h1d3l6e3t7ent9fX19fn5/f35+fX5+fn5+f39/f39/f4B/f3+AgYKEi5GQkJCSkpKRkZGRkZGIiIiIi4uJg4eLi4yMiIeHjYyNkpSSkpOTlJWWlpaVlZSSkpOTlJSUlJWVlZaXlpaWlpWUk5SUlJSVlJSUk5OVlZWUk5KTk5OTkJGSkZGSk5OTk5KSkpOSkpKSkpKSkpKSkpKSk5OTk5SUk5OSkpOTkpKSkpGRkZGPdnJ3enp7e3t8fX59fX1+fn9+fn9+fn5+fn6Af39/f3+Af3+Af4CBgoSKkJCRkZGRkZCQkJCQkIeHh4eIiIiFi4+KjI6Njo+OkJWUk5OTk5SUlZWVlJSVk5KSk5KTlZSUlZaWlpaWlpaWlpSTk5OTk5OUlJOSk5SVlZSTkpKSkpOTk5OTk5OTk5KSkpKSkpKSkpGSkpGRkZGRkZKTlJSUlJSTkpGRkZGRkZGRkZGRkYx0c3d6ent7e3x9fX1+fX5+f35+fn5+fn5+fn9/f39/fn9/f39/f4GDhIqQkJGRkJCQj4+Pj4+Ph4iKi4yNjYuOj42Mjo6RkpGSk5OSkpKSk5SUlJKSk5OTk5OSkpOUk5OTk5WVlZWUlZWUk5OTk5KSk5OUk5KTlJSUk5KSkpKSk5OTkpKSkpKRkZKSkpKSkpKSkpKSkZKRkZGSkpOTlJSUk5OSkZGRkZGQkJCQkZCRinN0dnp8fHp7fXx9fX59f35/f35+fn9+f31+f39+fn59f39/gH+AgYKDipCQkZGQj5CPjo+Pjo+Oj4+Pj4+Pj4+PkI2OjpCRkpKSkpKRkpKTk5OTkpGSkpKRkZKSk5OSk5OSk5STk5OTlJOSk5OTk5OTk5OSk5OTkpKSkpKSkpKSkpGRkZGSkZCRkZGRkpKRkZGRkpGRkZGRkpKSkpKSkpKSkpKRkJCQkJCQkJCQkJGGc3V2e3x8e3x9fX1+fn1/f35/fn5/gH9+fX5/fX5/fn5/f3+Af3+BgYGKkI+PkI+Pj4+Pj4+Pj4+Oj46Oj4+Pj5CQiI2PkJGRkpKSkpOTk5OTkpKSk5KSkZGRkZKSk5KTkpGRkpKSkZKSkpKSkpKTk5KRkZKTkpGRkpKSkpKRkJCQkJGRkZGQkJGSkZGRkZGSkZGRkZGRkZGSkpKSkpKSkZCRkZCPj4+Pj4+Pj4+PkX9ydHh8fHx7fHx9fX5+fn9+fn5/f3+AgH99fn5+f39+f39/f4CAf4GBgYqPj4+Pjo6Ojo+Pj46Ojo6Ojo+PkI+Pj4+GjpCQkJCRkZGRkZGRkZGQkJCQkZGRkZGRkZGRkZGQkJCRkZCQkJGRkZGRkZGRkJCQkZGQkJGRkZGRkI+PkJCQkJGRkJCQkJCRkJCQkJCQkZCQkJCQkJCQkZCQkJCPj4+Pjo+Pj46Ojo+Pj4+PeHJ2eXx9fHp9fH19fn5+f35+f39/f4CAf39/f35/f35/f39/gIB/gYGAio6Ojo6NjY2Ojo6Ojo6NjY2Oj4+Pj4+PjoiQkZCPj4+QkJCQkJCQkI+PkJCQj4+Pj5CQkJCQkJCPj4+PkI+PkJCQkJCQj4+Oj4+QkI+PkJCQkJCPjo+QkJCPj4+Pj4+PkJCQkI+PkI+Qj4+PkI+PkJCQkI+OkI+Pj46OjoyMjY2NjIqDiYhzc3Z4fX58eX18fX1+fn5/fX5/fn9/gH9/f4B/f39/f4CAgH+AgH+BgYCJjY2Ojo6Ojo6OjY2OjoyNjY6Ojo6Ojo2NiJCRkI6Njo6Ojo6Ojo6Pjo6Ojo6Ojo6Pjo6Ojo6Ojo6OjY6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Pj46Oj4+Pj4+Pj4+Pjo+PjY2MjYyNjoyLi4mJiYiFhYSDgoKEgnR5fXp4dXJrZWltb2xmZmdncHNzd3l9fnl6e3x9fX5+fn59fn9/fn9/f39/gIB/gH+AgIGAgIB/f4CBgImNjY2NjY2MjYyMjIyMi4uLjYyMjIyMjIyGj5GRjIyMjIyMjIyMjIyMjIyMjIyNjY2MjIyMjYyMjY2MjIyNjY2NjYyMjI2MiomKi4uJh4KAh4iEgXt6gH57fXx8fXlzcnJycnV1cG1ramppZ2NkYV9bXF1eWFVXWFlTS0VJSkpLTE1PT0tgdHR3eX19eHp5e3x8fX5+fn1+f39+f35/f4CAgH+AgICBgYCAgICAgIGAf4OEhYSFiIuLjYyMjIuLi4yGiYqKioqKh4OOkJGNiouLi4uMiYmKioqKiouLi4eDi4qIiYmGhYWEhIeJiYWCg397fHl6e3pzcHFxcW1samdsbWdlZmVmZGNlZGVkZWVlZWRkZGNhYV5dXFpYWFdUUFFSU1JTTU1KSUZESEpHR0hHR0xOSWdzdXh5fXp4d3l8fHx8fn5+fn9/fn9/f35+f4CAgIB/gICBgICAgICBgYFnXmBjYWNucX17ent/fXd8fHZ4ent4eHpvcHt4eXt8e3h3e394dXd0dHZ1dHZ3dXFycW5wcnBnaGtsbm9tamlpaGhlZWRkZF9gYWJgYF5dWVhaWltdXV9gX2BfX19gYmFeXl5eWVldXF1bV1dWUlRSU1NOUUpISUZERUhMTEhGR0lLSklNbXJ0eHp7end3eXt6e3x+fn1+f39+f35/fn5+gIGAf3+AgIGAgICAgICCgWdYW1pZXFtcY1xaXF5ga3FtcHBvbm5vbmtpbmxrbG9qaWtraWpraWdmZ2dnaWhnbWdqZ2hlaGdiY2JhYmBgXVhbW1dYV1RWUVBUU1NNSkxLTExOTk9UWFhXVVVUUlBQTU1QT05LTE1QUU9MTEpHSUlHSEhJSEhIR0ZHSEpKSEhISUlISVZwc3V5ent5dnZ5enp7fH59fX5/f35/fn5+f3+AgX9+f4B/gICAgICAgIGBbFtYVlZWWVlaWVlYVVZoamxubmxra2poaGloZGVkYlxiZl9fYGNfXF9dYF1eWl5dWVleYmFeXlpZX1xYV1NOTUxLS0tMSUtNTktKS0tMSktQTEtLRkdHSUlGR0lISUZFSEdGRkVERUVEREVJSUlHSEdIRkZLTUtJSUlIR0hLTU1LTExMVXFzdnl6e3l2d3h3ent8fn1+fn9/f39+f3+AgIGAfn5/f4GAf4CAgIB/gYJoUlRVVlNVV1lZWVdXV1tbYWNfXlxbWFZWWVZSVFJRUVVUU1NTUE1KTU5QUk9NUFFRUVFSVlZSUFFUUFBOTk9MSk1MS0xKSktLRklJSkxJR0pISUlFR0dGRkVFSElKR0ZHRkZHR0hKR0dISEpMSkpLSUlISktLSkhKS0pISUtMTU9QUEtUdHR1eHp6eHZ2d3d6e3x+fX5+fn5/f35+fn+AgYB/f3+AgYB/gICAgH+AgmlQUlRXVVRWWVdYWFpbVFRTUlBRU1FRUU9OTlBQUU9MTlBPTk5NTEtNTk5QTU9QUFJRUE5OT09PTk9PUFFPTk5PTk5QTk1NS0lISEpJSUlJR0ZHR0dJSkhJSEhJSEhHSEdISElISUxLSklISkpJSkpIR0pMS0pJSUhKSktMTk1OTU9RTFVzcnN3enl3dnR2eHp7fX19fn5+fn9+fn5+gICBgICAf4GBgH+AgICAgICBbE9PTlRZVVVdW1lXV1hOTUpKSUZKT0xKSkdJSk1NS0pMTUpHSUlJSktMRkRGSktLS0hKTExMT01MTE5PT09NTk9MTk5OUFBPTE1MTk1MTEpJSEdJSElISElJS0xLS0pJS0pJSklJSUlJR0dKSUdJSUpKTk1OTEhJSklJSk1PT01LT1JOWXBwcnd4d3d0dHR3enx+fX5+fn5+fn5+fn9/gIGAgICAgYCAf39/gICAgIFvS0pNTlFOTlVXVlZSU0lFQ0VFUkREQT5CP0RAQD5CREFAQURHRkVIRUJBQEBDQ0RFQUNFSEtPS0lJSkhHSklKSUlLSkxQTk1MTU1MTU1NTElIREZGR0ZGRklKSUlLSkhMSklKSkpJSEhKS0tIRkdJSklLTU5OSktPTUxLTU1PT05QT1BgcG9yd3h2dHJzdXd6fX19fn5+fn9+fn1/gICAgICAf4CAgIB/f3+AgICAgXNQUE5OUE1KS1BSUE5RQ0RCQUVRRT1DPT9FSDk6Oz0/PTxBRkA+Ojw+PjxFRD0/RUE/QEFAREVHR0dHQkRERUZFR0dHR0pHSEpLR0NER0pHQ0RFQUFDR0hHSEdISktKSElMS0lISktLTU5MTUxMSkpMS0lLTU9PUFNRT1BQTk9QUlFNUGdwb3N2dXRycXR4eX19fX1+fn5+f4B+foCAgH9/gIB/f4CAgH+Af4B/gICCdlRVUVFQT0xNUFBOT09BQUFAQkE/Oz48Pj8/PDg5ODs7OkA6Oz48Ozs8PEhMPT1BQT9CQz1BRERGQkZGREdJSEM/QEBAQUFCQUE/Pjw9PkFAQD8+P0BFR0dHSUtMTk1OTUxNTUpLTVBVU05MTlFOTk1OTE1NTk9OTk1LS05OTk1OTkxUbnBwcnR0c3Fydnl5fX19fn1+fn5/gH5+gICAgICAgH9/gICAgH9/gH+BgIJ4UVFSVFJTUVNTUVFST0BAPT4/PD8+QEE/PT45Ozo6Ozg4Ojg3Ojw5Nzg7Oz49Ozs6ODpAQEFCP0E/Q0ZEQkNDPzs+PkBDQ0E/Pj9BPkBAQj9APD9CQEFDRUVFSktQT1BPTU1OTExMT1JRUFJOTExPTUtOT0xMTEtMS0tKS0tKTU1LS1xxcXF0c3VzcXR4eHp9fn1+fn5+f39/fn5/gIGAgH+Af4CAgICAf4CAf4CAgXxSTU9RUFFSUlRSU1NOPDs8Ozs8P0BBQkA9PDk8PTw5Nzk6Ojk4ODo6Nzg6OTo7Ozg3ODk7Ojg8Oz1AQUA9Ozs+PD09QEJDQT9BQkE9Pj09Oz0/Q0RCQD9BREJFR0pKSkpKTE1MTExNTExOVVNLTE1USVBKSU1KSUpLS0pJSEdKS0lKZnJxc3RzdXJydnl5e31+fn5+fX9+f39/f36AgICAf4B/gICAgIF/gYF/gYCBgFZMTlBQTlJRUFBRUU44PT88PDo9PkFAQT8+PkA/Pj07PDw+Pz08PTs6PD09PTw8PDw7PDo7PD49Pj8/QUA+P0E/QEBBQEBAPT8/PTw6Oz09PD9AQUJCQUBCREZGRkdGR0dISUtMTExLTEtKS0lKSk1MTEpMS0lISUxMSklJSElLR01tcHF1dXV1c3V4eXl8fX5+fn5+fn5/gH9+gIB/f39/gH+AgYCAgYCBgICBgYCCYUtPT05OT1BPT1BQTzo8Pjw9Oz8+PkFBPz0/QkNDQD48PT9APz89Oz49PkNFPz9APTs9PT08Ozo9PkFBPz5AQD9BPz89PD48PTs7PD0+QUA/QD5AQ0NEQkRFSEVFR0hISEdGSUpJSUlJSUhKSkpKTEtKSklJSEhKSktMS0lLSkpIVnBvcXNzdHR1eXp7e3x+f35+fn5+f39/f39/f3+Af4CAgICAf4GBgICAgIGBgIJtTFBRTk9QTk5PUFBPPjw8PT4/P0A+QEA/Pz9DRUQ/PTs8QD46Ozo6OTc6PDk9PUA9Ojw7Ozw7ODk7Pz49PD07PEA9PTw8Pjs9PD0+QUBCQUBAP0JEQ0RFRkZGQ0VHSElJSEhJS0tMTUpKSUpNTUpLSktJSEhISEpJSktKSk5MSUlfcHBycnJ0dXZ6e319fX5/fn5+fn5/f35/f36AgIB/gICAgICAgYGAgICAgIGAgnZNTk5NTk5MTE5QT0w+QTw8PT8+QkM/PkFBQUJBQD08PTs+PTo6Ojw6ODk4ODo7PT8/PDs7PDs6Ojs+Pz89PDg6Pjw9Pj89Oz4/QEJDQkJDQ0FCQkFCQkRCQkRCRENGSUdGRUhJSUtNSklKSktMSkpJSkVESUlGRkhISUpKTEpGRmdwb3FxdHZ2d3t8fH18fn59fX1+fn9/foB+fn+AgH+AgICAgICBgYCAgICAgICBek5JS0tMTExFSUxOTTw/PDw9PkBAQUE7QkNCQ0A/Pz9APT8/Pjw+QD89PT0/PT0+Q0Q/Ozw9PkA9PT5BQ0A8OTtBPz4+QT07P0JAQkNCQENDQUNBPT0+QD0/QUFBQENFRUBAQ0JDR0dFRENGRUZGR0VEQEFHR0ZDRkRHSEpHQz5IbHBwcHF0dXZ5fHx9fHx/fn1+fn5+fn5+f36Af3+AgICAgICAgIGAf4CAf4CBgIF+UUhLTU1NS0pLTE9RQD8+PkFBQEBBR0FDRENEQT9AQEA/PUA+PD0/P0BAQENAQD9AQD49PD1ARUFCQkZIQz08QERDQUE/Pj1AQT4+Pj88PkBER0VAPkBBP0BDRkVDQkJDQEJEREJERUFCPkFCQkFCQEA9QUJDRENDQUNFR0E/PVZwcHFwcnV1d3p8fHx8fX9+fX19fX1+fX5+fn9/foB/f4CAgICAgYCAgIB/gIGAgX5SSEtNTUxLS05OUlVEQkBDQ0FBQkBCQ0BAQUFAQUA+Oz48Pz08Oj49P0JCREA/P05hX0pAQ0VJSUlJTU1LRUNGR0hFR0VFRUREQ0E/QD4+QkZKSkdERUdGRkpOTktKSUdHSEtMSkdHQ0REREVEQUJCQ0BDREVEREVERUZDQkFFZW9wcXF0dnV4e3x6fHx+f319fX19fn59f4B/f39/f39+gIGBf4CBgICAgH+AgICAfVJJSUpKSEpKTE9SU0dGRUdIREdIREA+PDs+QERFRD88QUNEQj89QT9BREVEQ1d1homKflhHSEpMTE1PT0xIR0hHSElJSEhHR0hIRUNFRUVFRkhKSkZFR0lKTU9PTU1LSktKTU5LSUhHSElIR0ZFRkZGREZIR0VFSEhGSEdIRlFubnBxcnZ2eXt7e3p9fX5/fX19fX1+fn1/f39/fn5/gH+AgYGAgICAgICAf4GBgIB8UEhHSElGR0lKTU5OSkxJSUpLTE5KRkNBQkNGSUhJR0hISUdGQkRGRERDQVV0h4mHh4aIgldJTE1MTU5MSkdHR0dER0dHR0ZIRkhFQ0RERkVEREhIQ0NDRkpKS0xMTExMTElKS0pKSUlJSEpISEdISUhHR0hGRkZISklJSUlIXW9vcXJ0d3d6e3t6e359fn59fX19fX5+fYB/f39+fn+BgIGAgYCAgICAgIB/gICAgHxNR0ZIRkVGR0dKS0pMTUxLTU5NT0tJSEhKS0tLS0pLTUpLSEhGRkdGRVBshIeGhoaHh4eHfFBLTEtIR0ZGREVDQ0BBQ0NDQ0ZGRUJAPj5AQUFAQkQ/Pz9ERkdERUdJS0lJR0hJR0lJSkpJSEZKSkpKSUpJSkpKRklMTEpKS0tmb3Bzc3R2eHl7e3t8fH1/fn19fX19fn59f39/f35/f4CAgICAgYCAgIGAgICAgICAfU9GRkdGR0hHRUZHR01NTUtMS0lHQ0NDRElLS0tLS0tNTEtNTElGSlVsgYaFhISGhoaHiIaKdUlJRkI/P0A/Pz88PDw+Ojo8QUFAPjw5OTg8PD07Pjs5Oz9BQkFBQ0NDQEFCRURCQ0ZISUhISExNTEdJSk1NTk1KSktLSkxNU2xvcXRzc3d5e3t7fH19fn9+fX19fX1+fn5/foB/fn9/gICBgIGBgICAgYCAgIB/f39+UUZFRkdJSUdEQ0VGTk1MSklIRT85Oj5ARUhHSUhLTE9OTlFOUV5ygYWEhIWFhoeHiIiJiYyOZkJCPTg4Ojo5ODc4ODk2NDc5Ozw6ODU2Nzc4OTc4NzY4OTs8PD5BOzk5OT09Pjs7PUFERUhKTUxMR0lIT1JRUFBOTE1NT1Fdb3BydHN1eHp7e3x8fn5+f359fX59fX5+f39/gH9/f4CAgICAgYCAgICAgICAgIB/f39RR0ZHSEpIRkVGR0hMTEpJSUdDQjU2OjxDQEJGSEtITEtOVGd7hISDgoOEhomKi4uLiomKi4yJVDs4NjU2NzY2NjQ1NzYzNDY4Ojg3NjU2NTY3Nzc3ODo3Nzg4Ojs3Njg4OTg5ODc2OjxAR0ZJRklGRUZPU1JTU1JPUFBSVGVwcXN0dHd5e3x7fH1+f35/fn19fX19f39/f3+Afn+AgICAgICBgICAgICAgICAgH9/flJISEhJS0lHSUpJSkpLREVIREJANTc4OD06PERCREZGRFZ4hISCgoODhYmKiomJioqKiouJioqBSDY3NjQ2ODg3NDU3ODQ2Nzc5OTc3Njc2NTo6Ozo6PDg5OTk5ODc3Ojo6ODg3ODU4OTtBPT4+QkE/QUtMT1FQUU9PUFFXa3FydHR1d3p7e3t9fX5/fn9+fX19fX5/f4B+fn9/f4CAgH9/gICAgICAgH+AgICAf39+VEhHSUlMTUtKS0tMSUg/QEE/PDo1Nzk4OTc6QTk8RD9QfYSDg4SEhIaJioqIh4iIiIqKjIqJiY16Pjo4ODs8PT45Ojs8ODk7OTo7Ojo5Ozo6Pj09Pzs7Oz06Pjw6PDs8PD07Ojo8ODo6Ozo5OTk8Pzw9QUJESUpMS0pLTFdvcnN1dHZ4e3t7fHt9f39+f359fX19fn9/f35/f39/f3+Bf4CAgICAgICAf4CAgH+Af35URkVGSUxOTkxKSk1CPzs7PDo4OTk4OTk5OTo+PT8/Q3aEg4SFhYaIiYiHhoaGiImIiYuMi4mKioxsPDs+QkNFRUJBQUI+QENBQD89Pj5APz8/QD9APT0/Qj9BQT9BPz1BQUA/P0E8Pjw7Ojs6OTs/PTo7PT1BQUNBQkNBWHBxdHR0dnl7e3x9e31/fn9/fn19fX5+f35+fn9+f4B/f4CAgIB/gIGAf39/gICAf39/flJFQ0FHSk5PTElHSzo4OTs5Ojo8PDo6Ojw7PT5APz1hhYOEhIWFhomJiIeGhoaHiImKi4uKioqLiYtePkRHSUtKSkZHR0RGSEdFQ0BAQ0VDQ0FCQ0I/QERIRUNFREVFQUZFRkRGRkRAQj49QD49P0A+Pj4/Pj8+Pjo7PTxgcXJ0dHV3enp6fX19fn5+f39+fX19fX5/fn5+fn5/gH9/gICAgICAgICAf4CAgIB/f4B+UERAPUNIT01HRkJEOTc5PTo8Oz49Pj47Pjw/P0M+Sn6DhIWGhoaIiYiIh4aGhoeJioqLjI2MjIuKiodXR0xMTUtOSUlLSElKSklFQ0RGR0ZEQ0ZHRUJISUtHSEdGR0dFS0pMSUpLSkNGQ0NEQkFBQ0JEQ0NERENBPTs9QGhwc3R0dnd6eHt8fH19fn5/f359fX1+fn9+fn59fn+Af3+AgH9/gICAgICAgICAf3+AgH9PQT49P0RMS0BCQkE5Nzs+Ozw6PT8+Pzw/PkJBRT9ohIKFhYeHiIiJiIiHhoaGiIiIiYqMjYyMi4uKjH9QTVBNS05LSkxJSUpIS0ZER0hISUVFSUdGRUxMTUlKR0dISUpOTU9NTE5LSEZHR0VFQ0ZGRkZERUhIRkNBP0BMbXB0dXZ4eXl5fHx8fX1+fn9/fn19fX1/f35+fn5+f39/f39/f3+AgICAgIB/gICAgICAf1FBPz4/RkdHPTxAQDg3PDo7PDo9Pzw9PT9AQ0JIU36DhISFhoeHiIiIiIiIh4eIiIiJioyNjIyMjIuKjXFNUU9NTExMTElISEZKSURKSEdLSklKSEhHS0xOTExISElKTVBOT05NT0tJR0lKSElESUhIRkZHR0lGQ0JBQ1VvcXV3eHl7eHl6enx8fX5+f39+fn1+fX5+fn5/f36Af39/f3+Af4CAgICAgICAgICAf39/VERBQUJHR0I/OD9AODo7Nzw9Ojw/PD09QEJDRExthIOEhIWFhoeIiIiIiIeGiIiIiIiJjIyLjIyMi4uLi15SUlBNTk1LSkdGQ0hKR0xKR0tPTEtLSkxNTE9QTkhJS0xPUVFQUU9PSklKSk1LTEZHSEdGR0lGRUVCQEJCXHByd3h5enl5eXt6e3x+fn5/fn59fX19fn9+fn9+f4CAgIB/f39/gICAgICAgICAgIB+f39VRUNFRUdHRUQ7P0E7PTw4Pz09PkBFRD5DRENGSnWGg4ODhISGiIiIiIiIh4eIiIiIiIqLi4uMjIyMi4uNfFdWUlJUUk9MS0tFRkZLT05PV1ZRUE9SU1JNU1RPTVNMUFNVV1JTUlBMSk1NTUxOR0dKRkZISkRERUVCRENjcXV5eXp6ent6e3p6fH59fX9+fX19fXx9fn5/gH9/gICAf39/f3+BgYCAf39/gIB/f39/f1VGRkdHR0dIRj5AQj0/PTxBP0FBRFRLQkhJRklMeYaDhYWEhYeIiIiIiIiIiIiIiIiJiouKioyMjIyOi4uLZ1ZWa2FFUlFRUEs7OlFTUmB1XVVWVFZZWVJYWFJaZlBVV1pdUlRXUVBOUlBQUVFLS0tHSEpIRUZJSUlISWpzdnl5enl6e3t8ent8fXx9f359fX19fX1+f39/f3+AgIB/f39/f4CAgIB/f3+AgH9/f35+VEhKSUlHRkZFPz9BQEVBQ0ZEQ0RLVlBKUFBOT1B5hoWHhoWGh4iIiIiIiIiIiIiIiImIlJyMioqMfWGKi4uHbFtkVTpYWFhTUT5AVlVZXGRgVllicl5dVl1aVkVRWVpcWV9UWWdSVVZYVFRWU09PTUtMSklJTE1LT01UcHR2eHl4d3l5ent6e3x9fH5/fn1+fX19fn1/f39+f4CAgH9/f3+AgICAgH9/gH+Afn9+fn5WSkpJSEdGRERCQT9ITElNUEtJSk9TUlFUVlVWVHWFhIWFhYWGh4iHiIiIiIiIiIiIiImcnaCPiY5nO36MiYqLem5wWFpbWlJTUlZWVFpadYNZVX2QYVxYXV5XSVZeXltbX1lIWVhZXF1YWFlXUlFNUFFNTU9TUVFVUmJ0c3Z3d3Z4eHh6e3t8fX19f39+fX59fX1+fn9/gH9/gIB/f3+Af3+AgICAf39/gIB/gHh5fVlOS0pJSUZCREBBOk9RUVdYUFBQUVJTUlZXV1dXbIGCg4WEhYaHh4eHh4iIiIiIiIiIiJaanJeIioFuhomIh4OKfmZZWVxZU1ZUV1JRV1ZjloBRZXJYWldfaFBgZlpaWFxoYkdPWmlnXFtcXV1XU05TUFBRVlZWVllab3N0d3Z2dHd4eHt7fH19fX5/fn59fn18fn9/f3+Af39/gH+AgH9/gICBgYB/gH1yfX9/b3R8XVNQT01LSkVDP0A7UFBaWlpSU1FPUVJRVVJVU1ZedXiAhYSEhYaGhoaHh4eHiIiIh4eIh4ORjomJiIaFiIiGfYB7XFBWWFRSVFJRUUxPTUtmeVpdVFlVVl1aTFRaVVNUXlpZV1dXemtYWlxcXlNQUE9JTk9XVlhaWmVxdHd2dHR2eHl5e3t8fX19fn99fn1+fX1+f39/f4CAf3+Afn56eHd2c3V7f3+AgHRrfn5rcnleW1ZVU1JPS0ZDREFNXoNsVlJTT09RT1FWUVNSUlRjZHaAg4KDhISEhIWFhISDhoaGhoeIhn6JiYiHhoOHh4d5bXFWSUtOTktNS0hKREZIRUM+U2NVf1JRUU5LUlVSTU9ZUk5PUVNVVU1RU1JQTkxLSENJR1JTVFldbXJ2d3V0dHd7enp7e317fX19fn19fX59fn9/f39/gH99fX5+f39/gIB+e3Zzd31+fmR1fWlxdGBkXV1bWVVRTEhMSWFsknRQUVNNUVJQU1tSU1JRUlVVYnN7fH6AgYKBgX99e3uAf4OChYaHgoaGhoGEgYaFhnVfXUtDPkJCQ0NBP0RQQ0NAQz5CSEdWQEhOTUddaVFIRk9GRUZGSEdIQkNIR0hKR0RBQUNATlBNUmR0dXZ1dHR2eXx7ent7fH19fHt+fX19fn5/f3+AgIB/f3x8fX+Af39/f4CBgH12dHt/bWh8Z25xZmllZGJcWFNRUFVSc1dlW09PTkxRUlBVWVNVUVFUUk9WYGtsc3Z6e3h5dHJuc3RzeXh+foOAg4OCgIKAgoGBa0xHPj46Oj5APz4+PmpQS2FFRkhJRUI/R0xNR01RVUpCRT8/PT08PT0/PT9BQ0I/Pjw9Qj5JTUZVb3V1dnN0dnh7fHp8e3x9fX19fH59fXx+fn9/f4B/f39/enl3eHd2dnh7foB+fXt4dnx1YXhnbHBqbGppZmBbUVFaXFleSUpPUE5LTFFSUVRWVVdRUVdWUFhbYl1hZ21tbG5qaGBucmltbHF1e3p9e3h6fHx4d3hkQkBAQTw6QkNBQUNBW1xPe05PT05LTE1PT1BMS0xXTklHQUE8OTc3NTk5PTs7Ozg5ODk/O0FHPlx0dXV2dXZ3eXx8fH18fH18fn18fX19fX9/f39/fn9/f314dXd6e3p3eXh1d3t8eXh1eXdjcWhpcG1ubW1oZl5PT15cWklHT1FRT01QUU5RUlRWWFNSWVROWVpbV1lcX15fZV9dXnF3a15gZ2t3b29sam9tbmxmYllHRkZIQkFGSEVFRkNMUU9hV1JYUVBTU1JVW09PUVZQTUlERj45OTY1ODY5Nzk6MzY1Nzk1PEI9ZnR1d3h3enl7fX18fHt8fX1+fnt9fn19f39/fn5+fn9/e3d1eX18enh8fHx8dHd2d3Z1d2tuaWhxbm9vb2prYFVXXlpXTUtTVFNQUVVPTFJTVFdYU1RYUUxYWVlWWFhWWFldV1hYaHNrXVZgdGthYV9dZGBfXllVUE1PTkxJR0pLSUhFQ1BPU1pXVFROUVNZU1xlVU9TVFFOS0lIQz9BOTk4ODk3ODg0NzU3ODU5OUducnV5eXp7e319fX18e319fX5+en1+fH1/f359fn59f358dHR1e3hycW9vbnR4cXJzeHZ1cWZkZ3JucHBxbm1kXV9fWVdPUFdWVlNUVk9PVVZXWFlTVVRMS1NVVVVVV1BUVVdUVVJdbl5STllgW1ZZO0RVV1NbZkpMUFJST01NTk1NTEpFUFBVWVNUT0pOT1VTU1xWUlVTUk5NTElISEY/Pz06Nzg3NjU5OTY3NjY1WHFxdHh6ent8fX19fnx8fXx+fX15fX18fn5+fXx8fX1+fXxydnF4eHJ1dXFxbnBwb3B1dnRuamRkanBwcXJwbmZlZGNcXlJUWlZXVFNWVFJYV1lZWVJVT0lHT1BPT01SSk9QT09OTk9UTE1JUFBTVFUyPFhNSUBRPWNgUVNRUE1QUE9OTUxQTlRSUFJMSUxLT1JQUVJSVFFST0xNS0xMSENCQT06OTg3NjtCNDU2NjtlcHJ2eHl7fHx9fnx9fH19fX18e3h8ent9fX58e3l9fH18e3B1b3d1cHV0b3N2cHFxcHV1dmNqZ2VXaHRycnFuaWlocFZWVFVYVVZVUldWVVpZWFdWUVNGRkFGR0dIRkpESEpIR0VITEhLSUdMTVBNRy9FX1I+NEA+am9hUlJRQEdUUE9QT1FOUU9QT0xKTExPUE5NUFFRTlFPSkxNTUtHRUVDQjs9PTw5PUc2Njc2RW5xdXd6e3t8fX18enx8fX5+fXt5dnh3eXl8fXp6dn17fHp6b3Fud3JwdnFtcHNwb3Bzc3N0ZmdgaFpXa3JzcmxtbWtuYmVQU1RSU1VPV1ZVWVlWUVFRT0A+Oz0/QEJBQz9CRURBQEdIR0hGRkhKTUxER0NPUkM4RU1TXWdTUVNBR1VPT1FQUE1NTkxKTEtMTk9PUUxPTk1JTEtJS0tMS0dGRkVEPEFBPjtARTs8ODlUcnN1eXt7e3x8fHt5fHp6fn58e3V0dXJ2dnp6eHpyfHt8eXltcW94cnF1bm5xcm9vb3Rzc3J1dGtnZ15lam1wa29xbWltY0xPTk1RU0xUVVRXV1VMTEtIPTk4Nzs/QT88PUFAQj09RUhGREZGSUdKSkBGQUFARkdESU9IUVJhXFFQUk9TT09PTE1PTUtNTE1PTltWS01RT0dJSENJS0xMS0ZGRkU/QkQ+PUJHP0I/QGRydXd7ent7fHt6end8d3l+fnt7cXN0cHJzd3R4eHN6e3l2d2xxb3ZxdHRsb3Fybm5vc3ZydHNycmtsZW5zaG1ubWxtbGprSUxISE9RSlFTUVRTT0tIQ0U9OTg3OT9CPzs+QUBAPkFFSkVDSEdJR0lFQkI/PjxCQUBHSkVNT2JlUE1PTVZLTE5LTE1NTExLTk5TZE1KTFJJSUlGQkpLTE1OSkdJRkJCQkA/RUZFSERMb3B2enl5ent6fHp3c3h0eHx8eXpucXFtbm9ycnZyc3h8eHZ2bXBtc3B1dGxwcHJvb29ydnVyVlZucWdseYRqbXFybm5qaG9ISkNHTExJTVBNUE9IS0U/Qj05OTo6P0I/PEFCQUFERUdLRkRJSUdHSENDP0I+P0BBPUNFRExNUVRMSklNVEZJSUpMSUpLSUlMTU9QUlBLR0NLSENDS0pMTk9OSUpJR0RDQ0RJSk1MSVpzbnh5eHp6e3l8dnJwdXJ0eXl2eGpxb2tsbG50dG1zdntzdHhyb25xb3ZzbnBvcnBvcHN0eWpOYGdzanR8eWdvc3FqcWhlcUhLQ0ZHSEdKS0lKTERHQjw+PTo6OjtBQj89QkJDQ0hFSkxKRUlJRkdIQ0M7QUBCPkA/QkRESU1PR0hKR0hLREhJS01ISkxISUpMSk1dUkhJRE5HQkVMS05OUE5LTUpLRkdHSk1OUk5NY25qd3Z3e3l7en1xbWxza3B0dHR1aHBtamlra3RwbnR0eXByenRvcnFvd3NvcXB0cnBydXR5a05WbXVscXt2aW5vaWt0aGVwRkpDRkVGREVFRkVHQ0NAPTw9Ojs6O0FEQD9CQ0VFSUZKSkxGSUlHRkZEQjpBQ0M+P0NDQ0VHS01ISk5IREhFSUxOTUhJTEdGRklJTE5LSUhFT0lDR05NT01QTk5PTUtJSElPU1FSTlNnZ2Zyb3N4dnt6fGxoam9la3Btc3FnbmxoaWtsdG1vdXR3cW94dG90c3J2c3BxcnRzcnR1dXZ2WFZ1dWtvdHJrb3ZsaG1mX3BHSkNFRURCQkFFQERCPj8+Ozs7Pjs9P0NCP0FDRkdKR0pJTEhHR0dGRUM/PURFQj5BQ0JDRUdISUdNUElFRkdLTk9LRkhJRkVDRElJSEtJR0hQS0RKTkxQTk9OT1BPSkpJTVJVVVJPWGVhYW1mcHJvcnl6Z2VoaGNpbGZxbGZsbWdpa2xzbXB3dXRwbnZyb3Nyc3V0cXNzdXRzdXZ2dnl2dXR2bGt1dW1ydnFsbmxlck1HRUVGQkFAQUQ8QkE+QT06Oj0/Oz4/QUI/QEJFR0pGSkdJR0ZGRkRDQkFBRUZDQkJCREVFR0dIRkxQTEhOSkpMS0lGSEVGRUNDSEhIS0pHS1JOQ09PTlFQT09OT1BLS0tQVVdWVVRZYF9daWFuaW5ocnNiZWZmZGhoZm5pZm1taGtrbXJpcXZ1c3Ftdm5vcXJzd3Nyc3R1dnZ2dnd2d3Z2dHd1a3N1bnV0c3Fza2tzTUdHRUdBQkBERTxBQUBDPDg6PT46QD1AQ0BAQURGSUVIRkZIRkVFRENFQkRJRkNHRUFFR0VGRkdFSU1LSFFNSktISElFRkhIRUNJSUlLTUtQU05EUlNSUVNOUE1PUE1MTlNXVlhZV1leW11kYGljamlna19kZWZjaGdna2dna21rbWxwcWd0dHVyc252b3FwcnR4cXNzdXZ1gpF5dnZ0eHV1d3hub3VvcnN1cXFpcHpNR0dHSEJCQkVFPEBDQkQ8Nzo+Pjs+O0BCPj8/Q0VHREZEREdFQ0VDREZGRkpFRUlHQkdIRkdGRUNGSkpHTUpMS0hKS0ZJSEpIRUtLTExOT1JUT0hUVVRRVFBSTU5ST01RV1pWWllXW15aWGFgYGBeaGVjYGRlZ2dqaGhqZ2hubGxvbXFwaXV1eHJycHVwcHBydXZwdXN1dnV7fn14dnR3dnZ2d3BsdXBtc3Vub3NzeU1ISEdJREJDSEU9QEVCRD04Oj4+PTw8QkI9QD5BQkZDRUNDR0NDRERGR0dHSUZIS0hDSUhHSUdGREhLSUdKSE1LSktMSEtKTUtJTkxPTk9SVVZPTFZWVFFUUlJMT1FQT1RaWllcWlpdYF9dX2NfXGJkbGNgZGdocoVoZ2pmam5ucG9uc3FqdHV4cnNzdHJucHF2cnF1cnV1c355jn11dXZ2dnZ4cml1cWtydGxxd3F1TElKSEpGQkRHRT1BR0REQDo8PkA/Pj9DQjxAPkFBRkNFRERHREVERkZISEZIR0lLSkVKSEhLSEVGTEhISEpHTEtMTExJTUpNTk1PTFBQUlVWV09LVlZVU1NSUUxPUlJRVltbXV5bXV5gX2FgYmZdZGBmaGBlaWpkc3NmamhnbHBycW9zc25zd3dwdXZ0c21vcnVvcnNwdXJ2cnSBdnV1dXd2dXdzZ3Rya3Fya3J3cHdKSktJS0dCRURFPEFGRERCOz8/QUBAQURBQEI+QUNIQkVERkdFSERGRUlIRklISk1ISEpKSUxKRUpLSElKSkdLSkxMSUlNS01OTk9MT1FSVVdWTU5UVlVTUlFQTU5UU1JXW15eX11eYGBhYWJgZGRlYmRpYmRpamd2i2xraWdtb3NxcHFwcHJ5d3J1dXRzbW1zc21xcm90dXVzcHN3dHV1d3Z1dXVmcXNrcHFqcnZwd0pMTEtMR0NDQUU8QEVFREM9QUFDQkJDRUFDREFBRUdDR0dIRkVJRUNHSUdHSkZJTEhJSk1LTUxGS0lIS0tOUUtSUExSTEpNTU5QUFBVT1dYWFtOU1FXXFpTVlBOVFVUVFhaX2JiX2RhXmFjX2FmY2FiaG5oYmloaG14dm1oaW5vc3JwcXJycnZ0c3Vzc3Nua3NxbXByb3R2c3FxdXZ1c3d5d3V0dWNtdGtvcGpxdHF3TE1LTExHREFARD4+REVGQz9DQUVEREZDQkVHQ0JIRkJISUlHSEpGREtKR0hKSElLR0pKTktOTElMSEtMSlpmSmRbSmxSR05NX25VbHNbcXBid2NSUGJ2dWh1Y2F2YVhucWJkdmltemZcbHRgbGtWYHd2aWpnaGZnbG1qbW9qbW9zcnBycnFyc3Jzc3J0cm5sdG9ucHFxdXVycXN0dnZ1dXl3dXR0YGt0a3Bwa3FzcnlMTkpKSkZCP0BDPzxEREZEQ0NDRUVERkJFRkdEREpFRUlLS0lLTEdHTkpISktHS0pJSkpOTE1NTExJTU1MW3NiZG9dbGxVTE5lcl1nZXFsbnRncGlfYVlubWJwcGJrampnb3F0ZXRub1xwdmdwT0xyeXZrYWFrZWVseG1rdmxub3NycHJxcHFycXJycnRybW1zbm5vcHJ1dHFzc3R1dXV0d3l2dHRibXVrcHBscnJye0tMSUhHRUQ/QUE/PUJFRkJFQ0VERUVEQkhIR0RES0hHS01NSkxMRkpOSEpLSklLSkpJSk1NTk1NTUtOTU1bcnBvbnBwa2pMT1BtWE5pYnRycGFtb3ZcWWxQW21tWnFta3BseHh0c2lwXWBzbHFrVXV5eG9jXmtmYmdwcGppb3Bwc3NwcXBxcXJycXFycnRsbXJtbW5vcnV0cXRydHV1dHV1enZ1dGVudWtwb2xzcnJ5SktHR0VFREJBQj0/P0VHQkdESEVFREJGSUhIRUdLSkdNTE5KTE1HTE5JTUtISU1JSklKSk5PTk5NTE5NTFxoZHVdbHFWa01PUW5VWmtea2x2YWxkdFRlY05sWWxcdG9samx4and1aG9dYHNraFdiY3d8b2NgZ2hhY2l0eWtubnFzc3BxcHFwcnFwcHBydWttcW1tbW9xc3Ryc3J0dnZzd3Z6dnV0aG91bHNvbXNydHZJTUZJRUVEQ0FCPEJAQkZDR0ZLR0VDQ0hKSEhGSUxLRk1LS1JSTEhNTUlOSklHTUdKSkhJTk9NTkxKTU1KWnRwcG9xcWxqT1FSbllza2dvb3Fxb210Xm5YYXRfbm9wb3Fzb291c3R0altedGN3eHJqbnpoYWFjZmFiam10dXBzdHZzcXBwcW9ydHt/fn13bGtxbmxtbnByc3F0dHN1dXR4eHl5dHVrb3VtdXBuc3N2dElLSEpDRERFQEA9Q0NBRkNISU1IRkNGSkxJR0ZKTUxGT0pKV1JLR0tKSk5JSElLSUtKSUlLTE1NTElLS0pTa2JZaV5eaWJyclpfWWpvX2VlVWtfY1thYVFgbWhcalxuaWpkW29lZHBcWlxrW21xY3BzbGRnY2RnYGBrbXBwb3R5cnVxb3BxbnmFiIeHhoWAdnNua21tb25xcnR0cnR1dXZ5eHhzdW5xdW53cXJ1dHdySEhGSkRFQ0ZBQEFFRENGQkhKTEdGQ0ZLTElFRkpPTElPSkxbUUpGSEhLTUlISklLS0lISUdLS0tLR0hKSUtLTEpJSkxNU1tdVFBVTVFPTk9PVlFPUFFOT1FKSk5QUWRxaVRZVltbXFVZW11YXVxcY2ZhYWZiY2ZfXmZrbWhtdHhydHJvcHB0hoeGhoaFhYaHg3pwbW1sa3FzdHRydHZ0dXl5eHV2cXJ1b3ZydHN1dXNIQ0VHRkZARUM/Q0dERkdDSUtMR0ZER0pMSERHSVBLTE9LTFdNSUZFR0lKSElKSExKSUdISEpISEhFRUtISEpOS0hPXFZdT11cYF5PWFlTXFxiXk1ZWk1YYVJLWWFaU2BkXGFYW2RkVlZYXFlaWFxWWVxeY19kYGFfZWhrZ210dHFxdHBxcoGGhoaFhoWFhYaGhoR9cmtpb3Jzc3N0d3l5eHl4d3h0cXhyeHNxcnVydFBCQ0RMTUFDQ0JESUVHR0ZLSktHRUVKSkpGRUhIUEpMTUpNUklIRUFIRkpJS0tJTEpJR0ZKSEVGR0VFSkZCSUxJSlRfWV9YYGFbYFVYWlRdXlpfUllcUF5cWU5fXF5TW15kXlpdYGNfWV9iW2BeW1VZWVpfXmNjYmFjZWlla3Jwb3Bwbm93hoaFhYaCe4CFhYaGhYaFf3VxcHJyc3V5enp5eXh4eHdyeXZ4cnF4dnR2YVNKSk1JRENBQ0ZHRUdHSUpKSUlERktLS0VGSUlOSk5MSExOR0hGPkhHTElLS0pLS0lHRUlGRERFQkZKRD9JS0hOWmJZXl5hX1JUU1dfX1xdWV5RWVxNVl9XS1FZW1FbX2JhXV5jYWBiYWJjY2VaUlpXV11aXWRgX19jZWJob21tbGxsbHWFf4SDeXV8hIWFhYaGhYWGhoN9d3JydHd5eXl5f359eXV5dnZybnp3dnhZUUpGQ0dFQkRISEZHSElGR0pHSEZIS0lLRERKSk1NTExISkpISUdAR0ZOSktLTUtLS0lHSUVFQERBSElBPkhJRk9dYFpbZF1fVFFSWF1cXFxfW0tXXExSXFlJTV5RUV1fYmNjY2NiXGRiYWRjZlhSV1VUXFhbYV9eX2FhX2Rsa21qa2xudn51gXp8hIWFhYWFhYaGhoaFhYaGgnpyc3V1e4WHh4eGhYSBfnhwend2eFxSTUJASUZDRUtJRkdHSUdHSkZGRklMSk5FQ0pKTE5KTElLS0lJR0NISFFNS0tPTUtLSUhIRkVARUJISEFARkVDU11ZXlhfWF9bXVVYWFBdXFFLSlZeWF5bXVZaYVJSX19iYmBgYmJfY2JhZGRhWFBSUlNcU1xdXV5eX19fZGlnbGtubnB7e3x+e4CCg4SFhYWFhYWEhIWDhIWHh4FzcneFh4eHh4eHh4eHh4WDgHx4XFNLQkFHRkRHTVJIRFJLRkhISERGS0lNUEVHSUpLTkxMSkxMSklHREhLUU9NTFBNTUtMSUpERUFFQ0hGQUFGQ0FVVUVcVF5TVmBYTlRVTVlaTEpLVGBhW19YX15iXU9ZYlxgYF5iY2FdYmFXYF9VUVBRUllTXlxbXV1eYGJmZmZsZm9vd3x7gHt9f4CEhISEhIWFhYODhYKDgoWFhnpvgYaGhoeHiIeGhoaFhYSFg35JTkZERkZHRElTY1FFV19JR0dIREZNSlBQRklJSktOTExLTUxKSkdFSk5RUU5OUE1OTE5JTEJFQUNDRkNCQENEP0xHQ0xMT09PTUZNRkZISUdGTEtNT1BJTE9QUFNQTFFUU1VZWFdZV1djVk5SVFBRUE9RVlRcWVlbXVxhYWVmZGhkbG1xc3N6eX97en+EhISEhISEhIKEgH57gYOBfXuFhIaGh4eHhYWFhISEgoGAfUtJRUVHRkdES05eTUhIWU1HSEpIR01MUVFJS0pLS05NVU5PS0tMR0dLUFNTTlBQTk9PT0lMRmFFRF5MRGZiQ0xaR15cc21PTFZuWUtDT19Ua1ZnSV1XVV5ETFFVTE1TVlFTVFhWVFhUVFxUT2VaaGhlWlVrVFhXVVtcW2BgYWJiY2FnaWdubGhyen19foGDhISEg4ODgX19enJ7gXp7f4KAg4SEhYWBhIWBg4N/fnp7TElFRkZIRUVMUFRKS0dgVEhKT0pJT01SUUtNS0xPUlVST1BKTE5HSU1RW1lPUFBOUFFQSktRf1FJfFlZcnNXUG1HcW5vYVZRcXF0T0Jqc25xc3BTb19bblhdVlxYVWtoVV1WY1lgWVpeVVVXf2l0dXVgYXZfWWJcXGZbX2FhYWJfYWNnbW9tYHB3dHiBgYKDg4J/fX6Adnh6bXZ+dHh9gHx+gIGChHyAg3p/gX9+d3dOSUVITU1CRExMR0pMRlJWTEtPSExSWFdRTk9PTVFUTk9RUExMT0hOUFNbWlRRUk9QUFFMSVp4XVR4ZGhYUlNQdmZ0bHBibmZrUnJOTHdtanJwc3JxcnBvb4BdZXp1eHFxenF+cn1rdX1hUmh8ZXNzcHNzfH1wfnhvf3JgYGBiYltiYWhsbmtibGZnbXd+gYCDfnt4d4B0dnppcX5udHx+d3h7foCDeHyBdXx/fHxzc05LRmBdR0FETU1IS0tIS1BPTU5KTlZeWVVMUVNOWVlMU1NTTkxQSVJSVFlXV1FUUFBQUkxIZ3hsY3hxbVpKS1R5cHVtdWJudlBkZEhldnFtd2+AamZ4eGlXclFoem1panp6fWx4en9waG5YdXVqdnVxgWFzaH1pbHh8b19fX2NiXF9kZWdqamVnYmNkbGxwcHN0c3NzeXFyeGJtdGdyeXtzc3V5foFzdnpufH15eHJuTUpSdE5DQkVQUUhLTEpMUU9PT01QWWBaWEtUV1BhXlJWUVlTTVBKU1RWWFdXUFVQT05SSkxyb3V1cXVxY2hgVm5LcXBeR2h5V3ZUS2h4fXdgeXtzbWBdbW9kU2dydW5teXB3a3VzdHFsbVxzfnprbXl8bHVufGtxd3V4Xl9fYl9eYGVkaWdoZmVeYmJpaWlqa25va3FubWpwYWNmZG93eG9tcHN5f25xcGp7enRyb21LS1pWSEdFR1JRSk1OTExRUVBQUFFXXFlVTlZZVWZYUlJZXlRNTkpUVFdXWVdPU09PTlFJUm1IaXdLYGR2dlRWbE5ubHtyYWpnf3VUS1ZrZ3xsbWx3XlpwentfYHpzY3JveHFnY3xpcntdVEtsX3Z1bGp2fHtuf3lsfHBdXl5iW19jZWVnZmVlY1tjY2lra3JzcndnbWloZGdgYWxhZ3Nya2dsbXJ8a21oa3t0bW1rbU9HSktISkhIUlFNT1BMTFNTUk9TUlhSV1RQV1pWVlRUVGFgUU9OS1RTU1FWVk9PTU5PUUtIUU5QVUxLS1JTUlFST1ZVUVFPUlJYWFBNT1VUV1hYWlpUUVJXW1dXV1tPUlRXV1hRXVhWXFVUT1hSV1hYWVpgXGhzX1xbWVxdX2NaX2RkZWdkZGNiWmRiZ2ZmbW5tdWZmZ2NgZl5dZ2BkbGdlZ2tocHpoZ2drdWpoaGlsUElLS0xNS0pUUk5SUVBMVlVUUFRVWFVaVlJbXVZVVFdVWVhPT0xOV1RQTlVTTlBOTFFQS0lRUUtRTUpKT1FUUVBRU1JKSE1PUFFRUFBQU1VSWFdcV1JSUFFVVVZTWlFOUlJXVFNYVVNYVFNRVVRVVllZWF5aX2FdXFtaXFxgY1xeYmNkZ2VlZWNaYGFkYWJoaGpuY2FkXl9jXVpjXGJtYV5mZmdtc2RpaGtrZWRjZmhRSktLTk9MTVRRT1RRUk1YV1VUVlhXV1pWU1xgVldWWVVYVFFQS09YU1BOVVBNUU9MU1BNT1VTTlFOTU5RU1BUUFFUVE5LTU9SVFRRUVFVVlNYWltZUlVSVFhXVllcU09TVFdUU1lUVlhUUlFXVlZYXFpcYF1WWV9dXl1cXWFhXltiY2NoZ2ZkY1hgYGJeYGhlZ2VhXl9dXV5aWl9aX2dgXl5dY2hrYWhmaGZkYGJkYlBLTUxQUUxQVVBQVFFPUVpZWFdZW1pYWVZdamRWWFlaV1ZTVE9LT1ZUUE9UUFBRT01SUU9SWFRRUU9NT1JUTVdRU1RVT01OUVRWVVJSUlRXVVpdXFpWVlFSV1hVW1tWUFNVVVRVWFNXWFRSUVhWVltfW19gX1ZfXV5gXVxgX19fWmNjZWhoZWViWWJgYl5fZmRjYGJdXFxcXFlaW1hbYlxeXV1fYl9fYmRkYmRfX2BcUE1OTlJRTVJTUFNUUU9WXFpaV1tbXFlaW2RxbWhkX1tZVlZYUk1NV1NNTVJPUlJPTFBTUlVbVVRQUExPV1VQVlJTUlhNT1BSVVhVVFRSVFhYW15dXFtWUk9VV1VbWlZRU1ZUVVdVU1haU1JRWldXXV9bYGBgVmJcYGFdYGJfXGBdY2FjaGllZ2FaY2BhX19lZV9gY1taXFtcWlpZWVdcWlxaYF5gW15eYWBfY1xZYFpRTk9OVlFQVVNQVVVTUFdcXFxZXlxfV1xeanB3eYBjXFtWVllSTlBXU05RUVBSVFJMUlRUWVtXVU9STlJXVVJSVFFSWU9RU1RWW1ZWVlNWWlhdXlxcXlZTTlRWVltbVVFUVVVXWFJTWVtTUlJcWFpeX11iYWBXYltjYl5hY15cYmFiX2RnaWVnXlxkYGFgYWNkX2JfWlpeW1xbWFhZV1daWlphXV1bXVxcWl1gV1tbWlBPT09ZUFVVU1JYUlRQW11eXVxgXGBVXFxoanJ9c2xoXFVZV1FPU1tTUlFTUlVVVUtSV1ZaWlpTT1NRVVVUUk5WUVJaUlRVVFhdV1hYU1dcWF5dWVpdVVVOVlZXXlpXUVRVV1hYU1ZZW1RSVl1ZXV5hXmNjX1lgW2ViX2RkXl5jY2FeZWZpZWdfXmRhYWFiY2RfYl5YW19bXFtYWFhYV1taW2BdW1tcW1haW15WXlldUE9PUltQWlVWV1ZUVFReXmBfXmJcYFVdXmJreXVtfmxbVVpWUVFUXFRUVFVUVllXTFJaVlxbXFJQVVNXVVVST1dRU1dTV1VWW15YW1lVWl5YX15ZXFlSV1JZWVlfWVlSVFVZWVlVV1lbVVRaXV1eYWJgZWRdXl1dZWFiZmReXmRjYFxnZWhmZWJgZWFfYWFiYl9gXldZXlpcXFpZWVdWXVpdXltaW1xbV1lcXVZYV11TT1BXWVFdVVdZV1dVWF9gYWFgY11gVV1eYmVldoJ7aVlZWlRWVFZcWFdXVldXXVhPVVxZXl1dVFNYUlZVU1FTV1FTVlRYWFheXlhdW1ZdX1hfX1hcVlFYVFpaWmFYW1RWV1pZWldYWVlXVl1fYF9kY2JmZV5iXGBmYmRmZF9gZGJhW2ZjaGZkZmFmX19hYmFhYF9eVlVdWVtcW1lcWVldW1tbWFhZW1paWl1fXVRZXVVOVFpWVFxVV1dZV1ZcYGFiY2FjX19WW2BkYV96dXBpWlxaVlhWWFtaWVtZWFlgVk9VXVtgYVxUVVlQVFZUUlVVUVNVV1tbXF9fWl9cVl9fWV1eWV1WUlhXWllcYVldVVZaW1pbWlpYWlhZX19gYGRjZGVlY2RaYmZjZ2ZlXmFiYGNdYmNpZWRnYGheYmJjYWFgXl9ZVFtaWltbWFxYWFxbWltXV1pYWFxbXGBdVl1dU09WWlZWWlZZVlhXWF5gYmFkYWRhXllZYWRiYGtmaF9dXVtXWFlaXFxcX1taW2JWU1deXWFjXFNWWVBWVVVVVVVTVVRYXV1fYGBdYV1XYV5bXlxbXlhVWFdbWl9fWl5XWFxcXF1dW1pcV1pfYV5gZGRlZmZnY1ljZmVoZ2ReY2BfZWNdZmlkZWlgZ15jYmNhYWBfX1xYWVpZWllYWlhXW1taW1dYWlRaXVxbYFxVXmJNUldaV1daWVtcWFdZXmBiYWVhZGFdXllhY2JfYWBhX1xdXVhYXFtdXV9fXFpdY1hZWF1gY2RfUlhZUFdVV1dXVlZXVl1dXmFiYV9iXllhXV1eWV1dWVhVVltbYF5cX1lZXl1eXmBcWlpZW19iX2NmZGZnZmhjWmVmZ2lnY19jXmFmZVppaWNmaWNmX2JiY2FgYF9dXVpXW1lZWFhaWVdaW1pZV1lWVVtdXV1gYGJieEtXV1xZV11cXF1aV1xdX2BiZGJjYV1gWGJjYmBjYWNeXF1cWFhcXF9dYF9dW2BkXFxYWmJlY2FSXFlPWFZYWVhZV1laYF5hYmNgYWNfXGJdX11bXl1ZWVRYXVxfX15fW1peXmBiYltbV1tdYGJiZGZkZ2ZmaGVdZWdoaWZjYWJbY2dgXGlpY2hpZmVgYmJjYV9gX11dXFlcWVhXWFlZV1xbWldWWFBYWl1hY2Zmcmt/SllXXVtaX11cXlxZXVteX2JjYmFhXWJbYmRiYGNiYl1dW1pXWGpxYFxgX11cYWNfXllZY2VkYVRfWlFZV1tcW1tZW1tjYGNjY2BiZGFgY15gXF5eXllYVVteXFxhYV9dW2BhYmZiXltTXF9gY2RkZmVnZmZnZl9mZ2hoZ2RkYFtlZ15haGhjaWhmY2BiYWNiX19fXV1bWltZWFhYVlpWXFtaVlZWTVhYXGdpa2h1eIF2dnZ2dnZ2dnZ2dnd3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d4eHh4eXl5enp6enp6e3p6ent7e3t7e3t7e3t7e3t7e3x7e3t7e3t7e3t7fHx8fHx8fHx8fHx8fHt7e3t8fHx8fHx8fHx8e3t7fHx8fHx7e3t7e3t7fYmIhoqHhYKBgoOCg4OCgoKCgoKCgoKCgoGAgYCBgICAgYCBgYGAfnx8fHx8fHx8fHx8fHx8fHZ2dnZ2dnZ2dnZ3dnd3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3h4eHh5eXl6enp6enp6ent7e3t7e3t7e3t7e3t7e3t7e3t7e3t6e3t7e3t7fHx8fHx8fHx8fHx7e3t7e3t7e3t7e3x7e3t7e3t7fHx8fHt7e3t7e3t8iYmHiYaFgoGCgoGCgoKCgYKCgoKCgoKBgYGAgICAgICAgIGBgYB9fHx8e3x8fHx8fHx8fHx8dnZ2dnZ2dnZ2dnZ3dnd3d3d3d3d3d3d3d3d3d3d3d3d3d3d4eHh4eHh5eXl5eXl5eXl5eXp7e3p6e3p6enp6enp6e3x8fHx7fHt6enp6ent7fHx8fHx8fHx8fHx7e3t7e3t7fHx8e3t7e3t7e3t7fHx8fHx7fHt7e3uHiYiJhYSDgYKCgoODgoKCgoKCgoKCgYGBgICAgICAgICAgYKBgH58fHx8fHx8fHx8fHx8fHx2dnZ2dnZ2d3d2d3d3d3d3d3d3d3d3d3h4eHh4eHh4eHh4eHh4eHh4eHl5eXl5eXl5eXl5enp6e3t6enp6enp6enp7fX19fXx9fHp6enp6e3t8fHx8fHx8fHx8fHx8fHx8e3x8fHx8e3t7e3t7e3x8fHx8fHt7e3t7e4aJiYiFhYOBgoKCg4OCgoKCgoKCgoKBgYGAgICAgICAgIGBgYCAfnx8fHx8fHx8fHx9fX18fHVwb29vb3Bwen59fX19fYSMi4uLi454KSkqKiopKz0/Pj4+Pj5tgH5+f397pdfT09PT08/ExcXFxcXH0tTU1NPT2FolKysrKiKL29LS0tLWun1+f39/f359fHx8fHx8fHx8fHx8fHx8fHx7fHx8fHx8fHx8fHt7e3t7hIuHh4aHgoGDg4GCgoKCgoKCgoKCgoGBgYCAgICAgICAgYCBgIB+fHx8fHx8fHx9fXx8fH19dXBub29vb296gH9/f39+hpCPj4+Pk3kZGhoaGhocMTMzMzMzMmqCf4CAgHut6eTk5OTl4NTU1NTU1Nbj5eXl5eXrVBMbGxsbEI/v5eXl5enHfX5/f39/f319fXx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx7e3uCjYeIh4eDgoSCgYKCgoKCgoOCgoKCgYGBgICAgICAgICAgICAgH58fHx8fHx8fXx8fH19fX12dXV1dXV1dXZ3d3d3d3d4eXl6enl6d29wcHBwcHBycnJycnJyd3p5eXp6en6Dg4ODg4ODgoKDg4OCg4SEhISEg4R3c3Nzc3NyfIWEhISEhYJ8fX19fX19fX19fX18fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx7e4CMhomHh4SDhIKCgoKCgYKCg4KCgoGBgYGBgYCAf4CAgICAgICAfnx8fHx8fHx8fX19fX19fXZ2dnZ2dnl3dnZ6e3h7eHd2eXx6enl5fXl5eXh4eHh5eXl5enp5eXl5enp6eXh4eXl5eXl5eXl5eXl5eXl5eXl5eXx9fX19fX17enp6enp6e3x8fHx9fX19fX19fX18fH19fX18fHx8fHx8fHx8fHx8fHx8fHx8fHx8f4uHi4qIhIODgoKCg4KBgoKDgoKCgYGBgYGAgIGAf4CAgH+AgYF+fX18fHx8fHx9fX19fX19d3d3dnZ3fXh3d316eH14d3Z6fXp6e3l8e3h3d3d3eHh4eHh5eXl5eXp6ent7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7fHx8fHx8fHx8fHx8fHx9fX19fX19fX19fX19fX19fX19fHx8fHx8fHx7e3x8fHx8fHx8fHx+iomMjImFg4SEgoKDgoGCgoKCgoKBgYGBgYCAgICAgICAf4CAgH19fXx8fH19fX19fX19fX13d3d3d3p9eHt4fHx3e3h3dnp+enl9eHx6eHh4eHh4eHh4eHh5eXl6enp6e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3x8fHx8fHx8fHx8fHx8fHx8fX19fXx9fX19fX19fX19fX19fHx8fHx8fHt7fHx8fHx8fHx8fH2Kio2NioWDg4OCgoKCgYGCgoKBgoGBgYKBgIGBgICAgIB/gIGAfXx9fX18fX19fX19fX19fXd3d3d3fX55d3d4e3p7eHd3eHl9eXx6e3p3eHh4eHh4eHh4eXl5enp6ent7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3x8fHt8fHx8fHx8fHx8fHx8fH19fX18fH18fH18fHx8fX19fX18fHx8fHx8fHx8fHx8fHx8fHx8foqJjo2JhISEg4KDgoKBgYKBgoKCgYGBgoGAgYKAgICAgH+BgIB8fH19fX18fX19fX19fn5+d3d3d3d5fHl7eHx9eXt4enp6fHx8fXt9e3h4eHh4eHh4eXl5eXp6enp7e3t7e3t7e3t7e3t7e3t7e3t7e3x8fHt7fHx7fHx8fHx8fHx8fXx8fX19fX19fXx8fHx8fHx8fXx9fX19fXx8fHx8fHx8fHx8fHx8fHx8fHx/iIeNioeFhoaDg4ODgoGBgoGCgoGBgYGCgYCAgoF/gICAf4CAgHx8fX19fX19fX19fX5+fn53d3d3d3Z4eHl3eXp4enh5eXl7eXp6eXt4eHh5eXh4eHh5eXl5enp7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t8fHx8fHx8fHx9fX19fX19fX19fX19fX18fH18fH19fX19fH19fX19fHx8fHx8fHx8fHx8fX+HiIyIhoeHhIKDhISCgYKBgYKCgoGBgYKBgIGBgYGAgIB/gIGAfHx9fX19fX19fX1+fn5+fnd3d3d3d3d3d3d3eHh4eHh4eHh4eHl5eHl5eXl5eXl5eXl6enp6ent7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7fHx8fHx8fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fHx8fHx8fX19fHx8gIeIi4eHiYaDg4SDg4KBgYGCgoGBgYKCgYGBgIGBgYCAgICBgX97fH19fX19fX19fn5+fn5+d3d3d3d3d3d4eHd4dnl5eHh4eHh5eXl5eXl5eXl5eXl5enp6enp6e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7fHx7fHx8fHx8fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fHx8fH19fXx9fXyBhoqKiYmIhIOFhISCgoGBgYGCgYGCgoGBgYCAgYGAgIGAgIGBf3x8fX19fX1+fn5+fn5+f394eHd4eHh4eHZxZGpeam15eXl4eXl5eXl5eXl5enp6enp6enp6enp7e3t8e3x8fHt7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3x8fHx9fHx8fH19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fIGFiYqJioeEhYWEg4KCgYGBgoKBgYKBgYGBgYCBgYCAgYCBgIF+fH1+fn5+fn5+fn5+fn9/f3h4eHh4eHh5bWRiZV9fXm94eXl5eXl5eXl5eXp6enp6enp6enp6e3t7e3t7fHx8fHx8fHt7e3t7e3t7e3t7e3t7e3t7e3t7e3t7fHx8fHx9fHx8fH19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18goWKiomJhISGhYSDg4KBgYKCgoGBgoGBgYKBgIGBgICAgICBgH58fX5+fn5+fn5+fn9/f39/eHh4eHh4eW5kZWdlZGJeZnh5eXl5enp6enp6enp6enp6enp6e3t7e3t7e3x8fHx8fHt8fHt7e3t7e3t7e3t7e3t7e3t7e3t7fHx8fHx8fHx8fHx9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXyChouJiIqEhYaEg4OEgoGBgYGCgYKCgYGBgYCAgYGBgIB/gIGBf3x8fn5+fn5+fn9/f39/f394eHh4eHl3Z2VkZWZkZWFfaXl6enp6enp6enp6enp6ent7e3t7e3t7e3t7e3t8fHx7e3t7e3t7e3t7e3t7e3t7e3t7e3t7fHt8fHx8fHx8fHx9fX19fX19fX19fX19fXx9fX19fX19fX19fX19fX19fX19fX19fX19fIKGi4eJh4SEhoSDg4WBgYGBgYKCgYGBgYKBgICAgYGAgYCAgYF+fHx/f35/f39/f39/f39/gHl5eXl5eWtlYWJlZWFlZV5ieHdze3p6enp6enp6enp6e3t7e3t7e3t7e3t7fHt7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t8fHx8fHx8fH18fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19g4aLhoiFhYaEgoOEhIKBgYGBgoKBgYKBgYGAgYGBgYGAgIGBgn98fH9/f39/f39/f3+AgICAeXl5eXl0Y2NlZGNmY2doZGZsZF5ze3p6enp6enp6enp6ent7e3t7e3t8fHx7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3x8fHx8fHx8fH19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX1+fn6DhouGhoaGhYODg4SDgYGBgYGCgoGBgYKBgYCAgYGBgYCAgYGBfnx8f39/f39/gICAgICAgIB5eXl6d2RhY2diYmRdW2VfYV1eYGFoeHp6enp6enp6enp6e3t7e3t7fHx8e3x7e3t7e3t7e3t7e3t7e3t7e3t7e3t8fHx8fHx8fHx8fH19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX1+fn5+fn5+foSFi4eGhoaGhIODg4KBgYGBgoKCgYKBgoGAgIGBgYGAgYGBgYF+fX1/gH+AgICAgICAgICAgHl5eW9vYmJiZF5jZ19dYWFgXF9kYlttfHp6enp6enp6enp7e3t7fHx8e3t7e3t7e3t7e3t7e3t7e3t7fHx7e3x7fHx8fHx8fHx8fH19fH19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX5+fn5+fn5+fn5/hIiLhoSHhoaEhIODgoGBgYGCgYGBgYKCgYCAgYGBgYGBgYGBgX5+fYCAgICAgICAgICAgICBeXpwXWJlZGJkXmZnZ2BZYmJhY2VfXF1ze3t6enp7e3t7e3t8fHx8fHx8fHt7e3t7e3t7e3t7e3t7fHx8fHx8e3x8fHx8fHx8fHx8fHx9fX19fX19fX19fX19fX19fX19fX19fX19fX19fn19fn5+fn5+fn5+fn5+foCFjIqEhYaGhYODg4SCgYGBgYKBgYGBgoKCgYCBgYGCgICAgIGBf35+gICAgICAgICAgIGBgYF5emxiZGdjYmdmYWBgZGFiZWRjZGNeXGJ1fHt7e3t7e3t7e3x8fHx7e3x8fHx7e3t7e3t7e3t7e3x8fHx8fHx8fHx8fHx8fHx8fHx8fH19fX19fX19fX19fX19fX19fX19fX19fX1+fn5+fn5+fn5+fn5+fn5+fn9/gYeMiYWGhoeFg4SDgoGBgYGBgYKBgoKCg4KBgIGBgYKBgYGCgoF/f36AgICAgICAgIGBgYGBgXp7dGdnZmZkZGZmYF5fYWNlaGRlXmJkYHR8e3t7e3t7fHx8fHx8fHx8fHt7fHt8fHt7e3t7fHx8fHx8fHx8fHx8fHx8fHx8fHx8fH19fH19fX19fX19fX19fX19fX19fX19fX19fX5+fn5+fn5+fn5+fn9/f39/f3+CiYqIhoaIhoWDhIOCgYGBgYGBgoGBgoKCgoGAgYGBgoKBgYKCgX9/f4GBgYGAgYGBgYGBgYGBenptaGNjZ2ZnZWdmZmdiZWRlYmdbYmVgdnx8e3t8fHx8fHx8fHx8e3t8fHx8e3x8fHt7fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx9fXx9fX19fX19fX19fX19fX19fX19fX19fn5+fn5+fn5+fn5+f39/f39/f39/f4SJioiGiYeFhYSEg4KBgYGBgYGCgYKCgYGBgYGBgYKBgoGBgICBgH9/gYGBgYGBgYGBgYGBgYF7emlpZGNqZmFgZmVjY2NnaWRjYmBiZGJ0fXx8fHx8fHt8fHx8fHx8e3x8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fH19fX19fX19fX19fn5+fn5+fn5+fn5+fn5+fn5/f39+fn9/f39/f39/f3+AhIqMiIeJhoSFhYOCgYGBgYGBgYKBgoGBgYGBgYGBgoKBgYGBgYGAgH+BgYGBgYGBgYGBgYGBgXZzZWRnY2RmZWJlZmdkZmhmZWNgYGNkYHF9fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fXx8fX18fHx9fX19fX19fX19fX19fn5+fn5+fn5+fn5+fn5/fn5+f35+f39/f39/f3+AgICFioyJiIqJhoaDgoKCgYGBgYGBgoGBgoGBgYGBgIGBgYGBgYGCgX+Af35/foCCgoKCgoKCgoKCc3NnZWRkZWlqaGZnZ2NhZmZlZmdmZWVjdX18fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fX19fX19fH19fX19fX1+fn5+fn5+fn5+fn5+fn5+fn5+f39/f39/f39/f39/gICAgICAgIWLioqJioeHhoSCgoGBgYGBgYKCgYKBgYGBgIGBgoKBgYGBgYGAf4B+dHRzdX1/goCAfn5/gYB0cmdkZWNmaWppZWNlY2BmZGRnZ2JiZWFwfXx8fHx8fHx8fHx8fHx8fHx9fX18fHx8fHx8fHx8fHx8fHx9fX19fX19fX19fX19fX19fX19fX1+fn5+fn5+fn5+fn5+fn9/f39/f39/f39/f39/f39/f4CAgICAgIB/houLioqLh4eHhIOCgYGBgYGBgYKBgoKBgYGAgYKCgYCBgYGBgoCAgH5zc3NzdHV4dXV0dHV2dXVwZmNmZWhoaWdoZ2VmZWJfZGVmY2BiZ3d8fHx8fX19fX18fHx8fH19fX19fX19fXx9fXx8fX19fX19fX19fX19fX19fX19fX19fX19fn5+fn5+fn5+fn5+fn5+fn5+f39/f39/f39/f39/gIB/f3+AgICAgICAgICHjIyIi4qHh4eDhYKBgYGBgYGBgoGCgoGBgYCBgoGBgYKCgoKCgICAfnNzc3Nzc3NzdHR0dHNzdW9jY2FnZWhoZ2pmZGVnZmhmY2JlYl5ieX18e3t8fX19fX18fHx9fX19fX19e3x9fX19fX19fX19fX19fX19fX19fX5+fn5+fn5+fn5+fn5+fn9/fn5+fn5+fn5/f39/f4CAgH9/gICBgICAgICAgYCAf4CAgYGAgIeLi4eNiYiJhYSFgYGBgYGBgYKCgYKCgYGBgIGCgoGBgYKBgoKBgIB+dHNzc3Nzc3Nzc3Nzc3N1cmdlZWRlamhoZ2ZpaGdjZWViZGNoZGd7eHVzc3R2dnl4dnR0dHZ3d3d2dHR0dXV4d3h4d3d6e3x9fXx9fn5+fn5+fn5+fn5+fn5+fn5+fn5/f39/f39/f35/f39/gH9+fHt7fX58eXl2dnZ5fHx6end2d3l7fXt4hIyMioyHh4iEhYSBgYGBgYGBgoGBgoGBgYGBgYKCgYGBgoGBgoGAgH51c3Nzc3Nzc3Nzc3Nzc3VzaGVnaGVrbGhqZ2lqZ2dnZmRkYmVkbnV0dHNzdHNzc3Nzc3Nzc3Nzc3NzdHNzc3Nzc3Nzc3N0dHV1c3V3eHl7fn59fn98f39/f39/f39/f314fH5+fXx4dXZ3eXd4dnRzc3N0dXRzc3Nzc3NzdHNzc3R0c3R0dHODjI2KiYeIhoOGg4GBgYGBgYGBgYGCgYGAgYGDgoKBgYCBgYGBgICAf3VzdHRzc3Nzc3Nyc3NzdnZpY2hqaGpsZWZpbGhgZmVkY2BkZGZ0dXV1dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHRzdHRzc3Nzc3R2dnV1d3V4fH9+fX9+fHp4dXN0dXV1dHNzc3Nzc3N0dHR0dHR0dHR1dXR0dHV1dHR1dXR1dXV1dIaMjYuIhoeEhIWCgYGBgYGBgYGCgoGAgYCBgYKCgoGBgIGBgYGAgIB/dnNzc3Nzc3Nzc3Nzc3N2dnNnZ2pmaGdmaGhmZGlnY2NnZWVmcHZ1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dHR1dHR0dHR0dHRzdHR0dnV1d3Z0c3R0dHR0dHR0dXV1dXV0dXV1dXV1dXV0dHNzc3N0dHNzdHR0dHR1dXR1iY6MjIqHh4SEhYKBgYGBgYGBgYKCgoGBgICAgoKCgoGBgYGBgYCAgH93c3Nzc3NycnJyc3NzcnZ2dW5kXWNnZWlraGVoZ2dqamlnZXB2dXV1dXV0dHRzdHR0dHR0dHV1dXV1dXV0dHV1dHR1dXV1dXV1dXV1dXR0dHV1dXV1dXV0dHV0dHV1dXV1dXV1dXV1dXV1dXV1dXV0dHNzc3Nzc3N0dHNzc3Nzc3R0dHR0dHWKjoyMiYaGhIeFgoGBgYGBgYGBgoKBgYGAgYGCgYKBgYGBgYKBgICAf3hzc3Nzc3JycnJyc3NzdnZ3d2liaGhnamtpaGZkZGVmaWhwdXR0dHRzc3JxcnJ0dXV0dHR0dHR0c3NycXFxcXNzdHR0dHR0dHR0dHV0cnJyc3R0dHR0dXV1dXV1dXR0dXR0dHR0dHR0dHR0dHR0c3Nzc3Nzc3Nzc3Nzc3N0dHN0dHR0dHR0dYuOjImGhYWFh4SCgYGBgYGBgYGBgoKCgYGAgIKCgoGBgYGBgYGBgIB/eXNzc3NycXJycnJzc3N3d3d3bGpoZGhpa3Z6a2VmZWhnbXJzdHN0c3JwcHBxcnN0dXR0c3NycnNycXBvb29vcHFzc3NycnJyc3R0dHNxcHFyc3R0dHR0dHRzc3Rzc3NzdHR0dHRzdHR0dHR0dHRzdHR0c3NycnFxcnJzc3Nyc3NzdHR0dHN2jZCMh4eFhYSEgoGCgoGBgYGBgYGCgoKBgYGAgYGCgoGBgYKBgYGAf395c3NycnFxcnJycnNzc3d3d3dzc2pnaWloeX99cW51bG5wcXJycnFxcG9wcXFxc3Rzc3NycXFwcG5ubm1ubW5ubnBxcnJycnJycnJzcXBvb3BxcnJzc3JxcnJycnJycnJycnJzc3Jzc3Nzc3Nzc3Nzc3Jxb29ubm9vcXJzc3Jyc3NycnNzcnaPj4uHhoWFhYOCgoKBgYGBgYGBgYGBgoGBgYGCgoKBgoGCgoGCgX9/f3hxcHBwcXFycnJyc3Nzd3d2dnd2cnF0c252f352c3hwcHBycnJycXFwcHFxcXFyc3Nzc3FwcXBvb25ubm5ub25vcHBxcXFxcXBwcXJwb25vcHFxcXFxcHBxcXFxcXJycnJycnJycnFxcnFxcnJycnFwb29ubm1ubW5vcXJycnJycnJyc3JxeI+OjYaDg4aEgoOCgoGCgYGBgYKBgYGCgYGBgYKCgoKCgoKBgYKBf4B/d29wb3BxcnJyc3Nzc3J2dnZ2dnZ3dnZ1c3l/fnd3d29wcXFxcXFxcHBwcXJxcnJzc3JycXBwb29wb29vb29vb29wb3Bvb29vcHBxb29vcHBwcHBvcG9wcHFycXFxcnJycnFxcXFxcXFxcHBwcHBxb29ubm5tbW5tbm9wcXFxcXFxcXFxcXB7j42NhoODhYOCgoKCgYKBgYGBgoGCgYGCgoGCg4KBg4KBgYGAgYF/f392bm9wcHBxcXFxcXBwcHZ2dnZ2dXR0c3NxfYB9fX9zb3BxcXFwcHBwcXFwcHBxcnJxcXFwb3Bvb3Bwb29wcG9vb29vb29vb3BxcXBub3Bwb29wb29wcnJycnFxcXBxcnFwcXFxcHBwcHBwcHBwb29ubm1ubm5ubm9ub3BwcHFxcXFxcXFxcIKRjoqEhIOFhIOCgoGBgoKBgYKBgYGBgYGCgoKCgoKCgYGBgYCBgX9/gHVvb29wcXFxcXBwcHBwdnZ2dXRzcnJycnGAgoCBeXBwcHBvcHBwcHFxcXFwcXFxcXFxcG9vcHBwcHBwb3BxcHBvb29wb29vcXFwcG9wcG9vb25vcHFxcHBwb3Bvb3BwcHBwcHBwcHBvb29vb29vbm5tbW1ubm5ub25vb3BvcHBwcHBwcHBwiZCMiISDhIaDg4KCgYGCgoKCgYGBgYCAgYGBgoKBgYGBgYGBgIGBgH+AdG5vb3BxcXFwcG9vcG92dnVzcnFxcXFxcICDg39ycHBwcHBwcHBwcHFxcHBxcXFxcXBwcHBwcHBwcHFwcHBwcHBwcHBvcHBxcXBwcHFxb29vbm9wcHBvb29vcHBvb3BwcHBwcHBwcHBvb29vbm5ubm5ubW5ubm1ubm9wcG9vb29vb3BzcXWPj4yJg4KFh4ODgoKBgoGCgoKBgYKBgYCBgoGBgYGBgYCAgYGAgYGAf4B0b29vbm9vb29vb29vb3Z1dHNxcXFxcXJygIKCgXRxcXFxcXFxcXFxcXFxcXFxcXBxcXFxcHFwcXBxcXFwcHBwcHFxcXBxcHBwcXBwcHBwcHBwcHBwcHBwcHFxcXBxcHBwcHFwcHFxcHFxcXFxcXJxcnFwcnRycnR0dHR1dnRzdHR0dXd3gpCPi4iDgoaHhISCg4GBgYKCgoGBgoGBgYKBgYGBgYGAgICBgYCBgYB/gHVvb29vb29vb25vb29vdXRzcnJycnJycnKDg4OCdnFycnFxcXJxcnJxcXJycnFxcXFxcnFxcXJycXFycXFxcXFxcXFxcXFwcXFxcXFxcnNzcnJyc3V1dHR0dHR0dHV2d3d3d3d3eHh4eHd3eHh4d3Z3dnV2dnZ2d3h6e3x7e3t6enp6enyGkI2LiIODiIeHhYODgoGCgYKBgYGBgYKCgoGBgYGAgYCAgYGAgIGBgH+Ad3FxcXFxcG5ucG9wcG92dHV1c3Nzc3NzdYiDgoN5cnNzcnJyc3Jyc3NycnJycnN0cnJzcnNzc3Nzc3Nyc3N0dHV1dXV1dHV3eHd3d3d4eHh3eHh4eXl5eXl4eHl5eXp6e3t7e3t6enp5eXh3d3d1dnV2dnd5enp7fn5+fX1+fn5/f35+gIyQi4qHg4WIi4iEg4SDgYGCgYGBgoGBgoKCgoKAgYGBgYCBgYGAgIGAf4B8enp5eXx5eHh2dXZ2dHl2d3h3d3Z3dnZ6f3x+fnx2dnd3dnV4enh4eHh3d3d2eHx5eXx6eXl8e3l5eXh4eXl6enl5eXh4enp5eXh4eHh3dnd3eHh3eHh5eXp7e3p8fH1+fX9/f359e3t7e3p5enl5e3t/foB/fn5/fn19fX5+f35+fn6AjpCNioeEhoqLiIaGhIOBgoKBgYGCgYGCgoKCgoCBgoKBgYGCgYCBgIF/f4B/fn19fX9/f318e3t7eXh4eHh5eXl4eXh5eXl4enp6enp6e3t7fH1+fHt7ent8e318e3t7e3t7enl4eXh4ent6enp5eXp8fHt6enx8fHp6ent9fXx+fn+AgoGAgYKAgH9/gYGBgIB/f35+fn5/fX1+f4CAf35+f39+fn9/f39/gH+Af4OQjoyHhoWIi4yIh4aFg4GCgYGBgYKBgoKCgoKBgYKDgoGBgYGBgIGBgIB/goOCgoGBgX99f39/f4F6enh4d3h4eHh5eHh5enp5e358enx9fXt8fX19fHx8fnx9fn5+fn59fX9/f3x8fYGDgYCAf318fXx9fXt9fXx8fH19fX1+gYGChISDgoB/gYGBgH9/f4B/f39/f39+fn9/f39/f35+f3+Af39/gICAf4CAgICAhJCPi4eGhoiMi4iKhoaDgoKCgYGBgoGCgYKBgYGBgoOCgYCAgYGAgIGBgH+ChIKCgICAgH9+fn+AgH9/fn18fX19fYB/fX+Af35/gH9/fn9/gIGBgICAf3+BgICAf4CBgn9/f4CAf35+f39+f39/fn5+f39/gYB/f4CBgYCAgYOEgoGCgoGCgH+AgYCBgYGAgH+BgICAf39/gICAgYGBgIGBgYCAgICBgoGBgYCAgYGFjo6MiIaHiYyLi4qGhYOCgoKBgYGCgoOCgoKBgIGBgYKCgICBgYCAgYGAf4KFg4KBgYCAf39+fn+AfX5+fn19fX5/fn9/f35+fn+AgYCAgICAfn9/fn+Af3+AgH9/f35/f35+fn59fn9+fn9/f35/gIGBgoKDg4KCg4KBgYKDg4OCgYGBgYKBgoKCgYKBgoGBgYGBgoKCgYGCgYKCgoGBgoKBgYKCgoKCgYGBgoKCgoaPkY+Kh4iKjY6NiYaFgoKCgoKBgYKCg4KCgoGBgYGBgYF/gIGBgYCBgIF/gYWEg4KCgoGCgYCAgIB8fHx7fH18fH9+fn9+fn5+f35+f39/f39/f35+foB+fn5+fn9/f39+f39+fn5/gIB/gIB/f39/f3+BgYGCgoCAgYKDg4SDg4ODgoKCgoKCgoKCgoKCgoGCgoKDg4OCg4ODgoKCgYKCgoODg4ODgoKCgoODg4KCh5KSkIuKi4uPj42Kh4SCgoKCgYGBgoKDgoKBgYGBgIGBgICAgYGBgIGAgYCAg4SDg4OEg4ODgoKCgXx9fHx9gn1+f4GCiIGCgoSCgYGDg4GBgYKCgYKBgYCAf39/gICAf3+AgX9/f39/gYCAgICAgH9/f3+AgICAgH9/gYODhYSEg4SDgoKCg4OCgoOCgoODg4ODg4SDg4KEhYWDg4SEgoKDhIOCg4ODg4OCgoODgoCKlJOPioqMjpCPjYuGg4KCgoKBgYGBgoOCgYGBgIGBgoGBgICBgYGAgYCAgH+BgoODg4SEhIOCgoKCfXx8fn6AgYOAg4OChIaFhoaFhIWFg4ODg4OBgYKEhIKCgoeDgoKAgoGBgoKCg4KCg4KDgoODgoGAgIKCgYOCgYKCg4OEhYWEg4OChISEhIOEhISDg4OEg4ODg4OEg4SDhIWEhISDg4ODgoKCgoKCgoKBgYKCgo+UlI+Njo6RkY6KiISCgoKCgYGBgYGCg4GBgIGBgYGBgYCBgIGBgYCBgICAgIKChIKDhIOCg4ODgoJ9fX2AgH+AgoGDg4ODhIaEhIOEhYWDg4GBgoOBgIKDgYKFhYWFhoaHhoaGhoeHh4aGhoeHhoaEgoGCg4SDg4ODg4ODhISFhYWDhYSFhISEg4KBg4OCg4SEg4KCg4SCg4ODg4OCgoKCgoKCg4OEhIOFhYWFhoaIk5OTkI+Pj5KRjIqHgoKCgoKBgYGBgYKDgoKBgIGBgYGBgICAgYGBgICAgICAhISEgYKCgoGBgoKBgX+AgYOBgICAf4CCgoKDg4KCgYODg4SDg4KDhYOCgYGBgoSFh4eHh4aGh4eHiIiHh4eIiIiFhIOBgIGBgoKCg4GCg4SEhYSDg4OEg4OEhIOBgYGCg4OEhISDg4ODg4OEhIODgoSDg4ODhIWFhoeHh4eIiIiJiY6TkpKOj46QkY+LiYeCgoKCgoKBgYGBgoKCgoGBgYGBgYGAgICAgYGAgIGAgICDg4KCgYKCgYGAf4CBhYWFhoOCgYB+fn+BgoSCgYKDhIOCg4ODg4KChISDhIOCg4SFhISFhYSDgoSFhYKEhIWFg4KBgH9/gIB/gIGEg4OEhYWEgoKCgoOCg4OFhIKDhISEhYaGhoaGhoWFhoeHhYaIh4aHiIeGhoaIiIeGhYaGhoeIkZKSkI6QjpCRjImHhYGBgoKCgoGBgYGBgoOBgYGBgYGBgICAgICCgICAgICAgISEg4KBgoGAgYGAgYKIh4aHhYSCgH99fX6AgH+AgYGBgYGBgoGAgYKCgoGCgoKBgYGCgYKCg4GBgICAf4GAgH+AgH9+gIGBgYKCg4OEg4OEg4OCgoGBgoODg4SEg4SEhIOFhYaFh4eIh4eHh4eHh4eGhoaGh4WFhYaGhIWEhIWEhYaSk5GOjo+OkI6JiYeEgoKCgoKCgoGBgIGCgoKCgoKCgoGBgYGAgYGBgICAgYGAgoSDg4KDgoGCgYKDg4iHh4eHhYSCgX5+gICAfn5+f4CBgYGCgYCCgoGCgH+AgIB+gIKBgIGCg4OAf39/gICAf4CAgICDg4KDg4ODgoOBgYKCgoOCgYKCgoOCgoSDhISDg4SEhYWFhYaGhoaFhISEhYWEhIWFhYSEhISDhISEhISEipSTkpCQj46NiIaFhIOBgYKCgoKCgYGAgYKCgoKBgoKBgYCBgYCBgYGAgICAgYGAg4OCgoOCgoKBgoOCiImJiYiHhYSDgYKEhIOBgYGCgoOCgoOEgoOEhYWEgoSCgX+AgoGBgoGChIOBgYGBgoOCgoGDg4SDg4SEg4OCg4KDg4ODg4KCgoKCgoGDhISEhYSFhYWFhIWEhIWFhYWDg4OEhISEhYWFhISEhISEg4ODg4OOlZKQkZGOjYyHhYODg4GCgoKCgoKBgYCBgoOCgYCCgYGBgICAgIGBgYCAgICBgICDhYSEhIODg4SDhIOGh4mIhoWDhIOEg4WDgYGDgoOFhYODg4SDhIODhYSFhISEgYGAgYKDgoKEg4OCgoGBhIWEg4ODgoKDhISDg4ODg4SFhISDg4KCgYKCgoSEhYSFhYWFhYODhYWFhYaFhoWEhIWEhYWGhYWFhIWEhISDhIODhJGUk5KSj4yMioWEhIODgYKCg4KCgoKBgYGCg4KBgYKBgYGBgICBgIGBgH+AgIGAgYaGhoaGhoaHh4aGhYSDhYaCgIGBgYGHgoB+f4GAgIKBgYCBgYCAgoGCgoKBgoKCgYCCgoKCgoKDg4GCgYKDhYODg4KDg4OEgoKEhIOEhIWEg4OCgoKCgYGCg4ODg4SFhYWFhIOEhYWGhYWEhISEhIOEhIWFhYWFhIODhIOEg4KGlJOSlJKPjYuHhISEg4KBgoODgoKDg4GBgoKBgoKCgYGCgYGBgYCAgYGAgICAgICAhYWFhYaGhoaGhoWGg4ODg4GAgoKCgYKAf35/f4CAf4B/gIGAgH+BgYGBg4CAgYGChIOBgYGBgYKBgYKDgoODgoOCgoKCg4OBg4SDg4ODg4OEhIKCgoKDgoKDg4ODhIWEhISEg4OEhIODg4OEhIODg4ODg4SDg4ODg4KDg4KDgouUk5KTkY2NioaDg4OEgoGCg4ODg4ODgoGBgoGCgoKCgoKBgYGBgICBgYCAf4CAgICDhISFhYSFhYWEhIWCg4KDgoKDg4OBgICAgICAgYCAg4KCg4GBgoKDg4OEgoODg4KAgICCgoKDgoKDg4ODgoODhIKCgoODgoKDg4KCg4KDg4WEg4ODg4SDg4SEhISEhYWEhIWEg4SEg4OEhISEhISEg4SEhYSDg4SEhIODgoKDkJSSkpKPi4yIhoSEg4OBgYKDg4ODg4OCgYGCgoKCgoKDgoCBgoGAgICAgIB/gICAgISDhYWEhYWFhYSFhYOEhIWDg4SFhIKCgoOCgoSCgYKGhYOEg4OEhISGhYSEhYJ/fX19foKEg4ODg4OEg4ODhISEg4OEhISEg4SEhIOEg4OFhoWFhYSFhYWFhYSFhoWGhoWFhYWFhYWFhYWGhoWGhoaFhoaGh4aFhYWFg4SEhIeTk5KRkoyLiIWGhYWCgoGBgoODg4OCg4KBgYKDg4OCgoKBgIGAgICAgICAgH+AgICAhYWGhYWGh4eGhYWFhISFhYSEhISEg4SDg4OEhYOCg4SFhYaFhoaFhoeHhoOBfn9+fn5+f4OEg4OEhISEhISEhISEhISFhYWEhYSGhYWGhYaGhoWGhYWHhYWGhYaGhoaFhIWFhYWFhIWGhoaHhoaGhoaHh4iIiIaFhYaEhYWGjZSTkpGQi4qHhoeGhIGCgoKDg4ODg4KDgoGBgoODg4KAgYGBgICAgICAgICAf4CAgICHh4eGhoeHiIeHhoaEg4ODhIODg4OEg4ODg4OEhIODg4WFhYWHh4WFh4WBf39/f39/f35/gISFhIWGhoaFhYWFhoaHhoaFhoWFhoeHh4iHh4eGhoaHh4eGhoaHhoaGhYSDhIWFhYSFhYaGhoeHhoaGhoeHh4eIiIeGhoaHh4eRk5KQkZCLiIiFhoSDgoKBgoODg4ODgoKDgoKCgoOCgYCBgICBgICAgIGAgIB/gICAf4aHiIeHh4eIiYmIiIODgoKDg4SEhIWEg4KCg4OEg4OCg4WEhYeIhYOCgH9/f39/gIB/f4B/f4WFhoeIiIeHh4eIh4iHiIiIhoaHiIiJiYmIh4aHh4eIiIaHhoeIhoaFhIOEhYaGhYWFhoaGh4eFhoeGh4aGh4eHh4eHh4eFh5OTkY+RkIuHhoWGhIKCgYGCg4ODg4ODgoKCgoGCg4KCgIGBgYCAgICAgICAf4CAgYB/hoiIiIiHh4iJiYmIg4KCg4ODhIWHh4eFg4OFhIODg4KEhISEhYSBgIGCgYGBgYB/gH9/fnt6gIaIiIqKiYmIiImJiYmKi4qIiIiJiYuLioqIiIeIiIiHh4iIh4iGh4aEg4OFh4eHhoWFhISEhYWEhYWGhISEhYWFhoWGhYOJlJOQjpGOioaFhoWDgYGBgYKDg4ODgoKCgoKCgoKCgYGBgYGBgYCAgICAgIB/gICBgH+GiYiIiYeIiImJiIiEgoKDg4ODhImKh4eEhYWEg4OFg4WEg4OCgYKCgoKCgH9+fH19fX9+fHt8g4eJi4uKioqIiIqJiImLiomJiImIioqJi4mHhoaGh4WGiIiJiIeGhoSDgoSIiIiIh4WCgoGDg4KDg4SCgoKDgoGEg4SDgY6TkpCPj4uIhYSGhIKBgYGBgoODg4OCgoKCgoKCgoGBgYGBgIGAgICAgICAgH+AgIGAf4WIh4eHhoeIiIiHh4SCg4OCg4OFiYqJh4WHhYSFhYSDhYSDgoKCgoKDgX59fn5+fn5+fX1+fX19g4eJioqHh4WGh4eHh4iHh4mHiIaIh4eJiISDhIOFhISFhYaIh4aFg4KCg4WHhoeGhoOCgoOEgoOEhIKBgYGBgYODhIOEkZKRjo+Ni4eEhoaDgoGAgYGDg4ODg4KCgoKCgoKCgYGBgIGBgYCAgIB/gIGAf39/gIB/hYaGhYaGhoeHiIeGgYKEhIOChYaIi4qGhYaEgoaGgoCDg4ODg4OCgoF9fH1/gH9+fn59fH19fHp8hIaHhoSDgYODhIWFhYODhYSEhISEhIWEgoKDgoSEgYKDg4WGhYSCgYGCgoODhYOEhIWEhIaDg4SFg4KDgYKDg4SFhIeSkY+Nj4yJhoSFhIWCgYCBgYODg4ODgoKCgoKCgoKBgYGBgYGAgICAf4CAgYB/gICAgICDhIWEhYWFh4eHh4aAgYGFg4OFhYSHiIWDgYCAgX9+fYKDg4ODgoKAfX1/gICBf31+fn19fX16enp+g4SEgoGBgIGBgoKBf36BgYGCgYOBgoGCgoKBg4OAf4CAgYOCgICAgIGBgYGCgYGChIODhYSCg4SDgoKBgoSDhYWGjJORjo+Pi4iFhYOChIGBgYGBgoODg4KCgoKCgoKCgoGBgYCBgYCBgH9/gIGBgICAgH+AgIKCg4OChIOEhYWGhn+BfoCBgICAf4GDgn9+fn5+fHx/g4OCg4KDgX19fn+AgIGAfn19fX1+fXx6enp/goKAf39/f35/f4B+fYB/f4CAgX+AgIF/f3+BgX59fX+AgX9/fn+AgH+AgICBf4CCgICCgYGCgYGAgYGBgYKEg4aPkpCOj42Kh4eGg4OCgYGBgYGCg4ODgoKCgoKCgoOCgYGCgYGBgICAgH+AgICAgICAf39/gYKDhIGCgoOCg4SFgIF/fH19fn19foCAfn1+fnt9foKDg4KCgYF/fX1+f4CAgH9+fX19fHt7e3p6eXqAgH9+f35+fnx+f35/gH9+f3+Af4GAf35+fn9/fn18fn+Af35+f3+Af39/f4B/f4B+f4CBf4B+f39/gH9/f4B/hZKSj46Pi4uHiYWEg4KBgYGBgYKDg4ODg4OCgoKDg4KAgYKBgYGAgICAf3+AgIB/gIF/f36BgYSEgYKBg4OCg4OBgH98fn5/fn6Af4B/foB9fX+BhIOCgYB/f359fn5/gICAfn19fXx7e3x6enl5eXt/f35/f39+fX5/f4CAf35/f4CAgoB/fH5+f35+fXx/f4B/fn5/f4B/f39/foCAf36Af39+fn5/f35+f318fH2FkpKNjIuKiImIhIWEgoKCgYGBgoOCgoODgoODg4ODgYCBgYGBgYCAf39/f4CAgICAgH9/foCBhIOCgYGDhISDhICBgYCBgIGAgYKCg4GAgX6AgoODgYGBgYCAfX19fn5+f359fX19fXx8fHt6eXl5eX2Af4CBgYF/f4GAf4F/gICAgYGCgoB+gH5/fn5+foGAgoF/f39/gIB/f4B/gYB+f4CAfn9/fn+Af31+fX17fIaTkYyLioeHioiGhoSDgoGBgYGCg4ODg4OCg4OCgoKBgICBgYGAgH9/f4B/gICAgICAgH9+fn+BgYGAgISGh4aHgoSDhYOBg4ODhYSEhISDgYODg4KCgoGCgX5+fX19fn6AfX19fX19fX18e3p6eXl5eYCCgoKEg4CBg4GAgoCBgYGDgoODgYGCgIGAf4CBg4GEgoCAgYCBgYCAgYCCgn+BgIF/gIB/gICAfn9/fnx8ipOQiomIiIiJiIaGhoSCgoGBgoKDg4ODg4KDg4KCgYCAgICBgYGAf39/gICAgICAgIGBf359fn5/f39+g4aHh4iChoSFg4SFhIWGhoaGhoWFhoGAg4ODgoKAfX19fX19fn59fX19fX19fX18e3l5eXl4fIKDhIWCgYSDgoKDhYaCg4SDgYKCg4OBg4KCgYKFg4iFgoGBgYKCgYGBgYSDgoOCgoKCgYGBgIF/gIGAf36Ok4yHiIaIh4aGhYaGhIKDgoGCgoODg4ODg4OCgYGBgH+AgYCBgYB/f39/gICAgH+AgYB/fn19fX5+f36Ag4SHiISGhoaFhoaHh4aGh4eHhoeHf32AgIGCgX59fX19fX19fX19fX18fH5+fnx7eXh3eHl5gIKDf4ONhIOEhISXl4ODhIF9foGCgoGCgYKBg4aIjIWDgoKBhIKEg4KDhYWEhYOCg4OCg4OCgoKCg4OCgpKQi4iIh4mHhoaEhoWEhISCgYKCg4ODg4ODgoGBgYCAgICBgIGBgH9/fn+AgYCAf4CBgH9/fn1/fn+Bf4CCgYWFhYaGh4eGh4eIhoeHh4aHh4d/fH18fX9+fX19fX19fX19fX19fXx7iJKCe3x6fIZ5eHl8gYF+iZeEg4OEhJSTgIGBf39/fn6Ei4B/gICEhpCJhYSCgoGFhYuDgYKFhYaGhIOFhYOEhIODhIOFhISIko6LiYiIiYeIh4WGhYSFhIKBgoKDg4ODg4OCgYGBgICAgICAgIB/f39/f4CAgICAgIGBf39/f4CAgIGBgYGBg4OGh4aGh4aGiIeGhoaFhISGhX98fHx8fX18fH19fX19fX19fX18fH+RlZaDe3qElHx4eXp7fH+Cg4GBgIOCgH58fn57iJF8fI6Wf31/f4KGioWDg4SCgYONiX9+f4OEhYWDhYaFhIWFg4SFhYaEhI6Rj4uKioyKiYqHhYaFg4OCgYKCgoKDhIODgoGBgICBgICAgYGAgIB/f3+AgIB/gICAgX5+f4GBgoKCg4SDgoOCgoWGhISFhYSGhIOEg4KBgYOBf319fHx9fXx8fH18fH18fX19fHx8e4uRl4x6e3yAenp6e3x5eX19foB/gH98e3t+fn2ClZF/hIh+fH5/goR8fIGChIKAf4eDfYKBf4KCgIODhISEhISChIOEhYKEkZGNi4yMjoqJiYaFhYODgoKBgoODgoKDg4KCgYGAgIGAgICAgICAgH+Af3+Af357gICBenyAgYKDhYODhYWFhYODg4SCgYODgoOCgoGAgIB/gX5/fn59fHx8fHx8fHx8fHx8fHx9fXx8fn6Kgnt6e3p4ent6fH17fn1+f319fX18fH+BgX2Gj4F+fYJ+f36Agnx8f3+BgIKAfn17ioJ9gH9+gYCAgYKBgoCAgIGAf4uTj4uLjY6NiIeIhoWEhIOCgoKCg4OCgoODgYGBgICAgICAgH9+fXx7fHx9f3+AgHx6gYF4e4CCgYOFhIOFhIaGhISAhpSIgIKBgYGBgH9/f39/fn5+gHx8fHx8fHx8fHx8fHx9fHx8fHx8fHl7e3t4eHl7e3p8gX+Afn+BfH5+f399gIKCgICAgX+CkYF/f4CAfoB+fn9+gIGBfXx9e319fXx9fHx9gH+AgH6Afn6BlJGLjIyNj4qGhoaFhISFg4ODgoODg4OCgoGBgYGAgICBgICAf4CAf39/fXt6fICAgHh+gXd7gIF/gYKCgoKDhoeGhn6IlYp+gYGAgIB/foB+f39/fn+Bfnx7e3x8fHx8fHx8fH59fHt9fHx8e3x8fHp6eXt8en2Fg4J/gYF+f35/gH6FgoF+gH9+foCFhoKAfn6Dh399fH6AgIGAf39+fX19fX16fH1/f3+AfX9+gIyRjYyNjo2Nh4SGhoWEhIODg4OCg4ODg4KBgYGBgICBgYGAgYGBgYGAgH9/f397en9/e3mAd3p/f31+f3+Af4KEhoaFf3+FgX5/gIB/gH5+f35/gIB/gIB/f318fHx9fn18fX19fX19fH58fXx7fXx8ent6e319f4aEgoCAgX1+fX5/fYuEgYZ+fXx8f36CgX99fX19gHx7fXx+gYSDgYB+fn5+fXx+f399foB+fn6EkoyMi46Ni4qGhIaEhIODg4OCg4KDgoOCgYGBgYGAgYGBgYB/fXx8fH1+f39/f397e399d352eH59fH18fX5+gYGCg4B7fn18fn6AgH6Af35/fn+AgH+AgH9/fn9+fn5+fn1+fn99fH59fn19fHt8fHx6e3p9fn+Ag4OCf35/fH18fXx9gYN+jH58e3t9fn1+fn17e3t9e3p7e3uAhoSChIOCf4B+f4KCgn9/goJ/gIqPi4qKjIuKiISEhYOEg4ODgoKCgoKCgoKBgYGAgoKBgYKCf3+AgIB/fn18fH5/fn55fX52e3Z4fXx8fHt9fX6BgICAf35/f31+fn9/foB/f39/f3+AgIGBgH99gH9/fn9+fn9/f3yCfn59fX17e319fHp8fH6AgoF/gIB8fH18fHx8fH18fXt/fnt7e3x8fH18e3t7e3x8enp9en6CfoGDhIKBgoGFhoWFhoaHhoKEkI2LiomKhoeFgoOEhISEg4KCgYGCgoKBgoGBgYGBgoGBgoKAgYKBgYCAgH9+e3x+fnx6fnh5dnd8fHx7e318f4GAf35/foB/f35/f35/gH9/f39/f3+AgoKAfn6BgIB/f39/f39+fYN8fH19fH99fX19e3x+fn9+fn1/fnx8fHx8fHx+fnt8e3x8fHx9fH18fnx9fHx7e3x5e3x7e317fX5+f4CAg4eJiYmKiYuJhYiQjIqIiIaFhYOCgoOEhIODgoKBgYGBgYKBgYGBgYKCgoGCgoCAgX98e3p6eXt9enx+fnl8eXh4dHx8fHt8fHx+gX9/f39/gIB/fn5+fX+AgH9/f3+Af4CDg4B/gIGAgIB/f4CAgH58enx9fX59fX5+jIZ9fX57e4OCfX19fX18fXx9fX1+fH17fXx9fX58fn19fX18e3t6fHt8fHt6e3t6enp7fn6ChYiHh4uLi4qJjJCNjImHhoWEg4KCgoODg4OBgYGBgYGBgYGBgYGCgoOCgYKBgIGBf3+Af356eHl5en5+e3l6eH5zfHx8e3x8fH5+fn9/gH+AgIB/fn9+gIF/f4B/gIGAgoSDgYCAgYGAgX+AgYGBf39+f31+gH57foGRjHx9f4qAjYx+fn19fX59fX59fHx8fX18fXx9fX1+fX1+fnx7e3t8fH18e3p7fHl6eXh5e35/hIKEiImKiImNj4yKh4iFhISDgYKCgoKDgoGCgoKBgYGCgYKCgoGCgoKBgoKAgYGAfoCAf39+e3p5e319eXx6f3KBfXt7fHx8fn59fYGCf4GBgX9/gH+AgX9/gIGCgYGFg4SCgYGCgYKCgICBg4KAf4F/fX6Afnx/f4iCf36DkISEg4F/fn18jYd9fX59fHx/fnx9fXx9fX1+fX5/fX19e3x9fnx8e3x9enp5eXp5e3t+foCBg4eEiI2MiYmFhYSEg4KCgoKCgoKBgYGCgoKBgoKCgoKCgoKCgoGCgn+AgIB+f39/fn5/ent5fX16enp9cX6Cent8fX19fXp4foKAgYKCgICBgIGBgICBgoKCgoaFhIGBgYGBg4F/gIKEgX9+gYB9foF+fX9/gIB9fn+EgH5+f31+fX2KhX1+f31+foB/fX19fH5+fn99f4B9fX18fX9/fHx7fH17e3t6enp7e3x9fn2Ag3+IjImJh4WFhYSDgoKCgoKCgYGBgoKBgoKCgoKCgoGBgoKBgYKCf4CAgH9/f39+fn59eXp6fXx5d3t0e4d8dHd9fn17e3Z2foCBg4KBgYKCgoKBgYGDg4OChYaEgoCAgICCgX+AgYSBfn6AgH1+gH19fn6AgH6Bfn+Af39/gH99fn9/f3+Afn9/gH58fX18fn5+foF/gH2CgHx9gIF9fHx9fXx8e3x8e3t7fHt8fHx9fIiJh4eFhoWFhISDgYKBg4KAgIGCg4KCgoOCgoKCgoGCgoGBg4J/gIGAf39/fn5+fn57e3p8fHt2e3R3f352cnt+fnt4dXd8gIGCgoKBgoODg4OCgoSDhIOFhoOCgX9/gIOAgICAg4F+foCAfX+AfX1+foCAf4J/gYGAgICBf31/f3+AgIGAgIB/fnx9fX19fn59g32AfoKAfX6BgX98fn59fX17fH58fXx8fHt8e3x9iIWGhIWHhYSFhIKBgoGDgYCAgoKDgoKCg4ODg4KBgYGBgYGCgH6AgYB/fn5+fn5+fn56e3p9goN9dXF6fHpxen19eXh0dICAgoKCg4KDhYOEg4KDhISEhIWEgYGAgH6Agn9+f36Bf35/f4B9foB9fX1+gH9/gYCCgYCAgIKBfX6Af4GAf4CAgH9+fX19fn1+fn19gYR/gH9+f4GBf32Af319fn1+fn1+fHt8enx7eoCFgoOEhYSEhIWDgoKBgYKBgICCgoOCgoOEg4SDg4KCgYKBgYOAf4CBf35+fn5+fX5+fnt7en6Jh354cnl9f3F6eHt4eXR1fYKDgoODg4OFhIWEg4OEhIODhIKBgH+Af4CBfn19foB+fn5/gH19f3x9fX6Af4CAgIKAgIGAg4F/f4B+gIF+gIGAgH9+fn5+fn1/fn6FhYCBgH+Ag4F/foGAf36AfoB/fn17ent6fHt6goN/goKCgoOCg4KBgYCAgoGAgIKBg4KBg4SDhIKEgoGBgoGCgoB+gIF/fn1+fn5+fX59fXp7fIWEe3tyeXt8cHd1dnd5dnR6hISBhISDhIWFhoSDg4WEgoODgoCBf4B/f4B9fX1+f31+f39/fn1+fH19foF/gIB/gIB/gIGDgoGAf36AgH+AgYCBgH9/f39/f4CAgIGCgoKBf4GEgX+Ag4F/f4B/gX+Af3x7e3p8e3yBgH+Bf3+BgYGCgYF/f3+BgH6BgoKDgYGDg4KEgoSCgYGBgIGCgH6AgH9/fX5+fX19fn19e3t6gH94fHZ5enxxdHh3dnh1cnmFhYKFhIKEhYWGhISChIOBg4KAgIF+f4B/gHx9fX6AfX5/f39+fX98fn5+gX+Bf39+f4B/gIODg4B/f4GBgIKBgYGAgIGAgICAgIGAgYKDgYF/gISBfYGDhICAgX+BgYKBfXp7e3x8fX99f4B8f399fYGAgH59fYB/foGBgYKBgIKCgoKBg4KCgYB/gYKAfn9/fn99fX1+fX19fX19ent7fHZ9eXh6enJ1eXl2d3dzdYaFg4WFgoSEhYSEhIKDgoGDgX+AgX5/gH6AfX19fn9+f4B+fn99f3x/f3+BgIF/f3x+gH6AgYKDgYCAgoOEgoGAgYB/gYCAgYGAgYGCg4KBgX9/g4B+goKEgICCgYKChIJ+e3t8fHx9fX1+fXp+fX15fn9/fHx8fn1+gYCBgYGAgoGBgYGDgoGBf4CAgoB9fn19f319fX59fH19fX16e3p8dnx6d3t4cnZ5e3Z2dnN0hoSEhYWBhISFhIOCgYOBgYOBgIGBfX+BfoF9fX1/f39/gH5+fn19fYB/gIGBgX9+fH6Afn9/gYJ/gYGCg4eFgYB/fn6Af4CBgICAgIGCgYCAfoCCf3+BgoKBgYOCg4OFgn99fX18e3x8eXp7en55e3l4f357e3t+fX1/f4F/gH6BgICAgoOCgYF/gIGBf31+fH1+fX19fX18fn58fXx5e3x4enx3endzeHd6c3Z2c3SGhISFg4KDhISDgoGCg4GCgoGAgYF8gH9+gH1+fX5/gICAf35/fnx+f3+BgIGAf359f39+fn+BgH2AgIGDhIN/f359fn5+f4B/gIB/gYKBgH9+f4F+f4CCgoCBhIKEhIaEgH59fHx8fHp5dnl5enl2eXZ+fHt7e359e399gH99fX9/f3+BgoGBgX5/gYF+fX18fX19fX19fXx+jYF8fXl7e3p5fHd4eHR1dXhyd3d0doaEhIWDg4ODgoOCgYKDgoGDgn+BgH9/fn+Afn19fH+AgIB/f4B/fIB/f4GAgYCAf3yAf35+fn9/fX5+gIGCgn5/fn1+fn5+f3+Af32AgYB+fn5/gX5+gIKBf4GDgoOEh4SAgH58fXx8e3x1eXl4eHh5d3t8e3p7foZ9fn1/ent+fn59foGAgIGAfX6BgH59fXx9fX19fX18e32Dgnx8ent7e3p7d3Z4dXJzdnF3eXJ4hYWFhYOEhIKCg4KBgYKBgIOBgIB/fn5+foB+fX58f4CAgH+AgX97gH6AgH+BgYB/fYB/fn5/f319fX6AgYKBfn9+fn59fX1/fn9+fH6Af35+fn+Cfn6AgIF/gYOCg4OGhICBfnx9fHx7fHh3e3h1eXd3eXx6e3t9kod9fH13en1+fn19f35+gH98foB/fn19fH19fX19fXt8ent9enp4e3x6ent4dHh1cXJ0cHh4cXmEhYWFg4SDgoODgoGBgoKAgYCAgIB9fn5/gH18fn1/gIGAf3+BgHyAf4B+f4GAf399gH9+f39+fX18gICAgIB+f35+fn18fn9+f358fYB/fn1+gIJ/foCAf36Bg4KCg4WFgoJ+fX17e3x8eXd7eXd4d3d4e3t6e3yFin17end6fH19fHx9fX1/fnx9fn59fXx8fX5+fX18fHt6enx7e3p5enp7enhzd3VxcXNweHdxe4WGhYWDhYKBg4OBgYGBgoCBgICBgH5/fn9/fXx+fYCAgoGAf4GAfX6Af35/gX+Af3+BgH+Af31+fH1/gICAgH9/f35/fnx+f39/f319f399fn6CgYF/gIB/foGDgoKEg4SCgn5+fHx6fHt7eHp6d3N2d3h5e3p7eXp/fnt7d3p8fXx8fH59fH19fH19fXx8fX19fX99fXx9e3l7fHx8enp6enp6eHN2dXBwcm93dnJ7hYeEhYOEgoGDgoKCgYGCgYKAgYGAf4B/f399fX9+f4CBgYF/goF9foF+fn+Af4B/gIKAgIB+fX58f3+BgICAf4B/f4B+fX5+f4B/f39/gH9/f4J/gH9/gIB/gYGAgISBgoKAf39+f3x9fn56fYR9dHx9enp6enx5eXp6hoV3eXx8fHx8fXt8fHx8fX19fHx9fX19fn19fX16eX18fH16enp6enp5c3V1b29xb3d0c3yFhoOEgoOCgYKBgoKCgYKBgoCBgYCAgICAgH59gH+Af4GCgn+CgX+AgX5/gYB/gICAgn+Bf319f35/f4KAgICAgIB/gIB+fn1/gH9/f4B/f39/gH+AgICAgH+AgIGBgYGCgYCAf39/fn1/fnqBkYt6fH18e315e3p6eHmBgXh5e3x8fXx8e3x8fHx9fX18fH18fn1+fn59fHp8fHt8fXt5enp6eXlzdXVvb3Fwd3N0fYWHg4OCg4KAgYCCgoGAgYGBgYKBgYCAgIGAfn6Af4GAgYKCgIKCgICCfoCBgX9/gX+BgIF/fH6Af3+AgoCAgICAf3+AgH5/fX6Afn2AgH9/f3+AgICAgYCAf4CAgYCBgYKCgICAf39/fX5/fIGGiHx8fnt7fnl6e3p7jX53d3l7fHt9fHx8fHt9fH18fX18fXx+fn5/f358enx9e319e3l6e3p5eXN0dW5zcXB4cnV6hYaDg4KDgoCAgIGBgX+CgYKBgoGBgYKAgYF/fn9/gYGCgYKBg4OAgYJ/gYGBf4CAgIB/gX99f4F/gICBgICAf4B+gICAf359f4B+fn+Af39/gH9/gICBf4CBgH+BgIGCgoKAgICAgIB9foB9gIOCe35+e3x9e3p8fHuHeXh4eXx8fH17fHx9fX18fH19fn19fX5+f3+Af317fH18fHx7enl7e3l5c3J1bnZycHhxdXaFhYOEg4KCgICAgoF/gIKCgoKDgYGDgoCCgYB/gICCgoKBg4GEhICBgX6BgoF/gICAgH+Cf36AgYCCgICAgIB/gH+AgIB/fn2Af39/f4GAgH+AgH+AgYF/gICAgIGAgYGBgoGAgYCAgH9/gH5/fX59fn57fXx9e3x8d3h1eHh5e3x8fXx8fHx8fX5/f39/fn19fn9/gIGAf3x9fHx9e3p7eXp8eHpzcnVud3FxenF2d4WFg4SDg4KBgYKDgH+CgYWDg4SBgYOBgoKCgYB/gIKDgoCCgoWDf4CAfoKDgICBgICAf4CAf4GBgIKAf4CBgH9+gICAgICAf4CAgH+AgICAgIB/f4CBgYCAgICAgYGAgoKCgoCCgYGCgYB/f4B/gId+fnx6fXx7fX54d3Z5eXl8fX18fXt8fH19fn5/gIGAfn1+gICAgoGAfH59fX58d3t6ent5eXNxdW53cHV6cXZ5hYWCg4KDg4KDhISAgIKBhoODg4GChICEg4KCgH+CgoSBgYKChIJ/gIB/gYOCgYGBgYCAf4GBgYGAg4F+gIOCf31/goGAgIB+gYCBf4CAgYGBgYCAgIKCgYKBgYCBgYGBgoOCgoOBg4OCgYCBgH+AhH19fXx/fXp9gHp5dnp4eXt7fH19e3x9fX19fn+AgYGAgH+AgICDg4B9f35+fn15eXt6enp5c3J1b3dxd3lzd3uFgoKDgoOEgoOEg4CAgoOGg4ODgoKEgYSDgYKAgIKBg4GCgoGCgX6BgICCgYKBgYOBgICAgICBgoGEgH6Bg4F+f4CDgoCBfoCCg4KAgYGBgoKDgoGBg4KChIGAgYOBgYKEg4OEhIODhIODgYKBgYCCf4B/fYB8enx/e3t3fHl5eXt6fX59fHx8fH1+fn+BgYCAgIGBgYSEgH2Af39/f357e3t6e3p0cHhyeXR2eHR3e4SCg4KDg4SChIODgYKChIaEgoODgoSBhISAg4CBg4KCgoKCgIKAfoGAgIKBgoGCgoKBgIGBgYOCgoOAfoGDgX5/gYSEgYN/goKBg4KCgoGDg4OEgYKEgoOCgoGCgoOBg4SDhISEhISFg4SCgYOCgoOBgYGAgH58fIB8fHh8eXp5enx9f3x7fHx9fX18fICAgICAgYGBgYKBfoGAgICAf3t7e3p6enVweHd5dnV8dXZ8gICDgoODg4OEhISAgoKFhISDg4KDhIGEhYKCgYKDg4GCgoKAgYB9gICBgYKDgoKCgoGAgYKCg4KCg4B/gYOBf4CChIODgoGCgoGDgoKDg4SDg4SAgoSDg4OBgX+Bg4KDhYKEhISEhISDhISChIOEhIKBgoGBgHt+gX59eXx6enp9fHyBfXp8fH19fHp7fn5+gH9/gYGAgICAgIGBgIB/fX18fH18dnJ2eHh2dH52dX2Hh4OChIWDg4SFhICChIWEhIOCg4SEgISFg4KCgoODgoOCgoCCgH2AgIGCg4KCgoKEgoGCgoOEgoKBgICBg4F/gYOFhIOCg4CCgoOCg4ODhIOEg4CCg4KEg4KCfoOBgoSEgoODhISEhIOEhIOEg4WEg4ODgoKAe4CBf3x8fXp6e31/fX9/fHx6fH59fH19fn5/f39/gICAgH9+foCBgICAfnx9fX5/fn18e3h2f3Z2f4SHg4KDhYODhIaEgYKFhoWEhIODhISChIWFgoKDg4SCg4KDgoKBfoCAgoKDgoODg4SCgYKCg4OCg4GBgYGDgX6BhISDg4KEf4GEg4ODgoSDg4SCgIOEg4SDg4KCg4KChIOCg4SEhISEhIWEg4OEhYSEhIOBgoB9gYJ/fXx8e3x8gH19foB+fn1/fnx8fH19fn5/fn+BgYGBgH99fX6BgYB+fn19fX59fX5+f3+AfHyAgYKCg4OGg4SDhoSBgoiHhYSDg4SEhYKEhYWDg4SDhIODgoOCg4F+gYGDg4SCg4OEhIOCg4KEg4ODgoKDgoOBf4GEg4ODgoN/gYWDg4ODhIODhIOAgoSEhYOCgoODg4GEg4GDg4SDhISEhYSEhIWFhYWEg4ODf32BhH99fXx8fHx/gX59fn9/fX99e3x9fX19fX5+f4CBgIGBgH59fH6Cf39+fn5+fX1/f39/gICAf4CEhIODhIWDhIOFf36CiouFhISDgoOFgYaGhoOEhISEhIODg4OEgn+BgYODhYSFhIWEg4KEhISFhIODgoSDhYGBg4SFhYaEgoCDh4SDg4OFhIWFhIGEg4OHgoOCg4GCgYSDgoODhYODhYWEhYWHh4aHhYSEhYSBf4GDf35+fH59fX+BgH9+fHx+f358enx9fX19fX5+fn9/gIGBf319fIB/gH5+fn5+f3+AgYGBgYKAgYWFhIOFhIKEg4aAgoWFi4mEhIOEhYWDh4aGhISEhIWEhISEg4SEgYKDg4OEhIaEhYSDg4SEg3yDhHuBhHd5g4F9hH5+cnWDgoF2foOFgX2BdYF5g39/gH6EhIKDg4KBg4SDg4SFg4SFhoSFhn2EeXx+f4R7hYOAhIOAf359fn19gYOBfXt/fX6Afn18fHx9fX19fH19f4B/gYJ/fX18f4GBgICAgH+BgYGCgYKDg4KChoSEhIaEgYOEhYOEhYSKiIWFhYOFhYSGhoaDhISFhYWEhYWEhIWCgoOEhYWFhoSFhIOEhYWCaICFanx7cXF8gXOGc3R0fYKEdXNxg4Z0cHVyc3SDdnt9dYF/goOAgnZ5hYCDgIR/hYSChYWCaHpyc3N8gHOBg3+Dg32BfX1+fX6Cg4F8f4F9foB9fXx8fHx9fHx8fn1+gH+BgX99fX2AgYKBgYGBgIGBgYKBgoKCgoSHhIWEhYSBgoSGhoOFg4aIhoaFg4aGh4eGh4OFhYaFhIKFhoSFhYOCg4SEhoaGhIaEg4SFhn1xe4FweXZ+g3+CbnlwdXN8dnp5hXKEg3B2eHF2dHR1cnN0dml/gG5yb3R2bnVsd217c26AiHltfXJzdnN2bW14bHB5bHV9f359foGAgX2Afn2Af4B/fX18fHx9fH1+f32Af4CAfnx/foCBgoCBgICAgYCAgIKDgoOEhYiGhoCChYODhIeGg4WFhYaHh4SDhoeIiYaHhIWGiIiFg4WGhYWEhIOFhIKFhoaFhoWEhoWHdnB0e3BydX+HhYNtdW92b3x1coR5eYd4cXR3bndod3pucHaCcoN+b3p5eW1vbnpvb213fXiGcHF6cHJ0ZoF1fm57eXNveX+Af319gX9/fH99fIB+gIB+foCAgYB+fn9/foF/gH9+fYB9f4CBgIB+fn+BgH9/goOCgoSFh4eEfoeEg4OFh4aEhoWFhoaIhISGh4iIhoeEhoaLiYWEhoeHhYOFhYWEgoWFhYWGhoWGhYZxdXByc29zenl+hHSIdHV+iHZugnKEhnluanJ/cW1zd3x/dXR8hH54cXV3bnl1enF2eHV6eYRxam95eHBreXN6b3p3dnZwgYB/fn5/f356fn19f31/f359gIGDg4CCg4GBhIKBgIGBgH1/f4F+f35+f4GAfn6BgoCAgYSHhoODhoSEhYaHhoWFhYWGhoiFhIaFh4aFhoSGhomIhYSJioiFhIaGhYWDhYWEhYaGhoaFg3iLeXKIentwcIWEeIV4eWtzfnl7a3KDh4N6fG17eXl0fYB2bm+AgG90fHV3cXl9fW1+dW+DhYZ6gHJye3x0cG96a3N8bneCgIF+fn99fXt9e3x9fX9/fn1/f4KCf4GDgYGDgYB/gICAfn9+f31/fn1/gH58fYGAfn6Ag4iFhoOFhYWFhoeFhYWFhYeHiIaEhoWHhoaFhIWFhIWFhomJh4aEhoWGhoWGhoSGhoeGhoWGh4eHhoaEhoWGh4iHhYeGhoOHhoWFg4SGhoWGhIaEg4SEhoSEgYSDhISFhIWEhYSGg4aHhYaEhIWHhoSEhYWEhX13hYOEhIOCgX1/fnt8e357fHx9f359fH5+gYB9f4F/f4GAfn5+gH5+f35+fX99fX5/fHt8f358fH+BiYaFhIaGhoWHhoWFhYWGhoeIhoSGhYaGhYWDhIWGhYSGhoaGhYWGhIWGhoaGhYaGh4eGhYeIiIiIhoSHhYaHiIaFiIeIhYeGhoiFhYaGhYaGhYOChYWGhYWDhISEhIWEhYWEhYWEhoeGhoWEhoeGhISFhoOFhIKEg4OFg4OCfYB/e3t8fXt8fH1/fnx8fn2Af31+gH5+gH99fXyAfX5+fn5+f3x9fX57fHx/fHt7fn+Ih4SEiIaGhoeGhYWEhoaGhoiHhIWGh4aFhIODhIaFhIeFhYaFhYaEhYaGh4eFh4aJiIaGiIeIiYiFhIiFhoeGh4aIhoeFh4eGh4WFhoeFh4aFgoOFhoaEhIOEhIOEhoSFhYWGhoSGhoWGhYSGhoWEg4WFgoWHhYOCgoWDhIF+gIB8e319e3x7fX59fHx+fX5+fH9+fX1+fn19fH98fn58fYGAfHx8fXx8fH56e3t9foiHgoWIh4eGhoaGhISGhoeGiIaDhISGhoSFh4OEhYSFh4SFhoaFhoSGhoeHhoaIh4mIhoaIh4iKiIWHiIWHh4aHhoeGh4WIiIeHhYaGh4WHh4WBhISFhoWFhISEg4SFhYaGhoWGhIeGhoeFhYaGhYSDhIOChIeDhIGChISDgYCAgHt7fn17fHx9fXx8fH19fH18fn18fX18fHx9fXx+fXt8gX99fH18fnx8fHp6fHx9iIeChoiHhoeGhoaEhYaFhoaGhYOFhIaFhIiJg4GEg4SGhIaGhoaGhIeHiIiHh4eIioiGh4iHiImIhYiHhYeGhoeHh4WHhoiIh4eFh4eHhYaHhIKEg4SGhYeFhYSDhISFhoaGhoaGh4WFh4WGhYaFhIKDgoODh4GDgIKDg4KCgn+Ae3x+fnx8fH59fH19fH17fHx8fHx8fXt7e318e358e3x/fX18fX1/fXx6ent7fHyIh4KGhoaGh4aGhYSFhoWFhYWEg4WChoSDiId/enqChYaEhoaFh4aEh4eJiIiHhoiKh4aHh4aIiYeFiIeGiIeGhoeHhYeGiIiHhoWHhoeGhoeDg4SEg4aGh4WFhISEhYaGhoaGhYeHhoaHhoaEhoWDg4KCgoOGgYN+goKDgIODf398f35+fHx9f318fX18fXp7e3p7fHx8e3t7fnt7fXt7e358fHx8fX5/fXt6fHp8fYmHg4aFhoWGhoWFhIWFhYWFhIOBhYGGhIKEhHyAhn+ChYWGhYWGhYSHh4iIiIaFiIqHhYeGh4eIh4WIhYaHiIaGh4eGh4aIiIeFhoeGh4WFh4OEhoWEhoaHhoWFg4WFhoaGhoeFh4aHhoeHhYSFhYOBgoGAg4WCg36BgYF/g4F+f35/fX98fH1/fXt9fXx9enp7eXt8fXt7e3t+fHx8fHp7fXx8fHx+fYF8e3t7e3x7iYeEhoSGhIaGhYSFhoWEhIOEgoCDgYWDgYJ/eoSMe4CEhYeGhoaFhIeIh4aHhYWHiYeEh4WHhoiGhYeEhoeIhoaIiIeHhoeIhoSGhoaHhoWHg4SFhIaGhoeFhYSDhYWHhYeGh4WGhoaFhoaEg4SFgYCBgYCDg4OCfYGBgH6DgX5/f4B8f3x9fX59e359fH15enp5e319enp7e318fXx8ent9fHx9fH5+gHx7e3x+fXyIh4WGhYaEhoWFhYWFhYODgYOBgIKBhYKAgH9/fXx7gYSFhoaEhYSDh4eGhoaFhIaJhoKGhIaGhoWFh4aHiImGhYiHiYeGhoeFhIaFhYaFhYeDhIWEiIaGh4WFhIKGhYaFh4aHhIaGhoWFhoODg4WAf4GAgIOBg4B8gYB+foKAfYB/gXx/fH1+fX57fn18fHl5enl6fX15enp7fHt8e3t6e319fH18fn5+fHt7fX59fIiGhYaGhoSFhYSFhYSDgoKAgoGAgICDgX5+foB5en2Ag4SFh4WEg4OHhoOEhYSChYiFgoSDg4WFhYWHh4eIiIWFiIeJh4aFhoWDhoSFh4OEhoSEhYSHhoWGhYaEg4aFhoaGhoaEhYaHhYWGgoKDhH9+gICAgYCDgHuBf31+gn5+gH6Afn99fX59f3t/fXt6eXp6eXp8fXl6ent7enx7e3t7fH19fXx/fn18fH1/fnx7iIWFhoaGhoSFhIWDhYKBgICAgYB+f4KCfX1/f3t/f4KDg4WGhYSDgoaDgYOEgoCFh4WCg4GBg4SEhIaGh4eHhYWIhomHhoSEhIKFg4SGgoOFhISGhIeGhYWFhoOEhYSFhoWGhIOFhYaDhYWBgYODf35/gH9/gIN/fIB9fX+CfYCBfn6Bfn19fX1/e398e3p5enp5enp8eXp6e3t7fXp7e3t8fX59fYB9fXx8fYB/fXyGg4aGhoaFg4SChYKFgYGAf3+AgH5/gIJ8fn9/foCAgoKCg4SDgoGChIGAg4KBgISFhYKBf4CCg4OEhYaIhoWEhYeFh4WFgoOCgYOCgoWBg4WEhYaEhoaHhoaFgoSEg4SGhYWDhISDhIOFhICAgoJ/fX1/fn6AhH57f3x8gIF9gYB9fYN8fn59fX57fnt7enl6enl6ent5enp6e3t8ent8fHx+fn1/gXx9fHx9f4B+gIaEhYWEh4SDg4KGgoOAgYB+fn+AfX9/gnx9f39+fn6BgYKDg4KBgYKCf4CBgoCAgoWEgoB/gIGCgYOFhYeGhISGhoSFg4WBgoGBgoGCg4GChISEhYWGh4eGhYSDg4ODhIaFhIGDgoOChIODgH+AgX59fH5+fH+DfXx+fHyBgH6Cf31/gnx/fn18fHx8e3t6eXp6eXt6enp6enp6e3x5e318fH9/f4GAfX59fX1/gICAhoSEhYSFgoOCgoSCgoCBgH59fn9+fn6AfX2Af35+foGBgoODgoSHgYF+gICBf3+ChIOBf35/gIJ/goWEhoSDg4WFgoSBg4CBgIGBgYKBgIGEg4OGhYWHh4WFhYWCgoKDhYSCgYGBgoCFg4F/foB/fnx8fn18foN9e357fYF/gIN+fYCBf35/fXx8fH17e3p5enl5e3l6enl6ent7e3p7fXx8f3+BgoB+gH+AgH+AgYAKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9tZWRpYS9jb2RlYzIvaGlkbC8xLjAvdnRzL3Jlcy9iYmJfYWFjX3N0ZXJlb18xMjhrYnBzXzQ4MDAwaHouYWFjIGIvbWVkaWEvY29kZWMyL2hpZGwvMS4wL3Z0cy9yZXMvYmJiX2FhY19zdGVyZW9fMTI4a2Jwc180ODAwMGh6LmFhYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44MzExMDJkCi0tLSAvZGV2L251bGwKKysrIGIvbWVkaWEvY29kZWMyL2hpZGwvMS4wL3Z0cy9yZXMvYmJiX2FhY19zdGVyZW9fMTI4a2Jwc180ODAwMGh6LmFhYwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9tZWRpYS9jb2RlYzIvaGlkbC8xLjAvdnRzL3Jlcy9iYmJfYWFjX3N0ZXJlb18xMjhrYnBzXzQ4MDAwaHouaW5mbyBiL21lZGlhL2NvZGVjMi9oaWRsLzEuMC92dHMvcmVzL2JiYl9hYWNfc3RlcmVvXzEyOGticHNfNDgwMDBoei5pbmZvCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVmY2RhMGIKLS0tIC9kZXYvbnVsbAorKysgYi9tZWRpYS9jb2RlYzIvaGlkbC8xLjAvdnRzL3Jlcy9iYmJfYWFjX3N0ZXJlb18xMjhrYnBzXzQ4MDAwaHouaW5mbwpAQCAtMCwwICsxLDQ2OSBAQAorNSAzMiAwCis1IDMyIDAKKzMzNyAxIDAKKzMyMiAxIDIxMzMzCisyNzkgMSA0MjY2NgorMjgwIDEgNjQwMDAKKzI4MyAxIDg1MzMzCiszMTcgMSAxMDY2NjYKKzMxOCAxIDEyODAwMAorMzIxIDEgMTQ5MzMzCiszMTMgMSAxNzA2NjYKKzMxMiAxIDE5MjAwMAorMzE3IDEgMjEzMzMzCiszMzAgMSAyMzQ2NjYKKzM1MCAxIDI1NjAwMAorMzU1IDEgMjc3MzMzCiszMzMgMSAyOTg2NjYKKzMyNSAxIDMyMDAwMAorMzc2IDEgMzQxMzMzCiszMzUgMSAzNjI2NjYKKzM1MSAxIDM4NDAwMAorMzUwIDEgNDA1MzMzCiszMzkgMSA0MjY2NjYKKzMyOSAxIDQ0ODAwMAorMzUwIDEgNDY5MzMzCiszMzAgMSA0OTA2NjYKKzM1OSAxIDUxMjAwMAorMzE2IDEgNTMzMzMzCiszNDUgMSA1NTQ2NjYKKzM1NyAxIDU3NjAwMAorMzI1IDEgNTk3MzMzCiszMzYgMSA2MTg2NjYKKzMzOSAxIDY0MDAwMAorMzEyIDEgNjYxMzMzCiszNTAgMSA2ODI2NjYKKzMzOCAxIDcwNDAwMAorMzUzIDEgNzI1MzMzCiszNDAgMSA3NDY2NjYKKzMzMiAxIDc2ODAwMAorMzQwIDEgNzg5MzMzCiszMzkgMSA4MTA2NjYKKzMzMyAxIDgzMjAwMAorMzMzIDEgODUzMzMzCiszNDUgMSA4NzQ2NjYKKzM0MCAxIDg5NjAwMAorMzQzIDEgOTE3MzMzCiszMzUgMSA5Mzg2NjYKKzMzOSAxIDk2MDAwMAorMzQyIDEgOTgxMzMzCiszNDggMSAxMDAyNjY2CiszNTAgMSAxMDI0MDAwCiszNTEgMSAxMDQ1MzMzCiszNDIgMSAxMDY2NjY2CiszNjYgMSAxMDg4MDAwCiszNDAgMSAxMTA5MzMzCiszNTQgMSAxMTMwNjY2CiszNDAgMSAxMTUyMDAwCiszMzQgMSAxMTczMzMzCiszMzggMSAxMTk0NjY2CiszNDAgMSAxMjE2MDAwCiszNTEgMSAxMjM3MzMzCiszNDYgMSAxMjU4NjY2CiszMzEgMSAxMjgwMDAwCiszMjEgMSAxMzAxMzMzCiszNDMgMSAxMzIyNjY2CiszNDIgMSAxMzQ0MDAwCiszNDUgMSAxMzY1MzMzCiszMjYgMSAxMzg2NjY2CiszNDIgMSAxNDA4MDAwCiszNTYgMSAxNDI5MzMzCiszNTEgMSAxNDUwNjY2CiszNDMgMSAxNDcyMDAwCiszNDcgMSAxNDkzMzMzCiszNDkgMSAxNTE0NjY2CiszNTAgMSAxNTM2MDAwCiszMzAgMSAxNTU3MzMzCiszNDEgMSAxNTc4NjY2CiszNDAgMSAxNjAwMDAwCiszMzAgMSAxNjIxMzMzCiszNDAgMSAxNjQyNjY2CiszMzUgMSAxNjY0MDAwCiszNDQgMSAxNjg1MzMzCiszNTkgMSAxNzA2NjY2CiszMzcgMSAxNzI4MDAwCiszNDYgMSAxNzQ5MzMzCiszMzAgMSAxNzcwNjY2CiszNTEgMSAxNzkyMDAwCiszNTUgMSAxODEzMzMzCiszNTIgMSAxODM0NjY2CiszMjUgMSAxODU2MDAwCiszNDIgMSAxODc3MzMzCiszMjcgMSAxODk4NjY2CiszNDkgMSAxOTIwMDAwCiszMjYgMSAxOTQxMzMzCiszMzcgMSAxOTYyNjY2CiszNzggMSAxOTg0MDAwCiszMjEgMSAyMDA1MzMzCiszMTkgMSAyMDI2NjY2CiszNDYgMSAyMDQ4MDAwCiszNTIgMSAyMDY5MzMzCiszNDkgMSAyMDkwNjY2CiszMzEgMSAyMTEyMDAwCiszMzAgMSAyMTMzMzMzCiszMjkgMSAyMTU0NjY2CiszMzMgMSAyMTc2MDAwCiszNjcgMSAyMTk3MzMzCiszNjIgMSAyMjE4NjY2CiszMzcgMSAyMjQwMDAwCiszMzcgMSAyMjYxMzMzCiszNjAgMSAyMjgyNjY2CiszMzMgMSAyMzA0MDAwCiszMTcgMSAyMzI1MzMzCiszNDQgMSAyMzQ2NjY2CiszMzUgMSAyMzY4MDAwCiszMzcgMSAyMzg5MzMzCiszNDkgMSAyNDEwNjY2CiszMzYgMSAyNDMyMDAwCiszNDggMSAyNDUzMzMzCiszNDkgMSAyNDc0NjY2CiszNDIgMSAyNDk2MDAwCiszNTkgMSAyNTE3MzMzCiszNDAgMSAyNTM4NjY2CiszNDAgMSAyNTYwMDAwCiszNDggMSAyNTgxMzMzCiszMzQgMSAyNjAyNjY2CiszMjggMSAyNjI0MDAwCiszNDEgMSAyNjQ1MzMzCiszMzkgMSAyNjY2NjY2CiszMzcgMSAyNjg4MDAwCiszNTAgMSAyNzA5MzMzCiszMjYgMSAyNzMwNjY2CiszNjAgMSAyNzUyMDAwCiszNDQgMSAyNzczMzMzCiszNDAgMSAyNzk0NjY2CiszNDMgMSAyODE2MDAwCiszNjEgMSAyODM3MzMzCiszMjkgMSAyODU4NjY2CiszNDUgMSAyODgwMDAwCiszNDUgMSAyOTAxMzMzCiszMzAgMSAyOTIyNjY2CiszNDIgMSAyOTQ0MDAwCiszNDQgMSAyOTY1MzMzCiszMzAgMSAyOTg2NjY2CiszMjkgMSAzMDA4MDAwCiszMzUgMSAzMDI5MzMzCiszNjYgMSAzMDUwNjY2CiszMjggMSAzMDcyMDAwCiszNDkgMSAzMDkzMzMzCiszMzkgMSAzMTE0NjY2CiszNDAgMSAzMTM2MDAwCiszMzUgMSAzMTU3MzMzCiszMjcgMSAzMTc4NjY2CiszNDggMSAzMjAwMDAwCiszMzkgMSAzMjIxMzMzCiszMzQgMSAzMjQyNjY2CiszNTAgMSAzMjY0MDAwCiszMjUgMSAzMjg1MzMzCiszNjEgMSAzMzA2NjY2CiszMzggMSAzMzI4MDAwCiszNTAgMSAzMzQ5MzMzCiszNTMgMSAzMzcwNjY2CiszMjcgMSAzMzkyMDAwCiszNDYgMSAzNDEzMzMzCiszNDggMSAzNDM0NjY2CiszMzkgMSAzNDU2MDAwCiszNDIgMSAzNDc3MzMzCiszMzQgMSAzNDk4NjY2CiszNTAgMSAzNTIwMDAwCiszNTQgMSAzNTQxMzMzCiszNjMgMSAzNTYyNjY2CiszMjIgMSAzNTg0MDAwCiszMzcgMSAzNjA1MzMzCiszNTUgMSAzNjI2NjY2CiszMjkgMSAzNjQ4MDAwCiszMjQgMSAzNjY5MzMzCiszMzggMSAzNjkwNjY2CiszNTYgMSAzNzEyMDAwCiszMzAgMSAzNzMzMzMzCiszMjEgMSAzNzU0NjY2CiszMzcgMSAzNzc2MDAwCiszNDUgMSAzNzk3MzMzCiszMzUgMSAzODE4NjY2CiszNDggMSAzODQwMDAwCiszNDIgMSAzODYxMzMzCiszNDggMSAzODgyNjY2CiszMzUgMSAzOTA0MDAwCiszNDQgMSAzOTI1MzMzCiszNTcgMSAzOTQ2NjY2CiszNjggMSAzOTY4MDAwCiszMjQgMSAzOTg5MzMzCiszNDMgMSA0MDEwNjY2CiszNDEgMSA0MDMyMDAwCiszMjkgMSA0MDUzMzMzCiszNTYgMSA0MDc0NjY2CiszMTcgMSA0MDk2MDAwCiszNTEgMSA0MTE3MzMzCiszNDAgMSA0MTM4NjY2CiszNDAgMSA0MTYwMDAwCiszMzIgMSA0MTgxMzMzCiszNTUgMSA0MjAyNjY2CiszNTcgMSA0MjI0MDAwCiszMjcgMSA0MjQ1MzMzCiszMzggMSA0MjY2NjY2CiszMjMgMSA0Mjg4MDAwCiszNDYgMSA0MzA5MzMzCiszNTIgMSA0MzMwNjY2CiszNDcgMSA0MzUyMDAwCiszNDMgMSA0MzczMzMzCiszMTEgMSA0Mzk0NjY2CiszMzggMSA0NDE2MDAwCiszNjUgMSA0NDM3MzMzCiszNDkgMSA0NDU4NjY2CiszMjcgMSA0NDgwMDAwCiszNTUgMSA0NTAxMzMzCiszMTkgMSA0NTIyNjY2CiszNDkgMSA0NTQ0MDAwCiszNTEgMSA0NTY1MzMzCiszMzcgMSA0NTg2NjY2CiszNDAgMSA0NjA4MDAwCiszNDkgMSA0NjI5MzMzCiszMTYgMSA0NjUwNjY2CiszNDQgMSA0NjcyMDAwCiszMzQgMSA0NjkzMzMzCiszNDQgMSA0NzE0NjY2CiszNDcgMSA0NzM2MDAwCiszNDggMSA0NzU3MzMzCiszMzQgMSA0Nzc4NjY2CiszMzggMSA0ODAwMDAwCiszMzEgMSA0ODIxMzMzCiszNDQgMSA0ODQyNjY2CiszNDIgMSA0ODY0MDAwCiszMzYgMSA0ODg1MzMzCiszMjYgMSA0OTA2NjY2CiszNjQgMSA0OTI4MDAwCiszNTAgMSA0OTQ5MzMzCiszNTAgMSA0OTcwNjY2CiszNjMgMSA0OTkyMDAwCiszNTggMSA1MDEzMzMzCiszMDUgMSA1MDM0NjY2CiszNDQgMSA1MDU2MDAwCiszNDYgMSA1MDc3MzMzCiszNDIgMSA1MDk4NjY2CiszMzAgMSA1MTIwMDAwCiszMTggMSA1MTQxMzMzCiszNjEgMSA1MTYyNjY2CiszNTQgMSA1MTg0MDAwCiszMTMgMSA1MjA1MzMzCiszMzAgMSA1MjI2NjY2CiszNTAgMSA1MjQ4MDAwCiszNDcgMSA1MjY5MzMzCiszNDYgMSA1MjkwNjY2CiszNTcgMSA1MzEyMDAwCiszMjUgMSA1MzMzMzMzCiszMzUgMSA1MzU0NjY2CiszMzEgMSA1Mzc2MDAwCiszNjYgMSA1Mzk3MzMzCiszMjkgMSA1NDE4NjY2CiszNDkgMSA1NDQwMDAwCiszNzEgMSA1NDYxMzMzCiszMjYgMSA1NDgyNjY2CiszMzMgMSA1NTA0MDAwCiszMTkgMSA1NTI1MzMzCiszMjcgMSA1NTQ2NjY2CiszNTMgMSA1NTY4MDAwCiszNTYgMSA1NTg5MzMzCiszNDggMSA1NjEwNjY2CiszMzggMSA1NjMyMDAwCiszMzEgMSA1NjUzMzMzCiszNDEgMSA1Njc0NjY2CiszNjIgMSA1Njk2MDAwCiszMjYgMSA1NzE3MzMzCiszNTkgMSA1NzM4NjY2CiszMTUgMSA1NzYwMDAwCiszNzYgMSA1NzgxMzMzCiszNDMgMSA1ODAyNjY2CiszNTQgMSA1ODI0MDAwCiszNTMgMSA1ODQ1MzMzCiszNDQgMSA1ODY2NjY2CiszMzQgMSA1ODg4MDAwCiszNDUgMSA1OTA5MzMzCiszNTUgMSA1OTMwNjY2CiszMjIgMSA1OTUyMDAwCiszMzQgMSA1OTczMzMzCiszNTMgMSA1OTk0NjY2CiszMzggMSA2MDE2MDAwCiszNTEgMSA2MDM3MzMzCiszMzQgMSA2MDU4NjY2CiszMzkgMSA2MDgwMDAwCiszNDUgMSA2MTAxMzMzCiszNDcgMSA2MTIyNjY2CiszNTUgMSA2MTQ0MDAwCiszMTIgMSA2MTY1MzMzCiszNTIgMSA2MTg2NjY2CiszNTQgMSA2MjA4MDAwCiszMTggMSA2MjI5MzMzCiszNDQgMSA2MjUwNjY2CiszNjMgMSA2MjcyMDAwCiszMjEgMSA2MjkzMzMzCiszMzkgMSA2MzE0NjY2CiszNTYgMSA2MzM2MDAwCiszMzQgMSA2MzU3MzMzCiszNTQgMSA2Mzc4NjY2CiszMjUgMSA2NDAwMDAwCiszMjEgMSA2NDIxMzMzCiszNDEgMSA2NDQyNjY2CiszMzcgMSA2NDY0MDAwCiszNTEgMSA2NDg1MzMzCiszNDMgMSA2NTA2NjY2CiszNDEgMSA2NTI4MDAwCiszNDQgMSA2NTQ5MzMzCiszNDEgMSA2NTcwNjY2CiszNjQgMSA2NTkyMDAwCiszMTkgMSA2NjEzMzMzCiszNDggMSA2NjM0NjY2CiszMzIgMSA2NjU2MDAwCiszMzMgMSA2Njc3MzMzCiszNDMgMSA2Njk4NjY2CiszNDggMSA2NzIwMDAwCiszNDcgMSA2NzQxMzMzCiszNTAgMSA2NzYyNjY2CiszNDIgMSA2Nzg0MDAwCiszNDEgMSA2ODA1MzMzCiszMjYgMSA2ODI2NjY2CiszNTEgMSA2ODQ4MDAwCiszMjkgMSA2ODY5MzMzCiszMjMgMSA2ODkwNjY2CiszNTAgMSA2OTEyMDAwCiszNjEgMSA2OTMzMzMzCiszMjYgMSA2OTU0NjY2CiszNDUgMSA2OTc2MDAwCiszNDUgMSA2OTk3MzMzCiszMTEgMSA3MDE4NjY2CiszNDkgMSA3MDQwMDAwCiszNTggMSA3MDYxMzMzCiszNTIgMSA3MDgyNjY2CiszNDcgMSA3MTA0MDAwCiszNjQgMSA3MTI1MzMzCiszMjggMSA3MTQ2NjY2CiszMTggMSA3MTY4MDAwCiszNTEgMSA3MTg5MzMzCiszNDAgMSA3MjEwNjY2CiszNDEgMSA3MjMyMDAwCiszNTUgMSA3MjUzMzMzCiszMzYgMSA3Mjc0NjY2CiszNTIgMSA3Mjk2MDAwCiszNDEgMSA3MzE3MzMzCiszMzQgMSA3MzM4NjY2CiszNDggMSA3MzYwMDAwCiszNDIgMSA3MzgxMzMzCiszMzUgMSA3NDAyNjY2CiszNDIgMSA3NDI0MDAwCiszNTkgMSA3NDQ1MzMzCiszNDkgMSA3NDY2NjY2CiszMjkgMSA3NDg4MDAwCiszNTYgMSA3NTA5MzMzCisyOTIgMSA3NTMwNjY2CiszMTYgMSA3NTUyMDAwCiszMTggMSA3NTczMzMzCiszMjAgMSA3NTk0NjY2CiszNDIgMSA3NjE2MDAwCisyODUgMSA3NjM3MzMzCiszMjYgMSA3NjU4NjY2CiszNTIgMSA3NjgwMDAwCiszOTIgMSA3NzAxMzMzCiszNjQgMSA3NzIyNjY2CiszODQgMSA3NzQ0MDAwCiszMzQgMSA3NzY1MzMzCiszMTcgMSA3Nzg2NjY2CiszMjYgMSA3ODA4MDAwCiszNzMgMSA3ODI5MzMzCiszNTQgMSA3ODUwNjY2CiszMjkgMSA3ODcyMDAwCiszNDcgMSA3ODkzMzMzCiszNTMgMSA3OTE0NjY2CiszMzggMSA3OTM2MDAwCiszMTcgMSA3OTU3MzMzCiszNTQgMSA3OTc4NjY2CiszNDUgMSA4MDAwMDAwCiszNTAgMSA4MDIxMzMzCiszNTEgMSA4MDQyNjY2CiszMzIgMSA4MDY0MDAwCiszNTggMSA4MDg1MzMzCiszMTUgMSA4MTA2NjY2CiszMzYgMSA4MTI4MDAwCiszNTggMSA4MTQ5MzMzCiszNDMgMSA4MTcwNjY2CiszMTkgMSA4MTkyMDAwCiszNzAgMSA4MjEzMzMzCiszNDQgMSA4MjM0NjY2CiszNjEgMSA4MjU2MDAwCiszNDMgMSA4Mjc3MzMzCiszMzcgMSA4Mjk4NjY2CiszNTQgMSA4MzIwMDAwCiszMzIgMSA4MzQxMzMzCiszNDggMSA4MzYyNjY2CiszMjggMSA4Mzg0MDAwCiszNDUgMSA4NDA1MzMzCiszNDAgMSA4NDI2NjY2CiszNDYgMSA4NDQ4MDAwCiszNDEgMSA4NDY5MzMzCiszNDQgMSA4NDkwNjY2CiszNDIgMSA4NTEyMDAwCiszNDEgMSA4NTMzMzMzCiszNDUgMSA4NTU0NjY2CiszMzcgMSA4NTc2MDAwCiszMzUgMSA4NTk3MzMzCiszMzUgMSA4NjE4NjY2CiszNDAgMSA4NjQwMDAwCiszNDUgMSA4NjYxMzMzCiszNDEgMSA4NjgyNjY2CiszNDIgMSA4NzA0MDAwCiszMzggMSA4NzI1MzMzCiszNDMgMSA4NzQ2NjY2CiszMzYgMSA4NzY4MDAwCiszMzggMSA4Nzg5MzMzCiszNTMgMSA4ODEwNjY2CiszMzkgMSA4ODMyMDAwCiszMjkgMSA4ODUzMzMzCiszNDkgMSA4ODc0NjY2CiszMjMgMSA4ODk2MDAwCiszNTEgMSA4OTE3MzMzCiszNTkgMSA4OTM4NjY2CiszNTcgMSA4OTYwMDAwCiszNDEgMSA4OTgxMzMzCiszMzMgMSA5MDAyNjY2CiszMzUgMSA5MDI0MDAwCiszMjggMSA5MDQ1MzMzCiszNDcgMSA5MDY2NjY2CiszNDMgMSA5MDg4MDAwCiszNjkgMSA5MTA5MzMzCiszMzEgMSA5MTMwNjY2CiszNDQgMSA5MTUyMDAwCiszMzAgMSA5MTczMzMzCiszNDYgMSA5MTk0NjY2CiszMzcgMSA5MjE2MDAwCiszNDEgMSA5MjM3MzMzCiszMzggMSA5MjU4NjY2CiszMjkgMSA5MjgwMDAwCiszNjAgMSA5MzAxMzMzCiszMzYgMSA5MzIyNjY2CiszNDEgMSA5MzQ0MDAwCiszNDEgMSA5MzY1MzMzCiszNDUgMSA5Mzg2NjY2CiszNTEgMSA5NDA4MDAwCiszNDkgMSA5NDI5MzMzCiszMzYgMSA5NDUwNjY2CiszMjYgMSA5NDcyMDAwCiszNDkgMSA5NDkzMzMzCiszNDMgMSA5NTE0NjY2CiszNTcgMSA5NTM2MDAwCiszNDIgMSA5NTU3MzMzCiszMjUgMSA5NTc4NjY2CiszNDYgMSA5NjAwMDAwCiszMjYgMSA5NjIxMzMzCis0MDIgMSA5NjQyNjY2CiszMzEgMSA5NjY0MDAwCiszMzkgMSA5Njg1MzMzCiszNzEgMSA5NzA2NjY2CiszMTQgMSA5NzI4MDAwCiszMTAgMSA5NzQ5MzMzCiszNjQgMSA5NzcwNjY2CiszMzggMSA5NzkyMDAwCiszMzkgMSA5ODEzMzMzCiszMzcgMSA5ODM0NjY2CiszNTUgMSA5ODU2MDAwCiszNTEgMSA5ODc3MzMzCiszMzIgMSA5ODk4NjY2CiszMTYgMSA5OTIwMDAwCis0NzQgMSA5OTQxMzMzCmRpZmYgLS1naXQgYS9tZWRpYS9jb2RlYzIvaGlkbC8xLjAvdnRzL3Jlcy9iYmJfYW1yd2JfMWNoXzE0a2Jwc18xNjAwMGh6LmFtcndiIGIvbWVkaWEvY29kZWMyL2hpZGwvMS4wL3Z0cy9yZXMvYmJiX2FtcndiXzFjaF8xNGticHNfMTYwMDBoei5hbXJ3YgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wZDgyNTkzCi0tLSAvZGV2L251bGwKKysrIGIvbWVkaWEvY29kZWMyL2hpZGwvMS4wL3Z0cy9yZXMvYmJiX2FtcndiXzFjaF8xNGticHNfMTYwMDBoei5hbXJ3YgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9tZWRpYS9jb2RlYzIvaGlkbC8xLjAvdnRzL3Jlcy9iYmJfYW1yd2JfMWNoXzE0a2Jwc18xNjAwMGh6LmluZm8gYi9tZWRpYS9jb2RlYzIvaGlkbC8xLjAvdnRzL3Jlcy9iYmJfYW1yd2JfMWNoXzE0a2Jwc18xNjAwMGh6LmluZm8KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjZhNjFkNAotLS0gL2Rldi9udWxsCisrKyBiL21lZGlhL2NvZGVjMi9oaWRsLzEuMC92dHMvcmVzL2JiYl9hbXJ3Yl8xY2hfMTRrYnBzXzE2MDAwaHouaW5mbwpAQCAtMCwwICsxLDQ5NCBAQAorNDEgMSAwCis0MSAxIDIwMDAwCis0MSAxIDQwMDAwCis0MSAxIDYwMDAwCis0MSAxIDgwMDAwCis0MSAxIDEwMDAwMAorNDEgMSAxMjAwMDAKKzQxIDEgMTQwMDAwCis0MSAxIDE2MDAwMAorNDEgMSAxODAwMDAKKzQxIDEgMjAwMDAwCis0MSAxIDIyMDAwMAorNDEgMSAyNDAwMDAKKzQxIDEgMjYwMDAwCis0MSAxIDI4MDAwMAorNDEgMSAzMDAwMDAKKzQxIDEgMzIwMDAwCis0MSAxIDM0MDAwMAorNDEgMSAzNjAwMDAKKzQxIDEgMzgwMDAwCis0MSAxIDQwMDAwMAorNDEgMSA0MjAwMDAKKzQxIDEgNDQwMDAwCis0MSAxIDQ2MDAwMAorNDEgMSA0ODAwMDAKKzQxIDEgNTAwMDAwCis0MSAxIDUyMDAwMAorNDEgMSA1NDAwMDAKKzQxIDEgNTYwMDAwCis0MSAxIDU4MDAwMAorNDEgMSA2MDAwMDAKKzQxIDEgNjIwMDAwCis0MSAxIDY0MDAwMAorNDEgMSA2NjAwMDAKKzQxIDEgNjgwMDAwCis0MSAxIDcwMDAwMAorNDEgMSA3MjAwMDAKKzQxIDEgNzQwMDAwCis0MSAxIDc2MDAwMAorNDEgMSA3ODAwMDAKKzQxIDEgODAwMDAwCis0MSAxIDgyMDAwMAorNDEgMSA4NDAwMDAKKzQxIDEgODYwMDAwCis0MSAxIDg4MDAwMAorNDEgMSA5MDAwMDAKKzQxIDEgOTIwMDAwCis0MSAxIDk0MDAwMAorNDEgMSA5NjAwMDAKKzQxIDEgOTgwMDAwCis0MSAxIDEwMDAwMDAKKzQxIDEgMTAyMDAwMAorNDEgMSAxMDQwMDAwCis0MSAxIDEwNjAwMDAKKzQxIDEgMTA4MDAwMAorNDEgMSAxMTAwMDAwCis0MSAxIDExMjAwMDAKKzQxIDEgMTE0MDAwMAorNDEgMSAxMTYwMDAwCis0MSAxIDExODAwMDAKKzQxIDEgMTIwMDAwMAorNDEgMSAxMjIwMDAwCis0MSAxIDEyNDAwMDAKKzQxIDEgMTI2MDAwMAorNDEgMSAxMjgwMDAwCis0MSAxIDEzMDAwMDAKKzQxIDEgMTMyMDAwMAorNDEgMSAxMzQwMDAwCis0MSAxIDEzNjAwMDAKKzQxIDEgMTM4MDAwMAorNDEgMSAxNDAwMDAwCis0MSAxIDE0MjAwMDAKKzQxIDEgMTQ0MDAwMAorNDEgMSAxNDYwMDAwCis0MSAxIDE0ODAwMDAKKzQxIDEgMTUwMDAwMAorNDEgMSAxNTIwMDAwCis0MSAxIDE1NDAwMDAKKzQxIDEgMTU2MDAwMAorNDEgMSAxNTgwMDAwCis0MSAxIDE2MDAwMDAKKzQxIDEgMTYyMDAwMAorNDEgMSAxNjQwMDAwCis0MSAxIDE2NjAwMDAKKzQxIDEgMTY4MDAwMAorNDEgMSAxNzAwMDAwCis0MSAxIDE3MjAwMDAKKzQxIDEgMTc0MDAwMAorNDEgMSAxNzYwMDAwCis0MSAxIDE3ODAwMDAKKzQxIDEgMTgwMDAwMAorNDEgMSAxODIwMDAwCis0MSAxIDE4NDAwMDAKKzQxIDEgMTg2MDAwMAorNDEgMSAxODgwMDAwCis0MSAxIDE5MDAwMDAKKzQxIDEgMTkyMDAwMAorNDEgMSAxOTQwMDAwCis0MSAxIDE5NjAwMDAKKzQxIDEgMTk4MDAwMAorNDEgMSAyMDAwMDAwCis0MSAxIDIwMjAwMDAKKzQxIDEgMjA0MDAwMAorNDEgMSAyMDYwMDAwCis0MSAxIDIwODAwMDAKKzQxIDEgMjEwMDAwMAorNDEgMSAyMTIwMDAwCis0MSAxIDIxNDAwMDAKKzQxIDEgMjE2MDAwMAorNDEgMSAyMTgwMDAwCis0MSAxIDIyMDAwMDAKKzQxIDEgMjIyMDAwMAorNDEgMSAyMjQwMDAwCis0MSAxIDIyNjAwMDAKKzQxIDEgMjI4MDAwMAorNDEgMSAyMzAwMDAwCis0MSAxIDIzMjAwMDAKKzQxIDEgMjM0MDAwMAorNDEgMSAyMzYwMDAwCis0MSAxIDIzODAwMDAKKzQxIDEgMjQwMDAwMAorNDEgMSAyNDIwMDAwCis0MSAxIDI0NDAwMDAKKzQxIDEgMjQ2MDAwMAorNDEgMSAyNDgwMDAwCis0MSAxIDI1MDAwMDAKKzQxIDEgMjUyMDAwMAorNDEgMSAyNTQwMDAwCis0MSAxIDI1NjAwMDAKKzQxIDEgMjU4MDAwMAorNDEgMSAyNjAwMDAwCis0MSAxIDI2MjAwMDAKKzQxIDEgMjY0MDAwMAorNDEgMSAyNjYwMDAwCis0MSAxIDI2ODAwMDAKKzQxIDEgMjcwMDAwMAorNDEgMSAyNzIwMDAwCis0MSAxIDI3NDAwMDAKKzQxIDEgMjc2MDAwMAorNDEgMSAyNzgwMDAwCis0MSAxIDI4MDAwMDAKKzQxIDEgMjgyMDAwMAorNDEgMSAyODQwMDAwCis0MSAxIDI4NjAwMDAKKzQxIDEgMjg4MDAwMAorNDEgMSAyOTAwMDAwCis0MSAxIDI5MjAwMDAKKzQxIDEgMjk0MDAwMAorNDEgMSAyOTYwMDAwCis0MSAxIDI5ODAwMDAKKzQxIDEgMzAwMDAwMAorNDEgMSAzMDIwMDAwCis0MSAxIDMwNDAwMDAKKzQxIDEgMzA2MDAwMAorNDEgMSAzMDgwMDAwCis0MSAxIDMxMDAwMDAKKzQxIDEgMzEyMDAwMAorNDEgMSAzMTQwMDAwCis0MSAxIDMxNjAwMDAKKzQxIDEgMzE4MDAwMAorNDEgMSAzMjAwMDAwCis0MSAxIDMyMjAwMDAKKzQxIDEgMzI0MDAwMAorNDEgMSAzMjYwMDAwCis0MSAxIDMyODAwMDAKKzQxIDEgMzMwMDAwMAorNDEgMSAzMzIwMDAwCis0MSAxIDMzNDAwMDAKKzQxIDEgMzM2MDAwMAorNDEgMSAzMzgwMDAwCis0MSAxIDM0MDAwMDAKKzQxIDEgMzQyMDAwMAorNDEgMSAzNDQwMDAwCis0MSAxIDM0NjAwMDAKKzQxIDEgMzQ4MDAwMAorNDEgMSAzNTAwMDAwCis0MSAxIDM1MjAwMDAKKzQxIDEgMzU0MDAwMAorNDEgMSAzNTYwMDAwCis0MSAxIDM1ODAwMDAKKzQxIDEgMzYwMDAwMAorNDEgMSAzNjIwMDAwCis0MSAxIDM2NDAwMDAKKzQxIDEgMzY2MDAwMAorNDEgMSAzNjgwMDAwCis0MSAxIDM3MDAwMDAKKzQxIDEgMzcyMDAwMAorNDEgMSAzNzQwMDAwCis0MSAxIDM3NjAwMDAKKzQxIDEgMzc4MDAwMAorNDEgMSAzODAwMDAwCis0MSAxIDM4MjAwMDAKKzQxIDEgMzg0MDAwMAorNDEgMSAzODYwMDAwCis0MSAxIDM4ODAwMDAKKzQxIDEgMzkwMDAwMAorNDEgMSAzOTIwMDAwCis0MSAxIDM5NDAwMDAKKzQxIDEgMzk2MDAwMAorNDEgMSAzOTgwMDAwCis0MSAxIDQwMDAwMDAKKzQxIDEgNDAyMDAwMAorNDEgMSA0MDQwMDAwCis0MSAxIDQwNjAwMDAKKzQxIDEgNDA4MDAwMAorNDEgMSA0MTAwMDAwCis0MSAxIDQxMjAwMDAKKzQxIDEgNDE0MDAwMAorNDEgMSA0MTYwMDAwCis0MSAxIDQxODAwMDAKKzQxIDEgNDIwMDAwMAorNDEgMSA0MjIwMDAwCis0MSAxIDQyNDAwMDAKKzQxIDEgNDI2MDAwMAorNDEgMSA0MjgwMDAwCis0MSAxIDQzMDAwMDAKKzQxIDEgNDMyMDAwMAorNDEgMSA0MzQwMDAwCis0MSAxIDQzNjAwMDAKKzQxIDEgNDM4MDAwMAorNDEgMSA0NDAwMDAwCis0MSAxIDQ0MjAwMDAKKzQxIDEgNDQ0MDAwMAorNDEgMSA0NDYwMDAwCis0MSAxIDQ0ODAwMDAKKzQxIDEgNDUwMDAwMAorNDEgMSA0NTIwMDAwCis0MSAxIDQ1NDAwMDAKKzQxIDEgNDU2MDAwMAorNDEgMSA0NTgwMDAwCis0MSAxIDQ2MDAwMDAKKzQxIDEgNDYyMDAwMAorNDEgMSA0NjQwMDAwCis0MSAxIDQ2NjAwMDAKKzQxIDEgNDY4MDAwMAorNDEgMSA0NzAwMDAwCis0MSAxIDQ3MjAwMDAKKzQxIDEgNDc0MDAwMAorNDEgMSA0NzYwMDAwCis0MSAxIDQ3ODAwMDAKKzQxIDEgNDgwMDAwMAorNDEgMSA0ODIwMDAwCis0MSAxIDQ4NDAwMDAKKzQxIDEgNDg2MDAwMAorNDEgMSA0ODgwMDAwCis0MSAxIDQ5MDAwMDAKKzQxIDEgNDkyMDAwMAorNDEgMSA0OTQwMDAwCis0MSAxIDQ5NjAwMDAKKzQxIDEgNDk4MDAwMAorNDEgMSA1MDAwMDAwCis0MSAxIDUwMjAwMDAKKzQxIDEgNTA0MDAwMAorNDEgMSA1MDYwMDAwCis0MSAxIDUwODAwMDAKKzQxIDEgNTEwMDAwMAorNDEgMSA1MTIwMDAwCis0MSAxIDUxNDAwMDAKKzQxIDEgNTE2MDAwMAorNDEgMSA1MTgwMDAwCis0MSAxIDUyMDAwMDAKKzQxIDEgNTIyMDAwMAorNDEgMSA1MjQwMDAwCis0MSAxIDUyNjAwMDAKKzQxIDEgNTI4MDAwMAorNDEgMSA1MzAwMDAwCis0MSAxIDUzMjAwMDAKKzQxIDEgNTM0MDAwMAorNDEgMSA1MzYwMDAwCis0MSAxIDUzODAwMDAKKzQxIDEgNTQwMDAwMAorNDEgMSA1NDIwMDAwCis0MSAxIDU0NDAwMDAKKzQxIDEgNTQ2MDAwMAorNDEgMSA1NDgwMDAwCis0MSAxIDU1MDAwMDAKKzQxIDEgNTUyMDAwMAorNDEgMSA1NTQwMDAwCis0MSAxIDU1NjAwMDAKKzQxIDEgNTU4MDAwMAorNDEgMSA1NjAwMDAwCis0MSAxIDU2MjAwMDAKKzQxIDEgNTY0MDAwMAorNDEgMSA1NjYwMDAwCis0MSAxIDU2ODAwMDAKKzQxIDEgNTcwMDAwMAorNDEgMSA1NzIwMDAwCis0MSAxIDU3NDAwMDAKKzQxIDEgNTc2MDAwMAorNDEgMSA1NzgwMDAwCis0MSAxIDU4MDAwMDAKKzQxIDEgNTgyMDAwMAorNDEgMSA1ODQwMDAwCis0MSAxIDU4NjAwMDAKKzQxIDEgNTg4MDAwMAorNDEgMSA1OTAwMDAwCis0MSAxIDU5MjAwMDAKKzQxIDEgNTk0MDAwMAorNDEgMSA1OTYwMDAwCis0MSAxIDU5ODAwMDAKKzQxIDEgNjAwMDAwMAorNDEgMSA2MDIwMDAwCis0MSAxIDYwNDAwMDAKKzQxIDEgNjA2MDAwMAorNDEgMSA2MDgwMDAwCis0MSAxIDYxMDAwMDAKKzQxIDEgNjEyMDAwMAorNDEgMSA2MTQwMDAwCis0MSAxIDYxNjAwMDAKKzQxIDEgNjE4MDAwMAorNDEgMSA2MjAwMDAwCis0MSAxIDYyMjAwMDAKKzQxIDEgNjI0MDAwMAorNDEgMSA2MjYwMDAwCis0MSAxIDYyODAwMDAKKzQxIDEgNjMwMDAwMAorNDEgMSA2MzIwMDAwCis0MSAxIDYzNDAwMDAKKzQxIDEgNjM2MDAwMAorNDEgMSA2MzgwMDAwCis0MSAxIDY0MDAwMDAKKzQxIDEgNjQyMDAwMAorNDEgMSA2NDQwMDAwCis0MSAxIDY0NjAwMDAKKzQxIDEgNjQ4MDAwMAorNDEgMSA2NTAwMDAwCis0MSAxIDY1MjAwMDAKKzQxIDEgNjU0MDAwMAorNDEgMSA2NTYwMDAwCis0MSAxIDY1ODAwMDAKKzQxIDEgNjYwMDAwMAorNDEgMSA2NjIwMDAwCis0MSAxIDY2NDAwMDAKKzQxIDEgNjY2MDAwMAorNDEgMSA2NjgwMDAwCis0MSAxIDY3MDAwMDAKKzQxIDEgNjcyMDAwMAorNDEgMSA2NzQwMDAwCis0MSAxIDY3NjAwMDAKKzQxIDEgNjc4MDAwMAorNDEgMSA2ODAwMDAwCis0MSAxIDY4MjAwMDAKKzQxIDEgNjg0MDAwMAorNDEgMSA2ODYwMDAwCis0MSAxIDY4ODAwMDAKKzQxIDEgNjkwMDAwMAorNDEgMSA2OTIwMDAwCis0MSAxIDY5NDAwMDAKKzQxIDEgNjk2MDAwMAorNDEgMSA2OTgwMDAwCis0MSAxIDcwMDAwMDAKKzQxIDEgNzAyMDAwMAorNDEgMSA3MDQwMDAwCis0MSAxIDcwNjAwMDAKKzQxIDEgNzA4MDAwMAorNDEgMSA3MTAwMDAwCis0MSAxIDcxMjAwMDAKKzQxIDEgNzE0MDAwMAorNDEgMSA3MTYwMDAwCis0MSAxIDcxODAwMDAKKzQxIDEgNzIwMDAwMAorNDEgMSA3MjIwMDAwCis0MSAxIDcyNDAwMDAKKzQxIDEgNzI2MDAwMAorNDEgMSA3MjgwMDAwCis0MSAxIDczMDAwMDAKKzQxIDEgNzMyMDAwMAorNDEgMSA3MzQwMDAwCis0MSAxIDczNjAwMDAKKzQxIDEgNzM4MDAwMAorNDEgMSA3NDAwMDAwCis0MSAxIDc0MjAwMDAKKzQxIDEgNzQ0MDAwMAorNDEgMSA3NDYwMDAwCis0MSAxIDc0ODAwMDAKKzQxIDEgNzUwMDAwMAorNDEgMSA3NTIwMDAwCis0MSAxIDc1NDAwMDAKKzQxIDEgNzU2MDAwMAorNDEgMSA3NTgwMDAwCis0MSAxIDc2MDAwMDAKKzQxIDEgNzYyMDAwMAorNDEgMSA3NjQwMDAwCis0MSAxIDc2NjAwMDAKKzQxIDEgNzY4MDAwMAorNDEgMSA3NzAwMDAwCis0MSAxIDc3MjAwMDAKKzQxIDEgNzc0MDAwMAorNDEgMSA3NzYwMDAwCis0MSAxIDc3ODAwMDAKKzQxIDEgNzgwMDAwMAorNDEgMSA3ODIwMDAwCis0MSAxIDc4NDAwMDAKKzQxIDEgNzg2MDAwMAorNDEgMSA3ODgwMDAwCis0MSAxIDc5MDAwMDAKKzQxIDEgNzkyMDAwMAorNDEgMSA3OTQwMDAwCis0MSAxIDc5NjAwMDAKKzQxIDEgNzk4MDAwMAorNDEgMSA4MDAwMDAwCis0MSAxIDgwMjAwMDAKKzQxIDEgODA0MDAwMAorNDEgMSA4MDYwMDAwCis0MSAxIDgwODAwMDAKKzQxIDEgODEwMDAwMAorNDEgMSA4MTIwMDAwCis0MSAxIDgxNDAwMDAKKzQxIDEgODE2MDAwMAorNDEgMSA4MTgwMDAwCis0MSAxIDgyMDAwMDAKKzQxIDEgODIyMDAwMAorNDEgMSA4MjQwMDAwCis0MSAxIDgyNjAwMDAKKzQxIDEgODI4MDAwMAorNDEgMSA4MzAwMDAwCis0MSAxIDgzMjAwMDAKKzQxIDEgODM0MDAwMAorNDEgMSA4MzYwMDAwCis0MSAxIDgzODAwMDAKKzQxIDEgODQwMDAwMAorNDEgMSA4NDIwMDAwCis0MSAxIDg0NDAwMDAKKzQxIDEgODQ2MDAwMAorNDEgMSA4NDgwMDAwCis0MSAxIDg1MDAwMDAKKzQxIDEgODUyMDAwMAorNDEgMSA4NTQwMDAwCis0MSAxIDg1NjAwMDAKKzQxIDEgODU4MDAwMAorNDEgMSA4NjAwMDAwCis0MSAxIDg2MjAwMDAKKzQxIDEgODY0MDAwMAorNDEgMSA4NjYwMDAwCis0MSAxIDg2ODAwMDAKKzQxIDEgODcwMDAwMAorNDEgMSA4NzIwMDAwCis0MSAxIDg3NDAwMDAKKzQxIDEgODc2MDAwMAorNDEgMSA4NzgwMDAwCis0MSAxIDg4MDAwMDAKKzQxIDEgODgyMDAwMAorNDEgMSA4ODQwMDAwCis0MSAxIDg4NjAwMDAKKzQxIDEgODg4MDAwMAorNDEgMSA4OTAwMDAwCis0MSAxIDg5MjAwMDAKKzQxIDEgODk0MDAwMAorNDEgMSA4OTYwMDAwCis0MSAxIDg5ODAwMDAKKzQxIDEgOTAwMDAwMAorNDEgMSA5MDIwMDAwCis0MSAxIDkwNDAwMDAKKzQxIDEgOTA2MDAwMAorNDEgMSA5MDgwMDAwCis0MSAxIDkxMDAwMDAKKzQxIDEgOTEyMDAwMAorNDEgMSA5MTQwMDAwCis0MSAxIDkxNjAwMDAKKzQxIDEgOTE4MDAwMAorNDEgMSA5MjAwMDAwCis0MSAxIDkyMjAwMDAKKzQxIDEgOTI0MDAwMAorNDEgMSA5MjYwMDAwCis0MSAxIDkyODAwMDAKKzQxIDEgOTMwMDAwMAorNDEgMSA5MzIwMDAwCis0MSAxIDkzNDAwMDAKKzQxIDEgOTM2MDAwMAorNDEgMSA5MzgwMDAwCis0MSAxIDk0MDAwMDAKKzQxIDEgOTQyMDAwMAorNDEgMSA5NDQwMDAwCis0MSAxIDk0NjAwMDAKKzQxIDEgOTQ4MDAwMAorNDEgMSA5NTAwMDAwCis0MSAxIDk1MjAwMDAKKzQxIDEgOTU0MDAwMAorNDEgMSA5NTYwMDAwCis0MSAxIDk1ODAwMDAKKzQxIDEgOTYwMDAwMAorNDEgMSA5NjIwMDAwCis0MSAxIDk2NDAwMDAKKzQxIDEgOTY2MDAwMAorNDEgMSA5NjgwMDAwCis0MSAxIDk3MDAwMDAKKzQxIDEgOTcyMDAwMAorNDEgMSA5NzQwMDAwCis0MSAxIDk3NjAwMDAKKzQxIDEgOTc4MDAwMAorNDEgMSA5ODAwMDAwCis0MSAxIDk4MjAwMDAKKzQxIDEgOTg0MDAwMAorNDEgMSA5ODYwMDAwCmRpZmYgLS1naXQgYS9tZWRpYS9jb2RlYzIvaGlkbC8xLjAvdnRzL3Jlcy9iYmJfYXZjXzE3NngxNDRfMzAwa2Jwc182MGZwcy5oMjY0IGIvbWVkaWEvY29kZWMyL2hpZGwvMS4wL3Z0cy9yZXMvYmJiX2F2Y18xNzZ4MTQ0XzMwMGticHNfNjBmcHMuaDI2NApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kYTFlNzVkCi0tLSAvZGV2L251bGwKKysrIGIvbWVkaWEvY29kZWMyL2hpZGwvMS4wL3Z0cy9yZXMvYmJiX2F2Y18xNzZ4MTQ0XzMwMGticHNfNjBmcHMuaDI2NApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9tZWRpYS9jb2RlYzIvaGlkbC8xLjAvdnRzL3Jlcy9iYmJfYXZjXzE3NngxNDRfMzAwa2Jwc182MGZwcy5pbmZvIGIvbWVkaWEvY29kZWMyL2hpZGwvMS4wL3Z0cy9yZXMvYmJiX2F2Y18xNzZ4MTQ0XzMwMGticHNfNjBmcHMuaW5mbwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NDU2MzA5Ci0tLSAvZGV2L251bGwKKysrIGIvbWVkaWEvY29kZWMyL2hpZGwvMS4wL3Z0cy9yZXMvYmJiX2F2Y18xNzZ4MTQ0XzMwMGticHNfNjBmcHMuaW5mbwpAQCAtMCwwICsxLDYyIEBACisyOCAzMiAwCisxMCAzMiAwCis0NzgwIDEgMzMzMzMKKzk2MCAwIDEwMDAwMAorNDgwIDAgNjY2NjYKKzI0NiAwIDUwMDAwCisyNjQgMCA4MzMzMworMTE2MCAwIDE2NjY2NgorNDA0IDAgMTMzMzMzCisyMzcgMCAxMTY2NjYKKzE5MyAwIDE1MDAwMAorOTM2IDAgMjMzMzMzCiszODQgMCAyMDAwMDAKKzE5OSAwIDE4MzMzMworMjc1IDAgMjE2NjY2CisxMDg2IDAgMzAwMDAwCis1MjAgMCAyNjY2NjYKKzMwMSAwIDI1MDAwMAorMjcwIDAgMjgzMzMzCisxMjMyIDAgMzY2NjY2Cis1NTkgMCAzMzMzMzMKKzI4NyAwIDMxNjY2NgorMjc0IDAgMzUwMDAwCisxMDg0IDAgNDMzMzMzCis0ODUgMCA0MDAwMDAKKzMwNyAwIDM4MzMzMworMjg0IDAgNDE2NjY2CisxMDUyIDAgNTAwMDAwCis1MDQgMCA0NjY2NjYKKzI5OCAwIDQ1MDAwMAorMzI3IDAgNDgzMzMzCisxMTg5IDAgNTY2NjY2CiszNTggMCA1MzMzMzMKKzE3MiAwIDUxNjY2NgorMTg1IDAgNTUwMDAwCisxMTE1IDAgNjMzMzMzCis0NjMgMCA2MDAwMDAKKzIxOCAwIDU4MzMzMworMjU1IDAgNjE2NjY2CisxMTU1IDAgNzAwMDAwCis2MjIgMCA2NjY2NjYKKzM1NiAwIDY1MDAwMAorMzQxIDAgNjgzMzMzCisxMjQwIDAgNzY2NjY2Cis2MTAgMCA3MzMzMzMKKzM0MSAwIDcxNjY2NgorMzgwIDAgNzUwMDAwCisxMzI2IDAgODMzMzMzCis2MjAgMCA4MDAwMDAKKzM5NiAwIDc4MzMzMworMzUzIDAgODE2NjY2CisxMTk2IDAgOTAwMDAwCis2MjMgMCA4NjY2NjYKKzM3NSAwIDg1MDAwMAorMzYyIDAgODgzMzMzCisxMTkyIDAgOTY2NjY2Cis2NTQgMCA5MzMzMzMKKzM1OSAwIDkxNjY2NgorMzUyIDAgOTUwMDAwCis4MjggMCAxMDE2NjY2Cis0MzYgMCA5ODMzMzMKKzQwMSAwIDEwMDAwMDAKZGlmZiAtLWdpdCBhL21lZGlhL2NvZGVjMi9oaWRsLzEuMC92dHMvcmVzL2JiYl9hdmNfNjQweDM2MF83NjhrYnBzXzMwZnBzLmgyNjQgYi9tZWRpYS9jb2RlYzIvaGlkbC8xLjAvdnRzL3Jlcy9iYmJfYXZjXzY0MHgzNjBfNzY4a2Jwc18zMGZwcy5oMjY0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFkOGM2OGYKLS0tIC9kZXYvbnVsbAorKysgYi9tZWRpYS9jb2RlYzIvaGlkbC8xLjAvdnRzL3Jlcy9iYmJfYXZjXzY0MHgzNjBfNzY4a2Jwc18zMGZwcy5oMjY0CkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL21lZGlhL2NvZGVjMi9oaWRsLzEuMC92dHMvcmVzL2JiYl9hdmNfNjQweDM2MF83NjhrYnBzXzMwZnBzLmluZm8gYi9tZWRpYS9jb2RlYzIvaGlkbC8xLjAvdnRzL3Jlcy9iYmJfYXZjXzY0MHgzNjBfNzY4a2Jwc18zMGZwcy5pbmZvCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI1ZjNiOWIKLS0tIC9kZXYvbnVsbAorKysgYi9tZWRpYS9jb2RlYzIvaGlkbC8xLjAvdnRzL3Jlcy9iYmJfYXZjXzY0MHgzNjBfNzY4a2Jwc18zMGZwcy5pbmZvCkBAIC0wLDAgKzEsMjQyIEBACisyOSAzMiAwCis5IDMyIDAKKzM4NDY5IDEgNjY2NjYKKzMyNzAgMCAyMDAwMDAKKzQ0MyAwIDEzMzMzMworMjQ2IDAgMTAwMDAwCisyMTQgMCAxNjY2NjYKKzIyODAgMCAzMDAwMDAKKzM2OCAwIDIzMzMzMworMjM4IDAgMjY2NjY2Cis2ODggMCA0MzMzMzMKKzI4NyAwIDM2NjY2NgorMjM0IDAgMzMzMzMzCisxNzIgMCA0MDAwMDAKKzEzNjMgMCA1NjY2NjYKKzI3MyAwIDUwMDAwMAorMTY2IDAgNDY2NjY2CisxODIgMCA1MzMzMzMKKzM3MzEgMCA3MDAwMDAKKzM0OSAwIDYzMzMzMworMjE2IDAgNjAwMDAwCisyMjkgMCA2NjY2NjYKKzYwNjEgMCA4MzMzMzMKKzQwOCAwIDc2NjY2NgorMjcxIDAgNzMzMzMzCisyNDEgMCA4MDAwMDAKKzcwMDQgMCA5NjY2NjYKKzQ0MiAwIDkwMDAwMAorMjYxIDAgODY2NjY2CisyMjkgMCA5MzMzMzMKKzczNTQgMCAxMTAwMDAwCis0MDQgMCAxMDMzMzMzCisyNjQgMCAxMDAwMDAwCisxOTggMCAxMDY2NjY2Cis0NTQyIDAgMTIzMzMzMworMjg2IDAgMTE2NjY2NgorMjA1IDAgMTEzMzMzMworMTMxIDAgMTIwMDAwMAorMzMyOSAwIDEzMzMzMzMKKzIxNiAwIDEyNjY2NjYKKzEzNiAwIDEzMDAwMDAKKzIzNTMgMCAxMzY2NjY2Cis5ODYgMCAxNDAwMDAwCis4MDggMCAxNDMzMzMzCiszMTggMCAxNDY2NjY2Cis2MiAwIDE1MDAwMDAKKzU1NjQ5IDEgMTUzMzMzMworMTYwNiAwIDE1NjY2NjYKKzI5MzUgMCAxNjAwMDAwCiszNTY0IDAgMTYzMzMzMworMzMyNCAwIDE2NjY2NjYKKzQ1NDMgMCAxNzAwMDAwCisxNzQwIDAgMTczMzMzMworMjczNyAwIDE3NjY2NjYKKzI3NjIgMCAxODAwMDAwCiszMTg1IDAgMTgzMzMzMworMzIzOCAwIDE4NjY2NjYKKzMzOTUgMCAxOTAwMDAwCiszNDIxIDAgMTkzMzMzMworMzQ4MiAwIDE5NjY2NjYKKzMzNzAgMCAyMDAwMDAwCiszNjU2IDAgMjAzMzMzMworMzUwOSAwIDIwNjY2NjYKKzM2ODQgMCAyMTAwMDAwCiszNzMyIDAgMjEzMzMzMworMzM2NiAwIDIxNjY2NjYKKzMzNzQgMCAyMjAwMDAwCiszMjAyIDAgMjIzMzMzMworMzQ0OSAwIDIyNjY2NjYKKzMzNjAgMCAyMzAwMDAwCiszMzcyIDAgMjMzMzMzMworMzQ2MCAwIDIzNjY2NjYKKzM1MTEgMCAyNDAwMDAwCiszNDcxIDAgMjQzMzMzMworMzMzMCAwIDI0NjY2NjYKKzMzNzcgMCAyNTAwMDAwCiszNzQ0IDAgMjUzMzMzMworMzY2NyAwIDI1NjY2NjYKKzM4NjcgMCAyNjAwMDAwCiszNzc2IDAgMjYzMzMzMworMzMyOSAwIDI2NjY2NjYKKzM4NzYgMCAyNzAwMDAwCiszMzg1IDAgMjczMzMzMworMzU2NiAwIDI3NjY2NjYKKzMzMDEgMCAyODAwMDAwCiszNTcwIDAgMjgzMzMzMworMzEzMiAwIDI4NjY2NjYKKzM0ODcgMCAyOTAwMDAwCiszMjcwIDAgMjkzMzMzMworMzQ3MiAwIDI5NjY2NjYKKzM0ODcgMCAzMDAwMDAwCiszNTAzIDAgMzAzMzMzMworMzQ0MyAwIDMwNjY2NjYKKzM1MjggMCAzMTAwMDAwCiszMjU4IDAgMzEzMzMzMworMzcwNyAwIDMxNjY2NjYKKzMxMjAgMCAzMjAwMDAwCiszMzQ3IDAgMzIzMzMzMworMzM3MiAwIDMyNjY2NjYKKzMxNjEgMCAzMzAwMDAwCiszMzkzIDAgMzMzMzMzMworMzM5OSAwIDMzNjY2NjYKKzI5MDUgMCAzNDAwMDAwCiszNTQzIDAgMzQzMzMzMworMzEwMyAwIDM0NjY2NjYKKzMwOTkgMCAzNTAwMDAwCiszNDU3IDAgMzUzMzMzMworMzE5MSAwIDM1NjY2NjYKKzMyOTAgMCAzNjAwMDAwCiszMzEyIDAgMzYzMzMzMworMjk1NSAwIDM2NjY2NjYKKzMzNDEgMCAzNzAwMDAwCiszMTAyIDAgMzczMzMzMworMzE4NiAwIDM3NjY2NjYKKzMxODAgMCAzODAwMDAwCisyODM5IDAgMzgzMzMzMworMzA4OSAwIDM4NjY2NjYKKzMxMTAgMCAzOTAwMDAwCiszMTY1IDAgMzkzMzMzMworMjY4NCAwIDM5NjY2NjYKKzMwODIgMCA0MDAwMDAwCisyNjk0IDAgNDAzMzMzMworMzA1MSAwIDQwNjY2NjYKKzMwMDIgMCA0MTAwMDAwCisyOTI5IDAgNDEzMzMzMworMjY3NiAwIDQxNjY2NjYKKzI0MTEgMCA0MjAwMDAwCisyODc0IDAgNDIzMzMzMworMjU3MiAwIDQyNjY2NjYKKzI0MjAgMCA0MzAwMDAwCisyNTAwIDAgNDMzMzMzMworMjEzNyAwIDQzNjY2NjYKKzIzNDQgMCA0NDAwMDAwCisyMDI4IDAgNDQzMzMzMworMTc1NCAwIDQ0NjY2NjYKKzE2MjcgMCA0NTAwMDAwCisxMzc1IDAgNDUzMzMzMworMTA2OSAwIDQ1NjY2NjYKKzgwMSAwIDQ2MDAwMDAKKzIxNjg5IDEgNDYzMzMzMworMjYxIDAgNDczMzMzMworNzYgMCA0NjY2NjY2Cis0NSAwIDQ3MDAwMDAKKzMzNCAwIDQ4MDAwMDAKKzYxIDAgNDc2NjY2NgorMTU3NyAwIDQ5MzMzMzMKKzI4MCAwIDQ4NjY2NjYKKzcyIDAgNDgzMzMzMworNDc5IDAgNDkwMDAwMAorMjE4MSAwIDUwNjY2NjYKKzkxOSAwIDUwMDAwMDAKKzM0OSAwIDQ5NjY2NjYKKzUzNCAwIDUwMzMzMzMKKzQ4NjAgMCA1MTY2NjY2Cis3NTkgMCA1MTAwMDAwCis2NzcgMCA1MTMzMzMzCiszMTAxIDAgNTMwMDAwMAorNDk4IDAgNTIzMzMzMworMzI3IDAgNTIwMDAwMAorMjEzIDAgNTI2NjY2NgorMTY0MCAwIDU0MzMzMzMKKzI1OSAwIDUzNjY2NjYKKzE2MiAwIDUzMzMzMzMKKzE0OCAwIDU0MDAwMDAKKzIxMzAgMCA1NTY2NjY2CiszOTcgMCA1NTAwMDAwCisxOTEgMCA1NDY2NjY2CisxODAgMCA1NTMzMzMzCisxNzU3IDAgNTcwMDAwMAorMzM4IDAgNTYzMzMzMworMTk0IDAgNTYwMDAwMAorMTQxIDAgNTY2NjY2NgorMTEwMyAwIDU4MzMzMzMKKzI4OSAwIDU3NjY2NjYKKzE0OSAwIDU3MzMzMzMKKzE0OCAwIDU4MDAwMDAKKzM5MTQgMCA1OTY2NjY2CisxMDI1IDAgNTkwMDAwMAorNzE0IDAgNTg2NjY2NgorNDI4IDAgNTkzMzMzMworNDYwNCAwIDYxMDAwMDAKKzE0NTYgMCA2MDMzMzMzCis2OTkgMCA2MDAwMDAwCis4OTIgMCA2MDY2NjY2Cis0NTM1IDAgNjIzMzMzMworMTMwMSAwIDYxNjY2NjYKKzcwOCAwIDYxMzMzMzMKKzU5MiAwIDYyMDAwMDAKKzIxNzUgMCA2MzMzMzMzCis2MDMgMCA2MjY2NjY2Cis0MTEgMCA2MzAwMDAwCisxODEzIDAgNjM2NjY2NgorNTA1NSAwIDY0NjY2NjYKKzE1MzggMCA2NDAwMDAwCisyMjAxIDAgNjQzMzMzMworNjI0OSAwIDY1MzMzMzMKKzE0MjAgMCA2NTAwMDAwCisyMjU0IDAgNjU2NjY2NgorMjQ0MSAwIDY2MzMzMzMKKzI5MyAwIDY2MDAwMDAKKzIwNjIgMCA2NzAwMDAwCisyMTMgMCA2NjY2NjY2CisyNDU1IDAgNjgwMDAwMAorMzQ0IDAgNjczMzMzMworMjA0IDAgNjc2NjY2NgorMzkyMCAwIDY5MzMzMzMKKzc1MSAwIDY4NjY2NjYKKzM3NiAwIDY4MzMzMzMKKzMzNyAwIDY5MDAwMDAKKzI4ODIgMCA3MDY2NjY2Cis0NTcgMCA3MDAwMDAwCisyMjIgMCA2OTY2NjY2CisxODQgMCA3MDMzMzMzCisyNzM0IDAgNzIwMDAwMAorNDcyIDAgNzEzMzMzMworMTg1IDAgNzEwMDAwMAorMjUwIDAgNzE2NjY2NgorMjczNSAwIDczMzMzMzMKKzMwMSAwIDcyNjY2NjYKKzMwNyAwIDcyMzMzMzMKKzEwOSAwIDczMDAwMDAKKzE4NTIgMCA3NDY2NjY2CiszMjIgMCA3NDAwMDAwCisxNTMgMCA3MzY2NjY2CisxOTUgMCA3NDMzMzMzCisxNTA2IDAgNzYwMDAwMAorMzUwIDAgNzUzMzMzMworMTcwIDAgNzUwMDAwMAorMTQ1IDAgNzU2NjY2NgorMjEyMyAwIDc3MzMzMzMKKzQzMCAwIDc2NjY2NjYKKzM2NCAwIDc2MzMzMzMKKzE5MCAwIDc3MDAwMDAKKzEyOTYgMCA3ODAwMDAwCisxOTYgMCA3NzY2NjY2Cis4NTggMCA3ODMzMzMzCiszODY1IDAgNzkzMzMzMworNjkzIDAgNzg2NjY2NgorMTYwNiAwIDc5MDAwMDAKKzQ4ODQgMCA3OTY2NjY2CisyODIxIDAgODAzMzMzMworMjIxMSAwIDgwMDAwMDAKZGlmZiAtLWdpdCBhL21lZGlhL2NvZGVjMi9oaWRsLzEuMC92dHMvcmVzL2JiYl9mbGFjX3N0ZXJlb182ODBrYnBzXzQ4MDAwaHouZmxhYyBiL21lZGlhL2NvZGVjMi9oaWRsLzEuMC92dHMvcmVzL2JiYl9mbGFjX3N0ZXJlb182ODBrYnBzXzQ4MDAwaHouZmxhYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kYjk0ZDhlCi0tLSAvZGV2L251bGwKKysrIGIvbWVkaWEvY29kZWMyL2hpZGwvMS4wL3Z0cy9yZXMvYmJiX2ZsYWNfc3RlcmVvXzY4MGticHNfNDgwMDBoei5mbGFjCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL21lZGlhL2NvZGVjMi9oaWRsLzEuMC92dHMvcmVzL2JiYl9mbGFjX3N0ZXJlb182ODBrYnBzXzQ4MDAwaHouaW5mbyBiL21lZGlhL2NvZGVjMi9oaWRsLzEuMC92dHMvcmVzL2JiYl9mbGFjX3N0ZXJlb182ODBrYnBzXzQ4MDAwaHouaW5mbwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMzU1Mjk1Ci0tLSAvZGV2L251bGwKKysrIGIvbWVkaWEvY29kZWMyL2hpZGwvMS4wL3Z0cy9yZXMvYmJiX2ZsYWNfc3RlcmVvXzY4MGticHNfNDgwMDBoei5pbmZvCkBAIC0wLDAgKzEsNDE1IEBACis0MiAzMiAwCisxMzg2IDEgMAorMjQwMSAxIDI0MDAwCisyMzIxIDEgNDgwMDAKKzIzNjcgMSA3MjAwMAorMjM3MCAxIDk2MDAwCisyMzM0IDEgMTIwMDAwCisyMzk2IDEgMTQ0MDAwCisyMzc1IDEgMTY4MDAwCisyNDMxIDEgMTkyMDAwCisyNDI4IDEgMjE2MDAwCisyMzM0IDEgMjQwMDAwCisyMjYxIDEgMjY0MDAwCisyMTI0IDEgMjg4MDAwCisyMTUyIDEgMzEyMDAwCisyMjk1IDEgMzM2MDAwCisyMTgzIDEgMzYwMDAwCisyMzkzIDEgMzg0MDAwCisyNDAwIDEgNDA4MDAwCisyMjQ2IDEgNDMyMDAwCisyMjg5IDEgNDU2MDAwCisyNDAwIDEgNDgwMDAwCisyMzM1IDEgNTA0MDAwCisyMjk0IDEgNTI4MDAwCisyMjYwIDEgNTUyMDAwCisyMjA2IDEgNTc2MDAwCisyMTg1IDEgNjAwMDAwCisyMTU1IDEgNjI0MDAwCisyMTE4IDEgNjQ4MDAwCisyMDk0IDEgNjcyMDAwCisyMDUwIDEgNjk2MDAwCisyMDU5IDEgNzIwMDAwCisyMDMwIDEgNzQ0MDAwCisyMDIyIDEgNzY4MDAwCisyMDc4IDEgNzkyMDAwCisyMDgyIDEgODE2MDAwCisyMDk0IDEgODQwMDAwCisyMTExIDEgODY0MDAwCisyMDQzIDEgODg4MDAwCisyMDIzIDEgOTEyMDAwCisyMDI0IDEgOTM2MDAwCisyMDU2IDEgOTYwMDAwCisyMTA4IDEgOTg0MDAwCisyMTM4IDEgMTAwODAwMAorMjE0MCAxIDEwMzIwMDAKKzIxMTEgMSAxMDU2MDAwCisyMTEwIDEgMTA4MDAwMAorMjEzNyAxIDExMDQwMDAKKzIxNTcgMSAxMTI4MDAwCisyMTc0IDEgMTE1MjAwMAorMjIwMCAxIDExNzYwMDAKKzIyMDMgMSAxMjAwMDAwCisyMjM3IDEgMTIyNDAwMAorMjI2MSAxIDEyNDgwMDAKKzIyMTUgMSAxMjcyMDAwCisyMTMzIDEgMTI5NjAwMAorMjA5MSAxIDEzMjAwMDAKKzIwODggMSAxMzQ0MDAwCisyMTIyIDEgMTM2ODAwMAorMjEzOSAxIDEzOTIwMDAKKzIxNDYgMSAxNDE2MDAwCisyMjMxIDEgMTQ0MDAwMAorMjI4MiAxIDE0NjQwMDAKKzIyNzMgMSAxNDg4MDAwCisyMzA0IDEgMTUxMjAwMAorMjI5MiAxIDE1MzYwMDAKKzIyNTUgMSAxNTYwMDAwCisyMTgxIDEgMTU4NDAwMAorMjA4MSAxIDE2MDgwMDAKKzIwMTIgMSAxNjMyMDAwCisyMDExIDEgMTY1NjAwMAorMjA2NiAxIDE2ODAwMDAKKzIwNjkgMSAxNzA0MDAwCisyMTIwIDEgMTcyODAwMAorMjE0MSAxIDE3NTIwMDAKKzIxNDggMSAxNzc2MDAwCisyMTgxIDEgMTgwMDAwMAorMjE3NiAxIDE4MjQwMDAKKzIyNDAgMSAxODQ4MDAwCisyMjk3IDEgMTg3MjAwMAorMjMyNSAxIDE4OTYwMDAKKzIzMzYgMSAxOTIwMDAwCisyMzI5IDEgMTk0NDAwMAorMjI5OSAxIDE5NjgwMDAKKzIzMjIgMSAxOTkyMDAwCisyMzQ3IDEgMjAxNjAwMAorMjI4NyAxIDIwNDAwMDAKKzIyODYgMSAyMDY0MDAwCisyMjY5IDEgMjA4ODAwMAorMjMyMCAxIDIxMTIwMDAKKzIzMDUgMSAyMTM2MDAwCisyMzg0IDEgMjE2MDAwMAorMjQyOSAxIDIxODQwMDAKKzIzNzAgMSAyMjA4MDAwCisyMzY1IDEgMjIzMjAwMAorMjM2MSAxIDIyNTYwMDAKKzIzNzAgMSAyMjgwMDAwCisyMzkzIDEgMjMwNDAwMAorMjM0MiAxIDIzMjgwMDAKKzIzMjUgMSAyMzUyMDAwCisyMzM0IDEgMjM3NjAwMAorMjMxNiAxIDI0MDAwMDAKKzIzMTcgMSAyNDI0MDAwCisyMzA1IDEgMjQ0ODAwMAorMjM2MCAxIDI0NzIwMDAKKzIzMzEgMSAyNDk2MDAwCisyMzMyIDEgMjUyMDAwMAorMjM2MSAxIDI1NDQwMDAKKzI0MTcgMSAyNTY4MDAwCisyNDM4IDEgMjU5MjAwMAorMjQwMyAxIDI2MTYwMDAKKzIzODYgMSAyNjQwMDAwCisyMzgyIDEgMjY2NDAwMAorMjM1MCAxIDI2ODgwMDAKKzIzNTUgMSAyNzEyMDAwCisyMzgzIDEgMjczNjAwMAorMjM4NCAxIDI3NjAwMDAKKzIzODMgMSAyNzg0MDAwCisyMzczIDEgMjgwODAwMAorMjM3NCAxIDI4MzIwMDAKKzIzNDcgMSAyODU2MDAwCisyMzUzIDEgMjg4MDAwMAorMjM4MSAxIDI5MDQwMDAKKzI0MDEgMSAyOTI4MDAwCisyNDAxIDEgMjk1MjAwMAorMjM4NSAxIDI5NzYwMDAKKzIzODIgMSAzMDAwMDAwCisyMzI4IDEgMzAyNDAwMAorMjMwMyAxIDMwNDgwMDAKKzIyNzIgMSAzMDcyMDAwCisyMjcwIDEgMzA5NjAwMAorMjMxMiAxIDMxMjAwMDAKKzIyNzMgMSAzMTQ0MDAwCisyMzMwIDEgMzE2ODAwMAorMjMzOSAxIDMxOTIwMDAKKzIyOTYgMSAzMjE2MDAwCisyMzE3IDEgMzI0MDAwMAorMjQ0MCAxIDMyNjQwMDAKKzIzNTMgMSAzMjg4MDAwCisyMzQ2IDEgMzMxMjAwMAorMjMwMyAxIDMzMzYwMDAKKzIzMDggMSAzMzYwMDAwCisyMjg3IDEgMzM4NDAwMAorMjMxNiAxIDM0MDgwMDAKKzIzNjcgMSAzNDMyMDAwCisyMzM1IDEgMzQ1NjAwMAorMjM1MCAxIDM0ODAwMDAKKzIzOTUgMSAzNTA0MDAwCisyNDA4IDEgMzUyODAwMAorMjQxMyAxIDM1NTIwMDAKKzI0MTUgMSAzNTc2MDAwCisyNDY4IDEgMzYwMDAwMAorMjQzNyAxIDM2MjQwMDAKKzIzNzIgMSAzNjQ4MDAwCisyMzcxIDEgMzY3MjAwMAorMjM0MSAxIDM2OTYwMDAKKzIzMjggMSAzNzIwMDAwCisyMjczIDEgMzc0NDAwMAorMjI0NCAxIDM3NjgwMDAKKzIyMzMgMSAzNzkyMDAwCisyMjI5IDEgMzgxNjAwMAorMjI1MiAxIDM4NDAwMDAKKzIyMzYgMSAzODY0MDAwCisyMjE3IDEgMzg4ODAwMAorMjE3OSAxIDM5MTIwMDAKKzIyNTEgMSAzOTM2MDAwCisyMTkyIDEgMzk2MDAwMAorMjE5OSAxIDM5ODQwMDAKKzIyMTIgMSA0MDA4MDAwCisyMTkwIDEgNDAzMjAwMAorMjEwMiAxIDQwNTYwMDAKKzIxMjAgMSA0MDgwMDAwCisyMTY3IDEgNDEwNDAwMAorMjAyNCAxIDQxMjgwMDAKKzIwMTAgMSA0MTUyMDAwCisyMDY3IDEgNDE3NjAwMAorMjAzNSAxIDQyMDAwMDAKKzIwNTEgMSA0MjI0MDAwCisyMDEyIDEgNDI0ODAwMAorMjA2NiAxIDQyNzIwMDAKKzIwMjUgMSA0Mjk2MDAwCisxOTg3IDEgNDMyMDAwMAorMTk3MiAxIDQzNDQwMDAKKzE5NjYgMSA0MzY4MDAwCisxOTk5IDEgNDM5MjAwMAorMTk4NyAxIDQ0MTYwMDAKKzE5MjIgMSA0NDQwMDAwCisyMDIwIDEgNDQ2NDAwMAorMjA3MiAxIDQ0ODgwMDAKKzIwMjEgMSA0NTEyMDAwCisyMDE3IDEgNDUzNjAwMAorMjA5OSAxIDQ1NjAwMDAKKzIwNjQgMSA0NTg0MDAwCisyMTA5IDEgNDYwODAwMAorMjA5MyAxIDQ2MzIwMDAKKzIwOTAgMSA0NjU2MDAwCisyMTQ4IDEgNDY4MDAwMAorMjE4NCAxIDQ3MDQwMDAKKzIxNzkgMSA0NzI4MDAwCisyMTUyIDEgNDc1MjAwMAorMjE0MyAxIDQ3NzYwMDAKKzIxNTkgMSA0ODAwMDAwCisyMTIzIDEgNDgyNDAwMAorMjEyOSAxIDQ4NDgwMDAKKzIxNDcgMSA0ODcyMDAwCisyMTkyIDEgNDg5NjAwMAorMjA1MSAxIDQ5MjAwMDAKKzIxMTYgMSA0OTQ0MDAwCisyMTI0IDEgNDk2ODAwMAorMjA4OCAxIDQ5OTIwMDAKKzIwNzMgMSA1MDE2MDAwCisyMTQ2IDEgNTA0MDAwMAorMjEzMyAxIDUwNjQwMDAKKzIwNzMgMSA1MDg4MDAwCisyMDU5IDEgNTExMjAwMAorMjA0NCAxIDUxMzYwMDAKKzIwMTIgMSA1MTYwMDAwCisyMDM0IDEgNTE4NDAwMAorMjA1MyAxIDUyMDgwMDAKKzIwMTMgMSA1MjMyMDAwCisxOTgxIDEgNTI1NjAwMAorMjA5NCAxIDUyODAwMDAKKzIwNzYgMSA1MzA0MDAwCisxOTY4IDEgNTMyODAwMAorMjAyOCAxIDUzNTIwMDAKKzIwMzEgMSA1Mzc2MDAwCisyMDIwIDEgNTQwMDAwMAorMjAxOSAxIDU0MjQwMDAKKzIwMzAgMSA1NDQ4MDAwCisyMDE1IDEgNTQ3MjAwMAorMTk2MiAxIDU0OTYwMDAKKzIwNzAgMSA1NTIwMDAwCisyMDg3IDEgNTU0NDAwMAorMTk2NCAxIDU1NjgwMDAKKzIwNjkgMSA1NTkyMDAwCisyMDM0IDEgNTYxNjAwMAorMTk5NCAxIDU2NDAwMDAKKzE5ODUgMSA1NjY0MDAwCisyMDMwIDEgNTY4ODAwMAorMjA2NiAxIDU3MTIwMDAKKzE5NTQgMSA1NzM2MDAwCisxNzMzIDEgNTc2MDAwMAorMTY0OSAxIDU3ODQwMDAKKzE2NTIgMSA1ODA4MDAwCisxNjMxIDEgNTgzMjAwMAorMTY1NiAxIDU4NTYwMDAKKzE2NzIgMSA1ODgwMDAwCisxNjY3IDEgNTkwNDAwMAorMTY5NiAxIDU5MjgwMDAKKzE2NzIgMSA1OTUyMDAwCisxNzAxIDEgNTk3NjAwMAorMTY1MSAxIDYwMDAwMDAKKzE2NzQgMSA2MDI0MDAwCisxNjk1IDEgNjA0ODAwMAorMTcwMiAxIDYwNzIwMDAKKzE3MDcgMSA2MDk2MDAwCisxNjk0IDEgNjEyMDAwMAorMTcyNyAxIDYxNDQwMDAKKzE3MzAgMSA2MTY4MDAwCisxNzA4IDEgNjE5MjAwMAorMTcwNCAxIDYyMTYwMDAKKzE3MzUgMSA2MjQwMDAwCisxNzU4IDEgNjI2NDAwMAorMTc1MyAxIDYyODgwMDAKKzE3NDggMSA2MzEyMDAwCisxNzYzIDEgNjMzNjAwMAorMTczNyAxIDYzNjAwMDAKKzE3ODMgMSA2Mzg0MDAwCisxODM5IDEgNjQwODAwMAorMTg2MSAxIDY0MzIwMDAKKzE4MzIgMSA2NDU2MDAwCisxOTQ3IDEgNjQ4MDAwMAorMTkzOSAxIDY1MDQwMDAKKzE5MjYgMSA2NTI4MDAwCisxODk2IDEgNjU1MjAwMAorMTkwOSAxIDY1NzYwMDAKKzE4NjkgMSA2NjAwMDAwCisxOTAwIDEgNjYyNDAwMAorMTg5NiAxIDY2NDgwMDAKKzE4ODMgMSA2NjcyMDAwCisxOTAzIDEgNjY5NjAwMAorMTg5NSAxIDY3MjAwMDAKKzE4NjUgMSA2NzQ0MDAwCisxODc4IDEgNjc2ODAwMAorMTg4MSAxIDY3OTIwMDAKKzE4NjEgMSA2ODE2MDAwCisxNzkxIDEgNjg0MDAwMAorMTc4NyAxIDY4NjQwMDAKKzE3OTggMSA2ODg4MDAwCisxODExIDEgNjkxMjAwMAorMTgyNCAxIDY5MzYwMDAKKzE4OTUgMSA2OTYwMDAwCisyMDc5IDEgNjk4NDAwMAorMjAzNCAxIDcwMDgwMDAKKzIwMzggMSA3MDMyMDAwCisyMDE4IDEgNzA1NjAwMAorMjAzMCAxIDcwODAwMDAKKzIwNjcgMSA3MTA0MDAwCisxOTgyIDEgNzEyODAwMAorMTkxMSAxIDcxNTIwMDAKKzE5MDQgMSA3MTc2MDAwCisxODc0IDEgNzIwMDAwMAorMTg3NiAxIDcyMjQwMDAKKzE5NDQgMSA3MjQ4MDAwCisxOTc3IDEgNzI3MjAwMAorMTk3NyAxIDcyOTYwMDAKKzE5NzkgMSA3MzIwMDAwCisyMDEyIDEgNzM0NDAwMAorMTk2MSAxIDczNjgwMDAKKzE3NzMgMSA3MzkyMDAwCisxNzgwIDEgNzQxNjAwMAorMTgwMSAxIDc0NDAwMDAKKzE4OTIgMSA3NDY0MDAwCisxODY5IDEgNzQ4ODAwMAorMTkzNiAxIDc1MTIwMDAKKzIxNTQgMSA3NTM2MDAwCisyMjI2IDEgNzU2MDAwMAorMjE1OSAxIDc1ODQwMDAKKzIyNTMgMSA3NjA4MDAwCisyMjg2IDEgNzYzMjAwMAorMjIxNCAxIDc2NTYwMDAKKzIxMTEgMSA3NjgwMDAwCisyMDI3IDEgNzcwNDAwMAorMTk5NCAxIDc3MjgwMDAKKzE4ODIgMSA3NzUyMDAwCisxODg3IDEgNzc3NjAwMAorMTk5MyAxIDc4MDAwMDAKKzE5NjIgMSA3ODI0MDAwCisxOTgyIDEgNzg0ODAwMAorMTk2NiAxIDc4NzIwMDAKKzE5NjIgMSA3ODk2MDAwCisxOTI4IDEgNzkyMDAwMAorMTg3OCAxIDc5NDQwMDAKKzE4NTcgMSA3OTY4MDAwCisxODg1IDEgNzk5MjAwMAorMTkxOSAxIDgwMTYwMDAKKzE5MDQgMSA4MDQwMDAwCisxOTA5IDEgODA2NDAwMAorMTkwOSAxIDgwODgwMDAKKzE5MzMgMSA4MTEyMDAwCisxODI0IDEgODEzNjAwMAorMTc1NiAxIDgxNjAwMDAKKzE3MzMgMSA4MTg0MDAwCisxNzA1IDEgODIwODAwMAorMTc1NSAxIDgyMzIwMDAKKzE3NTYgMSA4MjU2MDAwCisxNzI1IDEgODI4MDAwMAorMTc2MSAxIDgzMDQwMDAKKzE3MzYgMSA4MzI4MDAwCisxNzA2IDEgODM1MjAwMAorMTY2MiAxIDgzNzYwMDAKKzE2MDQgMSA4NDAwMDAwCisxNjEzIDEgODQyNDAwMAorMTY5MiAxIDg0NDgwMDAKKzE3MzYgMSA4NDcyMDAwCisxNzc5IDEgODQ5NjAwMAorMTc2OCAxIDg1MjAwMDAKKzE3NTggMSA4NTQ0MDAwCisxNzA4IDEgODU2ODAwMAorMTY0MiAxIDg1OTIwMDAKKzE2NDUgMSA4NjE2MDAwCisxNTgxIDEgODY0MDAwMAorMTY1MSAxIDg2NjQwMDAKKzE3MzEgMSA4Njg4MDAwCisxNzQzIDEgODcxMjAwMAorMTcxNyAxIDg3MzYwMDAKKzE3MTUgMSA4NzYwMDAwCisxNjQ2IDEgODc4NDAwMAorMTU1MSAxIDg4MDgwMDAKKzE1NjMgMSA4ODMyMDAwCisxNjQ5IDEgODg1NjAwMAorMTc0MiAxIDg4ODAwMDAKKzE3MjQgMSA4OTA0MDAwCisxNjc2IDEgODkyODAwMAorMTY2NCAxIDg5NTIwMDAKKzE1ODcgMSA4OTc2MDAwCisxNDk3IDEgOTAwMDAwMAorMTUwMyAxIDkwMjQwMDAKKzE2NDQgMSA5MDQ4MDAwCisxNjU4IDEgOTA3MjAwMAorMTY4MCAxIDkwOTYwMDAKKzE2MTEgMSA5MTIwMDAwCisxNjk0IDEgOTE0NDAwMAorMTY2OCAxIDkxNjgwMDAKKzE2NzcgMSA5MTkyMDAwCisxNjA0IDEgOTIxNjAwMAorMTU2NyAxIDkyNDAwMDAKKzE2MzkgMSA5MjY0MDAwCisxNTUyIDEgOTI4ODAwMAorMTQ4NiAxIDkzMTIwMDAKKzE0OTQgMSA5MzM2MDAwCisxNDgwIDEgOTM2MDAwMAorMTUwOSAxIDkzODQwMDAKKzE0NTcgMSA5NDA4MDAwCisxNDIzIDEgOTQzMjAwMAorMTQ1OSAxIDk0NTYwMDAKKzE0NDQgMSA5NDgwMDAwCisxNDI0IDEgOTUwNDAwMAorMTQxMyAxIDk1MjgwMDAKKzE0OTggMSA5NTUyMDAwCisxNDU1IDEgOTU3NjAwMAorMTM5MyAxIDk2MDAwMDAKKzE2MzggMSA5NjI0MDAwCisxOTE5IDEgOTY0ODAwMAorMTk3OSAxIDk2NzIwMDAKKzE4OTQgMSA5Njk2MDAwCisyMDAyIDEgOTcyMDAwMAorMjA2MiAxIDk3NDQwMDAKKzIwOTggMSA5NzY4MDAwCisxOTE5IDEgOTc5MjAwMAorMTczOCAxIDk4MTYwMDAKKzE4OTAgMSA5ODQwMDAwCisxOTcxIDEgOTg2NDAwMAorMjQyOSAxIDk4ODgwMDAKKzE4NjEgMSA5OTEyMDAwCmRpZmYgLS1naXQgYS9tZWRpYS9jb2RlYzIvaGlkbC8xLjAvdnRzL3Jlcy9iYmJfZzcxMWFsYXdfMWNoXzhraHouaW5mbyBiL21lZGlhL2NvZGVjMi9oaWRsLzEuMC92dHMvcmVzL2JiYl9nNzExYWxhd18xY2hfOGtoei5pbmZvCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY2ZTU0ODAKLS0tIC9kZXYvbnVsbAorKysgYi9tZWRpYS9jb2RlYzIvaGlkbC8xLjAvdnRzL3Jlcy9iYmJfZzcxMWFsYXdfMWNoXzhraHouaW5mbwpAQCAtMCwwICsxLDEwIEBACis4MTkyIDEgMAorODE5MiAxIDEwMjQwMDAKKzgxOTIgMSAyMDQ4MDAwCis4MTkyIDEgMzA3MjAwMAorODE5MiAxIDQwOTYwMDAKKzgxOTIgMSA1MTIwMDAwCis4MTkyIDEgNjE0NDAwMAorODE5MiAxIDcxNjgwMDAKKzgxOTIgMSA4MTkyMDAwCis1NDYyIDEgOTIxNjAwMApcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL21lZGlhL2NvZGVjMi9oaWRsLzEuMC92dHMvcmVzL2JiYl9nNzExYWxhd18xY2hfOGtoei5yYXcgYi9tZWRpYS9jb2RlYzIvaGlkbC8xLjAvdnRzL3Jlcy9iYmJfZzcxMWFsYXdfMWNoXzhraHoucmF3Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNmYzRhMTEKLS0tIC9kZXYvbnVsbAorKysgYi9tZWRpYS9jb2RlYzIvaGlkbC8xLjAvdnRzL3Jlcy9iYmJfZzcxMWFsYXdfMWNoXzhraHoucmF3CkBAIC0wLDAgKzEgQEAKK2tvZ0/HxdjVSnZDdXNY09VJdkp+fUt1WV3ByMT09PTK2ElydEJSVPP5x9rG1lTF+ezs4//VT2Vifdn+7enr4cFbc2dnRPTl4ODg5cZeTExLf2VaUUnZ9/HzUHZ4bm1wVeTt5P7cYGgXFGZ2+ejv5ufDdWdtf3Rld1hb319Y2MTUz8/YwVjQ1nllf2dxUtv45f/h+FRHZXNGfE/C9cnQWd9ZdcLm75XmyEprEBFrd/jrkJfnx3diaW1M+eTm7OTYQ3p8eWJww+Xj5+Ho+Ft2eHhKQvT/9f70XXFnYXVf3fvg4+XCxlZlfFXBVE9wSXBgZHHQ9MH35NhMQkZLcmV2dHlzZ2Z9c0/UQnFS3NxGcdzNTk5NcXdawvvn5fv02XNpYdj74+jq7f1bZWJm3OTpl5Xo7/hZeGR4fEr35+TolOri2HN4Z2ZmecT82VBMZGZ7T9rM9vHRQHFgb3pAzuX/y9pffWJsQ/Dl5/ndRmZpbWJkW83k5VZGSHJ8fGR2XNjHX0Xb1klwYX7Q9vrj5/BSfH9gb3Dx7ZTt+PREZG5rZN3kl5aV6+791XBwQ0TY9vHNycT28d1bx8NTf3tS09zMz1TcU1fUUNXOycjVdkZFVvf4zV1xS3JjZ1Xk7efG1Ehga25jfnfD+8lTQUN3eGNmZHh+e2ZnZ3xMZGZ80/XF1fb30E1/Z2dnRufpl5GRl+FCfUzc7ZeTnJOV7dR4fHX05fXx/NLF28DxU3VccWZne1jEQXNLd1tXTV5Yc3ZyYX1FzeD48f9Tcn1gZXJP5eng5/ZcdGoQamTZ4eb6zHZmb2pgQ9Hz8FNOc3p/eGNnYH3Z38Hn5OfIeHp8QPzk5eL/2FVzf0jW5O7o6uLm4fjYXlHE9vfCxvHy89jQzM7Pw0R5Z2ZzRNny/ubu58dfWt9XTXZ9T9NYRNzJyFd4YmttTN/+5cBOZGkXExVz1tvdTXZOf2RjenVHUM79/PnwUHZ+ZUDM5OHk//vC1dN1UPD3z8b04P/QXXljZHDN7e3v4fBcZGFFyvrm+dBEWl5UxuCU6uT1WnVyZHxXxPrj65fg/PBQe2FjSMzw+cRLc2NraRVid9bSV17UfG5rahVrYUHNw99dU2Rsbn3F9//6ykF1fnJyWPzn9cjD/ef95OTx10RFx9XP4e3gykZCREnW1sbC293dU1XT3Vx1SkJcX11VXkBQ2Pj6zMvMRH1nSOXtlZbq7+Tx+v/x5efm5P7h7uD7235rFWJayfrs7vBnFh0QF2tnc3lkbxQREhFvYXFX1NFGfGEVF2llUsD3//z3SWRlcETdwcvXd3RIXMbB9+f48Mfd21d2fGZlVfLl+/vn5VFKS1P24JWX78NAc3ly1OWUlOzj5OTj5vfA1fDk4eiXle/7wvbA2sTFU1hxUsPc3FpxfXtjYmx6TkpzeW8Va2BxX1VBe2lrFxRjSEB9ZmRf2sjN1FdRckHX383Iz15+TsbR2vbx/f7z91pD0fDm5fT1+cJOdlzXV8X44eDi5UdmbWJF5euRkJGV/MjGQdPk7eji4Oz3UFNTzPdRUMTP2sXC32doYmV8dkVxeGNua29tfEZGd2R8dWZoZHpzcEtQS39HU0F0YWRNwtvEwchGfHRc8u2V4MxZVlPf38PLzcLYy/j7wMrSfW1hSNnO5+zt4M5NfHFySlrEx8vk4eTl5PHS9ePv6JSX7v1fS1/P99jYwtpT2MVRSUV3ZWRkeHh9f2FvY2R+c3p7Sn1uExJqbXhQ9v7y3EdKSV7F8eXw0vTNUVpERtb15efN0NtIZGxpe15c2/rl80R5cmJufVtVwN704+bn+1fXx8TtlJedk+n6w8jm5efp5Pn918HN1N7zztx3ekVeSFJOd0F9cEFzeH5sahVqfEB3XE96eHp0XHNmZWZ+S0j3+8NRQU9Y1vb48vXHW0N2Z0nZ9vnzx9BGddHWQFLcVNdUx/bwUHlndnFN9v3+5+Dt4d5AcHNOV8vl5Pr9y/HBzOX8xP76/srN1lTX3fP55vrK01p4ZXBe31XW21hLUnZ/TVdXydNYR0pBfmBgYmJY8OX5xtNQZWF2cdH/ycLPcWNmZGZlZX9zStJVcmxqaGdN/eHJ1dd2TXdsZlBVwPPG2sD+7+vj+sDa8/rj4/n44fri7Ofg48jN8NFMXcX45fTxyP7z0d/DTtfJ2PdbZnlyYH58Z2ZLXtrSTkpIQHN8fH9qYXdxdEh82tlkTHFmcFhf/vdTcXl+enfN/P/t/VBkaGlzWcnm/cXFysj+3nd30FRV8Pvzx9FGWUpwQ/Pz9sxFSVzS8+Dl5ebj/cvOWHXFzMP/8Pzj4PdfeXl1z+2UlOdGcnxlTFFEz/jb2N5/ZmV/S0J3c3x1QnRCfWBySXxZWUL01n5zYGplQVTQWkJNRt1WXs1YdVZGd1tzfEBPQtZMctjJ8fjOQFtSzv7/+tZE2NTF4+HvlODyzlzG5+Tj/tZAWdr/5+zj8vPVZWB6ekXY9/jk98XO38ZVdXBG2frk90B+dnB2195W9sxQS2VmcEhJcnl2dUx8YW1rExEUamBleH1/Y21tY2RT/+flyUh4eX7X8fXM5uD7/vP95uDt6u/n+ebh+vD95ePo75WU7ePgydLFxfDl5OX6wEJydnB5eH1JXN7K8lNnZ3J0Ud7f9vj30VB3c1/KwkNzZWd6entwZWV9e2R6ZXxzYGxjZ2xoYXthYGJqFWxhfn1nc9L+4Ob22sXH8+Tl/efp7uDh4ePo6urq6ePs6O/m+f7l5+Hi7uP5/8RNfXxlZXJxRER9YWF+fH9JRNz1+/rPfGxhen53R1fN9M3aWX5zTEdDRNFQRUZOdnx/dd7N2thbc2Rvbm1pFGhgYWJpFRYWFWlhZ2RwX9VQREtN0f3i6ezt6pGWkZCTnZ2cnJ+SkJCW6ODn5+Dj4fvJdWdncEnfzt3W1FJGfGNgZH5zdU/Uw/b2wVB9c1fe1dxRRVTT3srfQE5zf3l5ZGRmZmFjYmJ6X1xERXxnZmBmfGBsYm5uaRVrbmxnfHNwQlPD3N/eXtHP8Pnk8/3h5/rk5Ozu65aTkJeU7ujo6pSVlpGXleTb1NrEw/TL8/H/+dx0fXBczfPx+f3MzFRWTXNJX0x1S3x6emRnbWlvbGdkYGwVEREVbmNmZHpmbGkVFGl+TFNWRVjR3dVYQEdU8uTl98bGz8TC8v3w8vP1ydjR3PfL9vz8/P/m4eX2zsj0/Obj4+Pp6pXv/vnh7ebl5frl4O7v5/Py5+bk5/3z9c/CVX1taBUVaG1vahVqaBUQFhVpbmpqFhYUb3xMdkJTVNdfc3tkfVnX31Jc0VZQWXFwTdz55/bH9fz65OHn+P777Ojj/sTc0VPQ1Njx5ef+V3RHWsnm4O3m+Pr000dG2/fz5eHl//P8+fTx8Pvs7Oji/vLLysBedHpnenl/cGdhfHtwc2R+Z2xpFBcTHRAXa21vYmFtbWJvYmF3197DQXRFcVrfRF7TxuXn/fD08/b3/NlQyv7h4vvy8vD+5uDn/uT4++fx9Pzx+u/s7O7ole3zRHpcw/Dt5M7I0VfHVNH85OPi4+H1y8VYWHFkfHFwTHVhahRuZ3RyY2BuFxUXF2tteHllYWlsZmNhZmltfn1GQH19ZGRke3xyVvPk4OXbV9jO/+Tk/s/w8/b82cXz+umV4//x9cv198rw4eLj6fvP/vv7/fTLyfHKw/fP2v3l5ef99vrk7ejj8V9RVVvRU3Fxcnl0dH58d0Z3YWoRFxcWahcSExEUb2NhYWZkYmNmYnHBwMjYUdHRUNbUTEpRzvz7915OSnBcxcrPzfXZVllG1P3m7OP8+efn4ub55+bi7eno4Obm+/HMx8P8++b698JCWtH0/vX++vnm/dZbUtre0V5JZ2BibHhnZnl9R3VnYWNgYWFgYWZleX5IfmRzSl1eTnBldkhzcXdwe2d7SXdzd0lU1k5/ZEnfxPP311tS3v/n/vT1/PLCyPf74uHm5Pz+/OTol5Xh4+Dn5Pry+pWVl5aU6OTm5uflyfX0wsd3YGJ8f3x0Z20UFxRoYWtrY2RxZnh4dUR5ZGluYmR1WMV1c3FhfGV+dl/J2t5DfmNgT9f23VjUdkV2e3xwUFHKzUJxfVpdx83L5fnh5uTg+uLj4+3n5uTn4uns4O3n4Ob45v35+vrlwFNf9ePv7OH+VX95fF9GQVRfSW4REhdnfUNCcHB4ZGFkfnp8cEF0ZGdlU0R1T3xweXh8RlJN0sH0x0xxedbJ9MxaW39kYWVGS1pc3cFacHrXysr9xc9USVTT+vnw+fjlz8Pe/+Pj7+fh4fH3yebt4+Lg7OT02/Tt65Xj5PJX1lbf29bTUtJYeG1obWBlYWR1f3hkdkB2fGRwdGRtaWJ7dXlne2NjZnxFUcPUX1hyf3te8OX5UUFwYWZ/VdPRREDWSnJ6dMz18/XCztnawP/l5uPn4eTk/vbh4+7u4OHl5+Tt7ubm+/jxxl1B8/n/+NnWQFtbUvfAxMdQd31ka2FzTMNQdX97eXPd1URHc2dgYGlnQXRNcWJra2luckNJWHVyc3Z4dc738vZQSElCfUhBc13e3NLVc2V0TvXj5uXyw1Da8cf0/fH9/85Q8ubi6uL4+ubn4uvi7ez68cr2wfjh/+TJdn5+eXfI9/T900dMcGBhd3bdwUBCdmRifnRz1dFZXVxxZHx6dkR6ZGdhYmJnY3lDS3Rwe2N0UtH3UEF2eGdmQkpMQH1/e3pjeV/A4Of99/H8/e/u7ez6/czM1N355O3g7evrlezr6+Lv4+D788VSzPb7/tpacn1lc1NWxNFUTX5haXpMwPP1xkVNfXJBQE1CSEhxcXt+QFPVQ0xwcmRsY2BgYGR6c3BkZUfRxNFGcmBjYnhIcHNEWExKdXXD5OPp4//Dw1XW8Pr5+f3C00J5QMn0+uzr7e3h5+3h5+Po7uPi8vT6/vzaTWFme2RC01BE3MvaxEh229LS1dpCfEp/QVTU2cD3TXF+YH1zR1TWQmFkb29gYWVlRkN1fWJlS9XBwsR0TXZ0WnB4ZHFJeGVie3VC28H9xMD3yfv7+OTl5/HAXEff2vj45+T65/vj7+/i7+vp5vLHysPxzl9xbGdnf3Re3dr3/ffUXtP95+Tx+d1HeHh0R111UVp5bG5pY3JbQ1B2emRke35bcUfQ13R5Z2VC1ktAWnN3dF1LU3VD3FJ2ZX1xXvD1xMRHTE3d0+Xs+uXJ1ExPUMLj7OTn9VNGyf/77eTv7+TLwfH94unl/VdyZX9Icc3I9c5WS3DV3vbj+/bZfGBgSV3D9MnMXHJkdU9extrVT2djYXF1QdLRVHBjFWppZVbQXnZmbWBK0sDJzd9KZmtmStH88/PZfWxvcMb67+zs/NNCU9LE4Ovq4PHXWsX84JWVlpbu/NrN9efg5PZbZWJmdkXD9c7GSn5+TNf04ODzVn1kZ3fZ9/RNeGJvaW97RvD723dgaxRuc1rb19FeeGIVYHfb+MhccXxzfNn+7eL+9NrYR1zF9Pv3X3B7ZGBN9fPwyc3e09Ha8fvj4vBYdkBAX/b+5uXz/Pz33snh4Offcnl7f3DL5ufy2sbdVNzE/v3480FyeHFL2fDL3kpOTXVLd8Xxydx7Zm1sYmVDR0JLdHxmYXtLTHBAfWdjZEtW2MfaUkJDXNbTxdjT3E9/ZXlL3vj8w1FZUF1T9+Ds4uPlw0ZNx/Lh5uHm8vX38/jh7eD+yNdMe31x2/3Jw97I9Mn2+OTwxc3EQ3pxdEVZZXh7eX9+Q0bRwV1Cc2Vien9y3UZyZWd/ZHFE2PFEdEF2Z2RNU/b019ZDX9z55vzn8NhaeWdnd3dXw0F2fE9c1ffy7ebD3V9AQtLO8OXyzNbWxPLk++Tn8MzT0lTbz/Ph5cNAXMDw/vrj4/zZWV51Q9zL/cBbeGFkd97w5+fxRWNpaWJycUFJe24UbHhC0NPSRHlnenR9TFLT0k54Y2Va3fH3w8vFW3VBQtHbXVFMcGd418rm7e3j/N7W9fL+4u3v5s9YTtz04e7g5/7DXkJHRtvCwtlAfmZw0f7h5fj1VUxO1NTNydPXc2ZgZUTa//PI1k53fHVGWVB0cHptaW97R8FVR0dCWV/bwtrG3NtFeXp5Wt/85OT+w9VERl/RxlZHcmBsb3rV++bl899FdUjRzfXP8cB1e3hG0/Pn5+f88eX55ebg5vvyz8bawPLn+sdV1UdF0cnl+vTc0XRkZX9ZzPH399p3cUxzSEFDfWVsFhdqb3LVQHdIcnhwfV3O3lRWWHlld03Q8czR0nV4X9zC/OTy0Vt4fndw1//+z8LIyuXk5O3s5fX310hSUdL9+fX38sD0+fzl5P7N0EVxQEh33PbXSnRydFXb8uHl3FFAemBnc9L2xsv2213Q0VzX1HR9YGpqaW5vcEp8d0lexvT85+fxys7AxtDV18LYQUdCdFrHw97eX0t+ZWV4eGVO0VZFRlzH2tzL+vjN1VJNcHxwVPDxyvnk+uXn7e3m+fDy+f33zcL3zVxNWFffxfX1yNxB18LZUlzS0lBGWMff0sH3z1FOeWRhbW1vbG96cWd6c0pW29zewVJ1RkZIeH9JRF90T1JHW93aV9JQc0tQVNva2/f99sn+5ebh4e3i5/fE9tF2d0hS2V1ExMLB/vr6+cn19PHP3t9dTnBzcndDSFfY3c703Vjd1lhTUNDfV8DE1F3WzsHSQEpxeWRjZH9lcExHQ3VM3NNBXNPf28POwtVYSXFwc0TX0sbF3VTXS3BAQUh0SE93QN/Gzcf0/f7n+vDT2MBPdnFd3t7Q1czK8P//+vz99v/n8PXw/cReX1DW0EVVV9fSQEB0VMTX2N7aVdjCV8/Y2MXd301xeH54YmFkent6fmR7cnBHRV3W3NxdxdtdU09xeH9+cFNb19LPyldaQlfNzsj38/3z9sHw5fjn5Pnxy8DU1lTW2tvM1dVVXlFeQVvcwsba0MPKUkdOd01IT3dydUBGUsTczM3B/vry9srD29FS2PDywN1VSHphZ3p3dXRCTXZ3T0hLX1LS0lfRU1TezcPWUlldWnd9f0VCTEdIQExCRV9SW1BHQVxQ0sLz9vPyzsLcU9XD8PfDVFTDzsTM/Prk4fjw/PD85Pr1291TTnZxQ1NbWdBQXdPQ097Jzs3aW05T1tDYV1hXWHdweWR4cH1+fXx4fHx6ZHpzWkB3SlXc0srKzNldQkNBRl9QU0VNTFzZ2dLA8/D0ysb3++Hj5/r7/sJXW0Rf199TTndAUFXfxcnx8/HM3tjd093H9cnFVkFzdklwdEtaRkNR3NjE9P78y93ay/3yzNtVU3Rxcn10Q1pNdn1/fHNLR0ZV3NBSd3ZZ1sTbzvDfTnRMQE1BX1N3cXB9eWR6d1JW2M3NyvfwzMXMw8PE11Tbw9vExNnXU1vExdDP/Pnz+Pv++Ofg5ub9xldxdE1HQNHTUdFeWFxW3Nr28MLf3MTLwV7bz1t1Q3FnYWNnZGd4eXN2dHV0dU5wfEt3fELT2vXy9dRCdUBfX1bGwcTRXnVzcUJR2sv18/zx/fzy+uX88v3N2VVUVVhBTnZ0X9LY3d/dUkRT3d7G8f3z8sjYVFtZW1BU0tPb0EN1d0/Xzf/h5/n88vbK3NjDw9hTSH9nYGdleHxzcENKdkFKSkNbX1fdyfPL3l1AdH58TFNT1F9AWXFycH57dNHO98HBw8TEzcDJ8PL93U9HS1jc2snw88nA3NdbXFTHzMn9/Pjz8fjy9MDWUVXY39jdVdRRQUBfUMbJ9cTQ0lfE9c3T28/MXnF/ZWBsYGRle3N3cnJ/fENGUFXZy8BX1dJXxdJSR0xR0Vda195dRXRGX9Lz/v/8yd31x9HDyPP4/c3HUVhfQF9Q0N1fQ1hDd0RAXcLbxs/GXl9Q0cjQVNbBxdfc3NbRx9Ze1FTZ9PHw8MHK/vL98fDwysRCZGR8eXxMXl1Pc3lwfXZBQVhe11VATHd0XNFRWk51R0FMQERZV9NTTUJRUkHS2lfRwvHyy8L3zcfa3tPY39DGw/bAQdddUd3Sx9jY1MDWU9ZRwfby9s3U0cRUw99UxNjc0NVe2cTJ9MPOzc/a3FHV3EhCd3Nye2VlfWV9ZWNgYHl3SUfX0d7J2MvD2PH/zNRFdVNaW1FQX11cSUpxSl3Wzsz2+eX/+Pv08vDC3FZbUF1IUNnd1UN0cHRQ2FXd3VHHxtLW1NbMzVlOd3VR39La9uXlyNrQXdPZwvbw8f7wzcvN2cTSQE5OdnB5fnd0dHR9fnx0R3V8dkxCW0ZGU9jB98NBdH99Sk1HV8TB0V5DQkTQ2dDYzcXS0N3JyNrw+PP29MHQUF3a98nGUlbLxNnSRVnW19vc1vf/wsfUTUFZVdnfwfDM3N9IckN1WtjL+P7Z3sfZyMvaxtBSVXFlf2dnfWdhZGd/SnN2fGVD0NzAzfbl8svz00dfS0DT0cbLU0JMdEBSVNjAyvPF2ffK/eTxw/Pw8fRadkh1WtPRXFhW1V9HWHVAWHdJ2Mvy+d9TXnZ3RlzX9fP1xdrAxsrH3cX9+vnyVl9QUNjIydLC0UpLSnZ1WEx3eXNPSHd9fnl9fXVDQVFQWlBURdHdQEBZwP/20EFxeXd1XsfF9vzaUNfd9//++/jn4eXPxNVS0NDCwlBeVndxUVdV1ltJRMHy8MTF2lRHQFTY2sr83VTfWVbXWU3a9PT33lVcWlnSy8nTX0Z4ZHN9dEpycEp8e395ZX92c0tMX13fw9Pbz/XP311dwMLJ991AQ0tzQFfazsv129zbw87w8vvj5vjl9tXTUEdbWF9RRn1zdENZW0FJTlbb0M/L1sfSUkdPXsDO08r0x9vbw8nz5+bz8M5bQExHWVPU1017cnJ+d1lWWdXE33dxdHp7f3J+fHFPSHZBREhAVlZS0sr99fbK2VVZRE5fUMHHVdDZ1V/e9/P74ef89Mbex87L9PTI9d9GSFhBS1dUQU1T0tDd3drVX1FRQ01U3FZVx9nezcrJ9PTY0FN0SnVF1MXEyvLAXHRIdXZHV1FTX0xLem1hZGV/d3dKdENfX1XfxMfJw8zKxM/QXllNdkrR38DNy8FTVtjA2PLl+vzK/8vU0MPA2vbKydDRX09aXNXUzMDUWEZcS3ZJWkNB0sHZXVXWU1fE9M7M/eTy9PTbX0hFUlTG8svR1U1yfE1FQ9XE0XR3T35hYXJ9eEhVWXNycnZ0SU9IXdHR1FdXWkxH1VBE2/PIxcHG29zBzs/15eHl//z+ycT28fb65fb33tTVVtDVVdbB0UR1eXhlfFpHX87y9MRX0sfV08TBwvb28MdDTHdwSndN0trVUlnV1VhTX0xXx93cX3ZyZWNlenFFREdPcXJ0Wl1OQcv3y/TYUlVDQVVaVtnY39bcwsz1y9jA8fLk+vTM9cTNysPw+PDE39vUW1BYcHRXxMZQTHd5Zn13ddL398HS0dTZyNtXw/rk/fDxxl1E115E1d/HVVLHxdFSd31zRVdQWkB0fWVhY2Z8d0lyfEN1dkt2c07N9vXY31l0c3RIStf39tHZ//H0x8XS2ffB9vDz8v3zyNjf+OH68vDm5f/DUEVBxdLVWXV2e21iYWVFw/f09PP1wt3UV8P488/O9d9dc318flxVREbVysLeU0Fwd1pHWkJ3SUN5bW5if3B9TlBXW1hHQ0HS9/P+/czdXXd+clrJ9M/O9fD0zlBHVt7x9fH7+vr9z1dbWsLx9P3w5eX+w1FeRdRbWddedXNkY2d4XdfZ8vb32dNdW1ja+fT2/fL32l93T3ZH11Lf3czN3llIdnBGSENZcXBze2dkZHdGd0JHSnx/eXF0WsnD8/jGRXZye3t50ffH9fH98creUFBV9fb44Ofn5fHe1lTK+OXg5vv5+ffVUN/KxdjSQXF6YWBkZElWV8Tbwc/IyMfByf7/9sdU30dyZGBmcE1E0t/LyMbUSUFGVNHS1UJJe2dtaWF0TUZfdUp3SnR13cr4/fLxz99SSX5/fFpQ28DQyPP0VlrV3cr25ODh4Of0XE1NVcH2+f39/MraVNL3/c3YxUROdmVmZHxCVl1RRV3b2NLd9P7wwsHO38jLUU11S0FTVcLK9PfbUnRJXV1XUVFESWVubm1nd15fUEF2cH17fV/Ewdrf2dBRR0hOTl/X1FJX1VJW0FtMRVlR2PDm7e/v4fDCyc72++Hg4eT/xNXGxtrZUVJEdHN5en11SkVZTENfUdjZwv778MjZ0FVZXldOdXZzRkRWxM3EydRJRE5xTkpbXUlyZWBnenlEVFHSV1hSdnfX0FXa0F1fQVhbSltVWdbe1N7R08/XR1FYXsHN8uPt7OP48MPQzfHz5eT+9ldS2FNR01xbUEVASHZDRE5BRHV0QlTM9fzk//LxzNrdV1ZWSUxKd0Vf1cb2ysTS1VB2cURR3NZTSmdjYWZgfnV1dEhNSHdKQVxZWl9ASEZeWVTGU1zVWVpZV9bW01ZZSExUzuXg6+7h5vvHyfP44+3t7ef3x9xXWEXd39HfUEZHTHBfUklDdnJHXdTMyMHb2MzF2M3UXlNOeXZxSlVR3/fZW0R2cnd1V9HYUn96ZWNhcnJLRUdd1VBT1lFT3t1V193R19jc11dSQF9cRVHT11NQTHVE08X/4eHi5fnKxcvy5uTg4/r10tNNX1lERVreV1Vd1t1cVlNEfHl0dF7azMnDxNPewM7y8cnBVkdMXVRSxcPYQ3J+eX98RFLeycJFf3dyeX90Q31xT3R2cndaREFYdX1MSH9P1lZeW1BeX9XawMTfU1xIQNZW/e7u4ufk+OX6++Ls7OPm+czC3VJSXk1D1FVXVFbEztNTX092QkhzXt9UT0xPS1TF29PR2UVIdEHUXsD32lxKSnlwdHFexcBDcXB/eGV/d0JaQEVB0tzWwd/FUEVfWll1TVNXQHBKQEXQ38TE29FDRl3Sz/zj4eTk/PXH9/H8+uT6zM7H2tFU0VbfxdJfQN3f1dnc3FFMc393Q1vd297R0d/J9srxysxUQ3Zw3MPcxcTLVENwcFNEU9DfRHJ8ZXl5ZX52S3ZxcHdaRkJCWNVTRnJzWklwd05wenZKWVDf9sTdR0VH3Pvk5uDs7OHm5OHg7+3l5f/13NjF39LCyMbMw93C9MHE1dDQcWVlcXVyc3Bwd01a18PA9MRaX0J8c1Lb11PWVkxKd3VS1tXRTEp2YWVxdHF2QEh0d0dc08/Yxt/Z00NNTkBHQFBJdnZ2W1DFwdJQQE5/dtTA//nn4+Pj4e3j4uPn+sDdWEFZdV7Q1NbfzdHe9fPz9cvF01xMTXd2dXNwf3F2WNv0+P/3xdnVT01aXtVRU1dXW0lC0NJeXkZ3fX9zdnB1cnlxdHZxQNzSRFBUTUdBTnVxcXB9c3Nyc0PXz83Q31hAR0ZXwPLy/+fi7e3v7uvv4eP82MjL2tTT3Vfdzff09f76+/TA0kFdRXN+c35hZ2BldkvSzffD38RHT0p3Sk5YQ1LS0NvRU9/E1UFbc35KfnNwf2dkcXJIX9zP9MvSxNxWwdZWVHV+eH9lfklWxsHM115NfndGQdLOzPb4++Xi7+/s7+Dk/8DPwNPY1UpK0NdUzv34+Ob59vfT1NBFQ05lbWdgb35Hwfb//8ny31bS1t/a3XVc10pAVd/Q2dlEXkp+c3BzcmVjZn1hYU1WVMTK1dXRU0ReXU52ZGBnYGB8WVNWwlFaR0hPU8b25fvl4OPj4+nq6JXr4Ofk//by9cXfWN3cVMXw5OTj5/P0x1F0SExlYW9raGljf1PR2/fb29RbXFzXUVJIcXV8cUxT3NP320BFdnN1S3x7fmFlZmZwQ9Tb8/TD9cDS1FBAcU1lYmRnfEJXXNrJUtBWTtDMzvX48Mnl5+bi6e7pleD65MrFycRXxd1LQ0dO1v/n5uLh/v3FWlBHeX9/bGhgZnpGXVLGyMDGxNTJ8d3EzVJ0TENG0sDFwd5PcHZ4eHNlYXpnbmxjYXZXVMfIx9dUUEVFS3N2eG9uZmZ5TF7WwNrUxtnA//j9/Of4+OPi65eWlJXu5+T7//v79MDP1k1HWNb8+v7l+M3YVEVWU095YWNpaW5tenNxQlVeR9ndzPPAU1XXQnVDUMXPwtJRdmV+eXlCQH54eWBiZX5Yx8nIzsRbRVBS2M3VcH95YWFmZXRHXtDa1d3Mzv3l+PX2+fz55+Lplevm5P7P9fHx//DfU1dacUTD/fj4+fLL21fWx8n1XX1/ZWJiZmV3X1TT2NvQyP//9cjG1NlRW9fQ2sZHd3JyZWRleHx4Z2NiYm5kQ17c1VNZRE51Q9TaVEl9emRuY2BnS1tFU8bY1c79/Pv45+Hj4O3rlZaW7u3j5//9/vb0983E2tTR9/z45/LMwNNbQlnWVEV8Zm9pa2psZkXQQ9nA2VfG9MXL2t9RQ093TNXY20NJRE98fnJ8cnJlYWF6fnBQxc/S0tdYXl/a9c7FWX1kYW1ge03Q2FdX3NrDwPL5/+f49cvx+/jt6O7j5+TwztjPytvM0EXT2sj25uPn5fXdUVLVVtjXRHJiY29vZ0rZwfXfUs/D3s3+/8zER3R0cFDfz8dVWHxwZWJkc3xiYmkUYmNkRd/T09NzfE1H2Pf1V3Z4bG9tYU/f0V/cSXTI9fHm7eLh+svP/ubolpSU6+fK8/nK+eH/0VtGRcj+5O7u4ufYdXVERVTN1X9tahQVbGRSwVNbcGVKwffy/v/MTGVnZXxXwfDaVFhmZmV9dEddeWwVFGJ/0/P++P3Mdn5Cxfz88NB2ZG9sY3LR2sVBd3pnWs/h4uHi+cVHXMrm6pXq4vrLTFLO+eb+91BzfEjY/+uV6+/kyUxxVcDw9NpMZGJuYXtV8PfHQkt0Sdn35+f00nd6ZGR03fXyyUF2f2BkcUBceW4WEBRuYUL3//Zcd059fd338cdTfWNjYGZIwtrUcWF8TF7E+O3i5/bH8frk4paVlej58vLy/eDv5clafEjN8/LolOrtzNDbxtPN8NNBcm0VaWZnQ9JDTmRhfUNU0vLx2ERlZn9eRtzCVtBJemVzQFHTRHhhahVsckbV/fPz3H9xUFbF8vHQUHNhYHlE0cpSQnFjZ3RWwfjl9vbVR9T3+ufp7+bk98HM9v/j7cdaS3NIU//h6+vm5/POzPL8/frbQn17Z2N11c/xQUt0cHBDy/Hk8FBAdnF+183RwF10cn95fVBaVnBtaxYVFWN0TNPVQ3VLT171wsbL1X1sZ3h7UtzH0ndlZ3JOx/T/4f7JUM38+e/u6Oro+Mr5/+Hi4uz43ndJ0cX74uni5czY98n65PT3xXdsa2JgfURTQ3xma2xmc8LM8cJCf2V2cdb3xNtRTGdhf3HB3EBNfmMUaGN/xMDE29dHQN/S+ubN9tNJYWZydM3D1dBdfG9ld93l/OT8xlZRy/fm7+zj+vBQV8734uDh5dtEc0PQ8uzv4/j+8Mv65u/u4fRIc2FifUfY30B8ZWBsZUjb8ffMWE1KcljFz/bGcX9/YmdKWdNeSWdvaBVsenF0d3h4f3tI1dLJ9cNBd3FkeEFSVldCeWRmeVjZ+ufl+f748+Xi7+/u4P368cDy+OHj7OfOwFbR9+Tk5uH/+/L94uzv4vvITnFlY2RxfXp6bGpoaWd3Wt7f0l5MTklXz8xXX0V/fXZxV8fPxVh8bGJgYXRHS3VAcHNT08v//vffUUhLSnxFX010fWFtenJCyfLy9Pbx9fn65uLm8vbN19jF3PD5+vLIxdDPwvT5/PL+8Pf45uPt6e368MVZT3F/dHdyemZgZntxQ1Xd3NlXR1hX1d3B1FdVW0ZPTE9aXEl/YW9ubWJhfH1/dnJzQlbX1sXbUUBxcnJ+cnV2c3x/eXNIU9j2+f//8+Tm4O3i7ODg4fnz8/zz8/3Px8/K9PH9/Pr6+/n45eTj7+Dn+cvBXE93c3lkZ29vb2htY2V6eHdJS0FSUd3RU1TX1NZXXlBFdX12fWV7e3t7ZX9IQkhORVjW3tvS39pZWE92dUh0fHR2e3J9cV1UxPXyz8Hw/+fh5uTm5v77/PH+y9rV1VdZ2t7G8/Tx+uDk+uHm7ezt4ebmytpTTFpDfn5xfmR6e31KdFtfVV9KWV3X2NnDzc7RX1xEXkByZ2FmbWBjYX55eHl2c3hzQkFcR0FWUkx0T3RBT313cn16Z3NJXdvJ9P/5++fi7+vo7unj5fnz8PDw2lJXV97ZwPH8+f378vP8/efj7Ob55PXdV0dKf3ljbGloYmNmf3RAdndLSllGXtHfVdn03dJQW9zRUkp/f2ZmZHp9cUdGQXZD1VPb2c3HX1tLcUNNXkFIcXx8eHN9WNja2tFU1MH85OPm4+/i5vj49cvA1VFTSEtJXdj1/vrm5/r4+/rm4eDt4Pjw9Pf398pZdH1kY2Blf3JOXl1QXlLZ9fHN39JcQk50c3J2cH99c3thYGZgYWBnYGZhYGRwTHddzdheX0J1c3ZzfWR6fHp+dNjG9vz98fP85+zo7+no4OH65uf68fXA1dZV0tfbzvbz8PT++Pn64+Dl4efl+fHLzV9xcH5hZ2dhZn52d0FCQUZGWUVY0NbTUl5aSExPSUpJfmR8eHpzcXB0S3R1cHN3dUdY1drb3sXd2l90cnJ+ZHlyd3RX3sn1zsvx/uT+/+X+/vz8y8DAwdTZzN7U3tjF3FjYx87198/x//vj6e7g4OT6/P3DV0h2cX1zS15OW1XQRFhNRVfcU1PS1tRXU0J3f3dxcGRnZmBkemRgZmBmemVkfXJwSlJQUVNdRU9MdnB9fHZOT1XHxM//+fX19/H55+Hj7Ozi4uPh+PD0wFRfU1xU28vP9fL88f3w9/74+ufm+PD9/PDJ2NdNc3JxdXdJcH1zdXZzdE1xTNBWVNZQREd0f2Rlf35+eXhze3pzfXN3cXNLT0ha11FZUEVPREJKSEpJTXdLUlNT1NRVw8Lew/f1zfz65Obm5Of+9sj1wNLcRkxGREfW3Mf2/fb9+fn7+uTn5/788/z29srFx9xQ38zQ0dRTREVKS0h2dFpW3MnA39HXdXN+ZmxibWlgZGVkeWV/cH9/d3Bwcnl3cHJxRUJ2d0N0S1td0NnZXFbQ08XLz8n1+eDm4Ozs4+Hm5P3z98jG29jHxN1QVMXa9fDz+Pvl+v328Pb1w8jM2NrE2lZQU9VRXnRDXnZ2dEx0S05LT0dT3MXVV0ZDSnB+ZGZmZHt+ZHp8cnZOTV9UXUVRXU9GRkFZRHZ2cHJ0XcPE39NXUtNWVldV2cj+/f7/5f798PHK2sfE0ExYVtZcRE5d3MDy5eDm5Prn+PT098P0//j88Pf39vHzw9hdUtTcUEdG0dZbU19eR1FWV19BcXd2eWRhYG1jY2JjZWd6fn13T3dwS0l9e3JzdXdxc3FwWF3Z38XN19/E3tDYxvL75f7k4ebl5uf4/Pf++fLCwcLb1V9LQ1vU9fL++ebk++T8zsHf09/e0N3FzvbMyc3dQU9FTEp0c0lFTHZKXEJZW1ZYTUxDT3x+f35nYWFmZn1zWtVEUNnYQENBSnB3d0p3cnVeUNDe3dFcVtbQW0ZcxNPO9cjJyP375/Hy9vbOyM/OxNBSVll2WkRU3cjy+ufk5OTzzvD98/L3zsr1+Prn/fLyzMTEWUxZQVPQ1nFMXkZe21VGQk9NSXZmZ3tkZ2dsb2liZHF2c0NJd3V2Z3t6eWV/ZWZ4S0bVxdXTUNVQx9VR3Mnx/v30/vn45+7h5efh5OX/yM7LxdbSQXVB3srw/OXk+c7199DSwMzYzfTMyvLN/f/c1dVeTE1NdXRHQ1BYcUpdWFTdU0RBR3NIdmV6c3pkeWVnZHl5RVNeU0Z3dnRwdHdzcE5xdkNBQ9ffUVRdW17WXVfT39L08cr8+P385Pr4/Mray8/Z2N1aTEBDRdRS3Pb5/P7/wvX39/H89fT9/Pz68/b++fj9/cPH2NvQ2lZBX1tBV8RU0NLeWFp1fHpnYWFhb29iZ2d4e3BKS3BKcGZkenpme2V6fnx8RkNIR91WRNDc0lZU0Pf19fPm5+Ds7u7v7Obi+/bK9tvT3NxfXVxZysXCyPRTUtPc1tzT3vPGxvXz2svx98/OxN/009fWU0BRWUZCXE5TyVTb0UFydUhzfH9meHJkf3J+eUlEUtVdcEpCcXd2cnxwcHNxdXlIX1PUXERGXdHW0tdWz87B9P3w9uXm5ub/9/D029NWRU1BW0FeXdzN9fbxxVlY08fcwsjw/Pz55OXw8Pj5/fn7+//y98jE28DJ0FDf2N/Y2tZScGdkeGFsYGZmYWdnf3lkfnRwfHN7en5kZ3N8fnNxen9JT0JbXlHRUdLf2d3N9/74+v/n7eXl4ebk4OHn5/rAwc3QVlFZQlXbwszFWVFQTXZPc3BY18PKzNT198Lf2NfO9v35/87U9MnMy8RBVNnf3tpFQl5xcnNkb2BhfnJ9eHdLdUZecXxOS19EdGVwdkld1HByQEfT1Fldx1LW3lJ2XN3b9/H38vrw/PL10cz39/fCUV5GS9fQXEtQ1Mnyztzf1VRVX0xzTVzN8//0/P38/fP08Pr45uHk/OX6+v779tDW3NHV115bQHRlZWJraGNnZGV6eX1/fHNlZmd+ZHh4Z3pyf3RfdXJwT3VTxs/IyNzZwN3b9f/94ePm4efy/uX98PLL09BUU1TQ0MTSUdbb28L3w8XTTHdOcn1IQVve9cPIwcXO8fXy8MLN8fHx//D3/vzDx9FTX9/R1l13eGVjY2R6eHBJdk9bQE1ZQElJcGdlfnlxQUxBUVpYRltPUN/YxsdUXNZV0dv1wvP98vPy9MDLzdjd10hxfXdIUllaV1xZ2c3byPfM0NRPcU5GQd3DxMvx8/T55Ofh5+Xk+/z45eX64OHl+/3Mw8DX0tRGeWRiaWlsY2ZkZXtkeHxxcnNxcnpkYWBgZn53RExJSUJLWdbCwMvKxtHc2cfI9uXn5uTm5Prl5fP0wtRFQ3RxWFfV3NlSUtXT3Nvb0FRFdnJ8eHJNR1tWVllc087//v7+//Lx8v78/OTh4+bk//f3ycvCVUx9Z2BgZGR7eXl/cHJxQVlaQ0FJc3x7ZWV4cnRMQkJNTlxU3c7AwMfc1FfZwc72/fj+/PbL9vXG31NOdH57fXZxQkdEUlRSVtvFxN3dU0VLd0pYUdzc38DCzsv55Ofm5+fh5frk5uDm4ePs4Of6/8rN1kFyZGJubGJhZmRgZGV6e313dXB+eXhnYmdmZ2V+fnN1SVDE2szw9cv39MHMyPzl+/jn4OHn5+f78cPAVUZ0SE50d3dxdnVJWdDTxM/SUVpFdXxwTERFRF5HWlHQ9PHx9vHz8vL45efh5+Xk5+Hh5OTl89pVT356ZGZle2Vken57c3VJQEB3cnx+f357c3RycHd1SETUwfX39vDxy8z19vTx8ffz8/36/Mj0zNZEcXl7ZWV7f3hnZHt4eUNX0dvT1NdASltHQFXZxMzNy/bz8/zl5Prl5/nl4+zv7+Hn5uX4+/ny98rMVnV8ZWRkZmRkYGZnZ3txdnd2f3plZGFlf312S3d8dHV1U9vYy/H08ffI9//y8vLz8uXl5OHm+vPx3lhfRUtDTHd0dnJ8c3N2R19BSXV2d3N4f31ycUBAQFlT0sDNzvbx9PXy+Pvk5ufk5eXg4frk4OT89cfYV090dn5kZX95ZXJCRF9aQkl9en1/fn13QERISV9SUVHG9vf0/P7z/v74+vDM9MjMz/Tx9vTL00J1cHJ/e3t+ZGdnYWFlen92c31yfXJwcnVMRURDRVRQVMDI8vz4+/j+5efm5uHj7ePm4+Dh4Ob69NNdUEBwcnR3fmVnZ2Vke3R3fnJ3cnp/fXN0cXB0d3BOXlLU9v/8/v744eT64ODm5OT6+f7l5uDl8ff10FtdT3VMSnVLeHlwfnlyd3N6Z2ZgZmd4d3d6eXd5ZGd7dnVxR1hEUN7Mys72+f78+eXk4eHt4//z99nVRVvc31RTUFhbS0haWV7VUVZHQ1BVXVtAQ0R1SEBb18vz/PL28Pz38/rm4+Tl5uX++/L3zVVT1099dnd1SHF/fnpnZXt6fk1YdX57e35yeXdFdHFFQXd2TFPX1FDWxNVTxcn29PfDxMj2/uf5/Pj8z1NNf3h2T1ldd0tZREpJXVJbRUJOQ0tDVtJcXFZJcnJ8Tdbey/jk+ufn/vrg7e/s4uDs7uPt4vn88sPY1F5UwcXT1Edwf2VnenxycnR8ZHpmY2VlZX5+e2R6ZHt/eHt/fnxwS0dV98j3ytrBytrBwcXbx83d1lpBXlVeXVtcU1HdxvD0zdrfXFJdUdXc2MHKVUBLQEdTVNrP8vz45Pn7+ubl+vn65eHm4Ob8yt/XdEtAUdPY08Pa1UZMWnF9fHN9cn9zdEl9SVFOSnJ9d01IRVJZdktPfHF0QVHY39/PxlHE2EVbR0RfQHN3THZyTHZ6emV/SlhGV8dXQlRQRdVQVsfD3MbFVl9XWVXR1MPw+Pvh4uHn4OTk5f345+T/5Of99vXGyM/A8f3/8PPzyMzbUl1Nc3dLSndEWlpYT3B9emd6f3B3QXZzcnhlf3llcnJJRVNe1lFfQEFJcEtLQVlRXdDUUk1EdXZER1fb0lbTVFxGVEdHU13Tw9BW1FJeRdxX0dje8Of6//7/8PTwzMnK9vvn/cr1983AytrFxNrN8dnWwMBSXlJeV9bTw/LMzPb229nR0dRRUN/PU0FSU0RSXkJOTkPQ2VhIQEh+eWVmYGFmf3B4eHBzf3x+fHdOQNLSWEJZRE1NdXBxS0xV11ZW39Dd39ZS19zH9vb09ffPz8zA2sv08f7+8vz4+ufm+v389/P98cr12dnG21BR3NPDw8HGyMPA3NZCXlFf1FNaVtZCX1ZZS1tHX9Lf28/ZQ0BBQX5/eX9xd3N3cGR5cHxlcHNaUVNc1lBFU1lCc0pKTUlaRtZQdExcRUZRXNHX0dDeWklNW0dLTUBEUNFVzMDE9fHE2sHI9/Dz8vn0zs3x8fH8/vH5++Th5fn/+vj/8czZyszNzdvew8vH2MzE3/XCwN9TWFJZSnRCfHt+enx9ZWZkZGdlcmR5cXRLd3h7cHRwdkp+QF5cXURLRV9GRFtFSVRd3MTSUdBdXl1VUUBUXMHKzMH0wcnLy9FQ1tX0ztrby8DKz8HQ1tLF8vH38//39M7M2sHS2vbDwfT1yfHx9/T3zfP68Pb3xtra1lJFWUXS31tBRHVIQHV3dXB+SnB+c3F/dndxSk1LdFleWVheQFtaQE1KcHFNd3dzfXx2dnd9fnN1T0hGQV1YX1NQWEZT0d7Fzcv2y/Xz/PDw+eXm4+H6/vfx//DO9/Px+f/w8P785eXxy/f3wvXOy/TK2MbbVlXe01bSXFhTQU9X0VhHTHJ8f2V5f3p5d3B5fnx/dkl0TV5CQV1ASkRBTl5eRVdcdUJSR0NeXlpQUFHSV0ddVEJ0dHFwSUpORE90QV9FXdTaxs/awcPb38H1z8nK9s7w/eTh5+bi4uHm5eX++/3+88jPysrDwMPL2sHdwMTSxcPZ1dfS11hSX9rZVldeQEp0dHZwQk5ZT319cnN8c3x+fn17fGRneXp+fXJ/eHlycU1OQURBRkNaRENAWF3dWUVcWdHf3tHUUNTc2dDW3dvH3dve2MD2/vr6+uX7+vjk5fv74eHn5Pj5/v7w+v/09/3xz9tQXlFSQFNDdkpRUFZSWkReRUBWX0JGU0BMS3RIW0FNRUx2QlZW1lVUVFVETHZ9endcWk50SndKcnNwfXhKQk5xfHByfXl7ZXpncUZaSUdGR1lc1trBx/z6+vDw8/f18fHx/Pb45/7x/fz75OTl5fvz+fjwyfby9sr139Le1s7wy/Xx98rNwdBRUl3X1VtHQUdLdn1kZGR6cXF9dnZ2f3p6ZHhxWNZQWV9aRktIQU1a18Tb1ldUX19PTkh2c3dKcH95fHJwfnF0dktR3d1V1dnBwtr29s/D9vTx8fLk4Obl4uHk/vv8/PP8+PvaXtRPdEfX1djFx8/DU9HEVNTD9vbJ8Pb881FW29Peys7PzMDc98V3c315ckReRHdKc0x/ZHxweH1Kc3R9cHJccX13QHV3dnNzfXFzRHlleH5lcUpPdU9GT1xCXFZdTVzd2dDN8Pz68/37+v3+5+Dh6eji4vvy+/3x5eXl5fr8/f/2ysbY0Nra19HGVFBedklYRVjb3N3E3lTQX0tJRHVKVUFIdUpwRkJNV9VAWtNQVFNEdU9zfXZyZH9LfU1HRUJaSnBKcGV9cmV/eH5+d3JwR3FzQ1tH1t3TVNxU3c7d0MHJzf78/ffy9ff8wvT75/nn5fjw9s7w997C8/nw+Pn89PTD9/bL9fL//OT4+/P13s3C0NTY0VHRQXVzfXdOcH54cHx/T3ZyeHh7fH95eXJydEZOSHR1d0dcTEVfdUZBcX17ZGZlZGZmentKRE9KdHV0UFBaUNLT8/z39Pf0wvj+/P/7/ODi5+bm+vLm//3wztv3ydrXU05109XW3dre8c3T3cRaUcHFyd7Dwvb3wsDPWVDJ0NXXREPVRXFMd2dzd3ZbdUhCRlp2RUp5T09DSH11Ql5WW9RBdk1JSnJmZ2RnZGR4YGBgZ355fElCW1pfVEpIQNTG3sP28v/l4eHl5uDt7ODg4ebh5uX/zszE9fTx8ffPw8HY315TUVRcUFRFWFbayM3A9fHJxMPeRktJd052eXxJcnRcQE5LS3VFSnZ9cmR/TnF+d3B1XUlF1VJ2WUR0cn16cntjbG1ibHNIdHFweHd0dXdGdHdW09jG29n39/z74eXn7+ju4Pr45Pv4/uXz+ufk+/VW1dJU3dbUWdTW3txXQNPDyPL88cHz/eX+9N7Y1Vfa31xa0tLK9tJCWE1d111KdEdHX19we3FyQNVccHZBTk53ZWFibmBnZWBmZWZnZGlramptZmBgfXd1d0ZPQF7S9uf48OTh5+bt4ebg7uqXleqV6unp7+f/8f/95c/EwdNNWNxVVtfBwfHGwcbHVd/FUFpT2sj99PX39drPwdNHRV5ZUEBeVllBVtZTWVhEXFNYXVhBTUx3d3R3dEZZWFJETE1LeWdgYWZhY21hbWhvY2NkeHdaVdbe2dLQ01bXw8DO/ODj6JWV6uru7OLn5Ob7/eX9zcjyyvTF3MPIwvfzzsLYzF1bz9/S+PP67eLm7O3k/vL8yvDGz/RecEVJd0tzSVtdR9NUd3t6bG5paWBhZnhCT3V3RnV1cH12c3llcnlmYGVkf35lSHV2Q9dQXlVSQ1pEUcfY2v3k+eXi4uDs4O3t4+bh4Pv98ffx/vX8+/338MrXRkBxeXt6cXZ1RcfPw8/2w87MwvL+//H5+fTJys3z9/T4/8razN9aQXdlemZjZmZmenxlZXFyZXh5fXZ2fnp5eHlzcHJwfnlzfGV7emdmZmJsYGR4fnBB2NrB8P398vD08Pz/5ODj7Ovr6ujs4+zt5+bn/vz/9dZXRVjR0UVX1l3d29NW0t3ewd5X2cfXV97Sw8PcxcrKxsnb2NPVR099fXxwcHBNSXRCW3R2f397c357e3l+cHdycH5+ZXd5ZH1yZXl4YWFhYGByenp0Q3VW3lfVVEBGxl5a3d7d/v7x5+3g75Tu6JTo4e/h8vz68fP8yPn49M7O1FfdRXdfXEhTVUVRwNj3+PL84eX/5v7N8vPZw8BcWdd3cE18Z3pkZ3N8YGd6bWFlY2Z5ZXlLdnl1TnNaXn52RHRwdHhlfGZgfHZ/Skl1SkNzfEpxfkhbQN7Y3cL99/Tx9/X5+ff++/v9+v339cnZ9/bHzMjP28rH1tFRTVlVUVfe3dz++PDl5/L6+vH28/Xa9vbI9svcy8jczfHD0d9YcHR8Zn5xcXB7Ym1mbW9nYmttYmNnZWBgeX95cX54TURR3drc1tNUVtlQQ1XCw8Pf2drFwcv9yMXGysjO29vE8fbx//f18vj98PX30d7V0VNKeXdPdnZ0THBBTkZHQ0rVw/by8v/85Pj5//D84+Li7e7s4uzh5/NXV8DX1Nfa3dVedHVKfn98f394emR6fGR+eWF+eX9+dnZ/eXB/fGVhdk1BQd3bxfXxw/P9/fn//fD7+fDy/czxyvf88vD2+fbH2NFfUUhOW11cVMr0zPTD3ttU0t7QXl/RVFfeVFtd0dDW39be9vfGzsjI9PH9+/v75eHk++T58/L6+/DMwcXA0FFURnZ3RFtbRVpGX1t2c3Z3SkxNTEJBUcfc0NdQWVNQQXRIQ0tARFhaQk9GXlhc1dHd2tfUUVHVUVRUVMfAz/D2zNDT1NFXWlzc11TS0snPyMr2/P/k4Obn+fzx9PDIwMLYzfXP8/LyyNJRVl1QQVtfU9xU2drN2t3GyNvMw8HEU17Vw8bSQk9aXUNNR0dPWlFHQURCWFRNS1jV08zH29va1dTe1FJXcWd/emRkZGVwcnxKRnl5cHJ8fX1xRUZKTVRGVcHf38/08f79wc/21dLDzM/O9f3y987+5fXx8vD88vT1yszFw8XB/fHLwsH1zsRcQVt2fUt3R09LUddeUtn09cXSUtlUX1NAdUVV2NnfU9bYUFlSWUpOdHNnZ2F6ZGN8R3VJTEteWkVkZHx3TnRlenx9fHt4ZXF3RcXCUVRT1VxEQVrZzvD45eXm5/r49tjB9fX0zNjH29/TVVTUUdTF/f73ycDMx9xcRE1E1thdUtfU2NdST0FBX11Hd3Jd3FBxfHBFQUZWzfT8//bKXnR1SXVa1t/D9M3Z105wfHhmZGVgYGFnfmVvbWdmZ3N0SFpPSEB0Z2FnZ3hKcE7b28b331jTVUVTxtDB9sr9+vHJ/fXN++T+4eLm4+L9zsje3MvYVfbz9/3w1F1QTHdEdHJbV1TX1nV/fmdld3xL0VFBdHJ+e2RkfXVLX8T18c3R2tFSUNZRQkdc3/XWUtRe11fQV97MxsDAQnVxZ2BjbW1kfnZQVEte1UpPQ3J8cXJzUFl2UVt1QUNIXNjey+X328rH09xdVcr28+Xg+Pnh5/rk98/w8Mv45P36/PfCx1Pez8fVydxBTHV8cn5lSnRMX9Jf1N3eVlN3eX9nZH5wf0pPTk1ad0xTR0XQ0tfcV15FQ3xPSX9D3dj1/P7/8/bU1Vt1RV9SWdDW1sVQXldQVsz3/fPM9cJdR01SU17S2sv1w8rAVNjcUFJR18X0w9zx8MTLytna0Fb08cjO+vHH98jAwdjSyfH0/+DwyfRUTXRlekJGTdTCWV3fWHVDc1vD0FtRRH9+c2RneGRM0sXE8shZW0Bxc3Z8Qt3X0s7N1sH1w/H39frh5eT7+PPw8MXf09LH9vT/5eXl5f3J39ncxtXF9MD239DSUnBCQUhAdHVGXkhFUVNzRlrXwc/08fzOwdVTRdbRws3z+Obg5OXw98H39cvAwdveXE90cnl4d0vUU8fK8czf1Fp2ZXN2dHZJR9JU0dZeREdX0N5d1snwz9/AwVBX0dj99uXv6+3g4fn09PX2+/nk7ezm+PXUXd5UV8FQV/X3ycvfcH5xfUFVXML7xEBLfGJtZ2Nlc31S89nZxNnfzNhVychUwvLC9PXfWN/cwvv6/ePn9P7xVVpbfHl/e2FKSXRdQk3UV0pa11Ff8NzQztNOSnd9XcfC8OT2/eb9z8JVRt71xcrl8vrl8PT0xt3198ny+cr/8sFSUVhD08Lax9ZIRkF3eX15fUhJcVtUXtnA3ExFdXN3dn9zf3l9cWRncHJ2W1Rb28zZwffcXVdKcE5PdlbQ3//h8cz30UZcVktbUETWWWRnZGZkdnR23Mff9vLTU1xcRdVWUff1yf32xszWXVDJ2VXNzMPCV1tbQdTW9dvX31tf1VdQXFNRQVBQUNXS9cXawFFGcXx0cHZKcEp/Sk1/cHd0S01CS3ZMc0t9YWJpampraGJ5cH5FSXFwcU9DRlDR0tVax9LFx8fA8/n4/P///Pv1y9jb1tRbWFFSQlpRXFh1WtTdVdvTVlFWUVfd1tVWUlheQUxHUVFadHl8eHtld0NEVcTCx9REU9DQVt7Q2MzKzMrKwc7D3tLEUVXE30xyeGV6emV6c3l8SkJLd3N/S059eXphY2Njb25tbWZ7eXNNT9TPy9vczN/PyMnN9vH85ub7+Pv+4eb68/DOxdjA1tfH0VFDdXxwc0fX105PW0RHTk59R0FJWdVPWVxX2VJAW1BDWNBUd0TSW1zX3FfTzfzIw93V38RQ1cRX0dnC3tpXVtHZRFlZdnR0Sn1Pc3ZFQXNZUkJa3dNAXHd9dndlcnthYXh5f0BNQdj02/b2ys329fT98fnm+vb7+/Hy+vbw/vX18cjd0V9EWUR1WlVY1dNBSFJCQlbR3dvNzfXbVlDa39HEwdnAxdHMzsHb1E1ERnVLUl5a0VJXxt1MX19GWlNZwPHF9P/88fjyyPDN1sbP0dHRTHRESk9X28fx/djOzURwTHJ7e3h+dUpySE1wSNPTV/bx9+T+8M/I0MTM8/T45P7k9PH99tHB9srbx83E9MjxycXb3s7B0NNRU9zH2tLd3tHa111UUdDQwPTK0FLX2lJZ09zS3srPyNrS3d1W3cXT28XE01BGTkNfXc73/Prn5ubn9cTeX1vW093Q39/T0VBU1tLD8MnT011Nc3ZkeH54dURNS1HAyPny8/T7xvTHyd3xy8728fDy+Nv0ysTdz8Xawc/1/d9W2vpHzvDY/PfXWlF8fHRGXlBe08PQXtbdV1XHwtjEws/Z0MDL39PP8fPw/PD1wN7S215NRV5U1Vx1XNxdw/D3/+fg5/3x9M/f2fbETV7F0t7c09/H29rOU0hMdnRRWHVzTExF1HR/cHVNRUVTU1te9fLZU93dx/Dy+f3KyMrHX1JcX8Lw9s71w8jywNbQUNbA1k1LfWdyTndzd3RDXF1Q0lBAVFde1djXxMrPy/bK2cLBwPXY08VQSE9HdnZZWllZSnZIQULW2tPMxlTQ39bVVNHFysj2/MrBxdPTVHVzcnVIcHF0Snd/cXR1X1XY1ldfc3ROdEF0TtHE2sP12EVeWFvZUnV8TFpCSElY3tDU20ZKRl7dUVl0eHF0TXVyc3VbVMfOw9raxMzI0VxX2/fx/Pz/8/38/v3K2MP1wdNwe2d8eGdnZmZ/cnx2eGBnfH9zZWBjZXp6cn18cnJwXVVZ1sHY9vTTVNrN2cvNw/z5+OX/ztjH1MDAQHVGV13H9cDPwlPcwV1TVktPTX5kYGVkfHR5QUdAUcxXcXBkYWViFWlqb2Fwf3B1cn9NRkjZ29zH9cXeyPfK/OXm7uzg4ung5+b65+Xx0tDG0sz32V5JfWRzfmFkYW9tYmJtYWdgeHl5T09lfHxkeXR6ZWRgYWZ8fdXeUt7fX9fI19bfRU9X017QztjJ+eXs6+3v6uzg7+zh+vHZ28nIyPLI28NRWcHTTER8enhnY2JsFWpjbGB5Z21sY21nZGR4Zmd8T1Hd987b9MnC/vL38/P2/Pz8//jl+uPs7Ojv5PLxxMX0zd5XS0NAUFfQzlBFX0tOdn9yYWJjY2diYGVhZ3ZIWFdEd0NMcnRycn9mZmF+SHBc3FnQ2dvy+uHn5+bj7OPi4u3j7JWX6uvg5efl+P/9y9rf11rUWlxdcGV6fGR+cmVgYmJhYWd6cUJJ2vDw98TU097VVtDGU1PU1fX9+eT5/v75+v77ztVFQFBQ0UBG1tXc8PH+/8/Dx9hU1F1FTENe3czL88nQUlNW1dPQXEd2dkdNd3h/f3BDU9reWVvQVFzcx8bYyPL67ezi4uT++uX75OT98vDM8Pj6/P/6/vz4+P/23dJfS0hJTH16cHNb2szxzcDYzfTBy91aU3ZLQUNDcFtQX93E8PLGz8fXWEZPfmRlenFa1s/b11TXwNjCxEbXU1Pc38xV3s3G8v7k4OTl/vzKyPzI28DGz/b28vHAVl5ZWF5ZdnBwckBT0tXX3N/3/P7n5eX89MFR31BAXdzb9fnn4eH6/fnzw9FFdndye31BXVjV0lTG9/3z/Pv88t5U1Ut2Q0daUtXf2c7QTltSXFpFT3N4ZWV/ZGR/eHN1XVJfzdxV301HTEtAUPTL9f/+4+L65+fk//T21lPUUcn38PPDy8/G317ZXHJNcXNxfHZlT9BRx8T1/MLI9vXAxfVSTlBFWNRRVkxHVtDM3s/P3srGTXdxfWFhf3l0TFfZVdzNwsXGytNf0tDZwvD9z9vHxMvAxcRfRF5EXl5BfHxMSnd0QkN/dkJcVkFHfWV4cnZ2TUVIQ9feyv32yMHO9M7F2FFAckpQ3cXG9c/D9fPxzt1fcnlySllPQ0Z2RtHeyNvbwdPY09XeX0d0e3FDQEhIXk1BVNnAX05Lfn5wd3xme2ZgfnJHQHRaS0VVVN/T2tBc1dPPysnxycH2++f798JTW9bbwFTX0kXWxtjF19NSQURHTXd3fGZme3l6fk11SVDcw8DCVUNzc31keHl4enNS1lHAx9TT09VJQVhNSnd1SXZD1kdMWN7ZwPbI3dNTUFbT2E1OTVhSWdzWQVxdXkxA1EF3cXxkZ2dlZWV/c3FPUEx4eX9nZXNycndbVtvw5+Dl+fr8yfP89PDz/8r19snx8fXM3Mnw8cbHzFNS3NRIcHZ9f0ddUtdZVFB1R9BSVEVPeXl9Z2V9SHR3X1ZWWU11Z2BnZmZmeXplSNbZ2vXMU1lZUdLK8PTAw/H1yPX92lLQ2szx8/P09vbDzFVefWR4enRDRVl0SHdzQFDB101LfX1PU1BX1MXM/OTzytjc00FQw8RWUdjH/Prz/czHwNDH8vrzwsbQ2Mv0/fXE19Db8+X89vbwwsnCVFx2fnl/SU1FQnZ3cUpMSXZmYmBtYmRlf3h7eXTezNBcdXVwcVNa38XdyPPm5Pnn/P76+Ofh7+Lm/v/4+/P098nU3cbDyM/EVdfZyF5IQ3Z9fkh0cV1eW1Zc3Nz38sFFc0NDTNzF0FdQ39LHxtzX197ZVVzSXUlbVdrL8//3/f3/++fi4Pv29cv2+/7L2djOyfb39NvRVlNfdH14ZmBtYmdkdnh4emdPVsHUR0hwR9XF8/P28fX+5eb6/fD38Pv8/fz19NrHyvf2xsjG1vXx/PDP9NFQ3cry3NrZ1MzK+P318sjay/DPX052f3NCUFxGW1l2QdrZUkpbdHB1TFxITUpwSFDA2NHbVND1//3Dy8rOzPf88/Dx//jk4+3m+uX+zNLQ3MfT09LG9c7A28fG3NnO2FVCcn1xTENATXdNRUXc1dVVQFBR0dRQ2NbY1F/DX0RcTEVCVttc0EVDX1rK9VfBxMbP9uf85+b/+/Pk/1DewcXc0P7MwPXE99LHzHd2cWRgbXlnYmFvYm1lXn1lcH1/f1ZWckVfXNVW//TWxsbPxvvg//vl/8vO5/rFVtfE3fT78v7/8srL5/jYW1HXVNrw8cr29d9e9fDZU053ZGZxdXZweGRgfkp+YWJmYWd9fWRmZHt6f0pHWE92fHt1Vdva2lBSV8jz8PfNw8P39PLl4Obx/f365M7eW0LWUNLYwcdLT1taUF5Zc2BmYWV3Sl5zeHJ6SlpPcGB9dHh0QV9/ZXB4d1pTVnl+dX1D3creTFBWUfTk5PfO/fL44O7p5uDn/fjg4PfHysfby/r4zthaSHBKXH1nbBVqamFkYmNuahVseWFiYWBhZEzQXER0c3xK2dtQUExxT9X/8PX11lpe8f7L88JQVMX6/v799s7I+uTw9sddVsLy++X+8VFIVsPZVF99YWV/cXRwfGZsY2djZmFoamhhZXlweXlnf0JBWUdOd07SwPfl5/vP9f7l5ebh5fjk4eLi7eLl/vPx8/DPV1nU1dHIz8HWW15Md3R3cXple393cU9LcHZnZmdmeWRleWVxdENHQEFBSEhCdUpydnh9QlPQ0FhPTdHR2svy4fry5ebs4uDh/vvl5OX7+v78/Pjk+v/10U12dHB/cnJ+f3hlcUpIdmBvbW1ubWFnZmd4fndLd3d6fFhNXF5dVEHd9Pzl8/HcxPzz5Ofg4vvk4Ozu7ePywfP9//rw/v3y5+Dh5/7BSUpKdnF/cn5ySEdYSVBEZmZhYWJoY2FhZH5IdVlGf3xydHRzQ3VxRND2yMrw1t3DxffO+OPm4OLo7+Pt+v7/9fXSzfTD8P3k5/vlw0VNSkt4f3N+cV5cQE1fQHd8ZXthY2ZgZ3RASHZZSXJISkRARllJRFb0/Pfg5/TIw/PM8eX54e2Vl+qV6uni5uH/+fr08uTt7Ofn5PHP0kZxeHlnYWd9QEtbVUd0eGZsbGFsbWF7SHRGWkZBSUJwSFFLQ1Ld9MHw8czM3dxJS9zW3PD+5+Du6u/u7eby3/Xzz/P/5OfslOzh+//ERtPRRlpf1ElG2FVcW1xxY2dkYGxjZ21hfndxeHN+YGV3TU1b3tHR5O/j5ubh8vT75efj6OrulJCQl5SU5vH89fXKzcdUxvj68cbBWWRnfGRkcHpkfEleQklHd2RnemdnfXB/e3Vec3VNeGRhfnF+SnVxSVD1yMj31UV1TlZR9P774eOUlJWWle7i5Of55OHx/Prn4Obh+/TfQURBTFlwen9wdX52d2Rgb25pb2FgYXh7fXhxQn1mZmRkdtRRWtz2/P7n4eX3zMVSRc35/eXt7+zolJXp4P7C0Pb/yMrz+P767OL8xFZacFhUS3RwTnd+dkp+ZWdjFRViYm9tbWNhZHFkb2lpFRduZ2d+S1TczOX2xdFeQXde9Mj2++Pp6ZeX6ejv5P3x/fzOyfX39fLh8MLHW0pzQ15GXkpNRndRWn54YW1uaWZgYWVneHp5e2NtaG5oFWB7e3J3VsL1+MTSV3NIdk/LzvP45+nokZbqleLn5/7n+vbD0M/fxvHB2Vp1SHBKTkhOfHFKfXR+YWIVFRQUYmZkfnZGQkJJcHlnZmNje05Mc0fHyvX0z9xST051StfWV/f45Obj7eDl+fbKx8T3093D3szx/vnC2dna19bGVV9aTkxxdnRkZ2BuFRRsYGF8eXNCcn16Ym1oamlkdndB1Mn85eTl/vzJ2N/G8vH85efg7e3t7eHn/PHwzsjPxd9X0sPYwVRZRUhc0NbG2tZGSlNJcXB/cmdmemVwdEJbTd9TfX17emJrb29hf3xLcUdVR19aTXJmfnRJ1M7z8uTv7O3o6ujn5+Hl5Pr899r08vD4+fzE38rJyP3K1EZKTnF8c3pjYmNhZ0zRWVhZVFJDd3B4Z2BmZnh0dEpE2cfX1NxLcXx4cnRQ3N3B/ef6+uzm+OTl+OTn+Pbw/fjh4e7u4OPg5uDi4/nwyFVfXl5BZGNhYmBmfXBwcH54fnxmb2tpFWppZ3lkfEHVx8HYUEpXRndA18DHw/zn5+Hj4eX6+vDw5/v3xd7Gx/Tz/fP8+Pr64OPk/f38w9jA2NFZT0xJWVRU2MXdVEJeW2VmZmNib2Bnekh9enNY10F9dk1KSFtWVNjH9f344eLi6+vs7OHt4Obh+/rk4eLl5OPk5uDt7ebl//ffRUVweHhgZ2Vle3lcUE1edUxPen9haW1sYmFlcWV4cnZRQ3ZLdk5LTl1VzdjVxvT4+vri5uDt4+zj4+H//v/k4ufi4frg5eTi4ub2z91S0lxZTH53cUpdVsPWQFt0Q0FyeW1sbW5kfnJ1fXZLQ9vdX0x2dXZDU9vF0N1e0+Xl+uX75OTu6eLu4ffP9vrl5+Hl5uLv7uno5/LOU9zVUVl8f2RhenxDdHh/Z3p/eXliahUXamlvbG5sbWB5SlNZSEBIWVDf9NjH2VHdzfjm+ufh5ebj4uD69NrN9fD6//P9+eT44OD898zG11LJ2kVMdXdwTdVXXlTY1kbc1nBkYGJibWFgb29tYWBwRXxlfnN8Z393cnZ0SnJDwvfK/+Tn5eHv4uPt4uTn4uPh5uTk+/jh5fHzyNBcV1dLdnJ4ZmJjY2Nkfnl5eXJnYGNjYGJvbGliZmJne3F0fXBMdXR0S3Z0X0tIR1pHRdj9/fj/8M7Yzs3C8P3J28P0wMry8/fL9vz8+fvO1dnGUVZUUXB6cE9V28nUcnR3eH5kemJqa2htYHt3ZHpIdUdf0dRPWlPVzPT+zFDE38z/5uP/9PbO/ODs5MjyycTGzcjeV9VTUdzLx0p3fHl1RE1weGRnf0TOzlZGcWRlS0VwfnpgYXpCXENJf359QN9cXEhkeHPc9N3FRXVB3/vy/uTPwMz/4+fm/NdGXPXIxfHRQF/Y/vzy9UR0dlTZT15wZmZ918HMwEt6ZEnWQVRXdGZlT1nRzV94ZUrS3/f3VnFL0/H45/zQSFXx9PHl+9rE8P7m6e/lwsr+/Pvh59hE3N/D//jGfmF+cHR+emdiZmV9X9JSem1hZXZNdXpgZmBkWsH1U3lxW93K8s1bU9nb/eTk9FNBWNL0+ubx09TH5ePj5PLO1NfH9PPA011dyPL5/MHYWl7B8PBXWFFJXszDzdV1fnxMX9NYdXRhZkpZV1hJZG1yQU5Ad3R/f1HJ8MXZ2EHR/efh5OT2x/vi6e7i58jA9vjk/P7OUN3w/PbLwE90W1TF1lhHcXPf8fTc3HF6c0HGwvXAWE9C1MjEz0V4eH5IQk5wZ3p2W9vU21x3WVLBzsXFQUlAXPHy+/rexfX85uHi5PL1x/bz98JZW1bXyc72213S2PfwytlNc3J4fXZeX3R1cUfb2vTbXVhwTE1XUnF3dUJUxMHFV9fTw/X8+trT1F3c9fj69cLZxPbx//XawV9EVtHcXlpNXtrJ9snHwVBTw9rQT399ZX9MUsbS1ldEwvH09N9SdX10TEVDdnFxT9LaxMz1wtbI//3+99JbT9DcwfTax0VZy8z0w8RTdlNFQFZJdnB+TlBc0NBedkTUUt7KXXN9c0nRysfMRkfF28vx9NxISkp3WFtdTV/Exfb3//fWx8Hz+fT81UvX1Pbn5+TD2N3I+Mj9w0xKeXZPRVB7cHVx10FOR35wcEFRTEZ7Y2dgfURRVEp9ckP0/f/1UEVxQNvYyNdOTU/Xxs3M3tnV2/Pw8sJfRkXeyv303lNCQ8b++PDBX3dCVsXH0k90d03dxNZcRHV3XsXcX3BkZ2RyT0BJdXJ/R8LxwtVTSHF2T0F3fGd7cMD/8fbCw9vw4e3h9FdNUs3L98jEwFxU9Pr699lRR1/Rw85YcHt6d01EQXZMQ1nCwdlaeWRgd0RTUXFyfX9fwc7I01B2c3B/cnhmYGxkTV/XU9FcSUVNWVN3fn93wMvG2NHfU8X+5OLm98NF0VxEUEVadkzV2MbL29zX0MbTxNB1fnl3SkZdXlhOWff+5fvxzUVDdn1KdXB8cktARcTe0ldcUUhNQEx1cEFS2/f1zNze9PXz//TFWV1fUcD09NNFR0Fdxd7XQUZFR1ZQRH1le2R+TVzaxdLKz//h+czWX1twRFdeQnBLRtXMzNr02tdPRt1HcHt5cHba98D01l5BW/XAUNVFRXVG9FxCRndyeUdddFHRXk1Q+fPIwNxXTtj91c3yzc/87OLl5fLYQE/eUFzF10p0yspV3cbXRV7OzNnRVl5a8uf19vn019fy983B2t11WNnUVEVLZW1/fXp/fU1yTcPc1lhLdn1U0lfW2M/SwOHn5ebl89zT2VRTWEFMc1jeR0FYR3VJVFxZ0VBaW9v1393HxNjN9vfFyvTd2/f09vDx0kRMdkN9en1+S9bHxtDfRH91TVFbTVJcUMD85ff9/MXDwvHHU9lZSFxc2NPFzdXN9PLJ1MRHSNba8srO9NzM3/T+yvn2xPHx+/HN9VJbREJIfnR8YXBA0/fD98VeW0xdQ1/WdVnayuX4+vzBx9Pc0VpdTEtHd0lxdEB2cnJxX1pSR3VFTFnE9fP2yffJ9Pf1ztr39Mr5+/fb1VVBdk1FXkF1dXJG3sPG1ddRUNnfwcXUy8j+4eDi5vvywsrywNlAdHR0RE1RWHd+bWF5eXZydn9kc3FT3NbH1Njy9P74+Prz+eXk5vj21VbRU9HXRHBmeXB3QExMc2RwSl7B2cBWVNzO+eTm5PL29Pb38fzY0NTUyvP82Xd+eXF2Z3lyfXxhe0XYU318dkRWUcTKxVBLWsz+/8VXRUle19j11tVdUcv/895dSE5EVc30w91XVsHy/v3xwNBSxM7awVt3f39AU1XZ0VlISFtT1FFOQ1DE9vfM2FdaRldX0sXC317Y8c31xVp3fnB+fkhxeXt7dl5QQFt1c09BWd/eVl/S8fLl5+bk8vf/8/3ly1RZ11fU2NJMfH13cHN0dXphfn5yT1hfcXF1XtnN8cvI8fPg7Ozj+PHG3cDYw9NJdXVIVVBBdHp/fnhlZHlkZX1wUtvxyNnfUsHJ9Pv2zMfaz/b889rTRkZS11FYQnR2fHBxd3RId0tETlxdU97fxfD5+vbO9/T09szz/fXJQ0Pc01NYQVl0fXx6cHVOQHdAWEVPRtTR3NxQXVhSXFhdUFfeXVBOQdTXVVpZ1VFHX3RJSnVbSExZWFdfUdJUwMDc0dLZ29DX28/AxN7A9/n5ydra39RV0Pf98PPx9PbIydjW01JW11zWVVhAdU5STUZKfnd8fnx8eX5nYWNnck5bQV5aQV3H9fbx8PH///L4/Pz79fTx9PXE3dxCdmZgYW1nYW9mdVxZXcbww8zw/Pv9+Pr85ODj5uHv4Pv1987VRX9nY25uaxVobGdkZn9/f3ZlTENxU1lR01P0/PP/8eTg++Pp7OfH2E98f3lmYHhxWdPbycfcxMrx8fbOU3R3SEZHTNbUWMf0++f4yklke39yfXhzeXNa0PfP0FdM1fT3+/72zFNdRNXG29xSV9rJ+/nx3Xd9fn19e3h8fUxF1Mr9+Pb95fv98PDN1VXdUkJU3lFT3fHx2lZZemBnemZnfnJxZX9aVNDU2lDe9sz29cXA0ML1xvHx3trY9PD199ZLfX9Adnh0fWVlckZRzP3w9fPl/Pj7/fDcxMre8/71zdPFwMfQTHJ9ZWNjYmRkYWV4d0Hc8PfF9fXx5OHi4Pnn5P/55+3g5Ofm5+Tx98JbcWdia2tubm9hcXVFUklKSVteWNPSQXd8ck9yX9Hd9vL4+cjIydVbWkNCSl9cTEdR19rTXUR1cVpW08TS3tVZXlDdyPTz5e3r4uDh8P7y8f/Lyfff2/b8+/70y1BZ1VDdRXZ1emR2fXdNdk5LTMbEX01/ZGZhZWdld05HTUPT1sXf09rKzvPl5efl8vHJ8+fh5P7y5+T68tpXcGFjaG9gYHpnZXZ1W93H9Mjy+ubt7+zj5Prl+uTh5P365f/y1193YW1uFRQUam5uZmVhe3x0XdTS3tTf28XK9PTxx8za3sPO9PH13VpxTEd8eGR5S1j19sHM1dva0uTn5ezg5OT85PnCy8/a2Vjbyt/9wUZURd3Ydkh9e3F9Rl50SHxmcHdczNPT11fcUND0x8z0xcfH9+T689xNQ3J6fHt+d3ZLRE1dT3d0dERZV8DEysjf2sby+/7l5fz/8eXh+/fXdHBwcXdIdHZ8cHx7dHB+eGR7fHBNWEx0dnNPT0RFQlZTUd3P//r9xNVHQE9GXERZ1FTZ9P/h4+Di4+3i4Of20tBHSkFLcHFkZHt5fH1ER3F9d3BwfGRyfnlZRdDEzfb09vrl5eXn5vvK9ffA3V5dTnJJTUtISk1HfnB0fUhJc2VjZHh7dE3RV0TUzvfw+OTk9sryysfI9fVXV8XXxM3NwU9DUnF+d0plaBVjZmR6dFpzdtHewvf/5fj35ODm4uHm/MLxys3w9vfXSN/R391MWkl5dnF6eX5mYmB0QH5+dFlxfUdRTkXcVkxJUsBTXtjbVEDR/Mzb3NFFQkXf3Nz3+fb28fPz9/nzzPfy/P7Kzvr2zvX3z1JAVENAUNHVTn12fWd5YWBjZVtAdEN2TnZOwPHx8fX3/vzl+fT2ycv52sTDUdNyZGV8cWdvaBVoYmNmZWVwcXZU2cTdwM7O+ebg5+T65fzM4ejq6PreVndaTnJ1SkZNdEZeRUh3XUBLxcfe3NFaWUxE38L3xcryz8XcTHx1e3N9fUVA1/H2yc7y+vL28cPSRkBcS0JeTHZ/YWdtY3J9enppbWJuYXp+SV/1/fT45uXn5+iXl5CTlOnj5uf77Ojm//Xk4fPB1npjYm1uFBZuaGppa2NnZXF9ZX56fXRFzcDWWVP0+fD4/Ofs6+7i+8HZU0NMRd7L9sJAdHZ0RVFXU1FdS3deXFNX19nO8vr8/f/88VBbWEbQ1k11dExX2Pfx8ffexM/EysnCzdhV0l1OS0x0ZGZ+SFlOfmdtFWxneX1xRdbR8vj64ePr6ezqlpfq6ezh+Prk+PrL3VFJRld1cn5gaWtpaGhiZnl5en5EX1TT2NNV3cDG0NPbX1xFxPbA9P/w8f//9/TO9fTL2/f+/vH5/fTL8PXGwMXdX0BNT0FbdXJzdHB0d13Fx8pdTEdyTk1ydnJ1V1bA2VzS01PZ0sP0wc3F18bYx/X3+c5f1d7O891Ac2ZgY2JhbWJtaWNlcExC1tBdw/fz4efh7uLs7+3o7unu5ubg5PlUdn5uaRQXFBcXaWoVbm9meH5zWV3S9/7h5+Pm8vrk4e/h5uDm7OL/+MnQ0EZ1dnh0TUh3fXZPTFlc0dtWdU5wdnFmYGxuYm9mfnXc0XNzcEJQTFbRWsX95Ons6ejj5Ofi6eLg+MnN1kbWQk1KZ2FiYXR4bW9oa21ifH5+TXB019L75P/89cnz8Ofh5e7j5eTl7Of09dFUwsrE1nB6YW9sbmN6YWdjY2FgZ35hZXJ8SnFEzNze0FHL/vvm5uXi4ub7//jw2d9KenJ0X9BA0F1Cw8n28dTJ1UlU3M3xUNrCUNjL+u3k4fzF19Jf3HRzTEZTUFT30dDB28zz/O3n8fvb0Fd3TUh6emBtemd+Z2luFGtjb2FjaWFjYHdDVNZZxvbm6pSXluqXle7u7e3i8fDk4ePh+flXWF9eW3J9Q3xlYWB6e2ZmY2ZhZnhxSV9FWEJd3sT2ytnGyfz//OX65/7K3NnH98/e2dzdVUdJdU9KS01bW1JPcH59cUB1SEXXx8ffXVlTUkdcRltSUdPawv3z+vr75+X8//H8/fb03l3VRkZxc3F8e3R9fnljZ2BvZ2FwUlHNzNv28P/g6JSV6ZSUlevg7OTC/f/D009SS3d2d3Z4eHhkaW5saG9jZ2RhZ2VmZ2VMQnFJW1FZRVdZdFTO9Pb67pXt5uHj7eyU7+T75u3t5uDk9NjG9NpFRXBmY21kZGBlen5yen59dMb10dZc291fxMvA9vfl+/T8+snQWM389/H59tpPQ1x1XsLSdWZwWnB9fXBkYmB5YG9mf3tkfVLQwvL64OHj6u/plJTq4OTl+vDx/c/D3spcT3BzZGsXFGpqb2RhbG1kcEhV/+T7/Pzk+vrg4frl5PjK0c/1xVVGR1VbU1R3fXVBRkdXxF5CfnJFWNvzxVJHcXFzfHN4ZWJsenlDUENxcEBc09rw8vv5/uf65+Dk5Of75Pn+5crCVktNd0lSRXN7ZH58e3R1fWBrb2JjcUFES35OX1Hc3trbUtXax8r7+v/w5+zt4OPt7eb6/Mr1yMFfdnx8emFjbWxrFGprbGd+eGZkfHVNXtrMVFJRz/7h6OPl+Pvk/8nLx1BGSkFaRNRCd0dF2cdX2t1FdHlxXlDdVFtQWtDJ38jB0NNHdkFX9PTF9vT3+Pjn5uX5+P39+PrKVNREd3dyemBpaGoWFhcVFBdraG5kcUN0dF5UUdPx4OHg6+ns7+nr4vrn+vXByfrw2fX12MHL88JaRV5McU/QVXF2TH9+c0R1cnNxf2Rndkp1d0ZORNX28szby8Lfyv3z8/rm/PX0+fDeU1dSSnRUVkh3TE5zfUZAdHVOV151UFhCTkdRWFjD98ZZTlTd1sbOx8DL8vz98/Pa1FLQ0l9UwtrcxkR0c3N3eGdgYHpmZE1OT1DMwsr44uzl++fh5+Ts7/vx+ufn+Of50HZ2T3Nle3B6YGR8enplcHJmYX97ZHhzc355dnd1QFTRXE1ZUUBd3sfczPrl5+Dv7+Ht6e3+9v3x2dfOzNrAz8tafXVIe2R8dnpgendLdE3cUdP35+TxyMzB3tj3+uXz+/bAxNrOwtFUXkBB08nz21NKdnB2SXRLf2NoaWNhcklFcWR+dkFQ0svVTkpZwvTw/+X5++bt7ezs4fPR3fXzysj010t3d0Nd01VUR3dJTV9HRtDF38L/5uHn9dBISlpYVFxDSU1HV8fx8MvCzcDA983C1UJR9fb98s3ddXBIdGRhaWsQExYUYnpzTk5GxfX+/vP6+Ofs7pSRlJTp4O/olZXi4fRdUnx8TXV1fGZ3cn9zZXx7Y3hwSlpMRkd3WVfRycP1UH1KUFPQ1VXVStfKyPD84eLw/Pvl5vP0yFdAWlXRUURbcG1sZmFhYXl5fWVleXx3Q1LL3Mf9/OXk5OX6//nk5PveV9pIfXhyT3J9dVtWU8L03UFc3VtzdFDRQF3d9v33+uTxz/Tk99bZyN9b38bG0lbG9PD29PfVcEtEXEVAUlBAd3ZwcHlke2RmYGxkYGNlfklMddnbVdXK8MJYR1JJQlpW2V3a5uDn5eLi9sv2yPXY9fn99Pj85OXw5P/W3NVWT2dgYmluaWxgZ3h2f3pkeXZfxvby+vP18/L99/Hl8MP29sry8vb00ddASnVheHxvFWtiZGVzSHBzdVjV39n19MtVR9bV1sz3/vr//MPTwsv1z8DN98DA9/T0xN5UVNRHVtxMfGV9d31PVl5QXUJV01b3z95YcURadF7H8/v9yfXOw8/0zV1McHJMSFLUSlpES9Rc0/H3VEV6YWZte3N/cWZhcHt5WNHYWEdS11fG//71wPfy+/j74+TCzsj45uHs4vzC1kdMcHRXQ39nY2Flclhc0dBcXlHc28HSQXZxSNz3w/T80dVfV/D2/+bxVl3d9/fK/fvDW3RLSnNGRn1gbm1hYWV8dnpsYGdzW1BET39lSlr05+bv4vj++/7/5uX+yF1OTVbVwfbyxltMXVbfx9JWdVPJ3/Pw8/tTdN/D9Obk989JU9FZyfz4w1hyeWV6TlBbQHV3SkHc//LOUnl7emdCSWFtahRtYH3H2FFWTHHVXML/zMnU2Mf0/eDj4efk+fr6/uTx1U5NTN3O/+H3W1tDUMLz5PzGVldTVNjM/stXSX5len5yeH1mZmVnfFrcx9dOXVNS9Pzy8lXTwsj64e7p5vfHXklX2FJGfGBkZGZ+WVTeV3RMe3fY39JYdVtAXfX5/fdRd3B5Wfb0ztxD0cPJ+eDi4efbXUNay8zNydLRx9/c8P7B3XN4enJSXUVCfmVwddP75uf/3dXH9O3g+fLI1FtFTcPKVdFxZmRmfGVnZ21ua29gfUN3cWFse07XxsfzzNzVwcj54uD7yNpd08n39f7z/v/45OPs4/nK31JczMLbXHR4ZHfXwc7RW3FhbWVAUkFMSUpQ1cTYzPT78cPYwv3LxMPYWVXf0lfZ2dhBZ2xjcE5OR0BxfHJ/dtnEwF5zfX9aX3dBUVZT0NrT/Pn9yEBPRsDPwfLz2l9X9P3i7uPxWXN9XdXY2EZ0TkffwPb7yl1S1VH18sDIxXBP2d/c8fDK3nlnfnZFXVpFSHNNUVLcztFAcX94dFZaSEx0X/TE0dreQ3lhY2VwQl5NXVh3QdPd9Obm/dlZ1cf3/PL6/fbl4frm4PvEXEJM09BUWlhET1rRxcn69txOc2Zmc1/WVNtQQEBY3v7EUkNxe3lFXFZeXVHN5e/o6+fGQndzdtnYV0NOfmR4ckvRVnB7ZmNpZXROfHFOTVBXz//9xF3Vw9H3+/7F0lVU2Nz55PZVR3F8fEbE2MLl5+Tk5Ozo4vnJ19VaWsbeR1dQX9rE9vnfcmFob2Njc0ZJQVJGVtr84OXJ1kl2cGR/dntlcnlLSkbFRmNvbmhjeljUSXVeRtHx5emV+s/b0VZXzvDx8eHj5uHg7eP101RQVF3UVNRaVsXy5e3r7/R1fmduam1gYG1heXVB0/fxXXdBW0twVN/cVdPI++fvlevk13R2c3hEQHB7Z2RzfXfS3F51e2VwfktfXljT9eTk+OPg8tVJd3B+dkJ3dUJ1Vsvz7+rh9FBJQUtbwcvM9PH55ufu7uTNUllMf2V6fHB/d1T3yfHk99Ncd39zd05U3lBYXMfN/+3kxF5weGZjYWdkYWVK09DO5flTfHl8ZWdkckl/dN3C/ODrlfrXWHZ+f2Z9WnVZ8eTtlJGX4+Hg5vHTW3Z1c3fT8fPn4eTJR319YG9sYn9yZ3Xc3vLk4OTwVNxYTUlFwUJIRMjw/uX4wNVOcX1lZGVxdklez8j05ef89NV1ZWxhZ2d8QEPb3Nr0/vLfSX51cGR/T1vQ3vfm7uqUlOjhx1Ref3ZR0MzXW1f35e3h9PRedX9meXRYV9XYzuXm4uDwx1FMZW9pYG1memBlXMT3+fzn/d9MYGNxYXdSSUrB/PD/8/PE1XBkYGBgZ3l4clLKzfPz+f/62NDTwvHe8vD9++f75+Dh5eD1d3JyT09HQNHF9/bAzfbb2V16e2NiZ01fXVPNw9fw/PX2UmBjbW5jf0hY3PX/+ODt4u3t8VhHfXZ0eXxIUdDX08RZTHVla25uZHJ8fXBYVtvN8/z/8t58TVVT39nYy/3w5uf5+vr0Wn51VERTRnXB+f3n4u7j5+XOU0RIcHx2cF3J3tTC9NHf21VEd2VjaGlsYXN3WM/3xvf89NBLSnR1c3dIcHx8SFNeVM5RcmVlZUxARVd0Wl3UzvXz4f3AXk5RxMFTxMbByPnj6JXq4PZVTUlH0UhU0VNdV9rO8vPCS3x7ZmZsa2JhbXp12crw/sj13FFBX1hfX1VWU9/18fT32MnXR3F9dnByTnVNUEJBW9nWVEB2dHJKTFpFT1PdxdjJ4eb5wHR9e2BgeFpXwfb//ebr7+3j9czAXlpJSnRBXdzC/O/h5ebyVUV3fk9OZXl7cUNGxMTcw1VLXltxdXR8d3FGxVbe01/QTnTe9F5OSXlxQ1/e2/XHVcDTdHN0enJBe39N1/P898/Qz/zKzP738PLVRlTI5Ofn7eHn/sza8/Tf3sbQTHZIRVNeR1ZOc3HVXE51TF7e2NDYUkZ3cWdmZ09CSVtcR1VW3/j85PP/yFRXUEB3WdFWWtrI/vjwXFJ8YmNhcnh4f2FheXxFy/j28fbd2vXz9vjl/fr+9vjv6PrBUH5xWV7XwMZfR0lZ0P3kzcVTe35Q0ML398XW9MnZyv731lx4a2JjbWVkYGFzdnZB//zX0llfxs/e/PXRQEJASlb18dRXR093cmR9SnRzdU93QVDH3dLbyvPk5ePo7efk/PDl4ezkz8XG39tV3/fbdUtKcEtC3dlUdV1WX1pF29NKdVhGUt7Gxddxd0/X9PX/z05xfWF4QFHS00NMVVnHwvPNXNXVREzS3EZwZmZ0QFPb8vnDXUNGT9729cFOcEbexvzk5uT6+fP1/ef+/c7Pwcje9Pry9cfMx9Pe+PXTW01eWUTb+/TJ1UB3fHxEWkpLcHd3dk1dX9ZVU0p0QF1WXEB+fnJKX871zsBZd0pSz/DC3EFBXl3Y/Pvz8czcVlfaxtvG2crz8Pz5+PD2zdfSx8jB0tJWU0Ld/efn+eX0T3R3SnZ+c2RneHJOU9xUzsxUVlhdU1vcUUFBV1BXw/TyzdRJdETZ01RTSnZDQlvc0PXEXk50SVt2cV1EXNzEwsdcx9RLd3FzfHRS1dRSRNzB/f3y+8jYz8TeVVrWTH/UwtDP2sPK09TfVVRdTndPS0DYXVJV2/TP295XUMzY0t/Y29tXV1lHUU5xd05xfHxxSkDUzNjF39nJ111eRUN/f3N5dE5YXlTV1PVQdHd8eGRnf3xIRMbK8fD14eXk4OT598TD311dVdfQVNL98t1HeWdmbWVze39OSljVVMjx9/f//Pv19PTB9Pz95+Tz+/fG0lpnZmNgZGFhfnxyQlvG9cVfWE53eGR8eHlaR1zf1vXDydj1/P7dcXR8e311SVRVzMvyyNvR1VVdx8rMzcJS09bXVdLMzdvc2tTb115fWdXKwsDZ3NZX0tXXXFFU2tdbX9jZ0vb58NlBQ0xhZ3txQ1FOT0V1Sn9yeHx0SnF9eXh7eXRJWM34//Px897R0Mfw5eTw38388vbExt/TTEtT10ZLVFxXw/L6/dBdR0RBdUtAVtTGVVHVXsb3/+T69F10YWF4Z2BhenVNWsTHUVFYT1XZ9PZbdUBDWkXTxsLYVFZ0c3NPd0tfW0Bzfk/bzs7Cy8H388f19dDFws755uPh+81SSkxKTlvVwtZGRHVKUNfdxsBeTnV9fXx+cE5MX1TRxN1UUV9d2dnTX0RSWEJW9fT998zGW0hDR1vWz/P8yMrIy83Z3ddYS0t/ZGd4cHZ0R8H55+Dm8s1EcUxbSkXb31Bc0/f9+uHi5slUXddbTklBdHFZ01BJdXx6fkRR01l3THZzc3bT8vDw/M/V0c/xzPnj4uD78P76/snc0VBAcHdLcXJ8ZGFC3tPSW3RzfHJ5cXdMU8PP28z65fnj7+7u4+X2wcNU1MnFzVBDcXRJdHhmeXB2V8RV0VPG29nw8vPK0EFHXFXf9Pnn5OX4++fg5tNdQ31+Z2NiY2dkclD19v7lyMDJ8/TcxMvB39nbzvHz/f/28Pb003FwfmdibGdxc3xycXN4StjHzvz988jW2fT9/vD+88/0zcZQzvz7//n/zMRVUV9CX0t1QHxken58dlvPyMr7+/r4yd7S3s7M29nT2/HYXtfay8LP2FtaxMBaSXFOWVfXQkp3dnF8eHl0VFl3Q0dZV/fh4+D799LYwNvbxPfy/Pvz5ebk+ffMwsbf0k12SUxGXNnL/+X9V1XdRnZxSXFxcnJ+f0Zd1M/I9/LI1tzK9dpGUtlX39tcdk5GQFJFXMzIxU1xeX99dEdOQEhxc3t9XcL8+/vh5/D7+uXm5fXC3VBaTkx5fU9TWUTU1tFdQkxY3/3h5/n2291Uw/Pl/83XXURJQHRzd3RCX0RY1NB2Z2FleXdaUlhUUXx2XN3Gyv/30VFHTFLfwsTT19fdz95HV19YV9ZSdn92dn50U8TL+uf/989aT1hTzcr12UJ0QEle3s31yvPCx//4zt1WV1pAXEt/emRtbmxmZHB0d3VzZWV/SFXdzt9bX13dyfD45+Xg+83BV9RFfXBwfXB2fHhkZ3p1Wtbbw1ZMQ3RC0v3k+Pn59cTb9uX6x9VGSUl+emZgZGR5dktBVkJNXVrC8P378PHAQHB2f3ROTU11XUV2cXRJ1VZW19fAxt/J0lHBxPTIxdpeTUZ1X9jRycNYWVhxcGV1xNHH3kRxfXBxdkVFXtRW19VHRFpR29zG9sjWRHdze3FPd0FEdX54QEdMRd5YXt7QUELd9vHh4frn+/3xycVTRVJAd0RWQEpwcnFZy83R8M7TXHJ4eElIdV/RV1VRV9jG9PPO9Pryzt1SX1/U1UTY3kZHd3plcF/SR0pwYGNtbGd7eXtwV1ZRysvC+eDr6emU7uHm9s3OxNnE8cJe1dF2TkVHRUdHRXJ7f2VwT9XG9vzz8PLw9P/++/7x9t5bQU9NWVlGXl1ASXZ9ZGRyTU1A0VBKSnZ4fHN/dkZKfXBLdV/z5Ofh7ezj5/7y9sjMw8bY2dvWVFfXx8HJ8PZQcHd0QNRX087J8fz8/Pz9+vj4/Pv6yNXX1VPfU9DwzFdHfGdnZH19fHVKdnN8fXBzdkpbWFbHwcLG9eTg5u/o7uL+w91UXE50dH50QExAQFD09fX5/P330lZYQNfY9f7998rA387y//Ty/fLyzd/Q0FdXVVFf2NJZcGd+dXda31xXXnR0SXJwT3R+enJwdU1UyeXm7ezu7uH7yd1bUlNfWFtOd394d0BGW0dxQkBKS0p3RVHa9v7j7u/h5uDg+uTm/vfB19BSQVLSTtZ8S1BmdE9ORt3W0cbP1UZ3eGV9fXdOdkN2Q9zE/+Lv7+Dk5PPMXXJwfHt8dkNHSEXV0cv1yMJe1lZa1kZB0FHV1tfQ2sbM0dn58vj7//7bXEVM193Q1UZ2fGRlfXpA1FpfQVpQTHR8ZH1yfU7XyffN9vrm7OLi4uH8xF1OcXNxc399fXJ0QlZW3dnW0dFXT3dBRkdWw8r08v/59c71z/L58fDI2FNDdHJ9fXd8f39xcXxK1dDRUVzdV0BzeHt+eXN9fXF2XdDZzPzg7umU6uLy0tLG3tzXS1pDdnF3SFFX19RB3VxNdn51Rk3czPf6/f3l/f/n+eX29PLdSX5ySkpKdXx/eGFnf3p8WdBVTVhYcWVgZn95c3N8R0NOVtXG+Obg5uTg/9NPcXZHV1FEXlVEV8bEwvr68cPC2l92ck9EVFXV08za3cXB1Mfh7OHg4PPYXlLVwfXG1NVScHl8cn9PR3d+cHxgbGhqFWNmZHh2Tk1e1sz94unu7OPwytnTV1XaXE5PXUxGTE1L1c7A2t/UTE95ZUrE9P/y9vb19/Py/uPk+PnlyddYfXh/d39/f31/fHN3WNPQVFhHS3h5ZGdmZWdleXJNcH1OQFXw+OXn5fPP2dbfyMjGz9vQVF3R2NDRR0pISnR4ZGNjZmRxQcTfw8j29vzh7+js7efl+crA2t3cVF9YT0ZJfmRnfXRwfX59cWdoamhjeHlHRkvV0Mfz5u3t4u7p4PzCzNJBR1NASHVASnx+SkRZX0ZCTUZ9fnJ9c0fTxNnXwt7Rw/Lz9vH38Pzwx9DS2dj38M9ZXVVId0pBd3BBRktyeGBoFWttenZwfkFSSlr35ubs7u3h5OT/zN3C8fP1013a0FZfXkhxTXR9ZHpkYGF+R8DNwsjL+P/l4ebk4OLm+vz69FVFTEpDSnR4eGdneHJ+Z3Z0Q0l1cHx/eX1NVVBSV9fd9/jl/+Ht4OPg5v/38f318vLMztvR2MHSR3ZR3VjV1k11c3FCW8zA1tjez8rJ8vPz5OX/+v7w+crDVkVRdXh4fntyeWRlZXlmZmRiaG9mZXpyQ0JZ1PHn4O/o7urq7ens5+X68/3C3FRLRkF0dnJzd3F1dVhWUkVX3cbB0s/29/7k5eX65+Hk5Obg5vr7883JVHV0emR+fnF9fnF2SE12fnhlYWJmemZ5f2Z8RNTX1Pfn//ri4u3s7u7h7eDy88vSzMbcUnJ0f2BlemV4eXp6dtBDcdPWwP/k7OzolpWVlpXp7uT8z8jFZWNjbm9gY2JvbWZjeE52cHZ9cnt8fHp0SEbd9fP98/rl+Pr8/+X68/Dx99JCT3R9SltFWFpZQUZTUEJBTk5DWtZeWV3R38v38/n75OPu6ZWV6u7t5vLDX3B9cHJ3f2djYmxoamxhY2JtY2NkZWZ6TVXa+O3plZfq7unr7uHn5PLKyVxweX95Z2BibG1neXJPVVle1tZTXt7X19j0//7n5/j65Pvl5OHj4+bxXURyY2JiYGVwcHZOTEhxcHF/eWRlZ2NkZGBmcUNY1dfM+OTm7Ovq6pXq6e3i5cJdUd1ZSGViYmxoa2lhZ2d4enl0d3xwQtvy5+zulZCRlpaUlOnv7fvIVXltaxVqFWpqFmpuaGZydUJNQEpIREVYWF/b9PPn5fL5y8bD9f375ub//MpdS3N0RFnW30Rd01RQUFZU39VZWUxwfGdjZ3x3SEdBwPHy5OLql5Tr7+zm88VES091fmZtFRcQHRITERYXFhVubmhrZnbF/OTol5SRl+qVlZXqlOjs595Kd3pibWgXa2pqbGxmcEdT3dbezvXLwP7l5OPt7+/h5v755+fh5/bWXHJiaxQVb2BnZ3J9f3ZwfX99cU1EREFIeGBjY2Z+en50TlDU2cz64+/p6OuUlent4efwyNZAcGVtaGtuYWZkZ2Vke2Jgfl7B8eHtlZeXl5WVlJSV6+zk+dl0Z2JtahUUFxEWFhYWFxVpYmFlTNHdx8745eTg5+Tn+/3y9fX85fnDWk5wemRnf3xydH13QkRBdEpW9Pf098rxx1JISkNN18bG8fL/+uDt7+7j4u3p7uD4z83TS35nbGgVFxEQERRob2xjYGBnfVTA8uXh7+/u4uDh5OPs7O3h/vDLXUt4Z2RmYGJiaGlsYmd9TEnUyPHk7e3h4O/s7OLj4uPm5ub75//N2Vh2e2RmZmRyeWVzS3J+YWJgZ3BJX1hHSnZyfXBKWV9VzMfewMr55+Dm4ujr6Ovp4v3b2E9/Z2Fia2hvbWN6fHJNT3BB1dLK5eDt7pWUlZSUlZXqle7m/shfSXxmb21vFBUVFhIdEBYUb2FwUc3l4urr6ujo6O7v7+f/+fHE0ddJdnZ2dnd0T01b1VBSUdVQ0Mr1xvD6+v33z9ZET3VH09PBysvBwvjk/vbw+f7l4eb7yMBSdnd+ZmNvFWtoaxRobG5pb2RyTlHM9fT95+bh4ODs6Ojp6e/t5+Tz20h9cWVhYmNta2tpaWJgZUbZ8+Dp7u7rlevu7uqU6Ons7eD6+PfDWHN8fH5/cH1mZXx7emFgYGBhe3l0dnZaWURMQEdd39nfx93bzc3R1tBUxPDy5Of/9fb8xdba0dHZ111GWdXWVkVOUtdX38/y8sr45+Ps7uuVlJGRlurv4uTNWkt5YWxoFxYQEhMSHRMWFG5hcFTb9fzn4Ofn5ubm5OX/8/fP29J0eHt5fX5OSnZ0SFNfdHRb09/B8vnk5OHn8tLawd/czfP0yPT85Pr54ePg5Ofg5vnz/vLTT0t1dmVlZmJoFGoUFhEUb2xtek5dUdzx5fv45u3i65aU7uTm5MFecHZ2YWxubm8VbmFhYGZ3Q1L15Obl5+Lv4+Dj7+ni4eLv4uHn8t5SRV1JSkhxf2ZlemRmY2d+ZWd6dHF5cEFJdXFA311aQ0xJdEdWWVpaVtVARdbJyNv1z8nD19rE01VTWXdJW059ZXhwcHlzcUVITdHQwc7+7OvqlpGWlZWX6+H68MBTe2ZtaRQUFRcQEBEXaGhjZXh/X/f8/Pz65Pr6+ufk/uX90EJxcHRzfn9lYG1kc359SFhVV9jz+v7+5frw9fzl4fjLx1B1ddTH3dDFzcDFy/758fb0wNZRWFJddHF8e2NgZG8VFRQUamhjfn15en9wTNP24e3i7Ozn++bm9dzT1VFHdnV2eWZhZGd6fnZHdEtSU1XB/eT4/v7++f3/5uf75Ob49//z9PbKzcdFdnV1fWd6eHl6enNJcmZjYWJsZ3p2QkFbQE9OW93HV9DQ21BTzcre1VdeQkHS0MHG29jVU1HbxEV3dHdwdNLw/cDa2N3d9vvg7u+VlpSV6uri88vE3V1FX1ZIZmkUFWpsb2BhbG9iYWZwRU1LR11U08ry/PP0wdZFRkN1dmRkZGdkfkJJf3l2RFbB/uPu5v33wMHIyv/58vf09vXNw1dYX9DGzvL65+Lh++Xy+uPg5vv+8sLd3dxdcmwVFBATFhdqb25tY2ZxRMD9++Ps7unr6OPz0XRzfnNDQEx3emNtYmR8dHRIT3VFxvvn+Pvn4+ztlZSWle/s5//9/fz92dRES0hPXlp0fWdkcUlXxfbKxEV3S052cUp3cHN2dtTTWEBxf3F2RdbYUHV1cXN0XM/89/H/8vP95OTx0UpwcXJ/dlpDTHR2TF9Vxf35/f/h7euUl5Xv5/r5+frk5ffO1kJ3T0BBS3hmZ2NsYGZibGBheHZbzeXl5eT75eX5/P320UxLeXt/fmV7emdldlfN8fHy9sP18vn5/Pjy9PXB8+f7yPXD3NDewf/m//fPx8T3/vrk/8z3yNr18dhbSmRgYGBtYG1uaGpqbHhLXN3Zwfz8+ePhyMPeWkZKT1bSQnRLTUtIX9HH1nVAVVbEzsFV3sXD9PPy4Ozn+/jk5uHn5+T49ffMyf/yxkRYXlNW1cL7/srFx11JQnRlYG1uYWxuYWVkYWVxRdfRxPL0w97SV8fx8vb3xNHD39vI10dOdnd2dUNRUkNaUF9YxvP+//7l4ezrl5GU7+Dn+vL38f731URYQ0pBXFlOfXt8eXh4ZG1paW9gZHxLXVxEU1dR0PTw21NAT0p9dEBwYWNnfHZLRtLOxcTy+f755uf898XIzdLf3ER2dE1Tx873//70zfD/++bs7+Lt4+/t4Ob7w1JaWUxxfGR6YRQWFWoVaGxtbWdz383O+Of48fbyy9zU1txGeXp9emRnZGdnZ31EQEReWUxe0tvK+efi4+Tl5uPh4uzi5/j55/nCwMPVSE9fU1BfUtvXXV7HzNrb11hyZ2dlYWxubGoXFWljeHZCXFpEUNZbVlZZTUhG2sFQTURNZWR/d3F3d0NHcXBaXkJbXV1YWNz+5ufk4+Ll++bg5ubh4OTzzvbC0tVTQHVH1NjWREhIZWNgf3F5cEBBcXl+d3F1WVZGQkTQ1Ux2d0t/YWRwfHx8dUx2QVfQ3N7MzV9S0Mv12sfeWEt3QFJcxf/n+uTg7+Pk5uDn/f7m4+f99M7WTHRfWE1JdXBnYGBgYWBjZ2JpYmVIR1/Hy8LN9P/xy8vAXkpOQXdkYGBvFBRvZ2R5cXV0d0vcyfDn4O3g5uLi4Obn5+Tx9cvDzdNXX1tWVNrOycr3y8/x+Ofn/vPw2UdGRUJ1cXxhbGtqb25sZn9KTFbJyMfd2MHQV97F3dRZTXF9eWV+eX5xdn5+fXBwTlDfwNvAyPTw5eLolZXo6ejv6Ovs4Obh5/PI3FxPemd6eXB1S3VzfGV+c3VcVEVDTkpDdXVLSE90dUpzf3J/YWJhZXt7enl4ZHp2Xlffw8TbUkxW28n2/OX+/PbCzcPFwsLM8+Ti4OX+8vn48vrn5ubk+P39/PL39vT32lJfR0lxfX56ZWFjY21iZElEXNvDxMDCxd5XX0ZFTUlxZWBta2tob2NnfnN1cXZD08j8+uTm7O7s7+/t4+b7+f78+Of78ff08fbw/fDH0NTY9fb8+ffO3dbSUl5aQk10fHx+ZXt/e2ZkckJT0NJTTndwdk5AW1FQdXBwc31/e3hkYWFmeHBwd05PRdf08/jm4u7p65SXlerr7uLm5OX/8vPwyt9VV1dV1dnxzMfL9vn78czHzcjcXFpAXdFTRHdxSk1AQkl1d3B9e3p8cXJlZmZnZX91QE9zfnJLdXRbV9bexMn2/vr88cnG9fjh7e/p7u/i4+LplJXo4ubh4ODl88PaVUBNWdHWR3N9fHhleHJ0dHdPWFfH9MLQRUlyemZmZmRlZGRgY2Jsb25vbWBkeXZCRVtTUcf1+eDp6uqVlZXq6Ojo7u/v7+Pk5OTk+/PKzsL2//nn5+bl++Dg4eXzwFJ1dHZ8eWZtaBcXFxVubGNmZ2BvY2Z5f31ycHd0QUJHTn96YWF6d1pR1cHNwvzl4OLj4+Tk4+mVlJeU6Ozj4OPj5vv+/fb38PTQUlpNT0tOQUZCcWVnY2lqbmFgZmRlZWV4eH54enpkZWVkZHp/cndCXlbc3tbZwM7GyP74+fj//f/5/v/65+fm5P7x8P/4+fr7/8va295TQnB8cHB3dEpxcX5kZWR4cUpKd3N5ZX93dHJ8cn9zfXFGQkJbWVlZR1LVUVZW3VHVz8vN0lxaUNPH8f/9//vy//zz/v/4/PPw9///98LZX1pTWVtPcmdnZHt/dkxATUpOWkNJXdPE01lZWUJ0S0dAdUdEWl1SVtHS0tvAzvT0xszMwsj39/f3xtDW1EVwfXh6fHJ4fHx6fHdEXVlY0NBS08DY1F/U0FbT0sDB0UVFTUhH1sXGzcf0zcn/+Pn4+//1xMLCwMDIw95dXdnJxlZfU1Jyf3xlZm1tYm1nfkpFdHJ1R0hKXtnWVlNWUk9CSXVAS3V1dkNF19nc3cjx8eXh4Ofh4OPn+ubn5Pvy8s7B9ff58cLA3F52S1tOcHdwcmRjY2JtaG5uaGxgZntkYWdmZmRzSElPS0lzfnNIQFteWVta3cDx+fz+5ODm4ezi4+Ph5/j8+f3w9NjVRFfa8fr58Pb39vfw88DTRUB0eGVhbWlqahQUamhtb2hubG5vYmF7e3p+d3RPWF1V09vLyfbk4Onrlero7ujo7uzg5+fl+eXk+vL9/fH08/r6+PbO2FZBRERNSHJ/e2FhZ2dkY2FhbG9tYWdhYGFnY2xjZ2RhYmZhY2V3WlxE0Nrcxf3j7e3v6Ovv7Ono7OHh4efk5OXk//f3wNLV3MDY29/V1UVf2tBEdUlPT1Pc28BST0ZDdHBMSX16Z2V4ZHhKcmZ6dXNw0cH18MLL9/T09vLz8Pbx/vzy+Pry9PX0wvDl+Pv598j0wN/a21BaRltZQFtaTXJ9f39wdE1PTEt9c3x+cUJTU1nW2cD2/eX/8/L8//zl5uf+9sLN10deU0d0S1dcTV3W2lZbXV5dX83zyt5WVNVEQV1dWHVDUUJN1ddQSXF2cn91UlNETEtfUk5b0sfNz/b4+uHu6pXp7+/i4u/u7ef/8PHC0sbOx1ZXxdNQ1t7TTn95Z2NjZmdnYGxiY29uY2NgYHp0d0lXx8PRUdzSUd/L9/fG1NvH38bIyMr25Obl4ePg4ebk5f3+5ebn+vvl5Pvx98rT1FTZ00RSV1BbSXVyZ2d7fmVkenh6YWBmZmNjZnlnZH10SXdxdnB4dFT2/fD++/795ODi4eLp7uLslZXv4+3v4Prk5+Hl+f732tvPycXS3NFZdUhOTH16ZWRib2xjYGxsbWNsbG1ib25sYGZhenNycHRaVlnUyf//+uPi5OTm4eLj4OLi4eTn4fv8/vvn5fv6+fH3887d2t5RRU1NdXV0SkdDSU9BUV9LSEl2fHx+Y21mYWFnZ2RnZGRySXZNUNHY09fDy830/uX39Pzw8P38/vj5/OTn5Ofk5+bk+P/2wdLVSXtzc3x+eHplZWRldElzcHx+f31ycXN/c0Z3ckRfUdXZwfX12sv+98zIzszBwNrH31td1kRQ29Pf2dzEzdvdzMPRU15fU1hYQkt1d3F2d0XRV1Td2NjCV0VSWEp1SHZKT3R3dn1zSnF8dNDd2vfz+uTl+eTk5eTk+vvl/ffGwcD1x8Hx9Nnb2sfUXUVJdHtkZGRjY2JsYm9pbWFhZnt+c3RKTHFzc3RJfHh/ZXp3cXdEUtfI/fLn7+zv7+vr7u7s7eDl+/j3yvDxysTZz8/A2cLE0d5URH1nYWBjYmlvbmtubWFkeXp5fXZKX19DT0RSRnFPd35kZnl8cXRE0c7K9vr6+efi4+Dt7ujt4+Lg4fj9/PP++vn4//D8/fbIy/dVRkF3f2dhY29paGhpaWxsbG1jYmNjbmtsY25iYWV6ZH9OWEFAWdzK9P3h4Ofm4uLn5Ozs4eDj4+X45fjz8PHw9c30yvfC2tdZR0tNQ05CSHZ1Sk3Q29PeVVpMRlxfUkN0cnpgb29tbW1tYGBjZX1wdE5DXFTN8/n6+eT6+frk4ePh5vj7+vjm4Ob6+Pjy9fH3zN9UXU1Nd31wdnNxcUlITFlLfXt+cnpkZXhkZWdiY2NjZHNydlnRzff/+vr//fv69sj28c/CwMHc3NHZyMza2tdbXFfa3VxNRkF3dkxWX11aQ0BX0839+fLw9vP/8vzNWFpXWnRNW1pcXUx/dUNcwPPw8fz89vT7//fOzvTB2dzTxMTVWU51TlTXUFJEQUdaU9ZOd3J/TUt/dUh3dXdOQXRLW01HT05HQEZHdXx6e3ZMRllW3drC/OTj7+7u7e/v6ejv7Ozh+PLw8vTG3d1UV1TVU1pKSnF7ZGd/ZWBnZGBvbmJgZ3h0RlPUV9PZV9fcUV1FV99bRlFfQU5bXFDexfHl5eTm4O3i7uns7e3p7+Dh4OTzz8rIz8j0/Pzw9PXLzNLdWnRxe3x+ZmRkY2lpbG9ibmNke2BuYm1sYnpnZmV4cUhxdEJRVcLx8fjl4OPv7urq6urqle7i5uHg5OT6/dtWxsbHxMPG3VdQUFtOTUdIcH1wTlJHR15GTV5SXVFR3VBMdHd0cXh8eWRgY2d+dnVd3sXY9/P//Pvl+ubi7Ozi4eH9/fHx98L1z/fw9cj1zNvaycnbwcLNzNBTVl5ZW1BEQU5MW0FwcEdLfXl7enh7c3N8eHl/eX9PW1PX2vby/fb45Pv65fr+/OXm5ufk5fbWQkRfVV1XX091e3xydU90dHVzd0jVwcLH0VJcUdvIw/Dz++X88vLw983eVl1TXtTf2tzf0trGzMj39s798/b/983HVUVOR1PUV0VMS0NEXFNbS3F6ZWRnenJKcXlnZGRySkZZUEp9eXRAWkRf1F5TXdXEy8jZ3dfX38TD9fzk+PL8+efm4unu7O3l/PX99sbe1NzWTXJ6ZWdgZmNjbhQUFxEXFWlsY3l+eXllcExaWUXW0VTa2cr88/bO29vQwMzy+PXB3sLI9PL75+Dn4eHh6Ojp7Of+9cn28ubn+fDYXHd3T0N0eWdhaRQVFRUXFxUVamhpYm1paxQXF2ppbGNmcnZ5fnREWV7a9PP8+ODj5OTh7e7ol5GWl5WU6u/t7+H+/fnz++X8/s9TTUBEQkRDeWRjbmloaGxibGppbGFlZ2VnZ2BiZ2V5S1pWQHZwdklFxfDzyPf/8OXn5Obl5ufm5eTt7u3g5OT68frn+vH3+/r8/f3wysHXWHFleH15ZmZgYG9vYGJsb2JgYGFme2RtZ2VnYXpc0EVORFFTUfXxxF9TUdzN8uHj5ufj4ubl4O3v5fb/8sjIy8nUQUVS3dTd9vTRR0B0Z2Bke3pjYXx7fH1wcXp7dl1bTcf2w1FTVNnTyf3z8cz95fjy+/r03NDezPbw5OHl8PX00lhc2sNcQFBeS0JEWEtLVlHd3sL8891SRXV6Y21jYm9vY21vbmxuFWtsYWZnT9bR1MX08/P74OPj4O3p6e7p6e3n/vDx9PH4+/Tb015xent/emZleXplc3RwfXB0SE1E3vXER0x0ZGJuaG9ubmNzcXZeUEFB18H28fHh6eHk7Ont7OqVlerrlZeUlJfr4f71zdtVVNHTUkBDcXhkZ398ZWdwWXdLQXR9fElbdHp+dX1nZ2duFxMTEBMQFhVuZHl3S0hHxPP08ebs4uDu7uzp6pCQkJCQkpCQkpHr4vr000lOWkh5fn57ZWZ4cXBzfH95eXBHdn9yTtJCcH13d3dxfnhhYmJtYmFjYWZ9VlZaRVHJ/fzn4OPs6uqV6uiVl5GQk5CRkZaX6OfxwtR2fnllemZlcHJ5f3RBQ1fA2V9YxdpNemFmYGJtbG9ua29tb2liYGBhenZzckzFys3Fzc/J8eTm7env6+rr6Ojv7OuU6+3k5eDlztREcnl7eXt/fnh+fWV7cn5zQlBcdX53T0tyfmRmek5ZVsXe39rE2MzF1tPM8fTNw/H5+P/7/fDx5OPt7u7t7eTl5vz0++b5/ff18PHRRHR+entkZ3twdHF0fntlZGF7ZGZ+Zm1jZmkVbGBjfnZAUNjM8v795OT4+Pzz98D3++fh5ufm4eLg7uvt7u/g+PHKwfTC1FxEQkVZ1FN0cHhib2huY2d7ZXx7ZHt8e3t9cn15fHRBcHBW0VpU3PT44O6Vlenv7+3m5P38++Ti6e/i7O/j4+Hm+/H0yMZXWF5WWEBNdUNDXVBFdHllYWkVamhrbmJjbG5taG9hYG4VFWhsZHFNUdvP9vjm7e/s7e/j5+fk5Prn4eDj4u/qle/ole3nwd7d1VXX2Fff0VBVV9dZdntmZ2ZvbWBtbWJmZWZheH9mc0Fcc2BnZmFhckHa9PH65OXk/v/7/Pz/5eTn4uLu6ejo6evi6ZeU4vj+3Vp1T1nT297BwsjEXURFcWRtbmtpbmoVahUUamsUa2F5YGhoaWtobGBkZUjdzfP//v32z8rDxMv45+bh7O/o6ujs6pGW7/j68cRYTU51SE1c3NvFUFDXXXZ/ZWRkY2Blenpxdnpmc1nSf2xnb2kUbmV/eHRWwPT09f74//L+//3w+eT55O3o6unsl5eU48fbWnF+fHFJcXB3QVtTUFrUVENwcUl2f3lnYm9gYWZpaWVmY2oWFhYWFmlmZntPVML/+/7y8PL19M32/fXx++Th7eLt4+zp7OjnzsFQdHlzdnN3cU1YTkNZ01J0eXhkYGNgZXl4dUt8YWZ0dHZ5YG5raG9gZH9JXlXP8+fh4+/u5vP95Ofm4Ozi4uLu7O2V6O7h9MjSWF9CRE9yZXl3WltERUplYGdnYWNvb29pb29jYWBnZmxqFBQUFxVraGtsenBc0fH//+Hj4eTh4+nv5uPs7O7u6+Pt4eDs//n89MBW0dZISkpBUUdLSkVDdXNxe2BgZ3plZHhydnp5c394Z2VkYG5tZGR6fnF3dVn0/ebu6JXq6JXqlZeWl5Tr7unv7+/p4ub6/vbZy/fMwNRR01FWVdVRTnxnZmNgZ2BiaBUVFRVpb25ib2JibW1tYGZmYWdzdkXZz8zx5uHg4uzt6pTq6+3h4O/g4eD7++Tg7+7s4+Ph/vHy8fby9sjJxVJdWU52eGRnZGdlfmRlZX56e2RmZHllYGdhY2R5fUpM1M754emU6+nr65WUlZSUl+nv7eHh4uzg5OX+8/Py5OH49vb09/X2/fHCRHV2e3pyeWVjbW9pYmNlf3llZmBsb2lvYmsUaWNmc1LSxfT85OLo6pSWlOvo6Ozi4ODl8fLn5P745OTzyMbczvby++Xzyff0zMreUUd/ZXlkeXZPT3J6YGV9SkNMSnJ4emRjYHp/cHBax/bg6ZSXlenp6pWVlZXu7eH7zMr/8fbN0d3A9PL89s7B1lfW2tvZ0VtDdXx7f3tnYmgUFW5sY2xtYm1iYGR+d3Z5fHJwSkTVz/X0yPDn4OiVl5eV7+Pk/vPz9MTe2sfM8/jl//7K9/3z//zz9NhbTnVOd3N9e319eHl7f35kY2pobGBkZXx+ZXt+f3F3TkZf3vT74ezo6e/i4ePolJSV6u/l8Mffwtvf2tDP8vvh4eDk9FJKSlnU1tNfc2dhYmJjb25tbG5vZmNtb2oXEBMRaWJmcnR7YWZ8cUxH1/fy5+3qlZWV4v3A0MTz+Pry9MzF0tvL8Pzl5Ofj4uDl8sFTfGFkfXVLXVFHcmRkZ2ZgYGZibGR4eWRjbWgWERcVbGV5d3V0Td385uDs7+qXkJKQl+vh9lJGVNDJ8fL++/L9+Obk+f30zM3//s5SSXtpFxdrb2Bne3llbmhpaxUXFxUVFW9ibG5qFxMSFmtjZXNfyvz2++Pj4ODg4+bn4fvxxlB1fHJe2/jm7JSXlOju4fjK3FNfQVzcR3d9emBpb2RyR0xJXUN3cntkY21vbG1nd0t4Z2ZtbG1ldNX08efv7+no7uzm+/Py++Tg4f7xzNrUVdv25+Pj7O3k5PffRnlgbhVqbmZnYmNsbxUUb2Z6enJ0cmRnZ2Jobm9uYH9D1VtPT3R0c0Ldz/364ePh5/j9ydvY09/E+eDg5/j/5+X2/uHt7+zg5fVURXBnbGhpaG5kcX15e3hwf35IR3VxdXV0cnN1fWVkf0hZz+Xh4OT5+//38eXk/uTn5uDk5OT++OXm5+Xs6Ons5+Tn/M/A8vXJz9dQW3Z6YhUXERcWFG9tYG5vYmNgYGZ7YWR5eHBzdnV2dnRf2snk4+/v4+b49dxQVltD0MH2/uTh4frn4+/p6ZWVlent5v3I2VTQVNHf3t3W01JxeGVhYWJiZ3h9eWVhbWNmZHl2d05d1t/NwNfQw/b54OmUlOni4Pr/+f3w9vf2+uTl4O3s4uzv7+np7u/k8PTQTHZ6YWJgY2Fle312c3lnY2xsbW9tYmlsYGNhZX9xTFPf9/H8/v7//f3y8fXx/fzww/LwyfP5+Ofh5uPj7e/p6ezj4+Hn5OT6+M7F29VaS0FNd35xSUVfTnRKdHJ8eXJ8c3p7ZWVzcXZCVcHy/eHg4eDn5+T5/vDPzMj5+vP09/3x8/rg7+/u6unv7u3i5f/2wcTf3t1adnh6Z2FnZmFmZ353ZWdmZmFgYGNhZ2R8cXBycEBQ08DA9PP3+eXz9vXB01DWU1zQyvP98Pb9/uTj7e3v7+/p7OHk/PVXR19eQV1Q0d9TR052dkp9fU5bRER1c3N8entxdnN0SUTW38LJzsv08ffJy/H9/vzz/fbL2tDfwM3K8/fx/uX4+fz5/c709PXb1NZdd3tnZmNvbWdnZHt5ZG9oaGxsYmFmZ2ZlfmV6ZmFnZHlM38fYwfTFXFhHWdTXyvbKyffwyMPFx8THyuXk+vn7/sBWXFfRUVTFx9RWVVBHcX9/ZXpwQkxwfHN9Z2BmeHx5e3J7ZX1wfWVlcnR0RsvwzcnI987R3szNzM3Iw9vOyPb29/L8/fTy//D2wMfcUE5PT0lKfHJ8f3x8enp7e2Fib21hbWJgYm9ubGZjZGV5eGdnZ3t+cnVId3FxRFNT0NZRWUdFV9XA9P//8P7n4eHk5vvKxtbS1NHbx8fb2NfRyvfP115d1FJ9ZXFGTnNkeHRMSHB6Z2R6ZmFkdlBEdUna887Yzc/08M3D3sTNxdZBQVZS2c754OH6/OTn+P723cPC98fcwtnQWEFCdXBLTEBfdH9lZGBiZ2dhZ2ZkZmFkZGdlZ2RneEVU11JaWFNYdnRYXEROWFxQVdbGxvXx9/T/4eLg5ubn5/Lw+fr65eT7/fLy/PfZ39RYQ13S3t7QXEZeSE1KdENJdnBIRFtRR0FUUlXA9PP29sPcw8PQU13R3dJdUc318/v6+Pjl5OHt4ubn/Pbyyc3e0sBUUFtBQnZ1SXV1dnFLQVl0SU1wcntlf2VneX9/f3JLS3VPTUJPWVHTxVfZ0llfU1PWUF3e2MHGyfHx++Tl5uTn4ODj7e7t4Obk+/v88PLL3tzd29vAy/XBwvbxy8LfU15PdHdAVlpYXENHU9HHzPf0ycnDwMHUV1BYRHdxSFrFyfb88fPw8/L9/fHy9/P78fD+88jQ197VXVxcRFhUU1zU01hIS0p0cXV9f3tmZ2FgYGNmenl4fndKXNPS0VxaQ3FJTUtLTlpdXtD38+Xg7OzvlZSXkZaWlpeXlJXq7+3g/8veV1ffx8zPz/b39fbK3tJTWV5LdHNzcXlmY2JibGNmZHl6dnVyc3J/e39zdEfQz8j38fP8/vvm4ef4+vrm4OLv4fr4/vP28/P8+P38/c7a0V9GSn17Znh/fn97ZmNtb2lobWBlZ2V+eX13SnN+ZXtzSnBLT3R1WNHW38v+5uzu6pWVl5CQkZeXl5SU6+nj+cvO29HU0tHa29zJ9czBzFdYSUtweGVgYm8VFhYXFhYVa2xvbWdhYGRkZ2RlcVpXwfbx8fXx+f7y9/Py8//75frk5vj/8fby/vjl5uXl+/LzycbGXUx2eXt6ZWVmb2sVFRVqaG1ke358f318eXN8eXh/f3l6e35zfH5zT0Zdwvvg5uPv6uvu6unt4uHk/8DF3FlycXV8e3BCW0JDXlBcWFJZTnd0cXlmYGZuFxEWFBcVY3pwfH55eX13T0FfUlbSx87398zf0tjO9PHz8v3K29/b39jT19bY9PL29/n9wF3X2tpRXlXb1V5Cc3Jzc3tgYGd6e2d6d3VYXVxW0MHC3NRcW1lPd3Fzf3xwcHh9d05H1vb98f76+uT6/8Pb13R/ZWRjbmxsYGdkfnZ0SVbO9/D++vnxw9ZGc2VhbG5oYGdiYmZ/d05ERV9SyOXj7ebk+PH29sjT0dxUXtPPxtPA2lXd2MX3//76/Pv//PPOzNrF2sT19cTBwtRTXl1dQkFDc3h9eHJ9d1pBXlXA987S3t9UU1haQ3F0dndkZ3tmeH1IW0dWwvb28//zysvBxd9STk53fHh8fXF0dnFxQ9r3/ubk+fv7//z03lRER0p/en5/cEhLdXVxTsPy8v/l4OLg4+Dl8/XLwt/b3tfc2cTa2sHN8P/n7ejq6uvo7OHg5/zw8c3F3V9SQklCQUVeRE5HWVpYRkJ1cU1PQFpYWEh0fH12fWdnenl+f3h5cn9ydnZ3XtXf8f/65uX55f3KyPL13NZdSX18emV/cUXE8fDk7O7p6+ju4Pr89M3QXEl/ZXt9fXF3S0ZMVvXw5ebg4u/v4+zi4+b6//bNwsTX19LS1drA9f3k5Obm4eHi7OP68M3Z1F5TQnF+YWZ5f3lkZGRhZ3tmZ2RmYWZle35xd3ZCSnRCSU1PT1Fb1tRb3dzZ29BWVNnJ/OT6//7x/fzy/vP0wtrXU012eWdkZHt/dkJE3cD85/v75OXk5eXw01BNdn9/c3F2QtLazfTw5+Pj7pXq7+zt7ezj5/DeVFhESFteRV9CU8fGx/X9/fn//fff01J1cHpgb2tqFBcXFW5tY2Z6Z2BmenRCQVdcT0hcUFtQUFVdT05eUNfC2NrPw/Hy9vnl+/rl5+fj5uXk/vL88M3b0FJPd316Z3h6YGNlfUrUwM70//j44OLt7+Hk/cvYUE9CS3dxcHZORV1U2vT85+Pu6ejr6ejs5/zOUkplYGdhYG1sbG1vb2Z7QFdQ3t7S0lxFTnhnYGxsb2xvYmBjYGFhZ3h8cXRHXFjQwNzR0cTIzsvP3ddSRNX18ff0zsHaw8DO/OT///3/9sHBwvXx987C3NRSWNbQWUJJSUVcUkZbVNbM9/Hz9/b5+f3499hVVEJ3WVBIRFVc09jZ2NrF3d/B98rI29LUT3Z8YWJjb2lubmsVFBdoY2F7R9rP8Pnx9fTB1VBWX3BhZmNmemFnZ2Zke01SwMHZ9vXy+8z08cDH2cbGUF1PTklIQldQ1d3C9vPw9PDy+ODm5OH58vD2/fHP2t/BxdZcW3R8e2V6f3t6c03c9/fw9+fg+eTg/srfREhxZWFjb25obmNmYWRlfkRRT0TQ0MDIxNZZdXBwfWRlZGNtYm1mZWV4fHJS9/35+/jl5f7wyt9XXlJZTnNyZWB7cXN3QVNcWdHCxN7EwPTz9srMx9Lcz8Xd09DUxv/l4ebm4efi6ejo6ePl5eXx3lFFTUlIWFhH1NfU299QRU90dk1HUF1OdnFP1EBwemdkZmZhY2xoFWptY2JmfEHZ9f/l5+Hl/+Hm8PXcWVp0fHhnZGRmeUxFVtLH9uXm4+/u7+Pi7+P6ytFGcGRhYGFjYGdwT0RTUdrx++Tj7+ns4ePj5vr29/3yysPKxtzf1tbJ8fD18fj//OTolpHq7O7p7fv3XUlESXpsahQVaG9vaBRqY3lxcnN0TUVWWXV0dUxKcX14fHN9cHtlf3FLdUXW9//65+Tn4ODg4+H498HB10B0fHxxfXFBU1Zf087x//P95ebg5vr9wNvUWVhBWFlJXFJT0s3w8/jk4O7r7unp4OTy9cVVUk1zd0xBRljSwPH+5eHi4uDi4Obk//fP0Vt4ZmdhaBUUFhcXERAXa2ltYWN+TVpUxvbKzcDa3FzVRnVNfmd7e3h/c0xHW9PK8eTm4ezu7OPu7Ob68vHC31FzcnF5e2RnfkhATVTB///l7ezv6eju7eDg5/L2xFJeQ05eQUxGUF5b0Mb9//rk5Pjn4ODh+/LL3lFbS3FyeGRhZmRkZHl9SkNCXNFZTlJUU05zcXp7eWZibGZnYWV8c3FxdU5BTkNS1VHT/f3GwszE08HDVVVRXEBLWtHHxdrI8OT45+Hk5OXl88nD2tjdVVJZWdXXVNzY28vM9+Tl5eHh5Pvk5fv7+fDKw9xRWEx1dEpPW/Ty8vL//fDl4Of+/cRfQ0t8Zm1uFRcXEREVampub2hpbGRzTMP29vz4+P7/8/XD0EVCfHtnYWFgYXlycUpMUtDa9vXCycPG2NLK8s7HxtBUR0RfdHFyf3ZeTUfcwvT74eDol5To6Onj5vr/01RdS0pGX092d0x1R9Pex/Hz/fv65+Hj4uPm+8jRVlhMcHlgbWxtZX9+fHJ7ent+cHN/ZGxvbmhob21vYmRneXd1dnZ2f3lxT0lAVNDdzPDz9f778/bF39Hf0UxKdnJzWlfW2dvf2cXP2VRfdXZKRlzZwMP18fP38vn5+Pv8/f/9/Pjm5ubh4eTk5P702EJyfHF2d0tOTV7R3NPey8D18PPxyNxV0FpPdU5Ke2djbG9vb2sVaGhubWBkcVLTw8j19PH598XUTXF7Z2djYWBjZ3txRFdXVFlS1N318PbI9ff3/fj4+vr0ycvC2VxCSHB5Z2dxUFHA9/X85ebh4Ozi5+X6+/L4+/33xNVR1VReQ0l1dVPBxvLn5+Hj4+Ht7eP69M1cdnlnZ2dnYGJsbG1neHxyc2RjZmR/eGV+cHdKVV5PU1BbW1bUdXpkc1vGxV9CSVPK/uX13F1Q3dZUdXlzRFJSTX9ldVTWVVNQXNHe2cfWVdrC/efh7O/s7O3g4Obk+PXNy/Xy+//3zs3Z1FdS1tnSwNvCwMTMyM3L9MXM8PT28fbMwPTHwPHNxdrZUUV0ZWFtaWoVFBYWFBVraWJnS8PIyPX19PTa9fzdUlxIW1t1dXVbXEJMXVRT0t7I8/Pz9/f2zcT2/vb39NzT1UBxcnRLfnhyfHJBUdj09ff8+Obg7euU6uvr6JSU6eb/9cFX1d5RXlXQ2c3Jy97Iysn38ufj4eT49vfaRVlSQk92c3F+ZWVhbWJsaGxlfXBDR3BGU0XSx1dPSXF4fnhlZ2ZkZ2VL0ddX3MTA28/0z/b38Pv5ytFXQXZ2cUhH0djX0NLa2tzUxc/MyMr2/fv6+Pz3ysHB8/r+//Pw8/P0yMLWXFzbxsD3/f//5OTn4eH6/vv/98rJ9/DN0lHU1EVCW0R0eWVne3Z8YWJvaW5vbWBmZGR4dENT3tvZ3VZR2/XI21FdRF9QSU1bW0x2cXJ2TFzXUVNTUtLF2NvDx1TU38vx9/bE01x0SEpITnZ0QtzP9/H2//rn4O/q6Onv7OLm/M7TUUt2c39yd3ZLWk1HXVXewvLn4eHh4ezu4eT6/vH0ysRQSnlhYGBvbm5vbG1tbWJnYGJjZHFLQ3ZwdXNwSk5KdHdKRkddXU5FUVFW18HbxcHC983eUVxHSkFBSXJzR0VcWUh0cXdMT1ne01JHVMn98Pz/+/v8//rh4+Hk//zxw95X1ddZW1TZwffw8fL19vXYwMRUVkVEXFxBRUFIT0TQxd3e0lFHdEFKS3R8fnpkYGBtYWBhZHt2dUdeUVTZV1TfVVdbS3d2f2Vken1kZnhwdV/c0tvQ1M3CzfD2zcTU38TYUddZfXJyd0BMdEh2TFpV0Nbf2PTx5Obl5efg5/rk5Pj0x8bWV17U2dTd39bWV1HS1tz08/Xw5OPj4Obk/srKzNZdSnN6bGgVFBYWFxQVFWxhZ3JOQ15TxPTx9vf19Pbf0FdQ1UFLdnVNT0xYX1ZWx/H0xtPTUUd2cnFxdnF1TEBGQV/T1FdXUNjK9PP59svH08HM28DI9P/6/Pz7+uXw8/nKzcDZ39vBxcbf1tbQxcTD9vL/+fr9/uXl+PL4/PHDVVlYXUZYSnF2dXd2fmBmZ2ZkZ2BmZmNjY2BnZWR9cUpWzvLw8/HI9/L98vL99vH0zd3S3VZGQ1JdUcfJ9fb398jLwNrW0lp/cXJ+dnNwdnd1Qtvw8/bx+Prk4+3plZXp4+Xw8PP10FxQR0ZASE9IWtbX0s32/eXl5ef68P/59/D2yPfw98fXUlx1fH95emBibWxtYmBkeHxySEZe3djGyPT2x9dQVFZRQ3B7YW1mZXxKS0TUxcXJ9Pb9/frn5uPm+PTC319GQUt1dHVLWlfUwPX8/fLx9fX1yttW1FdS3d7M983GwffK9ffy/vXI9/398M/D2Nfb9MnIwVTd3drE0ldX3dHe0tTRV1FRW3FmYmJiY2Bme2dkZnpzc099f0JMXNbXUl1cX9fM99jc0N3Az/bM18FRdVbQVk92dnt7eXN3Tk1MXdzE0NHBz8rwzPX29cH0/MVUVnVLXcbb0sjx+Prj6e7i+P/7/PfF0k1+YW5tZGdmfk/fz8vx//7k4OPv7ODg4fjG11t1SXRwe2FtFRcUaGlvZ2RneHJ0dUl2eXN9T1Xd119SVlVc2cve1lxBXlpVVVxaSnRwW9zS2sbYwfTI9vLIxNdEQk90cXhhYmFnZ311R13T2dPFzvP/5OPj4uno7uzj/8HdUUVIWl5FQlxeUcH28vLKyPTO3VNfWXZ4e3t7c0NPTlndxvTz8snE0t1fdXR8ZGNiYG9raGtsaWtiZHxKU9zK9/Lk5+T6/cRUV0x8cU9IdEBGQlJU1tLGyc7BwPXK3tBFSVxHQ1PSVVfHw8HJyd/ezN9XWdbXRkRQ2djGzMrx/vP2/f39/Pn5+/j89cj39dtX0ddSX9HY2vf9+f7n4OHg4OTzzd9eTn1jahcRExAWFGtuYWRyXd7M9P3z9fTw88rFxddRV0NDRUx5enlycUhS1s3z8vb08vHK9cHUXVt1ckxCcXBxdU1TxPP++fHFzv333VDX0dRV38r38f/k4eDg5uHn8MDZzMddSHJ3S3J7fkzVV1Tc0Nvx8Pjg7+7g5eT7+P/88MbYX1jVWXVKcX5/fHBweHpkYWRnbGsVamtsZn11VsH0//vi7+/v7ebl//Ta01JPdX9mYGBhZHlLXVld19jH9P7+//30y8PB0UdJcnJ8fX57d3B20/P65uLs7+3i7ef7+fP0wMRX1MXa29hUU9Dbx8vCxMRUVNbbz83a1VBR0czIysDHycj0zthQV1BCQEN0SnN7ZHhycn19d0pPQFvX3s7Oy/feXk90cH1/ent5f0ld09PRx/f64eLt5/v92tZTS3xnYGBne393SUN0SFfG9PTw8/by8/78//HExdnXU19d1cXe3trI+f3+5Pv5//DOxsDbUEFNSkJYXFRV1N/L//n7+vLz9MLbWkt+ZmNibWxjY2xpbmNlcnF0VsLBw/P8+OTl+v7/8/XKws7F19FfWF1HWU1wcXB+eH9lZWR+fXZDQVvU0tvK/Prm4OX8ycDaWXRwcnhkZHlzcXVFU9XJ/uHj4u/s5ubk8PXDV1tcf2ZgY2R+fXBxQdHP9/zg4O3j4eHy+vHJ9NzUR3Z+SnRlYGxhent4ZGNtbWNhZ2RhZnpxdX12SkJW9P/z/fvh4OTyxPXy+fVYWF3dV3NwWl11fHJ2SXd9dnVCQ3R0Skhzck5YWV3d2tjTwPH65+T48/XOxvf89M3H1VFdUVhJQkN1QlTbxd7CzNjZ1V5QWE5BWVhbXV9ZRV5TXtPJzszAwNvTVlFHSnZ5ZWdhZmdlZWV+eXl2Wl3TxdrF3MLw987C2lZbQXZKSHZ8ZXxKXlTd3tnJy830/P3x/fbN9vfK3VdHdnd0SUhxT0t8cHF2TUxNWlHXx/b75Prn5Pj5/v3Jy8jOy9Pf2FJJcHd1cnNJT05ZWNDN9v/98vL198rGwcNWd3V2c3lnZmFgZmFjYHh9cEBf0N7Q0djHwPby+/j++vz39MvA3URbRk1BTUlLS010f35yfHh4d1pU0dTT2sLz+fn6+ubn++Xl/MvMwsPAz9vXU1hFWl9YVtTWVNPMxtLV0dzcyfXNwMDf091XRE9KSEFe1d3O9M/H28baxMr39srKwVFcW19FTnVzcn5/e35/ZWZgYHp+cndA1tvAzvL+///8+uTm5P33wd9U1dfXUUdNQUZATXV3c3JzdE1c3t7cVkVGW1fX1V9T19fT1Nfe3NnA9//75eTk5Pj7+Pn7+v/29c7M2ddQRE10cXRycnV2c3N2SF7X2svMy/T29cPb0VJMT1lSU1RSQHd8fXBxSnVyfH58cn1zd05NRlTGzPb88vTAxcHNzc3a2Nzf0F5XV1NGTlnX11fXXUZLTlHYw/T39/T08fXB0Fdad3RCRURcXVpOS0BBR9XZ28bP9/Hw8v3/8vL65uHm5v7O0tVcWllFTXRwS1pfUVFSXkRW39Pd2dFYT0FfXFBXUVBZR05xeWZgYmxtYWdlfElNRtLL/eTj4uDn5Pr//fXG1l9CTFtdXlxPfn9zcXZ1TE1BRVBU0d/f09LaxM3MwM3G1tfexsfFx8HPwcbB39nfVl1ZW1bdxM7K2dXS3trCycPZV19EQEVBSElGWd3I8fP998/18PfOwszE0dfUUV5FT3J8eHp6enh+e2FgZmd6cklYX1xYV9/DycLH2sD09vL5//TA9fH29M7C0VNYR0t0cXh8cHRGWVDU1FVcV9DX1t709/X1yMff31VRXVxXV9zAwszS1sTL8f3l+vjz9PTMwtBHdH1/fHBJQEZOTkRc1FZX0NZXWVhHWF5aVtnNzM71ysPSUV5ASnN/e2VkZ3p+cExGWVfR28j8+/vwzMPY0t/BwcTe1tRXUVNaS3ZxfX1xSkZfX9LNz8DOwsbZ2Mbf19HR1VbT393cxcbF29vb3tzf3N7S1VRRX1vU3FfW2tjYxMfF1l9YWkZW1tLDx8fP98nCwNddREBHTVpTWUdYXVhbXF9eRkJKcX17eHt6fnxyfXFPW1xS397FycLOzcbNwMHM9/f38fbz//7/8snSXVlRXUJDS3V1SkVGRlxbWdTS2sDL9cvNycjQXkdCRkFNQ0dGRERHWlldUFDQxc738PP29MnB2NDW0dfb29Dc19fY3t3f2dHd1tfQ0d3T0tXW3dVSSXFxfH94ZWdmZX5+eHNId0hfVNfcw87L9vTKyPT1yPX2/P388vH28PfZ0FZBQUdMSXdIQUx1TEBGQExNWlLQ29vExsPB3t3d0NXV39zf3trBw8PMzcLA3tPTVFFbQFpFR0RJdURQ1tr38vz++uT6/fbFRnJ/emR7eHl+c0lGX9bX3MPCwc3M2tZdSXZzc3Z1TkFQ1N3Y3t/Gzs/JzsTG39VU1VbV0dfT2VFfQktMTUdBXFJT1N7Y11FRTExBW1/Rwcj09PTKwvb29fH8+P31xtjW09RbXlxbV1bdxsDL8PfB2txQWE11dnF0cHJ3Q0FS1VBfRUZfUdbYwvXz9PTxyczMxd3SV1lPSEBMSkFCTltX1NPYzMvK9/fbU0F2fnplZ2d7fHN0Ut/YwsjGxsrN2sXY0lTUV1ZSVNbSx8/O8f/98/P//vzy98XWUkBPQEZEW11QV1lfUlpFXkFYV9dUV9fVRk1fRkJYU9DN8/r65eX48/32zM/B0FNNcX9yd3VMRFlcVlRUVl1W11xbW0B0cnh6ZXt5cnZJQV/e29fW19Td2MPL8P798fDwzt3WVkRMTUJISkxPWtfd2sLPyM3AzsDCzcTb29PUVFFeRkxFU11V2N7d01RASnRzcHJ0S0XYxcbIyM/CyfT08/7++frl5OTl//fB2t1XREJ1dHRxT0NGR3V3cnpkZGRhZmZnZX5zfH5xdEPU9P7l5+fl+fnzwN1TQUFbXl3R3cfM9PH29vfD39fc0FTXVFZQUlJHSXVzc3J/c3d0dnF0d3RLSEJZ1dvHy/Ly9PT2yNrD9/P85eTl4ePh5uf78snb0FZcWURGXlleUV9DdXB2dXF0SXdKSUhLT3dwcnp+cHVWVVXQUV1QXEVYUdHbxsjJwvTK2t/a11ZdQUFAUt/F9PL8/fXD10R3eWdgYWFnfXF2dnVKSkJc083y+Pj65f/3z9lU193Hwsz1zvT9/f7+/MvH31FSUFxBT1LR3cXfV1tBQU5CU93YwMrw9s/bXnR+en12QFlHUFFSWF5WUdfX1tDW3lVYXVJYXV5AT3V3dndCX9fFzsPExd/Q0FBbR0xJSk1aXEB2fWdkZWV9SlvRx8jy8c3CyPT19fTJyc7AzvH7+vr7//D198r19MvOw8bTRE53c3xyd3Z1Rl9U0tnSVkZMSUBcV9HZwcXT39HU39nDwM/Kw8z08v3+5fnx219PfGdjYHt9c3VCT0tJQEFAREFCSUpKcX1/Z2JvbWZ6c3VY2c738vrl+uTl5fr///bI8f764eLh5PPP31ZZR0Zc0NXX0VJaTXNzd3dxcnZCR0BcVV1fWEVW0sb08f399c719MrLwsHB31JS19nGwvHy9s3TXU1wf35ydU9MWlhaXVJSXkdAT0pDREdZQXRxcnlkent4fnNIT0BR19738/L////++eXm4eHh+v/010RNdHRNWNfT3djf38HD2tneU0FNT0RHTE91TExOQ1tYXt3H2MTI9MjD9cLSVVBFRV3RzfTx8vDz8cnA2VfRwsbZ2d3VUVtRVF1Ad3J9eXl9cnx8f3Jxcnx+ZWV5eXFYVNDZwPb39Mr09/D85OPt4Obl/PfdXkN0d3VLQ0ZBRkVEX9HaxdBXVF1dXERAQE9ITE9NTk5DXNbE9PLl+v/4+/P32tHdVtHb2MTY0dXVWkFaRF9W1tjGxM/B3dreWElxc31/fXZ2cUhKTkxKTkRCSEZT1N/aw8XFzcbY2N7bzvL5+fj6+P79yd7XXXR8dkp0SUxBQkxaXkZOSEhMWVhbWURFSHRITkxDT1vXxMr9/vz5/PL+98rKyc3N28TC2trb0NRfRkF1dUBZUt7Y38HDxtVAQ0p3cXR2cHRJTE1MQUhJWkVf3fTz8/Hz8crL31JX1tLZw8nIyPXx9c3B3dZcRF5SV1NdQU9HWVhBT3VKTURAT0ZDSHROX15GT0tLQlLR28DExMb19cTc2s3F08fI9/HIxMXeVERNQ0xOWNfFzcPNycDVU1VU1F9HQ3d2fXxyc3N8cXR3TVHf09r09fH998zAz/Xx8Pz98vn7//Ly8c3Z0FTQ0N5WW0VLdH15ZWd6eXByfXJ9cXZ0R1HRVFBQ0cfMys/Lzc/0wdPW19Dc3t/excP1w8fB39ZfR0NPTEBeRVpX0NRDdUpPRF9BSkJNS0JFR0x3cXdxS1pX28LByf3l+ffK8PHw//v5+P/9/v33y8PY0FHV3Nre1V9T1VxNSnZwfXN0cH9wfXJwdUlDX1xeXdvNz/b2yvf1zdNSX1FdVNVZX9Dc0NDe2NbV1FFdV1BeXVlFVtHSRU5ARENBQkpOT3RKS013eX58eX1PWlXd0sT19cvEwfDy8Pvn5+fn5fjy8MnY39FSVt7cVVJR11ZfXFpHW0FORl5FRVxQWE1DQExIQFzU2cXGyvXNxN/WV1TX0tPV19LGwsff3tjQVlxV11NfWFtdUF1cQ3Z9eGVlZGVxdEpOTEJPdXR0dVtX1sDMzPX1yMjAxcjJycjK8f78/f3w8fTMw9BV1tZRVlNQ3NLUXUVHQHRLRV/WxsXY3tZRWkFFT0ZW3cXGw8POw8TExvXKzc/MwsbD2FRfVNZU1FJGQ0dBQEZeUdbR1VNbQnB7f31ydE1Icn18ZWRlZ2R8TFvUwc/L9cjJyfD98vDx8v38/PHKyvb39fXC39PZ3dHfx8TdUEZLcXJ9fEtd1trY3dbRUVpAT01HV8TY2sfax9jaw8rx8/D2/Pn+/vPKzvf0wN1UTH15cn58c3FxfH1/fHNwc3FF0dDWV1xNSXRzfX94fHVHVtPcwNrW28L38PXPz8POzs3M9Mv19MDA31TS0tbFyvTJ319BcXJxS0BT09zTXVJQX1NBdEtbVN/P9vfMx8XT0djHwcz19fT9/PHLyvDy/P313lRWX1lR1VlPdHF+ZX99f3N3RF9GT3V2cnN/e2VmZH59dEBTVVNR19bb9/Tw/vz65+fn+vj+98zG1kRTXUNbVdjQWF9Ednd1dkPV0tjd2dnV0cXWXlpBRFbR2MPC9M3bxsXfxdzTw/Tw/PLz8M3Az8bG3lZSU15Y1dFWTnFxfHJxdk5AUNTR19FTQEFMS3dxc3t6eXlyT0NLT0pDWF7R2s3z/Pnl5OT6/fT1zdnF19fSUNfTVFZEd05McXda1trExM/Owsna0tdBSUFGXFfV3NJU0ddU0VRdVNv18v/6+v/99sjKysPGxd7e29jWRU50fX9/fHJyd0JMQVhBTE12c3Nxcnh7fXRIWVXQ2tjc29/awM/x+fP/+/zy9vXLwdnR1FJQUkZBSk9GSUt2cXF3Rlbd19rCwc/J9MrA0UNGXlXfxMPc1t/c111XUlPYy/L85eXy9vX29vHIVFdUUF5GTHZ9fHx/eH12SkJGRV5cVl9CQk1OSHF4fnB1SktaU9XVVdfexMPw8/L++/j+8PT29/XO0lHW2NBZQFhfWlxaT0JIdUNBU1RX097W3vX0xFRZX13Q2lVf1VNfU15ZWVpd1tfK//z98PDz8fHy9tnS397eWVtbT0h2f31xf3lycE1ARl5BTENPd3N9e3h9cHBlcUVAWNXEwc73/fj85eX7+/3z/PnzzczPwtrc1kdYVlJUUlpBT3Zwd3VbXVhdXNPNwN3U1tTR0dnfVNHZ38XN2N3F09fbyfXIwvT1zPb2yc7NwNtVXll0cHd4eXdzfHNzSklEV1JAXkVJRE52cX1wc3t4fH5ySEbVwcXAysvz8v7+88r09cry9s729/b1w8DeVldUXlXTUl9eRVle0dNcW1NR1sbJxsfGztBT01RcRFtQXlBdXlte0dvK9vHx9vz/8vLw8fX1xdHSVlpJdndxc31zc3N2dkhxf3x4eHp5fH5/cnF5fnNzdE9T3Nj39vTw+eX4+vr88ffx9MrKzsHBw9jUUFRbTEVcU11cR0xGR0JBX1hZ0cbO8fD8/fH1x9zX1FdU0VTU1VNfU9na28H1z8fIx8bMxsPS2dhURFlcdXR2dk11S09MWEF3d0pzf3NzdEp2QnV0d354f3F3RFJUxNnP8/3///Lx9cHBxNjCzM329Pfxwtne01FSWlzXU1JQX1lCSkhJQFHQ2cr39ff1zsdRWF9RUVJdXV1ZXd3C9vfK8f3z/fH29vf19/32yNhXUVpLc3J2c31wSnVxfXl7e2V6eHt/eXp5d315f3J3TF/d3M309P/k5+f7//D1wMnJwcnI9/Dy8/Te01RaWlxGV9RbWEN1TkpwdEVT2cDJ/ffx8MzA2lRX3dHW2VfR0F/Rxcz1w8TOycvKzM32yPTwycDeUlxHdXZ0dnF3cXRITnVyfHFxcHZ3cHZ0cHN9fHJ+eXxxSV5QXN3K8P7l5fDIzMDCy/Dx/fj5+f/y8MFeRFNbRVxfUkVBWkJIdXdBUNbBy87w88/CwdzT1F9bW1FUR1pX0tvB9M3Ax/X3yPDw8PL9/PHz9s/SWUVGX0d3cH1ycHJ8e3pkZX5+eWV+f3p6ZXB2fH19dk9XU1LEzPz65Of4/v31yvHy8vny8PL08fXQW3R2dHd3d3R3dXdKQktbVd3P9/375Pv4/fT3zNjdVlFUW1tQU9zNxsHG093ax8Da2sDb0tzc299QUlxAXlRfREZEX1ZYWkFJSkpPS3Z3dn57eHpycXx7ZX9zcHZJXNfF9/bx8/bDz/XP9f38/PPz/fD3w9dZR05JSE5HWkdGQlpdVd719/Ty/vnz8PDN3tvQR09IfXJ2dVjSwM/By8rP9fLw9/bx/PHL9MLd291QVNZX1llNTE1Cd399cn9zcH9+emRlZmd4eXx0c3l9c3RLRlTN/OX7+Pr+9vD29/D9//3298vB2NNeTUNMd3Jzd0tOSXd1QFjVxsnw8Pz4/fz5/fDM2ddbdHFzcExF3MvO9M7HzsvI9crBz8fd3tLR1llfVFJW09RTX0VRVFNWR09HTEtKSHN/eGR7fnJxeHpnYGR5fXdb0M/08fLy8/D09Pbw/f3x98zP9sbX3NRX11hHTExBS3RNR1vUxc339fPy9PTKz/f1VkdMSnR9cndNXNbFwPf19/P2/f/9//3OwsXcxdxW1dPc2t3R1F1aT0lPSHZISHBzfnx/ZGRleHl8f3pkZmRkZXBPXN/A9ff28vz9//n9+Pv5/Pb99MDC3FRU1l1BSUJeTEJbQ0NZU9PazMjI9PH29PL2wsVeX1BERkBfVtTXx8/N98vI8Pf198He0UTV0Fhd1l3R2FfTVlTTWlvT1FzVWUVfdUpwen94ZH56Z2VkZmdmYXp6f0p3XN/e9/Hx++T65fnx8vf198vMyMDFw9nf3FPQ1V/Z3tLa3NbewcDAxsHOxcTE1FRFT0RCTkRYWVBeU9jD9PD/+fr7/vL0zsfb01JcVlHV1dfT1tBXX1xaTUxCSktxcHB+ZXp4entnZmRnentlfHNwcXF3WF3U9fPz+vrk5fLz8fXw9szKy8fG39XRXVdUR0fR0NTY0sbKxc/MzPfI9PH0wNrb2N5QRFZWVlh1WlZR1trL/fLLzsTc1EVT11ZGXdve0lfQ2NjD39zIxtNU19zWXUFJcHl4ZGdmYWNsYWRmZ2RleXtlenBIR1TI/OXk5fn+/PT19/fy8fXz8srP29zGxdJU2MbS08L29crK2s7C1tVV1ldHW9TXXkVaQEJNT0tb2N7N+eTl+P/298je2sbA2NHfx8fQUVFWV1XQ1FdRRkFcWVlESn94eWdnZ2FjbWFnZH55fH58cHROWdzYzPD9/v7/8MrPzszDzsva2sXZx1FX0NXTUNLf2sLM8f35/vD8y97Cx97a3tPEzdDaVUhEQEp3QFHTx8b0yvX02NJSWdHY2sfOwvbAUt9WUdXVV8XO3cXGVcXG0FJPfWR4emFhYGNjYWNjZmZkYWF6dk1F1N/P/fz//v7Mz/f198729PP338PF3snTV93MxcT32sz7//Hx9dLVUV5DSlpAXFdQw9VQ1nVKSdxb1/fe8Pvz/s7C21ZW1s/Qx/HOx9HWWkNYSkdU0FbX1VDe0FdXdE9ycmdnZG9hZmJmYGZkZWRmdHFP1VTZ9P7z8PzJy/b3w8LDw8jF0tRF0V5A1NPPwMzC2Mrw+Pn6/vf898zeUF1f01xXxd/CVU9eU15b0dLZ9vXz8c/JwNFSV9ja28v0xd7bV1xFW0NexdFRUs/AUsbfV1BacHlzZm1iYmBjbW1sYmxsYmZ5fHRd9fH18/Xx9MPN//7O9/v/8fT13V/Q0V3G88vE9fbIyvv9yvr8zs7+VErWSn1SX0bS3EpX1H9SwUfa/cv9+8rw8NDI9FbH8d7GzsvNXFzRSnXSTU3a1EFaxN5fXttddtBIZ3l4bmh+ZmlnZG1mZm1+SntZyF/L+93M89ba9szy/tj3+cbNxNbWQV/YV8blwN3xyc325/vP8OHx2OXDdFfTcnbGU3daRX5xX1vGyV3J+tPI+1LW81NW8Nvx+9fN8llT3lxfQ1Xy31f+X0zw2kRYwdp1d01kYmRtaWJhYm5gZxVteWZyRF3WxfDAVMLDRcH3zPD45/Px5cZV/FFxws3Hy/P93Nb7y1rl5NTx48Nbzcx2dtxHdNrAfXPURH7W/dZR5/hb8+RcRfnPdc7mwc/lxk3D3nFK305DzN1e09pTW9dXd1DNQ3ZZcmxlf2lpcHkVZ3VpaE51bEH2WFvlzHHf+Ul05/5f++7PzuDHTMj1c9Xlw9/k/9v65sX04/DJ5+fN9PBHQ8bXfVT0cH5RdWVW0nZV5N1e/8B1WcpJWf7J1uTgxc391kzH1nfY8F1E9tpP2/VOQM1BdsLFZndTY250fmtkdhUUfG0UfVxgcvzTTfL2c1LkU03j5lXn6NZR4cN5yf911u/1X+Pg1Ofu0s7u8NXn5EHe+ENz9Nh73v57ZPJdZ83lSFfu9Hz5/GZN5UR94PlI5eB0VuBRZPDBesL+fnf+TGH832xR9mFx83pgzX8USkgXZF0UFlpiEUFRa0nmfXPg3Gbw5XrR7sVZ6fl78ON5S+FCeuD7c/nrVsqU81Lr41vg6ETP7kBx5FBm8/RtSvBlfOVYeuTlds7mfXb8TWf083bK41db4PRJ/vZ70eZMcefXZPD3YETzen7yQmH1xWJ9XW5tR2YXZWYQYHdqb95MYcPKZdDlT3Xn8Ubg40Lz4l5G5tZk8PNxzOZTzen+V+HmU/vs1M3u9UTk9HvL/H9I8XFnytpnV/lNRufefvTDZVn2TFLg/lny5tXe4dtM//1PweRNRv5feFBSZ3bDSn/L0HlfX2JkX2Joc2QVYXNoaXZ+ZlDTf1j0WFv2yl/65FPF5NNM8cB9xf90RufGSOfiUcrtwNHj+tPl7MDC4cRL8/BwRPV0fsZQe9H0dV/+V3zB2n9Z80Jb4PFY+edc2uTUXeXyTM7kT0vyXWdNWGF2wXd9zdF/WtJkelNma3x+FWBwFWt9emNB3np18lx0/vla8OFX1//FdN7eeET+XHf++Ujx4FPb7f9Q5+zB9e7+XPjlRNLnUn3Dy3xJxkpzysV53/tyc/5Uesz6ddHmxELl5XLf51TW4vZ1/OR3W/B2Z9xWZ0bwcXD+UWBfxmRmWGQUZEhrFHhjF3tYbGXIX2XN/0HP7sJG5Ph80v59evLDcfTlRNDs/0rz7drN7vhf4e9VxuzHQOX6f1v8dH731mBf+31w/FRz9fd/W/9UTP76QcHjVHfzzXHy4t/d4f9MxftzePJRYlvxZ3vzWG1Fy2Vi0XMWeFEUF01jEGREbmD2UGfC5HdA7vB0+uBaWfpTY9v5f0rhxnjk403H6fZb7exb9pX0Q+LhQPXo1n748WVY+ndjzPdgdeTUf/H/ek/g0Xv+4XZA49hkzvp/1uzHSePtSVHiWXrPxWNz/3Fhystndfx0bEZKFW1GbxBkfxFrRnppXMhkdfradvvhRsXvxXLzymF2/lx9+edFwOn11+zsV8rv9t/j5t3I7fPU5/5LVvN1fthHZljPcULl9XXI/311+dVy8/ta2OfYcsfDdlj/xF7l5VLC+NVz00Jgd9NyecFfZFXMfH/TZWl8fBQVZGoRenZicMFLf87IdNjmwUz950fW/0lh19xnRvlVSOTm0Pvo9t/u4cTjlfDJ4/LG7O3UwOfXc9pQYnJXfXHy8UD1/XZ089B9zfxLU+b2Qvb1fUX/1EHk5Vb25tZT/9xnQMpzc/VRe1vZeVvOc2N0fxQVYRQWYWBpc1FkfcZDf9r3X8Xn0EL4/31O9HF6ycZ90ODb0uPh2/ru9/Tp5sTk4NfQ4/1V/vZwRMx9bHdwYkn3QUXm/3Tb/l5B8tp3x/1Z0eTWd8n0dNb43VHl/UPH+1VN91dl1MF7ed1KZlnRZX1XemtkZhAVf29oSkhmRvZDdfz3S9n+Rlj63nzdyX1K9VRzxPVZ9eLC3u3kzO2V++SV/lH458fJ4cZB/sF6R9ZnYlBXe1n2X1L9zHf05EN3z1F89PV5WvheZfbydMPmwVfl8XX1+kpM/MBy18Vmfsp2bVxEb2dLaBZnbBFhcBRi0Hxn9c503uXVdfPNS8HCfUf733DB/EHW4/FW4ODX+Or58ZXszOfgQN/tx3L880zR93d+0UplVcJ2ReT0Xvrg18Xg1X34/XfT51V15/J/2uFAWO3MePH2fF/zR3L31GRcUmF7zXhvXkJpeUprFXVkEWBGb2LZUHDz+1nH51Z189Z/UNB6dPFNZ8bAT9znVUXl8V/h6f36luNW4+Jc2ubfT/r/WMn5S3T1TWRQ0mVR+9RU5/lO2PJ0TPLQcfb2Tt3k1nbz8UXB/VhE88dz3/NNUMhBd99DZERFY2ZCeGh+fhRic2oXfX9pcs1CdfPMTvflWNLn33HIy3XdzUpe5cJb+/pO3OfDVuPj2efpx93i/3fX8k9Z/NlJ9MJ9XcxGftLUTf3y3PPmU0T7x1v55V/b4stC/vx3Xf7UfcTSe05Wcn7dUmRF0npw3XVkXXRhSkRhYkx4b317aGRFZmf33H/S83RH+8xO9vBzQshKZV9Ef1TKRNXw20D3/NDz4/bw6eH07+zcyuDNUPv/Xtrn1EL52nxTzXRC9tRJ39h2UfnHRuXh1cvhwFLn9Ur0+kZO9196Vt1kdsR7Z8xTe0fZdnHVfGd2cW5gd2NofnprZ0dlZsdCYlHwdFrh91jm7UfQ4UJ69MxzxuRGVvzZR/3zQM3l3sTi59r/5N7N4c1L8fNK1frYU/Pde9r6dU7/0HzFyU3059rA7+HA5ORUVPvNdcrxf3LFf2JFdGx7RmZl30Nm3vd4Q/BAZVNJYndEYWFGZW9PUGd/2HJn3dhzxOHE0eb5WMfEekr1dXzx9HtR+1lB5MB59OLcw+nl9ezmw+bj1dPm9UXz+0dc8Uly9VBhXtxnfMdNc/PlWfaV89Tg+kv14tFR+9d9VNhkc9ZmbURJY03YZUT2SXf3UWBLWWFmRmEVcHEUZERjZ1B6YfXUe8LjyMDo59b68HHW5U1O+dZ/zPF2UftbffXJd83g2cPu88vs5U735kPW4cFx9vV52ft1c/LRZcTwdNbgw8Xq7cjl41Pd4MlL8816dcRnY9R7FH52amfUZWTP3XPC/3JO8Epl2lhvclJvZld6Z1ZDYEDDckbzX1Hi+UP/5XpF/H1699RiU/x8W/tQfMnMcfTi3fGU5vyV6Mrk7cL27clf+8hkXP18fPRzbdveZk34QUXg8MTs5Fr95kHO7VdC5tZnzsNictZubN98bt3WZlfxe3DxcmPaT2lPWRViRmhrXXhqUt9jXPh1TeL8X+/vXPPsTnH60H7IwXpRznxI9XFlxlF/zv9b9+nOwez7VOf+0+DmV/v6dtLmTHfn0Hry8GXZ5EXe7/fO6P9d+/dwzP1J0PNze9Zxb3VyamV2a3nMenr8UXvwxX/K8Hpf8mR622ZtVXFpXdNsXsljTft3Wu/KUuLaf/1WbNPEYFz/ZELkd3L8Wn3l9Eji4FPh6Nr66FfG6ddH7Mh0+MVn9/Zm2/FhRPxlceBBcOz9XO7iQf7hedbiRtLvWn35d2/ZdhVdWGteyGNE/mRy/n5m90pp1FsUc9QUY95sbct/bftSbeX3ZOaVWuSXT1btfXnkWn77XGH53230wG/U/2fE6UjQlcZS6/Nw7fxg5OBw/OxzV+pcT+r0fOTae+TleeTrTv+VX83ocnHgQXDiX2HxWxRbQBZ3ThF+2m565Xlk5HBt5UZo9N5rW/VqdvNicvJkev98Y/xNYPr1eOHiffHkYU7wYXPkemD6SGHg3mb7+Hv270P5ldD9lvHH68tw48B44/9k/Phk9+dlx+Bkded6ZOJQe+n8ce3gcvbgZcDvcFHtS3n5dG3LSGvZQWpB2GNKxntx0WJhUWdmX35sXklvStp6dM5wd/FYcfDOWuTn3uHkdPT8ZVDxc0L0cHT2dHf3dH3LxXbK/F715trZ+t9S99dZ98vQ8crd+fnO/fzbyfTHw87E2Pjyyvj8283RdVvFd1vFdUTDQH9Hc2Z1dnh2cnxOU3R11kl0QXJ2TXR3QHV8WEBB01xC0NBMXt1OUMXV2/zx0cnRfVtDc0RfdUDe0VfdXNz2zMT08cPK/ff38MDP8crNycPPzN3R0sXDxNnAwtrPz9fexdnC9PXM8P7E0MfF383FU9rGVtbXTEpHWEBBdH1zc2VhZ2d7fnt8dnJzcnt/fX9zRVhCXdrN2dn1zPfy9vTz/sjf29FFRVdDTFFTW1BfTkJbXdfd19LY2NVWVlpS2c708vz8/fbK/fP78PXOyfDP8vzw8/35///wws7EWV1XWl9FQ0paUE13T3ByT01GTXR2cXllemd8d3RLR1XVRU9ISUl1WdBTXlfe1dzUUt7Mx9PHz9ZeQnRIRklPR0dFXFHU09Xbwff08czP9sVR0NRd1s709vnl8vL13tLb28XF0lfZ2VDO29v1/f3w/8HLxlfb2PT01sNR199D2VdM1FdWUl9DeH5mbGtpY2F6eHheSXNMfXl/c0Je2V3Sws3x2PH/9+TN9fTTwkRaVlpdVldfTFhaXUVHX9zGVFfbRE1Zd31wSlvfy/f+/vrh9fP+8ufx+fb0+cb0/sv38vj/8cvd29FNQV/GUtfTeFzRSnJHX05S10laRHF4ZmdhYmV4fExJWUNKdEd3dVTX19/0y1LBw9TTysTdwM1GQUNydnJDR0lbQUBbXdNe0MT99MHMwd9RWVZORlFeVMjw9Pb49M318PDz/PH09/XYx9Pawc3Y9P3H2MdUXNr1xcjw2l3aw1JWxcbdx9xcTHV9Zm1vb2xpYGFkZXt7YWR+eH9Y39DO+fDP/f/x/fj+/vjyzttVRENEREJeR0VBR0Z1WF5dwdNE11t3dkBxfndGddnLwfT//Pjm5OHp4ePt4eTn+/H3wcnx9cDH21dSQ1pRWFTQUEVaWXN2W0FJ19rUWNdCeXdzZmVlZXlycUhzZ39yZXl0QtXC9ffw8/zzwc30zsPFVFFTW052c3J1QHxDRllZ0dnRzvvx0sPWX9FdRUl2VMjUUcbDzcHG1cz+/fn4++b8//P02VbD3d3G09TdxdFWzvHH3s7aytFA0FHVyt3Rzt9ZSHR4YGBsbmJtZ2ZgYmJgaG1gbH1f3PP75OTt4uXl5vj68tnGy8HZWHBKdHZzdHBlcElKX1DTxtFWS0ZCTUhnZUJMXlHTzff2yP7l5Ofi4e3o4ePt+s3z8NDaVlhfX9RZRl/WVEda3Ed2RXFwWFJU28zE29ZfWVplYXxkZHZyYHp8YmNnZXp+TVPa8ubk//jk8PT49kdW3V5NQEZ+f3l7cXNC0UJO1MnG9/v22/XI0VxLd3RwWkJC3sHb38b39uXk4eHn4OTk5/vw9s7DR0BXWl3TWNfAxNTdxNTXVEVcX0/SwsHI/8LWzXRgYWdiaWRkY3hjYmBoYGlicn1X0vjh5+7s7+Dk/8vI9d7f3VPUTE9JeH12enFKSEpXz9v08N7C0HF3fXx4SnNx2V7Z9PXw9eDl+ZTk6pT+luTmlUWUZ8fBYvdj9WZfS9FH2ENfRnjAYcZl81vA+N7k0c1FfEpkZXtkfWR9fX1lemZgfmRyTVfFyOX88+LM/fZ0/nfQzWX4bsF2etdjxmfbdMdR/czh8v7h2Pp992BJcWRBZERLRthZ2M735fLh5Obn7OHg4vjlysVeQFR0Stdzz9Ja53L2UUP6b+Zy2PRU5lvk1/d8WGN0aHx6bWVq0xZzbWllaHBgfN9z8vzz4+Ht5uH//PXIwdtVRVtAT3hzek54dllx3l7O/FzN5WXJ0mn/bGD1FvBmf+lq7tXMkUOd8Onu5JD86OHs5frU/UhQd31IYdl89UpfS1pbTFhM2EfJ2Nvf8fDW1kZOQ2B1QBdQf2n2F39bF/oXcMkX62P/5meTdOvVxeB68HHFdlLcxGTGZNdPev9k5kHgzeXzwedH+3lSRWDHan19bMhlTNh3/sPZ7N3m79aW9vmUyOznXuPZfu9v9stjkWDK+GyVY13kFZd42ONqlWL0wmrsF0ZyEfEfcXwQ8B/NbWfMFPxhzsRT59jj/+L45OHT51r1wU7O0tJdc0hPZ1Jwd8Rx9Nd09VhI82zAXRXhFl5EEeBoVfhvkUDll3Ke3+yRcZ5O6pdlnmDhyheUEPxIbekR4Xp89mr+ZtLRX/NL8d/4XPLU1slmzW9If27BFEt+aPQX0XVq4BT5X2aXZpTb2et84XDOVE32Rf1G9HTCc3HZZfNw9PRx533lz3vjbMhxauET1n4V5hDndUPicOrR5OX748Lt+Ojw7v725HTkc8beQuJ7+MR44GjyWGzuauNdYZVr6XRI4Wv6Y0p7a3IUf2hmYX9he017WWX2SVb9VOrB4ONR7VjR5mf79H7rZ8v3bvZgc1dmS8h2dvN/3NJ5zk5kzHl59W/GVm3sf8XifZTwxJFBlO5OntLvlUGWRtT5RlPLTUT6etLFbtd/b/Rif+Zv/fdml3/SlGjjw2CUFtDPHeITfsce4BF0wBPsaVn9b5d85uF+l2ngx22WFezHZ5Zt+MVh+mRx/3r0y2buZNz6au9vW/MW6WlMwxfiFd/abZRo4vx4nGKU7VCeTJTrVpXFz+xP5uZ4lHvB+Bfoanj3EOtpTuAX6GlX5haXavP+F5YS9WQW8hvIamfBFuZuycZ4lGXq/9+SZpFZwu5ukWbl9njuFf53cPYX+mN182jsasLUa+EV53F05GXiZcDWd/Rm/kT99EzrSuLhVJLR6OtallT55ETm1c5Tz1530xXaZ2/CEcB+Yu1i9Ppm7F5Z71LO4lPQ8m1TRRPVbxXYFnJREdxCe+Fxx+119+Rk58h763df7GP422DnenXgetDweeb0Ye1Df+JtUudi+/hu4nRq6BR45hPkymiWYFyTbOjvd5/0w5xZ/pZz6uxgltdllRRc5B/hehfrFsX4EJR0YpZr8+cXk3R+lxD4Qx3hHXxHE/lqWl1m4WTjysmUdpbcRpZt7slkkG3b5xfvYGzvEctYaZRr9PZp72nH1G/nYvlfde5s5XFy4xTgQVrpb+zwSehd5e7V7+fS4830+N/x08BLWtJuXmJnQhHHYHDJaexZdepI5OdN6svV4ELXUXp9ZGVpcmcUUGtKTGjmZM38fZd91+Nk+tBx5llF/9RD90J0zXNZ91BV/f5D/vRx/ENk8Fhi9lhg9XRkynpmy3968ktC50D24t/h7Pvk7eT57eT37v116sVl+nthUWhsw29h+WZz7Xj27mDs/W3qU2fjb3zlEXdEFtlrbvMVR8ht4lRdkF74lnLk5WXpUn3vcVH5bdLNFtBIa/xjdOxq8eBu7U1+4mre/mj5RnLjY/T0ZuZkUvth51PY4HTp/PPsVJXcyO5J7NNc7XrZyG3DYm1WEUByY/Bh8PTR4tTu/tPpTubffeNmTVRrVWxqRRB+f2r0Y9T9ZOPXzuB359PB+HDmVM/KduB2Rvxl2Ndz5dRK4cBa+9Rd9H1H2mVz1H1BUGRXS2RdfEBxc/lfWOH39OLx5Orf5ZXU4ele7ed18sl9Q1ZmZ0JiZFRiefteceL/defxcv/eZP/QYMJabnBzFHx/FEVRY8DmT/zuVPPiU1TsT0PiTXbmTnb4c3nwdGPKQ2f0W3v523L7x3rEymFY/Gff/XnP+GZE+WRl5353633WlEDMlkXTlnPKl2b47Wn8ym7/dm72YWjwbWf9a8L8Z+ryw5dY4O174N1L52Tc12xYbGNmFUtuedNj8E5K73/y/XvuXk/idtn5cM7lTNLhSFficd/mfdv7T1zgUGXlcWPKZ3vPeFvbftRyYsFgY/h7XORG+Pfd49rl5l3o5duV9f7hVf/d1cl09HN78GJEQmz1Zl/leObBcuJxdPp8VvlKQ8hhZ9wVY1FpdttwRf/JQuf9fPr4TMnxXNfdzVpZ9XRc8XddR9BEYPFPYeDefOXSZdzRZEL/T0vtxXbmyWDPyW/Z4GXY7nFGlVZ8ldJll91l6thk7shh59hh51Rm8Vpg0Fhg09tw+M5W5MHCw0f810fhXHPCemR+YmdjfXZhWlRn1vZ8RP9QROXAcPjKfuXke/3odNvqWVPrQHrtVmbsz2nk2hf0VhfNw27y+mzD9W1ZUWFQznHc9k79zkzmX9vtTfrmUu3x0e7DXuPbQOVDcflyeMZlesN0c/REc8hRc8nRdvPV1f1+211s22Rn2WZBxmRU+X1R+H/F5XzH/nne+EjH+kDE51fa+l7S/3Bc1XL9cHDzYV3RY9JHZ83JSOf+duTJevbQfvDEecbAdsnNcMHPdfLwQfnf0eZ1/OVK5MNE81ZE9lt/wHV29nfV837Y8HBT9Fld+N1e/tV/119jct1mZMlzYdxHZVzdSkDP0UvDy1fJyfL11+X3XPn72c3lVlD2SHfXdGNKRm9xUGFB8ERS/tJP1dtLccvWfd7KXnHe9H1f/ldT/vjc+ez1wuf+TPfhZUXhdH300GVf02ZJ2GZ5w39mzVl79fJM2fjSX8dcSE1aRHZbz1p49Nhuz/9gRP9Ac+TydPL9S/Tlc1jnQXH4x3XAxX11WHB5c3Z5eXfVRVfj0EeV8X//+HNJ+kh75d5mysRtXflhUe1z1OvI1u3Pdvr2Y/fmYNDtZU7ieXHhZHjmfmfmcGPlRnPmRELhUXHw12TH3WfFVm301GrR0GtRzGPB+3/86HXWlUhx7l944v194Odl/eBtTeRmYfV/aNVObPTKY/vnZ/zlYtTnZlrnZ1LhZk7kZn32fVrj3PWR+sGUykLtTGT4SnrmUmf43m/awm5ayWh19G5y43Jl7ctl4+d4+8pk+M5m/fNhzf9jXfFpTvxuR5VxU+lcWP5xSfR6eeRPfuNUe+PWbeXEb/fYaVfHYdz1cfvkd+buZsbvZkDuZXbhd2T9QW5RUWpE5HvN60L36nBW7Htl40Rl7NBl40Nm59Fi5cxi+9xh+txm5/Bn+OZh0+VmQP97TPZhcvl7Yf94aMhwZubKcennfu3+ZPnIZvr5fOHkZvbkYd//ZlH1bkf2aXPxeXD2WHb9R3r+WWXl9mX053nc+mFY9WxF+HDe6fXE6v9a4N9m9thj9v9jRfRgTvdiW/BuRvhjfeZ/f+JbTutBdOlCZ+zwZOTzZ/n7Y8j6anXkaXvjcHzt0H7j1GL7VGrP/GBU5WFa42V17nBk7tBi5cJt/fln+OBk8exnROhyf+12ZeJLYeB1FPTRFVDyYFbic8TrSkLuTWfgymb6/GzK/m/D4GHW70h34th65c9m5/Bg++RvV+BkfeZ5ZOVLZ+RfbvHFFNHlbFzsfN/pclzuQHjj/Gfl52Pw52DY4WJP4npn4XZv/1Ft/Mls9eVvVu1hSe5/cu5bSO9dZvvEac3nYNDsdNfpUF/sXXrhz233+ml3+Wxl/2Bk4XBg4sFg5/pk/uZ+/e1k2+xhd+x2c+DUcuPbZ+XAaMvxFUXlbEnnZHDnfmTjVm3n82735GzZ42JT7GFN6Hlh7V1h7chm7/Rs5vsV9OBuVu9mXOhlceljYu1lauZFaebNbuX/bvjtYvbqZETvZHjtZWToQWHuymPj5GDn72P87m/A7ml37WNn4Hlm4k1g4t9o5fAVxvtq3+ZpUeJpTpV9c5bZcpXNYe/0buD8av3lad/lbkrgYHDsZWbscWjkXm/gw2Lj/2Hh5mPE4WdP4WRy7HN673Rt4tFj4f1n5ftszfwUTfprZON6fu58e5VccJf0e+36YfL4bcrmY9jtZV6VTkrvR3jnTW33SmraUxdSwGhd5WLd639E6HZ871Zx7dZ74MFj8vBh9+N81uN0dfh/Z/hNY+X1Yf3kZMblY0XkbXr4Znnhd2DnWWLnzWfg53vm8WPk02ngT2ztdnfuetPqYeHuY+vybe5hZ+kV2uYR7FpikWBQlBTj9xWWbXnrE8LAEetkZJRr5+xul9BhlGB1623B7WzV9G7e+WHP+mZV/mdw9X9y/Flx5PdI8/pwU+ZcfvXdZ1nzd3PxVGdGyX5x+/JzXeRFYN/9ZmL+yWxF79Vh4ZRAd5TuZ3XuUGrQ60Zt/ex9Y+XtfXjg52Fi+v5hYvbBam32wGhm5+Rlc+/if37h4XB84O90YMfnQGXO7dNmWOVSbXD8wGF++Pp0fvblRGXc51BgefTZZnj2/n1n0v5aesPi9HBH//R8e9/wRX1T8MR2UeXk0Vr85NJ/Xs5RcnXOyU530vVUQMX78NVXzvfVT1DERX9wWV9xd8T33V7b98BDTdPZ0V3Vx1B3StPcWUlSxFhzSdPEXkbN/drQz/HJ0dfNyFZERVZRdXdaVVh3d0ZZdFrX0VRFX1BYdHVYXVBAUdnR3sLz/vH2/fDH3trS0tbV3NDc1VXf2sfEwcfFV1jW1V51dUJ0c31KW0RYUN/T1sbB2d/byMjA3tvTXl3QVF9T11BYXFdV1VVUX0fX3FZR09reUVRRUF5eWkBDTEFeQVleV9Lb3lVU1FJHT0JBU1BcUdTW0sPMzs3BzcfY28Tc1dLWUlXd1FNU38POyvT3z8jIzNhUUUJ0dHVJTVhYU1JU0NRUVFNYU1RR1F5ZU1tYXFTT11JS1FXU29vS093Gx9rBwMbexcTWUlfTU0BfXERLSkJCdk5fRnRJR0N1dXVGQUFYWVxX0d/By/L//vzw987Dw87dXNzF3VXd2MbMzMvMwsfE2dHVX0x2cXZ8dE1YRklZVVFTUN7f38DPxt3e01ZRXdXT1t/d01fW2d1TWV1YRFBSVNfX0NRTUt3RVl9fXVhbUFNTXlNQXERHR0lNWUlKRVJYRkRQ0dXQx/XLy/Twyd/Z3FJFX9XQ0Nva3cXK8MvM9vPzyvbxzNZdXEJ0dERESktBRFtTUFpcUlRfXVFeQ0BCWl1X3tvb3d3e2sRW193X0N/b2MPDxNnQ3FBX1VdSXl5R1VpOWkRAcHJxfHh9cHZwTltHTUdfQFjd38Px+uX4+Pzz9M7cU19Wx8LHw/X29/TPysrG2sXf0tzVWkl3c3BJTHR1dE9cXUTUzcPYxcTA09VVU1xX3dvb29nQ1d/UWlhSU15ZXNfVUdTVXFNTU1xfVFdRVNdUXVVX0F1CSXdxcXB2SEJMW1pCRlpEWFPE9Mz0/PTH2MfSXkdU0t3N9Pbz//n58vP58Pf28fXE2dxfd3FKd3N9c3d2dkBNRlHV1dBXUV9GRltZVdDbxtnQ28bUUlTd2d/NysHfw8Ld19DUWExYWkJDXlBHT0dWRUhEdXx4e39/eXNDQ0JaUVBbXt3Y2vbl5f798vDM3NjQ19rMyM3K8v70yvL0xcXMwldbVddMdUJPSnROdHBLQXVLWNPZwcn39N7U1tHXVNPGwNVX09ddWlhbRVTS11TU11BeXVRURVzVWU9BVNRSVtbf0dLe1l5aRHN7fXdxdkZHS3VbU0dFUdfSx/X1zcHa19RV3c7x8Pb9/Pjk5Prw9vP9ys3A2tVbW11YRV9DcHN3THZ2dnV1SFHRVNXVRkVcVdve09zQ1t/DxlpWV13dz831xdHaUFhWUt3VWkB1T05AR0hGX1ddWlJGdXF8fXNKdUJCQUBPUNDR09TE9vX08f7x0VLYwNnL/8/O8fnw9PH/9sbO8MHRV19EdnBOUl9NQFtZdElbX0FFV9TX38neV9PIxd/Nz9pW0MReT15WQHRH19FXUN1WQ0JCV1dX3NxXVNhPRdNVxFhdzcdUUNZad311QXRyd1lEenZcQURKXcXdyszMWnbWV97+5Pbz/uX/8Pvg/PDl5P7389teVEhfWHFPQ3FzfXRxc3NfQ3J7TFVASlJXd1L0zlDT9P7OWFVXU1LBy9bxysDleEr9w3BL9szCxnB5XkZ1cE9H01l10l9ycllHS3pb219bcXZRV9/VR13bwtne9MrV0dvw/NPC/vXJ5OX7/PHwwdv39F1K11TXdUndX09eUNFNT1hcW0Nd0VZdXlVWQtTaVl7FyVHXU9XUdEbRUUPCUUBbUttWd1zFVF/Y9d1aXFRVSEdbVlHUVlBRRFzcS3HXWEZNcUxDdnJfWXXaxdVTVdfWUcLbyv745OT64e3g5ubm/fDz883Txs/QRVfTSHBOQndxTVlPdUJOU0B1dXJ1dnNLTNXS0tPb393XX93W1tnM8djExt3FVlFFQFhY1FxbWVFERUxKSXJzdX1zT0NLdHd1RkZMRXVARlhUU1NYU9JdUlff1FPayfT//v/5++fj4eTl+Pn19Mjf39dW0V9U3VNdTljS2sBWXF7T21xaQF1HZXJPTUpNUVx2dVxQSUBd3cXC9crW1NPE0FheVNBaXlfA0MXAycNYVURPSUBfQEdCWkl2SnR9fXNKTnF2TEhaWEl1dUZOckHW3dX35uf75+zm5uHj4+P/+Pf00NX20dTS0dpJe1nRXlPc0FpG111MTHdDfGdkcXNzSVlCR/TGWV3K2vX44+T+9sD0zNvQx95PSH9yQc5VUdbQw9h+d1F1c3RWTnJ3e3NwRtVMV0R3V1xHUEHUdFBZfHd0ddH7+/nh4+X5xvrm//Hb9MnXU19RVkZMzNBCR3bCUUXFzdLG2dpEd19ETUddQEJ2ckBNfHR3Xn1wWV/3+cL+0s303FZz0nV28dD72PnFSvDL/c/0y8Ba9NpdWEzXT3V2ZXhDZkpGdl12Uk99WHFKeGRydFfDy/Lm5/jn5v3+++X98/f4/f1cTVBb2Ux3eX9GdlJbRFZF1UFBWHB6QkNzVXdFWEBMTVZWW1lSWMH+5+T84Pj08N3T9dLYycXPwt9R1lRT31nTUUJGc0dCcUh0THV3TnR1S0VSW0LWQ01XX19eTEhOQl3A9vb+/Ofn+f7l+uT//Pb658fTX1bfx9LfX1LVX9PQ2dDb0lRYRVhwfn5+eXxJcHNMSkZISEt2cETYx8j08fHHxPXEwNDR9PTAxd7JyNFUxPFQ0VdSVExeSEFye3l8eXxlfHR2fXVFTXRwRk90dEtxSkPUxsTK//zz5efj5OTg+/jk5PDzwcPLwNzFxVxTVFDVXkrUQFxGXlRddElxcERBRUVeQFJR11lKWNPR0tn1//DIyMdU39HUU13WxdnWXdTeUVdRU3VOW11Pc09KcXZKdHVLcXNLS1/UXlJZRVpYX0J0dnZNUNDH9cj8+Pfy5OD65eTl/PH28cXd28HM0dbZUVtbX1DV0VPU2NRWUl9IdUlNTk5aQ0lGRkh1cU1PSkFU1dzaxsTGzMHS0sTb0tzNzMHH9PXAxcbTU1hHQHV3dHd9cHdwfGRkfHt5d090d3Z1TnJwdnZ0SFfSxPbl5Ofh7Onp7Ozs4+Dh4f/y9/bOwNnUV1NFTkhIQEFNR1JER0ZPdHVORVpMW1pZQUFaU0VZ0NXUUNjBxN/M9MxV0dBETV7RUllX2NvT19reWElMdXxzcnNxdHZNSU13dEFHWF1QUllERk1OdEp0SkJBWNLHxvH65Pvk4ef4/Pv7/fT8/PbE9PTfVtDYV1pc11JaUNzSVlfXU1xYU19ST3dBQE5LQEVHQltZWVlSUdbf28zMxN1VUdVSVtPZ0tzM9czF2sXXT0lMdXx7fXB8fnd0fXhwSHdwS0l3c3BxdnZwdEhBTVzb9Pz54e3t7O7i4ebg5eTl+PjO89rW3k1YUEhfS3FSREB1W1dCSEdTV1hSV1BaTFlfQ0JR1VBSVdLa39nPxdvH2NBcR1hHQUdbVtRS09jf39bVX0BOQ0NKdnZ1SU9JWFlaR05YWElPQ09yfHBzfGV9cXN0RN7w/eXm4ebn4+Hk+uTk+vrn5f/1yffB1NDXV19YUNHWWVbXUERMWVNFQEFMTnV2TUZ1SVteXFlQ39nQ2s3Ax9HX1FxdVtTW1dHe2dTdw93WVFVSTElERXVyck93cUNdWEtKTkN0fXBxcn9+c3FzfHxKW1jd8vv7+ubg5ubh4Ob75eXk+P/89MHS0dDVUFTUXVlTU1pNT0RASkNfX0NKRV1BT1JTRUFJXVZW1sXGxtndxd5RX1hbW1pQ0dfW09Ld0tPS1VFRU1JdX19YQnR1QFtRV9XXW0xARUJ2cnN9eHt+eWRkfHVEUcP28//75Ofn5Ofn+/nk5+b6/vjy9fTJwsHY2djQ1lRZWkB0S0NITUpxdHRMRk1CRVpAQktDV1DTxdrD29/E39bV19DU1dfFx9/Y3NDWV1RcQF5WUkVNTndyfXR1TkdfWURMd0p1cXF7e3l6f35/dU1f3trP9vDy5eXm4ODj5f/64Obl++X/zvT0wsbYwMXS119HQU9MdHVNT0xKTEdYW1JTWEZEQUJCR1nV39PR0tbUUVBTXVxERF5R197Bx99SV9NQWFtQ3tPUVVZZTkxEXVpFVFxYRkBFdXdzf3l4f3pkZX93TV/V2NrJ9/7l5Ofn5Pjl5+Hh4Obh5uT4/fHw8/Hz8cHXUF5MdXVLdHJ8c3Nxc3d1QEh3WllBdUFW1FFV0NDT0d/O2MXf0dZU28XEw8LE1lDRXEVDRFPVX0NPSHB/fXdIcHVPR0p3dUJ0fXx9c359d01PRFHf39zE9/Lz+eXl+vj+5Ofn5Ofk5fz9/cvJ9fD2z8La1FxYRkp2dkpNSklBXVpAR1dSTUVTV11T195QUFbQVFJeV9RaRV9VV1Tcz8/PxMDTW0dFXFJXVNRXXkVZRERCS05NQ19eSnV2dnx4eX1/ZXt0TUhPX9FS0cX28/X3/fzz/frn4eHh4uDg5uT49vf88svLxt9XRExKc3BzdnFwdktKdkJJQ0pMXlxHX19eWVxQVNZcXVfd0VTX2d3X2MzI9c/Z3lxGQ1JETUdHRU9AQE10dEpNTkRSXEtxdnZxc3F1SXZLXldfVtbd09DYyvTMy/D88fD45fv65Obm+vv588nK98rBwczFVVpHR0x0T0FBdElBRUxOWlZcSETc3EVeVNRYRV9XTXVPWlhJR1fW1tPG9PXP2NlbSEdQXkBHU9VaWl9QQnRAUURGX1JLcnZ0SXJ+cXZxdkxTWkVY099WUdnK3NDM8fb28vrn5+bj7eb++Pry9PTw9srPzcNUWF5ZRkJMWk52c0tBSkpbU0xC1d1ZQUXU1FhfVF1AQFLVX1pQ0tHV3vP9zd3eVUFPTUNLd3RdX0BDWVpNQV3fUkJJQnRzcEhwZGV2dUpJQ1ZWU9PO2t7ZwM7Nz/Dy9fTw5eTl5OH4/P////H18PLJxsPN3VJZVF1fRUBASnN0RkNIdUFZUVPV0VZZV9ZSRF9QR1hfXFBTWVNX19rPyMDfVNRTRnRPRkNPWFZbWVlTV11T3dBdTEBCSXRwfHh5eXF3dnFAXVTU38fF09HEw8HFyMzP9fnl5fr6+vn//PP39/H/8fTLyNrQVtXT1F5HXERDQERDSHRNQVpERkVZXFlcUlVTR1pTUlBeWFpaVtfY2sDZxMXaVF9ZRENORlNUUlNRVdbc0dVcWUZERk90c3B9cn13dnN2S0Je0MPG2cnLzs3Jz8fTx/X38Pjl+/v+5fv5/fH39s7D98jcVlXWUUdS0VBMWllbT0pAQ01PRlpUWkVYXltZXVhcXFxRWEFERl9EXdDe0d3a2FRFUVRFdUZSW0dHRdTUVlTR3Fxe11ZKd3VLeXp8SndwQ0dcX1fEycXZzffA3NjB3FbSz/H2/frk8vz65Pjw8/zxzsr39N7W3NBZUdHb3VFR0tNDSUBad3JD1VJCQFFZTkbV1kVNQ0N1cHdBRENH08Tf3sDOVVxW0FJHVtFRQ13R0F1d1ddSU1DcWXF8cnJ6ZXx0fX9wQ0FaXNvLxNr09sjc0NtSWNPw8vz64ePm5Obm+fP18vPJwffCU0VfVERHUdFeR1hSRk9NREh1TFzVWEdH1VdfXN7dUV5YWEt1TllYWVDZw8zawcTRUlpWU1hR1FpHXFdTU1hQ0VZRVtVGc3lyfHp8SkdPd0NTXlHd29Pb38TG1FBZW1tT2Pf08uTm5uTk5+T9yvTx9fTNz9tUXVdUVtfBx9VRUVFFREJPdU9aU1pOTUVcWUdb1VJPd0l0cnFPRUJe0MbH3tnY1lxeV9XZxcXE1NHS1F5HUdPVU11fT3N/eH57ZXBOTE5CU1REWdPQ1t/H3tHV09VW38HL+eXl4+Lg5uTn+fTz/PfHwcbYVFpcXFldU9fQXlpRXEBCQUZBQVtYTkhCQEREW9HWU1hZW092T15ZW93C3dXR3FZYRF9R1tzEx9nW1VReQUJTVlhBXkVKdnBwc3Z0RFBTXVTRVENd09DXU9DfV13R11bQwvfz/vrh4eT7+vnx9fL9yMLAx9JV3sTY3NLFxd/UV1dbTUBbWEJJWEl9c0tPd05CR1paWFlASnF0Wl/U3NjZ1VHX1FJW2cXFyff2w9PQ0FNaX9dZSEFBSnNyc3x8c3RCW1BWV1ZeWlpSUFzU3tde1NrY2cz3//n65+fn+Pzz/PDx9vbI2dfT0VHV3dHV19Pf1lZUXUZMRlddQE9ATHdHRURAQ9fe393RUF9DS0JGRlxUVF5MQkFOTkVd0dzZxsfF31ZQU1lbXFNDdHVCTU5CT01EU1RQV9zRVlJZW1bXVFBZUkdY1t3S3sny+Pv65fny9vfz//7y98/HxtrHx9rEwc7D0tjfVlhcWkp1T1tLc3FxfHNwdkpPRFFX1VdHQUxITltQ19bS3VdQ0tPW3tjN9M/My8DeVlBRWVtNSnR2cnZ3d3Z0T0hHR0dRUlhTUFfV29lVXVLX1tPYyPf08Pjl+v/y9sv1z/bz9sr1wsXe39Pe29nFxNre291RQEdHRkxIT0B0d0BNQllWU1FeUlJeUklKd0pJQ0VYREZBQE1AUNTX3M3198zA2N/UV9VXRklOTkJ1TkNeW1taX19dU1JfR13X0FpdUFhNTkdYXdTazMr3//j48fT19Mr09/bx9v3z8fT39vbOzsv3yMbQ0NVETU5CdnxwdHx+dkNHR0FHQk5AT0hxSkJNTUBYU19fUtTdVN/GwtvBy/H0xtnZ1EZBQEJ1dXVxfHBxSkt0SEFaRVtEU1ZW1drTV1zU0Vpc2svKyPX2yvD9/PTL9Mja2sDPwsfPw8nBxM/P297M8vDH3NLaV1pHRk5ITURMRV3U0NTRVVhNSnFxc3Z1dXRxcE9bdXRF0NRXVMLPwcv3ycbFxd5dX1xTWVZYXVhMWlJaTENfUENMUtFdWljVXExLQEhxRlDf3dPHzsfK9fb39/bx9MPNz/TIz/T+/fHw8vD19/zwwsfe2V9DT0t0cXBwdEtJQVJZW01HdHx5c3JzdnV1cE5FXVtUwfT1yMrx987Jy/TG2d3WXk1OWFxaSUBbQnV3dXd1TUZMRllTU1NVVFlBQUZaRFffws3NwfTwyM/28v3w8fDN2t7b1t3ZwcHbxMDNzvX198jAwMLcVkNCR0BNRF9TUFPR01RZRXdxc3BwfH1yfnh2SnVIXtPaxc3DzMnNwMzKzsPZ3NdSWVVRUFfX11FWX0dNWFhHWlxSXFhcXUd1dnR2dnREXVJR3cXMzcn38PL8/vv59czPyNvG9fTJy/f39fb98Pb09s7bVkdIdXRKdEhNTV1QWE9GQUp9fXFzeXlzdn5+d0BCTNfN9/X38//wz/T3ysbY399fRFteRUxFVVFbWEF0d01BREhY1dRcVtRRT3ZOQ0dMWdHE39PL8MzP9/399vD/8dva2t5QVtjCx9/EzsnNz/L49/by8cVeQVhCdklcUFfT3NtQXV1EdHFwdnxle3hlZHt8dHdP187H38Tx8djG8fHCwcPP3FPU0NTR3cTB3FVRXURFT1hbQ1lQWE5OTHV8eXN0cHRDVFRS0MzOyfb/+/v+/Pnzy8DLycLByvHLyPXz9vT9+v7xys7RRXV3SnBwdFpYX1hcRE9KSHVwfHJ0cn5+cnl5ck1eUNbJ9/TL9PD39cr29M3e0NBXWF1VV1RRUVJbSUJ2dnF3SERFXVNGR3d1dEtxTUxBX1Tc3N3b9fby/f75//bx9M/AxMHF3t3FwsPFw8j39fHy/vzxz95XRkdOQEVdVdTc0V1bR0NMdnFzc3hkZmFnZ3pydElDXtfQ1tPE2MLDzvf19M3b2cbGxMDPwsDdxN9SXEFIdHVLW19aS3R0dHJ2S3R1S0FEWkNS1NHGyPD45fr///3x9vX3y8rKz/T3yPfy8v3z8/z99cVRX0VId3RMTUlLQUNKS0xLSnRxd05xenpleHl9dUdc1tnFx8DNwsDFx8DLys3Y2tHU28Xb29vYVV9ZR0J0cXNwdUlaRUJCQVxSR1tWXERYUFJfUN3e3tvL8/3x9fP2zcDAx9jdxcTaxc/PzvX3/fz9//D0ztzc31BEXdVTWkVQUV5TX1pGSndxfmZhYWZkZH9KTUBfVdVV1NPf0NvI9Pb19PD0w8j0ysrJzcTT0NzURHR2cHJ/cnZ2cHB3T0p2TFhLcXVDWEFGVcHN9fz7+P/9//Lw8PL89s7L8PT28vD3yfTx9cfexd1TR0VbT3NxSnV3SlpZTkxdUlxaTXVyeHp4fXF3R1ZVVNnA29HU0tzZ2MHAxsDOzs3F2sff1NXS0FRXVllIdE5KdnF0Q0ZHQV5TXEFHXEdJTVJSWVbawMPCy/T1z8bByPTDzM7Cwcn39vb38/L88vD38fTIwNrT0dFcWFpcUF5eU1lHQUZOS3B4e2ZhYGR4f3xxQkdbWl9dXFXZxcD18fz7/vLz8vDJ9cvPxsDOxt1XQXV2c3J/cXZzcnFKdUh1dXZ2d3VNR1LV38709/Dz8vT29PD88vH38v/8//zz8fX0ycrJxcbDwN1UVFBHREdERURFQUBHW0BDQElxdnF8fH1xdnVCRkRQU1BT1VXV09fQ3cP09vX0ycHGw8fY2N3W09PVV1xETE5OdUlOTkh1S0JATXVPTEpLTFxRVdbCyMzGzvTOwc3L9vf19v388fLy8fTK8fH19ff2yszJ2tDW0ldTVFBTXUVPTnRzfH5+e2VlZXt6eHJ2d3FOQlpFQVbZ0tjM9M7J8vL88vzw8vDIy/P0w9vF01pGXFh2dnZKfXxyfXh4fnh/f3lzSnN0X8XH28jy9/Tw8v3w8v/7/f3++uX58fD9yMnLy9rHz8/c0NDR11BeXFVeW0ZaSHd0Qnd5fnN9ZXh8cHN3d3VMQUNcV19H1M3e0N7Lw9rL8vTO9/D1ycjNzcfYUFfTVV5UV0RCRU1xcnBxf31yc3JycHRKdExf0dRU2/H1z/Tw9vbw8vH28vL5+v72+fny9vL89MbIyt3WwcfUV1DUWVhBdHZJdnxyf2Vke2RkZXx9f3NKdHdNWl1FUMXMw8DA9/PwyvL/8fHw/Pb09Mnc0lFfXlxbT0JAQnR0cH55dn14fnJ+ZX52dkpZUNXRxs/28vzw//r58/3+8fD/+v3y+fj98vP29/TP3tjZ1FHVU1hbXEBKSklJSVhASnF2cnl5f3h8cH1zTkFISUVYRFbZxNPS2sfP9/T18PPw9fz+9MHMxFNW11BZWkVATVtAS3RLcXN2dHFycn56eXR3dVnWUlTEyvfK8f3+/fPz/vz0yvz+/P/l5fLw/fDPzsDc19ZZR1leTU9GT3RPXEJIQEZ3cnZxe3tzc35wT3VITUxKRFXV0Mz0wsf39M73/f798/Dw9vTA0t/TXkVTW0NOT0pKTEZJSU13cHVIcHx+f3h9d0hH0dnX2/T39fH//Pb9+P/8+fP38vn+//r68vTw9MPBxNVTUV5DTVtCd0heQUNSUERETXZ+f39lZXh7ZHxxcXN3d0pBUNPdwc7L9PPw8f77/P35+vLw8cHV09lQUNddQU1CTEtAQ3BwdHJ5cHd7YWVyeGV3T05f0NzH9vT38fz88vjk+Pz4+/j65Ofk5eX99/fJ2dvXWV9eTndCRkt2QlpMTFtFTHV2c31zf3t+fXl5dEF2cUFbRlDMys3L8fT18PDx8fPx9vP99MLF0VlW1lFFXl5DT0VcR01IdHZ1cn1xcXt6fHN9c05FX9TZx8j39vH//PPy+Pry8vjy9/zl+/77/MrAzMfQ3tZcX19HQF5URElfV0dNX1p3cHRwf3l6Z2V4e35LQndKWVdc0s/Owsn29PX39/by/fPy/vbHwcdXX9bcXVvU1VhaXEFOSHZ9c3F5enxzZGd5fmV+S0ZCV8PDyvz7/vrk+vvk5/j8+vv9++fk//L2wdHQU0ZFWUFFV1dbWl5DS0RcQk5HQnZ2dHB/e3t7fHZxdkVSRF/ay8fGy/bO9ffJw8LGwPbz98v0z91V119GWVdSXdTWWE1DT3d0SHZ2dXZ9cnF5e3J2cHBDXlDczPTx//r5++Tk/vv78c738fTw/v33y8DWU1NERlxU19LE311eUVZYV9dESENJc39+ZWZkemV+d3BxR1RQ1cHIx8X09s7PzdnR28LD9fL2yPfK0FXb3FDU2N/U1lBPdXZwc3Z0cnxwcnp6fnllfXZzdF/V18Lw/f7l5Ofg4+fl5Pj09/789Pf89sLY1kBPQUxOXFVdUNFQQkJfRktEXk53T3V9fHJ8eXxxcEtZWVjXx8LC8fP19fDK3NLWXVzU0t/DyMDGx9dbUNZQXtTZ0FBRUVpBRkt1QkJ1dEh3f3FJcXJIQklEVdDSxvT39vrn5eTl//b0yNrayMvD9PzO0dLQX1pR19TT2d7Ew9xV191QQUVSTXJyc3pkeHh7fHBwdERHQ1HZ38fx8/T19MVU0dnVUdnNz8r2ydjH2ldVx9Jc1dhQQF1Zd3BIdHx2S3J/c3B/fXRxfUhZTE7Vx9nC/Prk4O3m5+Dk/P399Mn09s3ExVVBTUBJSkVdQUDV39HS1l1W09VYXNVGdEhPdnZOT3VKQEZEUlRS1M/KyfT3w9/b3FpEUVlHVNvS0MTeVlDX113V0VZV3NBSUFVYSUVTTHVEWklOQ0p1T09xdkxLdVrV19v2+fjl5uTl5frxz/XLzMzO29DRUEBAX0VBWNfU0MzOxMTA29Pd0VhAWkZ0d3d8eXJyfn10THdKWVDVxM3Bzc7Nxcfa0FDW39PbzM3Ax8fG3tjYVFHX0VXVVltERkRMdU5KdEpJdUp1dHd3dXR3SEJGUdvI8f7l5uHg4OTl+/P29PXPxMXWXUdBSXZKdXRBV9fW0d7Y09/f1VFQUlhfX0BOTk9xcUJHQEZbXVTR2MXHxsbExdnQU19cXV9W093S0FRU0ddRWVNR1ddV0dbVUVbVUFBTUFdSW1tFQ05KcXB2dnF1QUVQ2Mz3/OXk5fr7/vH39PXLwsbb0tZTRVhaQ0BR09zEwcLPz8zE3dHUU1tcXkB0d3dzfX1wcHZ2SlhSXFfd2sXZ3N3T19TW1NzYxM/PzsLPw8Xe0NFX191XUdVWX15FR0NAREJORkx3d3RxcHBwc3x1W13XzMr3/OTm5ubh5Pj+8PTx9Mbe3NRYR0ZKc3dOTVpTVVbW0tzZ2NtWUlRcXldQQU1FQ0hJRUdAXVZV0tjf0NvF1lPW0UdGW1tHXNLX1tzT1NfWVlPVVFbV397X2drRV9HfUV3VVVBfWk5LdXN8fHx+dkRcUtfGzcjx/v/9/P/29PfKyPXP2trH0ldQUV5BXNfW3NrGwdjZxdre1FlaUkZITEpxfH1xcHFOQEdeVtPY3Nja0NVV19DXUFHVVFTdw8jFxMPE3dPS0VdQU1dXVVVdUl5AQUZBQkxDSHRKSXRwcXBxSVrV287K9fL4+fnk5P788vPKzMvA39DQV1tbQUlISkxBVlZT19Lc19LY0FNeUlBSWVtaT0tPTUVZUtTf2NrCw8HG2tzW1FBeWEFOdU9GRVxXVVZT0dDVVNVXUNXZ2tnEw8XR1VXX11dWUllHSEhOdHBzdktJR1TS09jByfT28PH09fTKw9ne2NzU0NLT19bXXVxW1dzEwsbEyczF2N3UUlNSRkJCdXNwd3ROR0VaU9fU1tjZ1VTX1VNQVVBZWUFHUNfU1d7F3trMxdTc3V9W2djW0d7RU1JQWFhcQ0pIS3FzSktxdkRFWtLb0sb38ffz/vLw/fL19/HH3NreVl5VVUVEXEJLWkVNXt3RUd3H1lfS015W0FBaW1tMTVFVU9bFxcbIw97AzttXUVdBTFpBdElNSHVNRkZd0dBU1N1RXVZTXdLPw9vCy8HFxd9V0N5TQEdGQkxBQEtOXlxcUFXW2MDE2MXCzcXAwNjAxt3U1tDQ0t3Y1ldUVVFSVNzAzc3Iy/XP39zXX1lZQnd3S05NQFtaXNVUVNVV0NTVV11fVdFRUVBTUdTUUdXYw8fFwtvd1F1aR1PV1dDS3t3YxFRYW0VNdHd2d05CTEJeUdTS2dzZzfXLzcn09Pf1yMvJz9nQ01RX0dNWXlNcR0NJdUNcXF/XxcPGwMDZ3d/TVVZTW1jX2dXUxMDZ0Nze3thVXl5ZQU9HRUJOQ0RDTkNaWVHVUFfQ0V5aXFxW2cbBzfXLyfb1xNrZUUNDWkNCRFtPTVhEWlFWXVfZ3VHU2tNV0N3SxcPc0NrE39rJztPW3VVSWV1X09vexM/0z8bO2tVXUVhDQUJOQ19YQFBXREZcV1fXVVxeVldbX9ZTXdTQVl3c2t7YxdzX3tFHQVxZRlHZ2d/Fx9Ld3lRcXkBxc05NSkhfXltXVl3Xx9jTxszExcrIxsDDxdvG39bT2tJW3dhXWFtNcXdOSU5R0FfeyM7GyvfG39nQUlTT1FHS2tPRxdlQVNzVXVFRR01FT3VCRnR0Qk9LRVZRVNbWVFZUX1zX3NbdzM7J9fHKw/XP09fQWkhEREhIRVtOT0BNQ1BXXl3VVVxS3t3U28Hf08HDxs3D2NvAx9ZXUFtFUlFU3trb2MfPwMDN2tVTV1lEXFtAR1FfTVlRWVtXV19X1FNYUVNbXtRRRl/UVFbd293exd1TUFZYW1FVV9PZ3NzF29HW01dGR15ET01GQUVYR1pfXl1V3NzR3cTFxM3Mw8DE3tDf2dPR0tfU0tNQXllHTUJfWVtU0NHQxMzGxdrY1tPY09fQ1NXW3NPV191VXlZWXkRaW1lfWVtATU11SUdBQFtW1dTV1tfU3NLT2NnS3cbDw8/Jw9nE2VZRUUdIQlpMSENEQkxZXlpdX0RZ0tnewMrYUdzG09ba2dfS3tzfxd9SV9nc0dzcVVfd39LFzdxT09lRUNdRW0VaWl9UUkFR3FVS1NVYWlJUUFXQX0BcUkZbVVJaVtnT1N7YV9LM31Xd3FFc0N9WVdjUW9TTXUVeQUtMWUFIWF9PW9dWX1XQ1t7I9cn39sXUxsHWVNdRW1HTVVfT1UdT2FRaV9BfXd/Z1dzC1lPaxVdVxdxS1dvfVdnF19LH1FlX1UVb0NdHRVVFdEBGSkxEQEdU3dVX28fd28zfV93TXFPe3lDSzNLRz8NQXVxDQkVaS3VcXU5EV0RCXtVU0Mv3wMP1x93B2F5ZVFBe1N1VVMfC3NjG2dHR111R3txX1dJU1d3WXV3WUV7W3VfXxsbR0t7XUFFWW1fZUUZaU0VCXlJBQlFTW1bWUNTCzN7cx95QUFBGWdfUUlTEx9ja29VYXkROQkBMRFxZTUdRUl3R2sDK8/bNzvXD29/VW0VfR0FeUFJR2drU3MPcUlDXUFDR1lPUxNxU0tPW39zd0NnOwd/E29fU1tVcXVBTVlFdRlpfT0xFR0RFRUNGXVXX0dnZ0Nzc1ldXVFbV39/cz8jG2MTE1FFcTUhOTUxNQExMQ0deXNLBw8/Nyc3Awsfd19RSWFpGRVbV1d/e2Mfc0VRS1NbU1VDW3dDQ3NDR39Hd3dXQ29/W1NHWV11TUlPX1lVUVldXXF9dWF9RW1pYRVpc1dHV09nRV9VXXVZVV1HV3NjexdjZ2d3VWVpFQ0JEWkBARUVHW1LUx87MwM7Jw8PB2tzR1F5BRERHWFJQUFXW1FBWVFDQ2dHR2Nrf2cfA2tvE0dXd39LS3dRXVNRWW1bVUVXXVllfXVtaUlNZWFJEQ1tHRF9SVFfU3dbRxd7R09zQ1Nzb2NjA2dbS0VhFWFtGRFlGT0BAT0NSV1ffxd/TxcDFxczE09zTUF5TU1lfUl1cVlVcVtDd19HZ3dDZxd7b2tPW0NLU1N/d1tPRUFNQXVtT0dbV0NNTUFRQXVxQXVtSU0RDREFAWFNTUFTR1NDE29Pf3NfQ3d3d0FVSXlNQWV5QXVPVUV9bRVtDW1TV1tzf0N3YxcfHxdzQ3NVbWV9FRFtYWVldUFNT1NbW3NjZ2sPAwcfa3dPf3dfc2tPW09ZWUFdUV1fUUFxTXl9SVlFdVlFSXF1ZQEJNSEJdUVDR397FxsPBwcTZ2drE3NDXXVlYU1JaXl5FWl5eRVpYRFtcUlPV1FZX1NLZxsLBx9vf1tRUU15aWV1RV1dU1dbQ3dvF3tjb0tDc2t/c2dLQ0tLQ0NZUV1BcX1FVV1JdUVdV19bV1dHd1tFVXkRDTE9GXlxRV1ZV3MfHx8PE2Njf09RVXUVGWkVYXl9fXFTX1VVUXFtRV1JW09BU0dzS3sPD2Nnc0VddX0ZGRVtaRVNRU1FUVdbY2NzHxN/bwcba28Xb39/f09vB0tRVVFxYXltAQ1hFW9VVV9Db3FTX0FBGQU11RlNT1NLe3cTJzsXCy8TYxtnQ1lReQkBGTE9YW0FSVV1ZXl5HRVxHQlbXXFHQ0t7Bzc3Hx9jd39xWUdDVXFxWVFfU01Fd11de1dJXVNPTVdTY01Tfxd3cwd9XVlRWXVZVXlhXUFxV3dzZw8Lb3tnXWVtaTElBRV/V19TcwcDe28PE0tnZ1tVRRU1OTElPX9RSUd3UU9TWUl1UUVpc0tVd093X3cHHxMTb01TUVF5cVF9EXFZeWVHVU1bf11Tf0lTR3NfW28fY2cDA2sHH0NXWVFtaUV1BWVFERFfVVt3B29/G21FeUUVNXFdTVdnc1t7Ax9nCyd7cxNFeUlNHSUJBT0BcRUdWVV5d0FFbX1FYWlFUX1Hc0NLO9M7DzcHc0NBQUtDXWF5UWUNaUlhe0dxX1NdaRlZWU9Xf2N3YxtrexsfX0dnXVlRUWUVTUURe0dTQws/Hw8fc1VJcWltU1VxfVlNR19jbxc/C09fTWEZdXERFXF1YWFpGWldRWVLR119dV1xYUlFTV9/FwPf0xsTH2dVTUFBdUVxBQ0JMQkRSUdfYxNRYUlxcVtfR3sfH2dnExsTGwd3W3dnRUl9ZRVteRUXX3tPS29re3N1XXF1RUFJQWEVQ09DSzfXOwsPcUFXUXV9TUkVbW090TEVCQFxTXlZVWUZdUVtc19ZUx/fJw8vIxMXb1FJV011aUltMRVZYWNTdVlLXXExYVFlY09nR1N3VV8TJxdrIw9PY2FBbVtVbRdVUX97G0dTbwt/d2tVYVNFbRFNdRlPQ0d7P9dLV2t1R0dJdWFXVRUBBSndBWE1F1NVfXlxFRlNVWFLe09HEz9rby8zS0t7VX9VVWltVV0dZUV9fVVRaW9RRWlxWWVnT0lFX09bXx8rPzfXO3dPSVlNUVF1Q3NNQVNRW18bF0tPcVFpcUFhf1lFFUNDS3MTH0dfH29XQ01ZWV11BRl9HSkxeWl7VUEVEXVNfUtZVV97TVNbf2sfF2dDX0tFdUldTUlVRUFZWUFlYUlNQ11BaXVVUV1RUVlXd39PEycPaxdnXVdHRUVbQ0FXX1V5eVdPU0Nre1tDRU1DQ0FBR1tbR09zS3cXa09DS11BVVURDRUdGRUdMQ11ZTUZYWkZeU1LX2dPX1tHV1sPA3MfP29be2tHS29ZeV9hUWl1bTUdTXUFaXURaUFBbUtBUVt3HxcTOz9zYwsTe2cfaxcPc1NLSV1HX1FDV11xFWVJYXVZfWVfS1VbT3tLexdNX0tvWV9BUXFHUU1lU1F5aWFpARFxFQ1/XUV1XXkFbV1ZT0N7c097WVt3Y1lbR3dHc2NBWVdZUUVZQXl1VXVtX1VFV1tfQ2sXR19zdV9DZ1tTYxd3Q0NRR1N9VV9ndVtTd1lfQ2VRT0t7W3dnW197F0lfW119QVFlFWERDR1hZX1ZQQUJFRURZWFhQV1VTUNZQWlbW1N3E29zd3t3fw9tV0Nrf0dLc1F1eX0dBW1pDR1hZUtXUVtfe2dzExd7bxsTbxMbF3t/f0dbQ1tXR09PS0VdfVldbRVBWUlNWVVXS09Hd3dPV1NDVUVdV1FZRUlJXUF9fUVZfXVZTU19YWFlbWlheWUREWlxSUVBQ1NbT3dPbxNva2sXBx9vf0tRUU0dFWltdUtXW1N3Y2dzd097b2N3c2djQUVRUUNXUV9Xc3t3c2NLW0tLWV1RX19LWV9fe3tfQ2N3V1FVfXldXXVNSWltfRk9BREVYV9RdUdddQUReWlhSUlhS09RQ19RSVNzd3drD2t/Gx9zFzsXU19FTW0dNdUhERF/U0NXT3FRU3sTFxszDxMDG11NUVF1W1tZV3MTf0Nzd0dzcVlxUVF5bUFBSV9HQ097e1VBQXFLU3dPW09BWX0VBQVxSXNXd11ZQWUNBRVpFWltaWVxYR15QXVJU1VRV0tHX3MTFxM3DxcbG0lBcXFhYXV1d1tLV1dRTUNHe29jYx9nQVF9cV1ZT1Nzc0tzb29/EwdzaxNPc2NdcUtfQ1tHe39jB3VdUUlpZUldfWVFfTkpLdUxaWllT1VFbREVBWFJcU1VUUFFXUl3U3NdX3d3X1tZWUdfZ3trG29vB21VfUltCQV9cWVTXUl9XVdTS2N7exsHc09RX1N/f0N/a3tbW3NLR2dnS0t3WVFBdQUVU1VbQ3t/FwdnQ3dzVUNTWVtXWU1tbWVlcUF1cVtVZQ0BATUFeXl5SUVpHXlhYV9bVVdDd1lZWUFDX09PZx8HBwcbY0NPRU1leX1hdX0RYUVNfV9ZU1NBXXl5dU1Tc39/ex9vQ3cTG2sfAwcbMw93Q0VfU3NzQ38XZ3MXE39PTUV9dU11bRUBNQVhbW1lZWlleRE1EWVpaU9dXVddWUNTR0dLe3NzY29FSXFJcUlTV097e11fR0VZU1VNbX1xaRlhZXVXQVFHW09bU1VZQ1dLd2MPNx9ra3t3a29HU0tjZ2d7UXVJTU1fR0NLZ3NfQxcbb3tLQ0NDWV1fXVFbU1FBZXF9BQEFHWFJdWVxUVFtbXV9ZU1ZSVdDc09HRUF/V0NXU397S3dLR0d/cVFfR11VUUFlaWVNcXlJeWF9ZQENeUlHW38XawsHe28Xb2NvY3N3fxNvf3t/d393W3cXa3dLf3dDZ39fR3NdSUl1cXVXUXV1cRUBAQUlIRVNd19jTVNRXXlPT01BQ1tHQ3tnRVVdWUFbT1FXRVV9eUlBRVlFTV9PWUFdRXF1W1VddXVlFRVtYU9zf09rLy8DAxtvYw9rW09FVX1NVX1lV0FZU39LX0tLX1d/Z1tzH2tna2NHR39jd0t/WUVBeTElHRkNEV1RX0FReRkZBRFJdRkZSUFhd1FVSVlRV0MTb19LZ1tfb2NVX0tLW3tjR19zUXlNRWU5OT3F2QVle0cfaxczN39/Axdfd2tFUVVBbWVZXVt3a09/Cwdzcxdnd3tnW0cXd1NLQU1LW0VdU1lJER0dPQlJTXdbH2tbd3FBYX0dMQURNTFlZQFjU1V1Q1VfV0NNVVNDRVdPTVFTS3dbcxtrS39xWVlZaT0JGQ0Bf19Hezc7CwMXS09LVXF1UXUZAREJGU1fX39rY2cbB29jCwNvbxsHHw8bb2MTf0dLc1VFVU1tHRVpARF5eUtbXXkVHTUp1dXZ2Skh1TVtYUNPe39/bxN/f2t7dxcTd3dnZ39vH2NnE31RV1lNbRk90dnVOT0dV0t3Bwtjd3N1UV9VRXFZRW19VV1fSxcTFx8PExcLCx8HA2dnHxN/c29JR1NZTV9LVUFZRX0VZXkVY1dRV0NdcRkNMd3N3dnB1T0tDUlJc1dzQVdLcVdTY39zEwNvaw8Pf2MPE093cVNXRUVpbX0NLRkVBX9zb2cTG3NDQUUdZUVlHXlJZXdfT0cXPwcXNw8XHyszHzMvCwcjB09vFVVDW0NXX3NZQVVVZRlhaRltXUF9TU0FJT3dydnVxcU9BQ1lUV1HQ3NbQ2Njf2MXZ28zKycPDxd3ZxdLV0dZWUVZeR0ZDS0tHXlHS3dbW3N/WUVxYRlpcX1LU1tfT3sTHyfXCwc/IycrIwcPOzMbF2NLVV1ZQ1dHS0tbXV1FWU1hEW15fXV1cUVFeQE9JdHV3dnVITERfXVxQ1VZTV1RV0N3d38TDyM7H2tzT09bW1tLT1tRWU1BTWURbWkVW1NXQ2d/Q1VVSWV5FQEVfUVfQ39zYwM3Bwc7Mws7JzM73yMfHxdDQ3dFV19PW0dve1tHf1F9SXVpGRkFCRV9BSUNBdXRPSnZ1SU5DXFxaUNReWFTQ19DY28TI9czAz83c2MTc09zf1dXd1FJQVERCWVtCWFZSVt/ZV1PVXUZEWUVa1dVW0sTZ09rP2sXK9cn38crO9s7c3NjUX1HVUFXc0dfYxdBU0dVaRFhBTkZbQEFfREhNRkt3Q0dKQllaRVJQRkZeWEZT11FU2MfexcjPx8HMxNrC2tbd2dVX28bd091XRVpaQlpXUFPW3tDV1VZbWllBR1JWXFfZ3NfT29jcxsHHzvTLz8jM3tnG39fS01NT1tbR28bY397RXVtET0tARkxCRENISUl0dUBAdU9aR0ZeXkdEWVpaVtDX08bG2cHLzszOzsLO9cHd0tNVVN3d0dbXX0daWkJHUF1bUdZWUlddR1lSXltWVFJU39DW3d7a2MHMyfX39c/MzMTa293V1dVSX11RVtDS19bQVFlbREFAWlhaRFlaTUxNQ0NEWUVGW15fWVlARkRDQ0VcXVbT2NnFxsPNwcbBwdrS0NZUVdHZ39/Z39RQXVBQUdXV0NHW1VVWUlBWXVlYXFlaUdRVV9Dc39/c28fMwcHCzsDEw8zE3tLWU15dXVHW0tDc3ddQXEZNR0RDTUVETUxAQEBGQENNTU9JQERBT0FeRFpR11fW29nZxszCzM/MwszC2tPQ1FNW0t7R0dzTUFBX1VfVV9XXVVJSVV1ZUFVdXlZXXlxU11TU2MXExs3AyPTPw8rM3d/G21XR3tZdUFFcXFRUVFdTW0deWkNEUltAWFJGQFlcW1hRX0ZDQkxBQExOR1lHWlTXV9PFwNjBzcPGxMfZ297XVdRWU9Xb39LZ21VTVNZVVNDQ0dTQ1NDTVFBVVltbV9VdUdLS193b2N/Z2MTGx8PCztjdxcHZ0t7a1lxW1FRTUVBRXFhHWkRDTERbQVpSUV5QVVVfWV5ESHR1dUp1SEZZWlpS09bU3sDF2MbAxsXGwcLE2dPS0FTV3Nve2cfF19XW11xT1NHV1dTU09HXVNVeWlxWUl1Q1tFX0N/c097HzcDCzMnA3NLFwN/bxsTT1VdXXFtaRUFJSk9DSU5NR0VeU9VWXdfTVF9cX1hNT01DT0xBWVtBX9bT1Nzawd7d2MXf39jFxdLS3txXV9PE29zaxdHV1VXUVNPYxdvZ2sDY1tbWUkVdV1ZcUdTVUlBU1NTV1NDY2d/YxN7R38Pb3N/F2tLX0dBXUlJSWkxMRk11Tl9UUVTexddV1tVaQ0ZFQnV1QEJ0dU9EQVtX1tXQ2MXY0N3GxtvEw8zG28XA2NHfxMXT0N7b1FJQ1FVR1cfZ0NjA3lJT1VVERFNVXF5W1lRQ0MTF09LHwtLWxcHc3sHD2NjBwtrT09LRU1tZREh0S0t3c0tbW1lV2Nve0lVXUV5bWlhNSUNAdXdNW1tZVdbQ09nc3d/c3Nre0dPax9PW3sfS0tze1NHU3NNWVtPb3dDC9MDZxMFWWFHQU0BZ1VFERl/UU1zRx9zU0sfWWlba29XYz8bdxc/B3drBx9JRUlNeTElCT0pKRlxd1NvA21VTWV9FQk5BQndxdXRycEZZQEbV3tVT0dre3cH1yNjfzsnQ1sPI3tHbxtbV2MXVUtfd0VbR2sXe39dUX1teX15ZX15aQUFHXNfc39vMwNzX397W08jLx9v19dvRx87f1NLfU0FHU0Bxd0NCd3VYUFtT3NJaQl5RRkJSV0dISE5IdExbW1tQ1NVXVNTX3cTCxMfCx93Q28fe2sLZV9Xa3ldR0tJWVtrNxN7DztxQ0dvUWVDQV1pYU0d0TFNRWFPd3lNfVNPU1sHIwtrN9M3Z2NraxNrc3d/TVVBTX0ZGWVxZRFzWVllYUllAT0RGdXRCdHh/S052SlJQQURU11Jd2M7H38/w9cfEz83d3szD09HE2FVV0tBVVdTW1tPQ1VRdXFfU19TXUVxdW0dbUlBZX9bQ19PE39fYy8nDy/D1zMr1zNvfwcVRX9TRW05EXkBLXtdfQl5XWUlGUl1ZXlJcWURGRk9KQ1pEQERfXlteUl1R0d/c2Nnf2MXeVFXa2tfR2t9VV9DTUF3TxtvW0sPG1VXa29HTxtrUUNPTWUdcUFJZW19aQUJEWEVc0sbHxsj09PT1zsLCwsfHx9vT0tzVXVbR1VNW0NdeRV9YQUNYXUBLT0F3fHNKdXRPW0RBW15fXl9X3NvEwsnKysrKy8zIy8/Awdjc0dDVXVfVUFLVVVNeWVpERVDX19fV0tFSWVFXUFLV1VJfVlFYWFHW0sPI9cr19MvIyMvJwNjY3NNWUlxBQkRSXl5U0VBfXVBcX1BQX15dXFxHQ0NGWl5TUFxbWUdCQ1lSVtTS39zZ3NLT0tHc2sbExcTZ0VVVVdDXVdTf3dfQ3tJX0dja0tjDxNZWVlJeX1ZSWURaR0x0SkJPQFPc28bOy8PDz8vKysvMwMfb0dfW1VZU19bT0NFXUV1dUtVSRVpeREhLdXZwd0tOT0RbWkZMTURZWdDYxcXNyMDFzPTOyfT39cvNxtLU1lXUV1NdUVxaRV5eX1JXV1Xd3NLV1VxdUVRdU1RQWkZaRkFYV1Xfwcr09MrGw87LzcjIwd3TUUVEXkRNR1tZX1ZQXV9WV1FUXV9RVF5HQENOQkFAQ1hWXlpFWkZFX1Nd193Z3dHU1djF29vDwsDGwdjS2NjT19DR1tTUUFfQ397Z2tnawMPe1tTUUFBSX19ZQUp3dnF3TkNHUtzbxMbAw8zIyMr09vXDxd1UV1RQXl1V19HR1tTUVlNXUVlEXF5ASkl1dnNwcXd1S05CQEdfU1ZU09rb3tvFx8DOysnKyvXOyMHb2trT1NHQ1VBRXVhYXVJXUFTR39/X0dzdUVXd01TU1FJATUZCQENbUtfQ3sfNx8DIyMLNysnH3t9WXVhFT0JbRFpdVF1S1dZQV9TQ19RVU11eW0FASHVKQkt3T1hET1tdXFpRVVVW0dnExtrHzczbxMPD2djF2NHYwdvS1tFXVVTVVNzY2NrCxtLS3dddUFBfRkFPSU5Kd0hATUZT09HfwvTIy/bx9cj1ys/Y2N3QUFlZUVhEUldSWFBRX1tSUllaW0ZAQ0JDSHV3d3F0dEhDW1tTVFfW09PQxMbAw/TLws71y8PNwsPZ3d7Z1tHW1FBfX15cXlDW3tPYwMLfxcDa0tfXUFhEWVpBTUZGQUZeUdXR28jKysv0zMXb2tLR1VdcWF5HR0dYRV5TVlHV0d/d0dPQ0VRXUlNaR0ZNd3F0dXR3TkJATEVZW0Rc1NHR3MDDxsTJy8zGz87BxMzLwNvZx9nc0dbXVVTR0tze2MbE2dDf3NZdW0BNSnVPT0t1Q0RaR1LR3NnP8PLx9vH0zcfDwdxWVNFWWFxRU1lZV1BeWlNXU1pYU11aRFpFQUlMS3dxdEtMT0xEXlhHX1ZWXVXYx9rC9fXNwvX0zMTDzcHfxcbZ1NTf01NfVNdQUt3a3NHbxtjS38XeVlheWUBITUBDTEFFW1lS1tLZx8j39MnDzMDd1NPSV1JRVFBeV9HXVdTS0FVU3N/RVlXUUkReUVtMTEFPcXFLS3FxSUBMSk9GRkFYVNDc2MPJyM7Oyc/NzMvPz87OwsXY29rdVNTS0lTV28bY09ja01BU0VFEQFpFTnVJT3V0Q1hERFHf397M8fDKyvfIxdLb2tzQ09/T11TT39ZU1dHUUVdXU19eUlxYRkVETkhISXVxd0tId3REWURPW1NfXlfGzc3P9/HOzcjJwdvDzcHF29rQ19DT1F1QV1BdU9Hf3NDS3tDXVdHTUFxcU1hBQkFFQ01HWVNSVNzb28H1y8LF2NjW0dLW1FTXVFBSVN3R1tDe29HQ3d/XVlVXUV9dU1lFQklPSUp0dHZ1S3R0dEhPSEBe193bw8/Kw8HDzMvCw8j3y8HMwsLa3tjc3NfV0dDd3d/Q0dJXUlBVV1hYUldYTENDQ0p1T0JGRFDSxcbAysvKy8PH28Hb3d/bx9FU1dfWUFHU0NFRVldUXVpYWVtBQ0dFWk9PTUNASU5OT01OTUNFRUZbU9Pd3cXJ98/Az8jP2sfCw9jS2NnZ0NHT19FUUlJR1lTU0dze1dXU3NJV0N/a0FBQU11BTUZbWERfVNLd0NvExN7R09Ld1NXT3dzVVl1dV1JR1dnZ19DZ2tFQ1dRWW0VfXFxEW15bQUtISnVxcXR1T05JQkBaW1LW2cLBwM/19Mr19Pb0w8PNycHZx8bb1FXS3dFX1tDT11FQXVJcW1xQVFBbWkVbTklDRkVBWlDT3N3Ay/XNx8HDwtvYxsDB0tPR1FZZUdXVVlbX1NVWXV5FWkZDQERbRkZYXFtNQkNAT3dKQ1pCT0VZXFhQ38bAwMvKysv19/XKzMTF2dve09DT39RV19PdV1NV3NBQ1dPQUFPQ0NZRU1ZSXFpYWFhFQFpdV9bQ0tjHxNnc3sXc0tjEx9PX1tdWWFPR0tRU097f19XXVF1aWF9ZWV5TX15dX1tAQE13dnVMSnRIRllERFHf3tbdwvXKyvDy9srJy8LF3tjb3tne2dnFxdPVVd3fV1NQ1FBbXlFUWUZYXkFLQ1laQ0NfUFNQ19zexMXb2sbNwMDAw8zG2t7e0lNW1NdRXlNVVFhFXVBcQENZWVlFWV9YWlpeRUFMTk5KSExCQVhTXllW28Dd3830ys708PfPwcDG3NXV39PXVdPf3tzR1VXW1FdW19PXUFTR0lRdXV1aT0JaXlpEUtTVXVxV0dZV1tnFxsHAx8TGxd/R09dSXlFVV1DV1tVeWFPVV1tZVlZSWV9QUl5YW0ZGTnR0dEp1S01bWkFaXNbf0t/Ezs/HzPbz9M7K987Y3MXY09fc29jf0t3T1lRU1dfQVVJTV9RQWFpcWUp1R19EQF9UVFxS0d7d0N3EwcbFx8LMxtrF2d7XXV5TV1NSUFBXXkBGXl5BWFXQV19Q1FVZR1paRk5KTUZCSUNDQkNBQURTVFTW2MLAxMPI98nMz8vO2N/aw8XT3dnY3dfS393X0d7H2tLd3dHVUVJcXF5DSUJbRkNaXldfW1fS01ZQ0Nrf0sbOz8PBwsba3NVRVNVWUFbVVF5EW19cWV1W1lRcUlZWWEBHW0dJdEhNTnRLQEZAQkFZUVBX0tvGwM3LyvTLyc7JycbaxM3B3dPZ2NPU1NLY3dHf29vUV1RVU1tYXVJEQUVEWkRBWlxTXl9Q1dFV1NDYxdnFws/D2dnb2tBU19HXUlJRVFFbWFldXVlQVdHVU1TUVVNfWUVBSUtITk1OT0BFRE9NRVxYXtXYwsLAyfT1zM3Mw8Tc28bG2tjb2Njc0NHf2NDW38XF09XU1lZYRVhcWkBGWV1ZWFJUV1hbUlBQXl1V0NPS3sfB2t/Z29vf0tPQ11NcUtXVUl1X1FdSVd3d1FbU1VRSXl5FQEhLTExJSk5ARVpARFtfXltd0MXa2MD19M/MyMvC28XBwdrf2sTa3t/b2d/WVdbT3dRXVNVXWEdaXkVCR1xXXVzX0VRfX1JTUlhcVd3S1t7Hw9rc3tnZ09TW0NddX1NUUV9SV9bXV9Tc29BX1tDUWUVZWEFOTUZFR0JBR0BDQ0ZFXltEXtXc0dHewM/Gx83Iz8THw8zG28bNwsTEwMbb09HQ3dzR1tzc1l1aRFtFQENbUFNcUNRUWURZX0RPR1JUUVLW2djd0tnY2N7d3d3c0VXU0NPR19bS1lZU09JVU1fT1VhBWFlaQUdYWVtGR0dGQUFaWV5eXlNX1dfU3MTCw8PP9crAxsLLzNrbwcbe3sTb3VVV1tdVUVfQ11FcXF9eXlhcUVfVXVNU1VFdUFZWWFtdUFxbUdPc0FXR3dBXV9HT0dXX09Ld1tXX1NHX19HQ1lbU0dZTWlxSUFleVldSRERHQUNDRkRHRkZFRVteXNXc28XHw8PAxcfL9MjCzsjIwtvBw8Xc0tnT1tVX1lVQXVxcXF9YXlFWXFlcX11fWl1XUFlEWV1cXlHc29zQ3tjS19TS2N/R0Nnc0FRW1NTVVldXUlNZXVZRU1hfU1BcXFTWUUVEWV5bR1pfXkVCRVlZWVLW38Xb2sHGxN7Zx8/MxcXAxtjS2cXb39TQ3dZVV9TVVFNR1VRUVtXW0VVSUdRVU15dUlxATUZERUZY1ddUU1HR19XX3cfF3d3e39NUVNHS09PR0NFVXF1QU1FTUFRUUVBX1FVfRF5eRE9DR0BJdUlDRFpfVdza2dnHwcDEwM7Ly83Czc3A3tvBx9nT39nQUVLV1VNfUlBdXVtfUlBXXVTVV1NeXlpEQUJHXlNTU9Td0FdX0tzT09jExMXd39/Q1VfR0dfUVdVQWUdFX1leXVFU0NdW19DT1VdXVVFFQUZATU5ORlhFWlHW1tfX39nb29nHxsfFxcfHxdnbwcbB29na3tBU1dHUVFfX0NBXV9PT1lXU1FZeREdNQ0xJQVpbWF5TVldRUFXS3t/Yw8Pa3tnaxN3Q2d/d3dHX1FFZWVxcXFhSVlFRUlTW19BUVlZcR05PSUlIT0FFW0dcVFXR1NnFxsDFzc/MwcfDwMPAwcTY29LT09ZVUlHVVFZQVlRUVlLV0NHU19NVXUVaRUZGQFtcU1JSVVTV1dfc3t/S2cTb2NDR0NbX1NbT0FRRV1ZdWV9cXFJTUdTU1tTT3tnZ1tLWUFlHWkRBQk9AQUFNR15eWFlV397e3Nvb29jdxMHGx8fCxsbZ3tnT0VXW1tXWV1Xd1tDc0N3Y1tfSVlNGQ0FNTUhOQkFGQ1lTUlBU0Nna2drAxNre2dvY3tHc2dPWVNfWV1NcU1JRXV1XVNRWV9ZVVVFVXFxcR0RNQUNJRkZDQEdfXVJR097c28XEw8fFx8PNzMbbxd/Z0dBV1VVeXFZTVFJR19ZV1d/T3dLW0tVWUlxdXkRDRkRFWFhQUFJWVtTT3t/S2dnb0tbe09HU1tzX1VHV1VdWXFRVVVdU39Pf0t3Z09HU1VRQU1hbXlpBTExLSUhOREdEWV9U0N3T39vY2NjBw8HAzc7AxsXf2Nzd0VbRVdfV0dzS39DT39PQV9RWX1tHREBOSEhCSUJBWFJSVFfR3tjb3MfGxsfbwcfc0NDe39DU1dJRUl1R1VxWVtXQVdbV1lXVVV1RX19eWF1YXkBHREFHRl1XV1ZR1t3d097Gxdrf2cbYx9raxN/e19HUUFFT1VdX0dfc39nS0tne09TX0VRVXVJcREFPRkJCW0VQUlZUVNPQ0NPQ3N/S0dLc0NFV3dDU1FfU0VRUV9xQ0MTSwVfe3dHY1VdfUFxcWUZZWURCSEJCTk1HXVtfX1XU1tDXxtrAxd7EwMzAx8zBxNjc2dDXUdXQ0dzT39ze3NLb3dRSXERRU1lbQUBJdUhIQEZFXVZW1dHd39/T3sDFxMXYxdrZ097F2dBU1NVXVlLX11VUV9bWV1ZX1FZcWkVeR1taWFxbR01BRFxeWdbQ1tXU3tzT0NnF3t/d28Ta3tnY3NPXVNdWUFBT1tfT1tPf3d7T3tnT1lZWV1FTUFZcWEdDRUREW11UV1RWV9dVVVFV19XXVNHT09PX3N7Q1NTQ11RV09jc0tLYxtjT0NzQVlBfUlxcWFtZQENLSEFPTEFZUFxZWVDVV1fU2dnd2djAwMHAws3F2N7a3tfS0N3Y3t/S39ne09bc1lNZRV5aR0RFRUBNTEZGRl5dUVZRV1fW0NLR3dvf2NzbwcTHxcDAxNnW09VRV1bW11ZQVtVWUlJRVlxeWF5SXFlbWFhaRFtdUlBQVtdUVlFX0NbW0tnb3dzc2Nrf397Y39DXVddWV1dU0NfW0dDS0NPR39nQ1lTR1lZQUNVTXV9fU1hZWFtfWlleXVJeXV5QUVHU1dLe3NzYwcfY3dze0NbT2sTY29jZ0tfQ1NPRVFdTUVtERkJBTkxOTUZDQ0BaWF9cXVVRVNXR397Z2MfBwc3BzM7BwsfBwdjf3N/S0NZU0FVXV1JXU11YW1tBRkNFWkVbW11ZWlpaXVhcUFfR0dLS3Nve2N7EwMXGxcHH2t7T0lRWUFPVUVJTUFFTUFJUUVJRWVJdWFlFX19eWFxWX19dUFdQVFXU1FTR1NHd0dHQ0NfW1tbT1NfX0dLQ0tDc393Q19DT0N3c2Nje3dLTVFRQUFFdUl5eWkdBTEBCTEJCW15eXl1UVFRX19zd3tnFwMbGxsDBx8bHxsTa2N3Y3NDQ0NBVV19dUkVBQk1OSU51S3VLSE1FRFlZXFdX1dfd2Nna2sbMwsDBzMPAwdrHxMTb09PXVVZRVVRWU9XVUVNeUlJYR0FYWFtERkVER0ZFX15cUdHS0tzS2trb29nEx9vZ2cXF2Nzf3dHWVlBTUlBTVlRWVlfVVlJTUFZQU1lYUFJZWl5cWFhaWVldVFfU0NbX19PX09fX3NDT1tDR3tXU0NPT19bQ3dDQ0Njf3trAxMTD2Nnf3FFeU11eRERaRkJMT0JMQEdbUlBRU9VV19TX39Pe3tjDwcfFxcfG2tjFxtvZ393W3NnDycVQ3V9ZVE5ATUxBTndOTFtIdUxBQVJfXtZS01TY3FPGwMbaxt/c3dLC0NDawtzc0N/f11ZW2FbQ3VPV3ldZVVBbR0Nf1EVAXVhCWEBV3lFWwcHFwdrNzNzex9rN28HNzNnG29LF1FHE0lFUWFZeXF/f1lLD1FdRU9FaX15fSlZacFxxW3RG1lBVXFFe3NZW3VvV2FRUUdlX1VFUVVVV2NHW2t9X2sVT2MfL2cT1yt/F9N5V1dLX1VxdSUFDdERyQlted0FWQ0dS1HfTwEXRw9vAClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvbWVkaWEvY29kZWMyL2hpZGwvMS4wL3Z0cy9yZXMvYmJiX2c3MTFtdWxhd18xY2hfOGtoei5pbmZvIGIvbWVkaWEvY29kZWMyL2hpZGwvMS4wL3Z0cy9yZXMvYmJiX2c3MTFtdWxhd18xY2hfOGtoei5pbmZvCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYwMGI5Y2QKLS0tIC9kZXYvbnVsbAorKysgYi9tZWRpYS9jb2RlYzIvaGlkbC8xLjAvdnRzL3Jlcy9iYmJfZzcxMW11bGF3XzFjaF84a2h6LmluZm8KQEAgLTAsMCArMSwxMCBAQAorODE5MiAxIDAKKzgxOTIgMSAxMDI0MDAwCis4MTkyIDEgMjA0ODAwMAorODE5MiAxIDMwNzIwMDAKKzgxOTIgMSA0MDk2MDAwCis4MTkyIDEgNTEyMDAwMAorODE5MiAxIDYxNDQwMDAKKzgxOTIgMSA3MTY4MDAwCis4MTkyIDEgODE5MjAwMAorNTQ2MiAxIDkyMTYwMDAKZGlmZiAtLWdpdCBhL21lZGlhL2NvZGVjMi9oaWRsLzEuMC92dHMvcmVzL2JiYl9nNzExbXVsYXdfMWNoXzhraHoucmF3IGIvbWVkaWEvY29kZWMyL2hpZGwvMS4wL3Z0cy9yZXMvYmJiX2c3MTFtdWxhd18xY2hfOGtoei5yYXcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjM4ZjFjYQotLS0gL2Rldi9udWxsCisrKyBiL21lZGlhL2NvZGVjMi9oaWRsLzEuMC92dHMvcmVzL2JiYl9nNzExbXVsYXdfMWNoXzhraHoucmF3CkBAIC0wLDAgKzEgQEAKKz9DS17l5ur9XFhgWlRq8v5dWFtQU1xba2/j3OXZ2trc6l1UWmBwfNXP5ejk+Hvnz8TEx9H+Xk1GU+vQxcHAyeNpVUtLZtrNyMjIzeRsXl5cUU1odl3r2dfVdFhPQkVWfczFzNDuSEA8PUpYz8DDysvhW0tFUVpNWWlp7G1q6eX73t7p42r1909NUUtXcOnPzdHJz31lTVVkUl7g2930a+xrW+DKwr7K3Fw/OTo/Wc/AubzL5VlGQUVfz8zKxMzqYU1RT0ZW4c3Hy8nAzmhXTk9bYNrR29Dab1dLSVts787Ix83g43dNUn3ifF5WXVZITFfz2ePYzOpfYGNcVE1YWk9VS0pTVV79YFdw7u5kV+7fXV1fV1lo4M7Lzc7a6lVBSerOx8C/xdNoTUZK7szAvL7Aw89rT0xPUlzZy8zAvL/G6lVOSkpKT+bS6nRfTEpOXuff2Nf3YldIQ01i3c3R3OdsU0ZEYdbNy8/vY0pBRUZMaN/MzXdjXVRSUkxXberkbGbp+F1WSVD02M7Hy9ZwUVFIQ1bWxb3Fz9pmTEI/TO7MvLu+v8LT/lZVYGbp2Nbf3ebY1+5p5eFzUU5w8u7e3n3ucnn8dP7d3d3/WGRneNnP329XXFRHS37MxMvk+11IP0JHUFnhzt1xY2BYT0dJTE9QTkpLSlJfTEpS8tvn/tjZ9F9RS0tLZMvBvLq6vMlgU17uxby4tbi+xfxPUlvazNvW0vDn6eLXcltuV0pLTmrmYlVcWWl6X2xqVVhUSVJn38jP19FxU1JITVRezcHIy9htWj85P0zqycrO31dKQz9IYffV1XFeVU1RT0dLSFPr7ePLzMvcT01RYdLMzcbR6n1UUV35zMLAvsbKyc/pbHXm2Nng49fT1er0397e4WZPS0pVZurU0MrBy+VsaO17X1hTXvJqZe7d3XpPRj9FX+3QzeFeTEE8OD5V+OnuX1heUUxHTVpldd7T0s/Vc1hQTWLfzMnM0c7g/vNbddbY3uTZyNHzb09HTFbfxcXDydZuTEln3M7Kz/NlZ2x95Mi9vsvbaFtUTFJ65c7Gv7zH0tV1TklHXd/Vz+ZcVUdAQD1GWfjweWz7UkI/Pj4/SWLf4e1ucUxEQlPn2dHO3GNaUFRUatLL293h0svSzMzX+2Zn5f7eycXI3GRgZl33+OPg6O/ucX7x725bW2BubW9+bGJ06c/O39zfZlNKXc3Fvru+w8vXztHXzMvKzNDJwsjO6VBAPUZo3c7EwtZLOzY5PD9LVU9MQz06NjpDSVd6/fZkUkk+PEFNcOLZ0dLZXUxNVmbv4tz6WVpcbePj2cvO1uXu6XlYUkpNfdTNzs7LzXVcXHLYyL68w+BiVVBT/M29vcTHzMzHytnh/tbMycC8vsPO4Nji6ObncmpWcOHu7mhXU05HRkROXltVT0M+QEhXbH5iTkE/PD1HXWFTSkxt59zf/Xp3VGP67N/d3mxQXuT36NjX09DV2Whh9tXKzdrbz+BeWG76eufOycjGzWVJRUZmzb+6ubq+0tzjY/PMxcDGyMTZdHJz39h1dOXe6Obg7UtARkxSV2dXT0dCQENFUmRkWUxSW0pATE5VVVx0XFFlcWJaSUxf4Onm49xkUllu1MW+yN9rd3Ht7OHc3+Dq3M/O4dzwU0VIXevdy8TFyN5fUlZUXGjm5dzMyMzNzNfw28fDwL28wtNtXG3e2enp4Ohz6uZ2XWdZTUxMT09SUUlDR0xQVU5OW1NCODc/RU902NDU7mVbXWzn183W8NrfdWhlY/jazcvf8+ldTERBTmxt6c7N1WZPU0ZBUml94uzax8nLznr65ebEvby2uMHO4dzKzcvBzM/T+ePf++zV3e5ZTmZrXXBeWWNTVmNVT1BDPz4+UmJZbl5OT05ablVKTUpQXF3ZzuB2Y15q+NjP1NvkaWFYS13r2M/V5fRkW/f5YnDufPt75djWdU9LV1df2NPQy8jFyetiVlVde9zNzM3T3Nfj383S5tDN0Nvf+Hv679XPys7c8mhPTVZs7X736WlccFdRX3l63fFpZFtjUEhIRkZq1s3P5PF0TUlYV/bR3eDeV0dKTEpNTVFUXPF+U0Q/QEtf08nd//tXX1lESnR+4tXk6OLQw7/HzuLo1c3Hx8/Pyc7GxMvIx93f1vZfb+fPzdrW3NDV9+3hXvnd6dhpSU9USFBSS0pcbOjwXlxdYVVSUlA/SVlXWlxS5+pMX1dKVWps0NhzV09QTVnf0tHF03RMQEFVa93K0ubn3N3Q7FlY83x+1s7V5fZka1xWYdXV2N5nXW7w1cjNzcrH09zdalrn3+HR1tLHyNlsT09b3sW9vctkVFJNX3Zm3s/p6uxRSk1RXGBZVVJbYFpgU0hUXVJramDa+FBVSD9NY3z0aGBfY+54bN9qW3hkWWhVUWJeYPhfVOrd18/eYmlw3tDQzvhm6fznxsnCvcjT3W3ky8zH0Pdia+jRy8TH1NT/TUhNTmfp2c/M2efd7eR9W1Vk6s3M2GJQWFZY+ux41990XE1KVl1dVE9YW19RSEU/ODo9P0hNT1NRR0VFR0xx0MvN3V1PT1D619vfysjO0NXTysjFvsPLz8rJztbTzcfAw769xcfI3fDm5tbNzM3O4mBUWFZPT1Ndbuzb1HFLS1Raduzt2M/Z9nNZVW3b4GFVTUtNTk5WTU1TTktOTVJVSERGS0RASU5JSEY+PkRJUFNLVfDQyMnY6Ofl1MzN08vBwsjJycfAvr6/wcfEwMPKz9DNy8nGwsfP0eVfU1JNTVRXZWZSSUlQUVFdZu7bzs3eUkRJTVBZZHvf2t/na1BVX2VhZvVzZmNeWFJRW+zf6OlpVUxDQkVBPUBISUZBPjs7PkBJS0xWbf9zZlxf99PGwcTFv7q7uri4tra1tbS3ubm7wMfLy8jHyc7dW0tLVl3s3u/4+3BkUkdITFBVW1774djY43RTVXrs/u13Z3zy7NvtYl5VUU9PTExKSklHRkZObW1mZ1JLSkhKUkhERkJCQT4/QURLUlVWYHLh7uzsbPfe1c/M1dPJy87MzMTCv7u4uby9wsDAv72+u7q8vszp/Ofm4dnc1dfRz+5aU1Zu39XXz9Pf33x4X1VdbV9aXFJOTUxLRUFDREtMSEQ+Ojk+QkdKTE5KREE+PUFQX3J3Z2r37/5qYmV71MzN2OTk3ubg1NPW1NXb3er17tnc2NLS0tHKyc3Y3t3Z0srHx8bBv77C0M/JxcrNzc3NyMHDy9XTy8rMy9PV297gfVNFQD4+QEVDPz4/QD45Oj5BQj8+Ozs9Q1JeV2Bye/ptVU5MU2v67XBu9nh1a1dWX+7Py9jk29LOzMnLz9DOxMDH0Obu93P0++rXzcvQe1plaN3KyMXKz87a82Vk6dnVzcnN0dXS0NnX1s7Ew8DG0NTc3OJsWk1LTk9RVUtIUk5WVUxQS0RBPTw4Njk8P0VDRklFRUZDRklZ++zgY1pmV2jtZmzy5M3L09ba1djZ0ut03NDJxs7U1NbQysjL0MzPzsvW2tLXzsPExMLAvsXVZk5u4dbFzN3d9Xrke/bSzMfGx8nb3OdpaldMUldWX1tJPz1CS1pUR0hCPD48PEBFT09NSUFESkdJSkFFUFJkYlNTTExMTlJUeNXMyM3peure0czM0N7W1djS6+bVzsG+x9HX29zb2dzWycbHwc7e0M7O09rc3dfc4dne59PNzcvT2M7MxcDH1213fmn2clZXVE9aWlBRWWRYST86PDw7Pzw3ODo9Q0dJSUpMRkdKRlfj4t3qd/b3dPj8Xlx23tHO2WxdW1Zu59ze39rqeGtk/NPKxMfSz8vLxsrQy8rGxcHAyMrKztff5eHSzsrN2eBgaPba0NvQzs/K0/docejs9WxdSkhFRE5KSk9TZVtLSUdISUlISUpNT1BcUExVW29sXlZMWFxUV1lVTktOXVlVWV18915RTF3s5tXZ+Wlw7NHL0Nrb0tTg3dnOxsnKzNLQ0szAvL7Jx8jLzM7Tzr6+vLu9wMzKycvN3dra4OVZSEZSUVJaS0U8PD1AST8/R0xXSk9PW2ZPTEFCRkxbaeZbVVdJUk1QWGzd6OxhUEdIXvnY72r8WGZYTlJWdHXc32BXU2hu5N/czc/JyczHzcbHx8XLyszKxsDEyMXLyMrPytPPzs7N4nJs28fDxMnQfVFQUm1kYnttXUI6NzxLUmBgVlZOTElMUE5SVmNaTEtNcmVbXlFWT09SY3Bf8ePa5V9XT/jd2t9oaVFMSU1kXGdu7+NoVk7629zT5t58XX3yzs/Wz8/N3uHr0cfHw8vJydfZ3crFx8bIxMza6dnFwL7HzNR6+Xjt6fnycPBqTkVARUhNSUxbUU9MWGJXUkxWWkxFQUZOWk9LTkdHSlJnd+H7bWpUUU5s1s3Pd2NVSUlRfvH1ZmL4W1ROWt/b1Nvg3evo4tHNysfLyczM0NjJx8LCyMjNy8zFwsrKzs7W5G5i1c/Rz+r4YmlpcNni5eV1WVNMQElVX+F0WlFOT1Xv/WVkVEtISEFLY1pfVkZAP0FCVGFdaltUVVhPW97Z1Nh0XV1gU11iVW/s7vH9VU1ZXtvHys3U4XTo1+Xa09fT0d1z1MrGv8bPzsrLxr/GxcTO19vY48/J0czdWFBQT1nd2drT82VfVkhJWVfv4mFgWExGUFpV/vVrbm5XTFJOWGVOTEtJRkZKR09hXFpWTkdacPbZc2NYT0tKYFtfYlNRTk5HUG3iyMrT2dfS0sPCxcTN0t7f/e/Py8XIxb+/vsS/v8bDx8jO1OZx39jO0OhoVFNNVHJ55vV9X1BJQU1f4tXb42dfU1RjYl9gXV1XV05QYnL9YV9WVExER0hISExOVVZMTWX15fVkVEhGRk9dVlVmal9bW1vhzMfBx9Hh4H341s7Pz9Pg82BPYd3azsS/xcXJy8XJy8fAwsfG1NrO0NLoX0lKTkxg8nRm7dzn5lxY6fDw/uhgUltRY3386+LZX1dQSFNUZXv5YElMQ0NISU1NZGFbUkZNXP7i4OZaX1haaFZPTFddT01GTltg6ePT5eHZ3c7OzszNy9fibmTs6M/Py8zOys7Gw8PGw7/BytTl3ODX3m1XREtKUVps7+fZ09n9bPLTyszXz+9lT09aZW9bdWdPREJBR1RpYXRYTUxMTlBoVmX0+lpPS01g+FxiaFVZWW5ccVtg7nBXTVNXbNbb5uVlX1/v8czEzs3d+19edODHxMzL23Fj3dHOxczDw8zc49fTxsHN03tUTFFdV9/d2954XFb+7NfHztjrUkhIXW/h2t3fblRMW15s4+f/XktHSVdaY/H2e1ZHPj9BTXj0bFdKRUhc8OLd3+xcSkBKW/bS1dTqUkRDVuTNw8TE0vJgcfDmyL+/yNf6aOfSyL6+u7vC0uff28vIzNdpTUVKWGfh2t7kW1BQX/rayMjVd1NMS1nr2dpfT0ZDQUNOZNbO6VlIPz1CVWfp+vdsT0Y+SFnpz91uVlJVUuvQxcbQ2ufqZW7m2c7ZbVZOTEhf2tXW3d/s8vfo187HxtZqWGJibNjQys3V0tLZ693JyMvtVE9OUVbcysvU5+TvfO7m0NPP1GNUT1dc6tbc7FxeX1tcWefX3e5OSkVERk1hZWBcWVJKSE5cXlViU0tHS1x56uXocWBgbvjz5+ny7l5RTU9c68/S4HZrdG5z2cjExsfN4WNf5NTJysnK1NvY1c/JxcjQ3flfTlNX6dPd4ezc2t3Yz8zW5t/mYU1WWWdqTU9OUFFQYWT1429gVU1GTVFU72RTTUtRTFdm6tdmWmNYS0tfctfa+vlhbe7PytLL1upoT0tLWVl74WNYUl5u/tnUxcrg721iYPDe1s3U3/j45dTMzsvL1t/x8Hzo3tXJzeFibuLW0M3Hx9Lra2xbYe7c0uJoT0lMWOvWysvXZ0dBQUZUV2JdTkI9RE9g9PHxZk9LTlpTX3Dy8F5PR01o7tfZ4dzmaVtjYPbpbnZfVktP+tvKxcXH0ev429TQxsXDyt5qXu3ayMLIy9DhbGBlZOng4OtiUEpV99DJzc/bfl9d/P3f3fH5VUpITWbn0dXd+F5ZUltka3NaVk1FQUNOZON9ZWVga23p4Ojk7ulnT05QZ+zSy8zQ4f9mZG325HhlVEhEQ039zsrM1exnW13139ve1+FbTk5k8tXLy8vS183PzcrIys7U3uTo4dTLzuR+/mVn993Nzdru9VpMTVFr39fZ2ehZV19VXGJhU01EOzw/Q1T+YlhdVE9WU2/e6315aU9NWV/019/38FtPbe7g0svU9mlPUFlW+tHQ3uDd3M3MzMXDzdvZ+V1xdvDTz9vZ1OHaz9LNzNDf9GZXYV1Z7tj6XFlUWn7o1MnN7XdiTUhLVfDY5NzY6W/19W77/FpTSD8/QUJDVlxSWV1s5NrSy8vX3N7i5PX+++DqY2VgWmjl4ezrbVxQTU1PT01e93hnZG7l5+7czs/f/nBfVlJWfNbX3M/Mzs3LxcXKz9bUz9PZ3+DZ325faXrt59vb3O5i++DrcW7w8HRjauXt8OPY3nVeT0xJRUVDRENOV0tOVVx56e7s4nBbZGRdT1FdZm1aXnBlae7oevB0VVxzfOno6dnT2N3QzcrJycTGy9nm2PZYWF1w629m5uDj0M7Oz93b2dfe7O1vXlZVVFhhXHrq797a72rv+Gpzc/PseeHm/G733uPwYlxXT0tHTFFNVV9lYVpf7vJjbfHt6eHe4P1qXVdWVWb58OTn73v6XFZiYlxaXV5ZYu3k3+Xa0tDLzdXx6eJeWFdu6+z0/t7b1tDRzdLT2NHL1dvW0+VsbXP482d+efnwYmJae+b56uvofunget7q6ubv7V9XT1BPRklMTk5NUExOVFZlZ2/37u5u5+lvc15WT1FQVnNo+fDe3HloYHrf3t3Y1dPV1+LWzc7LzM/X3OL8+X336Onf/f5+bHVrYmjt4OPo9eDccGVeWV9cXllUW2JjcObt39/j0M3U2Nvg6fVw6tbU4u59XU5JS01ZW1pgX1dZXlxcbXHx8Hn2cnvr3+D4cWtvaFlTUGdgX2VdYV5gZ21xaHNlY2508eDV2NXU3uDtcv7h1tnhfH3h3ubf0s3Lyc/W0tbSzM7b6O5yXlhWYXJpavR1bvL08+zd3t/oaF5z+PPqemp6allWT0tPVlNQU1JPUlJNTE1VaGJYXH7u8Nzb3+tvYGFjZG1zcWdfXm7q6/Hi1dba2+TZzsnHy87O0OB6aGVs+uxxXllidH3t593X1dff7Orv8e/l293neWNVV11WWlxnZGB27erm2tDS3O/n3NPU3+l9clpWVFNaYWdfWFNRUlVcZGR+7vRwWVhq+Obp3tbtXlpfYl9jbXJZVlZTT0xOWXB56t/f3NnW3+ff4eHm+nvo4Onm5uv5cWnm5/Te0s/Vz87Qz8vIysrT43pXWl9lYvbxdfZram137ufY1uDt7eXc42zo3mlbYVdLSUdLTEtPT1VYWltaW15WUlxZUmDy6NvU2/xgW2FtbHnj4+b1a1tVV2B36Nza1dLX09HUzs3S1NPf6317fmpjXlhabfDq7+3vcGZy7uzk19PV1N3qe2hraHV98fHo9GBbWV7639HJy8/S1Njc7urg4epxXVFLSEtMT1FVVmBbWGNcXGFpbHnv3dXc625iWlBSX3Jy/G1ha1dUVlBOWvfe2ePi4eXm3+Hd1tTT715lXGru6N3W1d3i7vtpbXvl393T0s/V187U2eH5dX7q7envfvx2Y2JsdOTd2+b18Xvm29/y6N7fbFdQTUhESExNTlVZVFRRUmFkdX7q3OJ5/vB65/BwZV929npo+exvZ1lkbfDU0NHR3e7b5fbh3dXP09/ld2ltYmx08+5tYWlhWWZibuDo5N7jbG119d30fPji5/vt7vf15flr/Hzr2tfW1eLb0NTS19bW3OZgTExST1JfbG9eVU9VU1hiY2ps+n5iX1labvZ2aF5aZWNfYmZre/NzX2B3cGPw6Hr14NfU3ODY3+Xn6/Lq7fPj4djiY/pvdu7w5erq++L5c/h14tjU2N/99+V84e185ert9P9r6ubd2uHd397o7nb+7l1gWFVTTk1NU01TTUdISE9YXWX59uzd6dzh6dfR3/xnW3JoaXZ1bG9uXVtXXG/43t7Yz83Rz87a09bg7ndpc25ddOvv/mFaVlp06n3u73Xl5PH4+/jf32teWVp27fDo2M3N3ejzb/Hr4NjW1tDV39zf6+XxYl5dWFZPUFhaWlpTUFJaZVpSWF9gaGRkceri2OBjWlFTXF9leebj9WtgYGb06/Tp3+fw8+/d3efWz9TY2uP1c2/n2d3kcHfc5uvwZ2v5+uju99nR4OX8X2Nrfuvt4tbf7uxdVGFbZ+rcz9Dq7OXr3dzo5PVxfVdNUUtLU0tJS0tRXFVYUU1h9O7i39jN1NzV8mVsXGLy9+TccWBfWmJwfOni3NXn69nb08zX4NXW19pnWFxbaPL2bmp4/21laltialld6tzUz+xybFhYY27629Xb5ujh5Nzl7ufTzs/Ud210dOrc3fHg91tcXFhbal5ZT1VeXVlTUE9TU1thY3d0aHN7Z/fvYmFr4tHY9WNXT1lbbOXn2NLodPnv2NHQzs/Lyc3e5v1x8/Tg4HRseFlXdnp++GhdZuLU1eXn6HtlYnzq6NvS733ta3n6a1/n2trZ7H5uZ2vw3N3ybGRPTFVTWlxUVlxSTlFPTVBYVVxfbG/t4fPp3tve7W9v4eDd2e9iYVxVYnro3tzb6O7p4N7W1M7Hys/N2P3ydWVpam11ZFNVWmBraWJdXnjp9d7c+OXwcGVea+Le8tza5Onp4d3Vy8rV1t1pYl9la3L8+l9OVFRQWGp3a/3l7VlWWk1OUVRQUldeXVhjZV1ieHhw8NvT29jb635qZl5sdOPlffTq/mzs2dXOycrS2uTs5d3c2tnd2+1kXWpiXHl8Yl9y8PXu7uj+bXd2YV977Xl+5evs39zd2trq9HJaW1pm/Ofm3NThblpdW1hkenZxbV9cTUVJTE1RWVlcWmFtbX7t5uXd4d/c5t71bGtfWFz37eHf3ONxd+ri6tTNztLb0Nz79eHi6Njc3fX2bV5obv/83+L8amNuXFhdaGFi8OLrb375cnrl2t7f08zU2trpbV1mcXvk1Nz2/19UUl9nYf7m9lpZXlBJSVRTTlx+a1VUVFhaXV5db/f1/Ht5aF9l/nNl6NXd5+Pk6O7j3t7bzcnN0dLQ3eXY1tjNzdjZ7Pv+ePP/ffjj9mZbT09NUmhlbN7U2uZ58eT+8ebj4NjX1uRhX1lWW1lf8Oj+cGr+/mpzbV575e7ubVhUTUdNTldnZmVeV1RaaG9eY9zZ3NrpcH5gYn5oeOvp7fju4N/b3Orh19PMztrf2+bf2+HWz9bm7en8aHVqVlp65uN0XllPSlNYW/HZ2ePw9fzr3el64c7M09bX429m+mxm/u3lfnDl5vVwWVNVZ3p1Z2JaU01JR0pSWV1UUWFbWFxYVV3f2Nvq7WpaVVpdXPnZ2PXr0dfa5efx69nj2NbV1NPV3entz8nN1NbKzdHhc2dj5/H9a1tYTkVGSE1n4dnZ2tXb4O/8eeHP1d7e2+1uVVNSUG5+ZmT/2+DscmJVWWhkaGBZXWFPREJGUVZTXnR5aWllYWPw2NXQ097vb1lQVGjd2t7d29Xa3XNld+vX29fOzc7T3nppaODX2tPWzc3Q4HVrZ/1pa/tsW1VMR0tPbvnr09jZ6/JuaWroz9rY09TZ6G1ZXlhk+3Ht79/f7GtdWFZkXWBrVlZVTktMTFlkWWBlW1JQT1dZaN3g1M/kZ1hUTk5P99nl29fT19vsdHR+29fOyMvLzdfr+Hzbz83Iys7Pz9n+c+zb5+nwYldOSUhMTF14eubo4t7c3eXj3dDR2OV77WVTTEhKVV9m8O3c3eT8XWNkfPbx/mBdTkpFQUlaX2RtW1tZXFpb79zP09TX3u1wXVBRUmdz6eH13dXad2j/79zXzMjJyMvabl9ffuLYz9PS0tznfPDZ09/p52VdWE1KTFJgd252Z2/p6vDv2tDW4OPe7d3cdl9bXGNyfuDb2tnpcFpdbm95d3VmXU1CQkVKWWxtdGNYVlNOU23l4+jt6/R1ZF1eXm36/HF7/XF482lfZ2t36tbKxMPDydbg3d3YzsnIyczR5v3k5OfqdnBlWlVPTlNbW2drX2Fsderr4NDO1tzr9X5rbHpeW1hVY2Z45d/l3fxdZV1XXltob11UTUhLTk9lfHXweWpwWFn79H7o9G9tY2lpXGl+a/fr/Oz38975ZXdqbOPf08fFxMfP1uHz39bVzczQ2Hpw6nF38m1pdGdhXVhhZl5jZVtaYH3e2tLM0dTX3+jvenh4XV9bWGds/uPX2+bx/XRYV2Z17vdzW0tHSUpIUFtbWl1fXFhbYm1raG1iXWRsa3vkc27+a2hre/j48XhrXV983s3Iv8LJys7l3dXPx8XFxcvZ5e55aWfv7PbsdGNlX1ZtcF1hWFRlb/vf3ePp6t/n6d/9bHJeT1hXXH527dnqaWZYVFlbevbqcFFOTUdIVFNcZ2Vv/3Rx+XVy6+9++u/1+eru+npxYW1uZ3by+3J0X1pm8ufRycnGzc/c59zUyszIx87b8PJfbWpmZ2fsen1v+e5ueHJmUU9aWmvo393h5vPs4t7U193ieGVeb3tw5uHqYVRQT1FSZnDs3eBnUVlTT1FaYVNXXlpYVFloZWNpW1NeXVFe+HlsaXNrbf3n4ubtcW5cYvh508HCxsvMz8zOzsbExMfJz9/g73Bwa19h/H16fXjl3fJzbV5YYF1VbO18Xl9eXHvn6PP162ZdWWP8a+LZ525bW09WWVds5+JhVlZRT01RWWBnYmdi8O744+3ndGZtZ2tbX3N6YlZcYmb17eXm6fZgZG7w3tLHyczM0trl2dfSzszO397l6PZ89nns5/BtYe/t/+vu7XVfVVFZYGnv6ez29uzd2NvX3N99YVhW7uDt5+bce2FWVnJmc/TsZlRSTU9PTFBYXFdXVllnZGBgav9yZFRVZ11VWV5WTVhba3Tt2ObvZWdk7s7MysjExMnKzMnIw8XNzdDb7urn7PDg3ePe4e/g2uPm//XzV01NVlpTVVVWWF9o+uHi2uZobWBSVXHp+nL4d19cWVtw9/32X1xYSUxXWlZXYl1aWWVu8t7q5O3r8mFfXmJlYnNdWFhYaHXn4/B0Yl5RWP3h0c/Lx8fHycXHxsbLzuLvaWNrW2vz/Pjt3/bs29XV29zn8m5fX1lYW1VWUVdYaunaz9HZ5+r9Xl9oa/12c3l7aV1g9PBsbGNZU1FVWFZbVE9XWlhXYu7wZnR9X2RjXltXV1ZTVVVUVWD63t/z7WpiZWN54dTU0cvGxcXDwr/CycfS6dzc6P3x73ru39na29DOztrh8GJvZlVQVVBJS0hNV1zx39ng7OZlXlxYXF5pYHDw9en2cu3m/WNoVVBbUFVWUUtMV1Rdbe7e2dzx5u544/l4e1tQT1FNUF144+Pf+2xfUFlkY/Hd39jPzs3Gw8PEw8jM0eLe4fLq/Vxb9fp83tPPz8rP2Nny/fVnYF1NRUtHQ1Bl4tjR0d3U7Hjw+Ozo71tu+Vxifu3z6upmbFxQVVZVVE1HSlNJSV93e+bc/v72cWZrb15YTEhLSEhSanJ54HZoZV1ec+TYzc7NyMfHx8G/wL6/yMvM0djT2uftau/ufOfWzMzHy9Ta5XZaXV9NSUNAQEFHUXH26Nnp6f1pbm76d3BdV1tSV15y7vHZ6WJnWFVbXFJOUElMSkpWYfvp1drh2+Lx/HViV19NRkxLUWB6bejdcPN5XvTe3tvP1d3Ny8rGwcHBvsjOzNzn3eZ55+9cYGVe99HLysbJ0NPnaHVlUFFRREBISk5kb3Dk3eLk5v3d1u7m33BaX2Fk8OLn4+xeVlhPT1VNSU5LQkRHSVh7e+Td5fp7dGdmXFVYT0NCSkpPX2z44uj85Orh0c/S0svPz8fGv7y7vb7Cy8zO0c7O2uLe919lavjSztDNzt/qfWZ4cV5PSUdBQEJFTlVXYH1sZerv39Xic337YFthc+be4PB2WE1QT09gYlBPT0hGTVBq5N3d3uZpZ3Rw6t/+VlFPSUlKTVplbPPo/u/f3tPNz9vYz9HPy8bBvr/KzNDe29fX0dbsc3pnV2bh08/Oz9Tc6Xn45N3bblNRTUZGSk1ZbX3y6unz3dHR293k/Op3afv06ORlWVNUTUxNT1JOS0dGRkJMYWzt/nFrZl5bYf3nfF1TTUxCR0hLXGlnceTq/t7T0s7Py8jHyMXAvru7wsXHy9HT0Nja2d/m6Pv32NLPytTe4vFpYGv5e2ZRSkNBPz9ESmf0Yevi63vk2ubc6O13YV5YX/7q6WFdZV5SUFNSVFRNSUlNUFZ0597x8PpqbG3o297ma1NMSUVITl/06np67ujg4dTP0cvP2tzXzs/FwMLHy8zW3ere2+nf82bz6N3YysfLzdvvdnH+eOr5ZlRGRkNDS1zq4trscN7g7N/Q0d/mZVpaVnTt3uR+aVJWTEZMVVFFRkE9RkdMZ+3y8vJVUl9l6tnbelhPRENFSV7s923uXVrd29fKxcbJztze0MrAu7y9v8vc1c/cz8nR9WlkZt3QzMLCxsvqW1pmZnzf/lFFPz0+RExw43NpVk1c49nU0NHfX01LTVJ549bnfGpKSk1TWWVvT0Q+PUZQ8tXQz9PfWFBg59LS1vRYTENER1T35+djWU5LZ97JxsnGz+ZlbdzKv76/xs3cX3Ddz8rQ2XRVUl3q0b++v8PM3V9WfeLW2uhfTEVCSU5+1tjkYFxaXevZy8vZ8FlOTExa79vU3WJXUUhMV2JuT0I7OT1CSWDZ0dhuWV5TUu/Z1+VzU0dHSEpd4Of8V0lSX2vlz8XGy9jl187Mxru9vsDP1NTU08jDzd1oUl3f1dTAvb7F3vPp5PHf1vJjVEQ+QUpLYPBhXkxJU2B88NTX6WZNSlFrY+3gefRdTU1VYnbyZk9JPz5EVGT+09TV7lFXdHjn1Nf1dFVJSE9m9dxwYFdGS1p548/N2Nj+Zf3ZzcvBw8rM2ePf2NHHxOVnXFVdcdDJv7/Ky9Xe39TS0s3pYFNOS0db/97XY1xaVlZg3NfM1nViWFdQ+d/34m9aU1FPU3Rod1ZEPzs+PkdaX/H+YFtcXmvb4OTc/1JES09Oce7l8FlNS1Re5NrRydDddd/Sz8PCwL/Az9zP0cnGxsTP61ld9+fOxsHGzd/q2d3OzNrZ51lEP0ZIU2ZxYVJKP0RKVeDf1+BgUU1YV/jY5uh2X0tJUFbj7mJfUEc9QEZR5uHm6PllYu3wzsrf2PJdSUpUWt/h/vVvUUNNWe/N0szS5Hh23NjKw8THztZ0et3ZxsjIzelmVWH11MTCx87Q1tzOysPCydpdVUlGU2Xp7WJSTUhETV3p1tnfal9bVGrm3tjkV1FRRktba/JsXUtDQD5ETldaWU9PUU5d//Dd2+FiWVZMT2Nwd3pgT0xKT2rrzsvNz9DP1M3Gw8PCyNPO1uLUz8nHxMve4nn22czMysnRztTTxsTDxs7dXldNR0xXU05NRD9AQUtYaOvt8GxeXl153t57bWdRU1dXeuXe52pSREZISVpkXFthVlVx8tzR0Njtdl1cXFJmbF9ZU0lFTVNg3dTT2tjX28/NysXK1Njf+ern7tbPztTd5/Te4NrP0tTQ1tjPysfFwcXO1edrXldRWllTTUpISk5XYX7v7up5ZWp5/+7j/Hp9aWNeX15obl1QSUNCRUZJUlJRWFRVYHj6+OfpdWJXU1RQVFtYVVJRT1VccurXz9HR1czKyMXGxMjIyM/V1dLV1dPe5d7c2tfS0c3Ozs/PzczHw8jLz9zibl5ZVU9MS0NDQkBFR01OT1ldXGJwdu/2cX36/Pl6a3RnW1NYU01OTk5OTVFdYFxeZmr46+nx7Ohral5YWl1aUlpXTlRTV2975dvU3uPW0cvJyszJytDO0dbQ3Oj+/Xpr6Ozk1drXzsjMzsnKxcTFycrK2+hyXmhgUFBXUExOTlNbWmltfm1cam/66uvh3971bG1mbGFUS0lKRUhHSVBPT09YVE9VYGJuZWN5cF5aXlpjXlNZU1NOS1Vdb+nd2tHQzsvGw7/AwsHHzc/U1tbW6HB5euzr4tfSz9LO1NXS08vHxMrPzNvvemRbUU9HREFARkdKUVpiWFlcXGpka/fsfuvZ7vF1ae71cFxRUUpKTE5SV2RjY1hh/nLp69/lbWlcV2Bfa2NdV1JST1VTaurn6PV9/OPSzMfKx8PGys/P29zh/nZyXVxdbunb0M3Ky83Pzs7KycjFyM/V2tjZ2dtrWVNLR0dNUVRdbG90bHDq29ff7fBuYF5aVFRYVlFTVU5JSEpISUhLSEpJSExWX1hv3+prbWBbVVhVU0xOUk1QWunk2NLT19XSy8TAw8HAyMnOysvO19vi/vl+8Prp3tjV1dnQz8/Nx8jNycvNz9fc321XVlBJSktJSlBYWGNgYmRka2Zq9PjycGxoXV9eXVxdUExRT05VV1ZaXFpaVVVZW2Vq/+jp6+fv6GxaVFRQTE9UWVp77N3b3dzX0MzQ0c3Q0NLS3OHi4v3r3+z86+rn7mrp5d7b2d7X0c7HwcLIyMzN0tPhel1XVlNVXGteaH71ZWlfZ3rtcXLw+fx5cWBZUVlWVkxLSkhMTUtISkhKTk1MU1RWW3B1dnNvZ15eWFZTUlheXn7l5t7Rz9va2NfQy8nHxMTGxcfJz9ba4nxtcm196dze29PS19PV2dDPzsvKztbT0tbd6vpfVVRXW1ldVlNVW1hUWl9XX/N3e/h0ZWVaUUxNUVBQT09UTk5VU1VZV1RcXl1o+nZrdGZeZmBcXFtdX1lccXJx/Px+4ODs4Nna39LNzMrKzMvQ2Nzb4vDuZF5kZmX37uXY09jTz8/OzczLy9DS1dLX2Nzm5e517d709vtxZmdbXF1XWmh57d3i7fb6W1VQSkRGRUFITE1MT01QVlFRWVZVVE9ZVlRXZmBYWWFaXGlu9Ovrbnnz8ufc3t3bz8jKyMTEx8nJzNPV2d3k6Onl5u91e+fo29bUz87NztPX1tjb4d3f6efl6Hl0c/52bFphbFhYWl9aXF5cXmRy7uf+e2RgXFZQTEpKTE5QTE5SVFheX218b2d2b15kY2NrZlhYVlRab+Hl7PF6cfN4eHp+69zQ09DRzdDT1tfc6OTl9V9qePhuZl5v7uLTzcjKzM7Lztra2eHa0c/S1dnZ2NfV4Opucfzuc2Vk9/dpc21sZXd4e2xiVllYT0tJSEVGR0ZHTUtOUFNZXllWXF1TTlRVW1lXVVZWaW/q7eff++3m7PTp5NTOzdDMycrNysvP0tnQz9Tg4+Do/m1cYWn729TQz8nMzszR3uPt8+zs9e/n3dfe3d/vY15mX1taVV1nX1dcbWBqaXhqX19gXlJQUVBLSUlKSlNVaP1mdOvqYWFjXFZZWVxZVFtsc/Ps7/VuePnzaWRu5vLd293d3dPOy9fU2Nje3d7e5vVweGtYaGZ9793UzcvMzMvV3tbT1dTZ3tzbz87L09TU3+bma19qYnL191dfbGRs6X1jYF5fXVhJS05MS0pEQ0FGTFZYVWFdWVtYS05OT01RTUpPXGP/5/7xdP905f937t3X0NPZ0M/Py8LJzcvJzM3R3d3c5/jwYltj7NvW0s3Mz93b2fXw4d7q39rf3NTf09Hu/f5sX19fW1plYHNqV1xvan3uc2ZiZVVdWE1OVU5MT01LTE9QZnJscmRYWFpWWllVVV5XWGFjYfvtdXtvaWv4b3nx7PDa19vSz9PSzM3P0dvn3N7r6u9nX2FhZ/xx7tjP0tDR4NrZ2dfS29rT0tLO1djQz8/T0+Hl6un06HljbWljeuZ79PDsaWhbUk5KSUlJQ0NGS0tPTlVcXFZcVkpMTk5KTk1OUFJRZGFdZe55ZvPu8Xl889nb2tTKy8jEwsLDxMrGztjc2Onx7u5sb25q3Ofg3dpxcPHu9+7z7NTk5NvV6NzX2d7d5uza8vr4cmJ1a2Rgbl1y3Xvp9mJUW11VUlFKT1RMUVRQT11mcf5vVlxgV1lYVFJWVlVWW09dbXL8bWZjb/f38ft43t7j2tPV183KysrR2Nba6fF4Zl9iaWJrb+7f29jX52tq8+Xu4N3W0tLPzM3W1s7P09DOztHU2d3m6eLd9XTs6u3q6PhwVktMT0lESEpKSUtLUU9MUFpWUVROTlBMS1VSUFVXTVFdXmBpbHf1d/Ht6+/f2dDPzdHLxc3MycrMyMnLy87i49/zeXZrYH7p4N/na3d0X1heVVZq++Hb3/zb2ODt6fne2NPP0d792t3f3OZjfOvt6+hnYGxXVFVMQ0hJUFRST1lcW2RsV1JeXGxmWk1WWF1v/VZUYmTy+2tu5XD37HBYbe/p2dfZ1M7W0tTb9t/Z2NjgdmxkXPr0blx0/N3U3e7t/nt9bV5VX23f1dHa0tPS09XZ1s7PysnM0s3NztDO2PP37vb9+mtpYlpNTUZAQEdLTE1OT1NRUlVNSktQTE9OS05UUVltW1RWXltz5N7d3e3r4u/p2tHSyMbKycvU0M3T1tTc8vR8cnz08+bxdvfp6ODZ4efzX1hdVFNdY2ns2+Hd4+fe19vU1uDf19fX0dbZ0NLg5fdxbe32929ZT01HR0xNT1ZdWF5pYl9rYl1dVktMUE9XY19jdWhqZGhec+3q5OR9bvl+9unb4NXT1NXU2uHc3+ru+11XU1lccGpneW5r6t/p3dne9PteV15kY+/h5tzX1drPy8vJy83MztLPzc3NyMnMztPf4eL78PtkUExGQUFERkpMTU5MT1JXVFVXVE1MSEhISlBZZV9dXWBca/fg4tzb5PXu6+Td2M3LyszKzM7NzdXZ4PxnYVpXanr+7utwcP7x7unp9HxmWFRRT1RfZGl3eWtt8d3R0NDQ0dTX1NDR0szJx8rM0dnZ3dzgfV9TS0hITExOT09RVlNXY2tnYGNdVVJOTU1PVFpfYGBfXm197t3i4eTu/Xrr4t7Y08/Q0djc2Nvk7HJeWlBOU1hXYGVmcHxweOnn5u/uc2dcWFxqdu7u7OLg3dzPzMvKy8vJzc3MysjKycfEyMvN0dzf92JUTEVCREZJSktITE1OTlNZW1ZQT09LRktKS01QUFVbXXXm6N/W2tzZ2ePf3dLNzs/Kx8nLy8vO1+HifmRaXV5aWVlXWFtda/Ty5t7wd2hnW1JWXmVmZmxlaHX02tfX2NfU1NTOzcvJy83My8nJzMzN1Oh+XlBOTEpNTk1LTlBOVVtdYWJZVFJQUVBOVVlUVllbXWb849vZ2NXX3N/b2NrX19nV1dPN0t3a3/hmV09OTU1OUU9LTE5PT2B69ujz+/piXGlkYn7q5t/f3NjV1dLMzM3Ny8/Nx8TDw8nLys3Pzs/U2dzfeFtSTUxMSkxMSEpLS05XWFlYUU1NTElNUVNYXFlSWlpbcunq3Nfa19jd2dHU1NTV1M3NzMnKztXX7GltZ1xhX1laWFRSVFVYZG1iXVtYWVVPUVNUV2JiYmtz8OLf3tjX2tvUz87MysvMzc3Iyc3MyMzS2+Xqel5aWFBMTVFPTVRgZW1nYF1TTlNRUFNZYmZdXWxwdnbj2Nna0tDV0NDPztbf2tzf3trX2Nnc8WBbVlRRTk5QTEtLSUlNTlFYVVNUU1RWVFtfZ2ZhZ3t1feLc09LPzs/QzcvKysnHxcfKx8jJyMnN2vFvc2JWVFlZUE1LS0xMTllZUFRZVE5RU1VZV1ZZWVZda3D82NHS0NDPycvOyMjKzMzOz9DNysjN19nb9GhuXltfXFtcT09WUE9UWVVOS0pISktPWVlNT1lPS0tOV1tXZWpmdOze3N7Yz9DRz83MycnFx9HV2Or9Z2nu7HtxdGppXF1oamz/dXdlYXN9b2hhYGZbXWFo+tzU0tTY1tLZ1c7Kx8zNys3QztPZ335x+l5TWFlaXVZRUE5LTE5OUF9qWlBOTlBUT1lnWVZnYllYX3L6+3X45f9y593Y2tnh5t3Y0MvP0s/S3nNfUU9YXmtvWVxrZlxdbnFoZmBeYVxgefBtbnhdVFRSX/js3M7MzsvL0M7IxcPExsjEwsfExs/S1OHq/Wx84+fy+2RWUU1LTVJTU1pRTE5KR01NTFBQTkxNTE5RT05RUFJWXGR+2d3Z2+ji2+fi4+fp5d/v+GhjbH5sb2lucXfv5Nba3+jtbnBvdf7u6uPbfmJcYWVyfeje1NLPzM/OzsrNzs/NzcnKyMrR3Oz5WlxhdfHq8eDn/WRfZ1dTUlVTVFFVWl1TXXZeW1RTWV9dZ3BrWFxeUldaY3fq7e3e5Hbl6mZpZGZtYlVZX1hUXlhNTk1RXGlkeeR5YH10Z/9zeeTh7eTnd2x7a371++DWz87JxsnLyMzMzdPPy8zRzMvT2Nvj3d7h19PR1tXV3d/pcG9fVVlcXFllaGhpXlZTTktOUVZZY1hVVE9NUU9NVFRdZ3Jr93VtYmNdVlxcYmt2bvP7cF9mW1hmZHrp8Hjye21ke2VkcW/y4fN3/HBsZu559urr1svO0dDQ1tnV393b2M7K09zb2d/i3Ojn5ujf1+r54uFxbHFse/jy4dTf39jY6er29vx3de3ec2JwcmZwa2BdXmH062pdYl1QT01JSElKUVZPT1ZVUVJQUlleYvDwamBrZl9fW1ZXXF99+nh47PPv7flx+u7l2Nfa29je3t7i6Nza1tDQ1NLPzsvKzdPS2dXT1tzb6uvk6XR37vPg4eLj3eHi7vdgbHdt/HJnePhgbHhrXGlkbfDt6d7rYWJjYlBRT1FXWVVZVkxPVlJNVlVndnFu+HRncmtgVVxcX11oZPh1Wl9uZ2R1bvb79/XsaF1faWVcX2Fldfd93+Lm29fm6OPd2dbU1M/a3d/X1tfS0NfPzszJzc/Rzs/R19/q3N/f3+js4dzl6d/m7dvg4u1xanBrXFpgUk5QTlFTTUpLTEtNVExPV1lcWU9OVlpWV1xQYmxtb2ZcZ21kZmlmXX1v7ubwdfNubG9+d2J9buPb3+Pa493c3PZ09//a3ejp3OLc3uP19/Dm1NfZ1dHZ2t7f6OPx6Njh49rb3dbX2drZ39XO1tjZ5Ofo+XBna2fx7WljZltdYltYW1ZQXFZQVVdRWFhXXF9cWmpsampsYWhnYl9bVldfWVlVU1JYWFlTUFVbXl1kY29qbXJ1amNx9ezn39zY3NvV0tbVz83Kx8nO0NnX0dbe2dXXz9HV1tDSzc3X3NnZ4Nve3Nrc6uTpeH7r8njwbmpxY1569mllX1RSUU1PUU5PWVZPUFJRWF1ZX2tgY29hXGZjXmxsZntuW2BwZWFrbGd0dHfxe2VvfWBZWldWXVxdZl5aY21mb/zo5N7n4+Hp7ePb3t3b2N3V08zJy8rGxsnKzc3QztPQ1d3e3Nzh4uHc5+Pu4ebw5+Hr/frw+WlwbOjreHtsYlxaWlhWYF5rXlNTVFVSVVJQUFNOUkxLT05QU1RRT09UV19dY2ZjZGFnZmFiaW/ua2dta/bt6/f8dPvt6/P37+nk7+ns6eLY0M7Ozc3Ozc/Mzc7OycnLzM7Q0NDVztHa2dLX3uhzbHVwYnJhWFt2dXlwaGZsZ2F4bGBkcmJeXFpcaWNfZ19YYHh4+X19fH1mX1hTTlhuaF5aXFlcVFVWU09cYF5XUlZUUk9OTU5LV2RnXWRkZWtu9+jj5dLOztbW1dnb1tfW0tfPy9DX0tLOzMzNzc7Vz8/W3djU2Nvb7fDs+N3W3NrX2dzf4/N2cG77/2lkYmVcV1NMTExOV1ZTWFhYUU5OTE9Xavh0a2xoZFxdY19n+ebo+Hl9bWxeXlxYVVlbVlFPUlRWUFdZWFx37+99/evi4OjY2N7h2NrX19PMyMrNxsnM0M7S0tXSz87obPteWmX7/ern5N7hcvXmfPzh2Njd1tjS1XV46fLs3N7e3+Hu2edZVVNPVGZsZllcVV9RS1JWT1NbVVpTVlRuV1NZYltZWFVVU1dVZk9NT1BNV1xeW15kXm5gbnlvX27v6/Tf1tLO1dPOzdPQy8jJwcDGxs7UztPWzc3Nzc7S09HX3OTq9Ojo+vbke3RsWF1pZ2rp7u/m63v0bVxdZVtcfWNcW1xWY2Bfef5iaPJ1e3JmWl5VU1hUTFBcU19lZ2BoXFZcVk1SVE1RT1BQWVRWZVdVYWll9+/xfO58797u9OPd39DS09nU29nS4NrOy8/Lzc/W2N3W2ezg1M/Wz8/S2drh2djc29TR0szPztXb69/g9Pzq93b2Y1tVU1ldVlBPVlJRXlhUT09OUlFPT1RUWmReXVpbWWVtXmdtWmRjVlNOTEpNTElKTk5cZl5bWltadXRodPDx1dLY2tna4M/Q0tHO0sjGy8rKztTK0dPW3unZ3ej6c11b8v747ujs19/z7+ZnduPn3ezg4NjZ4OLea3Xd9P36ZmH+Z1dfWUtVWFhpW11gZGhYZ1tPXl5hXVNbYGt3afxiWF9dXFRJS0xLTExPSEhIS1BPUl1gaWhse1tdYvzk7OHY1NDNycnNycjExMjIycrJyszR3t/m29nX19ne4eLq7WxydnxudXtnanfo3d/i29fd5uHrY1xdWV5YT1JdVFptYV5cXFtnXFhTVExRXldQWVZbb11n/XBYa2VaVFNNU05HREVFRFRdWldWT1laW1lkWll48erk6evZ2dLOyc3Lw8DCyM3PzM7O0M3VzcvLztt5/fF87/j7a/v47O55YvLh3NTS1+LV083Q2uvp/3vo7W5o8fDc2PBgaV9u+m9cWmRlbW1WTldUYv9tVlhiXV5ZTUlGQkhLTUhKTUpLTEE/Pz9FSkhIU1laWWReYWvx18rP1szJysrFycrIwr+8vr++vsDBw8vR1tHTzd7l4/Nfau1+efvj4tfk4+Tlfu3ndGhy6N3T2tvZ2+fe4/JlZ2trdGJseGtiePlxa2pmbnJpb2pjX19ZWVlZWmRranBmX19cT0tISUpJR0VJRUBDR0dMT1lofvjs6/Dz8Xj64eLe0sjHwL6+v7/CxMbLzMrO083T39zU3Nrn7uHd4NjV3uDq329p3u3xz9XOxcbKxMXM0NTS29bk3tpsVmZdWVxVXWlvZfJ8WU5OREJBQUhJSk9gXltZZFtbVlJYVU9NU09KSE1MUVBNXVtYYft1bH1xYWhmduXp6NPMz83GxsjEx8XFx8rJyM7S1tnX0NvSztPZ1dv5ZGJXT05NV1haZ+Te4d7Y4d3f4NTQ0dfQz9nd3N/V2drP0dvo3u1oYllNTUpHSkpKTVJNTVdTTE9PU1hYUE1QT09VVlRWUFBUUk1OTktKSkZESExPUFZj6ufj1tLT1Nba1tLRzMjHxMC/v8DEx8TFy8rL0NLR2/h5Z2n29md6+W/v6fJ48O/s4+x66+X7e+zx4OHu59zb5N3p6vP+ZF5TU1JVVlZfXVpgaVpYUVFOVVBOTk9QVllUVlBQTVlPTFJUTU9PSUlJSEhUTk5aYFt47Hv+e2Jk5Gxo7+vv0NDWy8XIw7zCwL3AycPJ1NLN19XS3M/P2d7e+3rvZ1lsblxyfWd24urZz9PSyM3RytDf09Xr4eJta/lZVl9RSk5MS1VSSEtNRUlMR0pPTU9cV09bXlVoa1BYZlpWWk9NUkpIUlhRW11bXGFVUlxXUF1pYuzq7+DT2drX2drPz9nQzs7TztPZ293r2dfl393e6dzl+fd2X2t+dXns7+3Qz9XMy9TNzdfY1dvo2Nfd2Nzu3Nzt39fg9u1pVVpSSlBXV1VORkVKRUNLRj9FRkdLTUhIT1FPV1BPX2Z27uft9/N8eOtzYX7g4eHt6+fn49zT3Obk29ze6enm19jX0djb1M/T1tvZ9ez+9nJbT1leWFhaX1ZiXmRlYFz+4djU1NDSzM/P0dbSx8bGxcLExsTJy9R6e+L6/fno7v5sWltcUFFSUVFPTkxOUkxQT0lQT1FQV1hRT1ZQUk1JWF9jY+/p59vW4dXS0s/R09bOz9bU09/X29nS1NbYz9fl6vdtdl1daW9ue9za39nh6+l88Oz0bG31fXnse2lv9vX37ffs2Njk3dzc2tfTzs7OzMnMzszP1dTNztbf4+fi9Xd8ZFhZZmhpZ2hjbWlYVVdZW19fXmBjdeTu8/t0anJ1Y1pdYVxiZmpoYF5kbGpu/ffv6Pr7dnb+dXx8fOXi3tbY3/Tx/fd5aG7u+3vx8d3e3dvY0tHMyMrL0NLW2tbd4uDp39ve1dTT3fB2d290Y2ltcu576ujf5+/k3enf4eLmc2v+4ePwYF5nb2FfZWVeaHZkY2VganxfXGr/8t7l6Ojo/vzr+3B7V0tRTkxMTE1WVFJcZFBPVlRSU1NXZ2RbX3xjfuPt7d7a19DS497Y/vDg397e29LU2d7QzdvX1NbS1Nrb29/n4Ofi09fc4OPa3uZuY2hXU1xZZV5cdvpscOva2+fxcep7bXJiW2d+6urtcvjqdGtwa1xeWlVLS0lOTEdSZFtdX1xraGdMTFFZXlpMTVJTUU5PTVdZZufgd3tz/m5mY2jr3tbPzc3Ky83P2Orj29va3+rl6e3yfnv8dv3n09DZ3eLf5e5uZl9l+epucPr86vpwXmNjbG9kWVRv7XRXUlZnY2N439rS0djcbFpbXVto+O3g2t/q+V5VUk9KTE1ISElLUE1DREtKS1VaXWheXWJaS0lLS09bVl3o6eTY7WryfmZz4/Tj2NzTztfd09vfzszQycbKx8bT3t3s7tzqftjV2dPV/G90X1lmWlRpenv6+FtQUEtNWVFc9XVjWlRQTkxMU1tcbOba19/26PdwdPh1YGRu7dv4cf1s+3v0euzf4+HiYFtWS0hHRUVMUFd1fVxs/1xeYVRRV1RVdGtYdWlbY2Bcbunr3M3Z6Nvl8+5vftvX1c3Iz9DJys7M2d7W1tzPzNPN0dng5XLs3uX93e5jX1tSVFBNXFpfbfFs++/sd3JZT1FLTFBWUVxeXV9nWF9zZGf18PrtemxnYVJeXVFh7+ra0tDQ1dj9/mlbZ21wavT4+OdzbHlzd9/Z09Xf2+BvZV9wcmvx6Nzb4dvhfOruc3B2+uba4e7X1ubc3Orn83na1tzeztfl2d3i4+rw3dfa0cjW3dp8X1pNTmBkX/zga2/talthVWng9Gl1ZlFQVUxLT0xe8Ofm1N1raGJXVVhSYO/78N7f9+Lb4NfZ283JzczOz9XW1uft8/Hl2NrQzc3NzNPd7evt5P7n2uLY7fTwcFZgY1xiWVtjbFxmdXJVY2j6497Z19Ld4/9zZ/f34N/Vz8rIzM3W2ePZ29zi4+nsbl5aVE9PWVz8cuTb19/t/GhYTVRYWlddZfB89/hsZmV79Oxv+N3W3u3h4nV59+rT183Dv8TIyc/a2tvYzs/MxcTKz9v8but8e+NzetvZ3dztVlBXU2N9buDO5WJcUkZFS0dMVVJw1err5uvt3+p+3d174NTg2tvsau3u4M7N08fL2dDXfWdoUk9RTklcXVpvYF/8eVto+ndt1u703fJeXFlTb+Xg1szY08rT3uB9ZOzb59zN1M7N1tra5O/b2N3T0NvR1OJwdmph8+Do5fhdZGNYT1NPU11dV2l7bOvi7V9nW1VYV1FVUU9TV0xLVlRYaHto6d/r49nub3tbVV1eWHnz7dHJ19/Z9WNtd1xpdGb4a0xLTEpMWFpY7eTs2NTxcW5uZ/94d9nb3dPY5N/5b3Td637f3+Dge2lpY/z52+n67Glt/3p0bXF3Y3NzdP/x2+fo4XdkV1JaVlhbVlxRXF9RVllaXF9gXFhfVVxSSUZBPz8/QEZPVlBmXVdWV15hZHT28P1o5fDm5eXi1c/O0tHR0s7a3Orp9/tpanZwYGh2bWpbaPvvfunyd3Z4d3vu+P15cGlsY15ldnZoWk9ST05NWWFmfubg5ftlcfT0d+v06d/b39vb497h6/Dmd37l7F5UT01OTk1NVU9SXGBcWFVQXF5TT01JR0dHQkJFRUpOT1VfXvze3Onu3+ze3d3f2NbSysrOz87QycrO1Nbd5+ri+Pvl9nVhW1JWVWT7+l5eaWVlXl1TZGNda/9eam1763BiaXRgafV9WWbwaW767Xny39Hd4e797eZ0/eZ59uvg7Oh6ePbrZmtrWFpZW1NeVVhnY1VrcGBo7/JibllTV1lNU05JSU9PUWJfYura6djY3N/Y2trT19DKzdjOztfUztjV0Nvb193v9mxmamZbaH5q/vNjXXBgYHn27+jf39vpeHTo7PXl4+ri5/Xe3ePo/V9mZFtccGxo93F64+9ebW1kaHFr4dfn2tHS18/U3dXf9+Te9vb2X1lmXF566OXX0+rd32ZWX1ROTk9QW1xUXV9WXPPzetjX2czQ1t7d9Obf1drPzNDM2tfT1/Xj2Nvo5d/m2t3X3efp7N3i8/N3cu7l6PDv6/bo+m99dfP04trc9HD66HBr8e3w7Nve3Ojw7u937+fx6ebm8nRkXmFtb97Z0s7LysrL2+brbWn48u/z7ezy9XV8+fDg1d3y825fVVhMTlBPWmZfXHbi3c/U1dnO49rl3e/X3N7Y19bUz+na2+bv3ubo497a0+146M5l3tbq0tn7Z3VSUlpkbHRs8eH0bPfveX7l4Orm4N7r8+Lc7fHe19XW0tbb4ezx6WxfZ2t8/m5bbe5u4dbZ0cvIy9PX2t7t69jmX2zm8Ozu8uzk6ejecl1fWFp1altVX15n/VpRVltfZ2dycWlr29Pqcu/v5NbUz9Pc3dvkbXFubeDW2N7b4dzT4fjzdPjh919cU0tUXlhVWVlhbm908HRhfHpr/er75tze3Njc6+Dj4trq8uZ0XV5lV1hqZ2trW1hdY2D46PLe43v17Pf+fPbn3N3X0tzj5/PzfFpUVFtdVldaXFhRV1pbbH7q93ttVVpeWmNaXvbm6OHb6mdsamnrcVtSXmdgXF1p7PX86WRcZGzudmtaT1daX1tTVVtpfOXe4ejo5d/d9W176dnX0tLR1dPR0NPb6uHa4vJWTktST0tLSUpRVFJYT0hLUVBVTUhHTU5OVFNSVFRWb35r+OPq19rxe+ff6tzf4NLPz83R3unl/OLhYlpkem/l2+He4HLu429xeVxeX1BMSE1MUlpPYmVidt57VlVMSU1GPkE/Q0lWUVZbVFBfY13r6e7k2+fs3dnc0s3KwsTIxsHIy8rOy83X8PTk8N/Z62xdU0xVUElMSENFRkVFSUtIT09QXl5NUlJMT1pOTUxISUpSU/7rcOzsbfvd+/ntZ15682z03urdz83EwMXDv8TIw8TJztfq6N3d3NTc6eF3a+PzX2VSTU9KR0ZEPj9HREhPS0VER0VLTExPSktSXnXv2d7p2t3g0NTZ1dXX0tLS0c7MzsfExMDDzNTX5ufa3+x6XGFidHr03nRnbVxeV1FUSUZHR0tGR01JS1ddaXpmWWFfVFpUVFFKSklQXVZt7Wr06+nTzcnLy8rHxMfGxsTHxL28vr/IzcvNz9HT3Ojt+mj9aG5vVU1NUkxQVE1IRkZJSUtOVmBd6NXW2eb88ez/d/XkcnL8/tvTz8zP0NDPztDO3v9nYnVz9mFj+f/u1tfQ0d7h5el9/G9nXmFs79/c1d30cXN5/vL0bWVYWGVfWU9RUVZgcejsa2j0e27u5eTq3NTOxcTGxszQzs3OzMvT1Nbe1s/O0tHO0NHPz9HY7/BtXF1dX1NOVlVo6N/X3+Hq39rj3O9oclhcY2FhVmh0be/m1dTk3uX7amReUExNTVdo+N7p+3v54ung5mT7cnPu7d9+69/k1NDMyMzN0NLc3NLd6eHk3tfX09fieWtramtrV1ZWVGJx8f777uzZ0tDLzc3S2uN17XNhbu7p28/LyMnO0tDV4fZmWFhUTlNjb2r98Hzk2dPV0s7S1Ot9/VxYYWVocP/t6970XmhwbmhnXlVPTU1RTExRT1Vab3Bt3+5+7V9lX1xhc9rc29HQx8bOy8vM0drY+HL8dt3Z1dXg3N7k7GzqblRfV1VXUlhNXvR25Obb0uDc2Nvi59txXnNnavx2eF9ld/Pf7N7e7NvkX1lXU0lJUU9aXnrrfu7f4Ofk2/Jt8PPr4NbT3unl5tzi5uZtZmxmbGxjUlJfXFlaYGFQWGBtd2JlU01PVFhYX2dcYPnr3NPY3OPe2d7n6ndiVFx17+fk297g29XX3u9tVE9UXGteYWRXY/br3enp4/Lq8f7sbWVaTldhYl1dbF9je+vibV5cUFBVWVJKTkpIUFRlYlpoXGd+fe3y6PRu/vLe3N3X3ePYzsvO2OByaffp4n378Gf55Onn+vFxYmZlX1hZUkpKTk9OUF9bXXTt4OLgfmFVVVNMT1BPTlRx+Hbi5Pvz8f9dY2pfW1lbXVhh+GRfaezq4tjd7vJxdHfy6l9eX2lxau75Y25vbF9h+2JYV1JMS0tNTU1RVVdec19PT1FLTVVUVFlpeOnWy8jNz83S3dTS2tbV0dzb2N3X19vf7t3W1uPl3nFw7vtdVlhTUGVvcPtre3RbZPRwe2ZeUE9TS01TXVpYbXd4a19bS0hLSkpKT05NXPnr59vecmtrdvDc1trh4dfb3dvT53Dz6N7X1dXa2Njh331sU0xPTVphZ2taXVlUYnTj+V9cU1NecXV6/Obf0szV3Oru82J14eZ4durl0s3V0t/l4vXl1M7V4OTz6tza09vm+/Xp1c3S2NjW4N3gfG5YUE9RXV9nYFhYV1xfXVdKRkhFRkxNUU5OT1rs3/NuW1tWV3Jo7ebu3NXKzNDL0tDOz8vJw8bK0NHPztTa2d397+Th3d7lfvrr3WxdYVhTUFxaVm9saXht7e3Z0+NnVWFhX+7m83p07fDl4+36+ezrfW3wb11ofujc1NHZ09LRzsvGyM7Y29zYztDc6+nd3djZ2un3eXJtWlNPSkhFRkpMWE9PTUteeeP8ZF1WZf3n1dXX19vQzcrO09bZ1s7S09La2ujk29jY5N3k+NvX0tbe2vd079zU7ejq/d/bz9Pb1N3o3NbebF1YUVVgdW5kaWtYY+jrcFtpWlZbX25cX1tWXXXi6vbpe/Tb0dPg3Nze3tnS1dbX0c/Mx8TKzc3Q3/H07uTy8/Dk297i6eTk7uve6n1gU1NXX2FiX1hfZ2fu/v1+YnR29vxz6vjp/GzhbWVtXmdgeOlu82dhbGjc2nrj5uTe2MvSysrQztTM0XXr4ufu9NDf4tvl2PDl31lXVkxIRU9LRklDRkVNbFNNVlNQUXl3VGdtbv140dr45OTe5M7I0c7N0dzey87nePnm7trO1NDR1Nvcy8/qaXf6fOjW19vY2+xr29brcV5ZTEpXW1dWT0xIUFxQSUZKSUtTU0tKTE5OUVxlaV5YUk5bfunn6HVwet3V1tnf4ODZ2tTNyMrX09LOzN7raWD4dPDq4+VcXmhndWxrVUhKSU1ZXGtUT1RNXGheVkhTWk9aY2xRTVZPWWdyeE9QW1Nh79zrX3R4ddrMy9ne09TPyMLBycjL0s/Ix9nl3OXp3M7P3upoXVZbbVNKRD4+PklMRkdCPz5DT0lGSUhJTF/0bmZaVVJb6+lzdF9XXv7R1tvb+Gds19Dc1eB1e+bO0NDT2N7czszW2OVud+DUzs3Q1ndceOHrfWxTSU1RV1pWUkpER0tHSklAP0BJTU9WT09LUWBja2VeWV3w4tnNy87e29DNzcrJzc/MycXGxcbN0NTX1dXeeWr8/vfd3uP3aWxfWVpYV05NTlFYV15cVlhLSktKT0xNT01XWmFlYmNiXV1gW1tUWE9TYHLz9GpeX/f259zUyc3UzcrExsjJ0M7NzMzOztDS0c/MztHb9V9XWlZRVFRQUU5NV1xdWEhDRUVCRUlLSktPUFlcWFlOUmpfbmxve2Pu2dLN1dft5dLVzMvIxs7MyMTCxcfU4tXT0M7W0NPUy8jJy9DjXVtcWFdRU1BUXWRqXXNmSklJSUZAR0hJTFBcW2tkUVJUWlpVYVtXZvXY3NzW9+/h5tndz8fKyMXAw8fFzdDR29vx39rh1tPMy87N4WdfXFxPUVRQV2tuYl9tYllSTU5IRkpISlphXFhrXVRdXGViZGpdZnna0tnIy9rc4dTf183PycW+vL++v8HGysnRz87a1MzFxMvLzNfe8GNXT09LSUtTYVxpfmRaTkpERElDRUlOXVpkZ2RjXWBWXXZcYXDu2uPW19/f7u1dXO347dbQysjCv8LCxcrU7dvV3tXRzMvEvcTJztDmZPP1ZGdt/V1k6X5uaG5XR0tMSERHSkVJUFlXTlRQSExYX19p7Pf1zMPHysrJ1NnOzcvHwL/Cvbi5vL29ytfS29vc3+V75M7O1+Tja0xLUkxMVk5MUl1rYF1lWUxLTktLU1ZRTltsVVtfT0xJUFdQW1tXXXTb3dzZ/2dbXXh32tDOyce9vb67vsLGzMvPzMnX0s7Lx8rJztrtY2VjX2tWTlBWW1BYWExIQ0FBQ0lISU9OU05XYFNKSkxLWPx2Z+7Y0tDLyc3Z3+dwZ9/P083Fw8TAvb7ByNDg89jR3dzVz9DNxMbS5nloVmp9XFpVXVlQWFxQTUtHPj5GRkNFRUdJTFdLQ0BBPjtCS0tQXHvu383X5vZsYlls2t3YzsfBwby8wcDDzNLX09Ld3dvY2tTJ1uDlaVtVYWxja1tfZFl2Z1BPSUVCQUpISU1LT05PTkdFQEJAPkhOTlRYeODbz+bwelVdV17c3tXPy8HAuru/vsbLy9DLztjh9N7t49bj62hbXVZcXl1eUldcU1lQSUY+Pj09RkpMUFhkYGBdVlBLSkdHTl5eVWXk3Nva3u5wXl1bW/r3etjPzMrHxcjNz9jc5ebZ8e7g69/X0M/g6+ro+fnjfmxoXV9XV1pMS0hCPj1ESElRT1VgVFNNRkVAP0FMWFlj+93SzczN0NLd6u3j1NbSzcvHxcXFxcnL0tfW3t3e5+158ODp431rZl1u9Pjk6PhkXHJdV1ZRVEpJTk1WWmBoX+1yU1JOTUY/Q0NJUVJcV2V+ZW1oX1RKUFpd/d7V1MzDxMXAv8DLy8nNzM7S2eja1NbP0NLl7dzd3dPb/WRcXldRVU5HRkdJS1/1a2pre3BhWVZPS0hJSk9aWlxm6+T6/O5cV1JPU1p17u/i08vOzsTKz8zNzszLz9jW087JycLCyMfIysjGx8/W3X5sa2xiTEdJRkhKU1ZWVlBPUFJKQ0BBPj9BS09MUmP+5eLqdFt7Y1hi++Lk4dHLy8nHyc3NztbWy87Z5+vj5drV09XSz87OyMfM0tLS4Ori6vVrXl9da3176ubue2BsaU1KSkdGQ0hLTlxSTlVq+mJTV19bXWl4e+nl29POycbGv7/ExMnFyMrJzs7MycbNzMfMysjFxcrN0dntZmdWT09IS01NTk9udV9sW19eTlFJQEVERkhNV01PVFh1YVhcWF5cXm9+3+r95NrPzs3GysjFx8THx8nR0NHMxsvGyc7IzczGxsrY3u9x8G5rX1BZV1tveeH5YmlaYGNTT0VERUJMUFRbUldcYejvbV9YW1dhcejn9e9s8c3Nzs3OzMzCwcbCydne187Ny8nMysbDwsHAy9Tecu7+d2tSUUxJTlJgWk9QS01RUE9GPz48PkFCREJERUhPW3FrXWJda3Ps2url63bv38/KzsvJzcrHxsjN2ujf29bO0NXTz8zPyMjS2N7j+3Hd6GdfW1lVX/55bHzq92Tu+VZMSEZGRUlIQ0NFSUhWZ1JNUFVSS1FZVFhaXFRh4Nnc0czLzcnDxsfFxszLxsfJyszMzs/JzdfV3fRtentcWFRPSkZHR0dMUE9QT1RLSEdHSEZDREFGSkZLTldaU1ZfW1paXFhabVxdZWdlZurS0s/R1t7q3t/g1tPd6eHa4tvU1dnc2NHSz87d/+rkd3l7dlVOVl596d39VFpZT1BMTkU+P0BFSE5ZTE5dWmRt9fteaHL939rQ33Tm7d/RysfR2tje0sjEzN3U3eXj393sev5xdu7c5VtYUk9bZl9WT0xLUWbe3nhkV0xNXGdWUE1ISU5gbmBdUVBTYu1ubl1MT1Xu2u/nZltj7M7U0Mze4t7Qx8vK0vlkbdvd5tf2Ym3q0NLU22ZaWH3rXmxWSkpT+uPf4lxOTF33Ynx7WkpNXmv332xPTVvw7dnZeFdc8dfOy9L0XX3X2tfNzujl1tDKwcPN4NvQ0s7Jy+lm7u3g0c/kUElQVlpQTUtGSk1SbfFwTkVJTVhfW01ISkhMaOLbcVBXae7b1N9pcevp08zM2nFjavHazsrX8/zlzcfHzNTd/Prk2dXi8W5v3dTP0uPqaGzj1tV6aXZdbN/g3/1aUFJfbPNqW1pJSltrempdTEVTY15iWVpRUHbd1ufr6mP208vJzMzY5c7FwcLGy9zh2M/M0tDede/W0tjc4l5aaHzn+WplV1Xt19ru7VdOVWPk4Nvial5g/N3l3mdPT1BdYF1WS01Yaen76G5Za3Dj3ebmY11ibtbTzs7s5tvSysnGzNTb5djV2eBraXj63d7Y6W/w6tnV3OpfVFRPU1hsbVpbV2Xp59rob2pWXl96cFdZW2B95uLme/rz4NvRzejz/G/u28/O2+Dr5tjX0dro421md/btbGhfa+jd2N3l43Nz4efzXlFTTVBfcOTx+Xpm4Nfa2u1wW1NZX2dgWFdXXvDo5d/a4Pjc0dPQ2fBoXvTt49ro5WZr3N/a4OZyWHJnYnldWFZQXnNu9PRsWGb8cOzcb1VTVV323OXeY2Tn6NzX2e5cW1xZamlvX23m59jZ0dn55ePVz9rS/Vz5/NjLy8zh6e7dz93T4F9cT1heZnROVVtX+2NeZVBWVWN3XmNOR0tIU2Z3fFtTU2Da09HbdGdXYunq3PpeX1765N/f7Or96NXW1OBtZGfs3NPa63NgYeTQz9bibFlgd+fk8F5ZWV/v5vluZltZbOfubVZMS0xUXmJdW1RRZeDX4P5yXVdYXmNZUktOVuLR19jg4OjWycTJ2nlfcN/c2dzl4W582c7O2ep2ZW334d5pVk5NWV9mY1hfYWvg4+toT0xIWWZydldUU1Ft497d8nNYVFZRVE9KSERMX236cvZuXWZfa3JZUFFZ4tzk6fbscufQzMbK2eFn9m5mdGdoWF796uPc6e768+Py5vRaUE9ZXGNvbGlea9nQzc7X32ZgWFNcW1ZSU1xhZubs8HltdV1fYl9aVmNw6dnb3+3s2tvV0drna25td+La2vJmZWNv5+z6Y2RmZXh1ZlNNTkxQX27o5/Dc3tHJz9/4bWlWZnpsYFZcZP7e3+ja6PleY+5lVk5PVljn2eHa92xjadvidf5nZ1tj2m5gZFlUT2RvWnb2bF9zz9Xd4e55XurT/t/U397SxMbNzdTqYl7rc27n+lxa3Nt+7+T6Z2ze3+r1eGxo1Mva2M/a+/rU2d/j5+9bauv9fGdcTUVRU05RU19UX+Hu+GpcWFJ78Hr46t7w4snLzcrN1e7x631yaWNfVWrsZWNpZVtdfG5r93Roaena7e7l5urf2Nnn3Nrv6dna2NbX8GZeWGFTTlNQXPjl5PTsZlFaX3ZpX3BtdOLSzdnT0ufg4NflcutqXG5u6vLn3/7f2dTd/OZlXfjo1Nve2u7f7drQ3M/Y5tfXztff23BpZWBdUFpSSVVi89ng2edraF9vYG34W2vn3M3PztLi5fLu92hvX1xlWV1XWmJYVFRXbGdwZFtnX2rm29XY3dnd2tnb3ujZ2tzPztno/X5jWF9nbGNbW1Rj7OHk/vt1dert4+f83NzQyMjFys7U4NvU4utiWlpaZV92aVlQRUlPT1hUV1BMVFdy7vfl/erU2tDPz87Vz8zMys/Y/Xj3cvX6ZVZKT1ZZYV9fVUxWXGzi6+F3e+7ez8zKzNTX2djZ19Lp9P3929XS61lQT1dYS09UUlJJTmbqclNSWGV4deXc53VcaN7Q0eZ7Z11s++nb+f5vdtzQ1exvXF5mfd/a4e96eOPU0NPW4vRw5t3o42lZUVFicn3r9mtdXWly/XZdYXTm2Nnf6npoZHl58Ofg7Wvq19/b52dZUFZQUF1XT05OWGxzYmlbVV5ja+zseG3w19TNy8nM1NnR1dPN3Htr+Xv86vBfUlNZVlVaW05JUFBUXmltV1daa+vf19zd19TIxMTHz9fk7uLq4PFdW1tdfnRjWk5RUE9NTE9LTVJWcejX3evtcOPd2s7Y3+Xo3tjS1OjzZGRw+nZqYFpYUlVXWFpdWVxmXW5vcuvt59XPztjd2Nra2N7V09vdYWHu83FqY2taU1JNVlpeYVliamdeY/z27u5zb2pxbmpuc3vsb3ReY/z5fmhr/3VkbFpdW1ppXV5qanptd/B74uLu9/Dr6fT66d7h5uzi2c/P3ejn7f1+9NnT1tTX2tfd3en58nB3+235fmliW15wX2RcUFlSUFJST1BLSUdLVF5pYmtoYm/l29jX1tfR0dTP0tLO29rX2drm7+5gV0pISUVLSUNKWm5rbuTW4N7W0s7Tzs7SzMjHysnDyM7b2d3+Z1FLR0JCPz5AREtMSlFRUVhNXmFXcWp183La0dTR18zIzsfBw8vl6l5SUU9JSE9Xa/Hp3eXu5dzW1tjec1lZXGRkXvj8auXazsvP3F1MTlFUU09VT1Vo89ne9Htf/drYztDY33NvZv7k6e5weujdzs/X71lTUFNTTk9SU15n/dvSz9fTzc7T1tbf/n3vcGB87HVy7tfX53hqTkhLTkpLUFRWTVFoe/P86HPs2N/Y2+bi9ODb5NfX7Ojq2tXb2flcU1FhWE9aU01NVGN33tPW29XN0s/O09bu5dzs1dDb3/Pn4eXzX1RTTUdHRkxMSU1PWWPu1tnn29vXy8nGyM/LzNHPy8XIzMvKy8zX2eBpV0tGQD9CQkNJV1tncF1bXWhsavLwY1lSVF5TbPXv19TPz93d3f1oaGFgXGxuXmV2+ujxbmVbV2d58+bx6/5rbHTv3drVzcW/xsjJ1dDU19Hc3dns6djSztDa3HRr/3PvZ1hbTUxYU1lfWF5cX+PmbV9RTEpJTUtNWV5lX2Hz9+bs8+jc3dXNzcvN1Nfd1cvJzNDUy8zO1Oh6VklHQENISE5LTVhbae/l2tzUzcrFw8THy83NzszJzNPOzdHU+m1YSUVCPj09P0JCSU1JTlFabvzw7Pzt6efb2trX5d/o6+Dd2tfb7mhXX2VST0xPXGra2OPf/eno8MzLzcTIzMzSzM/g3N7o62no2+zT42N9Z+/pWF1TTldTZGxZXFFKVllu3/Py+3ruc/Pa5d/a5+Tl2czO1e5fYFNNUk5QWVhcZV9vXllZWmZqeuHm3N3t5+TUztDNzdLR183Jztn5WVZWV1ldWlhSVlJOWVZQT0xOUlZfal9ZWFVeXmVmYHdyde/e0c7T5f9kYV5kbmZr/Hvr2tHJx8jGx8XGyMvY8fRlXGJcVldMTE5PUVJlZFdTWVZWUkxUUE9rZ/Tm39jZ2M7Nzc3Lys7c29ni72tuXVRdX1xcXF9lUFZaU11dVU1HTE9OWV/2e2b83djWz8zM2NvU2+Td29t7eeb75d/f415hcFdQWVxNQD5GSkxOWmhUWPfs4NnRzc/ZzMjKxsnK0eDX3N/W2Nj6Xe327e5faF1PWFZOT1BKRkdaYlBQWmpXU2V3XmbueF9dceJxbOrofGL10t7p7fZnYGft7u7Zz9jY19XV2c/U39nU0dDc3c7Y3dvZ3nFifGFic/f9XVNYU0tPSUhGTWlhWmBYXVhe4dfX19vZ0NLNz9nY3dzP6ObgdfFUTE1SV0tDQD5ARkdKTU1WV1h96+Xv4t3dz8rIy8zNzdLfycC/wM7seFloXVRaW2RfWmRsZ1xZbmJc5+Ts7vdna19l7eDZ5tzU3ufuX1JbTlVTU2di+tfX3d3UzdTY1+HwY2JuXGBsX1hRSUtFR1RTTk1BRUZCSU5QXW3b09rPys3Ly8C8vLm4vcHHysvOxMDK0drMydXi+E5HRkVCPDtCQD9BP0dLTVZTTVBNU1ln3+L5anLaz9bP0crEwMHGzuPrcmFfZ+zc2OBiWlhaZ3Z6c3VvXFlsbXJ6++vd1M7S09HR13VoaWT1+V9aWl976tnX19nr5t7m3N3g3+p98G9eXF5aTEpQXWtdUEtFPkRLT1NXZ/n208/Oyce/wcS/u7y+wcTJz87Mz87c73VdZHpbVFBIQT9BQEBGSk9PTVBmbX3y6fJ97+Lk9fHpbG5n5tji2tHV19HR2dre29rc6dnQ0NfP09rc1tvk4ubvbWJfXmNpW1RVWlZaWW/n5dtvX2RUXl9UWFNbenfi6m7x8nPr8OHa49/n+eTq5drZz91t/+ze1e9iVEpIR0ZJRUZFQUdNVl9g+fRv4dnUycvJwsbEw8XAwsHCysrHzNB8WFBCQT08PTw8QT8+QkNKT1BVam/w2dDJy8bK1M7MycPJysjKxMbRz9319GRbWE9aX11ZU1heX2pt9el4W11WV1dKSERCRkNKUFvu9lVVVmB1X3j2aOfTzMHEwcDHzMvGwcbIz93f+GT4YF9bS0lGSVpPRUNAP0RGUlBQX1Za+/HOzNHS293U1crIzcLHzczNxMva2/d84Nvm+VZOSUNEQkdOSUpHR0lIS1BJTFRSW1dm3+7s9Hbc0M7Kys3GxsrO0c/W6+1cTVRabPNh9G9g4d3Y1/zd/l187t/XdOjgc+nczsXMydLn+vBt7lpVXmRxdHzZ9fPi6N7V0sXL187p83pZX11OTkhFTUtQS0FCPT9HQ0lHQUlHSFlhfflq5NjKv728u7+8vsLCxcTG19XMycfJ0M96aW1saFRTYFJNSUhOTklKR0pJSk5XXWxnamBu7OXY2+rk3dLQ0s3Oy9Dc7uvl2d7r6+7vfWRdW15cXF9paXFeVlBTV2JbXWf75eXsb2pxcGVuY2lxdvLo4NPVzc7Oy83R0dfS09fa7G/9ZGRXVVdSTlpSUE9HS0hDS0lWcHbf3+nY1tHIwL2+wL29vr/IxMzg09Hh8V5wXFlYWVhPT09MQUJEQENHS0xJS01KS01fYFddaHZrZ3trWnve2tjOwr7FysnHxcS9w8zOysXFysjM2urj2uhnZ1VKR0RMTEhNTlBUTlBTWuTb9vlu6O5s5tzi2NjNztrSzd30at/S2dfP1+heYW5bbODwW0pWaFZTU1ZMRkhQSENKUE5MU3D14NTNyMnHv8PBvb2/yMzNztbX097h7NxuXlZVTD88PT8/Q0xJREVMVlx90czO0tLMzc3Iyc3MzM/c9t7b5n5jZH1pcXtZUltjZGV65WxgUFNmaunV53BlV1dVUlROTUZETk9hdGFXVmFu8ejW1M7P0MvNy8jMzMvOzM/QzdzgeVxfWV1wZ1VOTFBSTlpbU0g/Q0ZHV2NlXFBdbXbu6+jpcf/o5NvOztHWy8TEyMfFxcrO0dzb3ONtWFJSTUlHRUQ/PT8/REtQTkpMUltfbOjffXB23tDJwMfNzs7M0d3c5XRjW2NnZvtgWWVn6+V65+5nWU9XbHPvfWl0aPTd7N3i9PJlWGJ62trn2NrZz8/Lys3Pz9PTzs7bfftmWVlUTUhBQD87Ozw+PTw/QEJMV2BaWmx7d/HXyMnIv8HEw8G/xs7Lztvi3c7W69rb6uPc1eBoZ2xfV170fldYX1FQVWVaVFVXUUxLV1taWWReZv7Y1N7p3ODt29PV1M7J0tvZz9bscXtwW1p7d11ZXl5VU2RiWlteeWxbc2pgXmR2amnh2eRrXX3v+eTe5eLc1NLT1dXo/XH08G184Oju5GZaVVVZT0tISE1KTF9eXnTf4NzPxcTNzsvJy8vEw87XzcrLzsrP9VdYXlVNTlZOR0xSTk5NVlRKSVFOTE9VVVBPWFlbYnz2bl9rd2Fv7OTu387Ny8jDw8nFwcXQ2NLX6/re3+fi3txoU1tdTkxSWE5ITllcWl/udvLYy8zX3d7j7OrZzc3Vztjh5ujd4PZ8bGJj8d3V6HJcWFZYXVpcUUZAQUdJVF1mV0xQV2Nz8dz/Xlxr4NnW0M3PzsrFxcPEydX279vU3Nza+1xZWWFv8X58ZFldX2xlZPTn7eDRysnL2/VdXGhqfW5hXV9keeXX1tzg3+Li2d/g/mB129jT1N/vW1ZcWkxJQT84ODs9Rk1UXl5k59vQ0NXOz8vEwr26vb3ByMPAvr7GydlvcFJSX1tbUkpYU1FVTVJOR05WXGhfZGVZa3r23eHadFNcc3H1/339W/nc3dbRycbW0s7NytXa3XpiaH33dmVpVkVESUlJSU9PU01MT1JZYXDc7uXT0s3MzMzN0c/MzM7seuhcUk9UXlRSWml4c+Da72Nt72hVWnT2Ym7u2NPYzszX3trM2fnr3e1p7eTk8Hfk2tbY2dn+VlxlbmdicXRiWVhWVlBMTkxKSENMSEdMUF1fW+vpff7b1uBqZXBdYGh3627oysjLzcbG2NzY3Nvq28/T2s/SzM3WzNH57f94XktIRkFCQURIS05XUU5MUFht49jTztTb1dPT2dfN1uDX2NvU1NjZ9vtiXFtJTlJDPj9GTE1VXVZVW2n/7evb2tx+Zff++d/Z0M7R0uHx4Nzb3uLf2eLh2drZ5ex8fP1leO5fUU1TWVJed2x0b2B+8XjZ3uxqV2ZoWmzl1c7T3dvd4d7a325fVlRfXXD9XGhmXP1t8tfZfGZOSUpETlVRVkpJVk5PavbqamRw+nrj0dDb4tnUzs/Ox8zg3t3PysnExtLg+WRfVlp7YVFLR0lNVGpu9vVubHbu6ePwY1hXXe7Z4drS9v5tetbY0crXd2/v2dnc087haVpcXFVjZFNIQUVISUxSV05ESEtUaXRlXlBNW2fay8rDxc/QztDRys3Q3G5dX3n+49jU42hfb3ft5PF5W3Ld7dXV1c5zWu3g2srM2d5dcfZr3dLP4WlUT01NXnRpYltYW2Lt0dTecU9OTktgXUlFPz1ESFPk6nZ5X1b+beDR3t376uXa08jHycvMz87O0MzX/V5fX+/e0cnZaWlgdODVzNLjeHpxferf0Nx6XVBNTVBUT1NKSk1LUmju5fpeb3Fx2tLU1H3x4N3OycLBytnkbF156nBkUUhMS0pQa3zseVpfTlnp7PBqW2lib9vP09h1WVZPatja3u1h9uDdz8jGyMvpb2Bn3N/f3fH25e3u1tDj71VPTVRwb2dgUE1WWvLOysvR7/7l2sXIz9Td/WlnX+DcfvVXSkxKUk1LS0VCP0NIU2FZVklETl375OXV3+3+4t3PxcjO3ehu8d3Z2tDV0NHPzMfEx8/c7XBu3+DpblpPTFn64t73aVdJRU1hcGJfXVt0/ebq39nO1+Dq4NLc5eHqan7s8Xnr6+pjS0RHVl5eZWJXUlRRWOrm4WxVU1FobVlidnly9Ojx0s/T3WFeY+Le4tTU6G162tPGwsfXa1VSb/7q6mRZXmXt4dfO3G9w/Xbb1OLc51Ze6+3u1tbb7E9LUFhmbmhmXVVfdnHu3vVhVlFPWnloXV5abNrl9ejsYU9JR01WYGxfb2lZYvLv2srK0+pr/uTZ0tTO09jNyc7KyM7mbmBf8vR8aGpmXmj3593O2O5eVUpKVW34fOl0YmFp7NDlcGFXTk9nbnhrb3ffzcPAwMvkYFlVWOvqe2BeUExPVFz1eVZOSkdBTVleUlZdX3N53tDT5m/94ffZztDn8H186u3Py9h+ZFdSUmTm6eDNy8zMzMTAxs/d+/9oZ+PsZHp1bejm2M/tU0lAQ0dHVWNdYnFjeejSyM3d911YVkxRWE5NVE9cXGTnZEdDQkBHTmn7XVtsY/XXzcG+zt7p9nh53tbX18nHysnIxcfb8nt0fW/7fPxoeOfTzcW/w9pbUEtCP0VHSEVJT1tj89jWb1ljaFxWfezuffHczsvDvr/M+llYVU9mYVZOS0xVU1nx7mxbTk1WUFxsbGry28zMz8fI1P5dWVZQWGBZW2BbeNzVw7/J2nRdYlxp49ze2tfPysvCwszfcGteUU1OUlVRWXzZ3dfM2fNuWVFUWV597HRpbuXf0cXM5mxVT0pHSUtMSU1b8fTdzc9yUk9STUtMU11QWu/g0ci/vs36alhQUEpTaFtr18zFvbq7x8nIytfxaVhbVVnx19XLyczdZVNSSENERlFUS1vu69PMyMzWe+1pX11n42BdZtzV0M3P4v5dV1NNTExXWF1s3t3azcvS2v1bTURJS0tSYWHp7uja0NTtXVBbVUxRXmj07NnKwr+9vcDJ5XxsUVh389/5aHrZzcXJ2dpsW1FKT1ppef7q3c3KxsjW5XZfTUNASEVKTkhNbubY0NHL0+1eSEdXSVlwXVvj0tbR1dXm/1ZMSEdIS09OVHHc39XVz9HO6vPy4Nfs1NbTzsvOy8jJzMjbWVRUXl5lYvXn2dfi39jo6m9NTkdFS19sbnHf4PrW0tvYcUhHRUJHUVxq7tvRz8jFxsXF12plUlhaT1Jdd/P58uZrX1tNP0FCTFRSU1ZqeOnf1dLR1OtSX31y7Ovq3NPWysvPzc3aaFBbfGZxZFvjz9PLxcLHy83ecWVdVlJYVm7d7Pzg2vbt6X1mWU1HQEFESVVZat7Y49nS2fVcXFpbVVldVlJSXXFrfN52VE1NTV9iZ3paaG/93dvVydPhbF525uJz5uTi3M/HwL6/yNh9X11k9l189nNve+fe1NXgXFJOSkpEQEVJRU5b6tvW0Nzb7XZjbGptbH55c+3b19rZ6t35ZVdTWFZUXltfdWBjaev5fWJYWVRcX2hmXnLu5+rdycrP4llTTkdIT2d749jR08q/w8XH29/ha2hdW1pibu3g0sPJzcrUfWdZUF5eTU9OVmBk5ubu4X5cbGlWW1lSWVdk53fs8mz0Xlrr2mxeXVBXYW3r6NvlfeLyWlVaTlRjTlFf+tXS2d703tLb39DZ1tT/ZHvdzMvLxcnL0N7o1drt7OT0X1ddZnNsZXdeVVf+bl5aX2zr6fXqcGRZV0tJS15gXWluZH557c/SzNXR3Xx7dGJZa/d4aOjd0M7VbnBSRkdJU09PUUlJT1Jm3M/X1tjv6NrV2M/N087Q2M/DwM7jdVBXa2z64uRtZV1r89PM3+dyTlB09ODZ2ef42t3r3NDZ+G1PQEZHRU1MSElVWFhj0dL68Wtt5N7s0tv1YWBiXHjb1/x7ZV5ZVExTXFlUW15ZY3Pl7/Dp29XMzcfAxcvM0tbNyMTM3ufk7el+7dnpWlxbVVxg7+t8W294bGhn6fJbW2pkcOzk5/pXWV762dvR3l5WU0lPYnXx8WFffWvl4NXfbv7+ZV/w7mRWSkpaYnLo1M/hbmBjXuzY2+JdVmTs5NLMyszNz9Xb0svQ0t3e493r2s3U2+Xe5fLrz9vxaF9ra2boztnd/mJYUlFmaFxcVVlZWF9vbPh9cVtaYm95bWFQUFRcbN7b3eJrWVxw3tbg7mNja2/q0s7V19/ueXro4+nk69vU1dLPz9bX3/vx5d3j8fB4c2Du08vLz83aXlpZW1dQVUxLT1Recu593t58d2pvc2ntdWNjenV64drU3/xdWmbr8n1zW1hhYGnu9NrmbF5ZXWhYV29mbu3m4OVu5fxcWVdVUlpw/v1wZu7i09PUzt3q3ubrfWf4X1H84PXe6OHc8/ztfnxvXlleXGHqb3F96dre6ex7dN/p8O3q6Oh6empldl5XWF5XUlFWW2L73+nn7erd+m9sZ2BRUVVPWl1qbHz+/Nt1WVlRT0xLUFJdZeTc19bbyc3MyMzP2eXh7W9vfvrzfPDT1O9kT0tJRU1VTlFdXGn+fd3X2dnR0s7b2trj2tLTy8zVztnk8GhLSkdITEhJUFJUYGnk2+dsal5ZT0xST1BnZW7t+Nvh3erb0tDvV1pSTlNaXXt+3tzU3ej2/35v5Nzf3+Bw8/f6ffHe3+nt6Pvp+2tta/7b4OLr7vd58f/6bnV86PlpbOrq8djP1epjYV9JS05XYXZdXmdbXFFUT1JaXFdTUE9OT1pdat/P0NXX1ev29eTWzczW7d/S1Njm5O3yX1xz+mRcfG554dTN0/RuZGVjW1xiePzkfXf+bOTZ0czO2m9aSUlPS0hJTltfaObldXVqXn3r2thpW2JgZ2fy5ODqfHhaVVVeWVxtaWJVUF7p3d7g3OPZ1eXb2vPn4N7QysfJzt9wW15cXmn+4PhkZltcc/nv5OJsXlpTU1JQVl5fbXz35u59dm1v6+rybWZwaWB529rT2d/jaV1hZWn53tXS3dzd3N/r7/pqXFxRTEpPVlhaZeLQy8jK1N9mV15pW2fp7XRt8tnTzsnGyt17b/tpXl1jWldr8nVdW1JNUGZ28mtZXlhVVVjx1NbW0t799t7W38/HxsjO1dDN0N3u9nRiVllcV1RSTElg7PHwaFpVUVRPV1lfcuHe6N/OzdDHw8LCx83Y4+F9/d3m33RgV1pdWk9KT1ZYeuZ+9nLk6evW1NXc9GNlbX3s2s/LzM3PzsvIyvFvYVNQS0dGRktMVHTb2NDN3eLd1dru5dzi7evp3tfV09HX1tfa8ldWUEtFREtXVVJUV1VPXOrl3dLT1d3569rT0NbQ1d7a3+R13tLO0dDQ3+Z+dm1gbVxbYlJMTlBSWGne3NvOzs7O3ezx7N7f6Ovx6NfqbPro3ODe6mlo5uJnXVZea3r6YFxYWFdSTk9afGtZYWRqednJx8jO2fDq4ujp5tjU0c7VzcrMz9nf4OPt8V9YXV9kbuvc0c3Te33vZFhXXVdXVFNQUWRv+97d2dTc+O7c2+hkcOt67OluWF5kYXBmbt/d519XT1FTWmVeYlxXVU5Tb+DSzs7Jy9bOzs3Kzdvg73NoXl9PU15ya2X79/ZuYF9q7dPJys/Y6e584NTN0d/5b2ZdYlpVWVpgbWVp/fVYS0lNT1locGl8dVJYbu/k3NHZ9nZlXnDt4Obz+vrv3utleW1qevlwWFFYV1BacubczsvR2d5nXmlz39vb6mBaYl1s69/b3NTg5dHP3u54eWhiblxQTUxFQkRKTFZaWVtVTUxRXX7v3u1pbW/v3dbPy83Hzt/jevxnU1ZWU1ZYUk9MS05baPjp4HhfYVpg8NPMz8/P2ubp2M3N5f1kXV1QTkpITExPWFxieWBfbmfg1tPO1dfhYlZYUVpeX19bbmdYV1ld/nd3+frh5O3d8Hbi5trd5+hsX2Rbber23eFqa2pXVk1b5vbl7GVXUlZXV2dnbPt4+/5lZWh36e3k2N35ZllVTldeWWNmW1BPYmRfZ+xqa+z0dGDv19fJyc3LztPX3edyZ3BiWWZ4YVtWVFdr3N/11t7zbVRPT11dW2z1e312eerj2tTe2s7T3u5wbW37/WXq7GRlWU5NVm3wZVxWSEdFREtOT05WeXd33Nzgz8i/wcG9wcnK2N/e5urm1+Br/fZYXmdlZ2VlZ1ROUU1WXv3k2NHV1tTW2tDQztDX2OxpY15fa2tjbG9iXVhTTExUX19h9XVcXFhPUVVRV2RcUlVcW23VzMvJxcPHy9DU2N3e4ePq6uj4e3v65eLd1thzVllaYvx6897d19LS0tLTzs/P0s7O3P76/nPtcvPW33plUktLTFNTUlpbWFVSU1ZVWFxoannl4+Dj28zIysPAwsbQ4e98bl5aWVBaYl9hYnTa29vP0tPZ8HhqYvvq29DT2dzi7d7U0drU09TU3+3z9Hp6fnZt6vFrVktQW1lo7W56bFpaXVRWXlpQTlRVW1983c3KxcPCwsnO3e9pcHFsamheWVFPWWJkaWRXYGJcXFtZZ3fo2NDHwsPJysjIzszK0Nnj+vNwY3DxXvhSXHVKWl5eZO/49+Te/mNZTk1TU1leWGFYYO7l0cbDw8jMzNXeb1RWUk5SWGFkXWf/99zb3OBs93ho+WRj83b++fv16OTe9+vP1M/O0dDpbWdf+u/1/2RXUkxNU05i/GdtY2h0XlpSTFNUU1363dnf2M7KxMbGxsnS5m9eV1VXVVFSU1RZYHh47+v49vZ6XlljZGR54dzZ1NHP2t3b3tTP1tbd6XJhWlRTU1lSUVFXVlJb//T3dW7veWJVT05QT1RTU1dYb/Tr39HIwsG9v8bU8PDk6+77XGhgWFdYXXZ6+/tj725fWFBbZF/u39nO09PN09HLz83Y2tTuXVBUXFtbW1JRTklLUU1Sa/R+X2pqV01ISlFPVVVSZWFed//jz8rIyszI0fJeV1hleXdma35meePl4M7N1+Hg6G1YVF5mfH7/89/o7+fj/OXJxMnIyNXqbHH+49vk/f9wVVBSVFFeZVlQVlJIREA/PkdKTE9YXl9s+N/TxcHCxMfW3OvyeX3nbV5eb19kX19c/d7i5+38X15PTVzm2tHU19fb2dXU0MfMz8/N3fpqUk9RWVFRUVNRUlVZavLzfGllXE9PTEtKTUtNT1RfVlNeYn3Wz83LzdXe6vjs3d3j3uj1fG/26vP1ZVxdW1pPTEdHSUxXY+bt4d3Y2NLJw8DExcvNz9vh6O/ufW1qXmNdUExLU1pWU1BSV0tAP0BGTk9kZFz+9eXUysXFxsLByNLg3vBjZXJhXVthW1JQW2ZqbWRgX2RTUFRSVWTz5ev74Oz24dTU2NfZ1tLW5PXw6+nZ1t5rbn5dWVxjWVZjZFxUT0hAPj9FTlhWUGJxXGfZysrEwsXIzMzR3u7g19Xb8W7o9HltbF1XX1pTS05MSElQZeLf4N3cz9HMycrMyMbKztHO2n5nX1thXFpPTktLTlRQS1haYF1bVlJRT1NffnVwe/rv2c7N0cnFyMfIytHZ19Pa1NTf3un16uLwZVd272r9+V9bVFdgad7i+Orr3tzd1NXVzM3RztDWz9zgeGd1W09PUE5UT0xNTE9KSkxGQENKTU5TYWBr+9fLyMPAwr+/xMHEy83O1dPg7XxcY2NaWFRVWVdbW2p5cGd67+Ti8N7Y2dDMzc3Oy8nMzMrIys3O1d/de1paTkxQUFdTUFdYXV9YUE9NSUZKTklQUUlSZfz6/NnL0c3GxsTEwsLJxcjU1dzw3+PucFRZUUhNTk1PT05OWPVhV/L34tHMxMTAu76+u77BwszS3t3nTUdHQkNIR0ZDRUpHTl1YVlhTVE5SUU5aXWTv2tXT1c3Mz87S0c3N1dbX2fBgXlpTXGhmamhrY2NydGBjXl5haPlsam/27dzY1c/OzMfCwL6+v8LFytThbVZTVlRZUUpHRkRAP0RJR0ZFR0dMTUpOX33oz8XBvry+wsHAwsnKzNTc3W5WT1FQS0hGREVLT1RefWts9/hza+z7++ra0dDLy87OzM7NzMnGx8rXb2ZUR0ZGSE1WVlheX11XVldRT0xNS0dMTEhKVmFq/vrfz8zKxL++vr6/wcXGzeBvde9rXU1GRURAQEBJS0tPTk9ZWVJWYOnUy8TCvrm6u7u9vcHDxc7cfk9FPz4/Pj8/Oz5BQEpUW2BfYlxdZmdqamzp2tXLzdTP3OTh29POysrR0ttuXFVaZmv37GVv8nx0dXl97P1ral5WUktHS1JZXWVj4tfUzMa/vL2/w8TK1edmXF5bUEpFPjw5Njc4Ojs8Oz5CQkA/Sljn0szAvL26vL++vr6/vcDEyutcWU5GRUA8Pz4+RERKVmVx7/jr3tvc4tDNzMfFw8PJytDPy8vJy9j4bVRFQD0+Q0hLS1RTUVhWU1FTV19mZmNdT0hHR0pQTlBaXnT86t/Ox8PBwL+9vcHFycvW3PliVk1FQD9CSUpMS01MTkZIUGzj18nFvry8vL6+vb2+v8TMz+taS0ZFPz49PDo7Ozs7PD5BRklNX/bu5d7PzczIy8zLztPU29vSzc/haF5WTkxLUFJUWlNYYGZjWlx42tnZ2dvX5HBdXGFf+uTk19TQzsfFw8LHxsXBwsjP3t/xXFBKREA+Ozo5Oj1AQ0RHSEhLU3vh1M3Jw8PCxsjJy8fExMXJ0Nbcb1xPS0xKR0ZGQEFERktTX1393dfMxMXJyMPDxMbHxsfKysrOy9Df62pYTkxKSkxUT01VXFRQSUZIS1ZdbWllXFhUU1Zba21+3uXr4tzPy8jKxsC/wL/AxtPp6l5RS0lGP0BDRUdOUlNfXlZj/vHczcjFwb69vr29vr6/vsLJ0NxsXVJKQ0VDPT49Ozc2OTs9Q0lWdt/Nxr6/v8DAwMLDw8vRz9fl9fldWFhYWFlZXl9p/3Vwdv509Nzb5NbNztLY3vllXltk8vLj3Nzj4M/M0NjWz9DNycrO3eJwWFlQSkdDPj9APz1AREJBQ0xUXXbf29rSysrJyMjEwMDAwcPFy8zV6V1TVk1JRkdFPz9BQUZITWTr1cjBwsK/vr/Cwr+9wMHExcjOz9nhalVSUVBRVlNKTVJOTUlISEdJTk9aWFhoa2VfYmVu7Ovt5e/p39/29/N85tbUzMvR2tjS5/fo9vbq+m5ka/34eGdecfp67N7U09zPy8fEwsC+vbq6u77DxszfaFxPSUNAPDs5Nzg3Njg7PUJJVnvo29HLyMvLysrKzM3R1dne6fBaT05PU1BdXFdaXXNsWlpo8+3i1M/MzMnL1PDo4+3u39Xa3dnSzM3PycfIzMvIys/V0NTzXlxbWE1NSkZAPT89Ozo9QkRFTl5ude3Wzc7PysXGv7u9wszKzONsVlhYSURCQkM+QkhJSEpZYXDbzMrNy8bDx8jHw8HGycbDxsnL1OtwZ29dW1xXUUpNTkxKR0tQTEtOWVdPVmNdWldi7W9oYV9dWWV3a2dnd/9hZvfd3ejb3t3h++jl835yalldaV5TTU9WVU9VV2ZdX/X0493QxMC+u7q7vr68wMjN1uFxTklFQD09Pjw5OTo8QEBHTU5RbNnS0tLOzM3OzsvM0M3S9GBXVllVUFFNSEVMVVBSXWp+e+rUztDQzM7W29LNyc7c5HRbWvzk7vTn3+Hn3NDQ1tja4vd2anBvWldSTkdITEM+Pj09P0BHUFNPTlFWX/HYycXGxMTLzsrK2+3y/3ZkWFtYT0pJTEtOUFhkWlxwcn7j08zP0NDQz9PRysvOzMrP2dHU2tjc3+RnWFtaU0tNT09OTlVdVEpHSUZES05YYGNpYl5eaO7levT06XRx39zs/npsYGPw8+Pj6On9cnbp5WdYWllWWvDW0+Hn6u/v187IwsO+u72+v77F1dzm729nbXhdSUE9Pj9EQ0hJRENGSUpWZ19cZW9989vU0tTa4/lmZGFaWExMTEtMUGBdUU9XZnjj0MfCytLY4uPd3NHP1Nna2Nvf4XpqbfXj3dTOy8bJzs3UzcfIys7Q0+Dv7+5vVEQ+PTk4Ojw/Q0JFR0pWZuLTzsfEwsHAwMfV9lpVUFRhYl9ZTUdFRkxSWlpcXlpn5M7Kz87Lx8TFvry7vsPEy9HT0tLT6/xmXFxebGdaU0tMVl1559jc5mdZXF5YV1xZVlVYWPzyamJWUVdYZ/fqdFtbV1Vabt7S2dfR09XTzMzX9VxWV1RRWGhhX1pYX21959PQ09DJxb+9vL7Dy83Pz87Mzdne+GBZXmJjXE9KS0dESEpGREhJT1hp383NzczOzc3P0tPX9l9cT05RUExOTktNWHrf19bU2OHb1NDP0s/U2dvj1cvO3dvh7fPs49HK0dne5ObZ0M7M0d7Z3eja1+poXExISEdFSEVCQD4/RE5cbu/r49HSz8fJ3eHsaGRcXnfwYFpcX1xcbffl+Vtifnnl3eJ+7Ofh2tXUyMTLzs/MysnLy8vP29nf3dHU5GZqbHJ4/eDO0Nzn5W9dYFlNSERCSERCSU1LSU1XZvv25dTa4ezweuXW1NjZ5fbh7ejd+2VeWFlYW2F3cWFodG1q5NXQ0dDNycS/vLq8w8jLztTZ19DY/2ZqYVxjbWtdU05ST09PS0VAQENITFJcb21lcXp289rV6XNhXlxSWmJWSUZLUlhcY/De5+bUz9DPysvS2Ofd3/Hs7mZYWV9y5d7Z0dDa39bRzsrDw8bFxsPFyMrO4XFoa19XUkxNST07Pj8+QERFRUtU7N/ez8vP19jU3O79+O5jT05TTkxLTEtLS1NmYmVsa15s8Oncz8vGx8zNysfJxsTGy87Py9Dg4uH9XV5tc3RtcOn6b2zl3ujp+2lTS0tNSURCRD88PkFHT1hgbmhldPdoeHhrX11k5+J0X2ZfTUxRWVdZWWFlV1ZobGBpbm9pau7QysvMx8bNzsrIysrJyMzV3tjg8P5xYVtl++r4Zl1dTUdIUVdPVWJiV09QWVdba3ljYGb0/V9YWVxRSUxWUlJSW19YY3v07uvf321w9Nzb6OTsalxZYnFu5tDLzszIw8fMycjL0tDKx8vT2t73X1ptal9dWlZLR0hISUhHSkZBRk1cZW3k3ODf2tHX3NzibFtdY1lMSEhDPT1DSkxPV1taWVzt3dbLyMXIysbGyMrLysvX29zh3/F6bGl5e+jd3dzZ3N7Xz8vL0NXV62VkZ2BbV1FJRD8+Q0JDSlFbXnnd3OXu6uP0e+zn7/xqX1dTT01QUFBXWFBQU1ZVXnPt4uni3NrWzcbAvr7AwcDCwL/EyMrJy9Tc7m5eTkpOT1ZbXFtVUk1QVFtufGdgXVxhW1tcXV5aW1tVUVRRSUZJTU5OTk9PTE5Ya3rt4ebocV946d3Y0s3Q0tjg3+Hn4ODf1czGyM3Q1NDP1M3LysrLz9PT0tTZ2NrZ6HBtZF1XU1BOTUlHR0VGTF1mbunh5eLg5+x5bGRmX11XTUhEPz9AQ0dLUFVbV1hh8d3SzszJxMLEw8PFx8rOz9DSzsvO19na19fW0tbk9Pzq29jSz9ne7/fwcGxnYF9aUlJQTU5RTkpMVGBx8/FxXVlWWF1iaXZzW1ZWVVNRTk9MSUlKTlZWWV5eZ/va1c/KxsLBv728vr6/wsbKzM3Q1NXW2+x+e3l9/+vX3+Tc2NDO19/k39ztbmhib/ZxZllWW19hYF1bWVZSTk5SV1RNSkpKTVFbYl5UUFRcW1loevfs5t3Y0M7R193k28/JxcPBwsPGx8bBvb7AxsrJyMjN1eDofWJfa/b5ZVRTUk9NT1NaWlleanrk2uD0Z11UTUpKSktNTExIRkZEQ0JDRUhMUFhgZ2lyduXbz8jBv7++vr6/wMDAwsPDw8fMzMzMztXc3uDY0c/Ly8rNzsjIyc3V4nBbWlhST0lFQDw8PD5CREdKS0hDR0pQUVNUVllaY2BkXVFOSUlOWWh3/+Pf4NLNyMbHx8zMx8G+vby9wMTHyMfHys7Q09fZ1trzcGdfXlxeY2RgV01LR0E/QklISkxNTU1PT1BPTk5MTU1MTE1RVFlga3jt7Pjq4t7k3dDPz8/R09HP0NHOy8vKzNDW1tDO0M7O0dzo6etzYFZSVlZZWlxXV1BMTUxPV1tcWVVPTVFZWlRSU1FVUldkYGBpa2tqZXD+dnd573b+3tzf8G5odfHk19HT0c7U0NLV0NDP0dXW2dHR2eDrbWhyamleVEtLTE5RWF9iX1xeaGFdb/Lm8mpra2BaXGVhW2VmZ29wePXx8Oni3tra49/f4NzZ2djZ5PX4/WZWUk9OUlNPUlJOUlllbmpq8/Nx8uHq/Wz99Xnx8OHj9mdnX11l9+fk3+Xa393Rz9DPztHb5uDg4uLd4exub+rd43hscnBUUVFNSkVFRkVLUFtnWlNbZV1cbOv3eHF4cF5gXVtiXFtbWGFn+uvu7t3X183JyMvJyMfLzcrLzM7U1N3j29nP1+Dh7mxYXGheVllWVExHR0ZFQEJCQERISk5MSUtKSkxVXF1eXF1VUFVdYWlsa2ho7+HXz9HQzMjKycTGx8fJy8/Sz9LW2ur+Znno187P1tjY2NnW1OLzZ2JaT01JRUE/Pj09P0BFQ0BCREJDRklOTk1QWVpeam9+8ujc3dfMyMG/vr7AwsDAwsTIy8vMz83MztTT0tfa1c7Nz9jd6nljZmZfXVNRTklJSktMR0lJRENESUtJSElLR0RHS0xJRklJR01ZaG1m9Oju59LHxcXDwMDDxMHAxMnJycvMzM3M0dnZ4fD+7eLq6e39/mdt6PRmW11eXnLu6eJwXmRhWlZfXVNOS01PTE9cVEpOW1RW9uPb1uDc2dna2NPV1tjW0NLUz87U2dra4NbNz87P2d3a4ezo6XRoZGlrYmhnX1RSUVFWWl9eX1xTVVJQVmBycmv46+HY083Q1dTS0dLNysvQ2ODf+mRsc2VaXHtuX2736Hhpb2tvbd/V3Ox4e/1lY29valtgdmBf/vl1XVZYU1BacHFmXlxtcF5p8OXf3tjPzsnCvr7Bw8PGxsPCxcvR1tfg8OPe5Xh75/Fz+ezyXlFPS0dHSktKSERGR0JCR0dISE1aWV165eH1de7xdu3c2djk/enl7eTd3dvYzMrMycfIycrMzdLQzcrLzs7NzM7X2dzx/Xvq8WZweXVpXVtUS0tOUE1MTk9OSUhKSkdHSk9LTFNaXVlXWFZPWn3Y09bQztDTzMjGycbBwsbEvr7Dx8XCyM7My8nNz9DZ5+ne3efx7vZrW11eX1NOTUxGQ0RHSERERUdDREVGQ0JESEpJTlVUVlpoeWr83dHRzsfGzMzKycbHyMbGyczLyc7S0M7Lzc7Oz9fZ1N7v6Ox3Zl9fWltZXGVhXV5jdW1cXV1YUlJQR0VKSElLS0tLTExTXVhfdffq8fnh3N/a0M3Y2tLW1tPS0M/P0czLzMvMy8rMz9DY4/D+XU5VVVJQT05NTUxNWl1VVlFQUVNUV1VRVWRZVGZtdv7r49ra6NzQ2d/d3t7j4ejl7Wlu+GVz6fPt6+7m3+nu3uD2cmttcmpqYFxbWFdYWWf2e3vv6urgemdwaltaXVhcXlpZWFNVW1dSWvXv59nVzczNz8zMzcvMzs7N09nk4+Lb5OPW2uvp5+X8b2ddWk5LTExHR0ZERkNBRUhJSk5QVVpbX1dVVFpdUk5RTU5ZV1lmcPvd09PLw8PDwr+/wsLExcfNzs/Z29bX3Obr3t7h6+Dm9ut9ZlNLSUhHRkFDQj9CRUlMT01PU1hcbW1gXmZxZFdeWVBMSk9RV1lm997c2M7Oz8vGx8jFwsDFx8bHyc/T0tXQzs/P0NbS09jd3Nl9Y2NZUUtJR0NBQEBBQUREREVHRkdHQj9ER0FGSE1NTFFdamNia+7c2tPJyMvKxsbLzMTEyMjHx83Pzc/V1tfW29/a3Nng6PlrZVxfYV5gXVhbW1/06fHsfmdeZG5scGFaVE5IQ0NFRUVFSEhHTVNWWl5hbXzf1c/Nz8zO0M3MycfJys/Ozs/KyMrOz8/U2tfZ3+x9bl9fWVNWV1VWV11dXmtcU05QVE1MTU5MTUtGR0dHTFVUWGv239nRzs7R087O19zY197g4uPu7fXq3N/o6Plpbnvo725fZGNZWF94bG5oYGJ589/Tz9PW2NXR1NLfaWd6aFpfaWhubl9RW2Ft4tXV19LS2NrO0dne3trj6+7y5eb+al5bXnz7dXBmY2VncvldWVNRX1xRWlxZW1heY1pcaV9lXl5lYWRkWlJOTlhfZGt57+fg0szHw8LCxMPDwMDDxMTJz9TW09rk7+57eXz+cmdcW1dOTEtRTUhKTEhDQkVIS09aZHL7evLrevrtdW9neu1oZHVtY15pbXPs59fNzczKyMXGwsDExcTBw8jJyMzU3tzd3t3a0tHW2tvc3/DvZ1lXTlJQSkxMR0FBRENGQkdMTkhCRkVERk1LSk1OV11XWmB1fuDX18/NyMfDwr6/v7++vsLGysnIy8zO0+h44+Pl5uDj73tzdWleX2VdVlNWXnBlZWxkX2xwb3Z273ReWllaV09ST0xIR0tQWFtv7Ofq2dXR0c7NzsrGxMTGycnT09fX2eDb3tnW293a3+jo3d3p4+Df3/RzeGxraXRmYl1faGNWVmVcU09OTk9OVVVST09RT1FeaHL559jU09jPzM7Ozc7Q0s3KysvMzdj3YGZtfm97bV5bTlJTW15aWltVWV394+Dl9nFud+nc4dbVzs3S1NPW2d/sd29xa/zs5+7t8efj3t3Z2N7T1djR2d/lfWdeZXP8e2dfXGBlbXJpXFdNTUxLTlRbV09LTExUXGNrdVxTT1lhaGVt/Gtzb/7m3Nzq7/v67ebh29LMz9PSz8vKxsDCxMXN0tvT2OTs++73X1ROTUtISkdHQj09PDo8PkFER09QT09NVl5oa2f39nzn69vS1Nje6enz4t/Uztrj7ODd2tTOy8jLycnIwMDBxMvQ293Y1MrLz9bqbVlZXmFZT0tJQT0+Pj48PD0+P0BBRkVBQD08PD9BREdKVFhPUFpla2vo2tXSz8jHzMzJxcLAvLq7vL69vsPFw8nQ08/Vzs3S0N5xX2FlYGZhT0xHQkFAQERFRD9BRElNS0xLS0hGS01PXGh3YlhWWF1m5tbV3dnR1s3LzMrNysvKzczFwcXIzMzO1s7LztfZzs7S0tPV3OP5aldNT1NPSkpIR0NDSEZEQ0ZISElJTkxFS0xLSU5t82deZXZydtvX5m1xdu3f1MnHysvHxsnMyMXDzdjR093c3N39Y2dw7/3v2Nr3ZGJaS0hMTk1HSVJOUlNWV05OWG5pX+XY4Xdxfevy3dPU19/Tzc/Tzs7a7vTr39jWzMnM1tva8Wpu6OFuYnNsXGBlalxceXbu7ODS1e9wZ1tOR0VHRkJDR0VCQkRCPkBESUpLXvj2/Ofa1dXOyMfHyMXBwMLBwcXL0NbX2tfPztrp8mxXTU5QTUpNT01NVVpWU1ZaXV9l7NvmZV9ZTEZCQENCQkdUV1hsc2Nj+uLY19fJwMnMxMHFxL++vr/Avry9vby/ydDb3+l+e/fycGFhV09MS1FSTUtWa1lcY1pTUl1pWk5QWlNLS0tCPDg4OTg5Oz5CTE9ZXFxl5tXa18rExsjCwsTBv7m5ubm5t7m5t7rAxs7a8l1eaFxPUFBOTUpPVlZVUlFPT1ZlWFFUXfFgVlNZWVhXUE5JRkZFRklGSUpTeXloZ3fd09LLyMfEvr++v8C+vLq5uLi5uru8wMvX4PxYUE9NTUpNVlRPUVpjYXvh621q5+dfTklKSEZFRENCQENFQkFGSEhJTldVVF7n29/n397d18zKxcHDv7/AwMDDxL+9v8XMzcjM3vxmVE9OT05RUE5QU01OU1BVYHVuW1BZXlxTUExKTl1qeOfs7ejm6d7n9/Lf19rf4dfPz9HO09bWy8fFwsLFxczNytHazsrP09na1tb2ZVpQTk5MS05WWldaUE5NTElOTEpQSkVHSkE+REdHUFhhc+re1NDTzMzPz9LV2OLZzsvJysvJycbIwr/FwsPIz9bc49rg/W5lYGdr+3NaVk9GQ0BCR0tOTVJOTE5STk5TVFNPUlpjVlZ592d87drPyMG+vsHCw8XKzNPSzszGwcPGw8PHx8nJztfa3eN6amx4aWFfW2Bgb3VmWk9NSUE+P0A/QkZHREJFQENJSEI+PkBETFdfduje2M7KxcPExcPHy8vMy87LycjHxsO/vsPAvsXL4uvu/n766nvt9XV+evprWE5KS0lCRUhFRUZKTUpJT1FKVWNtVUhLSklJVGPo2tbOy83M0NHO0tLQzczLxsbCwcDAwL/Gwby9xs/Q72hbXmry6evj4N3mb2ZnV0xFQkBBQj8+Pz49Pz89P0lPSEBAQT9AREhMTV3u39XR0NPY3tzh5dzPy8rJxMPAv8DEv7q7w8/O1+ZpX15bXF9u7unmc3P7b1hRTUxMR0hNTU5XWE5KVWrxUURLQ0E9Qk1RT1p34tra29DP0dTQ0NPVz8zPzMXAv8HDvLy9x+XpaFdQUlddV1VZY2lyc2j8fGFWV11YUE9LRkNISUpBQU1KRz87Ozs7O0FKSk5efODRztDT1tTb2t/Y0tvXzszJxcbFx8PBw8DL3eN0WlBVWFVZV19qXmBr83BaUE9MSEdITU9PW1xSSUpaWlhPSEI/QENHTFFdbH7e1MvJx8PCytXTzMvKyMTGxsbCxMW+wMLJ2d3waW1gZl5UTU9ZZ2hlZ1tNSEtKSUdDQ0NBQ0NHSEhLSkQ/PT09PD5AQD9ETlZu99fR0cnHyczJxsHDysfExMLCwMfFycjD0c/S2uF49fddW1xidWVcXGdgW1VXTkhIS01NTE5UV01QVVBOS01MSEJFTExOUFdZW2va08rCwL6/wL6/vry7vL2/wsHDwsPBxsrO0Njr3Nnf4fx38nd4ff91XlJLSkdIS0hGQD4+Pj5BQ0JGQ0ZGRUVESEpKSUtVV2fr3t7WycnIxsTFv72/wMTJyMPIycjOzszIw8LEx8fJ0NfU19jU2N3d53Bva15YTkxLTEtNUExNTVBOTkxKTFBNSEtJR0xPU1xf/N7PycG9v8C/v769vr29vMHDxMnJxsTIy83Q1NXUzMnP2Nja2dvY09bgZltYTk5TUE1HRUNBRkdMUU9NSkhEQ0FDRj89QUdKVXDw59rSzMbAv727vb/AwMTGyMjN19TLzNDOzMzV3OTt3tjUzs3V3dnZ39zrdmVQTU9MT1heXlROSE1TW2FfXFROTUxHSE5RVlZo5djIwb28vsHBv76+vr7CxcnO3tzR19ff9e/i2tPS2N3j+Xn46Onr9mlhW1JOUU5LRkA9PkJER0RERkVGSExQWFhPUlRWW2X93tva3NbLx8C+vLy+wsfM0NXV2eXs6OXe1c/N0dDb2dPV0NLV2uppXVteWVVTTlNTT09OUVBMRz9AREdMTVFQTU5QUVdZXmNt7NnOyMTAwcPGycfAvb2+v8PN1uXt4Ojs6PTe1M7JycjM2nBcW2v8+fJsVUtIRkZHQ0JFREJDSkdFQz88OTg6QUZKVFpOSUpRV19l+9nUy8W/vr6+xtPh9OXVz87U2t7n8Onc1tLNzMvHxsjN1ONyUklMU1tcb3ZlVExMS0pISElGRExPT0xHRUA7Ojw+RE1PWVtaX+/SysjEw768uLe5vL/I2HBke/Xd19TQztTTz8rMz9La39/R0N1wXU5BPDw/Q0hLTk9NQkBBPz48PD4+PkNGREI/PDg3O0BHTVVs3NLYzsfHx8jIx8rLyc7X5HVbUlRr6c/KxL28vcDCyc/c7nNsY27uZFlTTkhBQ0xUZF9db2FZVE5MR0VDREVLWVxOS0pFREVNWv7a18vDw8HAwsTKztXUzszIydDX3+f9fenYy8fHxMXMzNntY09IQj4/QklLRkdEQz49Q0pNTVRaVExLS0ZAQkNCSFFh/WleXllaVGDv3tPOycfJy87T3ejq8+3lz8jHy87Ry8zY0MnFw8TIzdt8Z1ZLREBBQEJMV1NPTk9WUVBdZVtXW1taVFVbU01MUV1r3s3JyMvPztHY183M0MzLysjMzMzQz83Ky83DwMHEy8zL0t7i1Nvd3vtzaVdORj48Ojw7PUNFSEJDRkdISEpOSUxPT1ZVWFtYWFpt6N3Mx8PDx8rP2+51eWlg8+PY0MzJyc3Lx8LBwb6+vsHFytPd63z0ffft7O/48XBXT01JSUZGSk9TT01IRUdKTE9YWV1v9+zf4vn04dfPyMG9vcHGyM3Rz9PW2NjYzczNyMXExsTDw8HBwsPM1trzX1hOSUZIR0lNTlJYVU9LR0RERUNFRkFESEdJTVFXX3Ht2dfS0NDR09PU19vX09LW4NTW3dXPzsvJysfHxcPBwcTHx8nLzMzNz93n6P9nXGNfWVBXXWdtXVpcWlRST1RSVU5OTE1VV1hgfuPU0snIycjLy8zQ0NXe3t3QztTa2dPX1c3Iw8LCv8DDwsXGzdHY4uXt7O9oWE9OS0lKSklKS1BZTUpKSklISEdJS0xSV1ZUVmJ08eHi2tXZz83V2Nvj8nT3c23z3NXT1tjT0MzHxcXDw8PBxMnM0tt6ZW1sY2509u1yZF5YV1tTU15oZmZbVVRSTk5XWFVaXWb37eDd3tza19nd3NfT0NLV09jc6PXs4d/c1djX0M3O0NLP093a2dvp+/lvWU5LSUdDRUtLTE5PTENAQERERklKS0pNUE1NSklLTE9f7eXq49rnbmpla/z63Njb3dnW3eHn5eXl3M3Lzs/O0OJ5bnr2dn3n5f14fXNlV1FQTU1WYF9WUlVTS0hKT1JPTlROTVNWUk1MVFlaY9zW393c2d337N7f3t/d4end3djY2dTS09rT0dbY4uXudV1eXl1cUlRSUVFRTk5OTklGQ0VJRUZIRkNCREpHTE1PT0tLS05QVFtdWFdXZnJy9Pl2a2Vnef/i2tHR1tDLycnMys7c5Pfx/PXp5eXp6vv23Nne+Wtu+3BTTVdkXlVMT1lfXVZNS0xNSklMWHVmW13o1d7q397a1t/h6+bf5/ljY3hx697PyMnO0szLztDX7uHg2eXu4Ov0aWNgW1ZcXmFtWlFNTEhGS0pJS0pMSklMTEtNS0xLT2d9+XFoaXJqWFppbmZeaW50fvjj5NvX2dnRycbIysrLy9TW0M7NzczO09TU0tnr7PxqYG/w6+z0bmRsXV9bWmFdWFZdZWh1ZWN8cH7i2tXY2OHu4eH0cm/27/Bvdd/b1c7Oz8/NzMnFxsrK0tfU3d/s8OJ7c2liYFhbXVtbV1dcYmtaXV9VVE5NUU1LT1FRUVRcXFpeX2Bea3bx53rr8WttcnP3dG/s6ePk3dfXzszMyszLyMjHxcLEyMrMzs7R1tTc7O7v6eji3Nvj4NfX3ODtcWxeWVlieGhqbmFlc/bl39na3d3h4uL8e3RqZllXXWjn3djS19XW1NTT09fU2dXO19bQ1d30++z9b25uZml7cW788WpdXFxaV1tSUU5KS0lHSEdKTk9PUFlbbvLw9W5nYVddX1xcXmhvbPTZ1c3IxMTDvb28uru7u7y8vb2/w8XI0dzseXrt5N/e3tjZ29jc6/Bxa2tcWlVVV09KR0ZGREdKTE9OV1tUVVRRTlFVWmX03t3Z19XS0M7KycvPzs3KyMbDyc7P0NTY1dXSz9PS097o9m1kW1NOSk9RUFFOSkdFQ0FARUhNS01QT1NYXFVQTU5VXFZcXllbafb37dzQysTCv76+vLm5ury8vL29v8HHz9ze6fb88Pbo6O7d29/j33pqXVxWT01IRkM+Ozs8Ozs+P0RDRUtJSExLS0xMV2d749fX19vXz9DU2dXU1NHOzc7Mys/R19jU0M7Nys3NztPV3ePkbl9YUE5OTU1KQz8+Pj4+QEVMTlBSUVNST1RST09RUU9OTlBUUlBVXmRu4M7IycfDvr/BvsHFxsnM0eLm7mtUVltSTlZgaGBha3VuaXBrXllaV09KSEpCPDo7PTw+R01WUlBPT1NZXmNtcHnw5N3Z2d/s8Ore2tbV1NPc6e3p7Ory+fjp2tTY2c/T4W/66Oh2bH7p/WtgVVRVVE5ISEtOTktOWVtpbm559OPg7v1uaWpeWFdVUVFWVk9TWV5l99jT19DOzszO0eDp+VpRTUxHQkRESEtLUFhaXXje2dXQzdDX4fdkVU1JREJAR0tGRUpRWV5mZ21x3c3HxcrMz9fY2N3y9e57a/Le5PLh6H7u6ubZ0dDO0s7R0tXe3ujm6Obb2+Xj4PxzbG5vYGJhVU9TT1RTWWhja33i2d7w7O19cmpoYFdaWFlMS05KT1NdaWV54NjY1NHV29zj5+xwXl5ZUk9SU1daWFdXYOjY0MrMz87O0dLa7HxmZVtQTlBRVl1cW1tXXuHT1NHNyMbIx8jN1dvc4O3o7Pvu6+bn6OPf1tDLxcC/v7/AxMnIy9HW19/n721wYF1gY2ZrZV1la2hpY2BbV19eYmhqaV1aUlNYU0tLTk9QUU9PVFFUWFhZbP/t19HOys3PzdPc3dTb7vhvXVNSTU1RV2fm19XMxMLBv8DCyM7R2t/0bl1RTU5TU1ZZXGRfeNvWzcrIxsPDx8TGx8rO0djf4Ob6+vDw/+jh2tPMzMrKycnGxMfO1t/q/WtyYFdQSUpPUVBMTExJS05KS0xKSUpNTlBXWVhgXFpgXV9eXnVp+Pxp7+3r6fV5fOvd0szO0dDX09LU0NXa4Oj6cV9YT0tMTE5QWGBm7+LSy87OzM3Mzc3W8nVfWFFRVFdYYPDo39rWy8fHwr6/w8TFxcPHy9bsfWpmXGlsZ21gcuXj5dvT09DQ09ns8nBbVk5IQj8+PTw8PkJFR0pNS0hKTllgY3puXl1tdGlzdH5vXl5sdPng6uje4dfU2M/Nzs3Ny8vHys3M0NTS1t/o9HBeWVNNS09NSEdNU1z84t3a0c/PyMbFw8nM09zpdF5gXFlXVVheZ25759nSy8fCwcC/wcDEy9LecFxNSEtJSEVEREVDQ0pOYXpz7Ozw8W5nXk9LSEREQ0RDRkhHSElJS09RV1plbmrz4e319+bd3dze7/twZf3b19na3uPo4eLe0szR0dPR1+Lj4NvX2d7g7vtwavj0a2BdXWZucGRofPje2dfV2djP0NLP2el+e2BZa3VdZX1u8urr6ujn7+3j2dzd6fH7XldSSUZHQ0FCQj8+PDxAR0lOZefe1s/X2tnj/3V4bVVJSkdKTUlLS0pLTl9w4uPr2NvUzt/a1+Lk6uTkdG9eXl1dYHl0/e/g2NTV2tbUz8jKzMnP1NbY09fe6Ozi5/ltaVpSTk1NUU5NVV/u2djW2cvH0MzI0NzsZl1WTUlHQ0JAQkdKSUxNUGZ2Xmb18+Ld5vdrW1ZWU0xNTEdFRkVKTU1PUlRw2dPPzs7NzdDW3O16bHFrXlVTTUhOVlVZY3Jua/fg5ezm4drV2Nze5fDu3ubv8fT849HNycrKycvGwcDAwMfNzM3X63ZnX11daWpl/Pv86e1zZ15aWF9ldG9eV1Ze/WFWTktLSkpJR0RAPj9ER0ZKUmPq29HNy8nN0MnK1tvuamhaUk9LTExKT19md/Dl183Kx8PCw8fGw8fO3PZkVkxJSElHSEtWXmVydujXzszHw8HEycfGys7Y2dPU2+Db4+7s9/nd19bb18/R0svAu7q+xMLBxc7Yb11lXU5EPj0+QENDQD0/R09XVFVZX2Z4altaW19cV1JPUlVTVU5NUVdcW2f42dHOy8zLyMjHx8nP2ePj+WJaUlJXU1djcndt8t7W0dXTzcrIys7T4un7a2ljampdbnBy8N/W1c/Mx8K/wsHByMzT2+d9cF9VWV9iZGrw4tfQzcnGxsjGyMrM0dje9mlPSktJQD49Ozw8Ojk8P0FFSUdQX2h849fb3+Lo7m7+ZFtfUEtOTk9RVF9lafHb18zKycTCw8bCxMrN1Nfg7XVVU1dPTkxLUF1iX3zj0dDNxcTDwcDCxcjIy9TY5nBsYV5sY19kdGxo8+TT0c7MzM/LyMjJztTc7HdpXFdUT0xJSkxMTE9TW2FgbvZrXnF8c11VV01OT0pGREpLSU1RVVdXW11jXWBx/Xbz09Pk4N/m8+Phfn52bmFcaPfl5+jd1szPy8nMzM3N1N3h6OrvfXBra/76fe7q6dzf2czNzcnIzM7Lzc7O0Nbb4O52al9bWlteadrU09TR0tXNx8vQ0+ZsYVxSSkRCPjw8Ojo+Pz9CQ0BBRExVX+DX2NLPz9DR1dvh9GdgUk5LSUlISE9UV1xfcPTo2Nvg3eDk6vDc1N3k5PV7ZWZtWVdUUFdrX2Xu4NrOycjAvL3AwMHHys3R8XtuXFxkbV5YWV9aZfPs5dbV087Ny8nHxsfKzt31eGpfVk9HRURFTVFQUlROTk5QVlVRTERDQkBAQ0RDRktLT1lbWFhYUU9XXl1iffTv39bV29DO1Njn7fft9l9bWFRVZ3v36+nt6+fe63ttW1hcZG7r4uHb19XY1M/Pzs7S09HT0s/JysrJyczMy9Da6WBTUlZYWVxeX2v17vLs3OHb1tXW3e1+9GdeW15cTktHRENDQz8+QEBCRUhMV3Dy4d3b2tfP2ef8X1dOS0tHSUhHSk5XZnp6fGtx/O7a1djd29nZ08/Pzs7a3dzg625gXVZQS0tXc3Xi2dvSzcrJyMTGy83OztTPztPY5f53/XxsYV1bW3Hj5NPLy8nHx8nFxcfO2t9uWE9LS0tLSEZEREVLTlJUVUtHSkxRT01QVllcfmxecXVpaXf8Wk1MVWjk521gXXLc0M3b7m907/h8W09VZnBwX1FNW3z4fXF1bvXs6+X4fujg08vJxMPExMXIyMrMz9rf3NvTztHY3t/q/Hpw9+vw4eng4uXe3d/c2uff1trX19ff4trl4tff5ujrd2daTUlFQT8+PTs7PT5AQUZLXODd3drb2trn29LvcW5daWlbW1tobmBfbnxx8Ovd1dTV2dnY3+bY0NjZ2u7y/2FXVFpcUE9UUlRidera29nSz8rIxb+9v7+/wL29wcrR2+N7/ex2a37z6t/d3Ovd293Z08vHyczP2NnoZ2twYF5YVFdQTUxJRUZEQERNU1ZhZVZjcWfw5XleXVdPUE9NSkpMS01c9fp57eXi6d7a3tjZ1s7P2/Z7Y1dXV1xl9er79PDo6O785t7f3dzY087Oz9LY3OPj1c7Q0NXW1dXa3eD3bW7p4+LZ09HRzMzLyMnO0M7R2dzd2dbf8Xf8+2ZgaGVaT0xLTlhSSUZDQUJDRUhKTExPWmFx7Onr7nl16dvc6XdvZmx0XV9oaV9XV1RYX275d3FzcPDm6eng5Xz87dzX2Njm825aXVtcXVhaYO7e2dfY0c3KyMO/wMHDxMbK0d7ydlxYVVFUWVhcZ19lb33s4NTLycnJycPCyczO0Nfa3OV1XE9JSEhDQkJDREVFRUZLSEZHTFdcYFhWW1RWW15cWllbY2Vvbl5ndXd4++Po5uPg2N/sd25kW2NjXVRVZGdua11aVllfXmvs8nFlfd3T1tLQzs7S0c3Jx8nM0dLX4et6/vpqaHzr49nW19Tb2Nvq4uZ9eGdmbm5jZ2NdXmbz5+7s8HZkWmJcXFpSUE5MSEhFSEhJTE5YW2RsdnvreXvsfnpoXFlYUU1MTVNMSk9WW23u8enz/d/g39XY3+b87ebqdvprU1RUWWFfWV1YX2h+9Pjt6trXzMrNzcvIy87MzM/a5eP4emz86vzv7fj4eXXw+O7a1dvWzMfHyMrM0Nvb3vdvXFVNREA+PTs7PD0+PkRJS1ReYWxx5trX2Nnb2tjt9Xl0/mNcWFtfXl9qbXl55NfZ5PPzd2RYVFdXWFdbX2FkY23y+3l6dOnb2tXP2Nzl8+Pf6eLd2tHO0tLOzs3W1c/c3+Lq7eni5uTs9/n05+Xg2NPQz87T0M3Nz9PP0tfhfmtqbmRpXFdYW1lYUEhKS0pMS0hKSUdHR0hLTUxTV1x43tTW1dfd2dTT1NTT2Nfa3+/w73hkYHBvdeXd29jZ2dzc4uj48WdRV1RQWFVWWFlbYOnW1NjXz87Mx8XBvr7Bx83V1tXb9G1zZGRiXV5daPj58d/X0s3NzcvN1tHP2NbX3djW2eX5cG5bUlFPTkhGRURFRkhMT1JUXWRs7+rj3drY5fpzfHh3YFZOSUVKTVFcXGb85ufd2tfS083LysfJz9rg7G1kYlxbWlpcaHr94trR09TX29vb2+l3+3pw7+ze2d/j4tnc2tjU0Nvd2dPT1t7g6frp2t3d433v7+jm8Hp67/Xs8Pz2e3Z3aVdKRkZGRkhKTktMSk1VVV5TUWBfbvf6cG5ubfrf2eru9O/h3tjf++N2W3fzeF5XWE5OT1VYXl9fb+3m9fbj3tzW3tvY2+PZ0ud9eFtcbuPp8N3Xz83HwcLGz9HO0tjn8F9QSEJFTEtKUF7t3tzX0NDMyMfDxMjIyM/j+mlbXVpWTklFPjw9QEFDS0xLT1RaW11XT1VSXn7u+21weX5u69zr+G5jbGh+fW5nXFpWae7x6OPq49rd2NTd5vplYF5aV09JRklLS1JbZG/z6/Ln3dXQzMfHxsHAwsTH0ePvdWddaGxnYG1rduPY1NTb3Nre73Jta1hPTk5OVWFeXmvu49rV1N3m8O9tW1lSTEdGSEM/QEBEQD9GTFFccu3b2dTMy8zO0+Z9eV9SV15cWmJkYHF8+PDk3d7i4tvc6/RnXW5lYHLwfXrl4ePd3e3s3u16a/j6ZGZ06+rk39zX0NXY0tPS0dDPzs/S293Z2ul69vpwbffq6NnT0NDLyMnIyMzV3+1rXlNHPzw6ODk7PT9CSUxUb+ze2tPV29rW1dzn5/t1eWFhZ15PTk9UV11x+N/V09fa1Nfc2+P8b2lbVF5gV1ZWW19z5tXQz9fn3tPZ7nT79fx+7dzZ19HMycjIysnL1uHq3+VvXVRZXFROUF7+eXzu8+nX1s/Iw8HIzczOz9HS1uTqbWr/a1pcVlBQUlZVT05MSUxLRD8+Pz9ESlJbd+Pa0c7Gw8PDxcnN0dro83BeW1FKSEhJTFBcb2tv+url2tDQ0dPa3OHj9WVdVFRSU1BOWVZY8tXNysbEw8XGxcvOz9Xa4uZ7/efo6Op8c/To5dzg5uZ7e/jo3t/o/XR29t/d3OLl3d3a3el0eXRgYmFaW1VOTE9TVFNTWVteYmn57N3e3NnsbF5ZVlNRTk5PUV1v8fL15NjOycbFy87T6PdyXFJLSEhLTlFZXWFaXXrk2trW1djU1NDS0dfl5+v5cm1v/ufs6+jdz9PQzM7Q0dbe5OLpdGNfXGBqbnx+/e3c0c/OztPV2uDoaFxQSkdGRURHR0RBQUdNVFdaeeDj4NXSz8zNztDR1dvc4N3n+/dtam5ka19WV1ZQT1FNTUxQU1dhY2n88enb0s7KyM3S3eLoa1pVVE9MTE9VV1pnc/7d0MnHxsPEysrM1trhe2luUUpIR0xQU1ZXY/Xe2dLIyMXHycnUzdfd2u38ZVhQXFpNSERJTU5PTEdFRUdJS0xJSk5XWlNYXGB42tHV087JyMzU5dvUz9tqam7velVVZ29bUlRYXVlTWFtgYFpaXF1VVF5qa27v6Onx4dfOyszP1Nve5NnS2t/l/3dudWpdYGFbYHzp5uzg3+rr/mt0al5ja2lpb21rZ2xybPHd3t/i4unyeHdlW1hQTUtJSktNTU1QT09YaG/x5+jn7uDW2d7g6HlpY1hcXVhSTVJcbH3v6+vd3N/a0tLW09ff2Nnc7nplWFlaXV1XXlxSVldYX15fZ3b65djOzM7LzM/P0NPd3N3d3PHt6nBdVllaU1VdXl5ravPf2NHS1NTb2Nvk4+F3WVtYVE9LSklISklHSE9TVmJt8+v19erl4djUzs/QztHZ2tzh72ZpZF9jX11cXF9aUVBUUk9PWGd89vzy6ODVz8/OzsrLzs3M0tze4OHi3uj7c2pnZ2xqeP34ffLe4/D+9u7t3dvf4eLt8u95Zl5cXWNr/e/d2t7l6ePo5tzZ2Nzb43ZuaW1mXlpVVFBRTlBRTEpISE5QVFlh9+ni3tTQ0dHSzczKzNPZ4+18/fr5dmVfY2RiX1tZVVNVWl9u7OzueGdkaHr5/W1y+vvy/Prr7uvi2dHOzMzMzM/Oz8/OztHY297f6/p1Zl9aV1lUVFtYVVVYXGz56Nzf3NrY2+Hp9XBfXmtwc3txYllSU1ZXW1tUUlBSVFNVWF5fZHzk39jS1Nnh5uLf39/o6u7t9Wx5enNkXmv6+nv6bmRcXnbq4NrZ2NrZ19vj83pnWVpgZ2ZubmdeXGFjZf/r6eTe2dfW1NPR1NTOysnKytDe8P1uZ2tnX1pWXGdsdnZwbGV57PLu6vZqXmNsbnR5dnRrZF5XT0pHRkRFSUtNUl1fY/Dc08zHxsjLzM7Q09rj+G1gX2hubG5eUFFVV1dbX19jZ3R89uzt8/Do5d/e4t/k9/nr5OTm5ePe4+Tj7OrteW9raXjv5t7c6/3x7Ofg3eDqem1lYWZjXV1ka+/c19XT2d7b1tnd4N/m9vv7d2xnXlRST05OTU9QTklHSktNVF1qbW1peu3g3eDl6OLa2NTQ0dnh29fY2t3g9nNqZVxaV09RVlpka3P8+35tevT5+eza2dvb3eXt7X52b216e+7h4N7w+Obc1tPNzc/V2trf4PRlWlJRUlVdYWNdXmZu/Hh69Ph5amplamtoeOvf3t7b3ODwd2xiXFVRTk1MS01QVl9kanr16N3Szs7W3uHq8Ozj4+bs9/16dnJoXFhWU1NXW2RtbfDf3uLe4OTr6uTs+/f1/njz7e/u5+Tn6Onp6+3t7ezw/nt3bGj97nn35+rp5uXn+G1qaGR5+PDg5eXe2d3g4vpuZmJlX2hza2Vqb2ppbm1rZGBbV1NOT05OUFJUU1ZeaW5w7ezm3eDe3+Tf4uLf2dnZ19jV0dDR1N3xb2t3bmBgXFtbXGZkY25pa/zw6OHc29zf3d30a2VgZGNfYWVkZmZkaGtvdHX1593Z1tXX2d3j6fX59vnp6fTu+frq6+/t6/bv+Pv19+7y8P337/5wXVZXUlFOTUtKTVBQT1VdWVxtffvu4N7c2Nrb3drb3drY0tPS09fY1tnr83ljY2RfXVldY19bXmFkYl9faHD16enm5ODj7O7v9P/97e7t7Ofj4eHf3+Di7PHzfHZpYmhmZWZdW2Z0+OfZ1NHQzczO0tjnZFRQTUxOT09QVV1jbfj67uHg49/e6PhuXVhVVVhbXmJ0/O7q7Ozk3t7d3ebk7f58/3j/9/rx63ZsYFxfX2RjbXFy/ezq+nZ2X19jaW3349za2trc4NjY29bSz9Pb4+n48vtpbG5peXju5OLc1tni5+50al9bWFZZVlRZYWJx/nRsZ2Rtd/jq4NvV2trX3d/f5+/we2teXGJeXGNgXWl7/PPp39zc2dnpc2JYUE1NS0tOUlRacO3q4N3j49zf6Ofp8H39eXhwfPjx5d7e19HT1dXQ0NLU2ef4cWFeYWNmaG9zeWttcWhnbGNpevl9evr+ZF9sZGBqc/Xf1c7Nzc3P1dPY397j9HJfVlFTWVteZmpueX18d294+m5paWJZVE9NTU5QVFhdYm3s6fr3+f3v6eHc1tDS19bW3u/3eGVfX2BcXF5eaPvv5+De3d/i3eLg3+bo6fL8fXdsZF9ncm9+6evv8ntiW1pVVlRaXGfq5uTd3N7g3dra1dDQz87NzMzN0dnj6O97ZWBbWlpXXmFkZFtZVE5LTExJSkpLTVBVUlBXWmH82dDNy8vNz8/V4e9yYmNpa2737+Xf2tfY2Nnh7fvu9Hz6fHhzcHFlXVtVVVRRVFlZWFdaWVpcXGBq/unl3NTU2trY3Ofh2dTSzczNycfJysvO1N3o9HhtamVkbGtsdm1hWlZYWldaXVlcXV1cXllVU05QVlt3fn71dW90bmdqd/fp493d4Nrb6O3n+nhvY2NicO3m2tTS09vg+mVZT0tISUlLU1dYWFtcXGBu8d/Uz8/NzdHY3up7+e/l4N/b3drT09DQ0tzl7XZwdG5jXnD17+fsemljY15gc+/q4tvW2N7pbFpQTVJYYmpldHZwamt4d/r5+PT57H5pb3Bqb2xiXltZWFlgbfrn3uDl5+z09HNpZV5dXF9obWJYU0tMTU1TW2j35d3U19/g3dnb29rd3d7i3tfOzs3O0dbb2dvb2tze4eTyZl5ZVFJUWVdbZGx88evweGRfXWJuefXq4+fx7ff77evh4d7b4d/a1NPQzdDX6GxeUktHSE5TVVtgXlxdYmJiZmJgXVxcV1NRS0ZDRUpOVVtq697Z1M7NzczNzc3Q0djc19DOycbJzNXe7XlrZWRu9P/79XBoX1VVWVlXVFdgZWJufW5tamd38OPa19PT297b2tzc4OPj7XFw+evj4NfU2N/xb19WUVBUW15eaGlnb3Bwa2ViXlxgZmVqYlpXVE9MTk5PUFRdXmJ3+ezZ1dTR0dHQz83KycnJztHZ+mZfWlpfavvy7urt7eLg6OrscWJfXmZkX15bX19eYWhqbO/l6uXd2t3h2+DxfnRnZ2/239rX1NXU193i63r14OTr6+/9dml2fW5iWVRTT09TVFJSUVRXVFJQTU1PT1dpffPr4tjY2tza2dbSzMbFyMrN0tnvbGFaWVtcYWRiZGdmbffo5vR5fG9vbmZiYV5cX15fXl5hbvjm2tTNztHPztTZ6PbvePXp6ubq9v7/aGNoZm139+rk5t7i7+fsal1XVFNRU1hYV1xcXl9cXmVgXWRx/O3o4ebn3+Pq6uvo3tTPz8/Oz9DT3ez5b1pSWFxaXV9jYF9obGReXV1fa2poa2ZnXVpdXl9gXmn75dvT0NLP0tPQ2Nvc3d/f6Obg6Ojo9PtsY2NbW2Fqcezp7ePh4/1iYFxZV1pYVlpdX19fY11daGZt7trV1dfV19zc7XB6+PHr4N3d3dvX29/j7/huZmxwenJuY15la2pjXltbX2ZiXmRhXFpebWtkXlxcYHD26OHm5uTb2+bu6N/n8uTd2dfc5efrfGVfYV9eavrn3+Hf3eH/cn59/G1lYVlYU1JUVVVSV1pZX3bs8eja29fT2d7i3tvX1tLT1M/O0dTU19/r9X308+x4aGdcWlNPTUtNT1ZUUlRTV1haZXf3fHR19eXf3N7c397a4/H5+vXu7O3s5uHb4OXj7PhsZGBeX2JrZ2h68/1hW1teZW1jW2BfXGBnZV9ZV1lXXGh76eDj3dLNz9nb1tfW0c7Pz9HT0NPZ3OHq83b/7ujs/mxx/W5fW1hWU1VaVlFWU1RWW11gbW1rbunf3tjX3Nnb3/JwbXZvff9rbfXt9PPr6vn//HVvenNsb2pmefbxZ15hZmFiYFteXlpcXF9ZUFBST1NeaH3u8eba29zm49XU1s7Ly8vLzc/U1t3q7fZxeOzufnF1+3htbmhlaWNeY2xnZ250aV9hYl9dYm786+fk29rf5u34eX368PL/+fDk4OTt7Or1eG5++3JtamhvdG9uYVhTT01NTE1XWlteX2BeW1paWml69+Le39vb3d3i5t3d3d3c19DS09PW19rf4fR+9/h3eHF17vD8bmdlYlpcZ2345Ofq7Ph1aGJnXmR57+fk4eHd4Obl5Nrc397f4OTh6nxte/h9/HBkYWVjYmNsd/f2/XJpYFZOUVNUWV9cVFJSTUxNS0xSX2n8497c293d3dbT1NbX1NPS0tfb3NjZ29vg7fLq7vXt5ebuc2RcV1RTUVxv+Ofq7/j3dmhiXl9leuXq6OXn5ero4NzX1dbY0s/Q0NXb3tna4e58XlNPVFBSVVdXUlNRUVVWVVdm9vT3e25fXVpVU1FPUltlePLu4uj56ODZ1tve3uHe3d/f2tza2uLh7Xzw8ffm3Nrd7W1iV1RXXGJy8u3yb3F0bXFjWlxpfO3e2Nnf5eby9url497b29rT0dfc29bU0tPb6313bWt2/mteWldQTVFTUVVZZmxkXltXVFRRTk1KTFBTWmJzfnJ2+vjp2dnW0NLOy8vLzs/Q2N7j+GZyb2Fofen1amxmWFlbWGD+8Orv6+v/9ef4bGhjZXj26uHg2t/p4+fs5+7z4drW0dTV1t/i3uTk63dwcWtq/fV4XlZXUlRXWF5idfv2+vdyYmJeXFlXVU5OT09TXmFcXlxhamz259/V0c/NzMzO09rb3+vn+/nwdPrzfHdmWV5fV1lo+Ofm5d7e4N3o8PpiXWNkbXr+7vB99fp79nxve+jb1NHOzdHT2N3c3OHk5uzr6er3Z11aU1FRUlRUWWBfY2ljX19YVFVXVE9OU1lda3306Oru6O3o4d7Xz9TRztLU2Nvc4+v3/XB1cWNjXF5jXVxYV1dZY3nv+ejg497d2tzh92FkbH7t5eHt9+3u+m97cHHp3NTSzc3U2NvY2NfcfHt9dGtjX1hTUlJRT1NYXGBkZ2xud21gYF9eXVZPUFZbW1xnc/79fvvs5uHW1NTQzs/Q1tnX2dre8Xb56vRqYWptZ25oXmBcWmFicn178uz569va5XtrbG/16H5t/nNtcmxqa2hv+Prc0dHT1tXV19fU2Ovw7evsa2lpXlxYUVNXUU9UVl9iY2tiX2BeWVVTTk9TVlZNV2diaf7m497Z08/Szc3OztLV0s/V39/e4Ofu+WRqeXB8cGhjXlhVWVppb2pvbvPf4u/9+fz29+vsfPbr7eff6e/m8vnp3dvd4Nrb39fY3d7f4uh9bGtaVVlPT1lUUlVVXF1menBhbGddZV5YV1NWVU5PUlBUXGT+4+fh29zV09DQ1dva29zU2N7Y2djb4eLsd3l8bH7ycG1sZ2ts9/JtaXF3+ePd5OXj3vNx83xtZml1bHRubGls9unc2NfX2NLR1NTW19vb5/bxeGhdWFlXVFJVVVVYWF1XUFFPT05PUVBRVFdPUFVVWl5z7unZ2NrVz83Pzs7S19nX2tzb3uPj4en7dHxpX2ducm9uZV9kZGBjbGpr9eTd19bS09fb5e75/Xp89nz9/nNscern6ePb3uXd5eTf4+Hw6+p9ZmtuW1pYWF9aXF5famNYWFtVUVVVWlxYYFtaWVBPUVdZZnF85uve1dPR0dTX2+Pi5erg3t/Y2tjX4Ovs8ndwaG36c3BzbWtgXFxdYnb169zZ29nb3uV2aWx2d3Bvbm5rbu/g2Nnc19PV09fY19nb2dPX3ep6dWhcVVRYVVNWXFpXU09OTk1OT05RUE1PWVNPUVRZX23u7t/a2dHMy8vO0dXb4t3d493d2dbU1Nrr8XxoZ25kef1pamFbXltWWmdy6+Ld09nX1t7i6Hx67/b463v282335t/b4eXe3dzb3t/Y3NrW3eHscG5lW1haWFdZVlpcXltUUVdXVlhZVVhaVlVSUlRQT1JXXWxzbu7b1tDNzdbd3+Hg3NbW08/Pz9HU1eNrZnNpZ21tcGZiaGBdW1ljdPfj3N3W1d7g4u3y/GxpaXd7ZGh68enj2t/i5NvZ3NbW1tTT0tfV2N7wa2ZkbWVYVlNUVlRSTk5MTVBQUE1QUU1OTVZYUlNTWF56cXHm39LOzMvP0NPa29bU1NDU1tTZ19v0aVpYWllZWVpZW1lcYFxpfu/e2NPOzM7P09rZ3unvd3V8aWh1c+7f5OPk8e/n5eLn5+Lp8O7u6e1zcG1ia3xtZmRmbXhpaGJdXFteXFhZWFBOT05UV1JOTVFVVVhdbvnn2djW1djg3tve29PS0tTV09bZ4ftqZV5dXV1laGVkYGdvfezb2drT0M/V1tbf7On1ZF5dUlRYWmrw4d7j3Nve29TW2djX0tbc2uDv6e90fPh6+GtfX19gWVFSVFFVVlFQTUxNSktPT1JaVVBTVVlcY3zf0s3Oz87Q2NbY2dbS0dPY2dzj6vFsX2FeWVRVWVxeXVlbYmr+5N3W1tLP09LP0tbf6vtpWldVVl9n7tzd2t3l3dzd29zi3uXv7PD1+GttfHB58f1ybWd2fXJ4ZV5lX1xbXFVRT0xOUFRXT05LSExQUllo9N7a19TU1dba2tjW09PX2N/e2OT57v15+mllX19jXFpfZWj859/Z29XU2trc3tnbd2VfXFpTU1lfbvjn4tnb2dXX09HT0dPe4Oft5+14/vPu6O73/W9oXl1eXFhdXVZVUFJRTExNTk9SUU5MSkxMTVZebuzi29jY1NLT0c/Tz87Q0tfT2uLg7nx9+G5jXWBsX2BpYWFqcfLo39zc2tfY2tTY4OdsbXRmY2JsePv65N7f2dzd1tjb2eLs9mb99Wpv+G726nrxeXvxZ2jy/G7/a2dtW1xWTlFPTFBOS01MSUtKSU1NUVtZbe3s2dbXzszNzdDX1Nnb2dze3eHn4evs7nLz/23r7PDn7vjr4+Hi5OPd5ubl/HxnXmZgXmZqa3Vscunh2tbRz87O0NPa3eXp8nFueHb//vry+fV6bG5oX19gXFxXVlZQTU1PTk5LSkxLTk5NUlVWV1ZYam/729XVzs3MzNTV19vW19/b3OXk7f/1b3p8ZWX29Pvp8ePc5t7f39jd2tfa4ufo6exzZnh3eWpbaHd2+Ojc09Tc3uXt/Gdz+Xhkb+ns8Hv16erg7e7d5PN7+u74b2NdVk9PTEtKSUdESUxKS0xNT05NTlZdZXvd0s3Mzc/Q0trb2djU19vV1Nve6e7k5/F96uTw8+DY29vc6N7g+P99+HlkaPz7bGZnYmBfXlxp6uzfz8zNz9HY2dzs6OTi6vbt5OX0dXZ4en70/Hl2ZGNua2plW1FPT0tLS0lHRUlLTFBPUlBSVlpeau7q39bT0NDR1tze3d/g3tzo5+fq5XZ69f/xdPDt6ODe19PP0NbS3Ovg5evo7PPm3/TnfV1mYVtZYnby5eTa29va6vFwa/Xq5+Te4NjicO14d/3+eufd7+fkfubk9HFeU0xPTUlJSEdHSUdHSkpMSUlNWF9n/O3e09HR0NDe3tnb2d7Y2tXZ7eHn7N3zee/f5+bZ6N/O0dfW2/D/d2xgW2hibnlz4P50+FtbXe5o+dnr1c7V0N7g6Xl5+d705dfe5ff4aGFqXGV783j5/nPs9Xt6Wl5UVEtLTENJSkZKSEpMTUxKWlde/nzr2tDV1tLd3NjZ4eDg4d3n8Pxm9Wti+/He4t/g6tzVz8/N0NnS2d/rdW9s82155+3gfV5scmxp9vDr2NvV197d4vdweurn6dzZ5+zpe21naWFs5/Z3cN7icOTtenVnVk9USkVGRkhHRUVERkRERkpPUlpu29ba1dvW2uHf0dDe2c7R1tra72309m7k1dzm2tjd287S287S3t7QfFv5W1NwbGPw7Vt5+1Fx42Xn09zTztzV1vTd2njl1+vk3tzfbm73XFvxX1/o/GNo5uxsbOluWPNdS09PQkBQSkFLTEVKSkVQXE5q3W3czu/f1ffo2N7U0OrZz+Tf5vf5Y23qeuTN4u/X3d/Yy87e1snX6s3gWnrxVFjkcVloZlBXbGnk3W/dzvPdznD31XJ41ujXzvrf1Gtx625tYX7U7XnQbV/W6GZq4+hbWV9MRkxFQUZJRkJISz5FT0pUZW/359XifeDhZ+PY3tbPy9XXzeR90nZX4N/l3NXT7fnO3GfMzPzXx+Fo399YWO5kWujiU1X9ZVD40/h2y89o1cxuZs/eW97K4t7N5F/h7Fdc7F5h3+9s8+dzaft5WXTfYFhqVERNUUFBVk8+S1tBQF5aRGLYaWjN31ftz11ay9BszsLe3sjlX93bVf3N4e3M0enNyubax9bdy8vf2tZlYeP6UnzaVlB2W0158Fh+zO9s0eJba9xda9Dd+czI59/S+V/l+Fnq1m5m2Ohe6NteYt9jV+DnSlhxR0JaUD9MWD49UkU9Um5IU9LyX9TXVXDMcl/Hyn7LwPh3yeFQ3dFb+MPabcfI/cvC8N7C1v7LzGPrz2FU2upO69BOTNRvS9/NXHvC2lLP0kpfzWZTyM9dzMhad8h2TNbjTuDQUFnQX0nS7ER22ElX1U5I31E9XF08TG89O2dGOmJ2P13KU1XI7UrWzU72wudrwc9O1sdQXMlgTsjOVM+/edy91XC/x2nIwGbewmFXy3RK1dpFXNZNUs1qTszNWN7KU1jRX0va1Vjcx3tpyNpd0NhO9spfV8v6TNXZSGXVTlDUYEnb50ZTb0JFZUo8TUo5SFk/Q+xfSeHbTfPNXlvL12TIx2DVxmxjyvhM1dVX38px38HQesnKcc7E/N/C22bM2k7c0lFc11dL3OhLe89fZMvsUNrgTWvYX3DI0GvUyf7ryelf0dNe48xfZNBtTnRwS1jhW1Hc9E9sbUVMbUZAVUw+SVVAQVhQSnTyUWrZamnX3G3OzHLnzPFf1+JT59FaY8vkXcvGddzE4vbHzvLNxOLgyeZc1dZWZdtaUOR0TvXZWm3QelLi6FFq1WBoyNZqz8tu6Mz9b83UXt7MXlzUb0tfaklY41lT3/VRaPFMTnJKP1FQPkhWPj9TTUZj7E1b1G5a0M9o1sl6+tDnWuvsT2XQblnQz13XyHLpxdFzy8Pi28LQbs/NZfDLcFPh3FJd5FtV3OZP7M5UVdB8Td/OW/bK5mDNzVTty3z5xthb0sxZaNVYS+14S2TVV1bQdkht5ExKaUw9TFw/PU9HPE5pREzcbU3f0WPewuBjzM5S8NBTTtPhV9nNZvTE0VvVxeffws9tycN+5MTkYs3OUWnSWlDZ+EhtzlNV0ntV29lQaNF8X9DOY+PGfFnV31fUxu3vydFf5s5VT9R3RmnXS07VakVm3E1F9VU7Tnc9PF9GOUxmQkjYdEvgzFliwtZazchna85yR+nPUVzI5E/Mx1/lwddoxcRp2L7aYMbJYtvA+FDP101pzllG39lIW8v8UdfRTV7I9U7QyVhix+pM3s5R98TkXcfFXXXGa07e50ZV0VZJ3NxLWtJaRGNcPkVkQzlMUTo/ZE5Bbt1MWs7oV87JZOfD51TV3ElY0G5Tz8tm4cHb+8TEetzD2O3Hyu/dxdX8y9BceNVbUOplSmreV2DN21vd0VNaz/9U1c5o6svpVOXgWGnR5mzMzXDgz/5V82BIWfNUT+JtTH7fUlHxTUFSUjw+TD46TlhGVuNcUd7dWerK41/Ty2T40V1J++5LZM99XczK9M7A2OzCyebHvtbdxtTkxMX84sv7Ved0RlN7UlbU12Lb01ha1fVT39JccsrYYNjbU2bR/GPMzXfYyvly0e1LYdtVVdt1TmjrUGneVUdaUT0+ST07SUhBVXVMU+RhUejZbefL82DP0VNd2ldN3eRT9Mjo8MbJ6M3C2drByubMyPv0x9N+0NhWZd9TRFlWRl3ZY2bK0Vrp0Gxj1OhZ5dNr9cz5Wd3aWvjP73bN02Hlzn5f2XtN/ONOUO9cSmv2TVN7Tj9MSjg+UENAXFxKY9hhW9HZXOrQZGrN7FLu3VNc231V5dtq28bg7MXM38W+zsy+0HfPy+XdyeRj0ONNZfhLRnV6TmvYbXDT31nazGBZ3nVS2dtPZ89rTdjUWuHK43rN11vbzlxf0eFU+uZKUNxYRW5mQ0tcQDtLRDpIVj1G9FJL2t5a7Mz/W9XfXOPgU2XO7Vbj0mP4x9d4yMj5z77P1r7E38vIYu3F5VTS1V/12FlQ9VxNfuBYZ8zabM3I+ebI/lPP0lnzy35by9RR58lhasXfT9fYUm3VZVTZ/ExtcUlO309DbGBBUFw/PlpMOkhkQ0brdVbVzmrly3hb1fhRdPRNWtdfS+ThXu7LfmfN12zJwdPOu8d4x8Zt6MrtXs7Rat3PXFrbX0t08Ex3zvt8y89e6tRaX9T0V9jYXe7M+FjV12fj0mpm1eVV7dVfc91jWe1hTGZmR0pgT0BQUD1GVT88U1FBVN9gWtTfXtnNavHL7Ffd3Fvv31trzeBozs5e7svgd8fH6svB5e/G0Fn7015q0utd2uBTb99kUPH9X9LT7tXKcWbO5WnPzW3pxtxg0NJYb9D8UubxTl53VFDvcExn8E5W71tMb1pJXGZJRl5PQ1NOQExnSkvY7lHw1Vplzt9e2NVVYN1bTW1mUHvbZf/W6WLY0vPVx9jWwcjaw8Tu3Mjfdc7RbOjL/GDP6FFx31pg2Ptd7elYds/kY83J/tzJ4nDL21vazmRe2G1NeO9MWOZOS95yTmTqWFf+UUtXVkFIWUdAUE4/S2VNSuVgRnbVWmjJ2WrKxWX0yWBN2t9V48xkeNLrZdPVYt/N7ObGy+jRzOzfyd9c19Vb/c7qcdXvTujOW17R9VLn3V/ay+fhw8nhzMx9e87fW9zXUVPnUUZnWUROZEpN7WFK7NlPYdZiTHJdRllmSUljTUNec0tR6lRL7upV5snm9srPauXmTlvbW1LX2k52zmtjy+JP2sbu4cHN28TJ4crH//HK22fVzmRu111U23VJbO5LUuVfVdXNa9i+1fzIzlzbxvd2zvtTfOpMVfdKRWZdR1/qTGXYXVnZd0hca0lKZEk+Vlc9TGZHS3ROSdv8TuDH3eLAy/jO1lf5zV9ez/lR39dXds5pU9vdWd/I6+DC1dzEzV7ZymH5yeNX2NtP6s5bVdT2TebWWffI4Oa/xd3Nx3PvyN1c1d9OWuZLR/xOPVBYP0v7TUze7lXg0VRe1ltN52pDVHBDSntNS3dhSGHhVGTVbXXGz2DRzU5n0lNO2fxGcdJSaM50Ut3eV9rG7te9ytG+wNzMxeDYxd1tzt1MbtNRUtpURensSl/PY2fI1uXDzGjTymPexXlgyvhL3uFGU/dCRO1SQu/4SnvXTlbXVEfnXkFeaj5GZEA/b08/cOxHbs9bX8bSbcPDbtXEXlfO9FDd40533VFd21dN5HdR3dFo2cHd48TOe8vQ8cjKes7OWPDKX1nL9E3U1k3rzGbsw9newNFuztlW39Nd9dVVTvhWQ1tUP01XQE/fTk3Sd07W51Db1k5t1ExO6EpFfVdBb/NEbN1HX85ZaMPbcMboUdN5RPHlSG7RTGDMWFTSaFLN2l3Gx3PJwOjOwHrkwPllxN1Zz+dL2dhK6ddJZtFNV8hjVsPTbcLGYtDJT/jFZPDDaFPPWUPrVz5uaj9s3Udl0ExU0FBK2FxB/Gg9Vfw9R+tERdxRRc5xRc3ZTMq+aMy8XnjFU0/MaFDObknP7UXa4kP80EvmwVz0vuRwv9VWxdJIzMhV0sRVe79uXr/ZUszoTszNT8y/XtC+bN/AVFfIY1bGbUnWaD1pYjtZXjpQ6EJOzVBMzFZFzWRA2uw/ads/WNVGVNRMTtFSR9FfSM7bTsnFU9fMSV7WSVXMTUjNXEnI60rOz07Yw2DQvvTTu9fkwNxVx+FOx9FM0s9M2ctN5chMW8tOTMZ0TsHSV8XIVNjITeLDVnfFXE/PWkXcXUDrYj9j6kdc405X90ZJdktKbVBEa11DW+dNWt5VWddqV9beaMzL7MnMWdrSTXTXVWDaVlrYWVnZWlPc51jc0mvayujrzu1x2fpr2dzz19zvz8/d09Lp3drl4d7m6s/U28/S6d/1W2nmWWjnW2bhYlFlVUpbV09YVFFecVpb+F1aY1NYX1pZYltSaWFj8m1g9PVfbO9edOb96dLX9t32U2lgVWZsW2Ls9Xvubu7Y3uXa1uHc09nZ1uLe19vf3eDe3+718efh5eri4Oje3vns5+vg2tve1tDm9OXn7d/ncujkd/n7X1tlamJjWlNUVU1JSktOUE5SWFRVVE5RU1FVZmlgb+jf6+vb39nU2NrV0Nzt6fZmZ3phX3dyaXNsXWBpb/rv+/Dp6v14d2hx697a1NLS09jc09XO1tre3dbe1NLW1dLP0dDW4N7ma295aG1nYFxnc19ZXlZUXl9kX1pYV09NTUtSWVpcZH79Z15cXV1bavRxbHrs/e38cOvf5fLl3vhrYFldY11eZGVnbnb78/7p49na19/e1+d19fxv997a2M/N1NPb7PHp6efn8Hvr6nXe6enb09PV0ePc5Hrp6tra+eB3+uxg63lf/Xp4cW1hT1BKREBBR0lNTk9sXVVfU09RVWBs627w4N/X6dfR2czf2tnz4GVoeWdueHpsX2pob2dlbe7jfHnpZV9rWVNWW2nt3NjQ0M3J29XQ08vWz9jaz+Ta0NzZ1M/R19zu6PVfYm3kcPryT272XFRlbV1w+V1oZldPSktJRk1PUl9da2BbWmVZW336+u3a3HHj4P3y3Obv4d9kY2FUWFRhZV1pY2FobvJs9ebT2uPe4+x3a3ldY3VrfN3W2tfP2t/b1tbV0tfZ2drp5PLo49/q2tPl6uV9bujb593W52/o4XB35+Tv5e5tX1tTSkVDQ0RBSElMTU5OSUxQT1Bq7fXez9be09HX087Q0M/U3ul+ZWFmZmBsZWdiZWNbamxu4/Fl+mlZWGJXUFlkW+rc4tnR0s/JzMnBycfFyczLztfZ4t3X2uLl6XpwYWh2an30c2doa1VYaWNd++f9avpgT1lVSk1NTU9UV11VS1FUTU9ZYP3g29nW1dLV4t/a3eHmfHZyaF1YVVRbYVJhZGtr9ev33s7X8OD4bfVvZ11YfNz8duTh3+Pk/t7Q08/PzsrS0dXa63fh7+/k8/3u5/V43tfl697o3PZh83b+3O/23uxrXVpPSEhDQkZFS0pIRkZIQEVIRFNs7tXOzMzFxs3Nys7N1Ork3OPraVZbWlhVWVZNVl1cbXTz5PZ3XGRgX11LTWBfbHby39nY3dDNzMvGycXAycfEzt/U1vToeGltbfxrZG34e2Ro7mVYZ1dWanB96d/m6fltamdNSVJMTFdUSE5SRkdLTU5QX3Lo1MrM0c/M1trP2GV47mxfYWRQUVBOV1Rg9WBe/N3k2c7Y6dvd921cWVpWaGBg7OLp7OTZ2M3MycnLyMzMys7W197gZGJ6aG/yavni5f3v5vv5fGdubF7x4OPd0eD431pISUtGQUxMR09HRkhASEFFVFN68M/Jy8LEw8jM0dzd2+zs7nP8Xl5dT1NYTldbXVx63una1uzg9VdZUlJPW1VX62vr2tvW28jNz73Mv73Qu8zKvme9S+XjRdlH20psXPZl6mFtZE/iSeNN1Wniz+vL9t9mUVxMTU5LU0xTUlNNTkpIUExUX3nn3M3S1cbf0tha0Fn0303PQuNYTfpH5EvpWuR209/J1NDJ6s5T2UhdV0xjTGZcY+pq6t7ZzdTJzMrKxMnIxs/N3OdsYntaXPpU3vFny1TYd2DOQ8pU6tp9ymnM+tlSakdaQFJORE0/8jtVREFNQFZIUu1V1NLVx8nFysnQ0tvd4+l+Z2liXk9VTl5PV2tX7Gzd0m7fzU3d8EHQQ0jbO9ZKUME/wv7fumG21cHCzLjSwMjEzc380110WVNdSetS21tsXGhoX2lf6WXd6unt19b4+WReYUhbYTx0UEHYPFBpPM48Vt08v0fRyku4Wr/+5shO1lfnWHDu5kzkS/leTtFLyWPI383V48tlzk9xZkjlP1NSRN1NX+lZ0OHrxO/Kw/e718+93MTLbMfrUMND2NxHukfbz0S+R2/MPbxP6cc/vkba4D/EPGNUOtc0V1I51jTfRUvePdJJ3uVyy+rH0cbPzMnzy2jb417d8PFuVV1eS3BWWeZX2vla22pc1UTibz3JO2xmOshAfc5DumHNvFSz7cS6V7NdvrxNs0jJ2zy9OdJdRcE6yU1S1z/QSvD2bNVc1+3PbtT9+d1K30NdUULjPVxQQNo891s/yD3PbEq8Sb3o679RyVbee1/YZ9Nk2lrgVVfrTdVV2dpXylPN3k7HRN1XP8k491A+yjnLW2HGVr72y83Ox+DFz8DWwtDYzFrMVeTsYMZOz+ZPyEDTaUTCP8dvSb4/wVpdyUDOR1tOP1Q9UEBKSVFJTl9Oa03XXXfTfL/iyMd3xWr3yUvO2lC/S9zZQtdIVXlKXN1YWNVQ7fFP3l5M309P20LkeEXEUefGU73W5rpjvcJds/DCvmO7Y/zPY3LcX2bOTvDnQvlRQ9pGUcpD09lKvFHwvUDH4Ui9O/PeNcU4UOUyyDpa4TfEQWrTQ7xSyslQvEHI5UW7PsTlS7tFz+dJzkxX0U7a3ErCTO3OP8NDadQ7wUFf4DzGPuzoRb1AxtJPtUa9xXOzX72/d77n3sReyspPvU7jzzvAP0/ZOb9BXsg8wEF6yju8PtTQPLs320w70zDdPkriO8pC3eRPvU2/0ey3Srpr4MJCukrN2E/CPtBYVtg8zkda1UDEP+D9P8k+y1dazE3GTeL3WNlK0GbT2l+/W8bJe7f3wMBou33PzGXK/d1y3mxZ8T7oS0PgOuFQRsVG2s5KxGxrw3DexnL11EVxZzj9Qz7qOlR3Ou5gTslX5MVb2cxMy9xOv1ltxEfP6UjLTVvITvTWT8raScVgUcZFcMtGzs9Cxlo/wD1PyjjM3EC7SG64RMDDWLTa4bVr0LtVv8RIu/pNvj1uzDTJTTy/O+fOOb1aRrs/1cs8uFpQvDnPYTbJNlJlOM8/aG9KyEzH3N29WLvuZLtFwt1MuEXpyzzDSETDOtxpQb0/2thBw0Hl/EPLRtBtW8JEzVdUxz3IYmfBQ8TWXcBuzcL9w8vwx9/az+3X8uJcaPFCbEZLYDrkSFXdQcRqW79dzMpfv9z/yGD7d01TTE1BVEs9dT9bX0DKTN/SU7xT+8dMzvVXymtn0ftg2WBa31Vr2XR909Bh0NpW0mBM1mpG2GpI2lpL3E5K3FFN1Fxgy2HYxu3JxM7MxczPxczZwtNbvudNzk5IdkBE4UNJz0pVxU/YwkjE00S/ckvHQ1LNOllmO+s/QtQ+ZdxFxnxvuWzPu1TMzEzBcFPDVnbPRfDfO/NdP9JHWsQ/18hCxF9Qxj7s0EDPZFTHR9raSspMcc5Jy3Lqx1rB0tTEfL7t3cJdxPJtxU7r3UXhRkV4OmJUR9ZJ1tr1xvzC0PPBXsrsU8ZKX3s/fkQ/ZzlQUT/aRvzTTMf63sdZy/Ljz1bKe97cWMhYZNJN6vlVzf1cyeJozvtv2lNk6E1V+1JjdEx6XExvUmJXVc9tasnY2sbWzL7szb79ycFsxctb1N1TYXhKS2BGTHtGT85sV8bRW8vXVNHsTNH0R+BoQlZVPVJRPWd2R+LKXtLCfNXGcnvEXmHGX1jKXljPVU/WWkfbYUvaaU7P6VTO5E7m3Elq0Uvt00/ez0pmz0xNy1BZv1P4vWLfu2fxu1XbvErPxUHR3ELRV0LYSUDWRUvSP+DSS7/U4LxqyMVOyO9cy0vu+kRqREdKPlxCT/FH1l5cw1DU007CbF7FWOvPVt7NX/HJXXrGV+3KU+jOXm3Ic03NV0fcS07eT2joUPxTRuNIR89Obsxkz9nvx+fNym/Azem+2tDJftHv/t1a2lVO1kZmYETbSm3NT8rjU8ZXWs5Sec9cYd1JS+4+R3dBWOhWZ9DdYMvTUs3PXt3Xbvvv32hq21pu11lvZfRmSNdeScjsUs3wTe31TGDRXlzF51jK3Uje3UPryE3pwldkvnlSvvFNvO9NvupLwt1Jy+pJy3xK12dI9WpI8ulWz914zOPg4GXS+mXJblXgTkxQRktHU1hJaHxL+NhSZdF0Zs3iVc/bUM3MTtPAWum/a3O/Yk7FeErE3kHM6DzaeDzf4ULTzUTh20VrdUlz3lfu2F3T3l7KbOnFX83KcMXX9sLhbMfpYs1hVs9UT+RNTuBZVdpmVN12Vd33WNX+/9NQ6W5E6UxL60pi5Ex90FJ1z1HnzVLk0E/sz1zlzWLmy3vnzmzx0VZu/VTTVlbVSW/3R/BlS9/dXcvQWMzdTdj0UNbmT+ThV93fVuPeW9TWY9Ds9cpb0c1czOBm1Xhl2GhR4ltY2Fj91VDq1lZx2mtvzu5r0P5R+2xHVO9KTN1USe1lTW7vXGHe9Vzh3Hrd3dTb+s3Zbc/O69/NeXTYXVn5WkdcZENXdElj1mVx0PBe/+lcV9z4U+zca1fs2lNt0Hpz0M/uz8Tb4MvQX9nJTWfJWlPa9E1t8kpd6kpP4VFK32tO29Rf687xbeRuXV9oZVho3mhP2upC3tFIZdFiVczUWtTTXNrNVGnLYlfP5Vvi51JbaVZQVVhPT1n/Z3rH9WW+11DRzlVdzV1OzexK3OZFb89JdcVV/L/c+cXeV83YR9nKSPTFTV7GT1fJS0/KUEvKVkfNZFXKZWDJd1fV+0zl7kvnd0Xa/D/28z9330fjzlDSwFv4vl1Xwm1OxdNTyMtN0shFX8xKSdtRQP5eRNrbR87LS9LNRvvLSmjLS3DJSl7MSlPYU2jH7du6zeO93GDFX0vPW07KcEvP7EPo4EJo3UBb2UJUx1RNxdxNx8tPzttMz91K09VJ39FHb9dBXtJCZb5XcsFtadBXXdpOT8xeUMd8Tsb4RczmQ9nqQXvlSO7bV87MWcrCSuTDSmLCTVjJWUzTY0F3dj5mzE7fv2DZvlZ5xE5Nx2ZNxPRNx2FKy/VGzd9Gzu1Jze1Ky9ZLz8pJ8c1KYtFOX9hJU89OSdFOQNxWSsrbV8HLUMXQTM/cSs7PUsnMStjMSe3RSnfbQmXYQVXXT1bXaljTZU7Qa03N2EzZy0/uzklq20Rnz1bswdvmv9FoyOxK2OlH2NBHZ9pIXdlGadZCZM9HU8pRUcZoXr9iWsFgS8TWTMzVS8/OR9zOPlvMQU7HVVLF9VDH/EbOfT/e0kh7zUlox01awlZMwvRGzeBF089Kz8hM1sRKZsBUUcVYTcZcSchbPdr3PnTUSHjGVea/W2DCX0vI3ErO0kTc0EPhyEn5w11ZxupOzd5Ky9VIzstDe8dMU8pPTM1cSsxtQdfnPffNQ27EUe3BVG7CYU/G0kvMy0fVy0jqyUZexk5LyVhD0XZF0t1E281DeMVJXcFRVMFpXMNvSs7mQd/LSPPEWvrBc2zEb07J3kTZzkFZz0RN0UhMyVZIxuNIy85M0MpQ08VM6MNJWcRYVcj8VMfpS83hQNzXPmfNRF3LTFbLUEzHeEXK1ULZzETrx0ZyxElfwE9JxW9JxdxKw9pEys4+2shCeMNKbsBNV8FHRsVNP8pmQcrfQs3RQs7FRti/TGbDTE/FTUzAY0nC20fHzEjLw0fSwkPhwkFZxUZLyE9Kxl9Ixe1AzdY+5M4+7cpBdsZBXr5TVbvqVL7fScPaQsjSP9PMQe3NQlzISFbETUrDV0DMbEPH4UbH0UjJykfmyUteyUxUxFVOw1pFxfZHydNLzc5E39I9X80/TMZOUMJSTr1uVrzaTsXOSdTORdzKR+rFTWu+XlzDZU/LX0XZXD/ocTxx4kBvzUbvv1FlwFhSw3hXxfhOyONH1NZJ2cdS+cdaW85RS89fR83bSdPMS+TNR2fMRU3PSk/IWUjLakbK30vIy07K10fM8kHIXkTFWFnCTfG/ScjCR7/URcJJS8E+58o6xGhGukh1vT3G2T27RU+/OODhOr9MTL0/ysRCvPRJvUhbv0TixUT92ULsz0nezUp+0EtW21BU0mtXzNld1c5WccptUNvuS2rVWVXXfEtk3VBXztRVb8xnSOzTSkbQ3URnw/9Jyb1iWb3CS1vCdT/0v2RF08RTR83FU07Iy0lGztBJRtjiP0XY4kBKy8xNVcPGUVDJyVVSx8NaSOXLYU3exfJKac1xRVbS4klQz85aUNjNZk3uy3NIT9rrSk/Y0FNL8NBoTuHG2lZl0NpRTu3WZ1Ny1uZYds3M9mjSzPFRbN52VFve3V5Z8Nt7YufO1v953tn9XnTmZ1FWa2xXWeXY72zo2eJgX/Lr92/95HRZW/Lta11w5mlVXfLma2Pf0+j03tfd9/rf3XhmZ3d2W1lofmpZWWRrWmj69nxnbXRqWltqbnRhduv17ODV0NfY09bl7Ojw8Pn97vXu/n7t5+Xm4+Tne2r4/mxbW2BaVVNcaWZqdezy9+Pj6+zo3d3i6+nybG7zfG1y+3Vqbnp+/X58bWX77nh38+jrd3t3dGtraGJhX2NrYmtse/Dp7H19/HBlXmBicnVudfz48eHf3d/j3+Tq6ebu/fD4cX7v/HN77eDe3NrZ3t3d3+p8dWBaWltdX2ppcnB89P17e3Jpcn13/Wxqcmlqbnzy+nBw/H376ejw8+/k5eji4uTs5+X4cHrxcmJtbmZcXGBgWF5tZFpdZWFbW1tkY2Npam569e3j3NTR0NLW2d7h4N3vbe7m737u6uTf39ze4OXm6/b/bV9YV1hSWV9qY11rfnZxdezt7eHe5O7r8nh2bv7z+Ozv8nr46+5ya25qZnNwfPr59PtycO71eG1tb2ppdHFxa3J0bmVlZF1fa11cZ3BqY2Zz9/7z5dvc3NnW3e3q7nFmbf/09Ono7ufc1tzf19XV3NjX3/hubmBaWWZmW1xjZmlxdWhtcH1tb3VsYWFgaG967Ojp7u/r6OZ3++/78+3o6eHh5ur07nR6/XlwbGx1/mhdZ2ZhVlRXUk9TVVhWXmllX2VtYmnv7eHXzs3Pz9LV2t7ucm145eDl4dvX2dre3Nvj6Oft8O7+aF1ZVVZdX1pbWl5ubmb73+Hq5+bi8v5+cm567+jp6ev0/e38aGpwcmxqbvr+dv3+bXFyc25tfHp1fPp7b3559G9gXVlXV1ZYXGBfaWdgZGhmanHm2t7a0trl6uXwbGR88e/f2djV0c/P09XP1tnY19rm6+5sWVdcWVVTVVlYWGJfZHf//vR6d21kZGhqfvTp5Ov06eT7cXzu6+3f2+Ps4eDu+/T8al5qaGBgbHRlXmV4Z11mWlFPTlFRT1VhYWBodnVpbO7q6NjNzdDT1NXe7urz+ujf3d/b09DZ3NTa5uff4HppfftfW2BeW1leWlZcY1tcavHq493Z2uz7+Pf6fPLk4v568vpuaGpoZ33w+Xz7+nRsb3t8Z27/al5ifPxwePft9vHr92xoZlVOU1hXV2RlXFtoc2Vndvrx5Nvb3+Po+vx97t7X1tjS0s/MzM7W2NXT29/i5/9oaG5qZm1hVVVZX1hYWFtaXXb2ff//ZGdufuns8u30+e3h5Gh4eW7u3t/a5/XndWl4cO7/Z2JbXl5iZVxkbXpvZ3BjW1dSU1VcW2BgYmJedfT18/zm2Nva19DW9nHq4uvc0d7e18/W2tfQ2OPe1uL1em1mV1ZdcW1fYmlrWl1pbWNnef367N3revPc5+3f3uh49eVrXmx4Ylpl+fZ7dO94YWBgeXl67u15e+peZvF+5Wpv3+R7dfhoWVNbY1pUWWpmTlhtYmVcbubv29/faFf5euzQzNjV0M3R1c7I0tbNzNDZ1ehsfV1saldeYVdVU1pXVVVsYVNOX31iXHB7WHDZ3nTy2dDean56c3Dj3PnX3OHNT1zS4VZc2N/g41ZPa2RaVl5l8mpb8G1UU2tlXE5p6W1oV1h3e+3+ZG/p4Ovs2tv/9unW0vLg0NvdzM3O0tfV4unZ2m9c+Xz6W13vbV5sdfdfXmpuaWFu93hvbH54YP3oeGvm3XX5c/78WmT3dmHgdmJpcOl4WW7ne23p2+9obnx9XWRpeHb8d3R2Zm7uXFf5aWNfVl5hWFRsa1vn5v5yffr4duDp29DPzMzOycXIysnK0tbV1d/y5N7zZnvzXVZeYFlXX2peWmBec2JaW1RbWFVcXv/w8PHo7e/6be/4+erf1+nm5O7md3dnYmpq+25pandmZ19cXVRVWlNVXmFcWVlbY2RfZltiZGp7c3JqcvBvcHrt/XHo3drR0NHPzsvHyczNz8/a2t3t7fl39m197nJvXmrw5+F5bmvz6W5oYm9kTVReX1xfd25YW250XWFv7+fg29v4/PLm9WpsffVobHrh8+fi3eFqfmVeXWJtYmVgaF1YXFpTU1VcXVdYXl1nal1aW2NeU2L57//ZysvOy8TKysnHx8fRz9na9P7Y9fvx9+hdTmv2a3Lu82dk+m5fXllhUktMVlRVXWtgZdrka2/b6NrPx8zQ2OLa3+n05OxeXFFUY95+dfn14epQWXZbVVp3XlRZTlVWZP9eeWZZe25lc2P8WnRqUllaW/bOztDJx8zP5M7K0dbp2t36c213eGRe3/RgZVjgdmfn3/Hk6+hmWW1mX2RvYmBYVGJfUllZbFNWa2zZ0ODQ8N/a7nlV8FtX1/XO6s/nXNbc097a3OJo2udual/7XltYTU9gSltjWG9YcF5TaldcTkxUWnrg3NTKy8/KytPQzs3T1dnP09NtX3Vo619ZUFFkWHBoZXhn/WNjalZOYGFVfllnamJfX3d3aWtwauPQy8zSx8/a1u7y2/Dp3efe4O12+Hxy7WrydmBkVWRgVlxaX1tYXlpbXGdwaGD4YV95bW1sX11dYG/i2NjQ0svLz9DNzszR0tjOy+XxbHjs5fDtbHD/bfL06/Xp8HtqZ2lWUFBQT1JdVlVfW2RdXVxYVmbp5d3a19fl5tvm4vP22tri5uzd3fV85td09ntwfV5rXWNUTk9ST1JNUllYU1tmX1pWZF5aWlxXXGH94+bc0dLVzcvHy8zIzs/MzNbU4+Dc4u7n525xfHT+bFz7YW5kbH1uWl1XVmZiZ2drYnB1+2pcafL28Orb0dbd3OV77fX7c2745+v5bvzsdXp2cVtdaG9eVV5bV1hbWltcV1VcXG39bHBrZmhqbWBaWFhfdPXl293Sz9nUzMjOzczN0tfY1+fv6ePf9fjqdmlobXT+93H86vx3cW1dW11fXl5oYV1kZF1bV19eXGN8/u7n5Obk3+Pw8Obp8O7f3+Pl2tri5+TycmplYltZWllSVllWUkxLUU5PWV5ZWVhbXlRVWFdaXHrw5tjNzMvJxMHBxMTEx8jJydHU2dje4ev9eXFmXl1dYmNfZXFmZGReWlteZmhfaWhrY2Nncmdr8//8dOri5u3e2t9+9vRmX2z3cGp56enz++fsal1fW1JUVFVXWlhfXV9YWmNlam91cGpmZF9eWlxaXGBjavDl5NfOzM7MycvO0s7O09nS0tjl2trtd/TqeWdt+3FndO7xd3r7c21pcm1wXlljYl1cYmZlYGlra2txdvjt6d/f5u99dv5wd/Lq8O7e29/n6Of6Xl1fW1JOU1ZSUFlaU09VXVlWXF1ZVVZXWFhWWl1jX27p2tLPycXFxMLGycrHzczNz8/e1ej4619qc11tXFdwZmJaaHtgXWRye2lxenVnX2ttYWB2/3RwfvDo7ere5unk6vNuZWllY2Rpeftw8ers7fj/bWJeYWBbWFhbXV5damtoZV5qaV1eYV5UUlZVUk1TV1VaZuzW083KycrLx8nMzczMzs7LzdHb3dnj+/X5em1qdfb5a3n6dGZfanJnYmNfXlpYX2NbXWlrbmt07ev16N/h5fX6+25veP33/fbs6/3v4e/5fH5xXl1mZltUVF5ZV2FualxcXmFaU1ZXVFFQVFdVUVFcaWru1M7OzcrIysrJyMrOzc3MztHR2uPw9vT+dHz9b2tzc2hfXmViXGFsbWFbZ29jXnFyZ2Ndb3h4+Obj5Ovv5+x2bWlpaGh19fr48vDv8PLx/XZ2cXBubW1qYFpbYml3ev/5aV9iZ2BYVFVTT05QT0xMUltmdeHY1dHOzMvKzMvLzs/My8rO0M/U29rd4OPp6ur1+HtqaGJaXGFcX1xXWlpfZF9gZ2hiYFxhenPy5ufh6ezm7fj9+/P7/frm5ezp7vX4e3ttYWx4cGdfXllUU1pbXmVsamZfWVtbV1dOTlBOUVBRW19t7Oje2NbUzc3KyMjHzdHOyMrNzs3Q3dra4OPq4ebw+m1lYl5fWltfXl9bX2VqaXByamRmY2BgZWr+7PH28Pf8dXNybm5mZmx3+ezj5e1we/N0amh07PP9fndrXl9mb2hme25qZGJnW1lVUU9PUU5MTVBZX2396ufd2dDNzMvLzM7Ny8nJyMrJyszP09fW1dfV1+P5dGxfW1tcWlRSVVVXVVlbYl1ZZ2tjW2N4/HV+9PPy9+3d6uft9/h86Obm4eDm+XX2bmdhZXL9bGFeXVZRU1hdVlteZVtZW2BaU1JTVVBTWV9eZnbt7e7m2dPVz83Nzs/QzMrLzMvMzdLT09zd29bY3uDo/G1qZFxXWFxfXF1jbmdiZHpxX2ZzeW9y+uxzc3j0fHFsevtoZ219enzu3t7e5uHyaWVnbnB6ffx6bGdqZmVgXF1fYW1sXFtXWFJPT1NRTU5aX11ebfdw9ufY1dvZ09LV087LycnJxsjIyszP19nS09zc5O16Zl9bVVZVV1ZWWFxcWGBdYVxfbG5kbW1sa211ffdub3vv93z66+/66d/d297r7G5jYXBmX2VlZl5hYl9aWVxfXmVwblxXWFhWVVZaXVhca3psefnv8vPq3Nre3NbS19bPzc7OzMrKzs7P1d3c2dvj49/nfWhlZF5aXmNjWl1jZl9eaHduXWXu7mdsff1qZ216X1peaGpdZHr4+fPj2tve6uppXGRzbGJlcf5naG1zYFpidWZjbXBcVFhaXVNQV1hXWF9yaGdq8ux4duvc7vXe19jY1M7Ly8rHxMrQz83U2trW2Nze3+F7amxqZGBfaF5YVVxjXFtocl5g/u9rY2f7+2lte25hYnD+bWh08Pb+69XS3+/sfmJeX2FcWFpvbWJha2hfYm7tcGBdYFlVVlxWTE1YW1xdYXh3c/Pe6Ovr4d7f3tbU29rVzczNzMnP0tHQ0dfb1tTd4+Df73BqfG9tZ2FhW1VaY2FcW2NrdnP99nhre/dwZm1zZWptbnRxa3J5+uje3eLsffxyZFpeZGBeanhpamtxem9x7/NuX2JgXVlWUk9PT1dZWFdibnv97OXn8/bm4ePm3d/e28/Nzc3Ozs/R0tXY2dfR19rc3ej0eP7z/GxlbmZgYWZhXVpfY2dmY2drbmpucH5yZGhycHRsamhoePrq5+Lr5ufnfW1rZWFdZHN7cHN3fvft9/5ua2NmY15ZVVZSVFNZWFVYXGBs9OHk6t3c3t/d3uTx5NvZ1s/Nzs7Qzc7P0tfZ2N3h2d3td334dmVw9nRfaGppXlxiYV9eZGd7Z2dqa2hqb2pubm12amNmZG1lb/Ps9+/o6ntmdnxnWmRwaWVlZ/z8eHv37m5s+ndbWVtcT01SXFlWYGVubXvm3ebq39nh7urj7nfw3tfX087M1NLNzM7W1dLX3tvZ2uz47vVrdvfp73Z28PNgXWJnWVRh/nBgYnZqXmP992dfYWBbVlljZWFl8+Xt7OHefW559HBld/Z2YW71825u/vlxcnTua1ZSVFNOTVFaU1BWYWNnbunc5efa2N3u9elxavLW1NLOycfKy8rKz9Xb1NXd49ngcWdte2Zld/dsZWpwY15fZVxaX279amRl/3ltbuzvd2tqalxaXWtqa3Pr4d7o4+b3cWh3cWl1+2dkbntxcWlz9Xh2d/5kVU9UUk5SXGVeWWFybHfv6fHp7ebk/HRqaWly6dna1MzKysvMy8zT29rX29rf3ul9b3l8ePrj5f51dnVmZmBeW15nc2heX2duamVp/nBeWV1aVFdeZmBs8+Tl6+rq+G5sef3r5ufm/Pbw/WxldvL+cm9tXlVRT1BOTVZeX11gc3xla/Pz+O3l6/X+8/537eLcz83Nx8bIyszLz9rV0tnl4+Tpe2hubmtvcvrza2h1bmFgYmRjY2lpXV1gYmZlaff3cmlqaV5YXmxrae/g7/717nhpZmx1+O7l5ev4/31sY2BxeGpibGdcWFZWVVhaZnRyb333fGFv8fT6cvPtem/3+3j04NjV0M3JyczOzs/X29TT3eDi5fB97OXp7vDn5+37eXppX2JpamBdal1TVVxeWV5gZWdoaWthW1daaG387unq/nb6/HF46+fn3dnY4fL09HFobflrXWNjW1VUVVJRVVpgaHV4e3hsZ2hwdW397Pls++fq6t/Z0M/NysvLz9LV0tbX2Njc6vrx9nb97/b++vHs+Hh9b2NfZHtvYV5iX1hlZ2ViYPnr7e71dG1hXGBkZG58e2xfYGNeXWdv9+7r4+Xn7Xh0c2pobXFhWltgX15gXl9mc3t1eu72eHBraXj5fHNrcGVp+O/w7N3Uz87Ozc/U2NnV0dDT2d7l5Ojl5efl493h8OrteGpuZ1xbXmlcVVdXUVVWWFxeZnV7/nplY19dXWl1+vfw73pz8fH37Orf2t7f3OHsd3V3a2hfW1pYVFhZWVhaXl1lZWV1cGpxdHv+6Ot9b3D7+PHp3dna1s/NztHU2Nzb3tjV19zb4Obs7fPs6Ovn5ufs6O92YmVlZF9dXmFaWWFfYGp5c3dscHFscF1cWVtdYGZpZmRjYl9idPz67d/b2d/i6uz8ef16ZF1dXmBbXmFsaWlobW1vcnBtZW/69WhvdWlfXmRqbv3o39zZ0M/P19rb2tza2djX2NPV19rZ2Nfd3tzY3eTz8/5mX15gWFJWWlJQV2FlZWNkYF5iXlxXXGBfX2Fqcm1tcPzvfe3k4Ojj3Nfa5Ovr/GRjYmBbW1tXUlZXW1xZXWNoZ2lmcnh5/ujye27892hu6Nzb3dvY29bS0trc2d3o5+Le4OXe4d3j5t7e6ezf09bk7vDoeWhlZF5dX2ZfZm/78/z2fWpfXFdXVVhbW1pXVl5pW1ln9Px6e+De49zZ3ePn5+xubW5ya3lqb2pfaHBoXmFtdGFfcPVuaGr9bl9cYlxXZHTt7/Hl3uXc29jZ2djX2eHf3trc3trQ09fW1NXb2dLW4OXs6m1hXlxaV1ZWWlxdYnBraV9lWlJPVVRUWFtbVl1mb2l849rb3NvW2d3d3Nrk6+/3bF9eaW5nXWFpYFtZW1lbX2RfZGtzcXJ9fWtjY2RoZnrt4N/f49rW3d7X1NPV19bf6Ovo+O/q4+Lp5uHf3tvb2dzi4uDteGFgZWJfZm1ydHL38n1rZ1lXVVVWUlNUUE9XW1tca/Ho59/h3t3f4t/b3uHr7fpwa312dXr6+XV5bGVfamllZ21wbmpub2VbWFpYWFpmb3B37+fe393Z1tTS0M7P2t/e3enk2trd3NnZ29jT1djZ197peGVdW1pcWl1fX250al5kY1tTU1dVUE9VWFBQWWJgXvnf2NvZ1dHW3trZ2+Pq7O1tZWlsZl9nfnZpaWJaWV9iZl1p/fttefx1XldeYWRfa/fm7fHc1t/e2dPT2NbQ1+jo5+t1eOrg5e3l3t3f3tTP2djU1udsYmpgWF1tc3vz7el0bm9mWldWV1JNTk9NTE5SWVle+97l7OXX1urk1tfg4+De7nL79Pz17+bj7X51b2VmXmppYWt0al5eX1tST1VaVlphfHtx9N/d3djRzs7Q0s/V3OHc3eDj3Nfc3dvV2NnTztDX2972Z1tZXFZWWmhpbWptZl5cXVpWUlRaVFBQVE9QVF9sc/nd2drc2tbZ29vY2t/s9PN6am9+e3x1d3BpXWBYWFdZXWVnbnFkZVlbWlxXX15ibXvu7u/p29jU09DQ0djX2t7i5uPn7O/n4OHn4d3Z29fU0NLX3ux7ZGVeYmdufvvt9m5pZWBfWFdVVU9MSklLS05UWl1hbPr19/Ll6eDg3dnb2t/p6+Pk5uLe4OHu5uxxbmNdWltcaGxoXFpaWlRYXFpbXGNmaGFx/fXk3dbPzc7R0dPX19vY3Nvc3trZ3dnU1NPV1NLT2ud2bGddWVpfX11cY2BcXF9cXFpXWV5XTk1NT09TW2Vu+Ovn5eLf4OHm5eLc3N/q6PX96efp6ejqfmxrZWBaVlRWW11oZ2BgY21wZWl3bmVqc3Ftde7s7Onc1dPX29XY3+Li5eru5ubo597e3tvZ0tLT0dba3u7t7XVmb/5yZ2d0dmxxbWhjXFlXUEpJSUlLTFFcX2Jtff5+/PHt9Ojd2tjb2tba4d3a29zd3+by9O39ZVpYVlRQVFhYVlZZXlxYX2pcV1thaWNkfuPf29LOz9HT0dTW1tTS2N7c1trY09bZ3drX2+Xr5+9yZWdoXlRXXFtZW2hrXl5vcG5oX1tUT01PU1dZZXh9fevi6ff88O7r6uLi4+Hd3d/n5+Xt+//w83t6eGtdWl1cWFdaYWNlYmxzbWJkbmRdX3Bwa3jo4uDg3Nrb3uTi3drh397g493Z19jZ1dTS1NbZ1trd4ujy9fduamhudWxscWtkY2RdXFZPTkpJSExPUVJXYGVoZ21vbn3q5uLb1tLO0NTU1Nbd29ze4+Ld5O97Y1tYVFRRV1hVVFdcW11aW1hYWVpfZXD97N3a2dXV1NrX2tbS1NfZ1NDS0dLV19va3dvd5+Th4e98fXNlZmVmZ2ZnY2JlaWJhYV1XWFdSUlNXWFtgZGZ0cnRy/37/8vr17+Ha2Nra3ePk4eXq6u/48/H+eW1mXl1dW11eXl1bXGBiX1teXltcXm51fffg3N/k3tre49/c2Nnb2NPR19PU1trb19fb29nY297d6PP48Htye3NxbmdeXVpVUlBQTk1NTU5OT1RYWVdeYGhnY3nr8Orf2t7d1NPS1NLW1Nbd3NXa4Onn8WhjbWlYWFhbU1JUU09PUE9RUU9VXFVabebl6d3U2NrW09LW1NHO09PQzs3P19bT3d3c3Ojl3t7u9fP3+nRrbX5saGRoXVlaYFlPUFVTTU9SVlVZWVtfY2Fue21l/N/s9Ozc4ejc1Nre2dba3d3f3+TqdHryfmt8eWZgZ19XVFZXUVNUVVRUVlpcWl9t9vx86dfb3trW2NjW1NbX1NTPzdDYz8/U2NPS2uTd3O/34uX8e3X9ampjWlhdWFJUUUxMTkxMTVJTUVVbWVlfaG9ndOff4eHi2dXW3NTR19fW0tja2t3u8HZtbG5pXmBiYFpaVVBPWFNPUFRQTVBYV1trdf325N7Y1NLW0c7P1dPQ19bQztPUz8/T1NXY2dre7Orr+3X+cmlpbmJcW11dXWphW1dXVE9PUE9SVlNVXmNcXWZqZnnr5vPx6OXe2dnb1tXV29LQ2uPf5nJ3+3NraGdhX2liXFpcV1VYWlZUVFBOT1pZW2v4cHvm29nc19PQ09XV0NLa29LQ0tHNzdTW09be3uLu+vhrZWtsX15kXlpebmBdYmRZVFhXTk5UVVBWXltdX15bZn3+9N/Z4OXZ2d7Z09DT1dbW2Nri8O3xa2dxaGBeXlxbXmRdXV9ZVltdVlFQUU9TWV1l9ev66drZ2tfR0tjTz9HSz9XZ1M/Q0c7N1NrW2uHj5v5zdmxgX2lgWV1sY2FxdGZmX1hQUVFNTU9OTFJWV1VYWVxjdPPv4t3c2tXW19DO0tLPztTW1uP+8et1dftvYl9gXlxiYVZWWlRPVllOSU1UTk1ZXl5t8+7l19rZ19LS1M/Mz9LPzs/OzMvMzc3T2dnd6+n6a2xsXVlgZFxYYGhfX2lnX1tYVVNVUU5QU09PWmJYV2NpZHTf3N/c19rb1tXX19TX2NTT2uDm9Wt493dna2xhXmduZF9dWlhbVFJXV05OUlVSVV5nbfzr5N3Z2NfR0dTUz87U08/U2dLNztDO0tvh3+X07PhubWxlYmx9Zl1temVfbGhZVlpWUU9OS01PTlBcYFlcanpu8d7d4N3Y2tvZ2djU09TT0Njk4+V7bfjub2j8/mlobmNeXVhSVVdQTVJVTEtPUE1QXGRge+Hh29LO0M7Mzc7Ly8/Szc7TzsvM0dTY4/X1c2Rna2NnentpaGxhXGVuYF5lYFhYWlVRTk5OUlhXWGdwZm3n3OXk3Njd29jd4ODj4tjV2dza3u9++m1ka3lwb/z3aV9hXlhaXVhYW1hTVFdPTlRYVlZgbHTu39rX0M7PzszM0M7O193Z19rV0NPZ3OH3cnNlY217+fDm7W9rdnhqevtmXWFdVVBQTUpMTk1QWVZXZXt0/+Pd5eba2N7e3+v26eDh29TY3dnc9H3p7XX96u37+HReWlhWVVdaVFJWVE5OUE9NUlhVWmz++eDW09DMzMvIx8vNzM/Z2dDS2tnS2ODp+WJeYl9dbX5vc/V1YGBtZFxmbF5ZXltTUlRST1JXVlxqa2r55eDg19Xb29bb7vH5b2798O3h3eHk5ftpdfl0bPzr83R1dmhiZFxaYGBbWlxZUVZdV1RdYF1mffXx49rZ2M7LzczN0dfa3ejn3dzh2tLe9vDzbWh2+fzy6+zm4e5++u9zY2dwX1RUVU5MT09OUlZVWmZkYXbr7OXX1drb2ud89ev+d+vf3tvY3erk6Hp+5fBt/+p0Ym9rWVZdWlJYXFRRVVZRU1pXU11rXl3+5evg0s7MyMXKysjM0tPT2d3a2N/l5n1iX2JdXGZvY2L/7ffw92948f1qbv9jWlxeWFheXltbYmRmcHxw+97c3drZ4e3o7WhmdmtlfOjw8+bseHX5+27+9Xh97fVwdX5qXWdyX1tlaF1eYVxbXl5XV19cW2j9+unYz8/NyszNzc7X3tvc39/e6fT1dGJibWdjafr89N/e5ubi6fLu9mpiaGRaWVlST1NUUFJaX1lba3P+5d/j397f5uXo9XX47PLp39/i5eXk7Onqe3b5937+eGhmY2VfW11cWlxdW1xbWVlZW1pZXWBkdujd19DNysnIyMzNztXY2tve5uf5bmVjXVhbW1pievr59ezq8uzt/3Z0cWpsbWJdXl5XV2BlYmNpb3z26ufl5OTm5+vzcmxtb2148u/w83t99vp3a3F3/vl+9/j9dnj9dHRzdHtwaWlnYV5bV1ZXWFdbY2d06d/Z0s3Mzc7O0NbZ2dvc4OPp8PdyZ2loYGF28+3m4+De3t/l7/f8cmlubGFZWVlVU1NWVlhYXGpwbnnv5+fr7e/y+vv3/O7q5t7e3uDe4efs8/d5+u96dv54bGtnZGFiZmBeY19ZWVpXVlZWVFJbaW7539zZ0szKysrJzM7Q1tnX2uTr7fxqZGRcVVleX2hzfnj48e3r6ul4cHxtbHp0Y19mYV1dZmVibnd+8Ort9Ojn93L59mVkaWllbvD5+O3x+/v5eHL9fHj+7ez56+j2evbtd2/+fnNtZ15cW1VSUlJQWGVucPrk393W0NDT0tHX2tnc3dve5+jl8HtzdWxjbvv47ejj4urr5+js/GtocGRdXltXUlNXVVdeYmVsefHp7uro9P19+vP6dHb/e33v4d3m5uHm7vPw93p0cnt7fn5vcGthY2RjYF9gXFpbXVpWV1VXXWj+6d7b2tTPz8/MzNDS1NXc3tzi7PX1e2lpY11dXF9jeXhz+/Dt+/Dp9HNrcHRwa2loXlxeX2ZrcPzt6ujg4eLk6O35/XRsaWJdWl5jZ255fndz9vT+ff96c/3r6Orm4ef1/X76+3t3cGtlXVxeWlVVWFxdZXzw8eri3drX1tfa29rc4Ors6e779PDz+/f6b254/u7m4OTm3d/n6e/8cHNwY2BgW1RWWVpeZWdocvr9+Orq/Xv6/3N0fnRra2NldPr8/evn7Ojf5/zu72146+r49+z2c3B0ampuYVxdXFdVW1xXWGVnZ/Dp8OTZ1tnV0NTW09Tb2dfk7ujseGx+fWdmbmBcZ2dfbO/1d+/l93nw8mx39XRoaWlfX3V+cfnm5+Td4ezi3ul7d3pjX2hjWl1fXVtfZGRv9/R8/O92b3lyb/De4Ojg3OLn5+x+8+xzYmVkYF9iYlxea25tdH346uHl6efg3+fi4uni5O799/Pz8O7q93p8fnVwe+7i39/d3Nve7e76bWtqYFlZXF5fYWlobv58ff9+9fz+e29tfvZ1dXVydfz9dv7q4eXn4Onv/W9nZXH+/fPw7O/q5X1qaGdfWllYWV5gX2Brdvzw6+3r39vc393a2tnb3Nzd3uv18Xt69vF4a3JuZWFdW2Ftbm375+Hj4uLq7+zxfXlyaWn66/795uLq9e7s7Ol+bGxrY15lZ2BeYWZgXmFna3b9c3vz9Wxobm536+Tj39vc3djb5ufrdmFhaGFgZmleX2lmZ3V5b3rr73b85/J98+/w5+Hu9Ojl7ejd3vP37n5wa2958ujs5t7a3uTe6P95d2phY2BdYW1qYnR7ZmRuenr6fW1seHppbfhxb/3zeW7u6Ozq5+767PdlY25rZHfr6+3n5PHv7H1ubGJXVV1fXF1tbGl6d2755ery5N7m59zd5OLg5unj7Pnx6PB37up6aWlfV1leXV539Xvs3d7k3Nnk7ev0cHvx/Xbw6PP35+t1fO39b3Z3ZV9nXltgY1laYF5cZ3l3fPj4fXl9bW357vfv397d2tfc4dve8/v0aF1mZl1cZmldXmJfYXR6bG/+fm5x7O/86ePt8eLh49/g6eji5fh6dGlncHV77Ojp6uXe4uLf5/5xeWtmbmhiZXZtX2t2a2l6em16/HJqdnNpa/12Y239fXju6e/s5+9zdHhqaXV+evHr7u7n6ff483tkZGxmXl9kY2dqZWdtbG5+7u727+bn5t/f4eLm7PPt6/H28Pn98fJ0bGtkX2Bta2l89fb05t/k5ufq+fLq8/r1+//47vL++u99bHd4bGZnaGpsamliX19bXWRjYmh3/fz/+Pn77vDx6uvw7+Ph4d7d4evm63h1d2VdYGhfXWBmYF9rbGhubWZr8evs4tzqde7k8fjo6/vw7O3t5+1weuvt9u3ufnvv7fDn3+5y8ut3c/l3aWZoaG18cGN17n5w+/1paHB8c37zbWJucWRpfnBoeOvz/Ozqe/Hf7H7v7nZu8+x4fur8af3ybmdsY1xea2JcaW1eafl3bX3z+Ozd2t3Z1+f95OP4fPp2aXfzfnry/mRy6ntoe/Rsb+3r/e7g93Lo53t95+5w/+ntfuvn+/Dl+2t7/Wdp9PtlZ31mWWJkW15lYmV97/976eTv6d7teu/ybnPr7HXw3/D33uF1b25hYGdoXFtub15memZgbP599NzZ4uHa5e/j6mtrfHNs/O9+feXg7urk6/b3+2927O56//F8/u/4b2/4d2v473r65OT18Ov5c3Z3aXrrd2RocWdga3BjYHZzaXn4dfzg3uzu5et1dXRka/n9cH3m5Oro6f5pa2VeYGJfZm5rX2V3cG735+Lb1djf3dvg6e39aWdtZWJsdHB16+j77uHtcHT5dXT1+XP85u188PL57O3v8+re4+3m6fn79/1ubnVxd3dvZGhtXl5mZWVnZ2Fkb3779+rr9O7u+Xt5fHn97e3t3t3k6ubm+3ZtX11dX19fYl9fYGVsbfDj4d7f3d/i4OXv+vxwamdkZ3f+/u3s6eXu9Xtw+/j7/XX57/P07fT27fXv7/706e34+/f4em9ycHP5+H18d3p6bm1uam11aWdpZ2hu/vb+8+v2ev56b3d9enb/7urs5+nr6+//amdmYWBmaGJiZ2dlaXD95d7f4t7d4eHj6O32/GxjZWZlanBzdH74/HR3fHT16vf36ujt6+Th6Onm9f7v7PDw7vt6fP14aHn9dn77d2ttb2lncHJraXBmYWhlZWxwe3v87/j25uv38e71/e3o6uri6/jw92pmamljZmtkXmFiXmBwe3rt5+3x5+Ln597m8u7ydGtycmttcG9ueH1uePTu+vbr7/Xr5+zp6PL49PD8/e3v9/L3dHNzb2ly9vf+9PNzdH1zb251b2lwcmZhZmJhanJxc332+/Tm6fLs7vr17+/v835xbHNza2xzb3H+dm1pZ2hhaX3++e7t9O/q5+Tk5+3z7v5pa21nZmlqa2tvc3Fy/fj57urr5+Hi4+Xo7vPs7/nu6PH58fd4dXp8eXn8dW5xbGxweXZveHZwbm9rYmBfXWBudnT27evn4+Hj4+br6+jl7fT6b2pqcnBobGxmaGtsZ2hqZmlucXL/+3h6+/Dr5ODj5ent9/17cWxoa293eXt8/vjz7+nn6+ro8PXt6O3u6/D08PDz9Ph7eXNtbXV+eXBvdnp++vj+/vXv+fd+a2ZhX15kbG52e3l+7uXk5ODm6unt8vt9b2dkZ2dqbGxtbXz5/n18bml2eXB58fR79u7w7OHh6urt9XpvbWNkZ2hoZ3F3cXZ7fvfq6u7k5e3p4+To6ebp7e3t8unj8Pt+fG1qbGliYWlnaP5+e/To7Xz59HRjYl9bZHJy/PDs7ubd3ubg3Obq5Ovz+XxsYGJkXl5qaWNwfW9ra2xkZm5lYHn6bnb18Ozj39/l5enu7e54dfX/bm54fHr883Zv+nps//F7fPLyfv3p8n3t5+/u4+x7d3x4b3l+bGp5c2197+7r4eDp7Or7a2hoXl1jZ23/+fvu4uHs6eDm8Ovr9/92Z19eX11ebfxwd+/9cvz3cG97dmhu8P9v8+767+Pl5ubp83z8fWtufW1mbXlsa3f+cnjt+33t8Hv27vr56eXp6+Hh6OPl9f75fGlodW5janZmZnv+ee/j6e3j6XVsdWZfbXtxfuvu+ezi5evg3ezu5vVscHJkXWBjXmJuZmV3fmxv9HZpbXVpZ3V7bXbu9PDd2t3h3+Pu9PV1cPT7amt7a2FocGpr9e56/fpnY3l5cf7s6u7q5Ojs4+X69uv6eXx9a2ZydmZs9/304N7k4eXt/nBuaGh8/25seXN2+uno5t7g8vrzaWRvbmZnbW5qamhkaHl3a3D2+21vem5pcHZye+3n4tna5Obl6/5zc3RvdW5iYWBfYGZwd/vq5f1qcG5tefv36+Xl6urm5Obk4+/57uv3cG1rZmlsZ2f77PLw6ejr7u96bW93dHB1amd08fTw39ve4OHudH78b21xcWdpaV5aX2dgYm5xbHh+a2RvdWlt+fh85dnd4dzd5ufo/XB+8W9ocGhfZ3dqaf3veXD7bV9pfGtq8uv2++/9eubd5+jd4fHq6nRpeP1pZv18bezk9v3o4Ozu6P5pfPZoZnJvZHP09uze2/H+6O929vBvan39ZmFjXFljal9n/P1tbG5nZHJ+aXDs8vbm3ufp3N/w8Oz+bf5+Z2l+emVrdm1tfntoafx1aG14a2vx8Hd58vn55dze39re7/LweXN8fG5z7vN0fPt4+eTm8PPtfGhtdWlt+HVmc/Px7ebl9/rl6f7z8nh4e25jZG1kXF9saGv/dGdmb3JscPh9euzxfPjt6OXm6/X68PZvcHpxcX53dHh3dGtqcHJz+nRob359eX18d37v7fPm3eDo5+v6ffX2dnnz9X75/WxsfvL89Ojs+PP2cXT19HN1+fj28u3w7+bo8vTw+3R9fWZhZ2VkZmVfYW9rX2NqZ2NscnD66/P69/b9+OHi7uXe6Pfs6Pfw6fhseup8aG9oX2Vzb2Nob2ZodHVpcPN8d+7l5+Xe3u7q4Obr6uTo5+Hu/PHxenX5/HP++W1na3Bqb3htanvw/3fz6/Ds5/N78On5evV7bnb7c2t9/GxoamhhZm5nYW36dW57bGNpe3hy9evu8uz4eO7q+Hj27vXu6fN4fvl8dnl0bG9+b2l7/nd++Pn16Of2+u7vevPr+Pzq5+/09Pt1/e1+eevveP3v+Hvz631y8Ov47+v3+uzn8Hv4+m1zfWtmamVhZGprbXlzY2BnZ2Zqampze35ydPh0aHj4/O/m6O7v7O/t4Ol99ejt9vDt/G9sbWViaWdhZWlrcP77ePns6+7l5+zo4+bo5eTn7O3t9fj0+P718/Hw9XpteHlpZ3V4cHJ5fn7w8fbv7/P+/PX+d3t++3l1cHB6c2xtd3htbnlzc21qamtpaGpsamZlaG5wdXV0/fjy7/Lo5uno5+fj5ent8fx9cWVnZ2lvcP34/e/q6+3v8ezp6u7u6+r1dnx7dP/7e/3u7O/u6vD38PD5ent6+/D3efvr7Pr16u/+/H1tbHl5b3JwaGltZF5iZmZqevxvdfpvY2VsaGpwcWlw8v11+/xwfO7v7+fh6Ozk5O3n3uf8+fZyaWVfW11mZmz89f/y7n177OXm5N/h5uLk+XN8e2549/l+7uXt9O7u9+7ueW17fGxodHNxe/X08uzr/3VzbnD87vL48/R5bWZjYm5wbf7v+3dza2BiZ2hnaGloam5qZGx1bnB8/3x+8Pb77ubm5t/h5+Pk8HVtbWlpb25v+PD9/vxxc/fs6erq5er0e21tendy++7t8O7o6ezm4+7o5vHu6vpucPrz+Pbs7erj73t8cGhrcXttandtXltcW19oaGtz/ndoZmdjanBucn59c3Z6cG/87vp57u/5+fd4dfrq7Ojk6Onj6X1tcGlgY21uanz6cG17fvzw6uzs4+Pu8vx5/ezt9O3o6/n37fH16+vw8O/4e3VvY2d8/nj17O3n4+vz7+79dPz3eP75cmhpa2pudG5uef5rYGFiX2JsbGxwdmhlbGpqevf+ffPv+Xh5c3T58vLr5eLi4+Tp9PL2c2tsbWpubWZpdnFtevh7+/N5a2xvc3vu7O3s5enz7+bj6OXi4+Tf4e/z9Xn87u717efr7ufm7PLzdmxvcm9pZ2JfY2lpaGtraGtsZl9ma2docft6fft3dP319vDs7u7q6fZwbnFucXz+8uvs+nr29Xh7/nJpbW5oZGlrb371fXb48/f9/Xhz/vDv6uDf5ejn6+/o6fX98Orr6+z9b3Bycnv39PDr7fvz5+Tp7PD19fT3enr7fXn9/HVrbmxjYmNkaXBvam58fWlpbm1rcXhwffPu8fb3dG3/8//87Ozw7/D29e3tfXn1+X58dWpoanFubHBsam1rYmBrcHf57efo4OPs6efp6unq7e/t5unt6+3v7e/37+fo7/Ds7/Pq7fr27vpwcW9tb337b29uZ2JiYl1dZ3Fv++rye/t7bHLy8nVz+fX07Ov1fnp3c3ny/H32fm1scXR2eXZzevL5dXp3bm95/nlvb2tnZ2lqc+7t8+jc3OHi4+np4ej48/V9bXN+bWt99Xh87fD58fD7/u3r+O7l6Ovn6vf37Orv8Oz4dnRsX11kZGFmenx7831rZGRjZnBvZGRxc2pv+35weHx+8+Xp+/Hr9/np6v968PD57On2++77bHJ2a15eXldYY2ts9eXn597f7e3i5/ru5/d8fnNpa3h7eO/o8u3g4u7t5+vv6+v39ubv+/DzcXD49Xp8+XBmZWReYHFyb/fl6Pfu7nRpbWVfY2ZfXmprYmr9/m51/Xr/9fJ+fPT3ffLye33w7vfu5Ofw7e55eHdoXmBkYGJt+ffr397g4ufw8/D+bm58bmNhZmBkcnv67Ofq6uTj6Ong4uno4+Pl4ePp6ubt9/Hu/XZ9c2hkZ2diZmtscPf5bGdlX1tbW1hYW11bX2lqdPLs7e3p5u3t5+vv5+Xu7+vr7ejl6uvm7Xt++XJpZF5aWFteXmV98O7j4Onv7u98ev51bnh3aGx+enrx5+bn5OHm5+Dg5ePi6uvl5e3t6fB3/Pdze/D+dXd2bGdrbGdq/vx+9fptZGFfWFVZWFZaXlxhcHFt/u70fvDufvzq7O3l4ujo4eHt6uHl8u/ufP72dmdpbWFcY2djbe7p6uXk7vP1dWVqdmtkbHBrb/nx9efe4+ff4efk3N/l3tzg493j8ejnfXX48//67fd1fn5rY2loY2l5dG1zcmNdXlhUV1tXV15jYWt8e3b07vf06urs6ufq6N/b3eDh5+/r5vH+9vh4dndrZWRgXFxlbHbw7vf37u33dm1qZGhtbHD8+Pnz6+bl3dvg497d3dvd4+Hd3+Tn6vD9e3h0//bw8fn6end5cmlmaGxsb29udXdsYl5dWlpZWFtdX2Ztb251/3hyeXx+9O/u7eXh3d7l6O7x8vn49/Hz+f14cXRzamZpaGd4/P/16+3z/n1wa2tnYmZtdnr07e7q4t/j497e4N7d393Z3OXk5vX07vd9+/P49uns+Pft+21xbmhkY2NgZ21iXWFjW1peXFhbXV1hbm5odPxsan31+vTp6ebd297h3t/t6uXu8u7t/v3u/HF0e2Zga2lganlweO3reXP+b2Rla2Zo/f548OXq8eje6Ofb293Z19zd2N7u7un7bHb/c37t9vrq5/V89v5oZWpiXWNoYmNtZV1fY1xZYWRbYGtoZ3F0ZGRsamRy+3Z86uXr593e5ePf5ujg6Pju6/576eTv8+95Z2hoYGd6dHP36/X9/nhoZ2tiZHB4bXrr7vry6eru5OLl3drc3tzf6+vk7frx8nNx+Pj36eTq7ev2b2lmXlxhY19gZmFdXV1ZWmJiW15oZGRsbGVma2dod/X78uPk6uPc3t/d3uDd2+Pv8fN+fO/v9/j7bGVoaGBkc29odvl4cHlvZWtwbGl4e3B77fT57+vn6uLf3dvZ2t7e3ubo6O/+//5wbW92d/Pw+fj0e2tpZmJiaGpoZmtoX19fYWBla2dkaGtsamthZGZgYWZubnjz6urn5OHf4+Ti4ujw8/d9fvXr7Ozr7fxzb3Vzd/7/9fb3/X54cHN4b2tqbWtod/x+e/Pu7Ozt6eTf4+Pg3uLl4d/l7PH3cWtvb3b48PTt7/pzbmNfZGZhX2dmX19iYWFkYmFfX15dYmViXmNsZmh1+3r56err5N7g397f4N7g6PH0/HJ38Oz29+3zdHR7/nr/e/75fnBxfm5rdH1ubHl6bG59+Xz76ebm49/i3dre4dzf7+3j6H337PhvdHZubnx8fHpxaWVrZ2FmcGlianBkYmtuaWl1bWRgYF9jYl5eZWtkaHv6evHn4urj3+Dk5eXq6Oz6fvt4cf7p7fDq6X5xfPh+e/Tz9/z1/PTyfHR9eGlpev5ud/Hw++/p6u3r6ubj5OHg3urv5+Pq8Ovn9254/HtydnV2bmplaGZhX2ZpY2hwdmx0fn5sa2xmXVpbW1xbXWRraGdx8vj86+Hn6uPi5Ofj4+Dm6/Lw833+7enr6+Xm+//4+m5y+/b//vv88/b6ff5saG14cG50+PZ79O3t8+zl3+Lg393i7fHn4u3p4+bz/Xp6bmhnZ2JdXF5hXV5fZWdscf55b/rxe21ubWpfXl9hXl5jamljbfny/e3n4+zv6ufs7Orm5/Hw7O17evLm6e7o5vb//n79fPLq5+nr6OLq+fn5cGdue3ludvz+cHR9/Pv//PTp6+zq5uz27eHp7u3n6PD69/N6cHBwZ19fZF9bXm19dXvs5/t+9/5oYWRnYFtbYmBaW15mY2l7+P706ubq9O/k4+jl4d/k6efi6vft5ufx9Ozp/HB0+351/eXq9eri7HBx/X1mZnN+bmx593119OXn8vDl4PD45+Pu7OLg6unj4Ofz8vH3cmlrZl1aXFxYVVxoaWt96ens8X57d2tpaGpfXWFiW1lfaGhqffjz8+vu7+3u7ejs9fLo5fL47OXx8e3s/Pb77fN4d/Lp7vTg2eLr5uN4anb1c2Jq/XZmZG38cW715O798eT5aHjn6f/p3uPv597j7+jj5fF1cXFsX11gXltcY25v/eni6X1ya21mYF1jYFlWW1pUVmRrYmT/6/5y9+fs7+Pb3ers3t30+ODc7Pbo5Pf+6ub9cPru93j26Ofr7ft9bWlsbWxrbGxoY2Nlbvnu7enf4u367Ov58dzc5ejb2un25d7s/PDscWNlcmJXWWBgWVppc2hx7vBoYGx1ZGBxemVdXV5dWl5paWl0/f95e/v57+bg5eTg5e/z6eXs6ODqe/3o7Ht38PF4eejf5uvg3u509+n8a3T1emhqcmRaX3N1aXHv7HJsffH9+OLc4Off2t/r6ufo5ufu7+3yfnVxbWRka21rZm74eGpqcGtiXmZkW1pgWk9RXF1YW3B0Y2Z7+XBv6t3l7N7W2uXm3t/v7N7g8/Xm6n1+8PV+fv349/L0/ntvbnr9+f36dW5uaWVocHRqbfj0+vLl7fvq3N3h3Nbb39zb3uns4+d1bPz1aF5mbGFcbPlsYGx7a11kcG9rbHBua2ZkZF5bYWdmYmZtbGlscW529e3t6uvs6ebrfH7n6Pr16O19evPxdG/y5On38ODk/37o6Pbz5Of8dPLya2RtdHFraW1oYmBmamZt8ePl49za2trb3uDg4OXl5eny8O39b3j2/3J49ftrZ21qY2BpbmJcXmJZUlVbW1peaWZjaWxtbG167unm4N3c3Nzc3N7d3N7i4+ru9vX+b3n/c3D+fnNsamhmZ3P6+vr98PZwand6dHD+/nBteHZqanb38OHd29vb2tzd3dzd4enp7fJ4cG1jYGVwbGx79nNtb3RtbXRzbWtvbW5kYWFjaGxxdW5pa2RgYGtwePvw7e7r7fHx8Pfu6OTl5+Xr9X59fvT5ffzt7/r16/B79+no8Ong5vh5eXBsbXhwa2ZnZF5aXGBeYnHu6eTe3ODh3tzc29zf4eTp9/v3/nd9+vny9fd5d29vcP9wZmhsZl1cWlhWWVxeXmVpaGRfX2Zqa/Tp5+ff3eLn39rd3drZ29zf5PD8+X79enNvdm5oZmxrbXF7e37v7vD+/m5vdntvcXx0aGNoY2NqeX7t4tza2tzj4d7c393d4+/zdWdma2ZfZWlrbXh1b213enZ7b212fWxlYmFeYGNiYWp5a2hnaGRnbXFv++/r7vb8/urm6Ojh4OLk4+rw6enx+fT3+Pv7c3r07evr6Orn4eHs+Pv8dXNwbW1rY1tZWFZZXWFlcO7p5uTi4d/d3dza2Nvh5u98eXx1bG99+fb39/z8d3J5dmtmbmthXF1bWFVWV1laXF1gYmVtcnh78ujo7Onn5eLe293c29vd3eLp6Ojx/Pf0/nN2bmpqb3F5dHv27ez69u7vdn7v8Xz8/HBiX2RgYmFocPn07OXf5eLd3eDf293k7O14b2pnXmBpZmhufW5w//lzefz0+v1+cm9saGNiXVtcYFxZXmplXmlvbWh3fX159uvl5Ojl39/p5uHh6+nm6vXq4+jx+Pd6fXz+fe3q6efg5PDw7/lvc3NsZGNeXV5cWVxiX2Ry8vft4Nrd3NjX2t3b297p6u71c2trdmplcHpxanV2bWlxcGtoaWRiYWBhXVtZWVdaWl1haGlxe3n48fL05uTi4drc4N7b3ODf4OHr7+zr+fX4/HRtbGxubHP57PLq4uDs5+Ln8Pn7c2pma2djX2RjY2Rsdv716d3c3Nza3+fp6PD2/nluamtlZWVqZ2xyd3b+9+3v9fH19nx7cHJoZWRfWVdaW1lYXWBiX2dqaWZu/ff37uLh4+bd3N/k3t7j5t/c4enr5evu9vn7fXz18O7s6uTm6/Tt7vhvaGJfXFteXlxbYWVoZXD27eve1tTX2Nfa3+Xg4+53ffd4am13c2treXNsaHJ5cmhqcm5oZmhnYl1eXFlXWVxeXl9ma2llbHh3b37q5ejg2tvf4Nva3+bh3+Pt5uPr/fzt8XJtfPt0ce/o7vbo5Orw7efseWpsamJdX2JhX2NnaWtx+fDr5d3Z2t3g3+Lv/PLwenF2fXRsevb5fvzx9H187u32eX77cWZsdWleXmNeV1dcXFdXXWJeXF5jY2Jqe/Tu6uHd3d7e3d7f39ze3t7e4Ofq6ejvffzw8H3+6eTq8uro83R79XVmYmhnXlpdXltaYGpmZnbs7eve19bb3Nnc5/Hp6O708uzx+3zx7fh8/vb8dnp5cm1scG5qY2dmXVxcXVtXWFxdWFpma2VeaHJsa3rk39/e2dfe393d4+nh3+Pn6ejz+vTy/G91e3RvcvXt7fTw7PT7fvbydG1tcWpiYGJnYV9la3JwfO3p6ePb3ODn6er59vD4/Xv7fHNwe+73+PTr6Pfz7+36eH56d21vcWtnYF1eXVxaWlhaXFpaWl1eXWJs+e/p4d7c4ePh39zg4NzZ3OPf4ODo7Oru7vr99/Pv7u309/B6cHR+e2ppcXppX2FhYVxbXmBjZXTw5+Pi29zc3OHl6ePo7+3p5fV9//r3dHb88/Z1eHp7b2hqamljYWVnaF5eX2BiXV5dXl9dX2FnZ2Rpc/Lv7ubd2d7h3t3e5+Xg4Orw6urr8/bz+vd7cHF3+Hz79e3s/v787fB+9O3o9HV0cW9jX2NpamVtfPHu9Onm5ev38fDv/P/z7+7+d29veXB3/evq+vPr5/d1//t3aGdtbm5laWxpY1xdXFtXV1lbXl5dYGFoaXD56uDi4t7b2tzb2tja4OHf3ePr5eTp/X7x7/Z5+PPz+nZ1b3BtaW50fHNpZ2doXl1gZGZjaHXz7u/h3Nvf5OLg4Onp5OHj8PP1+3hrdv3+d3f6/f14bmxnaGRhYmZpZGRqbWlfYGFiXllcYGhgXmdrbmp07eTi4tzc3Nzb2dvc3+bn6uns8vTx7ft9+/HuenJ+7fR0//L0dHL18/l2c3hxbmhpaWlnYmhvefj18Ork5uvt6+fu8Onm5fL6+Pp5anP38fx88evs+v/6e29nam1qa2xxbWtvbWliYl9ZWFteXFpdZGpmZnbt7Pju4Nvb29XU19zd3ODn7Onp7Ors6+vn5/L/fu/te3N1/XVpbHV9a2RqbGJcYWtnYWFsdHN1+u3s5efp6OTf4uLh4d/k6Ozs8HJ4/fl3bHJ+fGlnb3RuYmFra2tna21qaGhrZ2NfXl5cXV9gYmpzbGt46eLv7d/a297a1tne4+Lk7f/+7fH5ffPs7O33/n74+3l3+/H6dX328H1ubm9nXmBobGdmcPz9b25+9vl++evm4+Pi5eXk5+318/pwbHZ+enX+9/9sanH+e2lreHhwa211cGxpaWRkXlpaWlxbXF9oaGNobvnt8O3m3t7l39jV2t7c2d7q7efq8vru6Ont8O/z+Ht8/vv0fnFyevx0amhtaltbZW1lYW19fG5w9uzu9e/m4+Tm5eDf4+jn6+z6b2xxenNxc3R5bGJkbGxian71eWxz+31rZWhoZF1cX2NgXWBhYGFiY2VyfXv46uDi5uHd2d3f3tze6u3o4Oby7+vq7/nx7e/69uzl6PHv7/X9dnBtbWxgXWBpZGFobHptaXnx8nd08+jt8OTe3uHj4OTn7v53e/15c3j/fWxmaW1ua253+XxtcHh5aWFlaWVdWl1fXlpcYWRiYGNqdnR78Onk4t/c3Nrc3d7d3eTn5t/j7/Lr6fL9+/Hq7/bt6On7enx+cmlqb3BmY2ZmaGVjaG5zbG1z/fZ+/PPq5+vn4N7h6+vp5/V8+fX7cHB1fHVpaWtvb2t1fvb9c3z9fXFta2djXVxdXl9eXmFmZl5fZ25qbP7q4ODi3drb39/e4Obu6eTk5+rp6unu9Pft6vX37Ofn8f79+HlpZ2ptaGJka29ranB8emppcXR0bG5+9PHx6+Xj5+3r6Ont8PLz+nJtcP/+cG95+3pwfu/u/Hj9/n1xbGxmYl1cX19dXF5hZ2diZWltbGlv9Ofo6uHb2t7f3dzg6Ofj4+jt6Obo7O3p6+33fvny7/t5fP57aWRoa2dgZW55b27693xtbXFzcGltfu/x+Ozl4efu7Ovr8fz49ftvbXJ7d21wefj6ef3u6PR6+PT7a2draWNeX2RmZGBjZGJhYWNma2hmbP/u9fXr4t7j5N/c3uXl4N7k6ePf4Obm4uTp8vf07+719+7t+W5nZWlmYmFodXNudP17a2ZqbWZeZXB8d3H56+rv8Orq6uvv7+7u9X789fP2+vfw+Hd78/F+cXvz/WpjamtnY2Vqa2lkZGVkY2NoamtsbHJ6/fr77uXg4eDe29zh5ODc3+fp4uTr6+bo735++Pl+d3r1+nVtbW1rbGludnr/b3N7/nZvdHl3aWlvc25pdfPt9H337/R6evbz9v758/Dv+P76/fb5+/f1+Hj89/lyZ21wdGpseHlxZmZlYmBhY2VkZGRnZ2lsbv3u6Obl4OHi5+Tc2t3g3t3c4Oni4efu8Ovz9/96+H10b21tbmxqbHZ3bWtubW9tZ296dWpmam9ua3fu6e707Onw+fzw6uz29Ovu9Hx4/f3/eHp6cHJrb3h2cmptc3Nubnz5d2dma2xoZWdtbGdgZ2pra3D37Ofp6OLk5uzr5d7f5+fi5Orw6+fo7fvz7/d9ev3/fHN2/X18ef749n5wdvx9cmtvcG1iX2RmZ2Rq/vt9c3b2+v767+Xn7+/s7PN8e/fw8/P39PV+bm91cnZxdXx7d3R5/H5tZmxsZl5hZGJdW11hZmdsfe3o6uvl4+Ll4t3c3N/g39/i7Oni5evy7ev0d3D+/3FtcHRvb2htcXV6b33+eXFsbGhmY2Bla3Nxc/zv9Hp68O7x8urm5efu7e30/Xr39/n8fv1za2VnbGtsbnV89Pt4+vPx/np7fnVnY2RiX15eZGlmZ3X5+Pn67evp6Ovl4+Tn5uTl5uvp4+Tj6evo7PV8/vb8fHr59PV6e/Hy+X77/XlrZmVfYF5dYmhoaWxxeHp2dH7w7O3q4eHn7Ovo5u/06+zv7/X7/XVra21tbmpweXd3cHz4+/V7eHhuZV5eXV1cXmNnaWVufH73++vn5OLn397e4+Xh4uDi4ubq6fDz8fh+cHb+fXh0d3x8eHD+9PX8+vJ9b2doZ2NkYmlucXBwfnz+/frt7O3w6+bp6vT28/f5/fjy9Xx1enhva21ubnBxdvv79/zy7Orr9/D3dGpkaGZjYF5iYmJfZGxsamt+7evs7uno6erv5eLk5eTg5OTq7Ovy9n75+f/4eX3v9/Tu9O/q+PvweHFkYGNfX1xeYGJkYWtzcHN79evn6+ji5ujs6+jp7Pbu6/H3fPr4enJucXB2b295e/x5efh+fnZ+bW5uZWZfY2FdZGRgYmVtbnB18+vu6Ofm4OXm5eDf3uPo5+3r9vV+/n5sbnhyfHB1+/l+/e3z7/D38P14cG5vbGZgZGZnampzdHF4ePvz7Ozw6+vp8Pjs8/f9+O75/nf//Xl3bXx+fnl87fLt8O/q8/X7/nx1cmppbGhjX19cXV1dZmVma2x99O/x7enp6urj4OPi397i4+bt6e7u9nf2fvn+9u7w7PTy7fL1ev15bWllZmJeXV1gXWBjanBxfHn27Orp7eXj5OXp4+Tu9PXr7fT7/vB2cG51/m53eP30ffj++H7+fm52bWxsam9qbGJlZmNlZG96end3+e7v8ezk5+fs6+Tp5efo5u3s+vX8c3Vy/3l69vnu7Ovw8evs8fz59n19b3BuZWJeZGBgaWd1cHd8fPL18/H07u3w9vDu9PZ+7/T9/Hn89318eu5z8+bw43rs7/Xq/nptdW5ua2Rra2ZgXGBgXV9lb2ltbX78+PT55Oji5+zm4t/i5d7j5unu6/T7df309u7y7O7s7vHo7/twbmZ2cWtpY2JdW11dYWNnb3h5//bv7ezy7OLn5ufq5+jr8uzm6vV7/P55eHD5+n19evj4enh7/HduaGdrZWlnaW5pZV9jZm5sa/fz+f787O3y9Ovn6+zu6ebo7Ovp7fL6fPp5dXRy9/vz+PLs7+zz7Ovx+Hl5enZzdXhuaWVhZmVmaG58eX13efl+fnV9+v77fPfy8vL57ez0/Pv1+nx+8urt8fDq4+nz9e30eXRscG5uamlqYmFcXWJeX2Jrc21ra3X+enn86+vu6+ri4ePi4N/m6uzo7Pnw9O/q7O3w7Ovs8vju+XJrZmtnZWZnZ2FfX2RkZGtvdnh2enr39PD27uns6u7o4+bl5+Li5uv38f52eXj4+3h0d/94cXF1eW5samxxbmtpampoZmhvcHR0d/t8eXV59Pj58ero7u7u6ujs7ezq7fP6fvp5ent79Pr49vXx8/L27ev1+Hv293d0c/5yb21scWlramltaGtrb3Bsb2t0dXf8/fDs7e7q4+Xq7u3s9Pfz6Obq6Orr8Pr1/PP3e3pzdmlmY2BjXl5eX2RgYWJnamxub351e/327ezr6uXi49/j397i4OTj4+rt7uzw9Pl79H17enB6cm9qaWliZGFnaGdoaW5raGhnb2pudXn29vDw7unr6uzm4ebk5+Pl6Ozx8H13c3P+dnFyc3VxdXB7d3F2anBvamtnbG1sam53bGxvdHtze379/H32/Pbv9fX09fn39/jy/Pr79vDz8fPu7e/1+/Px9e7u6urs7/DzfHxzdHdvcGxsZ2VjX2JgX2BgaGtsa298e3x6++3v7Orm4uTk5OLj5eTl5Obo6u/q7vT09PV9em1vcGdjYF9eXV5bXFtcXV9nZmtrbnp6/vru6uvo6OTf4OLi3+Hi4+jl5ubp8/P5fnh2fnx4c//+d3FscHBqZWNqamhmZGdlZWNnbGxudffw8O7w5+jo6evl5enr6+fn6e7t7/b4d3RzcHRyeHt5eXv9d3FxdXh1cmtqdHBraGxuaWpoa2tve3r88/n5+fL58vv67vXy+PT17P779PLz+vjz7vT09Ort7Ofi5ebg6uvs7XZscm9sZmZoZGBeXmBfYWVpcHV3cv5++vv77fLs6+rh4+Tm5uXk6Onn5Onr7e/47uvh3ed072xrfV5iX15iXlleX2hcW19jY3BsbPdx8nvp7nLk4uTo5Ozu7/Dg9PTo4O7u9e3t+nh46nj073H+63trfnRpZWFt/Gdhb2pgamJ+7Hd44+Pn4+jf3+3s5ejf6ePf3+vj6fDm/Xbm8Hd8anhrbm3t+XDh/Xp2c/VobWxtXHlnVm5XaFpj+HN+bXZs7fd372n+6n18dut7/3Z9fX5+6vf46O156Odx6uXc6ubb3O3m2ux+/vD7/21vXWJhWmZUYGlsWWN3YWRw/Vnz4mb24ejiClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvbWVkaWEvY29kZWMyL2hpZGwvMS4wL3Z0cy9yZXMvYmJiX2dzbV8xY2hfOGtoel8xM2ticHMuaW5mbyBiL21lZGlhL2NvZGVjMi9oaWRsLzEuMC92dHMvcmVzL2JiYl9nc21fMWNoXzhraHpfMTNrYnBzLmluZm8KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmRmYmUzMQotLS0gL2Rldi9udWxsCisrKyBiL21lZGlhL2NvZGVjMi9oaWRsLzEuMC92dHMvcmVzL2JiYl9nc21fMWNoXzhraHpfMTNrYnBzLmluZm8KQEAgLTAsMCArMSwxNyBAQAorOTc1IDEgMAorOTc1IDEgNjAwMDAwCis5NzUgMSAxMjAwMDAwCis5NzUgMSAxODAwMDAwCis5NzUgMSAyNDAwMDAwCis5NzUgMSAzMDAwMDAwCis5NzUgMSAzNjAwMDAwCis5NzUgMSA0MjAwMDAwCis5NzUgMSA0ODAwMDAwCis5NzUgMSA1NDAwMDAwCis5NzUgMSA2MDAwMDAwCis5NzUgMSA2NjAwMDAwCis5NzUgMSA3MjAwMDAwCis5NzUgMSA3ODAwMDAwCis5NzUgMSA4NDAwMDAwCis5NzUgMSA5MDAwMDAwCis1MjAgMSA5NjAwMDAwCmRpZmYgLS1naXQgYS9tZWRpYS9jb2RlYzIvaGlkbC8xLjAvdnRzL3Jlcy9iYmJfZ3NtXzFjaF84a2h6XzEza2Jwcy5yYXcgYi9tZWRpYS9jb2RlYzIvaGlkbC8xLjAvdnRzL3Jlcy9iYmJfZ3NtXzFjaF84a2h6XzEza2Jwcy5yYXcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGY5MDNhOAotLS0gL2Rldi9udWxsCisrKyBiL21lZGlhL2NvZGVjMi9oaWRsLzEuMC92dHMvcmVzL2JiYl9nc21fMWNoXzhraHpfMTNrYnBzLnJhdwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9tZWRpYS9jb2RlYzIvaGlkbC8xLjAvdnRzL3Jlcy9iYmJfaDI2M18zNTJ4Mjg4XzMwMGticHNfMTJmcHMuaDI2MyBiL21lZGlhL2NvZGVjMi9oaWRsLzEuMC92dHMvcmVzL2JiYl9oMjYzXzM1MngyODhfMzAwa2Jwc18xMmZwcy5oMjYzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY1MjU4MWYKLS0tIC9kZXYvbnVsbAorKysgYi9tZWRpYS9jb2RlYzIvaGlkbC8xLjAvdnRzL3Jlcy9iYmJfaDI2M18zNTJ4Mjg4XzMwMGticHNfMTJmcHMuaDI2MwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9tZWRpYS9jb2RlYzIvaGlkbC8xLjAvdnRzL3Jlcy9iYmJfaDI2M18zNTJ4Mjg4XzMwMGticHNfMTJmcHMuaW5mbyBiL21lZGlhL2NvZGVjMi9oaWRsLzEuMC92dHMvcmVzL2JiYl9oMjYzXzM1MngyODhfMzAwa2Jwc18xMmZwcy5pbmZvCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc1YmZjYjYKLS0tIC9kZXYvbnVsbAorKysgYi9tZWRpYS9jb2RlYzIvaGlkbC8xLjAvdnRzL3Jlcy9iYmJfaDI2M18zNTJ4Mjg4XzMwMGticHNfMTJmcHMuaW5mbwpAQCAtMCwwICsxLDEyMiBAQAorMjYzNjIgMSAwCisxMjAyMyAwIDgzMzMzCisxMDY0NyAwIDE2NjY2NgorMTAyNjkgMCAyNTAwMDAKKzExMDc2IDAgMzMzMzMzCisxMTEwNCAwIDQxNjY2NgorNTkwOSAwIDUwMDAwMAorNDI5MSAwIDU4MzMzMworNTE0OSAwIDY2NjY2NgorNTM1MyAwIDc1MDAwMAorNTE4NSAwIDgzMzMzMworMjczNiAwIDkxNjY2NgorMjE1NzUgMSAxMDAwMDAwCisyMTk2IDAgMTA4MzMzMworNDM0MCAwIDExNjY2NjYKKzMxMDkgMCAxMjUwMDAwCis0NDEwIDAgMTMzMzMzMworMTczMSAwIDE0MTY2NjYKKzQ1NTcgMCAxNTAwMDAwCiszMzc2IDAgMTU4MzMzMworMTM1MiAwIDE2NjY2NjYKKzI4NDQgMCAxNzUwMDAwCisxNzg3IDAgMTgzMzMzMworMTA4OCAwIDE5MTY2NjYKKzM2ODQzIDEgMjAwMDAwMAorMjUyMCAwIDIwODMzMzMKKzM3NDkgMCAyMTY2NjY2CiszNzg0IDAgMjI1MDAwMAorMzQwMiAwIDIzMzMzMzMKKzM3OTUgMCAyNDE2NjY2CisyMzQ1IDAgMjUwMDAwMAorMzE0MiAwIDI1ODMzMzMKKzI5NDggMCAyNjY2NjY2CisyMDE4IDAgMjc1MDAwMAorNTEzMyAwIDI4MzMzMzMKKzIyNzYgMCAyOTE2NjY2CisyMzQ2OCAxIDMwMDAwMDAKKzE1MjIgMCAzMDgzMzMzCisyMjk5IDAgMzE2NjY2NgorMzI3MyAwIDMyNTAwMDAKKzI2MzAgMCAzMzMzMzMzCisyOTE1IDAgMzQxNjY2NgorMzAzMiAwIDM1MDAwMDAKKzE4OTAgMCAzNTgzMzMzCiszNzE4IDAgMzY2NjY2NgorMTk5MCAwIDM3NTAwMDAKKzMxMzkgMCAzODMzMzMzCisxODA2IDAgMzkxNjY2NgorMjMyMDggMSA0MDAwMDAwCisxNDE5IDAgNDA4MzMzMworMjI2MyAwIDQxNjY2NjYKKzMxMzEgMCA0MjUwMDAwCisyNjQ1IDAgNDMzMzMzMworMTg4MCAwIDQ0MTY2NjYKKzIyMzkgMCA0NTAwMDAwCiszNjM3IDAgNDU4MzMzMworMTk0MSAwIDQ2NjY2NjYKKzE1NzcgMCA0NzUwMDAwCiszNzc3IDAgNDgzMzMzMworMTgxNiAwIDQ5MTY2NjYKKzE5NjAxIDEgNTAwMDAwMAorMTEwNCAwIDUwODMzMzMKKzI4MDggMCA1MTY2NjY2CisyNDExIDAgNTI1MDAwMAorMjE1OSAwIDUzMzMzMzMKKzI0MTEgMCA1NDE2NjY2CisyNDA4IDAgNTUwMDAwMAorMjM4OCAwIDU1ODMzMzMKKzI0MTggMCA1NjY2NjY2CisxNDgxIDAgNTc1MDAwMAorMTkyNiAwIDU4MzMzMzMKKzkwMjIgMSA1OTE2NjY2CisyOTIgMCA2MDAwMDAwCis3MDEgMCA2MDgzMzMzCis3NDcgMCA2MTY2NjY2CisyMDU5IDAgNjI1MDAwMAorMTY5MyAwIDYzMzMzMzMKKzIwNzggMCA2NDE2NjY2CisyOTc1IDAgNjUwMDAwMAorMTMxNyAwIDY1ODMzMzMKKzE3NDIgMCA2NjY2NjY2CisxMDE5IDAgNjc1MDAwMAorMTA1MyAwIDY4MzMzMzMKKzE0MTgzIDEgNjkxNjY2NgorMTQ2NyAwIDcwMDAwMDAKKzk5NCAwIDcwODMzMzMKKzE3MDkgMCA3MTY2NjY2Cis4MzggMCA3MjUwMDAwCisxMzI4IDAgNzMzMzMzMworMjI5MiAwIDc0MTY2NjYKKzE4MjkgMCA3NTAwMDAwCisxNzI4IDAgNzU4MzMzMworMjQzNiAwIDc2NjY2NjYKKzE4NTIgMCA3NzUwMDAwCisyMTkwIDAgNzgzMzMzMworMTUxNjcgMSA3OTE2NjY2CisxMTg4IDAgODAwMDAwMAorMjA3MCAwIDgwODMzMzMKKzMzMTYgMCA4MTY2NjY2CisyNjM2IDAgODI1MDAwMAorOTUwIDAgODMzMzMzMworMTI2MCAwIDg0MTY2NjYKKzkwNiAwIDg1MDAwMDAKKzEyOTQgMCA4NTgzMzMzCisxMjk4IDAgODY2NjY2NgorMTg5NyAwIDg3NTAwMDAKKzEzNDggMCA4ODMzMzMzCisxMzE5NCAxIDg5MTY2NjYKKzEwNDIgMCA5MDAwMDAwCisxMjU4IDAgOTA4MzMzMworMTQ1NyAwIDkxNjY2NjYKKzk5MCAwIDkyNTAwMDAKKzkwMCAwIDkzMzMzMzMKKzk2MyAwIDk0MTY2NjYKKzM0NDggMCA5NTAwMDAwCis3NzQgMCA5NTgzMzMzCisxMDc1IDAgOTY2NjY2NgorNzUwIDAgOTc1MDAwMAorMTA1NCAwIDk4MzMzMzMKKzEzMTM5IDEgOTkxNjY2NgorMzEwNCAwIDEwMDAwMDAwCiszMzY2IDAgMTAwODMzMzMKZGlmZiAtLWdpdCBhL21lZGlhL2NvZGVjMi9oaWRsLzEuMC92dHMvcmVzL2JiYl9oZXZjXzE3NngxNDRfMTc2a2Jwc182MGZwcy5oZXZjIGIvbWVkaWEvY29kZWMyL2hpZGwvMS4wL3Z0cy9yZXMvYmJiX2hldmNfMTc2eDE0NF8xNzZrYnBzXzYwZnBzLmhldmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjgyMjM2ZgotLS0gL2Rldi9udWxsCisrKyBiL21lZGlhL2NvZGVjMi9oaWRsLzEuMC92dHMvcmVzL2JiYl9oZXZjXzE3NngxNDRfMTc2a2Jwc182MGZwcy5oZXZjCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL21lZGlhL2NvZGVjMi9oaWRsLzEuMC92dHMvcmVzL2JiYl9oZXZjXzE3NngxNDRfMTc2a2Jwc182MGZwcy5pbmZvIGIvbWVkaWEvY29kZWMyL2hpZGwvMS4wL3Z0cy9yZXMvYmJiX2hldmNfMTc2eDE0NF8xNzZrYnBzXzYwZnBzLmluZm8KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzQzNTdjZQotLS0gL2Rldi9udWxsCisrKyBiL21lZGlhL2NvZGVjMi9oaWRsLzEuMC92dHMvcmVzL2JiYl9oZXZjXzE3NngxNDRfMTc2a2Jwc182MGZwcy5pbmZvCkBAIC0wLDAgKzEsNjEgQEAKKzE2OTUgMzIgMAorMTkzOCAxIDMzMzMzCis0NzEgMCA4MzMzMworMTUzIDAgNjY2NjYKKzk5IDAgNTAwMDAKKzY1NyAwIDE1MDAwMAorMjYwIDAgMTE2NjY2CisxMTUgMCAxMDAwMDAKKzk5IDAgMTMzMzMzCis2MjIgMCAyMTY2NjYKKzIxMSAwIDE4MzMzMworNzkgMCAxNjY2NjYKKzk1IDAgMjAwMDAwCis1OTcgMCAyODMzMzMKKzI4OCAwIDI1MDAwMAorMTQ1IDAgMjMzMzMzCisxNDcgMCAyNjY2NjYKKzY3NiAwIDM1MDAwMAorMjg0IDAgMzE2NjY2CisxNDQgMCAzMDAwMDAKKzEzMSAwIDMzMzMzMworNjU4IDAgNDE2NjY2CisyNzAgMCAzODMzMzMKKzEwMSAwIDM2NjY2NgorMTUxIDAgNDAwMDAwCis1MjkgMCA0ODMzMzMKKzI1NyAwIDQ1MDAwMAorOTggMCA0MzMzMzMKKzE2MCAwIDQ2NjY2NgorNjY0IDAgNTY2NjY2CisxODYgMCA1MzMzMzMKKzE0NyAwIDUwMDAwMAorNjcgMCA1MTY2NjYKKzc4IDAgNTUwMDAwCis1NzUgMCA2MzMzMzMKKzIzMCAwIDYwMDAwMAorMTM0IDAgNTgzMzMzCisxMTQgMCA2MTY2NjYKKzYyOSAwIDcwMDAwMAorMjI0IDAgNjY2NjY2CisxMzggMCA2NTAwMDAKKzEyOSAwIDY4MzMzMworNjQ1IDAgNzUwMDAwCisyNjQgMCA3MzMzMzMKKzE0NSAwIDcxNjY2NgorNzA1IDAgODE2NjY2CiszNjUgMCA3ODMzMzMKKzE1NiAwIDc2NjY2NgorMTYwIDAgODAwMDAwCis3MjUgMCA4ODMzMzMKKzMzMCAwIDg1MDAwMAorMTM4IDAgODMzMzMzCisxNjIgMCA4NjY2NjYKKzYzOCAwIDk1MDAwMAorMzM3IDAgOTE2NjY2CisxNzAgMCA5MDAwMDAKKzEzMyAwIDkzMzMzMworNDMyIDAgMTAxNjY2NgorMjg3IDAgOTgzMzMzCisxMzAgMCA5NjY2NjYKKzEzNiAwIDEwMDAwMDAKZGlmZiAtLWdpdCBhL21lZGlhL2NvZGVjMi9oaWRsLzEuMC92dHMvcmVzL2JiYl9oZXZjXzY0MHgzNjBfMTYwMGticHNfMzBmcHMuaGV2YyBiL21lZGlhL2NvZGVjMi9oaWRsLzEuMC92dHMvcmVzL2JiYl9oZXZjXzY0MHgzNjBfMTYwMGticHNfMzBmcHMuaGV2YwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42NTFmN2NmCi0tLSAvZGV2L251bGwKKysrIGIvbWVkaWEvY29kZWMyL2hpZGwvMS4wL3Z0cy9yZXMvYmJiX2hldmNfNjQweDM2MF8xNjAwa2Jwc18zMGZwcy5oZXZjCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL21lZGlhL2NvZGVjMi9oaWRsLzEuMC92dHMvcmVzL2JiYl9oZXZjXzY0MHgzNjBfMTYwMGticHNfMzBmcHMuaW5mbyBiL21lZGlhL2NvZGVjMi9oaWRsLzEuMC92dHMvcmVzL2JiYl9oZXZjXzY0MHgzNjBfMTYwMGticHNfMzBmcHMuaW5mbwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yOTk0OTFhCi0tLSAvZGV2L251bGwKKysrIGIvbWVkaWEvY29kZWMyL2hpZGwvMS4wL3Z0cy9yZXMvYmJiX2hldmNfNjQweDM2MF8xNjAwa2Jwc18zMGZwcy5pbmZvCkBAIC0wLDAgKzEsMzAyIEBACisxMDc1IDMyIDAKKzEwNzUgMzIgMAorNjg2MTMgMSA2NjY4NworMTkwMjUgMCAxOTk2ODcKKzI0MDUgMCAxMzM2ODcKKzc3NyAwIDk5Njg3Cis2ODEgMCAxNjY2ODcKKzIwMjU0IDAgMzMzNjg3CisyOTI3IDAgMjY2Njg3Cis3NjYgMCAyMzM2ODcKKzY1OCAwIDI5OTY4NworMjA3ODYgMCA0NjY2ODcKKzQyMTQgMCAzOTk2ODcKKzYwOSAwIDM2NjY4NworNjYxIDAgNDMzNjg3CisyMDgzOCAwIDU5OTY4NworNDIwOSAwIDUzMzY4NworNTA2IDAgNDk5Njg3Cis1ODYgMCA1NjY2ODcKKzIwNDE1IDAgNzMzNjg3Cis0MjA3IDAgNjY2Njg3Cis0MjcgMCA2MzM2ODcKKzUxNCAwIDY5OTY4NworMjQ0NTcgMCA4OTk2ODcKKzE5MDQgMCA4MzM2ODcKKzkyMSAwIDc2NjY4NworOTkyIDAgNzk5Njg3Cis1NDMgMCA4NjY2ODcKKzI0MzQyIDAgMTA2NjY4NworMTgyMiAwIDk5OTY4NworODQwIDAgOTMzNjg3Cis4OTIgMCA5NjY2ODcKKzcxNSAwIDEwMzM2ODcKKzIyODkzIDAgMTIzMzY4NworMTYxOCAwIDExNjY2ODcKKzg4MSAwIDEwOTk2ODcKKzg5MCAwIDExMzM2ODcKKzc5NCAwIDExOTk2ODcKKzI0MjkyIDAgMTM5OTY4NworMTY3MyAwIDEzMzM2ODcKKzc1NSAwIDEyNjY2ODcKKzgxMCAwIDEyOTk2ODcKKzU4OCAwIDEzNjY2ODcKKzE5ODI4IDAgMTUzMzY4NworMTUzOCAwIDE0NjY2ODcKKzg5NCAwIDE0MzM2ODcKKzkzMyAwIDE0OTk2ODcKKzE5ODUzIDAgMTY2NjY4NworMjAxMSAwIDE1OTk2ODcKKzk4MSAwIDE1NjY2ODcKKzkwMCAwIDE2MzM2ODcKKzIyODY5IDAgMTgzMzY4NworMTU2MiAwIDE3NjY2ODcKKzg0MiAwIDE2OTk2ODcKKzc2NSAwIDE3MzM2ODcKKzY2NSAwIDE3OTk2ODcKKzIyMzQ2IDAgMTk2NjY4NworMjI0NSAwIDE4OTk2ODcKKzUxNiAwIDE4NjY2ODcKKzYwNCAwIDE5MzM2ODcKKzI0MzMzIDAgMjA5OTY4NworMTc2NSAwIDIwMzM2ODcKKzMxOCAwIDE5OTk2ODcKKzMyMCAwIDIwNjY2ODcKKzE4NTc3IDAgMjE5OTY4NworMTEyMyAwIDIxNjY2ODcKKzMzNyAwIDIxMzM2ODcKKzE3NTA5IDAgMjI5OTY4NworODY5IDAgMjI2NjY4NworOTAxIDAgMjIzMzY4NworMjMzNjYgMCAyNDMzNjg3CisxMjE3IDAgMjM2NjY4NworMzgwIDAgMjMzMzY4NworMzQ3IDAgMjM5OTY4NworMTk1NDIgMCAyNTMzNjg3CisxODg3IDAgMjQ5OTY4NworNDY3IDAgMjQ2NjY4NworMTg5MzkgMCAyNjY2Njg3CisyODYzIDAgMjU5OTY4NworMzE3IDAgMjU2NjY4NworMjcyIDAgMjYzMzY4NworMTkzNTMgMCAyNzk5Njg3CisyMDkyIDAgMjczMzY4NworMjAzIDAgMjY5OTY4NworMzEwIDAgMjc2NjY4NworMTg4MDAgMCAyOTMzNjg3CisyMDM4IDAgMjg2NjY4NworMjQyIDAgMjgzMzY4NworMTk5IDAgMjg5OTY4NworMTc0NTIgMCAzMDk5Njg3CisxMDYwIDAgMzAzMzY4NworMzAxIDAgMjk2NjY4NworNDUyIDAgMjk5OTY4NworMjU2IDAgMzA2NjY4NworMjEzNTIgMCAzMTk5Njg3Cis0MDkgMCAzMTY2Njg3CisxNzMgMCAzMTMzNjg3CisxOTE0MiAwIDMyOTk2ODcKKzY0MiAwIDMyNjY2ODcKKzQ2OCAwIDMyMzM2ODcKKzE5MDY2IDAgMzQzMzY4NworNjM1IDAgMzM2NjY4NworMTk3IDAgMzMzMzY4NworMTkwIDAgMzM5OTY4NworMTg4MTMgMCAzNTY2Njg3Cis5NjkgMCAzNDk5Njg3CisxNjUgMCAzNDY2Njg3CisyMDMgMCAzNTMzNjg3CisxNzM2MiAwIDM3MzM2ODcKKzI0NiAwIDM2NjY2ODcKKzIzNiAwIDM1OTk2ODcKKzE3NCAwIDM2MzM2ODcKKzE2NCAwIDM2OTk2ODcKKzE3MDgxIDAgMzg5OTY4NworMzUzIDAgMzgzMzY4NworMjIyIDAgMzc2NjY4NworMTgxIDAgMzc5OTY4NworMTQ4IDAgMzg2NjY4NworMTA4MzUgMCAzOTk5Njg3CisxODUgMCAzOTY2Njg3CisxMzkgMCAzOTMzNjg3Cis3NTEwIDAgNDEzMzY4NworMTQ5IDAgNDA2NjY4NworMTI5IDAgNDAzMzY4NworMTMyIDAgNDA5OTY4NworMTA2MyAwIDQxNjY2ODcKKzgwNSAwIDQyNjY2ODcKKzE1NyAwIDQyMzM2ODcKKzM5NCAwIDQxOTk2ODcKKzkwODQwIDAgNDM5OTY4NworNjE1OSAwIDQzMzM2ODcKKzE3NTIgMCA0Mjk5Njg3Cis5ODUgMCA0MzY2Njg3CiszMTMzOCAwIDQ1MzM2ODcKKzMzOTAgMCA0NDY2Njg3Cis3NzIgMCA0NDMzNjg3Cis3ODEgMCA0NDk5Njg3CiszMTA4NCAwIDQ2NjY2ODcKKzM0OTggMCA0NTk5Njg3Cis4MTggMCA0NTY2Njg3Cis4ODEgMCA0NjMzNjg3CiszMDQxNiAwIDQ3OTk2ODcKKzMyNjUgMCA0NzMzNjg3Cis4MTUgMCA0Njk5Njg3Cis3OTAgMCA0NzY2Njg3CiszMTA1MyAwIDQ5MzM2ODcKKzMxMDYgMCA0ODY2Njg3Cis3MDggMCA0ODMzNjg3Cis3MTMgMCA0ODk5Njg3CiszMDIzMCAwIDUwNjY2ODcKKzMyMTQgMCA0OTk5Njg3Cis2MzkgMCA0OTY2Njg3Cis3NjggMCA1MDMzNjg3CisyOTY1NyAwIDUxOTk2ODcKKzMwMTMgMCA1MTMzNjg3Cis2MjIgMCA1MDk5Njg3Cis3MjAgMCA1MTY2Njg3CisyOTM0NCAwIDUzMzM2ODcKKzMxOTYgMCA1MjY2Njg3Cis3MTMgMCA1MjMzNjg3Cis3NzUgMCA1Mjk5Njg3CiszMDQyMCAwIDU0NjY2ODcKKzMzNzQgMCA1Mzk5Njg3Cis4MDMgMCA1MzY2Njg3Cis3MTcgMCA1NDMzNjg3CisyOTk2MCAwIDU1OTk2ODcKKzMyODMgMCA1NTMzNjg3Cis3OTMgMCA1NDk5Njg3Cis3OTAgMCA1NTY2Njg3CiszMTAxMSAwIDU3MzM2ODcKKzMzOTcgMCA1NjY2Njg3Cis4MDkgMCA1NjMzNjg3Cis4MzEgMCA1Njk5Njg3CiszMTE5NCAwIDU4NjY2ODcKKzM0MDEgMCA1Nzk5Njg3Cis4MDcgMCA1NzY2Njg3Cis4MjcgMCA1ODMzNjg3CiszMDMyNiAwIDU5OTk2ODcKKzMxODYgMCA1OTMzNjg3Cis4MTggMCA1ODk5Njg3Cis4NjMgMCA1OTY2Njg3CiszMTU1OSAwIDYxMzM2ODcKKzMzNjQgMCA2MDY2Njg3Cis4NDAgMCA2MDMzNjg3Cis5MTkgMCA2MDk5Njg3CiszMjAxMyAwIDYyNjY2ODcKKzM0OTUgMCA2MTk5Njg3Cis4NzEgMCA2MTY2Njg3Cis4MDMgMCA2MjMzNjg3CiszMDI5NCAwIDYzOTk2ODcKKzMxNTMgMCA2MzMzNjg3Cis3MTYgMCA2Mjk5Njg3Cis4MTIgMCA2MzY2Njg3CisyOTk1MiAwIDY1MzM2ODcKKzMyOTkgMCA2NDY2Njg3Cis4MDEgMCA2NDMzNjg3Cis3NDkgMCA2NDk5Njg3CiszMDU5OCAwIDY2NjY2ODcKKzM1MzYgMCA2NTk5Njg3Cis4ODcgMCA2NTY2Njg3Cis4NTAgMCA2NjMzNjg3CisxNzI0NiAwIDY2OTk2ODcKKzMxMTEwIDAgNjgzMzY4NworMzE5OCAwIDY3NjY2ODcKKzgwOSAwIDY3MzM2ODcKKzgzNiAwIDY3OTk2ODcKKzI5Nzg0IDAgNjk2NjY4NworMzE1NSAwIDY4OTk2ODcKKzg1OSAwIDY4NjY2ODcKKzk1OCAwIDY5MzM2ODcKKzMwNjY2IDAgNzA5OTY4NworMzM3MSAwIDcwMzM2ODcKKzg4NiAwIDY5OTk2ODcKKzg2MSAwIDcwNjY2ODcKKzMwNDE2IDAgNzIzMzY4NworMzM1MCAwIDcxNjY2ODcKKzkxNyAwIDcxMzM2ODcKKzk4NyAwIDcxOTk2ODcKKzI5NTA5IDAgNzM2NjY4NworMzU3NCAwIDcyOTk2ODcKKzk3MiAwIDcyNjY2ODcKKzg4NSAwIDczMzM2ODcKKzMwODcyIDAgNzQ5OTY4NworMzM5OSAwIDc0MzM2ODcKKzg5OCAwIDczOTk2ODcKKzEwMjcgMCA3NDY2Njg3CiszMTE1NSAwIDc2MzM2ODcKKzM0NTQgMCA3NTY2Njg3Cis5NjUgMCA3NTMzNjg3Cis4NDEgMCA3NTk5Njg3CisyODQ4NyAwIDc3NjY2ODcKKzM2MTYgMCA3Njk5Njg3Cis5MjEgMCA3NjY2Njg3Cis5OTEgMCA3NzMzNjg3CisyMzIwOCAwIDc4OTk2ODcKKzM1NTEgMCA3ODMzNjg3Cis5MTggMCA3Nzk5Njg3Cis4OTQgMCA3ODY2Njg3CisxNjk4MiAwIDgwMzM2ODcKKzM0NTggMCA3OTY2Njg3Cis4NDQgMCA3OTMzNjg3Cis5NDMgMCA3OTk5Njg3CiszMDM5NiAwIDgxOTk2ODcKKzQ5NjMgMCA4MTMzNjg3CisxNDE2IDAgODA2NjY4NworMTYzOSAwIDgwOTk2ODcKKzUyNCAwIDgxNjY2ODcKKzEzNjggMCA4Mjk5Njg3Cis1NjUgMCA4MjY2Njg3CiszOTIgMCA4MjMzNjg3Cis0MTMxNyAxIDgzOTk2ODcKKzE4NSAwIDgzNjY2ODcKKzQ3NyAwIDgzMzM2ODcKKzUzNDIgMCA4NTMzNjg3CisxMjc1IDAgODQ2NjY4NworMTIxIDAgODQzMzY4NworOTgyIDAgODQ5OTY4NworNjQ2NSAwIDg2OTk2ODcKKzI2MDYgMCA4NjMzNjg3CisxMTYzIDAgODU2NjY4NworOTQzIDAgODU5OTY4NworMTE4NiAwIDg2NjY2ODcKKzExNTkzIDAgODgzMzY4NworMzEyMiAwIDg3NjY2ODcKKzEyNzggMCA4NzMzNjg3CisxNTkzIDAgODc5OTY4NworOTA5OSAwIDg5OTk2ODcKKzk3OCAwIDg5MzM2ODcKKzc0OCAwIDg4NjY2ODcKKzgzNSAwIDg4OTk2ODcKKzM2NCAwIDg5NjY2ODcKKzQ3OTkgMCA5MDk5Njg3CiszNjUgMCA5MDY2Njg3CisyMTUgMCA5MDMzNjg3Cis0MzY3IDAgOTE5OTY4NworMzAyIDAgOTE2NjY4NworNDgwIDAgOTEzMzY4NworNjE4MCAwIDkzMzM2ODcKKzc3MSAwIDkyNjY2ODcKKzI0NiAwIDkyMzM2ODcKKzI4MSAwIDkyOTk2ODcKKzQ2MzYgMCA5Mzk5Njg3CisyMTEgMCA5MzY2Njg3Cis0MDM3IDAgOTQ5OTY4NworMzgyIDAgOTQ2NjY4NworNDg2IDAgOTQzMzY4NworMzk3NSAwIDk1OTk2ODcKKzMxMiAwIDk1NjY2ODcKKzQ3NCAwIDk1MzM2ODcKKzY4ODAgMCA5NzMzNjg3CisxMTE2IDAgOTY2NjY4NworMjA2IDAgOTYzMzY4NworNjk4IDAgOTY5OTY4NworNjI1NCAwIDk4OTk2ODcKKzI1ODEgMCA5ODMzNjg3CisxMzAzIDAgOTc2NjY4NworOTg1IDAgOTc5OTY4NworOTY3IDAgOTg2NjY4NworNjQ4NiAwIDEwMDMzNjg3CiszNTU1IDAgOTk2NjY4NworMTQzMCAwIDk5MzM2ODcKKzE2MDUgMCA5OTk5Njg3CmRpZmYgLS1naXQgYS9tZWRpYS9jb2RlYzIvaGlkbC8xLjAvdnRzL3Jlcy9iYmJfbXAzX3N0ZXJlb18xOTJrYnBzXzQ4MDAwaHouaW5mbyBiL21lZGlhL2NvZGVjMi9oaWRsLzEuMC92dHMvcmVzL2JiYl9tcDNfc3RlcmVvXzE5MmticHNfNDgwMDBoei5pbmZvCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIxZmJmZDQKLS0tIC9kZXYvbnVsbAorKysgYi9tZWRpYS9jb2RlYzIvaGlkbC8xLjAvdnRzL3Jlcy9iYmJfbXAzX3N0ZXJlb18xOTJrYnBzXzQ4MDAwaHouaW5mbwpAQCAtMCwwICsxLDQxNCBAQAorNTc2IDEgMAorNTc2IDEgMjQwMDAKKzU3NiAxIDQ4MDAwCis1NzYgMSA3MjAwMAorNTc2IDEgOTYwMDAKKzU3NiAxIDEyMDAwMAorNTc2IDEgMTQ0MDAwCis1NzYgMSAxNjgwMDAKKzU3NiAxIDE5MjAwMAorNTc2IDEgMjE2MDAwCis1NzYgMSAyNDAwMDAKKzU3NiAxIDI2NDAwMAorNTc2IDEgMjg4MDAwCis1NzYgMSAzMTIwMDAKKzU3NiAxIDMzNjAwMAorNTc2IDEgMzYwMDAwCis1NzYgMSAzODQwMDAKKzU3NiAxIDQwODAwMAorNTc2IDEgNDMyMDAwCis1NzYgMSA0NTYwMDAKKzU3NiAxIDQ4MDAwMAorNTc2IDEgNTA0MDAwCis1NzYgMSA1MjgwMDAKKzU3NiAxIDU1MjAwMAorNTc2IDEgNTc2MDAwCis1NzYgMSA2MDAwMDAKKzU3NiAxIDYyNDAwMAorNTc2IDEgNjQ4MDAwCis1NzYgMSA2NzIwMDAKKzU3NiAxIDY5NjAwMAorNTc2IDEgNzIwMDAwCis1NzYgMSA3NDQwMDAKKzU3NiAxIDc2ODAwMAorNTc2IDEgNzkyMDAwCis1NzYgMSA4MTYwMDAKKzU3NiAxIDg0MDAwMAorNTc2IDEgODY0MDAwCis1NzYgMSA4ODgwMDAKKzU3NiAxIDkxMjAwMAorNTc2IDEgOTM2MDAwCis1NzYgMSA5NjAwMDAKKzU3NiAxIDk4NDAwMAorNTc2IDEgMTAwODAwMAorNTc2IDEgMTAzMjAwMAorNTc2IDEgMTA1NjAwMAorNTc2IDEgMTA4MDAwMAorNTc2IDEgMTEwNDAwMAorNTc2IDEgMTEyODAwMAorNTc2IDEgMTE1MjAwMAorNTc2IDEgMTE3NjAwMAorNTc2IDEgMTIwMDAwMAorNTc2IDEgMTIyNDAwMAorNTc2IDEgMTI0ODAwMAorNTc2IDEgMTI3MjAwMAorNTc2IDEgMTI5NjAwMAorNTc2IDEgMTMyMDAwMAorNTc2IDEgMTM0NDAwMAorNTc2IDEgMTM2ODAwMAorNTc2IDEgMTM5MjAwMAorNTc2IDEgMTQxNjAwMAorNTc2IDEgMTQ0MDAwMAorNTc2IDEgMTQ2NDAwMAorNTc2IDEgMTQ4ODAwMAorNTc2IDEgMTUxMjAwMAorNTc2IDEgMTUzNjAwMAorNTc2IDEgMTU2MDAwMAorNTc2IDEgMTU4NDAwMAorNTc2IDEgMTYwODAwMAorNTc2IDEgMTYzMjAwMAorNTc2IDEgMTY1NjAwMAorNTc2IDEgMTY4MDAwMAorNTc2IDEgMTcwNDAwMAorNTc2IDEgMTcyODAwMAorNTc2IDEgMTc1MjAwMAorNTc2IDEgMTc3NjAwMAorNTc2IDEgMTgwMDAwMAorNTc2IDEgMTgyNDAwMAorNTc2IDEgMTg0ODAwMAorNTc2IDEgMTg3MjAwMAorNTc2IDEgMTg5NjAwMAorNTc2IDEgMTkyMDAwMAorNTc2IDEgMTk0NDAwMAorNTc2IDEgMTk2ODAwMAorNTc2IDEgMTk5MjAwMAorNTc2IDEgMjAxNjAwMAorNTc2IDEgMjA0MDAwMAorNTc2IDEgMjA2NDAwMAorNTc2IDEgMjA4ODAwMAorNTc2IDEgMjExMjAwMAorNTc2IDEgMjEzNjAwMAorNTc2IDEgMjE2MDAwMAorNTc2IDEgMjE4NDAwMAorNTc2IDEgMjIwODAwMAorNTc2IDEgMjIzMjAwMAorNTc2IDEgMjI1NjAwMAorNTc2IDEgMjI4MDAwMAorNTc2IDEgMjMwNDAwMAorNTc2IDEgMjMyODAwMAorNTc2IDEgMjM1MjAwMAorNTc2IDEgMjM3NjAwMAorNTc2IDEgMjQwMDAwMAorNTc2IDEgMjQyNDAwMAorNTc2IDEgMjQ0ODAwMAorNTc2IDEgMjQ3MjAwMAorNTc2IDEgMjQ5NjAwMAorNTc2IDEgMjUyMDAwMAorNTc2IDEgMjU0NDAwMAorNTc2IDEgMjU2ODAwMAorNTc2IDEgMjU5MjAwMAorNTc2IDEgMjYxNjAwMAorNTc2IDEgMjY0MDAwMAorNTc2IDEgMjY2NDAwMAorNTc2IDEgMjY4ODAwMAorNTc2IDEgMjcxMjAwMAorNTc2IDEgMjczNjAwMAorNTc2IDEgMjc2MDAwMAorNTc2IDEgMjc4NDAwMAorNTc2IDEgMjgwODAwMAorNTc2IDEgMjgzMjAwMAorNTc2IDEgMjg1NjAwMAorNTc2IDEgMjg4MDAwMAorNTc2IDEgMjkwNDAwMAorNTc2IDEgMjkyODAwMAorNTc2IDEgMjk1MjAwMAorNTc2IDEgMjk3NjAwMAorNTc2IDEgMzAwMDAwMAorNTc2IDEgMzAyNDAwMAorNTc2IDEgMzA0ODAwMAorNTc2IDEgMzA3MjAwMAorNTc2IDEgMzA5NjAwMAorNTc2IDEgMzEyMDAwMAorNTc2IDEgMzE0NDAwMAorNTc2IDEgMzE2ODAwMAorNTc2IDEgMzE5MjAwMAorNTc2IDEgMzIxNjAwMAorNTc2IDEgMzI0MDAwMAorNTc2IDEgMzI2NDAwMAorNTc2IDEgMzI4ODAwMAorNTc2IDEgMzMxMjAwMAorNTc2IDEgMzMzNjAwMAorNTc2IDEgMzM2MDAwMAorNTc2IDEgMzM4NDAwMAorNTc2IDEgMzQwODAwMAorNTc2IDEgMzQzMjAwMAorNTc2IDEgMzQ1NjAwMAorNTc2IDEgMzQ4MDAwMAorNTc2IDEgMzUwNDAwMAorNTc2IDEgMzUyODAwMAorNTc2IDEgMzU1MjAwMAorNTc2IDEgMzU3NjAwMAorNTc2IDEgMzYwMDAwMAorNTc2IDEgMzYyNDAwMAorNTc2IDEgMzY0ODAwMAorNTc2IDEgMzY3MjAwMAorNTc2IDEgMzY5NjAwMAorNTc2IDEgMzcyMDAwMAorNTc2IDEgMzc0NDAwMAorNTc2IDEgMzc2ODAwMAorNTc2IDEgMzc5MjAwMAorNTc2IDEgMzgxNjAwMAorNTc2IDEgMzg0MDAwMAorNTc2IDEgMzg2NDAwMAorNTc2IDEgMzg4ODAwMAorNTc2IDEgMzkxMjAwMAorNTc2IDEgMzkzNjAwMAorNTc2IDEgMzk2MDAwMAorNTc2IDEgMzk4NDAwMAorNTc2IDEgNDAwODAwMAorNTc2IDEgNDAzMjAwMAorNTc2IDEgNDA1NjAwMAorNTc2IDEgNDA4MDAwMAorNTc2IDEgNDEwNDAwMAorNTc2IDEgNDEyODAwMAorNTc2IDEgNDE1MjAwMAorNTc2IDEgNDE3NjAwMAorNTc2IDEgNDIwMDAwMAorNTc2IDEgNDIyNDAwMAorNTc2IDEgNDI0ODAwMAorNTc2IDEgNDI3MjAwMAorNTc2IDEgNDI5NjAwMAorNTc2IDEgNDMyMDAwMAorNTc2IDEgNDM0NDAwMAorNTc2IDEgNDM2ODAwMAorNTc2IDEgNDM5MjAwMAorNTc2IDEgNDQxNjAwMAorNTc2IDEgNDQ0MDAwMAorNTc2IDEgNDQ2NDAwMAorNTc2IDEgNDQ4ODAwMAorNTc2IDEgNDUxMjAwMAorNTc2IDEgNDUzNjAwMAorNTc2IDEgNDU2MDAwMAorNTc2IDEgNDU4NDAwMAorNTc2IDEgNDYwODAwMAorNTc2IDEgNDYzMjAwMAorNTc2IDEgNDY1NjAwMAorNTc2IDEgNDY4MDAwMAorNTc2IDEgNDcwNDAwMAorNTc2IDEgNDcyODAwMAorNTc2IDEgNDc1MjAwMAorNTc2IDEgNDc3NjAwMAorNTc2IDEgNDgwMDAwMAorNTc2IDEgNDgyNDAwMAorNTc2IDEgNDg0ODAwMAorNTc2IDEgNDg3MjAwMAorNTc2IDEgNDg5NjAwMAorNTc2IDEgNDkyMDAwMAorNTc2IDEgNDk0NDAwMAorNTc2IDEgNDk2ODAwMAorNTc2IDEgNDk5MjAwMAorNTc2IDEgNTAxNjAwMAorNTc2IDEgNTA0MDAwMAorNTc2IDEgNTA2NDAwMAorNTc2IDEgNTA4ODAwMAorNTc2IDEgNTExMjAwMAorNTc2IDEgNTEzNjAwMAorNTc2IDEgNTE2MDAwMAorNTc2IDEgNTE4NDAwMAorNTc2IDEgNTIwODAwMAorNTc2IDEgNTIzMjAwMAorNTc2IDEgNTI1NjAwMAorNTc2IDEgNTI4MDAwMAorNTc2IDEgNTMwNDAwMAorNTc2IDEgNTMyODAwMAorNTc2IDEgNTM1MjAwMAorNTc2IDEgNTM3NjAwMAorNTc2IDEgNTQwMDAwMAorNTc2IDEgNTQyNDAwMAorNTc2IDEgNTQ0ODAwMAorNTc2IDEgNTQ3MjAwMAorNTc2IDEgNTQ5NjAwMAorNTc2IDEgNTUyMDAwMAorNTc2IDEgNTU0NDAwMAorNTc2IDEgNTU2ODAwMAorNTc2IDEgNTU5MjAwMAorNTc2IDEgNTYxNjAwMAorNTc2IDEgNTY0MDAwMAorNTc2IDEgNTY2NDAwMAorNTc2IDEgNTY4ODAwMAorNTc2IDEgNTcxMjAwMAorNTc2IDEgNTczNjAwMAorNTc2IDEgNTc2MDAwMAorNTc2IDEgNTc4NDAwMAorNTc2IDEgNTgwODAwMAorNTc2IDEgNTgzMjAwMAorNTc2IDEgNTg1NjAwMAorNTc2IDEgNTg4MDAwMAorNTc2IDEgNTkwNDAwMAorNTc2IDEgNTkyODAwMAorNTc2IDEgNTk1MjAwMAorNTc2IDEgNTk3NjAwMAorNTc2IDEgNjAwMDAwMAorNTc2IDEgNjAyNDAwMAorNTc2IDEgNjA0ODAwMAorNTc2IDEgNjA3MjAwMAorNTc2IDEgNjA5NjAwMAorNTc2IDEgNjEyMDAwMAorNTc2IDEgNjE0NDAwMAorNTc2IDEgNjE2ODAwMAorNTc2IDEgNjE5MjAwMAorNTc2IDEgNjIxNjAwMAorNTc2IDEgNjI0MDAwMAorNTc2IDEgNjI2NDAwMAorNTc2IDEgNjI4ODAwMAorNTc2IDEgNjMxMjAwMAorNTc2IDEgNjMzNjAwMAorNTc2IDEgNjM2MDAwMAorNTc2IDEgNjM4NDAwMAorNTc2IDEgNjQwODAwMAorNTc2IDEgNjQzMjAwMAorNTc2IDEgNjQ1NjAwMAorNTc2IDEgNjQ4MDAwMAorNTc2IDEgNjUwNDAwMAorNTc2IDEgNjUyODAwMAorNTc2IDEgNjU1MjAwMAorNTc2IDEgNjU3NjAwMAorNTc2IDEgNjYwMDAwMAorNTc2IDEgNjYyNDAwMAorNTc2IDEgNjY0ODAwMAorNTc2IDEgNjY3MjAwMAorNTc2IDEgNjY5NjAwMAorNTc2IDEgNjcyMDAwMAorNTc2IDEgNjc0NDAwMAorNTc2IDEgNjc2ODAwMAorNTc2IDEgNjc5MjAwMAorNTc2IDEgNjgxNjAwMAorNTc2IDEgNjg0MDAwMAorNTc2IDEgNjg2NDAwMAorNTc2IDEgNjg4ODAwMAorNTc2IDEgNjkxMjAwMAorNTc2IDEgNjkzNjAwMAorNTc2IDEgNjk2MDAwMAorNTc2IDEgNjk4NDAwMAorNTc2IDEgNzAwODAwMAorNTc2IDEgNzAzMjAwMAorNTc2IDEgNzA1NjAwMAorNTc2IDEgNzA4MDAwMAorNTc2IDEgNzEwNDAwMAorNTc2IDEgNzEyODAwMAorNTc2IDEgNzE1MjAwMAorNTc2IDEgNzE3NjAwMAorNTc2IDEgNzIwMDAwMAorNTc2IDEgNzIyNDAwMAorNTc2IDEgNzI0ODAwMAorNTc2IDEgNzI3MjAwMAorNTc2IDEgNzI5NjAwMAorNTc2IDEgNzMyMDAwMAorNTc2IDEgNzM0NDAwMAorNTc2IDEgNzM2ODAwMAorNTc2IDEgNzM5MjAwMAorNTc2IDEgNzQxNjAwMAorNTc2IDEgNzQ0MDAwMAorNTc2IDEgNzQ2NDAwMAorNTc2IDEgNzQ4ODAwMAorNTc2IDEgNzUxMjAwMAorNTc2IDEgNzUzNjAwMAorNTc2IDEgNzU2MDAwMAorNTc2IDEgNzU4NDAwMAorNTc2IDEgNzYwODAwMAorNTc2IDEgNzYzMjAwMAorNTc2IDEgNzY1NjAwMAorNTc2IDEgNzY4MDAwMAorNTc2IDEgNzcwNDAwMAorNTc2IDEgNzcyODAwMAorNTc2IDEgNzc1MjAwMAorNTc2IDEgNzc3NjAwMAorNTc2IDEgNzgwMDAwMAorNTc2IDEgNzgyNDAwMAorNTc2IDEgNzg0ODAwMAorNTc2IDEgNzg3MjAwMAorNTc2IDEgNzg5NjAwMAorNTc2IDEgNzkyMDAwMAorNTc2IDEgNzk0NDAwMAorNTc2IDEgNzk2ODAwMAorNTc2IDEgNzk5MjAwMAorNTc2IDEgODAxNjAwMAorNTc2IDEgODA0MDAwMAorNTc2IDEgODA2NDAwMAorNTc2IDEgODA4ODAwMAorNTc2IDEgODExMjAwMAorNTc2IDEgODEzNjAwMAorNTc2IDEgODE2MDAwMAorNTc2IDEgODE4NDAwMAorNTc2IDEgODIwODAwMAorNTc2IDEgODIzMjAwMAorNTc2IDEgODI1NjAwMAorNTc2IDEgODI4MDAwMAorNTc2IDEgODMwNDAwMAorNTc2IDEgODMyODAwMAorNTc2IDEgODM1MjAwMAorNTc2IDEgODM3NjAwMAorNTc2IDEgODQwMDAwMAorNTc2IDEgODQyNDAwMAorNTc2IDEgODQ0ODAwMAorNTc2IDEgODQ3MjAwMAorNTc2IDEgODQ5NjAwMAorNTc2IDEgODUyMDAwMAorNTc2IDEgODU0NDAwMAorNTc2IDEgODU2ODAwMAorNTc2IDEgODU5MjAwMAorNTc2IDEgODYxNjAwMAorNTc2IDEgODY0MDAwMAorNTc2IDEgODY2NDAwMAorNTc2IDEgODY4ODAwMAorNTc2IDEgODcxMjAwMAorNTc2IDEgODczNjAwMAorNTc2IDEgODc2MDAwMAorNTc2IDEgODc4NDAwMAorNTc2IDEgODgwODAwMAorNTc2IDEgODgzMjAwMAorNTc2IDEgODg1NjAwMAorNTc2IDEgODg4MDAwMAorNTc2IDEgODkwNDAwMAorNTc2IDEgODkyODAwMAorNTc2IDEgODk1MjAwMAorNTc2IDEgODk3NjAwMAorNTc2IDEgOTAwMDAwMAorNTc2IDEgOTAyNDAwMAorNTc2IDEgOTA0ODAwMAorNTc2IDEgOTA3MjAwMAorNTc2IDEgOTA5NjAwMAorNTc2IDEgOTEyMDAwMAorNTc2IDEgOTE0NDAwMAorNTc2IDEgOTE2ODAwMAorNTc2IDEgOTE5MjAwMAorNTc2IDEgOTIxNjAwMAorNTc2IDEgOTI0MDAwMAorNTc2IDEgOTI2NDAwMAorNTc2IDEgOTI4ODAwMAorNTc2IDEgOTMxMjAwMAorNTc2IDEgOTMzNjAwMAorNTc2IDEgOTM2MDAwMAorNTc2IDEgOTM4NDAwMAorNTc2IDEgOTQwODAwMAorNTc2IDEgOTQzMjAwMAorNTc2IDEgOTQ1NjAwMAorNTc2IDEgOTQ4MDAwMAorNTc2IDEgOTUwNDAwMAorNTc2IDEgOTUyODAwMAorNTc2IDEgOTU1MjAwMAorNTc2IDEgOTU3NjAwMAorNTc2IDEgOTYwMDAwMAorNTc2IDEgOTYyNDAwMAorNTc2IDEgOTY0ODAwMAorNTc2IDEgOTY3MjAwMAorNTc2IDEgOTY5NjAwMAorNTc2IDEgOTcyMDAwMAorNTc2IDEgOTc0NDAwMAorNTc2IDEgOTc2ODAwMAorNTc2IDEgOTc5MjAwMAorNTc2IDEgOTgxNjAwMAorNTc2IDEgOTg0MDAwMAorNTc2IDEgOTg2NDAwMAorNTc2IDEgOTg4ODAwMAorNTc2IDEgOTkxMjAwMApkaWZmIC0tZ2l0IGEvbWVkaWEvY29kZWMyL2hpZGwvMS4wL3Z0cy9yZXMvYmJiX21wM19zdGVyZW9fMTkya2Jwc180ODAwMGh6Lm1wMyBiL21lZGlhL2NvZGVjMi9oaWRsLzEuMC92dHMvcmVzL2JiYl9tcDNfc3RlcmVvXzE5MmticHNfNDgwMDBoei5tcDMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjgzYTQ0MTMKLS0tIC9kZXYvbnVsbAorKysgYi9tZWRpYS9jb2RlYzIvaGlkbC8xLjAvdnRzL3Jlcy9iYmJfbXAzX3N0ZXJlb18xOTJrYnBzXzQ4MDAwaHoubXAzCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL21lZGlhL2NvZGVjMi9oaWRsLzEuMC92dHMvcmVzL2JiYl9tcGVnMl8xNzZ4MTQ0XzEwNWticHNfMjVmcHMuaW5mbyBiL21lZGlhL2NvZGVjMi9oaWRsLzEuMC92dHMvcmVzL2JiYl9tcGVnMl8xNzZ4MTQ0XzEwNWticHNfMjVmcHMuaW5mbwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNTQwNjQyCi0tLSAvZGV2L251bGwKKysrIGIvbWVkaWEvY29kZWMyL2hpZGwvMS4wL3Z0cy9yZXMvYmJiX21wZWcyXzE3NngxNDRfMTA1a2Jwc18yNWZwcy5pbmZvCkBAIC0wLDAgKzEsMjQ5IEBACis2NDU4IDEgNDAwMDAKKzQwNDAgMCA4MDAwMAorMzI1NSAwIDEyMDAwMAorMzAyNiAwIDE2MDAwMAorMzI5MyAwIDIwMDAwMAorMzA4OSAwIDI0MDAwMAorMzMwNSAwIDI4MDAwMAorMTc5NCAwIDMyMDAwMAorMTg0OCAwIDM2MDAwMAorMTI4OCAwIDQwMDAwMAorMTUxMSAwIDQ0MDAwMAorMTUyNyAwIDQ4MDAwMAorNjE0NiAxIDUyMDAwMAorMTI0MyAwIDU2MDAwMAorMTA5OSAwIDYwMDAwMAorMTM1NCAwIDY0MDAwMAorMTM2NiAwIDY4MDAwMAorMTA0MiAwIDcyMDAwMAorMTYwMCAwIDc2MDAwMAorODc1IDAgODAwMDAwCisxNzI4IDAgODQwMDAwCisxMjU0IDAgODgwMDAwCis5OTQgMCA5MjAwMDAKKzE1OTEgMCA5NjAwMDAKKzYyNjUgMSAxMDAwMDAwCisxMDE4IDAgMTA0MDAwMAorODI1IDAgMTA4MDAwMAorODY5IDAgMTEyMDAwMAorOTIxIDAgMTE2MDAwMAorOTc1IDAgMTIwMDAwMAorOTI0IDAgMTI0MDAwMAorODM0IDAgMTI4MDAwMAorMTA2NiAwIDEzMjAwMDAKKzc5MyAwIDEzNjAwMDAKKzg4OSAwIDE0MDAwMDAKKzIwNTAgMCAxNDQwMDAwCis2Mjc2IDEgMTQ4MDAwMAorODgxIDAgMTUyMDAwMAorMjYwIDAgMTU2MDAwMAorNzMwIDAgMTYwMDAwMAorNDMxIDAgMTY0MDAwMAorMzUxIDAgMTY4MDAwMAorMzIxIDAgMTcyMDAwMAorMzgwMiAwIDE3NjAwMDAKKzE0NiAwIDE4MDAwMDAKKzY0NjIgMCAxODQwMDAwCiszMjQ2IDAgMTg4MDAwMAorNTMzIDAgMTkyMDAwMAorNjIzMSAxIDE5NjAwMDAKKzEzNzggMCAyMDAwMDAwCis3MTkgMCAyMDQwMDAwCis4MTggMCAyMDgwMDAwCis4NTYgMCAyMTIwMDAwCis5MzcgMCAyMTYwMDAwCis2MTEgMCAyMjAwMDAwCiszMDMxIDAgMjI0MDAwMAorMTA0MSAwIDIyODAwMDAKKzYwNCAwIDIzMjAwMDAKKzcxNCAwIDIzNjAwMDAKKzEyODMgMCAyNDAwMDAwCis3NTY1IDEgMjQ0MDAwMAorNjAyIDAgMjQ4MDAwMAorNTMwIDAgMjUyMDAwMAorMjU3OSAwIDI1NjAwMDAKKzExNSAwIDI2MDAwMDAKKzEwNTggMCAyNjQwMDAwCis2ODkgMCAyNjgwMDAwCisxMTE5IDAgMjcyMDAwMAorNjk4IDAgMjc2MDAwMAorMTAwNiAwIDI4MDAwMDAKKzU0NSAwIDI4NDAwMDAKKzE2MTcgMCAyODgwMDAwCis5MTIzIDEgMjkyMDAwMAorNTI3IDAgMjk2MDAwMAorMTU3NiAwIDMwMDAwMDAKKzQ2NSAwIDMwNDAwMDAKKzc0MSAwIDMwODAwMDAKKzUyMSAwIDMxMjAwMDAKKzEzMjIgMCAzMTYwMDAwCis3NzUgMCAzMjAwMDAwCis4NjMgMCAzMjQwMDAwCis5MTAgMCAzMjgwMDAwCis5MTUgMCAzMzIwMDAwCis5MjYgMCAzMzYwMDAwCis3NTU2IDEgMzQwMDAwMAorNzQxIDAgMzQ0MDAwMAorNTI3IDAgMzQ4MDAwMAorMjUxNiAwIDM1MjAwMDAKKzQ1OSAwIDM1NjAwMDAKKzQwNCAwIDM2MDAwMDAKKzUwOSAwIDM2NDAwMDAKKzEyMjcgMCAzNjgwMDAwCisxNTYxIDAgMzcyMDAwMAorNDkwIDAgMzc2MDAwMAorNzEyIDAgMzgwMDAwMAorODAzIDAgMzg0MDAwMAorNzUyNCAxIDM4ODAwMDAKKzczMCAwIDM5MjAwMDAKKzQ2MSAwIDM5NjAwMDAKKzI1MjYgMCA0MDAwMDAwCis0NTMgMCA0MDQwMDAwCis2MzIgMCA0MDgwMDAwCis3ODMgMCA0MTIwMDAwCis4NDMgMCA0MTYwMDAwCis5MTggMCA0MjAwMDAwCis5NjEgMCA0MjQwMDAwCis5NDggMCA0MjgwMDAwCis5NTkgMCA0MzIwMDAwCis3NTk4IDEgNDM2MDAwMAorNjc4IDAgNDQwMDAwMAorNTY5IDAgNDQ0MDAwMAorODkzIDAgNDQ4MDAwMAorNjI0IDAgNDUyMDAwMAorNzU1IDAgNDU2MDAwMAorMjIzNCAwIDQ2MDAwMDAKKzU1NiAwIDQ2NDAwMDAKKzk0NCAwIDQ2ODAwMDAKKzczOSAwIDQ3MjAwMDAKKzg2MiAwIDQ3NjAwMDAKKzkzOCAwIDQ4MDAwMDAKKzc1NzQgMSA0ODQwMDAwCis2OTkgMCA0ODgwMDAwCis3MDEgMCA0OTIwMDAwCis1MzAgMCA0OTYwMDAwCis2ODkgMCA1MDAwMDAwCis3NzggMCA1MDQwMDAwCis4NTYgMCA1MDgwMDAwCis5MzAgMCA1MTIwMDAwCis5NzUgMCA1MTYwMDAwCisxMDIxIDAgNTIwMDAwMAorMTA3NCAwIDUyNDAwMDAKKzk3OCAwIDUyODAwMDAKKzgwMjEgMSA1MzIwMDAwCis3MDQgMCA1MzYwMDAwCis2MTAgMCA1NDAwMDAwCis2OTcgMCA1NDQwMDAwCis3MTEgMCA1NDgwMDAwCis4MjAgMCA1NTIwMDAwCis4NDMgMCA1NTYwMDAwCisyNTEgMCA1NjAwMDAwCiszMzY3IDAgNTY0MDAwMAorNTA3IDAgNTY4MDAwMAorMzE2OCAxIDU3MjAwMDAKKzc3OSAwIDU3NjAwMDAKKzMxNiAwIDU4MDAwMDAKKzYzNSAwIDU4NDAwMDAKKzIwNCAwIDU4ODAwMDAKKzk3OCAwIDU5MjAwMDAKKzEyNyAwIDU5NjAwMDAKKzU4OSAwIDYwMDAwMDAKKzYwNCAwIDYwNDAwMDAKKzY2NiAwIDYwODAwMDAKKzU4MiAwIDYxMjAwMDAKKzcyOSAwIDYxNjAwMDAKKzQxNTIgMSA2MjAwMDAwCis4NTggMCA2MjQwMDAwCis3MzkgMCA2MjgwMDAwCis4ODUgMCA2MzIwMDAwCis3NDkgMCA2MzYwMDAwCis5NTAgMCA2NDAwMDAwCis1OTMgMCA2NDQwMDAwCis3NzEgMCA2NDgwMDAwCis2NzggMCA2NTIwMDAwCis1MjkgMCA2NTYwMDAwCis4MzUgMCA2NjAwMDAwCiszOTEgMCA2NjQwMDAwCis0NjkyIDEgNjY4MDAwMAorNDczIDAgNjcyMDAwMAorNzI0IDAgNjc2MDAwMAorMzgxIDAgNjgwMDAwMAorOTA5IDAgNjg0MDAwMAorMzk0IDAgNjg4MDAwMAorNjU5IDAgNjkyMDAwMAorMzY3IDAgNjk2MDAwMAorNjU4IDAgNzAwMDAwMAorNTIzIDAgNzA0MDAwMAorNTU0IDAgNzA4MDAwMAorNTUzIDAgNzEyMDAwMAorNjA4MCAxIDcxNjAwMDAKKzQ5NiAwIDcyMDAwMDAKKzc2MyAwIDcyNDAwMDAKKzkzOSAwIDcyODAwMDAKKzcxNSAwIDczMjAwMDAKKzY3MiAwIDczNjAwMDAKKzYxNCAwIDc0MDAwMDAKKzgxMSAwIDc0NDAwMDAKKzkxNiAwIDc0ODAwMDAKKzExNTMgMCA3NTIwMDAwCis5NDAgMCA3NTYwMDAwCiszMjIgMCA3NjAwMDAwCis2NjEzIDEgNzY0MDAwMAorODUxIDAgNzY4MDAwMAorMTAwNyAwIDc3MjAwMDAKKzUyMCAwIDc3NjAwMDAKKzQ1NiAwIDc4MDAwMDAKKzYzOSAwIDc4NDAwMDAKKzc1OCAwIDc4ODAwMDAKKzg3OSAwIDc5MjAwMDAKKzExNTIgMCA3OTYwMDAwCisxMDYxIDAgODAwMDAwMAorOTQ2IDAgODA0MDAwMAorODU5IDAgODA4MDAwMAorMzYxMCAxIDgxMjAwMDAKKzg3MSAwIDgxNjAwMDAKKzc0NiAwIDgyMDAwMDAKKzM2NyAwIDgyNDAwMDAKKzM5NyAwIDgyODAwMDAKKzkzMCAwIDgzMjAwMDAKKzMzNyAwIDgzNjAwMDAKKzQxOCAwIDg0MDAwMDAKKzc0MCAwIDg0NDAwMDAKKzYzNyAwIDg0ODAwMDAKKzY2NiAwIDg1MjAwMDAKKzYyNyAwIDg1NjAwMDAKKzQzMzggMSA4NjAwMDAwCis3NDUgMCA4NjQwMDAwCis3ODMgMCA4NjgwMDAwCis0NjUgMCA4NzIwMDAwCis0NjAgMCA4NzYwMDAwCis0NTUgMCA4ODAwMDAwCis1MDYgMCA4ODQwMDAwCis0OTIgMCA4ODgwMDAwCis0ODUgMCA4OTIwMDAwCis1MTcgMCA4OTYwMDAwCis1MzQgMCA5MDAwMDAwCiszOTUgMCA5MDQwMDAwCis1NjI2IDEgOTA4MDAwMAorMTE2OSAwIDkxMjAwMDAKKzU2NCAwIDkxNjAwMDAKKzI2MSAwIDkyMDAwMDAKKzMyNyAwIDkyNDAwMDAKKzMwMyAwIDkyODAwMDAKKzExNDUgMCA5MzIwMDAwCisyNTcgMCA5MzYwMDAwCis0OTggMCA5NDAwMDAwCis0NjUgMCA5NDQwMDAwCis0MTQgMCA5NDgwMDAwCis1NTMgMCA5NTIwMDAwCis1NjE3IDEgOTU2MDAwMAorMTA1MiAwIDk2MDAwMDAKKzU5MiAwIDk2NDAwMDAKKzMyMyAwIDk2ODAwMDAKKzQ5NyAwIDk3MjAwMDAKKzQ2NyAwIDk3NjAwMDAKKzcwNSAwIDk4MDAwMDAKKzEwODYgMCA5ODQwMDAwCisxMjUzIDAgOTg4MDAwMAorMTI1MiAwIDk5MjAwMDAKKzc3NiAwIDk5NjAwMDAKZGlmZiAtLWdpdCBhL21lZGlhL2NvZGVjMi9oaWRsLzEuMC92dHMvcmVzL2JiYl9tcGVnMl8xNzZ4MTQ0XzEwNWticHNfMjVmcHMubTJ2IGIvbWVkaWEvY29kZWMyL2hpZGwvMS4wL3Z0cy9yZXMvYmJiX21wZWcyXzE3NngxNDRfMTA1a2Jwc18yNWZwcy5tMnYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2RmOTBjMwotLS0gL2Rldi9udWxsCisrKyBiL21lZGlhL2NvZGVjMi9oaWRsLzEuMC92dHMvcmVzL2JiYl9tcGVnMl8xNzZ4MTQ0XzEwNWticHNfMjVmcHMubTJ2CkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL21lZGlhL2NvZGVjMi9oaWRsLzEuMC92dHMvcmVzL2JiYl9tcGVnMl8zNTJ4Mjg4XzFtYnBzXzYwZnBzLmluZm8gYi9tZWRpYS9jb2RlYzIvaGlkbC8xLjAvdnRzL3Jlcy9iYmJfbXBlZzJfMzUyeDI4OF8xbWJwc182MGZwcy5pbmZvCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQxN2NhZjkKLS0tIC9kZXYvbnVsbAorKysgYi9tZWRpYS9jb2RlYzIvaGlkbC8xLjAvdnRzL3Jlcy9iYmJfbXBlZzJfMzUyeDI4OF8xbWJwc182MGZwcy5pbmZvCkBAIC0wLDAgKzEsNjAgQEAKKzE2NjgwIDEgMTY2NjYKKzE3MDE3IDAgMzMzMzMKKzEwNTM0IDAgNTAwMDAKKzEwMjg5IDAgNjY2NjYKKzM2OTggMCA4MzMzMworMjc3NiAwIDEwMDAwMAorMTkzNiAwIDExNjY2NgorMTQ5MyAwIDEzMzMzMworMTIxNyAwIDE1MDAwMAorOTkzIDAgMTY2NjY2Cis4MDUgMCAxODMzMzMKKzg1NyAwIDIwMDAwMAorNTA4MiAxIDIxNjY2NgorODEyIDAgMjMzMzMzCis3MTggMCAyNTAwMDAKKzc0NiAwIDI2NjY2NgorNzYyIDAgMjgzMzMzCis4NjUgMCAzMDAwMDAKKzc4MiAwIDMxNjY2NgorODMzIDAgMzMzMzMzCis3NTAgMCAzNTAwMDAKKzgxOSAwIDM2NjY2NgorODI2IDAgMzgzMzMzCis4NDYgMCA0MDAwMDAKKzQ1MjIgMSA0MTY2NjYKKzY3OCAwIDQzMzMzMworNzE4IDAgNDUwMDAwCis4MDMgMCA0NjY2NjYKKzc2OSAwIDQ4MzMzMworNzYyIDAgNTAwMDAwCis1ODcgMCA1MTY2NjYKKzYzNSAwIDUzMzMzMworNjU4IDAgNTUwMDAwCis3MTQgMCA1NjY2NjYKKzY3NyAwIDU4MzMzMworNjk5IDAgNjAwMDAwCis0NjE2IDEgNjE2NjY2Cis4MDAgMCA2MzMzMzMKKzgzMSAwIDY1MDAwMAorOTI4IDAgNjY2NjY2Cis4NjkgMCA2ODMzMzMKKzkzMSAwIDcwMDAwMAorOTMwIDAgNzE2NjY2Cis5NzQgMCA3MzMzMzMKKzk3OCAwIDc1MDAwMAorOTMyIDAgNzY2NjY2Cis5MTggMCA3ODMzMzMKKzk3OCAwIDgwMDAwMAorNDY1NSAxIDgxNjY2NgorODk3IDAgODMzMzMzCis4OTYgMCA4NTAwMDAKKzg4MyAwIDg2NjY2NgorOTQ5IDAgODgzMzMzCis5NjUgMCA5MDAwMDAKKzk1MSAwIDkxNjY2NgorOTAxIDAgOTMzMzMzCis5NjUgMCA5NTAwMDAKKzk1NSAwIDk2NjY2NgorOTQ4IDAgOTgzMzMzCis5NjggMCAxMDAwMDAwCmRpZmYgLS1naXQgYS9tZWRpYS9jb2RlYzIvaGlkbC8xLjAvdnRzL3Jlcy9iYmJfbXBlZzJfMzUyeDI4OF8xbWJwc182MGZwcy5tMnYgYi9tZWRpYS9jb2RlYzIvaGlkbC8xLjAvdnRzL3Jlcy9iYmJfbXBlZzJfMzUyeDI4OF8xbWJwc182MGZwcy5tMnYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmY2N2MyYgotLS0gL2Rldi9udWxsCisrKyBiL21lZGlhL2NvZGVjMi9oaWRsLzEuMC92dHMvcmVzL2JiYl9tcGVnMl8zNTJ4Mjg4XzFtYnBzXzYwZnBzLm0ydgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9tZWRpYS9jb2RlYzIvaGlkbC8xLjAvdnRzL3Jlcy9iYmJfbXBlZzRfMzUyeDI4OF81MTJrYnBzXzMwZnBzLmluZm8gYi9tZWRpYS9jb2RlYzIvaGlkbC8xLjAvdnRzL3Jlcy9iYmJfbXBlZzRfMzUyeDI4OF81MTJrYnBzXzMwZnBzLmluZm8KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjliYTliMgotLS0gL2Rldi9udWxsCisrKyBiL21lZGlhL2NvZGVjMi9oaWRsLzEuMC92dHMvcmVzL2JiYl9tcGVnNF8zNTJ4Mjg4XzUxMmticHNfMzBmcHMuaW5mbwpAQCAtMCwwICsxLDI0MSBAQAorNDcgMzIgMAorMjExMTUgMSAwCisxNjQ1NiAwIDMzMzMzCisxMTg4MCAwIDY2NjY2CisxMjE1NSAwIDEwMDAwMAorMTE0MDIgMCAxMzMzMzMKKzUzNDUgMCAxNjY2NjYKKzI5ODYgMCAyMDAwMDAKKzE5MjQgMCAyMzMzMzMKKzIyNzUgMCAyNjY2NjYKKzI3OTMgMCAzMDAwMDAKKzI3NTYgMCAzMzMzMzMKKzI5MzMgMCAzNjY2NjYKKzIxMTAwIDEgNDAwMDAwCisxMzAyIDAgNDMzMzMzCisyMjA2IDAgNDY2NjY2CisxNTk5IDAgNTAwMDAwCisyNTU4IDAgNTMzMzMzCisyNzg0IDAgNTY2NjY2CisyNDU4IDAgNjAwMDAwCisyNDgwIDAgNjMzMzMzCisxNDQ2IDAgNjY2NjY2CiszMTA5IDAgNzAwMDAwCis5NDQgMCA3MzMzMzMKKzMxMzQgMCA3NjY2NjYKKzIxMzQyIDEgODAwMDAwCis2NTIgMCA4MzMzMzMKKzE3MDggMCA4NjY2NjYKKzIyMDIgMCA5MDAwMDAKKzE2OTUgMCA5MzMzMzMKKzE2NjEgMCA5NjY2NjYKKzE2NTIgMCAxMDAwMDAwCisxNjc5IDAgMTAzMzMzMworMTY5MCAwIDEwNjY2NjYKKzE4MjQgMCAxMTAwMDAwCisxODAzIDAgMTEzMzMzMworMTU5OCAwIDExNjY2NjYKKzIxNTQwIDEgMTIwMDAwMAorMjA1IDAgMTIzMzMzMworMTEyNCAwIDEyNjY2NjYKKzEwNjkgMCAxMzAwMDAwCis4MzggMCAxMzMzMzMzCis3NjUgMCAxMzY2NjY2Cis0MjY1IDAgMTQwMDAwMAorOTQgMCAxNDMzMzMzCisyMDQ2MyAwIDE0NjY2NjYKKzEwMjggMCAxNTAwMDAwCisxNDc1IDAgMTUzMzMzMworMzYzMCAwIDE1NjY2NjYKKzI4MzczIDEgMTYwMDAwMAorNzI1IDAgMTYzMzMzMworMTExOSAwIDE2NjY2NjYKKzE0MjcgMCAxNzAwMDAwCisxNjc5IDAgMTczMzMzMworMTg2NiAwIDE3NjY2NjYKKzExOTcgMCAxODAwMDAwCisxNTcyIDAgMTgzMzMzMworMTY1MSAwIDE4NjY2NjYKKzE2NzggMCAxOTAwMDAwCisxNjg4IDAgMTkzMzMzMworMTY1OSAwIDE5NjY2NjYKKzE5OTAwIDEgMjAwMDAwMAorNTg0IDAgMjAzMzMzMworMTQ3NSAwIDIwNjY2NjYKKzE2NzggMCAyMTAwMDAwCisxMDEwIDAgMjEzMzMzMworMTQzNSAwIDIxNjY2NjYKKzE2MTIgMCAyMjAwMDAwCisxNjAyIDAgMjIzMzMzMworMTcwOSAwIDIyNjY2NjYKKzE3MzcgMCAyMzAwMDAwCisxODM1IDAgMjMzMzMzMworOTI2IDAgMjM2NjY2NgorMjAwOTAgMSAyNDAwMDAwCis2MzEgMCAyNDMzMzMzCisxNTc2IDAgMjQ2NjY2NgorOTQxIDAgMjUwMDAwMAorMjM0OSAwIDI1MzMzMzMKKzExMTIgMCAyNTY2NjY2CisxNTY2IDAgMjYwMDAwMAorMTc3MyAwIDI2MzMzMzMKKzk3OSAwIDI2NjY2NjYKKzIyNDYgMCAyNzAwMDAwCis5MDQgMCAyNzMzMzMzCisxMzQyIDAgMjc2NjY2NgorMjAxNDcgMSAyODAwMDAwCis2MzAgMCAyODMzMzMzCis5ODIgMCAyODY2NjY2CisyMDg5IDAgMjkwMDAwMAorMTAyMSAwIDI5MzMzMzMKKzE1MDYgMCAyOTY2NjY2CisxNjQyIDAgMzAwMDAwMAorOTY4IDAgMzAzMzMzMworMTI2MiAwIDMwNjY2NjYKKzIyNzAgMCAzMTAwMDAwCis4NjQgMCAzMTMzMzMzCisxMjUyIDAgMzE2NjY2NgorMjAxNDUgMSAzMjAwMDAwCis1OTUgMCAzMjMzMzMzCis5MTggMCAzMjY2NjY2CisxMTY3IDAgMzMwMDAwMAorMTM0NyAwIDMzMzMzMzMKKzE1OTcgMCAzMzY2NjY2CisxNjM2IDAgMzQwMDAwMAorOTQ0IDAgMzQzMzMzMworMTI5NSAwIDM0NjY2NjYKKzEzOTcgMCAzNTAwMDAwCisxNDEzIDAgMzUzMzMzMworMTQzMiAwIDM1NjY2NjYKKzIwMTgwIDEgMzYwMDAwMAorNTI1IDAgMzYzMzMzMworMTA2OCAwIDM2NjY2NjYKKzEyMzAgMCAzNzAwMDAwCisxNDI4IDAgMzczMzMzMworOTE2IDAgMzc2NjY2NgorMTk0OCAwIDM4MDAwMDAKKzk2NiAwIDM4MzMzMzMKKzEzNDIgMCAzODY2NjY2CisxMzM4IDAgMzkwMDAwMAorMTM3OSAwIDM5MzMzMzMKKzEyOTYgMCAzOTY2NjY2CisxNzM3OCAxIDQwMDAwMDAKKzU4MyAwIDQwMzMzMzMKKzkzNiAwIDQwNjY2NjYKKzE3NDUgMCA0MTAwMDAwCis5ODcgMCA0MTMzMzMzCisxMzkzIDAgNDE2NjY2NgorMTQ5NSAwIDQyMDAwMDAKKzg2OSAwIDQyMzMzMzMKKzE5MzggMCA0MjY2NjY2Cis4MjggMCA0MzAwMDAwCisxODUxIDAgNDMzMzMzMworODM0IDAgNDM2NjY2NgorMTcyODAgMSA0NDAwMDAwCis1ODAgMCA0NDMzMzMzCis4NjkgMCA0NDY2NjY2CisxNjA1IDAgNDUwMDAwMAorODQzIDAgNDUzMzMzMworNjE0NyAxIDQ1NjY2NjYKKzIyMCAwIDQ2MDAwMDAKKzExMDYgMCA0NjMzMzMzCiszOTUgMCA0NjY2NjY2CiszMDQgMCA0NzAwMDAwCisxOTQ2IDAgNDczMzMzMworMTU0IDAgNDc2NjY2NgorNDgyIDAgNDgwMDAwMAorOTQ5IDAgNDgzMzMzMworMTA4OCAwIDQ4NjY2NjYKKzk3NCAwIDQ5MDAwMDAKKzg3NiAwIDQ5MzMzMzMKKzkxNjQgMSA0OTY2NjY2CisxMDE5IDAgNTAwMDAwMAorOTgzIDAgNTAzMzMzMworMTM3NSAwIDUwNjY2NjYKKzEwNDEgMCA1MTAwMDAwCis3ODkgMCA1MTMzMzMzCisxMDM3IDAgNTE2NjY2NgorODEyIDAgNTIwMDAwMAorNzMyIDAgNTIzMzMzMworOTcyIDAgNTI2NjY2NgorNzA4IDAgNTMwMDAwMAorNjIzIDAgNTMzMzMzMworMTA2NjcgMSA1MzY2NjY2Cis0NjMgMCA1NDAwMDAwCis5MTEgMCA1NDMzMzMzCis4NjEgMCA1NDY2NjY2Cis1MDcgMCA1NTAwMDAwCisxMDE1IDAgNTUzMzMzMworNTAxIDAgNTU2NjY2NgorOTM0IDAgNTYwMDAwMAorODEyIDAgNTYzMzMzMworODU1IDAgNTY2NjY2NgorODA0IDAgNTcwMDAwMAorNzgzIDAgNTczMzMzMworMTA2MTAgMSA1NzY2NjY2Cis5NTAgMCA1ODAwMDAwCisxMjkyIDAgNTgzMzMzMworMTAwMiAwIDU4NjY2NjYKKzcyOCAwIDU5MDAwMDAKKzk2MCAwIDU5MzMzMzMKKzEyMzAgMCA1OTY2NjY2CisxMzE1IDAgNjAwMDAwMAorMTI0OCAwIDYwMzMzMzMKKzk5NSAwIDYwNjY2NjYKKzE0MDEgMCA2MTAwMDAwCis5MDUgMCA2MTMzMzMzCis5MzI2IDEgNjE2NjY2NgorNzI2IDAgNjIwMDAwMAorNjY3IDAgNjIzMzMzMworODMzIDAgNjI2NjY2NgorMTAwNyAwIDYzMDAwMDAKKzExNzIgMCA2MzMzMzMzCisxOTEwIDAgNjM2NjY2NgorMTk1NCAwIDY0MDAwMDAKKzE0OTggMCA2NDMzMzMzCisxMTg4IDAgNjQ2NjY2NgorNzg0IDAgNjUwMDAwMAorMTAwNSAwIDY1MzMzMzMKKzEwMDMwIDEgNjU2NjY2NgorNDUyIDAgNjYwMDAwMAorNzYzIDAgNjYzMzMzMworNjM5IDAgNjY2NjY2NgorNjcxIDAgNjcwMDAwMAorODY3IDAgNjczMzMzMworOTYzIDAgNjc2NjY2NgorOTgyIDAgNjgwMDAwMAorOTk1IDAgNjgzMzMzMworOTgyIDAgNjg2NjY2NgorNzQ3IDAgNjkwMDAwMAorNTc0IDAgNjkzMzMzMworMTIzNTMgMSA2OTY2NjY2Cis0NzQgMCA3MDAwMDAwCis5NjkgMCA3MDMzMzMzCis2MzMgMCA3MDY2NjY2Cis3MjMgMCA3MTAwMDAwCisxMjIxIDAgNzEzMzMzMworNjc0IDAgNzE2NjY2NgorNzc2IDAgNzIwMDAwMAorNTcyIDAgNzIzMzMzMworOTEyIDAgNzI2NjY2NgorNTY0IDAgNzMwMDAwMAorNTk0IDAgNzMzMzMzMworMTY2NjEgMSA3MzY2NjY2Cis1MTggMCA3NDAwMDAwCis2NTYgMCA3NDMzMzMzCis2MjUgMCA3NDY2NjY2Cis1ODMgMCA3NTAwMDAwCis1ODQgMCA3NTMzMzMzCisxMDI3IDAgNzU2NjY2NgorODEyIDAgNzYwMDAwMAorNzI5IDAgNzYzMzMzMworNzY2IDAgNzY2NjY2NgorOTAxIDAgNzcwMDAwMAorOTYwIDAgNzczMzMzMworMTIzMzYgMSA3NzY2NjY2Cis5NDQgMCA3ODAwMDAwCisxMzk4IDAgNzgzMzMzMworMTYyNSAwIDc4NjY2NjYKKzIxMDMgMCA3OTAwMDAwCisxNjMwIDAgNzkzMzMzMworMTIyOCAwIDc5NjY2NjYKZGlmZiAtLWdpdCBhL21lZGlhL2NvZGVjMi9oaWRsLzEuMC92dHMvcmVzL2JiYl9tcGVnNF8zNTJ4Mjg4XzUxMmticHNfMzBmcHMubTR2IGIvbWVkaWEvY29kZWMyL2hpZGwvMS4wL3Z0cy9yZXMvYmJiX21wZWc0XzM1MngyODhfNTEya2Jwc18zMGZwcy5tNHYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjdlYWQwMAotLS0gL2Rldi9udWxsCisrKyBiL21lZGlhL2NvZGVjMi9oaWRsLzEuMC92dHMvcmVzL2JiYl9tcGVnNF8zNTJ4Mjg4XzUxMmticHNfMzBmcHMubTR2CkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL21lZGlhL2NvZGVjMi9oaWRsLzEuMC92dHMvcmVzL2JiYl9vcHVzX3N0ZXJlb18xMjhrYnBzXzQ4MDAwaHouaW5mbyBiL21lZGlhL2NvZGVjMi9oaWRsLzEuMC92dHMvcmVzL2JiYl9vcHVzX3N0ZXJlb18xMjhrYnBzXzQ4MDAwaHouaW5mbwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xY2VkMTJiCi0tLSAvZGV2L251bGwKKysrIGIvbWVkaWEvY29kZWMyL2hpZGwvMS4wL3Z0cy9yZXMvYmJiX29wdXNfc3RlcmVvXzEyOGticHNfNDgwMDBoei5pbmZvCkBAIC0wLDAgKzEsNDk5IEBACisxOSAzMiAwCis4IDMyIDAKKzggMzIgMAorNTI5IDEgMAorMzI5IDEgMTM1MDAKKzM0OSAxIDMzNTAwCiszMzYgMSA1MzUwMAorMzgzIDEgNzM1MDAKKzM1OSAxIDkzNTAwCiszNDQgMSAxMTM1MDAKKzM0MyAxIDEzMzUwMAorMzMyIDEgMTUzNTAwCiszMjAgMSAxNzM1MDAKKzMxOSAxIDE5MzUwMAorMzIzIDEgMjEzNTAwCiszMjAgMSAyMzM1MDAKKzMyOCAxIDI1MzUwMAorMzQwIDEgMjczNTAwCiszMTggMSAyOTM1MDAKKzMxOSAxIDMxMzUwMAorMzM1IDEgMzMzNTAwCis1MTEgMSAzNTM1MDAKKzM5NSAxIDM3MzUwMAorMzI3IDEgMzkzNTAwCis0NzkgMSA0MTM1MDAKKzMzMiAxIDQzMzUwMAorMzIwIDEgNDUzNTAwCiszMjEgMSA0NzM1MDAKKzMxMCAxIDQ5MzUwMAorMzEwIDEgNTEzNTAwCiszMTAgMSA1MzM1MDAKKzMyNiAxIDU1MzUwMAorMzMwIDEgNTczNTAwCiszMTggMSA1OTM1MDAKKzMwOSAxIDYxMzUwMAorMzA0IDEgNjMzNTAwCisyOTggMSA2NTM1MDAKKzI5NCAxIDY3MzUwMAorMzAwIDEgNjkzNTAwCiszMTQgMSA3MTM1MDAKKzMwNCAxIDczMzUwMAorMzA3IDEgNzUzNTAwCiszMjEgMSA3NzM1MDAKKzMzMyAxIDc5MzUwMAorMzM1IDEgODEzNTAwCiszMDYgMSA4MzM1MDAKKzMxNSAxIDg1MzUwMAorMzIwIDEgODczNTAwCiszMTUgMSA4OTM1MDAKKzMwOCAxIDkxMzUwMAorMzIwIDEgOTMzNTAwCiszMTEgMSA5NTM1MDAKKzMxMSAxIDk3MzUwMAorMzEzIDEgOTkzNTAwCiszMTQgMSAxMDEzNTAwCiszMDggMSAxMDMzNTAwCiszMDcgMSAxMDUzNTAwCiszMTcgMSAxMDczNTAwCiszMjggMSAxMDkzNTAwCiszMTcgMSAxMTEzNTAwCiszMTIgMSAxMTMzNTAwCiszMDggMSAxMTUzNTAwCiszMTUgMSAxMTczNTAwCiszMjAgMSAxMTkzNTAwCiszMjIgMSAxMjEzNTAwCiszMjMgMSAxMjMzNTAwCiszMjIgMSAxMjUzNTAwCiszMjIgMSAxMjczNTAwCiszMDEgMSAxMjkzNTAwCiszMDMgMSAxMzEzNTAwCiszMDggMSAxMzMzNTAwCisyOTkgMSAxMzUzNTAwCisyOTcgMSAxMzczNTAwCisyOTMgMSAxMzkzNTAwCisyOTUgMSAxNDEzNTAwCisyOTcgMSAxNDMzNTAwCiszMDAgMSAxNDUzNTAwCisyOTQgMSAxNDczNTAwCisyOTkgMSAxNDkzNTAwCisyOTYgMSAxNTEzNTAwCiszMDMgMSAxNTMzNTAwCiszMTMgMSAxNTUzNTAwCiszMDYgMSAxNTczNTAwCiszMDMgMSAxNTkzNTAwCiszMTEgMSAxNjEzNTAwCiszMDcgMSAxNjMzNTAwCiszMTAgMSAxNjUzNTAwCiszMzkgMSAxNjczNTAwCiszMjUgMSAxNjkzNTAwCiszMjAgMSAxNzEzNTAwCiszMTUgMSAxNzMzNTAwCiszMTYgMSAxNzUzNTAwCiszMzggMSAxNzczNTAwCiszMjUgMSAxNzkzNTAwCiszMjUgMSAxODEzNTAwCiszMjggMSAxODMzNTAwCiszMDQgMSAxODUzNTAwCisyOTcgMSAxODczNTAwCiszMjIgMSAxODkzNTAwCiszMTEgMSAxOTEzNTAwCiszMDcgMSAxOTMzNTAwCiszMDAgMSAxOTUzNTAwCiszMDEgMSAxOTczNTAwCiszMDkgMSAxOTkzNTAwCiszMDAgMSAyMDEzNTAwCiszMDYgMSAyMDMzNTAwCiszMDUgMSAyMDUzNTAwCisyOTggMSAyMDczNTAwCisyOTEgMSAyMDkzNTAwCiszMDEgMSAyMTEzNTAwCiszMDAgMSAyMTMzNTAwCis0MzkgMSAyMTUzNTAwCisyOTIgMSAyMTczNTAwCiszMDggMSAyMTkzNTAwCiszMDUgMSAyMjEzNTAwCisyOTggMSAyMjMzNTAwCisyOTcgMSAyMjUzNTAwCisyOTMgMSAyMjczNTAwCis0MDggMSAyMjkzNTAwCisyOTggMSAyMzEzNTAwCis0NTIgMSAyMzMzNTAwCisyOTcgMSAyMzUzNTAwCiszMDMgMSAyMzczNTAwCiszMDAgMSAyMzkzNTAwCiszMTAgMSAyNDEzNTAwCisyOTkgMSAyNDMzNTAwCiszMDYgMSAyNDUzNTAwCiszMTYgMSAyNDczNTAwCiszMDggMSAyNDkzNTAwCiszMTMgMSAyNTEzNTAwCiszMDkgMSAyNTMzNTAwCiszMTAgMSAyNTUzNTAwCiszMTUgMSAyNTczNTAwCiszMDkgMSAyNTkzNTAwCiszMTcgMSAyNjEzNTAwCiszMTEgMSAyNjMzNTAwCiszMjggMSAyNjUzNTAwCiszMzMgMSAyNjczNTAwCiszMjYgMSAyNjkzNTAwCiszMjMgMSAyNzEzNTAwCiszMTYgMSAyNzMzNTAwCiszMjUgMSAyNzUzNTAwCiszMTYgMSAyNzczNTAwCiszMTkgMSAyNzkzNTAwCiszMjYgMSAyODEzNTAwCiszMjAgMSAyODMzNTAwCiszMjggMSAyODUzNTAwCiszMTIgMSAyODczNTAwCiszMTQgMSAyODkzNTAwCiszMDkgMSAyOTEzNTAwCiszMDYgMSAyOTMzNTAwCisyOTUgMSAyOTUzNTAwCiszMDQgMSAyOTczNTAwCiszMjYgMSAyOTkzNTAwCisyOTEgMSAzMDEzNTAwCisyOTkgMSAzMDMzNTAwCisyOTMgMSAzMDUzNTAwCisyODggMSAzMDczNTAwCisyOTQgMSAzMDkzNTAwCisyOTIgMSAzMTEzNTAwCisyOTIgMSAzMTMzNTAwCisyODggMSAzMTUzNTAwCiszMDggMSAzMTczNTAwCiszMDQgMSAzMTkzNTAwCisyOTIgMSAzMjEzNTAwCiszODIgMSAzMjMzNTAwCiszODEgMSAzMjUzNTAwCisyOTkgMSAzMjczNTAwCiszMTYgMSAzMjkzNTAwCiszMDggMSAzMzEzNTAwCiszMDEgMSAzMzMzNTAwCisyOTcgMSAzMzUzNTAwCisyOTkgMSAzMzczNTAwCisyOTQgMSAzMzkzNTAwCisyOTUgMSAzNDEzNTAwCiszMTcgMSAzNDMzNTAwCisyOTcgMSAzNDUzNTAwCiszMDkgMSAzNDczNTAwCiszMTMgMSAzNDkzNTAwCiszMjAgMSAzNTEzNTAwCiszMjkgMSAzNTMzNTAwCiszMzAgMSAzNTUzNTAwCiszMjQgMSAzNTczNTAwCiszMjQgMSAzNTkzNTAwCiszMDkgMSAzNjEzNTAwCiszMDQgMSAzNjMzNTAwCiszMTMgMSAzNjUzNTAwCiszMTIgMSAzNjczNTAwCisyOTkgMSAzNjkzNTAwCisyOTUgMSAzNzEzNTAwCiszMDEgMSAzNzMzNTAwCisyOTUgMSAzNzUzNTAwCisyOTcgMSAzNzczNTAwCiszMDIgMSAzNzkzNTAwCisyOTggMSAzODEzNTAwCisyOTkgMSAzODMzNTAwCisyOTYgMSAzODUzNTAwCisyOTIgMSAzODczNTAwCiszMDcgMSAzODkzNTAwCiszMDMgMSAzOTEzNTAwCiszMTMgMSAzOTMzNTAwCiszMTggMSAzOTUzNTAwCiszMTMgMSAzOTczNTAwCiszNTMgMSAzOTkzNTAwCiszNzEgMSA0MDEzNTAwCisyOTIgMSA0MDMzNTAwCiszMDAgMSA0MDUzNTAwCiszODEgMSA0MDczNTAwCisyOTQgMSA0MDkzNTAwCiszMDEgMSA0MTEzNTAwCiszMDUgMSA0MTMzNTAwCisyOTkgMSA0MTUzNTAwCiszMDUgMSA0MTczNTAwCiszMjIgMSA0MTkzNTAwCiszMTUgMSA0MjEzNTAwCiszMjYgMSA0MjMzNTAwCiszMzggMSA0MjUzNTAwCiszMjAgMSA0MjczNTAwCiszMTkgMSA0MjkzNTAwCiszMjcgMSA0MzEzNTAwCiszMzAgMSA0MzMzNTAwCiszMTAgMSA0MzUzNTAwCiszMDMgMSA0MzczNTAwCisyOTkgMSA0MzkzNTAwCisyOTMgMSA0NDEzNTAwCisyOTMgMSA0NDMzNTAwCisyOTQgMSA0NDUzNTAwCisyOTUgMSA0NDczNTAwCisyOTUgMSA0NDkzNTAwCiszMjMgMSA0NTEzNTAwCiszMDkgMSA0NTMzNTAwCiszMDkgMSA0NTUzNTAwCiszMDEgMSA0NTczNTAwCis0NzMgMSA0NTkzNTAwCisyOTEgMSA0NjEzNTAwCisyOTcgMSA0NjMzNTAwCisyOTQgMSA0NjUzNTAwCisyOTMgMSA0NjczNTAwCiszMDQgMSA0NjkzNTAwCisyOTIgMSA0NzEzNTAwCiszMDIgMSA0NzMzNTAwCisyOTYgMSA0NzUzNTAwCisyOTggMSA0NzczNTAwCiszMDEgMSA0NzkzNTAwCiszMDcgMSA0ODEzNTAwCisyODUgMSA0ODMzNTAwCisyOTQgMSA0ODUzNTAwCiszMDQgMSA0ODczNTAwCisyOTQgMSA0ODkzNTAwCisyOTUgMSA0OTEzNTAwCiszMjUgMSA0OTMzNTAwCiszMTkgMSA0OTUzNTAwCiszMjMgMSA0OTczNTAwCiszMTMgMSA0OTkzNTAwCiszMDMgMSA1MDEzNTAwCisyOTYgMSA1MDMzNTAwCisyOTUgMSA1MDUzNTAwCisyOTAgMSA1MDczNTAwCisyOTcgMSA1MDkzNTAwCisyOTYgMSA1MTEzNTAwCisyOTYgMSA1MTMzNTAwCisyOTIgMSA1MTUzNTAwCisyOTUgMSA1MTczNTAwCisyODcgMSA1MTkzNTAwCisyOTQgMSA1MjEzNTAwCisyOTAgMSA1MjMzNTAwCisyOTcgMSA1MjUzNTAwCisyOTcgMSA1MjczNTAwCisyOTcgMSA1MjkzNTAwCisyOTIgMSA1MzEzNTAwCisyOTcgMSA1MzMzNTAwCisyOTAgMSA1MzUzNTAwCisyOTMgMSA1MzczNTAwCisyOTMgMSA1MzkzNTAwCisyOTEgMSA1NDEzNTAwCisyOTIgMSA1NDMzNTAwCisyOTAgMSA1NDUzNTAwCisyOTEgMSA1NDczNTAwCisyOTYgMSA1NDkzNTAwCisyOTUgMSA1NTEzNTAwCiszMjcgMSA1NTMzNTAwCisyOTMgMSA1NTUzNTAwCisyOTEgMSA1NTczNTAwCisyOTEgMSA1NTkzNTAwCiszMTEgMSA1NjEzNTAwCisyOTEgMSA1NjMzNTAwCisyOTQgMSA1NjUzNTAwCisyOTYgMSA1NjczNTAwCisyOTUgMSA1NjkzNTAwCisyODkgMSA1NzEzNTAwCisyOTUgMSA1NzMzNTAwCisyOTUgMSA1NzUzNTAwCisyOTcgMSA1NzczNTAwCisyOTIgMSA1NzkzNTAwCisyOTcgMSA1ODEzNTAwCisyOTIgMSA1ODMzNTAwCisyOTUgMSA1ODUzNTAwCisyOTYgMSA1ODczNTAwCisyOTUgMSA1ODkzNTAwCiszMDMgMSA1OTEzNTAwCiszMDQgMSA1OTMzNTAwCiszMDEgMSA1OTUzNTAwCiszMDcgMSA1OTczNTAwCiszMDQgMSA1OTkzNTAwCiszMTAgMSA2MDEzNTAwCiszMTAgMSA2MDMzNTAwCiszMDUgMSA2MDUzNTAwCiszMDEgMSA2MDczNTAwCiszMDIgMSA2MDkzNTAwCiszMDUgMSA2MTEzNTAwCisyOTggMSA2MTMzNTAwCiszMDAgMSA2MTUzNTAwCiszMDAgMSA2MTczNTAwCisyOTIgMSA2MTkzNTAwCisyOTcgMSA2MjEzNTAwCiszMDEgMSA2MjMzNTAwCisyOTcgMSA2MjUzNTAwCisyOTcgMSA2MjczNTAwCisyOTggMSA2MjkzNTAwCisyOTcgMSA2MzEzNTAwCiszMDAgMSA2MzMzNTAwCisyOTMgMSA2MzUzNTAwCisyOTMgMSA2MzczNTAwCisyOTcgMSA2MzkzNTAwCisyOTQgMSA2NDEzNTAwCiszMDcgMSA2NDMzNTAwCiszMDIgMSA2NDUzNTAwCiszMDcgMSA2NDczNTAwCiszMjAgMSA2NDkzNTAwCiszMzAgMSA2NTEzNTAwCiszMzMgMSA2NTMzNTAwCiszMzcgMSA2NTUzNTAwCiszMzEgMSA2NTczNTAwCiszMjMgMSA2NTkzNTAwCiszMTIgMSA2NjEzNTAwCiszMjYgMSA2NjMzNTAwCiszMjggMSA2NjUzNTAwCiszMzIgMSA2NjczNTAwCiszMzMgMSA2NjkzNTAwCiszNDAgMSA2NzEzNTAwCiszMzYgMSA2NzMzNTAwCiszMjQgMSA2NzUzNTAwCiszMTIgMSA2NzczNTAwCiszMDEgMSA2NzkzNTAwCisyODkgMSA2ODEzNTAwCiszMDIgMSA2ODMzNTAwCisyOTYgMSA2ODUzNTAwCisyOTkgMSA2ODczNTAwCisyODkgMSA2ODkzNTAwCisyOTUgMSA2OTEzNTAwCisyOTkgMSA2OTMzNTAwCiszNzQgMSA2OTUzNTAwCiszOTEgMSA2OTczNTAwCiszNjUgMSA2OTkzNTAwCiszNDAgMSA3MDEzNTAwCiszMzAgMSA3MDMzNTAwCiszMzcgMSA3MDUzNTAwCiszMjggMSA3MDczNTAwCiszMjkgMSA3MDkzNTAwCiszMTkgMSA3MTEzNTAwCiszMTIgMSA3MTMzNTAwCiszMDggMSA3MTUzNTAwCiszMDQgMSA3MTczNTAwCiszMTIgMSA3MTkzNTAwCiszMTEgMSA3MjEzNTAwCiszMTYgMSA3MjMzNTAwCisyOTkgMSA3MjUzNTAwCiszMzAgMSA3MjczNTAwCiszMzAgMSA3MjkzNTAwCiszMzAgMSA3MzEzNTAwCiszNDIgMSA3MzMzNTAwCis0MzkgMSA3MzUzNTAwCiszMjIgMSA3MzczNTAwCisyOTggMSA3MzkzNTAwCisyOTMgMSA3NDEzNTAwCiszMTAgMSA3NDMzNTAwCiszMDMgMSA3NDUzNTAwCiszMTcgMSA3NDczNTAwCis0NTMgMSA3NDkzNTAwCiszNzcgMSA3NTEzNTAwCiszNzQgMSA3NTMzNTAwCisyOTIgMSA3NTUzNTAwCisyOTUgMSA3NTczNTAwCisyNzQgMSA3NTkzNTAwCisyOTIgMSA3NjEzNTAwCisyOTEgMSA3NjMzNTAwCiszNjcgMSA3NjUzNTAwCisyOTUgMSA3NjczNTAwCisyOTggMSA3NjkzNTAwCisyOTcgMSA3NzEzNTAwCiszMDEgMSA3NzMzNTAwCisyOTIgMSA3NzUzNTAwCiszNDQgMSA3NzczNTAwCisyOTYgMSA3NzkzNTAwCisyOTcgMSA3ODEzNTAwCiszMDYgMSA3ODMzNTAwCiszMDggMSA3ODUzNTAwCiszMDUgMSA3ODczNTAwCiszMTMgMSA3ODkzNTAwCiszMDYgMSA3OTEzNTAwCiszMjIgMSA3OTMzNTAwCiszMTMgMSA3OTUzNTAwCiszMDUgMSA3OTczNTAwCiszMDQgMSA3OTkzNTAwCiszMTMgMSA4MDEzNTAwCiszMjQgMSA4MDMzNTAwCiszMTIgMSA4MDUzNTAwCiszMTggMSA4MDczNTAwCiszMTEgMSA4MDkzNTAwCiszMDIgMSA4MTEzNTAwCiszMDUgMSA4MTMzNTAwCiszMTIgMSA4MTUzNTAwCiszMTMgMSA4MTczNTAwCiszMTIgMSA4MTkzNTAwCiszMzUgMSA4MjEzNTAwCiszMzMgMSA4MjMzNTAwCiszNDYgMSA4MjUzNTAwCiszMzkgMSA4MjczNTAwCiszMzcgMSA4MjkzNTAwCiszNDEgMSA4MzEzNTAwCiszMzUgMSA4MzMzNTAwCiszMjUgMSA4MzUzNTAwCiszMjQgMSA4MzczNTAwCiszMTcgMSA4MzkzNTAwCiszMTUgMSA4NDEzNTAwCiszMDMgMSA4NDMzNTAwCiszMTcgMSA4NDUzNTAwCis0NTIgMSA4NDczNTAwCiszMjQgMSA4NDkzNTAwCiszMjEgMSA4NTEzNTAwCiszMzUgMSA4NTMzNTAwCiszMjcgMSA4NTUzNTAwCiszMTUgMSA4NTczNTAwCiszMjEgMSA4NTkzNTAwCiszMTkgMSA4NjEzNTAwCiszMDggMSA4NjMzNTAwCiszMTQgMSA4NjUzNTAwCiszMjIgMSA4NjczNTAwCiszMjggMSA4NjkzNTAwCiszMjAgMSA4NzEzNTAwCiszMjQgMSA4NzMzNTAwCiszMzEgMSA4NzUzNTAwCiszMzAgMSA4NzczNTAwCiszMjggMSA4NzkzNTAwCiszMTggMSA4ODEzNTAwCiszMTQgMSA4ODMzNTAwCiszMTggMSA4ODUzNTAwCiszMTggMSA4ODczNTAwCiszMjUgMSA4ODkzNTAwCiszMzggMSA4OTEzNTAwCiszNDEgMSA4OTMzNTAwCiszMzMgMSA4OTUzNTAwCiszMzAgMSA4OTczNTAwCiszMzggMSA4OTkzNTAwCiszMzMgMSA5MDEzNTAwCiszMzAgMSA5MDMzNTAwCiszNDQgMSA5MDUzNTAwCis0NzkgMSA5MDczNTAwCis0NzMgMSA5MDkzNTAwCiszMzMgMSA5MTEzNTAwCiszMzcgMSA5MTMzNTAwCis0OTUgMSA5MTUzNTAwCiszNTMgMSA5MTczNTAwCiszNTIgMSA5MTkzNTAwCiszNDQgMSA5MjEzNTAwCiszMzYgMSA5MjMzNTAwCiszMjQgMSA5MjUzNTAwCiszMjEgMSA5MjczNTAwCiszNTAgMSA5MjkzNTAwCiszNDcgMSA5MzEzNTAwCiszNDMgMSA5MzMzNTAwCiszNDUgMSA5MzUzNTAwCiszMzcgMSA5MzczNTAwCiszMzUgMSA5MzkzNTAwCiszMzMgMSA5NDEzNTAwCiszMzYgMSA5NDMzNTAwCiszMzQgMSA5NDUzNTAwCiszMzMgMSA5NDczNTAwCiszMzEgMSA5NDkzNTAwCiszMjkgMSA5NTEzNTAwCiszMTkgMSA5NTMzNTAwCiszMjEgMSA5NTUzNTAwCiszMTYgMSA5NTczNTAwCiszMjIgMSA5NTkzNTAwCis0NDggMSA5NjEzNTAwCiszMTIgMSA5NjMzNTAwCiszMDYgMSA5NjUzNTAwCiszMDEgMSA5NjczNTAwCiszMDMgMSA5NjkzNTAwCisyOTYgMSA5NzEzNTAwCiszMDAgMSA5NzMzNTAwCisyOTUgMSA5NzUzNTAwCiszMDAgMSA5NzczNTAwCisyOTcgMSA5NzkzNTAwCiszMDAgMSA5ODEzNTAwCisyOTcgMSA5ODMzNTAwCis1MTIgMSA5ODUzNTAwCisyOTIgMSA5ODczNTAwCis0NjggMSA5ODkzNTAwCmRpZmYgLS1naXQgYS9tZWRpYS9jb2RlYzIvaGlkbC8xLjAvdnRzL3Jlcy9iYmJfb3B1c19zdGVyZW9fMTI4a2Jwc180ODAwMGh6Lm9wdXMgYi9tZWRpYS9jb2RlYzIvaGlkbC8xLjAvdnRzL3Jlcy9iYmJfb3B1c19zdGVyZW9fMTI4a2Jwc180ODAwMGh6Lm9wdXMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmI2Yjg3MAotLS0gL2Rldi9udWxsCisrKyBiL21lZGlhL2NvZGVjMi9oaWRsLzEuMC92dHMvcmVzL2JiYl9vcHVzX3N0ZXJlb18xMjhrYnBzXzQ4MDAwaHoub3B1cwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9tZWRpYS9jb2RlYzIvaGlkbC8xLjAvdnRzL3Jlcy9iYmJfcmF3XzFjaF8xNmtoel9zMTZsZS5yYXcgYi9tZWRpYS9jb2RlYzIvaGlkbC8xLjAvdnRzL3Jlcy9iYmJfcmF3XzFjaF8xNmtoel9zMTZsZS5yYXcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGEyZjQxYgotLS0gL2Rldi9udWxsCisrKyBiL21lZGlhL2NvZGVjMi9oaWRsLzEuMC92dHMvcmVzL2JiYl9yYXdfMWNoXzE2a2h6X3MxNmxlLnJhdwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9tZWRpYS9jb2RlYzIvaGlkbC8xLjAvdnRzL3Jlcy9iYmJfcmF3XzFjaF84a2h6X3MxNmxlLnJhdyBiL21lZGlhL2NvZGVjMi9oaWRsLzEuMC92dHMvcmVzL2JiYl9yYXdfMWNoXzhraHpfczE2bGUucmF3Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMxNDllYjIKLS0tIC9kZXYvbnVsbAorKysgYi9tZWRpYS9jb2RlYzIvaGlkbC8xLjAvdnRzL3Jlcy9iYmJfcmF3XzFjaF84a2h6X3MxNmxlLnJhdwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9tZWRpYS9jb2RlYzIvaGlkbC8xLjAvdnRzL3Jlcy9iYmJfcmF3XzFjaF84a2h6X3MzMmxlLmluZm8gYi9tZWRpYS9jb2RlYzIvaGlkbC8xLjAvdnRzL3Jlcy9iYmJfcmF3XzFjaF84a2h6X3MzMmxlLmluZm8KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTBlMjRjYwotLS0gL2Rldi9udWxsCisrKyBiL21lZGlhL2NvZGVjMi9oaWRsLzEuMC92dHMvcmVzL2JiYl9yYXdfMWNoXzhraHpfczMybGUuaW5mbwpAQCAtMCwwICsxLDEwIEBACisxNjM4NCAxIDAKKzE2Mzg0IDEgMTAyNDAwMAorMTYzODQgMSAyMDQ4MDAwCisxNjM4NCAxIDMwNzIwMDAKKzE2Mzg0IDEgNDA5NjAwMAorMTYzODQgMSA1MTIwMDAwCisxNjM4NCAxIDYxNDQwMDAKKzE2Mzg0IDEgNzE2ODAwMAorMTYzODQgMSA4MTkyMDAwCisxMDkyNCAxIDkyMTYwMDAKZGlmZiAtLWdpdCBhL21lZGlhL2NvZGVjMi9oaWRsLzEuMC92dHMvcmVzL2JiYl9yYXdfMWNoXzhraHpfczMybGUucmF3IGIvbWVkaWEvY29kZWMyL2hpZGwvMS4wL3Z0cy9yZXMvYmJiX3Jhd18xY2hfOGtoel9zMzJsZS5yYXcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmQ5MWI0NgotLS0gL2Rldi9udWxsCisrKyBiL21lZGlhL2NvZGVjMi9oaWRsLzEuMC92dHMvcmVzL2JiYl9yYXdfMWNoXzhraHpfczMybGUucmF3CkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL21lZGlhL2NvZGVjMi9oaWRsLzEuMC92dHMvcmVzL2JiYl9yYXdfMmNoXzQ4a2h6X3MxNmxlLnJhdyBiL21lZGlhL2NvZGVjMi9oaWRsLzEuMC92dHMvcmVzL2JiYl9yYXdfMmNoXzQ4a2h6X3MxNmxlLnJhdwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40OThiMmVjCi0tLSAvZGV2L251bGwKKysrIGIvbWVkaWEvY29kZWMyL2hpZGwvMS4wL3Z0cy9yZXMvYmJiX3Jhd18yY2hfNDhraHpfczE2bGUucmF3CkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL21lZGlhL2NvZGVjMi9oaWRsLzEuMC92dHMvcmVzL2JiYl92b3JiaXNfc3RlcmVvXzEyOGticHNfNDgwMDBoei5pbmZvIGIvbWVkaWEvY29kZWMyL2hpZGwvMS4wL3Z0cy9yZXMvYmJiX3ZvcmJpc19zdGVyZW9fMTI4a2Jwc180ODAwMGh6LmluZm8KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDlhNmQzMwotLS0gL2Rldi9udWxsCisrKyBiL21lZGlhL2NvZGVjMi9oaWRsLzEuMC92dHMvcmVzL2JiYl92b3JiaXNfc3RlcmVvXzEyOGticHNfNDgwMDBoei5pbmZvCkBAIC0wLDAgKzEsNTIwIEBACiszMCAzMiAwCis0MTQwIDMyIDAKKzMzIDMyIDAKKzUyIDEgMAorNTggMSAyNjY2Cis2MSAxIDUzMzMKKzU2IDEgODAwMAorNTkgMSAxMDY2NgorNjMgMSAxMzMzMworNjYgMSAxNjAwMAorNzEgMSAxODY2NgorNzYgMSAyMTMzMworMzc0IDEgMjQwMDAKKzM2NiAxIDM2MDAwCiszNzggMSA1NzMzMworMzkzIDEgNzg2NjYKKzM5MyAxIDEwMDAwMAorMzg2IDEgMTIxMzMzCiszNzUgMSAxNDI2NjYKKzM4OCAxIDE2NDAwMAorMzc4IDEgMTg1MzMzCiszNzkgMSAyMDY2NjYKKzM3NCAxIDIyODAwMAorMzU2IDEgMjQ5MzMzCiszNTggMSAyNzA2NjYKKzMzMiAxIDI5MjAwMAorMzM1IDEgMzEzMzMzCiszNjMgMSAzMzQ2NjYKKzM0MSAxIDM1NjAwMAorMzYwIDEgMzc3MzMzCiszNDEgMSAzOTg2NjYKKzMzNSAxIDQyMDAwMAorMzU3IDEgNDQxMzMzCiszNTUgMSA0NjI2NjYKKzM2MyAxIDQ4NDAwMAorMzgyIDEgNTA1MzMzCiszNzEgMSA1MjY2NjYKKzM1NyAxIDU0ODAwMAorMzUzIDEgNTY5MzMzCiszNTAgMSA1OTA2NjYKKzMyNyAxIDYxMjAwMAorMzE1IDEgNjMzMzMzCiszMDcgMSA2NTQ2NjYKKzMwMyAxIDY3NjAwMAorMjk1IDEgNjk3MzMzCiszMTIgMSA3MTg2NjYKKzMxNiAxIDc0MDAwMAorMzE1IDEgNzYxMzMzCiszMTggMSA3ODI2NjYKKzMzMCAxIDgwNDAwMAorMzE4IDEgODI1MzMzCiszMTUgMSA4NDY2NjYKKzMyMiAxIDg2ODAwMAorMzE1IDEgODg5MzMzCiszMTAgMSA5MTA2NjYKKzMxNSAxIDkzMjAwMAorMzE0IDEgOTUzMzMzCiszMDIgMSA5NzQ2NjYKKzMxMyAxIDk5NjAwMAorMzIyIDEgMTAxNzMzMworMzIzIDEgMTAzODY2NgorMzE5IDEgMTA2MDAwMAorMzI1IDEgMTA4MTMzMworMzI4IDEgMTEwMjY2NgorMzMwIDEgMTEyNDAwMAorMzMzIDEgMTE0NTMzMworMzMwIDEgMTE2NjY2NgorMzQ0IDEgMTE4ODAwMAorMzMxIDEgMTIwOTMzMworMzQyIDEgMTIzMDY2NgorMzM5IDEgMTI1MjAwMAorMzE0IDEgMTI3MzMzMworMjg1IDEgMTI5NDY2NgorMjk1IDEgMTMxNjAwMAorMzAyIDEgMTMzNzMzMworMzA1IDEgMTM1ODY2NgorMzA5IDEgMTM4MDAwMAorMzI3IDEgMTQwMTMzMworMzA0IDEgMTQyMjY2NgorMzM2IDEgMTQ0NDAwMAorMzUwIDEgMTQ2NTMzMworMzQ2IDEgMTQ4NjY2NgorMzUyIDEgMTUwODAwMAorMzQxIDEgMTUyOTMzMworMzQzIDEgMTU1MDY2NgorMzUxIDEgMTU3MjAwMAorMzE5IDEgMTU5MzMzMworMzI4IDEgMTYxNDY2NgorMzI4IDEgMTYzNjAwMAorMzI0IDEgMTY1NzMzMworMzM4IDEgMTY3ODY2NgorMzE3IDEgMTcwMDAwMAorMzI4IDEgMTcyMTMzMworMzM1IDEgMTc0MjY2NgorMzQxIDEgMTc2NDAwMAorMzM1IDEgMTc4NTMzMworMzQ4IDEgMTgwNjY2NgorMzYyIDEgMTgyODAwMAorMzYxIDEgMTg0OTMzMworMzQ0IDEgMTg3MDY2NgorMzQwIDEgMTg5MjAwMAorMzMzIDEgMTkxMzMzMworMzI5IDEgMTkzNDY2NgorMzI4IDEgMTk1NjAwMAorMzIzIDEgMTk3NzMzMworMzEwIDEgMTk5ODY2NgorMzE4IDEgMjAyMDAwMAorMzEyIDEgMjA0MTMzMworMjk1IDEgMjA2MjY2NgorMzI5IDEgMjA4NDAwMAorMzE4IDEgMjEwNTMzMworMzExIDEgMjEyNjY2NgorMzE3IDEgMjE0ODAwMAorNjIgMSAyMTY5MzMzCis3NSAxIDIxODEzMzMKKzczIDEgMjE4NDAwMAorMzMyIDEgMjE4NjY2NgorMzI3IDEgMjE5ODY2NgorMzMyIDEgMjIyMDAwMAorMzI1IDEgMjI0MTMzMworMzI5IDEgMjI2MjY2NgorMzMwIDEgMjI4NDAwMAorNjEgMSAyMzA1MzMzCis2MSAxIDIzMTczMzMKKzcwIDEgMjMyMDAwMAorNzAgMSAyMzIyNjY2CiszMTkgMSAyMzI1MzMzCiszMDMgMSAyMzM3MzMzCisyOTIgMSAyMzU4NjY2CiszMTMgMSAyMzgwMDAwCiszMTggMSAyNDAxMzMzCiszNDYgMSAyNDIyNjY2CiszMjggMSAyNDQ0MDAwCiszMTYgMSAyNDY1MzMzCiszNDEgMSAyNDg2NjY2CiszMjggMSAyNTA4MDAwCiszMzggMSAyNTI5MzMzCiszNDEgMSAyNTUwNjY2CiszMzcgMSAyNTcyMDAwCiszNDcgMSAyNTkzMzMzCiszODQgMSAyNjE0NjY2CiszNTggMSAyNjM2MDAwCiszNjMgMSAyNjU3MzMzCiszNjMgMSAyNjc4NjY2CiszNTggMSAyNzAwMDAwCiszMzkgMSAyNzIxMzMzCiszNjkgMSAyNzQyNjY2CiszNDMgMSAyNzY0MDAwCiszNDggMSAyNzg1MzMzCiszNjMgMSAyODA2NjY2CiszNTAgMSAyODI4MDAwCiszNTggMSAyODQ5MzMzCiszNTIgMSAyODcwNjY2CiszMzggMSAyODkyMDAwCiszMzUgMSAyOTEzMzMzCiszNDIgMSAyOTM0NjY2CiszMzggMSAyOTU2MDAwCiszNDAgMSAyOTc3MzMzCisyOTIgMSAyOTk4NjY2CisyNzkgMSAzMDIwMDAwCisyOTkgMSAzMDQxMzMzCiszMDMgMSAzMDYyNjY2CisyOTggMSAzMDg0MDAwCisyOTcgMSAzMTA1MzMzCisyODAgMSAzMTI2NjY2CisyOTcgMSAzMTQ4MDAwCisyOTAgMSAzMTY5MzMzCiszMDYgMSAzMTkwNjY2CiszMDEgMSAzMjEyMDAwCiszMDYgMSAzMjMzMzMzCisyODkgMSAzMjU0NjY2CiszMTEgMSAzMjc2MDAwCiszMTcgMSAzMjk3MzMzCiszNDQgMSAzMzE4NjY2CiszMDggMSAzMzQwMDAwCiszMDQgMSAzMzYxMzMzCiszMDQgMSAzMzgyNjY2CiszMTIgMSAzNDA0MDAwCiszMDUgMSAzNDI1MzMzCisyOTkgMSAzNDQ2NjY2CiszMDEgMSAzNDY4MDAwCiszMTggMSAzNDg5MzMzCiszMTMgMSAzNTEwNjY2CiszMzAgMSAzNTMyMDAwCiszMjUgMSAzNTUzMzMzCiszMjUgMSAzNTc0NjY2CiszMjEgMSAzNTk2MDAwCiszNDkgMSAzNjE3MzMzCisyODggMSAzNjM4NjY2CiszMDAgMSAzNjYwMDAwCiszMTIgMSAzNjgxMzMzCiszMDIgMSAzNzAyNjY2CisyNzggMSAzNzI0MDAwCisyODQgMSAzNzQ1MzMzCisyODYgMSAzNzY2NjY2CisyNzQgMSAzNzg4MDAwCisyOTUgMSAzODA5MzMzCisyODEgMSAzODMwNjY2CisyODggMSAzODUyMDAwCisyNzggMSAzODczMzMzCiszMDYgMSAzODk0NjY2Cis2MiAxIDM5MTYwMDAKKzU5IDEgMzkyODAwMAorNjEgMSAzOTMwNjY2Cis1NSAxIDM5MzMzMzMKKzcwIDEgMzkzNjAwMAorNzIgMSAzOTM4NjY2CiszMjQgMSAzOTQxMzMzCiszMDkgMSAzOTUzMzMzCiszMDEgMSAzOTc0NjY2CiszMDEgMSAzOTk2MDAwCisyOTEgMSA0MDE3MzMzCisyODkgMSA0MDM4NjY2CiszMDYgMSA0MDYwMDAwCiszMDUgMSA0MDgxMzMzCisyODYgMSA0MTAyNjY2CisyOTQgMSA0MTI0MDAwCisyOTAgMSA0MTQ1MzMzCisyOTcgMSA0MTY2NjY2CiszMDggMSA0MTg4MDAwCisyOTYgMSA0MjA5MzMzCisyOTIgMSA0MjMwNjY2CisyODcgMSA0MjUyMDAwCisyOTEgMSA0MjczMzMzCisyOTggMSA0Mjk0NjY2CisyOTUgMSA0MzE2MDAwCisyOTQgMSA0MzM3MzMzCisyOTUgMSA0MzU4NjY2CisyNzUgMSA0MzgwMDAwCisyODAgMSA0NDAxMzMzCisyODggMSA0NDIyNjY2CisyODUgMSA0NDQ0MDAwCisyNzQgMSA0NDY1MzMzCisyOTggMSA0NDg2NjY2CiszMDEgMSA0NTA4MDAwCiszMDAgMSA0NTI5MzMzCiszMDUgMSA0NTUwNjY2CisyOTcgMSA0NTcyMDAwCis1OSAxIDQ1OTMzMzMKKzU2IDEgNDYwNTMzMworNTcgMSA0NjA4MDAwCis1NSAxIDQ2MTA2NjYKKzU4IDEgNDYxMzMzMworNTcgMSA0NjE2MDAwCis1OCAxIDQ2MTg2NjYKKzY4IDEgNDYyMTMzMworNjcgMSA0NjI0MDAwCis3MSAxIDQ2MjY2NjYKKzI4OSAxIDQ2MjkzMzMKKzI4MiAxIDQ2NDEzMzMKKzI3MyAxIDQ2NjI2NjYKKzI3OSAxIDQ2ODQwMDAKKzI4NiAxIDQ3MDUzMzMKKzI4MiAxIDQ3MjY2NjYKKzI4NCAxIDQ3NDgwMDAKKzI3OCAxIDQ3NjkzMzMKKzI4MSAxIDQ3OTA2NjYKKzI4MCAxIDQ4MTIwMDAKKzI2MyAxIDQ4MzMzMzMKKzI2MCAxIDQ4NTQ2NjYKKzI3MSAxIDQ4NzYwMDAKKzI3MyAxIDQ4OTczMzMKKzI4MiAxIDQ5MTg2NjYKKzI3OSAxIDQ5NDAwMDAKKzI5NyAxIDQ5NjEzMzMKKzI5MSAxIDQ5ODI2NjYKKzMwOSAxIDUwMDQwMDAKKzI4MyAxIDUwMjUzMzMKKzI5MiAxIDUwNDY2NjYKKzMwNCAxIDUwNjgwMDAKKzI5NiAxIDUwODkzMzMKKzI5MyAxIDUxMTA2NjYKKzI4MiAxIDUxMzIwMDAKKzI3MyAxIDUxNTMzMzMKKzI4NCAxIDUxNzQ2NjYKKzI4MSAxIDUxOTYwMDAKKzI2NSAxIDUyMTczMzMKKzI3MiAxIDUyMzg2NjYKKzI3NyAxIDUyNjAwMDAKKzI4MCAxIDUyODEzMzMKKzI3NiAxIDUzMDI2NjYKKzI3MyAxIDUzMjQwMDAKKzI3OCAxIDUzNDUzMzMKKzI4MCAxIDUzNjY2NjYKKzI4MCAxIDUzODgwMDAKKzI2OCAxIDU0MDkzMzMKKzI4MiAxIDU0MzA2NjYKKzI3NyAxIDU0NTIwMDAKKzI3NCAxIDU0NzMzMzMKKzI3NSAxIDU0OTQ2NjYKKzI3MCAxIDU1MTYwMDAKKzI4MiAxIDU1MzczMzMKKzI3OSAxIDU1NTg2NjYKKzI2MCAxIDU1ODAwMDAKKzI3MiAxIDU2MDEzMzMKKzI3NSAxIDU2MjI2NjYKKzI3MyAxIDU2NDQwMDAKKzI3NiAxIDU2NjUzMzMKKzI4OCAxIDU2ODY2NjYKKzI5NCAxIDU3MDgwMDAKKzI3MSAxIDU3MjkzMzMKKzI3NyAxIDU3NTA2NjYKKzI4OCAxIDU3NzIwMDAKKzI3NiAxIDU3OTMzMzMKKzI4MiAxIDU4MTQ2NjYKKzI3NiAxIDU4MzYwMDAKKzI3NSAxIDU4NTczMzMKKzI2OCAxIDU4Nzg2NjYKKzI3MCAxIDU5MDAwMDAKKzI2NiAxIDU5MjEzMzMKKzI2OCAxIDU5NDI2NjYKKzI4MiAxIDU5NjQwMDAKKzI3OSAxIDU5ODUzMzMKKzI3OSAxIDYwMDY2NjYKKzI4NyAxIDYwMjgwMDAKKzI4NiAxIDYwNDkzMzMKKzI4MCAxIDYwNzA2NjYKKzI5MCAxIDYwOTIwMDAKKzI2NiAxIDYxMTMzMzMKKzI5MiAxIDYxMzQ2NjYKKzI2NCAxIDYxNTYwMDAKKzI3MSAxIDYxNzczMzMKKzI3NyAxIDYxOTg2NjYKKzI5MiAxIDYyMjAwMDAKKzI5OCAxIDYyNDEzMzMKKzI4NCAxIDYyNjI2NjYKKzI4NyAxIDYyODQwMDAKKzI3NSAxIDYzMDUzMzMKKzI5MSAxIDYzMjY2NjYKKzI4NyAxIDYzNDgwMDAKKzI4MyAxIDYzNjkzMzMKKzI4NCAxIDYzOTA2NjYKKzI3MSAxIDY0MTIwMDAKKzI4MiAxIDY0MzMzMzMKKzI3NyAxIDY0NTQ2NjYKKzI4MiAxIDY0NzYwMDAKKzI4NSAxIDY0OTczMzMKKzI4MCAxIDY1MTg2NjYKKzI3MSAxIDY1NDAwMDAKKzI4OSAxIDY1NjEzMzMKKzI4NyAxIDY1ODI2NjYKKzI5NCAxIDY2MDQwMDAKKzI3NyAxIDY2MjUzMzMKKzI4MSAxIDY2NDY2NjYKKzI3NCAxIDY2NjgwMDAKKzI3MSAxIDY2ODkzMzMKKzI3OSAxIDY3MTA2NjYKKzI4OCAxIDY3MzIwMDAKKzI4MCAxIDY3NTMzMzMKKzI4NCAxIDY3NzQ2NjYKKzI3OCAxIDY3OTYwMDAKKzI3NiAxIDY4MTczMzMKKzI3NSAxIDY4Mzg2NjYKKzI2MyAxIDY4NjAwMDAKKzI2NiAxIDY4ODEzMzMKKzI0NyAxIDY5MDI2NjYKKzI2OSAxIDY5MjQwMDAKKzI2MyAxIDY5NDUzMzMKKzI4MyAxIDY5NjY2NjYKKzI4MCAxIDY5ODgwMDAKKzI4MSAxIDcwMDkzMzMKKzI5OSAxIDcwMzA2NjYKKzI4NSAxIDcwNTIwMDAKKzI4OCAxIDcwNzMzMzMKKzI5OSAxIDcwOTQ2NjYKKzI4OCAxIDcxMTYwMDAKKzI3OSAxIDcxMzczMzMKKzI3NiAxIDcxNTg2NjYKKzI3NyAxIDcxODAwMDAKKzI4MiAxIDcyMDEzMzMKKzI4NSAxIDcyMjI2NjYKKzI5NSAxIDcyNDQwMDAKKzI5NCAxIDcyNjUzMzMKKzMwNCAxIDcyODY2NjYKKzI4MiAxIDczMDgwMDAKKzI5OSAxIDczMjkzMzMKKzI4MyAxIDczNTA2NjYKKzI4MiAxIDczNzIwMDAKKzI4NyAxIDczOTMzMzMKKzMwNiAxIDc0MTQ2NjYKKzMwNCAxIDc0MzYwMDAKKzI4OSAxIDc0NTczMzMKKzI5OSAxIDc0Nzg2NjYKKzI4MSAxIDc1MDAwMDAKKzI4MSAxIDc1MjEzMzMKKzY2IDEgNzU0MjY2NgorNjMgMSA3NTU0NjY2CisyODkgMSA3NTU3MzMzCisyNzAgMSA3NTY5MzMzCisyNTcgMSA3NTkwNjY2CisyNDYgMSA3NjEyMDAwCisyNjQgMSA3NjMzMzMzCisyODAgMSA3NjU0NjY2CisyNzMgMSA3Njc2MDAwCisyODUgMSA3Njk3MzMzCisyNjcgMSA3NzE4NjY2CisyNzUgMSA3NzQwMDAwCisyNzggMSA3NzYxMzMzCisyOTMgMSA3NzgyNjY2CisyODEgMSA3ODA0MDAwCisyOTcgMSA3ODI1MzMzCisyOTQgMSA3ODQ2NjY2CisyODYgMSA3ODY4MDAwCisyOTAgMSA3ODg5MzMzCisyOTAgMSA3OTEwNjY2CisyODkgMSA3OTMyMDAwCisyODYgMSA3OTUzMzMzCisyODIgMSA3OTc0NjY2CiszMDYgMSA3OTk2MDAwCisyODcgMSA4MDE3MzMzCiszMTIgMSA4MDM4NjY2CiszMTIgMSA4MDYwMDAwCiszMDcgMSA4MDgxMzMzCisyOTMgMSA4MTAyNjY2CisyODkgMSA4MTI0MDAwCisyODUgMSA4MTQ1MzMzCisyOTAgMSA4MTY2NjY2CisyODUgMSA4MTg4MDAwCiszMTEgMSA4MjA5MzMzCiszMDcgMSA4MjMwNjY2CiszMTQgMSA4MjUyMDAwCiszMTggMSA4MjczMzMzCiszMTkgMSA4Mjk0NjY2CiszMTUgMSA4MzE2MDAwCiszMDAgMSA4MzM3MzMzCisyOTUgMSA4MzU4NjY2CisyOTEgMSA4MzgwMDAwCisyODIgMSA4NDAxMzMzCisyOTUgMSA4NDIyNjY2CisyOTYgMSA4NDQ0MDAwCisyODggMSA4NDY1MzMzCiszMDQgMSA4NDg2NjY2CisyOTkgMSA4NTA4MDAwCisyOTggMSA4NTI5MzMzCiszMDUgMSA4NTUwNjY2CisyOTUgMSA4NTcyMDAwCisyOTYgMSA4NTkzMzMzCisyOTUgMSA4NjE0NjY2CisyODcgMSA4NjM2MDAwCisyOTIgMSA4NjU3MzMzCiszMDggMSA4Njc4NjY2CisyODcgMSA4NzAwMDAwCiszMDcgMSA4NzIxMzMzCisyOTUgMSA4NzQyNjY2CisyOTIgMSA4NzY0MDAwCisyOTIgMSA4Nzg1MzMzCisyNzkgMSA4ODA2NjY2CisyODkgMSA4ODI4MDAwCiszMDMgMSA4ODQ5MzMzCiszMDcgMSA4ODcwNjY2CiszMTAgMSA4ODkyMDAwCiszMDAgMSA4OTEzMzMzCisyOTkgMSA4OTM0NjY2CisyOTkgMSA4OTU2MDAwCisyODggMSA4OTc3MzMzCisyOTAgMSA4OTk4NjY2CisyOTEgMSA5MDIwMDAwCiszMDQgMSA5MDQxMzMzCisyOTkgMSA5MDYyNjY2CiszMDQgMSA5MDg0MDAwCisyOTAgMSA5MTA1MzMzCiszMDkgMSA5MTI2NjY2CiszMDEgMSA5MTQ4MDAwCisyOTYgMSA5MTY5MzMzCisyODggMSA5MTkwNjY2CiszMDUgMSA5MjEyMDAwCiszMTcgMSA5MjMzMzMzCisyOTIgMSA5MjU0NjY2CiszMDAgMSA5Mjc2MDAwCiszMDEgMSA5Mjk3MzMzCisyOTUgMSA5MzE4NjY2CisyODIgMSA5MzQwMDAwCisyOTYgMSA5MzYxMzMzCisyOTUgMSA5MzgyNjY2CisyODcgMSA5NDA0MDAwCisyOTIgMSA5NDI1MzMzCiszMDEgMSA5NDQ2NjY2CiszMTEgMSA5NDY4MDAwCiszMDEgMSA5NDg5MzMzCiszMDcgMSA5NTEwNjY2CiszMDAgMSA5NTMyMDAwCiszMDkgMSA5NTUzMzMzCisyOTggMSA5NTc0NjY2CiszMDQgMSA5NTk2MDAwCis2MCAxIDk2MTczMzMKKzU5IDEgOTYyOTMzMworNjQgMSA5NjMyMDAwCis2NCAxIDk2MzQ2NjYKKzc3IDEgOTYzNzMzMworNzIgMSA5NjQwMDAwCiszMDYgMSA5NjQyNjY2CisyOTcgMSA5NjU0NjY2CisyOTQgMSA5Njc2MDAwCisyOTUgMSA5Njk3MzMzCiszMDggMSA5NzE4NjY2CiszMDMgMSA5NzQwMDAwCiszMDggMSA5NzYxMzMzCisyODkgMSA5NzgyNjY2CiszMDAgMSA5ODA0MDAwCiszMDQgMSA5ODI1MzMzCiszMDggMSA5ODQ2NjY2Cis2NCAxIDk4NjgwMDAKKzYzIDEgOTg4MDAwMAorNjQgMSA5ODgyNjY2Cis2NCAxIDk4ODUzMzMKKzYwIDEgOTg4ODAwMAorNzQgMSA5ODkwNjY2Cis2OSAxIDk4OTMzMzMKKzY4IDEgOTg5NjAwMAorNjEgMSA5ODk4NjY2Cis3MSAxIDk5MDEzMzMKKzc2IDEgOTkwNDAwMAorNzMgMSA5OTA2NjY2Cis3MCAxIDk5MDkzMzMKKzcyIDEgOTkxMjAwMAorNjAgMSA5OTE0NjY2Cis2OSAxIDk5MTczMzMKKzgyIDEgOTkyMDAwMAorMjc4IDEgOTkyMjY2NgorMzAgMSA5OTM0NjY2CmRpZmYgLS1naXQgYS9tZWRpYS9jb2RlYzIvaGlkbC8xLjAvdnRzL3Jlcy9iYmJfdm9yYmlzX3N0ZXJlb18xMjhrYnBzXzQ4MDAwaHoudm9yYmlzIGIvbWVkaWEvY29kZWMyL2hpZGwvMS4wL3Z0cy9yZXMvYmJiX3ZvcmJpc19zdGVyZW9fMTI4a2Jwc180ODAwMGh6LnZvcmJpcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MDRjNWY4Ci0tLSAvZGV2L251bGwKKysrIGIvbWVkaWEvY29kZWMyL2hpZGwvMS4wL3Z0cy9yZXMvYmJiX3ZvcmJpc19zdGVyZW9fMTI4a2Jwc180ODAwMGh6LnZvcmJpcwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9tZWRpYS9jb2RlYzIvaGlkbC8xLjAvdnRzL3Jlcy9iYmJfdnA4XzE3NngxNDRfMjQwa2Jwc182MGZwcy5pbmZvIGIvbWVkaWEvY29kZWMyL2hpZGwvMS4wL3Z0cy9yZXMvYmJiX3ZwOF8xNzZ4MTQ0XzI0MGticHNfNjBmcHMuaW5mbwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45MDFlYTQ1Ci0tLSAvZGV2L251bGwKKysrIGIvbWVkaWEvY29kZWMyL2hpZGwvMS4wL3Z0cy9yZXMvYmJiX3ZwOF8xNzZ4MTQ0XzI0MGticHNfNjBmcHMuaW5mbwpAQCAtMCwwICsxLDYwIEBACisxMDI3MSAxIDAKKzEwNiAwIDE3MDAwCisxMzQgMCAzMzAwMAorMTQ5IDAgNTAwMDAKKzE1MiAwIDY3MDAwCisxNTkgMCA4MzAwMAorMTE0IDAgMTAwMDAwCis3MjMgMCAxMTcwMDAKKzE3NSAwIDEzMzAwMAorMTg2IDAgMTUwMDAwCisyMDEgMCAxNjcwMDAKKzI3MCAwIDE4MzAwMAorMzgzIDAgMjAwMDAwCisyNTUgMCAyMTcwMDAKKzI4NiAwIDIzMzAwMAorMjczIDAgMjUwMDAwCisxMjI0IDAgMjY3MDAwCisyMjAgMCAyODMwMDAKKzIzMSAwIDMwMDAwMAorMTkyIDAgMzE3MDAwCisxODIgMCAzMzMwMDAKKzI4OSAwIDM1MDAwMAorMjA0IDAgMzY3MDAwCisyMzcgMCAzODMwMDAKKzE4NyAwIDQwMDAwMAorODk4IDAgNDE3MDAwCisyMzEgMCA0MzMwMDAKKzI2NiAwIDQ1MDAwMAorMjc4IDAgNDY3MDAwCisyMDUgMCA0ODMwMDAKKzI1NSAwIDUwMDAwMAorMTY5IDAgNTE3MDAwCisyMzMgMCA1MzMwMDAKKzEwMTEgMCA1NTAwMDAKKzIwMiAwIDU2NzAwMAorMjUxIDAgNTgzMDAwCisyMjMgMCA2MDAwMDAKKzI4MyAwIDYxNzAwMAorMzYyIDAgNjMzMDAwCisyMTcgMCA2NTAwMDAKKzI0NSAwIDY2NzAwMAorOTYwIDAgNjgzMDAwCisyMzMgMCA3MDAwMDAKKzI4NiAwIDcxNzAwMAorMjcyIDAgNzMzMDAwCisyNTQgMCA3NTAwMDAKKzMzMSAwIDc2NzAwMAorMjE4IDAgNzgzMDAwCisyNjEgMCA4MDAwMDAKKzk4MSAwIDgxNzAwMAorMjI2IDAgODMzMDAwCisyMjYgMCA4NTAwMDAKKzI3OSAwIDg2NzAwMAorMjI1IDAgODgzMDAwCisyOTUgMCA5MDAwMDAKKzE3NSAwIDkxNzAwMAorMjQ5IDAgOTMzMDAwCis5OTYgMCA5NTAwMDAKKzE2OSAwIDk2NzAwMAorMjI0IDAgOTgzMDAwCmRpZmYgLS1naXQgYS9tZWRpYS9jb2RlYzIvaGlkbC8xLjAvdnRzL3Jlcy9iYmJfdnA4XzE3NngxNDRfMjQwa2Jwc182MGZwcy52cDggYi9tZWRpYS9jb2RlYzIvaGlkbC8xLjAvdnRzL3Jlcy9iYmJfdnA4XzE3NngxNDRfMjQwa2Jwc182MGZwcy52cDgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmViYTU2YwotLS0gL2Rldi9udWxsCisrKyBiL21lZGlhL2NvZGVjMi9oaWRsLzEuMC92dHMvcmVzL2JiYl92cDhfMTc2eDE0NF8yNDBrYnBzXzYwZnBzLnZwOApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9tZWRpYS9jb2RlYzIvaGlkbC8xLjAvdnRzL3Jlcy9iYmJfdnA4XzY0MHgzNjBfMm1icHNfMzBmcHMuaW5mbyBiL21lZGlhL2NvZGVjMi9oaWRsLzEuMC92dHMvcmVzL2JiYl92cDhfNjQweDM2MF8ybWJwc18zMGZwcy5pbmZvCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjljMDBjNzcKLS0tIC9kZXYvbnVsbAorKysgYi9tZWRpYS9jb2RlYzIvaGlkbC8xLjAvdnRzL3Jlcy9iYmJfdnA4XzY0MHgzNjBfMm1icHNfMzBmcHMuaW5mbwpAQCAtMCwwICsxLDMwMCBAQAorODY5ODAgMSAwCis2NzQxIDAgMzMwMDAKKzk0MzMgMCA2NzAwMAorOTM2MyAwIDEwMDAwMAorODY3MSAwIDEzMzAwMAorOTAwMyAwIDE2NzAwMAorNzc1MSAwIDIwMDAwMAorMTMyMDcgMCAyMzMwMDAKKzg1NDIgMCAyNjcwMDAKKzkzNDQgMCAzMDAwMDAKKzgwNjkgMCAzMzMwMDAKKzg1ODggMCAzNjcwMDAKKzEyMDg3IDAgNDAwMDAwCis3MzE1IDAgNDMzMDAwCis5NjU0IDAgNDY3MDAwCisxMzEwMCAwIDUwMDAwMAorNzgzMiAwIDUzMzAwMAorMTAwNjAgMCA1NjcwMDAKKzg1NDAgMCA2MDAwMDAKKzg2NjcgMCA2MzMwMDAKKzg1MzIgMCA2NjcwMDAKKzYwMTggMCA3MDAwMDAKKzg1MjAgMCA3MzMwMDAKKzE1MzUwIDAgNzY3MDAwCis2MTEwIDAgODAwMDAwCis3ODc2IDAgODMzMDAwCis2MTMzIDAgODY3MDAwCis5NDc2IDAgOTAwMDAwCisxMTAwMiAwIDkzMzAwMAorNzQ4NCAwIDk2NzAwMAorODc2MCAwIDEwMDAwMDAKKzE2NTE1IDAgMTAzMzAwMAorNzQ4MiAwIDEwNjcwMDAKKzY5ODMgMCAxMTAwMDAwCis3NTYxIDAgMTEzMzAwMAorODI2MyAwIDExNjcwMDAKKzEwNjgyIDAgMTIwMDAwMAorODEwOCAwIDEyMzMwMDAKKzc5MjQgMCAxMjY3MDAwCis4NjkzIDAgMTMwMDAwMAorMTQxOTAgMCAxMzMzMDAwCis3MzkzIDAgMTM2NzAwMAorNjg2NCAwIDE0MDAwMDAKKzk0MzEgMCAxNDMzMDAwCis3Njc0IDAgMTQ2NzAwMAorODQ1OCAwIDE1MDAwMDAKKzU4OTkgMCAxNTMzMDAwCis4MjU5IDAgMTU2NzAwMAorNzk2MyAwIDE2MDAwMDAKKzE0Nzc5IDAgMTYzMzAwMAorNjg3NyAwIDE2NjcwMDAKKzcyNjggMCAxNzAwMDAwCis4NTI2IDAgMTczMzAwMAorODQ2NyAwIDE3NjcwMDAKKzExMjAwIDAgMTgwMDAwMAorNzI2MSAwIDE4MzMwMDAKKzgyODAgMCAxODY3MDAwCis2NzE4IDAgMTkwMDAwMAorMTc3NDIgMCAxOTMzMDAwCis1MjA2IDAgMTk2NzAwMAorNTcwMCAwIDIwMDAwMDAKKzU4NzIgMCAyMDMzMDAwCis3OTE1IDAgMjA2NzAwMAorODQ5MyAwIDIxMDAwMDAKKzY1NDUgMCAyMTMzMDAwCis5MDcyIDAgMjE2NzAwMAorMTMyMDAgMCAyMjAwMDAwCis5NjMyIDAgMjIzMzAwMAorMTAwMTYgMCAyMjY3MDAwCis3ODI0IDAgMjMwMDAwMAorMTA2MjggMCAyMzMzMDAwCisxMDQwMSAwIDIzNjcwMDAKKzEwODkyIDAgMjQwMDAwMAorOTAyMyAwIDI0MzMwMDAKKzEwNzM0IDAgMjQ2NzAwMAorMTUwNDUgMCAyNTAwMDAwCis3OTQwIDAgMjUzMzAwMAorOTY1NyAwIDI1NjcwMDAKKzg3NDMgMCAyNjAwMDAwCis4MDc0IDAgMjYzMzAwMAorOTQ0NSAwIDI2NjcwMDAKKzY0OTQgMCAyNzAwMDAwCis4NjAxIDAgMjczMzAwMAorMTM0NzggMCAyNzY3MDAwCis2OTQyIDAgMjgwMDAwMAorODAwMiAwIDI4MzMwMDAKKzc5NDAgMCAyODY3MDAwCis4MzIwIDAgMjkwMDAwMAorMTIyMTUgMCAyOTMzMDAwCis2NjY4IDAgMjk2NzAwMAorMTEzODQgMCAzMDAwMDAwCis4Mzc4IDAgMzAzMzAwMAorMTI5MDggMCAzMDY3MDAwCis4NDIwIDAgMzEwMDAwMAorNzUwMiAwIDMxMzMwMDAKKzg0ODIgMCAzMTY3MDAwCisxMDk2OCAwIDMyMDAwMDAKKzEyMzM4IDAgMzIzMzAwMAorODY1NyAwIDMyNjcwMDAKKzEwNDY4IDAgMzMwMDAwMAorMTM4NzggMCAzMzMzMDAwCis5Mzc0IDAgMzM2NzAwMAorOTg1NyAwIDM0MDAwMDAKKzEwMzgxIDAgMzQzMzAwMAorOTk4NCAwIDM0NjcwMDAKKzk5NTYgMCAzNTAwMDAwCis4OTA1IDAgMzUzMzAwMAorODY3MiAwIDM1NjcwMDAKKzgxMjIgMCAzNjAwMDAwCis5Njc3IDAgMzYzMzAwMAorOTgxMiAwIDM2NjcwMDAKKzk2MjIgMCAzNzAwMDAwCis5MDIzIDAgMzczMzAwMAorNzE0NyAwIDM3NjcwMDAKKzkxNDYgMCAzODAwMDAwCis3NDg4IDAgMzgzMzAwMAorMTA4MTIgMCAzODY3MDAwCis4MzQwIDAgMzkwMDAwMAorMTMyODAgMCAzOTMzMDAwCis1MTY3IDAgMzk2NzAwMAorNjk5MSAwIDQwMDAwMDAKKzY1NDMgMCA0MDMzMDAwCis1OTUyIDAgNDA2NzAwMAorNTE2NCAwIDQxMDAwMDAKKzQwMTEgMCA0MTMzMDAwCiszNzk0IDAgNDE2NzAwMAorMTI5NTkgMCA0MjAwMDAwCis3MTAyMCAxIDQyMzMwMDAKKzUzNTEgMCA0MjY3MDAwCis2MjgzIDAgNDMwMDAwMAorNTA4MCAwIDQzMzMwMDAKKzY3MDcgMCA0MzY3MDAwCis1ODU3IDAgNDQwMDAwMAorNTIyMSAwIDQ0MzMwMDAKKzEwOTcyIDAgNDQ2NzAwMAorNzAyMyAwIDQ1MDAwMDAKKzY5MDcgMCA0NTMzMDAwCis3ODUxIDAgNDU2NzAwMAorNDg0MyAwIDQ2MDAwMDAKKzYwODUgMCA0NjMzMDAwCis0ODY4IDAgNDY2NzAwMAorNTA5MyAwIDQ3MDAwMDAKKzEyODA3IDAgNDczMzAwMAorNjMzMCAwIDQ3NjcwMDAKKzQyMDkgMCA0ODAwMDAwCis0NTk2IDAgNDgzMzAwMAorNjMxNiAwIDQ4NjcwMDAKKzQ5NTQgMCA0OTAwMDAwCis1NTMzIDAgNDkzMzAwMAorNzc0OSAwIDQ5NjcwMDAKKzEyNDg2IDAgNTAwMDAwMAorNTQ2OCAwIDUwMzMwMDAKKzQzNTMgMCA1MDY3MDAwCis1Nzg2IDAgNTEwMDAwMAorNTU1MSAwIDUxMzMwMDAKKzY3MTEgMCA1MTY3MDAwCis1Njg4IDAgNTIwMDAwMAorNjI1OCAwIDUyMzMwMDAKKzEyOTc1IDAgNTI2NzAwMAorNDg3MyAwIDUzMDAwMDAKKzQ1NTIgMCA1MzMzMDAwCis0ODQ0IDAgNTM2NzAwMAorNDc3NCAwIDU0MDAwMDAKKzUwMjUgMCA1NDMzMDAwCis1MjA0IDAgNTQ2NzAwMAorNDgxNCAwIDU1MDAwMDAKKzE0ODM1IDAgNTUzMzAwMAorNTM0MyAwIDU1NjcwMDAKKzQ4MDggMCA1NjAwMDAwCis1MDcxIDAgNTYzMzAwMAorNjMyNCAwIDU2NjcwMDAKKzUyNDMgMCA1NzAwMDAwCis0OTk1IDAgNTczMzAwMAorNTEzNCAwIDU3NjcwMDAKKzExMDU0IDAgNTgwMDAwMAorNDgwNyAwIDU4MzMwMDAKKzUxMTggMCA1ODY3MDAwCis2NDI0IDAgNTkwMDAwMAorNDk4NCAwIDU5MzMwMDAKKzcxODcgMCA1OTY3MDAwCis1NTA1IDAgNjAwMDAwMAorNjk0MSAwIDYwMzMwMDAKKzExNTE3IDAgNjA2NzAwMAorNTY0NiAwIDYxMDAwMDAKKzY4MzIgMCA2MTMzMDAwCis1Mjk0IDAgNjE2NzAwMAorNjIwMCAwIDYyMDAwMDAKKzYzMjggMCA2MjMzMDAwCis0MzQ4IDAgNjI2NzAwMAorNDYwNyAwIDYzMDAwMDAKKzEyOTU4IDAgNjMzMzAwMAorNDMwOCAwIDYzNjcwMDAKKzYwODQgMCA2NDAwMDAwCis0NDk0IDAgNjQzMzAwMAorNTMzOCAwIDY0NjcwMDAKKzU3NDIgMCA2NTAwMDAwCis1NDcyIDAgNjUzMzAwMAorODQ1OSAwIDY1NjcwMDAKKzEzMDc1IDAgNjYwMDAwMAorODk4NiAwIDY2MzMwMDAKKzk1ODMgMCA2NjY3MDAwCis4NzkyIDAgNjcwMDAwMAorOTAwNCAwIDY3MzMwMDAKKzk2MzIgMCA2NzY3MDAwCis5MzkzIDAgNjgwMDAwMAorOTI1OSAwIDY4MzMwMDAKKzExOTI3IDAgNjg2NzAwMAorMTAzMjMgMCA2OTAwMDAwCisxNTI0OCAwIDY5MzMwMDAKKzExMjQ0IDAgNjk2NzAwMAorMTU1NTggMCA3MDAwMDAwCis2MTk3IDAgNzAzMzAwMAorODA0NCAwIDcwNjcwMDAKKzExNDMyIDAgNzEwMDAwMAorODczNyAwIDcxMzMwMDAKKzEzODg1IDAgNzE2NzAwMAorMTExNTggMCA3MjAwMDAwCisxNTE1MiAwIDcyMzMwMDAKKzcwMjUgMCA3MjY3MDAwCis4MDI1IDAgNzMwMDAwMAorMTMzNjIgMCA3MzMzMDAwCis4MDkwIDAgNzM2NzAwMAorMTM2MzcgMCA3NDAwMDAwCis2MTQ4IDAgNzQzMzAwMAorOTI3MCAwIDc0NjcwMDAKKzg2MzMgMCA3NTAwMDAwCisxMDY3MyAwIDc1MzMwMDAKKzE0MjA4IDAgNzU2NzAwMAorODA4NCAwIDc2MDAwMDAKKzEzNzgzIDAgNzYzMzAwMAorMTA2NjAgMCA3NjY3MDAwCis3NDY2IDAgNzcwMDAwMAorMTQ0MzMgMCA3NzMzMDAwCisxMDkzNCAwIDc3NjcwMDAKKzcyMzkgMCA3ODAwMDAwCisxMjU0OCAwIDc4MzMwMDAKKzY1NjQgMCA3ODY3MDAwCisxMDc2MSAwIDc5MDAwMDAKKzEwOTkyIDAgNzkzMzAwMAorMTI5MjQgMCA3OTY3MDAwCisxMjM0OCAwIDgwMDAwMDAKKzY3NzAgMCA4MDMzMDAwCisxNDI4OCAwIDgwNjcwMDAKKzI5MzQ1IDEgODEwMDAwMAorMTgyMiAwIDgxMzMwMDAKKzEwODcgMCA4MTY3MDAwCisxMTA5IDAgODIwMDAwMAorMjAwNyAwIDgyMzMwMDAKKzE3OTggMCA4MjY3MDAwCisxNjM1IDAgODMwMDAwMAorMTk2MDcgMCA4MzMzMDAwCis5MTkgMCA4MzY3MDAwCisyMzU3IDAgODQwMDAwMAorMzU3OCAwIDg0MzMwMDAKKzQ0OTcgMCA4NDY3MDAwCis0MzE0IDAgODUwMDAwMAorMzg1MSAwIDg1MzMwMDAKKzM4MjIgMCA4NTY3MDAwCis0MjUyIDAgODYwMDAwMAorNDc3NSAwIDg2MzMwMDAKKzEyMjAzIDAgODY2NzAwMAorNTA3OCAwIDg3MDAwMDAKKzU4NzYgMCA4NzMzMDAwCis2MTI0IDAgODc2NzAwMAorNDQ5MCAwIDg4MDAwMDAKKzM1MzggMCA4ODMzMDAwCiszNDUwIDAgODg2NzAwMAorMzYxMSAwIDg5MDAwMDAKKzI4NDcgMCA4OTMzMDAwCisyNjA1IDAgODk2NzAwMAorMTIyNDMgMCA5MDAwMDAwCisxOTQ2IDAgOTAzMzAwMAorMTg0NyAwIDkwNjcwMDAKKzIwMzUgMCA5MTAwMDAwCisyNTcyIDAgOTEzMzAwMAorMjMyNiAwIDkxNjcwMDAKKzI2NDUgMCA5MjAwMDAwCisyOTM4IDAgOTIzMzAwMAorMjQ5NSAwIDkyNjcwMDAKKzI2MDkgMCA5MzAwMDAwCis5NzQ0IDAgOTMzMzAwMAorMTc5NiAwIDkzNjcwMDAKKzE5ODUgMCA5NDAwMDAwCisxNzU5IDAgOTQzMzAwMAorMjI1OSAwIDk0NjcwMDAKKzIyMzMgMCA5NTAwMDAwCisyMDQ0IDAgOTUzMzAwMAorMjUwMiAwIDk1NjcwMDAKKzIzMDcgMCA5NjAwMDAwCisyNzM5IDAgOTYzMzAwMAorMTE3MDcgMCA5NjY3MDAwCis1MTY4IDAgOTcwMDAwMAorNDQ4MyAwIDk3MzMwMDAKKzMwNDQgMCA5NzY3MDAwCis0MjQxIDAgOTgwMDAwMAorNDM5MiAwIDk4MzMwMDAKKzQ5MzQgMCA5ODY3MDAwCis1OTM0IDAgOTkwMDAwMAorNTY0NyAwIDk5MzMwMDAKKzUzMjYgMCA5OTY3MDAwCmRpZmYgLS1naXQgYS9tZWRpYS9jb2RlYzIvaGlkbC8xLjAvdnRzL3Jlcy9iYmJfdnA4XzY0MHgzNjBfMm1icHNfMzBmcHMudnA4IGIvbWVkaWEvY29kZWMyL2hpZGwvMS4wL3Z0cy9yZXMvYmJiX3ZwOF82NDB4MzYwXzJtYnBzXzMwZnBzLnZwOApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42ZWM0NjBjCi0tLSAvZGV2L251bGwKKysrIGIvbWVkaWEvY29kZWMyL2hpZGwvMS4wL3Z0cy9yZXMvYmJiX3ZwOF82NDB4MzYwXzJtYnBzXzMwZnBzLnZwOApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9tZWRpYS9jb2RlYzIvaGlkbC8xLjAvdnRzL3Jlcy9iYmJfdnA5XzE3NngxNDRfMjg1a2Jwc182MGZwcy5pbmZvIGIvbWVkaWEvY29kZWMyL2hpZGwvMS4wL3Z0cy9yZXMvYmJiX3ZwOV8xNzZ4MTQ0XzI4NWticHNfNjBmcHMuaW5mbwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jYTFhMDNjCi0tLSAvZGV2L251bGwKKysrIGIvbWVkaWEvY29kZWMyL2hpZGwvMS4wL3Z0cy9yZXMvYmJiX3ZwOV8xNzZ4MTQ0XzI4NWticHNfNjBmcHMuaW5mbwpAQCAtMCwwICsxLDYwIEBACis2OTM5IDEgMAorNjgxOCAwIDE3MDAwCiszMTAgMCAzMzAwMAorMjczIDAgNTAwMDAKKzI2NyAwIDY3MDAwCisyMzkgMCA4MzAwMAorMjMyIDAgMTAwMDAwCisyMjIgMCAxMTcwMDAKKzE4NiAwIDEzMzAwMAorMTk0IDAgMTUwMDAwCisxODkgMCAxNjcwMDAKKzE4IDAgMTgzMDAwCisyMDE0IDAgMjAwMDAwCisyOTcgMCAyMTcwMDAKKzI4NyAwIDIzMzAwMAorMjM3IDAgMjUwMDAwCisyNjMgMCAyNjcwMDAKKzIzOCAwIDI4MzAwMAorMjU3IDAgMzAwMDAwCisyMjkgMCAzMTcwMDAKKzE4NyAwIDMzMzAwMAorMTkxIDAgMzUwMDAwCisxOCAwIDM2NzAwMAorMjIwMyAwIDM4MzAwMAorMjY1IDAgNDAwMDAwCisyMjQgMCA0MTcwMDAKKzI1NCAwIDQzMzAwMAorMjUyIDAgNDUwMDAwCisyNzMgMCA0NjcwMDAKKzIwOCAwIDQ4MzAwMAorMTU0IDAgNTAwMDAwCisxODIgMCA1MTcwMDAKKzEzOCAwIDUzMzAwMAorMTggMCA1NTAwMDAKKzI1MDIgMCA1NjcwMDAKKzI4NiAwIDU4MzAwMAorMzA0IDAgNjAwMDAwCiszNDEgMCA2MTcwMDAKKzI1OSAwIDYzMzAwMAorMjc1IDAgNjUwMDAwCisyMjIgMCA2NjcwMDAKKzI1NCAwIDY4MzAwMAorMjUzIDAgNzAwMDAwCisyMjUgMCA3MTcwMDAKKzE4IDAgNzMzMDAwCisyNTAxIDAgNzUwMDAwCisyODIgMCA3NjcwMDAKKzI5OCAwIDc4MzAwMAorMjUyIDAgODAwMDAwCisyNDIgMCA4MTcwMDAKKzI1MCAwIDgzMzAwMAorMjYwIDAgODUwMDAwCisyMTggMCA4NjcwMDAKKzIxMyAwIDg4MzAwMAorMTQ0IDAgOTAwMDAwCisxOCAwIDkxNzAwMAorMjMzIDAgOTMzMDAwCisyNTQgMCA5NTAwMDAKKzIyOSAwIDk2NzAwMAorMjM5IDAgOTgzMDAwCmRpZmYgLS1naXQgYS9tZWRpYS9jb2RlYzIvaGlkbC8xLjAvdnRzL3Jlcy9iYmJfdnA5XzE3NngxNDRfMjg1a2Jwc182MGZwcy52cDkgYi9tZWRpYS9jb2RlYzIvaGlkbC8xLjAvdnRzL3Jlcy9iYmJfdnA5XzE3NngxNDRfMjg1a2Jwc182MGZwcy52cDkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjYzM2M4YQotLS0gL2Rldi9udWxsCisrKyBiL21lZGlhL2NvZGVjMi9oaWRsLzEuMC92dHMvcmVzL2JiYl92cDlfMTc2eDE0NF8yODVrYnBzXzYwZnBzLnZwOQpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9tZWRpYS9jb2RlYzIvaGlkbC8xLjAvdnRzL3Jlcy9iYmJfdnA5XzY0MHgzNjBfMTYwMGticHNfMzBmcHMuaW5mbyBiL21lZGlhL2NvZGVjMi9oaWRsLzEuMC92dHMvcmVzL2JiYl92cDlfNjQweDM2MF8xNjAwa2Jwc18zMGZwcy5pbmZvCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFmZTk2NzkKLS0tIC9kZXYvbnVsbAorKysgYi9tZWRpYS9jb2RlYzIvaGlkbC8xLjAvdnRzL3Jlcy9iYmJfdnA5XzY0MHgzNjBfMTYwMGticHNfMzBmcHMuaW5mbwpAQCAtMCwwICsxLDMwMCBAQAorNTQ5MTggMSAwCis0NjI4MCAwIDMzMDAwCisyMDA2IDAgNjcwMDAKKzI4NDEgMCAxMDAwMDAKKzMwNDQgMCAxMzMwMDAKKzM0MjkgMCAxNjcwMDAKKzMxOTYgMCAyMDAwMDAKKzI5MjYgMCAyMzMwMDAKKzI4MjEgMCAyNjcwMDAKKzExNTAgMCAzMDAwMDAKKzM2IDAgMzMzMDAwCiszODA4NCAwIDM2NzAwMAorMzY4OSAwIDQwMDAwMAorMzQ3MyAwIDQzMzAwMAorMzAxMSAwIDQ2NzAwMAorMzA5MCAwIDUwMDAwMAorMjUxNiAwIDUzMzAwMAorMjc3MSAwIDU2NzAwMAorMzI1MCAwIDYwMDAwMAorMTE1OSAwIDYzMzAwMAorMzQgMCA2NjcwMDAKKzM5NjkwIDAgNzAwMDAwCiszNjE1IDAgNzMzMDAwCisyNDk0IDAgNzY3MDAwCisyODkzIDAgODAwMDAwCiszMzI5IDAgODMzMDAwCisyOTM5IDAgODY3MDAwCisyMzUyIDAgOTAwMDAwCisyNzMyIDAgOTMzMDAwCisxNzQ2IDAgOTY3MDAwCiszMyAwIDEwMDAwMDAKKzQxNTAxIDAgMTAzMzAwMAorMjk5NyAwIDEwNjcwMDAKKzI2NjYgMCAxMTAwMDAwCiszNTgyIDAgMTEzMzAwMAorMjYxNiAwIDExNjcwMDAKKzI5MjMgMCAxMjAwMDAwCisyNjk2IDAgMTIzMzAwMAorMTYyOCAwIDEyNjcwMDAKKzE4ODcgMCAxMzAwMDAwCiszMyAwIDEzMzMwMDAKKzQyODc2IDAgMTM2NzAwMAorMjU4OCAwIDE0MDAwMDAKKzMzMTYgMCAxNDMzMDAwCisyMjg3IDAgMTQ2NzAwMAorMzM3NSAwIDE1MDAwMDAKKzIxMDggMCAxNTMzMDAwCisyOTYxIDAgMTU2NzAwMAorMTczMCAwIDE2MDAwMDAKKzE4MDAgMCAxNjMzMDAwCiszNCAwIDE2NjcwMDAKKzQzNzk3IDAgMTcwMDAwMAorMjQ4NCAwIDE3MzMwMDAKKzI1NTYgMCAxNzY3MDAwCisyNjcxIDAgMTgwMDAwMAorMjMzOCAwIDE4MzMwMDAKKzMxMzMgMCAxODY3MDAwCisyMDAyIDAgMTkwMDAwMAorMTc5NCAwIDE5MzMwMDAKKzEyNzkgMCAxOTY3MDAwCiszMiAwIDIwMDAwMDAKKzQyNjQyIDAgMjAzMzAwMAorMjY4NiAwIDIwNjcwMDAKKzIyMDIgMCAyMTAwMDAwCisyMTQ1IDAgMjEzMzAwMAorMjU2NiAwIDIxNjcwMDAKKzIxOTAgMCAyMjAwMDAwCisxNTgwIDAgMjIzMzAwMAorMTcxMSAwIDIyNjcwMDAKKzY0OCAwIDIzMDAwMDAKKzMyIDAgMjMzMzAwMAorNDA0MDkgMCAyMzY3MDAwCisyNjI4IDAgMjQwMDAwMAorMTk3MyAwIDI0MzMwMDAKKzIzNjAgMCAyNDY3MDAwCiszMDQzIDAgMjUwMDAwMAorMTczMCAwIDI1MzMwMDAKKzE0NTYgMCAyNTY3MDAwCisyMzEyIDAgMjYwMDAwMAorMzY5IDAgMjYzMzAwMAorMzIgMCAyNjY3MDAwCis0MTM5MSAwIDI3MDAwMDAKKzI5NjcgMCAyNzMzMDAwCisyNDU0IDAgMjc2NzAwMAorMTgyNSAwIDI4MDAwMDAKKzE4NTMgMCAyODMzMDAwCisxNzQ2IDAgMjg2NzAwMAorMjM0NyAwIDI5MDAwMDAKKzEzNjIgMCAyOTMzMDAwCis0NDEgMCAyOTY3MDAwCiszNCAwIDMwMDAwMDAKKzQyNTAzIDAgMzAzMzAwMAorMTg3NyAwIDMwNjcwMDAKKzE2OTAgMCAzMTAwMDAwCisxMzY3IDAgMzEzMzAwMAorMTUyMCAwIDMxNjcwMDAKKzEyNDAgMCAzMjAwMDAwCisxMDk0IDAgMzIzMzAwMAorNzM5IDAgMzI2NzAwMAorMzkyIDAgMzMwMDAwMAorMzMgMCAzMzMzMDAwCiszNTEwNCAwIDMzNjcwMDAKKzE0NjMgMCAzNDAwMDAwCisyMDI5IDAgMzQzMzAwMAorMTYyNiAwIDM0NjcwMDAKKzE5NTYgMCAzNTAwMDAwCis3OTkgMCAzNTMzMDAwCis1NTYgMCAzNTY3MDAwCis1ODQgMCAzNjAwMDAwCisxOTEgMCAzNjMzMDAwCiszNiAwIDM2NjcwMDAKKzM3NjUyIDAgMzcwMDAwMAorODYyIDAgMzczMzAwMAorNTI0IDAgMzc2NzAwMAorNjQxIDAgMzgwMDAwMAorNTg0IDAgMzgzMzAwMAorMzYwIDAgMzg2NzAwMAorMzY1IDAgMzkwMDAwMAorMzYxIDAgMzkzMzAwMAorMTU0IDAgMzk2NzAwMAorMzYgMCA0MDAwMDAwCisxMjU3NDAgMCA0MDMzMDAwCiszMzIgMCA0MDY3MDAwCiszODEgMCA0MTAwMDAwCis0MjAgMCA0MTMzMDAwCis0NjQgMCA0MTY3MDAwCisyODggMCA0MjAwMDAwCisyNjYwIDAgNDIzMzAwMAorMTI3NTY0IDEgNDI2NzAwMAorMzA2OTYgMCA0MzAwMDAwCiszNDIzIDAgNDMzMzAwMAorMzMxMCAwIDQzNjcwMDAKKzM1MTMgMCA0NDAwMDAwCiszNzM1IDAgNDQzMzAwMAorMzM1OCAwIDQ0NjcwMDAKKzMxMDggMCA0NTAwMDAwCisyODAwIDAgNDUzMzAwMAorMTc1MSAwIDQ1NjcwMDAKKzQxIDAgNDYwMDAwMAorMzk4NjIgMCA0NjMzMDAwCiszNzM5IDAgNDY2NzAwMAorMzc1NSAwIDQ3MDAwMDAKKzM0MDggMCA0NzMzMDAwCiszNzgzIDAgNDc2NzAwMAorMzQyMyAwIDQ4MDAwMDAKKzI4MDEgMCA0ODMzMDAwCisyNTQ5IDAgNDg2NzAwMAorMTQ2MSAwIDQ5MDAwMDAKKzQwIDAgNDkzMzAwMAorNDE2NjcgMCA0OTY3MDAwCiszNjIzIDAgNTAwMDAwMAorMzM1NiAwIDUwMzMwMDAKKzM0MjQgMCA1MDY3MDAwCiszNTQ4IDAgNTEwMDAwMAorMzExOSAwIDUxMzMwMDAKKzI5MDUgMCA1MTY3MDAwCisyNzcyIDAgNTIwMDAwMAorMTYyMyAwIDUyMzMwMDAKKzQzIDAgNTI2NzAwMAorNDY3ODMgMCA1MzAwMDAwCiszNDYyIDAgNTMzMzAwMAorMzQ3MCAwIDUzNjcwMDAKKzM2NzcgMCA1NDAwMDAwCiszNjg0IDAgNTQzMzAwMAorMzI2NiAwIDU0NjcwMDAKKzMxMjcgMCA1NTAwMDAwCisyODA5IDAgNTUzMzAwMAorMTc1MCAwIDU1NjcwMDAKKzQwIDAgNTYwMDAwMAorNDYyMTUgMCA1NjMzMDAwCiszNTk5IDAgNTY2NzAwMAorMzU1OCAwIDU3MDAwMDAKKzM1NDQgMCA1NzMzMDAwCiszNjMyIDAgNTc2NzAwMAorMzU0OCAwIDU4MDAwMDAKKzI5NjggMCA1ODMzMDAwCisyNzE1IDAgNTg2NzAwMAorMTcyOSAwIDU5MDAwMDAKKzQxIDAgNTkzMzAwMAorNDU5NTggMCA1OTY3MDAwCiszNzc2IDAgNjAwMDAwMAorMzUyNSAwIDYwMzMwMDAKKzM2NDQgMCA2MDY3MDAwCiszNzg2IDAgNjEwMDAwMAorMzIyMiAwIDYxMzMwMDAKKzI5MjMgMCA2MTY3MDAwCisyNzUyIDAgNjIwMDAwMAorMTU5MiAwIDYyMzMwMDAKKzQxIDAgNjI2NzAwMAorNDYwMzEgMCA2MzAwMDAwCiszNTIwIDAgNjMzMzAwMAorMzM4MCAwIDYzNjcwMDAKKzMzNzEgMCA2NDAwMDAwCiszNDI3IDAgNjQzMzAwMAorMzEzNSAwIDY0NjcwMDAKKzI5ODggMCA2NTAwMDAwCisyNzMwIDAgNjUzMzAwMAorMTY3MSAwIDY1NjcwMDAKKzQxIDAgNjYwMDAwMAorNDU4NDYgMCA2NjMzMDAwCiszNTM1IDAgNjY2NzAwMAorMzUwNyAwIDY3MDAwMDAKKzM0MjkgMCA2NzMzMDAwCiszNDkxIDAgNjc2NzAwMAorMzMyNSAwIDY4MDAwMDAKKzI5NzkgMCA2ODMzMDAwCisyODAwIDAgNjg2NzAwMAorMTYxMCAwIDY5MDAwMDAKKzQwIDAgNjkzMzAwMAorNDU5NTggMCA2OTY3MDAwCiszNzYyIDAgNzAwMDAwMAorMzI1NCAwIDcwMzMwMDAKKzM0MDggMCA3MDY3MDAwCiszODYwIDAgNzEwMDAwMAorMzE5OCAwIDcxMzMwMDAKKzI5NjYgMCA3MTY3MDAwCisyODgyIDAgNzIwMDAwMAorMTc2MyAwIDcyMzMwMDAKKzQyIDAgNzI2NzAwMAorNDYxMzAgMCA3MzAwMDAwCiszNTkzIDAgNzMzMzAwMAorMzUyMyAwIDczNjcwMDAKKzM5MzkgMCA3NDAwMDAwCiszOTgwIDAgNzQzMzAwMAorMzQ3MCAwIDc0NjcwMDAKKzMxOTEgMCA3NTAwMDAwCisyOTY5IDAgNzUzMzAwMAorMTc0MCAwIDc1NjcwMDAKKzQxIDAgNzYwMDAwMAorNDYzMDAgMCA3NjMzMDAwCiszNzM5IDAgNzY2NzAwMAorMzc4MSAwIDc3MDAwMDAKKzM5NjQgMCA3NzMzMDAwCis0MDIzIDAgNzc2NzAwMAorMzQ4MCAwIDc4MDAwMDAKKzMwNjUgMCA3ODMzMDAwCisyOTM0IDAgNzg2NzAwMAorMTgwNSAwIDc5MDAwMDAKKzQyIDAgNzkzMzAwMAorMzgxNjYgMCA3OTY3MDAwCis0MDYyIDAgODAwMDAwMAorMzg0NCAwIDgwMzMwMDAKKzQ1NDcgMCA4MDY3MDAwCis5MzQgMCA4MTAwMDAwCiszNjUgMCA4MTMzMDAwCisxODEgMCA4MTY3MDAwCis0NjMgMCA4MjAwMDAwCis0MTkgMCA4MjMzMDAwCiszOCAwIDgyNjcwMDAKKzk3MDIgMCA4MzAwMDAwCiszNDQgMCA4MzMzMDAwCisyNzYgMCA4MzY3MDAwCisxMzUwIDAgODQwMDAwMAorMTcwMyAwIDg0MzMwMDAKKzE4NDMgMCA4NDY3MDAwCisxMjI4IDAgODUwMDAwMAorMzU1ODAgMSA4NTMzMDAwCisyNzQ1OCAwIDg1NjcwMDAKKzIxNDQgMCA4NjAwMDAwCisyNDgyIDAgODYzMzAwMAorMjAwNCAwIDg2NjcwMDAKKzI4MjIgMCA4NzAwMDAwCisyNTcwIDAgODczMzAwMAorMTcyNiAwIDg3NjcwMDAKKzEyNDggMCA4ODAwMDAwCis4NDQgMCA4ODMzMDAwCiszNSAwIDg4NjcwMDAKKzE0MjA3IDAgODkwMDAwMAorMTAzNyAwIDg5MzMwMDAKKzc0OSAwIDg5NjcwMDAKKzgyOSAwIDkwMDAwMDAKKzkxNSAwIDkwMzMwMDAKKzY4NSAwIDkwNjcwMDAKKzc2NyAwIDkxMDAwMDAKKzc5OCAwIDkxMzMwMDAKKzM0MiAwIDkxNjcwMDAKKzMxIDAgOTIwMDAwMAorMTI1OTAgMCA5MjMzMDAwCis5MjMgMCA5MjY3MDAwCis4MTkgMCA5MzAwMDAwCis3NzYgMCA5MzMzMDAwCis4NjMgMCA5MzY3MDAwCis3MjkgMCA5NDAwMDAwCis0NzEgMCA5NDMzMDAwCis2MzggMCA5NDY3MDAwCisyNzYgMCA5NTAwMDAwCiszOCAwIDk1MzMwMDAKKzE3MjcyIDAgOTU2NzAwMAorODU2IDAgOTYwMDAwMAorMTE1OCAwIDk2MzMwMDAKKzIxNzIgMCA5NjY3MDAwCisyNzUxIDAgOTcwMDAwMAorMjE0MiAwIDk3MzMwMDAKKzEyNjcgMCA5NzY3MDAwCisxOTY1IDAgOTgwMDAwMAorMTUxMCAwIDk4MzMwMDAKKzM0IDAgOTg2NzAwMAorMjY5MiAwIDk5MDAwMDAKKzI3NzggMCA5OTMzMDAwCisyNTg1IDAgOTk2NzAwMApkaWZmIC0tZ2l0IGEvbWVkaWEvY29kZWMyL2hpZGwvMS4wL3Z0cy9yZXMvYmJiX3ZwOV82NDB4MzYwXzE2MDBrYnBzXzMwZnBzLnZwOSBiL21lZGlhL2NvZGVjMi9oaWRsLzEuMC92dHMvcmVzL2JiYl92cDlfNjQweDM2MF8xNjAwa2Jwc18zMGZwcy52cDkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzFlMjAwMQotLS0gL2Rldi9udWxsCisrKyBiL21lZGlhL2NvZGVjMi9oaWRsLzEuMC92dHMvcmVzL2JiYl92cDlfNjQweDM2MF8xNjAwa2Jwc18zMGZwcy52cDkKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvbWVkaWEvY29kZWMyL2hpZGwvMS4wL3Z0cy9yZXMvc2luZV9hbXJuYl8xY2hfMTJrYnBzXzgwMDBoei5hbXJuYiBiL21lZGlhL2NvZGVjMi9oaWRsLzEuMC92dHMvcmVzL3NpbmVfYW1ybmJfMWNoXzEya2Jwc184MDAwaHouYW1ybmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2RhZjJlMAotLS0gL2Rldi9udWxsCisrKyBiL21lZGlhL2NvZGVjMi9oaWRsLzEuMC92dHMvcmVzL3NpbmVfYW1ybmJfMWNoXzEya2Jwc184MDAwaHouYW1ybmIKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvbWVkaWEvY29kZWMyL2hpZGwvMS4wL3Z0cy9yZXMvc2luZV9hbXJuYl8xY2hfMTJrYnBzXzgwMDBoei5pbmZvIGIvbWVkaWEvY29kZWMyL2hpZGwvMS4wL3Z0cy9yZXMvc2luZV9hbXJuYl8xY2hfMTJrYnBzXzgwMDBoei5pbmZvCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIzNmU4MTMKLS0tIC9kZXYvbnVsbAorKysgYi9tZWRpYS9jb2RlYzIvaGlkbC8xLjAvdnRzL3Jlcy9zaW5lX2Ftcm5iXzFjaF8xMmticHNfODAwMGh6LmluZm8KQEAgLTAsMCArMSw4MzMgQEAKKzMyIDEgMAorMzIgMSAyMDAwMAorMzIgMSA0MDAwMAorMzIgMSA2MDAwMAorMzIgMSA4MDAwMAorMzIgMSAxMDAwMDAKKzMyIDEgMTIwMDAwCiszMiAxIDE0MDAwMAorMzIgMSAxNjAwMDAKKzMyIDEgMTgwMDAwCiszMiAxIDIwMDAwMAorMzIgMSAyMjAwMDAKKzMyIDEgMjQwMDAwCiszMiAxIDI2MDAwMAorMzIgMSAyODAwMDAKKzMyIDEgMzAwMDAwCiszMiAxIDMyMDAwMAorMzIgMSAzNDAwMDAKKzMyIDEgMzYwMDAwCiszMiAxIDM4MDAwMAorMzIgMSA0MDAwMDAKKzMyIDEgNDIwMDAwCiszMiAxIDQ0MDAwMAorMzIgMSA0NjAwMDAKKzMyIDEgNDgwMDAwCiszMiAxIDUwMDAwMAorMzIgMSA1MjAwMDAKKzMyIDEgNTQwMDAwCiszMiAxIDU2MDAwMAorMzIgMSA1ODAwMDAKKzMyIDEgNjAwMDAwCiszMiAxIDYyMDAwMAorMzIgMSA2NDAwMDAKKzMyIDEgNjYwMDAwCiszMiAxIDY4MDAwMAorMzIgMSA3MDAwMDAKKzMyIDEgNzIwMDAwCiszMiAxIDc0MDAwMAorMzIgMSA3NjAwMDAKKzMyIDEgNzgwMDAwCiszMiAxIDgwMDAwMAorMzIgMSA4MjAwMDAKKzMyIDEgODQwMDAwCiszMiAxIDg2MDAwMAorMzIgMSA4ODAwMDAKKzMyIDEgOTAwMDAwCiszMiAxIDkyMDAwMAorMzIgMSA5NDAwMDAKKzMyIDEgOTYwMDAwCiszMiAxIDk4MDAwMAorMzIgMSAxMDAwMDAwCiszMiAxIDEwMjAwMDAKKzMyIDEgMTA0MDAwMAorMzIgMSAxMDYwMDAwCiszMiAxIDEwODAwMDAKKzMyIDEgMTEwMDAwMAorMzIgMSAxMTIwMDAwCiszMiAxIDExNDAwMDAKKzMyIDEgMTE2MDAwMAorMzIgMSAxMTgwMDAwCiszMiAxIDEyMDAwMDAKKzMyIDEgMTIyMDAwMAorMzIgMSAxMjQwMDAwCiszMiAxIDEyNjAwMDAKKzMyIDEgMTI4MDAwMAorMzIgMSAxMzAwMDAwCiszMiAxIDEzMjAwMDAKKzMyIDEgMTM0MDAwMAorMzIgMSAxMzYwMDAwCiszMiAxIDEzODAwMDAKKzMyIDEgMTQwMDAwMAorMzIgMSAxNDIwMDAwCiszMiAxIDE0NDAwMDAKKzMyIDEgMTQ2MDAwMAorMzIgMSAxNDgwMDAwCiszMiAxIDE1MDAwMDAKKzMyIDEgMTUyMDAwMAorMzIgMSAxNTQwMDAwCiszMiAxIDE1NjAwMDAKKzMyIDEgMTU4MDAwMAorMzIgMSAxNjAwMDAwCiszMiAxIDE2MjAwMDAKKzMyIDEgMTY0MDAwMAorMzIgMSAxNjYwMDAwCiszMiAxIDE2ODAwMDAKKzMyIDEgMTcwMDAwMAorMzIgMSAxNzIwMDAwCiszMiAxIDE3NDAwMDAKKzMyIDEgMTc2MDAwMAorMzIgMSAxNzgwMDAwCiszMiAxIDE4MDAwMDAKKzMyIDEgMTgyMDAwMAorMzIgMSAxODQwMDAwCiszMiAxIDE4NjAwMDAKKzMyIDEgMTg4MDAwMAorMzIgMSAxOTAwMDAwCiszMiAxIDE5MjAwMDAKKzMyIDEgMTk0MDAwMAorMzIgMSAxOTYwMDAwCiszMiAxIDE5ODAwMDAKKzMyIDEgMjAwMDAwMAorMzIgMSAyMDIwMDAwCiszMiAxIDIwNDAwMDAKKzMyIDEgMjA2MDAwMAorMzIgMSAyMDgwMDAwCiszMiAxIDIxMDAwMDAKKzMyIDEgMjEyMDAwMAorMzIgMSAyMTQwMDAwCiszMiAxIDIxNjAwMDAKKzMyIDEgMjE4MDAwMAorMzIgMSAyMjAwMDAwCiszMiAxIDIyMjAwMDAKKzMyIDEgMjI0MDAwMAorMzIgMSAyMjYwMDAwCiszMiAxIDIyODAwMDAKKzMyIDEgMjMwMDAwMAorMzIgMSAyMzIwMDAwCiszMiAxIDIzNDAwMDAKKzMyIDEgMjM2MDAwMAorMzIgMSAyMzgwMDAwCiszMiAxIDI0MDAwMDAKKzMyIDEgMjQyMDAwMAorMzIgMSAyNDQwMDAwCiszMiAxIDI0NjAwMDAKKzMyIDEgMjQ4MDAwMAorMzIgMSAyNTAwMDAwCiszMiAxIDI1MjAwMDAKKzMyIDEgMjU0MDAwMAorMzIgMSAyNTYwMDAwCiszMiAxIDI1ODAwMDAKKzMyIDEgMjYwMDAwMAorMzIgMSAyNjIwMDAwCiszMiAxIDI2NDAwMDAKKzMyIDEgMjY2MDAwMAorMzIgMSAyNjgwMDAwCiszMiAxIDI3MDAwMDAKKzMyIDEgMjcyMDAwMAorMzIgMSAyNzQwMDAwCiszMiAxIDI3NjAwMDAKKzMyIDEgMjc4MDAwMAorMzIgMSAyODAwMDAwCiszMiAxIDI4MjAwMDAKKzMyIDEgMjg0MDAwMAorMzIgMSAyODYwMDAwCiszMiAxIDI4ODAwMDAKKzMyIDEgMjkwMDAwMAorMzIgMSAyOTIwMDAwCiszMiAxIDI5NDAwMDAKKzMyIDEgMjk2MDAwMAorMzIgMSAyOTgwMDAwCiszMiAxIDMwMDAwMDAKKzMyIDEgMzAyMDAwMAorMzIgMSAzMDQwMDAwCiszMiAxIDMwNjAwMDAKKzMyIDEgMzA4MDAwMAorMzIgMSAzMTAwMDAwCiszMiAxIDMxMjAwMDAKKzMyIDEgMzE0MDAwMAorMzIgMSAzMTYwMDAwCiszMiAxIDMxODAwMDAKKzMyIDEgMzIwMDAwMAorMzIgMSAzMjIwMDAwCiszMiAxIDMyNDAwMDAKKzMyIDEgMzI2MDAwMAorMzIgMSAzMjgwMDAwCiszMiAxIDMzMDAwMDAKKzMyIDEgMzMyMDAwMAorMzIgMSAzMzQwMDAwCiszMiAxIDMzNjAwMDAKKzMyIDEgMzM4MDAwMAorMzIgMSAzNDAwMDAwCiszMiAxIDM0MjAwMDAKKzMyIDEgMzQ0MDAwMAorMzIgMSAzNDYwMDAwCiszMiAxIDM0ODAwMDAKKzMyIDEgMzUwMDAwMAorMzIgMSAzNTIwMDAwCiszMiAxIDM1NDAwMDAKKzMyIDEgMzU2MDAwMAorMzIgMSAzNTgwMDAwCiszMiAxIDM2MDAwMDAKKzMyIDEgMzYyMDAwMAorMzIgMSAzNjQwMDAwCiszMiAxIDM2NjAwMDAKKzMyIDEgMzY4MDAwMAorMzIgMSAzNzAwMDAwCiszMiAxIDM3MjAwMDAKKzMyIDEgMzc0MDAwMAorMzIgMSAzNzYwMDAwCiszMiAxIDM3ODAwMDAKKzMyIDEgMzgwMDAwMAorMzIgMSAzODIwMDAwCiszMiAxIDM4NDAwMDAKKzMyIDEgMzg2MDAwMAorMzIgMSAzODgwMDAwCiszMiAxIDM5MDAwMDAKKzMyIDEgMzkyMDAwMAorMzIgMSAzOTQwMDAwCiszMiAxIDM5NjAwMDAKKzMyIDEgMzk4MDAwMAorMzIgMSA0MDAwMDAwCiszMiAxIDQwMjAwMDAKKzMyIDEgNDA0MDAwMAorMzIgMSA0MDYwMDAwCiszMiAxIDQwODAwMDAKKzMyIDEgNDEwMDAwMAorMzIgMSA0MTIwMDAwCiszMiAxIDQxNDAwMDAKKzMyIDEgNDE2MDAwMAorMzIgMSA0MTgwMDAwCiszMiAxIDQyMDAwMDAKKzMyIDEgNDIyMDAwMAorMzIgMSA0MjQwMDAwCiszMiAxIDQyNjAwMDAKKzMyIDEgNDI4MDAwMAorMzIgMSA0MzAwMDAwCiszMiAxIDQzMjAwMDAKKzMyIDEgNDM0MDAwMAorMzIgMSA0MzYwMDAwCiszMiAxIDQzODAwMDAKKzMyIDEgNDQwMDAwMAorMzIgMSA0NDIwMDAwCiszMiAxIDQ0NDAwMDAKKzMyIDEgNDQ2MDAwMAorMzIgMSA0NDgwMDAwCiszMiAxIDQ1MDAwMDAKKzMyIDEgNDUyMDAwMAorMzIgMSA0NTQwMDAwCiszMiAxIDQ1NjAwMDAKKzMyIDEgNDU4MDAwMAorMzIgMSA0NjAwMDAwCiszMiAxIDQ2MjAwMDAKKzMyIDEgNDY0MDAwMAorMzIgMSA0NjYwMDAwCiszMiAxIDQ2ODAwMDAKKzMyIDEgNDcwMDAwMAorMzIgMSA0NzIwMDAwCiszMiAxIDQ3NDAwMDAKKzMyIDEgNDc2MDAwMAorMzIgMSA0NzgwMDAwCiszMiAxIDQ4MDAwMDAKKzMyIDEgNDgyMDAwMAorMzIgMSA0ODQwMDAwCiszMiAxIDQ4NjAwMDAKKzMyIDEgNDg4MDAwMAorMzIgMSA0OTAwMDAwCiszMiAxIDQ5MjAwMDAKKzMyIDEgNDk0MDAwMAorMzIgMSA0OTYwMDAwCiszMiAxIDQ5ODAwMDAKKzMyIDEgNTAwMDAwMAorMzIgMSA1MDIwMDAwCiszMiAxIDUwNDAwMDAKKzMyIDEgNTA2MDAwMAorMzIgMSA1MDgwMDAwCiszMiAxIDUxMDAwMDAKKzMyIDEgNTEyMDAwMAorMzIgMSA1MTQwMDAwCiszMiAxIDUxNjAwMDAKKzMyIDEgNTE4MDAwMAorMzIgMSA1MjAwMDAwCiszMiAxIDUyMjAwMDAKKzMyIDEgNTI0MDAwMAorMzIgMSA1MjYwMDAwCiszMiAxIDUyODAwMDAKKzMyIDEgNTMwMDAwMAorMzIgMSA1MzIwMDAwCiszMiAxIDUzNDAwMDAKKzMyIDEgNTM2MDAwMAorMzIgMSA1MzgwMDAwCiszMiAxIDU0MDAwMDAKKzMyIDEgNTQyMDAwMAorMzIgMSA1NDQwMDAwCiszMiAxIDU0NjAwMDAKKzMyIDEgNTQ4MDAwMAorMzIgMSA1NTAwMDAwCiszMiAxIDU1MjAwMDAKKzMyIDEgNTU0MDAwMAorMzIgMSA1NTYwMDAwCiszMiAxIDU1ODAwMDAKKzMyIDEgNTYwMDAwMAorMzIgMSA1NjIwMDAwCiszMiAxIDU2NDAwMDAKKzMyIDEgNTY2MDAwMAorMzIgMSA1NjgwMDAwCiszMiAxIDU3MDAwMDAKKzMyIDEgNTcyMDAwMAorMzIgMSA1NzQwMDAwCiszMiAxIDU3NjAwMDAKKzMyIDEgNTc4MDAwMAorMzIgMSA1ODAwMDAwCiszMiAxIDU4MjAwMDAKKzMyIDEgNTg0MDAwMAorMzIgMSA1ODYwMDAwCiszMiAxIDU4ODAwMDAKKzMyIDEgNTkwMDAwMAorMzIgMSA1OTIwMDAwCiszMiAxIDU5NDAwMDAKKzMyIDEgNTk2MDAwMAorMzIgMSA1OTgwMDAwCiszMiAxIDYwMDAwMDAKKzMyIDEgNjAyMDAwMAorMzIgMSA2MDQwMDAwCiszMiAxIDYwNjAwMDAKKzMyIDEgNjA4MDAwMAorMzIgMSA2MTAwMDAwCiszMiAxIDYxMjAwMDAKKzMyIDEgNjE0MDAwMAorMzIgMSA2MTYwMDAwCiszMiAxIDYxODAwMDAKKzMyIDEgNjIwMDAwMAorMzIgMSA2MjIwMDAwCiszMiAxIDYyNDAwMDAKKzMyIDEgNjI2MDAwMAorMzIgMSA2MjgwMDAwCiszMiAxIDYzMDAwMDAKKzMyIDEgNjMyMDAwMAorMzIgMSA2MzQwMDAwCiszMiAxIDYzNjAwMDAKKzMyIDEgNjM4MDAwMAorMzIgMSA2NDAwMDAwCiszMiAxIDY0MjAwMDAKKzMyIDEgNjQ0MDAwMAorMzIgMSA2NDYwMDAwCiszMiAxIDY0ODAwMDAKKzMyIDEgNjUwMDAwMAorMzIgMSA2NTIwMDAwCiszMiAxIDY1NDAwMDAKKzMyIDEgNjU2MDAwMAorMzIgMSA2NTgwMDAwCiszMiAxIDY2MDAwMDAKKzMyIDEgNjYyMDAwMAorMzIgMSA2NjQwMDAwCiszMiAxIDY2NjAwMDAKKzMyIDEgNjY4MDAwMAorMzIgMSA2NzAwMDAwCiszMiAxIDY3MjAwMDAKKzMyIDEgNjc0MDAwMAorMzIgMSA2NzYwMDAwCiszMiAxIDY3ODAwMDAKKzMyIDEgNjgwMDAwMAorMzIgMSA2ODIwMDAwCiszMiAxIDY4NDAwMDAKKzMyIDEgNjg2MDAwMAorMzIgMSA2ODgwMDAwCiszMiAxIDY5MDAwMDAKKzMyIDEgNjkyMDAwMAorMzIgMSA2OTQwMDAwCiszMiAxIDY5NjAwMDAKKzMyIDEgNjk4MDAwMAorMzIgMSA3MDAwMDAwCiszMiAxIDcwMjAwMDAKKzMyIDEgNzA0MDAwMAorMzIgMSA3MDYwMDAwCiszMiAxIDcwODAwMDAKKzMyIDEgNzEwMDAwMAorMzIgMSA3MTIwMDAwCiszMiAxIDcxNDAwMDAKKzMyIDEgNzE2MDAwMAorMzIgMSA3MTgwMDAwCiszMiAxIDcyMDAwMDAKKzMyIDEgNzIyMDAwMAorMzIgMSA3MjQwMDAwCiszMiAxIDcyNjAwMDAKKzMyIDEgNzI4MDAwMAorMzIgMSA3MzAwMDAwCiszMiAxIDczMjAwMDAKKzMyIDEgNzM0MDAwMAorMzIgMSA3MzYwMDAwCiszMiAxIDczODAwMDAKKzMyIDEgNzQwMDAwMAorMzIgMSA3NDIwMDAwCiszMiAxIDc0NDAwMDAKKzMyIDEgNzQ2MDAwMAorMzIgMSA3NDgwMDAwCiszMiAxIDc1MDAwMDAKKzMyIDEgNzUyMDAwMAorMzIgMSA3NTQwMDAwCiszMiAxIDc1NjAwMDAKKzMyIDEgNzU4MDAwMAorMzIgMSA3NjAwMDAwCiszMiAxIDc2MjAwMDAKKzMyIDEgNzY0MDAwMAorMzIgMSA3NjYwMDAwCiszMiAxIDc2ODAwMDAKKzMyIDEgNzcwMDAwMAorMzIgMSA3NzIwMDAwCiszMiAxIDc3NDAwMDAKKzMyIDEgNzc2MDAwMAorMzIgMSA3NzgwMDAwCiszMiAxIDc4MDAwMDAKKzMyIDEgNzgyMDAwMAorMzIgMSA3ODQwMDAwCiszMiAxIDc4NjAwMDAKKzMyIDEgNzg4MDAwMAorMzIgMSA3OTAwMDAwCiszMiAxIDc5MjAwMDAKKzMyIDEgNzk0MDAwMAorMzIgMSA3OTYwMDAwCiszMiAxIDc5ODAwMDAKKzMyIDEgODAwMDAwMAorMzIgMSA4MDIwMDAwCiszMiAxIDgwNDAwMDAKKzMyIDEgODA2MDAwMAorMzIgMSA4MDgwMDAwCiszMiAxIDgxMDAwMDAKKzMyIDEgODEyMDAwMAorMzIgMSA4MTQwMDAwCiszMiAxIDgxNjAwMDAKKzMyIDEgODE4MDAwMAorMzIgMSA4MjAwMDAwCiszMiAxIDgyMjAwMDAKKzMyIDEgODI0MDAwMAorMzIgMSA4MjYwMDAwCiszMiAxIDgyODAwMDAKKzMyIDEgODMwMDAwMAorMzIgMSA4MzIwMDAwCiszMiAxIDgzNDAwMDAKKzMyIDEgODM2MDAwMAorMzIgMSA4MzgwMDAwCiszMiAxIDg0MDAwMDAKKzMyIDEgODQyMDAwMAorMzIgMSA4NDQwMDAwCiszMiAxIDg0NjAwMDAKKzMyIDEgODQ4MDAwMAorMzIgMSA4NTAwMDAwCiszMiAxIDg1MjAwMDAKKzMyIDEgODU0MDAwMAorMzIgMSA4NTYwMDAwCiszMiAxIDg1ODAwMDAKKzMyIDEgODYwMDAwMAorMzIgMSA4NjIwMDAwCiszMiAxIDg2NDAwMDAKKzMyIDEgODY2MDAwMAorMzIgMSA4NjgwMDAwCiszMiAxIDg3MDAwMDAKKzMyIDEgODcyMDAwMAorMzIgMSA4NzQwMDAwCiszMiAxIDg3NjAwMDAKKzMyIDEgODc4MDAwMAorMzIgMSA4ODAwMDAwCiszMiAxIDg4MjAwMDAKKzMyIDEgODg0MDAwMAorMzIgMSA4ODYwMDAwCiszMiAxIDg4ODAwMDAKKzMyIDEgODkwMDAwMAorMzIgMSA4OTIwMDAwCiszMiAxIDg5NDAwMDAKKzMyIDEgODk2MDAwMAorMzIgMSA4OTgwMDAwCiszMiAxIDkwMDAwMDAKKzMyIDEgOTAyMDAwMAorMzIgMSA5MDQwMDAwCiszMiAxIDkwNjAwMDAKKzMyIDEgOTA4MDAwMAorMzIgMSA5MTAwMDAwCiszMiAxIDkxMjAwMDAKKzMyIDEgOTE0MDAwMAorMzIgMSA5MTYwMDAwCiszMiAxIDkxODAwMDAKKzMyIDEgOTIwMDAwMAorMzIgMSA5MjIwMDAwCiszMiAxIDkyNDAwMDAKKzMyIDEgOTI2MDAwMAorMzIgMSA5MjgwMDAwCiszMiAxIDkzMDAwMDAKKzMyIDEgOTMyMDAwMAorMzIgMSA5MzQwMDAwCiszMiAxIDkzNjAwMDAKKzMyIDEgOTM4MDAwMAorMzIgMSA5NDAwMDAwCiszMiAxIDk0MjAwMDAKKzMyIDEgOTQ0MDAwMAorMzIgMSA5NDYwMDAwCiszMiAxIDk0ODAwMDAKKzMyIDEgOTUwMDAwMAorMzIgMSA5NTIwMDAwCiszMiAxIDk1NDAwMDAKKzMyIDEgOTU2MDAwMAorMzIgMSA5NTgwMDAwCiszMiAxIDk2MDAwMDAKKzMyIDEgOTYyMDAwMAorMzIgMSA5NjQwMDAwCiszMiAxIDk2NjAwMDAKKzMyIDEgOTY4MDAwMAorMzIgMSA5NzAwMDAwCiszMiAxIDk3MjAwMDAKKzMyIDEgOTc0MDAwMAorMzIgMSA5NzYwMDAwCiszMiAxIDk3ODAwMDAKKzMyIDEgOTgwMDAwMAorMzIgMSA5ODIwMDAwCiszMiAxIDk4NDAwMDAKKzMyIDEgOTg2MDAwMAorMzIgMSA5ODgwMDAwCiszMiAxIDk5MDAwMDAKKzMyIDEgOTkyMDAwMAorMzIgMSA5OTQwMDAwCiszMiAxIDk5NjAwMDAKKzMyIDEgOTk4MDAwMAorMzIgMSAxMDAwMDAwMAorMzIgMSAxMDAyMDAwMAorMzIgMSAxMDA0MDAwMAorMzIgMSAxMDA2MDAwMAorMzIgMSAxMDA4MDAwMAorMzIgMSAxMDEwMDAwMAorMzIgMSAxMDEyMDAwMAorMzIgMSAxMDE0MDAwMAorMzIgMSAxMDE2MDAwMAorMzIgMSAxMDE4MDAwMAorMzIgMSAxMDIwMDAwMAorMzIgMSAxMDIyMDAwMAorMzIgMSAxMDI0MDAwMAorMzIgMSAxMDI2MDAwMAorMzIgMSAxMDI4MDAwMAorMzIgMSAxMDMwMDAwMAorMzIgMSAxMDMyMDAwMAorMzIgMSAxMDM0MDAwMAorMzIgMSAxMDM2MDAwMAorMzIgMSAxMDM4MDAwMAorMzIgMSAxMDQwMDAwMAorMzIgMSAxMDQyMDAwMAorMzIgMSAxMDQ0MDAwMAorMzIgMSAxMDQ2MDAwMAorMzIgMSAxMDQ4MDAwMAorMzIgMSAxMDUwMDAwMAorMzIgMSAxMDUyMDAwMAorMzIgMSAxMDU0MDAwMAorMzIgMSAxMDU2MDAwMAorMzIgMSAxMDU4MDAwMAorMzIgMSAxMDYwMDAwMAorMzIgMSAxMDYyMDAwMAorMzIgMSAxMDY0MDAwMAorMzIgMSAxMDY2MDAwMAorMzIgMSAxMDY4MDAwMAorMzIgMSAxMDcwMDAwMAorMzIgMSAxMDcyMDAwMAorMzIgMSAxMDc0MDAwMAorMzIgMSAxMDc2MDAwMAorMzIgMSAxMDc4MDAwMAorMzIgMSAxMDgwMDAwMAorMzIgMSAxMDgyMDAwMAorMzIgMSAxMDg0MDAwMAorMzIgMSAxMDg2MDAwMAorMzIgMSAxMDg4MDAwMAorMzIgMSAxMDkwMDAwMAorMzIgMSAxMDkyMDAwMAorMzIgMSAxMDk0MDAwMAorMzIgMSAxMDk2MDAwMAorMzIgMSAxMDk4MDAwMAorMzIgMSAxMTAwMDAwMAorMzIgMSAxMTAyMDAwMAorMzIgMSAxMTA0MDAwMAorMzIgMSAxMTA2MDAwMAorMzIgMSAxMTA4MDAwMAorMzIgMSAxMTEwMDAwMAorMzIgMSAxMTEyMDAwMAorMzIgMSAxMTE0MDAwMAorMzIgMSAxMTE2MDAwMAorMzIgMSAxMTE4MDAwMAorMzIgMSAxMTIwMDAwMAorMzIgMSAxMTIyMDAwMAorMzIgMSAxMTI0MDAwMAorMzIgMSAxMTI2MDAwMAorMzIgMSAxMTI4MDAwMAorMzIgMSAxMTMwMDAwMAorMzIgMSAxMTMyMDAwMAorMzIgMSAxMTM0MDAwMAorMzIgMSAxMTM2MDAwMAorMzIgMSAxMTM4MDAwMAorMzIgMSAxMTQwMDAwMAorMzIgMSAxMTQyMDAwMAorMzIgMSAxMTQ0MDAwMAorMzIgMSAxMTQ2MDAwMAorMzIgMSAxMTQ4MDAwMAorMzIgMSAxMTUwMDAwMAorMzIgMSAxMTUyMDAwMAorMzIgMSAxMTU0MDAwMAorMzIgMSAxMTU2MDAwMAorMzIgMSAxMTU4MDAwMAorMzIgMSAxMTYwMDAwMAorMzIgMSAxMTYyMDAwMAorMzIgMSAxMTY0MDAwMAorMzIgMSAxMTY2MDAwMAorMzIgMSAxMTY4MDAwMAorMzIgMSAxMTcwMDAwMAorMzIgMSAxMTcyMDAwMAorMzIgMSAxMTc0MDAwMAorMzIgMSAxMTc2MDAwMAorMzIgMSAxMTc4MDAwMAorMzIgMSAxMTgwMDAwMAorMzIgMSAxMTgyMDAwMAorMzIgMSAxMTg0MDAwMAorMzIgMSAxMTg2MDAwMAorMzIgMSAxMTg4MDAwMAorMzIgMSAxMTkwMDAwMAorMzIgMSAxMTkyMDAwMAorMzIgMSAxMTk0MDAwMAorMzIgMSAxMTk2MDAwMAorMzIgMSAxMTk4MDAwMAorMzIgMSAxMjAwMDAwMAorMzIgMSAxMjAyMDAwMAorMzIgMSAxMjA0MDAwMAorMzIgMSAxMjA2MDAwMAorMzIgMSAxMjA4MDAwMAorMzIgMSAxMjEwMDAwMAorMzIgMSAxMjEyMDAwMAorMzIgMSAxMjE0MDAwMAorMzIgMSAxMjE2MDAwMAorMzIgMSAxMjE4MDAwMAorMzIgMSAxMjIwMDAwMAorMzIgMSAxMjIyMDAwMAorMzIgMSAxMjI0MDAwMAorMzIgMSAxMjI2MDAwMAorMzIgMSAxMjI4MDAwMAorMzIgMSAxMjMwMDAwMAorMzIgMSAxMjMyMDAwMAorMzIgMSAxMjM0MDAwMAorMzIgMSAxMjM2MDAwMAorMzIgMSAxMjM4MDAwMAorMzIgMSAxMjQwMDAwMAorMzIgMSAxMjQyMDAwMAorMzIgMSAxMjQ0MDAwMAorMzIgMSAxMjQ2MDAwMAorMzIgMSAxMjQ4MDAwMAorMzIgMSAxMjUwMDAwMAorMzIgMSAxMjUyMDAwMAorMzIgMSAxMjU0MDAwMAorMzIgMSAxMjU2MDAwMAorMzIgMSAxMjU4MDAwMAorMzIgMSAxMjYwMDAwMAorMzIgMSAxMjYyMDAwMAorMzIgMSAxMjY0MDAwMAorMzIgMSAxMjY2MDAwMAorMzIgMSAxMjY4MDAwMAorMzIgMSAxMjcwMDAwMAorMzIgMSAxMjcyMDAwMAorMzIgMSAxMjc0MDAwMAorMzIgMSAxMjc2MDAwMAorMzIgMSAxMjc4MDAwMAorMzIgMSAxMjgwMDAwMAorMzIgMSAxMjgyMDAwMAorMzIgMSAxMjg0MDAwMAorMzIgMSAxMjg2MDAwMAorMzIgMSAxMjg4MDAwMAorMzIgMSAxMjkwMDAwMAorMzIgMSAxMjkyMDAwMAorMzIgMSAxMjk0MDAwMAorMzIgMSAxMjk2MDAwMAorMzIgMSAxMjk4MDAwMAorMzIgMSAxMzAwMDAwMAorMzIgMSAxMzAyMDAwMAorMzIgMSAxMzA0MDAwMAorMzIgMSAxMzA2MDAwMAorMzIgMSAxMzA4MDAwMAorMzIgMSAxMzEwMDAwMAorMzIgMSAxMzEyMDAwMAorMzIgMSAxMzE0MDAwMAorMzIgMSAxMzE2MDAwMAorMzIgMSAxMzE4MDAwMAorMzIgMSAxMzIwMDAwMAorMzIgMSAxMzIyMDAwMAorMzIgMSAxMzI0MDAwMAorMzIgMSAxMzI2MDAwMAorMzIgMSAxMzI4MDAwMAorMzIgMSAxMzMwMDAwMAorMzIgMSAxMzMyMDAwMAorMzIgMSAxMzM0MDAwMAorMzIgMSAxMzM2MDAwMAorMzIgMSAxMzM4MDAwMAorMzIgMSAxMzQwMDAwMAorMzIgMSAxMzQyMDAwMAorMzIgMSAxMzQ0MDAwMAorMzIgMSAxMzQ2MDAwMAorMzIgMSAxMzQ4MDAwMAorMzIgMSAxMzUwMDAwMAorMzIgMSAxMzUyMDAwMAorMzIgMSAxMzU0MDAwMAorMzIgMSAxMzU2MDAwMAorMzIgMSAxMzU4MDAwMAorMzIgMSAxMzYwMDAwMAorMzIgMSAxMzYyMDAwMAorMzIgMSAxMzY0MDAwMAorMzIgMSAxMzY2MDAwMAorMzIgMSAxMzY4MDAwMAorMzIgMSAxMzcwMDAwMAorMzIgMSAxMzcyMDAwMAorMzIgMSAxMzc0MDAwMAorMzIgMSAxMzc2MDAwMAorMzIgMSAxMzc4MDAwMAorMzIgMSAxMzgwMDAwMAorMzIgMSAxMzgyMDAwMAorMzIgMSAxMzg0MDAwMAorMzIgMSAxMzg2MDAwMAorMzIgMSAxMzg4MDAwMAorMzIgMSAxMzkwMDAwMAorMzIgMSAxMzkyMDAwMAorMzIgMSAxMzk0MDAwMAorMzIgMSAxMzk2MDAwMAorMzIgMSAxMzk4MDAwMAorMzIgMSAxNDAwMDAwMAorMzIgMSAxNDAyMDAwMAorMzIgMSAxNDA0MDAwMAorMzIgMSAxNDA2MDAwMAorMzIgMSAxNDA4MDAwMAorMzIgMSAxNDEwMDAwMAorMzIgMSAxNDEyMDAwMAorMzIgMSAxNDE0MDAwMAorMzIgMSAxNDE2MDAwMAorMzIgMSAxNDE4MDAwMAorMzIgMSAxNDIwMDAwMAorMzIgMSAxNDIyMDAwMAorMzIgMSAxNDI0MDAwMAorMzIgMSAxNDI2MDAwMAorMzIgMSAxNDI4MDAwMAorMzIgMSAxNDMwMDAwMAorMzIgMSAxNDMyMDAwMAorMzIgMSAxNDM0MDAwMAorMzIgMSAxNDM2MDAwMAorMzIgMSAxNDM4MDAwMAorMzIgMSAxNDQwMDAwMAorMzIgMSAxNDQyMDAwMAorMzIgMSAxNDQ0MDAwMAorMzIgMSAxNDQ2MDAwMAorMzIgMSAxNDQ4MDAwMAorMzIgMSAxNDUwMDAwMAorMzIgMSAxNDUyMDAwMAorMzIgMSAxNDU0MDAwMAorMzIgMSAxNDU2MDAwMAorMzIgMSAxNDU4MDAwMAorMzIgMSAxNDYwMDAwMAorMzIgMSAxNDYyMDAwMAorMzIgMSAxNDY0MDAwMAorMzIgMSAxNDY2MDAwMAorMzIgMSAxNDY4MDAwMAorMzIgMSAxNDcwMDAwMAorMzIgMSAxNDcyMDAwMAorMzIgMSAxNDc0MDAwMAorMzIgMSAxNDc2MDAwMAorMzIgMSAxNDc4MDAwMAorMzIgMSAxNDgwMDAwMAorMzIgMSAxNDgyMDAwMAorMzIgMSAxNDg0MDAwMAorMzIgMSAxNDg2MDAwMAorMzIgMSAxNDg4MDAwMAorMzIgMSAxNDkwMDAwMAorMzIgMSAxNDkyMDAwMAorMzIgMSAxNDk0MDAwMAorMzIgMSAxNDk2MDAwMAorMzIgMSAxNDk4MDAwMAorMzIgMSAxNTAwMDAwMAorMzIgMSAxNTAyMDAwMAorMzIgMSAxNTA0MDAwMAorMzIgMSAxNTA2MDAwMAorMzIgMSAxNTA4MDAwMAorMzIgMSAxNTEwMDAwMAorMzIgMSAxNTEyMDAwMAorMzIgMSAxNTE0MDAwMAorMzIgMSAxNTE2MDAwMAorMzIgMSAxNTE4MDAwMAorMzIgMSAxNTIwMDAwMAorMzIgMSAxNTIyMDAwMAorMzIgMSAxNTI0MDAwMAorMzIgMSAxNTI2MDAwMAorMzIgMSAxNTI4MDAwMAorMzIgMSAxNTMwMDAwMAorMzIgMSAxNTMyMDAwMAorMzIgMSAxNTM0MDAwMAorMzIgMSAxNTM2MDAwMAorMzIgMSAxNTM4MDAwMAorMzIgMSAxNTQwMDAwMAorMzIgMSAxNTQyMDAwMAorMzIgMSAxNTQ0MDAwMAorMzIgMSAxNTQ2MDAwMAorMzIgMSAxNTQ4MDAwMAorMzIgMSAxNTUwMDAwMAorMzIgMSAxNTUyMDAwMAorMzIgMSAxNTU0MDAwMAorMzIgMSAxNTU2MDAwMAorMzIgMSAxNTU4MDAwMAorMzIgMSAxNTYwMDAwMAorMzIgMSAxNTYyMDAwMAorMzIgMSAxNTY0MDAwMAorMzIgMSAxNTY2MDAwMAorMzIgMSAxNTY4MDAwMAorMzIgMSAxNTcwMDAwMAorMzIgMSAxNTcyMDAwMAorMzIgMSAxNTc0MDAwMAorMzIgMSAxNTc2MDAwMAorMzIgMSAxNTc4MDAwMAorMzIgMSAxNTgwMDAwMAorMzIgMSAxNTgyMDAwMAorMzIgMSAxNTg0MDAwMAorMzIgMSAxNTg2MDAwMAorMzIgMSAxNTg4MDAwMAorMzIgMSAxNTkwMDAwMAorMzIgMSAxNTkyMDAwMAorMzIgMSAxNTk0MDAwMAorMzIgMSAxNTk2MDAwMAorMzIgMSAxNTk4MDAwMAorMzIgMSAxNjAwMDAwMAorMzIgMSAxNjAyMDAwMAorMzIgMSAxNjA0MDAwMAorMzIgMSAxNjA2MDAwMAorMzIgMSAxNjA4MDAwMAorMzIgMSAxNjEwMDAwMAorMzIgMSAxNjEyMDAwMAorMzIgMSAxNjE0MDAwMAorMzIgMSAxNjE2MDAwMAorMzIgMSAxNjE4MDAwMAorMzIgMSAxNjIwMDAwMAorMzIgMSAxNjIyMDAwMAorMzIgMSAxNjI0MDAwMAorMzIgMSAxNjI2MDAwMAorMzIgMSAxNjI4MDAwMAorMzIgMSAxNjMwMDAwMAorMzIgMSAxNjMyMDAwMAorMzIgMSAxNjM0MDAwMAorMzIgMSAxNjM2MDAwMAorMzIgMSAxNjM4MDAwMAorMzIgMSAxNjQwMDAwMAorMzIgMSAxNjQyMDAwMAorMzIgMSAxNjQ0MDAwMAorMzIgMSAxNjQ2MDAwMAorMzIgMSAxNjQ4MDAwMAorMzIgMSAxNjUwMDAwMAorMzIgMSAxNjUyMDAwMAorMzIgMSAxNjU0MDAwMAorMzIgMSAxNjU2MDAwMAorMzIgMSAxNjU4MDAwMAorMzIgMSAxNjYwMDAwMAorMzIgMSAxNjYyMDAwMAorMzIgMSAxNjY0MDAwMApkaWZmIC0tZ2l0IGEvbWVkaWEvY29kZWMyL2hpZGwvMS4wL3Z0cy92aWRlby9BbmRyb2lkLmJwIGIvbWVkaWEvY29kZWMyL2hpZGwvMS4wL3Z0cy92aWRlby9BbmRyb2lkLmJwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZlNTdlZTcKLS0tIC9kZXYvbnVsbAorKysgYi9tZWRpYS9jb2RlYzIvaGlkbC8xLjAvdnRzL3ZpZGVvL0FuZHJvaWQuYnAKQEAgLTAsMCArMSwyOCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxOCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCisKK2NjX3Rlc3QgeworICAgIG5hbWU6ICJWdHNIaWRsQzJWMV8wVGFyZ2V0VmlkZW9EZWNUZXN0IiwKKyAgICBkZWZhdWx0czogWyJWdHNNZWRpYUMyVjFfMERlZmF1bHRzIl0sCisgICAgc3JjczogWyJWdHNIaWRsQzJWMV8wVGFyZ2V0VmlkZW9EZWNUZXN0LmNwcCJdLAorfQorCitjY190ZXN0IHsKKyAgICBuYW1lOiAiVnRzSGlkbEMyVjFfMFRhcmdldFZpZGVvRW5jVGVzdCIsCisgICAgZGVmYXVsdHM6IFsiVnRzTWVkaWFDMlYxXzBEZWZhdWx0cyJdLAorICAgIHNyY3M6IFsiVnRzSGlkbEMyVjFfMFRhcmdldFZpZGVvRW5jVGVzdC5jcHAiXSwKK30KKwpkaWZmIC0tZ2l0IGEvbWVkaWEvY29kZWMyL2hpZGwvMS4wL3Z0cy92aWRlby9WdHNIaWRsQzJWMV8wVGFyZ2V0VmlkZW9EZWNUZXN0LmNwcCBiL21lZGlhL2NvZGVjMi9oaWRsLzEuMC92dHMvdmlkZW8vVnRzSGlkbEMyVjFfMFRhcmdldFZpZGVvRGVjVGVzdC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODQyMGNhYgotLS0gL2Rldi9udWxsCisrKyBiL21lZGlhL2NvZGVjMi9oaWRsLzEuMC92dHMvdmlkZW8vVnRzSGlkbEMyVjFfMFRhcmdldFZpZGVvRGVjVGVzdC5jcHAKQEAgLTAsMCArMSw4OTEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTggVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworCisvLyNkZWZpbmUgTE9HX05ERUJVRyAwCisjZGVmaW5lIExPR19UQUcgImNvZGVjMl9oaWRsX2hhbF92aWRlb19kZWNfdGVzdCIKKworI2luY2x1ZGUgPGFuZHJvaWQtYmFzZS9sb2dnaW5nLmg+CisjaW5jbHVkZSA8Z3Rlc3QvZ3Rlc3QuaD4KKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPGZzdHJlYW0+CisKKyNpbmNsdWRlIDxjb2RlYzIvaGlkbC9jbGllbnQuaD4KKyNpbmNsdWRlIDxDMkFsbG9jYXRvcklvbi5oPgorI2luY2x1ZGUgPEMyQ29uZmlnLmg+CisjaW5jbHVkZSA8QzJEZWJ1Zy5oPgorI2luY2x1ZGUgPEMyQnVmZmVyLmg+CisjaW5jbHVkZSA8QzJCdWZmZXJQcml2Lmg+CisKK3VzaW5nIGFuZHJvaWQ6OkMyQWxsb2NhdG9ySW9uOworCisjaW5jbHVkZSA8VnRzSGFsSGlkbFRhcmdldFRlc3RCYXNlLmg+CisjaW5jbHVkZSAibWVkaWFfYzJfdmlkZW9faGlkbF90ZXN0X2NvbW1vbi5oIgorI2luY2x1ZGUgIm1lZGlhX2MyX2hpZGxfdGVzdF9jb21tb24uaCIKKworc3RydWN0IEZyYW1lSW5mbyB7CisgICAgaW50IGJ5dGVzQ291bnQ7CisgICAgdWludDMyX3QgZmxhZ3M7CisgICAgaW50NjRfdCB0aW1lc3RhbXA7Cit9OworCitjbGFzcyBMaW5lYXJCdWZmZXIgOiBwdWJsaWMgQzJCdWZmZXIgeworICAgcHVibGljOgorICAgIGV4cGxpY2l0IExpbmVhckJ1ZmZlcihjb25zdCBzdGQ6OnNoYXJlZF9wdHI8QzJMaW5lYXJCbG9jaz4mIGJsb2NrKQorICAgICAgICA6IEMyQnVmZmVyKAorICAgICAgICAgICAgICB7YmxvY2stPnNoYXJlKGJsb2NrLT5vZmZzZXQoKSwgYmxvY2stPnNpemUoKSwgOjpDMkZlbmNlKCkpfSkge30KK307CisKK3N0YXRpYyBDb21wb25lbnRUZXN0RW52aXJvbm1lbnQqIGdFbnYgPSBudWxscHRyOworCituYW1lc3BhY2UgeworCitjbGFzcyBDb2RlYzJWaWRlb0RlY0hpZGxUZXN0IDogcHVibGljIDo6dGVzdGluZzo6VnRzSGFsSGlkbFRhcmdldFRlc3RCYXNlIHsKKyAgIHByaXZhdGU6CisgICAgdHlwZWRlZiA6OnRlc3Rpbmc6OlZ0c0hhbEhpZGxUYXJnZXRUZXN0QmFzZSBTdXBlcjsKKworICAgcHVibGljOgorICAgIDo6c3RkOjpzdHJpbmcgZ2V0VGVzdENhc2VJbmZvKCkgY29uc3Qgb3ZlcnJpZGUgeworICAgICAgICByZXR1cm4gOjpzdGQ6OnN0cmluZygpICsKKyAgICAgICAgICAgICAgICAiQ29tcG9uZW50OiAiICsgZ0Vudi0+Z2V0Q29tcG9uZW50KCkuY19zdHIoKSArICIgfCAiICsKKyAgICAgICAgICAgICAgICAiSW5zdGFuY2U6ICIgKyBnRW52LT5nZXRJbnN0YW5jZSgpLmNfc3RyKCkgKyAiIHwgIiArCisgICAgICAgICAgICAgICAgIlJlczogIiArIGdFbnYtPmdldFJlcygpLmNfc3RyKCk7CisgICAgfQorCisgICAgLy8gZ29vZ2xlLmNvZGVjMiBWaWRlbyB0ZXN0IHNldHVwCisgICAgdmlydHVhbCB2b2lkIFNldFVwKCkgb3ZlcnJpZGUgeworICAgICAgICBTdXBlcjo6U2V0VXAoKTsKKyAgICAgICAgbURpc2FibGVUZXN0ID0gZmFsc2U7CisgICAgICAgIEFMT0dWKCJDb2RlYzJWaWRlb0RlY0hpZGxUZXN0IFNldFVwIik7CisgICAgICAgIG1DbGllbnQgPSBhbmRyb2lkOjpDb2RlYzJDbGllbnQ6OkNyZWF0ZUZyb21TZXJ2aWNlKAorICAgICAgICAgICAgZ0Vudi0+Z2V0SW5zdGFuY2UoKS5jX3N0cigpKTsKKyAgICAgICAgQVNTRVJUX05FKG1DbGllbnQsIG51bGxwdHIpOworICAgICAgICBtTGlzdGVuZXIucmVzZXQobmV3IENvZGVjTGlzdGVuZXIoCisgICAgICAgICAgICBbdGhpc10oc3RkOjpsaXN0PHN0ZDo6dW5pcXVlX3B0cjxDMldvcms+PiYgd29ya0l0ZW1zKSB7CisgICAgICAgICAgICAgICAgaGFuZGxlV29ya0RvbmUod29ya0l0ZW1zKTsKKyAgICAgICAgICAgIH0pKTsKKyAgICAgICAgQVNTRVJUX05FKG1MaXN0ZW5lciwgbnVsbHB0cik7CisgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgTUFYX0lOUFVUX0JVRkZFUlM7ICsraSkgeworICAgICAgICAgICAgbVdvcmtRdWV1ZS5lbXBsYWNlX2JhY2sobmV3IEMyV29yayk7CisgICAgICAgIH0KKyAgICAgICAgbUNsaWVudC0+Y3JlYXRlQ29tcG9uZW50KGdFbnYtPmdldENvbXBvbmVudCgpLmNfc3RyKCksIG1MaXN0ZW5lciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZtQ29tcG9uZW50KTsKKyAgICAgICAgQVNTRVJUX05FKG1Db21wb25lbnQsIG51bGxwdHIpOworCisgICAgICAgIHN0ZDo6c2hhcmVkX3B0cjxDMkFsbG9jYXRvclN0b3JlPiBzdG9yZSA9CisgICAgICAgICAgICBhbmRyb2lkOjpHZXRDb2RlYzJQbGF0Zm9ybUFsbG9jYXRvclN0b3JlKCk7CisgICAgICAgIENIRUNLX0VRKHN0b3JlLT5mZXRjaEFsbG9jYXRvcihDMkFsbG9jYXRvclN0b3JlOjpERUZBVUxUX0xJTkVBUiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZtTGluZWFyQWxsb2NhdG9yKSwKKyAgICAgICAgICAgICAgICAgQzJfT0spOworICAgICAgICBtTGluZWFyUG9vbCA9IHN0ZDo6bWFrZV9zaGFyZWQ8QzJQb29sZWRCbG9ja1Bvb2w+KG1MaW5lYXJBbGxvY2F0b3IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbUJsb2NrUG9vbElkKyspOworICAgICAgICBBU1NFUlRfTkUobUxpbmVhclBvb2wsIG51bGxwdHIpOworCisgICAgICAgIG1Db21wTmFtZSA9IHVua25vd25fY29tcDsKKyAgICAgICAgc3RydWN0IFN0cmluZ1RvTmFtZSB7CisgICAgICAgICAgICBjb25zdCBjaGFyKiBOYW1lOworICAgICAgICAgICAgc3RhbmRhcmRDb21wIENvbXBOYW1lOworICAgICAgICB9OworCisgICAgICAgIGNvbnN0IFN0cmluZ1RvTmFtZSBrU3RyaW5nVG9OYW1lW10gPSB7CisgICAgICAgICAgICB7ImgyNjMiLCBoMjYzfSwgeyJhdmMiLCBhdmN9LCB7Im1wZWcyIiwgbXBlZzJ9LCB7Im1wZWc0IiwgbXBlZzR9LAorICAgICAgICAgICAgeyJoZXZjIiwgaGV2Y30sIHsidnA4IiwgdnA4fSwgeyJ2cDkiLCB2cDl9LAorICAgICAgICB9OworCisgICAgICAgIGNvbnN0IHNpemVfdCBrTnVtU3RyaW5nVG9OYW1lID0KKyAgICAgICAgICAgIHNpemVvZihrU3RyaW5nVG9OYW1lKSAvIHNpemVvZihrU3RyaW5nVG9OYW1lWzBdKTsKKworICAgICAgICBzdGQ6OnN0cmluZyBzdWJzdHJpbmc7CisgICAgICAgIHN0ZDo6c3RyaW5nIGNvbXA7CisgICAgICAgIHN1YnN0cmluZyA9IHN0ZDo6c3RyaW5nKGdFbnYtPmdldENvbXBvbmVudCgpKTsKKyAgICAgICAgLyogVE9ETzogYmV0dGVyIGFwcHJvYWNoIHRvIGZpbmQgdGhlIGNvbXBvbmVudCAqLworICAgICAgICAvKiAiYzIuYW5kcm9pZC4iID0+IDExdGggcG9zaXRpb24gKi8KKyAgICAgICAgc2l6ZV90IHBvcyA9IDExOworICAgICAgICBzaXplX3QgbGVuID0gc3Vic3RyaW5nLmZpbmQoIi5kZWNvZGVyIiwgcG9zKTsKKyAgICAgICAgY29tcCA9IHN1YnN0cmluZy5zdWJzdHIocG9zLCBsZW4gLSBwb3MpOworCisgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwga051bVN0cmluZ1RvTmFtZTsgKytpKSB7CisgICAgICAgICAgICBpZiAoIXN0cmNhc2VjbXAoY29tcC5jX3N0cigpLCBrU3RyaW5nVG9OYW1lW2ldLk5hbWUpKSB7CisgICAgICAgICAgICAgICAgbUNvbXBOYW1lID0ga1N0cmluZ1RvTmFtZVtpXS5Db21wTmFtZTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBtRW9zID0gZmFsc2U7CisgICAgICAgIG1GcmFtZXNSZWNlaXZlZCA9IDA7CisgICAgICAgIG1UaW1lc3RhbXBVcyA9IDB1OworICAgICAgICBtVGltZXN0YW1wRGV2VGVzdCA9IGZhbHNlOworICAgICAgICBpZiAobUNvbXBOYW1lID09IHVua25vd25fY29tcCkgbURpc2FibGVUZXN0ID0gdHJ1ZTsKKyAgICAgICAgaWYgKG1EaXNhYmxlVGVzdCkgc3RkOjpjb3V0IDw8ICJbICAgV0FSTiAgIF0gVGVzdCBEaXNhYmxlZCBcbiI7CisgICAgfQorCisgICAgdmlydHVhbCB2b2lkIFRlYXJEb3duKCkgb3ZlcnJpZGUgeworICAgICAgICBpZiAobUNvbXBvbmVudCAhPSBudWxscHRyKSB7CisgICAgICAgICAgICBpZiAoOjp0ZXN0aW5nOjpUZXN0OjpIYXNGYXRhbEZhaWx1cmUoKSkgcmV0dXJuOworICAgICAgICAgICAgbUNvbXBvbmVudC0+cmVsZWFzZSgpOworICAgICAgICAgICAgbUNvbXBvbmVudCA9IG51bGxwdHI7CisgICAgICAgIH0KKyAgICAgICAgU3VwZXI6OlRlYXJEb3duKCk7CisgICAgfQorCisgICAgLy8gY2FsbGJhY2sgZnVuY3Rpb24gdG8gcHJvY2VzcyBvbldvcmtEb25lIHJlY2VpdmVkIGJ5IExpc3RlbmVyCisgICAgdm9pZCBoYW5kbGVXb3JrRG9uZShzdGQ6Omxpc3Q8c3RkOjp1bmlxdWVfcHRyPEMyV29yaz4+JiB3b3JrSXRlbXMpIHsKKyAgICAgICAgZm9yIChzdGQ6OnVuaXF1ZV9wdHI8QzJXb3JrPiYgd29yayA6IHdvcmtJdGVtcykgeworICAgICAgICAgICAgLy8gaGFuZGxlIGNvbmZpZ3VyYXRpb24gY2hhbmdlcyBpbiB3b3JrIGRvbmUKKyAgICAgICAgICAgIGlmICghd29yay0+d29ya2xldHMuZW1wdHkoKSAmJgorICAgICAgICAgICAgICAgICh3b3JrLT53b3JrbGV0cy5mcm9udCgpLT5vdXRwdXQuY29uZmlnVXBkYXRlLnNpemUoKSAhPSAwKSkgeworICAgICAgICAgICAgICAgIEFMT0dWKCJDb25maWcgVXBkYXRlIik7CisgICAgICAgICAgICAgICAgc3RkOjp2ZWN0b3I8c3RkOjp1bmlxdWVfcHRyPEMyUGFyYW0+PiB1cGRhdGVzID0KKyAgICAgICAgICAgICAgICAgICAgc3RkOjptb3ZlKHdvcmstPndvcmtsZXRzLmZyb250KCktPm91dHB1dC5jb25maWdVcGRhdGUpOworICAgICAgICAgICAgICAgIHN0ZDo6dmVjdG9yPEMyUGFyYW0qPiBjb25maWdQYXJhbTsKKyAgICAgICAgICAgICAgICBzdGQ6OnZlY3RvcjxzdGQ6OnVuaXF1ZV9wdHI8QzJTZXR0aW5nUmVzdWx0Pj4gZmFpbHVyZXM7CisgICAgICAgICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCB1cGRhdGVzLnNpemUoKTsgKytpKSB7CisgICAgICAgICAgICAgICAgICAgIEMyUGFyYW0qIHBhcmFtID0gdXBkYXRlc1tpXS5nZXQoKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKHBhcmFtLT5pbmRleCgpID09CisgICAgICAgICAgICAgICAgICAgICAgICBDMlZpZGVvU2l6ZVN0cmVhbUluZm86Om91dHB1dDo6UEFSQU1fVFlQRSkgeworICAgICAgICAgICAgICAgICAgICAgICAgQUxPR1YoIlJlY2VpdmVkIEMyVmlkZW9TaXplU3RyZWFtSW5mbyIpOworICAgICAgICAgICAgICAgICAgICAgICAgY29uZmlnUGFyYW0ucHVzaF9iYWNrKHBhcmFtKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBtQ29tcG9uZW50LT5jb25maWcoY29uZmlnUGFyYW0sIEMyX0RPTlRfQkxPQ0ssICZmYWlsdXJlcyk7CisgICAgICAgICAgICAgICAgQVNTRVJUX0VRKGZhaWx1cmVzLnNpemUoKSwgMHUpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBtRnJhbWVzUmVjZWl2ZWQrKzsKKyAgICAgICAgICAgIG1Fb3MgPSAod29yay0+d29ya2xldHMuZnJvbnQoKS0+b3V0cHV0LmZsYWdzICYKKyAgICAgICAgICAgICAgICAgICAgQzJGcmFtZURhdGE6OkZMQUdfRU5EX09GX1NUUkVBTSkgIT0gMDsKKyAgICAgICAgICAgIGF1dG8gZnJhbWVJbmRleEl0ID0KKyAgICAgICAgICAgICAgICBzdGQ6OmZpbmQobUZsdXNoZWRJbmRpY2VzLmJlZ2luKCksIG1GbHVzaGVkSW5kaWNlcy5lbmQoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgd29yay0+aW5wdXQub3JkaW5hbC5mcmFtZUluZGV4LnBlZWt1KCkpOworCisgICAgICAgICAgICAvLyBGb3IgZGVjb2RlciBjb21wb25lbnRzIGN1cnJlbnQgdGltZXN0YW1wIGFsd2F5cyBleGNlZWRzCisgICAgICAgICAgICAvLyBwcmV2aW91cyB0aW1lc3RhbXAKKyAgICAgICAgICAgIHR5cGVkZWYgc3RkOjp1bmlxdWVfbG9jazxzdGQ6Om11dGV4PiBVTG9jazsKKyAgICAgICAgICAgIGJvb2wgY29kZWNDb25maWcgPSAoKHdvcmstPndvcmtsZXRzLmZyb250KCktPm91dHB1dC5mbGFncyAmCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDMkZyYW1lRGF0YTo6RkxBR19DT0RFQ19DT05GSUcpICE9IDApOworICAgICAgICAgICAgaWYgKCFjb2RlY0NvbmZpZyAmJgorICAgICAgICAgICAgICAgICF3b3JrLT53b3JrbGV0cy5mcm9udCgpLT5vdXRwdXQuYnVmZmVycy5lbXB0eSgpKSB7CisgICAgICAgICAgICAgICAgRVhQRUNUX0dFKAorICAgICAgICAgICAgICAgICAgICAod29yay0+d29ya2xldHMuZnJvbnQoKS0+b3V0cHV0Lm9yZGluYWwudGltZXN0YW1wLnBlZWt1KCkpLAorICAgICAgICAgICAgICAgICAgICBtVGltZXN0YW1wVXMpOworICAgICAgICAgICAgICAgIG1UaW1lc3RhbXBVcyA9CisgICAgICAgICAgICAgICAgICAgIHdvcmstPndvcmtsZXRzLmZyb250KCktPm91dHB1dC5vcmRpbmFsLnRpbWVzdGFtcC5wZWVrdSgpOworCisgICAgICAgICAgICAgICAgVUxvY2sgbChtUXVldWVMb2NrKTsKKyAgICAgICAgICAgICAgICBpZiAobVRpbWVzdGFtcERldlRlc3QpIHsKKyAgICAgICAgICAgICAgICAgICAgYm9vbCB0c0hpdCA9IGZhbHNlOworICAgICAgICAgICAgICAgICAgICBzdGQ6Omxpc3Q8dWludDY0X3Q+OjppdGVyYXRvciBpdCA9IG1UaW1lc3RhbXBVc2xpc3QuYmVnaW4oKTsKKyAgICAgICAgICAgICAgICAgICAgd2hpbGUgKGl0ICE9IG1UaW1lc3RhbXBVc2xpc3QuZW5kKCkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICgqaXQgPT0gbVRpbWVzdGFtcFVzKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbVRpbWVzdGFtcFVzbGlzdC5lcmFzZShpdCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHNIaXQgPSB0cnVlOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgaXQrKzsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBpZiAodHNIaXQgPT0gZmFsc2UpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtVGltZXN0YW1wVXNsaXN0LmVtcHR5KCkgPT0gZmFsc2UpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBFWFBFQ1RfRVEodHNIaXQsIHRydWUpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDw8ICJUaW1lU3RhbXAgbm90IHJlY29nbml6ZWQiOworICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGQ6OmNvdXQgPDwgIlsgICBJTkZPICAgXSBSZWNlaXZlZCBub24temVybyAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJvdXRwdXQgLyBUaW1lU3RhbXAgbm90IHJlY29nbml6ZWQgXG4iOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorCisgICAgICAgICAgICB3b3JrLT5pbnB1dC5idWZmZXJzLmNsZWFyKCk7CisgICAgICAgICAgICB3b3JrLT53b3JrbGV0cy5jbGVhcigpOworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIFVMb2NrIGwobVF1ZXVlTG9jayk7CisgICAgICAgICAgICAgICAgbVdvcmtRdWV1ZS5wdXNoX2JhY2soc3RkOjptb3ZlKHdvcmspKTsKKyAgICAgICAgICAgICAgICBpZiAoIW1GbHVzaGVkSW5kaWNlcy5lbXB0eSgpKSB7CisgICAgICAgICAgICAgICAgICAgIG1GbHVzaGVkSW5kaWNlcy5lcmFzZShmcmFtZUluZGV4SXQpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBtUXVldWVDb25kaXRpb24ubm90aWZ5X2FsbCgpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCisgICAgZW51bSBzdGFuZGFyZENvbXAgeworICAgICAgICBoMjYzLAorICAgICAgICBhdmMsCisgICAgICAgIG1wZWcyLAorICAgICAgICBtcGVnNCwKKyAgICAgICAgaGV2YywKKyAgICAgICAgdnA4LAorICAgICAgICB2cDksCisgICAgICAgIHVua25vd25fY29tcCwKKyAgICB9OworCisgICAgYm9vbCBtRW9zOworICAgIGJvb2wgbURpc2FibGVUZXN0OworICAgIGJvb2wgbVRpbWVzdGFtcERldlRlc3Q7CisgICAgdWludDY0X3QgbVRpbWVzdGFtcFVzOworICAgIHN0ZDo6bGlzdDx1aW50NjRfdD4gbVRpbWVzdGFtcFVzbGlzdDsKKyAgICBzdGQ6Omxpc3Q8dWludDY0X3Q+IG1GbHVzaGVkSW5kaWNlczsKKyAgICBzdGFuZGFyZENvbXAgbUNvbXBOYW1lOworICAgIHVpbnQzMl90IG1GcmFtZXNSZWNlaXZlZDsKKyAgICBDMkJsb2NrUG9vbDo6bG9jYWxfaWRfdCBtQmxvY2tQb29sSWQ7CisgICAgc3RkOjpzaGFyZWRfcHRyPEMyQmxvY2tQb29sPiBtTGluZWFyUG9vbDsKKyAgICBzdGQ6OnNoYXJlZF9wdHI8QzJBbGxvY2F0b3I+IG1MaW5lYXJBbGxvY2F0b3I7CisKKyAgICBzdGQ6Om11dGV4IG1RdWV1ZUxvY2s7CisgICAgc3RkOjpjb25kaXRpb25fdmFyaWFibGUgbVF1ZXVlQ29uZGl0aW9uOworICAgIHN0ZDo6bGlzdDxzdGQ6OnVuaXF1ZV9wdHI8QzJXb3JrPj4gbVdvcmtRdWV1ZTsKKworICAgIHN0ZDo6c2hhcmVkX3B0cjxhbmRyb2lkOjpDb2RlYzJDbGllbnQ+IG1DbGllbnQ7CisgICAgc3RkOjpzaGFyZWRfcHRyPGFuZHJvaWQ6OkNvZGVjMkNsaWVudDo6TGlzdGVuZXI+IG1MaXN0ZW5lcjsKKyAgICBzdGQ6OnNoYXJlZF9wdHI8YW5kcm9pZDo6Q29kZWMyQ2xpZW50OjpDb21wb25lbnQ+IG1Db21wb25lbnQ7CisKKyAgIHByb3RlY3RlZDoKKyAgICBzdGF0aWMgdm9pZCBkZXNjcmlwdGlvbihjb25zdCBzdGQ6OnN0cmluZyYgZGVzY3JpcHRpb24pIHsKKyAgICAgICAgUmVjb3JkUHJvcGVydHkoImRlc2NyaXB0aW9uIiwgZGVzY3JpcHRpb24pOworICAgIH0KK307CisKK3ZvaWQgdmFsaWRhdGVDb21wb25lbnQoCisgICAgY29uc3Qgc3RkOjpzaGFyZWRfcHRyPGFuZHJvaWQ6OkNvZGVjMkNsaWVudDo6Q29tcG9uZW50PiYgY29tcG9uZW50LAorICAgIENvZGVjMlZpZGVvRGVjSGlkbFRlc3Q6OnN0YW5kYXJkQ29tcCBjb21wTmFtZSwgYm9vbCYgZGlzYWJsZVRlc3QpIHsKKyAgICAvLyBWYWxpZGF0ZSBpdHMgYSBDMiBDb21wb25lbnQKKyAgICBpZiAoY29tcG9uZW50LT5nZXROYW1lKCkuZmluZCgiYzIiKSA9PSBzdGQ6OnN0cmluZzo6bnBvcykgeworICAgICAgICBBTE9HRSgiTm90IGEgYzIgY29tcG9uZW50Iik7CisgICAgICAgIGRpc2FibGVUZXN0ID0gdHJ1ZTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIC8vIFZhbGlkYXRlIGl0cyBub3QgYW4gZW5jb2RlciBhbmQgdGhlIGNvbXBvbmVudCB0byBiZSB0ZXN0ZWQgaXMgdmlkZW8KKyAgICBpZiAoY29tcG9uZW50LT5nZXROYW1lKCkuZmluZCgiZW5jb2RlciIpICE9IHN0ZDo6c3RyaW5nOjpucG9zKSB7CisgICAgICAgIEFMT0dFKCJFeHBlY3RlZCBEZWNvZGVyLCBnaXZlbiBFbmNvZGVyIik7CisgICAgICAgIGRpc2FibGVUZXN0ID0gdHJ1ZTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBzdGQ6OnZlY3RvcjxzdGQ6OnVuaXF1ZV9wdHI8QzJQYXJhbT4+IHF1ZXJpZWQ7CisgICAgYzJfc3RhdHVzX3QgYzJlcnIgPQorICAgICAgICBjb21wb25lbnQtPnF1ZXJ5KHt9LCB7QzJQb3J0TWVkaWFUeXBlU2V0dGluZzo6aW5wdXQ6OlBBUkFNX1RZUEV9LAorICAgICAgICAgICAgICAgICAgICAgICAgIEMyX0RPTlRfQkxPQ0ssICZxdWVyaWVkKTsKKyAgICBpZiAoYzJlcnIgIT0gQzJfT0sgJiYgcXVlcmllZC5zaXplKCkgPT0gMCkgeworICAgICAgICBBTE9HRSgiUXVlcnkgbWVkaWEgdHlwZSBmYWlsZWQgPT4gJWQiLCBjMmVycik7CisgICAgfSBlbHNlIHsKKyAgICAgICAgc3RkOjpzdHJpbmcgaW5wdXREb21haW4gPQorICAgICAgICAgICAgKChDMlN0cmVhbU1lZGlhVHlwZVNldHRpbmc6OmlucHV0KilxdWVyaWVkWzBdLmdldCgpKS0+bS52YWx1ZTsKKyAgICAgICAgaWYgKGlucHV0RG9tYWluLmZpbmQoInZpZGVvLyIpID09IHN0ZDo6c3RyaW5nOjpucG9zKSB7CisgICAgICAgICAgICBBTE9HRSgiRXhwZWN0ZWQgVmlkZW8gQ29tcG9uZW50Iik7CisgICAgICAgICAgICBkaXNhYmxlVGVzdCA9IHRydWU7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvLyBWYWxpZGF0ZXMgY29tcG9uZW50IG5hbWUKKyAgICBpZiAoY29tcE5hbWUgPT0gQ29kZWMyVmlkZW9EZWNIaWRsVGVzdDo6dW5rbm93bl9jb21wKSB7CisgICAgICAgIEFMT0dFKCJDb21wb25lbnQgSW5WYWxpZCIpOworICAgICAgICBkaXNhYmxlVGVzdCA9IHRydWU7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgQUxPR1YoIkNvbXBvbmVudCBWYWxpZCIpOworfQorCisvLyBudW1iZXIgb2YgZWxlbWVudGFyeSBzdHJlYW1zIHBlciBjb21wb25lbnQKKyNkZWZpbmUgU1RSRUFNX0NPVU5UIDIKKy8vIExvb2tVcFRhYmxlIG9mIGNsaXBzIGFuZCBtZXRhZGF0YSBmb3IgY29tcG9uZW50IHRlc3RpbmcKK3ZvaWQgR2V0VVJMRm9yQ29tcG9uZW50KENvZGVjMlZpZGVvRGVjSGlkbFRlc3Q6OnN0YW5kYXJkQ29tcCBjb21wLCBjaGFyKiBtVVJMLAorICAgICAgICAgICAgICAgICAgICAgICAgY2hhciogaW5mbywgc2l6ZV90IHN0cmVhbUluZGV4ID0gMSkgeworICAgIHN0cnVjdCBDb21wVG9VUkwgeworICAgICAgICBDb2RlYzJWaWRlb0RlY0hpZGxUZXN0OjpzdGFuZGFyZENvbXAgY29tcDsKKyAgICAgICAgY29uc3QgY2hhciBtVVJMW1NUUkVBTV9DT1VOVF1bNTEyXTsKKyAgICAgICAgY29uc3QgY2hhciBpbmZvW1NUUkVBTV9DT1VOVF1bNTEyXTsKKyAgICB9OworICAgIEFTU0VSVF9UUlVFKHN0cmVhbUluZGV4IDwgU1RSRUFNX0NPVU5UKTsKKworICAgIHN0YXRpYyBjb25zdCBDb21wVG9VUkwga0NvbXBUb1VSTFtdID0geworICAgICAgICB7Q29kZWMyVmlkZW9EZWNIaWRsVGVzdDo6c3RhbmRhcmRDb21wOjphdmMsCisgICAgICAgICB7ImJiYl9hdmNfMTc2eDE0NF8zMDBrYnBzXzYwZnBzLmgyNjQiLAorICAgICAgICAgICJiYmJfYXZjXzY0MHgzNjBfNzY4a2Jwc18zMGZwcy5oMjY0In0sCisgICAgICAgICB7ImJiYl9hdmNfMTc2eDE0NF8zMDBrYnBzXzYwZnBzLmluZm8iLAorICAgICAgICAgICJiYmJfYXZjXzY0MHgzNjBfNzY4a2Jwc18zMGZwcy5pbmZvIn19LAorICAgICAgICB7Q29kZWMyVmlkZW9EZWNIaWRsVGVzdDo6c3RhbmRhcmRDb21wOjpoZXZjLAorICAgICAgICAgeyJiYmJfaGV2Y18xNzZ4MTQ0XzE3NmticHNfNjBmcHMuaGV2YyIsCisgICAgICAgICAgImJiYl9oZXZjXzY0MHgzNjBfMTYwMGticHNfMzBmcHMuaGV2YyJ9LAorICAgICAgICAgeyJiYmJfaGV2Y18xNzZ4MTQ0XzE3NmticHNfNjBmcHMuaW5mbyIsCisgICAgICAgICAgImJiYl9oZXZjXzY0MHgzNjBfMTYwMGticHNfMzBmcHMuaW5mbyJ9fSwKKyAgICAgICAge0NvZGVjMlZpZGVvRGVjSGlkbFRlc3Q6OnN0YW5kYXJkQ29tcDo6bXBlZzIsCisgICAgICAgICB7ImJiYl9tcGVnMl8xNzZ4MTQ0XzEwNWticHNfMjVmcHMubTJ2IiwKKyAgICAgICAgICAiYmJiX21wZWcyXzM1MngyODhfMW1icHNfNjBmcHMubTJ2In0sCisgICAgICAgICB7ImJiYl9tcGVnMl8xNzZ4MTQ0XzEwNWticHNfMjVmcHMuaW5mbyIsCisgICAgICAgICAgImJiYl9tcGVnMl8zNTJ4Mjg4XzFtYnBzXzYwZnBzLmluZm8ifX0sCisgICAgICAgIHtDb2RlYzJWaWRlb0RlY0hpZGxUZXN0OjpzdGFuZGFyZENvbXA6OmgyNjMsCisgICAgICAgICB7IiIsICJiYmJfaDI2M18zNTJ4Mjg4XzMwMGticHNfMTJmcHMuaDI2MyJ9LAorICAgICAgICAgeyIiLCAiYmJiX2gyNjNfMzUyeDI4OF8zMDBrYnBzXzEyZnBzLmluZm8ifX0sCisgICAgICAgIHtDb2RlYzJWaWRlb0RlY0hpZGxUZXN0OjpzdGFuZGFyZENvbXA6Om1wZWc0LAorICAgICAgICAgeyIiLCAiYmJiX21wZWc0XzM1MngyODhfNTEya2Jwc18zMGZwcy5tNHYifSwKKyAgICAgICAgIHsiIiwgImJiYl9tcGVnNF8zNTJ4Mjg4XzUxMmticHNfMzBmcHMuaW5mbyJ9fSwKKyAgICAgICAge0NvZGVjMlZpZGVvRGVjSGlkbFRlc3Q6OnN0YW5kYXJkQ29tcDo6dnA4LAorICAgICAgICAgeyJiYmJfdnA4XzE3NngxNDRfMjQwa2Jwc182MGZwcy52cDgiLAorICAgICAgICAgICJiYmJfdnA4XzY0MHgzNjBfMm1icHNfMzBmcHMudnA4In0sCisgICAgICAgICB7ImJiYl92cDhfMTc2eDE0NF8yNDBrYnBzXzYwZnBzLmluZm8iLAorICAgICAgICAgICJiYmJfdnA4XzY0MHgzNjBfMm1icHNfMzBmcHMuaW5mbyJ9fSwKKyAgICAgICAge0NvZGVjMlZpZGVvRGVjSGlkbFRlc3Q6OnN0YW5kYXJkQ29tcDo6dnA5LAorICAgICAgICAgeyJiYmJfdnA5XzE3NngxNDRfMjg1a2Jwc182MGZwcy52cDkiLAorICAgICAgICAgICJiYmJfdnA5XzY0MHgzNjBfMTYwMGticHNfMzBmcHMudnA5In0sCisgICAgICAgICB7ImJiYl92cDlfMTc2eDE0NF8yODVrYnBzXzYwZnBzLmluZm8iLAorICAgICAgICAgICJiYmJfdnA5XzY0MHgzNjBfMTYwMGticHNfMzBmcHMuaW5mbyJ9fSwKKyAgICB9OworCisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBzaXplb2Yoa0NvbXBUb1VSTCkgLyBzaXplb2Yoa0NvbXBUb1VSTFswXSk7ICsraSkgeworICAgICAgICBpZiAoa0NvbXBUb1VSTFtpXS5jb21wID09IGNvbXApIHsKKyAgICAgICAgICAgIHN0cmNhdChtVVJMLCBrQ29tcFRvVVJMW2ldLm1VUkxbc3RyZWFtSW5kZXhdKTsKKyAgICAgICAgICAgIHN0cmNhdChpbmZvLCBrQ29tcFRvVVJMW2ldLmluZm9bc3RyZWFtSW5kZXhdKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgIH0KK30KKwordm9pZCBkZWNvZGVORnJhbWVzKGNvbnN0IHN0ZDo6c2hhcmVkX3B0cjxhbmRyb2lkOjpDb2RlYzJDbGllbnQ6OkNvbXBvbmVudD4gJmNvbXBvbmVudCwKKyAgICAgICAgICAgICAgICAgICBzdGQ6Om11dGV4ICZxdWV1ZUxvY2ssIHN0ZDo6Y29uZGl0aW9uX3ZhcmlhYmxlICZxdWV1ZUNvbmRpdGlvbiwKKyAgICAgICAgICAgICAgICAgICBzdGQ6Omxpc3Q8c3RkOjp1bmlxdWVfcHRyPEMyV29yaz4+ICZ3b3JrUXVldWUsCisgICAgICAgICAgICAgICAgICAgc3RkOjpsaXN0PHVpbnQ2NF90PiAmZmx1c2hlZEluZGljZXMsCisgICAgICAgICAgICAgICAgICAgc3RkOjpzaGFyZWRfcHRyPEMyQmxvY2tQb29sPiAmbGluZWFyUG9vbCwKKyAgICAgICAgICAgICAgICAgICBzdGQ6Omlmc3RyZWFtJiBlbGVTdHJlYW0sCisgICAgICAgICAgICAgICAgICAgYW5kcm9pZDo6VmVjdG9yPEZyYW1lSW5mbz4qIEluZm8sCisgICAgICAgICAgICAgICAgICAgaW50IG9mZnNldCwgaW50IHJhbmdlLCBib29sIHNpZ25hbEVPUyA9IHRydWUpIHsKKyAgICB0eXBlZGVmIHN0ZDo6dW5pcXVlX2xvY2s8c3RkOjptdXRleD4gVUxvY2s7CisgICAgaW50IGZyYW1lSUQgPSBvZmZzZXQ7CisgICAgaW50IG1heFJldHJ5ID0gMDsKKyAgICB3aGlsZSAoMSkgeworICAgICAgICBpZiAoZnJhbWVJRCA9PSAoaW50KUluZm8tPnNpemUoKSB8fCBmcmFtZUlEID09IChvZmZzZXQgKyByYW5nZSkpIGJyZWFrOworICAgICAgICB1aW50MzJfdCBmbGFncyA9IDA7CisgICAgICAgIHN0ZDo6dW5pcXVlX3B0cjxDMldvcms+IHdvcms7CisgICAgICAgIC8vIFByZXBhcmUgQzJXb3JrCisgICAgICAgIHdoaWxlICghd29yayAmJiAobWF4UmV0cnkgPCBNQVhfUkVUUlkpKSB7CisgICAgICAgICAgICBVTG9jayBsKHF1ZXVlTG9jayk7CisgICAgICAgICAgICBpZiAoIXdvcmtRdWV1ZS5lbXB0eSgpKSB7CisgICAgICAgICAgICAgICAgd29yay5zd2FwKHdvcmtRdWV1ZS5mcm9udCgpKTsKKyAgICAgICAgICAgICAgICB3b3JrUXVldWUucG9wX2Zyb250KCk7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIHF1ZXVlQ29uZGl0aW9uLndhaXRfZm9yKGwsIFRJTUVfT1VUKTsKKyAgICAgICAgICAgICAgICBtYXhSZXRyeSsrOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGlmICghd29yayAmJiAobWF4UmV0cnkgPj0gTUFYX1JFVFJZKSkgeworICAgICAgICAgICAgQVNTRVJUX1RSVUUoZmFsc2UpIDw8ICJXYWl0IGZvciBnZW5lcmF0aW5nIEMyV29yayBleGNlZWRlZCB0aW1lb3V0IjsKKyAgICAgICAgfQorICAgICAgICBpbnQ2NF90IHRpbWVzdGFtcCA9ICgqSW5mbylbZnJhbWVJRF0udGltZXN0YW1wOworICAgICAgICBpZiAoKCpJbmZvKVtmcmFtZUlEXS5mbGFncykgZmxhZ3MgPSAoMSA8PCAoKCpJbmZvKVtmcmFtZUlEXS5mbGFncyAtIDEpKTsKKyAgICAgICAgaWYgKHNpZ25hbEVPUyAmJiAoKGZyYW1lSUQgPT0gKGludClJbmZvLT5zaXplKCkgLSAxKSB8fAorICAgICAgICAgICAgICAgICAgICAgICAgICAoZnJhbWVJRCA9PSAob2Zmc2V0ICsgcmFuZ2UgLSAxKSkpKQorICAgICAgICAgICAgZmxhZ3MgfD0gQzJGcmFtZURhdGE6OkZMQUdfRU5EX09GX1NUUkVBTTsKKworICAgICAgICB3b3JrLT5pbnB1dC5mbGFncyA9IChDMkZyYW1lRGF0YTo6ZmxhZ3NfdClmbGFnczsKKyAgICAgICAgd29yay0+aW5wdXQub3JkaW5hbC50aW1lc3RhbXAgPSB0aW1lc3RhbXA7CisgICAgICAgIHdvcmstPmlucHV0Lm9yZGluYWwuZnJhbWVJbmRleCA9IGZyYW1lSUQ7CisgICAgICAgIHsKKyAgICAgICAgICAgIFVMb2NrIGwocXVldWVMb2NrKTsKKyAgICAgICAgICAgIGZsdXNoZWRJbmRpY2VzLmVtcGxhY2VfYmFjayhmcmFtZUlEKTsKKyAgICAgICAgfQorCisgICAgICAgIGludCBzaXplID0gKCpJbmZvKVtmcmFtZUlEXS5ieXRlc0NvdW50OworICAgICAgICBjaGFyKiBkYXRhID0gKGNoYXIqKW1hbGxvYyhzaXplKTsKKworICAgICAgICBlbGVTdHJlYW0ucmVhZChkYXRhLCBzaXplKTsKKyAgICAgICAgQVNTRVJUX0VRKGVsZVN0cmVhbS5nY291bnQoKSwgc2l6ZSk7CisKKyAgICAgICAgc3RkOjpzaGFyZWRfcHRyPEMyTGluZWFyQmxvY2s+IGJsb2NrOworICAgICAgICBBU1NFUlRfRVEoQzJfT0ssCisgICAgICAgICAgICAgICAgICBsaW5lYXJQb29sLT5mZXRjaExpbmVhckJsb2NrKAorICAgICAgICAgICAgICAgICAgICAgIHNpemUsIHtDMk1lbW9yeVVzYWdlOjpDUFVfUkVBRCwgQzJNZW1vcnlVc2FnZTo6Q1BVX1dSSVRFfSwKKyAgICAgICAgICAgICAgICAgICAgICAmYmxvY2spKTsKKyAgICAgICAgQVNTRVJUX1RSVUUoYmxvY2spOworCisgICAgICAgIC8vIFdyaXRlIFZpZXcKKyAgICAgICAgQzJXcml0ZVZpZXcgdmlldyA9IGJsb2NrLT5tYXAoKS5nZXQoKTsKKyAgICAgICAgaWYgKHZpZXcuZXJyb3IoKSAhPSBDMl9PSykgeworICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICJDMkxpbmVhckJsb2NrOjptYXAoKSBmYWlsZWQgOiAlZCIsIHZpZXcuZXJyb3IoKSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBBU1NFUlRfRVEoKHNpemVfdClzaXplLCB2aWV3LmNhcGFjaXR5KCkpOworICAgICAgICBBU1NFUlRfRVEoMHUsIHZpZXcub2Zmc2V0KCkpOworICAgICAgICBBU1NFUlRfRVEoKHNpemVfdClzaXplLCB2aWV3LnNpemUoKSk7CisKKyAgICAgICAgbWVtY3B5KHZpZXcuYmFzZSgpLCBkYXRhLCBzaXplKTsKKworICAgICAgICB3b3JrLT5pbnB1dC5idWZmZXJzLmNsZWFyKCk7CisgICAgICAgIHdvcmstPmlucHV0LmJ1ZmZlcnMuZW1wbGFjZV9iYWNrKG5ldyBMaW5lYXJCdWZmZXIoYmxvY2spKTsKKyAgICAgICAgd29yay0+d29ya2xldHMuY2xlYXIoKTsKKyAgICAgICAgd29yay0+d29ya2xldHMuZW1wbGFjZV9iYWNrKG5ldyBDMldvcmtsZXQpOworICAgICAgICBmcmVlKGRhdGEpOworCisgICAgICAgIHN0ZDo6bGlzdDxzdGQ6OnVuaXF1ZV9wdHI8QzJXb3JrPj4gaXRlbXM7CisgICAgICAgIGl0ZW1zLnB1c2hfYmFjayhzdGQ6Om1vdmUod29yaykpOworCisgICAgICAgIC8vIERPIFRIRSBERUNPRElORworICAgICAgICBBU1NFUlRfRVEoY29tcG9uZW50LT5xdWV1ZSgmaXRlbXMpLCBDMl9PSyk7CisgICAgICAgIEFMT0dWKCJGcmFtZSAjJWQgc2l6ZSA9ICVkIHF1ZXVlZCIsIGZyYW1lSUQsIHNpemUpOworICAgICAgICBmcmFtZUlEKys7CisgICAgICAgIG1heFJldHJ5ID0gMDsKKyAgICB9Cit9CisKK3ZvaWQgd2FpdE9uSW5wdXRDb25zdW1wdGlvbihzdGQ6Om11dGV4JiBxdWV1ZUxvY2ssCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RkOjpjb25kaXRpb25fdmFyaWFibGUmIHF1ZXVlQ29uZGl0aW9uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZDo6bGlzdDxzdGQ6OnVuaXF1ZV9wdHI8QzJXb3JrPj4mIHdvcmtRdWV1ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgYnVmZmVyQ291bnQgPSBNQVhfSU5QVVRfQlVGRkVSUykgeworICAgIHR5cGVkZWYgc3RkOjp1bmlxdWVfbG9jazxzdGQ6Om11dGV4PiBVTG9jazsKKyAgICB1aW50MzJfdCBxdWV1ZVNpemU7CisgICAgdWludDMyX3QgbWF4UmV0cnkgPSAwOworICAgIHsKKyAgICAgICAgVUxvY2sgbChxdWV1ZUxvY2spOworICAgICAgICBxdWV1ZVNpemUgPSB3b3JrUXVldWUuc2l6ZSgpOworICAgIH0KKyAgICB3aGlsZSAoKG1heFJldHJ5IDwgTUFYX1JFVFJZKSAmJiAocXVldWVTaXplIDwgYnVmZmVyQ291bnQpKSB7CisgICAgICAgIFVMb2NrIGwocXVldWVMb2NrKTsKKyAgICAgICAgaWYgKHF1ZXVlU2l6ZSAhPSB3b3JrUXVldWUuc2l6ZSgpKSB7CisgICAgICAgICAgICBxdWV1ZVNpemUgPSB3b3JrUXVldWUuc2l6ZSgpOworICAgICAgICAgICAgbWF4UmV0cnkgPSAwOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgcXVldWVDb25kaXRpb24ud2FpdF9mb3IobCwgVElNRV9PVVQpOworICAgICAgICAgICAgbWF4UmV0cnkrKzsKKyAgICAgICAgfQorICAgIH0KK30KKworVEVTVF9GKENvZGVjMlZpZGVvRGVjSGlkbFRlc3QsIHZhbGlkYXRlQ29tcE5hbWUpIHsKKyAgICBpZiAobURpc2FibGVUZXN0KSByZXR1cm47CisgICAgQUxPR1YoIkNoZWNrcyBpZiB0aGUgZ2l2ZW4gY29tcG9uZW50IGlzIGEgdmFsaWQgdmlkZW8gY29tcG9uZW50Iik7CisgICAgdmFsaWRhdGVDb21wb25lbnQobUNvbXBvbmVudCwgbUNvbXBOYW1lLCBtRGlzYWJsZVRlc3QpOworICAgIEFTU0VSVF9FUShtRGlzYWJsZVRlc3QsIGZhbHNlKTsKK30KKworLy8gQml0c3RyZWFtIFRlc3QKK1RFU1RfRihDb2RlYzJWaWRlb0RlY0hpZGxUZXN0LCBEZWNvZGVUZXN0KSB7CisgICAgZGVzY3JpcHRpb24oIkRlY29kZXMgaW5wdXQgZmlsZSIpOworICAgIGlmIChtRGlzYWJsZVRlc3QpIHJldHVybjsKKworICAgIGNoYXIgbVVSTFs1MTJdLCBpbmZvWzUxMl07CisgICAgc3RkOjppZnN0cmVhbSBlbGVTdHJlYW0sIGVsZUluZm87CisKKyAgICBzdHJjcHkobVVSTCwgZ0Vudi0+Z2V0UmVzKCkuY19zdHIoKSk7CisgICAgc3RyY3B5KGluZm8sIGdFbnYtPmdldFJlcygpLmNfc3RyKCkpOworICAgIEdldFVSTEZvckNvbXBvbmVudChtQ29tcE5hbWUsIG1VUkwsIGluZm8pOworCisgICAgZWxlSW5mby5vcGVuKGluZm8pOworICAgIEFTU0VSVF9FUShlbGVJbmZvLmlzX29wZW4oKSwgdHJ1ZSkgPDwgbVVSTCA8PCAiIC0gZmlsZSBub3QgZm91bmQiOworICAgIGFuZHJvaWQ6OlZlY3RvcjxGcmFtZUluZm8+IEluZm87CisgICAgaW50IGJ5dGVzQ291bnQgPSAwOworICAgIHVpbnQzMl90IGZsYWdzID0gMDsKKyAgICB1aW50MzJfdCB0aW1lc3RhbXAgPSAwOworICAgIHdoaWxlICgxKSB7CisgICAgICAgIGlmICghKGVsZUluZm8gPj4gYnl0ZXNDb3VudCkpIGJyZWFrOworICAgICAgICBlbGVJbmZvID4+IGZsYWdzOworICAgICAgICBlbGVJbmZvID4+IHRpbWVzdGFtcDsKKyAgICAgICAgYm9vbCBjb2RlY0NvbmZpZyA9IGZsYWdzID8KKyAgICAgICAgICAgICgoMSA8PCAoZmxhZ3MgLSAxKSkgJiBDMkZyYW1lRGF0YTo6RkxBR19DT0RFQ19DT05GSUcpICE9IDAgOiAwOworICAgICAgICBpZiAobVRpbWVzdGFtcERldlRlc3QgJiYgIWNvZGVjQ29uZmlnKQorICAgICAgICAgICAgbVRpbWVzdGFtcFVzbGlzdC5wdXNoX2JhY2sodGltZXN0YW1wKTsKKyAgICAgICAgSW5mby5wdXNoX2JhY2soe2J5dGVzQ291bnQsIGZsYWdzLCB0aW1lc3RhbXB9KTsKKyAgICB9CisgICAgZWxlSW5mby5jbG9zZSgpOworCisgICAgQVNTRVJUX0VRKG1Db21wb25lbnQtPnN0YXJ0KCksIEMyX09LKTsKKyAgICBBTE9HVigibVVSTCA6ICVzIiwgbVVSTCk7CisgICAgZWxlU3RyZWFtLm9wZW4obVVSTCwgc3RkOjppZnN0cmVhbTo6YmluYXJ5KTsKKyAgICBBU1NFUlRfRVEoZWxlU3RyZWFtLmlzX29wZW4oKSwgdHJ1ZSk7CisgICAgQVNTRVJUX05PX0ZBVEFMX0ZBSUxVUkUoZGVjb2RlTkZyYW1lcygKKyAgICAgICAgbUNvbXBvbmVudCwgbVF1ZXVlTG9jaywgbVF1ZXVlQ29uZGl0aW9uLCBtV29ya1F1ZXVlLCBtRmx1c2hlZEluZGljZXMsCisgICAgICAgIG1MaW5lYXJQb29sLCBlbGVTdHJlYW0sICZJbmZvLCAwLCAoaW50KUluZm8uc2l6ZSgpKSk7CisKKyAgICAvLyBibG9ja2luZyBjYWxsIHRvIGVuc3VyZXMgYXBwbGljYXRpb24gdG8gV2FpdCB0aWxsIGFsbCB0aGUgaW5wdXRzIGFyZQorICAgIC8vIGNvbnN1bWVkCisgICAgaWYgKCFtRW9zKSB7CisgICAgICAgIEFMT0dWKCJXYWl0aW5nIGZvciBpbnB1dCBjb25zdW1wdGlvbiIpOworICAgICAgICBBU1NFUlRfTk9fRkFUQUxfRkFJTFVSRSgKKyAgICAgICAgICAgIHdhaXRPbklucHV0Q29uc3VtcHRpb24obVF1ZXVlTG9jaywgbVF1ZXVlQ29uZGl0aW9uLCBtV29ya1F1ZXVlKSk7CisgICAgfQorCisgICAgZWxlU3RyZWFtLmNsb3NlKCk7CisgICAgaWYgKG1GcmFtZXNSZWNlaXZlZCAhPSBJbmZvLnNpemUoKSkgeworICAgICAgICBBTE9HRSgiSW5wdXQgYnVmZmVyIGNvdW50IGFuZCBPdXRwdXQgYnVmZmVyIGNvdW50IG1pc21hdGNoIik7CisgICAgICAgIEFMT0dWKCJmcmFtZXNSZWNlaXZlZCA6ICVkIGlucHV0RnJhbWVzIDogJXp1IiwgbUZyYW1lc1JlY2VpdmVkLAorICAgICAgICAgICAgICBJbmZvLnNpemUoKSk7CisgICAgICAgIEFTU0VSVF9UUlVFKGZhbHNlKTsKKyAgICB9CisKKyAgICBpZiAobVRpbWVzdGFtcERldlRlc3QpIEVYUEVDVF9FUShtVGltZXN0YW1wVXNsaXN0LmVtcHR5KCksIHRydWUpOworfQorCisKKy8vIEFkYXB0aXZlIFRlc3QKK1RFU1RfRihDb2RlYzJWaWRlb0RlY0hpZGxUZXN0LCBBZGFwdGl2ZURlY29kZVRlc3QpIHsKKyAgICBkZXNjcmlwdGlvbigiQWRhcHRpdmUgRGVjb2RlIFRlc3QiKTsKKyAgICBpZiAobURpc2FibGVUZXN0KSByZXR1cm47CisgICAgaWYgKCEobUNvbXBOYW1lID09IGF2YyB8fCBtQ29tcE5hbWUgPT0gaGV2YyB8fCBtQ29tcE5hbWUgPT0gdnA4IHx8CisgICAgICAgICAgbUNvbXBOYW1lID09IHZwOSB8fCBtQ29tcE5hbWUgPT0gbXBlZzIpKQorICAgICAgICByZXR1cm47CisKKyAgICB0eXBlZGVmIHN0ZDo6dW5pcXVlX2xvY2s8c3RkOjptdXRleD4gVUxvY2s7CisgICAgQVNTRVJUX0VRKG1Db21wb25lbnQtPnN0YXJ0KCksIEMyX09LKTsKKworICAgIG1UaW1lc3RhbXBEZXZUZXN0ID0gdHJ1ZTsKKyAgICB1aW50MzJfdCB0aW1lc3RhbXBPZmZzZXQgPSAwOworICAgIHVpbnQzMl90IG9mZnNldCA9IDA7CisgICAgYW5kcm9pZDo6VmVjdG9yPEZyYW1lSW5mbz4gSW5mbzsKKyAgICBmb3IgKHVpbnQzMl90IGkgPSAwOyBpIDwgU1RSRUFNX0NPVU5UICogMjsgaSsrKSB7CisgICAgICAgIGNoYXIgbVVSTFs1MTJdLCBpbmZvWzUxMl07CisgICAgICAgIHN0ZDo6aWZzdHJlYW0gZWxlU3RyZWFtLCBlbGVJbmZvOworCisgICAgICAgIHN0cmNweShtVVJMLCBnRW52LT5nZXRSZXMoKS5jX3N0cigpKTsKKyAgICAgICAgc3RyY3B5KGluZm8sIGdFbnYtPmdldFJlcygpLmNfc3RyKCkpOworICAgICAgICBHZXRVUkxGb3JDb21wb25lbnQobUNvbXBOYW1lLCBtVVJMLCBpbmZvLCBpICUgU1RSRUFNX0NPVU5UKTsKKworICAgICAgICBlbGVJbmZvLm9wZW4oaW5mbyk7CisgICAgICAgIEFTU0VSVF9FUShlbGVJbmZvLmlzX29wZW4oKSwgdHJ1ZSkgPDwgbVVSTCA8PCAiIC0gZmlsZSBub3QgZm91bmQiOworICAgICAgICBpbnQgYnl0ZXNDb3VudCA9IDA7CisgICAgICAgIHVpbnQzMl90IGZsYWdzID0gMDsKKyAgICAgICAgdWludDMyX3QgdGltZXN0YW1wID0gMDsKKyAgICAgICAgdWludDMyX3QgdGltZXN0YW1wTWF4ID0gMDsKKyAgICAgICAgd2hpbGUgKDEpIHsKKyAgICAgICAgICAgIGlmICghKGVsZUluZm8gPj4gYnl0ZXNDb3VudCkpIGJyZWFrOworICAgICAgICAgICAgZWxlSW5mbyA+PiBmbGFnczsKKyAgICAgICAgICAgIGVsZUluZm8gPj4gdGltZXN0YW1wOworICAgICAgICAgICAgdGltZXN0YW1wICs9IHRpbWVzdGFtcE9mZnNldDsKKyAgICAgICAgICAgIEluZm8ucHVzaF9iYWNrKHtieXRlc0NvdW50LCBmbGFncywgdGltZXN0YW1wfSk7CisgICAgICAgICAgICBib29sIGNvZGVjQ29uZmlnID0gZmxhZ3MgPworICAgICAgICAgICAgICAgICgoMSA8PCAoZmxhZ3MgLSAxKSkgJiBDMkZyYW1lRGF0YTo6RkxBR19DT0RFQ19DT05GSUcpICE9IDAgOiAwOworCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgVUxvY2sgbChtUXVldWVMb2NrKTsKKyAgICAgICAgICAgICAgICBpZiAobVRpbWVzdGFtcERldlRlc3QgJiYgIWNvZGVjQ29uZmlnKQorICAgICAgICAgICAgICAgICAgICBtVGltZXN0YW1wVXNsaXN0LnB1c2hfYmFjayh0aW1lc3RhbXApOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKHRpbWVzdGFtcE1heCA8IHRpbWVzdGFtcCkgdGltZXN0YW1wTWF4ID0gdGltZXN0YW1wOworICAgICAgICB9CisgICAgICAgIHRpbWVzdGFtcE9mZnNldCA9IHRpbWVzdGFtcE1heDsKKyAgICAgICAgZWxlSW5mby5jbG9zZSgpOworCisgICAgICAgIC8vIFJlc2V0IFRvdGFsIGZyYW1lcyBiZWZvcmUgc2Vjb25kIGRlY29kZSBsb29wCisgICAgICAgIC8vIG1GcmFtZXNSZWNlaXZlZCA9IDA7CisgICAgICAgIEFMT0dWKCJtVVJMIDogJXMiLCBtVVJMKTsKKyAgICAgICAgZWxlU3RyZWFtLm9wZW4obVVSTCwgc3RkOjppZnN0cmVhbTo6YmluYXJ5KTsKKyAgICAgICAgQVNTRVJUX0VRKGVsZVN0cmVhbS5pc19vcGVuKCksIHRydWUpOworICAgICAgICBBU1NFUlRfTk9fRkFUQUxfRkFJTFVSRSgKKyAgICAgICAgICAgIGRlY29kZU5GcmFtZXMobUNvbXBvbmVudCwgbVF1ZXVlTG9jaywgbVF1ZXVlQ29uZGl0aW9uLCBtV29ya1F1ZXVlLAorICAgICAgICAgICAgICAgICAgICAgICAgICBtRmx1c2hlZEluZGljZXMsIG1MaW5lYXJQb29sLCBlbGVTdHJlYW0sICZJbmZvLAorICAgICAgICAgICAgICAgICAgICAgICAgICBvZmZzZXQsIChpbnQpKEluZm8uc2l6ZSgpIC0gb2Zmc2V0KSwgZmFsc2UpKTsKKworICAgICAgICBlbGVTdHJlYW0uY2xvc2UoKTsKKyAgICAgICAgb2Zmc2V0ID0gKGludClJbmZvLnNpemUoKTsKKyAgICB9CisKKyAgICAvLyBTZW5kIEVPUworICAgIC8vIFRPRE8gQWRkIGZ1bmN0aW9uIHRvIHNlbmQgRU9TIHdvcmsgaXRlbQorICAgIGludCBtYXhSZXRyeSA9IDA7CisgICAgc3RkOjp1bmlxdWVfcHRyPEMyV29yaz4gd29yazsKKyAgICB3aGlsZSAoIXdvcmsgJiYgKG1heFJldHJ5IDwgTUFYX1JFVFJZKSkgeworICAgICAgICBVTG9jayBsKG1RdWV1ZUxvY2spOworICAgICAgICBpZiAoIW1Xb3JrUXVldWUuZW1wdHkoKSkgeworICAgICAgICAgICAgd29yay5zd2FwKG1Xb3JrUXVldWUuZnJvbnQoKSk7CisgICAgICAgICAgICBtV29ya1F1ZXVlLnBvcF9mcm9udCgpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgbVF1ZXVlQ29uZGl0aW9uLndhaXRfZm9yKGwsIFRJTUVfT1VUKTsKKyAgICAgICAgICAgIG1heFJldHJ5Kys7CisgICAgICAgIH0KKyAgICB9CisgICAgQVNTRVJUX05FKHdvcmssIG51bGxwdHIpOworICAgIHdvcmstPmlucHV0LmZsYWdzID0gKEMyRnJhbWVEYXRhOjpmbGFnc190KUMyRnJhbWVEYXRhOjpGTEFHX0VORF9PRl9TVFJFQU07CisgICAgd29yay0+aW5wdXQub3JkaW5hbC50aW1lc3RhbXAgPSAwOworICAgIHdvcmstPmlucHV0Lm9yZGluYWwuZnJhbWVJbmRleCA9IDA7CisgICAgd29yay0+aW5wdXQuYnVmZmVycy5jbGVhcigpOworICAgIHdvcmstPndvcmtsZXRzLmNsZWFyKCk7CisgICAgd29yay0+d29ya2xldHMuZW1wbGFjZV9iYWNrKG5ldyBDMldvcmtsZXQpOworCisgICAgc3RkOjpsaXN0PHN0ZDo6dW5pcXVlX3B0cjxDMldvcms+PiBpdGVtczsKKyAgICBpdGVtcy5wdXNoX2JhY2soc3RkOjptb3ZlKHdvcmspKTsKKyAgICBBU1NFUlRfRVEobUNvbXBvbmVudC0+cXVldWUoJml0ZW1zKSwgQzJfT0spOworCisgICAgLy8gYmxvY2tpbmcgY2FsbCB0byBlbnN1cmVzIGFwcGxpY2F0aW9uIHRvIFdhaXQgdGlsbCBhbGwgdGhlIGlucHV0cyBhcmUKKyAgICAvLyBjb25zdW1lZAorICAgIEFMT0dWKCJXYWl0aW5nIGZvciBpbnB1dCBjb25zdW1wdGlvbiIpOworICAgIEFTU0VSVF9OT19GQVRBTF9GQUlMVVJFKAorICAgICAgICB3YWl0T25JbnB1dENvbnN1bXB0aW9uKG1RdWV1ZUxvY2ssIG1RdWV1ZUNvbmRpdGlvbiwgbVdvcmtRdWV1ZSkpOworCisgICAgaWYgKG1GcmFtZXNSZWNlaXZlZCAhPSAoKEluZm8uc2l6ZSgpKSArIDEpKSB7CisgICAgICAgIEFMT0dFKCJJbnB1dCBidWZmZXIgY291bnQgYW5kIE91dHB1dCBidWZmZXIgY291bnQgbWlzbWF0Y2giKTsKKyAgICAgICAgQUxPR1YoImZyYW1lc1JlY2VpdmVkIDogJWQgaW5wdXRGcmFtZXMgOiAlenUiLCBtRnJhbWVzUmVjZWl2ZWQsCisgICAgICAgICAgICAgIEluZm8uc2l6ZSgpICsgMSk7CisgICAgICAgIEFTU0VSVF9UUlVFKGZhbHNlKTsKKyAgICB9CisKKyAgICBpZiAobVRpbWVzdGFtcERldlRlc3QpIEVYUEVDVF9FUShtVGltZXN0YW1wVXNsaXN0LmVtcHR5KCksIHRydWUpOworfQorCisvLyB0aHVtYm5haWwgdGVzdAorVEVTVF9GKENvZGVjMlZpZGVvRGVjSGlkbFRlc3QsIFRodW1ibmFpbFRlc3QpIHsKKyAgICBkZXNjcmlwdGlvbigiVGVzdCBSZXF1ZXN0IGZvciB0aHVtYm5haWwiKTsKKyAgICBpZiAobURpc2FibGVUZXN0KSByZXR1cm47CisKKyAgICBjaGFyIG1VUkxbNTEyXSwgaW5mb1s1MTJdOworICAgIHN0ZDo6aWZzdHJlYW0gZWxlU3RyZWFtLCBlbGVJbmZvOworCisgICAgc3RyY3B5KG1VUkwsIGdFbnYtPmdldFJlcygpLmNfc3RyKCkpOworICAgIHN0cmNweShpbmZvLCBnRW52LT5nZXRSZXMoKS5jX3N0cigpKTsKKyAgICBHZXRVUkxGb3JDb21wb25lbnQobUNvbXBOYW1lLCBtVVJMLCBpbmZvKTsKKworICAgIGVsZUluZm8ub3BlbihpbmZvKTsKKyAgICBBU1NFUlRfRVEoZWxlSW5mby5pc19vcGVuKCksIHRydWUpOworICAgIGFuZHJvaWQ6OlZlY3RvcjxGcmFtZUluZm8+IEluZm87CisgICAgaW50IGJ5dGVzQ291bnQgPSAwOworICAgIHVpbnQzMl90IGZsYWdzID0gMDsKKyAgICB1aW50MzJfdCB0aW1lc3RhbXAgPSAwOworICAgIHdoaWxlICgxKSB7CisgICAgICAgIGlmICghKGVsZUluZm8gPj4gYnl0ZXNDb3VudCkpIGJyZWFrOworICAgICAgICBlbGVJbmZvID4+IGZsYWdzOworICAgICAgICBlbGVJbmZvID4+IHRpbWVzdGFtcDsKKyAgICAgICAgSW5mby5wdXNoX2JhY2soe2J5dGVzQ291bnQsIGZsYWdzLCB0aW1lc3RhbXB9KTsKKyAgICB9CisgICAgZWxlSW5mby5jbG9zZSgpOworCisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBNQVhfSVRFUkFUSU9OUzsgaSsrKSB7CisgICAgICAgIEFTU0VSVF9FUShtQ29tcG9uZW50LT5zdGFydCgpLCBDMl9PSyk7CisKKyAgICAgICAgLy8gcmVxdWVzdCBFT1MgZm9yIHRodW1ibmFpbAorICAgICAgICAvLyBzaWduYWwgRU9TIGZsYWcgd2l0aCBsYXN0IGZyYW1lCisgICAgICAgIHNpemVfdCBqID0gLTE7CisgICAgICAgIGRvIHsKKyAgICAgICAgICAgIGorKzsKKyAgICAgICAgICAgIGZsYWdzID0gMDsKKyAgICAgICAgICAgIGlmIChJbmZvW2pdLmZsYWdzKSBmbGFncyA9IDF1IDw8IChJbmZvW2pdLmZsYWdzIC0gMSk7CisKKyAgICAgICAgfSB3aGlsZSAoIShmbGFncyAmIFNZTkNfRlJBTUUpKTsKKyAgICAgICAgZWxlU3RyZWFtLm9wZW4obVVSTCwgc3RkOjppZnN0cmVhbTo6YmluYXJ5KTsKKyAgICAgICAgQVNTRVJUX0VRKGVsZVN0cmVhbS5pc19vcGVuKCksIHRydWUpOworICAgICAgICBBU1NFUlRfTk9fRkFUQUxfRkFJTFVSRShkZWNvZGVORnJhbWVzKAorICAgICAgICAgICAgbUNvbXBvbmVudCwgbVF1ZXVlTG9jaywgbVF1ZXVlQ29uZGl0aW9uLCBtV29ya1F1ZXVlLAorICAgICAgICAgICAgbUZsdXNoZWRJbmRpY2VzLCBtTGluZWFyUG9vbCwgZWxlU3RyZWFtLCAmSW5mbywgMCwgaiArIDEpKTsKKyAgICAgICAgQVNTRVJUX05PX0ZBVEFMX0ZBSUxVUkUoCisgICAgICAgICAgICB3YWl0T25JbnB1dENvbnN1bXB0aW9uKG1RdWV1ZUxvY2ssIG1RdWV1ZUNvbmRpdGlvbiwgbVdvcmtRdWV1ZSkpOworICAgICAgICBlbGVTdHJlYW0uY2xvc2UoKTsKKyAgICAgICAgRVhQRUNUX0dFKG1GcmFtZXNSZWNlaXZlZCwgMVUpOworICAgICAgICBBU1NFUlRfRVEobUVvcywgdHJ1ZSk7CisgICAgICAgIEFTU0VSVF9FUShtQ29tcG9uZW50LT5zdG9wKCksIEMyX09LKTsKKyAgICAgICAgQVNTRVJUX0VRKG1Db21wb25lbnQtPnJlbGVhc2UoKSwgQzJfT0spOworICAgIH0KK30KKworVEVTVF9GKENvZGVjMlZpZGVvRGVjSGlkbFRlc3QsIEVPU1Rlc3QpIHsKKyAgICBkZXNjcmlwdGlvbigiVGVzdCBlbXB0eSBpbnB1dCBidWZmZXIgd2l0aCBFT1MgZmxhZyIpOworICAgIGlmIChtRGlzYWJsZVRlc3QpIHJldHVybjsKKyAgICB0eXBlZGVmIHN0ZDo6dW5pcXVlX2xvY2s8c3RkOjptdXRleD4gVUxvY2s7CisgICAgQVNTRVJUX0VRKG1Db21wb25lbnQtPnN0YXJ0KCksIEMyX09LKTsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8QzJXb3JrPiB3b3JrOworICAgIC8vIFByZXBhcmUgQzJXb3JrCisgICAgeworICAgICAgICBVTG9jayBsKG1RdWV1ZUxvY2spOworICAgICAgICBpZiAoIW1Xb3JrUXVldWUuZW1wdHkoKSkgeworICAgICAgICAgICAgd29yay5zd2FwKG1Xb3JrUXVldWUuZnJvbnQoKSk7CisgICAgICAgICAgICBtV29ya1F1ZXVlLnBvcF9mcm9udCgpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgQVNTRVJUX1RSVUUoZmFsc2UpIDw8ICJtV29ya1F1ZXVlIEVtcHR5IGF0IHRoZSBzdGFydCBvZiB0ZXN0IjsKKyAgICAgICAgfQorICAgIH0KKyAgICBBU1NFUlRfTkUod29yaywgbnVsbHB0cik7CisKKyAgICB3b3JrLT5pbnB1dC5mbGFncyA9IChDMkZyYW1lRGF0YTo6ZmxhZ3NfdClDMkZyYW1lRGF0YTo6RkxBR19FTkRfT0ZfU1RSRUFNOworICAgIHdvcmstPmlucHV0Lm9yZGluYWwudGltZXN0YW1wID0gMDsKKyAgICB3b3JrLT5pbnB1dC5vcmRpbmFsLmZyYW1lSW5kZXggPSAwOworICAgIHdvcmstPmlucHV0LmJ1ZmZlcnMuY2xlYXIoKTsKKyAgICB3b3JrLT53b3JrbGV0cy5jbGVhcigpOworICAgIHdvcmstPndvcmtsZXRzLmVtcGxhY2VfYmFjayhuZXcgQzJXb3JrbGV0KTsKKworICAgIHN0ZDo6bGlzdDxzdGQ6OnVuaXF1ZV9wdHI8QzJXb3JrPj4gaXRlbXM7CisgICAgaXRlbXMucHVzaF9iYWNrKHN0ZDo6bW92ZSh3b3JrKSk7CisgICAgQVNTRVJUX0VRKG1Db21wb25lbnQtPnF1ZXVlKCZpdGVtcyksIEMyX09LKTsKKworICAgIHsKKyAgICAgICAgdHlwZWRlZiBzdGQ6OnVuaXF1ZV9sb2NrPHN0ZDo6bXV0ZXg+IFVMb2NrOworICAgICAgICBVTG9jayBsKG1RdWV1ZUxvY2spOworICAgICAgICBpZiAobVdvcmtRdWV1ZS5zaXplKCkgIT0gTUFYX0lOUFVUX0JVRkZFUlMpIHsKKyAgICAgICAgICAgIG1RdWV1ZUNvbmRpdGlvbi53YWl0X2ZvcihsLCBUSU1FX09VVCk7CisgICAgICAgIH0KKyAgICB9CisgICAgQVNTRVJUX0VRKG1Fb3MsIHRydWUpOworICAgIEFTU0VSVF9FUShtV29ya1F1ZXVlLnNpemUoKSwgKHNpemVfdClNQVhfSU5QVVRfQlVGRkVSUyk7CisgICAgQVNTRVJUX0VRKG1Db21wb25lbnQtPnN0b3AoKSwgQzJfT0spOworfQorCitURVNUX0YoQ29kZWMyVmlkZW9EZWNIaWRsVGVzdCwgRW1wdHlCdWZmZXJUZXN0KSB7CisgICAgZGVzY3JpcHRpb24oIlRlc3RzIGVtcHR5IGlucHV0IGJ1ZmZlciIpOworICAgIGlmIChtRGlzYWJsZVRlc3QpIHJldHVybjsKKyAgICB0eXBlZGVmIHN0ZDo6dW5pcXVlX2xvY2s8c3RkOjptdXRleD4gVUxvY2s7CisgICAgQVNTRVJUX0VRKG1Db21wb25lbnQtPnN0YXJ0KCksIEMyX09LKTsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8QzJXb3JrPiB3b3JrOworICAgIC8vIFByZXBhcmUgQzJXb3JrCisgICAgeworICAgICAgICBVTG9jayBsKG1RdWV1ZUxvY2spOworICAgICAgICBpZiAoIW1Xb3JrUXVldWUuZW1wdHkoKSkgeworICAgICAgICAgICAgd29yay5zd2FwKG1Xb3JrUXVldWUuZnJvbnQoKSk7CisgICAgICAgICAgICBtV29ya1F1ZXVlLnBvcF9mcm9udCgpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgQVNTRVJUX1RSVUUoZmFsc2UpIDw8ICJtV29ya1F1ZXVlIEVtcHR5IGF0IHRoZSBzdGFydCBvZiB0ZXN0IjsKKyAgICAgICAgfQorICAgIH0KKyAgICBBU1NFUlRfTkUod29yaywgbnVsbHB0cik7CisKKyAgICB3b3JrLT5pbnB1dC5mbGFncyA9IChDMkZyYW1lRGF0YTo6ZmxhZ3NfdCkwOworICAgIHdvcmstPmlucHV0Lm9yZGluYWwudGltZXN0YW1wID0gMDsKKyAgICB3b3JrLT5pbnB1dC5vcmRpbmFsLmZyYW1lSW5kZXggPSAwOworICAgIHdvcmstPmlucHV0LmJ1ZmZlcnMuY2xlYXIoKTsKKyAgICB3b3JrLT53b3JrbGV0cy5jbGVhcigpOworICAgIHdvcmstPndvcmtsZXRzLmVtcGxhY2VfYmFjayhuZXcgQzJXb3JrbGV0KTsKKworICAgIHN0ZDo6bGlzdDxzdGQ6OnVuaXF1ZV9wdHI8QzJXb3JrPj4gaXRlbXM7CisgICAgaXRlbXMucHVzaF9iYWNrKHN0ZDo6bW92ZSh3b3JrKSk7CisgICAgQVNTRVJUX0VRKG1Db21wb25lbnQtPnF1ZXVlKCZpdGVtcyksIEMyX09LKTsKKworICAgIHsKKyAgICAgICAgdHlwZWRlZiBzdGQ6OnVuaXF1ZV9sb2NrPHN0ZDo6bXV0ZXg+IFVMb2NrOworICAgICAgICBVTG9jayBsKG1RdWV1ZUxvY2spOworICAgICAgICBpZiAobVdvcmtRdWV1ZS5zaXplKCkgIT0gTUFYX0lOUFVUX0JVRkZFUlMpIHsKKyAgICAgICAgICAgIG1RdWV1ZUNvbmRpdGlvbi53YWl0X2ZvcihsLCBUSU1FX09VVCk7CisgICAgICAgIH0KKyAgICB9CisgICAgQVNTRVJUX0VRKG1Xb3JrUXVldWUuc2l6ZSgpLCAoc2l6ZV90KU1BWF9JTlBVVF9CVUZGRVJTKTsKKyAgICBBU1NFUlRfRVEobUNvbXBvbmVudC0+c3RvcCgpLCBDMl9PSyk7Cit9CisKK1RFU1RfRihDb2RlYzJWaWRlb0RlY0hpZGxUZXN0LCBGbHVzaFRlc3QpIHsKKyAgICBkZXNjcmlwdGlvbigiVGVzdHMgRmx1c2ggY2FsbHMiKTsKKyAgICBpZiAobURpc2FibGVUZXN0KSByZXR1cm47CisgICAgdHlwZWRlZiBzdGQ6OnVuaXF1ZV9sb2NrPHN0ZDo6bXV0ZXg+IFVMb2NrOworICAgIEFTU0VSVF9FUShtQ29tcG9uZW50LT5zdGFydCgpLCBDMl9PSyk7CisgICAgY2hhciBtVVJMWzUxMl0sIGluZm9bNTEyXTsKKyAgICBzdGQ6Omlmc3RyZWFtIGVsZVN0cmVhbSwgZWxlSW5mbzsKKworICAgIHN0cmNweShtVVJMLCBnRW52LT5nZXRSZXMoKS5jX3N0cigpKTsKKyAgICBzdHJjcHkoaW5mbywgZ0Vudi0+Z2V0UmVzKCkuY19zdHIoKSk7CisgICAgR2V0VVJMRm9yQ29tcG9uZW50KG1Db21wTmFtZSwgbVVSTCwgaW5mbyk7CisKKyAgICBlbGVJbmZvLm9wZW4oaW5mbyk7CisgICAgQVNTRVJUX0VRKGVsZUluZm8uaXNfb3BlbigpLCB0cnVlKTsKKyAgICBhbmRyb2lkOjpWZWN0b3I8RnJhbWVJbmZvPiBJbmZvOworICAgIGludCBieXRlc0NvdW50ID0gMDsKKyAgICB1aW50MzJfdCBmbGFncyA9IDA7CisgICAgdWludDMyX3QgdGltZXN0YW1wID0gMDsKKyAgICBtRmx1c2hlZEluZGljZXMuY2xlYXIoKTsKKyAgICB3aGlsZSAoMSkgeworICAgICAgICBpZiAoIShlbGVJbmZvID4+IGJ5dGVzQ291bnQpKSBicmVhazsKKyAgICAgICAgZWxlSW5mbyA+PiBmbGFnczsKKyAgICAgICAgZWxlSW5mbyA+PiB0aW1lc3RhbXA7CisgICAgICAgIEluZm8ucHVzaF9iYWNrKHtieXRlc0NvdW50LCBmbGFncywgdGltZXN0YW1wfSk7CisgICAgfQorICAgIGVsZUluZm8uY2xvc2UoKTsKKworICAgIEFMT0dWKCJtVVJMIDogJXMiLCBtVVJMKTsKKyAgICBlbGVTdHJlYW0ub3BlbihtVVJMLCBzdGQ6Omlmc3RyZWFtOjpiaW5hcnkpOworICAgIEFTU0VSVF9FUShlbGVTdHJlYW0uaXNfb3BlbigpLCB0cnVlKTsKKyAgICAvLyBEZWNvZGUgMTI4IGZyYW1lcyBhbmQgZmx1c2guIGhlcmUgMTI4IGlzIGNob3NlbiB0byBlbnN1cmUgdGhlcmUgaXMgYSBrZXkKKyAgICAvLyBmcmFtZSBhZnRlciB0aGlzIHNvIHRoYXQgdGhlIGJlbG93IHNlY3Rpb24gY2FuIGJlIGNvdmVyZWQgZm9yIGFsbAorICAgIC8vIGNvbXBvbmVudHMKKyAgICB1aW50MzJfdCBudW1GcmFtZXNGbHVzaGVkID0gMTI4OworICAgIEFTU0VSVF9OT19GQVRBTF9GQUlMVVJFKGRlY29kZU5GcmFtZXMoCisgICAgICAgIG1Db21wb25lbnQsIG1RdWV1ZUxvY2ssIG1RdWV1ZUNvbmRpdGlvbiwgbVdvcmtRdWV1ZSwgbUZsdXNoZWRJbmRpY2VzLAorICAgICAgICBtTGluZWFyUG9vbCwgZWxlU3RyZWFtLCAmSW5mbywgMCwgbnVtRnJhbWVzRmx1c2hlZCwgZmFsc2UpKTsKKyAgICAvLyBmbHVzaAorICAgIHN0ZDo6bGlzdDxzdGQ6OnVuaXF1ZV9wdHI8QzJXb3JrPj4gZmx1c2hlZFdvcms7CisgICAgYzJfc3RhdHVzX3QgZXJyID0KKyAgICAgICAgbUNvbXBvbmVudC0+Zmx1c2goQzJDb21wb25lbnQ6OkZMVVNIX0NPTVBPTkVOVCwgJmZsdXNoZWRXb3JrKTsKKyAgICBBU1NFUlRfRVEoZXJyLCBDMl9PSyk7CisgICAgQVNTRVJUX05PX0ZBVEFMX0ZBSUxVUkUoCisgICAgICAgIHdhaXRPbklucHV0Q29uc3VtcHRpb24obVF1ZXVlTG9jaywgbVF1ZXVlQ29uZGl0aW9uLCBtV29ya1F1ZXVlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChzaXplX3QpTUFYX0lOUFVUX0JVRkZFUlMgLSBmbHVzaGVkV29yay5zaXplKCkpKTsKKworICAgIHsKKyAgICAgICAgLy8gVXBkYXRlIG1GbHVzaGVkSW5kaWNlcyBiYXNlZCBvbiB0aGUgaW5kZXggcmVjZWl2ZWQgZnJvbSBmbHVzaCgpCisgICAgICAgIFVMb2NrIGwobVF1ZXVlTG9jayk7CisgICAgICAgIGZvciAoc3RkOjp1bmlxdWVfcHRyPEMyV29yaz4mIHdvcmsgOiBmbHVzaGVkV29yaykgeworICAgICAgICAgICAgQVNTRVJUX05FKHdvcmssIG51bGxwdHIpOworICAgICAgICAgICAgYXV0byBmcmFtZUluZGV4SXQgPQorICAgICAgICAgICAgICAgIHN0ZDo6ZmluZChtRmx1c2hlZEluZGljZXMuYmVnaW4oKSwgbUZsdXNoZWRJbmRpY2VzLmVuZCgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICB3b3JrLT5pbnB1dC5vcmRpbmFsLmZyYW1lSW5kZXgucGVla3UoKSk7CisgICAgICAgICAgICBpZiAoIW1GbHVzaGVkSW5kaWNlcy5lbXB0eSgpICYmCisgICAgICAgICAgICAgICAgKGZyYW1lSW5kZXhJdCAhPSBtRmx1c2hlZEluZGljZXMuZW5kKCkpKSB7CisgICAgICAgICAgICAgICAgbUZsdXNoZWRJbmRpY2VzLmVyYXNlKGZyYW1lSW5kZXhJdCk7CisgICAgICAgICAgICAgICAgd29yay0+aW5wdXQuYnVmZmVycy5jbGVhcigpOworICAgICAgICAgICAgICAgIHdvcmstPndvcmtsZXRzLmNsZWFyKCk7CisgICAgICAgICAgICAgICAgbVdvcmtRdWV1ZS5wdXNoX2JhY2soc3RkOjptb3ZlKHdvcmspKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKyAgICAvLyBTZWVrIHRvIG5leHQga2V5IGZyYW1lIGFuZCBzdGFydCBkZWNvZGluZyB0aWxsIHRoZSBlbmQKKyAgICBtRmx1c2hlZEluZGljZXMuY2xlYXIoKTsKKyAgICBpbnQgaW5kZXggPSBudW1GcmFtZXNGbHVzaGVkOworICAgIGJvb2wga2V5RnJhbWUgPSBmYWxzZTsKKyAgICBmbGFncyA9IDA7CisgICAgd2hpbGUgKGluZGV4IDwgKGludClJbmZvLnNpemUoKSkgeworICAgICAgICBpZiAoSW5mb1tpbmRleF0uZmxhZ3MpIGZsYWdzID0gMXUgPDwgKEluZm9baW5kZXhdLmZsYWdzIC0gMSk7CisgICAgICAgIGlmICgoZmxhZ3MgJiBTWU5DX0ZSQU1FKSA9PSBTWU5DX0ZSQU1FKSB7CisgICAgICAgICAgICBrZXlGcmFtZSA9IHRydWU7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBmbGFncyA9IDA7CisgICAgICAgIGVsZVN0cmVhbS5pZ25vcmUoSW5mb1tpbmRleF0uYnl0ZXNDb3VudCk7CisgICAgICAgIGluZGV4Kys7CisgICAgfQorICAgIGlmIChrZXlGcmFtZSkgeworICAgICAgICBBU1NFUlRfTk9fRkFUQUxfRkFJTFVSRSgKKyAgICAgICAgICAgIGRlY29kZU5GcmFtZXMobUNvbXBvbmVudCwgbVF1ZXVlTG9jaywgbVF1ZXVlQ29uZGl0aW9uLCBtV29ya1F1ZXVlLAorICAgICAgICAgICAgICAgICAgICAgICAgICBtRmx1c2hlZEluZGljZXMsIG1MaW5lYXJQb29sLCBlbGVTdHJlYW0sICZJbmZvLCBpbmRleCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgKGludClJbmZvLnNpemUoKSAtIGluZGV4KSk7CisgICAgfQorICAgIGVsZVN0cmVhbS5jbG9zZSgpOworICAgIGVyciA9IG1Db21wb25lbnQtPmZsdXNoKEMyQ29tcG9uZW50OjpGTFVTSF9DT01QT05FTlQsICZmbHVzaGVkV29yayk7CisgICAgQVNTRVJUX0VRKGVyciwgQzJfT0spOworICAgIEFTU0VSVF9OT19GQVRBTF9GQUlMVVJFKAorICAgICAgICB3YWl0T25JbnB1dENvbnN1bXB0aW9uKG1RdWV1ZUxvY2ssIG1RdWV1ZUNvbmRpdGlvbiwgbVdvcmtRdWV1ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoc2l6ZV90KU1BWF9JTlBVVF9CVUZGRVJTIC0gZmx1c2hlZFdvcmsuc2l6ZSgpKSk7CisgICAgeworICAgICAgICAvLyBVcGRhdGUgbUZsdXNoZWRJbmRpY2VzIGJhc2VkIG9uIHRoZSBpbmRleCByZWNlaXZlZCBmcm9tIGZsdXNoKCkKKyAgICAgICAgVUxvY2sgbChtUXVldWVMb2NrKTsKKyAgICAgICAgZm9yIChzdGQ6OnVuaXF1ZV9wdHI8QzJXb3JrPiYgd29yayA6IGZsdXNoZWRXb3JrKSB7CisgICAgICAgICAgICBBU1NFUlRfTkUod29yaywgbnVsbHB0cik7CisgICAgICAgICAgICB1aW50NjRfdCBmcmFtZUluZGV4ID0gd29yay0+aW5wdXQub3JkaW5hbC5mcmFtZUluZGV4LnBlZWt1KCk7CisgICAgICAgICAgICBzdGQ6Omxpc3Q8dWludDY0X3Q+OjppdGVyYXRvciBmcmFtZUluZGV4SXQgPSBzdGQ6OmZpbmQoCisgICAgICAgICAgICAgICAgbUZsdXNoZWRJbmRpY2VzLmJlZ2luKCksIG1GbHVzaGVkSW5kaWNlcy5lbmQoKSwgZnJhbWVJbmRleCk7CisgICAgICAgICAgICBpZiAoIW1GbHVzaGVkSW5kaWNlcy5lbXB0eSgpICYmCisgICAgICAgICAgICAgICAgKGZyYW1lSW5kZXhJdCAhPSBtRmx1c2hlZEluZGljZXMuZW5kKCkpKSB7CisgICAgICAgICAgICAgICAgbUZsdXNoZWRJbmRpY2VzLmVyYXNlKGZyYW1lSW5kZXhJdCk7CisgICAgICAgICAgICAgICAgd29yay0+aW5wdXQuYnVmZmVycy5jbGVhcigpOworICAgICAgICAgICAgICAgIHdvcmstPndvcmtsZXRzLmNsZWFyKCk7CisgICAgICAgICAgICAgICAgbVdvcmtRdWV1ZS5wdXNoX2JhY2soc3RkOjptb3ZlKHdvcmspKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKyAgICBBU1NFUlRfRVEobUZsdXNoZWRJbmRpY2VzLmVtcHR5KCksIHRydWUpOworICAgIEFTU0VSVF9FUShtQ29tcG9uZW50LT5zdG9wKCksIEMyX09LKTsKK30KKworfSAgLy8gYW5vbnltb3VzIG5hbWVzcGFjZQorCisvLyBUT0RPIDogVmlkZW8gc3BlY2lmaWMgY29uZmlndXJhdGlvbiBUZXN0CitpbnQgbWFpbihpbnQgYXJnYywgY2hhcioqIGFyZ3YpIHsKKyAgICBnRW52ID0gbmV3IENvbXBvbmVudFRlc3RFbnZpcm9ubWVudCgpOworICAgIDo6dGVzdGluZzo6QWRkR2xvYmFsVGVzdEVudmlyb25tZW50KGdFbnYpOworICAgIDo6dGVzdGluZzo6SW5pdEdvb2dsZVRlc3QoJmFyZ2MsIGFyZ3YpOworICAgIGdFbnYtPmluaXQoJmFyZ2MsIGFyZ3YpOworICAgIGludCBzdGF0dXMgPSBnRW52LT5pbml0RnJvbU9wdGlvbnMoYXJnYywgYXJndik7CisgICAgaWYgKHN0YXR1cyA9PSAwKSB7CisgICAgICAgIGludCBzdGF0dXMgPSBSVU5fQUxMX1RFU1RTKCk7CisgICAgICAgIExPRyhJTkZPKSA8PCAiQzIgVGVzdCByZXN1bHQgPSAiIDw8IHN0YXR1czsKKyAgICB9CisgICAgcmV0dXJuIHN0YXR1czsKK30KZGlmZiAtLWdpdCBhL21lZGlhL2NvZGVjMi9oaWRsLzEuMC92dHMvdmlkZW8vVnRzSGlkbEMyVjFfMFRhcmdldFZpZGVvRW5jVGVzdC5jcHAgYi9tZWRpYS9jb2RlYzIvaGlkbC8xLjAvdnRzL3ZpZGVvL1Z0c0hpZGxDMlYxXzBUYXJnZXRWaWRlb0VuY1Rlc3QuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg3Yjc5MDIKLS0tIC9kZXYvbnVsbAorKysgYi9tZWRpYS9jb2RlYzIvaGlkbC8xLjAvdnRzL3ZpZGVvL1Z0c0hpZGxDMlYxXzBUYXJnZXRWaWRlb0VuY1Rlc3QuY3BwCkBAIC0wLDAgKzEsNzEyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE4IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KKworLy8jZGVmaW5lIExPR19OREVCVUcgMAorI2RlZmluZSBMT0dfVEFHICJjb2RlYzJfaGlkbF9oYWxfdmlkZW9fZW5jX3Rlc3QiCisKKyNpbmNsdWRlIDxhbmRyb2lkLWJhc2UvbG9nZ2luZy5oPgorI2luY2x1ZGUgPGd0ZXN0L2d0ZXN0Lmg+CisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxmc3RyZWFtPgorCisjaW5jbHVkZSA8Y29kZWMyL2hpZGwvY2xpZW50Lmg+CisjaW5jbHVkZSA8QzJBbGxvY2F0b3JJb24uaD4KKyNpbmNsdWRlIDxDMkNvbmZpZy5oPgorI2luY2x1ZGUgPEMyRGVidWcuaD4KKyNpbmNsdWRlIDxDMkJ1ZmZlci5oPgorI2luY2x1ZGUgPEMyQnVmZmVyUHJpdi5oPgorCit1c2luZyBhbmRyb2lkOjpDMkFsbG9jYXRvcklvbjsKKworI2luY2x1ZGUgPFZ0c0hhbEhpZGxUYXJnZXRUZXN0QmFzZS5oPgorI2luY2x1ZGUgIm1lZGlhX2MyX3ZpZGVvX2hpZGxfdGVzdF9jb21tb24uaCIKKyNpbmNsdWRlICJtZWRpYV9jMl9oaWRsX3Rlc3RfY29tbW9uLmgiCisKK2NsYXNzIEdyYXBoaWNCdWZmZXIgOiBwdWJsaWMgQzJCdWZmZXIgeworcHVibGljOgorICBleHBsaWNpdCBHcmFwaGljQnVmZmVyKGNvbnN0IHN0ZDo6c2hhcmVkX3B0cjxDMkdyYXBoaWNCbG9jaz4gJmJsb2NrKQorICAgICAgOiBDMkJ1ZmZlcih7YmxvY2stPnNoYXJlKEMyUmVjdChibG9jay0+d2lkdGgoKSwgYmxvY2stPmhlaWdodCgpKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6OkMyRmVuY2UoKSl9KSB7fQorfTsKKworc3RhdGljIENvbXBvbmVudFRlc3RFbnZpcm9ubWVudCogZ0VudiA9IG51bGxwdHI7CisKK25hbWVzcGFjZSB7CisKK2NsYXNzIENvZGVjMlZpZGVvRW5jSGlkbFRlc3QgOiBwdWJsaWMgOjp0ZXN0aW5nOjpWdHNIYWxIaWRsVGFyZ2V0VGVzdEJhc2UgeworICAgcHJpdmF0ZToKKyAgICB0eXBlZGVmIDo6dGVzdGluZzo6VnRzSGFsSGlkbFRhcmdldFRlc3RCYXNlIFN1cGVyOworCisgICBwdWJsaWM6CisgICAgOjpzdGQ6OnN0cmluZyBnZXRUZXN0Q2FzZUluZm8oKSBjb25zdCBvdmVycmlkZSB7CisgICAgICAgIHJldHVybiA6OnN0ZDo6c3RyaW5nKCkgKworICAgICAgICAgICAgICAgICJDb21wb25lbnQ6ICIgKyBnRW52LT5nZXRDb21wb25lbnQoKS5jX3N0cigpICsgIiB8ICIgKworICAgICAgICAgICAgICAgICJJbnN0YW5jZTogIiArIGdFbnYtPmdldEluc3RhbmNlKCkuY19zdHIoKSArICIgfCAiICsKKyAgICAgICAgICAgICAgICAiUmVzOiAiICsgZ0Vudi0+Z2V0UmVzKCkuY19zdHIoKTsKKyAgICB9CisKKyAgICAvLyBnb29nbGUuY29kZWMyIFZpZGVvIHRlc3Qgc2V0dXAKKyAgICB2aXJ0dWFsIHZvaWQgU2V0VXAoKSBvdmVycmlkZSB7CisgICAgICAgIFN1cGVyOjpTZXRVcCgpOworICAgICAgICBtRGlzYWJsZVRlc3QgPSBmYWxzZTsKKyAgICAgICAgQUxPR1YoIkNvZGVjMlZpZGVvRW5jSGlkbFRlc3QgU2V0VXAiKTsKKyAgICAgICAgbUNsaWVudCA9IGFuZHJvaWQ6OkNvZGVjMkNsaWVudDo6Q3JlYXRlRnJvbVNlcnZpY2UoCisgICAgICAgICAgICBnRW52LT5nZXRJbnN0YW5jZSgpLmNfc3RyKCkpOworICAgICAgICBBU1NFUlRfTkUobUNsaWVudCwgbnVsbHB0cik7CisgICAgICAgIG1MaXN0ZW5lci5yZXNldChuZXcgQ29kZWNMaXN0ZW5lcigKKyAgICAgICAgICAgIFt0aGlzXShzdGQ6Omxpc3Q8c3RkOjp1bmlxdWVfcHRyPEMyV29yaz4+JiB3b3JrSXRlbXMpIHsKKyAgICAgICAgICAgICAgICBoYW5kbGVXb3JrRG9uZSh3b3JrSXRlbXMpOworICAgICAgICAgICAgfSkpOworICAgICAgICBBU1NFUlRfTkUobUxpc3RlbmVyLCBudWxscHRyKTsKKyAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBNQVhfSU5QVVRfQlVGRkVSUzsgKytpKSB7CisgICAgICAgICAgICBtV29ya1F1ZXVlLmVtcGxhY2VfYmFjayhuZXcgQzJXb3JrKTsKKyAgICAgICAgfQorICAgICAgICBtQ2xpZW50LT5jcmVhdGVDb21wb25lbnQoZ0Vudi0+Z2V0Q29tcG9uZW50KCkuY19zdHIoKSwgbUxpc3RlbmVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJm1Db21wb25lbnQpOworICAgICAgICBBU1NFUlRfTkUobUNvbXBvbmVudCwgbnVsbHB0cik7CisKKyAgICAgICAgc3RkOjpzaGFyZWRfcHRyPEMyQWxsb2NhdG9yU3RvcmU+IHN0b3JlID0KKyAgICAgICAgICAgIGFuZHJvaWQ6OkdldENvZGVjMlBsYXRmb3JtQWxsb2NhdG9yU3RvcmUoKTsKKyAgICAgICAgQ0hFQ0tfRVEoc3RvcmUtPmZldGNoQWxsb2NhdG9yKEMyQWxsb2NhdG9yU3RvcmU6OkRFRkFVTFRfR1JBUEhJQywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZtR3JhcGhpY0FsbG9jYXRvciksCisgICAgICAgICAgICAgICAgIEMyX09LKTsKKyAgICAgICAgbUdyYXBoaWNQb29sID0gc3RkOjptYWtlX3NoYXJlZDxDMlBvb2xlZEJsb2NrUG9vbD4obUdyYXBoaWNBbGxvY2F0b3IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1CbG9ja1Bvb2xJZCsrKTsKKyAgICAgICAgQVNTRVJUX05FKG1HcmFwaGljUG9vbCwgbnVsbHB0cik7CisKKyAgICAgICAgbUNvbXBOYW1lID0gdW5rbm93bl9jb21wOworICAgICAgICBzdHJ1Y3QgU3RyaW5nVG9OYW1lIHsKKyAgICAgICAgICAgIGNvbnN0IGNoYXIqIE5hbWU7CisgICAgICAgICAgICBzdGFuZGFyZENvbXAgQ29tcE5hbWU7CisgICAgICAgIH07CisKKyAgICAgICAgY29uc3QgU3RyaW5nVG9OYW1lIGtTdHJpbmdUb05hbWVbXSA9IHsKKyAgICAgICAgICAgIHsiaDI2MyIsIGgyNjN9LCB7ImF2YyIsIGF2Y30sIHsibXBlZzQiLCBtcGVnNH0sCisgICAgICAgICAgICB7ImhldmMiLCBoZXZjfSwgeyJ2cDgiLCB2cDh9LCB7InZwOSIsIHZwOX0sCisgICAgICAgIH07CisKKyAgICAgICAgY29uc3Qgc2l6ZV90IGtOdW1TdHJpbmdUb05hbWUgPQorICAgICAgICAgICAgc2l6ZW9mKGtTdHJpbmdUb05hbWUpIC8gc2l6ZW9mKGtTdHJpbmdUb05hbWVbMF0pOworCisgICAgICAgIHN0ZDo6c3RyaW5nIHN1YnN0cmluZzsKKyAgICAgICAgc3RkOjpzdHJpbmcgY29tcDsKKyAgICAgICAgc3Vic3RyaW5nID0gc3RkOjpzdHJpbmcoZ0Vudi0+Z2V0Q29tcG9uZW50KCkpOworICAgICAgICAvKiBUT0RPOiBiZXR0ZXIgYXBwcm9hY2ggdG8gZmluZCB0aGUgY29tcG9uZW50ICovCisgICAgICAgIC8qICJjMi5hbmRyb2lkLiIgPT4gMTF0aCBwb3NpdGlvbiAqLworICAgICAgICBzaXplX3QgcG9zID0gMTE7CisgICAgICAgIHNpemVfdCBsZW4gPSBzdWJzdHJpbmcuZmluZCgiLmVuY29kZXIiLCBwb3MpOworICAgICAgICBjb21wID0gc3Vic3RyaW5nLnN1YnN0cihwb3MsIGxlbiAtIHBvcyk7CisKKyAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBrTnVtU3RyaW5nVG9OYW1lOyArK2kpIHsKKyAgICAgICAgICAgIGlmICghc3RyY2FzZWNtcChjb21wLmNfc3RyKCksIGtTdHJpbmdUb05hbWVbaV0uTmFtZSkpIHsKKyAgICAgICAgICAgICAgICBtQ29tcE5hbWUgPSBrU3RyaW5nVG9OYW1lW2ldLkNvbXBOYW1lOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIG1Fb3MgPSBmYWxzZTsKKyAgICAgICAgbUNzZCA9IGZhbHNlOworICAgICAgICBtQ29uZmlnID0gZmFsc2U7CisgICAgICAgIG1GcmFtZXNSZWNlaXZlZCA9IDA7CisgICAgICAgIG1GYWlsZWRXb3JrUmVjZWl2ZWQgPSAwOworICAgICAgICBpZiAobUNvbXBOYW1lID09IHVua25vd25fY29tcCkgbURpc2FibGVUZXN0ID0gdHJ1ZTsKKyAgICAgICAgaWYgKG1EaXNhYmxlVGVzdCkgc3RkOjpjb3V0IDw8ICJbICAgV0FSTiAgIF0gVGVzdCBEaXNhYmxlZCBcbiI7CisgICAgfQorCisgICAgdmlydHVhbCB2b2lkIFRlYXJEb3duKCkgb3ZlcnJpZGUgeworICAgICAgICBpZiAobUNvbXBvbmVudCAhPSBudWxscHRyKSB7CisgICAgICAgICAgICBpZiAoOjp0ZXN0aW5nOjpUZXN0OjpIYXNGYXRhbEZhaWx1cmUoKSkgcmV0dXJuOworICAgICAgICAgICAgbUNvbXBvbmVudC0+cmVsZWFzZSgpOworICAgICAgICAgICAgbUNvbXBvbmVudCA9IG51bGxwdHI7CisgICAgICAgIH0KKyAgICAgICAgU3VwZXI6OlRlYXJEb3duKCk7CisgICAgfQorCisgICAgdm9pZCBzZXR1cENvbmZpZ1BhcmFtKGludDMyX3QgbldpZHRoLCBpbnQzMl90IG5IZWlnaHQpOworCisgICAgLy8gY2FsbGJhY2sgZnVuY3Rpb24gdG8gcHJvY2VzcyBvbldvcmtEb25lIHJlY2VpdmVkIGJ5IExpc3RlbmVyCisgICAgdm9pZCBoYW5kbGVXb3JrRG9uZShzdGQ6Omxpc3Q8c3RkOjp1bmlxdWVfcHRyPEMyV29yaz4+JiB3b3JrSXRlbXMpIHsKKyAgICAgICAgZm9yIChzdGQ6OnVuaXF1ZV9wdHI8QzJXb3JrPiYgd29yayA6IHdvcmtJdGVtcykgeworICAgICAgICAgICAgLy8gaGFuZGxlIGNvbmZpZ3VyYXRpb24gY2hhbmdlcyBpbiB3b3JrIGRvbmUKKyAgICAgICAgICAgIGlmICghd29yay0+d29ya2xldHMuZW1wdHkoKSAmJgorICAgICAgICAgICAgICAgICh3b3JrLT53b3JrbGV0cy5mcm9udCgpLT5vdXRwdXQuY29uZmlnVXBkYXRlLnNpemUoKSAhPSAwKSkgeworICAgICAgICAgICAgICAgIEFMT0dWKCJDb25maWcgVXBkYXRlIik7CisgICAgICAgICAgICAgICAgc3RkOjp2ZWN0b3I8c3RkOjp1bmlxdWVfcHRyPEMyUGFyYW0+PiB1cGRhdGVzID0KKyAgICAgICAgICAgICAgICAgICAgc3RkOjptb3ZlKHdvcmstPndvcmtsZXRzLmZyb250KCktPm91dHB1dC5jb25maWdVcGRhdGUpOworICAgICAgICAgICAgICAgIHN0ZDo6dmVjdG9yPEMyUGFyYW0qPiBjb25maWdQYXJhbTsKKyAgICAgICAgICAgICAgICBzdGQ6OnZlY3RvcjxzdGQ6OnVuaXF1ZV9wdHI8QzJTZXR0aW5nUmVzdWx0Pj4gZmFpbHVyZXM7CisgICAgICAgICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCB1cGRhdGVzLnNpemUoKTsgKytpKSB7CisgICAgICAgICAgICAgICAgICAgIEMyUGFyYW0qIHBhcmFtID0gdXBkYXRlc1tpXS5nZXQoKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKHBhcmFtLT5pbmRleCgpID09IEMyU3RyZWFtQ3NkSW5mbzo6b3V0cHV0OjpQQVJBTV9UWVBFKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBtQ3NkID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIG1GcmFtZXNSZWNlaXZlZCsrOworICAgICAgICAgICAgaWYgKHdvcmstPnJlc3VsdCAhPSBDMl9PSykgbUZhaWxlZFdvcmtSZWNlaXZlZCsrOworICAgICAgICAgICAgbUVvcyA9ICh3b3JrLT53b3JrbGV0cy5mcm9udCgpLT5vdXRwdXQuZmxhZ3MgJgorICAgICAgICAgICAgICAgICAgICBDMkZyYW1lRGF0YTo6RkxBR19FTkRfT0ZfU1RSRUFNKSAhPSAwOworICAgICAgICAgICAgYXV0byBmcmFtZUluZGV4SXQgPQorICAgICAgICAgICAgICAgIHN0ZDo6ZmluZChtRmx1c2hlZEluZGljZXMuYmVnaW4oKSwgbUZsdXNoZWRJbmRpY2VzLmVuZCgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICB3b3JrLT5pbnB1dC5vcmRpbmFsLmZyYW1lSW5kZXgucGVla3UoKSk7CisgICAgICAgICAgICBBTE9HVigiV29ya0RvbmU6IGZyYW1lSUQgcmVjZWl2ZWQgJWQiLAorICAgICAgICAgICAgICAgIChpbnQpd29yay0+d29ya2xldHMuZnJvbnQoKS0+b3V0cHV0Lm9yZGluYWwuZnJhbWVJbmRleC5wZWVrdSgpKTsKKyAgICAgICAgICAgIHdvcmstPmlucHV0LmJ1ZmZlcnMuY2xlYXIoKTsKKyAgICAgICAgICAgIHdvcmstPndvcmtsZXRzLmNsZWFyKCk7CisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgdHlwZWRlZiBzdGQ6OnVuaXF1ZV9sb2NrPHN0ZDo6bXV0ZXg+IFVMb2NrOworICAgICAgICAgICAgICAgIFVMb2NrIGwobVF1ZXVlTG9jayk7CisgICAgICAgICAgICAgICAgbVdvcmtRdWV1ZS5wdXNoX2JhY2soc3RkOjptb3ZlKHdvcmspKTsKKyAgICAgICAgICAgICAgICBpZiAoIW1GbHVzaGVkSW5kaWNlcy5lbXB0eSgpKSB7CisgICAgICAgICAgICAgICAgICAgIG1GbHVzaGVkSW5kaWNlcy5lcmFzZShmcmFtZUluZGV4SXQpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBtUXVldWVDb25kaXRpb24ubm90aWZ5X2FsbCgpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCisgICAgZW51bSBzdGFuZGFyZENvbXAgeworICAgICAgICBoMjYzLAorICAgICAgICBhdmMsCisgICAgICAgIG1wZWc0LAorICAgICAgICBoZXZjLAorICAgICAgICB2cDgsCisgICAgICAgIHZwOSwKKyAgICAgICAgdW5rbm93bl9jb21wLAorICAgIH07CisKKyAgICBib29sIG1Fb3M7CisgICAgYm9vbCBtQ3NkOworICAgIGJvb2wgbURpc2FibGVUZXN0OworICAgIGJvb2wgbUNvbmZpZzsKKyAgICBzdGFuZGFyZENvbXAgbUNvbXBOYW1lOworICAgIHVpbnQzMl90IG1GcmFtZXNSZWNlaXZlZDsKKyAgICB1aW50MzJfdCBtRmFpbGVkV29ya1JlY2VpdmVkOworCisgICAgc3RkOjpsaXN0PHVpbnQ2NF90PiBtRmx1c2hlZEluZGljZXM7CisKKyAgICBDMkJsb2NrUG9vbDo6bG9jYWxfaWRfdCBtQmxvY2tQb29sSWQ7CisgICAgc3RkOjpzaGFyZWRfcHRyPEMyQmxvY2tQb29sPiBtR3JhcGhpY1Bvb2w7CisgICAgc3RkOjpzaGFyZWRfcHRyPEMyQWxsb2NhdG9yPiBtR3JhcGhpY0FsbG9jYXRvcjsKKworICAgIHN0ZDo6bXV0ZXggbVF1ZXVlTG9jazsKKyAgICBzdGQ6OmNvbmRpdGlvbl92YXJpYWJsZSBtUXVldWVDb25kaXRpb247CisgICAgc3RkOjpsaXN0PHN0ZDo6dW5pcXVlX3B0cjxDMldvcms+PiBtV29ya1F1ZXVlOworCisgICAgc3RkOjpzaGFyZWRfcHRyPGFuZHJvaWQ6OkNvZGVjMkNsaWVudD4gbUNsaWVudDsKKyAgICBzdGQ6OnNoYXJlZF9wdHI8YW5kcm9pZDo6Q29kZWMyQ2xpZW50OjpMaXN0ZW5lcj4gbUxpc3RlbmVyOworICAgIHN0ZDo6c2hhcmVkX3B0cjxhbmRyb2lkOjpDb2RlYzJDbGllbnQ6OkNvbXBvbmVudD4gbUNvbXBvbmVudDsKKworICAgcHJvdGVjdGVkOgorICAgIHN0YXRpYyB2b2lkIGRlc2NyaXB0aW9uKGNvbnN0IHN0ZDo6c3RyaW5nJiBkZXNjcmlwdGlvbikgeworICAgICAgICBSZWNvcmRQcm9wZXJ0eSgiZGVzY3JpcHRpb24iLCBkZXNjcmlwdGlvbik7CisgICAgfQorfTsKKwordm9pZCB2YWxpZGF0ZUNvbXBvbmVudCgKKyAgICBjb25zdCBzdGQ6OnNoYXJlZF9wdHI8YW5kcm9pZDo6Q29kZWMyQ2xpZW50OjpDb21wb25lbnQ+JiBjb21wb25lbnQsCisgICAgQ29kZWMyVmlkZW9FbmNIaWRsVGVzdDo6c3RhbmRhcmRDb21wIGNvbXBOYW1lLCBib29sJiBkaXNhYmxlVGVzdCkgeworICAgIC8vIFZhbGlkYXRlIGl0cyBhIEMyIENvbXBvbmVudAorICAgIGlmIChjb21wb25lbnQtPmdldE5hbWUoKS5maW5kKCJjMiIpID09IHN0ZDo6c3RyaW5nOjpucG9zKSB7CisgICAgICAgIEFMT0dFKCJOb3QgYSBjMiBjb21wb25lbnQiKTsKKyAgICAgICAgZGlzYWJsZVRlc3QgPSB0cnVlOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgLy8gVmFsaWRhdGUgaXRzIG5vdCBhbiBlbmNvZGVyIGFuZCB0aGUgY29tcG9uZW50IHRvIGJlIHRlc3RlZCBpcyB2aWRlbworICAgIGlmIChjb21wb25lbnQtPmdldE5hbWUoKS5maW5kKCJkZWNvZGVyIikgIT0gc3RkOjpzdHJpbmc6Om5wb3MpIHsKKyAgICAgICAgQUxPR0UoIkV4cGVjdGVkIEVuY29kZXIsIGdpdmVuIERlY29kZXIiKTsKKyAgICAgICAgZGlzYWJsZVRlc3QgPSB0cnVlOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIHN0ZDo6dmVjdG9yPHN0ZDo6dW5pcXVlX3B0cjxDMlBhcmFtPj4gcXVlcmllZDsKKyAgICBjMl9zdGF0dXNfdCBjMmVyciA9CisgICAgICAgIGNvbXBvbmVudC0+cXVlcnkoe30sIHtDMlBvcnRNZWRpYVR5cGVTZXR0aW5nOjppbnB1dDo6UEFSQU1fVFlQRX0sCisgICAgICAgICAgICAgICAgICAgICAgICAgQzJfRE9OVF9CTE9DSywgJnF1ZXJpZWQpOworICAgIGlmIChjMmVyciAhPSBDMl9PSyAmJiBxdWVyaWVkLnNpemUoKSA9PSAwKSB7CisgICAgICAgIEFMT0dFKCJRdWVyeSBtZWRpYSB0eXBlIGZhaWxlZCA9PiAlZCIsIGMyZXJyKTsKKyAgICB9IGVsc2UgeworICAgICAgICBzdGQ6OnN0cmluZyBpbnB1dERvbWFpbiA9CisgICAgICAgICAgICAoKEMyU3RyZWFtTWVkaWFUeXBlU2V0dGluZzo6aW5wdXQqKXF1ZXJpZWRbMF0uZ2V0KCkpLT5tLnZhbHVlOworICAgICAgICBpZiAoaW5wdXREb21haW4uZmluZCgidmlkZW8vIikgPT0gc3RkOjpzdHJpbmc6Om5wb3MpIHsKKyAgICAgICAgICAgIEFMT0dFKCJFeHBlY3RlZCBWaWRlbyBDb21wb25lbnQiKTsKKyAgICAgICAgICAgIGRpc2FibGVUZXN0ID0gdHJ1ZTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgIH0KKworICAgIC8vIFZhbGlkYXRlcyBjb21wb25lbnQgbmFtZQorICAgIGlmIChjb21wTmFtZSA9PSBDb2RlYzJWaWRlb0VuY0hpZGxUZXN0Ojp1bmtub3duX2NvbXApIHsKKyAgICAgICAgQUxPR0UoIkNvbXBvbmVudCBJblZhbGlkIik7CisgICAgICAgIGRpc2FibGVUZXN0ID0gdHJ1ZTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBBTE9HVigiQ29tcG9uZW50IFZhbGlkIik7Cit9CisKKy8vIFNldCBEZWZhdWx0IGNvbmZpZyBwYXJhbS4KK3ZvaWQgQ29kZWMyVmlkZW9FbmNIaWRsVGVzdDo6c2V0dXBDb25maWdQYXJhbShpbnQzMl90IG5XaWR0aCwgaW50MzJfdCBuSGVpZ2h0KSB7CisgICAgc3RkOjp2ZWN0b3I8c3RkOjp1bmlxdWVfcHRyPEMyU2V0dGluZ1Jlc3VsdD4+IGZhaWx1cmVzOworICAgIEMyVmlkZW9TaXplU3RyZWFtVHVuaW5nOjppbnB1dCBpbnB1dFNpemUoMHUsIG5XaWR0aCwgbkhlaWdodCk7CisgICAgc3RkOjp2ZWN0b3I8QzJQYXJhbSo+IGNvbmZpZ1BhcmFteyZpbnB1dFNpemV9OworICAgIGMyX3N0YXR1c190IHN0YXR1cyA9CisgICAgICAgIG1Db21wb25lbnQtPmNvbmZpZyhjb25maWdQYXJhbSwgQzJfRE9OVF9CTE9DSywgJmZhaWx1cmVzKTsKKyAgICBpZiAoZmFpbHVyZXMuc2l6ZSgpID09IDB1ICkgbUNvbmZpZyA9IHRydWU7CisgICAgQVNTRVJUX0VRKHN0YXR1cywgQzJfT0spOworfQorCisvLyBMb29rVXBUYWJsZSBvZiBjbGlwcyBmb3IgY29tcG9uZW50IHRlc3RpbmcKK3ZvaWQgR2V0VVJMRm9yQ29tcG9uZW50KGNoYXIqIFVSTCkgeworICAgIHN0cmNhdChVUkwsICJiYmJfMzUyeDI4OF80MjBwXzMwZnBzXzMyZnJhbWVzLnl1diIpOworfQorCit2b2lkIGVuY29kZU5GcmFtZXMoY29uc3Qgc3RkOjpzaGFyZWRfcHRyPGFuZHJvaWQ6OkNvZGVjMkNsaWVudDo6Q29tcG9uZW50PiAmY29tcG9uZW50LAorICAgICAgICAgICAgICAgICAgIHN0ZDo6bXV0ZXggJnF1ZXVlTG9jaywgc3RkOjpjb25kaXRpb25fdmFyaWFibGUgJnF1ZXVlQ29uZGl0aW9uLAorICAgICAgICAgICAgICAgICAgIHN0ZDo6bGlzdDxzdGQ6OnVuaXF1ZV9wdHI8QzJXb3JrPj4gJndvcmtRdWV1ZSwKKyAgICAgICAgICAgICAgICAgICBzdGQ6Omxpc3Q8dWludDY0X3Q+ICZmbHVzaGVkSW5kaWNlcywKKyAgICAgICAgICAgICAgICAgICBzdGQ6OnNoYXJlZF9wdHI8QzJCbG9ja1Bvb2w+ICZncmFwaGljUG9vbCwKKyAgICAgICAgICAgICAgICAgICBzdGQ6Omlmc3RyZWFtJiBlbGVTdHJlYW0sIHVpbnQzMl90IGZyYW1lSUQsCisgICAgICAgICAgICAgICAgICAgdWludDMyX3QgbkZyYW1lcywgdWludDMyX3QgbldpZHRoLCBpbnQzMl90IG5IZWlnaHQsCisgICAgICAgICAgICAgICAgICAgYm9vbCBmbHVzaGVkID0gZmFsc2UsYm9vbCBzaWduYWxFT1MgPSB0cnVlKSB7CisgICAgdHlwZWRlZiBzdGQ6OnVuaXF1ZV9sb2NrPHN0ZDo6bXV0ZXg+IFVMb2NrOworCisgICAgdWludDMyX3QgbWF4UmV0cnkgPSAwOworICAgIGludCBieXRlc0NvdW50ID0gbldpZHRoICogbkhlaWdodCAqIDMgPj4gMTsKKyAgICBpbnQzMl90IHRpbWVzdGFtcEluY3IgPSBFTkNPREVSX1RJTUVTVEFNUF9JTkNSRU1FTlQ7CisgICAgdWludDY0X3QgdGltZXN0YW1wID0gMDsKKyAgICB3aGlsZSAoMSkgeworICAgICAgICBpZiAobkZyYW1lcyA9PSAwKSBicmVhazsKKyAgICAgICAgdWludDMyX3QgZmxhZ3MgPSAwOworICAgICAgICBzdGQ6OnVuaXF1ZV9wdHI8QzJXb3JrPiB3b3JrOworICAgICAgICAvLyBQcmVwYXJlIEMyV29yaworICAgICAgICB3aGlsZSAoIXdvcmsgJiYgKG1heFJldHJ5IDwgTUFYX1JFVFJZKSkgeworICAgICAgICAgICAgVUxvY2sgbChxdWV1ZUxvY2spOworICAgICAgICAgICAgaWYgKCF3b3JrUXVldWUuZW1wdHkoKSkgeworICAgICAgICAgICAgICAgIHdvcmsuc3dhcCh3b3JrUXVldWUuZnJvbnQoKSk7CisgICAgICAgICAgICAgICAgd29ya1F1ZXVlLnBvcF9mcm9udCgpOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBxdWV1ZUNvbmRpdGlvbi53YWl0X2ZvcihsLCBUSU1FX09VVCk7CisgICAgICAgICAgICAgICAgbWF4UmV0cnkrKzsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBpZiAoIXdvcmsgJiYgKG1heFJldHJ5ID49IE1BWF9SRVRSWSkpIHsKKyAgICAgICAgICAgIEFTU0VSVF9UUlVFKGZhbHNlKSA8PCAiV2FpdCBmb3IgZ2VuZXJhdGluZyBDMldvcmsgZXhjZWVkZWQgdGltZW91dCI7CisgICAgICAgIH0KKyAgICAgICAgaWYgKHNpZ25hbEVPUyAmJiAobkZyYW1lcyA9PSAxKSkKKyAgICAgICAgICAgIGZsYWdzIHw9IEMyRnJhbWVEYXRhOjpGTEFHX0VORF9PRl9TVFJFQU07CisgICAgICAgIGlmIChmbHVzaGVkKSB7CisgICAgICAgICAgICBmbGFncyB8PSBTWU5DX0ZSQU1FOworICAgICAgICAgICAgZmx1c2hlZCA9IGZhbHNlOworICAgICAgICB9CisKKyAgICAgICAgd29yay0+aW5wdXQuZmxhZ3MgPSAoQzJGcmFtZURhdGE6OmZsYWdzX3QpZmxhZ3M7CisgICAgICAgIHdvcmstPmlucHV0Lm9yZGluYWwudGltZXN0YW1wID0gdGltZXN0YW1wOworICAgICAgICB3b3JrLT5pbnB1dC5vcmRpbmFsLmZyYW1lSW5kZXggPSBmcmFtZUlEOworICAgICAgICB7CisgICAgICAgICAgICBVTG9jayBsKHF1ZXVlTG9jayk7CisgICAgICAgICAgICBmbHVzaGVkSW5kaWNlcy5lbXBsYWNlX2JhY2soZnJhbWVJRCk7CisgICAgICAgIH0KKyAgICAgICAgY2hhciogZGF0YSA9IChjaGFyKiltYWxsb2MoYnl0ZXNDb3VudCk7CisgICAgICAgIG1lbXNldChkYXRhLCAwLCBieXRlc0NvdW50KTsKKyAgICAgICAgaWYgKGVsZVN0cmVhbS5pc19vcGVuKCkpIHsKKyAgICAgICAgICAgIGVsZVN0cmVhbS5yZWFkKGRhdGEsIGJ5dGVzQ291bnQpOworICAgICAgICAgICAgQVNTRVJUX0VRKGVsZVN0cmVhbS5nY291bnQoKSwgYnl0ZXNDb3VudCk7CisgICAgICAgIH0KKyAgICAgICAgc3RkOjpzaGFyZWRfcHRyPEMyR3JhcGhpY0Jsb2NrPiBibG9jazsKKyAgICAgICAgQVNTRVJUX0VRKAorICAgICAgICAgICAgQzJfT0ssCisgICAgICAgICAgICBncmFwaGljUG9vbC0+ZmV0Y2hHcmFwaGljQmxvY2soCisgICAgICAgICAgICAgICAgbldpZHRoLCBuSGVpZ2h0LCBIQUxfUElYRUxfRk9STUFUX1lWMTIsCisgICAgICAgICAgICAgICAge0MyTWVtb3J5VXNhZ2U6OkNQVV9SRUFELCBDMk1lbW9yeVVzYWdlOjpDUFVfV1JJVEV9LCAmYmxvY2spKTsKKyAgICAgICAgQVNTRVJUX1RSVUUoYmxvY2spOworICAgICAgICAvLyBHcmFwaGljIFZpZXcKKyAgICAgICAgQzJHcmFwaGljVmlldyB2aWV3ID0gYmxvY2stPm1hcCgpLmdldCgpOworICAgICAgICBpZiAodmlldy5lcnJvcigpICE9IEMyX09LKSB7CisgICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIkMyR3JhcGhpY0Jsb2NrOjptYXAoKSBmYWlsZWQgOiAlZCIsIHZpZXcuZXJyb3IoKSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgIHVpbnQ4X3QqIHBZID0gdmlldy5kYXRhKClbQzJQbGFuYXJMYXlvdXQ6OlBMQU5FX1ldOworICAgICAgICB1aW50OF90KiBwVSA9IHZpZXcuZGF0YSgpW0MyUGxhbmFyTGF5b3V0OjpQTEFORV9VXTsKKyAgICAgICAgdWludDhfdCogcFYgPSB2aWV3LmRhdGEoKVtDMlBsYW5hckxheW91dDo6UExBTkVfVl07CisKKyAgICAgICAgbWVtY3B5KHBZLCBkYXRhLCBuV2lkdGggKiBuSGVpZ2h0KTsKKyAgICAgICAgbWVtY3B5KHBVLCBkYXRhICsgbldpZHRoICogbkhlaWdodCwgKG5XaWR0aCAqIG5IZWlnaHQgPj4gMikpOworICAgICAgICBtZW1jcHkocFYsIGRhdGEgKyAobldpZHRoICogbkhlaWdodCAqIDUgPj4gMiksIG5XaWR0aCAqIG5IZWlnaHQgPj4gMik7CisKKyAgICAgICAgd29yay0+aW5wdXQuYnVmZmVycy5jbGVhcigpOworICAgICAgICB3b3JrLT5pbnB1dC5idWZmZXJzLmVtcGxhY2VfYmFjayhuZXcgR3JhcGhpY0J1ZmZlcihibG9jaykpOworICAgICAgICB3b3JrLT53b3JrbGV0cy5jbGVhcigpOworICAgICAgICB3b3JrLT53b3JrbGV0cy5lbXBsYWNlX2JhY2sobmV3IEMyV29ya2xldCk7CisgICAgICAgIGZyZWUoZGF0YSk7CisKKyAgICAgICAgc3RkOjpsaXN0PHN0ZDo6dW5pcXVlX3B0cjxDMldvcms+PiBpdGVtczsKKyAgICAgICAgaXRlbXMucHVzaF9iYWNrKHN0ZDo6bW92ZSh3b3JrKSk7CisKKyAgICAgICAgLy8gRE8gVEhFIEVOQ09ESU5HCisgICAgICAgIEFTU0VSVF9FUShjb21wb25lbnQtPnF1ZXVlKCZpdGVtcyksIEMyX09LKTsKKyAgICAgICAgQUxPR1YoIkZyYW1lICMlZCBzaXplID0gJWQgcXVldWVkIiwgZnJhbWVJRCwgYnl0ZXNDb3VudCk7CisgICAgICAgIG5GcmFtZXMtLTsKKyAgICAgICAgdGltZXN0YW1wICs9IHRpbWVzdGFtcEluY3I7CisgICAgICAgIGZyYW1lSUQrKzsKKyAgICAgICAgbWF4UmV0cnkgPSAwOworICAgIH0KK30KKwordm9pZCB3YWl0T25JbnB1dENvbnN1bXB0aW9uKHN0ZDo6bXV0ZXggJnF1ZXVlTG9jaywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGQ6OmNvbmRpdGlvbl92YXJpYWJsZSAmcXVldWVDb25kaXRpb24sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RkOjpsaXN0PHN0ZDo6dW5pcXVlX3B0cjxDMldvcms+PiAmd29ya1F1ZXVlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBidWZmZXJDb3VudCA9IE1BWF9JTlBVVF9CVUZGRVJTKSB7CisgICAgdHlwZWRlZiBzdGQ6OnVuaXF1ZV9sb2NrPHN0ZDo6bXV0ZXg+IFVMb2NrOworICAgIHVpbnQzMl90IHF1ZXVlU2l6ZTsKKyAgICBpbnQgbWF4UmV0cnkgPSAwOworICAgIHsKKyAgICAgICAgVUxvY2sgbChxdWV1ZUxvY2spOworICAgICAgICBxdWV1ZVNpemUgPSB3b3JrUXVldWUuc2l6ZSgpOworICAgIH0KKyAgICB3aGlsZSAoKG1heFJldHJ5IDwgTUFYX1JFVFJZKSAmJiAocXVldWVTaXplIDwgYnVmZmVyQ291bnQpKSB7CisgICAgICAgIFVMb2NrIGwocXVldWVMb2NrKTsKKyAgICAgICAgaWYgKHF1ZXVlU2l6ZSAhPSB3b3JrUXVldWUuc2l6ZSgpKSB7CisgICAgICAgICAgICBxdWV1ZVNpemUgPSB3b3JrUXVldWUuc2l6ZSgpOworICAgICAgICAgICAgbWF4UmV0cnkgPSAwOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgcXVldWVDb25kaXRpb24ud2FpdF9mb3IobCwgVElNRV9PVVQpOworICAgICAgICAgICAgbWF4UmV0cnkrKzsKKyAgICAgICAgfQorICAgIH0KK30KKworCitURVNUX0YoQ29kZWMyVmlkZW9FbmNIaWRsVGVzdCwgdmFsaWRhdGVDb21wTmFtZSkgeworICAgIGlmIChtRGlzYWJsZVRlc3QpIHJldHVybjsKKyAgICBBTE9HVigiQ2hlY2tzIGlmIHRoZSBnaXZlbiBjb21wb25lbnQgaXMgYSB2YWxpZCB2aWRlbyBjb21wb25lbnQiKTsKKyAgICB2YWxpZGF0ZUNvbXBvbmVudChtQ29tcG9uZW50LCBtQ29tcE5hbWUsIG1EaXNhYmxlVGVzdCk7CisgICAgQVNTRVJUX0VRKG1EaXNhYmxlVGVzdCwgZmFsc2UpOworfQorCitURVNUX0YoQ29kZWMyVmlkZW9FbmNIaWRsVGVzdCwgRW5jb2RlVGVzdCkgeworICAgIGRlc2NyaXB0aW9uKCJFbmNvZGVzIGlucHV0IGZpbGUiKTsKKyAgICBpZiAobURpc2FibGVUZXN0KSByZXR1cm47CisKKyAgICBjaGFyIG1VUkxbNTEyXTsKKyAgICBpbnQzMl90IG5XaWR0aCA9IEVOQ19ERUZBVUxUX0ZSQU1FX1dJRFRIOworICAgIGludDMyX3QgbkhlaWdodCA9IEVOQ19ERUZBVUxUX0ZSQU1FX0hFSUdIVDsKKworICAgIHN0cmNweShtVVJMLCBnRW52LT5nZXRSZXMoKS5jX3N0cigpKTsKKyAgICBHZXRVUkxGb3JDb21wb25lbnQobVVSTCk7CisKKyAgICBzdGQ6Omlmc3RyZWFtIGVsZVN0cmVhbTsKKyAgICBlbGVTdHJlYW0ub3BlbihtVVJMLCBzdGQ6Omlmc3RyZWFtOjpiaW5hcnkpOworICAgIEFTU0VSVF9FUShlbGVTdHJlYW0uaXNfb3BlbigpLCB0cnVlKSA8PCBtVVJMIDw8ICIgZmlsZSBub3QgZm91bmQiOworICAgIEFMT0dWKCJtVVJMIDogJXMiLCBtVVJMKTsKKworICAgIHNldHVwQ29uZmlnUGFyYW0obldpZHRoLCBuSGVpZ2h0KTsKKyAgICBpZiAoIW1Db25maWcpIHsKKyAgICAgICAgc3RkOjpjb3V0IDw8ICJbICAgV0FSTiAgIF0gVGVzdCBTa2lwcGVkIFxuIjsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBBU1NFUlRfRVEobUNvbXBvbmVudC0+c3RhcnQoKSwgQzJfT0spOworICAgIEFTU0VSVF9OT19GQVRBTF9GQUlMVVJFKAorICAgICAgICBlbmNvZGVORnJhbWVzKG1Db21wb25lbnQsIG1RdWV1ZUxvY2ssIG1RdWV1ZUNvbmRpdGlvbiwgbVdvcmtRdWV1ZSwKKyAgICAgICAgICAgICAgICAgICAgICBtRmx1c2hlZEluZGljZXMsIG1HcmFwaGljUG9vbCwgZWxlU3RyZWFtLAorICAgICAgICAgICAgICAgICAgICAgIDAsIEVOQ19OVU1fRlJBTUVTLCBuV2lkdGgsIG5IZWlnaHQpKTsKKworICAgIC8vIGJsb2NraW5nIGNhbGwgdG8gZW5zdXJlcyBhcHBsaWNhdGlvbiB0byBXYWl0IHRpbGwgYWxsIHRoZSBpbnB1dHMgYXJlCisgICAgLy8gY29uc3VtZWQKKyAgICBBTE9HRCgiV2FpdGluZyBmb3IgaW5wdXQgY29uc3VtcHRpb24iKTsKKyAgICBBU1NFUlRfTk9fRkFUQUxfRkFJTFVSRSgKKyAgICAgICAgd2FpdE9uSW5wdXRDb25zdW1wdGlvbihtUXVldWVMb2NrLCBtUXVldWVDb25kaXRpb24sIG1Xb3JrUXVldWUpKTsKKworICAgIGVsZVN0cmVhbS5jbG9zZSgpOworICAgIGlmIChtRnJhbWVzUmVjZWl2ZWQgIT0gRU5DX05VTV9GUkFNRVMpIHsKKyAgICAgICAgQUxPR0UoIklucHV0IGJ1ZmZlciBjb3VudCBhbmQgT3V0cHV0IGJ1ZmZlciBjb3VudCBtaXNtYXRjaCIpOworICAgICAgICBBTE9HRSgiZnJhbWVzUmVjZWl2ZWQgOiAlZCBpbnB1dEZyYW1lcyA6ICVkIiwgbUZyYW1lc1JlY2VpdmVkLAorICAgICAgICAgICAgICBFTkNfTlVNX0ZSQU1FUyk7CisgICAgICAgIEFTU0VSVF9UUlVFKGZhbHNlKTsKKyAgICB9CisKKyAgICBpZiAoIW1Dc2QgJiYgKG1Db21wTmFtZSAhPSB2cDggJiYgbUNvbXBOYW1lICE9IHZwOSkpIHsKKyAgICAgICAgQVNTRVJUX1RSVUUoZmFsc2UpIDw8ICJDU0QgQnVmZmVyIG5vdCByZWNlaXZlZCI7CisgICAgfQorCisgICAgaWYgKG1Dc2QgJiYgKG1Db21wTmFtZSA9PSB2cDggfHwgbUNvbXBOYW1lID09IHZwOSkpIHsKKyAgICAgICAgQVNTRVJUX1RSVUUoZmFsc2UpIDw8ICJDU0QgQnVmZmVyIG5vdCBleHBlY3RlZCI7CisgICAgfQorCisgICAgQVNTRVJUX0VRKG1Db21wb25lbnQtPnN0b3AoKSwgQzJfT0spOworfQorCitURVNUX0YoQ29kZWMyVmlkZW9FbmNIaWRsVGVzdCwgRU9TVGVzdCkgeworICAgIGRlc2NyaXB0aW9uKCJUZXN0IGVtcHR5IGlucHV0IGJ1ZmZlciB3aXRoIEVPUyBmbGFnIik7CisgICAgaWYgKG1EaXNhYmxlVGVzdCkgcmV0dXJuOworICAgIEFTU0VSVF9FUShtQ29tcG9uZW50LT5zdGFydCgpLCBDMl9PSyk7CisKKyAgICB0eXBlZGVmIHN0ZDo6dW5pcXVlX2xvY2s8c3RkOjptdXRleD4gVUxvY2s7CisgICAgc3RkOjp1bmlxdWVfcHRyPEMyV29yaz4gd29yazsKKyAgICB7CisgICAgICAgIFVMb2NrIGwobVF1ZXVlTG9jayk7CisgICAgICAgIGlmICghbVdvcmtRdWV1ZS5lbXB0eSgpKSB7CisgICAgICAgICAgICB3b3JrLnN3YXAobVdvcmtRdWV1ZS5mcm9udCgpKTsKKyAgICAgICAgICAgIG1Xb3JrUXVldWUucG9wX2Zyb250KCk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBBTE9HRSgibVdvcmtRdWV1ZSBFbXB0eSBpcyBub3QgZXhwZWN0ZWQgYXQgdGhlIHN0YXJ0IG9mIHRoZSB0ZXN0Iik7CisgICAgICAgICAgICBBU1NFUlRfVFJVRShmYWxzZSk7CisgICAgICAgIH0KKyAgICB9CisgICAgQVNTRVJUX05FKHdvcmssIG51bGxwdHIpOworICAgIHdvcmstPmlucHV0LmZsYWdzID0gKEMyRnJhbWVEYXRhOjpmbGFnc190KUMyRnJhbWVEYXRhOjpGTEFHX0VORF9PRl9TVFJFQU07CisgICAgd29yay0+aW5wdXQub3JkaW5hbC50aW1lc3RhbXAgPSAwOworICAgIHdvcmstPmlucHV0Lm9yZGluYWwuZnJhbWVJbmRleCA9IDA7CisgICAgd29yay0+aW5wdXQuYnVmZmVycy5jbGVhcigpOworICAgIHdvcmstPndvcmtsZXRzLmNsZWFyKCk7CisgICAgd29yay0+d29ya2xldHMuZW1wbGFjZV9iYWNrKG5ldyBDMldvcmtsZXQpOworCisgICAgc3RkOjpsaXN0PHN0ZDo6dW5pcXVlX3B0cjxDMldvcms+PiBpdGVtczsKKyAgICBpdGVtcy5wdXNoX2JhY2soc3RkOjptb3ZlKHdvcmspKTsKKyAgICBBU1NFUlRfRVEobUNvbXBvbmVudC0+cXVldWUoJml0ZW1zKSwgQzJfT0spOworICAgIHVpbnQzMl90IHF1ZXVlU2l6ZTsKKyAgICB7CisgICAgICAgIFVMb2NrIGwobVF1ZXVlTG9jayk7CisgICAgICAgIHF1ZXVlU2l6ZSA9IG1Xb3JrUXVldWUuc2l6ZSgpOworICAgICAgICBpZiAocXVldWVTaXplIDwgTUFYX0lOUFVUX0JVRkZFUlMpIHsKKyAgICAgICAgICAgIG1RdWV1ZUNvbmRpdGlvbi53YWl0X2ZvcihsLCBUSU1FX09VVCk7CisgICAgICAgIH0KKyAgICB9CisgICAgQVNTRVJUX0VRKG1Fb3MsIHRydWUpOworICAgIEFTU0VSVF9FUShtQ29tcG9uZW50LT5zdG9wKCksIEMyX09LKTsKK30KKworVEVTVF9GKENvZGVjMlZpZGVvRW5jSGlkbFRlc3QsIEVtcHR5QnVmZmVyVGVzdCkgeworICAgIGRlc2NyaXB0aW9uKCJUZXN0cyBlbXB0eSBpbnB1dCBidWZmZXIiKTsKKyAgICBpZiAobURpc2FibGVUZXN0KSByZXR1cm47CisgICAgQVNTRVJUX0VRKG1Db21wb25lbnQtPnN0YXJ0KCksIEMyX09LKTsKKworICAgIHR5cGVkZWYgc3RkOjp1bmlxdWVfbG9jazxzdGQ6Om11dGV4PiBVTG9jazsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8QzJXb3JrPiB3b3JrOworICAgIHsKKyAgICAgICAgVUxvY2sgbChtUXVldWVMb2NrKTsKKyAgICAgICAgaWYgKCFtV29ya1F1ZXVlLmVtcHR5KCkpIHsKKyAgICAgICAgICAgIHdvcmsuc3dhcChtV29ya1F1ZXVlLmZyb250KCkpOworICAgICAgICAgICAgbVdvcmtRdWV1ZS5wb3BfZnJvbnQoKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIEFMT0dFKCJtV29ya1F1ZXVlIEVtcHR5IGlzIG5vdCBleHBlY3RlZCBhdCB0aGUgc3RhcnQgb2YgdGhlIHRlc3QiKTsKKyAgICAgICAgICAgIEFTU0VSVF9UUlVFKGZhbHNlKTsKKyAgICAgICAgfQorICAgIH0KKyAgICBBU1NFUlRfTkUod29yaywgbnVsbHB0cik7CisgICAgd29yay0+aW5wdXQuZmxhZ3MgPSAoQzJGcmFtZURhdGE6OmZsYWdzX3QpMDsKKyAgICB3b3JrLT5pbnB1dC5vcmRpbmFsLnRpbWVzdGFtcCA9IDA7CisgICAgd29yay0+aW5wdXQub3JkaW5hbC5mcmFtZUluZGV4ID0gMDsKKyAgICB3b3JrLT5pbnB1dC5idWZmZXJzLmNsZWFyKCk7CisgICAgd29yay0+d29ya2xldHMuY2xlYXIoKTsKKyAgICB3b3JrLT53b3JrbGV0cy5lbXBsYWNlX2JhY2sobmV3IEMyV29ya2xldCk7CisKKyAgICBzdGQ6Omxpc3Q8c3RkOjp1bmlxdWVfcHRyPEMyV29yaz4+IGl0ZW1zOworICAgIGl0ZW1zLnB1c2hfYmFjayhzdGQ6Om1vdmUod29yaykpOworICAgIEFTU0VSVF9FUShtQ29tcG9uZW50LT5xdWV1ZSgmaXRlbXMpLCBDMl9PSyk7CisgICAgdWludDMyX3QgcXVldWVTaXplOworICAgIHsKKyAgICAgICAgVUxvY2sgbChtUXVldWVMb2NrKTsKKyAgICAgICAgcXVldWVTaXplID0gbVdvcmtRdWV1ZS5zaXplKCk7CisgICAgICAgIGlmIChxdWV1ZVNpemUgPCBNQVhfSU5QVVRfQlVGRkVSUykgeworICAgICAgICAgICAgbVF1ZXVlQ29uZGl0aW9uLndhaXRfZm9yKGwsIFRJTUVfT1VUKTsKKyAgICAgICAgfQorICAgIH0KKyAgICBBU1NFUlRfRVEobVdvcmtRdWV1ZS5zaXplKCksICh1aW50MzJfdClNQVhfSU5QVVRfQlVGRkVSUyk7CisgICAgQVNTRVJUX0VRKG1Db21wb25lbnQtPnN0b3AoKSwgQzJfT0spOworfQorCitURVNUX0YoQ29kZWMyVmlkZW9FbmNIaWRsVGVzdCwgRmx1c2hUZXN0KSB7CisgICAgZGVzY3JpcHRpb24oIlRlc3QgUmVxdWVzdCBmb3IgZmx1c2giKTsKKyAgICBpZiAobURpc2FibGVUZXN0KSByZXR1cm47CisgICAgQVNTRVJUX0VRKG1Db21wb25lbnQtPnN0YXJ0KCksIEMyX09LKTsKKworICAgIHR5cGVkZWYgc3RkOjp1bmlxdWVfbG9jazxzdGQ6Om11dGV4PiBVTG9jazsKKyAgICBjaGFyIG1VUkxbNTEyXTsKKyAgICBpbnQzMl90IG5XaWR0aCA9IEVOQ19ERUZBVUxUX0ZSQU1FX1dJRFRIOworICAgIGludDMyX3QgbkhlaWdodCA9IEVOQ19ERUZBVUxUX0ZSQU1FX0hFSUdIVDsKKyAgICBzdHJjcHkobVVSTCwgZ0Vudi0+Z2V0UmVzKCkuY19zdHIoKSk7CisgICAgR2V0VVJMRm9yQ29tcG9uZW50KG1VUkwpOworICAgIHNldHVwQ29uZmlnUGFyYW0obldpZHRoLCBuSGVpZ2h0KTsKKworICAgIC8vIFNldHRpbmcgZGVmYXVsdCBjb25maWd1cmF0aW9uCisgICAgbUZsdXNoZWRJbmRpY2VzLmNsZWFyKCk7CisgICAgc3RkOjppZnN0cmVhbSBlbGVTdHJlYW07CisgICAgdWludDMyX3QgbnVtRnJhbWVzRmx1c2hlZCA9IDEwOworICAgIHVpbnQzMl90IG51bUZyYW1lcyA9IEVOQ19OVU1fRlJBTUVTOworICAgIGVsZVN0cmVhbS5vcGVuKG1VUkwsIHN0ZDo6aWZzdHJlYW06OmJpbmFyeSk7CisgICAgQVNTRVJUX0VRKGVsZVN0cmVhbS5pc19vcGVuKCksIHRydWUpOworICAgIEFMT0dWKCJtVVJMIDogJXMiLCBtVVJMKTsKKyAgICBBU1NFUlRfTk9fRkFUQUxfRkFJTFVSRSgKKyAgICAgICAgZW5jb2RlTkZyYW1lcyhtQ29tcG9uZW50LCBtUXVldWVMb2NrLCBtUXVldWVDb25kaXRpb24sIG1Xb3JrUXVldWUsCisgICAgICAgICAgICAgICAgICAgICAgbUZsdXNoZWRJbmRpY2VzLCBtR3JhcGhpY1Bvb2wsIGVsZVN0cmVhbSwKKyAgICAgICAgICAgICAgICAgICAgICAwLCBudW1GcmFtZXNGbHVzaGVkLCBuV2lkdGgsIG5IZWlnaHQpKTsKKyAgICBzdGQ6Omxpc3Q8c3RkOjp1bmlxdWVfcHRyPEMyV29yaz4+IGZsdXNoZWRXb3JrOworICAgIGMyX3N0YXR1c190IGVyciA9CisgICAgICAgIG1Db21wb25lbnQtPmZsdXNoKEMyQ29tcG9uZW50OjpGTFVTSF9DT01QT05FTlQsICZmbHVzaGVkV29yayk7CisgICAgQVNTRVJUX0VRKGVyciwgQzJfT0spOworICAgIEFTU0VSVF9OT19GQVRBTF9GQUlMVVJFKAorICAgICAgICB3YWl0T25JbnB1dENvbnN1bXB0aW9uKG1RdWV1ZUxvY2ssIG1RdWV1ZUNvbmRpdGlvbiwgbVdvcmtRdWV1ZSwKKyAgICAgICAgICAgIChzaXplX3QpTUFYX0lOUFVUX0JVRkZFUlMgLSBmbHVzaGVkV29yay5zaXplKCkpKTsKKyAgICB1aW50NjRfdCBmcmFtZUluZGV4OworICAgIHsKKyAgICAgICAgLy9VcGRhdGUgbUZsdXNoZWRJbmRpY2VzIGJhc2VkIG9uIHRoZSBpbmRleCByZWNlaXZlZCBmcm9tIGZsdXNoKCkKKyAgICAgICAgVUxvY2sgbChtUXVldWVMb2NrKTsKKyAgICAgICAgZm9yIChzdGQ6OnVuaXF1ZV9wdHI8QzJXb3JrPiYgd29yayA6IGZsdXNoZWRXb3JrKSB7CisgICAgICAgICAgICBBU1NFUlRfTkUod29yaywgbnVsbHB0cik7CisgICAgICAgICAgICBmcmFtZUluZGV4ID0gd29yay0+aW5wdXQub3JkaW5hbC5mcmFtZUluZGV4LnBlZWt1KCk7CisgICAgICAgICAgICBzdGQ6Omxpc3Q8dWludDY0X3Q+OjppdGVyYXRvciBmcmFtZUluZGV4SXQgPSBzdGQ6OmZpbmQoCisgICAgICAgICAgICAgICAgbUZsdXNoZWRJbmRpY2VzLmJlZ2luKCksIG1GbHVzaGVkSW5kaWNlcy5lbmQoKSwgZnJhbWVJbmRleCk7CisgICAgICAgICAgICBpZiAoIW1GbHVzaGVkSW5kaWNlcy5lbXB0eSgpICYmCisgICAgICAgICAgICAgICAgKGZyYW1lSW5kZXhJdCAhPSBtRmx1c2hlZEluZGljZXMuZW5kKCkpKSB7CisgICAgICAgICAgICAgICAgbUZsdXNoZWRJbmRpY2VzLmVyYXNlKGZyYW1lSW5kZXhJdCk7CisgICAgICAgICAgICAgICAgd29yay0+aW5wdXQuYnVmZmVycy5jbGVhcigpOworICAgICAgICAgICAgICAgIHdvcmstPndvcmtsZXRzLmNsZWFyKCk7CisgICAgICAgICAgICAgICAgbVdvcmtRdWV1ZS5wdXNoX2JhY2soc3RkOjptb3ZlKHdvcmspKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKyAgICBtRmx1c2hlZEluZGljZXMuY2xlYXIoKTsKKyAgICBBU1NFUlRfTk9fRkFUQUxfRkFJTFVSRSgKKyAgICAgICAgZW5jb2RlTkZyYW1lcyhtQ29tcG9uZW50LCBtUXVldWVMb2NrLCBtUXVldWVDb25kaXRpb24sIG1Xb3JrUXVldWUsCisgICAgICAgICAgICAgICAgICAgICAgbUZsdXNoZWRJbmRpY2VzLCBtR3JhcGhpY1Bvb2wsIGVsZVN0cmVhbSwKKyAgICAgICAgICAgICAgICAgICAgICBudW1GcmFtZXNGbHVzaGVkLCBudW1GcmFtZXMgLSBudW1GcmFtZXNGbHVzaGVkLAorICAgICAgICAgICAgICAgICAgICAgIG5XaWR0aCwgbkhlaWdodCwgdHJ1ZSkpOworICAgIGVsZVN0cmVhbS5jbG9zZSgpOworICAgIGVyciA9IG1Db21wb25lbnQtPmZsdXNoKEMyQ29tcG9uZW50OjpGTFVTSF9DT01QT05FTlQsICZmbHVzaGVkV29yayk7CisgICAgQVNTRVJUX0VRKGVyciwgQzJfT0spOworICAgIEFTU0VSVF9OT19GQVRBTF9GQUlMVVJFKAorICAgICAgICB3YWl0T25JbnB1dENvbnN1bXB0aW9uKG1RdWV1ZUxvY2ssIG1RdWV1ZUNvbmRpdGlvbiwgbVdvcmtRdWV1ZSwKKyAgICAgICAgICAgIChzaXplX3QpTUFYX0lOUFVUX0JVRkZFUlMgLSBmbHVzaGVkV29yay5zaXplKCkpKTsKKyAgICB7CisgICAgICAgIC8vVXBkYXRlIG1GbHVzaGVkSW5kaWNlcyBiYXNlZCBvbiB0aGUgaW5kZXggcmVjZWl2ZWQgZnJvbSBmbHVzaCgpCisgICAgICAgIFVMb2NrIGwobVF1ZXVlTG9jayk7CisgICAgICAgIGZvciAoc3RkOjp1bmlxdWVfcHRyPEMyV29yaz4mIHdvcmsgOiBmbHVzaGVkV29yaykgeworICAgICAgICAgICAgQVNTRVJUX05FKHdvcmssIG51bGxwdHIpOworICAgICAgICAgICAgZnJhbWVJbmRleCA9IHdvcmstPmlucHV0Lm9yZGluYWwuZnJhbWVJbmRleC5wZWVrdSgpOworICAgICAgICAgICAgc3RkOjpsaXN0PHVpbnQ2NF90Pjo6aXRlcmF0b3IgZnJhbWVJbmRleEl0ID0gc3RkOjpmaW5kKAorICAgICAgICAgICAgICAgIG1GbHVzaGVkSW5kaWNlcy5iZWdpbigpLCBtRmx1c2hlZEluZGljZXMuZW5kKCksIGZyYW1lSW5kZXgpOworICAgICAgICAgICAgaWYgKCFtRmx1c2hlZEluZGljZXMuZW1wdHkoKSAmJgorICAgICAgICAgICAgICAgIChmcmFtZUluZGV4SXQgIT0gbUZsdXNoZWRJbmRpY2VzLmVuZCgpKSkgeworICAgICAgICAgICAgICAgIG1GbHVzaGVkSW5kaWNlcy5lcmFzZShmcmFtZUluZGV4SXQpOworICAgICAgICAgICAgICAgIHdvcmstPmlucHV0LmJ1ZmZlcnMuY2xlYXIoKTsKKyAgICAgICAgICAgICAgICB3b3JrLT53b3JrbGV0cy5jbGVhcigpOworICAgICAgICAgICAgICAgIG1Xb3JrUXVldWUucHVzaF9iYWNrKHN0ZDo6bW92ZSh3b3JrKSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisgICAgQVNTRVJUX0VRKG1GbHVzaGVkSW5kaWNlcy5lbXB0eSgpLCB0cnVlKTsKKyAgICBBU1NFUlRfRVEobUNvbXBvbmVudC0+c3RvcCgpLCBDMl9PSyk7Cit9CisKK1RFU1RfRihDb2RlYzJWaWRlb0VuY0hpZGxUZXN0LCBJbnZhbGlkQnVmZmVyVGVzdCkgeworICAgIGRlc2NyaXB0aW9uKCJUZXN0cyBmZWVkaW5nIGxhcmdlci9zbWFsbGVyIGlucHV0IGJ1ZmZlciIpOworICAgIGlmIChtRGlzYWJsZVRlc3QpIHJldHVybjsKKyAgICBBU1NFUlRfRVEobUNvbXBvbmVudC0+c3RhcnQoKSwgQzJfT0spOworCisgICAgc3RkOjppZnN0cmVhbSBlbGVTdHJlYW07CisgICAgaW50MzJfdCBuV2lkdGggPSBFTkNfREVGQVVMVF9GUkFNRV9XSURUSCAvIDI7CisgICAgaW50MzJfdCBuSGVpZ2h0ID0gRU5DX0RFRkFVTFRfRlJBTUVfSEVJR0hUIC8gMjsKKyAgICBzZXR1cENvbmZpZ1BhcmFtKG5XaWR0aCwgbkhlaWdodCk7CisKKyAgICBBU1NFUlRfTk9fRkFUQUxfRkFJTFVSRSgKKyAgICAgICAgZW5jb2RlTkZyYW1lcyhtQ29tcG9uZW50LCBtUXVldWVMb2NrLCBtUXVldWVDb25kaXRpb24sIG1Xb3JrUXVldWUsCisgICAgICAgICAgICAgICAgICAgICAgbUZsdXNoZWRJbmRpY2VzLCBtR3JhcGhpY1Bvb2wsIGVsZVN0cmVhbSwKKyAgICAgICAgICAgICAgICAgICAgICAwLCAxLCBuV2lkdGgsIG5IZWlnaHQsIGZhbHNlLCBmYWxzZSkpOworCisgICAgLy8gRmVlZCBsYXJnZXIgaW5wdXQgYnVmZmVyLgorICAgIEFTU0VSVF9OT19GQVRBTF9GQUlMVVJFKAorICAgICAgICBlbmNvZGVORnJhbWVzKG1Db21wb25lbnQsIG1RdWV1ZUxvY2ssIG1RdWV1ZUNvbmRpdGlvbiwgbVdvcmtRdWV1ZSwKKyAgICAgICAgICAgICAgICAgICAgICBtRmx1c2hlZEluZGljZXMsIG1HcmFwaGljUG9vbCwgZWxlU3RyZWFtLAorICAgICAgICAgICAgICAgICAgICAgIDEsIDEsIG5XaWR0aCoyLCBuSGVpZ2h0KjIsIGZhbHNlLCBmYWxzZSkpOworCisgICAgLy8gRmVlZCBzbWFsbGVyIGlucHV0IGJ1ZmZlci4KKyAgICBBU1NFUlRfTk9fRkFUQUxfRkFJTFVSRSgKKyAgICAgICAgZW5jb2RlTkZyYW1lcyhtQ29tcG9uZW50LCBtUXVldWVMb2NrLCBtUXVldWVDb25kaXRpb24sIG1Xb3JrUXVldWUsCisgICAgICAgICAgICAgICAgICAgICAgbUZsdXNoZWRJbmRpY2VzLCBtR3JhcGhpY1Bvb2wsIGVsZVN0cmVhbSwKKyAgICAgICAgICAgICAgICAgICAgICAyLCAxLCBuV2lkdGgvMiwgbkhlaWdodC8yLCBmYWxzZSwgdHJ1ZSkpOworCisgICAgLy8gYmxvY2tpbmcgY2FsbCB0byBlbnN1cmVzIGFwcGxpY2F0aW9uIHRvIFdhaXQgdGlsbCBhbGwgdGhlIGlucHV0cyBhcmUKKyAgICAvLyBjb25zdW1lZAorICAgIEFMT0dEKCJXYWl0aW5nIGZvciBpbnB1dCBjb25zdW1wdGlvbiIpOworICAgIEFTU0VSVF9OT19GQVRBTF9GQUlMVVJFKAorICAgICAgICB3YWl0T25JbnB1dENvbnN1bXB0aW9uKG1RdWV1ZUxvY2ssIG1RdWV1ZUNvbmRpdGlvbiwgbVdvcmtRdWV1ZSkpOworCisgICAgaWYgKG1GcmFtZXNSZWNlaXZlZCAhPSAzKSB7CisgICAgICAgIEFMT0dFKCJJbnB1dCBidWZmZXIgY291bnQgYW5kIE91dHB1dCBidWZmZXIgY291bnQgbWlzbWF0Y2giKTsKKyAgICAgICAgQUxPR0UoImZyYW1lc1JlY2VpdmVkIDogJWQgaW5wdXRGcmFtZXMgOiAzIiwgbUZyYW1lc1JlY2VpdmVkKTsKKyAgICAgICAgQVNTRVJUX1RSVUUoZmFsc2UpOworICAgIH0KKworICAgIGlmIChtRmFpbGVkV29ya1JlY2VpdmVkID09IDApIHsKKyAgICAgICAgQUxPR0UoIkV4cGVjdGVkIGZhaWxlZCBmcmFtZSBjb3VudCBtaXNtYXRjaCIpOworICAgICAgICBBTE9HRSgiZmFpbGVkRnJhbWVzUmVjZWl2ZWQgOiAlZCIsIG1GYWlsZWRXb3JrUmVjZWl2ZWQpOworICAgICAgICBBU1NFUlRfVFJVRShmYWxzZSk7CisgICAgfQorCisgICAgQVNTRVJUX0VRKG1Db21wb25lbnQtPnN0b3AoKSwgQzJfT0spOworfQorCitjbGFzcyBDb2RlYzJWaWRlb0VuY1Jlc29sdXRpb25UZXN0IDogcHVibGljIENvZGVjMlZpZGVvRW5jSGlkbFRlc3QsCisgICAgICAgIHB1YmxpYyA6OnRlc3Rpbmc6OldpdGhQYXJhbUludGVyZmFjZTxzdGQ6OnBhaXI8aW50MzJfdCwgaW50MzJfdD4gPiB7Cit9OworCitURVNUX1AoQ29kZWMyVmlkZW9FbmNSZXNvbHV0aW9uVGVzdCwgUmVzb2x1dGlvblRlc3QpIHsKKyAgICBkZXNjcmlwdGlvbigiVGVzdHMgZW5jb2RpbmcgYXQgZGlmZmVyZW50IHJlc29sdXRpb25zIik7CisgICAgaWYgKG1EaXNhYmxlVGVzdCkgcmV0dXJuOworCisgICAgc3RkOjppZnN0cmVhbSBlbGVTdHJlYW07CisgICAgaW50MzJfdCBuV2lkdGggPSBHZXRQYXJhbSgpLmZpcnN0OworICAgIGludDMyX3QgbkhlaWdodCA9IEdldFBhcmFtKCkuc2Vjb25kOworICAgIEFMT0dEKCJUcnlpbmcgZW5jb2RlIGZvciB3aWR0aCAlZCBoZWlnaHQgJWQiLCBuV2lkdGgsIG5IZWlnaHQpOworICAgIG1Db25maWcgPSBmYWxzZTsKKyAgICBtRW9zID0gZmFsc2U7CisgICAgc2V0dXBDb25maWdQYXJhbShuV2lkdGgsIG5IZWlnaHQpOworICAgIGlmICghbUNvbmZpZykgcmV0dXJuOworICAgIEFTU0VSVF9FUShtQ29tcG9uZW50LT5zdGFydCgpLCBDMl9PSyk7CisKKyAgICBBU1NFUlRfTk9fRkFUQUxfRkFJTFVSRSgKKyAgICAgICAgZW5jb2RlTkZyYW1lcyhtQ29tcG9uZW50LCBtUXVldWVMb2NrLCBtUXVldWVDb25kaXRpb24sIG1Xb3JrUXVldWUsCisgICAgICAgICAgICAgICAgICAgICAgbUZsdXNoZWRJbmRpY2VzLCBtR3JhcGhpY1Bvb2wsIGVsZVN0cmVhbSwgMCwKKyAgICAgICAgICAgICAgICAgICAgICBNQVhfSU5QVVRfQlVGRkVSUywgbldpZHRoLCBuSGVpZ2h0KSk7CisKKyAgICBBTE9HRCgiV2FpdGluZyBmb3IgaW5wdXQgY29uc3VtcHRpb24iKTsKKyAgICBBU1NFUlRfTk9fRkFUQUxfRkFJTFVSRSgKKyAgICAgICAgd2FpdE9uSW5wdXRDb25zdW1wdGlvbihtUXVldWVMb2NrLCBtUXVldWVDb25kaXRpb24sIG1Xb3JrUXVldWUpKTsKKworICAgIEFTU0VSVF9FUShtRW9zLCB0cnVlKTsKKyAgICBBU1NFUlRfRVEobUNvbXBvbmVudC0+c3RvcCgpLCBDMl9PSyk7CisgICAgQVNTRVJUX0VRKG1Db21wb25lbnQtPnJlc2V0KCksIEMyX09LKTsKK30KK0lOU1RBTlRJQVRFX1RFU1RfQ0FTRV9QKE5vblN0ZFNpemVzLCBDb2RlYzJWaWRlb0VuY1Jlc29sdXRpb25UZXN0LCA6OnRlc3Rpbmc6OlZhbHVlcygKKyAgICBzdGQ6Om1ha2VfcGFpcig1MiwgMTgpLAorICAgIHN0ZDo6bWFrZV9wYWlyKDM2NSwgMzY1KSwKKyAgICBzdGQ6Om1ha2VfcGFpcig0ODQsIDM2MiksCisgICAgc3RkOjptYWtlX3BhaXIoMjQ0LCA0ODgpKSk7CisKK30gIC8vIGFub255bW91cyBuYW1lc3BhY2UKKworaW50IG1haW4oaW50IGFyZ2MsIGNoYXIqKiBhcmd2KSB7CisgICAgZ0VudiA9IG5ldyBDb21wb25lbnRUZXN0RW52aXJvbm1lbnQoKTsKKyAgICA6OnRlc3Rpbmc6OkFkZEdsb2JhbFRlc3RFbnZpcm9ubWVudChnRW52KTsKKyAgICA6OnRlc3Rpbmc6OkluaXRHb29nbGVUZXN0KCZhcmdjLCBhcmd2KTsKKyAgICBnRW52LT5pbml0KCZhcmdjLCBhcmd2KTsKKyAgICBpbnQgc3RhdHVzID0gZ0Vudi0+aW5pdEZyb21PcHRpb25zKGFyZ2MsIGFyZ3YpOworICAgIGlmIChzdGF0dXMgPT0gMCkgeworICAgICAgICBpbnQgc3RhdHVzID0gUlVOX0FMTF9URVNUUygpOworICAgICAgICBMT0coSU5GTykgPDwgIkMyIFRlc3QgcmVzdWx0ID0gIiA8PCBzdGF0dXM7CisgICAgfQorICAgIHJldHVybiBzdGF0dXM7Cit9CmRpZmYgLS1naXQgYS9tZWRpYS9jb2RlYzIvaGlkbC8xLjAvdnRzL3ZpZGVvL21lZGlhX2MyX3ZpZGVvX2hpZGxfdGVzdF9jb21tb24uaCBiL21lZGlhL2NvZGVjMi9oaWRsLzEuMC92dHMvdmlkZW8vbWVkaWFfYzJfdmlkZW9faGlkbF90ZXN0X2NvbW1vbi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjEyMTViMTMKLS0tIC9kZXYvbnVsbAorKysgYi9tZWRpYS9jb2RlYzIvaGlkbC8xLjAvdnRzL3ZpZGVvL21lZGlhX2MyX3ZpZGVvX2hpZGxfdGVzdF9jb21tb24uaApAQCAtMCwwICsxLDM0IEBACisvKgorICogQ29weXJpZ2h0IDIwMTgsIFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KKworI2lmbmRlZiBNRURJQV9DMl9WSURFT19ISURMX1RFU1RfQ09NTU9OX0gKKyNkZWZpbmUgTUVESUFfQzJfVklERU9fSElETF9URVNUX0NPTU1PTl9ICisKKyNkZWZpbmUgTUFYX1JFVFJZIDIwCisjZGVmaW5lIFRJTUVfT1VUIDQwMG1zCisjZGVmaW5lIE1BWF9JTlBVVF9CVUZGRVJTIDgKKyNkZWZpbmUgRU5DT0RFUl9USU1FU1RBTVBfSU5DUkVNRU5UIDQwMDAwCisjZGVmaW5lIEVOQ19OVU1fRlJBTUVTIDMyCisjZGVmaW5lIEVOQ19ERUZBVUxUX0ZSQU1FX1dJRFRIIDM1MgorI2RlZmluZSBFTkNfREVGQVVMVF9GUkFNRV9IRUlHSFQgMjg4CisjZGVmaW5lIE1BWF9JVEVSQVRJT05TIDEyOAorCisvKgorICogQ29tbW9uIHZpZGVvIHV0aWxzCisgKi8KKworCisjZW5kaWYgIC8vIE1FRElBX0MyX1ZJREVPX0hJRExfVEVTVF9DT01NT05fSApkaWZmIC0tZ2l0IGEvbWVkaWEvY29kZWMyL2hpZGwvY2xpZW50L0FuZHJvaWQuYnAgYi9tZWRpYS9jb2RlYzIvaGlkbC9jbGllbnQvQW5kcm9pZC5icApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iZGMwMmQyCi0tLSAvZGV2L251bGwKKysrIGIvbWVkaWEvY29kZWMyL2hpZGwvY2xpZW50L0FuZHJvaWQuYnAKQEAgLTAsMCArMSwzOCBAQAorY2NfbGlicmFyeSB7CisgICAgbmFtZTogImxpYmNvZGVjMl9jbGllbnQiLAorCisgICAgc3JjczogWworICAgICAgICAiY2xpZW50LmNwcCIsCisgICAgXSwKKworICAgIHNoYXJlZF9saWJzOiBbCisgICAgICAgICJhbmRyb2lkLmhhcmR3YXJlLmdyYXBoaWNzLmJ1ZmZlcnF1ZXVlQDEuMCIsCisgICAgICAgICJhbmRyb2lkLmhhcmR3YXJlLm1lZGlhLmJ1ZmZlcnBvb2xAMS4wIiwKKyAgICAgICAgImFuZHJvaWQuaGFyZHdhcmUubWVkaWEuYzJAMS4wIiwKKyAgICAgICAgImxpYmJhc2UiLAorICAgICAgICAibGliYmluZGVyIiwKKyAgICAgICAgImxpYmNvZGVjMiIsCisgICAgICAgICJsaWJjb2RlYzJfaGlkbEAxLjAiLAorICAgICAgICAibGliY29kZWMyX3ZuZGsiLAorICAgICAgICAibGliY3V0aWxzIiwKKyAgICAgICAgImxpYmd1aSIsCisgICAgICAgICJsaWJoaWRsYmFzZSIsCisgICAgICAgICJsaWJoaWRsdHJhbnNwb3J0IiwKKyAgICAgICAgImxpYmxvZyIsCisgICAgICAgICJsaWJzdGFnZWZyaWdodF9idWZmZXJwb29sQDEuMCIsCisgICAgICAgICJsaWJzdGFnZWZyaWdodF9idWZmZXJxdWV1ZV9oZWxwZXIiLAorICAgICAgICAibGlidWkiLAorICAgICAgICAibGlidXRpbHMiLAorICAgIF0sCisKKyAgICBleHBvcnRfaW5jbHVkZV9kaXJzOiBbCisgICAgICAgICJpbmNsdWRlIiwKKyAgICBdLAorCisgICAgZXhwb3J0X3NoYXJlZF9saWJfaGVhZGVyczogWworICAgICAgICAibGliY29kZWMyX2hpZGxAMS4wIiwKKyAgICAgICAgImxpYmNvZGVjMiIsCisgICAgXSwKKworfQorCmRpZmYgLS1naXQgYS9tZWRpYS9jb2RlYzIvaGlkbC9jbGllbnQvY2xpZW50LmNwcCBiL21lZGlhL2NvZGVjMi9oaWRsL2NsaWVudC9jbGllbnQuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRkZWI0ZmYKLS0tIC9kZXYvbnVsbAorKysgYi9tZWRpYS9jb2RlYzIvaGlkbC9jbGllbnQvY2xpZW50LmNwcApAQCAtMCwwICsxLDEzODggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTggVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworCisvLyNkZWZpbmUgTE9HX05ERUJVRyAwCisjZGVmaW5lIExPR19UQUcgIkNvZGVjMkNsaWVudCIKKyNpbmNsdWRlIDxsb2cvbG9nLmg+CisKKyNpbmNsdWRlIDxjb2RlYzIvaGlkbC9jbGllbnQuaD4KKworI2luY2x1ZGUgPGRlcXVlPgorI2luY2x1ZGUgPGxpbWl0cz4KKyNpbmNsdWRlIDxtYXA+CisjaW5jbHVkZSA8dHlwZV90cmFpdHM+CisjaW5jbHVkZSA8dmVjdG9yPgorCisjaW5jbHVkZSA8YW5kcm9pZC1iYXNlL3Byb3BlcnRpZXMuaD4KKyNpbmNsdWRlIDxidWZmZXJwb29sL0NsaWVudE1hbmFnZXIuaD4KKyNpbmNsdWRlIDxjdXRpbHMvbmF0aXZlX2hhbmRsZS5oPgorI2luY2x1ZGUgPGd1aS9idWZmZXJxdWV1ZS8xLjAvSDJCR3JhcGhpY0J1ZmZlclByb2R1Y2VyLmg+CisjaW5jbHVkZSA8aGlkbC9IaWRsU3VwcG9ydC5oPgorI2luY2x1ZGUgPG1lZGlhL3N0YWdlZnJpZ2h0L2JxaGVscGVyL1dHcmFwaGljQnVmZmVyUHJvZHVjZXIuaD4KKyN1bmRlZiBMT0cKKworI2luY2x1ZGUgPGFuZHJvaWQvaGFyZHdhcmUvbWVkaWEvYnVmZmVycG9vbC8xLjAvSUNsaWVudE1hbmFnZXIuaD4KKyNpbmNsdWRlIDxhbmRyb2lkL2hhcmR3YXJlL21lZGlhL2MyLzEuMC9JQ29tcG9uZW50Lmg+CisjaW5jbHVkZSA8YW5kcm9pZC9oYXJkd2FyZS9tZWRpYS9jMi8xLjAvSUNvbXBvbmVudEludGVyZmFjZS5oPgorI2luY2x1ZGUgPGFuZHJvaWQvaGFyZHdhcmUvbWVkaWEvYzIvMS4wL0lDb21wb25lbnRMaXN0ZW5lci5oPgorI2luY2x1ZGUgPGFuZHJvaWQvaGFyZHdhcmUvbWVkaWEvYzIvMS4wL0lDb21wb25lbnRTdG9yZS5oPgorI2luY2x1ZGUgPGFuZHJvaWQvaGFyZHdhcmUvbWVkaWEvYzIvMS4wL0lDb25maWd1cmFibGUuaD4KKworI2luY2x1ZGUgPEMyRGVidWcuaD4KKyNpbmNsdWRlIDxDMkJ1ZmZlclByaXYuaD4KKyNpbmNsdWRlIDxDMlBsYXRmb3JtU3VwcG9ydC5oPgorCituYW1lc3BhY2UgYW5kcm9pZCB7CisKK3VzaW5nIDo6YW5kcm9pZDo6aGFyZHdhcmU6OmhpZGxfdmVjOwordXNpbmcgOjphbmRyb2lkOjpoYXJkd2FyZTo6aGlkbF9zdHJpbmc7Cit1c2luZyA6OmFuZHJvaWQ6OmhhcmR3YXJlOjpSZXR1cm47Cit1c2luZyA6OmFuZHJvaWQ6OmhhcmR3YXJlOjpWb2lkOwordXNpbmcgOjphbmRyb2lkOjpUV0dyYXBoaWNCdWZmZXJQcm9kdWNlcjsKKwordXNpbmcgbmFtZXNwYWNlIDo6YW5kcm9pZDo6aGFyZHdhcmU6Om1lZGlhOjpjMjo6VjFfMDsKK3VzaW5nIG5hbWVzcGFjZSA6OmFuZHJvaWQ6OmhhcmR3YXJlOjptZWRpYTo6YzI6OlYxXzA6OnV0aWxzOwordXNpbmcgbmFtZXNwYWNlIDo6YW5kcm9pZDo6aGFyZHdhcmU6Om1lZGlhOjpidWZmZXJwb29sOjpWMV8wOwordXNpbmcgbmFtZXNwYWNlIDo6YW5kcm9pZDo6aGFyZHdhcmU6Om1lZGlhOjpidWZmZXJwb29sOjpWMV8wOjppbXBsZW1lbnRhdGlvbjsKKworbmFtZXNwYWNlIC8qIHVubmFtZWQgKi8geworCisvLyBjMl9zdGF0dXNfdCB2YWx1ZSB0aGF0IGNvcnJlc3BvbmRzIHRvIGh3YmluZGVyIHRyYW5zYWN0aW9uIGZhaWx1cmUuCitjb25zdGV4cHIgYzJfc3RhdHVzX3QgQzJfVFJBTlNBQ1RJT05fRkFJTEVEID0gQzJfQ09SUlVQVEVEOworCisvLyBMaXN0IG9mIGtub3duIElDb21wb25lbnRTdG9yZSBzZXJ2aWNlcyBpbiB0aGUgZGVjcmVhc2luZyBvcmRlciBvZiBwcmVmZXJlbmNlLgorY29uc3RleHByIGNvbnN0IGNoYXIqIGtDbGllbnROYW1lc1tdID0geworICAgICAgICAiZGVmYXVsdCIsCisgICAgICAgICJzb2Z0d2FyZSIsCisgICAgfTsKKworLy8gTnVtYmVyIG9mIGtub3duIElDb21wb25lbnRTdG9yZSBzZXJ2aWNlcy4KK2NvbnN0ZXhwciBzaXplX3Qga051bUNsaWVudHMgPSBzdGQ6OmV4dGVudDxkZWNsdHlwZShrQ2xpZW50TmFtZXMpPjo6dmFsdWU7CisKK3R5cGVkZWYgc3RkOjphcnJheTxzdGQ6OnNoYXJlZF9wdHI8Q29kZWMyQ2xpZW50Piwga051bUNsaWVudHM+IENsaWVudExpc3Q7CisKKy8vIENvbnZlbmllbmNlIG1ldGhvZHMgdG8gb2J0YWluIGtub3duIGNsaWVudHMuCitzdGQ6OnNoYXJlZF9wdHI8Q29kZWMyQ2xpZW50PiBnZXRDbGllbnQoc2l6ZV90IGluZGV4KSB7CisgICAgcmV0dXJuIENvZGVjMkNsaWVudDo6Q3JlYXRlRnJvbVNlcnZpY2Uoa0NsaWVudE5hbWVzW2luZGV4XSk7Cit9CisKK0NsaWVudExpc3QgZ2V0Q2xpZW50TGlzdCgpIHsKKyAgICBDbGllbnRMaXN0IGxpc3Q7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBsaXN0LnNpemUoKTsgKytpKSB7CisgICAgICAgIGxpc3RbaV0gPSBnZXRDbGllbnQoaSk7CisgICAgfQorICAgIHJldHVybiBsaXN0OworfQorCit9IC8vIHVubmFtZWQKKworLy8gQ29kZWMyQ29uZmlndXJhYmxlQ2xpZW50CisKK2NvbnN0IEMyU3RyaW5nJiBDb2RlYzJDb25maWd1cmFibGVDbGllbnQ6OmdldE5hbWUoKSBjb25zdCB7CisgICAgcmV0dXJuIG1OYW1lOworfQorCitDb2RlYzJDb25maWd1cmFibGVDbGllbnQ6OkJhc2UqIENvZGVjMkNvbmZpZ3VyYWJsZUNsaWVudDo6YmFzZSgpIGNvbnN0IHsKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8QmFzZSo+KG1CYXNlLmdldCgpKTsKK30KKworQ29kZWMyQ29uZmlndXJhYmxlQ2xpZW50OjpDb2RlYzJDb25maWd1cmFibGVDbGllbnQoCisgICAgICAgIGNvbnN0IHNwPENvZGVjMkNvbmZpZ3VyYWJsZUNsaWVudDo6QmFzZT4mIGJhc2UpIDogbUJhc2UoYmFzZSkgeworICAgIFJldHVybjx2b2lkPiB0cmFuc1N0YXR1cyA9IGJhc2UtPmdldE5hbWUoCisgICAgICAgICAgICBbdGhpc10oY29uc3QgaGlkbF9zdHJpbmcmIG5hbWUpIHsKKyAgICAgICAgICAgICAgICBtTmFtZSA9IG5hbWUuY19zdHIoKTsKKyAgICAgICAgICAgIH0pOworICAgIGlmICghdHJhbnNTdGF0dXMuaXNPaygpKSB7CisgICAgICAgIEFMT0dFKCJDYW5ub3Qgb2J0YWluIG5hbWUgZnJvbSBJQ29uZmlndXJhYmxlLiIpOworICAgIH0KK30KKworYzJfc3RhdHVzX3QgQ29kZWMyQ29uZmlndXJhYmxlQ2xpZW50OjpxdWVyeSgKKyAgICAgICAgY29uc3Qgc3RkOjp2ZWN0b3I8QzJQYXJhbSo+ICZzdGFja1BhcmFtcywKKyAgICAgICAgY29uc3Qgc3RkOjp2ZWN0b3I8QzJQYXJhbTo6SW5kZXg+ICZoZWFwUGFyYW1JbmRpY2VzLAorICAgICAgICBjMl9ibG9ja2luZ190IG1heUJsb2NrLAorICAgICAgICBzdGQ6OnZlY3RvcjxzdGQ6OnVuaXF1ZV9wdHI8QzJQYXJhbT4+KiBjb25zdCBoZWFwUGFyYW1zKSBjb25zdCB7CisgICAgaGlkbF92ZWM8UGFyYW1JbmRleD4gaW5kaWNlcygKKyAgICAgICAgICAgIHN0YWNrUGFyYW1zLnNpemUoKSArIGhlYXBQYXJhbUluZGljZXMuc2l6ZSgpKTsKKyAgICBzaXplX3QgbnVtSW5kaWNlcyA9IDA7CisgICAgZm9yIChDMlBhcmFtKiBjb25zdCYgc3RhY2tQYXJhbSA6IHN0YWNrUGFyYW1zKSB7CisgICAgICAgIGlmICghc3RhY2tQYXJhbSkgeworICAgICAgICAgICAgQUxPR1coInF1ZXJ5IC0tIG51bGwgc3RhY2sgcGFyYW0gZW5jb3VudGVyZWQuIik7CisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQorICAgICAgICBpbmRpY2VzW251bUluZGljZXMrK10gPSBzdGF0aWNfY2FzdDxQYXJhbUluZGV4PihzdGFja1BhcmFtLT5pbmRleCgpKTsKKyAgICB9CisgICAgc2l6ZV90IG51bVN0YWNrSW5kaWNlcyA9IG51bUluZGljZXM7CisgICAgZm9yIChjb25zdCBDMlBhcmFtOjpJbmRleCYgaW5kZXggOiBoZWFwUGFyYW1JbmRpY2VzKSB7CisgICAgICAgIGluZGljZXNbbnVtSW5kaWNlcysrXSA9CisgICAgICAgICAgICAgICAgc3RhdGljX2Nhc3Q8UGFyYW1JbmRleD4oc3RhdGljX2Nhc3Q8dWludDMyX3Q+KGluZGV4KSk7CisgICAgfQorICAgIGluZGljZXMucmVzaXplKG51bUluZGljZXMpOworICAgIGlmIChoZWFwUGFyYW1zKSB7CisgICAgICAgIGhlYXBQYXJhbXMtPnJlc2VydmUoaGVhcFBhcmFtcy0+c2l6ZSgpICsgbnVtSW5kaWNlcyk7CisgICAgfQorICAgIGMyX3N0YXR1c190IHN0YXR1czsKKyAgICBSZXR1cm48dm9pZD4gdHJhbnNTdGF0dXMgPSBiYXNlKCktPnF1ZXJ5KAorICAgICAgICAgICAgaW5kaWNlcywKKyAgICAgICAgICAgIG1heUJsb2NrID09IEMyX01BWV9CTE9DSywKKyAgICAgICAgICAgIFsmc3RhdHVzLCAmbnVtU3RhY2tJbmRpY2VzLCAmc3RhY2tQYXJhbXMsIGhlYXBQYXJhbXNdKAorICAgICAgICAgICAgICAgICAgICBTdGF0dXMgcywgY29uc3QgUGFyYW1zJiBwKSB7CisgICAgICAgICAgICAgICAgc3RhdHVzID0gc3RhdGljX2Nhc3Q8YzJfc3RhdHVzX3Q+KHMpOworICAgICAgICAgICAgICAgIGlmIChzdGF0dXMgIT0gQzJfT0sgJiYgc3RhdHVzICE9IEMyX0JBRF9JTkRFWCkgeworICAgICAgICAgICAgICAgICAgICBBTE9HRSgicXVlcnkgLS0gY2FsbCBmYWlsZWQuICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAiRXJyb3IgY29kZSA9ICVkIiwgc3RhdGljX2Nhc3Q8aW50PihzdGF0dXMpKTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBzdGQ6OnZlY3RvcjxDMlBhcmFtKj4gcGFyYW1Qb2ludGVyczsKKyAgICAgICAgICAgICAgICBjMl9zdGF0dXNfdCBwYXJzZVN0YXR1cyA9IHBhcnNlUGFyYW1zQmxvYigmcGFyYW1Qb2ludGVycywgcCk7CisgICAgICAgICAgICAgICAgaWYgKHBhcnNlU3RhdHVzICE9IEMyX09LKSB7CisgICAgICAgICAgICAgICAgICAgIEFMT0dFKCJxdWVyeSAtLSBlcnJvciB3aGlsZSBwYXJzaW5nIHBhcmFtcy4gIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICJFcnJvciBjb2RlID0gJWQiLCBzdGF0aWNfY2FzdDxpbnQ+KHN0YXR1cykpOworICAgICAgICAgICAgICAgICAgICBzdGF0dXMgPSBwYXJzZVN0YXR1czsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBzaXplX3QgaSA9IDA7CisgICAgICAgICAgICAgICAgZm9yIChhdXRvIGl0ID0gcGFyYW1Qb2ludGVycy5iZWdpbigpOyBpdCAhPSBwYXJhbVBvaW50ZXJzLmVuZCgpOyApIHsKKyAgICAgICAgICAgICAgICAgICAgQzJQYXJhbSogcGFyYW1Qb2ludGVyID0gKml0OworICAgICAgICAgICAgICAgICAgICBpZiAobnVtU3RhY2tJbmRpY2VzID4gMCkgeworICAgICAgICAgICAgICAgICAgICAgICAgLS1udW1TdGFja0luZGljZXM7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXBhcmFtUG9pbnRlcikgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFMT0dXKCJxdWVyeSAtLSBudWxsIHN0YWNrIHBhcmFtLiIpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICsraXQ7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKDsgaSA8IHN0YWNrUGFyYW1zLnNpemUoKSAmJiAhc3RhY2tQYXJhbXNbaV07ICkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICsraTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpID49IHN0YWNrUGFyYW1zLnNpemUoKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFMT0dFKCJxdWVyeSAtLSB1bmV4cGVjdGVkIGVycm9yLiIpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXR1cyA9IEMyX0NPUlJVUFRFRDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoc3RhY2tQYXJhbXNbaV0tPmluZGV4KCkgIT0gcGFyYW1Qb2ludGVyLT5pbmRleCgpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgQUxPR1coInF1ZXJ5IC0tIHBhcmFtIHNraXBwZWQuIGluZGV4ID0gJWQiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGljX2Nhc3Q8aW50PihzdGFja1BhcmFtc1tpXS0+aW5kZXgoKSkpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YWNrUGFyYW1zW2krK10tPmludmFsaWRhdGUoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICghc3RhY2tQYXJhbXNbaSsrXS0+dXBkYXRlRnJvbSgqcGFyYW1Qb2ludGVyKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFMT0dXKCJxdWVyeSAtLSBwYXJhbSB1cGRhdGUgZmFpbGVkLiBpbmRleCA9ICVkIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRpY19jYXN0PGludD4ocGFyYW1Qb2ludGVyLT5pbmRleCgpKSk7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXBhcmFtUG9pbnRlcikgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFMT0dXKCJxdWVyeSAtLSBudWxsIGhlYXAgcGFyYW0uIik7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgKytpdDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICghaGVhcFBhcmFtcykgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFMT0dXKCJxdWVyeSAtLSB1bmV4cGVjdGVkIGV4dHJhIHN0YWNrIHBhcmFtLiIpOworICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWFwUGFyYW1zLT5lbXBsYWNlX2JhY2soQzJQYXJhbTo6Q29weSgqcGFyYW1Qb2ludGVyKSk7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgKytpdDsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9KTsKKyAgICBpZiAoIXRyYW5zU3RhdHVzLmlzT2soKSkgeworICAgICAgICBBTE9HRSgicXVlcnkgLS0gdHJhbnNhY3Rpb24gZmFpbGVkLiIpOworICAgICAgICByZXR1cm4gQzJfVFJBTlNBQ1RJT05fRkFJTEVEOworICAgIH0KKyAgICByZXR1cm4gc3RhdHVzOworfQorCitjMl9zdGF0dXNfdCBDb2RlYzJDb25maWd1cmFibGVDbGllbnQ6OmNvbmZpZygKKyAgICAgICAgY29uc3Qgc3RkOjp2ZWN0b3I8QzJQYXJhbSo+ICZwYXJhbXMsCisgICAgICAgIGMyX2Jsb2NraW5nX3QgbWF5QmxvY2ssCisgICAgICAgIHN0ZDo6dmVjdG9yPHN0ZDo6dW5pcXVlX3B0cjxDMlNldHRpbmdSZXN1bHQ+PiogY29uc3QgZmFpbHVyZXMpIHsKKyAgICBQYXJhbXMgaGlkbFBhcmFtczsKKyAgICBTdGF0dXMgaGlkbFN0YXR1cyA9IGNyZWF0ZVBhcmFtc0Jsb2IoJmhpZGxQYXJhbXMsIHBhcmFtcyk7CisgICAgaWYgKGhpZGxTdGF0dXMgIT0gU3RhdHVzOjpPSykgeworICAgICAgICBBTE9HRSgiY29uZmlnIC0tIGJhZCBpbnB1dC4iKTsKKyAgICAgICAgcmV0dXJuIEMyX1RSQU5TQUNUSU9OX0ZBSUxFRDsKKyAgICB9CisgICAgYzJfc3RhdHVzX3Qgc3RhdHVzOworICAgIFJldHVybjx2b2lkPiB0cmFuc1N0YXR1cyA9IGJhc2UoKS0+Y29uZmlnKAorICAgICAgICAgICAgaGlkbFBhcmFtcywKKyAgICAgICAgICAgIG1heUJsb2NrID09IEMyX01BWV9CTE9DSywKKyAgICAgICAgICAgIFsmc3RhdHVzLCAmcGFyYW1zLCBmYWlsdXJlc10oCisgICAgICAgICAgICAgICAgICAgIFN0YXR1cyBzLAorICAgICAgICAgICAgICAgICAgICBjb25zdCBoaWRsX3ZlYzxTZXR0aW5nUmVzdWx0PiBmLAorICAgICAgICAgICAgICAgICAgICBjb25zdCBQYXJhbXMmIG8pIHsKKyAgICAgICAgICAgICAgICBzdGF0dXMgPSBzdGF0aWNfY2FzdDxjMl9zdGF0dXNfdD4ocyk7CisgICAgICAgICAgICAgICAgaWYgKHN0YXR1cyAhPSBDMl9PSykgeworICAgICAgICAgICAgICAgICAgICBBTE9HRCgiY29uZmlnIC0tIGNhbGwgZmFpbGVkLiAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkVycm9yIGNvZGUgPSAlZCIsIHN0YXRpY19jYXN0PGludD4oc3RhdHVzKSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIHNpemVfdCBpID0gZmFpbHVyZXMtPnNpemUoKTsKKyAgICAgICAgICAgICAgICBmYWlsdXJlcy0+cmVzaXplKGkgKyBmLnNpemUoKSk7CisgICAgICAgICAgICAgICAgZm9yIChjb25zdCBTZXR0aW5nUmVzdWx0JiBzZiA6IGYpIHsKKyAgICAgICAgICAgICAgICAgICAgc3RhdHVzID0gb2JqY3B5KCYoKmZhaWx1cmVzKVtpKytdLCBzZik7CisgICAgICAgICAgICAgICAgICAgIGlmIChzdGF0dXMgIT0gQzJfT0spIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIEFMT0dFKCJjb25maWcgLS0gaW52YWxpZCByZXR1cm5lZCBTZXR0aW5nUmVzdWx0LiAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJFcnJvciBjb2RlID0gJWQiLCBzdGF0aWNfY2FzdDxpbnQ+KHN0YXR1cykpOworICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIHN0YXR1cyA9IHVwZGF0ZVBhcmFtc0Zyb21CbG9iKHBhcmFtcywgbyk7CisgICAgICAgICAgICB9KTsKKyAgICBpZiAoIXRyYW5zU3RhdHVzLmlzT2soKSkgeworICAgICAgICBBTE9HRSgiY29uZmlnIC0tIHRyYW5zYWN0aW9uIGZhaWxlZC4iKTsKKyAgICAgICAgcmV0dXJuIEMyX1RSQU5TQUNUSU9OX0ZBSUxFRDsKKyAgICB9CisgICAgcmV0dXJuIHN0YXR1czsKK30KKworYzJfc3RhdHVzX3QgQ29kZWMyQ29uZmlndXJhYmxlQ2xpZW50OjpxdWVyeVN1cHBvcnRlZFBhcmFtcygKKyAgICAgICAgc3RkOjp2ZWN0b3I8c3RkOjpzaGFyZWRfcHRyPEMyUGFyYW1EZXNjcmlwdG9yPj4qIGNvbnN0IHBhcmFtcykgY29uc3QgeworICAgIC8vIFRPRE86IENhY2hlIGFuZCBxdWVyeSBwcm9wZXJseSEKKyAgICBjMl9zdGF0dXNfdCBzdGF0dXM7CisgICAgUmV0dXJuPHZvaWQ+IHRyYW5zU3RhdHVzID0gYmFzZSgpLT5xdWVyeVN1cHBvcnRlZFBhcmFtcygKKyAgICAgICAgICAgIHN0ZDo6bnVtZXJpY19saW1pdHM8dWludDMyX3Q+OjptaW4oKSwKKyAgICAgICAgICAgIHN0ZDo6bnVtZXJpY19saW1pdHM8dWludDMyX3Q+OjptYXgoKSwKKyAgICAgICAgICAgIFsmc3RhdHVzLCBwYXJhbXNdKAorICAgICAgICAgICAgICAgICAgICBTdGF0dXMgcywKKyAgICAgICAgICAgICAgICAgICAgY29uc3QgaGlkbF92ZWM8UGFyYW1EZXNjcmlwdG9yPiYgcCkgeworICAgICAgICAgICAgICAgIHN0YXR1cyA9IHN0YXRpY19jYXN0PGMyX3N0YXR1c190PihzKTsKKyAgICAgICAgICAgICAgICBpZiAoc3RhdHVzICE9IEMyX09LKSB7CisgICAgICAgICAgICAgICAgICAgIEFMT0dFKCJxdWVyeVN1cHBvcnRlZFBhcmFtcyAtLSBjYWxsIGZhaWxlZC4gIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICJFcnJvciBjb2RlID0gJWQiLCBzdGF0aWNfY2FzdDxpbnQ+KHN0YXR1cykpOworICAgICAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIHNpemVfdCBpID0gcGFyYW1zLT5zaXplKCk7CisgICAgICAgICAgICAgICAgcGFyYW1zLT5yZXNpemUoaSArIHAuc2l6ZSgpKTsKKyAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IFBhcmFtRGVzY3JpcHRvciYgc3AgOiBwKSB7CisgICAgICAgICAgICAgICAgICAgIHN0YXR1cyA9IG9iamNweSgmKCpwYXJhbXMpW2krK10sIHNwKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKHN0YXR1cyAhPSBDMl9PSykgeworICAgICAgICAgICAgICAgICAgICAgICAgQUxPR0UoInF1ZXJ5U3VwcG9ydGVkUGFyYW1zIC0tICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImludmFsaWQgcmV0dXJuZWQgUGFyYW1EZXNjcmlwdG9yLiAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJFcnJvciBjb2RlID0gJWQiLCBzdGF0aWNfY2FzdDxpbnQ+KHN0YXR1cykpOworICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfSk7CisgICAgaWYgKCF0cmFuc1N0YXR1cy5pc09rKCkpIHsKKyAgICAgICAgQUxPR0UoInF1ZXJ5U3VwcG9ydGVkUGFyYW1zIC0tIHRyYW5zYWN0aW9uIGZhaWxlZC4iKTsKKyAgICAgICAgcmV0dXJuIEMyX1RSQU5TQUNUSU9OX0ZBSUxFRDsKKyAgICB9CisgICAgcmV0dXJuIHN0YXR1czsKK30KKworYzJfc3RhdHVzX3QgQ29kZWMyQ29uZmlndXJhYmxlQ2xpZW50OjpxdWVyeVN1cHBvcnRlZFZhbHVlcygKKyAgICAgICAgc3RkOjp2ZWN0b3I8QzJGaWVsZFN1cHBvcnRlZFZhbHVlc1F1ZXJ5PiYgZmllbGRzLAorICAgICAgICBjMl9ibG9ja2luZ190IG1heUJsb2NrKSBjb25zdCB7CisgICAgaGlkbF92ZWM8RmllbGRTdXBwb3J0ZWRWYWx1ZXNRdWVyeT4gaW5GaWVsZHMoZmllbGRzLnNpemUoKSk7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBmaWVsZHMuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgU3RhdHVzIGhpZGxTdGF0dXMgPSBvYmpjcHkoJmluRmllbGRzW2ldLCBmaWVsZHNbaV0pOworICAgICAgICBpZiAoaGlkbFN0YXR1cyAhPSBTdGF0dXM6Ok9LKSB7CisgICAgICAgICAgICBBTE9HRSgicXVlcnlTdXBwb3J0ZWRWYWx1ZXMgLS0gYmFkIGlucHV0Iik7CisgICAgICAgICAgICByZXR1cm4gQzJfVFJBTlNBQ1RJT05fRkFJTEVEOworICAgICAgICB9CisgICAgfQorCisgICAgYzJfc3RhdHVzX3Qgc3RhdHVzOworICAgIFJldHVybjx2b2lkPiB0cmFuc1N0YXR1cyA9IGJhc2UoKS0+cXVlcnlTdXBwb3J0ZWRWYWx1ZXMoCisgICAgICAgICAgICBpbkZpZWxkcywKKyAgICAgICAgICAgIG1heUJsb2NrID09IEMyX01BWV9CTE9DSywKKyAgICAgICAgICAgIFsmc3RhdHVzLCAmaW5GaWVsZHMsICZmaWVsZHNdKAorICAgICAgICAgICAgICAgICAgICBTdGF0dXMgcywKKyAgICAgICAgICAgICAgICAgICAgY29uc3QgaGlkbF92ZWM8RmllbGRTdXBwb3J0ZWRWYWx1ZXNRdWVyeVJlc3VsdD4mIHIpIHsKKyAgICAgICAgICAgICAgICBzdGF0dXMgPSBzdGF0aWNfY2FzdDxjMl9zdGF0dXNfdD4ocyk7CisgICAgICAgICAgICAgICAgaWYgKHN0YXR1cyAhPSBDMl9PSykgeworICAgICAgICAgICAgICAgICAgICBBTE9HRSgicXVlcnlTdXBwb3J0ZWRWYWx1ZXMgLS0gY2FsbCBmYWlsZWQuICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAiRXJyb3IgY29kZSA9ICVkIiwgc3RhdGljX2Nhc3Q8aW50PihzdGF0dXMpKTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBpZiAoci5zaXplKCkgIT0gZmllbGRzLnNpemUoKSkgeworICAgICAgICAgICAgICAgICAgICBBTE9HRSgicXVlcnlTdXBwb3J0ZWRWYWx1ZXMgLS0gaW5wdXQgYW5kIG91dHB1dCBsaXN0cyAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgImhhdmUgZGlmZmVyZW50IHNpemVzLiIpOworICAgICAgICAgICAgICAgICAgICBzdGF0dXMgPSBDMl9DT1JSVVBURUQ7CisgICAgICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBmaWVsZHMuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgICAgICAgICAgICAgc3RhdHVzID0gb2JqY3B5KCZmaWVsZHNbaV0sIGluRmllbGRzW2ldLCByW2ldKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKHN0YXR1cyAhPSBDMl9PSykgeworICAgICAgICAgICAgICAgICAgICAgICAgQUxPR0UoInF1ZXJ5U3VwcG9ydGVkVmFsdWVzIC0tIGludmFsaWQgcmV0dXJuZWQgdmFsdWUuICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkVycm9yIGNvZGUgPSAlZCIsIHN0YXRpY19jYXN0PGludD4oc3RhdHVzKSk7CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9KTsKKyAgICBpZiAoIXRyYW5zU3RhdHVzLmlzT2soKSkgeworICAgICAgICBBTE9HRSgicXVlcnlTdXBwb3J0ZWRWYWx1ZXMgLS0gdHJhbnNhY3Rpb24gZmFpbGVkLiIpOworICAgICAgICByZXR1cm4gQzJfVFJBTlNBQ1RJT05fRkFJTEVEOworICAgIH0KKyAgICByZXR1cm4gc3RhdHVzOworfQorCisvLyBDb2RlYzJDbGllbnQ6OkNvbXBvbmVudDo6SGlkbExpc3RlbmVyCitzdHJ1Y3QgQ29kZWMyQ2xpZW50OjpDb21wb25lbnQ6OkhpZGxMaXN0ZW5lciA6IHB1YmxpYyBJQ29tcG9uZW50TGlzdGVuZXIgeworICAgIHN0ZDo6d2Vha19wdHI8Q29tcG9uZW50PiBjb21wb25lbnQ7CisgICAgc3RkOjp3ZWFrX3B0cjxMaXN0ZW5lcj4gYmFzZTsKKworICAgIHZpcnR1YWwgUmV0dXJuPHZvaWQ+IG9uV29ya0RvbmUoY29uc3QgV29ya0J1bmRsZSYgd29ya0J1bmRsZSkgb3ZlcnJpZGUgeworICAgICAgICBzdGQ6Omxpc3Q8c3RkOjp1bmlxdWVfcHRyPEMyV29yaz4+IHdvcmtJdGVtczsKKyAgICAgICAgYzJfc3RhdHVzX3Qgc3RhdHVzID0gb2JqY3B5KCZ3b3JrSXRlbXMsIHdvcmtCdW5kbGUpOworICAgICAgICBpZiAoc3RhdHVzICE9IEMyX09LKSB7CisgICAgICAgICAgICBBTE9HSSgib25Xb3JrRG9uZSAtLSByZWNlaXZlZCBjb3JydXB0ZWQgV29ya0J1bmRsZS4gIgorICAgICAgICAgICAgICAgICAgICAic3RhdHVzID0gJWQuIiwgc3RhdGljX2Nhc3Q8aW50PihzdGF0dXMpKTsKKyAgICAgICAgICAgIHJldHVybiBWb2lkKCk7CisgICAgICAgIH0KKyAgICAgICAgLy8gcmVsZWFzZSBpbnB1dCBidWZmZXJzIHBvdGVudGlhbGx5IGhlbGQgYnkgdGhlIGNvbXBvbmVudCBmcm9tIHF1ZXVlCisgICAgICAgIHNpemVfdCBudW1EaXNjYXJkZWRJbnB1dEJ1ZmZlcnMgPSAwOworICAgICAgICBzdGQ6OnNoYXJlZF9wdHI8Q29kZWMyQ2xpZW50OjpDb21wb25lbnQ+IHN0cm9uZ0NvbXBvbmVudCA9IGNvbXBvbmVudC5sb2NrKCk7CisgICAgICAgIGlmIChzdHJvbmdDb21wb25lbnQpIHsKKyAgICAgICAgICAgIG51bURpc2NhcmRlZElucHV0QnVmZmVycyA9IHN0cm9uZ0NvbXBvbmVudC0+aGFuZGxlT25Xb3JrRG9uZSh3b3JrSXRlbXMpOworICAgICAgICB9CisgICAgICAgIGlmIChzdGQ6OnNoYXJlZF9wdHI8Q29kZWMyQ2xpZW50OjpMaXN0ZW5lcj4gbGlzdGVuZXIgPSBiYXNlLmxvY2soKSkgeworICAgICAgICAgICAgbGlzdGVuZXItPm9uV29ya0RvbmUoY29tcG9uZW50LCB3b3JrSXRlbXMsIG51bURpc2NhcmRlZElucHV0QnVmZmVycyk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBBTE9HRCgib25Xb3JrRG9uZSAtLSBsaXN0ZW5lciBkaWVkLiIpOworICAgICAgICB9CisgICAgICAgIHJldHVybiBWb2lkKCk7CisgICAgfQorCisgICAgdmlydHVhbCBSZXR1cm48dm9pZD4gb25UcmlwcGVkKAorICAgICAgICAgICAgY29uc3QgaGlkbF92ZWM8U2V0dGluZ1Jlc3VsdD4mIHNldHRpbmdSZXN1bHRzKSBvdmVycmlkZSB7CisgICAgICAgIHN0ZDo6dmVjdG9yPHN0ZDo6c2hhcmVkX3B0cjxDMlNldHRpbmdSZXN1bHQ+PiBjMlNldHRpbmdSZXN1bHRzKAorICAgICAgICAgICAgICAgIHNldHRpbmdSZXN1bHRzLnNpemUoKSk7CisgICAgICAgIGMyX3N0YXR1c190IHN0YXR1czsKKyAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBzZXR0aW5nUmVzdWx0cy5zaXplKCk7ICsraSkgeworICAgICAgICAgICAgc3RkOjp1bmlxdWVfcHRyPEMyU2V0dGluZ1Jlc3VsdD4gYzJTZXR0aW5nUmVzdWx0OworICAgICAgICAgICAgc3RhdHVzID0gb2JqY3B5KCZjMlNldHRpbmdSZXN1bHQsIHNldHRpbmdSZXN1bHRzW2ldKTsKKyAgICAgICAgICAgIGlmIChzdGF0dXMgIT0gQzJfT0spIHsKKyAgICAgICAgICAgICAgICBBTE9HSSgib25UcmlwcGVkIC0tIHJlY2VpdmVkIGNvcnJ1cHRlZCBTZXR0aW5nUmVzdWx0LiAiCisgICAgICAgICAgICAgICAgICAgICAgICAic3RhdHVzID0gJWQuIiwgc3RhdGljX2Nhc3Q8aW50PihzdGF0dXMpKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gVm9pZCgpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgYzJTZXR0aW5nUmVzdWx0c1tpXSA9IHN0ZDo6bW92ZShjMlNldHRpbmdSZXN1bHQpOworICAgICAgICB9CisgICAgICAgIGlmIChzdGQ6OnNoYXJlZF9wdHI8Q29kZWMyQ2xpZW50OjpMaXN0ZW5lcj4gbGlzdGVuZXIgPSBiYXNlLmxvY2soKSkgeworICAgICAgICAgICAgbGlzdGVuZXItPm9uVHJpcHBlZChjb21wb25lbnQsIGMyU2V0dGluZ1Jlc3VsdHMpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgQUxPR0QoIm9uVHJpcHBlZCAtLSBsaXN0ZW5lciBkaWVkLiIpOworICAgICAgICB9CisgICAgICAgIHJldHVybiBWb2lkKCk7CisgICAgfQorCisgICAgdmlydHVhbCBSZXR1cm48dm9pZD4gb25FcnJvcihTdGF0dXMgcywgdWludDMyX3QgZXJyb3JDb2RlKSBvdmVycmlkZSB7CisgICAgICAgIEFMT0dEKCJvbkVycm9yIC0tIHN0YXR1cyA9ICVkLCBlcnJvckNvZGUgPSAldS4iLAorICAgICAgICAgICAgICAgIHN0YXRpY19jYXN0PGludD4ocyksCisgICAgICAgICAgICAgICAgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KGVycm9yQ29kZSkpOworICAgICAgICBpZiAoc3RkOjpzaGFyZWRfcHRyPExpc3RlbmVyPiBsaXN0ZW5lciA9IGJhc2UubG9jaygpKSB7CisgICAgICAgICAgICBsaXN0ZW5lci0+b25FcnJvcihjb21wb25lbnQsIHMgPT0gU3RhdHVzOjpPSyA/CisgICAgICAgICAgICAgICAgICAgIGVycm9yQ29kZSA6IHN0YXRpY19jYXN0PGMyX3N0YXR1c190PihzKSk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBBTE9HRCgib25FcnJvciAtLSBsaXN0ZW5lciBkaWVkLiIpOworICAgICAgICB9CisgICAgICAgIHJldHVybiBWb2lkKCk7CisgICAgfQorCisgICAgdmlydHVhbCBSZXR1cm48dm9pZD4gb25GcmFtZXNSZW5kZXJlZCgKKyAgICAgICAgICAgIGNvbnN0IGhpZGxfdmVjPFJlbmRlcmVkRnJhbWU+JiByZW5kZXJlZEZyYW1lcykgb3ZlcnJpZGUgeworICAgICAgICBzdGQ6OnNoYXJlZF9wdHI8TGlzdGVuZXI+IGxpc3RlbmVyID0gYmFzZS5sb2NrKCk7CisgICAgICAgIHN0ZDo6dmVjdG9yPENvZGVjMkNsaWVudDo6TGlzdGVuZXI6OlJlbmRlcmVkRnJhbWU+IHJmczsKKyAgICAgICAgcmZzLnJlc2VydmUocmVuZGVyZWRGcmFtZXMuc2l6ZSgpKTsKKyAgICAgICAgZm9yIChjb25zdCBSZW5kZXJlZEZyYW1lJiByZiA6IHJlbmRlcmVkRnJhbWVzKSB7CisgICAgICAgICAgICBpZiAocmYuc2xvdElkID49IDApIHsKKyAgICAgICAgICAgICAgICBpZiAobGlzdGVuZXIpIHsKKyAgICAgICAgICAgICAgICAgICAgcmZzLmVtcGxhY2VfYmFjayhyZi5idWZmZXJRdWV1ZUlkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJmLnNsb3RJZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZi50aW1lc3RhbXBOcyk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBzdGQ6OnNoYXJlZF9wdHI8Q29kZWMyQ2xpZW50OjpDb21wb25lbnQ+IHN0cm9uZ0NvbXBvbmVudCA9CisgICAgICAgICAgICAgICAgICAgICAgICBjb21wb25lbnQubG9jaygpOworICAgICAgICAgICAgICAgIGlmIChzdHJvbmdDb21wb25lbnQpIHsKKyAgICAgICAgICAgICAgICAgICAgdWludDY0X3QgZnJhbWVJbmRleCA9IHJmLmJ1ZmZlclF1ZXVlSWQ7CisgICAgICAgICAgICAgICAgICAgIHNpemVfdCBidWZmZXJJbmRleCA9IHN0YXRpY19jYXN0PHNpemVfdD4ofnJmLnNsb3RJZCk7CisgICAgICAgICAgICAgICAgICAgIEFMT0dWKCJSZWNlaXZlZCBkZWF0aCBub3RpZmljYXRpb24gb2YgaW5wdXQgYnVmZmVyOiAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICJmcmFtZUluZGV4ID0gJWxsdSwgYnVmZmVySW5kZXggPSAlenUuIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGljX2Nhc3Q8bG9uZyBsb25nIHVuc2lnbmVkPihmcmFtZUluZGV4KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgYnVmZmVySW5kZXgpOworICAgICAgICAgICAgICAgICAgICBzdGQ6OnNoYXJlZF9wdHI8QzJCdWZmZXI+IGJ1ZmZlciA9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Ryb25nQ29tcG9uZW50LT5mcmVlSW5wdXRCdWZmZXIoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZyYW1lSW5kZXgsIGJ1ZmZlckluZGV4KTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGJ1ZmZlcikgeworICAgICAgICAgICAgICAgICAgICAgICAgbGlzdGVuZXItPm9uSW5wdXRCdWZmZXJEb25lKGJ1ZmZlcik7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgaWYgKCFyZnMuZW1wdHkoKSkgeworICAgICAgICAgICAgaWYgKGxpc3RlbmVyKSB7CisgICAgICAgICAgICAgICAgbGlzdGVuZXItPm9uRnJhbWVzUmVuZGVyZWQocmZzKTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgQUxPR0QoIm9uRnJhbWVzUmVuZGVyZWQgLS0gbGlzdGVuZXIgZGllZC4iKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICByZXR1cm4gVm9pZCgpOworICAgIH0KK307CisKKy8vIENvZGVjMkNsaWVudAorQ29kZWMyQ2xpZW50OjpCYXNlKiBDb2RlYzJDbGllbnQ6OmJhc2UoKSBjb25zdCB7CisgICAgcmV0dXJuIHN0YXRpY19jYXN0PEJhc2UqPihtQmFzZS5nZXQoKSk7Cit9CisKK0NvZGVjMkNsaWVudDo6Q29kZWMyQ2xpZW50KGNvbnN0IHNwPENvZGVjMkNsaWVudDo6QmFzZT4mIGJhc2UsIHN0ZDo6c3RyaW5nIGluc3RhbmNlTmFtZSkgOgorICAgIENvZGVjMkNvbmZpZ3VyYWJsZUNsaWVudChiYXNlKSwgbUxpc3RlZChmYWxzZSksIG1JbnN0YW5jZU5hbWUoaW5zdGFuY2VOYW1lKSB7CisgICAgUmV0dXJuPHNwPElDbGllbnRNYW5hZ2VyPj4gdHJhbnNSZXN1bHQgPSBiYXNlLT5nZXRQb29sQ2xpZW50TWFuYWdlcigpOworICAgIGlmICghdHJhbnNSZXN1bHQuaXNPaygpKSB7CisgICAgICAgIEFMT0dFKCJnZXRQb29sQ2xpZW50TWFuYWdlciAtLSBmYWlsZWQgdHJhbnNhY3Rpb24uIik7CisgICAgfSBlbHNlIHsKKyAgICAgICAgbUhvc3RQb29sTWFuYWdlciA9IHN0YXRpY19jYXN0PHNwPElDbGllbnRNYW5hZ2VyPj4odHJhbnNSZXN1bHQpOworICAgIH0KK30KKworYzJfc3RhdHVzX3QgQ29kZWMyQ2xpZW50OjpjcmVhdGVDb21wb25lbnQoCisgICAgICAgIGNvbnN0IEMyU3RyaW5nJiBuYW1lLAorICAgICAgICBjb25zdCBzdGQ6OnNoYXJlZF9wdHI8Q29kZWMyQ2xpZW50OjpMaXN0ZW5lcj4mIGxpc3RlbmVyLAorICAgICAgICBzdGQ6OnNoYXJlZF9wdHI8Q29kZWMyQ2xpZW50OjpDb21wb25lbnQ+KiBjb25zdCBjb21wb25lbnQpIHsKKworICAgIC8vIFRPRE86IEFkZCBzdXBwb3J0IGZvciBCdWZmZXJwb29sCisKKworICAgIGMyX3N0YXR1c190IHN0YXR1czsKKyAgICBzcDxDb21wb25lbnQ6OkhpZGxMaXN0ZW5lcj4gaGlkbExpc3RlbmVyID0gbmV3IENvbXBvbmVudDo6SGlkbExpc3RlbmVyKCk7CisgICAgaGlkbExpc3RlbmVyLT5iYXNlID0gbGlzdGVuZXI7CisgICAgUmV0dXJuPHZvaWQ+IHRyYW5zU3RhdHVzID0gYmFzZSgpLT5jcmVhdGVDb21wb25lbnQoCisgICAgICAgICAgICBuYW1lLAorICAgICAgICAgICAgaGlkbExpc3RlbmVyLAorICAgICAgICAgICAgQ2xpZW50TWFuYWdlcjo6Z2V0SW5zdGFuY2UoKSwKKyAgICAgICAgICAgIFsmc3RhdHVzLCBjb21wb25lbnQsIGhpZGxMaXN0ZW5lcl0oCisgICAgICAgICAgICAgICAgICAgIFN0YXR1cyBzLAorICAgICAgICAgICAgICAgICAgICBjb25zdCBzcDxJQ29tcG9uZW50PiYgYykgeworICAgICAgICAgICAgICAgIHN0YXR1cyA9IHN0YXRpY19jYXN0PGMyX3N0YXR1c190PihzKTsKKyAgICAgICAgICAgICAgICBpZiAoc3RhdHVzICE9IEMyX09LKSB7CisgICAgICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgKmNvbXBvbmVudCA9IHN0ZDo6bWFrZV9zaGFyZWQ8Q29kZWMyQ2xpZW50OjpDb21wb25lbnQ+KGMpOworICAgICAgICAgICAgICAgIGhpZGxMaXN0ZW5lci0+Y29tcG9uZW50ID0gKmNvbXBvbmVudDsKKyAgICAgICAgICAgIH0pOworICAgIGlmICghdHJhbnNTdGF0dXMuaXNPaygpKSB7CisgICAgICAgIEFMT0dFKCJjcmVhdGVDb21wb25lbnQgLS0gZmFpbGVkIHRyYW5zYWN0aW9uLiIpOworICAgICAgICByZXR1cm4gQzJfVFJBTlNBQ1RJT05fRkFJTEVEOworICAgIH0KKworICAgIGlmIChzdGF0dXMgIT0gQzJfT0spIHsKKyAgICAgICAgcmV0dXJuIHN0YXR1czsKKyAgICB9CisKKyAgICBpZiAoISpjb21wb25lbnQpIHsKKyAgICAgICAgQUxPR0UoImNyZWF0ZUNvbXBvbmVudCAtLSBudWxsIGNvbXBvbmVudC4iKTsKKyAgICAgICAgcmV0dXJuIEMyX0NPUlJVUFRFRDsKKyAgICB9CisKKyAgICBzdGF0dXMgPSAoKmNvbXBvbmVudCktPnNldERlYXRoTGlzdGVuZXIoKmNvbXBvbmVudCwgbGlzdGVuZXIpOworICAgIGlmIChzdGF0dXMgIT0gQzJfT0spIHsKKyAgICAgICAgQUxPR0UoImNyZWF0ZUNvbXBvbmVudCAtLSBzZXREZWF0aExpc3RlbmVyIHJldHVybmVkIGVycm9yOiAlZC4iLAorICAgICAgICAgICAgICAgIHN0YXRpY19jYXN0PGludD4oc3RhdHVzKSk7CisgICAgfQorCisgICAgKCpjb21wb25lbnQpLT5tQnVmZmVyUG9vbFNlbmRlci5zZXRSZWNlaXZlcihtSG9zdFBvb2xNYW5hZ2VyKTsKKyAgICByZXR1cm4gc3RhdHVzOworfQorCitjMl9zdGF0dXNfdCBDb2RlYzJDbGllbnQ6OmNyZWF0ZUludGVyZmFjZSgKKyAgICAgICAgY29uc3QgQzJTdHJpbmcmIG5hbWUsCisgICAgICAgIHN0ZDo6c2hhcmVkX3B0cjxDb2RlYzJDbGllbnQ6OkludGVyZmFjZT4qIGNvbnN0IGludGVyZmFjZSkgeworICAgIGMyX3N0YXR1c190IHN0YXR1czsKKyAgICBSZXR1cm48dm9pZD4gdHJhbnNTdGF0dXMgPSBiYXNlKCktPmNyZWF0ZUludGVyZmFjZSgKKyAgICAgICAgICAgIG5hbWUsCisgICAgICAgICAgICBbJnN0YXR1cywgaW50ZXJmYWNlXSgKKyAgICAgICAgICAgICAgICAgICAgU3RhdHVzIHMsCisgICAgICAgICAgICAgICAgICAgIGNvbnN0IHNwPElDb21wb25lbnRJbnRlcmZhY2U+JiBpKSB7CisgICAgICAgICAgICAgICAgc3RhdHVzID0gc3RhdGljX2Nhc3Q8YzJfc3RhdHVzX3Q+KHMpOworICAgICAgICAgICAgICAgIGlmIChzdGF0dXMgIT0gQzJfT0spIHsKKyAgICAgICAgICAgICAgICAgICAgQUxPR0UoImNyZWF0ZUludGVyZmFjZSAtLSBjYWxsIGZhaWxlZC4gIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICJFcnJvciBjb2RlID0gJWQiLCBzdGF0aWNfY2FzdDxpbnQ+KHN0YXR1cykpOworICAgICAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICppbnRlcmZhY2UgPSBzdGQ6Om1ha2Vfc2hhcmVkPENvZGVjMkNsaWVudDo6SW50ZXJmYWNlPihpKTsKKyAgICAgICAgICAgIH0pOworICAgIGlmICghdHJhbnNTdGF0dXMuaXNPaygpKSB7CisgICAgICAgIEFMT0dFKCJjcmVhdGVJbnRlcmZhY2UgLS0gZmFpbGVkIHRyYW5zYWN0aW9uLiIpOworICAgICAgICByZXR1cm4gQzJfVFJBTlNBQ1RJT05fRkFJTEVEOworICAgIH0KKyAgICByZXR1cm4gc3RhdHVzOworfQorCitjMl9zdGF0dXNfdCBDb2RlYzJDbGllbnQ6OmNyZWF0ZUlucHV0U3VyZmFjZSgKKyAgICAgICAgc3RkOjpzaGFyZWRfcHRyPENvZGVjMkNsaWVudDo6SW5wdXRTdXJmYWNlPiogY29uc3QgaW5wdXRTdXJmYWNlKSB7CisgICAgUmV0dXJuPHNwPElJbnB1dFN1cmZhY2U+PiB0cmFuc1Jlc3VsdCA9IGJhc2UoKS0+Y3JlYXRlSW5wdXRTdXJmYWNlKCk7CisgICAgaWYgKCF0cmFuc1Jlc3VsdC5pc09rKCkpIHsKKyAgICAgICAgQUxPR0UoImNyZWF0ZUlucHV0U3VyZmFjZSAtLSBmYWlsZWQgdHJhbnNhY3Rpb24uIik7CisgICAgICAgIHJldHVybiBDMl9UUkFOU0FDVElPTl9GQUlMRUQ7CisgICAgfQorICAgIHNwPElJbnB1dFN1cmZhY2U+IHJlc3VsdCA9IHN0YXRpY19jYXN0PHNwPElJbnB1dFN1cmZhY2U+Pih0cmFuc1Jlc3VsdCk7CisgICAgaWYgKCFyZXN1bHQpIHsKKyAgICAgICAgKmlucHV0U3VyZmFjZSA9IG51bGxwdHI7CisgICAgICAgIHJldHVybiBDMl9PSzsKKyAgICB9CisgICAgKmlucHV0U3VyZmFjZSA9IHN0ZDo6bWFrZV9zaGFyZWQ8SW5wdXRTdXJmYWNlPihyZXN1bHQpOworICAgIGlmICghKmlucHV0U3VyZmFjZSkgeworICAgICAgICBBTE9HRSgiY3JlYXRlSW5wdXRTdXJmYWNlIC0tIHVua25vd24gZXJyb3IuIik7CisgICAgICAgIHJldHVybiBDMl9DT1JSVVBURUQ7CisgICAgfQorICAgIHJldHVybiBDMl9PSzsKK30KKworY29uc3Qgc3RkOjp2ZWN0b3I8QzJDb21wb25lbnQ6OlRyYWl0cz4mIENvZGVjMkNsaWVudDo6bGlzdENvbXBvbmVudHMoKSBjb25zdCB7CisgICAgc3RkOjpsb2NrX2d1YXJkPHN0ZDo6bXV0ZXg+IGxvY2sobU11dGV4KTsKKyAgICBpZiAobUxpc3RlZCkgeworICAgICAgICByZXR1cm4gbVRyYWl0c0xpc3Q7CisgICAgfQorICAgIFJldHVybjx2b2lkPiB0cmFuc1N0YXR1cyA9IGJhc2UoKS0+bGlzdENvbXBvbmVudHMoCisgICAgICAgICAgICBbdGhpc10oY29uc3QgaGlkbF92ZWM8SUNvbXBvbmVudFN0b3JlOjpDb21wb25lbnRUcmFpdHM+JiB0KSB7CisgICAgICAgICAgICAgICAgbVRyYWl0c0xpc3QucmVzaXplKHQuc2l6ZSgpKTsKKyAgICAgICAgICAgICAgICBtQWxpYXNlc0J1ZmZlci5yZXNpemUodC5zaXplKCkpOworICAgICAgICAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgdC5zaXplKCk7ICsraSkgeworICAgICAgICAgICAgICAgICAgICBjMl9zdGF0dXNfdCBzdGF0dXMgPSBvYmpjcHkoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgJm1UcmFpdHNMaXN0W2ldLCAmbUFsaWFzZXNCdWZmZXJbaV0sIHRbaV0pOworICAgICAgICAgICAgICAgICAgICBpZiAoc3RhdHVzICE9IEMyX09LKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBBTE9HRSgibGlzdENvbXBvbmVudHMgLS0gY29ycnVwdGVkIG91dHB1dC4iKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0pOworICAgIGlmICghdHJhbnNTdGF0dXMuaXNPaygpKSB7CisgICAgICAgIEFMT0dFKCJsaXN0Q29tcG9uZW50cyAtLSBmYWlsZWQgdHJhbnNhY3Rpb24uIik7CisgICAgfQorICAgIG1MaXN0ZWQgPSB0cnVlOworICAgIHJldHVybiBtVHJhaXRzTGlzdDsKK30KKworYzJfc3RhdHVzX3QgQ29kZWMyQ2xpZW50Ojpjb3B5QnVmZmVyKAorICAgICAgICBjb25zdCBzdGQ6OnNoYXJlZF9wdHI8QzJCdWZmZXI+JiBzcmMsCisgICAgICAgIGNvbnN0IHN0ZDo6c2hhcmVkX3B0cjxDMkJ1ZmZlcj4mIGRzdCkgeworICAgIC8vIFRPRE86IEltcGxlbWVudD8KKyAgICAodm9pZClzcmM7CisgICAgKHZvaWQpZHN0OworICAgIEFMT0dFKCJjb3B5QnVmZmVyIG5vdCBpbXBsZW1lbnRlZCIpOworICAgIHJldHVybiBDMl9PTUlUVEVEOworfQorCitzdGQ6OnNoYXJlZF9wdHI8QzJQYXJhbVJlZmxlY3Rvcj4KKyAgICAgICAgQ29kZWMyQ2xpZW50OjpnZXRQYXJhbVJlZmxlY3RvcigpIHsKKyAgICAvLyBUT0RPOiB0aGlzIGlzIG5vdCBtZWFudCB0byBiZSBleHBvc2VkIGFzIEMyUGFyYW1SZWZsZWN0b3Igb24gdGhlIGNsaWVudCBzaWRlOyBpbnN0ZWFkLCBpdAorICAgIC8vIHNob3VsZCByZWZsZWN0IHRoZSBIQUwgQVBJLgorICAgIHN0cnVjdCBTaW1wbGVQYXJhbVJlZmxlY3RvciA6IHB1YmxpYyBDMlBhcmFtUmVmbGVjdG9yIHsKKyAgICAgICAgdmlydHVhbCBzdGQ6OnVuaXF1ZV9wdHI8QzJTdHJ1Y3REZXNjcmlwdG9yPiBkZXNjcmliZShDMlBhcmFtOjpDb3JlSW5kZXggY29yZUluZGV4KSBjb25zdCB7CisgICAgICAgICAgICBoaWRsX3ZlYzxQYXJhbUluZGV4PiBpbmRpY2VzKDEpOworICAgICAgICAgICAgaW5kaWNlc1swXSA9IHN0YXRpY19jYXN0PFBhcmFtSW5kZXg+KGNvcmVJbmRleC5jb3JlSW5kZXgoKSk7CisgICAgICAgICAgICBzdGQ6OnVuaXF1ZV9wdHI8QzJTdHJ1Y3REZXNjcmlwdG9yPiBkZXNjcmlwdG9yOworICAgICAgICAgICAgUmV0dXJuPHZvaWQ+IHRyYW5zU3RhdHVzID0gbUJhc2UtPmdldFN0cnVjdERlc2NyaXB0b3JzKAorICAgICAgICAgICAgICAgICAgICBpbmRpY2VzLAorICAgICAgICAgICAgICAgICAgICBbJmRlc2NyaXB0b3JdKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN0YXR1cyBzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGhpZGxfdmVjPFN0cnVjdERlc2NyaXB0b3I+JiBzZCkgeworICAgICAgICAgICAgICAgICAgICAgICAgYzJfc3RhdHVzX3Qgc3RhdHVzID0gc3RhdGljX2Nhc3Q8YzJfc3RhdHVzX3Q+KHMpOworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHN0YXR1cyAhPSBDMl9PSykgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFMT0dFKCJnZXRTdHJ1Y3REZXNjcmlwdG9ycyAtLSBjYWxsIGZhaWxlZC4gIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkVycm9yIGNvZGUgPSAlZCIsIHN0YXRpY19jYXN0PGludD4oc3RhdHVzKSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVzY3JpcHRvci5yZXNldCgpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzZC5zaXplKCkgIT0gMSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFMT0dEKCJnZXRTdHJ1Y3REZXNjcmlwdG9ycyAtLSByZXR1cm5lZCB2ZWN0b3Igb2Ygc2l6ZSAlenUuIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNkLnNpemUoKSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVzY3JpcHRvci5yZXNldCgpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIHN0YXR1cyA9IG9iamNweSgmZGVzY3JpcHRvciwgc2RbMF0pOworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHN0YXR1cyAhPSBDMl9PSykgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFMT0dEKCJnZXRTdHJ1Y3REZXNjcmlwdG9ycyAtLSBmYWlsZWQgdG8gY29udmVydC4gIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkVycm9yIGNvZGUgPSAlZCIsIHN0YXRpY19jYXN0PGludD4oc3RhdHVzKSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVzY3JpcHRvci5yZXNldCgpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgfSk7CisgICAgICAgICAgICByZXR1cm4gZGVzY3JpcHRvcjsKKyAgICAgICAgfQorCisgICAgICAgIFNpbXBsZVBhcmFtUmVmbGVjdG9yKHNwPEJhc2U+IGJhc2UpCisgICAgICAgICAgICA6IG1CYXNlKGJhc2UpIHsgfQorCisgICAgICAgIHNwPEJhc2U+IG1CYXNlOworICAgIH07CisKKyAgICByZXR1cm4gc3RkOjptYWtlX3NoYXJlZDxTaW1wbGVQYXJhbVJlZmxlY3Rvcj4oYmFzZSgpKTsKK307CisKK3N0ZDo6c2hhcmVkX3B0cjxDb2RlYzJDbGllbnQ+IENvZGVjMkNsaWVudDo6Q3JlYXRlRnJvbVNlcnZpY2UoCisgICAgICAgIGNvbnN0IGNoYXIqIGluc3RhbmNlTmFtZSwgYm9vbCB3YWl0Rm9yU2VydmljZSkgeworICAgIGlmICghaW5zdGFuY2VOYW1lKSB7CisgICAgICAgIHJldHVybiBudWxscHRyOworICAgIH0KKyAgICBzcDxCYXNlPiBiYXNlU3RvcmUgPSB3YWl0Rm9yU2VydmljZSA/CisgICAgICAgICAgICBCYXNlOjpnZXRTZXJ2aWNlKGluc3RhbmNlTmFtZSkgOgorICAgICAgICAgICAgQmFzZTo6dHJ5R2V0U2VydmljZShpbnN0YW5jZU5hbWUpOworICAgIGlmICghYmFzZVN0b3JlKSB7CisgICAgICAgIGlmICh3YWl0Rm9yU2VydmljZSkgeworICAgICAgICAgICAgQUxPR0UoIkNvZGVjMi4wIHNlcnZpY2UgaW5hY2Nlc3NpYmxlLiBDaGVjayB0aGUgZGV2aWNlIG1hbmlmZXN0LiIpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgQUxPR1coIkNvZGVjMi4wIHNlcnZpY2Ugbm90IGF2YWlsYWJsZSByaWdodCBub3cuIFRyeSBhZ2FpbiBsYXRlci4iKTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICB9CisgICAgcmV0dXJuIHN0ZDo6bWFrZV9zaGFyZWQ8Q29kZWMyQ2xpZW50PihiYXNlU3RvcmUsIGluc3RhbmNlTmFtZSk7Cit9CisKK2MyX3N0YXR1c190IENvZGVjMkNsaWVudDo6Rm9yQWxsU3RvcmVzKAorICAgICAgICBjb25zdCBzdGQ6OnN0cmluZyAma2V5LAorICAgICAgICBzdGQ6OmZ1bmN0aW9uPGMyX3N0YXR1c190KGNvbnN0IHN0ZDo6c2hhcmVkX3B0cjxDb2RlYzJDbGllbnQ+Jik+IHByZWRpY2F0ZSkgeworICAgIGMyX3N0YXR1c190IHN0YXR1cyA9IEMyX05PX0lOSVQ7ICAvLyBubyBJQ29tcG9uZW50U3RvcmVzIHByZXNlbnQKKworICAgIC8vIENhY2hlIHRoZSBtYXBwaW5nIGtleSAtPiBpbmRleCBvZiBDb2RlYzJDbGllbnQgaW4gZ2V0Q2xpZW50KCkuCisgICAgc3RhdGljIHN0ZDo6bXV0ZXgga2V5MkluZGV4TXV0ZXg7CisgICAgc3RhdGljIHN0ZDo6bWFwPHN0ZDo6c3RyaW5nLCBzaXplX3Q+IGtleTJJbmRleDsKKworICAgIC8vIEJ5IGRlZmF1bHQgdHJ5IGFsbCBzdG9yZXMuIEhvd2V2ZXIsIHRyeSB0aGUgbGFzdCBrbm93biBjbGllbnQgZmlyc3QuIElmIHRoZSBsYXN0IGtub3duCisgICAgLy8gY2xpZW50IGZhaWxzLCByZXRyeSBvbmNlLiBXZSBkbyB0aGlzIGJ5IHB1c2hpbmcgdGhlIGxhc3Qga25vd24gY2xpZW50IGluIGZyb250IG9mIHRoZQorICAgIC8vIGxpc3Qgb2YgYWxsIGNsaWVudHMuCisgICAgc3RkOjpkZXF1ZTxzaXplX3Q+IGluZGljZXM7CisgICAgZm9yIChzaXplX3QgaW5kZXggPSBrTnVtQ2xpZW50czsgaW5kZXggPiAwOyApIHsKKyAgICAgICAgaW5kaWNlcy5wdXNoX2Zyb250KC0taW5kZXgpOworICAgIH0KKworICAgIGJvb2wgd2FzTWFwcGVkID0gZmFsc2U7CisgICAgc3RkOjp1bmlxdWVfbG9jazxzdGQ6Om11dGV4PiBsb2NrKGtleTJJbmRleE11dGV4KTsKKyAgICBhdXRvIGl0ID0ga2V5MkluZGV4LmZpbmQoa2V5KTsKKyAgICBpZiAoaXQgIT0ga2V5MkluZGV4LmVuZCgpKSB7CisgICAgICAgIGluZGljZXMucHVzaF9mcm9udChpdC0+c2Vjb25kKTsKKyAgICAgICAgd2FzTWFwcGVkID0gdHJ1ZTsKKyAgICB9CisgICAgbG9jay51bmxvY2soKTsKKworICAgIGZvciAoc2l6ZV90IGluZGV4IDogaW5kaWNlcykgeworICAgICAgICBzdGQ6OnNoYXJlZF9wdHI8Q29kZWMyQ2xpZW50PiBjbGllbnQgPSBnZXRDbGllbnQoaW5kZXgpOworICAgICAgICBpZiAoY2xpZW50KSB7CisgICAgICAgICAgICBzdGF0dXMgPSBwcmVkaWNhdGUoY2xpZW50KTsKKyAgICAgICAgICAgIGlmIChzdGF0dXMgPT0gQzJfT0spIHsKKyAgICAgICAgICAgICAgICBsb2NrLmxvY2soKTsKKyAgICAgICAgICAgICAgICBrZXkySW5kZXhba2V5XSA9IGluZGV4OyAvLyB1cGRhdGUgbGFzdCBrbm93biBjbGllbnQgaW5kZXgKKyAgICAgICAgICAgICAgICByZXR1cm4gc3RhdHVzOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGlmICh3YXNNYXBwZWQpIHsKKyAgICAgICAgICAgIEFMT0dJKCJDb3VsZCBub3QgZmluZCAnJXMnIGluIGxhc3QgaW5zdGFuY2UuIFJldHJ5aW5nLi4uIiwga2V5LmNfc3RyKCkpOworICAgICAgICAgICAgd2FzTWFwcGVkID0gZmFsc2U7CisgICAgICAgIH0KKyAgICB9CisgICAgcmV0dXJuIHN0YXR1czsgIC8vIHJldHVybiB0aGUgbGFzdCBzdGF0dXMgZnJvbSBhIHZhbGlkIGNsaWVudAorfQorCitzdGQ6OnNoYXJlZF9wdHI8Q29kZWMyQ2xpZW50OjpDb21wb25lbnQ+CisgICAgICAgIENvZGVjMkNsaWVudDo6Q3JlYXRlQ29tcG9uZW50QnlOYW1lKAorICAgICAgICBjb25zdCBjaGFyKiBjb21wb25lbnROYW1lLAorICAgICAgICBjb25zdCBzdGQ6OnNoYXJlZF9wdHI8TGlzdGVuZXI+JiBsaXN0ZW5lciwKKyAgICAgICAgc3RkOjpzaGFyZWRfcHRyPENvZGVjMkNsaWVudD4qIG93bmVyKSB7CisgICAgc3RkOjpzaGFyZWRfcHRyPENvbXBvbmVudD4gY29tcG9uZW50OworICAgIGMyX3N0YXR1c190IHN0YXR1cyA9IEZvckFsbFN0b3JlcygKKyAgICAgICAgICAgIGNvbXBvbmVudE5hbWUsCisgICAgICAgICAgICBbb3duZXIsICZjb21wb25lbnQsIGNvbXBvbmVudE5hbWUsICZsaXN0ZW5lcl0oCisgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0ZDo6c2hhcmVkX3B0cjxDb2RlYzJDbGllbnQ+ICZjbGllbnQpIC0+IGMyX3N0YXR1c190IHsKKyAgICAgICAgICAgICAgICBjMl9zdGF0dXNfdCBzdGF0dXMgPSBjbGllbnQtPmNyZWF0ZUNvbXBvbmVudChjb21wb25lbnROYW1lLCBsaXN0ZW5lciwgJmNvbXBvbmVudCk7CisgICAgICAgICAgICAgICAgaWYgKHN0YXR1cyA9PSBDMl9PSykgeworICAgICAgICAgICAgICAgICAgICBpZiAob3duZXIpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICpvd25lciA9IGNsaWVudDsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoc3RhdHVzICE9IEMyX05PVF9GT1VORCkgeworICAgICAgICAgICAgICAgICAgICBBTE9HRCgiSUNvbXBvbmVudFN0b3JlKCVzKTo6Y3JlYXRlQ29tcG9uZW50KCclcycpIHJldHVybmVkICVzIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGllbnQtPmdldEluc3RhbmNlTmFtZSgpLmNfc3RyKCksIGNvbXBvbmVudE5hbWUsIGFzU3RyaW5nKHN0YXR1cykpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICByZXR1cm4gc3RhdHVzOworICAgICAgICAgICAgfSk7CisgICAgaWYgKHN0YXR1cyAhPSBDMl9PSykgeworICAgICAgICBBTE9HSSgiQ291bGQgbm90IGNyZWF0ZSBjb21wb25lbnQgJyVzJyAoJXMpIiwgY29tcG9uZW50TmFtZSwgYXNTdHJpbmcoc3RhdHVzKSk7CisgICAgfQorICAgIHJldHVybiBjb21wb25lbnQ7Cit9CisKK3N0ZDo6c2hhcmVkX3B0cjxDb2RlYzJDbGllbnQ6OkludGVyZmFjZT4KKyAgICAgICAgQ29kZWMyQ2xpZW50OjpDcmVhdGVJbnRlcmZhY2VCeU5hbWUoCisgICAgICAgIGNvbnN0IGNoYXIqIGludGVyZmFjZU5hbWUsCisgICAgICAgIHN0ZDo6c2hhcmVkX3B0cjxDb2RlYzJDbGllbnQ+KiBvd25lcikgeworICAgIHN0ZDo6c2hhcmVkX3B0cjxJbnRlcmZhY2U+IGludGVyZmFjZTsKKyAgICBjMl9zdGF0dXNfdCBzdGF0dXMgPSBGb3JBbGxTdG9yZXMoCisgICAgICAgICAgICBpbnRlcmZhY2VOYW1lLAorICAgICAgICAgICAgW293bmVyLCAmaW50ZXJmYWNlLCBpbnRlcmZhY2VOYW1lXSgKKyAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RkOjpzaGFyZWRfcHRyPENvZGVjMkNsaWVudD4gJmNsaWVudCkgLT4gYzJfc3RhdHVzX3QgeworICAgICAgICAgICAgICAgIGMyX3N0YXR1c190IHN0YXR1cyA9IGNsaWVudC0+Y3JlYXRlSW50ZXJmYWNlKGludGVyZmFjZU5hbWUsICZpbnRlcmZhY2UpOworICAgICAgICAgICAgICAgIGlmIChzdGF0dXMgPT0gQzJfT0spIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKG93bmVyKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAqb3duZXIgPSBjbGllbnQ7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHN0YXR1cyAhPSBDMl9OT1RfRk9VTkQpIHsKKyAgICAgICAgICAgICAgICAgICAgQUxPR0QoIklDb21wb25lbnRTdG9yZSglcyk6OmNyZWF0ZUludGVyZmFjZSgnJXMnKSByZXR1cm5lZCAlcyIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xpZW50LT5nZXRJbnN0YW5jZU5hbWUoKS5jX3N0cigpLCBpbnRlcmZhY2VOYW1lLCBhc1N0cmluZyhzdGF0dXMpKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgcmV0dXJuIHN0YXR1czsKKyAgICAgICAgICAgIH0pOworICAgIGlmIChzdGF0dXMgIT0gQzJfT0spIHsKKyAgICAgICAgQUxPR0koIkNvdWxkIG5vdCBjcmVhdGUgaW50ZXJmYWNlICclcycgKCVzKSIsIGludGVyZmFjZU5hbWUsIGFzU3RyaW5nKHN0YXR1cykpOworICAgIH0KKyAgICByZXR1cm4gaW50ZXJmYWNlOworfQorCitzdGQ6OnNoYXJlZF9wdHI8Q29kZWMyQ2xpZW50OjpJbnB1dFN1cmZhY2U+IENvZGVjMkNsaWVudDo6Q3JlYXRlSW5wdXRTdXJmYWNlKCkgeworICAgIHVpbnQzMl90IHNlcnZpY2VNYXNrID0gOjphbmRyb2lkOjpiYXNlOjpHZXRVaW50UHJvcGVydHkoCisgICAgICAgICAgICAiZGVidWcuc3RhZ2VmcmlnaHQuYzJpbnB1dHN1cmZhY2UiLCB1aW50MzJfdCgwKSk7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBrTnVtQ2xpZW50czsgKytpKSB7CisgICAgICAgIGlmICgoMSA8PCBpKSAmIHNlcnZpY2VNYXNrKSB7CisgICAgICAgICAgICBzdGQ6OnNoYXJlZF9wdHI8Q29kZWMyQ2xpZW50PiBjbGllbnQgPSBnZXRDbGllbnQoaSk7CisgICAgICAgICAgICBzdGQ6OnNoYXJlZF9wdHI8Q29kZWMyQ2xpZW50OjpJbnB1dFN1cmZhY2U+IGlucHV0U3VyZmFjZTsKKyAgICAgICAgICAgIGlmIChjbGllbnQgJiYKKyAgICAgICAgICAgICAgICAgICAgY2xpZW50LT5jcmVhdGVJbnB1dFN1cmZhY2UoJmlucHV0U3VyZmFjZSkgPT0gQzJfT0sgJiYKKyAgICAgICAgICAgICAgICAgICAgaW5wdXRTdXJmYWNlKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGlucHV0U3VyZmFjZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKyAgICBBTE9HVygiQ291bGQgbm90IGNyZWF0ZSBhbiBpbnB1dCBzdXJmYWNlIGZyb20gYW55IENvZGVjMi4wIHNlcnZpY2VzLiIpOworICAgIHJldHVybiBudWxscHRyOworfQorCitjb25zdCBzdGQ6OnZlY3RvcjxDMkNvbXBvbmVudDo6VHJhaXRzPiYgQ29kZWMyQ2xpZW50OjpMaXN0Q29tcG9uZW50cygpIHsKKyAgICBzdGF0aWMgc3RkOjp2ZWN0b3I8QzJDb21wb25lbnQ6OlRyYWl0cz4gdHJhaXRzTGlzdCA9IFtdKCl7CisgICAgICAgIHN0ZDo6dmVjdG9yPEMyQ29tcG9uZW50OjpUcmFpdHM+IGxpc3Q7CisgICAgICAgIHNpemVfdCBsaXN0U2l6ZSA9IDA7CisgICAgICAgIENsaWVudExpc3QgY2xpZW50TGlzdCA9IGdldENsaWVudExpc3QoKTsKKyAgICAgICAgZm9yIChjb25zdCBzdGQ6OnNoYXJlZF9wdHI8Q29kZWMyQ2xpZW50PiYgY2xpZW50IDogY2xpZW50TGlzdCkgeworICAgICAgICAgICAgaWYgKCFjbGllbnQpIHsKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGxpc3RTaXplICs9IGNsaWVudC0+bGlzdENvbXBvbmVudHMoKS5zaXplKCk7CisgICAgICAgIH0KKyAgICAgICAgbGlzdC5yZXNlcnZlKGxpc3RTaXplKTsKKyAgICAgICAgZm9yIChjb25zdCBzdGQ6OnNoYXJlZF9wdHI8Q29kZWMyQ2xpZW50PiYgY2xpZW50IDogY2xpZW50TGlzdCkgeworICAgICAgICAgICAgaWYgKCFjbGllbnQpIHsKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGxpc3QuaW5zZXJ0KAorICAgICAgICAgICAgICAgICAgICBsaXN0LmVuZCgpLAorICAgICAgICAgICAgICAgICAgICBjbGllbnQtPmxpc3RDb21wb25lbnRzKCkuYmVnaW4oKSwKKyAgICAgICAgICAgICAgICAgICAgY2xpZW50LT5saXN0Q29tcG9uZW50cygpLmVuZCgpKTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gbGlzdDsKKyAgICB9KCk7CisKKyAgICByZXR1cm4gdHJhaXRzTGlzdDsKK30KKworLy8gQ29kZWMyQ2xpZW50OjpMaXN0ZW5lcgorCitDb2RlYzJDbGllbnQ6Okxpc3RlbmVyOjp+TGlzdGVuZXIoKSB7Cit9CisKKy8vIENvZGVjMkNsaWVudDo6Q29tcG9uZW50CisKK0NvZGVjMkNsaWVudDo6Q29tcG9uZW50OjpCYXNlKiBDb2RlYzJDbGllbnQ6OkNvbXBvbmVudDo6YmFzZSgpIGNvbnN0IHsKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8QmFzZSo+KG1CYXNlLmdldCgpKTsKK30KKworQ29kZWMyQ2xpZW50OjpDb21wb25lbnQ6OkNvbXBvbmVudChjb25zdCBzcDxDb2RlYzJDbGllbnQ6OkNvbXBvbmVudDo6QmFzZT4mIGJhc2UpIDoKKyAgICBDb2RlYzJDbGllbnQ6OkNvbmZpZ3VyYWJsZShiYXNlKSwKKyAgICBtQnVmZmVyUG9vbFNlbmRlcihudWxscHRyKSB7Cit9CisKK0NvZGVjMkNsaWVudDo6Q29tcG9uZW50Ojp+Q29tcG9uZW50KCkgeworfQorCitjMl9zdGF0dXNfdCBDb2RlYzJDbGllbnQ6OkNvbXBvbmVudDo6Y3JlYXRlQmxvY2tQb29sKAorICAgICAgICBDMkFsbG9jYXRvcjo6aWRfdCBpZCwKKyAgICAgICAgQzJCbG9ja1Bvb2w6OmxvY2FsX2lkX3QqIGJsb2NrUG9vbElkLAorICAgICAgICBzdGQ6OnNoYXJlZF9wdHI8Q29kZWMyQ2xpZW50OjpDb25maWd1cmFibGU+KiBjb25maWd1cmFibGUpIHsKKyAgICBjMl9zdGF0dXNfdCBzdGF0dXM7CisgICAgUmV0dXJuPHZvaWQ+IHRyYW5zU3RhdHVzID0gYmFzZSgpLT5jcmVhdGVCbG9ja1Bvb2woCisgICAgICAgICAgICBzdGF0aWNfY2FzdDx1aW50MzJfdD4oaWQpLAorICAgICAgICAgICAgWyZzdGF0dXMsIGJsb2NrUG9vbElkLCBjb25maWd1cmFibGVdKAorICAgICAgICAgICAgICAgICAgICBTdGF0dXMgcywKKyAgICAgICAgICAgICAgICAgICAgdWludDY0X3QgcElkLAorICAgICAgICAgICAgICAgICAgICBjb25zdCBzcDxJQ29uZmlndXJhYmxlPiYgYykgeworICAgICAgICAgICAgICAgIHN0YXR1cyA9IHN0YXRpY19jYXN0PGMyX3N0YXR1c190PihzKTsKKyAgICAgICAgICAgICAgICBjb25maWd1cmFibGUtPnJlc2V0KCk7CisgICAgICAgICAgICAgICAgaWYgKHN0YXR1cyAhPSBDMl9PSykgeworICAgICAgICAgICAgICAgICAgICBBTE9HRSgiY3JlYXRlQmxvY2tQb29sIC0tIGNhbGwgZmFpbGVkLiAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkVycm9yIGNvZGUgPSAlZCIsIHN0YXRpY19jYXN0PGludD4oc3RhdHVzKSk7CisgICAgICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgKmJsb2NrUG9vbElkID0gc3RhdGljX2Nhc3Q8QzJCbG9ja1Bvb2w6OmxvY2FsX2lkX3Q+KHBJZCk7CisgICAgICAgICAgICAgICAgKmNvbmZpZ3VyYWJsZSA9IHN0ZDo6bWFrZV9zaGFyZWQ8Q29kZWMyQ2xpZW50OjpDb25maWd1cmFibGU+KGMpOworICAgICAgICAgICAgfSk7CisgICAgaWYgKCF0cmFuc1N0YXR1cy5pc09rKCkpIHsKKyAgICAgICAgQUxPR0UoImNyZWF0ZUJsb2NrUG9vbCAtLSB0cmFuc2FjdGlvbiBmYWlsZWQuIik7CisgICAgICAgIHJldHVybiBDMl9UUkFOU0FDVElPTl9GQUlMRUQ7CisgICAgfQorICAgIHJldHVybiBzdGF0dXM7Cit9CisKK2MyX3N0YXR1c190IENvZGVjMkNsaWVudDo6Q29tcG9uZW50OjpkZXN0cm95QmxvY2tQb29sKAorICAgICAgICBDMkJsb2NrUG9vbDo6bG9jYWxfaWRfdCBsb2NhbElkKSB7CisgICAgUmV0dXJuPFN0YXR1cz4gdHJhbnNSZXN1bHQgPSBiYXNlKCktPmRlc3Ryb3lCbG9ja1Bvb2woCisgICAgICAgICAgICBzdGF0aWNfY2FzdDx1aW50NjRfdD4obG9jYWxJZCkpOworICAgIGlmICghdHJhbnNSZXN1bHQuaXNPaygpKSB7CisgICAgICAgIEFMT0dFKCJkZXN0cm95QmxvY2tQb29sIC0tIHRyYW5zYWN0aW9uIGZhaWxlZC4iKTsKKyAgICAgICAgcmV0dXJuIEMyX1RSQU5TQUNUSU9OX0ZBSUxFRDsKKyAgICB9CisgICAgcmV0dXJuIHN0YXRpY19jYXN0PGMyX3N0YXR1c190PihzdGF0aWNfY2FzdDxTdGF0dXM+KHRyYW5zUmVzdWx0KSk7Cit9CisKK3NpemVfdCBDb2RlYzJDbGllbnQ6OkNvbXBvbmVudDo6aGFuZGxlT25Xb3JrRG9uZSgKKyAgICAgICAgY29uc3Qgc3RkOjpsaXN0PHN0ZDo6dW5pcXVlX3B0cjxDMldvcms+PiAmd29ya0l0ZW1zKSB7CisgICAgLy8gSW5wdXQgYnVmZmVycycgbGlmZXRpbWUgbWFuYWdlbWVudAorICAgIHN0ZDo6dmVjdG9yPHVpbnQ2NF90PiBpbnB1dERvbmU7CisgICAgZm9yIChjb25zdCBzdGQ6OnVuaXF1ZV9wdHI8QzJXb3JrPiAmd29yayA6IHdvcmtJdGVtcykgeworICAgICAgICBpZiAod29yaykgeworICAgICAgICAgICAgaWYgKHdvcmstPndvcmtsZXRzLmVtcHR5KCkKKyAgICAgICAgICAgICAgICAgICAgfHwgIXdvcmstPndvcmtsZXRzLmJhY2soKQorICAgICAgICAgICAgICAgICAgICB8fCAod29yay0+d29ya2xldHMuYmFjaygpLT5vdXRwdXQuZmxhZ3MgJiBDMkZyYW1lRGF0YTo6RkxBR19JTkNPTVBMRVRFKSA9PSAwKSB7CisgICAgICAgICAgICAgICAgLy8gaW5wdXQgaXMgY29tcGxldGUKKyAgICAgICAgICAgICAgICBpbnB1dERvbmUuZW1wbGFjZV9iYWNrKHdvcmstPmlucHV0Lm9yZGluYWwuZnJhbWVJbmRleC5wZWVrdSgpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKworICAgIHNpemVfdCBudW1EaXNjYXJkZWRJbnB1dEJ1ZmZlcnMgPSAwOworICAgIHsKKyAgICAgICAgc3RkOjpsb2NrX2d1YXJkPHN0ZDo6bXV0ZXg+IGxvY2sobUlucHV0QnVmZmVyc011dGV4KTsKKyAgICAgICAgZm9yICh1aW50NjRfdCBpbnB1dEluZGV4IDogaW5wdXREb25lKSB7CisgICAgICAgICAgICBhdXRvIGl0ID0gbUlucHV0QnVmZmVycy5maW5kKGlucHV0SW5kZXgpOworICAgICAgICAgICAgaWYgKGl0ID09IG1JbnB1dEJ1ZmZlcnMuZW5kKCkpIHsKKyAgICAgICAgICAgICAgICBBTE9HVigib25Xb3JrRG9uZSAtLSByZXR1cm5lZCBjb25zdW1lZC91bmtub3duICIKKyAgICAgICAgICAgICAgICAgICAgICAiaW5wdXQgZnJhbWU6IGluZGV4ICVsbHUiLAorICAgICAgICAgICAgICAgICAgICAgICAgKGxvbmcgbG9uZylpbnB1dEluZGV4KTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgQUxPR1YoIm9uV29ya0RvbmUgLS0gcHJvY2Vzc2VkIGlucHV0IGZyYW1lOiAiCisgICAgICAgICAgICAgICAgICAgICAgImluZGV4ICVsbHUgKGNvbnRhaW5pbmcgJXp1IGJ1ZmZlcnMpIiwKKyAgICAgICAgICAgICAgICAgICAgICAgIChsb25nIGxvbmcpaW5wdXRJbmRleCwgaXQtPnNlY29uZC5zaXplKCkpOworICAgICAgICAgICAgICAgIG1JbnB1dEJ1ZmZlcnMuZXJhc2UoaXQpOworICAgICAgICAgICAgICAgIG1JbnB1dEJ1ZmZlckNvdW50LmVyYXNlKGlucHV0SW5kZXgpOworICAgICAgICAgICAgICAgICsrbnVtRGlzY2FyZGVkSW5wdXRCdWZmZXJzOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCisgICAgLy8gT3V0cHV0IGJ1ZmZlcnF1ZXVlLWJhc2VkIGJsb2NrcycgbGlmZXRpbWUgbWFuYWdlbWVudAorICAgIG1PdXRwdXRCdWZmZXJRdWV1ZU11dGV4LmxvY2soKTsKKyAgICBzcDxJR3JhcGhpY0J1ZmZlclByb2R1Y2VyPiBpZ2JwID0gbU91dHB1dElnYnA7CisgICAgdWludDY0X3QgYnFJZCA9IG1PdXRwdXRCcUlkOworICAgIHVpbnQzMl90IGdlbmVyYXRpb24gPSBtT3V0cHV0R2VuZXJhdGlvbjsKKyAgICBtT3V0cHV0QnVmZmVyUXVldWVNdXRleC51bmxvY2soKTsKKworICAgIGlmIChpZ2JwKSB7CisgICAgICAgIGhvbGRCdWZmZXJRdWV1ZUJsb2Nrcyh3b3JrSXRlbXMsIGlnYnAsIGJxSWQsIGdlbmVyYXRpb24pOworICAgIH0KKyAgICByZXR1cm4gbnVtRGlzY2FyZGVkSW5wdXRCdWZmZXJzOworfQorCitzdGQ6OnNoYXJlZF9wdHI8QzJCdWZmZXI+IENvZGVjMkNsaWVudDo6Q29tcG9uZW50OjpmcmVlSW5wdXRCdWZmZXIoCisgICAgICAgIHVpbnQ2NF90IGZyYW1lSW5kZXgsCisgICAgICAgIHNpemVfdCBidWZmZXJJbmRleCkgeworICAgIHN0ZDo6c2hhcmVkX3B0cjxDMkJ1ZmZlcj4gYnVmZmVyOworICAgIHN0ZDo6bG9ja19ndWFyZDxzdGQ6Om11dGV4PiBsb2NrKG1JbnB1dEJ1ZmZlcnNNdXRleCk7CisgICAgYXV0byBpdCA9IG1JbnB1dEJ1ZmZlcnMuZmluZChmcmFtZUluZGV4KTsKKyAgICBpZiAoaXQgPT0gbUlucHV0QnVmZmVycy5lbmQoKSkgeworICAgICAgICBBTE9HSSgiZnJlZUlucHV0QnVmZmVyIC0tIFVucmVjb2duaXplZCBpbnB1dCBmcmFtZSBpbmRleCAlbGx1LiIsCisgICAgICAgICAgICAgIHN0YXRpY19jYXN0PGxvbmcgbG9uZyB1bnNpZ25lZD4oZnJhbWVJbmRleCkpOworICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICB9CisgICAgaWYgKGJ1ZmZlckluZGV4ID49IGl0LT5zZWNvbmQuc2l6ZSgpKSB7CisgICAgICAgIEFMT0dJKCJmcmVlSW5wdXRCdWZmZXIgLS0gSW5wdXQgYnVmZmVyIG5vLiAlenUgaXMgaW52YWxpZCBpbiAiCisgICAgICAgICAgICAgICJpbnB1dCBmcmFtZSBpbmRleCAlbGx1LiIsCisgICAgICAgICAgICAgIGJ1ZmZlckluZGV4LCBzdGF0aWNfY2FzdDxsb25nIGxvbmcgdW5zaWduZWQ+KGZyYW1lSW5kZXgpKTsKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgfQorICAgIGJ1ZmZlciA9IGl0LT5zZWNvbmRbYnVmZmVySW5kZXhdOworICAgIGlmICghYnVmZmVyKSB7CisgICAgICAgIEFMT0dJKCJmcmVlSW5wdXRCdWZmZXIgLS0gSW5wdXQgYnVmZmVyIG5vLiAlenUgaW4gIgorICAgICAgICAgICAgICAiaW5wdXQgZnJhbWUgaW5kZXggJWxsdSBoYXMgYWxyZWFkeSBiZWVuIGZyZWVkLiIsCisgICAgICAgICAgICAgIGJ1ZmZlckluZGV4LCBzdGF0aWNfY2FzdDxsb25nIGxvbmcgdW5zaWduZWQ+KGZyYW1lSW5kZXgpKTsKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgfQorICAgIGl0LT5zZWNvbmRbYnVmZmVySW5kZXhdID0gbnVsbHB0cjsKKyAgICBpZiAoLS1tSW5wdXRCdWZmZXJDb3VudFtmcmFtZUluZGV4XSA9PSAwKSB7CisgICAgICAgIG1JbnB1dEJ1ZmZlcnMuZXJhc2UoaXQpOworICAgICAgICBtSW5wdXRCdWZmZXJDb3VudC5lcmFzZShmcmFtZUluZGV4KTsKKyAgICB9CisgICAgcmV0dXJuIGJ1ZmZlcjsKK30KKworYzJfc3RhdHVzX3QgQ29kZWMyQ2xpZW50OjpDb21wb25lbnQ6OnF1ZXVlKAorICAgICAgICBzdGQ6Omxpc3Q8c3RkOjp1bmlxdWVfcHRyPEMyV29yaz4+KiBjb25zdCBpdGVtcykgeworICAgIC8vIHJlbWVtYmVyIGlucHV0IGJ1ZmZlcnMgcXVldWVkIHRvIGhvbGQgcmVmZXJlbmNlIHRvIHRoZW0KKyAgICB7CisgICAgICAgIHN0ZDo6bG9ja19ndWFyZDxzdGQ6Om11dGV4PiBsb2NrKG1JbnB1dEJ1ZmZlcnNNdXRleCk7CisgICAgICAgIGZvciAoY29uc3Qgc3RkOjp1bmlxdWVfcHRyPEMyV29yaz4gJndvcmsgOiAqaXRlbXMpIHsKKyAgICAgICAgICAgIGlmICghd29yaykgeworICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKHdvcmstPmlucHV0LmJ1ZmZlcnMuc2l6ZSgpID09IDApIHsKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgdWludDY0X3QgaW5wdXRJbmRleCA9IHdvcmstPmlucHV0Lm9yZGluYWwuZnJhbWVJbmRleC5wZWVrdSgpOworICAgICAgICAgICAgYXV0byByZXMgPSBtSW5wdXRCdWZmZXJzLmVtcGxhY2UoaW5wdXRJbmRleCwgd29yay0+aW5wdXQuYnVmZmVycyk7CisgICAgICAgICAgICBpZiAoIXJlcy5zZWNvbmQpIHsKKyAgICAgICAgICAgICAgICAvLyBUT0RPOiBhcHBlbmQ/IC0gZm9yIG5vdyB3ZSBhcmUgcmVwbGFjaW5nCisgICAgICAgICAgICAgICAgcmVzLmZpcnN0LT5zZWNvbmQgPSB3b3JrLT5pbnB1dC5idWZmZXJzOworICAgICAgICAgICAgICAgIEFMT0dJKCJxdWV1ZSAtLSBkdXBsaWNhdGUgaW5wdXQgZnJhbWU6IGluZGV4ICVsbHUuICIKKyAgICAgICAgICAgICAgICAgICAgICAiRGlzY2FyZGluZyB0aGUgb2xkIGlucHV0IGZyYW1lLi4uIiwKKyAgICAgICAgICAgICAgICAgICAgICAgIChsb25nIGxvbmcpaW5wdXRJbmRleCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBtSW5wdXRCdWZmZXJDb3VudFtpbnB1dEluZGV4XSA9IHdvcmstPmlucHV0LmJ1ZmZlcnMuc2l6ZSgpOworICAgICAgICAgICAgQUxPR1YoInF1ZXVlIC0tIHF1ZXVlaW5nIGlucHV0IGZyYW1lOiAiCisgICAgICAgICAgICAgICAgICAiaW5kZXggJWxsdSAoY29udGFpbmluZyAlenUgYnVmZmVycykiLAorICAgICAgICAgICAgICAgICAgICAobG9uZyBsb25nKWlucHV0SW5kZXgsIHdvcmstPmlucHV0LmJ1ZmZlcnMuc2l6ZSgpKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIFdvcmtCdW5kbGUgd29ya0J1bmRsZTsKKyAgICBTdGF0dXMgaGlkbFN0YXR1cyA9IG9iamNweSgmd29ya0J1bmRsZSwgKml0ZW1zLCAmbUJ1ZmZlclBvb2xTZW5kZXIpOworICAgIGlmIChoaWRsU3RhdHVzICE9IFN0YXR1czo6T0spIHsKKyAgICAgICAgQUxPR0UoInF1ZXVlIC0tIGJhZCBpbnB1dC4iKTsKKyAgICAgICAgcmV0dXJuIEMyX1RSQU5TQUNUSU9OX0ZBSUxFRDsKKyAgICB9CisgICAgUmV0dXJuPFN0YXR1cz4gdHJhbnNTdGF0dXMgPSBiYXNlKCktPnF1ZXVlKHdvcmtCdW5kbGUpOworICAgIGlmICghdHJhbnNTdGF0dXMuaXNPaygpKSB7CisgICAgICAgIEFMT0dFKCJxdWV1ZSAtLSB0cmFuc2FjdGlvbiBmYWlsZWQuIik7CisgICAgICAgIHJldHVybiBDMl9UUkFOU0FDVElPTl9GQUlMRUQ7CisgICAgfQorICAgIGMyX3N0YXR1c190IHN0YXR1cyA9CisgICAgICAgICAgICBzdGF0aWNfY2FzdDxjMl9zdGF0dXNfdD4oc3RhdGljX2Nhc3Q8U3RhdHVzPih0cmFuc1N0YXR1cykpOworICAgIGlmIChzdGF0dXMgIT0gQzJfT0spIHsKKyAgICAgICAgQUxPR0UoInF1ZXVlIC0tIGNhbGwgZmFpbGVkLiAiCisgICAgICAgICAgICAgICAgIkVycm9yIGNvZGUgPSAlZCIsIHN0YXRpY19jYXN0PGludD4oc3RhdHVzKSk7CisgICAgfQorICAgIHJldHVybiBzdGF0dXM7Cit9CisKK2MyX3N0YXR1c190IENvZGVjMkNsaWVudDo6Q29tcG9uZW50OjpmbHVzaCgKKyAgICAgICAgQzJDb21wb25lbnQ6OmZsdXNoX21vZGVfdCBtb2RlLAorICAgICAgICBzdGQ6Omxpc3Q8c3RkOjp1bmlxdWVfcHRyPEMyV29yaz4+KiBjb25zdCBmbHVzaGVkV29yaykgeworICAgICh2b2lkKW1vZGU7IC8vIEZsdXNoIG1vZGUgaXNuJ3Qgc3VwcG9ydGVkIGluIEhJREwgeWV0LgorICAgIGMyX3N0YXR1c190IHN0YXR1czsKKyAgICBSZXR1cm48dm9pZD4gdHJhbnNTdGF0dXMgPSBiYXNlKCktPmZsdXNoKAorICAgICAgICAgICAgWyZzdGF0dXMsIGZsdXNoZWRXb3JrXSgKKyAgICAgICAgICAgICAgICAgICAgU3RhdHVzIHMsIGNvbnN0IFdvcmtCdW5kbGUmIHdiKSB7CisgICAgICAgICAgICAgICAgc3RhdHVzID0gc3RhdGljX2Nhc3Q8YzJfc3RhdHVzX3Q+KHMpOworICAgICAgICAgICAgICAgIGlmIChzdGF0dXMgIT0gQzJfT0spIHsKKyAgICAgICAgICAgICAgICAgICAgQUxPR0UoImZsdXNoIC0tIGNhbGwgZmFpbGVkLiAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkVycm9yIGNvZGUgPSAlZCIsIHN0YXRpY19jYXN0PGludD4oc3RhdHVzKSk7CisgICAgICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgc3RhdHVzID0gb2JqY3B5KGZsdXNoZWRXb3JrLCB3Yik7CisgICAgICAgICAgICB9KTsKKyAgICBpZiAoIXRyYW5zU3RhdHVzLmlzT2soKSkgeworICAgICAgICBBTE9HRSgiZmx1c2ggLS0gdHJhbnNhY3Rpb24gZmFpbGVkLiIpOworICAgICAgICByZXR1cm4gQzJfVFJBTlNBQ1RJT05fRkFJTEVEOworICAgIH0KKworICAgIC8vIEluZGljZXMgb2YgZmx1c2hlZCB3b3JrIGl0ZW1zLgorICAgIHN0ZDo6dmVjdG9yPHVpbnQ2NF90PiBmbHVzaGVkSW5kaWNlczsKKyAgICBmb3IgKGNvbnN0IHN0ZDo6dW5pcXVlX3B0cjxDMldvcms+ICZ3b3JrIDogKmZsdXNoZWRXb3JrKSB7CisgICAgICAgIGlmICh3b3JrKSB7CisgICAgICAgICAgICBpZiAod29yay0+d29ya2xldHMuZW1wdHkoKQorICAgICAgICAgICAgICAgICAgICB8fCAhd29yay0+d29ya2xldHMuYmFjaygpCisgICAgICAgICAgICAgICAgICAgIHx8ICh3b3JrLT53b3JrbGV0cy5iYWNrKCktPm91dHB1dC5mbGFncyAmCisgICAgICAgICAgICAgICAgICAgICAgICBDMkZyYW1lRGF0YTo6RkxBR19JTkNPTVBMRVRFKSA9PSAwKSB7CisgICAgICAgICAgICAgICAgLy8gaW5wdXQgaXMgY29tcGxldGUKKyAgICAgICAgICAgICAgICBmbHVzaGVkSW5kaWNlcy5lbXBsYWNlX2JhY2soCisgICAgICAgICAgICAgICAgICAgICAgICB3b3JrLT5pbnB1dC5vcmRpbmFsLmZyYW1lSW5kZXgucGVla3UoKSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvLyBJbnB1dCBidWZmZXJzJyBsaWZldGltZSBtYW5hZ2VtZW50CisgICAgZm9yICh1aW50NjRfdCBmbHVzaGVkSW5kZXggOiBmbHVzaGVkSW5kaWNlcykgeworICAgICAgICBzdGQ6OmxvY2tfZ3VhcmQ8c3RkOjptdXRleD4gbG9jayhtSW5wdXRCdWZmZXJzTXV0ZXgpOworICAgICAgICBhdXRvIGl0ID0gbUlucHV0QnVmZmVycy5maW5kKGZsdXNoZWRJbmRleCk7CisgICAgICAgIGlmIChpdCA9PSBtSW5wdXRCdWZmZXJzLmVuZCgpKSB7CisgICAgICAgICAgICBBTE9HVigiZmx1c2ggLS0gcmV0dXJuZWQgY29uc3VtZWQvdW5rbm93biBpbnB1dCBmcmFtZTogIgorICAgICAgICAgICAgICAgICAgImluZGV4ICVsbHUiLAorICAgICAgICAgICAgICAgICAgICAobG9uZyBsb25nKWZsdXNoZWRJbmRleCk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBBTE9HVigiZmx1c2ggLS0gcmV0dXJuZWQgdW5wcm9jZXNzZWQgaW5wdXQgZnJhbWU6ICIKKyAgICAgICAgICAgICAgICAgICJpbmRleCAlbGx1IChjb250YWluaW5nICV6dSBidWZmZXJzKSIsCisgICAgICAgICAgICAgICAgICAgIChsb25nIGxvbmcpZmx1c2hlZEluZGV4LCBtSW5wdXRCdWZmZXJDb3VudFtmbHVzaGVkSW5kZXhdKTsKKyAgICAgICAgICAgIG1JbnB1dEJ1ZmZlcnMuZXJhc2UoaXQpOworICAgICAgICAgICAgbUlucHV0QnVmZmVyQ291bnQuZXJhc2UoZmx1c2hlZEluZGV4KTsKKyAgICAgICAgfQorICAgIH0KKworICAgIC8vIE91dHB1dCBidWZmZXJxdWV1ZS1iYXNlZCBibG9ja3MnIGxpZmV0aW1lIG1hbmFnZW1lbnQKKyAgICBtT3V0cHV0QnVmZmVyUXVldWVNdXRleC5sb2NrKCk7CisgICAgc3A8SUdyYXBoaWNCdWZmZXJQcm9kdWNlcj4gaWdicCA9IG1PdXRwdXRJZ2JwOworICAgIHVpbnQ2NF90IGJxSWQgPSBtT3V0cHV0QnFJZDsKKyAgICB1aW50MzJfdCBnZW5lcmF0aW9uID0gbU91dHB1dEdlbmVyYXRpb247CisgICAgbU91dHB1dEJ1ZmZlclF1ZXVlTXV0ZXgudW5sb2NrKCk7CisKKyAgICBpZiAoaWdicCkgeworICAgICAgICBob2xkQnVmZmVyUXVldWVCbG9ja3MoKmZsdXNoZWRXb3JrLCBpZ2JwLCBicUlkLCBnZW5lcmF0aW9uKTsKKyAgICB9CisKKyAgICByZXR1cm4gc3RhdHVzOworfQorCitjMl9zdGF0dXNfdCBDb2RlYzJDbGllbnQ6OkNvbXBvbmVudDo6ZHJhaW4oQzJDb21wb25lbnQ6OmRyYWluX21vZGVfdCBtb2RlKSB7CisgICAgUmV0dXJuPFN0YXR1cz4gdHJhbnNTdGF0dXMgPSBiYXNlKCktPmRyYWluKAorICAgICAgICAgICAgbW9kZSA9PSBDMkNvbXBvbmVudDo6RFJBSU5fQ09NUE9ORU5UX1dJVEhfRU9TKTsKKyAgICBpZiAoIXRyYW5zU3RhdHVzLmlzT2soKSkgeworICAgICAgICBBTE9HRSgiZHJhaW4gLS0gdHJhbnNhY3Rpb24gZmFpbGVkLiIpOworICAgICAgICByZXR1cm4gQzJfVFJBTlNBQ1RJT05fRkFJTEVEOworICAgIH0KKyAgICBjMl9zdGF0dXNfdCBzdGF0dXMgPQorICAgICAgICAgICAgc3RhdGljX2Nhc3Q8YzJfc3RhdHVzX3Q+KHN0YXRpY19jYXN0PFN0YXR1cz4odHJhbnNTdGF0dXMpKTsKKyAgICBpZiAoc3RhdHVzICE9IEMyX09LKSB7CisgICAgICAgIEFMT0dFKCJkcmFpbiAtLSBjYWxsIGZhaWxlZC4gIgorICAgICAgICAgICAgICAgICJFcnJvciBjb2RlID0gJWQiLCBzdGF0aWNfY2FzdDxpbnQ+KHN0YXR1cykpOworICAgIH0KKyAgICByZXR1cm4gc3RhdHVzOworfQorCitjMl9zdGF0dXNfdCBDb2RlYzJDbGllbnQ6OkNvbXBvbmVudDo6c3RhcnQoKSB7CisgICAgUmV0dXJuPFN0YXR1cz4gdHJhbnNTdGF0dXMgPSBiYXNlKCktPnN0YXJ0KCk7CisgICAgaWYgKCF0cmFuc1N0YXR1cy5pc09rKCkpIHsKKyAgICAgICAgQUxPR0UoInN0YXJ0IC0tIHRyYW5zYWN0aW9uIGZhaWxlZC4iKTsKKyAgICAgICAgcmV0dXJuIEMyX1RSQU5TQUNUSU9OX0ZBSUxFRDsKKyAgICB9CisgICAgYzJfc3RhdHVzX3Qgc3RhdHVzID0KKyAgICAgICAgICAgIHN0YXRpY19jYXN0PGMyX3N0YXR1c190PihzdGF0aWNfY2FzdDxTdGF0dXM+KHRyYW5zU3RhdHVzKSk7CisgICAgaWYgKHN0YXR1cyAhPSBDMl9PSykgeworICAgICAgICBBTE9HRSgic3RhcnQgLS0gY2FsbCBmYWlsZWQuICIKKyAgICAgICAgICAgICAgICAiRXJyb3IgY29kZSA9ICVkIiwgc3RhdGljX2Nhc3Q8aW50PihzdGF0dXMpKTsKKyAgICB9CisgICAgcmV0dXJuIHN0YXR1czsKK30KKworYzJfc3RhdHVzX3QgQ29kZWMyQ2xpZW50OjpDb21wb25lbnQ6OnN0b3AoKSB7CisgICAgUmV0dXJuPFN0YXR1cz4gdHJhbnNTdGF0dXMgPSBiYXNlKCktPnN0b3AoKTsKKyAgICBpZiAoIXRyYW5zU3RhdHVzLmlzT2soKSkgeworICAgICAgICBBTE9HRSgic3RvcCAtLSB0cmFuc2FjdGlvbiBmYWlsZWQuIik7CisgICAgICAgIHJldHVybiBDMl9UUkFOU0FDVElPTl9GQUlMRUQ7CisgICAgfQorICAgIGMyX3N0YXR1c190IHN0YXR1cyA9CisgICAgICAgICAgICBzdGF0aWNfY2FzdDxjMl9zdGF0dXNfdD4oc3RhdGljX2Nhc3Q8U3RhdHVzPih0cmFuc1N0YXR1cykpOworICAgIGlmIChzdGF0dXMgIT0gQzJfT0spIHsKKyAgICAgICAgQUxPR0UoInN0b3AgLS0gY2FsbCBmYWlsZWQuICIKKyAgICAgICAgICAgICAgICAiRXJyb3IgY29kZSA9ICVkIiwgc3RhdGljX2Nhc3Q8aW50PihzdGF0dXMpKTsKKyAgICB9CisgICAgbUlucHV0QnVmZmVyc011dGV4LmxvY2soKTsKKyAgICBtSW5wdXRCdWZmZXJzLmNsZWFyKCk7CisgICAgbUlucHV0QnVmZmVyQ291bnQuY2xlYXIoKTsKKyAgICBtSW5wdXRCdWZmZXJzTXV0ZXgudW5sb2NrKCk7CisgICAgcmV0dXJuIHN0YXR1czsKK30KKworYzJfc3RhdHVzX3QgQ29kZWMyQ2xpZW50OjpDb21wb25lbnQ6OnJlc2V0KCkgeworICAgIFJldHVybjxTdGF0dXM+IHRyYW5zU3RhdHVzID0gYmFzZSgpLT5yZXNldCgpOworICAgIGlmICghdHJhbnNTdGF0dXMuaXNPaygpKSB7CisgICAgICAgIEFMT0dFKCJyZXNldCAtLSB0cmFuc2FjdGlvbiBmYWlsZWQuIik7CisgICAgICAgIHJldHVybiBDMl9UUkFOU0FDVElPTl9GQUlMRUQ7CisgICAgfQorICAgIGMyX3N0YXR1c190IHN0YXR1cyA9CisgICAgICAgICAgICBzdGF0aWNfY2FzdDxjMl9zdGF0dXNfdD4oc3RhdGljX2Nhc3Q8U3RhdHVzPih0cmFuc1N0YXR1cykpOworICAgIGlmIChzdGF0dXMgIT0gQzJfT0spIHsKKyAgICAgICAgQUxPR0UoInJlc2V0IC0tIGNhbGwgZmFpbGVkLiAiCisgICAgICAgICAgICAgICAgIkVycm9yIGNvZGUgPSAlZCIsIHN0YXRpY19jYXN0PGludD4oc3RhdHVzKSk7CisgICAgfQorICAgIG1JbnB1dEJ1ZmZlcnNNdXRleC5sb2NrKCk7CisgICAgbUlucHV0QnVmZmVycy5jbGVhcigpOworICAgIG1JbnB1dEJ1ZmZlckNvdW50LmNsZWFyKCk7CisgICAgbUlucHV0QnVmZmVyc011dGV4LnVubG9jaygpOworICAgIHJldHVybiBzdGF0dXM7Cit9CisKK2MyX3N0YXR1c190IENvZGVjMkNsaWVudDo6Q29tcG9uZW50OjpyZWxlYXNlKCkgeworICAgIFJldHVybjxTdGF0dXM+IHRyYW5zU3RhdHVzID0gYmFzZSgpLT5yZWxlYXNlKCk7CisgICAgaWYgKCF0cmFuc1N0YXR1cy5pc09rKCkpIHsKKyAgICAgICAgQUxPR0UoInJlbGVhc2UgLS0gdHJhbnNhY3Rpb24gZmFpbGVkLiIpOworICAgICAgICByZXR1cm4gQzJfVFJBTlNBQ1RJT05fRkFJTEVEOworICAgIH0KKyAgICBjMl9zdGF0dXNfdCBzdGF0dXMgPQorICAgICAgICAgICAgc3RhdGljX2Nhc3Q8YzJfc3RhdHVzX3Q+KHN0YXRpY19jYXN0PFN0YXR1cz4odHJhbnNTdGF0dXMpKTsKKyAgICBpZiAoc3RhdHVzICE9IEMyX09LKSB7CisgICAgICAgIEFMT0dFKCJyZWxlYXNlIC0tIGNhbGwgZmFpbGVkLiAiCisgICAgICAgICAgICAgICAgIkVycm9yIGNvZGUgPSAlZCIsIHN0YXRpY19jYXN0PGludD4oc3RhdHVzKSk7CisgICAgfQorICAgIG1JbnB1dEJ1ZmZlcnNNdXRleC5sb2NrKCk7CisgICAgbUlucHV0QnVmZmVycy5jbGVhcigpOworICAgIG1JbnB1dEJ1ZmZlckNvdW50LmNsZWFyKCk7CisgICAgbUlucHV0QnVmZmVyc011dGV4LnVubG9jaygpOworICAgIHJldHVybiBzdGF0dXM7Cit9CisKK2MyX3N0YXR1c190IENvZGVjMkNsaWVudDo6Q29tcG9uZW50OjpzZXRPdXRwdXRTdXJmYWNlKAorICAgICAgICBDMkJsb2NrUG9vbDo6bG9jYWxfaWRfdCBibG9ja1Bvb2xJZCwKKyAgICAgICAgY29uc3Qgc3A8SUdyYXBoaWNCdWZmZXJQcm9kdWNlcj4mIHN1cmZhY2UsCisgICAgICAgIHVpbnQzMl90IGdlbmVyYXRpb24pIHsKKyAgICBzcDxIR3JhcGhpY0J1ZmZlclByb2R1Y2VyPiBpZ2JwID0gc3VyZmFjZS0+Z2V0SGFsSW50ZXJmYWNlKCk7CisgICAgaWYgKCFpZ2JwKSB7CisgICAgICAgIGlnYnAgPSBuZXcgVFdHcmFwaGljQnVmZmVyUHJvZHVjZXI8SEdyYXBoaWNCdWZmZXJQcm9kdWNlcj4oc3VyZmFjZSk7CisgICAgfQorCisgICAgUmV0dXJuPFN0YXR1cz4gdHJhbnNTdGF0dXMgPSBiYXNlKCktPnNldE91dHB1dFN1cmZhY2UoCisgICAgICAgICAgICBzdGF0aWNfY2FzdDx1aW50NjRfdD4oYmxvY2tQb29sSWQpLCBpZ2JwKTsKKyAgICBpZiAoIXRyYW5zU3RhdHVzLmlzT2soKSkgeworICAgICAgICBBTE9HRSgic2V0T3V0cHV0U3VyZmFjZSAtLSB0cmFuc2FjdGlvbiBmYWlsZWQuIik7CisgICAgICAgIHJldHVybiBDMl9UUkFOU0FDVElPTl9GQUlMRUQ7CisgICAgfQorICAgIGMyX3N0YXR1c190IHN0YXR1cyA9CisgICAgICAgICAgICBzdGF0aWNfY2FzdDxjMl9zdGF0dXNfdD4oc3RhdGljX2Nhc3Q8U3RhdHVzPih0cmFuc1N0YXR1cykpOworICAgIGlmIChzdGF0dXMgIT0gQzJfT0spIHsKKyAgICAgICAgQUxPR0UoInNldE91dHB1dFN1cmZhY2UgLS0gY2FsbCBmYWlsZWQuICIKKyAgICAgICAgICAgICAgICAiRXJyb3IgY29kZSA9ICVkIiwgc3RhdGljX2Nhc3Q8aW50PihzdGF0dXMpKTsKKyAgICB9IGVsc2UgeworICAgICAgICBzdGQ6OmxvY2tfZ3VhcmQ8c3RkOjptdXRleD4gbG9jayhtT3V0cHV0QnVmZmVyUXVldWVNdXRleCk7CisgICAgICAgIGlmIChtT3V0cHV0SWdicCAhPSBzdXJmYWNlKSB7CisgICAgICAgICAgICBtT3V0cHV0SWdicCA9IHN1cmZhY2U7CisgICAgICAgICAgICBpZiAoIXN1cmZhY2UpIHsKKyAgICAgICAgICAgICAgICBtT3V0cHV0QnFJZCA9IDA7CisgICAgICAgICAgICB9IGVsc2UgaWYgKHN1cmZhY2UtPmdldFVuaXF1ZUlkKCZtT3V0cHV0QnFJZCkgIT0gT0spIHsKKyAgICAgICAgICAgICAgICBBTE9HRSgic2V0T3V0cHV0U3VyZmFjZSAtLSBjYW5ub3Qgb2J0YWluIGJ1ZmZlcnF1ZXVlIGlkLiIpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIG1PdXRwdXRHZW5lcmF0aW9uID0gZ2VuZXJhdGlvbjsKKyAgICB9CisgICAgcmV0dXJuIHN0YXR1czsKK30KKworc3RhdHVzX3QgQ29kZWMyQ2xpZW50OjpDb21wb25lbnQ6OnF1ZXVlVG9PdXRwdXRTdXJmYWNlKAorICAgICAgICBjb25zdCBDMkNvbnN0R3JhcGhpY0Jsb2NrJiBibG9jaywKKyAgICAgICAgY29uc3QgUXVldWVCdWZmZXJJbnB1dCYgaW5wdXQsCisgICAgICAgIFF1ZXVlQnVmZmVyT3V0cHV0KiBvdXRwdXQpIHsKKyAgICB1aW50MzJfdCBnZW5lcmF0aW9uOworICAgIHVpbnQ2NF90IGJxSWQ7CisgICAgaW50MzJfdCBicVNsb3Q7CisgICAgaWYgKCFnZXRCdWZmZXJRdWV1ZUFzc2lnbm1lbnQoYmxvY2ssICZnZW5lcmF0aW9uLCAmYnFJZCwgJmJxU2xvdCkgfHwKKyAgICAgICAgICAgIGJxSWQgPT0gMCkgeworICAgICAgICAvLyBCbG9jayBub3QgZnJvbSBidWZmZXJxdWV1ZSAtLSBpdCBtdXN0IGJlIGF0dGFjaGVkIGJlZm9yZSBxdWV1aW5nLgorCisgICAgICAgIG1PdXRwdXRCdWZmZXJRdWV1ZU11dGV4LmxvY2soKTsKKyAgICAgICAgc3A8SUdyYXBoaWNCdWZmZXJQcm9kdWNlcj4gb3V0cHV0SWdicCA9IG1PdXRwdXRJZ2JwOworICAgICAgICB1aW50MzJfdCBvdXRwdXRHZW5lcmF0aW9uID0gbU91dHB1dEdlbmVyYXRpb247CisgICAgICAgIG1PdXRwdXRCdWZmZXJRdWV1ZU11dGV4LnVubG9jaygpOworCisgICAgICAgIHN0YXR1c190IHN0YXR1cyA9ICFhdHRhY2hUb0J1ZmZlclF1ZXVlKGJsb2NrLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdXRwdXRJZ2JwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdXRwdXRHZW5lcmF0aW9uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmYnFTbG90KTsKKyAgICAgICAgaWYgKHN0YXR1cyAhPSBPSykgeworICAgICAgICAgICAgQUxPR1coInF1ZXVlVG9PdXRwdXRTdXJmYWNlIC0tIGF0dGFjaGluZyBmYWlsZWQuIik7CisgICAgICAgICAgICByZXR1cm4gSU5WQUxJRF9PUEVSQVRJT047CisgICAgICAgIH0KKworICAgICAgICBzdGF0dXMgPSBvdXRwdXRJZ2JwLT5xdWV1ZUJ1ZmZlcihzdGF0aWNfY2FzdDxpbnQ+KGJxU2xvdCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlucHV0LCBvdXRwdXQpOworICAgICAgICBpZiAoc3RhdHVzICE9IE9LKSB7CisgICAgICAgICAgICBBTE9HRSgicXVldWVUb091dHB1dFN1cmZhY2UgLS0gcXVldWVCdWZmZXIoKSBmYWlsZWQgIgorICAgICAgICAgICAgICAgICAgICAib24gbm9uLWJ1ZmZlcnF1ZXVlLWJhc2VkIGJsb2NrLiAiCisgICAgICAgICAgICAgICAgICAgICJFcnJvciBjb2RlID0gJWQuIiwKKyAgICAgICAgICAgICAgICAgICAgc3RhdGljX2Nhc3Q8aW50PihzdGF0dXMpKTsKKyAgICAgICAgICAgIHJldHVybiBzdGF0dXM7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIE9LOworICAgIH0KKworICAgIG1PdXRwdXRCdWZmZXJRdWV1ZU11dGV4LmxvY2soKTsKKyAgICBzcDxJR3JhcGhpY0J1ZmZlclByb2R1Y2VyPiBvdXRwdXRJZ2JwID0gbU91dHB1dElnYnA7CisgICAgdWludDY0X3Qgb3V0cHV0QnFJZCA9IG1PdXRwdXRCcUlkOworICAgIHVpbnQzMl90IG91dHB1dEdlbmVyYXRpb24gPSBtT3V0cHV0R2VuZXJhdGlvbjsKKyAgICBtT3V0cHV0QnVmZmVyUXVldWVNdXRleC51bmxvY2soKTsKKworICAgIGlmICghb3V0cHV0SWdicCkgeworICAgICAgICBBTE9HVigicXVldWVUb091dHB1dFN1cmZhY2UgLS0gb3V0cHV0IHN1cmZhY2UgaXMgbnVsbC4iKTsKKyAgICAgICAgcmV0dXJuIE5PX0lOSVQ7CisgICAgfQorCisgICAgaWYgKGJxSWQgIT0gb3V0cHV0QnFJZCkgeworICAgICAgICBBTE9HVigicXVldWVUb091dHB1dFN1cmZhY2UgLS0gYnVmZmVycXVldWUgaWRzIG1pc21hdGNoLiIpOworICAgICAgICByZXR1cm4gREVBRF9PQkpFQ1Q7CisgICAgfQorCisgICAgaWYgKGdlbmVyYXRpb24gIT0gb3V0cHV0R2VuZXJhdGlvbikgeworICAgICAgICBBTE9HVigicXVldWVUb091dHB1dFN1cmZhY2UgLS0gZ2VuZXJhdGlvbiBudW1iZXJzIG1pc21hdGNoLiIpOworICAgICAgICByZXR1cm4gREVBRF9PQkpFQ1Q7CisgICAgfQorCisgICAgc3RhdHVzX3Qgc3RhdHVzID0gb3V0cHV0SWdicC0+cXVldWVCdWZmZXIoc3RhdGljX2Nhc3Q8aW50PihicVNsb3QpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlucHV0LCBvdXRwdXQpOworICAgIGlmIChzdGF0dXMgIT0gT0spIHsKKyAgICAgICAgQUxPR0QoInF1ZXVlVG9PdXRwdXRTdXJmYWNlIC0tIHF1ZXVlQnVmZmVyKCkgZmFpbGVkICIKKyAgICAgICAgICAgICAgICAib24gYnVmZmVycXVldWUtYmFzZWQgYmxvY2suICIKKyAgICAgICAgICAgICAgICAiRXJyb3IgY29kZSA9ICVkLiIsCisgICAgICAgICAgICAgICAgc3RhdGljX2Nhc3Q8aW50PihzdGF0dXMpKTsKKyAgICAgICAgcmV0dXJuIHN0YXR1czsKKyAgICB9CisgICAgaWYgKCF5aWVsZEJ1ZmZlclF1ZXVlQmxvY2soYmxvY2spKSB7CisgICAgICAgIEFMT0dEKCJxdWV1ZVRvT3V0cHV0U3VyZmFjZSAtLSBjYW5ub3QgeWllbGQgYnVmZmVycXVldWUtYmFzZWQgYmxvY2sgIgorICAgICAgICAgICAgICAgICJ0byB0aGUgYnVmZmVycXVldWUuIik7CisgICAgICAgIHJldHVybiBVTktOT1dOX0VSUk9SOworICAgIH0KKyAgICByZXR1cm4gT0s7Cit9CisKK2MyX3N0YXR1c190IENvZGVjMkNsaWVudDo6Q29tcG9uZW50Ojpjb25uZWN0VG9PbXhJbnB1dFN1cmZhY2UoCisgICAgICAgIGNvbnN0IHNwPEhHcmFwaGljQnVmZmVyUHJvZHVjZXI+JiBwcm9kdWNlciwKKyAgICAgICAgY29uc3Qgc3A8SEdyYXBoaWNCdWZmZXJTb3VyY2U+JiBzb3VyY2UpIHsKKyAgICBSZXR1cm48U3RhdHVzPiB0cmFuc1N0YXR1cyA9IGJhc2UoKS0+Y29ubmVjdFRvT214SW5wdXRTdXJmYWNlKAorICAgICAgICAgICAgcHJvZHVjZXIsIHNvdXJjZSk7CisgICAgaWYgKCF0cmFuc1N0YXR1cy5pc09rKCkpIHsKKyAgICAgICAgQUxPR0UoImNvbm5lY3RUb09teElucHV0U3VyZmFjZSAtLSB0cmFuc2FjdGlvbiBmYWlsZWQuIik7CisgICAgICAgIHJldHVybiBDMl9UUkFOU0FDVElPTl9GQUlMRUQ7CisgICAgfQorICAgIGMyX3N0YXR1c190IHN0YXR1cyA9CisgICAgICAgICAgICBzdGF0aWNfY2FzdDxjMl9zdGF0dXNfdD4oc3RhdGljX2Nhc3Q8U3RhdHVzPih0cmFuc1N0YXR1cykpOworICAgIGlmIChzdGF0dXMgIT0gQzJfT0spIHsKKyAgICAgICAgQUxPR0UoImNvbm5lY3RUb09teElucHV0U3VyZmFjZSAtLSBjYWxsIGZhaWxlZC4gIgorICAgICAgICAgICAgICAgICJFcnJvciBjb2RlID0gJWQiLCBzdGF0aWNfY2FzdDxpbnQ+KHN0YXR1cykpOworICAgIH0KKyAgICByZXR1cm4gc3RhdHVzOworfQorCitjMl9zdGF0dXNfdCBDb2RlYzJDbGllbnQ6OkNvbXBvbmVudDo6ZGlzY29ubmVjdEZyb21JbnB1dFN1cmZhY2UoKSB7CisgICAgUmV0dXJuPFN0YXR1cz4gdHJhbnNTdGF0dXMgPSBiYXNlKCktPmRpc2Nvbm5lY3RGcm9tSW5wdXRTdXJmYWNlKCk7CisgICAgaWYgKCF0cmFuc1N0YXR1cy5pc09rKCkpIHsKKyAgICAgICAgQUxPR0UoImRpc2Nvbm5lY3RUb0lucHV0U3VyZmFjZSAtLSB0cmFuc2FjdGlvbiBmYWlsZWQuIik7CisgICAgICAgIHJldHVybiBDMl9UUkFOU0FDVElPTl9GQUlMRUQ7CisgICAgfQorICAgIGMyX3N0YXR1c190IHN0YXR1cyA9CisgICAgICAgICAgICBzdGF0aWNfY2FzdDxjMl9zdGF0dXNfdD4oc3RhdGljX2Nhc3Q8U3RhdHVzPih0cmFuc1N0YXR1cykpOworICAgIGlmIChzdGF0dXMgIT0gQzJfT0spIHsKKyAgICAgICAgQUxPR0UoImRpc2Nvbm5lY3RGcm9tSW5wdXRTdXJmYWNlIC0tIGNhbGwgZmFpbGVkLiAiCisgICAgICAgICAgICAgICAgIkVycm9yIGNvZGUgPSAlZCIsIHN0YXRpY19jYXN0PGludD4oc3RhdHVzKSk7CisgICAgfQorICAgIHJldHVybiBzdGF0dXM7Cit9CisKK2MyX3N0YXR1c190IENvZGVjMkNsaWVudDo6Q29tcG9uZW50OjpzZXREZWF0aExpc3RlbmVyKAorICAgICAgICBjb25zdCBzdGQ6OnNoYXJlZF9wdHI8Q29tcG9uZW50PiYgY29tcG9uZW50LAorICAgICAgICBjb25zdCBzdGQ6OnNoYXJlZF9wdHI8TGlzdGVuZXI+JiBsaXN0ZW5lcikgeworCisgICAgc3RydWN0IEhpZGxEZWF0aFJlY2lwaWVudCA6IHB1YmxpYyBoYXJkd2FyZTo6aGlkbF9kZWF0aF9yZWNpcGllbnQgeworICAgICAgICBzdGQ6OndlYWtfcHRyPENvbXBvbmVudD4gY29tcG9uZW50OworICAgICAgICBzdGQ6OndlYWtfcHRyPExpc3RlbmVyPiBiYXNlOworCisgICAgICAgIHZpcnR1YWwgdm9pZCBzZXJ2aWNlRGllZCgKKyAgICAgICAgICAgICAgICB1aW50NjRfdCAvKiBjb29raWUgKi8sCisgICAgICAgICAgICAgICAgY29uc3Qgd3A8OjphbmRyb2lkOjpoaWRsOjpiYXNlOjpWMV8wOjpJQmFzZT4mIC8qIHdobyAqLworICAgICAgICAgICAgICAgICkgb3ZlcnJpZGUgeworICAgICAgICAgICAgaWYgKHN0ZDo6c2hhcmVkX3B0cjxDb2RlYzJDbGllbnQ6Okxpc3RlbmVyPiBsaXN0ZW5lciA9IGJhc2UubG9jaygpKSB7CisgICAgICAgICAgICAgICAgbGlzdGVuZXItPm9uRGVhdGgoY29tcG9uZW50KTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgQUxPR1coIm9uRGVhdGggLS0gbGlzdGVuZXIgZGllZC4iKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH07CisKKyAgICBzcDxIaWRsRGVhdGhSZWNpcGllbnQ+IGRlYXRoUmVjaXBpZW50ID0gbmV3IEhpZGxEZWF0aFJlY2lwaWVudCgpOworICAgIGRlYXRoUmVjaXBpZW50LT5iYXNlID0gbGlzdGVuZXI7CisgICAgZGVhdGhSZWNpcGllbnQtPmNvbXBvbmVudCA9IGNvbXBvbmVudDsKKworICAgIGNvbXBvbmVudC0+bURlYXRoUmVjaXBpZW50ID0gZGVhdGhSZWNpcGllbnQ7CisgICAgUmV0dXJuPGJvb2w+IHRyYW5zUmVzdWx0ID0gY29tcG9uZW50LT5iYXNlKCktPmxpbmtUb0RlYXRoKAorICAgICAgICAgICAgY29tcG9uZW50LT5tRGVhdGhSZWNpcGllbnQsIDApOworICAgIGlmICghdHJhbnNSZXN1bHQuaXNPaygpKSB7CisgICAgICAgIEFMT0dFKCJzZXREZWF0aExpc3RlbmVyIC0tIGZhaWxlZCB0cmFuc2FjdGlvbjogbGlua1RvRGVhdGguIik7CisgICAgICAgIHJldHVybiBDMl9UUkFOU0FDVElPTl9GQUlMRUQ7CisgICAgfQorICAgIGlmICghc3RhdGljX2Nhc3Q8Ym9vbD4odHJhbnNSZXN1bHQpKSB7CisgICAgICAgIEFMT0dFKCJzZXREZWF0aExpc3RlbmVyIC0tIGxpbmtUb0RlYXRoIGNhbGwgZmFpbGVkLiIpOworICAgICAgICByZXR1cm4gQzJfQ09SUlVQVEVEOworICAgIH0KKyAgICByZXR1cm4gQzJfT0s7Cit9CisKKy8vIENvZGVjMkNsaWVudDo6SW5wdXRTdXJmYWNlCisKK0NvZGVjMkNsaWVudDo6SW5wdXRTdXJmYWNlOjpCYXNlKiBDb2RlYzJDbGllbnQ6OklucHV0U3VyZmFjZTo6YmFzZSgpIGNvbnN0IHsKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8QmFzZSo+KG1CYXNlLmdldCgpKTsKK30KKworQ29kZWMyQ2xpZW50OjpJbnB1dFN1cmZhY2U6OklucHV0U3VyZmFjZShjb25zdCBzcDxJSW5wdXRTdXJmYWNlPiYgYmFzZSkgOgorICAgIG1CYXNlKGJhc2UpLAorICAgIG1HcmFwaGljQnVmZmVyUHJvZHVjZXIobmV3CisgICAgICAgICAgICA6OmFuZHJvaWQ6OmhhcmR3YXJlOjpncmFwaGljczo6YnVmZmVycXVldWU6OlYxXzA6OnV0aWxzOjoKKyAgICAgICAgICAgIEgyQkdyYXBoaWNCdWZmZXJQcm9kdWNlcihiYXNlKSkgeworfQorCitjMl9zdGF0dXNfdCBDb2RlYzJDbGllbnQ6OklucHV0U3VyZmFjZTo6Y29ubmVjdFRvQ29tcG9uZW50KAorICAgICAgICBjb25zdCBzdGQ6OnNoYXJlZF9wdHI8Q29kZWMyQ2xpZW50OjpDb21wb25lbnQ+JiBjb21wb25lbnQsCisgICAgICAgIHN0ZDo6c2hhcmVkX3B0cjxDb25uZWN0aW9uPiogY29ubmVjdGlvbikgeworICAgIGMyX3N0YXR1c190IHN0YXR1czsKKyAgICBSZXR1cm48dm9pZD4gdHJhbnNTdGF0dXMgPSBiYXNlKCktPmNvbm5lY3RUb0NvbXBvbmVudCgKKyAgICAgICAgY29tcG9uZW50LT5iYXNlKCksCisgICAgICAgIFsmc3RhdHVzLCBjb25uZWN0aW9uXSgKKyAgICAgICAgICAgICAgICBTdGF0dXMgcywKKyAgICAgICAgICAgICAgICBjb25zdCBzcDxJSW5wdXRTdXJmYWNlQ29ubmVjdGlvbj4mIGMpIHsKKyAgICAgICAgICAgIHN0YXR1cyA9IHN0YXRpY19jYXN0PGMyX3N0YXR1c190PihzKTsKKyAgICAgICAgICAgIGlmIChzdGF0dXMgIT0gQzJfT0spIHsKKyAgICAgICAgICAgICAgICBBTE9HRSgiY29ubmVjdFRvQ29tcG9uZW50IC0tIGNhbGwgZmFpbGVkLiAiCisgICAgICAgICAgICAgICAgICAgICAgICAiRXJyb3IgY29kZSA9ICVkIiwgc3RhdGljX2Nhc3Q8aW50PihzdGF0dXMpKTsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisgICAgICAgICAgICAqY29ubmVjdGlvbiA9IHN0ZDo6bWFrZV9zaGFyZWQ8Q29ubmVjdGlvbj4oYyk7CisgICAgICAgIH0pOworICAgIGlmICghdHJhbnNTdGF0dXMuaXNPaygpKSB7CisgICAgICAgIEFMT0dFKCJjb25uZWN0IC0tIHRyYW5zYWN0aW9uIGZhaWxlZC4iKTsKKyAgICAgICAgcmV0dXJuIEMyX1RSQU5TQUNUSU9OX0ZBSUxFRDsKKyAgICB9CisgICAgcmV0dXJuIHN0YXR1czsKK30KKworc3RkOjpzaGFyZWRfcHRyPENvZGVjMkNsaWVudDo6Q29uZmlndXJhYmxlPgorICAgICAgICBDb2RlYzJDbGllbnQ6OklucHV0U3VyZmFjZTo6Z2V0Q29uZmlndXJhYmxlKCkgY29uc3QgeworICAgIFJldHVybjxzcDxJQ29uZmlndXJhYmxlPj4gdHJhbnNSZXN1bHQgPSBiYXNlKCktPmdldENvbmZpZ3VyYWJsZSgpOworICAgIGlmICghdHJhbnNSZXN1bHQuaXNPaygpKSB7CisgICAgICAgIEFMT0dXKCJnZXRDb25maWd1cmFibGUgLS0gdHJhbnNhY3Rpb24gZmFpbGVkLiIpOworICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICB9CisgICAgaWYgKCFzdGF0aWNfY2FzdDxzcDxJQ29uZmlndXJhYmxlPj4odHJhbnNSZXN1bHQpKSB7CisgICAgICAgIEFMT0dXKCJnZXRDb25maWd1cmFibGUgLS0gbnVsbCBwb2ludGVyLiIpOworICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICB9CisgICAgcmV0dXJuIHN0ZDo6bWFrZV9zaGFyZWQ8Q29uZmlndXJhYmxlPih0cmFuc1Jlc3VsdCk7Cit9CisKK2NvbnN0IHNwPElHcmFwaGljQnVmZmVyUHJvZHVjZXI+JgorICAgICAgICBDb2RlYzJDbGllbnQ6OklucHV0U3VyZmFjZTo6Z2V0R3JhcGhpY0J1ZmZlclByb2R1Y2VyKCkgY29uc3QgeworICAgIHJldHVybiBtR3JhcGhpY0J1ZmZlclByb2R1Y2VyOworfQorCitjb25zdCBzcDxJSW5wdXRTdXJmYWNlPiYgQ29kZWMyQ2xpZW50OjpJbnB1dFN1cmZhY2U6OmdldEhhbEludGVyZmFjZSgpIGNvbnN0IHsKKyAgICByZXR1cm4gbUJhc2U7Cit9CisKKy8vIENvZGVjMkNsaWVudDo6SW5wdXRTdXJmYWNlQ29ubmVjdGlvbgorCitDb2RlYzJDbGllbnQ6OklucHV0U3VyZmFjZUNvbm5lY3Rpb246OkJhc2UqCisgICAgICAgIENvZGVjMkNsaWVudDo6SW5wdXRTdXJmYWNlQ29ubmVjdGlvbjo6YmFzZSgpIGNvbnN0IHsKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8QmFzZSo+KG1CYXNlLmdldCgpKTsKK30KKworQ29kZWMyQ2xpZW50OjpJbnB1dFN1cmZhY2VDb25uZWN0aW9uOjpJbnB1dFN1cmZhY2VDb25uZWN0aW9uKAorICAgICAgICBjb25zdCBzcDxDb2RlYzJDbGllbnQ6OklucHV0U3VyZmFjZUNvbm5lY3Rpb246OkJhc2U+JiBiYXNlKSA6CisgICAgbUJhc2UoYmFzZSkgeworfQorCitjMl9zdGF0dXNfdCBDb2RlYzJDbGllbnQ6OklucHV0U3VyZmFjZUNvbm5lY3Rpb246OmRpc2Nvbm5lY3QoKSB7CisgICAgUmV0dXJuPFN0YXR1cz4gdHJhbnNSZXN1bHQgPSBiYXNlKCktPmRpc2Nvbm5lY3QoKTsKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8YzJfc3RhdHVzX3Q+KHN0YXRpY19jYXN0PFN0YXR1cz4odHJhbnNSZXN1bHQpKTsKK30KKworfSAgLy8gbmFtZXNwYWNlIGFuZHJvaWQKKwpkaWZmIC0tZ2l0IGEvbWVkaWEvY29kZWMyL2hpZGwvY2xpZW50L2luY2x1ZGUvY29kZWMyL2hpZGwvY2xpZW50LmggYi9tZWRpYS9jb2RlYzIvaGlkbC9jbGllbnQvaW5jbHVkZS9jb2RlYzIvaGlkbC9jbGllbnQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zYWIzOTY3Ci0tLSAvZGV2L251bGwKKysrIGIvbWVkaWEvY29kZWMyL2hpZGwvY2xpZW50L2luY2x1ZGUvY29kZWMyL2hpZGwvY2xpZW50LmgKQEAgLTAsMCArMSw0ODUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTggVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworCisjaWZuZGVmIENPREVDMl9ISURMX0NMSUVOVF9IXworI2RlZmluZSBDT0RFQzJfSElETF9DTElFTlRfSF8KKworI2luY2x1ZGUgPGd1aS9JR3JhcGhpY0J1ZmZlclByb2R1Y2VyLmg+CisjaW5jbHVkZSA8Y29kZWMyL2hpZGwvMS4wL3R5cGVzLmg+CisKKyNpbmNsdWRlIDxDMlBsYXRmb3JtU3VwcG9ydC5oPgorI2luY2x1ZGUgPEMyQ29tcG9uZW50Lmg+CisjaW5jbHVkZSA8QzJCdWZmZXIuaD4KKyNpbmNsdWRlIDxDMlBhcmFtLmg+CisjaW5jbHVkZSA8QzIuaD4KKworI2luY2x1ZGUgPGhpZGwvSGlkbFN1cHBvcnQuaD4KKyNpbmNsdWRlIDx1dGlscy9TdHJvbmdQb2ludGVyLmg+CisKKyNpbmNsdWRlIDxmdW5jdGlvbmFsPgorI2luY2x1ZGUgPG1hcD4KKyNpbmNsdWRlIDxtZW1vcnk+CisjaW5jbHVkZSA8bXV0ZXg+CisKKy8qKgorICogVGhpcyBmaWxlIGNvbnRhaW5zIG1pbmltYWwgaW50ZXJmYWNlcyBmb3IgdGhlIGZyYW1ld29yayB0byBhY2Nlc3MgQ29kZWMyLjAuCisgKgorICogQ29kZWMyQ2xpZW50IGlzIHRoZSBtYWluIGNsYXNzIHRoYXQgY29udGFpbnMgdGhlIGZvbGxvd2luZyBpbm5lciBjbGFzc2VzOgorICogLSBMaXN0ZW5lcgorICogLSBDb25maWd1cmFibGUKKyAqIC0gSW50ZXJmYWNlCisgKiAtIENvbXBvbmVudAorICoKKyAqIENsYXNzZXMgaW4gQ29kZWMyQ2xpZW50LCBpbnRlcmZhY2VzIGluIENvZGVjMi4wLCBhbmQgIEhJREwgaW50ZXJmYWNlcyBhcmUKKyAqIHJlbGF0ZWQgYXMgZm9sbG93czoKKyAqIC0gQ29kZWMyQ2xpZW50IDw9PT4gQzJDb21wb25lbnRTdG9yZSA8PT0+IElDb21wb25lbnRTdG9yZQorICogLSBDb2RlYzJDbGllbnQ6Okxpc3RlbmVyIDw9PT4gQzJDb21wb25lbnQ6Okxpc3RlbmVyIDw9PT4gSUNvbXBvbmVudExpc3RlbmVyCisgKiAtIENvZGVjMkNsaWVudDo6Q29uZmlndXJhYmxlIDw9PT4gW05vIGVxdWl2YWxlbnRdIDw9PT4gSUNvbmZpZ3VyYWJsZQorICogLSBDb2RlYzJDbGllbnQ6OkludGVyZmFjZSA8PT0+IEMyQ29tcG9uZW50SW50ZXJmYWNlIDw9PT4gSUNvbXBvbmVudEludGVyZmFjZQorICogLSBDb2RlYzJDbGllbnQ6OkNvbXBvbmVudCA8PT0+IEMyQ29tcG9uZW50IDw9PT4gSUNvbXBvbmVudAorICoKKyAqIFRoZSBlbnRyeSBwb2ludCBpcyBDb2RlYzJDbGllbnQ6OkNyZWF0ZUZyb21TZXJ2aWNlKCksIHdoaWNoIGNyZWF0ZXMgYQorICogQ29kZWMyQ2xpZW50IG9iamVjdC4gRnJvbSBDb2RlYzJDbGllbnQsIEludGVyZmFjZSBhbmQgQ29tcG9uZW50IG9iamVjdHMgY2FuCisgKiBiZSBjcmVhdGVkIGJ5IGNhbGxpbmcgY3JlYXRlQ29tcG9uZW50KCkgYW5kIGNyZWF0ZUludGVyZmFjZSgpLgorICoKKyAqIGNyZWF0ZUNvbXBvbmVudCgpIHRha2VzIGEgTGlzdGVuZXIgb2JqZWN0LCB3aGljaCBtdXN0IGJlIGltcGxlbWVudGVkIGJ5IHRoZQorICogdXNlci4KKyAqCisgKiBBdCB0aGUgcHJlc2VudCwgY3JlYXRlQmxvY2tQb29sKCkgaXMgdGhlIG9ubHkgbWV0aG9kIHRoYXQgeWllbGRzIGEKKyAqIENvbmZpZ3VyYWJsZSBvYmplY3QuIE5vdGUsIGhvd2V2ZXIsIHRoYXQgSW50ZXJmYWNlLCBDb21wb25lbnQgYW5kCisgKiBDb2RlYzJDbGllbnQgYXJlIGFsbCBzdWJjbGFzc2VzIG9mIENvbmZpZ3VyYWJsZS4KKyAqLworCisvLyBGb3J3YXJkIGRlY2xhcmF0aW9uIG9mIENvZGVjMi4wIEhJREwgaW50ZXJmYWNlcworbmFtZXNwYWNlIGFuZHJvaWQgeworbmFtZXNwYWNlIGhhcmR3YXJlIHsKK25hbWVzcGFjZSBtZWRpYSB7CituYW1lc3BhY2UgYzIgeworbmFtZXNwYWNlIFYxXzAgeworc3RydWN0IElDb25maWd1cmFibGU7CitzdHJ1Y3QgSUNvbXBvbmVudEludGVyZmFjZTsKK3N0cnVjdCBJQ29tcG9uZW50Oworc3RydWN0IElDb21wb25lbnRTdG9yZTsKK3N0cnVjdCBJSW5wdXRTdXJmYWNlOworc3RydWN0IElJbnB1dFN1cmZhY2VDb25uZWN0aW9uOworfSAvLyBuYW1lc3BhY2UgVjFfMAorfSAvLyBuYW1lc3BhY2UgYzIKK30gLy8gbmFtZXNwYWNlIG1lZGlhCit9IC8vIG5hbWVzcGFjZSBoYXJkd2FyZQorfSAvLyBuYW1lc3BhY2UgYW5kcm9pZAorCituYW1lc3BhY2UgYW5kcm9pZCB7CituYW1lc3BhY2UgaGFyZHdhcmUgeworbmFtZXNwYWNlIG1lZGlhIHsKK25hbWVzcGFjZSBidWZmZXJwb29sIHsKK25hbWVzcGFjZSBWMV8wIHsKK3N0cnVjdCBJQ2xpZW50TWFuYWdlcjsKK30gLy8gbmFtZXNwYWNlIFYxXzAKK30gLy8gbmFtZXNwYWNlIGJ1ZmZlcnBvb2wKK30gLy8gbmFtZXNwYWNlIG1lZGlhCit9IC8vIG5hbWVzcGFjZSBoYXJkd2FyZQorfSAvLyBuYW1lc3BhY2UgYW5kcm9pZAorCisvLyBGb3J3YXJkIGRlY2xhcmF0aW9ucyBvZiBvdGhlciBjbGFzc2VzCituYW1lc3BhY2UgYW5kcm9pZCB7CituYW1lc3BhY2UgaGFyZHdhcmUgeworbmFtZXNwYWNlIGdyYXBoaWNzIHsKK25hbWVzcGFjZSBidWZmZXJxdWV1ZSB7CituYW1lc3BhY2UgVjFfMCB7CitzdHJ1Y3QgSUdyYXBoaWNCdWZmZXJQcm9kdWNlcjsKK30gLy8gbmFtZXNwYWNlIFYxXzAKK30gLy8gbmFtZXNwYWNlIGJ1ZmZlcnF1ZXVlCit9IC8vIG5hbWVzcGFjZSBncmFwaGljcworbmFtZXNwYWNlIG1lZGlhIHsKK25hbWVzcGFjZSBvbXggeworbmFtZXNwYWNlIFYxXzAgeworc3RydWN0IElHcmFwaGljQnVmZmVyU291cmNlOworfSAvLyBuYW1lc3BhY2UgVjFfMAorfSAvLyBuYW1lc3BhY2Ugb214Cit9IC8vIG5hbWVzcGFjZSBtZWRpYQorfSAvLyBuYW1lc3BhY2UgaGFyZHdhcmUKK30gLy8gbmFtZXNwYWNlIGFuZHJvaWQKKworbmFtZXNwYWNlIGFuZHJvaWQgeworCisvLyBUaGlzIGNsYXNzIGlzIHN1cHBvc2VkIHRvIGJlIGNhbGxlZCBDb2RlYzJDbGllbnQ6OkNvbmZpZ3VyYWJsZSwgYnV0IGZvcndhcmQKKy8vIGRlY2xhcmF0aW9uIG9mIGFuIGlubmVyIGNsYXNzIGlzIG5vdCBwb3NzaWJsZS4KK3N0cnVjdCBDb2RlYzJDb25maWd1cmFibGVDbGllbnQgeworCisgICAgdHlwZWRlZiA6OmFuZHJvaWQ6OmhhcmR3YXJlOjptZWRpYTo6YzI6OlYxXzA6OklDb25maWd1cmFibGUgQmFzZTsKKworICAgIGNvbnN0IEMyU3RyaW5nJiBnZXROYW1lKCkgY29uc3Q7CisKKyAgICBjMl9zdGF0dXNfdCBxdWVyeSgKKyAgICAgICAgICAgIGNvbnN0IHN0ZDo6dmVjdG9yPEMyUGFyYW0qPiYgc3RhY2tQYXJhbXMsCisgICAgICAgICAgICBjb25zdCBzdGQ6OnZlY3RvcjxDMlBhcmFtOjpJbmRleD4gJmhlYXBQYXJhbUluZGljZXMsCisgICAgICAgICAgICBjMl9ibG9ja2luZ190IG1heUJsb2NrLAorICAgICAgICAgICAgc3RkOjp2ZWN0b3I8c3RkOjp1bmlxdWVfcHRyPEMyUGFyYW0+PiogY29uc3QgaGVhcFBhcmFtcykgY29uc3Q7CisKKyAgICBjMl9zdGF0dXNfdCBjb25maWcoCisgICAgICAgICAgICBjb25zdCBzdGQ6OnZlY3RvcjxDMlBhcmFtKj4gJnBhcmFtcywKKyAgICAgICAgICAgIGMyX2Jsb2NraW5nX3QgbWF5QmxvY2ssCisgICAgICAgICAgICBzdGQ6OnZlY3RvcjxzdGQ6OnVuaXF1ZV9wdHI8QzJTZXR0aW5nUmVzdWx0Pj4qIGNvbnN0IGZhaWx1cmVzKTsKKworICAgIGMyX3N0YXR1c190IHF1ZXJ5U3VwcG9ydGVkUGFyYW1zKAorICAgICAgICAgICAgc3RkOjp2ZWN0b3I8c3RkOjpzaGFyZWRfcHRyPEMyUGFyYW1EZXNjcmlwdG9yPj4qIGNvbnN0IHBhcmFtcworICAgICAgICAgICAgKSBjb25zdDsKKworICAgIGMyX3N0YXR1c190IHF1ZXJ5U3VwcG9ydGVkVmFsdWVzKAorICAgICAgICAgICAgc3RkOjp2ZWN0b3I8QzJGaWVsZFN1cHBvcnRlZFZhbHVlc1F1ZXJ5PiYgZmllbGRzLAorICAgICAgICAgICAgYzJfYmxvY2tpbmdfdCBtYXlCbG9jaykgY29uc3Q7CisKKyAgICAvLyBiYXNlIGNhbm5vdCBiZSBudWxsLgorICAgIENvZGVjMkNvbmZpZ3VyYWJsZUNsaWVudChjb25zdCBzcDxCYXNlPiYgYmFzZSk7CisKK3Byb3RlY3RlZDoKKyAgICBDMlN0cmluZyBtTmFtZTsKKyAgICBzcDxCYXNlPiBtQmFzZTsKKworICAgIEJhc2UqIGJhc2UoKSBjb25zdDsKKworICAgIGZyaWVuZCBzdHJ1Y3QgQ29kZWMyQ2xpZW50OworfTsKKworc3RydWN0IENvZGVjMkNsaWVudCA6IHB1YmxpYyBDb2RlYzJDb25maWd1cmFibGVDbGllbnQgeworCisgICAgdHlwZWRlZiA6OmFuZHJvaWQ6OmhhcmR3YXJlOjptZWRpYTo6YzI6OlYxXzA6OklDb21wb25lbnRTdG9yZSBCYXNlOworCisgICAgc3RydWN0IExpc3RlbmVyOworCisgICAgdHlwZWRlZiBDb2RlYzJDb25maWd1cmFibGVDbGllbnQgQ29uZmlndXJhYmxlOworCisgICAgdHlwZWRlZiBDb25maWd1cmFibGUgSW50ZXJmYWNlOyAvLyBUaGVzZSB0d28gdHlwZXMgbWF5IGRpdmVyZ2UgaW4gdGhlIGZ1dHVyZS4KKworICAgIHN0cnVjdCBDb21wb25lbnQ7CisKKyAgICBzdHJ1Y3QgSW5wdXRTdXJmYWNlOworCisgICAgc3RydWN0IElucHV0U3VyZmFjZUNvbm5lY3Rpb247CisKKyAgICB0eXBlZGVmIENvZGVjMkNsaWVudCBTdG9yZTsKKworICAgIHN0ZDo6c3RyaW5nIGdldEluc3RhbmNlTmFtZSgpIGNvbnN0IHsgcmV0dXJuIG1JbnN0YW5jZU5hbWU7IH0KKworICAgIGMyX3N0YXR1c190IGNyZWF0ZUNvbXBvbmVudCgKKyAgICAgICAgICAgIGNvbnN0IEMyU3RyaW5nJiBuYW1lLAorICAgICAgICAgICAgY29uc3Qgc3RkOjpzaGFyZWRfcHRyPExpc3RlbmVyPiYgbGlzdGVuZXIsCisgICAgICAgICAgICBzdGQ6OnNoYXJlZF9wdHI8Q29tcG9uZW50PiogY29uc3QgY29tcG9uZW50KTsKKworICAgIGMyX3N0YXR1c190IGNyZWF0ZUludGVyZmFjZSgKKyAgICAgICAgICAgIGNvbnN0IEMyU3RyaW5nJiBuYW1lLAorICAgICAgICAgICAgc3RkOjpzaGFyZWRfcHRyPEludGVyZmFjZT4qIGNvbnN0IGludGVyZmFjZSk7CisKKyAgICBjMl9zdGF0dXNfdCBjcmVhdGVJbnB1dFN1cmZhY2UoCisgICAgICAgICAgICBzdGQ6OnNoYXJlZF9wdHI8SW5wdXRTdXJmYWNlPiogY29uc3QgaW5wdXRTdXJmYWNlKTsKKworICAgIGNvbnN0IHN0ZDo6dmVjdG9yPEMyQ29tcG9uZW50OjpUcmFpdHM+JiBsaXN0Q29tcG9uZW50cygpIGNvbnN0OworCisgICAgYzJfc3RhdHVzX3QgY29weUJ1ZmZlcigKKyAgICAgICAgICAgIGNvbnN0IHN0ZDo6c2hhcmVkX3B0cjxDMkJ1ZmZlcj4mIHNyYywKKyAgICAgICAgICAgIGNvbnN0IHN0ZDo6c2hhcmVkX3B0cjxDMkJ1ZmZlcj4mIGRzdCk7CisKKyAgICBzdGQ6OnNoYXJlZF9wdHI8QzJQYXJhbVJlZmxlY3Rvcj4gZ2V0UGFyYW1SZWZsZWN0b3IoKTsKKworICAgIHN0YXRpYyBzdGQ6OnNoYXJlZF9wdHI8Q29kZWMyQ2xpZW50PiBDcmVhdGVGcm9tU2VydmljZSgKKyAgICAgICAgICAgIGNvbnN0IGNoYXIqIGluc3RhbmNlTmFtZSwKKyAgICAgICAgICAgIGJvb2wgd2FpdEZvclNlcnZpY2UgPSB0cnVlKTsKKworICAgIC8vIFRyeSB0byBjcmVhdGUgYSBjb21wb25lbnQgd2l0aCBhIGdpdmVuIG5hbWUgZnJvbSBhbGwga25vd24KKyAgICAvLyBJQ29tcG9uZW50U3RvcmUgc2VydmljZXMuCisgICAgc3RhdGljIHN0ZDo6c2hhcmVkX3B0cjxDb21wb25lbnQ+IENyZWF0ZUNvbXBvbmVudEJ5TmFtZSgKKyAgICAgICAgICAgIGNvbnN0IGNoYXIqIGNvbXBvbmVudE5hbWUsCisgICAgICAgICAgICBjb25zdCBzdGQ6OnNoYXJlZF9wdHI8TGlzdGVuZXI+JiBsaXN0ZW5lciwKKyAgICAgICAgICAgIHN0ZDo6c2hhcmVkX3B0cjxDb2RlYzJDbGllbnQ+KiBvd25lciA9IG51bGxwdHIpOworCisgICAgLy8gVHJ5IHRvIGNyZWF0ZSBhIGNvbXBvbmVudCBpbnRlcmZhY2Ugd2l0aCBhIGdpdmVuIG5hbWUgZnJvbSBhbGwga25vd24KKyAgICAvLyBJQ29tcG9uZW50U3RvcmUgc2VydmljZXMuCisgICAgc3RhdGljIHN0ZDo6c2hhcmVkX3B0cjxJbnRlcmZhY2U+IENyZWF0ZUludGVyZmFjZUJ5TmFtZSgKKyAgICAgICAgICAgIGNvbnN0IGNoYXIqIGludGVyZmFjZU5hbWUsCisgICAgICAgICAgICBzdGQ6OnNoYXJlZF9wdHI8Q29kZWMyQ2xpZW50Piogb3duZXIgPSBudWxscHRyKTsKKworICAgIC8vIExpc3QgdHJhaXRzIGZyb20gYWxsIGtub3duIElDb21wb25lbnRTdG9yZSBzZXJ2aWNlcy4KKyAgICBzdGF0aWMgY29uc3Qgc3RkOjp2ZWN0b3I8QzJDb21wb25lbnQ6OlRyYWl0cz4mIExpc3RDb21wb25lbnRzKCk7CisKKyAgICAvLyBDcmVhdGUgYW4gaW5wdXQgc3VyZmFjZS4KKyAgICBzdGF0aWMgc3RkOjpzaGFyZWRfcHRyPElucHV0U3VyZmFjZT4gQ3JlYXRlSW5wdXRTdXJmYWNlKCk7CisKKyAgICAvLyBiYXNlIGNhbm5vdCBiZSBudWxsLgorICAgIENvZGVjMkNsaWVudChjb25zdCBzcDxCYXNlPiYgYmFzZSwgc3RkOjpzdHJpbmcgaW5zdGFuY2VOYW1lKTsKKworcHJvdGVjdGVkOgorICAgIEJhc2UqIGJhc2UoKSBjb25zdDsKKworICAgIC8vIEZpbmRzIHRoZSBmaXJzdCBzdG9yZSB3aGVyZSB0aGUgcHJlZGljYXRlIHJldHVybnMgT0ssIGFuZCByZXR1cm5zIHRoZSBsYXN0CisgICAgLy8gcHJlZGljYXRlIHJlc3VsdC4gVXNlcyBrZXkgdG8gcmVtZW1iZXIgdGhlIGxhc3Qgc3RvcmUgZm91bmQsIGFuZCBpZiBjYWNoZWQsCisgICAgLy8gaXQgdHJpZXMgdGhhdCBzdG9yZSBiZWZvcmUgdHJ5aW5nIGFsbCBzdG9yZXMgKG9uZSByZXRyeSkuCisgICAgc3RhdGljIGMyX3N0YXR1c190IEZvckFsbFN0b3JlcygKKyAgICAgICAgICAgIGNvbnN0IHN0ZDo6c3RyaW5nJiBrZXksCisgICAgICAgICAgICBzdGQ6OmZ1bmN0aW9uPGMyX3N0YXR1c190KGNvbnN0IHN0ZDo6c2hhcmVkX3B0cjxDb2RlYzJDbGllbnQ+Jik+IHByZWRpY2F0ZSk7CisKKyAgICBtdXRhYmxlIHN0ZDo6bXV0ZXggbU11dGV4OworICAgIG11dGFibGUgYm9vbCBtTGlzdGVkOworICAgIHN0ZDo6c3RyaW5nIG1JbnN0YW5jZU5hbWU7CisgICAgbXV0YWJsZSBzdGQ6OnZlY3RvcjxDMkNvbXBvbmVudDo6VHJhaXRzPiBtVHJhaXRzTGlzdDsKKyAgICBtdXRhYmxlIHN0ZDo6dmVjdG9yPHN0ZDo6dW5pcXVlX3B0cjxzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4+PgorICAgICAgICAgICAgbUFsaWFzZXNCdWZmZXI7CisKKyAgICBzcDw6OmFuZHJvaWQ6OmhhcmR3YXJlOjptZWRpYTo6YnVmZmVycG9vbDo6VjFfMDo6SUNsaWVudE1hbmFnZXI+CisgICAgICAgICAgICBtSG9zdFBvb2xNYW5hZ2VyOworfTsKKworc3RydWN0IENvZGVjMkNsaWVudDo6TGlzdGVuZXIgeworCisgICAgLy8gVGhpcyBpcyBjYWxsZWQgd2hlbiB0aGUgY29tcG9uZW50IHByb2R1Y2VzIHNvbWUgb3V0cHV0LgorICAgIC8vCisgICAgLy8gbnVtRGlzY2FyZGVkSW5wdXRCdWZmZXJzIGlzIHRoZSBudW1iZXIgb2YgaW5wdXQgYnVmZmVycyBjb250YWluZWQgaW4KKyAgICAvLyB3b3JrSXRlbXMgdGhhdCBoYXZlIGp1c3QgYmVjb21lIHVudXNlZC4gTm90ZSB0aGF0IHdvcmtJdGVtcyBtYXkgY29udGFpbgorICAgIC8vIG1vcmUgaW5wdXQgYnVmZmVycyB0aGFuIG51bURpc2NhcmRlZElucHV0QnVmZmVycyBiZWNhdXNlIGJ1ZmZlcnMgdGhhdAorICAgIC8vIGhhdmUgYmVlbiBwcmV2aW91c2x5IHJlcG9ydGVkIGJ5IG9uSW5wdXRCdWZmZXJEb25lKCkgYXJlIG5vdCBjb3VudGVkCisgICAgLy8gdG93YXJkcyBudW1EaXNjYXJkZWRJbnB1dEJ1ZmZlcnMsIGJ1dCBtYXkgc3RpbGwgc2hvdyB1cCBpbiB3b3JrSXRlbXMuCisgICAgdmlydHVhbCB2b2lkIG9uV29ya0RvbmUoCisgICAgICAgICAgICBjb25zdCBzdGQ6OndlYWtfcHRyPENvbXBvbmVudD4mIGNvbXAsCisgICAgICAgICAgICBzdGQ6Omxpc3Q8c3RkOjp1bmlxdWVfcHRyPEMyV29yaz4+JiB3b3JrSXRlbXMsCisgICAgICAgICAgICBzaXplX3QgbnVtRGlzY2FyZGVkSW5wdXRCdWZmZXJzKSA9IDA7CisKKyAgICAvLyBUaGlzIGlzIGNhbGxlZCB3aGVuIHRoZSBjb21wb25lbnQgZ29lcyBpbnRvIGEgdHJpcHBlZCBzdGF0ZS4KKyAgICB2aXJ0dWFsIHZvaWQgb25UcmlwcGVkKAorICAgICAgICAgICAgY29uc3Qgc3RkOjp3ZWFrX3B0cjxDb21wb25lbnQ+JiBjb21wLAorICAgICAgICAgICAgY29uc3Qgc3RkOjp2ZWN0b3I8c3RkOjpzaGFyZWRfcHRyPEMyU2V0dGluZ1Jlc3VsdD4+JiBzZXR0aW5nUmVzdWx0cworICAgICAgICAgICAgKSA9IDA7CisKKyAgICAvLyBUaGlzIGlzIGNhbGxlZCB3aGVuIHRoZSBjb21wb25lbnQgZW5jb3VudGVycyBhbiBlcnJvci4KKyAgICB2aXJ0dWFsIHZvaWQgb25FcnJvcigKKyAgICAgICAgICAgIGNvbnN0IHN0ZDo6d2Vha19wdHI8Q29tcG9uZW50PiYgY29tcCwKKyAgICAgICAgICAgIHVpbnQzMl90IGVycm9yQ29kZSkgPSAwOworCisgICAgLy8gVGhpcyBpcyBjYWxsZWQgd2hlbiB0aGUgcHJvY2VzcyB0aGF0IGhvc3RzIHRoZSBjb21wb25lbnQgc2h1dHMgZG93bgorICAgIC8vIHVuZXhwZWN0ZWRseS4KKyAgICB2aXJ0dWFsIHZvaWQgb25EZWF0aCgKKyAgICAgICAgICAgIGNvbnN0IHN0ZDo6d2Vha19wdHI8Q29tcG9uZW50PiYgY29tcCkgPSAwOworCisgICAgLy8gVGhpcyBpcyBjYWxsZWQgd2hlbiBhbiBpbnB1dCBidWZmZXIgaXMgbm8gbG9uZ2VyIGluIHVzZSBieSB0aGUgY29kZWMuCisgICAgLy8gSW5wdXQgYnVmZmVycyB0aGF0IGhhdmUgYmVlbiByZXR1cm5lZCBieSBvbldvcmtEb25lKCkgb3IgZmx1c2goKSB3aWxsIG5vdAorICAgIC8vIHRyaWdnZXIgYSBjYWxsIHRvIHRoaXMgZnVuY3Rpb24uCisgICAgdmlydHVhbCB2b2lkIG9uSW5wdXRCdWZmZXJEb25lKAorICAgICAgICAgICAgY29uc3Qgc3RkOjpzaGFyZWRfcHRyPEMyQnVmZmVyPiYgYnVmZmVyKSA9IDA7CisKKyAgICAvLyBUaGlzIHN0cnVjdHVyZSBpcyB1c2VkIGZvciB0cmFuc3BvcnRpbmcgb25GcmFtZXNSZW5kZXJlZCgpIGV2ZW50IHRvIHRoZQorICAgIC8vIGNsaWVudCBpbiB0aGUgY2FzZSB3aGVyZSB0aGUgb3V0cHV0IGJ1ZmZlcnMgYXJlIG9idGFpbmVkIGZyb20gYQorICAgIC8vIGJ1ZmZlcnF1ZXVlLgorICAgIHN0cnVjdCBSZW5kZXJlZEZyYW1lIHsKKyAgICAgICAgLy8gVGhlIGlkIG9mIHRoZSBidWZmZXJxdWV1ZS4KKyAgICAgICAgdWludDY0X3QgYnVmZmVyUXVldWVJZDsKKyAgICAgICAgLy8gVGhlIHNsb3Qgb2YgdGhlIGJ1ZmZlciBpbnNpZGUgdGhlIGJ1ZmZlcnF1ZXVlLgorICAgICAgICBpbnQzMl90IHNsb3RJZDsKKyAgICAgICAgLy8gVGhlIHRpbWVzdGFtcC4KKyAgICAgICAgaW50NjRfdCB0aW1lc3RhbXBOczsKKworICAgICAgICBSZW5kZXJlZEZyYW1lKHVpbnQ2NF90IGJ1ZmZlclF1ZXVlSWQsIGludDMyX3Qgc2xvdElkLAorICAgICAgICAgICAgICAgICAgICAgIGludDY0X3QgdGltZXN0YW1wTnMpCisgICAgICAgICAgICAgIDogYnVmZmVyUXVldWVJZChidWZmZXJRdWV1ZUlkKSwKKyAgICAgICAgICAgICAgICBzbG90SWQoc2xvdElkKSwKKyAgICAgICAgICAgICAgICB0aW1lc3RhbXBOcyh0aW1lc3RhbXBOcykge30KKyAgICAgICAgUmVuZGVyZWRGcmFtZShjb25zdCBSZW5kZXJlZEZyYW1lJikgPSBkZWZhdWx0OworICAgIH07CisKKyAgICAvLyBUaGlzIGlzIGNhbGxlZCB3aGVuIHRoZSBjb21wb25lbnQgYmVjb21lcyBhd2FyZSBvZiBmcmFtZXMgYmVpbmcgcmVuZGVyZWQuCisgICAgdmlydHVhbCB2b2lkIG9uRnJhbWVzUmVuZGVyZWQoCisgICAgICAgICAgICBjb25zdCBzdGQ6OnZlY3RvcjxSZW5kZXJlZEZyYW1lPiYgcmVuZGVyZWRGcmFtZXMpID0gMDsKKworICAgIHZpcnR1YWwgfkxpc3RlbmVyKCk7CisKK307CisKK3N0cnVjdCBDb2RlYzJDbGllbnQ6OkNvbXBvbmVudCA6IHB1YmxpYyBDb2RlYzJDbGllbnQ6OkNvbmZpZ3VyYWJsZSB7CisKKyAgICB0eXBlZGVmIDo6YW5kcm9pZDo6aGFyZHdhcmU6Om1lZGlhOjpjMjo6VjFfMDo6SUNvbXBvbmVudCBCYXNlOworCisgICAgYzJfc3RhdHVzX3QgY3JlYXRlQmxvY2tQb29sKAorICAgICAgICAgICAgQzJBbGxvY2F0b3I6OmlkX3QgaWQsCisgICAgICAgICAgICBDMkJsb2NrUG9vbDo6bG9jYWxfaWRfdCogYmxvY2tQb29sSWQsCisgICAgICAgICAgICBzdGQ6OnNoYXJlZF9wdHI8Q29uZmlndXJhYmxlPiogY29uZmlndXJhYmxlKTsKKworICAgIGMyX3N0YXR1c190IGRlc3Ryb3lCbG9ja1Bvb2woCisgICAgICAgICAgICBDMkJsb2NrUG9vbDo6bG9jYWxfaWRfdCBsb2NhbElkKTsKKworICAgIGMyX3N0YXR1c190IHF1ZXVlKAorICAgICAgICAgICAgc3RkOjpsaXN0PHN0ZDo6dW5pcXVlX3B0cjxDMldvcms+PiogY29uc3QgaXRlbXMpOworCisgICAgYzJfc3RhdHVzX3QgZmx1c2goCisgICAgICAgICAgICBDMkNvbXBvbmVudDo6Zmx1c2hfbW9kZV90IG1vZGUsCisgICAgICAgICAgICBzdGQ6Omxpc3Q8c3RkOjp1bmlxdWVfcHRyPEMyV29yaz4+KiBjb25zdCBmbHVzaGVkV29yayk7CisKKyAgICBjMl9zdGF0dXNfdCBkcmFpbihDMkNvbXBvbmVudDo6ZHJhaW5fbW9kZV90IG1vZGUpOworCisgICAgYzJfc3RhdHVzX3Qgc3RhcnQoKTsKKworICAgIGMyX3N0YXR1c190IHN0b3AoKTsKKworICAgIGMyX3N0YXR1c190IHJlc2V0KCk7CisKKyAgICBjMl9zdGF0dXNfdCByZWxlYXNlKCk7CisKKyAgICB0eXBlZGVmIDo6YW5kcm9pZDo6CisgICAgICAgICAgICBJR3JhcGhpY0J1ZmZlclByb2R1Y2VyIElHcmFwaGljQnVmZmVyUHJvZHVjZXI7CisgICAgdHlwZWRlZiBJR3JhcGhpY0J1ZmZlclByb2R1Y2VyOjoKKyAgICAgICAgICAgIFF1ZXVlQnVmZmVySW5wdXQgUXVldWVCdWZmZXJJbnB1dDsKKyAgICB0eXBlZGVmIElHcmFwaGljQnVmZmVyUHJvZHVjZXI6OgorICAgICAgICAgICAgUXVldWVCdWZmZXJPdXRwdXQgUXVldWVCdWZmZXJPdXRwdXQ7CisKKyAgICB0eXBlZGVmIDo6YW5kcm9pZDo6aGFyZHdhcmU6OmdyYXBoaWNzOjpidWZmZXJxdWV1ZTo6VjFfMDo6CisgICAgICAgICAgICBJR3JhcGhpY0J1ZmZlclByb2R1Y2VyIEhHcmFwaGljQnVmZmVyUHJvZHVjZXI7CisgICAgdHlwZWRlZiA6OmFuZHJvaWQ6OmhhcmR3YXJlOjptZWRpYTo6b214OjpWMV8wOjoKKyAgICAgICAgICAgIElHcmFwaGljQnVmZmVyU291cmNlIEhHcmFwaGljQnVmZmVyU291cmNlOworCisgICAgLy8gU2V0IHRoZSBvdXRwdXQgc3VyZmFjZSB0byBiZSB1c2VkIHdpdGggYSBibG9ja3Bvb2wgcHJldmlvdXNseSBjcmVhdGVkIGJ5CisgICAgLy8gY3JlYXRlQmxvY2tQb29sKCkuCisgICAgYzJfc3RhdHVzX3Qgc2V0T3V0cHV0U3VyZmFjZSgKKyAgICAgICAgICAgIEMyQmxvY2tQb29sOjpsb2NhbF9pZF90IGJsb2NrUG9vbElkLAorICAgICAgICAgICAgY29uc3Qgc3A8SUdyYXBoaWNCdWZmZXJQcm9kdWNlcj4mIHN1cmZhY2UsCisgICAgICAgICAgICB1aW50MzJfdCBnZW5lcmF0aW9uKTsKKworICAgIC8vIEV4dHJhY3QgYSBzbG90IG51bWJlciBmcm9tIG9mIHRoZSBibG9jaywgdGhlbiBjYWxsCisgICAgLy8gSUdyYXBoaWNCdWZmZXJQcm9kdWNlcjo6cXVldWVCdWZmZXIoKS4KKyAgICAvLworICAgIC8vIElmIHRoZSBvdXRwdXQgc3VyZmFjZSBoYXMgbm90IGJlZW4gc2V0LCBOT19JTklUIHdpbGwgYmUgcmV0dXJuZWQuCisgICAgLy8KKyAgICAvLyBJZiB0aGUgYmxvY2sgZG9lcyBub3QgY29tZSBmcm9tIGEgYnVmZmVycXVldWUtYmFzZWQgYmxvY2twb29sLAorICAgIC8vIGF0dGFjaEJ1ZmZlcigpIHdpbGwgYmUgY2FsbGVkLCBmb2xsb3dlZCBieSBxdWV1ZUJ1ZmZlcigpLgorICAgIC8vCisgICAgLy8gSWYgdGhlIGJsb2NrIGhhcyBhIGJxSWQgdGhhdCBkb2VzIG5vdCBtYXRjaCB0aGUgaWQgb2YgdGhlIG91dHB1dCBzdXJmYWNlLAorICAgIC8vIERFQURfT0JKRUNUIHdpbGwgYmUgcmV0dXJuZWQuCisgICAgLy8KKyAgICAvLyBJZiB0aGUgY2FsbCB0byBxdWV1ZUJ1ZmZlcigpIGlzIHN1Y2Nlc3NmdWwgYnV0IHRoZSBibG9jayBjYW5ub3QgYmUKKyAgICAvLyBhc3NvY2lhdGVkIHRvIHRoZSBvdXRwdXQgc3VyZmFjZSBmb3IgYXV0b21hdGljIGNhbmNlbGxhdGlvbiB1cG9uCisgICAgLy8gZGVzdHJ1Y3Rpb24sIFVOS05PV05fRVJST1Igd2lsbCBiZSByZXR1cm5lZC4KKyAgICAvLworICAgIC8vIE90aGVyd2lzZSwgdGhlIHJldHVybiB2YWx1ZSBmcm9tIHF1ZXVlQnVmZmVyKCkgd2lsbCBiZSByZXR1cm5lZC4KKyAgICBzdGF0dXNfdCBxdWV1ZVRvT3V0cHV0U3VyZmFjZSgKKyAgICAgICAgICAgIGNvbnN0IEMyQ29uc3RHcmFwaGljQmxvY2smIGJsb2NrLAorICAgICAgICAgICAgY29uc3QgUXVldWVCdWZmZXJJbnB1dCYgaW5wdXQsCisgICAgICAgICAgICBRdWV1ZUJ1ZmZlck91dHB1dCogb3V0cHV0KTsKKworICAgIGMyX3N0YXR1c190IGNvbm5lY3RUb09teElucHV0U3VyZmFjZSgKKyAgICAgICAgICAgIGNvbnN0IHNwPEhHcmFwaGljQnVmZmVyUHJvZHVjZXI+JiBwcm9kdWNlciwKKyAgICAgICAgICAgIGNvbnN0IHNwPEhHcmFwaGljQnVmZmVyU291cmNlPiYgc291cmNlKTsKKworICAgIGMyX3N0YXR1c190IGRpc2Nvbm5lY3RGcm9tSW5wdXRTdXJmYWNlKCk7CisKKyAgICAvLyBiYXNlIGNhbm5vdCBiZSBudWxsLgorICAgIENvbXBvbmVudChjb25zdCBzcDxCYXNlPiYgYmFzZSk7CisKKyAgICB+Q29tcG9uZW50KCk7CisKK3Byb3RlY3RlZDoKKyAgICBCYXNlKiBiYXNlKCkgY29uc3Q7CisKKyAgICAvLyBNdXRleCBmb3IgbUlucHV0QnVmZmVycyBhbmQgbUlucHV0QnVmZmVyQ291bnQuCisgICAgbXV0YWJsZSBzdGQ6Om11dGV4IG1JbnB1dEJ1ZmZlcnNNdXRleDsKKworICAgIC8vIE1hcDogZnJhbWVJbmRleCAtPiB2ZWN0b3Igb2YgYnVmZmVySW5kaWNlcworICAgIC8vCisgICAgLy8gbUlucHV0QnVmZmVyc1tmcmFtZUluZGV4XVtidWZmZXJJbmRleF0gbWF5IGJlIG51bGwgaWYgdGhlIGJ1ZmZlciBpbiB0aGF0CisgICAgLy8gc2xvdCBoYXMgYmVlbiBmcmVlZC4KKyAgICBtdXRhYmxlIHN0ZDo6bWFwPHVpbnQ2NF90LCBzdGQ6OnZlY3RvcjxzdGQ6OnNoYXJlZF9wdHI8QzJCdWZmZXI+Pj4KKyAgICAgICAgICAgIG1JbnB1dEJ1ZmZlcnM7CisKKyAgICAvLyBNYXA6IGZyYW1lSW5kZXggLT4gbnVtYmVyIG9mIGJ1ZmZlckluZGljZXMgdGhhdCBoYXZlIG5vdCBiZWVuIGZyZWVkCisgICAgLy8KKyAgICAvLyBtSW5wdXRCdWZmZXJDb3VudFtmcmFtZUluZGV4XSBrZWVwcyB0cmFjayBvZiB0aGUgbnVtYmVyIG9mIG5vbi1udWxsCisgICAgLy8gZWxlbWVudHMgaW4gbUlucHV0QnVmZmVyc1tmcmFtZUluZGV4XS4gV2hlbiBtSW5wdXRCdWZmZXJDb3VudFtmcmFtZUluZGV4XQorICAgIC8vIGRlY3JlYXNlcyB0byAwLCBmcmFtZUluZGV4IGNhbiBiZSByZW1vdmVkIGZyb20gYm90aCBtSW5wdXRCdWZmZXJzIGFuZAorICAgIC8vIG1JbnB1dEJ1ZmZlckNvdW50LgorICAgIG11dGFibGUgc3RkOjptYXA8dWludDY0X3QsIHNpemVfdD4gbUlucHV0QnVmZmVyQ291bnQ7CisKKyAgICA6OmFuZHJvaWQ6OmhhcmR3YXJlOjptZWRpYTo6YzI6OlYxXzA6OnV0aWxzOjpEZWZhdWx0QnVmZmVyUG9vbFNlbmRlcgorICAgICAgICAgICAgbUJ1ZmZlclBvb2xTZW5kZXI7CisKKyAgICBzdGQ6Om11dGV4IG1PdXRwdXRCdWZmZXJRdWV1ZU11dGV4OworICAgIHNwPElHcmFwaGljQnVmZmVyUHJvZHVjZXI+IG1PdXRwdXRJZ2JwOworICAgIHVpbnQ2NF90IG1PdXRwdXRCcUlkOworICAgIHVpbnQzMl90IG1PdXRwdXRHZW5lcmF0aW9uOworCisgICAgc3RhdGljIGMyX3N0YXR1c190IHNldERlYXRoTGlzdGVuZXIoCisgICAgICAgICAgICBjb25zdCBzdGQ6OnNoYXJlZF9wdHI8Q29tcG9uZW50PiYgY29tcG9uZW50LAorICAgICAgICAgICAgY29uc3Qgc3RkOjpzaGFyZWRfcHRyPExpc3RlbmVyPiYgbGlzdGVuZXIpOworICAgIHNwPDo6YW5kcm9pZDo6aGFyZHdhcmU6OmhpZGxfZGVhdGhfcmVjaXBpZW50PiBtRGVhdGhSZWNpcGllbnQ7CisKKyAgICBmcmllbmQgc3RydWN0IENvZGVjMkNsaWVudDsKKworICAgIHN0cnVjdCBIaWRsTGlzdGVuZXI7CisgICAgLy8gUmV0dXJuIHRoZSBudW1iZXIgb2YgaW5wdXQgYnVmZmVycyB0aGF0IHNob3VsZCBiZSBkaXNjYXJkZWQuCisgICAgc2l6ZV90IGhhbmRsZU9uV29ya0RvbmUoY29uc3Qgc3RkOjpsaXN0PHN0ZDo6dW5pcXVlX3B0cjxDMldvcms+PiAmd29ya0l0ZW1zKTsKKyAgICAvLyBSZW1vdmUgYW4gaW5wdXQgYnVmZmVyIGZyb20gbUlucHV0QnVmZmVycyBhbmQgcmV0dXJuIGl0LgorICAgIHN0ZDo6c2hhcmVkX3B0cjxDMkJ1ZmZlcj4gZnJlZUlucHV0QnVmZmVyKHVpbnQ2NF90IGZyYW1lSW5kZXgsIHNpemVfdCBidWZmZXJJbmRleCk7CisKK307CisKK3N0cnVjdCBDb2RlYzJDbGllbnQ6OklucHV0U3VyZmFjZSB7CitwdWJsaWM6CisgICAgdHlwZWRlZiA6OmFuZHJvaWQ6OmhhcmR3YXJlOjptZWRpYTo6YzI6OlYxXzA6OklJbnB1dFN1cmZhY2UgQmFzZTsKKworICAgIHR5cGVkZWYgOjphbmRyb2lkOjpoYXJkd2FyZTo6bWVkaWE6OmMyOjpWMV8wOjpJSW5wdXRTdXJmYWNlQ29ubmVjdGlvbgorICAgICAgICAgICAgQ29ubmVjdGlvbkJhc2U7CisKKyAgICB0eXBlZGVmIENvZGVjMkNsaWVudDo6SW5wdXRTdXJmYWNlQ29ubmVjdGlvbiBDb25uZWN0aW9uOworCisgICAgdHlwZWRlZiA6OmFuZHJvaWQ6OklHcmFwaGljQnVmZmVyUHJvZHVjZXIgSUdyYXBoaWNCdWZmZXJQcm9kdWNlcjsKKworICAgIGMyX3N0YXR1c190IGNvbm5lY3RUb0NvbXBvbmVudCgKKyAgICAgICAgICAgIGNvbnN0IHN0ZDo6c2hhcmVkX3B0cjxDb21wb25lbnQ+JiBjb21wb25lbnQsCisgICAgICAgICAgICBzdGQ6OnNoYXJlZF9wdHI8Q29ubmVjdGlvbj4qIGNvbm5lY3Rpb24pOworCisgICAgc3RkOjpzaGFyZWRfcHRyPENvbmZpZ3VyYWJsZT4gZ2V0Q29uZmlndXJhYmxlKCkgY29uc3Q7CisKKyAgICBjb25zdCBzcDxJR3JhcGhpY0J1ZmZlclByb2R1Y2VyPiYgZ2V0R3JhcGhpY0J1ZmZlclByb2R1Y2VyKCkgY29uc3Q7CisKKyAgICAvLyBSZXR1cm4gdGhlIHVuZGVybHlpbmcgSUlucHV0U3VyZmFjZS4KKyAgICBjb25zdCBzcDxCYXNlPiYgZ2V0SGFsSW50ZXJmYWNlKCkgY29uc3Q7CisKKyAgICAvLyBiYXNlIGNhbm5vdCBiZSBudWxsLgorICAgIElucHV0U3VyZmFjZShjb25zdCBzcDxCYXNlPiYgYmFzZSk7CisKK3Byb3RlY3RlZDoKKyAgICBCYXNlKiBiYXNlKCkgY29uc3Q7CisgICAgc3A8QmFzZT4gbUJhc2U7CisKKyAgICBzcDxJR3JhcGhpY0J1ZmZlclByb2R1Y2VyPiBtR3JhcGhpY0J1ZmZlclByb2R1Y2VyOworCisgICAgZnJpZW5kIHN0cnVjdCBDb2RlYzJDbGllbnQ7CisgICAgZnJpZW5kIHN0cnVjdCBDb21wb25lbnQ7Cit9OworCitzdHJ1Y3QgQ29kZWMyQ2xpZW50OjpJbnB1dFN1cmZhY2VDb25uZWN0aW9uIHsKKworICAgIHR5cGVkZWYgOjphbmRyb2lkOjpoYXJkd2FyZTo6bWVkaWE6OmMyOjpWMV8wOjpJSW5wdXRTdXJmYWNlQ29ubmVjdGlvbiBCYXNlOworCisgICAgYzJfc3RhdHVzX3QgZGlzY29ubmVjdCgpOworCisgICAgLy8gYmFzZSBjYW5ub3QgYmUgbnVsbC4KKyAgICBJbnB1dFN1cmZhY2VDb25uZWN0aW9uKGNvbnN0IHNwPEJhc2U+JiBiYXNlKTsKKworcHJvdGVjdGVkOgorICAgIEJhc2UqIGJhc2UoKSBjb25zdDsKKyAgICBzcDxCYXNlPiBtQmFzZTsKKworICAgIGZyaWVuZCBzdHJ1Y3QgQ29kZWMyQ2xpZW50OjpJbnB1dFN1cmZhY2U7Cit9OworCit9ICAvLyBuYW1lc3BhY2UgYW5kcm9pZAorCisjZW5kaWYgIC8vIENPREVDMl9ISURMX0NMSUVOVF9IXworCmRpZmYgLS1naXQgYS9tZWRpYS9jb2RlYzIvaGlkbC9zZXJ2aWNlcy9BbmRyb2lkLmJwIGIvbWVkaWEvY29kZWMyL2hpZGwvc2VydmljZXMvQW5kcm9pZC5icApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45NjU5NzFlCi0tLSAvZGV2L251bGwKKysrIGIvbWVkaWEvY29kZWMyL2hpZGwvc2VydmljZXMvQW5kcm9pZC5icApAQCAtMCwwICsxLDk0IEBACitjY19iaW5hcnkgeworICAgIG5hbWU6ICJhbmRyb2lkLmhhcmR3YXJlLm1lZGlhLmMyQDEuMC1zZXJ2aWNlIiwKKyAgICBkZWZhdWx0czogWyJoaWRsX2RlZmF1bHRzIl0sCisgICAgc29jX3NwZWNpZmljOiB0cnVlLAorICAgIHJlbGF0aXZlX2luc3RhbGxfcGF0aDogImh3IiwKKyAgICBzcmNzOiBbCisgICAgICAgICJ2ZW5kb3IuY3BwIiwKKyAgICBdLAorCisgICAgaW5pdF9yYzogWyJhbmRyb2lkLmhhcmR3YXJlLm1lZGlhLmMyQDEuMC1zZXJ2aWNlLnJjIl0sCisKKyAgICBzaGFyZWRfbGliczogWworICAgICAgICAiYW5kcm9pZC5oYXJkd2FyZS5tZWRpYS5jMkAxLjAiLAorICAgICAgICAiYW5kcm9pZC5oYXJkd2FyZS5tZWRpYS5vbXhAMS4wIiwKKyAgICAgICAgImxpYmF2c2VydmljZXNfbWluaWphaWxfdmVuZG9yIiwKKyAgICAgICAgImxpYmJpbmRlciIsCisgICAgICAgICJsaWJjb2RlYzJfaGlkbEAxLjAiLAorICAgICAgICAibGliY29kZWMyX3ZuZGsiLAorICAgICAgICAibGliaGlkbGJhc2UiLAorICAgICAgICAibGliaGlkbHRyYW5zcG9ydCIsCisgICAgICAgICJsaWJod2JpbmRlciIsCisgICAgICAgICJsaWJsb2ciLAorICAgICAgICAibGlic3RhZ2VmcmlnaHRfb214IiwKKyAgICAgICAgImxpYnN0YWdlZnJpZ2h0X3htbHBhcnNlciIsCisgICAgICAgICJsaWJ1dGlscyIsCisgICAgXSwKKworICAgIGFyY2g6IHsKKyAgICAgICAgYXJtOiB7CisgICAgICAgICAgICByZXF1aXJlZDogWyJjb2RlYzIudmVuZG9yLmJhc2UucG9saWN5Il0sCisgICAgICAgIH0sCisgICAgICAgIHg4NjogeworICAgICAgICAgICAgcmVxdWlyZWQ6IFsiY29kZWMyLnZlbmRvci5iYXNlLnBvbGljeSJdLAorICAgICAgICB9LAorICAgIH0sCisKKyAgICBjb21waWxlX211bHRpbGliOiAiMzIiLAorfQorCitjY19saWJyYXJ5X3NoYXJlZCB7CisgICAgbmFtZTogImxpYmNvZGVjMl9zZXJ2aWNlcmVnaXN0cmFudCIsCisgICAgLy8gbmVlZCB2ZW5kb3IgdmVyc2lvbiBmb3IgdXBkYXRlIHBhY2thZ2luZywgc3lzdGVtIHZlcnNpb24gbWF5IGhhdmUgbW9yZSBkZXBlbmRlbmNpZXMKKyAgICB2ZW5kb3JfYXZhaWxhYmxlOiB0cnVlLAorICAgIHNyY3M6IFsKKyAgICAgICAgIkMyU29mdHdhcmVDb2RlY1NlcnZpY2VSZWdpc3RyYW50LmNwcCIsCisgICAgXSwKKworICAgIGhlYWRlcl9saWJzOiBbCisgICAgICAgICJsaWJtZWRpYV9oZWFkZXJzIiwKKyAgICBdLAorCisgICAgc2hhcmVkX2xpYnM6IFsKKyAgICAgICAgImFuZHJvaWQuaGFyZHdhcmUubWVkaWEuYzJAMS4wIiwKKyAgICAgICAgImxpYmNvZGVjMl9oaWRsQDEuMCIsCisgICAgICAgICJsaWJjb2RlYzJfdm5kayIsCisgICAgICAgICJsaWJsb2ciLAorICAgICAgICAibGlidXRpbHMiLAorICAgIF0sCisKKyAgICAvLyBDb2RlY3MKKyAgICBydW50aW1lX2xpYnM6IFsKKyAgICAgICAgImxpYmNvZGVjMl9zb2Z0X2F2Y2RlYyIsCisgICAgICAgICJsaWJjb2RlYzJfc29mdF9hdmNlbmMiLAorICAgICAgICAibGliY29kZWMyX3NvZnRfYWFjZGVjIiwKKyAgICAgICAgImxpYmNvZGVjMl9zb2Z0X2FhY2VuYyIsCisgICAgICAgICJsaWJjb2RlYzJfc29mdF9hbXJuYmRlYyIsCisgICAgICAgICJsaWJjb2RlYzJfc29mdF9hbXJuYmVuYyIsCisgICAgICAgICJsaWJjb2RlYzJfc29mdF9hbXJ3YmRlYyIsCisgICAgICAgICJsaWJjb2RlYzJfc29mdF9hbXJ3YmVuYyIsCisgICAgICAgICJsaWJjb2RlYzJfc29mdF9oZXZjZGVjIiwKKyAgICAgICAgImxpYmNvZGVjMl9zb2Z0X2c3MTFhbGF3ZGVjIiwKKyAgICAgICAgImxpYmNvZGVjMl9zb2Z0X2c3MTFtbGF3ZGVjIiwKKyAgICAgICAgImxpYmNvZGVjMl9zb2Z0X21wZWcyZGVjIiwKKyAgICAgICAgImxpYmNvZGVjMl9zb2Z0X2gyNjNkZWMiLAorICAgICAgICAibGliY29kZWMyX3NvZnRfaDI2M2VuYyIsCisgICAgICAgICJsaWJjb2RlYzJfc29mdF9tcGVnNGRlYyIsCisgICAgICAgICJsaWJjb2RlYzJfc29mdF9tcGVnNGVuYyIsCisgICAgICAgICJsaWJjb2RlYzJfc29mdF9tcDNkZWMiLAorICAgICAgICAibGliY29kZWMyX3NvZnRfdm9yYmlzZGVjIiwKKyAgICAgICAgImxpYmNvZGVjMl9zb2Z0X29wdXNkZWMiLAorICAgICAgICAibGliY29kZWMyX3NvZnRfdnA4ZGVjIiwKKyAgICAgICAgImxpYmNvZGVjMl9zb2Z0X3ZwOWRlYyIsCisgICAgICAgICJsaWJjb2RlYzJfc29mdF92cDhlbmMiLAorICAgICAgICAibGliY29kZWMyX3NvZnRfdnA5ZW5jIiwKKyAgICAgICAgImxpYmNvZGVjMl9zb2Z0X3Jhd2RlYyIsCisgICAgICAgICJsaWJjb2RlYzJfc29mdF9mbGFjZGVjIiwKKyAgICAgICAgImxpYmNvZGVjMl9zb2Z0X2ZsYWNlbmMiLAorICAgICAgICAibGliY29kZWMyX3NvZnRfZ3NtZGVjIiwKKyAgICAgICAgImxpYmNvZGVjMl9zb2Z0X3hhYWNkZWMiLAorICAgIF0sCisKKyAgICBjb21waWxlX211bHRpbGliOiAiMzIiLAorfQorCmRpZmYgLS1naXQgYS9tZWRpYS9jb2RlYzIvaGlkbC9zZXJ2aWNlcy9BbmRyb2lkLm1rIGIvbWVkaWEvY29kZWMyL2hpZGwvc2VydmljZXMvQW5kcm9pZC5tawpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kOWIyOGU3Ci0tLSAvZGV2L251bGwKKysrIGIvbWVkaWEvY29kZWMyL2hpZGwvc2VydmljZXMvQW5kcm9pZC5tawpAQCAtMCwwICsxLDI0IEBACitMT0NBTF9QQVRIIDo9ICQoY2FsbCBteS1kaXIpCisKKyMgdmVuZG9yIHNlcnZpY2Ugc2VjY29tcCBwb2xpY3kKK2lmZXEgKCQoVEFSR0VUX0FSQ0gpLCQoZmlsdGVyICQoVEFSR0VUX0FSQ0gpLCB4ODYgeDg2XzY0IGFybSBhcm02NCkpCitpbmNsdWRlICQoQ0xFQVJfVkFSUykKK0xPQ0FMX01PRFVMRSA6PSBjb2RlYzIudmVuZG9yLmJhc2UucG9saWN5CitMT0NBTF9WRU5ET1JfTU9EVUxFIDo9IHRydWUKK0xPQ0FMX01PRFVMRV9DTEFTUyA6PSBFVEMKK0xPQ0FMX01PRFVMRV9QQVRIIDo9ICQoVEFSR0VUX09VVF9WRU5ET1IpL2V0Yy9zZWNjb21wX3BvbGljeQorTE9DQUxfUkVRVUlSRURfTU9EVUxFUyA6PSBjcmFzaF9kdW1wLnBvbGljeQoraWZkZWYgVEFSR0VUXzJORF9BUkNICisgICAgaWZuZXEgKCQoVEFSR0VUX1RSQU5TTEFURV8yTkRfQVJDSCksdHJ1ZSkKKyAgICAgICAgTE9DQUxfU1JDX0ZJTEVTIDo9IHNlY2NvbXBfcG9saWN5L2NvZGVjMi52ZW5kb3IuYmFzZS0kKFRBUkdFVF8yTkRfQVJDSCkucG9saWN5CisgICAgZWxzZQorICAgICAgICBMT0NBTF9TUkNfRklMRVMgOj0gc2VjY29tcF9wb2xpY3kvY29kZWMyLnZlbmRvci5iYXNlLSQoVEFSR0VUX0FSQ0gpLnBvbGljeQorICAgIGVuZGlmCitlbHNlCisgICAgTE9DQUxfU1JDX0ZJTEVTIDo9IHNlY2NvbXBfcG9saWN5L2NvZGVjMi52ZW5kb3IuYmFzZS0kKFRBUkdFVF9BUkNIKS5wb2xpY3kKK2VuZGlmCitpbmNsdWRlICQoQlVJTERfUFJFQlVJTFQpCitlbmRpZgorCitpbmNsdWRlICQoY2FsbCBhbGwtbWFrZWZpbGVzLXVuZGVyLCAkKExPQ0FMX1BBVEgpKQorCmRpZmYgLS1naXQgYS9tZWRpYS9jb2RlYzIvaGlkbC9zZXJ2aWNlcy9DMlNvZnR3YXJlQ29kZWNTZXJ2aWNlUmVnaXN0cmFudC5jcHAgYi9tZWRpYS9jb2RlYzIvaGlkbC9zZXJ2aWNlcy9DMlNvZnR3YXJlQ29kZWNTZXJ2aWNlUmVnaXN0cmFudC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTEwYWU2ZQotLS0gL2Rldi9udWxsCisrKyBiL21lZGlhL2NvZGVjMi9oaWRsL3NlcnZpY2VzL0MyU29mdHdhcmVDb2RlY1NlcnZpY2VSZWdpc3RyYW50LmNwcApAQCAtMCwwICsxLDQxIEBACisvKgorICogQ29weXJpZ2h0IDIwMTggVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworCisvLyNkZWZpbmUgTE9HX05ERUJVRyAwCisjZGVmaW5lIExPR19UQUcgIkMyU29mdHdhcmVDb2RlY1NlcnZpY2VSZWdpc3RyYW50IgorCisjaW5jbHVkZSA8QzJQbGF0Zm9ybVN1cHBvcnQuaD4KKyNpbmNsdWRlIDxjb2RlYzIvaGlkbC8xLjAvQ29tcG9uZW50U3RvcmUuaD4KKyNpbmNsdWRlIDxtZWRpYS9Db2RlY1NlcnZpY2VSZWdpc3RyYW50Lmg+CisjaW5jbHVkZSA8bG9nL2xvZy5oPgorCitleHRlcm4gIkMiIHZvaWQgUmVnaXN0ZXJDb2RlY1NlcnZpY2VzKCkgeworICAgIHVzaW5nIG5hbWVzcGFjZSA6OmFuZHJvaWQ6OmhhcmR3YXJlOjptZWRpYTo6YzI6OlYxXzA7CisgICAgYW5kcm9pZDo6c3A8SUNvbXBvbmVudFN0b3JlPiBzdG9yZSA9CisgICAgICAgIG5ldyB1dGlsczo6Q29tcG9uZW50U3RvcmUoCisgICAgICAgICAgICAgICAgYW5kcm9pZDo6R2V0Q29kZWMyUGxhdGZvcm1Db21wb25lbnRTdG9yZSgpKTsKKyAgICBpZiAoc3RvcmUgPT0gbnVsbHB0cikgeworICAgICAgICBBTE9HRSgiQ2Fubm90IGNyZWF0ZSBDb2RlYzIncyBJQ29tcG9uZW50U3RvcmUgc29mdHdhcmUgc2VydmljZS4iKTsKKyAgICB9IGVsc2UgeworICAgICAgICBpZiAoc3RvcmUtPnJlZ2lzdGVyQXNTZXJ2aWNlKCJzb2Z0d2FyZSIpICE9IGFuZHJvaWQ6Ok9LKSB7CisgICAgICAgICAgICBBTE9HRSgiQ2Fubm90IHJlZ2lzdGVyIENvZGVjMidzICIKKyAgICAgICAgICAgICAgICAgICAgIklDb21wb25lbnRTdG9yZSBzb2Z0d2FyZSBzZXJ2aWNlLiIpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgQUxPR0koIkNvZGVjMidzIElDb21wb25lbnRTdG9yZSBzb2Z0d2FyZSBzZXJ2aWNlIGNyZWF0ZWQuIik7CisgICAgICAgIH0KKyAgICB9Cit9CisKZGlmZiAtLWdpdCBhL21lZGlhL2NvZGVjMi9oaWRsL3NlcnZpY2VzL2FuZHJvaWQuaGFyZHdhcmUubWVkaWEuYzJAMS4wLXNlcnZpY2UucmMgYi9tZWRpYS9jb2RlYzIvaGlkbC9zZXJ2aWNlcy9hbmRyb2lkLmhhcmR3YXJlLm1lZGlhLmMyQDEuMC1zZXJ2aWNlLnJjCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg4MDZiZDFmCi0tLSAvZGV2L251bGwKKysrIGIvbWVkaWEvY29kZWMyL2hpZGwvc2VydmljZXMvYW5kcm9pZC5oYXJkd2FyZS5tZWRpYS5jMkAxLjAtc2VydmljZS5yYwpAQCAtMCwwICsxLDcgQEAKK3NlcnZpY2UgYW5kcm9pZC1oYXJkd2FyZS1tZWRpYS1jMi1oYWwtMS0wIC92ZW5kb3IvYmluL2h3L2FuZHJvaWQuaGFyZHdhcmUubWVkaWEuYzJAMS4wLXNlcnZpY2UKKyAgICBjbGFzcyBoYWwKKyAgICB1c2VyIG1lZGlhY29kZWMKKyAgICBncm91cCBjYW1lcmEgbWVkaWFkcm0gZHJtcnBjCisgICAgaW9wcmlvIHJ0IDQKKyAgICB3cml0ZXBpZCAvZGV2L2NwdXNldC9mb3JlZ3JvdW5kL3Rhc2tzCisKZGlmZiAtLWdpdCBhL21lZGlhL2NvZGVjMi9oaWRsL3NlcnZpY2VzL3NlY2NvbXBfcG9saWN5L2NvZGVjMi5zb2Z0d2FyZS5iYXNlLWFybS5wb2xpY3kgYi9tZWRpYS9jb2RlYzIvaGlkbC9zZXJ2aWNlcy9zZWNjb21wX3BvbGljeS9jb2RlYzIuc29mdHdhcmUuYmFzZS1hcm0ucG9saWN5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ1ODcxZDEKLS0tIC9kZXYvbnVsbAorKysgYi9tZWRpYS9jb2RlYzIvaGlkbC9zZXJ2aWNlcy9zZWNjb21wX3BvbGljeS9jb2RlYzIuc29mdHdhcmUuYmFzZS1hcm0ucG9saWN5CkBAIC0wLDAgKzEsNzMgQEAKKyMgQ29weXJpZ2h0IChDKSAyMDE4IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKyMKKyMgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisjIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyMgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisjCisjICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisjCisjIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyMgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisjIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyMgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisKKyMgT3JnYW5pemVkIGJ5IGZyZXF1ZW5jeSBvZiBzeXN0ZW1jYWxsIC0gaW4gZGVzY2VuZGluZyBvcmRlciBmb3IKKyMgYmVzdCBwZXJmb3JtYW5jZS4KK2Z1dGV4OiAxCitpb2N0bDogMQord3JpdGU6IDEKK3ByY3RsOiAxCitjbG9ja19nZXR0aW1lOiAxCitnZXRwcmlvcml0eTogMQorcmVhZDogMQorY2xvc2U6IDEKK3dyaXRldjogMQorZHVwOiAxCitwcG9sbDogMQorbW1hcDI6IDEKK2dldHJhbmRvbTogMQorCisjIG1yZW1hcDogRW5zdXJlIHxmbGFnc3wgYXJlIChNUkVNQVBfTUFZTU9WRSB8IE1SRU1BUF9GSVhFRCkgVE9ETzogT25jZSBtaW5pamFpbAorIyBwYXJzZXIgc3VwcG9ydCBmb3IgJzwnIGlzIGluIHRoaXMgbmVlZHMgdG8gYmUgbW9kaWZpZWQgdG8gYWxzbyBwcmV2ZW50CisjIHxvbGRfYWRkcmVzc3wgYW5kIHxuZXdfYWRkcmVzc3wgZnJvbSB0b3VjaGluZyB0aGUgZXhjZXB0aW9uIHZlY3RvciBwYWdlLCB3aGljaAorIyBvbiBBUk0gaXMgc3RhdGljYWxseSBsb2FkZWQgYXQgMHhmZmZmIDAwMDAuIFNlZQorIyBodHRwOi8vaW5mb2NlbnRlci5hcm0uY29tL2hlbHAvaW5kZXguanNwP3RvcGljPS9jb20uYXJtLmRvYy5kZGkwMjExaC9CYWJmZWVnYS5odG1sCisjIGZvciBtb3JlIGRldGFpbHMuCittcmVtYXA6IGFyZzMgPT0gMworbXVubWFwOiAxCittcHJvdGVjdDogMQorbWFkdmlzZTogMQorb3BlbmF0OiAxCitzaWdhbHRzdGFjazogMQorY2xvbmU6IDEKK3NldHByaW9yaXR5OiAxCitnZXR1aWQzMjogMQorZnN0YXQ2NDogMQorZnN0YXRmczY0OiAxCitwcmVhZDY0OiAxCitmYWNjZXNzYXQ6IDEKK3JlYWRsaW5rYXQ6IDEKK2V4aXQ6IDEKK3J0X3NpZ3Byb2NtYXNrOiAxCitzZXRfdGlkX2FkZHJlc3M6IDEKK3Jlc3RhcnRfc3lzY2FsbDogMQorZXhpdF9ncm91cDogMQorcnRfc2lncmV0dXJuOiAxCitwaXBlMjogMQorZ2V0dGltZW9mZGF5OiAxCitzY2hlZF95aWVsZDogMQorbmFub3NsZWVwOiAxCitsc2VlazogMQorX2xsc2VlazogMQorc2NoZWRfZ2V0X3ByaW9yaXR5X21heDogMQorc2NoZWRfZ2V0X3ByaW9yaXR5X21pbjogMQorc3RhdGZzNjQ6IDEKK3NjaGVkX3NldHNjaGVkdWxlcjogMQorZnN0YXRhdDY0OiAxCit1Z2V0cmxpbWl0OiAxCitnZXRkZW50czY0OiAxCitnZXRyYW5kb206IDEKKworQGluY2x1ZGUgL3N5c3RlbS9ldGMvc2VjY29tcF9wb2xpY3kvY3Jhc2hfZHVtcC5hcm0ucG9saWN5CisKZGlmZiAtLWdpdCBhL21lZGlhL2NvZGVjMi9oaWRsL3NlcnZpY2VzL3NlY2NvbXBfcG9saWN5L2NvZGVjMi5zb2Z0d2FyZS5iYXNlLXg4Ni5wb2xpY3kgYi9tZWRpYS9jb2RlYzIvaGlkbC9zZXJ2aWNlcy9zZWNjb21wX3BvbGljeS9jb2RlYzIuc29mdHdhcmUuYmFzZS14ODYucG9saWN5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIwYzc2MjUKLS0tIC9kZXYvbnVsbAorKysgYi9tZWRpYS9jb2RlYzIvaGlkbC9zZXJ2aWNlcy9zZWNjb21wX3BvbGljeS9jb2RlYzIuc29mdHdhcmUuYmFzZS14ODYucG9saWN5CkBAIC0wLDAgKzEsNTcgQEAKKyMgQ29weXJpZ2h0IChDKSAyMDE4IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKyMKKyMgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisjIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyMgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisjCisjICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisjCisjIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyMgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisjIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyMgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisKK3JlYWQ6IDEKK21wcm90ZWN0OiAxCitwcmN0bDogMQorb3BlbmF0OiAxCitnZXR1aWQzMjogMQord3JpdGV2OiAxCitpb2N0bDogMQorY2xvc2U6IDEKK21tYXAyOiAxCitmc3RhdDY0OiAxCittYWR2aXNlOiAxCitmc3RhdGF0NjQ6IDEKK2Z1dGV4OiAxCittdW5tYXA6IDEKK2ZhY2Nlc3NhdDogMQorX2xsc2VlazogMQorbHNlZWs6IDEKK2Nsb25lOiAxCitzaWdhbHRzdGFjazogMQorc2V0cHJpb3JpdHk6IDEKK3Jlc3RhcnRfc3lzY2FsbDogMQorZXhpdDogMQorZXhpdF9ncm91cDogMQorcnRfc2lncmV0dXJuOiAxCit1Z2V0cmxpbWl0OiAxCityZWFkbGlua2F0OiAxCitfbGxzZWVrOiAxCitmc3RhdGZzNjQ6IDEKK3ByZWFkNjQ6IDEKK21yZW1hcDogMQorZHVwOiAxCitzZXRfdGlkX2FkZHJlc3M6IDEKK3dyaXRlOiAxCituYW5vc2xlZXA6IDEKKworIyBSZXF1aXJlZCBieSBBZGRyZXNzU2FuaXRpemVyCitnZXR0aWQ6IDEKK3NjaGVkX3lpZWxkOiAxCitnZXRwaWQ6IDEKK2dldHRpZDogMQorCitAaW5jbHVkZSAvc3lzdGVtL2V0Yy9zZWNjb21wX3BvbGljeS9jcmFzaF9kdW1wLng4Ni5wb2xpY3kKKwpkaWZmIC0tZ2l0IGEvbWVkaWEvY29kZWMyL2hpZGwvc2VydmljZXMvc2VjY29tcF9wb2xpY3kvY29kZWMyLnZlbmRvci5iYXNlLWFybS5wb2xpY3kgYi9tZWRpYS9jb2RlYzIvaGlkbC9zZXJ2aWNlcy9zZWNjb21wX3BvbGljeS9jb2RlYzIudmVuZG9yLmJhc2UtYXJtLnBvbGljeQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNTg3MWQxCi0tLSAvZGV2L251bGwKKysrIGIvbWVkaWEvY29kZWMyL2hpZGwvc2VydmljZXMvc2VjY29tcF9wb2xpY3kvY29kZWMyLnZlbmRvci5iYXNlLWFybS5wb2xpY3kKQEAgLTAsMCArMSw3MyBAQAorIyBDb3B5cmlnaHQgKEMpIDIwMTggVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorIworIyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyMgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorIyBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyMKKyMgICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyMKKyMgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorIyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorIyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyMgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorIyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKworIyBPcmdhbml6ZWQgYnkgZnJlcXVlbmN5IG9mIHN5c3RlbWNhbGwgLSBpbiBkZXNjZW5kaW5nIG9yZGVyIGZvcgorIyBiZXN0IHBlcmZvcm1hbmNlLgorZnV0ZXg6IDEKK2lvY3RsOiAxCit3cml0ZTogMQorcHJjdGw6IDEKK2Nsb2NrX2dldHRpbWU6IDEKK2dldHByaW9yaXR5OiAxCityZWFkOiAxCitjbG9zZTogMQord3JpdGV2OiAxCitkdXA6IDEKK3Bwb2xsOiAxCittbWFwMjogMQorZ2V0cmFuZG9tOiAxCisKKyMgbXJlbWFwOiBFbnN1cmUgfGZsYWdzfCBhcmUgKE1SRU1BUF9NQVlNT1ZFIHwgTVJFTUFQX0ZJWEVEKSBUT0RPOiBPbmNlIG1pbmlqYWlsCisjIHBhcnNlciBzdXBwb3J0IGZvciAnPCcgaXMgaW4gdGhpcyBuZWVkcyB0byBiZSBtb2RpZmllZCB0byBhbHNvIHByZXZlbnQKKyMgfG9sZF9hZGRyZXNzfCBhbmQgfG5ld19hZGRyZXNzfCBmcm9tIHRvdWNoaW5nIHRoZSBleGNlcHRpb24gdmVjdG9yIHBhZ2UsIHdoaWNoCisjIG9uIEFSTSBpcyBzdGF0aWNhbGx5IGxvYWRlZCBhdCAweGZmZmYgMDAwMC4gU2VlCisjIGh0dHA6Ly9pbmZvY2VudGVyLmFybS5jb20vaGVscC9pbmRleC5qc3A/dG9waWM9L2NvbS5hcm0uZG9jLmRkaTAyMTFoL0JhYmZlZWdhLmh0bWwKKyMgZm9yIG1vcmUgZGV0YWlscy4KK21yZW1hcDogYXJnMyA9PSAzCittdW5tYXA6IDEKK21wcm90ZWN0OiAxCittYWR2aXNlOiAxCitvcGVuYXQ6IDEKK3NpZ2FsdHN0YWNrOiAxCitjbG9uZTogMQorc2V0cHJpb3JpdHk6IDEKK2dldHVpZDMyOiAxCitmc3RhdDY0OiAxCitmc3RhdGZzNjQ6IDEKK3ByZWFkNjQ6IDEKK2ZhY2Nlc3NhdDogMQorcmVhZGxpbmthdDogMQorZXhpdDogMQorcnRfc2lncHJvY21hc2s6IDEKK3NldF90aWRfYWRkcmVzczogMQorcmVzdGFydF9zeXNjYWxsOiAxCitleGl0X2dyb3VwOiAxCitydF9zaWdyZXR1cm46IDEKK3BpcGUyOiAxCitnZXR0aW1lb2ZkYXk6IDEKK3NjaGVkX3lpZWxkOiAxCituYW5vc2xlZXA6IDEKK2xzZWVrOiAxCitfbGxzZWVrOiAxCitzY2hlZF9nZXRfcHJpb3JpdHlfbWF4OiAxCitzY2hlZF9nZXRfcHJpb3JpdHlfbWluOiAxCitzdGF0ZnM2NDogMQorc2NoZWRfc2V0c2NoZWR1bGVyOiAxCitmc3RhdGF0NjQ6IDEKK3VnZXRybGltaXQ6IDEKK2dldGRlbnRzNjQ6IDEKK2dldHJhbmRvbTogMQorCitAaW5jbHVkZSAvc3lzdGVtL2V0Yy9zZWNjb21wX3BvbGljeS9jcmFzaF9kdW1wLmFybS5wb2xpY3kKKwpkaWZmIC0tZ2l0IGEvbWVkaWEvY29kZWMyL2hpZGwvc2VydmljZXMvc2VjY29tcF9wb2xpY3kvY29kZWMyLnZlbmRvci5iYXNlLXg4Ni5wb2xpY3kgYi9tZWRpYS9jb2RlYzIvaGlkbC9zZXJ2aWNlcy9zZWNjb21wX3BvbGljeS9jb2RlYzIudmVuZG9yLmJhc2UteDg2LnBvbGljeQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMGM3NjI1Ci0tLSAvZGV2L251bGwKKysrIGIvbWVkaWEvY29kZWMyL2hpZGwvc2VydmljZXMvc2VjY29tcF9wb2xpY3kvY29kZWMyLnZlbmRvci5iYXNlLXg4Ni5wb2xpY3kKQEAgLTAsMCArMSw1NyBAQAorIyBDb3B5cmlnaHQgKEMpIDIwMTggVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorIworIyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyMgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorIyBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyMKKyMgICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyMKKyMgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorIyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorIyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyMgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorIyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKworcmVhZDogMQorbXByb3RlY3Q6IDEKK3ByY3RsOiAxCitvcGVuYXQ6IDEKK2dldHVpZDMyOiAxCit3cml0ZXY6IDEKK2lvY3RsOiAxCitjbG9zZTogMQorbW1hcDI6IDEKK2ZzdGF0NjQ6IDEKK21hZHZpc2U6IDEKK2ZzdGF0YXQ2NDogMQorZnV0ZXg6IDEKK211bm1hcDogMQorZmFjY2Vzc2F0OiAxCitfbGxzZWVrOiAxCitsc2VlazogMQorY2xvbmU6IDEKK3NpZ2FsdHN0YWNrOiAxCitzZXRwcmlvcml0eTogMQorcmVzdGFydF9zeXNjYWxsOiAxCitleGl0OiAxCitleGl0X2dyb3VwOiAxCitydF9zaWdyZXR1cm46IDEKK3VnZXRybGltaXQ6IDEKK3JlYWRsaW5rYXQ6IDEKK19sbHNlZWs6IDEKK2ZzdGF0ZnM2NDogMQorcHJlYWQ2NDogMQorbXJlbWFwOiAxCitkdXA6IDEKK3NldF90aWRfYWRkcmVzczogMQord3JpdGU6IDEKK25hbm9zbGVlcDogMQorCisjIFJlcXVpcmVkIGJ5IEFkZHJlc3NTYW5pdGl6ZXIKK2dldHRpZDogMQorc2NoZWRfeWllbGQ6IDEKK2dldHBpZDogMQorZ2V0dGlkOiAxCisKK0BpbmNsdWRlIC9zeXN0ZW0vZXRjL3NlY2NvbXBfcG9saWN5L2NyYXNoX2R1bXAueDg2LnBvbGljeQorCmRpZmYgLS1naXQgYS9tZWRpYS9jb2RlYzIvaGlkbC9zZXJ2aWNlcy92ZW5kb3IuY3BwIGIvbWVkaWEvY29kZWMyL2hpZGwvc2VydmljZXMvdmVuZG9yLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lZjJmOThlCi0tLSAvZGV2L251bGwKKysrIGIvbWVkaWEvY29kZWMyL2hpZGwvc2VydmljZXMvdmVuZG9yLmNwcApAQCAtMCwwICsxLDE1MCBAQAorLyoKKyAqIENvcHlyaWdodCAyMDE4IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KKworLy8jZGVmaW5lIExPR19OREVCVUcgMAorI2RlZmluZSBMT0dfVEFHICJhbmRyb2lkLmhhcmR3YXJlLm1lZGlhLmMyQDEuMC1zZXJ2aWNlIgorCisjaW5jbHVkZSA8Y29kZWMyL2hpZGwvMS4wL0NvbXBvbmVudFN0b3JlLmg+CisjaW5jbHVkZSA8aGlkbC9IaWRsVHJhbnNwb3J0U3VwcG9ydC5oPgorI2luY2x1ZGUgPGJpbmRlci9Qcm9jZXNzU3RhdGUuaD4KKyNpbmNsdWRlIDxtaW5pamFpbC5oPgorCisjaW5jbHVkZSA8QzJDb21wb25lbnQuaD4KKworLy8gT214U3RvcmUgaXMgYWRkZWQgZm9yIHZpc2liaWxpdHkgYnkgZHVtcHN0YXRlLgorI2luY2x1ZGUgPG1lZGlhL3N0YWdlZnJpZ2h0L29teC8xLjAvT214U3RvcmUuaD4KKworLy8gVGhpcyBpcyBjcmVhdGVkIGJ5IG1vZHVsZSAiY29kZWMyLnZlbmRvci5iYXNlLnBvbGljeSIuIFRoaXMgY2FuIGJlIG1vZGlmaWVkLgorc3RhdGljIGNvbnN0ZXhwciBjaGFyIGtCYXNlU2VjY29tcFBvbGljeVBhdGhbXSA9CisgICAgICAgICIvdmVuZG9yL2V0Yy9zZWNjb21wX3BvbGljeS9jb2RlYzIudmVuZG9yLmJhc2UucG9saWN5IjsKKworLy8gQWRkaXRpb25hbCBkZXZpY2Utc3BlY2lmaWMgc2VjY29tcCBwZXJtaXNzaW9ucyBjYW4gYmUgYWRkZWQgaW4gdGhpcyBmaWxlLgorc3RhdGljIGNvbnN0ZXhwciBjaGFyIGtFeHRTZWNjb21wUG9saWN5UGF0aFtdID0KKyAgICAgICAgIi92ZW5kb3IvZXRjL3NlY2NvbXBfcG9saWN5L2NvZGVjMi52ZW5kb3IuZXh0LnBvbGljeSI7CisKK2NsYXNzIER1bW15QzJTdG9yZSA6IHB1YmxpYyBDMkNvbXBvbmVudFN0b3JlIHsKK3B1YmxpYzoKKyAgICBEdW1teUMyU3RvcmUoKSA9IGRlZmF1bHQ7CisKKyAgICB2aXJ0dWFsIH5EdW1teUMyU3RvcmUoKSBvdmVycmlkZSA9IGRlZmF1bHQ7CisKKyAgICB2aXJ0dWFsIEMyU3RyaW5nIGdldE5hbWUoKSBjb25zdCBvdmVycmlkZSB7CisgICAgICAgIHJldHVybiAiZGVmYXVsdCI7CisgICAgfQorCisgICAgdmlydHVhbCBjMl9zdGF0dXNfdCBjcmVhdGVDb21wb25lbnQoCisgICAgICAgICAgICBDMlN0cmluZyAvKm5hbWUqLywKKyAgICAgICAgICAgIHN0ZDo6c2hhcmVkX3B0cjxDMkNvbXBvbmVudD4qIGNvbnN0IC8qY29tcG9uZW50Ki8pIG92ZXJyaWRlIHsKKyAgICAgICAgcmV0dXJuIEMyX05PVF9GT1VORDsKKyAgICB9CisKKyAgICB2aXJ0dWFsIGMyX3N0YXR1c190IGNyZWF0ZUludGVyZmFjZSgKKyAgICAgICAgICAgIEMyU3RyaW5nIC8qIG5hbWUgKi8sCisgICAgICAgICAgICBzdGQ6OnNoYXJlZF9wdHI8QzJDb21wb25lbnRJbnRlcmZhY2U+KiBjb25zdCAvKiBpbnRlcmZhY2UgKi8pIG92ZXJyaWRlIHsKKyAgICAgICAgcmV0dXJuIEMyX05PVF9GT1VORDsKKyAgICB9CisKKyAgICB2aXJ0dWFsIHN0ZDo6dmVjdG9yPHN0ZDo6c2hhcmVkX3B0cjxjb25zdCBDMkNvbXBvbmVudDo6VHJhaXRzPj4KKyAgICAgICAgICAgIGxpc3RDb21wb25lbnRzKCkgb3ZlcnJpZGUgeworICAgICAgICByZXR1cm4ge307CisgICAgfQorCisgICAgdmlydHVhbCBjMl9zdGF0dXNfdCBjb3B5QnVmZmVyKAorICAgICAgICAgICAgc3RkOjpzaGFyZWRfcHRyPEMyR3JhcGhpY0J1ZmZlcj4gLyogc3JjICovLAorICAgICAgICAgICAgc3RkOjpzaGFyZWRfcHRyPEMyR3JhcGhpY0J1ZmZlcj4gLyogZHN0ICovKSBvdmVycmlkZSB7CisgICAgICAgIHJldHVybiBDMl9PTUlUVEVEOworICAgIH0KKworICAgIHZpcnR1YWwgYzJfc3RhdHVzX3QgcXVlcnlfc20oCisgICAgICAgIGNvbnN0IHN0ZDo6dmVjdG9yPEMyUGFyYW0qPiYgLyogc3RhY2tQYXJhbXMgKi8sCisgICAgICAgIGNvbnN0IHN0ZDo6dmVjdG9yPEMyUGFyYW06OkluZGV4PiYgLyogaGVhcFBhcmFtSW5kaWNlcyAqLywKKyAgICAgICAgc3RkOjp2ZWN0b3I8c3RkOjp1bmlxdWVfcHRyPEMyUGFyYW0+PiogY29uc3QgLyogaGVhcFBhcmFtcyAqLykgY29uc3Qgb3ZlcnJpZGUgeworICAgICAgICByZXR1cm4gQzJfT01JVFRFRDsKKyAgICB9CisKKyAgICB2aXJ0dWFsIGMyX3N0YXR1c190IGNvbmZpZ19zbSgKKyAgICAgICAgICAgIGNvbnN0IHN0ZDo6dmVjdG9yPEMyUGFyYW0qPiYgLyogcGFyYW1zICovLAorICAgICAgICAgICAgc3RkOjp2ZWN0b3I8c3RkOjp1bmlxdWVfcHRyPEMyU2V0dGluZ1Jlc3VsdD4+KiBjb25zdCAvKiBmYWlsdXJlcyAqLykgb3ZlcnJpZGUgeworICAgICAgICByZXR1cm4gQzJfT01JVFRFRDsKKyAgICB9CisKKyAgICB2aXJ0dWFsIHN0ZDo6c2hhcmVkX3B0cjxDMlBhcmFtUmVmbGVjdG9yPiBnZXRQYXJhbVJlZmxlY3RvcigpIGNvbnN0IG92ZXJyaWRlIHsKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgfQorCisgICAgdmlydHVhbCBjMl9zdGF0dXNfdCBxdWVyeVN1cHBvcnRlZFBhcmFtc19uYigKKyAgICAgICAgICAgIHN0ZDo6dmVjdG9yPHN0ZDo6c2hhcmVkX3B0cjxDMlBhcmFtRGVzY3JpcHRvcj4+KiBjb25zdCAvKiBwYXJhbXMgKi8pIGNvbnN0IG92ZXJyaWRlIHsKKyAgICAgICAgcmV0dXJuIEMyX09NSVRURUQ7CisgICAgfQorCisgICAgdmlydHVhbCBjMl9zdGF0dXNfdCBxdWVyeVN1cHBvcnRlZFZhbHVlc19zbSgKKyAgICAgICAgICAgIHN0ZDo6dmVjdG9yPEMyRmllbGRTdXBwb3J0ZWRWYWx1ZXNRdWVyeT4mIC8qIGZpZWxkcyAqLykgY29uc3Qgb3ZlcnJpZGUgeworICAgICAgICByZXR1cm4gQzJfT01JVFRFRDsKKyAgICB9Cit9OworCitpbnQgbWFpbihpbnQgLyogYXJnYyAqLywgY2hhcioqIC8qIGFyZ3YgKi8pIHsKKyAgICBBTE9HRCgiYW5kcm9pZC5oYXJkd2FyZS5tZWRpYS5jMkAxLjAtc2VydmljZSBzdGFydGluZy4uLiIpOworCisgICAgc2lnbmFsKFNJR1BJUEUsIFNJR19JR04pOworICAgIGFuZHJvaWQ6OlNldFVwTWluaWphaWwoa0Jhc2VTZWNjb21wUG9saWN5UGF0aCwga0V4dFNlY2NvbXBQb2xpY3lQYXRoKTsKKworICAgIC8vIHZuZGJpbmRlciBpcyBuZWVkZWQgYnkgQnVmZmVyUXVldWUuCisgICAgYW5kcm9pZDo6UHJvY2Vzc1N0YXRlOjppbml0V2l0aERyaXZlcigiL2Rldi92bmRiaW5kZXIiKTsKKyAgICBhbmRyb2lkOjpQcm9jZXNzU3RhdGU6OnNlbGYoKS0+c3RhcnRUaHJlYWRQb29sKCk7CisKKyAgICAvLyBFeHRyYSB0aHJlYWRzIG1heSBiZSBuZWVkZWQgdG8gaGFuZGxlIGEgc3RhY2tlZCBJUEMgc2VxdWVuY2UgdGhhdAorICAgIC8vIGNvbnRhaW5zIGFsdGVybmF0aW5nIGJpbmRlciBhbmQgaHdiaW5kZXIgY2FsbHMuIChTZWUgYi8zNTI4MzQ4MC4pCisgICAgYW5kcm9pZDo6aGFyZHdhcmU6OmNvbmZpZ3VyZVJwY1RocmVhZHBvb2woOCwgdHJ1ZSAvKiBjYWxsZXJXaWxsSm9pbiAqLyk7CisKKyAgICAvLyBDcmVhdGUgSUNvbXBvbmVudFN0b3JlIHNlcnZpY2UuCisgICAgeworICAgICAgICB1c2luZyBuYW1lc3BhY2UgOjphbmRyb2lkOjpoYXJkd2FyZTo6bWVkaWE6OmMyOjpWMV8wOworICAgICAgICBhbmRyb2lkOjpzcDxJQ29tcG9uZW50U3RvcmU+IHN0b3JlOworCisgICAgICAgIC8vIFZlbmRvcidzIFRPRE86IFJlcGxhY2UgdGhpcyB3aXRoCisgICAgICAgIC8vIHN0b3JlID0gbmV3IHV0aWxzOjpDb21wb25lbnRTdG9yZSgKKyAgICAgICAgLy8gICAgICAgICAvKiBpbXBsZW1lbnRhdGlvbiBvZiBDMkNvbXBvbmVudFN0b3JlICovKTsKKyAgICAgICAgQUxPR0QoIkluc3RhbnRpYXRpbmcgQ29kZWMyJ3MgZHVtbXkgSUNvbXBvbmVudFN0b3JlIHNlcnZpY2UuLi4iKTsKKyAgICAgICAgc3RvcmUgPSBuZXcgdXRpbHM6OkNvbXBvbmVudFN0b3JlKAorICAgICAgICAgICAgICAgIHN0ZDo6bWFrZV9zaGFyZWQ8RHVtbXlDMlN0b3JlPigpKTsKKworICAgICAgICBpZiAoc3RvcmUgPT0gbnVsbHB0cikgeworICAgICAgICAgICAgQUxPR0UoIkNhbm5vdCBjcmVhdGUgQ29kZWMyJ3MgSUNvbXBvbmVudFN0b3JlIHNlcnZpY2UuIik7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBpZiAoc3RvcmUtPnJlZ2lzdGVyQXNTZXJ2aWNlKCJkZWZhdWx0IikgIT0gYW5kcm9pZDo6T0spIHsKKyAgICAgICAgICAgICAgICBBTE9HRSgiQ2Fubm90IHJlZ2lzdGVyIENvZGVjMidzICIKKyAgICAgICAgICAgICAgICAgICAgICAgICJJQ29tcG9uZW50U3RvcmUgc2VydmljZS4iKTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgQUxPR0koIkNvZGVjMidzIElDb21wb25lbnRTdG9yZSBzZXJ2aWNlIGNyZWF0ZWQuIik7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvLyBSZWdpc3RlciBJT214U3RvcmUgc2VydmljZS4KKyAgICB7CisgICAgICAgIHVzaW5nIG5hbWVzcGFjZSA6OmFuZHJvaWQ6OmhhcmR3YXJlOjptZWRpYTo6b214OjpWMV8wOworICAgICAgICBhbmRyb2lkOjpzcDxJT214U3RvcmU+IG9teFN0b3JlID0gbmV3IGltcGxlbWVudGF0aW9uOjpPbXhTdG9yZSgpOworICAgICAgICBpZiAob214U3RvcmUgPT0gbnVsbHB0cikgeworICAgICAgICAgICAgQUxPR0UoIkNhbm5vdCBjcmVhdGUgSU9teFN0b3JlIEhBTCBzZXJ2aWNlLiIpOworICAgICAgICB9IGVsc2UgaWYgKG9teFN0b3JlLT5yZWdpc3RlckFzU2VydmljZSgpICE9IGFuZHJvaWQ6Ok9LKSB7CisgICAgICAgICAgICBBTE9HRSgiQ2Fubm90IHJlZ2lzdGVyIElPbXhTdG9yZSBIQUwgc2VydmljZS4iKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIGFuZHJvaWQ6OmhhcmR3YXJlOjpqb2luUnBjVGhyZWFkcG9vbCgpOworICAgIHJldHVybiAwOworfQpkaWZmIC0tZ2l0IGEvbWVkaWEvY29kZWMyL3NmcGx1Z2luL0FuZHJvaWQuYnAgYi9tZWRpYS9jb2RlYzIvc2ZwbHVnaW4vQW5kcm9pZC5icApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNTU3ODcyNgotLS0gL2Rldi9udWxsCisrKyBiL21lZGlhL2NvZGVjMi9zZnBsdWdpbi9BbmRyb2lkLmJwCkBAIC0wLDAgKzEsNjEgQEAKK2NjX2xpYnJhcnlfc2hhcmVkIHsKKyAgICBuYW1lOiAibGlic2ZwbHVnaW5fY2NvZGVjIiwKKworICAgIHNyY3M6IFsKKyAgICAgICAgIkMyT01YTm9kZS5jcHAiLAorICAgICAgICAiQ0NvZGVjLmNwcCIsCisgICAgICAgICJDQ29kZWNCdWZmZXJDaGFubmVsLmNwcCIsCisgICAgICAgICJDQ29kZWNDb25maWcuY3BwIiwKKyAgICAgICAgIkNvZGVjMkJ1ZmZlci5jcHAiLAorICAgICAgICAiQ29kZWMySW5mb0J1aWxkZXIuY3BwIiwKKyAgICAgICAgIlJlZmxlY3RlZFBhcmFtVXBkYXRlci5jcHAiLAorICAgICAgICAiU2tpcEN1dEJ1ZmZlci5jcHAiLAorICAgIF0sCisKKyAgICBjZmxhZ3M6IFsKKyAgICAgICAgIi1XZXJyb3IiLAorICAgICAgICAiLVdhbGwiLAorICAgIF0sCisKKyAgICBoZWFkZXJfbGliczogWworICAgICAgICAibGliY29kZWMyX2ludGVybmFsIiwKKyAgICBdLAorCisgICAgc2hhcmVkX2xpYnM6IFsKKyAgICAgICAgImFuZHJvaWQuaGFyZHdhcmUuY2FzLm5hdGl2ZUAxLjAiLAorICAgICAgICAiYW5kcm9pZC5oYXJkd2FyZS5ncmFwaGljcy5idWZmZXJxdWV1ZUAxLjAiLAorICAgICAgICAiYW5kcm9pZC5oYXJkd2FyZS5tZWRpYS5jMkAxLjAiLAorICAgICAgICAiYW5kcm9pZC5oYXJkd2FyZS5tZWRpYS5vbXhAMS4wIiwKKyAgICAgICAgImxpYmJhc2UiLAorICAgICAgICAibGliYmluZGVyIiwKKyAgICAgICAgImxpYmNvZGVjMiIsCisgICAgICAgICJsaWJjb2RlYzJfY2xpZW50IiwKKyAgICAgICAgImxpYmNvZGVjMl92bmRrIiwKKyAgICAgICAgImxpYmN1dGlscyIsCisgICAgICAgICJsaWJndWkiLAorICAgICAgICAibGliaGlkbGFsbG9jYXRvcnV0aWxzIiwKKyAgICAgICAgImxpYmhpZGxiYXNlIiwKKyAgICAgICAgImxpYmxvZyIsCisgICAgICAgICJsaWJtZWRpYSIsCisgICAgICAgICJsaWJtZWRpYV9vbXgiLAorICAgICAgICAibGlic2ZwbHVnaW5fY2NvZGVjX3V0aWxzIiwKKyAgICAgICAgImxpYnN0YWdlZnJpZ2h0X2J1ZmZlcnF1ZXVlX2hlbHBlciIsCisgICAgICAgICJsaWJzdGFnZWZyaWdodF9jb2RlY2Jhc2UiLAorICAgICAgICAibGlic3RhZ2VmcmlnaHRfZm91bmRhdGlvbiIsCisgICAgICAgICJsaWJzdGFnZWZyaWdodF9vbXhfdXRpbHMiLAorICAgICAgICAibGlic3RhZ2VmcmlnaHRfeG1scGFyc2VyIiwKKyAgICAgICAgImxpYnVpIiwKKyAgICAgICAgImxpYnV0aWxzIiwKKyAgICBdLAorCisgICAgc2FuaXRpemU6IHsKKyAgICAgICAgY2ZpOiB0cnVlLAorICAgICAgICBtaXNjX3VuZGVmaW5lZDogWworICAgICAgICAgICAgInVuc2lnbmVkLWludGVnZXItb3ZlcmZsb3ciLAorICAgICAgICAgICAgInNpZ25lZC1pbnRlZ2VyLW92ZXJmbG93IiwKKyAgICAgICAgXSwKKyAgICAgICAgZGlhZzogeworICAgICAgICAgICAgY2ZpOiB0cnVlLAorICAgICAgICB9LAorICAgIH0sCit9CmRpZmYgLS1naXQgYS9tZWRpYS9jb2RlYzIvc2ZwbHVnaW4vQzJPTVhOb2RlLmNwcCBiL21lZGlhL2NvZGVjMi9zZnBsdWdpbi9DMk9NWE5vZGUuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc0OWZkN2EKLS0tIC9kZXYvbnVsbAorKysgYi9tZWRpYS9jb2RlYzIvc2ZwbHVnaW4vQzJPTVhOb2RlLmNwcApAQCAtMCwwICsxLDMyOSBAQAorLyoKKyAqIENvcHlyaWdodCAyMDE4LCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCisKKyNpZmRlZiBfX0xQNjRfXworI2RlZmluZSBPTVhfQU5EUk9JRF9DT01QSUxFX0FTXzMyQklUX09OXzY0QklUX1BMQVRGT1JNUworI2VuZGlmCisKKy8vI2RlZmluZSBMT0dfTkRFQlVHIDAKKyNkZWZpbmUgTE9HX1RBRyAiQzJPTVhOb2RlIgorI2luY2x1ZGUgPGxvZy9sb2cuaD4KKworI2luY2x1ZGUgPEMyQWxsb2NhdG9yR3JhbGxvYy5oPgorI2luY2x1ZGUgPEMyQmxvY2tJbnRlcm5hbC5oPgorI2luY2x1ZGUgPEMyQ29tcG9uZW50Lmg+CisjaW5jbHVkZSA8QzJQbGF0Zm9ybVN1cHBvcnQuaD4KKworI2luY2x1ZGUgPE9NWF9Db21wb25lbnQuaD4KKyNpbmNsdWRlIDxPTVhfSW5kZXguaD4KKyNpbmNsdWRlIDxPTVhfSW5kZXhFeHQuaD4KKworI2luY2x1ZGUgPG1lZGlhL3N0YWdlZnJpZ2h0L29teC9PTVhVdGlscy5oPgorI2luY2x1ZGUgPG1lZGlhL3N0YWdlZnJpZ2h0L01lZGlhRXJyb3JzLmg+CisjaW5jbHVkZSA8dWkvRmVuY2UuaD4KKyNpbmNsdWRlIDx1aS9HcmFwaGljQnVmZmVyLmg+CisKKyNpbmNsdWRlICJDMk9NWE5vZGUuaCIKKworbmFtZXNwYWNlIGFuZHJvaWQgeworCituYW1lc3BhY2UgeworCitjbGFzcyBCdWZmZXIyRCA6IHB1YmxpYyBDMkJ1ZmZlciB7CitwdWJsaWM6CisgICAgZXhwbGljaXQgQnVmZmVyMkQoQzJDb25zdEdyYXBoaWNCbG9jayBibG9jaykgOiBDMkJ1ZmZlcih7IGJsb2NrIH0pIHt9Cit9OworCit9ICAvLyBuYW1lc3BhY2UKKworQzJPTVhOb2RlOjpDMk9NWE5vZGUoY29uc3Qgc3RkOjpzaGFyZWRfcHRyPENvZGVjMkNsaWVudDo6Q29tcG9uZW50PiAmY29tcCkKKyAgICA6IG1Db21wKGNvbXApLCBtRnJhbWVJbmRleCgwKSwgbVdpZHRoKDApLCBtSGVpZ2h0KDApLAorICAgICAgbUFkanVzdFRpbWVzdGFtcEdhcFVzKDApLCBtRmlyc3RJbnB1dEZyYW1lKHRydWUpIHsKKyAgICAvLyBUT0RPOiByZWFkIGZyb20gaW50ZigpCisgICAgaWYgKCFzdHJuY21wKGNvbXAtPmdldE5hbWUoKS5jX3N0cigpLCAiYzIuYW5kcm9pZC4iLCAxMSkpIHsKKyAgICAgICAgbVVzYWdlID0gR1JBTExPQ19VU0FHRV9TV19SRUFEX09GVEVOOworICAgIH0gZWxzZSB7CisgICAgICAgIG1Vc2FnZSA9IEdSQUxMT0NfVVNBR0VfSFdfVklERU9fRU5DT0RFUjsKKyAgICB9Cit9CisKK3N0YXR1c190IEMyT01YTm9kZTo6ZnJlZU5vZGUoKSB7CisgICAgbUNvbXAucmVzZXQoKTsKKyAgICByZXR1cm4gT0s7Cit9CisKK3N0YXR1c190IEMyT01YTm9kZTo6c2VuZENvbW1hbmQoT01YX0NPTU1BTkRUWVBFIGNtZCwgT01YX1MzMiBwYXJhbSkgeworICAgIGlmIChjbWQgPT0gT01YX0NvbW1hbmRTdGF0ZVNldCAmJiBwYXJhbSA9PSBPTVhfU3RhdGVMb2FkZWQpIHsKKyAgICAgICAgLy8gUmVzZXQgZmlyc3QgaW5wdXQgZnJhbWUgc28gaWYgQzJPTVhOb2RlIGlzIHJlY3ljbGVkLCB0aGUgdGltZXN0YW1wIGRvZXMgbm90IGJlY29tZQorICAgICAgICAvLyBuZWdhdGl2ZS4gVGhpcyBpcyBhIHdvcmthcm91bmQgZm9yIEhXIGNvZGVjcyB0aGF0IGRvIG5vdCBoYW5kbGUgdGltZXN0YW1wIHJvbGxvdmVyLgorICAgICAgICBtRmlyc3RJbnB1dEZyYW1lID0gdHJ1ZTsKKyAgICB9CisgICAgcmV0dXJuIEVSUk9SX1VOU1VQUE9SVEVEOworfQorCitzdGF0dXNfdCBDMk9NWE5vZGU6OmdldFBhcmFtZXRlcihPTVhfSU5ERVhUWVBFIGluZGV4LCB2b2lkICpwYXJhbXMsIHNpemVfdCBzaXplKSB7CisgICAgc3RhdHVzX3QgZXJyID0gRVJST1JfVU5TVVBQT1JURUQ7CisgICAgc3dpdGNoICgodWludDMyX3QpaW5kZXgpIHsKKyAgICAgICAgY2FzZSBPTVhfSW5kZXhQYXJhbUNvbnN1bWVyVXNhZ2VCaXRzOiB7CisgICAgICAgICAgICBPTVhfVTMyICp1c2FnZSA9IChPTVhfVTMyICopcGFyYW1zOworICAgICAgICAgICAgKnVzYWdlID0gbVVzYWdlOworICAgICAgICAgICAgZXJyID0gT0s7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBjYXNlIE9NWF9JbmRleFBhcmFtUG9ydERlZmluaXRpb246IHsKKyAgICAgICAgICAgIGlmIChzaXplIDwgc2l6ZW9mKE9NWF9QQVJBTV9QT1JUREVGSU5JVElPTlRZUEUpKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIEJBRF9WQUxVRTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIE9NWF9QQVJBTV9QT1JUREVGSU5JVElPTlRZUEUgKnBEZWYgPSAoT01YX1BBUkFNX1BPUlRERUZJTklUSU9OVFlQRSAqKXBhcmFtczsKKyAgICAgICAgICAgIC8vIFRPRE86IHJlYWQgdGhlc2UgZnJvbSBpbnRmKCkKKyAgICAgICAgICAgIHBEZWYtPm5CdWZmZXJDb3VudEFjdHVhbCA9IDE2OworICAgICAgICAgICAgcERlZi0+ZURvbWFpbiA9IE9NWF9Qb3J0RG9tYWluVmlkZW87CisgICAgICAgICAgICBwRGVmLT5mb3JtYXQudmlkZW8ubkZyYW1lV2lkdGggPSBtV2lkdGg7CisgICAgICAgICAgICBwRGVmLT5mb3JtYXQudmlkZW8ubkZyYW1lSGVpZ2h0ID0gbUhlaWdodDsKKyAgICAgICAgICAgIGVyciA9IE9LOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIGJyZWFrOworICAgIH0KKyAgICByZXR1cm4gZXJyOworfQorCitzdGF0dXNfdCBDMk9NWE5vZGU6OnNldFBhcmFtZXRlcihPTVhfSU5ERVhUWVBFIGluZGV4LCBjb25zdCB2b2lkICpwYXJhbXMsIHNpemVfdCBzaXplKSB7CisgICAgLy8gaGFuZGxlIG1heC9maXhlZCBmcmFtZSBkdXJhdGlvbiBjb250cm9sCisgICAgaWYgKGluZGV4ID09IChPTVhfSU5ERVhUWVBFKU9NWF9JbmRleFBhcmFtTWF4RnJhbWVEdXJhdGlvbkZvckJpdHJhdGVDb250cm9sCisgICAgICAgICAgICAmJiBwYXJhbXMgIT0gTlVMTAorICAgICAgICAgICAgJiYgc2l6ZSA9PSBzaXplb2YoT01YX1BBUkFNX1UzMlRZUEUpKSB7CisgICAgICAgIC8vIFRoZSBpbmNvbWluZyBudW1iZXIgaXMgYW4gaW50MzJfdCBjb250YWluZWQgaW4gT01YX1UzMi4KKyAgICAgICAgbUFkanVzdFRpbWVzdGFtcEdhcFVzID0gKGludDMyX3QpKChPTVhfUEFSQU1fVTMyVFlQRSopcGFyYW1zKS0+blUzMjsKKyAgICAgICAgcmV0dXJuIE9LOworICAgIH0KKyAgICByZXR1cm4gRVJST1JfVU5TVVBQT1JURUQ7Cit9CisKK3N0YXR1c190IEMyT01YTm9kZTo6Z2V0Q29uZmlnKE9NWF9JTkRFWFRZUEUgaW5kZXgsIHZvaWQgKmNvbmZpZywgc2l6ZV90IHNpemUpIHsKKyAgICAodm9pZClpbmRleDsKKyAgICAodm9pZCljb25maWc7CisgICAgKHZvaWQpc2l6ZTsKKyAgICByZXR1cm4gRVJST1JfVU5TVVBQT1JURUQ7Cit9CisKK3N0YXR1c190IEMyT01YTm9kZTo6c2V0Q29uZmlnKE9NWF9JTkRFWFRZUEUgaW5kZXgsIGNvbnN0IHZvaWQgKmNvbmZpZywgc2l6ZV90IHNpemUpIHsKKyAgICAodm9pZClpbmRleDsKKyAgICAodm9pZCljb25maWc7CisgICAgKHZvaWQpc2l6ZTsKKyAgICByZXR1cm4gRVJST1JfVU5TVVBQT1JURUQ7Cit9CisKK3N0YXR1c190IEMyT01YTm9kZTo6c2V0UG9ydE1vZGUoT01YX1UzMiBwb3J0SW5kZXgsIElPTVg6OlBvcnRNb2RlIG1vZGUpIHsKKyAgICAodm9pZClwb3J0SW5kZXg7CisgICAgKHZvaWQpbW9kZTsKKyAgICByZXR1cm4gRVJST1JfVU5TVVBQT1JURUQ7Cit9CisKK3N0YXR1c190IEMyT01YTm9kZTo6cHJlcGFyZUZvckFkYXB0aXZlUGxheWJhY2soCisgICAgICAgIE9NWF9VMzIgcG9ydEluZGV4LCBPTVhfQk9PTCBlbmFibGUsCisgICAgICAgIE9NWF9VMzIgbWF4RnJhbWVXaWR0aCwgT01YX1UzMiBtYXhGcmFtZUhlaWdodCkgeworICAgICh2b2lkKXBvcnRJbmRleDsKKyAgICAodm9pZCllbmFibGU7CisgICAgKHZvaWQpbWF4RnJhbWVXaWR0aDsKKyAgICAodm9pZCltYXhGcmFtZUhlaWdodDsKKyAgICByZXR1cm4gRVJST1JfVU5TVVBQT1JURUQ7Cit9CisKK3N0YXR1c190IEMyT01YTm9kZTo6Y29uZmlndXJlVmlkZW9UdW5uZWxNb2RlKAorICAgICAgICBPTVhfVTMyIHBvcnRJbmRleCwgT01YX0JPT0wgdHVubmVsZWQsCisgICAgICAgIE9NWF9VMzIgYXVkaW9Id1N5bmMsIG5hdGl2ZV9oYW5kbGVfdCAqKnNpZGViYW5kSGFuZGxlKSB7CisgICAgKHZvaWQpcG9ydEluZGV4OworICAgICh2b2lkKXR1bm5lbGVkOworICAgICh2b2lkKWF1ZGlvSHdTeW5jOworICAgICpzaWRlYmFuZEhhbmRsZSA9IG51bGxwdHI7CisgICAgcmV0dXJuIEVSUk9SX1VOU1VQUE9SVEVEOworfQorCitzdGF0dXNfdCBDMk9NWE5vZGU6OmdldEdyYXBoaWNCdWZmZXJVc2FnZShPTVhfVTMyIHBvcnRJbmRleCwgT01YX1UzMiogdXNhZ2UpIHsKKyAgICAodm9pZClwb3J0SW5kZXg7CisgICAgKnVzYWdlID0gMDsKKyAgICByZXR1cm4gRVJST1JfVU5TVVBQT1JURUQ7Cit9CisKK3N0YXR1c190IEMyT01YTm9kZTo6c2V0SW5wdXRTdXJmYWNlKGNvbnN0IHNwPElPTVhCdWZmZXJTb3VyY2U+ICZidWZmZXJTb3VyY2UpIHsKKyAgICBjMl9zdGF0dXNfdCBlcnIgPSBHZXRDb2RlYzJQbGF0Zm9ybUFsbG9jYXRvclN0b3JlKCktPmZldGNoQWxsb2NhdG9yKAorICAgICAgICAgICAgQzJQbGF0Zm9ybUFsbG9jYXRvclN0b3JlOjpHUkFMTE9DLAorICAgICAgICAgICAgJm1BbGxvY2F0b3IpOworICAgIGlmIChlcnIgIT0gT0spIHsKKyAgICAgICAgcmV0dXJuIFVOS05PV05fRVJST1I7CisgICAgfQorICAgIG1CdWZmZXJTb3VyY2UgPSBidWZmZXJTb3VyY2U7CisgICAgcmV0dXJuIE9LOworfQorCitzdGF0dXNfdCBDMk9NWE5vZGU6OmFsbG9jYXRlU2VjdXJlQnVmZmVyKAorICAgICAgICBPTVhfVTMyIHBvcnRJbmRleCwgc2l6ZV90IHNpemUsIGJ1ZmZlcl9pZCAqYnVmZmVyLAorICAgICAgICB2b2lkICoqYnVmZmVyRGF0YSwgc3A8TmF0aXZlSGFuZGxlPiAqbmF0aXZlSGFuZGxlKSB7CisgICAgKHZvaWQpcG9ydEluZGV4OworICAgICh2b2lkKXNpemU7CisgICAgKHZvaWQpbmF0aXZlSGFuZGxlOworICAgICpidWZmZXIgPSAwOworICAgICpidWZmZXJEYXRhID0gbnVsbHB0cjsKKyAgICByZXR1cm4gRVJST1JfVU5TVVBQT1JURUQ7Cit9CisKK3N0YXR1c190IEMyT01YTm9kZTo6dXNlQnVmZmVyKAorICAgICAgICBPTVhfVTMyIHBvcnRJbmRleCwgY29uc3QgT01YQnVmZmVyICZvbXhCdWYsIGJ1ZmZlcl9pZCAqYnVmZmVyKSB7CisgICAgKHZvaWQpcG9ydEluZGV4OworICAgICh2b2lkKW9teEJ1ZjsKKyAgICAqYnVmZmVyID0gMDsKKyAgICByZXR1cm4gRVJST1JfVU5TVVBQT1JURUQ7Cit9CisKK3N0YXR1c190IEMyT01YTm9kZTo6ZnJlZUJ1ZmZlcihPTVhfVTMyIHBvcnRJbmRleCwgYnVmZmVyX2lkIGJ1ZmZlcikgeworICAgICh2b2lkKXBvcnRJbmRleDsKKyAgICAodm9pZClidWZmZXI7CisgICAgcmV0dXJuIEVSUk9SX1VOU1VQUE9SVEVEOworfQorCitzdGF0dXNfdCBDMk9NWE5vZGU6OmZpbGxCdWZmZXIoCisgICAgICAgIGJ1ZmZlcl9pZCBidWZmZXIsIGNvbnN0IE9NWEJ1ZmZlciAmb214QnVmLCBpbnQgZmVuY2VGZCkgeworICAgICh2b2lkKWJ1ZmZlcjsKKyAgICAodm9pZClvbXhCdWY7CisgICAgKHZvaWQpZmVuY2VGZDsKKyAgICByZXR1cm4gRVJST1JfVU5TVVBQT1JURUQ7Cit9CisKK3N0YXR1c190IEMyT01YTm9kZTo6ZW1wdHlCdWZmZXIoCisgICAgICAgIGJ1ZmZlcl9pZCBidWZmZXIsIGNvbnN0IE9NWEJ1ZmZlciAmb214QnVmLAorICAgICAgICBPTVhfVTMyIGZsYWdzLCBPTVhfVElDS1MgdGltZXN0YW1wLCBpbnQgZmVuY2VGZCkgeworICAgIC8vIFRPRE86IGJldHRlciBmZW5jZSBoYW5kbGluZworICAgIGlmIChmZW5jZUZkID49IDApIHsKKyAgICAgICAgc3A8RmVuY2U+IGZlbmNlID0gbmV3IEZlbmNlKGZlbmNlRmQpOworICAgICAgICBmZW5jZS0+d2FpdEZvcmV2ZXIoTE9HX1RBRyk7CisgICAgfQorICAgIHN0ZDo6c2hhcmVkX3B0cjxDb2RlYzJDbGllbnQ6OkNvbXBvbmVudD4gY29tcCA9IG1Db21wLmxvY2soKTsKKyAgICBpZiAoIWNvbXApIHsKKyAgICAgICAgcmV0dXJuIE5PX0lOSVQ7CisgICAgfQorCisgICAgdWludDMyX3QgYzJGbGFncyA9IChmbGFncyAmIE9NWF9CVUZGRVJGTEFHX0VPUykKKyAgICAgICAgICAgID8gQzJGcmFtZURhdGE6OkZMQUdfRU5EX09GX1NUUkVBTSA6IDA7CisgICAgc3RkOjpzaGFyZWRfcHRyPEMyR3JhcGhpY0Jsb2NrPiBibG9jazsKKworICAgIEMySGFuZGxlICpoYW5kbGUgPSBudWxscHRyOworICAgIGlmIChvbXhCdWYubUJ1ZmZlclR5cGUgPT0gT01YQnVmZmVyOjprQnVmZmVyVHlwZUFOV0J1ZmZlcgorICAgICAgICAgICAgJiYgb214QnVmLm1HcmFwaGljQnVmZmVyICE9IG51bGxwdHIpIHsKKyAgICAgICAgc3RkOjpzaGFyZWRfcHRyPEMyR3JhcGhpY0FsbG9jYXRpb24+IGFsbG9jOworICAgICAgICBoYW5kbGUgPSBXcmFwTmF0aXZlQ29kZWMyR3JhbGxvY0hhbmRsZSgKKyAgICAgICAgICAgICAgICBuYXRpdmVfaGFuZGxlX2Nsb25lKG9teEJ1Zi5tR3JhcGhpY0J1ZmZlci0+aGFuZGxlKSwKKyAgICAgICAgICAgICAgICBvbXhCdWYubUdyYXBoaWNCdWZmZXItPndpZHRoLAorICAgICAgICAgICAgICAgIG9teEJ1Zi5tR3JhcGhpY0J1ZmZlci0+aGVpZ2h0LAorICAgICAgICAgICAgICAgIG9teEJ1Zi5tR3JhcGhpY0J1ZmZlci0+Zm9ybWF0LAorICAgICAgICAgICAgICAgIG9teEJ1Zi5tR3JhcGhpY0J1ZmZlci0+dXNhZ2UsCisgICAgICAgICAgICAgICAgb214QnVmLm1HcmFwaGljQnVmZmVyLT5zdHJpZGUpOworICAgICAgICBjMl9zdGF0dXNfdCBlcnIgPSBtQWxsb2NhdG9yLT5wcmlvckdyYXBoaWNBbGxvY2F0aW9uKGhhbmRsZSwgJmFsbG9jKTsKKyAgICAgICAgaWYgKGVyciAhPSBPSykgeworICAgICAgICAgICAgcmV0dXJuIFVOS05PV05fRVJST1I7CisgICAgICAgIH0KKyAgICAgICAgYmxvY2sgPSBfQzJCbG9ja0ZhY3Rvcnk6OkNyZWF0ZUdyYXBoaWNCbG9jayhhbGxvYyk7CisgICAgfSBlbHNlIGlmICghKGZsYWdzICYgT01YX0JVRkZFUkZMQUdfRU9TKSkgeworICAgICAgICByZXR1cm4gQkFEX1ZBTFVFOworICAgIH0KKworICAgIHN0ZDo6dW5pcXVlX3B0cjxDMldvcms+IHdvcmsobmV3IEMyV29yayk7CisgICAgd29yay0+aW5wdXQuZmxhZ3MgPSAoQzJGcmFtZURhdGE6OmZsYWdzX3QpYzJGbGFnczsKKyAgICB3b3JrLT5pbnB1dC5vcmRpbmFsLnRpbWVzdGFtcCA9IHRpbWVzdGFtcDsKKworICAgIC8vIFdPUktBUk9VTkQ6IGFkanVzdCB0aW1lc3RhbXAgYmFzZWQgb24gZ2FwVXMKKyAgICB7CisgICAgICAgIHdvcmstPmlucHV0Lm9yZGluYWwuY3VzdG9tT3JkaW5hbCA9IHRpbWVzdGFtcDsgLy8gc2F2ZSBpbnB1dCB0aW1lc3RhbXAKKyAgICAgICAgaWYgKG1GaXJzdElucHV0RnJhbWUpIHsKKyAgICAgICAgICAgIC8vIGdyYWIgdGltZXN0YW1wcyBvbiBmaXJzdCBmcmFtZQorICAgICAgICAgICAgbVByZXZJbnB1dFRpbWVzdGFtcCA9IHRpbWVzdGFtcDsKKyAgICAgICAgICAgIG1QcmV2Q29kZWNUaW1lc3RhbXAgPSB0aW1lc3RhbXA7CisgICAgICAgICAgICBtRmlyc3RJbnB1dEZyYW1lID0gZmFsc2U7CisgICAgICAgIH0gZWxzZSBpZiAobUFkanVzdFRpbWVzdGFtcEdhcFVzID4gMCkgeworICAgICAgICAgICAgd29yay0+aW5wdXQub3JkaW5hbC50aW1lc3RhbXAgPQorICAgICAgICAgICAgICAgIG1QcmV2Q29kZWNUaW1lc3RhbXAKKyAgICAgICAgICAgICAgICAgICAgICAgICsgYzJfbWluKCh0aW1lc3RhbXAgLSBtUHJldklucHV0VGltZXN0YW1wKS5wZWVrKCksIG1BZGp1c3RUaW1lc3RhbXBHYXBVcyk7CisgICAgICAgIH0gZWxzZSBpZiAobUFkanVzdFRpbWVzdGFtcEdhcFVzIDwgMCkgeworICAgICAgICAgICAgd29yay0+aW5wdXQub3JkaW5hbC50aW1lc3RhbXAgPSBtUHJldkNvZGVjVGltZXN0YW1wIC0gbUFkanVzdFRpbWVzdGFtcEdhcFVzOworICAgICAgICB9CisgICAgICAgIG1QcmV2SW5wdXRUaW1lc3RhbXAgPSB3b3JrLT5pbnB1dC5vcmRpbmFsLmN1c3RvbU9yZGluYWw7CisgICAgICAgIG1QcmV2Q29kZWNUaW1lc3RhbXAgPSB3b3JrLT5pbnB1dC5vcmRpbmFsLnRpbWVzdGFtcDsKKyAgICAgICAgQUxPR1YoImFkanVzdGluZyAlbGxkIHRvICVsbGQgKGdhcD0lbGxkKSIsCisgICAgICAgICAgICAgIHdvcmstPmlucHV0Lm9yZGluYWwuY3VzdG9tT3JkaW5hbC5wZWVrbGwoKSwKKyAgICAgICAgICAgICAgd29yay0+aW5wdXQub3JkaW5hbC50aW1lc3RhbXAucGVla2xsKCksCisgICAgICAgICAgICAgIChsb25nIGxvbmcpbUFkanVzdFRpbWVzdGFtcEdhcFVzKTsKKyAgICB9CisKKyAgICB3b3JrLT5pbnB1dC5vcmRpbmFsLmZyYW1lSW5kZXggPSBtRnJhbWVJbmRleCsrOworICAgIHdvcmstPmlucHV0LmJ1ZmZlcnMuY2xlYXIoKTsKKyAgICBpZiAoYmxvY2spIHsKKyAgICAgICAgc3RkOjpzaGFyZWRfcHRyPEMyQnVmZmVyPiBjMkJ1ZmZlcigKKyAgICAgICAgICAgICAgICAvLyBUT0RPOiBmZW5jZQorICAgICAgICAgICAgICAgIG5ldyBCdWZmZXIyRChibG9jay0+c2hhcmUoCisgICAgICAgICAgICAgICAgICAgICAgICBDMlJlY3QoYmxvY2stPndpZHRoKCksIGJsb2NrLT5oZWlnaHQoKSksIDo6QzJGZW5jZSgpKSksCisgICAgICAgICAgICAgICAgW2J1ZmZlciwgc291cmNlID0gZ2V0U291cmNlKCldKEMyQnVmZmVyICpwdHIpIHsKKyAgICAgICAgICAgICAgICAgICAgZGVsZXRlIHB0cjsKKyAgICAgICAgICAgICAgICAgICAgLy8gVE9ETzogZmVuY2UKKyAgICAgICAgICAgICAgICAgICAgKHZvaWQpc291cmNlLT5vbklucHV0QnVmZmVyRW1wdGllZChidWZmZXIsIC0xKTsKKyAgICAgICAgICAgICAgICB9KTsKKyAgICAgICAgd29yay0+aW5wdXQuYnVmZmVycy5wdXNoX2JhY2soYzJCdWZmZXIpOworICAgIH0KKyAgICB3b3JrLT53b3JrbGV0cy5jbGVhcigpOworICAgIHdvcmstPndvcmtsZXRzLmVtcGxhY2VfYmFjayhuZXcgQzJXb3JrbGV0KTsKKyAgICBzdGQ6Omxpc3Q8c3RkOjp1bmlxdWVfcHRyPEMyV29yaz4+IGl0ZW1zOworICAgIGl0ZW1zLnB1c2hfYmFjayhzdGQ6Om1vdmUod29yaykpOworCisgICAgYzJfc3RhdHVzX3QgZXJyID0gY29tcC0+cXVldWUoJml0ZW1zKTsKKyAgICBpZiAoZXJyICE9IEMyX09LKSB7CisgICAgICAgIHJldHVybiBVTktOT1dOX0VSUk9SOworICAgIH0KKworICAgIHJldHVybiBPSzsKK30KKworc3RhdHVzX3QgQzJPTVhOb2RlOjpnZXRFeHRlbnNpb25JbmRleCgKKyAgICAgICAgY29uc3QgY2hhciAqcGFyYW1ldGVyTmFtZSwgT01YX0lOREVYVFlQRSAqaW5kZXgpIHsKKyAgICAodm9pZClwYXJhbWV0ZXJOYW1lOworICAgICppbmRleCA9IE9NWF9JbmRleE1heDsKKyAgICByZXR1cm4gRVJST1JfVU5TVVBQT1JURUQ7Cit9CisKK3N0YXR1c190IEMyT01YTm9kZTo6ZGlzcGF0Y2hNZXNzYWdlKGNvbnN0IG9teF9tZXNzYWdlJiBtc2cpIHsKKyAgICBpZiAobXNnLnR5cGUgIT0gb214X21lc3NhZ2U6OkVWRU5UKSB7CisgICAgICAgIHJldHVybiBFUlJPUl9VTlNVUFBPUlRFRDsKKyAgICB9CisgICAgaWYgKG1zZy51LmV2ZW50X2RhdGEuZXZlbnQgIT0gT01YX0V2ZW50RGF0YVNwYWNlQ2hhbmdlZCkgeworICAgICAgICByZXR1cm4gRVJST1JfVU5TVVBQT1JURUQ7CisgICAgfQorICAgIGFuZHJvaWRfZGF0YXNwYWNlIGRhdGFTcGFjZSA9IChhbmRyb2lkX2RhdGFzcGFjZSltc2cudS5ldmVudF9kYXRhLmRhdGExOworICAgIHVpbnQzMl90IHBpeGVsRm9ybWF0ID0gbXNnLnUuZXZlbnRfZGF0YS5kYXRhMzsKKworICAgIC8vIFRPRE86IHNldCBkYXRhc3BhY2Ugb24gY29tcG9uZW50IHRvIHNlZSBpZiBpdCBpbXBhY3RzIGNvbG9yIGFzcGVjdHMKKyAgICBBTE9HRCgiZGF0YXNwYWNlIGNoYW5nZWQgdG8gJSN4IHBpeGVsIGZvcm1hdDogJSN4IiwgZGF0YVNwYWNlLCBwaXhlbEZvcm1hdCk7CisgICAgcmV0dXJuIE9LOworfQorCitzcDxJT01YQnVmZmVyU291cmNlPiBDMk9NWE5vZGU6OmdldFNvdXJjZSgpIHsKKyAgICByZXR1cm4gbUJ1ZmZlclNvdXJjZTsKK30KKwordm9pZCBDMk9NWE5vZGU6OnNldEZyYW1lU2l6ZSh1aW50MzJfdCB3aWR0aCwgdWludDMyX3QgaGVpZ2h0KSB7CisgICAgbVdpZHRoID0gd2lkdGg7CisgICAgbUhlaWdodCA9IGhlaWdodDsKK30KKworfSAgLy8gbmFtZXNwYWNlIGFuZHJvaWQKZGlmZiAtLWdpdCBhL21lZGlhL2NvZGVjMi9zZnBsdWdpbi9DMk9NWE5vZGUuaCBiL21lZGlhL2NvZGVjMi9zZnBsdWdpbi9DMk9NWE5vZGUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNWE4MTVlCi0tLSAvZGV2L251bGwKKysrIGIvbWVkaWEvY29kZWMyL3NmcGx1Z2luL0MyT01YTm9kZS5oCkBAIC0wLDAgKzEsMTAzIEBACisvKgorICogQ29weXJpZ2h0IDIwMTgsIFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KKworI2lmbmRlZiBDMl9PTVhfTk9ERV9IXworI2RlZmluZSBDMl9PTVhfTk9ERV9IXworCisjaW5jbHVkZSA8YXRvbWljPgorCisjaW5jbHVkZSA8YW5kcm9pZC9JT01YQnVmZmVyU291cmNlLmg+CisjaW5jbHVkZSA8bWVkaWEvSU9NWC5oPgorI2luY2x1ZGUgPG1lZGlhL09NWEJ1ZmZlci5oPgorI2luY2x1ZGUgPGNvZGVjMi9oaWRsL2NsaWVudC5oPgorCituYW1lc3BhY2UgYW5kcm9pZCB7CisKKy8qKgorICogSU9teE5vZGUgaW1wbGVtZW50YXRpb24gYXJvdW5kIGNvZGVjIDIuMCBjb21wb25lbnQsIG9ubHkgdG8gYmUgdXNlZCBpbgorICogSUdyYXBoaWNCdWZmZXJTb3VyY2U6OmNvbmZpZ3VyZS4gT25seSBzdWJzZXQgb2YgSU9teE5vZGUgQVBJIGlzIGltcGxlbWVudGVkCisgKiBhbmQgb3RoZXJzIGFyZSBsZWZ0IGFzIHN0dWIuIEFzIGEgcmVzdWx0LCBvbmUgY2Fubm90IGV4cGVjdCB0aGlzIElPbXhOb2RlCisgKiB0byB3b3JrIGluIGFueSBvdGhlciB1c2FnZSB0aGFuIElHcmFwaGljQnVmZmVyU291cmNlLgorICovCitzdHJ1Y3QgQzJPTVhOb2RlIDogcHVibGljIEJuT01YTm9kZSB7CisgICAgZXhwbGljaXQgQzJPTVhOb2RlKGNvbnN0IHN0ZDo6c2hhcmVkX3B0cjxDb2RlYzJDbGllbnQ6OkNvbXBvbmVudD4gJmNvbXApOworICAgIH5DMk9NWE5vZGUoKSBvdmVycmlkZSA9IGRlZmF1bHQ7CisKKyAgICAvLyBJT01YTm9kZQorICAgIHN0YXR1c190IGZyZWVOb2RlKCkgb3ZlcnJpZGU7CisgICAgc3RhdHVzX3Qgc2VuZENvbW1hbmQoT01YX0NPTU1BTkRUWVBFIGNtZCwgT01YX1MzMiBwYXJhbSkgb3ZlcnJpZGU7CisgICAgc3RhdHVzX3QgZ2V0UGFyYW1ldGVyKAorICAgICAgICAgICAgT01YX0lOREVYVFlQRSBpbmRleCwgdm9pZCAqcGFyYW1zLCBzaXplX3Qgc2l6ZSkgb3ZlcnJpZGU7CisgICAgc3RhdHVzX3Qgc2V0UGFyYW1ldGVyKAorICAgICAgICAgICAgT01YX0lOREVYVFlQRSBpbmRleCwgY29uc3Qgdm9pZCAqcGFyYW1zLCBzaXplX3Qgc2l6ZSkgb3ZlcnJpZGU7CisgICAgc3RhdHVzX3QgZ2V0Q29uZmlnKAorICAgICAgICAgICAgT01YX0lOREVYVFlQRSBpbmRleCwgdm9pZCAqcGFyYW1zLCBzaXplX3Qgc2l6ZSkgb3ZlcnJpZGU7CisgICAgc3RhdHVzX3Qgc2V0Q29uZmlnKAorICAgICAgICAgICAgT01YX0lOREVYVFlQRSBpbmRleCwgY29uc3Qgdm9pZCAqcGFyYW1zLCBzaXplX3Qgc2l6ZSkgb3ZlcnJpZGU7CisgICAgc3RhdHVzX3Qgc2V0UG9ydE1vZGUoT01YX1UzMiBwb3J0X2luZGV4LCBJT01YOjpQb3J0TW9kZSBtb2RlKSBvdmVycmlkZTsKKyAgICBzdGF0dXNfdCBwcmVwYXJlRm9yQWRhcHRpdmVQbGF5YmFjaygKKyAgICAgICAgICAgIE9NWF9VMzIgcG9ydEluZGV4LCBPTVhfQk9PTCBlbmFibGUsCisgICAgICAgICAgICBPTVhfVTMyIG1heEZyYW1lV2lkdGgsIE9NWF9VMzIgbWF4RnJhbWVIZWlnaHQpIG92ZXJyaWRlOworICAgIHN0YXR1c190IGNvbmZpZ3VyZVZpZGVvVHVubmVsTW9kZSgKKyAgICAgICAgICAgIE9NWF9VMzIgcG9ydEluZGV4LCBPTVhfQk9PTCB0dW5uZWxlZCwKKyAgICAgICAgICAgIE9NWF9VMzIgYXVkaW9Id1N5bmMsIG5hdGl2ZV9oYW5kbGVfdCAqKnNpZGViYW5kSGFuZGxlKSBvdmVycmlkZTsKKyAgICBzdGF0dXNfdCBnZXRHcmFwaGljQnVmZmVyVXNhZ2UoCisgICAgICAgICAgICBPTVhfVTMyIHBvcnRfaW5kZXgsIE9NWF9VMzIqIHVzYWdlKSBvdmVycmlkZTsKKyAgICBzdGF0dXNfdCBzZXRJbnB1dFN1cmZhY2UoCisgICAgICAgICAgICBjb25zdCBzcDxJT01YQnVmZmVyU291cmNlPiAmYnVmZmVyU291cmNlKSBvdmVycmlkZTsKKyAgICBzdGF0dXNfdCBhbGxvY2F0ZVNlY3VyZUJ1ZmZlcigKKyAgICAgICAgICAgIE9NWF9VMzIgcG9ydF9pbmRleCwgc2l6ZV90IHNpemUsIGJ1ZmZlcl9pZCAqYnVmZmVyLAorICAgICAgICAgICAgdm9pZCAqKmJ1ZmZlcl9kYXRhLCBzcDxOYXRpdmVIYW5kbGU+ICpuYXRpdmVfaGFuZGxlKSBvdmVycmlkZTsKKyAgICBzdGF0dXNfdCB1c2VCdWZmZXIoCisgICAgICAgICAgICBPTVhfVTMyIHBvcnRfaW5kZXgsIGNvbnN0IE9NWEJ1ZmZlciAmb214QnVmLCBidWZmZXJfaWQgKmJ1ZmZlcikgb3ZlcnJpZGU7CisgICAgc3RhdHVzX3QgZnJlZUJ1ZmZlcigKKyAgICAgICAgICAgIE9NWF9VMzIgcG9ydF9pbmRleCwgYnVmZmVyX2lkIGJ1ZmZlcikgb3ZlcnJpZGU7CisgICAgc3RhdHVzX3QgZmlsbEJ1ZmZlcigKKyAgICAgICAgICAgIGJ1ZmZlcl9pZCBidWZmZXIsIGNvbnN0IE9NWEJ1ZmZlciAmb214QnVmLCBpbnQgZmVuY2VGZCkgb3ZlcnJpZGU7CisgICAgc3RhdHVzX3QgZW1wdHlCdWZmZXIoCisgICAgICAgICAgICBidWZmZXJfaWQgYnVmZmVyLCBjb25zdCBPTVhCdWZmZXIgJm9teEJ1ZiwKKyAgICAgICAgICAgIE9NWF9VMzIgZmxhZ3MsIE9NWF9USUNLUyB0aW1lc3RhbXAsIGludCBmZW5jZUZkKSBvdmVycmlkZTsKKyAgICBzdGF0dXNfdCBnZXRFeHRlbnNpb25JbmRleCgKKyAgICAgICAgICAgIGNvbnN0IGNoYXIgKnBhcmFtZXRlcl9uYW1lLAorICAgICAgICAgICAgT01YX0lOREVYVFlQRSAqaW5kZXgpIG92ZXJyaWRlOworICAgIHN0YXR1c190IGRpc3BhdGNoTWVzc2FnZShjb25zdCBvbXhfbWVzc2FnZSAmbXNnKSBvdmVycmlkZTsKKworICAgIHNwPElPTVhCdWZmZXJTb3VyY2U+IGdldFNvdXJjZSgpOworICAgIHZvaWQgc2V0RnJhbWVTaXplKHVpbnQzMl90IHdpZHRoLCB1aW50MzJfdCBoZWlnaHQpOworCitwcml2YXRlOgorICAgIHN0ZDo6d2Vha19wdHI8Q29kZWMyQ2xpZW50OjpDb21wb25lbnQ+IG1Db21wOworICAgIHNwPElPTVhCdWZmZXJTb3VyY2U+IG1CdWZmZXJTb3VyY2U7CisgICAgc3RkOjpzaGFyZWRfcHRyPEMyQWxsb2NhdG9yPiBtQWxsb2NhdG9yOworICAgIHN0ZDo6YXRvbWljX3VpbnQ2NF90IG1GcmFtZUluZGV4OworICAgIHVpbnQzMl90IG1XaWR0aDsKKyAgICB1aW50MzJfdCBtSGVpZ2h0OworICAgIHVpbnQ2NF90IG1Vc2FnZTsKKworICAgIC8vIFdPUktBUk9VTkQ6IHRpbWVzdGFtcCBhZGp1c3RtZW50CisKKyAgICAvLyBpZiA+MDogdGhpcyBpcyB0aGUgbWF4IHRpbWVzdGFtcCBnYXAsIGlmIDwwOiB0aGlzIGlzIC0xIHRpbWVzIHRoZSBmaXhlZCB0aW1lc3RhbXAgZ2FwCisgICAgLy8gaWYgMDogbm8gdGltZXN0YW1wIGFkanVzdG1lbnQgaXMgbWFkZQorICAgIC8vIG5vdGUgdGhhdCBDMk9NWE5vZGUgY2FuIGJlIHJlY3ljbGVkIGJldHdlZW4gZW5jb2Rpbmcgc2Vzc2lvbnMuCisgICAgaW50MzJfdCBtQWRqdXN0VGltZXN0YW1wR2FwVXM7CisgICAgYm9vbCBtRmlyc3RJbnB1dEZyYW1lOyAvLyB0cnVlIGZvciBmaXJzdCBpbnB1dAorICAgIGMyX2NudHI2NF90IG1QcmV2SW5wdXRUaW1lc3RhbXA7IC8vIGlucHV0IHRpbWVzdGFtcCBmb3IgcHJldmlvdXMgZnJhbWUKKyAgICBjMl9jbnRyNjRfdCBtUHJldkNvZGVjVGltZXN0YW1wOyAvLyBhZGp1c3RlZCAoY29kZWMpIHRpbWVzdGFtcCBmb3IgcHJldmlvdXMgZnJhbWUKK307CisKK30gIC8vIG5hbWVzcGFjZSBhbmRyb2lkCisKKyNlbmRpZiAgLy8gQzJfT01YX05PREVfSF8KZGlmZiAtLWdpdCBhL21lZGlhL2NvZGVjMi9zZnBsdWdpbi9DQ29kZWMuY3BwIGIvbWVkaWEvY29kZWMyL3NmcGx1Z2luL0NDb2RlYy5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjkwM2JiYgotLS0gL2Rldi9udWxsCisrKyBiL21lZGlhL2NvZGVjMi9zZnBsdWdpbi9DQ29kZWMuY3BwCkBAIC0wLDAgKzEsMTc0NiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNyBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCisKKy8vI2RlZmluZSBMT0dfTkRFQlVHIDAKKyNkZWZpbmUgTE9HX1RBRyAiQ0NvZGVjIgorI2luY2x1ZGUgPHV0aWxzL0xvZy5oPgorCisjaW5jbHVkZSA8c3N0cmVhbT4KKyNpbmNsdWRlIDx0aHJlYWQ+CisKKyNpbmNsdWRlIDxDMkNvbmZpZy5oPgorI2luY2x1ZGUgPEMyRGVidWcuaD4KKyNpbmNsdWRlIDxDMlBhcmFtSW50ZXJuYWwuaD4KKyNpbmNsdWRlIDxDMlBsYXRmb3JtU3VwcG9ydC5oPgorCisjaW5jbHVkZSA8YW5kcm9pZC9JR3JhcGhpY0J1ZmZlclNvdXJjZS5oPgorI2luY2x1ZGUgPGFuZHJvaWQvSU9NWEJ1ZmZlclNvdXJjZS5oPgorI2luY2x1ZGUgPGFuZHJvaWQvaGFyZHdhcmUvbWVkaWEvb214LzEuMC9JR3JhcGhpY0J1ZmZlclNvdXJjZS5oPgorI2luY2x1ZGUgPGFuZHJvaWQvaGFyZHdhcmUvbWVkaWEvb214LzEuMC9JT214Lmg+CisjaW5jbHVkZSA8YW5kcm9pZC1iYXNlL3N0cmluZ3ByaW50Zi5oPgorI2luY2x1ZGUgPGN1dGlscy9wcm9wZXJ0aWVzLmg+CisjaW5jbHVkZSA8Z3VpL0lHcmFwaGljQnVmZmVyUHJvZHVjZXIuaD4KKyNpbmNsdWRlIDxndWkvU3VyZmFjZS5oPgorI2luY2x1ZGUgPGd1aS9idWZmZXJxdWV1ZS8xLjAvSDJCR3JhcGhpY0J1ZmZlclByb2R1Y2VyLmg+CisjaW5jbHVkZSA8bWVkaWEvb214LzEuMC9XR3JhcGhpY0J1ZmZlclNvdXJjZS5oPgorI2luY2x1ZGUgPG1lZGlhL29wZW5tYXgvT01YX0luZGV4RXh0Lmg+CisjaW5jbHVkZSA8bWVkaWEvc3RhZ2VmcmlnaHQvQnVmZmVyUHJvZHVjZXJXcmFwcGVyLmg+CisjaW5jbHVkZSA8bWVkaWEvc3RhZ2VmcmlnaHQvTWVkaWFDb2RlY0NvbnN0YW50cy5oPgorI2luY2x1ZGUgPG1lZGlhL3N0YWdlZnJpZ2h0L1BlcnNpc3RlbnRTdXJmYWNlLmg+CisjaW5jbHVkZSA8bWVkaWEvc3RhZ2VmcmlnaHQvY29kZWMyLzEuMC9JbnB1dFN1cmZhY2UuaD4KKworI2luY2x1ZGUgIkMyT01YTm9kZS5oIgorI2luY2x1ZGUgIkNDb2RlYy5oIgorI2luY2x1ZGUgIkNDb2RlY0J1ZmZlckNoYW5uZWwuaCIKKyNpbmNsdWRlICJJbnB1dFN1cmZhY2VXcmFwcGVyLmgiCisKK2V4dGVybiAiQyIgYW5kcm9pZDo6UGVyc2lzdGVudFN1cmZhY2UgKkNyZWF0ZUlucHV0U3VyZmFjZSgpOworCituYW1lc3BhY2UgYW5kcm9pZCB7CisKK3VzaW5nIG5hbWVzcGFjZSBzdGQ6OmNocm9ub19saXRlcmFsczsKK3VzaW5nIDo6YW5kcm9pZDo6aGFyZHdhcmU6OmdyYXBoaWNzOjpidWZmZXJxdWV1ZTo6VjFfMDo6dXRpbHM6OkgyQkdyYXBoaWNCdWZmZXJQcm9kdWNlcjsKK3VzaW5nIGFuZHJvaWQ6OmJhc2U6OlN0cmluZ1ByaW50ZjsKK3VzaW5nIEJHcmFwaGljQnVmZmVyU291cmNlID0gOjphbmRyb2lkOjpJR3JhcGhpY0J1ZmZlclNvdXJjZTsKK3VzaW5nIDo6YW5kcm9pZDo6aGFyZHdhcmU6Om1lZGlhOjpjMjo6VjFfMDo6SUlucHV0U3VyZmFjZTsKKworbmFtZXNwYWNlIHsKKworY2xhc3MgQ0NvZGVjV2F0Y2hkb2cgOiBwdWJsaWMgQUhhbmRsZXIgeworcHJpdmF0ZToKKyAgICBlbnVtIHsKKyAgICAgICAga1doYXRXYXRjaCwKKyAgICB9OworICAgIGNvbnN0ZXhwciBzdGF0aWMgaW50NjRfdCBrV2F0Y2hJbnRlcnZhbFVzID0gMzMwMDAwMDsgIC8vIDMuMyBzZWNzCisKK3B1YmxpYzoKKyAgICBzdGF0aWMgc3A8Q0NvZGVjV2F0Y2hkb2c+IGdldEluc3RhbmNlKCkgeworICAgICAgICBzdGF0aWMgc3A8Q0NvZGVjV2F0Y2hkb2c+IGluc3RhbmNlKG5ldyBDQ29kZWNXYXRjaGRvZyk7CisgICAgICAgIHN0YXRpYyBzdGQ6Om9uY2VfZmxhZyBmbGFnOworICAgICAgICAvLyBDYWxsIEluaXQoKSBvbmx5IG9uY2UuCisgICAgICAgIHN0ZDo6Y2FsbF9vbmNlKGZsYWcsIEluaXQsIGluc3RhbmNlKTsKKyAgICAgICAgcmV0dXJuIGluc3RhbmNlOworICAgIH0KKworICAgIH5DQ29kZWNXYXRjaGRvZygpID0gZGVmYXVsdDsKKworICAgIHZvaWQgd2F0Y2goc3A8Q0NvZGVjPiBjb2RlYykgeworICAgICAgICBib29sIHNob3VsZFBvc3QgPSBmYWxzZTsKKyAgICAgICAgeworICAgICAgICAgICAgTXV0ZXhlZDxzdGQ6OnNldDx3cDxDQ29kZWM+Pj46OkxvY2tlZCBjb2RlY3MobUNvZGVjc1RvV2F0Y2gpOworICAgICAgICAgICAgLy8gSWYgYSB3YXRjaCBtZXNzYWdlIGlzIGluIGZsaWdodCwgcGlnZ3ktYmFjayB0aGlzIGluc3RhbmNlIGFzIHdlbGwuCisgICAgICAgICAgICAvLyBPdGhlcndpc2UsIHBvc3QgYSBuZXcgd2F0Y2ggbWVzc2FnZS4KKyAgICAgICAgICAgIHNob3VsZFBvc3QgPSBjb2RlY3MtPmVtcHR5KCk7CisgICAgICAgICAgICBjb2RlY3MtPmVtcGxhY2UoY29kZWMpOworICAgICAgICB9CisgICAgICAgIGlmIChzaG91bGRQb3N0KSB7CisgICAgICAgICAgICBBTE9HVigicG9zdGluZyB3YXRjaCBtZXNzYWdlIik7CisgICAgICAgICAgICAobmV3IEFNZXNzYWdlKGtXaGF0V2F0Y2gsIHRoaXMpKS0+cG9zdChrV2F0Y2hJbnRlcnZhbFVzKTsKKyAgICAgICAgfQorICAgIH0KKworcHJvdGVjdGVkOgorICAgIHZvaWQgb25NZXNzYWdlUmVjZWl2ZWQoY29uc3Qgc3A8QU1lc3NhZ2U+ICZtc2cpIHsKKyAgICAgICAgc3dpdGNoIChtc2ctPndoYXQoKSkgeworICAgICAgICAgICAgY2FzZSBrV2hhdFdhdGNoOiB7CisgICAgICAgICAgICAgICAgTXV0ZXhlZDxzdGQ6OnNldDx3cDxDQ29kZWM+Pj46OkxvY2tlZCBjb2RlY3MobUNvZGVjc1RvV2F0Y2gpOworICAgICAgICAgICAgICAgIEFMT0dWKCJ3YXRjaCBmb3IgJXp1IGNvZGVjcyIsIGNvZGVjcy0+c2l6ZSgpKTsKKyAgICAgICAgICAgICAgICBmb3IgKGF1dG8gaXQgPSBjb2RlY3MtPmJlZ2luKCk7IGl0ICE9IGNvZGVjcy0+ZW5kKCk7ICsraXQpIHsKKyAgICAgICAgICAgICAgICAgICAgc3A8Q0NvZGVjPiBjb2RlYyA9IGl0LT5wcm9tb3RlKCk7CisgICAgICAgICAgICAgICAgICAgIGlmIChjb2RlYyA9PSBudWxscHRyKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBjb2RlYy0+aW5pdGlhdGVSZWxlYXNlSWZTdHVjaygpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBjb2RlY3MtPmNsZWFyKCk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGRlZmF1bHQ6IHsKKyAgICAgICAgICAgICAgICBUUkVTUEFTUygiQ0NvZGVjV2F0Y2hkb2c6IHVucmVjb2duaXplZCBtZXNzYWdlIik7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKK3ByaXZhdGU6CisgICAgQ0NvZGVjV2F0Y2hkb2coKSA6IG1Mb29wZXIobmV3IEFMb29wZXIpIHt9CisKKyAgICBzdGF0aWMgdm9pZCBJbml0KGNvbnN0IHNwPENDb2RlY1dhdGNoZG9nPiAmdGhpeikgeworICAgICAgICBBTE9HVigiSW5pdCIpOworICAgICAgICB0aGl6LT5tTG9vcGVyLT5zZXROYW1lKCJDQ29kZWNXYXRjaGRvZyIpOworICAgICAgICB0aGl6LT5tTG9vcGVyLT5yZWdpc3RlckhhbmRsZXIodGhpeik7CisgICAgICAgIHRoaXotPm1Mb29wZXItPnN0YXJ0KCk7CisgICAgfQorCisgICAgc3A8QUxvb3Blcj4gbUxvb3BlcjsKKworICAgIE11dGV4ZWQ8c3RkOjpzZXQ8d3A8Q0NvZGVjPj4+IG1Db2RlY3NUb1dhdGNoOworfTsKKworY2xhc3MgQzJJbnB1dFN1cmZhY2VXcmFwcGVyIDogcHVibGljIElucHV0U3VyZmFjZVdyYXBwZXIgeworcHVibGljOgorICAgIGV4cGxpY2l0IEMySW5wdXRTdXJmYWNlV3JhcHBlcigKKyAgICAgICAgICAgIGNvbnN0IHN0ZDo6c2hhcmVkX3B0cjxDb2RlYzJDbGllbnQ6OklucHV0U3VyZmFjZT4gJnN1cmZhY2UpIDoKKyAgICAgICAgbVN1cmZhY2Uoc3VyZmFjZSkgeworICAgIH0KKworICAgIH5DMklucHV0U3VyZmFjZVdyYXBwZXIoKSBvdmVycmlkZSA9IGRlZmF1bHQ7CisKKyAgICBzdGF0dXNfdCBjb25uZWN0KGNvbnN0IHN0ZDo6c2hhcmVkX3B0cjxDb2RlYzJDbGllbnQ6OkNvbXBvbmVudD4gJmNvbXApIG92ZXJyaWRlIHsKKyAgICAgICAgaWYgKG1Db25uZWN0aW9uICE9IG51bGxwdHIpIHsKKyAgICAgICAgICAgIHJldHVybiBBTFJFQURZX0VYSVNUUzsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gdG9TdGF0dXNUKG1TdXJmYWNlLT5jb25uZWN0VG9Db21wb25lbnQoY29tcCwgJm1Db25uZWN0aW9uKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBDMl9PUEVSQVRJT05fSW5wdXRTdXJmYWNlX2Nvbm5lY3RUb0NvbXBvbmVudCk7CisgICAgfQorCisgICAgdm9pZCBkaXNjb25uZWN0KCkgb3ZlcnJpZGUgeworICAgICAgICBpZiAobUNvbm5lY3Rpb24gIT0gbnVsbHB0cikgeworICAgICAgICAgICAgbUNvbm5lY3Rpb24tPmRpc2Nvbm5lY3QoKTsKKyAgICAgICAgICAgIG1Db25uZWN0aW9uID0gbnVsbHB0cjsKKyAgICAgICAgfQorICAgIH0KKworICAgIHN0YXR1c190IHN0YXJ0KCkgb3ZlcnJpZGUgeworICAgICAgICAvLyBJbnB1dFN1cmZhY2UgZG9lcyBub3QgZGlzdGluZ3Vpc2ggc3RhcnRlZCBzdGF0ZQorICAgICAgICByZXR1cm4gT0s7CisgICAgfQorCisgICAgc3RhdHVzX3Qgc2lnbmFsRW5kT2ZJbnB1dFN0cmVhbSgpIG92ZXJyaWRlIHsKKyAgICAgICAgQzJJbnB1dFN1cmZhY2VFb3NUdW5pbmcgZW9zKHRydWUpOworICAgICAgICBzdGQ6OnZlY3RvcjxzdGQ6OnVuaXF1ZV9wdHI8QzJTZXR0aW5nUmVzdWx0Pj4gZmFpbHVyZXM7CisgICAgICAgIGMyX3N0YXR1c190IGVyciA9IG1TdXJmYWNlLT5nZXRDb25maWd1cmFibGUoKS0+Y29uZmlnKHsmZW9zfSwgQzJfTUFZX0JMT0NLLCAmZmFpbHVyZXMpOworICAgICAgICBpZiAoZXJyICE9IEMyX09LKSB7CisgICAgICAgICAgICByZXR1cm4gVU5LTk9XTl9FUlJPUjsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gT0s7CisgICAgfQorCisgICAgc3RhdHVzX3QgY29uZmlndXJlKENvbmZpZyAmY29uZmlnIF9fdW51c2VkKSB7CisgICAgICAgIC8vIFRPRE8KKyAgICAgICAgcmV0dXJuIE9LOworICAgIH0KKworcHJpdmF0ZToKKyAgICBzdGQ6OnNoYXJlZF9wdHI8Q29kZWMyQ2xpZW50OjpJbnB1dFN1cmZhY2U+IG1TdXJmYWNlOworICAgIHN0ZDo6c2hhcmVkX3B0cjxDb2RlYzJDbGllbnQ6OklucHV0U3VyZmFjZUNvbm5lY3Rpb24+IG1Db25uZWN0aW9uOworfTsKKworY2xhc3MgR3JhcGhpY0J1ZmZlclNvdXJjZVdyYXBwZXIgOiBwdWJsaWMgSW5wdXRTdXJmYWNlV3JhcHBlciB7CitwdWJsaWM6CisvLyAgICBleHBsaWNpdCBHcmFwaGljQnVmZmVyU291cmNlV3JhcHBlcihjb25zdCBzcDxCR3JhcGhpY0J1ZmZlclNvdXJjZT4gJnNvdXJjZSkgOiBtU291cmNlKHNvdXJjZSkge30KKyAgICBHcmFwaGljQnVmZmVyU291cmNlV3JhcHBlcigKKyAgICAgICAgICAgIGNvbnN0IHNwPEJHcmFwaGljQnVmZmVyU291cmNlPiAmc291cmNlLAorICAgICAgICAgICAgdWludDMyX3Qgd2lkdGgsCisgICAgICAgICAgICB1aW50MzJfdCBoZWlnaHQpCisgICAgICAgIDogbVNvdXJjZShzb3VyY2UpLCBtV2lkdGgod2lkdGgpLCBtSGVpZ2h0KGhlaWdodCkgeworICAgICAgICBtRGF0YVNwYWNlID0gSEFMX0RBVEFTUEFDRV9CVDcwOTsKKyAgICB9CisgICAgfkdyYXBoaWNCdWZmZXJTb3VyY2VXcmFwcGVyKCkgb3ZlcnJpZGUgPSBkZWZhdWx0OworCisgICAgc3RhdHVzX3QgY29ubmVjdChjb25zdCBzdGQ6OnNoYXJlZF9wdHI8Q29kZWMyQ2xpZW50OjpDb21wb25lbnQ+ICZjb21wKSBvdmVycmlkZSB7CisgICAgICAgIG1Ob2RlID0gbmV3IEMyT01YTm9kZShjb21wKTsKKyAgICAgICAgbU5vZGUtPnNldEZyYW1lU2l6ZShtV2lkdGgsIG1IZWlnaHQpOworCisgICAgICAgIC8vIE5PVEU6IHdlIGRvIG5vdCB1c2UvcGFzcyB0aHJvdWdoIGNvbG9yIGFzcGVjdHMgZnJvbSBHcmFwaGljQnVmZmVyU291cmNlIGFzIHdlCisgICAgICAgIC8vIGNvbW11bmljYXRlIHRoYXQgZGlyZWN0bHkgdG8gdGhlIGNvbXBvbmVudC4KKyAgICAgICAgbVNvdXJjZS0+Y29uZmlndXJlKG1Ob2RlLCBtRGF0YVNwYWNlKTsKKyAgICAgICAgcmV0dXJuIE9LOworICAgIH0KKworICAgIHZvaWQgZGlzY29ubmVjdCgpIG92ZXJyaWRlIHsKKyAgICAgICAgaWYgKG1Ob2RlID09IG51bGxwdHIpIHsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICBzcDxJT01YQnVmZmVyU291cmNlPiBzb3VyY2UgPSBtTm9kZS0+Z2V0U291cmNlKCk7CisgICAgICAgIGlmIChzb3VyY2UgPT0gbnVsbHB0cikgeworICAgICAgICAgICAgQUxPR0QoIkdCU1dyYXBwZXI6OmRpc2Nvbm5lY3Q6IG5vZGUgaXMgbm90IGNvbmZpZ3VyZWQgd2l0aCBPTVhCdWZmZXJTb3VyY2UuIik7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgc291cmNlLT5vbk9teElkbGUoKTsKKyAgICAgICAgc291cmNlLT5vbk9teExvYWRlZCgpOworICAgICAgICBtTm9kZS5jbGVhcigpOworICAgIH0KKworICAgIHN0YXR1c190IEdldFN0YXR1cyhjb25zdCBiaW5kZXI6OlN0YXR1cyAmc3RhdHVzKSB7CisgICAgICAgIHN0YXR1c190IGVyciA9IE9LOworICAgICAgICBpZiAoIXN0YXR1cy5pc09rKCkpIHsKKyAgICAgICAgICAgIGVyciA9IHN0YXR1cy5zZXJ2aWNlU3BlY2lmaWNFcnJvckNvZGUoKTsKKyAgICAgICAgICAgIGlmIChlcnIgPT0gT0spIHsKKyAgICAgICAgICAgICAgICBlcnIgPSBzdGF0dXMudHJhbnNhY3Rpb25FcnJvcigpOworICAgICAgICAgICAgICAgIGlmIChlcnIgPT0gT0spIHsKKyAgICAgICAgICAgICAgICAgICAgLy8gYmluZGVyIHN0YXR1cyBmYWlsZWQsIGJ1dCB0aGVyZSBpcyBubyBzZXJ2aWUgb3IgdHJhbnNhY3Rpb24gZXJyb3IKKyAgICAgICAgICAgICAgICAgICAgZXJyID0gVU5LTk9XTl9FUlJPUjsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIGVycjsKKyAgICB9CisKKyAgICBzdGF0dXNfdCBzdGFydCgpIG92ZXJyaWRlIHsKKyAgICAgICAgc3A8SU9NWEJ1ZmZlclNvdXJjZT4gc291cmNlID0gbU5vZGUtPmdldFNvdXJjZSgpOworICAgICAgICBpZiAoc291cmNlID09IG51bGxwdHIpIHsKKyAgICAgICAgICAgIHJldHVybiBOT19JTklUOworICAgICAgICB9CisgICAgICAgIGNvbnN0ZXhwciBzaXplX3Qga051bVNsb3RzID0gMTY7CisgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwga051bVNsb3RzOyArK2kpIHsKKyAgICAgICAgICAgIHNvdXJjZS0+b25JbnB1dEJ1ZmZlckFkZGVkKGkpOworICAgICAgICB9CisKKyAgICAgICAgc291cmNlLT5vbk9teEV4ZWN1dGluZygpOworICAgICAgICByZXR1cm4gT0s7CisgICAgfQorCisgICAgc3RhdHVzX3Qgc2lnbmFsRW5kT2ZJbnB1dFN0cmVhbSgpIG92ZXJyaWRlIHsKKyAgICAgICAgcmV0dXJuIEdldFN0YXR1cyhtU291cmNlLT5zaWduYWxFbmRPZklucHV0U3RyZWFtKCkpOworICAgIH0KKworICAgIHN0YXR1c190IGNvbmZpZ3VyZShDb25maWcgJmNvbmZpZykgeworICAgICAgICBzdGQ6OnN0cmluZ3N0cmVhbSBzdGF0dXM7CisgICAgICAgIHN0YXR1c190IGVyciA9IE9LOworCisgICAgICAgIC8vIGhhbmRsZSBlYWNoIGNvbmZpZ3VyYXRpb24gZ3JhbnVhbGx5LCBpbiBjYXNlIHdlIG5lZWQgdG8gaGFuZGxlIHBhcnQgb2YgdGhlIGNvbmZpZ3VyYXRpb24KKyAgICAgICAgLy8gZWxzZXdoZXJlCisKKyAgICAgICAgLy8gVFJJQ0tZOiB3ZSBkbyBub3QgdW5zZXQgZnJhbWUgZGVsYXkgcmVwZWF0aW5nCisgICAgICAgIGlmIChjb25maWcubU1pbkZwcyA+IDAgJiYgY29uZmlnLm1NaW5GcHMgIT0gbUNvbmZpZy5tTWluRnBzKSB7CisgICAgICAgICAgICBpbnQ2NF90IHVzID0gMWU2IC8gY29uZmlnLm1NaW5GcHMgKyAwLjU7CisgICAgICAgICAgICBzdGF0dXNfdCByZXMgPSBHZXRTdGF0dXMobVNvdXJjZS0+c2V0UmVwZWF0UHJldmlvdXNGcmFtZURlbGF5VXModXMpKTsKKyAgICAgICAgICAgIHN0YXR1cyA8PCAiIG1pbkZwcz0iIDw8IGNvbmZpZy5tTWluRnBzIDw8ICIgPT4gcmVwZWF0RGVsYXlVcz0iIDw8IHVzOworICAgICAgICAgICAgaWYgKHJlcyAhPSBPSykgeworICAgICAgICAgICAgICAgIHN0YXR1cyA8PCAiICg9PiAiIDw8IGFzU3RyaW5nKHJlcykgPDwgIikiOworICAgICAgICAgICAgICAgIGVyciA9IHJlczsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIG1Db25maWcubU1pbkZwcyA9IGNvbmZpZy5tTWluRnBzOworICAgICAgICB9CisKKyAgICAgICAgLy8gcHRzIGdhcAorICAgICAgICBpZiAoY29uZmlnLm1NaW5BZGp1c3RlZEZwcyA+IDAgfHwgY29uZmlnLm1GaXhlZEFkanVzdGVkRnBzID4gMCkgeworICAgICAgICAgICAgaWYgKG1Ob2RlICE9IG51bGxwdHIpIHsKKyAgICAgICAgICAgICAgICBPTVhfUEFSQU1fVTMyVFlQRSBwdHJHYXBQYXJhbSA9IHt9OworICAgICAgICAgICAgICAgIHB0ckdhcFBhcmFtLm5TaXplID0gc2l6ZW9mKE9NWF9QQVJBTV9VMzJUWVBFKTsKKyAgICAgICAgICAgICAgICBwdHJHYXBQYXJhbS5uVTMyID0gKGNvbmZpZy5tTWluQWRqdXN0ZWRGcHMgPiAwKQorICAgICAgICAgICAgICAgICAgICAgICAgPyBjMl9taW4oSU5UMzJfTUFYICsgMC4sIDFlNiAvIGNvbmZpZy5tTWluQWRqdXN0ZWRGcHMgKyAwLjUpCisgICAgICAgICAgICAgICAgICAgICAgICA6IGMyX21heCgwLiAtIElOVDMyX01BWCwgLTFlNiAvIGNvbmZpZy5tRml4ZWRBZGp1c3RlZEZwcyAtIDAuNSk7CisgICAgICAgICAgICAgICAgKHZvaWQpbU5vZGUtPnNldFBhcmFtZXRlcigKKyAgICAgICAgICAgICAgICAgICAgICAgIChPTVhfSU5ERVhUWVBFKU9NWF9JbmRleFBhcmFtTWF4RnJhbWVEdXJhdGlvbkZvckJpdHJhdGVDb250cm9sLAorICAgICAgICAgICAgICAgICAgICAgICAgJnB0ckdhcFBhcmFtLCBzaXplb2YocHRyR2FwUGFyYW0pKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIC8vIG1heCBmcHMKKyAgICAgICAgLy8gVFJJQ0tZOiB3ZSBkbyBub3QgdW5zZXQgbWF4IGZwcyB0byAwIHVubGVzcyB1c2luZyBmaXhlZCBmcHMKKyAgICAgICAgaWYgKChjb25maWcubU1heEZwcyA+IDAgfHwgKGNvbmZpZy5tRml4ZWRBZGp1c3RlZEZwcyA+IDAgJiYgY29uZmlnLm1NYXhGcHMgPT0gMCkpCisgICAgICAgICAgICAgICAgJiYgY29uZmlnLm1NYXhGcHMgIT0gbUNvbmZpZy5tTWF4RnBzKSB7CisgICAgICAgICAgICBzdGF0dXNfdCByZXMgPSBHZXRTdGF0dXMobVNvdXJjZS0+c2V0TWF4RnBzKGNvbmZpZy5tTWF4RnBzKSk7CisgICAgICAgICAgICBzdGF0dXMgPDwgIiBtYXhGcHM9IiA8PCBjb25maWcubU1heEZwczsKKyAgICAgICAgICAgIGlmIChyZXMgIT0gT0spIHsKKyAgICAgICAgICAgICAgICBzdGF0dXMgPDwgIiAoPT4gIiA8PCBhc1N0cmluZyhyZXMpIDw8ICIpIjsKKyAgICAgICAgICAgICAgICBlcnIgPSByZXM7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBtQ29uZmlnLm1NYXhGcHMgPSBjb25maWcubU1heEZwczsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChjb25maWcubVRpbWVPZmZzZXRVcyAhPSBtQ29uZmlnLm1UaW1lT2Zmc2V0VXMpIHsKKyAgICAgICAgICAgIHN0YXR1c190IHJlcyA9IEdldFN0YXR1cyhtU291cmNlLT5zZXRUaW1lT2Zmc2V0VXMoY29uZmlnLm1UaW1lT2Zmc2V0VXMpKTsKKyAgICAgICAgICAgIHN0YXR1cyA8PCAiIHRpbWVPZmZzZXQgIiA8PCBjb25maWcubVRpbWVPZmZzZXRVcyA8PCAidXMiOworICAgICAgICAgICAgaWYgKHJlcyAhPSBPSykgeworICAgICAgICAgICAgICAgIHN0YXR1cyA8PCAiICg9PiAiIDw8IGFzU3RyaW5nKHJlcykgPDwgIikiOworICAgICAgICAgICAgICAgIGVyciA9IHJlczsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIG1Db25maWcubVRpbWVPZmZzZXRVcyA9IGNvbmZpZy5tVGltZU9mZnNldFVzOworICAgICAgICB9CisKKyAgICAgICAgaWYgKGNvbmZpZy5tQ2FwdHVyZUZwcyAhPSBtQ29uZmlnLm1DYXB0dXJlRnBzIHx8IGNvbmZpZy5tQ29kZWRGcHMgIT0gbUNvbmZpZy5tQ29kZWRGcHMpIHsKKyAgICAgICAgICAgIHN0YXR1c190IHJlcyA9CisgICAgICAgICAgICAgICAgR2V0U3RhdHVzKG1Tb3VyY2UtPnNldFRpbWVMYXBzZUNvbmZpZyhjb25maWcubUNvZGVkRnBzLCBjb25maWcubUNhcHR1cmVGcHMpKTsKKyAgICAgICAgICAgIHN0YXR1cyA8PCAiIHRpbWVMYXBzZSAiIDw8IGNvbmZpZy5tQ2FwdHVyZUZwcyA8PCAiZnBzIGFzICIgPDwgY29uZmlnLm1Db2RlZEZwcyA8PCAiZnBzIjsKKyAgICAgICAgICAgIGlmIChyZXMgIT0gT0spIHsKKyAgICAgICAgICAgICAgICBzdGF0dXMgPDwgIiAoPT4gIiA8PCBhc1N0cmluZyhyZXMpIDw8ICIpIjsKKyAgICAgICAgICAgICAgICBlcnIgPSByZXM7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBtQ29uZmlnLm1DYXB0dXJlRnBzID0gY29uZmlnLm1DYXB0dXJlRnBzOworICAgICAgICAgICAgbUNvbmZpZy5tQ29kZWRGcHMgPSBjb25maWcubUNvZGVkRnBzOworICAgICAgICB9CisKKyAgICAgICAgaWYgKGNvbmZpZy5tU3RhcnRBdFVzICE9IG1Db25maWcubVN0YXJ0QXRVcworICAgICAgICAgICAgICAgIHx8IChjb25maWcubVN0b3BwZWQgIT0gbUNvbmZpZy5tU3RvcHBlZCAmJiAhY29uZmlnLm1TdG9wcGVkKSkgeworICAgICAgICAgICAgc3RhdHVzX3QgcmVzID0gR2V0U3RhdHVzKG1Tb3VyY2UtPnNldFN0YXJ0VGltZVVzKGNvbmZpZy5tU3RhcnRBdFVzKSk7CisgICAgICAgICAgICBzdGF0dXMgPDwgIiBzdGFydCBhdCAiIDw8IGNvbmZpZy5tU3RhcnRBdFVzIDw8ICJ1cyI7CisgICAgICAgICAgICBpZiAocmVzICE9IE9LKSB7CisgICAgICAgICAgICAgICAgc3RhdHVzIDw8ICIgKD0+ICIgPDwgYXNTdHJpbmcocmVzKSA8PCAiKSI7CisgICAgICAgICAgICAgICAgZXJyID0gcmVzOworICAgICAgICAgICAgfQorICAgICAgICAgICAgbUNvbmZpZy5tU3RhcnRBdFVzID0gY29uZmlnLm1TdGFydEF0VXM7CisgICAgICAgICAgICBtQ29uZmlnLm1TdG9wcGVkID0gY29uZmlnLm1TdG9wcGVkOworICAgICAgICB9CisKKyAgICAgICAgLy8gc3VzcGVuZC1yZXN1bWUKKyAgICAgICAgaWYgKGNvbmZpZy5tU3VzcGVuZGVkICE9IG1Db25maWcubVN1c3BlbmRlZCkgeworICAgICAgICAgICAgc3RhdHVzX3QgcmVzID0gR2V0U3RhdHVzKG1Tb3VyY2UtPnNldFN1c3BlbmQoY29uZmlnLm1TdXNwZW5kZWQsIGNvbmZpZy5tU3VzcGVuZEF0VXMpKTsKKyAgICAgICAgICAgIHN0YXR1cyA8PCAiICIgPDwgKGNvbmZpZy5tU3VzcGVuZGVkID8gInN1c3BlbmQiIDogInJlc3VtZSIpCisgICAgICAgICAgICAgICAgICAgIDw8ICIgYXQgIiA8PCBjb25maWcubVN1c3BlbmRBdFVzIDw8ICJ1cyI7CisgICAgICAgICAgICBpZiAocmVzICE9IE9LKSB7CisgICAgICAgICAgICAgICAgc3RhdHVzIDw8ICIgKD0+ICIgPDwgYXNTdHJpbmcocmVzKSA8PCAiKSI7CisgICAgICAgICAgICAgICAgZXJyID0gcmVzOworICAgICAgICAgICAgfQorICAgICAgICAgICAgbUNvbmZpZy5tU3VzcGVuZGVkID0gY29uZmlnLm1TdXNwZW5kZWQ7CisgICAgICAgICAgICBtQ29uZmlnLm1TdXNwZW5kQXRVcyA9IGNvbmZpZy5tU3VzcGVuZEF0VXM7CisgICAgICAgIH0KKworICAgICAgICBpZiAoY29uZmlnLm1TdG9wcGVkICE9IG1Db25maWcubVN0b3BwZWQgJiYgY29uZmlnLm1TdG9wcGVkKSB7CisgICAgICAgICAgICBzdGF0dXNfdCByZXMgPSBHZXRTdGF0dXMobVNvdXJjZS0+c2V0U3RvcFRpbWVVcyhjb25maWcubVN0b3BBdFVzKSk7CisgICAgICAgICAgICBzdGF0dXMgPDwgIiBzdG9wIGF0ICIgPDwgY29uZmlnLm1TdG9wQXRVcyA8PCAidXMiOworICAgICAgICAgICAgaWYgKHJlcyAhPSBPSykgeworICAgICAgICAgICAgICAgIHN0YXR1cyA8PCAiICg9PiAiIDw8IGFzU3RyaW5nKHJlcykgPDwgIikiOworICAgICAgICAgICAgICAgIGVyciA9IHJlczsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgc3RhdHVzIDw8ICIgZGVsYXlVcyI7CisgICAgICAgICAgICAgICAgcmVzID0gR2V0U3RhdHVzKG1Tb3VyY2UtPmdldFN0b3BUaW1lT2Zmc2V0VXMoJmNvbmZpZy5tSW5wdXREZWxheVVzKSk7CisgICAgICAgICAgICAgICAgaWYgKHJlcyAhPSBPSykgeworICAgICAgICAgICAgICAgICAgICBzdGF0dXMgPDwgIiAoPT4gIiA8PCBhc1N0cmluZyhyZXMpIDw8ICIpIjsKKyAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICBzdGF0dXMgPDwgIj0iIDw8IGNvbmZpZy5tSW5wdXREZWxheVVzIDw8ICJ1cyI7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIG1Db25maWcubUlucHV0RGVsYXlVcyA9IGNvbmZpZy5tSW5wdXREZWxheVVzOworICAgICAgICAgICAgfQorICAgICAgICAgICAgbUNvbmZpZy5tU3RvcEF0VXMgPSBjb25maWcubVN0b3BBdFVzOworICAgICAgICAgICAgbUNvbmZpZy5tU3RvcHBlZCA9IGNvbmZpZy5tU3RvcHBlZDsKKyAgICAgICAgfQorCisgICAgICAgIC8vIGNvbG9yIGFzcGVjdHMgKGFuZHJvaWQuX2NvbG9yLWFzcGVjdHMpCisKKyAgICAgICAgLy8gY29uc3VtZXIgdXNhZ2UKKyAgICAgICAgQUxPR0QoIklTQ29uZmlnJXMiLCBzdGF0dXMuc3RyKCkuY19zdHIoKSk7CisgICAgICAgIHJldHVybiBlcnI7CisgICAgfQorCitwcml2YXRlOgorICAgIHNwPEJHcmFwaGljQnVmZmVyU291cmNlPiBtU291cmNlOworICAgIHNwPEMyT01YTm9kZT4gbU5vZGU7CisgICAgdWludDMyX3QgbVdpZHRoOworICAgIHVpbnQzMl90IG1IZWlnaHQ7CisgICAgQ29uZmlnIG1Db25maWc7Cit9OworCitjbGFzcyBDb2RlYzJDbGllbnRJbnRlcmZhY2VXcmFwcGVyIDogcHVibGljIEMyQ29tcG9uZW50U3RvcmUgeworICAgIHN0ZDo6c2hhcmVkX3B0cjxDb2RlYzJDbGllbnQ+IG1DbGllbnQ7CisKK3B1YmxpYzoKKyAgICBDb2RlYzJDbGllbnRJbnRlcmZhY2VXcmFwcGVyKHN0ZDo6c2hhcmVkX3B0cjxDb2RlYzJDbGllbnQ+IGNsaWVudCkKKyAgICAgICAgOiBtQ2xpZW50KGNsaWVudCkgeyB9CisKKyAgICB2aXJ0dWFsIH5Db2RlYzJDbGllbnRJbnRlcmZhY2VXcmFwcGVyKCkgPSBkZWZhdWx0OworCisgICAgdmlydHVhbCBjMl9zdGF0dXNfdCBjb25maWdfc20oCisgICAgICAgICAgICBjb25zdCBzdGQ6OnZlY3RvcjxDMlBhcmFtICo+ICZwYXJhbXMsCisgICAgICAgICAgICBzdGQ6OnZlY3RvcjxzdGQ6OnVuaXF1ZV9wdHI8QzJTZXR0aW5nUmVzdWx0Pj4gKmNvbnN0IGZhaWx1cmVzKSB7CisgICAgICAgIHJldHVybiBtQ2xpZW50LT5jb25maWcocGFyYW1zLCBDMl9NQVlfQkxPQ0ssIGZhaWx1cmVzKTsKKyAgICB9OworCisgICAgdmlydHVhbCBjMl9zdGF0dXNfdCBjb3B5QnVmZmVyKAorICAgICAgICAgICAgc3RkOjpzaGFyZWRfcHRyPEMyR3JhcGhpY0J1ZmZlcj4sCisgICAgICAgICAgICBzdGQ6OnNoYXJlZF9wdHI8QzJHcmFwaGljQnVmZmVyPikgeworICAgICAgICByZXR1cm4gQzJfT01JVFRFRDsKKyAgICB9CisKKyAgICB2aXJ0dWFsIGMyX3N0YXR1c190IGNyZWF0ZUNvbXBvbmVudCgKKyAgICAgICAgICAgIEMyU3RyaW5nLCBzdGQ6OnNoYXJlZF9wdHI8QzJDb21wb25lbnQ+ICpjb25zdCBjb21wb25lbnQpIHsKKyAgICAgICAgY29tcG9uZW50LT5yZXNldCgpOworICAgICAgICByZXR1cm4gQzJfT01JVFRFRDsKKyAgICB9CisKKyAgICB2aXJ0dWFsIGMyX3N0YXR1c190IGNyZWF0ZUludGVyZmFjZSgKKyAgICAgICAgICAgIEMyU3RyaW5nLCBzdGQ6OnNoYXJlZF9wdHI8QzJDb21wb25lbnRJbnRlcmZhY2U+ICpjb25zdCBpbnRlcmZhY2UpIHsKKyAgICAgICAgaW50ZXJmYWNlLT5yZXNldCgpOworICAgICAgICByZXR1cm4gQzJfT01JVFRFRDsKKyAgICB9CisKKyAgICB2aXJ0dWFsIGMyX3N0YXR1c190IHF1ZXJ5X3NtKAorICAgICAgICAgICAgY29uc3Qgc3RkOjp2ZWN0b3I8QzJQYXJhbSAqPiAmc3RhY2tQYXJhbXMsCisgICAgICAgICAgICBjb25zdCBzdGQ6OnZlY3RvcjxDMlBhcmFtOjpJbmRleD4gJmhlYXBQYXJhbUluZGljZXMsCisgICAgICAgICAgICBzdGQ6OnZlY3RvcjxzdGQ6OnVuaXF1ZV9wdHI8QzJQYXJhbT4+ICpjb25zdCBoZWFwUGFyYW1zKSBjb25zdCB7CisgICAgICAgIHJldHVybiBtQ2xpZW50LT5xdWVyeShzdGFja1BhcmFtcywgaGVhcFBhcmFtSW5kaWNlcywgQzJfTUFZX0JMT0NLLCBoZWFwUGFyYW1zKTsKKyAgICB9CisKKyAgICB2aXJ0dWFsIGMyX3N0YXR1c190IHF1ZXJ5U3VwcG9ydGVkUGFyYW1zX25iKAorICAgICAgICAgICAgc3RkOjp2ZWN0b3I8c3RkOjpzaGFyZWRfcHRyPEMyUGFyYW1EZXNjcmlwdG9yPj4gKmNvbnN0IHBhcmFtcykgY29uc3QgeworICAgICAgICByZXR1cm4gbUNsaWVudC0+cXVlcnlTdXBwb3J0ZWRQYXJhbXMocGFyYW1zKTsKKyAgICB9CisKKyAgICB2aXJ0dWFsIGMyX3N0YXR1c190IHF1ZXJ5U3VwcG9ydGVkVmFsdWVzX3NtKAorICAgICAgICAgICAgc3RkOjp2ZWN0b3I8QzJGaWVsZFN1cHBvcnRlZFZhbHVlc1F1ZXJ5PiAmZmllbGRzKSBjb25zdCB7CisgICAgICAgIHJldHVybiBtQ2xpZW50LT5xdWVyeVN1cHBvcnRlZFZhbHVlcyhmaWVsZHMsIEMyX01BWV9CTE9DSyk7CisgICAgfQorCisgICAgdmlydHVhbCBDMlN0cmluZyBnZXROYW1lKCkgY29uc3QgeworICAgICAgICByZXR1cm4gbUNsaWVudC0+Z2V0TmFtZSgpOworICAgIH0KKworICAgIHZpcnR1YWwgc3RkOjpzaGFyZWRfcHRyPEMyUGFyYW1SZWZsZWN0b3I+IGdldFBhcmFtUmVmbGVjdG9yKCkgY29uc3QgeworICAgICAgICByZXR1cm4gbUNsaWVudC0+Z2V0UGFyYW1SZWZsZWN0b3IoKTsKKyAgICB9CisKKyAgICB2aXJ0dWFsIHN0ZDo6dmVjdG9yPHN0ZDo6c2hhcmVkX3B0cjxjb25zdCBDMkNvbXBvbmVudDo6VHJhaXRzPj4gbGlzdENvbXBvbmVudHMoKSB7CisgICAgICAgIHJldHVybiBzdGQ6OnZlY3RvcjxzdGQ6OnNoYXJlZF9wdHI8Y29uc3QgQzJDb21wb25lbnQ6OlRyYWl0cz4+KCk7CisgICAgfQorfTsKKworfSAgLy8gbmFtZXNwYWNlCisKKy8vIENDb2RlYzo6Q2xpZW50TGlzdGVuZXIKKworc3RydWN0IENDb2RlYzo6Q2xpZW50TGlzdGVuZXIgOiBwdWJsaWMgQ29kZWMyQ2xpZW50OjpMaXN0ZW5lciB7CisKKyAgICBleHBsaWNpdCBDbGllbnRMaXN0ZW5lcihjb25zdCB3cDxDQ29kZWM+ICZjb2RlYykgOiBtQ29kZWMoY29kZWMpIHt9CisKKyAgICB2aXJ0dWFsIHZvaWQgb25Xb3JrRG9uZSgKKyAgICAgICAgICAgIGNvbnN0IHN0ZDo6d2Vha19wdHI8Q29kZWMyQ2xpZW50OjpDb21wb25lbnQ+JiBjb21wb25lbnQsCisgICAgICAgICAgICBzdGQ6Omxpc3Q8c3RkOjp1bmlxdWVfcHRyPEMyV29yaz4+JiB3b3JrSXRlbXMsCisgICAgICAgICAgICBzaXplX3QgbnVtRGlzY2FyZGVkSW5wdXRCdWZmZXJzKSBvdmVycmlkZSB7CisgICAgICAgICh2b2lkKWNvbXBvbmVudDsKKyAgICAgICAgc3A8Q0NvZGVjPiBjb2RlYyhtQ29kZWMucHJvbW90ZSgpKTsKKyAgICAgICAgaWYgKCFjb2RlYykgeworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIGNvZGVjLT5vbldvcmtEb25lKHdvcmtJdGVtcywgbnVtRGlzY2FyZGVkSW5wdXRCdWZmZXJzKTsKKyAgICB9CisKKyAgICB2aXJ0dWFsIHZvaWQgb25UcmlwcGVkKAorICAgICAgICAgICAgY29uc3Qgc3RkOjp3ZWFrX3B0cjxDb2RlYzJDbGllbnQ6OkNvbXBvbmVudD4mIGNvbXBvbmVudCwKKyAgICAgICAgICAgIGNvbnN0IHN0ZDo6dmVjdG9yPHN0ZDo6c2hhcmVkX3B0cjxDMlNldHRpbmdSZXN1bHQ+PiYgc2V0dGluZ1Jlc3VsdAorICAgICAgICAgICAgKSBvdmVycmlkZSB7CisgICAgICAgIC8vIFRPRE8KKyAgICAgICAgKHZvaWQpY29tcG9uZW50OworICAgICAgICAodm9pZClzZXR0aW5nUmVzdWx0OworICAgIH0KKworICAgIHZpcnR1YWwgdm9pZCBvbkVycm9yKAorICAgICAgICAgICAgY29uc3Qgc3RkOjp3ZWFrX3B0cjxDb2RlYzJDbGllbnQ6OkNvbXBvbmVudD4mIGNvbXBvbmVudCwKKyAgICAgICAgICAgIHVpbnQzMl90IGVycm9yQ29kZSkgb3ZlcnJpZGUgeworICAgICAgICAvLyBUT0RPCisgICAgICAgICh2b2lkKWNvbXBvbmVudDsKKyAgICAgICAgKHZvaWQpZXJyb3JDb2RlOworICAgIH0KKworICAgIHZpcnR1YWwgdm9pZCBvbkRlYXRoKAorICAgICAgICAgICAgY29uc3Qgc3RkOjp3ZWFrX3B0cjxDb2RlYzJDbGllbnQ6OkNvbXBvbmVudD4mIGNvbXBvbmVudCkgb3ZlcnJpZGUgeworICAgICAgICB7IC8vIExvZyB0aGUgZGVhdGggb2YgdGhlIGNvbXBvbmVudC4KKyAgICAgICAgICAgIHN0ZDo6c2hhcmVkX3B0cjxDb2RlYzJDbGllbnQ6OkNvbXBvbmVudD4gY29tcCA9IGNvbXBvbmVudC5sb2NrKCk7CisgICAgICAgICAgICBpZiAoIWNvbXApIHsKKyAgICAgICAgICAgICAgICBBTE9HRSgiQ29kZWMyIGNvbXBvbmVudCBkaWVkLiIpOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBBTE9HRSgiQ29kZWMyIGNvbXBvbmVudCBcIiVzXCIgZGllZC4iLCBjb21wLT5nZXROYW1lKCkuY19zdHIoKSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICAvLyBSZXBvcnQgdG8gTWVkaWFDb2RlYy4KKyAgICAgICAgc3A8Q0NvZGVjPiBjb2RlYyhtQ29kZWMucHJvbW90ZSgpKTsKKyAgICAgICAgaWYgKCFjb2RlYyB8fCAhY29kZWMtPm1DYWxsYmFjaykgeworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIGNvZGVjLT5tQ2FsbGJhY2stPm9uRXJyb3IoREVBRF9PQkpFQ1QsIEFDVElPTl9DT0RFX0ZBVEFMKTsKKyAgICB9CisKKyAgICB2aXJ0dWFsIHZvaWQgb25GcmFtZXNSZW5kZXJlZCgKKyAgICAgICAgICAgIGNvbnN0IHN0ZDo6dmVjdG9yPFJlbmRlcmVkRnJhbWU+JiByZW5kZXJlZEZyYW1lcykgb3ZlcnJpZGUgeworICAgICAgICAvLyBUT0RPCisgICAgICAgICh2b2lkKXJlbmRlcmVkRnJhbWVzOworICAgIH0KKworICAgIHZpcnR1YWwgdm9pZCBvbklucHV0QnVmZmVyRG9uZSgKKyAgICAgICAgICAgIGNvbnN0IHN0ZDo6c2hhcmVkX3B0cjxDMkJ1ZmZlcj4mIGJ1ZmZlcikgb3ZlcnJpZGUgeworICAgICAgICBzcDxDQ29kZWM+IGNvZGVjKG1Db2RlYy5wcm9tb3RlKCkpOworICAgICAgICBpZiAoY29kZWMpIHsKKyAgICAgICAgICAgIGNvZGVjLT5vbklucHV0QnVmZmVyRG9uZShidWZmZXIpOworICAgICAgICB9CisgICAgfQorCitwcml2YXRlOgorICAgIHdwPENDb2RlYz4gbUNvZGVjOworfTsKKworLy8gQ0NvZGVjQ2FsbGJhY2tJbXBsCisKK2NsYXNzIENDb2RlY0NhbGxiYWNrSW1wbCA6IHB1YmxpYyBDQ29kZWNDYWxsYmFjayB7CitwdWJsaWM6CisgICAgZXhwbGljaXQgQ0NvZGVjQ2FsbGJhY2tJbXBsKENDb2RlYyAqY29kZWMpIDogbUNvZGVjKGNvZGVjKSB7fQorICAgIH5DQ29kZWNDYWxsYmFja0ltcGwoKSBvdmVycmlkZSA9IGRlZmF1bHQ7CisKKyAgICB2b2lkIG9uRXJyb3Ioc3RhdHVzX3QgZXJyLCBlbnVtIEFjdGlvbkNvZGUgYWN0aW9uQ29kZSkgb3ZlcnJpZGUgeworICAgICAgICBtQ29kZWMtPm1DYWxsYmFjay0+b25FcnJvcihlcnIsIGFjdGlvbkNvZGUpOworICAgIH0KKworICAgIHZvaWQgb25PdXRwdXRGcmFtZXNSZW5kZXJlZChpbnQ2NF90IG1lZGlhVGltZVVzLCBuc2Vjc190IHJlbmRlclRpbWVOcykgb3ZlcnJpZGUgeworICAgICAgICBtQ29kZWMtPm1DYWxsYmFjay0+b25PdXRwdXRGcmFtZXNSZW5kZXJlZCgKKyAgICAgICAgICAgICAgICB7UmVuZGVyZWRGcmFtZUluZm8obWVkaWFUaW1lVXMsIHJlbmRlclRpbWVOcyl9KTsKKyAgICB9CisKKyAgICB2b2lkIG9uV29ya1F1ZXVlZChib29sIGVvcykgb3ZlcnJpZGUgeworICAgICAgICBtQ29kZWMtPm9uV29ya1F1ZXVlZChlb3MpOworICAgIH0KKworICAgIHZvaWQgb25PdXRwdXRCdWZmZXJzQ2hhbmdlZCgpIG92ZXJyaWRlIHsKKyAgICAgICAgbUNvZGVjLT5tQ2FsbGJhY2stPm9uT3V0cHV0QnVmZmVyc0NoYW5nZWQoKTsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgQ0NvZGVjICptQ29kZWM7Cit9OworCisvLyBDQ29kZWMKKworQ0NvZGVjOjpDQ29kZWMoKQorICAgIDogbUNoYW5uZWwobmV3IENDb2RlY0J1ZmZlckNoYW5uZWwoc3RkOjptYWtlX3NoYXJlZDxDQ29kZWNDYWxsYmFja0ltcGw+KHRoaXMpKSksCisgICAgICBtUXVldWVkV29ya0NvdW50KDApIHsKK30KKworQ0NvZGVjOjp+Q0NvZGVjKCkgeworfQorCitzdGQ6OnNoYXJlZF9wdHI8QnVmZmVyQ2hhbm5lbEJhc2U+IENDb2RlYzo6Z2V0QnVmZmVyQ2hhbm5lbCgpIHsKKyAgICByZXR1cm4gbUNoYW5uZWw7Cit9CisKK3N0YXR1c190IENDb2RlYzo6dHJ5QW5kUmVwb3J0T25FcnJvcihzdGQ6OmZ1bmN0aW9uPHN0YXR1c190KCk+IGpvYikgeworICAgIHN0YXR1c190IGVyciA9IGpvYigpOworICAgIGlmIChlcnIgIT0gQzJfT0spIHsKKyAgICAgICAgbUNhbGxiYWNrLT5vbkVycm9yKGVyciwgQUNUSU9OX0NPREVfRkFUQUwpOworICAgIH0KKyAgICByZXR1cm4gZXJyOworfQorCit2b2lkIENDb2RlYzo6aW5pdGlhdGVBbGxvY2F0ZUNvbXBvbmVudChjb25zdCBzcDxBTWVzc2FnZT4gJm1zZykgeworICAgIGF1dG8gc2V0QWxsb2NhdGluZyA9IFt0aGlzXSB7CisgICAgICAgIE11dGV4ZWQ8U3RhdGU+OjpMb2NrZWQgc3RhdGUobVN0YXRlKTsKKyAgICAgICAgaWYgKHN0YXRlLT5nZXQoKSAhPSBSRUxFQVNFRCkgeworICAgICAgICAgICAgcmV0dXJuIElOVkFMSURfT1BFUkFUSU9OOworICAgICAgICB9CisgICAgICAgIHN0YXRlLT5zZXQoQUxMT0NBVElORyk7CisgICAgICAgIHJldHVybiBPSzsKKyAgICB9OworICAgIGlmICh0cnlBbmRSZXBvcnRPbkVycm9yKHNldEFsbG9jYXRpbmcpICE9IE9LKSB7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBzcDxSZWZCYXNlPiBjb2RlY0luZm87CisgICAgQ0hFQ0sobXNnLT5maW5kT2JqZWN0KCJjb2RlY0luZm8iLCAmY29kZWNJbmZvKSk7CisgICAgLy8gRm9yIENvZGVjIDIuMCBjb21wb25lbnRzLCBjb21wb25lbnROYW1lID09IGNvZGVjSW5mby0+Z2V0Q29kZWNOYW1lKCkuCisKKyAgICBzcDxBTWVzc2FnZT4gYWxsb2NNc2cobmV3IEFNZXNzYWdlKGtXaGF0QWxsb2NhdGUsIHRoaXMpKTsKKyAgICBhbGxvY01zZy0+c2V0T2JqZWN0KCJjb2RlY0luZm8iLCBjb2RlY0luZm8pOworICAgIGFsbG9jTXNnLT5wb3N0KCk7Cit9CisKK3ZvaWQgQ0NvZGVjOjphbGxvY2F0ZShjb25zdCBzcDxNZWRpYUNvZGVjSW5mbz4gJmNvZGVjSW5mbykgeworICAgIGlmIChjb2RlY0luZm8gPT0gbnVsbHB0cikgeworICAgICAgICBtQ2FsbGJhY2stPm9uRXJyb3IoVU5LTk9XTl9FUlJPUiwgQUNUSU9OX0NPREVfRkFUQUwpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIEFMT0dEKCJhbGxvY2F0ZSglcykiLCBjb2RlY0luZm8tPmdldENvZGVjTmFtZSgpKTsKKyAgICBtQ2xpZW50TGlzdGVuZXIucmVzZXQobmV3IENsaWVudExpc3RlbmVyKHRoaXMpKTsKKworICAgIEFTdHJpbmcgY29tcG9uZW50TmFtZSA9IGNvZGVjSW5mby0+Z2V0Q29kZWNOYW1lKCk7CisgICAgc3RkOjpzaGFyZWRfcHRyPENvZGVjMkNsaWVudD4gY2xpZW50OworCisgICAgLy8gc2V0IHVwIHByZWZlcnJlZCBjb21wb25lbnQgc3RvcmUgdG8gYWNjZXNzIHZlbmRvciBzdG9yZSBwYXJhbWV0ZXJzCisgICAgY2xpZW50ID0gQ29kZWMyQ2xpZW50OjpDcmVhdGVGcm9tU2VydmljZSgiZGVmYXVsdCIsIGZhbHNlKTsKKyAgICBpZiAoY2xpZW50KSB7CisgICAgICAgIEFMT0dJKCJzZXR0aW5nIHVwICclcycgYXMgZGVmYXVsdCAodmVuZG9yKSBzdG9yZSIsIGNsaWVudC0+Z2V0SW5zdGFuY2VOYW1lKCkuY19zdHIoKSk7CisgICAgICAgIFNldFByZWZlcnJlZENvZGVjMkNvbXBvbmVudFN0b3JlKAorICAgICAgICAgICAgICAgIHN0ZDo6bWFrZV9zaGFyZWQ8Q29kZWMyQ2xpZW50SW50ZXJmYWNlV3JhcHBlcj4oY2xpZW50KSk7CisgICAgfQorCisgICAgc3RkOjpzaGFyZWRfcHRyPENvZGVjMkNsaWVudDo6Q29tcG9uZW50PiBjb21wID0KKyAgICAgICAgICAgIENvZGVjMkNsaWVudDo6Q3JlYXRlQ29tcG9uZW50QnlOYW1lKAorICAgICAgICAgICAgY29tcG9uZW50TmFtZS5jX3N0cigpLAorICAgICAgICAgICAgbUNsaWVudExpc3RlbmVyLAorICAgICAgICAgICAgJmNsaWVudCk7CisgICAgaWYgKCFjb21wKSB7CisgICAgICAgIEFMT0dFKCJGYWlsZWQgQ3JlYXRlIGNvbXBvbmVudDogJXMiLCBjb21wb25lbnROYW1lLmNfc3RyKCkpOworICAgICAgICBNdXRleGVkPFN0YXRlPjo6TG9ja2VkIHN0YXRlKG1TdGF0ZSk7CisgICAgICAgIHN0YXRlLT5zZXQoUkVMRUFTRUQpOworICAgICAgICBzdGF0ZS51bmxvY2soKTsKKyAgICAgICAgbUNhbGxiYWNrLT5vbkVycm9yKFVOS05PV05fRVJST1IsIEFDVElPTl9DT0RFX0ZBVEFMKTsKKyAgICAgICAgc3RhdGUubG9jaygpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIEFMT0dJKCJDcmVhdGVkIGNvbXBvbmVudCBbJXNdIiwgY29tcG9uZW50TmFtZS5jX3N0cigpKTsKKyAgICBtQ2hhbm5lbC0+c2V0Q29tcG9uZW50KGNvbXApOworICAgIGF1dG8gc2V0QWxsb2NhdGVkID0gW3RoaXMsIGNvbXAsIGNsaWVudF0geworICAgICAgICBNdXRleGVkPFN0YXRlPjo6TG9ja2VkIHN0YXRlKG1TdGF0ZSk7CisgICAgICAgIGlmIChzdGF0ZS0+Z2V0KCkgIT0gQUxMT0NBVElORykgeworICAgICAgICAgICAgc3RhdGUtPnNldChSRUxFQVNFRCk7CisgICAgICAgICAgICByZXR1cm4gVU5LTk9XTl9FUlJPUjsKKyAgICAgICAgfQorICAgICAgICBzdGF0ZS0+c2V0KEFMTE9DQVRFRCk7CisgICAgICAgIHN0YXRlLT5jb21wID0gY29tcDsKKyAgICAgICAgbUNsaWVudCA9IGNsaWVudDsKKyAgICAgICAgcmV0dXJuIE9LOworICAgIH07CisgICAgaWYgKHRyeUFuZFJlcG9ydE9uRXJyb3Ioc2V0QWxsb2NhdGVkKSAhPSBPSykgeworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgLy8gaW5pdGlhbGl6ZSBjb25maWcgaGVyZSBpbiBjYXNlIHNldFBhcmFtZXRlcnMgaXMgY2FsbGVkIHByaW9yIHRvIGNvbmZpZ3VyZQorICAgIE11dGV4ZWQ8Q29uZmlnPjo6TG9ja2VkIGNvbmZpZyhtQ29uZmlnKTsKKyAgICBzdGF0dXNfdCBlcnIgPSBjb25maWctPmluaXRpYWxpemUobUNsaWVudCwgY29tcCk7CisgICAgaWYgKGVyciAhPSBPSykgeworICAgICAgICBBTE9HVygiRmFpbGVkIHRvIGluaXRpYWxpemUgY29uZmlndXJhdGlvbiBzdXBwb3J0Iik7CisgICAgICAgIC8vIFRPRE86IHJlcG9ydCBlcnJvciBvbmNlIHdlIGNvbXBsZXRlIGltcGxlbWVudGF0aW9uLgorICAgIH0KKyAgICBjb25maWctPnF1ZXJ5Q29uZmlndXJhdGlvbihjb21wKTsKKworICAgIG1DYWxsYmFjay0+b25Db21wb25lbnRBbGxvY2F0ZWQoY29tcG9uZW50TmFtZS5jX3N0cigpKTsKK30KKwordm9pZCBDQ29kZWM6OmluaXRpYXRlQ29uZmlndXJlQ29tcG9uZW50KGNvbnN0IHNwPEFNZXNzYWdlPiAmZm9ybWF0KSB7CisgICAgYXV0byBjaGVja0FsbG9jYXRlZCA9IFt0aGlzXSB7CisgICAgICAgIE11dGV4ZWQ8U3RhdGU+OjpMb2NrZWQgc3RhdGUobVN0YXRlKTsKKyAgICAgICAgcmV0dXJuIChzdGF0ZS0+Z2V0KCkgIT0gQUxMT0NBVEVEKSA/IFVOS05PV05fRVJST1IgOiBPSzsKKyAgICB9OworICAgIGlmICh0cnlBbmRSZXBvcnRPbkVycm9yKGNoZWNrQWxsb2NhdGVkKSAhPSBPSykgeworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgc3A8QU1lc3NhZ2U+IG1zZyhuZXcgQU1lc3NhZ2Uoa1doYXRDb25maWd1cmUsIHRoaXMpKTsKKyAgICBtc2ctPnNldE1lc3NhZ2UoImZvcm1hdCIsIGZvcm1hdCk7CisgICAgbXNnLT5wb3N0KCk7Cit9CisKK3ZvaWQgQ0NvZGVjOjpjb25maWd1cmUoY29uc3Qgc3A8QU1lc3NhZ2U+ICZtc2cpIHsKKyAgICBzdGQ6OnNoYXJlZF9wdHI8Q29kZWMyQ2xpZW50OjpDb21wb25lbnQ+IGNvbXA7CisgICAgYXV0byBjaGVja0FsbG9jYXRlZCA9IFt0aGlzLCAmY29tcF0geworICAgICAgICBNdXRleGVkPFN0YXRlPjo6TG9ja2VkIHN0YXRlKG1TdGF0ZSk7CisgICAgICAgIGlmIChzdGF0ZS0+Z2V0KCkgIT0gQUxMT0NBVEVEKSB7CisgICAgICAgICAgICBzdGF0ZS0+c2V0KFJFTEVBU0VEKTsKKyAgICAgICAgICAgIHJldHVybiBVTktOT1dOX0VSUk9SOworICAgICAgICB9CisgICAgICAgIGNvbXAgPSBzdGF0ZS0+Y29tcDsKKyAgICAgICAgcmV0dXJuIE9LOworICAgIH07CisgICAgaWYgKHRyeUFuZFJlcG9ydE9uRXJyb3IoY2hlY2tBbGxvY2F0ZWQpICE9IE9LKSB7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBhdXRvIGRvQ29uZmlnID0gW21zZywgY29tcCwgdGhpc10oKSAtPiBzdGF0dXNfdCB7CisgICAgICAgIEFTdHJpbmcgbWltZTsKKyAgICAgICAgaWYgKCFtc2ctPmZpbmRTdHJpbmcoIm1pbWUiLCAmbWltZSkpIHsKKyAgICAgICAgICAgIHJldHVybiBCQURfVkFMVUU7CisgICAgICAgIH0KKworICAgICAgICBpbnQzMl90IGVuY29kZXI7CisgICAgICAgIGlmICghbXNnLT5maW5kSW50MzIoImVuY29kZXIiLCAmZW5jb2RlcikpIHsKKyAgICAgICAgICAgIGVuY29kZXIgPSBmYWxzZTsKKyAgICAgICAgfQorCisgICAgICAgIC8vIFRPRE86IHJlYWQgZnJvbSBpbnRmKCkKKyAgICAgICAgaWYgKCghZW5jb2RlcikgIT0gKGNvbXAtPmdldE5hbWUoKS5maW5kKCJlbmNvZGVyIikgPT0gc3RkOjpzdHJpbmc6Om5wb3MpKSB7CisgICAgICAgICAgICByZXR1cm4gVU5LTk9XTl9FUlJPUjsKKyAgICAgICAgfQorCisgICAgICAgIGludDMyX3Qgc3RvcmVNZXRhOworICAgICAgICBpZiAoZW5jb2RlcgorICAgICAgICAgICAgICAgICYmIG1zZy0+ZmluZEludDMyKCJhbmRyb2lkLl9pbnB1dC1tZXRhZGF0YS1idWZmZXItdHlwZSIsICZzdG9yZU1ldGEpCisgICAgICAgICAgICAgICAgJiYgc3RvcmVNZXRhICE9IGtNZXRhZGF0YUJ1ZmZlclR5cGVJbnZhbGlkKSB7CisgICAgICAgICAgICBpZiAoc3RvcmVNZXRhICE9IGtNZXRhZGF0YUJ1ZmZlclR5cGVBTldCdWZmZXIpIHsKKyAgICAgICAgICAgICAgICBBTE9HRCgiT25seSBBTlcgYnVmZmVycyBhcmUgc3VwcG9ydGVkIGZvciBsZWdhY3kgbWV0YWRhdGEgbW9kZSIpOworICAgICAgICAgICAgICAgIHJldHVybiBCQURfVkFMVUU7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBtQ2hhbm5lbC0+c2V0TWV0YU1vZGUoQ0NvZGVjQnVmZmVyQ2hhbm5lbDo6TU9ERV9BTlcpOworICAgICAgICB9CisKKyAgICAgICAgc3A8UmVmQmFzZT4gb2JqOworICAgICAgICBzcDxTdXJmYWNlPiBzdXJmYWNlOworICAgICAgICBpZiAobXNnLT5maW5kT2JqZWN0KCJuYXRpdmUtd2luZG93IiwgJm9iaikpIHsKKyAgICAgICAgICAgIHN1cmZhY2UgPSBzdGF0aWNfY2FzdDxTdXJmYWNlICo+KG9iai5nZXQoKSk7CisgICAgICAgICAgICBzZXRTdXJmYWNlKHN1cmZhY2UpOworICAgICAgICB9CisKKyAgICAgICAgTXV0ZXhlZDxDb25maWc+OjpMb2NrZWQgY29uZmlnKG1Db25maWcpOworICAgICAgICBjb25maWctPm1Vc2luZ1N1cmZhY2UgPSBzdXJmYWNlICE9IG51bGxwdHI7CisKKyAgICAgICAgLyoKKyAgICAgICAgICogSGFuZGxlIGlucHV0IHN1cmZhY2UgY29uZmlndXJhdGlvbgorICAgICAgICAgKi8KKyAgICAgICAgaWYgKChjb25maWctPm1Eb21haW4gJiAoQ29uZmlnOjpJU19WSURFTyB8IENvbmZpZzo6SVNfSU1BR0UpKQorICAgICAgICAgICAgICAgICYmIChjb25maWctPm1Eb21haW4gJiBDb25maWc6OklTX0VOQ09ERVIpKSB7CisgICAgICAgICAgICBjb25maWctPm1JU0NvbmZpZy5yZXNldChuZXcgSW5wdXRTdXJmYWNlV3JhcHBlcjo6Q29uZmlne30pOworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGNvbmZpZy0+bUlTQ29uZmlnLT5tTWluRnBzID0gMDsKKyAgICAgICAgICAgICAgICBpbnQ2NF90IHZhbHVlOworICAgICAgICAgICAgICAgIGlmIChtc2ctPmZpbmRJbnQ2NCgicmVwZWF0LXByZXZpb3VzLWZyYW1lLWFmdGVyIiwgJnZhbHVlKSAmJiB2YWx1ZSA+IDApIHsKKyAgICAgICAgICAgICAgICAgICAgY29uZmlnLT5tSVNDb25maWctPm1NaW5GcHMgPSAxZTYgLyB2YWx1ZTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgKHZvaWQpbXNnLT5maW5kRmxvYXQoIm1heC1mcHMtdG8tZW5jb2RlciIsICZjb25maWctPm1JU0NvbmZpZy0+bU1heEZwcyk7CisgICAgICAgICAgICAgICAgY29uZmlnLT5tSVNDb25maWctPm1NaW5BZGp1c3RlZEZwcyA9IDA7CisgICAgICAgICAgICAgICAgY29uZmlnLT5tSVNDb25maWctPm1GaXhlZEFkanVzdGVkRnBzID0gMDsKKyAgICAgICAgICAgICAgICBpZiAobXNnLT5maW5kSW50NjQoIm1heC1wdHMtZ2FwLXRvLWVuY29kZXIiLCAmdmFsdWUpKSB7CisgICAgICAgICAgICAgICAgICAgIGlmICh2YWx1ZSA8IDAgJiYgdmFsdWUgPj0gSU5UMzJfTUlOKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBjb25maWctPm1JU0NvbmZpZy0+bUZpeGVkQWRqdXN0ZWRGcHMgPSAtMWU2IC8gdmFsdWU7CisgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAodmFsdWUgPiAwICYmIHZhbHVlIDw9IElOVDMyX01BWCkgeworICAgICAgICAgICAgICAgICAgICAgICAgY29uZmlnLT5tSVNDb25maWctPm1NaW5BZGp1c3RlZEZwcyA9IDFlNiAvIHZhbHVlOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgZG91YmxlIHZhbHVlOworICAgICAgICAgICAgICAgIGlmIChtc2ctPmZpbmREb3VibGUoInRpbWUtbGFwc2UtZnBzIiwgJnZhbHVlKSkgeworICAgICAgICAgICAgICAgICAgICBjb25maWctPm1JU0NvbmZpZy0+bUNhcHR1cmVGcHMgPSB2YWx1ZTsKKyAgICAgICAgICAgICAgICAgICAgKHZvaWQpbXNnLT5maW5kQXNGbG9hdChLRVlfRlJBTUVfUkFURSwgJmNvbmZpZy0+bUlTQ29uZmlnLT5tQ29kZWRGcHMpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGNvbmZpZy0+bUlTQ29uZmlnLT5tU3VzcGVuZGVkID0gZmFsc2U7CisgICAgICAgICAgICAgICAgY29uZmlnLT5tSVNDb25maWctPm1TdXNwZW5kQXRVcyA9IC0xOworICAgICAgICAgICAgICAgIGludDMyX3QgdmFsdWU7CisgICAgICAgICAgICAgICAgaWYgKG1zZy0+ZmluZEludDMyKCJjcmVhdGUtaW5wdXQtYnVmZmVycy1zdXNwZW5kZWQiLCAmdmFsdWUpICYmIHZhbHVlKSB7CisgICAgICAgICAgICAgICAgICAgIGNvbmZpZy0+bUlTQ29uZmlnLT5tU3VzcGVuZGVkID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICAvKgorICAgICAgICAgKiBIYW5kbGUgZGVzaXJlZCBjb2xvciBmb3JtYXQuCisgICAgICAgICAqLworICAgICAgICBpZiAoKGNvbmZpZy0+bURvbWFpbiAmIChDb25maWc6OklTX1ZJREVPIHwgQ29uZmlnOjpJU19JTUFHRSkpKSB7CisgICAgICAgICAgICBpbnQzMl90IGZvcm1hdCA9IC0xOworICAgICAgICAgICAgaWYgKCFtc2ctPmZpbmRJbnQzMihLRVlfQ09MT1JfRk9STUFULCAmZm9ybWF0KSkgeworICAgICAgICAgICAgICAgIC8qCisgICAgICAgICAgICAgICAgICogQWxzbyBoYW5kbGUgZGVmYXVsdCBjb2xvciBmb3JtYXQgKGVuY29kZXJzIHJlcXVpcmUgY29sb3IgZm9ybWF0LCBzbyB0aGlzIGlzIG9ubHkKKyAgICAgICAgICAgICAgICAgKiBuZWVkZWQgZm9yIGRlY29kZXJzLgorICAgICAgICAgICAgICAgICAqLworICAgICAgICAgICAgICAgIGlmICghKGNvbmZpZy0+bURvbWFpbiAmIENvbmZpZzo6SVNfRU5DT0RFUikpIHsKKyAgICAgICAgICAgICAgICAgICAgZm9ybWF0ID0gKHN1cmZhY2UgPT0gbnVsbHB0cikgPyBDT0xPUl9Gb3JtYXRZVVY0MjBQbGFuYXIgOiBDT0xPUl9Gb3JtYXRTdXJmYWNlOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKGZvcm1hdCA+PSAwKSB7CisgICAgICAgICAgICAgICAgbXNnLT5zZXRJbnQzMigiYW5kcm9pZC5fY29sb3ItZm9ybWF0IiwgZm9ybWF0KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIHN0ZDo6dmVjdG9yPHN0ZDo6dW5pcXVlX3B0cjxDMlBhcmFtPj4gY29uZmlnVXBkYXRlOworICAgICAgICBzdGF0dXNfdCBlcnIgPSBjb25maWctPmdldENvbmZpZ1VwZGF0ZUZyb21TZGtQYXJhbXMoCisgICAgICAgICAgICAgICAgY29tcCwgbXNnLCBDb25maWc6OklTX0NPTkZJRywgQzJfRE9OVF9CTE9DSywgJmNvbmZpZ1VwZGF0ZSk7CisgICAgICAgIGlmIChlcnIgIT0gT0spIHsKKyAgICAgICAgICAgIEFMT0dXKCJmYWlsZWQgdG8gY29udmVydCBjb25maWd1cmF0aW9uIHRvIGMyIHBhcmFtcyIpOworICAgICAgICB9CisgICAgICAgIGVyciA9IGNvbmZpZy0+c2V0UGFyYW1ldGVycyhjb21wLCBjb25maWdVcGRhdGUsIEMyX0RPTlRfQkxPQ0spOworICAgICAgICBpZiAoZXJyICE9IE9LKSB7CisgICAgICAgICAgICBBTE9HVygiZmFpbGVkIHRvIGNvbmZpZ3VyZSBjMiBwYXJhbXMiKTsKKyAgICAgICAgICAgIHJldHVybiBlcnI7CisgICAgICAgIH0KKworICAgICAgICBzdGQ6OnZlY3RvcjxzdGQ6OnVuaXF1ZV9wdHI8QzJQYXJhbT4+IHBhcmFtczsKKyAgICAgICAgQzJTdHJlYW1Vc2FnZVR1bmluZzo6aW5wdXQgdXNhZ2UoMHUsIDB1KTsKKyAgICAgICAgQzJTdHJlYW1NYXhCdWZmZXJTaXplSW5mbzo6aW5wdXQgbWF4SW5wdXRTaXplKDB1LCAwdSk7CisKKyAgICAgICAgc3RkOjppbml0aWFsaXplcl9saXN0PEMyUGFyYW06OkluZGV4PiBpbmRpY2VzIHsKKyAgICAgICAgfTsKKyAgICAgICAgYzJfc3RhdHVzX3QgYzJlcnIgPSBjb21wLT5xdWVyeSgKKyAgICAgICAgICAgICAgICB7ICZ1c2FnZSwgJm1heElucHV0U2l6ZSB9LAorICAgICAgICAgICAgICAgIGluZGljZXMsCisgICAgICAgICAgICAgICAgQzJfRE9OVF9CTE9DSywKKyAgICAgICAgICAgICAgICAmcGFyYW1zKTsKKyAgICAgICAgaWYgKGMyZXJyICE9IEMyX09LICYmIGMyZXJyICE9IEMyX0JBRF9JTkRFWCkgeworICAgICAgICAgICAgQUxPR0UoIkZhaWxlZCB0byBxdWVyeSBjb21wb25lbnQgaW50ZXJmYWNlOiAlZCIsIGMyZXJyKTsKKyAgICAgICAgICAgIHJldHVybiBVTktOT1dOX0VSUk9SOworICAgICAgICB9CisgICAgICAgIGlmIChwYXJhbXMuc2l6ZSgpICE9IGluZGljZXMuc2l6ZSgpKSB7CisgICAgICAgICAgICBBTE9HRSgiQ29tcG9uZW50IHJldHVybnMgd3JvbmcgbnVtYmVyIG9mIHBhcmFtczogZXhwZWN0ZWQgJXp1IGFjdHVhbCAlenUiLAorICAgICAgICAgICAgICAgICAgICBpbmRpY2VzLnNpemUoKSwgcGFyYW1zLnNpemUoKSk7CisgICAgICAgICAgICByZXR1cm4gVU5LTk9XTl9FUlJPUjsKKyAgICAgICAgfQorICAgICAgICBpZiAodXNhZ2UgJiYgKHVzYWdlLnZhbHVlICYgQzJNZW1vcnlVc2FnZTo6Q1BVX1JFQUQpKSB7CisgICAgICAgICAgICBjb25maWctPm1JbnB1dEZvcm1hdC0+c2V0SW50MzIoInVzaW5nLXN3LXJlYWQtb2Z0ZW4iLCB0cnVlKTsKKyAgICAgICAgfQorCisgICAgICAgIC8vIE5PVEU6IHdlIGRvbid0IGJsaW5kbHkgdXNlIGNsaWVudCBzcGVjaWZpZWQgaW5wdXQgc2l6ZSBpZiBzcGVjaWZpZWQgYXMgY2xpZW50cworICAgICAgICAvLyBhdCB0aW1lcyBzcGVjaWZ5IHRvbyBzbWFsbCBzaXplLiBJbnN0ZWFkLCBtaW1pYyB0aGUgYmVoYXZpb3IgZnJvbSBPTVgsIHdoZXJlIHRoZQorICAgICAgICAvLyBjbGllbnQgc3BlY2lmaWVkIHNpemUgaXMgb25seSB1c2VkIHRvIGFzayBmb3IgYmlnZ2VyIGJ1ZmZlcnMgdGhhbiBjb21wb25lbnQgc3VnZ2VzdGVkCisgICAgICAgIC8vIHNpemUuCisgICAgICAgIGludDMyX3QgY2xpZW50SW5wdXRTaXplID0gMDsKKyAgICAgICAgYm9vbCBjbGllbnRTcGVjaWZpZWRJbnB1dFNpemUgPQorICAgICAgICAgICAgbXNnLT5maW5kSW50MzIoS0VZX01BWF9JTlBVVF9TSVpFLCAmY2xpZW50SW5wdXRTaXplKSAmJiBjbGllbnRJbnB1dFNpemUgPiAwOworICAgICAgICAvLyBURU1QOiBlbmZvcmNlIG1pbmltdW0gYnVmZmVyIHNpemUgb2YgMU1CIGZvciB2aWRlbyBkZWNvZGVycworICAgICAgICAvLyBhbmQgMTZLIC8gNEsgZm9yIGF1ZGlvIGVuY29kZXJzL2RlY29kZXJzCisgICAgICAgIGlmIChtYXhJbnB1dFNpemUudmFsdWUgPT0gMCkgeworICAgICAgICAgICAgaWYgKGNvbmZpZy0+bURvbWFpbiAmIENvbmZpZzo6SVNfQVVESU8pIHsKKyAgICAgICAgICAgICAgICBtYXhJbnB1dFNpemUudmFsdWUgPSBlbmNvZGVyID8gMTYzODQgOiA0MDk2OworICAgICAgICAgICAgfSBlbHNlIGlmICghZW5jb2RlcikgeworICAgICAgICAgICAgICAgIG1heElucHV0U2l6ZS52YWx1ZSA9IDEwNDg1NzZ1OworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgLy8gdmVyaWZ5IHRoYXQgQ1NEIGZpdHMgaW50byB0aGlzIHNpemUgKGlmIGRlZmluZWQpCisgICAgICAgIGlmICgoY29uZmlnLT5tRG9tYWluICYgQ29uZmlnOjpJU19ERUNPREVSKSAmJiBtYXhJbnB1dFNpemUudmFsdWUgPiAwKSB7CisgICAgICAgICAgICBzcDxBQnVmZmVyPiBjc2Q7CisgICAgICAgICAgICBmb3IgKHNpemVfdCBpeCA9IDA7IG1zZy0+ZmluZEJ1ZmZlcihTdHJpbmdQcmludGYoImNzZC0lenUiLCBpeCkuY19zdHIoKSwgJmNzZCk7ICsraXgpIHsKKyAgICAgICAgICAgICAgICBpZiAoY3NkICYmIGNzZC0+c2l6ZSgpID4gbWF4SW5wdXRTaXplLnZhbHVlKSB7CisgICAgICAgICAgICAgICAgICAgIG1heElucHV0U2l6ZS52YWx1ZSA9IGNzZC0+c2l6ZSgpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIC8vIFRPRE86IGRvIHRoaXMgYmFzZWQgb24gY29tcG9uZW50IHJlcXVpcmluZyBsaW5lYXIgYWxsb2NhdG9yIGZvciBpbnB1dAorICAgICAgICBpZiAoKGNvbmZpZy0+bURvbWFpbiAmIENvbmZpZzo6SVNfREVDT0RFUikgfHwgKGNvbmZpZy0+bURvbWFpbiAmIENvbmZpZzo6SVNfQVVESU8pKSB7CisgICAgICAgICAgICBpZiAoY2xpZW50U3BlY2lmaWVkSW5wdXRTaXplKSB7CisgICAgICAgICAgICAgICAgLy8gV2FybiB0aGF0IHdlJ3JlIG92ZXJyaWRpbmcgY2xpZW50J3MgbWF4IGlucHV0IHNpemUgaWYgbmVjZXNzYXJ5LgorICAgICAgICAgICAgICAgIGlmICgodWludDMyX3QpY2xpZW50SW5wdXRTaXplIDwgbWF4SW5wdXRTaXplLnZhbHVlKSB7CisgICAgICAgICAgICAgICAgICAgIEFMT0dEKCJjbGllbnQgcmVxdWVzdGVkIG1heCBpbnB1dCBzaXplICVkLCB3aGljaCBpcyBzbWFsbGVyIHRoYW4gIgorICAgICAgICAgICAgICAgICAgICAgICAgICAid2hhdCBjb21wb25lbnQgcmVjb21tZW5kZWQgKCV1KTsgb3ZlcnJpZGluZyB3aXRoIGNvbXBvbmVudCAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICJyZWNvbW1lbmRhdGlvbi4iLCBjbGllbnRJbnB1dFNpemUsIG1heElucHV0U2l6ZS52YWx1ZSk7CisgICAgICAgICAgICAgICAgICAgIEFMT0dXKCJUaGlzIGJlaGF2aW9yIGlzIHN1YmplY3QgdG8gY2hhbmdlLiBJdCBpcyByZWNvbW1lbmRlZCB0aGF0ICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgImFwcCBkZXZlbG9wZXJzIGRvdWJsZSBjaGVjayB3aGV0aGVyIHRoZSByZXF1ZXN0ZWQgIgorICAgICAgICAgICAgICAgICAgICAgICAgICAibWF4IGlucHV0IHNpemUgaXMgaW4gcmVhc29uYWJsZSByYW5nZS4iKTsKKyAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICBtYXhJbnB1dFNpemUudmFsdWUgPSBjbGllbnRJbnB1dFNpemU7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgLy8gUGFzcyBtYXggaW5wdXQgc2l6ZSBvbiBpbnB1dCBmb3JtYXQgdG8gdGhlIGJ1ZmZlciBjaGFubmVsIChpZiBzdXBwbGllZCBieSB0aGUKKyAgICAgICAgICAgIC8vIGNvbXBvbmVudCBvciBieSBhIGRlZmF1bHQpCisgICAgICAgICAgICBpZiAobWF4SW5wdXRTaXplLnZhbHVlKSB7CisgICAgICAgICAgICAgICAgY29uZmlnLT5tSW5wdXRGb3JtYXQtPnNldEludDMyKAorICAgICAgICAgICAgICAgICAgICAgICAgS0VZX01BWF9JTlBVVF9TSVpFLAorICAgICAgICAgICAgICAgICAgICAgICAgKGludDMyX3QpKGMyX21pbihtYXhJbnB1dFNpemUudmFsdWUsIHVpbnQzMl90KElOVDMyX01BWCkpKSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBpZiAoKGNvbmZpZy0+bURvbWFpbiAmIChDb25maWc6OklTX1ZJREVPIHwgQ29uZmlnOjpJU19JTUFHRSkpKSB7CisgICAgICAgICAgICAvLyBwcm9wYWdhdGUgSERSIHN0YXRpYyBpbmZvIHRvIG91dHB1dCBmb3JtYXQgZm9yIGJvdGggZW5jb2RlcnMgYW5kIGRlY29kZXJzCisgICAgICAgICAgICAvLyBpZiBjb21wb25lbnQgc3VwcG9ydHMgdGhpcyBpbmZvLCB3ZSB3aWxsIHVwZGF0ZSBmcm9tIGNvbXBvbmVudCwgYnV0IG9ubHkgdGhlIHJhdyBwb3J0LAorICAgICAgICAgICAgLy8gc28gZG9uJ3QgcHJvcGFnYXRlIGlmIGNvbXBvbmVudCBhbHJlYWR5IGZpbGxlZCBpdCBpbi4KKyAgICAgICAgICAgIHNwPEFCdWZmZXI+IGhkckluZm87CisgICAgICAgICAgICBpZiAobXNnLT5maW5kQnVmZmVyKEtFWV9IRFJfU1RBVElDX0lORk8sICZoZHJJbmZvKQorICAgICAgICAgICAgICAgICAgICAmJiAhY29uZmlnLT5tT3V0cHV0Rm9ybWF0LT5maW5kQnVmZmVyKEtFWV9IRFJfU1RBVElDX0lORk8sICZoZHJJbmZvKSkgeworICAgICAgICAgICAgICAgIGNvbmZpZy0+bU91dHB1dEZvcm1hdC0+c2V0QnVmZmVyKEtFWV9IRFJfU1RBVElDX0lORk8sIGhkckluZm8pOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICAvLyBTZXQgZGVzaXJlZCBjb2xvciBmb3JtYXQgZnJvbSBjb25maWd1cmF0aW9uIHBhcmFtZXRlcgorICAgICAgICAgICAgaW50MzJfdCBmb3JtYXQ7CisgICAgICAgICAgICBpZiAobXNnLT5maW5kSW50MzIoImFuZHJvaWQuX2NvbG9yLWZvcm1hdCIsICZmb3JtYXQpKSB7CisgICAgICAgICAgICAgICAgaWYgKGNvbmZpZy0+bURvbWFpbiAmIENvbmZpZzo6SVNfRU5DT0RFUikgeworICAgICAgICAgICAgICAgICAgICBjb25maWctPm1JbnB1dEZvcm1hdC0+c2V0SW50MzIoS0VZX0NPTE9SX0ZPUk1BVCwgZm9ybWF0KTsKKyAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICBjb25maWctPm1PdXRwdXRGb3JtYXQtPnNldEludDMyKEtFWV9DT0xPUl9GT1JNQVQsIGZvcm1hdCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgLy8gcHJvcGFnYXRlIGVuY29kZXIgZGVsYXkgYW5kIHBhZGRpbmcgdG8gb3V0cHV0IGZvcm1hdAorICAgICAgICBpZiAoKGNvbmZpZy0+bURvbWFpbiAmIENvbmZpZzo6SVNfREVDT0RFUikgJiYgKGNvbmZpZy0+bURvbWFpbiAmIENvbmZpZzo6SVNfQVVESU8pKSB7CisgICAgICAgICAgICBpbnQgZGVsYXkgPSAwOworICAgICAgICAgICAgaWYgKG1zZy0+ZmluZEludDMyKCJlbmNvZGVyLWRlbGF5IiwgJmRlbGF5KSkgeworICAgICAgICAgICAgICAgIGNvbmZpZy0+bU91dHB1dEZvcm1hdC0+c2V0SW50MzIoImVuY29kZXItZGVsYXkiLCBkZWxheSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpbnQgcGFkZGluZyA9IDA7CisgICAgICAgICAgICBpZiAobXNnLT5maW5kSW50MzIoImVuY29kZXItcGFkZGluZyIsICZwYWRkaW5nKSkgeworICAgICAgICAgICAgICAgIGNvbmZpZy0+bU91dHB1dEZvcm1hdC0+c2V0SW50MzIoImVuY29kZXItcGFkZGluZyIsIHBhZGRpbmcpOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgLy8gc2V0IGNoYW5uZWwtbWFzaworICAgICAgICBpZiAoY29uZmlnLT5tRG9tYWluICYgQ29uZmlnOjpJU19BVURJTykgeworICAgICAgICAgICAgaW50MzJfdCBtYXNrOworICAgICAgICAgICAgaWYgKG1zZy0+ZmluZEludDMyKEtFWV9DSEFOTkVMX01BU0ssICZtYXNrKSkgeworICAgICAgICAgICAgICAgIGlmIChjb25maWctPm1Eb21haW4gJiBDb25maWc6OklTX0VOQ09ERVIpIHsKKyAgICAgICAgICAgICAgICAgICAgY29uZmlnLT5tSW5wdXRGb3JtYXQtPnNldEludDMyKEtFWV9DSEFOTkVMX01BU0ssIG1hc2spOworICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIGNvbmZpZy0+bU91dHB1dEZvcm1hdC0+c2V0SW50MzIoS0VZX0NIQU5ORUxfTUFTSywgbWFzayk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgQUxPR0QoInNldHVwIGZvcm1hdHMgaW5wdXQ6ICVzIGFuZCBvdXRwdXQ6ICVzIiwKKyAgICAgICAgICAgICAgICBjb25maWctPm1JbnB1dEZvcm1hdC0+ZGVidWdTdHJpbmcoKS5jX3N0cigpLAorICAgICAgICAgICAgICAgIGNvbmZpZy0+bU91dHB1dEZvcm1hdC0+ZGVidWdTdHJpbmcoKS5jX3N0cigpKTsKKyAgICAgICAgcmV0dXJuIE9LOworICAgIH07CisgICAgaWYgKHRyeUFuZFJlcG9ydE9uRXJyb3IoZG9Db25maWcpICE9IE9LKSB7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBNdXRleGVkPENvbmZpZz46OkxvY2tlZCBjb25maWcobUNvbmZpZyk7CisKKyAgICBtQ2FsbGJhY2stPm9uQ29tcG9uZW50Q29uZmlndXJlZChjb25maWctPm1JbnB1dEZvcm1hdCwgY29uZmlnLT5tT3V0cHV0Rm9ybWF0KTsKK30KKwordm9pZCBDQ29kZWM6OmluaXRpYXRlQ3JlYXRlSW5wdXRTdXJmYWNlKCkgeworICAgIHN0YXR1c190IGVyciA9IFt0aGlzXSB7CisgICAgICAgIE11dGV4ZWQ8U3RhdGU+OjpMb2NrZWQgc3RhdGUobVN0YXRlKTsKKyAgICAgICAgaWYgKHN0YXRlLT5nZXQoKSAhPSBBTExPQ0FURUQpIHsKKyAgICAgICAgICAgIHJldHVybiBVTktOT1dOX0VSUk9SOworICAgICAgICB9CisgICAgICAgIC8vIFRPRE86IHJlYWQgaXQgZnJvbSBpbnRmKCkgcHJvcGVybHkuCisgICAgICAgIGlmIChzdGF0ZS0+Y29tcC0+Z2V0TmFtZSgpLmZpbmQoImVuY29kZXIiKSA9PSBzdGQ6OnN0cmluZzo6bnBvcykgeworICAgICAgICAgICAgcmV0dXJuIElOVkFMSURfT1BFUkFUSU9OOworICAgICAgICB9CisgICAgICAgIHJldHVybiBPSzsKKyAgICB9KCk7CisgICAgaWYgKGVyciAhPSBPSykgeworICAgICAgICBtQ2FsbGJhY2stPm9uSW5wdXRTdXJmYWNlQ3JlYXRpb25GYWlsZWQoZXJyKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIChuZXcgQU1lc3NhZ2Uoa1doYXRDcmVhdGVJbnB1dFN1cmZhY2UsIHRoaXMpKS0+cG9zdCgpOworfQorCit2b2lkIENDb2RlYzo6Y3JlYXRlSW5wdXRTdXJmYWNlKCkgeworICAgIHN0YXR1c190IGVycjsKKyAgICBzcDxJR3JhcGhpY0J1ZmZlclByb2R1Y2VyPiBidWZmZXJQcm9kdWNlcjsKKworICAgIHNwPEFNZXNzYWdlPiBpbnB1dEZvcm1hdDsKKyAgICBzcDxBTWVzc2FnZT4gb3V0cHV0Rm9ybWF0OworICAgIHsKKyAgICAgICAgTXV0ZXhlZDxDb25maWc+OjpMb2NrZWQgY29uZmlnKG1Db25maWcpOworICAgICAgICBpbnB1dEZvcm1hdCA9IGNvbmZpZy0+bUlucHV0Rm9ybWF0OworICAgICAgICBvdXRwdXRGb3JtYXQgPSBjb25maWctPm1PdXRwdXRGb3JtYXQ7CisgICAgfQorCisgICAgc3RkOjpzaGFyZWRfcHRyPFBlcnNpc3RlbnRTdXJmYWNlPiBwZXJzaXN0ZW50U3VyZmFjZShDcmVhdGVJbnB1dFN1cmZhY2UoKSk7CisKKyAgICBpZiAocGVyc2lzdGVudFN1cmZhY2UtPmdldEhpZGxUYXJnZXQoKSkgeworICAgICAgICBzcDxJSW5wdXRTdXJmYWNlPiBpbnB1dFN1cmZhY2UgPSBJSW5wdXRTdXJmYWNlOjpjYXN0RnJvbSgKKyAgICAgICAgICAgICAgICBwZXJzaXN0ZW50U3VyZmFjZS0+Z2V0SGlkbFRhcmdldCgpKTsKKyAgICAgICAgaWYgKCFpbnB1dFN1cmZhY2UpIHsKKyAgICAgICAgICAgIEFMT0dFKCJDb3JydXB0ZWQgaW5wdXQgc3VyZmFjZSIpOworICAgICAgICAgICAgbUNhbGxiYWNrLT5vbklucHV0U3VyZmFjZUNyZWF0aW9uRmFpbGVkKFVOS05PV05fRVJST1IpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIGVyciA9IHNldHVwSW5wdXRTdXJmYWNlKHN0ZDo6bWFrZV9zaGFyZWQ8QzJJbnB1dFN1cmZhY2VXcmFwcGVyPigKKyAgICAgICAgICAgICAgICBzdGQ6Om1ha2Vfc2hhcmVkPENvZGVjMkNsaWVudDo6SW5wdXRTdXJmYWNlPihpbnB1dFN1cmZhY2UpKSk7CisgICAgICAgIGJ1ZmZlclByb2R1Y2VyID0gbmV3IEgyQkdyYXBoaWNCdWZmZXJQcm9kdWNlcihpbnB1dFN1cmZhY2UpOworICAgIH0gZWxzZSB7CisgICAgICAgIGludDMyX3Qgd2lkdGggPSAwOworICAgICAgICAodm9pZClvdXRwdXRGb3JtYXQtPmZpbmRJbnQzMigid2lkdGgiLCAmd2lkdGgpOworICAgICAgICBpbnQzMl90IGhlaWdodCA9IDA7CisgICAgICAgICh2b2lkKW91dHB1dEZvcm1hdC0+ZmluZEludDMyKCJoZWlnaHQiLCAmaGVpZ2h0KTsKKyAgICAgICAgZXJyID0gc2V0dXBJbnB1dFN1cmZhY2Uoc3RkOjptYWtlX3NoYXJlZDxHcmFwaGljQnVmZmVyU291cmNlV3JhcHBlcj4oCisgICAgICAgICAgICAgICAgcGVyc2lzdGVudFN1cmZhY2UtPmdldEJ1ZmZlclNvdXJjZSgpLCB3aWR0aCwgaGVpZ2h0KSk7CisgICAgICAgIGJ1ZmZlclByb2R1Y2VyID0gcGVyc2lzdGVudFN1cmZhY2UtPmdldEJ1ZmZlclByb2R1Y2VyKCk7CisgICAgfQorCisgICAgaWYgKGVyciAhPSBPSykgeworICAgICAgICBBTE9HRSgiRmFpbGVkIHRvIHNldCB1cCBpbnB1dCBzdXJmYWNlOiAlZCIsIGVycik7CisgICAgICAgIG1DYWxsYmFjay0+b25JbnB1dFN1cmZhY2VDcmVhdGlvbkZhaWxlZChlcnIpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgbUNhbGxiYWNrLT5vbklucHV0U3VyZmFjZUNyZWF0ZWQoCisgICAgICAgICAgICBpbnB1dEZvcm1hdCwKKyAgICAgICAgICAgIG91dHB1dEZvcm1hdCwKKyAgICAgICAgICAgIG5ldyBCdWZmZXJQcm9kdWNlcldyYXBwZXIoYnVmZmVyUHJvZHVjZXIpKTsKK30KKworc3RhdHVzX3QgQ0NvZGVjOjpzZXR1cElucHV0U3VyZmFjZShjb25zdCBzdGQ6OnNoYXJlZF9wdHI8SW5wdXRTdXJmYWNlV3JhcHBlcj4gJnN1cmZhY2UpIHsKKyAgICBNdXRleGVkPENvbmZpZz46OkxvY2tlZCBjb25maWcobUNvbmZpZyk7CisgICAgY29uZmlnLT5tVXNpbmdTdXJmYWNlID0gdHJ1ZTsKKworICAgIC8vIHdlIGFyZSBub3cgdXNpbmcgc3VyZmFjZSAtIGFwcGx5IGRlZmF1bHQgY29sb3IgYXNwZWN0cyB0byBpbnB1dCBmb3JtYXQgLSBhcyB3ZWxsIGFzCisgICAgLy8gZ2V0IGRhdGFzcGFjZQorICAgIGJvb2wgaW5wdXRGb3JtYXRDaGFuZ2VkID0gY29uZmlnLT51cGRhdGVGb3JtYXRzKGNvbmZpZy0+SVNfSU5QVVQpOworICAgIEFMT0dEKCJpbnB1dCBmb3JtYXQgJXMgdG8gJXMiLAorICAgICAgICAgICAgaW5wdXRGb3JtYXRDaGFuZ2VkID8gImNoYW5nZWQiIDogInVuY2hhbmdlZCIsCisgICAgICAgICAgICBjb25maWctPm1JbnB1dEZvcm1hdC0+ZGVidWdTdHJpbmcoKS5jX3N0cigpKTsKKworICAgIC8vIGNvbmZpZ3VyZSBkYXRhc3BhY2UKKyAgICBzdGF0aWNfYXNzZXJ0KHNpemVvZihpbnQzMl90KSA9PSBzaXplb2YoYW5kcm9pZF9kYXRhc3BhY2UpLCAiZGF0YXNwYWNlIHNpemUgbWlzbWF0Y2giKTsKKyAgICBhbmRyb2lkX2RhdGFzcGFjZSBkYXRhU3BhY2UgPSBIQUxfREFUQVNQQUNFX1VOS05PV047CisgICAgKHZvaWQpY29uZmlnLT5tSW5wdXRGb3JtYXQtPmZpbmRJbnQzMigiYW5kcm9pZC5fZGF0YXNwYWNlIiwgKGludDMyX3QqKSZkYXRhU3BhY2UpOworICAgIHN1cmZhY2UtPnNldERhdGFTcGFjZShkYXRhU3BhY2UpOworCisgICAgc3RhdHVzX3QgZXJyID0gbUNoYW5uZWwtPnNldElucHV0U3VyZmFjZShzdXJmYWNlKTsKKyAgICBpZiAoZXJyICE9IE9LKSB7CisgICAgICAgIC8vIHVuZG8gaW5wdXQgZm9ybWF0IHVwZGF0ZQorICAgICAgICBjb25maWctPm1Vc2luZ1N1cmZhY2UgPSBmYWxzZTsKKyAgICAgICAgKHZvaWQpY29uZmlnLT51cGRhdGVGb3JtYXRzKGNvbmZpZy0+SVNfSU5QVVQpOworICAgICAgICByZXR1cm4gZXJyOworICAgIH0KKyAgICBjb25maWctPm1JbnB1dFN1cmZhY2UgPSBzdXJmYWNlOworCisgICAgaWYgKGNvbmZpZy0+bUlTQ29uZmlnKSB7CisgICAgICAgIHN1cmZhY2UtPmNvbmZpZ3VyZSgqY29uZmlnLT5tSVNDb25maWcpOworICAgIH0gZWxzZSB7CisgICAgICAgIEFMT0dEKCJJU0NvbmZpZzogbm8gY29uZmlndXJhdGlvbiIpOworICAgIH0KKworICAgIHJldHVybiBzdXJmYWNlLT5zdGFydCgpOworfQorCit2b2lkIENDb2RlYzo6aW5pdGlhdGVTZXRJbnB1dFN1cmZhY2UoY29uc3Qgc3A8UGVyc2lzdGVudFN1cmZhY2U+ICZzdXJmYWNlKSB7CisgICAgc3A8QU1lc3NhZ2U+IG1zZyA9IG5ldyBBTWVzc2FnZShrV2hhdFNldElucHV0U3VyZmFjZSwgdGhpcyk7CisgICAgbXNnLT5zZXRPYmplY3QoInN1cmZhY2UiLCBzdXJmYWNlKTsKKyAgICBtc2ctPnBvc3QoKTsKK30KKwordm9pZCBDQ29kZWM6OnNldElucHV0U3VyZmFjZShjb25zdCBzcDxQZXJzaXN0ZW50U3VyZmFjZT4gJnN1cmZhY2UpIHsKKyAgICBzcDxBTWVzc2FnZT4gaW5wdXRGb3JtYXQ7CisgICAgc3A8QU1lc3NhZ2U+IG91dHB1dEZvcm1hdDsKKyAgICB7CisgICAgICAgIE11dGV4ZWQ8Q29uZmlnPjo6TG9ja2VkIGNvbmZpZyhtQ29uZmlnKTsKKyAgICAgICAgaW5wdXRGb3JtYXQgPSBjb25maWctPm1JbnB1dEZvcm1hdDsKKyAgICAgICAgb3V0cHV0Rm9ybWF0ID0gY29uZmlnLT5tT3V0cHV0Rm9ybWF0OworICAgIH0KKyAgICBhdXRvIGhpZGxUYXJnZXQgPSBzdXJmYWNlLT5nZXRIaWRsVGFyZ2V0KCk7CisgICAgaWYgKGhpZGxUYXJnZXQpIHsKKyAgICAgICAgc3A8SUlucHV0U3VyZmFjZT4gaW5wdXRTdXJmYWNlID0KKyAgICAgICAgICAgICAgICBJSW5wdXRTdXJmYWNlOjpjYXN0RnJvbShoaWRsVGFyZ2V0KTsKKyAgICAgICAgaWYgKCFpbnB1dFN1cmZhY2UpIHsKKyAgICAgICAgICAgIEFMT0dFKCJGYWlsZWQgdG8gc2V0IGlucHV0IHN1cmZhY2U6IENvcnJ1cHRlZCBzdXJmYWNlLiIpOworICAgICAgICAgICAgbUNhbGxiYWNrLT5vbklucHV0U3VyZmFjZURlY2xpbmVkKFVOS05PV05fRVJST1IpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIHN0YXR1c190IGVyciA9IHNldHVwSW5wdXRTdXJmYWNlKHN0ZDo6bWFrZV9zaGFyZWQ8QzJJbnB1dFN1cmZhY2VXcmFwcGVyPigKKyAgICAgICAgICAgICAgICBzdGQ6Om1ha2Vfc2hhcmVkPENvZGVjMkNsaWVudDo6SW5wdXRTdXJmYWNlPihpbnB1dFN1cmZhY2UpKSk7CisgICAgICAgIGlmIChlcnIgIT0gT0spIHsKKyAgICAgICAgICAgIEFMT0dFKCJGYWlsZWQgdG8gc2V0IHVwIGlucHV0IHN1cmZhY2U6ICVkIiwgZXJyKTsKKyAgICAgICAgICAgIG1DYWxsYmFjay0+b25JbnB1dFN1cmZhY2VEZWNsaW5lZChlcnIpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgfSBlbHNlIHsKKyAgICAgICAgaW50MzJfdCB3aWR0aCA9IDA7CisgICAgICAgICh2b2lkKW91dHB1dEZvcm1hdC0+ZmluZEludDMyKCJ3aWR0aCIsICZ3aWR0aCk7CisgICAgICAgIGludDMyX3QgaGVpZ2h0ID0gMDsKKyAgICAgICAgKHZvaWQpb3V0cHV0Rm9ybWF0LT5maW5kSW50MzIoImhlaWdodCIsICZoZWlnaHQpOworICAgICAgICBzdGF0dXNfdCBlcnIgPSBzZXR1cElucHV0U3VyZmFjZShzdGQ6Om1ha2Vfc2hhcmVkPEdyYXBoaWNCdWZmZXJTb3VyY2VXcmFwcGVyPigKKyAgICAgICAgICAgICAgICBzdXJmYWNlLT5nZXRCdWZmZXJTb3VyY2UoKSwgd2lkdGgsIGhlaWdodCkpOworICAgICAgICBpZiAoZXJyICE9IE9LKSB7CisgICAgICAgICAgICBBTE9HRSgiRmFpbGVkIHRvIHNldCB1cCBpbnB1dCBzdXJmYWNlOiAlZCIsIGVycik7CisgICAgICAgICAgICBtQ2FsbGJhY2stPm9uSW5wdXRTdXJmYWNlRGVjbGluZWQoZXJyKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgIH0KKyAgICBtQ2FsbGJhY2stPm9uSW5wdXRTdXJmYWNlQWNjZXB0ZWQoaW5wdXRGb3JtYXQsIG91dHB1dEZvcm1hdCk7Cit9CisKK3ZvaWQgQ0NvZGVjOjppbml0aWF0ZVN0YXJ0KCkgeworICAgIGF1dG8gc2V0U3RhcnRpbmcgPSBbdGhpc10geworICAgICAgICBNdXRleGVkPFN0YXRlPjo6TG9ja2VkIHN0YXRlKG1TdGF0ZSk7CisgICAgICAgIGlmIChzdGF0ZS0+Z2V0KCkgIT0gQUxMT0NBVEVEKSB7CisgICAgICAgICAgICByZXR1cm4gVU5LTk9XTl9FUlJPUjsKKyAgICAgICAgfQorICAgICAgICBzdGF0ZS0+c2V0KFNUQVJUSU5HKTsKKyAgICAgICAgcmV0dXJuIE9LOworICAgIH07CisgICAgaWYgKHRyeUFuZFJlcG9ydE9uRXJyb3Ioc2V0U3RhcnRpbmcpICE9IE9LKSB7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICAobmV3IEFNZXNzYWdlKGtXaGF0U3RhcnQsIHRoaXMpKS0+cG9zdCgpOworfQorCit2b2lkIENDb2RlYzo6c3RhcnQoKSB7CisgICAgc3RkOjpzaGFyZWRfcHRyPENvZGVjMkNsaWVudDo6Q29tcG9uZW50PiBjb21wOworICAgIGF1dG8gY2hlY2tTdGFydGluZyA9IFt0aGlzLCAmY29tcF0geworICAgICAgICBNdXRleGVkPFN0YXRlPjo6TG9ja2VkIHN0YXRlKG1TdGF0ZSk7CisgICAgICAgIGlmIChzdGF0ZS0+Z2V0KCkgIT0gU1RBUlRJTkcpIHsKKyAgICAgICAgICAgIHJldHVybiBVTktOT1dOX0VSUk9SOworICAgICAgICB9CisgICAgICAgIGNvbXAgPSBzdGF0ZS0+Y29tcDsKKyAgICAgICAgcmV0dXJuIE9LOworICAgIH07CisgICAgaWYgKHRyeUFuZFJlcG9ydE9uRXJyb3IoY2hlY2tTdGFydGluZykgIT0gT0spIHsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGMyX3N0YXR1c190IGVyciA9IGNvbXAtPnN0YXJ0KCk7CisgICAgaWYgKGVyciAhPSBDMl9PSykgeworICAgICAgICBtQ2FsbGJhY2stPm9uRXJyb3IodG9TdGF0dXNUKGVyciwgQzJfT1BFUkFUSU9OX0NvbXBvbmVudF9zdGFydCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICBBQ1RJT05fQ09ERV9GQVRBTCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgc3A8QU1lc3NhZ2U+IGlucHV0Rm9ybWF0OworICAgIHNwPEFNZXNzYWdlPiBvdXRwdXRGb3JtYXQ7CisgICAgeworICAgICAgICBNdXRleGVkPENvbmZpZz46OkxvY2tlZCBjb25maWcobUNvbmZpZyk7CisgICAgICAgIGlucHV0Rm9ybWF0ID0gY29uZmlnLT5tSW5wdXRGb3JtYXQ7CisgICAgICAgIG91dHB1dEZvcm1hdCA9IGNvbmZpZy0+bU91dHB1dEZvcm1hdDsKKyAgICB9CisgICAgc3RhdHVzX3QgZXJyMiA9IG1DaGFubmVsLT5zdGFydChpbnB1dEZvcm1hdCwgb3V0cHV0Rm9ybWF0KTsKKyAgICBpZiAoZXJyMiAhPSBPSykgeworICAgICAgICBtQ2FsbGJhY2stPm9uRXJyb3IoZXJyMiwgQUNUSU9OX0NPREVfRkFUQUwpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgYXV0byBzZXRSdW5uaW5nID0gW3RoaXNdIHsKKyAgICAgICAgTXV0ZXhlZDxTdGF0ZT46OkxvY2tlZCBzdGF0ZShtU3RhdGUpOworICAgICAgICBpZiAoc3RhdGUtPmdldCgpICE9IFNUQVJUSU5HKSB7CisgICAgICAgICAgICByZXR1cm4gVU5LTk9XTl9FUlJPUjsKKyAgICAgICAgfQorICAgICAgICBzdGF0ZS0+c2V0KFJVTk5JTkcpOworICAgICAgICByZXR1cm4gT0s7CisgICAgfTsKKyAgICBpZiAodHJ5QW5kUmVwb3J0T25FcnJvcihzZXRSdW5uaW5nKSAhPSBPSykgeworICAgICAgICByZXR1cm47CisgICAgfQorICAgIG1DYWxsYmFjay0+b25TdGFydENvbXBsZXRlZCgpOworCisgICAgKHZvaWQpbUNoYW5uZWwtPnJlcXVlc3RJbml0aWFsSW5wdXRCdWZmZXJzKCk7Cit9CisKK3ZvaWQgQ0NvZGVjOjppbml0aWF0ZVNodXRkb3duKGJvb2wga2VlcENvbXBvbmVudEFsbG9jYXRlZCkgeworICAgIGlmIChrZWVwQ29tcG9uZW50QWxsb2NhdGVkKSB7CisgICAgICAgIGluaXRpYXRlU3RvcCgpOworICAgIH0gZWxzZSB7CisgICAgICAgIGluaXRpYXRlUmVsZWFzZSgpOworICAgIH0KK30KKwordm9pZCBDQ29kZWM6OmluaXRpYXRlU3RvcCgpIHsKKyAgICB7CisgICAgICAgIE11dGV4ZWQ8U3RhdGU+OjpMb2NrZWQgc3RhdGUobVN0YXRlKTsKKyAgICAgICAgaWYgKHN0YXRlLT5nZXQoKSA9PSBBTExPQ0FURUQKKyAgICAgICAgICAgICAgICB8fCBzdGF0ZS0+Z2V0KCkgID09IFJFTEVBU0VECisgICAgICAgICAgICAgICAgfHwgc3RhdGUtPmdldCgpID09IFNUT1BQSU5HCisgICAgICAgICAgICAgICAgfHwgc3RhdGUtPmdldCgpID09IFJFTEVBU0lORykgeworICAgICAgICAgICAgLy8gV2UncmUgYWxyZWFkeSBzdG9wcGVkLCByZWxlYXNlZCwgb3IgZG9pbmcgaXQgcmlnaHQgbm93LgorICAgICAgICAgICAgc3RhdGUudW5sb2NrKCk7CisgICAgICAgICAgICBtQ2FsbGJhY2stPm9uU3RvcENvbXBsZXRlZCgpOworICAgICAgICAgICAgc3RhdGUubG9jaygpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIHN0YXRlLT5zZXQoU1RPUFBJTkcpOworICAgIH0KKworICAgIG1DaGFubmVsLT5zdG9wKCk7CisgICAgKG5ldyBBTWVzc2FnZShrV2hhdFN0b3AsIHRoaXMpKS0+cG9zdCgpOworfQorCit2b2lkIENDb2RlYzo6c3RvcCgpIHsKKyAgICBzdGQ6OnNoYXJlZF9wdHI8Q29kZWMyQ2xpZW50OjpDb21wb25lbnQ+IGNvbXA7CisgICAgeworICAgICAgICBNdXRleGVkPFN0YXRlPjo6TG9ja2VkIHN0YXRlKG1TdGF0ZSk7CisgICAgICAgIGlmIChzdGF0ZS0+Z2V0KCkgPT0gUkVMRUFTSU5HKSB7CisgICAgICAgICAgICBzdGF0ZS51bmxvY2soKTsKKyAgICAgICAgICAgIC8vIFdlJ3JlIGFscmVhZHkgc3RvcHBlZCBvciByZWxlYXNlIGlzIGluIHByb2dyZXNzLgorICAgICAgICAgICAgbUNhbGxiYWNrLT5vblN0b3BDb21wbGV0ZWQoKTsKKyAgICAgICAgICAgIHN0YXRlLmxvY2soKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfSBlbHNlIGlmIChzdGF0ZS0+Z2V0KCkgIT0gU1RPUFBJTkcpIHsKKyAgICAgICAgICAgIHN0YXRlLnVubG9jaygpOworICAgICAgICAgICAgbUNhbGxiYWNrLT5vbkVycm9yKFVOS05PV05fRVJST1IsIEFDVElPTl9DT0RFX0ZBVEFMKTsKKyAgICAgICAgICAgIHN0YXRlLmxvY2soKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICBjb21wID0gc3RhdGUtPmNvbXA7CisgICAgfQorICAgIHN0YXR1c190IGVyciA9IGNvbXAtPnN0b3AoKTsKKyAgICBpZiAoZXJyICE9IEMyX09LKSB7CisgICAgICAgIC8vIFRPRE86IGNvbnZlcnQgZXJyIGludG8gc3RhdHVzX3QKKyAgICAgICAgbUNhbGxiYWNrLT5vbkVycm9yKFVOS05PV05fRVJST1IsIEFDVElPTl9DT0RFX0ZBVEFMKTsKKyAgICB9CisKKyAgICB7CisgICAgICAgIE11dGV4ZWQ8U3RhdGU+OjpMb2NrZWQgc3RhdGUobVN0YXRlKTsKKyAgICAgICAgaWYgKHN0YXRlLT5nZXQoKSA9PSBTVE9QUElORykgeworICAgICAgICAgICAgc3RhdGUtPnNldChBTExPQ0FURUQpOworICAgICAgICB9CisgICAgfQorICAgIG1DYWxsYmFjay0+b25TdG9wQ29tcGxldGVkKCk7Cit9CisKK3ZvaWQgQ0NvZGVjOjppbml0aWF0ZVJlbGVhc2UoYm9vbCBzZW5kQ2FsbGJhY2sgLyogPSB0cnVlICovKSB7CisgICAgeworICAgICAgICBNdXRleGVkPFN0YXRlPjo6TG9ja2VkIHN0YXRlKG1TdGF0ZSk7CisgICAgICAgIGlmIChzdGF0ZS0+Z2V0KCkgPT0gUkVMRUFTRUQgfHwgc3RhdGUtPmdldCgpID09IFJFTEVBU0lORykgeworICAgICAgICAgICAgLy8gV2UncmUgYWxyZWFkeSByZWxlYXNlZCBvciBkb2luZyBpdCByaWdodCBub3cuCisgICAgICAgICAgICBpZiAoc2VuZENhbGxiYWNrKSB7CisgICAgICAgICAgICAgICAgc3RhdGUudW5sb2NrKCk7CisgICAgICAgICAgICAgICAgbUNhbGxiYWNrLT5vblJlbGVhc2VDb21wbGV0ZWQoKTsKKyAgICAgICAgICAgICAgICBzdGF0ZS5sb2NrKCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgaWYgKHN0YXRlLT5nZXQoKSA9PSBBTExPQ0FUSU5HKSB7CisgICAgICAgICAgICBzdGF0ZS0+c2V0KFJFTEVBU0lORyk7CisgICAgICAgICAgICAvLyBXaXRoIHRoZSBhbHRlcmVkIHN0YXRlIGFsbG9jYXRlKCkgd291bGQgZmFpbCBhbmQgY2xlYW4gdXAuCisgICAgICAgICAgICBpZiAoc2VuZENhbGxiYWNrKSB7CisgICAgICAgICAgICAgICAgc3RhdGUudW5sb2NrKCk7CisgICAgICAgICAgICAgICAgbUNhbGxiYWNrLT5vblJlbGVhc2VDb21wbGV0ZWQoKTsKKyAgICAgICAgICAgICAgICBzdGF0ZS5sb2NrKCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgc3RhdGUtPnNldChSRUxFQVNJTkcpOworICAgIH0KKworICAgIG1DaGFubmVsLT5zdG9wKCk7CisgICAgLy8gdGhpeiBob2xkcyBzdHJvbmcgcmVmIHRvIHRoaXMgd2hpbGUgdGhlIHRocmVhZCBpcyBydW5uaW5nLgorICAgIHNwPENDb2RlYz4gdGhpeih0aGlzKTsKKyAgICBzdGQ6OnRocmVhZChbdGhpeiwgc2VuZENhbGxiYWNrXSB7IHRoaXotPnJlbGVhc2Uoc2VuZENhbGxiYWNrKTsgfSkuZGV0YWNoKCk7Cit9CisKK3ZvaWQgQ0NvZGVjOjpyZWxlYXNlKGJvb2wgc2VuZENhbGxiYWNrKSB7CisgICAgc3RkOjpzaGFyZWRfcHRyPENvZGVjMkNsaWVudDo6Q29tcG9uZW50PiBjb21wOworICAgIHsKKyAgICAgICAgTXV0ZXhlZDxTdGF0ZT46OkxvY2tlZCBzdGF0ZShtU3RhdGUpOworICAgICAgICBpZiAoc3RhdGUtPmdldCgpID09IFJFTEVBU0VEKSB7CisgICAgICAgICAgICBpZiAoc2VuZENhbGxiYWNrKSB7CisgICAgICAgICAgICAgICAgc3RhdGUudW5sb2NrKCk7CisgICAgICAgICAgICAgICAgbUNhbGxiYWNrLT5vblJlbGVhc2VDb21wbGV0ZWQoKTsKKyAgICAgICAgICAgICAgICBzdGF0ZS5sb2NrKCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgY29tcCA9IHN0YXRlLT5jb21wOworICAgIH0KKyAgICBjb21wLT5yZWxlYXNlKCk7CisKKyAgICB7CisgICAgICAgIE11dGV4ZWQ8U3RhdGU+OjpMb2NrZWQgc3RhdGUobVN0YXRlKTsKKyAgICAgICAgc3RhdGUtPnNldChSRUxFQVNFRCk7CisgICAgICAgIHN0YXRlLT5jb21wLnJlc2V0KCk7CisgICAgfQorICAgIGlmIChzZW5kQ2FsbGJhY2spIHsKKyAgICAgICAgbUNhbGxiYWNrLT5vblJlbGVhc2VDb21wbGV0ZWQoKTsKKyAgICB9Cit9CisKK3N0YXR1c190IENDb2RlYzo6c2V0U3VyZmFjZShjb25zdCBzcDxTdXJmYWNlPiAmc3VyZmFjZSkgeworICAgIHJldHVybiBtQ2hhbm5lbC0+c2V0U3VyZmFjZShzdXJmYWNlKTsKK30KKwordm9pZCBDQ29kZWM6OnNpZ25hbEZsdXNoKCkgeworICAgIHN0YXR1c190IGVyciA9IFt0aGlzXSB7CisgICAgICAgIE11dGV4ZWQ8U3RhdGU+OjpMb2NrZWQgc3RhdGUobVN0YXRlKTsKKyAgICAgICAgaWYgKHN0YXRlLT5nZXQoKSA9PSBGTFVTSEVEKSB7CisgICAgICAgICAgICByZXR1cm4gQUxSRUFEWV9FWElTVFM7CisgICAgICAgIH0KKyAgICAgICAgaWYgKHN0YXRlLT5nZXQoKSAhPSBSVU5OSU5HKSB7CisgICAgICAgICAgICByZXR1cm4gVU5LTk9XTl9FUlJPUjsKKyAgICAgICAgfQorICAgICAgICBzdGF0ZS0+c2V0KEZMVVNISU5HKTsKKyAgICAgICAgcmV0dXJuIE9LOworICAgIH0oKTsKKyAgICBzd2l0Y2ggKGVycikgeworICAgICAgICBjYXNlIEFMUkVBRFlfRVhJU1RTOgorICAgICAgICAgICAgbUNhbGxiYWNrLT5vbkZsdXNoQ29tcGxldGVkKCk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIGNhc2UgT0s6CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIG1DYWxsYmFjay0+b25FcnJvcihlcnIsIEFDVElPTl9DT0RFX0ZBVEFMKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBtQ2hhbm5lbC0+c3RvcCgpOworICAgIChuZXcgQU1lc3NhZ2Uoa1doYXRGbHVzaCwgdGhpcykpLT5wb3N0KCk7Cit9CisKK3ZvaWQgQ0NvZGVjOjpmbHVzaCgpIHsKKyAgICBzdGQ6OnNoYXJlZF9wdHI8Q29kZWMyQ2xpZW50OjpDb21wb25lbnQ+IGNvbXA7CisgICAgYXV0byBjaGVja0ZsdXNoaW5nID0gW3RoaXMsICZjb21wXSB7CisgICAgICAgIE11dGV4ZWQ8U3RhdGU+OjpMb2NrZWQgc3RhdGUobVN0YXRlKTsKKyAgICAgICAgaWYgKHN0YXRlLT5nZXQoKSAhPSBGTFVTSElORykgeworICAgICAgICAgICAgcmV0dXJuIFVOS05PV05fRVJST1I7CisgICAgICAgIH0KKyAgICAgICAgY29tcCA9IHN0YXRlLT5jb21wOworICAgICAgICByZXR1cm4gT0s7CisgICAgfTsKKyAgICBpZiAodHJ5QW5kUmVwb3J0T25FcnJvcihjaGVja0ZsdXNoaW5nKSAhPSBPSykgeworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgc3RkOjpsaXN0PHN0ZDo6dW5pcXVlX3B0cjxDMldvcms+PiBmbHVzaGVkV29yazsKKyAgICBjMl9zdGF0dXNfdCBlcnIgPSBjb21wLT5mbHVzaChDMkNvbXBvbmVudDo6RkxVU0hfQ09NUE9ORU5ULCAmZmx1c2hlZFdvcmspOworICAgIHsKKyAgICAgICAgTXV0ZXhlZDxzdGQ6Omxpc3Q8c3RkOjp1bmlxdWVfcHRyPEMyV29yaz4+Pjo6TG9ja2VkIHF1ZXVlKG1Xb3JrRG9uZVF1ZXVlKTsKKyAgICAgICAgZmx1c2hlZFdvcmsuc3BsaWNlKGZsdXNoZWRXb3JrLmVuZCgpLCAqcXVldWUpOworICAgIH0KKyAgICBpZiAoZXJyICE9IEMyX09LKSB7CisgICAgICAgIC8vIFRPRE86IGNvbnZlcnQgZXJyIGludG8gc3RhdHVzX3QKKyAgICAgICAgbUNhbGxiYWNrLT5vbkVycm9yKFVOS05PV05fRVJST1IsIEFDVElPTl9DT0RFX0ZBVEFMKTsKKyAgICB9CisKKyAgICBtQ2hhbm5lbC0+Zmx1c2goZmx1c2hlZFdvcmspOworICAgIHN1YlF1ZXVlZFdvcmtDb3VudChmbHVzaGVkV29yay5zaXplKCkpOworCisgICAgeworICAgICAgICBNdXRleGVkPFN0YXRlPjo6TG9ja2VkIHN0YXRlKG1TdGF0ZSk7CisgICAgICAgIHN0YXRlLT5zZXQoRkxVU0hFRCk7CisgICAgfQorICAgIG1DYWxsYmFjay0+b25GbHVzaENvbXBsZXRlZCgpOworfQorCit2b2lkIENDb2RlYzo6c2lnbmFsUmVzdW1lKCkgeworICAgIGF1dG8gc2V0UmVzdW1pbmcgPSBbdGhpc10geworICAgICAgICBNdXRleGVkPFN0YXRlPjo6TG9ja2VkIHN0YXRlKG1TdGF0ZSk7CisgICAgICAgIGlmIChzdGF0ZS0+Z2V0KCkgIT0gRkxVU0hFRCkgeworICAgICAgICAgICAgcmV0dXJuIFVOS05PV05fRVJST1I7CisgICAgICAgIH0KKyAgICAgICAgc3RhdGUtPnNldChSRVNVTUlORyk7CisgICAgICAgIHJldHVybiBPSzsKKyAgICB9OworICAgIGlmICh0cnlBbmRSZXBvcnRPbkVycm9yKHNldFJlc3VtaW5nKSAhPSBPSykgeworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgKHZvaWQpbUNoYW5uZWwtPnN0YXJ0KG51bGxwdHIsIG51bGxwdHIpOworCisgICAgeworICAgICAgICBNdXRleGVkPFN0YXRlPjo6TG9ja2VkIHN0YXRlKG1TdGF0ZSk7CisgICAgICAgIGlmIChzdGF0ZS0+Z2V0KCkgIT0gUkVTVU1JTkcpIHsKKyAgICAgICAgICAgIHN0YXRlLnVubG9jaygpOworICAgICAgICAgICAgbUNhbGxiYWNrLT5vbkVycm9yKFVOS05PV05fRVJST1IsIEFDVElPTl9DT0RFX0ZBVEFMKTsKKyAgICAgICAgICAgIHN0YXRlLmxvY2soKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICBzdGF0ZS0+c2V0KFJVTk5JTkcpOworICAgIH0KKworICAgICh2b2lkKW1DaGFubmVsLT5yZXF1ZXN0SW5pdGlhbElucHV0QnVmZmVycygpOworfQorCit2b2lkIENDb2RlYzo6c2lnbmFsU2V0UGFyYW1ldGVycyhjb25zdCBzcDxBTWVzc2FnZT4gJnBhcmFtcykgeworICAgIHNwPEFNZXNzYWdlPiBtc2cgPSBuZXcgQU1lc3NhZ2Uoa1doYXRTZXRQYXJhbWV0ZXJzLCB0aGlzKTsKKyAgICBtc2ctPnNldE1lc3NhZ2UoInBhcmFtcyIsIHBhcmFtcyk7CisgICAgbXNnLT5wb3N0KCk7Cit9CisKK3ZvaWQgQ0NvZGVjOjpzZXRQYXJhbWV0ZXJzKGNvbnN0IHNwPEFNZXNzYWdlPiAmcGFyYW1zKSB7CisgICAgc3RkOjpzaGFyZWRfcHRyPENvZGVjMkNsaWVudDo6Q29tcG9uZW50PiBjb21wOworICAgIGF1dG8gY2hlY2tTdGF0ZSA9IFt0aGlzLCAmY29tcF0geworICAgICAgICBNdXRleGVkPFN0YXRlPjo6TG9ja2VkIHN0YXRlKG1TdGF0ZSk7CisgICAgICAgIGlmIChzdGF0ZS0+Z2V0KCkgPT0gUkVMRUFTRUQpIHsKKyAgICAgICAgICAgIHJldHVybiBJTlZBTElEX09QRVJBVElPTjsKKyAgICAgICAgfQorICAgICAgICBjb21wID0gc3RhdGUtPmNvbXA7CisgICAgICAgIHJldHVybiBPSzsKKyAgICB9OworICAgIGlmICh0cnlBbmRSZXBvcnRPbkVycm9yKGNoZWNrU3RhdGUpICE9IE9LKSB7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBNdXRleGVkPENvbmZpZz46OkxvY2tlZCBjb25maWcobUNvbmZpZyk7CisKKyAgICAvKioKKyAgICAgKiBIYW5kbGUgaW5wdXQgc3VyZmFjZSBwYXJhbWV0ZXJzCisgICAgICovCisgICAgaWYgKChjb25maWctPm1Eb21haW4gJiAoQ29uZmlnOjpJU19WSURFTyB8IENvbmZpZzo6SVNfSU1BR0UpKQorICAgICAgICAgICAgJiYgKGNvbmZpZy0+bURvbWFpbiAmIENvbmZpZzo6SVNfRU5DT0RFUikgJiYgY29uZmlnLT5tSW5wdXRTdXJmYWNlICYmIGNvbmZpZy0+bUlTQ29uZmlnKSB7CisgICAgICAgICh2b2lkKXBhcmFtcy0+ZmluZEludDY0KCJ0aW1lLW9mZnNldC11cyIsICZjb25maWctPm1JU0NvbmZpZy0+bVRpbWVPZmZzZXRVcyk7CisKKyAgICAgICAgaWYgKHBhcmFtcy0+ZmluZEludDY0KCJza2lwLWZyYW1lcy1iZWZvcmUiLCAmY29uZmlnLT5tSVNDb25maWctPm1TdGFydEF0VXMpKSB7CisgICAgICAgICAgICBjb25maWctPm1JU0NvbmZpZy0+bVN0b3BwZWQgPSBmYWxzZTsKKyAgICAgICAgfSBlbHNlIGlmIChwYXJhbXMtPmZpbmRJbnQ2NCgic3RvcC10aW1lLXVzIiwgJmNvbmZpZy0+bUlTQ29uZmlnLT5tU3RvcEF0VXMpKSB7CisgICAgICAgICAgICBjb25maWctPm1JU0NvbmZpZy0+bVN0b3BwZWQgPSB0cnVlOworICAgICAgICB9CisKKyAgICAgICAgaW50MzJfdCB2YWx1ZTsKKyAgICAgICAgaWYgKHBhcmFtcy0+ZmluZEludDMyKCJkcm9wLWlucHV0LWZyYW1lcyIsICZ2YWx1ZSkpIHsKKyAgICAgICAgICAgIGNvbmZpZy0+bUlTQ29uZmlnLT5tU3VzcGVuZGVkID0gdmFsdWU7CisgICAgICAgICAgICBjb25maWctPm1JU0NvbmZpZy0+bVN1c3BlbmRBdFVzID0gLTE7CisgICAgICAgICAgICAodm9pZClwYXJhbXMtPmZpbmRJbnQ2NCgiZHJvcC1zdGFydC10aW1lLXVzIiwgJmNvbmZpZy0+bUlTQ29uZmlnLT5tU3VzcGVuZEF0VXMpOworICAgICAgICB9CisKKyAgICAgICAgKHZvaWQpY29uZmlnLT5tSW5wdXRTdXJmYWNlLT5jb25maWd1cmUoKmNvbmZpZy0+bUlTQ29uZmlnKTsKKyAgICAgICAgaWYgKGNvbmZpZy0+bUlTQ29uZmlnLT5tU3RvcHBlZCkgeworICAgICAgICAgICAgY29uZmlnLT5tSW5wdXRGb3JtYXQtPnNldEludDY0KAorICAgICAgICAgICAgICAgICAgICAiYW5kcm9pZC5fc3RvcC10aW1lLW9mZnNldC11cyIsIGNvbmZpZy0+bUlTQ29uZmlnLT5tSW5wdXREZWxheVVzKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHN0ZDo6dmVjdG9yPHN0ZDo6dW5pcXVlX3B0cjxDMlBhcmFtPj4gY29uZmlnVXBkYXRlOworICAgICh2b2lkKWNvbmZpZy0+Z2V0Q29uZmlnVXBkYXRlRnJvbVNka1BhcmFtcygKKyAgICAgICAgICAgIGNvbXAsIHBhcmFtcywgQ29uZmlnOjpJU19QQVJBTSwgQzJfTUFZX0JMT0NLLCAmY29uZmlnVXBkYXRlKTsKKyAgICAvLyBQcmVmZXIgdG8gcGFzcyBwYXJhbWV0ZXJzIHRvIHRoZSBidWZmZXIgY2hhbm5lbCwgc28gdGhleSBjYW4gYmUgc3luY2hyb25pemVkIHdpdGggdGhlIGZyYW1lcy4KKyAgICAvLyBQYXJhbWV0ZXIgc3luY2hyb25pemF0aW9uIGlzIG5vdCBkZWZpbmVkIHdoZW4gdXNpbmcgaW5wdXQgc3VyZmFjZS4gRm9yIG5vdywgcm91dGUKKyAgICAvLyB0aGVzZSBkaXJlY3RseSB0byB0aGUgY29tcG9uZW50LgorICAgIGlmIChjb25maWctPm1JbnB1dFN1cmZhY2UgPT0gbnVsbHB0cgorICAgICAgICAgICAgJiYgKHByb3BlcnR5X2dldF9ib29sKCJkZWJ1Zy5zdGFnZWZyaWdodC5jY29kZWNfZGVsYXllZF9wYXJhbXMiLCBmYWxzZSkKKyAgICAgICAgICAgICAgICAgICAgfHwgY29tcC0+Z2V0TmFtZSgpLmZpbmQoImMyLmFuZHJvaWQuIikgPT0gMCkpIHsKKyAgICAgICAgbUNoYW5uZWwtPnNldFBhcmFtZXRlcnMoY29uZmlnVXBkYXRlKTsKKyAgICB9IGVsc2UgeworICAgICAgICAodm9pZCljb25maWctPnNldFBhcmFtZXRlcnMoY29tcCwgY29uZmlnVXBkYXRlLCBDMl9NQVlfQkxPQ0spOworICAgIH0KK30KKwordm9pZCBDQ29kZWM6OnNpZ25hbEVuZE9mSW5wdXRTdHJlYW0oKSB7CisgICAgbUNhbGxiYWNrLT5vblNpZ25hbGVkSW5wdXRFT1MobUNoYW5uZWwtPnNpZ25hbEVuZE9mSW5wdXRTdHJlYW0oKSk7Cit9CisKK3ZvaWQgQ0NvZGVjOjpzaWduYWxSZXF1ZXN0SURSRnJhbWUoKSB7CisgICAgc3RkOjpzaGFyZWRfcHRyPENvZGVjMkNsaWVudDo6Q29tcG9uZW50PiBjb21wOworICAgIHsKKyAgICAgICAgTXV0ZXhlZDxTdGF0ZT46OkxvY2tlZCBzdGF0ZShtU3RhdGUpOworICAgICAgICBpZiAoc3RhdGUtPmdldCgpID09IFJFTEVBU0VEKSB7CisgICAgICAgICAgICBBTE9HRCgibm8gSURSIHJlcXVlc3Qgc2VudCBzaW5jZSBjb21wb25lbnQgaXMgcmVsZWFzZWQiKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICBjb21wID0gc3RhdGUtPmNvbXA7CisgICAgfQorICAgIEFMT0dWKCJyZXF1ZXN0IElEUiIpOworICAgIE11dGV4ZWQ8Q29uZmlnPjo6TG9ja2VkIGNvbmZpZyhtQ29uZmlnKTsKKyAgICBzdGQ6OnZlY3RvcjxzdGQ6OnVuaXF1ZV9wdHI8QzJQYXJhbT4+IHBhcmFtczsKKyAgICBwYXJhbXMucHVzaF9iYWNrKAorICAgICAgICAgICAgc3RkOjptYWtlX3VuaXF1ZTxDMlN0cmVhbVJlcXVlc3RTeW5jRnJhbWVUdW5pbmc6Om91dHB1dD4oMHUsIHRydWUpKTsKKyAgICBjb25maWctPnNldFBhcmFtZXRlcnMoY29tcCwgcGFyYW1zLCBDMl9NQVlfQkxPQ0spOworfQorCit2b2lkIENDb2RlYzo6b25Xb3JrRG9uZShzdGQ6Omxpc3Q8c3RkOjp1bmlxdWVfcHRyPEMyV29yaz4+ICZ3b3JrSXRlbXMsCisgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgbnVtRGlzY2FyZGVkSW5wdXRCdWZmZXJzKSB7CisgICAgaWYgKCF3b3JrSXRlbXMuZW1wdHkoKSkgeworICAgICAgICB7CisgICAgICAgICAgICBNdXRleGVkPHN0ZDo6bGlzdDxzaXplX3Q+Pjo6TG9ja2VkIG51bURpc2NhcmRlZElucHV0QnVmZmVyc1F1ZXVlKAorICAgICAgICAgICAgICAgICAgICBtTnVtRGlzY2FyZGVkSW5wdXRCdWZmZXJzUXVldWUpOworICAgICAgICAgICAgbnVtRGlzY2FyZGVkSW5wdXRCdWZmZXJzUXVldWUtPmluc2VydCgKKyAgICAgICAgICAgICAgICAgICAgbnVtRGlzY2FyZGVkSW5wdXRCdWZmZXJzUXVldWUtPmVuZCgpLAorICAgICAgICAgICAgICAgICAgICB3b3JrSXRlbXMuc2l6ZSgpIC0gMSwgMCk7CisgICAgICAgICAgICBudW1EaXNjYXJkZWRJbnB1dEJ1ZmZlcnNRdWV1ZS0+ZW1wbGFjZV9iYWNrKAorICAgICAgICAgICAgICAgICAgICBudW1EaXNjYXJkZWRJbnB1dEJ1ZmZlcnMpOworICAgICAgICB9CisgICAgICAgIHsKKyAgICAgICAgICAgIE11dGV4ZWQ8c3RkOjpsaXN0PHN0ZDo6dW5pcXVlX3B0cjxDMldvcms+Pj46OkxvY2tlZCBxdWV1ZShtV29ya0RvbmVRdWV1ZSk7CisgICAgICAgICAgICBxdWV1ZS0+c3BsaWNlKHF1ZXVlLT5lbmQoKSwgd29ya0l0ZW1zKTsKKyAgICAgICAgfQorICAgIH0KKyAgICAobmV3IEFNZXNzYWdlKGtXaGF0V29ya0RvbmUsIHRoaXMpKS0+cG9zdCgpOworfQorCit2b2lkIENDb2RlYzo6b25JbnB1dEJ1ZmZlckRvbmUoY29uc3Qgc3RkOjpzaGFyZWRfcHRyPEMyQnVmZmVyPiYgYnVmZmVyKSB7CisgICAgbUNoYW5uZWwtPm9uSW5wdXRCdWZmZXJEb25lKGJ1ZmZlcik7Cit9CisKK3ZvaWQgQ0NvZGVjOjpvbk1lc3NhZ2VSZWNlaXZlZChjb25zdCBzcDxBTWVzc2FnZT4gJm1zZykgeworICAgIFRpbWVQb2ludCBub3cgPSBzdGQ6OmNocm9ubzo6c3RlYWR5X2Nsb2NrOjpub3coKTsKKyAgICBDQ29kZWNXYXRjaGRvZzo6Z2V0SW5zdGFuY2UoKS0+d2F0Y2godGhpcyk7CisgICAgc3dpdGNoIChtc2ctPndoYXQoKSkgeworICAgICAgICBjYXNlIGtXaGF0QWxsb2NhdGU6IHsKKyAgICAgICAgICAgIC8vIEMyQ29tcG9uZW50U3RvcmU6OmNyZWF0ZUNvbXBvbmVudCgpIHNob3VsZCByZXR1cm4gd2l0aGluIDEwMG1zLgorICAgICAgICAgICAgc2V0RGVhZGxpbmUobm93LCAxNTBtcywgImFsbG9jYXRlIik7CisgICAgICAgICAgICBzcDxSZWZCYXNlPiBvYmo7CisgICAgICAgICAgICBDSEVDSyhtc2ctPmZpbmRPYmplY3QoImNvZGVjSW5mbyIsICZvYmopKTsKKyAgICAgICAgICAgIGFsbG9jYXRlKChNZWRpYUNvZGVjSW5mbyAqKW9iai5nZXQoKSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBjYXNlIGtXaGF0Q29uZmlndXJlOiB7CisgICAgICAgICAgICAvLyBDMkNvbXBvbmVudDo6Y29tbWl0X3NtKCkgc2hvdWxkIHJldHVybiB3aXRoaW4gNW1zLgorICAgICAgICAgICAgc2V0RGVhZGxpbmUobm93LCAyNTBtcywgImNvbmZpZ3VyZSIpOworICAgICAgICAgICAgc3A8QU1lc3NhZ2U+IGZvcm1hdDsKKyAgICAgICAgICAgIENIRUNLKG1zZy0+ZmluZE1lc3NhZ2UoImZvcm1hdCIsICZmb3JtYXQpKTsKKyAgICAgICAgICAgIGNvbmZpZ3VyZShmb3JtYXQpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgY2FzZSBrV2hhdFN0YXJ0OiB7CisgICAgICAgICAgICAvLyBDMkNvbXBvbmVudDo6c3RhcnQoKSBzaG91bGQgcmV0dXJuIHdpdGhpbiA1MDBtcy4KKyAgICAgICAgICAgIHNldERlYWRsaW5lKG5vdywgNTUwbXMsICJzdGFydCIpOworICAgICAgICAgICAgbVF1ZXVlZFdvcmtDb3VudCA9IDA7CisgICAgICAgICAgICBzdGFydCgpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgY2FzZSBrV2hhdFN0b3A6IHsKKyAgICAgICAgICAgIC8vIEMyQ29tcG9uZW50OjpzdG9wKCkgc2hvdWxkIHJldHVybiB3aXRoaW4gNTAwbXMuCisgICAgICAgICAgICBzZXREZWFkbGluZShub3csIDU1MG1zLCAic3RvcCIpOworICAgICAgICAgICAgc3RvcCgpOworCisgICAgICAgICAgICBtUXVldWVkV29ya0NvdW50ID0gMDsKKyAgICAgICAgICAgIE11dGV4ZWQ8TmFtZWRUaW1lUG9pbnQ+OjpMb2NrZWQgZGVhZGxpbmUobVF1ZXVlRGVhZGxpbmUpOworICAgICAgICAgICAgZGVhZGxpbmUtPnNldChUaW1lUG9pbnQ6Om1heCgpLCAibm9uZSIpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgY2FzZSBrV2hhdEZsdXNoOiB7CisgICAgICAgICAgICAvLyBDMkNvbXBvbmVudDo6Zmx1c2hfc20oKSBzaG91bGQgcmV0dXJuIHdpdGhpbiA1bXMuCisgICAgICAgICAgICBzZXREZWFkbGluZShub3csIDUwbXMsICJmbHVzaCIpOworICAgICAgICAgICAgZmx1c2goKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGNhc2Uga1doYXRDcmVhdGVJbnB1dFN1cmZhY2U6IHsKKyAgICAgICAgICAgIC8vIFN1cmZhY2Ugb3BlcmF0aW9ucyBtYXkgYmUgYnJpZWZseSBibG9ja2luZy4KKyAgICAgICAgICAgIHNldERlYWRsaW5lKG5vdywgMTAwbXMsICJjcmVhdGVJbnB1dFN1cmZhY2UiKTsKKyAgICAgICAgICAgIGNyZWF0ZUlucHV0U3VyZmFjZSgpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgY2FzZSBrV2hhdFNldElucHV0U3VyZmFjZTogeworICAgICAgICAgICAgLy8gU3VyZmFjZSBvcGVyYXRpb25zIG1heSBiZSBicmllZmx5IGJsb2NraW5nLgorICAgICAgICAgICAgc2V0RGVhZGxpbmUobm93LCAxMDBtcywgInNldElucHV0U3VyZmFjZSIpOworICAgICAgICAgICAgc3A8UmVmQmFzZT4gb2JqOworICAgICAgICAgICAgQ0hFQ0sobXNnLT5maW5kT2JqZWN0KCJzdXJmYWNlIiwgJm9iaikpOworICAgICAgICAgICAgc3A8UGVyc2lzdGVudFN1cmZhY2U+IHN1cmZhY2Uoc3RhdGljX2Nhc3Q8UGVyc2lzdGVudFN1cmZhY2UgKj4ob2JqLmdldCgpKSk7CisgICAgICAgICAgICBzZXRJbnB1dFN1cmZhY2Uoc3VyZmFjZSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBjYXNlIGtXaGF0U2V0UGFyYW1ldGVyczogeworICAgICAgICAgICAgc2V0RGVhZGxpbmUobm93LCA1MG1zLCAic2V0UGFyYW1ldGVycyIpOworICAgICAgICAgICAgc3A8QU1lc3NhZ2U+IHBhcmFtczsKKyAgICAgICAgICAgIENIRUNLKG1zZy0+ZmluZE1lc3NhZ2UoInBhcmFtcyIsICZwYXJhbXMpKTsKKyAgICAgICAgICAgIHNldFBhcmFtZXRlcnMocGFyYW1zKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGNhc2Uga1doYXRXb3JrRG9uZTogeworICAgICAgICAgICAgc3RkOjp1bmlxdWVfcHRyPEMyV29yaz4gd29yazsKKyAgICAgICAgICAgIHNpemVfdCBudW1EaXNjYXJkZWRJbnB1dEJ1ZmZlcnM7CisgICAgICAgICAgICBib29sIHNob3VsZFBvc3QgPSBmYWxzZTsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBNdXRleGVkPHN0ZDo6bGlzdDxzdGQ6OnVuaXF1ZV9wdHI8QzJXb3JrPj4+OjpMb2NrZWQgcXVldWUobVdvcmtEb25lUXVldWUpOworICAgICAgICAgICAgICAgIGlmIChxdWV1ZS0+ZW1wdHkoKSkgeworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgd29yay5zd2FwKHF1ZXVlLT5mcm9udCgpKTsKKyAgICAgICAgICAgICAgICBxdWV1ZS0+cG9wX2Zyb250KCk7CisgICAgICAgICAgICAgICAgc2hvdWxkUG9zdCA9ICFxdWV1ZS0+ZW1wdHkoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBNdXRleGVkPHN0ZDo6bGlzdDxzaXplX3Q+Pjo6TG9ja2VkIG51bURpc2NhcmRlZElucHV0QnVmZmVyc1F1ZXVlKAorICAgICAgICAgICAgICAgICAgICAgICAgbU51bURpc2NhcmRlZElucHV0QnVmZmVyc1F1ZXVlKTsKKyAgICAgICAgICAgICAgICBpZiAobnVtRGlzY2FyZGVkSW5wdXRCdWZmZXJzUXVldWUtPmVtcHR5KCkpIHsKKyAgICAgICAgICAgICAgICAgICAgbnVtRGlzY2FyZGVkSW5wdXRCdWZmZXJzID0gMDsKKyAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICBudW1EaXNjYXJkZWRJbnB1dEJ1ZmZlcnMgPSBudW1EaXNjYXJkZWRJbnB1dEJ1ZmZlcnNRdWV1ZS0+ZnJvbnQoKTsKKyAgICAgICAgICAgICAgICAgICAgbnVtRGlzY2FyZGVkSW5wdXRCdWZmZXJzUXVldWUtPnBvcF9mcm9udCgpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChzaG91bGRQb3N0KSB7CisgICAgICAgICAgICAgICAgKG5ldyBBTWVzc2FnZShrV2hhdFdvcmtEb25lLCB0aGlzKSktPnBvc3QoKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKHdvcmstPndvcmtsZXRzLmVtcHR5KCkKKyAgICAgICAgICAgICAgICAgICAgfHwgISh3b3JrLT53b3JrbGV0cy5mcm9udCgpLT5vdXRwdXQuZmxhZ3MgJiBDMkZyYW1lRGF0YTo6RkxBR19JTkNPTVBMRVRFKSkgeworICAgICAgICAgICAgICAgIHN1YlF1ZXVlZFdvcmtDb3VudCgxKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIC8vIGhhbmRsZSBjb25maWd1cmF0aW9uIGNoYW5nZXMgaW4gd29yayBkb25lCisgICAgICAgICAgICBNdXRleGVkPENvbmZpZz46OkxvY2tlZCBjb25maWcobUNvbmZpZyk7CisgICAgICAgICAgICBib29sIGNoYW5nZWQgPSBmYWxzZTsKKyAgICAgICAgICAgIENvbmZpZzo6V2F0Y2hlcjxDMlN0cmVhbUluaXREYXRhSW5mbzo6b3V0cHV0PiBpbml0RGF0YSA9CisgICAgICAgICAgICAgICAgY29uZmlnLT53YXRjaDxDMlN0cmVhbUluaXREYXRhSW5mbzo6b3V0cHV0PigpOworICAgICAgICAgICAgaWYgKCF3b3JrLT53b3JrbGV0cy5lbXB0eSgpCisgICAgICAgICAgICAgICAgICAgICYmICh3b3JrLT53b3JrbGV0cy5mcm9udCgpLT5vdXRwdXQuZmxhZ3MKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAmIEMyRnJhbWVEYXRhOjpGTEFHX0RJU0NBUkRfRlJBTUUpID09IDApIHsKKworICAgICAgICAgICAgICAgIC8vIGNvcHkgYnVmZmVyIGluZm8gdG8gY29uZmlnCisgICAgICAgICAgICAgICAgc3RkOjp2ZWN0b3I8c3RkOjp1bmlxdWVfcHRyPEMyUGFyYW0+PiB1cGRhdGVzID0KKyAgICAgICAgICAgICAgICAgICAgc3RkOjptb3ZlKHdvcmstPndvcmtsZXRzLmZyb250KCktPm91dHB1dC5jb25maWdVcGRhdGUpOworICAgICAgICAgICAgICAgIHVuc2lnbmVkIHN0cmVhbSA9IDA7CisgICAgICAgICAgICAgICAgZm9yIChjb25zdCBzdGQ6OnNoYXJlZF9wdHI8QzJCdWZmZXI+ICZidWYgOiB3b3JrLT53b3JrbGV0cy5mcm9udCgpLT5vdXRwdXQuYnVmZmVycykgeworICAgICAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IHN0ZDo6c2hhcmVkX3B0cjxjb25zdCBDMkluZm8+ICZpbmZvIDogYnVmLT5pbmZvKCkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIG1vdmUgYWxsIGluZm8gaW50byBvdXRwdXQtc3RyZWFtICMwIGRvbWFpbgorICAgICAgICAgICAgICAgICAgICAgICAgdXBkYXRlcy5lbXBsYWNlX2JhY2soQzJQYXJhbTo6Q29weUFzU3RyZWFtKCppbmZvLCB0cnVlIC8qIG91dHB1dCAqLywgc3RyZWFtKSk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgZm9yIChjb25zdCBDMkNvbnN0R3JhcGhpY0Jsb2NrICZibG9jayA6IGJ1Zi0+ZGF0YSgpLmdyYXBoaWNCbG9ja3MoKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgLy8gQUxPR1YoImdvdCBvdXRwdXQgYnVmZmVyIHdpdGggY3JvcCAldSwldSsldSwldSBhbmQgc2l6ZSAldSwldSIsCisgICAgICAgICAgICAgICAgICAgICAgICAvLyAgICAgIGJsb2NrLmNyb3AoKS5sZWZ0LCBibG9jay5jcm9wKCkudG9wLAorICAgICAgICAgICAgICAgICAgICAgICAgLy8gICAgICBibG9jay5jcm9wKCkud2lkdGgsIGJsb2NrLmNyb3AoKS5oZWlnaHQsCisgICAgICAgICAgICAgICAgICAgICAgICAvLyAgICAgIGJsb2NrLndpZHRoKCksIGJsb2NrLmhlaWdodCgpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHVwZGF0ZXMuZW1wbGFjZV9iYWNrKG5ldyBDMlN0cmVhbUNyb3BSZWN0SW5mbzo6b3V0cHV0KHN0cmVhbSwgYmxvY2suY3JvcCgpKSk7CisgICAgICAgICAgICAgICAgICAgICAgICB1cGRhdGVzLmVtcGxhY2VfYmFjayhuZXcgQzJTdHJlYW1QaWN0dXJlU2l6ZUluZm86Om91dHB1dCgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RyZWFtLCBibG9jay53aWR0aCgpLCBibG9jay5oZWlnaHQoKSkpOworICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7IC8vIGZvciBub3cgb25seSBkbyB0aGUgZmlyc3QgYmxvY2sKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICArK3N0cmVhbTsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICBjaGFuZ2VkID0gY29uZmlnLT51cGRhdGVDb25maWd1cmF0aW9uKHVwZGF0ZXMsIGNvbmZpZy0+bU91dHB1dERvbWFpbik7CisKKyAgICAgICAgICAgICAgICAvLyBjb3B5IHN0YW5kYXJkIGluZm9zIHRvIGdyYXBoaWMgYnVmZmVycyBpZiBub3QgYWxyZWFkeSBwcmVzZW50IChvdGhlcndpc2UsIHdlCisgICAgICAgICAgICAgICAgLy8gbWF5IG92ZXJ3cml0ZSB0aGUgYWN0dWFsIGludGVybWVkaWF0ZSB2YWx1ZSB3aXRoIGEgZmluYWwgdmFsdWUpCisgICAgICAgICAgICAgICAgc3RyZWFtID0gMDsKKyAgICAgICAgICAgICAgICBjb25zdCBzdGF0aWMgc3RkOjp2ZWN0b3I8QzJQYXJhbTo6SW5kZXg+IHN0ZEdmeEluZm9zID0geworICAgICAgICAgICAgICAgICAgICBDMlN0cmVhbVJvdGF0aW9uSW5mbzo6b3V0cHV0OjpQQVJBTV9UWVBFLAorICAgICAgICAgICAgICAgICAgICBDMlN0cmVhbUNvbG9yQXNwZWN0c0luZm86Om91dHB1dDo6UEFSQU1fVFlQRSwKKyAgICAgICAgICAgICAgICAgICAgQzJTdHJlYW1EYXRhU3BhY2VJbmZvOjpvdXRwdXQ6OlBBUkFNX1RZUEUsCisgICAgICAgICAgICAgICAgICAgIEMyU3RyZWFtSGRyU3RhdGljSW5mbzo6b3V0cHV0OjpQQVJBTV9UWVBFLAorICAgICAgICAgICAgICAgICAgICBDMlN0cmVhbVBpeGVsQXNwZWN0UmF0aW9JbmZvOjpvdXRwdXQ6OlBBUkFNX1RZUEUsCisgICAgICAgICAgICAgICAgICAgIEMyU3RyZWFtU3VyZmFjZVNjYWxpbmdJbmZvOjpvdXRwdXQ6OlBBUkFNX1RZUEUKKyAgICAgICAgICAgICAgICB9OworICAgICAgICAgICAgICAgIGZvciAoY29uc3Qgc3RkOjpzaGFyZWRfcHRyPEMyQnVmZmVyPiAmYnVmIDogd29yay0+d29ya2xldHMuZnJvbnQoKS0+b3V0cHV0LmJ1ZmZlcnMpIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGJ1Zi0+ZGF0YSgpLmdyYXBoaWNCbG9ja3MoKS5zaXplKCkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoQzJQYXJhbTo6SW5kZXggaXggOiBzdGRHZnhJbmZvcykgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghYnVmLT5oYXNJbmZvKGl4KSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBDMlBhcmFtICpwYXJhbSA9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25maWctPmdldENvbmZpZ1BhcmFtZXRlclZhbHVlKGl4LndpdGhTdHJlYW0oc3RyZWFtKSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwYXJhbSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RkOjpzaGFyZWRfcHRyPEMyUGFyYW0+IGluZm8oQzJQYXJhbTo6Q29weSgqcGFyYW0pKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1Zi0+c2V0SW5mbyhzdGQ6OnN0YXRpY19wb2ludGVyX2Nhc3Q8QzJJbmZvPihpbmZvKSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgKytzdHJlYW07CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgbUNoYW5uZWwtPm9uV29ya0RvbmUoCisgICAgICAgICAgICAgICAgICAgIHN0ZDo6bW92ZSh3b3JrKSwgY2hhbmdlZCA/IGNvbmZpZy0+bU91dHB1dEZvcm1hdCA6IG51bGxwdHIsCisgICAgICAgICAgICAgICAgICAgIGluaXREYXRhLmhhc0NoYW5nZWQoKSA/IGluaXREYXRhLnVwZGF0ZSgpLmdldCgpIDogbnVsbHB0ciwKKyAgICAgICAgICAgICAgICAgICAgbnVtRGlzY2FyZGVkSW5wdXRCdWZmZXJzKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGNhc2Uga1doYXRXYXRjaDogeworICAgICAgICAgICAgLy8gd2F0Y2ggbWVzc2FnZSBhbHJlYWR5IHBvc3RlZDsgbm8tb3AuCisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBkZWZhdWx0OiB7CisgICAgICAgICAgICBBTE9HRSgidW5yZWNvZ25pemVkIG1lc3NhZ2UiKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgfQorICAgIHNldERlYWRsaW5lKFRpbWVQb2ludDo6bWF4KCksIDBtcywgIm5vbmUiKTsKK30KKwordm9pZCBDQ29kZWM6OnNldERlYWRsaW5lKAorICAgICAgICBjb25zdCBUaW1lUG9pbnQgJm5vdywKKyAgICAgICAgY29uc3Qgc3RkOjpjaHJvbm86Om1pbGxpc2Vjb25kcyAmdGltZW91dCwKKyAgICAgICAgY29uc3QgY2hhciAqbmFtZSkgeworICAgIGludDMyX3QgbXVsdCA9IHN0ZDo6bWF4KDEsIHByb3BlcnR5X2dldF9pbnQzMigiZGVidWcuc3RhZ2VmcmlnaHQuY2NvZGVjX3RpbWVvdXRfbXVsdCIsIDEpKTsKKyAgICBNdXRleGVkPE5hbWVkVGltZVBvaW50Pjo6TG9ja2VkIGRlYWRsaW5lKG1EZWFkbGluZSk7CisgICAgZGVhZGxpbmUtPnNldChub3cgKyAodGltZW91dCAqIG11bHQpLCBuYW1lKTsKK30KKwordm9pZCBDQ29kZWM6OmluaXRpYXRlUmVsZWFzZUlmU3R1Y2soKSB7CisgICAgc3RkOjpzdHJpbmcgbmFtZTsKKyAgICBib29sIHBlbmRpbmdEZWFkbGluZSA9IGZhbHNlOworICAgIGZvciAoTXV0ZXhlZDxOYW1lZFRpbWVQb2ludD4gKmRlYWRsaW5lUHRyIDogeyAmbURlYWRsaW5lLCAmbVF1ZXVlRGVhZGxpbmUsICZtRW9zRGVhZGxpbmUgfSkgeworICAgICAgICBNdXRleGVkPE5hbWVkVGltZVBvaW50Pjo6TG9ja2VkIGRlYWRsaW5lKCpkZWFkbGluZVB0cik7CisgICAgICAgIGlmIChkZWFkbGluZS0+Z2V0KCkgPCBzdGQ6OmNocm9ubzo6c3RlYWR5X2Nsb2NrOjpub3coKSkgeworICAgICAgICAgICAgbmFtZSA9IGRlYWRsaW5lLT5nZXROYW1lKCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBpZiAoZGVhZGxpbmUtPmdldCgpICE9IFRpbWVQb2ludDo6bWF4KCkpIHsKKyAgICAgICAgICAgIHBlbmRpbmdEZWFkbGluZSA9IHRydWU7CisgICAgICAgIH0KKyAgICB9CisgICAgaWYgKG5hbWUuZW1wdHkoKSkgeworICAgICAgICAvLyBXZSdyZSBub3Qgc3R1Y2suCisgICAgICAgIGlmIChwZW5kaW5nRGVhZGxpbmUpIHsKKyAgICAgICAgICAgIC8vIElmIHdlIGFyZSBub3Qgc3R1Y2sgeWV0IGJ1dCBzdGlsbCBoYXMgZGVhZGxpbmUgY29taW5nIHVwLAorICAgICAgICAgICAgLy8gcG9zdCB3YXRjaCBtZXNzYWdlIHRvIGNoZWNrIGJhY2sgbGF0ZXIuCisgICAgICAgICAgICAobmV3IEFNZXNzYWdlKGtXaGF0V2F0Y2gsIHRoaXMpKS0+cG9zdCgpOworICAgICAgICB9CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBBTE9HVygicHJldmlvdXMgY2FsbCB0byAlcyBleGNlZWRlZCB0aW1lb3V0IiwgbmFtZS5jX3N0cigpKTsKKyAgICBpbml0aWF0ZVJlbGVhc2UoZmFsc2UpOworICAgIG1DYWxsYmFjay0+b25FcnJvcihVTktOT1dOX0VSUk9SLCBBQ1RJT05fQ09ERV9GQVRBTCk7Cit9CisKK3ZvaWQgQ0NvZGVjOjpvbldvcmtRdWV1ZWQoYm9vbCBlb3MpIHsKKyAgICBBTE9HVigicXVldWVkIHdvcmsgY291bnQgKzEgZnJvbSAlZCIsIG1RdWV1ZWRXb3JrQ291bnQubG9hZCgpKTsKKyAgICBpbnQzMl90IGNvdW50ID0gKyttUXVldWVkV29ya0NvdW50OworICAgIGlmIChlb3MpIHsKKyAgICAgICAgQ0NvZGVjV2F0Y2hkb2c6OmdldEluc3RhbmNlKCktPndhdGNoKHRoaXMpOworICAgICAgICBNdXRleGVkPE5hbWVkVGltZVBvaW50Pjo6TG9ja2VkIGRlYWRsaW5lKG1Fb3NEZWFkbGluZSk7CisgICAgICAgIGRlYWRsaW5lLT5zZXQoc3RkOjpjaHJvbm86OnN0ZWFkeV9jbG9jazo6bm93KCkgKyAzcywgImVvcyIpOworICAgIH0KKyAgICAvLyBUT0RPOiBxdWVyeSBhbmQgdXNlIGlucHV0L3BpcGVsaW5lL291dHB1dCBkZWxheSBjb21iaW5lZAorICAgIGlmIChjb3VudCA+PSA4KSB7CisgICAgICAgIENDb2RlY1dhdGNoZG9nOjpnZXRJbnN0YW5jZSgpLT53YXRjaCh0aGlzKTsKKyAgICAgICAgTXV0ZXhlZDxOYW1lZFRpbWVQb2ludD46OkxvY2tlZCBkZWFkbGluZShtUXVldWVEZWFkbGluZSk7CisgICAgICAgIGRlYWRsaW5lLT5zZXQoc3RkOjpjaHJvbm86OnN0ZWFkeV9jbG9jazo6bm93KCkgKyAzcywgInF1ZXVlIik7CisgICAgfQorfQorCit2b2lkIENDb2RlYzo6c3ViUXVldWVkV29ya0NvdW50KHVpbnQzMl90IGNvdW50KSB7CisgICAgQUxPR1YoInF1ZXVlZCB3b3JrIGNvdW50IC0ldSBmcm9tICVkIiwgY291bnQsIG1RdWV1ZWRXb3JrQ291bnQubG9hZCgpKTsKKyAgICBpbnQzMl90IGN1cnJlbnRDb3VudCA9IChtUXVldWVkV29ya0NvdW50IC09IGNvdW50KTsKKyAgICBpZiAoY3VycmVudENvdW50ID09IDApIHsKKyAgICAgICAgTXV0ZXhlZDxOYW1lZFRpbWVQb2ludD46OkxvY2tlZCBkZWFkbGluZShtRW9zRGVhZGxpbmUpOworICAgICAgICBkZWFkbGluZS0+c2V0KFRpbWVQb2ludDo6bWF4KCksICJub25lIik7CisgICAgfQorICAgIE11dGV4ZWQ8TmFtZWRUaW1lUG9pbnQ+OjpMb2NrZWQgZGVhZGxpbmUobVF1ZXVlRGVhZGxpbmUpOworICAgIGRlYWRsaW5lLT5zZXQoVGltZVBvaW50OjptYXgoKSwgIm5vbmUiKTsKK30KKworfSAgLy8gbmFtZXNwYWNlIGFuZHJvaWQKKworZXh0ZXJuICJDIiBhbmRyb2lkOjpDb2RlY0Jhc2UgKkNyZWF0ZUNvZGVjKCkgeworICAgIHJldHVybiBuZXcgYW5kcm9pZDo6Q0NvZGVjOworfQorCitleHRlcm4gIkMiIGFuZHJvaWQ6OlBlcnNpc3RlbnRTdXJmYWNlICpDcmVhdGVJbnB1dFN1cmZhY2UoKSB7CisgICAgLy8gQXR0ZW1wdCB0byBjcmVhdGUgYSBDb2RlYzIncyBpbnB1dCBzdXJmYWNlLgorICAgIHN0ZDo6c2hhcmVkX3B0cjxhbmRyb2lkOjpDb2RlYzJDbGllbnQ6OklucHV0U3VyZmFjZT4gaW5wdXRTdXJmYWNlID0KKyAgICAgICAgICAgIGFuZHJvaWQ6OkNvZGVjMkNsaWVudDo6Q3JlYXRlSW5wdXRTdXJmYWNlKCk7CisgICAgaWYgKGlucHV0U3VyZmFjZSkgeworICAgICAgICByZXR1cm4gbmV3IGFuZHJvaWQ6OlBlcnNpc3RlbnRTdXJmYWNlKAorICAgICAgICAgICAgICAgIGlucHV0U3VyZmFjZS0+Z2V0R3JhcGhpY0J1ZmZlclByb2R1Y2VyKCksCisgICAgICAgICAgICAgICAgc3RhdGljX2Nhc3Q8YW5kcm9pZDo6c3A8YW5kcm9pZDo6aGlkbDo6YmFzZTo6VjFfMDo6SUJhc2U+PigKKyAgICAgICAgICAgICAgICBpbnB1dFN1cmZhY2UtPmdldEhhbEludGVyZmFjZSgpKSk7CisgICAgfQorCisgICAgLy8gRmFsbCBiYWNrIHRvIE9NWC4KKyAgICB1c2luZyBuYW1lc3BhY2UgYW5kcm9pZDo6aGFyZHdhcmU6Om1lZGlhOjpvbXg6OlYxXzA7CisgICAgdXNpbmcgbmFtZXNwYWNlIGFuZHJvaWQ6OmhhcmR3YXJlOjptZWRpYTo6b214OjpWMV8wOjp1dGlsczsKKyAgICB1c2luZyBuYW1lc3BhY2UgYW5kcm9pZDo6aGFyZHdhcmU6OmdyYXBoaWNzOjpidWZmZXJxdWV1ZTo6VjFfMDo6dXRpbHM7CisgICAgdHlwZWRlZiBhbmRyb2lkOjpoYXJkd2FyZTo6bWVkaWE6Om9teDo6VjFfMDo6U3RhdHVzIE9teFN0YXR1czsKKyAgICBhbmRyb2lkOjpzcDxJT214PiBvbXggPSBJT214OjpnZXRTZXJ2aWNlKCk7CisgICAgdHlwZWRlZiBhbmRyb2lkOjpoYXJkd2FyZTo6Z3JhcGhpY3M6OmJ1ZmZlcnF1ZXVlOjpWMV8wOjoKKyAgICAgICAgICAgIElHcmFwaGljQnVmZmVyUHJvZHVjZXIgSEdyYXBoaWNCdWZmZXJQcm9kdWNlcjsKKyAgICB0eXBlZGVmIGFuZHJvaWQ6OmhhcmR3YXJlOjptZWRpYTo6b214OjpWMV8wOjoKKyAgICAgICAgICAgIElHcmFwaGljQnVmZmVyU291cmNlIEhHcmFwaGljQnVmZmVyU291cmNlOworICAgIE9teFN0YXR1cyBzOworICAgIGFuZHJvaWQ6OnNwPEhHcmFwaGljQnVmZmVyUHJvZHVjZXI+IGdicDsKKyAgICBhbmRyb2lkOjpzcDxIR3JhcGhpY0J1ZmZlclNvdXJjZT4gZ2JzOworICAgIGFuZHJvaWQ6OlJldHVybjx2b2lkPiB0cmFuc1N0YXR1cyA9IG9teC0+Y3JlYXRlSW5wdXRTdXJmYWNlKAorICAgICAgICAgICAgWyZzLCAmZ2JwLCAmZ2JzXSgKKyAgICAgICAgICAgICAgICAgICAgT214U3RhdHVzIHN0YXR1cywKKyAgICAgICAgICAgICAgICAgICAgY29uc3QgYW5kcm9pZDo6c3A8SEdyYXBoaWNCdWZmZXJQcm9kdWNlcj4mIHByb2R1Y2VyLAorICAgICAgICAgICAgICAgICAgICBjb25zdCBhbmRyb2lkOjpzcDxIR3JhcGhpY0J1ZmZlclNvdXJjZT4mIHNvdXJjZSkgeworICAgICAgICAgICAgICAgIHMgPSBzdGF0dXM7CisgICAgICAgICAgICAgICAgZ2JwID0gcHJvZHVjZXI7CisgICAgICAgICAgICAgICAgZ2JzID0gc291cmNlOworICAgICAgICAgICAgfSk7CisgICAgaWYgKHRyYW5zU3RhdHVzLmlzT2soKSAmJiBzID09IE9teFN0YXR1czo6T0spIHsKKyAgICAgICAgcmV0dXJuIG5ldyBhbmRyb2lkOjpQZXJzaXN0ZW50U3VyZmFjZSgKKyAgICAgICAgICAgICAgICBuZXcgSDJCR3JhcGhpY0J1ZmZlclByb2R1Y2VyKGdicCksCisgICAgICAgICAgICAgICAgc3A8OjphbmRyb2lkOjpJR3JhcGhpY0J1ZmZlclNvdXJjZT4oCisgICAgICAgICAgICAgICAgICAgIG5ldyBMV0dyYXBoaWNCdWZmZXJTb3VyY2UoZ2JzKSkpOworICAgIH0KKworICAgIHJldHVybiBudWxscHRyOworfQorCmRpZmYgLS1naXQgYS9tZWRpYS9jb2RlYzIvc2ZwbHVnaW4vQ0NvZGVjLmggYi9tZWRpYS9jb2RlYzIvc2ZwbHVnaW4vQ0NvZGVjLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzhiMDA5ZQotLS0gL2Rldi9udWxsCisrKyBiL21lZGlhL2NvZGVjMi9zZnBsdWdpbi9DQ29kZWMuaApAQCAtMCwwICsxLDE4NSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNyBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCisKKyNpZm5kZWYgQ19DT0RFQ19IXworI2RlZmluZSBDX0NPREVDX0hfCisKKyNpbmNsdWRlIDxjaHJvbm8+CisjaW5jbHVkZSA8bGlzdD4KKyNpbmNsdWRlIDxtZW1vcnk+CisjaW5jbHVkZSA8c2V0PgorCisjaW5jbHVkZSA8QzJDb21wb25lbnQuaD4KKyNpbmNsdWRlIDxjb2RlYzIvaGlkbC9jbGllbnQuaD4KKworI2luY2x1ZGUgPGFuZHJvaWQvbmF0aXZlX3dpbmRvdy5oPgorI2luY2x1ZGUgPG1lZGlhL2hhcmR3YXJlL01ldGFkYXRhQnVmZmVyVHlwZS5oPgorI2luY2x1ZGUgPG1lZGlhL3N0YWdlZnJpZ2h0L2ZvdW5kYXRpb24vTXV0ZXhlZC5oPgorI2luY2x1ZGUgPG1lZGlhL3N0YWdlZnJpZ2h0L0NvZGVjQmFzZS5oPgorI2luY2x1ZGUgPG1lZGlhL3N0YWdlZnJpZ2h0L0ZyYW1lUmVuZGVyVHJhY2tlci5oPgorI2luY2x1ZGUgPG1lZGlhL3N0YWdlZnJpZ2h0L01lZGlhRGVmcy5oPgorI2luY2x1ZGUgPG1lZGlhL3N0YWdlZnJpZ2h0L1NraXBDdXRCdWZmZXIuaD4KKyNpbmNsdWRlIDx1dGlscy9OYXRpdmVIYW5kbGUuaD4KKyNpbmNsdWRlIDxoYXJkd2FyZS9ncmFsbG9jLmg+CisjaW5jbHVkZSA8bmF0aXZlYmFzZS9uYXRpdmViYXNlLmg+CisKKyNpbmNsdWRlICJDQ29kZWNDb25maWcuaCIKKworbmFtZXNwYWNlIGFuZHJvaWQgeworCitjbGFzcyBDQ29kZWNCdWZmZXJDaGFubmVsOworY2xhc3MgSW5wdXRTdXJmYWNlV3JhcHBlcjsKK3N0cnVjdCBNZWRpYUNvZGVjSW5mbzsKKworY2xhc3MgQ0NvZGVjIDogcHVibGljIENvZGVjQmFzZSB7CitwdWJsaWM6CisgICAgQ0NvZGVjKCk7CisKKyAgICB2aXJ0dWFsIHN0ZDo6c2hhcmVkX3B0cjxCdWZmZXJDaGFubmVsQmFzZT4gZ2V0QnVmZmVyQ2hhbm5lbCgpIG92ZXJyaWRlOworICAgIHZpcnR1YWwgdm9pZCBpbml0aWF0ZUFsbG9jYXRlQ29tcG9uZW50KGNvbnN0IHNwPEFNZXNzYWdlPiAmbXNnKSBvdmVycmlkZTsKKyAgICB2aXJ0dWFsIHZvaWQgaW5pdGlhdGVDb25maWd1cmVDb21wb25lbnQoY29uc3Qgc3A8QU1lc3NhZ2U+ICZtc2cpIG92ZXJyaWRlOworICAgIHZpcnR1YWwgdm9pZCBpbml0aWF0ZUNyZWF0ZUlucHV0U3VyZmFjZSgpIG92ZXJyaWRlOworICAgIHZpcnR1YWwgdm9pZCBpbml0aWF0ZVNldElucHV0U3VyZmFjZShjb25zdCBzcDxQZXJzaXN0ZW50U3VyZmFjZT4gJnN1cmZhY2UpIG92ZXJyaWRlOworICAgIHZpcnR1YWwgdm9pZCBpbml0aWF0ZVN0YXJ0KCkgb3ZlcnJpZGU7CisgICAgdmlydHVhbCB2b2lkIGluaXRpYXRlU2h1dGRvd24oYm9vbCBrZWVwQ29tcG9uZW50QWxsb2NhdGVkID0gZmFsc2UpIG92ZXJyaWRlOworCisgICAgdmlydHVhbCBzdGF0dXNfdCBzZXRTdXJmYWNlKGNvbnN0IHNwPFN1cmZhY2U+ICZzdXJmYWNlKSBvdmVycmlkZTsKKworICAgIHZpcnR1YWwgdm9pZCBzaWduYWxGbHVzaCgpIG92ZXJyaWRlOworICAgIHZpcnR1YWwgdm9pZCBzaWduYWxSZXN1bWUoKSBvdmVycmlkZTsKKworICAgIHZpcnR1YWwgdm9pZCBzaWduYWxTZXRQYXJhbWV0ZXJzKGNvbnN0IHNwPEFNZXNzYWdlPiAmcGFyYW1zKSBvdmVycmlkZTsKKyAgICB2aXJ0dWFsIHZvaWQgc2lnbmFsRW5kT2ZJbnB1dFN0cmVhbSgpIG92ZXJyaWRlOworICAgIHZpcnR1YWwgdm9pZCBzaWduYWxSZXF1ZXN0SURSRnJhbWUoKSBvdmVycmlkZTsKKworICAgIHZvaWQgaW5pdGlhdGVSZWxlYXNlSWZTdHVjaygpOworICAgIHZvaWQgb25Xb3JrRG9uZShzdGQ6Omxpc3Q8c3RkOjp1bmlxdWVfcHRyPEMyV29yaz4+ICZ3b3JrSXRlbXMsCisgICAgICAgICAgICAgICAgICAgIHNpemVfdCBudW1EaXNjYXJkZWRJbnB1dEJ1ZmZlcnMpOworICAgIHZvaWQgb25JbnB1dEJ1ZmZlckRvbmUoY29uc3Qgc3RkOjpzaGFyZWRfcHRyPEMyQnVmZmVyPiYgYnVmZmVyKTsKKworcHJvdGVjdGVkOgorICAgIHZpcnR1YWwgfkNDb2RlYygpOworCisgICAgdmlydHVhbCB2b2lkIG9uTWVzc2FnZVJlY2VpdmVkKGNvbnN0IHNwPEFNZXNzYWdlPiAmbXNnKSBvdmVycmlkZTsKKworcHJpdmF0ZToKKyAgICB0eXBlZGVmIHN0ZDo6Y2hyb25vOjp0aW1lX3BvaW50PHN0ZDo6Y2hyb25vOjpzdGVhZHlfY2xvY2s+IFRpbWVQb2ludDsKKworICAgIHN0YXR1c190IHRyeUFuZFJlcG9ydE9uRXJyb3Ioc3RkOjpmdW5jdGlvbjxzdGF0dXNfdCgpPiBqb2IpOworCisgICAgdm9pZCBpbml0aWF0ZVN0b3AoKTsKKyAgICB2b2lkIGluaXRpYXRlUmVsZWFzZShib29sIHNlbmRDYWxsYmFjayA9IHRydWUpOworCisgICAgdm9pZCBhbGxvY2F0ZShjb25zdCBzcDxNZWRpYUNvZGVjSW5mbz4gJmNvZGVjSW5mbyk7CisgICAgdm9pZCBjb25maWd1cmUoY29uc3Qgc3A8QU1lc3NhZ2U+ICZtc2cpOworICAgIHZvaWQgc3RhcnQoKTsKKyAgICB2b2lkIHN0b3AoKTsKKyAgICB2b2lkIGZsdXNoKCk7CisgICAgdm9pZCByZWxlYXNlKGJvb2wgc2VuZENhbGxiYWNrKTsKKworICAgIHZvaWQgY3JlYXRlSW5wdXRTdXJmYWNlKCk7CisgICAgdm9pZCBzZXRJbnB1dFN1cmZhY2UoY29uc3Qgc3A8UGVyc2lzdGVudFN1cmZhY2U+ICZzdXJmYWNlKTsKKyAgICBzdGF0dXNfdCBzZXR1cElucHV0U3VyZmFjZShjb25zdCBzdGQ6OnNoYXJlZF9wdHI8SW5wdXRTdXJmYWNlV3JhcHBlcj4gJnN1cmZhY2UpOworICAgIHZvaWQgc2V0UGFyYW1ldGVycyhjb25zdCBzcDxBTWVzc2FnZT4gJnBhcmFtcyk7CisKKyAgICB2b2lkIHNldERlYWRsaW5lKAorICAgICAgICAgICAgY29uc3QgVGltZVBvaW50ICZub3csCisgICAgICAgICAgICBjb25zdCBzdGQ6OmNocm9ubzo6bWlsbGlzZWNvbmRzICZ0aW1lb3V0LAorICAgICAgICAgICAgY29uc3QgY2hhciAqbmFtZSk7CisKKyAgICB2b2lkIG9uV29ya1F1ZXVlZChib29sIGVvcyk7CisgICAgdm9pZCBzdWJRdWV1ZWRXb3JrQ291bnQodWludDMyX3QgY291bnQpOworCisgICAgZW51bSB7CisgICAgICAgIGtXaGF0QWxsb2NhdGUsCisgICAgICAgIGtXaGF0Q29uZmlndXJlLAorICAgICAgICBrV2hhdFN0YXJ0LAorICAgICAgICBrV2hhdEZsdXNoLAorICAgICAgICBrV2hhdFN0b3AsCisgICAgICAgIGtXaGF0UmVsZWFzZSwKKyAgICAgICAga1doYXRDcmVhdGVJbnB1dFN1cmZhY2UsCisgICAgICAgIGtXaGF0U2V0SW5wdXRTdXJmYWNlLAorICAgICAgICBrV2hhdFNldFBhcmFtZXRlcnMsCisKKyAgICAgICAga1doYXRXb3JrRG9uZSwKKyAgICAgICAga1doYXRXYXRjaCwKKyAgICB9OworCisgICAgZW51bSB7CisgICAgICAgIFJFTEVBU0VELAorICAgICAgICBBTExPQ0FURUQsCisgICAgICAgIEZMVVNIRUQsCisgICAgICAgIFJVTk5JTkcsCisKKyAgICAgICAgQUxMT0NBVElORywgIC8vIFJFTEVBU0VEIC0+IEFMTE9DQVRFRAorICAgICAgICBTVEFSVElORywgICAgLy8gQUxMT0NBVEVEIC0+IFJVTk5JTkcKKyAgICAgICAgU1RPUFBJTkcsICAgIC8vIFJVTk5JTkcgLT4gQUxMT0NBVEVECisgICAgICAgIEZMVVNISU5HLCAgICAvLyBSVU5OSU5HIC0+IEZMVVNIRUQKKyAgICAgICAgUkVTVU1JTkcsICAgIC8vIEZMVVNIRUQgLT4gUlVOTklORworICAgICAgICBSRUxFQVNJTkcsICAgLy8ge0FOWSBFWENFUFQgUkVMRUFTRUR9IC0+IFJFTEVBU0VECisgICAgfTsKKworICAgIHN0cnVjdCBTdGF0ZSB7CisgICAgICAgIGlubGluZSBTdGF0ZSgpIDogbVN0YXRlKFJFTEVBU0VEKSB7fQorICAgICAgICBpbmxpbmUgaW50IGdldCgpIGNvbnN0IHsgcmV0dXJuIG1TdGF0ZTsgfQorICAgICAgICBpbmxpbmUgdm9pZCBzZXQoaW50IG5ld1N0YXRlKSB7IG1TdGF0ZSA9IG5ld1N0YXRlOyB9CisKKyAgICAgICAgc3RkOjpzaGFyZWRfcHRyPENvZGVjMkNsaWVudDo6Q29tcG9uZW50PiBjb21wOworICAgIHByaXZhdGU6CisgICAgICAgIGludCBtU3RhdGU7CisgICAgfTsKKworICAgIHN0cnVjdCBOYW1lZFRpbWVQb2ludCB7CisgICAgICAgIE5hbWVkVGltZVBvaW50KCkgOiBtVGltZVBvaW50KFRpbWVQb2ludDo6bWF4KCkpLCBtTmFtZSgiIikge30KKworICAgICAgICBpbmxpbmUgdm9pZCBzZXQoCisgICAgICAgICAgICAgICAgY29uc3QgVGltZVBvaW50ICZ0aW1lUG9pbnQsCisgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqbmFtZSkgeworICAgICAgICAgICAgbVRpbWVQb2ludCA9IHRpbWVQb2ludDsKKyAgICAgICAgICAgIG1OYW1lID0gbmFtZTsKKyAgICAgICAgfQorCisgICAgICAgIGlubGluZSBUaW1lUG9pbnQgZ2V0KCkgY29uc3QgeyByZXR1cm4gbVRpbWVQb2ludDsgfQorICAgICAgICBpbmxpbmUgY29uc3QgY2hhciAqZ2V0TmFtZSgpIGNvbnN0IHsgcmV0dXJuIG1OYW1lOyB9CisgICAgcHJpdmF0ZToKKyAgICAgICAgVGltZVBvaW50IG1UaW1lUG9pbnQ7CisgICAgICAgIGNvbnN0IGNoYXIgKm1OYW1lOworICAgIH07CisKKyAgICBNdXRleGVkPFN0YXRlPiBtU3RhdGU7CisgICAgc3RkOjpzaGFyZWRfcHRyPENDb2RlY0J1ZmZlckNoYW5uZWw+IG1DaGFubmVsOworCisgICAgc3RkOjpzaGFyZWRfcHRyPENvZGVjMkNsaWVudD4gbUNsaWVudDsKKyAgICBzdGQ6OnNoYXJlZF9wdHI8Q29kZWMyQ2xpZW50OjpMaXN0ZW5lcj4gbUNsaWVudExpc3RlbmVyOworICAgIHN0cnVjdCBDbGllbnRMaXN0ZW5lcjsKKworICAgIE11dGV4ZWQ8TmFtZWRUaW1lUG9pbnQ+IG1EZWFkbGluZTsKKyAgICBzdGQ6OmF0b21pY19pbnQzMl90IG1RdWV1ZWRXb3JrQ291bnQ7CisgICAgTXV0ZXhlZDxOYW1lZFRpbWVQb2ludD4gbVF1ZXVlRGVhZGxpbmU7CisgICAgTXV0ZXhlZDxOYW1lZFRpbWVQb2ludD4gbUVvc0RlYWRsaW5lOworICAgIHR5cGVkZWYgQ0NvZGVjQ29uZmlnIENvbmZpZzsKKyAgICBNdXRleGVkPENvbmZpZz4gbUNvbmZpZzsKKyAgICBNdXRleGVkPHN0ZDo6bGlzdDxzdGQ6OnVuaXF1ZV9wdHI8QzJXb3JrPj4+IG1Xb3JrRG9uZVF1ZXVlOworICAgIE11dGV4ZWQ8c3RkOjpsaXN0PHNpemVfdD4+IG1OdW1EaXNjYXJkZWRJbnB1dEJ1ZmZlcnNRdWV1ZTsKKworICAgIGZyaWVuZCBjbGFzcyBDQ29kZWNDYWxsYmFja0ltcGw7CisKKyAgICBESVNBTExPV19FVklMX0NPTlNUUlVDVE9SUyhDQ29kZWMpOworfTsKKworfSAgLy8gbmFtZXNwYWNlIGFuZHJvaWQKKworI2VuZGlmICAvLyBDX0NPREVDX0hfCmRpZmYgLS1naXQgYS9tZWRpYS9jb2RlYzIvc2ZwbHVnaW4vQ0NvZGVjQnVmZmVyQ2hhbm5lbC5jcHAgYi9tZWRpYS9jb2RlYzIvc2ZwbHVnaW4vQ0NvZGVjQnVmZmVyQ2hhbm5lbC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDFiOWMxZQotLS0gL2Rldi9udWxsCisrKyBiL21lZGlhL2NvZGVjMi9zZnBsdWdpbi9DQ29kZWNCdWZmZXJDaGFubmVsLmNwcApAQCAtMCwwICsxLDI3OTEgQEAKKy8qCisgKiBDb3B5cmlnaHQgMjAxNywgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCisKKy8vI2RlZmluZSBMT0dfTkRFQlVHIDAKKyNkZWZpbmUgTE9HX1RBRyAiQ0NvZGVjQnVmZmVyQ2hhbm5lbCIKKyNpbmNsdWRlIDx1dGlscy9Mb2cuaD4KKworI2luY2x1ZGUgPG51bWVyaWM+CisKKyNpbmNsdWRlIDxDMkFsbG9jYXRvckdyYWxsb2MuaD4KKyNpbmNsdWRlIDxDMlBsYXRmb3JtU3VwcG9ydC5oPgorI2luY2x1ZGUgPEMyQmxvY2tJbnRlcm5hbC5oPgorI2luY2x1ZGUgPEMyQ29uZmlnLmg+CisjaW5jbHVkZSA8QzJEZWJ1Zy5oPgorCisjaW5jbHVkZSA8YW5kcm9pZC9oYXJkd2FyZS9jYXMvbmF0aXZlLzEuMC9JRGVzY3JhbWJsZXIuaD4KKyNpbmNsdWRlIDxhbmRyb2lkLWJhc2Uvc3RyaW5ncHJpbnRmLmg+CisjaW5jbHVkZSA8YmluZGVyL01lbW9yeURlYWxlci5oPgorI2luY2x1ZGUgPGd1aS9TdXJmYWNlLmg+CisjaW5jbHVkZSA8bWVkaWEvb3Blbm1heC9PTVhfQ29yZS5oPgorI2luY2x1ZGUgPG1lZGlhL3N0YWdlZnJpZ2h0L2ZvdW5kYXRpb24vQUJ1ZmZlci5oPgorI2luY2x1ZGUgPG1lZGlhL3N0YWdlZnJpZ2h0L2ZvdW5kYXRpb24vQUxvb2t1cC5oPgorI2luY2x1ZGUgPG1lZGlhL3N0YWdlZnJpZ2h0L2ZvdW5kYXRpb24vQU1lc3NhZ2UuaD4KKyNpbmNsdWRlIDxtZWRpYS9zdGFnZWZyaWdodC9mb3VuZGF0aW9uL0FVdGlscy5oPgorI2luY2x1ZGUgPG1lZGlhL3N0YWdlZnJpZ2h0L2ZvdW5kYXRpb24vaGV4ZHVtcC5oPgorI2luY2x1ZGUgPG1lZGlhL3N0YWdlZnJpZ2h0L01lZGlhQ29kZWMuaD4KKyNpbmNsdWRlIDxtZWRpYS9zdGFnZWZyaWdodC9NZWRpYUNvZGVjQ29uc3RhbnRzLmg+CisjaW5jbHVkZSA8bWVkaWEvTWVkaWFDb2RlY0J1ZmZlci5oPgorI2luY2x1ZGUgPHN5c3RlbS93aW5kb3cuaD4KKworI2luY2x1ZGUgIkNDb2RlY0J1ZmZlckNoYW5uZWwuaCIKKyNpbmNsdWRlICJDb2RlYzJCdWZmZXIuaCIKKyNpbmNsdWRlICJTa2lwQ3V0QnVmZmVyLmgiCisKK25hbWVzcGFjZSBhbmRyb2lkIHsKKwordXNpbmcgYW5kcm9pZDo6YmFzZTo6U3RyaW5nUHJpbnRmOwordXNpbmcgaGFyZHdhcmU6OmhpZGxfaGFuZGxlOwordXNpbmcgaGFyZHdhcmU6OmhpZGxfc3RyaW5nOwordXNpbmcgaGFyZHdhcmU6OmhpZGxfdmVjOwordXNpbmcgbmFtZXNwYWNlIGhhcmR3YXJlOjpjYXM6OlYxXzA7Cit1c2luZyBuYW1lc3BhY2UgaGFyZHdhcmU6OmNhczo6bmF0aXZlOjpWMV8wOworCit1c2luZyBDYXNTdGF0dXMgPSBoYXJkd2FyZTo6Y2FzOjpWMV8wOjpTdGF0dXM7CisKKy8qKgorICogQmFzZSBjbGFzcyBmb3IgcmVwcmVzZW50YXRpb24gb2YgYnVmZmVycyBhdCBvbmUgcG9ydC4KKyAqLworY2xhc3MgQ0NvZGVjQnVmZmVyQ2hhbm5lbDo6QnVmZmVycyB7CitwdWJsaWM6CisgICAgQnVmZmVycyhjb25zdCBjaGFyICpjb21wb25lbnROYW1lLCBjb25zdCBjaGFyICpuYW1lID0gIkJ1ZmZlcnMiKQorICAgICAgICA6IG1Db21wb25lbnROYW1lKGNvbXBvbmVudE5hbWUpLAorICAgICAgICAgIG1DaGFubmVsTmFtZShzdGQ6OnN0cmluZyhjb21wb25lbnROYW1lKSArICI6IiArIG5hbWUpLAorICAgICAgICAgIG1OYW1lKG1DaGFubmVsTmFtZS5jX3N0cigpKSB7CisgICAgfQorICAgIHZpcnR1YWwgfkJ1ZmZlcnMoKSA9IGRlZmF1bHQ7CisKKyAgICAvKioKKyAgICAgKiBTZXQgZm9ybWF0IGZvciBNZWRpYUNvZGVjLWZhY2luZyBidWZmZXJzLgorICAgICAqLworICAgIHZvaWQgc2V0Rm9ybWF0KGNvbnN0IHNwPEFNZXNzYWdlPiAmZm9ybWF0KSB7CisgICAgICAgIENIRUNLKGZvcm1hdCAhPSBudWxscHRyKTsKKyAgICAgICAgbUZvcm1hdCA9IGZvcm1hdDsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBSZXR1cm4gYSBjb3B5IG9mIGN1cnJlbnQgZm9ybWF0LgorICAgICAqLworICAgIHNwPEFNZXNzYWdlPiBkdXBGb3JtYXQoKSB7CisgICAgICAgIHJldHVybiBtRm9ybWF0ICE9IG51bGxwdHIgPyBtRm9ybWF0LT5kdXAoKSA6IG51bGxwdHI7CisgICAgfQorCisgICAgLyoqCisgICAgICogUmV0dXJucyB0cnVlIGlmIHRoZSBidWZmZXJzIGFyZSBvcGVyYXRpbmcgdW5kZXIgYXJyYXkgbW9kZS4KKyAgICAgKi8KKyAgICB2aXJ0dWFsIGJvb2wgaXNBcnJheU1vZGUoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQorCisgICAgLyoqCisgICAgICogRmlsbHMgdGhlIHZlY3RvciB3aXRoIE1lZGlhQ29kZWNCdWZmZXIncyBpZiBpbiBhcnJheSBtb2RlOyBvdGhlcndpc2UsCisgICAgICogbm8tb3AuCisgICAgICovCisgICAgdmlydHVhbCB2b2lkIGdldEFycmF5KFZlY3RvcjxzcDxNZWRpYUNvZGVjQnVmZmVyPj4gKikgY29uc3Qge30KKworcHJvdGVjdGVkOgorICAgIHN0ZDo6c3RyaW5nIG1Db21wb25lbnROYW1lOyAvLy88IG5hbWUgb2YgY29tcG9uZW50IGZvciBkZWJ1Z2dpbmcKKyAgICBzdGQ6OnN0cmluZyBtQ2hhbm5lbE5hbWU7IC8vLzwgbmFtZSBvZiBjaGFubmVsIGZvciBkZWJ1Z2dpbmcKKyAgICBjb25zdCBjaGFyICptTmFtZTsgLy8vPCBDLXN0cmluZyB2ZXJzaW9uIG9mIGNoYW5uZWwgbmFtZQorICAgIC8vIEZvcm1hdCB0byBiZSB1c2VkIGZvciBjcmVhdGluZyBNZWRpYUNvZGVjLWZhY2luZyBidWZmZXJzLgorICAgIHNwPEFNZXNzYWdlPiBtRm9ybWF0OworCitwcml2YXRlOgorICAgIERJU0FMTE9XX0VWSUxfQ09OU1RSVUNUT1JTKEJ1ZmZlcnMpOworfTsKKworY2xhc3MgQ0NvZGVjQnVmZmVyQ2hhbm5lbDo6SW5wdXRCdWZmZXJzIDogcHVibGljIENDb2RlY0J1ZmZlckNoYW5uZWw6OkJ1ZmZlcnMgeworcHVibGljOgorICAgIElucHV0QnVmZmVycyhjb25zdCBjaGFyICpjb21wb25lbnROYW1lLCBjb25zdCBjaGFyICpuYW1lID0gIklucHV0W10iKQorICAgICAgICA6IEJ1ZmZlcnMoY29tcG9uZW50TmFtZSwgbmFtZSkgeyB9CisgICAgdmlydHVhbCB+SW5wdXRCdWZmZXJzKCkgPSBkZWZhdWx0OworCisgICAgLyoqCisgICAgICogU2V0IGEgYmxvY2sgcG9vbCB0byBvYnRhaW4gaW5wdXQgbWVtb3J5IGJsb2Nrcy4KKyAgICAgKi8KKyAgICB2b2lkIHNldFBvb2woY29uc3Qgc3RkOjpzaGFyZWRfcHRyPEMyQmxvY2tQb29sPiAmcG9vbCkgeyBtUG9vbCA9IHBvb2w7IH0KKworICAgIC8qKgorICAgICAqIEdldCBhIG5ldyBNZWRpYUNvZGVjQnVmZmVyIGZvciBpbnB1dCBhbmQgaXRzIGNvcnJlc3BvbmRpbmcgaW5kZXguCisgICAgICogUmV0dXJucyBmYWxzZSBpZiBubyBuZXcgYnVmZmVyIGNhbiBiZSBvYnRhaW5lZCBhdCB0aGUgbW9tZW50LgorICAgICAqLworICAgIHZpcnR1YWwgYm9vbCByZXF1ZXN0TmV3QnVmZmVyKHNpemVfdCAqaW5kZXgsIHNwPE1lZGlhQ29kZWNCdWZmZXI+ICpidWZmZXIpID0gMDsKKworICAgIC8qKgorICAgICAqIFJlbGVhc2UgdGhlIGJ1ZmZlciBvYnRhaW5lZCBmcm9tIHJlcXVlc3ROZXdCdWZmZXIoKSBhbmQgZ2V0IHRoZQorICAgICAqIGFzc29jaWF0ZWQgQzJCdWZmZXIgb2JqZWN0IGJhY2suIFJldHVybnMgdHJ1ZSBpZiB0aGUgYnVmZmVyIHdhcyBvbiBmaWxlCisgICAgICogYW5kIHJlbGVhc2VkIHN1Y2Nlc3NmdWxseS4KKyAgICAgKi8KKyAgICB2aXJ0dWFsIGJvb2wgcmVsZWFzZUJ1ZmZlcigKKyAgICAgICAgICAgIGNvbnN0IHNwPE1lZGlhQ29kZWNCdWZmZXI+ICZidWZmZXIsIHN0ZDo6c2hhcmVkX3B0cjxDMkJ1ZmZlcj4gKmMyYnVmZmVyKSA9IDA7CisKKyAgICAvKioKKyAgICAgKiBSZWxlYXNlIHRoZSBidWZmZXIgdGhhdCBpcyBubyBsb25nZXIgdXNlZCBieSB0aGUgY29kZWMgcHJvY2Vzcy4gUmV0dXJuCisgICAgICogdHJ1ZSBpZiBhbmQgb25seSBpZiB0aGUgYnVmZmVyIHdhcyBvbiBmaWxlIGFuZCByZWxlYXNlZCBzdWNjZXNzZnVsbHkuCisgICAgICovCisgICAgdmlydHVhbCBib29sIGV4cGlyZUNvbXBvbmVudEJ1ZmZlcigKKyAgICAgICAgICAgIGNvbnN0IHN0ZDo6c2hhcmVkX3B0cjxDMkJ1ZmZlcj4gJmMyYnVmZmVyKSA9IDA7CisKKyAgICAvKioKKyAgICAgKiBGbHVzaCBpbnRlcm5hbCBzdGF0ZS4gQWZ0ZXIgdGhpcyBjYWxsLCBubyBpbmRleCBvciBidWZmZXIgcHJldmlvdXNseQorICAgICAqIHJldHVybmVkIGZyb20gcmVxdWVzdE5ld0J1ZmZlcigpIGlzIHZhbGlkLgorICAgICAqLworICAgIHZpcnR1YWwgdm9pZCBmbHVzaCgpID0gMDsKKworICAgIC8qKgorICAgICAqIFJldHVybiBhcnJheS1iYWNrZWQgdmVyc2lvbiBvZiBpbnB1dCBidWZmZXJzLiBUaGUgcmV0dXJuZWQgb2JqZWN0CisgICAgICogc2hhbGwgcmV0YWluIHRoZSBpbnRlcm5hbCBzdGF0ZSBzbyB0aGF0IGl0IHdpbGwgaG9ub3IgaW5kZXggYW5kCisgICAgICogYnVmZmVyIGZyb20gcHJldmlvdXMgY2FsbHMgb2YgcmVxdWVzdE5ld0J1ZmZlcigpLgorICAgICAqLworICAgIHZpcnR1YWwgc3RkOjp1bmlxdWVfcHRyPElucHV0QnVmZmVycz4gdG9BcnJheU1vZGUoc2l6ZV90IHNpemUpID0gMDsKKworcHJvdGVjdGVkOgorICAgIC8vIFBvb2wgdG8gb2J0YWluIGJsb2NrcyBmb3IgaW5wdXQgYnVmZmVycy4KKyAgICBzdGQ6OnNoYXJlZF9wdHI8QzJCbG9ja1Bvb2w+IG1Qb29sOworCitwcml2YXRlOgorICAgIERJU0FMTE9XX0VWSUxfQ09OU1RSVUNUT1JTKElucHV0QnVmZmVycyk7Cit9OworCitjbGFzcyBDQ29kZWNCdWZmZXJDaGFubmVsOjpPdXRwdXRCdWZmZXJzIDogcHVibGljIENDb2RlY0J1ZmZlckNoYW5uZWw6OkJ1ZmZlcnMgeworcHVibGljOgorICAgIE91dHB1dEJ1ZmZlcnMoY29uc3QgY2hhciAqY29tcG9uZW50TmFtZSwgY29uc3QgY2hhciAqbmFtZSA9ICJPdXRwdXQiKQorICAgICAgICA6IEJ1ZmZlcnMoY29tcG9uZW50TmFtZSwgbmFtZSkgeyB9CisgICAgdmlydHVhbCB+T3V0cHV0QnVmZmVycygpID0gZGVmYXVsdDsKKworICAgIC8qKgorICAgICAqIFJlZ2lzdGVyIG91dHB1dCBDMkJ1ZmZlciBmcm9tIHRoZSBjb21wb25lbnQgYW5kIG9idGFpbiBjb3JyZXNwb25kaW5nCisgICAgICogaW5kZXggYW5kIE1lZGlhQ29kZWNCdWZmZXIgb2JqZWN0LiBSZXR1cm5zIGZhbHNlIGlmIHJlZ2lzdHJhdGlvbgorICAgICAqIGZhaWxzLgorICAgICAqLworICAgIHZpcnR1YWwgc3RhdHVzX3QgcmVnaXN0ZXJCdWZmZXIoCisgICAgICAgICAgICBjb25zdCBzdGQ6OnNoYXJlZF9wdHI8QzJCdWZmZXI+ICZidWZmZXIsCisgICAgICAgICAgICBzaXplX3QgKmluZGV4LAorICAgICAgICAgICAgc3A8TWVkaWFDb2RlY0J1ZmZlcj4gKmNsaWVudEJ1ZmZlcikgPSAwOworCisgICAgLyoqCisgICAgICogUmVnaXN0ZXIgY29kZWMgc3BlY2lmaWMgZGF0YSBhcyBhIGJ1ZmZlciB0byBiZSBjb25zaXN0ZW50IHdpdGgKKyAgICAgKiBNZWRpYUNvZGVjIGJlaGF2aW9yLgorICAgICAqLworICAgIHZpcnR1YWwgc3RhdHVzX3QgcmVnaXN0ZXJDc2QoCisgICAgICAgICAgICBjb25zdCBDMlN0cmVhbUNzZEluZm86Om91dHB1dCAqIC8qIGNzZCAqLywKKyAgICAgICAgICAgIHNpemVfdCAqIC8qIGluZGV4ICovLAorICAgICAgICAgICAgc3A8TWVkaWFDb2RlY0J1ZmZlcj4gKiAvKiBjbGllbnRCdWZmZXIgKi8pID0gMDsKKworICAgIC8qKgorICAgICAqIFJlbGVhc2UgdGhlIGJ1ZmZlciBvYnRhaW5lZCBmcm9tIHJlZ2lzdGVyQnVmZmVyKCkgYW5kIGdldCB0aGUKKyAgICAgKiBhc3NvY2lhdGVkIEMyQnVmZmVyIG9iamVjdCBiYWNrLiBSZXR1cm5zIHRydWUgaWYgdGhlIGJ1ZmZlciB3YXMgb24gZmlsZQorICAgICAqIGFuZCByZWxlYXNlZCBzdWNjZXNzZnVsbHkuCisgICAgICovCisgICAgdmlydHVhbCBib29sIHJlbGVhc2VCdWZmZXIoCisgICAgICAgICAgICBjb25zdCBzcDxNZWRpYUNvZGVjQnVmZmVyPiAmYnVmZmVyLCBzdGQ6OnNoYXJlZF9wdHI8QzJCdWZmZXI+ICpjMmJ1ZmZlcikgPSAwOworCisgICAgLyoqCisgICAgICogRmx1c2ggaW50ZXJuYWwgc3RhdGUuIEFmdGVyIHRoaXMgY2FsbCwgbm8gaW5kZXggb3IgYnVmZmVyIHByZXZpb3VzbHkKKyAgICAgKiByZXR1cm5lZCBmcm9tIHJlZ2lzdGVyQnVmZmVyKCkgaXMgdmFsaWQuCisgICAgICovCisgICAgdmlydHVhbCB2b2lkIGZsdXNoKGNvbnN0IHN0ZDo6bGlzdDxzdGQ6OnVuaXF1ZV9wdHI8QzJXb3JrPj4gJmZsdXNoZWRXb3JrKSA9IDA7CisKKyAgICAvKioKKyAgICAgKiBSZXR1cm4gYXJyYXktYmFja2VkIHZlcnNpb24gb2Ygb3V0cHV0IGJ1ZmZlcnMuIFRoZSByZXR1cm5lZCBvYmplY3QKKyAgICAgKiBzaGFsbCByZXRhaW4gdGhlIGludGVybmFsIHN0YXRlIHNvIHRoYXQgaXQgd2lsbCBob25vciBpbmRleCBhbmQKKyAgICAgKiBidWZmZXIgZnJvbSBwcmV2aW91cyBjYWxscyBvZiByZWdpc3RlckJ1ZmZlcigpLgorICAgICAqLworICAgIHZpcnR1YWwgc3RkOjp1bmlxdWVfcHRyPE91dHB1dEJ1ZmZlcnM+IHRvQXJyYXlNb2RlKHNpemVfdCBzaXplKSA9IDA7CisKKyAgICAvKioKKyAgICAgKiBJbml0aWFsaXplIFNraXBDdXRCdWZmZXIgb2JqZWN0LgorICAgICAqLworICAgIHZvaWQgaW5pdFNraXBDdXRCdWZmZXIoCisgICAgICAgICAgICBpbnQzMl90IGRlbGF5LCBpbnQzMl90IHBhZGRpbmcsIGludDMyX3Qgc2FtcGxlUmF0ZSwgaW50MzJfdCBjaGFubmVsQ291bnQpIHsKKyAgICAgICAgQ0hFQ0sobVNraXBDdXRCdWZmZXIgPT0gbnVsbHB0cik7CisgICAgICAgIG1EZWxheSA9IGRlbGF5OworICAgICAgICBtUGFkZGluZyA9IHBhZGRpbmc7CisgICAgICAgIG1TYW1wbGVSYXRlID0gc2FtcGxlUmF0ZTsKKyAgICAgICAgc2V0U2tpcEN1dEJ1ZmZlcihkZWxheSwgcGFkZGluZywgY2hhbm5lbENvdW50KTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBVcGRhdGUgdGhlIFNraXBDdXRCdWZmZXIgb2JqZWN0LiBOby1vcCBpZiBpdCdzIG5ldmVyIGluaXRpYWxpemVkLgorICAgICAqLworICAgIHZvaWQgdXBkYXRlU2tpcEN1dEJ1ZmZlcihpbnQzMl90IHNhbXBsZVJhdGUsIGludDMyX3QgY2hhbm5lbENvdW50KSB7CisgICAgICAgIGlmIChtU2tpcEN1dEJ1ZmZlciA9PSBudWxscHRyKSB7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgaW50MzJfdCBkZWxheSA9IG1EZWxheTsKKyAgICAgICAgaW50MzJfdCBwYWRkaW5nID0gbVBhZGRpbmc7CisgICAgICAgIGlmIChzYW1wbGVSYXRlICE9IG1TYW1wbGVSYXRlKSB7CisgICAgICAgICAgICBkZWxheSA9ICgoaW50NjRfdClkZWxheSAqIHNhbXBsZVJhdGUpIC8gbVNhbXBsZVJhdGU7CisgICAgICAgICAgICBwYWRkaW5nID0gKChpbnQ2NF90KXBhZGRpbmcgKiBzYW1wbGVSYXRlKSAvIG1TYW1wbGVSYXRlOworICAgICAgICB9CisgICAgICAgIHNldFNraXBDdXRCdWZmZXIoZGVsYXksIHBhZGRpbmcsIGNoYW5uZWxDb3VudCk7CisgICAgfQorCisgICAgLyoqCisgICAgICogU3VibWl0IGJ1ZmZlciB0byBTa2lwQ3V0QnVmZmVyIG9iamVjdCwgaWYgaW5pdGlhbGl6ZWQuCisgICAgICovCisgICAgdm9pZCBzdWJtaXQoY29uc3Qgc3A8TWVkaWFDb2RlY0J1ZmZlcj4gJmJ1ZmZlcikgeworICAgICAgICBpZiAobVNraXBDdXRCdWZmZXIgIT0gbnVsbHB0cikgeworICAgICAgICAgICAgbVNraXBDdXRCdWZmZXItPnN1Ym1pdChidWZmZXIpOworICAgICAgICB9CisgICAgfQorCisgICAgLyoqCisgICAgICogVHJhbnNmZXIgU2tpcEN1dEJ1ZmZlciBvYmplY3QgdG8gdGhlIG90aGVyIEJ1ZmZlcnMgb2JqZWN0LgorICAgICAqLworICAgIHZvaWQgdHJhbnNmZXJTa2lwQ3V0QnVmZmVyKGNvbnN0IHNwPFNraXBDdXRCdWZmZXI+ICZzY2IpIHsKKyAgICAgICAgbVNraXBDdXRCdWZmZXIgPSBzY2I7CisgICAgfQorCitwcm90ZWN0ZWQ6CisgICAgc3A8U2tpcEN1dEJ1ZmZlcj4gbVNraXBDdXRCdWZmZXI7CisKK3ByaXZhdGU6CisgICAgaW50MzJfdCBtRGVsYXk7CisgICAgaW50MzJfdCBtUGFkZGluZzsKKyAgICBpbnQzMl90IG1TYW1wbGVSYXRlOworCisgICAgdm9pZCBzZXRTa2lwQ3V0QnVmZmVyKGludDMyX3Qgc2tpcCwgaW50MzJfdCBjdXQsIGludDMyX3QgY2hhbm5lbENvdW50KSB7CisgICAgICAgIGlmIChtU2tpcEN1dEJ1ZmZlciAhPSBudWxscHRyKSB7CisgICAgICAgICAgICBzaXplX3QgcHJldlNpemUgPSBtU2tpcEN1dEJ1ZmZlci0+c2l6ZSgpOworICAgICAgICAgICAgaWYgKHByZXZTaXplICE9IDB1KSB7CisgICAgICAgICAgICAgICAgQUxPR0QoIlslc10gUmVwbGFjaW5nIFNraXBDdXRCdWZmZXIgaG9sZGluZyAlenUgYnl0ZXMiLCBtTmFtZSwgcHJldlNpemUpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIG1Ta2lwQ3V0QnVmZmVyID0gbmV3IFNraXBDdXRCdWZmZXIoc2tpcCwgY3V0LCBjaGFubmVsQ291bnQpOworICAgIH0KKworICAgIERJU0FMTE9XX0VWSUxfQ09OU1RSVUNUT1JTKE91dHB1dEJ1ZmZlcnMpOworfTsKKworbmFtZXNwYWNlIHsKKworLy8gVE9ETzogZ2V0IHRoaXMgaW5mbyBmcm9tIGNvbXBvbmVudAorY29uc3Qgc3RhdGljIHNpemVfdCBrTWluSW5wdXRCdWZmZXJBcnJheVNpemUgPSA0OworY29uc3Qgc3RhdGljIHNpemVfdCBrTWF4UGlwZWxpbmVDYXBhY2l0eSA9IDE4OworY29uc3Qgc3RhdGljIHNpemVfdCBrQ2hhbm5lbE91dHB1dERlbGF5ID0gMDsKK2NvbnN0IHN0YXRpYyBzaXplX3Qga01pbk91dHB1dEJ1ZmZlckFycmF5U2l6ZSA9IGtNYXhQaXBlbGluZUNhcGFjaXR5ICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtDaGFubmVsT3V0cHV0RGVsYXk7Citjb25zdCBzdGF0aWMgc2l6ZV90IGtMaW5lYXJCdWZmZXJTaXplID0gMTA0ODU3NjsKKy8vIFRoaXMgY2FuIGZpdCA0SyBSR0JBIGZyYW1lLCBhbmQgbW9zdCBsaWtlbHkgY2xpZW50IHdvbid0IG5lZWQgbW9yZSB0aGFuIHRoaXMuCitjb25zdCBzdGF0aWMgc2l6ZV90IGtNYXhMaW5lYXJCdWZmZXJTaXplID0gMzg0MCAqIDIxNjAgKiA0OworCisvKioKKyAqIFNpbXBsZSBsb2NhbCBidWZmZXIgcG9vbCBiYWNrZWQgYnkgc3RkOjp2ZWN0b3IuCisgKi8KK2NsYXNzIExvY2FsQnVmZmVyUG9vbCA6IHB1YmxpYyBzdGQ6OmVuYWJsZV9zaGFyZWRfZnJvbV90aGlzPExvY2FsQnVmZmVyUG9vbD4geworcHVibGljOgorICAgIC8qKgorICAgICAqIENyZWF0ZSBhIG5ldyBMb2NhbEJ1ZmZlclBvb2wgb2JqZWN0LgorICAgICAqCisgICAgICogXHBhcmFtIHBvb2xDYXBhY2l0eSAgbWF4IHRvdGFsIHNpemUgb2YgYnVmZmVycyBtYW5hZ2VkIGJ5IHRoaXMgcG9vbC4KKyAgICAgKgorICAgICAqIFxyZXR1cm4gIGEgbmV3bHkgY3JlYXRlZCBwb29sIG9iamVjdC4KKyAgICAgKi8KKyAgICBzdGF0aWMgc3RkOjpzaGFyZWRfcHRyPExvY2FsQnVmZmVyUG9vbD4gQ3JlYXRlKHNpemVfdCBwb29sQ2FwYWNpdHkpIHsKKyAgICAgICAgcmV0dXJuIHN0ZDo6c2hhcmVkX3B0cjxMb2NhbEJ1ZmZlclBvb2w+KG5ldyBMb2NhbEJ1ZmZlclBvb2wocG9vbENhcGFjaXR5KSk7CisgICAgfQorCisgICAgLyoqCisgICAgICogUmV0dXJuIGFuIEFCdWZmZXIgb2JqZWN0IHdob3NlIHNpemUgaXMgYXQgbGVhc3QgfGNhcGFjaXR5fC4KKyAgICAgKgorICAgICAqIFxwYXJhbSAgIGNhcGFjaXR5ICByZXF1ZXN0ZWQgY2FwYWNpdHkKKyAgICAgKiBccmV0dXJuICBudWxscHRyIGlmIHRoZSBwb29sIGNhcGFjaXR5IGlzIHJlYWNoZWQKKyAgICAgKiAgICAgICAgICBhbiBBQnVmZmVyIG9iamVjdCBvdGhlcndpc2UuCisgICAgICovCisgICAgc3A8QUJ1ZmZlcj4gbmV3QnVmZmVyKHNpemVfdCBjYXBhY2l0eSkgeworICAgICAgICBNdXRleDo6QXV0b2xvY2sgbG9jayhtTXV0ZXgpOworICAgICAgICBhdXRvIGl0ID0gc3RkOjpmaW5kX2lmKAorICAgICAgICAgICAgICAgIG1Qb29sLmJlZ2luKCksIG1Qb29sLmVuZCgpLAorICAgICAgICAgICAgICAgIFtjYXBhY2l0eV0oY29uc3Qgc3RkOjp2ZWN0b3I8dWludDhfdD4gJnZlYykgeworICAgICAgICAgICAgICAgICAgICByZXR1cm4gdmVjLmNhcGFjaXR5KCkgPj0gY2FwYWNpdHk7CisgICAgICAgICAgICAgICAgfSk7CisgICAgICAgIGlmIChpdCAhPSBtUG9vbC5lbmQoKSkgeworICAgICAgICAgICAgc3A8QUJ1ZmZlcj4gYnVmZmVyID0gbmV3IFZlY3RvckJ1ZmZlcihzdGQ6Om1vdmUoKml0KSwgc2hhcmVkX2Zyb21fdGhpcygpKTsKKyAgICAgICAgICAgIG1Qb29sLmVyYXNlKGl0KTsKKyAgICAgICAgICAgIHJldHVybiBidWZmZXI7CisgICAgICAgIH0KKyAgICAgICAgaWYgKG1Vc2VkU2l6ZSArIGNhcGFjaXR5ID4gbVBvb2xDYXBhY2l0eSkgeworICAgICAgICAgICAgd2hpbGUgKCFtUG9vbC5lbXB0eSgpKSB7CisgICAgICAgICAgICAgICAgbVVzZWRTaXplIC09IG1Qb29sLmJhY2soKS5jYXBhY2l0eSgpOworICAgICAgICAgICAgICAgIG1Qb29sLnBvcF9iYWNrKCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAobVVzZWRTaXplICsgY2FwYWNpdHkgPiBtUG9vbENhcGFjaXR5KSB7CisgICAgICAgICAgICAgICAgQUxPR0QoIm1Vc2VkU2l6ZSA9ICV6dSwgY2FwYWNpdHkgPSAlenUsIG1Qb29sQ2FwYWNpdHkgPSAlenUiLAorICAgICAgICAgICAgICAgICAgICAgICAgbVVzZWRTaXplLCBjYXBhY2l0eSwgbVBvb2xDYXBhY2l0eSk7CisgICAgICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgc3RkOjp2ZWN0b3I8dWludDhfdD4gdmVjKGNhcGFjaXR5KTsKKyAgICAgICAgbVVzZWRTaXplICs9IHZlYy5jYXBhY2l0eSgpOworICAgICAgICByZXR1cm4gbmV3IFZlY3RvckJ1ZmZlcihzdGQ6Om1vdmUodmVjKSwgc2hhcmVkX2Zyb21fdGhpcygpKTsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgLyoqCisgICAgICogQUJ1ZmZlciBiYWNrZWQgYnkgc3RkOjp2ZWN0b3IuCisgICAgICovCisgICAgY2xhc3MgVmVjdG9yQnVmZmVyIDogcHVibGljIDo6YW5kcm9pZDo6QUJ1ZmZlciB7CisgICAgcHVibGljOgorICAgICAgICAvKioKKyAgICAgICAgICogQ29uc3RydWN0IGEgVmVjdG9yQnVmZmVyIGJ5IHRha2luZyB0aGUgb3duZXJzaGlwIG9mIHN1cHBsaWVkIHZlY3Rvci4KKyAgICAgICAgICoKKyAgICAgICAgICogXHBhcmFtIHZlYyAgIGJhY2tpbmcgdmVjdG9yIG9mIHRoZSBidWZmZXIuIHRoaXMgb2JqZWN0IHRha2VzCisgICAgICAgICAqICAgICAgICAgICAgICBvd25lcnNoaXAgYXQgY29uc3RydWN0aW9uLgorICAgICAgICAgKiBccGFyYW0gcG9vbCAgYSBMb2NhbEJ1ZmZlclBvb2wgb2JqZWN0IHRvIHJldHVybiB0aGUgdmVjdG9yIGF0CisgICAgICAgICAqICAgICAgICAgICAgICBkZXN0cnVjdGlvbi4KKyAgICAgICAgICovCisgICAgICAgIFZlY3RvckJ1ZmZlcihzdGQ6OnZlY3Rvcjx1aW50OF90PiAmJnZlYywgY29uc3Qgc3RkOjpzaGFyZWRfcHRyPExvY2FsQnVmZmVyUG9vbD4gJnBvb2wpCisgICAgICAgICAgICA6IEFCdWZmZXIodmVjLmRhdGEoKSwgdmVjLmNhcGFjaXR5KCkpLAorICAgICAgICAgICAgICBtVmVjKHN0ZDo6bW92ZSh2ZWMpKSwKKyAgICAgICAgICAgICAgbVBvb2wocG9vbCkgeworICAgICAgICB9CisKKyAgICAgICAgflZlY3RvckJ1ZmZlcigpIG92ZXJyaWRlIHsKKyAgICAgICAgICAgIHN0ZDo6c2hhcmVkX3B0cjxMb2NhbEJ1ZmZlclBvb2w+IHBvb2wgPSBtUG9vbC5sb2NrKCk7CisgICAgICAgICAgICBpZiAocG9vbCkgeworICAgICAgICAgICAgICAgIC8vIElmIHBvb2wgaXMgYWxpdmUsIHJldHVybiB0aGUgdmVjdG9yIGJhY2sgdG8gdGhlIHBvb2wgc28gdGhhdAorICAgICAgICAgICAgICAgIC8vIGl0IGNhbiBiZSByZWN5Y2xlZC4KKyAgICAgICAgICAgICAgICBwb29sLT5yZXR1cm5WZWN0b3Ioc3RkOjptb3ZlKG1WZWMpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgcHJpdmF0ZToKKyAgICAgICAgc3RkOjp2ZWN0b3I8dWludDhfdD4gbVZlYzsKKyAgICAgICAgc3RkOjp3ZWFrX3B0cjxMb2NhbEJ1ZmZlclBvb2w+IG1Qb29sOworICAgIH07CisKKyAgICBNdXRleCBtTXV0ZXg7CisgICAgc2l6ZV90IG1Qb29sQ2FwYWNpdHk7CisgICAgc2l6ZV90IG1Vc2VkU2l6ZTsKKyAgICBzdGQ6Omxpc3Q8c3RkOjp2ZWN0b3I8dWludDhfdD4+IG1Qb29sOworCisgICAgLyoqCisgICAgICogUHJpdmF0ZSBjb25zdHJ1Y3RvciB0byBwcmV2ZW50IGNvbnN0cnVjdGluZyBub24tbWFuYWdlZCBMb2NhbEJ1ZmZlclBvb2wuCisgICAgICovCisgICAgZXhwbGljaXQgTG9jYWxCdWZmZXJQb29sKHNpemVfdCBwb29sQ2FwYWNpdHkpCisgICAgICAgIDogbVBvb2xDYXBhY2l0eShwb29sQ2FwYWNpdHkpLCBtVXNlZFNpemUoMCkgeworICAgIH0KKworICAgIC8qKgorICAgICAqIFRha2UgYmFjayB0aGUgb3duZXJzaGlwIG9mIHZlYyBmcm9tIHRoZSBkZXN0cnVjdGVkIFZlY3RvckJ1ZmZlciBhbmQgcHV0CisgICAgICogaXQgaW4gZnJvbnQgb2YgdGhlIHBvb2wuCisgICAgICovCisgICAgdm9pZCByZXR1cm5WZWN0b3Ioc3RkOjp2ZWN0b3I8dWludDhfdD4gJiZ2ZWMpIHsKKyAgICAgICAgTXV0ZXg6OkF1dG9sb2NrIGxvY2sobU11dGV4KTsKKyAgICAgICAgbVBvb2wucHVzaF9mcm9udChzdGQ6Om1vdmUodmVjKSk7CisgICAgfQorCisgICAgRElTQUxMT1dfRVZJTF9DT05TVFJVQ1RPUlMoTG9jYWxCdWZmZXJQb29sKTsKK307CisKK3NwPEdyYXBoaWNCbG9ja0J1ZmZlcj4gQWxsb2NhdGVHcmFwaGljQnVmZmVyKAorICAgICAgICBjb25zdCBzdGQ6OnNoYXJlZF9wdHI8QzJCbG9ja1Bvb2w+ICZwb29sLAorICAgICAgICBjb25zdCBzcDxBTWVzc2FnZT4gJmZvcm1hdCwKKyAgICAgICAgdWludDMyX3QgcGl4ZWxGb3JtYXQsCisgICAgICAgIGNvbnN0IEMyTWVtb3J5VXNhZ2UgJnVzYWdlLAorICAgICAgICBjb25zdCBzdGQ6OnNoYXJlZF9wdHI8TG9jYWxCdWZmZXJQb29sPiAmbG9jYWxCdWZmZXJQb29sKSB7CisgICAgaW50MzJfdCB3aWR0aCwgaGVpZ2h0OworICAgIGlmICghZm9ybWF0LT5maW5kSW50MzIoIndpZHRoIiwgJndpZHRoKSB8fCAhZm9ybWF0LT5maW5kSW50MzIoImhlaWdodCIsICZoZWlnaHQpKSB7CisgICAgICAgIEFMT0dEKCJmb3JtYXQgbGFja3Mgd2lkdGggb3IgaGVpZ2h0Iik7CisgICAgICAgIHJldHVybiBudWxscHRyOworICAgIH0KKworICAgIHN0ZDo6c2hhcmVkX3B0cjxDMkdyYXBoaWNCbG9jaz4gYmxvY2s7CisgICAgYzJfc3RhdHVzX3QgZXJyID0gcG9vbC0+ZmV0Y2hHcmFwaGljQmxvY2soCisgICAgICAgICAgICB3aWR0aCwgaGVpZ2h0LCBwaXhlbEZvcm1hdCwgdXNhZ2UsICZibG9jayk7CisgICAgaWYgKGVyciAhPSBDMl9PSykgeworICAgICAgICBBTE9HRCgiZmV0Y2ggZ3JhcGhpYyBibG9jayBmYWlsZWQ6ICVkIiwgZXJyKTsKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgfQorCisgICAgcmV0dXJuIEdyYXBoaWNCbG9ja0J1ZmZlcjo6QWxsb2NhdGUoCisgICAgICAgICAgICBmb3JtYXQsCisgICAgICAgICAgICBibG9jaywKKyAgICAgICAgICAgIFtsb2NhbEJ1ZmZlclBvb2xdKHNpemVfdCBjYXBhY2l0eSkgeworICAgICAgICAgICAgICAgIHJldHVybiBsb2NhbEJ1ZmZlclBvb2wtPm5ld0J1ZmZlcihjYXBhY2l0eSk7CisgICAgICAgICAgICB9KTsKK30KKworY2xhc3MgQnVmZmVyc0FycmF5SW1wbDsKKworLyoqCisgKiBGbGV4aWJsZSBidWZmZXIgc2xvdHMgaW1wbGVtZW50YXRpb24uCisgKi8KK2NsYXNzIEZsZXhCdWZmZXJzSW1wbCB7CitwdWJsaWM6CisgICAgRmxleEJ1ZmZlcnNJbXBsKGNvbnN0IGNoYXIgKm5hbWUpCisgICAgICAgIDogbUltcGxOYW1lKHN0ZDo6c3RyaW5nKG5hbWUpICsgIi5JbXBsIiksCisgICAgICAgICAgbU5hbWUobUltcGxOYW1lLmNfc3RyKCkpIHsgfQorCisgICAgLyoqCisgICAgICogQXNzaWduIGFuIGVtcHR5IHNsb3QgZm9yIGEgYnVmZmVyIGFuZCByZXR1cm4gdGhlIGluZGV4LiBJZiB0aGVyZSdzIG5vCisgICAgICogZW1wdHkgc2xvdCwganVzdCBhZGQgb25lIGF0IHRoZSBlbmQgYW5kIHJldHVybiBpdC4KKyAgICAgKgorICAgICAqIFxwYXJhbSBidWZmZXJbaW5dICBhIG5ldyBidWZmZXIgdG8gYXNzaWduIGEgc2xvdC4KKyAgICAgKiBccmV0dXJuICAgICAgICAgICAgaW5kZXggb2YgdGhlIGFzc2lnbmVkIHNsb3QuCisgICAgICovCisgICAgc2l6ZV90IGFzc2lnblNsb3QoY29uc3Qgc3A8Q29kZWMyQnVmZmVyPiAmYnVmZmVyKSB7CisgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbUJ1ZmZlcnMuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgICAgIGlmIChtQnVmZmVyc1tpXS5jbGllbnRCdWZmZXIgPT0gbnVsbHB0cgorICAgICAgICAgICAgICAgICAgICAmJiBtQnVmZmVyc1tpXS5jb21wQnVmZmVyLmV4cGlyZWQoKSkgeworICAgICAgICAgICAgICAgIG1CdWZmZXJzW2ldLmNsaWVudEJ1ZmZlciA9IGJ1ZmZlcjsKKyAgICAgICAgICAgICAgICByZXR1cm4gaTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBtQnVmZmVycy5wdXNoX2JhY2soeyBidWZmZXIsIHN0ZDo6d2Vha19wdHI8QzJCdWZmZXI+KCkgfSk7CisgICAgICAgIHJldHVybiBtQnVmZmVycy5zaXplKCkgLSAxOworICAgIH0KKworICAgIC8qKgorICAgICAqIFJlbGVhc2UgdGhlIHNsb3QgZnJvbSB0aGUgY2xpZW50LCBhbmQgZ2V0IHRoZSBDMkJ1ZmZlciBvYmplY3QgYmFjayBmcm9tCisgICAgICogdGhlIHByZXZpb3VzbHkgYXNzaWduZWQgYnVmZmVyLiBOb3RlIHRoYXQgdGhlIHNsb3QgaXMgbm90IGNvbXBsZXRlbHkgZnJlZQorICAgICAqIHVudGlsIHRoZSByZXR1cm5lZCBDMkJ1ZmZlciBvYmplY3QgaXMgZnJlZWQuCisgICAgICoKKyAgICAgKiBccGFyYW0gICBidWZmZXJbaW5dICAgICAgICB0aGUgYnVmZmVyIHByZXZpb3VzbHkgYXNzaWduZWQgYSBzbG90LgorICAgICAqIFxwYXJhbSAgIGMyYnVmZmVyW2luLG91dF0gIHBvaW50ZXIgdG8gQzJCdWZmZXIgdG8gYmUgcG9wdWxhdGVkLiBJZ25vcmVkCisgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgbnVsbC4KKyAgICAgKiBccmV0dXJuICB0cnVlICBpZiB0aGUgYnVmZmVyIGlzIHN1Y2Nlc3NmdWxseSByZWxlYXNlZCBmcm9tIGEgc2xvdAorICAgICAqICAgICAgICAgIGZhbHNlIG90aGVyd2lzZQorICAgICAqLworICAgIGJvb2wgcmVsZWFzZVNsb3QoY29uc3Qgc3A8TWVkaWFDb2RlY0J1ZmZlcj4gJmJ1ZmZlciwgc3RkOjpzaGFyZWRfcHRyPEMyQnVmZmVyPiAqYzJidWZmZXIpIHsKKyAgICAgICAgc3A8Q29kZWMyQnVmZmVyPiBjbGllbnRCdWZmZXI7CisgICAgICAgIHNpemVfdCBpbmRleCA9IG1CdWZmZXJzLnNpemUoKTsKKyAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtQnVmZmVycy5zaXplKCk7ICsraSkgeworICAgICAgICAgICAgaWYgKG1CdWZmZXJzW2ldLmNsaWVudEJ1ZmZlciA9PSBidWZmZXIpIHsKKyAgICAgICAgICAgICAgICBjbGllbnRCdWZmZXIgPSBtQnVmZmVyc1tpXS5jbGllbnRCdWZmZXI7CisgICAgICAgICAgICAgICAgbUJ1ZmZlcnNbaV0uY2xpZW50QnVmZmVyLmNsZWFyKCk7CisgICAgICAgICAgICAgICAgaW5kZXggPSBpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGlmIChjbGllbnRCdWZmZXIgPT0gbnVsbHB0cikgeworICAgICAgICAgICAgQUxPR1YoIlslc10gJXM6IE5vIG1hdGNoaW5nIGJ1ZmZlciBmb3VuZCIsIG1OYW1lLCBfX2Z1bmNfXyk7CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICAgICAgc3RkOjpzaGFyZWRfcHRyPEMyQnVmZmVyPiByZXN1bHQgPSBjbGllbnRCdWZmZXItPmFzQzJCdWZmZXIoKTsKKyAgICAgICAgbUJ1ZmZlcnNbaW5kZXhdLmNvbXBCdWZmZXIgPSByZXN1bHQ7CisgICAgICAgIGlmIChjMmJ1ZmZlcikgeworICAgICAgICAgICAgKmMyYnVmZmVyID0gcmVzdWx0OworICAgICAgICB9CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKworICAgIGJvb2wgZXhwaXJlQ29tcG9uZW50QnVmZmVyKGNvbnN0IHN0ZDo6c2hhcmVkX3B0cjxDMkJ1ZmZlcj4gJmMyYnVmZmVyKSB7CisgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbUJ1ZmZlcnMuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgICAgIHN0ZDo6c2hhcmVkX3B0cjxDMkJ1ZmZlcj4gY29tcEJ1ZmZlciA9CisgICAgICAgICAgICAgICAgICAgIG1CdWZmZXJzW2ldLmNvbXBCdWZmZXIubG9jaygpOworICAgICAgICAgICAgaWYgKCFjb21wQnVmZmVyIHx8IGNvbXBCdWZmZXIgIT0gYzJidWZmZXIpIHsKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIG1CdWZmZXJzW2ldLmNsaWVudEJ1ZmZlciA9IG51bGxwdHI7CisgICAgICAgICAgICBtQnVmZmVyc1tpXS5jb21wQnVmZmVyLnJlc2V0KCk7CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQorICAgICAgICBBTE9HVigiWyVzXSBjb2RlYyByZWxlYXNlZCBhbiB1bmtub3duIGJ1ZmZlciIsIG1OYW1lKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIHZvaWQgZmx1c2goKSB7CisgICAgICAgIEFMT0dWKCJbJXNdIGJ1ZmZlcnMgYXJlIGZsdXNoZWQgJXp1IiwgbU5hbWUsIG1CdWZmZXJzLnNpemUoKSk7CisgICAgICAgIG1CdWZmZXJzLmNsZWFyKCk7CisgICAgfQorCitwcml2YXRlOgorICAgIGZyaWVuZCBjbGFzcyBCdWZmZXJzQXJyYXlJbXBsOworCisgICAgc3RkOjpzdHJpbmcgbUltcGxOYW1lOyAvLy88IG5hbWUgZm9yIGRlYnVnZ2luZworICAgIGNvbnN0IGNoYXIgKm1OYW1lOyAvLy88IEMtc3RyaW5nIHZlcnNpb24gb2YgbmFtZQorCisgICAgc3RydWN0IEVudHJ5IHsKKyAgICAgICAgc3A8Q29kZWMyQnVmZmVyPiBjbGllbnRCdWZmZXI7CisgICAgICAgIHN0ZDo6d2Vha19wdHI8QzJCdWZmZXI+IGNvbXBCdWZmZXI7CisgICAgfTsKKyAgICBzdGQ6OnZlY3RvcjxFbnRyeT4gbUJ1ZmZlcnM7Cit9OworCisvKioKKyAqIFN0YXRpYyBidWZmZXIgc2xvdHMgaW1wbGVtZW50YXRpb24gYmFzZWQgb24gYSBmaXhlZC1zaXplIGFycmF5LgorICovCitjbGFzcyBCdWZmZXJzQXJyYXlJbXBsIHsKK3B1YmxpYzoKKyAgICBCdWZmZXJzQXJyYXlJbXBsKCkKKyAgICAgICAgOiBtSW1wbE5hbWUoIkJ1ZmZlcnNBcnJheUltcGwiKSwKKyAgICAgICAgICBtTmFtZShtSW1wbE5hbWUuY19zdHIoKSkgeyB9CisKKyAgICAvKioKKyAgICAgKiBJbml0aWFsaXplIGJ1ZmZlciBhcnJheSBmcm9tIHRoZSBvcmlnaW5hbCB8aW1wbHwuIFRoZSBidWZmZXJzIGtub3duIGJ5CisgICAgICogdGhlIGNsaWVudCBpcyBwcmVzZXJ2ZWQsIGFuZCB0aGUgZW1wdHkgc2xvdHMgYXJlIHBvcHVsYXRlZCBzbyB0aGF0IHRoZQorICAgICAqIGFycmF5IHNpemUgaXMgYXQgbGVhc3QgfG1pblNpemV8LgorICAgICAqCisgICAgICogXHBhcmFtIGltcGxbaW5dICAgICAgRmxleEJ1ZmZlcnNJbXBsIG9iamVjdCB1c2VkIHNvIGZhci4KKyAgICAgKiBccGFyYW0gbWluU2l6ZVtpbl0gICBtaW5pbXVtIHNpemUgb2YgdGhlIGJ1ZmZlciBhcnJheS4KKyAgICAgKiBccGFyYW0gYWxsb2NhdGVbaW5dICBmdW5jdGlvbiB0byBhbGxvY2F0ZSBhIGNsaWVudCBidWZmZXIgZm9yIGFuIGVtcHR5IHNsb3QuCisgICAgICovCisgICAgdm9pZCBpbml0aWFsaXplKAorICAgICAgICAgICAgY29uc3QgRmxleEJ1ZmZlcnNJbXBsICZpbXBsLAorICAgICAgICAgICAgc2l6ZV90IG1pblNpemUsCisgICAgICAgICAgICBzdGQ6OmZ1bmN0aW9uPHNwPENvZGVjMkJ1ZmZlcj4oKT4gYWxsb2NhdGUpIHsKKyAgICAgICAgbUltcGxOYW1lID0gaW1wbC5tSW1wbE5hbWUgKyAiW05dIjsKKyAgICAgICAgbU5hbWUgPSBtSW1wbE5hbWUuY19zdHIoKTsKKyAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBpbXBsLm1CdWZmZXJzLnNpemUoKTsgKytpKSB7CisgICAgICAgICAgICBzcDxDb2RlYzJCdWZmZXI+IGNsaWVudEJ1ZmZlciA9IGltcGwubUJ1ZmZlcnNbaV0uY2xpZW50QnVmZmVyOworICAgICAgICAgICAgYm9vbCBvd25lZEJ5Q2xpZW50ID0gKGNsaWVudEJ1ZmZlciAhPSBudWxscHRyKTsKKyAgICAgICAgICAgIGlmICghb3duZWRCeUNsaWVudCkgeworICAgICAgICAgICAgICAgIGNsaWVudEJ1ZmZlciA9IGFsbG9jYXRlKCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBtQnVmZmVycy5wdXNoX2JhY2soeyBjbGllbnRCdWZmZXIsIGltcGwubUJ1ZmZlcnNbaV0uY29tcEJ1ZmZlciwgb3duZWRCeUNsaWVudCB9KTsKKyAgICAgICAgfQorICAgICAgICBBTE9HVigiWyVzXSBjb252ZXJ0ZWQgJXp1IGJ1ZmZlcnMgdG8gYXJyYXkgbW9kZSBvZiAlenUiLCBtTmFtZSwgbUJ1ZmZlcnMuc2l6ZSgpLCBtaW5TaXplKTsKKyAgICAgICAgZm9yIChzaXplX3QgaSA9IGltcGwubUJ1ZmZlcnMuc2l6ZSgpOyBpIDwgbWluU2l6ZTsgKytpKSB7CisgICAgICAgICAgICBtQnVmZmVycy5wdXNoX2JhY2soeyBhbGxvY2F0ZSgpLCBzdGQ6OndlYWtfcHRyPEMyQnVmZmVyPigpLCBmYWxzZSB9KTsKKyAgICAgICAgfQorICAgIH0KKworICAgIC8qKgorICAgICAqIEdyYWIgYSBidWZmZXIgZnJvbSB0aGUgdW5kZXJseWluZyBhcnJheSB3aGljaCBtYXRjaGVzIHRoZSBjcml0ZXJpYS4KKyAgICAgKgorICAgICAqIFxwYXJhbSBpbmRleFtvdXRdICAgIGluZGV4IG9mIHRoZSBzbG90LgorICAgICAqIFxwYXJhbSBidWZmZXJbb3V0XSAgIHRoZSBtYXRjaGluZyBidWZmZXIuCisgICAgICogXHBhcmFtIG1hdGNoW2luXSAgICAgYSBmdW5jdGlvbiB0byB0ZXN0IHdoZXRoZXIgdGhlIGJ1ZmZlciBtYXRjaGVzIHRoZQorICAgICAqICAgICAgICAgICAgICAgICAgICAgIGNyaXRlcmlhIG9yIG5vdC4KKyAgICAgKiBccmV0dXJuIE9LICAgICAgICAgICBpZiBzdWNjZXNzZnVsLAorICAgICAqICAgICAgICAgV09VTERfQkxPQ0sgIGlmIHNsb3RzIGFyZSBiZWluZyB1c2VkLAorICAgICAqICAgICAgICAgTk9fTUVNT1JZICAgIGlmIG5vIHNsb3QgbWF0Y2hlcyB0aGUgY3JpdGVyaWEsIGV2ZW4gdGhvdWdoIGl0J3MKKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICBhdmFpbGFibGUKKyAgICAgKi8KKyAgICBzdGF0dXNfdCBncmFiQnVmZmVyKAorICAgICAgICAgICAgc2l6ZV90ICppbmRleCwKKyAgICAgICAgICAgIHNwPENvZGVjMkJ1ZmZlcj4gKmJ1ZmZlciwKKyAgICAgICAgICAgIHN0ZDo6ZnVuY3Rpb248Ym9vbChjb25zdCBzcDxDb2RlYzJCdWZmZXI+ICYpPiBtYXRjaCA9CisgICAgICAgICAgICAgICAgW10oY29uc3Qgc3A8Q29kZWMyQnVmZmVyPiAmKSB7IHJldHVybiB0cnVlOyB9KSB7CisgICAgICAgIC8vIGFsbEJ1ZmZlcnNEb250TWF0Y2ggcmVtYWlucyB0cnVlIGlmIGFsbCBidWZmZXJzIGFyZSBhdmFpbGFibGUgYnV0CisgICAgICAgIC8vIG1hdGNoKCkgcmV0dXJucyBmYWxzZSBmb3IgZXZlcnkgYnVmZmVyLgorICAgICAgICBib29sIGFsbEJ1ZmZlcnNEb250TWF0Y2ggPSB0cnVlOworICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1CdWZmZXJzLnNpemUoKTsgKytpKSB7CisgICAgICAgICAgICBpZiAoIW1CdWZmZXJzW2ldLm93bmVkQnlDbGllbnQgJiYgbUJ1ZmZlcnNbaV0uY29tcEJ1ZmZlci5leHBpcmVkKCkpIHsKKyAgICAgICAgICAgICAgICBpZiAobWF0Y2gobUJ1ZmZlcnNbaV0uY2xpZW50QnVmZmVyKSkgeworICAgICAgICAgICAgICAgICAgICBtQnVmZmVyc1tpXS5vd25lZEJ5Q2xpZW50ID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAgKmJ1ZmZlciA9IG1CdWZmZXJzW2ldLmNsaWVudEJ1ZmZlcjsKKyAgICAgICAgICAgICAgICAgICAgKCpidWZmZXIpLT5tZXRhKCktPmNsZWFyKCk7CisgICAgICAgICAgICAgICAgICAgICgqYnVmZmVyKS0+c2V0UmFuZ2UoMCwgKCpidWZmZXIpLT5jYXBhY2l0eSgpKTsKKyAgICAgICAgICAgICAgICAgICAgKmluZGV4ID0gaTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIE9LOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgYWxsQnVmZmVyc0RvbnRNYXRjaCA9IGZhbHNlOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIHJldHVybiBhbGxCdWZmZXJzRG9udE1hdGNoID8gTk9fTUVNT1JZIDogV09VTERfQkxPQ0s7CisgICAgfQorCisgICAgLyoqCisgICAgICogUmV0dXJuIHRoZSBidWZmZXIgZnJvbSB0aGUgY2xpZW50LCBhbmQgZ2V0IHRoZSBDMkJ1ZmZlciBvYmplY3QgYmFjayBmcm9tCisgICAgICogdGhlIGJ1ZmZlci4gTm90ZSB0aGF0IHRoZSBzbG90IGlzIG5vdCBjb21wbGV0ZWx5IGZyZWUgdW50aWwgdGhlIHJldHVybmVkCisgICAgICogQzJCdWZmZXIgb2JqZWN0IGlzIGZyZWVkLgorICAgICAqCisgICAgICogXHBhcmFtICAgYnVmZmVyW2luXSAgICAgICAgdGhlIGJ1ZmZlciBwcmV2aW91c2x5IGdyYWJiZWQuCisgICAgICogXHBhcmFtICAgYzJidWZmZXJbaW4sb3V0XSAgcG9pbnRlciB0byBDMkJ1ZmZlciB0byBiZSBwb3B1bGF0ZWQuIElnbm9yZWQKKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiBudWxsLgorICAgICAqIFxyZXR1cm4gIHRydWUgIGlmIHRoZSBidWZmZXIgaXMgc3VjY2Vzc2Z1bGx5IHJldHVybmVkCisgICAgICogICAgICAgICAgZmFsc2Ugb3RoZXJ3aXNlCisgICAgICovCisgICAgYm9vbCByZXR1cm5CdWZmZXIoY29uc3Qgc3A8TWVkaWFDb2RlY0J1ZmZlcj4gJmJ1ZmZlciwgc3RkOjpzaGFyZWRfcHRyPEMyQnVmZmVyPiAqYzJidWZmZXIpIHsKKyAgICAgICAgc3A8Q29kZWMyQnVmZmVyPiBjbGllbnRCdWZmZXI7CisgICAgICAgIHNpemVfdCBpbmRleCA9IG1CdWZmZXJzLnNpemUoKTsKKyAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtQnVmZmVycy5zaXplKCk7ICsraSkgeworICAgICAgICAgICAgaWYgKG1CdWZmZXJzW2ldLmNsaWVudEJ1ZmZlciA9PSBidWZmZXIpIHsKKyAgICAgICAgICAgICAgICBpZiAoIW1CdWZmZXJzW2ldLm93bmVkQnlDbGllbnQpIHsKKyAgICAgICAgICAgICAgICAgICAgQUxPR0QoIlslc10gQ2xpZW50IHJldHVybmVkIGEgYnVmZmVyIGl0IGRvZXMgbm90IG93biBhY2NvcmRpbmcgdG8gb3VyIHJlY29yZDogJXp1IiwgbU5hbWUsIGkpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBjbGllbnRCdWZmZXIgPSBtQnVmZmVyc1tpXS5jbGllbnRCdWZmZXI7CisgICAgICAgICAgICAgICAgbUJ1ZmZlcnNbaV0ub3duZWRCeUNsaWVudCA9IGZhbHNlOworICAgICAgICAgICAgICAgIGluZGV4ID0gaTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBpZiAoY2xpZW50QnVmZmVyID09IG51bGxwdHIpIHsKKyAgICAgICAgICAgIEFMT0dWKCJbJXNdICVzOiBObyBtYXRjaGluZyBidWZmZXIgZm91bmQiLCBtTmFtZSwgX19mdW5jX18pOworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgICAgIEFMT0dWKCJbJXNdICVzOiBtYXRjaGluZyBidWZmZXIgZm91bmQgKGluZGV4PSV6dSkiLCBtTmFtZSwgX19mdW5jX18sIGluZGV4KTsKKyAgICAgICAgc3RkOjpzaGFyZWRfcHRyPEMyQnVmZmVyPiByZXN1bHQgPSBjbGllbnRCdWZmZXItPmFzQzJCdWZmZXIoKTsKKyAgICAgICAgbUJ1ZmZlcnNbaW5kZXhdLmNvbXBCdWZmZXIgPSByZXN1bHQ7CisgICAgICAgIGlmIChjMmJ1ZmZlcikgeworICAgICAgICAgICAgKmMyYnVmZmVyID0gcmVzdWx0OworICAgICAgICB9CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKworICAgIGJvb2wgZXhwaXJlQ29tcG9uZW50QnVmZmVyKGNvbnN0IHN0ZDo6c2hhcmVkX3B0cjxDMkJ1ZmZlcj4gJmMyYnVmZmVyKSB7CisgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbUJ1ZmZlcnMuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgICAgIHN0ZDo6c2hhcmVkX3B0cjxDMkJ1ZmZlcj4gY29tcEJ1ZmZlciA9CisgICAgICAgICAgICAgICAgICAgIG1CdWZmZXJzW2ldLmNvbXBCdWZmZXIubG9jaygpOworICAgICAgICAgICAgaWYgKCFjb21wQnVmZmVyKSB7CisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoYzJidWZmZXIgPT0gY29tcEJ1ZmZlcikgeworICAgICAgICAgICAgICAgIGlmIChtQnVmZmVyc1tpXS5vd25lZEJ5Q2xpZW50KSB7CisgICAgICAgICAgICAgICAgICAgIC8vIFRoaXMgc2hvdWxkIG5vdCBoYXBwZW4uCisgICAgICAgICAgICAgICAgICAgIEFMT0dEKCJbJXNdIGNvZGVjIHJlbGVhc2VkIGEgYnVmZmVyIG93bmVkIGJ5IGNsaWVudCAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICIoaW5kZXggJXp1KSIsIG1OYW1lLCBpKTsKKyAgICAgICAgICAgICAgICAgICAgbUJ1ZmZlcnNbaV0ub3duZWRCeUNsaWVudCA9IGZhbHNlOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBtQnVmZmVyc1tpXS5jb21wQnVmZmVyLnJlc2V0KCk7CisgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgQUxPR1YoIlslc10gY29kZWMgcmVsZWFzZWQgYW4gdW5rbm93biBidWZmZXIgKGFycmF5IG1vZGUpIiwgbU5hbWUpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgLyoqCisgICAgICogUG9wdWxhdGUgfGFycmF5fCB3aXRoIHRoZSB1bmRlcmx5aW5nIGJ1ZmZlciBhcnJheS4KKyAgICAgKgorICAgICAqIFxwYXJhbSBhcnJheVtvdXRdICBhbiBhcnJheSB0byBiZSBmaWxsZWQgd2l0aCB0aGUgdW5kZXJseWluZyBidWZmZXIgYXJyYXkuCisgICAgICovCisgICAgdm9pZCBnZXRBcnJheShWZWN0b3I8c3A8TWVkaWFDb2RlY0J1ZmZlcj4+ICphcnJheSkgY29uc3QgeworICAgICAgICBhcnJheS0+Y2xlYXIoKTsKKyAgICAgICAgZm9yIChjb25zdCBFbnRyeSAmZW50cnkgOiBtQnVmZmVycykgeworICAgICAgICAgICAgYXJyYXktPnB1c2goZW50cnkuY2xpZW50QnVmZmVyKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIC8qKgorICAgICAqIFRoZSBjbGllbnQgYWJhbmRvbmVkIGFsbCBrbm93biBidWZmZXJzLCBzbyByZWNsYWltIHRoZSBvd25lcnNoaXAuCisgICAgICovCisgICAgdm9pZCBmbHVzaCgpIHsKKyAgICAgICAgZm9yIChFbnRyeSAmZW50cnkgOiBtQnVmZmVycykgeworICAgICAgICAgICAgZW50cnkub3duZWRCeUNsaWVudCA9IGZhbHNlOworICAgICAgICB9CisgICAgfQorCisgICAgdm9pZCByZWFsbG9jKHN0ZDo6ZnVuY3Rpb248c3A8Q29kZWMyQnVmZmVyPigpPiBhbGxvYykgeworICAgICAgICBzaXplX3Qgc2l6ZSA9IG1CdWZmZXJzLnNpemUoKTsKKyAgICAgICAgbUJ1ZmZlcnMuY2xlYXIoKTsKKyAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBzaXplOyArK2kpIHsKKyAgICAgICAgICAgIG1CdWZmZXJzLnB1c2hfYmFjayh7IGFsbG9jKCksIHN0ZDo6d2Vha19wdHI8QzJCdWZmZXI+KCksIGZhbHNlIH0pOworICAgICAgICB9CisgICAgfQorCitwcml2YXRlOgorICAgIHN0ZDo6c3RyaW5nIG1JbXBsTmFtZTsgLy8vPCBuYW1lIGZvciBkZWJ1Z2dpbmcKKyAgICBjb25zdCBjaGFyICptTmFtZTsgLy8vPCBDLXN0cmluZyB2ZXJzaW9uIG9mIG5hbWUKKworICAgIHN0cnVjdCBFbnRyeSB7CisgICAgICAgIGNvbnN0IHNwPENvZGVjMkJ1ZmZlcj4gY2xpZW50QnVmZmVyOworICAgICAgICBzdGQ6OndlYWtfcHRyPEMyQnVmZmVyPiBjb21wQnVmZmVyOworICAgICAgICBib29sIG93bmVkQnlDbGllbnQ7CisgICAgfTsKKyAgICBzdGQ6OnZlY3RvcjxFbnRyeT4gbUJ1ZmZlcnM7Cit9OworCitjbGFzcyBJbnB1dEJ1ZmZlcnNBcnJheSA6IHB1YmxpYyBDQ29kZWNCdWZmZXJDaGFubmVsOjpJbnB1dEJ1ZmZlcnMgeworcHVibGljOgorICAgIElucHV0QnVmZmVyc0FycmF5KGNvbnN0IGNoYXIgKmNvbXBvbmVudE5hbWUsIGNvbnN0IGNoYXIgKm5hbWUgPSAiSW5wdXRbTl0iKQorICAgICAgICA6IElucHV0QnVmZmVycyhjb21wb25lbnROYW1lLCBuYW1lKSB7IH0KKyAgICB+SW5wdXRCdWZmZXJzQXJyYXkoKSBvdmVycmlkZSA9IGRlZmF1bHQ7CisKKyAgICB2b2lkIGluaXRpYWxpemUoCisgICAgICAgICAgICBjb25zdCBGbGV4QnVmZmVyc0ltcGwgJmltcGwsCisgICAgICAgICAgICBzaXplX3QgbWluU2l6ZSwKKyAgICAgICAgICAgIHN0ZDo6ZnVuY3Rpb248c3A8Q29kZWMyQnVmZmVyPigpPiBhbGxvY2F0ZSkgeworICAgICAgICBtSW1wbC5pbml0aWFsaXplKGltcGwsIG1pblNpemUsIGFsbG9jYXRlKTsKKyAgICB9CisKKyAgICBib29sIGlzQXJyYXlNb2RlKCkgY29uc3QgZmluYWwgeyByZXR1cm4gdHJ1ZTsgfQorCisgICAgc3RkOjp1bmlxdWVfcHRyPENDb2RlY0J1ZmZlckNoYW5uZWw6OklucHV0QnVmZmVycz4gdG9BcnJheU1vZGUoCisgICAgICAgICAgICBzaXplX3QpIGZpbmFsIHsKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgfQorCisgICAgdm9pZCBnZXRBcnJheShWZWN0b3I8c3A8TWVkaWFDb2RlY0J1ZmZlcj4+ICphcnJheSkgY29uc3QgZmluYWwgeworICAgICAgICBtSW1wbC5nZXRBcnJheShhcnJheSk7CisgICAgfQorCisgICAgYm9vbCByZXF1ZXN0TmV3QnVmZmVyKHNpemVfdCAqaW5kZXgsIHNwPE1lZGlhQ29kZWNCdWZmZXI+ICpidWZmZXIpIG92ZXJyaWRlIHsKKyAgICAgICAgc3A8Q29kZWMyQnVmZmVyPiBjMkJ1ZmZlcjsKKyAgICAgICAgc3RhdHVzX3QgZXJyID0gbUltcGwuZ3JhYkJ1ZmZlcihpbmRleCwgJmMyQnVmZmVyKTsKKyAgICAgICAgaWYgKGVyciA9PSBPSykgeworICAgICAgICAgICAgYzJCdWZmZXItPnNldEZvcm1hdChtRm9ybWF0KTsKKyAgICAgICAgICAgICpidWZmZXIgPSBjMkJ1ZmZlcjsKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBib29sIHJlbGVhc2VCdWZmZXIoCisgICAgICAgICAgICBjb25zdCBzcDxNZWRpYUNvZGVjQnVmZmVyPiAmYnVmZmVyLCBzdGQ6OnNoYXJlZF9wdHI8QzJCdWZmZXI+ICpjMmJ1ZmZlcikgb3ZlcnJpZGUgeworICAgICAgICByZXR1cm4gbUltcGwucmV0dXJuQnVmZmVyKGJ1ZmZlciwgYzJidWZmZXIpOworICAgIH0KKworICAgIGJvb2wgZXhwaXJlQ29tcG9uZW50QnVmZmVyKAorICAgICAgICAgICAgY29uc3Qgc3RkOjpzaGFyZWRfcHRyPEMyQnVmZmVyPiAmYzJidWZmZXIpIG92ZXJyaWRlIHsKKyAgICAgICAgcmV0dXJuIG1JbXBsLmV4cGlyZUNvbXBvbmVudEJ1ZmZlcihjMmJ1ZmZlcik7CisgICAgfQorCisgICAgdm9pZCBmbHVzaCgpIG92ZXJyaWRlIHsKKyAgICAgICAgbUltcGwuZmx1c2goKTsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgQnVmZmVyc0FycmF5SW1wbCBtSW1wbDsKK307CisKK2NsYXNzIExpbmVhcklucHV0QnVmZmVycyA6IHB1YmxpYyBDQ29kZWNCdWZmZXJDaGFubmVsOjpJbnB1dEJ1ZmZlcnMgeworcHVibGljOgorICAgIExpbmVhcklucHV0QnVmZmVycyhjb25zdCBjaGFyICpjb21wb25lbnROYW1lLCBjb25zdCBjaGFyICpuYW1lID0gIjFELUlucHV0IikKKyAgICAgICAgOiBJbnB1dEJ1ZmZlcnMoY29tcG9uZW50TmFtZSwgbmFtZSksCisgICAgICAgICAgbUltcGwobU5hbWUpIHsgfQorCisgICAgYm9vbCByZXF1ZXN0TmV3QnVmZmVyKHNpemVfdCAqaW5kZXgsIHNwPE1lZGlhQ29kZWNCdWZmZXI+ICpidWZmZXIpIG92ZXJyaWRlIHsKKyAgICAgICAgaW50MzJfdCBjYXBhY2l0eSA9IGtMaW5lYXJCdWZmZXJTaXplOworICAgICAgICAodm9pZCltRm9ybWF0LT5maW5kSW50MzIoS0VZX01BWF9JTlBVVF9TSVpFLCAmY2FwYWNpdHkpOworICAgICAgICBpZiAoKHNpemVfdCljYXBhY2l0eSA+IGtNYXhMaW5lYXJCdWZmZXJTaXplKSB7CisgICAgICAgICAgICBBTE9HRCgiY2xpZW50IHJlcXVlc3RlZCAlZCwgY2FwcGVkIHRvICV6dSIsIGNhcGFjaXR5LCBrTWF4TGluZWFyQnVmZmVyU2l6ZSk7CisgICAgICAgICAgICBjYXBhY2l0eSA9IGtNYXhMaW5lYXJCdWZmZXJTaXplOworICAgICAgICB9CisgICAgICAgIC8vIFRPRE86IHByb3BlciBtYXggaW5wdXQgc2l6ZQorICAgICAgICAvLyBUT0RPOiByZWFkIHVzYWdlIGZyb20gaW50ZgorICAgICAgICBzcDxDb2RlYzJCdWZmZXI+IG5ld0J1ZmZlciA9IGFsbG9jKChzaXplX3QpY2FwYWNpdHkpOworICAgICAgICBpZiAobmV3QnVmZmVyID09IG51bGxwdHIpIHsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgICAgICAqaW5kZXggPSBtSW1wbC5hc3NpZ25TbG90KG5ld0J1ZmZlcik7CisgICAgICAgICpidWZmZXIgPSBuZXdCdWZmZXI7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKworICAgIGJvb2wgcmVsZWFzZUJ1ZmZlcigKKyAgICAgICAgICAgIGNvbnN0IHNwPE1lZGlhQ29kZWNCdWZmZXI+ICZidWZmZXIsIHN0ZDo6c2hhcmVkX3B0cjxDMkJ1ZmZlcj4gKmMyYnVmZmVyKSBvdmVycmlkZSB7CisgICAgICAgIHJldHVybiBtSW1wbC5yZWxlYXNlU2xvdChidWZmZXIsIGMyYnVmZmVyKTsKKyAgICB9CisKKyAgICBib29sIGV4cGlyZUNvbXBvbmVudEJ1ZmZlcigKKyAgICAgICAgICAgIGNvbnN0IHN0ZDo6c2hhcmVkX3B0cjxDMkJ1ZmZlcj4gJmMyYnVmZmVyKSBvdmVycmlkZSB7CisgICAgICAgIHJldHVybiBtSW1wbC5leHBpcmVDb21wb25lbnRCdWZmZXIoYzJidWZmZXIpOworICAgIH0KKworICAgIHZvaWQgZmx1c2goKSBvdmVycmlkZSB7CisgICAgICAgIC8vIFRoaXMgaXMgbm8tb3AgYnkgZGVmYXVsdCB1bmxlc3Mgd2UncmUgaW4gYXJyYXkgbW9kZSB3aGVyZSB3ZSBuZWVkIHRvIGtlZXAKKyAgICAgICAgLy8gdHJhY2sgb2YgdGhlIGZsdXNoZWQgd29yay4KKyAgICAgICAgbUltcGwuZmx1c2goKTsKKyAgICB9CisKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8Q0NvZGVjQnVmZmVyQ2hhbm5lbDo6SW5wdXRCdWZmZXJzPiB0b0FycmF5TW9kZSgKKyAgICAgICAgICAgIHNpemVfdCBzaXplKSBmaW5hbCB7CisgICAgICAgIGludDMyX3QgY2FwYWNpdHkgPSBrTGluZWFyQnVmZmVyU2l6ZTsKKyAgICAgICAgKHZvaWQpbUZvcm1hdC0+ZmluZEludDMyKEMyX05BTUVfU1RSRUFNX01BWF9CVUZGRVJfU0laRV9TRVRUSU5HLCAmY2FwYWNpdHkpOworCisgICAgICAgIHN0ZDo6dW5pcXVlX3B0cjxJbnB1dEJ1ZmZlcnNBcnJheT4gYXJyYXkoCisgICAgICAgICAgICAgICAgbmV3IElucHV0QnVmZmVyc0FycmF5KG1Db21wb25lbnROYW1lLmNfc3RyKCksICIxRC1JbnB1dFtOXSIpKTsKKyAgICAgICAgYXJyYXktPnNldFBvb2wobVBvb2wpOworICAgICAgICBhcnJheS0+c2V0Rm9ybWF0KG1Gb3JtYXQpOworICAgICAgICBhcnJheS0+aW5pdGlhbGl6ZSgKKyAgICAgICAgICAgICAgICBtSW1wbCwKKyAgICAgICAgICAgICAgICBzaXplLAorICAgICAgICAgICAgICAgIFt0aGlzLCBjYXBhY2l0eV0gKCkgLT4gc3A8Q29kZWMyQnVmZmVyPiB7IHJldHVybiBhbGxvYyhjYXBhY2l0eSk7IH0pOworICAgICAgICByZXR1cm4gc3RkOjptb3ZlKGFycmF5KTsKKyAgICB9CisKKyAgICB2aXJ0dWFsIHNwPENvZGVjMkJ1ZmZlcj4gYWxsb2Moc2l6ZV90IHNpemUpIGNvbnN0IHsKKyAgICAgICAgQzJNZW1vcnlVc2FnZSB1c2FnZSA9IHsgQzJNZW1vcnlVc2FnZTo6Q1BVX1JFQUQsIEMyTWVtb3J5VXNhZ2U6OkNQVV9XUklURSB9OworICAgICAgICBzdGQ6OnNoYXJlZF9wdHI8QzJMaW5lYXJCbG9jaz4gYmxvY2s7CisKKyAgICAgICAgYzJfc3RhdHVzX3QgZXJyID0gbVBvb2wtPmZldGNoTGluZWFyQmxvY2soc2l6ZSwgdXNhZ2UsICZibG9jayk7CisgICAgICAgIGlmIChlcnIgIT0gQzJfT0spIHsKKyAgICAgICAgICAgIHJldHVybiBudWxscHRyOworICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuIExpbmVhckJsb2NrQnVmZmVyOjpBbGxvY2F0ZShtRm9ybWF0LCBibG9jayk7CisgICAgfQorCitwcml2YXRlOgorICAgIEZsZXhCdWZmZXJzSW1wbCBtSW1wbDsKK307CisKK2NsYXNzIEVuY3J5cHRlZExpbmVhcklucHV0QnVmZmVycyA6IHB1YmxpYyBMaW5lYXJJbnB1dEJ1ZmZlcnMgeworcHVibGljOgorICAgIEVuY3J5cHRlZExpbmVhcklucHV0QnVmZmVycygKKyAgICAgICAgICAgIGJvb2wgc2VjdXJlLAorICAgICAgICAgICAgY29uc3Qgc3A8TWVtb3J5RGVhbGVyPiAmZGVhbGVyLAorICAgICAgICAgICAgY29uc3Qgc3A8SUNyeXB0bz4gJmNyeXB0bywKKyAgICAgICAgICAgIGludDMyX3QgaGVhcFNlcU51bSwKKyAgICAgICAgICAgIHNpemVfdCBjYXBhY2l0eSwKKyAgICAgICAgICAgIGNvbnN0IGNoYXIgKmNvbXBvbmVudE5hbWUsIGNvbnN0IGNoYXIgKm5hbWUgPSAiRW5jcnlwdGVkSW5wdXQiKQorICAgICAgICA6IExpbmVhcklucHV0QnVmZmVycyhjb21wb25lbnROYW1lLCBuYW1lKSwKKyAgICAgICAgICBtVXNhZ2UoezAsIDB9KSwKKyAgICAgICAgICBtRGVhbGVyKGRlYWxlciksCisgICAgICAgICAgbUNyeXB0byhjcnlwdG8pLAorICAgICAgICAgIG1IZWFwU2VxTnVtKGhlYXBTZXFOdW0pIHsKKyAgICAgICAgaWYgKHNlY3VyZSkgeworICAgICAgICAgICAgbVVzYWdlID0geyBDMk1lbW9yeVVzYWdlOjpSRUFEX1BST1RFQ1RFRCwgMCB9OworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgbVVzYWdlID0geyBDMk1lbW9yeVVzYWdlOjpDUFVfUkVBRCwgQzJNZW1vcnlVc2FnZTo6Q1BVX1dSSVRFIH07CisgICAgICAgIH0KKyAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBrTWluSW5wdXRCdWZmZXJBcnJheVNpemU7ICsraSkgeworICAgICAgICAgICAgc3A8SU1lbW9yeT4gbWVtb3J5ID0gbURlYWxlci0+YWxsb2NhdGUoY2FwYWNpdHkpOworICAgICAgICAgICAgaWYgKG1lbW9yeSA9PSBudWxscHRyKSB7CisgICAgICAgICAgICAgICAgQUxPR0QoIlslc10gRmFpbGVkIHRvIGFsbG9jYXRlIG1lbW9yeSBmcm9tIGRlYWxlcjogb25seSAlenUgc2xvdHMgYWxsb2NhdGVkIiwgbU5hbWUsIGkpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICAgICAgbU1lbW9yeVZlY3Rvci5wdXNoX2JhY2soe3N0ZDo6d2Vha19wdHI8QzJMaW5lYXJCbG9jaz4oKSwgbWVtb3J5fSk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICB+RW5jcnlwdGVkTGluZWFySW5wdXRCdWZmZXJzKCkgb3ZlcnJpZGUgeworICAgIH0KKworICAgIHNwPENvZGVjMkJ1ZmZlcj4gYWxsb2Moc2l6ZV90IHNpemUpIGNvbnN0IG92ZXJyaWRlIHsKKyAgICAgICAgc3A8SU1lbW9yeT4gbWVtb3J5OworICAgICAgICBmb3IgKGNvbnN0IEVudHJ5ICZlbnRyeSA6IG1NZW1vcnlWZWN0b3IpIHsKKyAgICAgICAgICAgIGlmIChlbnRyeS5ibG9jay5leHBpcmVkKCkpIHsKKyAgICAgICAgICAgICAgICBtZW1vcnkgPSBlbnRyeS5tZW1vcnk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgaWYgKG1lbW9yeSA9PSBudWxscHRyKSB7CisgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAgICAgfQorCisgICAgICAgIHN0ZDo6c2hhcmVkX3B0cjxDMkxpbmVhckJsb2NrPiBibG9jazsKKyAgICAgICAgYzJfc3RhdHVzX3QgZXJyID0gbVBvb2wtPmZldGNoTGluZWFyQmxvY2soc2l6ZSwgbVVzYWdlLCAmYmxvY2spOworICAgICAgICBpZiAoZXJyICE9IEMyX09LKSB7CisgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAgICAgfQorCisgICAgICAgIHJldHVybiBuZXcgRW5jcnlwdGVkTGluZWFyQmxvY2tCdWZmZXIobUZvcm1hdCwgYmxvY2ssIG1lbW9yeSwgbUhlYXBTZXFOdW0pOworICAgIH0KKworcHJpdmF0ZToKKyAgICBDMk1lbW9yeVVzYWdlIG1Vc2FnZTsKKyAgICBzcDxNZW1vcnlEZWFsZXI+IG1EZWFsZXI7CisgICAgc3A8SUNyeXB0bz4gbUNyeXB0bzsKKyAgICBpbnQzMl90IG1IZWFwU2VxTnVtOworICAgIHN0cnVjdCBFbnRyeSB7CisgICAgICAgIHN0ZDo6d2Vha19wdHI8QzJMaW5lYXJCbG9jaz4gYmxvY2s7CisgICAgICAgIHNwPElNZW1vcnk+IG1lbW9yeTsKKyAgICB9OworICAgIHN0ZDo6dmVjdG9yPEVudHJ5PiBtTWVtb3J5VmVjdG9yOworfTsKKworY2xhc3MgR3JhcGhpY01ldGFkYXRhSW5wdXRCdWZmZXJzIDogcHVibGljIENDb2RlY0J1ZmZlckNoYW5uZWw6OklucHV0QnVmZmVycyB7CitwdWJsaWM6CisgICAgR3JhcGhpY01ldGFkYXRhSW5wdXRCdWZmZXJzKGNvbnN0IGNoYXIgKmNvbXBvbmVudE5hbWUsIGNvbnN0IGNoYXIgKm5hbWUgPSAiMkQtTWV0YUlucHV0IikKKyAgICAgICAgOiBJbnB1dEJ1ZmZlcnMoY29tcG9uZW50TmFtZSwgbmFtZSksCisgICAgICAgICAgbUltcGwobU5hbWUpLAorICAgICAgICAgIG1TdG9yZShHZXRDb2RlYzJQbGF0Zm9ybUFsbG9jYXRvclN0b3JlKCkpIHsgfQorICAgIH5HcmFwaGljTWV0YWRhdGFJbnB1dEJ1ZmZlcnMoKSBvdmVycmlkZSA9IGRlZmF1bHQ7CisKKyAgICBib29sIHJlcXVlc3ROZXdCdWZmZXIoc2l6ZV90ICppbmRleCwgc3A8TWVkaWFDb2RlY0J1ZmZlcj4gKmJ1ZmZlcikgb3ZlcnJpZGUgeworICAgICAgICBzdGQ6OnNoYXJlZF9wdHI8QzJBbGxvY2F0b3I+IGFsbG9jOworICAgICAgICBjMl9zdGF0dXNfdCBlcnIgPSBtU3RvcmUtPmZldGNoQWxsb2NhdG9yKG1Qb29sLT5nZXRBbGxvY2F0b3JJZCgpLCAmYWxsb2MpOworICAgICAgICBpZiAoZXJyICE9IEMyX09LKSB7CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICAgICAgc3A8R3JhcGhpY01ldGFkYXRhQnVmZmVyPiBuZXdCdWZmZXIgPSBuZXcgR3JhcGhpY01ldGFkYXRhQnVmZmVyKG1Gb3JtYXQsIGFsbG9jKTsKKyAgICAgICAgaWYgKG5ld0J1ZmZlciA9PSBudWxscHRyKSB7CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICAgICAgKmluZGV4ID0gbUltcGwuYXNzaWduU2xvdChuZXdCdWZmZXIpOworICAgICAgICAqYnVmZmVyID0gbmV3QnVmZmVyOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAgICBib29sIHJlbGVhc2VCdWZmZXIoCisgICAgICAgICAgICBjb25zdCBzcDxNZWRpYUNvZGVjQnVmZmVyPiAmYnVmZmVyLCBzdGQ6OnNoYXJlZF9wdHI8QzJCdWZmZXI+ICpjMmJ1ZmZlcikgb3ZlcnJpZGUgeworICAgICAgICByZXR1cm4gbUltcGwucmVsZWFzZVNsb3QoYnVmZmVyLCBjMmJ1ZmZlcik7CisgICAgfQorCisgICAgYm9vbCBleHBpcmVDb21wb25lbnRCdWZmZXIoCisgICAgICAgICAgICBjb25zdCBzdGQ6OnNoYXJlZF9wdHI8QzJCdWZmZXI+ICZjMmJ1ZmZlcikgb3ZlcnJpZGUgeworICAgICAgICByZXR1cm4gbUltcGwuZXhwaXJlQ29tcG9uZW50QnVmZmVyKGMyYnVmZmVyKTsKKyAgICB9CisKKyAgICB2b2lkIGZsdXNoKCkgb3ZlcnJpZGUgeworICAgICAgICAvLyBUaGlzIGlzIG5vLW9wIGJ5IGRlZmF1bHQgdW5sZXNzIHdlJ3JlIGluIGFycmF5IG1vZGUgd2hlcmUgd2UgbmVlZCB0byBrZWVwCisgICAgICAgIC8vIHRyYWNrIG9mIHRoZSBmbHVzaGVkIHdvcmsuCisgICAgfQorCisgICAgc3RkOjp1bmlxdWVfcHRyPENDb2RlY0J1ZmZlckNoYW5uZWw6OklucHV0QnVmZmVycz4gdG9BcnJheU1vZGUoCisgICAgICAgICAgICBzaXplX3Qgc2l6ZSkgZmluYWwgeworICAgICAgICBzdGQ6OnNoYXJlZF9wdHI8QzJBbGxvY2F0b3I+IGFsbG9jOworICAgICAgICBjMl9zdGF0dXNfdCBlcnIgPSBtU3RvcmUtPmZldGNoQWxsb2NhdG9yKG1Qb29sLT5nZXRBbGxvY2F0b3JJZCgpLCAmYWxsb2MpOworICAgICAgICBpZiAoZXJyICE9IEMyX09LKSB7CisgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAgICAgfQorICAgICAgICBzdGQ6OnVuaXF1ZV9wdHI8SW5wdXRCdWZmZXJzQXJyYXk+IGFycmF5KAorICAgICAgICAgICAgICAgIG5ldyBJbnB1dEJ1ZmZlcnNBcnJheShtQ29tcG9uZW50TmFtZS5jX3N0cigpLCAiMkQtTWV0YUlucHV0W05dIikpOworICAgICAgICBhcnJheS0+c2V0UG9vbChtUG9vbCk7CisgICAgICAgIGFycmF5LT5zZXRGb3JtYXQobUZvcm1hdCk7CisgICAgICAgIGFycmF5LT5pbml0aWFsaXplKAorICAgICAgICAgICAgICAgIG1JbXBsLAorICAgICAgICAgICAgICAgIHNpemUsCisgICAgICAgICAgICAgICAgW2Zvcm1hdCA9IG1Gb3JtYXQsIGFsbG9jXSgpIC0+IHNwPENvZGVjMkJ1ZmZlcj4geworICAgICAgICAgICAgICAgICAgICByZXR1cm4gbmV3IEdyYXBoaWNNZXRhZGF0YUJ1ZmZlcihmb3JtYXQsIGFsbG9jKTsKKyAgICAgICAgICAgICAgICB9KTsKKyAgICAgICAgcmV0dXJuIHN0ZDo6bW92ZShhcnJheSk7CisgICAgfQorCitwcml2YXRlOgorICAgIEZsZXhCdWZmZXJzSW1wbCBtSW1wbDsKKyAgICBzdGQ6OnNoYXJlZF9wdHI8QzJBbGxvY2F0b3JTdG9yZT4gbVN0b3JlOworfTsKKworY2xhc3MgR3JhcGhpY0lucHV0QnVmZmVycyA6IHB1YmxpYyBDQ29kZWNCdWZmZXJDaGFubmVsOjpJbnB1dEJ1ZmZlcnMgeworcHVibGljOgorICAgIEdyYXBoaWNJbnB1dEJ1ZmZlcnMoY29uc3QgY2hhciAqY29tcG9uZW50TmFtZSwgY29uc3QgY2hhciAqbmFtZSA9ICIyRC1CQi1JbnB1dCIpCisgICAgICAgIDogSW5wdXRCdWZmZXJzKGNvbXBvbmVudE5hbWUsIG5hbWUpLAorICAgICAgICAgIG1JbXBsKG1OYW1lKSwKKyAgICAgICAgICBtTG9jYWxCdWZmZXJQb29sKExvY2FsQnVmZmVyUG9vbDo6Q3JlYXRlKAorICAgICAgICAgICAgICAgICAga01heExpbmVhckJ1ZmZlclNpemUgKiBrTWluSW5wdXRCdWZmZXJBcnJheVNpemUpKSB7IH0KKyAgICB+R3JhcGhpY0lucHV0QnVmZmVycygpIG92ZXJyaWRlID0gZGVmYXVsdDsKKworICAgIGJvb2wgcmVxdWVzdE5ld0J1ZmZlcihzaXplX3QgKmluZGV4LCBzcDxNZWRpYUNvZGVjQnVmZmVyPiAqYnVmZmVyKSBvdmVycmlkZSB7CisgICAgICAgIC8vIFRPRE86IHByb3BlciBtYXggaW5wdXQgc2l6ZQorICAgICAgICAvLyBUT0RPOiByZWFkIHVzYWdlIGZyb20gaW50ZgorICAgICAgICBDMk1lbW9yeVVzYWdlIHVzYWdlID0geyBDMk1lbW9yeVVzYWdlOjpDUFVfUkVBRCwgQzJNZW1vcnlVc2FnZTo6Q1BVX1dSSVRFIH07CisgICAgICAgIHNwPEdyYXBoaWNCbG9ja0J1ZmZlcj4gbmV3QnVmZmVyID0gQWxsb2NhdGVHcmFwaGljQnVmZmVyKAorICAgICAgICAgICAgICAgIG1Qb29sLCBtRm9ybWF0LCBIQUxfUElYRUxfRk9STUFUX1lWMTIsIHVzYWdlLCBtTG9jYWxCdWZmZXJQb29sKTsKKyAgICAgICAgaWYgKG5ld0J1ZmZlciA9PSBudWxscHRyKSB7CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICAgICAgKmluZGV4ID0gbUltcGwuYXNzaWduU2xvdChuZXdCdWZmZXIpOworICAgICAgICAqYnVmZmVyID0gbmV3QnVmZmVyOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAgICBib29sIHJlbGVhc2VCdWZmZXIoCisgICAgICAgICAgICBjb25zdCBzcDxNZWRpYUNvZGVjQnVmZmVyPiAmYnVmZmVyLCBzdGQ6OnNoYXJlZF9wdHI8QzJCdWZmZXI+ICpjMmJ1ZmZlcikgb3ZlcnJpZGUgeworICAgICAgICByZXR1cm4gbUltcGwucmVsZWFzZVNsb3QoYnVmZmVyLCBjMmJ1ZmZlcik7CisgICAgfQorCisgICAgYm9vbCBleHBpcmVDb21wb25lbnRCdWZmZXIoCisgICAgICAgICAgICBjb25zdCBzdGQ6OnNoYXJlZF9wdHI8QzJCdWZmZXI+ICZjMmJ1ZmZlcikgb3ZlcnJpZGUgeworICAgICAgICByZXR1cm4gbUltcGwuZXhwaXJlQ29tcG9uZW50QnVmZmVyKGMyYnVmZmVyKTsKKyAgICB9CisgICAgdm9pZCBmbHVzaCgpIG92ZXJyaWRlIHsKKyAgICAgICAgLy8gVGhpcyBpcyBuby1vcCBieSBkZWZhdWx0IHVubGVzcyB3ZSdyZSBpbiBhcnJheSBtb2RlIHdoZXJlIHdlIG5lZWQgdG8ga2VlcAorICAgICAgICAvLyB0cmFjayBvZiB0aGUgZmx1c2hlZCB3b3JrLgorICAgIH0KKworICAgIHN0ZDo6dW5pcXVlX3B0cjxDQ29kZWNCdWZmZXJDaGFubmVsOjpJbnB1dEJ1ZmZlcnM+IHRvQXJyYXlNb2RlKAorICAgICAgICAgICAgc2l6ZV90IHNpemUpIGZpbmFsIHsKKyAgICAgICAgc3RkOjp1bmlxdWVfcHRyPElucHV0QnVmZmVyc0FycmF5PiBhcnJheSgKKyAgICAgICAgICAgICAgICBuZXcgSW5wdXRCdWZmZXJzQXJyYXkobUNvbXBvbmVudE5hbWUuY19zdHIoKSwgIjJELUJCLUlucHV0W05dIikpOworICAgICAgICBhcnJheS0+c2V0UG9vbChtUG9vbCk7CisgICAgICAgIGFycmF5LT5zZXRGb3JtYXQobUZvcm1hdCk7CisgICAgICAgIGFycmF5LT5pbml0aWFsaXplKAorICAgICAgICAgICAgICAgIG1JbXBsLAorICAgICAgICAgICAgICAgIHNpemUsCisgICAgICAgICAgICAgICAgW3Bvb2wgPSBtUG9vbCwgZm9ybWF0ID0gbUZvcm1hdCwgbGJwID0gbUxvY2FsQnVmZmVyUG9vbF0oKSAtPiBzcDxDb2RlYzJCdWZmZXI+IHsKKyAgICAgICAgICAgICAgICAgICAgQzJNZW1vcnlVc2FnZSB1c2FnZSA9IHsgQzJNZW1vcnlVc2FnZTo6Q1BVX1JFQUQsIEMyTWVtb3J5VXNhZ2U6OkNQVV9XUklURSB9OworICAgICAgICAgICAgICAgICAgICByZXR1cm4gQWxsb2NhdGVHcmFwaGljQnVmZmVyKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBvb2wsIGZvcm1hdCwgSEFMX1BJWEVMX0ZPUk1BVF9ZVjEyLCB1c2FnZSwgbGJwKTsKKyAgICAgICAgICAgICAgICB9KTsKKyAgICAgICAgcmV0dXJuIHN0ZDo6bW92ZShhcnJheSk7CisgICAgfQorCitwcml2YXRlOgorICAgIEZsZXhCdWZmZXJzSW1wbCBtSW1wbDsKKyAgICBzdGQ6OnNoYXJlZF9wdHI8TG9jYWxCdWZmZXJQb29sPiBtTG9jYWxCdWZmZXJQb29sOworfTsKKworY2xhc3MgRHVtbXlJbnB1dEJ1ZmZlcnMgOiBwdWJsaWMgQ0NvZGVjQnVmZmVyQ2hhbm5lbDo6SW5wdXRCdWZmZXJzIHsKK3B1YmxpYzoKKyAgICBEdW1teUlucHV0QnVmZmVycyhjb25zdCBjaGFyICpjb21wb25lbnROYW1lLCBjb25zdCBjaGFyICpuYW1lID0gIjJELUlucHV0IikKKyAgICAgICAgOiBJbnB1dEJ1ZmZlcnMoY29tcG9uZW50TmFtZSwgbmFtZSkgeyB9CisKKyAgICBib29sIHJlcXVlc3ROZXdCdWZmZXIoc2l6ZV90ICosIHNwPE1lZGlhQ29kZWNCdWZmZXI+ICopIG92ZXJyaWRlIHsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIGJvb2wgcmVsZWFzZUJ1ZmZlcigKKyAgICAgICAgICAgIGNvbnN0IHNwPE1lZGlhQ29kZWNCdWZmZXI+ICYsIHN0ZDo6c2hhcmVkX3B0cjxDMkJ1ZmZlcj4gKikgb3ZlcnJpZGUgeworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgYm9vbCBleHBpcmVDb21wb25lbnRCdWZmZXIoY29uc3Qgc3RkOjpzaGFyZWRfcHRyPEMyQnVmZmVyPiAmKSBvdmVycmlkZSB7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgICAgdm9pZCBmbHVzaCgpIG92ZXJyaWRlIHsKKyAgICB9CisKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8Q0NvZGVjQnVmZmVyQ2hhbm5lbDo6SW5wdXRCdWZmZXJzPiB0b0FycmF5TW9kZSgKKyAgICAgICAgICAgIHNpemVfdCkgZmluYWwgeworICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICB9CisKKyAgICBib29sIGlzQXJyYXlNb2RlKCkgY29uc3QgZmluYWwgeyByZXR1cm4gdHJ1ZTsgfQorCisgICAgdm9pZCBnZXRBcnJheShWZWN0b3I8c3A8TWVkaWFDb2RlY0J1ZmZlcj4+ICphcnJheSkgY29uc3QgZmluYWwgeworICAgICAgICBhcnJheS0+Y2xlYXIoKTsKKyAgICB9Cit9OworCitjbGFzcyBPdXRwdXRCdWZmZXJzQXJyYXkgOiBwdWJsaWMgQ0NvZGVjQnVmZmVyQ2hhbm5lbDo6T3V0cHV0QnVmZmVycyB7CitwdWJsaWM6CisgICAgT3V0cHV0QnVmZmVyc0FycmF5KGNvbnN0IGNoYXIgKmNvbXBvbmVudE5hbWUsIGNvbnN0IGNoYXIgKm5hbWUgPSAiT3V0cHV0W05dIikKKyAgICAgICAgOiBPdXRwdXRCdWZmZXJzKGNvbXBvbmVudE5hbWUsIG5hbWUpIHsgfQorICAgIH5PdXRwdXRCdWZmZXJzQXJyYXkoKSBvdmVycmlkZSA9IGRlZmF1bHQ7CisKKyAgICB2b2lkIGluaXRpYWxpemUoCisgICAgICAgICAgICBjb25zdCBGbGV4QnVmZmVyc0ltcGwgJmltcGwsCisgICAgICAgICAgICBzaXplX3QgbWluU2l6ZSwKKyAgICAgICAgICAgIHN0ZDo6ZnVuY3Rpb248c3A8Q29kZWMyQnVmZmVyPigpPiBhbGxvY2F0ZSkgeworICAgICAgICBtSW1wbC5pbml0aWFsaXplKGltcGwsIG1pblNpemUsIGFsbG9jYXRlKTsKKyAgICB9CisKKyAgICBib29sIGlzQXJyYXlNb2RlKCkgY29uc3QgZmluYWwgeyByZXR1cm4gdHJ1ZTsgfQorCisgICAgc3RkOjp1bmlxdWVfcHRyPENDb2RlY0J1ZmZlckNoYW5uZWw6Ok91dHB1dEJ1ZmZlcnM+IHRvQXJyYXlNb2RlKAorICAgICAgICAgICAgc2l6ZV90KSBmaW5hbCB7CisgICAgICAgIHJldHVybiBudWxscHRyOworICAgIH0KKworICAgIHN0YXR1c190IHJlZ2lzdGVyQnVmZmVyKAorICAgICAgICAgICAgY29uc3Qgc3RkOjpzaGFyZWRfcHRyPEMyQnVmZmVyPiAmYnVmZmVyLAorICAgICAgICAgICAgc2l6ZV90ICppbmRleCwKKyAgICAgICAgICAgIHNwPE1lZGlhQ29kZWNCdWZmZXI+ICpjbGllbnRCdWZmZXIpIGZpbmFsIHsKKyAgICAgICAgc3A8Q29kZWMyQnVmZmVyPiBjMkJ1ZmZlcjsKKyAgICAgICAgc3RhdHVzX3QgZXJyID0gbUltcGwuZ3JhYkJ1ZmZlcigKKyAgICAgICAgICAgICAgICBpbmRleCwKKyAgICAgICAgICAgICAgICAmYzJCdWZmZXIsCisgICAgICAgICAgICAgICAgW2J1ZmZlcl0oY29uc3Qgc3A8Q29kZWMyQnVmZmVyPiAmY2xpZW50QnVmZmVyKSB7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBjbGllbnRCdWZmZXItPmNhbkNvcHkoYnVmZmVyKTsKKyAgICAgICAgICAgICAgICB9KTsKKyAgICAgICAgaWYgKGVyciA9PSBXT1VMRF9CTE9DSykgeworICAgICAgICAgICAgQUxPR1YoIlslc10gYnVmZmVycyB0ZW1wb3JhcmlseSBub3QgYXZhaWxhYmxlIiwgbU5hbWUpOworICAgICAgICAgICAgcmV0dXJuIGVycjsKKyAgICAgICAgfSBlbHNlIGlmIChlcnIgIT0gT0spIHsKKyAgICAgICAgICAgIEFMT0dEKCJbJXNdIGdyYWJCdWZmZXIgZmFpbGVkOiAlZCIsIG1OYW1lLCBlcnIpOworICAgICAgICAgICAgcmV0dXJuIGVycjsKKyAgICAgICAgfQorICAgICAgICBjMkJ1ZmZlci0+c2V0Rm9ybWF0KG1Gb3JtYXQpOworICAgICAgICBpZiAoIWMyQnVmZmVyLT5jb3B5KGJ1ZmZlcikpIHsKKyAgICAgICAgICAgIEFMT0dEKCJbJXNdIGNvcHkgYnVmZmVyIGZhaWxlZCIsIG1OYW1lKTsKKyAgICAgICAgICAgIHJldHVybiBXT1VMRF9CTE9DSzsKKyAgICAgICAgfQorICAgICAgICBzdWJtaXQoYzJCdWZmZXIpOworICAgICAgICAqY2xpZW50QnVmZmVyID0gYzJCdWZmZXI7CisgICAgICAgIEFMT0dWKCJbJXNdIGdyYWJiZWQgYnVmZmVyICV6dSIsIG1OYW1lLCAqaW5kZXgpOworICAgICAgICByZXR1cm4gT0s7CisgICAgfQorCisgICAgc3RhdHVzX3QgcmVnaXN0ZXJDc2QoCisgICAgICAgICAgICBjb25zdCBDMlN0cmVhbUNzZEluZm86Om91dHB1dCAqY3NkLAorICAgICAgICAgICAgc2l6ZV90ICppbmRleCwKKyAgICAgICAgICAgIHNwPE1lZGlhQ29kZWNCdWZmZXI+ICpjbGllbnRCdWZmZXIpIGZpbmFsIHsKKyAgICAgICAgc3A8Q29kZWMyQnVmZmVyPiBjMkJ1ZmZlcjsKKyAgICAgICAgc3RhdHVzX3QgZXJyID0gbUltcGwuZ3JhYkJ1ZmZlcigKKyAgICAgICAgICAgICAgICBpbmRleCwKKyAgICAgICAgICAgICAgICAmYzJCdWZmZXIsCisgICAgICAgICAgICAgICAgW2NzZF0oY29uc3Qgc3A8Q29kZWMyQnVmZmVyPiAmY2xpZW50QnVmZmVyKSB7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBjbGllbnRCdWZmZXItPmJhc2UoKSAhPSBudWxscHRyCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgJiYgY2xpZW50QnVmZmVyLT5jYXBhY2l0eSgpID49IGNzZC0+ZmxleENvdW50KCk7CisgICAgICAgICAgICAgICAgfSk7CisgICAgICAgIGlmIChlcnIgIT0gT0spIHsKKyAgICAgICAgICAgIHJldHVybiBlcnI7CisgICAgICAgIH0KKyAgICAgICAgbWVtY3B5KGMyQnVmZmVyLT5iYXNlKCksIGNzZC0+bS52YWx1ZSwgY3NkLT5mbGV4Q291bnQoKSk7CisgICAgICAgIGMyQnVmZmVyLT5zZXRSYW5nZSgwLCBjc2QtPmZsZXhDb3VudCgpKTsKKyAgICAgICAgYzJCdWZmZXItPnNldEZvcm1hdChtRm9ybWF0KTsKKyAgICAgICAgKmNsaWVudEJ1ZmZlciA9IGMyQnVmZmVyOworICAgICAgICByZXR1cm4gT0s7CisgICAgfQorCisgICAgYm9vbCByZWxlYXNlQnVmZmVyKAorICAgICAgICAgICAgY29uc3Qgc3A8TWVkaWFDb2RlY0J1ZmZlcj4gJmJ1ZmZlciwgc3RkOjpzaGFyZWRfcHRyPEMyQnVmZmVyPiAqYzJidWZmZXIpIG92ZXJyaWRlIHsKKyAgICAgICAgcmV0dXJuIG1JbXBsLnJldHVybkJ1ZmZlcihidWZmZXIsIGMyYnVmZmVyKTsKKyAgICB9CisKKyAgICB2b2lkIGZsdXNoKGNvbnN0IHN0ZDo6bGlzdDxzdGQ6OnVuaXF1ZV9wdHI8QzJXb3JrPj4gJmZsdXNoZWRXb3JrKSBvdmVycmlkZSB7CisgICAgICAgICh2b2lkKWZsdXNoZWRXb3JrOworICAgICAgICBtSW1wbC5mbHVzaCgpOworICAgICAgICBpZiAobVNraXBDdXRCdWZmZXIgIT0gbnVsbHB0cikgeworICAgICAgICAgICAgbVNraXBDdXRCdWZmZXItPmNsZWFyKCk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICB2b2lkIGdldEFycmF5KFZlY3RvcjxzcDxNZWRpYUNvZGVjQnVmZmVyPj4gKmFycmF5KSBjb25zdCBmaW5hbCB7CisgICAgICAgIG1JbXBsLmdldEFycmF5KGFycmF5KTsKKyAgICB9CisKKyAgICB2b2lkIHJlYWxsb2MoY29uc3Qgc3RkOjpzaGFyZWRfcHRyPEMyQnVmZmVyPiAmYzJidWZmZXIpIHsKKyAgICAgICAgc3RkOjpmdW5jdGlvbjxzcDxDb2RlYzJCdWZmZXI+KCk+IGFsbG9jOworICAgICAgICBzd2l0Y2ggKGMyYnVmZmVyLT5kYXRhKCkudHlwZSgpKSB7CisgICAgICAgICAgICBjYXNlIEMyQnVmZmVyRGF0YTo6TElORUFSOiB7CisgICAgICAgICAgICAgICAgdWludDMyX3Qgc2l6ZSA9IGtMaW5lYXJCdWZmZXJTaXplOworICAgICAgICAgICAgICAgIGNvbnN0IEMyQ29uc3RMaW5lYXJCbG9jayAmYmxvY2sgPSBjMmJ1ZmZlci0+ZGF0YSgpLmxpbmVhckJsb2NrcygpLmZyb250KCk7CisgICAgICAgICAgICAgICAgaWYgKGJsb2NrLnNpemUoKSA8IGtNYXhMaW5lYXJCdWZmZXJTaXplIC8gMikgeworICAgICAgICAgICAgICAgICAgICBzaXplID0gYmxvY2suc2l6ZSgpICogMjsKKyAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICBzaXplID0ga01heExpbmVhckJ1ZmZlclNpemU7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGFsbG9jID0gW2Zvcm1hdCA9IG1Gb3JtYXQsIHNpemVdIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBMb2NhbExpbmVhckJ1ZmZlcihmb3JtYXQsIG5ldyBBQnVmZmVyKHNpemUpKTsKKyAgICAgICAgICAgICAgICB9OworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICAvLyBUT0RPOiBhZGQgc3VwcG9ydAorICAgICAgICAgICAgY2FzZSBDMkJ1ZmZlckRhdGE6OkdSQVBISUM6ICAgICAgICAgRkFMTFRIUk9VR0hfSU5URU5ERUQ7CisKKyAgICAgICAgICAgIGNhc2UgQzJCdWZmZXJEYXRhOjpJTlZBTElEOiAgICAgICAgIEZBTExUSFJPVUdIX0lOVEVOREVEOworICAgICAgICAgICAgY2FzZSBDMkJ1ZmZlckRhdGE6OkxJTkVBUl9DSFVOS1M6ICAgRkFMTFRIUk9VR0hfSU5URU5ERUQ7CisgICAgICAgICAgICBjYXNlIEMyQnVmZmVyRGF0YTo6R1JBUEhJQ19DSFVOS1M6ICBGQUxMVEhST1VHSF9JTlRFTkRFRDsKKyAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgQUxPR0QoIlVuc3VwcG9ydGVkIHR5cGU6ICVkIiwgKGludCljMmJ1ZmZlci0+ZGF0YSgpLnR5cGUoKSk7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIG1JbXBsLnJlYWxsb2MoYWxsb2MpOworICAgIH0KKworcHJpdmF0ZToKKyAgICBCdWZmZXJzQXJyYXlJbXBsIG1JbXBsOworfTsKKworY2xhc3MgRmxleE91dHB1dEJ1ZmZlcnMgOiBwdWJsaWMgQ0NvZGVjQnVmZmVyQ2hhbm5lbDo6T3V0cHV0QnVmZmVycyB7CitwdWJsaWM6CisgICAgRmxleE91dHB1dEJ1ZmZlcnMoY29uc3QgY2hhciAqY29tcG9uZW50TmFtZSwgY29uc3QgY2hhciAqbmFtZSA9ICJPdXRwdXRbXSIpCisgICAgICAgIDogT3V0cHV0QnVmZmVycyhjb21wb25lbnROYW1lLCBuYW1lKSwKKyAgICAgICAgICBtSW1wbChtTmFtZSkgeyB9CisKKyAgICBzdGF0dXNfdCByZWdpc3RlckJ1ZmZlcigKKyAgICAgICAgICAgIGNvbnN0IHN0ZDo6c2hhcmVkX3B0cjxDMkJ1ZmZlcj4gJmJ1ZmZlciwKKyAgICAgICAgICAgIHNpemVfdCAqaW5kZXgsCisgICAgICAgICAgICBzcDxNZWRpYUNvZGVjQnVmZmVyPiAqY2xpZW50QnVmZmVyKSBvdmVycmlkZSB7CisgICAgICAgIHNwPENvZGVjMkJ1ZmZlcj4gbmV3QnVmZmVyID0gd3JhcChidWZmZXIpOworICAgICAgICBuZXdCdWZmZXItPnNldEZvcm1hdChtRm9ybWF0KTsKKyAgICAgICAgKmluZGV4ID0gbUltcGwuYXNzaWduU2xvdChuZXdCdWZmZXIpOworICAgICAgICAqY2xpZW50QnVmZmVyID0gbmV3QnVmZmVyOworICAgICAgICBBTE9HVigiWyVzXSByZWdpc3RlcmVkIGJ1ZmZlciAlenUiLCBtTmFtZSwgKmluZGV4KTsKKyAgICAgICAgcmV0dXJuIE9LOworICAgIH0KKworICAgIHN0YXR1c190IHJlZ2lzdGVyQ3NkKAorICAgICAgICAgICAgY29uc3QgQzJTdHJlYW1Dc2RJbmZvOjpvdXRwdXQgKmNzZCwKKyAgICAgICAgICAgIHNpemVfdCAqaW5kZXgsCisgICAgICAgICAgICBzcDxNZWRpYUNvZGVjQnVmZmVyPiAqY2xpZW50QnVmZmVyKSBmaW5hbCB7CisgICAgICAgIHNwPENvZGVjMkJ1ZmZlcj4gbmV3QnVmZmVyID0gbmV3IExvY2FsTGluZWFyQnVmZmVyKAorICAgICAgICAgICAgICAgIG1Gb3JtYXQsIEFCdWZmZXI6OkNyZWF0ZUFzQ29weShjc2QtPm0udmFsdWUsIGNzZC0+ZmxleENvdW50KCkpKTsKKyAgICAgICAgKmluZGV4ID0gbUltcGwuYXNzaWduU2xvdChuZXdCdWZmZXIpOworICAgICAgICAqY2xpZW50QnVmZmVyID0gbmV3QnVmZmVyOworICAgICAgICByZXR1cm4gT0s7CisgICAgfQorCisgICAgYm9vbCByZWxlYXNlQnVmZmVyKAorICAgICAgICAgICAgY29uc3Qgc3A8TWVkaWFDb2RlY0J1ZmZlcj4gJmJ1ZmZlciwgc3RkOjpzaGFyZWRfcHRyPEMyQnVmZmVyPiAqYzJidWZmZXIpIG92ZXJyaWRlIHsKKyAgICAgICAgcmV0dXJuIG1JbXBsLnJlbGVhc2VTbG90KGJ1ZmZlciwgYzJidWZmZXIpOworICAgIH0KKworICAgIHZvaWQgZmx1c2goCisgICAgICAgICAgICBjb25zdCBzdGQ6Omxpc3Q8c3RkOjp1bmlxdWVfcHRyPEMyV29yaz4+ICZmbHVzaGVkV29yaykgb3ZlcnJpZGUgeworICAgICAgICAodm9pZCkgZmx1c2hlZFdvcms7CisgICAgICAgIC8vIFRoaXMgaXMgbm8tb3AgYnkgZGVmYXVsdCB1bmxlc3Mgd2UncmUgaW4gYXJyYXkgbW9kZSB3aGVyZSB3ZSBuZWVkIHRvIGtlZXAKKyAgICAgICAgLy8gdHJhY2sgb2YgdGhlIGZsdXNoZWQgd29yay4KKyAgICB9CisKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8Q0NvZGVjQnVmZmVyQ2hhbm5lbDo6T3V0cHV0QnVmZmVycz4gdG9BcnJheU1vZGUoCisgICAgICAgICAgICBzaXplX3Qgc2l6ZSkgb3ZlcnJpZGUgeworICAgICAgICBzdGQ6OnVuaXF1ZV9wdHI8T3V0cHV0QnVmZmVyc0FycmF5PiBhcnJheShuZXcgT3V0cHV0QnVmZmVyc0FycmF5KG1Db21wb25lbnROYW1lLmNfc3RyKCkpKTsKKyAgICAgICAgYXJyYXktPnNldEZvcm1hdChtRm9ybWF0KTsKKyAgICAgICAgYXJyYXktPnRyYW5zZmVyU2tpcEN1dEJ1ZmZlcihtU2tpcEN1dEJ1ZmZlcik7CisgICAgICAgIGFycmF5LT5pbml0aWFsaXplKAorICAgICAgICAgICAgICAgIG1JbXBsLAorICAgICAgICAgICAgICAgIHNpemUsCisgICAgICAgICAgICAgICAgW3RoaXNdKCkgeyByZXR1cm4gYWxsb2NhdGVBcnJheUJ1ZmZlcigpOyB9KTsKKyAgICAgICAgcmV0dXJuIHN0ZDo6bW92ZShhcnJheSk7CisgICAgfQorCisgICAgLyoqCisgICAgICogUmV0dXJuIGFuIGFwcHJvcHJpYXRlIENvZGVjMkJ1ZmZlciBvYmplY3QgZm9yIHRoZSB0eXBlIG9mIGJ1ZmZlcnMuCisgICAgICoKKyAgICAgKiBccGFyYW0gYnVmZmVyICBDMkJ1ZmZlciBvYmplY3QgdG8gd3JhcC4KKyAgICAgKgorICAgICAqIFxyZXR1cm4gIGFwcHJvcHJpYXRlIENvZGVjMkJ1ZmZlciBvYmplY3QgdG8gd3JhcCB8YnVmZmVyfC4KKyAgICAgKi8KKyAgICB2aXJ0dWFsIHNwPENvZGVjMkJ1ZmZlcj4gd3JhcChjb25zdCBzdGQ6OnNoYXJlZF9wdHI8QzJCdWZmZXI+ICZidWZmZXIpID0gMDsKKworICAgIC8qKgorICAgICAqIFJldHVybiBhbiBhcHByb3ByaWF0ZSBDb2RlYzJCdWZmZXIgb2JqZWN0IGZvciB0aGUgdHlwZSBvZiBidWZmZXJzLCB0byBiZQorICAgICAqIHVzZWQgYXMgYW4gZW1wdHkgYXJyYXkgYnVmZmVyLgorICAgICAqCisgICAgICogXHJldHVybiAgYXBwcm9wcmlhdGUgQ29kZWMyQnVmZmVyIG9iamVjdCB3aGljaCBjYW4gY29weSgpIGZyb20gQzJCdWZmZXJzLgorICAgICAqLworICAgIHZpcnR1YWwgc3A8Q29kZWMyQnVmZmVyPiBhbGxvY2F0ZUFycmF5QnVmZmVyKCkgPSAwOworCitwcml2YXRlOgorICAgIEZsZXhCdWZmZXJzSW1wbCBtSW1wbDsKK307CisKK2NsYXNzIExpbmVhck91dHB1dEJ1ZmZlcnMgOiBwdWJsaWMgRmxleE91dHB1dEJ1ZmZlcnMgeworcHVibGljOgorICAgIExpbmVhck91dHB1dEJ1ZmZlcnMoY29uc3QgY2hhciAqY29tcG9uZW50TmFtZSwgY29uc3QgY2hhciAqbmFtZSA9ICIxRC1PdXRwdXQiKQorICAgICAgICA6IEZsZXhPdXRwdXRCdWZmZXJzKGNvbXBvbmVudE5hbWUsIG5hbWUpIHsgfQorCisgICAgdm9pZCBmbHVzaCgKKyAgICAgICAgICAgIGNvbnN0IHN0ZDo6bGlzdDxzdGQ6OnVuaXF1ZV9wdHI8QzJXb3JrPj4gJmZsdXNoZWRXb3JrKSBvdmVycmlkZSB7CisgICAgICAgIGlmIChtU2tpcEN1dEJ1ZmZlciAhPSBudWxscHRyKSB7CisgICAgICAgICAgICBtU2tpcEN1dEJ1ZmZlci0+Y2xlYXIoKTsKKyAgICAgICAgfQorICAgICAgICBGbGV4T3V0cHV0QnVmZmVyczo6Zmx1c2goZmx1c2hlZFdvcmspOworICAgIH0KKworICAgIHNwPENvZGVjMkJ1ZmZlcj4gd3JhcChjb25zdCBzdGQ6OnNoYXJlZF9wdHI8QzJCdWZmZXI+ICZidWZmZXIpIG92ZXJyaWRlIHsKKyAgICAgICAgaWYgKGJ1ZmZlciA9PSBudWxscHRyKSB7CisgICAgICAgICAgICBBTE9HVigiWyVzXSB1c2luZyBhIGR1bW15IGJ1ZmZlciIsIG1OYW1lKTsKKyAgICAgICAgICAgIHJldHVybiBuZXcgTG9jYWxMaW5lYXJCdWZmZXIobUZvcm1hdCwgbmV3IEFCdWZmZXIoMCkpOworICAgICAgICB9CisgICAgICAgIGlmIChidWZmZXItPmRhdGEoKS50eXBlKCkgIT0gQzJCdWZmZXJEYXRhOjpMSU5FQVIpIHsKKyAgICAgICAgICAgIEFMT0dWKCJbJXNdIG5vbi1saW5lYXIgYnVmZmVyICVkIiwgbU5hbWUsIGJ1ZmZlci0+ZGF0YSgpLnR5cGUoKSk7CisgICAgICAgICAgICAvLyBXZSBleHBlY3QgbGluZWFyIG91dHB1dCBidWZmZXJzIGZyb20gdGhlIGNvbXBvbmVudC4KKyAgICAgICAgICAgIHJldHVybiBudWxscHRyOworICAgICAgICB9CisgICAgICAgIGlmIChidWZmZXItPmRhdGEoKS5saW5lYXJCbG9ja3MoKS5zaXplKCkgIT0gMXUpIHsKKyAgICAgICAgICAgIEFMT0dWKCJbJXNdIG5vIGxpbmVhciBidWZmZXJzIiwgbU5hbWUpOworICAgICAgICAgICAgLy8gV2UgZXhwZWN0IG9uZSBhbmQgb25seSBvbmUgbGluZWFyIGJsb2NrIGZyb20gdGhlIGNvbXBvbmVudC4KKyAgICAgICAgICAgIHJldHVybiBudWxscHRyOworICAgICAgICB9CisgICAgICAgIHNwPENvZGVjMkJ1ZmZlcj4gY2xpZW50QnVmZmVyID0gQ29uc3RMaW5lYXJCbG9ja0J1ZmZlcjo6QWxsb2NhdGUobUZvcm1hdCwgYnVmZmVyKTsKKyAgICAgICAgc3VibWl0KGNsaWVudEJ1ZmZlcik7CisgICAgICAgIHJldHVybiBjbGllbnRCdWZmZXI7CisgICAgfQorCisgICAgc3A8Q29kZWMyQnVmZmVyPiBhbGxvY2F0ZUFycmF5QnVmZmVyKCkgb3ZlcnJpZGUgeworICAgICAgICAvLyBUT0RPOiBwcm9wZXIgbWF4IG91dHB1dCBzaXplCisgICAgICAgIHJldHVybiBuZXcgTG9jYWxMaW5lYXJCdWZmZXIobUZvcm1hdCwgbmV3IEFCdWZmZXIoa0xpbmVhckJ1ZmZlclNpemUpKTsKKyAgICB9Cit9OworCitjbGFzcyBHcmFwaGljT3V0cHV0QnVmZmVycyA6IHB1YmxpYyBGbGV4T3V0cHV0QnVmZmVycyB7CitwdWJsaWM6CisgICAgR3JhcGhpY091dHB1dEJ1ZmZlcnMoY29uc3QgY2hhciAqY29tcG9uZW50TmFtZSwgY29uc3QgY2hhciAqbmFtZSA9ICIyRC1PdXRwdXQiKQorICAgICAgICA6IEZsZXhPdXRwdXRCdWZmZXJzKGNvbXBvbmVudE5hbWUsIG5hbWUpIHsgfQorCisgICAgc3A8Q29kZWMyQnVmZmVyPiB3cmFwKGNvbnN0IHN0ZDo6c2hhcmVkX3B0cjxDMkJ1ZmZlcj4gJmJ1ZmZlcikgb3ZlcnJpZGUgeworICAgICAgICByZXR1cm4gbmV3IER1bW15Q29udGFpbmVyQnVmZmVyKG1Gb3JtYXQsIGJ1ZmZlcik7CisgICAgfQorCisgICAgc3A8Q29kZWMyQnVmZmVyPiBhbGxvY2F0ZUFycmF5QnVmZmVyKCkgb3ZlcnJpZGUgeworICAgICAgICByZXR1cm4gbmV3IER1bW15Q29udGFpbmVyQnVmZmVyKG1Gb3JtYXQpOworICAgIH0KK307CisKK2NsYXNzIFJhd0dyYXBoaWNPdXRwdXRCdWZmZXJzIDogcHVibGljIEZsZXhPdXRwdXRCdWZmZXJzIHsKK3B1YmxpYzoKKyAgICBSYXdHcmFwaGljT3V0cHV0QnVmZmVycyhjb25zdCBjaGFyICpjb21wb25lbnROYW1lLCBjb25zdCBjaGFyICpuYW1lID0gIjJELUJCLU91dHB1dCIpCisgICAgICAgIDogRmxleE91dHB1dEJ1ZmZlcnMoY29tcG9uZW50TmFtZSwgbmFtZSksCisgICAgICAgICAgbUxvY2FsQnVmZmVyUG9vbChMb2NhbEJ1ZmZlclBvb2w6OkNyZWF0ZSgKKyAgICAgICAgICAgICAgICAgIGtNYXhMaW5lYXJCdWZmZXJTaXplICoga01pbk91dHB1dEJ1ZmZlckFycmF5U2l6ZSkpIHsgfQorICAgIH5SYXdHcmFwaGljT3V0cHV0QnVmZmVycygpIG92ZXJyaWRlID0gZGVmYXVsdDsKKworICAgIHNwPENvZGVjMkJ1ZmZlcj4gd3JhcChjb25zdCBzdGQ6OnNoYXJlZF9wdHI8QzJCdWZmZXI+ICZidWZmZXIpIG92ZXJyaWRlIHsKKyAgICAgICAgaWYgKGJ1ZmZlciA9PSBudWxscHRyKSB7CisgICAgICAgICAgICBzcDxDb2RlYzJCdWZmZXI+IGMyYnVmZmVyID0gQ29uc3RHcmFwaGljQmxvY2tCdWZmZXI6OkFsbG9jYXRlRW1wdHkoCisgICAgICAgICAgICAgICAgICAgIG1Gb3JtYXQsCisgICAgICAgICAgICAgICAgICAgIFtsYnAgPSBtTG9jYWxCdWZmZXJQb29sXShzaXplX3QgY2FwYWNpdHkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBsYnAtPm5ld0J1ZmZlcihjYXBhY2l0eSk7CisgICAgICAgICAgICAgICAgICAgIH0pOworICAgICAgICAgICAgYzJidWZmZXItPnNldFJhbmdlKDAsIDApOworICAgICAgICAgICAgcmV0dXJuIGMyYnVmZmVyOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgcmV0dXJuIENvbnN0R3JhcGhpY0Jsb2NrQnVmZmVyOjpBbGxvY2F0ZSgKKyAgICAgICAgICAgICAgICAgICAgbUZvcm1hdCwKKyAgICAgICAgICAgICAgICAgICAgYnVmZmVyLAorICAgICAgICAgICAgICAgICAgICBbbGJwID0gbUxvY2FsQnVmZmVyUG9vbF0oc2l6ZV90IGNhcGFjaXR5KSB7CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbGJwLT5uZXdCdWZmZXIoY2FwYWNpdHkpOworICAgICAgICAgICAgICAgICAgICB9KTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHNwPENvZGVjMkJ1ZmZlcj4gYWxsb2NhdGVBcnJheUJ1ZmZlcigpIG92ZXJyaWRlIHsKKyAgICAgICAgcmV0dXJuIENvbnN0R3JhcGhpY0Jsb2NrQnVmZmVyOjpBbGxvY2F0ZUVtcHR5KAorICAgICAgICAgICAgICAgIG1Gb3JtYXQsCisgICAgICAgICAgICAgICAgW2xicCA9IG1Mb2NhbEJ1ZmZlclBvb2xdKHNpemVfdCBjYXBhY2l0eSkgeworICAgICAgICAgICAgICAgICAgICByZXR1cm4gbGJwLT5uZXdCdWZmZXIoY2FwYWNpdHkpOworICAgICAgICAgICAgICAgIH0pOworICAgIH0KKworcHJpdmF0ZToKKyAgICBzdGQ6OnNoYXJlZF9wdHI8TG9jYWxCdWZmZXJQb29sPiBtTG9jYWxCdWZmZXJQb29sOworfTsKKworfSAgLy8gbmFtZXNwYWNlCisKK0NDb2RlY0J1ZmZlckNoYW5uZWw6OlF1ZXVlR3VhcmQ6OlF1ZXVlR3VhcmQoCisgICAgICAgIENDb2RlY0J1ZmZlckNoYW5uZWw6OlF1ZXVlU3luYyAmc3luYykgOiBtU3luYyhzeW5jKSB7CisgICAgTXV0ZXg6OkF1dG9sb2NrIGwobVN5bmMubUd1YXJkTG9jayk7CisgICAgLy8gQXQgdGhpcyBwb2ludCBpdCdzIGd1YXJhbnRlZWQgdGhhdCBtU3luYyBpcyBub3QgdW5kZXIgc3RhdGUgdHJhbnNpdGlvbiwKKyAgICAvLyBhcyB3ZSBhcmUgaG9sZGluZyBpdHMgbXV0ZXguCisKKyAgICBNdXRleGVkPENDb2RlY0J1ZmZlckNoYW5uZWw6OlF1ZXVlU3luYzo6Q291bnRlcj46OkxvY2tlZCBjb3VudChtU3luYy5tQ291bnQpOworICAgIGlmIChjb3VudC0+dmFsdWUgPT0gLTEpIHsKKyAgICAgICAgbVJ1bm5pbmcgPSBmYWxzZTsKKyAgICB9IGVsc2UgeworICAgICAgICArK2NvdW50LT52YWx1ZTsKKyAgICAgICAgbVJ1bm5pbmcgPSB0cnVlOworICAgIH0KK30KKworQ0NvZGVjQnVmZmVyQ2hhbm5lbDo6UXVldWVHdWFyZDo6flF1ZXVlR3VhcmQoKSB7CisgICAgaWYgKG1SdW5uaW5nKSB7CisgICAgICAgIC8vIFdlIGFyZSBub3QgaG9sZGluZyBtR3VhcmRMb2NrIGF0IHRoaXMgcG9pbnQgc28gdGhhdCBRdWV1ZVN5bmM6OnN0b3AoKSBjYW4KKyAgICAgICAgLy8ga2VlcCBob2xkaW5nIHRoZSBsb2NrIHVudGlsIG1Db3VudCByZWFjaGVzIHplcm8uCisgICAgICAgIE11dGV4ZWQ8Q0NvZGVjQnVmZmVyQ2hhbm5lbDo6UXVldWVTeW5jOjpDb3VudGVyPjo6TG9ja2VkIGNvdW50KG1TeW5jLm1Db3VudCk7CisgICAgICAgIC0tY291bnQtPnZhbHVlOworICAgICAgICBjb3VudC0+Y29uZC5icm9hZGNhc3QoKTsKKyAgICB9Cit9CisKK3ZvaWQgQ0NvZGVjQnVmZmVyQ2hhbm5lbDo6UXVldWVTeW5jOjpzdGFydCgpIHsKKyAgICBNdXRleDo6QXV0b2xvY2sgbChtR3VhcmRMb2NrKTsKKyAgICAvLyBJZiBzdG9wcGVkLCBpdCBnb2VzIHRvIHJ1bm5pbmcgc3RhdGU7IG90aGVyd2lzZSBuby1vcC4KKyAgICBNdXRleGVkPENvdW50ZXI+OjpMb2NrZWQgY291bnQobUNvdW50KTsKKyAgICBpZiAoY291bnQtPnZhbHVlID09IC0xKSB7CisgICAgICAgIGNvdW50LT52YWx1ZSA9IDA7CisgICAgfQorfQorCit2b2lkIENDb2RlY0J1ZmZlckNoYW5uZWw6OlF1ZXVlU3luYzo6c3RvcCgpIHsKKyAgICBNdXRleDo6QXV0b2xvY2sgbChtR3VhcmRMb2NrKTsKKyAgICBNdXRleGVkPENvdW50ZXI+OjpMb2NrZWQgY291bnQobUNvdW50KTsKKyAgICBpZiAoY291bnQtPnZhbHVlID09IC0xKSB7CisgICAgICAgIC8vIG5vLW9wCisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgLy8gSG9sZGluZyBtR3VhcmRMb2NrIGhlcmUgYmxvY2tzIGNyZWF0aW9uIG9mIGFkZGl0aW9uYWwgUXVldWVHdWFyZCBvYmplY3RzLCBzbworICAgIC8vIG1Db3VudCBjYW4gb25seSBkZWNyZW1lbnQuIEluIG90aGVyIHdvcmRzLCB0aHJlYWRzIHRoYXQgYWNxdWlyZWQgdGhlIGxvY2sKKyAgICAvLyBhcmUgYWxsb3dlZCB0byBmaW5pc2ggZXhlY3V0aW9uIGJ1dCBhZGRpdGlvbmFsIHRocmVhZHMgdHJ5aW5nIHRvIGFjcXVpcmUKKyAgICAvLyB0aGUgbG9jayBhdCB0aGlzIHBvaW50IHdpbGwgYmxvY2ssIGFuZCB0aGVuIGdldCBRdWV1ZUd1YXJkIGF0IFNUT1BQRUQKKyAgICAvLyBzdGF0ZS4KKyAgICB3aGlsZSAoY291bnQtPnZhbHVlICE9IDApIHsKKyAgICAgICAgY291bnQud2FpdEZvckNvbmRpdGlvbihjb3VudC0+Y29uZCk7CisgICAgfQorICAgIGNvdW50LT52YWx1ZSA9IC0xOworfQorCisvLyBDQ29kZWNCdWZmZXJDaGFubmVsOjpQaXBlbGluZUNhcGFjaXR5CisKK0NDb2RlY0J1ZmZlckNoYW5uZWw6OlBpcGVsaW5lQ2FwYWNpdHk6OlBpcGVsaW5lQ2FwYWNpdHkoKQorICAgICAgOiBpbnB1dCgwKSwgY29tcG9uZW50KDApLAorICAgICAgICBtTmFtZSgiPFVOS05PV04gQ09NUE9ORU5UPiIpIHsKK30KKwordm9pZCBDQ29kZWNCdWZmZXJDaGFubmVsOjpQaXBlbGluZUNhcGFjaXR5Ojppbml0aWFsaXplKAorICAgICAgICBpbnQgbmV3SW5wdXQsCisgICAgICAgIGludCBuZXdDb21wb25lbnQsCisgICAgICAgIGNvbnN0IGNoYXIqIG5ld05hbWUsCisgICAgICAgIGNvbnN0IGNoYXIqIGNhbGxlclRhZykgeworICAgIGlucHV0LnN0b3JlKG5ld0lucHV0LCBzdGQ6Om1lbW9yeV9vcmRlcl9yZWxheGVkKTsKKyAgICBjb21wb25lbnQuc3RvcmUobmV3Q29tcG9uZW50LCBzdGQ6Om1lbW9yeV9vcmRlcl9yZWxheGVkKTsKKyAgICBtTmFtZSA9IG5ld05hbWU7CisgICAgQUxPR1YoIlslc10gJXMgLS0gUGlwZWxpbmVDYXBhY2l0eTo6aW5pdGlhbGl6ZSgpOiAiCisgICAgICAgICAgInBpcGVsaW5lIGF2YWlsYWJpbGl0eSBpbml0aWFsaXplZCA9PT4gIgorICAgICAgICAgICJpbnB1dCA9ICVkLCBjb21wb25lbnQgPSAlZCIsCisgICAgICAgICAgICBtTmFtZSwgY2FsbGVyVGFnID8gY2FsbGVyVGFnIDogIioiLAorICAgICAgICAgICAgbmV3SW5wdXQsIG5ld0NvbXBvbmVudCk7Cit9CisKK2Jvb2wgQ0NvZGVjQnVmZmVyQ2hhbm5lbDo6UGlwZWxpbmVDYXBhY2l0eTo6YWxsb2NhdGUoY29uc3QgY2hhciogY2FsbGVyVGFnKSB7CisgICAgaW50IHByZXZJbnB1dCA9IGlucHV0LmZldGNoX3N1YigxLCBzdGQ6Om1lbW9yeV9vcmRlcl9yZWxheGVkKTsKKyAgICBpbnQgcHJldkNvbXBvbmVudCA9IGNvbXBvbmVudC5mZXRjaF9zdWIoMSwgc3RkOjptZW1vcnlfb3JkZXJfcmVsYXhlZCk7CisgICAgaWYgKHByZXZJbnB1dCA+IDAgJiYgcHJldkNvbXBvbmVudCA+IDApIHsKKyAgICAgICAgQUxPR1YoIlslc10gJXMgLS0gUGlwZWxpbmVDYXBhY2l0eTo6YWxsb2NhdGUoKSByZXR1cm5zIHRydWU6ICIKKyAgICAgICAgICAgICAgInBpcGVsaW5lIGF2YWlsYWJpbGl0eSAtMSBhbGwgPT0+ICIKKyAgICAgICAgICAgICAgImlucHV0ID0gJWQsIGNvbXBvbmVudCA9ICVkIiwKKyAgICAgICAgICAgICAgICBtTmFtZSwgY2FsbGVyVGFnID8gY2FsbGVyVGFnIDogIioiLAorICAgICAgICAgICAgICAgIHByZXZJbnB1dCAtIDEsCisgICAgICAgICAgICAgICAgcHJldkNvbXBvbmVudCAtIDEpOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgaW5wdXQuZmV0Y2hfYWRkKDEsIHN0ZDo6bWVtb3J5X29yZGVyX3JlbGF4ZWQpOworICAgIGNvbXBvbmVudC5mZXRjaF9hZGQoMSwgc3RkOjptZW1vcnlfb3JkZXJfcmVsYXhlZCk7CisgICAgQUxPR1YoIlslc10gJXMgLS0gUGlwZWxpbmVDYXBhY2l0eTo6YWxsb2NhdGUoKSByZXR1cm5zIGZhbHNlOiAiCisgICAgICAgICAgInBpcGVsaW5lIGF2YWlsYWJpbGl0eSB1bmNoYW5nZWQgPT0+ICIKKyAgICAgICAgICAiaW5wdXQgPSAlZCwgY29tcG9uZW50ID0gJWQiLAorICAgICAgICAgICAgbU5hbWUsIGNhbGxlclRhZyA/IGNhbGxlclRhZyA6ICIqIiwKKyAgICAgICAgICAgIHByZXZJbnB1dCwKKyAgICAgICAgICAgIHByZXZDb21wb25lbnQpOworICAgIHJldHVybiBmYWxzZTsKK30KKwordm9pZCBDQ29kZWNCdWZmZXJDaGFubmVsOjpQaXBlbGluZUNhcGFjaXR5OjpmcmVlKGNvbnN0IGNoYXIqIGNhbGxlclRhZykgeworICAgIGludCBwcmV2SW5wdXQgPSBpbnB1dC5mZXRjaF9hZGQoMSwgc3RkOjptZW1vcnlfb3JkZXJfcmVsYXhlZCk7CisgICAgaW50IHByZXZDb21wb25lbnQgPSBjb21wb25lbnQuZmV0Y2hfYWRkKDEsIHN0ZDo6bWVtb3J5X29yZGVyX3JlbGF4ZWQpOworICAgIEFMT0dWKCJbJXNdICVzIC0tIFBpcGVsaW5lQ2FwYWNpdHk6OmZyZWUoKTogIgorICAgICAgICAgICJwaXBlbGluZSBhdmFpbGFiaWxpdHkgKzEgYWxsID09PiAiCisgICAgICAgICAgImlucHV0ID0gJWQsIGNvbXBvbmVudCA9ICVkIiwKKyAgICAgICAgICAgIG1OYW1lLCBjYWxsZXJUYWcgPyBjYWxsZXJUYWcgOiAiKiIsCisgICAgICAgICAgICBwcmV2SW5wdXQgKyAxLAorICAgICAgICAgICAgcHJldkNvbXBvbmVudCArIDEpOworfQorCitpbnQgQ0NvZGVjQnVmZmVyQ2hhbm5lbDo6UGlwZWxpbmVDYXBhY2l0eTo6ZnJlZUlucHV0U2xvdHMoCisgICAgICAgIHNpemVfdCBudW1EaXNjYXJkZWRJbnB1dEJ1ZmZlcnMsCisgICAgICAgIGNvbnN0IGNoYXIqIGNhbGxlclRhZykgeworICAgIGludCBwcmV2SW5wdXQgPSBpbnB1dC5mZXRjaF9hZGQobnVtRGlzY2FyZGVkSW5wdXRCdWZmZXJzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RkOjptZW1vcnlfb3JkZXJfcmVsYXhlZCk7CisgICAgQUxPR1YoIlslc10gJXMgLS0gUGlwZWxpbmVDYXBhY2l0eTo6ZnJlZUlucHV0U2xvdHMoJXp1KTogIgorICAgICAgICAgICJwaXBlbGluZSBhdmFpbGFiaWxpdHkgKyV6dSBpbnB1dCA9PT4gIgorICAgICAgICAgICJpbnB1dCA9ICVkLCBjb21wb25lbnQgPSAlZCIsCisgICAgICAgICAgICBtTmFtZSwgY2FsbGVyVGFnID8gY2FsbGVyVGFnIDogIioiLAorICAgICAgICAgICAgbnVtRGlzY2FyZGVkSW5wdXRCdWZmZXJzLAorICAgICAgICAgICAgbnVtRGlzY2FyZGVkSW5wdXRCdWZmZXJzLAorICAgICAgICAgICAgcHJldklucHV0ICsgc3RhdGljX2Nhc3Q8aW50PihudW1EaXNjYXJkZWRJbnB1dEJ1ZmZlcnMpLAorICAgICAgICAgICAgY29tcG9uZW50LmxvYWQoc3RkOjptZW1vcnlfb3JkZXJfcmVsYXhlZCkpOworICAgIHJldHVybiBwcmV2SW5wdXQgKyBzdGF0aWNfY2FzdDxpbnQ+KG51bURpc2NhcmRlZElucHV0QnVmZmVycyk7Cit9CisKK2ludCBDQ29kZWNCdWZmZXJDaGFubmVsOjpQaXBlbGluZUNhcGFjaXR5OjpmcmVlQ29tcG9uZW50U2xvdCgKKyAgICAgICAgY29uc3QgY2hhciogY2FsbGVyVGFnKSB7CisgICAgaW50IHByZXZDb21wb25lbnQgPSBjb21wb25lbnQuZmV0Y2hfYWRkKDEsIHN0ZDo6bWVtb3J5X29yZGVyX3JlbGF4ZWQpOworICAgIEFMT0dWKCJbJXNdICVzIC0tIFBpcGVsaW5lQ2FwYWNpdHk6OmZyZWVDb21wb25lbnRTbG90KCk6ICIKKyAgICAgICAgICAicGlwZWxpbmUgYXZhaWxhYmlsaXR5ICsxIGNvbXBvbmVudCA9PT4gIgorICAgICAgICAgICJpbnB1dCA9ICVkLCBjb21wb25lbnQgPSAlZCIsCisgICAgICAgICAgICBtTmFtZSwgY2FsbGVyVGFnID8gY2FsbGVyVGFnIDogIioiLAorICAgICAgICAgICAgaW5wdXQubG9hZChzdGQ6Om1lbW9yeV9vcmRlcl9yZWxheGVkKSwKKyAgICAgICAgICAgIHByZXZDb21wb25lbnQgKyAxKTsKKyAgICByZXR1cm4gcHJldkNvbXBvbmVudCArIDE7Cit9CisKKy8vIENDb2RlY0J1ZmZlckNoYW5uZWw6OlJlb3JkZXJTdGFzaAorCitDQ29kZWNCdWZmZXJDaGFubmVsOjpSZW9yZGVyU3Rhc2g6OlJlb3JkZXJTdGFzaCgpIHsKKyAgICBjbGVhcigpOworfQorCit2b2lkIENDb2RlY0J1ZmZlckNoYW5uZWw6OlJlb3JkZXJTdGFzaDo6Y2xlYXIoKSB7CisgICAgbVBlbmRpbmcuY2xlYXIoKTsKKyAgICBtU3Rhc2guY2xlYXIoKTsKKyAgICBtRGVwdGggPSAwOworICAgIG1LZXkgPSBDMkNvbmZpZzo6T1JESU5BTDsKK30KKwordm9pZCBDQ29kZWNCdWZmZXJDaGFubmVsOjpSZW9yZGVyU3Rhc2g6OnNldERlcHRoKHVpbnQzMl90IGRlcHRoKSB7CisgICAgbVBlbmRpbmcuc3BsaWNlKG1QZW5kaW5nLmVuZCgpLCBtU3Rhc2gpOworICAgIG1EZXB0aCA9IGRlcHRoOworfQordm9pZCBDQ29kZWNCdWZmZXJDaGFubmVsOjpSZW9yZGVyU3Rhc2g6OnNldEtleShDMkNvbmZpZzo6b3JkaW5hbF9rZXlfdCBrZXkpIHsKKyAgICBtUGVuZGluZy5zcGxpY2UobVBlbmRpbmcuZW5kKCksIG1TdGFzaCk7CisgICAgbUtleSA9IGtleTsKK30KKworYm9vbCBDQ29kZWNCdWZmZXJDaGFubmVsOjpSZW9yZGVyU3Rhc2g6OnBvcChFbnRyeSAqZW50cnkpIHsKKyAgICBpZiAobVBlbmRpbmcuZW1wdHkoKSkgeworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorICAgIGVudHJ5LT5idWZmZXIgICAgID0gbVBlbmRpbmcuZnJvbnQoKS5idWZmZXI7CisgICAgZW50cnktPnRpbWVzdGFtcCAgPSBtUGVuZGluZy5mcm9udCgpLnRpbWVzdGFtcDsKKyAgICBlbnRyeS0+ZmxhZ3MgICAgICA9IG1QZW5kaW5nLmZyb250KCkuZmxhZ3M7CisgICAgZW50cnktPm9yZGluYWwgICAgPSBtUGVuZGluZy5mcm9udCgpLm9yZGluYWw7CisgICAgbVBlbmRpbmcucG9wX2Zyb250KCk7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK3ZvaWQgQ0NvZGVjQnVmZmVyQ2hhbm5lbDo6UmVvcmRlclN0YXNoOjplbXBsYWNlKAorICAgICAgICBjb25zdCBzdGQ6OnNoYXJlZF9wdHI8QzJCdWZmZXI+ICZidWZmZXIsCisgICAgICAgIGludDY0X3QgdGltZXN0YW1wLAorICAgICAgICBpbnQzMl90IGZsYWdzLAorICAgICAgICBjb25zdCBDMldvcmtPcmRpbmFsU3RydWN0ICZvcmRpbmFsKSB7CisgICAgZm9yIChhdXRvIGl0ID0gbVN0YXNoLmJlZ2luKCk7IGl0ICE9IG1TdGFzaC5lbmQoKTsgKytpdCkgeworICAgICAgICBpZiAobGVzcyhvcmRpbmFsLCBpdC0+b3JkaW5hbCkpIHsKKyAgICAgICAgICAgIG1TdGFzaC5lbXBsYWNlKGl0LCBidWZmZXIsIHRpbWVzdGFtcCwgZmxhZ3MsIG9yZGluYWwpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgfQorICAgIG1TdGFzaC5lbXBsYWNlX2JhY2soYnVmZmVyLCB0aW1lc3RhbXAsIGZsYWdzLCBvcmRpbmFsKTsKKyAgICB3aGlsZSAoIW1TdGFzaC5lbXB0eSgpICYmIG1TdGFzaC5zaXplKCkgPiBtRGVwdGgpIHsKKyAgICAgICAgbVBlbmRpbmcucHVzaF9iYWNrKG1TdGFzaC5mcm9udCgpKTsKKyAgICAgICAgbVN0YXNoLnBvcF9mcm9udCgpOworICAgIH0KK30KKwordm9pZCBDQ29kZWNCdWZmZXJDaGFubmVsOjpSZW9yZGVyU3Rhc2g6OmRlZmVyKAorICAgICAgICBjb25zdCBDQ29kZWNCdWZmZXJDaGFubmVsOjpSZW9yZGVyU3Rhc2g6OkVudHJ5ICZlbnRyeSkgeworICAgIG1QZW5kaW5nLnB1c2hfZnJvbnQoZW50cnkpOworfQorCitib29sIENDb2RlY0J1ZmZlckNoYW5uZWw6OlJlb3JkZXJTdGFzaDo6aGFzUGVuZGluZygpIGNvbnN0IHsKKyAgICByZXR1cm4gIW1QZW5kaW5nLmVtcHR5KCk7Cit9CisKK2Jvb2wgQ0NvZGVjQnVmZmVyQ2hhbm5lbDo6UmVvcmRlclN0YXNoOjpsZXNzKAorICAgICAgICBjb25zdCBDMldvcmtPcmRpbmFsU3RydWN0ICZvMSwgY29uc3QgQzJXb3JrT3JkaW5hbFN0cnVjdCAmbzIpIHsKKyAgICBzd2l0Y2ggKG1LZXkpIHsKKyAgICAgICAgY2FzZSBDMkNvbmZpZzo6T1JESU5BTDogICByZXR1cm4gbzEuZnJhbWVJbmRleCA8IG8yLmZyYW1lSW5kZXg7CisgICAgICAgIGNhc2UgQzJDb25maWc6OlRJTUVTVEFNUDogcmV0dXJuIG8xLnRpbWVzdGFtcCA8IG8yLnRpbWVzdGFtcDsKKyAgICAgICAgY2FzZSBDMkNvbmZpZzo6Q1VTVE9NOiAgICByZXR1cm4gbzEuY3VzdG9tT3JkaW5hbCA8IG8yLmN1c3RvbU9yZGluYWw7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBBTE9HRCgiVW5yZWNvZ25pemVkIGtleTsgZGVmYXVsdCB0byB0aW1lc3RhbXAiKTsKKyAgICAgICAgICAgIHJldHVybiBvMS5mcmFtZUluZGV4IDwgbzIuZnJhbWVJbmRleDsKKyAgICB9Cit9CisKKy8vIENDb2RlY0J1ZmZlckNoYW5uZWwKKworQ0NvZGVjQnVmZmVyQ2hhbm5lbDo6Q0NvZGVjQnVmZmVyQ2hhbm5lbCgKKyAgICAgICAgY29uc3Qgc3RkOjpzaGFyZWRfcHRyPENDb2RlY0NhbGxiYWNrPiAmY2FsbGJhY2spCisgICAgOiBtSGVhcFNlcU51bSgtMSksCisgICAgICBtQ0NvZGVjQ2FsbGJhY2soY2FsbGJhY2spLAorICAgICAgbUZyYW1lSW5kZXgoMHUpLAorICAgICAgbUZpcnN0VmFsaWRGcmFtZUluZGV4KDB1KSwKKyAgICAgIG1NZXRhTW9kZShNT0RFX05PTkUpLAorICAgICAgbUF2YWlsYWJsZVBpcGVsaW5lQ2FwYWNpdHkoKSwKKyAgICAgIG1JbnB1dE1ldEVvcyhmYWxzZSkgeworICAgIE11dGV4ZWQ8c3RkOjp1bmlxdWVfcHRyPElucHV0QnVmZmVycz4+OjpMb2NrZWQgYnVmZmVycyhtSW5wdXRCdWZmZXJzKTsKKyAgICBidWZmZXJzLT5yZXNldChuZXcgRHVtbXlJbnB1dEJ1ZmZlcnMoIiIpKTsKK30KKworQ0NvZGVjQnVmZmVyQ2hhbm5lbDo6fkNDb2RlY0J1ZmZlckNoYW5uZWwoKSB7CisgICAgaWYgKG1DcnlwdG8gIT0gbnVsbHB0ciAmJiBtRGVhbGVyICE9IG51bGxwdHIgJiYgbUhlYXBTZXFOdW0gPj0gMCkgeworICAgICAgICBtQ3J5cHRvLT51bnNldEhlYXAobUhlYXBTZXFOdW0pOworICAgIH0KK30KKwordm9pZCBDQ29kZWNCdWZmZXJDaGFubmVsOjpzZXRDb21wb25lbnQoCisgICAgICAgIGNvbnN0IHN0ZDo6c2hhcmVkX3B0cjxDb2RlYzJDbGllbnQ6OkNvbXBvbmVudD4gJmNvbXBvbmVudCkgeworICAgIG1Db21wb25lbnQgPSBjb21wb25lbnQ7CisgICAgbUNvbXBvbmVudE5hbWUgPSBjb21wb25lbnQtPmdldE5hbWUoKSArIFN0cmluZ1ByaW50ZigiIyVkIiwgaW50KHVpbnRwdHJfdChjb21wb25lbnQuZ2V0KCkpICUgOTk3KSk7CisgICAgbU5hbWUgPSBtQ29tcG9uZW50TmFtZS5jX3N0cigpOworfQorCitzdGF0dXNfdCBDQ29kZWNCdWZmZXJDaGFubmVsOjpzZXRJbnB1dFN1cmZhY2UoCisgICAgICAgIGNvbnN0IHN0ZDo6c2hhcmVkX3B0cjxJbnB1dFN1cmZhY2VXcmFwcGVyPiAmc3VyZmFjZSkgeworICAgIEFMT0dWKCJbJXNdIHNldElucHV0U3VyZmFjZSIsIG1OYW1lKTsKKyAgICBtSW5wdXRTdXJmYWNlID0gc3VyZmFjZTsKKyAgICByZXR1cm4gbUlucHV0U3VyZmFjZS0+Y29ubmVjdChtQ29tcG9uZW50KTsKK30KKworc3RhdHVzX3QgQ0NvZGVjQnVmZmVyQ2hhbm5lbDo6c2lnbmFsRW5kT2ZJbnB1dFN0cmVhbSgpIHsKKyAgICBpZiAobUlucHV0U3VyZmFjZSA9PSBudWxscHRyKSB7CisgICAgICAgIHJldHVybiBJTlZBTElEX09QRVJBVElPTjsKKyAgICB9CisgICAgcmV0dXJuIG1JbnB1dFN1cmZhY2UtPnNpZ25hbEVuZE9mSW5wdXRTdHJlYW0oKTsKK30KKworc3RhdHVzX3QgQ0NvZGVjQnVmZmVyQ2hhbm5lbDo6cXVldWVJbnB1dEJ1ZmZlckludGVybmFsKGNvbnN0IHNwPE1lZGlhQ29kZWNCdWZmZXI+ICZidWZmZXIpIHsKKyAgICBpbnQ2NF90IHRpbWVVczsKKyAgICBDSEVDSyhidWZmZXItPm1ldGEoKS0+ZmluZEludDY0KCJ0aW1lVXMiLCAmdGltZVVzKSk7CisKKyAgICBpZiAobUlucHV0TWV0RW9zKSB7CisgICAgICAgIEFMT0dEKCJbJXNdIGJ1ZmZlcnMgYWZ0ZXIgRU9TIGlnbm9yZWQgKCVsbGQgdXMpIiwgbU5hbWUsIChsb25nIGxvbmcpdGltZVVzKTsKKyAgICAgICAgcmV0dXJuIE9LOworICAgIH0KKworICAgIGludDMyX3QgZmxhZ3MgPSAwOworICAgIGludDMyX3QgdG1wID0gMDsKKyAgICBib29sIGVvcyA9IGZhbHNlOworICAgIGlmIChidWZmZXItPm1ldGEoKS0+ZmluZEludDMyKCJlb3MiLCAmdG1wKSAmJiB0bXApIHsKKyAgICAgICAgZW9zID0gdHJ1ZTsKKyAgICAgICAgbUlucHV0TWV0RW9zID0gdHJ1ZTsKKyAgICAgICAgQUxPR1YoIlslc10gaW5wdXQgRU9TIiwgbU5hbWUpOworICAgIH0KKyAgICBpZiAoYnVmZmVyLT5tZXRhKCktPmZpbmRJbnQzMigiY3NkIiwgJnRtcCkgJiYgdG1wKSB7CisgICAgICAgIGZsYWdzIHw9IEMyRnJhbWVEYXRhOjpGTEFHX0NPREVDX0NPTkZJRzsKKyAgICB9CisgICAgQUxPR1YoIlslc10gcXVldWVJbnB1dEJ1ZmZlcjogYnVmZmVyLT5zaXplKCkgPSAlenUiLCBtTmFtZSwgYnVmZmVyLT5zaXplKCkpOworICAgIHN0ZDo6dW5pcXVlX3B0cjxDMldvcms+IHdvcmsobmV3IEMyV29yayk7CisgICAgd29yay0+aW5wdXQub3JkaW5hbC50aW1lc3RhbXAgPSB0aW1lVXM7CisgICAgd29yay0+aW5wdXQub3JkaW5hbC5mcmFtZUluZGV4ID0gbUZyYW1lSW5kZXgrKzsKKyAgICAvLyBXT1JLQVJPVU5EOiB1bnRpbCBjb2RlY3Mgc3VwcG9ydCBoYW5kbGluZyB3b3JrIGFmdGVyIEVPUyBhbmQgbWF4IG91dHB1dCBzaXppbmcsIHVzZSB0aW1lc3RhbXAKKyAgICAvLyBtYW5pcHVsYXRpb24gdG8gYWNoaWV2ZSBpbWFnZSBlbmNvZGluZyB2aWEgdmlkZW8gY29kZWMsIGFuZCB0byBjb25zdHJhaW4gZW5jb2RlZCBvdXRwdXQuCisgICAgLy8gS2VlcCBjbGllbnQgdGltZXN0YW1wIGluIGN1c3RvbU9yZGluYWwKKyAgICB3b3JrLT5pbnB1dC5vcmRpbmFsLmN1c3RvbU9yZGluYWwgPSB0aW1lVXM7CisgICAgd29yay0+aW5wdXQuYnVmZmVycy5jbGVhcigpOworCisgICAgaWYgKGJ1ZmZlci0+c2l6ZSgpID4gMHUpIHsKKyAgICAgICAgTXV0ZXhlZDxzdGQ6OnVuaXF1ZV9wdHI8SW5wdXRCdWZmZXJzPj46OkxvY2tlZCBidWZmZXJzKG1JbnB1dEJ1ZmZlcnMpOworICAgICAgICBzdGQ6OnNoYXJlZF9wdHI8QzJCdWZmZXI+IGMyYnVmZmVyOworICAgICAgICBpZiAoISgqYnVmZmVycyktPnJlbGVhc2VCdWZmZXIoYnVmZmVyLCAmYzJidWZmZXIpKSB7CisgICAgICAgICAgICByZXR1cm4gLUVOT0VOVDsKKyAgICAgICAgfQorICAgICAgICB3b3JrLT5pbnB1dC5idWZmZXJzLnB1c2hfYmFjayhjMmJ1ZmZlcik7CisgICAgfSBlbHNlIHsKKyAgICAgICAgbUF2YWlsYWJsZVBpcGVsaW5lQ2FwYWNpdHkuZnJlZUlucHV0U2xvdHMoMSwgInF1ZXVlSW5wdXRCdWZmZXJJbnRlcm5hbCIpOworICAgICAgICBpZiAoZW9zKSB7CisgICAgICAgICAgICBmbGFncyB8PSBDMkZyYW1lRGF0YTo6RkxBR19FTkRfT0ZfU1RSRUFNOworICAgICAgICB9CisgICAgfQorICAgIHdvcmstPmlucHV0LmZsYWdzID0gKEMyRnJhbWVEYXRhOjpmbGFnc190KWZsYWdzOworICAgIC8vIFRPRE86IGZpbGwgaW5mbydzCisKKyAgICB3b3JrLT5pbnB1dC5jb25maWdVcGRhdGUgPSBzdGQ6Om1vdmUobVBhcmFtc1RvQmVTZXQpOworICAgIHdvcmstPndvcmtsZXRzLmNsZWFyKCk7CisgICAgd29yay0+d29ya2xldHMuZW1wbGFjZV9iYWNrKG5ldyBDMldvcmtsZXQpOworCisgICAgc3RkOjpsaXN0PHN0ZDo6dW5pcXVlX3B0cjxDMldvcms+PiBpdGVtczsKKyAgICBpdGVtcy5wdXNoX2JhY2soc3RkOjptb3ZlKHdvcmspKTsKKyAgICBjMl9zdGF0dXNfdCBlcnIgPSBtQ29tcG9uZW50LT5xdWV1ZSgmaXRlbXMpOworCisgICAgaWYgKGVyciA9PSBDMl9PSyAmJiBlb3MgJiYgYnVmZmVyLT5zaXplKCkgPiAwdSkgeworICAgICAgICBtQ0NvZGVjQ2FsbGJhY2stPm9uV29ya1F1ZXVlZChmYWxzZSk7CisgICAgICAgIHdvcmsucmVzZXQobmV3IEMyV29yayk7CisgICAgICAgIHdvcmstPmlucHV0Lm9yZGluYWwudGltZXN0YW1wID0gdGltZVVzOworICAgICAgICB3b3JrLT5pbnB1dC5vcmRpbmFsLmZyYW1lSW5kZXggPSBtRnJhbWVJbmRleCsrOworICAgICAgICAvLyBXT1JLQVJPVU5EOiBrZWVwIGNsaWVudCB0aW1lc3RhbXAgaW4gY3VzdG9tT3JkaW5hbAorICAgICAgICB3b3JrLT5pbnB1dC5vcmRpbmFsLmN1c3RvbU9yZGluYWwgPSB0aW1lVXM7CisgICAgICAgIHdvcmstPmlucHV0LmJ1ZmZlcnMuY2xlYXIoKTsKKyAgICAgICAgd29yay0+aW5wdXQuZmxhZ3MgPSBDMkZyYW1lRGF0YTo6RkxBR19FTkRfT0ZfU1RSRUFNOworCisgICAgICAgIGl0ZW1zLmNsZWFyKCk7CisgICAgICAgIGl0ZW1zLnB1c2hfYmFjayhzdGQ6Om1vdmUod29yaykpOworICAgICAgICBlcnIgPSBtQ29tcG9uZW50LT5xdWV1ZSgmaXRlbXMpOworICAgIH0KKyAgICBpZiAoZXJyID09IEMyX09LKSB7CisgICAgICAgIG1DQ29kZWNDYWxsYmFjay0+b25Xb3JrUXVldWVkKGVvcyk7CisgICAgfQorCisgICAgZmVlZElucHV0QnVmZmVySWZBdmFpbGFibGVJbnRlcm5hbCgpOworICAgIHJldHVybiBlcnI7Cit9CisKK3N0YXR1c190IENDb2RlY0J1ZmZlckNoYW5uZWw6OnNldFBhcmFtZXRlcnMoc3RkOjp2ZWN0b3I8c3RkOjp1bmlxdWVfcHRyPEMyUGFyYW0+PiAmcGFyYW1zKSB7CisgICAgUXVldWVHdWFyZCBndWFyZChtU3luYyk7CisgICAgaWYgKCFndWFyZC5pc1J1bm5pbmcoKSkgeworICAgICAgICBBTE9HRCgiWyVzXSBzZXRQYXJhbWV0ZXJzIGlzIG9ubHkgc3VwcG9ydGVkIGluIHRoZSBydW5uaW5nIHN0YXRlLiIsIG1OYW1lKTsKKyAgICAgICAgcmV0dXJuIC1FTk9TWVM7CisgICAgfQorICAgIG1QYXJhbXNUb0JlU2V0Lmluc2VydChtUGFyYW1zVG9CZVNldC5lbmQoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgc3RkOjptYWtlX21vdmVfaXRlcmF0b3IocGFyYW1zLmJlZ2luKCkpLAorICAgICAgICAgICAgICAgICAgICAgICAgICBzdGQ6Om1ha2VfbW92ZV9pdGVyYXRvcihwYXJhbXMuZW5kKCkpKTsKKyAgICBwYXJhbXMuY2xlYXIoKTsKKyAgICByZXR1cm4gT0s7Cit9CisKK3N0YXR1c190IENDb2RlY0J1ZmZlckNoYW5uZWw6OnF1ZXVlSW5wdXRCdWZmZXIoY29uc3Qgc3A8TWVkaWFDb2RlY0J1ZmZlcj4gJmJ1ZmZlcikgeworICAgIFF1ZXVlR3VhcmQgZ3VhcmQobVN5bmMpOworICAgIGlmICghZ3VhcmQuaXNSdW5uaW5nKCkpIHsKKyAgICAgICAgQUxPR0QoIlslc10gTm8gbW9yZSBidWZmZXJzIHNob3VsZCBiZSBxdWV1ZWQgYXQgY3VycmVudCBzdGF0ZS4iLCBtTmFtZSk7CisgICAgICAgIHJldHVybiAtRU5PU1lTOworICAgIH0KKyAgICByZXR1cm4gcXVldWVJbnB1dEJ1ZmZlckludGVybmFsKGJ1ZmZlcik7Cit9CisKK3N0YXR1c190IENDb2RlY0J1ZmZlckNoYW5uZWw6OnF1ZXVlU2VjdXJlSW5wdXRCdWZmZXIoCisgICAgICAgIGNvbnN0IHNwPE1lZGlhQ29kZWNCdWZmZXI+ICZidWZmZXIsIGJvb2wgc2VjdXJlLCBjb25zdCB1aW50OF90ICprZXksCisgICAgICAgIGNvbnN0IHVpbnQ4X3QgKml2LCBDcnlwdG9QbHVnaW46Ok1vZGUgbW9kZSwgQ3J5cHRvUGx1Z2luOjpQYXR0ZXJuIHBhdHRlcm4sCisgICAgICAgIGNvbnN0IENyeXB0b1BsdWdpbjo6U3ViU2FtcGxlICpzdWJTYW1wbGVzLCBzaXplX3QgbnVtU3ViU2FtcGxlcywKKyAgICAgICAgQVN0cmluZyAqZXJyb3JEZXRhaWxNc2cpIHsKKyAgICBRdWV1ZUd1YXJkIGd1YXJkKG1TeW5jKTsKKyAgICBpZiAoIWd1YXJkLmlzUnVubmluZygpKSB7CisgICAgICAgIEFMT0dEKCJbJXNdIE5vIG1vcmUgYnVmZmVycyBzaG91bGQgYmUgcXVldWVkIGF0IGN1cnJlbnQgc3RhdGUuIiwgbU5hbWUpOworICAgICAgICByZXR1cm4gLUVOT1NZUzsKKyAgICB9CisKKyAgICBpZiAoIWhhc0NyeXB0b09yRGVzY3JhbWJsZXIoKSkgeworICAgICAgICByZXR1cm4gLUVOT1NZUzsKKyAgICB9CisgICAgc3A8RW5jcnlwdGVkTGluZWFyQmxvY2tCdWZmZXI+IGVuY3J5cHRlZEJ1ZmZlcigoRW5jcnlwdGVkTGluZWFyQmxvY2tCdWZmZXIgKilidWZmZXIuZ2V0KCkpOworCisgICAgc3NpemVfdCByZXN1bHQgPSAtMTsKKyAgICBzc2l6ZV90IGNvZGVjRGF0YU9mZnNldCA9IDA7CisgICAgaWYgKG1DcnlwdG8gIT0gbnVsbHB0cikgeworICAgICAgICBJQ3J5cHRvOjpEZXN0aW5hdGlvbkJ1ZmZlciBkZXN0aW5hdGlvbjsKKyAgICAgICAgaWYgKHNlY3VyZSkgeworICAgICAgICAgICAgZGVzdGluYXRpb24ubVR5cGUgPSBJQ3J5cHRvOjprRGVzdGluYXRpb25UeXBlTmF0aXZlSGFuZGxlOworICAgICAgICAgICAgZGVzdGluYXRpb24ubUhhbmRsZSA9IGVuY3J5cHRlZEJ1ZmZlci0+aGFuZGxlKCk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBkZXN0aW5hdGlvbi5tVHlwZSA9IElDcnlwdG86OmtEZXN0aW5hdGlvblR5cGVTaGFyZWRNZW1vcnk7CisgICAgICAgICAgICBkZXN0aW5hdGlvbi5tU2hhcmVkTWVtb3J5ID0gbURlY3J5cHREZXN0aW5hdGlvbjsKKyAgICAgICAgfQorICAgICAgICBJQ3J5cHRvOjpTb3VyY2VCdWZmZXIgc291cmNlOworICAgICAgICBlbmNyeXB0ZWRCdWZmZXItPmZpbGxTb3VyY2VCdWZmZXIoJnNvdXJjZSk7CisgICAgICAgIHJlc3VsdCA9IG1DcnlwdG8tPmRlY3J5cHQoCisgICAgICAgICAgICAgICAga2V5LCBpdiwgbW9kZSwgcGF0dGVybiwgc291cmNlLCBidWZmZXItPm9mZnNldCgpLAorICAgICAgICAgICAgICAgIHN1YlNhbXBsZXMsIG51bVN1YlNhbXBsZXMsIGRlc3RpbmF0aW9uLCBlcnJvckRldGFpbE1zZyk7CisgICAgICAgIGlmIChyZXN1bHQgPCAwKSB7CisgICAgICAgICAgICByZXR1cm4gcmVzdWx0OworICAgICAgICB9CisgICAgICAgIGlmIChkZXN0aW5hdGlvbi5tVHlwZSA9PSBJQ3J5cHRvOjprRGVzdGluYXRpb25UeXBlU2hhcmVkTWVtb3J5KSB7CisgICAgICAgICAgICBlbmNyeXB0ZWRCdWZmZXItPmNvcHlEZWNyeXB0ZWRDb250ZW50KG1EZWNyeXB0RGVzdGluYXRpb24sIHJlc3VsdCk7CisgICAgICAgIH0KKyAgICB9IGVsc2UgeworICAgICAgICAvLyBIZXJlIHdlIGNhc3QgQ3J5cHRvUGx1Z2luOjpTdWJTYW1wbGUgdG8gaGFyZHdhcmU6OmNhczo6bmF0aXZlOjpWMV8wOjpTdWJTYW1wbGUKKyAgICAgICAgLy8gZGlyZWN0bHksIHRoZSBzdHJ1Y3R1cmUgZGVmaW5pdGlvbnMgc2hvdWxkIG1hdGNoIGFzIGNoZWNrZWQgaW4gRGVzY3JhbWJsZXJJbXBsLmNwcC4KKyAgICAgICAgaGlkbF92ZWM8U3ViU2FtcGxlPiBoaWRsU3ViU2FtcGxlczsKKyAgICAgICAgaGlkbFN1YlNhbXBsZXMuc2V0VG9FeHRlcm5hbCgoU3ViU2FtcGxlICopc3ViU2FtcGxlcywgbnVtU3ViU2FtcGxlcywgZmFsc2UgLypvd24qLyk7CisKKyAgICAgICAgaGFyZHdhcmU6OmNhczo6bmF0aXZlOjpWMV8wOjpTaGFyZWRCdWZmZXIgc3JjQnVmZmVyOworICAgICAgICBlbmNyeXB0ZWRCdWZmZXItPmZpbGxTb3VyY2VCdWZmZXIoJnNyY0J1ZmZlcik7CisKKyAgICAgICAgRGVzdGluYXRpb25CdWZmZXIgZHN0QnVmZmVyOworICAgICAgICBpZiAoc2VjdXJlKSB7CisgICAgICAgICAgICBkc3RCdWZmZXIudHlwZSA9IEJ1ZmZlclR5cGU6Ok5BVElWRV9IQU5ETEU7CisgICAgICAgICAgICBkc3RCdWZmZXIuc2VjdXJlTWVtb3J5ID0gaGlkbF9oYW5kbGUoZW5jcnlwdGVkQnVmZmVyLT5oYW5kbGUoKSk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBkc3RCdWZmZXIudHlwZSA9IEJ1ZmZlclR5cGU6OlNIQVJFRF9NRU1PUlk7CisgICAgICAgICAgICBkc3RCdWZmZXIubm9uc2VjdXJlTWVtb3J5ID0gc3JjQnVmZmVyOworICAgICAgICB9CisKKyAgICAgICAgQ2FzU3RhdHVzIHN0YXR1cyA9IENhc1N0YXR1czo6T0s7CisgICAgICAgIGhpZGxfc3RyaW5nIGRldGFpbGVkRXJyb3I7CisgICAgICAgIFNjcmFtYmxpbmdDb250cm9sIHNjdHJsID0gU2NyYW1ibGluZ0NvbnRyb2w6OlVOU0NSQU1CTEVEOworCisgICAgICAgIGlmIChrZXkgIT0gbnVsbHB0cikgeworICAgICAgICAgICAgc2N0cmwgPSAoU2NyYW1ibGluZ0NvbnRyb2wpa2V5WzBdOworICAgICAgICAgICAgLy8gQWRqdXN0IGZvciB0aGUgUEVTIG9mZnNldAorICAgICAgICAgICAgY29kZWNEYXRhT2Zmc2V0ID0ga2V5WzJdIHwgKGtleVszXSA8PCA4KTsKKyAgICAgICAgfQorCisgICAgICAgIGF1dG8gcmV0dXJuVm9pZCA9IG1EZXNjcmFtYmxlci0+ZGVzY3JhbWJsZSgKKyAgICAgICAgICAgICAgICBzY3RybCwKKyAgICAgICAgICAgICAgICBoaWRsU3ViU2FtcGxlcywKKyAgICAgICAgICAgICAgICBzcmNCdWZmZXIsCisgICAgICAgICAgICAgICAgMCwKKyAgICAgICAgICAgICAgICBkc3RCdWZmZXIsCisgICAgICAgICAgICAgICAgMCwKKyAgICAgICAgICAgICAgICBbJnN0YXR1cywgJnJlc3VsdCwgJmRldGFpbGVkRXJyb3JdICgKKyAgICAgICAgICAgICAgICAgICAgICAgIENhc1N0YXR1cyBfc3RhdHVzLCB1aW50MzJfdCBfYnl0ZXNXcml0dGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgaGlkbF9zdHJpbmcmIF9kZXRhaWxlZEVycm9yKSB7CisgICAgICAgICAgICAgICAgICAgIHN0YXR1cyA9IF9zdGF0dXM7CisgICAgICAgICAgICAgICAgICAgIHJlc3VsdCA9IChzc2l6ZV90KV9ieXRlc1dyaXR0ZW47CisgICAgICAgICAgICAgICAgICAgIGRldGFpbGVkRXJyb3IgPSBfZGV0YWlsZWRFcnJvcjsKKyAgICAgICAgICAgICAgICB9KTsKKworICAgICAgICBpZiAoIXJldHVyblZvaWQuaXNPaygpIHx8IHN0YXR1cyAhPSBDYXNTdGF0dXM6Ok9LIHx8IHJlc3VsdCA8IDApIHsKKyAgICAgICAgICAgIEFMT0dJKCJbJXNdIGRlc2NyYW1ibGUgZmFpbGVkLCB0cmFucz0lcywgc3RhdHVzPSVkLCByZXN1bHQ9JXpkIiwKKyAgICAgICAgICAgICAgICAgICAgbU5hbWUsIHJldHVyblZvaWQuZGVzY3JpcHRpb24oKS5jX3N0cigpLCBzdGF0dXMsIHJlc3VsdCk7CisgICAgICAgICAgICByZXR1cm4gVU5LTk9XTl9FUlJPUjsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChyZXN1bHQgPCBjb2RlY0RhdGFPZmZzZXQpIHsKKyAgICAgICAgICAgIEFMT0dEKCJpbnZhbGlkIGNvZGVjIGRhdGEgb2Zmc2V0OiAlemQsIHJlc3VsdCAlemQiLCBjb2RlY0RhdGFPZmZzZXQsIHJlc3VsdCk7CisgICAgICAgICAgICByZXR1cm4gQkFEX1ZBTFVFOworICAgICAgICB9CisKKyAgICAgICAgQUxPR1YoIlslc10gZGVzY3JhbWJsZSBzdWNjZWVkZWQsICV6ZCBieXRlcyIsIG1OYW1lLCByZXN1bHQpOworCisgICAgICAgIGlmIChkc3RCdWZmZXIudHlwZSA9PSBCdWZmZXJUeXBlOjpTSEFSRURfTUVNT1JZKSB7CisgICAgICAgICAgICBlbmNyeXB0ZWRCdWZmZXItPmNvcHlEZWNyeXB0ZWRDb250ZW50RnJvbU1lbW9yeShyZXN1bHQpOworICAgICAgICB9CisgICAgfQorCisgICAgYnVmZmVyLT5zZXRSYW5nZShjb2RlY0RhdGFPZmZzZXQsIHJlc3VsdCAtIGNvZGVjRGF0YU9mZnNldCk7CisgICAgcmV0dXJuIHF1ZXVlSW5wdXRCdWZmZXJJbnRlcm5hbChidWZmZXIpOworfQorCit2b2lkIENDb2RlY0J1ZmZlckNoYW5uZWw6OmZlZWRJbnB1dEJ1ZmZlcklmQXZhaWxhYmxlKCkgeworICAgIFF1ZXVlR3VhcmQgZ3VhcmQobVN5bmMpOworICAgIGlmICghZ3VhcmQuaXNSdW5uaW5nKCkpIHsKKyAgICAgICAgQUxPR1YoIlslc10gV2UncmUgbm90IHJ1bm5pbmcgLS0tIG5vIGlucHV0IGJ1ZmZlciByZXBvcnRlZCIsIG1OYW1lKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBmZWVkSW5wdXRCdWZmZXJJZkF2YWlsYWJsZUludGVybmFsKCk7Cit9CisKK3ZvaWQgQ0NvZGVjQnVmZmVyQ2hhbm5lbDo6ZmVlZElucHV0QnVmZmVySWZBdmFpbGFibGVJbnRlcm5hbCgpIHsKKyAgICB3aGlsZSAoIW1JbnB1dE1ldEVvcyAmJgorICAgICAgICAgICAhbVJlb3JkZXJTdGFzaC5sb2NrKCktPmhhc1BlbmRpbmcoKSAmJgorICAgICAgICAgICBtQXZhaWxhYmxlUGlwZWxpbmVDYXBhY2l0eS5hbGxvY2F0ZSgiZmVlZElucHV0QnVmZmVySWZBdmFpbGFibGUiKSkgeworICAgICAgICBzcDxNZWRpYUNvZGVjQnVmZmVyPiBpbkJ1ZmZlcjsKKyAgICAgICAgc2l6ZV90IGluZGV4OworICAgICAgICB7CisgICAgICAgICAgICBNdXRleGVkPHN0ZDo6dW5pcXVlX3B0cjxJbnB1dEJ1ZmZlcnM+Pjo6TG9ja2VkIGJ1ZmZlcnMobUlucHV0QnVmZmVycyk7CisgICAgICAgICAgICBpZiAoISgqYnVmZmVycyktPnJlcXVlc3ROZXdCdWZmZXIoJmluZGV4LCAmaW5CdWZmZXIpKSB7CisgICAgICAgICAgICAgICAgQUxPR1YoIlslc10gbm8gbmV3IGJ1ZmZlciBhdmFpbGFibGUiLCBtTmFtZSk7CisgICAgICAgICAgICAgICAgbUF2YWlsYWJsZVBpcGVsaW5lQ2FwYWNpdHkuZnJlZSgiZmVlZElucHV0QnVmZmVySWZBdmFpbGFibGUiKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBBTE9HVigiWyVzXSBuZXcgaW5wdXQgaW5kZXggPSAlenUgWyVwXSIsIG1OYW1lLCBpbmRleCwgaW5CdWZmZXIuZ2V0KCkpOworICAgICAgICBtQ2FsbGJhY2stPm9uSW5wdXRCdWZmZXJBdmFpbGFibGUoaW5kZXgsIGluQnVmZmVyKTsKKyAgICB9Cit9CisKK3N0YXR1c190IENDb2RlY0J1ZmZlckNoYW5uZWw6OnJlbmRlck91dHB1dEJ1ZmZlcigKKyAgICAgICAgY29uc3Qgc3A8TWVkaWFDb2RlY0J1ZmZlcj4gJmJ1ZmZlciwgaW50NjRfdCB0aW1lc3RhbXBOcykgeworICAgIHN0ZDo6c2hhcmVkX3B0cjxDMkJ1ZmZlcj4gYzJCdWZmZXI7CisgICAgeworICAgICAgICBNdXRleGVkPHN0ZDo6dW5pcXVlX3B0cjxPdXRwdXRCdWZmZXJzPj46OkxvY2tlZCBidWZmZXJzKG1PdXRwdXRCdWZmZXJzKTsKKyAgICAgICAgaWYgKCpidWZmZXJzKSB7CisgICAgICAgICAgICAoKmJ1ZmZlcnMpLT5yZWxlYXNlQnVmZmVyKGJ1ZmZlciwgJmMyQnVmZmVyKTsKKyAgICAgICAgfQorICAgIH0KKyAgICBpZiAoIWMyQnVmZmVyKSB7CisgICAgICAgIHJldHVybiBJTlZBTElEX09QRVJBVElPTjsKKyAgICB9CisgICAgc2VuZE91dHB1dEJ1ZmZlcnMoKTsKKworI2lmIDAKKyAgICBjb25zdCBzdGQ6OnZlY3RvcjxzdGQ6OnNoYXJlZF9wdHI8Y29uc3QgQzJJbmZvPj4gaW5mb1BhcmFtcyA9IGMyQnVmZmVyLT5pbmZvKCk7CisgICAgQUxPR1YoIlslc10gcXVldWluZyBnZnggYnVmZmVyIHdpdGggJXp1IGluZm9zIiwgbU5hbWUsIGluZm9QYXJhbXMuc2l6ZSgpKTsKKyAgICBmb3IgKGNvbnN0IHN0ZDo6c2hhcmVkX3B0cjxjb25zdCBDMkluZm8+ICZpbmZvIDogaW5mb1BhcmFtcykgeworICAgICAgICBBU3RyaW5nIHJlczsKKyAgICAgICAgZm9yIChzaXplX3QgaXggPSAwOyBpeCArIDMgPCBpbmZvLT5zaXplKCk7IGl4ICs9IDQpIHsKKyAgICAgICAgICAgIGlmIChpeCkgcmVzLmFwcGVuZCgiLCAiKTsKKyAgICAgICAgICAgIHJlcy5hcHBlbmQoKigoaW50MzJfdCopaW5mby5nZXQoKSArIChpeCAvIDQpKSk7CisgICAgICAgIH0KKyAgICAgICAgQUxPR1YoIiAgWyVzXSIsIHJlcy5jX3N0cigpKTsKKyAgICB9CisjZW5kaWYKKyAgICBzdGQ6OnNoYXJlZF9wdHI8Y29uc3QgQzJTdHJlYW1Sb3RhdGlvbkluZm86Om91dHB1dD4gcm90YXRpb24gPQorICAgICAgICBzdGQ6OnN0YXRpY19wb2ludGVyX2Nhc3Q8Y29uc3QgQzJTdHJlYW1Sb3RhdGlvbkluZm86Om91dHB1dD4oCisgICAgICAgICAgICAgICAgYzJCdWZmZXItPmdldEluZm8oQzJTdHJlYW1Sb3RhdGlvbkluZm86Om91dHB1dDo6UEFSQU1fVFlQRSkpOworICAgIGJvb2wgZmxpcCA9IHJvdGF0aW9uICYmIChyb3RhdGlvbi0+ZmxpcCAmIDEpOworICAgIHVpbnQzMl90IHF1YXJ0ZXJzID0gKChyb3RhdGlvbiA/IHJvdGF0aW9uLT52YWx1ZSA6IDApIC8gOTApICYgMzsKKyAgICB1aW50MzJfdCB0cmFuc2Zvcm0gPSAwOworICAgIHN3aXRjaCAocXVhcnRlcnMpIHsKKyAgICAgICAgY2FzZSAwOiAvLyBubyByb3RhdGlvbgorICAgICAgICAgICAgdHJhbnNmb3JtID0gZmxpcCA/IEhBTF9UUkFOU0ZPUk1fRkxJUF9IIDogMDsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIDE6IC8vIDkwIGRlZ3JlZXMgY291bnRlci1jbG9ja3dpc2UKKyAgICAgICAgICAgIHRyYW5zZm9ybSA9IGZsaXAgPyAoSEFMX1RSQU5TRk9STV9GTElQX1YgfCBIQUxfVFJBTlNGT1JNX1JPVF85MCkKKyAgICAgICAgICAgICAgICAgICAgOiBIQUxfVFJBTlNGT1JNX1JPVF8yNzA7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSAyOiAvLyAxODAgZGVncmVlcworICAgICAgICAgICAgdHJhbnNmb3JtID0gZmxpcCA/IEhBTF9UUkFOU0ZPUk1fRkxJUF9WIDogSEFMX1RSQU5TRk9STV9ST1RfMTgwOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgMzogLy8gOTAgZGVncmVlcyBjbG9ja3dpc2UKKyAgICAgICAgICAgIHRyYW5zZm9ybSA9IGZsaXAgPyAoSEFMX1RSQU5TRk9STV9GTElQX0ggfCBIQUxfVFJBTlNGT1JNX1JPVF85MCkKKyAgICAgICAgICAgICAgICAgICAgOiBIQUxfVFJBTlNGT1JNX1JPVF85MDsKKyAgICAgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIHN0ZDo6c2hhcmVkX3B0cjxjb25zdCBDMlN0cmVhbVN1cmZhY2VTY2FsaW5nSW5mbzo6b3V0cHV0PiBzdXJmYWNlU2NhbGluZyA9CisgICAgICAgIHN0ZDo6c3RhdGljX3BvaW50ZXJfY2FzdDxjb25zdCBDMlN0cmVhbVN1cmZhY2VTY2FsaW5nSW5mbzo6b3V0cHV0PigKKyAgICAgICAgICAgICAgICBjMkJ1ZmZlci0+Z2V0SW5mbyhDMlN0cmVhbVN1cmZhY2VTY2FsaW5nSW5mbzo6b3V0cHV0OjpQQVJBTV9UWVBFKSk7CisgICAgdWludDMyX3QgdmlkZW9TY2FsaW5nTW9kZSA9IE5BVElWRV9XSU5ET1dfU0NBTElOR19NT0RFX1NDQUxFX1RPX1dJTkRPVzsKKyAgICBpZiAoc3VyZmFjZVNjYWxpbmcpIHsKKyAgICAgICAgdmlkZW9TY2FsaW5nTW9kZSA9IHN1cmZhY2VTY2FsaW5nLT52YWx1ZTsKKyAgICB9CisKKyAgICAvLyBVc2UgZGF0YXNwYWNlIGZyb20gZm9ybWF0IGFzIGl0IGhhcyB0aGUgZGVmYXVsdCBhc3BlY3RzIGFscmVhZHkgYXBwbGllZAorICAgIGFuZHJvaWRfZGF0YXNwYWNlX3QgZGF0YVNwYWNlID0gSEFMX0RBVEFTUEFDRV9VTktOT1dOOyAvLyB0aGlzIGlzIDAKKyAgICAodm9pZClidWZmZXItPmZvcm1hdCgpLT5maW5kSW50MzIoImFuZHJvaWQuX2RhdGFzcGFjZSIsIChpbnQzMl90ICopJmRhdGFTcGFjZSk7CisKKyAgICAvLyBIRFIgc3RhdGljIGluZm8KKyAgICBzdGQ6OnNoYXJlZF9wdHI8Y29uc3QgQzJTdHJlYW1IZHJTdGF0aWNJbmZvOjpvdXRwdXQ+IGhkclN0YXRpY0luZm8gPQorICAgICAgICBzdGQ6OnN0YXRpY19wb2ludGVyX2Nhc3Q8Y29uc3QgQzJTdHJlYW1IZHJTdGF0aWNJbmZvOjpvdXRwdXQ+KAorICAgICAgICAgICAgICAgIGMyQnVmZmVyLT5nZXRJbmZvKEMyU3RyZWFtSGRyU3RhdGljSW5mbzo6b3V0cHV0OjpQQVJBTV9UWVBFKSk7CisKKyAgICB7CisgICAgICAgIE11dGV4ZWQ8T3V0cHV0U3VyZmFjZT46OkxvY2tlZCBvdXRwdXQobU91dHB1dFN1cmZhY2UpOworICAgICAgICBpZiAob3V0cHV0LT5zdXJmYWNlID09IG51bGxwdHIpIHsKKyAgICAgICAgICAgIEFMT0dJKCJbJXNdIGNhbm5vdCByZW5kZXIgYnVmZmVyIHdpdGhvdXQgc3VyZmFjZSIsIG1OYW1lKTsKKyAgICAgICAgICAgIHJldHVybiBPSzsKKyAgICAgICAgfQorICAgIH0KKworICAgIHN0ZDo6dmVjdG9yPEMyQ29uc3RHcmFwaGljQmxvY2s+IGJsb2NrcyA9IGMyQnVmZmVyLT5kYXRhKCkuZ3JhcGhpY0Jsb2NrcygpOworICAgIGlmIChibG9ja3Muc2l6ZSgpICE9IDF1KSB7CisgICAgICAgIEFMT0dEKCJbJXNdIGV4cGVjdGVkIDEgZ3JhcGhpYyBibG9jaywgYnV0IGdvdCAlenUiLCBtTmFtZSwgYmxvY2tzLnNpemUoKSk7CisgICAgICAgIHJldHVybiBVTktOT1dOX0VSUk9SOworICAgIH0KKyAgICBjb25zdCBDMkNvbnN0R3JhcGhpY0Jsb2NrICZibG9jayA9IGJsb2Nrcy5mcm9udCgpOworCisgICAgLy8gVE9ETzogcmV2aXNpdCB0aGlzIGFmdGVyIEMyRmVuY2UgaW1wbGVtZW50YXRpb24uCisgICAgYW5kcm9pZDo6SUdyYXBoaWNCdWZmZXJQcm9kdWNlcjo6UXVldWVCdWZmZXJJbnB1dCBxYmkoCisgICAgICAgICAgICB0aW1lc3RhbXBOcywKKyAgICAgICAgICAgIGZhbHNlLCAvLyBkcm9wcGFibGUKKyAgICAgICAgICAgIGRhdGFTcGFjZSwKKyAgICAgICAgICAgIFJlY3QoYmxvY2tzLmZyb250KCkuY3JvcCgpLmxlZnQsCisgICAgICAgICAgICAgICAgIGJsb2Nrcy5mcm9udCgpLmNyb3AoKS50b3AsCisgICAgICAgICAgICAgICAgIGJsb2Nrcy5mcm9udCgpLmNyb3AoKS5yaWdodCgpLAorICAgICAgICAgICAgICAgICBibG9ja3MuZnJvbnQoKS5jcm9wKCkuYm90dG9tKCkpLAorICAgICAgICAgICAgdmlkZW9TY2FsaW5nTW9kZSwKKyAgICAgICAgICAgIHRyYW5zZm9ybSwKKyAgICAgICAgICAgIEZlbmNlOjpOT19GRU5DRSwgMCk7CisgICAgaWYgKGhkclN0YXRpY0luZm8pIHsKKyAgICAgICAgc3RydWN0IGFuZHJvaWRfc21wdGUyMDg2X21ldGFkYXRhIHNtcHRlMjA4Nl9tZXRhID0geworICAgICAgICAgICAgLmRpc3BsYXlQcmltYXJ5UmVkID0geworICAgICAgICAgICAgICAgIGhkclN0YXRpY0luZm8tPm1hc3RlcmluZy5yZWQueCwgaGRyU3RhdGljSW5mby0+bWFzdGVyaW5nLnJlZC55CisgICAgICAgICAgICB9LAorICAgICAgICAgICAgLmRpc3BsYXlQcmltYXJ5R3JlZW4gPSB7CisgICAgICAgICAgICAgICAgaGRyU3RhdGljSW5mby0+bWFzdGVyaW5nLmdyZWVuLngsIGhkclN0YXRpY0luZm8tPm1hc3RlcmluZy5ncmVlbi55CisgICAgICAgICAgICB9LAorICAgICAgICAgICAgLmRpc3BsYXlQcmltYXJ5Qmx1ZSA9IHsKKyAgICAgICAgICAgICAgICBoZHJTdGF0aWNJbmZvLT5tYXN0ZXJpbmcuYmx1ZS54LCBoZHJTdGF0aWNJbmZvLT5tYXN0ZXJpbmcuYmx1ZS55CisgICAgICAgICAgICB9LAorICAgICAgICAgICAgLndoaXRlUG9pbnQgPSB7CisgICAgICAgICAgICAgICAgaGRyU3RhdGljSW5mby0+bWFzdGVyaW5nLndoaXRlLngsIGhkclN0YXRpY0luZm8tPm1hc3RlcmluZy53aGl0ZS55CisgICAgICAgICAgICB9LAorICAgICAgICAgICAgLm1heEx1bWluYW5jZSA9IGhkclN0YXRpY0luZm8tPm1hc3RlcmluZy5tYXhMdW1pbmFuY2UsCisgICAgICAgICAgICAubWluTHVtaW5hbmNlID0gaGRyU3RhdGljSW5mby0+bWFzdGVyaW5nLm1pbkx1bWluYW5jZSwKKyAgICAgICAgfTsKKworICAgICAgICBzdHJ1Y3QgYW5kcm9pZF9jdGE4NjFfM19tZXRhZGF0YSBjdGE4NjFfbWV0YSA9IHsKKyAgICAgICAgICAgIC5tYXhDb250ZW50TGlnaHRMZXZlbCA9IGhkclN0YXRpY0luZm8tPm1heENsbCwKKyAgICAgICAgICAgIC5tYXhGcmFtZUF2ZXJhZ2VMaWdodExldmVsID0gaGRyU3RhdGljSW5mby0+bWF4RmFsbCwKKyAgICAgICAgfTsKKworICAgICAgICBIZHJNZXRhZGF0YSBoZHI7CisgICAgICAgIGhkci52YWxpZFR5cGVzID0gSGRyTWV0YWRhdGE6OlNNUFRFMjA4NiB8IEhkck1ldGFkYXRhOjpDVEE4NjFfMzsKKyAgICAgICAgaGRyLnNtcHRlMjA4NiA9IHNtcHRlMjA4Nl9tZXRhOworICAgICAgICBoZHIuY3RhODYxMyA9IGN0YTg2MV9tZXRhOworICAgICAgICBxYmkuc2V0SGRyTWV0YWRhdGEoaGRyKTsKKyAgICB9CisgICAgYW5kcm9pZDo6SUdyYXBoaWNCdWZmZXJQcm9kdWNlcjo6UXVldWVCdWZmZXJPdXRwdXQgcWJvOworICAgIHN0YXR1c190IHJlc3VsdCA9IG1Db21wb25lbnQtPnF1ZXVlVG9PdXRwdXRTdXJmYWNlKGJsb2NrLCBxYmksICZxYm8pOworICAgIGlmIChyZXN1bHQgIT0gT0spIHsKKyAgICAgICAgQUxPR0koIlslc10gcXVldWVCdWZmZXIgZmFpbGVkOiAlZCIsIG1OYW1lLCByZXN1bHQpOworICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KKyAgICBBTE9HVigiWyVzXSBxdWV1ZSBidWZmZXIgc3VjY2Vzc2Z1bCIsIG1OYW1lKTsKKworICAgIGludDY0X3QgbWVkaWFUaW1lVXMgPSAwOworICAgICh2b2lkKWJ1ZmZlci0+bWV0YSgpLT5maW5kSW50NjQoInRpbWVVcyIsICZtZWRpYVRpbWVVcyk7CisgICAgbUNDb2RlY0NhbGxiYWNrLT5vbk91dHB1dEZyYW1lc1JlbmRlcmVkKG1lZGlhVGltZVVzLCB0aW1lc3RhbXBOcyk7CisKKyAgICByZXR1cm4gT0s7Cit9CisKK3N0YXR1c190IENDb2RlY0J1ZmZlckNoYW5uZWw6OmRpc2NhcmRCdWZmZXIoY29uc3Qgc3A8TWVkaWFDb2RlY0J1ZmZlcj4gJmJ1ZmZlcikgeworICAgIEFMT0dWKCJbJXNdIGRpc2NhcmRCdWZmZXI6ICVwIiwgbU5hbWUsIGJ1ZmZlci5nZXQoKSk7CisgICAgYm9vbCByZWxlYXNlZCA9IGZhbHNlOworICAgIHsKKyAgICAgICAgTXV0ZXhlZDxzdGQ6OnVuaXF1ZV9wdHI8SW5wdXRCdWZmZXJzPj46OkxvY2tlZCBidWZmZXJzKG1JbnB1dEJ1ZmZlcnMpOworICAgICAgICBpZiAoKmJ1ZmZlcnMgJiYgKCpidWZmZXJzKS0+cmVsZWFzZUJ1ZmZlcihidWZmZXIsIG51bGxwdHIpKSB7CisgICAgICAgICAgICBidWZmZXJzLnVubG9jaygpOworICAgICAgICAgICAgcmVsZWFzZWQgPSB0cnVlOworICAgICAgICAgICAgbUF2YWlsYWJsZVBpcGVsaW5lQ2FwYWNpdHkuZnJlZUlucHV0U2xvdHMoMSwgImRpc2NhcmRCdWZmZXIiKTsKKyAgICAgICAgfQorICAgIH0KKyAgICB7CisgICAgICAgIE11dGV4ZWQ8c3RkOjp1bmlxdWVfcHRyPE91dHB1dEJ1ZmZlcnM+Pjo6TG9ja2VkIGJ1ZmZlcnMobU91dHB1dEJ1ZmZlcnMpOworICAgICAgICBpZiAoKmJ1ZmZlcnMgJiYgKCpidWZmZXJzKS0+cmVsZWFzZUJ1ZmZlcihidWZmZXIsIG51bGxwdHIpKSB7CisgICAgICAgICAgICBidWZmZXJzLnVubG9jaygpOworICAgICAgICAgICAgcmVsZWFzZWQgPSB0cnVlOworICAgICAgICB9CisgICAgfQorICAgIGlmIChyZWxlYXNlZCkgeworICAgICAgICBmZWVkSW5wdXRCdWZmZXJJZkF2YWlsYWJsZSgpOworICAgICAgICBzZW5kT3V0cHV0QnVmZmVycygpOworICAgIH0gZWxzZSB7CisgICAgICAgIEFMT0dEKCJbJXNdIE1lZGlhQ29kZWMgZGlzY2FyZGVkIGFuIHVua25vd24gYnVmZmVyIiwgbU5hbWUpOworICAgIH0KKyAgICByZXR1cm4gT0s7Cit9CisKK3ZvaWQgQ0NvZGVjQnVmZmVyQ2hhbm5lbDo6Z2V0SW5wdXRCdWZmZXJBcnJheShWZWN0b3I8c3A8TWVkaWFDb2RlY0J1ZmZlcj4+ICphcnJheSkgeworICAgIGFycmF5LT5jbGVhcigpOworICAgIE11dGV4ZWQ8c3RkOjp1bmlxdWVfcHRyPElucHV0QnVmZmVycz4+OjpMb2NrZWQgYnVmZmVycyhtSW5wdXRCdWZmZXJzKTsKKworICAgIGlmICghKCpidWZmZXJzKS0+aXNBcnJheU1vZGUoKSkgeworICAgICAgICAqYnVmZmVycyA9ICgqYnVmZmVycyktPnRvQXJyYXlNb2RlKGtNaW5JbnB1dEJ1ZmZlckFycmF5U2l6ZSk7CisgICAgfQorCisgICAgKCpidWZmZXJzKS0+Z2V0QXJyYXkoYXJyYXkpOworfQorCit2b2lkIENDb2RlY0J1ZmZlckNoYW5uZWw6OmdldE91dHB1dEJ1ZmZlckFycmF5KFZlY3RvcjxzcDxNZWRpYUNvZGVjQnVmZmVyPj4gKmFycmF5KSB7CisgICAgYXJyYXktPmNsZWFyKCk7CisgICAgTXV0ZXhlZDxzdGQ6OnVuaXF1ZV9wdHI8T3V0cHV0QnVmZmVycz4+OjpMb2NrZWQgYnVmZmVycyhtT3V0cHV0QnVmZmVycyk7CisKKyAgICBpZiAoISgqYnVmZmVycyktPmlzQXJyYXlNb2RlKCkpIHsKKyAgICAgICAgKmJ1ZmZlcnMgPSAoKmJ1ZmZlcnMpLT50b0FycmF5TW9kZShrTWluT3V0cHV0QnVmZmVyQXJyYXlTaXplKTsKKyAgICB9CisKKyAgICAoKmJ1ZmZlcnMpLT5nZXRBcnJheShhcnJheSk7Cit9CisKK3N0YXR1c190IENDb2RlY0J1ZmZlckNoYW5uZWw6OnN0YXJ0KAorICAgICAgICBjb25zdCBzcDxBTWVzc2FnZT4gJmlucHV0Rm9ybWF0LCBjb25zdCBzcDxBTWVzc2FnZT4gJm91dHB1dEZvcm1hdCkgeworICAgIEMyU3RyZWFtQnVmZmVyVHlwZVNldHRpbmc6OmlucHV0IGlTdHJlYW1Gb3JtYXQoMHUpOworICAgIEMyU3RyZWFtQnVmZmVyVHlwZVNldHRpbmc6Om91dHB1dCBvU3RyZWFtRm9ybWF0KDB1KTsKKyAgICBDMlBvcnRSZW9yZGVyQnVmZmVyRGVwdGhUdW5pbmc6Om91dHB1dCByZW9yZGVyRGVwdGg7CisgICAgQzJQb3J0UmVvcmRlcktleVNldHRpbmc6Om91dHB1dCByZW9yZGVyS2V5OworICAgIGMyX3N0YXR1c190IGVyciA9IG1Db21wb25lbnQtPnF1ZXJ5KAorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICZpU3RyZWFtRm9ybWF0LAorICAgICAgICAgICAgICAgICZvU3RyZWFtRm9ybWF0LAorICAgICAgICAgICAgICAgICZyZW9yZGVyRGVwdGgsCisgICAgICAgICAgICAgICAgJnJlb3JkZXJLZXksCisgICAgICAgICAgICB9LAorICAgICAgICAgICAge30sCisgICAgICAgICAgICBDMl9ET05UX0JMT0NLLAorICAgICAgICAgICAgbnVsbHB0cik7CisgICAgaWYgKGVyciA9PSBDMl9CQURfSU5ERVgpIHsKKyAgICAgICAgaWYgKCFpU3RyZWFtRm9ybWF0IHx8ICFvU3RyZWFtRm9ybWF0KSB7CisgICAgICAgICAgICByZXR1cm4gVU5LTk9XTl9FUlJPUjsKKyAgICAgICAgfQorICAgIH0gZWxzZSBpZiAoZXJyICE9IEMyX09LKSB7CisgICAgICAgIHJldHVybiBVTktOT1dOX0VSUk9SOworICAgIH0KKworICAgIHsKKyAgICAgICAgTXV0ZXhlZDxSZW9yZGVyU3Rhc2g+OjpMb2NrZWQgcmVvcmRlcihtUmVvcmRlclN0YXNoKTsKKyAgICAgICAgcmVvcmRlci0+Y2xlYXIoKTsKKyAgICAgICAgaWYgKHJlb3JkZXJEZXB0aCkgeworICAgICAgICAgICAgcmVvcmRlci0+c2V0RGVwdGgocmVvcmRlckRlcHRoLnZhbHVlKTsKKyAgICAgICAgfQorICAgICAgICBpZiAocmVvcmRlcktleSkgeworICAgICAgICAgICAgcmVvcmRlci0+c2V0S2V5KHJlb3JkZXJLZXkudmFsdWUpOworICAgICAgICB9CisgICAgfQorICAgIC8vIFRPRE86IGdldCB0aGlzIGZyb20gaW5wdXQgZm9ybWF0CisgICAgYm9vbCBzZWN1cmUgPSBtQ29tcG9uZW50LT5nZXROYW1lKCkuZmluZCgiLnNlY3VyZSIpICE9IHN0ZDo6c3RyaW5nOjpucG9zOworCisgICAgc3RkOjpzaGFyZWRfcHRyPEMyQWxsb2NhdG9yU3RvcmU+IGFsbG9jYXRvclN0b3JlID0gR2V0Q29kZWMyUGxhdGZvcm1BbGxvY2F0b3JTdG9yZSgpOworICAgIGludCBwb29sTWFzayA9IHByb3BlcnR5X2dldF9pbnQzMigKKyAgICAgICAgICAgICJkZWJ1Zy5zdGFnZWZyaWdodC5jMi1wb29sbWFzayIsCisgICAgICAgICAgICAxIDw8IEMyUGxhdGZvcm1BbGxvY2F0b3JTdG9yZTo6SU9OIHwKKyAgICAgICAgICAgIDEgPDwgQzJQbGF0Zm9ybUFsbG9jYXRvclN0b3JlOjpCVUZGRVJRVUVVRSk7CisKKyAgICBpZiAoaW5wdXRGb3JtYXQgIT0gbnVsbHB0cikgeworICAgICAgICBib29sIGdyYXBoaWMgPSAoaVN0cmVhbUZvcm1hdC52YWx1ZSA9PSBDMkZvcm1hdFZpZGVvKTsKKyAgICAgICAgc3RkOjpzaGFyZWRfcHRyPEMyQmxvY2tQb29sPiBwb29sOworICAgICAgICB7CisgICAgICAgICAgICBNdXRleGVkPEJsb2NrUG9vbHM+OjpMb2NrZWQgcG9vbHMobUJsb2NrUG9vbHMpOworCisgICAgICAgICAgICAvLyBzZXQgZGVmYXVsdCBhbGxvY2F0b3IgSUQuCisgICAgICAgICAgICBwb29scy0+aW5wdXRBbGxvY2F0b3JJZCA9IChncmFwaGljKSA/IEMyUGxhdGZvcm1BbGxvY2F0b3JTdG9yZTo6R1JBTExPQworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBDMlBsYXRmb3JtQWxsb2NhdG9yU3RvcmU6OklPTjsKKworICAgICAgICAgICAgLy8gcXVlcnkgQzJQb3J0QWxsb2NhdG9yc1R1bmluZzo6aW5wdXQgZnJvbSBjb21wb25lbnQuIElmIGFuIGFsbG9jYXRvciBJRCBpcyBvYnRhaW5lZAorICAgICAgICAgICAgLy8gZnJvbSBjb21wb25lbnQsIGNyZWF0ZSB0aGUgaW5wdXQgYmxvY2sgcG9vbCB3aXRoIGdpdmVuIElELiBPdGhlcndpc2UsIHVzZSBkZWZhdWx0IElEcy4KKyAgICAgICAgICAgIHN0ZDo6dmVjdG9yPHN0ZDo6dW5pcXVlX3B0cjxDMlBhcmFtPj4gcGFyYW1zOworICAgICAgICAgICAgZXJyID0gbUNvbXBvbmVudC0+cXVlcnkoeyB9LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeyBDMlBvcnRBbGxvY2F0b3JzVHVuaW5nOjppbnB1dDo6UEFSQU1fVFlQRSB9LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQzJfRE9OVF9CTE9DSywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZwYXJhbXMpOworICAgICAgICAgICAgaWYgKChlcnIgIT0gQzJfT0sgJiYgZXJyICE9IEMyX0JBRF9JTkRFWCkgfHwgcGFyYW1zLnNpemUoKSAhPSAxKSB7CisgICAgICAgICAgICAgICAgQUxPR0QoIlslc10gUXVlcnkgaW5wdXQgYWxsb2NhdG9ycyByZXR1cm5lZCAlenUgcGFyYW1zID0+ICVzICgldSkiLAorICAgICAgICAgICAgICAgICAgICAgICAgbU5hbWUsIHBhcmFtcy5zaXplKCksIGFzU3RyaW5nKGVyciksIGVycik7CisgICAgICAgICAgICB9IGVsc2UgaWYgKGVyciA9PSBDMl9PSyAmJiBwYXJhbXMuc2l6ZSgpID09IDEpIHsKKyAgICAgICAgICAgICAgICBDMlBvcnRBbGxvY2F0b3JzVHVuaW5nOjppbnB1dCAqaW5wdXRBbGxvY2F0b3JzID0KKyAgICAgICAgICAgICAgICAgICAgQzJQb3J0QWxsb2NhdG9yc1R1bmluZzo6aW5wdXQ6OkZyb20ocGFyYW1zWzBdLmdldCgpKTsKKyAgICAgICAgICAgICAgICBpZiAoaW5wdXRBbGxvY2F0b3JzICYmIGlucHV0QWxsb2NhdG9ycy0+ZmxleENvdW50KCkgPiAwKSB7CisgICAgICAgICAgICAgICAgICAgIHN0ZDo6c2hhcmVkX3B0cjxDMkFsbG9jYXRvcj4gYWxsb2NhdG9yOworICAgICAgICAgICAgICAgICAgICAvLyB2ZXJpZnkgYWxsb2NhdG9yIElEcyBhbmQgcmVzb2x2ZSBkZWZhdWx0IGFsbG9jYXRvcgorICAgICAgICAgICAgICAgICAgICBhbGxvY2F0b3JTdG9yZS0+ZmV0Y2hBbGxvY2F0b3IoaW5wdXRBbGxvY2F0b3JzLT5tLnZhbHVlc1swXSwgJmFsbG9jYXRvcik7CisgICAgICAgICAgICAgICAgICAgIGlmIChhbGxvY2F0b3IpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHBvb2xzLT5pbnB1dEFsbG9jYXRvcklkID0gYWxsb2NhdG9yLT5nZXRJZCgpOworICAgICAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICAgICAgQUxPR0QoIlslc10gY29tcG9uZW50IHJlcXVlc3RlZCBpbnZhbGlkIGlucHV0IGFsbG9jYXRvciBJRCAldSIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1OYW1lLCBpbnB1dEFsbG9jYXRvcnMtPm0udmFsdWVzWzBdKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgLy8gVE9ETzogdXNlIEMyQ29tcG9uZW50IHdyYXBwZXIgdG8gYXNzb2NpYXRlIHRoaXMgcG9vbCB3aXRoIG91cnNlbHZlcworICAgICAgICAgICAgaWYgKChwb29sTWFzayA+PiBwb29scy0+aW5wdXRBbGxvY2F0b3JJZCkgJiAxKSB7CisgICAgICAgICAgICAgICAgZXJyID0gQ3JlYXRlQ29kZWMyQmxvY2tQb29sKHBvb2xzLT5pbnB1dEFsbG9jYXRvcklkLCBudWxscHRyLCAmcG9vbCk7CisgICAgICAgICAgICAgICAgQUxPR0QoIlslc10gQ3JlYXRlZCBpbnB1dCBibG9jayBwb29sIHdpdGggYWxsb2NhdG9ySUQgJXUgPT4gcG9vbElEICVsbHUgLSAlcyAoJWQpIiwKKyAgICAgICAgICAgICAgICAgICAgICAgIG1OYW1lLCBwb29scy0+aW5wdXRBbGxvY2F0b3JJZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICh1bnNpZ25lZCBsb25nIGxvbmcpKHBvb2wgPyBwb29sLT5nZXRMb2NhbElkKCkgOiAxMTEwMDAxMTEpLAorICAgICAgICAgICAgICAgICAgICAgICAgYXNTdHJpbmcoZXJyKSwgZXJyKTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgZXJyID0gQzJfTk9UX0ZPVU5EOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKGVyciAhPSBDMl9PSykgeworICAgICAgICAgICAgICAgIEMyQmxvY2tQb29sOjpsb2NhbF9pZF90IGlucHV0UG9vbElkID0KKyAgICAgICAgICAgICAgICAgICAgZ3JhcGhpYyA/IEMyQmxvY2tQb29sOjpCQVNJQ19HUkFQSElDIDogQzJCbG9ja1Bvb2w6OkJBU0lDX0xJTkVBUjsKKyAgICAgICAgICAgICAgICBlcnIgPSBHZXRDb2RlYzJCbG9ja1Bvb2woaW5wdXRQb29sSWQsIG51bGxwdHIsICZwb29sKTsKKyAgICAgICAgICAgICAgICBBTE9HRCgiWyVzXSBVc2luZyBiYXNpYyBpbnB1dCBibG9jayBwb29sIHdpdGggcG9vbElEICVsbHUgPT4gZ290ICVsbHUgLSAlcyAoJWQpIiwKKyAgICAgICAgICAgICAgICAgICAgICAgIG1OYW1lLCAodW5zaWduZWQgbG9uZyBsb25nKWlucHV0UG9vbElkLAorICAgICAgICAgICAgICAgICAgICAgICAgKHVuc2lnbmVkIGxvbmcgbG9uZykocG9vbCA/IHBvb2wtPmdldExvY2FsSWQoKSA6IDExMTAwMDExMSksCisgICAgICAgICAgICAgICAgICAgICAgICBhc1N0cmluZyhlcnIpLCBlcnIpOworICAgICAgICAgICAgICAgIGlmIChlcnIgIT0gQzJfT0spIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIE5PX01FTU9SWTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICBwb29scy0+aW5wdXRQb29sID0gcG9vbDsKKyAgICAgICAgfQorCisgICAgICAgIE11dGV4ZWQ8c3RkOjp1bmlxdWVfcHRyPElucHV0QnVmZmVycz4+OjpMb2NrZWQgYnVmZmVycyhtSW5wdXRCdWZmZXJzKTsKKyAgICAgICAgaWYgKGdyYXBoaWMpIHsKKyAgICAgICAgICAgIGlmIChtSW5wdXRTdXJmYWNlKSB7CisgICAgICAgICAgICAgICAgYnVmZmVycy0+cmVzZXQobmV3IER1bW15SW5wdXRCdWZmZXJzKG1OYW1lKSk7CisgICAgICAgICAgICB9IGVsc2UgaWYgKG1NZXRhTW9kZSA9PSBNT0RFX0FOVykgeworICAgICAgICAgICAgICAgIGJ1ZmZlcnMtPnJlc2V0KG5ldyBHcmFwaGljTWV0YWRhdGFJbnB1dEJ1ZmZlcnMobU5hbWUpKTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgYnVmZmVycy0+cmVzZXQobmV3IEdyYXBoaWNJbnB1dEJ1ZmZlcnMobU5hbWUpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGlmIChoYXNDcnlwdG9PckRlc2NyYW1ibGVyKCkpIHsKKyAgICAgICAgICAgICAgICBpbnQzMl90IGNhcGFjaXR5ID0ga0xpbmVhckJ1ZmZlclNpemU7CisgICAgICAgICAgICAgICAgKHZvaWQpaW5wdXRGb3JtYXQtPmZpbmRJbnQzMihLRVlfTUFYX0lOUFVUX1NJWkUsICZjYXBhY2l0eSk7CisgICAgICAgICAgICAgICAgaWYgKChzaXplX3QpY2FwYWNpdHkgPiBrTWF4TGluZWFyQnVmZmVyU2l6ZSkgeworICAgICAgICAgICAgICAgICAgICBBTE9HRCgiY2xpZW50IHJlcXVlc3RlZCAlZCwgY2FwcGVkIHRvICV6dSIsIGNhcGFjaXR5LCBrTWF4TGluZWFyQnVmZmVyU2l6ZSk7CisgICAgICAgICAgICAgICAgICAgIGNhcGFjaXR5ID0ga01heExpbmVhckJ1ZmZlclNpemU7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGlmIChtRGVhbGVyID09IG51bGxwdHIpIHsKKyAgICAgICAgICAgICAgICAgICAgbURlYWxlciA9IG5ldyBNZW1vcnlEZWFsZXIoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWxpZ24oY2FwYWNpdHksIE1lbW9yeURlYWxlcjo6Z2V0QWxsb2NhdGlvbkFsaWdubWVudCgpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqIChrTWluSW5wdXRCdWZmZXJBcnJheVNpemUgKyAxKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAiRW5jcnlwdGVkTGluZWFySW5wdXRCdWZmZXJzIik7CisgICAgICAgICAgICAgICAgICAgIG1EZWNyeXB0RGVzdGluYXRpb24gPSBtRGVhbGVyLT5hbGxvY2F0ZSgoc2l6ZV90KWNhcGFjaXR5KTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgaWYgKG1DcnlwdG8gIT0gbnVsbHB0ciAmJiBtSGVhcFNlcU51bSA8IDApIHsKKyAgICAgICAgICAgICAgICAgICAgbUhlYXBTZXFOdW0gPSBtQ3J5cHRvLT5zZXRIZWFwKG1EZWFsZXItPmdldE1lbW9yeUhlYXAoKSk7CisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgbUhlYXBTZXFOdW0gPSAtMTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYnVmZmVycy0+cmVzZXQobmV3IEVuY3J5cHRlZExpbmVhcklucHV0QnVmZmVycygKKyAgICAgICAgICAgICAgICAgICAgICAgIHNlY3VyZSwgbURlYWxlciwgbUNyeXB0bywgbUhlYXBTZXFOdW0sIChzaXplX3QpY2FwYWNpdHksIG1OYW1lKSk7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIGJ1ZmZlcnMtPnJlc2V0KG5ldyBMaW5lYXJJbnB1dEJ1ZmZlcnMobU5hbWUpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICAoKmJ1ZmZlcnMpLT5zZXRGb3JtYXQoaW5wdXRGb3JtYXQpOworCisgICAgICAgIGlmIChlcnIgPT0gQzJfT0spIHsKKyAgICAgICAgICAgICgqYnVmZmVycyktPnNldFBvb2wocG9vbCk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAvLyBUT0RPOiBlcnJvcgorICAgICAgICB9CisgICAgfQorCisgICAgaWYgKG91dHB1dEZvcm1hdCAhPSBudWxscHRyKSB7CisgICAgICAgIHNwPElHcmFwaGljQnVmZmVyUHJvZHVjZXI+IG91dHB1dFN1cmZhY2U7CisgICAgICAgIHVpbnQzMl90IG91dHB1dEdlbmVyYXRpb247CisgICAgICAgIHsKKyAgICAgICAgICAgIE11dGV4ZWQ8T3V0cHV0U3VyZmFjZT46OkxvY2tlZCBvdXRwdXQobU91dHB1dFN1cmZhY2UpOworICAgICAgICAgICAgb3V0cHV0U3VyZmFjZSA9IG91dHB1dC0+c3VyZmFjZSA/CisgICAgICAgICAgICAgICAgICAgIG91dHB1dC0+c3VyZmFjZS0+Z2V0SUdyYXBoaWNCdWZmZXJQcm9kdWNlcigpIDogbnVsbHB0cjsKKyAgICAgICAgICAgIG91dHB1dEdlbmVyYXRpb24gPSBvdXRwdXQtPmdlbmVyYXRpb247CisgICAgICAgIH0KKworICAgICAgICBib29sIGdyYXBoaWMgPSAob1N0cmVhbUZvcm1hdC52YWx1ZSA9PSBDMkZvcm1hdFZpZGVvKTsKKyAgICAgICAgQzJCbG9ja1Bvb2w6OmxvY2FsX2lkX3Qgb3V0cHV0UG9vbElkXzsKKworICAgICAgICB7CisgICAgICAgICAgICBNdXRleGVkPEJsb2NrUG9vbHM+OjpMb2NrZWQgcG9vbHMobUJsb2NrUG9vbHMpOworCisgICAgICAgICAgICAvLyBzZXQgZGVmYXVsdCBhbGxvY2F0b3IgSUQuCisgICAgICAgICAgICBwb29scy0+b3V0cHV0QWxsb2NhdG9ySWQgPSAoZ3JhcGhpYykgPyBDMlBsYXRmb3JtQWxsb2NhdG9yU3RvcmU6OkdSQUxMT0MKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IEMyUGxhdGZvcm1BbGxvY2F0b3JTdG9yZTo6SU9OOworCisgICAgICAgICAgICAvLyBxdWVyeSBDMlBvcnRBbGxvY2F0b3JzVHVuaW5nOjpvdXRwdXQgZnJvbSBjb21wb25lbnQsIG9yIHVzZSBkZWZhdWx0IGFsbG9jYXRvciBpZgorICAgICAgICAgICAgLy8gdW5zdWNjZXNzZnVsLgorICAgICAgICAgICAgc3RkOjp2ZWN0b3I8c3RkOjp1bmlxdWVfcHRyPEMyUGFyYW0+PiBwYXJhbXM7CisgICAgICAgICAgICBlcnIgPSBtQ29tcG9uZW50LT5xdWVyeSh7IH0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7IEMyUG9ydEFsbG9jYXRvcnNUdW5pbmc6Om91dHB1dDo6UEFSQU1fVFlQRSB9LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQzJfRE9OVF9CTE9DSywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZwYXJhbXMpOworICAgICAgICAgICAgaWYgKChlcnIgIT0gQzJfT0sgJiYgZXJyICE9IEMyX0JBRF9JTkRFWCkgfHwgcGFyYW1zLnNpemUoKSAhPSAxKSB7CisgICAgICAgICAgICAgICAgQUxPR0QoIlslc10gUXVlcnkgb3V0cHV0IGFsbG9jYXRvcnMgcmV0dXJuZWQgJXp1IHBhcmFtcyA9PiAlcyAoJXUpIiwKKyAgICAgICAgICAgICAgICAgICAgICAgIG1OYW1lLCBwYXJhbXMuc2l6ZSgpLCBhc1N0cmluZyhlcnIpLCBlcnIpOworICAgICAgICAgICAgfSBlbHNlIGlmIChlcnIgPT0gQzJfT0sgJiYgcGFyYW1zLnNpemUoKSA9PSAxKSB7CisgICAgICAgICAgICAgICAgQzJQb3J0QWxsb2NhdG9yc1R1bmluZzo6b3V0cHV0ICpvdXRwdXRBbGxvY2F0b3JzID0KKyAgICAgICAgICAgICAgICAgICAgQzJQb3J0QWxsb2NhdG9yc1R1bmluZzo6b3V0cHV0OjpGcm9tKHBhcmFtc1swXS5nZXQoKSk7CisgICAgICAgICAgICAgICAgaWYgKG91dHB1dEFsbG9jYXRvcnMgJiYgb3V0cHV0QWxsb2NhdG9ycy0+ZmxleENvdW50KCkgPiAwKSB7CisgICAgICAgICAgICAgICAgICAgIHN0ZDo6c2hhcmVkX3B0cjxDMkFsbG9jYXRvcj4gYWxsb2NhdG9yOworICAgICAgICAgICAgICAgICAgICAvLyB2ZXJpZnkgYWxsb2NhdG9yIElEcyBhbmQgcmVzb2x2ZSBkZWZhdWx0IGFsbG9jYXRvcgorICAgICAgICAgICAgICAgICAgICBhbGxvY2F0b3JTdG9yZS0+ZmV0Y2hBbGxvY2F0b3Iob3V0cHV0QWxsb2NhdG9ycy0+bS52YWx1ZXNbMF0sICZhbGxvY2F0b3IpOworICAgICAgICAgICAgICAgICAgICBpZiAoYWxsb2NhdG9yKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBwb29scy0+b3V0cHV0QWxsb2NhdG9ySWQgPSBhbGxvY2F0b3ItPmdldElkKCk7CisgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgICAgICBBTE9HRCgiWyVzXSBjb21wb25lbnQgcmVxdWVzdGVkIGludmFsaWQgb3V0cHV0IGFsbG9jYXRvciBJRCAldSIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1OYW1lLCBvdXRwdXRBbGxvY2F0b3JzLT5tLnZhbHVlc1swXSk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIC8vIHVzZSBidWZmZXJxdWV1ZSBpZiBvdXRwdXR0aW5nIHRvIGEgc3VyZmFjZS4KKyAgICAgICAgICAgIC8vIHF1ZXJ5IEMyUG9ydFN1cmZhY2VBbGxvY2F0b3JUdW5pbmc6Om91dHB1dCBmcm9tIGNvbXBvbmVudCwgb3IgdXNlIGRlZmF1bHQgYWxsb2NhdG9yCisgICAgICAgICAgICAvLyBpZiB1bnN1Y2Nlc3NmdWwuCisgICAgICAgICAgICBpZiAob3V0cHV0U3VyZmFjZSkgeworICAgICAgICAgICAgICAgIHBhcmFtcy5jbGVhcigpOworICAgICAgICAgICAgICAgIGVyciA9IG1Db21wb25lbnQtPnF1ZXJ5KHsgfSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7IEMyUG9ydFN1cmZhY2VBbGxvY2F0b3JUdW5pbmc6Om91dHB1dDo6UEFSQU1fVFlQRSB9LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEMyX0RPTlRfQkxPQ0ssCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnBhcmFtcyk7CisgICAgICAgICAgICAgICAgaWYgKChlcnIgIT0gQzJfT0sgJiYgZXJyICE9IEMyX0JBRF9JTkRFWCkgfHwgcGFyYW1zLnNpemUoKSAhPSAxKSB7CisgICAgICAgICAgICAgICAgICAgIEFMT0dEKCJbJXNdIFF1ZXJ5IG91dHB1dCBzdXJmYWNlIGFsbG9jYXRvciByZXR1cm5lZCAlenUgcGFyYW1zID0+ICVzICgldSkiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1OYW1lLCBwYXJhbXMuc2l6ZSgpLCBhc1N0cmluZyhlcnIpLCBlcnIpOworICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoZXJyID09IEMyX09LICYmIHBhcmFtcy5zaXplKCkgPT0gMSkgeworICAgICAgICAgICAgICAgICAgICBDMlBvcnRTdXJmYWNlQWxsb2NhdG9yVHVuaW5nOjpvdXRwdXQgKnN1cmZhY2VBbGxvY2F0b3IgPQorICAgICAgICAgICAgICAgICAgICAgICAgQzJQb3J0U3VyZmFjZUFsbG9jYXRvclR1bmluZzo6b3V0cHV0OjpGcm9tKHBhcmFtc1swXS5nZXQoKSk7CisgICAgICAgICAgICAgICAgICAgIGlmIChzdXJmYWNlQWxsb2NhdG9yKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBzdGQ6OnNoYXJlZF9wdHI8QzJBbGxvY2F0b3I+IGFsbG9jYXRvcjsKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIHZlcmlmeSBhbGxvY2F0b3IgSURzIGFuZCByZXNvbHZlIGRlZmF1bHQgYWxsb2NhdG9yCisgICAgICAgICAgICAgICAgICAgICAgICBhbGxvY2F0b3JTdG9yZS0+ZmV0Y2hBbGxvY2F0b3Ioc3VyZmFjZUFsbG9jYXRvci0+dmFsdWUsICZhbGxvY2F0b3IpOworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGFsbG9jYXRvcikgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBvb2xzLT5vdXRwdXRBbGxvY2F0b3JJZCA9IGFsbG9jYXRvci0+Z2V0SWQoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgQUxPR0QoIlslc10gY29tcG9uZW50IHJlcXVlc3RlZCBpbnZhbGlkIHN1cmZhY2Ugb3V0cHV0IGFsbG9jYXRvciBJRCAldSIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtTmFtZSwgc3VyZmFjZUFsbG9jYXRvci0+dmFsdWUpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVyciA9IEMyX0JBRF9WQUxVRTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBpZiAocG9vbHMtPm91dHB1dEFsbG9jYXRvcklkID09IEMyUGxhdGZvcm1BbGxvY2F0b3JTdG9yZTo6R1JBTExPQworICAgICAgICAgICAgICAgICAgICAgICAgJiYgZXJyICE9IEMyX09LCisgICAgICAgICAgICAgICAgICAgICAgICAmJiAoKHBvb2xNYXNrID4+IEMyUGxhdGZvcm1BbGxvY2F0b3JTdG9yZTo6QlVGRkVSUVVFVUUpICYgMSkpIHsKKyAgICAgICAgICAgICAgICAgICAgcG9vbHMtPm91dHB1dEFsbG9jYXRvcklkID0gQzJQbGF0Zm9ybUFsbG9jYXRvclN0b3JlOjpCVUZGRVJRVUVVRTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmICgocG9vbE1hc2sgPj4gcG9vbHMtPm91dHB1dEFsbG9jYXRvcklkKSAmIDEpIHsKKyAgICAgICAgICAgICAgICBlcnIgPSBtQ29tcG9uZW50LT5jcmVhdGVCbG9ja1Bvb2woCisgICAgICAgICAgICAgICAgICAgICAgICBwb29scy0+b3V0cHV0QWxsb2NhdG9ySWQsICZwb29scy0+b3V0cHV0UG9vbElkLCAmcG9vbHMtPm91dHB1dFBvb2xJbnRmKTsKKyAgICAgICAgICAgICAgICBBTE9HSSgiWyVzXSBDcmVhdGVkIG91dHB1dCBibG9jayBwb29sIHdpdGggYWxsb2NhdG9ySUQgJXUgPT4gcG9vbElEICVsbHUgLSAlcyIsCisgICAgICAgICAgICAgICAgICAgICAgICBtTmFtZSwgcG9vbHMtPm91dHB1dEFsbG9jYXRvcklkLAorICAgICAgICAgICAgICAgICAgICAgICAgKHVuc2lnbmVkIGxvbmcgbG9uZylwb29scy0+b3V0cHV0UG9vbElkLAorICAgICAgICAgICAgICAgICAgICAgICAgYXNTdHJpbmcoZXJyKSk7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIGVyciA9IEMyX05PVF9GT1VORDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChlcnIgIT0gQzJfT0spIHsKKyAgICAgICAgICAgICAgICAvLyB1c2UgYmFzaWMgcG9vbCBpbnN0ZWFkCisgICAgICAgICAgICAgICAgcG9vbHMtPm91dHB1dFBvb2xJZCA9CisgICAgICAgICAgICAgICAgICAgIGdyYXBoaWMgPyBDMkJsb2NrUG9vbDo6QkFTSUNfR1JBUEhJQyA6IEMyQmxvY2tQb29sOjpCQVNJQ19MSU5FQVI7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIC8vIENvbmZpZ3VyZSBvdXRwdXQgYmxvY2sgcG9vbCBJRCBhcyBwYXJhbWV0ZXIgQzJQb3J0QmxvY2tQb29sc1R1bmluZzo6b3V0cHV0IHRvCisgICAgICAgICAgICAvLyBjb21wb25lbnQuCisgICAgICAgICAgICBzdGQ6OnVuaXF1ZV9wdHI8QzJQb3J0QmxvY2tQb29sc1R1bmluZzo6b3V0cHV0PiBwb29sSWRzVHVuaW5nID0KKyAgICAgICAgICAgICAgICAgICAgQzJQb3J0QmxvY2tQb29sc1R1bmluZzo6b3V0cHV0OjpBbGxvY1VuaXF1ZSh7IHBvb2xzLT5vdXRwdXRQb29sSWQgfSk7CisKKyAgICAgICAgICAgIHN0ZDo6dmVjdG9yPHN0ZDo6dW5pcXVlX3B0cjxDMlNldHRpbmdSZXN1bHQ+PiBmYWlsdXJlczsKKyAgICAgICAgICAgIGVyciA9IG1Db21wb25lbnQtPmNvbmZpZyh7IHBvb2xJZHNUdW5pbmcuZ2V0KCkgfSwgQzJfTUFZX0JMT0NLLCAmZmFpbHVyZXMpOworICAgICAgICAgICAgQUxPR0QoIlslc10gQ29uZmlndXJlZCBvdXRwdXQgYmxvY2sgcG9vbCBpZHMgJWxsdSA9PiAlcyIsCisgICAgICAgICAgICAgICAgICAgIG1OYW1lLCAodW5zaWduZWQgbG9uZyBsb25nKXBvb2xJZHNUdW5pbmctPm0udmFsdWVzWzBdLCBhc1N0cmluZyhlcnIpKTsKKyAgICAgICAgICAgIG91dHB1dFBvb2xJZF8gPSBwb29scy0+b3V0cHV0UG9vbElkOworICAgICAgICB9CisKKyAgICAgICAgTXV0ZXhlZDxzdGQ6OnVuaXF1ZV9wdHI8T3V0cHV0QnVmZmVycz4+OjpMb2NrZWQgYnVmZmVycyhtT3V0cHV0QnVmZmVycyk7CisKKyAgICAgICAgaWYgKGdyYXBoaWMpIHsKKyAgICAgICAgICAgIGlmIChvdXRwdXRTdXJmYWNlKSB7CisgICAgICAgICAgICAgICAgYnVmZmVycy0+cmVzZXQobmV3IEdyYXBoaWNPdXRwdXRCdWZmZXJzKG1OYW1lKSk7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIGJ1ZmZlcnMtPnJlc2V0KG5ldyBSYXdHcmFwaGljT3V0cHV0QnVmZmVycyhtTmFtZSkpOworICAgICAgICAgICAgfQorICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgYnVmZmVycy0+cmVzZXQobmV3IExpbmVhck91dHB1dEJ1ZmZlcnMobU5hbWUpKTsKKyAgICAgICAgfQorICAgICAgICAoKmJ1ZmZlcnMpLT5zZXRGb3JtYXQob3V0cHV0Rm9ybWF0LT5kdXAoKSk7CisKKworICAgICAgICAvLyBUcnkgdG8gc2V0IG91dHB1dCBzdXJmYWNlIHRvIGNyZWF0ZWQgYmxvY2sgcG9vbCBpZiBnaXZlbi4KKyAgICAgICAgaWYgKG91dHB1dFN1cmZhY2UpIHsKKyAgICAgICAgICAgIG1Db21wb25lbnQtPnNldE91dHB1dFN1cmZhY2UoCisgICAgICAgICAgICAgICAgICAgIG91dHB1dFBvb2xJZF8sCisgICAgICAgICAgICAgICAgICAgIG91dHB1dFN1cmZhY2UsCisgICAgICAgICAgICAgICAgICAgIG91dHB1dEdlbmVyYXRpb24pOworICAgICAgICB9CisKKyAgICAgICAgaWYgKG9TdHJlYW1Gb3JtYXQudmFsdWUgPT0gQzJCdWZmZXJEYXRhOjpMSU5FQVIKKyAgICAgICAgICAgICAgICAmJiBtQ29tcG9uZW50TmFtZS5maW5kKCJjMi5xdGkuIikgPT0gc3RkOjpzdHJpbmc6Om5wb3MpIHsKKyAgICAgICAgICAgIC8vIFdPUktBUk9VTkQ6IGlmIHdlJ3JlIHVzaW5nIGVhcmx5IENTRCB3b3JrYXJvdW5kIHdlIGNvbnZlcnQgdG8KKyAgICAgICAgICAgIC8vICAgICAgICAgICAgIGFycmF5IG1vZGUsIHRvIGFwcGVhc2UgYXBwcyBhc3N1bWluZyB0aGUgb3V0cHV0CisgICAgICAgICAgICAvLyAgICAgICAgICAgICBidWZmZXJzIHRvIGJlIG9mIHRoZSBzYW1lIHNpemUuCisgICAgICAgICAgICAoKmJ1ZmZlcnMpID0gKCpidWZmZXJzKS0+dG9BcnJheU1vZGUoa01pbk91dHB1dEJ1ZmZlckFycmF5U2l6ZSk7CisKKyAgICAgICAgICAgIGludDMyX3QgY2hhbm5lbENvdW50OworICAgICAgICAgICAgaW50MzJfdCBzYW1wbGVSYXRlOworICAgICAgICAgICAgaWYgKG91dHB1dEZvcm1hdC0+ZmluZEludDMyKEtFWV9DSEFOTkVMX0NPVU5ULCAmY2hhbm5lbENvdW50KQorICAgICAgICAgICAgICAgICAgICAmJiBvdXRwdXRGb3JtYXQtPmZpbmRJbnQzMihLRVlfU0FNUExFX1JBVEUsICZzYW1wbGVSYXRlKSkgeworICAgICAgICAgICAgICAgIGludDMyX3QgZGVsYXkgPSAwOworICAgICAgICAgICAgICAgIGludDMyX3QgcGFkZGluZyA9IDA7OworICAgICAgICAgICAgICAgIGlmICghb3V0cHV0Rm9ybWF0LT5maW5kSW50MzIoImVuY29kZXItZGVsYXkiLCAmZGVsYXkpKSB7CisgICAgICAgICAgICAgICAgICAgIGRlbGF5ID0gMDsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgaWYgKCFvdXRwdXRGb3JtYXQtPmZpbmRJbnQzMigiZW5jb2Rlci1wYWRkaW5nIiwgJnBhZGRpbmcpKSB7CisgICAgICAgICAgICAgICAgICAgIHBhZGRpbmcgPSAwOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBpZiAoZGVsYXkgfHwgcGFkZGluZykgeworICAgICAgICAgICAgICAgICAgICAvLyBXZSBuZWVkIHdyaXRlIGFjY2VzcyB0byB0aGUgYnVmZmVycywgYW5kIHdlJ3JlIGFscmVhZHkgaW4KKyAgICAgICAgICAgICAgICAgICAgLy8gYXJyYXkgbW9kZS4KKyAgICAgICAgICAgICAgICAgICAgKCpidWZmZXJzKS0+aW5pdFNraXBDdXRCdWZmZXIoZGVsYXksIHBhZGRpbmcsIHNhbXBsZVJhdGUsIGNoYW5uZWxDb3VudCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCisgICAgLy8gU2V0IHVwIHBpcGVsaW5lIGNvbnRyb2wuIFRoaXMgaGFzIHRvIGJlIGRvbmUgYWZ0ZXIgbUlucHV0QnVmZmVycyBhbmQKKyAgICAvLyBtT3V0cHV0QnVmZmVycyBhcmUgaW5pdGlhbGl6ZWQgdG8gbWFrZSBzdXJlIHRoYXQgbGluZ2VyaW5nIGNhbGxiYWNrcworICAgIC8vIGFib3V0IGJ1ZmZlcnMgZnJvbSB0aGUgcHJldmlvdXMgZ2VuZXJhdGlvbiBkbyBub3QgaW50ZXJmZXJlIHdpdGggdGhlCisgICAgLy8gbmV3bHkgaW5pdGlhbGl6ZWQgcGlwZWxpbmUgY2FwYWNpdHkuCisKKyAgICAvLyBRdWVyeSBkZWxheXMKKyAgICBDMlBvcnRSZXF1ZXN0ZWREZWxheVR1bmluZzo6aW5wdXQgaW5wdXREZWxheTsKKyAgICBDMlBvcnRSZXF1ZXN0ZWREZWxheVR1bmluZzo6b3V0cHV0IG91dHB1dERlbGF5OworICAgIEMyUmVxdWVzdGVkUGlwZWxpbmVEZWxheVR1bmluZyBwaXBlbGluZURlbGF5OworI2lmIDAKKyAgICBlcnIgPSBtQ29tcG9uZW50LT5xdWVyeSgKKyAgICAgICAgICAgIHsgJmlucHV0RGVsYXksICZwaXBlbGluZURlbGF5LCAmb3V0cHV0RGVsYXkgfSwKKyAgICAgICAgICAgIHt9LAorICAgICAgICAgICAgQzJfRE9OVF9CTE9DSywKKyAgICAgICAgICAgIG51bGxwdHIpOworICAgIG1BdmFpbGFibGVQaXBlbGluZUNhcGFjaXR5LmluaXRpYWxpemUoCisgICAgICAgICAgICBpbnB1dERlbGF5LAorICAgICAgICAgICAgaW5wdXREZWxheSArIHBpcGVsaW5lRGVsYXksCisgICAgICAgICAgICBpbnB1dERlbGF5ICsgcGlwZWxpbmVEZWxheSArIG91dHB1dERlbGF5LAorICAgICAgICAgICAgbU5hbWUpOworI2Vsc2UKKyAgICBtQXZhaWxhYmxlUGlwZWxpbmVDYXBhY2l0eS5pbml0aWFsaXplKAorICAgICAgICAgICAga01pbklucHV0QnVmZmVyQXJyYXlTaXplLAorICAgICAgICAgICAga01heFBpcGVsaW5lQ2FwYWNpdHksCisgICAgICAgICAgICBtTmFtZSk7CisjZW5kaWYKKworICAgIG1JbnB1dE1ldEVvcyA9IGZhbHNlOworICAgIG1TeW5jLnN0YXJ0KCk7CisgICAgcmV0dXJuIE9LOworfQorCitzdGF0dXNfdCBDQ29kZWNCdWZmZXJDaGFubmVsOjpyZXF1ZXN0SW5pdGlhbElucHV0QnVmZmVycygpIHsKKyAgICBpZiAobUlucHV0U3VyZmFjZSkgeworICAgICAgICByZXR1cm4gT0s7CisgICAgfQorCisgICAgQzJTdHJlYW1Gb3JtYXRDb25maWc6Om91dHB1dCBvU3RyZWFtRm9ybWF0KDB1KTsKKyAgICBjMl9zdGF0dXNfdCBlcnIgPSBtQ29tcG9uZW50LT5xdWVyeSh7ICZvU3RyZWFtRm9ybWF0IH0sIHt9LCBDMl9ET05UX0JMT0NLLCBudWxscHRyKTsKKyAgICBpZiAoZXJyICE9IEMyX09LKSB7CisgICAgICAgIHJldHVybiBVTktOT1dOX0VSUk9SOworICAgIH0KKyAgICBzdGQ6OnZlY3RvcjxzcDxNZWRpYUNvZGVjQnVmZmVyPj4gdG9CZVF1ZXVlZDsKKyAgICAvLyBUT0RPOiB1c2UgcHJvcGVyIGJ1ZmZlciBkZXB0aCBpbnN0ZWFkIG9mIHRoaXMgcmFuZG9tIHZhbHVlCisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBrTWluSW5wdXRCdWZmZXJBcnJheVNpemU7ICsraSkgeworICAgICAgICBzaXplX3QgaW5kZXg7CisgICAgICAgIHNwPE1lZGlhQ29kZWNCdWZmZXI+IGJ1ZmZlcjsKKyAgICAgICAgeworICAgICAgICAgICAgTXV0ZXhlZDxzdGQ6OnVuaXF1ZV9wdHI8SW5wdXRCdWZmZXJzPj46OkxvY2tlZCBidWZmZXJzKG1JbnB1dEJ1ZmZlcnMpOworICAgICAgICAgICAgaWYgKCEoKmJ1ZmZlcnMpLT5yZXF1ZXN0TmV3QnVmZmVyKCZpbmRleCwgJmJ1ZmZlcikpIHsKKyAgICAgICAgICAgICAgICBpZiAoaSA9PSAwKSB7CisgICAgICAgICAgICAgICAgICAgIEFMT0dXKCJbJXNdIHN0YXJ0OiBjYW5ub3QgYWxsb2NhdGUgbWVtb3J5IGF0IGFsbCIsIG1OYW1lKTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIE5PX01FTU9SWTsKKyAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICBBTE9HVigiWyVzXSBzdGFydDogY2Fubm90IGFsbG9jYXRlIG1lbW9yeSwgb25seSAlenUgYnVmZmVycyBhbGxvY2F0ZWQiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1OYW1lLCBpKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgaWYgKGJ1ZmZlcikgeworICAgICAgICAgICAgTXV0ZXhlZDxzdGQ6Omxpc3Q8c3A8QUJ1ZmZlcj4+Pjo6TG9ja2VkIGNvbmZpZ3MobUZsdXNoZWRDb25maWdzKTsKKyAgICAgICAgICAgIEFMT0dWKCJbJXNdIGlucHV0IGJ1ZmZlciAlenUgYXZhaWxhYmxlIiwgbU5hbWUsIGluZGV4KTsKKyAgICAgICAgICAgIGJvb2wgcG9zdCA9IHRydWU7CisgICAgICAgICAgICBpZiAoIWNvbmZpZ3MtPmVtcHR5KCkpIHsKKyAgICAgICAgICAgICAgICBzcDxBQnVmZmVyPiBjb25maWcgPSBjb25maWdzLT5mcm9udCgpOworICAgICAgICAgICAgICAgIGlmIChidWZmZXItPmNhcGFjaXR5KCkgPj0gY29uZmlnLT5zaXplKCkpIHsKKyAgICAgICAgICAgICAgICAgICAgbWVtY3B5KGJ1ZmZlci0+YmFzZSgpLCBjb25maWctPmRhdGEoKSwgY29uZmlnLT5zaXplKCkpOworICAgICAgICAgICAgICAgICAgICBidWZmZXItPnNldFJhbmdlKDAsIGNvbmZpZy0+c2l6ZSgpKTsKKyAgICAgICAgICAgICAgICAgICAgYnVmZmVyLT5tZXRhKCktPmNsZWFyKCk7CisgICAgICAgICAgICAgICAgICAgIGJ1ZmZlci0+bWV0YSgpLT5zZXRJbnQ2NCgidGltZVVzIiwgMCk7CisgICAgICAgICAgICAgICAgICAgIGJ1ZmZlci0+bWV0YSgpLT5zZXRJbnQzMigiY3NkIiwgMSk7CisgICAgICAgICAgICAgICAgICAgIHBvc3QgPSBmYWxzZTsKKyAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICBBTE9HRCgiWyVzXSBidWZmZXIgY2FwYWNpdHkgdG9vIHNtYWxsIGZvciB0aGUgY29uZmlnICglenUgPCAlenUpIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBtTmFtZSwgYnVmZmVyLT5jYXBhY2l0eSgpLCBjb25maWctPnNpemUoKSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfSBlbHNlIGlmIChvU3RyZWFtRm9ybWF0LnZhbHVlID09IEMyQnVmZmVyRGF0YTo6TElORUFSICYmIGkgPT0gMAorICAgICAgICAgICAgICAgICAgICAmJiBtQ29tcG9uZW50TmFtZS5maW5kKCJjMi5xdGkuIikgPT0gc3RkOjpzdHJpbmc6Om5wb3MpIHsKKyAgICAgICAgICAgICAgICAvLyBXT1JLQVJPVU5EOiBTb21lIGFwcHMgZXhwZWN0IENTRCBhdmFpbGFibGUgd2l0aG91dCBxdWV1ZWluZworICAgICAgICAgICAgICAgIC8vICAgICAgICAgICAgIGFueSBpbnB1dC4gUXVldWUgYW4gZW1wdHkgYnVmZmVyIHRvIGdldCB0aGUgQ1NELgorICAgICAgICAgICAgICAgIGJ1ZmZlci0+c2V0UmFuZ2UoMCwgMCk7CisgICAgICAgICAgICAgICAgYnVmZmVyLT5tZXRhKCktPmNsZWFyKCk7CisgICAgICAgICAgICAgICAgYnVmZmVyLT5tZXRhKCktPnNldEludDY0KCJ0aW1lVXMiLCAwKTsKKyAgICAgICAgICAgICAgICBwb3N0ID0gZmFsc2U7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAobUF2YWlsYWJsZVBpcGVsaW5lQ2FwYWNpdHkuYWxsb2NhdGUoInJlcXVlc3RJbml0aWFsSW5wdXRCdWZmZXJzIikpIHsKKyAgICAgICAgICAgICAgICBpZiAocG9zdCkgeworICAgICAgICAgICAgICAgICAgICBtQ2FsbGJhY2stPm9uSW5wdXRCdWZmZXJBdmFpbGFibGUoaW5kZXgsIGJ1ZmZlcik7CisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgdG9CZVF1ZXVlZC5lbXBsYWNlX2JhY2soYnVmZmVyKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIEFMT0dEKCJbJXNdIHBpcGVsaW5lIGlzIGZ1bGwgd2hpbGUgcmVxdWVzdGluZyAlenUtdGggaW5wdXQgYnVmZmVyIiwKKyAgICAgICAgICAgICAgICAgICAgICAgIG1OYW1lLCBpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKyAgICBmb3IgKGNvbnN0IHNwPE1lZGlhQ29kZWNCdWZmZXI+ICZidWZmZXIgOiB0b0JlUXVldWVkKSB7CisgICAgICAgIGlmIChxdWV1ZUlucHV0QnVmZmVySW50ZXJuYWwoYnVmZmVyKSAhPSBPSykgeworICAgICAgICAgICAgbUF2YWlsYWJsZVBpcGVsaW5lQ2FwYWNpdHkuZnJlZUNvbXBvbmVudFNsb3QoInJlcXVlc3RJbml0aWFsSW5wdXRCdWZmZXJzIik7CisgICAgICAgIH0KKyAgICB9CisgICAgcmV0dXJuIE9LOworfQorCit2b2lkIENDb2RlY0J1ZmZlckNoYW5uZWw6OnN0b3AoKSB7CisgICAgbVN5bmMuc3RvcCgpOworICAgIG1GaXJzdFZhbGlkRnJhbWVJbmRleCA9IG1GcmFtZUluZGV4LmxvYWQoc3RkOjptZW1vcnlfb3JkZXJfcmVsYXhlZCk7CisgICAgaWYgKG1JbnB1dFN1cmZhY2UgIT0gbnVsbHB0cikgeworICAgICAgICBtSW5wdXRTdXJmYWNlLT5kaXNjb25uZWN0KCk7CisgICAgICAgIG1JbnB1dFN1cmZhY2UucmVzZXQoKTsKKyAgICB9Cit9CisKK3ZvaWQgQ0NvZGVjQnVmZmVyQ2hhbm5lbDo6Zmx1c2goY29uc3Qgc3RkOjpsaXN0PHN0ZDo6dW5pcXVlX3B0cjxDMldvcms+PiAmZmx1c2hlZFdvcmspIHsKKyAgICBBTE9HVigiWyVzXSBmbHVzaCIsIG1OYW1lKTsKKyAgICB7CisgICAgICAgIE11dGV4ZWQ8c3RkOjpsaXN0PHNwPEFCdWZmZXI+Pj46OkxvY2tlZCBjb25maWdzKG1GbHVzaGVkQ29uZmlncyk7CisgICAgICAgIGZvciAoY29uc3Qgc3RkOjp1bmlxdWVfcHRyPEMyV29yaz4gJndvcmsgOiBmbHVzaGVkV29yaykgeworICAgICAgICAgICAgaWYgKCEod29yay0+aW5wdXQuZmxhZ3MgJiBDMkZyYW1lRGF0YTo6RkxBR19DT0RFQ19DT05GSUcpKSB7CisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAod29yay0+aW5wdXQuYnVmZmVycy5lbXB0eSgpCisgICAgICAgICAgICAgICAgICAgIHx8IHdvcmstPmlucHV0LmJ1ZmZlcnMuZnJvbnQoKS0+ZGF0YSgpLmxpbmVhckJsb2NrcygpLmVtcHR5KCkpIHsKKyAgICAgICAgICAgICAgICBBTE9HRCgiWyVzXSBubyBsaW5lYXIgY29kZWMgY29uZmlnIGRhdGEgZm91bmQiLCBtTmFtZSk7CisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBDMlJlYWRWaWV3IHZpZXcgPQorICAgICAgICAgICAgICAgICAgICB3b3JrLT5pbnB1dC5idWZmZXJzLmZyb250KCktPmRhdGEoKS5saW5lYXJCbG9ja3MoKS5mcm9udCgpLm1hcCgpLmdldCgpOworICAgICAgICAgICAgaWYgKHZpZXcuZXJyb3IoKSAhPSBDMl9PSykgeworICAgICAgICAgICAgICAgIEFMT0dEKCJbJXNdIGZhaWxlZCB0byBtYXAgZmx1c2hlZCBjb2RlYyBjb25maWcgZGF0YTogJWQiLCBtTmFtZSwgdmlldy5lcnJvcigpKTsKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGNvbmZpZ3MtPnB1c2hfYmFjayhBQnVmZmVyOjpDcmVhdGVBc0NvcHkodmlldy5kYXRhKCksIHZpZXcuY2FwYWNpdHkoKSkpOworICAgICAgICAgICAgQUxPR1YoIlslc10gc3Rhc2hlZCBmbHVzaGVkIGNvZGVjIGNvbmZpZyBkYXRhIChzaXplPSV1KSIsIG1OYW1lLCB2aWV3LmNhcGFjaXR5KCkpOworICAgICAgICB9CisgICAgfQorICAgIHsKKyAgICAgICAgTXV0ZXhlZDxzdGQ6OnVuaXF1ZV9wdHI8SW5wdXRCdWZmZXJzPj46OkxvY2tlZCBidWZmZXJzKG1JbnB1dEJ1ZmZlcnMpOworICAgICAgICAoKmJ1ZmZlcnMpLT5mbHVzaCgpOworICAgIH0KKyAgICB7CisgICAgICAgIE11dGV4ZWQ8c3RkOjp1bmlxdWVfcHRyPE91dHB1dEJ1ZmZlcnM+Pjo6TG9ja2VkIGJ1ZmZlcnMobU91dHB1dEJ1ZmZlcnMpOworICAgICAgICAoKmJ1ZmZlcnMpLT5mbHVzaChmbHVzaGVkV29yayk7CisgICAgfQorfQorCit2b2lkIENDb2RlY0J1ZmZlckNoYW5uZWw6Om9uV29ya0RvbmUoCisgICAgICAgIHN0ZDo6dW5pcXVlX3B0cjxDMldvcms+IHdvcmssIGNvbnN0IHNwPEFNZXNzYWdlPiAmb3V0cHV0Rm9ybWF0LAorICAgICAgICBjb25zdCBDMlN0cmVhbUluaXREYXRhSW5mbzo6b3V0cHV0ICppbml0RGF0YSwKKyAgICAgICAgc2l6ZV90IG51bURpc2NhcmRlZElucHV0QnVmZmVycykgeworICAgIGlmIChoYW5kbGVXb3JrKHN0ZDo6bW92ZSh3b3JrKSwgb3V0cHV0Rm9ybWF0LCBpbml0RGF0YSkpIHsKKyAgICAgICAgbUF2YWlsYWJsZVBpcGVsaW5lQ2FwYWNpdHkuZnJlZUlucHV0U2xvdHMobnVtRGlzY2FyZGVkSW5wdXRCdWZmZXJzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAib25Xb3JrRG9uZSIpOworICAgICAgICBmZWVkSW5wdXRCdWZmZXJJZkF2YWlsYWJsZSgpOworICAgIH0KK30KKwordm9pZCBDQ29kZWNCdWZmZXJDaGFubmVsOjpvbklucHV0QnVmZmVyRG9uZSgKKyAgICAgICAgY29uc3Qgc3RkOjpzaGFyZWRfcHRyPEMyQnVmZmVyPiYgYnVmZmVyKSB7CisgICAgYm9vbCBuZXdJbnB1dFNsb3RBdmFpbGFibGU7CisgICAgeworICAgICAgICBNdXRleGVkPHN0ZDo6dW5pcXVlX3B0cjxJbnB1dEJ1ZmZlcnM+Pjo6TG9ja2VkIGJ1ZmZlcnMobUlucHV0QnVmZmVycyk7CisgICAgICAgIG5ld0lucHV0U2xvdEF2YWlsYWJsZSA9ICgqYnVmZmVycyktPmV4cGlyZUNvbXBvbmVudEJ1ZmZlcihidWZmZXIpOworICAgICAgICBpZiAobmV3SW5wdXRTbG90QXZhaWxhYmxlKSB7CisgICAgICAgICAgICBtQXZhaWxhYmxlUGlwZWxpbmVDYXBhY2l0eS5mcmVlSW5wdXRTbG90cygxLCAib25JbnB1dEJ1ZmZlckRvbmUiKTsKKyAgICAgICAgfQorICAgIH0KKyAgICBpZiAobmV3SW5wdXRTbG90QXZhaWxhYmxlKSB7CisgICAgICAgIGZlZWRJbnB1dEJ1ZmZlcklmQXZhaWxhYmxlKCk7CisgICAgfQorfQorCitib29sIENDb2RlY0J1ZmZlckNoYW5uZWw6OmhhbmRsZVdvcmsoCisgICAgICAgIHN0ZDo6dW5pcXVlX3B0cjxDMldvcms+IHdvcmssCisgICAgICAgIGNvbnN0IHNwPEFNZXNzYWdlPiAmb3V0cHV0Rm9ybWF0LAorICAgICAgICBjb25zdCBDMlN0cmVhbUluaXREYXRhSW5mbzo6b3V0cHV0ICppbml0RGF0YSkgeworICAgIGlmICgod29yay0+aW5wdXQub3JkaW5hbC5mcmFtZUluZGV4IC0gbUZpcnN0VmFsaWRGcmFtZUluZGV4LmxvYWQoKSkucGVlaygpIDwgMCkgeworICAgICAgICAvLyBEaXNjYXJkIGZyYW1lcyBmcm9tIHByZXZpb3VzIGdlbmVyYXRpb24uCisgICAgICAgIEFMT0dEKCJbJXNdIERpc2NhcmQgZnJhbWVzIGZyb20gcHJldmlvdXMgZ2VuZXJhdGlvbi4iLCBtTmFtZSk7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBpZiAod29yay0+d29ya2xldHMuc2l6ZSgpICE9IDF1CisgICAgICAgICAgICB8fCAhd29yay0+d29ya2xldHMuZnJvbnQoKQorICAgICAgICAgICAgfHwgISh3b3JrLT53b3JrbGV0cy5mcm9udCgpLT5vdXRwdXQuZmxhZ3MgJiBDMkZyYW1lRGF0YTo6RkxBR19JTkNPTVBMRVRFKSkgeworICAgICAgICBtQXZhaWxhYmxlUGlwZWxpbmVDYXBhY2l0eS5mcmVlQ29tcG9uZW50U2xvdCgiaGFuZGxlV29yayIpOworICAgIH0KKworICAgIGlmICh3b3JrLT5yZXN1bHQgPT0gQzJfTk9UX0ZPVU5EKSB7CisgICAgICAgIEFMT0dEKCJbJXNdIGZsdXNoZWQgd29yazsgaWdub3JlZC4iLCBtTmFtZSk7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKworICAgIGlmICh3b3JrLT5yZXN1bHQgIT0gQzJfT0spIHsKKyAgICAgICAgQUxPR0QoIlslc10gd29yayBmYWlsZWQgdG8gY29tcGxldGU6ICVkIiwgbU5hbWUsIHdvcmstPnJlc3VsdCk7CisgICAgICAgIG1DQ29kZWNDYWxsYmFjay0+b25FcnJvcih3b3JrLT5yZXN1bHQsIEFDVElPTl9DT0RFX0ZBVEFMKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIC8vIE5PVEU6IE1lZGlhQ29kZWMgdXNhZ2Ugc3VwcG9zZWRseSBoYXZlIG9ubHkgb25lIHdvcmtsZXQKKyAgICBpZiAod29yay0+d29ya2xldHMuc2l6ZSgpICE9IDF1KSB7CisgICAgICAgIEFMT0dJKCJbJXNdIG9uV29ya0RvbmU6IGluY29ycmVjdCBudW1iZXIgb2Ygd29ya2xldHM6ICV6dSIsCisgICAgICAgICAgICAgICAgbU5hbWUsIHdvcmstPndvcmtsZXRzLnNpemUoKSk7CisgICAgICAgIG1DQ29kZWNDYWxsYmFjay0+b25FcnJvcihVTktOT1dOX0VSUk9SLCBBQ1RJT05fQ09ERV9GQVRBTCk7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBjb25zdCBzdGQ6OnVuaXF1ZV9wdHI8QzJXb3JrbGV0PiAmd29ya2xldCA9IHdvcmstPndvcmtsZXRzLmZyb250KCk7CisKKyAgICBzdGQ6OnNoYXJlZF9wdHI8QzJCdWZmZXI+IGJ1ZmZlcjsKKyAgICAvLyBOT1RFOiBNZWRpYUNvZGVjIHVzYWdlIHN1cHBvc2VkbHkgaGF2ZSBvbmx5IG9uZSBvdXRwdXQgc3RyZWFtLgorICAgIGlmICh3b3JrbGV0LT5vdXRwdXQuYnVmZmVycy5zaXplKCkgPiAxdSkgeworICAgICAgICBBTE9HSSgiWyVzXSBvbldvcmtEb25lOiBpbmNvcnJlY3QgbnVtYmVyIG9mIG91dHB1dCBidWZmZXJzOiAlenUiLAorICAgICAgICAgICAgICAgIG1OYW1lLCB3b3JrbGV0LT5vdXRwdXQuYnVmZmVycy5zaXplKCkpOworICAgICAgICBtQ0NvZGVjQ2FsbGJhY2stPm9uRXJyb3IoVU5LTk9XTl9FUlJPUiwgQUNUSU9OX0NPREVfRkFUQUwpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfSBlbHNlIGlmICh3b3JrbGV0LT5vdXRwdXQuYnVmZmVycy5zaXplKCkgPT0gMXUpIHsKKyAgICAgICAgYnVmZmVyID0gd29ya2xldC0+b3V0cHV0LmJ1ZmZlcnNbMF07CisgICAgICAgIGlmICghYnVmZmVyKSB7CisgICAgICAgICAgICBBTE9HRCgiWyVzXSBvbldvcmtEb25lOiBudWxscHRyIGZvdW5kIGluIGJ1ZmZlcnM7IGlnbm9yZWQuIiwgbU5hbWUpOworICAgICAgICB9CisgICAgfQorCisgICAgd2hpbGUgKCF3b3JrbGV0LT5vdXRwdXQuY29uZmlnVXBkYXRlLmVtcHR5KCkpIHsKKyAgICAgICAgc3RkOjp1bmlxdWVfcHRyPEMyUGFyYW0+IHBhcmFtOworICAgICAgICB3b3JrbGV0LT5vdXRwdXQuY29uZmlnVXBkYXRlLmJhY2soKS5zd2FwKHBhcmFtKTsKKyAgICAgICAgd29ya2xldC0+b3V0cHV0LmNvbmZpZ1VwZGF0ZS5wb3BfYmFjaygpOworICAgICAgICBzd2l0Y2ggKHBhcmFtLT5jb3JlSW5kZXgoKS5jb3JlSW5kZXgoKSkgeworICAgICAgICAgICAgY2FzZSBDMlBvcnRSZW9yZGVyQnVmZmVyRGVwdGhUdW5pbmc6OkNPUkVfSU5ERVg6IHsKKyAgICAgICAgICAgICAgICBDMlBvcnRSZW9yZGVyQnVmZmVyRGVwdGhUdW5pbmc6Om91dHB1dCByZW9yZGVyRGVwdGg7CisgICAgICAgICAgICAgICAgaWYgKHJlb3JkZXJEZXB0aC51cGRhdGVGcm9tKCpwYXJhbSkpIHsKKyAgICAgICAgICAgICAgICAgICAgbVJlb3JkZXJTdGFzaC5sb2NrKCktPnNldERlcHRoKHJlb3JkZXJEZXB0aC52YWx1ZSk7CisgICAgICAgICAgICAgICAgICAgIEFMT0dWKCJbJXNdIG9uV29ya0RvbmU6IHVwZGF0ZWQgcmVvcmRlciBkZXB0aCB0byAldSIsCisgICAgICAgICAgICAgICAgICAgICAgICAgIG1OYW1lLCByZW9yZGVyRGVwdGgudmFsdWUpOworICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIEFMT0dEKCJbJXNdIG9uV29ya0RvbmU6IGZhaWxlZCB0byByZWFkIHJlb3JkZXIgZGVwdGgiLCBtTmFtZSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICAgICAgY2FzZSBDMlBvcnRSZW9yZGVyS2V5U2V0dGluZzo6Q09SRV9JTkRFWDogeworICAgICAgICAgICAgICAgIEMyUG9ydFJlb3JkZXJLZXlTZXR0aW5nOjpvdXRwdXQgcmVvcmRlcktleTsKKyAgICAgICAgICAgICAgICBpZiAocmVvcmRlcktleS51cGRhdGVGcm9tKCpwYXJhbSkpIHsKKyAgICAgICAgICAgICAgICAgICAgbVJlb3JkZXJTdGFzaC5sb2NrKCktPnNldEtleShyZW9yZGVyS2V5LnZhbHVlKTsKKyAgICAgICAgICAgICAgICAgICAgQUxPR1YoIlslc10gb25Xb3JrRG9uZTogdXBkYXRlZCByZW9yZGVyIGtleSB0byAldSIsCisgICAgICAgICAgICAgICAgICAgICAgICAgIG1OYW1lLCByZW9yZGVyS2V5LnZhbHVlKTsKKyAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICBBTE9HRCgiWyVzXSBvbldvcmtEb25lOiBmYWlsZWQgdG8gcmVhZCByZW9yZGVyIGtleSIsIG1OYW1lKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgIEFMT0dWKCJbJXNdIG9uV29ya0RvbmU6IHVucmVjb2duaXplZCBjb25maWcgdXBkYXRlICglMDhYKSIsCisgICAgICAgICAgICAgICAgICAgICAgbU5hbWUsIHBhcmFtLT5pbmRleCgpKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgIH0KKworICAgIGlmIChvdXRwdXRGb3JtYXQgIT0gbnVsbHB0cikgeworICAgICAgICBNdXRleGVkPHN0ZDo6dW5pcXVlX3B0cjxPdXRwdXRCdWZmZXJzPj46OkxvY2tlZCBidWZmZXJzKG1PdXRwdXRCdWZmZXJzKTsKKyAgICAgICAgQUxPR0QoIlslc10gb25Xb3JrRG9uZTogb3V0cHV0IGZvcm1hdCBjaGFuZ2VkIHRvICVzIiwKKyAgICAgICAgICAgICAgICBtTmFtZSwgb3V0cHV0Rm9ybWF0LT5kZWJ1Z1N0cmluZygpLmNfc3RyKCkpOworICAgICAgICAoKmJ1ZmZlcnMpLT5zZXRGb3JtYXQob3V0cHV0Rm9ybWF0KTsKKworICAgICAgICBBU3RyaW5nIG1lZGlhVHlwZTsKKyAgICAgICAgaWYgKG91dHB1dEZvcm1hdC0+ZmluZFN0cmluZyhLRVlfTUlNRSwgJm1lZGlhVHlwZSkKKyAgICAgICAgICAgICAgICAmJiBtZWRpYVR5cGUgPT0gTUlNRVRZUEVfQVVESU9fUkFXKSB7CisgICAgICAgICAgICBpbnQzMl90IGNoYW5uZWxDb3VudDsKKyAgICAgICAgICAgIGludDMyX3Qgc2FtcGxlUmF0ZTsKKyAgICAgICAgICAgIGlmIChvdXRwdXRGb3JtYXQtPmZpbmRJbnQzMihLRVlfQ0hBTk5FTF9DT1VOVCwgJmNoYW5uZWxDb3VudCkKKyAgICAgICAgICAgICAgICAgICAgJiYgb3V0cHV0Rm9ybWF0LT5maW5kSW50MzIoS0VZX1NBTVBMRV9SQVRFLCAmc2FtcGxlUmF0ZSkpIHsKKyAgICAgICAgICAgICAgICAoKmJ1ZmZlcnMpLT51cGRhdGVTa2lwQ3V0QnVmZmVyKHNhbXBsZVJhdGUsIGNoYW5uZWxDb3VudCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKKyAgICBpbnQzMl90IGZsYWdzID0gMDsKKyAgICBpZiAod29ya2xldC0+b3V0cHV0LmZsYWdzICYgQzJGcmFtZURhdGE6OkZMQUdfRU5EX09GX1NUUkVBTSkgeworICAgICAgICBmbGFncyB8PSBNZWRpYUNvZGVjOjpCVUZGRVJfRkxBR19FT1M7CisgICAgICAgIEFMT0dWKCJbJXNdIG9uV29ya0RvbmU6IG91dHB1dCBFT1MiLCBtTmFtZSk7CisgICAgfQorCisgICAgc3A8TWVkaWFDb2RlY0J1ZmZlcj4gb3V0QnVmZmVyOworICAgIHNpemVfdCBpbmRleDsKKworICAgIC8vIFdPUktBUk9VTkQ6IGFkanVzdCBvdXRwdXQgdGltZXN0YW1wIGJhc2VkIG9uIGNsaWVudCBpbnB1dCB0aW1lc3RhbXAgYW5kIGNvZGVjCisgICAgLy8gaW5wdXQgdGltZXN0YW1wLiBDb2RlYyBvdXRwdXQgdGltZXN0YW1wIChpbiB0aGUgdGltZXN0YW1wIGZpZWxkKSBzaGFsbCBjb3JyZXNwb25kIHRvCisgICAgLy8gdGhlIGNvZGVjIGlucHV0IHRpbWVzdGFtcCwgYnV0IGNsaWVudCBvdXRwdXQgdGltZXN0YW1wIHNob3VsZCAocmVwb3J0ZWQgaW4gdGltZVVzKQorICAgIC8vIHNoYWxsIGNvcnJlc3BvbmQgdG8gdGhlIGNsaWVudCBpbnB1dCB0aW1lc2FtcCAoaW4gY3VzdG9tT3JkaW5hbCkuIEJ5IHVzaW5nIHRoZQorICAgIC8vIGRlbHRhIGJldHdlZW4gdGhlIHR3bywgdGhpcyBhbGxvd3MgZm9yIHNvbWUgdGltZXN0YW1wIGRldmlhdGlvbiAtIGUuZy4gaWYgb25lIGlucHV0CisgICAgLy8gcHJvZHVjZXMgbXVsdGlwbGUgb3V0cHV0LgorICAgIGMyX2NudHI2NF90IHRpbWVzdGFtcCA9CisgICAgICAgIHdvcmtsZXQtPm91dHB1dC5vcmRpbmFsLnRpbWVzdGFtcCArIHdvcmstPmlucHV0Lm9yZGluYWwuY3VzdG9tT3JkaW5hbAorICAgICAgICAgICAgICAgIC0gd29yay0+aW5wdXQub3JkaW5hbC50aW1lc3RhbXA7CisgICAgQUxPR1YoIlslc10gb25Xb3JrRG9uZTogaW5wdXQgJWxsZCwgY29kZWMgJWxsZCA9PiBvdXRwdXQgJWxsZCA9PiAlbGxkIiwKKyAgICAgICAgICBtTmFtZSwKKyAgICAgICAgICB3b3JrLT5pbnB1dC5vcmRpbmFsLmN1c3RvbU9yZGluYWwucGVla2xsKCksCisgICAgICAgICAgd29yay0+aW5wdXQub3JkaW5hbC50aW1lc3RhbXAucGVla2xsKCksCisgICAgICAgICAgd29ya2xldC0+b3V0cHV0Lm9yZGluYWwudGltZXN0YW1wLnBlZWtsbCgpLAorICAgICAgICAgIHRpbWVzdGFtcC5wZWVrbGwoKSk7CisKKyAgICBpZiAoaW5pdERhdGEgIT0gbnVsbHB0cikgeworICAgICAgICBNdXRleGVkPHN0ZDo6dW5pcXVlX3B0cjxPdXRwdXRCdWZmZXJzPj46OkxvY2tlZCBidWZmZXJzKG1PdXRwdXRCdWZmZXJzKTsKKyAgICAgICAgaWYgKCgqYnVmZmVycyktPnJlZ2lzdGVyQ3NkKGluaXREYXRhLCAmaW5kZXgsICZvdXRCdWZmZXIpID09IE9LKSB7CisgICAgICAgICAgICBvdXRCdWZmZXItPm1ldGEoKS0+c2V0SW50NjQoInRpbWVVcyIsIHRpbWVzdGFtcC5wZWVrKCkpOworICAgICAgICAgICAgb3V0QnVmZmVyLT5tZXRhKCktPnNldEludDMyKCJmbGFncyIsIE1lZGlhQ29kZWM6OkJVRkZFUl9GTEFHX0NPREVDQ09ORklHKTsKKyAgICAgICAgICAgIEFMT0dWKCJbJXNdIG9uV29ya0RvbmU6IGNzZCBpbmRleCA9ICV6dSBbJXBdIiwgbU5hbWUsIGluZGV4LCBvdXRCdWZmZXIuZ2V0KCkpOworCisgICAgICAgICAgICBidWZmZXJzLnVubG9jaygpOworICAgICAgICAgICAgbUNhbGxiYWNrLT5vbk91dHB1dEJ1ZmZlckF2YWlsYWJsZShpbmRleCwgb3V0QnVmZmVyKTsKKyAgICAgICAgICAgIGJ1ZmZlcnMubG9jaygpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgQUxPR0QoIlslc10gb25Xb3JrRG9uZTogdW5hYmxlIHRvIHJlZ2lzdGVyIGNzZCIsIG1OYW1lKTsKKyAgICAgICAgICAgIGJ1ZmZlcnMudW5sb2NrKCk7CisgICAgICAgICAgICBtQ0NvZGVjQ2FsbGJhY2stPm9uRXJyb3IoVU5LTk9XTl9FUlJPUiwgQUNUSU9OX0NPREVfRkFUQUwpOworICAgICAgICAgICAgYnVmZmVycy5sb2NrKCk7CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBpZiAoIWJ1ZmZlciAmJiAhZmxhZ3MpIHsKKyAgICAgICAgQUxPR1YoIlslc10gb25Xb3JrRG9uZTogTm90IHJlcG9ydGluZyBvdXRwdXQgYnVmZmVyICglbGxkKSIsCisgICAgICAgICAgICAgIG1OYW1lLCB3b3JrLT5pbnB1dC5vcmRpbmFsLmZyYW1lSW5kZXgucGVla3VsbCgpKTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorCisgICAgaWYgKGJ1ZmZlcikgeworICAgICAgICBmb3IgKGNvbnN0IHN0ZDo6c2hhcmVkX3B0cjxjb25zdCBDMkluZm8+ICZpbmZvIDogYnVmZmVyLT5pbmZvKCkpIHsKKyAgICAgICAgICAgIC8vIFRPRE86IHByb3Blcmx5IHRyYW5zbGF0ZSB0aGVzZSB0byBtZXRhZGF0YQorICAgICAgICAgICAgc3dpdGNoIChpbmZvLT5jb3JlSW5kZXgoKS5jb3JlSW5kZXgoKSkgeworICAgICAgICAgICAgICAgIGNhc2UgQzJTdHJlYW1QaWN0dXJlVHlwZU1hc2tJbmZvOjpDT1JFX0lOREVYOgorICAgICAgICAgICAgICAgICAgICBpZiAoKChDMlN0cmVhbVBpY3R1cmVUeXBlTWFza0luZm8gKilpbmZvLmdldCgpKS0+dmFsdWUgJiBDMlBpY3R1cmVUeXBlS2V5RnJhbWUpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGZsYWdzIHw9IE1lZGlhQ29kZWM6OkJVRkZFUl9GTEFHX1NZTkNGUkFNRTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKworICAgIHsKKyAgICAgICAgTXV0ZXhlZDxSZW9yZGVyU3Rhc2g+OjpMb2NrZWQgcmVvcmRlcihtUmVvcmRlclN0YXNoKTsKKyAgICAgICAgcmVvcmRlci0+ZW1wbGFjZShidWZmZXIsIHRpbWVzdGFtcC5wZWVrKCksIGZsYWdzLCB3b3JrbGV0LT5vdXRwdXQub3JkaW5hbCk7CisgICAgICAgIGlmIChmbGFncyAmIE1lZGlhQ29kZWM6OkJVRkZFUl9GTEFHX0VPUykgeworICAgICAgICAgICAgLy8gRmx1c2ggcmVvcmRlciBzdGFzaAorICAgICAgICAgICAgcmVvcmRlci0+c2V0RGVwdGgoMCk7CisgICAgICAgIH0KKyAgICB9CisgICAgc2VuZE91dHB1dEJ1ZmZlcnMoKTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKwordm9pZCBDQ29kZWNCdWZmZXJDaGFubmVsOjpzZW5kT3V0cHV0QnVmZmVycygpIHsKKyAgICBSZW9yZGVyU3Rhc2g6OkVudHJ5IGVudHJ5OworICAgIHNwPE1lZGlhQ29kZWNCdWZmZXI+IG91dEJ1ZmZlcjsKKyAgICBzaXplX3QgaW5kZXg7CisKKyAgICB3aGlsZSAodHJ1ZSkgeworICAgICAgICB7CisgICAgICAgICAgICBNdXRleGVkPFJlb3JkZXJTdGFzaD46OkxvY2tlZCByZW9yZGVyKG1SZW9yZGVyU3Rhc2gpOworICAgICAgICAgICAgaWYgKCFyZW9yZGVyLT5oYXNQZW5kaW5nKCkpIHsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmICghcmVvcmRlci0+cG9wKCZlbnRyeSkpIHsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBNdXRleGVkPHN0ZDo6dW5pcXVlX3B0cjxPdXRwdXRCdWZmZXJzPj46OkxvY2tlZCBidWZmZXJzKG1PdXRwdXRCdWZmZXJzKTsKKyAgICAgICAgc3RhdHVzX3QgZXJyID0gKCpidWZmZXJzKS0+cmVnaXN0ZXJCdWZmZXIoZW50cnkuYnVmZmVyLCAmaW5kZXgsICZvdXRCdWZmZXIpOworICAgICAgICBpZiAoZXJyICE9IE9LKSB7CisgICAgICAgICAgICBpZiAoZXJyICE9IFdPVUxEX0JMT0NLKSB7CisgICAgICAgICAgICAgICAgT3V0cHV0QnVmZmVyc0FycmF5ICphcnJheSA9IChPdXRwdXRCdWZmZXJzQXJyYXkgKilidWZmZXJzLT5nZXQoKTsKKyAgICAgICAgICAgICAgICBhcnJheS0+cmVhbGxvYyhlbnRyeS5idWZmZXIpOworICAgICAgICAgICAgICAgIG1DQ29kZWNDYWxsYmFjay0+b25PdXRwdXRCdWZmZXJzQ2hhbmdlZCgpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgYnVmZmVycy51bmxvY2soKTsKKyAgICAgICAgICAgIEFMT0dWKCJbJXNdIHNlbmRPdXRwdXRCdWZmZXJzOiB1bmFibGUgdG8gcmVnaXN0ZXIgb3V0cHV0IGJ1ZmZlciIsIG1OYW1lKTsKKyAgICAgICAgICAgIG1SZW9yZGVyU3Rhc2gubG9jaygpLT5kZWZlcihlbnRyeSk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgYnVmZmVycy51bmxvY2soKTsKKworICAgICAgICBvdXRCdWZmZXItPm1ldGEoKS0+c2V0SW50NjQoInRpbWVVcyIsIGVudHJ5LnRpbWVzdGFtcCk7CisgICAgICAgIG91dEJ1ZmZlci0+bWV0YSgpLT5zZXRJbnQzMigiZmxhZ3MiLCBlbnRyeS5mbGFncyk7CisgICAgICAgIEFMT0dWKCJbJXNdIHNlbmRPdXRwdXRCdWZmZXJzOiBvdXQgYnVmZmVyIGluZGV4ID0gJXp1IFslcF0gPT4gJXAgKyAlenUiLAorICAgICAgICAgICAgICAgIG1OYW1lLCBpbmRleCwgb3V0QnVmZmVyLmdldCgpLCBvdXRCdWZmZXItPmRhdGEoKSwgb3V0QnVmZmVyLT5zaXplKCkpOworICAgICAgICBtQ2FsbGJhY2stPm9uT3V0cHV0QnVmZmVyQXZhaWxhYmxlKGluZGV4LCBvdXRCdWZmZXIpOworICAgIH0KK30KKworc3RhdHVzX3QgQ0NvZGVjQnVmZmVyQ2hhbm5lbDo6c2V0U3VyZmFjZShjb25zdCBzcDxTdXJmYWNlPiAmbmV3U3VyZmFjZSkgeworICAgIHN0YXRpYyBzdGQ6OmF0b21pY191aW50MzJfdCBzdXJmYWNlR2VuZXJhdGlvbnswfTsKKyAgICB1aW50MzJfdCBnZW5lcmF0aW9uID0gKGdldHBpZCgpIDw8IDEwKSB8CisgICAgICAgICAgICAoKHN1cmZhY2VHZW5lcmF0aW9uLmZldGNoX2FkZCgxLCBzdGQ6Om1lbW9yeV9vcmRlcl9yZWxheGVkKSArIDEpCisgICAgICAgICAgICAgICAgJiAoKDEgPDwgMTApIC0gMSkpOworCisgICAgc3A8SUdyYXBoaWNCdWZmZXJQcm9kdWNlcj4gcHJvZHVjZXI7CisgICAgaWYgKG5ld1N1cmZhY2UpIHsKKyAgICAgICAgbmV3U3VyZmFjZS0+c2V0U2NhbGluZ01vZGUoTkFUSVZFX1dJTkRPV19TQ0FMSU5HX01PREVfU0NBTEVfVE9fV0lORE9XKTsKKyAgICAgICAgbmV3U3VyZmFjZS0+c2V0TWF4RGVxdWV1ZWRCdWZmZXJDb3VudChrTWluT3V0cHV0QnVmZmVyQXJyYXlTaXplKTsKKyAgICAgICAgcHJvZHVjZXIgPSBuZXdTdXJmYWNlLT5nZXRJR3JhcGhpY0J1ZmZlclByb2R1Y2VyKCk7CisgICAgICAgIHByb2R1Y2VyLT5zZXRHZW5lcmF0aW9uTnVtYmVyKGdlbmVyYXRpb24pOworICAgIH0gZWxzZSB7CisgICAgICAgIEFMT0dFKCJbJXNdIHNldHRpbmcgb3V0cHV0IHN1cmZhY2UgdG8gbnVsbCIsIG1OYW1lKTsKKyAgICAgICAgcmV0dXJuIElOVkFMSURfT1BFUkFUSU9OOworICAgIH0KKworICAgIHN0ZDo6c2hhcmVkX3B0cjxDb2RlYzJDbGllbnQ6OkNvbmZpZ3VyYWJsZT4gb3V0cHV0UG9vbEludGY7CisgICAgQzJCbG9ja1Bvb2w6OmxvY2FsX2lkX3Qgb3V0cHV0UG9vbElkOworICAgIHsKKyAgICAgICAgTXV0ZXhlZDxCbG9ja1Bvb2xzPjo6TG9ja2VkIHBvb2xzKG1CbG9ja1Bvb2xzKTsKKyAgICAgICAgb3V0cHV0UG9vbElkID0gcG9vbHMtPm91dHB1dFBvb2xJZDsKKyAgICAgICAgb3V0cHV0UG9vbEludGYgPSBwb29scy0+b3V0cHV0UG9vbEludGY7CisgICAgfQorCisgICAgaWYgKG91dHB1dFBvb2xJbnRmKSB7CisgICAgICAgIGlmIChtQ29tcG9uZW50LT5zZXRPdXRwdXRTdXJmYWNlKAorICAgICAgICAgICAgICAgIG91dHB1dFBvb2xJZCwKKyAgICAgICAgICAgICAgICBwcm9kdWNlciwKKyAgICAgICAgICAgICAgICBnZW5lcmF0aW9uKSAhPSBDMl9PSykgeworICAgICAgICAgICAgQUxPR0koIlslc10gc2V0U3VyZmFjZTogY29tcG9uZW50IHNldE91dHB1dFN1cmZhY2UgZmFpbGVkIiwgbU5hbWUpOworICAgICAgICAgICAgcmV0dXJuIElOVkFMSURfT1BFUkFUSU9OOworICAgICAgICB9CisgICAgfQorCisgICAgeworICAgICAgICBNdXRleGVkPE91dHB1dFN1cmZhY2U+OjpMb2NrZWQgb3V0cHV0KG1PdXRwdXRTdXJmYWNlKTsKKyAgICAgICAgb3V0cHV0LT5zdXJmYWNlID0gbmV3U3VyZmFjZTsKKyAgICAgICAgb3V0cHV0LT5nZW5lcmF0aW9uID0gZ2VuZXJhdGlvbjsKKyAgICB9CisKKyAgICByZXR1cm4gT0s7Cit9CisKK3ZvaWQgQ0NvZGVjQnVmZmVyQ2hhbm5lbDo6c2V0TWV0YU1vZGUoTWV0YU1vZGUgbW9kZSkgeworICAgIG1NZXRhTW9kZSA9IG1vZGU7Cit9CisKK3N0YXR1c190IHRvU3RhdHVzVChjMl9zdGF0dXNfdCBjMnMsIGMyX29wZXJhdGlvbl90IGMyb3ApIHsKKyAgICAvLyBDMl9PSyBpcyBhbHdheXMgdHJhbnNsYXRlZCB0byBPSy4KKyAgICBpZiAoYzJzID09IEMyX09LKSB7CisgICAgICAgIHJldHVybiBPSzsKKyAgICB9CisKKyAgICAvLyBPcGVyYXRpb24tZGVwZW5kZW50IHRyYW5zbGF0aW9uCisgICAgLy8gVE9ETzogQWRkIGFzIG5lY2Vzc2FyeQorICAgIHN3aXRjaCAoYzJvcCkgeworICAgIGNhc2UgQzJfT1BFUkFUSU9OX0NvbXBvbmVudF9zdGFydDoKKyAgICAgICAgc3dpdGNoIChjMnMpIHsKKyAgICAgICAgY2FzZSBDMl9OT19NRU1PUlk6CisgICAgICAgICAgICByZXR1cm4gTk9fTUVNT1JZOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgcmV0dXJuIFVOS05PV05fRVJST1I7CisgICAgICAgIH0KKyAgICBkZWZhdWx0OgorICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICAvLyBCYWNrdXAgb3BlcmF0aW9uLWFnbm9zdGljIHRyYW5zbGF0aW9uCisgICAgc3dpdGNoIChjMnMpIHsKKyAgICBjYXNlIEMyX0JBRF9JTkRFWDoKKyAgICAgICAgcmV0dXJuIEJBRF9JTkRFWDsKKyAgICBjYXNlIEMyX0JBRF9WQUxVRToKKyAgICAgICAgcmV0dXJuIEJBRF9WQUxVRTsKKyAgICBjYXNlIEMyX0JMT0NLSU5HOgorICAgICAgICByZXR1cm4gV09VTERfQkxPQ0s7CisgICAgY2FzZSBDMl9EVVBMSUNBVEU6CisgICAgICAgIHJldHVybiBBTFJFQURZX0VYSVNUUzsKKyAgICBjYXNlIEMyX05PX0lOSVQ6CisgICAgICAgIHJldHVybiBOT19JTklUOworICAgIGNhc2UgQzJfTk9fTUVNT1JZOgorICAgICAgICByZXR1cm4gTk9fTUVNT1JZOworICAgIGNhc2UgQzJfTk9UX0ZPVU5EOgorICAgICAgICByZXR1cm4gTkFNRV9OT1RfRk9VTkQ7CisgICAgY2FzZSBDMl9USU1FRF9PVVQ6CisgICAgICAgIHJldHVybiBUSU1FRF9PVVQ7CisgICAgY2FzZSBDMl9CQURfU1RBVEU6CisgICAgY2FzZSBDMl9DQU5DRUxFRDoKKyAgICBjYXNlIEMyX0NBTk5PVF9ETzoKKyAgICBjYXNlIEMyX0NPUlJVUFRFRDoKKyAgICBjYXNlIEMyX09NSVRURUQ6CisgICAgY2FzZSBDMl9SRUZVU0VEOgorICAgICAgICByZXR1cm4gVU5LTk9XTl9FUlJPUjsKKyAgICBkZWZhdWx0OgorICAgICAgICByZXR1cm4gLXN0YXRpY19jYXN0PHN0YXR1c190PihjMnMpOworICAgIH0KK30KKworfSAgLy8gbmFtZXNwYWNlIGFuZHJvaWQKZGlmZiAtLWdpdCBhL21lZGlhL2NvZGVjMi9zZnBsdWdpbi9DQ29kZWNCdWZmZXJDaGFubmVsLmggYi9tZWRpYS9jb2RlYzIvc2ZwbHVnaW4vQ0NvZGVjQnVmZmVyQ2hhbm5lbC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQzMWJhYWEKLS0tIC9kZXYvbnVsbAorKysgYi9tZWRpYS9jb2RlYzIvc2ZwbHVnaW4vQ0NvZGVjQnVmZmVyQ2hhbm5lbC5oCkBAIC0wLDAgKzEsNDE3IEBACisvKgorICogQ29weXJpZ2h0IDIwMTcsIFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KKworI2lmbmRlZiBDQ09ERUNfQlVGRkVSX0NIQU5ORUxfSF8KKworI2RlZmluZSBDQ09ERUNfQlVGRkVSX0NIQU5ORUxfSF8KKworI2luY2x1ZGUgPG1hcD4KKyNpbmNsdWRlIDxtZW1vcnk+CisjaW5jbHVkZSA8dmVjdG9yPgorCisjaW5jbHVkZSA8QzJCdWZmZXIuaD4KKyNpbmNsdWRlIDxDMkNvbXBvbmVudC5oPgorI2luY2x1ZGUgPENvZGVjMk1hcHBlci5oPgorCisjaW5jbHVkZSA8Y29kZWMyL2hpZGwvY2xpZW50Lmg+CisjaW5jbHVkZSA8bWVkaWEvc3RhZ2VmcmlnaHQvYnFoZWxwZXIvR3JhcGhpY0J1ZmZlclNvdXJjZS5oPgorI2luY2x1ZGUgPG1lZGlhL3N0YWdlZnJpZ2h0L2NvZGVjMi8xLjAvSW5wdXRTdXJmYWNlLmg+CisjaW5jbHVkZSA8bWVkaWEvc3RhZ2VmcmlnaHQvZm91bmRhdGlvbi9NdXRleGVkLmg+CisjaW5jbHVkZSA8bWVkaWEvc3RhZ2VmcmlnaHQvQ29kZWNCYXNlLmg+CisjaW5jbHVkZSA8bWVkaWEvSUNyeXB0by5oPgorCisjaW5jbHVkZSAiSW5wdXRTdXJmYWNlV3JhcHBlci5oIgorCituYW1lc3BhY2UgYW5kcm9pZCB7CisKK2NsYXNzIENDb2RlY0NhbGxiYWNrIHsKK3B1YmxpYzoKKyAgICB2aXJ0dWFsIH5DQ29kZWNDYWxsYmFjaygpID0gZGVmYXVsdDsKKyAgICB2aXJ0dWFsIHZvaWQgb25FcnJvcihzdGF0dXNfdCBlcnIsIGVudW0gQWN0aW9uQ29kZSBhY3Rpb25Db2RlKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIG9uT3V0cHV0RnJhbWVzUmVuZGVyZWQoaW50NjRfdCBtZWRpYVRpbWVVcywgbnNlY3NfdCByZW5kZXJUaW1lTnMpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgb25Xb3JrUXVldWVkKGJvb2wgZW9zKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIG9uT3V0cHV0QnVmZmVyc0NoYW5nZWQoKSA9IDA7Cit9OworCisvKioKKyAqIEJ1ZmZlckNoYW5uZWxCYXNlIGltcGxlbWVudGF0aW9uIGZvciBDQ29kZWMuCisgKi8KK2NsYXNzIENDb2RlY0J1ZmZlckNoYW5uZWwKKyAgICA6IHB1YmxpYyBCdWZmZXJDaGFubmVsQmFzZSwgcHVibGljIHN0ZDo6ZW5hYmxlX3NoYXJlZF9mcm9tX3RoaXM8Q0NvZGVjQnVmZmVyQ2hhbm5lbD4geworcHVibGljOgorICAgIGV4cGxpY2l0IENDb2RlY0J1ZmZlckNoYW5uZWwoY29uc3Qgc3RkOjpzaGFyZWRfcHRyPENDb2RlY0NhbGxiYWNrPiAmY2FsbGJhY2spOworICAgIHZpcnR1YWwgfkNDb2RlY0J1ZmZlckNoYW5uZWwoKTsKKworICAgIC8vIEJ1ZmZlckNoYW5uZWxCYXNlIGludGVyZmFjZQorICAgIHZpcnR1YWwgc3RhdHVzX3QgcXVldWVJbnB1dEJ1ZmZlcihjb25zdCBzcDxNZWRpYUNvZGVjQnVmZmVyPiAmYnVmZmVyKSBvdmVycmlkZTsKKyAgICB2aXJ0dWFsIHN0YXR1c190IHF1ZXVlU2VjdXJlSW5wdXRCdWZmZXIoCisgICAgICAgICAgICBjb25zdCBzcDxNZWRpYUNvZGVjQnVmZmVyPiAmYnVmZmVyLAorICAgICAgICAgICAgYm9vbCBzZWN1cmUsCisgICAgICAgICAgICBjb25zdCB1aW50OF90ICprZXksCisgICAgICAgICAgICBjb25zdCB1aW50OF90ICppdiwKKyAgICAgICAgICAgIENyeXB0b1BsdWdpbjo6TW9kZSBtb2RlLAorICAgICAgICAgICAgQ3J5cHRvUGx1Z2luOjpQYXR0ZXJuIHBhdHRlcm4sCisgICAgICAgICAgICBjb25zdCBDcnlwdG9QbHVnaW46OlN1YlNhbXBsZSAqc3ViU2FtcGxlcywKKyAgICAgICAgICAgIHNpemVfdCBudW1TdWJTYW1wbGVzLAorICAgICAgICAgICAgQVN0cmluZyAqZXJyb3JEZXRhaWxNc2cpIG92ZXJyaWRlOworICAgIHZpcnR1YWwgc3RhdHVzX3QgcmVuZGVyT3V0cHV0QnVmZmVyKAorICAgICAgICAgICAgY29uc3Qgc3A8TWVkaWFDb2RlY0J1ZmZlcj4gJmJ1ZmZlciwgaW50NjRfdCB0aW1lc3RhbXBOcykgb3ZlcnJpZGU7CisgICAgdmlydHVhbCBzdGF0dXNfdCBkaXNjYXJkQnVmZmVyKGNvbnN0IHNwPE1lZGlhQ29kZWNCdWZmZXI+ICZidWZmZXIpIG92ZXJyaWRlOworICAgIHZpcnR1YWwgdm9pZCBnZXRJbnB1dEJ1ZmZlckFycmF5KFZlY3RvcjxzcDxNZWRpYUNvZGVjQnVmZmVyPj4gKmFycmF5KSBvdmVycmlkZTsKKyAgICB2aXJ0dWFsIHZvaWQgZ2V0T3V0cHV0QnVmZmVyQXJyYXkoVmVjdG9yPHNwPE1lZGlhQ29kZWNCdWZmZXI+PiAqYXJyYXkpIG92ZXJyaWRlOworCisgICAgLy8gTWV0aG9kcyBiZWxvdyBhcmUgaW50ZXJmYWNlIGZvciBDQ29kZWMgdG8gdXNlLgorCisgICAgLyoqCisgICAgICogU2V0IHRoZSBjb21wb25lbnQgb2JqZWN0IGZvciBidWZmZXIgcHJvY2Vzc2luZy4KKyAgICAgKi8KKyAgICB2b2lkIHNldENvbXBvbmVudChjb25zdCBzdGQ6OnNoYXJlZF9wdHI8Q29kZWMyQ2xpZW50OjpDb21wb25lbnQ+ICZjb21wb25lbnQpOworCisgICAgLyoqCisgICAgICogU2V0IG91dHB1dCBncmFwaGljIHN1cmZhY2UgZm9yIHJlbmRlcmluZy4KKyAgICAgKi8KKyAgICBzdGF0dXNfdCBzZXRTdXJmYWNlKGNvbnN0IHNwPFN1cmZhY2U+ICZzdXJmYWNlKTsKKworICAgIC8qKgorICAgICAqIFNldCBHcmFwaGljQnVmZmVyU291cmNlIG9iamVjdCBmcm9tIHdoaWNoIHRoZSBjb21wb25lbnQgZXh0cmFjdHMgaW5wdXQKKyAgICAgKiBidWZmZXJzLgorICAgICAqLworICAgIHN0YXR1c190IHNldElucHV0U3VyZmFjZShjb25zdCBzdGQ6OnNoYXJlZF9wdHI8SW5wdXRTdXJmYWNlV3JhcHBlcj4gJnN1cmZhY2UpOworCisgICAgLyoqCisgICAgICogU2lnbmFsIEVPUyB0byBpbnB1dCBzdXJmYWNlLgorICAgICAqLworICAgIHN0YXR1c190IHNpZ25hbEVuZE9mSW5wdXRTdHJlYW0oKTsKKworICAgIC8qKgorICAgICAqIFNldCBwYXJhbWV0ZXJzLgorICAgICAqLworICAgIHN0YXR1c190IHNldFBhcmFtZXRlcnMoc3RkOjp2ZWN0b3I8c3RkOjp1bmlxdWVfcHRyPEMyUGFyYW0+PiAmcGFyYW1zKTsKKworICAgIC8qKgorICAgICAqIFN0YXJ0IHF1ZXVlaW5nIGJ1ZmZlcnMgdG8gdGhlIGNvbXBvbmVudC4gVGhpcyBvYmplY3Qgc2hvdWxkIG5ldmVyIHF1ZXVlCisgICAgICogYnVmZmVycyBiZWZvcmUgdGhpcyBjYWxsIGhhcyBjb21wbGV0ZWQuCisgICAgICovCisgICAgc3RhdHVzX3Qgc3RhcnQoY29uc3Qgc3A8QU1lc3NhZ2U+ICZpbnB1dEZvcm1hdCwgY29uc3Qgc3A8QU1lc3NhZ2U+ICZvdXRwdXRGb3JtYXQpOworCisgICAgLyoqCisgICAgICogUmVxdWVzdCBpbml0aWFsIGlucHV0IGJ1ZmZlcnMgdG8gYmUgZmlsbGVkIGJ5IGNsaWVudC4KKyAgICAgKi8KKyAgICBzdGF0dXNfdCByZXF1ZXN0SW5pdGlhbElucHV0QnVmZmVycygpOworCisgICAgLyoqCisgICAgICogU3RvcCBxdWV1ZWluZyBidWZmZXJzIHRvIHRoZSBjb21wb25lbnQuIFRoaXMgb2JqZWN0IHNob3VsZCBuZXZlciBxdWV1ZQorICAgICAqIGJ1ZmZlcnMgYWZ0ZXIgdGhpcyBjYWxsLCB1bnRpbCBzdGFydCgpIGlzIGNhbGxlZC4KKyAgICAgKi8KKyAgICB2b2lkIHN0b3AoKTsKKworICAgIHZvaWQgZmx1c2goY29uc3Qgc3RkOjpsaXN0PHN0ZDo6dW5pcXVlX3B0cjxDMldvcms+PiAmZmx1c2hlZFdvcmspOworCisgICAgLyoqCisgICAgICogTm90aWZ5IGlucHV0IGNsaWVudCBhYm91dCB3b3JrIGRvbmUuCisgICAgICoKKyAgICAgKiBAcGFyYW0gd29ya0l0ZW1zICAgZmluaXNoZWQgd29yayBpdGVtLgorICAgICAqIEBwYXJhbSBvdXRwdXRGb3JtYXQgbmV3IG91dHB1dCBmb3JtYXQgaWYgaXQgaGFzIGNoYW5nZWQsIG90aGVyd2lzZSBudWxscHRyCisgICAgICogQHBhcmFtIGluaXREYXRhICAgIG5ldyBpbml0IGRhdGEgKENTRCkgaWYgaXQgaGFzIGNoYW5nZWQsIG90aGVyd2lzZSBudWxscHRyCisgICAgICogQHBhcmFtIG51bURpc2NhcmRlZElucHV0QnVmZmVycyB0aGUgbnVtYmVyIG9mIGlucHV0IGJ1ZmZlcnMgdGhhdCBhcmUKKyAgICAgKiAgICAgICAgICAgICAgICAgICAgcmV0dXJuZWQgZm9yIHRoZSBmaXJzdCB0aW1lIChub3QgcHJldmlvdXNseSByZXR1cm5lZCBieQorICAgICAqICAgICAgICAgICAgICAgICAgICBvbklucHV0QnVmZmVyRG9uZSgpKS4KKyAgICAgKi8KKyAgICB2b2lkIG9uV29ya0RvbmUoCisgICAgICAgICAgICBzdGQ6OnVuaXF1ZV9wdHI8QzJXb3JrPiB3b3JrLCBjb25zdCBzcDxBTWVzc2FnZT4gJm91dHB1dEZvcm1hdCwKKyAgICAgICAgICAgIGNvbnN0IEMyU3RyZWFtSW5pdERhdGFJbmZvOjpvdXRwdXQgKmluaXREYXRhLAorICAgICAgICAgICAgc2l6ZV90IG51bURpc2NhcmRlZElucHV0QnVmZmVycyk7CisKKyAgICAvKioKKyAgICAgKiBNYWtlIGFuIGlucHV0IGJ1ZmZlciBhdmFpbGFibGUgZm9yIHRoZSBjbGllbnQgYXMgaXQgaXMgbm8gbG9uZ2VyIG5lZWRlZAorICAgICAqIGJ5IHRoZSBjb2RlYy4KKyAgICAgKgorICAgICAqIEBwYXJhbSBidWZmZXIgVGhlIGJ1ZmZlciB0aGF0IGJlY29tZXMgdW51c2VkLgorICAgICAqLworICAgIHZvaWQgb25JbnB1dEJ1ZmZlckRvbmUoY29uc3Qgc3RkOjpzaGFyZWRfcHRyPEMyQnVmZmVyPiYgYnVmZmVyKTsKKworICAgIGVudW0gTWV0YU1vZGUgeworICAgICAgICBNT0RFX05PTkUsCisgICAgICAgIE1PREVfQU5XLAorICAgIH07CisKKyAgICB2b2lkIHNldE1ldGFNb2RlKE1ldGFNb2RlIG1vZGUpOworCisgICAgLy8gSW50ZXJuYWwgY2xhc3NlcworICAgIGNsYXNzIEJ1ZmZlcnM7CisgICAgY2xhc3MgSW5wdXRCdWZmZXJzOworICAgIGNsYXNzIE91dHB1dEJ1ZmZlcnM7CisKK3ByaXZhdGU6CisgICAgY2xhc3MgUXVldWVHdWFyZDsKKworICAgIC8qKgorICAgICAqIFNwZWNpYWwgbXV0ZXgtbGlrZSBvYmplY3Qgd2l0aCB0aGUgZm9sbG93aW5nIHByb3BlcnRpZXM6CisgICAgICoKKyAgICAgKiAtIEF0IFNUT1BQRUQgc3RhdGUgKGluaXRpYWwsIG9yIGFmdGVyIHN0b3AoKSkKKyAgICAgKiAgIC0gUXVldWVHdWFyZCBvYmplY3QgZ2V0cyBjcmVhdGVkIGF0IFNUT1BQRUQgc3RhdGUsIGFuZCB0aGUgY2xpZW50IGlzCisgICAgICogICAgIHN1cHBvc2VkIHRvIHJldHVybiBpbW1lZGlhdGVseS4KKyAgICAgKiAtIEF0IFJVTk5JTkcgc3RhdGUgKGFmdGVyIHN0YXJ0KCkpCisgICAgICogICAtIEVhY2ggUXVldWVHdWFyZCBvYmplY3QKKyAgICAgKi8KKyAgICBjbGFzcyBRdWV1ZVN5bmMgeworICAgIHB1YmxpYzoKKyAgICAgICAgLyoqCisgICAgICAgICAqIEF0IGNvbnN0cnVjdGlvbiB0aGUgc3luYyBvYmplY3QgaXMgaW4gU1RPUFBFRCBzdGF0ZS4KKyAgICAgICAgICovCisgICAgICAgIGlubGluZSBRdWV1ZVN5bmMoKSB7fQorICAgICAgICB+UXVldWVTeW5jKCkgPSBkZWZhdWx0OworCisgICAgICAgIC8qKgorICAgICAgICAgKiBUcmFuc2l0aW9uIHRvIFJVTk5JTkcgc3RhdGUgd2hlbiBzdG9wcGVkLiBOby1vcCBpZiBhbHJlYWR5IGluIFJVTk5JTkcKKyAgICAgICAgICogc3RhdGUuCisgICAgICAgICAqLworICAgICAgICB2b2lkIHN0YXJ0KCk7CisKKyAgICAgICAgLyoqCisgICAgICAgICAqIEF0IFJVTk5JTkcgc3RhdGUsIHdhaXQgdW50aWwgYWxsIFF1ZXVlR3VhcmQgb2JqZWN0IGNyZWF0ZWQgZHVyaW5nCisgICAgICAgICAqIFJVTk5JTkcgc3RhdGUgYXJlIGRlc3Ryb3llZCwgYW5kIHRoZW4gdHJhbnNpdGlvbiB0byBTVE9QUEVEIHN0YXRlLgorICAgICAgICAgKiBOby1vcCBpZiBhbHJlYWR5IGluIFNUT1BQRUQgc3RhdGUuCisgICAgICAgICAqLworICAgICAgICB2b2lkIHN0b3AoKTsKKworICAgIHByaXZhdGU6CisgICAgICAgIE11dGV4IG1HdWFyZExvY2s7CisKKyAgICAgICAgc3RydWN0IENvdW50ZXIgeworICAgICAgICAgICAgaW5saW5lIENvdW50ZXIoKSA6IHZhbHVlKC0xKSB7fQorICAgICAgICAgICAgaW50MzJfdCB2YWx1ZTsKKyAgICAgICAgICAgIENvbmRpdGlvbiBjb25kOworICAgICAgICB9OworICAgICAgICBNdXRleGVkPENvdW50ZXI+IG1Db3VudDsKKworICAgICAgICBmcmllbmQgY2xhc3MgQ0NvZGVjQnVmZmVyQ2hhbm5lbDo6UXVldWVHdWFyZDsKKyAgICB9OworCisgICAgY2xhc3MgUXVldWVHdWFyZCB7CisgICAgcHVibGljOgorICAgICAgICBRdWV1ZUd1YXJkKFF1ZXVlU3luYyAmc3luYyk7CisgICAgICAgIH5RdWV1ZUd1YXJkKCk7CisgICAgICAgIGlubGluZSBib29sIGlzUnVubmluZygpIHsgcmV0dXJuIG1SdW5uaW5nOyB9CisKKyAgICBwcml2YXRlOgorICAgICAgICBRdWV1ZVN5bmMgJm1TeW5jOworICAgICAgICBib29sIG1SdW5uaW5nOworICAgIH07CisKKyAgICB2b2lkIGZlZWRJbnB1dEJ1ZmZlcklmQXZhaWxhYmxlKCk7CisgICAgdm9pZCBmZWVkSW5wdXRCdWZmZXJJZkF2YWlsYWJsZUludGVybmFsKCk7CisgICAgc3RhdHVzX3QgcXVldWVJbnB1dEJ1ZmZlckludGVybmFsKGNvbnN0IHNwPE1lZGlhQ29kZWNCdWZmZXI+ICZidWZmZXIpOworICAgIGJvb2wgaGFuZGxlV29yaygKKyAgICAgICAgICAgIHN0ZDo6dW5pcXVlX3B0cjxDMldvcms+IHdvcmssIGNvbnN0IHNwPEFNZXNzYWdlPiAmb3V0cHV0Rm9ybWF0LAorICAgICAgICAgICAgY29uc3QgQzJTdHJlYW1Jbml0RGF0YUluZm86Om91dHB1dCAqaW5pdERhdGEpOworICAgIHZvaWQgc2VuZE91dHB1dEJ1ZmZlcnMoKTsKKworICAgIFF1ZXVlU3luYyBtU3luYzsKKyAgICBzcDxNZW1vcnlEZWFsZXI+IG1EZWFsZXI7CisgICAgc3A8SU1lbW9yeT4gbURlY3J5cHREZXN0aW5hdGlvbjsKKyAgICBpbnQzMl90IG1IZWFwU2VxTnVtOworCisgICAgc3RkOjpzaGFyZWRfcHRyPENvZGVjMkNsaWVudDo6Q29tcG9uZW50PiBtQ29tcG9uZW50OworICAgIHN0ZDo6c3RyaW5nIG1Db21wb25lbnROYW1lOyAvLy88IGNvbXBvbmVudCBuYW1lIGZvciBkZWJ1Z2dpbmcKKyAgICBjb25zdCBjaGFyICptTmFtZTsgLy8vPCBDLXN0cmluZyB2ZXJzaW9uIG9mIGNvbXBvbmVudCBuYW1lCisgICAgc3RkOjpzaGFyZWRfcHRyPENDb2RlY0NhbGxiYWNrPiBtQ0NvZGVjQ2FsbGJhY2s7CisgICAgc3RkOjpzaGFyZWRfcHRyPEMyQmxvY2tQb29sPiBtSW5wdXRBbGxvY2F0b3I7CisgICAgUXVldWVTeW5jIG1RdWV1ZVN5bmM7CisgICAgc3RkOjp2ZWN0b3I8c3RkOjp1bmlxdWVfcHRyPEMyUGFyYW0+PiBtUGFyYW1zVG9CZVNldDsKKworICAgIE11dGV4ZWQ8c3RkOjp1bmlxdWVfcHRyPElucHV0QnVmZmVycz4+IG1JbnB1dEJ1ZmZlcnM7CisgICAgTXV0ZXhlZDxzdGQ6Omxpc3Q8c3A8QUJ1ZmZlcj4+PiBtRmx1c2hlZENvbmZpZ3M7CisgICAgTXV0ZXhlZDxzdGQ6OnVuaXF1ZV9wdHI8T3V0cHV0QnVmZmVycz4+IG1PdXRwdXRCdWZmZXJzOworCisgICAgc3RkOjphdG9taWNfdWludDY0X3QgbUZyYW1lSW5kZXg7CisgICAgc3RkOjphdG9taWNfdWludDY0X3QgbUZpcnN0VmFsaWRGcmFtZUluZGV4OworCisgICAgc3A8TWVtb3J5RGVhbGVyPiBtYWtlTWVtb3J5RGVhbGVyKHNpemVfdCBoZWFwU2l6ZSk7CisKKyAgICBzdHJ1Y3QgT3V0cHV0U3VyZmFjZSB7CisgICAgICAgIHNwPFN1cmZhY2U+IHN1cmZhY2U7CisgICAgICAgIHVpbnQzMl90IGdlbmVyYXRpb247CisgICAgfTsKKyAgICBNdXRleGVkPE91dHB1dFN1cmZhY2U+IG1PdXRwdXRTdXJmYWNlOworCisgICAgc3RydWN0IEJsb2NrUG9vbHMgeworICAgICAgICBDMkFsbG9jYXRvcjo6aWRfdCBpbnB1dEFsbG9jYXRvcklkOworICAgICAgICBzdGQ6OnNoYXJlZF9wdHI8QzJCbG9ja1Bvb2w+IGlucHV0UG9vbDsKKyAgICAgICAgQzJBbGxvY2F0b3I6OmlkX3Qgb3V0cHV0QWxsb2NhdG9ySWQ7CisgICAgICAgIEMyQmxvY2tQb29sOjpsb2NhbF9pZF90IG91dHB1dFBvb2xJZDsKKyAgICAgICAgc3RkOjpzaGFyZWRfcHRyPENvZGVjMkNsaWVudDo6Q29uZmlndXJhYmxlPiBvdXRwdXRQb29sSW50ZjsKKyAgICB9OworICAgIE11dGV4ZWQ8QmxvY2tQb29scz4gbUJsb2NrUG9vbHM7CisKKyAgICBzdGQ6OnNoYXJlZF9wdHI8SW5wdXRTdXJmYWNlV3JhcHBlcj4gbUlucHV0U3VyZmFjZTsKKworICAgIE1ldGFNb2RlIG1NZXRhTW9kZTsKKworICAgIC8vIFBpcGVsaW5lQ2FwYWNpdHkgaXMgdXNlZCBpbiB0aGUgaW5wdXQgYnVmZmVyIGdhdGluZyBsb2dpYy4KKyAgICAvLworICAgIC8vIFRoZXJlIGFyZSB0aHJlZSBjcml0ZXJpYSB0aGF0IG5lZWQgdG8gYmUgbWV0IGJlZm9yZQorICAgIC8vIG9uSW5wdXRCdWZmZXJBdmFpbGFibGUoKSBpcyBjYWxsZWQ6CisgICAgLy8gMS4gVGhlIG51bWJlciBvZiBpbnB1dCBidWZmZXJzIHRoYXQgaGF2ZSBiZWVuIHJlY2VpdmVkIGJ5CisgICAgLy8gICAgQ0NvZGVjQnVmZmVyQ2hhbm5lbCBidXQgbm90IHJldHVybmVkIHZpYSBvbldvcmtEb25lKCkgb3IKKyAgICAvLyAgICBvbklucHV0QnVmZmVyRG9uZSgpIGRvZXMgbm90IGV4Y2VlZCBhIGNlcnRhaW4gbGltaXQuIChMZXQgdXMgY2FsbCB0aGlzCisgICAgLy8gICAgbnVtYmVyIHRoZSAiaW5wdXQiIGNhcGFjaXR5LikKKyAgICAvLyAyLiBUaGUgbnVtYmVyIG9mIHdvcmsgaXRlbXMgdGhhdCBoYXZlIGJlZW4gcmVjZWl2ZWQgYnkKKyAgICAvLyAgICBDQ29kZWNCdWZmZXJDaGFubmVsIHdob3NlIG91dHB1dHMgaGF2ZSBub3QgYmVlbiByZXR1cm5lZCBmcm9tIHRoZQorICAgIC8vICAgIGNvbXBvbmVudCAoYnkgY2FsbGluZyBvbldvcmtEb25lKCkpIGRvZXMgbm90IGV4Y2VlZCBhIGNlcnRhaW4gbGltaXQuCisgICAgLy8gICAgKExldCB1cyBjYWxsIHRoaXMgdGhlICJjb21wb25lbnQiIGNhcGFjaXR5LikKKyAgICAvLworICAgIC8vIFRoZXNlIHRocmVlIGNyaXRlcmlhIGd1YXJhbnRlZSB0aGF0IGEgbmV3IGlucHV0IGJ1ZmZlciB0aGF0IGFycml2ZXMgZnJvbQorICAgIC8vIHRoZSBpbnZvY2F0aW9uIG9mIG9uSW5wdXRCdWZmZXJBdmFpbGFibGUoKSB3aWxsIG5vdAorICAgIC8vIDEuIG92ZXJsb2FkIENDb2RlY0J1ZmZlckNoYW5uZWwncyBpbnB1dCBidWZmZXJzOworICAgIC8vIDIuIG92ZXJsb2FkIHRoZSBjb21wb25lbnQ7IG9yCisgICAgLy8KKyAgICBzdHJ1Y3QgUGlwZWxpbmVDYXBhY2l0eSB7CisgICAgICAgIC8vIFRoZSBudW1iZXIgb2YgYXZhaWxhYmxlIGlucHV0IGNhcGFjaXR5LgorICAgICAgICBzdGQ6OmF0b21pY19pbnQgaW5wdXQ7CisgICAgICAgIC8vIFRoZSBudW1iZXIgb2YgYXZhaWxhYmxlIGNvbXBvbmVudCBjYXBhY2l0eS4KKyAgICAgICAgc3RkOjphdG9taWNfaW50IGNvbXBvbmVudDsKKworICAgICAgICBQaXBlbGluZUNhcGFjaXR5KCk7CisgICAgICAgIC8vIFNldCB0aGUgdmFsdWVzIG9mICNpbnB1dCBhbmQgI2NvbXBvbmVudC4KKyAgICAgICAgdm9pZCBpbml0aWFsaXplKGludCBuZXdJbnB1dCwgaW50IG5ld0NvbXBvbmVudCwKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIqIG5ld05hbWUgPSAiPFVOS05PV04gQ09NUE9ORU5UPiIsCisgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyKiBjYWxsZXJUYWcgPSBudWxscHRyKTsKKworICAgICAgICAvLyBSZXR1cm4gdHJ1ZSBhbmQgZGVjcmVhc2UgI2lucHV0IGFuZCAjY29tcG9uZW50IGJ5IG9uZSBpZgorICAgICAgICAvLyB0aGV5IGFyZSBhbGwgZ3JlYXRlciB0aGFuIHplcm87IHJldHVybiBmYWxzZSBvdGhlcndpc2UuCisgICAgICAgIC8vCisgICAgICAgIC8vIGNhbGxlclRhZyBpcyB1c2VkIGZvciBsb2dnaW5nIG9ubHkuCisgICAgICAgIC8vCisgICAgICAgIC8vIGFsbG9jYXRlKCkgaXMgY2FsbGVkIGJ5IENDb2RlY0J1ZmZlckNoYW5uZWwgdG8gY2hlY2sgd2hldGhlciBpdCBjYW4KKyAgICAgICAgLy8gcmVjZWl2ZSBhbm90aGVyIGlucHV0IGJ1ZmZlci4gSWYgdGhlIHJldHVybiB2YWx1ZSBpcyB0cnVlLAorICAgICAgICAvLyBvbklucHV0QnVmZmVyQXZhaWxhYmxlKCkgYW5kIG9uT3V0cHV0QnVmZmVyQXZhaWxhYmxlKCkgY2FuIGJlIGNhbGxlZAorICAgICAgICAvLyBhZnRlcndhcmRzLgorICAgICAgICBib29sIGFsbG9jYXRlKGNvbnN0IGNoYXIqIGNhbGxlclRhZyA9IG51bGxwdHIpOworCisgICAgICAgIC8vIEluY3JlYXNlICNpbnB1dCBhbmQgI2NvbXBvbmVudCBieSBvbmUuCisgICAgICAgIC8vCisgICAgICAgIC8vIGNhbGxlclRhZyBpcyB1c2VkIGZvciBsb2dnaW5nIG9ubHkuCisgICAgICAgIC8vCisgICAgICAgIC8vIGZyZWUoKSBpcyBjYWxsZWQgYnkgQ0NvZGVjQnVmZmVyQ2hhbm5lbCBhZnRlciBhbGxvY2F0ZSgpIHJldHVybnMgdHJ1ZQorICAgICAgICAvLyBidXQgb25JbnB1dEJ1ZmZlckF2YWlsYWJsZSgpIGNhbm5vdCBiZSBjYWxsZWQgZm9yIGFueSByZWFzb25zLiBJdAorICAgICAgICAvLyBlc3NlbnRpYWxseSB1bmRvZXMgYW4gYWxsb2NhdGUoKSBjYWxsLgorICAgICAgICB2b2lkIGZyZWUoY29uc3QgY2hhciogY2FsbGVyVGFnID0gbnVsbHB0cik7CisKKyAgICAgICAgLy8gSW5jcmVhc2UgI2lucHV0IGJ5IEBwIG51bURpc2NhcmRlZElucHV0QnVmZmVycy4KKyAgICAgICAgLy8KKyAgICAgICAgLy8gY2FsbGVyVGFnIGlzIHVzZWQgZm9yIGxvZ2dpbmcgb25seS4KKyAgICAgICAgLy8KKyAgICAgICAgLy8gZnJlZUlucHV0U2xvdHMoKSBpcyBjYWxsZWQgYnkgQ0NvZGVjQnVmZmVyQ2hhbm5lbCB3aGVuIG9uV29ya0RvbmUoKQorICAgICAgICAvLyBvciBvbklucHV0QnVmZmVyRG9uZSgpIGlzIGNhbGxlZC4gQHAgbnVtRGlzY2FyZGVkSW5wdXRCdWZmZXJzIGlzCisgICAgICAgIC8vIHByb3ZpZGVkIGluIG9uV29ya0RvbmUoKSwgYW5kIGlzIDEgaW4gb25JbnB1dEJ1ZmZlckRvbmUoKS4KKyAgICAgICAgaW50IGZyZWVJbnB1dFNsb3RzKHNpemVfdCBudW1EaXNjYXJkZWRJbnB1dEJ1ZmZlcnMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyKiBjYWxsZXJUYWcgPSBudWxscHRyKTsKKworICAgICAgICAvLyBJbmNyZWFzZSAjY29tcG9uZW50IGJ5IG9uZSBhbmQgcmV0dXJuIHRoZSB1cGRhdGVkIHZhbHVlLgorICAgICAgICAvLworICAgICAgICAvLyBjYWxsZXJUYWcgaXMgdXNlZCBmb3IgbG9nZ2luZyBvbmx5LgorICAgICAgICAvLworICAgICAgICAvLyBmcmVlQ29tcG9uZW50U2xvdCgpIGlzIGNhbGxlZCBieSBDQ29kZWNCdWZmZXJDaGFubmVsIHdoZW4KKyAgICAgICAgLy8gb25Xb3JrRG9uZSgpIGlzIGNhbGxlZC4KKyAgICAgICAgaW50IGZyZWVDb21wb25lbnRTbG90KGNvbnN0IGNoYXIqIGNhbGxlclRhZyA9IG51bGxwdHIpOworCisgICAgcHJpdmF0ZToKKyAgICAgICAgLy8gQ29tcG9uZW50IG5hbWUuIFVzZWQgZm9yIGxvZ2dpbmcuCisgICAgICAgIGNvbnN0IGNoYXIqIG1OYW1lOworICAgIH07CisgICAgUGlwZWxpbmVDYXBhY2l0eSBtQXZhaWxhYmxlUGlwZWxpbmVDYXBhY2l0eTsKKworICAgIGNsYXNzIFJlb3JkZXJTdGFzaCB7CisgICAgcHVibGljOgorICAgICAgICBzdHJ1Y3QgRW50cnkgeworICAgICAgICAgICAgaW5saW5lIEVudHJ5KCkgOiBidWZmZXIobnVsbHB0ciksIHRpbWVzdGFtcCgwKSwgZmxhZ3MoMCksIG9yZGluYWwoezAsIDAsIDB9KSB7fQorICAgICAgICAgICAgaW5saW5lIEVudHJ5KAorICAgICAgICAgICAgICAgICAgICBjb25zdCBzdGQ6OnNoYXJlZF9wdHI8QzJCdWZmZXI+ICZiLAorICAgICAgICAgICAgICAgICAgICBpbnQ2NF90IHQsCisgICAgICAgICAgICAgICAgICAgIGludDMyX3QgZiwKKyAgICAgICAgICAgICAgICAgICAgY29uc3QgQzJXb3JrT3JkaW5hbFN0cnVjdCAmbykKKyAgICAgICAgICAgICAgICA6IGJ1ZmZlcihiKSwgdGltZXN0YW1wKHQpLCBmbGFncyhmKSwgb3JkaW5hbChvKSB7fQorICAgICAgICAgICAgc3RkOjpzaGFyZWRfcHRyPEMyQnVmZmVyPiBidWZmZXI7CisgICAgICAgICAgICBpbnQ2NF90IHRpbWVzdGFtcDsKKyAgICAgICAgICAgIGludDMyX3QgZmxhZ3M7CisgICAgICAgICAgICBDMldvcmtPcmRpbmFsU3RydWN0IG9yZGluYWw7CisgICAgICAgIH07CisKKyAgICAgICAgUmVvcmRlclN0YXNoKCk7CisKKyAgICAgICAgdm9pZCBjbGVhcigpOworICAgICAgICB2b2lkIHNldERlcHRoKHVpbnQzMl90IGRlcHRoKTsKKyAgICAgICAgdm9pZCBzZXRLZXkoQzJDb25maWc6Om9yZGluYWxfa2V5X3Qga2V5KTsKKyAgICAgICAgYm9vbCBwb3AoRW50cnkgKmVudHJ5KTsKKyAgICAgICAgdm9pZCBlbXBsYWNlKAorICAgICAgICAgICAgICAgIGNvbnN0IHN0ZDo6c2hhcmVkX3B0cjxDMkJ1ZmZlcj4gJmJ1ZmZlciwKKyAgICAgICAgICAgICAgICBpbnQ2NF90IHRpbWVzdGFtcCwKKyAgICAgICAgICAgICAgICBpbnQzMl90IGZsYWdzLAorICAgICAgICAgICAgICAgIGNvbnN0IEMyV29ya09yZGluYWxTdHJ1Y3QgJm9yZGluYWwpOworICAgICAgICB2b2lkIGRlZmVyKGNvbnN0IEVudHJ5ICZlbnRyeSk7CisgICAgICAgIGJvb2wgaGFzUGVuZGluZygpIGNvbnN0OworCisgICAgcHJpdmF0ZToKKyAgICAgICAgc3RkOjpsaXN0PEVudHJ5PiBtUGVuZGluZzsKKyAgICAgICAgc3RkOjpsaXN0PEVudHJ5PiBtU3Rhc2g7CisgICAgICAgIHVpbnQzMl90IG1EZXB0aDsKKyAgICAgICAgQzJDb25maWc6Om9yZGluYWxfa2V5X3QgbUtleTsKKworICAgICAgICBib29sIGxlc3MoY29uc3QgQzJXb3JrT3JkaW5hbFN0cnVjdCAmbzEsIGNvbnN0IEMyV29ya09yZGluYWxTdHJ1Y3QgJm8yKTsKKyAgICB9OworICAgIE11dGV4ZWQ8UmVvcmRlclN0YXNoPiBtUmVvcmRlclN0YXNoOworCisgICAgc3RkOjphdG9taWNfYm9vbCBtSW5wdXRNZXRFb3M7CisKKyAgICBpbmxpbmUgYm9vbCBoYXNDcnlwdG9PckRlc2NyYW1ibGVyKCkgeworICAgICAgICByZXR1cm4gbUNyeXB0byAhPSBudWxscHRyIHx8IG1EZXNjcmFtYmxlciAhPSBudWxscHRyOworICAgIH0KK307CisKKy8vIENvbnZlcnNpb24gb2YgYSBjMl9zdGF0dXNfdCB2YWx1ZSB0byBhIHN0YXR1c190IHZhbHVlIG1heSBkZXBlbmQgb24gdGhlCisvLyBvcGVyYXRpb24gdGhhdCByZXR1cm5zIHRoZSBjMl9zdGF0dXNfdCB2YWx1ZS4KK2VudW0gYzJfb3BlcmF0aW9uX3QgeworICAgIEMyX09QRVJBVElPTl9OT05FLAorICAgIEMyX09QRVJBVElPTl9Db21wb25lbnRfY29ubmVjdFRvT214SW5wdXRTdXJmYWNlLAorICAgIEMyX09QRVJBVElPTl9Db21wb25lbnRfY3JlYXRlQmxvY2tQb29sLAorICAgIEMyX09QRVJBVElPTl9Db21wb25lbnRfZGVzdHJveUJsb2NrUG9vbCwKKyAgICBDMl9PUEVSQVRJT05fQ29tcG9uZW50X2Rpc2Nvbm5lY3RGcm9tSW5wdXRTdXJmYWNlLAorICAgIEMyX09QRVJBVElPTl9Db21wb25lbnRfZHJhaW4sCisgICAgQzJfT1BFUkFUSU9OX0NvbXBvbmVudF9mbHVzaCwKKyAgICBDMl9PUEVSQVRJT05fQ29tcG9uZW50X3F1ZXVlLAorICAgIEMyX09QRVJBVElPTl9Db21wb25lbnRfcmVsZWFzZSwKKyAgICBDMl9PUEVSQVRJT05fQ29tcG9uZW50X3Jlc2V0LAorICAgIEMyX09QRVJBVElPTl9Db21wb25lbnRfc2V0T3V0cHV0U3VyZmFjZSwKKyAgICBDMl9PUEVSQVRJT05fQ29tcG9uZW50X3N0YXJ0LAorICAgIEMyX09QRVJBVElPTl9Db21wb25lbnRfc3RvcCwKKyAgICBDMl9PUEVSQVRJT05fQ29tcG9uZW50U3RvcmVfY29weUJ1ZmZlciwKKyAgICBDMl9PUEVSQVRJT05fQ29tcG9uZW50U3RvcmVfY3JlYXRlQ29tcG9uZW50LAorICAgIEMyX09QRVJBVElPTl9Db21wb25lbnRTdG9yZV9jcmVhdGVJbnB1dFN1cmZhY2UsCisgICAgQzJfT1BFUkFUSU9OX0NvbXBvbmVudFN0b3JlX2NyZWF0ZUludGVyZmFjZSwKKyAgICBDMl9PUEVSQVRJT05fQ29uZmlndXJhYmxlX2NvbmZpZywKKyAgICBDMl9PUEVSQVRJT05fQ29uZmlndXJhYmxlX3F1ZXJ5LAorICAgIEMyX09QRVJBVElPTl9Db25maWd1cmFibGVfcXVlcnlTdXBwb3J0ZWRQYXJhbXMsCisgICAgQzJfT1BFUkFUSU9OX0NvbmZpZ3VyYWJsZV9xdWVyeVN1cHBvcnRlZFZhbHVlcywKKyAgICBDMl9PUEVSQVRJT05fSW5wdXRTdXJmYWNlX2Nvbm5lY3RUb0NvbXBvbmVudCwKKyAgICBDMl9PUEVSQVRJT05fSW5wdXRTdXJmYWNlQ29ubmVjdGlvbl9kaXNjb25uZWN0LAorfTsKKworc3RhdHVzX3QgdG9TdGF0dXNUKGMyX3N0YXR1c190IGMycywgYzJfb3BlcmF0aW9uX3QgYzJvcCA9IEMyX09QRVJBVElPTl9OT05FKTsKKworfSAgLy8gbmFtZXNwYWNlIGFuZHJvaWQKKworI2VuZGlmICAvLyBDQ09ERUNfQlVGRkVSX0NIQU5ORUxfSF8KZGlmZiAtLWdpdCBhL21lZGlhL2NvZGVjMi9zZnBsdWdpbi9DQ29kZWNDb25maWcuY3BwIGIvbWVkaWEvY29kZWMyL3NmcGx1Z2luL0NDb2RlY0NvbmZpZy5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGRiZmQwZQotLS0gL2Rldi9udWxsCisrKyBiL21lZGlhL2NvZGVjMi9zZnBsdWdpbi9DQ29kZWNDb25maWcuY3BwCkBAIC0wLDAgKzEsMTU4OCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxOCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCisKKy8vI2RlZmluZSBMT0dfTkRFQlVHIDAKKyNkZWZpbmUgTE9HX1RBRyAiQ0NvZGVjQ29uZmlnIgorI2luY2x1ZGUgPGN1dGlscy9wcm9wZXJ0aWVzLmg+CisjaW5jbHVkZSA8bG9nL2xvZy5oPgorCisjaW5jbHVkZSA8QzJDb21wb25lbnQuaD4KKyNpbmNsdWRlIDxDMkRlYnVnLmg+CisjaW5jbHVkZSA8QzJQYXJhbS5oPgorI2luY2x1ZGUgPHV0aWwvQzJJbnRlcmZhY2VIZWxwZXIuaD4KKworI2luY2x1ZGUgPG1lZGlhL3N0YWdlZnJpZ2h0L01lZGlhQ29kZWNDb25zdGFudHMuaD4KKworI2luY2x1ZGUgIkNDb2RlY0NvbmZpZy5oIgorI2luY2x1ZGUgIkNvZGVjMk1hcHBlci5oIgorCisjZGVmaW5lIERSQ19ERUZBVUxUX01PQklMRV9SRUZfTEVWRUwgNjQgIC8qIDY0Ki0wLjI1ZEIgPSAtMTYgZEIgYmVsb3cgZnVsbCBzY2FsZSBmb3IgbW9iaWxlIGNvbmYgKi8KKyNkZWZpbmUgRFJDX0RFRkFVTFRfTU9CSUxFX0RSQ19DVVQgICAxMjcgLyogbWF4aW11bSBjb21wcmVzc2lvbiBvZiBkeW5hbWljIHJhbmdlIGZvciBtb2JpbGUgY29uZiAqLworI2RlZmluZSBEUkNfREVGQVVMVF9NT0JJTEVfRFJDX0JPT1NUIDEyNyAvKiBtYXhpbXVtIGNvbXByZXNzaW9uIG9mIGR5bmFtaWMgcmFuZ2UgZm9yIG1vYmlsZSBjb25mICovCisjZGVmaW5lIERSQ19ERUZBVUxUX01PQklMRV9EUkNfSEVBVlkgMSAgIC8qIHN3aXRjaCBmb3IgaGVhdnkgY29tcHJlc3Npb24gZm9yIG1vYmlsZSBjb25mICovCisjZGVmaW5lIERSQ19ERUZBVUxUX01PQklMRV9EUkNfRUZGRUNUIDMgIC8qIE1QRUctRCBEUkMgZWZmZWN0IHR5cGU7IDMgPT4gTGltaXRlZCBwbGF5YmFjayByYW5nZSAqLworI2RlZmluZSBEUkNfREVGQVVMVF9NT0JJTEVfRU5DX0xFVkVMICgtMSkgLyogZW5jb2RlciB0YXJnZXQgbGV2ZWw7IC0xID0+IHRoZSB2YWx1ZSBpcyB1bmtub3duLCBvdGhlcndpc2UgZEIgc3RlcCB2YWx1ZSAoZS5nLiA2NCBmb3IgLTE2IGRCKSAqLworLy8gbmFtZXMgb2YgcHJvcGVydGllcyB0aGF0IGNhbiBiZSB1c2VkIHRvIG92ZXJyaWRlIHRoZSBkZWZhdWx0IERSQyBzZXR0aW5ncworI2RlZmluZSBQUk9QX0RSQ19PVkVSUklERV9SRUZfTEVWRUwgICJhYWNfZHJjX3JlZmVyZW5jZV9sZXZlbCIKKyNkZWZpbmUgUFJPUF9EUkNfT1ZFUlJJREVfQ1VUICAgICAgICAiYWFjX2RyY19jdXQiCisjZGVmaW5lIFBST1BfRFJDX09WRVJSSURFX0JPT1NUICAgICAgImFhY19kcmNfYm9vc3QiCisjZGVmaW5lIFBST1BfRFJDX09WRVJSSURFX0hFQVZZICAgICAgImFhY19kcmNfaGVhdnkiCisjZGVmaW5lIFBST1BfRFJDX09WRVJSSURFX0VOQ19MRVZFTCAgImFhY19kcmNfZW5jX3RhcmdldF9sZXZlbCIKKyNkZWZpbmUgUFJPUF9EUkNfT1ZFUlJJREVfRUZGRUNUICAgICAicm8uYWFjX2RyY19lZmZlY3RfdHlwZSIKKworbmFtZXNwYWNlIGFuZHJvaWQgeworCisvLyBDQ29kZWNDb25maWcKKworbmFtZXNwYWNlIHsKKworLyoqCisgKiBtYXBwaW5nIGJldHdlZW4gU0RLIGFuZCBDb2RlYyAyLjAgY29uZmlndXJhdGlvbnMuCisgKi8KK3N0cnVjdCBDb25maWdNYXBwZXIgeworICAgIC8qKgorICAgICAqIFZhbHVlIG1hcHBlciAoQzJWYWx1ZSA9PiBDMlZhbHVlKQorICAgICAqLworICAgIHR5cGVkZWYgc3RkOjpmdW5jdGlvbjxDMlZhbHVlKEMyVmFsdWUpPiBNYXBwZXI7CisKKyAgICAvLy8gc2hvcnRoYW5kCisgICAgdHlwZWRlZiBDQ29kZWNDb25maWc6OkRvbWFpbiBEb21haW47CisKKyAgICBDb25maWdNYXBwZXIoc3RkOjpzdHJpbmcgbWVkaWFLZXksIEMyU3RyaW5nIGMyc3RydWN0LCBDMlN0cmluZyBjMmZpZWxkKQorICAgICAgICA6IG1Eb21haW4oRG9tYWluOjpBTEwpLCBtTWVkaWFLZXkobWVkaWFLZXkpLCBtU3RydWN0KGMyc3RydWN0KSwgbUZpZWxkKGMyZmllbGQpIHsgfQorCisgICAgLy8vIExpbWl0cyB0aGlzIHBhcmFtZXRlciB0byB0aGUgZ2l2ZW4gZG9tYWluCisgICAgQ29uZmlnTWFwcGVyICZsaW1pdFRvKHVpbnQzMl90IGRvbWFpbikgeworICAgICAgICBDMl9DSEVDSyhkb21haW4gJiBEb21haW46OkdVQVJEX0JJVCk7CisgICAgICAgIG1Eb21haW4gPSBEb21haW4obURvbWFpbiAmIGRvbWFpbik7CisgICAgICAgIHJldHVybiAqdGhpczsKKyAgICB9CisKKyAgICAvLy8gQWRkcyBTREsgPT4gQ29kZWMgMi4wIG1hcHBlciAoc2hvdWxkIG5vdCBiZSBpbiB0aGUgU0RLIGZvcm1hdCkKKyAgICBDb25maWdNYXBwZXIgJndpdGhNYXBwZXIoTWFwcGVyIG1hcHBlcikgeworICAgICAgICBDMl9DSEVDSyghbU1hcHBlcik7CisgICAgICAgIEMyX0NIRUNLKCFtUmV2ZXJzZSk7CisgICAgICAgIG1NYXBwZXIgPSBtYXBwZXI7CisgICAgICAgIHJldHVybiAqdGhpczsKKyAgICB9CisKKyAgICAvLy8gQWRkcyBTREsgPD0+IENvZGVjIDIuMCB2YWx1ZSBtYXBwZXJzCisgICAgQ29uZmlnTWFwcGVyICZ3aXRoTWFwcGVycyhNYXBwZXIgbWFwcGVyLCBNYXBwZXIgcmV2ZXJzZSkgeworICAgICAgICBDMl9DSEVDSyghbU1hcHBlcik7CisgICAgICAgIEMyX0NIRUNLKCFtUmV2ZXJzZSk7CisgICAgICAgIG1NYXBwZXIgPSBtYXBwZXI7CisgICAgICAgIG1SZXZlcnNlID0gcmV2ZXJzZTsKKyAgICAgICAgcmV0dXJuICp0aGlzOworICAgIH0KKworICAgIC8vLyBBZGRzIFNESyA8PT4gQ29kZWMgMi4wIHZhbHVlIG1hcHBlcnMgYmFzZWQgb24gQzJNYXBwZXIKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBDMlR5cGUsIHR5cGVuYW1lIFNka1R5cGU9aW50MzJfdD4KKyAgICBDb25maWdNYXBwZXIgJndpdGhDMk1hcHBlcnMoKSB7CisgICAgICAgIEMyX0NIRUNLKCFtTWFwcGVyKTsKKyAgICAgICAgQzJfQ0hFQ0soIW1SZXZlcnNlKTsKKyAgICAgICAgbU1hcHBlciA9IFtdKEMyVmFsdWUgdikgLT4gQzJWYWx1ZSB7CisgICAgICAgICAgICBTZGtUeXBlIHNka1ZhbHVlOworICAgICAgICAgICAgQzJUeXBlIGMyVmFsdWU7CisgICAgICAgICAgICBpZiAodi5nZXQoJnNka1ZhbHVlKSAmJiBDMk1hcHBlcjo6bWFwKHNka1ZhbHVlLCAmYzJWYWx1ZSkpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gYzJWYWx1ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJldHVybiBDMlZhbHVlKCk7CisgICAgICAgIH07CisgICAgICAgIG1SZXZlcnNlID0gW10oQzJWYWx1ZSB2KSAtPiBDMlZhbHVlIHsKKyAgICAgICAgICAgIFNka1R5cGUgc2RrVmFsdWU7CisgICAgICAgICAgICBDMlR5cGUgYzJWYWx1ZTsKKyAgICAgICAgICAgIHVzaW5nIEMyVmFsdWVUeXBlPXR5cGVuYW1lIF9jMl9yZWR1Y2VfZW51bV90b191bmRlcmx5aW5nX3R5cGU8QzJUeXBlPjo6dHlwZTsKKyAgICAgICAgICAgIGlmICh2LmdldCgoQzJWYWx1ZVR5cGUqKSZjMlZhbHVlKSAmJiBDMk1hcHBlcjo6bWFwKGMyVmFsdWUsICZzZGtWYWx1ZSkpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gc2RrVmFsdWU7CisgICAgICAgICAgICB9CisgICAgICAgICAgICByZXR1cm4gQzJWYWx1ZSgpOworICAgICAgICB9OworICAgICAgICByZXR1cm4gKnRoaXM7CisgICAgfQorCisgICAgLy8vIE1hcHMgZnJvbSBTREsgdmFsdWVzIGluIGFuIEFNZXNzYWdlIHRvIGEgc3VpdGFibGUgQzJWYWx1ZS4KKyAgICBDMlZhbHVlIG1hcEZyb21NZXNzYWdlKGNvbnN0IEFNZXNzYWdlOjpJdGVtRGF0YSAmaXRlbSkgY29uc3QgeworICAgICAgICBDMlZhbHVlIHZhbHVlOworICAgICAgICBpbnQzMl90IGludDMyVmFsdWU7CisgICAgICAgIGludDY0X3QgaW50NjRWYWx1ZTsKKyAgICAgICAgZmxvYXQgZmxvYXRWYWx1ZTsKKyAgICAgICAgZG91YmxlIGRvdWJsZVZhbHVlOworICAgICAgICBpZiAoaXRlbS5maW5kKCZpbnQzMlZhbHVlKSkgeworICAgICAgICAgICAgdmFsdWUgPSBpbnQzMlZhbHVlOworICAgICAgICB9IGVsc2UgaWYgKGl0ZW0uZmluZCgmaW50NjRWYWx1ZSkpIHsKKyAgICAgICAgICAgIHZhbHVlID0gaW50NjRWYWx1ZTsKKyAgICAgICAgfSBlbHNlIGlmIChpdGVtLmZpbmQoJmZsb2F0VmFsdWUpKSB7CisgICAgICAgICAgICB2YWx1ZSA9IGZsb2F0VmFsdWU7CisgICAgICAgIH0gZWxzZSBpZiAoaXRlbS5maW5kKCZkb3VibGVWYWx1ZSkpIHsKKyAgICAgICAgICAgIHZhbHVlID0gKGZsb2F0KWRvdWJsZVZhbHVlOworICAgICAgICB9CisgICAgICAgIGlmICh2YWx1ZS50eXBlKCkgIT0gQzJWYWx1ZTo6Tk9fSU5JVCAmJiBtTWFwcGVyKSB7CisgICAgICAgICAgICB2YWx1ZSA9IG1NYXBwZXIodmFsdWUpOworICAgICAgICB9CisgICAgICAgIHJldHVybiB2YWx1ZTsKKyAgICB9CisKKyAgICAvLy8gTWFwcyBmcm9tIGEgQzJWYWx1ZSB0byBhbiBTREsgdmFsdWUgaW4gYW4gQU1lc3NhZ2UuCisgICAgQU1lc3NhZ2U6Okl0ZW1EYXRhIG1hcFRvTWVzc2FnZShDMlZhbHVlIHZhbHVlKSBjb25zdCB7CisgICAgICAgIEFNZXNzYWdlOjpJdGVtRGF0YSBpdGVtOworICAgICAgICBpbnQzMl90IGludDMyVmFsdWU7CisgICAgICAgIHVpbnQzMl90IHVpbnQzMlZhbHVlOworICAgICAgICBpbnQ2NF90IGludDY0VmFsdWU7CisgICAgICAgIHVpbnQ2NF90IHVpbnQ2NFZhbHVlOworICAgICAgICBmbG9hdCBmbG9hdFZhbHVlOworICAgICAgICBpZiAodmFsdWUudHlwZSgpICE9IEMyVmFsdWU6Ok5PX0lOSVQgJiYgbVJldmVyc2UpIHsKKyAgICAgICAgICAgIHZhbHVlID0gbVJldmVyc2UodmFsdWUpOworICAgICAgICB9CisgICAgICAgIGlmICh2YWx1ZS5nZXQoJmludDMyVmFsdWUpKSB7CisgICAgICAgICAgICBpdGVtLnNldChpbnQzMlZhbHVlKTsKKyAgICAgICAgfSBlbHNlIGlmICh2YWx1ZS5nZXQoJnVpbnQzMlZhbHVlKSAmJiB1aW50MzJWYWx1ZSA8PSB1aW50MzJfdChJTlQzMl9NQVgpKSB7CisgICAgICAgICAgICAvLyBTREsgZG9lcyBub3Qgc3VwcG9ydCB1bnNpZ25lZCB2YWx1ZXMKKyAgICAgICAgICAgIGl0ZW0uc2V0KChpbnQzMl90KXVpbnQzMlZhbHVlKTsKKyAgICAgICAgfSBlbHNlIGlmICh2YWx1ZS5nZXQoJmludDY0VmFsdWUpKSB7CisgICAgICAgICAgICBpdGVtLnNldChpbnQ2NFZhbHVlKTsKKyAgICAgICAgfSBlbHNlIGlmICh2YWx1ZS5nZXQoJnVpbnQ2NFZhbHVlKSAmJiB1aW50NjRWYWx1ZSA8PSB1aW50NjRfdChJTlQ2NF9NQVgpKSB7CisgICAgICAgICAgICAvLyBTREsgZG9lcyBub3Qgc3VwcG9ydCB1bnNpZ25lZCB2YWx1ZXMKKyAgICAgICAgICAgIGl0ZW0uc2V0KChpbnQ2NF90KXVpbnQ2NFZhbHVlKTsKKyAgICAgICAgfSBlbHNlIGlmICh2YWx1ZS5nZXQoJmZsb2F0VmFsdWUpKSB7CisgICAgICAgICAgICBpdGVtLnNldChmbG9hdFZhbHVlKTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gaXRlbTsKKyAgICB9CisKKyAgICBEb21haW4gZG9tYWluKCkgY29uc3QgeyByZXR1cm4gbURvbWFpbjsgfQorICAgIHN0ZDo6c3RyaW5nIG1lZGlhS2V5KCkgY29uc3QgeyByZXR1cm4gbU1lZGlhS2V5OyB9CisgICAgc3RkOjpzdHJpbmcgcGF0aCgpIGNvbnN0IHsgcmV0dXJuIG1GaWVsZC5zaXplKCkgPyBtU3RydWN0ICsgJy4nICsgbUZpZWxkIDogbVN0cnVjdDsgfQorICAgIE1hcHBlciBtYXBwZXIoKSBjb25zdCB7IHJldHVybiBtTWFwcGVyOyB9CisgICAgTWFwcGVyIHJldmVyc2UoKSBjb25zdCB7IHJldHVybiBtUmV2ZXJzZTsgfQorCitwcml2YXRlOgorICAgIERvbWFpbiBtRG9tYWluOyAgICAgICAgIC8vLzwgcGFyYW1ldGVyIGRvbWFpbiAobWFzaykgY29udGFpbmluZyBwb3J0LCBraW5kIGFuZCBjb25maWcgZG9tYWlucworICAgIHN0ZDo6c3RyaW5nIG1NZWRpYUtleTsgIC8vLzwgU0RLIGtleQorICAgIEMyU3RyaW5nIG1TdHJ1Y3Q7ICAgICAgIC8vLzwgQ29kZWMgMi4wIHN0cnVjdCBuYW1lCisgICAgQzJTdHJpbmcgbUZpZWxkOyAgICAgICAgLy8vPCBDb2RlYyAyLjAgZmllbGQgbmFtZQorICAgIE1hcHBlciBtTWFwcGVyOyAgICAgICAgIC8vLzwgb3B0aW9uYWwgU0RLID0+IENvZGVjIDIuMCB2YWx1ZSBtYXBwZXIKKyAgICBNYXBwZXIgbVJldmVyc2U7ICAgICAgICAvLy88IG9wdGlvbmFsIENvZGVjIDIuMCA9PiBTREsgdmFsdWUgbWFwcGVyCit9OworCit0ZW1wbGF0ZSA8dHlwZW5hbWUgUE9SVCwgdHlwZW5hbWUgU1RSRUFNPgorQVN0cmluZyBRdWVyeU1lZGlhVHlwZUltcGwoCisgICAgICAgIGNvbnN0IHN0ZDo6c2hhcmVkX3B0cjxDb2RlYzJDbGllbnQ6OkNvbXBvbmVudD4gJmNvbXBvbmVudCkgeworICAgIEFTdHJpbmcgbWVkaWFUeXBlOworICAgIHN0ZDo6dmVjdG9yPHN0ZDo6dW5pcXVlX3B0cjxDMlBhcmFtPj4gcXVlcmllZDsKKyAgICBjMl9zdGF0dXNfdCBjMmVyciA9IGNvbXBvbmVudC0+cXVlcnkoCisgICAgICAgICAgICB7fSwgeyBQT1JUOjpQQVJBTV9UWVBFLCBTVFJFQU06OlBBUkFNX1RZUEUgfSwgQzJfRE9OVF9CTE9DSywgJnF1ZXJpZWQpOworICAgIGlmIChjMmVyciAhPSBDMl9PSyAmJiBxdWVyaWVkLnNpemUoKSA9PSAwKSB7CisgICAgICAgIEFMT0dEKCJRdWVyeSBtZWRpYSB0eXBlIGZhaWxlZCA9PiAlcyIsIGFzU3RyaW5nKGMyZXJyKSk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgUE9SVCAqcG9ydE1lZGlhVHlwZSA9CisgICAgICAgICAgICBQT1JUOjpGcm9tKHF1ZXJpZWRbMF0uZ2V0KCkpOworICAgICAgICBpZiAocG9ydE1lZGlhVHlwZSkgeworICAgICAgICAgICAgbWVkaWFUeXBlID0gQVN0cmluZygKKyAgICAgICAgICAgICAgICAgICAgcG9ydE1lZGlhVHlwZS0+bS52YWx1ZSwKKyAgICAgICAgICAgICAgICAgICAgc3Rybmxlbihwb3J0TWVkaWFUeXBlLT5tLnZhbHVlLCBwb3J0TWVkaWFUeXBlLT5mbGV4Q291bnQoKSkpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgU1RSRUFNICpzdHJlYW1NZWRpYVR5cGUgPSBTVFJFQU06OkZyb20ocXVlcmllZFswXS5nZXQoKSk7CisgICAgICAgICAgICBpZiAoc3RyZWFtTWVkaWFUeXBlKSB7CisgICAgICAgICAgICAgICAgbWVkaWFUeXBlID0gQVN0cmluZygKKyAgICAgICAgICAgICAgICAgICAgICAgIHN0cmVhbU1lZGlhVHlwZS0+bS52YWx1ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgIHN0cm5sZW4oc3RyZWFtTWVkaWFUeXBlLT5tLnZhbHVlLCBzdHJlYW1NZWRpYVR5cGUtPmZsZXhDb3VudCgpKSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgQUxPR0QoInJlYWQgbWVkaWEgdHlwZTogJXMiLCBtZWRpYVR5cGUuY19zdHIoKSk7CisgICAgfQorICAgIHJldHVybiBtZWRpYVR5cGU7Cit9CisKK0FTdHJpbmcgUXVlcnlNZWRpYVR5cGUoCisgICAgICAgIGJvb2wgaW5wdXQsIGNvbnN0IHN0ZDo6c2hhcmVkX3B0cjxDb2RlYzJDbGllbnQ6OkNvbXBvbmVudD4gJmNvbXBvbmVudCkgeworICAgIHR5cGVkZWYgQzJQb3J0TWVkaWFUeXBlU2V0dGluZyBQOworICAgIHR5cGVkZWYgQzJTdHJlYW1NZWRpYVR5cGVTZXR0aW5nIFM7CisgICAgaWYgKGlucHV0KSB7CisgICAgICAgIHJldHVybiBRdWVyeU1lZGlhVHlwZUltcGw8UDo6aW5wdXQsIFM6OmlucHV0Pihjb21wb25lbnQpOworICAgIH0gZWxzZSB7CisgICAgICAgIHJldHVybiBRdWVyeU1lZGlhVHlwZUltcGw8UDo6b3V0cHV0LCBTOjpvdXRwdXQ+KGNvbXBvbmVudCk7CisgICAgfQorfQorCit9ICAvLyBuYW1lc3BhY2UKKworLyoqCisgKiBTZXQgb2Ygc3RhbmRhcmQgcGFyYW1ldGVycyB1c2VkIGJ5IENDb2RlYyB0aGF0IGFyZSBleHBvc2VkIHRvIE1lZGlhQ29kZWMuCisgKi8KK3N0cnVjdCBTdGFuZGFyZFBhcmFtcyB7CisgICAgdHlwZWRlZiBDQ29kZWNDb25maWc6OkRvbWFpbiBEb21haW47CisKKyAgICAvLyBzdGFuZGFyZCAoTWVkaWFDb2RlYykgcGFyYW1zIGFyZSBrZXllZCBieSBtZWRpYSBmb3JtYXQga2V5CisgICAgdHlwZWRlZiBzdGQ6OnN0cmluZyBTZGtLZXk7CisKKyAgICAvLy8gdXNlZCB0byByZXR1cm4gcmVmZXJlbmNlIHRvIG5vIGNvbmZpZyBtYXBwZXJzIGluIGdldENvbmZpZ01hcHBlcnNGb3JTZGtLZXkKKyAgICBzdGF0aWMgY29uc3Qgc3RkOjp2ZWN0b3I8Q29uZmlnTWFwcGVyPiBOT19NQVBQRVJTOworCisgICAgLy8vIFJldHVybnMgQ29kZWMgMi4wIGVxdWl2YWxlbnQgcGFyYW1ldGVycyBmb3IgYW4gU0RLIGZvcm1hdCBrZXkuCisgICAgY29uc3Qgc3RkOjp2ZWN0b3I8Q29uZmlnTWFwcGVyPiAmZ2V0Q29uZmlnTWFwcGVyc0ZvclNka0tleShzdGQ6OnN0cmluZyBrZXkpIGNvbnN0IHsKKyAgICAgICAgYXV0byBpdCA9IG1Db25maWdNYXBwZXJzLmZpbmQoa2V5KTsKKyAgICAgICAgaWYgKGl0ID09IG1Db25maWdNYXBwZXJzLmVuZCgpKSB7CisgICAgICAgICAgICBBTE9HRCgibm8gYzIgZXF1aXZhbGVudHMgZm9yICVzIiwga2V5LmNfc3RyKCkpOworICAgICAgICAgICAgcmV0dXJuIE5PX01BUFBFUlM7CisgICAgICAgIH0KKyAgICAgICAgQUxPR1YoImZvdW5kICV6dSBlcXMgZm9yICVzIiwgaXQtPnNlY29uZC5zaXplKCksIGtleS5jX3N0cigpKTsKKyAgICAgICAgcmV0dXJuIGl0LT5zZWNvbmQ7CisgICAgfQorCisgICAgLyoqCisgICAgICogQWRkcyBhIFNESyA8PT4gQ29kZWMgMi4wIHBhcmFtZXRlciBtYXBwaW5nLiBNdWx0aXBsZSBDb2RlYyAyLjAgcGFyYW1ldGVycyBtYXkgbWFwIHRvIGEKKyAgICAgKiBzaW5nbGUgU0RLIGtleSwgaW4gd2hpY2ggY2FzZSB0aGV5IHNoYWxsIGJlIG9yZGVyZWQgZnJvbSBsZWFzdCBhdXRob3JpdGF0aXZlIHRvIG1vc3QKKyAgICAgKiBhdXRob3JpdGF0aXZlLiBXaGVuIGNvbnN0cnVjdGluZyBTREsgZm9ybWF0cywgdGhlIGxhc3QgbWFwcGVkIENvZGVjIDIuMCBwYXJhbWV0ZXIgdGhhdAorICAgICAqIGlzIHN1cHBvcnRlZCBieSB0aGUgY29tcG9uZW50IHdpbGwgZGV0ZXJtaW5lIHRoZSBleHBvc2VkIHZhbHVlLiAoVE9ETzogcGVyaGFwcyByZXN0cmljdCB0aGlzCisgICAgICogYnkgZG9tYWluLikKKyAgICAgKi8KKyAgICB2b2lkIGFkZChjb25zdCBDb25maWdNYXBwZXIgJmNtKSB7CisgICAgICAgIGF1dG8gaXQgPSBtQ29uZmlnTWFwcGVycy5maW5kKGNtLm1lZGlhS2V5KCkpOworICAgICAgICBBTE9HVigiJWMlYyVjJWMgJWMlYyVjICUwNHggJTlzICVzID0+ICVzIiwKKyAgICAgICAgICAgICAgKChjbS5kb21haW4oKSAmIERvbWFpbjo6SVNfSU5QVVQpID8gJ0knIDogJyAnKSwKKyAgICAgICAgICAgICAgKChjbS5kb21haW4oKSAmIERvbWFpbjo6SVNfT1VUUFVUKSA/ICdPJyA6ICcgJyksCisgICAgICAgICAgICAgICgoY20uZG9tYWluKCkgJiBEb21haW46OklTX0NPREVEKSA/ICdDJyA6ICcgJyksCisgICAgICAgICAgICAgICgoY20uZG9tYWluKCkgJiBEb21haW46OklTX1JBVykgPyAnUicgOiAnICcpLAorICAgICAgICAgICAgICAoKGNtLmRvbWFpbigpICYgRG9tYWluOjpJU19DT05GSUcpID8gJ2MnIDogJyAnKSwKKyAgICAgICAgICAgICAgKChjbS5kb21haW4oKSAmIERvbWFpbjo6SVNfUEFSQU0pID8gJ3AnIDogJyAnKSwKKyAgICAgICAgICAgICAgKChjbS5kb21haW4oKSAmIERvbWFpbjo6SVNfUkVBRCkgPyAncicgOiAnICcpLAorICAgICAgICAgICAgICBjbS5kb21haW4oKSwKKyAgICAgICAgICAgICAgaXQgPT0gbUNvbmZpZ01hcHBlcnMuZW5kKCkgPyAiYWRkaW5nIiA6ICJleHRlbmRpbmciLAorICAgICAgICAgICAgICBjbS5tZWRpYUtleSgpLmNfc3RyKCksIGNtLnBhdGgoKS5jX3N0cigpKTsKKyAgICAgICAgaWYgKGl0ID09IG1Db25maWdNYXBwZXJzLmVuZCgpKSB7CisgICAgICAgICAgICBzdGQ6OnZlY3RvcjxDb25maWdNYXBwZXI+IGVxcyA9IHsgY20gfTsKKyAgICAgICAgICAgIG1Db25maWdNYXBwZXJzLmVtcGxhY2UoY20ubWVkaWFLZXkoKSwgZXFzKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGl0LT5zZWNvbmQucHVzaF9iYWNrKGNtKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIC8qKgorICAgICAqIFJldHVybnMgYWxsIHBhdGhzIGZvciBhIHNwZWNpZmljIGRvbWFpbi4KKyAgICAgKgorICAgICAqIFxwYXJhbSBhbnkgbWF4aW11bSBkb21haW4gbWFzay4gUmV0dXJuZWQgcGFyYW1ldGVycyBtdXN0IG1hdGNoIGF0IGxlYXN0IG9uZSBvZiB0aGUgZG9tYWlucworICAgICAqICAgICAgICAgICAgaW4gdGhlIG1hc2suCisgICAgICogXHBhcmFtIGFsbCBtaW5pbXVtIGRvbWFpbiBtYXNrLiBSZXR1cm5lZCBwYXJhbWV0ZXJzIG11c3QgbWF0Y2ggYWxsIG9mIHRoZSBkb21haW5zIGluIHRoZQorICAgICAqICAgICAgICAgICAgbWFzay4gVGhpcyBpcyByZXN0cmljdGVkIHRvIHRoZSBiaXRzIG9mIHRoZSBtYXhpbXVtIG1hc2suCisgICAgICovCisgICAgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+IGdldFBhdGhzRm9yRG9tYWluKAorICAgICAgICAgICAgRG9tYWluIGFueSwgRG9tYWluIGFsbCA9IERvbWFpbjo6QUxMKSBjb25zdCB7CisgICAgICAgIHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiByZXM7CisgICAgICAgIGZvciAoY29uc3Qgc3RkOjpwYWlyPHN0ZDo6c3RyaW5nLCBzdGQ6OnZlY3RvcjxDb25maWdNYXBwZXI+PiAmZWwgOiBtQ29uZmlnTWFwcGVycykgeworICAgICAgICAgICAgZm9yIChjb25zdCBDb25maWdNYXBwZXIgJmNtIDogZWwuc2Vjb25kKSB7CisgICAgICAgICAgICAgICAgQUxPR1YoImZpbHRlcmluZyAlcyAleCAleCAleCAleCIsIGNtLnBhdGgoKS5jX3N0cigpLCBjbS5kb21haW4oKSwgYW55LAorICAgICAgICAgICAgICAgICAgICAgICAgKGNtLmRvbWFpbigpICYgYW55KSwgKGNtLmRvbWFpbigpICYgYW55ICYgYWxsKSk7CisgICAgICAgICAgICAgICAgaWYgKChjbS5kb21haW4oKSAmIGFueSkgJiYgKChjbS5kb21haW4oKSAmIGFueSAmIGFsbCkgPT0gKGFueSAmIGFsbCkpKSB7CisgICAgICAgICAgICAgICAgICAgIHJlcy5wdXNoX2JhY2soY20ucGF0aCgpKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHJlczsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBSZXR1cm5zIFNESyA8PT4gQ29kZWMgMi4wIG1hcHBpbmdzLgorICAgICAqCisgICAgICogVE9ETzogcmVwbGFjZSB0aGVzZSB3aXRoIGJldHRlciBtZXRob2RzIGFzIHRoaXMgZXhwb3NlcyB0aGUgaW5uZXIgc3RydWN0dXJlLgorICAgICAqLworICAgIGNvbnN0IHN0ZDo6bWFwPFNka0tleSwgc3RkOjp2ZWN0b3I8Q29uZmlnTWFwcGVyPj4gZ2V0S2V5cygpIGNvbnN0IHsKKyAgICAgICAgcmV0dXJuIG1Db25maWdNYXBwZXJzOworICAgIH0KKworcHJpdmF0ZToKKyAgICBzdGQ6Om1hcDxTZGtLZXksIHN0ZDo6dmVjdG9yPENvbmZpZ01hcHBlcj4+IG1Db25maWdNYXBwZXJzOworfTsKKworY29uc3Qgc3RkOjp2ZWN0b3I8Q29uZmlnTWFwcGVyPiBTdGFuZGFyZFBhcmFtczo6Tk9fTUFQUEVSUzsKKworCitDQ29kZWNDb25maWc6OkNDb2RlY0NvbmZpZygpCisgICAgOiBtSW5wdXRGb3JtYXQobmV3IEFNZXNzYWdlKSwKKyAgICAgIG1PdXRwdXRGb3JtYXQobmV3IEFNZXNzYWdlKSwKKyAgICAgIG1Vc2luZ1N1cmZhY2UoZmFsc2UpIHsgfQorCit2b2lkIENDb2RlY0NvbmZpZzo6aW5pdGlhbGl6ZVN0YW5kYXJkUGFyYW1zKCkgeworICAgIHR5cGVkZWYgRG9tYWluIEQ7CisgICAgbVN0YW5kYXJkUGFyYW1zID0gc3RkOjptYWtlX3NoYXJlZDxTdGFuZGFyZFBhcmFtcz4oKTsKKyAgICBzdGQ6OmZ1bmN0aW9uPHZvaWQoY29uc3QgQ29uZmlnTWFwcGVyICYpPiBhZGQgPQorICAgICAgICBbcGFyYW1zID0gbVN0YW5kYXJkUGFyYW1zXShjb25zdCBDb25maWdNYXBwZXIgJmNtKSB7CisgICAgICAgICAgICBwYXJhbXMtPmFkZChjbSk7CisgICAgfTsKKyAgICBzdGQ6OmZ1bmN0aW9uPHZvaWQoY29uc3QgQ29uZmlnTWFwcGVyICYpPiBkZXByZWNhdGVkID0gYWRkOworCisgICAgLy8gYWxsb3cgaW50MzIgb3IgZmxvYXQgU0RLIHZhbHVlcyBhbmQgcmVwcmVzZW50IHRoZW0gYXMgZmxvYXQKKyAgICBDb25maWdNYXBwZXI6Ok1hcHBlciBtYWtlRmxvYXQgPSBbXShDMlZhbHVlIHYpIC0+IEMyVmFsdWUgeworICAgICAgICAvLyBjb252ZXJ0IGZyb20gaTMyIHRvIGZsb2F0CisgICAgICAgIGludDMyX3QgaTMyVmFsdWU7CisgICAgICAgIGZsb2F0IGZwVmFsdWU7CisgICAgICAgIGlmICh2LmdldCgmaTMyVmFsdWUpKSB7CisgICAgICAgICAgICByZXR1cm4gKGZsb2F0KWkzMlZhbHVlOworICAgICAgICB9IGVsc2UgaWYgKHYuZ2V0KCZmcFZhbHVlKSkgeworICAgICAgICAgICAgcmV0dXJuIGZwVmFsdWU7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIEMyVmFsdWUoKTsKKyAgICB9OworCisgICAgQ29uZmlnTWFwcGVyOjpNYXBwZXIgbmVnYXRlID0gW10oQzJWYWx1ZSB2KSAtPiBDMlZhbHVlIHsKKyAgICAgICAgaW50MzJfdCB2YWx1ZTsKKyAgICAgICAgaWYgKHYuZ2V0KCZ2YWx1ZSkpIHsKKyAgICAgICAgICAgIHJldHVybiAtdmFsdWU7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIEMyVmFsdWUoKTsKKyAgICB9OworCisgICAgYWRkKENvbmZpZ01hcHBlcihLRVlfTUlNRSwgICAgIEMyX1BBUkFNS0VZX0lOUFVUX01FRElBX1RZUEUsICAgICJ2YWx1ZSIpCisgICAgICAgIC5saW1pdFRvKEQ6OklOUFVUICYgRDo6UkVBRCkpOworICAgIGFkZChDb25maWdNYXBwZXIoS0VZX01JTUUsICAgICBDMl9QQVJBTUtFWV9PVVRQVVRfTUVESUFfVFlQRSwgICAidmFsdWUiKQorICAgICAgICAubGltaXRUbyhEOjpPVVRQVVQgJiBEOjpSRUFEKSk7CisKKyAgICBhZGQoQ29uZmlnTWFwcGVyKEtFWV9CSVRfUkFURSwgQzJfUEFSQU1LRVlfQklUUkFURSwgInZhbHVlIikKKyAgICAgICAgLmxpbWl0VG8oRDo6RU5DT0RFUiAmIEQ6Ok9VVFBVVCkpOworICAgIC8vIHdlIGFsc28gbmVlZCB0byBwdXQgdGhlIGJpdHJhdGUgaW4gdGhlIG1heCBiaXRyYXRlIGZpZWxkCisgICAgYWRkKENvbmZpZ01hcHBlcihLRVlfTUFYX0JJVF9SQVRFLCBDMl9QQVJBTUtFWV9CSVRSQVRFLCAidmFsdWUiKQorICAgICAgICAubGltaXRUbyhEOjpFTkNPREVSICYgRDo6UkVBRCAmIEQ6Ok9VVFBVVCkpOworICAgIGFkZChDb25maWdNYXBwZXIoUEFSQU1FVEVSX0tFWV9WSURFT19CSVRSQVRFLCBDMl9QQVJBTUtFWV9CSVRSQVRFLCAidmFsdWUiKQorICAgICAgICAubGltaXRUbyhEOjpFTkNPREVSICYgRDo6VklERU8gJiBEOjpQQVJBTSkpOworICAgIGFkZChDb25maWdNYXBwZXIoS0VZX0JJVFJBVEVfTU9ERSwgQzJfUEFSQU1LRVlfQklUUkFURV9NT0RFLCAidmFsdWUiKQorICAgICAgICAubGltaXRUbyhEOjpFTkNPREVSICYgRDo6Q09ERUQpCisgICAgICAgIC53aXRoTWFwcGVyKFtdKEMyVmFsdWUgdikgLT4gQzJWYWx1ZSB7CisgICAgICAgICAgICBpbnQzMl90IHZhbHVlOworICAgICAgICAgICAgQzJDb25maWc6OmJpdHJhdGVfbW9kZV90IG1vZGU7CisgICAgICAgICAgICBpZiAodi5nZXQoJnZhbHVlKSAmJiBDMk1hcHBlcjo6bWFwKHZhbHVlLCAmbW9kZSkpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gbW9kZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJldHVybiBDMlZhbHVlKCk7CisgICAgICAgIH0pKTsKKyAgICAvLyByZW1vdmUgd2hlbiBjb2RlY3Mgc3dpdGNoIHRvIFBBUkFNS0VZIGFuZCBuZXcgbW9kZXMKKyAgICBkZXByZWNhdGVkKENvbmZpZ01hcHBlcihLRVlfQklUUkFURV9NT0RFLCAiY29kZWQuYml0cmF0ZS1tb2RlIiwgInZhbHVlIikKKyAgICAgICAgICAgICAgIC5saW1pdFRvKEQ6OkVOQ09ERVIpKTsKKyAgICBhZGQoQ29uZmlnTWFwcGVyKEtFWV9GUkFNRV9SQVRFLCBDMl9QQVJBTUtFWV9GUkFNRV9SQVRFLCAidmFsdWUiKQorICAgICAgICAubGltaXRUbyhEOjpWSURFTykKKyAgICAgICAgLndpdGhNYXBwZXJzKG1ha2VGbG9hdCwgW10oQzJWYWx1ZSB2KSAtPiBDMlZhbHVlIHsKKyAgICAgICAgICAgIC8vIHJlYWQgYmFjayBhbHdheXMgYXMgaW50CisgICAgICAgICAgICBmbG9hdCB2YWx1ZTsKKyAgICAgICAgICAgIGlmICh2LmdldCgmdmFsdWUpKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIChpbnQzMl90KXZhbHVlOworICAgICAgICAgICAgfQorICAgICAgICAgICAgcmV0dXJuIEMyVmFsdWUoKTsKKyAgICAgICAgfSkpOworCisgICAgYWRkKENvbmZpZ01hcHBlcihLRVlfTUFYX0lOUFVUX1NJWkUsIEMyX1BBUkFNS0VZX0lOUFVUX01BWF9CVUZGRVJfU0laRSwgInZhbHVlIikKKyAgICAgICAgLmxpbWl0VG8oRDo6SU5QVVQpKTsKKyAgICAvLyByZW1vdmUgd2hlbiBjb2RlY3Mgc3dpdGNoIHRvIFBBUkFNS0VZCisgICAgZGVwcmVjYXRlZChDb25maWdNYXBwZXIoS0VZX01BWF9JTlBVVF9TSVpFLCAiY29kZWQubWF4LWZyYW1lLXNpemUiLCAidmFsdWUiKQorICAgICAgICAgICAgICAgLmxpbWl0VG8oRDo6SU5QVVQpKTsKKworICAgIC8vIFJvdGF0aW9uCisgICAgLy8gTm90ZTogU0RLIHJvdGF0aW9uIGlzIGNsb2NrLXdpc2UsIHdoaWxlIEMyIHJvdGF0aW9uIGlzIGNvdW50ZXItY2xvY2std2lzZQorICAgIGFkZChDb25maWdNYXBwZXIoS0VZX1JPVEFUSU9OLCBDMl9QQVJBTUtFWV9WVUlfUk9UQVRJT04sICJ2YWx1ZSIpCisgICAgICAgIC5saW1pdFRvKEQ6OlZJREVPICYgRDo6Q09ERUQpCisgICAgICAgIC53aXRoTWFwcGVycyhuZWdhdGUsIG5lZ2F0ZSkpOworICAgIGFkZChDb25maWdNYXBwZXIoS0VZX1JPVEFUSU9OLCBDMl9QQVJBTUtFWV9ST1RBVElPTiwgInZhbHVlIikKKyAgICAgICAgLmxpbWl0VG8oRDo6VklERU8gJiBEOjpSQVcpCisgICAgICAgIC53aXRoTWFwcGVycyhuZWdhdGUsIG5lZ2F0ZSkpOworCisgICAgLy8gYW5kcm9pZCAndmlkZW8tc2NhbGluZycKKyAgICBhZGQoQ29uZmlnTWFwcGVyKCJhbmRyb2lkLl92aWRlby1zY2FsaW5nIiwgQzJfUEFSQU1LRVlfU1VSRkFDRV9TQ0FMSU5HX01PREUsICJ2YWx1ZSIpCisgICAgICAgIC5saW1pdFRvKEQ6OlZJREVPICYgRDo6REVDT0RFUiAmIEQ6OlJBVykpOworCisgICAgLy8gQ29sb3IgQXNwZWN0cworICAgIC8vCisgICAgLy8gY29uZmlndXJlIGRlZmF1bHQgZm9yIGRlY29kZXJzCisgICAgYWRkKENvbmZpZ01hcHBlcihLRVlfQ09MT1JfUkFOR0UsICAgICAgIEMyX1BBUkFNS0VZX0RFRkFVTFRfQ09MT1JfQVNQRUNUUywgICAicmFuZ2UiKQorICAgICAgICAubGltaXRUbygoRDo6VklERU8gfCBEOjpJTUFHRSkgJiBEOjpERUNPREVSICAmIEQ6OkNPREVEICYgKEQ6OkNPTkZJRyB8IEQ6OlBBUkFNKSkKKyAgICAgICAgLndpdGhDMk1hcHBlcnM8QzJDb2xvcjo6cmFuZ2VfdD4oKSk7CisgICAgYWRkKENvbmZpZ01hcHBlcihLRVlfQ09MT1JfVFJBTlNGRVIsICAgIEMyX1BBUkFNS0VZX0RFRkFVTFRfQ09MT1JfQVNQRUNUUywgICAidHJhbnNmZXIiKQorICAgICAgICAubGltaXRUbygoRDo6VklERU8gfCBEOjpJTUFHRSkgJiBEOjpERUNPREVSICAmIEQ6OkNPREVEICYgKEQ6OkNPTkZJRyB8IEQ6OlBBUkFNKSkKKyAgICAgICAgLndpdGhDMk1hcHBlcnM8QzJDb2xvcjo6dHJhbnNmZXJfdD4oKSk7CisgICAgYWRkKENvbmZpZ01hcHBlcigiY29sb3ItcHJpbWFyaWVzIiwgICAgIEMyX1BBUkFNS0VZX0RFRkFVTFRfQ09MT1JfQVNQRUNUUywgICAicHJpbWFyaWVzIikKKyAgICAgICAgLmxpbWl0VG8oKEQ6OlZJREVPIHwgRDo6SU1BR0UpICYgRDo6REVDT0RFUiAgJiBEOjpDT0RFRCAmIChEOjpDT05GSUcgfCBEOjpQQVJBTSkpKTsKKyAgICBhZGQoQ29uZmlnTWFwcGVyKCJjb2xvci1tYXRyaXgiLCAgICAgICAgQzJfUEFSQU1LRVlfREVGQVVMVF9DT0xPUl9BU1BFQ1RTLCAgICJtYXRyaXgiKQorICAgICAgICAubGltaXRUbygoRDo6VklERU8gfCBEOjpJTUFHRSkgJiBEOjpERUNPREVSICAmIEQ6OkNPREVEICYgKEQ6OkNPTkZJRyB8IEQ6OlBBUkFNKSkpOworCisgICAgLy8gcmVhZCBiYWNrIGZpbmFsIGZvciBkZWNvZGVyIG91dHB1dCAoYWxzbywgY29uZmlndXJlIGZpbmFsIGFzcGVjdHMgYXMgd2VsbC4gVGhpcyBzaG91bGQgYmUKKyAgICAvLyBvdmVyd3JpdHRlbiBiYXNlZCBvbiBjb2RlZC9kZWZhdWx0IHZhbHVlcyBpZiBjb21wb25lbnQgc3VwcG9ydHMgY29sb3IgYXNwZWN0cywgYnV0IGlzIHVzZWQKKyAgICAvLyBhcyBmaW5hbCB2YWx1ZXMgaWYgY29tcG9uZW50IGRvZXMgbm90IHN1cHBvcnQgYXNwZWN0cyBhdCBhbGwpCisgICAgYWRkKENvbmZpZ01hcHBlcihLRVlfQ09MT1JfUkFOR0UsICAgICAgIEMyX1BBUkFNS0VZX0NPTE9SX0FTUEVDVFMsICAgInJhbmdlIikKKyAgICAgICAgLmxpbWl0VG8oKEQ6OlZJREVPIHwgRDo6SU1BR0UpICYgRDo6REVDT0RFUiAgJiBEOjpSQVcpCisgICAgICAgIC53aXRoQzJNYXBwZXJzPEMyQ29sb3I6OnJhbmdlX3Q+KCkpOworICAgIGFkZChDb25maWdNYXBwZXIoS0VZX0NPTE9SX1RSQU5TRkVSLCAgICBDMl9QQVJBTUtFWV9DT0xPUl9BU1BFQ1RTLCAgICJ0cmFuc2ZlciIpCisgICAgICAgIC5saW1pdFRvKChEOjpWSURFTyB8IEQ6OklNQUdFKSAmIEQ6OkRFQ09ERVIgICYgRDo6UkFXKQorICAgICAgICAud2l0aEMyTWFwcGVyczxDMkNvbG9yOjp0cmFuc2Zlcl90PigpKTsKKyAgICBhZGQoQ29uZmlnTWFwcGVyKCJjb2xvci1wcmltYXJpZXMiLCAgICAgQzJfUEFSQU1LRVlfQ09MT1JfQVNQRUNUUywgICAicHJpbWFyaWVzIikKKyAgICAgICAgLmxpbWl0VG8oKEQ6OlZJREVPIHwgRDo6SU1BR0UpICYgRDo6REVDT0RFUiAgJiBEOjpSQVcpKTsKKyAgICBhZGQoQ29uZmlnTWFwcGVyKCJjb2xvci1tYXRyaXgiLCAgICAgICAgQzJfUEFSQU1LRVlfQ09MT1JfQVNQRUNUUywgICAibWF0cml4IikKKyAgICAgICAgLmxpbWl0VG8oKEQ6OlZJREVPIHwgRDo6SU1BR0UpICYgRDo6REVDT0RFUiAgJiBEOjpSQVcpKTsKKworICAgIC8vIGNvbmZpZ3VyZSBzb3VyY2UgYXNwZWN0cyBmb3IgZW5jb2RlcnMgYW5kIHJlYWQgdGhlbSBiYWNrIG9uIHRoZSBjb2RlZCghKSBwb3J0LgorICAgIC8vIFRoaXMgaXMgdG8gZW5zdXJlIG11eGluZyB0aGUgZGVzaXJlZCBhc3BlY3RzIGludG8gdGhlIGNvbnRhaW5lci4KKyAgICBhZGQoQ29uZmlnTWFwcGVyKEtFWV9DT0xPUl9SQU5HRSwgICAgICAgQzJfUEFSQU1LRVlfQ09MT1JfQVNQRUNUUywgICAicmFuZ2UiKQorICAgICAgICAubGltaXRUbygoRDo6VklERU8gfCBEOjpJTUFHRSkgJiBEOjpFTkNPREVSICAmIEQ6OkNPREVEKQorICAgICAgICAud2l0aEMyTWFwcGVyczxDMkNvbG9yOjpyYW5nZV90PigpKTsKKyAgICBhZGQoQ29uZmlnTWFwcGVyKEtFWV9DT0xPUl9UUkFOU0ZFUiwgICAgQzJfUEFSQU1LRVlfQ09MT1JfQVNQRUNUUywgICAidHJhbnNmZXIiKQorICAgICAgICAubGltaXRUbygoRDo6VklERU8gfCBEOjpJTUFHRSkgJiBEOjpFTkNPREVSICAmIEQ6OkNPREVEKQorICAgICAgICAud2l0aEMyTWFwcGVyczxDMkNvbG9yOjp0cmFuc2Zlcl90PigpKTsKKyAgICBhZGQoQ29uZmlnTWFwcGVyKCJjb2xvci1wcmltYXJpZXMiLCAgICAgQzJfUEFSQU1LRVlfQ09MT1JfQVNQRUNUUywgICAicHJpbWFyaWVzIikKKyAgICAgICAgLmxpbWl0VG8oKEQ6OlZJREVPIHwgRDo6SU1BR0UpICYgRDo6RU5DT0RFUiAgJiBEOjpDT0RFRCkpOworICAgIGFkZChDb25maWdNYXBwZXIoImNvbG9yLW1hdHJpeCIsICAgICAgICBDMl9QQVJBTUtFWV9DT0xPUl9BU1BFQ1RTLCAgICJtYXRyaXgiKQorICAgICAgICAubGltaXRUbygoRDo6VklERU8gfCBEOjpJTUFHRSkgJiBEOjpFTkNPREVSICAmIEQ6OkNPREVEKSk7CisKKyAgICAvLyByZWFkIGJhY2sgY29kZWQgYXNwZWN0cyBmb3IgZW5jb2RlcnMgKG9uIHRoZSByYXcgcG9ydCksIGJ1dCBhbHNvIGNvbmZpZ3VyZQorICAgIC8vIGRlc2lyZWQgYXNwZWN0cyBoZXJlLgorICAgIGFkZChDb25maWdNYXBwZXIoS0VZX0NPTE9SX1JBTkdFLCAgICAgICBDMl9QQVJBTUtFWV9WVUlfQ09MT1JfQVNQRUNUUywgICAicmFuZ2UiKQorICAgICAgICAubGltaXRUbygoRDo6VklERU8gfCBEOjpJTUFHRSkgJiBEOjpFTkNPREVSICAmIEQ6OlJBVykKKyAgICAgICAgLndpdGhDMk1hcHBlcnM8QzJDb2xvcjo6cmFuZ2VfdD4oKSk7CisgICAgYWRkKENvbmZpZ01hcHBlcihLRVlfQ09MT1JfVFJBTlNGRVIsICAgIEMyX1BBUkFNS0VZX1ZVSV9DT0xPUl9BU1BFQ1RTLCAgICJ0cmFuc2ZlciIpCisgICAgICAgIC5saW1pdFRvKChEOjpWSURFTyB8IEQ6OklNQUdFKSAmIEQ6OkVOQ09ERVIgICYgRDo6UkFXKQorICAgICAgICAud2l0aEMyTWFwcGVyczxDMkNvbG9yOjp0cmFuc2Zlcl90PigpKTsKKyAgICBhZGQoQ29uZmlnTWFwcGVyKCJjb2xvci1wcmltYXJpZXMiLCAgICAgQzJfUEFSQU1LRVlfVlVJX0NPTE9SX0FTUEVDVFMsICAgInByaW1hcmllcyIpCisgICAgICAgIC5saW1pdFRvKChEOjpWSURFTyB8IEQ6OklNQUdFKSAmIEQ6OkVOQ09ERVIgICYgRDo6UkFXKSk7CisgICAgYWRkKENvbmZpZ01hcHBlcigiY29sb3ItbWF0cml4IiwgICAgICAgIEMyX1BBUkFNS0VZX1ZVSV9DT0xPUl9BU1BFQ1RTLCAgICJtYXRyaXgiKQorICAgICAgICAubGltaXRUbygoRDo6VklERU8gfCBEOjpJTUFHRSkgJiBEOjpFTkNPREVSICAmIEQ6OlJBVykpOworCisgICAgLy8gRGF0YXNwYWNlCisgICAgYWRkKENvbmZpZ01hcHBlcigiYW5kcm9pZC5fZGF0YXNwYWNlIiwgQzJfUEFSQU1LRVlfREFUQV9TUEFDRSwgInZhbHVlIikKKyAgICAgICAgLmxpbWl0VG8oKEQ6OlZJREVPIHwgRDo6SU1BR0UpICYgRDo6UkFXKSk7CisKKyAgICAvLyBIRFIKKyAgICBhZGQoQ29uZmlnTWFwcGVyKCJzbXB0ZTIwODYucmVkLngiLCBDMl9QQVJBTUtFWV9IRFJfU1RBVElDX0lORk8sICJtYXN0ZXJpbmcucmVkLngiKQorICAgICAgICAubGltaXRUbygoRDo6VklERU8gfCBEOjpJTUFHRSkgJiBEOjpSQVcpKTsKKyAgICBhZGQoQ29uZmlnTWFwcGVyKCJzbXB0ZTIwODYucmVkLnkiLCBDMl9QQVJBTUtFWV9IRFJfU1RBVElDX0lORk8sICJtYXN0ZXJpbmcucmVkLnkiKQorICAgICAgICAubGltaXRUbygoRDo6VklERU8gfCBEOjpJTUFHRSkgJiBEOjpSQVcpKTsKKyAgICBhZGQoQ29uZmlnTWFwcGVyKCJzbXB0ZTIwODYuZ3JlZW4ueCIsIEMyX1BBUkFNS0VZX0hEUl9TVEFUSUNfSU5GTywgIm1hc3RlcmluZy5ncmVlbi54IikKKyAgICAgICAgLmxpbWl0VG8oKEQ6OlZJREVPIHwgRDo6SU1BR0UpICYgRDo6UkFXKSk7CisgICAgYWRkKENvbmZpZ01hcHBlcigic21wdGUyMDg2LmdyZWVuLnkiLCBDMl9QQVJBTUtFWV9IRFJfU1RBVElDX0lORk8sICJtYXN0ZXJpbmcuZ3JlZW4ueSIpCisgICAgICAgIC5saW1pdFRvKChEOjpWSURFTyB8IEQ6OklNQUdFKSAmIEQ6OlJBVykpOworICAgIGFkZChDb25maWdNYXBwZXIoInNtcHRlMjA4Ni5ibHVlLngiLCBDMl9QQVJBTUtFWV9IRFJfU1RBVElDX0lORk8sICJtYXN0ZXJpbmcuYmx1ZS54IikKKyAgICAgICAgLmxpbWl0VG8oKEQ6OlZJREVPIHwgRDo6SU1BR0UpICYgRDo6UkFXKSk7CisgICAgYWRkKENvbmZpZ01hcHBlcigic21wdGUyMDg2LmJsdWUueSIsIEMyX1BBUkFNS0VZX0hEUl9TVEFUSUNfSU5GTywgIm1hc3RlcmluZy5ibHVlLnkiKQorICAgICAgICAubGltaXRUbygoRDo6VklERU8gfCBEOjpJTUFHRSkgJiBEOjpSQVcpKTsKKyAgICBhZGQoQ29uZmlnTWFwcGVyKCJzbXB0ZTIwODYud2hpdGUueCIsIEMyX1BBUkFNS0VZX0hEUl9TVEFUSUNfSU5GTywgIm1hc3RlcmluZy53aGl0ZS54IikKKyAgICAgICAgLmxpbWl0VG8oKEQ6OlZJREVPIHwgRDo6SU1BR0UpICYgRDo6UkFXKSk7CisgICAgYWRkKENvbmZpZ01hcHBlcigic21wdGUyMDg2LndoaXRlLnkiLCBDMl9QQVJBTUtFWV9IRFJfU1RBVElDX0lORk8sICJtYXN0ZXJpbmcud2hpdGUueSIpCisgICAgICAgIC5saW1pdFRvKChEOjpWSURFTyB8IEQ6OklNQUdFKSAmIEQ6OlJBVykpOworICAgIGFkZChDb25maWdNYXBwZXIoInNtcHRlMjA4Ni5tYXgtbHVtaW5hbmNlIiwgQzJfUEFSQU1LRVlfSERSX1NUQVRJQ19JTkZPLCAibWFzdGVyaW5nLm1heC1sdW1pbmFuY2UiKQorICAgICAgICAubGltaXRUbygoRDo6VklERU8gfCBEOjpJTUFHRSkgJiBEOjpSQVcpKTsKKyAgICBhZGQoQ29uZmlnTWFwcGVyKCJzbXB0ZTIwODYubWluLWx1bWluYW5jZSIsIEMyX1BBUkFNS0VZX0hEUl9TVEFUSUNfSU5GTywgIm1hc3RlcmluZy5taW4tbHVtaW5hbmNlIikKKyAgICAgICAgLmxpbWl0VG8oKEQ6OlZJREVPIHwgRDo6SU1BR0UpICYgRDo6UkFXKSk7CisgICAgYWRkKENvbmZpZ01hcHBlcigiY3RhODYxLm1heC1jbGwiLCBDMl9QQVJBTUtFWV9IRFJfU1RBVElDX0lORk8sICJtYXgtY2xsIikKKyAgICAgICAgLmxpbWl0VG8oKEQ6OlZJREVPIHwgRDo6SU1BR0UpICYgRDo6UkFXKSk7CisgICAgYWRkKENvbmZpZ01hcHBlcigiY3RhODYxLm1heC1mYWxsIiwgQzJfUEFSQU1LRVlfSERSX1NUQVRJQ19JTkZPLCAibWF4LWZhbGwiKQorICAgICAgICAubGltaXRUbygoRDo6VklERU8gfCBEOjpJTUFHRSkgJiBEOjpSQVcpKTsKKworICAgIGFkZChDb25maWdNYXBwZXIoc3RkOjpzdHJpbmcoS0VZX0ZFQVRVUkVfKSArIEZFQVRVUkVfU2VjdXJlUGxheWJhY2ssCisgICAgICAgICAgICAgICAgICAgICBDMl9QQVJBTUtFWV9TRUNVUkVfTU9ERSwgInZhbHVlIikpOworCisgICAgYWRkKENvbmZpZ01hcHBlcigicHJlcGVuZC1zcHMtcHBzLXRvLWlkci1mcmFtZXMiLAorICAgICAgICAgICAgICAgICAgICAgQzJfUEFSQU1LRVlfUFJFUEVORF9IRUFERVJfTU9ERSwgInZhbHVlIikKKyAgICAgICAgLmxpbWl0VG8oRDo6RU5DT0RFUiAmIEQ6OlZJREVPKQorICAgICAgICAud2l0aE1hcHBlcihbXShDMlZhbHVlIHYpIC0+IEMyVmFsdWUgeworICAgICAgICAgICAgaW50MzJfdCB2YWx1ZTsKKyAgICAgICAgICAgIGlmICh2LmdldCgmdmFsdWUpICYmIHZhbHVlKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIEMyVmFsdWUoQzJDb25maWc6OlBSRVBFTkRfSEVBREVSX1RPX0FMTF9TWU5DKTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIEMyVmFsdWUoQzJDb25maWc6OlBSRVBFTkRfSEVBREVSX1RPX05PTkUpOworICAgICAgICAgICAgfQorICAgICAgICB9KSk7CisgICAgLy8gcmVtb3ZlIHdoZW4gY29kZWNzIHN3aXRjaCB0byBQQVJBTUtFWQorICAgIGRlcHJlY2F0ZWQoQ29uZmlnTWFwcGVyKCJwcmVwZW5kLXNwcy1wcHMtdG8taWRyLWZyYW1lcyIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgImNvZGluZy5hZGQtY3NkLXRvLXN5bmMtZnJhbWVzIiwgInZhbHVlIikKKyAgICAgICAgICAgICAgIC5saW1pdFRvKEQ6OkVOQ09ERVIgJiBEOjpWSURFTykpOworICAgIC8vIGNvbnZlcnQgdG8gdGltZXN0YW1wIGJhc2UKKyAgICBhZGQoQ29uZmlnTWFwcGVyKEtFWV9JX0ZSQU1FX0lOVEVSVkFMLCBDMl9QQVJBTUtFWV9TWU5DX0ZSQU1FX0lOVEVSVkFMLCAidmFsdWUiKQorICAgICAgICAud2l0aE1hcHBlcihbXShDMlZhbHVlIHYpIC0+IEMyVmFsdWUgeworICAgICAgICAgICAgLy8gY29udmVydCBmcm9tIGkzMiB0byBmbG9hdAorICAgICAgICAgICAgaW50MzJfdCBpMzJWYWx1ZTsKKyAgICAgICAgICAgIGZsb2F0IGZwVmFsdWU7CisgICAgICAgICAgICBpZiAodi5nZXQoJmkzMlZhbHVlKSkgeworICAgICAgICAgICAgICAgIHJldHVybiBpbnQ2NF90KDEwMDAwMDApICogaTMyVmFsdWU7CisgICAgICAgICAgICB9IGVsc2UgaWYgKHYuZ2V0KCZmcFZhbHVlKSkgeworICAgICAgICAgICAgICAgIHJldHVybiBpbnQ2NF90KGMyX21pbigxMDAwMDAwICogZnBWYWx1ZSArIDAuNSwgKGRvdWJsZSlJTlQ2NF9NQVgpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJldHVybiBDMlZhbHVlKCk7CisgICAgICAgIH0pKTsKKyAgICAvLyByZW1vdmUgd2hlbiBjb2RlY3Mgc3dpdGNoIHRvIHByb3BlciBjb2RpbmcuZ29wIChhZGQgc3VwcG9ydCBmb3IgY2FsY3VsYXRpbmcgZ29wKQorICAgIGRlcHJlY2F0ZWQoQ29uZmlnTWFwcGVyKCJpLWZyYW1lLXBlcmlvZCIsICJjb2RpbmcuZ29wIiwgImludHJhLXBlcmlvZCIpCisgICAgICAgICAgICAgICAubGltaXRUbyhEOjpFTkNPREVSICYgRDo6VklERU8pKTsKKyAgICBhZGQoQ29uZmlnTWFwcGVyKEtFWV9JTlRSQV9SRUZSRVNIX1BFUklPRCwgQzJfUEFSQU1LRVlfSU5UUkFfUkVGUkVTSCwgInBlcmlvZCIpCisgICAgICAgIC5saW1pdFRvKEQ6OlZJREVPICYgRDo6RU5DT0RFUikKKyAgICAgICAgLndpdGhNYXBwZXJzKG1ha2VGbG9hdCwgW10oQzJWYWx1ZSB2KSAtPiBDMlZhbHVlIHsKKyAgICAgICAgICAgIC8vIHJlYWQgYmFjayBhbHdheXMgYXMgaW50CisgICAgICAgICAgICBmbG9hdCB2YWx1ZTsKKyAgICAgICAgICAgIGlmICh2LmdldCgmdmFsdWUpKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIChpbnQzMl90KXZhbHVlOworICAgICAgICAgICAgfQorICAgICAgICAgICAgcmV0dXJuIEMyVmFsdWUoKTsKKyAgICAgICAgfSkpOworICAgIGFkZChDb25maWdNYXBwZXIoS0VZX1FVQUxJVFksIEMyX1BBUkFNS0VZX1FVQUxJVFksICJ2YWx1ZSIpKTsKKyAgICBkZXByZWNhdGVkKENvbmZpZ01hcHBlcihQQVJBTUVURVJfS0VZX1JFUVVFU1RfU1lOQ19GUkFNRSwKKyAgICAgICAgICAgICAgICAgICAgICJjb2RpbmcucmVxdWVzdC1zeW5jIiwgInZhbHVlIikKKyAgICAgICAgLmxpbWl0VG8oRDo6UEFSQU0gJiBEOjpFTkNPREVSKQorICAgICAgICAud2l0aE1hcHBlcihbXShDMlZhbHVlKSAtPiBDMlZhbHVlIHsgcmV0dXJuIHVpbnQzMl90KDEpOyB9KSk7CisgICAgYWRkKENvbmZpZ01hcHBlcihQQVJBTUVURVJfS0VZX1JFUVVFU1RfU1lOQ19GUkFNRSwKKyAgICAgICAgICAgICAgICAgICAgIEMyX1BBUkFNS0VZX1JFUVVFU1RfU1lOQ19GUkFNRSwgInZhbHVlIikKKyAgICAgICAgLmxpbWl0VG8oRDo6UEFSQU0gJiBEOjpFTkNPREVSKQorICAgICAgICAud2l0aE1hcHBlcihbXShDMlZhbHVlKSAtPiBDMlZhbHVlIHsgcmV0dXJuIHVpbnQzMl90KDEpOyB9KSk7CisKKyAgICBhZGQoQ29uZmlnTWFwcGVyKEtFWV9PUEVSQVRJTkdfUkFURSwgICBDMl9QQVJBTUtFWV9PUEVSQVRJTkdfUkFURSwgICAgICJ2YWx1ZSIpCisgICAgICAgIC5saW1pdFRvKEQ6OlBBUkFNIHwgRDo6Q09ORklHKSAvLyB3cml0ZS1vbmx5CisgICAgICAgIC53aXRoTWFwcGVyKG1ha2VGbG9hdCkpOworICAgIC8vIEMyIHByaW9yaXRpZXMgYXJlIGludmVydGVkCisgICAgYWRkKENvbmZpZ01hcHBlcihLRVlfUFJJT1JJVFksICAgICAgICAgQzJfUEFSQU1LRVlfUFJJT1JJVFksICAgICAgICAgICAidmFsdWUiKQorICAgICAgICAud2l0aE1hcHBlcnMobmVnYXRlLCBuZWdhdGUpKTsKKyAgICAvLyByZW1vdmUgd2hlbiBjb2RlY3Mgc3dpdGNoIHRvIFBBUkFNS0VZCisgICAgZGVwcmVjYXRlZChDb25maWdNYXBwZXIoS0VZX09QRVJBVElOR19SQVRFLCAgICJjdHJsLm9wZXJhdGluZy1yYXRlIiwgICAgICJ2YWx1ZSIpCisgICAgICAgICAgICAgICAud2l0aE1hcHBlcihtYWtlRmxvYXQpKTsKKyAgICBkZXByZWNhdGVkKENvbmZpZ01hcHBlcihLRVlfUFJJT1JJVFksICAgICAgICAgImN0cmwucHJpb3JpdHkiLCAgICAgICAgICAgInZhbHVlIikpOworCisgICAgYWRkKENvbmZpZ01hcHBlcihLRVlfV0lEVEgsICAgICAgICAgQzJfUEFSQU1LRVlfUElDVFVSRV9TSVpFLCAgICAgICAid2lkdGgiKQorICAgICAgICAubGltaXRUbyhEOjpWSURFTyB8IEQ6OklNQUdFKSk7CisgICAgYWRkKENvbmZpZ01hcHBlcihLRVlfSEVJR0hULCAgICAgICAgQzJfUEFSQU1LRVlfUElDVFVSRV9TSVpFLCAgICAgICAiaGVpZ2h0IikKKyAgICAgICAgLmxpbWl0VG8oRDo6VklERU8gfCBEOjpJTUFHRSkpOworCisgICAgYWRkKENvbmZpZ01hcHBlcigiY3JvcC1sZWZ0IiwgICAgICAgQzJfUEFSQU1LRVlfQ1JPUF9SRUNULCAgICAgICAibGVmdCIpCisgICAgICAgIC5saW1pdFRvKEQ6OlZJREVPIHwgRDo6SU1BR0UpKTsKKyAgICBhZGQoQ29uZmlnTWFwcGVyKCJjcm9wLXRvcCIsICAgICAgICBDMl9QQVJBTUtFWV9DUk9QX1JFQ1QsICAgICAgICJ0b3AiKQorICAgICAgICAubGltaXRUbyhEOjpWSURFTyB8IEQ6OklNQUdFKSk7CisgICAgYWRkKENvbmZpZ01hcHBlcigiY3JvcC13aWR0aCIsICAgICAgQzJfUEFSQU1LRVlfQ1JPUF9SRUNULCAgICAgICAid2lkdGgiKQorICAgICAgICAubGltaXRUbyhEOjpWSURFTyB8IEQ6OklNQUdFKSk7CisgICAgYWRkKENvbmZpZ01hcHBlcigiY3JvcC1oZWlnaHQiLCAgICAgQzJfUEFSQU1LRVlfQ1JPUF9SRUNULCAgICAgICAiaGVpZ2h0IikKKyAgICAgICAgLmxpbWl0VG8oRDo6VklERU8gfCBEOjpJTUFHRSkpOworCisgICAgYWRkKENvbmZpZ01hcHBlcihLRVlfTUFYX1dJRFRILCAgICAgQzJfUEFSQU1LRVlfTUFYX1BJQ1RVUkVfU0laRSwgICAgIndpZHRoIikKKyAgICAgICAgLmxpbWl0VG8oKEQ6OlZJREVPIHwgRDo6SU1BR0UpICYgRDo6UkFXKSk7CisgICAgYWRkKENvbmZpZ01hcHBlcihLRVlfTUFYX0hFSUdIVCwgICAgQzJfUEFSQU1LRVlfTUFYX1BJQ1RVUkVfU0laRSwgICAgImhlaWdodCIpCisgICAgICAgIC5saW1pdFRvKChEOjpWSURFTyB8IEQ6OklNQUdFKSAmIEQ6OlJBVykpOworCisgICAgYWRkKENvbmZpZ01hcHBlcigiY3NkLTAiLCAgICAgICAgICAgQzJfUEFSQU1LRVlfSU5JVF9EQVRBLCAgICAgICAidmFsdWUiKQorICAgICAgICAubGltaXRUbyhEOjpPVVRQVVQgJiBEOjpSRUFEKSk7CisKKyAgICBhZGQoQ29uZmlnTWFwcGVyKEMyX1BBUkFNS0VZX1RFTVBPUkFMX0xBWUVSSU5HLCBDMl9QQVJBTUtFWV9URU1QT1JBTF9MQVlFUklORywgIiIpCisgICAgICAgIC5saW1pdFRvKEQ6OkVOQ09ERVIgJiBEOjpWSURFTyAmIEQ6Ok9VVFBVVCkpOworCisgICAgLy8gUGl4ZWwgRm9ybWF0ICh1c2UgbG9jYWwga2V5IGZvciBhY3R1YWwgcGl4ZWwgZm9ybWF0IGFzIHdlIGRvbid0IGRpc3Rpbmd1aXNoIGJldHdlZW4KKyAgICAvLyBTREsgbGF5b3V0cyBmb3IgZmxleGlibGUgZm9ybWF0IGFuZCB3ZSBuZWVkIHRoZSBhY3R1YWwgU0RLIGNvbG9yIGZvcm1hdCBpbiB0aGUgbWVkaWEgZm9ybWF0KQorICAgIGFkZChDb25maWdNYXBwZXIoImFuZHJvaWQuX2NvbG9yLWZvcm1hdCIsICBDMl9QQVJBTUtFWV9QSVhFTF9GT1JNQVQsICJ2YWx1ZSIpCisgICAgICAgIC5saW1pdFRvKChEOjpWSURFTyB8IEQ6OklNQUdFKSAmIEQ6OlJBVykKKyAgICAgICAgLndpdGhNYXBwZXJzKFtdKEMyVmFsdWUgdikgLT4gQzJWYWx1ZSB7CisgICAgICAgICAgICBpbnQzMl90IHZhbHVlOworICAgICAgICAgICAgaWYgKHYuZ2V0KCZ2YWx1ZSkpIHsKKyAgICAgICAgICAgICAgICBzd2l0Y2ggKHZhbHVlKSB7CisgICAgICAgICAgICAgICAgICAgIGNhc2UgQ09MT1JfRm9ybWF0U3VyZmFjZToKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAodWludDMyX3QpSEFMX1BJWEVMX0ZPUk1BVF9JTVBMRU1FTlRBVElPTl9ERUZJTkVEOworICAgICAgICAgICAgICAgICAgICBjYXNlIENPTE9SX0Zvcm1hdFlVVjQyMEZsZXhpYmxlOgorICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICh1aW50MzJfdClIQUxfUElYRUxfRk9STUFUX1lDQkNSXzQyMF84ODg7CisgICAgICAgICAgICAgICAgICAgIGNhc2UgQ09MT1JfRm9ybWF0WVVWNDIwUGxhbmFyOgorICAgICAgICAgICAgICAgICAgICBjYXNlIENPTE9SX0Zvcm1hdFlVVjQyMFNlbWlQbGFuYXI6CisgICAgICAgICAgICAgICAgICAgIGNhc2UgQ09MT1JfRm9ybWF0WVVWNDIwUGFja2VkUGxhbmFyOgorICAgICAgICAgICAgICAgICAgICBjYXNlIENPTE9SX0Zvcm1hdFlVVjQyMFBhY2tlZFNlbWlQbGFuYXI6CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gKHVpbnQzMl90KUhBTF9QSVhFTF9GT1JNQVRfWVYxMjsKKyAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIFRPRE86IHN1cHBvcnQgc29tZSBzb3J0IG9mIHBhc3N0aHJvdWdoCisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICByZXR1cm4gQzJWYWx1ZSgpOworICAgICAgICB9LCBbXShDMlZhbHVlIHYpIC0+IEMyVmFsdWUgeworICAgICAgICAgICAgdWludDMyX3QgdmFsdWU7CisgICAgICAgICAgICBpZiAodi5nZXQoJnZhbHVlKSkgeworICAgICAgICAgICAgICAgIHN3aXRjaCAodmFsdWUpIHsKKyAgICAgICAgICAgICAgICAgICAgY2FzZSBIQUxfUElYRUxfRk9STUFUX0lNUExFTUVOVEFUSU9OX0RFRklORUQ6CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gQ09MT1JfRm9ybWF0U3VyZmFjZTsKKyAgICAgICAgICAgICAgICAgICAgY2FzZSBIQUxfUElYRUxfRk9STUFUX1lWMTI6CisgICAgICAgICAgICAgICAgICAgIGNhc2UgSEFMX1BJWEVMX0ZPUk1BVF9ZQ0JDUl80MjBfODg4OgorICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIENPTE9SX0Zvcm1hdFlVVjQyMEZsZXhpYmxlOworICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgICAgICAgICAgLy8gVE9ETzogc3VwcG9ydCBzb21lIHNvcnQgb2YgcGFzc3Rocm91Z2gKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJldHVybiBDMlZhbHVlKCk7CisgICAgICAgIH0pKTsKKworICAgIGFkZChDb25maWdNYXBwZXIoS0VZX0NIQU5ORUxfQ09VTlQsIEMyX1BBUkFNS0VZX0NIQU5ORUxfQ09VTlQsICAgICAgICJ2YWx1ZSIpCisgICAgICAgIC5saW1pdFRvKEQ6OkFVRElPKSk7IC8vIHJlYWQgYmFjayB0byBib3RoIGZvcm1hdHMKKyAgICBhZGQoQ29uZmlnTWFwcGVyKEtFWV9DSEFOTkVMX0NPVU5ULCBDMl9QQVJBTUtFWV9DT0RFRF9DSEFOTkVMX0NPVU5ULCAidmFsdWUiKQorICAgICAgICAubGltaXRUbyhEOjpBVURJTyAmIEQ6OkNPREVEKSk7CisKKyAgICBhZGQoQ29uZmlnTWFwcGVyKEtFWV9TQU1QTEVfUkFURSwgICBDMl9QQVJBTUtFWV9TQU1QTEVfUkFURSwgICAgICAgICJ2YWx1ZSIpCisgICAgICAgIC5saW1pdFRvKEQ6OkFVRElPKSk7IC8vIHJlYWQgYmFjayB0byBib3RoIHBvcnQgZm9ybWF0cworICAgIGFkZChDb25maWdNYXBwZXIoS0VZX1NBTVBMRV9SQVRFLCAgIEMyX1BBUkFNS0VZX0NPREVEX1NBTVBMRV9SQVRFLCAgInZhbHVlIikKKyAgICAgICAgLmxpbWl0VG8oRDo6QVVESU8gJiBEOjpDT0RFRCkpOworCisgICAgYWRkKENvbmZpZ01hcHBlcihLRVlfUENNX0VOQ09ESU5HLCAgQzJfUEFSQU1LRVlfUENNX0VOQ09ESU5HLCAgICAgICAidmFsdWUiKQorICAgICAgICAubGltaXRUbyhEOjpBVURJTykpOworCisgICAgYWRkKENvbmZpZ01hcHBlcihLRVlfSVNfQURUUywgQzJfUEFSQU1LRVlfQUFDX1BBQ0tBR0lORywgInZhbHVlIikKKyAgICAgICAgLmxpbWl0VG8oRDo6QVVESU8gJiBEOjpDT0RFRCkKKyAgICAgICAgLndpdGhNYXBwZXJzKFtdKEMyVmFsdWUgdikgLT4gQzJWYWx1ZSB7CisgICAgICAgICAgICBpbnQzMl90IHZhbHVlOworICAgICAgICAgICAgaWYgKHYuZ2V0KCZ2YWx1ZSkgJiYgdmFsdWUpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gQzJDb25maWc6OkFBQ19QQUNLQUdJTkdfQURUUzsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJldHVybiBDMlZhbHVlKCk7CisgICAgICAgIH0sIFtdKEMyVmFsdWUgdikgLT4gQzJWYWx1ZSB7CisgICAgICAgICAgICB1aW50MzJfdCB2YWx1ZTsKKyAgICAgICAgICAgIGlmICh2LmdldCgmdmFsdWUpICYmIHZhbHVlID09IEMyQ29uZmlnOjpBQUNfUEFDS0FHSU5HX0FEVFMpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gKGludDMyX3QpMTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJldHVybiBDMlZhbHVlKCk7CisgICAgICAgIH0pKTsKKworICAgIHN0ZDo6c2hhcmVkX3B0cjxDMk1hcHBlcjo6UHJvZmlsZUxldmVsTWFwcGVyPiBtYXBwZXIgPQorICAgICAgICBDMk1hcHBlcjo6R2V0UHJvZmlsZUxldmVsTWFwcGVyKG1Db2RpbmdNZWRpYVR5cGUpOworCisgICAgYWRkKENvbmZpZ01hcHBlcihLRVlfUFJPRklMRSwgQzJfUEFSQU1LRVlfUFJPRklMRV9MRVZFTCwgInByb2ZpbGUiKQorICAgICAgICAubGltaXRUbyhEOjpDT0RFRCkKKyAgICAgICAgLndpdGhNYXBwZXJzKFttYXBwZXJdKEMyVmFsdWUgdikgLT4gQzJWYWx1ZSB7CisgICAgICAgICAgICBDMkNvbmZpZzo6cHJvZmlsZV90IGMyID0gUFJPRklMRV9VTlVTRUQ7CisgICAgICAgICAgICBpbnQzMl90IHNkazsKKyAgICAgICAgICAgIGlmIChtYXBwZXIgJiYgdi5nZXQoJnNkaykgJiYgbWFwcGVyLT5tYXBQcm9maWxlKHNkaywgJmMyKSkgeworICAgICAgICAgICAgICAgIHJldHVybiBjMjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJldHVybiBQUk9GSUxFX1VOVVNFRDsKKyAgICAgICAgfSwgW21hcHBlcl0oQzJWYWx1ZSB2KSAtPiBDMlZhbHVlIHsKKyAgICAgICAgICAgIEMyQ29uZmlnOjpwcm9maWxlX3QgYzI7CisgICAgICAgICAgICBpbnQzMl90IHNkazsKKyAgICAgICAgICAgIHVzaW5nIEMyVmFsdWVUeXBlPXR5cGVuYW1lIF9jMl9yZWR1Y2VfZW51bV90b191bmRlcmx5aW5nX3R5cGU8ZGVjbHR5cGUoYzIpPjo6dHlwZTsKKyAgICAgICAgICAgIGlmIChtYXBwZXIgJiYgdi5nZXQoKEMyVmFsdWVUeXBlKikmYzIpICYmIG1hcHBlci0+bWFwUHJvZmlsZShjMiwgJnNkaykpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gc2RrOworICAgICAgICAgICAgfQorICAgICAgICAgICAgcmV0dXJuIEMyVmFsdWUoKTsKKyAgICAgICAgfSkpOworCisgICAgYWRkKENvbmZpZ01hcHBlcihLRVlfTEVWRUwsIEMyX1BBUkFNS0VZX1BST0ZJTEVfTEVWRUwsICJsZXZlbCIpCisgICAgICAgIC5saW1pdFRvKEQ6OkNPREVEKQorICAgICAgICAud2l0aE1hcHBlcnMoW21hcHBlcl0oQzJWYWx1ZSB2KSAtPiBDMlZhbHVlIHsKKyAgICAgICAgICAgIEMyQ29uZmlnOjpsZXZlbF90IGMyID0gTEVWRUxfVU5VU0VEOworICAgICAgICAgICAgaW50MzJfdCBzZGs7CisgICAgICAgICAgICBpZiAobWFwcGVyICYmIHYuZ2V0KCZzZGspICYmIG1hcHBlci0+bWFwTGV2ZWwoc2RrLCAmYzIpKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGMyOworICAgICAgICAgICAgfQorICAgICAgICAgICAgcmV0dXJuIExFVkVMX1VOVVNFRDsKKyAgICAgICAgfSwgW21hcHBlcl0oQzJWYWx1ZSB2KSAtPiBDMlZhbHVlIHsKKyAgICAgICAgICAgIEMyQ29uZmlnOjpsZXZlbF90IGMyOworICAgICAgICAgICAgaW50MzJfdCBzZGs7CisgICAgICAgICAgICB1c2luZyBDMlZhbHVlVHlwZT10eXBlbmFtZSBfYzJfcmVkdWNlX2VudW1fdG9fdW5kZXJseWluZ190eXBlPGRlY2x0eXBlKGMyKT46OnR5cGU7CisgICAgICAgICAgICBpZiAobWFwcGVyICYmIHYuZ2V0KChDMlZhbHVlVHlwZSopJmMyKSAmJiBtYXBwZXItPm1hcExldmVsKGMyLCAmc2RrKSkgeworICAgICAgICAgICAgICAgIHJldHVybiBzZGs7CisgICAgICAgICAgICB9CisgICAgICAgICAgICByZXR1cm4gQzJWYWx1ZSgpOworICAgICAgICB9KSk7CisKKyAgICAvLyBjb252ZXJ0IHRvIGRCRlMgYW5kIGFkZCBkZWZhdWx0CisgICAgYWRkKENvbmZpZ01hcHBlcihLRVlfQUFDX0RSQ19UQVJHRVRfUkVGRVJFTkNFX0xFVkVMLCBDMl9QQVJBTUtFWV9EUkNfVEFSR0VUX1JFRkVSRU5DRV9MRVZFTCwgInZhbHVlIikKKyAgICAgICAgLmxpbWl0VG8oRDo6QVVESU8gJiBEOjpERUNPREVSKQorICAgICAgICAud2l0aE1hcHBlcihbXShDMlZhbHVlIHYpIC0+IEMyVmFsdWUgeworICAgICAgICAgICAgaW50MzJfdCB2YWx1ZTsKKyAgICAgICAgICAgIGlmICghdi5nZXQoJnZhbHVlKSB8fCB2YWx1ZSA8IDApIHsKKyAgICAgICAgICAgICAgICB2YWx1ZSA9IHByb3BlcnR5X2dldF9pbnQzMihQUk9QX0RSQ19PVkVSUklERV9SRUZfTEVWRUwsIERSQ19ERUZBVUxUX01PQklMRV9SRUZfTEVWRUwpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgcmV0dXJuIGZsb2F0KC0wLjI1ICogYzJfbWluKHZhbHVlLCAxMjcpKTsKKyAgICAgICAgfSkpOworCisgICAgLy8gY29udmVydCB0byAwLTEgKCUpIGFuZCBhZGQgZGVmYXVsdAorICAgIGFkZChDb25maWdNYXBwZXIoS0VZX0FBQ19EUkNfQVRURU5VQVRJT05fRkFDVE9SLCBDMl9QQVJBTUtFWV9EUkNfQVRURU5VQVRJT05fRkFDVE9SLCAidmFsdWUiKQorICAgICAgICAubGltaXRUbyhEOjpBVURJTyAmIEQ6OkRFQ09ERVIpCisgICAgICAgIC53aXRoTWFwcGVyKFtdKEMyVmFsdWUgdikgLT4gQzJWYWx1ZSB7CisgICAgICAgICAgICBpbnQzMl90IHZhbHVlOworICAgICAgICAgICAgaWYgKCF2LmdldCgmdmFsdWUpIHx8IHZhbHVlIDwgMCkgeworICAgICAgICAgICAgICAgIHZhbHVlID0gcHJvcGVydHlfZ2V0X2ludDMyKFBST1BfRFJDX09WRVJSSURFX0NVVCwgRFJDX0RFRkFVTFRfTU9CSUxFX0RSQ19DVVQpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgcmV0dXJuIGZsb2F0KGMyX21pbih2YWx1ZSwgMTI3KSAvIDEyNy4pOworICAgICAgICB9KSk7CisKKyAgICAvLyBjb252ZXJ0IHRvIDAtMSAoJSkgYW5kIGFkZCBkZWZhdWx0CisgICAgYWRkKENvbmZpZ01hcHBlcihLRVlfQUFDX0RSQ19CT09TVF9GQUNUT1IsIEMyX1BBUkFNS0VZX0RSQ19CT09TVF9GQUNUT1IsICJ2YWx1ZSIpCisgICAgICAgIC5saW1pdFRvKEQ6OkFVRElPICYgRDo6REVDT0RFUikKKyAgICAgICAgLndpdGhNYXBwZXIoW10oQzJWYWx1ZSB2KSAtPiBDMlZhbHVlIHsKKyAgICAgICAgICAgIGludDMyX3QgdmFsdWU7CisgICAgICAgICAgICBpZiAoIXYuZ2V0KCZ2YWx1ZSkgfHwgdmFsdWUgPCAwKSB7CisgICAgICAgICAgICAgICAgdmFsdWUgPSBwcm9wZXJ0eV9nZXRfaW50MzIoUFJPUF9EUkNfT1ZFUlJJREVfQk9PU1QsIERSQ19ERUZBVUxUX01PQklMRV9EUkNfQk9PU1QpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgcmV0dXJuIGZsb2F0KGMyX21pbih2YWx1ZSwgMTI3KSAvIDEyNy4pOworICAgICAgICB9KSk7CisKKyAgICAvLyBjb252ZXJ0IHRvIGNvbXByZXNzaW9uIHR5cGUgYW5kIGFkZCBkZWZhdWx0CisgICAgYWRkKENvbmZpZ01hcHBlcihLRVlfQUFDX0RSQ19IRUFWWV9DT01QUkVTU0lPTiwgQzJfUEFSQU1LRVlfRFJDX0NPTVBSRVNTSU9OX01PREUsICJ2YWx1ZSIpCisgICAgICAgIC5saW1pdFRvKEQ6OkFVRElPICYgRDo6REVDT0RFUikKKyAgICAgICAgLndpdGhNYXBwZXIoW10oQzJWYWx1ZSB2KSAtPiBDMlZhbHVlIHsKKyAgICAgICAgICAgIGludDMyX3QgdmFsdWU7CisgICAgICAgICAgICBpZiAoIXYuZ2V0KCZ2YWx1ZSkgfHwgdmFsdWUgPCAwKSB7CisgICAgICAgICAgICAgICAgdmFsdWUgPSBwcm9wZXJ0eV9nZXRfaW50MzIoUFJPUF9EUkNfT1ZFUlJJREVfSEVBVlksIERSQ19ERUZBVUxUX01PQklMRV9EUkNfSEVBVlkpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgcmV0dXJuIHZhbHVlID09IDEgPyBDMkNvbmZpZzo6RFJDX0NPTVBSRVNTSU9OX0hFQVZZIDogQzJDb25maWc6OkRSQ19DT01QUkVTU0lPTl9MSUdIVDsKKyAgICAgICAgfSkpOworCisgICAgLy8gY29udmVydCB0byBkQkZTIGFuZCBhZGQgZGVmYXVsdAorICAgIGFkZChDb25maWdNYXBwZXIoS0VZX0FBQ19FTkNPREVEX1RBUkdFVF9MRVZFTCwgQzJfUEFSQU1LRVlfRFJDX0VOQ09ERURfVEFSR0VUX0xFVkVMLCAidmFsdWUiKQorICAgICAgICAubGltaXRUbyhEOjpBVURJTyAmIEQ6OkRFQ09ERVIpCisgICAgICAgIC53aXRoTWFwcGVyKFtdKEMyVmFsdWUgdikgLT4gQzJWYWx1ZSB7CisgICAgICAgICAgICBpbnQzMl90IHZhbHVlOworICAgICAgICAgICAgaWYgKCF2LmdldCgmdmFsdWUpIHx8IHZhbHVlIDwgMCkgeworICAgICAgICAgICAgICAgIHZhbHVlID0gcHJvcGVydHlfZ2V0X2ludDMyKFBST1BfRFJDX09WRVJSSURFX0VOQ19MRVZFTCwgRFJDX0RFRkFVTFRfTU9CSUxFX0VOQ19MRVZFTCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICByZXR1cm4gZmxvYXQoLTAuMjUgKiBjMl9taW4odmFsdWUsIDEyNykpOworICAgICAgICB9KSk7CisKKyAgICAvLyBjb252ZXJ0IHRvIGVmZmVjdCB0eXBlICh0aGVzZSBtYXAgdG8gU0RLIHZhbHVlcykgYW5kIGFkZCBkZWZhdWx0CisgICAgYWRkKENvbmZpZ01hcHBlcihLRVlfQUFDX0RSQ19FRkZFQ1RfVFlQRSwgQzJfUEFSQU1LRVlfRFJDX0VGRkVDVF9UWVBFLCAidmFsdWUiKQorICAgICAgICAubGltaXRUbyhEOjpBVURJTyAmIEQ6OkRFQ09ERVIpCisgICAgICAgIC53aXRoTWFwcGVyKFtdKEMyVmFsdWUgdikgLT4gQzJWYWx1ZSB7CisgICAgICAgICAgICBpbnQzMl90IHZhbHVlOworICAgICAgICAgICAgaWYgKCF2LmdldCgmdmFsdWUpIHx8IHZhbHVlIDwgLTEgfHwgdmFsdWUgPiA4KSB7CisgICAgICAgICAgICAgICAgdmFsdWUgPSBwcm9wZXJ0eV9nZXRfaW50MzIoUFJPUF9EUkNfT1ZFUlJJREVfRUZGRUNULCBEUkNfREVGQVVMVF9NT0JJTEVfRFJDX0VGRkVDVCk7CisgICAgICAgICAgICAgICAgLy8gZW5zdXJlIHZhbHVlIGlzIHdpdGhpbiByYW5nZQorICAgICAgICAgICAgICAgIGlmICh2YWx1ZSA8IC0xIHx8IHZhbHVlID4gOCkgeworICAgICAgICAgICAgICAgICAgICB2YWx1ZSA9IERSQ19ERUZBVUxUX01PQklMRV9EUkNfRUZGRUNUOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJldHVybiB2YWx1ZTsKKyAgICAgICAgfSkpOworCisgICAgYWRkKENvbmZpZ01hcHBlcihLRVlfQUFDX01BWF9PVVRQVVRfQ0hBTk5FTF9DT1VOVCwgQzJfUEFSQU1LRVlfTUFYX0NIQU5ORUxfQ09VTlQsICJ2YWx1ZSIpCisgICAgICAgIC5saW1pdFRvKEQ6OkFVRElPKSk7CisKKyAgICBhZGQoQ29uZmlnTWFwcGVyKEtFWV9BQUNfU0JSX01PREUsIEMyX1BBUkFNS0VZX0FBQ19TQlJfTU9ERSwgInZhbHVlIikKKyAgICAgICAgLmxpbWl0VG8oRDo6QVVESU8gJiBEOjpFTkNPREVSICYgRDo6Q09ORklHKQorICAgICAgICAud2l0aE1hcHBlcihbXShDMlZhbHVlIHYpIC0+IEMyVmFsdWUgeworICAgICAgICAgICAgaW50MzJfdCB2YWx1ZTsKKyAgICAgICAgICAgIGlmICghdi5nZXQoJnZhbHVlKSB8fCB2YWx1ZSA8IDApIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gQzJDb25maWc6OkFBQ19TQlJfQVVUTzsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHN3aXRjaCAodmFsdWUpIHsKKyAgICAgICAgICAgICAgICBjYXNlIDA6IHJldHVybiBDMkNvbmZpZzo6QUFDX1NCUl9PRkY7CisgICAgICAgICAgICAgICAgY2FzZSAxOiByZXR1cm4gQzJDb25maWc6OkFBQ19TQlJfU0lOR0xFX1JBVEU7CisgICAgICAgICAgICAgICAgY2FzZSAyOiByZXR1cm4gQzJDb25maWc6OkFBQ19TQlJfRFVBTF9SQVRFOworICAgICAgICAgICAgICAgIGRlZmF1bHQ6IHJldHVybiBDMkNvbmZpZzo6QUFDX1NCUl9BVVRPICsgMTsgLy8gaW52YWxpZCB2YWx1ZQorICAgICAgICAgICAgfQorICAgICAgICB9KSk7CisKKyAgICBhZGQoQ29uZmlnTWFwcGVyKEtFWV9RVUFMSVRZLCBDMl9QQVJBTUtFWV9RVUFMSVRZLCAidmFsdWUiKSk7CisgICAgYWRkKENvbmZpZ01hcHBlcihLRVlfRkxBQ19DT01QUkVTU0lPTl9MRVZFTCwgQzJfUEFSQU1LRVlfQ09NUExFWElUWSwgInZhbHVlIikKKyAgICAgICAgLmxpbWl0VG8oRDo6QVVESU8gJiBEOjpFTkNPREVSKSk7CisgICAgYWRkKENvbmZpZ01hcHBlcigiY29tcGxleGl0eSIsIEMyX1BBUkFNS0VZX0NPTVBMRVhJVFksICJ2YWx1ZSIpCisgICAgICAgIC5saW1pdFRvKEQ6OkVOQ09ERVIpKTsKKworICAgIGFkZChDb25maWdNYXBwZXIoS0VZX0dSSURfQ09MVU1OUywgQzJfUEFSQU1LRVlfVElMRV9MQVlPVVQsICJjb2x1bW5zIikKKyAgICAgICAgLmxpbWl0VG8oRDo6SU1BR0UpKTsKKyAgICBhZGQoQ29uZmlnTWFwcGVyKEtFWV9HUklEX1JPV1MsIEMyX1BBUkFNS0VZX1RJTEVfTEFZT1VULCAicm93cyIpCisgICAgICAgIC5saW1pdFRvKEQ6OklNQUdFKSk7CisgICAgYWRkKENvbmZpZ01hcHBlcihLRVlfVElMRV9XSURUSCwgQzJfUEFSQU1LRVlfVElMRV9MQVlPVVQsICJ0aWxlLndpZHRoIikKKyAgICAgICAgLmxpbWl0VG8oRDo6SU1BR0UpKTsKKyAgICBhZGQoQ29uZmlnTWFwcGVyKEtFWV9USUxFX0hFSUdIVCwgQzJfUEFSQU1LRVlfVElMRV9MQVlPVVQsICJ0aWxlLmhlaWdodCIpCisgICAgICAgIC5saW1pdFRvKEQ6OklNQUdFKSk7CisKKyAgICBhZGQoQ29uZmlnTWFwcGVyKEtFWV9MQVRFTkNZLCBDMl9QQVJBTUtFWV9QSVBFTElORV9ERUxBWV9SRVFVRVNULCAidmFsdWUiKQorICAgICAgICAubGltaXRUbyhEOjpWSURFTyAmIEQ6OkVOQ09ERVIpKTsKKworICAgIGFkZChDb25maWdNYXBwZXIoQzJfUEFSQU1LRVlfSU5QVVRfVElNRV9TVFJFVENILCBDMl9QQVJBTUtFWV9JTlBVVF9USU1FX1NUUkVUQ0gsICJ2YWx1ZSIpKTsKKworICAgIC8qIHN0aWxsIHRvIGRvCisgICAgY29uc3RleHByIGNoYXIgS0VZX1BVU0hfQkxBTktfQlVGRkVSU19PTl9TVE9QW10gPSAicHVzaC1ibGFuay1idWZmZXJzLW9uLXNodXRkb3duIjsKKworICAgICAgIG5vdCB5ZXQgdXNlZCBieSBNZWRpYUNvZGVjLCBidXQgZGVmaW5lZCBhcyBNZWRpYUZvcm1hdAorICAgIEtFWV9BVURJT19TRVNTSU9OX0lEIC8vIHdlIHVzZSAiYXVkaW8taHctc3luYyIKKyAgICBLRVlfT1VUUFVUX1JFT1JERVJfREVQVEgKKyAgICAqLworfQorCitzdGF0dXNfdCBDQ29kZWNDb25maWc6OmluaXRpYWxpemUoCisgICAgICAgIGNvbnN0IHN0ZDo6c2hhcmVkX3B0cjxDb2RlYzJDbGllbnQ+ICZjbGllbnQsCisgICAgICAgIGNvbnN0IHN0ZDo6c2hhcmVkX3B0cjxDb2RlYzJDbGllbnQ6OkNvbXBvbmVudD4gJmNvbXBvbmVudCkgeworICAgIEMyQ29tcG9uZW50RG9tYWluU2V0dGluZyBkb21haW4oQzJDb21wb25lbnQ6OkRPTUFJTl9PVEhFUik7CisgICAgQzJDb21wb25lbnRLaW5kU2V0dGluZyBraW5kKEMyQ29tcG9uZW50OjpLSU5EX09USEVSKTsKKworICAgIHN0ZDo6dmVjdG9yPHN0ZDo6dW5pcXVlX3B0cjxDMlBhcmFtPj4gcXVlcmllZDsKKyAgICBjMl9zdGF0dXNfdCBjMmVyciA9IGNvbXBvbmVudC0+cXVlcnkoeyAmZG9tYWluLCAma2luZCB9LCB7fSwgQzJfRE9OVF9CTE9DSywgJnF1ZXJpZWQpOworICAgIGlmIChjMmVyciAhPSBDMl9PSykgeworICAgICAgICBBTE9HRCgiUXVlcnkgZG9tYWluICYga2luZCBmYWlsZWQgPT4gJXMiLCBhc1N0cmluZyhjMmVycikpOworICAgICAgICAvLyBURU1QOiBkZXRlcm1pbmUga2luZCBmcm9tIGNvbXBvbmVudCBuYW1lCisgICAgICAgIGlmIChraW5kLnZhbHVlID09IEMyQ29tcG9uZW50OjpLSU5EX09USEVSKSB7CisgICAgICAgICAgICBpZiAoY29tcG9uZW50LT5nZXROYW1lKCkuZmluZCgiZW5jb2RlciIpICE9IHN0ZDo6c3RyaW5nOjpucG9zKSB7CisgICAgICAgICAgICAgICAga2luZC52YWx1ZSA9IEMyQ29tcG9uZW50OjpLSU5EX0VOQ09ERVI7CisgICAgICAgICAgICB9IGVsc2UgaWYgKGNvbXBvbmVudC0+Z2V0TmFtZSgpLmZpbmQoImRlY29kZXIiKSAhPSBzdGQ6OnN0cmluZzo6bnBvcykgeworICAgICAgICAgICAgICAgIGtpbmQudmFsdWUgPSBDMkNvbXBvbmVudDo6S0lORF9ERUNPREVSOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgLy8gVEVNUDogZGV0ZXJtaW5lIGRvbWFpbiBmcm9tIG1lZGlhIHR5cGUgKHBvcnQgKHByZWZlcnJlZCkgb3Igc3RyZWFtICMwKQorICAgICAgICBpZiAoZG9tYWluLnZhbHVlID09IEMyQ29tcG9uZW50OjpET01BSU5fT1RIRVIpIHsKKyAgICAgICAgICAgIEFTdHJpbmcgbWVkaWFUeXBlID0gUXVlcnlNZWRpYVR5cGUodHJ1ZSAvKiBpbnB1dCAqLywgY29tcG9uZW50KTsKKyAgICAgICAgICAgIGlmIChtZWRpYVR5cGUuc3RhcnRzV2l0aCgiYXVkaW8vIikpIHsKKyAgICAgICAgICAgICAgICBkb21haW4udmFsdWUgPSBDMkNvbXBvbmVudDo6RE9NQUlOX0FVRElPOworICAgICAgICAgICAgfSBlbHNlIGlmIChtZWRpYVR5cGUuc3RhcnRzV2l0aCgidmlkZW8vIikpIHsKKyAgICAgICAgICAgICAgICBkb21haW4udmFsdWUgPSBDMkNvbXBvbmVudDo6RE9NQUlOX1ZJREVPOworICAgICAgICAgICAgfSBlbHNlIGlmIChtZWRpYVR5cGUuc3RhcnRzV2l0aCgiaW1hZ2UvIikpIHsKKyAgICAgICAgICAgICAgICBkb21haW4udmFsdWUgPSBDMkNvbXBvbmVudDo6RE9NQUlOX0lNQUdFOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCisgICAgbURvbWFpbiA9IChkb21haW4udmFsdWUgPT0gQzJDb21wb25lbnQ6OkRPTUFJTl9WSURFTyA/IERvbWFpbjo6SVNfVklERU8gOgorICAgICAgICAgICAgICAgZG9tYWluLnZhbHVlID09IEMyQ29tcG9uZW50OjpET01BSU5fSU1BR0UgPyBEb21haW46OklTX0lNQUdFIDoKKyAgICAgICAgICAgICAgIGRvbWFpbi52YWx1ZSA9PSBDMkNvbXBvbmVudDo6RE9NQUlOX0FVRElPID8gRG9tYWluOjpJU19BVURJTyA6IERvbWFpbjo6T1RIRVJfRE9NQUlOKQorICAgICAgICAgICAgfCAoa2luZC52YWx1ZSA9PSBDMkNvbXBvbmVudDo6S0lORF9ERUNPREVSID8gRG9tYWluOjpJU19ERUNPREVSIDoKKyAgICAgICAgICAgICAgIGtpbmQudmFsdWUgPT0gQzJDb21wb25lbnQ6OktJTkRfRU5DT0RFUiA/IERvbWFpbjo6SVNfRU5DT0RFUiA6IERvbWFpbjo6T1RIRVJfS0lORCk7CisKKyAgICBtSW5wdXREb21haW4gPSBEb21haW4oKChtRG9tYWluICYgSVNfREVDT0RFUikgPyBJU19DT0RFRCA6IElTX1JBVykgfCBJU19JTlBVVCk7CisgICAgbU91dHB1dERvbWFpbiA9IERvbWFpbigoKG1Eb21haW4gJiBJU19FTkNPREVSKSA/IElTX0NPREVEIDogSVNfUkFXKSB8IElTX09VVFBVVCk7CisKKyAgICBBTE9HVigiZG9tYWluIGlzICUjeCAoJXUgJXUpIiwgbURvbWFpbiwgZG9tYWluLnZhbHVlLCBraW5kLnZhbHVlKTsKKworICAgIHN0ZDo6dmVjdG9yPEMyUGFyYW06OkluZGV4PiBwYXJhbUluZGljZXM7CisgICAgc3dpdGNoIChraW5kLnZhbHVlKSB7CisgICAgY2FzZSBDMkNvbXBvbmVudDo6S0lORF9ERUNPREVSOgorICAgICAgICBtQ29kaW5nTWVkaWFUeXBlID0gUXVlcnlNZWRpYVR5cGUodHJ1ZSAvKiBpbnB1dCAqLywgY29tcG9uZW50KS5jX3N0cigpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEMyQ29tcG9uZW50OjpLSU5EX0VOQ09ERVI6CisgICAgICAgIG1Db2RpbmdNZWRpYVR5cGUgPSBRdWVyeU1lZGlhVHlwZShmYWxzZSAvKiBpbnB1dCAqLywgY29tcG9uZW50KS5jX3N0cigpOworICAgICAgICBicmVhazsKKyAgICBkZWZhdWx0OgorICAgICAgICBtQ29kaW5nTWVkaWFUeXBlID0gIiI7CisgICAgfQorCisgICAgYzJlcnIgPSBjb21wb25lbnQtPnF1ZXJ5U3VwcG9ydGVkUGFyYW1zKCZtUGFyYW1EZXNjcyk7CisgICAgaWYgKGMyZXJyICE9IEMyX09LKSB7CisgICAgICAgIEFMT0dEKCJRdWVyeSBzdXBwb3J0ZWQgcGFyYW1zIGZhaWxlZCBhZnRlciByZXR1cm5pbmcgJXp1IHZhbHVlcyA9PiAlcyIsCisgICAgICAgICAgICAgICAgbVBhcmFtRGVzY3Muc2l6ZSgpLCBhc1N0cmluZyhjMmVycikpOworICAgICAgICByZXR1cm4gVU5LTk9XTl9FUlJPUjsKKyAgICB9CisgICAgZm9yIChjb25zdCBzdGQ6OnNoYXJlZF9wdHI8QzJQYXJhbURlc2NyaXB0b3I+ICZkZXNjIDogbVBhcmFtRGVzY3MpIHsKKyAgICAgICAgbVN1cHBvcnRlZEluZGljZXMuZW1wbGFjZShkZXNjLT5pbmRleCgpKTsKKyAgICB9CisKKyAgICBtUmVmbGVjdG9yID0gY2xpZW50LT5nZXRQYXJhbVJlZmxlY3RvcigpOworICAgIGlmIChtUmVmbGVjdG9yID09IG51bGxwdHIpIHsKKyAgICAgICAgQUxPR0UoIkZhaWxlZCB0byBnZXQgcGFyYW0gcmVmbGVjdG9yIik7CisgICAgICAgIHJldHVybiBVTktOT1dOX0VSUk9SOworICAgIH0KKworICAgIC8vIGVudW1lcmF0ZSBhbGwgZmllbGRzCisgICAgbVBhcmFtVXBkYXRlciA9IHN0ZDo6bWFrZV9zaGFyZWQ8UmVmbGVjdGVkUGFyYW1VcGRhdGVyPigpOworICAgIG1QYXJhbVVwZGF0ZXItPmNsZWFyKCk7CisgICAgbVBhcmFtVXBkYXRlci0+c3VwcG9ydFdob2xlUGFyYW0oCisgICAgICAgICAgICBDMl9QQVJBTUtFWV9URU1QT1JBTF9MQVlFUklORywgQzJTdHJlYW1UZW1wb3JhbExheWVyaW5nVHVuaW5nOjpDT1JFX0lOREVYKTsKKyAgICBtUGFyYW1VcGRhdGVyLT5hZGRQYXJhbURlc2MobVJlZmxlY3RvciwgbVBhcmFtRGVzY3MpOworCisgICAgLy8gVEVNUDogYWRkIHNvbWUgc3RhbmRhcmQgZmllbGRzIGV2ZW4gaWYgbm90IHJlZmxlY3RlZAorICAgIGlmIChraW5kLnZhbHVlID09IEMyQ29tcG9uZW50OjpLSU5EX0VOQ09ERVIpIHsKKyAgICAgICAgbVBhcmFtVXBkYXRlci0+YWRkU3RhbmRhcmRQYXJhbTxDMlN0cmVhbUluaXREYXRhSW5mbzo6b3V0cHV0PihDMl9QQVJBTUtFWV9JTklUX0RBVEEpOworICAgIH0KKyAgICBpZiAoZG9tYWluLnZhbHVlID09IEMyQ29tcG9uZW50OjpET01BSU5fSU1BR0UgfHwgZG9tYWluLnZhbHVlID09IEMyQ29tcG9uZW50OjpET01BSU5fVklERU8pIHsKKyAgICAgICAgaWYgKGtpbmQudmFsdWUgIT0gQzJDb21wb25lbnQ6OktJTkRfRU5DT0RFUikgeworICAgICAgICAgICAgYWRkTG9jYWxQYXJhbTxDMlN0cmVhbVBpY3R1cmVTaXplSW5mbzo6b3V0cHV0PihDMl9QQVJBTUtFWV9QSUNUVVJFX1NJWkUpOworICAgICAgICAgICAgYWRkTG9jYWxQYXJhbTxDMlN0cmVhbUNyb3BSZWN0SW5mbzo6b3V0cHV0PihDMl9QQVJBTUtFWV9DUk9QX1JFQ1QpOworICAgICAgICAgICAgYWRkTG9jYWxQYXJhbSgKKyAgICAgICAgICAgICAgICAgICAgbmV3IEMyU3RyZWFtUGl4ZWxBc3BlY3RSYXRpb0luZm86Om91dHB1dCgwdSwgMXUsIDF1KSwKKyAgICAgICAgICAgICAgICAgICAgQzJfUEFSQU1LRVlfUElYRUxfQVNQRUNUX1JBVElPKTsKKyAgICAgICAgICAgIGFkZExvY2FsUGFyYW0obmV3IEMyU3RyZWFtUm90YXRpb25JbmZvOjpvdXRwdXQoMHUsIDApLCBDMl9QQVJBTUtFWV9ST1RBVElPTik7CisgICAgICAgICAgICBhZGRMb2NhbFBhcmFtKG5ldyBDMlN0cmVhbUNvbG9yQXNwZWN0c0luZm86Om91dHB1dCgwdSksIEMyX1BBUkFNS0VZX0NPTE9SX0FTUEVDVFMpOworICAgICAgICAgICAgYWRkTG9jYWxQYXJhbTxDMlN0cmVhbURhdGFTcGFjZUluZm86Om91dHB1dD4oQzJfUEFSQU1LRVlfREFUQV9TUEFDRSk7CisgICAgICAgICAgICBhZGRMb2NhbFBhcmFtPEMyU3RyZWFtSGRyU3RhdGljSW5mbzo6b3V0cHV0PihDMl9QQVJBTUtFWV9IRFJfU1RBVElDX0lORk8pOworICAgICAgICAgICAgYWRkTG9jYWxQYXJhbShuZXcgQzJTdHJlYW1TdXJmYWNlU2NhbGluZ0luZm86Om91dHB1dCgwdSwgVklERU9fU0NBTElOR19NT0RFX1NDQUxFX1RPX0ZJVCksCisgICAgICAgICAgICAgICAgICAgICAgICAgIEMyX1BBUkFNS0VZX1NVUkZBQ0VfU0NBTElOR19NT0RFKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGFkZExvY2FsUGFyYW0obmV3IEMyU3RyZWFtQ29sb3JBc3BlY3RzSW5mbzo6aW5wdXQoMHUpLCBDMl9QQVJBTUtFWV9DT0xPUl9BU1BFQ1RTKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIGluaXRpYWxpemVTdGFuZGFyZFBhcmFtcygpOworCisgICAgLy8gc3Vic2NyaWJlIHRvIGFsbCBzdXBwb3J0ZWQgc3RhbmRhcmQgKGV4cG9zZWQpIHBhcmFtcworICAgIC8vIFRPRE86IGxpbWl0IHRoaXMgdG8gcGFyYW1zIHRoYXQgYXJlIGFjdHVhbGx5IGluIHRoZSBkb21haW4KKyAgICBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4gZm9ybWF0S2V5cyA9IG1TdGFuZGFyZFBhcmFtcy0+Z2V0UGF0aHNGb3JEb21haW4oRG9tYWluKDEgPDwgMzApKTsKKyAgICBzdGQ6OnZlY3RvcjxDMlBhcmFtOjpJbmRleD4gaW5kaWNlczsKKyAgICBtUGFyYW1VcGRhdGVyLT5nZXRQYXJhbUluZGljZXNGb3JLZXlzKGZvcm1hdEtleXMsICZpbmRpY2VzKTsKKyAgICBtU3Vic2NyaWJlZEluZGljZXMuaW5zZXJ0KGluZGljZXMuYmVnaW4oKSwgaW5kaWNlcy5lbmQoKSk7CisKKyAgICAvLyBhbHNvIHN1YnNjcmliZSB0byBzb21lIG5vbi1TREsgc3RhbmRhcmQgcGFyYW1ldGVycworICAgIC8vIGZvciBudW1iZXIgb2YgaW5wdXQvb3V0cHV0IGJ1ZmZlcnMKKyAgICBtU3Vic2NyaWJlZEluZGljZXMuZW1wbGFjZShDMlBvcnRTdWdnZXN0ZWRCdWZmZXJDb3VudFR1bmluZzo6aW5wdXQ6OlBBUkFNX1RZUEUpOworICAgIG1TdWJzY3JpYmVkSW5kaWNlcy5lbXBsYWNlKEMyUG9ydFN1Z2dlc3RlZEJ1ZmZlckNvdW50VHVuaW5nOjpvdXRwdXQ6OlBBUkFNX1RZUEUpOworICAgIG1TdWJzY3JpYmVkSW5kaWNlcy5lbXBsYWNlKEMyQWN0dWFsUGlwZWxpbmVEZWxheVR1bmluZzo6UEFSQU1fVFlQRSk7CisgICAgbVN1YnNjcmliZWRJbmRpY2VzLmVtcGxhY2UoQzJQb3J0QWN0dWFsRGVsYXlUdW5pbmc6OmlucHV0OjpQQVJBTV9UWVBFKTsKKyAgICBtU3Vic2NyaWJlZEluZGljZXMuZW1wbGFjZShDMlBvcnRBY3R1YWxEZWxheVR1bmluZzo6b3V0cHV0OjpQQVJBTV9UWVBFKTsKKyAgICAvLyBmb3Igb3V0cHV0IGJ1ZmZlciBhcnJheSBhbGxvY2F0aW9uCisgICAgbVN1YnNjcmliZWRJbmRpY2VzLmVtcGxhY2UoQzJTdHJlYW1NYXhCdWZmZXJTaXplSW5mbzo6b3V0cHV0OjpQQVJBTV9UWVBFKTsKKyAgICAvLyBpbml0IGRhdGEgKENTRCkKKyAgICBtU3Vic2NyaWJlZEluZGljZXMuZW1wbGFjZShDMlN0cmVhbUluaXREYXRhSW5mbzo6b3V0cHV0OjpQQVJBTV9UWVBFKTsKKworICAgIHJldHVybiBPSzsKK30KKworc3RhdHVzX3QgQ0NvZGVjQ29uZmlnOjpzdWJzY3JpYmVUb0NvbmZpZ1VwZGF0ZSgKKyAgICAgICAgY29uc3Qgc3RkOjpzaGFyZWRfcHRyPENvZGVjMkNsaWVudDo6Q29tcG9uZW50PiAmY29tcG9uZW50LAorICAgICAgICBjb25zdCBzdGQ6OnZlY3RvcjxDMlBhcmFtOjpJbmRleD4gJmluZGljZXMsCisgICAgICAgIGMyX2Jsb2NraW5nX3QgYmxvY2tpbmcpIHsKKyAgICBtU3Vic2NyaWJlZEluZGljZXMuaW5zZXJ0KGluZGljZXMuYmVnaW4oKSwgaW5kaWNlcy5lbmQoKSk7CisgICAgLy8gVE9ETzogZW5hYmxlIHRoaXMgd2hlbiBjb21wb25lbnRzIG5vIGxvbmdlciBjcmFzaCBvbiB0aGlzIGNvbmZpZworICAgIGlmIChtU3Vic2NyaWJlZEluZGljZXMuc2l6ZSgpICE9IG1TdWJzY3JpYmVkSW5kaWNlc1NpemUgJiYgZmFsc2UpIHsKKyAgICAgICAgc3RkOjp2ZWN0b3I8dWludDMyX3Q+IGluZGljZXM7CisgICAgICAgIGZvciAoQzJQYXJhbTo6SW5kZXggaXggOiBtU3Vic2NyaWJlZEluZGljZXMpIHsKKyAgICAgICAgICAgIGluZGljZXMucHVzaF9iYWNrKGl4KTsKKyAgICAgICAgfQorICAgICAgICBzdGQ6OnVuaXF1ZV9wdHI8QzJTdWJzY3JpYmVkUGFyYW1JbmRpY2VzVHVuaW5nPiBzdWJzY3JpYmVUdW5pbmcgPQorICAgICAgICAgICAgQzJTdWJzY3JpYmVkUGFyYW1JbmRpY2VzVHVuaW5nOjpBbGxvY1VuaXF1ZShpbmRpY2VzKTsKKyAgICAgICAgc3RkOjp2ZWN0b3I8c3RkOjp1bmlxdWVfcHRyPEMyU2V0dGluZ1Jlc3VsdD4+IHJlc3VsdHM7CisgICAgICAgIGMyX3N0YXR1c190IGMyRXJyID0gY29tcG9uZW50LT5jb25maWcoeyBzdWJzY3JpYmVUdW5pbmcuZ2V0KCkgfSwgYmxvY2tpbmcsICZyZXN1bHRzKTsKKyAgICAgICAgaWYgKGMyRXJyICE9IEMyX09LICYmIGMyRXJyICE9IEMyX0JBRF9JTkRFWCkgeworICAgICAgICAgICAgQUxPR0QoIkZhaWxlZCB0byBzdWJzY3JpYmUgdG8gcGFyYW1ldGVycyA9PiAlcyIsIGFzU3RyaW5nKGMyRXJyKSk7CisgICAgICAgICAgICAvLyBUT0RPOiBlcnJvcgorICAgICAgICB9CisgICAgICAgIEFMT0dWKCJTdWJzY3JpYmVkIHRvICV6dSBwYXJhbXMiLCBtU3Vic2NyaWJlZEluZGljZXMuc2l6ZSgpKTsKKyAgICAgICAgbVN1YnNjcmliZWRJbmRpY2VzU2l6ZSA9IG1TdWJzY3JpYmVkSW5kaWNlcy5zaXplKCk7CisgICAgfQorICAgIHJldHVybiBPSzsKK30KKworc3RhdHVzX3QgQ0NvZGVjQ29uZmlnOjpxdWVyeUNvbmZpZ3VyYXRpb24oCisgICAgICAgIGNvbnN0IHN0ZDo6c2hhcmVkX3B0cjxDb2RlYzJDbGllbnQ6OkNvbXBvbmVudD4gJmNvbXBvbmVudCkgeworICAgIC8vIHF1ZXJ5IGFsbCBzdWJzY3JpYmVkIHBhcmFtZXRlcnMKKyAgICBzdGQ6OnZlY3RvcjxDMlBhcmFtOjpJbmRleD4gaW5kaWNlcyhtU3Vic2NyaWJlZEluZGljZXMuYmVnaW4oKSwgbVN1YnNjcmliZWRJbmRpY2VzLmVuZCgpKTsKKyAgICBzdGQ6OnZlY3RvcjxzdGQ6OnVuaXF1ZV9wdHI8QzJQYXJhbT4+IHF1ZXJpZWQ7CisgICAgYzJfc3RhdHVzX3QgYzJFcnIgPSBjb21wb25lbnQtPnF1ZXJ5KHt9LCBpbmRpY2VzLCBDMl9NQVlfQkxPQ0ssICZxdWVyaWVkKTsKKyAgICBpZiAoYzJFcnIgIT0gT0spIHsKKyAgICAgICAgQUxPR0koInF1ZXJ5IGZhaWxlZCBhZnRlciByZXR1cm5pbmcgJXp1IHZhbHVlcyAoJXMpIiwgcXVlcmllZC5zaXplKCksIGFzU3RyaW5nKGMyRXJyKSk7CisgICAgICAgIC8vIFRPRE86IGVycm9yCisgICAgfQorCisgICAgdXBkYXRlQ29uZmlndXJhdGlvbihxdWVyaWVkLCBBTEwpOworICAgIHJldHVybiBPSzsKK30KKworYm9vbCBDQ29kZWNDb25maWc6OnVwZGF0ZUNvbmZpZ3VyYXRpb24oCisgICAgICAgIHN0ZDo6dmVjdG9yPHN0ZDo6dW5pcXVlX3B0cjxDMlBhcmFtPj4gJmNvbmZpZ1VwZGF0ZSwgRG9tYWluIGRvbWFpbikgeworICAgIEFMT0dWKCJ1cGRhdGluZyBjb25maWd1cmF0aW9uIHdpdGggJXp1IHBhcmFtcyIsIGNvbmZpZ1VwZGF0ZS5zaXplKCkpOworICAgIGJvb2wgY2hhbmdlZCA9IGZhbHNlOworICAgIGZvciAoc3RkOjp1bmlxdWVfcHRyPEMyUGFyYW0+ICZwIDogY29uZmlnVXBkYXRlKSB7CisgICAgICAgIGlmIChwICYmICpwKSB7CisgICAgICAgICAgICBhdXRvIGluc2VydGlvbiA9IG1DdXJyZW50Q29uZmlnLmVtcGxhY2UocC0+aW5kZXgoKSwgbnVsbHB0cik7CisgICAgICAgICAgICBpZiAoaW5zZXJ0aW9uLnNlY29uZCB8fCAqaW5zZXJ0aW9uLmZpcnN0LT5zZWNvbmQgIT0gKnApIHsKKyAgICAgICAgICAgICAgICBpZiAobVN1cHBvcnRlZEluZGljZXMuY291bnQocC0+aW5kZXgoKSkgfHwgbUxvY2FsUGFyYW1zLmNvdW50KHAtPmluZGV4KCkpKSB7CisgICAgICAgICAgICAgICAgICAgIC8vIG9ubHkgdHJhY2sgY2hhbmdlcyBpbiBzdXBwb3J0ZWQgKHJlZmxlY3RlZCBvciBsb2NhbCkgaW5kaWNlcworICAgICAgICAgICAgICAgICAgICBjaGFuZ2VkID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICBBTE9HVigiYW4gdW5saXN0ZWQgY29uZmlnIHdhcyAlczogJSN4IiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnNlcnRpb24uc2Vjb25kID8gImFkZGVkIiA6ICJ1cGRhdGVkIiwgcC0+aW5kZXgoKSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgaW5zZXJ0aW9uLmZpcnN0LT5zZWNvbmQgPSBzdGQ6Om1vdmUocCk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBBTE9HVigidXBkYXRlZCBjb25maWd1cmF0aW9uIGhhcyAlenUgcGFyYW1zICglcykiLCBtQ3VycmVudENvbmZpZy5zaXplKCksCisgICAgICAgICAgICBjaGFuZ2VkID8gIkNIQU5HRUQiIDogIm5vIGNoYW5nZSIpOworICAgIGlmIChjaGFuZ2VkKSB7CisgICAgICAgIHJldHVybiB1cGRhdGVGb3JtYXRzKGRvbWFpbik7CisgICAgfQorICAgIHJldHVybiBmYWxzZTsKK30KKworYm9vbCBDQ29kZWNDb25maWc6OnVwZGF0ZUZvcm1hdHMoRG9tYWluIGRvbWFpbikgeworICAgIC8vIGdldCBhZGRyZXNzZXMgb2YgcGFyYW1zIGluIHRoZSBjdXJyZW50IGNvbmZpZworICAgIHN0ZDo6dmVjdG9yPEMyUGFyYW0qPiBwYXJhbVBvaW50ZXJzOworICAgIGZvciAoY29uc3QgYXV0byAmaXQgOiBtQ3VycmVudENvbmZpZykgeworICAgICAgICBwYXJhbVBvaW50ZXJzLnB1c2hfYmFjayhpdC5zZWNvbmQuZ2V0KCkpOworICAgIH0KKworICAgIFJlZmxlY3RlZFBhcmFtVXBkYXRlcjo6RGljdCByZWZsZWN0ZWQgPSBtUGFyYW1VcGRhdGVyLT5nZXRQYXJhbXMocGFyYW1Qb2ludGVycyk7CisgICAgQUxPR0QoImMyIGNvbmZpZyBpcyAlcyIsIHJlZmxlY3RlZC5kZWJ1Z1N0cmluZygpLmNfc3RyKCkpOworCisgICAgYm9vbCBjaGFuZ2VkID0gZmFsc2U7CisgICAgaWYgKGRvbWFpbiAmIG1JbnB1dERvbWFpbikgeworICAgICAgICBzcDxBTWVzc2FnZT4gb2xkRm9ybWF0ID0gbUlucHV0Rm9ybWF0OworICAgICAgICBtSW5wdXRGb3JtYXQgPSBtSW5wdXRGb3JtYXQtPmR1cCgpOyAvLyB0cmlnZ2VyIGZvcm1hdCBjaGFuZ2VkCisgICAgICAgIG1JbnB1dEZvcm1hdC0+ZXh0ZW5kKGdldFNka0Zvcm1hdEZvckRvbWFpbihyZWZsZWN0ZWQsIG1JbnB1dERvbWFpbikpOworICAgICAgICBpZiAobUlucHV0Rm9ybWF0LT5jb3VudEVudHJpZXMoKSAhPSBvbGRGb3JtYXQtPmNvdW50RW50cmllcygpCisgICAgICAgICAgICAgICAgfHwgbUlucHV0Rm9ybWF0LT5jaGFuZ2VzRnJvbShvbGRGb3JtYXQpLT5jb3VudEVudHJpZXMoKSA+IDApIHsKKyAgICAgICAgICAgIGNoYW5nZWQgPSB0cnVlOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgbUlucHV0Rm9ybWF0ID0gb2xkRm9ybWF0OyAvLyBubyBjaGFuZ2UKKyAgICAgICAgfQorICAgIH0KKyAgICBpZiAoZG9tYWluICYgbU91dHB1dERvbWFpbikgeworICAgICAgICBzcDxBTWVzc2FnZT4gb2xkRm9ybWF0ID0gbU91dHB1dEZvcm1hdDsKKyAgICAgICAgbU91dHB1dEZvcm1hdCA9IG1PdXRwdXRGb3JtYXQtPmR1cCgpOyAvLyB0cmlnZ2VyIG91dHB1dCBmb3JtYXQgY2hhbmdlZAorICAgICAgICBtT3V0cHV0Rm9ybWF0LT5leHRlbmQoZ2V0U2RrRm9ybWF0Rm9yRG9tYWluKHJlZmxlY3RlZCwgbU91dHB1dERvbWFpbikpOworICAgICAgICBpZiAobU91dHB1dEZvcm1hdC0+Y291bnRFbnRyaWVzKCkgIT0gb2xkRm9ybWF0LT5jb3VudEVudHJpZXMoKQorICAgICAgICAgICAgICAgIHx8IG1PdXRwdXRGb3JtYXQtPmNoYW5nZXNGcm9tKG9sZEZvcm1hdCktPmNvdW50RW50cmllcygpID4gMCkgeworICAgICAgICAgICAgY2hhbmdlZCA9IHRydWU7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBtT3V0cHV0Rm9ybWF0ID0gb2xkRm9ybWF0OyAvLyBubyBjaGFuZ2UKKyAgICAgICAgfQorICAgIH0KKyAgICBBTE9HVl9JRihjaGFuZ2VkLCAiZm9ybWF0KHMpIGNoYW5nZWQiKTsKKyAgICByZXR1cm4gY2hhbmdlZDsKK30KKworc3A8QU1lc3NhZ2U+IENDb2RlY0NvbmZpZzo6Z2V0U2RrRm9ybWF0Rm9yRG9tYWluKAorICAgICAgICBjb25zdCBSZWZsZWN0ZWRQYXJhbVVwZGF0ZXI6OkRpY3QgJnJlZmxlY3RlZCwgRG9tYWluIHBvcnREb21haW4pIGNvbnN0IHsKKyAgICBzcDxBTWVzc2FnZT4gbXNnID0gbmV3IEFNZXNzYWdlOworICAgIGZvciAoY29uc3Qgc3RkOjpwYWlyPHN0ZDo6c3RyaW5nLCBzdGQ6OnZlY3RvcjxDb25maWdNYXBwZXI+PiAmZWwgOiBtU3RhbmRhcmRQYXJhbXMtPmdldEtleXMoKSkgeworICAgICAgICBmb3IgKGNvbnN0IENvbmZpZ01hcHBlciAmY20gOiBlbC5zZWNvbmQpIHsKKyAgICAgICAgICAgIGlmICgoY20uZG9tYWluKCkgJiBwb3J0RG9tYWluKSA9PSAwIC8vIGlucHV0LW91dHB1dC1jb2RlZC1yYXcKKyAgICAgICAgICAgICAgICB8fCAoY20uZG9tYWluKCkgJiBtRG9tYWluKSAhPSBtRG9tYWluIC8vIGNvbXBvbmVudCBkb21haW4gKyBraW5kICh0aGVzZSBtdXN0IG1hdGNoKQorICAgICAgICAgICAgICAgIHx8IChjbS5kb21haW4oKSAmIElTX1JFQUQpID09IDApIHsKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGF1dG8gaXQgPSByZWZsZWN0ZWQuZmluZChjbS5wYXRoKCkpOworICAgICAgICAgICAgaWYgKGl0ID09IHJlZmxlY3RlZC5lbmQoKSkgeworICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgfQorICAgICAgICAgICAgQzJWYWx1ZSBjMlZhbHVlOworICAgICAgICAgICAgc3A8QUJ1ZmZlcj4gYnVmVmFsdWU7CisgICAgICAgICAgICBBU3RyaW5nIHN0clZhbHVlOworICAgICAgICAgICAgQU1lc3NhZ2U6Okl0ZW1EYXRhIGl0ZW07CisgICAgICAgICAgICBpZiAoaXQtPnNlY29uZC5maW5kKCZjMlZhbHVlKSkgeworICAgICAgICAgICAgICAgIGl0ZW0gPSBjbS5tYXBUb01lc3NhZ2UoYzJWYWx1ZSk7CisgICAgICAgICAgICB9IGVsc2UgaWYgKGl0LT5zZWNvbmQuZmluZCgmYnVmVmFsdWUpKSB7CisgICAgICAgICAgICAgICAgaXRlbS5zZXQoYnVmVmFsdWUpOworICAgICAgICAgICAgfSBlbHNlIGlmIChpdC0+c2Vjb25kLmZpbmQoJnN0clZhbHVlKSkgeworICAgICAgICAgICAgICAgIGl0ZW0uc2V0KHN0clZhbHVlKTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgQUxPR0QoInVuZXhwZWN0ZWQgdW50eXBlZCBxdWVyeSB2YWx1ZSBmb3Iga2V5OiAlcyIsIGNtLnBhdGgoKS5jX3N0cigpKTsKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIG1zZy0+c2V0SXRlbShlbC5maXJzdC5jX3N0cigpLCBpdGVtKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHsgLy8gY29udmVydCBmcm9tIENvZGVjIDIuMCByZWN0IHRvIE1lZGlhRm9ybWF0IHJlY3QgYW5kIGFkZCBjcm9wIHJlY3QgaWYgbm90IHByZXNlbnQKKyAgICAgICAgaW50MzJfdCBsZWZ0LCB0b3AsIHdpZHRoLCBoZWlnaHQ7CisgICAgICAgIGlmIChtc2ctPmZpbmRJbnQzMigiY3JvcC1sZWZ0IiwgJmxlZnQpICYmIG1zZy0+ZmluZEludDMyKCJjcm9wLXdpZHRoIiwgJndpZHRoKQorICAgICAgICAgICAgICAgICYmIG1zZy0+ZmluZEludDMyKCJjcm9wLXRvcCIsICZ0b3ApICYmIG1zZy0+ZmluZEludDMyKCJjcm9wLWhlaWdodCIsICZoZWlnaHQpCisgICAgICAgICAgICAgICAgJiYgbGVmdCA+PSAwICYmIHdpZHRoID49MCAmJiB3aWR0aCA8PSBJTlQzMl9NQVggLSBsZWZ0CisgICAgICAgICAgICAgICAgJiYgdG9wID49IDAgJiYgaGVpZ2h0ID49MCAmJiBoZWlnaHQgPD0gSU5UMzJfTUFYIC0gdG9wKSB7CisgICAgICAgICAgICBtc2ctPnJlbW92ZUVudHJ5QXQobXNnLT5maW5kRW50cnlCeU5hbWUoImNyb3AtbGVmdCIpKTsKKyAgICAgICAgICAgIG1zZy0+cmVtb3ZlRW50cnlBdChtc2ctPmZpbmRFbnRyeUJ5TmFtZSgiY3JvcC10b3AiKSk7CisgICAgICAgICAgICBtc2ctPnJlbW92ZUVudHJ5QXQobXNnLT5maW5kRW50cnlCeU5hbWUoImNyb3Atd2lkdGgiKSk7CisgICAgICAgICAgICBtc2ctPnJlbW92ZUVudHJ5QXQobXNnLT5maW5kRW50cnlCeU5hbWUoImNyb3AtaGVpZ2h0IikpOworICAgICAgICAgICAgbXNnLT5zZXRSZWN0KCJjcm9wIiwgbGVmdCwgdG9wLCBsZWZ0ICsgd2lkdGggLSAxLCB0b3AgKyBoZWlnaHQgLSAxKTsKKyAgICAgICAgfSBlbHNlIGlmIChtc2ctPmZpbmRJbnQzMigid2lkdGgiLCAmd2lkdGgpICYmIG1zZy0+ZmluZEludDMyKCJoZWlnaHQiLCAmaGVpZ2h0KSkgeworICAgICAgICAgICAgbXNnLT5zZXRSZWN0KCJjcm9wIiwgMCwgMCwgd2lkdGggLSAxLCBoZWlnaHQgLSAxKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHsgLy8gY29udmVydCB0ZW1wb3JhbCBsYXllcmluZyB0byBzY2hlbWEKKyAgICAgICAgc3A8QUJ1ZmZlcj4gdG1wOworICAgICAgICBpZiAobXNnLT5maW5kQnVmZmVyKEMyX1BBUkFNS0VZX1RFTVBPUkFMX0xBWUVSSU5HLCAmdG1wKSAmJiB0bXAgIT0gbnVsbHB0cikgeworICAgICAgICAgICAgQzJTdHJlYW1UZW1wb3JhbExheWVyaW5nVHVuaW5nICpsYXllcmluZyA9CisgICAgICAgICAgICAgICAgQzJTdHJlYW1UZW1wb3JhbExheWVyaW5nVHVuaW5nOjpGcm9tKEMyUGFyYW06OkZyb20odG1wLT5kYXRhKCksIHRtcC0+c2l6ZSgpKSk7CisgICAgICAgICAgICBpZiAobGF5ZXJpbmcgJiYgbGF5ZXJpbmctPm0ubGF5ZXJDb3VudCA+IDAKKyAgICAgICAgICAgICAgICAgICAgJiYgbGF5ZXJpbmctPm0uYkxheWVyQ291bnQgPCBsYXllcmluZy0+bS5sYXllckNvdW50KSB7CisgICAgICAgICAgICAgICAgLy8gY2hlY2sgaWYgdGhpcyBpcyB3ZWJydGMgY29tcGF0aWJsZQorICAgICAgICAgICAgICAgIEFTdHJpbmcgbWltZTsKKyAgICAgICAgICAgICAgICBpZiAobXNnLT5maW5kU3RyaW5nKEtFWV9NSU1FLCAmbWltZSkgJiYKKyAgICAgICAgICAgICAgICAgICAgICAgIG1pbWUuZXF1YWxzSWdub3JlQ2FzZShNSU1FVFlQRV9WSURFT19WUDgpICYmCisgICAgICAgICAgICAgICAgICAgICAgICBsYXllcmluZy0+bS5iTGF5ZXJDb3VudCA9PSAwICYmCisgICAgICAgICAgICAgICAgICAgICAgICAobGF5ZXJpbmctPm0ubGF5ZXJDb3VudCA9PSAxCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHx8IChsYXllcmluZy0+bS5sYXllckNvdW50ID09IDIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmJiBsYXllcmluZy0+ZmxleENvdW50KCkgPj0gMQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICYmIGxheWVyaW5nLT5tLmJpdHJhdGVSYXRpb3NbMF0gPT0gLjZmKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8fCAobGF5ZXJpbmctPm0ubGF5ZXJDb3VudCA9PSAzCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJiYgbGF5ZXJpbmctPmZsZXhDb3VudCgpID49IDIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmJiBsYXllcmluZy0+bS5iaXRyYXRlUmF0aW9zWzBdID09IC40ZgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICYmIGxheWVyaW5nLT5tLmJpdHJhdGVSYXRpb3NbMV0gPT0gLjZmKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8fCAobGF5ZXJpbmctPm0ubGF5ZXJDb3VudCA9PSA0CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJiYgbGF5ZXJpbmctPmZsZXhDb3VudCgpID49IDMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmJiBsYXllcmluZy0+bS5iaXRyYXRlUmF0aW9zWzBdID09IC4yNWYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmJiBsYXllcmluZy0+bS5iaXRyYXRlUmF0aW9zWzFdID09IC40ZgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICYmIGxheWVyaW5nLT5tLmJpdHJhdGVSYXRpb3NbMl0gPT0gLjZmKSkpIHsKKyAgICAgICAgICAgICAgICAgICAgbXNnLT5zZXRTdHJpbmcoS0VZX1RFTVBPUkFMX0xBWUVSSU5HLCBBU3RyaW5nUHJpbnRmKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ3ZWJydGMudnA4LiV1LWxheWVyIiwgbGF5ZXJpbmctPm0ubGF5ZXJDb3VudCkpOworICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAobGF5ZXJpbmctPm0uYkxheWVyQ291bnQpIHsKKyAgICAgICAgICAgICAgICAgICAgbXNnLT5zZXRTdHJpbmcoS0VZX1RFTVBPUkFMX0xBWUVSSU5HLCBBU3RyaW5nUHJpbnRmKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICJhbmRyb2lkLmdlbmVyaWMuJXUrJXUiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxheWVyaW5nLT5tLmxheWVyQ291bnQgLSBsYXllcmluZy0+bS5iTGF5ZXJDb3VudCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBsYXllcmluZy0+bS5iTGF5ZXJDb3VudCkpOworICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAobGF5ZXJpbmctPm0uYkxheWVyQ291bnQpIHsKKyAgICAgICAgICAgICAgICAgICAgbXNnLT5zZXRTdHJpbmcoS0VZX1RFTVBPUkFMX0xBWUVSSU5HLCBBU3RyaW5nUHJpbnRmKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICJhbmRyb2lkLmdlbmVyaWMuJXUiLCBsYXllcmluZy0+bS5sYXllckNvdW50KSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgbXNnLT5yZW1vdmVFbnRyeUF0KG1zZy0+ZmluZEVudHJ5QnlOYW1lKEMyX1BBUkFNS0VZX1RFTVBPUkFMX0xBWUVSSU5HKSk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICB7IC8vIGNvbnZlcnQgY29sb3IgaW5mbworICAgICAgICBDMkNvbG9yOjpwcmltYXJpZXNfdCBwcmltYXJpZXM7CisgICAgICAgIEMyQ29sb3I6Om1hdHJpeF90IG1hdHJpeDsKKyAgICAgICAgaWYgKG1zZy0+ZmluZEludDMyKCJjb2xvci1wcmltYXJpZXMiLCAoaW50MzJfdCopJnByaW1hcmllcykKKyAgICAgICAgICAgICAgICAmJiBtc2ctPmZpbmRJbnQzMigiY29sb3ItbWF0cml4IiwgKGludDMyX3QqKSZtYXRyaXgpKSB7CisgICAgICAgICAgICBpbnQzMl90IHN0YW5kYXJkOworCisgICAgICAgICAgICBpZiAoQzJNYXBwZXI6Om1hcChwcmltYXJpZXMsIG1hdHJpeCwgJnN0YW5kYXJkKSkgeworICAgICAgICAgICAgICAgIG1zZy0+c2V0SW50MzIoS0VZX0NPTE9SX1NUQU5EQVJELCBzdGFuZGFyZCk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIG1zZy0+cmVtb3ZlRW50cnlBdChtc2ctPmZpbmRFbnRyeUJ5TmFtZSgiY29sb3ItcHJpbWFyaWVzIikpOworICAgICAgICAgICAgbXNnLT5yZW1vdmVFbnRyeUF0KG1zZy0+ZmluZEVudHJ5QnlOYW1lKCJjb2xvci1tYXRyaXgiKSk7CisgICAgICAgIH0KKworCisgICAgICAgIC8vIGNhbGN1bGF0ZSBkYXRhc3BhY2UgZm9yIHJhdyBncmFwaGljIGJ1ZmZlcnMgaWYgbm90IHNwZWNpZmllZCBieSBjb21wb25lbnQsIG9yIGlmCisgICAgICAgIC8vIHVzaW5nIHN1cmZhY2Ugd2l0aCB1bnNwZWNpZmllZCBhc3BlY3RzIChhcyB0aG9zZSBtdXN0IGJlIGRlZmF1bHRlZCB3aGljaCBtYXkgY2hhbmdlCisgICAgICAgIC8vIHRoZSBkYXRhc3BhY2UpCisgICAgICAgIGlmICgocG9ydERvbWFpbiAmIElTX1JBVykgJiYgKG1Eb21haW4gJiAoSVNfSU1BR0UgfCBJU19WSURFTykpKSB7CisgICAgICAgICAgICBhbmRyb2lkX2RhdGFzcGFjZSBkYXRhc3BhY2U7CisgICAgICAgICAgICBDb2xvckFzcGVjdHMgYXNwZWN0cyA9IHsKKyAgICAgICAgICAgICAgICBDb2xvckFzcGVjdHM6OlJhbmdlVW5zcGVjaWZpZWQsIENvbG9yQXNwZWN0czo6UHJpbWFyaWVzVW5zcGVjaWZpZWQsCisgICAgICAgICAgICAgICAgQ29sb3JBc3BlY3RzOjpUcmFuc2ZlclVuc3BlY2lmaWVkLCBDb2xvckFzcGVjdHM6Ok1hdHJpeFVuc3BlY2lmaWVkCisgICAgICAgICAgICB9OworICAgICAgICAgICAgQ29sb3JVdGlsczo6Z2V0Q29sb3JBc3BlY3RzRnJvbUZvcm1hdChtc2csIGFzcGVjdHMpOworICAgICAgICAgICAgQ29sb3JBc3BlY3RzIG9yaWdBc3BlY3RzID0gYXNwZWN0czsKKyAgICAgICAgICAgIGlmIChtVXNpbmdTdXJmYWNlKSB7CisgICAgICAgICAgICAgICAgLy8gZ2V0IGltYWdlIHNpemUgKGRlZmF1bHQgdG8gSEQpCisgICAgICAgICAgICAgICAgaW50MzJfdCB3aWR0aCA9IDEyODA7CisgICAgICAgICAgICAgICAgaW50MzJfdCBoZWlnaHQgPSA3MjA7CisgICAgICAgICAgICAgICAgaW50MzJfdCBsZWZ0LCB0b3AsIHJpZ2h0LCBib3R0b207CisgICAgICAgICAgICAgICAgaWYgKG1zZy0+ZmluZFJlY3QoImNyb3AiLCAmbGVmdCwgJnRvcCwgJnJpZ2h0LCAmYm90dG9tKSkgeworICAgICAgICAgICAgICAgICAgICB3aWR0aCA9IHJpZ2h0IC0gbGVmdCArIDE7CisgICAgICAgICAgICAgICAgICAgIGhlaWdodCA9IGJvdHRvbSAtIHRvcCArIDE7CisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgKHZvaWQpbXNnLT5maW5kSW50MzIoS0VZX1dJRFRILCAmd2lkdGgpOworICAgICAgICAgICAgICAgICAgICAodm9pZCltc2ctPmZpbmRJbnQzMihLRVlfSEVJR0hULCAmaGVpZ2h0KTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgQ29sb3JVdGlsczo6c2V0RGVmYXVsdENvZGVjQ29sb3JBc3BlY3RzSWZOZWVkZWQoYXNwZWN0cywgd2lkdGgsIGhlaWdodCk7CisgICAgICAgICAgICAgICAgQ29sb3JVdGlsczo6c2V0Q29sb3JBc3BlY3RzSW50b0Zvcm1hdChhc3BlY3RzLCBtc2cpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAoIW1zZy0+ZmluZEludDMyKCJhbmRyb2lkLl9kYXRhc3BhY2UiLCAoaW50MzJfdCopJmRhdGFzcGFjZSkKKyAgICAgICAgICAgICAgICAgICAgfHwgYXNwZWN0cy5tUmFuZ2UgIT0gb3JpZ0FzcGVjdHMubVJhbmdlCisgICAgICAgICAgICAgICAgICAgIHx8IGFzcGVjdHMubVByaW1hcmllcyAhPSBvcmlnQXNwZWN0cy5tUHJpbWFyaWVzCisgICAgICAgICAgICAgICAgICAgIHx8IGFzcGVjdHMubVRyYW5zZmVyICE9IG9yaWdBc3BlY3RzLm1UcmFuc2ZlcgorICAgICAgICAgICAgICAgICAgICB8fCBhc3BlY3RzLm1NYXRyaXhDb2VmZnMgIT0gb3JpZ0FzcGVjdHMubU1hdHJpeENvZWZmcykgeworICAgICAgICAgICAgICAgIGRhdGFzcGFjZSA9IENvbG9yVXRpbHM6OmdldERhdGFTcGFjZUZvckNvbG9yQXNwZWN0cyhhc3BlY3RzLCB0cnVlIC8qIG1heUV4cGFuZCAqLyk7CisgICAgICAgICAgICAgICAgbXNnLT5zZXRJbnQzMigiYW5kcm9pZC5fZGF0YXNwYWNlIiwgZGF0YXNwYWNlKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIC8vIEhEUiBzdGF0aWMgaW5mbworCisgICAgICAgIEMySGRyU3RhdGljTWV0YWRhdGFTdHJ1Y3QgaGRyOworICAgICAgICBpZiAobXNnLT5maW5kRmxvYXQoInNtcHRlMjA4Ni5yZWQueCIsICZoZHIubWFzdGVyaW5nLnJlZC54KQorICAgICAgICAgICAgICAgICYmIG1zZy0+ZmluZEZsb2F0KCJzbXB0ZTIwODYucmVkLnkiLCAmaGRyLm1hc3RlcmluZy5yZWQueSkKKyAgICAgICAgICAgICAgICAmJiBtc2ctPmZpbmRGbG9hdCgic21wdGUyMDg2LmdyZWVuLngiLCAmaGRyLm1hc3RlcmluZy5ncmVlbi54KQorICAgICAgICAgICAgICAgICYmIG1zZy0+ZmluZEZsb2F0KCJzbXB0ZTIwODYuZ3JlZW4ueSIsICZoZHIubWFzdGVyaW5nLmdyZWVuLnkpCisgICAgICAgICAgICAgICAgJiYgbXNnLT5maW5kRmxvYXQoInNtcHRlMjA4Ni5ibHVlLngiLCAmaGRyLm1hc3RlcmluZy5ibHVlLngpCisgICAgICAgICAgICAgICAgJiYgbXNnLT5maW5kRmxvYXQoInNtcHRlMjA4Ni5ibHVlLnkiLCAmaGRyLm1hc3RlcmluZy5ibHVlLnkpCisgICAgICAgICAgICAgICAgJiYgbXNnLT5maW5kRmxvYXQoInNtcHRlMjA4Ni53aGl0ZS54IiwgJmhkci5tYXN0ZXJpbmcud2hpdGUueCkKKyAgICAgICAgICAgICAgICAmJiBtc2ctPmZpbmRGbG9hdCgic21wdGUyMDg2LndoaXRlLnkiLCAmaGRyLm1hc3RlcmluZy53aGl0ZS55KQorICAgICAgICAgICAgICAgICYmIG1zZy0+ZmluZEZsb2F0KCJzbXB0ZTIwODYubWF4LWx1bWluYW5jZSIsICZoZHIubWFzdGVyaW5nLm1heEx1bWluYW5jZSkKKyAgICAgICAgICAgICAgICAmJiBtc2ctPmZpbmRGbG9hdCgic21wdGUyMDg2Lm1pbi1sdW1pbmFuY2UiLCAmaGRyLm1hc3RlcmluZy5taW5MdW1pbmFuY2UpCisgICAgICAgICAgICAgICAgJiYgbXNnLT5maW5kRmxvYXQoImN0YTg2MS5tYXgtY2xsIiwgJmhkci5tYXhDbGwpCisgICAgICAgICAgICAgICAgJiYgbXNnLT5maW5kRmxvYXQoImN0YTg2MS5tYXgtZmFsbCIsICZoZHIubWF4RmFsbCkpIHsKKyAgICAgICAgICAgIGlmIChoZHIubWFzdGVyaW5nLnJlZC54ID49IDAgICAgICAgICAgICAgICAgJiYgaGRyLm1hc3RlcmluZy5yZWQueCA8PSAxCisgICAgICAgICAgICAgICAgICAgICYmIGhkci5tYXN0ZXJpbmcucmVkLnkgPj0gMCAgICAgICAgICYmIGhkci5tYXN0ZXJpbmcucmVkLnkgPD0gMQorICAgICAgICAgICAgICAgICAgICAmJiBoZHIubWFzdGVyaW5nLmdyZWVuLnggPj0gMCAgICAgICAmJiBoZHIubWFzdGVyaW5nLmdyZWVuLnggPD0gMQorICAgICAgICAgICAgICAgICAgICAmJiBoZHIubWFzdGVyaW5nLmdyZWVuLnkgPj0gMCAgICAgICAmJiBoZHIubWFzdGVyaW5nLmdyZWVuLnkgPD0gMQorICAgICAgICAgICAgICAgICAgICAmJiBoZHIubWFzdGVyaW5nLmJsdWUueCA+PSAwICAgICAgICAmJiBoZHIubWFzdGVyaW5nLmJsdWUueCA8PSAxCisgICAgICAgICAgICAgICAgICAgICYmIGhkci5tYXN0ZXJpbmcuYmx1ZS55ID49IDAgICAgICAgICYmIGhkci5tYXN0ZXJpbmcuYmx1ZS55IDw9IDEKKyAgICAgICAgICAgICAgICAgICAgJiYgaGRyLm1hc3RlcmluZy53aGl0ZS54ID49IDAgICAgICAgJiYgaGRyLm1hc3RlcmluZy53aGl0ZS54IDw9IDEKKyAgICAgICAgICAgICAgICAgICAgJiYgaGRyLm1hc3RlcmluZy53aGl0ZS55ID49IDAgICAgICAgJiYgaGRyLm1hc3RlcmluZy53aGl0ZS55IDw9IDEKKyAgICAgICAgICAgICAgICAgICAgJiYgaGRyLm1hc3RlcmluZy5tYXhMdW1pbmFuY2UgPj0gMCAgJiYgaGRyLm1hc3RlcmluZy5tYXhMdW1pbmFuY2UgPD0gNjU1MzUKKyAgICAgICAgICAgICAgICAgICAgJiYgaGRyLm1hc3RlcmluZy5taW5MdW1pbmFuY2UgPj0gMCAgJiYgaGRyLm1hc3RlcmluZy5taW5MdW1pbmFuY2UgPD0gNi41NTM1CisgICAgICAgICAgICAgICAgICAgICYmIGhkci5tYXhDbGwgPj0gMCAgICAgICAgICAgICAgICAgICYmIGhkci5tYXhDbGwgPD0gNjU1MzUKKyAgICAgICAgICAgICAgICAgICAgJiYgaGRyLm1heEZhbGwgPj0gMCAgICAgICAgICAgICAgICAgJiYgaGRyLm1heEZhbGwgPD0gNjU1MzUpIHsKKyAgICAgICAgICAgICAgICBIRFJTdGF0aWNJbmZvIG1ldGE7CisgICAgICAgICAgICAgICAgbWV0YS5tSUQgPSBtZXRhLmtUeXBlMTsKKyAgICAgICAgICAgICAgICBtZXRhLnNUeXBlMS5tUi54ID0gaGRyLm1hc3RlcmluZy5yZWQueCAvIDAuMDAwMDIgKyAwLjU7CisgICAgICAgICAgICAgICAgbWV0YS5zVHlwZTEubVIueSA9IGhkci5tYXN0ZXJpbmcucmVkLnkgLyAwLjAwMDAyICsgMC41OworICAgICAgICAgICAgICAgIG1ldGEuc1R5cGUxLm1HLnggPSBoZHIubWFzdGVyaW5nLmdyZWVuLnggLyAwLjAwMDAyICsgMC41OworICAgICAgICAgICAgICAgIG1ldGEuc1R5cGUxLm1HLnkgPSBoZHIubWFzdGVyaW5nLmdyZWVuLnkgLyAwLjAwMDAyICsgMC41OworICAgICAgICAgICAgICAgIG1ldGEuc1R5cGUxLm1CLnggPSBoZHIubWFzdGVyaW5nLmJsdWUueCAvIDAuMDAwMDIgKyAwLjU7CisgICAgICAgICAgICAgICAgbWV0YS5zVHlwZTEubUIueSA9IGhkci5tYXN0ZXJpbmcuYmx1ZS55IC8gMC4wMDAwMiArIDAuNTsKKyAgICAgICAgICAgICAgICBtZXRhLnNUeXBlMS5tVy54ID0gaGRyLm1hc3RlcmluZy53aGl0ZS54IC8gMC4wMDAwMiArIDAuNTsKKyAgICAgICAgICAgICAgICBtZXRhLnNUeXBlMS5tVy55ID0gaGRyLm1hc3RlcmluZy53aGl0ZS55IC8gMC4wMDAwMiArIDAuNTsKKyAgICAgICAgICAgICAgICBtZXRhLnNUeXBlMS5tTWF4RGlzcGxheUx1bWluYW5jZSA9IGhkci5tYXN0ZXJpbmcubWF4THVtaW5hbmNlICsgMC41OworICAgICAgICAgICAgICAgIG1ldGEuc1R5cGUxLm1NaW5EaXNwbGF5THVtaW5hbmNlID0gaGRyLm1hc3RlcmluZy5taW5MdW1pbmFuY2UgLyAwLjAwMDEgKyAwLjU7CisgICAgICAgICAgICAgICAgbWV0YS5zVHlwZTEubU1heENvbnRlbnRMaWdodExldmVsID0gaGRyLm1heENsbCArIDAuNTsKKyAgICAgICAgICAgICAgICBtZXRhLnNUeXBlMS5tTWF4RnJhbWVBdmVyYWdlTGlnaHRMZXZlbCA9IGhkci5tYXhGYWxsICsgMC41OworICAgICAgICAgICAgICAgIG1zZy0+cmVtb3ZlRW50cnlBdChtc2ctPmZpbmRFbnRyeUJ5TmFtZSgic21wdGUyMDg2LnJlZC54IikpOworICAgICAgICAgICAgICAgIG1zZy0+cmVtb3ZlRW50cnlBdChtc2ctPmZpbmRFbnRyeUJ5TmFtZSgic21wdGUyMDg2LnJlZC55IikpOworICAgICAgICAgICAgICAgIG1zZy0+cmVtb3ZlRW50cnlBdChtc2ctPmZpbmRFbnRyeUJ5TmFtZSgic21wdGUyMDg2LmdyZWVuLngiKSk7CisgICAgICAgICAgICAgICAgbXNnLT5yZW1vdmVFbnRyeUF0KG1zZy0+ZmluZEVudHJ5QnlOYW1lKCJzbXB0ZTIwODYuZ3JlZW4ueSIpKTsKKyAgICAgICAgICAgICAgICBtc2ctPnJlbW92ZUVudHJ5QXQobXNnLT5maW5kRW50cnlCeU5hbWUoInNtcHRlMjA4Ni5ibHVlLngiKSk7CisgICAgICAgICAgICAgICAgbXNnLT5yZW1vdmVFbnRyeUF0KG1zZy0+ZmluZEVudHJ5QnlOYW1lKCJzbXB0ZTIwODYuYmx1ZS55IikpOworICAgICAgICAgICAgICAgIG1zZy0+cmVtb3ZlRW50cnlBdChtc2ctPmZpbmRFbnRyeUJ5TmFtZSgic21wdGUyMDg2LndoaXRlLngiKSk7CisgICAgICAgICAgICAgICAgbXNnLT5yZW1vdmVFbnRyeUF0KG1zZy0+ZmluZEVudHJ5QnlOYW1lKCJzbXB0ZTIwODYud2hpdGUueSIpKTsKKyAgICAgICAgICAgICAgICBtc2ctPnJlbW92ZUVudHJ5QXQobXNnLT5maW5kRW50cnlCeU5hbWUoInNtcHRlMjA4Ni5tYXgtbHVtaW5hbmNlIikpOworICAgICAgICAgICAgICAgIG1zZy0+cmVtb3ZlRW50cnlBdChtc2ctPmZpbmRFbnRyeUJ5TmFtZSgic21wdGUyMDg2Lm1pbi1sdW1pbmFuY2UiKSk7CisgICAgICAgICAgICAgICAgbXNnLT5yZW1vdmVFbnRyeUF0KG1zZy0+ZmluZEVudHJ5QnlOYW1lKCJjdGE4NjEubWF4LWNsbCIpKTsKKyAgICAgICAgICAgICAgICBtc2ctPnJlbW92ZUVudHJ5QXQobXNnLT5maW5kRW50cnlCeU5hbWUoImN0YTg2MS5tYXgtZmFsbCIpKTsKKyAgICAgICAgICAgICAgICBtc2ctPnNldEJ1ZmZlcihLRVlfSERSX1NUQVRJQ19JTkZPLCBBQnVmZmVyOjpDcmVhdGVBc0NvcHkoJm1ldGEsIHNpemVvZihtZXRhKSkpOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBBTE9HRCgiZm91bmQgaW52YWxpZCBIRFIgc3RhdGljIG1ldGFkYXRhICVzIiwgbXNnLT5kZWJ1Z1N0cmluZyg4KS5jX3N0cigpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKworICAgIEFMT0dWKCJjb252ZXJ0ZWQgdG8gU0RLIHZhbHVlcyBhcyAlcyIsIG1zZy0+ZGVidWdTdHJpbmcoKS5jX3N0cigpKTsKKyAgICByZXR1cm4gbXNnOworfQorCisvLy8gY29udmVydHMgYW4gQU1lc3NhZ2UgdmFsdWUgdG8gYSBQYXJhbVVwZGF0ZXIgdmFsdWUKK3N0YXRpYyB2b2lkIGNvbnZlcnQoY29uc3QgQU1lc3NhZ2U6Okl0ZW1EYXRhICZmcm9tLCBSZWZsZWN0ZWRQYXJhbVVwZGF0ZXI6OlZhbHVlICp0bykgeworICAgIGludDMyX3QgaW50MzJWYWx1ZTsKKyAgICBpbnQ2NF90IGludDY0VmFsdWU7CisgICAgc3A8QUJ1ZmZlcj4gYnVmVmFsdWU7CisgICAgQVN0cmluZyBzdHJWYWx1ZTsKKyAgICBmbG9hdCBmbG9hdFZhbHVlOworICAgIGRvdWJsZSBkb3VibGVWYWx1ZTsKKworICAgIGlmIChmcm9tLmZpbmQoJmludDMyVmFsdWUpKSB7CisgICAgICAgIHRvLT5zZXQoaW50MzJWYWx1ZSk7CisgICAgfSBlbHNlIGlmIChmcm9tLmZpbmQoJmludDY0VmFsdWUpKSB7CisgICAgICAgIHRvLT5zZXQoaW50NjRWYWx1ZSk7CisgICAgfSBlbHNlIGlmIChmcm9tLmZpbmQoJmJ1ZlZhbHVlKSkgeworICAgICAgICB0by0+c2V0KGJ1ZlZhbHVlKTsKKyAgICB9IGVsc2UgaWYgKGZyb20uZmluZCgmc3RyVmFsdWUpKSB7CisgICAgICAgIHRvLT5zZXQoc3RyVmFsdWUpOworICAgIH0gZWxzZSBpZiAoZnJvbS5maW5kKCZmbG9hdFZhbHVlKSkgeworICAgICAgICB0by0+c2V0KEMyVmFsdWUoZmxvYXRWYWx1ZSkpOworICAgIH0gZWxzZSBpZiAoZnJvbS5maW5kKCZkb3VibGVWYWx1ZSkpIHsKKyAgICAgICAgLy8gY29udmVydCBkb3VibGUgdG8gZmxvYXQKKyAgICAgICAgdG8tPnNldChDMlZhbHVlKChmbG9hdClkb3VibGVWYWx1ZSkpOworICAgIH0KKyAgICAvLyBpZ25vcmUgYWxsIG90aGVyIEFNZXNzYWdlIHR5cGVzCit9CisKKy8vLyByZWxheGVzIENvZGVjIDIuMCBzcGVjaWZpYyB2YWx1ZSB0eXBlcyB0byBTREsgdHlwZXMgKG1haW5seSByZW1vdmVzIHNpZ25lZG5lc3MgYW5kIGNvdW50ZXJuZXNzCisvLy8gZnJvbSAzMi82NC1iaXQgdmFsdWVzLikKK3N0YXRpYyB2b2lkIHJlbGF4VmFsdWVzKFJlZmxlY3RlZFBhcmFtVXBkYXRlcjo6VmFsdWUgJml0ZW0pIHsKKyAgICBDMlZhbHVlIGMyVmFsdWU7CisgICAgaW50MzJfdCBpbnQzMlZhbHVlOworICAgIGludDY0X3QgaW50NjRWYWx1ZTsKKyAgICAodm9pZClpdGVtLmZpbmQoJmMyVmFsdWUpOworICAgIGlmIChjMlZhbHVlLmdldCgmaW50MzJWYWx1ZSkgfHwgYzJWYWx1ZS5nZXQoKHVpbnQzMl90KikmaW50MzJWYWx1ZSkKKyAgICAgICAgICAgIHx8IGMyVmFsdWUuZ2V0KChjMl9jbnRyMzJfdCopJmludDMyVmFsdWUpKSB7CisgICAgICAgIGl0ZW0uc2V0KGludDMyVmFsdWUpOworICAgIH0gZWxzZSBpZiAoYzJWYWx1ZS5nZXQoJmludDY0VmFsdWUpCisgICAgICAgICAgICB8fCBjMlZhbHVlLmdldCgodWludDY0X3QqKSZpbnQ2NFZhbHVlKQorICAgICAgICAgICAgfHwgYzJWYWx1ZS5nZXQoKGMyX2NudHI2NF90KikmaW50NjRWYWx1ZSkpIHsKKyAgICAgICAgaXRlbS5zZXQoaW50NjRWYWx1ZSk7CisgICAgfQorfQorCitSZWZsZWN0ZWRQYXJhbVVwZGF0ZXI6OkRpY3QgQ0NvZGVjQ29uZmlnOjpnZXRSZWZsZWN0ZWRGb3JtYXQoCisgICAgICAgIGNvbnN0IHNwPEFNZXNzYWdlPiAmcGFyYW1zXywgRG9tYWluIGNvbmZpZ0RvbWFpbikgY29uc3QgeworICAgIC8vIGNyZWF0ZSBhIG1vZGlmaWFibGUgY29weSBvZiBwYXJhbXMKKyAgICBzcDxBTWVzc2FnZT4gcGFyYW1zID0gcGFyYW1zXy0+ZHVwKCk7CisgICAgQUxPR1YoImZpbHRlcmluZyB3aXRoIGNvbmZpZyBkb21haW4gJXgiLCBjb25maWdEb21haW4pOworCisgICAgLy8gY29udmVydCBzb21lIG1hY3JvIHBhcmFtZXRlcnMgdG8gQ29kZWMgMi4wIHNwZWNpZmljIGV4cHJlc3Npb25zCisKKyAgICB7IC8vIG1ha2UgaS1mcmFtZS1pbnRlcnZhbCBmcmFtZSBiYXNlZAorICAgICAgICBmbG9hdCBpRnJhbWVJbnRlcnZhbDsKKyAgICAgICAgaWYgKHBhcmFtcy0+ZmluZEFzRmxvYXQoS0VZX0lfRlJBTUVfSU5URVJWQUwsICZpRnJhbWVJbnRlcnZhbCkpIHsKKyAgICAgICAgICAgIGZsb2F0IGZyYW1lUmF0ZTsKKyAgICAgICAgICAgIGlmIChwYXJhbXMtPmZpbmRBc0Zsb2F0KEtFWV9GUkFNRV9SQVRFLCAmZnJhbWVSYXRlKSkgeworICAgICAgICAgICAgICAgIHBhcmFtcy0+c2V0SW50MzIoImktZnJhbWUtcGVyaW9kIiwKKyAgICAgICAgICAgICAgICAgICAgICAgIChmcmFtZVJhdGUgPD0gMCB8fCBpRnJhbWVJbnRlcnZhbCA8IDApCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IC0xIC8qIG5vIHN5bmMgZnJhbWVzICovCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IChpbnQzMl90KWMyX21pbihpRnJhbWVJbnRlcnZhbCAqIGZyYW1lUmF0ZSArIDAuNSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChmbG9hdClJTlQzMl9NQVgpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKworICAgIGlmIChtRG9tYWluID09IChJU19WSURFTyB8IElTX0VOQ09ERVIpKSB7CisgICAgICAgIC8vIGNvbnZlcnQgY2FwdHVyZS1yYXRlIGludG8gaW5wdXQtdGltZS1zdHJldGNoCisgICAgICAgIGZsb2F0IGZyYW1lUmF0ZSwgY2FwdHVyZVJhdGU7CisgICAgICAgIGlmIChwYXJhbXMtPmZpbmRBc0Zsb2F0KEtFWV9GUkFNRV9SQVRFLCAmZnJhbWVSYXRlKSkgeworICAgICAgICAgICAgaWYgKCFwYXJhbXMtPmZpbmRBc0Zsb2F0KCJ0aW1lLWxhcHNlLWZwcyIsICZjYXB0dXJlUmF0ZSkKKyAgICAgICAgICAgICAgICAgICAgJiYgIXBhcmFtcy0+ZmluZEFzRmxvYXQoS0VZX0NBUFRVUkVfUkFURSwgJmNhcHR1cmVSYXRlKSkgeworICAgICAgICAgICAgICAgIGNhcHR1cmVSYXRlID0gZnJhbWVSYXRlOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKGNhcHR1cmVSYXRlID4gMCAmJiBmcmFtZVJhdGUgPiAwKSB7CisgICAgICAgICAgICAgICAgcGFyYW1zLT5zZXRGbG9hdChDMl9QQVJBTUtFWV9JTlBVVF9USU1FX1NUUkVUQ0gsIGNhcHR1cmVSYXRlIC8gZnJhbWVSYXRlKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKworICAgIHsgICAvLyByZWZsZWN0IHRlbXBvcmFsIGxheWVyaW5nIGludG8gYSBiaW5hcnkgYmxvYgorICAgICAgICBBU3RyaW5nIHNjaGVtYTsKKyAgICAgICAgaWYgKHBhcmFtcy0+ZmluZFN0cmluZyhLRVlfVEVNUE9SQUxfTEFZRVJJTkcsICZzY2hlbWEpKSB7CisgICAgICAgICAgICB1bnNpZ25lZCBpbnQgbnVtTGF5ZXJzID0gMDsKKyAgICAgICAgICAgIHVuc2lnbmVkIGludCBudW1CTGF5ZXJzID0gMDsKKyAgICAgICAgICAgIGludCB0YWdzOworICAgICAgICAgICAgY2hhciBkdW1teTsKKyAgICAgICAgICAgIHN0ZDo6dW5pcXVlX3B0cjxDMlN0cmVhbVRlbXBvcmFsTGF5ZXJpbmdUdW5pbmc6Om91dHB1dD4gbGF5ZXJpbmc7CisgICAgICAgICAgICBpZiAoc3NjYW5mKHNjaGVtYS5jX3N0cigpLCAid2VicnRjLnZwOC4ldS1sYXllciVjIiwgJm51bUxheWVycywgJmR1bW15KSA9PSAxCisgICAgICAgICAgICAgICAgJiYgbnVtTGF5ZXJzID4gMCkgeworICAgICAgICAgICAgICAgIHN3aXRjaCAobnVtTGF5ZXJzKSB7CisgICAgICAgICAgICAgICAgICAgIGNhc2UgMToKKyAgICAgICAgICAgICAgICAgICAgICAgIGxheWVyaW5nID0gQzJTdHJlYW1UZW1wb3JhbExheWVyaW5nVHVuaW5nOjpvdXRwdXQ6OkFsbG9jVW5pcXVlKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7fSwgMHUsIDF1LCAwdSk7CisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgY2FzZSAyOgorICAgICAgICAgICAgICAgICAgICAgICAgbGF5ZXJpbmcgPSBDMlN0cmVhbVRlbXBvcmFsTGF5ZXJpbmdUdW5pbmc6Om91dHB1dDo6QWxsb2NVbmlxdWUoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgLjZmIH0sIDB1LCAydSwgMHUpOworICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIGNhc2UgMzoKKyAgICAgICAgICAgICAgICAgICAgICAgIGxheWVyaW5nID0gQzJTdHJlYW1UZW1wb3JhbExheWVyaW5nVHVuaW5nOjpvdXRwdXQ6OkFsbG9jVW5pcXVlKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7IC40ZiwgLjZmIH0sIDB1LCAzdSwgMHUpOworICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgICAgICAgICBsYXllcmluZyA9IEMyU3RyZWFtVGVtcG9yYWxMYXllcmluZ1R1bmluZzo6b3V0cHV0OjpBbGxvY1VuaXF1ZSgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeyAuMjVmLCAuNGYsIC42ZiB9LCAwdSwgNHUsIDB1KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0gZWxzZSBpZiAoKHRhZ3MgPSBzc2NhbmYoc2NoZW1hLmNfc3RyKCksICJhbmRyb2lkLmdlbmVyaWMuJXUlYyV1JWMiLAorICAgICAgICAgICAgICAgICAgICAgICAgJm51bUxheWVycywgJmR1bW15LCAmbnVtQkxheWVycywgJmR1bW15KSkKKyAgICAgICAgICAgICAgICAmJiAodGFncyA9PSAxIHx8ICh0YWdzID09IDMgJiYgZHVtbXkgPT0gJysnKSkKKyAgICAgICAgICAgICAgICAmJiBudW1MYXllcnMgPiAwICYmIG51bUxheWVycyA8IFVJTlQzMl9NQVggLSBudW1CTGF5ZXJzKSB7CisgICAgICAgICAgICAgICAgbGF5ZXJpbmcgPSBDMlN0cmVhbVRlbXBvcmFsTGF5ZXJpbmdUdW5pbmc6Om91dHB1dDo6QWxsb2NVbmlxdWUoCisgICAgICAgICAgICAgICAgICAgICAgICB7fSwgMHUsIG51bUxheWVycyArIG51bUJMYXllcnMsIG51bUJMYXllcnMpOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBBTE9HRCgiSWdub3JpbmcgdW5zdXBwb3J0ZWQgdHMtc2NoZW1hIFslc10iLCBzY2hlbWEuY19zdHIoKSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAobGF5ZXJpbmcpIHsKKyAgICAgICAgICAgICAgICBwYXJhbXMtPnNldEJ1ZmZlcihDMl9QQVJBTUtFWV9URU1QT1JBTF9MQVlFUklORywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBQnVmZmVyOjpDcmVhdGVBc0NvcHkobGF5ZXJpbmcuZ2V0KCksIGxheWVyaW5nLT5zaXplKCkpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKworICAgIHsgLy8gY29udmVydCBmcm9tIE1lZGlhRm9ybWF0IHJlY3QgdG8gQ29kZWMgMi4wIHJlY3QKKyAgICAgICAgaW50MzJfdCBvZmZzZXQ7CisgICAgICAgIGludDMyX3QgZW5kOworICAgICAgICBBTWVzc2FnZTo6SXRlbURhdGEgaXRlbTsKKyAgICAgICAgaWYgKHBhcmFtcy0+ZmluZEludDMyKCJjcm9wLWxlZnQiLCAmb2Zmc2V0KSAmJiBwYXJhbXMtPmZpbmRJbnQzMigiY3JvcC1yaWdodCIsICZlbmQpCisgICAgICAgICAgICAgICAgJiYgb2Zmc2V0ID49IDAgJiYgZW5kID49IG9mZnNldCAtIDEpIHsKKyAgICAgICAgICAgIHNpemVfdCBpeCA9IHBhcmFtcy0+ZmluZEVudHJ5QnlOYW1lKCJjcm9wLXJpZ2h0Iik7CisgICAgICAgICAgICBwYXJhbXMtPnNldEVudHJ5TmFtZUF0KGl4LCAiY3JvcC13aWR0aCIpOworICAgICAgICAgICAgaXRlbS5zZXQoZW5kIC0gb2Zmc2V0ICsgMSk7CisgICAgICAgICAgICBwYXJhbXMtPnNldEVudHJ5QXQoaXgsIGl0ZW0pOworICAgICAgICB9CisgICAgICAgIGlmIChwYXJhbXMtPmZpbmRJbnQzMigiY3JvcC10b3AiLCAmb2Zmc2V0KSAmJiBwYXJhbXMtPmZpbmRJbnQzMigiY3JvcC1ib3R0b20iLCAmZW5kKQorICAgICAgICAgICAgICAgICYmIG9mZnNldCA+PSAwICYmIGVuZCA+PSBvZmZzZXQgLSAxKSB7CisgICAgICAgICAgICBzaXplX3QgaXggPSBwYXJhbXMtPmZpbmRFbnRyeUJ5TmFtZSgiY3JvcC1ib3R0b20iKTsKKyAgICAgICAgICAgIHBhcmFtcy0+c2V0RW50cnlOYW1lQXQoaXgsICJjcm9wLWhlaWdodCIpOworICAgICAgICAgICAgaXRlbS5zZXQoZW5kIC0gb2Zmc2V0ICsgMSk7CisgICAgICAgICAgICBwYXJhbXMtPnNldEVudHJ5QXQoaXgsIGl0ZW0pOworICAgICAgICB9CisgICAgfQorCisgICAgeyAvLyBjb252ZXJ0IGNvbG9yIGluZm8KKyAgICAgICAgaW50MzJfdCBzdGFuZGFyZDsKKyAgICAgICAgaWYgKHBhcmFtcy0+ZmluZEludDMyKEtFWV9DT0xPUl9TVEFOREFSRCwgJnN0YW5kYXJkKSkgeworICAgICAgICAgICAgQzJDb2xvcjo6cHJpbWFyaWVzX3QgcHJpbWFyaWVzOworICAgICAgICAgICAgQzJDb2xvcjo6bWF0cml4X3QgbWF0cml4OworCisgICAgICAgICAgICBpZiAoQzJNYXBwZXI6Om1hcChzdGFuZGFyZCwgJnByaW1hcmllcywgJm1hdHJpeCkpIHsKKyAgICAgICAgICAgICAgICBwYXJhbXMtPnNldEludDMyKCJjb2xvci1wcmltYXJpZXMiLCBwcmltYXJpZXMpOworICAgICAgICAgICAgICAgIHBhcmFtcy0+c2V0SW50MzIoImNvbG9yLW1hdHJpeCIsIG1hdHJpeCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBzcDxBQnVmZmVyPiBoZHJNZXRhOworICAgICAgICBpZiAocGFyYW1zLT5maW5kQnVmZmVyKEtFWV9IRFJfU1RBVElDX0lORk8sICZoZHJNZXRhKQorICAgICAgICAgICAgICAgICYmIGhkck1ldGEtPnNpemUoKSA9PSBzaXplb2YoSERSU3RhdGljSW5mbykpIHsKKyAgICAgICAgICAgIEhEUlN0YXRpY0luZm8gKm1ldGEgPSAoSERSU3RhdGljSW5mbyopaGRyTWV0YS0+ZGF0YSgpOworICAgICAgICAgICAgaWYgKG1ldGEtPm1JRCA9PSBtZXRhLT5rVHlwZTEpIHsKKyAgICAgICAgICAgICAgICBwYXJhbXMtPnNldEZsb2F0KCJzbXB0ZTIwODYucmVkLngiLCBtZXRhLT5zVHlwZTEubVIueCAqIDAuMDAwMDIpOworICAgICAgICAgICAgICAgIHBhcmFtcy0+c2V0RmxvYXQoInNtcHRlMjA4Ni5yZWQueSIsIG1ldGEtPnNUeXBlMS5tUi55ICogMC4wMDAwMik7CisgICAgICAgICAgICAgICAgcGFyYW1zLT5zZXRGbG9hdCgic21wdGUyMDg2LmdyZWVuLngiLCBtZXRhLT5zVHlwZTEubUcueCAqIDAuMDAwMDIpOworICAgICAgICAgICAgICAgIHBhcmFtcy0+c2V0RmxvYXQoInNtcHRlMjA4Ni5ncmVlbi55IiwgbWV0YS0+c1R5cGUxLm1HLnkgKiAwLjAwMDAyKTsKKyAgICAgICAgICAgICAgICBwYXJhbXMtPnNldEZsb2F0KCJzbXB0ZTIwODYuYmx1ZS54IiwgbWV0YS0+c1R5cGUxLm1CLnggKiAwLjAwMDAyKTsKKyAgICAgICAgICAgICAgICBwYXJhbXMtPnNldEZsb2F0KCJzbXB0ZTIwODYuYmx1ZS55IiwgbWV0YS0+c1R5cGUxLm1CLnkgKiAwLjAwMDAyKTsKKyAgICAgICAgICAgICAgICBwYXJhbXMtPnNldEZsb2F0KCJzbXB0ZTIwODYud2hpdGUueCIsIG1ldGEtPnNUeXBlMS5tVy54ICogMC4wMDAwMik7CisgICAgICAgICAgICAgICAgcGFyYW1zLT5zZXRGbG9hdCgic21wdGUyMDg2LndoaXRlLnkiLCBtZXRhLT5zVHlwZTEubVcueSAqIDAuMDAwMDIpOworICAgICAgICAgICAgICAgIHBhcmFtcy0+c2V0RmxvYXQoInNtcHRlMjA4Ni5tYXgtbHVtaW5hbmNlIiwgbWV0YS0+c1R5cGUxLm1NYXhEaXNwbGF5THVtaW5hbmNlKTsKKyAgICAgICAgICAgICAgICBwYXJhbXMtPnNldEZsb2F0KCJzbXB0ZTIwODYubWluLWx1bWluYW5jZSIsIG1ldGEtPnNUeXBlMS5tTWluRGlzcGxheUx1bWluYW5jZSAqIDAuMDAwMSk7CisgICAgICAgICAgICAgICAgcGFyYW1zLT5zZXRGbG9hdCgiY3RhODYxLm1heC1jbGwiLCBtZXRhLT5zVHlwZTEubU1heENvbnRlbnRMaWdodExldmVsKTsKKyAgICAgICAgICAgICAgICBwYXJhbXMtPnNldEZsb2F0KCJjdGE4NjEubWF4LWZhbGwiLCBtZXRhLT5zVHlwZTEubU1heEZyYW1lQXZlcmFnZUxpZ2h0TGV2ZWwpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCisgICAgLy8gdGhpcyBpcyB0byB2ZXJpZnkgdGhhdCB3ZSBzZXQgcHJvcGVyIHNpZ25lZG5lc3MgZm9yIHN0YW5kYXJkIHBhcmFtZXRlcnMKKyAgICBib29sIGJlVmVyeVN0cmljdCA9IHByb3BlcnR5X2dldF9ib29sKCJkZWJ1Zy5zdGFnZWZyaWdodC5jY29kZWNfc3RyaWN0X3R5cGUiLCBmYWxzZSk7CisgICAgLy8gdGhpcyBpcyB0byBhbGxvdyB2ZW5kb3JzIHRvIHVzZSB0aGUgd3Jvbmcgc2lnbmVkbmVzcyBmb3Igc3RhbmRhcmQgcGFyYW1ldGVycworICAgIGJvb2wgYmVWZXJ5TGF4ID0gcHJvcGVydHlfZ2V0X2Jvb2woImRlYnVnLnN0YWdlZnJpZ2h0LmNjb2RlY19sYXhfdHlwZSIsIGZhbHNlKTsKKworICAgIFJlZmxlY3RlZFBhcmFtVXBkYXRlcjo6RGljdCBmaWx0ZXJlZDsKKyAgICBmb3IgKHNpemVfdCBpeCA9IDA7IGl4IDwgcGFyYW1zLT5jb3VudEVudHJpZXMoKTsgKytpeCkgeworICAgICAgICBBTWVzc2FnZTo6VHlwZSB0eXBlOworICAgICAgICBBU3RyaW5nIG5hbWUgPSBwYXJhbXMtPmdldEVudHJ5TmFtZUF0KGl4LCAmdHlwZSk7CisgICAgICAgIEFNZXNzYWdlOjpJdGVtRGF0YSBtc2dJdGVtID0gcGFyYW1zLT5nZXRFbnRyeUF0KGl4KTsKKyAgICAgICAgUmVmbGVjdGVkUGFyYW1VcGRhdGVyOjpWYWx1ZSBpdGVtOworICAgICAgICBjb252ZXJ0KG1zZ0l0ZW0sICZpdGVtKTsgLy8gY29udmVydCBpdGVtIHRvIHBhcmFtIHVwZGF0ZXIgaXRlbQorCisgICAgICAgIGlmIChuYW1lLnN0YXJ0c1dpdGgoInZlbmRvci4iKSkgeworICAgICAgICAgICAgLy8gdmVuZG9yIHBhcmFtcyBwYXNzIHRocm91Z2ggYXMgaXMKKyAgICAgICAgICAgIGZpbHRlcmVkLmVtcGxhY2UobmFtZS5jX3N0cigpLCBpdGVtKTsKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB9CisgICAgICAgIC8vIHN0YW5kYXJkIHBhcmFtZXRlcnMgbWF5IGdldCBtb2RpZmllZCwgZmlsdGVyZWQgb3IgZHVwbGljYXRlZAorICAgICAgICBmb3IgKGNvbnN0IENvbmZpZ01hcHBlciAmY20gOiBtU3RhbmRhcmRQYXJhbXMtPmdldENvbmZpZ01hcHBlcnNGb3JTZGtLZXkobmFtZS5jX3N0cigpKSkgeworICAgICAgICAgICAgLy8gbm90ZTogd2UgaWdub3JlIHBvcnQgZG9tYWluIGZvciBjb25maWd1cmF0aW9uCisgICAgICAgICAgICBpZiAoKGNtLmRvbWFpbigpICYgY29uZmlnRG9tYWluKQorICAgICAgICAgICAgICAgICAgICAvLyBjb21wb25lbnQgZG9tYWluICsga2luZCAodGhlc2UgbXVzdCBtYXRjaCkKKyAgICAgICAgICAgICAgICAgICAgJiYgKGNtLmRvbWFpbigpICYgbURvbWFpbikgPT0gbURvbWFpbikgeworICAgICAgICAgICAgICAgIC8vIG1hcCBhcml0aG1ldGljIHZhbHVlcywgcGFzcyB0aHJvdWdoIHN0cmluZyBvciBidWZmZXIKKyAgICAgICAgICAgICAgICBzd2l0Y2ggKHR5cGUpIHsKKyAgICAgICAgICAgICAgICAgICAgY2FzZSBBTWVzc2FnZTo6a1R5cGVCdWZmZXI6CisgICAgICAgICAgICAgICAgICAgIGNhc2UgQU1lc3NhZ2U6OmtUeXBlU3RyaW5nOgorICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIGNhc2UgQU1lc3NhZ2U6OmtUeXBlSW50MzI6CisgICAgICAgICAgICAgICAgICAgIGNhc2UgQU1lc3NhZ2U6OmtUeXBlSW50NjQ6CisgICAgICAgICAgICAgICAgICAgIGNhc2UgQU1lc3NhZ2U6OmtUeXBlRmxvYXQ6CisgICAgICAgICAgICAgICAgICAgIGNhc2UgQU1lc3NhZ2U6OmtUeXBlRG91YmxlOgorICAgICAgICAgICAgICAgICAgICAgICAgLy8gZm9yIG5vdyBvbmx5IG1hcCBzZXR0aW5ncyB3aXRoIG1hcHBlcnMgYXMgd2UgYXJlIG5vdCBjcmVhdGluZworICAgICAgICAgICAgICAgICAgICAgICAgLy8gc2lnbmVkIDw9PiB1bnNpZ25lZCBtYXBwZXJzCisgICAgICAgICAgICAgICAgICAgICAgICAvLyBUT0RPOiBiZSBwcmVjaXNlIGFib3V0IHNpZ25lZCB1bnNpZ25lZAorICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGJlVmVyeVN0cmljdCB8fCBjbS5tYXBwZXIoKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW0uc2V0KGNtLm1hcEZyb21NZXNzYWdlKHBhcmFtcy0+Z2V0RW50cnlBdChpeCkpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBhbHNvIGFsbG93IHRvIHJlbGF4IHR5cGUgc3RyaWN0bmVzcworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChiZVZlcnlMYXgpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVsYXhWYWx1ZXMoaXRlbSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZmlsdGVyZWQuZW1wbGFjZShjbS5wYXRoKCksIGl0ZW0pOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorICAgIEFMT0dWKCJmaWx0ZXJlZCAlcyB0byAlcyIsIHBhcmFtcy0+ZGVidWdTdHJpbmcoNCkuY19zdHIoKSwKKyAgICAgICAgICAgIGZpbHRlcmVkLmRlYnVnU3RyaW5nKDQpLmNfc3RyKCkpOworICAgIHJldHVybiBmaWx0ZXJlZDsKK30KKworc3RhdHVzX3QgQ0NvZGVjQ29uZmlnOjpnZXRDb25maWdVcGRhdGVGcm9tU2RrUGFyYW1zKAorICAgICAgICBzdGQ6OnNoYXJlZF9wdHI8Q29kZWMyQ2xpZW50OjpDb21wb25lbnQ+IGNvbXBvbmVudCwKKyAgICAgICAgY29uc3Qgc3A8QU1lc3NhZ2U+ICZzZGtQYXJhbXMsIERvbWFpbiBjb25maWdEb21haW4sCisgICAgICAgIGMyX2Jsb2NraW5nX3QgYmxvY2tpbmcsCisgICAgICAgIHN0ZDo6dmVjdG9yPHN0ZDo6dW5pcXVlX3B0cjxDMlBhcmFtPj4gKmNvbmZpZ1VwZGF0ZSkgY29uc3QgeworICAgIFJlZmxlY3RlZFBhcmFtVXBkYXRlcjo6RGljdCBwYXJhbXMgPSBnZXRSZWZsZWN0ZWRGb3JtYXQoc2RrUGFyYW1zLCBjb25maWdEb21haW4pOworCisgICAgc3RkOjp2ZWN0b3I8QzJQYXJhbTo6SW5kZXg+IGluZGljZXM7CisgICAgbVBhcmFtVXBkYXRlci0+Z2V0UGFyYW1JbmRpY2VzRnJvbU1lc3NhZ2UocGFyYW1zLCAmaW5kaWNlcyk7CisgICAgaWYgKGluZGljZXMuZW1wdHkoKSkgeworICAgICAgICBBTE9HRCgibm8gcmVjb2duaXplZCBwYXJhbXMgaW46ICVzIiwgcGFyYW1zLmRlYnVnU3RyaW5nKCkuY19zdHIoKSk7CisgICAgICAgIHJldHVybiBPSzsKKyAgICB9CisKKyAgICBjb25maWdVcGRhdGUtPmNsZWFyKCk7CisgICAgc3RkOjp2ZWN0b3I8QzJQYXJhbTo6SW5kZXg+IHN1cHBvcnRlZEluZGljZXM7CisgICAgZm9yIChDMlBhcmFtOjpJbmRleCBpeCA6IGluZGljZXMpIHsKKyAgICAgICAgaWYgKG1TdXBwb3J0ZWRJbmRpY2VzLmNvdW50KGl4KSkgeworICAgICAgICAgICAgc3VwcG9ydGVkSW5kaWNlcy5wdXNoX2JhY2soaXgpOworICAgICAgICB9IGVsc2UgaWYgKG1Mb2NhbFBhcmFtcy5jb3VudChpeCkpIHsKKyAgICAgICAgICAgIC8vIHF1ZXJ5IGxvY2FsIHBhcmFtZXRlciBoZXJlCisgICAgICAgICAgICBhdXRvIGl0ID0gbUN1cnJlbnRDb25maWcuZmluZChpeCk7CisgICAgICAgICAgICBpZiAoaXQgIT0gbUN1cnJlbnRDb25maWcuZW5kKCkpIHsKKyAgICAgICAgICAgICAgICBjb25maWdVcGRhdGUtPmVtcGxhY2VfYmFjayhDMlBhcmFtOjpDb3B5KCppdC0+c2Vjb25kKSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKKyAgICBjMl9zdGF0dXNfdCBlcnIgPSBjb21wb25lbnQtPnF1ZXJ5KHsgfSwgc3VwcG9ydGVkSW5kaWNlcywgYmxvY2tpbmcsIGNvbmZpZ1VwZGF0ZSk7CisgICAgaWYgKGVyciAhPSBDMl9PSykgeworICAgICAgICBBTE9HRCgicXVlcnkgZmFpbGVkIGFmdGVyIHJldHVybmluZyAlenUgcGFyYW1zID0+ICVzIiwgY29uZmlnVXBkYXRlLT5zaXplKCksIGFzU3RyaW5nKGVycikpOworICAgIH0KKworICAgIGlmIChjb25maWdVcGRhdGUtPnNpemUoKSkgeworICAgICAgICBtUGFyYW1VcGRhdGVyLT51cGRhdGVQYXJhbXNGcm9tTWVzc2FnZShwYXJhbXMsIGNvbmZpZ1VwZGF0ZSk7CisgICAgfQorICAgIHJldHVybiBPSzsKK30KKworc3RhdHVzX3QgQ0NvZGVjQ29uZmlnOjpzZXRQYXJhbWV0ZXJzKAorICAgICAgICBzdGQ6OnNoYXJlZF9wdHI8Q29kZWMyQ2xpZW50OjpDb21wb25lbnQ+IGNvbXBvbmVudCwKKyAgICAgICAgc3RkOjp2ZWN0b3I8c3RkOjp1bmlxdWVfcHRyPEMyUGFyYW0+PiAmY29uZmlnVXBkYXRlLAorICAgICAgICBjMl9ibG9ja2luZ190IGJsb2NraW5nKSB7CisgICAgc3RhdHVzX3QgcmVzdWx0ID0gT0s7CisgICAgaWYgKGNvbmZpZ1VwZGF0ZS5lbXB0eSgpKSB7CisgICAgICAgIHJldHVybiBPSzsKKyAgICB9CisKKyAgICBzdGQ6OnZlY3RvcjxDMlBhcmFtOjpJbmRleD4gaW5kaWNlczsKKyAgICBzdGQ6OnZlY3RvcjxDMlBhcmFtICo+IHBhcmFtVmVjdG9yOworICAgIGZvciAoY29uc3Qgc3RkOjp1bmlxdWVfcHRyPEMyUGFyYW0+ICZwYXJhbSA6IGNvbmZpZ1VwZGF0ZSkgeworICAgICAgICBpZiAobVN1cHBvcnRlZEluZGljZXMuY291bnQocGFyYW0tPmluZGV4KCkpKSB7CisgICAgICAgICAgICAvLyBjb21wb25lbnQgcGFyYW1ldGVyCisgICAgICAgICAgICBwYXJhbVZlY3Rvci5wdXNoX2JhY2socGFyYW0uZ2V0KCkpOworICAgICAgICAgICAgaW5kaWNlcy5wdXNoX2JhY2socGFyYW0tPmluZGV4KCkpOworICAgICAgICB9IGVsc2UgaWYgKG1Mb2NhbFBhcmFtcy5jb3VudChwYXJhbS0+aW5kZXgoKSkpIHsKKyAgICAgICAgICAgIC8vIGhhbmRsZSBsb2NhbCBwYXJhbWV0ZXIgaGVyZQorICAgICAgICAgICAgTG9jYWxQYXJhbVZhbGlkYXRvciB2YWxpZGF0b3IgPSBtTG9jYWxQYXJhbXMuZmluZChwYXJhbS0+aW5kZXgoKSktPnNlY29uZDsKKyAgICAgICAgICAgIGMyX3N0YXR1c190IGVyciA9IEMyX09LOworICAgICAgICAgICAgc3RkOjp1bmlxdWVfcHRyPEMyUGFyYW0+IGNvcHkgPSBDMlBhcmFtOjpDb3B5KCpwYXJhbSk7CisgICAgICAgICAgICBpZiAodmFsaWRhdG9yKSB7CisgICAgICAgICAgICAgICAgZXJyID0gdmFsaWRhdG9yKGNvcHkpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKGVyciA9PSBDMl9PSykgeworICAgICAgICAgICAgICAgIEFMT0dWKCJ1cGRhdGVkIGxvY2FsIHBhcmFtZXRlciB2YWx1ZSBmb3IgJXMiLAorICAgICAgICAgICAgICAgICAgICAgICAgbVBhcmFtVXBkYXRlci0+Z2V0UGFyYW1OYW1lKHBhcmFtLT5pbmRleCgpKS5jX3N0cigpKTsKKworICAgICAgICAgICAgICAgIG1DdXJyZW50Q29uZmlnW3BhcmFtLT5pbmRleCgpXSA9IHN0ZDo6bW92ZShjb3B5KTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgQUxPR0QoImZhaWxlZCB0byBzZXQgcGFyYW1ldGVyIHZhbHVlIGZvciAlcyA9PiAlcyIsCisgICAgICAgICAgICAgICAgICAgICAgICBtUGFyYW1VcGRhdGVyLT5nZXRQYXJhbU5hbWUocGFyYW0tPmluZGV4KCkpLmNfc3RyKCksIGFzU3RyaW5nKGVycikpOworICAgICAgICAgICAgICAgIHJlc3VsdCA9IEJBRF9WQUxVRTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKyAgICAvLyB1cGRhdGUgc3Vic2NyaWJlZCBwYXJhbSBpbmRpY2VzCisgICAgc3Vic2NyaWJlVG9Db25maWdVcGRhdGUoY29tcG9uZW50LCBpbmRpY2VzLCBibG9ja2luZyk7CisKKyAgICBzdGQ6OnZlY3RvcjxzdGQ6OnVuaXF1ZV9wdHI8QzJTZXR0aW5nUmVzdWx0Pj4gZmFpbHVyZXM7CisgICAgYzJfc3RhdHVzX3QgZXJyID0gY29tcG9uZW50LT5jb25maWcocGFyYW1WZWN0b3IsIGJsb2NraW5nLCAmZmFpbHVyZXMpOworICAgIGlmIChlcnIgIT0gQzJfT0spIHsKKyAgICAgICAgQUxPR0QoImNvbmZpZyBmYWlsZWQgPT4gJXMiLCBhc1N0cmluZyhlcnIpKTsKKyAgICAgICAgLy8gVGhpcyBpcyBub24tZmF0YWwuCisgICAgfQorICAgIGZvciAoY29uc3Qgc3RkOjp1bmlxdWVfcHRyPEMyU2V0dGluZ1Jlc3VsdD4gJmZhaWx1cmUgOiBmYWlsdXJlcykgeworICAgICAgICBzd2l0Y2ggKGZhaWx1cmUtPmZhaWx1cmUpIHsKKyAgICAgICAgICAgIGNhc2UgQzJTZXR0aW5nUmVzdWx0OjpCQURfVkFMVUU6CisgICAgICAgICAgICAgICAgQUxPR0QoIkJhZCBwYXJhbWV0ZXIgdmFsdWUiKTsKKyAgICAgICAgICAgICAgICByZXN1bHQgPSBCQURfVkFMVUU7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgIEFMT0dWKCJmYWlsdXJlID0gJWQiLCBpbnQoZmFpbHVyZS0+ZmFpbHVyZSkpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgfQorCisgICAgLy8gUmUtcXVlcnkgcGFyYW1ldGVyIHZhbHVlcyBpbiBjYXNlIGNvbmZpZyBjb3VsZCBub3QgdXBkYXRlIHRoZW0gYW5kIHVwZGF0ZSB0aGUgY3VycmVudAorICAgIC8vIGNvbmZpZ3VyYXRpb24uCisgICAgY29uZmlnVXBkYXRlLmNsZWFyKCk7CisgICAgZXJyID0gY29tcG9uZW50LT5xdWVyeSh7fSwgaW5kaWNlcywgYmxvY2tpbmcsICZjb25maWdVcGRhdGUpOworICAgIGlmIChlcnIgIT0gQzJfT0spIHsKKyAgICAgICAgQUxPR0QoInF1ZXJ5IGZhaWxlZCBhZnRlciByZXR1cm5pbmcgJXp1IHBhcmFtcyA9PiAlcyIsIGNvbmZpZ1VwZGF0ZS5zaXplKCksIGFzU3RyaW5nKGVycikpOworICAgIH0KKyAgICAodm9pZCl1cGRhdGVDb25maWd1cmF0aW9uKGNvbmZpZ1VwZGF0ZSwgQUxMKTsKKworICAgIC8vIFRPRE86IGVycm9yIHZhbHVlCisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworY29uc3QgQzJQYXJhbSAqQ0NvZGVjQ29uZmlnOjpnZXRDb25maWdQYXJhbWV0ZXJWYWx1ZShDMlBhcmFtOjpJbmRleCBpbmRleCkgY29uc3QgeworICAgIGF1dG8gaXQgPSBtQ3VycmVudENvbmZpZy5maW5kKGluZGV4KTsKKyAgICBpZiAoaXQgPT0gbUN1cnJlbnRDb25maWcuZW5kKCkpIHsKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgfSBlbHNlIHsKKyAgICAgICAgcmV0dXJuIGl0LT5zZWNvbmQuZ2V0KCk7CisgICAgfQorfQorCit9ICAvLyBuYW1lc3BhY2UgYW5kcm9pZApkaWZmIC0tZ2l0IGEvbWVkaWEvY29kZWMyL3NmcGx1Z2luL0NDb2RlY0NvbmZpZy5oIGIvbWVkaWEvY29kZWMyL3NmcGx1Z2luL0NDb2RlY0NvbmZpZy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNiYWZlM2YKLS0tIC9kZXYvbnVsbAorKysgYi9tZWRpYS9jb2RlYzIvc2ZwbHVnaW4vQ0NvZGVjQ29uZmlnLmgKQEAgLTAsMCArMSwzNDUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTggVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworCisjaWZuZGVmIENfQ09ERUNfQ09ORklHX0hfCisjZGVmaW5lIENfQ09ERUNfQ09ORklHX0hfCisKKyNpbmNsdWRlIDxtYXA+CisjaW5jbHVkZSA8bWVtb3J5PgorI2luY2x1ZGUgPHNldD4KKyNpbmNsdWRlIDx2ZWN0b3I+CisKKyNpbmNsdWRlIDxDMkNvbXBvbmVudC5oPgorI2luY2x1ZGUgPGNvZGVjMi9oaWRsL2NsaWVudC5oPgorCisjaW5jbHVkZSA8dXRpbHMvUmVmQmFzZS5oPgorCisjaW5jbHVkZSAiSW5wdXRTdXJmYWNlV3JhcHBlci5oIgorI2luY2x1ZGUgIlJlZmxlY3RlZFBhcmFtVXBkYXRlci5oIgorCituYW1lc3BhY2UgYW5kcm9pZCB7CisKK3N0cnVjdCBBTWVzc2FnZTsKK3N0cnVjdCBTdGFuZGFyZFBhcmFtczsKKworLyoqCisgKiBTdHJ1Y3QgbWFuYWdpbmcgdGhlIGNvZGVjIGNvbmZpZ3VyYXRpb24gZm9yIENDb2RlYy4KKyAqLworc3RydWN0IENDb2RlY0NvbmZpZyB7CisKKyAgICAvKioKKyAgICAgKiBEb21haW4gY29uc2lzdHMgb2YgYSBiaXRtYXNrIGRpdmlkZWQgaW50byBmaWVsZHMsIGFuZCBzcGVjaWZpZXJzIHdvcmsgYnkgZXhjbHVkaW5nIG90aGVyCisgICAgICogdmFsdWVzIGluIHRob3NlIGRvbWFpbnMuCisgICAgICoKKyAgICAgKiBDb21wb25lbnQgZG9tYWlucyBhcmUgY29tcG9zZWQgYnkgb3ItaW5nIHRoZSBpbmRpdmlkdWFsIElTXyBjb25zdGFudHMsIGUuZy4KKyAgICAgKiBJU19ERUNPREVSIHwgSVNfQVVESU8uCisgICAgICoKKyAgICAgKiBDb25maWcgc3BlY2lmaWVycyBhcmUgY29tcG9zZWQgYnkgb3ItaW5nIHRoZSBpbmRpdmlkdWFsIG1hc2sgY29uc3RhbnRzLCBhbmQKKyAgICAgKiBhbmQtaW5nIHRoZXNlIGdyb3VwczogZS5nLiAoREVDT0RFUiB8IEVOQ09ERVIpICYgQVVESU8uCisgICAgICoKKyAgICAgKiBUaGUgbmFtaW5nIG9mIHRoZXNlIGNvbnN0YW50cyB3YXMgdG8gbGltaXQgdGhlIGxlbmd0aCBvZiBtYXNrIG5hbWVzIGFzIHRoZXNlIGFyZSB1c2VkIG1vcmUKKyAgICAgKiBjb21tb25seSBhcyBtYXNrcy4KKyAgICAgKi8KKyAgICBlbnVtIERvbWFpbiA6IHVpbnQzMl90IHsKKyAgICAgICAgLy8gY29tcG9uZW50IGRvbWFpbiAoZG9tYWluICYga2luZCkKKyAgICAgICAgR1VBUkRfQklUICAgPSAoMSA8PCAxKSwgICAvLy88IHRoaXMgaXMgdG8gcHJldmVudCBhZ2FpbnN0IGFjY2lkZW50YWwgJiYgb3IgfHwgdXNhZ2UKKyAgICAgICAgSVNfQVVESU8gICAgPSAoMSA8PCAyKSwgICAvLy88IGZvciBhdWRpbyBjb2RlY3MKKyAgICAgICAgSVNfVklERU8gICAgPSAoMSA8PCAzKSwgICAvLy88IGZvciB2aWRlbyBjb2RlY3MKKyAgICAgICAgSVNfSU1BR0UgICAgPSAoMSA8PCA0KSwgICAvLy88IGZvciBpbWFnZSBjb2RlY3MKKyAgICAgICAgT1RIRVJfRE9NQUlOID0gKDEgPDwgNSksICAvLy88IGZvciBvdGhlciBkb21haW5zCisKKyAgICAgICAgSVNfRU5DT0RFUiAgPSAoMSA8PCA2KSwgICAvLy88IGZvciBlbmNvZGVycworICAgICAgICBJU19ERUNPREVSICA9ICgxIDw8IDcpLCAgIC8vLzwgZm9yIGRlY29kZXJzCisgICAgICAgIE9USEVSX0tJTkQgID0gKDEgPDwgOCksICAgLy8vPCBmb3Igb3RoZXIgZG9tYWlucworCisgICAgICAgIC8vIGNvbmZpZyBkb21haW4KKyAgICAgICAgSVNfUEFSQU0gICAgPSAoMSA8PCA5KSwgICAvLy88IGZvciBzZXRQYXJhbWV0ZXIKKyAgICAgICAgSVNfQ09ORklHICAgPSAoMSA8PCAxMCksICAvLy88IGZvciBjb25maWd1cmUKKyAgICAgICAgSVNfUkVBRCAgICAgPSAoMSA8PCAxMSksICAvLy88IGZvciBnZXRGb3JtYXQKKworICAgICAgICAvLyBwb3J0IGRvbWFpbgorICAgICAgICBJU19JTlBVVCAgICA9ICgxIDw8IDEyKSwgIC8vLzwgZm9yIGlucHV0IHBvcnQgKGdldEZvcm1hdCkKKyAgICAgICAgSVNfT1VUUFVUICAgPSAoMSA8PCAxMyksICAvLy88IGZvciBvdXRwdXQgcG9ydCAoZ2V0Rm9ybWF0KQorICAgICAgICBJU19SQVcgICAgICA9ICgxIDw8IDE0KSwgIC8vLzwgZm9yIHJhdyBwb3J0IChpbnB1dC1lbmNvZGVyLCBvdXRwdXQtZGVjb2RlcikKKyAgICAgICAgSVNfQ09ERUQgICAgPSAoMSA8PCAxNSksICAvLy88IGZvciBjb2RlZCBwb3J0IChpbnB1dC1kZWNvZGVyLCBvdXRwdXQtZW5jb2RlcikKKworICAgICAgICBBTEwgICAgID0gfjBVLAorICAgICAgICBOT05FICAgID0gMCwKKworICAgICAgICBBVURJTyAgID0gfihJU19JTUFHRSB8IElTX1ZJREVPIHwgT1RIRVJfRE9NQUlOKSwKKyAgICAgICAgVklERU8gICA9IH4oSVNfQVVESU8gfCBJU19JTUFHRSB8IE9USEVSX0RPTUFJTiksCisgICAgICAgIElNQUdFICAgPSB+KElTX0FVRElPIHwgSVNfVklERU8gfCBPVEhFUl9ET01BSU4pLAorCisgICAgICAgIERFQ09ERVIgPSB+KElTX0VOQ09ERVIgfCBPVEhFUl9LSU5EKSwKKyAgICAgICAgRU5DT0RFUiA9IH4oSVNfREVDT0RFUiB8IE9USEVSX0tJTkQpLAorCisgICAgICAgIFBBUkFNICAgPSB+KElTX0NPTkZJRyB8IElTX1JFQUQpLAorICAgICAgICBDT05GSUcgID0gfihJU19QQVJBTSAgfCBJU19SRUFEKSwKKyAgICAgICAgUkVBRCAgICA9IH4oSVNfQ09ORklHIHwgSVNfUEFSQU0pLAorCisgICAgICAgIElOUFVUICAgPSB+KElTX09VVFBVVCB8IElTX1JBVyAgICB8IElTX0NPREVEKSwKKyAgICAgICAgT1VUUFVUICA9IH4oSVNfSU5QVVQgIHwgSVNfUkFXICAgIHwgSVNfQ09ERUQpLAorICAgICAgICBSQVcgICAgID0gfihJU19JTlBVVCAgfCBJU19PVVRQVVQgfCBJU19DT0RFRCksCisgICAgICAgIENPREVEICAgPSB+KElTX0lOUFVUICB8IElTX1JBVyAgICB8IElTX09VVFBVVCksCisgICAgfTsKKworICAgIC8vIHRoaW5ncyByZXF1aXJlZCB0byBtYW5hZ2UgZm9ybWF0cworICAgIHN0ZDo6dmVjdG9yPHN0ZDo6c2hhcmVkX3B0cjxDMlBhcmFtRGVzY3JpcHRvcj4+IG1QYXJhbURlc2NzOworICAgIHN0ZDo6c2hhcmVkX3B0cjxDMlBhcmFtUmVmbGVjdG9yPiBtUmVmbGVjdG9yOworCisgICAgc3RkOjpzaGFyZWRfcHRyPFJlZmxlY3RlZFBhcmFtVXBkYXRlcj4gbVBhcmFtVXBkYXRlcjsKKworICAgIERvbWFpbiBtRG9tYWluOyAvLyBjb21wb25lbnQgZG9tYWluCisgICAgRG9tYWluIG1JbnB1dERvbWFpbjsgLy8gaW5wdXQgcG9ydCBkb21haW4KKyAgICBEb21haW4gbU91dHB1dERvbWFpbjsgLy8gb3V0cHV0IHBvcnQgZG9tYWluCisgICAgc3RkOjpzdHJpbmcgbUNvZGluZ01lZGlhVHlwZTsgIC8vIG1lZGlhIHR5cGUgb2YgdGhlIGNvZGVkIHN0cmVhbQorCisgICAgLy8gc3RhbmRhcmQgTWVkaWFDb2RlYyB0byBDb2RlYyAyLjAgcGFyYW1zIG1hcHBpbmcKKyAgICBzdGQ6OnNoYXJlZF9wdHI8U3RhbmRhcmRQYXJhbXM+IG1TdGFuZGFyZFBhcmFtczsKKworICAgIHN0ZDo6c2V0PEMyUGFyYW06OkluZGV4PiBtU3VwcG9ydGVkSW5kaWNlczsgLy8vPCBpbmRpY2VzIHN1cHBvcnRlZCBieSB0aGUgY29tcG9uZW50CisgICAgc3RkOjpzZXQ8QzJQYXJhbTo6SW5kZXg+IG1TdWJzY3JpYmVkSW5kaWNlczsgLy8vPCBpbmRpY2VzIHRvIHN1YnNjcmliZSB0bworICAgIHNpemVfdCBtU3Vic2NyaWJlZEluZGljZXNTaXplOyAvLy88IGNvdW50IG9mIGN1cnJlbnRseSBzdWJzY3JpYmVkIGluZGljZXMKKworICAgIHNwPEFNZXNzYWdlPiBtSW5wdXRGb3JtYXQ7CisgICAgc3A8QU1lc3NhZ2U+IG1PdXRwdXRGb3JtYXQ7CisKKyAgICBib29sIG1Vc2luZ1N1cmZhY2U7IC8vLzwgdXNpbmcgaW5wdXQgb3Igb3V0cHV0IHN1cmZhY2UKKworICAgIHN0ZDo6c2hhcmVkX3B0cjxJbnB1dFN1cmZhY2VXcmFwcGVyPiBtSW5wdXRTdXJmYWNlOworICAgIHN0ZDo6dW5pcXVlX3B0cjxJbnB1dFN1cmZhY2VXcmFwcGVyOjpDb25maWc+IG1JU0NvbmZpZzsKKworICAgIC8vLyB0aGUgY3VycmVudCBjb25maWd1cmF0aW9uLiBVcGRhdGVkIGFmdGVyIGNvbmZpZ3VyZSgpIGFuZCBiYXNlZCBvbiBjb25maWdVcGRhdGUgaW4KKyAgICAvLy8gb25Xb3JrRG9uZQorICAgIHN0ZDo6bWFwPEMyUGFyYW06OkluZGV4LCBzdGQ6OnVuaXF1ZV9wdHI8QzJQYXJhbT4+IG1DdXJyZW50Q29uZmlnOworCisgICAgdHlwZWRlZiBzdGQ6OmZ1bmN0aW9uPGMyX3N0YXR1c190KHN0ZDo6dW5pcXVlX3B0cjxDMlBhcmFtPiYpPiBMb2NhbFBhcmFtVmFsaWRhdG9yOworCisgICAgLy8vIFBhcmFtZXRlciBpbmRpY2VzIHRyYWNrZWQgaW4gY3VycmVudCBjb25maWcgdGhhdCBhcmUgbm90IHN1cHBvcnRlZCBieSB0aGUgY29tcG9uZW50LgorICAgIC8vLyB0aGVzZSBhcmUgcHJvdmlkZWQgc28gdGhhdCBvcHRpb25hbCBwYXJhbWV0ZXJzIGNhbiByZW1haW4gaW4gdGhlIGN1cnJlbnQgY29uZmlndXJhdGlvbi4KKyAgICAvLy8gYXMgc3VjaCwgdGhlc2UgcGFyYW1ldGVycyBoYXZlIG5vIGRlcGVuZGVuY2llcy4gVE9ETzogdXNlIEMySW50ZXJmYWNlSGVscGVyIGZvciB0aGlzLgorICAgIC8vLyBGb3Igbm93IHN1cHBvcnQgYSB2YWxpZGF0aW9uIGZ1bmN0aW9uLgorICAgIHN0ZDo6bWFwPEMyUGFyYW06OkluZGV4LCBMb2NhbFBhcmFtVmFsaWRhdG9yPiBtTG9jYWxQYXJhbXM7CisKKyAgICBDQ29kZWNDb25maWcoKTsKKworICAgIC8vLyBpbml0aWFsaXplcyB0aGUgbWVtYmVycyByZXF1aXJlZCB0byBtYW5hZ2UgdGhlIGZvcm1hdDogZGVzY3JpcHRvcnMsIHJlZmxlY3RvciwKKyAgICAvLy8gcmVmbGVjdGVkIHBhcmFtIGhlbHBlciwgZG9tYWluLCBzdGFuZGFyZCBwYXJhbXMsIGFuZCBzdWJzY3JpYmVzIHRvIHN0YW5kYXJkCisgICAgLy8vIGluZGljZXMuCisgICAgc3RhdHVzX3QgaW5pdGlhbGl6ZSgKKyAgICAgICAgICAgIGNvbnN0IHN0ZDo6c2hhcmVkX3B0cjxDb2RlYzJDbGllbnQ+ICZjbGllbnQsCisgICAgICAgICAgICBjb25zdCBzdGQ6OnNoYXJlZF9wdHI8Q29kZWMyQ2xpZW50OjpDb21wb25lbnQ+ICZjb21wb25lbnQpOworCisKKyAgICAvKioKKyAgICAgKiBBZGRzIGEgbG9jYWxseSBtYWludGFpbmVkIHBhcmFtZXRlci4gVGhpcyBpcyB1c2VkIGZvciBvdXRwdXQgY29uZmlndXJhdGlvbiB0aGF0IGNhbiBiZQorICAgICAqIGFwcGVuZGVkIHRvIHRoZSBvdXRwdXQgYnVmZmVycyBpbiBjYXNlIGl0IGlzIG5vdCBzdXBwb3J0ZWQgYnkgdGhlIGNvbXBvbmVudC4KKyAgICAgKi8KKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgorICAgIGJvb2wgYWRkTG9jYWxQYXJhbSgKKyAgICAgICAgICAgIGNvbnN0IHN0ZDo6c3RyaW5nICZuYW1lLAorICAgICAgICAgICAgQzJQYXJhbURlc2NyaXB0b3I6OmF0dHJpYl90IGF0dHJpYiA9IEMyUGFyYW1EZXNjcmlwdG9yOjpJU19SRUFEX09OTFksCisgICAgICAgICAgICBzdGQ6OmZ1bmN0aW9uPGMyX3N0YXR1c190KHN0ZDo6dW5pcXVlX3B0cjxUPiYpPiB2YWxpZGF0b3JfID0KKyAgICAgICAgICAgICAgICBzdGQ6OmZ1bmN0aW9uPGMyX3N0YXR1c190KHN0ZDo6dW5pcXVlX3B0cjxUPiYpPigpKSB7CisgICAgICAgIEMyUGFyYW06OkluZGV4IGluZGV4ID0gVDo6UEFSQU1fVFlQRTsKKyAgICAgICAgaWYgKG1TdXBwb3J0ZWRJbmRpY2VzLmNvdW50KGluZGV4KSB8fCBtTG9jYWxQYXJhbXMuY291bnQoaW5kZXgpKSB7CisgICAgICAgICAgICBpZiAobVN1cHBvcnRlZEluZGljZXMuY291bnQoaW5kZXgpKSB7CisgICAgICAgICAgICAgICAgbVN1YnNjcmliZWRJbmRpY2VzLmVtcGxhY2UoaW5kZXgpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgQUxPR0QoImlnbm9yaW5nIGxvY2FsIHBhcmFtICVzICglI3gpIGFzIGl0IGlzIGFscmVhZHkgJXMiLAorICAgICAgICAgICAgICAgICAgICBuYW1lLmNfc3RyKCksICh1aW50MzJfdClpbmRleCwgbVN1cHBvcnRlZEluZGljZXMuY291bnQoaW5kZXgpID8gInN1cHBvcnRlZCIgOiAibG9jYWwiKTsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsgLy8gYWxyZWFkeSBzdXBwb3J0ZWQgYnkgdGhlIGNvbXBvbmVudCBvciBhbHJlYWR5IGFkZGVkCisgICAgICAgIH0KKworICAgICAgICAvLyB3cmFwIHR5cGVkIHZhbGlkYXRvciBpbnRvIHVudHlwZWQgdmFsaWRhdG9yCisgICAgICAgIExvY2FsUGFyYW1WYWxpZGF0b3IgdmFsaWRhdG9yOworICAgICAgICBpZiAodmFsaWRhdG9yXykgeworICAgICAgICAgICAgdmFsaWRhdG9yID0gW3ZhbGlkYXRvcl9dKHN0ZDo6dW5pcXVlX3B0cjxDMlBhcmFtPiYgcCl7CisgICAgICAgICAgICAgICAgYzJfc3RhdHVzX3QgcmVzID0gQzJfQkFEX1ZBTFVFOworICAgICAgICAgICAgICAgIHN0ZDo6dW5pcXVlX3B0cjxUPiB0eXBlZChzdGF0aWNfY2FzdDxUKj4ocC5yZWxlYXNlKCkpKTsKKyAgICAgICAgICAgICAgICAvLyBpZiBwYXJhbWV0ZXIgaXMgY29ycmVjdGx5IHR5cGVkCisgICAgICAgICAgICAgICAgaWYgKFQ6OkZyb20odHlwZWQuZ2V0KCkpKSB7CisgICAgICAgICAgICAgICAgICAgIHJlcyA9IHZhbGlkYXRvcl8odHlwZWQpOworICAgICAgICAgICAgICAgICAgICBwLnJlc2V0KHR5cGVkLnJlbGVhc2UoKSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIHJldHVybiByZXM7CisgICAgICAgICAgICB9OworICAgICAgICB9CisKKyAgICAgICAgbUxvY2FsUGFyYW1zLmVtcGxhY2UoaW5kZXgsIHZhbGlkYXRvcik7CisgICAgICAgIG1QYXJhbVVwZGF0ZXItPmFkZFN0YW5kYXJkUGFyYW08VD4obmFtZSwgYXR0cmliKTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorCisgICAgLyoqCisgICAgICogQWRkcyBhIGxvY2FsbHkgbWFpbnRhaW5lZCBwYXJhbWV0ZXIgd2l0aCBhIGRlZmF1bHQgdmFsdWUuCisgICAgICovCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4KKyAgICBib29sIGFkZExvY2FsUGFyYW0oCisgICAgICAgICAgICBzdGQ6OnVuaXF1ZV9wdHI8VD4gZGVmYXVsdF8sCisgICAgICAgICAgICBjb25zdCBzdGQ6OnN0cmluZyAmbmFtZSwKKyAgICAgICAgICAgIEMyUGFyYW1EZXNjcmlwdG9yOjphdHRyaWJfdCBhdHRyaWIgPSBDMlBhcmFtRGVzY3JpcHRvcjo6SVNfUkVBRF9PTkxZLAorICAgICAgICAgICAgc3RkOjpmdW5jdGlvbjxjMl9zdGF0dXNfdChzdGQ6OnVuaXF1ZV9wdHI8VD4mKT4gdmFsaWRhdG9yXyA9CisgICAgICAgICAgICAgICAgc3RkOjpmdW5jdGlvbjxjMl9zdGF0dXNfdChzdGQ6OnVuaXF1ZV9wdHI8VD4mKT4oKSkgeworICAgICAgICBpZiAoYWRkTG9jYWxQYXJhbTxUPihuYW1lLCBhdHRyaWIsIHZhbGlkYXRvcl8pKSB7CisgICAgICAgICAgICBpZiAodmFsaWRhdG9yXykgeworICAgICAgICAgICAgICAgIGMyX3N0YXR1c190IGVyciA9IHZhbGlkYXRvcl8oZGVmYXVsdF8pOworICAgICAgICAgICAgICAgIGlmIChlcnIgIT0gQzJfT0spIHsKKyAgICAgICAgICAgICAgICAgICAgQUxPR0QoImRlZmF1bHQgdmFsdWUgZm9yICVzIGlzIGludmFsaWQgPT4gJXMiLCBuYW1lLmNfc3RyKCksIGFzU3RyaW5nKGVycikpOworICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgbUN1cnJlbnRDb25maWdbVDo6UEFSQU1fVFlQRV0gPSBzdGQ6Om1vdmUoZGVmYXVsdF8pOworICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+CisgICAgYm9vbCBhZGRMb2NhbFBhcmFtKAorICAgICAgICAgICAgVCAqZGVmYXVsdF8sIGNvbnN0IHN0ZDo6c3RyaW5nICZuYW1lLAorICAgICAgICAgICAgQzJQYXJhbURlc2NyaXB0b3I6OmF0dHJpYl90IGF0dHJpYiA9IEMyUGFyYW1EZXNjcmlwdG9yOjpJU19SRUFEX09OTFksCisgICAgICAgICAgICBzdGQ6OmZ1bmN0aW9uPGMyX3N0YXR1c190KHN0ZDo6dW5pcXVlX3B0cjxUPiYpPiB2YWxpZGF0b3JfID0KKyAgICAgICAgICAgICAgICBzdGQ6OmZ1bmN0aW9uPGMyX3N0YXR1c190KHN0ZDo6dW5pcXVlX3B0cjxUPiYpPigpKSB7CisgICAgICAgIHJldHVybiBhZGRMb2NhbFBhcmFtKHN0ZDo6dW5pcXVlX3B0cjxUPihkZWZhdWx0XyksIG5hbWUsIGF0dHJpYiwgdmFsaWRhdG9yXyk7CisgICAgfQorCisgICAgLy8vIEFwcGxpZXMgY29uZmlndXJhdGlvbiB1cGRhdGVzLCBhbmQgdXBkYXRlcyBmb3JtYXQgaW4gdGhlIHNwZWNpZmljIGRvbWFpbi4KKyAgICAvLy8gUmV0dXJucyB0cnVlIGlmIGZvcm1hdHMgd2VyZSB1cGRhdGVkCisgICAgLy8vIFxwYXJhbSBkb21haW4gaW5wdXQvb3V0cHV0IGJpdG1hc2sKKyAgICBib29sIHVwZGF0ZUNvbmZpZ3VyYXRpb24oCisgICAgICAgICAgICBzdGQ6OnZlY3RvcjxzdGQ6OnVuaXF1ZV9wdHI8QzJQYXJhbT4+ICZjb25maWdVcGRhdGUsIERvbWFpbiBkb21haW4pOworCisgICAgLy8vIFVwZGF0ZXMgZm9ybWF0cyBpbiB0aGUgc3BlY2lmaWMgZG9tYWluLiBSZXR1cm5zIHRydWUgaWYgYW55IG9mIHRoZSBmb3JtYXRzIGhhdmUgY2hhbmdlZC4KKyAgICAvLy8gXHBhcmFtIGRvbWFpbiBpbnB1dC9vdXRwdXQgYml0bWFzaworICAgIGJvb2wgdXBkYXRlRm9ybWF0cyhEb21haW4gZG9tYWluKTsKKworICAgIC8qKgorICAgICAqIEFwcGxpZXMgU0RLIGNvbmZpZ3VyYXRpb25zIGluIGEgc3BlY2lmaWMgY29uZmlndXJhdGlvbiBkb21haW4uCisgICAgICogVXBkYXRlcyByZWxldmFudCBpbnB1dC9vdXRwdXQgZm9ybWF0cyBhbmQgc3Vic2NyaWJlcyB0byBwYXJhbWV0ZXJzIHNwZWNpZmllZCBpbiB0aGUKKyAgICAgKiBjb25maWd1cmF0aW9uLgorICAgICAqIFxwYXJhbSBkb21haW4gY29uZmlnL3NldFBhcmFtIGJpdG1hc2sKKyAgICAgKiBccGFyYW0gYmxvY2tpbmcgYmxvY2tpbmcgbW9kZSB0byB1c2Ugd2l0aCB0aGUgY29tcG9uZW50CisgICAgICovCisgICAgc3RhdHVzX3QgZ2V0Q29uZmlnVXBkYXRlRnJvbVNka1BhcmFtcygKKyAgICAgICAgICAgIHN0ZDo6c2hhcmVkX3B0cjxDb2RlYzJDbGllbnQ6OkNvbXBvbmVudD4gY29tcG9uZW50LAorICAgICAgICAgICAgY29uc3Qgc3A8QU1lc3NhZ2U+ICZzZGtQYXJhbXMsIERvbWFpbiBkb21haW4sCisgICAgICAgICAgICBjMl9ibG9ja2luZ190IGJsb2NraW5nLAorICAgICAgICAgICAgc3RkOjp2ZWN0b3I8c3RkOjp1bmlxdWVfcHRyPEMyUGFyYW0+PiAqY29uZmlnVXBkYXRlKSBjb25zdDsKKworICAgIC8qKgorICAgICAqIEFwcGxpZXMgYSBjb25maWd1cmF0aW9uIHVwZGF0ZSB0byB0aGUgY29tcG9uZW50LgorICAgICAqIFVwZGF0ZXMgcmVsZXZhbnQgaW5wdXQvb3V0cHV0IGZvcm1hdHMgYW5kIHN1YnNjcmliZXMgdG8gcGFyYW1ldGVycyBzcGVjaWZpZWQgaW4gdGhlCisgICAgICogY29uZmlndXJhdGlvbi4KKyAgICAgKiBccGFyYW0gYmxvY2tpbmcgYmxvY2tpbmcgbW9kZSB0byB1c2Ugd2l0aCB0aGUgY29tcG9uZW50CisgICAgICovCisgICAgc3RhdHVzX3Qgc2V0UGFyYW1ldGVycygKKyAgICAgICAgICAgIHN0ZDo6c2hhcmVkX3B0cjxDb2RlYzJDbGllbnQ6OkNvbXBvbmVudD4gY29tcG9uZW50LAorICAgICAgICAgICAgc3RkOjp2ZWN0b3I8c3RkOjp1bmlxdWVfcHRyPEMyUGFyYW0+PiAmY29uZmlnVXBkYXRlLAorICAgICAgICAgICAgYzJfYmxvY2tpbmdfdCBibG9ja2luZyk7CisKKyAgICAvLy8gUXVlcmllcyBzdWJzY3JpYmVkIGluZGljZXMgKHdoaWNoIGNvbnRhaW5zIGFsbCBTREstZXhwb3NlZCB2YWx1ZXMpIGFuZCB1cGRhdGVzCisgICAgLy8vIGlucHV0L291dHB1dCBmb3JtYXRzLgorICAgIHN0YXR1c190IHF1ZXJ5Q29uZmlndXJhdGlvbigKKyAgICAgICAgICAgIGNvbnN0IHN0ZDo6c2hhcmVkX3B0cjxDb2RlYzJDbGllbnQ6OkNvbXBvbmVudD4gJmNvbXBvbmVudCk7CisKKyAgICAvLy8gUXVlcmllcyBhIGNvbmZpZ3VyYXRpb24gcGFyYW1ldGVyIHZhbHVlLiBSZXR1cm5zIG51bGxwdHIgaWYgdGhlIHBhcmFtZXRlciBpcyBub3QKKyAgICAvLy8gcGFydCBvZiB0aGUgY3VycmVudCBjb25maWd1cmF0aW9uCisgICAgY29uc3QgQzJQYXJhbSAqZ2V0Q29uZmlnUGFyYW1ldGVyVmFsdWUoQzJQYXJhbTo6SW5kZXggaW5kZXgpIGNvbnN0OworCisgICAgLyoqCisgICAgICogT2JqZWN0IHRoYXQgY2FuIGJlIHVzZWQgdG8gYWNjZXNzIGNvbmZpZ3VyYXRpb24gcGFyYW1ldGVycyBhbmQgaWYgdGhleSBjaGFuZ2UuCisgICAgICovCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4KKyAgICBzdHJ1Y3QgV2F0Y2hlciB7CisgICAgICAgIH5XYXRjaGVyKCkgPSBkZWZhdWx0OworCisgICAgICAgIC8vLyByZXR1cm5zIHRydWUgaWYgdGhlIHZhbHVlIG9mIHRoaXMgY29uZmlndXJhdGlvbiBoYXMgY2hhbmdlZAorICAgICAgICBib29sIGhhc0NoYW5nZWQoKSBjb25zdCB7CisgICAgICAgICAgICBjb25zdCBDMlBhcmFtICp2YWx1ZSA9IG1QYXJlbnQtPmdldENvbmZpZ1BhcmFtZXRlclZhbHVlKG1JbmRleCk7CisgICAgICAgICAgICBpZiAodmFsdWUgJiYgbVZhbHVlKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuICp2YWx1ZSAhPSAqbVZhbHVlOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gdmFsdWUgIT0gbVZhbHVlLmdldCgpOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgLy8vIHVwZGF0ZXMgdGhlIGN1cnJlbnQgdmFsdWUgYW5kIHJldHVybnMgaXQKKyAgICAgICAgc3RkOjpzaGFyZWRfcHRyPGNvbnN0IFQ+IHVwZGF0ZSgpIHsKKyAgICAgICAgICAgIGNvbnN0IEMyUGFyYW0gKnZhbHVlID0gbVBhcmVudC0+Z2V0Q29uZmlnUGFyYW1ldGVyVmFsdWUobUluZGV4KTsKKyAgICAgICAgICAgIGlmICh2YWx1ZSkgeworICAgICAgICAgICAgICAgIG1WYWx1ZSA9IHN0ZDo6c2hhcmVkX3B0cjxjb25zdCBUPihUOjpGcm9tKEMyUGFyYW06OkNvcHkoKnZhbHVlKS5yZWxlYXNlKCkpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJldHVybiBtVmFsdWU7CisgICAgICAgIH0KKworICAgIHByaXZhdGU6CisgICAgICAgIFdhdGNoZXIoQzJQYXJhbTo6SW5kZXggaW5kZXgsIGNvbnN0IENDb2RlY0NvbmZpZyAqcGFyZW50KQorICAgICAgICAgICAgOiBtUGFyZW50KHBhcmVudCksIG1JbmRleChpbmRleCkgeworICAgICAgICAgICAgdXBkYXRlKCk7CisgICAgICAgIH0KKworICAgICAgICBmcmllbmQgc3RydWN0IENDb2RlY0NvbmZpZzsKKworICAgICAgICBjb25zdCBDQ29kZWNDb25maWcgKm1QYXJlbnQ7CisgICAgICAgIHN0ZDo6c2hhcmVkX3B0cjxjb25zdCBUPiBtVmFsdWU7CisgICAgICAgIEMyUGFyYW06OkluZGV4IG1JbmRleDsKKyAgICB9OworCisgICAgLyoqCisgICAgICogUmV0dXJucyBhIHdhdGNoZXIgb2JqZWN0IGZvciBhIHBhcmFtZXRlci4KKyAgICAgKi8KKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgorICAgIFdhdGNoZXI8VD4gd2F0Y2goQzJQYXJhbTo6SW5kZXggaW5kZXggPSBUOjpQQVJBTV9UWVBFKSBjb25zdCB7CisgICAgICAgIGlmIChpbmRleC50eXBlKCkgIT0gVDo6UEFSQU1fVFlQRSkgeworICAgICAgICAgICAgX19idWlsdGluX3RyYXAoKTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gV2F0Y2hlcjxUPihpbmRleCwgdGhpcyk7CisgICAgfQorCitwcml2YXRlOgorCisgICAgLy8vIGluaXRpYWxpemVzIHRoZSBzdGFuZGFyZCBNZWRpYUNvZGVjIHRvIENvZGVjIDIuMCBwYXJhbXMgbWFwcGluZworICAgIHZvaWQgaW5pdGlhbGl6ZVN0YW5kYXJkUGFyYW1zKCk7CisKKyAgICAvLy8gQWRkcyBpbmRpY2VzIHRvIHRoZSBzdWJzY3JpYmVkIGluZGljZXMsIGFuZCB1cGRhdGVkIHN1YnNjcmlwdGlvbiB0byBjb21wb25lbnQKKyAgICAvLy8gXHBhcmFtIGJsb2NraW5nIGJsb2NraW5nIG1vZGUgdG8gdXNlIHdpdGggdGhlIGNvbXBvbmVudAorICAgIHN0YXR1c190IHN1YnNjcmliZVRvQ29uZmlnVXBkYXRlKAorICAgICAgICAgICAgY29uc3Qgc3RkOjpzaGFyZWRfcHRyPENvZGVjMkNsaWVudDo6Q29tcG9uZW50PiAmY29tcG9uZW50LAorICAgICAgICAgICAgY29uc3Qgc3RkOjp2ZWN0b3I8QzJQYXJhbTo6SW5kZXg+ICZpbmRpY2VzLAorICAgICAgICAgICAgYzJfYmxvY2tpbmdfdCBibG9ja2luZyA9IEMyX0RPTlRfQkxPQ0spOworCisgICAgLy8vIEdldHMgU0RLIGZvcm1hdCBmcm9tIGNvZGVjIDIuMCByZWZsZWN0ZWQgY29uZmlndXJhdGlvbgorICAgIC8vLyBccGFyYW0gZG9tYWluIGlucHV0L291dHB1dCBiaXRtYXNrCisgICAgc3A8QU1lc3NhZ2U+IGdldFNka0Zvcm1hdEZvckRvbWFpbigKKyAgICAgICAgICAgIGNvbnN0IFJlZmxlY3RlZFBhcmFtVXBkYXRlcjo6RGljdCAmcmVmbGVjdGVkLCBEb21haW4gZG9tYWluKSBjb25zdDsKKworICAgIC8qKgorICAgICAqIENvbnZlcnRzIGEgc2V0IG9mIGNvbmZpZ3VyYXRpb24gcGFyYW1ldGVycyBpbiBhbiBBTWVzc2FnZSB0byBhIGxpc3Qgb2YgcGF0aC1iYXNlZCBDb2RlYworICAgICAqIDIuMCBjb25maWd1cmF0aW9uIHBhcmFtZXRlcnMuCisgICAgICoKKyAgICAgKiBccGFyYW0gZG9tYWluIGNvbmZpZy9zZXRQYXJhbSBiaXRtYXNrCisgICAgICovCisgICAgUmVmbGVjdGVkUGFyYW1VcGRhdGVyOjpEaWN0IGdldFJlZmxlY3RlZEZvcm1hdCgKKyAgICAgICAgICAgIGNvbnN0IHNwPEFNZXNzYWdlPiAmY29uZmlnLCBEb21haW4gZG9tYWluKSBjb25zdDsKK307CisKK0RFRklORV9FTlVNX09QRVJBVE9SUyhDQ29kZWNDb25maWc6OkRvbWFpbikKKworfSAgLy8gbmFtZXNwYWNlIGFuZHJvaWQKKworI2VuZGlmICAvLyBDX0NPREVDX0hfCisKZGlmZiAtLWdpdCBhL21lZGlhL2NvZGVjMi9zZnBsdWdpbi9Db2RlYzJCdWZmZXIuY3BwIGIvbWVkaWEvY29kZWMyL3NmcGx1Z2luL0NvZGVjMkJ1ZmZlci5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmY2MDYyZQotLS0gL2Rldi9udWxsCisrKyBiL21lZGlhL2NvZGVjMi9zZnBsdWdpbi9Db2RlYzJCdWZmZXIuY3BwCkBAIC0wLDAgKzEsODEwIEBACisvKgorICogQ29weXJpZ2h0IDIwMTgsIFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworCisvLyNkZWZpbmUgTE9HX05ERUJVRyAwCisjZGVmaW5lIExPR19UQUcgIkNvZGVjMkJ1ZmZlciIKKyNpbmNsdWRlIDx1dGlscy9Mb2cuaD4KKworI2luY2x1ZGUgPGhpZGxtZW1vcnkvRnJhbWV3b3JrVXRpbHMuaD4KKyNpbmNsdWRlIDxtZWRpYS9oYXJkd2FyZS9IYXJkd2FyZUFQSS5oPgorI2luY2x1ZGUgPG1lZGlhL3N0YWdlZnJpZ2h0L01lZGlhQ29kZWNDb25zdGFudHMuaD4KKyNpbmNsdWRlIDxtZWRpYS9zdGFnZWZyaWdodC9mb3VuZGF0aW9uL0FCdWZmZXIuaD4KKyNpbmNsdWRlIDxtZWRpYS9zdGFnZWZyaWdodC9mb3VuZGF0aW9uL0FNZXNzYWdlLmg+CisjaW5jbHVkZSA8bWVkaWEvc3RhZ2VmcmlnaHQvZm91bmRhdGlvbi9BVXRpbHMuaD4KKyNpbmNsdWRlIDxuYXRpdmViYXNlL25hdGl2ZWJhc2UuaD4KKworI2luY2x1ZGUgPEMyQWxsb2NhdG9yR3JhbGxvYy5oPgorI2luY2x1ZGUgPEMyQmxvY2tJbnRlcm5hbC5oPgorI2luY2x1ZGUgPEMyRGVidWcuaD4KKworI2luY2x1ZGUgIkNvZGVjMkJ1ZmZlci5oIgorCituYW1lc3BhY2UgYW5kcm9pZCB7CisKKy8vIENvZGVjMkJ1ZmZlcgorCitib29sIENvZGVjMkJ1ZmZlcjo6Y2FuQ29weUxpbmVhcihjb25zdCBzdGQ6OnNoYXJlZF9wdHI8QzJCdWZmZXI+ICZidWZmZXIpIGNvbnN0IHsKKyAgICBpZiAoY29uc3RfY2FzdDxDb2RlYzJCdWZmZXIgKj4odGhpcyktPmJhc2UoKSA9PSBudWxscHRyKSB7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgICAgaWYgKCFidWZmZXIpIHsKKyAgICAgICAgLy8gTm90aGluZyB0byBjb3B5LCBzbyB3ZSBjYW4gY29weSBieSBkb2luZyBub3RoaW5nLgorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgaWYgKGJ1ZmZlci0+ZGF0YSgpLnR5cGUoKSAhPSBDMkJ1ZmZlckRhdGE6OkxJTkVBUikgeworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorICAgIGlmIChidWZmZXItPmRhdGEoKS5saW5lYXJCbG9ja3MoKS5zaXplKCkgPT0gMHUpIHsKKyAgICAgICAgLy8gTm90aGluZyB0byBjb3B5LCBzbyB3ZSBjYW4gY29weSBieSBkb2luZyBub3RoaW5nLgorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9IGVsc2UgaWYgKGJ1ZmZlci0+ZGF0YSgpLmxpbmVhckJsb2NrcygpLnNpemUoKSA+IDF1KSB7CisgICAgICAgIC8vIFdlIGRvbid0IGtub3cgaG93IHRvIGNvcHkgbW9yZSB0aGFuIG9uZSBibG9ja3MuCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgICAgaWYgKGJ1ZmZlci0+ZGF0YSgpLmxpbmVhckJsb2NrcygpWzBdLnNpemUoKSA+IGNhcGFjaXR5KCkpIHsKKyAgICAgICAgLy8gSXQgd29uJ3QgZml0LgorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorICAgIHJldHVybiB0cnVlOworfQorCitib29sIENvZGVjMkJ1ZmZlcjo6Y29weUxpbmVhcihjb25zdCBzdGQ6OnNoYXJlZF9wdHI8QzJCdWZmZXI+ICZidWZmZXIpIHsKKyAgICAvLyBXZSBhc3N1bWUgdGhhdCBhbGwgY2FuQ29weUxpbmVhcigpIGNoZWNrcyBwYXNzZWQuCisgICAgaWYgKCFidWZmZXIgfHwgYnVmZmVyLT5kYXRhKCkubGluZWFyQmxvY2tzKCkuc2l6ZSgpID09IDB1CisgICAgICAgICAgICB8fCBidWZmZXItPmRhdGEoKS5saW5lYXJCbG9ja3MoKVswXS5zaXplKCkgPT0gMHUpIHsKKyAgICAgICAgc2V0UmFuZ2UoMCwgMCk7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyAgICBDMlJlYWRWaWV3IHZpZXcgPSBidWZmZXItPmRhdGEoKS5saW5lYXJCbG9ja3MoKVswXS5tYXAoKS5nZXQoKTsKKyAgICBpZiAodmlldy5lcnJvcigpICE9IEMyX09LKSB7CisgICAgICAgIEFMT0dEKCJFcnJvciB3aGlsZSBtYXBwaW5nOiAlZCIsIHZpZXcuZXJyb3IoKSk7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgICAgaWYgKHZpZXcuY2FwYWNpdHkoKSA+IGNhcGFjaXR5KCkpIHsKKyAgICAgICAgQUxPR0QoIkMyQ29uc3RMaW5lYXJCbG9jayBsaWVkIC0tLSBpdCBhY3R1YWxseSBkb2Vzbid0IGZpdDogdmlldygldSkgPiB0aGlzKCV6dSkiLAorICAgICAgICAgICAgICAgIHZpZXcuY2FwYWNpdHkoKSwgY2FwYWNpdHkoKSk7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgICAgbWVtY3B5KGJhc2UoKSwgdmlldy5kYXRhKCksIHZpZXcuY2FwYWNpdHkoKSk7CisgICAgc2V0UmFuZ2UoMCwgdmlldy5jYXBhY2l0eSgpKTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKwordm9pZCBDb2RlYzJCdWZmZXI6OnNldEltYWdlRGF0YShjb25zdCBzcDxBQnVmZmVyPiAmaW1hZ2VEYXRhKSB7CisgICAgbWV0YSgpLT5zZXRCdWZmZXIoImltYWdlLWRhdGEiLCBpbWFnZURhdGEpOworICAgIGZvcm1hdCgpLT5zZXRCdWZmZXIoImltYWdlLWRhdGEiLCBpbWFnZURhdGEpOworICAgIE1lZGlhSW1hZ2UyICppbWcgPSAoTWVkaWFJbWFnZTIqKWltYWdlRGF0YS0+ZGF0YSgpOworICAgIGlmIChpbWctPm1OdW1QbGFuZXMgPiAwICYmIGltZy0+bVR5cGUgIT0gaW1nLT5NRURJQV9JTUFHRV9UWVBFX1VOS05PV04pIHsKKyAgICAgICAgaW50MzJfdCBzdHJpZGUgPSBpbWctPm1QbGFuZVswXS5tUm93SW5jOworICAgICAgICBmb3JtYXQoKS0+c2V0SW50MzIoS0VZX1NUUklERSwgc3RyaWRlKTsKKyAgICAgICAgaWYgKGltZy0+bU51bVBsYW5lcyA+IDEgJiYgc3RyaWRlID4gMCkgeworICAgICAgICAgICAgaW50MzJfdCB2c3RyaWRlID0gKGltZy0+bVBsYW5lWzFdLm1PZmZzZXQgLSBpbWctPm1QbGFuZVswXS5tT2Zmc2V0KSAvIHN0cmlkZTsKKyAgICAgICAgICAgIGZvcm1hdCgpLT5zZXRJbnQzMihLRVlfU0xJQ0VfSEVJR0hULCB2c3RyaWRlKTsKKyAgICAgICAgfQorICAgIH0KK30KKworLy8gTG9jYWxMaW5lYXJCdWZmZXIKKworYm9vbCBMb2NhbExpbmVhckJ1ZmZlcjo6Y2FuQ29weShjb25zdCBzdGQ6OnNoYXJlZF9wdHI8QzJCdWZmZXI+ICZidWZmZXIpIGNvbnN0IHsKKyAgICByZXR1cm4gY2FuQ29weUxpbmVhcihidWZmZXIpOworfQorCitib29sIExvY2FsTGluZWFyQnVmZmVyOjpjb3B5KGNvbnN0IHN0ZDo6c2hhcmVkX3B0cjxDMkJ1ZmZlcj4gJmJ1ZmZlcikgeworICAgIHJldHVybiBjb3B5TGluZWFyKGJ1ZmZlcik7Cit9CisKKy8vIER1bW15Q29udGFpbmVyQnVmZmVyCisKK0R1bW15Q29udGFpbmVyQnVmZmVyOjpEdW1teUNvbnRhaW5lckJ1ZmZlcigKKyAgICAgICAgY29uc3Qgc3A8QU1lc3NhZ2U+ICZmb3JtYXQsIGNvbnN0IHN0ZDo6c2hhcmVkX3B0cjxDMkJ1ZmZlcj4gJmJ1ZmZlcikKKyAgICA6IENvZGVjMkJ1ZmZlcihmb3JtYXQsIG5ldyBBQnVmZmVyKG51bGxwdHIsIDEpKSwKKyAgICAgIG1CdWZmZXJSZWYoYnVmZmVyKSB7CisgICAgc2V0UmFuZ2UoMCwgYnVmZmVyID8gMSA6IDApOworfQorCitzdGQ6OnNoYXJlZF9wdHI8QzJCdWZmZXI+IER1bW15Q29udGFpbmVyQnVmZmVyOjphc0MyQnVmZmVyKCkgeworICAgIHJldHVybiBzdGQ6Om1vdmUobUJ1ZmZlclJlZik7Cit9CisKK2Jvb2wgRHVtbXlDb250YWluZXJCdWZmZXI6OmNhbkNvcHkoY29uc3Qgc3RkOjpzaGFyZWRfcHRyPEMyQnVmZmVyPiAmKSBjb25zdCB7CisgICAgcmV0dXJuICFtQnVmZmVyUmVmOworfQorCitib29sIER1bW15Q29udGFpbmVyQnVmZmVyOjpjb3B5KGNvbnN0IHN0ZDo6c2hhcmVkX3B0cjxDMkJ1ZmZlcj4gJmJ1ZmZlcikgeworICAgIG1CdWZmZXJSZWYgPSBidWZmZXI7CisgICAgc2V0UmFuZ2UoMCwgbUJ1ZmZlclJlZiA/IDEgOiAwKTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworLy8gTGluZWFyQmxvY2tCdWZmZXIKKworLy8gc3RhdGljCitzcDxMaW5lYXJCbG9ja0J1ZmZlcj4gTGluZWFyQmxvY2tCdWZmZXI6OkFsbG9jYXRlKAorICAgICAgICBjb25zdCBzcDxBTWVzc2FnZT4gJmZvcm1hdCwgY29uc3Qgc3RkOjpzaGFyZWRfcHRyPEMyTGluZWFyQmxvY2s+ICZibG9jaykgeworICAgIEMyV3JpdGVWaWV3IHdyaXRlVmlldyhibG9jay0+bWFwKCkuZ2V0KCkpOworICAgIGlmICh3cml0ZVZpZXcuZXJyb3IoKSAhPSBDMl9PSykgeworICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICB9CisgICAgcmV0dXJuIG5ldyBMaW5lYXJCbG9ja0J1ZmZlcihmb3JtYXQsIHN0ZDo6bW92ZSh3cml0ZVZpZXcpLCBibG9jayk7Cit9CisKK3N0ZDo6c2hhcmVkX3B0cjxDMkJ1ZmZlcj4gTGluZWFyQmxvY2tCdWZmZXI6OmFzQzJCdWZmZXIoKSB7CisgICAgcmV0dXJuIEMyQnVmZmVyOjpDcmVhdGVMaW5lYXJCdWZmZXIobUJsb2NrLT5zaGFyZShvZmZzZXQoKSwgc2l6ZSgpLCBDMkZlbmNlKCkpKTsKK30KKworYm9vbCBMaW5lYXJCbG9ja0J1ZmZlcjo6Y2FuQ29weShjb25zdCBzdGQ6OnNoYXJlZF9wdHI8QzJCdWZmZXI+ICZidWZmZXIpIGNvbnN0IHsKKyAgICByZXR1cm4gY2FuQ29weUxpbmVhcihidWZmZXIpOworfQorCitib29sIExpbmVhckJsb2NrQnVmZmVyOjpjb3B5KGNvbnN0IHN0ZDo6c2hhcmVkX3B0cjxDMkJ1ZmZlcj4gJmJ1ZmZlcikgeworICAgIHJldHVybiBjb3B5TGluZWFyKGJ1ZmZlcik7Cit9CisKK0xpbmVhckJsb2NrQnVmZmVyOjpMaW5lYXJCbG9ja0J1ZmZlcigKKyAgICAgICAgY29uc3Qgc3A8QU1lc3NhZ2U+ICZmb3JtYXQsCisgICAgICAgIEMyV3JpdGVWaWV3JiYgd3JpdGVWaWV3LAorICAgICAgICBjb25zdCBzdGQ6OnNoYXJlZF9wdHI8QzJMaW5lYXJCbG9jaz4gJmJsb2NrKQorICAgIDogQ29kZWMyQnVmZmVyKGZvcm1hdCwgbmV3IEFCdWZmZXIod3JpdGVWaWV3LmRhdGEoKSwgd3JpdGVWaWV3LnNpemUoKSkpLAorICAgICAgbVdyaXRlVmlldyh3cml0ZVZpZXcpLAorICAgICAgbUJsb2NrKGJsb2NrKSB7Cit9CisKKy8vIENvbnN0TGluZWFyQmxvY2tCdWZmZXIKKworLy8gc3RhdGljCitzcDxDb25zdExpbmVhckJsb2NrQnVmZmVyPiBDb25zdExpbmVhckJsb2NrQnVmZmVyOjpBbGxvY2F0ZSgKKyAgICAgICAgY29uc3Qgc3A8QU1lc3NhZ2U+ICZmb3JtYXQsIGNvbnN0IHN0ZDo6c2hhcmVkX3B0cjxDMkJ1ZmZlcj4gJmJ1ZmZlcikgeworICAgIGlmICghYnVmZmVyCisgICAgICAgICAgICB8fCBidWZmZXItPmRhdGEoKS50eXBlKCkgIT0gQzJCdWZmZXJEYXRhOjpMSU5FQVIKKyAgICAgICAgICAgIHx8IGJ1ZmZlci0+ZGF0YSgpLmxpbmVhckJsb2NrcygpLnNpemUoKSAhPSAxdSkgeworICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICB9CisgICAgQzJSZWFkVmlldyByZWFkVmlldyhidWZmZXItPmRhdGEoKS5saW5lYXJCbG9ja3MoKVswXS5tYXAoKS5nZXQoKSk7CisgICAgaWYgKHJlYWRWaWV3LmVycm9yKCkgIT0gQzJfT0spIHsKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgfQorICAgIHJldHVybiBuZXcgQ29uc3RMaW5lYXJCbG9ja0J1ZmZlcihmb3JtYXQsIHN0ZDo6bW92ZShyZWFkVmlldyksIGJ1ZmZlcik7Cit9CisKK0NvbnN0TGluZWFyQmxvY2tCdWZmZXI6OkNvbnN0TGluZWFyQmxvY2tCdWZmZXIoCisgICAgICAgIGNvbnN0IHNwPEFNZXNzYWdlPiAmZm9ybWF0LAorICAgICAgICBDMlJlYWRWaWV3JiYgcmVhZFZpZXcsCisgICAgICAgIGNvbnN0IHN0ZDo6c2hhcmVkX3B0cjxDMkJ1ZmZlcj4gJmJ1ZmZlcikKKyAgICA6IENvZGVjMkJ1ZmZlcihmb3JtYXQsIG5ldyBBQnVmZmVyKAorICAgICAgICAgICAgLy8gTk9URTogQUJ1ZmZlciBvbmx5IHRha2VzIG5vbi1jb25zdCBwb2ludGVyIGJ1dCB0aGlzIGRhdGEgaXMKKyAgICAgICAgICAgIC8vICAgICAgIHN1cHBvc2VkIHRvIGJlIHJlYWQtb25seS4KKyAgICAgICAgICAgIGNvbnN0X2Nhc3Q8dWludDhfdCAqPihyZWFkVmlldy5kYXRhKCkpLCByZWFkVmlldy5jYXBhY2l0eSgpKSksCisgICAgICBtUmVhZFZpZXcocmVhZFZpZXcpLAorICAgICAgbUJ1ZmZlclJlZihidWZmZXIpIHsKK30KKworc3RkOjpzaGFyZWRfcHRyPEMyQnVmZmVyPiBDb25zdExpbmVhckJsb2NrQnVmZmVyOjphc0MyQnVmZmVyKCkgeworICAgIHJldHVybiBzdGQ6Om1vdmUobUJ1ZmZlclJlZik7Cit9CisKKy8vIEdyYXBoaWNWaWV3Mk1lZGlhSW1hZ2VDb252ZXJ0ZXIKKworbmFtZXNwYWNlIHsKKworY2xhc3MgR3JhcGhpY1ZpZXcyTWVkaWFJbWFnZUNvbnZlcnRlciB7CitwdWJsaWM6CisgICAgLyoqCisgICAgICogQ3JlYXRlcyBhIEMyR3JhcGhpY1ZpZXcgPD0+IE1lZGlhSW1hZ2UgY29udmVydGVyCisgICAgICoKKyAgICAgKiBccGFyYW0gdmlldyBDMkdyYXBoaWNWaWV3IG9iamVjdAorICAgICAqIFxwYXJhbSBjb2xvckZvcm1hdCBkZXNpcmVkIFNESyBjb2xvciBmb3JtYXQgZm9yIHRoZSBNZWRpYUltYWdlIChpZiB0aGlzIGlzIGEgZmxleGlibGUgZm9ybWF0LAorICAgICAqICAgICAgICBhbiBhdHRlbXB0IGlzIG1hZGUgdG8gc2ltcGx5IHJlcHJlc2VudCB0aGUgZ3JhcGhpYyB2aWV3IGFzIGEgZmxleGlibGUgU0RLIGZvcm1hdAorICAgICAqICAgICAgICB3aXRob3V0IGEgbWVtY3B5KQorICAgICAqLworICAgIEdyYXBoaWNWaWV3Mk1lZGlhSW1hZ2VDb252ZXJ0ZXIoCisgICAgICAgICAgICBjb25zdCBDMkdyYXBoaWNWaWV3ICZ2aWV3LCBpbnQzMl90IGNvbG9yRm9ybWF0KQorICAgICAgICA6IG1Jbml0Q2hlY2soTk9fSU5JVCksCisgICAgICAgICAgbVZpZXcodmlldyksCisgICAgICAgICAgbVdpZHRoKHZpZXcud2lkdGgoKSksCisgICAgICAgICAgbUhlaWdodCh2aWV3LmhlaWdodCgpKSwKKyAgICAgICAgICBtQ29sb3JGb3JtYXQoY29sb3JGb3JtYXQpLAorICAgICAgICAgIG1BbGxvY2F0ZWREZXB0aCgwKSwKKyAgICAgICAgICBtQmFja0J1ZmZlclNpemUoMCksCisgICAgICAgICAgbU1lZGlhSW1hZ2UobmV3IEFCdWZmZXIoc2l6ZW9mKE1lZGlhSW1hZ2UyKSkpIHsKKyAgICAgICAgaWYgKHZpZXcuZXJyb3IoKSAhPSBDMl9PSykgeworICAgICAgICAgICAgQUxPR0QoIkNvbnZlcnRlcjogdmlldy5lcnJvcigpID0gJWQiLCB2aWV3LmVycm9yKCkpOworICAgICAgICAgICAgbUluaXRDaGVjayA9IEJBRF9WQUxVRTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICBNZWRpYUltYWdlMiAqbWVkaWFJbWFnZSA9IChNZWRpYUltYWdlMiAqKW1NZWRpYUltYWdlLT5iYXNlKCk7CisgICAgICAgIGNvbnN0IEMyUGxhbmFyTGF5b3V0ICZsYXlvdXQgPSB2aWV3LmxheW91dCgpOworICAgICAgICBpZiAobGF5b3V0Lm51bVBsYW5lcyA9PSAwKSB7CisgICAgICAgICAgICBBTE9HRCgiQ29udmVydGVyOiAwIHBsYW5lcyIpOworICAgICAgICAgICAgbUluaXRDaGVjayA9IEJBRF9WQUxVRTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICBtQWxsb2NhdGVkRGVwdGggPSBsYXlvdXQucGxhbmVzWzBdLmFsbG9jYXRlZERlcHRoOworICAgICAgICB1aW50MzJfdCBiaXREZXB0aCA9IGxheW91dC5wbGFuZXNbMF0uYml0RGVwdGg7CisKKyAgICAgICAgLy8gYWxpZ24gd2lkdGggYW5kIGhlaWdodCB0byBzdXBwb3J0IHN1YnNhbXBsaW5nIGNsZWFubHkKKyAgICAgICAgdWludDMyX3QgbVN0cmlkZSA9IGFsaWduKG1XaWR0aCwgMikgKiBkaXZVcChsYXlvdXQucGxhbmVzWzBdLmFsbG9jYXRlZERlcHRoLCA4dSk7CisgICAgICAgIHVpbnQzMl90IG1WU3RyaWRlID0gYWxpZ24obUhlaWdodCwgMik7CisKKyAgICAgICAgc3dpdGNoIChsYXlvdXQudHlwZSkgeworICAgICAgICAgICAgY2FzZSBDMlBsYW5hckxheW91dDo6VFlQRV9ZVVY6CisgICAgICAgICAgICAgICAgbWVkaWFJbWFnZS0+bVR5cGUgPSBNZWRpYUltYWdlMjo6TUVESUFfSU1BR0VfVFlQRV9ZVVY7CisgICAgICAgICAgICAgICAgaWYgKGxheW91dC5udW1QbGFuZXMgIT0gMykgeworICAgICAgICAgICAgICAgICAgICBBTE9HRCgiQ29udmVydGVyOiAlZCBwbGFuZXMgZm9yIFlVViBsYXlvdXQiLCBsYXlvdXQubnVtUGxhbmVzKTsKKyAgICAgICAgICAgICAgICAgICAgbUluaXRDaGVjayA9IEJBRF9WQUxVRTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBpZiAobGF5b3V0LnBsYW5lc1swXS5jaGFubmVsICE9IEMyUGxhbmVJbmZvOjpDSEFOTkVMX1kKKyAgICAgICAgICAgICAgICAgICAgICAgIHx8IGxheW91dC5wbGFuZXNbMV0uY2hhbm5lbCAhPSBDMlBsYW5lSW5mbzo6Q0hBTk5FTF9DQgorICAgICAgICAgICAgICAgICAgICAgICAgfHwgbGF5b3V0LnBsYW5lc1syXS5jaGFubmVsICE9IEMyUGxhbmVJbmZvOjpDSEFOTkVMX0NSCisgICAgICAgICAgICAgICAgICAgICAgICB8fCBsYXlvdXQucGxhbmVzWzBdLmNvbFNhbXBsaW5nICE9IDEKKyAgICAgICAgICAgICAgICAgICAgICAgIHx8IGxheW91dC5wbGFuZXNbMF0ucm93U2FtcGxpbmcgIT0gMQorICAgICAgICAgICAgICAgICAgICAgICAgfHwgbGF5b3V0LnBsYW5lc1sxXS5jb2xTYW1wbGluZyAhPSAyCisgICAgICAgICAgICAgICAgICAgICAgICB8fCBsYXlvdXQucGxhbmVzWzFdLnJvd1NhbXBsaW5nICE9IDIKKyAgICAgICAgICAgICAgICAgICAgICAgIHx8IGxheW91dC5wbGFuZXNbMl0uY29sU2FtcGxpbmcgIT0gMgorICAgICAgICAgICAgICAgICAgICAgICAgfHwgbGF5b3V0LnBsYW5lc1syXS5yb3dTYW1wbGluZyAhPSAyKSB7CisgICAgICAgICAgICAgICAgICAgIEFMT0dEKCJDb252ZXJ0ZXI6IG5vdCBZVVY0MjAgZm9yIFlVViBsYXlvdXQiKTsKKyAgICAgICAgICAgICAgICAgICAgbUluaXRDaGVjayA9IEJBRF9WQUxVRTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBzd2l0Y2ggKG1Db2xvckZvcm1hdCkgeworICAgICAgICAgICAgICAgICAgICBjYXNlIENPTE9SX0Zvcm1hdFlVVjQyMEZsZXhpYmxlOgorICAgICAgICAgICAgICAgICAgICB7ICAvLyB0cnkgdG8gbWFwIGRpcmVjdGx5LiBjaGVjayBpZiB0aGUgcGxhbmVzIGFyZSBuZWFyIG9uZSBhbm90aGVyCisgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1aW50OF90ICptaW5QdHIgPSBtVmlldy5kYXRhKClbMF07CisgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1aW50OF90ICptYXhQdHIgPSBtVmlldy5kYXRhKClbMF07CisgICAgICAgICAgICAgICAgICAgICAgICBpbnQzMl90IHBsYW5lU2l6ZSA9IDA7CisgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHVpbnQzMl90IGkgPSAwOyBpIDwgbGF5b3V0Lm51bVBsYW5lczsgKytpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgQzJQbGFuZUluZm8gJnBsYW5lID0gbGF5b3V0LnBsYW5lc1tpXTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzc2l6ZV90IG1pbk9mZnNldCA9IHBsYW5lLm1pbk9mZnNldChtV2lkdGgsIG1IZWlnaHQpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNzaXplX3QgbWF4T2Zmc2V0ID0gcGxhbmUubWF4T2Zmc2V0KG1XaWR0aCwgbUhlaWdodCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1pblB0ciA+IG1WaWV3LmRhdGEoKVtpXSArIG1pbk9mZnNldCkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtaW5QdHIgPSBtVmlldy5kYXRhKClbaV0gKyBtaW5PZmZzZXQ7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtYXhQdHIgPCBtVmlldy5kYXRhKClbaV0gKyBtYXhPZmZzZXQpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF4UHRyID0gbVZpZXcuZGF0YSgpW2ldICsgbWF4T2Zmc2V0OworICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBwbGFuZVNpemUgKz0gc3RkOjphYnMocGxhbmUucm93SW5jKSAqIGFsaWduKG1IZWlnaHQsIDY0KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyBwbGFuZS5yb3dTYW1wbGluZyAvIHBsYW5lLmNvbFNhbXBsaW5nICogZGl2VXAobUFsbG9jYXRlZERlcHRoLCA4dSk7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICgobWF4UHRyIC0gbWluUHRyICsgMSkgPD0gcGxhbmVTaXplKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gRklYTUU6IHRoaXMgaXMgcmlza3kgYXMgcmVhZGluZy93cml0aW5nIGRhdGEgb3V0IG9mIGJvdW5kIHJlc3VsdHMgaW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAgICAgICAgYW4gdW5kZWZpbmVkIGJlaGF2aW9yLCBidXQgZ3JhbGxvYyBkb2VzIGFzc3VtZSBhIGNvbnRpZ3VvdXMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAgICAgICAgbWFwcGluZworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodWludDMyX3QgaSA9IDA7IGkgPCBsYXlvdXQubnVtUGxhbmVzOyArK2kpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgQzJQbGFuZUluZm8gJnBsYW5lID0gbGF5b3V0LnBsYW5lc1tpXTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVkaWFJbWFnZS0+bVBsYW5lW2ldLm1PZmZzZXQgPSBtVmlldy5kYXRhKClbaV0gLSBtaW5QdHI7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lZGlhSW1hZ2UtPm1QbGFuZVtpXS5tQ29sSW5jID0gcGxhbmUuY29sSW5jOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZWRpYUltYWdlLT5tUGxhbmVbaV0ubVJvd0luYyA9IHBsYW5lLnJvd0luYzsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVkaWFJbWFnZS0+bVBsYW5lW2ldLm1Ib3JpelN1YnNhbXBsaW5nID0gcGxhbmUuY29sU2FtcGxpbmc7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lZGlhSW1hZ2UtPm1QbGFuZVtpXS5tVmVydFN1YnNhbXBsaW5nID0gcGxhbmUucm93U2FtcGxpbmc7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1XcmFwcGVkID0gbmV3IEFCdWZmZXIoY29uc3RfY2FzdDx1aW50OF90ICo+KG1pblB0ciksIG1heFB0ciAtIG1pblB0ciArIDEpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIFtbZmFsbHRocm91Z2hdXTsKKworICAgICAgICAgICAgICAgICAgICBjYXNlIENPTE9SX0Zvcm1hdFlVVjQyMFBsYW5hcjoKKyAgICAgICAgICAgICAgICAgICAgY2FzZSBDT0xPUl9Gb3JtYXRZVVY0MjBQYWNrZWRQbGFuYXI6CisgICAgICAgICAgICAgICAgICAgICAgICBtZWRpYUltYWdlLT5tUGxhbmVbbWVkaWFJbWFnZS0+WV0ubU9mZnNldCA9IDA7CisgICAgICAgICAgICAgICAgICAgICAgICBtZWRpYUltYWdlLT5tUGxhbmVbbWVkaWFJbWFnZS0+WV0ubUNvbEluYyA9IDE7CisgICAgICAgICAgICAgICAgICAgICAgICBtZWRpYUltYWdlLT5tUGxhbmVbbWVkaWFJbWFnZS0+WV0ubVJvd0luYyA9IG1TdHJpZGU7CisgICAgICAgICAgICAgICAgICAgICAgICBtZWRpYUltYWdlLT5tUGxhbmVbbWVkaWFJbWFnZS0+WV0ubUhvcml6U3Vic2FtcGxpbmcgPSAxOworICAgICAgICAgICAgICAgICAgICAgICAgbWVkaWFJbWFnZS0+bVBsYW5lW21lZGlhSW1hZ2UtPlldLm1WZXJ0U3Vic2FtcGxpbmcgPSAxOworCisgICAgICAgICAgICAgICAgICAgICAgICBtZWRpYUltYWdlLT5tUGxhbmVbbWVkaWFJbWFnZS0+VV0ubU9mZnNldCA9IG1TdHJpZGUgKiBtVlN0cmlkZTsKKyAgICAgICAgICAgICAgICAgICAgICAgIG1lZGlhSW1hZ2UtPm1QbGFuZVttZWRpYUltYWdlLT5VXS5tQ29sSW5jID0gMTsKKyAgICAgICAgICAgICAgICAgICAgICAgIG1lZGlhSW1hZ2UtPm1QbGFuZVttZWRpYUltYWdlLT5VXS5tUm93SW5jID0gbVN0cmlkZSAvIDI7CisgICAgICAgICAgICAgICAgICAgICAgICBtZWRpYUltYWdlLT5tUGxhbmVbbWVkaWFJbWFnZS0+VV0ubUhvcml6U3Vic2FtcGxpbmcgPSAyOworICAgICAgICAgICAgICAgICAgICAgICAgbWVkaWFJbWFnZS0+bVBsYW5lW21lZGlhSW1hZ2UtPlVdLm1WZXJ0U3Vic2FtcGxpbmcgPSAyOworCisgICAgICAgICAgICAgICAgICAgICAgICBtZWRpYUltYWdlLT5tUGxhbmVbbWVkaWFJbWFnZS0+Vl0ubU9mZnNldCA9IG1TdHJpZGUgKiBtVlN0cmlkZSAqIDUgLyA0OworICAgICAgICAgICAgICAgICAgICAgICAgbWVkaWFJbWFnZS0+bVBsYW5lW21lZGlhSW1hZ2UtPlZdLm1Db2xJbmMgPSAxOworICAgICAgICAgICAgICAgICAgICAgICAgbWVkaWFJbWFnZS0+bVBsYW5lW21lZGlhSW1hZ2UtPlZdLm1Sb3dJbmMgPSBtU3RyaWRlIC8gMjsKKyAgICAgICAgICAgICAgICAgICAgICAgIG1lZGlhSW1hZ2UtPm1QbGFuZVttZWRpYUltYWdlLT5WXS5tSG9yaXpTdWJzYW1wbGluZyA9IDI7CisgICAgICAgICAgICAgICAgICAgICAgICBtZWRpYUltYWdlLT5tUGxhbmVbbWVkaWFJbWFnZS0+Vl0ubVZlcnRTdWJzYW1wbGluZyA9IDI7CisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgICAgICAgICBjYXNlIENPTE9SX0Zvcm1hdFlVVjQyMFNlbWlQbGFuYXI6CisgICAgICAgICAgICAgICAgICAgIGNhc2UgQ09MT1JfRm9ybWF0WVVWNDIwUGFja2VkU2VtaVBsYW5hcjoKKyAgICAgICAgICAgICAgICAgICAgICAgIG1lZGlhSW1hZ2UtPm1QbGFuZVttZWRpYUltYWdlLT5ZXS5tT2Zmc2V0ID0gMDsKKyAgICAgICAgICAgICAgICAgICAgICAgIG1lZGlhSW1hZ2UtPm1QbGFuZVttZWRpYUltYWdlLT5ZXS5tQ29sSW5jID0gMTsKKyAgICAgICAgICAgICAgICAgICAgICAgIG1lZGlhSW1hZ2UtPm1QbGFuZVttZWRpYUltYWdlLT5ZXS5tUm93SW5jID0gbVN0cmlkZTsKKyAgICAgICAgICAgICAgICAgICAgICAgIG1lZGlhSW1hZ2UtPm1QbGFuZVttZWRpYUltYWdlLT5ZXS5tSG9yaXpTdWJzYW1wbGluZyA9IDE7CisgICAgICAgICAgICAgICAgICAgICAgICBtZWRpYUltYWdlLT5tUGxhbmVbbWVkaWFJbWFnZS0+WV0ubVZlcnRTdWJzYW1wbGluZyA9IDE7CisKKyAgICAgICAgICAgICAgICAgICAgICAgIG1lZGlhSW1hZ2UtPm1QbGFuZVttZWRpYUltYWdlLT5VXS5tT2Zmc2V0ID0gbVN0cmlkZSAqIG1WU3RyaWRlOworICAgICAgICAgICAgICAgICAgICAgICAgbWVkaWFJbWFnZS0+bVBsYW5lW21lZGlhSW1hZ2UtPlVdLm1Db2xJbmMgPSAyOworICAgICAgICAgICAgICAgICAgICAgICAgbWVkaWFJbWFnZS0+bVBsYW5lW21lZGlhSW1hZ2UtPlVdLm1Sb3dJbmMgPSBtU3RyaWRlOworICAgICAgICAgICAgICAgICAgICAgICAgbWVkaWFJbWFnZS0+bVBsYW5lW21lZGlhSW1hZ2UtPlVdLm1Ib3JpelN1YnNhbXBsaW5nID0gMjsKKyAgICAgICAgICAgICAgICAgICAgICAgIG1lZGlhSW1hZ2UtPm1QbGFuZVttZWRpYUltYWdlLT5VXS5tVmVydFN1YnNhbXBsaW5nID0gMjsKKworICAgICAgICAgICAgICAgICAgICAgICAgbWVkaWFJbWFnZS0+bVBsYW5lW21lZGlhSW1hZ2UtPlZdLm1PZmZzZXQgPSBtU3RyaWRlICogbVZTdHJpZGUgKyAxOworICAgICAgICAgICAgICAgICAgICAgICAgbWVkaWFJbWFnZS0+bVBsYW5lW21lZGlhSW1hZ2UtPlZdLm1Db2xJbmMgPSAyOworICAgICAgICAgICAgICAgICAgICAgICAgbWVkaWFJbWFnZS0+bVBsYW5lW21lZGlhSW1hZ2UtPlZdLm1Sb3dJbmMgPSBtU3RyaWRlOworICAgICAgICAgICAgICAgICAgICAgICAgbWVkaWFJbWFnZS0+bVBsYW5lW21lZGlhSW1hZ2UtPlZdLm1Ib3JpelN1YnNhbXBsaW5nID0gMjsKKyAgICAgICAgICAgICAgICAgICAgICAgIG1lZGlhSW1hZ2UtPm1QbGFuZVttZWRpYUltYWdlLT5WXS5tVmVydFN1YnNhbXBsaW5nID0gMjsKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgICAgICAgICBBTE9HRCgiQ29udmVydGVyOiBpbmNvbXBhY3RpYmxlIGNvbG9yIGZvcm1hdCAoJWQpIGZvciBZVVYgbGF5b3V0IiwgbUNvbG9yRm9ybWF0KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIG1Jbml0Q2hlY2sgPSBCQURfVkFMVUU7CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBDMlBsYW5hckxheW91dDo6VFlQRV9ZVVZBOgorICAgICAgICAgICAgICAgIG1lZGlhSW1hZ2UtPm1UeXBlID0gTWVkaWFJbWFnZTI6Ok1FRElBX0lNQUdFX1RZUEVfWVVWQTsKKyAgICAgICAgICAgICAgICAvLyBXZSBkb24ndCBoYXZlIGFuIFNESyBZVVZBIGZvcm1hdAorICAgICAgICAgICAgICAgIEFMT0dEKCJDb252ZXJ0ZXI6IGluY29tcGFjdGlibGUgY29sb3IgZm9ybWF0ICglZCkgZm9yIFlVVkEgbGF5b3V0IiwgbUNvbG9yRm9ybWF0KTsKKyAgICAgICAgICAgICAgICBtSW5pdENoZWNrID0gQkFEX1ZBTFVFOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIGNhc2UgQzJQbGFuYXJMYXlvdXQ6OlRZUEVfUkdCOgorICAgICAgICAgICAgICAgIG1lZGlhSW1hZ2UtPm1UeXBlID0gTWVkaWFJbWFnZTI6Ok1FRElBX0lNQUdFX1RZUEVfUkdCOworICAgICAgICAgICAgICAgIHN3aXRjaCAobUNvbG9yRm9ybWF0KSB7CisgICAgICAgICAgICAgICAgICAgIC8vIFRPRE8gbWVkaWEgaW1hZ2UKKyAgICAgICAgICAgICAgICAgICAgY2FzZSBDT0xPUl9Gb3JtYXRSR0JGbGV4aWJsZToKKyAgICAgICAgICAgICAgICAgICAgY2FzZSBDT0xPUl9Gb3JtYXQyNGJpdEJHUjg4ODoKKyAgICAgICAgICAgICAgICAgICAgY2FzZSBDT0xPUl9Gb3JtYXQyNGJpdFJHQjg4ODoKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgICAgICAgICAgQUxPR0QoIkNvbnZlcnRlcjogaW5jb21wYWN0aWJsZSBjb2xvciBmb3JtYXQgKCVkKSBmb3IgUkdCIGxheW91dCIsIG1Db2xvckZvcm1hdCk7CisgICAgICAgICAgICAgICAgICAgICAgICBtSW5pdENoZWNrID0gQkFEX1ZBTFVFOworICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBpZiAobGF5b3V0Lm51bVBsYW5lcyAhPSAzKSB7CisgICAgICAgICAgICAgICAgICAgIEFMT0dEKCJDb252ZXJ0ZXI6ICVkIHBsYW5lcyBmb3IgUkdCIGxheW91dCIsIGxheW91dC5udW1QbGFuZXMpOworICAgICAgICAgICAgICAgICAgICBtSW5pdENoZWNrID0gQkFEX1ZBTFVFOworICAgICAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBDMlBsYW5hckxheW91dDo6VFlQRV9SR0JBOgorICAgICAgICAgICAgICAgIG1lZGlhSW1hZ2UtPm1UeXBlID0gTWVkaWFJbWFnZTI6Ok1FRElBX0lNQUdFX1RZUEVfUkdCQTsKKyAgICAgICAgICAgICAgICBzd2l0Y2ggKG1Db2xvckZvcm1hdCkgeworICAgICAgICAgICAgICAgICAgICAvLyBUT0RPIG1lZGlhIGltYWdlCisgICAgICAgICAgICAgICAgICAgIGNhc2UgQ09MT1JfRm9ybWF0UkdCQUZsZXhpYmxlOgorICAgICAgICAgICAgICAgICAgICBjYXNlIENPTE9SX0Zvcm1hdDMyYml0QUJHUjg4ODg6CisgICAgICAgICAgICAgICAgICAgIGNhc2UgQ09MT1JfRm9ybWF0MzJiaXRBUkdCODg4ODoKKyAgICAgICAgICAgICAgICAgICAgY2FzZSBDT0xPUl9Gb3JtYXQzMmJpdEJHUkE4ODg4OgorICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgICAgICAgICBBTE9HRCgiSW5jb21wYWN0aWJsZSBjb2xvciBmb3JtYXQgKCVkKSBmb3IgUkdCQSBsYXlvdXQiLCBtQ29sb3JGb3JtYXQpOworICAgICAgICAgICAgICAgICAgICAgICAgbUluaXRDaGVjayA9IEJBRF9WQUxVRTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgaWYgKGxheW91dC5udW1QbGFuZXMgIT0gNCkgeworICAgICAgICAgICAgICAgICAgICBBTE9HRCgiQ29udmVydGVyOiAlZCBwbGFuZXMgZm9yIFJHQkEgbGF5b3V0IiwgbGF5b3V0Lm51bVBsYW5lcyk7CisgICAgICAgICAgICAgICAgICAgIG1Jbml0Q2hlY2sgPSBCQURfVkFMVUU7CisgICAgICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgIG1lZGlhSW1hZ2UtPm1UeXBlID0gTWVkaWFJbWFnZTI6Ok1FRElBX0lNQUdFX1RZUEVfVU5LTk9XTjsKKyAgICAgICAgICAgICAgICBBTE9HRCgiVW5rbm93biBsYXlvdXQiKTsKKyAgICAgICAgICAgICAgICBtSW5pdENoZWNrID0gQkFEX1ZBTFVFOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICBtZWRpYUltYWdlLT5tTnVtUGxhbmVzID0gbGF5b3V0Lm51bVBsYW5lczsKKyAgICAgICAgbWVkaWFJbWFnZS0+bVdpZHRoID0gbVdpZHRoOworICAgICAgICBtZWRpYUltYWdlLT5tSGVpZ2h0ID0gbUhlaWdodDsKKyAgICAgICAgbWVkaWFJbWFnZS0+bUJpdERlcHRoID0gYml0RGVwdGg7CisgICAgICAgIG1lZGlhSW1hZ2UtPm1CaXREZXB0aEFsbG9jYXRlZCA9IG1BbGxvY2F0ZWREZXB0aDsKKworICAgICAgICB1aW50MzJfdCBidWZmZXJTaXplID0gMDsKKyAgICAgICAgZm9yICh1aW50MzJfdCBpID0gMDsgaSA8IGxheW91dC5udW1QbGFuZXM7ICsraSkgeworICAgICAgICAgICAgY29uc3QgQzJQbGFuZUluZm8gJnBsYW5lID0gbGF5b3V0LnBsYW5lc1tpXTsKKyAgICAgICAgICAgIGlmIChwbGFuZS5hbGxvY2F0ZWREZXB0aCA8IHBsYW5lLmJpdERlcHRoCisgICAgICAgICAgICAgICAgICAgIHx8IHBsYW5lLnJpZ2h0U2hpZnQgIT0gcGxhbmUuYWxsb2NhdGVkRGVwdGggLSBwbGFuZS5iaXREZXB0aCkgeworICAgICAgICAgICAgICAgIEFMT0dEKCJyaWdodFNoaWZ0IHZhbHVlIG9mICV1IHVuc3VwcG9ydGVkIiwgcGxhbmUucmlnaHRTaGlmdCk7CisgICAgICAgICAgICAgICAgbUluaXRDaGVjayA9IEJBRF9WQUxVRTsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAocGxhbmUuYWxsb2NhdGVkRGVwdGggPiA4ICYmIHBsYW5lLmVuZGlhbm5lc3MgIT0gQzJQbGFuZUluZm86Ok5BVElWRSkgeworICAgICAgICAgICAgICAgIEFMT0dEKCJlbmRpYW5uZXNzIHZhbHVlIG9mICV1IHVuc3VwcG9ydGVkIiwgcGxhbmUuZW5kaWFubmVzcyk7CisgICAgICAgICAgICAgICAgbUluaXRDaGVjayA9IEJBRF9WQUxVRTsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAocGxhbmUuYWxsb2NhdGVkRGVwdGggIT0gbUFsbG9jYXRlZERlcHRoIHx8IHBsYW5lLmJpdERlcHRoICE9IGJpdERlcHRoKSB7CisgICAgICAgICAgICAgICAgQUxPR1YoImRpZmZlcmVudCBhbGxvY2F0ZWREZXB0aC9iaXREZXB0aCBwZXIgcGxhbmUgdW5zdXBwb3J0ZWQiKTsKKyAgICAgICAgICAgICAgICBtSW5pdENoZWNrID0gQkFEX1ZBTFVFOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGJ1ZmZlclNpemUgKz0gbVN0cmlkZSAqIG1WU3RyaWRlCisgICAgICAgICAgICAgICAgICAgIC8gcGxhbmUucm93U2FtcGxpbmcgLyBwbGFuZS5jb2xTYW1wbGluZzsKKyAgICAgICAgfQorCisgICAgICAgIG1CYWNrQnVmZmVyU2l6ZSA9IGJ1ZmZlclNpemU7CisgICAgICAgIG1Jbml0Q2hlY2sgPSBPSzsKKyAgICB9CisKKyAgICBzdGF0dXNfdCBpbml0Q2hlY2soKSBjb25zdCB7IHJldHVybiBtSW5pdENoZWNrOyB9CisKKyAgICB1aW50MzJfdCBiYWNrQnVmZmVyU2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1CYWNrQnVmZmVyU2l6ZTsgfQorCisgICAgLyoqCisgICAgICogV3JhcCBDMkdyYXBoaWNWaWV3IHVzaW5nIGEgTWVkaWFJbWFnZTIuIE5vdGUgdGhhdCBpZiBub3Qgd3JhcHBlZCwgdGhlIGNvbnRlbnQgaXMgbm90IG1hcHBlZAorICAgICAqIGluIHRoaXMgZnVuY3Rpb24gLS0tIHRoZSBjYWxsZXIgc2hvdWxkIHVzZSBDb3B5R3JhcGhpY1ZpZXcyTWVkaWFJbWFnZSgpIGZ1bmN0aW9uIHRvIGNvcHkgdGhlCisgICAgICogZGF0YSBpbnRvIGEgYmFja2luZyBidWZmZXIgZXhwbGljaXRseS4KKyAgICAgKgorICAgICAqIFxyZXR1cm4gbWVkaWEgYnVmZmVyLiBUaGlzIGlzIG51bGwgaWYgd3JhcHBpbmcgZmFpbGVkLgorICAgICAqLworICAgIHNwPEFCdWZmZXI+IHdyYXAoKSBjb25zdCB7CisgICAgICAgIGlmIChtQmFja0J1ZmZlciA9PSBudWxscHRyKSB7CisgICAgICAgICAgICByZXR1cm4gbVdyYXBwZWQ7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgfQorCisgICAgYm9vbCBzZXRCYWNrQnVmZmVyKGNvbnN0IHNwPEFCdWZmZXI+ICZiYWNrQnVmZmVyKSB7CisgICAgICAgIGlmIChiYWNrQnVmZmVyLT5jYXBhY2l0eSgpIDwgbUJhY2tCdWZmZXJTaXplKSB7CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICAgICAgYmFja0J1ZmZlci0+c2V0UmFuZ2UoMCwgbUJhY2tCdWZmZXJTaXplKTsKKyAgICAgICAgbUJhY2tCdWZmZXIgPSBiYWNrQnVmZmVyOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBDb3B5IEMyR3JhcGhpY1ZpZXcgdG8gTWVkaWFJbWFnZTIuCisgICAgICovCisgICAgc3RhdHVzX3QgY29weVRvTWVkaWFJbWFnZSgpIHsKKyAgICAgICAgaWYgKG1Jbml0Q2hlY2sgIT0gT0spIHsKKyAgICAgICAgICAgIHJldHVybiBtSW5pdENoZWNrOworICAgICAgICB9CisgICAgICAgIHJldHVybiBJbWFnZUNvcHkobUJhY2tCdWZmZXItPmJhc2UoKSwgZ2V0TWVkaWFJbWFnZSgpLCBtVmlldyk7CisgICAgfQorCisgICAgY29uc3Qgc3A8QUJ1ZmZlcj4gJmltYWdlRGF0YSgpIGNvbnN0IHsgcmV0dXJuIG1NZWRpYUltYWdlOyB9CisKK3ByaXZhdGU6CisgICAgc3RhdHVzX3QgbUluaXRDaGVjazsKKworICAgIGNvbnN0IEMyR3JhcGhpY1ZpZXcgbVZpZXc7CisgICAgdWludDMyX3QgbVdpZHRoOworICAgIHVpbnQzMl90IG1IZWlnaHQ7CisgICAgaW50MzJfdCBtQ29sb3JGb3JtYXQ7ICAvLy88IFNESyBjb2xvciBmb3JtYXQgZm9yIE1lZGlhSW1hZ2UKKyAgICBzcDxBQnVmZmVyPiBtV3JhcHBlZDsgIC8vLzwgd3JhcHBlZCBidWZmZXIgKGlmIHdlIGNhbiBtYXAgQzJCdWZmZXIgdG8gYW4gQUJ1ZmZlcikKKyAgICB1aW50MzJfdCBtQWxsb2NhdGVkRGVwdGg7CisgICAgdWludDMyX3QgbUJhY2tCdWZmZXJTaXplOworICAgIHNwPEFCdWZmZXI+IG1NZWRpYUltYWdlOworICAgIHN0ZDo6ZnVuY3Rpb248c3A8QUJ1ZmZlcj4oc2l6ZV90KT4gbUFsbG9jOworCisgICAgc3A8QUJ1ZmZlcj4gbUJhY2tCdWZmZXI7ICAgIC8vLzwgYmFja2luZyBidWZmZXIgaWYgd2UgaGF2ZSB0byBjb3B5IEMyQnVmZmVyIDw9PiBBQnVmZmVyCisKKyAgICBNZWRpYUltYWdlMiAqZ2V0TWVkaWFJbWFnZSgpIHsKKyAgICAgICAgcmV0dXJuIChNZWRpYUltYWdlMiAqKW1NZWRpYUltYWdlLT5iYXNlKCk7CisgICAgfQorfTsKKworfSAgLy8gbmFtZXNwYWNlCisKKy8vIEdyYXBoaWNCbG9ja0J1ZmZlcgorCisvLyBzdGF0aWMKK3NwPEdyYXBoaWNCbG9ja0J1ZmZlcj4gR3JhcGhpY0Jsb2NrQnVmZmVyOjpBbGxvY2F0ZSgKKyAgICAgICAgY29uc3Qgc3A8QU1lc3NhZ2U+ICZmb3JtYXQsCisgICAgICAgIGNvbnN0IHN0ZDo6c2hhcmVkX3B0cjxDMkdyYXBoaWNCbG9jaz4gJmJsb2NrLAorICAgICAgICBzdGQ6OmZ1bmN0aW9uPHNwPEFCdWZmZXI+KHNpemVfdCk+IGFsbG9jKSB7CisgICAgQzJHcmFwaGljVmlldyB2aWV3KGJsb2NrLT5tYXAoKS5nZXQoKSk7CisgICAgaWYgKHZpZXcuZXJyb3IoKSAhPSBDMl9PSykgeworICAgICAgICBBTE9HRCgiQzJHcmFwaGljQmxvY2s6Om1hcCBmYWlsZWQ6ICVkIiwgdmlldy5lcnJvcigpKTsKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgfQorCisgICAgaW50MzJfdCBjb2xvckZvcm1hdCA9IENPTE9SX0Zvcm1hdFlVVjQyMEZsZXhpYmxlOworICAgICh2b2lkKWZvcm1hdC0+ZmluZEludDMyKCJjb2xvci1mb3JtYXQiLCAmY29sb3JGb3JtYXQpOworCisgICAgR3JhcGhpY1ZpZXcyTWVkaWFJbWFnZUNvbnZlcnRlciBjb252ZXJ0ZXIodmlldywgY29sb3JGb3JtYXQpOworICAgIGlmIChjb252ZXJ0ZXIuaW5pdENoZWNrKCkgIT0gT0spIHsKKyAgICAgICAgQUxPR0QoIkNvbnZlcnRlciBpbml0IGZhaWxlZDogJWQiLCBjb252ZXJ0ZXIuaW5pdENoZWNrKCkpOworICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICB9CisgICAgYm9vbCB3cmFwcGVkID0gdHJ1ZTsKKyAgICBzcDxBQnVmZmVyPiBidWZmZXIgPSBjb252ZXJ0ZXIud3JhcCgpOworICAgIGlmIChidWZmZXIgPT0gbnVsbHB0cikgeworICAgICAgICBidWZmZXIgPSBhbGxvYyhjb252ZXJ0ZXIuYmFja0J1ZmZlclNpemUoKSk7CisgICAgICAgIGlmICghY29udmVydGVyLnNldEJhY2tCdWZmZXIoYnVmZmVyKSkgeworICAgICAgICAgICAgQUxPR0QoIkNvbnZlcnRlciBmYWlsZWQgdG8gc2V0IGJhY2sgYnVmZmVyIik7CisgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAgICAgfQorICAgICAgICB3cmFwcGVkID0gZmFsc2U7CisgICAgfQorICAgIHJldHVybiBuZXcgR3JhcGhpY0Jsb2NrQnVmZmVyKAorICAgICAgICAgICAgZm9ybWF0LAorICAgICAgICAgICAgYnVmZmVyLAorICAgICAgICAgICAgc3RkOjptb3ZlKHZpZXcpLAorICAgICAgICAgICAgYmxvY2ssCisgICAgICAgICAgICBjb252ZXJ0ZXIuaW1hZ2VEYXRhKCksCisgICAgICAgICAgICB3cmFwcGVkKTsKK30KKworR3JhcGhpY0Jsb2NrQnVmZmVyOjpHcmFwaGljQmxvY2tCdWZmZXIoCisgICAgICAgIGNvbnN0IHNwPEFNZXNzYWdlPiAmZm9ybWF0LAorICAgICAgICBjb25zdCBzcDxBQnVmZmVyPiAmYnVmZmVyLAorICAgICAgICBDMkdyYXBoaWNWaWV3ICYmdmlldywKKyAgICAgICAgY29uc3Qgc3RkOjpzaGFyZWRfcHRyPEMyR3JhcGhpY0Jsb2NrPiAmYmxvY2ssCisgICAgICAgIGNvbnN0IHNwPEFCdWZmZXI+ICZpbWFnZURhdGEsCisgICAgICAgIGJvb2wgd3JhcHBlZCkKKyAgICA6IENvZGVjMkJ1ZmZlcihmb3JtYXQsIGJ1ZmZlciksCisgICAgICBtVmlldyh2aWV3KSwKKyAgICAgIG1CbG9jayhibG9jayksCisgICAgICBtSW1hZ2VEYXRhKGltYWdlRGF0YSksCisgICAgICBtV3JhcHBlZCh3cmFwcGVkKSB7CisgICAgc2V0SW1hZ2VEYXRhKGltYWdlRGF0YSk7Cit9CisKK3N0ZDo6c2hhcmVkX3B0cjxDMkJ1ZmZlcj4gR3JhcGhpY0Jsb2NrQnVmZmVyOjphc0MyQnVmZmVyKCkgeworICAgIHVpbnQzMl90IHdpZHRoID0gbVZpZXcud2lkdGgoKTsKKyAgICB1aW50MzJfdCBoZWlnaHQgPSBtVmlldy5oZWlnaHQoKTsKKyAgICBpZiAoIW1XcmFwcGVkKSB7CisgICAgICAgICh2b2lkKUltYWdlQ29weShtVmlldywgYmFzZSgpLCBpbWFnZURhdGEoKSk7CisgICAgfQorICAgIHJldHVybiBDMkJ1ZmZlcjo6Q3JlYXRlR3JhcGhpY0J1ZmZlcigKKyAgICAgICAgICAgIG1CbG9jay0+c2hhcmUoQzJSZWN0KHdpZHRoLCBoZWlnaHQpLCBDMkZlbmNlKCkpKTsKK30KKworLy8gR3JhcGhpY01ldGFkYXRhQnVmZmVyCitHcmFwaGljTWV0YWRhdGFCdWZmZXI6OkdyYXBoaWNNZXRhZGF0YUJ1ZmZlcigKKyAgICAgICAgY29uc3Qgc3A8QU1lc3NhZ2U+ICZmb3JtYXQsCisgICAgICAgIGNvbnN0IHN0ZDo6c2hhcmVkX3B0cjxDMkFsbG9jYXRvcj4gJmFsbG9jKQorICAgIDogQ29kZWMyQnVmZmVyKGZvcm1hdCwgbmV3IEFCdWZmZXIoc2l6ZW9mKFZpZGVvTmF0aXZlTWV0YWRhdGEpKSksCisgICAgICBtQWxsb2MoYWxsb2MpIHsKKyAgICAoKFZpZGVvTmF0aXZlTWV0YWRhdGEgKiliYXNlKCkpLT5wQnVmZmVyID0gbnVsbHB0cjsKK30KKworc3RkOjpzaGFyZWRfcHRyPEMyQnVmZmVyPiBHcmFwaGljTWV0YWRhdGFCdWZmZXI6OmFzQzJCdWZmZXIoKSB7CisjaWZuZGVmIF9fTFA2NF9fCisgICAgVmlkZW9OYXRpdmVNZXRhZGF0YSAqbWV0YSA9IChWaWRlb05hdGl2ZU1ldGFkYXRhICopYmFzZSgpOworICAgIEFOYXRpdmVXaW5kb3dCdWZmZXIgKmJ1ZmZlciA9IChBTmF0aXZlV2luZG93QnVmZmVyICopbWV0YS0+cEJ1ZmZlcjsKKyAgICBpZiAoYnVmZmVyID09IG51bGxwdHIpIHsKKyAgICAgICAgQUxPR0QoIlZpZGVvTmF0aXZlTWV0YWRhdGEgY29udGFpbnMgbnVsbCBidWZmZXIiKTsKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgfQorCisgICAgQUxPR1YoIlZpZGVvTmF0aXZlTWV0YWRhdGE6ICVkeCVkIiwgYnVmZmVyLT53aWR0aCwgYnVmZmVyLT5oZWlnaHQpOworICAgIEMySGFuZGxlICpoYW5kbGUgPSBXcmFwTmF0aXZlQ29kZWMyR3JhbGxvY0hhbmRsZSgKKyAgICAgICAgICAgIG5hdGl2ZV9oYW5kbGVfY2xvbmUoYnVmZmVyLT5oYW5kbGUpLAorICAgICAgICAgICAgYnVmZmVyLT53aWR0aCwKKyAgICAgICAgICAgIGJ1ZmZlci0+aGVpZ2h0LAorICAgICAgICAgICAgYnVmZmVyLT5mb3JtYXQsCisgICAgICAgICAgICBidWZmZXItPnVzYWdlLAorICAgICAgICAgICAgYnVmZmVyLT5zdHJpZGUpOworICAgIHN0ZDo6c2hhcmVkX3B0cjxDMkdyYXBoaWNBbGxvY2F0aW9uPiBhbGxvYzsKKyAgICBjMl9zdGF0dXNfdCBlcnIgPSBtQWxsb2MtPnByaW9yR3JhcGhpY0FsbG9jYXRpb24oaGFuZGxlLCAmYWxsb2MpOworICAgIGlmIChlcnIgIT0gQzJfT0spIHsKKyAgICAgICAgQUxPR0QoIkZhaWxlZCB0byB3cmFwIFZpZGVvTmF0aXZlTWV0YWRhdGEgaW50byBDMkdyYXBoaWNBbGxvY2F0aW9uIik7CisgICAgICAgIHJldHVybiBudWxscHRyOworICAgIH0KKyAgICBzdGQ6OnNoYXJlZF9wdHI8QzJHcmFwaGljQmxvY2s+IGJsb2NrID0gX0MyQmxvY2tGYWN0b3J5OjpDcmVhdGVHcmFwaGljQmxvY2soYWxsb2MpOworCisgICAgbWV0YS0+cEJ1ZmZlciA9IDA7CisgICAgLy8gVE9ETzogZmVuY2UKKyAgICByZXR1cm4gQzJCdWZmZXI6OkNyZWF0ZUdyYXBoaWNCdWZmZXIoCisgICAgICAgICAgICBibG9jay0+c2hhcmUoQzJSZWN0KGJ1ZmZlci0+d2lkdGgsIGJ1ZmZlci0+aGVpZ2h0KSwgQzJGZW5jZSgpKSk7CisjZWxzZQorICAgIEFMT0dFKCJHcmFwaGljTWV0YWRhdGFCdWZmZXIgZG9lcyBub3Qgd29yayBvbiA2NC1iaXQgYXJjaCIpOworICAgIHJldHVybiBudWxscHRyOworI2VuZGlmCit9CisKKy8vIENvbnN0R3JhcGhpY0Jsb2NrQnVmZmVyCisKKy8vIHN0YXRpYworc3A8Q29uc3RHcmFwaGljQmxvY2tCdWZmZXI+IENvbnN0R3JhcGhpY0Jsb2NrQnVmZmVyOjpBbGxvY2F0ZSgKKyAgICAgICAgY29uc3Qgc3A8QU1lc3NhZ2U+ICZmb3JtYXQsCisgICAgICAgIGNvbnN0IHN0ZDo6c2hhcmVkX3B0cjxDMkJ1ZmZlcj4gJmJ1ZmZlciwKKyAgICAgICAgc3RkOjpmdW5jdGlvbjxzcDxBQnVmZmVyPihzaXplX3QpPiBhbGxvYykgeworICAgIGlmICghYnVmZmVyCisgICAgICAgICAgICB8fCBidWZmZXItPmRhdGEoKS50eXBlKCkgIT0gQzJCdWZmZXJEYXRhOjpHUkFQSElDCisgICAgICAgICAgICB8fCBidWZmZXItPmRhdGEoKS5ncmFwaGljQmxvY2tzKCkuc2l6ZSgpICE9IDF1KSB7CisgICAgICAgIEFMT0dEKCJDMkJ1ZmZlciBwcmVjb25kIGZhaWwiKTsKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgfQorICAgIHN0ZDo6dW5pcXVlX3B0cjxjb25zdCBDMkdyYXBoaWNWaWV3PiB2aWV3KHN0ZDo6bWFrZV91bmlxdWU8Y29uc3QgQzJHcmFwaGljVmlldz4oCisgICAgICAgICAgICBidWZmZXItPmRhdGEoKS5ncmFwaGljQmxvY2tzKClbMF0ubWFwKCkuZ2V0KCkpKTsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8Y29uc3QgQzJHcmFwaGljVmlldz4gaG9sZGVyOworCisgICAgaW50MzJfdCBjb2xvckZvcm1hdCA9IENPTE9SX0Zvcm1hdFlVVjQyMEZsZXhpYmxlOworICAgICh2b2lkKWZvcm1hdC0+ZmluZEludDMyKCJjb2xvci1mb3JtYXQiLCAmY29sb3JGb3JtYXQpOworCisgICAgR3JhcGhpY1ZpZXcyTWVkaWFJbWFnZUNvbnZlcnRlciBjb252ZXJ0ZXIoKnZpZXcsIGNvbG9yRm9ybWF0KTsKKyAgICBpZiAoY29udmVydGVyLmluaXRDaGVjaygpICE9IE9LKSB7CisgICAgICAgIEFMT0dEKCJDb252ZXJ0ZXIgaW5pdCBmYWlsZWQ6ICVkIiwgY29udmVydGVyLmluaXRDaGVjaygpKTsKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgfQorICAgIGJvb2wgd3JhcHBlZCA9IHRydWU7CisgICAgc3A8QUJ1ZmZlcj4gYUJ1ZmZlciA9IGNvbnZlcnRlci53cmFwKCk7CisgICAgaWYgKGFCdWZmZXIgPT0gbnVsbHB0cikgeworICAgICAgICBhQnVmZmVyID0gYWxsb2MoY29udmVydGVyLmJhY2tCdWZmZXJTaXplKCkpOworICAgICAgICBpZiAoIWNvbnZlcnRlci5zZXRCYWNrQnVmZmVyKGFCdWZmZXIpKSB7CisgICAgICAgICAgICBBTE9HRCgiQ29udmVydGVyIGZhaWxlZCB0byBzZXQgYmFjayBidWZmZXIiKTsKKyAgICAgICAgICAgIHJldHVybiBudWxscHRyOworICAgICAgICB9CisgICAgICAgIHdyYXBwZWQgPSBmYWxzZTsKKyAgICAgICAgY29udmVydGVyLmNvcHlUb01lZGlhSW1hZ2UoKTsKKyAgICAgICAgLy8gV2UgZG9uJ3QgbmVlZCB0aGUgdmlldy4KKyAgICAgICAgaG9sZGVyID0gc3RkOjptb3ZlKHZpZXcpOworICAgIH0KKyAgICByZXR1cm4gbmV3IENvbnN0R3JhcGhpY0Jsb2NrQnVmZmVyKAorICAgICAgICAgICAgZm9ybWF0LAorICAgICAgICAgICAgYUJ1ZmZlciwKKyAgICAgICAgICAgIHN0ZDo6bW92ZSh2aWV3KSwKKyAgICAgICAgICAgIGJ1ZmZlciwKKyAgICAgICAgICAgIGNvbnZlcnRlci5pbWFnZURhdGEoKSwKKyAgICAgICAgICAgIHdyYXBwZWQpOworfQorCisvLyBzdGF0aWMKK3NwPENvbnN0R3JhcGhpY0Jsb2NrQnVmZmVyPiBDb25zdEdyYXBoaWNCbG9ja0J1ZmZlcjo6QWxsb2NhdGVFbXB0eSgKKyAgICAgICAgY29uc3Qgc3A8QU1lc3NhZ2U+ICZmb3JtYXQsCisgICAgICAgIHN0ZDo6ZnVuY3Rpb248c3A8QUJ1ZmZlcj4oc2l6ZV90KT4gYWxsb2MpIHsKKyAgICBpbnQzMl90IHdpZHRoLCBoZWlnaHQ7CisgICAgaWYgKCFmb3JtYXQtPmZpbmRJbnQzMigid2lkdGgiLCAmd2lkdGgpCisgICAgICAgICAgICB8fCAhZm9ybWF0LT5maW5kSW50MzIoImhlaWdodCIsICZoZWlnaHQpKSB7CisgICAgICAgIEFMT0dEKCJmb3JtYXQgaGFkIG5vIHdpZHRoIC8gaGVpZ2h0Iik7CisgICAgICAgIHJldHVybiBudWxscHRyOworICAgIH0KKyAgICBzcDxBQnVmZmVyPiBhQnVmZmVyKGFsbG9jKHdpZHRoICogaGVpZ2h0ICogNCkpOworICAgIHJldHVybiBuZXcgQ29uc3RHcmFwaGljQmxvY2tCdWZmZXIoCisgICAgICAgICAgICBmb3JtYXQsCisgICAgICAgICAgICBhQnVmZmVyLAorICAgICAgICAgICAgbnVsbHB0ciwKKyAgICAgICAgICAgIG51bGxwdHIsCisgICAgICAgICAgICBudWxscHRyLAorICAgICAgICAgICAgZmFsc2UpOworfQorCitDb25zdEdyYXBoaWNCbG9ja0J1ZmZlcjo6Q29uc3RHcmFwaGljQmxvY2tCdWZmZXIoCisgICAgICAgIGNvbnN0IHNwPEFNZXNzYWdlPiAmZm9ybWF0LAorICAgICAgICBjb25zdCBzcDxBQnVmZmVyPiAmYUJ1ZmZlciwKKyAgICAgICAgc3RkOjp1bmlxdWVfcHRyPGNvbnN0IEMyR3JhcGhpY1ZpZXc+ICYmdmlldywKKyAgICAgICAgY29uc3Qgc3RkOjpzaGFyZWRfcHRyPEMyQnVmZmVyPiAmYnVmZmVyLAorICAgICAgICBjb25zdCBzcDxBQnVmZmVyPiAmaW1hZ2VEYXRhLAorICAgICAgICBib29sIHdyYXBwZWQpCisgICAgOiBDb2RlYzJCdWZmZXIoZm9ybWF0LCBhQnVmZmVyKSwKKyAgICAgIG1WaWV3KHN0ZDo6bW92ZSh2aWV3KSksCisgICAgICBtQnVmZmVyUmVmKGJ1ZmZlciksCisgICAgICBtV3JhcHBlZCh3cmFwcGVkKSB7CisgICAgaWYgKGltYWdlRGF0YSAhPSBudWxscHRyKSB7CisgICAgICAgIHNldEltYWdlRGF0YShpbWFnZURhdGEpOworICAgIH0KK30KKworc3RkOjpzaGFyZWRfcHRyPEMyQnVmZmVyPiBDb25zdEdyYXBoaWNCbG9ja0J1ZmZlcjo6YXNDMkJ1ZmZlcigpIHsKKyAgICBtVmlldy5yZXNldCgpOworICAgIHJldHVybiBzdGQ6Om1vdmUobUJ1ZmZlclJlZik7Cit9CisKK2Jvb2wgQ29uc3RHcmFwaGljQmxvY2tCdWZmZXI6OmNhbkNvcHkoY29uc3Qgc3RkOjpzaGFyZWRfcHRyPEMyQnVmZmVyPiAmYnVmZmVyKSBjb25zdCB7CisgICAgaWYgKG1XcmFwcGVkIHx8IG1CdWZmZXJSZWYpIHsKKyAgICAgICAgQUxPR0QoIkNvbnN0R3JhcGhpY0Jsb2NrQnVmZmVyOjpjYW5Db3B5OiAlc3dyYXBwZWQgOyBidWZmZXIgcmVmICVzIiwKKyAgICAgICAgICAgICAgICBtV3JhcHBlZCA/ICIiIDogIm5vdCAiLCBtQnVmZmVyUmVmID8gImV4aXN0cyIgOiAiZG9lc24ndCBleGlzdCIpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorICAgIGlmICghYnVmZmVyKSB7CisgICAgICAgIC8vIE5vdGhpbmcgdG8gY29weSwgc28gd2UgY2FuIGNvcHkgYnkgZG9pbmcgbm90aGluZy4KKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorICAgIGlmIChidWZmZXItPmRhdGEoKS50eXBlKCkgIT0gQzJCdWZmZXJEYXRhOjpHUkFQSElDKSB7CisgICAgICAgIEFMT0dEKCJDb25zdEdyYXBoaWNCbG9ja0J1ZmZlcjo6Y2FuQ29weTogYnVmZmVyIHByZWNvbmRpdGlvbiB1bnNhdGlzZmllZCIpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorICAgIGlmIChidWZmZXItPmRhdGEoKS5ncmFwaGljQmxvY2tzKCkuc2l6ZSgpID09IDApIHsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfSBlbHNlIGlmIChidWZmZXItPmRhdGEoKS5ncmFwaGljQmxvY2tzKCkuc2l6ZSgpICE9IDF1KSB7CisgICAgICAgIEFMT0dEKCJDb25zdEdyYXBoaWNCbG9ja0J1ZmZlcjo6Y2FuQ29weTogdG9vIG1hbnkgYmxvY2tzIik7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBpbnQzMl90IGNvbG9yRm9ybWF0ID0gQ09MT1JfRm9ybWF0WVVWNDIwRmxleGlibGU7CisgICAgLy8gRklYTUU6IGZvcm1hdCgpIGlzIG5vdCBjb25zdCwgYnV0IHdlIGNhbm5vdCBjaGFuZ2UgaXQsIHNvIGRvIGEgY29uc3QgY2FzdCBoZXJlCisgICAgY29uc3RfY2FzdDxDb25zdEdyYXBoaWNCbG9ja0J1ZmZlciAqPih0aGlzKS0+Zm9ybWF0KCktPmZpbmRJbnQzMigiY29sb3ItZm9ybWF0IiwgJmNvbG9yRm9ybWF0KTsKKworICAgIEdyYXBoaWNWaWV3Mk1lZGlhSW1hZ2VDb252ZXJ0ZXIgY29udmVydGVyKAorICAgICAgICAgICAgYnVmZmVyLT5kYXRhKCkuZ3JhcGhpY0Jsb2NrcygpWzBdLm1hcCgpLmdldCgpLCBjb2xvckZvcm1hdCk7CisgICAgaWYgKGNvbnZlcnRlci5pbml0Q2hlY2soKSAhPSBPSykgeworICAgICAgICBBTE9HRCgiQ29uc3RHcmFwaGljQmxvY2tCdWZmZXI6OmNhbkNvcHk6IGNvbnZlcnRlciBpbml0IGZhaWxlZDogJWQiLCBjb252ZXJ0ZXIuaW5pdENoZWNrKCkpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorICAgIGlmIChjb252ZXJ0ZXIuYmFja0J1ZmZlclNpemUoKSA+IGNhcGFjaXR5KCkpIHsKKyAgICAgICAgQUxPR0QoIkNvbnN0R3JhcGhpY0Jsb2NrQnVmZmVyOjpjYW5Db3B5OiBpbnN1ZmZpY2llbnQgY2FwYWNpdHk6IHJlcSAldSBoYXMgJXp1IiwKKyAgICAgICAgICAgICAgICBjb252ZXJ0ZXIuYmFja0J1ZmZlclNpemUoKSwgY2FwYWNpdHkoKSk7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgQ29uc3RHcmFwaGljQmxvY2tCdWZmZXI6OmNvcHkoY29uc3Qgc3RkOjpzaGFyZWRfcHRyPEMyQnVmZmVyPiAmYnVmZmVyKSB7CisgICAgaWYgKCFidWZmZXIgfHwgYnVmZmVyLT5kYXRhKCkuZ3JhcGhpY0Jsb2NrcygpLnNpemUoKSA9PSAwKSB7CisgICAgICAgIHNldFJhbmdlKDAsIDApOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgaW50MzJfdCBjb2xvckZvcm1hdCA9IENPTE9SX0Zvcm1hdFlVVjQyMEZsZXhpYmxlOworICAgIGZvcm1hdCgpLT5maW5kSW50MzIoImNvbG9yLWZvcm1hdCIsICZjb2xvckZvcm1hdCk7CisKKyAgICBHcmFwaGljVmlldzJNZWRpYUltYWdlQ29udmVydGVyIGNvbnZlcnRlcigKKyAgICAgICAgICAgIGJ1ZmZlci0+ZGF0YSgpLmdyYXBoaWNCbG9ja3MoKVswXS5tYXAoKS5nZXQoKSwgY29sb3JGb3JtYXQpOworICAgIGlmIChjb252ZXJ0ZXIuaW5pdENoZWNrKCkgIT0gT0spIHsKKyAgICAgICAgQUxPR0QoIkNvbnN0R3JhcGhpY0Jsb2NrQnVmZmVyOjpjb3B5OiBjb252ZXJ0ZXIgaW5pdCBmYWlsZWQ6ICVkIiwgY29udmVydGVyLmluaXRDaGVjaygpKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAgICBzcDxBQnVmZmVyPiBhQnVmZmVyID0gbmV3IEFCdWZmZXIoYmFzZSgpLCBjYXBhY2l0eSgpKTsKKyAgICBpZiAoIWNvbnZlcnRlci5zZXRCYWNrQnVmZmVyKGFCdWZmZXIpKSB7CisgICAgICAgIEFMT0dEKCJDb25zdEdyYXBoaWNCbG9ja0J1ZmZlcjo6Y29weTogc2V0IGJhY2sgYnVmZmVyIGZhaWxlZCIpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorICAgIGNvbnZlcnRlci5jb3B5VG9NZWRpYUltYWdlKCk7CisgICAgc2V0SW1hZ2VEYXRhKGNvbnZlcnRlci5pbWFnZURhdGEoKSk7CisgICAgbUJ1ZmZlclJlZiA9IGJ1ZmZlcjsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworLy8gRW5jcnlwdGVkTGluZWFyQmxvY2tCdWZmZXIKKworRW5jcnlwdGVkTGluZWFyQmxvY2tCdWZmZXI6OkVuY3J5cHRlZExpbmVhckJsb2NrQnVmZmVyKAorICAgICAgICBjb25zdCBzcDxBTWVzc2FnZT4gJmZvcm1hdCwKKyAgICAgICAgY29uc3Qgc3RkOjpzaGFyZWRfcHRyPEMyTGluZWFyQmxvY2s+ICZibG9jaywKKyAgICAgICAgY29uc3Qgc3A8SU1lbW9yeT4gJm1lbW9yeSwKKyAgICAgICAgaW50MzJfdCBoZWFwU2VxTnVtKQorICAgIDogQ29kZWMyQnVmZmVyKGZvcm1hdCwgbmV3IEFCdWZmZXIobWVtb3J5LT5wb2ludGVyKCksIG1lbW9yeS0+c2l6ZSgpKSksCisgICAgICBtQmxvY2soYmxvY2spLAorICAgICAgbU1lbW9yeShtZW1vcnkpLAorICAgICAgbUhlYXBTZXFOdW0oaGVhcFNlcU51bSkgeworfQorCitzdGQ6OnNoYXJlZF9wdHI8QzJCdWZmZXI+IEVuY3J5cHRlZExpbmVhckJsb2NrQnVmZmVyOjphc0MyQnVmZmVyKCkgeworICAgIHJldHVybiBDMkJ1ZmZlcjo6Q3JlYXRlTGluZWFyQnVmZmVyKG1CbG9jay0+c2hhcmUob2Zmc2V0KCksIHNpemUoKSwgQzJGZW5jZSgpKSk7Cit9CisKK3ZvaWQgRW5jcnlwdGVkTGluZWFyQmxvY2tCdWZmZXI6OmZpbGxTb3VyY2VCdWZmZXIoCisgICAgICAgIElDcnlwdG86OlNvdXJjZUJ1ZmZlciAqc291cmNlKSB7CisgICAgc291cmNlLT5tU2hhcmVkTWVtb3J5ID0gbU1lbW9yeTsKKyAgICBzb3VyY2UtPm1IZWFwU2VxTnVtID0gbUhlYXBTZXFOdW07Cit9CisKK3ZvaWQgRW5jcnlwdGVkTGluZWFyQmxvY2tCdWZmZXI6OmZpbGxTb3VyY2VCdWZmZXIoCisgICAgICAgIGhhcmR3YXJlOjpjYXM6Om5hdGl2ZTo6VjFfMDo6U2hhcmVkQnVmZmVyICpzb3VyY2UpIHsKKyAgICBzc2l6ZV90IG9mZnNldDsKKyAgICBzaXplX3Qgc2l6ZTsKKworICAgIG1IaWRsTWVtb3J5ID0gaGFyZHdhcmU6OmZyb21IZWFwKG1NZW1vcnktPmdldE1lbW9yeSgmb2Zmc2V0LCAmc2l6ZSkpOworICAgIHNvdXJjZS0+aGVhcEJhc2UgPSAqbUhpZGxNZW1vcnk7CisgICAgc291cmNlLT5vZmZzZXQgPSBvZmZzZXQ7CisgICAgc291cmNlLT5zaXplID0gc2l6ZTsKK30KKworYm9vbCBFbmNyeXB0ZWRMaW5lYXJCbG9ja0J1ZmZlcjo6Y29weURlY3J5cHRlZENvbnRlbnQoCisgICAgICAgIGNvbnN0IHNwPElNZW1vcnk+ICZkZWNyeXB0ZWQsIHNpemVfdCBsZW5ndGgpIHsKKyAgICBDMldyaXRlVmlldyB2aWV3ID0gbUJsb2NrLT5tYXAoKS5nZXQoKTsKKyAgICBpZiAodmlldy5lcnJvcigpICE9IEMyX09LKSB7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgICAgaWYgKHZpZXcuc2l6ZSgpIDwgbGVuZ3RoKSB7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgICAgbWVtY3B5KHZpZXcuZGF0YSgpLCBkZWNyeXB0ZWQtPnBvaW50ZXIoKSwgbGVuZ3RoKTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBFbmNyeXB0ZWRMaW5lYXJCbG9ja0J1ZmZlcjo6Y29weURlY3J5cHRlZENvbnRlbnRGcm9tTWVtb3J5KHNpemVfdCBsZW5ndGgpIHsKKyAgICByZXR1cm4gY29weURlY3J5cHRlZENvbnRlbnQobU1lbW9yeSwgbGVuZ3RoKTsKK30KKworbmF0aXZlX2hhbmRsZV90ICpFbmNyeXB0ZWRMaW5lYXJCbG9ja0J1ZmZlcjo6aGFuZGxlKCkgY29uc3QgeworICAgIHJldHVybiBjb25zdF9jYXN0PG5hdGl2ZV9oYW5kbGVfdCAqPihtQmxvY2stPmhhbmRsZSgpKTsKK30KKworfSAgLy8gbmFtZXNwYWNlIGFuZHJvaWQKZGlmZiAtLWdpdCBhL21lZGlhL2NvZGVjMi9zZnBsdWdpbi9Db2RlYzJCdWZmZXIuaCBiL21lZGlhL2NvZGVjMi9zZnBsdWdpbi9Db2RlYzJCdWZmZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40ODE5NzVmCi0tLSAvZGV2L251bGwKKysrIGIvbWVkaWEvY29kZWMyL3NmcGx1Z2luL0NvZGVjMkJ1ZmZlci5oCkBAIC0wLDAgKzEsNDAzIEBACisvKgorICogQ29weXJpZ2h0IDIwMTcsIFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KKworI2lmbmRlZiBDT0RFQzJfQlVGRkVSX0hfCisKKyNkZWZpbmUgQ09ERUMyX0JVRkZFUl9IXworCisjaW5jbHVkZSA8QzJCdWZmZXIuaD4KKworI2luY2x1ZGUgPGFuZHJvaWQvaGFyZHdhcmUvY2FzL25hdGl2ZS8xLjAvdHlwZXMuaD4KKyNpbmNsdWRlIDxiaW5kZXIvSU1lbW9yeS5oPgorI2luY2x1ZGUgPG1lZGlhL2hhcmR3YXJlL1ZpZGVvQVBJLmg+CisjaW5jbHVkZSA8bWVkaWEvTWVkaWFDb2RlY0J1ZmZlci5oPgorI2luY2x1ZGUgPG1lZGlhL0lDcnlwdG8uaD4KKworbmFtZXNwYWNlIGFuZHJvaWQgeworCisvKioKKyAqIENvcGllcyBhIGdyYXBoaWMgdmlldyBpbnRvIGEgbWVkaWEgaW1hZ2UuCisgKgorICogXHBhcmFtIGltZ0Jhc2UgYmFzZSBvZiBNZWRpYUltYWdlCisgKiBccGFyYW0gaW1nIE1lZGlhSW1hZ2UgZGF0YQorICogXHBhcmFtIHZpZXcgZ3JhcGhpYyB2aWV3CisgKgorICogXHJldHVybiBPSyBvbiBzdWNjZXNzCisgKi8KK3N0YXR1c190IEltYWdlQ29weSh1aW50OF90ICppbWdCYXNlLCBjb25zdCBNZWRpYUltYWdlMiAqaW1nLCBjb25zdCBDMkdyYXBoaWNWaWV3ICZ2aWV3KTsKKworLyoqCisgKiBDb3BpZXMgYSBtZWRpYSBpbWFnZSBpbnRvIGEgZ3JhcGhpYyB2aWV3LgorICoKKyAqIFxwYXJhbSB2aWV3IGdyYXBoaWMgdmlldworICogXHBhcmFtIGltZ0Jhc2UgYmFzZSBvZiBNZWRpYUltYWdlCisgKiBccGFyYW0gaW1nIE1lZGlhSW1hZ2UgZGF0YQorICoKKyAqIFxyZXR1cm4gT0sgb24gc3VjY2VzcworICovCitzdGF0dXNfdCBJbWFnZUNvcHkoQzJHcmFwaGljVmlldyAmdmlldywgY29uc3QgdWludDhfdCAqaW1nQmFzZSwgY29uc3QgTWVkaWFJbWFnZTIgKmltZyk7CisKK2NsYXNzIENvZGVjMkJ1ZmZlciA6IHB1YmxpYyBNZWRpYUNvZGVjQnVmZmVyIHsKK3B1YmxpYzoKKyAgICB1c2luZyBNZWRpYUNvZGVjQnVmZmVyOjpNZWRpYUNvZGVjQnVmZmVyOworICAgIH5Db2RlYzJCdWZmZXIoKSBvdmVycmlkZSA9IGRlZmF1bHQ7CisKKyAgICAvKioKKyAgICAgKiBccmV0dXJuICBDMkJ1ZmZlciBvYmplY3QgcmVwcmVzZW50cyB0aGlzIGJ1ZmZlci4KKyAgICAgKi8KKyAgICB2aXJ0dWFsIHN0ZDo6c2hhcmVkX3B0cjxDMkJ1ZmZlcj4gYXNDMkJ1ZmZlcigpID0gMDsKKworICAgIC8qKgorICAgICAqIFRlc3QgaWYgd2UgY2FuIGNvcHkgdGhlIGNvbnRlbnQgb2YgfGJ1ZmZlcnwgaW50byB0aGlzIG9iamVjdC4KKyAgICAgKgorICAgICAqIFxwYXJhbSAgIGJ1ZmZlciAgQzJCdWZmZXIgb2JqZWN0IHRvIGNvcHkuCisgICAgICogXHJldHVybiAgdHJ1ZSAgICBpZiB0aGUgY29udGVudCBvZiBidWZmZXIgY2FuIGJlIGNvcGllZCBvdmVyIHRvIHRoaXMgYnVmZmVyCisgICAgICogICAgICAgICAgZmFsc2UgICBvdGhlcndpc2UuCisgICAgICovCisgICAgdmlydHVhbCBib29sIGNhbkNvcHkoY29uc3Qgc3RkOjpzaGFyZWRfcHRyPEMyQnVmZmVyPiAmYnVmZmVyKSBjb25zdCB7CisgICAgICAgICh2b2lkKWJ1ZmZlcjsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIC8qKgorICAgICAqIENvcHkgdGhlIGNvbnRlbnQgb2YgfGJ1ZmZlcnwgaW50byB0aGlzIG9iamVjdC4gVGhpcyBtZXRob2QgYXNzdW1lcyB0aGF0CisgICAgICogY2FuQ29weSgpIGNoZWNrIGFscmVhZHkgcGFzc2VkLgorICAgICAqCisgICAgICogXHBhcmFtICAgYnVmZmVyICBDMkJ1ZmZlciBvYmplY3QgdG8gY29weS4KKyAgICAgKiBccmV0dXJuICB0cnVlICAgIGlmIHN1Y2Nlc3NmdWwKKyAgICAgKiAgICAgICAgICBmYWxzZSAgIG90aGVyd2lzZS4KKyAgICAgKi8KKyAgICB2aXJ0dWFsIGJvb2wgY29weShjb25zdCBzdGQ6OnNoYXJlZF9wdHI8QzJCdWZmZXI+ICZidWZmZXIpIHsKKyAgICAgICAgKHZvaWQpYnVmZmVyOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCitwcm90ZWN0ZWQ6CisgICAgLyoqCisgICAgICogY2FuQ29weSgpIGltcGxlbWVudGF0aW9uIGZvciBsaW5lYXIgYnVmZmVycy4KKyAgICAgKi8KKyAgICBib29sIGNhbkNvcHlMaW5lYXIoY29uc3Qgc3RkOjpzaGFyZWRfcHRyPEMyQnVmZmVyPiAmYnVmZmVyKSBjb25zdDsKKworICAgIC8qKgorICAgICAqIGNvcHkoKSBpbXBsZW1lbnRhdGlvbiBmb3IgbGluZWFyIGJ1ZmZlcnMuCisgICAgICovCisgICAgYm9vbCBjb3B5TGluZWFyKGNvbnN0IHN0ZDo6c2hhcmVkX3B0cjxDMkJ1ZmZlcj4gJmJ1ZmZlcik7CisKKyAgICAvKioKKyAgICAgKiBzZXRzIE1lZGlhSW1hZ2UgZGF0YSBmb3IgZmxleGlibGUgZ3JhcGhpYyBidWZmZXJzCisgICAgICovCisgICAgdm9pZCBzZXRJbWFnZURhdGEoY29uc3Qgc3A8QUJ1ZmZlcj4gJmltYWdlRGF0YSk7Cit9OworCisvKioKKyAqIE1lZGlhQ29kZWNCdWZmZXIgaW1wbGVtZW50YXRpb24gb24gdG9wIG9mIGxvY2FsIGxpbmVhciBidWZmZXIuIFRoaXMgY2Fubm90CisgKiBjcm9zcyBwcm9jZXNzIGJvdW5kYXJ5IHNvIGFzQzJCdWZmZXIoKSByZXR1cm5zIG9ubHkgbnVsbHB0ci4KKyAqLworY2xhc3MgTG9jYWxMaW5lYXJCdWZmZXIgOiBwdWJsaWMgQ29kZWMyQnVmZmVyIHsKK3B1YmxpYzoKKyAgICB1c2luZyBDb2RlYzJCdWZmZXI6OkNvZGVjMkJ1ZmZlcjsKKworICAgIHN0ZDo6c2hhcmVkX3B0cjxDMkJ1ZmZlcj4gYXNDMkJ1ZmZlcigpIG92ZXJyaWRlIHsgcmV0dXJuIG51bGxwdHI7IH0KKyAgICBib29sIGNhbkNvcHkoY29uc3Qgc3RkOjpzaGFyZWRfcHRyPEMyQnVmZmVyPiAmYnVmZmVyKSBjb25zdCBvdmVycmlkZTsKKyAgICBib29sIGNvcHkoY29uc3Qgc3RkOjpzaGFyZWRfcHRyPEMyQnVmZmVyPiAmYnVmZmVyKSBvdmVycmlkZTsKK307CisKKy8qKgorICogTWVkaWFDb2RlY0J1ZmZlciBpbXBsZW1lbnRhdGlvbiB0byBiZSB1c2VkIG9ubHkgYXMgYSBkdW1teSB3cmFwcGVyIGFyb3VuZCBhCisgKiBDMkJ1ZmZlciBvYmplY3QuCisgKi8KK2NsYXNzIER1bW15Q29udGFpbmVyQnVmZmVyIDogcHVibGljIENvZGVjMkJ1ZmZlciB7CitwdWJsaWM6CisgICAgRHVtbXlDb250YWluZXJCdWZmZXIoCisgICAgICAgICAgICBjb25zdCBzcDxBTWVzc2FnZT4gJmZvcm1hdCwKKyAgICAgICAgICAgIGNvbnN0IHN0ZDo6c2hhcmVkX3B0cjxDMkJ1ZmZlcj4gJmJ1ZmZlciA9IG51bGxwdHIpOworCisgICAgc3RkOjpzaGFyZWRfcHRyPEMyQnVmZmVyPiBhc0MyQnVmZmVyKCkgb3ZlcnJpZGU7CisgICAgYm9vbCBjYW5Db3B5KGNvbnN0IHN0ZDo6c2hhcmVkX3B0cjxDMkJ1ZmZlcj4gJmJ1ZmZlcikgY29uc3Qgb3ZlcnJpZGU7CisgICAgYm9vbCBjb3B5KGNvbnN0IHN0ZDo6c2hhcmVkX3B0cjxDMkJ1ZmZlcj4gJmJ1ZmZlcikgb3ZlcnJpZGU7CisKK3ByaXZhdGU6CisgICAgc3RkOjpzaGFyZWRfcHRyPEMyQnVmZmVyPiBtQnVmZmVyUmVmOworfTsKKworLyoqCisgKiBNZWRpYUNvZGVjQnVmZmVyIGltcGxlbWVudGF0aW9uIHdyYXBzIGFyb3VuZCBDMkxpbmVhckJsb2NrLgorICovCitjbGFzcyBMaW5lYXJCbG9ja0J1ZmZlciA6IHB1YmxpYyBDb2RlYzJCdWZmZXIgeworcHVibGljOgorICAgIC8qKgorICAgICAqIEFsbG9jYXRlIGEgbmV3IExpbmVhckJ1ZmZlckJsb2NrIHdyYXBwaW5nIGFyb3VuZCBDMkxpbmVhckJsb2NrIG9iamVjdC4KKyAgICAgKgorICAgICAqIFxwYXJhbSAgIGZvcm1hdCAgbWFuZGF0b3J5IGJ1ZmZlciBmb3JtYXQgZm9yIE1lZGlhQ29kZWNCdWZmZXIKKyAgICAgKiBccGFyYW0gICBibG9jayAgIEMyTGluZWFyQmxvY2sgb2JqZWN0IHRvIHdyYXAgYXJvdW5kLgorICAgICAqIFxyZXR1cm4gICAgICAgICAgTGluZWFyQmxvY2tCdWZmZXIgb2JqZWN0IHdpdGggd3JpdGFibGUgbWFwcGluZy4KKyAgICAgKiAgICAgICAgICAgICAgICAgIG51bGxwdHIgaWYgdW5zdWNjZXNzZnVsLgorICAgICAqLworICAgIHN0YXRpYyBzcDxMaW5lYXJCbG9ja0J1ZmZlcj4gQWxsb2NhdGUoCisgICAgICAgICAgICBjb25zdCBzcDxBTWVzc2FnZT4gJmZvcm1hdCwgY29uc3Qgc3RkOjpzaGFyZWRfcHRyPEMyTGluZWFyQmxvY2s+ICZibG9jayk7CisKKyAgICB2aXJ0dWFsIH5MaW5lYXJCbG9ja0J1ZmZlcigpID0gZGVmYXVsdDsKKworICAgIHN0ZDo6c2hhcmVkX3B0cjxDMkJ1ZmZlcj4gYXNDMkJ1ZmZlcigpIG92ZXJyaWRlOworICAgIGJvb2wgY2FuQ29weShjb25zdCBzdGQ6OnNoYXJlZF9wdHI8QzJCdWZmZXI+ICZidWZmZXIpIGNvbnN0IG92ZXJyaWRlOworICAgIGJvb2wgY29weShjb25zdCBzdGQ6OnNoYXJlZF9wdHI8QzJCdWZmZXI+ICZidWZmZXIpIG92ZXJyaWRlOworCitwcml2YXRlOgorICAgIExpbmVhckJsb2NrQnVmZmVyKAorICAgICAgICAgICAgY29uc3Qgc3A8QU1lc3NhZ2U+ICZmb3JtYXQsCisgICAgICAgICAgICBDMldyaXRlVmlldyAmJndyaXRlVmlldywKKyAgICAgICAgICAgIGNvbnN0IHN0ZDo6c2hhcmVkX3B0cjxDMkxpbmVhckJsb2NrPiAmYmxvY2spOworICAgIExpbmVhckJsb2NrQnVmZmVyKCkgPSBkZWxldGU7CisKKyAgICBDMldyaXRlVmlldyBtV3JpdGVWaWV3OworICAgIHN0ZDo6c2hhcmVkX3B0cjxDMkxpbmVhckJsb2NrPiBtQmxvY2s7Cit9OworCisvKioKKyAqIE1lZGlhQ29kZWNCdWZmZXIgaW1wbGVtZW50YXRpb24gd3JhcHMgYXJvdW5kIEMyQ29uc3RMaW5lYXJCbG9jay4KKyAqLworY2xhc3MgQ29uc3RMaW5lYXJCbG9ja0J1ZmZlciA6IHB1YmxpYyBDb2RlYzJCdWZmZXIgeworcHVibGljOgorICAgIC8qKgorICAgICAqIEFsbG9jYXRlIGEgbmV3IENvbnN0TGluZWFyQmxvY2tCdWZmZXIgd3JhcHBpbmcgYXJvdW5kIEMyQnVmZmVyIG9iamVjdC4KKyAgICAgKgorICAgICAqIFxwYXJhbSAgIGZvcm1hdCAgbWFuZGF0b3J5IGJ1ZmZlciBmb3JtYXQgZm9yIE1lZGlhQ29kZWNCdWZmZXIKKyAgICAgKiBccGFyYW0gICBidWZmZXIgIGxpbmVhciBDMkJ1ZmZlciBvYmplY3QgdG8gd3JhcCBhcm91bmQuCisgICAgICogXHJldHVybiAgICAgICAgICBDb25zdExpbmVhckJsb2NrQnVmZmVyIG9iamVjdCB3aXRoIHJlYWRhYmxlIG1hcHBpbmcuCisgICAgICogICAgICAgICAgICAgICAgICBudWxscHRyIGlmIHVuc3VjY2Vzc2Z1bC4KKyAgICAgKi8KKyAgICBzdGF0aWMgc3A8Q29uc3RMaW5lYXJCbG9ja0J1ZmZlcj4gQWxsb2NhdGUoCisgICAgICAgICAgICBjb25zdCBzcDxBTWVzc2FnZT4gJmZvcm1hdCwgY29uc3Qgc3RkOjpzaGFyZWRfcHRyPEMyQnVmZmVyPiAmYnVmZmVyKTsKKworICAgIHZpcnR1YWwgfkNvbnN0TGluZWFyQmxvY2tCdWZmZXIoKSA9IGRlZmF1bHQ7CisKKyAgICBzdGQ6OnNoYXJlZF9wdHI8QzJCdWZmZXI+IGFzQzJCdWZmZXIoKSBvdmVycmlkZTsKKworcHJpdmF0ZToKKyAgICBDb25zdExpbmVhckJsb2NrQnVmZmVyKAorICAgICAgICAgICAgY29uc3Qgc3A8QU1lc3NhZ2U+ICZmb3JtYXQsCisgICAgICAgICAgICBDMlJlYWRWaWV3ICYmcmVhZFZpZXcsCisgICAgICAgICAgICBjb25zdCBzdGQ6OnNoYXJlZF9wdHI8QzJCdWZmZXI+ICZidWZmZXIpOworICAgIENvbnN0TGluZWFyQmxvY2tCdWZmZXIoKSA9IGRlbGV0ZTsKKworICAgIEMyUmVhZFZpZXcgbVJlYWRWaWV3OworICAgIHN0ZDo6c2hhcmVkX3B0cjxDMkJ1ZmZlcj4gbUJ1ZmZlclJlZjsKK307CisKKy8qKgorICogTWVkaWFDb2RlY0J1ZmZlciBpbXBsZW1lbnRhdGlvbiB3cmFwcyBhcm91bmQgQzJHcmFwaGljQmxvY2suCisgKgorICogVGhpcyBvYmplY3QgZXhwb3NlcyB0aGUgdW5kZXJseWluZyBiaXRzIHZpYSBhY2Nlc3NvciBBUElzIGFuZCAiaW1hZ2UtZGF0YSIKKyAqIG1ldGFkYXRhLCBjcmVhdGVkIGF1dG9tYXRpY2FsbHkgYXQgYWxsb2NhdGlvbiB0aW1lLgorICovCitjbGFzcyBHcmFwaGljQmxvY2tCdWZmZXIgOiBwdWJsaWMgQ29kZWMyQnVmZmVyIHsKK3B1YmxpYzoKKyAgICAvKioKKyAgICAgKiBBbGxvY2F0ZSBhIG5ldyBHcmFwaGljQmxvY2tCdWZmZXIgd3JhcHBpbmcgYXJvdW5kIEMyR3JhcGhpY0Jsb2NrIG9iamVjdC4KKyAgICAgKiBJZiB8YmxvY2t8IGlzIG5vdCBpbiBnb29kIGNvbG9yIGZvcm1hdHMsIGl0IGFsbG9jYXRlcyBZVjEyIGxvY2FsIGJ1ZmZlcgorICAgICAqIGFuZCBjb3BpZXMgdGhlIGNvbnRlbnQgb3ZlciBhdCBhc0MyQnVmZmVyKCkuCisgICAgICoKKyAgICAgKiBccGFyYW0gICBmb3JtYXQgIG1hbmRhdG9yeSBidWZmZXIgZm9ybWF0IGZvciBNZWRpYUNvZGVjQnVmZmVyCisgICAgICogXHBhcmFtICAgYmxvY2sgICBDMkdyYXBoaWNCbG9jayBvYmplY3QgdG8gd3JhcCBhcm91bmQuCisgICAgICogXHBhcmFtICAgYWxsb2MgICBhIGZ1bmN0aW9uIHRvIGFsbG9jYXRlIGJhY2tpbmcgQUJ1ZmZlciBpZiBuZWVkZWQuCisgICAgICogXHJldHVybiAgICAgICAgICBHcmFwaGljQmxvY2tCdWZmZXIgb2JqZWN0IHdpdGggd3JpdGFibGUgbWFwcGluZy4KKyAgICAgKiAgICAgICAgICAgICAgICAgIG51bGxwdHIgaWYgdW5zdWNjZXNzZnVsLgorICAgICAqLworICAgIHN0YXRpYyBzcDxHcmFwaGljQmxvY2tCdWZmZXI+IEFsbG9jYXRlKAorICAgICAgICAgICAgY29uc3Qgc3A8QU1lc3NhZ2U+ICZmb3JtYXQsCisgICAgICAgICAgICBjb25zdCBzdGQ6OnNoYXJlZF9wdHI8QzJHcmFwaGljQmxvY2s+ICZibG9jaywKKyAgICAgICAgICAgIHN0ZDo6ZnVuY3Rpb248c3A8QUJ1ZmZlcj4oc2l6ZV90KT4gYWxsb2MpOworCisgICAgc3RkOjpzaGFyZWRfcHRyPEMyQnVmZmVyPiBhc0MyQnVmZmVyKCkgb3ZlcnJpZGU7CisKKyAgICB2aXJ0dWFsIH5HcmFwaGljQmxvY2tCdWZmZXIoKSA9IGRlZmF1bHQ7CisKK3ByaXZhdGU6CisgICAgR3JhcGhpY0Jsb2NrQnVmZmVyKAorICAgICAgICAgICAgY29uc3Qgc3A8QU1lc3NhZ2U+ICZmb3JtYXQsCisgICAgICAgICAgICBjb25zdCBzcDxBQnVmZmVyPiAmYnVmZmVyLAorICAgICAgICAgICAgQzJHcmFwaGljVmlldyAmJnZpZXcsCisgICAgICAgICAgICBjb25zdCBzdGQ6OnNoYXJlZF9wdHI8QzJHcmFwaGljQmxvY2s+ICZibG9jaywKKyAgICAgICAgICAgIGNvbnN0IHNwPEFCdWZmZXI+ICZpbWFnZURhdGEsCisgICAgICAgICAgICBib29sIHdyYXBwZWQpOworICAgIEdyYXBoaWNCbG9ja0J1ZmZlcigpID0gZGVsZXRlOworCisgICAgaW5saW5lIE1lZGlhSW1hZ2UyICppbWFnZURhdGEoKSB7IHJldHVybiAoTWVkaWFJbWFnZTIgKiltSW1hZ2VEYXRhLT5kYXRhKCk7IH0KKworICAgIEMyR3JhcGhpY1ZpZXcgbVZpZXc7CisgICAgc3RkOjpzaGFyZWRfcHRyPEMyR3JhcGhpY0Jsb2NrPiBtQmxvY2s7CisgICAgc3A8QUJ1ZmZlcj4gbUltYWdlRGF0YTsKKyAgICBjb25zdCBib29sIG1XcmFwcGVkOworfTsKKworLyoqCisgKiBNZWRpYUNvZGVjQnVmZmVyIGltcGxlbWVudGF0aW9uIHdyYXBzIGFyb3VuZCBWaWRlb05hdGl2ZU1ldGFkYXRhLgorICovCitjbGFzcyBHcmFwaGljTWV0YWRhdGFCdWZmZXIgOiBwdWJsaWMgQ29kZWMyQnVmZmVyIHsKK3B1YmxpYzoKKyAgICAvKioKKyAgICAgKiBDb25zdHJ1Y3QgYSBuZXcgR3JhcGhpY01ldGFkYXRhQnVmZmVyIHdpdGggbG9jYWwgbGluZWFyIGJ1ZmZlciBmb3IKKyAgICAgKiBWaWRlb05hdGl2ZU1ldGFkYXRhLgorICAgICAqCisgICAgICogXHBhcmFtICAgZm9ybWF0ICAgICAgbWFuZGF0b3J5IGJ1ZmZlciBmb3JtYXQgZm9yIE1lZGlhQ29kZWNCdWZmZXIKKyAgICAgKi8KKyAgICBHcmFwaGljTWV0YWRhdGFCdWZmZXIoCisgICAgICAgICAgICBjb25zdCBzcDxBTWVzc2FnZT4gJmZvcm1hdCwgY29uc3Qgc3RkOjpzaGFyZWRfcHRyPEMyQWxsb2NhdG9yPiAmYWxsb2MpOworCisgICAgc3RkOjpzaGFyZWRfcHRyPEMyQnVmZmVyPiBhc0MyQnVmZmVyKCkgb3ZlcnJpZGU7CisKKyAgICB2aXJ0dWFsIH5HcmFwaGljTWV0YWRhdGFCdWZmZXIoKSA9IGRlZmF1bHQ7CisKK3ByaXZhdGU6CisgICAgR3JhcGhpY01ldGFkYXRhQnVmZmVyKCkgPSBkZWxldGU7CisKKyAgICBzdGQ6OnNoYXJlZF9wdHI8QzJBbGxvY2F0b3I+IG1BbGxvYzsKK307CisKKy8qKgorICogTWVkaWFDb2RlY0J1ZmZlciBpbXBsZW1lbnRhdGlvbiB3cmFwcyBhcm91bmQgZ3JhcGhpYyBDMkJ1ZmZlciBvYmplY3QuCisgKgorICogVGhpcyBvYmplY3QgZXhwb3NlcyB0aGUgdW5kZXJseWluZyBiaXRzIHZpYSBhY2Nlc3NvciBBUElzIGFuZCAiaW1hZ2UtZGF0YSIKKyAqIG1ldGFkYXRhLCBjcmVhdGVkIGF1dG9tYXRpY2FsbHkgYXQgYWxsb2NhdGlvbiB0aW1lLgorICovCitjbGFzcyBDb25zdEdyYXBoaWNCbG9ja0J1ZmZlciA6IHB1YmxpYyBDb2RlYzJCdWZmZXIgeworcHVibGljOgorICAgIC8qKgorICAgICAqIEFsbG9jYXRlIGEgbmV3IENvbnN0R3JhcGhpY0Jsb2NrQnVmZmVyIHdyYXBwaW5nIGFyb3VuZCBDMkJ1ZmZlciBvYmplY3QuCisgICAgICogSWYgfGJ1ZmZlcnwgaXMgbm90IGluIGdvb2QgY29sb3IgZm9ybWF0cywgaXQgYWxsb2NhdGVzIFlWMTIgbG9jYWwgYnVmZmVyCisgICAgICogYW5kIGNvcGllcyB0aGUgY29udGVudCBvZiB8YnVmZmVyfCBvdmVyIHRvIGV4cG9zZS4KKyAgICAgKgorICAgICAqIFxwYXJhbSAgIGZvcm1hdCAgbWFuZGF0b3J5IGJ1ZmZlciBmb3JtYXQgZm9yIE1lZGlhQ29kZWNCdWZmZXIKKyAgICAgKiBccGFyYW0gICBidWZmZXIgIGdyYXBoaWMgQzJCdWZmZXIgb2JqZWN0IHRvIHdyYXAgYXJvdW5kLgorICAgICAqIFxwYXJhbSAgIGFsbG9jICAgYSBmdW5jdGlvbiB0byBhbGxvY2F0ZSBiYWNraW5nIEFCdWZmZXIgaWYgbmVlZGVkLgorICAgICAqIFxyZXR1cm4gICAgICAgICAgQ29uc3RHcmFwaGljQmxvY2tCdWZmZXIgb2JqZWN0IHdpdGggcmVhZGFibGUgbWFwcGluZy4KKyAgICAgKiAgICAgICAgICAgICAgICAgIG51bGxwdHIgaWYgdW5zdWNjZXNzZnVsLgorICAgICAqLworICAgIHN0YXRpYyBzcDxDb25zdEdyYXBoaWNCbG9ja0J1ZmZlcj4gQWxsb2NhdGUoCisgICAgICAgICAgICBjb25zdCBzcDxBTWVzc2FnZT4gJmZvcm1hdCwKKyAgICAgICAgICAgIGNvbnN0IHN0ZDo6c2hhcmVkX3B0cjxDMkJ1ZmZlcj4gJmJ1ZmZlciwKKyAgICAgICAgICAgIHN0ZDo6ZnVuY3Rpb248c3A8QUJ1ZmZlcj4oc2l6ZV90KT4gYWxsb2MpOworCisgICAgLyoqCisgICAgICogQWxsb2NhdGUgYSBuZXcgQ29uc3RHcmFwaGljQmxvY2tCdWZmZXIgd2hpY2ggYWxsb2NhdGVzIFlWMTIgbG9jYWwgYnVmZmVyCisgICAgICogYW5kIGNvcGllcyB0aGUgY29udGVudCBvZiB8YnVmZmVyfCBvdmVyIHRvIGV4cG9zZS4KKyAgICAgKgorICAgICAqIFxwYXJhbSAgIGZvcm1hdCAgbWFuZGF0b3J5IGJ1ZmZlciBmb3JtYXQgZm9yIE1lZGlhQ29kZWNCdWZmZXIKKyAgICAgKiBccGFyYW0gICBhbGxvYyAgIGEgZnVuY3Rpb24gdG8gYWxsb2NhdGUgYmFja2luZyBBQnVmZmVyIGlmIG5lZWRlZC4KKyAgICAgKiBccmV0dXJuICAgICAgICAgIENvbnN0R3JhcGhpY0Jsb2NrQnVmZmVyIG9iamVjdCB3aXRoIG5vIHdyYXBwaW5nIGJ1ZmZlci4KKyAgICAgKi8KKyAgICBzdGF0aWMgc3A8Q29uc3RHcmFwaGljQmxvY2tCdWZmZXI+IEFsbG9jYXRlRW1wdHkoCisgICAgICAgICAgICBjb25zdCBzcDxBTWVzc2FnZT4gJmZvcm1hdCwKKyAgICAgICAgICAgIHN0ZDo6ZnVuY3Rpb248c3A8QUJ1ZmZlcj4oc2l6ZV90KT4gYWxsb2MpOworCisgICAgc3RkOjpzaGFyZWRfcHRyPEMyQnVmZmVyPiBhc0MyQnVmZmVyKCkgb3ZlcnJpZGU7CisgICAgYm9vbCBjYW5Db3B5KGNvbnN0IHN0ZDo6c2hhcmVkX3B0cjxDMkJ1ZmZlcj4gJmJ1ZmZlcikgY29uc3Qgb3ZlcnJpZGU7CisgICAgYm9vbCBjb3B5KGNvbnN0IHN0ZDo6c2hhcmVkX3B0cjxDMkJ1ZmZlcj4gJmJ1ZmZlcikgb3ZlcnJpZGU7CisKKyAgICB2aXJ0dWFsIH5Db25zdEdyYXBoaWNCbG9ja0J1ZmZlcigpID0gZGVmYXVsdDsKKworcHJpdmF0ZToKKyAgICBDb25zdEdyYXBoaWNCbG9ja0J1ZmZlcigKKyAgICAgICAgICAgIGNvbnN0IHNwPEFNZXNzYWdlPiAmZm9ybWF0LAorICAgICAgICAgICAgY29uc3Qgc3A8QUJ1ZmZlcj4gJmFCdWZmZXIsCisgICAgICAgICAgICBzdGQ6OnVuaXF1ZV9wdHI8Y29uc3QgQzJHcmFwaGljVmlldz4gJiZ2aWV3LAorICAgICAgICAgICAgY29uc3Qgc3RkOjpzaGFyZWRfcHRyPEMyQnVmZmVyPiAmYnVmZmVyLAorICAgICAgICAgICAgY29uc3Qgc3A8QUJ1ZmZlcj4gJmltYWdlRGF0YSwKKyAgICAgICAgICAgIGJvb2wgd3JhcHBlZCk7CisgICAgQ29uc3RHcmFwaGljQmxvY2tCdWZmZXIoKSA9IGRlbGV0ZTsKKworICAgIHNwPEFCdWZmZXI+IG1JbWFnZURhdGE7CisgICAgc3RkOjp1bmlxdWVfcHRyPGNvbnN0IEMyR3JhcGhpY1ZpZXc+IG1WaWV3OworICAgIHN0ZDo6c2hhcmVkX3B0cjxDMkJ1ZmZlcj4gbUJ1ZmZlclJlZjsKKyAgICBjb25zdCBib29sIG1XcmFwcGVkOworfTsKKworLyoqCisgKiBNZWRpYUNvZGVjQnVmZmVyIGltcGxlbWVudGF0aW9uIHdyYXBzIGFyb3VuZCBDMkxpbmVhckJsb2NrIGZvciBjb21wb25lbnQKKyAqIGFuZCBJTWVtb3J5IGZvciBjbGllbnQuIFVuZGVybHlpbmcgQzJMaW5lYXJCbG9jayB3b24ndCBiZSBtYXBwZWQgZm9yIHNlY3VyZQorICogdXNlY2FzZXMuLgorICovCitjbGFzcyBFbmNyeXB0ZWRMaW5lYXJCbG9ja0J1ZmZlciA6IHB1YmxpYyBDb2RlYzJCdWZmZXIgeworcHVibGljOgorICAgIC8qKgorICAgICAqIENvbnN0cnVjdCBhIG5ldyBFbmNyeXB0ZWRMaW5lYXJCdWZmZXJCbG9jayB3cmFwcGluZyBhcm91bmQgQzJMaW5lYXJCbG9jaworICAgICAqIG9iamVjdCBhbmQgd3JpdGFibGUgSU1lbW9yeSByZWdpb24uCisgICAgICoKKyAgICAgKiBccGFyYW0gICBmb3JtYXQgICAgICBtYW5kYXRvcnkgYnVmZmVyIGZvcm1hdCBmb3IgTWVkaWFDb2RlY0J1ZmZlcgorICAgICAqIFxwYXJhbSAgIGJsb2NrICAgICAgIEMyTGluZWFyQmxvY2sgb2JqZWN0IHRvIHdyYXAgYXJvdW5kLgorICAgICAqIFxwYXJhbSAgIG1lbW9yeSAgICAgIElNZW1vcnkgb2JqZWN0IHRvIHN0b3JlIGVuY3J5cHRlZCBjb250ZW50LgorICAgICAqIFxwYXJhbSAgIGhlYXBTZXFOdW0gIEhlYXAgc2VxdWVuY2UgbnVtYmVyIGZyb20gSUNyeXB0bzsgLTEgaWYgTi9BCisgICAgICovCisgICAgRW5jcnlwdGVkTGluZWFyQmxvY2tCdWZmZXIoCisgICAgICAgICAgICBjb25zdCBzcDxBTWVzc2FnZT4gJmZvcm1hdCwKKyAgICAgICAgICAgIGNvbnN0IHN0ZDo6c2hhcmVkX3B0cjxDMkxpbmVhckJsb2NrPiAmYmxvY2ssCisgICAgICAgICAgICBjb25zdCBzcDxJTWVtb3J5PiAmbWVtb3J5LAorICAgICAgICAgICAgaW50MzJfdCBoZWFwU2VxTnVtID0gLTEpOworICAgIEVuY3J5cHRlZExpbmVhckJsb2NrQnVmZmVyKCkgPSBkZWxldGU7CisKKyAgICB2aXJ0dWFsIH5FbmNyeXB0ZWRMaW5lYXJCbG9ja0J1ZmZlcigpID0gZGVmYXVsdDsKKworICAgIHN0ZDo6c2hhcmVkX3B0cjxDMkJ1ZmZlcj4gYXNDMkJ1ZmZlcigpIG92ZXJyaWRlOworCisgICAgLyoqCisgICAgICogRmlsbCB0aGUgc291cmNlIGJ1ZmZlciBzdHJ1Y3R1cmUgd2l0aCBhcHByb3ByaWF0ZSB2YWx1ZSBiYXNlZCBvbgorICAgICAqIGludGVybmFsIElNZW1vcnkgb2JqZWN0LgorICAgICAqCisgICAgICogXHBhcmFtIHNvdXJjZSAgc291cmNlIGJ1ZmZlciBzdHJ1Y3R1cmUgdG8gZmlsbC4KKyAgICAgKi8KKyAgICB2b2lkIGZpbGxTb3VyY2VCdWZmZXIoSUNyeXB0bzo6U291cmNlQnVmZmVyICpzb3VyY2UpOworICAgIHZvaWQgZmlsbFNvdXJjZUJ1ZmZlcigKKyAgICAgICAgICAgIGhhcmR3YXJlOjpjYXM6Om5hdGl2ZTo6VjFfMDo6U2hhcmVkQnVmZmVyICpzb3VyY2UpOworCisgICAgLyoqCisgICAgICogQ29weSB0aGUgY29udGVudCBvZiB8ZGVjcnlwdGVkfCBpbnRvIEMyTGluZWFyQmxvY2sgaW5zaWRlLiBUaGlzIHNoYWxsCisgICAgICogb25seSBiZSBjYWxsZWQgaW4gbm9uLXNlY3VyZSB1c2VjYXNlcy4KKyAgICAgKgorICAgICAqIFxwYXJhbSAgIGRlY3J5cHRlZCAgIGRlY3J5cHRlZCBjb250ZW50IHRvIGNvcHkgZnJvbS4KKyAgICAgKiBccGFyYW0gICBsZW5ndGggICAgICBsZW5ndGggb2YgdGhlIGNvbnRlbnQKKyAgICAgKiBccmV0dXJuICB0cnVlICAgICAgICBpZiBzdWNjZXNzZnVsCisgICAgICogICAgICAgICAgZmFsc2UgICAgICAgb3RoZXJ3aXNlLgorICAgICAqLworICAgIGJvb2wgY29weURlY3J5cHRlZENvbnRlbnQoY29uc3Qgc3A8SU1lbW9yeT4gJmRlY3J5cHRlZCwgc2l6ZV90IGxlbmd0aCk7CisKKyAgICAvKioKKyAgICAgKiBDb3B5IHRoZSBjb250ZW50IG9mIGludGVybmFsIElNZW1vcnkgb2JqZWN0IGludG8gQzJMaW5lYXJCbG9jayBpbnNpZGUuCisgICAgICogVGhpcyBzaGFsbCBvbmx5IGJlIGNhbGxlZCBpbiBub24tc2VjdXJlIHVzZWNhc2VzLgorICAgICAqCisgICAgICogXHBhcmFtICAgbGVuZ3RoICAgICAgbGVuZ3RoIG9mIHRoZSBjb250ZW50CisgICAgICogXHJldHVybiAgdHJ1ZSAgICAgICAgaWYgc3VjY2Vzc2Z1bAorICAgICAqICAgICAgICAgIGZhbHNlICAgICAgIG90aGVyd2lzZS4KKyAgICAgKi8KKyAgICBib29sIGNvcHlEZWNyeXB0ZWRDb250ZW50RnJvbU1lbW9yeShzaXplX3QgbGVuZ3RoKTsKKworICAgIC8qKgorICAgICAqIFJldHVybiBuYXRpdmUgaGFuZGxlIG9mIHNlY3VyZSBidWZmZXIgdW5kZXJzdG9vZCBieSBJQ3J5cHRvLgorICAgICAqCisgICAgICogXHJldHVybiBzZWN1cmUgYnVmZmVyIGhhbmRsZQorICAgICAqLworICAgIG5hdGl2ZV9oYW5kbGVfdCAqaGFuZGxlKCkgY29uc3Q7CisKK3ByaXZhdGU6CisKKyAgICBzdGQ6OnNoYXJlZF9wdHI8QzJMaW5lYXJCbG9jaz4gbUJsb2NrOworICAgIHNwPElNZW1vcnk+IG1NZW1vcnk7CisgICAgc3A8aGFyZHdhcmU6OkhpZGxNZW1vcnk+IG1IaWRsTWVtb3J5OworICAgIGludDMyX3QgbUhlYXBTZXFOdW07Cit9OworCit9ICAvLyBuYW1lc3BhY2UgYW5kcm9pZAorCisjZW5kaWYgIC8vIENPREVDMl9CVUZGRVJfSF8KZGlmZiAtLWdpdCBhL21lZGlhL2NvZGVjMi9zZnBsdWdpbi9Db2RlYzJJbmZvQnVpbGRlci5jcHAgYi9tZWRpYS9jb2RlYzIvc2ZwbHVnaW4vQ29kZWMySW5mb0J1aWxkZXIuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYzNjAyN2UKLS0tIC9kZXYvbnVsbAorKysgYi9tZWRpYS9jb2RlYzIvc2ZwbHVnaW4vQ29kZWMySW5mb0J1aWxkZXIuY3BwCkBAIC0wLDAgKzEsNTkwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE4IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KKworLy8jZGVmaW5lIExPR19OREVCVUcgMAorI2RlZmluZSBMT0dfVEFHICJDb2RlYzJJbmZvQnVpbGRlciIKKyNpbmNsdWRlIDxsb2cvbG9nLmg+CisKKyNpbmNsdWRlIDxzdHJpbmdzLmg+CisKKyNpbmNsdWRlIDxDMkNvbXBvbmVudC5oPgorI2luY2x1ZGUgPEMyQ29uZmlnLmg+CisjaW5jbHVkZSA8QzJEZWJ1Zy5oPgorI2luY2x1ZGUgPEMyUGxhdGZvcm1TdXBwb3J0Lmg+CisjaW5jbHVkZSA8Q29kZWMyTWFwcGVyLmg+CisKKyNpbmNsdWRlIDxPTVhfQXVkaW8uaD4KKyNpbmNsdWRlIDxPTVhfQXVkaW9FeHQuaD4KKyNpbmNsdWRlIDxPTVhfSW5kZXhFeHQuaD4KKyNpbmNsdWRlIDxPTVhfVHlwZXMuaD4KKyNpbmNsdWRlIDxPTVhfVmlkZW8uaD4KKyNpbmNsdWRlIDxPTVhfVmlkZW9FeHQuaD4KKyNpbmNsdWRlIDxPTVhfQXNTdHJpbmcuaD4KKworI2luY2x1ZGUgPGFuZHJvaWQvaGFyZHdhcmUvbWVkaWEvb214LzEuMC9JT214Lmg+CisjaW5jbHVkZSA8YW5kcm9pZC9oYXJkd2FyZS9tZWRpYS9vbXgvMS4wL0lPbXhPYnNlcnZlci5oPgorI2luY2x1ZGUgPGFuZHJvaWQvaGFyZHdhcmUvbWVkaWEvb214LzEuMC9JT214Tm9kZS5oPgorI2luY2x1ZGUgPGFuZHJvaWQvaGFyZHdhcmUvbWVkaWEvb214LzEuMC90eXBlcy5oPgorCisjaW5jbHVkZSA8YW5kcm9pZC1iYXNlL3Byb3BlcnRpZXMuaD4KKyNpbmNsdWRlIDxjb2RlYzIvaGlkbC9jbGllbnQuaD4KKyNpbmNsdWRlIDxjdXRpbHMvbmF0aXZlX2hhbmRsZS5oPgorI2luY2x1ZGUgPG1lZGlhL29teC8xLjAvV09teE5vZGUuaD4KKyNpbmNsdWRlIDxtZWRpYS9zdGFnZWZyaWdodC9NZWRpYUNvZGVjQ29uc3RhbnRzLmg+CisjaW5jbHVkZSA8bWVkaWEvc3RhZ2VmcmlnaHQvZm91bmRhdGlvbi9NZWRpYURlZnMuaD4KKyNpbmNsdWRlIDxtZWRpYS9zdGFnZWZyaWdodC9vbXgvT01YVXRpbHMuaD4KKyNpbmNsdWRlIDxtZWRpYS9zdGFnZWZyaWdodC94bWxwYXJzZXIvTWVkaWFDb2RlY3NYbWxQYXJzZXIuaD4KKworI2luY2x1ZGUgIkNvZGVjMkluZm9CdWlsZGVyLmgiCisKK25hbWVzcGFjZSBhbmRyb2lkIHsKKwordXNpbmcgVHJhaXRzID0gQzJDb21wb25lbnQ6OlRyYWl0czsKKworbmFtZXNwYWNlIC8qIHVubmFtZWQgKi8geworCitib29sIGhhc1ByZWZpeChjb25zdCBzdGQ6OnN0cmluZyYgcywgY29uc3QgY2hhciogcHJlZml4KSB7CisgICAgc2l6ZV90IHByZWZpeExlbiA9IHN0cmxlbihwcmVmaXgpOworICAgIHJldHVybiBzLmNvbXBhcmUoMCwgcHJlZml4TGVuLCBwcmVmaXgpID09IDA7Cit9CisKK2Jvb2wgaGFzU3VmZml4KGNvbnN0IHN0ZDo6c3RyaW5nJiBzLCBjb25zdCBjaGFyKiBzdWZmaXgpIHsKKyAgICBzaXplX3Qgc3VmZml4TGVuID0gc3RybGVuKHN1ZmZpeCk7CisgICAgcmV0dXJuIHN1ZmZpeExlbiA+IHMuc2l6ZSgpID8gZmFsc2UgOgorICAgICAgICAgICAgcy5jb21wYXJlKHMuc2l6ZSgpIC0gc3VmZml4TGVuLCBzdWZmaXhMZW4sIHN1ZmZpeCkgPT0gMDsKK30KKworLy8gQ29uc3RhbnRzIGZyb20gQUNvZGVjCitjb25zdGV4cHIgT01YX1UzMiBrUG9ydEluZGV4SW5wdXQgPSAwOworY29uc3RleHByIE9NWF9VMzIga1BvcnRJbmRleE91dHB1dCA9IDE7Citjb25zdGV4cHIgT01YX1UzMiBrTWF4SW5kaWNlc1RvQ2hlY2sgPSAzMjsKKworc3RhdHVzX3QgcXVlcnlPbXhDYXBhYmlsaXRpZXMoCisgICAgICAgIGNvbnN0IGNoYXIqIG5hbWUsIGNvbnN0IGNoYXIqIG1pbWUsIGJvb2wgaXNFbmNvZGVyLAorICAgICAgICBNZWRpYUNvZGVjSW5mbzo6Q2FwYWJpbGl0aWVzV3JpdGVyKiBjYXBzKSB7CisKKyAgICBjb25zdCBjaGFyICpyb2xlID0gR2V0Q29tcG9uZW50Um9sZShpc0VuY29kZXIsIG1pbWUpOworICAgIGlmIChyb2xlID09IG51bGxwdHIpIHsKKyAgICAgICAgcmV0dXJuIEJBRF9WQUxVRTsKKyAgICB9CisKKyAgICB1c2luZyBuYW1lc3BhY2UgOjphbmRyb2lkOjpoYXJkd2FyZTo6bWVkaWE6Om9teDo6VjFfMDsKKyAgICB1c2luZyA6OmFuZHJvaWQ6OmhhcmR3YXJlOjpSZXR1cm47CisgICAgdXNpbmcgOjphbmRyb2lkOjpoYXJkd2FyZTo6Vm9pZDsKKyAgICB1c2luZyA6OmFuZHJvaWQ6OmhhcmR3YXJlOjpoaWRsX3ZlYzsKKyAgICB1c2luZyA6OmFuZHJvaWQ6OmhhcmR3YXJlOjptZWRpYTo6b214OjpWMV8wOjp1dGlsczo6TFdPbXhOb2RlOworCisgICAgc3A8SU9teD4gb214ID0gSU9teDo6Z2V0U2VydmljZSgpOworICAgIGlmICghb214KSB7CisgICAgICAgIEFMT0dXKCJDb3VsZCBub3Qgb2J0YWluIElPbXggc2VydmljZS4iKTsKKyAgICAgICAgcmV0dXJuIE5PX0lOSVQ7CisgICAgfQorCisgICAgc3RydWN0IE9ic2VydmVyIDogSU9teE9ic2VydmVyIHsKKyAgICAgICAgdmlydHVhbCBSZXR1cm48dm9pZD4gb25NZXNzYWdlcyhjb25zdCBoaWRsX3ZlYzxNZXNzYWdlPiYpIG92ZXJyaWRlIHsKKyAgICAgICAgICAgIHJldHVybiBWb2lkKCk7CisgICAgICAgIH0KKyAgICB9OworCisgICAgc3A8T2JzZXJ2ZXI+IG9ic2VydmVyID0gbmV3IE9ic2VydmVyKCk7CisgICAgU3RhdHVzIHN0YXR1czsKKyAgICBzcDxJT214Tm9kZT4gdE9teE5vZGU7CisgICAgUmV0dXJuPHZvaWQ+IHRyYW5zU3RhdHVzID0gb214LT5hbGxvY2F0ZU5vZGUoCisgICAgICAgICAgICBuYW1lLCBvYnNlcnZlciwKKyAgICAgICAgICAgIFsmc3RhdHVzLCAmdE9teE5vZGVdKFN0YXR1cyBzLCBjb25zdCBzcDxJT214Tm9kZT4mIG4pIHsKKyAgICAgICAgICAgICAgICBzdGF0dXMgPSBzOworICAgICAgICAgICAgICAgIHRPbXhOb2RlID0gbjsKKyAgICAgICAgICAgIH0pOworICAgIGlmICghdHJhbnNTdGF0dXMuaXNPaygpKSB7CisgICAgICAgIEFMT0dXKCJJT214OjphbGxvY2F0ZU5vZGUgLS0gdHJhbnNhY3Rpb24gZmFpbGVkLiIpOworICAgICAgICByZXR1cm4gTk9fSU5JVDsKKyAgICB9CisgICAgaWYgKHN0YXR1cyAhPSBTdGF0dXM6Ok9LKSB7CisgICAgICAgIEFMT0dXKCJJT214OjphbGxvY2F0ZU5vZGUgLS0gZXJyb3IgcmV0dXJuZWQ6ICVkLiIsCisgICAgICAgICAgICAgICAgc3RhdGljX2Nhc3Q8aW50PihzdGF0dXMpKTsKKyAgICAgICAgcmV0dXJuIE5PX0lOSVQ7CisgICAgfQorCisgICAgc3A8TFdPbXhOb2RlPiBvbXhOb2RlID0gbmV3IExXT214Tm9kZSh0T214Tm9kZSk7CisKKyAgICBzdGF0dXNfdCBlcnIgPSBTZXRDb21wb25lbnRSb2xlKG9teE5vZGUsIHJvbGUpOworICAgIGlmIChlcnIgIT0gT0spIHsKKyAgICAgICAgb214Tm9kZS0+ZnJlZU5vZGUoKTsKKyAgICAgICAgQUxPR1coIkZhaWxlZCB0byBTZXRDb21wb25lbnRSb2xlOiBjb21wb25lbnQgPSAlcywgcm9sZSA9ICVzLiIsCisgICAgICAgICAgICAgICAgbmFtZSwgcm9sZSk7CisgICAgICAgIHJldHVybiBlcnI7CisgICAgfQorCisgICAgYm9vbCBpc1ZpZGVvID0gaGFzUHJlZml4KG1pbWUsICJ2aWRlby8iKSA9PSAwOworICAgIGJvb2wgaXNJbWFnZSA9IGhhc1ByZWZpeChtaW1lLCAiaW1hZ2UvIikgPT0gMDsKKworICAgIGlmIChpc1ZpZGVvIHx8IGlzSW1hZ2UpIHsKKyAgICAgICAgT01YX1ZJREVPX1BBUkFNX1BST0ZJTEVMRVZFTFRZUEUgcGFyYW07CisgICAgICAgIEluaXRPTVhQYXJhbXMoJnBhcmFtKTsKKyAgICAgICAgcGFyYW0ublBvcnRJbmRleCA9IGlzRW5jb2RlciA/IGtQb3J0SW5kZXhPdXRwdXQgOiBrUG9ydEluZGV4SW5wdXQ7CisKKyAgICAgICAgZm9yIChPTVhfVTMyIGluZGV4ID0gMDsgaW5kZXggPD0ga01heEluZGljZXNUb0NoZWNrOyArK2luZGV4KSB7CisgICAgICAgICAgICBwYXJhbS5uUHJvZmlsZUluZGV4ID0gaW5kZXg7CisgICAgICAgICAgICBzdGF0dXNfdCBlcnIgPSBvbXhOb2RlLT5nZXRQYXJhbWV0ZXIoCisgICAgICAgICAgICAgICAgICAgIE9NWF9JbmRleFBhcmFtVmlkZW9Qcm9maWxlTGV2ZWxRdWVyeVN1cHBvcnRlZCwKKyAgICAgICAgICAgICAgICAgICAgJnBhcmFtLCBzaXplb2YocGFyYW0pKTsKKyAgICAgICAgICAgIGlmIChlcnIgIT0gT0spIHsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGNhcHMtPmFkZFByb2ZpbGVMZXZlbChwYXJhbS5lUHJvZmlsZSwgcGFyYW0uZUxldmVsKTsKKworICAgICAgICAgICAgLy8gQVZDIGNvbXBvbmVudHMgbWF5IG5vdCBsaXN0IHRoZSBjb25zdHJhaW5lZCBwcm9maWxlcyBleHBsaWNpdGx5LCBidXQKKyAgICAgICAgICAgIC8vIGRlY29kZXJzIHRoYXQgc3VwcG9ydCBhIHByb2ZpbGUgYWxzbyBzdXBwb3J0IGl0cyBjb25zdHJhaW5lZCB2ZXJzaW9uLgorICAgICAgICAgICAgLy8gRW5jb2RlcnMgbXVzdCBleHBsaWNpdGx5IHN1cHBvcnQgY29uc3RyYWluZWQgcHJvZmlsZXMuCisgICAgICAgICAgICBpZiAoIWlzRW5jb2RlciAmJiBzdHJjYXNlY21wKG1pbWUsIE1FRElBX01JTUVUWVBFX1ZJREVPX0FWQykgPT0gMCkgeworICAgICAgICAgICAgICAgIGlmIChwYXJhbS5lUHJvZmlsZSA9PSBPTVhfVklERU9fQVZDUHJvZmlsZUhpZ2gpIHsKKyAgICAgICAgICAgICAgICAgICAgY2Fwcy0+YWRkUHJvZmlsZUxldmVsKE9NWF9WSURFT19BVkNQcm9maWxlQ29uc3RyYWluZWRIaWdoLCBwYXJhbS5lTGV2ZWwpOworICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAocGFyYW0uZVByb2ZpbGUgPT0gT01YX1ZJREVPX0FWQ1Byb2ZpbGVCYXNlbGluZSkgeworICAgICAgICAgICAgICAgICAgICBjYXBzLT5hZGRQcm9maWxlTGV2ZWwoT01YX1ZJREVPX0FWQ1Byb2ZpbGVDb25zdHJhaW5lZEJhc2VsaW5lLCBwYXJhbS5lTGV2ZWwpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKGluZGV4ID09IGtNYXhJbmRpY2VzVG9DaGVjaykgeworICAgICAgICAgICAgICAgIEFMT0dXKCJbJXNdIHN0b3BwaW5nIGNoZWNraW5nIHByb2ZpbGVzIGFmdGVyICV1OiAleC8leCIsCisgICAgICAgICAgICAgICAgICAgICAgICBuYW1lLCBpbmRleCwKKyAgICAgICAgICAgICAgICAgICAgICAgIHBhcmFtLmVQcm9maWxlLCBwYXJhbS5lTGV2ZWwpOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgLy8gQ29sb3IgZm9ybWF0IHF1ZXJ5CisgICAgICAgIC8vIHJldHVybiBjb2xvcnMgaW4gdGhlIG9yZGVyIHJlcG9ydGVkIGJ5IHRoZSBPTVggY29tcG9uZW50CisgICAgICAgIC8vIHByZWZpeCAiZmxleGlibGUiIHN0YW5kYXJkIG9uZXMgd2l0aCB0aGUgZmxleGlibGUgZXF1aXZhbGVudAorICAgICAgICBPTVhfVklERU9fUEFSQU1fUE9SVEZPUk1BVFRZUEUgcG9ydEZvcm1hdDsKKyAgICAgICAgSW5pdE9NWFBhcmFtcygmcG9ydEZvcm1hdCk7CisgICAgICAgIHBvcnRGb3JtYXQublBvcnRJbmRleCA9IGlzRW5jb2RlciA/IGtQb3J0SW5kZXhJbnB1dCA6IGtQb3J0SW5kZXhPdXRwdXQ7CisgICAgICAgIGZvciAoT01YX1UzMiBpbmRleCA9IDA7IGluZGV4IDw9IGtNYXhJbmRpY2VzVG9DaGVjazsgKytpbmRleCkgeworICAgICAgICAgICAgcG9ydEZvcm1hdC5uSW5kZXggPSBpbmRleDsKKyAgICAgICAgICAgIHN0YXR1c190IGVyciA9IG9teE5vZGUtPmdldFBhcmFtZXRlcigKKyAgICAgICAgICAgICAgICAgICAgT01YX0luZGV4UGFyYW1WaWRlb1BvcnRGb3JtYXQsCisgICAgICAgICAgICAgICAgICAgICZwb3J0Rm9ybWF0LCBzaXplb2YocG9ydEZvcm1hdCkpOworICAgICAgICAgICAgaWYgKGVyciAhPSBPSykgeworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBPTVhfVTMyIGZsZXhpYmxlRXF1aXZhbGVudDsKKyAgICAgICAgICAgIGlmIChJc0ZsZXhpYmxlQ29sb3JGb3JtYXQoCisgICAgICAgICAgICAgICAgICAgIG9teE5vZGUsIHBvcnRGb3JtYXQuZUNvbG9yRm9ybWF0LCBmYWxzZSAvKiB1c2luZ05hdGl2ZVdpbmRvdyAqLywKKyAgICAgICAgICAgICAgICAgICAgJmZsZXhpYmxlRXF1aXZhbGVudCkpIHsKKyAgICAgICAgICAgICAgICBjYXBzLT5hZGRDb2xvckZvcm1hdChmbGV4aWJsZUVxdWl2YWxlbnQpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgY2Fwcy0+YWRkQ29sb3JGb3JtYXQocG9ydEZvcm1hdC5lQ29sb3JGb3JtYXQpOworCisgICAgICAgICAgICBpZiAoaW5kZXggPT0ga01heEluZGljZXNUb0NoZWNrKSB7CisgICAgICAgICAgICAgICAgQUxPR1coIlslc10gc3RvcHBpbmcgY2hlY2tpbmcgZm9ybWF0cyBhZnRlciAldTogJXMoJXgpIiwKKyAgICAgICAgICAgICAgICAgICAgICAgIG5hbWUsIGluZGV4LAorICAgICAgICAgICAgICAgICAgICAgICAgYXNTdHJpbmcocG9ydEZvcm1hdC5lQ29sb3JGb3JtYXQpLCBwb3J0Rm9ybWF0LmVDb2xvckZvcm1hdCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9IGVsc2UgaWYgKHN0cmNhc2VjbXAobWltZSwgTUVESUFfTUlNRVRZUEVfQVVESU9fQUFDKSA9PSAwKSB7CisgICAgICAgIC8vIE1vcmUgYXVkaW8gY29kZWNzIGlmIHRoZXkgaGF2ZSBwcm9maWxlcy4KKyAgICAgICAgT01YX0FVRElPX1BBUkFNX0FORFJPSURfUFJPRklMRVRZUEUgcGFyYW07CisgICAgICAgIEluaXRPTVhQYXJhbXMoJnBhcmFtKTsKKyAgICAgICAgcGFyYW0ublBvcnRJbmRleCA9IGlzRW5jb2RlciA/IGtQb3J0SW5kZXhPdXRwdXQgOiBrUG9ydEluZGV4SW5wdXQ7CisgICAgICAgIGZvciAoT01YX1UzMiBpbmRleCA9IDA7IGluZGV4IDw9IGtNYXhJbmRpY2VzVG9DaGVjazsgKytpbmRleCkgeworICAgICAgICAgICAgcGFyYW0ublByb2ZpbGVJbmRleCA9IGluZGV4OworICAgICAgICAgICAgc3RhdHVzX3QgZXJyID0gb214Tm9kZS0+Z2V0UGFyYW1ldGVyKAorICAgICAgICAgICAgICAgICAgICAoT01YX0lOREVYVFlQRSlPTVhfSW5kZXhQYXJhbUF1ZGlvUHJvZmlsZVF1ZXJ5U3VwcG9ydGVkLAorICAgICAgICAgICAgICAgICAgICAmcGFyYW0sIHNpemVvZihwYXJhbSkpOworICAgICAgICAgICAgaWYgKGVyciAhPSBPSykgeworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICAgICAgLy8gRm9yIGF1ZGlvLCBsZXZlbCBpcyBpZ25vcmVkLgorICAgICAgICAgICAgY2Fwcy0+YWRkUHJvZmlsZUxldmVsKHBhcmFtLmVQcm9maWxlLCAwIC8qIGxldmVsICovKTsKKworICAgICAgICAgICAgaWYgKGluZGV4ID09IGtNYXhJbmRpY2VzVG9DaGVjaykgeworICAgICAgICAgICAgICAgIEFMT0dXKCJbJXNdIHN0b3BwaW5nIGNoZWNraW5nIHByb2ZpbGVzIGFmdGVyICV1OiAleCIsCisgICAgICAgICAgICAgICAgICAgICAgICBuYW1lLCBpbmRleCwKKyAgICAgICAgICAgICAgICAgICAgICAgIHBhcmFtLmVQcm9maWxlKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIC8vIE5PVEU6IFdpdGhvdXQgQW5kcm9pZCBleHRlbnNpb25zLCBPTVggZG9lcyBub3QgcHJvdmlkZSBhIHdheSB0byBxdWVyeQorICAgICAgICAvLyBBQUMgcHJvZmlsZSBzdXBwb3J0CisgICAgICAgIGlmIChwYXJhbS5uUHJvZmlsZUluZGV4ID09IDApIHsKKyAgICAgICAgICAgIEFMT0dXKCJjb21wb25lbnQgJXMgZG9lc24ndCBzdXBwb3J0IHByb2ZpbGUgcXVlcnkuIiwgbmFtZSk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBpZiAoaXNWaWRlbyAmJiAhaXNFbmNvZGVyKSB7CisgICAgICAgIG5hdGl2ZV9oYW5kbGVfdCAqc2lkZWJhbmRIYW5kbGUgPSBudWxscHRyOworICAgICAgICBpZiAob214Tm9kZS0+Y29uZmlndXJlVmlkZW9UdW5uZWxNb2RlKAorICAgICAgICAgICAgICAgIGtQb3J0SW5kZXhPdXRwdXQsIE9NWF9UUlVFLCAwLCAmc2lkZWJhbmRIYW5kbGUpID09IE9LKSB7CisgICAgICAgICAgICAvLyB0dW5uZWxlZCBwbGF5YmFjayBpbmNsdWRlcyBhZGFwdGl2ZSBwbGF5YmFjaworICAgICAgICAgICAgY2Fwcy0+YWRkRmxhZ3MoTWVkaWFDb2RlY0luZm86OkNhcGFiaWxpdGllczo6a0ZsYWdTdXBwb3J0c0FkYXB0aXZlUGxheWJhY2sKKyAgICAgICAgICAgICAgICAgICAgfCBNZWRpYUNvZGVjSW5mbzo6Q2FwYWJpbGl0aWVzOjprRmxhZ1N1cHBvcnRzVHVubmVsZWRQbGF5YmFjayk7CisgICAgICAgIH0gZWxzZSBpZiAob214Tm9kZS0+c2V0UG9ydE1vZGUoCisgICAgICAgICAgICAgICAga1BvcnRJbmRleE91dHB1dCwgSU9NWDo6a1BvcnRNb2RlRHluYW1pY0FOV0J1ZmZlcikgPT0gT0sgfHwKKyAgICAgICAgICAgICAgICBvbXhOb2RlLT5wcmVwYXJlRm9yQWRhcHRpdmVQbGF5YmFjaygKKyAgICAgICAgICAgICAgICBrUG9ydEluZGV4T3V0cHV0LCBPTVhfVFJVRSwKKyAgICAgICAgICAgICAgICAxMjgwIC8qIHdpZHRoICovLCA3MjAgLyogaGVpZ2h0ICovKSA9PSBPSykgeworICAgICAgICAgICAgY2Fwcy0+YWRkRmxhZ3MoTWVkaWFDb2RlY0luZm86OkNhcGFiaWxpdGllczo6a0ZsYWdTdXBwb3J0c0FkYXB0aXZlUGxheWJhY2spOworICAgICAgICB9CisgICAgfQorCisgICAgaWYgKGlzVmlkZW8gJiYgaXNFbmNvZGVyKSB7CisgICAgICAgIE9NWF9WSURFT19DT05GSUdfQU5EUk9JRF9JTlRSQVJFRlJFU0hUWVBFIHBhcmFtczsKKyAgICAgICAgSW5pdE9NWFBhcmFtcygmcGFyYW1zKTsKKyAgICAgICAgcGFyYW1zLm5Qb3J0SW5kZXggPSBrUG9ydEluZGV4T3V0cHV0OworICAgICAgICAvLyBUT0RPOiBzaG91bGQgd2UgdmVyaWZ5IGlmIGZhbGxiYWNrIGlzIHN1cHBvcnRlZD8KKyAgICAgICAgaWYgKG9teE5vZGUtPmdldENvbmZpZygKKyAgICAgICAgICAgICAgICAoT01YX0lOREVYVFlQRSlPTVhfSW5kZXhDb25maWdBbmRyb2lkSW50cmFSZWZyZXNoLAorICAgICAgICAgICAgICAgICZwYXJhbXMsIHNpemVvZihwYXJhbXMpKSA9PSBPSykgeworICAgICAgICAgICAgY2Fwcy0+YWRkRmxhZ3MoTWVkaWFDb2RlY0luZm86OkNhcGFiaWxpdGllczo6a0ZsYWdTdXBwb3J0c0ludHJhUmVmcmVzaCk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBvbXhOb2RlLT5mcmVlTm9kZSgpOworICAgIHJldHVybiBPSzsKK30KKwordm9pZCBidWlsZE9teEluZm8oY29uc3QgTWVkaWFDb2RlY3NYbWxQYXJzZXImIHBhcnNlciwKKyAgICAgICAgICAgICAgICAgIE1lZGlhQ29kZWNMaXN0V3JpdGVyKiB3cml0ZXIpIHsKKyAgICB1aW50MzJfdCBvbXhSYW5rID0gOjphbmRyb2lkOjpiYXNlOjpHZXRVaW50UHJvcGVydHkoCisgICAgICAgICAgICAiZGVidWcuc3RhZ2VmcmlnaHQub214X2RlZmF1bHRfcmFuayIsIHVpbnQzMl90KDB4MTAwKSk7CisgICAgZm9yIChjb25zdCBNZWRpYUNvZGVjc1htbFBhcnNlcjo6Q29kZWMmIGNvZGVjIDogcGFyc2VyLmdldENvZGVjTWFwKCkpIHsKKyAgICAgICAgY29uc3Qgc3RkOjpzdHJpbmcgJm5hbWUgPSBjb2RlYy5maXJzdDsKKyAgICAgICAgaWYgKCFoYXNQcmVmaXgoY29kZWMuZmlyc3QsICJPTVguIikpIHsKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB9CisgICAgICAgIGNvbnN0IE1lZGlhQ29kZWNzWG1sUGFyc2VyOjpDb2RlY1Byb3BlcnRpZXMgJnByb3BlcnRpZXMgPSBjb2RlYy5zZWNvbmQ7CisgICAgICAgIGJvb2wgZW5jb2RlciA9IHByb3BlcnRpZXMuaXNFbmNvZGVyOworICAgICAgICBzdGQ6OnVuaXF1ZV9wdHI8TWVkaWFDb2RlY0luZm9Xcml0ZXI+IGluZm8gPQorICAgICAgICAgICAgICAgIHdyaXRlci0+YWRkTWVkaWFDb2RlY0luZm8oKTsKKyAgICAgICAgaW5mby0+c2V0TmFtZShuYW1lLmNfc3RyKCkpOworICAgICAgICBpbmZvLT5zZXRPd25lcigiZGVmYXVsdCIpOworICAgICAgICBpbmZvLT5zZXRFbmNvZGVyKGVuY29kZXIpOworICAgICAgICBpbmZvLT5zZXRSYW5rKG9teFJhbmspOworICAgICAgICBmb3IgKGNvbnN0IE1lZGlhQ29kZWNzWG1sUGFyc2VyOjpUeXBlJiB0eXBlIDogcHJvcGVydGllcy50eXBlTWFwKSB7CisgICAgICAgICAgICBjb25zdCBzdGQ6OnN0cmluZyAmbWltZSA9IHR5cGUuZmlyc3Q7CisgICAgICAgICAgICBzdGQ6OnVuaXF1ZV9wdHI8TWVkaWFDb2RlY0luZm86OkNhcGFiaWxpdGllc1dyaXRlcj4gY2FwcyA9CisgICAgICAgICAgICAgICAgICAgIGluZm8tPmFkZE1pbWUobWltZS5jX3N0cigpKTsKKyAgICAgICAgICAgIGNvbnN0IE1lZGlhQ29kZWNzWG1sUGFyc2VyOjpBdHRyaWJ1dGVNYXAgJmF0dHJNYXAgPSB0eXBlLnNlY29uZDsKKyAgICAgICAgICAgIGZvciAoY29uc3QgTWVkaWFDb2RlY3NYbWxQYXJzZXI6OkF0dHJpYnV0ZSYgYXR0ciA6IGF0dHJNYXApIHsKKyAgICAgICAgICAgICAgICBjb25zdCBzdGQ6OnN0cmluZyAma2V5ID0gYXR0ci5maXJzdDsKKyAgICAgICAgICAgICAgICBjb25zdCBzdGQ6OnN0cmluZyAmdmFsdWUgPSBhdHRyLnNlY29uZDsKKyAgICAgICAgICAgICAgICBpZiAoaGFzUHJlZml4KGtleSwgImZlYXR1cmUtIikgJiYKKyAgICAgICAgICAgICAgICAgICAgICAgICFoYXNQcmVmaXgoa2V5LCAiZmVhdHVyZS1iaXRyYXRlLW1vZGVzIikpIHsKKyAgICAgICAgICAgICAgICAgICAgY2Fwcy0+YWRkRGV0YWlsKGtleS5jX3N0cigpLCBoYXNQcmVmaXgodmFsdWUsICIxIikgPyAxIDogMCk7CisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgY2Fwcy0+YWRkRGV0YWlsKGtleS5jX3N0cigpLCB2YWx1ZS5jX3N0cigpKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICBzdGF0dXNfdCBlcnIgPSBxdWVyeU9teENhcGFiaWxpdGllcygKKyAgICAgICAgICAgICAgICAgICAgbmFtZS5jX3N0cigpLAorICAgICAgICAgICAgICAgICAgICBtaW1lLmNfc3RyKCksCisgICAgICAgICAgICAgICAgICAgIGVuY29kZXIsCisgICAgICAgICAgICAgICAgICAgIGNhcHMuZ2V0KCkpOworICAgICAgICAgICAgaWYgKGVyciAhPSBPSykgeworICAgICAgICAgICAgICAgIEFMT0dFKCJGYWlsZWQgdG8gcXVlcnkgY2FwYWJpbGl0aWVzIGZvciAlcyAobWltZTogJXMpLiBFcnJvcjogJWQiLAorICAgICAgICAgICAgICAgICAgICAgICAgbmFtZS5jX3N0cigpLAorICAgICAgICAgICAgICAgICAgICAgICAgbWltZS5jX3N0cigpLAorICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGljX2Nhc3Q8aW50PihlcnIpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KK30KKworfSAvLyB1bm5hbWVkIG5hbWVzcGFjZQorCitzdGF0dXNfdCBDb2RlYzJJbmZvQnVpbGRlcjo6YnVpbGRNZWRpYUNvZGVjTGlzdChNZWRpYUNvZGVjTGlzdFdyaXRlciogd3JpdGVyKSB7CisgICAgLy8gVE9ETzogUmVtb3ZlIHJ1bi10aW1lIGNvbmZpZ3VyYXRpb25zIG9uY2UgYWxsIGNvZGVjcyBhcmUgd29ya2luZworICAgIC8vIHByb3Blcmx5LiAoQXNzdW1lICJmdWxsIiBiZWhhdmlvciBldmVudHVhbGx5LikKKyAgICAvLworICAgIC8vIGRlYnVnLnN0YWdlZnJpZ2h0LmNjb2RlYyBzdXBwb3J0cyA1IHZhbHVlcy4KKyAgICAvLyAgIDAgLSBPbmx5IE9NWCBjb21wb25lbnRzIGFyZSBhdmFpbGFibGUuCisgICAgLy8gICAxIC0gQXVkaW8gZGVjb2RlcnMgYW5kIGVuY29kZXJzIHdpdGggcHJlZml4ICJjMi5hbmRyb2lkLiIgYXJlIGF2YWlsYWJsZQorICAgIC8vICAgICAgIGFuZCByYW5rZWQgZmlyc3QuCisgICAgLy8gICAgICAgQWxsIG90aGVyIGNvbXBvbmVudHMgd2l0aCBwcmVmaXggImMyLmFuZHJvaWQuIiBhcmUgYXZhaWxhYmxlIHdpdGgKKyAgICAvLyAgICAgICB0aGVpciBub3JtYWwgcmFua3MuCisgICAgLy8gICAgICAgQ29tcG9uZW50cyB3aXRoIHByZWZpeCAiYzIudmRhLiIgYXJlIGF2YWlsYWJsZSB3aXRoIHRoZWlyIG5vcm1hbAorICAgIC8vICAgICAgIHJhbmtzLgorICAgIC8vICAgICAgIEFsbCBvdGhlciBjb21wb25lbnRzIHdpdGggc3VmZml4ICIuYXZjLmRlY29kZXIiIG9yICIuYXZjLmVuY29kZXIiCisgICAgLy8gICAgICAgYXJlIGF2YWlsYWJsZSBidXQgcmFua2VkIGxhc3QuCisgICAgLy8gICAyIC0gQ29tcG9uZW50cyB3aXRoIHByZWZpeCAiYzIuYW5kcm9pZC4iIGFyZSBhdmFpbGFibGUgYW5kIHJhbmtlZAorICAgIC8vICAgICAgIGZpcnN0LgorICAgIC8vICAgICAgIENvbXBvbmVudHMgd2l0aCBwcmVmaXggImMyLnZkYS4iIGFyZSBhdmFpbGFibGUgd2l0aCB0aGVpciBub3JtYWwKKyAgICAvLyAgICAgICByYW5rcy4KKyAgICAvLyAgICAgICBBbGwgb3RoZXIgY29tcG9uZW50cyB3aXRoIHN1ZmZpeCAiLmF2Yy5kZWNvZGVyIiBvciAiLmF2Yy5lbmNvZGVyIgorICAgIC8vICAgICAgIGFyZSBhdmFpbGFibGUgYnV0IHJhbmtlZCBsYXN0LgorICAgIC8vICAgMyAtIENvbXBvbmVudHMgd2l0aCBwcmVmaXggImMyLmFuZHJvaWQuIiBhcmUgYXZhaWxhYmxlIGFuZCByYW5rZWQKKyAgICAvLyAgICAgICBmaXJzdC4KKyAgICAvLyAgICAgICBBbGwgb3RoZXIgY29tcG9uZW50cyBhcmUgYXZhaWxhYmxlIHdpdGggdGhlaXIgbm9ybWFsIHJhbmtzLgorICAgIC8vICAgNCAtIEFsbCBjb21wb25lbnRzIGFyZSBhdmFpbGFibGUgd2l0aCB0aGVpciBub3JtYWwgcmFua3MuCisgICAgLy8KKyAgICAvLyBUaGUgZGVmYXVsdCB2YWx1ZSAoYm9vdCB0aW1lKSBpcyAxLgorICAgIC8vCisgICAgLy8gTm90ZTogQ3VycmVudGx5LCBPTVggY29tcG9uZW50cyBoYXZlIGRlZmF1bHQgcmFuayAweDEwMCwgd2hpbGUgYWxsCisgICAgLy8gQ29kZWMyLjAgc29mdHdhcmUgY29tcG9uZW50cyBoYXZlIGRlZmF1bHQgcmFuayAweDIwMC4KKyAgICBpbnQgb3B0aW9uID0gOjphbmRyb2lkOjpiYXNlOjpHZXRJbnRQcm9wZXJ0eSgiZGVidWcuc3RhZ2VmcmlnaHQuY2NvZGVjIiwgMSk7CisKKyAgICAvLyBPYnRhaW4gQ29kZWMyQ2xpZW50CisgICAgc3RkOjp2ZWN0b3I8VHJhaXRzPiB0cmFpdHMgPSBDb2RlYzJDbGllbnQ6Okxpc3RDb21wb25lbnRzKCk7CisKKyAgICBNZWRpYUNvZGVjc1htbFBhcnNlciBwYXJzZXIoCisgICAgICAgICAgICBNZWRpYUNvZGVjc1htbFBhcnNlcjo6ZGVmYXVsdFNlYXJjaERpcnMsCisgICAgICAgICAgICBvcHRpb24gPT0gMCA/ICJtZWRpYV9jb2RlY3MueG1sIiA6CisgICAgICAgICAgICAgICAgICAgICAgICAgICJtZWRpYV9jb2RlY3NfYzIueG1sIiwKKyAgICAgICAgICAgIG9wdGlvbiA9PSAwID8gIm1lZGlhX2NvZGVjc19wZXJmb3JtYW5jZS54bWwiIDoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIm1lZGlhX2NvZGVjc19wZXJmb3JtYW5jZV9jMi54bWwiKTsKKyAgICBpZiAocGFyc2VyLmdldFBhcnNpbmdTdGF0dXMoKSAhPSBPSykgeworICAgICAgICBBTE9HRCgiWE1MIHBhcnNlciBubyBnb29kIik7CisgICAgICAgIHJldHVybiBPSzsKKyAgICB9CisKKyAgICBib29sIHN1cmZhY2VUZXN0KENvZGVjMkNsaWVudDo6Q3JlYXRlSW5wdXRTdXJmYWNlKCkpOworICAgIGlmIChvcHRpb24gPT0gMCB8fCAhc3VyZmFjZVRlc3QpIHsKKyAgICAgICAgYnVpbGRPbXhJbmZvKHBhcnNlciwgd3JpdGVyKTsKKyAgICB9CisKKyAgICBmb3IgKGNvbnN0IFRyYWl0cyYgdHJhaXQgOiB0cmFpdHMpIHsKKyAgICAgICAgQzJDb21wb25lbnQ6OnJhbmtfdCByYW5rID0gdHJhaXQucmFuazsKKworICAgICAgICBzdGQ6OnNoYXJlZF9wdHI8Q29kZWMyQ2xpZW50OjpJbnRlcmZhY2U+IGludGYgPQorICAgICAgICAgICAgQ29kZWMyQ2xpZW50OjpDcmVhdGVJbnRlcmZhY2VCeU5hbWUodHJhaXQubmFtZS5jX3N0cigpKTsKKyAgICAgICAgaWYgKCFpbnRmIHx8IHBhcnNlci5nZXRDb2RlY01hcCgpLmNvdW50KGludGYtPmdldE5hbWUoKSkgPT0gMCkgeworICAgICAgICAgICAgQUxPR0QoIiVzIG5vdCBmb3VuZCBpbiB4bWwiLCB0cmFpdC5uYW1lLmNfc3RyKCkpOworICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIH0KKyAgICAgICAgc3RkOjpzdHJpbmcgY2Fub25OYW1lID0gaW50Zi0+Z2V0TmFtZSgpOworCisgICAgICAgIC8vIFRPRE86IFJlbW92ZSB0aGlzIGJsb2NrIG9uY2UgYWxsIGNvZGVjcyBhcmUgZW5hYmxlZCBieSBkZWZhdWx0LgorICAgICAgICBzd2l0Y2ggKG9wdGlvbikgeworICAgICAgICBjYXNlIDA6CisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgY2FzZSAxOgorICAgICAgICAgICAgaWYgKGhhc1ByZWZpeChjYW5vbk5hbWUsICJjMi52ZGEuIikpIHsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChoYXNQcmVmaXgoY2Fub25OYW1lLCAiYzIuYW5kcm9pZC4iKSkgeworICAgICAgICAgICAgICAgIGlmICh0cmFpdC5kb21haW4gPT0gQzJDb21wb25lbnQ6OkRPTUFJTl9BVURJTykgeworICAgICAgICAgICAgICAgICAgICByYW5rID0gMTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKGhhc1N1ZmZpeChjYW5vbk5hbWUsICIuYXZjLmRlY29kZXIiKSB8fAorICAgICAgICAgICAgICAgICAgICBoYXNTdWZmaXgoY2Fub25OYW1lLCAiLmF2Yy5lbmNvZGVyIikpIHsKKyAgICAgICAgICAgICAgICByYW5rID0gc3RkOjpudW1lcmljX2xpbWl0czxkZWNsdHlwZShyYW5rKT46Om1heCgpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIGNhc2UgMjoKKyAgICAgICAgICAgIGlmIChoYXNQcmVmaXgoY2Fub25OYW1lLCAiYzIudmRhLiIpKSB7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoaGFzUHJlZml4KGNhbm9uTmFtZSwgImMyLmFuZHJvaWQuIikpIHsKKyAgICAgICAgICAgICAgICByYW5rID0gMTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChoYXNTdWZmaXgoY2Fub25OYW1lLCAiLmF2Yy5kZWNvZGVyIikgfHwKKyAgICAgICAgICAgICAgICAgICAgaGFzU3VmZml4KGNhbm9uTmFtZSwgIi5hdmMuZW5jb2RlciIpKSB7CisgICAgICAgICAgICAgICAgcmFuayA9IHN0ZDo6bnVtZXJpY19saW1pdHM8ZGVjbHR5cGUocmFuayk+OjptYXgoKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICBjYXNlIDM6CisgICAgICAgICAgICBpZiAoaGFzUHJlZml4KGNhbm9uTmFtZSwgImMyLmFuZHJvaWQuIikpIHsKKyAgICAgICAgICAgICAgICByYW5rID0gMTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICAgICAgc3RkOjp1bmlxdWVfcHRyPE1lZGlhQ29kZWNJbmZvV3JpdGVyPiBjb2RlY0luZm8gPSB3cml0ZXItPmFkZE1lZGlhQ29kZWNJbmZvKCk7CisgICAgICAgIGNvZGVjSW5mby0+c2V0TmFtZSh0cmFpdC5uYW1lLmNfc3RyKCkpOworICAgICAgICBjb2RlY0luZm8tPnNldE93bmVyKCJjb2RlYzIiKTsKKyAgICAgICAgYm9vbCBlbmNvZGVyID0gdHJhaXQua2luZCA9PSBDMkNvbXBvbmVudDo6S0lORF9FTkNPREVSOworICAgICAgICBjb2RlY0luZm8tPnNldEVuY29kZXIoZW5jb2Rlcik7CisgICAgICAgIGNvZGVjSW5mby0+c2V0UmFuayhyYW5rKTsKKyAgICAgICAgY29uc3QgTWVkaWFDb2RlY3NYbWxQYXJzZXI6OkNvZGVjUHJvcGVydGllcyAmY29kZWMgPQorICAgICAgICAgICAgcGFyc2VyLmdldENvZGVjTWFwKCkuYXQoY2Fub25OYW1lKTsKKworICAgICAgICBmb3IgKGF1dG8gdHlwZUl0ID0gY29kZWMudHlwZU1hcC5iZWdpbigpOyB0eXBlSXQgIT0gY29kZWMudHlwZU1hcC5lbmQoKTsgKyt0eXBlSXQpIHsKKyAgICAgICAgICAgIGNvbnN0IHN0ZDo6c3RyaW5nICZtZWRpYVR5cGUgPSB0eXBlSXQtPmZpcnN0OworICAgICAgICAgICAgY29uc3QgTWVkaWFDb2RlY3NYbWxQYXJzZXI6OkF0dHJpYnV0ZU1hcCAmYXR0ck1hcCA9IHR5cGVJdC0+c2Vjb25kOworICAgICAgICAgICAgc3RkOjp1bmlxdWVfcHRyPE1lZGlhQ29kZWNJbmZvOjpDYXBhYmlsaXRpZXNXcml0ZXI+IGNhcHMgPQorICAgICAgICAgICAgICAgIGNvZGVjSW5mby0+YWRkTWltZShtZWRpYVR5cGUuY19zdHIoKSk7CisgICAgICAgICAgICBmb3IgKGF1dG8gYXR0ckl0ID0gYXR0ck1hcC5iZWdpbigpOyBhdHRySXQgIT0gYXR0ck1hcC5lbmQoKTsgKythdHRySXQpIHsKKyAgICAgICAgICAgICAgICBzdGQ6OnN0cmluZyBrZXksIHZhbHVlOworICAgICAgICAgICAgICAgIHN0ZDo6dGllKGtleSwgdmFsdWUpID0gKmF0dHJJdDsKKyAgICAgICAgICAgICAgICBpZiAoa2V5LmZpbmQoImZlYXR1cmUtIikgPT0gMCAmJiBrZXkuZmluZCgiZmVhdHVyZS1iaXRyYXRlLW1vZGVzIikgIT0gMCkgeworICAgICAgICAgICAgICAgICAgICBjYXBzLT5hZGREZXRhaWwoa2V5LmNfc3RyKCksIHN0ZDo6c3RvaSh2YWx1ZSkpOworICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIGNhcHMtPmFkZERldGFpbChrZXkuY19zdHIoKSwgdmFsdWUuY19zdHIoKSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorCisgICAgICAgICAgICBib29sIGdvdFByb2ZpbGVMZXZlbHMgPSBmYWxzZTsKKyAgICAgICAgICAgIGlmIChpbnRmKSB7CisgICAgICAgICAgICAgICAgc3RkOjpzaGFyZWRfcHRyPEMyTWFwcGVyOjpQcm9maWxlTGV2ZWxNYXBwZXI+IG1hcHBlciA9CisgICAgICAgICAgICAgICAgICAgIEMyTWFwcGVyOjpHZXRQcm9maWxlTGV2ZWxNYXBwZXIodHJhaXQubWVkaWFUeXBlKTsKKyAgICAgICAgICAgICAgICAvLyBpZiB3ZSBkb24ndCBrbm93IHRoZSBtZWRpYSB0eXBlLCBwYXNzIHRocm91Z2ggYWxsIHZhbHVlcyB1bm1hcHBlZAorCisgICAgICAgICAgICAgICAgLy8gVE9ETzogd2UgY2Fubm90IGZpbmQgbGV2ZWxzIHRoYXQgYXJlIGxvY2FsICdtYXhpbWEnIHdpdGhvdXQga25vd2luZyB0aGUgY29kaW5nCisgICAgICAgICAgICAgICAgLy8gZS5nLiBILjI2MyBsZXZlbCA0NSBhbmQgbGV2ZWwgMzAgY291bGQgYmUgdHdvIHZhbHVlcyBmb3IgaGlnaGVzdCBsZXZlbCBhcworICAgICAgICAgICAgICAgIC8vIHRoZXkgZG9uJ3QgaW5jbHVkZSBvbmUgYW5vdGhlci4gRm9yIG5vdyB3ZSB1c2UgdGhlIGxhc3Qgc3VwcG9ydGVkIHZhbHVlLgorICAgICAgICAgICAgICAgIEMyU3RyZWFtUHJvZmlsZUxldmVsSW5mbyBwbChlbmNvZGVyIC8qIG91dHB1dCAqLywgMHUpOworICAgICAgICAgICAgICAgIHN0ZDo6dmVjdG9yPEMyRmllbGRTdXBwb3J0ZWRWYWx1ZXNRdWVyeT4gcHJvZmlsZVF1ZXJ5ID0geworICAgICAgICAgICAgICAgICAgICBDMkZpZWxkU3VwcG9ydGVkVmFsdWVzUXVlcnk6OlBvc3NpYmxlKEMyUGFyYW1GaWVsZCgmcGwsICZwbC5wcm9maWxlKSkKKyAgICAgICAgICAgICAgICB9OworCisgICAgICAgICAgICAgICAgYzJfc3RhdHVzX3QgZXJyID0gaW50Zi0+cXVlcnlTdXBwb3J0ZWRWYWx1ZXMocHJvZmlsZVF1ZXJ5LCBDMl9ET05UX0JMT0NLKTsKKyAgICAgICAgICAgICAgICBBTE9HVigicXVlcnkgc3VwcG9ydGVkIHByb2ZpbGVzIC0+ICVzIHwgJXMiLAorICAgICAgICAgICAgICAgICAgICAgICAgYXNTdHJpbmcoZXJyKSwgYXNTdHJpbmcocHJvZmlsZVF1ZXJ5WzBdLnN0YXR1cykpOworICAgICAgICAgICAgICAgIGlmIChlcnIgPT0gQzJfT0sgJiYgcHJvZmlsZVF1ZXJ5WzBdLnN0YXR1cyA9PSBDMl9PSykgeworICAgICAgICAgICAgICAgICAgICBpZiAocHJvZmlsZVF1ZXJ5WzBdLnZhbHVlcy50eXBlID09IEMyRmllbGRTdXBwb3J0ZWRWYWx1ZXM6OlZBTFVFUykgeworICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChDMlZhbHVlOjpQcmltaXRpdmUgcHJvZmlsZSA6IHByb2ZpbGVRdWVyeVswXS52YWx1ZXMudmFsdWVzKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGwucHJvZmlsZSA9IChDMkNvbmZpZzo6cHJvZmlsZV90KXByb2ZpbGUucmVmPHVpbnQzMl90PigpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZDo6dmVjdG9yPHN0ZDo6dW5pcXVlX3B0cjxDMlNldHRpbmdSZXN1bHQ+PiBmYWlsdXJlczsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBlcnIgPSBpbnRmLT5jb25maWcoeyZwbH0sIEMyX0RPTlRfQkxPQ0ssICZmYWlsdXJlcyk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgQUxPR1YoInNldCBwcm9maWxlIHRvICV1IC0+ICVzIiwgcGwucHJvZmlsZSwgYXNTdHJpbmcoZXJyKSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RkOjp2ZWN0b3I8QzJGaWVsZFN1cHBvcnRlZFZhbHVlc1F1ZXJ5PiBsZXZlbFF1ZXJ5ID0geworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDMkZpZWxkU3VwcG9ydGVkVmFsdWVzUXVlcnk6OkN1cnJlbnQoQzJQYXJhbUZpZWxkKCZwbCwgJnBsLmxldmVsKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9OworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVyciA9IGludGYtPnF1ZXJ5U3VwcG9ydGVkVmFsdWVzKGxldmVsUXVlcnksIEMyX0RPTlRfQkxPQ0spOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFMT0dWKCJxdWVyeSBzdXBwb3J0ZWQgbGV2ZWxzIC0+ICVzIHwgJXMiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXNTdHJpbmcoZXJyKSwgYXNTdHJpbmcobGV2ZWxRdWVyeVswXS5zdGF0dXMpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZXJyID09IEMyX09LICYmIGxldmVsUXVlcnlbMF0uc3RhdHVzID09IEMyX09LKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChsZXZlbFF1ZXJ5WzBdLnZhbHVlcy50eXBlID09IEMyRmllbGRTdXBwb3J0ZWRWYWx1ZXM6OlZBTFVFUworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICYmIGxldmVsUXVlcnlbMF0udmFsdWVzLnZhbHVlcy5zaXplKCkgPiAwKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDMlZhbHVlOjpQcmltaXRpdmUgbGV2ZWwgPSBsZXZlbFF1ZXJ5WzBdLnZhbHVlcy52YWx1ZXMuYmFjaygpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGwubGV2ZWwgPSAoQzJDb25maWc6OmxldmVsX3QpbGV2ZWwucmVmPHVpbnQzMl90PigpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQUxPR1YoInN1cHBvcnRpbmcgbGV2ZWw6ICV1IiwgcGwubGV2ZWwpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50MzJfdCBzZGtQcm9maWxlLCBzZGtMZXZlbDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtYXBwZXIgJiYgbWFwcGVyLT5tYXBQcm9maWxlKHBsLnByb2ZpbGUsICZzZGtQcm9maWxlKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmJiBtYXBwZXItPm1hcExldmVsKHBsLmxldmVsLCAmc2RrTGV2ZWwpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2Fwcy0+YWRkUHJvZmlsZUxldmVsKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHVpbnQzMl90KXNka1Byb2ZpbGUsICh1aW50MzJfdClzZGtMZXZlbCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ290UHJvZmlsZUxldmVscyA9IHRydWU7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKCFtYXBwZXIpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXBzLT5hZGRQcm9maWxlTGV2ZWwocGwucHJvZmlsZSwgcGwubGV2ZWwpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdvdFByb2ZpbGVMZXZlbHMgPSB0cnVlOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBmb3IgSC4yNjMgYWxzbyBhZHZlcnRpc2UgdGhlIHNlY29uZCBoaWdoZXN0IGxldmVsIGlmIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gY29kZWMgc3VwcG9ydHMgbGV2ZWwgNDUsIGFzIGxldmVsIDQ1IG9ubHkgY292ZXJzIGxldmVsIDEwCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBUT0RPOiBtb3ZlIHRoaXMgdG8gc29tZSBmb3JtIG9mIGEgc2V0dGluZyBzbyBpdCBkb2VzIG5vdAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gaGF2ZSB0byBiZSBoZXJlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobWVkaWFUeXBlID09IE1JTUVUWVBFX1ZJREVPX0gyNjMpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDMkNvbmZpZzo6bGV2ZWxfdCBuZXh0TGV2ZWwgPSBDMkNvbmZpZzo6TEVWRUxfVU5VU0VEOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoQzJWYWx1ZTo6UHJpbWl0aXZlIHYgOiBsZXZlbFF1ZXJ5WzBdLnZhbHVlcy52YWx1ZXMpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQzJDb25maWc6OmxldmVsX3QgbGV2ZWwgPQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKEMyQ29uZmlnOjpsZXZlbF90KXYucmVmPHVpbnQzMl90PigpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobGV2ZWwgPCBDMkNvbmZpZzo6TEVWRUxfSDI2M180NQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICYmIGxldmVsID4gbmV4dExldmVsKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXh0TGV2ZWwgPSBsZXZlbDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobmV4dExldmVsICE9IEMyQ29uZmlnOjpMRVZFTF9VTlVTRUQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICYmIG5leHRMZXZlbCAhPSBwbC5sZXZlbAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJiYgbWFwcGVyCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmJiBtYXBwZXItPm1hcFByb2ZpbGUocGwucHJvZmlsZSwgJnNka1Byb2ZpbGUpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmJiBtYXBwZXItPm1hcExldmVsKG5leHRMZXZlbCwgJnNka0xldmVsKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXBzLT5hZGRQcm9maWxlTGV2ZWwoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHVpbnQzMl90KXNka1Byb2ZpbGUsICh1aW50MzJfdClzZGtMZXZlbCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAoIWdvdFByb2ZpbGVMZXZlbHMpIHsKKyAgICAgICAgICAgICAgICBpZiAobWVkaWFUeXBlID09IE1JTUVUWVBFX1ZJREVPX1ZQOSkgeworICAgICAgICAgICAgICAgICAgICBpZiAoZW5jb2RlcikgeworICAgICAgICAgICAgICAgICAgICAgICAgY2Fwcy0+YWRkUHJvZmlsZUxldmVsKFZQOVByb2ZpbGUwLCAgICBWUDlMZXZlbDQxKTsKKyAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGNhcHMtPmFkZFByb2ZpbGVMZXZlbChWUDlQcm9maWxlMCwgICAgVlA5TGV2ZWw1KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGNhcHMtPmFkZFByb2ZpbGVMZXZlbChWUDlQcm9maWxlMiwgICAgVlA5TGV2ZWw1KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGNhcHMtPmFkZFByb2ZpbGVMZXZlbChWUDlQcm9maWxlMkhEUiwgVlA5TGV2ZWw1KTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAobWVkaWFUeXBlID09IE1JTUVUWVBFX1ZJREVPX0hFVkMgJiYgIWVuY29kZXIpIHsKKyAgICAgICAgICAgICAgICAgICAgY2Fwcy0+YWRkUHJvZmlsZUxldmVsKEhFVkNQcm9maWxlTWFpbiwgICAgICBIRVZDTWFpblRpZXJMZXZlbDUxKTsKKyAgICAgICAgICAgICAgICAgICAgY2Fwcy0+YWRkUHJvZmlsZUxldmVsKEhFVkNQcm9maWxlTWFpblN0aWxsLCBIRVZDTWFpblRpZXJMZXZlbDUxKTsKKyAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKG1lZGlhVHlwZSA9PSBNSU1FVFlQRV9WSURFT19WUDgpIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGVuY29kZXIpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGNhcHMtPmFkZFByb2ZpbGVMZXZlbChWUDhQcm9maWxlTWFpbiwgVlA4TGV2ZWxfVmVyc2lvbjApOworICAgICAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICAgICAgY2Fwcy0+YWRkUHJvZmlsZUxldmVsKFZQOFByb2ZpbGVNYWluLCBWUDhMZXZlbF9WZXJzaW9uMCk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKG1lZGlhVHlwZSA9PSBNSU1FVFlQRV9WSURFT19BVkMpIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGVuY29kZXIpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGNhcHMtPmFkZFByb2ZpbGVMZXZlbChBVkNQcm9maWxlQmFzZWxpbmUsICAgICAgICAgICAgQVZDTGV2ZWw0MSk7CisvLyAgICAgICAgICAgICAgICAgICAgICBjYXBzLT5hZGRQcm9maWxlTGV2ZWwoQVZDUHJvZmlsZUNvbnN0cmFpbmVkQmFzZWxpbmUsIEFWQ0xldmVsNDEpOworICAgICAgICAgICAgICAgICAgICAgICAgY2Fwcy0+YWRkUHJvZmlsZUxldmVsKEFWQ1Byb2ZpbGVNYWluLCAgICAgICAgICAgICAgICBBVkNMZXZlbDQxKTsKKyAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGNhcHMtPmFkZFByb2ZpbGVMZXZlbChBVkNQcm9maWxlQmFzZWxpbmUsICAgICAgICAgICAgQVZDTGV2ZWw1Mik7CisgICAgICAgICAgICAgICAgICAgICAgICBjYXBzLT5hZGRQcm9maWxlTGV2ZWwoQVZDUHJvZmlsZUNvbnN0cmFpbmVkQmFzZWxpbmUsIEFWQ0xldmVsNTIpOworICAgICAgICAgICAgICAgICAgICAgICAgY2Fwcy0+YWRkUHJvZmlsZUxldmVsKEFWQ1Byb2ZpbGVNYWluLCAgICAgICAgICAgICAgICBBVkNMZXZlbDUyKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGNhcHMtPmFkZFByb2ZpbGVMZXZlbChBVkNQcm9maWxlQ29uc3RyYWluZWRIaWdoLCAgICAgQVZDTGV2ZWw1Mik7CisgICAgICAgICAgICAgICAgICAgICAgICBjYXBzLT5hZGRQcm9maWxlTGV2ZWwoQVZDUHJvZmlsZUhpZ2gsICAgICAgICAgICAgICAgIEFWQ0xldmVsNTIpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChtZWRpYVR5cGUgPT0gTUlNRVRZUEVfVklERU9fTVBFRzQpIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGVuY29kZXIpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGNhcHMtPmFkZFByb2ZpbGVMZXZlbChNUEVHNFByb2ZpbGVTaW1wbGUsICBNUEVHNExldmVsMik7CisgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgICAgICBjYXBzLT5hZGRQcm9maWxlTGV2ZWwoTVBFRzRQcm9maWxlU2ltcGxlLCAgTVBFRzRMZXZlbDMpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChtZWRpYVR5cGUgPT0gTUlNRVRZUEVfVklERU9fSDI2MykgeworICAgICAgICAgICAgICAgICAgICBpZiAoZW5jb2RlcikgeworICAgICAgICAgICAgICAgICAgICAgICAgY2Fwcy0+YWRkUHJvZmlsZUxldmVsKEgyNjNQcm9maWxlQmFzZWxpbmUsIEgyNjNMZXZlbDQ1KTsKKyAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGNhcHMtPmFkZFByb2ZpbGVMZXZlbChIMjYzUHJvZmlsZUJhc2VsaW5lLCBIMjYzTGV2ZWwzMCk7CisgICAgICAgICAgICAgICAgICAgICAgICBjYXBzLT5hZGRQcm9maWxlTGV2ZWwoSDI2M1Byb2ZpbGVCYXNlbGluZSwgSDI2M0xldmVsNDUpOworICAgICAgICAgICAgICAgICAgICAgICAgY2Fwcy0+YWRkUHJvZmlsZUxldmVsKEgyNjNQcm9maWxlSVNXVjIsICAgIEgyNjNMZXZlbDMwKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGNhcHMtPmFkZFByb2ZpbGVMZXZlbChIMjYzUHJvZmlsZUlTV1YyLCAgICBIMjYzTGV2ZWw0NSk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKG1lZGlhVHlwZSA9PSBNSU1FVFlQRV9WSURFT19NUEVHMiAmJiAhZW5jb2RlcikgeworICAgICAgICAgICAgICAgICAgICBjYXBzLT5hZGRQcm9maWxlTGV2ZWwoTVBFRzJQcm9maWxlU2ltcGxlLCBNUEVHMkxldmVsSEwpOworICAgICAgICAgICAgICAgICAgICBjYXBzLT5hZGRQcm9maWxlTGV2ZWwoTVBFRzJQcm9maWxlTWFpbiwgICBNUEVHMkxldmVsSEwpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgLy8gVE9ETzogZ2V0IHRoaXMgZnJvbSBpbnRmKCkgYXMgd2VsbCwgYnV0IGhvdyBkbyB3ZSBtYXAgdGhlbSB0bworICAgICAgICAgICAgLy8gTWVkaWFDb2RlYyBjb2xvciBmb3JtYXRzPworICAgICAgICAgICAgaWYgKG1lZGlhVHlwZS5maW5kKCJ2aWRlbyIpICE9IHN0ZDo6c3RyaW5nOjpucG9zKSB7CisgICAgICAgICAgICAgICAgLy8gdmVuZG9yIHZpZGVvIGNvZGVjcyBwcmVmZXIgb3BhcXVlIGZvcm1hdAorICAgICAgICAgICAgICAgIGlmICh0cmFpdC5uYW1lLmZpbmQoImFuZHJvaWQiKSA9PSBzdGQ6OnN0cmluZzo6bnBvcykgeworICAgICAgICAgICAgICAgICAgICBjYXBzLT5hZGRDb2xvckZvcm1hdChDT0xPUl9Gb3JtYXRTdXJmYWNlKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgY2Fwcy0+YWRkQ29sb3JGb3JtYXQoQ09MT1JfRm9ybWF0WVVWNDIwRmxleGlibGUpOworICAgICAgICAgICAgICAgIGNhcHMtPmFkZENvbG9yRm9ybWF0KENPTE9SX0Zvcm1hdFlVVjQyMFBsYW5hcik7CisgICAgICAgICAgICAgICAgY2Fwcy0+YWRkQ29sb3JGb3JtYXQoQ09MT1JfRm9ybWF0WVVWNDIwU2VtaVBsYW5hcik7CisgICAgICAgICAgICAgICAgY2Fwcy0+YWRkQ29sb3JGb3JtYXQoQ09MT1JfRm9ybWF0WVVWNDIwUGFja2VkUGxhbmFyKTsKKyAgICAgICAgICAgICAgICBjYXBzLT5hZGRDb2xvckZvcm1hdChDT0xPUl9Gb3JtYXRZVVY0MjBQYWNrZWRTZW1pUGxhbmFyKTsKKyAgICAgICAgICAgICAgICAvLyBmcmFtZXdvcmsgdmlkZW8gZW5jb2RlcnMgbXVzdCBzdXBwb3J0IHN1cmZhY2UgZm9ybWF0LCB0aG91Z2ggaXQgaXMgdW5jbGVhcgorICAgICAgICAgICAgICAgIC8vIHRoYXQgdGhleSB3aWxsIGJlIGFibGUgdG8gbWFwIGl0IGlmIGl0IGlzIG9wYXF1ZQorICAgICAgICAgICAgICAgIGlmIChlbmNvZGVyICYmIHRyYWl0Lm5hbWUuZmluZCgiYW5kcm9pZCIpICE9IHN0ZDo6c3RyaW5nOjpucG9zKSB7CisgICAgICAgICAgICAgICAgICAgIGNhcHMtPmFkZENvbG9yRm9ybWF0KENPTE9SX0Zvcm1hdFN1cmZhY2UpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKyAgICByZXR1cm4gT0s7Cit9CisKK30gIC8vIG5hbWVzcGFjZSBhbmRyb2lkCisKK2V4dGVybiAiQyIgYW5kcm9pZDo6TWVkaWFDb2RlY0xpc3RCdWlsZGVyQmFzZSAqQ3JlYXRlQnVpbGRlcigpIHsKKyAgICByZXR1cm4gbmV3IGFuZHJvaWQ6OkNvZGVjMkluZm9CdWlsZGVyOworfQorCmRpZmYgLS1naXQgYS9tZWRpYS9jb2RlYzIvc2ZwbHVnaW4vQ29kZWMySW5mb0J1aWxkZXIuaCBiL21lZGlhL2NvZGVjMi9zZnBsdWdpbi9Db2RlYzJJbmZvQnVpbGRlci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMwYzE4OWUKLS0tIC9kZXYvbnVsbAorKysgYi9tZWRpYS9jb2RlYzIvc2ZwbHVnaW4vQ29kZWMySW5mb0J1aWxkZXIuaApAQCAtMCwwICsxLDM0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE4IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KKworI2lmbmRlZiBDT0RFQzJfSU5GT19CVUlMREVSX0hfCisjZGVmaW5lIENPREVDMl9JTkZPX0JVSUxERVJfSF8KKworI2luY2x1ZGUgPG1lZGlhL3N0YWdlZnJpZ2h0L01lZGlhQ29kZWNMaXN0Lmg+CisjaW5jbHVkZSA8dXRpbHMvRXJyb3JzLmg+CisKK25hbWVzcGFjZSBhbmRyb2lkIHsKKworY2xhc3MgQ29kZWMySW5mb0J1aWxkZXIgOiBwdWJsaWMgTWVkaWFDb2RlY0xpc3RCdWlsZGVyQmFzZSB7CitwdWJsaWM6CisgICAgQ29kZWMySW5mb0J1aWxkZXIoKSA9IGRlZmF1bHQ7CisgICAgfkNvZGVjMkluZm9CdWlsZGVyKCkgb3ZlcnJpZGUgPSBkZWZhdWx0OworICAgIHN0YXR1c190IGJ1aWxkTWVkaWFDb2RlY0xpc3QoTWVkaWFDb2RlY0xpc3RXcml0ZXIqIHdyaXRlcikgb3ZlcnJpZGU7Cit9OworCit9ICAvLyBuYW1lc3BhY2UgYW5kcm9pZAorCisjZW5kaWYgIC8vIENPREVDMl9JTkZPX0JVSUxERVJfSF8KZGlmZiAtLWdpdCBhL21lZGlhL2NvZGVjMi9zZnBsdWdpbi9JbnB1dFN1cmZhY2VXcmFwcGVyLmggYi9tZWRpYS9jb2RlYzIvc2ZwbHVnaW4vSW5wdXRTdXJmYWNlV3JhcHBlci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ5YzRlZWMKLS0tIC9kZXYvbnVsbAorKysgYi9tZWRpYS9jb2RlYzIvc2ZwbHVnaW4vSW5wdXRTdXJmYWNlV3JhcHBlci5oCkBAIC0wLDAgKzEsMTA3IEBACisvKgorICogQ29weXJpZ2h0IDIwMTgsIFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KKworI2lmbmRlZiBJTlBVVF9TVVJGQUNFX1dSQVBQRVJfSF8KKyNkZWZpbmUgSU5QVVRfU1VSRkFDRV9XUkFQUEVSX0hfCisKKyNpbmNsdWRlIDxjb2RlYzIvaGlkbC9jbGllbnQuaD4KKyNpbmNsdWRlIDxzeXN0ZW0vZ3JhcGhpY3MuaD4KKworbmFtZXNwYWNlIGFuZHJvaWQgeworCisvKioKKyAqIFdyYXBwZXIgaW50ZXJmYWNlIGFyb3VuZCBJbnB1dFN1cmZhY2UuCisgKi8KK2NsYXNzIElucHV0U3VyZmFjZVdyYXBwZXIgeworcHVibGljOgorICAgIElucHV0U3VyZmFjZVdyYXBwZXIoKQorICAgICAgICA6IG1EYXRhU3BhY2UoSEFMX0RBVEFTUEFDRV9VTktOT1dOKSB7CisgICAgfQorCisgICAgdmlydHVhbCB+SW5wdXRTdXJmYWNlV3JhcHBlcigpID0gZGVmYXVsdDsKKworICAgIC8qKgorICAgICAqIENvbm5lY3QgdGhlIHN1cmZhY2Ugd2l0aCB8Y29tcHwuIEEgc3VyZmFjZSBjYW4KKyAgICAgKiBjb25uZWN0IHRvIGF0IG1vc3Qgb25lIGNvbXBvbmVudCBhdCBhIHRpbWUuCisgICAgICoKKyAgICAgKiBccmV0dXJuIE9LICAgICAgICAgICAgICAgc3VjY2Vzc2Z1bGx5IGNvbm5lY3RlZCB0byB8Y29tcHwKKyAgICAgKiBccmV0dXJuIEFMUkVBRFlfRVhJU1RTICAgYWxyZWFkeSBjb25uZWN0ZWQgdG8gYW5vdGhlciBjb21wb25lbnQuCisgICAgICovCisgICAgdmlydHVhbCBzdGF0dXNfdCBjb25uZWN0KAorICAgICAgICAgICAgY29uc3Qgc3RkOjpzaGFyZWRfcHRyPENvZGVjMkNsaWVudDo6Q29tcG9uZW50PiAmY29tcCkgPSAwOworCisgICAgLyoqCisgICAgICogRGlzY29ubmVjdCB0aGUgc3VyZmFjZSBmcm9tIHRoZSBjb21wb25lbnQgaWYgYW55LgorICAgICAqLworICAgIHZpcnR1YWwgdm9pZCBkaXNjb25uZWN0KCkgPSAwOworCisgICAgLyoqCisgICAgICogU3RhcnQgcHVzaGluZyBidWZmZXJzIHRvIHRoZSBzdXJmYWNlLgorICAgICAqLworICAgIHZpcnR1YWwgc3RhdHVzX3Qgc3RhcnQoKSA9IDA7CisKKyAgICAvKioKKyAgICAgKiBSZWY6IEdyYXBoaWNCdWZmZXJTb3VyY2U6OnNpZ25hbEVuZE9mSW5wdXRTdHJlYW0uCisgICAgICovCisgICAgdmlydHVhbCBzdGF0dXNfdCBzaWduYWxFbmRPZklucHV0U3RyZWFtKCkgPSAwOworCisgICAgLy8vIElucHV0IFN1cmZhY2UgY29uZmlndXJhdGlvbgorICAgIHN0cnVjdCBDb25maWcgeworICAgICAgICAvLyBJTiBQQVJBTVMgKEdCUykKKyAgICAgICAgZmxvYXQgbU1pbkZwczsgLy8gbWluaW11bSBmcHMgKHJlcGVhdCBmcmFtZSB0byBhY2hpZXZlIHRoaXMpCisgICAgICAgIGZsb2F0IG1NYXhGcHM7IC8vIG1heCBmcHMgKHZpYSBmcmFtZSBkcm9wKQorICAgICAgICBmbG9hdCBtQ2FwdHVyZUZwczsgLy8gY2FwdHVyZSBmcHMKKyAgICAgICAgZmxvYXQgbUNvZGVkRnBzOyAgIC8vIGNvZGVkIGZwcworICAgICAgICBib29sIG1TdXNwZW5kZWQ7IC8vIHN1c3BlbmRlZAorICAgICAgICBpbnQ2NF90IG1UaW1lT2Zmc2V0VXM7IC8vIHRpbWUgb2Zmc2V0IChpbnB1dCA9PiBjb2RlYykKKyAgICAgICAgaW50NjRfdCBtU3VzcGVuZEF0VXM7IC8vIHN1c3BlbmQvcmVzdW1lIHRpbWUKKyAgICAgICAgaW50NjRfdCBtU3RhcnRBdFVzOyAvLyBzdGFydCB0aW1lCisgICAgICAgIGJvb2wgbVN0b3BwZWQ7IC8vIHN0b3BwZWQKKyAgICAgICAgaW50NjRfdCBtU3RvcEF0VXM7IC8vIHN0b3AgdGltZQorCisgICAgICAgIC8vIE9VVCBQQVJBTVMgKEdCUykKKyAgICAgICAgaW50NjRfdCBtSW5wdXREZWxheVVzOyAvLyBkZWxheSBiZXR3ZWVuIGVuY29kZXIgaW5wdXQgYW5kIHN1cmZhY2UgaW5wdXQKKworICAgICAgICAvLyBJTiBQQVJBTVMgKENPREVDIFdSQVBQRVIpCisgICAgICAgIGZsb2F0IG1GaXhlZEFkanVzdGVkRnBzOyAvLyBmaXhlZCBmcHMgdmlhIFBUUyBtYW5pcHVsYXRpb24KKyAgICAgICAgZmxvYXQgbU1pbkFkanVzdGVkRnBzOyAvLyBtaW5pbXVtIGZwcyB2aWEgUFRTIG1hbmlwdWxhdGlvbgorICAgIH07CisKKyAgICAvKioKKyAgICAgKiBDb25maWd1cmVzIGlucHV0IHN1cmZhY2UuCisgICAgICoKKyAgICAgKiBccGFyYW0gY29uZmlnIGNvbmZpZ3VyYXRpb24uIFRoaXMgY2FuIGJlIHVwZGF0ZWQgZHVyaW5nIHRoaXMgY2FsbCB0byBwcm92aWRlIG91dHB1dAorICAgICAqICAgICAgICAgICAgICAgcGFyYW1ldGVycywgYnV0IG5vdCB0byBwcm92aWRlIGNvbmZpZ3VyZWQgcGFyYW1ldGVycyAodG8gYXZvaWQgY29udGludWFsbHkKKyAgICAgKiAgICAgICAgICAgICAgIHJlY29uZmlndXJpbmcpCisgICAgICovCisgICAgdmlydHVhbCBzdGF0dXNfdCBjb25maWd1cmUoQ29uZmlnICZjb25maWcpID0gMDsKKworICAgIC8qKgorICAgICAqIENvbmZpZ3VyZXMgZGVzaXJlZCBkYXRhIHNwYWNlLgorICAgICAqCisgICAgICogXHBhcmFtIGRhdGFTcGFjZSBkZXNpcmVkIGRhdGEgc3BhY2UKKyAgICAgKi8KKyAgICBpbmxpbmUgdm9pZCBzZXREYXRhU3BhY2UoYW5kcm9pZF9kYXRhc3BhY2UgZGF0YVNwYWNlKSB7CisgICAgICAgIG1EYXRhU3BhY2UgPSBkYXRhU3BhY2U7CisgICAgfQorCitwcm90ZWN0ZWQ6CisgICAgYW5kcm9pZF9kYXRhc3BhY2UgbURhdGFTcGFjZTsKK307CisKK30gIC8vIG5hbWVzcGFjZSBhbmRyb2lkCisKKyNlbmRpZiAgLy8gSU5QVVRfU1VSRkFDRV9XUkFQUEVSX0hfCmRpZmYgLS1naXQgYS9tZWRpYS9jb2RlYzIvc2ZwbHVnaW4vUmVmbGVjdGVkUGFyYW1VcGRhdGVyLmNwcCBiL21lZGlhL2NvZGVjMi9zZnBsdWdpbi9SZWZsZWN0ZWRQYXJhbVVwZGF0ZXIuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg4MGQ0YTUKLS0tIC9kZXYvbnVsbAorKysgYi9tZWRpYS9jb2RlYzIvc2ZwbHVnaW4vUmVmbGVjdGVkUGFyYW1VcGRhdGVyLmNwcApAQCAtMCwwICsxLDU3NSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxOCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCisKKy8vI2RlZmluZSBMT0dfTkRFQlVHIDAKKyNkZWZpbmUgTE9HX1RBRyAiUmVmbGVjdGVkUGFyYW1VcGRhdGVyIgorI2luY2x1ZGUgPHV0aWxzL0xvZy5oPgorCisjaW5jbHVkZSA8aW9zdHJlYW0+CisjaW5jbHVkZSA8c2V0PgorI2luY2x1ZGUgPHNzdHJlYW0+CisKKyNpbmNsdWRlIDxDMkRlYnVnLmg+CisjaW5jbHVkZSA8QzJQYXJhbUludGVybmFsLmg+CisKKyNpbmNsdWRlIDxtZWRpYS9zdGFnZWZyaWdodC9mb3VuZGF0aW9uL0FCdWZmZXIuaD4KKyNpbmNsdWRlIDxtZWRpYS9zdGFnZWZyaWdodC9mb3VuZGF0aW9uL0FEZWJ1Zy5oPgorI2luY2x1ZGUgPG1lZGlhL3N0YWdlZnJpZ2h0L2ZvdW5kYXRpb24vQVN0cmluZy5oPgorI2luY2x1ZGUgPG1lZGlhL3N0YWdlZnJpZ2h0L2ZvdW5kYXRpb24vaGV4ZHVtcC5oPgorCisjaW5jbHVkZSAiUmVmbGVjdGVkUGFyYW1VcGRhdGVyLmgiCisKK25hbWVzcGFjZSBhbmRyb2lkIHsKKworc3RkOjpzdHJpbmcgUmVmbGVjdGVkUGFyYW1VcGRhdGVyOjpEaWN0OjpkZWJ1Z1N0cmluZyhzaXplX3QgaW5kZW50XykgY29uc3QgeworICAgIHN0ZDo6c3RyaW5nIGluZGVudChpbmRlbnRfLCAnICcpOworICAgIHN0ZDo6c3RyaW5nc3RyZWFtIHM7CisgICAgcyA8PCAiRGljdCB7IiA8PCBzdGQ6OmVuZGw7CisKKyAgICBmb3IgKGNvbnN0IGF1dG8gJml0IDogKnRoaXMpIHsKKyAgICAgICAgcyA8PCBpbmRlbnQgPDwgIiAgIjsKKworICAgICAgICBDMlZhbHVlIGMyVmFsdWU7CisgICAgICAgIGludDMyX3QgaW50MzJWYWx1ZTsKKyAgICAgICAgdWludDMyX3QgdWludDMyVmFsdWU7CisgICAgICAgIGludDY0X3QgaW50NjRWYWx1ZTsKKyAgICAgICAgdWludDY0X3QgdWludDY0VmFsdWU7CisgICAgICAgIGZsb2F0IGZsb2F0VmFsdWU7CisgICAgICAgIHNwPEFCdWZmZXI+IGJ1ZlZhbHVlOworICAgICAgICBBU3RyaW5nIHN0clZhbHVlOworICAgICAgICBpZiAoaXQuc2Vjb25kLmZpbmQoJmMyVmFsdWUpKSB7CisgICAgICAgICAgICBzd2l0Y2ggKGMyVmFsdWUudHlwZSgpKSB7CisgICAgICAgICAgICAgICAgY2FzZSBDMlZhbHVlOjpJTlQzMjoKKyAgICAgICAgICAgICAgICAgICAgKHZvaWQpYzJWYWx1ZS5nZXQoJmludDMyVmFsdWUpOworICAgICAgICAgICAgICAgICAgICBzIDw8ICJjMjo6aTMyICIgPDwgaXQuZmlyc3QgPDwgIiA9ICIgPDwgaW50MzJWYWx1ZTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgY2FzZSBDMlZhbHVlOjpVSU5UMzI6CisgICAgICAgICAgICAgICAgICAgICh2b2lkKWMyVmFsdWUuZ2V0KCZ1aW50MzJWYWx1ZSk7CisgICAgICAgICAgICAgICAgICAgIHMgPDwgImMyOjp1MzIgIiA8PCBpdC5maXJzdCA8PCAiID0gIiA8PCB1aW50MzJWYWx1ZTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgY2FzZSBDMlZhbHVlOjpDTlRSMzI6CisgICAgICAgICAgICAgICAgICAgIC8vIGR1bXAgY291bnRlciB2YWx1ZSBhcyB1bnNpZ25lZAorICAgICAgICAgICAgICAgICAgICAodm9pZCljMlZhbHVlLmdldCgoYzJfY250cjMyX3QqKSZ1aW50MzJWYWx1ZSk7CisgICAgICAgICAgICAgICAgICAgIHMgPDwgImMyOjpjMzIgIiA8PCBpdC5maXJzdCA8PCAiID0gIiA8PCB1aW50MzJWYWx1ZTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgY2FzZSBDMlZhbHVlOjpJTlQ2NDoKKyAgICAgICAgICAgICAgICAgICAgKHZvaWQpYzJWYWx1ZS5nZXQoJmludDY0VmFsdWUpOworICAgICAgICAgICAgICAgICAgICBzIDw8ICJjMjo6aTY0ICIgPDwgaXQuZmlyc3QgPDwgIiA9ICIgPDwgaW50NjRWYWx1ZTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgY2FzZSBDMlZhbHVlOjpVSU5UNjQ6CisgICAgICAgICAgICAgICAgICAgICh2b2lkKWMyVmFsdWUuZ2V0KCZ1aW50NjRWYWx1ZSk7CisgICAgICAgICAgICAgICAgICAgIHMgPDwgImMyOjp1NjQgIiA8PCBpdC5maXJzdCA8PCAiID0gIiA8PCB1aW50NjRWYWx1ZTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgY2FzZSBDMlZhbHVlOjpDTlRSNjQ6CisgICAgICAgICAgICAgICAgICAgIC8vIGR1bXAgY291bnRlciB2YWx1ZSBhcyB1bnNpZ25lZAorICAgICAgICAgICAgICAgICAgICAodm9pZCljMlZhbHVlLmdldCgoYzJfY250cjY0X3QqKSZ1aW50NjRWYWx1ZSk7CisgICAgICAgICAgICAgICAgICAgIHMgPDwgImMyOjpjNjQgIiA8PCBpdC5maXJzdCA8PCAiID0gIiA8PCB1aW50NjRWYWx1ZTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgY2FzZSBDMlZhbHVlOjpGTE9BVDoKKyAgICAgICAgICAgICAgICAgICAgKHZvaWQpYzJWYWx1ZS5nZXQoJmZsb2F0VmFsdWUpOworICAgICAgICAgICAgICAgICAgICBzIDw8ICJjMjo6ZmxvYXQgIiA8PCBpdC5maXJzdCA8PCAiID0gIiA8PCBmbG9hdFZhbHVlOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgICAgICAvLyBkdW1wIHVuc3VwcG9ydGVkIHZhbHVlcyBmb3IgZGVidWdnaW5nLCB0aGVzZSBzaG91bGQgbm90IGJlIHVzZWQKKyAgICAgICAgICAgICAgICAgICAgcyA8PCAiYzI6OnVuc3VwcG9ydGVkICIgPDwgaXQuZmlyc3Q7CisgICAgICAgICAgICB9CisgICAgICAgIH0gZWxzZSBpZiAoaXQuc2Vjb25kLmZpbmQoJmludDMyVmFsdWUpKSB7CisgICAgICAgICAgICBzIDw8ICJpbnQzMl90ICIgPDwgaXQuZmlyc3QgPDwgIiA9ICIgPDwgaW50MzJWYWx1ZTsKKyAgICAgICAgfSBlbHNlIGlmIChpdC5zZWNvbmQuZmluZCgmaW50NjRWYWx1ZSkpIHsKKyAgICAgICAgICAgIHMgPDwgImludDY0X3QgIiA8PCBpdC5maXJzdCA8PCAiID0gIiA8PCBpbnQ2NFZhbHVlOworICAgICAgICB9IGVsc2UgaWYgKGl0LnNlY29uZC5maW5kKCZzdHJWYWx1ZSkpIHsKKyAgICAgICAgICAgIHMgPDwgInN0cmluZyAiIDw8IGl0LmZpcnN0IDw8ICIgPSBcIiIgPDwgc3RyVmFsdWUuY19zdHIoKSA8PCAiXCIiOworICAgICAgICB9IGVsc2UgaWYgKGl0LnNlY29uZC5maW5kKCZidWZWYWx1ZSkpIHsKKyAgICAgICAgICAgIHMgPDwgIkJ1ZmZlciAiIDw8IGl0LmZpcnN0IDw8ICIgPSAiOworICAgICAgICAgICAgaWYgKGJ1ZlZhbHVlICE9IG51bGxwdHIgJiYgYnVmVmFsdWUtPmRhdGEoKSAhPSBudWxscHRyICYmIGJ1ZlZhbHVlLT5zaXplKCkgPD0gNjQpIHsKKyAgICAgICAgICAgICAgICBzIDw8ICJ7IiA8PCBzdGQ6OmVuZGw7CisgICAgICAgICAgICAgICAgQVN0cmluZyB0bXA7CisgICAgICAgICAgICAgICAgaGV4ZHVtcChidWZWYWx1ZS0+ZGF0YSgpLCBidWZWYWx1ZS0+c2l6ZSgpLCBpbmRlbnRfICsgNCwgJnRtcCk7CisgICAgICAgICAgICAgICAgcyA8PCB0bXAuY19zdHIoKSA8PCBpbmRlbnQgPDwgIiAgfSI7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIHMgPDwgKHZvaWQqKWJ1ZlZhbHVlLmdldCgpOworICAgICAgICAgICAgfQorICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgLy8gZHVtcCB1bnN1cHBvcnRlZCB2YWx1ZXMgZm9yIGRlYnVnZ2luZywgdGhpcyBzaG91bGQgbmV2ZXIgaGFwcGVuLgorICAgICAgICAgICAgcyA8PCAidW5zdXBwb3J0ZWQgIiA8PCBpdC5maXJzdDsKKyAgICAgICAgfQorICAgICAgICBzIDw8IHN0ZDo6ZW5kbDsKKyAgICB9CisgICAgcyA8PCBpbmRlbnQgPDwgIn0iOworCisgICAgcmV0dXJuIHMuc3RyKCk7Cit9CisKK3ZvaWQgUmVmbGVjdGVkUGFyYW1VcGRhdGVyOjphZGRQYXJhbURlc2MoCisgICAgICAgIGNvbnN0IHN0ZDo6c2hhcmVkX3B0cjxDMlBhcmFtUmVmbGVjdG9yPiAmcmVmbGVjdG9yLAorICAgICAgICBjb25zdCBzdGQ6OnZlY3RvcjxzdGQ6OnNoYXJlZF9wdHI8QzJQYXJhbURlc2NyaXB0b3I+PiAmcGFyYW1EZXNjcykgeworICAgIGZvciAoY29uc3Qgc3RkOjpzaGFyZWRfcHRyPEMyUGFyYW1EZXNjcmlwdG9yPiAmZGVzYyA6IHBhcmFtRGVzY3MpIHsKKyAgICAgICAgc3RkOjp1bmlxdWVfcHRyPEMyU3RydWN0RGVzY3JpcHRvcj4gc3RydWN0RGVzYyA9IHJlZmxlY3Rvci0+ZGVzY3JpYmUoCisgICAgICAgICAgICAgICAgZGVzYy0+aW5kZXgoKS5jb3JlSW5kZXgoKSk7CisgICAgICAgIGlmIChzdHJ1Y3REZXNjID09IG51bGxwdHIpIHsKKyAgICAgICAgICAgIEFMT0dEKCJDb3VsZCBub3QgZGVzY3JpYmUgJXMiLCBkZXNjLT5uYW1lKCkuY19zdHIoKSk7CisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQorICAgICAgICBhZGRQYXJhbURlc2MoZGVzYywgKnN0cnVjdERlc2MsIHJlZmxlY3RvciwgdHJ1ZSAvKiBtYXJrVmVuZG9yICovKTsKKyAgICB9CisKKyAgICAvLyBURU1QOiBhbHNvIGFkZCB2ZW5kb3IgcGFyYW1ldGVycyBhcyBub24tdmVuZG9yCisgICAgZm9yIChjb25zdCBzdGQ6OnNoYXJlZF9wdHI8QzJQYXJhbURlc2NyaXB0b3I+ICZkZXNjIDogcGFyYW1EZXNjcykgeworICAgICAgICBpZiAoIWRlc2MtPmluZGV4KCkuaXNWZW5kb3IoKSkgeworICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIH0KKyAgICAgICAgc3RkOjp1bmlxdWVfcHRyPEMyU3RydWN0RGVzY3JpcHRvcj4gc3RydWN0RGVzYyA9IHJlZmxlY3Rvci0+ZGVzY3JpYmUoCisgICAgICAgICAgICAgICAgZGVzYy0+aW5kZXgoKS5jb3JlSW5kZXgoKSk7CisgICAgICAgIGlmIChzdHJ1Y3REZXNjKSB7CisgICAgICAgICAgICBhZGRQYXJhbURlc2MoZGVzYywgKnN0cnVjdERlc2MsIHJlZmxlY3RvciwgZmFsc2UgLyogbWFya1ZlbmRvciAqLyk7CisgICAgICAgIH0KKyAgICB9Cit9CisKK3ZvaWQgUmVmbGVjdGVkUGFyYW1VcGRhdGVyOjphZGRQYXJhbVN0cnVjdERlc2MoCisgICAgICAgIHN0ZDo6c2hhcmVkX3B0cjxDMlBhcmFtRGVzY3JpcHRvcj4gZGVzYywKKyAgICAgICAgQzJTdHJpbmcgcGF0aCwKKyAgICAgICAgc2l6ZV90IG9mZnNldCwKKyAgICAgICAgY29uc3QgQzJTdHJ1Y3REZXNjcmlwdG9yICZzdHJ1Y3REZXNjLAorICAgICAgICBjb25zdCBzdGQ6OnNoYXJlZF9wdHI8QzJQYXJhbVJlZmxlY3Rvcj4gJnJlZmxlY3RvcikgeworICAgIGZvciAoYXV0byBpdCA9IHN0cnVjdERlc2MuYmVnaW4oKTsgaXQgIT0gc3RydWN0RGVzYy5lbmQoKTsgKytpdCkgeworICAgICAgICBDMlN0cmluZyBmaWVsZE5hbWUgPSBwYXRoICsgIi4iICsgaXQtPm5hbWUoKTsKKyAgICAgICAgaWYgKGl0LT50eXBlKCkgJiBDMkZpZWxkRGVzY3JpcHRvcjo6U1RSVUNUX0ZMQUcpIHsKKyAgICAgICAgICAgIGlmIChyZWZsZWN0b3IgPT0gbnVsbHB0ciB8fCBpdC0+ZXh0ZW50KCkgIT0gMSkgeworICAgICAgICAgICAgICAgIEFMT0dEKCJpZ25vcmVkIHN0cnVjdCBmaWVsZCAlcyIsIGZpZWxkTmFtZS5jX3N0cigpKTsKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHN0ZDo6dW5pcXVlX3B0cjxDMlN0cnVjdERlc2NyaXB0b3I+IHN0cnVjdERlc2NfID0gcmVmbGVjdG9yLT5kZXNjcmliZSgKKyAgICAgICAgICAgICAgICAgICAgQzJQYXJhbTo6Q29yZUluZGV4KGl0LT50eXBlKCkpLmNvcmVJbmRleCgpKTsKKyAgICAgICAgICAgIGlmIChzdHJ1Y3REZXNjXyA9PSBudWxscHRyKSB7CisgICAgICAgICAgICAgICAgQUxPR0QoIkNvdWxkIG5vdCBkZXNjcmliZSBzdHJ1Y3R1cmUgb2YgJXMiLCBmaWVsZE5hbWUuY19zdHIoKSk7CisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBhZGRQYXJhbVN0cnVjdERlc2MoZGVzYywgZmllbGROYW1lLCBvZmZzZXQgKyBfQzJQYXJhbUluc3BlY3Rvcjo6R2V0T2Zmc2V0KCppdCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKnN0cnVjdERlc2NfLCByZWZsZWN0b3IpOworICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIH0KKworICAgICAgICAvLyB2ZXJpZnkgZXh0ZW50IGFuZCB0eXBlCisgICAgICAgIHN3aXRjaCAoaXQtPnR5cGUoKSkgeworICAgICAgICAgICAgY2FzZSBDMkZpZWxkRGVzY3JpcHRvcjo6SU5UMzI6CisgICAgICAgICAgICBjYXNlIEMyRmllbGREZXNjcmlwdG9yOjpVSU5UMzI6CisgICAgICAgICAgICBjYXNlIEMyRmllbGREZXNjcmlwdG9yOjpDTlRSMzI6CisgICAgICAgICAgICBjYXNlIEMyRmllbGREZXNjcmlwdG9yOjpJTlQ2NDoKKyAgICAgICAgICAgIGNhc2UgQzJGaWVsZERlc2NyaXB0b3I6OlVJTlQ2NDoKKyAgICAgICAgICAgIGNhc2UgQzJGaWVsZERlc2NyaXB0b3I6OkNOVFI2NDoKKyAgICAgICAgICAgIGNhc2UgQzJGaWVsZERlc2NyaXB0b3I6OkZMT0FUOgorICAgICAgICAgICAgICAgIGlmIChpdC0+ZXh0ZW50KCkgIT0gMSkgeworICAgICAgICAgICAgICAgICAgICBBTE9HRCgiZXh0ZW50KCkgIT0gMSBmb3Igc2luZ2xlIHZhbHVlIHR5cGU6ICVzIiwgZmllbGROYW1lLmNfc3RyKCkpOworICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIEMyRmllbGREZXNjcmlwdG9yOjpTVFJJTkc6CisgICAgICAgICAgICBjYXNlIEMyRmllbGREZXNjcmlwdG9yOjpCTE9COgorICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgIEFMT0dEKCJVbnJlY29nbml6ZWQgdHlwZTogJXMiLCBmaWVsZE5hbWUuY19zdHIoKSk7CisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIH0KKworICAgICAgICBBTE9HVigiJXMgcmVnaXN0ZXJlZCIsIGZpZWxkTmFtZS5jX3N0cigpKTsKKyAgICAgICAgLy8gVE9ETzogZ2V0IHRoZSBwcm9wZXIgc2l6ZSBieSBpdGVyYXRpbmcgdGhyb3VnaCB0aGUgZmllbGRzLgorICAgICAgICAvLyBvbmx5IGluc2VydCBmaWVsZHMgdGhlIHZlcnkgZmlyc3QgdGltZQorICAgICAgICBtTWFwLmVtcGxhY2UoZmllbGROYW1lLCBGaWVsZERlc2MgeworICAgICAgICAgICAgZGVzYywKKyAgICAgICAgICAgIHN0ZDo6bWFrZV91bmlxdWU8QzJGaWVsZERlc2NyaXB0b3I+KAorICAgICAgICAgICAgICAgICAgICBpdC0+dHlwZSgpLCBpdC0+ZXh0ZW50KCksIGl0LT5uYW1lKCksCisgICAgICAgICAgICAgICAgICAgIF9DMlBhcmFtSW5zcGVjdG9yOjpHZXRPZmZzZXQoKml0KSwKKyAgICAgICAgICAgICAgICAgICAgX0MyUGFyYW1JbnNwZWN0b3I6OkdldFNpemUoKml0KSksCisgICAgICAgICAgICBvZmZzZXQsCisgICAgICAgIH0pOworICAgIH0KK30KKwordm9pZCBSZWZsZWN0ZWRQYXJhbVVwZGF0ZXI6OmFkZFBhcmFtRGVzYygKKyAgICAgICAgc3RkOjpzaGFyZWRfcHRyPEMyUGFyYW1EZXNjcmlwdG9yPiBkZXNjLCBjb25zdCBDMlN0cnVjdERlc2NyaXB0b3IgJnN0cnVjdERlc2MsCisgICAgICAgIGNvbnN0IHN0ZDo6c2hhcmVkX3B0cjxDMlBhcmFtUmVmbGVjdG9yPiAmcmVmbGVjdG9yLCBib29sIG1hcmtWZW5kb3IpIHsKKyAgICBDMlN0cmluZyBwYXJhbU5hbWUgPSBkZXNjLT5uYW1lKCk7CisKKyAgICAvLyBwcmVmaXggdmVuZG9yIHBhcmFtZXRlcnMKKyAgICBpZiAoZGVzYy0+aW5kZXgoKS5pc1ZlbmRvcigpICYmIG1hcmtWZW5kb3IpIHsKKyAgICAgICAgcGFyYW1OYW1lID0gInZlbmRvci4iICsgcGFyYW1OYW1lOworICAgIH0KKyAgICBtUGFyYW1OYW1lcy5lbXBsYWNlKGRlc2MtPmluZGV4KCksIHBhcmFtTmFtZSk7CisKKyAgICAvLyBhbHNvIGFsbG93IHNldHRpbmcgd2hvbGUgcGFyYW1ldGVycyBpbiBhIGJpbmFyeSBmYXNoaW9uIHZpYSBCeXRlQnVmZmVyCisgICAgLy8gdGhpcyBpcyBvcHQtaW4gZm9yIG5vdworICAgIGF1dG8gaXQgPSBtV2hvbGVQYXJhbXMuZmluZChwYXJhbU5hbWUpOworICAgIGlmIChpdCAhPSBtV2hvbGVQYXJhbXMuZW5kKCkgJiYgaXQtPnNlY29uZC5jb3JlSW5kZXgoKSA9PSBkZXNjLT5pbmRleCgpLmNvcmVJbmRleCgpKSB7CisgICAgICAgIG1NYXAuZW1wbGFjZShwYXJhbU5hbWUsIEZpZWxkRGVzY3sgZGVzYywgbnVsbHB0ciwgMCAvKiBvZmZzZXQgKi8gfSk7CisgICAgICAgIC8vIGRvbid0IGFkZCBmaWVsZHMgb2Ygd2hvbGUgcGFyYW1ldGVycy4KKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGFkZFBhcmFtU3RydWN0RGVzYyhkZXNjLCBwYXJhbU5hbWUsIDAgLyogb2Zmc2V0ICovLCBzdHJ1Y3REZXNjLCByZWZsZWN0b3IpOworfQorCit2b2lkIFJlZmxlY3RlZFBhcmFtVXBkYXRlcjo6c3VwcG9ydFdob2xlUGFyYW0oc3RkOjpzdHJpbmcgbmFtZSwgQzJQYXJhbTo6Q29yZUluZGV4IGluZGV4KSB7CisgICAgbVdob2xlUGFyYW1zLmVtcGxhY2UobmFtZSwgaW5kZXgpOworfQorCitzdGQ6OnN0cmluZyBSZWZsZWN0ZWRQYXJhbVVwZGF0ZXI6OmdldFBhcmFtTmFtZShDMlBhcmFtOjpJbmRleCBpbmRleCkgY29uc3QgeworICAgIGF1dG8gaXQgPSBtUGFyYW1OYW1lcy5maW5kKGluZGV4KTsKKyAgICBpZiAoaXQgIT0gbVBhcmFtTmFtZXMuZW5kKCkpIHsKKyAgICAgICAgcmV0dXJuIGl0LT5zZWNvbmQ7CisgICAgfQorCisgICAgc3RkOjpzdHJpbmdzdHJlYW0gcmV0OworICAgIHJldCA8PCAiPHVua25vd24gIiA8PCBpbmRleCA8PCAiPiI7CisgICAgcmV0dXJuIHJldC5zdHIoKTsKK30KKwordm9pZCBSZWZsZWN0ZWRQYXJhbVVwZGF0ZXI6OmdldFBhcmFtSW5kaWNlc0Zyb21NZXNzYWdlKAorICAgICAgICBjb25zdCBEaWN0ICZwYXJhbXMsCisgICAgICAgIHN0ZDo6dmVjdG9yPEMyUGFyYW06OkluZGV4PiAqdmVjIC8qIG5vbm51bGwgKi8pIGNvbnN0IHsKKyAgICBDSEVDSyh2ZWMgIT0gbnVsbHB0cik7CisgICAgdmVjLT5jbGVhcigpOworICAgIHN0ZDo6c2V0PEMyUGFyYW06OkluZGV4PiBpbmRpY2VzOworICAgIHBhcnNlTWVzc2FnZUFuZERvV29yaygKKyAgICAgICAgICAgIHBhcmFtcywKKyAgICAgICAgICAgIFsmaW5kaWNlc10oY29uc3Qgc3RkOjpzdHJpbmcgJiwgY29uc3QgRmllbGREZXNjICZkZXNjLCBjb25zdCB2b2lkICosIHNpemVfdCkgeworICAgICAgICAgICAgICAgIGluZGljZXMuaW5zZXJ0KGRlc2MucGFyYW1EZXNjLT5pbmRleCgpKTsKKyAgICAgICAgICAgIH0pOworICAgIGZvciAoY29uc3QgQzJQYXJhbTo6SW5kZXggJmluZGV4IDogaW5kaWNlcykgeworICAgICAgICB2ZWMtPnB1c2hfYmFjayhpbmRleCk7CisgICAgfQorfQorCit2b2lkIFJlZmxlY3RlZFBhcmFtVXBkYXRlcjo6Z2V0UGFyYW1JbmRpY2VzRm9yS2V5cygKKyAgICAgICAgY29uc3Qgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+ICZrZXlzLAorICAgICAgICBzdGQ6OnZlY3RvcjxDMlBhcmFtOjpJbmRleD4gKnZlYyAvKiBub25udWxsICovKSBjb25zdCB7CisgICAgQ0hFQ0sodmVjICE9IG51bGxwdHIpOworICAgIHZlYy0+Y2xlYXIoKTsKKyAgICBzdGQ6OnNldDxDMlBhcmFtOjpJbmRleD4gaW5kaWNlczsKKworICAgIHN0ZDo6c2V0PHN0ZDo6c3RyaW5nPiBrZXlNYXAoa2V5cy5iZWdpbigpLCBrZXlzLmVuZCgpKTsKKworICAgIEFMT0dWKCJpbiBnZXRQYXJhbUluZGljZXNGb3JLZXlzIHdpdGggJXp1IGtleXMgYW5kIG1hcCBvZiAlenUgZW50cmllcyIsCisgICAgICAgICAgICBrZXlNYXAuc2l6ZSgpLCBtTWFwLnNpemUoKSk7CisgICAgZm9yIChjb25zdCBzdGQ6OnBhaXI8Y29uc3Qgc3RkOjpzdHJpbmcsIEZpZWxkRGVzYz4gJmt2IDogbU1hcCkgeworICAgICAgICBjb25zdCBzdGQ6OnN0cmluZyAmbmFtZSA9IGt2LmZpcnN0OworICAgICAgICBjb25zdCBGaWVsZERlc2MgJmRlc2MgPSBrdi5zZWNvbmQ7CisgICAgICAgIEFMT0dWKCJjb3VudCBvZiAlcyBpcyAlenUiLCBuYW1lLmNfc3RyKCksIGtleU1hcC5jb3VudChuYW1lKSk7CisgICAgICAgIGlmIChrZXlNYXAuY291bnQobmFtZSkgPiAwKSB7CisgICAgICAgICAgICBpbmRpY2VzLmluc2VydChkZXNjLnBhcmFtRGVzYy0+aW5kZXgoKSk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBmb3IgKGNvbnN0IEMyUGFyYW06OkluZGV4ICZpbmRleCA6IGluZGljZXMpIHsKKyAgICAgICAgdmVjLT5wdXNoX2JhY2soaW5kZXgpOworICAgIH0KK30KKwordm9pZCBSZWZsZWN0ZWRQYXJhbVVwZGF0ZXI6OnVwZGF0ZVBhcmFtc0Zyb21NZXNzYWdlKAorICAgICAgICBjb25zdCBEaWN0ICZwYXJhbXMsCisgICAgICAgIHN0ZDo6dmVjdG9yPHN0ZDo6dW5pcXVlX3B0cjxDMlBhcmFtPj4gKnZlYyAvKiBub25udWxsICovKSBjb25zdCB7CisgICAgQ0hFQ0sodmVjICE9IG51bGxwdHIpOworCisgICAgc3RkOjptYXA8QzJQYXJhbTo6SW5kZXgsIHN0ZDo6dW5pcXVlX3B0cjxDMlBhcmFtPio+IHBhcmFtc01hcDsKKyAgICBmb3IgKHN0ZDo6dW5pcXVlX3B0cjxDMlBhcmFtPiAmcGFyYW0gOiAqdmVjKSB7CisgICAgICAgIGlmIChwYXJhbSAmJiAqcGFyYW0pIHsKKyAgICAgICAgICAgIHBhcmFtc01hcFtwYXJhbS0+aW5kZXgoKV0gPSAmcGFyYW07CisgICAgICAgIH0KKyAgICB9CisKKyAgICBwYXJzZU1lc3NhZ2VBbmREb1dvcmsoCisgICAgICAgICAgICBwYXJhbXMsCisgICAgICAgICAgICBbJnBhcmFtc01hcF0oY29uc3Qgc3RkOjpzdHJpbmcgJm5hbWUsIGNvbnN0IEZpZWxkRGVzYyAmZGVzYywgY29uc3Qgdm9pZCAqcHRyLCBzaXplX3Qgc2l6ZSkgeworICAgICAgICAgICAgICAgIHN0ZDo6dW5pcXVlX3B0cjxDMlBhcmFtPiAqcGFyYW0gPSBudWxscHRyOworICAgICAgICAgICAgICAgIGF1dG8gcGFyYW1JdCA9IHBhcmFtc01hcC5maW5kKGRlc2MucGFyYW1EZXNjLT5pbmRleCgpKTsKKyAgICAgICAgICAgICAgICBpZiAocGFyYW1JdCA9PSBwYXJhbXNNYXAuZW5kKCkpIHsKKyAgICAgICAgICAgICAgICAgICAgQUxPR0QoIiVzIGZvdW5kLCBidXQgcGFyYW0gIyVkIGlzbid0IHByZXNlbnQgdG8gdXBkYXRlIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lLmNfc3RyKCksIChpbnQzMl90KWRlc2MucGFyYW1EZXNjLT5pbmRleCgpKTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBwYXJhbSA9IHBhcmFtSXQtPnNlY29uZDsKKworICAgICAgICAgICAgICAgIHN0cnVjdCBfQzJQYXJhbSA6IHB1YmxpYyBDMlBhcmFtIHsKKyAgICAgICAgICAgICAgICAgICAgdXNpbmcgQzJQYXJhbTo6QzJQYXJhbTsKKyAgICAgICAgICAgICAgICAgICAgX0MyUGFyYW0odWludDMyX3Qgc2l6ZSwgdWludDMyX3QgaW5kZXgpIDogQzJQYXJhbShzaXplLCBpbmRleCkgeyB9CisgICAgICAgICAgICAgICAgfTsKKworICAgICAgICAgICAgICAgIC8vIHdlIHdpbGwgaGFuZGxlIHdob2xlIHBhcmFtIHVwZGF0ZXMgYXMgcGFydCBvZiBhIGZsZXhpYmxlIHBhcmFtIHVwZGF0ZSB1c2luZworICAgICAgICAgICAgICAgIC8vIGEgemVybyBvZmZzZXQuCisgICAgICAgICAgICAgICAgc2l6ZV90IG9mZnNldCA9IDA7CisgICAgICAgICAgICAgICAgc2l6ZV90IG1pbk9mZnNldCA9IDA7CisKKyAgICAgICAgICAgICAgICAvLyBpZiB0aGlzIGRlc2NyaXB0b3IgaGFzIGEgZmllbGQsIHVzZSB0aGUgb2Zmc2V0IGFuZCBzaXplIGFuZCBlbnN1cmUgdGhhdCBvZmZzZXQKKyAgICAgICAgICAgICAgICAvLyBpcyBub3QgcGFydCBvZiB0aGUgaGVhZGVyCisgICAgICAgICAgICAgICAgaWYgKGRlc2MuZmllbGREZXNjKSB7CisgICAgICAgICAgICAgICAgICAgIG1pbk9mZnNldCA9IHNpemVvZihDMlBhcmFtKTsKKyAgICAgICAgICAgICAgICAgICAgb2Zmc2V0ID0gc2l6ZW9mKEMyUGFyYW0pICsgZGVzYy5vZmZzZXQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICArIF9DMlBhcmFtSW5zcGVjdG9yOjpHZXRPZmZzZXQoKmRlc2MuZmllbGREZXNjKTsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAvLyByZWFsbG9jYXRlIG9yIHRyaW0gZmxleGlibGUgcGFyYW0gKG9yIHdob2xlIHBhcmFtKSBhcyBuZWNlc3NhcnkKKyAgICAgICAgICAgICAgICBpZiAoIWRlc2MuZmllbGREZXNjIC8qIHdob2xlIHBhcmFtICovIHx8IGRlc2MuZmllbGREZXNjLT5leHRlbnQoKSA9PSAwKSB7CisgICAgICAgICAgICAgICAgICAgIC8vIHJlYWxsb2NhdGUgcGFyYW0gaWYgbW9yZSBzcGFjZSBpcyBuZWVkZWQKKyAgICAgICAgICAgICAgICAgICAgaWYgKHBhcmFtLT5nZXQoKS0+c2l6ZSgpIDwgb2Zmc2V0ICsgc2l6ZSkgeworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHNpemUgPiBJTlQzMl9NQVggLSBvZmZzZXQgfHwgb2Zmc2V0IDwgbWluT2Zmc2V0KSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gc2l6ZSB0b28gbG9uZyBvciBvZmZzZXQgdG9vIGVhcmx5IC0gYWJhbmRvbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIEMyUGFyYW0gKm5ld1BhcmFtID0gKEMyUGFyYW0gKik6Om9wZXJhdG9yIG5ldyhvZmZzZXQgKyBzaXplKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIG5ldyAobmV3UGFyYW0pIF9DMlBhcmFtKG9mZnNldCArIHNpemUsIHBhcmFtLT5nZXQoKS0+aW5kZXgoKSk7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAob2Zmc2V0ID4gc2l6ZW9mKEMyUGFyYW0pKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVtY3B5KG5ld1BhcmFtICsgMSwgcGFyYW0tPmdldCgpICsgMSwgb2Zmc2V0IC0gc2l6ZW9mKEMyUGFyYW0pKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIHBhcmFtLT5yZXNldChuZXdQYXJhbSk7CisgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAocGFyYW0tPmdldCgpLT5zaXplKCkgPiBvZmZzZXQgKyBzaXplKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAvLyB0cmltIHBhcmFtZXRlciBzaXplCisgICAgICAgICAgICAgICAgICAgICAgICBfQzJQYXJhbUluc3BlY3Rvcjo6VHJpbVBhcmFtKHBhcmFtLT5nZXQoKSwgb2Zmc2V0ICsgc2l6ZSk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGRlc2MuZmllbGREZXNjLT50eXBlKCkgPT0gQzJGaWVsZERlc2NyaXB0b3I6OkJMT0IpIHsKKyAgICAgICAgICAgICAgICAgICAgLy8gemVybyBmaWxsIGJsb2JzIGlmIHVwZGF0aW5nIHdpdGggc21hbGxlciBibG9iCisgICAgICAgICAgICAgICAgICAgIGlmIChkZXNjLmZpZWxkRGVzYy0+ZXh0ZW50KCkgPiBzaXplKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBtZW1zZXQoKHVpbnQ4X3QgKikocGFyYW0tPmdldCgpKSArIG9mZnNldCArIHNpemUsIDAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVzYy5maWVsZERlc2MtPmV4dGVudCgpIC0gc2l6ZSk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICBtZW1jcHkoKHVpbnQ4X3QgKikocGFyYW0tPmdldCgpKSArIG9mZnNldCwgcHRyLCBzaXplKTsKKyAgICAgICAgICAgIH0pOworfQorCit2b2lkIFJlZmxlY3RlZFBhcmFtVXBkYXRlcjo6cGFyc2VNZXNzYWdlQW5kRG9Xb3JrKAorICAgICAgICBjb25zdCBEaWN0ICZwYXJhbXMsCisgICAgICAgIHN0ZDo6ZnVuY3Rpb248dm9pZChjb25zdCBzdGQ6OnN0cmluZyAmLCBjb25zdCBGaWVsZERlc2MgJiwgY29uc3Qgdm9pZCAqLCBzaXplX3QpPiB3b3JrKSBjb25zdCB7CisgICAgZm9yIChjb25zdCBzdGQ6OnBhaXI8Y29uc3Qgc3RkOjpzdHJpbmcsIEZpZWxkRGVzYz4gJmt2IDogbU1hcCkgeworICAgICAgICBjb25zdCBzdGQ6OnN0cmluZyAmbmFtZSA9IGt2LmZpcnN0OworICAgICAgICBjb25zdCBGaWVsZERlc2MgJmRlc2MgPSBrdi5zZWNvbmQ7CisgICAgICAgIGF1dG8gcGFyYW0gPSBwYXJhbXMuZmluZChuYW1lKTsKKyAgICAgICAgaWYgKHBhcmFtID09IHBhcmFtcy5lbmQoKSkgeworICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIH0KKworICAgICAgICAvLyBoYW5kbGUgd2hvbGUgcGFyYW1ldGVycworICAgICAgICBpZiAoIWRlc2MuZmllbGREZXNjKSB7CisgICAgICAgICAgICBzcDxBQnVmZmVyPiB0bXA7CisgICAgICAgICAgICBpZiAocGFyYW0tPnNlY29uZC5maW5kKCZ0bXApICYmIHRtcCAhPSBudWxscHRyKSB7CisgICAgICAgICAgICAgICAgQzJQYXJhbSAqdG1wQXNQYXJhbSA9IEMyUGFyYW06OkZyb20odG1wLT5kYXRhKCksIHRtcC0+c2l6ZSgpKTsKKyAgICAgICAgICAgICAgICBpZiAodG1wQXNQYXJhbSAmJiB0bXBBc1BhcmFtLT50eXBlKCkudHlwZSgpID09IGRlc2MucGFyYW1EZXNjLT5pbmRleCgpLnR5cGUoKSkgeworICAgICAgICAgICAgICAgICAgICB3b3JrKG5hbWUsIGRlc2MsIHRtcC0+ZGF0YSgpLCB0bXAtPnNpemUoKSk7CisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgQUxPR0QoIlBhcmFtIGJsb2IgZG9lcyBub3QgbWF0Y2ggcGFyYW0gZm9yICclcycgKCVwLCAleCB2cyAleCkiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWUuY19zdHIoKSwgdG1wQXNQYXJhbSwgdG1wQXNQYXJhbSA/IHRtcEFzUGFyYW0tPnR5cGUoKS50eXBlKCkgOiAweERFQUR1LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlc2MucGFyYW1EZXNjLT5pbmRleCgpLnR5cGUoKSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIH0KKworICAgICAgICBpbnQzMl90IGludDMyVmFsdWU7CisgICAgICAgIGludDY0X3QgaW50NjRWYWx1ZTsKKyAgICAgICAgQzJWYWx1ZSBjMlZhbHVlOworCisgICAgICAgIEMyRmllbGREZXNjcmlwdG9yOjp0eXBlX3QgZmllbGRUeXBlID0gZGVzYy5maWVsZERlc2MtPnR5cGUoKTsKKyAgICAgICAgc2l6ZV90IGZpZWxkRXh0ZW50ID0gZGVzYy5maWVsZERlc2MtPmV4dGVudCgpOworICAgICAgICBzd2l0Y2ggKGZpZWxkVHlwZSkgeworICAgICAgICAgICAgY2FzZSBDMkZpZWxkRGVzY3JpcHRvcjo6SU5UMzI6CisgICAgICAgICAgICAgICAgaWYgKChwYXJhbS0+c2Vjb25kLmZpbmQoJmMyVmFsdWUpICYmIGMyVmFsdWUuZ2V0KCZpbnQzMlZhbHVlKSkKKyAgICAgICAgICAgICAgICAgICAgICAgIHx8IHBhcmFtLT5zZWNvbmQuZmluZCgmaW50MzJWYWx1ZSkpIHsKKyAgICAgICAgICAgICAgICAgICAgd29yayhuYW1lLCBkZXNjLCAmaW50MzJWYWx1ZSwgc2l6ZW9mKGludDMyVmFsdWUpKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIEMyRmllbGREZXNjcmlwdG9yOjpVSU5UMzI6CisgICAgICAgICAgICAgICAgaWYgKChwYXJhbS0+c2Vjb25kLmZpbmQoJmMyVmFsdWUpICYmIGMyVmFsdWUuZ2V0KCh1aW50MzJfdCopJmludDMyVmFsdWUpKQorICAgICAgICAgICAgICAgICAgICAgICAgfHwgcGFyYW0tPnNlY29uZC5maW5kKCZpbnQzMlZhbHVlKSkgeworICAgICAgICAgICAgICAgICAgICB3b3JrKG5hbWUsIGRlc2MsICZpbnQzMlZhbHVlLCBzaXplb2YoaW50MzJWYWx1ZSkpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgQzJGaWVsZERlc2NyaXB0b3I6OkNOVFIzMjoKKyAgICAgICAgICAgICAgICBpZiAoKHBhcmFtLT5zZWNvbmQuZmluZCgmYzJWYWx1ZSkgJiYgYzJWYWx1ZS5nZXQoKGMyX2NudHIzMl90KikmaW50MzJWYWx1ZSkpCisgICAgICAgICAgICAgICAgICAgICAgICB8fCBwYXJhbS0+c2Vjb25kLmZpbmQoJmludDMyVmFsdWUpKSB7CisgICAgICAgICAgICAgICAgICAgIHdvcmsobmFtZSwgZGVzYywgJmludDMyVmFsdWUsIHNpemVvZihpbnQzMlZhbHVlKSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBDMkZpZWxkRGVzY3JpcHRvcjo6SU5UNjQ6CisgICAgICAgICAgICAgICAgaWYgKChwYXJhbS0+c2Vjb25kLmZpbmQoJmMyVmFsdWUpICYmIGMyVmFsdWUuZ2V0KCZpbnQ2NFZhbHVlKSkKKyAgICAgICAgICAgICAgICAgICAgICAgIHx8IHBhcmFtLT5zZWNvbmQuZmluZCgmaW50NjRWYWx1ZSkpIHsKKyAgICAgICAgICAgICAgICAgICAgd29yayhuYW1lLCBkZXNjLCAmaW50NjRWYWx1ZSwgc2l6ZW9mKGludDY0VmFsdWUpKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIEMyRmllbGREZXNjcmlwdG9yOjpVSU5UNjQ6CisgICAgICAgICAgICAgICAgaWYgKChwYXJhbS0+c2Vjb25kLmZpbmQoJmMyVmFsdWUpICYmIGMyVmFsdWUuZ2V0KCh1aW50NjRfdCopJmludDY0VmFsdWUpKQorICAgICAgICAgICAgICAgICAgICAgICAgfHwgcGFyYW0tPnNlY29uZC5maW5kKCZpbnQ2NFZhbHVlKSkgeworICAgICAgICAgICAgICAgICAgICB3b3JrKG5hbWUsIGRlc2MsICZpbnQ2NFZhbHVlLCBzaXplb2YoaW50NjRWYWx1ZSkpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgQzJGaWVsZERlc2NyaXB0b3I6OkNOVFI2NDoKKyAgICAgICAgICAgICAgICBpZiAoKHBhcmFtLT5zZWNvbmQuZmluZCgmYzJWYWx1ZSkgJiYgYzJWYWx1ZS5nZXQoKGMyX2NudHI2NF90KikmaW50NjRWYWx1ZSkpCisgICAgICAgICAgICAgICAgICAgICAgICB8fCBwYXJhbS0+c2Vjb25kLmZpbmQoJmludDY0VmFsdWUpKSB7CisgICAgICAgICAgICAgICAgICAgIHdvcmsobmFtZSwgZGVzYywgJmludDY0VmFsdWUsIHNpemVvZihpbnQ2NFZhbHVlKSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBDMkZpZWxkRGVzY3JpcHRvcjo6RkxPQVQ6IHsKKyAgICAgICAgICAgICAgICBmbG9hdCB0bXA7CisgICAgICAgICAgICAgICAgaWYgKHBhcmFtLT5zZWNvbmQuZmluZCgmYzJWYWx1ZSkgJiYgYzJWYWx1ZS5nZXQoJnRtcCkpIHsKKyAgICAgICAgICAgICAgICAgICAgd29yayhuYW1lLCBkZXNjLCAmdG1wLCBzaXplb2YodG1wKSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICAgICAgY2FzZSBDMkZpZWxkRGVzY3JpcHRvcjo6U1RSSU5HOiB7CisgICAgICAgICAgICAgICAgQVN0cmluZyB0bXA7CisgICAgICAgICAgICAgICAgaWYgKCFwYXJhbS0+c2Vjb25kLmZpbmQoJnRtcCkpIHsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGlmIChmaWVsZEV4dGVudCA+IDAgJiYgdG1wLnNpemUoKSA+PSBmaWVsZEV4dGVudCkgeworICAgICAgICAgICAgICAgICAgICBBU3RyaW5nIHRydW5jYXRlZCh0bXAsIDAsIGZpZWxkRXh0ZW50IC0gMSk7CisgICAgICAgICAgICAgICAgICAgIEFMT0dEKCJTdHJpbmcgdmFsdWUgdG9vIGxvbmcgdG8gZml0OiBvcmlnaW5hbCBcIiVzXCIgdHJ1bmNhdGVkIHRvIFwiJXNcIiIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG1wLmNfc3RyKCksIHRydW5jYXRlZC5jX3N0cigpKTsKKyAgICAgICAgICAgICAgICAgICAgdG1wID0gdHJ1bmNhdGVkOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB3b3JrKG5hbWUsIGRlc2MsIHRtcC5jX3N0cigpLCB0bXAuc2l6ZSgpICsgMSk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGNhc2UgQzJGaWVsZERlc2NyaXB0b3I6OkJMT0I6IHsKKyAgICAgICAgICAgICAgICBzcDxBQnVmZmVyPiB0bXA7CisgICAgICAgICAgICAgICAgaWYgKCFwYXJhbS0+c2Vjb25kLmZpbmQoJnRtcCkgfHwgdG1wID09IG51bGxwdHIpIHsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgaWYgKGZpZWxkRXh0ZW50ID4gMCAmJiB0bXAtPnNpemUoKSA+IGZpZWxkRXh0ZW50KSB7CisgICAgICAgICAgICAgICAgICAgIEFMT0dEKCJCbG9iIHZhbHVlIHRvbyBsb25nIHRvIGZpdC4gVHJ1bmNhdGluZy4iKTsKKyAgICAgICAgICAgICAgICAgICAgdG1wLT5zZXRSYW5nZSh0bXAtPm9mZnNldCgpLCBmaWVsZEV4dGVudCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIHdvcmsobmFtZSwgZGVzYywgdG1wLT5kYXRhKCksIHRtcC0+c2l6ZSgpKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICBBTE9HRCgiVW5zdXBwb3J0ZWQgZGF0YSB0eXBlIGZvciAlcyIsIG5hbWUuY19zdHIoKSk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICB9Cit9CisKK1JlZmxlY3RlZFBhcmFtVXBkYXRlcjo6RGljdAorUmVmbGVjdGVkUGFyYW1VcGRhdGVyOjpnZXRQYXJhbXMoY29uc3Qgc3RkOjp2ZWN0b3I8c3RkOjp1bmlxdWVfcHRyPEMyUGFyYW0+PiAmcGFyYW1zXykgY29uc3QgeworICAgIHN0ZDo6dmVjdG9yPEMyUGFyYW0qPiBwYXJhbXM7CisgICAgcGFyYW1zLnJlc2l6ZShwYXJhbXNfLnNpemUoKSk7CisgICAgc3RkOjp0cmFuc2Zvcm0ocGFyYW1zXy5iZWdpbigpLCBwYXJhbXNfLmVuZCgpLCBwYXJhbXMuYmVnaW4oKSwKKyAgICAgICAgICAgICAgICAgICBbXShjb25zdCBzdGQ6OnVuaXF1ZV9wdHI8QzJQYXJhbT4mIHApIC0+IEMyUGFyYW0qIHsgcmV0dXJuIHAuZ2V0KCk7IH0pOworICAgIHJldHVybiBnZXRQYXJhbXMocGFyYW1zKTsKK30KKworUmVmbGVjdGVkUGFyYW1VcGRhdGVyOjpEaWN0CitSZWZsZWN0ZWRQYXJhbVVwZGF0ZXI6OmdldFBhcmFtcyhjb25zdCBzdGQ6OnZlY3RvcjxDMlBhcmFtKj4gJnBhcmFtcykgY29uc3QgeworICAgIERpY3QgcmV0OworCisgICAgLy8gY29udmVydCB2ZWN0b3IgdG8gbWFwCisgICAgc3RkOjptYXA8QzJQYXJhbTo6SW5kZXgsIEMyUGFyYW0gKj4gcGFyYW1zTWFwOworICAgIGZvciAoQzJQYXJhbSAqcGFyYW0gOiBwYXJhbXMpIHsKKyAgICAgICAgaWYgKHBhcmFtICE9IG51bGxwdHIgJiYgKnBhcmFtKSB7CisgICAgICAgICAgICBwYXJhbXNNYXBbcGFyYW0tPmluZGV4KCldID0gcGFyYW07CisgICAgICAgIH0KKyAgICB9CisKKyAgICBmb3IgKGNvbnN0IHN0ZDo6cGFpcjxjb25zdCBzdGQ6OnN0cmluZywgRmllbGREZXNjPiAma3YgOiBtTWFwKSB7CisgICAgICAgIGNvbnN0IHN0ZDo6c3RyaW5nICZuYW1lID0ga3YuZmlyc3Q7CisgICAgICAgIGNvbnN0IEZpZWxkRGVzYyAmZGVzYyA9IGt2LnNlY29uZDsKKyAgICAgICAgaWYgKHBhcmFtc01hcC5jb3VudChkZXNjLnBhcmFtRGVzYy0+aW5kZXgoKSkgPT0gMCkgeworICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIH0KKyAgICAgICAgQzJQYXJhbSAqcGFyYW0gPSBwYXJhbXNNYXBbZGVzYy5wYXJhbURlc2MtPmluZGV4KCldOworICAgICAgICBWYWx1ZSB2YWx1ZTsKKworICAgICAgICAvLyBoYW5kbGUgd2hvbGUgcGFyYW1zIGZpcnN0CisgICAgICAgIGlmICghZGVzYy5maWVsZERlc2MpIHsKKyAgICAgICAgICAgIHNwPEFCdWZmZXI+IGJ1ZiA9IEFCdWZmZXI6OkNyZWF0ZUFzQ29weShwYXJhbSwgcGFyYW0tPnNpemUoKSk7CisgICAgICAgICAgICB2YWx1ZS5zZXQoYnVmKTsKKyAgICAgICAgICAgIHJldC5lbXBsYWNlKG5hbWUsIHZhbHVlKTsKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB9CisKKyAgICAgICAgc2l6ZV90IG9mZnNldCA9IHNpemVvZihDMlBhcmFtKSArIGRlc2Mub2Zmc2V0CisgICAgICAgICAgICAgICAgKyBfQzJQYXJhbUluc3BlY3Rvcjo6R2V0T2Zmc2V0KCpkZXNjLmZpZWxkRGVzYyk7CisgICAgICAgIHVpbnQ4X3QgKmRhdGEgPSAodWludDhfdCAqKXBhcmFtICsgb2Zmc2V0OworICAgICAgICBDMkZpZWxkRGVzY3JpcHRvcjo6dHlwZV90IGZpZWxkVHlwZSA9IGRlc2MuZmllbGREZXNjLT50eXBlKCk7CisgICAgICAgIHN3aXRjaCAoZmllbGRUeXBlKSB7CisgICAgICAgICAgICBjYXNlIEMyRmllbGREZXNjcmlwdG9yOjpTVFJJTkc6IHsKKyAgICAgICAgICAgICAgICBzaXplX3QgbGVuZ3RoID0gZGVzYy5maWVsZERlc2MtPmV4dGVudCgpOworICAgICAgICAgICAgICAgIGlmIChsZW5ndGggPT0gMCkgeworICAgICAgICAgICAgICAgICAgICBsZW5ndGggPSBwYXJhbS0+c2l6ZSgpIC0gb2Zmc2V0OworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIGlmIChwYXJhbS0+c2l6ZSgpIDwgbGVuZ3RoIHx8IHBhcmFtLT5zaXplKCkgLSBsZW5ndGggPCBvZmZzZXQpIHsKKyAgICAgICAgICAgICAgICAgICAgQUxPR0QoInBhcmFtIHRvbyBzbWFsbCBmb3Igc3RyaW5nOiBsZW5ndGggJXp1IHNpemUgJXp1IG9mZnNldCAlenUiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxlbmd0aCwgcGFyYW0tPnNpemUoKSwgb2Zmc2V0KTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIHZhbHVlLnNldChBU3RyaW5nKChjaGFyICopZGF0YSwgc3RybmxlbigoY2hhciAqKWRhdGEsIGxlbmd0aCkpKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgY2FzZSBDMkZpZWxkRGVzY3JpcHRvcjo6QkxPQjogeworICAgICAgICAgICAgICAgIHNpemVfdCBsZW5ndGggPSBkZXNjLmZpZWxkRGVzYy0+ZXh0ZW50KCk7CisgICAgICAgICAgICAgICAgaWYgKGxlbmd0aCA9PSAwKSB7CisgICAgICAgICAgICAgICAgICAgIGxlbmd0aCA9IHBhcmFtLT5zaXplKCkgLSBvZmZzZXQ7CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgaWYgKHBhcmFtLT5zaXplKCkgPCBsZW5ndGggfHwgcGFyYW0tPnNpemUoKSAtIGxlbmd0aCA8IG9mZnNldCkgeworICAgICAgICAgICAgICAgICAgICBBTE9HRCgicGFyYW0gdG9vIHNtYWxsIGZvciBibG9iOiBsZW5ndGggJXp1IHNpemUgJXp1IG9mZnNldCAlenUiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxlbmd0aCwgcGFyYW0tPnNpemUoKSwgb2Zmc2V0KTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgc3A8QUJ1ZmZlcj4gYnVmID0gQUJ1ZmZlcjo6Q3JlYXRlQXNDb3B5KGRhdGEsIGxlbmd0aCk7CisgICAgICAgICAgICAgICAgdmFsdWUuc2V0KGJ1Zik7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGRlZmF1bHQ6IHsKKyAgICAgICAgICAgICAgICBzaXplX3QgdmFsdWVTaXplID0gQzJWYWx1ZTo6U2l6ZUZvcigoQzJWYWx1ZTo6dHlwZV90KWZpZWxkVHlwZSk7CisgICAgICAgICAgICAgICAgaWYgKHBhcmFtLT5zaXplKCkgPCB2YWx1ZVNpemUgfHwgcGFyYW0tPnNpemUoKSAtIHZhbHVlU2l6ZSA8IG9mZnNldCkgeworICAgICAgICAgICAgICAgICAgICBBTE9HRCgicGFyYW0gdG9vIHNtYWxsIGZvciBjMnZhbHVlOiBzaXplICV6dSBvZmZzZXQgJXp1IiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJhbS0+c2l6ZSgpLCBvZmZzZXQpOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICBDMlZhbHVlIGMyVmFsdWU7CisgICAgICAgICAgICAgICAgc3dpdGNoIChmaWVsZFR5cGUpIHsKKyAgICAgICAgICAgICAgICAgICAgY2FzZSBDMkZpZWxkRGVzY3JpcHRvcjo6SU5UMzI6ICBjMlZhbHVlID0gKigoaW50MzJfdCAqKWRhdGEpOyBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgY2FzZSBDMkZpZWxkRGVzY3JpcHRvcjo6VUlOVDMyOiBjMlZhbHVlID0gKigodWludDMyX3QgKilkYXRhKTsgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIGNhc2UgQzJGaWVsZERlc2NyaXB0b3I6OkNOVFIzMjogYzJWYWx1ZSA9ICooKGMyX2NudHIzMl90ICopZGF0YSk7IGJyZWFrOworICAgICAgICAgICAgICAgICAgICBjYXNlIEMyRmllbGREZXNjcmlwdG9yOjpJTlQ2NDogIGMyVmFsdWUgPSAqKChpbnQ2NF90ICopZGF0YSk7IGJyZWFrOworICAgICAgICAgICAgICAgICAgICBjYXNlIEMyRmllbGREZXNjcmlwdG9yOjpVSU5UNjQ6IGMyVmFsdWUgPSAqKCh1aW50NjRfdCAqKWRhdGEpOyBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgY2FzZSBDMkZpZWxkRGVzY3JpcHRvcjo6Q05UUjY0OiBjMlZhbHVlID0gKigoYzJfY250cjY0X3QgKilkYXRhKTsgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIGNhc2UgQzJGaWVsZERlc2NyaXB0b3I6OkZMT0FUOiAgYzJWYWx1ZSA9ICooKGZsb2F0ICopZGF0YSk7IGJyZWFrOworICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgICAgICAgICAgQUxPR0QoIlVuc3VwcG9ydGVkIGRhdGEgdHlwZSBmb3IgJXMiLCBuYW1lLmNfc3RyKCkpOworICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIHZhbHVlLnNldChjMlZhbHVlKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICByZXQuZW1wbGFjZShuYW1lLCB2YWx1ZSk7CisgICAgfQorICAgIHJldHVybiByZXQ7Cit9CisKK3ZvaWQgUmVmbGVjdGVkUGFyYW1VcGRhdGVyOjpjbGVhcigpIHsKKyAgICBtTWFwLmNsZWFyKCk7Cit9CisKK30gIC8vIG5hbWVzcGFjZSBhbmRyb2lkCmRpZmYgLS1naXQgYS9tZWRpYS9jb2RlYzIvc2ZwbHVnaW4vUmVmbGVjdGVkUGFyYW1VcGRhdGVyLmggYi9tZWRpYS9jb2RlYzIvc2ZwbHVnaW4vUmVmbGVjdGVkUGFyYW1VcGRhdGVyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTQzNmJhNQotLS0gL2Rldi9udWxsCisrKyBiL21lZGlhL2NvZGVjMi9zZnBsdWdpbi9SZWZsZWN0ZWRQYXJhbVVwZGF0ZXIuaApAQCAtMCwwICsxLDIxNCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxOCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCisKKyNpZm5kZWYgUkVGTEVDVEVEX1BBUkFNX0JVSUxERVJfSF8KKyNkZWZpbmUgUkVGTEVDVEVEX1BBUkFNX0JVSUxERVJfSF8KKworI2luY2x1ZGUgPG1hcD4KKyNpbmNsdWRlIDxtZW1vcnk+CisKKyNpbmNsdWRlIDxDMi5oPgorI2luY2x1ZGUgPEMyUGFyYW0uaD4KKworI2luY2x1ZGUgPG1lZGlhL3N0YWdlZnJpZ2h0L2ZvdW5kYXRpb24vQUJ1ZmZlci5oPgorI2luY2x1ZGUgPG1lZGlhL3N0YWdlZnJpZ2h0L2ZvdW5kYXRpb24vQURhdGEuaD4KKyNpbmNsdWRlIDxtZWRpYS9zdGFnZWZyaWdodC9mb3VuZGF0aW9uL0FNZXNzYWdlLmg+CisjaW5jbHVkZSA8bWVkaWEvc3RhZ2VmcmlnaHQvZm91bmRhdGlvbi9BU3RyaW5nLmg+CisKK25hbWVzcGFjZSBhbmRyb2lkIHsKKworLyoqCisgKiBVdGlsaXR5IGNsYXNzIHRvIHF1ZXJ5IGFuZCB1cGRhdGUgQ29kZWMgMi4wIGNvbmZpZ3VyYXRpb24gdmFsdWVzLiBVc2UgY3VzdG9tIGRpY3Rpb25hcnkgYXMKKyAqIEFNZXNzYWdlIGNhbm5vdCByZXByZXNlbnQgYWxsIHR5cGVzIG9mIENvZGVjIDIuMCBwYXJhbWV0ZXJzIGFuZCBDMlZhbHVlIGNhbm5vdCByZXByZXNlbnQKKyAqIGFsbCB0eXBlcyBvZiBTREsgdmFsdWVzLiBXZSB3YW50IHRvIGJlIHByZWNpc2Ugd2hlbiBzZXR0aW5nIHN0YW5kYXJkIHBhcmFtZXRlcnMgKHVzZSBDMlZhbHVlCisgKiBmb3IgYXJpdGhtZXRpYyB2YWx1ZXMpLCBidXQgYWxzbyBzdXBwb3J0IGludDMyIGFuZCBpbnQ2NCBmb3IgU0RLIHZhbHVlcyBzcGVjaWZpY2FsbHkgZm9yCisgKiB2ZW5kb3IgcGFyYW1ldGVycyAoYXMgU0RLIEFQSSBkb2VzIG5vdCBhbGxvdyBzcGVjaWZ5aW5nIHByb3BlciB0eXBlLikgV2hlbiBxdWVyeWluZyBmaWVsZHMsCisgKiB3ZSBjYW4gdXNlIEMyVmFsdWVzIGFzIHRoZXkgYXJlIGRlZmluZWQuCisgKgorICogICAgICBJdGVtID0+IENvZGVjIDIuMCB2YWx1ZSBtYXBwaW5nczoKKyAqICAgICBDVmFsdWU6OnR5cGUgPT4gdHlwZQorICogICAgIGludDMyID0+IGludDMyLCBjdHIzMiBvciB1aW50MzIKKyAqICAgICBpbnQ2NCA9PiBpbnQ2NCwgY3RyNjQgb3IgdWludDY0CisgKiAgICAgQVN0cmluZyA9PiBzdHJpbmcKKyAqICAgICBBQnVmZmVyID0+IGJsb2IKKyAqICAgICAnUmVjdCcgPT4gQzJSZWN0U3RydWN0IChub3QgZXhwb3NlZCBpbiBTREsgYXMgYSByZWN0YW5nbGUpCisgKi8KK2NsYXNzIFJlZmxlY3RlZFBhcmFtVXBkYXRlciB7CitwdWJsaWM6CisgICAgUmVmbGVjdGVkUGFyYW1VcGRhdGVyKCkgPSBkZWZhdWx0OworICAgIH5SZWZsZWN0ZWRQYXJhbVVwZGF0ZXIoKSA9IGRlZmF1bHQ7CisKKyAgICAvKioKKyAgICAgKiBFbGVtZW50IGZvciB2YWx1ZXMKKyAgICAgKi8KKyAgICBzdHJ1Y3QgVmFsdWUgOiBwdWJsaWMgQURhdGE8QzJWYWx1ZSwgaW50MzJfdCwgaW50NjRfdCwgQVN0cmluZywgc3A8QUJ1ZmZlcj4+OjpCYXNpYyB7CisgICAgICAgIC8vIGFsbG93IGNvbnN0cnVjdGlvbiBmcm9tIGJhc2UgdHlwZXMKKyAgICAgICAgVmFsdWUoKSA9IGRlZmF1bHQ7CisgICAgICAgIGV4cGxpY2l0IFZhbHVlKEMyVmFsdWUgaSkgICAgICAgICAgICB7IHNldChpKTsgfQorICAgICAgICBleHBsaWNpdCBWYWx1ZShpbnQzMl90IGkpICAgICAgICAgICAgeyBzZXQoaSk7IH0KKyAgICAgICAgZXhwbGljaXQgVmFsdWUoaW50NjRfdCBpKSAgICAgICAgICAgIHsgc2V0KGkpOyB9CisgICAgICAgIGV4cGxpY2l0IFZhbHVlKGNvbnN0IEFTdHJpbmcgJmkpICAgICB7IHNldChpKTsgfQorICAgICAgICBleHBsaWNpdCBWYWx1ZShjb25zdCBzcDxBQnVmZmVyPiAmaSkgeyBzZXQoaSk7IH0KKyAgICB9OworCisgICAgc3RydWN0IERpY3QgOiBwdWJsaWMgc3RkOjptYXA8c3RkOjpzdHJpbmcsIFZhbHVlPiB7CisgICAgICAgIERpY3QoKSA9IGRlZmF1bHQ7CisgICAgICAgIHN0ZDo6c3RyaW5nIGRlYnVnU3RyaW5nKHNpemVfdCBpbmRlbnQgPSAwKSBjb25zdDsKKyAgICB9OworCisgICAgLyoqCisgICAgICogRW51bWVyYXRlcyBhbGwgZmllbGRzIG9mIHRoZSBwYXJhbWV0ZXIgZGVzY3JpcHRvcnMgc3VwcGxpZWQsIHNvIHRoYXQgdGhpcyBvcGJqZWN0IGNhbiBsYXRlcgorICAgICAqIHF1ZXJ5IGFuZCB1cGRhdGUgdGhlc2UuCisgICAgICoKKyAgICAgKiBGb3Igbm93IG9ubHkgZmlyc3QtbGV2ZWwgZmllbGRzIGFyZSBzdXBwb3J0ZWQuIEFsc28sIGFycmF5IGZpZWxkcyBhcmUgbm90IHN1cHBvcnRlZC4KKyAgICAgKgorICAgICAqIFxwYXJhbSByZWZsZWN0b3IgICBDMlBhcmFtUmVmbGVjdG9yIG9iamVjdCBmb3IgQzJQYXJhbSByZWZsZWN0aW9uLgorICAgICAqIFxwYXJhbSBwYXJhbURlc2NzICB2ZWN0b3Igb2YgQzJQYXJhbURlc2NyaXB0b3Igb2JqZWN0cyB0aGF0IHRoaXMgb2JqZWN0CisgICAgICogICAgICAgICAgICAgICAgICAgIHdvdWxkIHJlY29nbml6ZSB3aGVuIGJ1aWxkaW5nIHBhcmFtcy4KKyAgICAgKi8KKyAgICB2b2lkIGFkZFBhcmFtRGVzYygKKyAgICAgICAgICAgIGNvbnN0IHN0ZDo6c2hhcmVkX3B0cjxDMlBhcmFtUmVmbGVjdG9yPiAmcmVmbGVjdG9yLAorICAgICAgICAgICAgY29uc3Qgc3RkOjp2ZWN0b3I8c3RkOjpzaGFyZWRfcHRyPEMyUGFyYW1EZXNjcmlwdG9yPj4gJnBhcmFtRGVzY3MpOworCisgICAgLyoqCisgICAgICogQWRkcyBmaWVsZHMgb2YgYSBzdGFuZGFyZCBwYXJhbWV0ZXIgKHRoYXQgbWF5IG5vdCBiZSBzdXBwb3J0ZWQgYnkgdGhlIHBhcmFtZXRlciByZWZsZWN0b3IKKyAgICAgKiBvciBtYXkgbm90IGJlIGxpc3RlZCBhcyBhIHN1cHBvcnRlZCB2YWx1ZSBieSB0aGUgY29tcG9uZW50KS4gSWYgdGhlIHBhcmFtZXRlciBuYW1lIGlzCisgICAgICogdXNlZCBmb3IgYW5vdGhlciBwYXJhbWV0ZXIsIHRoaXMgb3BlcmF0aW9uIGlzIGEgbm8tb3AuIChUZWNobmljYWxseSwgdGhpcyBpcyBieSBmaWVsZHMpLgorICAgICAqCisgICAgICogXHBhcmFtIFQgc3RhbmRhcmQgcGFyYW1ldGVyIHR5cGUKKyAgICAgKiBccGFyYW0gbmFtZSBwYXJhbWV0ZXIgbmFtZQorICAgICAqLworICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+CisgICAgdm9pZCBhZGRTdGFuZGFyZFBhcmFtKGNvbnN0IHN0ZDo6c3RyaW5nICZuYW1lLCBDMlBhcmFtRGVzY3JpcHRvcjo6YXR0cmliX3QgYXR0cmliID0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgQzJQYXJhbURlc2NyaXB0b3I6OklTX1JFQURfT05MWSkgeworICAgICAgICBhZGRQYXJhbURlc2Moc3RkOjptYWtlX3NoYXJlZDxDMlBhcmFtRGVzY3JpcHRvcj4oCisgICAgICAgICAgICAgICAgQzJQYXJhbTo6SW5kZXgoVDo6UEFSQU1fVFlQRSksIGF0dHJpYiwgbmFtZS5jX3N0cigpKSwKKyAgICAgICAgICAgICAgICBDMlN0cnVjdERlc2NyaXB0b3IoKFQqKW51bGxwdHIpLCBudWxscHRyIC8qIGRlc2NyaXB0b3IgKi8pOworICAgIH0KKworICAgIC8qKgorICAgICAqIEFkZHMgZmllbGRzIG9mIGEgc3RydWN0dXJlIChvciBhIHBhcmFtZWF0ZXIpIGRlc2NyaWJlZCBieSB0aGUgc3RydWN0IGRlc2NyaXB0b3IuIElmCisgICAgICogcmVmbGVjdG9yIGlzIHByb3ZpZGVkLCBmaWVsZHMgb2Ygc3ViLXN0cnVjdHVyZXMgYXJlIGFsc28gYWRkZWQuIE90aGVyd2lzZSwgb25seSB0b3AtbGV2ZWwKKyAgICAgKiBmdW5kYW1lbnRhbCB0eXBlZCBmaWVsZHMgKGFyaXRobWV0aWMsIHN0cmluZyBhbmQgYmxvYikgYXJlIGFkZGVkLgorICAgICAqCisgICAgICogXHBhcmFtIHBhcmFtRGVzYyBwYXJhbWV0ZXIgZGVzY3JpcHRvcgorICAgICAqIFxwYXJhbSBmaWVsZERlc2MgZmllbGQgZGVzY3JpcHRvcgorICAgICAqIFxwYXJhbSBwYXRoIHBhdGgvbmFtZSBvZiB0aGUgc3RydWN0dXJlIChmaWVsZCBvciBwYXJlbnQgcGFyYW1ldGVyKQorICAgICAqIFxwYXJhbSBvZmZzZXQgb2Zmc2V0IG9mIHRoZSBzdHJ1Y3R1cmUgaW4gdGhlIHBhcmFtZXRlcgorICAgICAqIFxwYXJhbSByZWZsZWN0b3IgIEMyUGFyYW1SZWZsZWN0b3Igb2JqZWN0IGZvciBDMlBhcmFtIHJlZmxlY3Rpb24gKG1heSBiZSBudWxsKQorICAgICAqLworICAgIHZvaWQgYWRkUGFyYW1TdHJ1Y3REZXNjKAorICAgICAgICAgICAgc3RkOjpzaGFyZWRfcHRyPEMyUGFyYW1EZXNjcmlwdG9yPiBwYXJhbURlc2MsIEMyU3RyaW5nIHBhdGgsIHNpemVfdCBvZmZzZXQsCisgICAgICAgICAgICBjb25zdCBDMlN0cnVjdERlc2NyaXB0b3IgJnN0cnVjdERlc2MsCisgICAgICAgICAgICBjb25zdCBzdGQ6OnNoYXJlZF9wdHI8QzJQYXJhbVJlZmxlY3Rvcj4gJnJlZmxlY3Rvcik7CisKKyAgICAvKioKKyAgICAgKiBBZGRzIGZpZWxkcyBvZiBhIHBhcmFtZXRlciBkZXNjcmliZWQgYnkgdGhlIHN0cnVjdCBkZXNjcmlwdG9yLiBJZiByZWZsZWN0b3IgaXMgcHJvdmlkZWQsCisgICAgICogZmllbGRzIG9mIHN1Yi1zdHJ1Y3R1cmVzIGFyZSBhbHNvIGFkZGVkLiBPdGhlcndpc2UsIG9ubHkgdG9wLWxldmVsIGZ1bmRhbWVudGFsIHR5cGVkIGZpZWxkcworICAgICAqIChhcml0aG1ldGljLCBzdHJpbmcgYW5kIGJsb2IpIGFyZSBhZGRlZC4KKyAgICAgKgorICAgICAqIFxwYXJhbSBwYXJhbURlc2MgcGFyYW1ldGVyIGRlc2NyaXB0b3IKKyAgICAgKiBccGFyYW0gZmllbGREZXNjIGZpZWxkIGRlc2NyaXB0b3IKKyAgICAgKiBccGFyYW0gcmVmbGVjdG9yICBDMlBhcmFtUmVmbGVjdG9yIG9iamVjdCBmb3IgQzJQYXJhbSByZWZsZWN0aW9uIChtYXkgYmUgbnVsbCkKKyAgICAgKiBccGFyYW0gbWFya1ZlbmRvciBURU1QIGlmIHRydWUsIHByZWZpeCB2ZW5kb3IgcGFyYW1ldGVyIG5hbWVzIHdpdGggInZlbmRvci4iCisgICAgICovCisgICAgdm9pZCBhZGRQYXJhbURlc2MoCisgICAgICAgICAgICBzdGQ6OnNoYXJlZF9wdHI8QzJQYXJhbURlc2NyaXB0b3I+IHBhcmFtRGVzYywgY29uc3QgQzJTdHJ1Y3REZXNjcmlwdG9yICZzdHJ1Y3REZXNjLAorICAgICAgICAgICAgY29uc3Qgc3RkOjpzaGFyZWRfcHRyPEMyUGFyYW1SZWZsZWN0b3I+ICZyZWZsZWN0b3IsCisgICAgICAgICAgICBib29sIG1hcmtWZW5kb3IgPSB0cnVlKTsKKworICAgIC8qKgorICAgICAqIEFkZCBzdXBwb3J0IGZvciBzZXR0aW5nIGEgcGFyYW1ldGVyIGFzIGEgYmluYXJ5IGJsb2IuCisgICAgICoKKyAgICAgKiBccGFyYW0gbmFtZSBuYW1lIG9mIHRoZSBwYXJhbWV0ZXIKKyAgICAgKiBccGFyYW0gY29yZUluZGV4IHBhcmFtZXRlciAoY29yZSkgaW5kZXgKKyAgICAgKi8KKyAgICB2b2lkIHN1cHBvcnRXaG9sZVBhcmFtKHN0ZDo6c3RyaW5nIG5hbWUsIEMyUGFyYW06OkNvcmVJbmRleCBjb3JlSW5kZXgpOworCisgICAgLyoqCisgICAgICogUmV0dXJucyB0aGUgbmFtZSBvZiB0aGUgcGFyYW1ldGVyIGZvciBhbiBpbmRleC4KKyAgICAgKi8KKyAgICBzdGQ6OnN0cmluZyBnZXRQYXJhbU5hbWUoQzJQYXJhbTo6SW5kZXggaW5kZXgpIGNvbnN0OworCisgICAgLyoqCisgICAgICogR2V0IGxpc3Qgb2YgcGFyYW0gaW5kaWNlcyBmcm9tIGZpZWxkIG5hbWVzIGFuZCB2YWx1ZXMgaW4gQU1lc3NhZ2Ugb2JqZWN0LgorICAgICAqCisgICAgICogVE9ETzogVGhpcyBzaG91bGQgYmUgaW4gdGhlIG9yZGVyIHRoYXQgdGhleSBhcmUgbGlzdGVkIGJ5IHRoZSBjb21wb25lbnQuCisgICAgICoKKyAgICAgKiBccGFyYW0gcGFyYW1zW2luXSAgRGljdCBvYmplY3Qgd2l0aCBmaWVsZCBuYW1lIHRvIHZhbHVlIHBhaXJzLgorICAgICAqIFxwYXJhbSB2ZWNbb3V0XSAgICB2ZWN0b3IgdG8gc3RvcmUgdGhlIGluZGljZXMgZnJvbSB8cGFyYW1zfC4KKyAgICAgKi8KKyAgICB2b2lkIGdldFBhcmFtSW5kaWNlc0Zyb21NZXNzYWdlKAorICAgICAgICAgICAgY29uc3QgRGljdCAmcGFyYW1zLAorICAgICAgICAgICAgc3RkOjp2ZWN0b3I8QzJQYXJhbTo6SW5kZXg+ICp2ZWMgLyogbm9ubnVsbCAqLykgY29uc3Q7CisKKyAgICAvKioKKyAgICAgKiBHZXQgbGlzdCBvZiBwYXJhbSBpbmRpY2VzIGZyb20gZmllbGQgbmFtZXMgKG9ubHkpIGluIEFNZXNzYWdlIG9iamVjdC4KKyAgICAgKgorICAgICAqIFxwYXJhbSBwYXJhbXNbaW5dICBWZWN0b3Igb2JqZWN0IHdpdGggZmllbGQgbmFtZXMuCisgICAgICogXHBhcmFtIHZlY1tvdXRdICAgIHZlY3RvciB0byBzdG9yZSB0aGUgaW5kaWNlcyBmcm9tIHxwYXJhbXN8LgorICAgICAqLworICAgIHZvaWQgZ2V0UGFyYW1JbmRpY2VzRm9yS2V5cygKKyAgICAgICAgICAgIGNvbnN0IHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiAma2V5cywKKyAgICAgICAgICAgIHN0ZDo6dmVjdG9yPEMyUGFyYW06OkluZGV4PiAqdmVjIC8qIG5vbm51bGwgKi8pIGNvbnN0OworCisgICAgLyoqCisgICAgICogVXBkYXRlIEMyUGFyYW0gb2JqZWN0cyBmcm9tIGZpZWxkIG5hbWUgYW5kIHZhbHVlIGluIEFNZXNzYWdlIG9iamVjdC4KKyAgICAgKgorICAgICAqIFxwYXJhbSBwYXJhbXNbaW5dICAgIERpY3Qgb2JqZWN0IHdpdGggZmllbGQgbmFtZSB0byB2YWx1ZSBwYWlycy4KKyAgICAgKiBccGFyYW0gdmVjW2luLG91dF0gICB2ZWN0b3Igb2YgdGhlIEMyUGFyYW0gb2JqZWN0cyB0byBiZSB1cGRhdGVkLgorICAgICAqLworICAgIHZvaWQgdXBkYXRlUGFyYW1zRnJvbU1lc3NhZ2UoCisgICAgICAgICAgICBjb25zdCBEaWN0ICZwYXJhbXMsCisgICAgICAgICAgICBzdGQ6OnZlY3RvcjxzdGQ6OnVuaXF1ZV9wdHI8QzJQYXJhbT4+ICp2ZWMgLyogbm9ubnVsbCAqLykgY29uc3Q7CisKKyAgICAvKioKKyAgICAgKiBHZXQgZmllbGRzIGZyb20gQzJQYXJhbSBvYmplY3RzIGluIEFNZXNzYWdlIG9iamVjdC4KKyAgICAgKgorICAgICAqIFxwYXJhbSBwYXJhbXNbaW5dICAgIHZlY3RvciBvZiB0aGUgQzJQYXJhbSBvYmplY3RzIHRvIGJlIHF1ZXJpZWQKKyAgICAgKiBccmV0dXJuIGEgRGljdCBvYmplY3QgY29udGFpbmluZyB0aGUga25vd24gcGFyYW1ldGVycworICAgICAqLworICAgIERpY3QgZ2V0UGFyYW1zKAorICAgICAgICAgICAgY29uc3Qgc3RkOjp2ZWN0b3I8QzJQYXJhbSo+ICZwYXJhbXMgLyogbm9ubnVsbCAqLykgY29uc3Q7CisKKyAgICBEaWN0IGdldFBhcmFtcygKKyAgICAgICAgICAgIGNvbnN0IHN0ZDo6dmVjdG9yPHN0ZDo6dW5pcXVlX3B0cjxDMlBhcmFtPj4gJnBhcmFtcyAvKiBub25udWxsICovKSBjb25zdDsKKworICAgIC8qKgorICAgICAqIENsZWFyIHBhcmFtIGRlc2NyaXB0b3JzIGluIHRoaXMgb2JqZWN0LgorICAgICAqLworICAgIHZvaWQgY2xlYXIoKTsKKworcHJpdmF0ZToKKyAgICBzdHJ1Y3QgRmllbGREZXNjIHsKKyAgICAgICAgc3RkOjpzaGFyZWRfcHRyPEMyUGFyYW1EZXNjcmlwdG9yPiBwYXJhbURlc2M7CisgICAgICAgIHN0ZDo6dW5pcXVlX3B0cjxDMkZpZWxkRGVzY3JpcHRvcj4gZmllbGREZXNjOworICAgICAgICBzaXplX3Qgb2Zmc2V0OworICAgIH07CisgICAgc3RkOjptYXA8c3RkOjpzdHJpbmcsIEZpZWxkRGVzYz4gbU1hcDsKKyAgICBzdGQ6Om1hcDxDMlBhcmFtOjpJbmRleCwgc3RkOjpzdHJpbmc+IG1QYXJhbU5hbWVzOworICAgIHN0ZDo6bWFwPHN0ZDo6c3RyaW5nLCBDMlBhcmFtOjpDb3JlSW5kZXg+IG1XaG9sZVBhcmFtczsKKworICAgIHZvaWQgcGFyc2VNZXNzYWdlQW5kRG9Xb3JrKAorICAgICAgICAgICAgY29uc3QgRGljdCAmcGFyYW1zLAorICAgICAgICAgICAgc3RkOjpmdW5jdGlvbjx2b2lkKGNvbnN0IHN0ZDo6c3RyaW5nICYsIGNvbnN0IEZpZWxkRGVzYyAmLCBjb25zdCB2b2lkICosIHNpemVfdCk+IHdvcmspIGNvbnN0OworCisgICAgQzJfRE9fTk9UX0NPUFkoUmVmbGVjdGVkUGFyYW1VcGRhdGVyKTsKK307CisKK30gIC8vIG5hbWVzcGFjZSBhbmRyb2lkCisKKyNlbmRpZiAgLy8gUkVGTEVDVEVEX1BBUkFNX0JVSUxERVJfSF8KZGlmZiAtLWdpdCBhL21lZGlhL2NvZGVjMi9zZnBsdWdpbi9Ta2lwQ3V0QnVmZmVyLmNwcCBiL21lZGlhL2NvZGVjMi9zZnBsdWdpbi9Ta2lwQ3V0QnVmZmVyLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NzYyNDQwCi0tLSAvZGV2L251bGwKKysrIGIvbWVkaWEvY29kZWMyL3NmcGx1Z2luL1NraXBDdXRCdWZmZXIuY3BwCkBAIC0wLDAgKzEsMjA2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KKworLy8jZGVmaW5lIExPR19OREVCVUcgMAorI2RlZmluZSBMT0dfVEFHICJTa2lwQ3V0QnVmZmVyIgorI2luY2x1ZGUgPHV0aWxzL0xvZy5oPgorCisjaW5jbHVkZSA8bWVkaWEvc3RhZ2VmcmlnaHQvZm91bmRhdGlvbi9BRGVidWcuaD4KKyNpbmNsdWRlIDxtZWRpYS9zdGFnZWZyaWdodC9NZWRpYUJ1ZmZlci5oPgorI2luY2x1ZGUgPG1lZGlhL3N0YWdlZnJpZ2h0L1NraXBDdXRCdWZmZXIuaD4KKworbmFtZXNwYWNlIGFuZHJvaWQgeworCitTa2lwQ3V0QnVmZmVyOjpTa2lwQ3V0QnVmZmVyKHNpemVfdCBza2lwLCBzaXplX3QgY3V0LCBzaXplX3QgbnVtMTZCaXRDaGFubmVscykgeworCisgICAgbVdyaXRlSGVhZCA9IDA7CisgICAgbVJlYWRIZWFkID0gMDsKKyAgICBtQ2FwYWNpdHkgPSAwOworICAgIG1DdXRCdWZmZXIgPSBudWxscHRyOworCisgICAgaWYgKG51bTE2Qml0Q2hhbm5lbHMgPT0gMCB8fCBudW0xNkJpdENoYW5uZWxzID4gSU5UMzJfTUFYIC8gMikgeworICAgICAgICBBTE9HVygiIyBjaGFubmVscyBvdXQgb2YgcmFuZ2U6ICV6dSwgdXNpbmcgcGFzc3Rocm91Z2ggaW5zdGVhZCIsIG51bTE2Qml0Q2hhbm5lbHMpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIHNpemVfdCBmcmFtZVNpemUgPSBudW0xNkJpdENoYW5uZWxzICogMjsKKyAgICBpZiAoc2tpcCA+IElOVDMyX01BWCAvIGZyYW1lU2l6ZSB8fCBjdXQgPiBJTlQzMl9NQVggLyBmcmFtZVNpemUKKyAgICAgICAgICAgIHx8IGN1dCAqIGZyYW1lU2l6ZSA+IElOVDMyX01BWCAtIDQwOTYpIHsKKyAgICAgICAgQUxPR1coIm91dCBvZiByYW5nZSBza2lwL2N1dDogJXp1LyV6dSwgdXNpbmcgcGFzc3Rocm91Z2ggaW5zdGVhZCIsCisgICAgICAgICAgICAgICAgc2tpcCwgY3V0KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBza2lwICo9IGZyYW1lU2l6ZTsKKyAgICBjdXQgKj0gZnJhbWVTaXplOworCisgICAgbUZyb250UGFkZGluZyA9IG1Ta2lwID0gc2tpcDsKKyAgICBtQmFja1BhZGRpbmcgPSBjdXQ7CisgICAgbUNhcGFjaXR5ID0gY3V0ICsgNDA5NjsKKyAgICBtQ3V0QnVmZmVyID0gbmV3IChzdGQ6Om5vdGhyb3cpIGNoYXJbbUNhcGFjaXR5XTsKKyAgICBBTE9HVigic2tpcGN1dGJ1ZmZlciAlenUgJXp1ICVkIiwgc2tpcCwgY3V0LCBtQ2FwYWNpdHkpOworfQorCitTa2lwQ3V0QnVmZmVyOjp+U2tpcEN1dEJ1ZmZlcigpIHsKKyAgICBkZWxldGVbXSBtQ3V0QnVmZmVyOworfQorCit2b2lkIFNraXBDdXRCdWZmZXI6OnN1Ym1pdChNZWRpYUJ1ZmZlciAqYnVmZmVyKSB7CisgICAgaWYgKG1DdXRCdWZmZXIgPT0gbnVsbHB0cikgeworICAgICAgICAvLyBwYXNzdGhyb3VnaCBtb2RlCisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpbnQzMl90IG9mZnNldCA9IGJ1ZmZlci0+cmFuZ2Vfb2Zmc2V0KCk7CisgICAgaW50MzJfdCBidWZsZW4gPSBidWZmZXItPnJhbmdlX2xlbmd0aCgpOworCisgICAgLy8gZHJvcCB0aGUgaW5pdGlhbCBkYXRhIGZyb20gdGhlIGJ1ZmZlciBpZiBuZWVkZWQKKyAgICBpZiAobUZyb250UGFkZGluZyA+IDApIHsKKyAgICAgICAgLy8gc3RpbGwgZGF0YSBsZWZ0IHRvIGRyb3AKKyAgICAgICAgaW50MzJfdCB0b19kcm9wID0gKGJ1ZmxlbiA8IG1Gcm9udFBhZGRpbmcpID8gYnVmbGVuIDogbUZyb250UGFkZGluZzsKKyAgICAgICAgb2Zmc2V0ICs9IHRvX2Ryb3A7CisgICAgICAgIGJ1ZmxlbiAtPSB0b19kcm9wOworICAgICAgICBidWZmZXItPnNldF9yYW5nZShvZmZzZXQsIGJ1Zmxlbik7CisgICAgICAgIG1Gcm9udFBhZGRpbmcgLT0gdG9fZHJvcDsKKyAgICB9CisKKworICAgIC8vIGFwcGVuZCBkYXRhIHRvIGN1dGJ1ZmZlcgorICAgIGNoYXIgKnNyYyA9ICgoY2hhciopIGJ1ZmZlci0+ZGF0YSgpKSArIG9mZnNldDsKKyAgICB3cml0ZShzcmMsIGJ1Zmxlbik7CisKKworICAgIC8vIHRoZSBtZWRpYWJ1ZmZlciBpcyBub3cgZW1wdHkuIEZpbGwgaXQgZnJvbSBjdXRidWZmZXIsIGFsd2F5cyBsZWF2aW5nCisgICAgLy8gYXQgbGVhc3QgbUJhY2tQYWRkaW5nIGJ5dGVzIGluIHRoZSBjdXRidWZmZXIKKyAgICBjaGFyICpkc3QgPSAoY2hhciopIGJ1ZmZlci0+ZGF0YSgpOworICAgIHNpemVfdCBjb3BpZWQgPSByZWFkKGRzdCwgYnVmZmVyLT5zaXplKCkpOworICAgIGJ1ZmZlci0+c2V0X3JhbmdlKDAsIGNvcGllZCk7Cit9CisKK3RlbXBsYXRlIDx0eXBlbmFtZSBUPgordm9pZCBTa2lwQ3V0QnVmZmVyOjpzdWJtaXRJbnRlcm5hbChjb25zdCBzcDxUPiYgYnVmZmVyKSB7CisgICAgaWYgKG1DdXRCdWZmZXIgPT0gbnVsbHB0cikgeworICAgICAgICAvLyBwYXNzdGhyb3VnaCBtb2RlCisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpbnQzMl90IG9mZnNldCA9IGJ1ZmZlci0+b2Zmc2V0KCk7CisgICAgaW50MzJfdCBidWZsZW4gPSBidWZmZXItPnNpemUoKTsKKworICAgIC8vIGRyb3AgdGhlIGluaXRpYWwgZGF0YSBmcm9tIHRoZSBidWZmZXIgaWYgbmVlZGVkCisgICAgaWYgKG1Gcm9udFBhZGRpbmcgPiAwKSB7CisgICAgICAgIC8vIHN0aWxsIGRhdGEgbGVmdCB0byBkcm9wCisgICAgICAgIGludDMyX3QgdG9fZHJvcCA9IChidWZsZW4gPCBtRnJvbnRQYWRkaW5nKSA/IGJ1ZmxlbiA6IG1Gcm9udFBhZGRpbmc7CisgICAgICAgIG9mZnNldCArPSB0b19kcm9wOworICAgICAgICBidWZsZW4gLT0gdG9fZHJvcDsKKyAgICAgICAgYnVmZmVyLT5zZXRSYW5nZShvZmZzZXQsIGJ1Zmxlbik7CisgICAgICAgIG1Gcm9udFBhZGRpbmcgLT0gdG9fZHJvcDsKKyAgICB9CisKKworICAgIC8vIGFwcGVuZCBkYXRhIHRvIGN1dGJ1ZmZlcgorICAgIGNoYXIgKnNyYyA9IChjaGFyKikgYnVmZmVyLT5kYXRhKCk7CisgICAgd3JpdGUoc3JjLCBidWZsZW4pOworCisKKyAgICAvLyB0aGUgbWVkaWFidWZmZXIgaXMgbm93IGVtcHR5LiBGaWxsIGl0IGZyb20gY3V0YnVmZmVyLCBhbHdheXMgbGVhdmluZworICAgIC8vIGF0IGxlYXN0IG1CYWNrUGFkZGluZyBieXRlcyBpbiB0aGUgY3V0YnVmZmVyCisgICAgY2hhciAqZHN0ID0gKGNoYXIqKSBidWZmZXItPmJhc2UoKTsKKyAgICBzaXplX3QgY29waWVkID0gcmVhZChkc3QsIGJ1ZmZlci0+Y2FwYWNpdHkoKSk7CisgICAgYnVmZmVyLT5zZXRSYW5nZSgwLCBjb3BpZWQpOworfQorCit2b2lkIFNraXBDdXRCdWZmZXI6OnN1Ym1pdChjb25zdCBzcDxBQnVmZmVyPiYgYnVmZmVyKSB7CisgICAgc3VibWl0SW50ZXJuYWwoYnVmZmVyKTsKK30KKwordm9pZCBTa2lwQ3V0QnVmZmVyOjpzdWJtaXQoY29uc3Qgc3A8TWVkaWFDb2RlY0J1ZmZlcj4mIGJ1ZmZlcikgeworICAgIHN1Ym1pdEludGVybmFsKGJ1ZmZlcik7Cit9CisKK3ZvaWQgU2tpcEN1dEJ1ZmZlcjo6Y2xlYXIoKSB7CisgICAgbVdyaXRlSGVhZCA9IG1SZWFkSGVhZCA9IDA7CisgICAgbUZyb250UGFkZGluZyA9IG1Ta2lwOworfQorCit2b2lkIFNraXBDdXRCdWZmZXI6OndyaXRlKGNvbnN0IGNoYXIgKnNyYywgc2l6ZV90IG51bSkgeworICAgIGludDMyX3Qgc2l6ZXVzZWQgPSAobVdyaXRlSGVhZCAtIG1SZWFkSGVhZCk7CisgICAgaWYgKHNpemV1c2VkIDwgMCkgc2l6ZXVzZWQgKz0gbUNhcGFjaXR5OworCisgICAgLy8gRXZlcnl0aGluZyBtdXN0IGZpdC4gTWFrZSBzdXJlIHRoZSBidWZmZXIgaXMgYSBsaXR0bGUgbGFyZ2VyIHRoYW4gbmVlZGVkLAorICAgIC8vIHNvIHRoZXJlIGlzIG5vIGFtYmlndWl0eSBhcyB0byB3aGV0aGVyIG1Xcml0ZUhlYWQgPT0gbVJlYWRIZWFkIG1lYW5zIGJ1ZmZlcgorICAgIC8vIGZ1bGwgb3IgZW1wdHkKKyAgICBzaXplX3QgYXZhaWxhYmxlID0gbUNhcGFjaXR5IC0gc2l6ZXVzZWQgLSAzMjsKKyAgICBpZiAoYXZhaWxhYmxlIDwgbnVtKSB7CisgICAgICAgIGludDMyX3QgbmV3Y2FwYWNpdHkgPSBtQ2FwYWNpdHkgKyAobnVtIC0gYXZhaWxhYmxlKTsKKyAgICAgICAgY2hhciAqIG5ld2J1ZmZlciA9IG5ldyBjaGFyW25ld2NhcGFjaXR5XTsKKyAgICAgICAgbWVtY3B5KG5ld2J1ZmZlciwgbUN1dEJ1ZmZlciwgbUNhcGFjaXR5KTsKKyAgICAgICAgZGVsZXRlIFtdIG1DdXRCdWZmZXI7CisgICAgICAgIG1DYXBhY2l0eSA9IG5ld2NhcGFjaXR5OworICAgICAgICBtQ3V0QnVmZmVyID0gbmV3YnVmZmVyOworICAgICAgICBBTE9HVigicmVhbGxvY2F0ZWQgYnVmZmVyIGF0IHNpemUgJWQiLCBuZXdjYXBhY2l0eSk7CisgICAgfQorCisgICAgc2l6ZV90IGNvcHlmaXJzdCA9IChtQ2FwYWNpdHkgLSBtV3JpdGVIZWFkKTsKKyAgICBpZiAoY29weWZpcnN0ID4gbnVtKSBjb3B5Zmlyc3QgPSBudW07CisgICAgaWYgKGNvcHlmaXJzdCkgeworICAgICAgICBtZW1jcHkobUN1dEJ1ZmZlciArIG1Xcml0ZUhlYWQsIHNyYywgY29weWZpcnN0KTsKKyAgICAgICAgbnVtIC09IGNvcHlmaXJzdDsKKyAgICAgICAgc3JjICs9IGNvcHlmaXJzdDsKKyAgICAgICAgbVdyaXRlSGVhZCArPSBjb3B5Zmlyc3Q7CisgICAgICAgIENIRUNLX0xFKG1Xcml0ZUhlYWQsIG1DYXBhY2l0eSk7CisgICAgICAgIGlmIChtV3JpdGVIZWFkID09IG1DYXBhY2l0eSkgbVdyaXRlSGVhZCA9IDA7CisgICAgICAgIGlmIChudW0pIHsKKyAgICAgICAgICAgIG1lbWNweShtQ3V0QnVmZmVyLCBzcmMsIG51bSk7CisgICAgICAgICAgICBtV3JpdGVIZWFkICs9IG51bTsKKyAgICAgICAgfQorICAgIH0KK30KKworc2l6ZV90IFNraXBDdXRCdWZmZXI6OnJlYWQoY2hhciAqZHN0LCBzaXplX3QgbnVtKSB7CisgICAgaW50MzJfdCBhdmFpbGFibGUgPSAobVdyaXRlSGVhZCAtIG1SZWFkSGVhZCk7CisgICAgaWYgKGF2YWlsYWJsZSA8IDApIGF2YWlsYWJsZSArPSBtQ2FwYWNpdHk7CisKKyAgICBhdmFpbGFibGUgLT0gbUJhY2tQYWRkaW5nOworICAgIGlmIChhdmFpbGFibGUgPD0wKSB7CisgICAgICAgIHJldHVybiAwOworICAgIH0KKyAgICBpZiAoYXZhaWxhYmxlIDwgaW50MzJfdChudW0pKSB7CisgICAgICAgIG51bSA9IGF2YWlsYWJsZTsKKyAgICB9CisKKyAgICBzaXplX3QgY29weWZpcnN0ID0gKG1DYXBhY2l0eSAtIG1SZWFkSGVhZCk7CisgICAgaWYgKGNvcHlmaXJzdCA+IG51bSkgY29weWZpcnN0ID0gbnVtOworICAgIGlmIChjb3B5Zmlyc3QpIHsKKyAgICAgICAgbWVtY3B5KGRzdCwgbUN1dEJ1ZmZlciArIG1SZWFkSGVhZCwgY29weWZpcnN0KTsKKyAgICAgICAgbnVtIC09IGNvcHlmaXJzdDsKKyAgICAgICAgZHN0ICs9IGNvcHlmaXJzdDsKKyAgICAgICAgbVJlYWRIZWFkICs9IGNvcHlmaXJzdDsKKyAgICAgICAgQ0hFQ0tfTEUobVJlYWRIZWFkLCBtQ2FwYWNpdHkpOworICAgICAgICBpZiAobVJlYWRIZWFkID09IG1DYXBhY2l0eSkgbVJlYWRIZWFkID0gMDsKKyAgICAgICAgaWYgKG51bSkgeworICAgICAgICAgICAgbWVtY3B5KGRzdCwgbUN1dEJ1ZmZlciwgbnVtKTsKKyAgICAgICAgICAgIG1SZWFkSGVhZCArPSBudW07CisgICAgICAgIH0KKyAgICB9CisgICAgcmV0dXJuIGF2YWlsYWJsZTsKK30KKworc2l6ZV90IFNraXBDdXRCdWZmZXI6OnNpemUoKSB7CisgICAgaW50MzJfdCBhdmFpbGFibGUgPSAobVdyaXRlSGVhZCAtIG1SZWFkSGVhZCk7CisgICAgaWYgKGF2YWlsYWJsZSA8IDApIGF2YWlsYWJsZSArPSBtQ2FwYWNpdHk7CisgICAgcmV0dXJuIGF2YWlsYWJsZTsKK30KKworfSAgLy8gbmFtZXNwYWNlIGFuZHJvaWQKZGlmZiAtLWdpdCBhL21lZGlhL2NvZGVjMi9zZnBsdWdpbi9Ta2lwQ3V0QnVmZmVyLmggYi9tZWRpYS9jb2RlYzIvc2ZwbHVnaW4vU2tpcEN1dEJ1ZmZlci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBmYjU2OTAKLS0tIC9kZXYvbnVsbAorKysgYi9tZWRpYS9jb2RlYzIvc2ZwbHVnaW4vU2tpcEN1dEJ1ZmZlci5oCkBAIC0wLDAgKzEsNjcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworCisjaWZuZGVmIFNLSVBfQ1VUX0JVRkZFUl9IXworCisjZGVmaW5lIFNLSVBfQ1VUX0JVRkZFUl9IXworCisjaW5jbHVkZSA8bWVkaWEvTWVkaWFDb2RlY0J1ZmZlci5oPgorI2luY2x1ZGUgPG1lZGlhL3N0YWdlZnJpZ2h0L01lZGlhQnVmZmVyLmg+CisjaW5jbHVkZSA8bWVkaWEvc3RhZ2VmcmlnaHQvZm91bmRhdGlvbi9BQnVmZmVyLmg+CisKK25hbWVzcGFjZSBhbmRyb2lkIHsKKworLyoqCisgKiB1dGlsaXR5IGNsYXNzIHRvIGN1dCB0aGUgc3RhcnQgYW5kIGVuZCBvZmYgYSBzdHJlYW0gb2YgZGF0YSBpbiBNZWRpYUJ1ZmZlcnMKKyAqCisgKi8KK2NsYXNzIFNraXBDdXRCdWZmZXI6IHB1YmxpYyBSZWZCYXNlIHsKKyBwdWJsaWM6CisgICAgLy8gJ3NraXAnIGlzIHRoZSBudW1iZXIgb2YgZnJhbWVzIHRvIHNraXAgZnJvbSB0aGUgYmVnaW5uaW5nCisgICAgLy8gJ2N1dCcgaXMgdGhlIG51bWJlciBvZiBmcmFtZXMgdG8gY3V0IGZyb20gdGhlIGVuZAorICAgIC8vICdudW0xNkJpdENoYW5uZWxzJyBpcyB0aGUgbnVtYmVyIG9mIGNoYW5uZWxzLCB3aGljaCBhcmUgYXNzdW1lZCB0byBiZSAxNiBiaXQgd2lkZSBlYWNoCisgICAgU2tpcEN1dEJ1ZmZlcihzaXplX3Qgc2tpcCwgc2l6ZV90IGN1dCwgc2l6ZV90IG51bTE2Q2hhbm5lbHMpOworCisgICAgLy8gU3VibWl0IG9uZSBNZWRpYUJ1ZmZlciBmb3Igc2tpcHBpbmcgYW5kIGN1dHRpbmcuIFRoaXMgbWF5IGNvbnN1bWUgYWxsIG9yCisgICAgLy8gc29tZSBvZiB0aGUgZGF0YSBpbiB0aGUgYnVmZmVyLCBvciBpdCBtYXkgYWRkIGRhdGEgdG8gaXQuCisgICAgLy8gQWZ0ZXIgdGhpcywgdGhlIGNhbGxlciBzaG91bGQgY29udGludWUgcHJvY2Vzc2luZyB0aGUgYnVmZmVyIGFzIHVzdWFsLgorICAgIHZvaWQgc3VibWl0KE1lZGlhQnVmZmVyICpidWZmZXIpOworICAgIHZvaWQgc3VibWl0KGNvbnN0IHNwPEFCdWZmZXI+JiBidWZmZXIpOyAgICAvLyBzYW1lIGFzIGFib3ZlLCBidXQgd2l0aCBhbiBBQnVmZmVyCisgICAgdm9pZCBzdWJtaXQoY29uc3Qgc3A8TWVkaWFDb2RlY0J1ZmZlcj4mIGJ1ZmZlcik7ICAgIC8vIHNhbWUgYXMgYWJvdmUsIGJ1dCB3aXRoIGFuIEFCdWZmZXIKKyAgICB2b2lkIGNsZWFyKCk7CisgICAgc2l6ZV90IHNpemUoKTsgLy8gaG93IG1hbnkgYnl0ZXMgYXJlIGN1cnJlbnRseSBzdG9yZWQgaW4gdGhlIGJ1ZmZlcgorCisgcHJvdGVjdGVkOgorICAgIHZpcnR1YWwgflNraXBDdXRCdWZmZXIoKTsKKworIHByaXZhdGU6CisgICAgdm9pZCB3cml0ZShjb25zdCBjaGFyICpzcmMsIHNpemVfdCBudW0pOworICAgIHNpemVfdCByZWFkKGNoYXIgKmRzdCwgc2l6ZV90IG51bSk7CisgICAgdGVtcGxhdGUgPHR5cGVuYW1lIFQ+CisgICAgdm9pZCBzdWJtaXRJbnRlcm5hbChjb25zdCBzcDxUPiYgYnVmZmVyKTsKKyAgICBpbnQzMl90IG1Ta2lwOworICAgIGludDMyX3QgbUZyb250UGFkZGluZzsKKyAgICBpbnQzMl90IG1CYWNrUGFkZGluZzsKKyAgICBpbnQzMl90IG1Xcml0ZUhlYWQ7CisgICAgaW50MzJfdCBtUmVhZEhlYWQ7CisgICAgaW50MzJfdCBtQ2FwYWNpdHk7CisgICAgY2hhciogbUN1dEJ1ZmZlcjsKKyAgICBESVNBTExPV19FVklMX0NPTlNUUlVDVE9SUyhTa2lwQ3V0QnVmZmVyKTsKK307CisKK30gIC8vIG5hbWVzcGFjZSBhbmRyb2lkCisKKyNlbmRpZiAgLy8gT01YX0NPREVDX0hfCmRpZmYgLS1naXQgYS9tZWRpYS9jb2RlYzIvc2ZwbHVnaW4vdGVzdHMvQW5kcm9pZC5icCBiL21lZGlhL2NvZGVjMi9zZnBsdWdpbi90ZXN0cy9BbmRyb2lkLmJwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJlN2Y1NWMKLS0tIC9kZXYvbnVsbAorKysgYi9tZWRpYS9jb2RlYzIvc2ZwbHVnaW4vdGVzdHMvQW5kcm9pZC5icApAQCAtMCwwICsxLDUyIEBACitjY190ZXN0IHsKKyAgICBuYW1lOiAiY2NvZGVjX3VuaXRfdGVzdCIsCisKKyAgICBzcmNzOiBbCisgICAgICAgICJSZWZsZWN0ZWRQYXJhbVVwZGF0ZXJfdGVzdC5jcHAiLAorICAgIF0sCisKKyAgICBpbmNsdWRlX2RpcnM6IFsKKyAgICAgICAgImZyYW1ld29ya3MvYXYvbWVkaWEvY29kZWMyL3NmcGx1Z2luIiwKKyAgICBdLAorCisgICAgc2hhcmVkX2xpYnM6IFsKKyAgICAgICAgImxpYmNvZGVjMiIsCisgICAgICAgICJsaWJzZnBsdWdpbl9jY29kZWMiLAorICAgICAgICAibGlic3RhZ2VmcmlnaHRfZm91bmRhdGlvbiIsCisgICAgICAgICJsaWJ1dGlscyIsCisgICAgXSwKKworICAgIGNmbGFnczogWworICAgICAgICAiLVdlcnJvciIsCisgICAgICAgICItV2FsbCIsCisgICAgXSwKK30KKworY2NfdGVzdCB7CisgICAgbmFtZTogIm1jX3Nhbml0eV90ZXN0IiwKKworICAgIHNyY3M6IFsKKyAgICAgICAgIk1lZGlhQ29kZWNfc2FuaXR5X3Rlc3QuY3BwIiwKKyAgICBdLAorCisgICAgaW5jbHVkZV9kaXJzOiBbCisgICAgICAgICJmcmFtZXdvcmtzL2F2L21lZGlhL2NvZGVjMi9zZnBsdWdpbiIsCisgICAgXSwKKworICAgIHNoYXJlZF9saWJzOiBbCisgICAgICAgICJsaWJiaW5kZXIiLAorICAgICAgICAibGliY29kZWMyIiwKKyAgICAgICAgImxpYmd1aSIsCisgICAgICAgICJsaWJtZWRpYSIsCisgICAgICAgICJsaWJtZWRpYV9vbXgiLAorICAgICAgICAibGlic2ZwbHVnaW5fY2NvZGVjIiwKKyAgICAgICAgImxpYnN0YWdlZnJpZ2h0IiwKKyAgICAgICAgImxpYnN0YWdlZnJpZ2h0X2ZvdW5kYXRpb24iLAorICAgICAgICAibGlidXRpbHMiLAorICAgIF0sCisKKyAgICBjZmxhZ3M6IFsKKyAgICAgICAgIi1XZXJyb3IiLAorICAgICAgICAiLVdhbGwiLAorICAgIF0sCit9CmRpZmYgLS1naXQgYS9tZWRpYS9jb2RlYzIvc2ZwbHVnaW4vdGVzdHMvTWVkaWFDb2RlY19zYW5pdHlfdGVzdC5jcHAgYi9tZWRpYS9jb2RlYzIvc2ZwbHVnaW4vdGVzdHMvTWVkaWFDb2RlY19zYW5pdHlfdGVzdC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmEzNjg3YgotLS0gL2Rldi9udWxsCisrKyBiL21lZGlhL2NvZGVjMi9zZnBsdWdpbi90ZXN0cy9NZWRpYUNvZGVjX3Nhbml0eV90ZXN0LmNwcApAQCAtMCwwICsxLDQ1MyBAQAorLyoKKyAqIENvcHlyaWdodCAyMDE4IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KKworI2luY2x1ZGUgPHN0ZGxpYi5oPgorCisjaW5jbHVkZSA8YWxnb3JpdGhtPgorCisjaW5jbHVkZSA8YmluZGVyL1Byb2Nlc3NTdGF0ZS5oPgorI2luY2x1ZGUgPGd0ZXN0L2d0ZXN0Lmg+CisjaW5jbHVkZSA8Z3VpL1N1cmZhY2UuaD4KKyNpbmNsdWRlIDxtZWRpYS9JQ3J5cHRvLmg+CisjaW5jbHVkZSA8bWVkaWEvTWVkaWFDb2RlY0J1ZmZlci5oPgorI2luY2x1ZGUgPG1lZGlhL2hhcmR3YXJlL1ZpZGVvQVBJLmg+CisjaW5jbHVkZSA8bWVkaWEvc3RhZ2VmcmlnaHQvTWVkaWFDb2RlYy5oPgorI2luY2x1ZGUgPG1lZGlhL3N0YWdlZnJpZ2h0L01lZGlhQ29kZWNDb25zdGFudHMuaD4KKyNpbmNsdWRlIDxtZWRpYS9zdGFnZWZyaWdodC9mb3VuZGF0aW9uL0FCdWZmZXIuaD4KKyNpbmNsdWRlIDxtZWRpYS9zdGFnZWZyaWdodC9mb3VuZGF0aW9uL0FMb29wZXIuaD4KKyNpbmNsdWRlIDxtZWRpYS9zdGFnZWZyaWdodC9mb3VuZGF0aW9uL0FNZXNzYWdlLmg+CisKK25hbWVzcGFjZSBhbmRyb2lkIHsKKworY2xhc3MgTWVkaWFDb2RlY1Nhbml0eVRlc3QgOiBwdWJsaWMgOjp0ZXN0aW5nOjpUZXN0IHsKK3B1YmxpYzoKKyAgICBNZWRpYUNvZGVjU2FuaXR5VGVzdCgpCisgICAgICAgIDogbG9vcGVyKG5ldyBBTG9vcGVyKSwKKyAgICAgICAgICBjZmcobmV3IEFNZXNzYWdlKSwKKyAgICAgICAgICBpZm10KG5ldyBBTWVzc2FnZSksCisgICAgICAgICAgb2ZtdChuZXcgQU1lc3NhZ2UpIHsKKyAgICAgICAgUHJvY2Vzc1N0YXRlOjpzZWxmKCktPnN0YXJ0VGhyZWFkUG9vbCgpOworICAgICAgICBsb29wZXItPnN0YXJ0KCk7CisgICAgfQorCisgICAgfk1lZGlhQ29kZWNTYW5pdHlUZXN0KCkgeworICAgICAgICBpZiAoY29kZWMgIT0gbnVsbHB0cikgeworICAgICAgICAgICAgY29kZWMtPnJlbGVhc2UoKTsKKyAgICAgICAgfQorICAgICAgICBsb29wZXItPnN0b3AoKTsKKyAgICB9CisKKyAgICBzcDxBTG9vcGVyPiBsb29wZXI7CisgICAgc3A8TWVkaWFDb2RlYz4gY29kZWM7CisgICAgc3A8QU1lc3NhZ2U+IGNmZzsKKyAgICBzcDxBTWVzc2FnZT4gaWZtdDsKKyAgICBzcDxBTWVzc2FnZT4gb2ZtdDsKK307CisKK2NvbnN0IHN0YXRpYyBzaXplX3Qga0xpbmVhckJ1ZmZlclNpemUgPSAxMDQ4NTc2OworCisvLyBkYXRhIGZvciBhIGNvZGVjIGlucHV0IGZyYW1lCitzdHJ1Y3QgRnJhbWVEYXRhIHsKKyAgICBjb25zdCB1aW50OF90ICpkYXRhOworICAgIHNpemVfdCBzaXplOworICAgIHRlbXBsYXRlPHNpemVfdCBOPgorICAgIGNvbnN0ZXhwciBGcmFtZURhdGEoY29uc3QgdWludDhfdCgmZGF0YV8pW05dKSA6IGRhdGEoZGF0YV8pLCBzaXplKE4pIHsgfQorfTsKKworLy8gb25lIHllbGxvdyBmcmFtZSBvZiAyNDB4MTgwIChhbGJlaXQgNDo0OjQpCitjb25zdCB1aW50OF90IGF2Y1N0cmVhbV9BMVtdID0geyAvLyBJRFIgZnJhbWUKKyAgICAweDAwLCAweDAwLCAweDAwLCAweDAxLCAweDY3LCAweDY0LCAweDAwLCAweDBkLCAweGFjLCAweGQ5LCAweDQxLCAweDQxLCAweGZhLCAweDEwLCAweDAwLCAweDAwLAorICAgIDB4MDMsIDB4MDAsIDB4MTAsIDB4MDAsIDB4MDAsIDB4MDMsIDB4MDMsIDB4MjAsIDB4ZjEsIDB4NDIsIDB4OTksIDB4NjAsCisKKyAgICAweDAwLCAweDAwLCAweDAwLCAweDAxLCAweDY4LCAweGViLCAweGUzLCAweGNiLCAweDIyLCAweGMwLAorCisgICAgMHgwMCwgMHgwMCwgMHgwMSwgMHg2NSwgMHg4OCwgMHg4NCwgMHgwMCwgMHgyYiwgMHhmZiwgMHhmZSwgMHhkOCwgMHhlNywgMHhmMywgMHgyYywgMHhhNSwgMHg2MCwKKyAgICAweGNhLCAweGJiLCAweGYxLCAweDVjLCAweDQ0LCAweDdjLCAweDlhLCAweGE1LCAweGMzLCAweGFiLCAweDJmLCAweDc3LCAweDBhLCAweDk0LCAweDBkLCAweDE5LAorICAgIDB4NDMsIDB4M2IsIDB4NGYsIDB4MjUsIDB4ZWEsIDB4NjYsIDB4MDAsIDB4MDEsIDB4MjQsIDB4Y2QsIDB4MzUsIDB4NWYsIDB4YzIsIDB4MzQsIDB4ODksIDB4ZDEsCisgICAgMHhhNSwgMHg2MCwgMHgwOSwgMHg5OCwgMHgwMCwgMHgwMSwgMHgxYiwgMHgwZSwgMHhjYiwgMHgwZCwgMHgwNCwgMHg4NiwgMHg5NCwgMHhlMiwgMHgzMiwgMHgzYywKKyAgICAweGRkLCAweDBmLAorfTsKKworRnJhbWVEYXRhIGF2Y1N0cmVhbV9BW10gX191bnVzZWQgPSB7IGF2Y1N0cmVhbV9BMSB9OworCisvLyBBVkMgc3RyZWFtIG9mIDIgeWVsbG93IGZyYW1lcyAoMjQweDE4MCkKK2NvbnN0IHVpbnQ4X3QgYXZjU3RyZWFtX0IxW10gPSB7IC8vIElEUiBmcmFtZQorICAgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4NjcsIDB4NjQsIDB4MDAsIDB4MGMsIDB4YWMsIDB4ZDksIDB4NDEsIDB4NDEsIDB4ZmEsIDB4MTAsIDB4MDAsIDB4MDAsCisgICAgMHgwMywgMHgwMCwgMHgxMCwgMHgwMCwgMHgwMCwgMHgwMywgMHgwMiwgMHg4MCwgMHhmMSwgMHg0MiwgMHg5OSwgMHg2MCwKKworICAgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4NjgsIDB4ZWIsIDB4ZTMsIDB4Y2IsIDB4MjIsIDB4YzAsCisKKyAgICAweDAwLCAweDAwLCAweDAxLCAweDY1LCAweDg4LCAweDg0LCAweDAwLCAweDMzLCAweGZmLCAweGZlLCAweGRmLCAweDMyLCAweGY4LCAweDE0LCAweGQ2LCAweDI1LAorICAgIDB4ZDAsIDB4NzQsIDB4NDIsIDB4NTAsIDB4ODQsIDB4NmYsIDB4ZjQsIDB4YzIsIDB4NWMsIDB4NzYsIDB4MzcsIDB4MTcsIDB4NzIsIDB4YWMsIDB4NTIsIDB4ZmMsCisgICAgMHhkNiwgMHgxZiwgMHhkMiwgMHhkMCwgMHg2MCwgMHhiMiwgMHgyMCwgMHgwMCwgMHgxMCwgMHgzZCwgMHgyYSwgMHhjMCwgMHhlNCwgMHgyNywgMHhjYiwgMHhjZSwKKyAgICAweGVhLCAweDI1LCAweDAwLCAweDgxLCAweDAwLCAweDAwLCAweDBmLCAweDQwLCAweGJjLCAweDgxLCAweDE1LCAweGMxLCAweDY1LCAweDIwLCAweDgwLCAweDgxLAorICAgIDB4N2EsIDB4NTcsIDB4NTEsCit9OworCitjb25zdCB1aW50OF90IGF2Y1N0cmVhbV9CMltdID0geyAvLyBQIGZyYW1lCisgICAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMSwgMHg0MSwgMHg5YSwgMHgyMSwgMHg2YywgMHg0MiwgMHhiZiwgMHhmZSwgMHgzOCwgMHg0MCwgMHgwMCwgMHgwZCwgMHg0OCwKK307CisKK0ZyYW1lRGF0YSBhdmNTdHJlYW1fQltdID0geyBhdmNTdHJlYW1fQjEsIGF2Y1N0cmVhbV9CMiB9OworCitjbGFzcyBNZWRpYUNvZGVjSW5wdXRCdWZmZXJTaXplVGVzdCA6IHB1YmxpYyBNZWRpYUNvZGVjU2FuaXR5VGVzdCwKKyAgICAgICAgcHVibGljIDo6dGVzdGluZzo6V2l0aFBhcmFtSW50ZXJmYWNlPGludDMyX3Q+IHsKK307CisKK1RFU1RfUChNZWRpYUNvZGVjSW5wdXRCdWZmZXJTaXplVGVzdCwgVGVzdEF2Y0RlY29kZXIpIHsKKyAgICBjb2RlYyA9IE1lZGlhQ29kZWM6OkNyZWF0ZUJ5Q29tcG9uZW50TmFtZShsb29wZXIsICJjMi5hbmRyb2lkLmF2Yy5kZWNvZGVyIik7CisgICAgY2ZnLT5zZXRJbnQzMigid2lkdGgiLCAzMjApOworICAgIGNmZy0+c2V0SW50MzIoImhlaWdodCIsIDI0MCk7CisgICAgY2ZnLT5zZXRTdHJpbmcoIm1pbWUiLCBNSU1FVFlQRV9WSURFT19BVkMpOworCisgICAgY29uc3QgaW50MzJfdCBJbnB1dFNpemUgPSBHZXRQYXJhbSgpOworICAgIGlmIChJbnB1dFNpemUgPj0gMCkgeworICAgICAgICBjZmctPnNldEludDMyKCJtYXgtaW5wdXQtc2l6ZSIsIElucHV0U2l6ZSk7CisgICAgfQorCisgICAgRVhQRUNUX0VRKGNvZGVjLT5jb25maWd1cmUoY2ZnLCBudWxscHRyLCBudWxscHRyLCAwKSwgT0spOworICAgIEVYUEVDVF9FUShjb2RlYy0+Z2V0SW5wdXRGb3JtYXQoJmlmbXQpLCBPSyk7CisgICAgaW50MzJfdCBtYXhJbnB1dFNpemU7CisgICAgQVNTRVJUX1RSVUUoaWZtdC0+ZmluZEludDMyKCJtYXgtaW5wdXQtc2l6ZSIsICZtYXhJbnB1dFNpemUpKTsKKyAgICBpZiAoSW5wdXRTaXplID4gMCkgeworICAgICAgICBFWFBFQ1RfRVEobWF4SW5wdXRTaXplLCBJbnB1dFNpemUpOworICAgIH0gZWxzZSB7CisgICAgICAgIEVYUEVDVF9HRShtYXhJbnB1dFNpemUsIDEgPDwgMjApOyAvLyAxIE1CCisgICAgfQorICAgIEVYUEVDVF9FUShjb2RlYy0+c3RhcnQoKSwgIE9LKTsKKyAgICBzaXplX3QgaXg7CisgICAgRVhQRUNUX0VRKGNvZGVjLT5kZXF1ZXVlSW5wdXRCdWZmZXIoJml4LCAxMDAwMDAwKSwgT0spOworICAgIHNwPE1lZGlhQ29kZWNCdWZmZXI+IGJ1ZjsKKyAgICBFWFBFQ1RfRVEoY29kZWMtPmdldElucHV0QnVmZmVyKGl4LCAmYnVmKSwgIE9LKTsKKyAgICBFWFBFQ1RfR0UoYnVmLT5zaXplKCksIChzaXplX3QpbWF4SW5wdXRTaXplKTsKKyAgICBFWFBFQ1RfTEUoYnVmLT5zaXplKCksIChzaXplX3QpbWF4SW5wdXRTaXplICsgNDA5NnUpOworfQorCitURVNUX1AoTWVkaWFDb2RlY0lucHV0QnVmZmVyU2l6ZVRlc3QsIFRlc3RWaWRlb0RlY29kZXIpIHsKKyAgICBjb2RlYyA9IE1lZGlhQ29kZWM6OkNyZWF0ZUJ5Q29tcG9uZW50TmFtZShsb29wZXIsICJjMi5hbmRyb2lkLnZwOC5kZWNvZGVyIik7CisgICAgY2ZnLT5zZXRJbnQzMigid2lkdGgiLCAzMjApOworICAgIGNmZy0+c2V0SW50MzIoImhlaWdodCIsIDI0MCk7CisgICAgY2ZnLT5zZXRTdHJpbmcoIm1pbWUiLCBNSU1FVFlQRV9WSURFT19WUDgpOworCisgICAgY29uc3QgaW50MzJfdCBJbnB1dFNpemUgPSBHZXRQYXJhbSgpOworICAgIGlmIChJbnB1dFNpemUgPj0gMCkgeworICAgICAgICBjZmctPnNldEludDMyKCJtYXgtaW5wdXQtc2l6ZSIsIElucHV0U2l6ZSk7CisgICAgfQorCisgICAgRVhQRUNUX0VRKGNvZGVjLT5jb25maWd1cmUoY2ZnLCBudWxscHRyLCBudWxscHRyLCAwKSwgT0spOworICAgIEVYUEVDVF9FUShjb2RlYy0+Z2V0SW5wdXRGb3JtYXQoJmlmbXQpLCBPSyk7CisgICAgaW50MzJfdCBtYXhJbnB1dFNpemU7CisgICAgQVNTRVJUX1RSVUUoaWZtdC0+ZmluZEludDMyKCJtYXgtaW5wdXQtc2l6ZSIsICZtYXhJbnB1dFNpemUpKTsKKyAgICBpZiAoSW5wdXRTaXplID4gMCkgeworICAgICAgICBFWFBFQ1RfRVEobWF4SW5wdXRTaXplLCBJbnB1dFNpemUpOworICAgIH0gZWxzZSB7CisgICAgICAgIEVYUEVDVF9HRShtYXhJbnB1dFNpemUsIDEgPDwgMjApOyAvLyAxIE1CCisgICAgfQorICAgIEVYUEVDVF9FUShjb2RlYy0+c3RhcnQoKSwgIE9LKTsKKyAgICBzaXplX3QgaXg7CisgICAgRVhQRUNUX0VRKGNvZGVjLT5kZXF1ZXVlSW5wdXRCdWZmZXIoJml4LCAxMDAwMDAwKSwgT0spOworICAgIHNwPE1lZGlhQ29kZWNCdWZmZXI+IGJ1ZjsKKyAgICBFWFBFQ1RfRVEoY29kZWMtPmdldElucHV0QnVmZmVyKGl4LCAmYnVmKSwgIE9LKTsKKyAgICBFWFBFQ1RfR0UoYnVmLT5zaXplKCksIChzaXplX3QpbWF4SW5wdXRTaXplKTsKKyAgICBFWFBFQ1RfTEUoYnVmLT5zaXplKCksIChzaXplX3QpbWF4SW5wdXRTaXplICsgNDA5NnUpOworfQorCitURVNUX1AoTWVkaWFDb2RlY0lucHV0QnVmZmVyU2l6ZVRlc3QsIFRlc3RBdWRpb0RlY29kZXIpIHsKKyAgICBjb2RlYyA9IE1lZGlhQ29kZWM6OkNyZWF0ZUJ5Q29tcG9uZW50TmFtZShsb29wZXIsICJjMi5hbmRyb2lkLmFhYy5kZWNvZGVyIik7CisgICAgY2ZnLT5zZXRJbnQzMigic2FtcGxlLXJhdGUiLCA0NDEwMCk7CisgICAgY2ZnLT5zZXRJbnQzMigiY2hhbm5lbC1jb3VudCIsIDIpOworICAgIGNmZy0+c2V0U3RyaW5nKCJtaW1lIiwgTUlNRVRZUEVfQVVESU9fQUFDKTsKKworICAgIGNvbnN0IGludDMyX3QgSW5wdXRTaXplID0gR2V0UGFyYW0oKTsKKyAgICBpZiAoSW5wdXRTaXplID49IDApIHsKKyAgICAgICAgY2ZnLT5zZXRJbnQzMigibWF4LWlucHV0LXNpemUiLCBJbnB1dFNpemUpOworICAgIH0KKworICAgIEVYUEVDVF9FUShjb2RlYy0+Y29uZmlndXJlKGNmZywgbnVsbHB0ciwgbnVsbHB0ciwgMCksIE9LKTsKKyAgICBFWFBFQ1RfRVEoY29kZWMtPmdldElucHV0Rm9ybWF0KCZpZm10KSwgT0spOworICAgIGludDMyX3QgbWF4SW5wdXRTaXplOworICAgIGlmIChJbnB1dFNpemUgPiAwKSB7CisgICAgICAgIEFTU0VSVF9UUlVFKGlmbXQtPmZpbmRJbnQzMigibWF4LWlucHV0LXNpemUiLCAmbWF4SW5wdXRTaXplKSk7CisgICAgICAgIEVYUEVDVF9FUShtYXhJbnB1dFNpemUsIElucHV0U2l6ZSk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgaWYgKGlmbXQtPmZpbmRJbnQzMigibWF4LWlucHV0LXNpemUiLCAmbWF4SW5wdXRTaXplKSkgeworICAgICAgICAgICAgRVhQRUNUX0VRKG1heElucHV0U2l6ZSwgMSA8PCAxOSk7IC8vIDUxMiBLQgorICAgICAgICB9CisgICAgICAgIG1heElucHV0U2l6ZSA9IGtMaW5lYXJCdWZmZXJTaXplOyAvLyBpbnB1dCBzaXplIGlzIHNldCBieSBjaGFubmVsCisgICAgfQorCisgICAgRVhQRUNUX0VRKGNvZGVjLT5zdGFydCgpLCAgT0spOworICAgIHNpemVfdCBpeDsKKyAgICBFWFBFQ1RfRVEoY29kZWMtPmRlcXVldWVJbnB1dEJ1ZmZlcigmaXgsIDEwMDAwMDApLCBPSyk7CisgICAgc3A8TWVkaWFDb2RlY0J1ZmZlcj4gYnVmOworICAgIEVYUEVDVF9FUShjb2RlYy0+Z2V0SW5wdXRCdWZmZXIoaXgsICZidWYpLCAgT0spOworICAgIEVYUEVDVF9HRShidWYtPnNpemUoKSwgKHNpemVfdCltYXhJbnB1dFNpemUpOworICAgIEVYUEVDVF9MRShidWYtPnNpemUoKSwgKHNpemVfdCltYXhJbnB1dFNpemUgKyA0MDk2dSk7Cit9CisKK0lOU1RBTlRJQVRFX1RFU1RfQ0FTRV9QKElucHV0U2l6ZXMsIE1lZGlhQ29kZWNJbnB1dEJ1ZmZlclNpemVUZXN0LCA6OnRlc3Rpbmc6OlZhbHVlcygtMSwgMTIzNCwgMTIzNDU2NzgpKTsKKworVEVTVF9GKE1lZGlhQ29kZWNTYW5pdHlUZXN0LCBUZXN0QXZjRGVjb2RlckhkclN0YXRpY0luZm8pIHsKKyAgICBjb2RlYyA9IE1lZGlhQ29kZWM6OkNyZWF0ZUJ5Q29tcG9uZW50TmFtZShsb29wZXIsICJjMi5hbmRyb2lkLmF2Yy5kZWNvZGVyIik7CisgICAgY2ZnLT5zZXRJbnQzMigid2lkdGgiLCAzMjApOworICAgIGNmZy0+c2V0SW50MzIoImhlaWdodCIsIDI0MCk7CisgICAgY2ZnLT5zZXRTdHJpbmcoIm1pbWUiLCBNSU1FVFlQRV9WSURFT19BVkMpOworICAgIEhEUlN0YXRpY0luZm8gaW5mbyA9IHsgLm1JRCA9IEhEUlN0YXRpY0luZm86OmtUeXBlMSwgLnNUeXBlMSA9IHsKKyAgICAgICAgLm1SID0geyAueCA9IDM1NDAwLCAueSA9IDE0NjAwIH0sIC5tRyA9IHsgLnggPSA4NTAwLCAgLnkgPSAzOTg1MCB9LAorICAgICAgICAubUIgPSB7IC54ID0gNjU1MCwgIC55ID0gIDIzMDAgfSwgLm1XID0geyAueCA9IDE1NjM1LCAueSA9IDE2NDUwIH0sCisgICAgICAgIC5tTWF4RGlzcGxheUx1bWluYW5jZSA9IDEwMDAsIC5tTWluRGlzcGxheUx1bWluYW5jZSA9IDEwMDAsCisgICAgICAgIC5tTWF4Q29udGVudExpZ2h0TGV2ZWwgPSAxMDAwLCAubU1heEZyYW1lQXZlcmFnZUxpZ2h0TGV2ZWwgPSAxMjAgfQorICAgIH07CisgICAgY2ZnLT5zZXRCdWZmZXIoImhkci1zdGF0aWMtaW5mbyIsIEFCdWZmZXI6OkNyZWF0ZUFzQ29weSgmaW5mbywgc2l6ZW9mKGluZm8pKSk7CisKKyAgICBFWFBFQ1RfRVEoY29kZWMtPmNvbmZpZ3VyZShjZmcsIG51bGxwdHIsIG51bGxwdHIsIDApLCBPSyk7CisgICAgRVhQRUNUX0VRKGNvZGVjLT5nZXRPdXRwdXRGb3JtYXQoJm9mbXQpLCBPSyk7CisgICAgc3A8QUJ1ZmZlcj4gb2luZm87CisgICAgQVNTRVJUX1RSVUUob2ZtdC0+ZmluZEJ1ZmZlcigiaGRyLXN0YXRpYy1pbmZvIiwgJm9pbmZvKSk7CisgICAgQVNTRVJUX0VRKG9pbmZvLT5zaXplKCksIHNpemVvZihpbmZvKSk7CisgICAgRVhQRUNUX0VRKG1lbWNtcChvaW5mby0+ZGF0YSgpLCAmaW5mbywgc2l6ZW9mKGluZm8pKSwgIDApOworCisgICAgRVhQRUNUX0VRKGNvZGVjLT5zdGFydCgpLCAgT0spOworICAgIC8vIGFzc3VtZSB3ZSBjYW4gc3VibWl0IGFsbCBpbnB1dCBiZWZvcmUgZGVxdWV1aW5nIG91dHB1dAorICAgIHNpemVfdCBmcmFtZUl4ID0gMDsKKyAgICBzaXplX3QgaXg7CisgICAgc3A8TWVkaWFDb2RlY0J1ZmZlcj4gYnVmOworICAgIGZvciAoY29uc3QgRnJhbWVEYXRhICZmcmFtZSA6IGF2Y1N0cmVhbV9CKSB7CisgICAgICAgIEVYUEVDVF9FUShjb2RlYy0+ZGVxdWV1ZUlucHV0QnVmZmVyKCZpeCwgMTAwMDAwMCksIE9LKTsKKyAgICAgICAgRVhQRUNUX0VRKGNvZGVjLT5nZXRJbnB1dEJ1ZmZlcihpeCwgJmJ1ZiksICBPSyk7CisgICAgICAgIEFTU0VSVF9HRShidWYtPmNhcGFjaXR5KCksIGZyYW1lLnNpemUpOworICAgICAgICBtZW1jcHkoYnVmLT5iYXNlKCksIGZyYW1lLmRhdGEsIGZyYW1lLnNpemUpOworICAgICAgICBFWFBFQ1RfRVEoYnVmLT5zZXRSYW5nZSgwLCBmcmFtZS5zaXplKSwgT0spOworICAgICAgICBib29sIGVvcyA9ICsrZnJhbWVJeCA9PSBORUxFTShhdmNTdHJlYW1fQik7CisgICAgICAgIEVYUEVDVF9FUShjb2RlYy0+cXVldWVJbnB1dEJ1ZmZlcihpeCwgMCwgZnJhbWUuc2l6ZSwgZnJhbWVJeCAqIDMzMzMzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW9zID8gQlVGRkVSX0ZMQUdfRU5EX09GX1NUUkVBTSA6IDApLCAgT0spOworICAgIH0KKworICAgIHNpemVfdCBvZmZzZXQsIHNpemU7CisgICAgaW50NjRfdCB0czsKKyAgICB1aW50MzJfdCBmbGFnczsKKyAgICBib29sIG1JbmZvRm9ybWF0Q2hhbmdlZE9rID0gdHJ1ZTsKKyAgICBib29sIG1JbmZvQnVmZmVyc0NoYW5nZWRPayA9IHRydWU7CisgICAgd2hpbGUgKHRydWUpIHsKKyAgICAgICAgc3RhdHVzX3QgZXJyID0gY29kZWMtPmRlcXVldWVPdXRwdXRCdWZmZXIoJml4LCAmb2Zmc2V0LCAmc2l6ZSwgJnRzLCAmZmxhZ3MsIDEwMDAwMDApOworICAgICAgICBpZiAoZXJyID09IElORk9fRk9STUFUX0NIQU5HRUQgJiYgbUluZm9Gb3JtYXRDaGFuZ2VkT2spIHsKKyAgICAgICAgICAgIG1JbmZvRm9ybWF0Q2hhbmdlZE9rID0gZmFsc2U7CisgICAgICAgIH0gZWxzZSBpZiAoZXJyID09IElORk9fT1VUUFVUX0JVRkZFUlNfQ0hBTkdFRCAmJiBtSW5mb0J1ZmZlcnNDaGFuZ2VkT2spIHsKKyAgICAgICAgICAgIG1JbmZvQnVmZmVyc0NoYW5nZWRPayA9IGZhbHNlOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgQVNTRVJUX0VRKGVyciwgT0spOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICB9CisgICAgRVhQRUNUX0VRKGNvZGVjLT5nZXRPdXRwdXRCdWZmZXIoaXgsICZidWYpLCBPSyk7CisgICAgRVhQRUNUX0VRKGNvZGVjLT5nZXRPdXRwdXRGb3JtYXQoaXgsICZvZm10KSwgT0spOworICAgIEFTU0VSVF9UUlVFKG9mbXQtPmZpbmRCdWZmZXIoImhkci1zdGF0aWMtaW5mbyIsICZvaW5mbykpOworICAgIEFTU0VSVF9FUShvaW5mby0+c2l6ZSgpLCBzaXplb2YoaW5mbykpOworICAgIEVYUEVDVF9FUShtZW1jbXAob2luZm8tPmRhdGEoKSwgJmluZm8sIHNpemVvZihpbmZvKSksICAwKTsKK30KKworVEVTVF9GKE1lZGlhQ29kZWNTYW5pdHlUZXN0LCBUZXN0VmlkZW9EZWNvZGVySGRyU3RhdGljSW5mbykgeworICAgIGNvZGVjID0gTWVkaWFDb2RlYzo6Q3JlYXRlQnlDb21wb25lbnROYW1lKGxvb3BlciwgImMyLmFuZHJvaWQubXBlZzQuZGVjb2RlciIpOworICAgIGNmZy0+c2V0SW50MzIoIndpZHRoIiwgMzIwKTsKKyAgICBjZmctPnNldEludDMyKCJoZWlnaHQiLCAyNDApOworICAgIGNmZy0+c2V0U3RyaW5nKCJtaW1lIiwgTUlNRVRZUEVfVklERU9fTVBFRzQpOworICAgIEhEUlN0YXRpY0luZm8gaW5mbyA9IHsgLm1JRCA9IEhEUlN0YXRpY0luZm86OmtUeXBlMSwgLnNUeXBlMSA9IHsKKyAgICAgICAgLm1SID0geyAueCA9IDM1NDAwLCAueSA9IDE0NjAwIH0sIC5tRyA9IHsgLnggPSA4NTAwLCAgLnkgPSAzOTg1MCB9LAorICAgICAgICAubUIgPSB7IC54ID0gNjU1MCwgIC55ID0gIDIzMDAgfSwgLm1XID0geyAueCA9IDE1NjM1LCAueSA9IDE2NDUwIH0sCisgICAgICAgIC5tTWF4RGlzcGxheUx1bWluYW5jZSA9IDEwMDAsIC5tTWluRGlzcGxheUx1bWluYW5jZSA9IDEwMDAsCisgICAgICAgIC5tTWF4Q29udGVudExpZ2h0TGV2ZWwgPSAxMDAwLCAubU1heEZyYW1lQXZlcmFnZUxpZ2h0TGV2ZWwgPSAxMjAgfQorICAgIH07CisgICAgY2ZnLT5zZXRCdWZmZXIoImhkci1zdGF0aWMtaW5mbyIsIEFCdWZmZXI6OkNyZWF0ZUFzQ29weSgmaW5mbywgc2l6ZW9mKGluZm8pKSk7CisKKyAgICBFWFBFQ1RfRVEoY29kZWMtPmNvbmZpZ3VyZShjZmcsIG51bGxwdHIsIG51bGxwdHIsIDApLCBPSyk7CisgICAgRVhQRUNUX0VRKGNvZGVjLT5nZXRPdXRwdXRGb3JtYXQoJm9mbXQpLCBPSyk7CisgICAgc3A8QUJ1ZmZlcj4gb2luZm87CisgICAgQVNTRVJUX1RSVUUob2ZtdC0+ZmluZEJ1ZmZlcigiaGRyLXN0YXRpYy1pbmZvIiwgJm9pbmZvKSk7CisgICAgQVNTRVJUX0VRKG9pbmZvLT5zaXplKCksIHNpemVvZihpbmZvKSk7CisgICAgRVhQRUNUX0VRKG1lbWNtcChvaW5mby0+ZGF0YSgpLCAmaW5mbywgc2l6ZW9mKGluZm8pKSwgIDApOworfQorCitjbGFzcyBNZWRpYUNvZGVjQnl0ZUJ1ZmZlclRlc3QgOiBwdWJsaWMgTWVkaWFDb2RlY1Nhbml0eVRlc3QsCisgICAgICAgIHB1YmxpYyA6OnRlc3Rpbmc6OldpdGhQYXJhbUludGVyZmFjZTxpbnQzMl90PiB7Cit9OworCitURVNUX1AoTWVkaWFDb2RlY0J5dGVCdWZmZXJUZXN0LCBUZXN0VmlkZW9EZWNvZGVyNDIwUGxhbmFyKSB7CisgICAgY29kZWMgPSBNZWRpYUNvZGVjOjpDcmVhdGVCeUNvbXBvbmVudE5hbWUobG9vcGVyLCAiYzIuYW5kcm9pZC5hdmMuZGVjb2RlciIpOworLy8gICAgY29kZWMgPSBNZWRpYUNvZGVjOjpDcmVhdGVCeUNvbXBvbmVudE5hbWUobG9vcGVyLCAiT01YLmdvb2dsZS5oMjY0LmRlY29kZXIiKTsKKyAgICBjZmctPnNldEludDMyKCJ3aWR0aCIsIDMyMCk7CisgICAgY2ZnLT5zZXRJbnQzMigiaGVpZ2h0IiwgMjQwKTsKKyAgICBjZmctPnNldFN0cmluZygibWltZSIsIE1JTUVUWVBFX1ZJREVPX0FWQyk7CisgICAgY29uc3QgaW50MzJfdCBDb2xvciA9IEdldFBhcmFtKCk7CisgICAgaWYgKENvbG9yID49IDApIHsKKyAgICAgICAgY2ZnLT5zZXRJbnQzMigiY29sb3ItZm9ybWF0IiwgQ29sb3IpOworICAgIH0KKyAgICBpbnQzMl90IHhjb2xvciA9IENvbG9yID09IC0xID8gQ09MT1JfRm9ybWF0WVVWNDIwUGxhbmFyIDogQ29sb3I7CisKKyAgICBFWFBFQ1RfRVEoY29kZWMtPmNvbmZpZ3VyZShjZmcsIG51bGxwdHIsIG51bGxwdHIsIDApLCBPSyk7CisgICAgRVhQRUNUX0VRKGNvZGVjLT5nZXRPdXRwdXRGb3JtYXQoJm9mbXQpLCBPSyk7CisgICAgaW50MzJfdCBvY29sb3IgPSAtMTsKKyAgICBFWFBFQ1RfVFJVRShvZm10LT5maW5kSW50MzIoImNvbG9yLWZvcm1hdCIsICZvY29sb3IpKTsKKyAgICBFWFBFQ1RfRVEob2NvbG9yLCB4Y29sb3IpOworCisgICAgRVhQRUNUX0VRKGNvZGVjLT5zdGFydCgpLCAgT0spOworICAgIC8vIGFzc3VtZSB3ZSBjYW4gc3VibWl0IGFsbCBpbnB1dCBiZWZvcmUgZGVxdWV1aW5nIG91dHB1dAorICAgIHNpemVfdCBmcmFtZUl4ID0gMDsKKyAgICBzaXplX3QgaXg7CisgICAgc3A8TWVkaWFDb2RlY0J1ZmZlcj4gYnVmOworICAgIGZvciAoY29uc3QgRnJhbWVEYXRhICZmcmFtZSA6IGF2Y1N0cmVhbV9BKSB7CisgICAgICAgIEVYUEVDVF9FUShjb2RlYy0+ZGVxdWV1ZUlucHV0QnVmZmVyKCZpeCwgMTAwMDAwMCksIE9LKTsKKyAgICAgICAgRVhQRUNUX0VRKGNvZGVjLT5nZXRJbnB1dEJ1ZmZlcihpeCwgJmJ1ZiksICBPSyk7CisgICAgICAgIEFTU0VSVF9HRShidWYtPmNhcGFjaXR5KCksIGZyYW1lLnNpemUpOworICAgICAgICBtZW1jcHkoYnVmLT5iYXNlKCksIGZyYW1lLmRhdGEsIGZyYW1lLnNpemUpOworICAgICAgICBFWFBFQ1RfRVEoYnVmLT5zZXRSYW5nZSgwLCBmcmFtZS5zaXplKSwgT0spOworICAgICAgICBib29sIGVvcyA9ICsrZnJhbWVJeCA9PSBORUxFTShhdmNTdHJlYW1fQSk7CisgICAgICAgIEVYUEVDVF9FUShjb2RlYy0+cXVldWVJbnB1dEJ1ZmZlcihpeCwgMCwgZnJhbWUuc2l6ZSwgZnJhbWVJeCAqIDMzMzMzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW9zID8gQlVGRkVSX0ZMQUdfRU5EX09GX1NUUkVBTSA6IDApLCAgT0spOworICAgIH0KKworICAgIHNpemVfdCBvZmZzZXQsIHNpemU7CisgICAgaW50NjRfdCB0czsKKyAgICB1aW50MzJfdCBmbGFnczsKKyAgICBib29sIG1JbmZvRm9ybWF0Q2hhbmdlZE9rID0gdHJ1ZTsKKyAgICBib29sIG1JbmZvQnVmZmVyc0NoYW5nZWRPayA9IHRydWU7CisgICAgd2hpbGUgKHRydWUpIHsKKyAgICAgICAgc3RhdHVzX3QgZXJyID0gY29kZWMtPmRlcXVldWVPdXRwdXRCdWZmZXIoJml4LCAmb2Zmc2V0LCAmc2l6ZSwgJnRzLCAmZmxhZ3MsIDEwMDAwMDApOworICAgICAgICBpZiAoZXJyID09IElORk9fRk9STUFUX0NIQU5HRUQgJiYgbUluZm9Gb3JtYXRDaGFuZ2VkT2spIHsKKyAgICAgICAgICAgIG1JbmZvRm9ybWF0Q2hhbmdlZE9rID0gZmFsc2U7CisgICAgICAgIH0gZWxzZSBpZiAoZXJyID09IElORk9fT1VUUFVUX0JVRkZFUlNfQ0hBTkdFRCAmJiBtSW5mb0J1ZmZlcnNDaGFuZ2VkT2spIHsKKyAgICAgICAgICAgIG1JbmZvQnVmZmVyc0NoYW5nZWRPayA9IGZhbHNlOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgQVNTRVJUX0VRKGVyciwgT0spOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICB9CisgICAgRVhQRUNUX0VRKGNvZGVjLT5nZXRPdXRwdXRCdWZmZXIoaXgsICZidWYpLCBPSyk7CisgICAgRVhQRUNUX0VRKGNvZGVjLT5nZXRPdXRwdXRGb3JtYXQoaXgsICZvZm10KSwgT0spOworICAgIEFTU0VSVF9UUlVFKG9mbXQtPmZpbmRJbnQzMigiY29sb3ItZm9ybWF0IiwgJm9jb2xvcikpOworICAgIEVYUEVDVF9FUShvY29sb3IsIHhjb2xvcikgPDwgb2ZtdC0+ZGVidWdTdHJpbmcoOCkuY19zdHIoKSA8PCBidWYtPm1ldGEoKS0+ZGVidWdTdHJpbmcoOCkuY19zdHIoKTsKKyAgICAvLyBleHBlY3QgYW4gaW1hZ2UtZGF0YSBpbiBib3RoIGZvcm1hdCBhbmQgbWV0YQorICAgIHNwPEFCdWZmZXI+IGltZ0J1ZiwgaW1nQnVmMjsKKyAgICBBU1NFUlRfVFJVRShvZm10LT5maW5kQnVmZmVyKCJpbWFnZS1kYXRhIiwgJmltZ0J1ZikpOworICAgIEFTU0VSVF9UUlVFKGJ1Zi0+bWV0YSgpLT5maW5kQnVmZmVyKCJpbWFnZS1kYXRhIiwgJmltZ0J1ZjIpKTsKKyAgICBFWFBFQ1RfRVEoaW1nQnVmLT5zaXplKCksIHNpemVvZihNZWRpYUltYWdlMikpOworICAgIEFTU0VSVF9FUShpbWdCdWYtPnNpemUoKSwgaW1nQnVmMi0+c2l6ZSgpKTsKKyAgICBFWFBFQ1RfRVEoMCwgbWVtY21wKGltZ0J1Zi0+ZGF0YSgpLCBpbWdCdWYyLT5kYXRhKCksIGltZ0J1Zi0+c2l6ZSgpKSk7CisgICAgTWVkaWFJbWFnZTIgKmltZyA9IChNZWRpYUltYWdlMiopaW1nQnVmLT5kYXRhKCk7CisgICAgRVhQRUNUX0VRKGltZy0+bVR5cGUsIGltZy0+TUVESUFfSU1BR0VfVFlQRV9ZVVYpOworICAgIEVYUEVDVF9FUShpbWctPm1OdW1QbGFuZXMsIDN1KTsKKyAgICBFWFBFQ1RfRVEoaW1nLT5tV2lkdGgsIDMyMHUpOworICAgIEVYUEVDVF9FUShpbWctPm1IZWlnaHQsIDI0MHUpOworICAgIEVYUEVDVF9FUShpbWctPm1CaXREZXB0aCwgOHUpOworICAgIEVYUEVDVF9FUShpbWctPm1CaXREZXB0aEFsbG9jYXRlZCwgOHUpOworCisgICAgLy8gcmVhZCBzdHJpZGVzIGZyb20gZm9ybWF0CisgICAgaW50MzJfdCBzdHJpZGUsIHZzdHJpZGU7CisgICAgb2ZtdC0+ZmluZEludDMyKCJzdHJpZGUiLCAmc3RyaWRlKSAgICAgICAgICB8fCBvZm10LT5maW5kSW50MzIoIndpZHRoIiwgJnN0cmlkZSk7CisgICAgb2ZtdC0+ZmluZEludDMyKCJzbGljZS1oZWlnaHQiLCAmdnN0cmlkZSkgICB8fCBvZm10LT5maW5kSW50MzIoImhlaWdodCIsICZ2c3RyaWRlKTsKKworICAgIEVYUEVDVF9FUShpbWctPm1QbGFuZVtpbWctPlldLm1Ib3JpelN1YnNhbXBsaW5nLCAxdSk7CisgICAgRVhQRUNUX0VRKGltZy0+bVBsYW5lW2ltZy0+WV0ubVZlcnRTdWJzYW1wbGluZywgMXUpOworICAgIEVYUEVDVF9FUShpbWctPm1QbGFuZVtpbWctPlVdLm1Ib3JpelN1YnNhbXBsaW5nLCAydSk7CisgICAgRVhQRUNUX0VRKGltZy0+bVBsYW5lW2ltZy0+VV0ubVZlcnRTdWJzYW1wbGluZywgMnUpOworICAgIEVYUEVDVF9FUShpbWctPm1QbGFuZVtpbWctPlZdLm1Ib3JpelN1YnNhbXBsaW5nLCAydSk7CisgICAgRVhQRUNUX0VRKGltZy0+bVBsYW5lW2ltZy0+Vl0ubVZlcnRTdWJzYW1wbGluZywgMnUpOworCisgICAgc3dpdGNoICh4Y29sb3IpIHsKKyAgICAgICAgLy8gZGVmaW5lZCBmb3JtYXRzCisgICAgICAgIGNhc2UgQ09MT1JfRm9ybWF0WVVWNDIwUGxhbmFyOgorICAgICAgICBjYXNlIENPTE9SX0Zvcm1hdFlVVjQyMFBhY2tlZFBsYW5hcjoKKyAgICAgICAgICAgIEVYUEVDVF9FUShpbWctPm1QbGFuZVtpbWctPlldLm1PZmZzZXQsIDB1KTsKKyAgICAgICAgICAgIEVYUEVDVF9FUShpbWctPm1QbGFuZVtpbWctPlldLm1Db2xJbmMsIDEpOworICAgICAgICAgICAgRVhQRUNUX0VRKGltZy0+bVBsYW5lW2ltZy0+WV0ubVJvd0luYywgc3RyaWRlKTsKKworICAgICAgICAgICAgRVhQRUNUX0VRKGltZy0+bVBsYW5lW2ltZy0+VV0ubU9mZnNldCwgKHVpbnQzMl90KShzdHJpZGUgKiB2c3RyaWRlKSk7CisgICAgICAgICAgICBFWFBFQ1RfRVEoaW1nLT5tUGxhbmVbaW1nLT5VXS5tQ29sSW5jLCAxKTsKKyAgICAgICAgICAgIEVYUEVDVF9FUShpbWctPm1QbGFuZVtpbWctPlVdLm1Sb3dJbmMsIHN0cmlkZSAvIDIpOworCisgICAgICAgICAgICBFWFBFQ1RfRVEoaW1nLT5tUGxhbmVbaW1nLT5WXS5tT2Zmc2V0LCAodWludDMyX3QpKHN0cmlkZSAqIHZzdHJpZGUgKiA1IC8gNCkpOworICAgICAgICAgICAgRVhQRUNUX0VRKGltZy0+bVBsYW5lW2ltZy0+Vl0ubUNvbEluYywgMSk7CisgICAgICAgICAgICBFWFBFQ1RfRVEoaW1nLT5tUGxhbmVbaW1nLT5WXS5tUm93SW5jLCBzdHJpZGUgLyAyKTsKKworICAgICAgICAgICAgRVhQRUNUX0dFKHNpemUsIChzaXplX3QpKHN0cmlkZSAqIHZzdHJpZGUgKiA1IC8gNCArIHN0cmlkZSAvIDIgKiAxMTkgKyAxNjApKTsKKyAgICAgICAgICAgIEVYUEVDVF9MRShzaXplLCAoc2l6ZV90KShzdHJpZGUgKiB2c3RyaWRlICogMyAvIDIpKTsKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2UgQ09MT1JfRm9ybWF0WVVWNDIwU2VtaVBsYW5hcjoKKyAgICAgICAgY2FzZSBDT0xPUl9Gb3JtYXRZVVY0MjBQYWNrZWRTZW1pUGxhbmFyOgorICAgICAgICAgICAgRVhQRUNUX0VRKGltZy0+bVBsYW5lW2ltZy0+WV0ubU9mZnNldCwgMHUpOworICAgICAgICAgICAgRVhQRUNUX0VRKGltZy0+bVBsYW5lW2ltZy0+WV0ubUNvbEluYywgMSk7CisgICAgICAgICAgICBFWFBFQ1RfRVEoaW1nLT5tUGxhbmVbaW1nLT5ZXS5tUm93SW5jLCBzdHJpZGUpOworCisgICAgICAgICAgICBFWFBFQ1RfRVEoaW1nLT5tUGxhbmVbaW1nLT5VXS5tT2Zmc2V0LCAodWludDMyX3QpKHN0cmlkZSAqIHZzdHJpZGUpKTsKKyAgICAgICAgICAgIEVYUEVDVF9FUShpbWctPm1QbGFuZVtpbWctPlVdLm1Db2xJbmMsIDIpOworICAgICAgICAgICAgRVhQRUNUX0VRKGltZy0+bVBsYW5lW2ltZy0+VV0ubVJvd0luYywgc3RyaWRlKTsKKworICAgICAgICAgICAgRVhQRUNUX0VRKGltZy0+bVBsYW5lW2ltZy0+Vl0ubU9mZnNldCwgKHVpbnQzMl90KShzdHJpZGUgKiB2c3RyaWRlICsgMSkpOworICAgICAgICAgICAgRVhQRUNUX0VRKGltZy0+bVBsYW5lW2ltZy0+Vl0ubUNvbEluYywgMik7CisgICAgICAgICAgICBFWFBFQ1RfRVEoaW1nLT5tUGxhbmVbaW1nLT5WXS5tUm93SW5jLCBzdHJpZGUpOworCisgICAgICAgICAgICBFWFBFQ1RfR0Uoc2l6ZSwgKHNpemVfdCkoc3RyaWRlICogdnN0cmlkZSArIHN0cmlkZSAqIDExOSArIDMyMCkpOworICAgICAgICAgICAgRVhQRUNUX0xFKHNpemUsIChzaXplX3QpKHN0cmlkZSAqIHZzdHJpZGUgKiAzIC8gMikpOworICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSBDT0xPUl9Gb3JtYXRZVVY0MjBGbGV4aWJsZToKKyAgICAgICAgICAgIC8vIGFueXRoaW5nIGdvZXMsIGJ1dCBzdHJpZGUgc2hvdWxkIG1hdGNoIFkgcGxhbmUKKyAgICAgICAgICAgIEVYUEVDVF9FUShpbWctPm1QbGFuZVtpbWctPlldLm1Sb3dJbmMsIHN0cmlkZSk7CisKKyAgICAgICAgICAgIEVYUEVDVF9HRShzaXplLAorICAgICAgICAgICAgICAgICAgICAgIHN0ZDo6bWF4KHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbWctPm1QbGFuZVtpbWctPlldLm1PZmZzZXQgKyAyMzkgKiBpbWctPm1QbGFuZVtpbWctPlldLm1Sb3dJbmMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsgMzE5ICogaW1nLT5tUGxhbmVbaW1nLT5ZXS5tQ29sSW5jICsgMSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbWctPm1QbGFuZVtpbWctPlVdLm1PZmZzZXQgKyAxMTkgKiBpbWctPm1QbGFuZVtpbWctPlVdLm1Sb3dJbmMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsgMTU5ICogaW1nLT5tUGxhbmVbaW1nLT5VXS5tQ29sSW5jICsgMSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbWctPm1QbGFuZVtpbWctPlZdLm1PZmZzZXQgKyAxMTkgKiBpbWctPm1QbGFuZVtpbWctPlZdLm1Sb3dJbmMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsgMTU5ICogaW1nLT5tUGxhbmVbaW1nLT5WXS5tQ29sSW5jICsgMSB9KSk7CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgLy8gdmFsaWRhdGUgYWxsIHBpeGVscworI2lmIDAKKyAgICBmcHJpbnRmKHN0ZGVyciwgIk1lZGlhSW1hZ2UgeyBGKCV1eCV1KSBAJXUrJWQrJWQgQCV1KyVkKyVkIEAldSslZCslZCB9XG4iLAorICAgICAgICAgICAgaW1nLT5tV2lkdGgsIGltZy0+bUhlaWdodCwKKyAgICAgICAgICAgIGltZy0+bVBsYW5lWzBdLm1PZmZzZXQsIGltZy0+bVBsYW5lWzBdLm1Db2xJbmMsIGltZy0+bVBsYW5lWzBdLm1Sb3dJbmMsCisgICAgICAgICAgICBpbWctPm1QbGFuZVsxXS5tT2Zmc2V0LCBpbWctPm1QbGFuZVsxXS5tQ29sSW5jLCBpbWctPm1QbGFuZVsxXS5tUm93SW5jLAorICAgICAgICAgICAgaW1nLT5tUGxhbmVbMl0ubU9mZnNldCwgaW1nLT5tUGxhbmVbMl0ubUNvbEluYywgaW1nLT5tUGxhbmVbMl0ubVJvd0luYyk7CisjZW5kaWYKKyAgICBmb3IgKGl4ID0gMDsgaXggPCAzOyArK2l4KSB7CisgICAgICAgIGNvbnN0IHN0YXRpYyB1aW50OF90IGV4cGVjdGVkW10gPSB7IDIxMCwgMTYsIDE0NiB9OworICAgICAgICBmb3IgKHVpbnQzMl90IHkgPSAwOyB5IDwgaW1nLT5tSGVpZ2h0IC8gaW1nLT5tUGxhbmVbaXhdLm1WZXJ0U3Vic2FtcGxpbmcgOyArK3kpIHsKKyAgICAgICAgICAgIGZvciAodWludDMyX3QgeCA9IDA7IHggPCBpbWctPm1XaWR0aCAvIGltZy0+bVBsYW5lW2l4XS5tSG9yaXpTdWJzYW1wbGluZzsgKyt4KSB7CisgICAgICAgICAgICAgICAgdWludDhfdCB2YWwgPSBidWYtPmRhdGEoKVtpbWctPm1QbGFuZVtpeF0ubU9mZnNldCArIGltZy0+bVBsYW5lW2l4XS5tQ29sSW5jICogeAorICAgICAgICAgICAgICAgICAgICAgICAgKyBpbWctPm1QbGFuZVtpeF0ubVJvd0luYyAqIHldOworICAgICAgICAgICAgICAgIEFTU0VSVF9FUSh2YWwsIGV4cGVjdGVkW2l4XSkgPDwgImluY29ycmVjdCB2YWx1ZSBmb3IgcGxhbmUgIgorICAgICAgICAgICAgICAgICAgICAgICAgPDwgaXggPDwgIiBhdCB4PSIgPDwgeCA8PCAiLCB5PSIgPDwgeTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KK30KKworSU5TVEFOVElBVEVfVEVTVF9DQVNFX1AoSW5wdXRTaXplcywgTWVkaWFDb2RlY0J5dGVCdWZmZXJUZXN0LCA6OnRlc3Rpbmc6OlZhbHVlcygKKyAgICAgICAgLTEsCisgICAgICAgIENPTE9SX0Zvcm1hdFlVVjQyMFBsYW5hciwKKyAgICAgICAgQ09MT1JfRm9ybWF0WVVWNDIwU2VtaVBsYW5hciwKKyAgICAgICAgQ09MT1JfRm9ybWF0WVVWNDIwUGFja2VkUGxhbmFyLAorICAgICAgICBDT0xPUl9Gb3JtYXRZVVY0MjBQYWNrZWRTZW1pUGxhbmFyLAorICAgICAgICBDT0xPUl9Gb3JtYXRZVVY0MjBGbGV4aWJsZSkpOworCit9IC8vIG5hbWVzcGFjZSBhbmRyb2lkCmRpZmYgLS1naXQgYS9tZWRpYS9jb2RlYzIvc2ZwbHVnaW4vdGVzdHMvUmVmbGVjdGVkUGFyYW1VcGRhdGVyX3Rlc3QuY3BwIGIvbWVkaWEvY29kZWMyL3NmcGx1Z2luL3Rlc3RzL1JlZmxlY3RlZFBhcmFtVXBkYXRlcl90ZXN0LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jN2RiMGUzCi0tLSAvZGV2L251bGwKKysrIGIvbWVkaWEvY29kZWMyL3NmcGx1Z2luL3Rlc3RzL1JlZmxlY3RlZFBhcmFtVXBkYXRlcl90ZXN0LmNwcApAQCAtMCwwICsxLDM1MiBAQAorLyoKKyAqIENvcHlyaWdodCAyMDE4IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KKworI2RlZmluZSBfX0MyX0dFTkVSQVRFX0dMT0JBTF9WQVJTX18KKworI2luY2x1ZGUgPHNldD4KKworI2luY2x1ZGUgPGd0ZXN0L2d0ZXN0Lmg+CisKKyNpbmNsdWRlIDxDMlBhcmFtRGVmLmg+CisKKyNpbmNsdWRlIDxtZWRpYS9zdGFnZWZyaWdodC9mb3VuZGF0aW9uL0FCdWZmZXIuaD4KKyNpbmNsdWRlIDxtZWRpYS9zdGFnZWZyaWdodC9mb3VuZGF0aW9uL2hleGR1bXAuaD4KKyNpbmNsdWRlIDxSZWZsZWN0ZWRQYXJhbVVwZGF0ZXIuaD4KKworbmFtZXNwYWNlIGFuZHJvaWQgeworCituYW1lc3BhY2UgeworCitlbnVtIHsKKyAgICBrUGFyYW1JbmRleFRlc3RTdGFydCA9IDB4MTAwMCwKKyAgICBrUGFyYW1JbmRleEludCwKKyAgICBrUGFyYW1JbmRleFN0cmluZywKKyAgICBrUGFyYW1JbmRleENvbXBvc2l0ZSwKKyAgICBrUGFyYW1JbmRleEZsZXhTdHJpbmcsCisKKyAgICBrUGFyYW1JbmRleExvbmcgPSBDMlBhcmFtOjpUWVBFX0lOREVYX1ZFTkRPUl9TVEFSVCwKK307CisKK3R5cGVkZWYgQzJHbG9iYWxQYXJhbTxDMkluZm8sIEMySW50MzJWYWx1ZSwga1BhcmFtSW5kZXhJbnQ+IEMySW50SW5mbzsKK3R5cGVkZWYgQzJHbG9iYWxQYXJhbTxDMkluZm8sIEMySW50NjRWYWx1ZSwga1BhcmFtSW5kZXhMb25nPiBDMkxvbmdJbmZvOworCitzdHJ1Y3QgQzJGaXhlZFNpemVTdHJpbmdTdHJ1Y3QgeworICAgIGNoYXIgdmFsdWVbMTJdOworCisgICAgREVGSU5FX0FORF9ERVNDUklCRV9CQVNFX0MyU1RSVUNUKEZpeGVkU2l6ZVN0cmluZykKKyAgICBDMkZJRUxEKHZhbHVlLCAidmFsdWUiKQorfTsKK3R5cGVkZWYgQzJHbG9iYWxQYXJhbTxDMkluZm8sIEMyRml4ZWRTaXplU3RyaW5nU3RydWN0LCBrUGFyYW1JbmRleFN0cmluZz4gQzJTdHJpbmdJbmZvOworCitzdHJ1Y3QgQzJDb21wb3NpdGVTdHJ1Y3QgeworICAgIGludDMyX3QgaTMyOworICAgIHVpbnQ2NF90IHU2NDsKKyAgICBjaGFyIHN0clsxMl07CisgICAgdWludDhfdCBibG9iWzhdOworICAgIHVpbnQ4X3QgZmxleEJsb2JbXTsKKworICAgIEMyQ29tcG9zaXRlU3RydWN0KCkgPSBkZWZhdWx0OworCisgICAgREVGSU5FX0FORF9ERVNDUklCRV9CQVNFX0ZMRVhfQzJTVFJVQ1QoQ29tcG9zaXRlLCBmbGV4QmxvYikKKyAgICBDMkZJRUxEKGkzMiwgImkzMiIpCisgICAgQzJGSUVMRCh1NjQsICJ1NjQiKQorICAgIEMyRklFTEQoc3RyLCAic3RyIikKKyAgICBDMkZJRUxEKGJsb2IsICJibG9iIikKKyAgICBDMkZJRUxEKGZsZXhCbG9iLCAiZmxleC1ibG9iIikKK307CitzdGF0aWNfYXNzZXJ0KEMyQ29tcG9zaXRlU3RydWN0OjpGTEVYX1NJWkUgPT0gMSwgIiIpOworc3RhdGljX2Fzc2VydChfQzJGbGV4SGVscGVyPEMyQ29tcG9zaXRlU3RydWN0Pjo6RkxFWF9TSVpFID09IDEsICIiKTsKK3R5cGVkZWYgQzJHbG9iYWxQYXJhbTxDMkluZm8sIEMyQ29tcG9zaXRlU3RydWN0LCBrUGFyYW1JbmRleENvbXBvc2l0ZT4gQzJDb21wb3NpdGVJbmZvOworCit0eXBlZGVmIEMyR2xvYmFsUGFyYW08QzJJbmZvLCBDMlN0cmluZ1ZhbHVlLCBrUGFyYW1JbmRleEZsZXhTdHJpbmc+IEMyRmxleFN0cmluZ0luZm87CisKKyNkZWZpbmUgU1VQUE9SVEVEX1RZUEVTICAgXAorICAgIEMySW50SW5mbywgICAgICAgICAgICBcCisgICAgQzJMb25nSW5mbywgICAgICAgICAgIFwKKyAgICBDMlN0cmluZ0luZm8sICAgICAgICAgXAorICAgIEMyQ29tcG9zaXRlSW5mbywgICAgICBcCisgICAgQzJGbGV4U3RyaW5nSW5mbworCit0ZW1wbGF0ZTx0eXBlbmFtZS4uLiBUWVBFUz4gc3RydWN0IGRlc2NyaWJlX2ltcGw7Cit0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZS4uLiBUWVBFUz4gc3RydWN0IGRlc2NyaWJlX2ltcGw8VCwgVFlQRVMuLi4+IHsKKyAgICBzdGF0aWMgc3RkOjp1bmlxdWVfcHRyPEMyU3RydWN0RGVzY3JpcHRvcj4gZGVzY3JpYmUoQzJQYXJhbTo6Q29yZUluZGV4IGluZGV4KSB7CisgICAgICAgIGlmIChpbmRleCA9PSBUOjpDT1JFX0lOREVYKSB7CisgICAgICAgICAgICByZXR1cm4gc3RkOjptYWtlX3VuaXF1ZTxDMlN0cnVjdERlc2NyaXB0b3I+KFQ6OkNPUkVfSU5ERVgsIFQ6OkZpZWxkTGlzdCgpKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHJldHVybiBkZXNjcmliZV9pbXBsPFRZUEVTLi4uPjo6ZGVzY3JpYmUoaW5kZXgpOworICAgICAgICB9CisgICAgfQorfTsKKwordGVtcGxhdGU8PiBzdHJ1Y3QgZGVzY3JpYmVfaW1wbDw+IHsKKyAgICBzdGF0aWMgc3RkOjp1bmlxdWVfcHRyPEMyU3RydWN0RGVzY3JpcHRvcj4gZGVzY3JpYmUoQzJQYXJhbTo6Q29yZUluZGV4KSB7CisgICAgICAgIHJldHVybiBudWxscHRyOworICAgIH0KK307CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IGNvbnN0IGNoYXIgKkdldE5hbWUoKSAgICAgICAgeyByZXR1cm4gbnVsbHB0cjsgfQordGVtcGxhdGU8PiBjb25zdCBjaGFyICpHZXROYW1lPEMySW50SW5mbz4oKSAgICAgICB7IHJldHVybiAiaW50IjsgfQordGVtcGxhdGU8PiBjb25zdCBjaGFyICpHZXROYW1lPEMyTG9uZ0luZm8+KCkgICAgICB7IHJldHVybiAibG9uZyI7IH0KK3RlbXBsYXRlPD4gY29uc3QgY2hhciAqR2V0TmFtZTxDMlN0cmluZ0luZm8+KCkgICAgeyByZXR1cm4gInN0cmluZyI7IH0KK3RlbXBsYXRlPD4gY29uc3QgY2hhciAqR2V0TmFtZTxDMkNvbXBvc2l0ZUluZm8+KCkgeyByZXR1cm4gImNvbXBvc2l0ZSI7IH0KK3RlbXBsYXRlPD4gY29uc3QgY2hhciAqR2V0TmFtZTxDMkZsZXhTdHJpbmdJbmZvPigpIHsgcmV0dXJuICJmbGV4LXN0cmluZyI7IH0KKwordGVtcGxhdGU8dHlwZW5hbWUuLi4gVFlQRVM+IHN0cnVjdCBmaWxsX2Rlc2NyaXB0b3JzX2ltcGw7Cit0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZS4uLiBUWVBFUz4gc3RydWN0IGZpbGxfZGVzY3JpcHRvcnNfaW1wbDxULCBUWVBFUy4uLj4geworICAgIHN0YXRpYyB2b2lkIGZpbGwoc3RkOjp2ZWN0b3I8c3RkOjpzaGFyZWRfcHRyPEMyUGFyYW1EZXNjcmlwdG9yPj4gKnZlYykgeworICAgICAgICBmaWxsX2Rlc2NyaXB0b3JzX2ltcGw8VFlQRVMuLi4+OjpmaWxsKHZlYyk7CisgICAgICAgIHZlYy0+cHVzaF9iYWNrKHN0ZDo6bWFrZV9zaGFyZWQ8QzJQYXJhbURlc2NyaXB0b3I+KAorICAgICAgICAgICAgICAgIFQ6OlBBUkFNX1RZUEUsIEMyUGFyYW1EZXNjcmlwdG9yOjpJU19QRVJTSVNURU5ULCBHZXROYW1lPFQ+KCkpKTsKKyAgICB9Cit9OworCit0ZW1wbGF0ZTw+IHN0cnVjdCBmaWxsX2Rlc2NyaXB0b3JzX2ltcGw8PiB7CisgICAgc3RhdGljIHZvaWQgZmlsbChzdGQ6OnZlY3RvcjxzdGQ6OnNoYXJlZF9wdHI8QzJQYXJhbURlc2NyaXB0b3I+PiAqKSB7fQorfTsKKwordGVtcGxhdGU8dHlwZW5hbWUgVD4gVCAqQ2FzdFBhcmFtKGNvbnN0IHN0ZDo6dW5pcXVlX3B0cjxDMlBhcmFtPiAmcGFyYW0pIHsKKyAgICByZXR1cm4gKFQgKilwYXJhbS5nZXQoKTsKK30KKworY2xhc3MgUGFyYW1SZWZsZWN0b3IgOiBwdWJsaWMgQzJQYXJhbVJlZmxlY3RvciB7CitwdWJsaWM6CisgICAgUGFyYW1SZWZsZWN0b3IoKSA9IGRlZmF1bHQ7CisgICAgflBhcmFtUmVmbGVjdG9yKCkgb3ZlcnJpZGUgPSBkZWZhdWx0OworCisgICAgc3RkOjp1bmlxdWVfcHRyPEMyU3RydWN0RGVzY3JpcHRvcj4gZGVzY3JpYmUoQzJQYXJhbTo6Q29yZUluZGV4IHBhcmFtSW5kZXgpIGNvbnN0IG92ZXJyaWRlIHsKKyAgICAgICAgcmV0dXJuIGRlc2NyaWJlX2ltcGw8U1VQUE9SVEVEX1RZUEVTPjo6ZGVzY3JpYmUocGFyYW1JbmRleCk7CisgICAgfQorfTsKKworfSAgLy8gbmFtZXNwYWNlCisKK2NsYXNzIFJlZmxlY3RlZFBhcmFtVXBkYXRlclRlc3QgOiBwdWJsaWMgOjp0ZXN0aW5nOjpUZXN0IHsKK3B1YmxpYzoKKyAgICBSZWZsZWN0ZWRQYXJhbVVwZGF0ZXJUZXN0KCkgOiBtUmVmbGVjdG9yKG5ldyBQYXJhbVJlZmxlY3RvcikgeworICAgICAgICBmaWxsX2Rlc2NyaXB0b3JzX2ltcGw8U1VQUE9SVEVEX1RZUEVTPjo6ZmlsbCgmbURlc2NyaXB0b3JzKTsKKyAgICB9CisKKyAgICBzdGQ6OnNoYXJlZF9wdHI8QzJQYXJhbVJlZmxlY3Rvcj4gbVJlZmxlY3RvcjsKKyAgICBzdGQ6OnZlY3RvcjxzdGQ6OnNoYXJlZF9wdHI8QzJQYXJhbURlc2NyaXB0b3I+PiBtRGVzY3JpcHRvcnM7Cit9OworCitURVNUX0YoUmVmbGVjdGVkUGFyYW1VcGRhdGVyVGVzdCwgU2luZ2xlVmFsdWVUZXN0KSB7CisgICAgUmVmbGVjdGVkUGFyYW1VcGRhdGVyIHVwZGF0ZXI7CisKKyAgICBSZWZsZWN0ZWRQYXJhbVVwZGF0ZXI6OkRpY3QgbXNnOworICAgIG1zZy5lbXBsYWNlKCJpbnQudmFsdWUiLCBpbnQzMl90KDEyKSk7CisgICAgbXNnLmVtcGxhY2UoInZlbmRvci5sb25nLnZhbHVlIiwgaW50NjRfdCgzNCkpOworCisgICAgdXBkYXRlci5hZGRQYXJhbURlc2MobVJlZmxlY3RvciwgbURlc2NyaXB0b3JzKTsKKworICAgIHN0ZDo6dmVjdG9yPEMyUGFyYW06OkluZGV4PiBpbmRpY2VzOworICAgIHVwZGF0ZXIuZ2V0UGFyYW1JbmRpY2VzRnJvbU1lc3NhZ2UobXNnLCAmaW5kaWNlcyk7CisgICAgRVhQRUNUX0VRKDEsIHN0ZDo6Y291bnRfaWYoaW5kaWNlcy5iZWdpbigpLCBpbmRpY2VzLmVuZCgpLAorICAgICAgICAgICAgW10oY29uc3QgYXV0byAmdmFsdWUpIHsgcmV0dXJuICh1aW50MzJfdCl2YWx1ZSA9PSBDMkludEluZm86OlBBUkFNX1RZUEU7IH0pKTsKKyAgICBFWFBFQ1RfRVEoMSwgc3RkOjpjb3VudF9pZihpbmRpY2VzLmJlZ2luKCksIGluZGljZXMuZW5kKCksCisgICAgICAgICAgICBbXShjb25zdCBhdXRvICZ2YWx1ZSkgeyByZXR1cm4gKHVpbnQzMl90KXZhbHVlID09IEMyTG9uZ0luZm86OlBBUkFNX1RZUEU7IH0pKTsKKyAgICBFWFBFQ1RfRVEoMCwgc3RkOjpjb3VudF9pZihpbmRpY2VzLmJlZ2luKCksIGluZGljZXMuZW5kKCksCisgICAgICAgICAgICBbXShjb25zdCBhdXRvICZ2YWx1ZSkgeyByZXR1cm4gKHVpbnQzMl90KXZhbHVlID09IEMyU3RyaW5nSW5mbzo6UEFSQU1fVFlQRTsgfSkpOworICAgIEVYUEVDVF9FUSgwLCBzdGQ6OmNvdW50X2lmKGluZGljZXMuYmVnaW4oKSwgaW5kaWNlcy5lbmQoKSwKKyAgICAgICAgICAgIFtdKGNvbnN0IGF1dG8gJnZhbHVlKSB7IHJldHVybiAodWludDMyX3QpdmFsdWUgPT0gQzJDb21wb3NpdGVJbmZvOjpQQVJBTV9UWVBFOyB9KSk7CisgICAgRVhQRUNUX0VRKDAsIHN0ZDo6Y291bnRfaWYoaW5kaWNlcy5iZWdpbigpLCBpbmRpY2VzLmVuZCgpLAorICAgICAgICAgICAgW10oY29uc3QgYXV0byAmdmFsdWUpIHsgcmV0dXJuICh1aW50MzJfdCl2YWx1ZSA9PSBDMkZsZXhTdHJpbmdJbmZvOjpQQVJBTV9UWVBFOyB9KSk7CisKKyAgICBzdGQ6OnZlY3RvcjxzdGQ6OnVuaXF1ZV9wdHI8QzJQYXJhbT4+IHBhcmFtczsKKyAgICBwYXJhbXMuZW1wbGFjZV9iYWNrKG5ldyBDMkludEluZm8pOworICAgIHBhcmFtcy5lbXBsYWNlX2JhY2sobmV3IEMyTG9uZ0luZm8pOworICAgIEVYUEVDVF9FUSgwLCBDYXN0UGFyYW08QzJJbnRJbmZvPihwYXJhbXNbMF0pLT52YWx1ZSk7CisgICAgRVhQRUNUX0VRKDAsIENhc3RQYXJhbTxDMkxvbmdJbmZvPihwYXJhbXNbMV0pLT52YWx1ZSk7CisKKyAgICB1cGRhdGVyLnVwZGF0ZVBhcmFtc0Zyb21NZXNzYWdlKG1zZywgJnBhcmFtcyk7CisgICAgRVhQRUNUX0VRKDEyLCBDYXN0UGFyYW08QzJJbnRJbmZvPihwYXJhbXNbMF0pLT52YWx1ZSk7CisgICAgRVhQRUNUX0VRKDM0LCBDYXN0UGFyYW08QzJMb25nSW5mbz4ocGFyYW1zWzFdKS0+dmFsdWUpOworCisgICAgQzJWYWx1ZSBjMlZhbHVlOworICAgIGludDMyX3QgaW50MzJWYWx1ZSA9IDA7CisgICAgaW50NjRfdCBpbnQ2NFZhbHVlID0gMDsKKyAgICBtc2cgPSB1cGRhdGVyLmdldFBhcmFtcyhwYXJhbXMpOworICAgIEFTU0VSVF9FUSgxdSwgbXNnLmNvdW50KCJpbnQudmFsdWUiKSk7CisgICAgRVhQRUNUX0VRKHRydWUsIG1zZ1siaW50LnZhbHVlIl0uZmluZCgmYzJWYWx1ZSkpOworICAgIEVYUEVDVF9FUSh0cnVlLCBjMlZhbHVlLmdldCgmaW50MzJWYWx1ZSkpOworICAgIEVYUEVDVF9FUSgxMiwgaW50MzJWYWx1ZSk7CisKKyAgICBBU1NFUlRfRVEoMXUsIG1zZy5jb3VudCgidmVuZG9yLmxvbmcudmFsdWUiKSk7CisgICAgRVhQRUNUX0VRKHRydWUsIG1zZ1sidmVuZG9yLmxvbmcudmFsdWUiXS5maW5kKCZjMlZhbHVlKSk7CisgICAgRVhQRUNUX0VRKHRydWUsIGMyVmFsdWUuZ2V0KCZpbnQ2NFZhbHVlKSk7CisgICAgRVhQRUNUX0VRKDM0LCBpbnQ2NFZhbHVlKTsKK30KKworVEVTVF9GKFJlZmxlY3RlZFBhcmFtVXBkYXRlclRlc3QsIFN0cmluZ1Rlc3QpIHsKKyAgICBSZWZsZWN0ZWRQYXJhbVVwZGF0ZXIgdXBkYXRlcjsKKworICAgIFJlZmxlY3RlZFBhcmFtVXBkYXRlcjo6RGljdCBtc2c7CisgICAgbXNnLmVtcGxhY2UoInN0cmluZy52YWx1ZSIsIEFTdHJpbmcoIjU2IikpOworICAgIG1zZy5lbXBsYWNlKCJmbGV4LXN0cmluZy52YWx1ZSIsIEFTdHJpbmcoIlNvbWUgc3RyaW5nIikpOworICAgIHVwZGF0ZXIuYWRkUGFyYW1EZXNjKG1SZWZsZWN0b3IsIG1EZXNjcmlwdG9ycyk7CisKKyAgICBzdGQ6OnZlY3RvcjxDMlBhcmFtOjpJbmRleD4gaW5kaWNlczsKKyAgICB1cGRhdGVyLmdldFBhcmFtSW5kaWNlc0Zyb21NZXNzYWdlKG1zZywgJmluZGljZXMpOworICAgIEVYUEVDVF9FUSgwLCBzdGQ6OmNvdW50X2lmKGluZGljZXMuYmVnaW4oKSwgaW5kaWNlcy5lbmQoKSwKKyAgICAgICAgICAgIFtdKGNvbnN0IGF1dG8gJnZhbHVlKSB7IHJldHVybiAodWludDMyX3QpdmFsdWUgPT0gQzJJbnRJbmZvOjpQQVJBTV9UWVBFOyB9KSk7CisgICAgRVhQRUNUX0VRKDAsIHN0ZDo6Y291bnRfaWYoaW5kaWNlcy5iZWdpbigpLCBpbmRpY2VzLmVuZCgpLAorICAgICAgICAgICAgW10oY29uc3QgYXV0byAmdmFsdWUpIHsgcmV0dXJuICh1aW50MzJfdCl2YWx1ZSA9PSBDMkxvbmdJbmZvOjpQQVJBTV9UWVBFOyB9KSk7CisgICAgRVhQRUNUX0VRKDEsIHN0ZDo6Y291bnRfaWYoaW5kaWNlcy5iZWdpbigpLCBpbmRpY2VzLmVuZCgpLAorICAgICAgICAgICAgW10oY29uc3QgYXV0byAmdmFsdWUpIHsgcmV0dXJuICh1aW50MzJfdCl2YWx1ZSA9PSBDMlN0cmluZ0luZm86OlBBUkFNX1RZUEU7IH0pKTsKKyAgICBFWFBFQ1RfRVEoMCwgc3RkOjpjb3VudF9pZihpbmRpY2VzLmJlZ2luKCksIGluZGljZXMuZW5kKCksCisgICAgICAgICAgICBbXShjb25zdCBhdXRvICZ2YWx1ZSkgeyByZXR1cm4gKHVpbnQzMl90KXZhbHVlID09IEMyQ29tcG9zaXRlSW5mbzo6UEFSQU1fVFlQRTsgfSkpOworICAgIEVYUEVDVF9FUSgxLCBzdGQ6OmNvdW50X2lmKGluZGljZXMuYmVnaW4oKSwgaW5kaWNlcy5lbmQoKSwKKyAgICAgICAgICAgIFtdKGNvbnN0IGF1dG8gJnZhbHVlKSB7IHJldHVybiAodWludDMyX3QpdmFsdWUgPT0gQzJGbGV4U3RyaW5nSW5mbzo6UEFSQU1fVFlQRTsgfSkpOworCisgICAgc3RkOjp2ZWN0b3I8c3RkOjp1bmlxdWVfcHRyPEMyUGFyYW0+PiBwYXJhbXM7CisgICAgcGFyYW1zLmVtcGxhY2VfYmFjayhuZXcgQzJTdHJpbmdJbmZvKTsKKyAgICBFWFBFQ1RfRVEoMCwgQ2FzdFBhcmFtPEMyU3RyaW5nSW5mbz4ocGFyYW1zWzBdKS0+dmFsdWVbMF0pOworICAgIHBhcmFtcy5lbXBsYWNlX2JhY2soQzJGbGV4U3RyaW5nSW5mbzo6QWxsb2NVbmlxdWUoMCkpOworICAgIEVYUEVDVF9FUSgwdSwgQ2FzdFBhcmFtPEMyRmxleFN0cmluZ0luZm8+KHBhcmFtc1sxXSktPmZsZXhDb3VudCgpKTsKKyAgICBjaGFyICpmbGV4U3RyaW5nRGF0YSA9ICZDYXN0UGFyYW08QzJGbGV4U3RyaW5nSW5mbz4ocGFyYW1zWzFdKS0+bS52YWx1ZVswXTsKKworICAgIHVwZGF0ZXIudXBkYXRlUGFyYW1zRnJvbU1lc3NhZ2UobXNnLCAmcGFyYW1zKTsKKyAgICBFWFBFQ1RfU1RSRVEoIjU2IiwgQ2FzdFBhcmFtPEMyU3RyaW5nSW5mbz4ocGFyYW1zWzBdKS0+dmFsdWUpOworICAgIEVYUEVDVF9FUSgxMnUsIENhc3RQYXJhbTxDMkZsZXhTdHJpbmdJbmZvPihwYXJhbXNbMF0pLT5mbGV4Q291bnQoKSk7CisgICAgRVhQRUNUX1NUUkVRKCJTb21lIHN0cmluZyIsIENhc3RQYXJhbTxDMkZsZXhTdHJpbmdJbmZvPihwYXJhbXNbMV0pLT5tLnZhbHVlKTsKKyAgICBFWFBFQ1RfTkUoZmxleFN0cmluZ0RhdGEsICZDYXN0UGFyYW08QzJGbGV4U3RyaW5nSW5mbz4ocGFyYW1zWzFdKS0+bS52YWx1ZVswXSk7CisgICAgZmxleFN0cmluZ0RhdGEgPSAmQ2FzdFBhcmFtPEMyRmxleFN0cmluZ0luZm8+KHBhcmFtc1sxXSktPm0udmFsdWVbMF07CisKKyAgICAvLyB2ZXJpZnkgdHJ1bmNhdGlvbiBhbmQgaW4tcGxhY2UgdXBkYXRlCisgICAgbXNnWyJzdHJpbmcudmFsdWUiXSA9IFJlZmxlY3RlZFBhcmFtVXBkYXRlcjo6VmFsdWUoQVN0cmluZygiMTIzNDU2Nzg5MEFCQ0RFIikpOworICAgIG1zZ1siZmxleC1zdHJpbmcudmFsdWUiXSA9IFJlZmxlY3RlZFBhcmFtVXBkYXRlcjo6VmFsdWUoQVN0cmluZygiYWJjIikpOworICAgIHVwZGF0ZXIudXBkYXRlUGFyYW1zRnJvbU1lc3NhZ2UobXNnLCAmcGFyYW1zKTsKKyAgICBFWFBFQ1RfU1RSRVEoIjEyMzQ1Njc4OTBBIiwgQ2FzdFBhcmFtPEMyU3RyaW5nSW5mbz4ocGFyYW1zWzBdKS0+dmFsdWUpOworICAgIEVYUEVDVF9FUSg0dSwgQ2FzdFBhcmFtPEMyRmxleFN0cmluZ0luZm8+KHBhcmFtc1sxXSktPmZsZXhDb3VudCgpKTsKKyAgICBFWFBFQ1RfU1RSRVEoImFiYyIsIENhc3RQYXJhbTxDMkZsZXhTdHJpbmdJbmZvPihwYXJhbXNbMV0pLT5tLnZhbHVlKTsKKyAgICBFWFBFQ1RfRVEoZmxleFN0cmluZ0RhdGEsICZDYXN0UGFyYW08QzJGbGV4U3RyaW5nSW5mbz4ocGFyYW1zWzFdKS0+bS52YWx1ZVswXSk7CisKKyAgICBBU3RyaW5nIHN0clZhbHVlOworICAgIG1zZyA9IHVwZGF0ZXIuZ2V0UGFyYW1zKHBhcmFtcyk7CisgICAgQVNTRVJUX0VRKDF1LCBtc2cuY291bnQoInN0cmluZy52YWx1ZSIpKTsKKyAgICBFWFBFQ1RfRVEodHJ1ZSwgbXNnWyJzdHJpbmcudmFsdWUiXS5maW5kKCZzdHJWYWx1ZSkpOworICAgIEVYUEVDVF9TVFJFUSgiMTIzNDU2Nzg5MEEiLCBzdHJWYWx1ZS5jX3N0cigpKTsKKworICAgIEFTU0VSVF9FUSgxdSwgbXNnLmNvdW50KCJmbGV4LXN0cmluZy52YWx1ZSIpKTsKKyAgICBFWFBFQ1RfRVEodHJ1ZSwgbXNnWyJmbGV4LXN0cmluZy52YWx1ZSJdLmZpbmQoJnN0clZhbHVlKSk7CisgICAgRVhQRUNUX1NUUkVRKCJhYmMiLCBzdHJWYWx1ZS5jX3N0cigpKTsKK30KKworVEVTVF9GKFJlZmxlY3RlZFBhcmFtVXBkYXRlclRlc3QsIENvbXBvc2l0ZVRlc3QpIHsKKyAgICBSZWZsZWN0ZWRQYXJhbVVwZGF0ZXIgdXBkYXRlcjsKKworICAgIFJlZmxlY3RlZFBhcmFtVXBkYXRlcjo6RGljdCBtc2c7CisgICAgbXNnLmVtcGxhY2UoImNvbXBvc2l0ZS5pMzIiLCBpbnQzMl90KDc4KSk7CisgICAgbXNnLmVtcGxhY2UoImNvbXBvc2l0ZS51NjQiLCBpbnQ2NF90KDkxMCkpOworICAgIG1zZy5lbXBsYWNlKCJjb21wb3NpdGUuc3RyIiwgQVN0cmluZygiMTExMiIpKTsKKyAgICBtc2cuZW1wbGFjZSgiY29tcG9zaXRlLmJsb2IiLCBBQnVmZmVyOjpDcmVhdGVBc0NvcHkoImJ1ZmZlcjA4IiwgOCkpOworICAgIG1zZy5lbXBsYWNlKCJjb21wb3NpdGUuZmxleC1ibG9iIiwgQUJ1ZmZlcjo6Q3JlYXRlQXNDb3B5KCJmbGV4LWJ1ZmZlci0xNCIsIDE0KSk7CisKKyAgICB1cGRhdGVyLmFkZFBhcmFtRGVzYyhtUmVmbGVjdG9yLCBtRGVzY3JpcHRvcnMpOworCisgICAgc3RkOjp2ZWN0b3I8QzJQYXJhbTo6SW5kZXg+IGluZGljZXM7CisgICAgdXBkYXRlci5nZXRQYXJhbUluZGljZXNGcm9tTWVzc2FnZShtc2csICZpbmRpY2VzKTsKKyAgICBFWFBFQ1RfRVEoMCwgc3RkOjpjb3VudF9pZihpbmRpY2VzLmJlZ2luKCksIGluZGljZXMuZW5kKCksCisgICAgICAgICAgICBbXShjb25zdCBhdXRvICZ2YWx1ZSkgeyByZXR1cm4gKHVpbnQzMl90KXZhbHVlID09IEMySW50SW5mbzo6UEFSQU1fVFlQRTsgfSkpOworICAgIEVYUEVDVF9FUSgwLCBzdGQ6OmNvdW50X2lmKGluZGljZXMuYmVnaW4oKSwgaW5kaWNlcy5lbmQoKSwKKyAgICAgICAgICAgIFtdKGNvbnN0IGF1dG8gJnZhbHVlKSB7IHJldHVybiAodWludDMyX3QpdmFsdWUgPT0gQzJMb25nSW5mbzo6UEFSQU1fVFlQRTsgfSkpOworICAgIEVYUEVDVF9FUSgwLCBzdGQ6OmNvdW50X2lmKGluZGljZXMuYmVnaW4oKSwgaW5kaWNlcy5lbmQoKSwKKyAgICAgICAgICAgIFtdKGNvbnN0IGF1dG8gJnZhbHVlKSB7IHJldHVybiAodWludDMyX3QpdmFsdWUgPT0gQzJTdHJpbmdJbmZvOjpQQVJBTV9UWVBFOyB9KSk7CisgICAgRVhQRUNUX0VRKDEsIHN0ZDo6Y291bnRfaWYoaW5kaWNlcy5iZWdpbigpLCBpbmRpY2VzLmVuZCgpLAorICAgICAgICAgICAgW10oY29uc3QgYXV0byAmdmFsdWUpIHsgcmV0dXJuICh1aW50MzJfdCl2YWx1ZSA9PSBDMkNvbXBvc2l0ZUluZm86OlBBUkFNX1RZUEU7IH0pKTsKKworICAgIHN0ZDo6dmVjdG9yPHN0ZDo6dW5pcXVlX3B0cjxDMlBhcmFtPj4gcGFyYW1zOworICAgIHBhcmFtcy5lbXBsYWNlX2JhY2soQzJDb21wb3NpdGVJbmZvOjpBbGxvY1VuaXF1ZSgwKSk7CisgICAgRVhQRUNUX0VRKDAsIENhc3RQYXJhbTxDMkNvbXBvc2l0ZUluZm8+KHBhcmFtc1swXSktPm0uaTMyKTsKKyAgICBFWFBFQ1RfRVEoMHUsIENhc3RQYXJhbTxDMkNvbXBvc2l0ZUluZm8+KHBhcmFtc1swXSktPm0udTY0KTsKKyAgICBFWFBFQ1RfRVEoMCwgQ2FzdFBhcmFtPEMyQ29tcG9zaXRlSW5mbz4ocGFyYW1zWzBdKS0+bS5zdHJbMF0pOworICAgIEVYUEVDVF9FUSgwLCBtZW1jbXAoIlwwXDBcMFwwXDBcMFwwXDAiLCBDYXN0UGFyYW08QzJDb21wb3NpdGVJbmZvPihwYXJhbXNbMF0pLT5tLmJsb2IsIDgpKTsKKyAgICBFWFBFQ1RfRVEoMHUsIENhc3RQYXJhbTxDMkNvbXBvc2l0ZUluZm8+KHBhcmFtc1swXSktPmZsZXhDb3VudCgpKTsKKyAgICB1aW50OF90ICpmbGV4QmxvYkRhdGEgPSAmQ2FzdFBhcmFtPEMyQ29tcG9zaXRlSW5mbz4ocGFyYW1zWzBdKS0+bS5mbGV4QmxvYlswXTsKKworICAgIHVwZGF0ZXIudXBkYXRlUGFyYW1zRnJvbU1lc3NhZ2UobXNnLCAmcGFyYW1zKTsKKyAgICBFWFBFQ1RfRVEoNzgsIENhc3RQYXJhbTxDMkNvbXBvc2l0ZUluZm8+KHBhcmFtc1swXSktPm0uaTMyKTsKKyAgICBFWFBFQ1RfRVEoOTEwdSwgQ2FzdFBhcmFtPEMyQ29tcG9zaXRlSW5mbz4ocGFyYW1zWzBdKS0+bS51NjQpOworICAgIEVYUEVDVF9TVFJFUSgiMTExMiIsIENhc3RQYXJhbTxDMkNvbXBvc2l0ZUluZm8+KHBhcmFtc1swXSktPm0uc3RyKTsKKyAgICBFWFBFQ1RfRVEoMCwgbWVtY21wKCJidWZmZXIwOCIsIENhc3RQYXJhbTxDMkNvbXBvc2l0ZUluZm8+KHBhcmFtc1swXSktPm0uYmxvYiwgOCkpOworICAgIEFTdHJpbmcgaGV4OworICAgIGhleGR1bXAoQ2FzdFBhcmFtPEMyQ29tcG9zaXRlSW5mbz4ocGFyYW1zWzBdKS0+bS5ibG9iLCA4LCAwLCAmaGV4KTsKKyAgICBwcmludGYoIiVzXG4iLCBoZXguY19zdHIoKSk7CisgICAgQVNTRVJUX0VRKDE0dSwgQ2FzdFBhcmFtPEMyQ29tcG9zaXRlSW5mbz4ocGFyYW1zWzBdKS0+ZmxleENvdW50KCkpOworICAgIEVYUEVDVF9FUSgwLCBtZW1jbXAoImZsZXgtYnVmZmVyLTE0IiwgQ2FzdFBhcmFtPEMyQ29tcG9zaXRlSW5mbz4ocGFyYW1zWzBdKS0+bS5mbGV4QmxvYiwgMTQpKTsKKyAgICBFWFBFQ1RfTkUoZmxleEJsb2JEYXRhLCAmQ2FzdFBhcmFtPEMyQ29tcG9zaXRlSW5mbz4ocGFyYW1zWzBdKS0+bS5mbGV4QmxvYlswXSk7CisgICAgZmxleEJsb2JEYXRhID0gJkNhc3RQYXJhbTxDMkNvbXBvc2l0ZUluZm8+KHBhcmFtc1swXSktPm0uZmxleEJsb2JbMF07CisKKyAgICAvLyB0ZXN0IHNldHRpbmcgYW5kIHplcm8gZXh0ZW5kaW5nIHNob3J0ZXIgYmxvYiB0aGFuIGFsbG93ZWQKKyAgICBtc2cuY2xlYXIoKTsKKyAgICBtc2cuZW1wbGFjZSgiY29tcG9zaXRlLmJsb2IiLCBBQnVmZmVyOjpDcmVhdGVBc0NvcHkoImJ1ZjA1IiwgNSkpOworICAgIHVwZGF0ZXIudXBkYXRlUGFyYW1zRnJvbU1lc3NhZ2UobXNnLCAmcGFyYW1zKTsKKyAgICBFWFBFQ1RfRVEoMCwgbWVtY21wKCJidWYwNVwwXDBcMCIsIENhc3RQYXJhbTxDMkNvbXBvc2l0ZUluZm8+KHBhcmFtc1swXSktPm0uYmxvYiwgOCkpOworICAgIEFTU0VSVF9FUSgxNHUsIENhc3RQYXJhbTxDMkNvbXBvc2l0ZUluZm8+KHBhcmFtc1swXSktPmZsZXhDb3VudCgpKTsKKyAgICBFWFBFQ1RfRVEoMCwgbWVtY21wKCJmbGV4LWJ1ZmZlci0xNCIsIENhc3RQYXJhbTxDMkNvbXBvc2l0ZUluZm8+KHBhcmFtc1swXSktPm0uZmxleEJsb2IsIDE0KSk7CisgICAgRVhQRUNUX0VRKGZsZXhCbG9iRGF0YSwgJkNhc3RQYXJhbTxDMkNvbXBvc2l0ZUluZm8+KHBhcmFtc1swXSktPm0uZmxleEJsb2JbMF0pOworCisgICAgLy8gdGVzdCBzZXR0aW5nIGFuZCB0cmltbWluZyBsYXJnZXIgYmxvYiB0aGFuIGFsbG93ZWQKKyAgICBtc2cuY2xlYXIoKTsKKyAgICBtc2cuZW1wbGFjZSgiY29tcG9zaXRlLmJsb2IiLCBBQnVmZmVyOjpDcmVhdGVBc0NvcHkoIlJlYWxseUxvbmdCdWZmZXIiLCAxNikpOworICAgIHVwZGF0ZXIudXBkYXRlUGFyYW1zRnJvbU1lc3NhZ2UobXNnLCAmcGFyYW1zKTsKKyAgICBFWFBFQ1RfRVEoMCwgbWVtY21wKCJSZWFsbHlMbyIsIENhc3RQYXJhbTxDMkNvbXBvc2l0ZUluZm8+KHBhcmFtc1swXSktPm0uYmxvYiwgOCkpOworICAgIEFTU0VSVF9FUSgxNHUsIENhc3RQYXJhbTxDMkNvbXBvc2l0ZUluZm8+KHBhcmFtc1swXSktPmZsZXhDb3VudCgpKTsKKyAgICBFWFBFQ1RfRVEoMCwgbWVtY21wKCJmbGV4LWJ1ZmZlci0xNCIsIENhc3RQYXJhbTxDMkNvbXBvc2l0ZUluZm8+KHBhcmFtc1swXSktPm0uZmxleEJsb2IsIDE0KSk7CisgICAgRVhQRUNUX0VRKGZsZXhCbG9iRGF0YSwgJkNhc3RQYXJhbTxDMkNvbXBvc2l0ZUluZm8+KHBhcmFtc1swXSktPm0uZmxleEJsb2JbMF0pOworCisgICAgLy8gdGVzdCB0cmltbWluZyBmbGV4IGJsb2IgaW4tcGxhY2UKKyAgICBtc2cuY2xlYXIoKTsKKyAgICBtc2cuZW1wbGFjZSgiY29tcG9zaXRlLmZsZXgtYmxvYiIsIEFCdWZmZXI6OkNyZWF0ZUFzQ29weSgiYnVmMDUiLCA1KSk7CisgICAgdXBkYXRlci51cGRhdGVQYXJhbXNGcm9tTWVzc2FnZShtc2csICZwYXJhbXMpOworICAgIEFTU0VSVF9FUSg1dSwgQ2FzdFBhcmFtPEMyQ29tcG9zaXRlSW5mbz4ocGFyYW1zWzBdKS0+ZmxleENvdW50KCkpOworICAgIEVYUEVDVF9FUSgwLCBtZW1jbXAoImJ1ZjA1IiwgQ2FzdFBhcmFtPEMyQ29tcG9zaXRlSW5mbz4ocGFyYW1zWzBdKS0+bS5mbGV4QmxvYiwgNSkpOworICAgIEVYUEVDVF9FUShmbGV4QmxvYkRhdGEsICZDYXN0UGFyYW08QzJDb21wb3NpdGVJbmZvPihwYXJhbXNbMF0pLT5tLmZsZXhCbG9iWzBdKTsKK30KKworVEVTVF9GKFJlZmxlY3RlZFBhcmFtVXBkYXRlclRlc3QsIENvbXBvc2l0ZVBhcnRpYWxUZXN0KSB7CisgICAgUmVmbGVjdGVkUGFyYW1VcGRhdGVyIHVwZGF0ZXI7CisKKyAgICBSZWZsZWN0ZWRQYXJhbVVwZGF0ZXI6OkRpY3QgbXNnOworICAgIG1zZy5lbXBsYWNlKCJjb21wb3NpdGUuaTMyIiwgQzJWYWx1ZSgxMzE0KSk7CisgICAgbXNnLmVtcGxhY2UoImNvbXBvc2l0ZS5zdHIiLCBBU3RyaW5nKCIxNTE2IikpOworCisgICAgdXBkYXRlci5hZGRQYXJhbURlc2MobVJlZmxlY3RvciwgbURlc2NyaXB0b3JzKTsKKworICAgIHN0ZDo6dmVjdG9yPEMyUGFyYW06OkluZGV4PiBpbmRpY2VzOworICAgIHVwZGF0ZXIuZ2V0UGFyYW1JbmRpY2VzRnJvbU1lc3NhZ2UobXNnLCAmaW5kaWNlcyk7CisgICAgRVhQRUNUX0VRKDAsIHN0ZDo6Y291bnRfaWYoaW5kaWNlcy5iZWdpbigpLCBpbmRpY2VzLmVuZCgpLAorICAgICAgICAgICAgW10oY29uc3QgYXV0byAmdmFsdWUpIHsgcmV0dXJuICh1aW50MzJfdCl2YWx1ZSA9PSBDMkludEluZm86OlBBUkFNX1RZUEU7IH0pKTsKKyAgICBFWFBFQ1RfRVEoMCwgc3RkOjpjb3VudF9pZihpbmRpY2VzLmJlZ2luKCksIGluZGljZXMuZW5kKCksCisgICAgICAgICAgICBbXShjb25zdCBhdXRvICZ2YWx1ZSkgeyByZXR1cm4gKHVpbnQzMl90KXZhbHVlID09IEMyTG9uZ0luZm86OlBBUkFNX1RZUEU7IH0pKTsKKyAgICBFWFBFQ1RfRVEoMCwgc3RkOjpjb3VudF9pZihpbmRpY2VzLmJlZ2luKCksIGluZGljZXMuZW5kKCksCisgICAgICAgICAgICBbXShjb25zdCBhdXRvICZ2YWx1ZSkgeyByZXR1cm4gKHVpbnQzMl90KXZhbHVlID09IEMyU3RyaW5nSW5mbzo6UEFSQU1fVFlQRTsgfSkpOworICAgIEVYUEVDVF9FUSgxLCBzdGQ6OmNvdW50X2lmKGluZGljZXMuYmVnaW4oKSwgaW5kaWNlcy5lbmQoKSwKKyAgICAgICAgICAgIFtdKGNvbnN0IGF1dG8gJnZhbHVlKSB7IHJldHVybiAodWludDMyX3QpdmFsdWUgPT0gQzJDb21wb3NpdGVJbmZvOjpQQVJBTV9UWVBFOyB9KSk7CisKKyAgICBzdGQ6OnZlY3RvcjxzdGQ6OnVuaXF1ZV9wdHI8QzJQYXJhbT4+IHBhcmFtczsKKyAgICBwYXJhbXMuZW1wbGFjZV9iYWNrKEMyQ29tcG9zaXRlSW5mbzo6QWxsb2NVbmlxdWUoMTJ1KSk7CisgICAgRVhQRUNUX0VRKDAsIENhc3RQYXJhbTxDMkNvbXBvc2l0ZUluZm8+KHBhcmFtc1swXSktPm0uaTMyKTsKKyAgICBFWFBFQ1RfRVEoMHUsIENhc3RQYXJhbTxDMkNvbXBvc2l0ZUluZm8+KHBhcmFtc1swXSktPm0udTY0KTsKKyAgICBFWFBFQ1RfRVEoMCwgQ2FzdFBhcmFtPEMyQ29tcG9zaXRlSW5mbz4ocGFyYW1zWzBdKS0+bS5zdHJbMF0pOworCisgICAgdXBkYXRlci51cGRhdGVQYXJhbXNGcm9tTWVzc2FnZShtc2csICZwYXJhbXMpOworICAgIEVYUEVDVF9FUSgxMzE0LCBDYXN0UGFyYW08QzJDb21wb3NpdGVJbmZvPihwYXJhbXNbMF0pLT5tLmkzMik7CisgICAgRVhQRUNUX0VRKDB1LCBDYXN0UGFyYW08QzJDb21wb3NpdGVJbmZvPihwYXJhbXNbMF0pLT5tLnU2NCk7CisgICAgRVhQRUNUX1NUUkVRKCIxNTE2IiwgQ2FzdFBhcmFtPEMyQ29tcG9zaXRlSW5mbz4ocGFyYW1zWzBdKS0+bS5zdHIpOworfQorCit9IC8vIG5hbWVzcGFjZSBhbmRyb2lkCmRpZmYgLS1naXQgYS9tZWRpYS9jb2RlYzIvc2ZwbHVnaW4vdXRpbHMvQW5kcm9pZC5icCBiL21lZGlhL2NvZGVjMi9zZnBsdWdpbi91dGlscy9BbmRyb2lkLmJwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJkNDk4M2MKLS0tIC9kZXYvbnVsbAorKysgYi9tZWRpYS9jb2RlYzIvc2ZwbHVnaW4vdXRpbHMvQW5kcm9pZC5icApAQCAtMCwwICsxLDM5IEBACitjY19saWJyYXJ5X3NoYXJlZCB7CisgICAgbmFtZTogImxpYnNmcGx1Z2luX2Njb2RlY191dGlscyIsCisgICAgdmVuZG9yX2F2YWlsYWJsZTogdHJ1ZSwKKworICAgIHNyY3M6IFsKKyAgICAgICAgIkNvZGVjMkJ1ZmZlclV0aWxzLmNwcCIsCisgICAgICAgICJDb2RlYzJNYXBwZXIuY3BwIiwKKyAgICBdLAorCisgICAgY2ZsYWdzOiBbCisgICAgICAgICItV2Vycm9yIiwKKyAgICAgICAgIi1XYWxsIiwKKyAgICBdLAorCisgICAgZXhwb3J0X2luY2x1ZGVfZGlyczogWworICAgICAgICAiLiIsCisgICAgXSwKKworICAgIHNoYXJlZF9saWJzOiBbCisgICAgICAgICJsaWJiYXNlIiwKKyAgICAgICAgImxpYmNvZGVjMiIsCisgICAgICAgICJsaWJjb2RlYzJfdm5kayIsCisgICAgICAgICJsaWJjdXRpbHMiLAorICAgICAgICAibGlibG9nIiwKKyAgICAgICAgImxpYnN0YWdlZnJpZ2h0X2ZvdW5kYXRpb24iLAorICAgICAgICAibGlidXRpbHMiLAorICAgIF0sCisKKyAgICBzYW5pdGl6ZTogeworICAgICAgICBjZmk6IHRydWUsCisgICAgICAgIG1pc2NfdW5kZWZpbmVkOiBbCisgICAgICAgICAgICAidW5zaWduZWQtaW50ZWdlci1vdmVyZmxvdyIsCisgICAgICAgICAgICAic2lnbmVkLWludGVnZXItb3ZlcmZsb3ciLAorICAgICAgICBdLAorICAgICAgICBkaWFnOiB7CisgICAgICAgICAgICBjZmk6IHRydWUsCisgICAgICAgIH0sCisgICAgfSwKK30KZGlmZiAtLWdpdCBhL21lZGlhL2NvZGVjMi9zZnBsdWdpbi91dGlscy9Db2RlYzJCdWZmZXJVdGlscy5jcHAgYi9tZWRpYS9jb2RlYzIvc2ZwbHVnaW4vdXRpbHMvQ29kZWMyQnVmZmVyVXRpbHMuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI3NTE5ZGEKLS0tIC9kZXYvbnVsbAorKysgYi9tZWRpYS9jb2RlYzIvc2ZwbHVnaW4vdXRpbHMvQ29kZWMyQnVmZmVyVXRpbHMuY3BwCkBAIC0wLDAgKzEsNDAwIEBACisvKgorICogQ29weXJpZ2h0IDIwMTgsIFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworCisvLyNkZWZpbmUgTE9HX05ERUJVRyAwCisjZGVmaW5lIExPR19UQUcgIkNvZGVjMkJ1ZmZlclV0aWxzIgorI2luY2x1ZGUgPHV0aWxzL0xvZy5oPgorCisjaW5jbHVkZSA8bGlzdD4KKyNpbmNsdWRlIDxtdXRleD4KKworI2luY2x1ZGUgPG1lZGlhL2hhcmR3YXJlL0hhcmR3YXJlQVBJLmg+CisjaW5jbHVkZSA8bWVkaWEvc3RhZ2VmcmlnaHQvZm91bmRhdGlvbi9BVXRpbHMuaD4KKworI2luY2x1ZGUgPEMyRGVidWcuaD4KKworI2luY2x1ZGUgIkNvZGVjMkJ1ZmZlclV0aWxzLmgiCisKK25hbWVzcGFjZSBhbmRyb2lkIHsKKworbmFtZXNwYWNlIHsKKworLyoqCisgKiBBIGZsaXBwYWJsZSwgb3B0aW1pemFibGUgbWVtY3B5LiBDb25zdHJ1Y3RzIHN1Y2ggYXMgKGZyb20gPyBzcmMgOiBkc3QpIGRvIG5vdCB3b3JrIGFzIHRoZSByZXN1bHRzIGFyZQorICogYWx3YXlzIGNvbnN0LgorICovCit0ZW1wbGF0ZTxib29sIFRvQSwgc2l6ZV90IFM+CitzdHJ1Y3QgTWVtQ29waWVyIHsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBBLCB0eXBlbmFtZSBCPgorICAgIGlubGluZSBzdGF0aWMgdm9pZCBjb3B5KEEgKmEsIGNvbnN0IEIgKmIsIHNpemVfdCBzaXplKSB7CisgICAgICAgIF9fYnVpbHRpbl9tZW1jcHkoYSwgYiwgc2l6ZSk7CisgICAgfQorfTsKKwordGVtcGxhdGU8c2l6ZV90IFM+CitzdHJ1Y3QgTWVtQ29waWVyPGZhbHNlLCBTPiB7CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgQSwgdHlwZW5hbWUgQj4KKyAgICBpbmxpbmUgc3RhdGljIHZvaWQgY29weShjb25zdCBBICphLCBCICpiLCBzaXplX3Qgc2l6ZSkgeworICAgICAgICBNZW1Db3BpZXI8dHJ1ZSwgUz46OmNvcHkoYiwgYSwgc2l6ZSk7CisgICAgfQorfTsKKworLyoqCisgKiBDb3BpZXMgYmV0d2VlbiBhIE1lZGlhSW1hZ2UgYW5kIGEgZ3JhcGhpYyB2aWV3LgorICoKKyAqIFxwYXJhbSBUb01lZGlhSW1hZ2Ugd2hldGhlciB0byBjb3B5IHRvIChvciBmcm9tKSB0aGUgTWVkaWFJbWFnZQorICogXHBhcmFtIHZpZXcgZ3JhcGhpYyB2aWV3IChjb3VsZCBiZSBDb25zdEdyYXBoaWNWaWV3IG9yIEdyYXBoaWNWaWV3IGRlcGVuZGluZyBvbiBkaXJlY3Rpb24pCisgKiBccGFyYW0gaW1nIE1lZGlhSW1hZ2UgZGF0YQorICogXHBhcmFtIGltZ0Jhc2UgYmFzZSBvZiBNZWRpYUltYWdlIChjb3VsZCBiZSBjb25zdCB1aW50OF90KiBvciB1aW50OF90KiBkZXBlbmRpbmcgb24gZGlyZWN0aW9uKQorICovCit0ZW1wbGF0ZTxib29sIFRvTWVkaWFJbWFnZSwgdHlwZW5hbWUgVmlldywgdHlwZW5hbWUgSW1hZ2VQaXhlbD4KK3N0YXRpYyBzdGF0dXNfdCBfSW1hZ2VDb3B5KFZpZXcgJnZpZXcsIGNvbnN0IE1lZGlhSW1hZ2UyICppbWcsIEltYWdlUGl4ZWwgKmltZ0Jhc2UpIHsKKyAgICAvLyBUT0RPOiBtb3JlIGVmZmljaWVudCBjb3B5aW5nIC0tLSBlLmcuIG9uZSByb3cgYXQgYSB0aW1lLCBjb3B5aW5nCisgICAgLy8gICAgICAgaW50ZXJsZWF2ZWQgcGxhbmVzIHRvZ2V0aGVyLCBldGMuCisgICAgY29uc3QgQzJQbGFuYXJMYXlvdXQgJmxheW91dCA9IHZpZXcubGF5b3V0KCk7CisgICAgY29uc3Qgc2l6ZV90IGJwcCA9IGRpdlVwKGltZy0+bUJpdERlcHRoQWxsb2NhdGVkLCA4dSk7CisgICAgaWYgKHZpZXcud2lkdGgoKSAhPSBpbWctPm1XaWR0aAorICAgICAgICAgICAgfHwgdmlldy5oZWlnaHQoKSAhPSBpbWctPm1IZWlnaHQpIHsKKyAgICAgICAgcmV0dXJuIEJBRF9WQUxVRTsKKyAgICB9CisgICAgZm9yICh1aW50MzJfdCBpID0gMDsgaSA8IGxheW91dC5udW1QbGFuZXM7ICsraSkgeworICAgICAgICB0eXBlbmFtZSBzdGQ6OmNvbmRpdGlvbmFsPFRvTWVkaWFJbWFnZSwgdWludDhfdCwgY29uc3QgdWludDhfdD46OnR5cGUgKmltZ1JvdyA9CisgICAgICAgICAgICBpbWdCYXNlICsgaW1nLT5tUGxhbmVbaV0ubU9mZnNldDsKKyAgICAgICAgdHlwZW5hbWUgc3RkOjpjb25kaXRpb25hbDxUb01lZGlhSW1hZ2UsIGNvbnN0IHVpbnQ4X3QsIHVpbnQ4X3Q+Ojp0eXBlICp2aWV3Um93ID0KKyAgICAgICAgICAgIHZpZXdSb3cgPSB2aWV3LmRhdGEoKVtpXTsKKyAgICAgICAgY29uc3QgQzJQbGFuZUluZm8gJnBsYW5lID0gbGF5b3V0LnBsYW5lc1tpXTsKKyAgICAgICAgaWYgKHBsYW5lLmNvbFNhbXBsaW5nICE9IGltZy0+bVBsYW5lW2ldLm1Ib3JpelN1YnNhbXBsaW5nCisgICAgICAgICAgICAgICAgfHwgcGxhbmUucm93U2FtcGxpbmcgIT0gaW1nLT5tUGxhbmVbaV0ubVZlcnRTdWJzYW1wbGluZworICAgICAgICAgICAgICAgIHx8IHBsYW5lLmFsbG9jYXRlZERlcHRoICE9IGltZy0+bUJpdERlcHRoQWxsb2NhdGVkCisgICAgICAgICAgICAgICAgfHwgcGxhbmUuYWxsb2NhdGVkRGVwdGggPCBwbGFuZS5iaXREZXB0aAorICAgICAgICAgICAgICAgIC8vIE1lZGlhSW1hZ2Ugb25seSBzdXBwb3J0cyBNU0IgdmFsdWVzCisgICAgICAgICAgICAgICAgfHwgcGxhbmUucmlnaHRTaGlmdCAhPSBwbGFuZS5hbGxvY2F0ZWREZXB0aCAtIHBsYW5lLmJpdERlcHRoCisgICAgICAgICAgICAgICAgfHwgKGJwcCA+IDEgJiYgcGxhbmUuZW5kaWFubmVzcyAhPSBwbGFuZS5OQVRJVkUpKSB7CisgICAgICAgICAgICByZXR1cm4gQkFEX1ZBTFVFOworICAgICAgICB9CisKKyAgICAgICAgdWludDMyX3QgcGxhbmVXID0gaW1nLT5tV2lkdGggLyBwbGFuZS5jb2xTYW1wbGluZzsKKyAgICAgICAgdWludDMyX3QgcGxhbmVIID0gaW1nLT5tSGVpZ2h0IC8gcGxhbmUucm93U2FtcGxpbmc7CisgICAgICAgIGZvciAodWludDMyX3Qgcm93ID0gMDsgcm93IDwgcGxhbmVIOyArK3JvdykgeworICAgICAgICAgICAgZGVjbHR5cGUoaW1nUm93KSBpbWdQdHIgPSBpbWdSb3c7CisgICAgICAgICAgICBkZWNsdHlwZSh2aWV3Um93KSB2aWV3UHRyID0gdmlld1JvdzsKKyAgICAgICAgICAgIGZvciAodWludDMyX3QgY29sID0gMDsgY29sIDwgcGxhbmVXOyArK2NvbCkgeworICAgICAgICAgICAgICAgIE1lbUNvcGllcjxUb01lZGlhSW1hZ2UsIDA+Ojpjb3B5KGltZ1B0ciwgdmlld1B0ciwgYnBwKTsKKyAgICAgICAgICAgICAgICBpbWdQdHIgKz0gaW1nLT5tUGxhbmVbaV0ubUNvbEluYzsKKyAgICAgICAgICAgICAgICB2aWV3UHRyICs9IHBsYW5lLmNvbEluYzsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGltZ1JvdyArPSBpbWctPm1QbGFuZVtpXS5tUm93SW5jOworICAgICAgICAgICAgdmlld1JvdyArPSBwbGFuZS5yb3dJbmM7CisgICAgICAgIH0KKyAgICB9CisgICAgcmV0dXJuIE9LOworfQorCit9ICAvLyBuYW1lc3BhY2UKKworc3RhdHVzX3QgSW1hZ2VDb3B5KHVpbnQ4X3QgKmltZ0Jhc2UsIGNvbnN0IE1lZGlhSW1hZ2UyICppbWcsIGNvbnN0IEMyR3JhcGhpY1ZpZXcgJnZpZXcpIHsKKyAgICByZXR1cm4gX0ltYWdlQ29weTx0cnVlPih2aWV3LCBpbWcsIGltZ0Jhc2UpOworfQorCitzdGF0dXNfdCBJbWFnZUNvcHkoQzJHcmFwaGljVmlldyAmdmlldywgY29uc3QgdWludDhfdCAqaW1nQmFzZSwgY29uc3QgTWVkaWFJbWFnZTIgKmltZykgeworICAgIHJldHVybiBfSW1hZ2VDb3B5PGZhbHNlPih2aWV3LCBpbWcsIGltZ0Jhc2UpOworfQorCitib29sIElzWVVWNDIwKGNvbnN0IEMyR3JhcGhpY1ZpZXcgJnZpZXcpIHsKKyAgICBjb25zdCBDMlBsYW5hckxheW91dCAmbGF5b3V0ID0gdmlldy5sYXlvdXQoKTsKKyAgICByZXR1cm4gKGxheW91dC5udW1QbGFuZXMgPT0gMworICAgICAgICAgICAgJiYgbGF5b3V0LnR5cGUgPT0gQzJQbGFuYXJMYXlvdXQ6OlRZUEVfWVVWCisgICAgICAgICAgICAmJiBsYXlvdXQucGxhbmVzW2xheW91dC5QTEFORV9ZXS5jaGFubmVsID09IEMyUGxhbmVJbmZvOjpDSEFOTkVMX1kKKyAgICAgICAgICAgICYmIGxheW91dC5wbGFuZXNbbGF5b3V0LlBMQU5FX1ldLmFsbG9jYXRlZERlcHRoID09IDgKKyAgICAgICAgICAgICYmIGxheW91dC5wbGFuZXNbbGF5b3V0LlBMQU5FX1ldLmJpdERlcHRoID09IDgKKyAgICAgICAgICAgICYmIGxheW91dC5wbGFuZXNbbGF5b3V0LlBMQU5FX1ldLnJpZ2h0U2hpZnQgPT0gMAorICAgICAgICAgICAgJiYgbGF5b3V0LnBsYW5lc1tsYXlvdXQuUExBTkVfWV0uY29sU2FtcGxpbmcgPT0gMQorICAgICAgICAgICAgJiYgbGF5b3V0LnBsYW5lc1tsYXlvdXQuUExBTkVfWV0ucm93U2FtcGxpbmcgPT0gMQorICAgICAgICAgICAgJiYgbGF5b3V0LnBsYW5lc1tsYXlvdXQuUExBTkVfVV0uY2hhbm5lbCA9PSBDMlBsYW5lSW5mbzo6Q0hBTk5FTF9DQgorICAgICAgICAgICAgJiYgbGF5b3V0LnBsYW5lc1tsYXlvdXQuUExBTkVfVV0uYWxsb2NhdGVkRGVwdGggPT0gOAorICAgICAgICAgICAgJiYgbGF5b3V0LnBsYW5lc1tsYXlvdXQuUExBTkVfVV0uYml0RGVwdGggPT0gOAorICAgICAgICAgICAgJiYgbGF5b3V0LnBsYW5lc1tsYXlvdXQuUExBTkVfVV0ucmlnaHRTaGlmdCA9PSAwCisgICAgICAgICAgICAmJiBsYXlvdXQucGxhbmVzW2xheW91dC5QTEFORV9VXS5jb2xTYW1wbGluZyA9PSAyCisgICAgICAgICAgICAmJiBsYXlvdXQucGxhbmVzW2xheW91dC5QTEFORV9VXS5yb3dTYW1wbGluZyA9PSAyCisgICAgICAgICAgICAmJiBsYXlvdXQucGxhbmVzW2xheW91dC5QTEFORV9WXS5jaGFubmVsID09IEMyUGxhbmVJbmZvOjpDSEFOTkVMX0NSCisgICAgICAgICAgICAmJiBsYXlvdXQucGxhbmVzW2xheW91dC5QTEFORV9WXS5hbGxvY2F0ZWREZXB0aCA9PSA4CisgICAgICAgICAgICAmJiBsYXlvdXQucGxhbmVzW2xheW91dC5QTEFORV9WXS5iaXREZXB0aCA9PSA4CisgICAgICAgICAgICAmJiBsYXlvdXQucGxhbmVzW2xheW91dC5QTEFORV9WXS5yaWdodFNoaWZ0ID09IDAKKyAgICAgICAgICAgICYmIGxheW91dC5wbGFuZXNbbGF5b3V0LlBMQU5FX1ZdLmNvbFNhbXBsaW5nID09IDIKKyAgICAgICAgICAgICYmIGxheW91dC5wbGFuZXNbbGF5b3V0LlBMQU5FX1ZdLnJvd1NhbXBsaW5nID09IDIpOworfQorCitNZWRpYUltYWdlMiBDcmVhdGVZVVY0MjBQbGFuYXJNZWRpYUltYWdlMigKKyAgICAgICAgdWludDMyX3Qgd2lkdGgsIHVpbnQzMl90IGhlaWdodCwgdWludDMyX3Qgc3RyaWRlLCB1aW50MzJfdCB2c3RyaWRlKSB7CisgICAgcmV0dXJuIE1lZGlhSW1hZ2UyIHsKKyAgICAgICAgLm1UeXBlID0gTWVkaWFJbWFnZTI6Ok1FRElBX0lNQUdFX1RZUEVfWVVWLAorICAgICAgICAubU51bVBsYW5lcyA9IDMsCisgICAgICAgIC5tV2lkdGggPSB3aWR0aCwKKyAgICAgICAgLm1IZWlnaHQgPSBoZWlnaHQsCisgICAgICAgIC5tQml0RGVwdGggPSA4LAorICAgICAgICAubUJpdERlcHRoQWxsb2NhdGVkID0gOCwKKyAgICAgICAgLm1QbGFuZSA9IHsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAubU9mZnNldCA9IDAsCisgICAgICAgICAgICAgICAgLm1Db2xJbmMgPSAxLAorICAgICAgICAgICAgICAgIC5tUm93SW5jID0gKGludDMyX3Qpc3RyaWRlLAorICAgICAgICAgICAgICAgIC5tSG9yaXpTdWJzYW1wbGluZyA9IDEsCisgICAgICAgICAgICAgICAgLm1WZXJ0U3Vic2FtcGxpbmcgPSAxLAorICAgICAgICAgICAgfSwKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAubU9mZnNldCA9IHN0cmlkZSAqIHZzdHJpZGUsCisgICAgICAgICAgICAgICAgLm1Db2xJbmMgPSAxLAorICAgICAgICAgICAgICAgIC5tUm93SW5jID0gKGludDMyX3Qpc3RyaWRlIC8gMiwKKyAgICAgICAgICAgICAgICAubUhvcml6U3Vic2FtcGxpbmcgPSAyLAorICAgICAgICAgICAgICAgIC5tVmVydFN1YnNhbXBsaW5nID0gMiwKKyAgICAgICAgICAgIH0sCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgLm1PZmZzZXQgPSBzdHJpZGUgKiB2c3RyaWRlICogNSAvIDQsCisgICAgICAgICAgICAgICAgLm1Db2xJbmMgPSAxLAorICAgICAgICAgICAgICAgIC5tUm93SW5jID0gKGludDMyX3Qpc3RyaWRlIC8gMiwKKyAgICAgICAgICAgICAgICAubUhvcml6U3Vic2FtcGxpbmcgPSAyLAorICAgICAgICAgICAgICAgIC5tVmVydFN1YnNhbXBsaW5nID0gMiwKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSwKKyAgICB9OworfQorCitNZWRpYUltYWdlMiBDcmVhdGVZVVY0MjBTZW1pUGxhbmFyTWVkaWFJbWFnZTIoCisgICAgICAgIHVpbnQzMl90IHdpZHRoLCB1aW50MzJfdCBoZWlnaHQsIHVpbnQzMl90IHN0cmlkZSwgdWludDMyX3QgdnN0cmlkZSkgeworICAgIHJldHVybiBNZWRpYUltYWdlMiB7CisgICAgICAgIC5tVHlwZSA9IE1lZGlhSW1hZ2UyOjpNRURJQV9JTUFHRV9UWVBFX1lVViwKKyAgICAgICAgLm1OdW1QbGFuZXMgPSAzLAorICAgICAgICAubVdpZHRoID0gd2lkdGgsCisgICAgICAgIC5tSGVpZ2h0ID0gaGVpZ2h0LAorICAgICAgICAubUJpdERlcHRoID0gOCwKKyAgICAgICAgLm1CaXREZXB0aEFsbG9jYXRlZCA9IDgsCisgICAgICAgIC5tUGxhbmUgPSB7CisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgLm1PZmZzZXQgPSAwLAorICAgICAgICAgICAgICAgIC5tQ29sSW5jID0gMSwKKyAgICAgICAgICAgICAgICAubVJvd0luYyA9IChpbnQzMl90KXN0cmlkZSwKKyAgICAgICAgICAgICAgICAubUhvcml6U3Vic2FtcGxpbmcgPSAxLAorICAgICAgICAgICAgICAgIC5tVmVydFN1YnNhbXBsaW5nID0gMSwKKyAgICAgICAgICAgIH0sCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgLm1PZmZzZXQgPSBzdHJpZGUgKiB2c3RyaWRlLAorICAgICAgICAgICAgICAgIC5tQ29sSW5jID0gMiwKKyAgICAgICAgICAgICAgICAubVJvd0luYyA9IChpbnQzMl90KXN0cmlkZSwKKyAgICAgICAgICAgICAgICAubUhvcml6U3Vic2FtcGxpbmcgPSAyLAorICAgICAgICAgICAgICAgIC5tVmVydFN1YnNhbXBsaW5nID0gMiwKKyAgICAgICAgICAgIH0sCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgLm1PZmZzZXQgPSBzdHJpZGUgKiB2c3RyaWRlICsgMSwKKyAgICAgICAgICAgICAgICAubUNvbEluYyA9IDIsCisgICAgICAgICAgICAgICAgLm1Sb3dJbmMgPSAoaW50MzJfdClzdHJpZGUsCisgICAgICAgICAgICAgICAgLm1Ib3JpelN1YnNhbXBsaW5nID0gMiwKKyAgICAgICAgICAgICAgICAubVZlcnRTdWJzYW1wbGluZyA9IDIsCisgICAgICAgICAgICB9CisgICAgICAgIH0sCisgICAgfTsKK30KKworc3RhdHVzX3QgQ29udmVydFJHQlRvUGxhbmFyWVVWKAorICAgICAgICB1aW50OF90ICpkc3RZLCBzaXplX3QgZHN0U3RyaWRlLCBzaXplX3QgZHN0VlN0cmlkZSwgc2l6ZV90IGJ1ZmZlclNpemUsCisgICAgICAgIGNvbnN0IEMyR3JhcGhpY1ZpZXcgJnNyYykgeworICAgIENIRUNLKGRzdFkgIT0gbnVsbHB0cik7CisgICAgQ0hFQ0soKHNyYy53aWR0aCgpICYgMSkgPT0gMCk7CisgICAgQ0hFQ0soKHNyYy5oZWlnaHQoKSAmIDEpID09IDApOworCisgICAgaWYgKGRzdFN0cmlkZSAqIGRzdFZTdHJpZGUgKiAzIC8gMiA+IGJ1ZmZlclNpemUpIHsKKyAgICAgICAgQUxPR0QoImNvbnZlcnNpb24gYnVmZmVyIGlzIHRvbyBzbWFsbCBmb3IgY29udmVydGluZyBmcm9tIFJHQiB0byBZVVYiKTsKKyAgICAgICAgcmV0dXJuIE5PX01FTU9SWTsKKyAgICB9CisKKyAgICB1aW50OF90ICpkc3RVID0gZHN0WSArIGRzdFN0cmlkZSAqIGRzdFZTdHJpZGU7CisgICAgdWludDhfdCAqZHN0ViA9IGRzdFUgKyAoZHN0U3RyaWRlID4+IDEpICogKGRzdFZTdHJpZGUgPj4gMSk7CisKKyAgICBjb25zdCBDMlBsYW5hckxheW91dCAmbGF5b3V0ID0gc3JjLmxheW91dCgpOworICAgIGNvbnN0IHVpbnQ4X3QgKnBSZWQgICA9IHNyYy5kYXRhKClbQzJQbGFuYXJMYXlvdXQ6OlBMQU5FX1JdOworICAgIGNvbnN0IHVpbnQ4X3QgKnBHcmVlbiA9IHNyYy5kYXRhKClbQzJQbGFuYXJMYXlvdXQ6OlBMQU5FX0ddOworICAgIGNvbnN0IHVpbnQ4X3QgKnBCbHVlICA9IHNyYy5kYXRhKClbQzJQbGFuYXJMYXlvdXQ6OlBMQU5FX0JdOworCisjZGVmaW5lIENMSVAzKHgseSx6KSAoKCh6KSA8ICh4KSkgPyAoeCkgOiAoKCh6KSA+ICh5KSkgPyAoeSkgOiAoeikpKQorICAgIGZvciAoc2l6ZV90IHkgPSAwOyB5IDwgc3JjLmhlaWdodCgpOyArK3kpIHsKKyAgICAgICAgZm9yIChzaXplX3QgeCA9IDA7IHggPCBzcmMud2lkdGgoKTsgKyt4KSB7CisgICAgICAgICAgICB1aW50OF90IHJlZCA9ICpwUmVkOworICAgICAgICAgICAgdWludDhfdCBncmVlbiA9ICpwR3JlZW47CisgICAgICAgICAgICB1aW50OF90IGJsdWUgPSAqcEJsdWU7CisKKyAgICAgICAgICAgIC8vIHVzaW5nIElUVS1SIEJULjYwMSBjb252ZXJzaW9uIG1hdHJpeAorICAgICAgICAgICAgdW5zaWduZWQgbHVtYSA9CisgICAgICAgICAgICAgICAgQ0xJUDMoMCwgKCgocmVkICogNjYgKyBncmVlbiAqIDEyOSArIGJsdWUgKiAyNSkgPj4gOCkgKyAxNiksIDI1NSk7CisKKyAgICAgICAgICAgIGRzdFlbeF0gPSBsdW1hOworCisgICAgICAgICAgICBpZiAoKHggJiAxKSA9PSAwICYmICh5ICYgMSkgPT0gMCkgeworICAgICAgICAgICAgICAgIHVuc2lnbmVkIFUgPQorICAgICAgICAgICAgICAgICAgICBDTElQMygwLCAoKCgtcmVkICogMzggLSBncmVlbiAqIDc0ICsgYmx1ZSAqIDExMikgPj4gOCkgKyAxMjgpLCAyNTUpOworCisgICAgICAgICAgICAgICAgdW5zaWduZWQgViA9CisgICAgICAgICAgICAgICAgICAgIENMSVAzKDAsICgoKHJlZCAqIDExMiAtIGdyZWVuICogOTQgLSBibHVlICogMTgpID4+IDgpICsgMTI4KSwgMjU1KTsKKworICAgICAgICAgICAgICAgIGRzdFVbeCA+PiAxXSA9IFU7CisgICAgICAgICAgICAgICAgZHN0Vlt4ID4+IDFdID0gVjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHBSZWQgICArPSBsYXlvdXQucGxhbmVzW0MyUGxhbmFyTGF5b3V0OjpQTEFORV9SXS5jb2xJbmM7CisgICAgICAgICAgICBwR3JlZW4gKz0gbGF5b3V0LnBsYW5lc1tDMlBsYW5hckxheW91dDo6UExBTkVfR10uY29sSW5jOworICAgICAgICAgICAgcEJsdWUgICs9IGxheW91dC5wbGFuZXNbQzJQbGFuYXJMYXlvdXQ6OlBMQU5FX0JdLmNvbEluYzsKKyAgICAgICAgfQorCisgICAgICAgIGlmICgoeSAmIDEpID09IDApIHsKKyAgICAgICAgICAgIGRzdFUgKz0gZHN0U3RyaWRlID4+IDE7CisgICAgICAgICAgICBkc3RWICs9IGRzdFN0cmlkZSA+PiAxOworICAgICAgICB9CisKKyAgICAgICAgcFJlZCAgIC09IGxheW91dC5wbGFuZXNbQzJQbGFuYXJMYXlvdXQ6OlBMQU5FX1JdLmNvbEluYyAqIHNyYy53aWR0aCgpOworICAgICAgICBwR3JlZW4gLT0gbGF5b3V0LnBsYW5lc1tDMlBsYW5hckxheW91dDo6UExBTkVfR10uY29sSW5jICogc3JjLndpZHRoKCk7CisgICAgICAgIHBCbHVlICAtPSBsYXlvdXQucGxhbmVzW0MyUGxhbmFyTGF5b3V0OjpQTEFORV9CXS5jb2xJbmMgKiBzcmMud2lkdGgoKTsKKyAgICAgICAgcFJlZCAgICs9IGxheW91dC5wbGFuZXNbQzJQbGFuYXJMYXlvdXQ6OlBMQU5FX1JdLnJvd0luYzsKKyAgICAgICAgcEdyZWVuICs9IGxheW91dC5wbGFuZXNbQzJQbGFuYXJMYXlvdXQ6OlBMQU5FX0ddLnJvd0luYzsKKyAgICAgICAgcEJsdWUgICs9IGxheW91dC5wbGFuZXNbQzJQbGFuYXJMYXlvdXQ6OlBMQU5FX0JdLnJvd0luYzsKKworICAgICAgICBkc3RZICs9IGRzdFN0cmlkZTsKKyAgICB9CisgICAgcmV0dXJuIE9LOworfQorCituYW1lc3BhY2UgeworCisvKioKKyAqIEEgYmxvY2sgb2YgcmF3IGFsbG9jYXRlZCBtZW1vcnkuCisgKi8KK3N0cnVjdCBNZW1vcnlCbG9ja1Bvb2xCbG9jayB7CisgICAgTWVtb3J5QmxvY2tQb29sQmxvY2soc2l6ZV90IHNpemUpCisgICAgICAgIDogbURhdGEobmV3IHVpbnQ4X3Rbc2l6ZV0pLCBtU2l6ZShtRGF0YSA/IHNpemUgOiAwKSB7IH0KKworICAgIH5NZW1vcnlCbG9ja1Bvb2xCbG9jaygpIHsKKyAgICAgICAgZGVsZXRlW10gbURhdGE7CisgICAgfQorCisgICAgY29uc3QgdWludDhfdCAqZGF0YSgpIGNvbnN0IHsKKyAgICAgICAgcmV0dXJuIG1EYXRhOworICAgIH0KKworICAgIHNpemVfdCBzaXplKCkgY29uc3QgeworICAgICAgICByZXR1cm4gbVNpemU7CisgICAgfQorCisgICAgQzJfRE9fTk9UX0NPUFkoTWVtb3J5QmxvY2tQb29sQmxvY2spOworCitwcml2YXRlOgorICAgIHVpbnQ4X3QgKm1EYXRhOworICAgIHNpemVfdCBtU2l6ZTsKK307CisKKy8qKgorICogQSBzaW1wbGUgcmF3IG1lbW9yeSBibG9jayBwb29sIGltcGxlbWVudGF0aW9uLgorICovCitzdHJ1Y3QgTWVtb3J5QmxvY2tQb29sSW1wbCB7CisgICAgdm9pZCByZWxlYXNlKHN0ZDo6bGlzdDxNZW1vcnlCbG9ja1Bvb2xCbG9jaz46OmNvbnN0X2l0ZXJhdG9yIGJsb2NrKSB7CisgICAgICAgIHN0ZDo6bG9ja19ndWFyZDxzdGQ6Om11dGV4PiBsb2NrKG1NdXRleCk7CisgICAgICAgIC8vIHJldHVybiBibG9jayB0byBmcmVlIGJsb2NrcyBpZiBpdCBpcyB0aGUgY3VycmVudCBzaXplOyBvdGhlcndpc2UsIGRpc2NhcmQKKyAgICAgICAgaWYgKGJsb2NrLT5zaXplKCkgPT0gbUN1cnJlbnRTaXplKSB7CisgICAgICAgICAgICBtRnJlZUJsb2Nrcy5zcGxpY2UobUZyZWVCbG9ja3MuYmVnaW4oKSwgbUJsb2Nrc0luVXNlLCBibG9jayk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBtQmxvY2tzSW5Vc2UuZXJhc2UoYmxvY2spOworICAgICAgICB9CisgICAgfQorCisgICAgc3RkOjpsaXN0PE1lbW9yeUJsb2NrUG9vbEJsb2NrPjo6Y29uc3RfaXRlcmF0b3IgZmV0Y2goc2l6ZV90IHNpemUpIHsKKyAgICAgICAgc3RkOjpsb2NrX2d1YXJkPHN0ZDo6bXV0ZXg+IGxvY2sobU11dGV4KTsKKyAgICAgICAgbUZyZWVCbG9ja3MucmVtb3ZlX2lmKFtzaXplXShjb25zdCBNZW1vcnlCbG9ja1Bvb2xCbG9jayAmYmxvY2spIC0+IGJvb2wgeworICAgICAgICAgICAgcmV0dXJuIGJsb2NrLnNpemUoKSAhPSBzaXplOworICAgICAgICB9KTsKKyAgICAgICAgbUN1cnJlbnRTaXplID0gc2l6ZTsKKyAgICAgICAgaWYgKG1GcmVlQmxvY2tzLmVtcHR5KCkpIHsKKyAgICAgICAgICAgIG1CbG9ja3NJblVzZS5lbXBsYWNlX2Zyb250KHNpemUpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgbUJsb2Nrc0luVXNlLnNwbGljZShtQmxvY2tzSW5Vc2UuYmVnaW4oKSwgbUZyZWVCbG9ja3MsIG1GcmVlQmxvY2tzLmJlZ2luKCkpOworICAgICAgICB9CisgICAgICAgIHJldHVybiBtQmxvY2tzSW5Vc2UuYmVnaW4oKTsKKyAgICB9CisKKyAgICBNZW1vcnlCbG9ja1Bvb2xJbXBsKCkgPSBkZWZhdWx0OworCisgICAgQzJfRE9fTk9UX0NPUFkoTWVtb3J5QmxvY2tQb29sSW1wbCk7CisKK3ByaXZhdGU6CisgICAgc3RkOjptdXRleCBtTXV0ZXg7CisgICAgc3RkOjpsaXN0PE1lbW9yeUJsb2NrUG9vbEJsb2NrPiBtRnJlZUJsb2NrczsKKyAgICBzdGQ6Omxpc3Q8TWVtb3J5QmxvY2tQb29sQmxvY2s+IG1CbG9ja3NJblVzZTsKKyAgICBzaXplX3QgbUN1cnJlbnRTaXplOworfTsKKworfSAvLyBuYW1lc3BhY2UKKworc3RydWN0IE1lbW9yeUJsb2NrUG9vbDo6SW1wbCA6IE1lbW9yeUJsb2NrUG9vbEltcGwgeworfTsKKworc3RydWN0IE1lbW9yeUJsb2NrOjpJbXBsIHsKKyAgICBJbXBsKHN0ZDo6bGlzdDxNZW1vcnlCbG9ja1Bvb2xCbG9jaz46OmNvbnN0X2l0ZXJhdG9yIGJsb2NrLAorICAgICAgICAgc3RkOjpzaGFyZWRfcHRyPE1lbW9yeUJsb2NrUG9vbEltcGw+IHBvb2wpCisgICAgICAgIDogbUJsb2NrKGJsb2NrKSwgbVBvb2wocG9vbCkgeworICAgIH0KKworICAgIH5JbXBsKCkgeworICAgICAgICBtUG9vbC0+cmVsZWFzZShtQmxvY2spOworICAgIH0KKworICAgIGNvbnN0IHVpbnQ4X3QgKmRhdGEoKSBjb25zdCB7CisgICAgICAgIHJldHVybiBtQmxvY2stPmRhdGEoKTsKKyAgICB9CisKKyAgICBzaXplX3Qgc2l6ZSgpIGNvbnN0IHsKKyAgICAgICAgcmV0dXJuIG1CbG9jay0+c2l6ZSgpOworICAgIH0KKworcHJpdmF0ZToKKyAgICBzdGQ6Omxpc3Q8TWVtb3J5QmxvY2tQb29sQmxvY2s+Ojpjb25zdF9pdGVyYXRvciBtQmxvY2s7CisgICAgc3RkOjpzaGFyZWRfcHRyPE1lbW9yeUJsb2NrUG9vbEltcGw+IG1Qb29sOworfTsKKworTWVtb3J5QmxvY2sgTWVtb3J5QmxvY2tQb29sOjpmZXRjaChzaXplX3Qgc2l6ZSkgeworICAgIHN0ZDo6bGlzdDxNZW1vcnlCbG9ja1Bvb2xCbG9jaz46OmNvbnN0X2l0ZXJhdG9yIHBvb2xCbG9jayA9IG1JbXBsLT5mZXRjaChzaXplKTsKKyAgICByZXR1cm4gTWVtb3J5QmxvY2soc3RkOjptYWtlX3NoYXJlZDxNZW1vcnlCbG9jazo6SW1wbD4oCisgICAgICAgICAgICBwb29sQmxvY2ssIHN0ZDo6c3RhdGljX3BvaW50ZXJfY2FzdDxNZW1vcnlCbG9ja1Bvb2xJbXBsPihtSW1wbCkpKTsKK30KKworTWVtb3J5QmxvY2tQb29sOjpNZW1vcnlCbG9ja1Bvb2woKQorICAgIDogbUltcGwoc3RkOjptYWtlX3NoYXJlZDxNZW1vcnlCbG9ja1Bvb2w6OkltcGw+KCkpIHsKK30KKworTWVtb3J5QmxvY2s6Ok1lbW9yeUJsb2NrKHN0ZDo6c2hhcmVkX3B0cjxNZW1vcnlCbG9jazo6SW1wbD4gaW1wbCkKKyAgICA6IG1JbXBsKGltcGwpIHsKK30KKworTWVtb3J5QmxvY2s6Ok1lbW9yeUJsb2NrKCkgPSBkZWZhdWx0OworCitNZW1vcnlCbG9jazo6fk1lbW9yeUJsb2NrKCkgPSBkZWZhdWx0OworCitjb25zdCB1aW50OF90KiBNZW1vcnlCbG9jazo6ZGF0YSgpIGNvbnN0IHsKKyAgICByZXR1cm4gbUltcGwgPyBtSW1wbC0+ZGF0YSgpIDogbnVsbHB0cjsKK30KKworc2l6ZV90IE1lbW9yeUJsb2NrOjpzaXplKCkgY29uc3QgeworICAgIHJldHVybiBtSW1wbCA/IG1JbXBsLT5zaXplKCkgOiAwOworfQorCitNZW1vcnlCbG9jayBNZW1vcnlCbG9jazo6QWxsb2NhdGUoc2l6ZV90IHNpemUpIHsKKyAgICByZXR1cm4gTWVtb3J5QmxvY2tQb29sKCkuZmV0Y2goc2l6ZSk7Cit9CisKK30gIC8vIG5hbWVzcGFjZSBhbmRyb2lkCmRpZmYgLS1naXQgYS9tZWRpYS9jb2RlYzIvc2ZwbHVnaW4vdXRpbHMvQ29kZWMyQnVmZmVyVXRpbHMuaCBiL21lZGlhL2NvZGVjMi9zZnBsdWdpbi91dGlscy9Db2RlYzJCdWZmZXJVdGlscy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVhZjY3NzYKLS0tIC9kZXYvbnVsbAorKysgYi9tZWRpYS9jb2RlYzIvc2ZwbHVnaW4vdXRpbHMvQ29kZWMyQnVmZmVyVXRpbHMuaApAQCAtMCwwICsxLDE0MSBAQAorLyoKKyAqIENvcHlyaWdodCAyMDE4LCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCisKKyNpZm5kZWYgQ09ERUMyX0JVRkZFUl9VVElMU19IXworI2RlZmluZSBDT0RFQzJfQlVGRkVSX1VUSUxTX0hfCisKKyNpbmNsdWRlIDxDMkJ1ZmZlci5oPgorI2luY2x1ZGUgPEMyUGFyYW1EZWYuaD4KKworI2luY2x1ZGUgPG1lZGlhL2hhcmR3YXJlL1ZpZGVvQVBJLmg+CisjaW5jbHVkZSA8dXRpbHMvRXJyb3JzLmg+CisKK25hbWVzcGFjZSBhbmRyb2lkIHsKKworLyoqCisgKiBDb252ZXJ0cyBhbiBSR0IgdmlldyB0byBwbGFuYXIgWVVWIDQyMCBtZWRpYSBpbWFnZS4KKyAqCisgKiBccGFyYW0gZHN0WSAgICAgICBwb2ludGVyIHRvIG1lZGlhIGltYWdlIGJ1ZmZlcgorICogXHBhcmFtIGRzdFN0cmlkZSAgc3RyaWRlIGluIGJ5dGVzCisgKiBccGFyYW0gZHN0VlN0cmlkZSB2ZXJ0aWNhbCBzdHJpZGUgaW4gcGl4ZWxzCisgKiBccGFyYW0gYnVmZmVyU2l6ZSBtZWRpYSBpbWFnZSBidWZmZXIgc2l6ZQorICogXHBhcmFtIHNyYyBzb3VyY2UgaW1hZ2UKKyAqCisgKiBccmV0dmFsIE5PX01FTU9SWSBtZWRpYSBpbWFnZSBpcyB0b28gc21hbGwKKyAqIFxyZXR2YWwgT0sgb24gc3VjY2VzcworICovCitzdGF0dXNfdCBDb252ZXJ0UkdCVG9QbGFuYXJZVVYoCisgICAgICAgIHVpbnQ4X3QgKmRzdFksIHNpemVfdCBkc3RTdHJpZGUsIHNpemVfdCBkc3RWU3RyaWRlLCBzaXplX3QgYnVmZmVyU2l6ZSwKKyAgICAgICAgY29uc3QgQzJHcmFwaGljVmlldyAmc3JjKTsKKworLyoqCisgKiBSZXR1cm5zIGEgcGxhbmFyIFlVViA0MjAgOC1iaXQgbWVkaWEgaW1hZ2UgZGVzY3JpcHRvci4KKyAqCisgKiBccGFyYW0gd2lkdGggd2lkdGggb2YgaW1hZ2UgaW4gcGl4ZWxzCisgKiBccGFyYW0gaGVpZ2h0IGhlaWdodCBvZiBpbWFnZSBpbiBwaXhlbHMKKyAqIFxwYXJhbSBzdHJpZGUgc3RyaWRlIG9mIGltYWdlIGluIHBpeGVscworICogXHBhcmFtIHZzdHJpZGUgdmVydGljYWwgc3RyaWRlIG9mIGltYWdlIGluIHBpeGVscworICovCitNZWRpYUltYWdlMiBDcmVhdGVZVVY0MjBQbGFuYXJNZWRpYUltYWdlMigKKyAgICAgICAgdWludDMyX3Qgd2lkdGgsIHVpbnQzMl90IGhlaWdodCwgdWludDMyX3Qgc3RyaWRlLCB1aW50MzJfdCB2c3RyaWRlKTsKKworLyoqCisgKiBSZXR1cm5zIGEgc2VtaXBsYW5hciBZVVYgNDIwIDgtYml0IG1lZGlhIGltYWdlIGRlc2NyaXB0b3IuCisgKgorICogXHBhcmFtIHdpZHRoIHdpZHRoIG9mIGltYWdlIGluIHBpeGVscworICogXHBhcmFtIGhlaWdodCBoZWlnaHQgb2YgaW1hZ2UgaW4gcGl4ZWxzCisgKiBccGFyYW0gc3RyaWRlIHN0cmlkZSBvZiBpbWFnZSBpbiBwaXhlbHMKKyAqIFxwYXJhbSB2c3RyaWRlIHZlcnRpY2FsIHN0cmlkZSBvZiBpbWFnZSBpbiBwaXhlbHMKKyAqLworTWVkaWFJbWFnZTIgQ3JlYXRlWVVWNDIwU2VtaVBsYW5hck1lZGlhSW1hZ2UyKAorICAgICAgICB1aW50MzJfdCB3aWR0aCwgdWludDMyX3QgaGVpZ2h0LCB1aW50MzJfdCBzdHJpZGUsIHVpbnQzMl90IHZzdHJpZGUpOworCisvKioKKyAqIENvcGllcyBhIGdyYXBoaWMgdmlldyBpbnRvIGEgbWVkaWEgaW1hZ2UuCisgKgorICogXHBhcmFtIGltZ0Jhc2UgYmFzZSBvZiBNZWRpYUltYWdlCisgKiBccGFyYW0gaW1nIE1lZGlhSW1hZ2UgZGF0YQorICogXHBhcmFtIHZpZXcgZ3JhcGhpYyB2aWV3CisgKgorICogXHJldHVybiBPSyBvbiBzdWNjZXNzCisgKi8KK3N0YXR1c190IEltYWdlQ29weSh1aW50OF90ICppbWdCYXNlLCBjb25zdCBNZWRpYUltYWdlMiAqaW1nLCBjb25zdCBDMkdyYXBoaWNWaWV3ICZ2aWV3KTsKKworLyoqCisgKiBDb3BpZXMgYSBtZWRpYSBpbWFnZSBpbnRvIGEgZ3JhcGhpYyB2aWV3LgorICoKKyAqIFxwYXJhbSB2aWV3IGdyYXBoaWMgdmlldworICogXHBhcmFtIGltZ0Jhc2UgYmFzZSBvZiBNZWRpYUltYWdlCisgKiBccGFyYW0gaW1nIE1lZGlhSW1hZ2UgZGF0YQorICoKKyAqIFxyZXR1cm4gT0sgb24gc3VjY2VzcworICovCitzdGF0dXNfdCBJbWFnZUNvcHkoQzJHcmFwaGljVmlldyAmdmlldywgY29uc3QgdWludDhfdCAqaW1nQmFzZSwgY29uc3QgTWVkaWFJbWFnZTIgKmltZyk7CisKKy8qKgorICogUmV0dXJucyB0cnVlIGlmZiBhIHZpZXcgaGFzIGEgWVVWIDQyMCA4ODggbGF5b3V0LgorICovCitib29sIElzWVVWNDIwKGNvbnN0IEMyR3JhcGhpY1ZpZXcgJnZpZXcpOworCisvKioKKyAqIEEgcmF3IG1lbW9yeSBibG9jayB0byB1c2UgZm9yIGludGVybmFsIGJ1ZmZlcnMuCisgKgorICogVE9ETzogcmVwbGFjZSB0aGlzIHdpdGggQzJMaW5lYXJCbG9ja3MgZnJvbSBhIHByaXZhdGUgQzJCbG9ja1Bvb2wKKyAqLworc3RydWN0IE1lbW9yeUJsb2NrIDogcHVibGljIEMyTWVtb3J5QmxvY2s8dWludDhfdD4geworICAgIHZpcnR1YWwgY29uc3QgdWludDhfdCogZGF0YSgpIGNvbnN0IG92ZXJyaWRlOworICAgIHZpcnR1YWwgc2l6ZV90IHNpemUoKSBjb25zdCBvdmVycmlkZTsKKworICAgIGlubGluZSB1aW50OF90ICpkYXRhKCkgeworICAgICAgICByZXR1cm4gY29uc3RfY2FzdDx1aW50OF90Kj4oY29uc3RfY2FzdDxjb25zdCBNZW1vcnlCbG9jayo+KHRoaXMpLT5kYXRhKCkpOworICAgIH0KKworICAgIC8vIGFsbG9jYXRlcyBhbiB1bm1hbmFnZWQgYmxvY2sgKG5vdCBpbiBhIHBvb2wpCisgICAgc3RhdGljIE1lbW9yeUJsb2NrIEFsbG9jYXRlKHNpemVfdCk7CisKKyAgICAvLyBtZW1vcnkgYmxvY2sgd2l0aCBubyBhY3R1YWwgbWVtb3J5IChzaXplIGlzIDAsIGRhdGEgaXMgbnVsbCkKKyAgICBNZW1vcnlCbG9jaygpOworCisgICAgc3RydWN0IEltcGw7CisgICAgTWVtb3J5QmxvY2soc3RkOjpzaGFyZWRfcHRyPEltcGw+IGltcGwpOworICAgIHZpcnR1YWwgfk1lbW9yeUJsb2NrKCk7CisKK3ByaXZhdGU6CisgICAgc3RkOjpzaGFyZWRfcHRyPEltcGw+IG1JbXBsOworfTsKKworLyoqCisgKiBBIHJhdyBtZW1vcnkgbWluaS1wb29sLgorICovCitzdHJ1Y3QgTWVtb3J5QmxvY2tQb29sIHsKKyAgICAvKioKKyAgICAgKiBGZXRjaGVzIGEgYmxvY2sgd2l0aCBhIGdpdmVuIHNpemUuCisgICAgICoKKyAgICAgKiBccGFyYW0gc2l6ZSBzaXplIGluIGJ5dGVzCisgICAgICovCisgICAgTWVtb3J5QmxvY2sgZmV0Y2goc2l6ZV90IHNpemUpOworCisgICAgTWVtb3J5QmxvY2tQb29sKCk7CisgICAgfk1lbW9yeUJsb2NrUG9vbCgpID0gZGVmYXVsdDsKKworcHJpdmF0ZToKKyAgICBzdHJ1Y3QgSW1wbDsKKyAgICBzdGQ6OnNoYXJlZF9wdHI8SW1wbD4gbUltcGw7Cit9OworCit9IC8vIG5hbWVzcGFjZSBhbmRyb2lkCisKKyNlbmRpZiAgLy8gQ09ERUMyX0JVRkZFUl9VVElMU19IXwpkaWZmIC0tZ2l0IGEvbWVkaWEvY29kZWMyL3NmcGx1Z2luL3V0aWxzL0NvZGVjMk1hcHBlci5jcHAgYi9tZWRpYS9jb2RlYzIvc2ZwbHVnaW4vdXRpbHMvQ29kZWMyTWFwcGVyLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45N2UxN2U4Ci0tLSAvZGV2L251bGwKKysrIGIvbWVkaWEvY29kZWMyL3NmcGx1Z2luL3V0aWxzL0NvZGVjMk1hcHBlci5jcHAKQEAgLTAsMCArMSw4MTUgQEAKKy8qCisgKiBDb3B5cmlnaHQgMjAxOCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KKworLy8jZGVmaW5lIExPR19OREVCVUcgMAorI2RlZmluZSBMT0dfVEFHICJDb2RlYzJNYXBwZXIiCisjaW5jbHVkZSA8dXRpbHMvTG9nLmg+CisKKyNpbmNsdWRlIDxtZWRpYS9zdGFnZWZyaWdodC9NZWRpYUNvZGVjQ29uc3RhbnRzLmg+CisjaW5jbHVkZSA8bWVkaWEvc3RhZ2VmcmlnaHQvU3VyZmFjZVV0aWxzLmg+CisjaW5jbHVkZSA8bWVkaWEvc3RhZ2VmcmlnaHQvZm91bmRhdGlvbi9BTG9va3VwLmg+CisjaW5jbHVkZSA8bWVkaWEvc3RhZ2VmcmlnaHQvZm91bmRhdGlvbi9Db2xvclV0aWxzLmg+CisjaW5jbHVkZSA8bWVkaWEvc3RhZ2VmcmlnaHQvZm91bmRhdGlvbi9NZWRpYURlZnMuaD4KKworI2luY2x1ZGUgPHN0ZGludC5oPiAgLy8gZm9yIElOVDMyX01BWAorCisjaW5jbHVkZSAiQ29kZWMyTWFwcGVyLmgiCisKK3VzaW5nIG5hbWVzcGFjZSBhbmRyb2lkOworCituYW1lc3BhY2UgeworCitBTG9va3VwPEMyQ29uZmlnOjpwcm9maWxlX3QsIGludDMyX3Q+IHNBYWNQcm9maWxlcyA9IHsKKyAgICB7IEMyQ29uZmlnOjpQUk9GSUxFX0FBQ19MQywgICAgICAgICBBQUNPYmplY3RMQyB9LAorICAgIHsgQzJDb25maWc6OlBST0ZJTEVfQUFDX01BSU4sICAgICAgIEFBQ09iamVjdE1haW4gfSwKKyAgICB7IEMyQ29uZmlnOjpQUk9GSUxFX0FBQ19TU1IsICAgICAgICBBQUNPYmplY3RTU1IgfSwKKyAgICB7IEMyQ29uZmlnOjpQUk9GSUxFX0FBQ19MVFAsICAgICAgICBBQUNPYmplY3RMVFAgfSwKKyAgICB7IEMyQ29uZmlnOjpQUk9GSUxFX0FBQ19IRSwgICAgICAgICBBQUNPYmplY3RIRSB9LAorICAgIHsgQzJDb25maWc6OlBST0ZJTEVfQUFDX1NDQUxBQkxFLCAgIEFBQ09iamVjdFNjYWxhYmxlIH0sCisgICAgeyBDMkNvbmZpZzo6UFJPRklMRV9BQUNfRVJfTEMsICAgICAgQUFDT2JqZWN0RVJMQyB9LAorICAgIHsgQzJDb25maWc6OlBST0ZJTEVfQUFDX0VSX1NDQUxBQkxFLCBBQUNPYmplY3RFUlNjYWxhYmxlIH0sCisgICAgeyBDMkNvbmZpZzo6UFJPRklMRV9BQUNfTEQsICAgICAgICAgQUFDT2JqZWN0TEQgfSwKKyAgICB7IEMyQ29uZmlnOjpQUk9GSUxFX0FBQ19IRV9QUywgICAgICBBQUNPYmplY3RIRV9QUyB9LAorICAgIHsgQzJDb25maWc6OlBST0ZJTEVfQUFDX0VMRCwgICAgICAgIEFBQ09iamVjdEVMRCB9LAorICAgIHsgQzJDb25maWc6OlBST0ZJTEVfQUFDX1hIRSwgICAgICAgIEFBQ09iamVjdFhIRSB9LAorfTsKKworQUxvb2t1cDxDMkNvbmZpZzo6bGV2ZWxfdCwgaW50MzJfdD4gc0F2Y0xldmVscyA9IHsKKyAgICB7IEMyQ29uZmlnOjpMRVZFTF9BVkNfMSwgICAgQVZDTGV2ZWwxIH0sCisgICAgeyBDMkNvbmZpZzo6TEVWRUxfQVZDXzFCLCAgIEFWQ0xldmVsMWIgfSwKKyAgICB7IEMyQ29uZmlnOjpMRVZFTF9BVkNfMV8xLCAgQVZDTGV2ZWwxMSB9LAorICAgIHsgQzJDb25maWc6OkxFVkVMX0FWQ18xXzIsICBBVkNMZXZlbDEyIH0sCisgICAgeyBDMkNvbmZpZzo6TEVWRUxfQVZDXzFfMywgIEFWQ0xldmVsMTMgfSwKKyAgICB7IEMyQ29uZmlnOjpMRVZFTF9BVkNfMiwgICAgQVZDTGV2ZWwyIH0sCisgICAgeyBDMkNvbmZpZzo6TEVWRUxfQVZDXzJfMSwgIEFWQ0xldmVsMjEgfSwKKyAgICB7IEMyQ29uZmlnOjpMRVZFTF9BVkNfMl8yLCAgQVZDTGV2ZWwyMiB9LAorICAgIHsgQzJDb25maWc6OkxFVkVMX0FWQ18zLCAgICBBVkNMZXZlbDMgfSwKKyAgICB7IEMyQ29uZmlnOjpMRVZFTF9BVkNfM18xLCAgQVZDTGV2ZWwzMSB9LAorICAgIHsgQzJDb25maWc6OkxFVkVMX0FWQ18zXzIsICBBVkNMZXZlbDMyIH0sCisgICAgeyBDMkNvbmZpZzo6TEVWRUxfQVZDXzQsICAgIEFWQ0xldmVsNCB9LAorICAgIHsgQzJDb25maWc6OkxFVkVMX0FWQ180XzEsICBBVkNMZXZlbDQxIH0sCisgICAgeyBDMkNvbmZpZzo6TEVWRUxfQVZDXzRfMiwgIEFWQ0xldmVsNDIgfSwKKyAgICB7IEMyQ29uZmlnOjpMRVZFTF9BVkNfNSwgICAgQVZDTGV2ZWw1IH0sCisgICAgeyBDMkNvbmZpZzo6TEVWRUxfQVZDXzVfMSwgIEFWQ0xldmVsNTEgfSwKKyAgICB7IEMyQ29uZmlnOjpMRVZFTF9BVkNfNV8yLCAgQVZDTGV2ZWw1MiB9LAorCit9OworCitBTG9va3VwPEMyQ29uZmlnOjpwcm9maWxlX3QsIGludDMyX3Q+IHNBdmNQcm9maWxlcyA9IHsKKyAgICAvLyB0cmVhdCByZXN0cmljdGVkIHByb2ZpbGVzIGFzIGZ1bGwgcHJvZmlsZSBpZiB0aGVyZSBpcyBubyBlcXVpdmFsZW50IC0gd2hpY2ggd29ya3MgZm9yCisgICAgLy8gZGVjb2RlcnMsIGJ1dCBub3QgZm9yIGVuY29kZXJzCisgICAgeyBDMkNvbmZpZzo6UFJPRklMRV9BVkNfQkFTRUxJTkUsICAgICAgICAgICAgICAgQVZDUHJvZmlsZUJhc2VsaW5lIH0sCisgICAgeyBDMkNvbmZpZzo6UFJPRklMRV9BVkNfQ09OU1RSQUlORURfQkFTRUxJTkUsICAgQVZDUHJvZmlsZUNvbnN0cmFpbmVkQmFzZWxpbmUgfSwKKyAgICB7IEMyQ29uZmlnOjpQUk9GSUxFX0FWQ19NQUlOLCAgICAgICAgICAgICAgICAgICBBVkNQcm9maWxlTWFpbiB9LAorICAgIHsgQzJDb25maWc6OlBST0ZJTEVfQVZDX0VYVEVOREVELCAgICAgICAgICAgICAgIEFWQ1Byb2ZpbGVFeHRlbmRlZCB9LAorICAgIHsgQzJDb25maWc6OlBST0ZJTEVfQVZDX0hJR0gsICAgICAgICAgICAgICAgICAgIEFWQ1Byb2ZpbGVIaWdoIH0sCisgICAgeyBDMkNvbmZpZzo6UFJPRklMRV9BVkNfUFJPR1JFU1NJVkVfSElHSCwgICAgICAgQVZDUHJvZmlsZUhpZ2ggfSwKKyAgICB7IEMyQ29uZmlnOjpQUk9GSUxFX0FWQ19DT05TVFJBSU5FRF9ISUdILCAgICAgICBBVkNQcm9maWxlQ29uc3RyYWluZWRIaWdoIH0sCisgICAgeyBDMkNvbmZpZzo6UFJPRklMRV9BVkNfSElHSF8xMCwgICAgICAgICAgICAgICAgQVZDUHJvZmlsZUhpZ2gxMCB9LAorICAgIHsgQzJDb25maWc6OlBST0ZJTEVfQVZDX1BST0dSRVNTSVZFX0hJR0hfMTAsICAgIEFWQ1Byb2ZpbGVIaWdoMTAgfSwKKyAgICB7IEMyQ29uZmlnOjpQUk9GSUxFX0FWQ19ISUdIXzQyMiwgICAgICAgICAgICAgICBBVkNQcm9maWxlSGlnaDQyMiB9LAorICAgIHsgQzJDb25maWc6OlBST0ZJTEVfQVZDX0hJR0hfNDQ0X1BSRURJQ1RJVkUsICAgIEFWQ1Byb2ZpbGVIaWdoNDQ0IH0sCisgICAgeyBDMkNvbmZpZzo6UFJPRklMRV9BVkNfSElHSF8xMF9JTlRSQSwgICAgICAgICAgQVZDUHJvZmlsZUhpZ2gxMCB9LAorICAgIHsgQzJDb25maWc6OlBST0ZJTEVfQVZDX0hJR0hfNDIyX0lOVFJBLCAgICAgICAgIEFWQ1Byb2ZpbGVIaWdoNDIyIH0sCisgICAgeyBDMkNvbmZpZzo6UFJPRklMRV9BVkNfSElHSF80NDRfSU5UUkEsICAgICAgICAgQVZDUHJvZmlsZUhpZ2g0NDQgfSwKKyAgICB7IEMyQ29uZmlnOjpQUk9GSUxFX0FWQ19DQVZMQ180NDRfSU5UUkEsICAgICAgICBBVkNQcm9maWxlSGlnaDQ0NCB9LAorfTsKKworQUxvb2t1cDxDMkNvbmZpZzo6Yml0cmF0ZV9tb2RlX3QsIGludDMyX3Q+IHNCaXRyYXRlTW9kZXMgPSB7CisgICAgeyBDMkNvbmZpZzo6QklUUkFURV9DT05TVCwgICAgICBCSVRSQVRFX01PREVfQ0JSIH0sCisgICAgeyBDMkNvbmZpZzo6QklUUkFURV9WQVJJQUJMRSwgICBCSVRSQVRFX01PREVfVkJSIH0sCisgICAgeyBDMkNvbmZpZzo6QklUUkFURV9JR05PUkUsICAgICBCSVRSQVRFX01PREVfQ1EgfSwKK307CisKK0FMb29rdXA8QzJDb2xvcjo6bWF0cml4X3QsIENvbG9yQXNwZWN0czo6TWF0cml4Q29lZmZzPiBzQ29sb3JNYXRyaWNlc1NmID0geworICAgIHsgQzJDb2xvcjo6TUFUUklYX1VOU1BFQ0lGSUVELCAgICAgQ29sb3JBc3BlY3RzOjpNYXRyaXhVbnNwZWNpZmllZCB9LAorICAgIHsgQzJDb2xvcjo6TUFUUklYX0JUNzA5LCAgICAgICAgICAgQ29sb3JBc3BlY3RzOjpNYXRyaXhCVDcwOV81IH0sCisgICAgeyBDMkNvbG9yOjpNQVRSSVhfRkNDNDdfNzNfNjgyLCAgICBDb2xvckFzcGVjdHM6Ok1hdHJpeEJUNDcwXzZNIH0sCisgICAgeyBDMkNvbG9yOjpNQVRSSVhfQlQ2MDEsICAgICAgICAgICBDb2xvckFzcGVjdHM6Ok1hdHJpeEJUNjAxXzYgfSwKKyAgICB7IEMyQ29sb3I6Ok1BVFJJWF9TTVBURTI0ME0sICAgICAgIENvbG9yQXNwZWN0czo6TWF0cml4U01QVEUyNDBNIH0sCisgICAgeyBDMkNvbG9yOjpNQVRSSVhfQlQyMDIwLCAgICAgICAgICBDb2xvckFzcGVjdHM6Ok1hdHJpeEJUMjAyMCB9LAorICAgIHsgQzJDb2xvcjo6TUFUUklYX0JUMjAyMF9DT05TVEFOVCwgQ29sb3JBc3BlY3RzOjpNYXRyaXhCVDIwMjBDb25zdGFudCB9LAorICAgIHsgQzJDb2xvcjo6TUFUUklYX09USEVSLCAgICAgICAgICAgQ29sb3JBc3BlY3RzOjpNYXRyaXhPdGhlciB9LAorfTsKKworQUxvb2t1cDxDMkNvbG9yOjpwcmltYXJpZXNfdCwgQ29sb3JBc3BlY3RzOjpQcmltYXJpZXM+IHNDb2xvclByaW1hcmllc1NmID0geworICAgIHsgQzJDb2xvcjo6UFJJTUFSSUVTX1VOU1BFQ0lGSUVELCAgQ29sb3JBc3BlY3RzOjpQcmltYXJpZXNVbnNwZWNpZmllZCB9LAorICAgIHsgQzJDb2xvcjo6UFJJTUFSSUVTX0JUNzA5LCAgICAgICAgQ29sb3JBc3BlY3RzOjpQcmltYXJpZXNCVDcwOV81IH0sCisgICAgeyBDMkNvbG9yOjpQUklNQVJJRVNfQlQ0NzBfTSwgICAgICBDb2xvckFzcGVjdHM6OlByaW1hcmllc0JUNDcwXzZNIH0sCisgICAgeyBDMkNvbG9yOjpQUklNQVJJRVNfQlQ2MDFfNjI1LCAgICBDb2xvckFzcGVjdHM6OlByaW1hcmllc0JUNjAxXzZfNjI1IH0sCisgICAgeyBDMkNvbG9yOjpQUklNQVJJRVNfQlQ2MDFfNTI1LCAgICBDb2xvckFzcGVjdHM6OlByaW1hcmllc0JUNjAxXzZfNTI1IH0sCisgICAgeyBDMkNvbG9yOjpQUklNQVJJRVNfR0VORVJJQ19GSUxNLCBDb2xvckFzcGVjdHM6OlByaW1hcmllc0dlbmVyaWNGaWxtIH0sCisgICAgeyBDMkNvbG9yOjpQUklNQVJJRVNfQlQyMDIwLCAgICAgICBDb2xvckFzcGVjdHM6OlByaW1hcmllc0JUMjAyMCB9LAorLy8gICAgeyBDMkNvbG9yOjpQUklNQVJJRVNfUlA0MzEsICAgICAgICBDb2xvckFzcGVjdHM6OlByaW1hcmllcy4uLiB9LAorLy8gICAgeyBDMkNvbG9yOjpQUklNQVJJRVNfRUc0MzIsICAgICAgICBDb2xvckFzcGVjdHM6OlByaW1hcmllcy4uLiB9LAorLy8gICAgeyBDMkNvbG9yOjpQUklNQVJJRVNfRUJVMzIxMywgICAgICBDb2xvckFzcGVjdHM6OlByaW1hcmllcy4uLiB9LAorICAgIHsgQzJDb2xvcjo6UFJJTUFSSUVTX09USEVSLCAgICAgICAgQ29sb3JBc3BlY3RzOjpQcmltYXJpZXNPdGhlciB9LAorfTsKKworQUxvb2t1cDxDMkNvbG9yOjpyYW5nZV90LCBpbnQzMl90PiBzQ29sb3JSYW5nZXMgPSB7CisgICAgeyBDMkNvbG9yOjpSQU5HRV9GVUxMLCAgICBDT0xPUl9SQU5HRV9GVUxMIH0sCisgICAgeyBDMkNvbG9yOjpSQU5HRV9MSU1JVEVELCBDT0xPUl9SQU5HRV9MSU1JVEVEIH0sCit9OworCitBTG9va3VwPEMyQ29sb3I6OnJhbmdlX3QsIENvbG9yQXNwZWN0czo6UmFuZ2U+IHNDb2xvclJhbmdlc1NmID0geworICAgIHsgQzJDb2xvcjo6UkFOR0VfVU5TUEVDSUZJRUQsIENvbG9yQXNwZWN0czo6UmFuZ2VVbnNwZWNpZmllZCB9LAorICAgIHsgQzJDb2xvcjo6UkFOR0VfRlVMTCwgICAgICAgIENvbG9yQXNwZWN0czo6UmFuZ2VGdWxsIH0sCisgICAgeyBDMkNvbG9yOjpSQU5HRV9MSU1JVEVELCAgICAgQ29sb3JBc3BlY3RzOjpSYW5nZUxpbWl0ZWQgfSwKKyAgICB7IEMyQ29sb3I6OlJBTkdFX09USEVSLCAgICAgICBDb2xvckFzcGVjdHM6OlJhbmdlT3RoZXIgfSwKK307CisKK0FMb29rdXA8QzJDb2xvcjo6dHJhbnNmZXJfdCwgaW50MzJfdD4gc0NvbG9yVHJhbnNmZXJzID0geworICAgIHsgQzJDb2xvcjo6VFJBTlNGRVJfTElORUFSLCBDT0xPUl9UUkFOU0ZFUl9MSU5FQVIgfSwKKyAgICB7IEMyQ29sb3I6OlRSQU5TRkVSXzE3ME0sICAgQ09MT1JfVFJBTlNGRVJfU0RSX1ZJREVPIH0sCisgICAgeyBDMkNvbG9yOjpUUkFOU0ZFUl9TVDIwODQsIENPTE9SX1RSQU5TRkVSX1NUMjA4NCB9LAorICAgIHsgQzJDb2xvcjo6VFJBTlNGRVJfSExHLCAgICBDT0xPUl9UUkFOU0ZFUl9ITEcgfSwKK307CisKK0FMb29rdXA8QzJDb2xvcjo6dHJhbnNmZXJfdCwgQ29sb3JBc3BlY3RzOjpUcmFuc2Zlcj4gc0NvbG9yVHJhbnNmZXJzU2YgPSB7CisgICAgeyBDMkNvbG9yOjpUUkFOU0ZFUl9VTlNQRUNJRklFRCwgQ29sb3JBc3BlY3RzOjpUcmFuc2ZlclVuc3BlY2lmaWVkIH0sCisgICAgeyBDMkNvbG9yOjpUUkFOU0ZFUl9MSU5FQVIsICAgICAgQ29sb3JBc3BlY3RzOjpUcmFuc2ZlckxpbmVhciB9LAorICAgIHsgQzJDb2xvcjo6VFJBTlNGRVJfU1JHQiwgICAgICAgIENvbG9yQXNwZWN0czo6VHJhbnNmZXJTUkdCIH0sCisgICAgeyBDMkNvbG9yOjpUUkFOU0ZFUl8xNzBNLCAgICAgICAgQ29sb3JBc3BlY3RzOjpUcmFuc2ZlclNNUFRFMTcwTSB9LAorICAgIHsgQzJDb2xvcjo6VFJBTlNGRVJfR0FNTUEyMiwgICAgIENvbG9yQXNwZWN0czo6VHJhbnNmZXJHYW1tYTIyIH0sCisgICAgeyBDMkNvbG9yOjpUUkFOU0ZFUl9HQU1NQTI4LCAgICAgQ29sb3JBc3BlY3RzOjpUcmFuc2ZlckdhbW1hMjggfSwKKyAgICB7IEMyQ29sb3I6OlRSQU5TRkVSX1NUMjA4NCwgICAgICBDb2xvckFzcGVjdHM6OlRyYW5zZmVyU1QyMDg0IH0sCisgICAgeyBDMkNvbG9yOjpUUkFOU0ZFUl9ITEcsICAgICAgICAgQ29sb3JBc3BlY3RzOjpUcmFuc2ZlckhMRyB9LAorICAgIHsgQzJDb2xvcjo6VFJBTlNGRVJfMjQwTSwgICAgICAgIENvbG9yQXNwZWN0czo6VHJhbnNmZXJTTVBURTI0ME0gfSwKKyAgICB7IEMyQ29sb3I6OlRSQU5TRkVSX1hWWUNDLCAgICAgICBDb2xvckFzcGVjdHM6OlRyYW5zZmVyWHZZQ0MgfSwKKyAgICB7IEMyQ29sb3I6OlRSQU5TRkVSX0JUMTM2MSwgICAgICBDb2xvckFzcGVjdHM6OlRyYW5zZmVyQlQxMzYxIH0sCisgICAgeyBDMkNvbG9yOjpUUkFOU0ZFUl9TVDQyOCwgICAgICAgQ29sb3JBc3BlY3RzOjpUcmFuc2ZlclNUNDI4IH0sCisgICAgeyBDMkNvbG9yOjpUUkFOU0ZFUl9PVEhFUiwgICAgICAgQ29sb3JBc3BlY3RzOjpUcmFuc2Zlck90aGVyIH0sCit9OworCitBTG9va3VwPEMyQ29uZmlnOjpsZXZlbF90LCBpbnQzMl90PiBzRG9sYnlWaXNpb25MZXZlbHMgPSB7CisgICAgeyBDMkNvbmZpZzo6TEVWRUxfRFZfTUFJTl9IRF8yNCwgIERvbGJ5VmlzaW9uTGV2ZWxIZDI0IH0sCisgICAgeyBDMkNvbmZpZzo6TEVWRUxfRFZfTUFJTl9IRF8zMCwgIERvbGJ5VmlzaW9uTGV2ZWxIZDMwIH0sCisgICAgeyBDMkNvbmZpZzo6TEVWRUxfRFZfTUFJTl9GSERfMjQsIERvbGJ5VmlzaW9uTGV2ZWxGaGQyNCB9LAorICAgIHsgQzJDb25maWc6OkxFVkVMX0RWX01BSU5fRkhEXzMwLCBEb2xieVZpc2lvbkxldmVsRmhkMzAgfSwKKyAgICB7IEMyQ29uZmlnOjpMRVZFTF9EVl9NQUlOX0ZIRF82MCwgRG9sYnlWaXNpb25MZXZlbEZoZDYwIH0sCisgICAgeyBDMkNvbmZpZzo6TEVWRUxfRFZfTUFJTl9VSERfMjQsIERvbGJ5VmlzaW9uTGV2ZWxVaGQyNCB9LAorICAgIHsgQzJDb25maWc6OkxFVkVMX0RWX01BSU5fVUhEXzMwLCBEb2xieVZpc2lvbkxldmVsVWhkMzAgfSwKKyAgICB7IEMyQ29uZmlnOjpMRVZFTF9EVl9NQUlOX1VIRF80OCwgRG9sYnlWaXNpb25MZXZlbFVoZDQ4IH0sCisgICAgeyBDMkNvbmZpZzo6TEVWRUxfRFZfTUFJTl9VSERfNjAsIERvbGJ5VmlzaW9uTGV2ZWxVaGQ2MCB9LAorCisgICAgLy8gaGlnaCB0aWVycyBhcmUgbm90IHlldCBzdXBwb3J0ZWQgb24gYW5kcm9pZCwgZm9yIG5vdyBtYXAgdGhlbSB0byBtYWluIHRpZXIKKyAgICB7IEMyQ29uZmlnOjpMRVZFTF9EVl9ISUdIX0hEXzI0LCAgRG9sYnlWaXNpb25MZXZlbEhkMjQgfSwKKyAgICB7IEMyQ29uZmlnOjpMRVZFTF9EVl9ISUdIX0hEXzMwLCAgRG9sYnlWaXNpb25MZXZlbEhkMzAgfSwKKyAgICB7IEMyQ29uZmlnOjpMRVZFTF9EVl9ISUdIX0ZIRF8yNCwgRG9sYnlWaXNpb25MZXZlbEZoZDI0IH0sCisgICAgeyBDMkNvbmZpZzo6TEVWRUxfRFZfSElHSF9GSERfMzAsIERvbGJ5VmlzaW9uTGV2ZWxGaGQzMCB9LAorICAgIHsgQzJDb25maWc6OkxFVkVMX0RWX0hJR0hfRkhEXzYwLCBEb2xieVZpc2lvbkxldmVsRmhkNjAgfSwKKyAgICB7IEMyQ29uZmlnOjpMRVZFTF9EVl9ISUdIX1VIRF8yNCwgRG9sYnlWaXNpb25MZXZlbFVoZDI0IH0sCisgICAgeyBDMkNvbmZpZzo6TEVWRUxfRFZfSElHSF9VSERfMzAsIERvbGJ5VmlzaW9uTGV2ZWxVaGQzMCB9LAorICAgIHsgQzJDb25maWc6OkxFVkVMX0RWX0hJR0hfVUhEXzQ4LCBEb2xieVZpc2lvbkxldmVsVWhkNDggfSwKKyAgICB7IEMyQ29uZmlnOjpMRVZFTF9EVl9ISUdIX1VIRF82MCwgRG9sYnlWaXNpb25MZXZlbFVoZDYwIH0sCit9OworCitBTG9va3VwPEMyQ29uZmlnOjpwcm9maWxlX3QsIGludDMyX3Q+IHNEb2xieVZpc2lvblByb2ZpbGVzID0geworICAgIHsgQzJDb25maWc6OlBST0ZJTEVfRFZfQVZfUEVSLCBEb2xieVZpc2lvblByb2ZpbGVEdmF2UGVyIH0sCisgICAgeyBDMkNvbmZpZzo6UFJPRklMRV9EVl9BVl9QRU4sIERvbGJ5VmlzaW9uUHJvZmlsZUR2YXZQZW4gfSwKKyAgICB7IEMyQ29uZmlnOjpQUk9GSUxFX0RWX0hFX0RFUiwgRG9sYnlWaXNpb25Qcm9maWxlRHZoZURlciB9LAorICAgIHsgQzJDb25maWc6OlBST0ZJTEVfRFZfSEVfREVOLCBEb2xieVZpc2lvblByb2ZpbGVEdmhlRGVuIH0sCisgICAgeyBDMkNvbmZpZzo6UFJPRklMRV9EVl9IRV8wNCwgRG9sYnlWaXNpb25Qcm9maWxlRHZoZUR0ciB9LAorICAgIHsgQzJDb25maWc6OlBST0ZJTEVfRFZfSEVfMDUsIERvbGJ5VmlzaW9uUHJvZmlsZUR2aGVTdG4gfSwKKyAgICB7IEMyQ29uZmlnOjpQUk9GSUxFX0RWX0hFX0RUSCwgRG9sYnlWaXNpb25Qcm9maWxlRHZoZUR0aCB9LAorICAgIHsgQzJDb25maWc6OlBST0ZJTEVfRFZfSEVfMDcsIERvbGJ5VmlzaW9uUHJvZmlsZUR2aGVEdGIgfSwKKyAgICB7IEMyQ29uZmlnOjpQUk9GSUxFX0RWX0hFXzA4LCBEb2xieVZpc2lvblByb2ZpbGVEdmhlU3QgfSwKKyAgICB7IEMyQ29uZmlnOjpQUk9GSUxFX0RWX0FWXzA5LCBEb2xieVZpc2lvblByb2ZpbGVEdmF2U2UgfSwKK307CisKK0FMb29rdXA8QzJDb25maWc6OmxldmVsX3QsIGludDMyX3Q+IHNIMjYzTGV2ZWxzID0geworICAgIHsgQzJDb25maWc6OkxFVkVMX0gyNjNfMTAsIEgyNjNMZXZlbDEwIH0sCisgICAgeyBDMkNvbmZpZzo6TEVWRUxfSDI2M18yMCwgSDI2M0xldmVsMjAgfSwKKyAgICB7IEMyQ29uZmlnOjpMRVZFTF9IMjYzXzMwLCBIMjYzTGV2ZWwzMCB9LAorICAgIHsgQzJDb25maWc6OkxFVkVMX0gyNjNfNDAsIEgyNjNMZXZlbDQwIH0sCisgICAgeyBDMkNvbmZpZzo6TEVWRUxfSDI2M180NSwgSDI2M0xldmVsNDUgfSwKKyAgICB7IEMyQ29uZmlnOjpMRVZFTF9IMjYzXzUwLCBIMjYzTGV2ZWw1MCB9LAorICAgIHsgQzJDb25maWc6OkxFVkVMX0gyNjNfNjAsIEgyNjNMZXZlbDYwIH0sCisgICAgeyBDMkNvbmZpZzo6TEVWRUxfSDI2M183MCwgSDI2M0xldmVsNzAgfSwKK307CisKK0FMb29rdXA8QzJDb25maWc6OnByb2ZpbGVfdCwgaW50MzJfdD4gc0gyNjNQcm9maWxlcyA9IHsKKyAgICB7IEMyQ29uZmlnOjpQUk9GSUxFX0gyNjNfQkFTRUxJTkUsICAgICAgICAgIEgyNjNQcm9maWxlQmFzZWxpbmUgfSwKKyAgICB7IEMyQ29uZmlnOjpQUk9GSUxFX0gyNjNfSDMyMCwgICAgICAgICAgICAgIEgyNjNQcm9maWxlSDMyMENvZGluZyB9LAorICAgIHsgQzJDb25maWc6OlBST0ZJTEVfSDI2M19WMUJDLCAgICAgICAgICAgICAgSDI2M1Byb2ZpbGVCYWNrd2FyZENvbXBhdGlibGUgfSwKKyAgICB7IEMyQ29uZmlnOjpQUk9GSUxFX0gyNjNfSVNXVjIsICAgICAgICAgICAgIEgyNjNQcm9maWxlSVNXVjIgfSwKKyAgICB7IEMyQ29uZmlnOjpQUk9GSUxFX0gyNjNfSVNXVjMsICAgICAgICAgICAgIEgyNjNQcm9maWxlSVNXVjMgfSwKKyAgICB7IEMyQ29uZmlnOjpQUk9GSUxFX0gyNjNfSElHSF9DT01QUkVTU0lPTiwgIEgyNjNQcm9maWxlSGlnaENvbXByZXNzaW9uIH0sCisgICAgeyBDMkNvbmZpZzo6UFJPRklMRV9IMjYzX0lOVEVSTkVULCAgICAgICAgICBIMjYzUHJvZmlsZUludGVybmV0IH0sCisgICAgeyBDMkNvbmZpZzo6UFJPRklMRV9IMjYzX0lOVEVSTEFDRSwgICAgICAgICBIMjYzUHJvZmlsZUludGVybGFjZSB9LAorICAgIHsgQzJDb25maWc6OlBST0ZJTEVfSDI2M19ISUdIX0xBVEVOQ1ksICAgICAgSDI2M1Byb2ZpbGVIaWdoTGF0ZW5jeSB9LAorfTsKKworQUxvb2t1cDxDMkNvbmZpZzo6bGV2ZWxfdCwgaW50MzJfdD4gc0hldmNMZXZlbHMgPSB7CisgICAgeyBDMkNvbmZpZzo6TEVWRUxfSEVWQ19NQUlOXzEsICAgICAgSEVWQ01haW5UaWVyTGV2ZWwxIH0sCisgICAgeyBDMkNvbmZpZzo6TEVWRUxfSEVWQ19NQUlOXzIsICAgICAgSEVWQ01haW5UaWVyTGV2ZWwyIH0sCisgICAgeyBDMkNvbmZpZzo6TEVWRUxfSEVWQ19NQUlOXzJfMSwgICAgSEVWQ01haW5UaWVyTGV2ZWwyMSB9LAorICAgIHsgQzJDb25maWc6OkxFVkVMX0hFVkNfTUFJTl8zLCAgICAgIEhFVkNNYWluVGllckxldmVsMyB9LAorICAgIHsgQzJDb25maWc6OkxFVkVMX0hFVkNfTUFJTl8zXzEsICAgIEhFVkNNYWluVGllckxldmVsMzEgfSwKKyAgICB7IEMyQ29uZmlnOjpMRVZFTF9IRVZDX01BSU5fNCwgICAgICBIRVZDTWFpblRpZXJMZXZlbDQgfSwKKyAgICB7IEMyQ29uZmlnOjpMRVZFTF9IRVZDX01BSU5fNF8xLCAgICBIRVZDTWFpblRpZXJMZXZlbDQxIH0sCisgICAgeyBDMkNvbmZpZzo6TEVWRUxfSEVWQ19NQUlOXzUsICAgICAgSEVWQ01haW5UaWVyTGV2ZWw1IH0sCisgICAgeyBDMkNvbmZpZzo6TEVWRUxfSEVWQ19NQUlOXzVfMSwgICAgSEVWQ01haW5UaWVyTGV2ZWw1MSB9LAorICAgIHsgQzJDb25maWc6OkxFVkVMX0hFVkNfTUFJTl81XzIsICAgIEhFVkNNYWluVGllckxldmVsNTIgfSwKKyAgICB7IEMyQ29uZmlnOjpMRVZFTF9IRVZDX01BSU5fNiwgICAgICBIRVZDTWFpblRpZXJMZXZlbDYgfSwKKyAgICB7IEMyQ29uZmlnOjpMRVZFTF9IRVZDX01BSU5fNl8xLCAgICBIRVZDTWFpblRpZXJMZXZlbDYxIH0sCisgICAgeyBDMkNvbmZpZzo6TEVWRUxfSEVWQ19NQUlOXzZfMiwgICAgSEVWQ01haW5UaWVyTGV2ZWw2MiB9LAorCisgICAgeyBDMkNvbmZpZzo6TEVWRUxfSEVWQ19ISUdIXzQsICAgICAgSEVWQ0hpZ2hUaWVyTGV2ZWw0IH0sCisgICAgeyBDMkNvbmZpZzo6TEVWRUxfSEVWQ19ISUdIXzRfMSwgICAgSEVWQ0hpZ2hUaWVyTGV2ZWw0MSB9LAorICAgIHsgQzJDb25maWc6OkxFVkVMX0hFVkNfSElHSF81LCAgICAgIEhFVkNIaWdoVGllckxldmVsNSB9LAorICAgIHsgQzJDb25maWc6OkxFVkVMX0hFVkNfSElHSF81XzEsICAgIEhFVkNIaWdoVGllckxldmVsNTEgfSwKKyAgICB7IEMyQ29uZmlnOjpMRVZFTF9IRVZDX0hJR0hfNV8yLCAgICBIRVZDSGlnaFRpZXJMZXZlbDUyIH0sCisgICAgeyBDMkNvbmZpZzo6TEVWRUxfSEVWQ19ISUdIXzYsICAgICAgSEVWQ0hpZ2hUaWVyTGV2ZWw2IH0sCisgICAgeyBDMkNvbmZpZzo6TEVWRUxfSEVWQ19ISUdIXzZfMSwgICAgSEVWQ0hpZ2hUaWVyTGV2ZWw2MSB9LAorICAgIHsgQzJDb25maWc6OkxFVkVMX0hFVkNfSElHSF82XzIsICAgIEhFVkNIaWdoVGllckxldmVsNjIgfSwKKworICAgIC8vIG1hcCBoaWdoIHRpZXIgbGV2ZWxzIGJlbG93IDQgdG8gbWFpbiB0aWVyCisgICAgeyBDMkNvbmZpZzo6TEVWRUxfSEVWQ19NQUlOXzEsICAgICAgSEVWQ0hpZ2hUaWVyTGV2ZWwxIH0sCisgICAgeyBDMkNvbmZpZzo6TEVWRUxfSEVWQ19NQUlOXzIsICAgICAgSEVWQ0hpZ2hUaWVyTGV2ZWwyIH0sCisgICAgeyBDMkNvbmZpZzo6TEVWRUxfSEVWQ19NQUlOXzJfMSwgICAgSEVWQ0hpZ2hUaWVyTGV2ZWwyMSB9LAorICAgIHsgQzJDb25maWc6OkxFVkVMX0hFVkNfTUFJTl8zLCAgICAgIEhFVkNIaWdoVGllckxldmVsMyB9LAorICAgIHsgQzJDb25maWc6OkxFVkVMX0hFVkNfTUFJTl8zXzEsICAgIEhFVkNIaWdoVGllckxldmVsMzEgfSwKK307CisKK0FMb29rdXA8QzJDb25maWc6OnByb2ZpbGVfdCwgaW50MzJfdD4gc0hldmNQcm9maWxlcyA9IHsKKyAgICB7IEMyQ29uZmlnOjpQUk9GSUxFX0hFVkNfTUFJTiwgSEVWQ1Byb2ZpbGVNYWluIH0sCisgICAgeyBDMkNvbmZpZzo6UFJPRklMRV9IRVZDX01BSU5fMTAsIEhFVkNQcm9maWxlTWFpbjEwIH0sCisgICAgeyBDMkNvbmZpZzo6UFJPRklMRV9IRVZDX01BSU5fU1RJTEwsIEhFVkNQcm9maWxlTWFpblN0aWxsIH0sCisgICAgeyBDMkNvbmZpZzo6UFJPRklMRV9IRVZDX01BSU5fSU5UUkEsIEhFVkNQcm9maWxlTWFpbiB9LAorICAgIHsgQzJDb25maWc6OlBST0ZJTEVfSEVWQ19NQUlOXzEwX0lOVFJBLCBIRVZDUHJvZmlsZU1haW4xMCB9LAorfTsKKworQUxvb2t1cDxDMkNvbmZpZzo6bGV2ZWxfdCwgaW50MzJfdD4gc01wZWcyTGV2ZWxzID0geworICAgIHsgQzJDb25maWc6OkxFVkVMX01QMlZfTE9XLCAgICAgICAgIE1QRUcyTGV2ZWxMTCB9LAorICAgIHsgQzJDb25maWc6OkxFVkVMX01QMlZfTUFJTiwgICAgICAgIE1QRUcyTGV2ZWxNTCB9LAorICAgIHsgQzJDb25maWc6OkxFVkVMX01QMlZfSElHSF8xNDQwLCAgIE1QRUcyTGV2ZWxIMTQgfSwKKyAgICB7IEMyQ29uZmlnOjpMRVZFTF9NUDJWX0hJR0gsICAgICAgICBNUEVHMkxldmVsSEwgfSwKKyAgICB7IEMyQ29uZmlnOjpMRVZFTF9NUDJWX0hJR0hQLCAgICAgICBNUEVHMkxldmVsSFAgfSwKK307CisKK0FMb29rdXA8QzJDb25maWc6OnByb2ZpbGVfdCwgaW50MzJfdD4gc01wZWcyUHJvZmlsZXMgPSB7CisgICAgeyBDMkNvbmZpZzo6UFJPRklMRV9NUDJWX1NJTVBMRSwgICAgICAgICAgICAgICAgTVBFRzJQcm9maWxlU2ltcGxlIH0sCisgICAgeyBDMkNvbmZpZzo6UFJPRklMRV9NUDJWX01BSU4sICAgICAgICAgICAgICAgICAgTVBFRzJQcm9maWxlTWFpbiB9LAorICAgIHsgQzJDb25maWc6OlBST0ZJTEVfTVAyVl9TTlJfU0NBTEFCTEUsICAgICAgICAgIE1QRUcyUHJvZmlsZVNOUiB9LAorICAgIHsgQzJDb25maWc6OlBST0ZJTEVfTVAyVl9TUEFUSUFMTFlfU0NBTEFCTEUsICAgIE1QRUcyUHJvZmlsZVNwYXRpYWwgfSwKKyAgICB7IEMyQ29uZmlnOjpQUk9GSUxFX01QMlZfSElHSCwgICAgICAgICAgICAgICAgICBNUEVHMlByb2ZpbGVIaWdoIH0sCisgICAgeyBDMkNvbmZpZzo6UFJPRklMRV9NUDJWXzQyMiwgICAgICAgICAgICAgICAgICAgTVBFRzJQcm9maWxlNDIyIH0sCit9OworCitBTG9va3VwPEMyQ29uZmlnOjpsZXZlbF90LCBpbnQzMl90PiBzTXBlZzRMZXZlbHMgPSB7CisgICAgeyBDMkNvbmZpZzo6TEVWRUxfTVA0Vl8wLCAgIE1QRUc0TGV2ZWwwIH0sCisgICAgeyBDMkNvbmZpZzo6TEVWRUxfTVA0Vl8wQiwgIE1QRUc0TGV2ZWwwYiB9LAorICAgIHsgQzJDb25maWc6OkxFVkVMX01QNFZfMSwgICBNUEVHNExldmVsMSB9LAorICAgIHsgQzJDb25maWc6OkxFVkVMX01QNFZfMiwgICBNUEVHNExldmVsMiB9LAorICAgIHsgQzJDb25maWc6OkxFVkVMX01QNFZfMywgICBNUEVHNExldmVsMyB9LAorICAgIHsgQzJDb25maWc6OkxFVkVMX01QNFZfM0IsICBNUEVHNExldmVsM2IgfSwKKyAgICB7IEMyQ29uZmlnOjpMRVZFTF9NUDRWXzQsICAgTVBFRzRMZXZlbDQgfSwKKyAgICB7IEMyQ29uZmlnOjpMRVZFTF9NUDRWXzRBLCAgTVBFRzRMZXZlbDRhIH0sCisgICAgeyBDMkNvbmZpZzo6TEVWRUxfTVA0Vl81LCAgIE1QRUc0TGV2ZWw1IH0sCisgICAgeyBDMkNvbmZpZzo6TEVWRUxfTVA0Vl82LCAgIE1QRUc0TGV2ZWw2IH0sCit9OworCitBTG9va3VwPEMyQ29uZmlnOjpwcm9maWxlX3QsIGludDMyX3Q+IHNNcGVnNFByb2ZpbGVzID0geworICAgIHsgQzJDb25maWc6OlBST0ZJTEVfTVA0Vl9TSU1QTEUsICAgICAgICAgICAgTVBFRzRQcm9maWxlU2ltcGxlIH0sCisgICAgeyBDMkNvbmZpZzo6UFJPRklMRV9NUDRWX1NJTVBMRV9TQ0FMQUJMRSwgICBNUEVHNFByb2ZpbGVTaW1wbGVTY2FsYWJsZSB9LAorICAgIHsgQzJDb25maWc6OlBST0ZJTEVfTVA0Vl9DT1JFLCAgICAgICAgICAgICAgTVBFRzRQcm9maWxlQ29yZSB9LAorICAgIHsgQzJDb25maWc6OlBST0ZJTEVfTVA0Vl9NQUlOLCAgICAgICAgICAgICAgTVBFRzRQcm9maWxlTWFpbiB9LAorICAgIHsgQzJDb25maWc6OlBST0ZJTEVfTVA0Vl9OQklULCAgICAgICAgICAgICAgTVBFRzRQcm9maWxlTmJpdCB9LAorICAgIHsgQzJDb25maWc6OlBST0ZJTEVfTVA0Vl9BUlRTLCAgICAgICAgICAgICAgTVBFRzRQcm9maWxlQWR2YW5jZWRSZWFsVGltZSB9LAorICAgIHsgQzJDb25maWc6OlBST0ZJTEVfTVA0Vl9DT1JFX1NDQUxBQkxFLCAgICAgTVBFRzRQcm9maWxlQ29yZVNjYWxhYmxlIH0sCisgICAgeyBDMkNvbmZpZzo6UFJPRklMRV9NUDRWX0FDRSwgICAgICAgICAgICAgICBNUEVHNFByb2ZpbGVBZHZhbmNlZENvZGluZyB9LAorICAgIHsgQzJDb25maWc6OlBST0ZJTEVfTVA0Vl9BRFZBTkNFRF9DT1JFLCAgICAgTVBFRzRQcm9maWxlQWR2YW5jZWRDb3JlIH0sCisgICAgeyBDMkNvbmZpZzo6UFJPRklMRV9NUDRWX0FEVkFOQ0VEX1NJTVBMRSwgICBNUEVHNFByb2ZpbGVBZHZhbmNlZFNpbXBsZSB9LAorfTsKKworQUxvb2t1cDxDMkNvbmZpZzo6cGNtX2VuY29kaW5nX3QsIGludDMyX3Q+IHNQY21FbmNvZGluZ3MgPSB7CisgICAgeyBDMkNvbmZpZzo6UENNXzgsIGtBdWRpb0VuY29kaW5nUGNtOGJpdCB9LAorICAgIHsgQzJDb25maWc6OlBDTV8xNiwga0F1ZGlvRW5jb2RpbmdQY20xNmJpdCB9LAorICAgIHsgQzJDb25maWc6OlBDTV9GTE9BVCwga0F1ZGlvRW5jb2RpbmdQY21GbG9hdCB9LAorfTsKKworQUxvb2t1cDxDMkNvbmZpZzo6bGV2ZWxfdCwgaW50MzJfdD4gc1ZwOUxldmVscyA9IHsKKyAgICB7IEMyQ29uZmlnOjpMRVZFTF9WUDlfMSwgICAgVlA5TGV2ZWwxIH0sCisgICAgeyBDMkNvbmZpZzo6TEVWRUxfVlA5XzFfMSwgIFZQOUxldmVsMTEgfSwKKyAgICB7IEMyQ29uZmlnOjpMRVZFTF9WUDlfMiwgICAgVlA5TGV2ZWwyIH0sCisgICAgeyBDMkNvbmZpZzo6TEVWRUxfVlA5XzJfMSwgIFZQOUxldmVsMjEgfSwKKyAgICB7IEMyQ29uZmlnOjpMRVZFTF9WUDlfMywgICAgVlA5TGV2ZWwzIH0sCisgICAgeyBDMkNvbmZpZzo6TEVWRUxfVlA5XzNfMSwgIFZQOUxldmVsMzEgfSwKKyAgICB7IEMyQ29uZmlnOjpMRVZFTF9WUDlfNCwgICAgVlA5TGV2ZWw0IH0sCisgICAgeyBDMkNvbmZpZzo6TEVWRUxfVlA5XzRfMSwgIFZQOUxldmVsNDEgfSwKKyAgICB7IEMyQ29uZmlnOjpMRVZFTF9WUDlfNSwgICAgVlA5TGV2ZWw1IH0sCisgICAgeyBDMkNvbmZpZzo6TEVWRUxfVlA5XzVfMSwgIFZQOUxldmVsNTEgfSwKKyAgICB7IEMyQ29uZmlnOjpMRVZFTF9WUDlfNV8yLCAgVlA5TGV2ZWw1MiB9LAorICAgIHsgQzJDb25maWc6OkxFVkVMX1ZQOV82LCAgICBWUDlMZXZlbDYgfSwKKyAgICB7IEMyQ29uZmlnOjpMRVZFTF9WUDlfNl8xLCAgVlA5TGV2ZWw2MSB9LAorICAgIHsgQzJDb25maWc6OkxFVkVMX1ZQOV82XzIsICBWUDlMZXZlbDYyIH0sCit9OworCitBTG9va3VwPEMyQ29uZmlnOjpwcm9maWxlX3QsIGludDMyX3Q+IHNWcDlQcm9maWxlcyA9IHsKKyAgICB7IEMyQ29uZmlnOjpQUk9GSUxFX1ZQOV8wLCBWUDlQcm9maWxlMCB9LAorICAgIHsgQzJDb25maWc6OlBST0ZJTEVfVlA5XzEsIFZQOVByb2ZpbGUxIH0sCisgICAgeyBDMkNvbmZpZzo6UFJPRklMRV9WUDlfMiwgVlA5UHJvZmlsZTIgfSwKKyAgICB7IEMyQ29uZmlnOjpQUk9GSUxFX1ZQOV8zLCBWUDlQcm9maWxlMyB9LAorfTsKKworLyoqCisgKiBBIGhlbHBlciB0aGF0IHBhc3NlcyB0aHJvdWdoIHZlbmRvciBleHRlbnNpb24gcHJvZmlsZSBhbmQgbGV2ZWwgdmFsdWVzLgorICovCitzdHJ1Y3QgUHJvZmlsZUxldmVsTWFwcGVySGVscGVyIDogQzJNYXBwZXI6OlByb2ZpbGVMZXZlbE1hcHBlciB7CisgICAgdmlydHVhbCBib29sIHNpbXBsZU1hcChDMkNvbmZpZzo6bGV2ZWxfdCBmcm9tLCBpbnQzMl90ICp0bykgPSAwOworICAgIHZpcnR1YWwgYm9vbCBzaW1wbGVNYXAoaW50MzJfdCBmcm9tLCBDMkNvbmZpZzo6bGV2ZWxfdCAqdG8pID0gMDsKKyAgICB2aXJ0dWFsIGJvb2wgc2ltcGxlTWFwKEMyQ29uZmlnOjpwcm9maWxlX3QgZnJvbSwgaW50MzJfdCAqdG8pID0gMDsKKyAgICB2aXJ0dWFsIGJvb2wgc2ltcGxlTWFwKGludDMyX3QgZnJvbSwgQzJDb25maWc6OnByb2ZpbGVfdCAqdG8pID0gMDsKKworICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFU+CisgICAgYm9vbCBwYXNzVGhyb3VnaE1hcChUIGZyb20sIFUgKnRvKSB7CisgICAgICAgIC8vIGFsbG93IChhbmQgcGFzcyB0aHJvdWdoKSB2ZW5kb3IgZXh0ZW5zaW9ucworICAgICAgICBpZiAoZnJvbSA+PSAoVClDMl9QUk9GSUxFX0xFVkVMX1ZFTkRPUl9TVEFSVCAmJiBmcm9tIDwgKFQpSU5UMzJfTUFYKSB7CisgICAgICAgICAgICAqdG8gPSAoVSlmcm9tOworICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHNpbXBsZU1hcChmcm9tLCB0byk7CisgICAgfQorCisgICAgdmlydHVhbCBib29sIG1hcExldmVsKEMyQ29uZmlnOjpsZXZlbF90IGZyb20sIGludDMyX3QgKnRvKSB7CisgICAgICAgIHJldHVybiBwYXNzVGhyb3VnaE1hcChmcm9tLCB0byk7CisgICAgfQorCisgICAgdmlydHVhbCBib29sIG1hcExldmVsKGludDMyX3QgZnJvbSwgQzJDb25maWc6OmxldmVsX3QgKnRvKSB7CisgICAgICAgIHJldHVybiBwYXNzVGhyb3VnaE1hcChmcm9tLCB0byk7CisgICAgfQorCisgICAgdmlydHVhbCBib29sIG1hcFByb2ZpbGUoQzJDb25maWc6OnByb2ZpbGVfdCBmcm9tLCBpbnQzMl90ICp0bykgeworICAgICAgICByZXR1cm4gcGFzc1Rocm91Z2hNYXAoZnJvbSwgdG8pOworICAgIH0KKworICAgIHZpcnR1YWwgYm9vbCBtYXBQcm9maWxlKGludDMyX3QgZnJvbSwgQzJDb25maWc6OnByb2ZpbGVfdCAqdG8pIHsKKyAgICAgICAgcmV0dXJuIHBhc3NUaHJvdWdoTWFwKGZyb20sIHRvKTsKKyAgICB9Cit9OworCisvLyBBQUMgb25seSB1c2VzIHByb2ZpbGVzLCBtYXAgYWxsIGxldmVscyB0byB1bnVzZWQgb3IgMAorc3RydWN0IEFhY1Byb2ZpbGVMZXZlbE1hcHBlciA6IFByb2ZpbGVMZXZlbE1hcHBlckhlbHBlciB7CisgICAgdmlydHVhbCBib29sIHNpbXBsZU1hcChDMkNvbmZpZzo6bGV2ZWxfdCwgaW50MzJfdCAqdG8pIHsKKyAgICAgICAgKnRvID0gMDsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorICAgIHZpcnR1YWwgYm9vbCBzaW1wbGVNYXAoaW50MzJfdCwgQzJDb25maWc6OmxldmVsX3QgKnRvKSB7CisgICAgICAgICp0byA9IEMyQ29uZmlnOjpMRVZFTF9VTlVTRUQ7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyAgICB2aXJ0dWFsIGJvb2wgc2ltcGxlTWFwKEMyQ29uZmlnOjpwcm9maWxlX3QgZnJvbSwgaW50MzJfdCAqdG8pIHsKKyAgICAgICAgcmV0dXJuIHNBYWNQcm9maWxlcy5tYXAoZnJvbSwgdG8pOworICAgIH0KKyAgICB2aXJ0dWFsIGJvb2wgc2ltcGxlTWFwKGludDMyX3QgZnJvbSwgQzJDb25maWc6OnByb2ZpbGVfdCAqdG8pIHsKKyAgICAgICAgcmV0dXJuIHNBYWNQcm9maWxlcy5tYXAoZnJvbSwgdG8pOworICAgIH0KK307CisKK3N0cnVjdCBBdmNQcm9maWxlTGV2ZWxNYXBwZXIgOiBQcm9maWxlTGV2ZWxNYXBwZXJIZWxwZXIgeworICAgIHZpcnR1YWwgYm9vbCBzaW1wbGVNYXAoQzJDb25maWc6OmxldmVsX3QgZnJvbSwgaW50MzJfdCAqdG8pIHsKKyAgICAgICAgcmV0dXJuIHNBdmNMZXZlbHMubWFwKGZyb20sIHRvKTsKKyAgICB9CisgICAgdmlydHVhbCBib29sIHNpbXBsZU1hcChpbnQzMl90IGZyb20sIEMyQ29uZmlnOjpsZXZlbF90ICp0bykgeworICAgICAgICByZXR1cm4gc0F2Y0xldmVscy5tYXAoZnJvbSwgdG8pOworICAgIH0KKyAgICB2aXJ0dWFsIGJvb2wgc2ltcGxlTWFwKEMyQ29uZmlnOjpwcm9maWxlX3QgZnJvbSwgaW50MzJfdCAqdG8pIHsKKyAgICAgICAgcmV0dXJuIHNBdmNQcm9maWxlcy5tYXAoZnJvbSwgdG8pOworICAgIH0KKyAgICB2aXJ0dWFsIGJvb2wgc2ltcGxlTWFwKGludDMyX3QgZnJvbSwgQzJDb25maWc6OnByb2ZpbGVfdCAqdG8pIHsKKyAgICAgICAgcmV0dXJuIHNBdmNQcm9maWxlcy5tYXAoZnJvbSwgdG8pOworICAgIH0KK307CisKK3N0cnVjdCBEb2xieVZpc2lvblByb2ZpbGVMZXZlbE1hcHBlciA6IFByb2ZpbGVMZXZlbE1hcHBlckhlbHBlciB7CisgICAgdmlydHVhbCBib29sIHNpbXBsZU1hcChDMkNvbmZpZzo6bGV2ZWxfdCBmcm9tLCBpbnQzMl90ICp0bykgeworICAgICAgICByZXR1cm4gc0RvbGJ5VmlzaW9uTGV2ZWxzLm1hcChmcm9tLCB0byk7CisgICAgfQorICAgIHZpcnR1YWwgYm9vbCBzaW1wbGVNYXAoaW50MzJfdCBmcm9tLCBDMkNvbmZpZzo6bGV2ZWxfdCAqdG8pIHsKKyAgICAgICAgcmV0dXJuIHNEb2xieVZpc2lvbkxldmVscy5tYXAoZnJvbSwgdG8pOworICAgIH0KKyAgICB2aXJ0dWFsIGJvb2wgc2ltcGxlTWFwKEMyQ29uZmlnOjpwcm9maWxlX3QgZnJvbSwgaW50MzJfdCAqdG8pIHsKKyAgICAgICAgcmV0dXJuIHNEb2xieVZpc2lvblByb2ZpbGVzLm1hcChmcm9tLCB0byk7CisgICAgfQorICAgIHZpcnR1YWwgYm9vbCBzaW1wbGVNYXAoaW50MzJfdCBmcm9tLCBDMkNvbmZpZzo6cHJvZmlsZV90ICp0bykgeworICAgICAgICByZXR1cm4gc0RvbGJ5VmlzaW9uUHJvZmlsZXMubWFwKGZyb20sIHRvKTsKKyAgICB9Cit9OworCitzdHJ1Y3QgSDI2M1Byb2ZpbGVMZXZlbE1hcHBlciA6IFByb2ZpbGVMZXZlbE1hcHBlckhlbHBlciB7CisgICAgdmlydHVhbCBib29sIHNpbXBsZU1hcChDMkNvbmZpZzo6bGV2ZWxfdCBmcm9tLCBpbnQzMl90ICp0bykgeworICAgICAgICByZXR1cm4gc0gyNjNMZXZlbHMubWFwKGZyb20sIHRvKTsKKyAgICB9CisgICAgdmlydHVhbCBib29sIHNpbXBsZU1hcChpbnQzMl90IGZyb20sIEMyQ29uZmlnOjpsZXZlbF90ICp0bykgeworICAgICAgICByZXR1cm4gc0gyNjNMZXZlbHMubWFwKGZyb20sIHRvKTsKKyAgICB9CisgICAgdmlydHVhbCBib29sIHNpbXBsZU1hcChDMkNvbmZpZzo6cHJvZmlsZV90IGZyb20sIGludDMyX3QgKnRvKSB7CisgICAgICAgIHJldHVybiBzSDI2M1Byb2ZpbGVzLm1hcChmcm9tLCB0byk7CisgICAgfQorICAgIHZpcnR1YWwgYm9vbCBzaW1wbGVNYXAoaW50MzJfdCBmcm9tLCBDMkNvbmZpZzo6cHJvZmlsZV90ICp0bykgeworICAgICAgICByZXR1cm4gc0gyNjNQcm9maWxlcy5tYXAoZnJvbSwgdG8pOworICAgIH0KK307CisKK3N0cnVjdCBIZXZjUHJvZmlsZUxldmVsTWFwcGVyIDogUHJvZmlsZUxldmVsTWFwcGVySGVscGVyIHsKKyAgICB2aXJ0dWFsIGJvb2wgc2ltcGxlTWFwKEMyQ29uZmlnOjpsZXZlbF90IGZyb20sIGludDMyX3QgKnRvKSB7CisgICAgICAgIHJldHVybiBzSGV2Y0xldmVscy5tYXAoZnJvbSwgdG8pOworICAgIH0KKyAgICB2aXJ0dWFsIGJvb2wgc2ltcGxlTWFwKGludDMyX3QgZnJvbSwgQzJDb25maWc6OmxldmVsX3QgKnRvKSB7CisgICAgICAgIHJldHVybiBzSGV2Y0xldmVscy5tYXAoZnJvbSwgdG8pOworICAgIH0KKyAgICB2aXJ0dWFsIGJvb2wgc2ltcGxlTWFwKEMyQ29uZmlnOjpwcm9maWxlX3QgZnJvbSwgaW50MzJfdCAqdG8pIHsKKyAgICAgICAgcmV0dXJuIHNIZXZjUHJvZmlsZXMubWFwKGZyb20sIHRvKTsKKyAgICB9CisgICAgdmlydHVhbCBib29sIHNpbXBsZU1hcChpbnQzMl90IGZyb20sIEMyQ29uZmlnOjpwcm9maWxlX3QgKnRvKSB7CisgICAgICAgIHJldHVybiBzSGV2Y1Byb2ZpbGVzLm1hcChmcm9tLCB0byk7CisgICAgfQorfTsKKworc3RydWN0IE1wZWcyUHJvZmlsZUxldmVsTWFwcGVyIDogUHJvZmlsZUxldmVsTWFwcGVySGVscGVyIHsKKyAgICB2aXJ0dWFsIGJvb2wgc2ltcGxlTWFwKEMyQ29uZmlnOjpsZXZlbF90IGZyb20sIGludDMyX3QgKnRvKSB7CisgICAgICAgIHJldHVybiBzTXBlZzJMZXZlbHMubWFwKGZyb20sIHRvKTsKKyAgICB9CisgICAgdmlydHVhbCBib29sIHNpbXBsZU1hcChpbnQzMl90IGZyb20sIEMyQ29uZmlnOjpsZXZlbF90ICp0bykgeworICAgICAgICByZXR1cm4gc01wZWcyTGV2ZWxzLm1hcChmcm9tLCB0byk7CisgICAgfQorICAgIHZpcnR1YWwgYm9vbCBzaW1wbGVNYXAoQzJDb25maWc6OnByb2ZpbGVfdCBmcm9tLCBpbnQzMl90ICp0bykgeworICAgICAgICByZXR1cm4gc01wZWcyUHJvZmlsZXMubWFwKGZyb20sIHRvKTsKKyAgICB9CisgICAgdmlydHVhbCBib29sIHNpbXBsZU1hcChpbnQzMl90IGZyb20sIEMyQ29uZmlnOjpwcm9maWxlX3QgKnRvKSB7CisgICAgICAgIHJldHVybiBzTXBlZzJQcm9maWxlcy5tYXAoZnJvbSwgdG8pOworICAgIH0KK307CisKK3N0cnVjdCBNcGVnNFByb2ZpbGVMZXZlbE1hcHBlciA6IFByb2ZpbGVMZXZlbE1hcHBlckhlbHBlciB7CisgICAgdmlydHVhbCBib29sIHNpbXBsZU1hcChDMkNvbmZpZzo6bGV2ZWxfdCBmcm9tLCBpbnQzMl90ICp0bykgeworICAgICAgICByZXR1cm4gc01wZWc0TGV2ZWxzLm1hcChmcm9tLCB0byk7CisgICAgfQorICAgIHZpcnR1YWwgYm9vbCBzaW1wbGVNYXAoaW50MzJfdCBmcm9tLCBDMkNvbmZpZzo6bGV2ZWxfdCAqdG8pIHsKKyAgICAgICAgcmV0dXJuIHNNcGVnNExldmVscy5tYXAoZnJvbSwgdG8pOworICAgIH0KKyAgICB2aXJ0dWFsIGJvb2wgc2ltcGxlTWFwKEMyQ29uZmlnOjpwcm9maWxlX3QgZnJvbSwgaW50MzJfdCAqdG8pIHsKKyAgICAgICAgcmV0dXJuIHNNcGVnNFByb2ZpbGVzLm1hcChmcm9tLCB0byk7CisgICAgfQorICAgIHZpcnR1YWwgYm9vbCBzaW1wbGVNYXAoaW50MzJfdCBmcm9tLCBDMkNvbmZpZzo6cHJvZmlsZV90ICp0bykgeworICAgICAgICByZXR1cm4gc01wZWc0UHJvZmlsZXMubWFwKGZyb20sIHRvKTsKKyAgICB9Cit9OworCisvLyBWUDggaGFzIG5vIHByb2ZpbGVzIGFuZCBsZXZlbHMgaW4gQ29kZWMgMi4wLCBidXQgd2UgdXNlIG1haW4gcHJvZmlsZSBhbmQgbGV2ZWwgMCBpbiBNZWRpYUNvZGVjCisvLyBtYXAgYWxsIHByb2ZpbGVzIGFuZCBsZXZlbHMgdG8gdGhhdC4KK3N0cnVjdCBWcDhQcm9maWxlTGV2ZWxNYXBwZXIgOiBQcm9maWxlTGV2ZWxNYXBwZXJIZWxwZXIgeworICAgIHZpcnR1YWwgYm9vbCBzaW1wbGVNYXAoQzJDb25maWc6OmxldmVsX3QsIGludDMyX3QgKnRvKSB7CisgICAgICAgICp0byA9IFZQOExldmVsX1ZlcnNpb24wOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgdmlydHVhbCBib29sIHNpbXBsZU1hcChpbnQzMl90LCBDMkNvbmZpZzo6bGV2ZWxfdCAqdG8pIHsKKyAgICAgICAgKnRvID0gQzJDb25maWc6OkxFVkVMX1VOVVNFRDsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorICAgIHZpcnR1YWwgYm9vbCBzaW1wbGVNYXAoQzJDb25maWc6OnByb2ZpbGVfdCwgaW50MzJfdCAqdG8pIHsKKyAgICAgICAgKnRvID0gVlA4UHJvZmlsZU1haW47CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyAgICB2aXJ0dWFsIGJvb2wgc2ltcGxlTWFwKGludDMyX3QsIEMyQ29uZmlnOjpwcm9maWxlX3QgKnRvKSB7CisgICAgICAgICp0byA9IEMyQ29uZmlnOjpQUk9GSUxFX1VOVVNFRDsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorfTsKKworc3RydWN0IFZwOVByb2ZpbGVMZXZlbE1hcHBlciA6IFByb2ZpbGVMZXZlbE1hcHBlckhlbHBlciB7CisgICAgdmlydHVhbCBib29sIHNpbXBsZU1hcChDMkNvbmZpZzo6bGV2ZWxfdCBmcm9tLCBpbnQzMl90ICp0bykgeworICAgICAgICByZXR1cm4gc1ZwOUxldmVscy5tYXAoZnJvbSwgdG8pOworICAgIH0KKyAgICB2aXJ0dWFsIGJvb2wgc2ltcGxlTWFwKGludDMyX3QgZnJvbSwgQzJDb25maWc6OmxldmVsX3QgKnRvKSB7CisgICAgICAgIHJldHVybiBzVnA5TGV2ZWxzLm1hcChmcm9tLCB0byk7CisgICAgfQorICAgIHZpcnR1YWwgYm9vbCBzaW1wbGVNYXAoQzJDb25maWc6OnByb2ZpbGVfdCBmcm9tLCBpbnQzMl90ICp0bykgeworICAgICAgICByZXR1cm4gc1ZwOVByb2ZpbGVzLm1hcChmcm9tLCB0byk7CisgICAgfQorICAgIHZpcnR1YWwgYm9vbCBzaW1wbGVNYXAoaW50MzJfdCBmcm9tLCBDMkNvbmZpZzo6cHJvZmlsZV90ICp0bykgeworICAgICAgICByZXR1cm4gc1ZwOVByb2ZpbGVzLm1hcChmcm9tLCB0byk7CisgICAgfQorfTsKKworfSAvLyBuYW1lc3BhY2UKKworLy8gc3RhdGljCitzdGQ6OnNoYXJlZF9wdHI8QzJNYXBwZXI6OlByb2ZpbGVMZXZlbE1hcHBlcj4KK0MyTWFwcGVyOjpHZXRQcm9maWxlTGV2ZWxNYXBwZXIoc3RkOjpzdHJpbmcgbWVkaWFUeXBlKSB7CisgICAgc3RkOjp0cmFuc2Zvcm0obWVkaWFUeXBlLmJlZ2luKCksIG1lZGlhVHlwZS5iZWdpbigpLCBtZWRpYVR5cGUuZW5kKCksIDo6dG9sb3dlcik7CisgICAgaWYgKG1lZGlhVHlwZSA9PSBNSU1FVFlQRV9BVURJT19BQUMpIHsKKyAgICAgICAgcmV0dXJuIHN0ZDo6bWFrZV9zaGFyZWQ8QWFjUHJvZmlsZUxldmVsTWFwcGVyPigpOworICAgIH0gZWxzZSBpZiAobWVkaWFUeXBlID09IE1JTUVUWVBFX1ZJREVPX0FWQykgeworICAgICAgICByZXR1cm4gc3RkOjptYWtlX3NoYXJlZDxBdmNQcm9maWxlTGV2ZWxNYXBwZXI+KCk7CisgICAgfSBlbHNlIGlmIChtZWRpYVR5cGUgPT0gTUlNRVRZUEVfVklERU9fRE9MQllfVklTSU9OKSB7CisgICAgICAgIHJldHVybiBzdGQ6Om1ha2Vfc2hhcmVkPERvbGJ5VmlzaW9uUHJvZmlsZUxldmVsTWFwcGVyPigpOworICAgIH0gZWxzZSBpZiAobWVkaWFUeXBlID09IE1JTUVUWVBFX1ZJREVPX0gyNjMpIHsKKyAgICAgICAgcmV0dXJuIHN0ZDo6bWFrZV9zaGFyZWQ8SDI2M1Byb2ZpbGVMZXZlbE1hcHBlcj4oKTsKKyAgICB9IGVsc2UgaWYgKG1lZGlhVHlwZSA9PSBNSU1FVFlQRV9WSURFT19IRVZDKSB7CisgICAgICAgIHJldHVybiBzdGQ6Om1ha2Vfc2hhcmVkPEhldmNQcm9maWxlTGV2ZWxNYXBwZXI+KCk7CisgICAgfSBlbHNlIGlmIChtZWRpYVR5cGUgPT0gTUlNRVRZUEVfVklERU9fTVBFRzIpIHsKKyAgICAgICAgcmV0dXJuIHN0ZDo6bWFrZV9zaGFyZWQ8TXBlZzJQcm9maWxlTGV2ZWxNYXBwZXI+KCk7CisgICAgfSBlbHNlIGlmIChtZWRpYVR5cGUgPT0gTUlNRVRZUEVfVklERU9fTVBFRzQpIHsKKyAgICAgICAgcmV0dXJuIHN0ZDo6bWFrZV9zaGFyZWQ8TXBlZzRQcm9maWxlTGV2ZWxNYXBwZXI+KCk7CisgICAgfSBlbHNlIGlmIChtZWRpYVR5cGUgPT0gTUlNRVRZUEVfVklERU9fVlA4KSB7CisgICAgICAgIHJldHVybiBzdGQ6Om1ha2Vfc2hhcmVkPFZwOFByb2ZpbGVMZXZlbE1hcHBlcj4oKTsKKyAgICB9IGVsc2UgaWYgKG1lZGlhVHlwZSA9PSBNSU1FVFlQRV9WSURFT19WUDkpIHsKKyAgICAgICAgcmV0dXJuIHN0ZDo6bWFrZV9zaGFyZWQ8VnA5UHJvZmlsZUxldmVsTWFwcGVyPigpOworICAgIH0KKyAgICByZXR1cm4gbnVsbHB0cjsKK30KKworLy8gc3RhdGljCitib29sIEMyTWFwcGVyOjptYXAoQzJDb25maWc6OmJpdHJhdGVfbW9kZV90IGZyb20sIGludDMyX3QgKnRvKSB7CisgICAgcmV0dXJuIHNCaXRyYXRlTW9kZXMubWFwKGZyb20sIHRvKTsKK30KKworLy8gc3RhdGljCitib29sIEMyTWFwcGVyOjptYXAoaW50MzJfdCBmcm9tLCBDMkNvbmZpZzo6Yml0cmF0ZV9tb2RlX3QgKnRvKSB7CisgICAgcmV0dXJuIHNCaXRyYXRlTW9kZXMubWFwKGZyb20sIHRvKTsKK30KKworLy8gc3RhdGljCitib29sIEMyTWFwcGVyOjptYXAoQzJDb25maWc6OnBjbV9lbmNvZGluZ190IGZyb20sIGludDMyX3QgKnRvKSB7CisgICAgcmV0dXJuIHNQY21FbmNvZGluZ3MubWFwKGZyb20sIHRvKTsKK30KKworLy8gc3RhdGljCitib29sIEMyTWFwcGVyOjptYXAoaW50MzJfdCBmcm9tLCBDMkNvbmZpZzo6cGNtX2VuY29kaW5nX3QgKnRvKSB7CisgICAgcmV0dXJuIHNQY21FbmNvZGluZ3MubWFwKGZyb20sIHRvKTsKK30KKworLy8gc3RhdGljCitib29sIEMyTWFwcGVyOjptYXAoQzJDb2xvcjo6cmFuZ2VfdCBmcm9tLCBpbnQzMl90ICp0bykgeworICAgIGJvb2wgcmVzID0gdHJ1ZTsKKyAgICAvLyBtYXAgU0RLIGRlZmluZWQgdmFsdWVzIGRpcmVjdGx5LiBGb3Igb3RoZXIgdmFsdWVzLCB1c2Ugd3JhcHBpbmcgZnJvbSBDb2xvclV0aWxzLgorICAgIGlmICghc0NvbG9yUmFuZ2VzLm1hcChmcm9tLCB0bykpIHsKKyAgICAgICAgQ29sb3JBc3BlY3RzOjpSYW5nZSBzZlJhbmdlOworCisgICAgICAgIC8vIG1hcCBrbm93biBjb25zdGFudHMgYW5kIGtlZXAgdmVuZG9yIGV4dGVuc2lvbnMuIGFsbCBvdGhlciB2YWx1ZXMgYXJlIG1hcHBlZCB0byAnT3RoZXInCisgICAgICAgIGlmICghc0NvbG9yUmFuZ2VzU2YubWFwKGZyb20sICZzZlJhbmdlKSkgeworICAgICAgICAgICAgLy8gdXNlIHN0YXRpYyBjYXN0IGFuZCBlbnN1cmUgaXQgaXMgaW4gdGhlIGV4dGVuc2lvbiByYW5nZQorICAgICAgICAgICAgaWYgKGZyb20gPCBDMkNvbG9yOjpSQU5HRV9WRU5ET1JfU1RBUlQgfHwgZnJvbSA+IEMyQ29sb3I6OlJBTkdFX09USEVSKSB7CisgICAgICAgICAgICAgICAgc2ZSYW5nZSA9IENvbG9yQXNwZWN0czo6UmFuZ2VPdGhlcjsKKyAgICAgICAgICAgICAgICByZXMgPSBmYWxzZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgICp0byA9IENvbG9yVXRpbHM6OndyYXBDb2xvckFzcGVjdHNJbnRvQ29sb3JSYW5nZShzZlJhbmdlKTsKKyAgICB9CisgICAgcmV0dXJuIHJlczsKK30KKworLy8gc3RhdGljCitib29sIEMyTWFwcGVyOjptYXAoaW50MzJfdCBmcm9tLCBDMkNvbG9yOjpyYW5nZV90ICp0bykgeworICAgIC8vIG1hcCBTREsgZGVmaW5lZCB2YWx1ZXMgZGlyZWN0bHkuIEZvciBvdGhlciB2YWx1ZXMsIHVzZSB3cmFwcGluZyBmcm9tIENvbG9yVXRpbHMuCisgICAgaWYgKCFzQ29sb3JSYW5nZXMubWFwKGZyb20sIHRvKSkgeworICAgICAgICBDb2xvckFzcGVjdHM6OlJhbmdlIHNmUmFuZ2U7CisgICAgICAgICh2b2lkKUNvbG9yVXRpbHM6OnVud3JhcENvbG9yQXNwZWN0c0Zyb21Db2xvclJhbmdlKGZyb20sICZzZlJhbmdlKTsKKworICAgICAgICAvLyBtYXAga25vd24gY29uc3RhbnRzIGFuZCBrZWVwIHZlbmRvciBleHRlbnNpb25zLiBhbGwgb3RoZXIgdmFsdWVzIGFyZSBtYXBwZWQgdG8gJ090aGVyJworICAgICAgICBpZiAoIXNDb2xvclJhbmdlc1NmLm1hcChzZlJhbmdlLCB0bykpIHsKKyAgICAgICAgICAgIC8vIHVzZSBzdGF0aWMgY2FzdCBhbmQgZW5zdXJlIGl0IGlzIGluIHRoZSBleHRlbnNpb24gcmFuZ2UKKyAgICAgICAgICAgICp0byA9IChDMkNvbG9yOjpyYW5nZV90KXNmUmFuZ2U7CisgICAgICAgICAgICBpZiAoKnRvIDwgQzJDb2xvcjo6UkFOR0VfVkVORE9SX1NUQVJUIHx8ICp0byA+IEMyQ29sb3I6OlJBTkdFX09USEVSKSB7CisgICAgICAgICAgICAgICAgKnRvID0gQzJDb2xvcjo6UkFOR0VfT1RIRVI7CisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCisgICAgcmV0dXJuIHRydWU7Cit9CisKKy8vIHN0YXRpYworYm9vbCBDMk1hcHBlcjo6bWFwKEMyQ29sb3I6OnJhbmdlX3QgZnJvbSwgQ29sb3JBc3BlY3RzOjpSYW5nZSAqdG8pIHsKKyAgICByZXR1cm4gc0NvbG9yUmFuZ2VzU2YubWFwKGZyb20sIHRvKTsKK30KKworLy8gc3RhdGljCitib29sIEMyTWFwcGVyOjptYXAoQ29sb3JBc3BlY3RzOjpSYW5nZSBmcm9tLCBDMkNvbG9yOjpyYW5nZV90ICp0bykgeworICAgIHJldHVybiBzQ29sb3JSYW5nZXNTZi5tYXAoZnJvbSwgdG8pOworfQorCisvLyBzdGF0aWMKK2Jvb2wgQzJNYXBwZXI6Om1hcChDMkNvbG9yOjpwcmltYXJpZXNfdCBwcmltYXJpZXMsIEMyQ29sb3I6Om1hdHJpeF90IG1hdHJpeCwgaW50MzJfdCAqc3RhbmRhcmQpIHsKKyAgICBDb2xvckFzcGVjdHM6OlByaW1hcmllcyBzZlByaW1hcmllczsKKyAgICBDb2xvckFzcGVjdHM6Ok1hdHJpeENvZWZmcyBzZk1hdHJpeDsKKyAgICBib29sIHJlcyA9IHRydWU7CisKKyAgICAvLyBtYXAga25vd24gY29uc3RhbnRzIGFuZCBrZWVwIHZlbmRvciBleHRlbnNpb25zLiBhbGwgb3RoZXIgdmFsdWVzIGFyZSBtYXBwZWQgdG8gJ090aGVyJworICAgIGlmICghc0NvbG9yUHJpbWFyaWVzU2YubWFwKHByaW1hcmllcywgJnNmUHJpbWFyaWVzKSkgeworICAgICAgICAvLyBlbnN1cmUgaXQgaXMgaW4gdGhlIGV4dGVuc2lvbiByYW5nZSBhbmQgdXNlIHN0YXRpYyBjYXN0CisgICAgICAgIGlmIChwcmltYXJpZXMgPCBDMkNvbG9yOjpQUklNQVJJRVNfVkVORE9SX1NUQVJUIHx8IHByaW1hcmllcyA+IEMyQ29sb3I6OlBSSU1BUklFU19PVEhFUikgeworICAgICAgICAgICAgLy8gdW5kZWZpbmVkIG5vbi1leHRlbnNpb24gdmFsdWVzIG1hcCB0byAnT3RoZXInCisgICAgICAgICAgICBzZlByaW1hcmllcyA9IENvbG9yQXNwZWN0czo6UHJpbWFyaWVzT3RoZXI7CisgICAgICAgICAgICByZXMgPSBmYWxzZTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHNmUHJpbWFyaWVzID0gKENvbG9yQXNwZWN0czo6UHJpbWFyaWVzKXByaW1hcmllczsKKyAgICAgICAgfQorICAgIH0KKworICAgIGlmICghc0NvbG9yTWF0cmljZXNTZi5tYXAobWF0cml4LCAmc2ZNYXRyaXgpKSB7CisgICAgICAgIC8vIHVzZSBzdGF0aWMgY2FzdCBhbmQgZW5zdXJlIGl0IGlzIGluIHRoZSBleHRlbnNpb24gcmFuZ2UKKyAgICAgICAgaWYgKG1hdHJpeCA8IEMyQ29sb3I6Ok1BVFJJWF9WRU5ET1JfU1RBUlQgfHwgbWF0cml4ID4gQzJDb2xvcjo6TUFUUklYX09USEVSKSB7CisgICAgICAgICAgICAvLyB1bmRlZmluZWQgbm9uLWV4dGVuc2lvbiB2YWx1ZXMgbWFwIHRvICdPdGhlcicKKyAgICAgICAgICAgIHNmTWF0cml4ID0gQ29sb3JBc3BlY3RzOjpNYXRyaXhPdGhlcjsKKyAgICAgICAgICAgIHJlcyA9IGZhbHNlOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgc2ZNYXRyaXggPSAoQ29sb3JBc3BlY3RzOjpNYXRyaXhDb2VmZnMpbWF0cml4OworICAgICAgICB9CisgICAgfQorCisgICAgKnN0YW5kYXJkID0gQ29sb3JVdGlsczo6d3JhcENvbG9yQXNwZWN0c0ludG9Db2xvclN0YW5kYXJkKHNmUHJpbWFyaWVzLCBzZk1hdHJpeCk7CisKKyAgICByZXR1cm4gcmVzOworfQorCisvLyBzdGF0aWMKK2Jvb2wgQzJNYXBwZXI6Om1hcChpbnQzMl90IHN0YW5kYXJkLCBDMkNvbG9yOjpwcmltYXJpZXNfdCAqcHJpbWFyaWVzLCBDMkNvbG9yOjptYXRyaXhfdCAqbWF0cml4KSB7CisgICAgLy8gZmlyc3QgbWFwIHRvIHN0YWdlZnJpZ2h0IGZvdW5kYXRpb24gYXNwZWN0cyA9PiB0aGVzZSBhY3R1YWxseSBtYXAgbmVhcmx5IDE6MSB0bworICAgIC8vIENvZGVjIDIuMCBhc3BlY3RzCisgICAgQ29sb3JBc3BlY3RzOjpQcmltYXJpZXMgc2ZQcmltYXJpZXM7CisgICAgQ29sb3JBc3BlY3RzOjpNYXRyaXhDb2VmZnMgc2ZNYXRyaXg7CisgICAgYm9vbCByZXMgPSB0cnVlOworICAgICh2b2lkKUNvbG9yVXRpbHM6OnVud3JhcENvbG9yQXNwZWN0c0Zyb21Db2xvclN0YW5kYXJkKHN0YW5kYXJkLCAmc2ZQcmltYXJpZXMsICZzZk1hdHJpeCk7CisKKyAgICAvLyBtYXAga25vd24gY29uc3RhbnRzIGFuZCBrZWVwIHZlbmRvciBleHRlbnNpb25zLiBhbGwgb3RoZXIgdmFsdWVzIGFyZSBtYXBwZWQgdG8gJ090aGVyJworICAgIGlmICghc0NvbG9yUHJpbWFyaWVzU2YubWFwKHNmUHJpbWFyaWVzLCBwcmltYXJpZXMpKSB7CisgICAgICAgIC8vIHVzZSBzdGF0aWMgY2FzdCBhbmQgZW5zdXJlIGl0IGlzIGluIHRoZSBleHRlbnNpb24gcmFuZ2UKKyAgICAgICAgKnByaW1hcmllcyA9IChDMkNvbG9yOjpwcmltYXJpZXNfdClzZlByaW1hcmllczsKKyAgICAgICAgaWYgKCpwcmltYXJpZXMgPCBDMkNvbG9yOjpQUklNQVJJRVNfVkVORE9SX1NUQVJUIHx8ICpwcmltYXJpZXMgPiBDMkNvbG9yOjpQUklNQVJJRVNfT1RIRVIpIHsKKyAgICAgICAgICAgICpwcmltYXJpZXMgPSBDMkNvbG9yOjpQUklNQVJJRVNfT1RIRVI7CisgICAgICAgICAgICByZXMgPSBmYWxzZTsKKyAgICAgICAgfQorICAgIH0KKworICAgIGlmICghc0NvbG9yTWF0cmljZXNTZi5tYXAoc2ZNYXRyaXgsIG1hdHJpeCkpIHsKKyAgICAgICAgLy8gdXNlIHN0YXRpYyBjYXN0IGFuZCBlbnN1cmUgaXQgaXMgaW4gdGhlIGV4dGVuc2lvbiByYW5nZQorICAgICAgICAqbWF0cml4ID0gKEMyQ29sb3I6Om1hdHJpeF90KXNmTWF0cml4OworICAgICAgICBpZiAoKm1hdHJpeCA8IEMyQ29sb3I6Ok1BVFJJWF9WRU5ET1JfU1RBUlQgfHwgKm1hdHJpeCA+IEMyQ29sb3I6Ok1BVFJJWF9PVEhFUikgeworICAgICAgICAgICAgKm1hdHJpeCA9IEMyQ29sb3I6Ok1BVFJJWF9PVEhFUjsKKyAgICAgICAgICAgIHJlcyA9IGZhbHNlOworICAgICAgICB9CisgICAgfQorCisgICAgcmV0dXJuIHJlczsKK30KKworLy8gc3RhdGljCitib29sIEMyTWFwcGVyOjptYXAoQzJDb2xvcjo6cHJpbWFyaWVzX3QgZnJvbSwgQ29sb3JBc3BlY3RzOjpQcmltYXJpZXMgKnRvKSB7CisgICAgcmV0dXJuIHNDb2xvclByaW1hcmllc1NmLm1hcChmcm9tLCB0byk7Cit9CisKKy8vIHN0YXRpYworYm9vbCBDMk1hcHBlcjo6bWFwKENvbG9yQXNwZWN0czo6UHJpbWFyaWVzIGZyb20sIEMyQ29sb3I6OnByaW1hcmllc190ICp0bykgeworICAgIHJldHVybiBzQ29sb3JQcmltYXJpZXNTZi5tYXAoZnJvbSwgdG8pOworfQorCisvLyBzdGF0aWMKK2Jvb2wgQzJNYXBwZXI6Om1hcChDMkNvbG9yOjptYXRyaXhfdCBmcm9tLCBDb2xvckFzcGVjdHM6Ok1hdHJpeENvZWZmcyAqdG8pIHsKKyAgICByZXR1cm4gc0NvbG9yTWF0cmljZXNTZi5tYXAoZnJvbSwgdG8pOworfQorCisvLyBzdGF0aWMKK2Jvb2wgQzJNYXBwZXI6Om1hcChDb2xvckFzcGVjdHM6Ok1hdHJpeENvZWZmcyBmcm9tLCBDMkNvbG9yOjptYXRyaXhfdCAqdG8pIHsKKyAgICByZXR1cm4gc0NvbG9yTWF0cmljZXNTZi5tYXAoZnJvbSwgdG8pOworfQorCisvLyBzdGF0aWMKK2Jvb2wgQzJNYXBwZXI6Om1hcChDMkNvbG9yOjp0cmFuc2Zlcl90IGZyb20sIGludDMyX3QgKnRvKSB7CisgICAgYm9vbCByZXMgPSB0cnVlOworICAgIC8vIG1hcCBTREsgZGVmaW5lZCB2YWx1ZXMgZGlyZWN0bHkuIEZvciBvdGhlciB2YWx1ZXMsIHVzZSB3cmFwcGluZyBmcm9tIENvbG9yVXRpbHMuCisgICAgaWYgKCFzQ29sb3JUcmFuc2ZlcnMubWFwKGZyb20sIHRvKSkgeworICAgICAgICBDb2xvckFzcGVjdHM6OlRyYW5zZmVyIHNmVHJhbnNmZXI7CisKKyAgICAgICAgLy8gbWFwIGtub3duIGNvbnN0YW50cyBhbmQga2VlcCB2ZW5kb3IgZXh0ZW5zaW9ucy4gYWxsIG90aGVyIHZhbHVlcyBhcmUgbWFwcGVkIHRvICdPdGhlcicKKyAgICAgICAgaWYgKCFzQ29sb3JUcmFuc2ZlcnNTZi5tYXAoZnJvbSwgJnNmVHJhbnNmZXIpKSB7CisgICAgICAgICAgICAvLyB1c2Ugc3RhdGljIGNhc3QgYW5kIGVuc3VyZSBpdCBpcyBpbiB0aGUgZXh0ZW5zaW9uIHJhbmdlCisgICAgICAgICAgICBpZiAoZnJvbSA8IEMyQ29sb3I6OlRSQU5TRkVSX1ZFTkRPUl9TVEFSVCB8fCBmcm9tID4gQzJDb2xvcjo6VFJBTlNGRVJfT1RIRVIpIHsKKyAgICAgICAgICAgICAgICBzZlRyYW5zZmVyID0gQ29sb3JBc3BlY3RzOjpUcmFuc2Zlck90aGVyOworICAgICAgICAgICAgICAgIHJlcyA9IGZhbHNlOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgKnRvID0gQ29sb3JVdGlsczo6d3JhcENvbG9yQXNwZWN0c0ludG9Db2xvclRyYW5zZmVyKHNmVHJhbnNmZXIpOworICAgIH0KKyAgICByZXR1cm4gcmVzOworfQorCisvLyBzdGF0aWMKK2Jvb2wgQzJNYXBwZXI6Om1hcChpbnQzMl90IGZyb20sIEMyQ29sb3I6OnRyYW5zZmVyX3QgKnRvKSB7CisgICAgLy8gbWFwIFNESyBkZWZpbmVkIHZhbHVlcyBkaXJlY3RseS4gRm9yIG90aGVyIHZhbHVlcywgdXNlIHdyYXBwaW5nIGZyb20gQ29sb3JVdGlscy4KKyAgICBpZiAoIXNDb2xvclRyYW5zZmVycy5tYXAoZnJvbSwgdG8pKSB7CisgICAgICAgIENvbG9yQXNwZWN0czo6VHJhbnNmZXIgc2ZUcmFuc2ZlcjsKKyAgICAgICAgKHZvaWQpQ29sb3JVdGlsczo6dW53cmFwQ29sb3JBc3BlY3RzRnJvbUNvbG9yVHJhbnNmZXIoZnJvbSwgJnNmVHJhbnNmZXIpOworCisgICAgICAgIC8vIG1hcCBrbm93biBjb25zdGFudHMgYW5kIGtlZXAgdmVuZG9yIGV4dGVuc2lvbnMuIGFsbCBvdGhlciB2YWx1ZXMgYXJlIG1hcHBlZCB0byAnT3RoZXInCisgICAgICAgIGlmICghc0NvbG9yVHJhbnNmZXJzU2YubWFwKHNmVHJhbnNmZXIsIHRvKSkgeworICAgICAgICAgICAgLy8gdXNlIHN0YXRpYyBjYXN0IGFuZCBlbnN1cmUgaXQgaXMgaW4gdGhlIGV4dGVuc2lvbiByYW5nZQorICAgICAgICAgICAgKnRvID0gKEMyQ29sb3I6OnRyYW5zZmVyX3Qpc2ZUcmFuc2ZlcjsKKyAgICAgICAgICAgIGlmICgqdG8gPCBDMkNvbG9yOjpUUkFOU0ZFUl9WRU5ET1JfU1RBUlQgfHwgKnRvID4gQzJDb2xvcjo6VFJBTlNGRVJfT1RIRVIpIHsKKyAgICAgICAgICAgICAgICAqdG8gPSBDMkNvbG9yOjpUUkFOU0ZFUl9PVEhFUjsKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworLy8gc3RhdGljCitib29sIEMyTWFwcGVyOjptYXAoCisgICAgICAgIEMyQ29sb3I6OnJhbmdlX3QgcmFuZ2UsIEMyQ29sb3I6OnByaW1hcmllc190IHByaW1hcmllcywKKyAgICAgICAgQzJDb2xvcjo6bWF0cml4X3QgbWF0cml4LCBDMkNvbG9yOjp0cmFuc2Zlcl90IHRyYW5zZmVyLCB1aW50MzJfdCAqZGF0YVNwYWNlKSB7CisjaWYgMAorICAgIC8vIHB1cmUgcmVpbXBsZW1lbnRhdGlvbgorICAgICpkYXRhU3BhY2UgPSBIQUxfREFUQVNQQUNFX1VOS05PV047IC8vIHRoaXMgaXMgMAorCisgICAgc3dpdGNoIChyYW5nZSkgeworICAgICAgICBjYXNlIEMyQ29sb3I6OlJBTkdFX0ZVTEw6ICAgICpkYXRhU3BhY2UgfD0gSEFMX0RBVEFTUEFDRV9SQU5HRV9GVUxMOyAgICBicmVhazsKKyAgICAgICAgY2FzZSBDMkNvbG9yOjpSQU5HRV9MSU1JVEVEOiAqZGF0YVNwYWNlIHw9IEhBTF9EQVRBU1BBQ0VfUkFOR0VfTElNSVRFRDsgYnJlYWs7CisgICAgICAgIGRlZmF1bHQ6IGJyZWFrOworICAgIH0KKworICAgIHN3aXRjaCAodHJhbnNmZXIpIHsKKyAgICAgICAgY2FzZSBDMkNvbG9yOjpUUkFOU0ZFUl9MSU5FQVI6ICAqZGF0YVNwYWNlIHw9IEhBTF9EQVRBU1BBQ0VfVFJBTlNGRVJfTElORUFSOyAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgQzJDb2xvcjo6VFJBTlNGRVJfU1JHQjogICAgKmRhdGFTcGFjZSB8PSBIQUxfREFUQVNQQUNFX1RSQU5TRkVSX1NSR0I7ICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEMyQ29sb3I6OlRSQU5TRkVSXzE3ME06ICAgICpkYXRhU3BhY2UgfD0gSEFMX0RBVEFTUEFDRV9UUkFOU0ZFUl9TTVBURV8xNzBNOyBicmVhazsKKyAgICAgICAgY2FzZSBDMkNvbG9yOjpUUkFOU0ZFUl9HQU1NQTIyOiAqZGF0YVNwYWNlIHw9IEhBTF9EQVRBU1BBQ0VfVFJBTlNGRVJfR0FNTUEyXzI7ICAgYnJlYWs7CisgICAgICAgIGNhc2UgQzJDb2xvcjo6VFJBTlNGRVJfR0FNTUEyODogKmRhdGFTcGFjZSB8PSBIQUxfREFUQVNQQUNFX1RSQU5TRkVSX0dBTU1BMl84OyAgIGJyZWFrOworICAgICAgICBjYXNlIEMyQ29sb3I6OlRSQU5TRkVSX1NUMjA4NDogICpkYXRhU3BhY2UgfD0gSEFMX0RBVEFTUEFDRV9UUkFOU0ZFUl9TVDIwODQ7ICAgICBicmVhazsKKyAgICAgICAgY2FzZSBDMkNvbG9yOjpUUkFOU0ZFUl9ITEc6ICAgICAqZGF0YVNwYWNlIHw9IEhBTF9EQVRBU1BBQ0VfVFJBTlNGRVJfSExHOyAgICAgICAgYnJlYWs7CisgICAgICAgIGRlZmF1bHQ6IGJyZWFrOworICAgIH0KKworICAgIHN3aXRjaCAocHJpbWFyaWVzKSB7CisgICAgICAgIGNhc2UgQzJDb2xvcjo6UFJJTUFSSUVTX0JUNjAxXzUyNToKKyAgICAgICAgICAgICpkYXRhU3BhY2UgfD0gKG1hdHJpeCA9PSBDMkNvbG9yOjpNQVRSSVhfU01QVEUyNDBNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfHwgbWF0cml4ID09IEMyQ29sb3I6Ok1BVFJJWF9CVDcwOSkKKyAgICAgICAgICAgICAgICAgICAgPyBIQUxfREFUQVNQQUNFX1NUQU5EQVJEX0JUNjAxXzUyNV9VTkFESlVTVEVECisgICAgICAgICAgICAgICAgICAgIDogSEFMX0RBVEFTUEFDRV9TVEFOREFSRF9CVDYwMV81MjU7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBDMkNvbG9yOjpQUklNQVJJRVNfQlQ2MDFfNjI1OgorICAgICAgICAgICAgKmRhdGFTcGFjZSB8PSAobWF0cml4ID09IEMyQ29sb3I6Ok1BVFJJWF9TTVBURTI0ME0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB8fCBtYXRyaXggPT0gQzJDb2xvcjo6TUFUUklYX0JUNzA5KQorICAgICAgICAgICAgICAgICAgICA/IEhBTF9EQVRBU1BBQ0VfU1RBTkRBUkRfQlQ2MDFfNjI1X1VOQURKVVNURUQKKyAgICAgICAgICAgICAgICAgICAgOiBIQUxfREFUQVNQQUNFX1NUQU5EQVJEX0JUNjAxXzYyNTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEMyQ29sb3I6OlBSSU1BUklFU19CVDIwMjA6CisgICAgICAgICAgICAqZGF0YVNwYWNlIHw9IChtYXRyaXggPT0gQzJDb2xvcjo6TUFUUklYX0JUMjAyMENPTlNUQU5UCisgICAgICAgICAgICAgICAgICAgID8gSEFMX0RBVEFTUEFDRV9TVEFOREFSRF9CVDIwMjBfQ09OU1RBTlRfTFVNSU5BTkNFCisgICAgICAgICAgICAgICAgICAgIDogSEFMX0RBVEFTUEFDRV9TVEFOREFSRF9CVDIwMjApOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgQzJDb2xvcjo6UFJJTUFSSUVTX0JUNDcwX006CisgICAgICAgICAgICAqZGF0YVNwYWNlIHw9IEhBTF9EQVRBU1BBQ0VfU1RBTkRBUkRfQlQ0NzBNOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgQzJDb2xvcjo6UFJJTUFSSUVTX0JUNzA5OgorICAgICAgICAgICAgKmRhdGFTcGFjZSB8PSBIQUxfREFUQVNQQUNFX1NUQU5EQVJEX0JUNzA5OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGRlZmF1bHQ6IGJyZWFrOworICAgIH0KKyNlbHNlCisgICAgLy8gZm9yIG5vdyB1c2UgbGVnYWN5IGltcGxlbWVudGF0aW9uCisgICAgQ29sb3JBc3BlY3RzIGFzcGVjdHM7CisgICAgaWYgKCFzQ29sb3JSYW5nZXNTZi5tYXAocmFuZ2UsICZhc3BlY3RzLm1SYW5nZSkpIHsKKyAgICAgICAgYXNwZWN0cy5tUmFuZ2UgPSBDb2xvckFzcGVjdHM6OlJhbmdlVW5zcGVjaWZpZWQ7CisgICAgfQorICAgIGlmICghc0NvbG9yUHJpbWFyaWVzU2YubWFwKHByaW1hcmllcywgJmFzcGVjdHMubVByaW1hcmllcykpIHsKKyAgICAgICAgYXNwZWN0cy5tUHJpbWFyaWVzID0gQ29sb3JBc3BlY3RzOjpQcmltYXJpZXNVbnNwZWNpZmllZDsKKyAgICB9CisgICAgaWYgKCFzQ29sb3JNYXRyaWNlc1NmLm1hcChtYXRyaXgsICZhc3BlY3RzLm1NYXRyaXhDb2VmZnMpKSB7CisgICAgICAgIGFzcGVjdHMubU1hdHJpeENvZWZmcyA9IENvbG9yQXNwZWN0czo6TWF0cml4VW5zcGVjaWZpZWQ7CisgICAgfQorICAgIGlmICghc0NvbG9yVHJhbnNmZXJzU2YubWFwKHRyYW5zZmVyLCAmYXNwZWN0cy5tVHJhbnNmZXIpKSB7CisgICAgICAgIGFzcGVjdHMubVRyYW5zZmVyID0gQ29sb3JBc3BlY3RzOjpUcmFuc2ZlclVuc3BlY2lmaWVkOworICAgIH0KKyAgICAqZGF0YVNwYWNlID0gQ29sb3JVdGlsczo6Z2V0RGF0YVNwYWNlRm9yQ29sb3JBc3BlY3RzKGFzcGVjdHMsIHRydWUgLyogbWF5RXhwYW5kICovKTsKKyNlbmRpZgorICAgIHJldHVybiB0cnVlOworfQorCisvLyBzdGF0aWMKK2Jvb2wgQzJNYXBwZXI6Om1hcChDMkNvbG9yOjp0cmFuc2Zlcl90IGZyb20sIENvbG9yQXNwZWN0czo6VHJhbnNmZXIgKnRvKSB7CisgICAgcmV0dXJuIHNDb2xvclRyYW5zZmVyc1NmLm1hcChmcm9tLCB0byk7Cit9CisKKy8vIHN0YXRpYworYm9vbCBDMk1hcHBlcjo6bWFwKENvbG9yQXNwZWN0czo6VHJhbnNmZXIgZnJvbSwgQzJDb2xvcjo6dHJhbnNmZXJfdCAqdG8pIHsKKyAgICByZXR1cm4gc0NvbG9yVHJhbnNmZXJzU2YubWFwKGZyb20sIHRvKTsKK30KZGlmZiAtLWdpdCBhL21lZGlhL2NvZGVjMi9zZnBsdWdpbi91dGlscy9Db2RlYzJNYXBwZXIuaCBiL21lZGlhL2NvZGVjMi9zZnBsdWdpbi91dGlscy9Db2RlYzJNYXBwZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xZWViOTJlCi0tLSAvZGV2L251bGwKKysrIGIvbWVkaWEvY29kZWMyL3NmcGx1Z2luL3V0aWxzL0NvZGVjMk1hcHBlci5oCkBAIC0wLDAgKzEsNzggQEAKKy8qCisgKiBDb3B5cmlnaHQgMjAxOCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KKworI2lmbmRlZiBBTkRST0lEX0NPREVDMl9NQVBQRVJfSF8KKyNkZWZpbmUgQU5EUk9JRF9DT0RFQzJfTUFQUEVSX0hfCisKKyNpbmNsdWRlIDxDMkNvbmZpZy5oPgorCisjaW5jbHVkZSA8bWVkaWEvc3RhZ2VmcmlnaHQvZm91bmRhdGlvbi9Db2xvclV0aWxzLmg+CisKKyNpbmNsdWRlIDxtZW1vcnk+CisKK25hbWVzcGFjZSBhbmRyb2lkIHsKKworICAgIC8qKgorICAgICAqIFV0aWxpdHkgY2xhc3MgdG8gbWFwIENvZGVjIDIuMCB2YWx1ZXMgdG8gYW5kcm9pZCB2YWx1ZXMuCisgICAgICovCisgICAgc3RydWN0IEMyTWFwcGVyIHsKKyAgICAgICAgc3RydWN0IFByb2ZpbGVMZXZlbE1hcHBlciB7CisgICAgICAgICAgICB2aXJ0dWFsIGJvb2wgbWFwUHJvZmlsZShDMkNvbmZpZzo6cHJvZmlsZV90LCBpbnQzMl90KikgPSAwOworICAgICAgICAgICAgdmlydHVhbCBib29sIG1hcFByb2ZpbGUoaW50MzJfdCwgQzJDb25maWc6OnByb2ZpbGVfdCopID0gMDsKKyAgICAgICAgICAgIHZpcnR1YWwgYm9vbCBtYXBMZXZlbChDMkNvbmZpZzo6bGV2ZWxfdCwgaW50MzJfdCopID0gMDsKKyAgICAgICAgICAgIHZpcnR1YWwgYm9vbCBtYXBMZXZlbChpbnQzMl90LCBDMkNvbmZpZzo6bGV2ZWxfdCopID0gMDsKKyAgICAgICAgICAgIHZpcnR1YWwgflByb2ZpbGVMZXZlbE1hcHBlcigpID0gZGVmYXVsdDsKKyAgICAgICAgfTsKKworICAgICAgICBzdGF0aWMgc3RkOjpzaGFyZWRfcHRyPFByb2ZpbGVMZXZlbE1hcHBlcj4KKyAgICAgICAgR2V0UHJvZmlsZUxldmVsTWFwcGVyKHN0ZDo6c3RyaW5nIG1lZGlhVHlwZSk7CisKKyAgICAgICAgLy8gY29udmVydCBiZXR3ZWVuIGJpdHJhdGVzCisgICAgICAgIHN0YXRpYyBib29sIG1hcChDMkNvbmZpZzo6Yml0cmF0ZV9tb2RlX3QsIGludDMyX3QqKTsKKyAgICAgICAgc3RhdGljIGJvb2wgbWFwKGludDMyX3QsIEMyQ29uZmlnOjpiaXRyYXRlX21vZGVfdCopOworCisgICAgICAgIC8vIGNvbnZlcnQgYmV0d2VlbiBwY20gZW5jb2RpbmdzCisgICAgICAgIHN0YXRpYyBib29sIG1hcChDMkNvbmZpZzo6cGNtX2VuY29kaW5nX3QsIGludDMyX3QqKTsKKyAgICAgICAgc3RhdGljIGJvb2wgbWFwKGludDMyX3QsIEMyQ29uZmlnOjpwY21fZW5jb2RpbmdfdCopOworCisgICAgICAgIC8vIGNvbnZlcnQgYmV0d2VlbiBwaWN0dXJlIHR5cGVzCisgICAgICAgIHN0YXRpYyBib29sIG1hcChDMkNvbmZpZzo6cGljdHVyZV90eXBlX3QsIGludDMyX3QqKTsKKyAgICAgICAgc3RhdGljIGJvb2wgbWFwKGludDMyX3QsIEMyQ29uZmlnOjpwaWN0dXJlX3R5cGVfdCopOworCisgICAgICAgIC8vIGNvbnZlcnQgYmV0d2VlbiBjb2xvciBhc3BlY3RzCisgICAgICAgIHN0YXRpYyBib29sIG1hcChDMkNvbG9yOjpyYW5nZV90LCBpbnQzMl90Kik7CisgICAgICAgIHN0YXRpYyBib29sIG1hcChpbnQzMl90LCBDMkNvbG9yOjpyYW5nZV90Kik7CisgICAgICAgIHN0YXRpYyBib29sIG1hcChDMkNvbG9yOjpwcmltYXJpZXNfdCwgQzJDb2xvcjo6bWF0cml4X3QsIGludDMyX3QqKTsKKyAgICAgICAgc3RhdGljIGJvb2wgbWFwKGludDMyX3QsIEMyQ29sb3I6OnByaW1hcmllc190KiwgQzJDb2xvcjo6bWF0cml4X3QqKTsKKyAgICAgICAgc3RhdGljIGJvb2wgbWFwKEMyQ29sb3I6OnRyYW5zZmVyX3QsIGludDMyX3QqKTsKKyAgICAgICAgc3RhdGljIGJvb2wgbWFwKGludDMyX3QsIEMyQ29sb3I6OnRyYW5zZmVyX3QqKTsKKworICAgICAgICBzdGF0aWMgYm9vbCBtYXAoCisgICAgICAgICAgICAgICAgQzJDb2xvcjo6cmFuZ2VfdCwgQzJDb2xvcjo6cHJpbWFyaWVzX3QsIEMyQ29sb3I6Om1hdHJpeF90LCBDMkNvbG9yOjp0cmFuc2Zlcl90LAorICAgICAgICAgICAgICAgIHVpbnQzMl90ICpkYXRhU3BhY2UpOworCisgICAgICAgIHN0YXRpYyBib29sIG1hcChDMkNvbG9yOjpyYW5nZV90LCBDb2xvckFzcGVjdHM6OlJhbmdlKik7CisgICAgICAgIHN0YXRpYyBib29sIG1hcChDb2xvckFzcGVjdHM6OlJhbmdlLCBDMkNvbG9yOjpyYW5nZV90Kik7CisgICAgICAgIHN0YXRpYyBib29sIG1hcChDMkNvbG9yOjpwcmltYXJpZXNfdCwgQ29sb3JBc3BlY3RzOjpQcmltYXJpZXMqKTsKKyAgICAgICAgc3RhdGljIGJvb2wgbWFwKENvbG9yQXNwZWN0czo6UHJpbWFyaWVzLCBDMkNvbG9yOjpwcmltYXJpZXNfdCopOworICAgICAgICBzdGF0aWMgYm9vbCBtYXAoQzJDb2xvcjo6bWF0cml4X3QsIENvbG9yQXNwZWN0czo6TWF0cml4Q29lZmZzKik7CisgICAgICAgIHN0YXRpYyBib29sIG1hcChDb2xvckFzcGVjdHM6Ok1hdHJpeENvZWZmcywgQzJDb2xvcjo6bWF0cml4X3QqKTsKKyAgICAgICAgc3RhdGljIGJvb2wgbWFwKEMyQ29sb3I6OnRyYW5zZmVyX3QsIENvbG9yQXNwZWN0czo6VHJhbnNmZXIqKTsKKyAgICAgICAgc3RhdGljIGJvb2wgbWFwKENvbG9yQXNwZWN0czo6VHJhbnNmZXIsIEMyQ29sb3I6OnRyYW5zZmVyX3QqKTsKKyAgICB9OworfQorCisjZW5kaWYgIC8vIEFORFJPSURfQ09ERUMyX01BUFBFUl9IXwpkaWZmIC0tZ2l0IGEvbWVkaWEvY29kZWMyL3Rlc3RzL0FuZHJvaWQuYnAgYi9tZWRpYS9jb2RlYzIvdGVzdHMvQW5kcm9pZC5icApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mY2U2ZTIxCi0tLSAvZGV2L251bGwKKysrIGIvbWVkaWEvY29kZWMyL3Rlc3RzL0FuZHJvaWQuYnAKQEAgLTAsMCArMSw3OSBAQAorY2NfdGVzdCB7CisgICAgbmFtZTogImNvZGVjMl9jb3JlX3BhcmFtX3Rlc3QiLAorCisgICAgc3JjczogWworICAgICAgICAiQzJQYXJhbV90ZXN0LmNwcCIsCisgICAgXSwKKworICAgIGluY2x1ZGVfZGlyczogWworICAgICAgICAiZnJhbWV3b3Jrcy9hdi9tZWRpYS9jb2RlYzIvdm5kay9pbmNsdWRlIiwKKyAgICBdLAorCisgICAgaGVhZGVyX2xpYnM6IFsKKyAgICAgICAgImxpYmNvZGVjMl9oZWFkZXJzIiwKKyAgICBdLAorCisgICAgLy8gcGFyYW0gdGVzdHMgbXVzdCBub3QgZGVwZW5kIG9uIGFueSBjb2RlYzIgbGlicmFyaWVzIGFzIGFsbCBwYXJhbXMgc2hvdWxkIGJlIHRlbXBsYXRlZAorICAgIHNoYXJlZF9saWJzOiBbCisgICAgXSwKKworICAgIHN0YXRpY19saWJzOiBbCisgICAgXSwKKworICAgIGNmbGFnczogWworICAgICAgICAiLVdlcnJvciIsCisgICAgICAgICItV2FsbCIsCisgICAgXSwKK30KKworY2NfdGVzdCB7CisgICAgbmFtZTogImNvZGVjMl92bmRrX3Rlc3QiLAorCisgICAgc3JjczogWworICAgICAgICAiQzJfdGVzdC5jcHAiLAorICAgICAgICAiQzJTYW1wbGVDb21wb25lbnRfdGVzdC5jcHAiLAorICAgICAgICAiQzJVdGlsVGVzdC5jcHAiLAorICAgICAgICAidm5kay9DMkJ1ZmZlclRlc3QuY3BwIiwKKyAgICBdLAorCisgICAgaW5jbHVkZV9kaXJzOiBbCisgICAgXSwKKworICAgIHNoYXJlZF9saWJzOiBbCisgICAgICAgICJsaWJjb2RlYzIiLAorICAgICAgICAibGliY29kZWMyX3ZuZGsiLAorICAgICAgICAibGliY3V0aWxzIiwKKyAgICAgICAgImxpYmxvZyIsCisgICAgICAgICJsaWJ1dGlscyIsCisgICAgXSwKKworICAgIGNmbGFnczogWworICAgICAgICAiLVdlcnJvciIsCisgICAgICAgICItV2FsbCIsCisgICAgXSwKK30KKworY2NfdGVzdCB7CisgICAgbmFtZTogImNvZGVjMl92bmRrX2ludGVyZmFjZV90ZXN0IiwKKworICAgIHNyY3M6IFsKKyAgICAgICAgIkMyQ29tcG9uZW50SW50ZXJmYWNlX3Rlc3QuY3BwIiwKKyAgICBdLAorCisgICAgaGVhZGVyX2xpYnM6IFsKKyAgICAgICAgIm1lZGlhX3BsdWdpbl9oZWFkZXJzIiwKKyAgICBdLAorCisgICAgc2hhcmVkX2xpYnM6IFsKKyAgICAgICAgImxpYmN1dGlscyIsCisgICAgICAgICJsaWJsb2ciLAorICAgICAgICAibGliY29kZWMyIiwKKyAgICAgICAgImxpYmNvZGVjMl92bmRrIiwKKyAgICAgICAgImxpYnV0aWxzIiwKKyAgICBdLAorCisgICAgY2ZsYWdzOiBbCisgICAgICAgICItV2Vycm9yIiwKKyAgICAgICAgIi1XYWxsIiwKKyAgICBdLAorfQpkaWZmIC0tZ2l0IGEvbWVkaWEvY29kZWMyL3Rlc3RzL0MyQ29tcG9uZW50SW50ZXJmYWNlX3Rlc3QuY3BwIGIvbWVkaWEvY29kZWMyL3Rlc3RzL0MyQ29tcG9uZW50SW50ZXJmYWNlX3Rlc3QuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU5MDc5NjQKLS0tIC9kZXYvbnVsbAorKysgYi9tZWRpYS9jb2RlYzIvdGVzdHMvQzJDb21wb25lbnRJbnRlcmZhY2VfdGVzdC5jcHAKQEAgLTAsMCArMSw3MDYgQEAKKy8qCisgKiBDb3B5cmlnaHQgMjAxNyBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCisKKyNkZWZpbmUgTE9HX1RBRyAiQzJDb21wb25lbnRJbnRlcmZhY2VfdGVzdCIKKworI2luY2x1ZGUgPGRsZmNuLmg+CisjaW5jbHVkZSA8c3RkaW8uaD4KKworI2luY2x1ZGUgPGd0ZXN0L2d0ZXN0Lmg+CisjaW5jbHVkZSA8dXRpbHMvTG9nLmg+CisKKyNpbmNsdWRlIDxDMkNvbXBvbmVudC5oPgorI2luY2x1ZGUgPEMyQ29uZmlnLmg+CisjaW5jbHVkZSA8dXRpbC9DMkludGVyZmFjZUhlbHBlci5oPgorI2luY2x1ZGUgPEMyUGFyYW0uaD4KKworI2lmICFkZWZpbmVkKFVOVVNFRCkKKyNkZWZpbmUgVU5VU0VEKGV4cHIpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgIGRvIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgKHZvaWQpKGV4cHIpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgfSB3aGlsZSAoMCkKKworI2VuZGlmIC8vIWRlZmluZWQoVU5VU0VEKQorCituYW1lc3BhY2UgYW5kcm9pZCB7CisKK3RlbXBsYXRlIDxjbGFzcyBUPiBzdGQ6OnVuaXF1ZV9wdHI8VD4gYWxsb2NfdW5pcXVlX2NzdHIoY29uc3QgY2hhciAqY3N0cikgeworICAgIHNpemVfdCBsZW4gPSBzdHJsZW4oY3N0cik7CisgICAgc3RkOjp1bmlxdWVfcHRyPFQ+IHB0ciA9IFQ6OkFsbG9jVW5pcXVlKGxlbik7CisgICAgbWVtY3B5KHB0ci0+bS52YWx1ZSwgY3N0ciwgbGVuKTsKKyAgICByZXR1cm4gcHRyOworfQorCitjbGFzcyBDMkNvbXBJbnRmVGVzdCA6IHB1YmxpYyA6OnRlc3Rpbmc6OlRlc3QgeworcHJvdGVjdGVkOgorICAgIEMyQ29tcEludGZUZXN0KCkge30KKyAgICB+QzJDb21wSW50ZlRlc3QoKSBvdmVycmlkZSB7fQorCisgICAgdm9pZCBzZXRDb21wb25lbnQoc3RkOjpzaGFyZWRfcHRyPEMyQ29tcG9uZW50SW50ZXJmYWNlPiBpbnRmKSB7CisgICAgICAgIG1JbnRmID0gaW50ZjsKKyAgICB9CisKKyAgICB2b2lkIHJlc2V0UmVzdWx0cygpIHsKKyAgICAgICAgbUludGYgPSBudWxscHRyOworICAgICAgICBtUGFyYW1SZXN1bHRzLmNsZWFyKCk7CisgICAgfQorCisgICAgdGVtcGxhdGUgPHR5cGVuYW1lIFQ+IHZvaWQgdGVzdFVuc3VwcG9ydGVkUGFyYW0oKTsKKworICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBUPiB2b2lkIHRlc3RTdXBwb3J0ZWRQYXJhbSgpOworCisgICAgLy8gdGVzdFJlYWRPbmx5UGFyYW0oKSBhbmQgdGVzdFdyaXRhYmxlUGFyYW0oKSBhcmUgdGhlIG1haW4gZnVuY3Rpb25zIGZvciB0ZXN0aW5nIGEgcGFyYW1ldGVyLgorICAgIC8vIEEgY2FsbGVyIHNob3VsZCBmaW5kIG91dCBpZiBhIHRlc3RlZCBwYXJhbWV0ZXIgaXMgcmVhZC1vbmx5IG9yIHdyaXRhYmxlIGJlZm9yZSBjYWxsaW5nIHRoZW0KKyAgICAvLyBhbmQgaXQgbXVzdCBjYWxsIG9uZSBvZiB0aGUgY29ycmVzcG9uZGVkIHRoZW0uCisKKyAgICAvLyBJZiBhIHBhcmFtZXRlciBpcyByZWFkLW9ubHkgdGhpcyBpcyBjYWxsZWQuCisgICAgLy8gVGVzdCByZWFkLW9ubHkgcGFyYW1ldGVyIHxwcmVQYXJhbXwuIFRoZSB0ZXN0IGV4cGVjdHMgZmFpbHVyZSB3aGlsZSBjb25maWcoKSB3aXRoIHxuZXdQYXJhbXwsCisgICAgLy8gYW5kIG1ha2Ugc3VyZSB8cHJlUGFyYW18IHN0YXkgdW5jaGFuZ2VkLgorICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBUPgorICAgIHZvaWQgdGVzdFJlYWRPbmx5UGFyYW0oY29uc3QgVCAmcHJlUGFyYW0sIGNvbnN0IFQgJm5ld1BhcmFtKTsKKworICAgIC8vIElmIGEgcGFyYW1ldGVyIGlzIHdyaXRhYmxlIHRoaXMgaXMgY2FsbGVkLgorICAgIC8vIFRlc3Qgb25lIGZpbGVkIHx3cml0YWJsZUZpZWxkfCBmb3IgZ2l2ZW4gd3JpdGFibGUgcGFyYW1ldGVyIHxwYXJhbXwuCisgICAgLy8gfHZhbGlkVmFsdWVzfCBjb250YWlucyBhbGwgdmFsdWVzIG9idGFpbmVkIGZyb20gcXVlcnlTdXBwb3J0ZWRWYWx1ZXMoKSBmb3IgfHdyaXRhYmxlRmllbGR8LgorICAgIC8vIFRoZSB0ZXN0IGNoZWNrcyB2YWxpZGl0eSBmb3IgY29uZmlnKCkgd2l0aCBlYWNoIHZhbHVlLCBhbmQgbWFrZSBzdXJlIHZhbHVlcyBhcmUgY29uZmlnLWVkCisgICAgLy8gYnkgcXVlcnkoKSB0aGVtIG91dC4gfGludmFsaWRWYWx1ZXN8IGNvbnRhaW5zIHNvbWUgdmFsdWVzIHdoaWNoIGFyZSBub3QgaW4gfHZhbGlkVmFsdWVzfC4KKyAgICAvLyBUaGUgdGVzdCBleHBlY3RzIEMyX0JBRF9WQUxVRSB3aGlsZSBjb25maWcoKSB3aXRoIHRoZXNlIHZhbHVlcywKKyAgICAvLyBhbmQgfHBhcmFtfCBzaG91bGQgc3RheSB1bmNoYW5nZWQuCisgICAgdGVtcGxhdGUgPHR5cGVuYW1lIFRQYXJhbSwgdHlwZW5hbWUgVFJlYWxGaWVsZCwgdHlwZW5hbWUgVEZpZWxkPgorICAgIHZvaWQgdGVzdFdyaXRhYmxlUGFyYW0oVFBhcmFtICpjb25zdCBwYXJhbSwgVFJlYWxGaWVsZCAqY29uc3Qgd3JpdGFibGVGaWVsZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0ZDo6dmVjdG9yPFRGaWVsZD4gJnZhbGlkVmFsdWVzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RkOjp2ZWN0b3I8VEZpZWxkPiAmaW52YWxpZFZhbHVlcyk7CisKKyAgICAvLyBUZXN0IGFsbCB0aGUgZGVmaW5lZCBwYXJhbWV0ZXJzIGluIEMyUGFyYW0uaC4KKyAgICB2b2lkIHRlc3RNYWluKHN0ZDo6c2hhcmVkX3B0cjxDMkNvbXBvbmVudEludGVyZmFjZT4gaW50ZiwKKyAgICAgICAgICAgICAgICAgIGNvbnN0IHN0ZDo6c3RyaW5nICZjb21wb25lbnROYW1lKTsKKworICAgIC8vIENoZWNrIHBlcm1pc3Npb24gb2YgcGFyYW1ldGVyIHR5cGUgfFR8IGZvciB0ZXN0aW5nIGludGVyZmFjZS4KKyAgICAvLyBUaGlzIHNob3VsZCBiZSBjYWxsZWQgZmlyc3Qgb2YgdGhlIHRlc3RpbmcgcGVyIHBhcmFtZXRlciB0eXBlLAorICAgIC8vIHRoZXJlZm9yZSBkaWZmZXJlbnQgdGVzdGluZyBwcm9jZXNzIGlzIGFwcGxpZWQgYWNjb3JkaW5nIHRvIHRoZSBwZXJtaXNzaW9uIHR5cGUuCisgICAgdGVtcGxhdGUgPHR5cGVuYW1lIFQ+CisgICAgdm9pZCBjaGVja1BhcmFtUGVybWlzc2lvbigKKyAgICAgICAgICAgIGludCAqY29uc3Qgd3JpdGFibGUsCisgICAgICAgICAgICBjb25zdCBzdGQ6OnZlY3RvcjxzdGQ6OnNoYXJlZF9wdHI8QzJQYXJhbURlc2NyaXB0b3I+PiAmc3VwcG9ydGVkUGFyYW1zKTsKKworcHJpdmF0ZToKKyAgICBlbnVtIFBhcmFtUGVybWlzc2lvbiA6IGludCB7CisgICAgICAgIFdSSVRBQkxFLAorICAgICAgICBSRUFET05MWSwKKyAgICAgICAgVU5TVVBQT1JURUQsCisgICAgfTsKKworICAgIHN0cnVjdCBwYXJhbVRlc3RJbmZvIHsKKyAgICAgICAgc3RkOjpzdHJpbmcgbmFtZTsKKyAgICAgICAgaW50IHJlc3VsdDsKKyAgICAgICAgcGFyYW1UZXN0SW5mbyhjb25zdCBjaGFyICpuYW1lXywgaW50IHJlc3VsdF8pCisgICAgICAgICAgICA6IG5hbWUobmFtZV8pLCByZXN1bHQocmVzdWx0Xykge30KKyAgICB9OworCisgICAgLy8gcXVlcnlPblN0YWNrKCkgYW5kIHF1ZXJ5b25IZWFwKCkgYm90aCBjYWxsIGFuIGludGVyZmFjZSdzIHF1ZXJ5X3ZiKCkgYW5kCisgICAgLy8gY2hlY2sgaWYgYSBjb21wb25lbnQgaGFzIGEgcGFyYW1ldGVyIHdob3NlIHR5cGUgaXMgfFR8LgorICAgIC8vIElmIGEgY29tcG9uZW50IGhhcywgdGhlIHZhbHVlIHNob3VsZCBiZSBjb3BpZWQgaW50byBhbiBhcmd1bWVudCwgdGhhdCBpcworICAgIC8vIHxwfCBpbiBxdWVyeU9uU3RhY2soKSBhbmQgfGhlYXBQYXJhbXN8IGluIHF1ZXJ5T25IZWFwKCkuCisgICAgLy8gVGhlIHJldHVybiB2YWx1ZSBpcyBjMl9zdGF0dXNfdCAoZS5nLiBDMl9PSykuCisgICAgdGVtcGxhdGUgPHR5cGVuYW1lIFQ+IGMyX3N0YXR1c190IHF1ZXJ5T25TdGFjayhUICpjb25zdCBwKTsKKworICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBUPgorICAgIGMyX3N0YXR1c190IHF1ZXJ5T25IZWFwKGNvbnN0IFQgJnAsCisgICAgICAgICAgICAgICAgICAgICAgICAgc3RkOjp2ZWN0b3I8c3RkOjp1bmlxdWVfcHRyPEMyUGFyYW0+PiAqY29uc3QgaGVhcFBhcmFtcyk7CisKKyAgICAvLyBHZXQgYSB2YWx1ZSB3aG9zZSB0eXBlIGlzIHxUfCBpbiBhIGNvbXBvbmVudC4gVGhlIHZhbHVlIGlzIGNvcGllZCB0byB8cGFyYW18LgorICAgIC8vIFRoaXMgc2hvdWxkIGJlIGNhbGxlZCBvbmx5IGlmIGEgY29tcG9uZW50IGhhcyB0aGUgcGFyYW1ldGVyLgorICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBUPiB2b2lkIGdldFZhbHVlKFQgKmNvbnN0IHBhcmFtKTsKKworICAgIC8vIENoZWNrIGlmIHRoZSBwYXJhbWV0ZXIncyB2YWx1ZSBpbiBjb21wb25lbnQgaXMgZXF1YWwgdG8gfGV4cGVjdGVkfCBhbmQKKyAgICAvLyBxdWVyeU9uU3RhY2soKSBhbmQgcXVlcnlPbkhlYXAoKSBhcmUgc3VjY2VlZGVkLiBXaGVuIHRoaXMgZnVuY3Rpb24gY2FsbGVkLAorICAgIC8vIGl0IHNob3VsZCBiZSBndWFyYW50ZWVkIGEgY29tcG9uZW50IGhhcyB0aGUgcGFyYW1ldGVyLgorICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBUPiB2b2lkIHF1ZXJ5UGFyYW1Bc0V4cGVjdGVkKGNvbnN0IFQgJmV4cGVjdGVkKTsKKworICAgIC8vIFRlc3QgaWYgcXVlcnkgZnVuY3Rpb25zIHdvcmtzIGNvcnJlY3RseSBmb3Igc3VwcG9ydGVkIHBhcmFtZXRlcnMuCisgICAgLy8gIlN1cHBvcnQiIG1lYW5zIGhlcmUgYSBjb21wb25lbnQgaGFzIHRoZSBwYXJhbWV0ZXIuCisgICAgdGVtcGxhdGUgPHR5cGVuYW1lIFQ+IHZvaWQgcXVlcnlTdXBwb3J0ZWRQYXJhbSgpOworCisgICAgLy8gVGVzdCBxdWVyeSBmdW5jdGlvbnMgd29ya3MgY29ycmVjdGx5IGZvciB1bnN1cHBvcnRlZCBwYXJhbWV0ZXJzLgorICAgIC8vICJVbnN1cHBvcnQiIG1lYW5zIGhlcmUgYSBjb21wb25lbnQgZG9lc24ndCBoYXZlIHRoZSBwYXJhbWV0ZXIuCisgICAgdGVtcGxhdGUgPHR5cGVuYW1lIFQ+IHZvaWQgcXVlcnlVbnN1cHBvcnRlZFBhcmFtKCk7CisKKyAgICAvLyBFeGVjdXRlIGFuIGludGVyZmFjZSdzIGNvbmZpZ192YigpLiB8VHwgaXMgYSBzaW5nbGUgcGFyYW1ldGVyIHR5cGUsIG5vdCBzdGQ6OnZlY3Rvci4KKyAgICAvLyBjb25maWcoKSBjcmVhdGVzIHN0ZDo6dmVjdG9yPEMyUGFyYW0gKj4ge3B9IGFuZCBwYXNzZXMgaXQgdG8gY29uZmlnX3ZiKCkuCisgICAgdGVtcGxhdGUgPHR5cGVuYW1lIFQ+CisgICAgYzJfc3RhdHVzX3QKKyAgICBjb25maWcoVCAqY29uc3QgcCwKKyAgICAgICAgICAgc3RkOjp2ZWN0b3I8c3RkOjp1bmlxdWVfcHRyPEMyU2V0dGluZ1Jlc3VsdD4+ICpjb25zdCBmYWlsdXJlcyk7CisKKyAgICAvLyBUZXN0IGlmIGNvbmZpZyB3b3JrcyBjb3JyZWN0bHkgZm9yIHJlYWQtb25seSBwYXJhbWV0ZXJzLgorICAgIC8vIEJlY2F1c2UgdGhlIGZhaWx1cmUgb2YgY29uZmlnKCkgaXMgYXNzdW1lZCwgfG5ld1BhcmFtfCBkb2Vzbid0IG1hdHRlci4KKyAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4gdm9pZCBjb25maWdSZWFkT25seVBhcmFtKGNvbnN0IFQgJm5ld1BhcmFtKTsKKworICAgIC8vIFRlc3QgaWYgY29uZmlnIHdvcmtzIGNvcnJlY3RseSBmb3Igd3JpdGFibGUgcGFyYW1ldGVycy4KKyAgICAvLyBUaGlzIGNoYW5nZXMgdGhlIHBhcmFtZXRlcidzIHZhbHVlIHRvIHxuZXdQYXJhbXwuCisgICAgLy8gfHN0Q29uZmlnfCBpcyBhIHJldHVybiB2YWx1ZSBvZiBjb25maWcoKS4KKyAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4gdm9pZCBjb25maWdXcml0YWJsZVBhcmFtVmFsaWRWYWx1ZShjb25zdCBUICZuZXdQYXJhbSwgYzJfc3RhdHVzX3QgKnN0Q29uZmlnKTsKKworICAgIC8vIFRlc3QgaWYgY29uZmlnIHdvcmtzIGNvcnJlY3RseSBpbiB0aGUgY2FzZSBhbiBpbnZhbGlkIHZhbHVlIHxuZXdQYXJhbXwgaXMgdHJpZWQgdG8gd3JpdGUKKyAgICAvLyB0byBhbiB3cml0YWJsZSBwYXJhbWV0ZXIuCisgICAgdGVtcGxhdGUgPHR5cGVuYW1lIFQ+IHZvaWQgY29uZmlnV3JpdGFibGVQYXJhbUludmFsaWRWYWx1ZShjb25zdCBUICZuZXdQYXJhbSk7CisKKyAgICAvLyBDcmVhdGUgdmFsdWVzIGZvciB0ZXN0aW5nIGZyb20gfHZhbGlkVmFsdWVJbmZvc3wuIFRoZSB2YWx1ZXMgYXJlIHJldHVybmVkIGFzIGFyZ3VtZW50cy4KKyAgICAvLyB8dmFsaWRWYWx1ZXN8IDogdmFsaWQgdmFsdWVzLCB3aGljaCBjYW4gYmUgd3JpdHRlbiBmb3IgdGhlIHBhcmFtZXRlci4KKyAgICAvLyB8SW52YWxpZFZhbHVlc3wgOiBpbnZhbGlkIHZhbHVlcywgd2hpY2ggY2Fubm90IGJlIHdyaXR0ZW4gZm9yIHRoZSBwYXJhbWV0ZXIuCisgICAgLy8gICAgICAgICAgICAgICAgICAgY29uZmlnKCkgc2hvdWxkIGJlIGZhaWxlZCBpZiB0aGVzZSB2YWx1ZXMgYXJlIHVzZWQgYXMgbmV3IHZhbHVlcy4KKyAgICAvLyBUaGlzIGZ1bmN0aW9uIHNob3VsZCBiZSBjYWxsZWQgb25seSBmb3Igd3JpdGFibGUgYW5kIHN1cHBvcnRlZCBwYXJhbWV0ZXJzLgorICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBURmllbGQ+CisgICAgdm9pZCBnZXRUZXN0VmFsdWVzKGNvbnN0IEMyRmllbGRTdXBwb3J0ZWRWYWx1ZXMgJnZhbGlkVmFsdWVJbmZvcywKKyAgICAgICAgICAgICAgICAgICAgICAgc3RkOjp2ZWN0b3I8VEZpZWxkPiAqY29uc3QgdmFsaWRWYWx1ZXMsCisgICAgICAgICAgICAgICAgICAgICAgIHN0ZDo6dmVjdG9yPFRGaWVsZD4gKmNvbnN0IGludmFsaWRWYWx1ZXMpOworCisgICAgLy8gT3V0cHV0IHRoZSBzdW1tYXJ5IG9mIHRlc3QgcmVzdWx0cy4gQ2F0ZWdvcml6ZXMgcGFyYW1ldGVycyB3aXRoIHRoZWlyIGNvbmZpZ3VyYXRpb24uCisgICAgdm9pZCBvdXRwdXRSZXN1bHRzKGNvbnN0IHN0ZDo6c3RyaW5nICZuYW1lKTsKKworICAgIHN0ZDo6c2hhcmVkX3B0cjxDMkNvbXBvbmVudEludGVyZmFjZT4gbUludGY7CisgICAgc3RkOjp2ZWN0b3I8cGFyYW1UZXN0SW5mbz4gbVBhcmFtUmVzdWx0czsKKyAgICBzdGQ6OnN0cmluZyBtQ3VycmVudFBhcmFtTmFtZTsKK307CisKKy8vIGZhY3RvcnkgZnVuY3Rpb24KKy8vIFRPRE8oaGlyb2gpOiBBZGQgZmFjdG9yeSBmdW5jdGlvbnMgZm9yIG90aGVyIHR5cGVzLgordGVtcGxhdGUgPHR5cGVuYW1lIFQ+IHN0ZDo6dW5pcXVlX3B0cjxUPiBtYWtlUGFyYW0oKSB7CisgICAgcmV0dXJuIHN0ZDo6bWFrZV91bmlxdWU8VD4oKTsKK30KKwordGVtcGxhdGUgPD4gc3RkOjp1bmlxdWVfcHRyPEMyUG9ydE1pbWVDb25maWc6OmlucHV0PiBtYWtlUGFyYW0oKSB7CisgICAgLy8gVE9ETyhoaXJvaCk6IFNldCBtb3JlIHByZWNpc2UgbGVuZ3RoLgorICAgIHJldHVybiBDMlBvcnRNaW1lQ29uZmlnOjppbnB1dDo6QWxsb2NVbmlxdWUoMTAwKTsKK30KKworI2RlZmluZSBUUkFDRURfRkFJTFVSRShmdW5jKSAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgZG8geyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgU0NPUEVEX1RSQUNFKG1DdXJyZW50UGFyYW1OYW1lKTsgICAgICAgICAgICAgXAorICAgICAgICBmdW5jOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIGlmICg6OnRlc3Rpbmc6OlRlc3Q6Okhhc0ZhdGFsRmFpbHVyZSgpKSB7ICAgICAgIFwKKyAgICAgICAgICAgIHJldHVybjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgfSB3aGlsZSAoZmFsc2UpCisKK3RlbXBsYXRlIDx0eXBlbmFtZSBUPiBjMl9zdGF0dXNfdCBDMkNvbXBJbnRmVGVzdDo6cXVlcnlPblN0YWNrKFQgKmNvbnN0IHApIHsKKyAgICBzdGQ6OnZlY3RvcjxDMlBhcmFtKj4gc3RhY2tQYXJhbXN7cH07CisgICAgcmV0dXJuIG1JbnRmLT5xdWVyeV92YihzdGFja1BhcmFtcywge30sIEMyX0RPTlRfQkxPQ0ssIG51bGxwdHIpOworfQorCit0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KK2MyX3N0YXR1c190IEMyQ29tcEludGZUZXN0OjpxdWVyeU9uSGVhcCgKKyAgICAgICAgY29uc3QgVCAmcCwgc3RkOjp2ZWN0b3I8c3RkOjp1bmlxdWVfcHRyPEMyUGFyYW0+PiAqY29uc3QgaGVhcFBhcmFtcykgeworICAgIHVpbnQzMl90IGluZGV4ID0gcC5pbmRleCgpICYgfjB4MDNGRTAwMDA7CisgICAgaWYgKHAuZm9yU3RyZWFtKCkpIHsKKyAgICAgICAgaW5kZXggfD0gKChwLnN0cmVhbSgpIDw8IDE3KSAmIDB4MDFGRTAwMDApIHwgMHgwMjAwMDAwMDsKKyAgICB9CisgICAgcmV0dXJuIG1JbnRmLT5xdWVyeV92Yih7fSwge2luZGV4fSwgQzJfRE9OVF9CTE9DSywgaGVhcFBhcmFtcyk7Cit9CisKK3RlbXBsYXRlIDx0eXBlbmFtZSBUPiB2b2lkIEMyQ29tcEludGZUZXN0OjpnZXRWYWx1ZShUICpjb25zdCBwYXJhbSkgeworICAgIC8vIFdoZW4gZ2V0VmFsdWUoKSBpcyBjYWxsZWQsIGEgY29tcG9uZW50IGhhcyB0byBoYXZlIHRoZSBwYXJhbWV0ZXIuCisgICAgQVNTRVJUX0VRKEMyX09LLCBxdWVyeU9uU3RhY2socGFyYW0pKTsKK30KKwordGVtcGxhdGUgPHR5cGVuYW1lIFQ+Cit2b2lkIEMyQ29tcEludGZUZXN0OjpxdWVyeVBhcmFtQXNFeHBlY3RlZChjb25zdCBUICZleHBlY3RlZCkgeworICAgIC8vIFRPRE8oaGlyb2gpOiBEb24ndCBjcmVhdGUgcGFyYW0gb24gc3RhY2sgYW5kIGNhbGwgcXVlcnlPblN0YWNrIGZvciBmbGV4IHBhcmFtcy4KKyAgICAvLyBOb3RlIHRoYXQgYWxsIHRoZSBjdXJyZW50IHN1cHBvcnRlZCBwYXJhbWV0ZXJzIGFyZSBub24tZmxleCBwYXJhbXMuCisgICAgVCBzdGFjazsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8VD4gcEhlYXAgPSBtYWtlUGFyYW08VD4oKTsKKyAgICBzdGQ6OnZlY3RvcjxzdGQ6OnVuaXF1ZV9wdHI8QzJQYXJhbT4+IGhlYXBQYXJhbXM7CisKKyAgICBBU1NFUlRfRVEoQzJfT0ssIHF1ZXJ5T25TdGFjaygmc3RhY2spKTsKKworICAgIC8vIHxzdGFja3wgaXMgYSBwYXJhbWV0ZXIgdmFsdWUuIFRoZSBwYXJhbWV0ZXIgc2l6ZSBzaG91bGRuJ3QgYmUgMC4KKyAgICBFWFBFQ1RfTkUoMHUsIHN0YWNrLnNpemUoKSk7CisgICAgRVhQRUNUX0VRKHN0YWNrLCBleHBlY3RlZCk7CisKKyAgICBBU1NFUlRfRVEoQzJfT0ssIHF1ZXJ5T25IZWFwKCpwSGVhcCwgJmhlYXBQYXJhbXMpKTsKKworICAgIC8vIHwqaGVhcFBhcmFtc1swXXwgaXMgYSBwYXJhbWV0ZXIgdmFsdWUuIFRoZSBzaXplIG9mIHxoZWFwUGFyYW1zfCBoYXMgdG8gYmUgb25lLgorICAgIEFTU0VSVF9FUSgxdSwgaGVhcFBhcmFtcy5zaXplKCkpOworICAgIEVYUEVDVF9UUlVFKGhlYXBQYXJhbXNbMF0pOworICAgIEVYUEVDVF9FUSgqaGVhcFBhcmFtc1swXSwgZXhwZWN0ZWQpOworfQorCit0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4gdm9pZCBDMkNvbXBJbnRmVGVzdDo6cXVlcnlTdXBwb3J0ZWRQYXJhbSgpIHsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8VD4gcGFyYW0gPSBtYWtlUGFyYW08VD4oKTsKKyAgICAvLyBUaGUgY3VycmVudCBwYXJhbWV0ZXIncyB2YWx1ZSBpcyBhY3F1aXJlZCBieSBnZXRWYWx1ZSgpLCB3aGljaCBzaG91bGQgYmUgc3VjY2VlZGVkLgorICAgIGdldFZhbHVlKHBhcmFtLmdldCgpKTsKKyAgICBxdWVyeVBhcmFtQXNFeHBlY3RlZCgqcGFyYW0pOworfQorCit0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4gdm9pZCBDMkNvbXBJbnRmVGVzdDo6cXVlcnlVbnN1cHBvcnRlZFBhcmFtKCkgeworICAgIC8vIFRPRE8oaGlyb2gpOiBEb24ndCBjcmVhdGUgcGFyYW0gb24gc3RhY2sgYW5kIGNhbGwgcXVlcnlPblN0YWNrIGZvciBmbGV4IHBhcmFtcy4KKyAgICAvLyBOb3RlIHRoYXQgYWxsIHRoZSBjdXJyZW50IHN1cHBvcnRlZCBwYXJhbWV0ZXJzIGFyZSBub24tZmxleCBwYXJhbXMuCisgICAgVCBzdGFjazsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8VD4gcEhlYXAgPSBtYWtlUGFyYW08VD4oKTsKKyAgICBzdGQ6OnZlY3RvcjxzdGQ6OnVuaXF1ZV9wdHI8QzJQYXJhbT4+IGhlYXBQYXJhbXM7CisgICAgLy8gSWYgYSBjb21wb25lbnQgZG9lc24ndCBoYXZlIHRoZSBwYXJhbWV0ZXIsIHF1ZXJ5T25TdGFjaygpIGFuZCBxdWVyeU9uSGVhcCgpCisgICAgLy8gc2hvdWxkIHJldHVybiBDMl9CQURfSU5ERVguCisgICAgQVNTRVJUX0VRKEMyX0JBRF9JTkRFWCwgcXVlcnlPblN0YWNrKCZzdGFjaykpOworICAgIEVYUEVDVF9GQUxTRShzdGFjayk7CisgICAgQVNTRVJUX0VRKEMyX0JBRF9JTkRFWCwgcXVlcnlPbkhlYXAoKnBIZWFwLCAmaGVhcFBhcmFtcykpOworICAgIEVYUEVDVF9FUSgwdSwgaGVhcFBhcmFtcy5zaXplKCkpOworfQorCit0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KK2MyX3N0YXR1c190IEMyQ29tcEludGZUZXN0Ojpjb25maWcoCisgICAgICAgIFQgKmNvbnN0IHAsIHN0ZDo6dmVjdG9yPHN0ZDo6dW5pcXVlX3B0cjxDMlNldHRpbmdSZXN1bHQ+PiAqY29uc3QgZmFpbHVyZXMpIHsKKyAgICBzdGQ6OnZlY3RvcjxDMlBhcmFtKj4gcGFyYW1ze3B9OworICAgIHJldHVybiBtSW50Zi0+Y29uZmlnX3ZiKHBhcmFtcywgQzJfRE9OVF9CTE9DSywgZmFpbHVyZXMpOworfQorCisvLyBDcmVhdGUgYSBuZXcgcGFyYW1ldGVyIGNvcGllZCBmcm9tIHxwfC4KK3RlbXBsYXRlIDx0eXBlbmFtZSBUPiBzdGQ6OnVuaXF1ZV9wdHI8VD4gbWFrZVBhcmFtRnJvbShjb25zdCBUICZwKSB7CisgICAgc3RkOjp1bmlxdWVfcHRyPFQ+IHJldFAgPSBtYWtlUGFyYW08VD4oKTsKKyAgICBFWFBFQ1RfVFJVRShyZXRQLT51cGRhdGVGcm9tKHApKTsKKyAgICBFWFBFQ1RfVFJVRShtZW1jbXAocmV0UC5nZXQoKSwgJnAsIHNpemVvZihUKSkgPT0gMCk7CisgICAgcmV0dXJuIHJldFA7Cit9CisKK3RlbXBsYXRlIDx0eXBlbmFtZSBUPgordm9pZCBDMkNvbXBJbnRmVGVzdDo6Y29uZmlnUmVhZE9ubHlQYXJhbShjb25zdCBUICZuZXdQYXJhbSkgeworICAgIHN0ZDo6dW5pcXVlX3B0cjxUPiBwID0gbWFrZVBhcmFtRnJvbShuZXdQYXJhbSk7CisKKyAgICBzdGQ6OnZlY3RvcjxDMlBhcmFtKj4gcGFyYW1ze3AuZ2V0KCl9OworICAgIHN0ZDo6dmVjdG9yPHN0ZDo6dW5pcXVlX3B0cjxDMlNldHRpbmdSZXN1bHQ+PiBmYWlsdXJlczsKKworICAgIC8vIGNvbmZpZ192YiBzaG91bGQgYmUgZmFpbGVkIGJlY2F1c2UgYSBwYXJhbWV0ZXIgaXMgcmVhZC1vbmx5LgorICAgIEFTU0VSVF9FUShDMl9CQURfVkFMVUUsIG1JbnRmLT5jb25maWdfdmIocGFyYW1zLCBDMl9ET05UX0JMT0NLLCAmZmFpbHVyZXMpKTsKKyAgICBBU1NFUlRfRVEoMXUsIGZhaWx1cmVzLnNpemUoKSk7CisgICAgRVhQRUNUX0VRKEMyU2V0dGluZ1Jlc3VsdDo6UkVBRF9PTkxZLCBmYWlsdXJlc1swXS0+ZmFpbHVyZSk7Cit9CisKK3RlbXBsYXRlIDx0eXBlbmFtZSBUPgordm9pZCBDMkNvbXBJbnRmVGVzdDo6Y29uZmlnV3JpdGFibGVQYXJhbVZhbGlkVmFsdWUoY29uc3QgVCAmbmV3UGFyYW0sIGMyX3N0YXR1c190ICpjb25maWdSZXN1bHQpIHsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8VD4gcCA9IG1ha2VQYXJhbUZyb20obmV3UGFyYW0pOworCisgICAgc3RkOjp2ZWN0b3I8QzJQYXJhbSo+IHBhcmFtc3twLmdldCgpfTsKKyAgICBzdGQ6OnZlY3RvcjxzdGQ6OnVuaXF1ZV9wdHI8QzJTZXR0aW5nUmVzdWx0Pj4gZmFpbHVyZXM7CisgICAgLy8gSW4gbW9zdCBjYXNlcywgY29uZmlnX3ZiIHJldHVybiBDMl9PSyBhbmQgdGhlIHBhcmFtZXRlcidzIHZhbHVlIHNob3VsZCBiZSBjaGFuZ2VkCisgICAgLy8gdG8gfG5ld1BhcmFtfCwgd2hpY2ggaXMgY29uZmlybWVkIGluIGEgY2FsbGVyIG9mIGNvbmZpZ1dyaXRhYmxlUGFyYW1WYWx1ZVZhbHVlKCkuCisgICAgLy8gSG93ZXZlciwgdGhpcyBjYW4gcmV0dXJuIH5+fn4gYW5kIHRoZSBwYXJhbWV0ZXIncyB2YWx1ZXMgaXMgbm90IGNoYW5nZWQsCisgICAgLy8gYmVjYXVzZSB0aGVyZSBtYXkgYmUgZGVwZW5kZW50IGxpbWl0YXRpb25zIGJldHdlZW4gZmllbGRzIG9yIGJldHdlZW4gcGFyYW1ldGVycy4KKyAgICAvLyBUT0RPKGhpcm9oKTogSSBoYXZlIHRvIGZpbGwgdGhlIHJldHVybiB2YWx1ZS4gQ29tbWVudHMgaW4gQzJDb21wb25lbnQuaCBkb2Vzbid0IG1lbnRpb24KKyAgICAvLyBhYm91dCB0aGUgcmV0dXJuIHZhbHVlIHdoZW4gY29uZmxpY3QgaGFwcGVucy4gSSBzZXQgQzJfQkFEX1ZBTFVFIHRvIGl0IHRlbXBvcmFyaWx5IG5vdy4KKyAgICBjMl9zdGF0dXNfdCBzdENvbmZpZyA9IG1JbnRmLT5jb25maWdfdmIocGFyYW1zLCBDMl9ET05UX0JMT0NLLCAmZmFpbHVyZXMpOworICAgIGlmIChzdENvbmZpZyA9PSBDMl9PSykgeworICAgICAgICBFWFBFQ1RfRVEoMHUsIGZhaWx1cmVzLnNpemUoKSk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgQVNTRVJUX0VRKEMyX0JBRF9WQUxVRSwgc3RDb25maWcpOworICAgICAgICBFWFBFQ1RfRVEoMXUsIGZhaWx1cmVzLnNpemUoKSk7CisgICAgICAgIEVYUEVDVF9FUShDMlNldHRpbmdSZXN1bHQ6OkNPTkZMSUNULCBmYWlsdXJlc1swXS0+ZmFpbHVyZSk7CisgICAgfQorICAgICpjb25maWdSZXN1bHQgPSBzdENvbmZpZzsKK30KKwordGVtcGxhdGUgPHR5cGVuYW1lIFQ+Cit2b2lkIEMyQ29tcEludGZUZXN0Ojpjb25maWdXcml0YWJsZVBhcmFtSW52YWxpZFZhbHVlKGNvbnN0IFQgJm5ld1BhcmFtKSB7CisgICAgc3RkOjp1bmlxdWVfcHRyPFQ+IHAgPSBtYWtlUGFyYW1Gcm9tKG5ld1BhcmFtKTsKKworICAgIHN0ZDo6dmVjdG9yPEMyUGFyYW0qPiBwYXJhbXN7cC5nZXQoKX07CisgICAgc3RkOjp2ZWN0b3I8c3RkOjp1bmlxdWVfcHRyPEMyU2V0dGluZ1Jlc3VsdD4+IGZhaWx1cmVzOworICAgIC8vIEFsdGhvdWdoIGEgcGFyYW1ldGVyIGlzIHdyaXRhYmxlLCBjb25maWdfdmIgc2hvdWxkIGJlIGZhaWxlZCwKKyAgICAvLyBiZWNhdXNlIGEgbmV3IHZhbHVlIGlzIGludmFsaWQuCisgICAgQVNTRVJUX0VRKEMyX0JBRF9WQUxVRSwgbUludGYtPmNvbmZpZ192YihwYXJhbXMsIEMyX0RPTlRfQkxPQ0ssICZmYWlsdXJlcykpOworICAgIEFTU0VSVF9FUSgxdSwgZmFpbHVyZXMuc2l6ZSgpKTsKKyAgICBFWFBFQ1RfRVEoQzJTZXR0aW5nUmVzdWx0OjpCQURfVkFMVUUsIGZhaWx1cmVzWzBdLT5mYWlsdXJlKTsKK30KKworLy8gVGhlcmUgaXMgb25seSB1c2VkIGVudW0gdHlwZSBmb3IgdGhlIGZpZWxkIHR5cGUsIHRoYXQgaXMgQzJEb21haW5LaW5kLgorLy8gSWYgYW5vdGhlciBmaWVsZCB0eXBlIGlzIGFkZGVkLCBpdCBpcyBuZWNlc3NhcnkgdG8gYWRkIGZ1bmN0aW9uIGZvciB0aGF0LgordGVtcGxhdGUgPD4KK3ZvaWQgQzJDb21wSW50ZlRlc3Q6OmdldFRlc3RWYWx1ZXMoCisgICAgICAgIGNvbnN0IEMyRmllbGRTdXBwb3J0ZWRWYWx1ZXMgJnZhbGlkVmFsdWVJbmZvcywKKyAgICAgICAgc3RkOjp2ZWN0b3I8QzJEb21haW5LaW5kPiAqY29uc3QgdmFsaWRWYWx1ZXMsCisgICAgICAgIHN0ZDo6dmVjdG9yPEMyRG9tYWluS2luZD4gKmNvbnN0IGludmFsaWRWYWx1ZXMpIHsKKyAgICBVTlVTRUQodmFsaWRWYWx1ZUluZm9zKTsKKyAgICB2YWxpZFZhbHVlcy0+ZW1wbGFjZV9iYWNrKEMyRG9tYWluVmlkZW8pOworICAgIHZhbGlkVmFsdWVzLT5lbXBsYWNlX2JhY2soQzJEb21haW5BdWRpbyk7CisgICAgdmFsaWRWYWx1ZXMtPmVtcGxhY2VfYmFjayhDMkRvbWFpbk90aGVyKTsKKworICAgIC8vIFRoZXJlIGlzIG5vIGludmFsaWQgdmFsdWUuCisgICAgVU5VU0VEKGludmFsaWRWYWx1ZXMpOworfQorCit0ZW1wbGF0ZSA8dHlwZW5hbWUgVEZpZWxkPgordm9pZCBDMkNvbXBJbnRmVGVzdDo6Z2V0VGVzdFZhbHVlcygKKyAgICAgICAgY29uc3QgQzJGaWVsZFN1cHBvcnRlZFZhbHVlcyAmdmFsaWRWYWx1ZUluZm9zLAorICAgICAgICBzdGQ6OnZlY3RvcjxURmllbGQ+ICpjb25zdCB2YWxpZFZhbHVlcywKKyAgICAgICAgc3RkOjp2ZWN0b3I8VEZpZWxkPiAqY29uc3QgaW52YWxpZFZhbHVlcykgeworICAgIHVzaW5nIFRTdG9yYWdlID0gdHlwZW5hbWUgX2MyX3JlZHVjZV9lbnVtX3RvX3VuZGVybHlpbmdfdHlwZTxURmllbGQ+Ojp0eXBlOworCisgICAgLy8gVGhlIHN1cHBvcnRlZCB2YWx1ZXMgYXJlIHJlcHJlc2VudGVkIGJ5IEMyVmFsdWVzLiBDMlZhbHVlOjpQcmltaXRpdmUgbmVlZHMgdG8KKyAgICAvLyBiZSB0cmFuc2Zvcm1lZCB0byBhIHByaW1pdGl2ZSB2YWx1ZS4gVGhpcyBmdW5jdGlvbiBpcyBvbmUgdG8gZG8gdGhhdC4KKyAgICBhdXRvIHByaW0yVmFsdWUgPSBbXShjb25zdCBDMlZhbHVlOjpQcmltaXRpdmUgJnByaW0pIC0+IFRGaWVsZCB7CisgICAgICAgIHJldHVybiAoVEZpZWxkKXByaW0ucmVmPFRTdG9yYWdlPigpOworICAgICAgICBzdGF0aWNfYXNzZXJ0KHN0ZDo6aXNfc2FtZTxUU3RvcmFnZSwgaW50MzJfdD46OnZhbHVlIHx8CisgICAgICAgICAgICAgICAgICAgICAgc3RkOjppc19zYW1lPFRTdG9yYWdlLCB1aW50MzJfdD46OnZhbHVlIHx8CisgICAgICAgICAgICAgICAgICAgICAgc3RkOjppc19zYW1lPFRTdG9yYWdlLCBpbnQ2NF90Pjo6dmFsdWUgfHwKKyAgICAgICAgICAgICAgICAgICAgICBzdGQ6OmlzX3NhbWU8VFN0b3JhZ2UsIHVpbnQ2NF90Pjo6dmFsdWUgfHwKKyAgICAgICAgICAgICAgICAgICAgICBzdGQ6OmlzX3NhbWU8VFN0b3JhZ2UsIGZsb2F0Pjo6dmFsdWUsICJJbnZhbGlkIFRGaWVsZCB0eXBlLiIpOworICAgIH07CisKKyAgICAvLyBUaGUgc2l6ZSBvZiB2YWxpZFZhbHVlSW5mb3MgaXMgb25lLgorICAgIGNvbnN0IGF1dG8gJmMyRlNWID0gdmFsaWRWYWx1ZUluZm9zOworCisgICAgc3dpdGNoIChjMkZTVi50eXBlKSB7CisgICAgY2FzZSBDMkZpZWxkU3VwcG9ydGVkVmFsdWVzOjp0eXBlX3Q6OkVNUFRZOiB7CisgICAgICAgIGludmFsaWRWYWx1ZXMtPmVtcGxhY2VfYmFjayhURmllbGQoMCkpOworICAgICAgICAvLyBUT0RPKGhpcm9oKSA6IFNob3VsZCBvdGhlciBpbnZhbGlkIHZhbHVlcyBiZSB0ZXN0ZWQ/CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICBjYXNlIEMyRmllbGRTdXBwb3J0ZWRWYWx1ZXM6OnR5cGVfdDo6UkFOR0U6IHsKKyAgICAgICAgY29uc3QgYXV0byAmcmFuZ2UgPSBjMkZTVi5yYW5nZTsKKyAgICAgICAgYXV0byBybWluID0gcHJpbTJWYWx1ZShyYW5nZS5taW4pOworICAgICAgICBhdXRvIHJtYXggPSBwcmltMlZhbHVlKHJhbmdlLm1heCk7CisgICAgICAgIGF1dG8gcnN0ZXAgPSBwcmltMlZhbHVlKHJhbmdlLnN0ZXApOworCisgICAgICAgIEFTU0VSVF9MRShybWluLCBybWF4KTsKKworICAgICAgICBpZiAocnN0ZXAgIT0gMCkgeworICAgICAgICAgICAgLy8gSW5jcmVhc2UgbGluZWFyCisgICAgICAgICAgICBmb3IgKGF1dG8gdiA9IHJtaW47IHYgPD0gcm1heDsgdiA9IFRGaWVsZCh2ICsgcnN0ZXApKSB7CisgICAgICAgICAgICAgICAgdmFsaWRWYWx1ZXMtPmVtcGxhY2VfYmFjayh2KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChybWluID4gc3RkOjpudW1lcmljX2xpbWl0czxURmllbGQ+OjptaW4oKSkgeworICAgICAgICAgICAgICAgIGludmFsaWRWYWx1ZXMtPmVtcGxhY2VfYmFjayhURmllbGQocm1pbiAtIDEpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChybWF4IDwgc3RkOjpudW1lcmljX2xpbWl0czxURmllbGQ+OjptYXgoKSkgeworICAgICAgICAgICAgICAgIGludmFsaWRWYWx1ZXMtPmVtcGxhY2VfYmFjayhURmllbGQocm1heCArIDEpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGludCBOID0gdmFsaWRWYWx1ZXMtPnNpemUoKTsKKyAgICAgICAgICAgIGlmIChOID49IDIpIHsKKyAgICAgICAgICAgICAgICBpZiAoc3RkOjppc19zYW1lPFRGaWVsZCwgZmxvYXQ+Ojp2YWx1ZSkgeworICAgICAgICAgICAgICAgICAgICBpbnZhbGlkVmFsdWVzLT5lbXBsYWNlX2JhY2soVEZpZWxkKCh2YWxpZFZhbHVlcy0+YXQoMCkgKyB2YWxpZFZhbHVlcy0+YXQoMSkpIC8gMikpOworICAgICAgICAgICAgICAgICAgICBpbnZhbGlkVmFsdWVzLT5lbXBsYWNlX2JhY2soVEZpZWxkKCh2YWxpZFZhbHVlcy0+YXQoTiAtIDIpICsgdmFsaWRWYWx1ZXMtPmF0KE4gLSAxKSkgLyAyKSk7CisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKHJzdGVwID4gMSkgeworICAgICAgICAgICAgICAgICAgICAgICAgaW52YWxpZFZhbHVlcy0+ZW1wbGFjZV9iYWNrKFRGaWVsZCh2YWxpZFZhbHVlcy0+YXQoMCkgKyAxKSk7CisgICAgICAgICAgICAgICAgICAgICAgICBpbnZhbGlkVmFsdWVzLT5lbXBsYWNlX2JhY2soVEZpZWxkKHZhbGlkVmFsdWVzLT5hdChOIC0gMSkgLSAxKSk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAvLyBUaGVyZSBzaG91bGQgYmUgdHdvIGNhc2VzLCBleGNlcHQgbGluZWFyIGNhc2UuCisgICAgICAgICAgICAvLyAxLiBpbnRlZ2VyIGdlb21ldHJpYyBjYXNlCisgICAgICAgICAgICAvLyAyLiBmbG9hdCBnZW9tZXRyaWMgY2FzZQorCisgICAgICAgICAgICBhdXRvIG51bSA9IHByaW0yVmFsdWUocmFuZ2UubnVtKTsKKyAgICAgICAgICAgIGF1dG8gZGVub20gPSBwcmltMlZhbHVlKHJhbmdlLmRlbm9tKTsKKworICAgICAgICAgICAgLy8gSWYgYm90aCByYW5nZS5udW0gYW5kIHJhbmdlLmRlbm9tIGFyZSAxIGFuZCBzdGVwIGlzIDAsIHdlIHNob3VsZCB1c2UKKyAgICAgICAgICAgIC8vIFZBTFVFUywgc2hvdWxkbid0IHdlPworICAgICAgICAgICAgQVNTRVJUX0ZBTFNFKG51bSA9PSAxICYmIGRlbm9tID09IDEpOworCisgICAgICAgICAgICAvLyAobnVtIC8gZGVub20pIGlzIG5vdCBsZXNzIHRoYW4gMS4KKyAgICAgICAgICAgIEFTU0VSVF9GQUxTRShkZW5vbSA9PSAwKTsKKyAgICAgICAgICAgIEFTU0VSVF9MRShkZW5vbSwgbnVtKTsKKyAgICAgICAgICAgIGZvciAoYXV0byB2ID0gcm1pbjsgdiA8PSBybWF4OyB2ID0gVEZpZWxkKHYgKiBudW0gLyBkZW5vbSkpIHsKKyAgICAgICAgICAgICAgICB2YWxpZFZhbHVlcy0+ZW1wbGFjZV9iYWNrKHYpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAocm1pbiA+IHN0ZDo6bnVtZXJpY19saW1pdHM8VEZpZWxkPjo6bWluKCkpIHsKKyAgICAgICAgICAgICAgICBpbnZhbGlkVmFsdWVzLT5lbXBsYWNlX2JhY2soVEZpZWxkKHJtaW4gLSAxKSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAocm1heCA8IHN0ZDo6bnVtZXJpY19saW1pdHM8VEZpZWxkPjo6bWF4KCkpIHsKKyAgICAgICAgICAgICAgICBpbnZhbGlkVmFsdWVzLT5lbXBsYWNlX2JhY2soVEZpZWxkKHJtYXggKyAxKSk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGludCBOID0gdmFsaWRWYWx1ZXMtPnNpemUoKTsKKyAgICAgICAgICAgIGlmIChOID49IDIpIHsKKyAgICAgICAgICAgICAgICBpZiAoc3RkOjppc19zYW1lPFRGaWVsZCwgZmxvYXQ+Ojp2YWx1ZSkgeworICAgICAgICAgICAgICAgICAgICBpbnZhbGlkVmFsdWVzLT5lbXBsYWNlX2JhY2soVEZpZWxkKCh2YWxpZFZhbHVlcy0+YXQoMCkgKyB2YWxpZFZhbHVlcy0+YXQoMSkpIC8gMikpOworICAgICAgICAgICAgICAgICAgICBpbnZhbGlkVmFsdWVzLT5lbXBsYWNlX2JhY2soVEZpZWxkKCh2YWxpZFZhbHVlcy0+YXQoTiAtIDIpICsgdmFsaWRWYWx1ZXMtPmF0KE4gLSAxKSkgLyAyKSk7CisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKHZhbGlkVmFsdWVzLT5hdCgxKSAtIHZhbGlkVmFsdWVzLT5hdCgwKSA+IDEpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGludmFsaWRWYWx1ZXMtPmVtcGxhY2VfYmFjayhURmllbGQodmFsaWRWYWx1ZXMtPmF0KDApICsgMSkpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGlmICh2YWxpZFZhbHVlcy0+YXQoTiAtIDEpIC0gdmFsaWRWYWx1ZXMtPmF0KE4gLSAyKSA+IDEpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGludmFsaWRWYWx1ZXMtPmVtcGxhY2VfYmFjayhURmllbGQodmFsaWRWYWx1ZXMtPmF0KE4gLSAxKSAtIDEpKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBicmVhazsKKyAgICB9CisgICAgY2FzZSBDMkZpZWxkU3VwcG9ydGVkVmFsdWVzOjp0eXBlX3Q6OlZBTFVFUzogeworICAgICAgICBmb3IgKGNvbnN0IEMyVmFsdWU6OlByaW1pdGl2ZSAmcHJpbSA6IGMyRlNWLnZhbHVlcykgeworICAgICAgICAgICAgdmFsaWRWYWx1ZXMtPmVtcGxhY2VfYmFjayhwcmltMlZhbHVlKHByaW0pKTsKKyAgICAgICAgfQorICAgICAgICBhdXRvIG1pbnYgPSAqc3RkOjptaW5fZWxlbWVudCh2YWxpZFZhbHVlcy0+YmVnaW4oKSwgdmFsaWRWYWx1ZXMtPmVuZCgpKTsKKyAgICAgICAgYXV0byBtYXh2ID0gKnN0ZDo6bWF4X2VsZW1lbnQodmFsaWRWYWx1ZXMtPmJlZ2luKCksIHZhbGlkVmFsdWVzLT5lbmQoKSk7CisgICAgICAgIGlmIChtaW52IC0gMSA+IHN0ZDo6bnVtZXJpY19saW1pdHM8VEZpZWxkPjo6bWluKCkpIHsKKyAgICAgICAgICAgIGludmFsaWRWYWx1ZXMtPmVtcGxhY2VfYmFjayhURmllbGQobWludiAtIDEpKTsKKyAgICAgICAgfQorICAgICAgICBpZiAobWF4diArIDEgPCBzdGQ6Om51bWVyaWNfbGltaXRzPFRGaWVsZD46Om1heCgpKSB7CisgICAgICAgICAgICBpbnZhbGlkVmFsdWVzLT5lbXBsYWNlX2JhY2soVEZpZWxkKG1heHYgKyAxKSk7CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisgICAgfQorICAgIGNhc2UgQzJGaWVsZFN1cHBvcnRlZFZhbHVlczo6dHlwZV90OjpGTEFHUzogeworICAgICAgICAvLyBUT0RPKGhpcm9oKSA6IEltcGxlbWVudCB0aGUgY2FzZSB0aGF0IHBhcmFtLnR5cGUgaXMgRkxBR1MuCisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICB9Cit9CisKK3RlbXBsYXRlIDx0eXBlbmFtZSBUPgordm9pZCBDMkNvbXBJbnRmVGVzdDo6dGVzdFJlYWRPbmx5UGFyYW0oY29uc3QgVCAmcHJlUGFyYW0sIGNvbnN0IFQgJm5ld1BhcmFtKSB7CisgICAgVFJBQ0VEX0ZBSUxVUkUoY29uZmlnUmVhZE9ubHlQYXJhbShuZXdQYXJhbSkpOworICAgIC8vIFBhcmFtZXRlciB2YWx1ZSBtdXN0IG5vdCBiZSBjaGFuZ2VkCisgICAgVFJBQ0VEX0ZBSUxVUkUocXVlcnlQYXJhbUFzRXhwZWN0ZWQocHJlUGFyYW0pKTsKK30KKwordGVtcGxhdGUgPHR5cGVuYW1lIFRQYXJhbSwgdHlwZW5hbWUgVFJlYWxGaWVsZCwgdHlwZW5hbWUgVEZpZWxkPgordm9pZCBDMkNvbXBJbnRmVGVzdDo6dGVzdFdyaXRhYmxlUGFyYW0oCisgICAgICAgIFRQYXJhbSAqY29uc3QgcGFyYW0sIFRSZWFsRmllbGQgKmNvbnN0IHdyaXRhYmxlRmllbGQsCisgICAgICAgIGNvbnN0IHN0ZDo6dmVjdG9yPFRGaWVsZD4gJnZhbGlkVmFsdWVzLAorICAgICAgICBjb25zdCBzdGQ6OnZlY3RvcjxURmllbGQ+ICZpbnZhbGlkVmFsdWVzKSB7CisgICAgYzJfc3RhdHVzX3Qgc3RDb25maWc7CisKKyAgICAvLyBHZXQgdGhlIHBhcmFtZXRlcidzIHZhbHVlIGluIHRoZSBiZWdpbm5pbmcgaW4gb3JkZXIgdG8gcmVzZXQgdGhlIHZhbHVlIGF0IHRoZSBlbmQuCisgICAgVFJBQ0VEX0ZBSUxVUkUoZ2V0VmFsdWUocGFyYW0pKTsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8VFBhcmFtPiBkZWZhdWx0UGFyYW0gPSBtYWtlUGFyYW1Gcm9tKCpwYXJhbSk7CisKKyAgICAvLyBUZXN0IHZhbGlkIHZhbHVlcworICAgIGZvciAoY29uc3QgYXV0byAmdmFsIDogdmFsaWRWYWx1ZXMpIHsKKyAgICAgICAgc3RkOjp1bmlxdWVfcHRyPFRQYXJhbT4gcHJlUGFyYW0gPSBtYWtlUGFyYW1Gcm9tKCpwYXJhbSk7CisKKyAgICAgICAgLy8gUGFyYW0gaXMgdHJ5IHRvIGJlIGNoYW5nZWQKKyAgICAgICAgKndyaXRhYmxlRmllbGQgPSB2YWw7CisgICAgICAgIFRSQUNFRF9GQUlMVVJFKGNvbmZpZ1dyaXRhYmxlUGFyYW1WYWxpZFZhbHVlKCpwYXJhbSwgJnN0Q29uZmlnKSk7CisgICAgICAgIGlmIChzdENvbmZpZyA9PSBDMl9PSykgeworICAgICAgICAgICAgVFJBQ0VEX0ZBSUxVUkUocXVlcnlQYXJhbUFzRXhwZWN0ZWQoKnBhcmFtKSk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAvLyBQYXJhbSBpcyB1bmNoYW5nZWQgYmVjYXVzZSBhIGZpZWxkIHZhbHVlIGNvbmZsaWN0cyB3aXRoIG90aGVyIGZpZWxkIG9yIHBhcmFtZXRlci4KKyAgICAgICAgICAgIFRSQUNFRF9GQUlMVVJFKHF1ZXJ5UGFyYW1Bc0V4cGVjdGVkKCpwcmVQYXJhbSkpOworICAgICAgICB9CisgICAgfQorCisgICAgLy8gU3RvcmUgdGhlIGN1cnJlbnQgcGFyYW1ldGVyIGluIG9yZGVyIHRvIHRlc3QgfHBhcmFtfCBpcyB1bmNoYW5nZWQKKyAgICAvLyBhZnRlciB0cnlpbmcgdG8gd3JpdGUgYW4gaW52YWxpZCB2YWx1ZS4KKyAgICBzdGQ6OnVuaXF1ZV9wdHI8VFBhcmFtPiBsYXN0VmFsaWRQYXJhbSA9IG1ha2VQYXJhbUZyb20oKnBhcmFtKTsKKworICAgIC8vIFRlc3QgaW52YWxpZCB2YWx1ZXMKKyAgICBmb3IgKGNvbnN0IGF1dG8gJnZhbCA6IGludmFsaWRWYWx1ZXMpIHsKKyAgICAgICAgLy8gUGFyYW0gaXMgY2hhbmdlZAorICAgICAgICAqd3JpdGFibGVGaWVsZCA9IHZhbDsKKyAgICAgICAgVFJBQ0VEX0ZBSUxVUkUoY29uZmlnV3JpdGFibGVQYXJhbUludmFsaWRWYWx1ZSgqcGFyYW0pKTsKKyAgICAgICAgVFJBQ0VEX0ZBSUxVUkUocXVlcnlQYXJhbUFzRXhwZWN0ZWQoKmxhc3RWYWxpZFBhcmFtKSk7CisgICAgfQorICAgIC8vIFJlc2V0IHRoZSBwYXJhbWV0ZXIgYnkgY29uZmlnKCkuCisgICAgVFJBQ0VEX0ZBSUxVUkUoY29uZmlnV3JpdGFibGVQYXJhbVZhbGlkVmFsdWUoKmRlZmF1bHRQYXJhbSwgJnN0Q29uZmlnKSk7Cit9CisKK3RlbXBsYXRlIDx0eXBlbmFtZSBUPiB2b2lkIEMyQ29tcEludGZUZXN0Ojp0ZXN0VW5zdXBwb3J0ZWRQYXJhbSgpIHsKKyAgICBUUkFDRURfRkFJTFVSRShxdWVyeVVuc3VwcG9ydGVkUGFyYW08VD4oKSk7Cit9CisKK3RlbXBsYXRlIDx0eXBlbmFtZSBUPiB2b2lkIEMyQ29tcEludGZUZXN0Ojp0ZXN0U3VwcG9ydGVkUGFyYW0oKSB7CisgICAgVFJBQ0VEX0ZBSUxVUkUocXVlcnlTdXBwb3J0ZWRQYXJhbTxUPigpKTsKK30KKworYm9vbCBpc1N1cHBvcnRlZFBhcmFtKAorICAgICAgICBjb25zdCBDMlBhcmFtICZwYXJhbSwKKyAgICAgICAgY29uc3Qgc3RkOjp2ZWN0b3I8c3RkOjpzaGFyZWRfcHRyPEMyUGFyYW1EZXNjcmlwdG9yPj4gJnNQYXJhbXMpIHsKKyAgICBmb3IgKGNvbnN0IGF1dG8gJnBkIDogc1BhcmFtcykgeworICAgICAgICBpZiAocGFyYW0udHlwZSgpID09IHBkLT5pbmRleCgpLnR5cGUoKSkgeworICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0KKyAgICB9CisgICAgcmV0dXJuIGZhbHNlOworfQorCit0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KK3ZvaWQgQzJDb21wSW50ZlRlc3Q6OmNoZWNrUGFyYW1QZXJtaXNzaW9uKAorICAgIGludCAqY29uc3QgcmVzdWx0LAorICAgIGNvbnN0IHN0ZDo6dmVjdG9yPHN0ZDo6c2hhcmVkX3B0cjxDMlBhcmFtRGVzY3JpcHRvcj4+ICZzdXBwb3J0ZWRQYXJhbXMpIHsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8VD4gcGFyYW0gPSBtYWtlUGFyYW08VD4oKTsKKworICAgIGlmICghaXNTdXBwb3J0ZWRQYXJhbSgqcGFyYW0sIHN1cHBvcnRlZFBhcmFtcykpIHsKKyAgICAgICAgLy8gSWYgYSBwYXJhbWV0ZXIgaXNuJ3Qgc3VwcG9ydGVkLCBpdCBqdXN0IGZpbmlzaCBhZnRlciBjYWxsaW5nIHRlc3RVbnN1cHBvcnRlZFBhcmFtKCkuCisgICAgICAgIHRlc3RVbnN1cHBvcnRlZFBhcmFtPFQ+KCk7CisgICAgICAgICpyZXN1bHQgPSBQYXJhbVBlcm1pc3Npb246OlVOU1VQUE9SVEVEOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgdGVzdFN1cHBvcnRlZFBhcmFtPFQ+KCk7CisKKyAgICBUUkFDRURfRkFJTFVSRShnZXRWYWx1ZShwYXJhbS5nZXQoKSkpOworICAgIHN0ZDo6dmVjdG9yPHN0ZDo6dW5pcXVlX3B0cjxDMlNldHRpbmdSZXN1bHQ+PiBmYWlsdXJlczsKKyAgICAvLyBDb25maWcgZG9lcyBub3QgY2hhbmdlIHRoZSBwYXJhbWV0ZXIsIGJlY2F1c2UgcGFyYW0gaXMgdGhlIHByZXNlbnQgcGFyYW0uCisgICAgLy8gVGhpcyBjb25maWcgaXMgZXhlY3V0ZWQgdG8gZmluZCBvdXQgaWYgYSBwYXJhbWV0ZXIgaXMgcmVhZC1vbmx5IG9yIHdyaXRhYmxlLgorICAgIGMyX3N0YXR1c190IHN0U3RhY2sgPSBjb25maWcocGFyYW0uZ2V0KCksICZmYWlsdXJlcyk7CisgICAgaWYgKHN0U3RhY2sgPT0gQzJfQkFEX1ZBTFVFKSB7CisgICAgICAgIC8vIFJlYWQtb25seQorICAgICAgICBzdGQ6OnVuaXF1ZV9wdHI8VD4gbmV3UGFyYW0gPSBtYWtlUGFyYW08VD4oKTsKKyAgICAgICAgdGVzdFJlYWRPbmx5UGFyYW0oKnBhcmFtLCAqbmV3UGFyYW0pOworICAgICAgICAqcmVzdWx0ID0gUGFyYW1QZXJtaXNzaW9uOjpSRUFET05MWTsKKyAgICB9IGVsc2UgeworICAgICAgICAvLyBXcml0YWJsZQorICAgICAgICBFWFBFQ1RfRVEoc3RTdGFjaywgQzJfT0spOworICAgICAgICAqcmVzdWx0ID0gUGFyYW1QZXJtaXNzaW9uOjpXUklUQUJMRTsKKyAgICB9Cit9CisKK3ZvaWQgQzJDb21wSW50ZlRlc3Q6Om91dHB1dFJlc3VsdHMoY29uc3Qgc3RkOjpzdHJpbmcgJm5hbWUpIHsKKyAgICBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4gcGFyYW1zWzNdOworICAgIGZvciAoY29uc3QgYXV0byAmdGVzdEluZm8gOiBtUGFyYW1SZXN1bHRzKSB7CisgICAgICAgIGludCByZXN1bHQgPSB0ZXN0SW5mby5yZXN1bHQ7CisgICAgICAgIEFTU0VSVF9UUlVFKDAgPD0gcmVzdWx0ICYmIHJlc3VsdCA8PSAyKTsKKyAgICAgICAgcGFyYW1zW3Jlc3VsdF0uZW1wbGFjZV9iYWNrKHRlc3RJbmZvLm5hbWUpOworICAgIH0KKyAgICBjb25zdCBjaGFyICpyZXN1bHRTdHJpbmdbXSA9IHsiV3JpdGFibGUiLCAiUmVhZC1Pbmx5IiwgIlVuc3VwcG9ydGVkIn07CisgICAgcHJpbnRmKCJcbi0tLS1URVNUIFJFU1VMVFMgKCVzKS0tLS1cblxuIiwgbmFtZS5jX3N0cigpKTsKKyAgICBmb3IgKGludCBpID0gMDsgaSA8IDM7IGkrKykgeworICAgICAgICBwcmludGYoIlsgJXMgXVxuIiwgcmVzdWx0U3RyaW5nW2ldKTsKKyAgICAgICAgZm9yIChjb25zdCBhdXRvICZ0IDogcGFyYW1zW2ldKSB7CisgICAgICAgICAgICBwcmludGYoIiVzXG4iLCB0LmNfc3RyKCkpOworICAgICAgICB9CisgICAgICAgIHByaW50ZigiXG4iKTsKKyAgICB9Cit9CisKKyNkZWZpbmUgVEVTVF9HRU5FUkFMX1dSSVRBQkxFX0ZJRUxEKFRQYXJhbV8sIGZpZWxkX3R5cGVfbmFtZV8sIGZpZWxkX25hbWVfKSBcCisgICAgZG8geyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIHN0ZDo6dW5pcXVlX3B0cjxUUGFyYW1fPiBwYXJhbSA9IG1ha2VQYXJhbTxUUGFyYW1fPigpOyAgICAgICAgICBcCisgICAgICAgIHN0ZDo6dmVjdG9yPEMyRmllbGRTdXBwb3J0ZWRWYWx1ZXNRdWVyeT4gdmFsaWRWYWx1ZUluZm9zID0geyAgICBcCisgICAgICAgICAgICBDMkZpZWxkU3VwcG9ydGVkVmFsdWVzUXVlcnk6OkN1cnJlbnQoICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgIEMyUGFyYW1GaWVsZChwYXJhbS5nZXQoKSwgJmZpZWxkX3R5cGVfbmFtZV86OmZpZWxkX25hbWVfKSkgXAorICAgICAgICB9OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICBBU1NFUlRfRVEoQzJfT0ssICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgbUludGYtPnF1ZXJ5U3VwcG9ydGVkVmFsdWVzX3ZiKHZhbGlkVmFsdWVJbmZvcywgQzJfRE9OVF9CTE9DSykpOyAgICAgXAorICAgICAgICBBU1NFUlRfRVEoMXUsIHZhbGlkVmFsdWVJbmZvcy5zaXplKCkpOyAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICBzdGQ6OnZlY3RvcjxkZWNsdHlwZShwYXJhbS0+ZmllbGRfbmFtZV8pPiB2YWxpZFZhbHVlczsgICAgICAgICAgXAorICAgICAgICBzdGQ6OnZlY3RvcjxkZWNsdHlwZShwYXJhbS0+ZmllbGRfbmFtZV8pPiBpbnZhbGlkVmFsdWVzOyAgICAgICAgXAorICAgICAgICBnZXRUZXN0VmFsdWVzKHZhbGlkVmFsdWVJbmZvc1swXS52YWx1ZXMsICZ2YWxpZFZhbHVlcywgJmludmFsaWRWYWx1ZXMpOyAgIFwKKyAgICAgICAgdGVzdFdyaXRhYmxlUGFyYW0ocGFyYW0uZ2V0KCksICZwYXJhbS0+ZmllbGRfbmFtZV8sIHZhbGlkVmFsdWVzLFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgaW52YWxpZFZhbHVlcyk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICB9IHdoaWxlICgwKQorCisjZGVmaW5lIFRFU1RfVlNTVFJVQ1RfV1JJVEFCTEVfRklFTEQoVFBhcmFtXywgZmllbGRfdHlwZV9uYW1lXykgICAgICAgICBcCisgICAgZG8geyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIFRFU1RfR0VORVJBTF9XUklUQUJMRV9GSUVMRChUUGFyYW1fLCBmaWVsZF90eXBlX25hbWVfLCB3aWR0aCk7ICBcCisgICAgICAgIFRFU1RfR0VORVJBTF9XUklUQUJMRV9GSUVMRChUUGFyYW1fLCBmaWVsZF90eXBlX25hbWVfLCBoZWlnaHQpOyBcCisgICAgfSB3aGlsZSAoMCkKKworI2RlZmluZSBURVNUX1UzMl9XUklUQUJMRV9GSUVMRChUUGFyYW1fLCBmaWVsZF90eXBlX25hbWVfKSAgICAgICAgICAgICAgXAorICBURVNUX0dFTkVSQUxfV1JJVEFCTEVfRklFTEQoVFBhcmFtXywgZmllbGRfdHlwZV9uYW1lXywgdmFsdWUpCisKKyNkZWZpbmUgVEVTVF9FTlVNX1dSSVRBQkxFX0ZJRUxEKFRQYXJhbV8sIGZpZWxkX3R5cGVfbmFtZV8pICAgICAgICAgICAgIFwKKyAgVEVTVF9HRU5FUkFMX1dSSVRBQkxFX0ZJRUxEKFRQYXJhbV8sIGZpZWxkX3R5cGVfbmFtZV8sIHZhbHVlKQorCisvLyBUT0RPKGhpcm9oKTogU3VwcG9ydCBwYXJhbWV0ZXJzIGJhc2VkIG9uIGNoYXJbXSBhbmQgdWludDMyX3RbXS4KKy8vI2RlZmluZSBURVNUX1NUUklOR19XUklUQUJMRV9GSUVMRChUUGFyYW1fLCBmaWVsZF90eXBlX25hbWVfKQorLy8gVEVTVF9HRU5FUkFMX1dSSVRBQkxFX0ZJRUxEKFRQYXJhbV8sIGZpZWxkX3R5cGVfbmFtZV8sIG0udmFsdWUpCisvLyNkZWZpbmUgVEVTVF9VMzJBUlJBWV9XUklUQUJMRV9GSUVMRChUcGFyYW1fLCBmaWVsZF90eXBlX25hbWVfKQorLy8gVEVTVF9HRU5FUkFMX1dSSVRBQkxFX0ZJRUxEKFRwYXJhbV8sIHVpbnQzMl90W10sIGZpZWxkX3R5cGVfbmFtZV8sIHZhbHVlcykKKworI2RlZmluZSBFQUNIX1RFU1QoVFBhcmFtXywgZmllbGRfdHlwZV9uYW1lXywgdGVzdF9uYW1lKSAgICAgICAgICAgICAgICAgXAorICAgIGRvIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgaW50IHJlc3VsdCA9IDA7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgdGhpcy0+bUN1cnJlbnRQYXJhbU5hbWUgPSAjVFBhcmFtXzsgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgY2hlY2tQYXJhbVBlcm1pc3Npb248VFBhcmFtXz4oJnJlc3VsdCwgc3VwcG9ydGVkUGFyYW1zKTsgICAgICAgICAgXAorICAgICAgaWYgKHJlc3VsdCA9PSBQYXJhbVBlcm1pc3Npb246OldSSVRBQkxFKSB7ICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgIHRlc3RfbmFtZShUUGFyYW1fLCBmaWVsZF90eXBlX25hbWVfKTsgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgbVBhcmFtUmVzdWx0cy5lbXBsYWNlX2JhY2soI1RQYXJhbV8sIHJlc3VsdCk7ICAgICAgICAgICAgICAgICAgICAgIFwKKyAgfSB3aGlsZSAoMCkKKworI2RlZmluZSBFQUNIX1RFU1RfU0VMRih0eXBlXywgdGVzdF9uYW1lKSBFQUNIX1RFU1QodHlwZV8sIHR5cGVfLCB0ZXN0X25hbWUpCisjZGVmaW5lIEVBQ0hfVEVTVF9JTlBVVCh0eXBlXywgdGVzdF9uYW1lKSBFQUNIX1RFU1QodHlwZV86OmlucHV0LCB0eXBlXywgdGVzdF9uYW1lKQorI2RlZmluZSBFQUNIX1RFU1RfT1VUUFVUKHR5cGVfLCB0ZXN0X25hbWUpIEVBQ0hfVEVTVCh0eXBlXzo6b3V0cHV0LCB0eXBlXywgdGVzdF9uYW1lKQordm9pZCBDMkNvbXBJbnRmVGVzdDo6dGVzdE1haW4oc3RkOjpzaGFyZWRfcHRyPEMyQ29tcG9uZW50SW50ZXJmYWNlPiBpbnRmLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RkOjpzdHJpbmcgJmNvbXBvbmVudE5hbWUpIHsKKyAgICBzZXRDb21wb25lbnQoaW50Zik7CisKKyAgICBzdGQ6OnZlY3RvcjxzdGQ6OnNoYXJlZF9wdHI8QzJQYXJhbURlc2NyaXB0b3I+PiBzdXBwb3J0ZWRQYXJhbXM7CisgICAgQVNTRVJUX0VRKEMyX09LLCBtSW50Zi0+cXVlcnlTdXBwb3J0ZWRQYXJhbXNfbmIoJnN1cHBvcnRlZFBhcmFtcykpOworCisgICAgRUFDSF9URVNUX1NFTEYoQzJDb21wb25lbnRMYXRlbmN5SW5mbywgVEVTVF9VMzJfV1JJVEFCTEVfRklFTEQpOworICAgIEVBQ0hfVEVTVF9TRUxGKEMyQ29tcG9uZW50VGVtcG9yYWxJbmZvLCBURVNUX1UzMl9XUklUQUJMRV9GSUVMRCk7CisgICAgRUFDSF9URVNUX0lOUFVUKEMyUG9ydExhdGVuY3lJbmZvLCBURVNUX1UzMl9XUklUQUJMRV9GSUVMRCk7CisgICAgRUFDSF9URVNUX09VVFBVVChDMlBvcnRMYXRlbmN5SW5mbywgVEVTVF9VMzJfV1JJVEFCTEVfRklFTEQpOworICAgIEVBQ0hfVEVTVF9JTlBVVChDMlN0cmVhbUZvcm1hdENvbmZpZywgVEVTVF9VMzJfV1JJVEFCTEVfRklFTEQpOworICAgIEVBQ0hfVEVTVF9PVVRQVVQoQzJTdHJlYW1Gb3JtYXRDb25maWcsIFRFU1RfVTMyX1dSSVRBQkxFX0ZJRUxEKTsKKyAgICBFQUNIX1RFU1RfSU5QVVQoQzJQb3J0U3RyZWFtQ291bnRDb25maWcsIFRFU1RfVTMyX1dSSVRBQkxFX0ZJRUxEKTsKKyAgICBFQUNIX1RFU1RfT1VUUFVUKEMyUG9ydFN0cmVhbUNvdW50Q29uZmlnLCBURVNUX1UzMl9XUklUQUJMRV9GSUVMRCk7CisKKyAgICBFQUNIX1RFU1RfU0VMRihDMkNvbXBvbmVudERvbWFpbkluZm8sIFRFU1RfRU5VTV9XUklUQUJMRV9GSUVMRCk7CisKKyAgICAvLyBUT0RPKGhpcm9oKTogU3VwcG9ydCBwYXJhbWV0ZXJzIGJhc2VkIG9uIHVpbnQzMl90W10gYW5kIGNoYXJbXS4KKyAgICAvLyBFQUNIX1RFU1RfSU5QVVQoQzJQb3J0TWltZUNvbmZpZywgVEVTVF9TVFJJTkdfV1JJVEFCTEVfRklFTEQpOworICAgIC8vIEVBQ0hfVEVTVF9PVVRQVVQoQzJQb3J0TWltZUNvbmZpZywgVEVTVF9TVFJJTkdfV1JJVEFCTEVfRklFTEQpOworICAgIC8vIEVBQ0hfVEVTVF9JTlBVVChDMlN0cmVhbU1pbWVDb25maWcsIFRFU1RfU1RSSU5HX1dSSVRBQkxFX0ZJRUxEKTsKKyAgICAvLyBFQUNIX1RFU1RfT1VUUFVUKEMyU3RyZWFtTWltZUNvbmZpZywgVEVTVF9TVFJJTkdfV1JJVEFCTEVfRklFTEQpOworCisgICAgLy8gRUFDSF9URVNUX1NFTEYoQzJTdXBwb3J0ZWRQYXJhbXNJbmZvLCBURVNUX1UzMkFSUkFZX1dSSVRBQkxFX0ZJRUxEKTsKKyAgICAvLyBFQUNIX1RFU1RfU0VMRihDMlJlcXVpcmVkUGFyYW1zSW5mbywgVEVTVF9VMzJBUlJBWV9XUklUQUJMRV9GSUVMRCk7CisgICAgLy8gRUFDSF9URVNUX1NFTEYoQzJSZWFkT25seVBhcmFtc0luZm8sIFRFU1RfVTMyQVJSQVlfV1JJVEFCTEVfRklFTEQpOworICAgIC8vIEVBQ0hfVEVTVF9TRUxGKEMyUmVxdWVzdGVkSW5mb3NJbmZvLCBURVNUX1UzMkFSUkFZX1dSSVRBQkxFX0ZJRUxEKTsKKworICAgIEVBQ0hfVEVTVF9JTlBVVChDMlZpZGVvU2l6ZVN0cmVhbUluZm8sIFRFU1RfVlNTVFJVQ1RfV1JJVEFCTEVfRklFTEQpOworICAgIEVBQ0hfVEVTVF9PVVRQVVQoQzJWaWRlb1NpemVTdHJlYW1JbmZvLCBURVNUX1ZTU1RSVUNUX1dSSVRBQkxFX0ZJRUxEKTsKKyAgICBFQUNIX1RFU1RfSU5QVVQoQzJWaWRlb1NpemVTdHJlYW1UdW5pbmcsIFRFU1RfVlNTVFJVQ1RfV1JJVEFCTEVfRklFTEQpOworICAgIEVBQ0hfVEVTVF9PVVRQVVQoQzJWaWRlb1NpemVTdHJlYW1UdW5pbmcsIFRFU1RfVlNTVFJVQ1RfV1JJVEFCTEVfRklFTEQpOworICAgIEVBQ0hfVEVTVF9JTlBVVChDMk1heFZpZGVvU2l6ZUhpbnRQb3J0U2V0dGluZywgVEVTVF9WU1NUUlVDVF9XUklUQUJMRV9GSUVMRCk7CisgICAgRUFDSF9URVNUX09VVFBVVChDMk1heFZpZGVvU2l6ZUhpbnRQb3J0U2V0dGluZywgVEVTVF9WU1NUUlVDVF9XUklUQUJMRV9GSUVMRCk7CisKKyAgICBvdXRwdXRSZXN1bHRzKGNvbXBvbmVudE5hbWUpOworICAgIHJlc2V0UmVzdWx0cygpOworfQorCitURVNUX0YoQzJDb21wSW50ZlRlc3QsIEMyVjRMMkNvZGVjSW50ZikgeworCisgICAgLy8gUmVhZCBhIHNoYXJlZCBvYmplY3QgbGlicmFyeS4KKyAgICB2b2lkKiBjb21wTGliID0gZGxvcGVuKCJzeXN0ZW0vbGliL2xpYnY0bDJfY29kZWMyLnNvIiwgUlRMRF9OT1cpOworCisgICAgaWYgKCFjb21wTGliKSB7CisgICAgICAgIHByaW50ZigiQ2Fubm90IG9wZW4gbGlicmFyeTogJXMuXG4iLCBkbGVycm9yKCkpOworICAgICAgICBGQUlMKCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICB0eXBlZGVmIEMyQ29tcG9uZW50U3RvcmUqIGNyZWF0ZV90KCk7CisgICAgY3JlYXRlX3QqIGNyZWF0ZV9zdG9yZT0gKGNyZWF0ZV90KikgZGxzeW0oY29tcExpYiwgImNyZWF0ZV9zdG9yZSIpOworICAgIGNvbnN0IGNoYXIqIGRsc3ltX2Vycm9yID0gZGxlcnJvcigpOworICAgIGlmIChkbHN5bV9lcnJvcikgeworICAgICAgICBwcmludGYoIkNhbm5vdCBsb2FkIHN5bWJvbCBjcmVhdGU6ICVzLlxuIiwgZGxzeW1fZXJyb3IpOworICAgICAgICBGQUlMKCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICB0eXBlZGVmIHZvaWQgZGVzdHJveV90KEMyQ29tcG9uZW50U3RvcmUqKTsKKyAgICBkZXN0cm95X3QqIGRlc3Ryb3lfc3RvcmUgPSAoZGVzdHJveV90KikgZGxzeW0oY29tcExpYiwgImRlc3Ryb3lfc3RvcmUiKTsKKyAgICBkbHN5bV9lcnJvciA9IGRsZXJyb3IoKTsKKyAgICBpZiAoZGxzeW1fZXJyb3IpIHsKKyAgICAgICAgcHJpbnRmKCJDYW5ub3QgbG9hZCBzeW1ib2wgZGVzdHJveTogJXMuXG4iLCBkbHN5bV9lcnJvcik7CisgICAgICAgIEZBSUwoKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIHN0ZDo6c2hhcmVkX3B0cjxDMkNvbXBvbmVudFN0b3JlPiBjb21wb25lbnRTdG9yZShjcmVhdGVfc3RvcmUoKSwgZGVzdHJveV9zdG9yZSk7CisgICAgc3RkOjpzaGFyZWRfcHRyPEMyQ29tcG9uZW50SW50ZXJmYWNlPiBjb21wb25lbnRJbnRmOworICAgIGNvbXBvbmVudFN0b3JlLT5jcmVhdGVJbnRlcmZhY2UoInY0bDIuZGVjb2RlciIsICZjb21wb25lbnRJbnRmKTsKKyAgICBhdXRvIGNvbXBvbmVudE5hbWUgPSAiQzJWNEwyQ29kZWMiOworICAgIHRlc3RNYWluKGNvbXBvbmVudEludGYsIGNvbXBvbmVudE5hbWUpOworfQorCit9IC8vIG5hbWVzcGFjZSBhbmRyb2lkCmRpZmYgLS1naXQgYS9tZWRpYS9jb2RlYzIvdGVzdHMvQzJQYXJhbV90ZXN0LmNwcCBiL21lZGlhL2NvZGVjMi90ZXN0cy9DMlBhcmFtX3Rlc3QuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU2NGQ0ZDIKLS0tIC9kZXYvbnVsbAorKysgYi9tZWRpYS9jb2RlYzIvdGVzdHMvQzJQYXJhbV90ZXN0LmNwcApAQCAtMCwwICsxLDI1MTUgQEAKKy8qCisgKiBDb3B5cmlnaHQgMjAxNiBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCisKKy8vI2RlZmluZSBMT0dfTkRFQlVHIDAKKyNkZWZpbmUgTE9HX1RBRyAiQzJQYXJhbV90ZXN0IgorCisjaW5jbHVkZSA8Z3Rlc3QvZ3Rlc3QuaD4KKworI2RlZmluZSBfX0MyX0dFTkVSQVRFX0dMT0JBTF9WQVJTX18KKyNpbmNsdWRlIDxDMlBhcmFtRGVmLmg+CisKKyNpbmNsdWRlIDxsaXN0PgorCit2b2lkIFByaW50VG8oY29uc3QgX0MyRmllbGRJZCAmaWQsIDo6c3RkOjpvc3RyZWFtKiBvcykgeworICAgICpvcyA8PCAiQCIgPDwgaWQuX21PZmZzZXQgPDwgIisiIDw8IGlkLl9tU2l6ZTsKK30KKwordm9pZCBQcmludFRvKGNvbnN0IEMyRmllbGREZXNjcmlwdG9yICZmZCwgOjpzdGQ6Om9zdHJlYW0gKm9zKSB7CisgICAgdXNpbmcgRkQ9QzJGaWVsZERlc2NyaXB0b3I7CisgICAgc3dpdGNoIChmZC50eXBlKCkpIHsKKyAgICBjYXNlIEZEOjpJTlQzMjogKm9zIDw8ICJpMzIiOyBicmVhazsKKyAgICBjYXNlIEZEOjpJTlQ2NDogKm9zIDw8ICJpNjQiOyBicmVhazsKKyAgICBjYXNlIEZEOjpVSU5UMzI6ICpvcyA8PCAidTMyIjsgYnJlYWs7CisgICAgY2FzZSBGRDo6VUlOVDY0OiAqb3MgPDwgInU2NCI7IGJyZWFrOworICAgIGNhc2UgRkQ6OkZMT0FUOiAqb3MgPDwgImZsb2F0IjsgYnJlYWs7CisgICAgY2FzZSBGRDo6U1RSSU5HOiAqb3MgPDwgImNoYXIiOyBicmVhazsKKyAgICBjYXNlIEZEOjpCTE9COiAqb3MgPDwgInU4IjsgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgICAgaWYgKGZkLnR5cGUoKSAmIEZEOjpTVFJVQ1RfRkxBRykgeworICAgICAgICAgICAgKm9zIDw8ICJzdHJ1Y3QtIiA8PCAoZmQudHlwZSgpICYgfkZEOjpTVFJVQ1RfRkxBRyk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAqb3MgPDwgInR5cGUtIiA8PCBmZC50eXBlKCk7CisgICAgICAgIH0KKyAgICB9CisgICAgKm9zIDw8ICIgIiA8PCBmZC5uYW1lKCk7CisgICAgaWYgKGZkLmV4dGVudCgpID4gMSkgeworICAgICAgICAqb3MgPDwgIlsiIDw8IGZkLmV4dGVudCgpIDw8ICJdIjsKKyAgICB9IGVsc2UgaWYgKGZkLmV4dGVudCgpID09IDApIHsKKyAgICAgICAgKm9zIDw8ICJbXSI7CisgICAgfQorICAgICpvcyA8PCAiICgiOworICAgIFByaW50VG8oZmQuX21GaWVsZElkLCBvcyk7CisgICAgKm9zIDw8ICIqIiA8PCBmZC5leHRlbnQoKSA8PCAiKSI7Cit9CisKK2VudW0gQzJQYXJhbUluZGV4VHlwZSA6IEMyUGFyYW06OnR5cGVfaW5kZXhfdCB7CisgICAga1BhcmFtSW5kZXhOdW1iZXIsCisgICAga1BhcmFtSW5kZXhOdW1iZXJzLAorICAgIGtQYXJhbUluZGV4TnVtYmVyMiwKKyAgICBrUGFyYW1JbmRleFZlbmRvclN0YXJ0ID0gQzJQYXJhbTo6VFlQRV9JTkRFWF9WRU5ET1JfU1RBUlQsCisgICAga1BhcmFtSW5kZXhWZW5kb3JOdW1iZXJzLAorfTsKKwordm9pZCBmZmZmKGludCgqKShpbnQpKSB7fQorCisvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PSBTVFJVQ1QgREVDTEFSQVRJT04gQU5EIERFU0NSSVBUSU9OID09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCisKK3R5cGVkZWYgQzJGaWVsZERlc2NyaXB0b3IgRkQ7CisKK2NsYXNzIEMyUGFyYW1UZXN0IDogcHVibGljIDo6dGVzdGluZzo6VGVzdCB7Cit9OworCitjbGFzcyBDMlBhcmFtVGVzdF9QYXJhbUZpZWxkTGlzdAorICAgICAgICA6IHB1YmxpYyA6OnRlc3Rpbmc6OlRlc3RXaXRoUGFyYW08c3RkOjp2ZWN0b3I8QzJGaWVsZERlc2NyaXB0b3I+PiB7Cit9OworCitlbnVtIHsKKyAgICBrUGFyYW1JbmRleFNpemUsCisgICAga1BhcmFtSW5kZXhUZXN0QSwKKyAgICBrUGFyYW1JbmRleFRlc3RCLAorICAgIGtQYXJhbUluZGV4VGVzdEZsZXhTMzIsCisgICAga1BhcmFtSW5kZXhUZXN0RmxleEVuZFMzMiwKKyAgICBrUGFyYW1JbmRleFRlc3RGbGV4UzY0LAorICAgIGtQYXJhbUluZGV4VGVzdEZsZXhFbmRTNjQsCisgICAga1BhcmFtSW5kZXhUZXN0RmxleFNpemUsCisgICAga1BhcmFtSW5kZXhUZXN0RmxleEVuZFNpemUsCit9OworCitzdHJ1Y3QgQzJTaXplU3RydWN0IHsKKyAgICBpbnQzMl90IHdpZHRoOworICAgIGludDMyX3QgaGVpZ2h0OworICAgIGVudW0gOiB1aW50MzJfdCB7IENPUkVfSU5ERVggPSBrUGFyYW1JbmRleFNpemUgfTsgICAgICAgICAgICAgICAgICAgICAgICAvLyA8PSBuZWVkZWQgZm9yIEMyRmllbGREZXNjcmlwdG9yCisgICAgY29uc3Qgc3RhdGljIHN0ZDo6dmVjdG9yPEMyRmllbGREZXNjcmlwdG9yPiBfRklFTERfTElTVDsKKyAgICBzdGF0aWMgY29uc3Qgc3RkOjp2ZWN0b3I8QzJGaWVsZERlc2NyaXB0b3I+IEZpZWxkTGlzdCgpOyAgLy8gPD0gbmVlZGVkIGZvciBDMkZpZWxkRGVzY3JpcHRvcgorICAgIGNvbnN0IHN0YXRpYyBGRDo6dHlwZV90IFRZUEUgPSAoRkQ6OnR5cGVfdCkoQ09SRV9JTkRFWCB8IEZEOjpTVFJVQ1RfRkxBRyk7Cit9OworCitERUZJTkVfTk9fTkFNRURfVkFMVUVTX0ZPUihDMlNpemVTdHJ1Y3QpCisKKy8vIFRlc3QgMS4gZGVmaW5lIGEgc3RydWN0dXJlIHdpdGhvdXQgYW55IGhlbHBlciBtZXRob2RzCisKK2Jvb2wgb3BlcmF0b3I9PShjb25zdCBDMkZpZWxkRGVzY3JpcHRvciAmYSwgY29uc3QgQzJGaWVsZERlc2NyaXB0b3IgJmIpIHsKKyAgICByZXR1cm4gYS50eXBlKCkgPT0gYi50eXBlKCkKKyAgICAgICAgICAgICYmIGEuZXh0ZW50KCkgPT0gYi5leHRlbnQoKQorICAgICAgICAgICAgJiYgYS5uYW1lKCkgPT0gYi5uYW1lKCkKKyAgICAgICAgICAgICYmIGEuX21GaWVsZElkID09IGIuX21GaWVsZElkOworfQorCitzdHJ1Y3QgQzJUZXN0U3RydWN0X0EgeworICAgIGludDMyX3Qgc2lnbmVkMzI7CisgICAgaW50NjRfdCBzaWduZWQ2NFsyXTsKKyAgICB1aW50MzJfdCB1bnNpZ25lZDMyWzFdOworICAgIHVpbnQ2NF90IHVuc2lnbmVkNjQ7CisgICAgZmxvYXQgZnAzMjsKKyAgICBDMlNpemVTdHJ1Y3Qgc3pbM107CisgICAgdWludDhfdCBibG9iWzEwMF07CisgICAgY2hhciBzdHJpbmdbMTAwXTsKKyAgICBib29sIHllc05vWzEwMF07CisKKyAgICBjb25zdCBzdGF0aWMgc3RkOjp2ZWN0b3I8QzJGaWVsZERlc2NyaXB0b3I+IF9GSUVMRF9MSVNUOworICAgIHN0YXRpYyBjb25zdCBzdGQ6OnZlY3RvcjxDMkZpZWxkRGVzY3JpcHRvcj4gRmllbGRMaXN0KCk7CisgICAgLy8gZW51bSA6IHVpbnQzMl90IHsgQ09SRV9JTkRFWCA9IGtQYXJhbUluZGV4VGVzdCB9OworICAgIC8vIHR5cGVkZWYgQzJUZXN0U3RydWN0X0EgX3R5cGU7Cit9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOworCitjb25zdCBzdGQ6OnZlY3RvcjxDMkZpZWxkRGVzY3JpcHRvcj4gQzJUZXN0U3RydWN0X0E6OkZpZWxkTGlzdCgpIHsKKyAgICByZXR1cm4gX0ZJRUxEX0xJU1Q7Cit9Citjb25zdCBzdGQ6OnZlY3RvcjxDMkZpZWxkRGVzY3JpcHRvcj4gQzJUZXN0U3RydWN0X0E6Ol9GSUVMRF9MSVNUID0KKyAgICB7IHsgRkQ6OklOVDMyLCAgICAxLCAiczMyIiwgICAwLCA0IH0sCisgICAgICB7IEZEOjpJTlQ2NCwgICAgMiwgInM2NCIsICAgNCwgOCB9LAorICAgICAgeyBGRDo6VUlOVDMyLCAgIDEsICJ1MzIiLCAgMjAsIDQgfSwKKyAgICAgIHsgRkQ6OlVJTlQ2NCwgICAxLCAidTY0IiwgIDI0LCA4IH0sCisgICAgICB7IEZEOjpGTE9BVCwgICAgMSwgImZwIiwgICAzMiwgNCB9LAorICAgICAgeyBDMlNpemVTdHJ1Y3Q6OlRZUEUsIDMsICJzaXplIiwgMzYsIDggfSwKKyAgICAgIHsgRkQ6OkJMT0IsICAgMTAwLCAiYmxvYiIsIDYwLCAxIH0sCisgICAgICB7IEZEOjpTVFJJTkcsIDEwMCwgInN0ciIsIDE2MCwgMSB9LAorICAgICAgeyBGRDo6QkxPQiwgICAxMDAsICJ5LW4iLCAyNjAsIDEgfSB9OworCitURVNUX1AoQzJQYXJhbVRlc3RfUGFyYW1GaWVsZExpc3QsIFZlcmlmeVN0cnVjdCkgeworICAgIHN0ZDo6dmVjdG9yPEMyRmllbGREZXNjcmlwdG9yPiBmaWVsZHMgPSBHZXRQYXJhbSgpLCBleHBlY3RlZCA9IEMyVGVzdFN0cnVjdF9BOjpfRklFTERfTElTVDsKKworICAgIC8vIHZlcmlmeSBmaXJzdCBmaWVsZCBkZXNjcmlwdG9yCisgICAgRVhQRUNUX0VRKEZEOjpJTlQzMiwgZmllbGRzWzBdLnR5cGUoKSk7CisgICAgRVhQRUNUX1NUUkVRKCJzMzIiLCBmaWVsZHNbMF0ubmFtZSgpLmNfc3RyKCkpOworICAgIEVYUEVDVF9FUSgxdSwgZmllbGRzWzBdLmV4dGVudCgpKTsKKyAgICBFWFBFQ1RfRVEoX0MyRmllbGRJZCgwLCA0KSwgZmllbGRzWzBdLl9tRmllbGRJZCk7CisKKyAgICBFWFBFQ1RfRVEoZXhwZWN0ZWRbMF0sIGZpZWxkc1swXSk7CisgICAgRVhQRUNUX0VRKGV4cGVjdGVkWzFdLCBmaWVsZHNbMV0pOworICAgIEVYUEVDVF9FUShleHBlY3RlZFsyXSwgZmllbGRzWzJdKTsKKyAgICBFWFBFQ1RfRVEoZXhwZWN0ZWRbM10sIGZpZWxkc1szXSk7CisgICAgRVhQRUNUX0VRKGV4cGVjdGVkWzRdLCBmaWVsZHNbNF0pOworICAgIEVYUEVDVF9FUShleHBlY3RlZFs1XSwgZmllbGRzWzVdKTsKKyAgICBFWFBFQ1RfRVEoZXhwZWN0ZWRbNl0sIGZpZWxkc1s2XSk7CisgICAgRVhQRUNUX0VRKGV4cGVjdGVkWzddLCBmaWVsZHNbN10pOworICAgIGZvciAoc2l6ZV90IGkgPSA4OyBpIDwgZmllbGRzLnNpemUoKSAmJiBpIDwgZXhwZWN0ZWQuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgRVhQRUNUX0VRKGV4cGVjdGVkW2ldLCBmaWVsZHNbaV0pOworICAgIH0KK30KKworSU5TVEFOVElBVEVfVEVTVF9DQVNFX1AoSW5pdGlhbGl6ZXJMaXN0LCBDMlBhcmFtVGVzdF9QYXJhbUZpZWxkTGlzdCwgOjp0ZXN0aW5nOjpWYWx1ZXMoQzJUZXN0U3RydWN0X0E6Ol9GSUVMRF9MSVNUKSk7CisKKy8vIGRlZmluZSBmaWVsZHMgdXNpbmcgQzJGaWVsZERlc2NyaXB0b3IgcG9pbnRlciBjb25zdHJ1Y3RvcgorY29uc3Qgc3RkOjp2ZWN0b3I8QzJGaWVsZERlc2NyaXB0b3I+IEMyVGVzdFN0cnVjdF9BX0ZEX1BUUl9maWVsZExpc3QgPQorICAgIHsgQzJGaWVsZERlc2NyaXB0b3IoJigoQzJUZXN0U3RydWN0X0EqKShudWxscHRyKSktPnNpZ25lZDMyLCAgICJzMzIiKSwKKyAgICAgIEMyRmllbGREZXNjcmlwdG9yKCYoKEMyVGVzdFN0cnVjdF9BKikobnVsbHB0cikpLT5zaWduZWQ2NCwgICAiczY0IiksCisgICAgICBDMkZpZWxkRGVzY3JpcHRvcigmKChDMlRlc3RTdHJ1Y3RfQSopKG51bGxwdHIpKS0+dW5zaWduZWQzMiwgInUzMiIpLAorICAgICAgQzJGaWVsZERlc2NyaXB0b3IoJigoQzJUZXN0U3RydWN0X0EqKShudWxscHRyKSktPnVuc2lnbmVkNjQsICJ1NjQiKSwKKyAgICAgIEMyRmllbGREZXNjcmlwdG9yKCYoKEMyVGVzdFN0cnVjdF9BKikobnVsbHB0cikpLT5mcDMyLCAgICAgICJmcCIpLAorICAgICAgQzJGaWVsZERlc2NyaXB0b3IoJigoQzJUZXN0U3RydWN0X0EqKShudWxscHRyKSktPnN6LCAgICAgICAic2l6ZSIpLAorICAgICAgQzJGaWVsZERlc2NyaXB0b3IoJigoQzJUZXN0U3RydWN0X0EqKShudWxscHRyKSktPmJsb2IsICAgICAgICJibG9iIiksCisgICAgICBDMkZpZWxkRGVzY3JpcHRvcigmKChDMlRlc3RTdHJ1Y3RfQSopKG51bGxwdHIpKS0+c3RyaW5nLCAgICAgInN0ciIpLAorICAgIC8vICBDMkZpZWxkRGVzY3JpcHRvcigmKChDMlRlc3RTdHJ1Y3RfQSopKG51bGxwdHIpKS0+eWVzTm8sICAgICAgInktbiIpCisgICAgfTsKKworSU5TVEFOVElBVEVfVEVTVF9DQVNFX1AoUG9pbnRlckNvbnN0cnVjdG9yLCBDMlBhcmFtVGVzdF9QYXJhbUZpZWxkTGlzdCwgOjp0ZXN0aW5nOjpWYWx1ZXMoQzJUZXN0U3RydWN0X0FfRkRfUFRSX2ZpZWxkTGlzdCkpOworCisvLyBkZWZpbmUgZmllbGRzIHVzaW5nIEMyRmllbGREZXNjcmlwdG9yIG1lbWJlci1wb2ludGVyIGNvbnN0cnVjdG9yCitjb25zdCBzdGQ6OnZlY3RvcjxDMkZpZWxkRGVzY3JpcHRvcj4gQzJUZXN0U3RydWN0X0FfRkRfTUVNX1BUUl9maWVsZExpc3QgPQorICAgIHsgQzJGaWVsZERlc2NyaXB0b3IoKEMyVGVzdFN0cnVjdF9BKikwLCAmQzJUZXN0U3RydWN0X0E6OnNpZ25lZDMyLCAgICJzMzIiKSwKKyAgICAgIEMyRmllbGREZXNjcmlwdG9yKChDMlRlc3RTdHJ1Y3RfQSopMCwgJkMyVGVzdFN0cnVjdF9BOjpzaWduZWQ2NCwgICAiczY0IiksCisgICAgICBDMkZpZWxkRGVzY3JpcHRvcigoQzJUZXN0U3RydWN0X0EqKTAsICZDMlRlc3RTdHJ1Y3RfQTo6dW5zaWduZWQzMiwgInUzMiIpLAorICAgICAgQzJGaWVsZERlc2NyaXB0b3IoKEMyVGVzdFN0cnVjdF9BKikwLCAmQzJUZXN0U3RydWN0X0E6OnVuc2lnbmVkNjQsICJ1NjQiKSwKKyAgICAgIEMyRmllbGREZXNjcmlwdG9yKChDMlRlc3RTdHJ1Y3RfQSopMCwgJkMyVGVzdFN0cnVjdF9BOjpmcDMyLCAgICAgICJmcCIpLAorICAgICAgQzJGaWVsZERlc2NyaXB0b3IoKEMyVGVzdFN0cnVjdF9BKikwLCAmQzJUZXN0U3RydWN0X0E6OnN6LCAgICAgICAic2l6ZSIpLAorICAgICAgQzJGaWVsZERlc2NyaXB0b3IoKEMyVGVzdFN0cnVjdF9BKikwLCAmQzJUZXN0U3RydWN0X0E6OmJsb2IsICAgICAgICJibG9iIiksCisgICAgICBDMkZpZWxkRGVzY3JpcHRvcigoQzJUZXN0U3RydWN0X0EqKTAsICZDMlRlc3RTdHJ1Y3RfQTo6c3RyaW5nLCAgICAgInN0ciIpLAorICAgIC8vICBDMkZpZWxkRGVzY3JpcHRvcigoQzJUZXN0U3RydWN0X0EqKTAsICZDMlRlc3RTdHJ1Y3RfQTo6eWVzTm8sICAgICAgInktbiIpCisgICAgfTsKKworSU5TVEFOVElBVEVfVEVTVF9DQVNFX1AoTWVtYmVyUG9pbnRlckNvbnN0cnVjdG9yLCBDMlBhcmFtVGVzdF9QYXJhbUZpZWxkTGlzdCwgOjp0ZXN0aW5nOjpWYWx1ZXMoQzJUZXN0U3RydWN0X0FfRkRfTUVNX1BUUl9maWVsZExpc3QpKTsKKworLy8gVGVzdCAyLiBkZWZpbmUgYSBzdHJ1Y3R1cmUgd2l0aCB0d28tc3RlcCBoZWxwZXIgbWV0aG9kcworCitzdHJ1Y3QgQzJUZXN0QVN0cnVjdCB7CisgICAgaW50MzJfdCBzaWduZWQzMjsKKyAgICBpbnQ2NF90IHNpZ25lZDY0WzJdOworICAgIHVpbnQzMl90IHVuc2lnbmVkMzJbMV07CisgICAgdWludDY0X3QgdW5zaWduZWQ2NDsKKyAgICBmbG9hdCBmcDMyOworICAgIEMyU2l6ZVN0cnVjdCBzelszXTsKKyAgICB1aW50OF90IGJsb2JbMTAwXTsKKyAgICBjaGFyIHN0cmluZ1sxMDBdOworICAgIGJvb2wgeWVzTm9bMTAwXTsKKworcHJpdmF0ZTogLy8gdGVzdCBhY2Nlc3MgbGV2ZWwKKyAgICBERUZJTkVfQzJTVFJVQ1QoVGVzdEEpCit9IEMyX1BBQ0s7CisKK0RFU0NSSUJFX0MyU1RSVUNUKFRlc3RBLCB7CisgICAgQzJGSUVMRChzaWduZWQzMiwgInMzMiIpCisgICAgQzJGSUVMRChzaWduZWQ2NCwgInM2NCIpCisgICAgQzJGSUVMRCh1bnNpZ25lZDMyLCAidTMyIikKKyAgICBDMkZJRUxEKHVuc2lnbmVkNjQsICJ1NjQiKQorICAgIEMyRklFTEQoZnAzMiwgImZwIikKKyAgICBDMkZJRUxEKHN6LCAic2l6ZSIpCisgICAgQzJGSUVMRChibG9iLCAiYmxvYiIpCisgICAgQzJGSUVMRChzdHJpbmcsICJzdHIiKQorICAgIC8vIEMyRklFTEQoeWVzTm8sICJ5LW4iKQorfSkgLy8gOyBvcHRpb25hbAorCitJTlNUQU5USUFURV9URVNUX0NBU0VfUChEZXNjcmliZVN0cnVjdDJTdGVwLCBDMlBhcmFtVGVzdF9QYXJhbUZpZWxkTGlzdCwgOjp0ZXN0aW5nOjpWYWx1ZXMoQzJUZXN0QVN0cnVjdDo6RmllbGRMaXN0KCkpKTsKKworLy8gVGVzdCAzLiBkZWZpbmUgYSBzdHJ1Y3R1cmUgd2l0aCBvbmUtc3RlcCBoZWxwZXIgbWV0aG9kCisKK3N0cnVjdCBDMlRlc3RCU3RydWN0IHsKKyAgICBpbnQzMl90IHNpZ25lZDMyOworICAgIGludDY0X3Qgc2lnbmVkNjRbMl07CisgICAgdWludDMyX3QgdW5zaWduZWQzMlsxXTsKKyAgICB1aW50NjRfdCB1bnNpZ25lZDY0OworICAgIGZsb2F0IGZwMzI7CisgICAgQzJTaXplU3RydWN0IHN6WzNdOworICAgIHVpbnQ4X3QgYmxvYlsxMDBdOworICAgIGNoYXIgc3RyaW5nWzEwMF07CisgICAgYm9vbCB5ZXNOb1sxMDBdOworCitwcml2YXRlOiAvLyB0ZXN0IGFjY2VzcyBsZXZlbAorICAgIERFRklORV9BTkRfREVTQ1JJQkVfQzJTVFJVQ1QoVGVzdEIpCisKKyAgICBDMkZJRUxEKHNpZ25lZDMyLCAiczMyIikKKyAgICBDMkZJRUxEKHNpZ25lZDY0LCAiczY0IikKKyAgICBDMkZJRUxEKHVuc2lnbmVkMzIsICJ1MzIiKQorICAgIEMyRklFTEQodW5zaWduZWQ2NCwgInU2NCIpCisgICAgQzJGSUVMRChmcDMyLCAiZnAiKQorICAgIEMyRklFTEQoc3osICJzaXplIikKKyAgICBDMkZJRUxEKGJsb2IsICJibG9iIikKKyAgICBDMkZJRUxEKHN0cmluZywgInN0ciIpCisgICAgLy8gQzJGSUVMRCh5ZXNObywgInktbiIpCit9OworCitJTlNUQU5USUFURV9URVNUX0NBU0VfUChEZXNjcmliZVN0cnVjdDFTdGVwLCBDMlBhcmFtVGVzdF9QYXJhbUZpZWxkTGlzdCwgOjp0ZXN0aW5nOjpWYWx1ZXMoQzJUZXN0QlN0cnVjdDo6RmllbGRMaXN0KCkpKTsKKworLy8gVGVzdCA0LiBmbGV4aWJsZSBtZW1iZXJzCisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+CitjbGFzcyBDMlBhcmFtVGVzdF9GbGV4UGFyYW1GaWVsZExpc3QgOiBwdWJsaWMgOjp0ZXN0aW5nOjpUZXN0IHsKK3Byb3RlY3RlZDoKKyAgICB1c2luZyB0eXBlX3Q9RkQ6OnR5cGVfdDsKKworICAgIC8vIHN0YXRpYyBzdGQ6OnZlY3RvcjxzdGQ6OnZlY3RvcjxDMkZpZWxkRGVzY3JpcHRvcj4+CisgICAgc3RhdGljIHN0ZDo6dmVjdG9yPHN0ZDo6dmVjdG9yPEMyRmllbGREZXNjcmlwdG9yPj4KKyAgICAgICAgICAgIEdldExpc3RzKCk7CisKKyAgICBjb25zdGV4cHIgc3RhdGljIHR5cGVfdCBGbGV4VHlwZSA9CisgICAgICAgICAgICBzdGQ6OmlzX3NhbWU8VCwgaW50MzJfdD46OnZhbHVlID8gRkQ6OklOVDMyIDoKKyAgICAgICAgICAgIHN0ZDo6aXNfc2FtZTxULCBpbnQ2NF90Pjo6dmFsdWUgPyBGRDo6SU5UNjQgOgorICAgICAgICAgICAgc3RkOjppc19zYW1lPFQsIHVpbnQzMl90Pjo6dmFsdWUgPyBGRDo6VUlOVDMyIDoKKyAgICAgICAgICAgIHN0ZDo6aXNfc2FtZTxULCB1aW50NjRfdD46OnZhbHVlID8gRkQ6OlVJTlQ2NCA6CisgICAgICAgICAgICBzdGQ6OmlzX3NhbWU8VCwgZmxvYXQ+Ojp2YWx1ZSA/IEZEOjpGTE9BVCA6CisgICAgICAgICAgICBzdGQ6OmlzX3NhbWU8VCwgdWludDhfdD46OnZhbHVlID8gRkQ6OkJMT0IgOgorICAgICAgICAgICAgc3RkOjppc19zYW1lPFQsIGNoYXI+Ojp2YWx1ZSA/IEZEOjpTVFJJTkcgOgorICAgICAgICAgICAgc3RkOjppc19zYW1lPFQsIEMyU2l6ZVN0cnVjdD46OnZhbHVlID8gQzJTaXplU3RydWN0OjpUWVBFIDogKHR5cGVfdCkwOworICAgIGNvbnN0ZXhwciBzdGF0aWMgc2l6ZV90IEZMRVhfU0laRSA9IHNpemVvZihUKTsKK307CisKK3R5cGVkZWYgOjp0ZXN0aW5nOjpUeXBlczxpbnQzMl90LCBpbnQ2NF90LCBDMlNpemVTdHJ1Y3Q+IEZsZXhUeXBlczsKK1RZUEVEX1RFU1RfQ0FTRShDMlBhcmFtVGVzdF9GbGV4UGFyYW1GaWVsZExpc3QsIEZsZXhUeXBlcyk7CisKK1RZUEVEX1RFU1QoQzJQYXJhbVRlc3RfRmxleFBhcmFtRmllbGRMaXN0LCBWZXJpZnlTdHJ1Y3QpIHsKKyAgICBmb3IgKGF1dG8gYSA6IHRoaXMtPkdldExpc3RzKCkpIHsKKyAgICAgICAgc3RkOjp2ZWN0b3I8QzJGaWVsZERlc2NyaXB0b3I+IGZpZWxkcyA9IGE7CisgICAgICAgIGlmIChmaWVsZHMuc2l6ZSgpID4gMSkgeworICAgICAgICAgICAgRVhQRUNUX0VRKDJ1LCBmaWVsZHMuc2l6ZSgpKTsKKyAgICAgICAgICAgIEVYUEVDVF9FUShDMkZpZWxkRGVzY3JpcHRvcihGRDo6SU5UMzIsIDEsICJzMzIiLCAwLCA0KSwgZmllbGRzWzBdKTsKKyAgICAgICAgICAgIEVYUEVDVF9FUShDMkZpZWxkRGVzY3JpcHRvcih0aGlzLT5GbGV4VHlwZSwgMCwgImZsZXgiLCA0LCB0aGlzLT5GTEVYX1NJWkUpLAorICAgICAgICAgICAgICAgICAgICAgIGZpZWxkc1sxXSk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBFWFBFQ1RfRVEoMXUsIGZpZWxkcy5zaXplKCkpOworICAgICAgICAgICAgRVhQRUNUX0VRKEMyRmllbGREZXNjcmlwdG9yKHRoaXMtPkZsZXhUeXBlLCAwLCAiZmxleCIsIDAsIHRoaXMtPkZMRVhfU0laRSksCisgICAgICAgICAgICAgICAgICAgICAgZmllbGRzWzBdKTsKKyAgICAgICAgfQorICAgIH0KK30KKworc3RydWN0IEMyVGVzdFN0cnVjdF9GbGV4UzMyIHsKKyAgICBpbnQzMl90IG1GbGV4W107CisKKyAgICBjb25zdCBzdGF0aWMgc3RkOjp2ZWN0b3I8QzJGaWVsZERlc2NyaXB0b3I+IF9GSUVMRF9MSVNUOworICAgIHN0YXRpYyBjb25zdCBzdGQ6OnZlY3RvcjxDMkZpZWxkRGVzY3JpcHRvcj4gRmllbGRMaXN0KCk7CisgICAgLy8gZW51bSA6IHVpbnQzMl90IHsgQ09SRV9JTkRFWCA9IGtQYXJhbUluZGV4VGVzdEZsZXgsIEZMRVhfU0laRSA9IDQgfTsKKyAgICAvLyB0eXBlZGVmIEMyVGVzdFN0cnVjdF9GbGV4UzMyIF90eXBlOworICAgIC8vIHR5cGVkZWYgaW50MzJfdCBGbGV4VHlwZTsKK307CisKK2NvbnN0IHN0ZDo6dmVjdG9yPEMyRmllbGREZXNjcmlwdG9yPiBDMlRlc3RTdHJ1Y3RfRmxleFMzMjo6RmllbGRMaXN0KCkgeworICAgIHJldHVybiBfRklFTERfTElTVDsKK30KK2NvbnN0IHN0ZDo6dmVjdG9yPEMyRmllbGREZXNjcmlwdG9yPiBDMlRlc3RTdHJ1Y3RfRmxleFMzMjo6X0ZJRUxEX0xJU1QgPSB7CisgICAgeyBGRDo6SU5UMzIsIDAsICJmbGV4IiwgMCwgNCB9Cit9OworCitzdHJ1Y3QgQzJUZXN0U3RydWN0X0ZsZXhFbmRTMzIgeworICAgIGludDMyX3Qgc2lnbmVkMzI7CisgICAgaW50MzJfdCBtRmxleFtdOworCisgICAgY29uc3Qgc3RhdGljIHN0ZDo6dmVjdG9yPEMyRmllbGREZXNjcmlwdG9yPiBfRklFTERfTElTVDsKKyAgICBzdGF0aWMgY29uc3Qgc3RkOjp2ZWN0b3I8QzJGaWVsZERlc2NyaXB0b3I+IEZpZWxkTGlzdCgpOworICAgIC8vIGVudW0gOiB1aW50MzJfdCB7IENPUkVfSU5ERVggPSBrUGFyYW1JbmRleFRlc3RGbGV4RW5kLCBGTEVYX1NJWkUgPSA0IH07CisgICAgLy8gdHlwZWRlZiBDMlRlc3RTdHJ1Y3RfRmxleEVuZCBfdHlwZTsKKyAgICAvLyB0eXBlZGVmIGludDMyX3QgRmxleFR5cGU7Cit9OworCitjb25zdCBzdGQ6OnZlY3RvcjxDMkZpZWxkRGVzY3JpcHRvcj4gQzJUZXN0U3RydWN0X0ZsZXhFbmRTMzI6OkZpZWxkTGlzdCgpIHsKKyAgICByZXR1cm4gX0ZJRUxEX0xJU1Q7Cit9Citjb25zdCBzdGQ6OnZlY3RvcjxDMkZpZWxkRGVzY3JpcHRvcj4gQzJUZXN0U3RydWN0X0ZsZXhFbmRTMzI6Ol9GSUVMRF9MSVNUID0geworICAgIHsgRkQ6OklOVDMyLCAxLCAiczMyIiwgMCwgNCB9LAorICAgIHsgRkQ6OklOVDMyLCAwLCAiZmxleCIsIDQsIDQgfSwKK307CisKK2NvbnN0IHN0YXRpYyBzdGQ6OnZlY3RvcjxDMkZpZWxkRGVzY3JpcHRvcj4gQzJUZXN0U3RydWN0X0ZsZXhFbmRTMzJfcHRyX2ZpZWxkTGlzdCA9IHsKKyAgICBDMkZpZWxkRGVzY3JpcHRvcigmKChDMlRlc3RTdHJ1Y3RfRmxleEVuZFMzMiopMCktPnNpZ25lZDMyLCAiczMyIiksCisgICAgQzJGaWVsZERlc2NyaXB0b3IoJigoQzJUZXN0U3RydWN0X0ZsZXhFbmRTMzIqKTApLT5tRmxleCwgImZsZXgiKSwKK307CisKK3N0cnVjdCBDMlRlc3RGbGV4UzMyU3RydWN0IHsKKyAgICBpbnQzMl90IG1GbGV4U2lnbmVkMzJbXTsKK3ByaXZhdGU6IC8vIHRlc3QgYWNjZXNzIGxldmVsCisgICAgQzJUZXN0RmxleFMzMlN0cnVjdCgpIHt9CisKKyAgICBERUZJTkVfQU5EX0RFU0NSSUJFX0ZMRVhfQzJTVFJVQ1QoVGVzdEZsZXhTMzIsIG1GbGV4U2lnbmVkMzIpCisgICAgQzJGSUVMRChtRmxleFNpZ25lZDMyLCAiZmxleCIpCit9OworCitzdHJ1Y3QgQzJUZXN0RmxleEVuZFMzMlN0cnVjdCB7CisgICAgaW50MzJfdCBzaWduZWQzMjsKKyAgICBpbnQzMl90IG1GbGV4U2lnbmVkMzJbXTsKK3ByaXZhdGU6IC8vIHRlc3QgYWNjZXNzIGxldmVsCisgICAgQzJUZXN0RmxleEVuZFMzMlN0cnVjdCgpIHt9CisKKyAgICBERUZJTkVfRkxFWF9DMlNUUlVDVChUZXN0RmxleEVuZFMzMiwgbUZsZXhTaWduZWQzMikKK30gQzJfUEFDSzsKKworREVTQ1JJQkVfQzJTVFJVQ1QoVGVzdEZsZXhFbmRTMzIsIHsKKyAgICBDMkZJRUxEKHNpZ25lZDMyLCAiczMyIikKKyAgICBDMkZJRUxEKG1GbGV4U2lnbmVkMzIsICJmbGV4IikKK30pIC8vIDsgb3B0aW9uYWwKKwordGVtcGxhdGU8Pgorc3RkOjp2ZWN0b3I8c3RkOjp2ZWN0b3I8QzJGaWVsZERlc2NyaXB0b3I+PgorLy9zdGQ6OnZlY3RvcjxzdGQ6OnZlY3RvcjxDMkZpZWxkRGVzY3JpcHRvcj4+CitDMlBhcmFtVGVzdF9GbGV4UGFyYW1GaWVsZExpc3Q8aW50MzJfdD46OkdldExpc3RzKCkgeworICAgIHJldHVybiB7CisgICAgICAgIEMyVGVzdFN0cnVjdF9GbGV4UzMyOjpGaWVsZExpc3QoKSwKKyAgICAgICAgQzJUZXN0U3RydWN0X0ZsZXhFbmRTMzI6OkZpZWxkTGlzdCgpLAorICAgICAgICBDMlRlc3RTdHJ1Y3RfRmxleEVuZFMzMl9wdHJfZmllbGRMaXN0LAorICAgICAgICBDMlRlc3RGbGV4UzMyU3RydWN0OjpGaWVsZExpc3QoKSwKKyAgICAgICAgQzJUZXN0RmxleEVuZFMzMlN0cnVjdDo6RmllbGRMaXN0KCksCisgICAgfTsKK30KKworc3RydWN0IEMyVGVzdFN0cnVjdF9GbGV4UzY0IHsKKyAgICBpbnQ2NF90IG1GbGV4U2lnbmVkNjRbXTsKKworICAgIGNvbnN0IHN0YXRpYyBzdGQ6OnZlY3RvcjxDMkZpZWxkRGVzY3JpcHRvcj4gX0ZJRUxEX0xJU1Q7CisgICAgc3RhdGljIGNvbnN0IHN0ZDo6dmVjdG9yPEMyRmllbGREZXNjcmlwdG9yPiBGaWVsZExpc3QoKTsKKyAgICAvLyBlbnVtIDogdWludDMyX3QgeyBDT1JFX0lOREVYID0ga1BhcmFtSW5kZXhUZXN0RmxleFM2NCwgRkxFWF9TSVpFID0gOCB9OworICAgIC8vIHR5cGVkZWYgQzJUZXN0U3RydWN0X0ZsZXhTNjQgX3R5cGU7CisgICAgLy8gdHlwZWRlZiBpbnQ2NF90IEZsZXhUeXBlOworfTsKKworY29uc3Qgc3RkOjp2ZWN0b3I8QzJGaWVsZERlc2NyaXB0b3I+IEMyVGVzdFN0cnVjdF9GbGV4UzY0OjpGaWVsZExpc3QoKSB7CisgICAgcmV0dXJuIF9GSUVMRF9MSVNUOworfQorY29uc3Qgc3RkOjp2ZWN0b3I8QzJGaWVsZERlc2NyaXB0b3I+IEMyVGVzdFN0cnVjdF9GbGV4UzY0OjpfRklFTERfTElTVCA9IHsKKyAgICB7IEZEOjpJTlQ2NCwgMCwgImZsZXgiLCAwLCA4IH0KK307CisKK3N0cnVjdCBDMlRlc3RTdHJ1Y3RfRmxleEVuZFM2NCB7CisgICAgaW50MzJfdCBzaWduZWQzMjsKKyAgICBpbnQ2NF90IG1TaWduZWQ2NEZsZXhbXTsKKworICAgIGNvbnN0IHN0YXRpYyBzdGQ6OnZlY3RvcjxDMkZpZWxkRGVzY3JpcHRvcj4gX0ZJRUxEX0xJU1Q7CisgICAgc3RhdGljIGNvbnN0IHN0ZDo6dmVjdG9yPEMyRmllbGREZXNjcmlwdG9yPiBGaWVsZExpc3QoKTsKKyAgICAvLyBlbnVtIDogdWludDMyX3QgeyBDT1JFX0lOREVYID0gQzJUZXN0U3RydWN0X0ZsZXhFbmRTNjQsIEZMRVhfU0laRSA9IDggfTsKKyAgICAvLyB0eXBlZGVmIEMyVGVzdFN0cnVjdF9GbGV4RW5kUzY0IF90eXBlOworICAgIC8vIHR5cGVkZWYgaW50NjRfdCBGbGV4VHlwZTsKK307CisKK2NvbnN0IHN0ZDo6dmVjdG9yPEMyRmllbGREZXNjcmlwdG9yPiBDMlRlc3RTdHJ1Y3RfRmxleEVuZFM2NDo6RmllbGRMaXN0KCkgeworICAgIHJldHVybiBfRklFTERfTElTVDsKK30KK2NvbnN0IHN0ZDo6dmVjdG9yPEMyRmllbGREZXNjcmlwdG9yPiBDMlRlc3RTdHJ1Y3RfRmxleEVuZFM2NDo6X0ZJRUxEX0xJU1QgPSB7CisgICAgeyBGRDo6SU5UMzIsIDEsICJzMzIiLCAwLCA0IH0sCisgICAgeyBGRDo6SU5UNjQsIDAsICJmbGV4IiwgNCwgOCB9LAorfTsKKworc3RydWN0IEMyVGVzdEZsZXhTNjRTdHJ1Y3QgeworICAgIGludDY0X3QgbUZsZXhTaWduZWQ2NFtdOworICAgIEMyVGVzdEZsZXhTNjRTdHJ1Y3QoKSB7fQorCisgICAgREVGSU5FX0FORF9ERVNDUklCRV9GTEVYX0MyU1RSVUNUKFRlc3RGbGV4UzY0LCBtRmxleFNpZ25lZDY0KQorICAgIEMyRklFTEQobUZsZXhTaWduZWQ2NCwgImZsZXgiKQorfTsKKworc3RydWN0IEMyVGVzdEZsZXhFbmRTNjRTdHJ1Y3QgeworICAgIGludDMyX3Qgc2lnbmVkMzI7CisgICAgaW50NjRfdCBtRmxleFNpZ25lZDY0W107CisgICAgQzJUZXN0RmxleEVuZFM2NFN0cnVjdCgpIHt9CisKKyAgICBERUZJTkVfRkxFWF9DMlNUUlVDVChUZXN0RmxleEVuZFM2NCwgbUZsZXhTaWduZWQ2NCkKK30gQzJfUEFDSzsKKworREVTQ1JJQkVfQzJTVFJVQ1QoVGVzdEZsZXhFbmRTNjQsIHsKKyAgICBDMkZJRUxEKHNpZ25lZDMyLCAiczMyIikKKyAgICBDMkZJRUxEKG1GbGV4U2lnbmVkNjQsICJmbGV4IikKK30pIC8vIDsgb3B0aW9uYWwKKwordGVtcGxhdGU8Pgorc3RkOjp2ZWN0b3I8c3RkOjp2ZWN0b3I8QzJGaWVsZERlc2NyaXB0b3I+PgorLy9zdGQ6OnZlY3RvcjxzdGQ6OnZlY3RvcjxDMkZpZWxkRGVzY3JpcHRvcj4+CitDMlBhcmFtVGVzdF9GbGV4UGFyYW1GaWVsZExpc3Q8aW50NjRfdD46OkdldExpc3RzKCkgeworICAgIHJldHVybiB7CisgICAgICAgIEMyVGVzdFN0cnVjdF9GbGV4UzY0OjpGaWVsZExpc3QoKSwKKyAgICAgICAgQzJUZXN0U3RydWN0X0ZsZXhFbmRTNjQ6OkZpZWxkTGlzdCgpLAorICAgICAgICBDMlRlc3RGbGV4UzY0U3RydWN0OjpGaWVsZExpc3QoKSwKKyAgICAgICAgQzJUZXN0RmxleEVuZFM2NFN0cnVjdDo6RmllbGRMaXN0KCksCisgICAgfTsKK30KKworc3RydWN0IEMyVGVzdFN0cnVjdF9GbGV4U2l6ZSB7CisgICAgQzJTaXplU3RydWN0IG1GbGV4U2l6ZVtdOworCisgICAgY29uc3Qgc3RhdGljIHN0ZDo6dmVjdG9yPEMyRmllbGREZXNjcmlwdG9yPiBfRklFTERfTElTVDsKKyAgICBzdGF0aWMgY29uc3Qgc3RkOjp2ZWN0b3I8QzJGaWVsZERlc2NyaXB0b3I+IEZpZWxkTGlzdCgpOworICAgIC8vIGVudW0gOiB1aW50MzJfdCB7IENPUkVfSU5ERVggPSBrUGFyYW1JbmRleFRlc3RGbGV4U2l6ZSwgRkxFWF9TSVpFID0gOCB9OworICAgIC8vIHR5cGVkZWYgQzJUZXN0U3RydWN0X0ZsZXhTaXplIF90eXBlOworICAgIC8vIHR5cGVkZWYgQzJTaXplU3RydWN0IEZsZXhUeXBlOworfTsKKworY29uc3Qgc3RkOjp2ZWN0b3I8QzJGaWVsZERlc2NyaXB0b3I+IEMyVGVzdFN0cnVjdF9GbGV4U2l6ZTo6RmllbGRMaXN0KCkgeworICAgIHJldHVybiBfRklFTERfTElTVDsKK30KK2NvbnN0IHN0ZDo6dmVjdG9yPEMyRmllbGREZXNjcmlwdG9yPiBDMlRlc3RTdHJ1Y3RfRmxleFNpemU6Ol9GSUVMRF9MSVNUID0geworICAgIHsgQzJTaXplU3RydWN0OjpUWVBFLCAwLCAiZmxleCIsIDAsIHNpemVvZihDMlNpemVTdHJ1Y3QpIH0KK307CisKK3N0cnVjdCBDMlRlc3RTdHJ1Y3RfRmxleEVuZFNpemUgeworICAgIGludDMyX3Qgc2lnbmVkMzI7CisgICAgQzJTaXplU3RydWN0IG1TaXplRmxleFtdOworCisgICAgY29uc3Qgc3RhdGljIHN0ZDo6dmVjdG9yPEMyRmllbGREZXNjcmlwdG9yPiBfRklFTERfTElTVDsKKyAgICBzdGF0aWMgY29uc3Qgc3RkOjp2ZWN0b3I8QzJGaWVsZERlc2NyaXB0b3I+IEZpZWxkTGlzdCgpOworICAgIC8vIGVudW0gOiB1aW50MzJfdCB7IENPUkVfSU5ERVggPSBDMlRlc3RTdHJ1Y3RfRmxleEVuZFNpemUsIEZMRVhfU0laRSA9IDggfTsKKyAgICAvLyB0eXBlZGVmIEMyVGVzdFN0cnVjdF9GbGV4RW5kU2l6ZSBfdHlwZTsKKyAgICAvLyB0eXBlZGVmIEMyU2l6ZVN0cnVjdCBGbGV4VHlwZTsKK307CisKK2NvbnN0IHN0ZDo6dmVjdG9yPEMyRmllbGREZXNjcmlwdG9yPiBDMlRlc3RTdHJ1Y3RfRmxleEVuZFNpemU6OkZpZWxkTGlzdCgpIHsKKyAgICByZXR1cm4gX0ZJRUxEX0xJU1Q7Cit9Citjb25zdCBzdGQ6OnZlY3RvcjxDMkZpZWxkRGVzY3JpcHRvcj4gQzJUZXN0U3RydWN0X0ZsZXhFbmRTaXplOjpfRklFTERfTElTVCA9IHsKKyAgICB7IEZEOjpJTlQzMiwgMSwgInMzMiIsIDAsIDQgfSwKKyAgICB7IEMyU2l6ZVN0cnVjdDo6VFlQRSwgMCwgImZsZXgiLCA0LCBzaXplb2YoQzJTaXplU3RydWN0KSB9LAorfTsKKworc3RydWN0IEMyVGVzdEZsZXhTaXplU3RydWN0IHsKKyAgICBDMlNpemVTdHJ1Y3QgbUZsZXhTaXplW107CisgICAgQzJUZXN0RmxleFNpemVTdHJ1Y3QoKSB7fQorCisgICAgREVGSU5FX0FORF9ERVNDUklCRV9GTEVYX0MyU1RSVUNUKFRlc3RGbGV4U2l6ZSwgbUZsZXhTaXplKQorICAgIEMyRklFTEQobUZsZXhTaXplLCAiZmxleCIpCit9OworCitzdHJ1Y3QgQzJUZXN0RmxleEVuZFNpemVTdHJ1Y3QgeworICAgIGludDMyX3Qgc2lnbmVkMzI7CisgICAgQzJTaXplU3RydWN0IG1GbGV4U2l6ZVtdOworICAgIEMyVGVzdEZsZXhFbmRTaXplU3RydWN0KCkge30KKworICAgIERFRklORV9GTEVYX0MyU1RSVUNUKFRlc3RGbGV4RW5kU2l6ZSwgbUZsZXhTaXplKQorfSBDMl9QQUNLOworCitERVNDUklCRV9DMlNUUlVDVChUZXN0RmxleEVuZFNpemUsIHsKKyAgICBDMkZJRUxEKHNpZ25lZDMyLCAiczMyIikKKyAgICBDMkZJRUxEKG1GbGV4U2l6ZSwgImZsZXgiKQorfSkgLy8gOyBvcHRpb25hbAorCitzdHJ1Y3QgQzJUZXN0QmFzZUZsZXhFbmRTaXplU3RydWN0IHsKKyAgICBpbnQzMl90IHNpZ25lZDMyOworICAgIEMyU2l6ZVN0cnVjdCBtRmxleFNpemVbXTsKKyAgICBDMlRlc3RCYXNlRmxleEVuZFNpemVTdHJ1Y3QoKSB7fQorCisgICAgREVGSU5FX0JBU0VfRkxFWF9DMlNUUlVDVChUZXN0QmFzZUZsZXhFbmRTaXplLCBtRmxleFNpemUpCit9IEMyX1BBQ0s7CisKK0RFU0NSSUJFX0MyU1RSVUNUKFRlc3RCYXNlRmxleEVuZFNpemUsIHsKKyAgICBDMkZJRUxEKHNpZ25lZDMyLCAiczMyIikKKyAgICBDMkZJRUxEKG1GbGV4U2l6ZSwgImZsZXgiKQorfSkgLy8gOyBvcHRpb25hbAorCitzdHJ1Y3QgQzJUZXN0QmFzZUZsZXhFbmRTaXplMlN0cnVjdCB7CisgICAgaW50MzJfdCBzaWduZWQzMjsKKyAgICBDMlNpemVTdHJ1Y3QgbUZsZXhTaXplW107CisgICAgQzJUZXN0QmFzZUZsZXhFbmRTaXplMlN0cnVjdCgpIHt9CisKKyAgICBERUZJTkVfQU5EX0RFU0NSSUJFX0JBU0VfRkxFWF9DMlNUUlVDVChUZXN0QmFzZUZsZXhFbmRTaXplMiwgbUZsZXhTaXplKQorICAgIEMyRklFTEQoc2lnbmVkMzIsICJzMzIiKQorICAgIEMyRklFTEQobUZsZXhTaXplLCAiZmxleCIpCit9OworCit0ZW1wbGF0ZTw+CitzdGQ6OnZlY3RvcjxzdGQ6OnZlY3RvcjxDMkZpZWxkRGVzY3JpcHRvcj4+CisvL3N0ZDo6dmVjdG9yPHN0ZDo6dmVjdG9yPEMyRmllbGREZXNjcmlwdG9yPj4KK0MyUGFyYW1UZXN0X0ZsZXhQYXJhbUZpZWxkTGlzdDxDMlNpemVTdHJ1Y3Q+OjpHZXRMaXN0cygpIHsKKyAgICByZXR1cm4geworICAgICAgICBDMlRlc3RTdHJ1Y3RfRmxleFNpemU6OkZpZWxkTGlzdCgpLAorICAgICAgICBDMlRlc3RTdHJ1Y3RfRmxleEVuZFNpemU6OkZpZWxkTGlzdCgpLAorICAgICAgICBDMlRlc3RGbGV4U2l6ZVN0cnVjdDo6RmllbGRMaXN0KCksCisgICAgICAgIEMyVGVzdEZsZXhFbmRTaXplU3RydWN0OjpGaWVsZExpc3QoKSwKKyAgICAgICAgQzJUZXN0QmFzZUZsZXhFbmRTaXplU3RydWN0OjpGaWVsZExpc3QoKSwKKyAgICAgICAgQzJUZXN0QmFzZUZsZXhFbmRTaXplMlN0cnVjdDo6RmllbGRMaXN0KCksCisgICAgfTsKK30KKworVEVTVF9GKEMyUGFyYW1UZXN0LCBGaWVsZElkKSB7CisgICAgLy8gcG9pbnRlciBjb25zdHJ1Y3RvcgorICAgIEVYUEVDVF9FUShfQzJGaWVsZElkKDAsIDQpLCBfQzJGaWVsZElkKCYoKEMyVGVzdFN0cnVjdF9BKikwKS0+c2lnbmVkMzIpKTsKKyAgICBFWFBFQ1RfRVEoX0MyRmllbGRJZCg0LCA4KSwgX0MyRmllbGRJZCgmKChDMlRlc3RTdHJ1Y3RfQSopMCktPnNpZ25lZDY0KSk7CisgICAgRVhQRUNUX0VRKF9DMkZpZWxkSWQoMjAsIDQpLCBfQzJGaWVsZElkKCYoKEMyVGVzdFN0cnVjdF9BKikwKS0+dW5zaWduZWQzMikpOworICAgIEVYUEVDVF9FUShfQzJGaWVsZElkKDI0LCA4KSwgX0MyRmllbGRJZCgmKChDMlRlc3RTdHJ1Y3RfQSopMCktPnVuc2lnbmVkNjQpKTsKKyAgICBFWFBFQ1RfRVEoX0MyRmllbGRJZCgzMiwgNCksIF9DMkZpZWxkSWQoJigoQzJUZXN0U3RydWN0X0EqKTApLT5mcDMyKSk7CisgICAgRVhQRUNUX0VRKF9DMkZpZWxkSWQoMzYsIDgpLCBfQzJGaWVsZElkKCYoKEMyVGVzdFN0cnVjdF9BKikwKS0+c3opKTsKKyAgICBFWFBFQ1RfRVEoX0MyRmllbGRJZCg2MCwgMSksIF9DMkZpZWxkSWQoJigoQzJUZXN0U3RydWN0X0EqKTApLT5ibG9iKSk7CisgICAgRVhQRUNUX0VRKF9DMkZpZWxkSWQoMTYwLCAxKSwgX0MyRmllbGRJZCgmKChDMlRlc3RTdHJ1Y3RfQSopMCktPnN0cmluZykpOworICAgIEVYUEVDVF9FUShfQzJGaWVsZElkKDI2MCwgMSksIF9DMkZpZWxkSWQoJigoQzJUZXN0U3RydWN0X0EqKTApLT55ZXNObykpOworCisgICAgRVhQRUNUX0VRKF9DMkZpZWxkSWQoMCwgNCksIF9DMkZpZWxkSWQoJigoQzJUZXN0RmxleEVuZFNpemVTdHJ1Y3QqKTApLT5zaWduZWQzMikpOworICAgIEVYUEVDVF9FUShfQzJGaWVsZElkKDQsIDgpLCBfQzJGaWVsZElkKCYoKEMyVGVzdEZsZXhFbmRTaXplU3RydWN0KikwKS0+bUZsZXhTaXplKSk7CisKKyAgICBFWFBFQ1RfRVEoX0MyRmllbGRJZCgwLCA0KSwgX0MyRmllbGRJZCgmKChDMlRlc3RCYXNlRmxleEVuZFNpemVTdHJ1Y3QqKTApLT5zaWduZWQzMikpOworICAgIEVYUEVDVF9FUShfQzJGaWVsZElkKDQsIDgpLCBfQzJGaWVsZElkKCYoKEMyVGVzdEJhc2VGbGV4RW5kU2l6ZVN0cnVjdCopMCktPm1GbGV4U2l6ZSkpOworCisgICAgLy8gbWVtYmVyIHBvaW50ZXIgY29uc3RydWN0b3IKKyAgICBFWFBFQ1RfRVEoX0MyRmllbGRJZCgwLCA0KSwgX0MyRmllbGRJZCgoQzJUZXN0U3RydWN0X0EqKTAsICZDMlRlc3RTdHJ1Y3RfQTo6c2lnbmVkMzIpKTsKKyAgICBFWFBFQ1RfRVEoX0MyRmllbGRJZCg0LCA4KSwgX0MyRmllbGRJZCgoQzJUZXN0U3RydWN0X0EqKTAsICZDMlRlc3RTdHJ1Y3RfQTo6c2lnbmVkNjQpKTsKKyAgICBFWFBFQ1RfRVEoX0MyRmllbGRJZCgyMCwgNCksIF9DMkZpZWxkSWQoKEMyVGVzdFN0cnVjdF9BKikwLCAmQzJUZXN0U3RydWN0X0E6OnVuc2lnbmVkMzIpKTsKKyAgICBFWFBFQ1RfRVEoX0MyRmllbGRJZCgyNCwgOCksIF9DMkZpZWxkSWQoKEMyVGVzdFN0cnVjdF9BKikwLCAmQzJUZXN0U3RydWN0X0E6OnVuc2lnbmVkNjQpKTsKKyAgICBFWFBFQ1RfRVEoX0MyRmllbGRJZCgzMiwgNCksIF9DMkZpZWxkSWQoKEMyVGVzdFN0cnVjdF9BKikwLCAmQzJUZXN0U3RydWN0X0E6OmZwMzIpKTsKKyAgICBFWFBFQ1RfRVEoX0MyRmllbGRJZCgzNiwgOCksIF9DMkZpZWxkSWQoKEMyVGVzdFN0cnVjdF9BKikwLCAmQzJUZXN0U3RydWN0X0E6OnN6KSk7CisgICAgRVhQRUNUX0VRKF9DMkZpZWxkSWQoNjAsIDEpLCBfQzJGaWVsZElkKChDMlRlc3RTdHJ1Y3RfQSopMCwgJkMyVGVzdFN0cnVjdF9BOjpibG9iKSk7CisgICAgRVhQRUNUX0VRKF9DMkZpZWxkSWQoMTYwLCAxKSwgX0MyRmllbGRJZCgoQzJUZXN0U3RydWN0X0EqKTAsICZDMlRlc3RTdHJ1Y3RfQTo6c3RyaW5nKSk7CisgICAgRVhQRUNUX0VRKF9DMkZpZWxkSWQoMjYwLCAxKSwgX0MyRmllbGRJZCgoQzJUZXN0U3RydWN0X0EqKTAsICZDMlRlc3RTdHJ1Y3RfQTo6eWVzTm8pKTsKKworICAgIEVYUEVDVF9FUShfQzJGaWVsZElkKDAsIDQpLCBfQzJGaWVsZElkKChDMlRlc3RGbGV4RW5kU2l6ZVN0cnVjdCopMCwgJkMyVGVzdEZsZXhFbmRTaXplU3RydWN0OjpzaWduZWQzMikpOworICAgIEVYUEVDVF9FUShfQzJGaWVsZElkKDQsIDgpLCBfQzJGaWVsZElkKChDMlRlc3RGbGV4RW5kU2l6ZVN0cnVjdCopMCwgJkMyVGVzdEZsZXhFbmRTaXplU3RydWN0OjptRmxleFNpemUpKTsKKworICAgIEVYUEVDVF9FUShfQzJGaWVsZElkKDAsIDQpLCBfQzJGaWVsZElkKChDMlRlc3RCYXNlRmxleEVuZFNpemVTdHJ1Y3QqKTAsICZDMlRlc3RCYXNlRmxleEVuZFNpemVTdHJ1Y3Q6OnNpZ25lZDMyKSk7CisgICAgRVhQRUNUX0VRKF9DMkZpZWxkSWQoNCwgOCksIF9DMkZpZWxkSWQoKEMyVGVzdEJhc2VGbGV4RW5kU2l6ZVN0cnVjdCopMCwgJkMyVGVzdEJhc2VGbGV4RW5kU2l6ZVN0cnVjdDo6bUZsZXhTaXplKSk7CisKKyAgICAvLyBtZW1iZXIgcG9pbnRlciBzYW5zIHR5cGUgcG9pbnRlcgorICAgIEVYUEVDVF9FUShfQzJGaWVsZElkKDAsIDQpLCBfQzJGaWVsZElkKCZDMlRlc3RTdHJ1Y3RfQTo6c2lnbmVkMzIpKTsKKyAgICBFWFBFQ1RfRVEoX0MyRmllbGRJZCg0LCA4KSwgX0MyRmllbGRJZCgmQzJUZXN0U3RydWN0X0E6OnNpZ25lZDY0KSk7CisgICAgRVhQRUNUX0VRKF9DMkZpZWxkSWQoMjAsIDQpLCBfQzJGaWVsZElkKCZDMlRlc3RTdHJ1Y3RfQTo6dW5zaWduZWQzMikpOworICAgIEVYUEVDVF9FUShfQzJGaWVsZElkKDI0LCA4KSwgX0MyRmllbGRJZCgmQzJUZXN0U3RydWN0X0E6OnVuc2lnbmVkNjQpKTsKKyAgICBFWFBFQ1RfRVEoX0MyRmllbGRJZCgzMiwgNCksIF9DMkZpZWxkSWQoJkMyVGVzdFN0cnVjdF9BOjpmcDMyKSk7CisgICAgRVhQRUNUX0VRKF9DMkZpZWxkSWQoMzYsIDgpLCBfQzJGaWVsZElkKCZDMlRlc3RTdHJ1Y3RfQTo6c3opKTsKKyAgICBFWFBFQ1RfRVEoX0MyRmllbGRJZCg2MCwgMSksIF9DMkZpZWxkSWQoJkMyVGVzdFN0cnVjdF9BOjpibG9iKSk7CisgICAgRVhQRUNUX0VRKF9DMkZpZWxkSWQoMTYwLCAxKSwgX0MyRmllbGRJZCgmQzJUZXN0U3RydWN0X0E6OnN0cmluZykpOworICAgIEVYUEVDVF9FUShfQzJGaWVsZElkKDI2MCwgMSksIF9DMkZpZWxkSWQoJkMyVGVzdFN0cnVjdF9BOjp5ZXNObykpOworCisgICAgRVhQRUNUX0VRKF9DMkZpZWxkSWQoMCwgNCksIF9DMkZpZWxkSWQoJkMyVGVzdEZsZXhFbmRTaXplU3RydWN0OjpzaWduZWQzMikpOworICAgIEVYUEVDVF9FUShfQzJGaWVsZElkKDQsIDgpLCBfQzJGaWVsZElkKCZDMlRlc3RGbGV4RW5kU2l6ZVN0cnVjdDo6bUZsZXhTaXplKSk7CisKKyAgICBFWFBFQ1RfRVEoX0MyRmllbGRJZCgwLCA0KSwgX0MyRmllbGRJZCgmQzJUZXN0QmFzZUZsZXhFbmRTaXplU3RydWN0OjpzaWduZWQzMikpOworICAgIEVYUEVDVF9FUShfQzJGaWVsZElkKDQsIDgpLCBfQzJGaWVsZElkKCZDMlRlc3RCYXNlRmxleEVuZFNpemVTdHJ1Y3Q6Om1GbGV4U2l6ZSkpOworCisgICAgdHlwZWRlZiBDMkdsb2JhbFBhcmFtPEMySW5mbywgQzJUZXN0QVN0cnVjdD4gQzJUZXN0QUluZm87CisgICAgdHlwZWRlZiBDMkdsb2JhbFBhcmFtPEMySW5mbywgQzJUZXN0RmxleEVuZFNpemVTdHJ1Y3Q+IEMyVGVzdEZsZXhFbmRTaXplSW5mbzsKKyAgICB0eXBlZGVmIEMyR2xvYmFsUGFyYW08QzJJbmZvLCBDMlRlc3RCYXNlRmxleEVuZFNpemVTdHJ1Y3QsIGtQYXJhbUluZGV4VGVzdEZsZXhFbmRTaXplPiBDMlRlc3RGbGV4RW5kU2l6ZUluZm9Gcm9tQmFzZTsKKworICAgIC8vIHBvaW50ZXIgY29uc3RydWN0b3IgaW4gQzJQYXJhbQorICAgIEVYUEVDVF9FUShfQzJGaWVsZElkKDgsIDQpLCBfQzJGaWVsZElkKCYoKEMyVGVzdEFJbmZvKikwKS0+c2lnbmVkMzIpKTsKKyAgICBFWFBFQ1RfRVEoX0MyRmllbGRJZCgxMiwgOCksIF9DMkZpZWxkSWQoJigoQzJUZXN0QUluZm8qKTApLT5zaWduZWQ2NCkpOworICAgIEVYUEVDVF9FUShfQzJGaWVsZElkKDI4LCA0KSwgX0MyRmllbGRJZCgmKChDMlRlc3RBSW5mbyopMCktPnVuc2lnbmVkMzIpKTsKKyAgICBFWFBFQ1RfRVEoX0MyRmllbGRJZCgzMiwgOCksIF9DMkZpZWxkSWQoJigoQzJUZXN0QUluZm8qKTApLT51bnNpZ25lZDY0KSk7CisgICAgRVhQRUNUX0VRKF9DMkZpZWxkSWQoNDAsIDQpLCBfQzJGaWVsZElkKCYoKEMyVGVzdEFJbmZvKikwKS0+ZnAzMikpOworICAgIEVYUEVDVF9FUShfQzJGaWVsZElkKDQ0LCA4KSwgX0MyRmllbGRJZCgmKChDMlRlc3RBSW5mbyopMCktPnN6KSk7CisgICAgRVhQRUNUX0VRKF9DMkZpZWxkSWQoNjgsIDEpLCBfQzJGaWVsZElkKCYoKEMyVGVzdEFJbmZvKikwKS0+YmxvYikpOworICAgIEVYUEVDVF9FUShfQzJGaWVsZElkKDE2OCwgMSksIF9DMkZpZWxkSWQoJigoQzJUZXN0QUluZm8qKTApLT5zdHJpbmcpKTsKKyAgICBFWFBFQ1RfRVEoX0MyRmllbGRJZCgyNjgsIDEpLCBfQzJGaWVsZElkKCYoKEMyVGVzdEFJbmZvKikwKS0+eWVzTm8pKTsKKworICAgIEVYUEVDVF9FUShfQzJGaWVsZElkKDgsIDQpLCBfQzJGaWVsZElkKCYoKEMyVGVzdEZsZXhFbmRTaXplSW5mbyopMCktPm0uc2lnbmVkMzIpKTsKKyAgICBFWFBFQ1RfRVEoX0MyRmllbGRJZCgxMiwgOCksIF9DMkZpZWxkSWQoJigoQzJUZXN0RmxleEVuZFNpemVJbmZvKikwKS0+bS5tRmxleFNpemUpKTsKKworICAgIEVYUEVDVF9FUShfQzJGaWVsZElkKDgsIDQpLCBfQzJGaWVsZElkKCYoKEMyVGVzdEZsZXhFbmRTaXplSW5mb0Zyb21CYXNlKikwKS0+bS5zaWduZWQzMikpOworICAgIEVYUEVDVF9FUShfQzJGaWVsZElkKDEyLCA4KSwgX0MyRmllbGRJZCgmKChDMlRlc3RGbGV4RW5kU2l6ZUluZm9Gcm9tQmFzZSopMCktPm0ubUZsZXhTaXplKSk7CisKKyAgICAvLyBtZW1iZXIgcG9pbnRlciBpbiBDMlBhcmFtCisgICAgRVhQRUNUX0VRKF9DMkZpZWxkSWQoOCwgNCksIF9DMkZpZWxkSWQoKEMyVGVzdEFJbmZvKikwLCAmQzJUZXN0QUluZm86OnNpZ25lZDMyKSk7CisgICAgRVhQRUNUX0VRKF9DMkZpZWxkSWQoMTIsIDgpLCBfQzJGaWVsZElkKChDMlRlc3RBSW5mbyopMCwgJkMyVGVzdEFJbmZvOjpzaWduZWQ2NCkpOworICAgIEVYUEVDVF9FUShfQzJGaWVsZElkKDI4LCA0KSwgX0MyRmllbGRJZCgoQzJUZXN0QUluZm8qKTAsICZDMlRlc3RBSW5mbzo6dW5zaWduZWQzMikpOworICAgIEVYUEVDVF9FUShfQzJGaWVsZElkKDMyLCA4KSwgX0MyRmllbGRJZCgoQzJUZXN0QUluZm8qKTAsICZDMlRlc3RBSW5mbzo6dW5zaWduZWQ2NCkpOworICAgIEVYUEVDVF9FUShfQzJGaWVsZElkKDQwLCA0KSwgX0MyRmllbGRJZCgoQzJUZXN0QUluZm8qKTAsICZDMlRlc3RBSW5mbzo6ZnAzMikpOworICAgIEVYUEVDVF9FUShfQzJGaWVsZElkKDQ0LCA4KSwgX0MyRmllbGRJZCgoQzJUZXN0QUluZm8qKTAsICZDMlRlc3RBSW5mbzo6c3opKTsKKyAgICBFWFBFQ1RfRVEoX0MyRmllbGRJZCg2OCwgMSksIF9DMkZpZWxkSWQoKEMyVGVzdEFJbmZvKikwLCAmQzJUZXN0QUluZm86OmJsb2IpKTsKKyAgICBFWFBFQ1RfRVEoX0MyRmllbGRJZCgxNjgsIDEpLCBfQzJGaWVsZElkKChDMlRlc3RBSW5mbyopMCwgJkMyVGVzdEFJbmZvOjpzdHJpbmcpKTsKKyAgICBFWFBFQ1RfRVEoX0MyRmllbGRJZCgyNjgsIDEpLCBfQzJGaWVsZElkKChDMlRlc3RBSW5mbyopMCwgJkMyVGVzdEFJbmZvOjp5ZXNObykpOworCisgICAgLy8gTk9URTogY2Fubm90IHVzZSBhIG1lbWJlciBwb2ludGVyIGZvciBmbGV4IHBhcmFtcyBkdWUgdG8gaW50cm9kdWN0aW9uIG9mICdtJworICAgIC8vIEVYUEVDVF9FUShfQzJGaWVsZElkKDgsIDQpLCBfQzJGaWVsZElkKCZDMlRlc3RGbGV4RW5kU2l6ZUluZm86Om0uc2lnbmVkMzIpKTsKKyAgICAvLyBFWFBFQ1RfRVEoX0MyRmllbGRJZCgxMiwgOCksIF9DMkZpZWxkSWQoJkMyVGVzdEZsZXhFbmRTaXplSW5mbzo6bS5tRmxleFNpemUpKTsKKworICAgIC8vIEVYUEVDVF9FUShfQzJGaWVsZElkKDgsIDQpLCBfQzJGaWVsZElkKCZDMlRlc3RGbGV4RW5kU2l6ZUluZm9Gcm9tQmFzZTo6bS5zaWduZWQzMikpOworICAgIC8vIEVYUEVDVF9FUShfQzJGaWVsZElkKDEyLCA4KSwgX0MyRmllbGRJZCgmQzJUZXN0RmxleEVuZFNpemVJbmZvRnJvbUJhc2U6Om0ubUZsZXhTaXplKSk7CisKKworfQorCitzdHJ1Y3QgUzMyIHsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBULCBjbGFzcyBCPXR5cGVuYW1lIHN0ZDo6cmVtb3ZlX2V4dGVudDxUPjo6dHlwZT4KKyAgICBpbmxpbmUgUzMyKGNvbnN0IFQqKSB7CisgICAgICAgIHN0YXRpY19hc3NlcnQoIXN0ZDo6aXNfYXJyYXk8VD46OnZhbHVlLCAic2hvdWxkIG5vdCBiZSBhbiBhcnJheSIpOworICAgICAgICBzdGF0aWNfYXNzZXJ0KHN0ZDo6aXNfc2FtZTxCLCBpbnQzMl90Pjo6dmFsdWUsICJzaG91bGQgYmUgaW50MzJfdCIpOworICAgIH0KK307CisKK3N0cnVjdCBGTFggeworICAgIHRlbXBsYXRlPHR5cGVuYW1lIFUsIHR5cGVuYW1lIFQsIGNsYXNzIEI9dHlwZW5hbWUgc3RkOjpyZW1vdmVfZXh0ZW50PFQ+Ojp0eXBlPgorICAgIGlubGluZSBGTFgoY29uc3QgVCosIGNvbnN0IFUqKSB7CisgICAgICAgIHN0YXRpY19hc3NlcnQoc3RkOjppc19hcnJheTxUPjo6dmFsdWUsICJzaG91bGQgYmUgYW4gYXJyYXkiKTsKKyAgICAgICAgc3RhdGljX2Fzc2VydChzdGQ6OmV4dGVudDxUPjo6dmFsdWUgPT0gMCwgInNob3VsZCBiZSBhbiBhcnJheSBvZiAwIGV4dGVudCIpOworICAgICAgICBzdGF0aWNfYXNzZXJ0KHN0ZDo6aXNfc2FtZTxCLCBVPjo6dmFsdWUsICJzaG91bGQgYmUgdHlwZSBVIik7CisgICAgfQorfTsKKworc3RydWN0IE1QIHsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBVLCB0eXBlbmFtZSBULCB0eXBlbmFtZSBFeHBlY3RlZFUsIHR5cGVuYW1lIFVuZXhwZWN0ZWRVPgorICAgIGlubGluZSBNUChUIFU6OiosIGNvbnN0IEV4cGVjdGVkVSosIGNvbnN0IFVuZXhwZWN0ZWRVKikgeworICAgICAgICBzdGF0aWNfYXNzZXJ0KCFzdGQ6OmlzX3NhbWU8VSwgVW5leHBlY3RlZFU+Ojp2YWx1ZSwgInNob3VsZCBub3QgYmUgbWVtYmVyIHBvaW50ZXIgb2YgdGhlIGJhc2UgdHlwZSIpOworICAgICAgICBzdGF0aWNfYXNzZXJ0KHN0ZDo6aXNfc2FtZTxVLCBFeHBlY3RlZFU+Ojp2YWx1ZSwgInNob3VsZCBiZSBtZW1iZXIgcG9pbnRlciBvZiB0aGUgZGVyaXZlZCB0eXBlIik7CisgICAgfQorCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVSwgdHlwZW5hbWUgVCwgdHlwZW5hbWUgQiwgdHlwZW5hbWUgRD4KKyAgICBpbmxpbmUgTVAoVCBEOjoqLCBjb25zdCBEKikgeyB9Cit9OworCit2b2lkIGNvbXBpbGVkU3RhdGljX2FycmF5VHlwZVByb3BhZ2F0aW9uVGVzdCgpIHsKKyAgICAodm9pZClTMzIoJigoQzJUZXN0RmxleEVuZFMzMlN0cnVjdCAqKTApLT5zaWduZWQzMik7CisgICAgKHZvaWQpRkxYKCYoKEMyVGVzdEZsZXhFbmRTMzJTdHJ1Y3QgKikwKS0+bUZsZXhTaWduZWQzMiwgKGludDMyX3QqKTApOworICAgICh2b2lkKUZMWCgmKChDMlRlc3RGbGV4UzMyU3RydWN0ICopMCktPm1GbGV4U2lnbmVkMzIsIChpbnQzMl90KikwKTsKKworICAgIHR5cGVkZWYgQzJHbG9iYWxQYXJhbTxDMkluZm8sIEMyVGVzdEFTdHJ1Y3Q+IEMyVGVzdEFJbmZvOworCisgICAgLy8gVFJJQ0tZOiAmZGVyaXZlZENsYXNzOjpiYXNlTWVtYmVyIGhhcyB0eXBlIG9mIGJhc2VDbGFzczo6KgorICAgIHN0YXRpY19hc3NlcnQoc3RkOjppc19zYW1lPGRlY2x0eXBlKCZDMlRlc3RBSW5mbzo6c2lnbmVkMzIpLCBpbnQzMl90IEMyVGVzdEFTdHJ1Y3Q6Oio+Ojp2YWx1ZSwKKyAgICAgICAgICAgICAgICAgICJiYXNlIG1lbWJlciBwb2ludGVyIHNob3VsZCBoYXZlIGJhc2UgY2xhc3MgaW4gdHlwZSIpOworCisgICAgLy8gdGhlcmVmb3JlLCBtZW1iZXIgcG9pbnRlciBleHBhbmRzIHRvIGJhc2VDbGFzczo6KiBpbiB0ZW1wbGF0ZXMKKyAgICAodm9pZClNUCgmQzJUZXN0QUluZm86OnNpZ25lZDMyLAorICAgICAgICAgICAgIChDMlRlc3RBU3RydWN0KikwIC8qIGV4cGVjdGVkICovLCAoQzJUZXN0QUluZm8qKTAgLyogdW5leHBlY3RlZCAqLyk7CisgICAgLy8gYnV0IGNhbiBiZSBjYXN0IHRvIGRlcml2ZWRDbGFzczo6KgorICAgICh2b2lkKU1QKChpbnQzMl90IEMyVGVzdEFJbmZvOjoqKSZDMlRlc3RBSW5mbzo6c2lnbmVkMzIsCisgICAgICAgICAgICAgKEMyVGVzdEFJbmZvKikwIC8qIGV4cGVjdGVkICovLCAoQzJUZXN0QVN0cnVjdCopMCAvKiB1bmV4cGVjdGVkICovKTsKKworICAgIC8vIFRSSUNLWTogYmFzZUNsYXNzOjoqIGRvZXMgbm90IGF1dG9jb252ZXJ0IHRvIGRlcml2ZWRDbGFzczo6KiBldmVuIGluIHRlbXBsYXRlcworICAgIC8vICh2b2lkKU1QKCZDMlRlc3RBSW5mbzo6c2lnbmVkMzIsIChDMlRlc3RBSW5mbyopMCk7Cit9CisKK1RFU1RfRihDMlBhcmFtVGVzdCwgTWVtYmVyUG9pbnRlckNhc3QpIHsKKyAgICB0eXBlZGVmIEMyR2xvYmFsUGFyYW08QzJJbmZvLCBDMlRlc3RBU3RydWN0PiBDMlRlc3RBSW5mbzsKKworICAgIHN0YXRpY19hc3NlcnQob2Zmc2V0b2YoQzJUZXN0QUluZm8sIHNpZ25lZDMyKSA9PSA4LCAib2Zmc2V0IHNob3VsZCBiZSA4Iik7CisgICAgY29uc3RleHByIGludDMyX3QgQzJUZXN0QVN0cnVjdDo6KiBzMzJwdHIgPSAmQzJUZXN0QUluZm86OnNpZ25lZDMyOworICAgIGNvbnN0ZXhwciBpbnQzMl90IEMyVGVzdEFJbmZvOjoqIHMzMnB0cl9kZXJpdmVkID0gKGludDMyX3QgQzJUZXN0QVN0cnVjdDo6KikmQzJUZXN0QUluZm86OnNpZ25lZDMyOworICAgIGNvbnN0ZXhwciBpbnQzMl90IEMyVGVzdEFJbmZvOjoqIHMzMnB0cl9jYXN0MmRlcml2ZWQgPSAoaW50MzJfdCBDMlRlc3RBSW5mbzo6KilzMzJwdHI7CisgICAgQzJUZXN0QUluZm8gKmluZm8gPSAoQzJUZXN0QUluZm8gKikyNTY7CisgICAgQzJUZXN0QVN0cnVjdCAqc3RydWt0ID0gKEMyVGVzdEFTdHJ1Y3QgKilpbmZvOworICAgIGludDMyX3QgKmluZm9fczMyX2Rlcml2ZWQgPSAmKGluZm8tPipzMzJwdHJfZGVyaXZlZCk7CisgICAgaW50MzJfdCAqaW5mb19zMzJfY2FzdDJkZXJpdmVkID0gJihpbmZvLT4qczMycHRyX2Nhc3QyZGVyaXZlZCk7CisgICAgaW50MzJfdCAqaW5mb19zMzIgPSAmKGluZm8tPipzMzJwdHIpOworICAgIGludDMyX3QgKnN0cnVrdF9zMzIgPSAmKHN0cnVrdC0+KnMzMnB0cik7CisKKyAgICBFWFBFQ1RfRVEoMjU2dSwgKHVpbnRwdHJfdClpbmZvKTsKKyAgICBFWFBFQ1RfRVEoMjY0dSwgKHVpbnRwdHJfdClzdHJ1a3QpOworICAgIEVYUEVDVF9FUSgyNjR1LCAodWludHB0cl90KWluZm9fczMyX2Rlcml2ZWQpOworICAgIEVYUEVDVF9FUSgyNjR1LCAodWludHB0cl90KWluZm9fczMyX2Nhc3QyZGVyaXZlZCk7CisgICAgRVhQRUNUX0VRKDI2NHUsICh1aW50cHRyX3QpaW5mb19zMzIpOworICAgIEVYUEVDVF9FUSgyNjR1LCAodWludHB0cl90KXN0cnVrdF9zMzIpOworCisgICAgdHlwZWRlZiBDMkdsb2JhbFBhcmFtPEMySW5mbywgQzJUZXN0RmxleEVuZFNpemVTdHJ1Y3Q+IEMyVGVzdEZsZXhFbmRTaXplSW5mbzsKKyAgICBzdGF0aWNfYXNzZXJ0KG9mZnNldG9mKEMyVGVzdEZsZXhFbmRTaXplSW5mbywgbS5zaWduZWQzMikgPT0gOCwgIm9mZnNldCBzaG91bGQgYmUgOCIpOworICAgIHN0YXRpY19hc3NlcnQob2Zmc2V0b2YoQzJUZXN0RmxleEVuZFNpemVJbmZvLCBtLm1GbGV4U2l6ZSkgPT0gMTIsICJvZmZzZXQgc2hvdWxkIGJlIDEyIik7CisKKyAgICB0eXBlZGVmIEMyR2xvYmFsUGFyYW08QzJJbmZvLCBDMlRlc3RCYXNlRmxleEVuZFNpemVTdHJ1Y3QsIGtQYXJhbUluZGV4VGVzdEZsZXhFbmRTaXplPiBDMlRlc3RGbGV4RW5kU2l6ZUluZm9Gcm9tQmFzZTsKKyAgICBzdGF0aWNfYXNzZXJ0KG9mZnNldG9mKEMyVGVzdEZsZXhFbmRTaXplSW5mb0Zyb21CYXNlLCBtLnNpZ25lZDMyKSA9PSA4LCAib2Zmc2V0IHNob3VsZCBiZSA4Iik7CisgICAgc3RhdGljX2Fzc2VydChvZmZzZXRvZihDMlRlc3RGbGV4RW5kU2l6ZUluZm9Gcm9tQmFzZSwgbS5tRmxleFNpemUpID09IDEyLCAib2Zmc2V0IHNob3VsZCBiZSAxMiIpOworfQorCisvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09IFBBUkFNIFVTQUdFIFRFU1RTID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KKworc3RydWN0IEMyTnVtYmVyU3RydWN0IHsKKyAgICBpbnQzMl90IG1OdW1iZXI7CisgICAgQzJOdW1iZXJTdHJ1Y3QoKSB7fQorICAgIEMyTnVtYmVyU3RydWN0KGludDMyX3QgX251bWJlcikgOiBtTnVtYmVyKF9udW1iZXIpIHt9CisKKyAgICBERUZJTkVfQU5EX0RFU0NSSUJFX0MyU1RSVUNUKE51bWJlcikKKyAgICBDMkZJRUxEKG1OdW1iZXIsICJudW1iZXIiKQorfTsKKworc3RydWN0IEMyTnVtYmVyQmFzZVN0cnVjdCB7CisgICAgaW50MzJfdCBtTnVtYmVyOworICAgIEMyTnVtYmVyQmFzZVN0cnVjdCgpIHt9CisgICAgQzJOdW1iZXJCYXNlU3RydWN0KGludDMyX3QgX251bWJlcikgOiBtTnVtYmVyKF9udW1iZXIpIHt9CisKKyAgICBERUZJTkVfQU5EX0RFU0NSSUJFX0JBU0VfQzJTVFJVQ1QoTnVtYmVyQmFzZSkKKyAgICBDMkZJRUxEKG1OdW1iZXIsICJudW1iZXIiKQorfTsKKworc3RydWN0IEMyTnVtYmVyc1N0cnVjdCB7CisgICAgaW50MzJfdCBtTnVtYmVyc1tdOworICAgIEMyTnVtYmVyc1N0cnVjdCgpIHt9CisKKyAgICBERUZJTkVfQU5EX0RFU0NSSUJFX0ZMRVhfQzJTVFJVQ1QoTnVtYmVycywgbU51bWJlcnMpCisgICAgQzJGSUVMRChtTnVtYmVycywgIm51bWJlcnMiKQorfTsKK3N0YXRpY19hc3NlcnQoc2l6ZW9mKEMyTnVtYmVyc1N0cnVjdCkgPT0gMCwgIkMyTnVtYmVyc1N0cnVjdCBoYXMgaW5jb3JyZWN0IHNpemUiKTsKKwordHlwZWRlZiBDMkdsb2JhbFBhcmFtPEMySW5mbywgQzJOdW1iZXJTdHJ1Y3Q+IEMyTnVtYmVySW5mbzsKKwordHlwZWRlZiBDMkdsb2JhbFBhcmFtPEMyVHVuaW5nLCBDMk51bWJlclN0cnVjdD4gQzJOdW1iZXJUdW5pbmc7Cit0eXBlZGVmICAgQzJQb3J0UGFyYW08QzJUdW5pbmcsIEMyTnVtYmVyU3RydWN0PiBDMk51bWJlclBvcnRUdW5pbmc7Cit0eXBlZGVmIEMyU3RyZWFtUGFyYW08QzJUdW5pbmcsIEMyTnVtYmVyU3RydWN0PiBDMk51bWJlclN0cmVhbVR1bmluZzsKKwordHlwZWRlZiBDMkdsb2JhbFBhcmFtPEMyVHVuaW5nLCBDMk51bWJlcnNTdHJ1Y3Q+IEMyTnVtYmVyc1R1bmluZzsKK3R5cGVkZWYgICBDMlBvcnRQYXJhbTxDMlR1bmluZywgQzJOdW1iZXJzU3RydWN0PiBDMk51bWJlcnNQb3J0VHVuaW5nOwordHlwZWRlZiBDMlN0cmVhbVBhcmFtPEMyVHVuaW5nLCBDMk51bWJlcnNTdHJ1Y3Q+IEMyTnVtYmVyc1N0cmVhbVR1bmluZzsKKworLy8KKyNpZiAwCisKK3ZvaWQgdGVzdCgpIHsKKyAgICBDMk51bWJlclN0cnVjdCBzKDEwKTsKKyAgICAodm9pZClDMk51bWJlclN0cnVjdDo6RmllbGRMaXN0KCk7Cit9OworCit0eXBlZGVmIEMyU3RyZWFtUGFyYW08QzJUdW5pbmcsIEMySW50NjRWYWx1ZSwga1BhcmFtSW5kZXhOdW1iZXJCPiBDMk51bWJlckNvbmZpZzQ7Cit0eXBlZGVmIEMyUG9ydFBhcmFtPEMyVHVuaW5nLCBDMkludDMyVmFsdWUsIGtQYXJhbUluZGV4TnVtYmVyPiBDMk51bWJlckNvbmZpZzM7Cit0eXBlZGVmIEMyR2xvYmFsUGFyYW08QzJUdW5pbmcsIEMyU3RyaW5nVmFsdWUsIGtQYXJhbUluZGV4TnVtYmVyPiBDMlZpZGVvTmFtZUNvbmZpZzsKKwordm9pZCB0ZXN0MygpIHsKKyAgICBDMk51bWJlckNvbmZpZzMgcygxMCk7CisgICAgcy52YWx1ZSA9IDExOworICAgIHMgPSAxMjsKKyAgICAodm9pZClDMk51bWJlckNvbmZpZzM6OkZpZWxkTGlzdCgpOworICAgIHN0ZDo6c2hhcmVkX3B0cjxDMlZpZGVvTmFtZUNvbmZpZz4gbiA9IEMyVmlkZW9OYW1lQ29uZmlnOjpBbGxvY1NoYXJlZCgyNSk7CisgICAgc3RyY3B5KG4tPm0udmFsdWUsICJsYWpvcyIpOworICAgIEMyTnVtYmVyQ29uZmlnNCB0KGZhbHNlLCAwLCAxMSk7CisgICAgdC52YWx1ZSA9IDE1OworfTsKKworc3RydWN0IEMyTnVtYmVyc1N0cnVjdCB7CisgICAgaW50MzJfdCBtTnVtYmVyc1tdOworICAgIGVudW0geyBDT1JFX0lOREVYID0ga1BhcmFtSW5kZXhOdW1iZXIgfTsKKyAgICBjb25zdCBzdGF0aWMgc3RkOjp2ZWN0b3I8QzJGaWVsZERlc2NyaXB0b3I+IEZpZWxkTGlzdCgpOworICAgIHN0YXRpYyBjb25zdCBzdGQ6OnZlY3RvcjxDMkZpZWxkRGVzY3JpcHRvcj4gRmllbGRMaXN0KCk7CisgICAgQzJOdW1iZXJzU3RydWN0KCkge30KKworICAgIEZMRVgoQzJOdW1iZXJzU3RydWN0LCBtTnVtYmVycyk7Cit9OworCitzdGF0aWNfYXNzZXJ0KHNpemVvZihDMk51bWJlcnNTdHJ1Y3QpID09IDAsICJ5ZXMiKTsKKworCit0eXBlZGVmIEMyR2xvYmFsUGFyYW08QzJJbmZvLCBDMk51bWJlcnNTdHJ1Y3Q+IEMyTnVtYmVyc0luZm87CisKK2NvbnN0IHN0ZDo6dmVjdG9yPEMyRmllbGREZXNjcmlwdG9yPiBDMk51bWJlcnNTdHJ1Y3Q6OkZpZWxkTGlzdCgpIHsKKyAgICByZXR1cm4gX0ZJRUxEX0xJU1Q7Cit9Citjb25zdCBzdGQ6OnZlY3RvcjxDMkZpZWxkRGVzY3JpcHRvcj4gQzJOdW1iZXJzU3RydWN0OjpfRklFTERfTElTVCA9CisvLyAgICB7IHsgRkQ6OklOVDMyLCAwLCAid2lkdGhzIiB9IH07CisgICAgeyBDMkZpZWxkRGVzY3JpcHRvcigmKChDMk51bWJlcnNTdHJ1Y3QqKShudWxscHRyKSktPm1OdW1iZXJzLCAibnVtYmVyIikgfTsKKwordHlwZWRlZiBDMlBvcnRQYXJhbTxDMlR1bmluZywgQzJOdW1iZXJTdHJ1Y3Q+IEMyTnVtYmVyQ29uZmlnOworCitzdGQ6OnZlY3RvcjxDMkZpZWxkRGVzY3JpcHRvcj4gbXlMaXN0ID0gQzJOdW1iZXJDb25maWc6OkZpZWxkTGlzdCgpOworCisgICAgc3RkOjp1bmlxdWVfcHRyPEMyUGFyYW1EZXNjcmlwdG9yPiBfX3Rlc3RfZGVzY3JpYmUodWludDMyX3QgcGFyYW1UeXBlKSB7CisgICAgICAgIHN0ZDo6bGlzdDxDMkZpZWxkRGVzY3JpcHRvcj4gZmllbGRzID0gZGVzY3JpYmVDMlBhcmFtczxDMk51bWJlckNvbmZpZz4oKTsKKworICAgICAgICBhdXRvIHdpZHRocyA9IEMyTnVtYmVyc0luZm86OkFsbG9jU2hhcmVkKDUpOworICAgICAgICB3aWR0aHMtPmZsZXhDb3VudCgpOworICAgICAgICB3aWR0aHMtPm0ubU51bWJlcnNbNF0gPSAxOworCisgICAgICAgIHRlc3QoKTsKKyAgICAgICAgdGVzdDMoKTsKKworICAgICAgICBDMk51bWJlckNvbmZpZyBvdXRwdXRXaWR0aChmYWxzZSwgMTIzKTsKKworICAgICAgICBDMlBhcmFtOjpJbmRleCBpbmRleChwYXJhbVR5cGUpOworICAgICAgICBzd2l0Y2ggKHBhcmFtVHlwZSkgeworICAgICAgICBjYXNlIEMyTnVtYmVyQ29uZmlnOjpDT1JFX0lOREVYOgorICAgICAgICAgICAgcmV0dXJuIHN0ZDo6dW5pcXVlX3B0cjxDMlBhcmFtRGVzY3JpcHRvcj4obmV3IEMyUGFyYW1EZXNjcmlwdG9yeworICAgICAgICAgICAgICAgIHRydWUgLyogaXNSZXF1aXJlZCAqLywKKyAgICAgICAgICAgICAgICAibnVtYmVyIiwKKyAgICAgICAgICAgICAgICBpbmRleCwKKyAgICAgICAgICAgIH0pOworICAgICAgICB9CisgICAgICAgIHJldHVybiBudWxscHRyOworICAgIH0KKworCit9IC8vIG5hbWVzcGFjZSBhbmRyb2lkCisKKyNlbmRpZgorLy8KKwordGVtcGxhdGU8dHlwZW5hbWUgVD4KK2Jvb2wgY2FuU2V0UG9ydChUICZvLCBib29sIG91dHB1dCkgeyByZXR1cm4gby5zZXRQb3J0KG91dHB1dCk7IH0KK2Jvb2wgY2FuU2V0UG9ydCguLi4pIHsgcmV0dXJuIGZhbHNlOyB9CisKK3RlbXBsYXRlPHR5cGVuYW1lIFMsIHR5cGVuYW1lPWRlY2x0eXBlKCgoUyopMCktPnNldFBvcnQodHJ1ZSkpPgorc3RhdGljIHN0ZDo6dHJ1ZV90eXBlIF9jYW5DYWxsU2V0UG9ydChpbnQpOwordGVtcGxhdGU8dHlwZW5hbWU+CitzdGF0aWMgc3RkOjpmYWxzZV90eXBlIF9jYW5DYWxsU2V0UG9ydCguLi4pOworI2RlZmluZSBjYW5DYWxsU2V0UG9ydCh4KSBkZWNsdHlwZShfY2FuQ2FsbFNldFBvcnQ8c3RkOjpyZW1vdmVfcmVmZXJlbmNlPGRlY2x0eXBlKHgpPjo6dHlwZT4oMCkpOjp2YWx1ZQorCisvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gU1RBVElDIFRFU1RTID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLworCitzdGF0aWNfYXNzZXJ0KF9DMkNvbXBhcmFibGU8aW50Pjo6dmFsdWUsICJpbnQgaXMgbm90IGNvbXBhcmFibGUiKTsKK3N0YXRpY19hc3NlcnQoIV9DMkNvbXBhcmFibGU8dm9pZD46OnZhbHVlLCAidm9pZCBpcyBjb21wYXJhYmxlIik7CisKK3N0cnVjdCBDMl9ISURFIF90ZXN0MCB7CisgICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IF90ZXN0MCYpOworICAgIGJvb2wgb3BlcmF0b3IhPShjb25zdCBfdGVzdDAmKTsKK307CitzdHJ1Y3QgQzJfSElERSBfdGVzdDEgeworICAgIGJvb2wgb3BlcmF0b3I9PShjb25zdCBfdGVzdDEmKTsKK307CitzdHJ1Y3QgQzJfSElERSBfdGVzdDIgeworICAgIGJvb2wgb3BlcmF0b3IhPShjb25zdCBfdGVzdDImKTsKK307CitzdGF0aWNfYXNzZXJ0KF9DMkNvbXBhcmFibGU8X3Rlc3QwPjo6dmFsdWUsICJjbGFzcyB3aXRoID09IGFuZCAhPSBpcyBub3QgY29tcGFyYWJsZSIpOworc3RhdGljX2Fzc2VydChfQzJDb21wYXJhYmxlPF90ZXN0MT46OnZhbHVlLCAiY2xhc3Mgd2l0aCA9PSBpcyBub3QgY29tcGFyYWJsZSIpOworc3RhdGljX2Fzc2VydChfQzJDb21wYXJhYmxlPF90ZXN0Mj46OnZhbHVlLCAiY2xhc3Mgd2l0aCAhPSBpcyBub3QgY29tcGFyYWJsZSIpOworCisvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gQzJQQVJBTSBURVNUUyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KKworc3RydWN0IF9DMlBhcmFtSW5zcGVjdG9yIHsKKyAgICBzdGF0aWMgdm9pZCBTdGF0aWNUZXN0KCk7CisgICAgc3RhdGljIHZvaWQgU3RhdGljRnJvbUJhc2VUZXN0KCk7CisgICAgc3RhdGljIHZvaWQgU3RhdGljRmxleFRlc3QoKTsKKyAgICBzdGF0aWMgdm9pZCBTdGF0aWNGbGV4RnJvbUJhc2VUZXN0KCk7Cit9OworCisvLyBURVNUX0YoX0MyUGFyYW1JbnNwZWN0b3IsIFN0YXRpY1Rlc3QpIHsKK3ZvaWQgX0MyUGFyYW1JbnNwZWN0b3I6OlN0YXRpY1Rlc3QoKSB7CisgICAgdHlwZWRlZiBDMlBhcmFtOjpJbmRleCBJOworCisgICAgLy8gQzJOdW1iZXJTdHJ1Y3Q6IENPUkVfSU5ERVggPSBrSW5kZXggICAgICAgICAgICAgICAgICAgICAgICAgIChhcmdzKQorICAgIHN0YXRpY19hc3NlcnQoQzJOdW1iZXJTdHJ1Y3Q6OkNPUkVfSU5ERVggPT0ga1BhcmFtSW5kZXhOdW1iZXIsICJiYWQgaW5kZXgiKTsKKyAgICBzdGF0aWNfYXNzZXJ0KHNpemVvZihDMk51bWJlclN0cnVjdCkgPT0gNCwgImJhZCBzaXplIik7CisKKyAgICAvLyBDMk51bWJlclR1bmluZzogICAgICAgICAgICAga0luZGV4IHwgdHVuIHwgZ2xvYmFsICAgICAgICAgICAoYXJncykKKyAgICBzdGF0aWNfYXNzZXJ0KEMyTnVtYmVyVHVuaW5nOjpDT1JFX0lOREVYID09IGtQYXJhbUluZGV4TnVtYmVyLCAiYmFkIGluZGV4Iik7CisgICAgc3RhdGljX2Fzc2VydChDMk51bWJlclR1bmluZzo6UEFSQU1fVFlQRSA9PSAoa1BhcmFtSW5kZXhOdW1iZXIgfCBJOjpLSU5EX1RVTklORyB8IEk6OkRJUl9HTE9CQUwpLCAiYmFkIGluZGV4Iik7CisgICAgc3RhdGljX2Fzc2VydChzaXplb2YoQzJOdW1iZXJUdW5pbmcpID09IDEyLCAiYmFkIHNpemUiKTsKKworICAgIHN0YXRpY19hc3NlcnQob2Zmc2V0b2YoQzJOdW1iZXJUdW5pbmcsIF9tU2l6ZSkgPT0gMCwgImJhZCBzaXplIik7CisgICAgc3RhdGljX2Fzc2VydChvZmZzZXRvZihDMk51bWJlclR1bmluZywgX21JbmRleCkgPT0gNCwgImJhZCBvZmZzZXQiKTsKKyAgICBzdGF0aWNfYXNzZXJ0KG9mZnNldG9mKEMyTnVtYmVyVHVuaW5nLCBtTnVtYmVyKSA9PSA4LCAiYmFkIG9mZnNldCIpOworCisgICAgLy8gQzJOdW1iZXJQb3J0VHVuaW5nOiAgICAgICAgIGtJbmRleCB8IHR1biB8IHBvcnQgICAgICAgICAgICAgKGJvb2wsIGFyZ3MpCisgICAgc3RhdGljX2Fzc2VydChzaXplb2YoQzJOdW1iZXJQb3J0VHVuaW5nKSA9PSAxMiwgImJhZCBzaXplIik7CisgICAgLy8gQzJOdW1iZXJQb3J0VHVuaW5nOjppbnB1dDogIGtJbmRleCB8IHR1biB8IHBvcnQgfCBpbnB1dCAgICAgKGFyZ3MpCisgICAgLy8gQzJOdW1iZXJQb3J0VHVuaW5nOjpvdXRwdXQ6IGtJbmRleCB8IHR1biB8IHBvcnQgfCBvdXRwdXQgICAgKGFyZ3MpCisgICAgc3RhdGljX2Fzc2VydChDMk51bWJlclBvcnRUdW5pbmc6OmlucHV0OjpDT1JFX0lOREVYID09CisgICAgICAgICAgICAgICAgICBrUGFyYW1JbmRleE51bWJlciwgImJhZCBpbmRleCIpOworICAgIHN0YXRpY19hc3NlcnQoQzJOdW1iZXJQb3J0VHVuaW5nOjppbnB1dDo6UEFSQU1fVFlQRSA9PQorICAgICAgICAgICAgICAgICAgKGtQYXJhbUluZGV4TnVtYmVyIHwgSTo6S0lORF9UVU5JTkcgfCBJOjpESVJfSU5QVVQpLCAiYmFkIGluZGV4Iik7CisgICAgc3RhdGljX2Fzc2VydChDMk51bWJlclBvcnRUdW5pbmc6Om91dHB1dDo6Q09SRV9JTkRFWCA9PQorICAgICAgICAgICAgICAgICAga1BhcmFtSW5kZXhOdW1iZXIsICJiYWQgaW5kZXgiKTsKKyAgICBzdGF0aWNfYXNzZXJ0KEMyTnVtYmVyUG9ydFR1bmluZzo6b3V0cHV0OjpQQVJBTV9UWVBFID09CisgICAgICAgICAgICAgICAgICAoa1BhcmFtSW5kZXhOdW1iZXIgfCBJOjpLSU5EX1RVTklORyB8IEk6OkRJUl9PVVRQVVQpLCAiYmFkIGluZGV4Iik7CisgICAgc3RhdGljX2Fzc2VydChzaXplb2YoQzJOdW1iZXJQb3J0VHVuaW5nOjppbnB1dCkgPT0gMTIsICJiYWQgc2l6ZSIpOworICAgIHN0YXRpY19hc3NlcnQoc2l6ZW9mKEMyTnVtYmVyUG9ydFR1bmluZzo6b3V0cHV0KSA9PSAxMiwgImJhZCBzaXplIik7CisgICAgc3RhdGljX2Fzc2VydChvZmZzZXRvZihDMk51bWJlclBvcnRUdW5pbmc6OmlucHV0LCBfbVNpemUpID09IDAsICJiYWQgc2l6ZSIpOworICAgIHN0YXRpY19hc3NlcnQob2Zmc2V0b2YoQzJOdW1iZXJQb3J0VHVuaW5nOjppbnB1dCwgX21JbmRleCkgPT0gNCwgImJhZCBvZmZzZXQiKTsKKyAgICBzdGF0aWNfYXNzZXJ0KG9mZnNldG9mKEMyTnVtYmVyUG9ydFR1bmluZzo6aW5wdXQsIG1OdW1iZXIpID09IDgsICJiYWQgb2Zmc2V0Iik7CisgICAgc3RhdGljX2Fzc2VydChvZmZzZXRvZihDMk51bWJlclBvcnRUdW5pbmc6Om91dHB1dCwgX21TaXplKSA9PSAwLCAiYmFkIHNpemUiKTsKKyAgICBzdGF0aWNfYXNzZXJ0KG9mZnNldG9mKEMyTnVtYmVyUG9ydFR1bmluZzo6b3V0cHV0LCBfbUluZGV4KSA9PSA0LCAiYmFkIG9mZnNldCIpOworICAgIHN0YXRpY19hc3NlcnQob2Zmc2V0b2YoQzJOdW1iZXJQb3J0VHVuaW5nOjpvdXRwdXQsIG1OdW1iZXIpID09IDgsICJiYWQgb2Zmc2V0Iik7CisKKyAgICAvLyBDMk51bWJlclN0cmVhbVR1bmluZzogICAgICAga0luZGV4IHwgdHVuIHwgc3RyICAgICAgICAgICAgICAoYm9vbCwgdWludCwgYXJncykKKyAgICBzdGF0aWNfYXNzZXJ0KHNpemVvZihDMk51bWJlclN0cmVhbVR1bmluZykgPT0gMTJ1LCAiYmFkIHNpemUiKTsKKyAgICAvLyBDMk51bWJlclN0cmVhbVR1bmluZzo6aW5wdXQga0luZGV4IHwgdHVuIHwgc3RyIHwgaW5wdXQgICAgICAoaW50LCBhcmdzKQorICAgIC8vIEMyTnVtYmVyU3RyZWFtVHVuaW5nOjpvdXRwdXQga0l4ICAgfCB0dW4gfCBzdHIgfCBvdXRwdXQgICAgIChpbnQsIGFyZ3MpCisgICAgc3RhdGljX2Fzc2VydChDMk51bWJlclN0cmVhbVR1bmluZzo6aW5wdXQ6OkNPUkVfSU5ERVggPT0KKyAgICAgICAgICAgICAgICAgIGtQYXJhbUluZGV4TnVtYmVyLCAiYmFkIGluZGV4Iik7CisgICAgc3RhdGljX2Fzc2VydChDMk51bWJlclN0cmVhbVR1bmluZzo6aW5wdXQ6OlBBUkFNX1RZUEUgPT0KKyAgICAgICAgICAgICAgICAgIChrUGFyYW1JbmRleE51bWJlciB8IEk6OktJTkRfVFVOSU5HIHwgSTo6RElSX0lOUFVUIHwgSTo6SVNfU1RSRUFNX0ZMQUcpLCAiYmFkIGluZGV4Iik7CisgICAgc3RhdGljX2Fzc2VydChDMk51bWJlclN0cmVhbVR1bmluZzo6b3V0cHV0OjpDT1JFX0lOREVYID09CisgICAgICAgICAgICAgICAgICBrUGFyYW1JbmRleE51bWJlciwgImJhZCBpbmRleCIpOworICAgIHN0YXRpY19hc3NlcnQoQzJOdW1iZXJTdHJlYW1UdW5pbmc6Om91dHB1dDo6UEFSQU1fVFlQRSA9PQorICAgICAgICAgICAgICAgICAgKGtQYXJhbUluZGV4TnVtYmVyIHwgSTo6S0lORF9UVU5JTkcgfCBJOjpESVJfT1VUUFVUIHwgSTo6SVNfU1RSRUFNX0ZMQUcpLCAiYmFkIGluZGV4Iik7CisgICAgc3RhdGljX2Fzc2VydChzaXplb2YoQzJOdW1iZXJTdHJlYW1UdW5pbmc6OmlucHV0KSA9PSAxMnUsICJiYWQgc2l6ZSIpOworICAgIHN0YXRpY19hc3NlcnQoc2l6ZW9mKEMyTnVtYmVyU3RyZWFtVHVuaW5nOjpvdXRwdXQpID09IDEydSwgImJhZCBzaXplIik7CisgICAgc3RhdGljX2Fzc2VydChvZmZzZXRvZihDMk51bWJlclN0cmVhbVR1bmluZzo6aW5wdXQsIF9tU2l6ZSkgPT0gMCwgImJhZCBzaXplIik7CisgICAgc3RhdGljX2Fzc2VydChvZmZzZXRvZihDMk51bWJlclN0cmVhbVR1bmluZzo6aW5wdXQsIF9tSW5kZXgpID09IDQsICJiYWQgb2Zmc2V0Iik7CisgICAgc3RhdGljX2Fzc2VydChvZmZzZXRvZihDMk51bWJlclN0cmVhbVR1bmluZzo6aW5wdXQsIG1OdW1iZXIpID09IDgsICJiYWQgb2Zmc2V0Iik7CisgICAgc3RhdGljX2Fzc2VydChvZmZzZXRvZihDMk51bWJlclN0cmVhbVR1bmluZzo6b3V0cHV0LCBfbVNpemUpID09IDAsICJiYWQgc2l6ZSIpOworICAgIHN0YXRpY19hc3NlcnQob2Zmc2V0b2YoQzJOdW1iZXJTdHJlYW1UdW5pbmc6Om91dHB1dCwgX21JbmRleCkgPT0gNCwgImJhZCBvZmZzZXQiKTsKKyAgICBzdGF0aWNfYXNzZXJ0KG9mZnNldG9mKEMyTnVtYmVyU3RyZWFtVHVuaW5nOjpvdXRwdXQsIG1OdW1iZXIpID09IDgsICJiYWQgb2Zmc2V0Iik7Cit9CisKK3ZvaWQgX0MyUGFyYW1JbnNwZWN0b3I6OlN0YXRpY0Zyb21CYXNlVGVzdCgpIHsKKyAgICBlbnVtIHsga1BhcmFtSW5kZXhNeSA9IDMxMDIgfTsKKyAgICB0eXBlZGVmIEMyTnVtYmVyQmFzZVN0cnVjdCBDMk15U3RydWN0OworICAgIHR5cGVkZWYgQzJHbG9iYWxQYXJhbTxDMlNldHRpbmcsIEMyTXlTdHJ1Y3QsIGtQYXJhbUluZGV4TXk+IEMyTXlTZXR0aW5nOworICAgIHR5cGVkZWYgICBDMlBvcnRQYXJhbTxDMlNldHRpbmcsIEMyTXlTdHJ1Y3QsIGtQYXJhbUluZGV4TXk+IEMyTXlQb3J0U2V0dGluZzsKKyAgICB0eXBlZGVmIEMyU3RyZWFtUGFyYW08QzJTZXR0aW5nLCBDMk15U3RydWN0LCBrUGFyYW1JbmRleE15PiBDMk15U3RyZWFtU2V0dGluZzsKKworICAgIHR5cGVkZWYgQzJQYXJhbTo6SW5kZXggSTsKKworICAgIC8vIEMyTXlTdHJ1Y3QgaGFzIG5vIENPUkVfSU5ERVgKKyAgICAvL3N0YXRpY19hc3NlcnQoQzJNeVN0cnVjdDo6Q09SRV9JTkRFWCA9PSBrUGFyYW1JbmRleE15LCAiYmFkIGluZGV4Iik7CisgICAgc3RhdGljX2Fzc2VydChzaXplb2YoQzJNeVN0cnVjdCkgPT0gNCwgImJhZCBzaXplIik7CisKKyAgICAvLyBDMk15U2V0dGluZzogICAgICAgICAgICAga0luZGV4IHwgdHVuIHwgZ2xvYmFsICAgICAgICAgICAoYXJncykKKyAgICBzdGF0aWNfYXNzZXJ0KEMyTXlTZXR0aW5nOjpDT1JFX0lOREVYID09IGtQYXJhbUluZGV4TXksICJiYWQgaW5kZXgiKTsKKyAgICBzdGF0aWNfYXNzZXJ0KEMyTXlTZXR0aW5nOjpQQVJBTV9UWVBFID09IChrUGFyYW1JbmRleE15IHwgSTo6S0lORF9TRVRUSU5HIHwgSTo6RElSX0dMT0JBTCksICJiYWQgaW5kZXgiKTsKKyAgICBzdGF0aWNfYXNzZXJ0KHNpemVvZihDMk15U2V0dGluZykgPT0gMTIsICJiYWQgc2l6ZSIpOworCisgICAgc3RhdGljX2Fzc2VydChvZmZzZXRvZihDMk15U2V0dGluZywgX21TaXplKSA9PSAwLCAiYmFkIHNpemUiKTsKKyAgICBzdGF0aWNfYXNzZXJ0KG9mZnNldG9mKEMyTXlTZXR0aW5nLCBfbUluZGV4KSA9PSA0LCAiYmFkIG9mZnNldCIpOworICAgIHN0YXRpY19hc3NlcnQob2Zmc2V0b2YoQzJNeVNldHRpbmcsIG1OdW1iZXIpID09IDgsICJiYWQgb2Zmc2V0Iik7CisKKyAgICAvLyBDMk15UG9ydFNldHRpbmc6ICAgICAgICAga0luZGV4IHwgdHVuIHwgcG9ydCAgICAgICAgICAgICAoYm9vbCwgYXJncykKKyAgICBzdGF0aWNfYXNzZXJ0KHNpemVvZihDMk15UG9ydFNldHRpbmcpID09IDEyLCAiYmFkIHNpemUiKTsKKyAgICAvLyBDMk15UG9ydFNldHRpbmc6OmlucHV0OiAga0luZGV4IHwgdHVuIHwgcG9ydCB8IGlucHV0ICAgICAoYXJncykKKyAgICAvLyBDMk15UG9ydFNldHRpbmc6Om91dHB1dDoga0luZGV4IHwgdHVuIHwgcG9ydCB8IG91dHB1dCAgICAoYXJncykKKyAgICBzdGF0aWNfYXNzZXJ0KEMyTXlQb3J0U2V0dGluZzo6aW5wdXQ6OkNPUkVfSU5ERVggPT0KKyAgICAgICAgICAgICAgICAgIGtQYXJhbUluZGV4TXksICJiYWQgaW5kZXgiKTsKKyAgICBzdGF0aWNfYXNzZXJ0KEMyTXlQb3J0U2V0dGluZzo6aW5wdXQ6OlBBUkFNX1RZUEUgPT0KKyAgICAgICAgICAgICAgICAgIChrUGFyYW1JbmRleE15IHwgSTo6S0lORF9TRVRUSU5HIHwgSTo6RElSX0lOUFVUKSwgImJhZCBpbmRleCIpOworICAgIHN0YXRpY19hc3NlcnQoQzJNeVBvcnRTZXR0aW5nOjpvdXRwdXQ6OkNPUkVfSU5ERVggPT0KKyAgICAgICAgICAgICAgICAgIGtQYXJhbUluZGV4TXksICJiYWQgaW5kZXgiKTsKKyAgICBzdGF0aWNfYXNzZXJ0KEMyTXlQb3J0U2V0dGluZzo6b3V0cHV0OjpQQVJBTV9UWVBFID09CisgICAgICAgICAgICAgICAgICAoa1BhcmFtSW5kZXhNeSB8IEk6OktJTkRfU0VUVElORyB8IEk6OkRJUl9PVVRQVVQpLCAiYmFkIGluZGV4Iik7CisgICAgc3RhdGljX2Fzc2VydChzaXplb2YoQzJNeVBvcnRTZXR0aW5nOjppbnB1dCkgPT0gMTIsICJiYWQgc2l6ZSIpOworICAgIHN0YXRpY19hc3NlcnQoc2l6ZW9mKEMyTXlQb3J0U2V0dGluZzo6b3V0cHV0KSA9PSAxMiwgImJhZCBzaXplIik7CisgICAgc3RhdGljX2Fzc2VydChvZmZzZXRvZihDMk15UG9ydFNldHRpbmc6OmlucHV0LCBfbVNpemUpID09IDAsICJiYWQgc2l6ZSIpOworICAgIHN0YXRpY19hc3NlcnQob2Zmc2V0b2YoQzJNeVBvcnRTZXR0aW5nOjppbnB1dCwgX21JbmRleCkgPT0gNCwgImJhZCBvZmZzZXQiKTsKKyAgICBzdGF0aWNfYXNzZXJ0KG9mZnNldG9mKEMyTXlQb3J0U2V0dGluZzo6aW5wdXQsIG1OdW1iZXIpID09IDgsICJiYWQgb2Zmc2V0Iik7CisgICAgc3RhdGljX2Fzc2VydChvZmZzZXRvZihDMk15UG9ydFNldHRpbmc6Om91dHB1dCwgX21TaXplKSA9PSAwLCAiYmFkIHNpemUiKTsKKyAgICBzdGF0aWNfYXNzZXJ0KG9mZnNldG9mKEMyTXlQb3J0U2V0dGluZzo6b3V0cHV0LCBfbUluZGV4KSA9PSA0LCAiYmFkIG9mZnNldCIpOworICAgIHN0YXRpY19hc3NlcnQob2Zmc2V0b2YoQzJNeVBvcnRTZXR0aW5nOjpvdXRwdXQsIG1OdW1iZXIpID09IDgsICJiYWQgb2Zmc2V0Iik7CisKKyAgICAvLyBDMk15U3RyZWFtU2V0dGluZzogICAgICAga0luZGV4IHwgdHVuIHwgc3RyICAgICAgICAgICAgICAoYm9vbCwgdWludCwgYXJncykKKyAgICBzdGF0aWNfYXNzZXJ0KHNpemVvZihDMk15U3RyZWFtU2V0dGluZykgPT0gMTJ1LCAiYmFkIHNpemUiKTsKKyAgICAvLyBDMk15U3RyZWFtU2V0dGluZzo6aW5wdXQga0luZGV4IHwgdHVuIHwgc3RyIHwgaW5wdXQgICAgICAoaW50LCBhcmdzKQorICAgIC8vIEMyTXlTdHJlYW1TZXR0aW5nOjpvdXRwdXQga0l4ICAgfCB0dW4gfCBzdHIgfCBvdXRwdXQgICAgIChpbnQsIGFyZ3MpCisgICAgc3RhdGljX2Fzc2VydChDMk15U3RyZWFtU2V0dGluZzo6aW5wdXQ6OkNPUkVfSU5ERVggPT0KKyAgICAgICAgICAgICAgICAgIGtQYXJhbUluZGV4TXksICJiYWQgaW5kZXgiKTsKKyAgICBzdGF0aWNfYXNzZXJ0KEMyTXlTdHJlYW1TZXR0aW5nOjppbnB1dDo6UEFSQU1fVFlQRSA9PQorICAgICAgICAgICAgICAgICAgKGtQYXJhbUluZGV4TXkgfCBJOjpLSU5EX1NFVFRJTkcgfCBJOjpESVJfSU5QVVQgfCBJOjpJU19TVFJFQU1fRkxBRyksICJiYWQgaW5kZXgiKTsKKyAgICBzdGF0aWNfYXNzZXJ0KEMyTXlTdHJlYW1TZXR0aW5nOjpvdXRwdXQ6OkNPUkVfSU5ERVggPT0KKyAgICAgICAgICAgICAgICAgIGtQYXJhbUluZGV4TXksICJiYWQgaW5kZXgiKTsKKyAgICBzdGF0aWNfYXNzZXJ0KEMyTXlTdHJlYW1TZXR0aW5nOjpvdXRwdXQ6OlBBUkFNX1RZUEUgPT0KKyAgICAgICAgICAgICAgICAgIChrUGFyYW1JbmRleE15IHwgSTo6S0lORF9TRVRUSU5HIHwgSTo6RElSX09VVFBVVCB8IEk6OklTX1NUUkVBTV9GTEFHKSwgImJhZCBpbmRleCIpOworICAgIHN0YXRpY19hc3NlcnQoc2l6ZW9mKEMyTXlTdHJlYW1TZXR0aW5nOjppbnB1dCkgPT0gMTJ1LCAiYmFkIHNpemUiKTsKKyAgICBzdGF0aWNfYXNzZXJ0KHNpemVvZihDMk15U3RyZWFtU2V0dGluZzo6b3V0cHV0KSA9PSAxMnUsICJiYWQgc2l6ZSIpOworICAgIHN0YXRpY19hc3NlcnQob2Zmc2V0b2YoQzJNeVN0cmVhbVNldHRpbmc6OmlucHV0LCBfbVNpemUpID09IDAsICJiYWQgc2l6ZSIpOworICAgIHN0YXRpY19hc3NlcnQob2Zmc2V0b2YoQzJNeVN0cmVhbVNldHRpbmc6OmlucHV0LCBfbUluZGV4KSA9PSA0LCAiYmFkIG9mZnNldCIpOworICAgIHN0YXRpY19hc3NlcnQob2Zmc2V0b2YoQzJNeVN0cmVhbVNldHRpbmc6OmlucHV0LCBtTnVtYmVyKSA9PSA4LCAiYmFkIG9mZnNldCIpOworICAgIHN0YXRpY19hc3NlcnQob2Zmc2V0b2YoQzJNeVN0cmVhbVNldHRpbmc6Om91dHB1dCwgX21TaXplKSA9PSAwLCAiYmFkIHNpemUiKTsKKyAgICBzdGF0aWNfYXNzZXJ0KG9mZnNldG9mKEMyTXlTdHJlYW1TZXR0aW5nOjpvdXRwdXQsIF9tSW5kZXgpID09IDQsICJiYWQgb2Zmc2V0Iik7CisgICAgc3RhdGljX2Fzc2VydChvZmZzZXRvZihDMk15U3RyZWFtU2V0dGluZzo6b3V0cHV0LCBtTnVtYmVyKSA9PSA4LCAiYmFkIG9mZnNldCIpOworfQorCit2b2lkIF9DMlBhcmFtSW5zcGVjdG9yOjpTdGF0aWNGbGV4VGVzdCgpIHsKKyAgICB0eXBlZGVmIEMyUGFyYW06OkluZGV4IEk7CisKKyAgICAvLyBDMk51bWJlcnNTdHJ1Y3Q6IENPUkVfSU5ERVggPSBrSW5kZXggICAgICAgICAgICAgICAgICAgICAgICAgIChhcmdzKQorICAgIHN0YXRpY19hc3NlcnQoQzJOdW1iZXJzU3RydWN0OjpDT1JFX0lOREVYID09IChJOjpJU19GTEVYX0ZMQUcgfCBrUGFyYW1JbmRleE51bWJlcnMpLCAiYmFkIGluZGV4Iik7CisgICAgc3RhdGljX2Fzc2VydChzaXplb2YoQzJOdW1iZXJzU3RydWN0KSA9PSAwLCAiYmFkIHNpemUiKTsKKworICAgIC8vIEMyTnVtYmVyc1R1bmluZzogICAgICAgICAgICAga0luZGV4IHwgdHVuIHwgZ2xvYmFsICAgICAgICAgICAoYXJncykKKyAgICBzdGF0aWNfYXNzZXJ0KEMyTnVtYmVyc1R1bmluZzo6Q09SRV9JTkRFWCA9PSAoSTo6SVNfRkxFWF9GTEFHIHwga1BhcmFtSW5kZXhOdW1iZXJzKSwgImJhZCBpbmRleCIpOworICAgIHN0YXRpY19hc3NlcnQoQzJOdW1iZXJzVHVuaW5nOjpQQVJBTV9UWVBFID09IChJOjpJU19GTEVYX0ZMQUcgfCBrUGFyYW1JbmRleE51bWJlcnMgfCBJOjpLSU5EX1RVTklORyB8IEk6OkRJUl9HTE9CQUwpLCAiYmFkIGluZGV4Iik7CisgICAgc3RhdGljX2Fzc2VydChzaXplb2YoQzJOdW1iZXJzVHVuaW5nKSA9PSA4LCAiYmFkIHNpemUiKTsKKworICAgIHN0YXRpY19hc3NlcnQob2Zmc2V0b2YoQzJOdW1iZXJzVHVuaW5nLCBfbVNpemUpID09IDAsICJiYWQgc2l6ZSIpOworICAgIHN0YXRpY19hc3NlcnQob2Zmc2V0b2YoQzJOdW1iZXJzVHVuaW5nLCBfbUluZGV4KSA9PSA0LCAiYmFkIG9mZnNldCIpOworICAgIHN0YXRpY19hc3NlcnQob2Zmc2V0b2YoQzJOdW1iZXJzVHVuaW5nLCBtLm1OdW1iZXJzKSA9PSA4LCAiYmFkIG9mZnNldCIpOworCisgICAgLy8gQzJOdW1iZXJzUG9ydFR1bmluZzogICAgICAgICBrSW5kZXggfCB0dW4gfCBwb3J0ICAgICAgICAgICAgIChib29sLCBhcmdzKQorICAgIHN0YXRpY19hc3NlcnQoc2l6ZW9mKEMyTnVtYmVyc1BvcnRUdW5pbmcpID09IDgsICJiYWQgc2l6ZSIpOworICAgIC8vIEMyTnVtYmVyc1BvcnRUdW5pbmc6OmlucHV0OiAga0luZGV4IHwgdHVuIHwgcG9ydCB8IGlucHV0ICAgICAoYXJncykKKyAgICAvLyBDMk51bWJlcnNQb3J0VHVuaW5nOjpvdXRwdXQ6IGtJbmRleCB8IHR1biB8IHBvcnQgfCBvdXRwdXQgICAgKGFyZ3MpCisgICAgc3RhdGljX2Fzc2VydChDMk51bWJlcnNQb3J0VHVuaW5nOjppbnB1dDo6Q09SRV9JTkRFWCA9PQorICAgICAgICAgICAgICAgICAgKEk6OklTX0ZMRVhfRkxBRyB8IGtQYXJhbUluZGV4TnVtYmVycyksICJiYWQgaW5kZXgiKTsKKyAgICBzdGF0aWNfYXNzZXJ0KEMyTnVtYmVyc1BvcnRUdW5pbmc6OmlucHV0OjpQQVJBTV9UWVBFID09CisgICAgICAgICAgICAgICAgICAoSTo6SVNfRkxFWF9GTEFHIHwga1BhcmFtSW5kZXhOdW1iZXJzIHwgSTo6S0lORF9UVU5JTkcgfCBJOjpESVJfSU5QVVQpLCAiYmFkIGluZGV4Iik7CisgICAgc3RhdGljX2Fzc2VydChDMk51bWJlcnNQb3J0VHVuaW5nOjpvdXRwdXQ6OkNPUkVfSU5ERVggPT0KKyAgICAgICAgICAgICAgICAgIChJOjpJU19GTEVYX0ZMQUcgfCBrUGFyYW1JbmRleE51bWJlcnMpLCAiYmFkIGluZGV4Iik7CisgICAgc3RhdGljX2Fzc2VydChDMk51bWJlcnNQb3J0VHVuaW5nOjpvdXRwdXQ6OlBBUkFNX1RZUEUgPT0KKyAgICAgICAgICAgICAgICAgIChJOjpJU19GTEVYX0ZMQUcgfCBrUGFyYW1JbmRleE51bWJlcnMgfCBJOjpLSU5EX1RVTklORyB8IEk6OkRJUl9PVVRQVVQpLCAiYmFkIGluZGV4Iik7CisgICAgc3RhdGljX2Fzc2VydChzaXplb2YoQzJOdW1iZXJzUG9ydFR1bmluZzo6aW5wdXQpID09IDgsICJiYWQgc2l6ZSIpOworICAgIHN0YXRpY19hc3NlcnQoc2l6ZW9mKEMyTnVtYmVyc1BvcnRUdW5pbmc6Om91dHB1dCkgPT0gOCwgImJhZCBzaXplIik7CisgICAgc3RhdGljX2Fzc2VydChvZmZzZXRvZihDMk51bWJlcnNQb3J0VHVuaW5nOjppbnB1dCwgX21TaXplKSA9PSAwLCAiYmFkIHNpemUiKTsKKyAgICBzdGF0aWNfYXNzZXJ0KG9mZnNldG9mKEMyTnVtYmVyc1BvcnRUdW5pbmc6OmlucHV0LCBfbUluZGV4KSA9PSA0LCAiYmFkIG9mZnNldCIpOworICAgIHN0YXRpY19hc3NlcnQob2Zmc2V0b2YoQzJOdW1iZXJzUG9ydFR1bmluZzo6aW5wdXQsIG0ubU51bWJlcnMpID09IDgsICJiYWQgb2Zmc2V0Iik7CisgICAgc3RhdGljX2Fzc2VydChvZmZzZXRvZihDMk51bWJlcnNQb3J0VHVuaW5nOjpvdXRwdXQsIF9tU2l6ZSkgPT0gMCwgImJhZCBzaXplIik7CisgICAgc3RhdGljX2Fzc2VydChvZmZzZXRvZihDMk51bWJlcnNQb3J0VHVuaW5nOjpvdXRwdXQsIF9tSW5kZXgpID09IDQsICJiYWQgb2Zmc2V0Iik7CisgICAgc3RhdGljX2Fzc2VydChvZmZzZXRvZihDMk51bWJlcnNQb3J0VHVuaW5nOjpvdXRwdXQsIG0ubU51bWJlcnMpID09IDgsICJiYWQgb2Zmc2V0Iik7CisKKyAgICAvLyBDMk51bWJlcnNTdHJlYW1UdW5pbmc6ICAgICAgIGtJbmRleCB8IHR1biB8IHN0ciAgICAgICAgICAgICAgKGJvb2wsIHVpbnQsIGFyZ3MpCisgICAgc3RhdGljX2Fzc2VydChzaXplb2YoQzJOdW1iZXJzU3RyZWFtVHVuaW5nKSA9PSA4LCAiYmFkIHNpemUiKTsKKyAgICAvLyBDMk51bWJlcnNTdHJlYW1UdW5pbmc6OmlucHV0IGtJbmRleCB8IHR1biB8IHN0ciB8IGlucHV0ICAgICAgKGludCwgYXJncykKKyAgICAvLyBDMk51bWJlcnNTdHJlYW1UdW5pbmc6Om91dHB1dCBrSXggICB8IHR1biB8IHN0ciB8IG91dHB1dCAgICAgKGludCwgYXJncykKKyAgICBzdGF0aWNfYXNzZXJ0KEMyTnVtYmVyc1N0cmVhbVR1bmluZzo6aW5wdXQ6OkNPUkVfSU5ERVggPT0KKyAgICAgICAgICAgICAgICAgIChJOjpJU19GTEVYX0ZMQUcgfCBrUGFyYW1JbmRleE51bWJlcnMpLCAiYmFkIGluZGV4Iik7CisgICAgc3RhdGljX2Fzc2VydChDMk51bWJlcnNTdHJlYW1UdW5pbmc6OmlucHV0OjpQQVJBTV9UWVBFID09CisgICAgICAgICAgICAgICAgICAoSTo6SVNfRkxFWF9GTEFHIHwga1BhcmFtSW5kZXhOdW1iZXJzIHwgSTo6S0lORF9UVU5JTkcgfCBJOjpESVJfSU5QVVQgfCBJOjpJU19TVFJFQU1fRkxBRyksICJiYWQgaW5kZXgiKTsKKyAgICBzdGF0aWNfYXNzZXJ0KEMyTnVtYmVyc1N0cmVhbVR1bmluZzo6b3V0cHV0OjpDT1JFX0lOREVYID09CisgICAgICAgICAgICAgICAgICAoSTo6SVNfRkxFWF9GTEFHIHwga1BhcmFtSW5kZXhOdW1iZXJzKSwgImJhZCBpbmRleCIpOworICAgIHN0YXRpY19hc3NlcnQoQzJOdW1iZXJzU3RyZWFtVHVuaW5nOjpvdXRwdXQ6OlBBUkFNX1RZUEUgPT0KKyAgICAgICAgICAgICAgICAgIChJOjpJU19GTEVYX0ZMQUcgfCBrUGFyYW1JbmRleE51bWJlcnMgfCBJOjpLSU5EX1RVTklORyB8IEk6OkRJUl9PVVRQVVQgfCBJOjpJU19TVFJFQU1fRkxBRyksICJiYWQgaW5kZXgiKTsKKyAgICBzdGF0aWNfYXNzZXJ0KHNpemVvZihDMk51bWJlcnNTdHJlYW1UdW5pbmc6OmlucHV0KSA9PSA4LCAiYmFkIHNpemUiKTsKKyAgICBzdGF0aWNfYXNzZXJ0KHNpemVvZihDMk51bWJlcnNTdHJlYW1UdW5pbmc6Om91dHB1dCkgPT0gOCwgImJhZCBzaXplIik7CisgICAgc3RhdGljX2Fzc2VydChvZmZzZXRvZihDMk51bWJlcnNTdHJlYW1UdW5pbmc6OmlucHV0LCBfbVNpemUpID09IDAsICJiYWQgc2l6ZSIpOworICAgIHN0YXRpY19hc3NlcnQob2Zmc2V0b2YoQzJOdW1iZXJzU3RyZWFtVHVuaW5nOjppbnB1dCwgX21JbmRleCkgPT0gNCwgImJhZCBvZmZzZXQiKTsKKyAgICBzdGF0aWNfYXNzZXJ0KG9mZnNldG9mKEMyTnVtYmVyc1N0cmVhbVR1bmluZzo6aW5wdXQsIG0ubU51bWJlcnMpID09IDgsICJiYWQgb2Zmc2V0Iik7CisgICAgc3RhdGljX2Fzc2VydChvZmZzZXRvZihDMk51bWJlcnNTdHJlYW1UdW5pbmc6Om91dHB1dCwgX21TaXplKSA9PSAwLCAiYmFkIHNpemUiKTsKKyAgICBzdGF0aWNfYXNzZXJ0KG9mZnNldG9mKEMyTnVtYmVyc1N0cmVhbVR1bmluZzo6b3V0cHV0LCBfbUluZGV4KSA9PSA0LCAiYmFkIG9mZnNldCIpOworICAgIHN0YXRpY19hc3NlcnQob2Zmc2V0b2YoQzJOdW1iZXJzU3RyZWFtVHVuaW5nOjpvdXRwdXQsIG0ubU51bWJlcnMpID09IDgsICJiYWQgb2Zmc2V0Iik7Cit9CisKK3RlbXBsYXRlPGJvb2wsIHVuc2lnbmVkIC4uLk4+CitzdHJ1Y3QgX3ByaW50X2FzX3dhcm5pbmcgeyB9OworCit0ZW1wbGF0ZTx1bnNpZ25lZCAuLi5OPgorc3RydWN0IF9wcmludF9hc193YXJuaW5nPHRydWUsIE4uLi4+IDogc3RkOjp0cnVlX3R5cGUgeyB9OworCisjZGVmaW5lIHN0YXRpY19hc3NlcnRfZXF1YWxzKGEsIGIsIG1zZykgXAorc3RhdGljX2Fzc2VydChfcHJpbnRfYXNfd2FybmluZzwoYSkgPT0gKGIpLCBhLCBiPjo6dmFsdWUsIG1zZykKKwordm9pZCBfQzJQYXJhbUluc3BlY3Rvcjo6U3RhdGljRmxleEZyb21CYXNlVGVzdCgpIHsKKyAgICBlbnVtIHsga1BhcmFtSW5kZXhNeSA9IDEyMDMgfTsKKyAgICB0eXBlZGVmIEMyVGVzdEJhc2VGbGV4RW5kU2l6ZVN0cnVjdCBDMk15U3RydWN0OworICAgIHR5cGVkZWYgQzJHbG9iYWxQYXJhbTxDMkluZm8sIEMyTXlTdHJ1Y3QsIGtQYXJhbUluZGV4TXk+IEMyTXlJbmZvOworICAgIHR5cGVkZWYgICBDMlBvcnRQYXJhbTxDMkluZm8sIEMyTXlTdHJ1Y3QsIGtQYXJhbUluZGV4TXk+IEMyTXlQb3J0SW5mbzsKKyAgICB0eXBlZGVmIEMyU3RyZWFtUGFyYW08QzJJbmZvLCBDMk15U3RydWN0LCBrUGFyYW1JbmRleE15PiBDMk15U3RyZWFtSW5mbzsKKworICAgIHR5cGVkZWYgQzJQYXJhbTo6SW5kZXggSTsKKworICAgIC8vIEMyTXlTdHJ1Y3QgaGFzIG5vIENPUkVfSU5ERVgKKyAgICAvL3N0YXRpY19hc3NlcnQoQzJNeVN0cnVjdDo6Q09SRV9JTkRFWCA9PSAoSTo6SVNfRkxFWF9GTEFHIHwga1BhcmFtSW5kZXhNeSksICJiYWQgaW5kZXgiKTsKKyAgICBzdGF0aWNfYXNzZXJ0KHNpemVvZihDMk15U3RydWN0KSA9PSA0LCAiYmFkIHNpemUiKTsKKworICAgIC8vIEMyTXlJbmZvOiAgICAgICAgICAgICBrSW5kZXggfCB0dW4gfCBnbG9iYWwgICAgICAgICAgIChhcmdzKQorICAgIHN0YXRpY19hc3NlcnRfZXF1YWxzKEMyTXlJbmZvOjpDT1JFX0lOREVYLCAoSTo6SVNfRkxFWF9GTEFHIHwga1BhcmFtSW5kZXhNeSksICJiYWQgaW5kZXgiKTsKKyAgICBzdGF0aWNfYXNzZXJ0X2VxdWFscyhDMk15SW5mbzo6UEFSQU1fVFlQRSwgKEk6OklTX0ZMRVhfRkxBRyB8IGtQYXJhbUluZGV4TXkgfCBJOjpLSU5EX0lORk8gfCBJOjpESVJfR0xPQkFMKSwgImJhZCBpbmRleCIpOworICAgIHN0YXRpY19hc3NlcnQoc2l6ZW9mKEMyTXlJbmZvKSA9PSAxMiwgImJhZCBzaXplIik7CisKKyAgICBzdGF0aWNfYXNzZXJ0KG9mZnNldG9mKEMyTXlJbmZvLCBfbVNpemUpID09IDAsICJiYWQgc2l6ZSIpOworICAgIHN0YXRpY19hc3NlcnQob2Zmc2V0b2YoQzJNeUluZm8sIF9tSW5kZXgpID09IDQsICJiYWQgb2Zmc2V0Iik7CisgICAgc3RhdGljX2Fzc2VydChvZmZzZXRvZihDMk15SW5mbywgbS5zaWduZWQzMikgPT0gOCwgImJhZCBvZmZzZXQiKTsKKworICAgIC8vIEMyTXlQb3J0SW5mbzogICAgICAgICBrSW5kZXggfCB0dW4gfCBwb3J0ICAgICAgICAgICAgIChib29sLCBhcmdzKQorICAgIHN0YXRpY19hc3NlcnQoc2l6ZW9mKEMyTXlQb3J0SW5mbykgPT0gMTIsICJiYWQgc2l6ZSIpOworICAgIC8vIEMyTXlQb3J0SW5mbzo6aW5wdXQ6ICBrSW5kZXggfCB0dW4gfCBwb3J0IHwgaW5wdXQgICAgIChhcmdzKQorICAgIC8vIEMyTXlQb3J0SW5mbzo6b3V0cHV0OiBrSW5kZXggfCB0dW4gfCBwb3J0IHwgb3V0cHV0ICAgIChhcmdzKQorICAgIHN0YXRpY19hc3NlcnQoQzJNeVBvcnRJbmZvOjppbnB1dDo6Q09SRV9JTkRFWCA9PQorICAgICAgICAgICAgICAgICAgKEk6OklTX0ZMRVhfRkxBRyB8IGtQYXJhbUluZGV4TXkpLCAiYmFkIGluZGV4Iik7CisgICAgc3RhdGljX2Fzc2VydChDMk15UG9ydEluZm86OmlucHV0OjpQQVJBTV9UWVBFID09CisgICAgICAgICAgICAgICAgICAoSTo6SVNfRkxFWF9GTEFHIHwga1BhcmFtSW5kZXhNeSB8IEk6OktJTkRfSU5GTyB8IEk6OkRJUl9JTlBVVCksICJiYWQgaW5kZXgiKTsKKyAgICBzdGF0aWNfYXNzZXJ0KEMyTXlQb3J0SW5mbzo6b3V0cHV0OjpDT1JFX0lOREVYID09CisgICAgICAgICAgICAgICAgICAoSTo6SVNfRkxFWF9GTEFHIHwga1BhcmFtSW5kZXhNeSksICJiYWQgaW5kZXgiKTsKKyAgICBzdGF0aWNfYXNzZXJ0KEMyTXlQb3J0SW5mbzo6b3V0cHV0OjpQQVJBTV9UWVBFID09CisgICAgICAgICAgICAgICAgICAoSTo6SVNfRkxFWF9GTEFHIHwga1BhcmFtSW5kZXhNeSB8IEk6OktJTkRfSU5GTyB8IEk6OkRJUl9PVVRQVVQpLCAiYmFkIGluZGV4Iik7CisgICAgc3RhdGljX2Fzc2VydChzaXplb2YoQzJNeVBvcnRJbmZvOjppbnB1dCkgPT0gMTIsICJiYWQgc2l6ZSIpOworICAgIHN0YXRpY19hc3NlcnQoc2l6ZW9mKEMyTXlQb3J0SW5mbzo6b3V0cHV0KSA9PSAxMiwgImJhZCBzaXplIik7CisgICAgc3RhdGljX2Fzc2VydChvZmZzZXRvZihDMk15UG9ydEluZm86OmlucHV0LCBfbVNpemUpID09IDAsICJiYWQgc2l6ZSIpOworICAgIHN0YXRpY19hc3NlcnQob2Zmc2V0b2YoQzJNeVBvcnRJbmZvOjppbnB1dCwgX21JbmRleCkgPT0gNCwgImJhZCBvZmZzZXQiKTsKKyAgICBzdGF0aWNfYXNzZXJ0KG9mZnNldG9mKEMyTXlQb3J0SW5mbzo6aW5wdXQsIG0uc2lnbmVkMzIpID09IDgsICJiYWQgb2Zmc2V0Iik7CisgICAgc3RhdGljX2Fzc2VydChvZmZzZXRvZihDMk15UG9ydEluZm86Om91dHB1dCwgX21TaXplKSA9PSAwLCAiYmFkIHNpemUiKTsKKyAgICBzdGF0aWNfYXNzZXJ0KG9mZnNldG9mKEMyTXlQb3J0SW5mbzo6b3V0cHV0LCBfbUluZGV4KSA9PSA0LCAiYmFkIG9mZnNldCIpOworICAgIHN0YXRpY19hc3NlcnQob2Zmc2V0b2YoQzJNeVBvcnRJbmZvOjpvdXRwdXQsIG0uc2lnbmVkMzIpID09IDgsICJiYWQgb2Zmc2V0Iik7CisKKyAgICAvLyBDMk15U3RyZWFtSW5mbzogICAgICAga0luZGV4IHwgdHVuIHwgc3RyICAgICAgICAgICAgICAoYm9vbCwgdWludCwgYXJncykKKyAgICBzdGF0aWNfYXNzZXJ0KHNpemVvZihDMk15U3RyZWFtSW5mbykgPT0gMTIsICJiYWQgc2l6ZSIpOworICAgIC8vIEMyTXlTdHJlYW1JbmZvOjppbnB1dCBrSW5kZXggfCB0dW4gfCBzdHIgfCBpbnB1dCAgICAgIChpbnQsIGFyZ3MpCisgICAgLy8gQzJNeVN0cmVhbUluZm86Om91dHB1dCBrSXggICB8IHR1biB8IHN0ciB8IG91dHB1dCAgICAgKGludCwgYXJncykKKyAgICBzdGF0aWNfYXNzZXJ0KEMyTXlTdHJlYW1JbmZvOjppbnB1dDo6Q09SRV9JTkRFWCA9PQorICAgICAgICAgICAgICAgICAgKEk6OklTX0ZMRVhfRkxBRyB8IGtQYXJhbUluZGV4TXkpLCAiYmFkIGluZGV4Iik7CisgICAgc3RhdGljX2Fzc2VydChDMk15U3RyZWFtSW5mbzo6aW5wdXQ6OlBBUkFNX1RZUEUgPT0KKyAgICAgICAgICAgICAgICAgIChJOjpJU19GTEVYX0ZMQUcgfCBrUGFyYW1JbmRleE15IHwgSTo6S0lORF9JTkZPIHwgSTo6RElSX0lOUFVUIHwgSTo6SVNfU1RSRUFNX0ZMQUcpLCAiYmFkIGluZGV4Iik7CisgICAgc3RhdGljX2Fzc2VydChDMk15U3RyZWFtSW5mbzo6b3V0cHV0OjpDT1JFX0lOREVYID09CisgICAgICAgICAgICAgICAgICAoSTo6SVNfRkxFWF9GTEFHIHwga1BhcmFtSW5kZXhNeSksICJiYWQgaW5kZXgiKTsKKyAgICBzdGF0aWNfYXNzZXJ0KEMyTXlTdHJlYW1JbmZvOjpvdXRwdXQ6OlBBUkFNX1RZUEUgPT0KKyAgICAgICAgICAgICAgICAgIChJOjpJU19GTEVYX0ZMQUcgfCBrUGFyYW1JbmRleE15IHwgSTo6S0lORF9JTkZPIHwgSTo6RElSX09VVFBVVCB8IEk6OklTX1NUUkVBTV9GTEFHKSwgImJhZCBpbmRleCIpOworICAgIHN0YXRpY19hc3NlcnQoc2l6ZW9mKEMyTXlTdHJlYW1JbmZvOjppbnB1dCkgPT0gMTIsICJiYWQgc2l6ZSIpOworICAgIHN0YXRpY19hc3NlcnQoc2l6ZW9mKEMyTXlTdHJlYW1JbmZvOjpvdXRwdXQpID09IDEyLCAiYmFkIHNpemUiKTsKKyAgICBzdGF0aWNfYXNzZXJ0KG9mZnNldG9mKEMyTXlTdHJlYW1JbmZvOjppbnB1dCwgX21TaXplKSA9PSAwLCAiYmFkIHNpemUiKTsKKyAgICBzdGF0aWNfYXNzZXJ0KG9mZnNldG9mKEMyTXlTdHJlYW1JbmZvOjppbnB1dCwgX21JbmRleCkgPT0gNCwgImJhZCBvZmZzZXQiKTsKKyAgICBzdGF0aWNfYXNzZXJ0KG9mZnNldG9mKEMyTXlTdHJlYW1JbmZvOjppbnB1dCwgbS5zaWduZWQzMikgPT0gOCwgImJhZCBvZmZzZXQiKTsKKyAgICBzdGF0aWNfYXNzZXJ0KG9mZnNldG9mKEMyTXlTdHJlYW1JbmZvOjpvdXRwdXQsIF9tU2l6ZSkgPT0gMCwgImJhZCBzaXplIik7CisgICAgc3RhdGljX2Fzc2VydChvZmZzZXRvZihDMk15U3RyZWFtSW5mbzo6b3V0cHV0LCBfbUluZGV4KSA9PSA0LCAiYmFkIG9mZnNldCIpOworICAgIHN0YXRpY19hc3NlcnQob2Zmc2V0b2YoQzJNeVN0cmVhbUluZm86Om91dHB1dCwgbS5zaWduZWQzMikgPT0gOCwgImJhZCBvZmZzZXQiKTsKK30KKworVEVTVF9GKEMyUGFyYW1UZXN0LCBQYXJhbU9wc1Rlc3QpIHsKKyAgICBjb25zdCBDMk51bWJlclN0cnVjdCBzdHIoMTAwKTsKKyAgICBDMk51bWJlclN0cnVjdCBic3RyOworCisgICAgeworICAgICAgICBFWFBFQ1RfRVEoMTAwLCBzdHIubU51bWJlcik7CisgICAgICAgIGJzdHIubU51bWJlciA9IDEwMDsKKworICAgICAgICBDMlBhcmFtOjpDb3JlSW5kZXggaW5kZXggPSBDMk51bWJlclN0cnVjdDo6Q09SRV9JTkRFWDsKKyAgICAgICAgRVhQRUNUX0ZBTFNFKGluZGV4LmlzVmVuZG9yKCkpOworICAgICAgICBFWFBFQ1RfRkFMU0UoaW5kZXguaXNGbGV4aWJsZSgpKTsKKyAgICAgICAgRVhQRUNUX0VRKGluZGV4LmNvcmVJbmRleCgpLCBrUGFyYW1JbmRleE51bWJlcik7CisgICAgICAgIEVYUEVDVF9FUShpbmRleC50eXBlSW5kZXgoKSwga1BhcmFtSW5kZXhOdW1iZXIpOworICAgIH0KKworICAgIGNvbnN0IEMyTnVtYmVyVHVuaW5nIHR1bigxMDApOworICAgIEMyTnVtYmVyVHVuaW5nIGJ0dW47CisKKyAgICB7CisgICAgICBDMk51bWJlckluZm8gaW5mKDEwMCk7CisgICAgICBzdGQ6OnVuaXF1ZV9wdHI8QzJOdW1iZXJzVHVuaW5nPiB0dW5fID0gQzJOdW1iZXJzVHVuaW5nOjpBbGxvY1VuaXF1ZSgxKTsKKworICAgICAgRVhQRUNUX0VRKHR1bi5jb3JlSW5kZXgoKSwgaW5mLmNvcmVJbmRleCgpKTsKKyAgICAgIEVYUEVDVF9ORSh0dW4uY29yZUluZGV4KCksIHR1bl8tPmNvcmVJbmRleCgpKTsKKyAgICAgIEVYUEVDVF9ORSh0dW4udHlwZSgpLCBpbmYudHlwZSgpKTsKKyAgICAgIEVYUEVDVF9ORSh0dW4udHlwZSgpLCB0dW5fLT50eXBlKCkpOworICAgIH0KKworICAgIHsKKyAgICAgICAgLy8gZmxhZ3MgJiBpbnZhcmlhYmxlcworICAgICAgICBmb3IgKGNvbnN0IGF1dG8gJnAgOiB7IHR1biwgYnR1biB9KSB7CisgICAgICAgICAgICBFWFBFQ1RfVFJVRSgoYm9vbClwKTsKKyAgICAgICAgICAgIEVYUEVDVF9GQUxTRSghcCk7CisgICAgICAgICAgICBFWFBFQ1RfRVEoMTJ1LCBwLnNpemUoKSk7CisKKyAgICAgICAgICAgIEVYUEVDVF9GQUxTRShwLmlzVmVuZG9yKCkpOworICAgICAgICAgICAgRVhQRUNUX0ZBTFNFKHAuaXNGbGV4aWJsZSgpKTsKKyAgICAgICAgICAgIEVYUEVDVF9UUlVFKHAuaXNHbG9iYWwoKSk7CisgICAgICAgICAgICBFWFBFQ1RfRkFMU0UocC5mb3JJbnB1dCgpKTsKKyAgICAgICAgICAgIEVYUEVDVF9GQUxTRShwLmZvck91dHB1dCgpKTsKKyAgICAgICAgICAgIEVYUEVDVF9GQUxTRShwLmZvclN0cmVhbSgpKTsKKyAgICAgICAgICAgIEVYUEVDVF9GQUxTRShwLmZvclBvcnQoKSk7CisgICAgICAgIH0KKworICAgICAgICAvLyB2YWx1ZQorICAgICAgICBFWFBFQ1RfRVEoMTAwLCB0dW4ubU51bWJlcik7CisgICAgICAgIEVYUEVDVF9FUSgwLCBidHVuLm1OdW1iZXIpOworICAgICAgICBFWFBFQ1RfRkFMU0UodHVuID09IGJ0dW4pOworICAgICAgICBFWFBFQ1RfRkFMU0UodHVuLm9wZXJhdG9yPT0oYnR1bikpOworICAgICAgICBFWFBFQ1RfVFJVRSh0dW4gIT0gYnR1bik7CisgICAgICAgIEVYUEVDVF9UUlVFKHR1bi5vcGVyYXRvciE9KGJ0dW4pKTsKKyAgICAgICAgYnR1bi5tTnVtYmVyID0gMTAwOworICAgICAgICBFWFBFQ1RfRVEodHVuLCBidHVuKTsKKworICAgICAgICAvLyBpbmRleAorICAgICAgICBFWFBFQ1RfRVEoQzJQYXJhbTo6VHlwZSh0dW4udHlwZSgpKS5jb3JlSW5kZXgoKSwgQzJOdW1iZXJTdHJ1Y3Q6OkNPUkVfSU5ERVgpOworICAgICAgICBFWFBFQ1RfRVEoQzJQYXJhbTo6VHlwZSh0dW4udHlwZSgpKS50eXBlSW5kZXgoKSwga1BhcmFtSW5kZXhOdW1iZXIpOworICAgICAgICBFWFBFQ1RfRVEodHVuLnR5cGUoKSwgQzJOdW1iZXJUdW5pbmc6OlBBUkFNX1RZUEUpOworICAgICAgICBFWFBFQ1RfRVEodHVuLnN0cmVhbSgpLCB+MHUpOworCisgICAgICAgIEMyUGFyYW06OkNvcmVJbmRleCBpbmRleCA9IEMyTnVtYmVyVHVuaW5nOjpDT1JFX0lOREVYOworICAgICAgICBFWFBFQ1RfRkFMU0UoaW5kZXguaXNWZW5kb3IoKSk7CisgICAgICAgIEVYUEVDVF9GQUxTRShpbmRleC5pc0ZsZXhpYmxlKCkpOworICAgICAgICBFWFBFQ1RfRVEoaW5kZXguY29yZUluZGV4KCksIGtQYXJhbUluZGV4TnVtYmVyKTsKKyAgICAgICAgRVhQRUNUX0VRKGluZGV4LnR5cGVJbmRleCgpLCBrUGFyYW1JbmRleE51bWJlcik7CisKKyAgICAgICAgQzJQYXJhbTo6VHlwZSB0eXBlID0gQzJOdW1iZXJUdW5pbmc6OlBBUkFNX1RZUEU7CisgICAgICAgIEVYUEVDVF9GQUxTRSh0eXBlLmlzVmVuZG9yKCkpOworICAgICAgICBFWFBFQ1RfRkFMU0UodHlwZS5pc0ZsZXhpYmxlKCkpOworICAgICAgICBFWFBFQ1RfVFJVRSh0eXBlLmlzR2xvYmFsKCkpOworICAgICAgICBFWFBFQ1RfRkFMU0UodHlwZS5mb3JJbnB1dCgpKTsKKyAgICAgICAgRVhQRUNUX0ZBTFNFKHR5cGUuZm9yT3V0cHV0KCkpOworICAgICAgICBFWFBFQ1RfRkFMU0UodHlwZS5mb3JTdHJlYW0oKSk7CisgICAgICAgIEVYUEVDVF9GQUxTRSh0eXBlLmZvclBvcnQoKSk7CisKKyAgICAgICAgRVhQRUNUX0VRKEMyTnVtYmVyVHVuaW5nOjpGcm9tKG51bGxwdHIpLCBudWxscHRyKTsKKyAgICAgICAgRVhQRUNUX0VRKEMyTnVtYmVyVHVuaW5nOjpGcm9tKCZ0dW4pLCAmdHVuKTsKKyAgICAgICAgRVhQRUNUX0VRKEMyTnVtYmVyUG9ydFR1bmluZzo6RnJvbSgmdHVuKSwgbnVsbHB0cik7CisgICAgICAgIEVYUEVDVF9FUShDMk51bWJlclBvcnRUdW5pbmc6OmlucHV0OjpGcm9tKCZ0dW4pLCBudWxscHRyKTsKKyAgICAgICAgRVhQRUNUX0VRKEMyTnVtYmVyUG9ydFR1bmluZzo6b3V0cHV0OjpGcm9tKCZ0dW4pLCBudWxscHRyKTsKKyAgICAgICAgRVhQRUNUX0VRKEMyTnVtYmVyU3RyZWFtVHVuaW5nOjpGcm9tKCZ0dW4pLCBudWxscHRyKTsKKyAgICAgICAgRVhQRUNUX0VRKEMyTnVtYmVyU3RyZWFtVHVuaW5nOjppbnB1dDo6RnJvbSgmdHVuKSwgbnVsbHB0cik7CisgICAgICAgIEVYUEVDVF9FUShDMk51bWJlclN0cmVhbVR1bmluZzo6b3V0cHV0OjpGcm9tKCZ0dW4pLCBudWxscHRyKTsKKworICAgICAgICBFWFBFQ1RfRVEoKihDMlBhcmFtOjpDb3B5KGJ0dW4pKSwgYnR1bik7CisgICAgICAgIGJ0dW4uaW52YWxpZGF0ZSgpOworICAgICAgICBFWFBFQ1RfRkFMU0UoQzJQYXJhbTo6Q29weShidHVuKSk7CisgICAgfQorCisgICAgY29uc3QgQzJOdW1iZXJQb3J0VHVuaW5nIG91dHAxKHRydWUsIDEwMCksIGlucDEoZmFsc2UsIDEwMCk7CisgICAgQzJOdW1iZXJQb3J0VHVuaW5nIGJvdXRwMSwgYmlucDEsIGJpbnAzKGZhbHNlLCAxMDApOworICAgIGNvbnN0IEMyTnVtYmVyUG9ydFR1bmluZzo6aW5wdXQgaW5wMigxMDApOworICAgIEMyTnVtYmVyUG9ydFR1bmluZzo6aW5wdXQgYmlucDI7CisgICAgY29uc3QgQzJOdW1iZXJQb3J0VHVuaW5nOjpvdXRwdXQgb3V0cDIoMTAwKTsKKyAgICBDMk51bWJlclBvcnRUdW5pbmc6Om91dHB1dCBib3V0cDI7CisKKyAgICBFWFBFQ1RfRVEoaW5wMS5jb3JlSW5kZXgoKSwgdHVuLmNvcmVJbmRleCgpKTsKKyAgICBFWFBFQ1RfRVEob3V0cDEuY29yZUluZGV4KCksIHR1bi5jb3JlSW5kZXgoKSk7CisgICAgRVhQRUNUX0VRKGJpbnAxLmNvcmVJbmRleCgpLCB0dW4uY29yZUluZGV4KCkpOworICAgIEVYUEVDVF9FUShib3V0cDEuY29yZUluZGV4KCksIHR1bi5jb3JlSW5kZXgoKSk7CisgICAgRVhQRUNUX0VRKGlucDIuY29yZUluZGV4KCksIHR1bi5jb3JlSW5kZXgoKSk7CisgICAgRVhQRUNUX0VRKG91dHAyLmNvcmVJbmRleCgpLCB0dW4uY29yZUluZGV4KCkpOworCisgICAgRVhQRUNUX0VRKGlucDEudHlwZSgpLCBpbnAyLnR5cGUoKSk7CisgICAgRVhQRUNUX0VRKG91dHAxLnR5cGUoKSwgb3V0cDIudHlwZSgpKTsKKyAgICBFWFBFQ1RfTkUoaW5wMS50eXBlKCksIG91dHAxLnR5cGUoKSk7CisgICAgRVhQRUNUX05FKGlucDIudHlwZSgpLCBvdXRwMi50eXBlKCkpOworICAgIEVYUEVDVF9ORShpbnAxLnR5cGUoKSwgYmlucDEudHlwZSgpKTsKKyAgICBFWFBFQ1RfTkUob3V0cDEudHlwZSgpLCBib3V0cDEudHlwZSgpKTsKKyAgICBFWFBFQ1RfTkUoaW5wMS50eXBlKCksIHR1bi50eXBlKCkpOworICAgIEVYUEVDVF9ORShpbnAyLnR5cGUoKSwgdHVuLnR5cGUoKSk7CisKKyAgICB7CisgICAgICAgIHN0YXRpY19hc3NlcnQoY2FuQ2FsbFNldFBvcnQoYmlucDMpLCAic2hvdWxkIGJlIGFibGUgdG8iKTsKKyAgICAgICAgc3RhdGljX2Fzc2VydChjYW5DYWxsU2V0UG9ydChiaW5wMSksICJzaG91bGQgYmUgYWJsZSB0byIpOworICAgICAgICBzdGF0aWNfYXNzZXJ0KCFjYW5DYWxsU2V0UG9ydChpbnAxKSwgInNob3VsZCBub3QgYmUgYWJsZSB0byAoY29uc3QpIik7CisgICAgICAgIHN0YXRpY19hc3NlcnQoIWNhbkNhbGxTZXRQb3J0KGlucDIpLCAic2hvdWxkIG5vdCBiZSBhYmxlIHRvIChjb25zdCAmIHR5cGUpIik7CisgICAgICAgIHN0YXRpY19hc3NlcnQoIWNhbkNhbGxTZXRQb3J0KGJpbnAyKSwgInNob3VsZCBub3QgYmUgYWJsZSB0byAodHlwZSkiKTsKKworICAgICAgICAvLyBmbGFncyAmIGludmFyaWFibGVzCisgICAgICAgIGZvciAoY29uc3QgYXV0byAmcCA6IHsgb3V0cDEsIGlucDEsIGJvdXRwMSB9KSB7CisgICAgICAgICAgICBFWFBFQ1RfRVEoMTJ1LCBwLnNpemUoKSk7CisgICAgICAgICAgICBFWFBFQ1RfRkFMU0UocC5pc1ZlbmRvcigpKTsKKyAgICAgICAgICAgIEVYUEVDVF9GQUxTRShwLmlzRmxleGlibGUoKSk7CisgICAgICAgICAgICBFWFBFQ1RfRkFMU0UocC5pc0dsb2JhbCgpKTsKKyAgICAgICAgICAgIEVYUEVDVF9GQUxTRShwLmZvclN0cmVhbSgpKTsKKyAgICAgICAgICAgIEVYUEVDVF9UUlVFKHAuZm9yUG9ydCgpKTsKKyAgICAgICAgfQorICAgICAgICBmb3IgKGNvbnN0IGF1dG8gJnAgOiB7IGlucDIsIGJpbnAyIH0pIHsKKyAgICAgICAgICAgIEVYUEVDVF9FUSgxMnUsIHAuc2l6ZSgpKTsKKyAgICAgICAgICAgIEVYUEVDVF9GQUxTRShwLmlzVmVuZG9yKCkpOworICAgICAgICAgICAgRVhQRUNUX0ZBTFNFKHAuaXNGbGV4aWJsZSgpKTsKKyAgICAgICAgICAgIEVYUEVDVF9GQUxTRShwLmlzR2xvYmFsKCkpOworICAgICAgICAgICAgRVhQRUNUX0ZBTFNFKHAuZm9yU3RyZWFtKCkpOworICAgICAgICAgICAgRVhQRUNUX1RSVUUocC5mb3JQb3J0KCkpOworICAgICAgICB9CisgICAgICAgIGZvciAoY29uc3QgYXV0byAmcCA6IHsgb3V0cDIsIGJvdXRwMiB9KSB7CisgICAgICAgICAgICBFWFBFQ1RfRVEoMTJ1LCBwLnNpemUoKSk7CisgICAgICAgICAgICBFWFBFQ1RfRkFMU0UocC5pc1ZlbmRvcigpKTsKKyAgICAgICAgICAgIEVYUEVDVF9GQUxTRShwLmlzRmxleGlibGUoKSk7CisgICAgICAgICAgICBFWFBFQ1RfRkFMU0UocC5pc0dsb2JhbCgpKTsKKyAgICAgICAgICAgIEVYUEVDVF9GQUxTRShwLmZvclN0cmVhbSgpKTsKKyAgICAgICAgICAgIEVYUEVDVF9UUlVFKHAuZm9yUG9ydCgpKTsKKyAgICAgICAgfQorCisgICAgICAgIC8vIHBvcnQgc3BlY2lmaWMgZmxhZ3MgJiBpbnZhcmlhYmxlcworICAgICAgICBFWFBFQ1RfRkFMU0Uob3V0cDEuZm9ySW5wdXQoKSk7CisgICAgICAgIEVYUEVDVF9UUlVFKG91dHAxLmZvck91dHB1dCgpKTsKKworICAgICAgICBFWFBFQ1RfVFJVRShpbnAxLmZvcklucHV0KCkpOworICAgICAgICBFWFBFQ1RfRkFMU0UoaW5wMS5mb3JPdXRwdXQoKSk7CisKKyAgICAgICAgZm9yIChjb25zdCBhdXRvICZwIDogeyBvdXRwMSwgaW5wMSB9KSB7CisgICAgICAgICAgICBFWFBFQ1RfVFJVRSgoYm9vbClwKTsKKyAgICAgICAgICAgIEVYUEVDVF9GQUxTRSghcCk7CisgICAgICAgICAgICBFWFBFQ1RfRVEoMTAwLCBwLm1OdW1iZXIpOworICAgICAgICB9CisgICAgICAgIGZvciAoY29uc3QgYXV0byAmcCA6IHsgb3V0cDIsIGJvdXRwMiB9KSB7CisgICAgICAgICAgICBFWFBFQ1RfVFJVRSgoYm9vbClwKTsKKyAgICAgICAgICAgIEVYUEVDVF9GQUxTRSghcCk7CisKKyAgICAgICAgICAgIEVYUEVDVF9GQUxTRShwLmZvcklucHV0KCkpOworICAgICAgICAgICAgRVhQRUNUX1RSVUUocC5mb3JPdXRwdXQoKSk7CisgICAgICAgIH0KKyAgICAgICAgZm9yIChjb25zdCBhdXRvICZwIDogeyBpbnAyLCBiaW5wMiB9KSB7CisgICAgICAgICAgICBFWFBFQ1RfVFJVRSgoYm9vbClwKTsKKyAgICAgICAgICAgIEVYUEVDVF9GQUxTRSghcCk7CisKKyAgICAgICAgICAgIEVYUEVDVF9UUlVFKHAuZm9ySW5wdXQoKSk7CisgICAgICAgICAgICBFWFBFQ1RfRkFMU0UocC5mb3JPdXRwdXQoKSk7CisgICAgICAgIH0KKyAgICAgICAgZm9yIChjb25zdCBhdXRvICZwIDogeyBib3V0cDEgfSApIHsKKyAgICAgICAgICAgIEVYUEVDVF9GQUxTRSgoYm9vbClwKTsKKyAgICAgICAgICAgIEVYUEVDVF9UUlVFKCFwKTsKKworICAgICAgICAgICAgRVhQRUNUX0ZBTFNFKHAuZm9ySW5wdXQoKSk7CisgICAgICAgICAgICBFWFBFQ1RfRkFMU0UocC5mb3JPdXRwdXQoKSk7CisgICAgICAgICAgICBFWFBFQ1RfRVEoMCwgcC5tTnVtYmVyKTsKKyAgICAgICAgfQorCisgICAgICAgIC8vIHZhbHVlcworICAgICAgICBFWFBFQ1RfRVEoMTAwLCBpbnAyLm1OdW1iZXIpOworICAgICAgICBFWFBFQ1RfRVEoMTAwLCBvdXRwMi5tTnVtYmVyKTsKKyAgICAgICAgRVhQRUNUX0VRKDAsIGJpbnAxLm1OdW1iZXIpOworICAgICAgICBFWFBFQ1RfRVEoMCwgYmlucDIubU51bWJlcik7CisgICAgICAgIEVYUEVDVF9FUSgwLCBib3V0cDEubU51bWJlcik7CisgICAgICAgIEVYUEVDVF9FUSgwLCBib3V0cDIubU51bWJlcik7CisKKyAgICAgICAgRVhQRUNUX1RSVUUoaW5wMSAhPSBvdXRwMSk7CisgICAgICAgIEVYUEVDVF9UUlVFKGlucDEgPT0gaW5wMik7CisgICAgICAgIEVYUEVDVF9UUlVFKG91dHAxID09IG91dHAyKTsKKyAgICAgICAgRVhQRUNUX1RSVUUoYmlucDEgPT0gYm91dHAxKTsKKyAgICAgICAgRVhQRUNUX1RSVUUoYmlucDIgIT0gYm91dHAyKTsKKworICAgICAgICBFWFBFQ1RfVFJVRShpbnAxICE9IGJpbnAxKTsKKyAgICAgICAgYmlucDEubU51bWJlciA9IDEwMDsKKyAgICAgICAgRVhQRUNUX1RSVUUoaW5wMSAhPSBiaW5wMSk7CisgICAgICAgIGJpbnAxLnNldFBvcnQoZmFsc2UgLyogb3V0cHV0ICovKTsKKyAgICAgICAgRVhQRUNUX1RSVUUoKGJvb2wpYmlucDEpOworICAgICAgICBFWFBFQ1RfRkFMU0UoIWJpbnAxKTsKKyAgICAgICAgRVhQRUNUX1RSVUUoaW5wMSA9PSBiaW5wMSk7CisKKyAgICAgICAgRVhQRUNUX1RSVUUoaW5wMiAhPSBiaW5wMik7CisgICAgICAgIGJpbnAyLm1OdW1iZXIgPSAxMDA7CisgICAgICAgIEVYUEVDVF9UUlVFKGlucDIgPT0gYmlucDIpOworCisgICAgICAgIGJpbnAxLnNldFBvcnQodHJ1ZSAvKiBvdXRwdXQgKi8pOworICAgICAgICBFWFBFQ1RfVFJVRShvdXRwMSA9PSBiaW5wMSk7CisKKyAgICAgICAgRVhQRUNUX1RSVUUob3V0cDEgIT0gYm91dHAxKTsKKyAgICAgICAgYm91dHAxLm1OdW1iZXIgPSAxMDA7CisgICAgICAgIEVYUEVDVF9UUlVFKG91dHAxICE9IGJvdXRwMSk7CisgICAgICAgIGJvdXRwMS5zZXRQb3J0KHRydWUgLyogb3V0cHV0ICovKTsKKyAgICAgICAgRVhQRUNUX1RSVUUoKGJvb2wpYm91dHAxKTsKKyAgICAgICAgRVhQRUNUX0ZBTFNFKCFib3V0cDEpOworICAgICAgICBFWFBFQ1RfVFJVRShvdXRwMSA9PSBib3V0cDEpOworCisgICAgICAgIEVYUEVDVF9UUlVFKG91dHAyICE9IGJvdXRwMik7CisgICAgICAgIGJvdXRwMi5tTnVtYmVyID0gMTAwOworICAgICAgICBFWFBFQ1RfVFJVRShvdXRwMiA9PSBib3V0cDIpOworCisgICAgICAgIGJvdXRwMS5zZXRQb3J0KGZhbHNlIC8qIG91dHB1dCAqLyk7CisgICAgICAgIEVYUEVDVF9UUlVFKGlucDEgPT0gYm91dHAxKTsKKworICAgICAgICAvLyBpbmRleAorICAgICAgICBFWFBFQ1RfRVEoQzJQYXJhbTo6VHlwZShpbnAxLnR5cGUoKSkuY29yZUluZGV4KCksIEMyTnVtYmVyU3RydWN0OjpDT1JFX0lOREVYKTsKKyAgICAgICAgRVhQRUNUX0VRKEMyUGFyYW06OlR5cGUoaW5wMS50eXBlKCkpLnR5cGVJbmRleCgpLCBrUGFyYW1JbmRleE51bWJlcik7CisgICAgICAgIEVYUEVDVF9FUShpbnAxLnR5cGUoKSwgQzJOdW1iZXJQb3J0VHVuaW5nOjppbnB1dDo6UEFSQU1fVFlQRSk7CisgICAgICAgIEVYUEVDVF9FUShpbnAxLnN0cmVhbSgpLCB+MHUpOworCisgICAgICAgIEVYUEVDVF9FUShDMlBhcmFtOjpUeXBlKGlucDIudHlwZSgpKS5jb3JlSW5kZXgoKSwgQzJOdW1iZXJTdHJ1Y3Q6OkNPUkVfSU5ERVgpOworICAgICAgICBFWFBFQ1RfRVEoQzJQYXJhbTo6VHlwZShpbnAyLnR5cGUoKSkudHlwZUluZGV4KCksIGtQYXJhbUluZGV4TnVtYmVyKTsKKyAgICAgICAgRVhQRUNUX0VRKGlucDIudHlwZSgpLCBDMk51bWJlclBvcnRUdW5pbmc6OmlucHV0OjpQQVJBTV9UWVBFKTsKKyAgICAgICAgRVhQRUNUX0VRKGlucDIuc3RyZWFtKCksIH4wdSk7CisKKyAgICAgICAgRVhQRUNUX0VRKEMyUGFyYW06OlR5cGUob3V0cDEudHlwZSgpKS5jb3JlSW5kZXgoKSwgQzJOdW1iZXJTdHJ1Y3Q6OkNPUkVfSU5ERVgpOworICAgICAgICBFWFBFQ1RfRVEoQzJQYXJhbTo6VHlwZShvdXRwMS50eXBlKCkpLnR5cGVJbmRleCgpLCBrUGFyYW1JbmRleE51bWJlcik7CisgICAgICAgIEVYUEVDVF9FUShvdXRwMS50eXBlKCksIEMyTnVtYmVyUG9ydFR1bmluZzo6b3V0cHV0OjpQQVJBTV9UWVBFKTsKKyAgICAgICAgRVhQRUNUX0VRKG91dHAxLnN0cmVhbSgpLCB+MHUpOworCisgICAgICAgIEVYUEVDVF9FUShDMlBhcmFtOjpUeXBlKG91dHAyLnR5cGUoKSkuY29yZUluZGV4KCksIEMyTnVtYmVyU3RydWN0OjpDT1JFX0lOREVYKTsKKyAgICAgICAgRVhQRUNUX0VRKEMyUGFyYW06OlR5cGUob3V0cDIudHlwZSgpKS50eXBlSW5kZXgoKSwga1BhcmFtSW5kZXhOdW1iZXIpOworICAgICAgICBFWFBFQ1RfRVEob3V0cDIudHlwZSgpLCBDMk51bWJlclBvcnRUdW5pbmc6Om91dHB1dDo6UEFSQU1fVFlQRSk7CisgICAgICAgIEVYUEVDVF9FUShvdXRwMi5zdHJlYW0oKSwgfjB1KTsKKworICAgICAgICBDMlBhcmFtOjpDb3JlSW5kZXggaW5kZXggPSBDMk51bWJlclBvcnRUdW5pbmc6OmlucHV0OjpQQVJBTV9UWVBFOworICAgICAgICBFWFBFQ1RfRkFMU0UoaW5kZXguaXNWZW5kb3IoKSk7CisgICAgICAgIEVYUEVDVF9GQUxTRShpbmRleC5pc0ZsZXhpYmxlKCkpOworICAgICAgICBFWFBFQ1RfRVEoaW5kZXguY29yZUluZGV4KCksIGtQYXJhbUluZGV4TnVtYmVyKTsKKyAgICAgICAgRVhQRUNUX0VRKGluZGV4LnR5cGVJbmRleCgpLCBrUGFyYW1JbmRleE51bWJlcik7CisKKyAgICAgICAgaW5kZXggPSBDMk51bWJlclBvcnRUdW5pbmc6Om91dHB1dDo6UEFSQU1fVFlQRTsKKyAgICAgICAgRVhQRUNUX0ZBTFNFKGluZGV4LmlzVmVuZG9yKCkpOworICAgICAgICBFWFBFQ1RfRkFMU0UoaW5kZXguaXNGbGV4aWJsZSgpKTsKKyAgICAgICAgRVhQRUNUX0VRKGluZGV4LmNvcmVJbmRleCgpLCBrUGFyYW1JbmRleE51bWJlcik7CisgICAgICAgIEVYUEVDVF9FUShpbmRleC50eXBlSW5kZXgoKSwga1BhcmFtSW5kZXhOdW1iZXIpOworCisgICAgICAgIEMyUGFyYW06OlR5cGUgdHlwZSA9IEMyTnVtYmVyUG9ydFR1bmluZzo6aW5wdXQ6OlBBUkFNX1RZUEU7CisgICAgICAgIEVYUEVDVF9GQUxTRSh0eXBlLmlzVmVuZG9yKCkpOworICAgICAgICBFWFBFQ1RfRkFMU0UodHlwZS5pc0ZsZXhpYmxlKCkpOworICAgICAgICBFWFBFQ1RfRkFMU0UodHlwZS5pc0dsb2JhbCgpKTsKKyAgICAgICAgRVhQRUNUX1RSVUUodHlwZS5mb3JJbnB1dCgpKTsKKyAgICAgICAgRVhQRUNUX0ZBTFNFKHR5cGUuZm9yT3V0cHV0KCkpOworICAgICAgICBFWFBFQ1RfRkFMU0UodHlwZS5mb3JTdHJlYW0oKSk7CisgICAgICAgIEVYUEVDVF9UUlVFKHR5cGUuZm9yUG9ydCgpKTsKKworICAgICAgICB0eXBlID0gQzJOdW1iZXJQb3J0VHVuaW5nOjpvdXRwdXQ6OlBBUkFNX1RZUEU7CisgICAgICAgIEVYUEVDVF9GQUxTRSh0eXBlLmlzVmVuZG9yKCkpOworICAgICAgICBFWFBFQ1RfRkFMU0UodHlwZS5pc0ZsZXhpYmxlKCkpOworICAgICAgICBFWFBFQ1RfRkFMU0UodHlwZS5pc0dsb2JhbCgpKTsKKyAgICAgICAgRVhQRUNUX0ZBTFNFKHR5cGUuZm9ySW5wdXQoKSk7CisgICAgICAgIEVYUEVDVF9UUlVFKHR5cGUuZm9yT3V0cHV0KCkpOworICAgICAgICBFWFBFQ1RfRkFMU0UodHlwZS5mb3JTdHJlYW0oKSk7CisgICAgICAgIEVYUEVDVF9UUlVFKHR5cGUuZm9yUG9ydCgpKTsKKworICAgICAgICBFWFBFQ1RfRVEoQzJOdW1iZXJQb3J0VHVuaW5nOjpGcm9tKG51bGxwdHIpLCBudWxscHRyKTsKKyAgICAgICAgRVhQRUNUX0VRKEMyTnVtYmVyUG9ydFR1bmluZzo6aW5wdXQ6OkZyb20obnVsbHB0ciksIG51bGxwdHIpOworICAgICAgICBFWFBFQ1RfRVEoQzJOdW1iZXJQb3J0VHVuaW5nOjpvdXRwdXQ6OkZyb20obnVsbHB0ciksIG51bGxwdHIpOworICAgICAgICBFWFBFQ1RfRVEoQzJOdW1iZXJUdW5pbmc6OkZyb20oJmlucDEpLCBudWxscHRyKTsKKyAgICAgICAgRVhQRUNUX0VRKEMyTnVtYmVyVHVuaW5nOjpGcm9tKCZpbnAyKSwgbnVsbHB0cik7CisgICAgICAgIEVYUEVDVF9FUShDMk51bWJlclR1bmluZzo6RnJvbSgmb3V0cDEpLCBudWxscHRyKTsKKyAgICAgICAgRVhQRUNUX0VRKEMyTnVtYmVyVHVuaW5nOjpGcm9tKCZvdXRwMiksIG51bGxwdHIpOworICAgICAgICBFWFBFQ1RfRVEoQzJOdW1iZXJQb3J0VHVuaW5nOjpGcm9tKCZpbnAxKSwgJmlucDEpOworICAgICAgICBFWFBFQ1RfRVEoQzJOdW1iZXJQb3J0VHVuaW5nOjpGcm9tKCZpbnAyKSwgKEMyTnVtYmVyUG9ydFR1bmluZyopJmlucDIpOworICAgICAgICBFWFBFQ1RfRVEoQzJOdW1iZXJQb3J0VHVuaW5nOjpGcm9tKCZvdXRwMSksICZvdXRwMSk7CisgICAgICAgIEVYUEVDVF9FUShDMk51bWJlclBvcnRUdW5pbmc6OkZyb20oJm91dHAyKSwgKEMyTnVtYmVyUG9ydFR1bmluZyopJm91dHAyKTsKKyAgICAgICAgRVhQRUNUX0VRKEMyTnVtYmVyUG9ydFR1bmluZzo6aW5wdXQ6OkZyb20oJmlucDEpLCAoQzJOdW1iZXJQb3J0VHVuaW5nOjppbnB1dCopJmlucDEpOworICAgICAgICBFWFBFQ1RfRVEoQzJOdW1iZXJQb3J0VHVuaW5nOjppbnB1dDo6RnJvbSgmaW5wMiksICZpbnAyKTsKKyAgICAgICAgRVhQRUNUX0VRKEMyTnVtYmVyUG9ydFR1bmluZzo6aW5wdXQ6OkZyb20oJm91dHAxKSwgbnVsbHB0cik7CisgICAgICAgIEVYUEVDVF9FUShDMk51bWJlclBvcnRUdW5pbmc6OmlucHV0OjpGcm9tKCZvdXRwMiksIG51bGxwdHIpOworICAgICAgICBFWFBFQ1RfRVEoQzJOdW1iZXJQb3J0VHVuaW5nOjpvdXRwdXQ6OkZyb20oJmlucDEpLCBudWxscHRyKTsKKyAgICAgICAgRVhQRUNUX0VRKEMyTnVtYmVyUG9ydFR1bmluZzo6b3V0cHV0OjpGcm9tKCZpbnAyKSwgbnVsbHB0cik7CisgICAgICAgIEVYUEVDVF9FUShDMk51bWJlclBvcnRUdW5pbmc6Om91dHB1dDo6RnJvbSgmb3V0cDEpLCAoQzJOdW1iZXJQb3J0VHVuaW5nOjpvdXRwdXQqKSZvdXRwMSk7CisgICAgICAgIEVYUEVDVF9FUShDMk51bWJlclBvcnRUdW5pbmc6Om91dHB1dDo6RnJvbSgmb3V0cDIpLCAmb3V0cDIpOworICAgICAgICBFWFBFQ1RfRVEoQzJOdW1iZXJTdHJlYW1UdW5pbmc6OkZyb20oJmlucDEpLCBudWxscHRyKTsKKyAgICAgICAgRVhQRUNUX0VRKEMyTnVtYmVyU3RyZWFtVHVuaW5nOjpGcm9tKCZpbnAyKSwgbnVsbHB0cik7CisgICAgICAgIEVYUEVDVF9FUShDMk51bWJlclN0cmVhbVR1bmluZzo6RnJvbSgmb3V0cDEpLCBudWxscHRyKTsKKyAgICAgICAgRVhQRUNUX0VRKEMyTnVtYmVyU3RyZWFtVHVuaW5nOjpGcm9tKCZvdXRwMiksIG51bGxwdHIpOworICAgICAgICBFWFBFQ1RfRVEoQzJOdW1iZXJTdHJlYW1UdW5pbmc6OmlucHV0OjpGcm9tKCZpbnAxKSwgbnVsbHB0cik7CisgICAgICAgIEVYUEVDVF9FUShDMk51bWJlclN0cmVhbVR1bmluZzo6aW5wdXQ6OkZyb20oJmlucDIpLCBudWxscHRyKTsKKyAgICAgICAgRVhQRUNUX0VRKEMyTnVtYmVyU3RyZWFtVHVuaW5nOjppbnB1dDo6RnJvbSgmb3V0cDEpLCBudWxscHRyKTsKKyAgICAgICAgRVhQRUNUX0VRKEMyTnVtYmVyU3RyZWFtVHVuaW5nOjppbnB1dDo6RnJvbSgmb3V0cDIpLCBudWxscHRyKTsKKyAgICAgICAgRVhQRUNUX0VRKEMyTnVtYmVyU3RyZWFtVHVuaW5nOjpvdXRwdXQ6OkZyb20oJmlucDEpLCBudWxscHRyKTsKKyAgICAgICAgRVhQRUNUX0VRKEMyTnVtYmVyU3RyZWFtVHVuaW5nOjpvdXRwdXQ6OkZyb20oJmlucDIpLCBudWxscHRyKTsKKyAgICAgICAgRVhQRUNUX0VRKEMyTnVtYmVyU3RyZWFtVHVuaW5nOjpvdXRwdXQ6OkZyb20oJm91dHAxKSwgbnVsbHB0cik7CisgICAgICAgIEVYUEVDVF9FUShDMk51bWJlclN0cmVhbVR1bmluZzo6b3V0cHV0OjpGcm9tKCZvdXRwMiksIG51bGxwdHIpOworCisgICAgICAgIEVYUEVDVF9FUSgqKEMyUGFyYW06OkNvcHkoaW5wMSkpLCBpbnAxKTsKKyAgICAgICAgRVhQRUNUX0VRKCooQzJQYXJhbTo6Q29weShpbnAyKSksIGlucDIpOworICAgICAgICBFWFBFQ1RfRVEoKihDMlBhcmFtOjpDb3B5KG91dHAxKSksIG91dHAxKTsKKyAgICAgICAgRVhQRUNUX0VRKCooQzJQYXJhbTo6Q29weShvdXRwMikpLCBvdXRwMik7CisgICAgfQorCisgICAgY29uc3QgQzJOdW1iZXJTdHJlYW1UdW5pbmcgb3V0czEodHJ1ZSwgMXUsIDEwMCksIGluczEoZmFsc2UsIDF1LCAxMDApOworICAgIEMyTnVtYmVyU3RyZWFtVHVuaW5nIGJvdXRzMSwgYmluczEsIGJpbnMzKGZhbHNlLCAxdSwgMTAwKTsKKyAgICBjb25zdCBDMk51bWJlclN0cmVhbVR1bmluZzo6aW5wdXQgaW5zMigxdSwgMTAwKTsKKyAgICBDMk51bWJlclN0cmVhbVR1bmluZzo6aW5wdXQgYmluczI7CisgICAgY29uc3QgQzJOdW1iZXJTdHJlYW1UdW5pbmc6Om91dHB1dCBvdXRzMigxdSwgMTAwKTsKKyAgICBDMk51bWJlclN0cmVhbVR1bmluZzo6b3V0cHV0IGJvdXRzMjsKKworICAgIEVYUEVDVF9FUShpbnMxLmNvcmVJbmRleCgpLCB0dW4uY29yZUluZGV4KCkpOworICAgIEVYUEVDVF9FUShvdXRzMS5jb3JlSW5kZXgoKSwgdHVuLmNvcmVJbmRleCgpKTsKKyAgICBFWFBFQ1RfRVEoYmluczEuY29yZUluZGV4KCksIHR1bi5jb3JlSW5kZXgoKSk7CisgICAgRVhQRUNUX0VRKGJvdXRzMS5jb3JlSW5kZXgoKSwgdHVuLmNvcmVJbmRleCgpKTsKKyAgICBFWFBFQ1RfRVEoaW5zMi5jb3JlSW5kZXgoKSwgdHVuLmNvcmVJbmRleCgpKTsKKyAgICBFWFBFQ1RfRVEob3V0czIuY29yZUluZGV4KCksIHR1bi5jb3JlSW5kZXgoKSk7CisKKyAgICBFWFBFQ1RfRVEoaW5zMS50eXBlKCksIGluczIudHlwZSgpKTsKKyAgICBFWFBFQ1RfRVEoaW5zMS50eXBlKCksIGJpbnMyLnR5cGUoKSk7CisgICAgRVhQRUNUX0VRKG91dHMxLnR5cGUoKSwgb3V0czIudHlwZSgpKTsKKyAgICBFWFBFQ1RfRVEob3V0czEudHlwZSgpLCBib3V0czIudHlwZSgpKTsKKyAgICBFWFBFQ1RfTkUoaW5zMS50eXBlKCksIG91dHMxLnR5cGUoKSk7CisgICAgRVhQRUNUX05FKGluczIudHlwZSgpLCBvdXRzMi50eXBlKCkpOworICAgIEVYUEVDVF9ORShpbnMxLnR5cGUoKSwgYmluczEudHlwZSgpKTsKKyAgICBFWFBFQ1RfTkUob3V0czEudHlwZSgpLCBib3V0czEudHlwZSgpKTsKKyAgICBFWFBFQ1RfTkUoaW5zMS50eXBlKCksIHR1bi50eXBlKCkpOworICAgIEVYUEVDVF9ORShpbnMyLnR5cGUoKSwgdHVuLnR5cGUoKSk7CisKKyAgICB7CisgICAgICAgIHN0YXRpY19hc3NlcnQoY2FuQ2FsbFNldFBvcnQoYmluczMpLCAic2hvdWxkIGJlIGFibGUgdG8iKTsKKyAgICAgICAgc3RhdGljX2Fzc2VydChjYW5DYWxsU2V0UG9ydChiaW5zMSksICJzaG91bGQgYmUgYWJsZSB0byIpOworICAgICAgICBzdGF0aWNfYXNzZXJ0KCFjYW5DYWxsU2V0UG9ydChpbnMxKSwgInNob3VsZCBub3QgYmUgYWJsZSB0byAoY29uc3QpIik7CisgICAgICAgIHN0YXRpY19hc3NlcnQoIWNhbkNhbGxTZXRQb3J0KGluczIpLCAic2hvdWxkIG5vdCBiZSBhYmxlIHRvIChjb25zdCAmIHR5cGUpIik7CisgICAgICAgIHN0YXRpY19hc3NlcnQoIWNhbkNhbGxTZXRQb3J0KGJpbnMyKSwgInNob3VsZCBub3QgYmUgYWJsZSB0byAodHlwZSkiKTsKKworICAgICAgICAvLyBmbGFncyAmIGludmFyaWFibGVzCisgICAgICAgIGZvciAoY29uc3QgYXV0byAmcCA6IHsgb3V0czEsIGluczEsIGJvdXRzMSB9KSB7CisgICAgICAgICAgICBFWFBFQ1RfRVEoMTJ1LCBwLnNpemUoKSk7CisgICAgICAgICAgICBFWFBFQ1RfRkFMU0UocC5pc1ZlbmRvcigpKTsKKyAgICAgICAgICAgIEVYUEVDVF9GQUxTRShwLmlzRmxleGlibGUoKSk7CisgICAgICAgICAgICBFWFBFQ1RfRkFMU0UocC5pc0dsb2JhbCgpKTsKKyAgICAgICAgICAgIEVYUEVDVF9UUlVFKHAuZm9yU3RyZWFtKCkpOworICAgICAgICAgICAgRVhQRUNUX0ZBTFNFKHAuZm9yUG9ydCgpKTsKKyAgICAgICAgfQorICAgICAgICBmb3IgKGNvbnN0IGF1dG8gJnAgOiB7IGluczIsIGJpbnMyIH0pIHsKKyAgICAgICAgICAgIEVYUEVDVF9FUSgxMnUsIHAuc2l6ZSgpKTsKKyAgICAgICAgICAgIEVYUEVDVF9GQUxTRShwLmlzVmVuZG9yKCkpOworICAgICAgICAgICAgRVhQRUNUX0ZBTFNFKHAuaXNGbGV4aWJsZSgpKTsKKyAgICAgICAgICAgIEVYUEVDVF9GQUxTRShwLmlzR2xvYmFsKCkpOworICAgICAgICAgICAgRVhQRUNUX1RSVUUocC5mb3JTdHJlYW0oKSk7CisgICAgICAgICAgICBFWFBFQ1RfRkFMU0UocC5mb3JQb3J0KCkpOworICAgICAgICB9CisgICAgICAgIGZvciAoY29uc3QgYXV0byAmcCA6IHsgb3V0czIsIGJvdXRzMiB9KSB7CisgICAgICAgICAgICBFWFBFQ1RfRVEoMTJ1LCBwLnNpemUoKSk7CisgICAgICAgICAgICBFWFBFQ1RfRkFMU0UocC5pc1ZlbmRvcigpKTsKKyAgICAgICAgICAgIEVYUEVDVF9GQUxTRShwLmlzRmxleGlibGUoKSk7CisgICAgICAgICAgICBFWFBFQ1RfRkFMU0UocC5pc0dsb2JhbCgpKTsKKyAgICAgICAgICAgIEVYUEVDVF9UUlVFKHAuZm9yU3RyZWFtKCkpOworICAgICAgICAgICAgRVhQRUNUX0ZBTFNFKHAuZm9yUG9ydCgpKTsKKyAgICAgICAgfQorCisgICAgICAgIC8vIHBvcnQgc3BlY2lmaWMgZmxhZ3MgJiBpbnZhcmlhYmxlcworICAgICAgICBFWFBFQ1RfRkFMU0Uob3V0czEuZm9ySW5wdXQoKSk7CisgICAgICAgIEVYUEVDVF9UUlVFKG91dHMxLmZvck91dHB1dCgpKTsKKworICAgICAgICBFWFBFQ1RfVFJVRShpbnMxLmZvcklucHV0KCkpOworICAgICAgICBFWFBFQ1RfRkFMU0UoaW5zMS5mb3JPdXRwdXQoKSk7CisKKyAgICAgICAgZm9yIChjb25zdCBhdXRvICZwIDogeyBvdXRzMSwgaW5zMSB9KSB7CisgICAgICAgICAgICBFWFBFQ1RfVFJVRSgoYm9vbClwKTsKKyAgICAgICAgICAgIEVYUEVDVF9GQUxTRSghcCk7CisgICAgICAgICAgICBFWFBFQ1RfRVEoMTAwLCBwLm1OdW1iZXIpOworICAgICAgICAgICAgRVhQRUNUX0VRKDF1LCBwLnN0cmVhbSgpKTsKKyAgICAgICAgfQorICAgICAgICBmb3IgKGNvbnN0IGF1dG8gJnAgOiB7IG91dHMyLCBib3V0czIgfSkgeworICAgICAgICAgICAgRVhQRUNUX1RSVUUoKGJvb2wpcCk7CisgICAgICAgICAgICBFWFBFQ1RfRkFMU0UoIXApOworCisgICAgICAgICAgICBFWFBFQ1RfRkFMU0UocC5mb3JJbnB1dCgpKTsKKyAgICAgICAgICAgIEVYUEVDVF9UUlVFKHAuZm9yT3V0cHV0KCkpOworICAgICAgICB9CisgICAgICAgIGZvciAoY29uc3QgYXV0byAmcCA6IHsgaW5zMiwgYmluczIgfSkgeworICAgICAgICAgICAgRVhQRUNUX1RSVUUoKGJvb2wpcCk7CisgICAgICAgICAgICBFWFBFQ1RfRkFMU0UoIXApOworCisgICAgICAgICAgICBFWFBFQ1RfVFJVRShwLmZvcklucHV0KCkpOworICAgICAgICAgICAgRVhQRUNUX0ZBTFNFKHAuZm9yT3V0cHV0KCkpOworICAgICAgICB9CisgICAgICAgIGZvciAoY29uc3QgYXV0byAmcCA6IHsgYm91dHMxIH0gKSB7CisgICAgICAgICAgICBFWFBFQ1RfRkFMU0UoKGJvb2wpcCk7CisgICAgICAgICAgICBFWFBFQ1RfVFJVRSghcCk7CisKKyAgICAgICAgICAgIEVYUEVDVF9GQUxTRShwLmZvcklucHV0KCkpOworICAgICAgICAgICAgRVhQRUNUX0ZBTFNFKHAuZm9yT3V0cHV0KCkpOworICAgICAgICAgICAgRVhQRUNUX0VRKDAsIHAubU51bWJlcik7CisgICAgICAgIH0KKworICAgICAgICAvLyB2YWx1ZXMKKyAgICAgICAgRVhQRUNUX0VRKDEwMCwgaW5zMi5tTnVtYmVyKTsKKyAgICAgICAgRVhQRUNUX0VRKDEwMCwgb3V0czIubU51bWJlcik7CisgICAgICAgIEVYUEVDVF9FUSgwLCBiaW5zMS5tTnVtYmVyKTsKKyAgICAgICAgRVhQRUNUX0VRKDAsIGJpbnMyLm1OdW1iZXIpOworICAgICAgICBFWFBFQ1RfRVEoMCwgYm91dHMxLm1OdW1iZXIpOworICAgICAgICBFWFBFQ1RfRVEoMCwgYm91dHMyLm1OdW1iZXIpOworCisgICAgICAgIEVYUEVDVF9FUSgxdSwgaW5zMi5zdHJlYW0oKSk7CisgICAgICAgIEVYUEVDVF9FUSgxdSwgb3V0czIuc3RyZWFtKCkpOworICAgICAgICBFWFBFQ1RfRVEoMHUsIGJpbnMxLnN0cmVhbSgpKTsKKyAgICAgICAgRVhQRUNUX0VRKDB1LCBiaW5zMi5zdHJlYW0oKSk7CisgICAgICAgIEVYUEVDVF9FUSgwdSwgYm91dHMxLnN0cmVhbSgpKTsKKyAgICAgICAgRVhQRUNUX0VRKDB1LCBib3V0czIuc3RyZWFtKCkpOworCisgICAgICAgIEVYUEVDVF9UUlVFKGluczEgIT0gb3V0czEpOworICAgICAgICBFWFBFQ1RfVFJVRShpbnMxID09IGluczIpOworICAgICAgICBFWFBFQ1RfVFJVRShvdXRzMSA9PSBvdXRzMik7CisgICAgICAgIEVYUEVDVF9UUlVFKGJpbnMxID09IGJvdXRzMSk7CisgICAgICAgIEVYUEVDVF9UUlVFKGJpbnMyICE9IGJvdXRzMik7CisKKyAgICAgICAgRVhQRUNUX1RSVUUoaW5zMSAhPSBiaW5zMSk7CisgICAgICAgIGJpbnMxLm1OdW1iZXIgPSAxMDA7CisgICAgICAgIEVYUEVDVF9UUlVFKGluczEgIT0gYmluczEpOworICAgICAgICBiaW5zMS5zZXRQb3J0KGZhbHNlIC8qIG91dHB1dCAqLyk7CisgICAgICAgIEVYUEVDVF9UUlVFKGluczEgIT0gYmluczEpOworICAgICAgICBiaW5zMS5zZXRTdHJlYW0oMXUpOworICAgICAgICBFWFBFQ1RfVFJVRShpbnMxID09IGJpbnMxKTsKKworICAgICAgICBFWFBFQ1RfVFJVRShpbnMyICE9IGJpbnMyKTsKKyAgICAgICAgYmluczIubU51bWJlciA9IDEwMDsKKyAgICAgICAgRVhQRUNUX1RSVUUoaW5zMiAhPSBiaW5zMik7CisgICAgICAgIGJpbnMyLnNldFN0cmVhbSgxdSk7CisgICAgICAgIEVYUEVDVF9UUlVFKGluczIgPT0gYmluczIpOworCisgICAgICAgIGJpbnMxLnNldFBvcnQodHJ1ZSAvKiBvdXRwdXQgKi8pOworICAgICAgICBFWFBFQ1RfVFJVRShvdXRzMSA9PSBiaW5zMSk7CisKKyAgICAgICAgRVhQRUNUX1RSVUUob3V0czEgIT0gYm91dHMxKTsKKyAgICAgICAgYm91dHMxLm1OdW1iZXIgPSAxMDA7CisgICAgICAgIEVYUEVDVF9UUlVFKG91dHMxICE9IGJvdXRzMSk7CisgICAgICAgIGJvdXRzMS5zZXRQb3J0KHRydWUgLyogb3V0cHV0ICovKTsKKyAgICAgICAgRVhQRUNUX1RSVUUob3V0czEgIT0gYm91dHMxKTsKKyAgICAgICAgYm91dHMxLnNldFN0cmVhbSgxdSk7CisgICAgICAgIEVYUEVDVF9UUlVFKG91dHMxID09IGJvdXRzMSk7CisKKyAgICAgICAgRVhQRUNUX1RSVUUob3V0czIgIT0gYm91dHMyKTsKKyAgICAgICAgYm91dHMyLm1OdW1iZXIgPSAxMDA7CisgICAgICAgIEVYUEVDVF9UUlVFKG91dHMyICE9IGJvdXRzMik7CisgICAgICAgIGJvdXRzMi5zZXRTdHJlYW0oMXUpOworICAgICAgICBFWFBFQ1RfVFJVRShvdXRzMiA9PSBib3V0czIpOworCisgICAgICAgIGJvdXRzMS5zZXRQb3J0KGZhbHNlIC8qIG91dHB1dCAqLyk7CisgICAgICAgIEVYUEVDVF9UUlVFKGluczEgPT0gYm91dHMxKTsKKworICAgICAgICAvLyBpbmRleAorICAgICAgICBFWFBFQ1RfRVEoQzJQYXJhbTo6VHlwZShpbnMxLnR5cGUoKSkuY29yZUluZGV4KCksIEMyTnVtYmVyU3RydWN0OjpDT1JFX0lOREVYKTsKKyAgICAgICAgRVhQRUNUX0VRKEMyUGFyYW06OlR5cGUoaW5zMS50eXBlKCkpLnR5cGVJbmRleCgpLCBrUGFyYW1JbmRleE51bWJlcik7CisgICAgICAgIEVYUEVDVF9FUShpbnMxLnR5cGUoKSwgQzJOdW1iZXJTdHJlYW1UdW5pbmc6OmlucHV0OjpQQVJBTV9UWVBFKTsKKworICAgICAgICBFWFBFQ1RfRVEoQzJQYXJhbTo6VHlwZShpbnMyLnR5cGUoKSkuY29yZUluZGV4KCksIEMyTnVtYmVyU3RydWN0OjpDT1JFX0lOREVYKTsKKyAgICAgICAgRVhQRUNUX0VRKEMyUGFyYW06OlR5cGUoaW5zMi50eXBlKCkpLnR5cGVJbmRleCgpLCBrUGFyYW1JbmRleE51bWJlcik7CisgICAgICAgIEVYUEVDVF9FUShpbnMyLnR5cGUoKSwgQzJOdW1iZXJTdHJlYW1UdW5pbmc6OmlucHV0OjpQQVJBTV9UWVBFKTsKKworICAgICAgICBFWFBFQ1RfRVEoQzJQYXJhbTo6VHlwZShvdXRzMS50eXBlKCkpLmNvcmVJbmRleCgpLCBDMk51bWJlclN0cnVjdDo6Q09SRV9JTkRFWCk7CisgICAgICAgIEVYUEVDVF9FUShDMlBhcmFtOjpUeXBlKG91dHMxLnR5cGUoKSkudHlwZUluZGV4KCksIGtQYXJhbUluZGV4TnVtYmVyKTsKKyAgICAgICAgRVhQRUNUX0VRKG91dHMxLnR5cGUoKSwgQzJOdW1iZXJTdHJlYW1UdW5pbmc6Om91dHB1dDo6UEFSQU1fVFlQRSk7CisKKyAgICAgICAgRVhQRUNUX0VRKEMyUGFyYW06OlR5cGUob3V0czIudHlwZSgpKS5jb3JlSW5kZXgoKSwgQzJOdW1iZXJTdHJ1Y3Q6OkNPUkVfSU5ERVgpOworICAgICAgICBFWFBFQ1RfRVEoQzJQYXJhbTo6VHlwZShvdXRzMi50eXBlKCkpLnR5cGVJbmRleCgpLCBrUGFyYW1JbmRleE51bWJlcik7CisgICAgICAgIEVYUEVDVF9FUShvdXRzMi50eXBlKCksIEMyTnVtYmVyU3RyZWFtVHVuaW5nOjpvdXRwdXQ6OlBBUkFNX1RZUEUpOworCisgICAgICAgIEMyUGFyYW06OkNvcmVJbmRleCBpbmRleCA9IEMyTnVtYmVyU3RyZWFtVHVuaW5nOjppbnB1dDo6UEFSQU1fVFlQRTsKKyAgICAgICAgRVhQRUNUX0ZBTFNFKGluZGV4LmlzVmVuZG9yKCkpOworICAgICAgICBFWFBFQ1RfRkFMU0UoaW5kZXguaXNGbGV4aWJsZSgpKTsKKyAgICAgICAgRVhQRUNUX0VRKGluZGV4LmNvcmVJbmRleCgpLCBrUGFyYW1JbmRleE51bWJlcik7CisgICAgICAgIEVYUEVDVF9FUShpbmRleC50eXBlSW5kZXgoKSwga1BhcmFtSW5kZXhOdW1iZXIpOworCisgICAgICAgIGluZGV4ID0gQzJOdW1iZXJTdHJlYW1UdW5pbmc6Om91dHB1dDo6UEFSQU1fVFlQRTsKKyAgICAgICAgRVhQRUNUX0ZBTFNFKGluZGV4LmlzVmVuZG9yKCkpOworICAgICAgICBFWFBFQ1RfRkFMU0UoaW5kZXguaXNGbGV4aWJsZSgpKTsKKyAgICAgICAgRVhQRUNUX0VRKGluZGV4LmNvcmVJbmRleCgpLCBrUGFyYW1JbmRleE51bWJlcik7CisgICAgICAgIEVYUEVDVF9FUShpbmRleC50eXBlSW5kZXgoKSwga1BhcmFtSW5kZXhOdW1iZXIpOworCisgICAgICAgIEMyUGFyYW06OlR5cGUgdHlwZSA9IEMyTnVtYmVyU3RyZWFtVHVuaW5nOjppbnB1dDo6UEFSQU1fVFlQRTsKKyAgICAgICAgRVhQRUNUX0ZBTFNFKHR5cGUuaXNWZW5kb3IoKSk7CisgICAgICAgIEVYUEVDVF9GQUxTRSh0eXBlLmlzRmxleGlibGUoKSk7CisgICAgICAgIEVYUEVDVF9GQUxTRSh0eXBlLmlzR2xvYmFsKCkpOworICAgICAgICBFWFBFQ1RfVFJVRSh0eXBlLmZvcklucHV0KCkpOworICAgICAgICBFWFBFQ1RfRkFMU0UodHlwZS5mb3JPdXRwdXQoKSk7CisgICAgICAgIEVYUEVDVF9UUlVFKHR5cGUuZm9yU3RyZWFtKCkpOworICAgICAgICBFWFBFQ1RfRkFMU0UodHlwZS5mb3JQb3J0KCkpOworCisgICAgICAgIHR5cGUgPSBDMk51bWJlclN0cmVhbVR1bmluZzo6b3V0cHV0OjpQQVJBTV9UWVBFOworICAgICAgICBFWFBFQ1RfRkFMU0UodHlwZS5pc1ZlbmRvcigpKTsKKyAgICAgICAgRVhQRUNUX0ZBTFNFKHR5cGUuaXNGbGV4aWJsZSgpKTsKKyAgICAgICAgRVhQRUNUX0ZBTFNFKHR5cGUuaXNHbG9iYWwoKSk7CisgICAgICAgIEVYUEVDVF9GQUxTRSh0eXBlLmZvcklucHV0KCkpOworICAgICAgICBFWFBFQ1RfVFJVRSh0eXBlLmZvck91dHB1dCgpKTsKKyAgICAgICAgRVhQRUNUX1RSVUUodHlwZS5mb3JTdHJlYW0oKSk7CisgICAgICAgIEVYUEVDVF9GQUxTRSh0eXBlLmZvclBvcnQoKSk7CisKKyAgICAgICAgRVhQRUNUX0VRKEMyTnVtYmVyUG9ydFR1bmluZzo6RnJvbShudWxscHRyKSwgbnVsbHB0cik7CisgICAgICAgIEVYUEVDVF9FUShDMk51bWJlclBvcnRUdW5pbmc6OmlucHV0OjpGcm9tKG51bGxwdHIpLCBudWxscHRyKTsKKyAgICAgICAgRVhQRUNUX0VRKEMyTnVtYmVyUG9ydFR1bmluZzo6b3V0cHV0OjpGcm9tKG51bGxwdHIpLCBudWxscHRyKTsKKyAgICAgICAgRVhQRUNUX0VRKEMyTnVtYmVyVHVuaW5nOjpGcm9tKCZpbnMxKSwgbnVsbHB0cik7CisgICAgICAgIEVYUEVDVF9FUShDMk51bWJlclR1bmluZzo6RnJvbSgmaW5zMiksIG51bGxwdHIpOworICAgICAgICBFWFBFQ1RfRVEoQzJOdW1iZXJUdW5pbmc6OkZyb20oJm91dHMxKSwgbnVsbHB0cik7CisgICAgICAgIEVYUEVDVF9FUShDMk51bWJlclR1bmluZzo6RnJvbSgmb3V0czIpLCBudWxscHRyKTsKKyAgICAgICAgRVhQRUNUX0VRKEMyTnVtYmVyUG9ydFR1bmluZzo6RnJvbSgmaW5zMSksIG51bGxwdHIpOworICAgICAgICBFWFBFQ1RfRVEoQzJOdW1iZXJQb3J0VHVuaW5nOjpGcm9tKCZpbnMyKSwgbnVsbHB0cik7CisgICAgICAgIEVYUEVDVF9FUShDMk51bWJlclBvcnRUdW5pbmc6OkZyb20oJm91dHMxKSwgbnVsbHB0cik7CisgICAgICAgIEVYUEVDVF9FUShDMk51bWJlclBvcnRUdW5pbmc6OkZyb20oJm91dHMyKSwgbnVsbHB0cik7CisgICAgICAgIEVYUEVDVF9FUShDMk51bWJlclBvcnRUdW5pbmc6OmlucHV0OjpGcm9tKCZpbnMxKSwgbnVsbHB0cik7CisgICAgICAgIEVYUEVDVF9FUShDMk51bWJlclBvcnRUdW5pbmc6OmlucHV0OjpGcm9tKCZpbnMyKSwgbnVsbHB0cik7CisgICAgICAgIEVYUEVDVF9FUShDMk51bWJlclBvcnRUdW5pbmc6OmlucHV0OjpGcm9tKCZvdXRzMSksIG51bGxwdHIpOworICAgICAgICBFWFBFQ1RfRVEoQzJOdW1iZXJQb3J0VHVuaW5nOjppbnB1dDo6RnJvbSgmb3V0czIpLCBudWxscHRyKTsKKyAgICAgICAgRVhQRUNUX0VRKEMyTnVtYmVyUG9ydFR1bmluZzo6b3V0cHV0OjpGcm9tKCZpbnMxKSwgbnVsbHB0cik7CisgICAgICAgIEVYUEVDVF9FUShDMk51bWJlclBvcnRUdW5pbmc6Om91dHB1dDo6RnJvbSgmaW5zMiksIG51bGxwdHIpOworICAgICAgICBFWFBFQ1RfRVEoQzJOdW1iZXJQb3J0VHVuaW5nOjpvdXRwdXQ6OkZyb20oJm91dHMxKSwgbnVsbHB0cik7CisgICAgICAgIEVYUEVDVF9FUShDMk51bWJlclBvcnRUdW5pbmc6Om91dHB1dDo6RnJvbSgmb3V0czIpLCBudWxscHRyKTsKKyAgICAgICAgRVhQRUNUX0VRKEMyTnVtYmVyU3RyZWFtVHVuaW5nOjpGcm9tKCZpbnMxKSwgJmluczEpOworICAgICAgICBFWFBFQ1RfRVEoQzJOdW1iZXJTdHJlYW1UdW5pbmc6OkZyb20oJmluczIpLCAoQzJOdW1iZXJTdHJlYW1UdW5pbmcqKSZpbnMyKTsKKyAgICAgICAgRVhQRUNUX0VRKEMyTnVtYmVyU3RyZWFtVHVuaW5nOjpGcm9tKCZvdXRzMSksICZvdXRzMSk7CisgICAgICAgIEVYUEVDVF9FUShDMk51bWJlclN0cmVhbVR1bmluZzo6RnJvbSgmb3V0czIpLCAoQzJOdW1iZXJTdHJlYW1UdW5pbmcqKSZvdXRzMik7CisgICAgICAgIEVYUEVDVF9FUShDMk51bWJlclN0cmVhbVR1bmluZzo6aW5wdXQ6OkZyb20oJmluczEpLCAoQzJOdW1iZXJTdHJlYW1UdW5pbmc6OmlucHV0KikmaW5zMSk7CisgICAgICAgIEVYUEVDVF9FUShDMk51bWJlclN0cmVhbVR1bmluZzo6aW5wdXQ6OkZyb20oJmluczIpLCAmaW5zMik7CisgICAgICAgIEVYUEVDVF9FUShDMk51bWJlclN0cmVhbVR1bmluZzo6aW5wdXQ6OkZyb20oJm91dHMxKSwgbnVsbHB0cik7CisgICAgICAgIEVYUEVDVF9FUShDMk51bWJlclN0cmVhbVR1bmluZzo6aW5wdXQ6OkZyb20oJm91dHMyKSwgbnVsbHB0cik7CisgICAgICAgIEVYUEVDVF9FUShDMk51bWJlclN0cmVhbVR1bmluZzo6b3V0cHV0OjpGcm9tKCZpbnMxKSwgbnVsbHB0cik7CisgICAgICAgIEVYUEVDVF9FUShDMk51bWJlclN0cmVhbVR1bmluZzo6b3V0cHV0OjpGcm9tKCZpbnMyKSwgbnVsbHB0cik7CisgICAgICAgIEVYUEVDVF9FUShDMk51bWJlclN0cmVhbVR1bmluZzo6b3V0cHV0OjpGcm9tKCZvdXRzMSksIChDMk51bWJlclN0cmVhbVR1bmluZzo6b3V0cHV0Kikmb3V0czEpOworICAgICAgICBFWFBFQ1RfRVEoQzJOdW1iZXJTdHJlYW1UdW5pbmc6Om91dHB1dDo6RnJvbSgmb3V0czIpLCAmb3V0czIpOworCisgICAgICAgIEVYUEVDVF9FUSgqKEMyUGFyYW06OkNvcHkoaW5zMSkpLCBpbnMxKTsKKyAgICAgICAgRVhQRUNUX0VRKCooQzJQYXJhbTo6Q29weShpbnMyKSksIGluczIpOworICAgICAgICBFWFBFQ1RfRVEoKihDMlBhcmFtOjpDb3B5KG91dHMxKSksIG91dHMxKTsKKyAgICAgICAgRVhQRUNUX0VRKCooQzJQYXJhbTo6Q29weShvdXRzMikpLCBvdXRzMik7CisgICAgfQorCisgICAgeworICAgICAgICB1aW50MzJfdCB2aWRlb1dpZHRoW10gPSB7IDEydSwgQzJOdW1iZXJTdHJlYW1UdW5pbmc6Om91dHB1dDo6UEFSQU1fVFlQRSwgMTAwIH07CisgICAgICAgIEMyUGFyYW0gKnAxID0gQzJQYXJhbTo6RnJvbSh2aWRlb1dpZHRoLCBzaXplb2YodmlkZW9XaWR0aCkpOworICAgICAgICBFWFBFQ1RfTkUocDEsIG51bGxwdHIpOworICAgICAgICBFWFBFQ1RfRVEoMTJ1LCBwMS0+c2l6ZSgpKTsKKyAgICAgICAgRVhQRUNUX0VRKHAxLT50eXBlKCksIEMyTnVtYmVyU3RyZWFtVHVuaW5nOjpvdXRwdXQ6OlBBUkFNX1RZUEUpOworCisgICAgICAgIHAxID0gQzJQYXJhbTo6RnJvbSh2aWRlb1dpZHRoLCBzaXplb2YodmlkZW9XaWR0aCkgKyAyKTsKKyAgICAgICAgRVhQRUNUX0VRKHAxLCBudWxscHRyKTsKKworICAgICAgICBwMSA9IEMyUGFyYW06OkZyb20odmlkZW9XaWR0aCwgc2l6ZW9mKHZpZGVvV2lkdGgpIC0gMik7CisgICAgICAgIEVYUEVDVF9FUShwMSwgbnVsbHB0cik7CisKKyAgICAgICAgcDEgPSBDMlBhcmFtOjpGcm9tKHZpZGVvV2lkdGgsIDMpOworICAgICAgICBFWFBFQ1RfRVEocDEsIG51bGxwdHIpOworCisgICAgICAgIHAxID0gQzJQYXJhbTo6RnJvbSh2aWRlb1dpZHRoLCAwKTsKKyAgICAgICAgRVhQRUNUX0VRKHAxLCBudWxscHRyKTsKKyAgICB9Cit9CisKK3ZvaWQgU3RhdGljVGVzdEFkZENvcmVJbmRleCgpIHsKKyAgICBzdHJ1Y3Qgbm9iYXNlIHt9OworICAgIHN0cnVjdCBiYXNlIHsgZW51bSA6IHVpbnQzMl90IHsgQ09SRV9JTkRFWCA9IDEgfTsgfTsKKyAgICBzdGF0aWNfYXNzZXJ0KF9DMkFkZENvcmVJbmRleDxub2Jhc2UsIDI+OjpDT1JFX0lOREVYID09IDIsICJzaG91bGQgYmUgMiIpOworICAgIHN0YXRpY19hc3NlcnQoX0MyQWRkQ29yZUluZGV4PGJhc2UsIDE+OjpDT1JFX0lOREVYID09IDEsICJzaG91bGQgYmUgMSIpOworfQorCitjbGFzcyBUZXN0RmxleEhlbHBlciB7CisgICAgc3RydWN0IF9GbGV4IHsKKyAgICAgICAgaW50MzJfdCBhOworICAgICAgICBjaGFyIGJbXTsKKyAgICAgICAgX0ZsZXgoKSB7fQorICAgICAgICBGTEVYKF9GbGV4LCBiKTsKKyAgICB9OworCisgICAgc3RydWN0IF9Cb0ZsZXggeworICAgICAgICBfRmxleCBhOworICAgICAgICBfQm9GbGV4KCkge30KKyAgICAgICAgRkxFWChfQm9GbGV4LCBhKTsKKyAgICB9OworCisgICAgc3RydWN0IF9Ob25GbGV4IHsKKyAgICB9OworCisKKyAgICBzdGF0aWMgdm9pZCBTdGF0aWNUZXN0KCkgeworICAgICAgICBzdGF0aWNfYXNzZXJ0KHN0ZDo6aXNfc2FtZTxfQzJGbGV4SGVscGVyPGNoYXI+OjpGbGV4VHlwZSwgdm9pZD46OnZhbHVlLCAic2hvdWxkIGJlIHZvaWQiKTsKKyAgICAgICAgc3RhdGljX2Fzc2VydChzdGQ6OmlzX3NhbWU8X0MyRmxleEhlbHBlcjxjaGFyW10+OjpGbGV4VHlwZSwgY2hhcj46OnZhbHVlLCAic2hvdWxkIGJlIGNoYXIiKTsKKyAgICAgICAgc3RhdGljX2Fzc2VydChzdGQ6OmlzX3NhbWU8X0MyRmxleEhlbHBlcjxfRmxleD46OkZsZXhUeXBlLCBjaGFyPjo6dmFsdWUsICJzaG91bGQgYmUgY2hhciIpOworCisgICAgICAgIHN0YXRpY19hc3NlcnQoc3RkOjppc19zYW1lPF9DMkZsZXhIZWxwZXI8X0JvRmxleD46OkZsZXhUeXBlLCBjaGFyPjo6dmFsdWUsICJzaG91bGQgYmUgdm9pZCIpOworCisgICAgICAgIHN0YXRpY19hc3NlcnQoX0MyRmxleGlibGU8X0ZsZXg+Ojp2YWx1ZSwgInNob3VsZCBiZSBmbGV4aWJsZSIpOworICAgICAgICBzdGF0aWNfYXNzZXJ0KCFfQzJGbGV4aWJsZTxfTm9uRmxleD46OnZhbHVlLCAic2hvdWxkIG5vdCBiZSBmbGV4aWJsZSIpOworICAgIH0KK307CisKK1RFU1RfRihDMlBhcmFtVGVzdCwgRmxleFBhcmFtT3BzVGVzdCkgeworLy8gICAgY29uc3QgQzJOdW1iZXJzU3RydWN0IHN0cnsxMDB9OworICAgIEMyTnVtYmVyc1N0cnVjdCBic3RyOworICAgIHsKKy8vICAgICAgICBFWFBFQ1RfRVEoMTAwLCBzdHItPm0ubU51bWJlcnNbMF0pOworICAgICAgICAodm9pZCkmYnN0ci5tTnVtYmVyc1swXTsKKworICAgICAgICBDMlBhcmFtOjpDb3JlSW5kZXggaW5kZXggPSBDMk51bWJlcnNTdHJ1Y3Q6OkNPUkVfSU5ERVg7CisgICAgICAgIEVYUEVDVF9GQUxTRShpbmRleC5pc1ZlbmRvcigpKTsKKyAgICAgICAgRVhQRUNUX1RSVUUoaW5kZXguaXNGbGV4aWJsZSgpKTsKKyAgICAgICAgRVhQRUNUX0VRKGluZGV4LmNvcmVJbmRleCgpLCBrUGFyYW1JbmRleE51bWJlcnMgfCBDMlBhcmFtOjpDb3JlSW5kZXg6OklTX0ZMRVhfRkxBRyk7CisgICAgICAgIEVYUEVDVF9FUShpbmRleC50eXBlSW5kZXgoKSwga1BhcmFtSW5kZXhOdW1iZXJzKTsKKyAgICB9CisKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8QzJOdW1iZXJzVHVuaW5nPiB0dW5fID0gQzJOdW1iZXJzVHVuaW5nOjpBbGxvY1VuaXF1ZSgxKTsKKyAgICB0dW5fLT5tLm1OdW1iZXJzWzBdID0gMTAwOworICAgIHN0ZDo6dW5pcXVlX3B0cjxjb25zdCBDMk51bWJlcnNUdW5pbmc+IHR1biA9IHN0ZDo6bW92ZSh0dW5fKTsKKyAgICBzdGQ6OnNoYXJlZF9wdHI8QzJOdW1iZXJzVHVuaW5nPiBidHVuID0gQzJOdW1iZXJzVHVuaW5nOjpBbGxvY1NoYXJlZCgxKTsKKworICAgIHsKKyAgICAgICAgLy8gZmxhZ3MgJiBpbnZhcmlhYmxlcworICAgICAgICBjb25zdCBDMk51bWJlcnNUdW5pbmcgKlRbXSA9IHsgdHVuLmdldCgpLCBidHVuLmdldCgpIH07CisgICAgICAgIGZvciAoY29uc3QgYXV0byBwIDogVCkgeworICAgICAgICAgICAgRVhQRUNUX1RSVUUoKGJvb2wpKCpwKSk7CisgICAgICAgICAgICBFWFBFQ1RfRkFMU0UoISgqcCkpOworICAgICAgICAgICAgRVhQRUNUX0VRKDEydSwgcC0+c2l6ZSgpKTsKKworICAgICAgICAgICAgRVhQRUNUX0ZBTFNFKHAtPmlzVmVuZG9yKCkpOworICAgICAgICAgICAgRVhQRUNUX1RSVUUocC0+aXNGbGV4aWJsZSgpKTsKKyAgICAgICAgICAgIEVYUEVDVF9UUlVFKHAtPmlzR2xvYmFsKCkpOworICAgICAgICAgICAgRVhQRUNUX0ZBTFNFKHAtPmZvcklucHV0KCkpOworICAgICAgICAgICAgRVhQRUNUX0ZBTFNFKHAtPmZvck91dHB1dCgpKTsKKyAgICAgICAgICAgIEVYUEVDVF9GQUxTRShwLT5mb3JTdHJlYW0oKSk7CisgICAgICAgICAgICBFWFBFQ1RfRkFMU0UocC0+Zm9yUG9ydCgpKTsKKyAgICAgICAgfQorCisgICAgICAgIC8vIHZhbHVlCisgICAgICAgIEVYUEVDVF9FUSgxMDAsIHR1bi0+bS5tTnVtYmVyc1swXSk7CisgICAgICAgIEVYUEVDVF9FUSgwLCBidHVuLT5tLm1OdW1iZXJzWzBdKTsKKyAgICAgICAgRVhQRUNUX0ZBTFNFKCp0dW4gPT0gKmJ0dW4pOworICAgICAgICBFWFBFQ1RfRkFMU0UodHVuLT5vcGVyYXRvcj09KCpidHVuKSk7CisgICAgICAgIEVYUEVDVF9UUlVFKCp0dW4gIT0gKmJ0dW4pOworICAgICAgICBFWFBFQ1RfVFJVRSh0dW4tPm9wZXJhdG9yIT0oKmJ0dW4pKTsKKyAgICAgICAgYnR1bi0+bS5tTnVtYmVyc1swXSA9IDEwMDsKKyAgICAgICAgRVhQRUNUX0VRKCp0dW4sICpidHVuKTsKKworICAgICAgICAvLyBpbmRleAorICAgICAgICBFWFBFQ1RfRVEoQzJQYXJhbTo6VHlwZSh0dW4tPnR5cGUoKSkuY29yZUluZGV4KCksIEMyTnVtYmVyc1N0cnVjdDo6Q09SRV9JTkRFWCk7CisgICAgICAgIEVYUEVDVF9FUShDMlBhcmFtOjpUeXBlKHR1bi0+dHlwZSgpKS50eXBlSW5kZXgoKSwga1BhcmFtSW5kZXhOdW1iZXJzKTsKKyAgICAgICAgRVhQRUNUX0VRKHR1bi0+dHlwZSgpLCBDMk51bWJlcnNUdW5pbmc6OlBBUkFNX1RZUEUpOworICAgICAgICBFWFBFQ1RfRVEodHVuLT5zdHJlYW0oKSwgfjB1KTsKKworICAgICAgICBDMlBhcmFtOjpDb3JlSW5kZXggaW5kZXggPSBDMk51bWJlcnNUdW5pbmc6OkNPUkVfSU5ERVg7CisgICAgICAgIEVYUEVDVF9GQUxTRShpbmRleC5pc1ZlbmRvcigpKTsKKyAgICAgICAgRVhQRUNUX1RSVUUoaW5kZXguaXNGbGV4aWJsZSgpKTsKKyAgICAgICAgRVhQRUNUX0VRKGluZGV4LmNvcmVJbmRleCgpLCBrUGFyYW1JbmRleE51bWJlcnMgfCBDMlBhcmFtOjpDb3JlSW5kZXg6OklTX0ZMRVhfRkxBRyk7CisgICAgICAgIEVYUEVDVF9FUShpbmRleC50eXBlSW5kZXgoKSwga1BhcmFtSW5kZXhOdW1iZXJzKTsKKworICAgICAgICBDMlBhcmFtOjpUeXBlIHR5cGUgPSBDMk51bWJlcnNUdW5pbmc6OlBBUkFNX1RZUEU7CisgICAgICAgIEVYUEVDVF9GQUxTRSh0eXBlLmlzVmVuZG9yKCkpOworICAgICAgICBFWFBFQ1RfVFJVRSh0eXBlLmlzRmxleGlibGUoKSk7CisgICAgICAgIEVYUEVDVF9UUlVFKHR5cGUuaXNHbG9iYWwoKSk7CisgICAgICAgIEVYUEVDVF9GQUxTRSh0eXBlLmZvcklucHV0KCkpOworICAgICAgICBFWFBFQ1RfRkFMU0UodHlwZS5mb3JPdXRwdXQoKSk7CisgICAgICAgIEVYUEVDVF9GQUxTRSh0eXBlLmZvclN0cmVhbSgpKTsKKyAgICAgICAgRVhQRUNUX0ZBTFNFKHR5cGUuZm9yUG9ydCgpKTsKKworICAgICAgICBFWFBFQ1RfRVEoQzJOdW1iZXJzVHVuaW5nOjpGcm9tKG51bGxwdHIpLCBudWxscHRyKTsKKyAgICAgICAgRVhQRUNUX0VRKEMyTnVtYmVyc1R1bmluZzo6RnJvbSh0dW4uZ2V0KCkpLCB0dW4uZ2V0KCkpOworICAgICAgICBFWFBFQ1RfRVEoQzJOdW1iZXJzUG9ydFR1bmluZzo6RnJvbSh0dW4uZ2V0KCkpLCBudWxscHRyKTsKKyAgICAgICAgRVhQRUNUX0VRKEMyTnVtYmVyc1BvcnRUdW5pbmc6OmlucHV0OjpGcm9tKHR1bi5nZXQoKSksIG51bGxwdHIpOworICAgICAgICBFWFBFQ1RfRVEoQzJOdW1iZXJzUG9ydFR1bmluZzo6b3V0cHV0OjpGcm9tKHR1bi5nZXQoKSksIG51bGxwdHIpOworICAgICAgICBFWFBFQ1RfRVEoQzJOdW1iZXJzU3RyZWFtVHVuaW5nOjpGcm9tKHR1bi5nZXQoKSksIG51bGxwdHIpOworICAgICAgICBFWFBFQ1RfRVEoQzJOdW1iZXJzU3RyZWFtVHVuaW5nOjppbnB1dDo6RnJvbSh0dW4uZ2V0KCkpLCBudWxscHRyKTsKKyAgICAgICAgRVhQRUNUX0VRKEMyTnVtYmVyc1N0cmVhbVR1bmluZzo6b3V0cHV0OjpGcm9tKHR1bi5nZXQoKSksIG51bGxwdHIpOworCisgICAgICAgIEVYUEVDVF9FUSgqKEMyUGFyYW06OkNvcHkoKnR1bikpLCAqdHVuKTsKKyAgICB9CisKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8QzJOdW1iZXJzUG9ydFR1bmluZz4gb3V0cDFfKEMyTnVtYmVyc1BvcnRUdW5pbmc6OkFsbG9jVW5pcXVlKDEsIHRydWUpKSwKKyAgICAgICAgICAgIGlucDFfID0gQzJOdW1iZXJzUG9ydFR1bmluZzo6QWxsb2NVbmlxdWUoMSwgZmFsc2UpOworICAgIG91dHAxXy0+bS5tTnVtYmVyc1swXSA9IDEwMDsKKyAgICBpbnAxXy0+bS5tTnVtYmVyc1swXSA9IDEwMDsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8Y29uc3QgQzJOdW1iZXJzUG9ydFR1bmluZz4gb3V0cDEgPSBzdGQ6Om1vdmUob3V0cDFfKTsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8Y29uc3QgQzJOdW1iZXJzUG9ydFR1bmluZz4gaW5wMSA9IHN0ZDo6bW92ZShpbnAxXyk7CisgICAgc3RkOjpzaGFyZWRfcHRyPEMyTnVtYmVyc1BvcnRUdW5pbmc+IGJvdXRwMShDMk51bWJlcnNQb3J0VHVuaW5nOjpBbGxvY1NoYXJlZCgxKSksCisgICAgICAgICAgICBiaW5wMSA9IEMyTnVtYmVyc1BvcnRUdW5pbmc6OkFsbG9jU2hhcmVkKDEpLAorICAgICAgICAgICAgYmlucDMgPSBDMk51bWJlcnNQb3J0VHVuaW5nOjpBbGxvY1NoYXJlZCgxLCBmYWxzZSk7CisgICAgYmlucDMtPm0ubU51bWJlcnNbMF0gPSAxMDA7CisgICAgc3RkOjp1bmlxdWVfcHRyPEMyTnVtYmVyc1BvcnRUdW5pbmc6OmlucHV0PiBpbnAyXyhDMk51bWJlcnNQb3J0VHVuaW5nOjppbnB1dDo6QWxsb2NVbmlxdWUoMSkpOworICAgIGlucDJfLT5tLm1OdW1iZXJzWzBdID0gMTAwOworICAgIHN0ZDo6dW5pcXVlX3B0cjxjb25zdCBDMk51bWJlcnNQb3J0VHVuaW5nOjppbnB1dD4gaW5wMiA9IHN0ZDo6bW92ZShpbnAyXyk7CisgICAgc3RkOjpzaGFyZWRfcHRyPEMyTnVtYmVyc1BvcnRUdW5pbmc6OmlucHV0PiBiaW5wMihDMk51bWJlcnNQb3J0VHVuaW5nOjppbnB1dDo6QWxsb2NTaGFyZWQoMSkpOworICAgIHN0ZDo6dW5pcXVlX3B0cjxDMk51bWJlcnNQb3J0VHVuaW5nOjpvdXRwdXQ+IG91dHAyXyhDMk51bWJlcnNQb3J0VHVuaW5nOjpvdXRwdXQ6OkFsbG9jVW5pcXVlKDEpKTsKKyAgICBvdXRwMl8tPm0ubU51bWJlcnNbMF0gPSAxMDA7CisgICAgc3RkOjp1bmlxdWVfcHRyPGNvbnN0IEMyTnVtYmVyc1BvcnRUdW5pbmc6Om91dHB1dD4gb3V0cDIgPSBzdGQ6Om1vdmUob3V0cDJfKTsKKyAgICBzdGQ6OnNoYXJlZF9wdHI8QzJOdW1iZXJzUG9ydFR1bmluZzo6b3V0cHV0PiBib3V0cDIoQzJOdW1iZXJzUG9ydFR1bmluZzo6b3V0cHV0OjpBbGxvY1NoYXJlZCgxKSk7CisKKyAgICB7CisgICAgICAgIHN0YXRpY19hc3NlcnQoY2FuQ2FsbFNldFBvcnQoKmJpbnAzKSwgInNob3VsZCBiZSBhYmxlIHRvIik7CisgICAgICAgIHN0YXRpY19hc3NlcnQoY2FuQ2FsbFNldFBvcnQoKmJpbnAxKSwgInNob3VsZCBiZSBhYmxlIHRvIik7CisgICAgICAgIHN0YXRpY19hc3NlcnQoIWNhbkNhbGxTZXRQb3J0KCppbnAxKSwgInNob3VsZCBub3QgYmUgYWJsZSB0byAoY29uc3QpIik7CisgICAgICAgIHN0YXRpY19hc3NlcnQoIWNhbkNhbGxTZXRQb3J0KCppbnAyKSwgInNob3VsZCBub3QgYmUgYWJsZSB0byAoY29uc3QgJiB0eXBlKSIpOworICAgICAgICBzdGF0aWNfYXNzZXJ0KCFjYW5DYWxsU2V0UG9ydCgqYmlucDIpLCAic2hvdWxkIG5vdCBiZSBhYmxlIHRvICh0eXBlKSIpOworCisgICAgICAgIC8vIGZsYWdzICYgaW52YXJpYWJsZXMKKyAgICAgICAgY29uc3QgQzJOdW1iZXJzUG9ydFR1bmluZyAqUFtdID0geyBvdXRwMS5nZXQoKSwgaW5wMS5nZXQoKSwgYm91dHAxLmdldCgpIH07CisgICAgICAgIGZvciAoY29uc3QgYXV0byBwIDogUCkgeworICAgICAgICAgICAgRVhQRUNUX0VRKDEydSwgcC0+c2l6ZSgpKTsKKyAgICAgICAgICAgIEVYUEVDVF9GQUxTRShwLT5pc1ZlbmRvcigpKTsKKyAgICAgICAgICAgIEVYUEVDVF9UUlVFKHAtPmlzRmxleGlibGUoKSk7CisgICAgICAgICAgICBFWFBFQ1RfRkFMU0UocC0+aXNHbG9iYWwoKSk7CisgICAgICAgICAgICBFWFBFQ1RfRkFMU0UocC0+Zm9yU3RyZWFtKCkpOworICAgICAgICAgICAgRVhQRUNUX1RSVUUocC0+Zm9yUG9ydCgpKTsKKyAgICAgICAgfQorICAgICAgICBjb25zdCBDMk51bWJlcnNQb3J0VHVuaW5nOjppbnB1dCAqUElbXSA9IHsgaW5wMi5nZXQoKSwgYmlucDIuZ2V0KCkgfTsKKyAgICAgICAgZm9yIChjb25zdCBhdXRvIHAgOiBQSSkgeworICAgICAgICAgICAgRVhQRUNUX0VRKDEydSwgcC0+c2l6ZSgpKTsKKyAgICAgICAgICAgIEVYUEVDVF9GQUxTRShwLT5pc1ZlbmRvcigpKTsKKyAgICAgICAgICAgIEVYUEVDVF9UUlVFKHAtPmlzRmxleGlibGUoKSk7CisgICAgICAgICAgICBFWFBFQ1RfRkFMU0UocC0+aXNHbG9iYWwoKSk7CisgICAgICAgICAgICBFWFBFQ1RfRkFMU0UocC0+Zm9yU3RyZWFtKCkpOworICAgICAgICAgICAgRVhQRUNUX1RSVUUocC0+Zm9yUG9ydCgpKTsKKyAgICAgICAgfQorICAgICAgICBjb25zdCBDMk51bWJlcnNQb3J0VHVuaW5nOjpvdXRwdXQgKlBPW10gPSB7IG91dHAyLmdldCgpLCBib3V0cDIuZ2V0KCkgfTsKKyAgICAgICAgZm9yIChjb25zdCBhdXRvIHAgOiBQTykgeworICAgICAgICAgICAgRVhQRUNUX0VRKDEydSwgcC0+c2l6ZSgpKTsKKyAgICAgICAgICAgIEVYUEVDVF9GQUxTRShwLT5pc1ZlbmRvcigpKTsKKyAgICAgICAgICAgIEVYUEVDVF9UUlVFKHAtPmlzRmxleGlibGUoKSk7CisgICAgICAgICAgICBFWFBFQ1RfRkFMU0UocC0+aXNHbG9iYWwoKSk7CisgICAgICAgICAgICBFWFBFQ1RfRkFMU0UocC0+Zm9yU3RyZWFtKCkpOworICAgICAgICAgICAgRVhQRUNUX1RSVUUocC0+Zm9yUG9ydCgpKTsKKyAgICAgICAgfQorCisgICAgICAgIC8vIHBvcnQgc3BlY2lmaWMgZmxhZ3MgJiBpbnZhcmlhYmxlcworICAgICAgICBFWFBFQ1RfRkFMU0Uob3V0cDEtPmZvcklucHV0KCkpOworICAgICAgICBFWFBFQ1RfVFJVRShvdXRwMS0+Zm9yT3V0cHV0KCkpOworCisgICAgICAgIEVYUEVDVF9UUlVFKGlucDEtPmZvcklucHV0KCkpOworICAgICAgICBFWFBFQ1RfRkFMU0UoaW5wMS0+Zm9yT3V0cHV0KCkpOworCisgICAgICAgIGNvbnN0IEMyTnVtYmVyc1BvcnRUdW5pbmcgKlAyW10gPSB7IG91dHAxLmdldCgpLCBpbnAxLmdldCgpIH07CisgICAgICAgIGZvciAoY29uc3QgYXV0byBwIDogUDIpIHsKKyAgICAgICAgICAgIEVYUEVDVF9UUlVFKChib29sKSgqcCkpOworICAgICAgICAgICAgRVhQRUNUX0ZBTFNFKCEoKnApKTsKKyAgICAgICAgICAgIEVYUEVDVF9FUSgxMDAsIHAtPm0ubU51bWJlcnNbMF0pOworICAgICAgICB9CisgICAgICAgIGZvciAoY29uc3QgYXV0byBwIDogUE8pIHsKKyAgICAgICAgICAgIEVYUEVDVF9UUlVFKChib29sKSgqcCkpOworICAgICAgICAgICAgRVhQRUNUX0ZBTFNFKCEoKnApKTsKKworICAgICAgICAgICAgRVhQRUNUX0ZBTFNFKHAtPmZvcklucHV0KCkpOworICAgICAgICAgICAgRVhQRUNUX1RSVUUocC0+Zm9yT3V0cHV0KCkpOworICAgICAgICB9CisgICAgICAgIGZvciAoY29uc3QgYXV0byBwIDogUEkpIHsKKyAgICAgICAgICAgIEVYUEVDVF9UUlVFKChib29sKSgqcCkpOworICAgICAgICAgICAgRVhQRUNUX0ZBTFNFKCEoKnApKTsKKworICAgICAgICAgICAgRVhQRUNUX1RSVUUocC0+Zm9ySW5wdXQoKSk7CisgICAgICAgICAgICBFWFBFQ1RfRkFMU0UocC0+Zm9yT3V0cHV0KCkpOworICAgICAgICB9CisgICAgICAgIGNvbnN0IEMyTnVtYmVyc1BvcnRUdW5pbmcgKlAzW10gPSB7IGJvdXRwMS5nZXQoKSB9OworICAgICAgICBmb3IgKGNvbnN0IGF1dG8gcCA6IFAzKSB7CisgICAgICAgICAgICBFWFBFQ1RfRkFMU0UoKGJvb2wpKCpwKSk7CisgICAgICAgICAgICBFWFBFQ1RfVFJVRSghKCpwKSk7CisKKyAgICAgICAgICAgIEVYUEVDVF9GQUxTRShwLT5mb3JJbnB1dCgpKTsKKyAgICAgICAgICAgIEVYUEVDVF9GQUxTRShwLT5mb3JPdXRwdXQoKSk7CisgICAgICAgICAgICBFWFBFQ1RfRVEoMCwgcC0+bS5tTnVtYmVyc1swXSk7CisgICAgICAgIH0KKworICAgICAgICAvLyB2YWx1ZXMKKyAgICAgICAgRVhQRUNUX0VRKDEwMCwgaW5wMi0+bS5tTnVtYmVyc1swXSk7CisgICAgICAgIEVYUEVDVF9FUSgxMDAsIG91dHAyLT5tLm1OdW1iZXJzWzBdKTsKKyAgICAgICAgRVhQRUNUX0VRKDAsIGJpbnAxLT5tLm1OdW1iZXJzWzBdKTsKKyAgICAgICAgRVhQRUNUX0VRKDAsIGJpbnAyLT5tLm1OdW1iZXJzWzBdKTsKKyAgICAgICAgRVhQRUNUX0VRKDAsIGJvdXRwMS0+bS5tTnVtYmVyc1swXSk7CisgICAgICAgIEVYUEVDVF9FUSgwLCBib3V0cDItPm0ubU51bWJlcnNbMF0pOworCisgICAgICAgIEVYUEVDVF9UUlVFKCppbnAxICE9ICpvdXRwMSk7CisgICAgICAgIEVYUEVDVF9UUlVFKCppbnAxID09ICppbnAyKTsKKyAgICAgICAgRVhQRUNUX1RSVUUoKm91dHAxID09ICpvdXRwMik7CisgICAgICAgIEVYUEVDVF9UUlVFKCpiaW5wMSA9PSAqYm91dHAxKTsKKyAgICAgICAgRVhQRUNUX1RSVUUoKmJpbnAyICE9ICpib3V0cDIpOworCisgICAgICAgIEVYUEVDVF9UUlVFKCppbnAxICE9ICpiaW5wMSk7CisgICAgICAgIGJpbnAxLT5tLm1OdW1iZXJzWzBdID0gMTAwOworICAgICAgICBFWFBFQ1RfVFJVRSgqaW5wMSAhPSAqYmlucDEpOworICAgICAgICBiaW5wMS0+c2V0UG9ydChmYWxzZSAvKiBvdXRwdXQgKi8pOworICAgICAgICBFWFBFQ1RfVFJVRSgoYm9vbCkqYmlucDEpOworICAgICAgICBFWFBFQ1RfRkFMU0UoISpiaW5wMSk7CisgICAgICAgIEVYUEVDVF9UUlVFKCppbnAxID09ICpiaW5wMSk7CisKKyAgICAgICAgRVhQRUNUX1RSVUUoKmlucDIgIT0gKmJpbnAyKTsKKyAgICAgICAgYmlucDItPm0ubU51bWJlcnNbMF0gPSAxMDA7CisgICAgICAgIEVYUEVDVF9UUlVFKCppbnAyID09ICpiaW5wMik7CisKKyAgICAgICAgYmlucDEtPnNldFBvcnQodHJ1ZSAvKiBvdXRwdXQgKi8pOworICAgICAgICBFWFBFQ1RfVFJVRSgqb3V0cDEgPT0gKmJpbnAxKTsKKworICAgICAgICBFWFBFQ1RfVFJVRSgqb3V0cDEgIT0gKmJvdXRwMSk7CisgICAgICAgIGJvdXRwMS0+bS5tTnVtYmVyc1swXSA9IDEwMDsKKyAgICAgICAgRVhQRUNUX1RSVUUoKm91dHAxICE9ICpib3V0cDEpOworICAgICAgICBib3V0cDEtPnNldFBvcnQodHJ1ZSAvKiBvdXRwdXQgKi8pOworICAgICAgICBFWFBFQ1RfVFJVRSgoYm9vbCkqYm91dHAxKTsKKyAgICAgICAgRVhQRUNUX0ZBTFNFKCEqYm91dHAxKTsKKyAgICAgICAgRVhQRUNUX1RSVUUoKm91dHAxID09ICpib3V0cDEpOworCisgICAgICAgIEVYUEVDVF9UUlVFKCpvdXRwMiAhPSAqYm91dHAyKTsKKyAgICAgICAgYm91dHAyLT5tLm1OdW1iZXJzWzBdID0gMTAwOworICAgICAgICBFWFBFQ1RfVFJVRSgqb3V0cDIgPT0gKmJvdXRwMik7CisKKyAgICAgICAgYm91dHAxLT5zZXRQb3J0KGZhbHNlIC8qIG91dHB1dCAqLyk7CisgICAgICAgIEVYUEVDVF9UUlVFKCppbnAxID09ICpib3V0cDEpOworCisgICAgICAgIC8vIGluZGV4CisgICAgICAgIEVYUEVDVF9FUShDMlBhcmFtOjpUeXBlKGlucDEtPnR5cGUoKSkuY29yZUluZGV4KCksIEMyTnVtYmVyc1N0cnVjdDo6Q09SRV9JTkRFWCk7CisgICAgICAgIEVYUEVDVF9FUShDMlBhcmFtOjpUeXBlKGlucDEtPnR5cGUoKSkudHlwZUluZGV4KCksIGtQYXJhbUluZGV4TnVtYmVycyk7CisgICAgICAgIEVYUEVDVF9FUShpbnAxLT50eXBlKCksIEMyTnVtYmVyc1BvcnRUdW5pbmc6OmlucHV0OjpQQVJBTV9UWVBFKTsKKyAgICAgICAgRVhQRUNUX0VRKGlucDEtPnN0cmVhbSgpLCB+MHUpOworCisgICAgICAgIEVYUEVDVF9FUShDMlBhcmFtOjpUeXBlKGlucDItPnR5cGUoKSkuY29yZUluZGV4KCksIEMyTnVtYmVyc1N0cnVjdDo6Q09SRV9JTkRFWCk7CisgICAgICAgIEVYUEVDVF9FUShDMlBhcmFtOjpUeXBlKGlucDItPnR5cGUoKSkudHlwZUluZGV4KCksIGtQYXJhbUluZGV4TnVtYmVycyk7CisgICAgICAgIEVYUEVDVF9FUShpbnAyLT50eXBlKCksIEMyTnVtYmVyc1BvcnRUdW5pbmc6OmlucHV0OjpQQVJBTV9UWVBFKTsKKyAgICAgICAgRVhQRUNUX0VRKGlucDItPnN0cmVhbSgpLCB+MHUpOworCisgICAgICAgIEVYUEVDVF9FUShDMlBhcmFtOjpUeXBlKG91dHAxLT50eXBlKCkpLmNvcmVJbmRleCgpLCBDMk51bWJlcnNTdHJ1Y3Q6OkNPUkVfSU5ERVgpOworICAgICAgICBFWFBFQ1RfRVEoQzJQYXJhbTo6VHlwZShvdXRwMS0+dHlwZSgpKS50eXBlSW5kZXgoKSwga1BhcmFtSW5kZXhOdW1iZXJzKTsKKyAgICAgICAgRVhQRUNUX0VRKG91dHAxLT50eXBlKCksIEMyTnVtYmVyc1BvcnRUdW5pbmc6Om91dHB1dDo6UEFSQU1fVFlQRSk7CisgICAgICAgIEVYUEVDVF9FUShvdXRwMS0+c3RyZWFtKCksIH4wdSk7CisKKyAgICAgICAgRVhQRUNUX0VRKEMyUGFyYW06OlR5cGUob3V0cDItPnR5cGUoKSkuY29yZUluZGV4KCksIEMyTnVtYmVyc1N0cnVjdDo6Q09SRV9JTkRFWCk7CisgICAgICAgIEVYUEVDVF9FUShDMlBhcmFtOjpUeXBlKG91dHAyLT50eXBlKCkpLnR5cGVJbmRleCgpLCBrUGFyYW1JbmRleE51bWJlcnMpOworICAgICAgICBFWFBFQ1RfRVEob3V0cDItPnR5cGUoKSwgQzJOdW1iZXJzUG9ydFR1bmluZzo6b3V0cHV0OjpQQVJBTV9UWVBFKTsKKyAgICAgICAgRVhQRUNUX0VRKG91dHAyLT5zdHJlYW0oKSwgfjB1KTsKKworICAgICAgICBDMlBhcmFtOjpDb3JlSW5kZXggaW5kZXggPSBDMk51bWJlcnNQb3J0VHVuaW5nOjppbnB1dDo6UEFSQU1fVFlQRTsKKyAgICAgICAgRVhQRUNUX0ZBTFNFKGluZGV4LmlzVmVuZG9yKCkpOworICAgICAgICBFWFBFQ1RfVFJVRShpbmRleC5pc0ZsZXhpYmxlKCkpOworICAgICAgICBFWFBFQ1RfRVEoaW5kZXguY29yZUluZGV4KCksIGtQYXJhbUluZGV4TnVtYmVycyB8IEMyUGFyYW06OkNvcmVJbmRleDo6SVNfRkxFWF9GTEFHKTsKKyAgICAgICAgRVhQRUNUX0VRKGluZGV4LnR5cGVJbmRleCgpLCBrUGFyYW1JbmRleE51bWJlcnMpOworCisgICAgICAgIGluZGV4ID0gQzJOdW1iZXJzUG9ydFR1bmluZzo6b3V0cHV0OjpQQVJBTV9UWVBFOworICAgICAgICBFWFBFQ1RfRkFMU0UoaW5kZXguaXNWZW5kb3IoKSk7CisgICAgICAgIEVYUEVDVF9UUlVFKGluZGV4LmlzRmxleGlibGUoKSk7CisgICAgICAgIEVYUEVDVF9FUShpbmRleC5jb3JlSW5kZXgoKSwga1BhcmFtSW5kZXhOdW1iZXJzIHwgQzJQYXJhbTo6Q29yZUluZGV4OjpJU19GTEVYX0ZMQUcpOworICAgICAgICBFWFBFQ1RfRVEoaW5kZXgudHlwZUluZGV4KCksIGtQYXJhbUluZGV4TnVtYmVycyk7CisKKyAgICAgICAgQzJQYXJhbTo6VHlwZSB0eXBlID0gQzJOdW1iZXJzUG9ydFR1bmluZzo6aW5wdXQ6OlBBUkFNX1RZUEU7CisgICAgICAgIEVYUEVDVF9GQUxTRSh0eXBlLmlzVmVuZG9yKCkpOworICAgICAgICBFWFBFQ1RfVFJVRSh0eXBlLmlzRmxleGlibGUoKSk7CisgICAgICAgIEVYUEVDVF9GQUxTRSh0eXBlLmlzR2xvYmFsKCkpOworICAgICAgICBFWFBFQ1RfVFJVRSh0eXBlLmZvcklucHV0KCkpOworICAgICAgICBFWFBFQ1RfRkFMU0UodHlwZS5mb3JPdXRwdXQoKSk7CisgICAgICAgIEVYUEVDVF9GQUxTRSh0eXBlLmZvclN0cmVhbSgpKTsKKyAgICAgICAgRVhQRUNUX1RSVUUodHlwZS5mb3JQb3J0KCkpOworCisgICAgICAgIHR5cGUgPSBDMk51bWJlcnNQb3J0VHVuaW5nOjpvdXRwdXQ6OlBBUkFNX1RZUEU7CisgICAgICAgIEVYUEVDVF9GQUxTRSh0eXBlLmlzVmVuZG9yKCkpOworICAgICAgICBFWFBFQ1RfVFJVRSh0eXBlLmlzRmxleGlibGUoKSk7CisgICAgICAgIEVYUEVDVF9GQUxTRSh0eXBlLmlzR2xvYmFsKCkpOworICAgICAgICBFWFBFQ1RfRkFMU0UodHlwZS5mb3JJbnB1dCgpKTsKKyAgICAgICAgRVhQRUNUX1RSVUUodHlwZS5mb3JPdXRwdXQoKSk7CisgICAgICAgIEVYUEVDVF9GQUxTRSh0eXBlLmZvclN0cmVhbSgpKTsKKyAgICAgICAgRVhQRUNUX1RSVUUodHlwZS5mb3JQb3J0KCkpOworCisgICAgICAgIEVYUEVDVF9FUShDMk51bWJlcnNQb3J0VHVuaW5nOjpGcm9tKG51bGxwdHIpLCBudWxscHRyKTsKKyAgICAgICAgRVhQRUNUX0VRKEMyTnVtYmVyc1BvcnRUdW5pbmc6OmlucHV0OjpGcm9tKG51bGxwdHIpLCBudWxscHRyKTsKKyAgICAgICAgRVhQRUNUX0VRKEMyTnVtYmVyc1BvcnRUdW5pbmc6Om91dHB1dDo6RnJvbShudWxscHRyKSwgbnVsbHB0cik7CisgICAgICAgIEVYUEVDVF9FUShDMk51bWJlcnNUdW5pbmc6OkZyb20oaW5wMS5nZXQoKSksIG51bGxwdHIpOworICAgICAgICBFWFBFQ1RfRVEoQzJOdW1iZXJzVHVuaW5nOjpGcm9tKGlucDIuZ2V0KCkpLCBudWxscHRyKTsKKyAgICAgICAgRVhQRUNUX0VRKEMyTnVtYmVyc1R1bmluZzo6RnJvbShvdXRwMS5nZXQoKSksIG51bGxwdHIpOworICAgICAgICBFWFBFQ1RfRVEoQzJOdW1iZXJzVHVuaW5nOjpGcm9tKG91dHAyLmdldCgpKSwgbnVsbHB0cik7CisgICAgICAgIEVYUEVDVF9FUShDMk51bWJlcnNQb3J0VHVuaW5nOjpGcm9tKGlucDEuZ2V0KCkpLCBpbnAxLmdldCgpKTsKKyAgICAgICAgRVhQRUNUX0VRKEMyTnVtYmVyc1BvcnRUdW5pbmc6OkZyb20oaW5wMi5nZXQoKSksIChDMk51bWJlcnNQb3J0VHVuaW5nKilpbnAyLmdldCgpKTsKKyAgICAgICAgRVhQRUNUX0VRKEMyTnVtYmVyc1BvcnRUdW5pbmc6OkZyb20ob3V0cDEuZ2V0KCkpLCBvdXRwMS5nZXQoKSk7CisgICAgICAgIEVYUEVDVF9FUShDMk51bWJlcnNQb3J0VHVuaW5nOjpGcm9tKG91dHAyLmdldCgpKSwgKEMyTnVtYmVyc1BvcnRUdW5pbmcqKW91dHAyLmdldCgpKTsKKyAgICAgICAgRVhQRUNUX0VRKEMyTnVtYmVyc1BvcnRUdW5pbmc6OmlucHV0OjpGcm9tKGlucDEuZ2V0KCkpLCAoQzJOdW1iZXJzUG9ydFR1bmluZzo6aW5wdXQqKWlucDEuZ2V0KCkpOworICAgICAgICBFWFBFQ1RfRVEoQzJOdW1iZXJzUG9ydFR1bmluZzo6aW5wdXQ6OkZyb20oaW5wMi5nZXQoKSksIGlucDIuZ2V0KCkpOworICAgICAgICBFWFBFQ1RfRVEoQzJOdW1iZXJzUG9ydFR1bmluZzo6aW5wdXQ6OkZyb20ob3V0cDEuZ2V0KCkpLCBudWxscHRyKTsKKyAgICAgICAgRVhQRUNUX0VRKEMyTnVtYmVyc1BvcnRUdW5pbmc6OmlucHV0OjpGcm9tKG91dHAyLmdldCgpKSwgbnVsbHB0cik7CisgICAgICAgIEVYUEVDVF9FUShDMk51bWJlcnNQb3J0VHVuaW5nOjpvdXRwdXQ6OkZyb20oaW5wMS5nZXQoKSksIG51bGxwdHIpOworICAgICAgICBFWFBFQ1RfRVEoQzJOdW1iZXJzUG9ydFR1bmluZzo6b3V0cHV0OjpGcm9tKGlucDIuZ2V0KCkpLCBudWxscHRyKTsKKyAgICAgICAgRVhQRUNUX0VRKEMyTnVtYmVyc1BvcnRUdW5pbmc6Om91dHB1dDo6RnJvbShvdXRwMS5nZXQoKSksIChDMk51bWJlcnNQb3J0VHVuaW5nOjpvdXRwdXQqKW91dHAxLmdldCgpKTsKKyAgICAgICAgRVhQRUNUX0VRKEMyTnVtYmVyc1BvcnRUdW5pbmc6Om91dHB1dDo6RnJvbShvdXRwMi5nZXQoKSksIG91dHAyLmdldCgpKTsKKyAgICAgICAgRVhQRUNUX0VRKEMyTnVtYmVyc1N0cmVhbVR1bmluZzo6RnJvbShpbnAxLmdldCgpKSwgbnVsbHB0cik7CisgICAgICAgIEVYUEVDVF9FUShDMk51bWJlcnNTdHJlYW1UdW5pbmc6OkZyb20oaW5wMi5nZXQoKSksIG51bGxwdHIpOworICAgICAgICBFWFBFQ1RfRVEoQzJOdW1iZXJzU3RyZWFtVHVuaW5nOjpGcm9tKG91dHAxLmdldCgpKSwgbnVsbHB0cik7CisgICAgICAgIEVYUEVDVF9FUShDMk51bWJlcnNTdHJlYW1UdW5pbmc6OkZyb20ob3V0cDIuZ2V0KCkpLCBudWxscHRyKTsKKyAgICAgICAgRVhQRUNUX0VRKEMyTnVtYmVyc1N0cmVhbVR1bmluZzo6aW5wdXQ6OkZyb20oaW5wMS5nZXQoKSksIG51bGxwdHIpOworICAgICAgICBFWFBFQ1RfRVEoQzJOdW1iZXJzU3RyZWFtVHVuaW5nOjppbnB1dDo6RnJvbShpbnAyLmdldCgpKSwgbnVsbHB0cik7CisgICAgICAgIEVYUEVDVF9FUShDMk51bWJlcnNTdHJlYW1UdW5pbmc6OmlucHV0OjpGcm9tKG91dHAxLmdldCgpKSwgbnVsbHB0cik7CisgICAgICAgIEVYUEVDVF9FUShDMk51bWJlcnNTdHJlYW1UdW5pbmc6OmlucHV0OjpGcm9tKG91dHAyLmdldCgpKSwgbnVsbHB0cik7CisgICAgICAgIEVYUEVDVF9FUShDMk51bWJlcnNTdHJlYW1UdW5pbmc6Om91dHB1dDo6RnJvbShpbnAxLmdldCgpKSwgbnVsbHB0cik7CisgICAgICAgIEVYUEVDVF9FUShDMk51bWJlcnNTdHJlYW1UdW5pbmc6Om91dHB1dDo6RnJvbShpbnAyLmdldCgpKSwgbnVsbHB0cik7CisgICAgICAgIEVYUEVDVF9FUShDMk51bWJlcnNTdHJlYW1UdW5pbmc6Om91dHB1dDo6RnJvbShvdXRwMS5nZXQoKSksIG51bGxwdHIpOworICAgICAgICBFWFBFQ1RfRVEoQzJOdW1iZXJzU3RyZWFtVHVuaW5nOjpvdXRwdXQ6OkZyb20ob3V0cDIuZ2V0KCkpLCBudWxscHRyKTsKKworICAgICAgICBFWFBFQ1RfRVEoKihDMlBhcmFtOjpDb3B5KCppbnAxKSksICppbnAxKTsKKyAgICAgICAgRVhQRUNUX0VRKCooQzJQYXJhbTo6Q29weSgqaW5wMikpLCAqaW5wMik7CisgICAgICAgIEVYUEVDVF9FUSgqKEMyUGFyYW06OkNvcHkoKm91dHAxKSksICpvdXRwMSk7CisgICAgICAgIEVYUEVDVF9FUSgqKEMyUGFyYW06OkNvcHkoKm91dHAyKSksICpvdXRwMik7CisgICAgfQorCisgICAgc3RkOjp1bmlxdWVfcHRyPEMyTnVtYmVyc1N0cmVhbVR1bmluZz4gb3V0czFfKEMyTnVtYmVyc1N0cmVhbVR1bmluZzo6QWxsb2NVbmlxdWUoMSwgdHJ1ZSwgMXUpKTsKKyAgICBvdXRzMV8tPm0ubU51bWJlcnNbMF0gPSAxMDA7CisgICAgc3RkOjp1bmlxdWVfcHRyPGNvbnN0IEMyTnVtYmVyc1N0cmVhbVR1bmluZz4gb3V0czEgPSBzdGQ6Om1vdmUob3V0czFfKTsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8QzJOdW1iZXJzU3RyZWFtVHVuaW5nPiBpbnMxXyhDMk51bWJlcnNTdHJlYW1UdW5pbmc6OkFsbG9jVW5pcXVlKDEsIGZhbHNlLCAxdSkpOworICAgIGluczFfLT5tLm1OdW1iZXJzWzBdID0gMTAwOworICAgIHN0ZDo6dW5pcXVlX3B0cjxjb25zdCBDMk51bWJlcnNTdHJlYW1UdW5pbmc+IGluczEgPSBzdGQ6Om1vdmUoaW5zMV8pOworICAgIHN0ZDo6c2hhcmVkX3B0cjxDMk51bWJlcnNTdHJlYW1UdW5pbmc+IGJvdXRzMShDMk51bWJlcnNTdHJlYW1UdW5pbmc6OkFsbG9jU2hhcmVkKDEpKTsKKyAgICBzdGQ6OnNoYXJlZF9wdHI8QzJOdW1iZXJzU3RyZWFtVHVuaW5nPiBiaW5zMShDMk51bWJlcnNTdHJlYW1UdW5pbmc6OkFsbG9jU2hhcmVkKDEpKTsKKyAgICBzdGQ6OnNoYXJlZF9wdHI8QzJOdW1iZXJzU3RyZWFtVHVuaW5nPiBiaW5zMyhDMk51bWJlcnNTdHJlYW1UdW5pbmc6OkFsbG9jU2hhcmVkKDEsIGZhbHNlLCAxdSkpOworICAgIGJpbnMzLT5tLm1OdW1iZXJzWzBdID0gMTAwOworICAgIHN0ZDo6dW5pcXVlX3B0cjxDMk51bWJlcnNTdHJlYW1UdW5pbmc6OmlucHV0PiBpbnMyXyhDMk51bWJlcnNTdHJlYW1UdW5pbmc6OmlucHV0OjpBbGxvY1VuaXF1ZSgxLCAxdSkpOworICAgIGluczJfLT5tLm1OdW1iZXJzWzBdID0gMTAwOworICAgIHN0ZDo6dW5pcXVlX3B0cjxjb25zdCBDMk51bWJlcnNTdHJlYW1UdW5pbmc6OmlucHV0PiBpbnMyID0gc3RkOjptb3ZlKGluczJfKTsKKyAgICBzdGQ6OnNoYXJlZF9wdHI8QzJOdW1iZXJzU3RyZWFtVHVuaW5nOjppbnB1dD4gYmluczIoQzJOdW1iZXJzU3RyZWFtVHVuaW5nOjppbnB1dDo6QWxsb2NTaGFyZWQoMSkpOworICAgIHN0ZDo6dW5pcXVlX3B0cjxDMk51bWJlcnNTdHJlYW1UdW5pbmc6Om91dHB1dD4gb3V0czJfKEMyTnVtYmVyc1N0cmVhbVR1bmluZzo6b3V0cHV0OjpBbGxvY1VuaXF1ZSgxLCAxdSkpOworICAgIG91dHMyXy0+bS5tTnVtYmVyc1swXSA9IDEwMDsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8Y29uc3QgQzJOdW1iZXJzU3RyZWFtVHVuaW5nOjpvdXRwdXQ+IG91dHMyID0gc3RkOjptb3ZlKG91dHMyXyk7CisgICAgc3RkOjpzaGFyZWRfcHRyPEMyTnVtYmVyc1N0cmVhbVR1bmluZzo6b3V0cHV0PiBib3V0czIoQzJOdW1iZXJzU3RyZWFtVHVuaW5nOjpvdXRwdXQ6OkFsbG9jU2hhcmVkKDEpKTsKKworICAgIHsKKyAgICAgICAgc3RhdGljX2Fzc2VydChjYW5DYWxsU2V0UG9ydCgqYmluczMpLCAic2hvdWxkIGJlIGFibGUgdG8iKTsKKyAgICAgICAgc3RhdGljX2Fzc2VydChjYW5DYWxsU2V0UG9ydCgqYmluczEpLCAic2hvdWxkIGJlIGFibGUgdG8iKTsKKyAgICAgICAgc3RhdGljX2Fzc2VydCghY2FuQ2FsbFNldFBvcnQoKmluczEpLCAic2hvdWxkIG5vdCBiZSBhYmxlIHRvIChjb25zdCkiKTsKKyAgICAgICAgc3RhdGljX2Fzc2VydCghY2FuQ2FsbFNldFBvcnQoKmluczIpLCAic2hvdWxkIG5vdCBiZSBhYmxlIHRvIChjb25zdCAmIHR5cGUpIik7CisgICAgICAgIHN0YXRpY19hc3NlcnQoIWNhbkNhbGxTZXRQb3J0KCpiaW5zMiksICJzaG91bGQgbm90IGJlIGFibGUgdG8gKHR5cGUpIik7CisKKyAgICAgICAgLy8gZmxhZ3MgJiBpbnZhcmlhYmxlcworICAgICAgICBjb25zdCBDMk51bWJlcnNTdHJlYW1UdW5pbmcgKlNbXSA9IHsgb3V0czEuZ2V0KCksIGluczEuZ2V0KCksIGJvdXRzMS5nZXQoKSB9OworICAgICAgICBmb3IgKGNvbnN0IGF1dG8gcCA6IFMpIHsKKyAgICAgICAgICAgIEVYUEVDVF9FUSgxMnUsIHAtPnNpemUoKSk7CisgICAgICAgICAgICBFWFBFQ1RfRkFMU0UocC0+aXNWZW5kb3IoKSk7CisgICAgICAgICAgICBFWFBFQ1RfVFJVRShwLT5pc0ZsZXhpYmxlKCkpOworICAgICAgICAgICAgRVhQRUNUX0ZBTFNFKHAtPmlzR2xvYmFsKCkpOworICAgICAgICAgICAgRVhQRUNUX1RSVUUocC0+Zm9yU3RyZWFtKCkpOworICAgICAgICAgICAgRVhQRUNUX0ZBTFNFKHAtPmZvclBvcnQoKSk7CisgICAgICAgIH0KKyAgICAgICAgY29uc3QgQzJOdW1iZXJzU3RyZWFtVHVuaW5nOjppbnB1dCAqU0lbXSA9IHsgaW5zMi5nZXQoKSwgYmluczIuZ2V0KCkgfTsKKyAgICAgICAgZm9yIChjb25zdCBhdXRvIHAgOiBTSSkgeworICAgICAgICAgICAgRVhQRUNUX0VRKDEydSwgcC0+c2l6ZSgpKTsKKyAgICAgICAgICAgIEVYUEVDVF9GQUxTRShwLT5pc1ZlbmRvcigpKTsKKyAgICAgICAgICAgIEVYUEVDVF9UUlVFKHAtPmlzRmxleGlibGUoKSk7CisgICAgICAgICAgICBFWFBFQ1RfRkFMU0UocC0+aXNHbG9iYWwoKSk7CisgICAgICAgICAgICBFWFBFQ1RfVFJVRShwLT5mb3JTdHJlYW0oKSk7CisgICAgICAgICAgICBFWFBFQ1RfRkFMU0UocC0+Zm9yUG9ydCgpKTsKKyAgICAgICAgfQorICAgICAgICBjb25zdCBDMk51bWJlcnNTdHJlYW1UdW5pbmc6Om91dHB1dCAqU09bXSA9IHsgb3V0czIuZ2V0KCksIGJvdXRzMi5nZXQoKSB9OworICAgICAgICBmb3IgKGNvbnN0IGF1dG8gcCA6IFNPKSB7CisgICAgICAgICAgICBFWFBFQ1RfRVEoMTJ1LCBwLT5zaXplKCkpOworICAgICAgICAgICAgRVhQRUNUX0ZBTFNFKHAtPmlzVmVuZG9yKCkpOworICAgICAgICAgICAgRVhQRUNUX1RSVUUocC0+aXNGbGV4aWJsZSgpKTsKKyAgICAgICAgICAgIEVYUEVDVF9GQUxTRShwLT5pc0dsb2JhbCgpKTsKKyAgICAgICAgICAgIEVYUEVDVF9UUlVFKHAtPmZvclN0cmVhbSgpKTsKKyAgICAgICAgICAgIEVYUEVDVF9GQUxTRShwLT5mb3JQb3J0KCkpOworICAgICAgICB9CisKKyAgICAgICAgLy8gcG9ydCBzcGVjaWZpYyBmbGFncyAmIGludmFyaWFibGVzCisgICAgICAgIEVYUEVDVF9GQUxTRShvdXRzMS0+Zm9ySW5wdXQoKSk7CisgICAgICAgIEVYUEVDVF9UUlVFKG91dHMxLT5mb3JPdXRwdXQoKSk7CisKKyAgICAgICAgRVhQRUNUX1RSVUUoaW5zMS0+Zm9ySW5wdXQoKSk7CisgICAgICAgIEVYUEVDVF9GQUxTRShpbnMxLT5mb3JPdXRwdXQoKSk7CisKKyAgICAgICAgY29uc3QgQzJOdW1iZXJzU3RyZWFtVHVuaW5nICpTMltdID0geyBvdXRzMS5nZXQoKSwgaW5zMS5nZXQoKSB9OworICAgICAgICBmb3IgKGNvbnN0IGF1dG8gcCA6IFMyKSB7CisgICAgICAgICAgICBFWFBFQ1RfVFJVRSgoYm9vbCkoKnApKTsKKyAgICAgICAgICAgIEVYUEVDVF9GQUxTRSghKCpwKSk7CisgICAgICAgICAgICBFWFBFQ1RfRVEoMTAwLCBwLT5tLm1OdW1iZXJzWzBdKTsKKyAgICAgICAgICAgIEVYUEVDVF9FUSgxdSwgcC0+c3RyZWFtKCkpOworICAgICAgICB9CisgICAgICAgIGZvciAoY29uc3QgYXV0byBwIDogU08pIHsKKyAgICAgICAgICAgIEVYUEVDVF9UUlVFKChib29sKSgqcCkpOworICAgICAgICAgICAgRVhQRUNUX0ZBTFNFKCEoKnApKTsKKworICAgICAgICAgICAgRVhQRUNUX0ZBTFNFKHAtPmZvcklucHV0KCkpOworICAgICAgICAgICAgRVhQRUNUX1RSVUUocC0+Zm9yT3V0cHV0KCkpOworICAgICAgICB9CisgICAgICAgIGZvciAoY29uc3QgYXV0byBwIDogU0kpIHsKKyAgICAgICAgICAgIEVYUEVDVF9UUlVFKChib29sKSgqcCkpOworICAgICAgICAgICAgRVhQRUNUX0ZBTFNFKCEoKnApKTsKKworICAgICAgICAgICAgRVhQRUNUX1RSVUUocC0+Zm9ySW5wdXQoKSk7CisgICAgICAgICAgICBFWFBFQ1RfRkFMU0UocC0+Zm9yT3V0cHV0KCkpOworICAgICAgICB9CisgICAgICAgIGNvbnN0IEMyTnVtYmVyc1N0cmVhbVR1bmluZyAqUzNbXSA9IHsgYm91dHMxLmdldCgpIH07CisgICAgICAgIGZvciAoY29uc3QgYXV0byBwIDogUzMpIHsKKyAgICAgICAgICAgIEVYUEVDVF9GQUxTRSgoYm9vbCkoKnApKTsKKyAgICAgICAgICAgIEVYUEVDVF9UUlVFKCEoKnApKTsKKworICAgICAgICAgICAgRVhQRUNUX0ZBTFNFKHAtPmZvcklucHV0KCkpOworICAgICAgICAgICAgRVhQRUNUX0ZBTFNFKHAtPmZvck91dHB1dCgpKTsKKyAgICAgICAgICAgIEVYUEVDVF9FUSgwLCBwLT5tLm1OdW1iZXJzWzBdKTsKKyAgICAgICAgfQorCisgICAgICAgIC8vIHZhbHVlcworICAgICAgICBFWFBFQ1RfRVEoMTAwLCBpbnMyLT5tLm1OdW1iZXJzWzBdKTsKKyAgICAgICAgRVhQRUNUX0VRKDEwMCwgb3V0czItPm0ubU51bWJlcnNbMF0pOworICAgICAgICBFWFBFQ1RfRVEoMCwgYmluczEtPm0ubU51bWJlcnNbMF0pOworICAgICAgICBFWFBFQ1RfRVEoMCwgYmluczItPm0ubU51bWJlcnNbMF0pOworICAgICAgICBFWFBFQ1RfRVEoMCwgYm91dHMxLT5tLm1OdW1iZXJzWzBdKTsKKyAgICAgICAgRVhQRUNUX0VRKDAsIGJvdXRzMi0+bS5tTnVtYmVyc1swXSk7CisKKyAgICAgICAgRVhQRUNUX0VRKDF1LCBpbnMyLT5zdHJlYW0oKSk7CisgICAgICAgIEVYUEVDVF9FUSgxdSwgb3V0czItPnN0cmVhbSgpKTsKKyAgICAgICAgRVhQRUNUX0VRKDB1LCBiaW5zMS0+c3RyZWFtKCkpOworICAgICAgICBFWFBFQ1RfRVEoMHUsIGJpbnMyLT5zdHJlYW0oKSk7CisgICAgICAgIEVYUEVDVF9FUSgwdSwgYm91dHMxLT5zdHJlYW0oKSk7CisgICAgICAgIEVYUEVDVF9FUSgwdSwgYm91dHMyLT5zdHJlYW0oKSk7CisKKyAgICAgICAgRVhQRUNUX1RSVUUoKmluczEgIT0gKm91dHMxKTsKKyAgICAgICAgRVhQRUNUX1RSVUUoKmluczEgPT0gKmluczIpOworICAgICAgICBFWFBFQ1RfVFJVRSgqb3V0czEgPT0gKm91dHMyKTsKKyAgICAgICAgRVhQRUNUX1RSVUUoKmJpbnMxID09ICpib3V0czEpOworICAgICAgICBFWFBFQ1RfVFJVRSgqYmluczIgIT0gKmJvdXRzMik7CisKKyAgICAgICAgRVhQRUNUX1RSVUUoKmluczEgIT0gKmJpbnMxKTsKKyAgICAgICAgYmluczEtPm0ubU51bWJlcnNbMF0gPSAxMDA7CisgICAgICAgIEVYUEVDVF9UUlVFKCppbnMxICE9ICpiaW5zMSk7CisgICAgICAgIGJpbnMxLT5zZXRQb3J0KGZhbHNlIC8qIG91dHB1dCAqLyk7CisgICAgICAgIEVYUEVDVF9UUlVFKCppbnMxICE9ICpiaW5zMSk7CisgICAgICAgIGJpbnMxLT5zZXRTdHJlYW0oMXUpOworICAgICAgICBFWFBFQ1RfVFJVRSgqaW5zMSA9PSAqYmluczEpOworCisgICAgICAgIEVYUEVDVF9UUlVFKCppbnMyICE9ICpiaW5zMik7CisgICAgICAgIGJpbnMyLT5tLm1OdW1iZXJzWzBdID0gMTAwOworICAgICAgICBFWFBFQ1RfVFJVRSgqaW5zMiAhPSAqYmluczIpOworICAgICAgICBiaW5zMi0+c2V0U3RyZWFtKDF1KTsKKyAgICAgICAgRVhQRUNUX1RSVUUoKmluczIgPT0gKmJpbnMyKTsKKworICAgICAgICBiaW5zMS0+c2V0UG9ydCh0cnVlIC8qIG91dHB1dCAqLyk7CisgICAgICAgIEVYUEVDVF9UUlVFKCpvdXRzMSA9PSAqYmluczEpOworCisgICAgICAgIEVYUEVDVF9UUlVFKCpvdXRzMSAhPSAqYm91dHMxKTsKKyAgICAgICAgYm91dHMxLT5tLm1OdW1iZXJzWzBdID0gMTAwOworICAgICAgICBFWFBFQ1RfVFJVRSgqb3V0czEgIT0gKmJvdXRzMSk7CisgICAgICAgIGJvdXRzMS0+c2V0UG9ydCh0cnVlIC8qIG91dHB1dCAqLyk7CisgICAgICAgIEVYUEVDVF9UUlVFKCpvdXRzMSAhPSAqYm91dHMxKTsKKyAgICAgICAgYm91dHMxLT5zZXRTdHJlYW0oMXUpOworICAgICAgICBFWFBFQ1RfVFJVRSgqb3V0czEgPT0gKmJvdXRzMSk7CisKKyAgICAgICAgRVhQRUNUX1RSVUUoKm91dHMyICE9ICpib3V0czIpOworICAgICAgICBib3V0czItPm0ubU51bWJlcnNbMF0gPSAxMDA7CisgICAgICAgIEVYUEVDVF9UUlVFKCpvdXRzMiAhPSAqYm91dHMyKTsKKyAgICAgICAgYm91dHMyLT5zZXRTdHJlYW0oMXUpOworICAgICAgICBFWFBFQ1RfVFJVRSgqb3V0czIgPT0gKmJvdXRzMik7CisKKyAgICAgICAgYm91dHMxLT5zZXRQb3J0KGZhbHNlIC8qIG91dHB1dCAqLyk7CisgICAgICAgIEVYUEVDVF9UUlVFKCppbnMxID09ICpib3V0czEpOworCisgICAgICAgIC8vIGluZGV4CisgICAgICAgIEVYUEVDVF9FUShDMlBhcmFtOjpUeXBlKGluczEtPnR5cGUoKSkuY29yZUluZGV4KCksIEMyTnVtYmVyc1N0cnVjdDo6Q09SRV9JTkRFWCk7CisgICAgICAgIEVYUEVDVF9FUShDMlBhcmFtOjpUeXBlKGluczEtPnR5cGUoKSkudHlwZUluZGV4KCksIGtQYXJhbUluZGV4TnVtYmVycyk7CisgICAgICAgIEVYUEVDVF9FUShpbnMxLT50eXBlKCksIEMyTnVtYmVyc1N0cmVhbVR1bmluZzo6aW5wdXQ6OlBBUkFNX1RZUEUpOworCisgICAgICAgIEVYUEVDVF9FUShDMlBhcmFtOjpUeXBlKGluczItPnR5cGUoKSkuY29yZUluZGV4KCksIEMyTnVtYmVyc1N0cnVjdDo6Q09SRV9JTkRFWCk7CisgICAgICAgIEVYUEVDVF9FUShDMlBhcmFtOjpUeXBlKGluczItPnR5cGUoKSkudHlwZUluZGV4KCksIGtQYXJhbUluZGV4TnVtYmVycyk7CisgICAgICAgIEVYUEVDVF9FUShpbnMyLT50eXBlKCksIEMyTnVtYmVyc1N0cmVhbVR1bmluZzo6aW5wdXQ6OlBBUkFNX1RZUEUpOworCisgICAgICAgIEVYUEVDVF9FUShDMlBhcmFtOjpUeXBlKG91dHMxLT50eXBlKCkpLmNvcmVJbmRleCgpLCBDMk51bWJlcnNTdHJ1Y3Q6OkNPUkVfSU5ERVgpOworICAgICAgICBFWFBFQ1RfRVEoQzJQYXJhbTo6VHlwZShvdXRzMS0+dHlwZSgpKS50eXBlSW5kZXgoKSwga1BhcmFtSW5kZXhOdW1iZXJzKTsKKyAgICAgICAgRVhQRUNUX0VRKG91dHMxLT50eXBlKCksIEMyTnVtYmVyc1N0cmVhbVR1bmluZzo6b3V0cHV0OjpQQVJBTV9UWVBFKTsKKworICAgICAgICBFWFBFQ1RfRVEoQzJQYXJhbTo6VHlwZShvdXRzMi0+dHlwZSgpKS5jb3JlSW5kZXgoKSwgQzJOdW1iZXJzU3RydWN0OjpDT1JFX0lOREVYKTsKKyAgICAgICAgRVhQRUNUX0VRKEMyUGFyYW06OlR5cGUob3V0czItPnR5cGUoKSkudHlwZUluZGV4KCksIGtQYXJhbUluZGV4TnVtYmVycyk7CisgICAgICAgIEVYUEVDVF9FUShvdXRzMi0+dHlwZSgpLCBDMk51bWJlcnNTdHJlYW1UdW5pbmc6Om91dHB1dDo6UEFSQU1fVFlQRSk7CisKKyAgICAgICAgQzJQYXJhbTo6Q29yZUluZGV4IGluZGV4ID0gQzJOdW1iZXJzU3RyZWFtVHVuaW5nOjppbnB1dDo6UEFSQU1fVFlQRTsKKyAgICAgICAgRVhQRUNUX0ZBTFNFKGluZGV4LmlzVmVuZG9yKCkpOworICAgICAgICBFWFBFQ1RfVFJVRShpbmRleC5pc0ZsZXhpYmxlKCkpOworICAgICAgICBFWFBFQ1RfRVEoaW5kZXguY29yZUluZGV4KCksIGtQYXJhbUluZGV4TnVtYmVycyB8IEMyUGFyYW06OkNvcmVJbmRleDo6SVNfRkxFWF9GTEFHKTsKKyAgICAgICAgRVhQRUNUX0VRKGluZGV4LnR5cGVJbmRleCgpLCBrUGFyYW1JbmRleE51bWJlcnMpOworCisgICAgICAgIGluZGV4ID0gQzJOdW1iZXJzU3RyZWFtVHVuaW5nOjpvdXRwdXQ6OlBBUkFNX1RZUEU7CisgICAgICAgIEVYUEVDVF9GQUxTRShpbmRleC5pc1ZlbmRvcigpKTsKKyAgICAgICAgRVhQRUNUX1RSVUUoaW5kZXguaXNGbGV4aWJsZSgpKTsKKyAgICAgICAgRVhQRUNUX0VRKGluZGV4LmNvcmVJbmRleCgpLCBrUGFyYW1JbmRleE51bWJlcnMgfCBDMlBhcmFtOjpDb3JlSW5kZXg6OklTX0ZMRVhfRkxBRyk7CisgICAgICAgIEVYUEVDVF9FUShpbmRleC50eXBlSW5kZXgoKSwga1BhcmFtSW5kZXhOdW1iZXJzKTsKKworICAgICAgICBDMlBhcmFtOjpUeXBlIHR5cGUgPSBDMk51bWJlcnNTdHJlYW1UdW5pbmc6OmlucHV0OjpQQVJBTV9UWVBFOworICAgICAgICBFWFBFQ1RfRkFMU0UodHlwZS5pc1ZlbmRvcigpKTsKKyAgICAgICAgRVhQRUNUX1RSVUUodHlwZS5pc0ZsZXhpYmxlKCkpOworICAgICAgICBFWFBFQ1RfRkFMU0UodHlwZS5pc0dsb2JhbCgpKTsKKyAgICAgICAgRVhQRUNUX1RSVUUodHlwZS5mb3JJbnB1dCgpKTsKKyAgICAgICAgRVhQRUNUX0ZBTFNFKHR5cGUuZm9yT3V0cHV0KCkpOworICAgICAgICBFWFBFQ1RfVFJVRSh0eXBlLmZvclN0cmVhbSgpKTsKKyAgICAgICAgRVhQRUNUX0ZBTFNFKHR5cGUuZm9yUG9ydCgpKTsKKworICAgICAgICB0eXBlID0gQzJOdW1iZXJzU3RyZWFtVHVuaW5nOjpvdXRwdXQ6OlBBUkFNX1RZUEU7CisgICAgICAgIEVYUEVDVF9GQUxTRSh0eXBlLmlzVmVuZG9yKCkpOworICAgICAgICBFWFBFQ1RfVFJVRSh0eXBlLmlzRmxleGlibGUoKSk7CisgICAgICAgIEVYUEVDVF9GQUxTRSh0eXBlLmlzR2xvYmFsKCkpOworICAgICAgICBFWFBFQ1RfRkFMU0UodHlwZS5mb3JJbnB1dCgpKTsKKyAgICAgICAgRVhQRUNUX1RSVUUodHlwZS5mb3JPdXRwdXQoKSk7CisgICAgICAgIEVYUEVDVF9UUlVFKHR5cGUuZm9yU3RyZWFtKCkpOworICAgICAgICBFWFBFQ1RfRkFMU0UodHlwZS5mb3JQb3J0KCkpOworCisgICAgICAgIEVYUEVDVF9FUShDMk51bWJlcnNQb3J0VHVuaW5nOjpGcm9tKG51bGxwdHIpLCBudWxscHRyKTsKKyAgICAgICAgRVhQRUNUX0VRKEMyTnVtYmVyc1BvcnRUdW5pbmc6OmlucHV0OjpGcm9tKG51bGxwdHIpLCBudWxscHRyKTsKKyAgICAgICAgRVhQRUNUX0VRKEMyTnVtYmVyc1BvcnRUdW5pbmc6Om91dHB1dDo6RnJvbShudWxscHRyKSwgbnVsbHB0cik7CisgICAgICAgIEVYUEVDVF9FUShDMk51bWJlcnNUdW5pbmc6OkZyb20oaW5zMS5nZXQoKSksIG51bGxwdHIpOworICAgICAgICBFWFBFQ1RfRVEoQzJOdW1iZXJzVHVuaW5nOjpGcm9tKGluczIuZ2V0KCkpLCBudWxscHRyKTsKKyAgICAgICAgRVhQRUNUX0VRKEMyTnVtYmVyc1R1bmluZzo6RnJvbShvdXRzMS5nZXQoKSksIG51bGxwdHIpOworICAgICAgICBFWFBFQ1RfRVEoQzJOdW1iZXJzVHVuaW5nOjpGcm9tKG91dHMyLmdldCgpKSwgbnVsbHB0cik7CisgICAgICAgIEVYUEVDVF9FUShDMk51bWJlcnNQb3J0VHVuaW5nOjpGcm9tKGluczEuZ2V0KCkpLCBudWxscHRyKTsKKyAgICAgICAgRVhQRUNUX0VRKEMyTnVtYmVyc1BvcnRUdW5pbmc6OkZyb20oaW5zMi5nZXQoKSksIG51bGxwdHIpOworICAgICAgICBFWFBFQ1RfRVEoQzJOdW1iZXJzUG9ydFR1bmluZzo6RnJvbShvdXRzMS5nZXQoKSksIG51bGxwdHIpOworICAgICAgICBFWFBFQ1RfRVEoQzJOdW1iZXJzUG9ydFR1bmluZzo6RnJvbShvdXRzMi5nZXQoKSksIG51bGxwdHIpOworICAgICAgICBFWFBFQ1RfRVEoQzJOdW1iZXJzUG9ydFR1bmluZzo6aW5wdXQ6OkZyb20oaW5zMS5nZXQoKSksIG51bGxwdHIpOworICAgICAgICBFWFBFQ1RfRVEoQzJOdW1iZXJzUG9ydFR1bmluZzo6aW5wdXQ6OkZyb20oaW5zMi5nZXQoKSksIG51bGxwdHIpOworICAgICAgICBFWFBFQ1RfRVEoQzJOdW1iZXJzUG9ydFR1bmluZzo6aW5wdXQ6OkZyb20ob3V0czEuZ2V0KCkpLCBudWxscHRyKTsKKyAgICAgICAgRVhQRUNUX0VRKEMyTnVtYmVyc1BvcnRUdW5pbmc6OmlucHV0OjpGcm9tKG91dHMyLmdldCgpKSwgbnVsbHB0cik7CisgICAgICAgIEVYUEVDVF9FUShDMk51bWJlcnNQb3J0VHVuaW5nOjpvdXRwdXQ6OkZyb20oaW5zMS5nZXQoKSksIG51bGxwdHIpOworICAgICAgICBFWFBFQ1RfRVEoQzJOdW1iZXJzUG9ydFR1bmluZzo6b3V0cHV0OjpGcm9tKGluczIuZ2V0KCkpLCBudWxscHRyKTsKKyAgICAgICAgRVhQRUNUX0VRKEMyTnVtYmVyc1BvcnRUdW5pbmc6Om91dHB1dDo6RnJvbShvdXRzMS5nZXQoKSksIG51bGxwdHIpOworICAgICAgICBFWFBFQ1RfRVEoQzJOdW1iZXJzUG9ydFR1bmluZzo6b3V0cHV0OjpGcm9tKG91dHMyLmdldCgpKSwgbnVsbHB0cik7CisgICAgICAgIEVYUEVDVF9FUShDMk51bWJlcnNTdHJlYW1UdW5pbmc6OkZyb20oaW5zMS5nZXQoKSksIGluczEuZ2V0KCkpOworICAgICAgICBFWFBFQ1RfRVEoQzJOdW1iZXJzU3RyZWFtVHVuaW5nOjpGcm9tKGluczIuZ2V0KCkpLCAoQzJOdW1iZXJzU3RyZWFtVHVuaW5nKilpbnMyLmdldCgpKTsKKyAgICAgICAgRVhQRUNUX0VRKEMyTnVtYmVyc1N0cmVhbVR1bmluZzo6RnJvbShvdXRzMS5nZXQoKSksIG91dHMxLmdldCgpKTsKKyAgICAgICAgRVhQRUNUX0VRKEMyTnVtYmVyc1N0cmVhbVR1bmluZzo6RnJvbShvdXRzMi5nZXQoKSksIChDMk51bWJlcnNTdHJlYW1UdW5pbmcqKW91dHMyLmdldCgpKTsKKyAgICAgICAgRVhQRUNUX0VRKEMyTnVtYmVyc1N0cmVhbVR1bmluZzo6aW5wdXQ6OkZyb20oaW5zMS5nZXQoKSksIChDMk51bWJlcnNTdHJlYW1UdW5pbmc6OmlucHV0KilpbnMxLmdldCgpKTsKKyAgICAgICAgRVhQRUNUX0VRKEMyTnVtYmVyc1N0cmVhbVR1bmluZzo6aW5wdXQ6OkZyb20oaW5zMi5nZXQoKSksIGluczIuZ2V0KCkpOworICAgICAgICBFWFBFQ1RfRVEoQzJOdW1iZXJzU3RyZWFtVHVuaW5nOjppbnB1dDo6RnJvbShvdXRzMS5nZXQoKSksIG51bGxwdHIpOworICAgICAgICBFWFBFQ1RfRVEoQzJOdW1iZXJzU3RyZWFtVHVuaW5nOjppbnB1dDo6RnJvbShvdXRzMi5nZXQoKSksIG51bGxwdHIpOworICAgICAgICBFWFBFQ1RfRVEoQzJOdW1iZXJzU3RyZWFtVHVuaW5nOjpvdXRwdXQ6OkZyb20oaW5zMS5nZXQoKSksIG51bGxwdHIpOworICAgICAgICBFWFBFQ1RfRVEoQzJOdW1iZXJzU3RyZWFtVHVuaW5nOjpvdXRwdXQ6OkZyb20oaW5zMi5nZXQoKSksIG51bGxwdHIpOworICAgICAgICBFWFBFQ1RfRVEoQzJOdW1iZXJzU3RyZWFtVHVuaW5nOjpvdXRwdXQ6OkZyb20ob3V0czEuZ2V0KCkpLCAoQzJOdW1iZXJzU3RyZWFtVHVuaW5nOjpvdXRwdXQqKW91dHMxLmdldCgpKTsKKyAgICAgICAgRVhQRUNUX0VRKEMyTnVtYmVyc1N0cmVhbVR1bmluZzo6b3V0cHV0OjpGcm9tKG91dHMyLmdldCgpKSwgb3V0czIuZ2V0KCkpOworCisgICAgICAgIEVYUEVDVF9FUSgqKEMyUGFyYW06OkNvcHkoKmluczEpKSwgKmluczEpOworICAgICAgICBFWFBFQ1RfRVEoKihDMlBhcmFtOjpDb3B5KCppbnMyKSksICppbnMyKTsKKyAgICAgICAgRVhQRUNUX0VRKCooQzJQYXJhbTo6Q29weSgqb3V0czEpKSwgKm91dHMxKTsKKyAgICAgICAgRVhQRUNUX0VRKCooQzJQYXJhbTo6Q29weSgqb3V0czIpKSwgKm91dHMyKTsKKyAgICB9CisKKyAgICB7CisgICAgICAgIEMySW50MzJWYWx1ZSBpbnQzMlZhbHVlKElOVDMyX01JTik7CisgICAgICAgIHN0YXRpY19hc3NlcnQoc3RkOjppc19zYW1lPGRlY2x0eXBlKGludDMyVmFsdWUudmFsdWUpLCBpbnQzMl90Pjo6dmFsdWUsICJzaG91bGQgYmUgaW50MzJfdCIpOworICAgICAgICBFWFBFQ1RfRVEoSU5UMzJfTUlOLCBpbnQzMlZhbHVlLnZhbHVlKTsKKyAgICAgICAgc3RkOjp2ZWN0b3I8QzJGaWVsZERlc2NyaXB0b3I+IGZpZWxkcyA9IGludDMyVmFsdWUuRmllbGRMaXN0KCk7CisgICAgICAgIEVYUEVDVF9FUSgxdSwgZmllbGRzLnNpemUoKSk7CisgICAgICAgIEVYUEVDVF9FUShGRDo6SU5UMzIsIGZpZWxkcy5jYmVnaW4oKS0+dHlwZSgpKTsKKyAgICAgICAgRVhQRUNUX0VRKDF1LCBmaWVsZHMuY2JlZ2luKCktPmV4dGVudCgpKTsKKyAgICAgICAgRVhQRUNUX0VRKEMyU3RyaW5nKCJ2YWx1ZSIpLCBmaWVsZHMuY2JlZ2luKCktPm5hbWUoKSk7CisgICAgfQorCisgICAgeworICAgICAgICBDMlVpbnQzMlZhbHVlIHVpbnQzMlZhbHVlKFVJTlQzMl9NQVgpOworICAgICAgICBzdGF0aWNfYXNzZXJ0KHN0ZDo6aXNfc2FtZTxkZWNsdHlwZSh1aW50MzJWYWx1ZS52YWx1ZSksIHVpbnQzMl90Pjo6dmFsdWUsICJzaG91bGQgYmUgdWludDMyX3QiKTsKKyAgICAgICAgRVhQRUNUX0VRKFVJTlQzMl9NQVgsIHVpbnQzMlZhbHVlLnZhbHVlKTsKKyAgICAgICAgc3RkOjp2ZWN0b3I8QzJGaWVsZERlc2NyaXB0b3I+IGZpZWxkcyA9IHVpbnQzMlZhbHVlLkZpZWxkTGlzdCgpOworICAgICAgICBFWFBFQ1RfRVEoMXUsIGZpZWxkcy5zaXplKCkpOworICAgICAgICBFWFBFQ1RfRVEoRkQ6OlVJTlQzMiwgZmllbGRzLmNiZWdpbigpLT50eXBlKCkpOworICAgICAgICBFWFBFQ1RfRVEoMXUsIGZpZWxkcy5jYmVnaW4oKS0+ZXh0ZW50KCkpOworICAgICAgICBFWFBFQ1RfRVEoQzJTdHJpbmcoInZhbHVlIiksIGZpZWxkcy5jYmVnaW4oKS0+bmFtZSgpKTsKKyAgICB9CisKKyAgICB7CisgICAgICAgIEMySW50NjRWYWx1ZSBpbnQ2NFZhbHVlKElOVDY0X01JTik7CisgICAgICAgIHN0YXRpY19hc3NlcnQoc3RkOjppc19zYW1lPGRlY2x0eXBlKGludDY0VmFsdWUudmFsdWUpLCBpbnQ2NF90Pjo6dmFsdWUsICJzaG91bGQgYmUgaW50NjRfdCIpOworICAgICAgICBFWFBFQ1RfRVEoSU5UNjRfTUlOLCBpbnQ2NFZhbHVlLnZhbHVlKTsKKyAgICAgICAgc3RkOjp2ZWN0b3I8QzJGaWVsZERlc2NyaXB0b3I+IGZpZWxkcyA9IGludDY0VmFsdWUuRmllbGRMaXN0KCk7CisgICAgICAgIEVYUEVDVF9FUSgxdSwgZmllbGRzLnNpemUoKSk7CisgICAgICAgIEVYUEVDVF9FUShGRDo6SU5UNjQsIGZpZWxkcy5jYmVnaW4oKS0+dHlwZSgpKTsKKyAgICAgICAgRVhQRUNUX0VRKDF1LCBmaWVsZHMuY2JlZ2luKCktPmV4dGVudCgpKTsKKyAgICAgICAgRVhQRUNUX0VRKEMyU3RyaW5nKCJ2YWx1ZSIpLCBmaWVsZHMuY2JlZ2luKCktPm5hbWUoKSk7CisgICAgfQorCisgICAgeworICAgICAgICBDMlVpbnQ2NFZhbHVlIHVpbnQ2NFZhbHVlKFVJTlQ2NF9NQVgpOworICAgICAgICBzdGF0aWNfYXNzZXJ0KHN0ZDo6aXNfc2FtZTxkZWNsdHlwZSh1aW50NjRWYWx1ZS52YWx1ZSksIHVpbnQ2NF90Pjo6dmFsdWUsICJzaG91bGQgYmUgdWludDY0X3QiKTsKKyAgICAgICAgRVhQRUNUX0VRKFVJTlQ2NF9NQVgsIHVpbnQ2NFZhbHVlLnZhbHVlKTsKKyAgICAgICAgc3RkOjp2ZWN0b3I8QzJGaWVsZERlc2NyaXB0b3I+IGZpZWxkcyA9IHVpbnQ2NFZhbHVlLkZpZWxkTGlzdCgpOworICAgICAgICBFWFBFQ1RfRVEoMXUsIGZpZWxkcy5zaXplKCkpOworICAgICAgICBFWFBFQ1RfRVEoRkQ6OlVJTlQ2NCwgZmllbGRzLmNiZWdpbigpLT50eXBlKCkpOworICAgICAgICBFWFBFQ1RfRVEoMXUsIGZpZWxkcy5jYmVnaW4oKS0+ZXh0ZW50KCkpOworICAgICAgICBFWFBFQ1RfRVEoQzJTdHJpbmcoInZhbHVlIiksIGZpZWxkcy5jYmVnaW4oKS0+bmFtZSgpKTsKKyAgICB9CisKKyAgICB7CisgICAgICAgIEMyRmxvYXRWYWx1ZSBmbG9hdFZhbHVlKDEyMy40Zik7CisgICAgICAgIHN0YXRpY19hc3NlcnQoc3RkOjppc19zYW1lPGRlY2x0eXBlKGZsb2F0VmFsdWUudmFsdWUpLCBmbG9hdD46OnZhbHVlLCAic2hvdWxkIGJlIGZsb2F0Iik7CisgICAgICAgIEVYUEVDVF9FUSgxMjMuNGYsIGZsb2F0VmFsdWUudmFsdWUpOworICAgICAgICBzdGQ6OnZlY3RvcjxDMkZpZWxkRGVzY3JpcHRvcj4gZmllbGRzID0gZmxvYXRWYWx1ZS5GaWVsZExpc3QoKTsKKyAgICAgICAgRVhQRUNUX0VRKDF1LCBmaWVsZHMuc2l6ZSgpKTsKKyAgICAgICAgRVhQRUNUX0VRKEZEOjpGTE9BVCwgZmllbGRzLmNiZWdpbigpLT50eXBlKCkpOworICAgICAgICBFWFBFQ1RfRVEoMXUsIGZpZWxkcy5jYmVnaW4oKS0+ZXh0ZW50KCkpOworICAgICAgICBFWFBFQ1RfRVEoQzJTdHJpbmcoInZhbHVlIiksIGZpZWxkcy5jYmVnaW4oKS0+bmFtZSgpKTsKKyAgICB9CisKKyAgICB7CisgICAgICAgIHVpbnQ4X3QgaW5pdFZhbHVlW10gPSAiQUJDRCI7CisgICAgICAgIHR5cGVkZWYgQzJHbG9iYWxQYXJhbTxDMlNldHRpbmcsIEMyQmxvYlZhbHVlLCAwPiBCbG9iU2V0dGluZzsKKyAgICAgICAgc3RkOjp1bmlxdWVfcHRyPEJsb2JTZXR0aW5nPiBibG9iVmFsdWUgPSBCbG9iU2V0dGluZzo6QWxsb2NVbmlxdWUoNiwgQzJDb25zdE1lbW9yeUJsb2NrPHVpbnQ4X3Q+KGluaXRWYWx1ZSkpOworICAgICAgICBzdGF0aWNfYXNzZXJ0KHN0ZDo6aXNfc2FtZTxkZWNsdHlwZShibG9iVmFsdWUtPm0udmFsdWUpLCB1aW50OF90W10+Ojp2YWx1ZSwgInNob3VsZCBiZSB1aW50OF90W10iKTsKKyAgICAgICAgRVhQRUNUX0VRKDAsIG1lbWNtcChibG9iVmFsdWUtPm0udmFsdWUsICJBQkNEXDAiLCA2KSk7CisgICAgICAgIEVYUEVDVF9FUSg2dSwgYmxvYlZhbHVlLT5mbGV4Q291bnQoKSk7CisgICAgICAgIHN0ZDo6dmVjdG9yPEMyRmllbGREZXNjcmlwdG9yPiBmaWVsZHMgPSBibG9iVmFsdWUtPkZpZWxkTGlzdCgpOworICAgICAgICBFWFBFQ1RfRVEoMXUsIGZpZWxkcy5zaXplKCkpOworICAgICAgICBFWFBFQ1RfRVEoRkQ6OkJMT0IsIGZpZWxkcy5jYmVnaW4oKS0+dHlwZSgpKTsKKyAgICAgICAgRVhQRUNUX0VRKDB1LCBmaWVsZHMuY2JlZ2luKCktPmV4dGVudCgpKTsKKyAgICAgICAgRVhQRUNUX0VRKEMyU3RyaW5nKCJ2YWx1ZSIpLCBmaWVsZHMuY2JlZ2luKCktPm5hbWUoKSk7CisKKyAgICAgICAgYmxvYlZhbHVlID0gQmxvYlNldHRpbmc6OkFsbG9jVW5pcXVlKDMsIEMyQ29uc3RNZW1vcnlCbG9jazx1aW50OF90Pihpbml0VmFsdWUpKTsKKyAgICAgICAgRVhQRUNUX0VRKDAsIG1lbWNtcChibG9iVmFsdWUtPm0udmFsdWUsICJBQkMiLCAzKSk7CisgICAgICAgIEVYUEVDVF9FUSgzdSwgYmxvYlZhbHVlLT5mbGV4Q291bnQoKSk7CisgICAgfQorCisgICAgeworICAgICAgICBjb25zdGV4cHIgY2hhciBpbml0VmFsdWVbXSA9ICJBQkNEIjsKKyAgICAgICAgdHlwZWRlZiBDMkdsb2JhbFBhcmFtPEMyU2V0dGluZywgQzJTdHJpbmdWYWx1ZSwgMD4gU3RyaW5nU2V0dGluZzsKKyAgICAgICAgc3RkOjp1bmlxdWVfcHRyPFN0cmluZ1NldHRpbmc+IHN0cmluZ1ZhbHVlID0gU3RyaW5nU2V0dGluZzo6QWxsb2NVbmlxdWUoNiwgQzJDb25zdE1lbW9yeUJsb2NrPGNoYXI+KGluaXRWYWx1ZSkpOworICAgICAgICBzdHJpbmdWYWx1ZSA9IFN0cmluZ1NldHRpbmc6OkFsbG9jVW5pcXVlKDYsIGluaXRWYWx1ZSk7CisgICAgICAgIHN0YXRpY19hc3NlcnQoc3RkOjppc19zYW1lPGRlY2x0eXBlKHN0cmluZ1ZhbHVlLT5tLnZhbHVlKSwgY2hhcltdPjo6dmFsdWUsICJzaG91bGQgYmUgY2hhcltdIik7CisgICAgICAgIEVYUEVDVF9FUSgwLCBtZW1jbXAoc3RyaW5nVmFsdWUtPm0udmFsdWUsICJBQkNEXDAiLCA2KSk7CisgICAgICAgIEVYUEVDVF9FUSg2dSwgc3RyaW5nVmFsdWUtPmZsZXhDb3VudCgpKTsKKyAgICAgICAgc3RkOjp2ZWN0b3I8QzJGaWVsZERlc2NyaXB0b3I+IGZpZWxkcyA9IHN0cmluZ1ZhbHVlLT5GaWVsZExpc3QoKTsKKyAgICAgICAgRVhQRUNUX0VRKDF1LCBmaWVsZHMuc2l6ZSgpKTsKKyAgICAgICAgRVhQRUNUX0VRKEZEOjpTVFJJTkcsIGZpZWxkcy5jYmVnaW4oKS0+dHlwZSgpKTsKKyAgICAgICAgRVhQRUNUX0VRKDB1LCBmaWVsZHMuY2JlZ2luKCktPmV4dGVudCgpKTsKKyAgICAgICAgRVhQRUNUX0VRKEMyU3RyaW5nKCJ2YWx1ZSIpLCBmaWVsZHMuY2JlZ2luKCktPm5hbWUoKSk7CisKKyAgICAgICAgc3RyaW5nVmFsdWUgPSBTdHJpbmdTZXR0aW5nOjpBbGxvY1VuaXF1ZSgzLCBDMkNvbnN0TWVtb3J5QmxvY2s8Y2hhcj4oaW5pdFZhbHVlKSk7CisgICAgICAgIEVYUEVDVF9FUSgwLCBtZW1jbXAoc3RyaW5nVmFsdWUtPm0udmFsdWUsICJBQiIsIDMpKTsKKyAgICAgICAgRVhQRUNUX0VRKDN1LCBzdHJpbmdWYWx1ZS0+ZmxleENvdW50KCkpOworCisgICAgICAgIHN0cmluZ1ZhbHVlID0gU3RyaW5nU2V0dGluZzo6QWxsb2NVbmlxdWUoMTEsICJpbml0VmFsdWUiKTsKKyAgICAgICAgRVhQRUNUX0VRKDAsIG1lbWNtcChzdHJpbmdWYWx1ZS0+bS52YWx1ZSwgImluaXRWYWx1ZVwwIiwgMTEpKTsKKyAgICAgICAgRVhQRUNUX0VRKDExdSwgc3RyaW5nVmFsdWUtPmZsZXhDb3VudCgpKTsKKworICAgICAgICBzdHJpbmdWYWx1ZSA9IFN0cmluZ1NldHRpbmc6OkFsbG9jVW5pcXVlKGluaXRWYWx1ZSk7CisgICAgICAgIEVYUEVDVF9FUSgwLCBtZW1jbXAoc3RyaW5nVmFsdWUtPm0udmFsdWUsICJBQkNEIiwgNSkpOworICAgICAgICBFWFBFQ1RfRVEoNXUsIHN0cmluZ1ZhbHVlLT5mbGV4Q291bnQoKSk7CisKKyAgICAgICAgc3RyaW5nVmFsdWUgPSBTdHJpbmdTZXR0aW5nOjpBbGxvY1VuaXF1ZSh7ICdBJywgJ0InLCAnQycsICdEJyB9KTsKKyAgICAgICAgRVhQRUNUX0VRKDAsIG1lbWNtcChzdHJpbmdWYWx1ZS0+bS52YWx1ZSwgIkFCQyIsIDQpKTsKKyAgICAgICAgRVhQRUNUX0VRKDR1LCBzdHJpbmdWYWx1ZS0+ZmxleENvdW50KCkpOworICAgIH0KKworICAgIHsKKyAgICAgICAgdWludDMyX3QgdmlkZW9XaWR0aFtdID0geyAxMnUsIEMyTnVtYmVyc1N0cmVhbVR1bmluZzo6b3V0cHV0OjpQQVJBTV9UWVBFLCAxMDAgfTsKKyAgICAgICAgQzJQYXJhbSAqcDEgPSBDMlBhcmFtOjpGcm9tKHZpZGVvV2lkdGgsIHNpemVvZih2aWRlb1dpZHRoKSk7CisgICAgICAgIEVYUEVDVF9ORShudWxscHRyLCBwMSk7CisgICAgICAgIEVYUEVDVF9FUSgxMnUsIHAxLT5zaXplKCkpOworICAgICAgICBFWFBFQ1RfRVEocDEtPnR5cGUoKSwgQzJOdW1iZXJzU3RyZWFtVHVuaW5nOjpvdXRwdXQ6OlBBUkFNX1RZUEUpOworCisgICAgICAgIEMyTnVtYmVyc1N0cmVhbVR1bmluZzo6b3V0cHV0ICp2c3QgPSBDMk51bWJlcnNTdHJlYW1UdW5pbmc6Om91dHB1dDo6RnJvbShwMSk7CisgICAgICAgIEVYUEVDVF9ORShudWxscHRyLCB2c3QpOworICAgICAgICBpZiAodnN0KSB7CisgICAgICAgICAgICBFWFBFQ1RfRVEoMXUsIHZzdC0+ZmxleENvdW50KCkpOworICAgICAgICAgICAgRVhQRUNUX0VRKDEwMCwgdnN0LT5tLm1OdW1iZXJzWzBdKTsKKyAgICAgICAgfQorCisgICAgICAgIHAxID0gQzJQYXJhbTo6RnJvbSh2aWRlb1dpZHRoLCBzaXplb2YodmlkZW9XaWR0aCkgKyAyKTsKKyAgICAgICAgRVhQRUNUX0VRKG51bGxwdHIsIHAxKTsKKworICAgICAgICBwMSA9IEMyUGFyYW06OkZyb20odmlkZW9XaWR0aCwgc2l6ZW9mKHZpZGVvV2lkdGgpIC0gMik7CisgICAgICAgIEVYUEVDVF9FUShudWxscHRyLCBwMSk7CisKKyAgICAgICAgcDEgPSBDMlBhcmFtOjpGcm9tKHZpZGVvV2lkdGgsIDMpOworICAgICAgICBFWFBFQ1RfRVEobnVsbHB0ciwgcDEpOworCisgICAgICAgIHAxID0gQzJQYXJhbTo6RnJvbSh2aWRlb1dpZHRoLCAwKTsKKyAgICAgICAgRVhQRUNUX0VRKG51bGxwdHIsIHAxKTsKKyAgICB9CisKKyAgICB7CisgICAgICAgIHVpbnQzMl90IHZpZGVvV2lkdGhbXSA9IHsgMTZ1LCBDMk51bWJlcnNQb3J0VHVuaW5nOjppbnB1dDo6UEFSQU1fVFlQRSwgMTAxLCAxMDIgfTsKKworICAgICAgICBDMlBhcmFtICpwMSA9IEMyUGFyYW06OkZyb20odmlkZW9XaWR0aCwgc2l6ZW9mKHZpZGVvV2lkdGgpKTsKKyAgICAgICAgRVhQRUNUX05FKG51bGxwdHIsIHAxKTsKKyAgICAgICAgRVhQRUNUX0VRKDE2dSwgcDEtPnNpemUoKSk7CisgICAgICAgIEVYUEVDVF9FUShwMS0+dHlwZSgpLCBDMk51bWJlcnNQb3J0VHVuaW5nOjppbnB1dDo6UEFSQU1fVFlQRSk7CisKKyAgICAgICAgQzJOdW1iZXJzUG9ydFR1bmluZzo6aW5wdXQgKnZwdCA9IEMyTnVtYmVyc1BvcnRUdW5pbmc6OmlucHV0OjpGcm9tKHAxKTsKKyAgICAgICAgRVhQRUNUX05FKG51bGxwdHIsIHZwdCk7CisgICAgICAgIGlmICh2cHQpIHsKKyAgICAgICAgICAgIEVYUEVDVF9FUSgydSwgdnB0LT5mbGV4Q291bnQoKSk7CisgICAgICAgICAgICBFWFBFQ1RfRVEoMTAxLCB2cHQtPm0ubU51bWJlcnNbMF0pOworICAgICAgICAgICAgRVhQRUNUX0VRKDEwMiwgdnB0LT5tLm1OdW1iZXJzWzFdKTsKKyAgICAgICAgfQorCisgICAgICAgIHAxID0gQzJQYXJhbTo6RnJvbSh2aWRlb1dpZHRoLCBzaXplb2YodmlkZW9XaWR0aCkgKyAyKTsKKyAgICAgICAgRVhQRUNUX0VRKG51bGxwdHIsIHAxKTsKKworICAgICAgICBwMSA9IEMyUGFyYW06OkZyb20odmlkZW9XaWR0aCwgc2l6ZW9mKHZpZGVvV2lkdGgpIC0gMik7CisgICAgICAgIEVYUEVDVF9FUShudWxscHRyLCBwMSk7CisKKyAgICAgICAgcDEgPSBDMlBhcmFtOjpGcm9tKHZpZGVvV2lkdGgsIDMpOworICAgICAgICBFWFBFQ1RfRVEobnVsbHB0ciwgcDEpOworCisgICAgICAgIHAxID0gQzJQYXJhbTo6RnJvbSh2aWRlb1dpZHRoLCAwKTsKKyAgICAgICAgRVhQRUNUX0VRKG51bGxwdHIsIHAxKTsKKyAgICB9Cit9CisKK1RFU1RfRihDMlBhcmFtVGVzdCwgQzJWYWx1ZVRlc3QpIHsKKyAgICBDMlZhbHVlIHZhbDsKKyAgICBpbnQzMl90IGkzMiA9IC0zMjsKKyAgICBpbnQ2NF90IGk2NCA9IC02NDsKKyAgICB1aW50MzJfdCB1MzIgPSAzMjsKKyAgICB1aW50NjRfdCB1NjQgPSA2NDsKKyAgICBmbG9hdCBmcCA9IDEuNWY7CisKKyAgICBFWFBFQ1RfRVEoQzJWYWx1ZTo6Tk9fSU5JVCwgdmFsLnR5cGUoKSk7CisgICAgRVhQRUNUX0VRKGZhbHNlLCB2YWwuZ2V0KCZpMzIpKTsKKyAgICBFWFBFQ1RfRVEoLTMyLCBpMzIpOworICAgIEVYUEVDVF9FUShmYWxzZSwgdmFsLmdldCgmaTY0KSk7CisgICAgRVhQRUNUX0VRKC02NCwgaTY0KTsKKyAgICBFWFBFQ1RfRVEoZmFsc2UsIHZhbC5nZXQoJnUzMikpOworICAgIEVYUEVDVF9FUSgzMnUsIHUzMik7CisgICAgRVhQRUNUX0VRKGZhbHNlLCB2YWwuZ2V0KCZ1NjQpKTsKKyAgICBFWFBFQ1RfRVEoNjR1LCB1NjQpOworICAgIEVYUEVDVF9FUShmYWxzZSwgdmFsLmdldCgmZnApKTsKKyAgICBFWFBFQ1RfRVEoMS41ZiwgZnApOworCisgICAgdmFsID0gaW50MzJfdCgtMzIxNik7CisgICAgRVhQRUNUX0VRKEMyVmFsdWU6OklOVDMyLCB2YWwudHlwZSgpKTsKKyAgICBFWFBFQ1RfRVEodHJ1ZSwgdmFsLmdldCgmaTMyKSk7CisgICAgRVhQRUNUX0VRKC0zMjE2LCBpMzIpOworICAgIEVYUEVDVF9FUShmYWxzZSwgdmFsLmdldCgmaTY0KSk7CisgICAgRVhQRUNUX0VRKC02NCwgaTY0KTsKKyAgICBFWFBFQ1RfRVEoZmFsc2UsIHZhbC5nZXQoJnUzMikpOworICAgIEVYUEVDVF9FUSgzMnUsIHUzMik7CisgICAgRVhQRUNUX0VRKGZhbHNlLCB2YWwuZ2V0KCZ1NjQpKTsKKyAgICBFWFBFQ1RfRVEoNjR1LCB1NjQpOworICAgIEVYUEVDVF9FUShmYWxzZSwgdmFsLmdldCgmZnApKTsKKyAgICBFWFBFQ1RfRVEoMS41ZiwgZnApOworCisgICAgdmFsID0gdWludDMyX3QoMzIxNik7CisgICAgRVhQRUNUX0VRKEMyVmFsdWU6OlVJTlQzMiwgdmFsLnR5cGUoKSk7CisgICAgRVhQRUNUX0VRKGZhbHNlLCB2YWwuZ2V0KCZpMzIpKTsKKyAgICBFWFBFQ1RfRVEoLTMyMTYsIGkzMik7CisgICAgRVhQRUNUX0VRKGZhbHNlLCB2YWwuZ2V0KCZpNjQpKTsKKyAgICBFWFBFQ1RfRVEoLTY0LCBpNjQpOworICAgIEVYUEVDVF9FUSh0cnVlLCB2YWwuZ2V0KCZ1MzIpKTsKKyAgICBFWFBFQ1RfRVEoMzIxNnUsIHUzMik7CisgICAgRVhQRUNUX0VRKGZhbHNlLCB2YWwuZ2V0KCZ1NjQpKTsKKyAgICBFWFBFQ1RfRVEoNjR1LCB1NjQpOworICAgIEVYUEVDVF9FUShmYWxzZSwgdmFsLmdldCgmZnApKTsKKyAgICBFWFBFQ1RfRVEoMS41ZiwgZnApOworCisgICAgdmFsID0gaW50NjRfdCgtNjQzMik7CisgICAgRVhQRUNUX0VRKEMyVmFsdWU6OklOVDY0LCB2YWwudHlwZSgpKTsKKyAgICBFWFBFQ1RfRVEoZmFsc2UsIHZhbC5nZXQoJmkzMikpOworICAgIEVYUEVDVF9FUSgtMzIxNiwgaTMyKTsKKyAgICBFWFBFQ1RfRVEodHJ1ZSwgdmFsLmdldCgmaTY0KSk7CisgICAgRVhQRUNUX0VRKC02NDMyLCBpNjQpOworICAgIEVYUEVDVF9FUShmYWxzZSwgdmFsLmdldCgmdTMyKSk7CisgICAgRVhQRUNUX0VRKDMyMTZ1LCB1MzIpOworICAgIEVYUEVDVF9FUShmYWxzZSwgdmFsLmdldCgmdTY0KSk7CisgICAgRVhQRUNUX0VRKDY0dSwgdTY0KTsKKyAgICBFWFBFQ1RfRVEoZmFsc2UsIHZhbC5nZXQoJmZwKSk7CisgICAgRVhQRUNUX0VRKDEuNWYsIGZwKTsKKworICAgIHZhbCA9IHVpbnQ2NF90KDY0MzIpOworICAgIEVYUEVDVF9FUShDMlZhbHVlOjpVSU5UNjQsIHZhbC50eXBlKCkpOworICAgIEVYUEVDVF9FUShmYWxzZSwgdmFsLmdldCgmaTMyKSk7CisgICAgRVhQRUNUX0VRKC0zMjE2LCBpMzIpOworICAgIEVYUEVDVF9FUShmYWxzZSwgdmFsLmdldCgmaTY0KSk7CisgICAgRVhQRUNUX0VRKC02NDMyLCBpNjQpOworICAgIEVYUEVDVF9FUShmYWxzZSwgdmFsLmdldCgmdTMyKSk7CisgICAgRVhQRUNUX0VRKDMyMTZ1LCB1MzIpOworICAgIEVYUEVDVF9FUSh0cnVlLCB2YWwuZ2V0KCZ1NjQpKTsKKyAgICBFWFBFQ1RfRVEoNjQzMnUsIHU2NCk7CisgICAgRVhQRUNUX0VRKGZhbHNlLCB2YWwuZ2V0KCZmcCkpOworICAgIEVYUEVDVF9FUSgxLjVmLCBmcCk7CisKKyAgICB2YWwgPSAxNS4yNWY7CisgICAgRVhQRUNUX0VRKEMyVmFsdWU6OkZMT0FULCB2YWwudHlwZSgpKTsKKyAgICBFWFBFQ1RfRVEoZmFsc2UsIHZhbC5nZXQoJmkzMikpOworICAgIEVYUEVDVF9FUSgtMzIxNiwgaTMyKTsKKyAgICBFWFBFQ1RfRVEoZmFsc2UsIHZhbC5nZXQoJmk2NCkpOworICAgIEVYUEVDVF9FUSgtNjQzMiwgaTY0KTsKKyAgICBFWFBFQ1RfRVEoZmFsc2UsIHZhbC5nZXQoJnUzMikpOworICAgIEVYUEVDVF9FUSgzMjE2dSwgdTMyKTsKKyAgICBFWFBFQ1RfRVEoZmFsc2UsIHZhbC5nZXQoJnU2NCkpOworICAgIEVYUEVDVF9FUSg2NDMydSwgdTY0KTsKKyAgICBFWFBFQ1RfRVEodHJ1ZSwgdmFsLmdldCgmZnApKTsKKyAgICBFWFBFQ1RfRVEoMTUuMjVmLCBmcCk7Cit9CisKZGlmZiAtLWdpdCBhL21lZGlhL2NvZGVjMi90ZXN0cy9DMlNhbXBsZUNvbXBvbmVudF90ZXN0LmNwcCBiL21lZGlhL2NvZGVjMi90ZXN0cy9DMlNhbXBsZUNvbXBvbmVudF90ZXN0LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jZDM1NGFkCi0tLSAvZGV2L251bGwKKysrIGIvbWVkaWEvY29kZWMyL3Rlc3RzL0MyU2FtcGxlQ29tcG9uZW50X3Rlc3QuY3BwCkBAIC0wLDAgKzEsNDMyIEBACisvKgorICogQ29weXJpZ2h0IDIwMTQgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworCisvLyNkZWZpbmUgTE9HX05ERUJVRyAwCisjZGVmaW5lIExPR19UQUcgIkMyU2FtcGxlQ29tcG9uZW50X3Rlc3QiCisKKyNpbmNsdWRlIDxndGVzdC9ndGVzdC5oPgorCisjZGVmaW5lIF9fQzJfR0VORVJBVEVfR0xPQkFMX1ZBUlNfXworI2luY2x1ZGUgPEMyQ29tcG9uZW50Lmg+CisjaW5jbHVkZSA8QzJDb25maWcuaD4KKyNpbmNsdWRlIDxDMkRlYnVnLmg+CisjaW5jbHVkZSA8QzJFbnVtLmg+CisKKyNpbmNsdWRlIDx1bm9yZGVyZWRfbWFwPgorCitjbGFzcyBDMlNhbXBsZUNvbXBvbmVudFRlc3QgOiBwdWJsaWMgOjp0ZXN0aW5nOjpUZXN0IHsKK307CisKK3ZvaWQgUHJpbnRUbyhjb25zdCBDMkZpZWxkRGVzY3JpcHRvciAmZmQsIDo6c3RkOjpvc3RyZWFtICpvcykgeworICAgIHVzaW5nIEZEPUMyRmllbGREZXNjcmlwdG9yOworICAgIHN3aXRjaCAoZmQudHlwZSgpKSB7CisgICAgY2FzZSBGRDo6SU5UMzI6ICpvcyA8PCAiaTMyIjsgYnJlYWs7CisgICAgY2FzZSBGRDo6SU5UNjQ6ICpvcyA8PCAiaTY0IjsgYnJlYWs7CisgICAgY2FzZSBGRDo6VUlOVDMyOiAqb3MgPDwgInUzMiI7IGJyZWFrOworICAgIGNhc2UgRkQ6OlVJTlQ2NDogKm9zIDw8ICJ1NjQiOyBicmVhazsKKyAgICBjYXNlIEZEOjpGTE9BVDogKm9zIDw8ICJmbG9hdCI7IGJyZWFrOworICAgIGNhc2UgRkQ6OlNUUklORzogKm9zIDw8ICJjaGFyIjsgYnJlYWs7CisgICAgY2FzZSBGRDo6QkxPQjogKm9zIDw8ICJ1OCI7IGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICAgIGlmIChmZC50eXBlKCkgJiBGRDo6U1RSVUNUX0ZMQUcpIHsKKyAgICAgICAgICAgICpvcyA8PCAic3RydWN0LSIgPDwgKGZkLnR5cGUoKSAmIH5GRDo6U1RSVUNUX0ZMQUcpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgKm9zIDw8ICJ0eXBlLSIgPDwgZmQudHlwZSgpOworICAgICAgICB9CisgICAgfQorICAgICpvcyA8PCAiICIgPDwgZmQubmFtZSgpOworICAgIGlmIChmZC5leHRlbnQoKSA+IDEpIHsKKyAgICAgICAgKm9zIDw8ICJbIiA8PCBmZC5leHRlbnQoKSA8PCAiXSI7CisgICAgfSBlbHNlIGlmIChmZC5leHRlbnQoKSA9PSAwKSB7CisgICAgICAgICpvcyA8PCAiW10iOworICAgIH0KKyAgICAqb3MgPDwgIiAoIiA8PCBmZC5fbUZpZWxkSWQgPDwgIioiIDw8IGZkLmV4dGVudCgpIDw8ICIpIjsKK30KKworQzJFTlVNKAorICAgIE1ldGFkYXRhVHlwZSwgaW50MzJfdCwKKyAgICBrSW52YWxpZCA9IC0xLAorICAgIGtOb25lID0gMCwKKyAgICBrR3JhbGxvYywKKyAgICBrTmF0aXZlSGFuZGxlLAorICAgIGtBTmF0aXZlV2luZG93LAorICAgIGtDYW1lcmEsCispCisKK2VudW0geworICAgIGtQYXJhbUluZGV4VmlkZW9Db25maWcgPSAweDEyMzQsCit9OworCitzdHJ1Y3QgQzJWaWRlb0NvbmZpZ1N0cnVjdCB7CisgICAgaW50MzJfdCB3aWR0aDsKKyAgICB1aW50MzJfdCBoZWlnaHQ7CisgICAgTWV0YWRhdGFUeXBlIG1ldGFkYXRhVHlwZTsKKyAgICBpbnQzMl90IHN1cHBvcnRlZEZvcm1hdHNbXTsKKworICAgIEMyVmlkZW9Db25maWdTdHJ1Y3QoKSB7fQorCisgICAgREVGSU5FX0FORF9ERVNDUklCRV9GTEVYX0MyU1RSVUNUKFZpZGVvQ29uZmlnLCBzdXBwb3J0ZWRGb3JtYXRzKQorICAgIEMyRklFTEQod2lkdGgsICJ3aWR0aCIpCisgICAgQzJGSUVMRChoZWlnaHQsICJoZWlnaHQiKQorICAgIEMyRklFTEQobWV0YWRhdGFUeXBlLCAibWV0YWRhdGEtdHlwZSIpCisgICAgQzJGSUVMRChzdXBwb3J0ZWRGb3JtYXRzLCAiZm9ybWF0cyIpCit9OworCit0eXBlZGVmIEMyUG9ydFBhcmFtPEMyVHVuaW5nLCBDMlZpZGVvQ29uZmlnU3RydWN0PiBDMlZpZGVvQ29uZmlnUG9ydFR1bmluZzsKKworY2xhc3MgTXlDb21wb25lbnRJbnN0YW5jZSA6IHB1YmxpYyBDMkNvbXBvbmVudEludGVyZmFjZSB7CitwdWJsaWM6CisgICAgdmlydHVhbCBDMlN0cmluZyBnZXROYW1lKCkgY29uc3Qgb3ZlcnJpZGUgeworICAgICAgICAvLy8gXHRvZG8gdGhpcyBzZWVtcyB0b28gc3BlY2lmaWMKKyAgICAgICAgcmV0dXJuICJzYW1wbGUuaW50ZXJmYWNlIjsKKyAgICB9OworCisgICAgdmlydHVhbCBjMl9ub2RlX2lkX3QgZ2V0SWQoKSBjb25zdCBvdmVycmlkZSB7CisgICAgICAgIC8vLyBcdG9kbyBob3cgYXJlIHRoZXNlIHNoYXJlZD8KKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorCisgICAgdmlydHVhbCBjMl9zdGF0dXNfdCBjb25maWdfdmIoCisgICAgICAgICAgICBjb25zdCBzdGQ6OnZlY3RvcjxDMlBhcmFtKj4gJnBhcmFtcywKKyAgICAgICAgICAgIGMyX2Jsb2NraW5nX3QgbWF5QmxvY2ssCisgICAgICAgICAgICBzdGQ6OnZlY3RvcjxzdGQ6OnVuaXF1ZV9wdHI8QzJTZXR0aW5nUmVzdWx0Pj4qIGNvbnN0IGZhaWx1cmVzKSBvdmVycmlkZSB7CisgICAgICAgICh2b2lkKXBhcmFtczsKKyAgICAgICAgKHZvaWQpZmFpbHVyZXM7CisgICAgICAgICh2b2lkKW1heUJsb2NrOworICAgICAgICByZXR1cm4gQzJfT01JVFRFRDsKKyAgICB9CisKKyAgICB2aXJ0dWFsIGMyX3N0YXR1c190IGNyZWF0ZVR1bm5lbF9zbShjMl9ub2RlX2lkX3QgdGFyZ2V0Q29tcG9uZW50KSBvdmVycmlkZSB7CisgICAgICAgICh2b2lkKXRhcmdldENvbXBvbmVudDsKKyAgICAgICAgcmV0dXJuIEMyX09NSVRURUQ7CisgICAgfQorCisgICAgdmlydHVhbCBjMl9zdGF0dXNfdCBxdWVyeV92YigKKyAgICAgICAgICAgIGNvbnN0IHN0ZDo6dmVjdG9yPEMyUGFyYW0qPiAmc3RhY2tQYXJhbXMsCisgICAgICAgICAgICBjb25zdCBzdGQ6OnZlY3RvcjxDMlBhcmFtOjpJbmRleD4gJmhlYXBQYXJhbUluZGljZXMsCisgICAgICAgICAgICBjMl9ibG9ja2luZ190IG1heUJsb2NrLAorICAgICAgICAgICAgc3RkOjp2ZWN0b3I8c3RkOjp1bmlxdWVfcHRyPEMyUGFyYW0+PiogY29uc3QgaGVhcFBhcmFtcykgY29uc3Qgb3ZlcnJpZGUgeworICAgICAgICBmb3IgKEMyUGFyYW0qIGNvbnN0IHBhcmFtIDogc3RhY2tQYXJhbXMpIHsKKyAgICAgICAgICAgICh2b2lkKW1heUJsb2NrOworICAgICAgICAgICAgaWYgKCEqcGFyYW0pIHsgLy8gcGFyYW0gaXMgYWxyZWFkeSBpbnZhbGlkIC0gcmVtZW1iZXIgaXQKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgLy8gbm90ZTogdGhpcyBkb2VzIG5vdCBoYW5kbGUgc3RyZWFtIHBhcmFtcyAoc2hvdWxkIHVzZSBpbmRleC4uLikKKyAgICAgICAgICAgIGlmICghbU15UGFyYW1zLmNvdW50KHBhcmFtLT5pbmRleCgpKSkgeworICAgICAgICAgICAgICAgIGNvbnRpbnVlOyAvLyBub3QgbXkgcGFyYW0KKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgQzJQYXJhbSAmIG15UGFyYW0gPSBtTXlQYXJhbXMuZmluZChwYXJhbS0+aW5kZXgoKSktPnNlY29uZDsKKyAgICAgICAgICAgIGlmIChteVBhcmFtLnNpemUoKSAhPSBwYXJhbS0+c2l6ZSgpKSB7IC8vIGluY29ycmVjdCBzaXplCisgICAgICAgICAgICAgICAgcGFyYW0tPmludmFsaWRhdGUoKTsKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgcGFyYW0tPnVwZGF0ZUZyb20obXlQYXJhbSk7CisgICAgICAgIH0KKworICAgICAgICBmb3IgKGNvbnN0IEMyUGFyYW06OkluZGV4IGluZGV4IDogaGVhcFBhcmFtSW5kaWNlcykgeworICAgICAgICAgICAgaWYgKG1NeVBhcmFtcy5jb3VudChpbmRleCkpIHsKKyAgICAgICAgICAgICAgICBDMlBhcmFtICYgbXlQYXJhbSA9IG1NeVBhcmFtcy5maW5kKGluZGV4KS0+c2Vjb25kOworICAgICAgICAgICAgICAgIHN0ZDo6dW5pcXVlX3B0cjxDMlBhcmFtPiBwYXJhbUNvcHkoQzJQYXJhbTo6Q29weShteVBhcmFtKSk7CisgICAgICAgICAgICAgICAgaGVhcFBhcmFtcy0+cHVzaF9iYWNrKHN0ZDo6bW92ZShwYXJhbUNvcHkpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIHJldHVybiBDMl9PSzsKKyAgICB9CisKKyAgICBzdGQ6OnVub3JkZXJlZF9tYXA8dWludDMyX3QsIEMyUGFyYW0gJj4gbU15UGFyYW1zOworCisgICAgQzJDb21wb25lbnREb21haW5JbmZvIG1Eb21haW5JbmZvOworCisgICAgTXlDb21wb25lbnRJbnN0YW5jZSgpIHsKKyAgICAgICAgbU15UGFyYW1zLmluc2VydCh7bURvbWFpbkluZm8uaW5kZXgoKSwgbURvbWFpbkluZm99KTsKKyAgICB9CisKKyAgICB2aXJ0dWFsIGMyX3N0YXR1c190IHJlbGVhc2VUdW5uZWxfc20oYzJfbm9kZV9pZF90IHRhcmdldENvbXBvbmVudCkgb3ZlcnJpZGUgeworICAgICAgICAodm9pZCl0YXJnZXRDb21wb25lbnQ7CisgICAgICAgIHJldHVybiBDMl9PTUlUVEVEOworICAgIH0KKworICAgIGNsYXNzIE15UGFyYW1SZWZsZWN0b3IgOiBwdWJsaWMgQzJQYXJhbVJlZmxlY3RvciB7CisgICAgICAgIGNvbnN0IE15Q29tcG9uZW50SW5zdGFuY2UgKmluc3RhbmNlOworCisgICAgcHVibGljOgorICAgICAgICBNeVBhcmFtUmVmbGVjdG9yKGNvbnN0IE15Q29tcG9uZW50SW5zdGFuY2UgKmkpIDogaW5zdGFuY2UoaSkgeyB9CisKKyAgICAgICAgdmlydHVhbCBzdGQ6OnVuaXF1ZV9wdHI8QzJTdHJ1Y3REZXNjcmlwdG9yPiBkZXNjcmliZShDMlBhcmFtOjpDb3JlSW5kZXggcGFyYW1JbmRleCkgY29uc3Qgb3ZlcnJpZGUgeworICAgICAgICAgICAgc3dpdGNoIChwYXJhbUluZGV4LnR5cGVJbmRleCgpKSB7CisgICAgICAgICAgICBjYXNlIGRlY2x0eXBlKGluc3RhbmNlLT5tRG9tYWluSW5mbyk6OkNPUkVfSU5ERVg6CisgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgIHJldHVybiBzdGQ6OnVuaXF1ZV9wdHI8QzJTdHJ1Y3REZXNjcmlwdG9yPihuZXcgQzJTdHJ1Y3REZXNjcmlwdG9yeworICAgICAgICAgICAgICAgICAgICBpbnN0YW5jZS0+bURvbWFpbkluZm8udHlwZSgpLAorICAgICAgICAgICAgICAgICAgICBkZWNsdHlwZShpbnN0YW5jZS0+bURvbWFpbkluZm8pOjpGaWVsZExpc3QoKSwKKyAgICAgICAgICAgICAgICB9KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJldHVybiBudWxscHRyOworICAgICAgICB9CisgICAgfTsKKworICAgIHZpcnR1YWwgYzJfc3RhdHVzX3QgcXVlcnlTdXBwb3J0ZWRWYWx1ZXNfdmIoCisgICAgICAgICAgICBzdGQ6OnZlY3RvcjxDMkZpZWxkU3VwcG9ydGVkVmFsdWVzUXVlcnk+ICZmaWVsZHMsCisgICAgICAgICAgICBjMl9ibG9ja2luZ190IG1heUJsb2NrKSBjb25zdCBvdmVycmlkZSB7CisgICAgICAgICh2b2lkKW1heUJsb2NrOworICAgICAgICBmb3IgKEMyRmllbGRTdXBwb3J0ZWRWYWx1ZXNRdWVyeSAmcXVlcnkgOiBmaWVsZHMpIHsKKyAgICAgICAgICAgIGlmIChxdWVyeS5maWVsZCgpID09IEMyUGFyYW1GaWVsZCgmbURvbWFpbkluZm8sICZDMkNvbXBvbmVudERvbWFpbkluZm86OnZhbHVlKSkgeworICAgICAgICAgICAgICAgIHF1ZXJ5LnZhbHVlcyA9IEMyRmllbGRTdXBwb3J0ZWRWYWx1ZXMoCisgICAgICAgICAgICAgICAgICAgIGZhbHNlIC8qIGZsYWcgKi8sCisgICAgICAgICAgICAgICAgICAgICZtRG9tYWluSW5mby52YWx1ZQorICAgICAgICAgICAgICAgICAgICAvLywKKyAgICAgICAgICAgICAgICAgICAgLy97KGludDMyX3QpQzJEb21haW5WaWRlb30KKyAgICAgICAgICAgICAgICApOworICAgICAgICAgICAgICAgIHF1ZXJ5LnN0YXR1cyA9IEMyX09LOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBxdWVyeS5zdGF0dXMgPSBDMl9CQURfSU5ERVg7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIEMyX09LOworICAgIH0KKworICAgIHN0ZDo6c2hhcmVkX3B0cjxDMlBhcmFtUmVmbGVjdG9yPiBnZXRQYXJhbVJlZmxlY3RvcigpIGNvbnN0IHsKKyAgICAgICAgcmV0dXJuIHN0ZDo6c2hhcmVkX3B0cjxDMlBhcmFtUmVmbGVjdG9yPihuZXcgTXlQYXJhbVJlZmxlY3Rvcih0aGlzKSk7CisgICAgfQorCisgICAgdmlydHVhbCBjMl9zdGF0dXNfdCBxdWVyeVN1cHBvcnRlZFBhcmFtc19uYigKKyAgICAgICAgICAgIHN0ZDo6dmVjdG9yPHN0ZDo6c2hhcmVkX3B0cjxDMlBhcmFtRGVzY3JpcHRvcj4+ICogY29uc3QgcGFyYW1zKSBjb25zdCBvdmVycmlkZSB7CisgICAgICAgIHBhcmFtcy0+cHVzaF9iYWNrKHN0ZDo6bWFrZV9zaGFyZWQ8QzJQYXJhbURlc2NyaXB0b3I+KAorICAgICAgICAgICAgICAgIHRydWUgLyogcmVxdWlyZWQgKi8sICJfZG9tYWluIiwgJm1Eb21haW5JbmZvKSk7CisgICAgICAgIHBhcmFtcy0+cHVzaF9iYWNrKHN0ZDo6c2hhcmVkX3B0cjxDMlBhcmFtRGVzY3JpcHRvcj4oCisgICAgICAgICAgICAgICAgbmV3IEMyUGFyYW1EZXNjcmlwdG9yKHRydWUgLyogcmVxdWlyZWQgKi8sICJfZG9tYWluIiwgJm1Eb21haW5JbmZvKSkpOworICAgICAgICByZXR1cm4gQzJfT0s7CisgICAgfQorCisgICAgdmlydHVhbCB+TXlDb21wb25lbnRJbnN0YW5jZSgpIG92ZXJyaWRlID0gZGVmYXVsdDsKK307CisKK3RlbXBsYXRlPHR5cGVuYW1lIEUsIGJvb2wgUz1zdGQ6OmlzX2VudW08RT46OnZhbHVlPgorc3RydWN0IGdldHRlciB7CisgICAgaW50MzJfdCBnZXQoY29uc3QgQzJGaWVsZFN1cHBvcnRlZFZhbHVlczo6UHJpbWl0aXZlICZwLCBpbnQzMl90KikgeworICAgICAgICByZXR1cm4gcC5pMzI7CisgICAgfQorICAgIGludDY0X3QgZ2V0KGNvbnN0IEMyRmllbGRTdXBwb3J0ZWRWYWx1ZXM6OlByaW1pdGl2ZSAmcCwgaW50NjRfdCopIHsKKyAgICAgICAgcmV0dXJuIHAuaTY0OworICAgIH0KKyAgICB1aW50MzJfdCBnZXQoY29uc3QgQzJGaWVsZFN1cHBvcnRlZFZhbHVlczo6UHJpbWl0aXZlICZwLCB1aW50MzJfdCopIHsKKyAgICAgICAgcmV0dXJuIHAudTMyOworICAgIH0KKyAgICB1aW50NjRfdCBnZXQoY29uc3QgQzJGaWVsZFN1cHBvcnRlZFZhbHVlczo6UHJpbWl0aXZlICZwLCB1aW50NjRfdCopIHsKKyAgICAgICAgcmV0dXJuIHAudTY0OworICAgIH0KKyAgICBmbG9hdCBnZXQoY29uc3QgQzJGaWVsZFN1cHBvcnRlZFZhbHVlczo6UHJpbWl0aXZlICZwLCBmbG9hdCopIHsKKyAgICAgICAgcmV0dXJuIHAuZnA7CisgICAgfQorfTsKKwordGVtcGxhdGU8dHlwZW5hbWUgRT4KK3N0cnVjdCBnZXR0ZXI8RSwgdHJ1ZT4geworICAgICB0eXBlbmFtZSBzdGQ6OnVuZGVybHlpbmdfdHlwZTxFPjo6dHlwZSBnZXQoY29uc3QgQzJGaWVsZFN1cHBvcnRlZFZhbHVlczo6UHJpbWl0aXZlICZwLCBFKikgeworICAgICAgICAgdXNpbmcgdT10eXBlbmFtZSBzdGQ6OnVuZGVybHlpbmdfdHlwZTxFPjo6dHlwZTsKKyAgICAgICAgIHJldHVybiBnZXR0ZXI8dT4oKS5nZXQocCwgKHUqKTApOworICAgICB9Cit9OworCit0ZW1wbGF0ZTx0eXBlbmFtZSBULCBib29sIEU9c3RkOjppc19lbnVtPFQ+Ojp2YWx1ZT4KK3N0cnVjdCBsYXhfdW5kZXJseWluZ190eXBlIHsKKyAgICB0eXBlZGVmIHR5cGVuYW1lIHN0ZDo6dW5kZXJseWluZ190eXBlPFQ+Ojp0eXBlIHR5cGU7Cit9OworCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPgorc3RydWN0IGxheF91bmRlcmx5aW5nX3R5cGU8VCwgZmFsc2U+IHsKKyAgICB0eXBlZGVmIFQgdHlwZTsKK307CisKK3RlbXBsYXRlPHR5cGVuYW1lIEU+Cit0eXBlbmFtZSBsYXhfdW5kZXJseWluZ190eXBlPEU+Ojp0eXBlIGdldCgKKyAgICAgICAgY29uc3QgQzJGaWVsZFN1cHBvcnRlZFZhbHVlczo6UHJpbWl0aXZlICZwLCBFKikgeworICAgIHJldHVybiBnZXR0ZXI8RT4oKS5nZXQocCwgKEUqKTApOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPgordm9pZCBkdW1wRlNWKGNvbnN0IEMyRmllbGRTdXBwb3J0ZWRWYWx1ZXMgJnN2LCBUKnQpIHsKKyAgICB1c2luZyBuYW1lc3BhY2Ugc3RkOworICAgIGNvdXQgPDwgKHN0ZDo6aXNfZW51bTxUPjo6dmFsdWUgPyAoc3RkOjppc19zaWduZWQ8dHlwZW5hbWUgbGF4X3VuZGVybHlpbmdfdHlwZTxUPjo6dHlwZT46OnZhbHVlID8gImkiIDogInUiKQorICAgICAgICAgICAgIDogc3RkOjppc19pbnRlZ3JhbDxUPjo6dmFsdWUgPyBzdGQ6OmlzX3NpZ25lZDxUPjo6dmFsdWUgPyAiaSIgOiAidSIgOiAiZiIpCisgICAgICAgICA8PCAoOCAqIHNpemVvZihUKSk7CisgICAgaWYgKHN2LnR5cGUgPT0gc3YuUkFOR0UpIHsKKyAgICAgICAgY291dCA8PCAiLnJhbmdlKCIgPDwgZ2V0KHN2LnJhbmdlLm1pbiwgdCk7CisgICAgICAgIGlmIChnZXQoc3YucmFuZ2Uuc3RlcCwgdCkgIT0gc3RkOjppc19pbnRlZ3JhbDxUPjo6dmFsdWUpIHsKKyAgICAgICAgICAgIGNvdXQgPDwgIjoiIDw8IGdldChzdi5yYW5nZS5zdGVwLCB0KTsKKyAgICAgICAgfQorICAgICAgICBpZiAoZ2V0KHN2LnJhbmdlLm51bSwgdCkgIT0gMSB8fCBnZXQoc3YucmFuZ2UuZGVub20sIHQpICE9IDEpIHsKKyAgICAgICAgICAgIGNvdXQgPDwgIjoiIDw8IGdldChzdi5yYW5nZS5udW0sIHQpIDw8ICIvIiA8PCBnZXQoc3YucmFuZ2UuZGVub20sIHQpOworICAgICAgICB9CisgICAgICAgIGNvdXQgPDwgZ2V0KHN2LnJhbmdlLm1heCwgdCkgPDwgIikiOworICAgIH0KKyAgICBpZiAoc3YudmFsdWVzLnNpemUoKSkgeworICAgICAgICBjb3V0IDw8IChzdi50eXBlID09IHN2LkZMQUdTID8gIi5mbGFncygiIDogIi5saXN0KCIpOworICAgICAgICBjb25zdCBjaGFyICpzZXAgPSAiIjsKKyAgICAgICAgZm9yIChjb25zdCBDMkZpZWxkU3VwcG9ydGVkVmFsdWVzOjpQcmltaXRpdmUgJnAgOiBzdi52YWx1ZXMpIHsKKyAgICAgICAgICAgIGNvdXQgPDwgc2VwIDw8IGdldChwLCB0KTsKKyAgICAgICAgICAgIHNlcCA9ICIsIjsKKyAgICAgICAgfQorICAgICAgICBjb3V0IDw8ICIpIjsKKyAgICB9CisgICAgY291dCA8PCBlbmRsOworfQorCit2b2lkIGR1bXBUeXBlKEMyUGFyYW06OlR5cGUgdHlwZSkgeworICAgIHVzaW5nIG5hbWVzcGFjZSBzdGQ7CisgICAgY291dCA8PCAodHlwZS5pc1ZlbmRvcigpID8gIlZlbmRvciIgOiAiQzIiKTsKKyAgICBpZiAodHlwZS5mb3JJbnB1dCgpKSB7CisgICAgICAgIGNvdXQgPDwgIklucHV0IjsKKyAgICB9IGVsc2UgaWYgKHR5cGUuZm9yT3V0cHV0KCkpIHsKKyAgICAgICAgY291dCA8PCAiT3V0cHV0IjsKKyAgICB9IGVsc2UgaWYgKHR5cGUuZm9yUG9ydCgpICYmICF0eXBlLmZvclN0cmVhbSgpKSB7CisgICAgICAgIGNvdXQgPDwgIlBvcnQiOworICAgIH0KKyAgICBpZiAodHlwZS5mb3JTdHJlYW0oKSkgeworICAgICAgICBjb3V0IDw8ICJTdHJlYW0iOworICAgIH0KKworICAgIGlmICh0eXBlLmlzRmxleGlibGUoKSkgeworICAgICAgICBjb3V0IDw8ICJGbGV4IjsKKyAgICB9CisKKyAgICBjb3V0IDw8IHR5cGUudHlwZUluZGV4KCk7CisKKyAgICBzd2l0Y2ggKHR5cGUua2luZCgpKSB7CisgICAgY2FzZSBDMlBhcmFtOjpJTkZPOiBjb3V0IDw8ICJJbmZvIjsgYnJlYWs7CisgICAgY2FzZSBDMlBhcmFtOjpTRVRUSU5HOiBjb3V0IDw8ICJTZXR0aW5nIjsgYnJlYWs7CisgICAgY2FzZSBDMlBhcmFtOjpUVU5JTkc6IGNvdXQgPDwgIlR1bmluZyI7IGJyZWFrOworICAgIGNhc2UgQzJQYXJhbTo6U1RSVUNUOiBjb3V0IDw8ICJTdHJ1Y3QiOyBicmVhazsKKyAgICBkZWZhdWx0OiBjb3V0IDw8ICJLaW5kIiA8PCAoaW50MzJfdCl0eXBlLmtpbmQoKTsgYnJlYWs7CisgICAgfQorfQorCit2b2lkIGR1bXBUeXBlKEMyUGFyYW06OkNvcmVJbmRleCB0eXBlKSB7CisgICAgdXNpbmcgbmFtZXNwYWNlIHN0ZDsKKyAgICBjb3V0IDw8ICh0eXBlLmlzVmVuZG9yKCkgPyAiVmVuZG9yIiA6ICJDMiIpOworICAgIGlmICh0eXBlLmlzRmxleGlibGUoKSkgeworICAgICAgICBjb3V0IDw8ICJGbGV4IjsKKyAgICB9CisKKyAgICBjb3V0IDw8IHR5cGUudHlwZUluZGV4KCkgPDwgIlN0cnVjdCI7Cit9CisKK3ZvaWQgZHVtcFR5cGUoQzJGaWVsZERlc2NyaXB0b3I6OnR5cGVfdCB0eXBlKSB7CisgICAgdXNpbmcgbmFtZXNwYWNlIHN0ZDsKKyAgICBzd2l0Y2ggKHR5cGUpIHsKKyAgICBjYXNlIEMyRmllbGREZXNjcmlwdG9yOjpCTE9COiBjb3V0IDw8ICJibG9iICI7IGJyZWFrOworICAgIGNhc2UgQzJGaWVsZERlc2NyaXB0b3I6OkZMT0FUOiBjb3V0IDw8ICJmbG9hdCAiOyBicmVhazsKKyAgICBjYXNlIEMyRmllbGREZXNjcmlwdG9yOjpJTlQzMjogY291dCA8PCAiaW50MzJfdCAiOyBicmVhazsKKyAgICBjYXNlIEMyRmllbGREZXNjcmlwdG9yOjpJTlQ2NDogY291dCA8PCAiaW50NjRfdCAiOyBicmVhazsKKyAgICBjYXNlIEMyRmllbGREZXNjcmlwdG9yOjpVSU5UMzI6IGNvdXQgPDwgInVpbnQzMl90ICI7IGJyZWFrOworICAgIGNhc2UgQzJGaWVsZERlc2NyaXB0b3I6OlVJTlQ2NDogY291dCA8PCAidWludDY0X3QgIjsgYnJlYWs7CisgICAgY2FzZSBDMkZpZWxkRGVzY3JpcHRvcjo6U1RSSU5HOiBjb3V0IDw8ICJjaGFyICI7IGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICAgIGNvdXQgPDwgInN0cnVjdCAiOworICAgICAgICBkdW1wVHlwZSgoQzJQYXJhbTo6VHlwZSl0eXBlKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorfQorCit2b2lkIGR1bXBTdHJ1Y3QoY29uc3QgQzJTdHJ1Y3REZXNjcmlwdG9yICZzZCkgeworICAgIHVzaW5nIG5hbWVzcGFjZSBzdGQ7CisgICAgY291dCA8PCAic3RydWN0ICI7CisgICAgZHVtcFR5cGUoc2QuY29yZUluZGV4KCkpOworICAgIGNvdXQgPDwgIiB7IiA8PCBlbmRsOworICAgIC8vQzJGaWVsZERlc2NyaXB0b3IgJmY7CisgICAgZm9yIChjb25zdCBDMkZpZWxkRGVzY3JpcHRvciAmZiA6IHNkKSB7CisgICAgICAgIFByaW50VG8oZiwgJmNvdXQpOworICAgICAgICBjb3V0IDw8IGVuZGw7CisKKyAgICAgICAgaWYgKGYubmFtZWRWYWx1ZXMoKS5zaXplKCkpIHsKKyAgICAgICAgICAgIGNvdXQgPDwgIi5uYW1lZCgiOworICAgICAgICAgICAgY29uc3QgY2hhciAqc2VwID0gIiI7CisgICAgICAgICAgICBmb3IgKGNvbnN0IEMyRmllbGREZXNjcmlwdG9yOjpOYW1lZFZhbHVlVHlwZSAmcCA6IGYubmFtZWRWYWx1ZXMoKSkgeworICAgICAgICAgICAgICAgIGNvdXQgPDwgc2VwIDw8IHAuZmlyc3QgPDwgIj0iOworICAgICAgICAgICAgICAgIHN3aXRjaCAoZi50eXBlKCkpIHsKKyAgICAgICAgICAgICAgICBjYXNlIEMyRmllbGREZXNjcmlwdG9yOjpJTlQzMjogY291dCA8PCBnZXQocC5zZWNvbmQsIChpbnQzMl90ICopMCk7IGJyZWFrOworICAgICAgICAgICAgICAgIGNhc2UgQzJGaWVsZERlc2NyaXB0b3I6OklOVDY0OiBjb3V0IDw8IGdldChwLnNlY29uZCwgKGludDY0X3QgKikwKTsgYnJlYWs7CisgICAgICAgICAgICAgICAgY2FzZSBDMkZpZWxkRGVzY3JpcHRvcjo6VUlOVDMyOiBjb3V0IDw8IGdldChwLnNlY29uZCwgKHVpbnQzMl90ICopMCk7IGJyZWFrOworICAgICAgICAgICAgICAgIGNhc2UgQzJGaWVsZERlc2NyaXB0b3I6OlVJTlQ2NDogY291dCA8PCBnZXQocC5zZWNvbmQsICh1aW50NjRfdCAqKTApOyBicmVhazsKKyAgICAgICAgICAgICAgICBjYXNlIEMyRmllbGREZXNjcmlwdG9yOjpGTE9BVDogY291dCA8PCBnZXQocC5zZWNvbmQsIChmbG9hdCAqKTApOyBicmVhazsKKyAgICAgICAgICAgICAgICBkZWZhdWx0OiBjb3V0IDw8ICI/Pz8iOyBicmVhazsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgc2VwID0gIiwiOworICAgICAgICAgICAgfQorICAgICAgICAgICAgY291dCA8PCAiKSI7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBjb3V0IDw8ICJ9OyIgPDwgZW5kbDsKK30KKwordm9pZCBkdW1wRGVzYyhjb25zdCBDMlBhcmFtRGVzY3JpcHRvciAmcGQpIHsKKyAgICB1c2luZyBuYW1lc3BhY2Ugc3RkOworICAgIGlmIChwZC5pc1JlcXVpcmVkKCkpIHsKKyAgICAgICAgY291dCA8PCAicmVxdWlyZWQgIjsKKyAgICB9CisgICAgaWYgKHBkLmlzUGVyc2lzdGVudCgpKSB7CisgICAgICAgIGNvdXQgPDwgInBlcnNpc3RlbnQgIjsKKyAgICB9CisgICAgY291dCA8PCAic3RydWN0ICI7CisgICAgZHVtcFR5cGUoQzJQYXJhbTo6VHlwZShwZC5pbmRleCgpLnR5cGUoKSkpOworICAgIGNvdXQgPDwgIiAiIDw8IHBkLm5hbWUoKSA8PCAiOyIgPDwgZW5kbDsKK30KKworVEVTVF9GKEMyU2FtcGxlQ29tcG9uZW50VGVzdCwgUmVmbGVjdG9yVGVzdCkgeworICAgIEMyQ29tcG9uZW50RG9tYWluSW5mbyBkb21haW5JbmZvOworICAgIHN0ZDo6c2hhcmVkX3B0cjxNeUNvbXBvbmVudEluc3RhbmNlPiBteUNvbXAobmV3IE15Q29tcG9uZW50SW5zdGFuY2UpOworICAgIHN0ZDo6c2hhcmVkX3B0cjxDMkNvbXBvbmVudEludGVyZmFjZT4gY29tcCA9IG15Q29tcDsKKworICAgIHN0ZDo6dW5pcXVlX3B0cjxDMlN0cnVjdERlc2NyaXB0b3I+IGRlc2N7CisgICAgICAgIG15Q29tcC0+Z2V0UGFyYW1SZWZsZWN0b3IoKS0+ZGVzY3JpYmUoQzJDb21wb25lbnREb21haW5JbmZvOjpDT1JFX0lOREVYKX07CisgICAgZHVtcFN0cnVjdCgqZGVzYyk7CisKKyAgICBzdGQ6OnZlY3RvcjxDMkZpZWxkU3VwcG9ydGVkVmFsdWVzUXVlcnk+IHF1ZXJ5ID0geworICAgICAgICB7IEMyUGFyYW1GaWVsZCgmZG9tYWluSW5mbywgJkMyQ29tcG9uZW50RG9tYWluSW5mbzo6dmFsdWUpLAorICAgICAgICAgIEMyRmllbGRTdXBwb3J0ZWRWYWx1ZXNRdWVyeTo6Q1VSUkVOVCB9LAorICAgICAgICBDMkZpZWxkU3VwcG9ydGVkVmFsdWVzUXVlcnkoQzJQYXJhbUZpZWxkKCZkb21haW5JbmZvLCAmQzJDb21wb25lbnREb21haW5JbmZvOjp2YWx1ZSksCisgICAgICAgICAgQzJGaWVsZFN1cHBvcnRlZFZhbHVlc1F1ZXJ5OjpDVVJSRU5UKSwKKyAgICAgICAgQzJGaWVsZFN1cHBvcnRlZFZhbHVlc1F1ZXJ5OjpDdXJyZW50KEMyUGFyYW1GaWVsZCgmZG9tYWluSW5mbywgJkMyQ29tcG9uZW50RG9tYWluSW5mbzo6dmFsdWUpKSwKKyAgICB9OworCisgICAgRVhQRUNUX0VRKEMyX09LLCBjb21wLT5xdWVyeVN1cHBvcnRlZFZhbHVlc192YihxdWVyeSwgQzJfRE9OVF9CTE9DSykpOworCisgICAgZm9yIChjb25zdCBDMkZpZWxkU3VwcG9ydGVkVmFsdWVzUXVlcnkgJnEgOiBxdWVyeSkgeworICAgICAgICBkdW1wRlNWKHEudmFsdWVzLCAmZG9tYWluSW5mby52YWx1ZSk7CisgICAgfQorfQorCitURVNUX0YoQzJTYW1wbGVDb21wb25lbnRUZXN0LCBGaWVsZFN1cHBvcnRlZFZhbHVlc1Rlc3QpIHsKKyAgICB0eXBlZGVmIEMyR2xvYmFsUGFyYW08QzJJbmZvLCBDMlVpbnQzMlZhbHVlLCAwPiBVaW50MzJUZXN0SW5mbzsKKyAgICBVaW50MzJUZXN0SW5mbyB0OworICAgIHN0ZDo6dmVjdG9yPEMyRmllbGRTdXBwb3J0ZWRWYWx1ZXM+IHZhbHVlczsKKyAgICB2YWx1ZXMucHVzaF9iYWNrKEMyRmllbGRTdXBwb3J0ZWRWYWx1ZXMoMCwgMTAsIDEpKTsgIC8vIG1pbiwgbWF4LCBzdGVwCisgICAgdmFsdWVzLnB1c2hfYmFjayhDMkZpZWxkU3VwcG9ydGVkVmFsdWVzKDEsIDY0LCAyLCAxKSk7ICAvLyBtaW4sIG1heCwgbnVtLCBkZW4KKyAgICB2YWx1ZXMucHVzaF9iYWNrKEMyRmllbGRTdXBwb3J0ZWRWYWx1ZXMoZmFsc2UsIHsxLCAyLCAzfSkpOyAgLy8gZmxhZ3MsIHN0ZDo6aW5pdGlhbGl6ZXJfbGlzdAorICAgIHVpbnQzMl90IHZhbFtdID0gezEsIDMsIDUsIDd9OworICAgIHN0ZDo6dmVjdG9yPHVpbnQzMl90PiB2KHN0ZDo6YmVnaW4odmFsKSwgc3RkOjplbmQodmFsKSk7CisgICAgdmFsdWVzLnB1c2hfYmFjayhDMkZpZWxkU3VwcG9ydGVkVmFsdWVzKGZhbHNlLCB2KSk7ICAvLyBmbGFncywgc3RkOjp2ZWN0b3IKKworICAgIGZvciAoY29uc3QgQzJGaWVsZFN1cHBvcnRlZFZhbHVlcyAmc3YgOiB2YWx1ZXMpIHsKKyAgICAgICAgZHVtcEZTVihzdiwgJnQudmFsdWUpOworICAgIH0KK30KKwpkaWZmIC0tZ2l0IGEvbWVkaWEvY29kZWMyL3Rlc3RzL0MyVXRpbFRlc3QuY3BwIGIvbWVkaWEvY29kZWMyL3Rlc3RzL0MyVXRpbFRlc3QuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU5Y2QzMTMKLS0tIC9kZXYvbnVsbAorKysgYi9tZWRpYS9jb2RlYzIvdGVzdHMvQzJVdGlsVGVzdC5jcHAKQEAgLTAsMCArMSwxMTkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworCisvLyNkZWZpbmUgTE9HX05ERUJVRyAwCisjZGVmaW5lIExPR19UQUcgIkMyVXRpbFRlc3QiCisKKyNpbmNsdWRlIDxndGVzdC9ndGVzdC5oPgorCisjZGVmaW5lIF9fQzJfR0VORVJBVEVfR0xPQkFMX1ZBUlNfXworI2luY2x1ZGUgPF9DMk1hY3JvVXRpbHMuaD4KKyNpbmNsdWRlIDxDMkVudW0uaD4KKworLyoqIFxmaWxlCisgKiBUZXN0cyBmb3Igdm5kay91dGlsLgorICovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBfQzJNYWNyb1V0aWxzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCitzdGF0aWNfYXNzZXJ0KDAgPT0gX0MyX0FSR0MoKSwgInNob3VsZCBiZSAwIik7CitzdGF0aWNfYXNzZXJ0KDEgPT0gX0MyX0FSR0MoMSksICJzaG91bGQgYmUgMSIpOworc3RhdGljX2Fzc2VydCgyID09IF9DMl9BUkdDKDEsIDIpLCAic2hvdWxkIGJlIDIiKTsKK3N0YXRpY19hc3NlcnQoNjQgPT0gX0MyX0FSR0MoCisgICAgICAgIDEsIDIsIDMsIDQsIDUsIDYsIDcsIDgsIDksIDEwLCAxMSwgMTIsIDEzLCAxNCwgMTUsIDE2LCAxNywgMTgsIDE5LCAyMCwgMjEsIDIyLCAyMywgMjQsIDI1LAorICAgICAgICAyNiwgMjcsIDI4LCAyOSwgMzAsIDMxLCAzMiwgMzMsIDM0LCAzNSwgMzYsIDM3LCAzOCwgMzksIDQwLCA0MSwgNDIsIDQzLCA0NCwgNDUsIDQ2LCA0NywgNDgsCisgICAgICAgIDQ5LCA1MCwgNTEsIDUyLCA1MywgNTQsIDU1LCA1NiwgNTcsIDU4LCA1OSwgNjAsIDYxLCA2MiwgNjMsIDY0KSwgInNob3VsZCBiZSA2NCIpOworCitzdGF0aWNfYXNzZXJ0KDAgPT0gX0MyX0FSR0MoLCksICJzaG91bGQgYmUgMCIpOworc3RhdGljX2Fzc2VydCgxID09IF9DMl9BUkdDKDEsKSwgInNob3VsZCBiZSAxIik7CitzdGF0aWNfYXNzZXJ0KDIgPT0gX0MyX0FSR0MoMSwgMiwpLCAic2hvdWxkIGJlIDIiKTsKK3N0YXRpY19hc3NlcnQoNjQgPT0gX0MyX0FSR0MoCisgICAgICAgIDEsIDIsIDMsIDQsIDUsIDYsIDcsIDgsIDksIDEwLCAxMSwgMTIsIDEzLCAxNCwgMTUsIDE2LCAxNywgMTgsIDE5LCAyMCwgMjEsIDIyLCAyMywgMjQsIDI1LAorICAgICAgICAyNiwgMjcsIDI4LCAyOSwgMzAsIDMxLCAzMiwgMzMsIDM0LCAzNSwgMzYsIDM3LCAzOCwgMzksIDQwLCA0MSwgNDIsIDQzLCA0NCwgNDUsIDQ2LCA0NywgNDgsCisgICAgICAgIDQ5LCA1MCwgNTEsIDUyLCA1MywgNTQsIDU1LCA1NiwgNTcsIDU4LCA1OSwgNjAsIDYxLCA2MiwgNjMsIDY0LCksICJzaG91bGQgYmUgNjQiKTsKKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBfQzJFbnVtVXRpbHMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCitjbGFzcyBDMlV0aWxUZXN0IDogcHVibGljIDo6dGVzdGluZzo6VGVzdCB7Cit9OworCitDMkVOVU0oRW51bTEsIHVpbnQzMl90LAorICAgIEVudW0xVmFsdWUxLAorICAgIEVudW0xVmFsdWUyLAorICAgIEVudW0xVmFsdWU0ID0gRW51bTFWYWx1ZTIgKyAyLAorKTsKKworQzJFTlVNX0NVU1RPTV9QUkVGSVgoRW51bTIsIHVpbnQzMl90LCAiRW51bSIsCisgICAgRW51bTJWYWx1ZTEsCisgICAgRW51bTJWYWx1ZTIsCisgICAgRW51bTJWYWx1ZTQgPSBFbnVtMVZhbHVlMiArIDIsCispOworCitDMkVOVU1fQ1VTVE9NX05BTUVTKEVudW0zLCB1aW50OF90LAorICAgICh7IHsgInZhbHVlMSIsIEVudW0zVmFsdWUxIH0sCisgICAgICAgeyAidmFsdWUyIiwgRW51bTNWYWx1ZTIgfSwKKyAgICAgICB7ICJ2YWx1ZTQiLCBFbnVtM1ZhbHVlNCB9LAorICAgICAgIHsgImludmFsaWQiLCBJbnZhbGlkIH0gfSksCisgICAgRW51bTNWYWx1ZTEsCisgICAgRW51bTNWYWx1ZTIsCisgICAgRW51bTNWYWx1ZTQgPSBFbnVtM1ZhbHVlMiArIDIsCisgICAgSW52YWxpZCwKKyk7CisKK1RFU1RfRihDMlV0aWxUZXN0LCBFbnVtVXRpbHNUZXN0KSB7CisgICAgc3RkOjp2ZWN0b3I8c3RkOjpwYWlyPEMyU3RyaW5nLCBFbnVtMz4+IHBhaXJzICggeyB7ICJ2YWx1ZTEiLCBFbnVtM1ZhbHVlMSB9LAorICAgICAgeyAidmFsdWUyIiwgRW51bTNWYWx1ZTIgfSwKKyAgICAgIHsgInZhbHVlNCIsIEVudW0zVmFsdWU0IH0sCisgICAgICB7ICJpbnZhbGlkIiwgSW52YWxpZCB9IH0pOworICAgIEVudW0zIGUzOworICAgIEMyRmllbGREZXNjcmlwdG9yOjpuYW1lZFZhbHVlc0ZvcihlMyk7CisKKyAgICAvLyB1cHBlciBjYXNlCisgICAgRVhQRUNUX0VRKCJ5ZXMiLCBfQzJFbnVtVXRpbHM6OmNhbWVsQ2FzZVRvRGFzaGVkKCJZRVMiKSk7CisgICAgRVhQRUNUX0VRKCJubyIsIF9DMkVudW1VdGlsczo6Y2FtZWxDYXNlVG9EYXNoZWQoIk5PIikpOworICAgIEVYUEVDVF9FUSgieWVzLW5vIiwgX0MyRW51bVV0aWxzOjpjYW1lbENhc2VUb0Rhc2hlZCgiWUVTX05PIikpOworICAgIEVYUEVDVF9FUSgieWVzLW5vIiwgX0MyRW51bVV0aWxzOjpjYW1lbENhc2VUb0Rhc2hlZCgiWUVTX19OTyIpKTsKKyAgICBFWFBFQ1RfRVEoImEyZHAiLCBfQzJFbnVtVXRpbHM6OmNhbWVsQ2FzZVRvRGFzaGVkKCJBMkRQIikpOworICAgIEVYUEVDVF9FUSgibXAyLXRzIiwgX0MyRW51bVV0aWxzOjpjYW1lbENhc2VUb0Rhc2hlZCgiTVAyX1RTIikpOworICAgIEVYUEVDVF9FUSgiYmxvY2stMmQiLCBfQzJFbnVtVXRpbHM6OmNhbWVsQ2FzZVRvRGFzaGVkKCJCTE9DS18yRCIpKTsKKyAgICBFWFBFQ1RfRVEoIm1wZWctMi10cyIsIF9DMkVudW1VdGlsczo6Y2FtZWxDYXNlVG9EYXNoZWQoIk1QRUdfMl9UUyIpKTsKKyAgICBFWFBFQ1RfRVEoIl9oaWRkZW4tdmFsdWUiLCBfQzJFbnVtVXRpbHM6OmNhbWVsQ2FzZVRvRGFzaGVkKCJfSElEREVOX1ZBTFVFIikpOworICAgIEVYUEVDVF9FUSgiX19oaWRkZW4tdmFsdWUyIiwgX0MyRW51bVV0aWxzOjpjYW1lbENhc2VUb0Rhc2hlZCgiX19ISURERU5fVkFMVUUyIikpOworICAgIEVYUEVDVF9FUSgiX19oaWRkZW4tdmFsdWUtMiIsIF9DMkVudW1VdGlsczo6Y2FtZWxDYXNlVG9EYXNoZWQoIl9fSElEREVOX1ZBTFVFXzIiKSk7CisKKyAgICAvLyBjYW1lbCBjYXNlCisgICAgRVhQRUNUX0VRKCJ5ZXMiLCBfQzJFbnVtVXRpbHM6OmNhbWVsQ2FzZVRvRGFzaGVkKCJZZXMiKSk7CisgICAgRVhQRUNUX0VRKCJubyIsIF9DMkVudW1VdGlsczo6Y2FtZWxDYXNlVG9EYXNoZWQoIk5vIikpOworICAgIEVYUEVDVF9FUSgieWVzLW5vIiwgX0MyRW51bVV0aWxzOjpjYW1lbENhc2VUb0Rhc2hlZCgiWWVzTm8iKSk7CisgICAgRVhQRUNUX0VRKCJ5ZXMtbm8iLCBfQzJFbnVtVXRpbHM6OmNhbWVsQ2FzZVRvRGFzaGVkKCJZZXNfTm8iKSk7CisgICAgRVhQRUNUX0VRKCJtcDItdHMiLCBfQzJFbnVtVXRpbHM6OmNhbWVsQ2FzZVRvRGFzaGVkKCJNUDJUcyIpKTsKKyAgICBFWFBFQ1RfRVEoImJsb2NrLTJkIiwgX0MyRW51bVV0aWxzOjpjYW1lbENhc2VUb0Rhc2hlZCgiQmxvY2syRCIpKTsKKyAgICBFWFBFQ1RfRVEoIm1wZWctMi10cyIsIF9DMkVudW1VdGlsczo6Y2FtZWxDYXNlVG9EYXNoZWQoIk1wZWcydHMiKSk7CisgICAgRVhQRUNUX0VRKCJfaGlkZGVuLXZhbHVlIiwgX0MyRW51bVV0aWxzOjpjYW1lbENhc2VUb0Rhc2hlZCgiX0hpZGRlblZhbHVlIikpOworICAgIEVYUEVDVF9FUSgiX19oaWRkZW4tdmFsdWUtMiIsIF9DMkVudW1VdGlsczo6Y2FtZWxDYXNlVG9EYXNoZWQoIl9fSGlkZGVuVmFsdWUyIikpOworCisgICAgLy8gbWl4ZWQgY2FzZQorICAgIEVYUEVDVF9FUSgibXAydC1zIiwgX0MyRW51bVV0aWxzOjpjYW1lbENhc2VUb0Rhc2hlZCgiTVAyVF9zIikpOworICAgIEVYUEVDVF9FUSgiYmxvY2stMmQiLCBfQzJFbnVtVXRpbHM6OmNhbWVsQ2FzZVRvRGFzaGVkKCJCbG9ja18yRCIpKTsKKyAgICBFWFBFQ1RfRVEoImJsb2NrLTItZCIsIF9DMkVudW1VdGlsczo6Y2FtZWxDYXNlVG9EYXNoZWQoIkJsb2NrMl9EIikpOworICAgIEVYUEVDVF9FUSgibXBlZy0yLXRzIiwgX0MyRW51bVV0aWxzOjpjYW1lbENhc2VUb0Rhc2hlZCgiTXBlZ18ydHMiKSk7CisgICAgRVhQRUNUX0VRKCJtcGVnLTItdHMiLCBfQzJFbnVtVXRpbHM6OmNhbWVsQ2FzZVRvRGFzaGVkKCJNcGVnXzJfVFMiKSk7CisgICAgRVhQRUNUX0VRKCJfaGlkZGVuLXZhbHVlIiwgX0MyRW51bVV0aWxzOjpjYW1lbENhc2VUb0Rhc2hlZCgiX0hpZGRlbl9fVkFMVUUiKSk7CisgICAgRVhQRUNUX0VRKCJfX2hpZGRlbi12YWx1ZS0yIiwgX0MyRW51bVV0aWxzOjpjYW1lbENhc2VUb0Rhc2hlZCgiX19IaWRkZW5WYWx1ZV8yIikpOworICAgIEVYUEVDVF9FUSgiXzIiLCBfQzJFbnVtVXRpbHM6OmNhbWVsQ2FzZVRvRGFzaGVkKCJfMiIpKTsKKyAgICBFWFBFQ1RfRVEoIl9fMjMiLCBfQzJFbnVtVXRpbHM6OmNhbWVsQ2FzZVRvRGFzaGVkKCJfXzIzIikpOworfQorCmRpZmYgLS1naXQgYS9tZWRpYS9jb2RlYzIvdGVzdHMvQzJfdGVzdC5jcHAgYi9tZWRpYS9jb2RlYzIvdGVzdHMvQzJfdGVzdC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmFkYTlmOQotLS0gL2Rldi9udWxsCisrKyBiL21lZGlhL2NvZGVjMi90ZXN0cy9DMl90ZXN0LmNwcApAQCAtMCwwICsxLDE1OSBAQAorLyoKKyAqIENvcHlyaWdodCAyMDE0IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KKworLy8jZGVmaW5lIExPR19OREVCVUcgMAorI2RlZmluZSBMT0dfVEFHICJDMl90ZXN0IgorCisjaW5jbHVkZSA8Z3Rlc3QvZ3Rlc3QuaD4KKworI2luY2x1ZGUgPEMyLmg+CisKKy8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSBTVEFUSUMgVEVTVFMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCisKK3RlbXBsYXRlPGludCBOPgorc3RydWN0IGMyX2NvbnN0X2NoZWNrZXIKK3sKKyAgICBpbmxpbmUgY29uc3RleHByIHN0YXRpYyBpbnQgbnVtKCkgeyByZXR1cm4gTjsgfQorfTsKKworY29uc3RleHByIGF1dG8gbWluX2kzMl9pMzIgPSBjMl9taW4oaW50MzJfdCgxKSwgaW50MzJfdCgyKSk7CitzdGF0aWNfYXNzZXJ0KHN0ZDo6aXNfc2FtZTxkZWNsdHlwZShtaW5faTMyX2kzMiksIGNvbnN0IGludDMyX3Q+Ojp2YWx1ZSwgInNob3VsZCBiZSBpbnQzMl90Iik7Citjb25zdGV4cHIgYXV0byBtaW5faTMyX2k2NCA9IGMyX21pbihpbnQzMl90KDMpLCBpbnQ2NF90KDIpKTsKK3N0YXRpY19hc3NlcnQoc3RkOjppc19zYW1lPGRlY2x0eXBlKG1pbl9pMzJfaTY0KSwgY29uc3QgaW50NjRfdD46OnZhbHVlLCAic2hvdWxkIGJlIGludDY0X3QiKTsKK2NvbnN0ZXhwciBhdXRvIG1pbl9pOF9pMzIgPSBjMl9taW4oaW50OF90KDB4ZmYpLCBpbnQzMl90KDB4ZmZmZmZmZmYpKTsKK3N0YXRpY19hc3NlcnQoc3RkOjppc19zYW1lPGRlY2x0eXBlKG1pbl9pOF9pMzIpLCBjb25zdCBpbnQzMl90Pjo6dmFsdWUsICJzaG91bGQgYmUgaW50MzJfdCIpOworCitzdGF0aWNfYXNzZXJ0KGMyX2NvbnN0X2NoZWNrZXI8bWluX2kzMl9pMzI+OjpudW0oKSA9PSAxLCAic2hvdWxkIGJlIDEiKTsKK3N0YXRpY19hc3NlcnQoYzJfY29uc3RfY2hlY2tlcjxtaW5faTMyX2k2ND46Om51bSgpID09IDIsICJzaG91bGQgYmUgMiIpOworc3RhdGljX2Fzc2VydChjMl9jb25zdF9jaGVja2VyPG1pbl9pOF9pMzI+OjpudW0oKSA9PSAweGZmZmZmZmZmLCAic2hvdWxkIGJlIDB4ZmZmZmZmZmYiKTsKKworY29uc3RleHByIGF1dG8gbWluX3UzMl91MzIgPSBjMl9taW4odWludDMyX3QoMSksIHVpbnQzMl90KDIpKTsKK3N0YXRpY19hc3NlcnQoc3RkOjppc19zYW1lPGRlY2x0eXBlKG1pbl91MzJfdTMyKSwgY29uc3QgdWludDMyX3Q+Ojp2YWx1ZSwgInNob3VsZCBiZSB1aW50MzJfdCIpOworY29uc3RleHByIGF1dG8gbWluX3UzMl91NjQgPSBjMl9taW4odWludDMyX3QoMyksIHVpbnQ2NF90KDIpKTsKK3N0YXRpY19hc3NlcnQoc3RkOjppc19zYW1lPGRlY2x0eXBlKG1pbl91MzJfdTY0KSwgY29uc3QgdWludDMyX3Q+Ojp2YWx1ZSwgInNob3VsZCBiZSB1aW50MzJfdCIpOworY29uc3RleHByIGF1dG8gbWluX3UzMl91OCA9IGMyX21pbih1aW50MzJfdCgweGZmZmZmZmZmKSwgdWludDhfdCgweGZmKSk7CitzdGF0aWNfYXNzZXJ0KHN0ZDo6aXNfc2FtZTxkZWNsdHlwZShtaW5fdTMyX3U4KSwgY29uc3QgdWludDhfdD46OnZhbHVlLCAic2hvdWxkIGJlIHVpbnQ4X3QiKTsKKworc3RhdGljX2Fzc2VydChjMl9jb25zdF9jaGVja2VyPG1pbl91MzJfdTMyPjo6bnVtKCkgPT0gMSwgInNob3VsZCBiZSAxIik7CitzdGF0aWNfYXNzZXJ0KGMyX2NvbnN0X2NoZWNrZXI8bWluX3UzMl91NjQ+OjpudW0oKSA9PSAyLCAic2hvdWxkIGJlIDIiKTsKK3N0YXRpY19hc3NlcnQoYzJfY29uc3RfY2hlY2tlcjxtaW5fdTMyX3U4Pjo6bnVtKCkgPT0gMHhmZiwgInNob3VsZCBiZSAweGZmIik7CisKK2NvbnN0ZXhwciBhdXRvIG1heF9pMzJfaTMyID0gYzJfbWF4KGludDMyX3QoMSksIGludDMyX3QoMikpOworc3RhdGljX2Fzc2VydChzdGQ6OmlzX3NhbWU8ZGVjbHR5cGUobWF4X2kzMl9pMzIpLCBjb25zdCBpbnQzMl90Pjo6dmFsdWUsICJzaG91bGQgYmUgaW50MzJfdCIpOworY29uc3RleHByIGF1dG8gbWF4X2kzMl9pNjQgPSBjMl9tYXgoaW50MzJfdCgzKSwgaW50NjRfdCgyKSk7CitzdGF0aWNfYXNzZXJ0KHN0ZDo6aXNfc2FtZTxkZWNsdHlwZShtYXhfaTMyX2k2NCksIGNvbnN0IGludDY0X3Q+Ojp2YWx1ZSwgInNob3VsZCBiZSBpbnQ2NF90Iik7Citjb25zdGV4cHIgYXV0byBtYXhfaThfaTMyID0gYzJfbWF4KGludDhfdCgweGZmKSwgaW50MzJfdCgweGZmZmZmZmZmKSk7CitzdGF0aWNfYXNzZXJ0KHN0ZDo6aXNfc2FtZTxkZWNsdHlwZShtYXhfaThfaTMyKSwgY29uc3QgaW50MzJfdD46OnZhbHVlLCAic2hvdWxkIGJlIGludDMyX3QiKTsKKworc3RhdGljX2Fzc2VydChjMl9jb25zdF9jaGVja2VyPG1heF9pMzJfaTMyPjo6bnVtKCkgPT0gMiwgInNob3VsZCBiZSAyIik7CitzdGF0aWNfYXNzZXJ0KGMyX2NvbnN0X2NoZWNrZXI8bWF4X2kzMl9pNjQ+OjpudW0oKSA9PSAzLCAic2hvdWxkIGJlIDMiKTsKK3N0YXRpY19hc3NlcnQoYzJfY29uc3RfY2hlY2tlcjxtYXhfaThfaTMyPjo6bnVtKCkgPT0gMHhmZmZmZmZmZiwgInNob3VsZCBiZSAweGZmZmZmZmZmIik7CisKK2NvbnN0ZXhwciBhdXRvIG1heF91MzJfdTMyID0gYzJfbWF4KHVpbnQzMl90KDEpLCB1aW50MzJfdCgyKSk7CitzdGF0aWNfYXNzZXJ0KHN0ZDo6aXNfc2FtZTxkZWNsdHlwZShtYXhfdTMyX3UzMiksIGNvbnN0IHVpbnQzMl90Pjo6dmFsdWUsICJzaG91bGQgYmUgdWludDMyX3QiKTsKK2NvbnN0ZXhwciBhdXRvIG1heF91MzJfdTY0ID0gYzJfbWF4KHVpbnQzMl90KDMpLCB1aW50NjRfdCgyKSk7CitzdGF0aWNfYXNzZXJ0KHN0ZDo6aXNfc2FtZTxkZWNsdHlwZShtYXhfdTMyX3U2NCksIGNvbnN0IHVpbnQ2NF90Pjo6dmFsdWUsICJzaG91bGQgYmUgdWludDY0X3QiKTsKK2NvbnN0ZXhwciBhdXRvIG1heF91MzJfdTggPSBjMl9tYXgodWludDMyX3QoMHg3ZmZmZmZmZiksIHVpbnQ4X3QoMHhmZikpOworc3RhdGljX2Fzc2VydChzdGQ6OmlzX3NhbWU8ZGVjbHR5cGUobWF4X3UzMl91OCksIGNvbnN0IHVpbnQzMl90Pjo6dmFsdWUsICJzaG91bGQgYmUgdWludDMyX3QiKTsKKworc3RhdGljX2Fzc2VydChjMl9jb25zdF9jaGVja2VyPG1heF91MzJfdTMyPjo6bnVtKCkgPT0gMiwgInNob3VsZCBiZSAyIik7CitzdGF0aWNfYXNzZXJ0KGMyX2NvbnN0X2NoZWNrZXI8bWF4X3UzMl91NjQ+OjpudW0oKSA9PSAzLCAic2hvdWxkIGJlIDMiKTsKK3N0YXRpY19hc3NlcnQoYzJfY29uc3RfY2hlY2tlcjxtYXhfdTMyX3U4Pjo6bnVtKCkgPT0gMHg3ZmZmZmZmZiwgInNob3VsZCBiZSAweDdmZmZmZmZmIik7CisKKy8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSBDT1VOVEVSIFRFU1RTID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLworCit2b2lkIGMyX2NudHJfc3RhdGljX3Rlc3QoKSB7CisgICAgLy8gc2FuaXR5IGNoZWNrcyBmb3IgY29uc3RydWN0aW9uL2Fzc2lnbm1lbnQKKyAgICBjb25zdGV4cHIgYzJfY250cjMyX3QgYzMyX2EoMTIzKTsKKyAgICBjb25zdGV4cHIgYzJfY250cjY0X3QgYzY0X2EoLTQ1Nik7CisgICAgYzJfY250cjMyX3QgYzMyX2IgX191bnVzZWQgPSBjNjRfYTsKKyAgICAvLyBjMzJfYiA9IDY0LjsgLy8gRElTQUxMT1dFRAorICAgIC8vIGMyX2NudHI2NF90IGM2NF9iID0gYzMyX2E7IC8vIERJU0FMTE9XRUQKKworICAgIC8vIHNhbml0eSBjaGVja3MgZm9yIHNvbWUgY29uc3RleHByIG9wZXJhdG9ycworICAgIHN0YXRpY19hc3NlcnQoc3RkOjppc19zYW1lPGRlY2x0eXBlKGMzMl9hICsgYzY0X2EpLCBkZWNsdHlwZShjNjRfYSArIGMzMl9hKT46OnZhbHVlLCAiKyBzaG91bGQgcmVzdWx0IHNhbWUgdHlwZSIpOworICAgIHN0YXRpY19hc3NlcnQoYzMyX2EgKyBjNjRfYSA9PSBjMl9jbnRyMzJfdCgtMzMzKSwgIjEyMyArIC00NTYgPSAtMzMzIik7CisgICAgc3RhdGljX2Fzc2VydChjMzJfYSArIGMzMl9hID09IGMyX2NudHIzMl90KDI0NiksICIxMjMgKyAxMjMgPSAyNDYiKTsKKyAgICBzdGF0aWNfYXNzZXJ0KGM2NF9hICsgYzMyX2EgPT0gYzJfY250cjMyX3QoLTMzMyksICItNDU2ICsgMTIzID0gNTc5Iik7CisgICAgc3RhdGljX2Fzc2VydChzdGQ6OmlzX3NhbWU8ZGVjbHR5cGUoYzMyX2EgKyAxKSwgZGVjbHR5cGUoMSArIGMzMl9hKT46OnZhbHVlLCAiKyBzaG91bGQgcmVzdWx0IHNhbWUgdHlwZSIpOworICAgIHN0YXRpY19hc3NlcnQoYzMyX2EgKyA0NTYgPT0gYzJfY250cjMyX3QoNTc5KSwgIjEyMyArIDQ1NiA9IDU3OSIpOworICAgIHN0YXRpY19hc3NlcnQoNDU2ICsgYzY0X2EgPT0gYzJfY250cjY0X3QoMCksICI0NTYgKyAtNDU2ID0gMCIpOworICAgIHN0YXRpY19hc3NlcnQoc3RkOjppc19zYW1lPGRlY2x0eXBlKGMzMl9hIC0gYzY0X2EpLCBkZWNsdHlwZShjNjRfYSAtIGMzMl9hKT46OnZhbHVlLCAiLSBzaG91bGQgcmVzdWx0IHNhbWUgdHlwZSIpOworICAgIHN0YXRpY19hc3NlcnQoYzMyX2EgLSBjNjRfYSA9PSBjMl9jbnRyMzJfdCg1NzkpLCAiMTIzIC0gLTQ1NiA9IDU3OSIpOworICAgIHN0YXRpY19hc3NlcnQoYzMyX2EgLSBjMzJfYSA9PSBjMl9jbnRyMzJfdCgwKSwgIjEyMyAtIDEyMyA9IDAiKTsKKyAgICBzdGF0aWNfYXNzZXJ0KGM2NF9hIC0gYzMyX2EgPT0gYzJfY250cjMyX3QoLTU3OSksICItNDU2IC0gMTIzID0gLTU3OSIpOworICAgIHN0YXRpY19hc3NlcnQoc3RkOjppc19zYW1lPGRlY2x0eXBlKGMzMl9hIC0gMSksIGRlY2x0eXBlKDEgLSBjMzJfYSk+Ojp2YWx1ZSwgIi0gc2hvdWxkIHJlc3VsdCBzYW1lIHR5cGUiKTsKKyAgICBzdGF0aWNfYXNzZXJ0KGMzMl9hIC0gNDU2ID09IGMyX2NudHIzMl90KC0zMzMpLCAiMTIzIC0gNDU2ID0gLTMzMyIpOworICAgIHN0YXRpY19hc3NlcnQoNDU2IC0gYzY0X2EgPT0gYzJfY250cjY0X3QoOTEyKSwgIjQ1NiAtIC00NTYgPSA5MTIiKTsKKyAgICBzdGF0aWNfYXNzZXJ0KHN0ZDo6aXNfc2FtZTxkZWNsdHlwZShjMzJfYSAqIGM2NF9hKSwgZGVjbHR5cGUoYzY0X2EgKiBjMzJfYSk+Ojp2YWx1ZSwgIiogc2hvdWxkIHJlc3VsdCBzYW1lIHR5cGUiKTsKKyAgICBzdGF0aWNfYXNzZXJ0KGMzMl9hICogYzY0X2EgPT0gYzJfY250cjMyX3QoLTU2MDg4KSwgIjEyMyAqIC00NTYgPSAtNTYwODgiKTsKKyAgICBzdGF0aWNfYXNzZXJ0KGMzMl9hICogYzMyX2EgPT0gYzJfY250cjMyX3QoMTUxMjkpLCAiMTIzICogMTIzID0gMTUxMjkiKTsKKyAgICBzdGF0aWNfYXNzZXJ0KGM2NF9hICogYzMyX2EgPT0gYzJfY250cjMyX3QoLTU2MDg4KSwgIi00NTYgKiAxMjMgPSAtNTYwODgiKTsKKyAgICBzdGF0aWNfYXNzZXJ0KHN0ZDo6aXNfc2FtZTxkZWNsdHlwZShjMzJfYSAqIDEpLCBkZWNsdHlwZSgxICogYzMyX2EpPjo6dmFsdWUsICIqIHNob3VsZCByZXN1bHQgc2FtZSB0eXBlIik7CisgICAgc3RhdGljX2Fzc2VydChjMzJfYSAqIDQ1NiA9PSBjMl9jbnRyMzJfdCg1NjA4OCksICIxMjMgKiA0NTYgPSA1NjA4OCIpOworICAgIHN0YXRpY19hc3NlcnQoNDU2ICogYzY0X2EgPT0gYzJfY250cjY0X3QoLTIwNzkzNiksICI0NTYgKiAtNDU2ID0gLTIwNzkzNiIpOworCisgICAgc3RhdGljX2Fzc2VydCgoYzMyX2EgPDwgMjZ1KSA9PSBjMl9jbnRyMzJfdCgweEVDMDAwMDAwKSwgIjEyMyA8PCAyNiA9IDB4RUMwMDAwMDAiKTsKKworICAgIC8vIHNhbml0eSBjaGVja3MgZm9yIHVuYXJ5IG9wZXJhdG9ycworICAgIHN0YXRpY19hc3NlcnQoYzJfY250cjMyX3QoMSkgPT0gK2MyX2NudHIzMl90KDEpLCAiMSA9PSArMSIpOworICAgIHN0YXRpY19hc3NlcnQoYzJfY250cjMyX3QoMSkgPT0gLWMyX2NudHIzMl90KC0xKSwgIjEgPT0gLS0xIik7CisKKyAgICAvLyBzYW5pdHkgY2hlY2tzIGZvciBjb21wYXJpc29uCisgICAgdXNpbmcgYzhfdCA9IGMyX2NudHJfdDx1aW50OF90PjsKKyAgICBzdGF0aWNfYXNzZXJ0KGM4X3QoLTB4ODApID4gYzhfdCgweDdmKSwgIjgwID4gN0YiKTsKKyAgICBzdGF0aWNfYXNzZXJ0KGM4X3QoLTB4ODApID49IGM4X3QoMHg3ZiksICI4MCA+PSA3RiIpOworICAgIHN0YXRpY19hc3NlcnQoYzhfdCgweDdmKSA+IGM4X3QoMHg3ZSksICI3RiA+IDdFIik7CisgICAgc3RhdGljX2Fzc2VydChjOF90KDB4N2YpID49IGM4X3QoMHg3ZSksICI3RiA+PSA3RSIpOworICAgIHN0YXRpY19hc3NlcnQoIShjOF90KC0weDgwKSA+IGM4X3QoMCkpLCAiODAgIT4gMDAiKTsKKyAgICBzdGF0aWNfYXNzZXJ0KCEoYzhfdCgtMHg4MCkgPj0gYzhfdCgwKSksICI4MCAhPj0gMDAiKTsKKyAgICBzdGF0aWNfYXNzZXJ0KCEoYzhfdCgtMHg4MCkgPiBjOF90KC0weDgwKSksICI4MCAhPiA4MCIpOworICAgIHN0YXRpY19hc3NlcnQoYzhfdCgtMHg4MCkgPj0gYzhfdCgtMHg4MCksICI4MCA+PSA4MCIpOworCisgICAgc3RhdGljX2Fzc2VydChjOF90KC0weDgwKSA9PSBjOF90KDB4ODApLCAiODAgPT0gODAiKTsKKyAgICBzdGF0aWNfYXNzZXJ0KCEoYzhfdCgtMHg4MCkgPT0gYzhfdCgwKSksICI4MCAhPSAwIik7CisgICAgc3RhdGljX2Fzc2VydChjOF90KC0weDgwKSAhPSBjOF90KDB4N2YpLCAiODAgIT0gN0YiKTsKKyAgICBzdGF0aWNfYXNzZXJ0KCEoYzhfdCgweDdmKSAhPSBjOF90KDB4N2YpKSwgIjgwICE9IDdGIik7CisKKyAgICBzdGF0aWNfYXNzZXJ0KGM4X3QoMHg3ZikgPCBjOF90KC0weDgwKSwgIjdGIDwgODAiKTsKKyAgICBzdGF0aWNfYXNzZXJ0KGM4X3QoMHg3ZikgPD0gYzhfdCgtMHg4MCksICI3RiA8IDgwIik7CisgICAgc3RhdGljX2Fzc2VydChjOF90KDB4N2UpIDwgYzhfdCgweDdmKSwgIjdFIDwgN0YiKTsKKyAgICBzdGF0aWNfYXNzZXJ0KGM4X3QoMHg3ZSkgPD0gYzhfdCgweDdmKSwgIjdFIDwgN0YiKTsKKyAgICBzdGF0aWNfYXNzZXJ0KCEoYzhfdCgtMHg0MCkgPCBjOF90KDB4NDApKSwgIi00MCAhPCA0MCIpOworICAgIHN0YXRpY19hc3NlcnQoIShjOF90KC0weDQwKSA8PSBjOF90KDB4NDApKSwgIi00MCAhPD0gNDAiKTsKKyAgICBzdGF0aWNfYXNzZXJ0KCEoYzhfdCgtMHg0MCkgPCBjOF90KC0weDQwKSksICItNDAgITwgLTQwIik7CisgICAgc3RhdGljX2Fzc2VydChjOF90KC0weDQwKSA8PSBjOF90KC0weDQwKSwgIi00MCA8PSAtNDAiKTsKKworICAgIHN0YXRpY19hc3NlcnQoYzJfY250cjMyX3QoLTB4N2ZmZmZmZmYgLSAxKSA+IGMyX2NudHIzMl90KDB4N2ZmZmZmZmYpLCAiODAgPiA3RiIpOworICAgIHN0YXRpY19hc3NlcnQoIShjMl9jbnRyMzJfdCgtMHg3ZmZmZmZmZiAtIDEpID4gYzJfY250cjMyX3QoMCkpLCAiODAgIT4gMDAiKTsKKyAgICBzdGF0aWNfYXNzZXJ0KGMyX2NudHIzMl90KDEpID09IGMyX2NudHIzMl90KGMyX2NudHI2NF90KDB4MTAwMDAwMDAxdWwpKSwgIjEgPT0gMSIpOworfQorCitjbGFzcyBDMlRlc3QgOiBwdWJsaWMgOjp0ZXN0aW5nOjpUZXN0IHsKK307CisKK1RFU1RfRihDMlRlc3QsIENvdW50ZXJUZXN0KSB7CisgICAgYzJfY250cjMyX3QgYzMyX2EoMTIzKTsKKyAgICBjMl9jbnRyNjRfdCBjNjRfYSgtNDU2KTsKKyAgICBFWFBFQ1RfRVEoYzMyX2EgKz0gMywgYzJfY250cjMyX3QoMTI2KSk7CisgICAgRVhQRUNUX0VRKGMzMl9hICs9IGM2NF9hLCBjMl9jbnRyMzJfdCgtMzMwKSk7CisgICAgRVhQRUNUX0VRKGMzMl9hIDw8PSAydSwgYzJfY250cjMyX3QoLTEzMjApKTsKKyAgICBFWFBFQ1RfRVEoYzY0X2EgKj0gMywgYzJfY250cjY0X3QoLTEzNjgpKTsKKyAgICBFWFBFQ1RfRVEoYzMyX2EgLT0gYzY0X2EsIGMyX2NudHIzMl90KDQ4KSk7CisgICAgRVhQRUNUX0VRKGMzMl9hIC09IDQwLCBjMl9jbnRyMzJfdCg4KSk7CisgICAgRVhQRUNUX0VRKGMzMl9hICo9IGMzMl9hLCBjMl9jbnRyMzJfdCg2NCkpOworfQorCmRpZmYgLS1naXQgYS9tZWRpYS9jb2RlYzIvdGVzdHMvdm5kay9DMkJ1ZmZlclRlc3QuY3BwIGIvbWVkaWEvY29kZWMyL3Rlc3RzL3ZuZGsvQzJCdWZmZXJUZXN0LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43ODA5OTRhCi0tLSAvZGV2L251bGwKKysrIGIvbWVkaWEvY29kZWMyL3Rlc3RzL3ZuZGsvQzJCdWZmZXJUZXN0LmNwcApAQCAtMCwwICsxLDc2OCBAQAorLyoKKyAqIENvcHlyaWdodCAyMDE3IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KKworI2luY2x1ZGUgPGd0ZXN0L2d0ZXN0Lmg+CisKKyNpbmNsdWRlIDxDMkFsbG9jYXRvcklvbi5oPgorI2luY2x1ZGUgPEMyQWxsb2NhdG9yR3JhbGxvYy5oPgorI2luY2x1ZGUgPEMyQnVmZmVyLmg+CisjaW5jbHVkZSA8QzJCdWZmZXJQcml2Lmg+CisjaW5jbHVkZSA8QzJQYXJhbURlZi5oPgorCisjaW5jbHVkZSA8c3lzdGVtL2dyYXBoaWNzLmg+CisKK25hbWVzcGFjZSBhbmRyb2lkIHsKKworY2xhc3MgQzJCdWZmZXJVdGlsc1Rlc3QgOiBwdWJsaWMgOjp0ZXN0aW5nOjpUZXN0IHsKKyAgICBzdGF0aWMgdm9pZCBTdGF0aWNTZWdtZW50VGVzdCgpIHsKKyAgICAgICAgLy8gY29uc3RydWN0b3IKKyAgICAgICAgc3RhdGljX2Fzc2VydChDMlNlZ21lbnQoMTIzdSwgNDU2dSkub2Zmc2V0ID09IDEyMywgIiIpOworICAgICAgICBzdGF0aWNfYXNzZXJ0KEMyU2VnbWVudCgxMjN1LCA0NTZ1KS5zaXplID09IDQ1NiwgIiIpOworCisgICAgICAgIC8vIGVtcHR5CisgICAgICAgIHN0YXRpY19hc3NlcnQoIUMyU2VnbWVudCgxMjN1LCA0NTZ1KS5pc0VtcHR5KCksICIiKTsKKyAgICAgICAgc3RhdGljX2Fzc2VydChDMlNlZ21lbnQoMTIzdSwgMHUpLmlzRW1wdHkoKSwgIiIpOworCisgICAgICAgIC8vIHZhbGlkCisgICAgICAgIHN0YXRpY19hc3NlcnQoQzJTZWdtZW50KDEyM3UsIDQ1NnUpLmlzVmFsaWQoKSwgIiIpOworICAgICAgICBzdGF0aWNfYXNzZXJ0KEMyU2VnbWVudCgxMjN1LCB+MTIzdSkuaXNWYWxpZCgpLCAiIik7CisgICAgICAgIHN0YXRpY19hc3NlcnQoIUMyU2VnbWVudCgxMjN1LCAxICsgfjEyM3UpLmlzVmFsaWQoKSwgIiIpOworCisgICAgICAgIC8vIGJvb2woKQorICAgICAgICBzdGF0aWNfYXNzZXJ0KEMyU2VnbWVudCgxMjN1LCA0NTZ1KSwgIiIpOworICAgICAgICBzdGF0aWNfYXNzZXJ0KChib29sKUMyU2VnbWVudCgxMjN1LCB+MTIzdSksICIiKTsKKyAgICAgICAgc3RhdGljX2Fzc2VydCghYm9vbChDMlNlZ21lbnQoMTIzdSwgMSArIH4xMjN1KSksICIiKTsKKyAgICAgICAgc3RhdGljX2Fzc2VydCghYm9vbChDMlNlZ21lbnQoMTIzdSwgMCkpLCAiIik7CisKKyAgICAgICAgLy8gIQorICAgICAgICBzdGF0aWNfYXNzZXJ0KCEhQzJTZWdtZW50KDEyM3UsIDQ1NnUpLCAiIik7CisgICAgICAgIHN0YXRpY19hc3NlcnQoISFDMlNlZ21lbnQoMTIzdSwgfjEyM3UpLCAiIik7CisgICAgICAgIHN0YXRpY19hc3NlcnQoIUMyU2VnbWVudCgxMjN1LCAxICsgfjEyM3UpLCAiIik7CisgICAgICAgIHN0YXRpY19hc3NlcnQoIUMyU2VnbWVudCgxMjN1LCAwKSwgIiIpOworCisgICAgICAgIC8vIGNvbnRhaW5zCisgICAgICAgIHN0YXRpY19hc3NlcnQoQzJTZWdtZW50KDEyM3UsIH4xMjN1KS5jb250YWlucyhDMlNlZ21lbnQoMTIzdSwgMCkpLCAiIik7CisgICAgICAgIHN0YXRpY19hc3NlcnQoIUMyU2VnbWVudCgxMjN1LCAxICsgfjEyM3UpLmNvbnRhaW5zKEMyU2VnbWVudCgxMjN1LCAwKSksICIiKTsKKyAgICAgICAgc3RhdGljX2Fzc2VydChDMlNlZ21lbnQoMTIzdSwgfjEyM3UpLmNvbnRhaW5zKEMyU2VnbWVudCgxMjN1LCB+MTIzdSkpLCAiIik7CisgICAgICAgIHN0YXRpY19hc3NlcnQoIUMyU2VnbWVudCgxMjN1LCB+MTIzdSkuY29udGFpbnMoQzJTZWdtZW50KDEyM3UsIDEgKyB+MTIzdSkpLCAiIik7CisgICAgICAgIHN0YXRpY19hc3NlcnQoIUMyU2VnbWVudCgxMjN1LCAxICsgfjEyM3UpLmNvbnRhaW5zKEMyU2VnbWVudCgxMjN1LCAxICsgfjEyM3UpKSwgIiIpOworICAgICAgICBzdGF0aWNfYXNzZXJ0KCFDMlNlZ21lbnQoMTIzdSwgfjEyM3UpLmNvbnRhaW5zKEMyU2VnbWVudCgxMjJ1LCAydSkpLCAiIik7CisgICAgICAgIHN0YXRpY19hc3NlcnQoQzJTZWdtZW50KDEyM3UsIH4xMjN1KS5jb250YWlucyhDMlNlZ21lbnQoMTIzdSwgMnUpKSwgIiIpOworICAgICAgICBzdGF0aWNfYXNzZXJ0KEMyU2VnbWVudCgxMjN1LCAzdSkuY29udGFpbnMoQzJTZWdtZW50KDEyNHUsIDJ1KSksICIiKTsKKyAgICAgICAgc3RhdGljX2Fzc2VydCghQzJTZWdtZW50KDEyM3UsIDN1KS5jb250YWlucyhDMlNlZ21lbnQoMTI1dSwgMnUpKSwgIiIpOworCisgICAgICAgIC8vID09CisgICAgICAgIHN0YXRpY19hc3NlcnQoQzJTZWdtZW50KDEyM3UsIDQ1NnUpID09IEMyU2VnbWVudCgxMjN1LCA0NTZ1KSwgIiIpOworICAgICAgICBzdGF0aWNfYXNzZXJ0KCEoQzJTZWdtZW50KDEyM3UsIDQ1NnUpID09IEMyU2VnbWVudCgxMjN1LCA0NTd1KSksICIiKTsKKyAgICAgICAgc3RhdGljX2Fzc2VydCghKEMyU2VnbWVudCgxMjN1LCA0NTZ1KSA9PSBDMlNlZ21lbnQoMTIzdSwgNDU1dSkpLCAiIik7CisgICAgICAgIHN0YXRpY19hc3NlcnQoIShDMlNlZ21lbnQoMTIzdSwgNDU2dSkgPT0gQzJTZWdtZW50KDEyMnUsIDQ1NnUpKSwgIiIpOworICAgICAgICBzdGF0aWNfYXNzZXJ0KCEoQzJTZWdtZW50KDEyM3UsIDQ1NnUpID09IEMyU2VnbWVudCgxMjR1LCA0NTZ1KSksICIiKTsKKyAgICAgICAgc3RhdGljX2Fzc2VydCghKEMyU2VnbWVudCgxMjN1LCAwdSkgPT0gQzJTZWdtZW50KDEyNHUsIDB1KSksICIiKTsKKyAgICAgICAgc3RhdGljX2Fzc2VydChDMlNlZ21lbnQoMTIzdSwgMHUpID09IEMyU2VnbWVudCgxMjN1LCAwdSksICIiKTsKKyAgICAgICAgc3RhdGljX2Fzc2VydChDMlNlZ21lbnQoMTIzdSwgMSArIH4xMjN1KSA9PSBDMlNlZ21lbnQoMTI0dSwgMSArIH4xMjR1KSwgIiIpOworCisgICAgICAgIC8vICE9CisgICAgICAgIHN0YXRpY19hc3NlcnQoIShDMlNlZ21lbnQoMTIzdSwgNDU2dSkgIT0gQzJTZWdtZW50KDEyM3UsIDQ1NnUpKSwgIiIpOworICAgICAgICBzdGF0aWNfYXNzZXJ0KEMyU2VnbWVudCgxMjN1LCA0NTZ1KSAhPSBDMlNlZ21lbnQoMTIzdSwgNDU3dSksICIiKTsKKyAgICAgICAgc3RhdGljX2Fzc2VydChDMlNlZ21lbnQoMTIzdSwgNDU2dSkgIT0gQzJTZWdtZW50KDEyM3UsIDQ1NXUpLCAiIik7CisgICAgICAgIHN0YXRpY19hc3NlcnQoQzJTZWdtZW50KDEyM3UsIDQ1NnUpICE9IEMyU2VnbWVudCgxMjJ1LCA0NTZ1KSwgIiIpOworICAgICAgICBzdGF0aWNfYXNzZXJ0KEMyU2VnbWVudCgxMjN1LCA0NTZ1KSAhPSBDMlNlZ21lbnQoMTI0dSwgNDU2dSksICIiKTsKKyAgICAgICAgc3RhdGljX2Fzc2VydChDMlNlZ21lbnQoMTIzdSwgMHUpICE9IEMyU2VnbWVudCgxMjR1LCAwdSksICIiKTsKKyAgICAgICAgc3RhdGljX2Fzc2VydCghKEMyU2VnbWVudCgxMjN1LCAwdSkgIT0gQzJTZWdtZW50KDEyM3UsIDB1KSksICIiKTsKKyAgICAgICAgc3RhdGljX2Fzc2VydCghKEMyU2VnbWVudCgxMjN1LCAxICsgfjEyM3UpICE9IEMyU2VnbWVudCgxMjR1LCAxICsgfjEyNHUpKSwgIiIpOworCisgICAgICAgIC8vIDw9CisgICAgICAgIHN0YXRpY19hc3NlcnQoQzJTZWdtZW50KDEyM3UsIDQ1NnUpIDw9IEMyU2VnbWVudCgxMjN1LCA0NTZ1KSwgIiIpOworICAgICAgICBzdGF0aWNfYXNzZXJ0KEMyU2VnbWVudCgxMjN1LCA0NTZ1KSA8PSBDMlNlZ21lbnQoMTIzdSwgNDU3dSksICIiKTsKKyAgICAgICAgc3RhdGljX2Fzc2VydChDMlNlZ21lbnQoMTIzdSwgNDU2dSkgPD0gQzJTZWdtZW50KDEyMnUsIDQ1N3UpLCAiIik7CisgICAgICAgIHN0YXRpY19hc3NlcnQoIShDMlNlZ21lbnQoMTIzdSwgNDU3dSkgPD0gQzJTZWdtZW50KDEyM3UsIDQ1NnUpKSwgIiIpOworICAgICAgICBzdGF0aWNfYXNzZXJ0KCEoQzJTZWdtZW50KDEyMnUsIDQ1N3UpIDw9IEMyU2VnbWVudCgxMjN1LCA0NTZ1KSksICIiKTsKKyAgICAgICAgc3RhdGljX2Fzc2VydCghKEMyU2VnbWVudCgxMjN1LCA0NTd1KSA8PSBDMlNlZ21lbnQoMTI0dSwgNDU3dSkpLCAiIik7CisgICAgICAgIHN0YXRpY19hc3NlcnQoIShDMlNlZ21lbnQoMTIydSwgNDU3dSkgPD0gQzJTZWdtZW50KDEyM3UsIDQ1N3UpKSwgIiIpOworICAgICAgICBzdGF0aWNfYXNzZXJ0KCEoQzJTZWdtZW50KDEyMnUsIDB1KSA8PSBDMlNlZ21lbnQoMTIzdSwgMHUpKSwgIiIpOworICAgICAgICBzdGF0aWNfYXNzZXJ0KEMyU2VnbWVudCgxMjN1LCAwdSkgPD0gQzJTZWdtZW50KDEyMnUsIDF1KSwgIiIpOworICAgICAgICBzdGF0aWNfYXNzZXJ0KEMyU2VnbWVudCgxMjJ1LCAwdSkgPD0gQzJTZWdtZW50KDEyMnUsIDF1KSwgIiIpOworICAgICAgICBzdGF0aWNfYXNzZXJ0KCEoQzJTZWdtZW50KDEyMnUsIH4xMjJ1KSA8PSBDMlNlZ21lbnQoMTIydSwgMSArIH4xMjJ1KSksICIiKTsKKyAgICAgICAgc3RhdGljX2Fzc2VydCghKEMyU2VnbWVudCgxMjJ1LCAxICsgfjEyMnUpIDw9IEMyU2VnbWVudCgxMjJ1LCB+MTIydSkpLCAiIik7CisgICAgICAgIHN0YXRpY19hc3NlcnQoIShDMlNlZ21lbnQoMTIydSwgMSArIH4xMjJ1KSA8PSBDMlNlZ21lbnQoMTIydSwgMSArIH4xMjJ1KSksICIiKTsKKworICAgICAgICAvLyA8CisgICAgICAgIHN0YXRpY19hc3NlcnQoIShDMlNlZ21lbnQoMTIzdSwgNDU2dSkgPCBDMlNlZ21lbnQoMTIzdSwgNDU2dSkpLCAiIik7CisgICAgICAgIHN0YXRpY19hc3NlcnQoQzJTZWdtZW50KDEyM3UsIDQ1NnUpIDwgQzJTZWdtZW50KDEyM3UsIDQ1N3UpLCAiIik7CisgICAgICAgIHN0YXRpY19hc3NlcnQoQzJTZWdtZW50KDEyM3UsIDQ1NnUpIDwgQzJTZWdtZW50KDEyMnUsIDQ1N3UpLCAiIik7CisgICAgICAgIHN0YXRpY19hc3NlcnQoIShDMlNlZ21lbnQoMTIzdSwgNDU3dSkgPCBDMlNlZ21lbnQoMTIzdSwgNDU2dSkpLCAiIik7CisgICAgICAgIHN0YXRpY19hc3NlcnQoIShDMlNlZ21lbnQoMTIydSwgNDU3dSkgPCBDMlNlZ21lbnQoMTIzdSwgNDU2dSkpLCAiIik7CisgICAgICAgIHN0YXRpY19hc3NlcnQoIShDMlNlZ21lbnQoMTIzdSwgNDU3dSkgPCBDMlNlZ21lbnQoMTI0dSwgNDU3dSkpLCAiIik7CisgICAgICAgIHN0YXRpY19hc3NlcnQoIShDMlNlZ21lbnQoMTIydSwgNDU3dSkgPCBDMlNlZ21lbnQoMTIzdSwgNDU3dSkpLCAiIik7CisgICAgICAgIHN0YXRpY19hc3NlcnQoIShDMlNlZ21lbnQoMTIydSwgMHUpIDwgQzJTZWdtZW50KDEyM3UsIDB1KSksICIiKTsKKyAgICAgICAgc3RhdGljX2Fzc2VydChDMlNlZ21lbnQoMTIzdSwgMHUpIDwgQzJTZWdtZW50KDEyMnUsIDF1KSwgIiIpOworICAgICAgICBzdGF0aWNfYXNzZXJ0KEMyU2VnbWVudCgxMjJ1LCAwdSkgPCBDMlNlZ21lbnQoMTIydSwgMXUpLCAiIik7CisgICAgICAgIHN0YXRpY19hc3NlcnQoIShDMlNlZ21lbnQoMTIydSwgfjEyMnUpIDwgQzJTZWdtZW50KDEyMnUsIDEgKyB+MTIydSkpLCAiIik7CisgICAgICAgIHN0YXRpY19hc3NlcnQoIShDMlNlZ21lbnQoMTIydSwgMSArIH4xMjJ1KSA8IEMyU2VnbWVudCgxMjJ1LCB+MTIydSkpLCAiIik7CisgICAgICAgIHN0YXRpY19hc3NlcnQoIShDMlNlZ21lbnQoMTIydSwgMSArIH4xMjJ1KSA8IEMyU2VnbWVudCgxMjJ1LCAxICsgfjEyMnUpKSwgIiIpOworCisgICAgICAgIC8vIDw9CisgICAgICAgIHN0YXRpY19hc3NlcnQoQzJTZWdtZW50KDEyM3UsIDQ1NnUpID49IEMyU2VnbWVudCgxMjN1LCA0NTZ1KSwgIiIpOworICAgICAgICBzdGF0aWNfYXNzZXJ0KEMyU2VnbWVudCgxMjN1LCA0NTd1KSA+PSBDMlNlZ21lbnQoMTIzdSwgNDU2dSksICIiKTsKKyAgICAgICAgc3RhdGljX2Fzc2VydChDMlNlZ21lbnQoMTIydSwgNDU3dSkgPj0gQzJTZWdtZW50KDEyM3UsIDQ1NnUpLCAiIik7CisgICAgICAgIHN0YXRpY19hc3NlcnQoIShDMlNlZ21lbnQoMTIzdSwgNDU2dSkgPj0gQzJTZWdtZW50KDEyM3UsIDQ1N3UpKSwgIiIpOworICAgICAgICBzdGF0aWNfYXNzZXJ0KCEoQzJTZWdtZW50KDEyM3UsIDQ1NnUpID49IEMyU2VnbWVudCgxMjJ1LCA0NTd1KSksICIiKTsKKyAgICAgICAgc3RhdGljX2Fzc2VydCghKEMyU2VnbWVudCgxMjR1LCA0NTd1KSA+PSBDMlNlZ21lbnQoMTIzdSwgNDU3dSkpLCAiIik7CisgICAgICAgIHN0YXRpY19hc3NlcnQoIShDMlNlZ21lbnQoMTIzdSwgNDU3dSkgPj0gQzJTZWdtZW50KDEyMnUsIDQ1N3UpKSwgIiIpOworICAgICAgICBzdGF0aWNfYXNzZXJ0KCEoQzJTZWdtZW50KDEyM3UsIDB1KSA+PSBDMlNlZ21lbnQoMTIydSwgMHUpKSwgIiIpOworICAgICAgICBzdGF0aWNfYXNzZXJ0KEMyU2VnbWVudCgxMjJ1LCAxdSkgPj0gQzJTZWdtZW50KDEyM3UsIDB1KSwgIiIpOworICAgICAgICBzdGF0aWNfYXNzZXJ0KEMyU2VnbWVudCgxMjJ1LCAxdSkgPj0gQzJTZWdtZW50KDEyMnUsIDB1KSwgIiIpOworICAgICAgICBzdGF0aWNfYXNzZXJ0KCEoQzJTZWdtZW50KDEyMnUsIDEgKyB+MTIydSkgPj0gQzJTZWdtZW50KDEyMnUsIH4xMjJ1KSksICIiKTsKKyAgICAgICAgc3RhdGljX2Fzc2VydCghKEMyU2VnbWVudCgxMjJ1LCB+MTIydSkgPj0gQzJTZWdtZW50KDEyMnUsIDEgKyB+MTIydSkpLCAiIik7CisgICAgICAgIHN0YXRpY19hc3NlcnQoIShDMlNlZ21lbnQoMTIydSwgMSArIH4xMjJ1KSA+PSBDMlNlZ21lbnQoMTIydSwgMSArIH4xMjJ1KSksICIiKTsKKworICAgICAgICAvLyA8CisgICAgICAgIHN0YXRpY19hc3NlcnQoIShDMlNlZ21lbnQoMTIzdSwgNDU2dSkgPiBDMlNlZ21lbnQoMTIzdSwgNDU2dSkpLCAiIik7CisgICAgICAgIHN0YXRpY19hc3NlcnQoQzJTZWdtZW50KDEyM3UsIDQ1N3UpID4gQzJTZWdtZW50KDEyM3UsIDQ1NnUpLCAiIik7CisgICAgICAgIHN0YXRpY19hc3NlcnQoQzJTZWdtZW50KDEyMnUsIDQ1N3UpID4gQzJTZWdtZW50KDEyM3UsIDQ1NnUpLCAiIik7CisgICAgICAgIHN0YXRpY19hc3NlcnQoIShDMlNlZ21lbnQoMTIzdSwgNDU2dSkgPiBDMlNlZ21lbnQoMTIzdSwgNDU3dSkpLCAiIik7CisgICAgICAgIHN0YXRpY19hc3NlcnQoIShDMlNlZ21lbnQoMTIzdSwgNDU2dSkgPiBDMlNlZ21lbnQoMTIydSwgNDU3dSkpLCAiIik7CisgICAgICAgIHN0YXRpY19hc3NlcnQoIShDMlNlZ21lbnQoMTI0dSwgNDU3dSkgPiBDMlNlZ21lbnQoMTIzdSwgNDU3dSkpLCAiIik7CisgICAgICAgIHN0YXRpY19hc3NlcnQoIShDMlNlZ21lbnQoMTIzdSwgNDU3dSkgPiBDMlNlZ21lbnQoMTIydSwgNDU3dSkpLCAiIik7CisgICAgICAgIHN0YXRpY19hc3NlcnQoIShDMlNlZ21lbnQoMTIzdSwgMHUpID4gQzJTZWdtZW50KDEyMnUsIDB1KSksICIiKTsKKyAgICAgICAgc3RhdGljX2Fzc2VydChDMlNlZ21lbnQoMTIydSwgMXUpID4gQzJTZWdtZW50KDEyM3UsIDB1KSwgIiIpOworICAgICAgICBzdGF0aWNfYXNzZXJ0KEMyU2VnbWVudCgxMjJ1LCAxdSkgPiBDMlNlZ21lbnQoMTIydSwgMHUpLCAiIik7CisgICAgICAgIHN0YXRpY19hc3NlcnQoIShDMlNlZ21lbnQoMTIydSwgMSArIH4xMjJ1KSA+IEMyU2VnbWVudCgxMjJ1LCB+MTIydSkpLCAiIik7CisgICAgICAgIHN0YXRpY19hc3NlcnQoIShDMlNlZ21lbnQoMTIydSwgfjEyMnUpID4gQzJTZWdtZW50KDEyMnUsIDEgKyB+MTIydSkpLCAiIik7CisgICAgICAgIHN0YXRpY19hc3NlcnQoIShDMlNlZ21lbnQoMTIydSwgMSArIH4xMjJ1KSA+IEMyU2VnbWVudCgxMjJ1LCAxICsgfjEyMnUpKSwgIiIpOworCisgICAgICAgIC8vIGVuZAorICAgICAgICBzdGF0aWNfYXNzZXJ0KEMyU2VnbWVudCgxMjN1LCA0NTZ1KS5lbmQoKSA9PSA1Nzl1LCAiIik7CisgICAgICAgIHN0YXRpY19hc3NlcnQoQzJTZWdtZW50KDEyM3UsIDB1KS5lbmQoKSA9PSAxMjN1LCAiIik7CisgICAgICAgIHN0YXRpY19hc3NlcnQoQzJTZWdtZW50KDEyM3UsIH4xMjN1KS5lbmQoKSA9PSAweGZmZmZmZmZmdSwgIiIpOworICAgICAgICBzdGF0aWNfYXNzZXJ0KEMyU2VnbWVudCgxMjN1LCAxICsgfjEyM3UpLmVuZCgpID09IDB1LCAiIik7CisKKyAgICAgICAgLy8gaW50ZXJzZWN0CisgICAgICAgIHN0YXRpY19hc3NlcnQoQzJTZWdtZW50KDEyM3UsIDQ1NnUpLmludGVyc2VjdChDMlNlZ21lbnQoMTIzdSwgNDU2dSkpID09IEMyU2VnbWVudCgxMjN1LCA0NTZ1KSwgIiIpOworICAgICAgICBzdGF0aWNfYXNzZXJ0KEMyU2VnbWVudCgxMjN1LCA0NTZ1KS5pbnRlcnNlY3QoQzJTZWdtZW50KDEyM3UsIDQ2MHUpKSA9PSBDMlNlZ21lbnQoMTIzdSwgNDU2dSksICIiKTsKKyAgICAgICAgc3RhdGljX2Fzc2VydChDMlNlZ21lbnQoMTIzdSwgNDU2dSkuaW50ZXJzZWN0KEMyU2VnbWVudCgxMjR1LCA0NjB1KSkgPT0gQzJTZWdtZW50KDEyNHUsIDQ1NXUpLCAiIik7CisgICAgICAgIHN0YXRpY19hc3NlcnQoQzJTZWdtZW50KDEyM3UsIDQ1NnUpLmludGVyc2VjdChDMlNlZ21lbnQoNTc5dSwgNDYwdSkpID09IEMyU2VnbWVudCg1Nzl1LCAwdSksICIiKTsKKyAgICAgICAgc3RhdGljX2Fzc2VydChDMlNlZ21lbnQoMTIzdSwgNDU2dSkuaW50ZXJzZWN0KEMyU2VnbWVudCg1ODl1LCA0NjB1KSkgPT0gQzJTZWdtZW50KDU4OXUsIH45dSAvKiAtMTAgKi8pLCAiIik7CisgICAgICAgIHN0YXRpY19hc3NlcnQoQzJTZWdtZW50KDEyM3UsIDQ1NnUpLmludGVyc2VjdChDMlNlZ21lbnQoMTIzdSwgNDU1dSkpID09IEMyU2VnbWVudCgxMjN1LCA0NTV1KSwgIiIpOworICAgICAgICBzdGF0aWNfYXNzZXJ0KEMyU2VnbWVudCgxMjN1LCA0NTZ1KS5pbnRlcnNlY3QoQzJTZWdtZW50KDEyMnUsIDQ1NnUpKSA9PSBDMlNlZ21lbnQoMTIzdSwgNDU1dSksICIiKTsKKyAgICAgICAgc3RhdGljX2Fzc2VydChDMlNlZ21lbnQoMTIzdSwgNDU2dSkuaW50ZXJzZWN0KEMyU2VnbWVudCgwdSwgMTIzdSkpID09IEMyU2VnbWVudCgxMjN1LCAwdSksICIiKTsKKyAgICAgICAgc3RhdGljX2Fzc2VydChDMlNlZ21lbnQoMTIzdSwgNDU2dSkuaW50ZXJzZWN0KEMyU2VnbWVudCgwdSwgMHUpKSA9PSBDMlNlZ21lbnQoMTIzdSwgfjEyMnUgLyogLTEyMyAqLyksICIiKTsKKworICAgICAgICAvLyBub3JtYWxpemUgKGNoYW5nZSBpbnZhbGlkIHNlZ21lbnRzIHRvIGVtcHR5IHNlZ21lbnRzKQorICAgICAgICBzdGF0aWNfYXNzZXJ0KEMyU2VnbWVudCgxMjN1LCA0NTZ1KS5ub3JtYWxpemUoKSA9PSBDMlNlZ21lbnQoMTIzdSwgNDU2dSksICIiKTsKKyAgICAgICAgc3RhdGljX2Fzc2VydChDMlNlZ21lbnQoMTIzdSwgfjEyM3UpLm5vcm1hbGl6ZSgpID09IEMyU2VnbWVudCgxMjN1LCB+MTIzdSksICIiKTsKKyAgICAgICAgc3RhdGljX2Fzc2VydChDMlNlZ21lbnQoMTIzdSwgMSArIH4xMjN1KS5ub3JtYWxpemUoKSA9PSBDMlNlZ21lbnQoMTIzdSwgMHUpLCAiIik7CisKKyAgICAgICAgLy8gbm90ZTogbm9ybWFsaXplIGNhbm5vdCBiZSB1c2VkIHRvIG1ha2UgdGhpcyB3b3JrCisgICAgICAgIHN0YXRpY19hc3NlcnQoQzJTZWdtZW50KDEyM3UsIDQ1NnUpLmludGVyc2VjdChDMlNlZ21lbnQoMTUwdSwgfjE1MHUpKS5ub3JtYWxpemUoKSA9PSBDMlNlZ21lbnQoMTUwdSwgNDI5dSksICIiKTsKKyAgICAgICAgc3RhdGljX2Fzc2VydChDMlNlZ21lbnQoMTIzdSwgNDU2dSkuaW50ZXJzZWN0KEMyU2VnbWVudCgxNTB1LCAxICsgfjE1MHUpKS5ub3JtYWxpemUoKSAhPSBDMlNlZ21lbnQoMTUwdSwgNDI5dSksICIiKTsKKyAgICAgICAgc3RhdGljX2Fzc2VydChDMlNlZ21lbnQoMTIzdSwgNDU2dSkuaW50ZXJzZWN0KEMyU2VnbWVudCgxNTB1LCAxICsgfjE1MHUpKS5ub3JtYWxpemUoKSA9PSBDMlNlZ21lbnQoMTUwdSwgMHUpLCAiIik7CisKKyAgICAgICAgLy8gc2F0dXJhdGUgKGNoYW5nZSBpbnZhbGlkIHNlZ21lbnRzIHRvIGZ1bGwgc2VnbWVudHMgdXAgdG8gbWF4KQorICAgICAgICBzdGF0aWNfYXNzZXJ0KEMyU2VnbWVudCgxMjN1LCA0NTZ1KS5zYXR1cmF0ZSgpID09IEMyU2VnbWVudCgxMjN1LCA0NTZ1KSwgIiIpOworICAgICAgICBzdGF0aWNfYXNzZXJ0KEMyU2VnbWVudCgxMjN1LCB+MTIzdSkuc2F0dXJhdGUoKSA9PSBDMlNlZ21lbnQoMTIzdSwgfjEyM3UpLCAiIik7CisgICAgICAgIHN0YXRpY19hc3NlcnQoQzJTZWdtZW50KDEyM3UsIDEgKyB+MTIzdSkuc2F0dXJhdGUoKSA9PSBDMlNlZ21lbnQoMTIzdSwgfjEyM3UpLCAiIik7CisKKyAgICAgICAgLy8gbm90ZTogc2F0dXJhdGUgY2FuIGJlIHVzZWQgdG8gbWFrZSB0aGlzIHdvcmsgYnV0IG9ubHkgcGFydGlhbGx5CisgICAgICAgIHN0YXRpY19hc3NlcnQoQzJTZWdtZW50KDEyM3UsIDQ1NnUpLmludGVyc2VjdChDMlNlZ21lbnQoMTUwdSwgMSArIH4xNTB1KS5zYXR1cmF0ZSgpKS5ub3JtYWxpemUoKSA9PSBDMlNlZ21lbnQoMTUwdSwgNDI5dSksICIiKTsKKyAgICAgICAgc3RhdGljX2Fzc2VydChDMlNlZ21lbnQoMTIzdSwgNDU2dSkuaW50ZXJzZWN0KEMyU2VnbWVudCgwdSwgMTAwdSkuc2F0dXJhdGUoKSkubm9ybWFsaXplKCkgPT0gQzJTZWdtZW50KDEyM3UsIDB1KSwgIiIpOworICAgICAgICBzdGF0aWNfYXNzZXJ0KEMyU2VnbWVudCgxMjN1LCA0NTZ1KS5pbnRlcnNlY3QoQzJTZWdtZW50KDEwMDB1LCAxMDB1KS5zYXR1cmF0ZSgpKS5ub3JtYWxpemUoKSAhPSBDMlNlZ21lbnQoNTc5dSwgMHUpLCAiIik7CisgICAgICAgIHN0YXRpY19hc3NlcnQoQzJTZWdtZW50KDEyM3UsIDQ1NnUpLmludGVyc2VjdChDMlNlZ21lbnQoMTAwMHUsIDEwMHUpLnNhdHVyYXRlKCkpLm5vcm1hbGl6ZSgpID09IEMyU2VnbWVudCgxMDAwdSwgMHUpLCAiIik7CisKKyAgICB9CisKKyAgICBzdGF0aWMgdm9pZCBTdGF0aWNMaW5lYXJSYW5nZUFuZENhcGFjaXR5VGVzdCgpIHsKKyAgICAgICAgY2xhc3MgVGVzdENhcGFjaXR5IDogcHVibGljIF9DMkxpbmVhckNhcGFjaXR5QXNwZWN0IHsKKyAgICAgICAgICAgIHVzaW5nIF9DMkxpbmVhckNhcGFjaXR5QXNwZWN0OjpfQzJMaW5lYXJDYXBhY2l0eUFzcGVjdDsKKyAgICAgICAgICAgIGZyaWVuZCBjbGFzcyBDMkJ1ZmZlclV0aWxzVGVzdDsKKyAgICAgICAgfTsKKworICAgICAgICBjbGFzcyBUZXN0UmFuZ2UgOiBwdWJsaWMgX0MyTGluZWFyUmFuZ2VBc3BlY3QgeworICAgICAgICAgICAgdXNpbmcgX0MyTGluZWFyUmFuZ2VBc3BlY3Q6Ol9DMkxpbmVhclJhbmdlQXNwZWN0OworICAgICAgICAgICAgZnJpZW5kIGNsYXNzIEMyQnVmZmVyVXRpbHNUZXN0OworICAgICAgICB9OworCisgICAgICAgIC8vIF9DMkxpbmVhckNhcGFjaXR5QXNwZWN0CisgICAgICAgIHN0YXRpY19hc3NlcnQoVGVzdENhcGFjaXR5KDB1KS5jYXBhY2l0eSgpID09IDB1LCAiIik7CisgICAgICAgIGNvbnN0ZXhwciBUZXN0Q2FwYWNpdHkgY2FwKDEyM3UpOworICAgICAgICBzdGF0aWNfYXNzZXJ0KFRlc3RDYXBhY2l0eSgmY2FwKS5jYXBhY2l0eSgpID09IDEyM3UsICIiKTsKKyAgICAgICAgc3RhdGljX2Fzc2VydChUZXN0Q2FwYWNpdHkobnVsbHB0cikuY2FwYWNpdHkoKSA9PSAwdSwgIiIpOworCisgICAgICAgIC8vIF9DMkxpbmVhckNhcGFjaXR5UmFuZ2UKKyAgICAgICAgc3RhdGljX2Fzc2VydChUZXN0UmFuZ2UoJmNhcCkuY2FwYWNpdHkoKSA9PSAxMjN1LCAiIik7CisgICAgICAgIHN0YXRpY19hc3NlcnQoVGVzdFJhbmdlKCZjYXApLm9mZnNldCgpID09IDB1LCAiIik7CisgICAgICAgIHN0YXRpY19hc3NlcnQoVGVzdFJhbmdlKCZjYXApLnNpemUoKSA9PSAxMjN1LCAiIik7CisgICAgICAgIHN0YXRpY19hc3NlcnQoVGVzdFJhbmdlKCZjYXApLmVuZE9mZnNldCgpID09IDEyM3UsICIiKTsKKworICAgICAgICBjb25zdGV4cHIgVGVzdFJhbmdlIHJhbmdlKCZjYXAsIDUwdSwgMTAwdSk7CisKKyAgICAgICAgc3RhdGljX2Fzc2VydChyYW5nZS5jYXBhY2l0eSgpID09IDEyM3UsICIiKTsKKyAgICAgICAgc3RhdGljX2Fzc2VydChyYW5nZS5vZmZzZXQoKSA9PSA1MHUsICIiKTsKKyAgICAgICAgc3RhdGljX2Fzc2VydChyYW5nZS5zaXplKCkgPT0gNzN1LCAiIik7CisgICAgICAgIHN0YXRpY19hc3NlcnQocmFuZ2UuZW5kT2Zmc2V0KCkgPT0gMTIzdSwgIiIpOworCisgICAgICAgIHN0YXRpY19hc3NlcnQoVGVzdFJhbmdlKCZjYXAsIDIwdSwgMzB1KS5jYXBhY2l0eSgpID09IDEyM3UsICIiKTsKKyAgICAgICAgc3RhdGljX2Fzc2VydChUZXN0UmFuZ2UoJmNhcCwgMjB1LCAzMHUpLm9mZnNldCgpID09IDIwdSwgIiIpOworICAgICAgICBzdGF0aWNfYXNzZXJ0KFRlc3RSYW5nZSgmY2FwLCAyMHUsIDMwdSkuc2l6ZSgpID09IDMwdSwgIiIpOworICAgICAgICBzdGF0aWNfYXNzZXJ0KFRlc3RSYW5nZSgmY2FwLCAyMHUsIDMwdSkuZW5kT2Zmc2V0KCkgPT0gNTB1LCAiIik7CisKKyAgICAgICAgc3RhdGljX2Fzc2VydChUZXN0UmFuZ2UoJmNhcCwgMjAwdSwgMzB1KS5jYXBhY2l0eSgpID09IDEyM3UsICIiKTsKKyAgICAgICAgc3RhdGljX2Fzc2VydChUZXN0UmFuZ2UoJmNhcCwgMjAwdSwgMzB1KS5vZmZzZXQoKSA9PSAxMjN1LCAiIik7CisgICAgICAgIHN0YXRpY19hc3NlcnQoVGVzdFJhbmdlKCZjYXAsIDIwMHUsIDMwdSkuc2l6ZSgpID09IDB1LCAiIik7CisgICAgICAgIHN0YXRpY19hc3NlcnQoVGVzdFJhbmdlKCZjYXAsIDIwMHUsIDMwdSkuZW5kT2Zmc2V0KCkgPT0gMTIzdSwgIiIpOworCisgICAgfQorCit9OworCisKK2NsYXNzIEMyQnVmZmVyVGVzdCA6IHB1YmxpYyA6OnRlc3Rpbmc6OlRlc3QgeworcHVibGljOgorICAgIEMyQnVmZmVyVGVzdCgpCisgICAgICAgIDogbUJsb2NrUG9vbElkKEMyQmxvY2tQb29sOjpQTEFURk9STV9TVEFSVCksCisgICAgICAgICAgbUxpbmVhckFsbG9jYXRvcihzdGQ6Om1ha2Vfc2hhcmVkPEMyQWxsb2NhdG9ySW9uPignaScpKSwKKyAgICAgICAgICBtU2l6ZSgwdSksCisgICAgICAgICAgbUFkZHIobnVsbHB0ciksCisgICAgICAgICAgbUdyYXBoaWNBbGxvY2F0b3Ioc3RkOjptYWtlX3NoYXJlZDxDMkFsbG9jYXRvckdyYWxsb2M+KCdnJykpIHsKKyAgICB9CisKKyAgICB+QzJCdWZmZXJUZXN0KCkgPSBkZWZhdWx0OworCisgICAgdm9pZCBhbGxvY2F0ZUxpbmVhcihzaXplX3QgY2FwYWNpdHkpIHsKKyAgICAgICAgYzJfc3RhdHVzX3QgZXJyID0gbUxpbmVhckFsbG9jYXRvci0+bmV3TGluZWFyQWxsb2NhdGlvbigKKyAgICAgICAgICAgICAgICBjYXBhY2l0eSwKKyAgICAgICAgICAgICAgICB7IEMyTWVtb3J5VXNhZ2U6OkNQVV9SRUFELCBDMk1lbW9yeVVzYWdlOjpDUFVfV1JJVEUgfSwKKyAgICAgICAgICAgICAgICAmbUxpbmVhckFsbG9jYXRpb24pOworICAgICAgICBpZiAoZXJyICE9IEMyX09LKSB7CisgICAgICAgICAgICBtTGluZWFyQWxsb2NhdGlvbi5yZXNldCgpOworICAgICAgICAgICAgRkFJTCgpIDw8ICJDMkFsbG9jYXRvcjo6bmV3TGluZWFyQWxsb2NhdGlvbigpIGZhaWxlZDogIiA8PCBlcnI7CisgICAgICAgIH0KKyAgICB9CisKKyAgICB2b2lkIG1hcExpbmVhcihzaXplX3Qgb2Zmc2V0LCBzaXplX3Qgc2l6ZSwgdWludDhfdCAqKmFkZHIpIHsKKyAgICAgICAgQVNTRVJUX1RSVUUobUxpbmVhckFsbG9jYXRpb24pOworICAgICAgICBjMl9zdGF0dXNfdCBlcnIgPSBtTGluZWFyQWxsb2NhdGlvbi0+bWFwKAorICAgICAgICAgICAgICAgIG9mZnNldCwKKyAgICAgICAgICAgICAgICBzaXplLAorICAgICAgICAgICAgICAgIHsgQzJNZW1vcnlVc2FnZTo6Q1BVX1JFQUQsIEMyTWVtb3J5VXNhZ2U6OkNQVV9XUklURSB9LAorICAgICAgICAgICAgICAgIC8vIFRPRE86IGZlbmNlCisgICAgICAgICAgICAgICAgbnVsbHB0ciwKKyAgICAgICAgICAgICAgICAmbUFkZHIpOworICAgICAgICBpZiAoZXJyICE9IEMyX09LKSB7CisgICAgICAgICAgICBtQWRkciA9IG51bGxwdHI7CisgICAgICAgICAgICBGQUlMKCkgPDwgIkMyTGluZWFyQWxsb2NhdGlvbjo6bWFwKCkgZmFpbGVkOiAiIDw8IGVycjsKKyAgICAgICAgfQorICAgICAgICBBU1NFUlRfTkUobnVsbHB0ciwgbUFkZHIpOworICAgICAgICBtU2l6ZSA9IHNpemU7CisgICAgICAgICphZGRyID0gKHVpbnQ4X3QgKiltQWRkcjsKKyAgICB9CisKKyAgICB2b2lkIHVubWFwTGluZWFyKCkgeworICAgICAgICBBU1NFUlRfVFJVRShtTGluZWFyQWxsb2NhdGlvbik7CisgICAgICAgIEFTU0VSVF9ORShudWxscHRyLCBtQWRkcik7CisgICAgICAgIEFTU0VSVF9ORSgwdSwgbVNpemUpOworCisgICAgICAgIC8vIFRPRE86IGZlbmNlCisgICAgICAgIEFTU0VSVF9FUShDMl9PSywgbUxpbmVhckFsbG9jYXRpb24tPnVubWFwKG1BZGRyLCBtU2l6ZSwgbnVsbHB0cikpOworICAgICAgICBtU2l6ZSA9IDB1OworICAgICAgICBtQWRkciA9IG51bGxwdHI7CisgICAgfQorCisgICAgc3RkOjpzaGFyZWRfcHRyPEMyQmxvY2tQb29sPiBtYWtlTGluZWFyQmxvY2tQb29sKCkgeworICAgICAgICByZXR1cm4gc3RkOjptYWtlX3NoYXJlZDxDMlBvb2xlZEJsb2NrUG9vbD4obUxpbmVhckFsbG9jYXRvciwgbUJsb2NrUG9vbElkKyspOworICAgIH0KKworICAgIHZvaWQgYWxsb2NhdGVHcmFwaGljKHVpbnQzMl90IHdpZHRoLCB1aW50MzJfdCBoZWlnaHQpIHsKKyAgICAgICAgYzJfc3RhdHVzX3QgZXJyID0gbUdyYXBoaWNBbGxvY2F0b3ItPm5ld0dyYXBoaWNBbGxvY2F0aW9uKAorICAgICAgICAgICAgICAgIHdpZHRoLAorICAgICAgICAgICAgICAgIGhlaWdodCwKKyAgICAgICAgICAgICAgICBIQUxfUElYRUxfRk9STUFUX1lDQkNSXzQyMF84ODgsCisgICAgICAgICAgICAgICAgeyBDMk1lbW9yeVVzYWdlOjpDUFVfUkVBRCwgQzJNZW1vcnlVc2FnZTo6Q1BVX1dSSVRFIH0sCisgICAgICAgICAgICAgICAgJm1HcmFwaGljQWxsb2NhdGlvbik7CisgICAgICAgIGlmIChlcnIgIT0gQzJfT0spIHsKKyAgICAgICAgICAgIG1HcmFwaGljQWxsb2NhdGlvbi5yZXNldCgpOworICAgICAgICAgICAgRkFJTCgpIDw8ICJDMkFsbG9jYXRvcjo6bmV3R3JhcGhpY0FsbG9jYXRpb24oKSBmYWlsZWQ6ICIgPDwgZXJyOworICAgICAgICB9CisgICAgfQorCisgICAgdm9pZCBtYXBHcmFwaGljKEMyUmVjdCByZWN0LCBDMlBsYW5hckxheW91dCAqbGF5b3V0LCB1aW50OF90ICoqYWRkcikgeworICAgICAgICBBU1NFUlRfVFJVRShtR3JhcGhpY0FsbG9jYXRpb24pOworICAgICAgICBjMl9zdGF0dXNfdCBlcnIgPSBtR3JhcGhpY0FsbG9jYXRpb24tPm1hcCgKKyAgICAgICAgICAgICAgICByZWN0LAorICAgICAgICAgICAgICAgIHsgQzJNZW1vcnlVc2FnZTo6Q1BVX1JFQUQsIEMyTWVtb3J5VXNhZ2U6OkNQVV9XUklURSB9LAorICAgICAgICAgICAgICAgIC8vIFRPRE86IGZlbmNlCisgICAgICAgICAgICAgICAgbnVsbHB0ciwKKyAgICAgICAgICAgICAgICBsYXlvdXQsCisgICAgICAgICAgICAgICAgYWRkcik7CisgICAgICAgIGlmIChlcnIgIT0gQzJfT0spIHsKKyAgICAgICAgICAgIGFkZHJbQzJQbGFuYXJMYXlvdXQ6OlBMQU5FX1ldID0gbnVsbHB0cjsKKyAgICAgICAgICAgIGFkZHJbQzJQbGFuYXJMYXlvdXQ6OlBMQU5FX1VdID0gbnVsbHB0cjsKKyAgICAgICAgICAgIGFkZHJbQzJQbGFuYXJMYXlvdXQ6OlBMQU5FX1ZdID0gbnVsbHB0cjsKKyAgICAgICAgICAgIEZBSUwoKSA8PCAiQzJHcmFwaGljQWxsb2NhdGlvbjo6bWFwKCkgZmFpbGVkOiAiIDw8IGVycjsKKyAgICAgICAgfQorICAgICAgICBtTWFwcGVkUmVjdCA9IHJlY3Q7CisgICAgICAgIG1lbWNweShtQWRkckdyYXBoaWMsIGFkZHIsIHNpemVvZih1aW50OF90KikgKiBDMlBsYW5hckxheW91dDo6TUFYX05VTV9QTEFORVMpOworICAgIH0KKworICAgIHZvaWQgdW5tYXBHcmFwaGljKCkgeworICAgICAgICBBU1NFUlRfVFJVRShtR3JhcGhpY0FsbG9jYXRpb24pOworCisgICAgICAgIC8vIFRPRE86IGZlbmNlCisgICAgICAgIEFTU0VSVF9FUShDMl9PSywgbUdyYXBoaWNBbGxvY2F0aW9uLT51bm1hcChtQWRkckdyYXBoaWMsIG1NYXBwZWRSZWN0LCBudWxscHRyKSk7CisgICAgfQorCisgICAgc3RkOjpzaGFyZWRfcHRyPEMyQmxvY2tQb29sPiBtYWtlR3JhcGhpY0Jsb2NrUG9vbCgpIHsKKyAgICAgICAgcmV0dXJuIHN0ZDo6bWFrZV9zaGFyZWQ8QzJCYXNpY0dyYXBoaWNCbG9ja1Bvb2w+KG1HcmFwaGljQWxsb2NhdG9yKTsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgQzJCbG9ja1Bvb2w6OmxvY2FsX2lkX3QgbUJsb2NrUG9vbElkOworICAgIHN0ZDo6c2hhcmVkX3B0cjxDMkFsbG9jYXRvcj4gbUxpbmVhckFsbG9jYXRvcjsKKyAgICBzdGQ6OnNoYXJlZF9wdHI8QzJMaW5lYXJBbGxvY2F0aW9uPiBtTGluZWFyQWxsb2NhdGlvbjsKKyAgICBzaXplX3QgbVNpemU7CisgICAgdm9pZCAqbUFkZHI7CisgICAgQzJSZWN0IG1NYXBwZWRSZWN0OworICAgIHVpbnQ4X3QqIG1BZGRyR3JhcGhpY1tDMlBsYW5hckxheW91dDo6TUFYX05VTV9QTEFORVNdOworCisgICAgc3RkOjpzaGFyZWRfcHRyPEMyQWxsb2NhdG9yPiBtR3JhcGhpY0FsbG9jYXRvcjsKKyAgICBzdGQ6OnNoYXJlZF9wdHI8QzJHcmFwaGljQWxsb2NhdGlvbj4gbUdyYXBoaWNBbGxvY2F0aW9uOworfTsKKworVEVTVF9GKEMyQnVmZmVyVGVzdCwgTGluZWFyQWxsb2NhdGlvblRlc3QpIHsKKyAgICBjb25zdGV4cHIgc2l6ZV90IGtDYXBhY2l0eSA9IDEwMjR1ICogMTAyNHU7CisKKyAgICBhbGxvY2F0ZUxpbmVhcihrQ2FwYWNpdHkpOworCisgICAgdWludDhfdCAqYWRkciA9IG51bGxwdHI7CisgICAgbWFwTGluZWFyKDB1LCBrQ2FwYWNpdHksICZhZGRyKTsKKyAgICBBU1NFUlRfTkUobnVsbHB0ciwgYWRkcik7CisKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGtDYXBhY2l0eTsgKytpKSB7CisgICAgICAgIGFkZHJbaV0gPSBpICUgMTAwdTsKKyAgICB9CisKKyAgICB1bm1hcExpbmVhcigpOworICAgIGFkZHIgPSBudWxscHRyOworCisgICAgbWFwTGluZWFyKGtDYXBhY2l0eSAvIDMsIGtDYXBhY2l0eSAvIDMsICZhZGRyKTsKKyAgICBBU1NFUlRfTkUobnVsbHB0ciwgYWRkcik7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBrQ2FwYWNpdHkgLyAzOyArK2kpIHsKKyAgICAgICAgQVNTRVJUX0VRKChpICsga0NhcGFjaXR5IC8gMykgJSAxMDAsIGFkZHJbaV0pIDw8ICIgYXQgaSA9ICIgPDwgaTsKKyAgICB9Cit9CisKK1RFU1RfRihDMkJ1ZmZlclRlc3QsIEJsb2NrUG9vbFRlc3QpIHsKKyAgICBjb25zdGV4cHIgc2l6ZV90IGtDYXBhY2l0eSA9IDEwMjR1ICogMTAyNHU7CisKKyAgICBzdGQ6OnNoYXJlZF9wdHI8QzJCbG9ja1Bvb2w+IGJsb2NrUG9vbChtYWtlTGluZWFyQmxvY2tQb29sKCkpOworCisgICAgc3RkOjpzaGFyZWRfcHRyPEMyTGluZWFyQmxvY2s+IGJsb2NrOworICAgIEFTU0VSVF9FUShDMl9PSywgYmxvY2tQb29sLT5mZXRjaExpbmVhckJsb2NrKAorICAgICAgICAgICAga0NhcGFjaXR5LAorICAgICAgICAgICAgeyBDMk1lbW9yeVVzYWdlOjpDUFVfUkVBRCwgQzJNZW1vcnlVc2FnZTo6Q1BVX1dSSVRFIH0sCisgICAgICAgICAgICAmYmxvY2spKTsKKyAgICBBU1NFUlRfVFJVRShibG9jayk7CisKKyAgICBDMkFjcXVpcmFibGU8QzJXcml0ZVZpZXc+IHdyaXRlVmlld0hvbGRlciA9IGJsb2NrLT5tYXAoKTsKKyAgICBDMldyaXRlVmlldyB3cml0ZVZpZXcgPSB3cml0ZVZpZXdIb2xkZXIuZ2V0KCk7CisgICAgQVNTRVJUX0VRKEMyX09LLCB3cml0ZVZpZXcuZXJyb3IoKSk7CisgICAgQVNTRVJUX0VRKGtDYXBhY2l0eSwgd3JpdGVWaWV3LmNhcGFjaXR5KCkpOworICAgIEFTU0VSVF9FUSgwdSwgd3JpdGVWaWV3Lm9mZnNldCgpKTsKKyAgICBBU1NFUlRfRVEoa0NhcGFjaXR5LCB3cml0ZVZpZXcuc2l6ZSgpKTsKKworICAgIHVpbnQ4X3QgKmRhdGEgPSB3cml0ZVZpZXcuZGF0YSgpOworICAgIEFTU0VSVF9ORShudWxscHRyLCBkYXRhKTsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHdyaXRlVmlldy5zaXplKCk7ICsraSkgeworICAgICAgICBkYXRhW2ldID0gaSAlIDEwMHU7CisgICAgfQorCisgICAgd3JpdGVWaWV3LnNldE9mZnNldChrQ2FwYWNpdHkgLyAzKTsKKyAgICBkYXRhID0gd3JpdGVWaWV3LmRhdGEoKTsKKyAgICBBU1NFUlRfTkUobnVsbHB0ciwgZGF0YSk7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCB3cml0ZVZpZXcuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgQVNTRVJUX0VRKChpICsga0NhcGFjaXR5IC8gMykgJSAxMDB1LCBkYXRhW2ldKSA8PCAiIGF0IGkgPSAiIDw8IGkKKyAgICAgICAgICAgIDw8ICI7IGRhdGEgPSAiIDw8IHN0YXRpY19jYXN0PHZvaWQgKj4oZGF0YSk7CisgICAgfQorCisgICAgQzJGZW5jZSBmZW5jZTsKKyAgICBDMkNvbnN0TGluZWFyQmxvY2sgY29uc3RCbG9jayA9IGJsb2NrLT5zaGFyZSgKKyAgICAgICAgICAgIGtDYXBhY2l0eSAvIDMsIGtDYXBhY2l0eSAvIDMsIGZlbmNlKTsKKworICAgIEMyQWNxdWlyYWJsZTxDMlJlYWRWaWV3PiByZWFkVmlld0hvbGRlciA9IGNvbnN0QmxvY2subWFwKCk7CisgICAgQzJSZWFkVmlldyByZWFkVmlldyA9IHJlYWRWaWV3SG9sZGVyLmdldCgpOworICAgIEFTU0VSVF9FUShDMl9PSywgcmVhZFZpZXcuZXJyb3IoKSk7CisgICAgQVNTRVJUX0VRKGtDYXBhY2l0eSAvIDMsIHJlYWRWaWV3LmNhcGFjaXR5KCkpOworCisgICAgLy8gVE9ETzogZmVuY2UKKyAgICBjb25zdCB1aW50OF90ICpjb25zdERhdGEgPSByZWFkVmlldy5kYXRhKCk7CisgICAgQVNTRVJUX05FKG51bGxwdHIsIGNvbnN0RGF0YSk7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCByZWFkVmlldy5jYXBhY2l0eSgpOyArK2kpIHsKKyAgICAgICAgQVNTRVJUX0VRKChpICsga0NhcGFjaXR5IC8gMykgJSAxMDB1LCBjb25zdERhdGFbaV0pIDw8ICIgYXQgaSA9ICIgPDwgaQorICAgICAgICAgICAgICAgIDw8ICI7IGRhdGEgPSAiIDw8IHN0YXRpY19jYXN0PHZvaWQgKj4oZGF0YSkKKyAgICAgICAgICAgICAgICA8PCAiOyBjb25zdERhdGEgPSAiIDw8IHN0YXRpY19jYXN0PGNvbnN0IHZvaWQgKj4oY29uc3REYXRhKTsKKyAgICB9CisKKyAgICByZWFkVmlldyA9IHJlYWRWaWV3LnN1YlZpZXcoMzMzdSwgMTAwdSk7CisgICAgQVNTRVJUX0VRKEMyX09LLCByZWFkVmlldy5lcnJvcigpKTsKKyAgICBBU1NFUlRfRVEoMTAwdSwgcmVhZFZpZXcuY2FwYWNpdHkoKSk7CisKKyAgICBjb25zdERhdGEgPSByZWFkVmlldy5kYXRhKCk7CisgICAgQVNTRVJUX05FKG51bGxwdHIsIGNvbnN0RGF0YSk7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCByZWFkVmlldy5jYXBhY2l0eSgpOyArK2kpIHsKKyAgICAgICAgQVNTRVJUX0VRKChpICsgMzMzdSArIGtDYXBhY2l0eSAvIDMpICUgMTAwdSwgY29uc3REYXRhW2ldKSA8PCAiIGF0IGkgPSAiIDw8IGk7CisgICAgfQorfQorCit2b2lkIGZpbGxQbGFuZShjb25zdCBDMlJlY3QgcmVjdCwgY29uc3QgQzJQbGFuZUluZm8gaW5mbywgdWludDhfdCAqYWRkciwgdWludDhfdCB2YWx1ZSkgeworICAgIGZvciAodWludDMyX3Qgcm93ID0gMDsgcm93IDwgcmVjdC5oZWlnaHQgLyBpbmZvLnJvd1NhbXBsaW5nOyArK3JvdykgeworICAgICAgICBpbnQzMl90IHJvd09mZnNldCA9IChyb3cgKyByZWN0LnRvcCAvIGluZm8ucm93U2FtcGxpbmcpICogaW5mby5yb3dJbmM7CisgICAgICAgIGZvciAodWludDMyX3QgY29sID0gMDsgY29sIDwgcmVjdC53aWR0aCAvIGluZm8uY29sU2FtcGxpbmc7ICsrY29sKSB7CisgICAgICAgICAgICBpbnQzMl90IGNvbE9mZnNldCA9IChjb2wgKyByZWN0LmxlZnQgLyBpbmZvLmNvbFNhbXBsaW5nKSAqIGluZm8uY29sSW5jOworICAgICAgICAgICAgYWRkcltyb3dPZmZzZXQgKyBjb2xPZmZzZXRdID0gdmFsdWU7CisgICAgICAgIH0KKyAgICB9Cit9CisKK2Jvb2wgdmVyaWZ5UGxhbmUoY29uc3QgQzJSZWN0IHJlY3QsIGNvbnN0IEMyUGxhbmVJbmZvIGluZm8sIGNvbnN0IHVpbnQ4X3QgKmFkZHIsIHVpbnQ4X3QgdmFsdWUpIHsKKyAgICBmb3IgKHVpbnQzMl90IHJvdyA9IDA7IHJvdyA8IHJlY3QuaGVpZ2h0IC8gaW5mby5yb3dTYW1wbGluZzsgKytyb3cpIHsKKyAgICAgICAgaW50MzJfdCByb3dPZmZzZXQgPSAocm93ICsgcmVjdC50b3AgLyBpbmZvLnJvd1NhbXBsaW5nKSAqIGluZm8ucm93SW5jOworICAgICAgICBmb3IgKHVpbnQzMl90IGNvbCA9IDA7IGNvbCA8IHJlY3Qud2lkdGggLyBpbmZvLmNvbFNhbXBsaW5nOyArK2NvbCkgeworICAgICAgICAgICAgaW50MzJfdCBjb2xPZmZzZXQgPSAoY29sICsgcmVjdC5sZWZ0IC8gaW5mby5jb2xTYW1wbGluZykgKiBpbmZvLmNvbEluYzsKKyAgICAgICAgICAgIGlmIChhZGRyW3Jvd09mZnNldCArIGNvbE9mZnNldF0gIT0gdmFsdWUpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisgICAgcmV0dXJuIHRydWU7Cit9CisKK1RFU1RfRihDMkJ1ZmZlclRlc3QsIEdyYXBoaWNBbGxvY2F0aW9uVGVzdCkgeworICAgIGNvbnN0ZXhwciB1aW50MzJfdCBrV2lkdGggPSAzMjA7CisgICAgY29uc3RleHByIHVpbnQzMl90IGtIZWlnaHQgPSAyNDA7CisKKyAgICBhbGxvY2F0ZUdyYXBoaWMoa1dpZHRoLCBrSGVpZ2h0KTsKKworICAgIHVpbnQ4X3QgKmFkZHJbQzJQbGFuYXJMYXlvdXQ6Ok1BWF9OVU1fUExBTkVTXTsKKyAgICBDMlJlY3QgcmVjdChrV2lkdGgsIGtIZWlnaHQpOworICAgIEMyUGxhbmFyTGF5b3V0IGxheW91dDsKKyAgICBtYXBHcmFwaGljKHJlY3QsICZsYXlvdXQsIGFkZHIpOworICAgIEFTU0VSVF9ORShudWxscHRyLCBhZGRyW0MyUGxhbmFyTGF5b3V0OjpQTEFORV9ZXSk7CisgICAgQVNTRVJUX05FKG51bGxwdHIsIGFkZHJbQzJQbGFuYXJMYXlvdXQ6OlBMQU5FX1VdKTsKKyAgICBBU1NFUlRfTkUobnVsbHB0ciwgYWRkcltDMlBsYW5hckxheW91dDo6UExBTkVfVl0pOworCisgICAgdWludDhfdCAqeSA9IGFkZHJbQzJQbGFuYXJMYXlvdXQ6OlBMQU5FX1ldOworICAgIEMyUGxhbmVJbmZvIHlJbmZvID0gbGF5b3V0LnBsYW5lc1tDMlBsYW5hckxheW91dDo6UExBTkVfWV07CisgICAgdWludDhfdCAqdSA9IGFkZHJbQzJQbGFuYXJMYXlvdXQ6OlBMQU5FX1VdOworICAgIEMyUGxhbmVJbmZvIHVJbmZvID0gbGF5b3V0LnBsYW5lc1tDMlBsYW5hckxheW91dDo6UExBTkVfVV07CisgICAgdWludDhfdCAqdiA9IGFkZHJbQzJQbGFuYXJMYXlvdXQ6OlBMQU5FX1ZdOworICAgIEMyUGxhbmVJbmZvIHZJbmZvID0gbGF5b3V0LnBsYW5lc1tDMlBsYW5hckxheW91dDo6UExBTkVfVl07CisKKyAgICBmaWxsUGxhbmUocmVjdCwgeUluZm8sIHksIDApOworICAgIGZpbGxQbGFuZShyZWN0LCB1SW5mbywgdSwgMCk7CisgICAgZmlsbFBsYW5lKHJlY3QsIHZJbmZvLCB2LCAwKTsKKyAgICBmaWxsUGxhbmUoQzJSZWN0KGtXaWR0aCAvIDIsIGtIZWlnaHQgLyAyKS5hdChrV2lkdGggLyA0LCBrSGVpZ2h0IC8gNCksIHlJbmZvLCB5LCAweDEyKTsKKyAgICBmaWxsUGxhbmUoQzJSZWN0KGtXaWR0aCAvIDIsIGtIZWlnaHQgLyAyKS5hdChrV2lkdGggLyA0LCBrSGVpZ2h0IC8gNCksIHVJbmZvLCB1LCAweDM0KTsKKyAgICBmaWxsUGxhbmUoQzJSZWN0KGtXaWR0aCAvIDIsIGtIZWlnaHQgLyAyKS5hdChrV2lkdGggLyA0LCBrSGVpZ2h0IC8gNCksIHZJbmZvLCB2LCAweDU2KTsKKworICAgIHVubWFwR3JhcGhpYygpOworCisgICAgbWFwR3JhcGhpYyhyZWN0LCAmbGF5b3V0LCBhZGRyKTsKKyAgICBBU1NFUlRfTkUobnVsbHB0ciwgYWRkcltDMlBsYW5hckxheW91dDo6UExBTkVfWV0pOworICAgIEFTU0VSVF9ORShudWxscHRyLCBhZGRyW0MyUGxhbmFyTGF5b3V0OjpQTEFORV9VXSk7CisgICAgQVNTRVJUX05FKG51bGxwdHIsIGFkZHJbQzJQbGFuYXJMYXlvdXQ6OlBMQU5FX1ZdKTsKKworICAgIHkgPSBhZGRyW0MyUGxhbmFyTGF5b3V0OjpQTEFORV9ZXTsKKyAgICB5SW5mbyA9IGxheW91dC5wbGFuZXNbQzJQbGFuYXJMYXlvdXQ6OlBMQU5FX1ldOworICAgIHUgPSBhZGRyW0MyUGxhbmFyTGF5b3V0OjpQTEFORV9VXTsKKyAgICB1SW5mbyA9IGxheW91dC5wbGFuZXNbQzJQbGFuYXJMYXlvdXQ6OlBMQU5FX1VdOworICAgIHYgPSBhZGRyW0MyUGxhbmFyTGF5b3V0OjpQTEFORV9WXTsKKyAgICB2SW5mbyA9IGxheW91dC5wbGFuZXNbQzJQbGFuYXJMYXlvdXQ6OlBMQU5FX1ZdOworCisgICAgQVNTRVJUX1RSVUUodmVyaWZ5UGxhbmUoQzJSZWN0KGtXaWR0aCAvIDIsIGtIZWlnaHQgLyAyKS5hdChrV2lkdGggLyA0LCBrSGVpZ2h0IC8gNCksIHlJbmZvLCB5LCAweDEyKSk7CisgICAgQVNTRVJUX1RSVUUodmVyaWZ5UGxhbmUoQzJSZWN0KGtXaWR0aCAvIDIsIGtIZWlnaHQgLyAyKS5hdChrV2lkdGggLyA0LCBrSGVpZ2h0IC8gNCksIHVJbmZvLCB1LCAweDM0KSk7CisgICAgQVNTRVJUX1RSVUUodmVyaWZ5UGxhbmUoQzJSZWN0KGtXaWR0aCAvIDIsIGtIZWlnaHQgLyAyKS5hdChrV2lkdGggLyA0LCBrSGVpZ2h0IC8gNCksIHZJbmZvLCB2LCAweDU2KSk7CisgICAgQVNTRVJUX1RSVUUodmVyaWZ5UGxhbmUoeyBrV2lkdGgsIGtIZWlnaHQgLyA0IH0sIHlJbmZvLCB5LCAwKSk7CisgICAgQVNTRVJUX1RSVUUodmVyaWZ5UGxhbmUoeyBrV2lkdGgsIGtIZWlnaHQgLyA0IH0sIHVJbmZvLCB1LCAwKSk7CisgICAgQVNTRVJUX1RSVUUodmVyaWZ5UGxhbmUoeyBrV2lkdGgsIGtIZWlnaHQgLyA0IH0sIHZJbmZvLCB2LCAwKSk7CisgICAgQVNTRVJUX1RSVUUodmVyaWZ5UGxhbmUoeyBrV2lkdGggLyA0LCBrSGVpZ2h0IH0sIHlJbmZvLCB5LCAwKSk7CisgICAgQVNTRVJUX1RSVUUodmVyaWZ5UGxhbmUoeyBrV2lkdGggLyA0LCBrSGVpZ2h0IH0sIHVJbmZvLCB1LCAwKSk7CisgICAgQVNTRVJUX1RSVUUodmVyaWZ5UGxhbmUoeyBrV2lkdGggLyA0LCBrSGVpZ2h0IH0sIHZJbmZvLCB2LCAwKSk7Cit9CisKK1RFU1RfRihDMkJ1ZmZlclRlc3QsIEdyYXBoaWNCbG9ja1Bvb2xUZXN0KSB7CisgICAgY29uc3RleHByIHVpbnQzMl90IGtXaWR0aCA9IDMyMDsKKyAgICBjb25zdGV4cHIgdWludDMyX3Qga0hlaWdodCA9IDI0MDsKKworICAgIHN0ZDo6c2hhcmVkX3B0cjxDMkJsb2NrUG9vbD4gYmxvY2tQb29sKG1ha2VHcmFwaGljQmxvY2tQb29sKCkpOworCisgICAgc3RkOjpzaGFyZWRfcHRyPEMyR3JhcGhpY0Jsb2NrPiBibG9jazsKKyAgICBBU1NFUlRfRVEoQzJfT0ssIGJsb2NrUG9vbC0+ZmV0Y2hHcmFwaGljQmxvY2soCisgICAgICAgICAgICBrV2lkdGgsCisgICAgICAgICAgICBrSGVpZ2h0LAorICAgICAgICAgICAgSEFMX1BJWEVMX0ZPUk1BVF9ZQ0JDUl80MjBfODg4LAorICAgICAgICAgICAgeyBDMk1lbW9yeVVzYWdlOjpDUFVfUkVBRCwgQzJNZW1vcnlVc2FnZTo6Q1BVX1dSSVRFIH0sCisgICAgICAgICAgICAmYmxvY2spKTsKKyAgICBBU1NFUlRfVFJVRShibG9jayk7CisKKyAgICBDMkFjcXVpcmFibGU8QzJHcmFwaGljVmlldz4gZ3JhcGhpY1ZpZXdIb2xkZXIgPSBibG9jay0+bWFwKCk7CisgICAgQzJHcmFwaGljVmlldyBncmFwaGljVmlldyA9IGdyYXBoaWNWaWV3SG9sZGVyLmdldCgpOworICAgIEFTU0VSVF9FUShDMl9PSywgZ3JhcGhpY1ZpZXcuZXJyb3IoKSk7CisgICAgQVNTRVJUX0VRKGtXaWR0aCwgZ3JhcGhpY1ZpZXcud2lkdGgoKSk7CisgICAgQVNTRVJUX0VRKGtIZWlnaHQsIGdyYXBoaWNWaWV3LmhlaWdodCgpKTsKKworICAgIHVpbnQ4X3QgKmNvbnN0ICpkYXRhID0gZ3JhcGhpY1ZpZXcuZGF0YSgpOworICAgIEMyUGxhbmFyTGF5b3V0IGxheW91dCA9IGdyYXBoaWNWaWV3LmxheW91dCgpOworICAgIEFTU0VSVF9ORShudWxscHRyLCBkYXRhKTsKKworICAgIHVpbnQ4X3QgKnkgPSBkYXRhW0MyUGxhbmFyTGF5b3V0OjpQTEFORV9ZXTsKKyAgICBDMlBsYW5lSW5mbyB5SW5mbyA9IGxheW91dC5wbGFuZXNbQzJQbGFuYXJMYXlvdXQ6OlBMQU5FX1ldOworICAgIHVpbnQ4X3QgKnUgPSBkYXRhW0MyUGxhbmFyTGF5b3V0OjpQTEFORV9VXTsKKyAgICBDMlBsYW5lSW5mbyB1SW5mbyA9IGxheW91dC5wbGFuZXNbQzJQbGFuYXJMYXlvdXQ6OlBMQU5FX1VdOworICAgIHVpbnQ4X3QgKnYgPSBkYXRhW0MyUGxhbmFyTGF5b3V0OjpQTEFORV9WXTsKKyAgICBDMlBsYW5lSW5mbyB2SW5mbyA9IGxheW91dC5wbGFuZXNbQzJQbGFuYXJMYXlvdXQ6OlBMQU5FX1ZdOworCisgICAgZmlsbFBsYW5lKHsga1dpZHRoLCBrSGVpZ2h0IH0sIHlJbmZvLCB5LCAwKTsKKyAgICBmaWxsUGxhbmUoeyBrV2lkdGgsIGtIZWlnaHQgfSwgdUluZm8sIHUsIDApOworICAgIGZpbGxQbGFuZSh7IGtXaWR0aCwga0hlaWdodCB9LCB2SW5mbywgdiwgMCk7CisgICAgZmlsbFBsYW5lKEMyUmVjdChrV2lkdGggLyAyLCBrSGVpZ2h0IC8gMikuYXQoa1dpZHRoIC8gNCwga0hlaWdodCAvIDQpLCB5SW5mbywgeSwgMHgxMik7CisgICAgZmlsbFBsYW5lKEMyUmVjdChrV2lkdGggLyAyLCBrSGVpZ2h0IC8gMikuYXQoa1dpZHRoIC8gNCwga0hlaWdodCAvIDQpLCB1SW5mbywgdSwgMHgzNCk7CisgICAgZmlsbFBsYW5lKEMyUmVjdChrV2lkdGggLyAyLCBrSGVpZ2h0IC8gMikuYXQoa1dpZHRoIC8gNCwga0hlaWdodCAvIDQpLCB2SW5mbywgdiwgMHg1Nik7CisKKyAgICBDMkZlbmNlIGZlbmNlOworICAgIEMyQ29uc3RHcmFwaGljQmxvY2sgY29uc3RCbG9jayA9IGJsb2NrLT5zaGFyZShDMlJlY3Qoa1dpZHRoLCBrSGVpZ2h0KSwgZmVuY2UpOworICAgIGJsb2NrLnJlc2V0KCk7CisKKyAgICBDMkFjcXVpcmFibGU8Y29uc3QgQzJHcmFwaGljVmlldz4gY29uc3RWaWV3SG9sZGVyID0gY29uc3RCbG9jay5tYXAoKTsKKyAgICBjb25zdCBDMkdyYXBoaWNWaWV3IGNvbnN0R3JhcGhpY1ZpZXcgPSBjb25zdFZpZXdIb2xkZXIuZ2V0KCk7CisgICAgQVNTRVJUX0VRKEMyX09LLCBjb25zdEdyYXBoaWNWaWV3LmVycm9yKCkpOworICAgIEFTU0VSVF9FUShrV2lkdGgsIGNvbnN0R3JhcGhpY1ZpZXcud2lkdGgoKSk7CisgICAgQVNTRVJUX0VRKGtIZWlnaHQsIGNvbnN0R3JhcGhpY1ZpZXcuaGVpZ2h0KCkpOworCisgICAgY29uc3QgdWludDhfdCAqY29uc3QgKmNvbnN0RGF0YSA9IGNvbnN0R3JhcGhpY1ZpZXcuZGF0YSgpOworICAgIGxheW91dCA9IGdyYXBoaWNWaWV3LmxheW91dCgpOworICAgIEFTU0VSVF9ORShudWxscHRyLCBjb25zdERhdGEpOworCisgICAgY29uc3QgdWludDhfdCAqY3kgPSBjb25zdERhdGFbQzJQbGFuYXJMYXlvdXQ6OlBMQU5FX1ldOworICAgIHlJbmZvID0gbGF5b3V0LnBsYW5lc1tDMlBsYW5hckxheW91dDo6UExBTkVfWV07CisgICAgY29uc3QgdWludDhfdCAqY3UgPSBjb25zdERhdGFbQzJQbGFuYXJMYXlvdXQ6OlBMQU5FX1VdOworICAgIHVJbmZvID0gbGF5b3V0LnBsYW5lc1tDMlBsYW5hckxheW91dDo6UExBTkVfVV07CisgICAgY29uc3QgdWludDhfdCAqY3YgPSBjb25zdERhdGFbQzJQbGFuYXJMYXlvdXQ6OlBMQU5FX1ZdOworICAgIHZJbmZvID0gbGF5b3V0LnBsYW5lc1tDMlBsYW5hckxheW91dDo6UExBTkVfVl07CisKKyAgICBBU1NFUlRfVFJVRSh2ZXJpZnlQbGFuZShDMlJlY3Qoa1dpZHRoIC8gMiwga0hlaWdodCAvIDIpLmF0KGtXaWR0aCAvIDQsIGtIZWlnaHQgLyA0KSwgeUluZm8sIGN5LCAweDEyKSk7CisgICAgQVNTRVJUX1RSVUUodmVyaWZ5UGxhbmUoQzJSZWN0KGtXaWR0aCAvIDIsIGtIZWlnaHQgLyAyKS5hdChrV2lkdGggLyA0LCBrSGVpZ2h0IC8gNCksIHVJbmZvLCBjdSwgMHgzNCkpOworICAgIEFTU0VSVF9UUlVFKHZlcmlmeVBsYW5lKEMyUmVjdChrV2lkdGggLyAyLCBrSGVpZ2h0IC8gMikuYXQoa1dpZHRoIC8gNCwga0hlaWdodCAvIDQpLCB2SW5mbywgY3YsIDB4NTYpKTsKKyAgICBBU1NFUlRfVFJVRSh2ZXJpZnlQbGFuZSh7IGtXaWR0aCwga0hlaWdodCAvIDQgfSwgeUluZm8sIGN5LCAwKSk7CisgICAgQVNTRVJUX1RSVUUodmVyaWZ5UGxhbmUoeyBrV2lkdGgsIGtIZWlnaHQgLyA0IH0sIHVJbmZvLCBjdSwgMCkpOworICAgIEFTU0VSVF9UUlVFKHZlcmlmeVBsYW5lKHsga1dpZHRoLCBrSGVpZ2h0IC8gNCB9LCB2SW5mbywgY3YsIDApKTsKKyAgICBBU1NFUlRfVFJVRSh2ZXJpZnlQbGFuZSh7IGtXaWR0aCAvIDQsIGtIZWlnaHQgfSwgeUluZm8sIGN5LCAwKSk7CisgICAgQVNTRVJUX1RSVUUodmVyaWZ5UGxhbmUoeyBrV2lkdGggLyA0LCBrSGVpZ2h0IH0sIHVJbmZvLCBjdSwgMCkpOworICAgIEFTU0VSVF9UUlVFKHZlcmlmeVBsYW5lKHsga1dpZHRoIC8gNCwga0hlaWdodCB9LCB2SW5mbywgY3YsIDApKTsKK30KKworY2xhc3MgQnVmZmVyRGF0YSA6IHB1YmxpYyBDMkJ1ZmZlckRhdGEgeworcHVibGljOgorICAgIGV4cGxpY2l0IEJ1ZmZlckRhdGEoY29uc3Qgc3RkOjp2ZWN0b3I8QzJDb25zdExpbmVhckJsb2NrPiAmYmxvY2tzKSA6IEMyQnVmZmVyRGF0YShibG9ja3MpIHt9CisgICAgZXhwbGljaXQgQnVmZmVyRGF0YShjb25zdCBzdGQ6OnZlY3RvcjxDMkNvbnN0R3JhcGhpY0Jsb2NrPiAmYmxvY2tzKSA6IEMyQnVmZmVyRGF0YShibG9ja3MpIHt9Cit9OworCitjbGFzcyBCdWZmZXIgOiBwdWJsaWMgQzJCdWZmZXIgeworcHVibGljOgorICAgIGV4cGxpY2l0IEJ1ZmZlcihjb25zdCBzdGQ6OnZlY3RvcjxDMkNvbnN0TGluZWFyQmxvY2s+ICZibG9ja3MpIDogQzJCdWZmZXIoYmxvY2tzKSB7fQorICAgIGV4cGxpY2l0IEJ1ZmZlcihjb25zdCBzdGQ6OnZlY3RvcjxDMkNvbnN0R3JhcGhpY0Jsb2NrPiAmYmxvY2tzKSA6IEMyQnVmZmVyKGJsb2Nrcykge30KK307CisKK1RFU1RfRihDMkJ1ZmZlclRlc3QsIEJ1ZmZlckRhdGFUZXN0KSB7CisgICAgc3RkOjpzaGFyZWRfcHRyPEMyQmxvY2tQb29sPiBsaW5lYXJCbG9ja1Bvb2wobWFrZUxpbmVhckJsb2NrUG9vbCgpKTsKKyAgICBzdGQ6OnNoYXJlZF9wdHI8QzJCbG9ja1Bvb2w+IGdyYXBoaWNCbG9ja1Bvb2wobWFrZUdyYXBoaWNCbG9ja1Bvb2woKSk7CisKKyAgICBjb25zdGV4cHIgdWludDMyX3Qga1dpZHRoMSA9IDMyMDsKKyAgICBjb25zdGV4cHIgdWludDMyX3Qga0hlaWdodDEgPSAyNDA7CisgICAgY29uc3RleHByIEMyUmVjdCBrQ3JvcDEoa1dpZHRoMSwga0hlaWdodDEpOworICAgIGNvbnN0ZXhwciB1aW50MzJfdCBrV2lkdGgyID0gMTc2OworICAgIGNvbnN0ZXhwciB1aW50MzJfdCBrSGVpZ2h0MiA9IDE0NDsKKyAgICBjb25zdGV4cHIgQzJSZWN0IGtDcm9wMihrV2lkdGgyLCBrSGVpZ2h0Mik7CisgICAgY29uc3RleHByIHNpemVfdCBrQ2FwYWNpdHkxID0gMTAyNHU7CisgICAgY29uc3RleHByIHNpemVfdCBrQ2FwYWNpdHkyID0gMjA0OHU7CisKKyAgICBzdGQ6OnNoYXJlZF9wdHI8QzJMaW5lYXJCbG9jaz4gbGluZWFyQmxvY2sxOworICAgIHN0ZDo6c2hhcmVkX3B0cjxDMkxpbmVhckJsb2NrPiBsaW5lYXJCbG9jazI7CisgICAgQVNTRVJUX0VRKEMyX09LLCBsaW5lYXJCbG9ja1Bvb2wtPmZldGNoTGluZWFyQmxvY2soCisgICAgICAgICAgICBrQ2FwYWNpdHkxLAorICAgICAgICAgICAgeyBDMk1lbW9yeVVzYWdlOjpDUFVfUkVBRCwgQzJNZW1vcnlVc2FnZTo6Q1BVX1dSSVRFIH0sCisgICAgICAgICAgICAmbGluZWFyQmxvY2sxKSk7CisgICAgQVNTRVJUX0VRKEMyX09LLCBsaW5lYXJCbG9ja1Bvb2wtPmZldGNoTGluZWFyQmxvY2soCisgICAgICAgICAgICBrQ2FwYWNpdHkyLAorICAgICAgICAgICAgeyBDMk1lbW9yeVVzYWdlOjpDUFVfUkVBRCwgQzJNZW1vcnlVc2FnZTo6Q1BVX1dSSVRFIH0sCisgICAgICAgICAgICAmbGluZWFyQmxvY2syKSk7CisgICAgc3RkOjpzaGFyZWRfcHRyPEMyR3JhcGhpY0Jsb2NrPiBncmFwaGljQmxvY2sxOworICAgIHN0ZDo6c2hhcmVkX3B0cjxDMkdyYXBoaWNCbG9jaz4gZ3JhcGhpY0Jsb2NrMjsKKyAgICBBU1NFUlRfRVEoQzJfT0ssIGdyYXBoaWNCbG9ja1Bvb2wtPmZldGNoR3JhcGhpY0Jsb2NrKAorICAgICAgICAgICAga1dpZHRoMSwKKyAgICAgICAgICAgIGtIZWlnaHQxLAorICAgICAgICAgICAgSEFMX1BJWEVMX0ZPUk1BVF9ZQ0JDUl80MjBfODg4LAorICAgICAgICAgICAgeyBDMk1lbW9yeVVzYWdlOjpDUFVfUkVBRCwgQzJNZW1vcnlVc2FnZTo6Q1BVX1dSSVRFIH0sCisgICAgICAgICAgICAmZ3JhcGhpY0Jsb2NrMSkpOworICAgIEFTU0VSVF9FUShDMl9PSywgZ3JhcGhpY0Jsb2NrUG9vbC0+ZmV0Y2hHcmFwaGljQmxvY2soCisgICAgICAgICAgICBrV2lkdGgyLAorICAgICAgICAgICAga0hlaWdodDIsCisgICAgICAgICAgICBIQUxfUElYRUxfRk9STUFUX1lDQkNSXzQyMF84ODgsCisgICAgICAgICAgICB7IEMyTWVtb3J5VXNhZ2U6OkNQVV9SRUFELCBDMk1lbW9yeVVzYWdlOjpDUFVfV1JJVEUgfSwKKyAgICAgICAgICAgICZncmFwaGljQmxvY2syKSk7CisKKyAgICBzdGQ6OnNoYXJlZF9wdHI8QzJCdWZmZXJEYXRhPiBkYXRhKG5ldyBCdWZmZXJEYXRhKHsgbGluZWFyQmxvY2sxLT5zaGFyZSgwLCBrQ2FwYWNpdHkxLCBDMkZlbmNlKCkpIH0pKTsKKyAgICBFWFBFQ1RfRVEoQzJCdWZmZXJEYXRhOjpMSU5FQVIsIGRhdGEtPnR5cGUoKSk7CisgICAgQVNTRVJUX0VRKDF1LCBkYXRhLT5saW5lYXJCbG9ja3MoKS5zaXplKCkpOworICAgIEVYUEVDVF9FUShsaW5lYXJCbG9jazEtPmhhbmRsZSgpLCBkYXRhLT5saW5lYXJCbG9ja3MoKS5mcm9udCgpLmhhbmRsZSgpKTsKKyAgICBFWFBFQ1RfVFJVRShkYXRhLT5ncmFwaGljQmxvY2tzKCkuZW1wdHkoKSk7CisKKyAgICBkYXRhLnJlc2V0KG5ldyBCdWZmZXJEYXRhKHsKKyAgICAgICAgbGluZWFyQmxvY2sxLT5zaGFyZSgwLCBrQ2FwYWNpdHkxLCBDMkZlbmNlKCkpLAorICAgICAgICBsaW5lYXJCbG9jazItPnNoYXJlKDAsIGtDYXBhY2l0eTIsIEMyRmVuY2UoKSksCisgICAgfSkpOworICAgIEVYUEVDVF9FUShDMkJ1ZmZlckRhdGE6OkxJTkVBUl9DSFVOS1MsIGRhdGEtPnR5cGUoKSk7CisgICAgQVNTRVJUX0VRKDJ1LCBkYXRhLT5saW5lYXJCbG9ja3MoKS5zaXplKCkpOworICAgIEVYUEVDVF9FUShsaW5lYXJCbG9jazEtPmhhbmRsZSgpLCBkYXRhLT5saW5lYXJCbG9ja3MoKS5mcm9udCgpLmhhbmRsZSgpKTsKKyAgICBFWFBFQ1RfRVEobGluZWFyQmxvY2syLT5oYW5kbGUoKSwgZGF0YS0+bGluZWFyQmxvY2tzKCkuYmFjaygpLmhhbmRsZSgpKTsKKyAgICBFWFBFQ1RfVFJVRShkYXRhLT5ncmFwaGljQmxvY2tzKCkuZW1wdHkoKSk7CisKKyAgICBkYXRhLnJlc2V0KG5ldyBCdWZmZXJEYXRhKHsgZ3JhcGhpY0Jsb2NrMS0+c2hhcmUoa0Nyb3AxLCBDMkZlbmNlKCkpIH0pKTsKKyAgICBFWFBFQ1RfRVEoQzJCdWZmZXJEYXRhOjpHUkFQSElDLCBkYXRhLT50eXBlKCkpOworICAgIEFTU0VSVF9FUSgxdSwgZGF0YS0+Z3JhcGhpY0Jsb2NrcygpLnNpemUoKSk7CisgICAgRVhQRUNUX0VRKGdyYXBoaWNCbG9jazEtPmhhbmRsZSgpLCBkYXRhLT5ncmFwaGljQmxvY2tzKCkuZnJvbnQoKS5oYW5kbGUoKSk7CisgICAgRVhQRUNUX1RSVUUoZGF0YS0+bGluZWFyQmxvY2tzKCkuZW1wdHkoKSk7CisKKyAgICBkYXRhLnJlc2V0KG5ldyBCdWZmZXJEYXRhKHsKKyAgICAgICAgZ3JhcGhpY0Jsb2NrMS0+c2hhcmUoa0Nyb3AxLCBDMkZlbmNlKCkpLAorICAgICAgICBncmFwaGljQmxvY2syLT5zaGFyZShrQ3JvcDIsIEMyRmVuY2UoKSksCisgICAgfSkpOworICAgIEVYUEVDVF9FUShDMkJ1ZmZlckRhdGE6OkdSQVBISUNfQ0hVTktTLCBkYXRhLT50eXBlKCkpOworICAgIEFTU0VSVF9FUSgydSwgZGF0YS0+Z3JhcGhpY0Jsb2NrcygpLnNpemUoKSk7CisgICAgRVhQRUNUX0VRKGdyYXBoaWNCbG9jazEtPmhhbmRsZSgpLCBkYXRhLT5ncmFwaGljQmxvY2tzKCkuZnJvbnQoKS5oYW5kbGUoKSk7CisgICAgRVhQRUNUX0VRKGdyYXBoaWNCbG9jazItPmhhbmRsZSgpLCBkYXRhLT5ncmFwaGljQmxvY2tzKCkuYmFjaygpLmhhbmRsZSgpKTsKKyAgICBFWFBFQ1RfVFJVRShkYXRhLT5saW5lYXJCbG9ja3MoKS5lbXB0eSgpKTsKK30KKwordm9pZCBEZXN0cm95Q2FsbGJhY2soY29uc3QgQzJCdWZmZXIgKiAvKiBidWYgKi8sIHZvaWQgKmFyZykgeworICAgIHN0ZDo6ZnVuY3Rpb248dm9pZCh2b2lkKT4gKmNiID0gKHN0ZDo6ZnVuY3Rpb248dm9pZCh2b2lkKT4gKilhcmc7CisgICAgKCpjYikoKTsKK30KKworZW51bSA6IHVpbnQzMl90IHsKKyAgICBrUGFyYW1JbmRleE51bWJlcjEsCisgICAga1BhcmFtSW5kZXhOdW1iZXIyLAorfTsKKwordHlwZWRlZiBDMkdsb2JhbFBhcmFtPEMySW5mbywgQzJJbnQzMlZhbHVlLCBrUGFyYW1JbmRleE51bWJlcjE+IEMyTnVtYmVyMUluZm87Cit0eXBlZGVmIEMyR2xvYmFsUGFyYW08QzJJbmZvLCBDMkludDMyVmFsdWUsIGtQYXJhbUluZGV4TnVtYmVyMj4gQzJOdW1iZXIySW5mbzsKKworVEVTVF9GKEMyQnVmZmVyVGVzdCwgQnVmZmVyVGVzdCkgeworICAgIHN0ZDo6c2hhcmVkX3B0cjxDMkJsb2NrUG9vbD4gYWxsb2MobWFrZUxpbmVhckJsb2NrUG9vbCgpKTsKKyAgICBjb25zdGV4cHIgc2l6ZV90IGtDYXBhY2l0eSA9IDEwMjR1OworICAgIHN0ZDo6c2hhcmVkX3B0cjxDMkxpbmVhckJsb2NrPiBibG9jazsKKworICAgIEFTU0VSVF9FUShDMl9PSywgYWxsb2MtPmZldGNoTGluZWFyQmxvY2soCisgICAgICAgICAgICBrQ2FwYWNpdHksCisgICAgICAgICAgICB7IEMyTWVtb3J5VXNhZ2U6OkNQVV9SRUFELCBDMk1lbW9yeVVzYWdlOjpDUFVfV1JJVEUgfSwKKyAgICAgICAgICAgICZibG9jaykpOworCisgICAgc3RkOjphdG9taWNfYm9vbCBkZXN0cm95ZWQoZmFsc2UpOworICAgIHN0ZDo6ZnVuY3Rpb248dm9pZCh2b2lkKT4gYXJnID0gWyZkZXN0cm95ZWRdKCl7IGRlc3Ryb3llZCA9IHRydWU7IH07CisKKyAgICBzdGQ6OnNoYXJlZF9wdHI8QzJCdWZmZXI+IGJ1ZmZlcihuZXcgQnVmZmVyKCB7IGJsb2NrLT5zaGFyZSgwLCBrQ2FwYWNpdHksIEMyRmVuY2UoKSkgfSkpOworICAgIEFTU0VSVF9FUShDMl9PSywgYnVmZmVyLT5yZWdpc3Rlck9uRGVzdHJveU5vdGlmeSgmRGVzdHJveUNhbGxiYWNrLCAmYXJnKSk7CisgICAgRVhQRUNUX0ZBTFNFKGRlc3Ryb3llZCk7CisgICAgQVNTRVJUX0VRKEMyX0RVUExJQ0FURSwgYnVmZmVyLT5yZWdpc3Rlck9uRGVzdHJveU5vdGlmeSgmRGVzdHJveUNhbGxiYWNrLCAmYXJnKSk7CisgICAgYnVmZmVyLnJlc2V0KCk7CisgICAgRVhQRUNUX1RSVUUoZGVzdHJveWVkKTsKKworICAgIGJ1ZmZlci5yZXNldChuZXcgQnVmZmVyKCB7IGJsb2NrLT5zaGFyZSgwLCBrQ2FwYWNpdHksIEMyRmVuY2UoKSkgfSkpOworICAgIGRlc3Ryb3llZCA9IGZhbHNlOworICAgIEFTU0VSVF9FUShDMl9PSywgYnVmZmVyLT5yZWdpc3Rlck9uRGVzdHJveU5vdGlmeSgmRGVzdHJveUNhbGxiYWNrLCAmYXJnKSk7CisgICAgRVhQRUNUX0ZBTFNFKGRlc3Ryb3llZCk7CisgICAgQVNTRVJUX0VRKEMyX05PVF9GT1VORCwgYnVmZmVyLT51bnJlZ2lzdGVyT25EZXN0cm95Tm90aWZ5KCZEZXN0cm95Q2FsbGJhY2ssIG51bGxwdHIpKTsKKyAgICBBU1NFUlRfRVEoQzJfT0ssIGJ1ZmZlci0+dW5yZWdpc3Rlck9uRGVzdHJveU5vdGlmeSgmRGVzdHJveUNhbGxiYWNrLCAmYXJnKSk7CisgICAgRVhQRUNUX0ZBTFNFKGRlc3Ryb3llZCk7CisgICAgQVNTRVJUX0VRKEMyX05PVF9GT1VORCwgYnVmZmVyLT51bnJlZ2lzdGVyT25EZXN0cm95Tm90aWZ5KCZEZXN0cm95Q2FsbGJhY2ssICZhcmcpKTsKKyAgICBidWZmZXIucmVzZXQoKTsKKyAgICBFWFBFQ1RfRkFMU0UoZGVzdHJveWVkKTsKKworICAgIHN0ZDo6c2hhcmVkX3B0cjxDMkluZm8+IGluZm8xKG5ldyBDMk51bWJlcjFJbmZvKDEpKTsKKyAgICBzdGQ6OnNoYXJlZF9wdHI8QzJJbmZvPiBpbmZvMihuZXcgQzJOdW1iZXIySW5mbygyKSk7CisgICAgYnVmZmVyLnJlc2V0KG5ldyBCdWZmZXIoIHsgYmxvY2stPnNoYXJlKDAsIGtDYXBhY2l0eSwgQzJGZW5jZSgpKSB9KSk7CisgICAgRVhQRUNUX1RSVUUoYnVmZmVyLT5pbmZvKCkuZW1wdHkoKSk7CisgICAgRVhQRUNUX0ZBTFNFKGJ1ZmZlci0+aGFzSW5mbyhpbmZvMS0+dHlwZSgpKSk7CisgICAgRVhQRUNUX0ZBTFNFKGJ1ZmZlci0+aGFzSW5mbyhpbmZvMi0+dHlwZSgpKSk7CisKKyAgICBBU1NFUlRfRVEoQzJfT0ssIGJ1ZmZlci0+c2V0SW5mbyhpbmZvMSkpOworICAgIEVYUEVDVF9FUSgxdSwgYnVmZmVyLT5pbmZvKCkuc2l6ZSgpKTsKKyAgICBFWFBFQ1RfRVEoKmluZm8xLCAqYnVmZmVyLT5pbmZvKCkuZnJvbnQoKSk7CisgICAgRVhQRUNUX1RSVUUoYnVmZmVyLT5oYXNJbmZvKGluZm8xLT50eXBlKCkpKTsKKyAgICBFWFBFQ1RfRkFMU0UoYnVmZmVyLT5oYXNJbmZvKGluZm8yLT50eXBlKCkpKTsKKworICAgIEFTU0VSVF9FUShDMl9PSywgYnVmZmVyLT5zZXRJbmZvKGluZm8yKSk7CisgICAgRVhQRUNUX0VRKDJ1LCBidWZmZXItPmluZm8oKS5zaXplKCkpOworICAgIEVYUEVDVF9UUlVFKGJ1ZmZlci0+aGFzSW5mbyhpbmZvMS0+dHlwZSgpKSk7CisgICAgRVhQRUNUX1RSVUUoYnVmZmVyLT5oYXNJbmZvKGluZm8yLT50eXBlKCkpKTsKKworICAgIHN0ZDo6c2hhcmVkX3B0cjxDMkluZm8+IHJlbW92ZWQgPSBidWZmZXItPnJlbW92ZUluZm8oaW5mbzEtPnR5cGUoKSk7CisgICAgQVNTRVJUX1RSVUUocmVtb3ZlZCk7CisgICAgRVhQRUNUX0VRKCpyZW1vdmVkLCAqaW5mbzEpOworICAgIEVYUEVDVF9FUSgxdSwgYnVmZmVyLT5pbmZvKCkuc2l6ZSgpKTsKKyAgICBFWFBFQ1RfRVEoKmluZm8yLCAqYnVmZmVyLT5pbmZvKCkuZnJvbnQoKSk7CisgICAgRVhQRUNUX0ZBTFNFKGJ1ZmZlci0+aGFzSW5mbyhpbmZvMS0+dHlwZSgpKSk7CisgICAgRVhQRUNUX1RSVUUoYnVmZmVyLT5oYXNJbmZvKGluZm8yLT50eXBlKCkpKTsKKworICAgIHJlbW92ZWQgPSBidWZmZXItPnJlbW92ZUluZm8oaW5mbzEtPnR5cGUoKSk7CisgICAgQVNTRVJUX0ZBTFNFKHJlbW92ZWQpOworICAgIEVYUEVDVF9FUSgxdSwgYnVmZmVyLT5pbmZvKCkuc2l6ZSgpKTsKKyAgICBFWFBFQ1RfRkFMU0UoYnVmZmVyLT5oYXNJbmZvKGluZm8xLT50eXBlKCkpKTsKKyAgICBFWFBFQ1RfVFJVRShidWZmZXItPmhhc0luZm8oaW5mbzItPnR5cGUoKSkpOworCisgICAgc3RkOjpzaGFyZWRfcHRyPEMySW5mbz4gaW5mbzMobmV3IEMyTnVtYmVyMkluZm8oMykpOworICAgIEFTU0VSVF9FUShDMl9PSywgYnVmZmVyLT5zZXRJbmZvKGluZm8zKSk7CisgICAgRVhQRUNUX0VRKDF1LCBidWZmZXItPmluZm8oKS5zaXplKCkpOworICAgIEVYUEVDVF9GQUxTRShidWZmZXItPmhhc0luZm8oaW5mbzEtPnR5cGUoKSkpOworICAgIEVYUEVDVF9UUlVFKGJ1ZmZlci0+aGFzSW5mbyhpbmZvMi0+dHlwZSgpKSk7CisKKyAgICByZW1vdmVkID0gYnVmZmVyLT5yZW1vdmVJbmZvKGluZm8yLT50eXBlKCkpOworICAgIEFTU0VSVF9UUlVFKHJlbW92ZWQpOworICAgIEVYUEVDVF9FUSgqaW5mbzMsICpyZW1vdmVkKTsKKyAgICBFWFBFQ1RfVFJVRShidWZmZXItPmluZm8oKS5lbXB0eSgpKTsKKyAgICBFWFBFQ1RfRkFMU0UoYnVmZmVyLT5oYXNJbmZvKGluZm8xLT50eXBlKCkpKTsKKyAgICBFWFBFQ1RfRkFMU0UoYnVmZmVyLT5oYXNJbmZvKGluZm8yLT50eXBlKCkpKTsKK30KKworVEVTVF9GKEMyQnVmZmVyVGVzdCwgTXVsdGlwbGVMaW5lYXJNYXBUZXN0KSB7CisgICAgc3RkOjpzaGFyZWRfcHRyPEMyQmxvY2tQb29sPiBwb29sKG1ha2VMaW5lYXJCbG9ja1Bvb2woKSk7CisgICAgY29uc3RleHByIHNpemVfdCBrQ2FwYWNpdHkgPSA1MjQyODh1OworICAgIGZvciAoaW50IGkgPSAwOyBpIDwgMTAwOyArK2kpIHsKKyAgICAgICAgc3RkOjp2ZWN0b3I8QzJXcml0ZVZpZXc+IHdWaWV3czsKKyAgICAgICAgc3RkOjp2ZWN0b3I8QzJSZWFkVmlldz4gclZpZXdzOworICAgICAgICBmb3IgKGludCBqID0gMDsgaiA8IDE2OyArK2opIHsKKyAgICAgICAgICAgIHN0ZDo6c2hhcmVkX3B0cjxDMkxpbmVhckJsb2NrPiBibG9jazsKKyAgICAgICAgICAgIEFTU0VSVF9FUShDMl9PSywgcG9vbC0+ZmV0Y2hMaW5lYXJCbG9jaygKKyAgICAgICAgICAgICAgICAgICAga0NhcGFjaXR5LAorICAgICAgICAgICAgICAgICAgICB7IEMyTWVtb3J5VXNhZ2U6OkNQVV9SRUFELCBDMk1lbW9yeVVzYWdlOjpDUFVfV1JJVEUgfSwKKyAgICAgICAgICAgICAgICAgICAgJmJsb2NrKSk7CisgICAgICAgICAgICB3Vmlld3MucHVzaF9iYWNrKGJsb2NrLT5tYXAoKS5nZXQoKSk7CisgICAgICAgICAgICBDMkNvbnN0TGluZWFyQmxvY2sgY0Jsb2NrID0gYmxvY2stPnNoYXJlKDAsIGtDYXBhY2l0eSAvIDIsIEMyRmVuY2UoKSk7CisgICAgICAgICAgICByVmlld3MucHVzaF9iYWNrKGNCbG9jay5tYXAoKS5nZXQoKSk7CisgICAgICAgIH0KKyAgICB9Cit9CisKK30gLy8gbmFtZXNwYWNlIGFuZHJvaWQKZGlmZiAtLWdpdCBhL21lZGlhL2NvZGVjMi92bmRrL0FuZHJvaWQuYnAgYi9tZWRpYS9jb2RlYzIvdm5kay9BbmRyb2lkLmJwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBlYjkwYmUKLS0tIC9kZXYvbnVsbAorKysgYi9tZWRpYS9jb2RlYzIvdm5kay9BbmRyb2lkLmJwCkBAIC0wLDAgKzEsMTAyIEBACitjY19saWJyYXJ5X2hlYWRlcnMgeworICAgIG5hbWU6ICJsaWJjb2RlYzJfaW50ZXJuYWwiLAorCisgICAgZXhwb3J0X2luY2x1ZGVfZGlyczogWworICAgICAgICAiaW50ZXJuYWwiLAorICAgIF0sCisKKyAgICAvLyBUT0RPOiBSZW1vdmUgdGhpcyB3aGVuIHRoaXMgbW9kdWxlIGlzIG1vdmVkIGJhY2sgdG8gZnJhbWV3b3Jrcy9hdi4KKyAgICB2ZW5kb3JfYXZhaWxhYmxlOiB0cnVlLAorfQorCisvLyAhISFETyBOT1QgREVQRU5EIE9OIFRISVMgU0hBUkVEIExJQlJBUlkgRElSRUNUTFkhISEKKy8vIHVzZSBsaWJjb2RlYzItaW1wbC1kZWZhdWx0cyBpbnN0ZWFkCitjY19saWJyYXJ5X3NoYXJlZCB7CisgICAgbmFtZTogImxpYmNvZGVjMl92bmRrIiwKKyAgICB2ZW5kb3JfYXZhaWxhYmxlOiB0cnVlLAorCisgICAgc3JjczogWworICAgICAgICAiQzJBbGxvY2F0b3JJb24uY3BwIiwKKyAgICAgICAgIkMyQWxsb2NhdG9yR3JhbGxvYy5jcHAiLAorICAgICAgICAiQzJCdWZmZXIuY3BwIiwKKyAgICAgICAgIkMyQ29uZmlnLmNwcCIsCisgICAgICAgICJDMlBsYXRmb3JtU3RvcmVQbHVnaW5Mb2FkZXIuY3BwIiwKKyAgICAgICAgIkMyU3RvcmUuY3BwIiwKKyAgICAgICAgInBsYXRmb3JtL0MyQnFCdWZmZXIuY3BwIiwKKyAgICAgICAgInV0aWwvQzJEZWJ1Zy5jcHAiLAorICAgICAgICAidXRpbC9DMkludGVyZmFjZUhlbHBlci5jcHAiLAorICAgICAgICAidXRpbC9DMkludGVyZmFjZVV0aWxzLmNwcCIsCisgICAgICAgICJ1dGlsL0MyUGFyYW1VdGlscy5jcHAiLAorICAgIF0sCisKKyAgICBleHBvcnRfaW5jbHVkZV9kaXJzOiBbCisgICAgICAgICJpbmNsdWRlIiwKKyAgICBdLAorCisgICAgZXhwb3J0X3NoYXJlZF9saWJfaGVhZGVyczogWworICAgICAgICAibGliYmFzZSIsCisgICAgICAgICJhbmRyb2lkLmhhcmR3YXJlLm1lZGlhLmJ1ZmZlcnBvb2xAMS4wIiwKKyAgICBdLAorCisgICAgbG9jYWxfaW5jbHVkZV9kaXJzOiBbCisgICAgICAgICJpbnRlcm5hbCIsCisgICAgXSwKKworICAgIGhlYWRlcl9saWJzOiBbCisgICAgICAgICJtZWRpYV9wbHVnaW5faGVhZGVycyIsCisgICAgICAgICJsaWJjb2RlYzJfaGVhZGVycyIsCisgICAgXSwKKworICAgIHNoYXJlZF9saWJzOiBbCisgICAgICAgICJhbmRyb2lkLmhhcmR3YXJlLmdyYXBoaWNzLmFsbG9jYXRvckAyLjAiLAorICAgICAgICAiYW5kcm9pZC5oYXJkd2FyZS5ncmFwaGljcy5idWZmZXJxdWV1ZUAxLjAiLAorICAgICAgICAiYW5kcm9pZC5oYXJkd2FyZS5ncmFwaGljcy5tYXBwZXJAMi4wIiwKKyAgICAgICAgImFuZHJvaWQuaGFyZHdhcmUubWVkaWEuYnVmZmVycG9vbEAxLjAiLAorICAgICAgICAibGliYmFzZSIsCisgICAgICAgICJsaWJiaW5kZXIiLAorICAgICAgICAibGliY3V0aWxzIiwKKyAgICAgICAgImxpYmRsIiwKKyAgICAgICAgImxpYmhhcmR3YXJlIiwKKyAgICAgICAgImxpYmhpZGxiYXNlIiwKKyAgICAgICAgImxpYmlvbiIsCisgICAgICAgICJsaWJmbXEiLAorICAgICAgICAibGlibG9nIiwKKyAgICAgICAgImxpYnN0YWdlZnJpZ2h0X2J1ZmZlcnF1ZXVlX2hlbHBlciIsCisgICAgICAgICJsaWJzdGFnZWZyaWdodF9mb3VuZGF0aW9uIiwKKyAgICAgICAgImxpYnN0YWdlZnJpZ2h0X2J1ZmZlcnBvb2xAMS4wIiwKKyAgICAgICAgImxpYnVpIiwKKyAgICAgICAgImxpYnV0aWxzIiwKKyAgICBdLAorCisgICAgY2ZsYWdzOiBbCisgICAgICAgICItV2Vycm9yIiwKKyAgICAgICAgIi1XYWxsIiwKKyAgICBdLAorfQorCisvLyBwdWJsaWMgZGVwZW5kZW5jeSBmb3IgaW1wbGVtZW50aW5nIENvZGVjIDIgY29tcG9uZW50cworY2NfZGVmYXVsdHMgeworICAgIG5hbWU6ICJsaWJjb2RlYzItaW1wbC1kZWZhdWx0cyIsCisKKyAgICBzaGFyZWRfbGliczogWworICAgICAgICAibGliYmFzZSIsIC8vIGZvciBDMl9MT0cKKyAgICAgICAgImxpYmxvZyIsIC8vIGZvciBBTE9HCisgICAgICAgICJsaWJjb2RlYzIiLAorICAgICAgICAibGliY29kZWMyX3ZuZGsiLAorICAgICAgICAibGlidXRpbHMiLAorICAgIF0sCit9CisKKy8vIHB1YmxpYyBkZXBlbmRlbmN5IGZvciBpbXBsZW1lbnRpbmcgQ29kZWMgMiBmcmFtZXdvcmsgdXRpbGl0aWVzCisvLyBUSElTIElTIE9OTFkgRk9SIEZSQU1FV09SSyBVU0UgT05MWQorY2NfZGVmYXVsdHMgeworICAgIG5hbWU6ICJsaWJjb2RlYzItaW50ZXJuYWwtZGVmYXVsdHMiLAorICAgIGRlZmF1bHRzOiBbImxpYmNvZGVjMi1pbXBsLWRlZmF1bHRzIl0sCisKKyAgICBzaGFyZWRfbGliczogWworICAgICAgICAibGliY3V0aWxzIiwgLy8gZm9yIHByb3BlcnRpZXMKKyAgICBdLAorCisgICAgLy8gVE9ETzogc2VwYXJhdGUgaW50ZXJuYWwgaGVhZGVycyBzbyB0aGV5IGNhbiBiZSBleHBvc2VkIGhlcmUKK30KKwpkaWZmIC0tZ2l0IGEvbWVkaWEvY29kZWMyL3ZuZGsvQzJBbGxvY2F0b3JHcmFsbG9jLmNwcCBiL21lZGlhL2NvZGVjMi92bmRrL0MyQWxsb2NhdG9yR3JhbGxvYy5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjJlOGQ4NAotLS0gL2Rldi9udWxsCisrKyBiL21lZGlhL2NvZGVjMi92bmRrL0MyQWxsb2NhdG9yR3JhbGxvYy5jcHAKQEAgLTAsMCArMSw3NDMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworCisvLyNkZWZpbmUgTE9HX05ERUJVRyAwCisjZGVmaW5lIExPR19UQUcgIkMyQWxsb2NhdG9yR3JhbGxvYyIKKyNpbmNsdWRlIDx1dGlscy9Mb2cuaD4KKworI2luY2x1ZGUgPGFuZHJvaWQvaGFyZHdhcmUvZ3JhcGhpY3MvYWxsb2NhdG9yLzIuMC9JQWxsb2NhdG9yLmg+CisjaW5jbHVkZSA8YW5kcm9pZC9oYXJkd2FyZS9ncmFwaGljcy9tYXBwZXIvMi4wL0lNYXBwZXIuaD4KKyNpbmNsdWRlIDxjdXRpbHMvbmF0aXZlX2hhbmRsZS5oPgorI2luY2x1ZGUgPGhhcmR3YXJlL2dyYWxsb2MuaD4KKworI2luY2x1ZGUgPEMyQWxsb2NhdG9yR3JhbGxvYy5oPgorI2luY2x1ZGUgPEMyQnVmZmVyLmg+CisjaW5jbHVkZSA8QzJQbGF0Zm9ybVN1cHBvcnQuaD4KKworbmFtZXNwYWNlIGFuZHJvaWQgeworCituYW1lc3BhY2UgeworICAgIGVudW0gOiB1aW50NjRfdCB7CisgICAgICAgIC8qKgorICAgICAgICAgKiBVc2FnZSBtYXNrIHRoYXQgaXMgcGFzc2VkIHRocm91Z2ggZnJvbSBncmFsbG9jIHRvIENvZGVjIDIuMCB1c2FnZS4KKyAgICAgICAgICovCisgICAgICAgIFBBU1NUSFJPVUdIX1VTQUdFX01BU0sgPQorICAgICAgICAgICAgfihHUkFMTE9DX1VTQUdFX1NXX1JFQURfTUFTSyB8IEdSQUxMT0NfVVNBR0VfU1dfV1JJVEVfTUFTSyB8IEdSQUxMT0NfVVNBR0VfUFJPVEVDVEVEKQorICAgIH07CisKKyAgICAvLyB2ZXJpZnkgdGhhdCBwYXNzdGhyb3VnaCBtYXNrIGlzIHdpdGhpbiB0aGUgcGxhdGZvcm0gbWFzaworICAgIHN0YXRpY19hc3NlcnQoKH5DMk1lbW9yeVVzYWdlOjpQTEFURk9STV9NQVNLICYgUEFTU1RIUk9VR0hfVVNBR0VfTUFTSykgPT0gMCwgIiIpOworfQorCitDMk1lbW9yeVVzYWdlIEMyQW5kcm9pZE1lbW9yeVVzYWdlOjpGcm9tR3JhbGxvY1VzYWdlKHVpbnQ2NF90IHVzYWdlKSB7CisgICAgLy8gZ3JhbGxvYyBkb2VzIG5vdCBzdXBwb3J0IFdSSVRFX1BST1RFQ1RFRAorICAgIHJldHVybiBDMk1lbW9yeVVzYWdlKAorICAgICAgICAgICAgKCh1c2FnZSAmIEdSQUxMT0NfVVNBR0VfU1dfUkVBRF9NQVNLKSA/IEMyTWVtb3J5VXNhZ2U6OkNQVV9SRUFEIDogMCkgfAorICAgICAgICAgICAgKCh1c2FnZSAmIEdSQUxMT0NfVVNBR0VfU1dfV1JJVEVfTUFTSykgPyBDMk1lbW9yeVVzYWdlOjpDUFVfV1JJVEUgOiAwKSB8CisgICAgICAgICAgICAoKHVzYWdlICYgR1JBTExPQ19VU0FHRV9QUk9URUNURUQpID8gQzJNZW1vcnlVc2FnZTo6UkVBRF9QUk9URUNURUQgOiAwKSB8CisgICAgICAgICAgICAodXNhZ2UgJiBQQVNTVEhST1VHSF9VU0FHRV9NQVNLKSk7Cit9CisKK3VpbnQ2NF90IEMyQW5kcm9pZE1lbW9yeVVzYWdlOjphc0dyYWxsb2NVc2FnZSgpIGNvbnN0IHsKKyAgICAvLyBncmFsbG9jIGRvZXMgbm90IHN1cHBvcnQgV1JJVEVfUFJPVEVDVEVECisgICAgcmV0dXJuICgoKGV4cGVjdGVkICYgQzJNZW1vcnlVc2FnZTo6Q1BVX1JFQUQpID8gR1JBTExPQ19VU0FHRV9TV19SRUFEX09GVEVOIDogMCkgfAorICAgICAgICAgICAgKChleHBlY3RlZCAmIEMyTWVtb3J5VXNhZ2U6OkNQVV9XUklURSkgPyBHUkFMTE9DX1VTQUdFX1NXX1dSSVRFX09GVEVOIDogMCkgfAorICAgICAgICAgICAgKChleHBlY3RlZCAmIEMyTWVtb3J5VXNhZ2U6OlJFQURfUFJPVEVDVEVEKSA/IEdSQUxMT0NfVVNBR0VfUFJPVEVDVEVEIDogMCkgfAorICAgICAgICAgICAgKGV4cGVjdGVkICYgUEFTU1RIUk9VR0hfVVNBR0VfTUFTSykpOworfQorCit1c2luZyA6OmFuZHJvaWQ6OmhhcmR3YXJlOjpncmFwaGljczo6YWxsb2NhdG9yOjpWMl8wOjpJQWxsb2NhdG9yOwordXNpbmcgOjphbmRyb2lkOjpoYXJkd2FyZTo6Z3JhcGhpY3M6OmNvbW1vbjo6VjFfMDo6QnVmZmVyVXNhZ2U7Cit1c2luZyA6OmFuZHJvaWQ6OmhhcmR3YXJlOjpncmFwaGljczo6Y29tbW9uOjpWMV8wOjpQaXhlbEZvcm1hdDsKK3VzaW5nIDo6YW5kcm9pZDo6aGFyZHdhcmU6OmdyYXBoaWNzOjptYXBwZXI6OlYyXzA6OkJ1ZmZlckRlc2NyaXB0b3I7Cit1c2luZyA6OmFuZHJvaWQ6OmhhcmR3YXJlOjpncmFwaGljczo6bWFwcGVyOjpWMl8wOjpFcnJvcjsKK3VzaW5nIDo6YW5kcm9pZDo6aGFyZHdhcmU6OmdyYXBoaWNzOjptYXBwZXI6OlYyXzA6OklNYXBwZXI7Cit1c2luZyA6OmFuZHJvaWQ6OmhhcmR3YXJlOjpncmFwaGljczo6bWFwcGVyOjpWMl8wOjpZQ2JDckxheW91dDsKK3VzaW5nIDo6YW5kcm9pZDo6aGFyZHdhcmU6OmhpZGxfaGFuZGxlOwordXNpbmcgOjphbmRyb2lkOjpoYXJkd2FyZTo6aGlkbF92ZWM7CisKK25hbWVzcGFjZSB7CisKK3N0cnVjdCBCdWZmZXJEZXNjcmlwdG9ySW5mbyB7CisgICAgSU1hcHBlcjo6QnVmZmVyRGVzY3JpcHRvckluZm8gbWFwcGVySW5mbzsKKyAgICB1aW50MzJfdCBzdHJpZGU7Cit9OworCit9CisKKy8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gR1JBTExPQyBBTExPQ0FUSU9OID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLworc3RhdGljIGMyX3N0YXR1c190IG1hcGVycjJlcnJvcihFcnJvciBtYXBlcnIpIHsKKyAgICBzd2l0Y2ggKG1hcGVycikgeworICAgICAgICBjYXNlIEVycm9yOjpOT05FOiAgICAgICAgICAgcmV0dXJuIEMyX09LOworICAgICAgICBjYXNlIEVycm9yOjpCQURfREVTQ1JJUFRPUjogcmV0dXJuIEMyX0JBRF9WQUxVRTsKKyAgICAgICAgY2FzZSBFcnJvcjo6QkFEX0JVRkZFUjogICAgIHJldHVybiBDMl9CQURfVkFMVUU7CisgICAgICAgIGNhc2UgRXJyb3I6OkJBRF9WQUxVRTogICAgICByZXR1cm4gQzJfQkFEX1ZBTFVFOworICAgICAgICBjYXNlIEVycm9yOjpOT19SRVNPVVJDRVM6ICAgcmV0dXJuIEMyX05PX01FTU9SWTsKKyAgICAgICAgY2FzZSBFcnJvcjo6VU5TVVBQT1JURUQ6ICAgIHJldHVybiBDMl9DQU5OT1RfRE87CisgICAgfQorICAgIHJldHVybiBDMl9DT1JSVVBURUQ7Cit9CisKK3N0YXRpYworYm9vbCBuYXRpdmVfaGFuZGxlX2lzX2ludmFsaWQoY29uc3QgbmF0aXZlX2hhbmRsZV90ICpjb25zdCBoYW5kbGUpIHsKKyAgICAvLyBwZXJmb3JtIGJhc2ljIHZhbGlkYXRpb24gb2YgYSBuYXRpdmUgaGFuZGxlCisgICAgaWYgKGhhbmRsZSA9PSBudWxscHRyKSB7CisgICAgICAgIC8vIG51bGwgaGFuZGxlIGlzIGNvbnNpZGVyZWQgdmFsaWQKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAgICByZXR1cm4gKChzaXplX3QpaGFuZGxlLT52ZXJzaW9uICE9IHNpemVvZihuYXRpdmVfaGFuZGxlX3QpIHx8CisgICAgICAgICAgICBoYW5kbGUtPm51bUZkcyA8IDAgfHwKKyAgICAgICAgICAgIGhhbmRsZS0+bnVtSW50cyA8IDAgfHwKKyAgICAgICAgICAgIC8vIGZvciBzYW5pdHkgYXNzdW1lIGhhbmRsZXMgbXVzdCBvY2N1cHkgbGVzcyBtZW1vcnkgdGhhbiBJTlRfTUFYIGJ5dGVzCisgICAgICAgICAgICBoYW5kbGUtPm51bUZkcyA+IGludCgoSU5UX01BWCAtIGhhbmRsZS0+dmVyc2lvbikgLyBzaXplb2YoaW50KSkgLSBoYW5kbGUtPm51bUludHMpOworfQorCitjbGFzcyBDMkhhbmRsZUdyYWxsb2MgOiBwdWJsaWMgQzJIYW5kbGUgeworcHJpdmF0ZToKKyAgICBzdHJ1Y3QgRXh0cmFEYXRhIHsKKyAgICAgICAgdWludDMyX3Qgd2lkdGg7CisgICAgICAgIHVpbnQzMl90IGhlaWdodDsKKyAgICAgICAgdWludDMyX3QgZm9ybWF0OworICAgICAgICB1aW50MzJfdCB1c2FnZV9sbzsKKyAgICAgICAgdWludDMyX3QgdXNhZ2VfaGk7CisgICAgICAgIHVpbnQzMl90IHN0cmlkZTsKKyAgICAgICAgdWludDMyX3QgZ2VuZXJhdGlvbjsKKyAgICAgICAgdWludDMyX3QgaWdicF9pZF9sbzsKKyAgICAgICAgdWludDMyX3QgaWdicF9pZF9oaTsKKyAgICAgICAgdWludDMyX3QgaWdicF9zbG90OworICAgICAgICB1aW50MzJfdCBtYWdpYzsKKyAgICB9OworCisgICAgZW51bSB7CisgICAgICAgIE5VTV9JTlRTID0gc2l6ZW9mKEV4dHJhRGF0YSkgLyBzaXplb2YoaW50KSwKKyAgICB9OworICAgIGNvbnN0IHN0YXRpYyB1aW50MzJfdCBNQUdJQyA9ICdceGMyZ3JceDAwJzsKKworICAgIHN0YXRpYworICAgIGNvbnN0IEV4dHJhRGF0YSogZ2V0RXh0cmFEYXRhKGNvbnN0IEMySGFuZGxlICpjb25zdCBoYW5kbGUpIHsKKyAgICAgICAgaWYgKGhhbmRsZSA9PSBudWxscHRyCisgICAgICAgICAgICAgICAgfHwgbmF0aXZlX2hhbmRsZV9pc19pbnZhbGlkKGhhbmRsZSkKKyAgICAgICAgICAgICAgICB8fCBoYW5kbGUtPm51bUludHMgPCBOVU1fSU5UUykgeworICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgRXh0cmFEYXRhKj4oCisgICAgICAgICAgICAgICAgJmhhbmRsZS0+ZGF0YVtoYW5kbGUtPm51bUZkcyArIGhhbmRsZS0+bnVtSW50cyAtIE5VTV9JTlRTXSk7CisgICAgfQorCisgICAgc3RhdGljCisgICAgRXh0cmFEYXRhICpnZXRFeHRyYURhdGEoQzJIYW5kbGUgKmNvbnN0IGhhbmRsZSkgeworICAgICAgICByZXR1cm4gY29uc3RfY2FzdDxFeHRyYURhdGEgKj4oZ2V0RXh0cmFEYXRhKGNvbnN0X2Nhc3Q8Y29uc3QgQzJIYW5kbGUgKmNvbnN0PihoYW5kbGUpKSk7CisgICAgfQorCitwdWJsaWM6CisgICAgdm9pZCBnZXRJZ2JwRGF0YSh1aW50MzJfdCAqZ2VuZXJhdGlvbiwgdWludDY0X3QgKmlnYnBfaWQsIHVpbnQzMl90ICppZ2JwX3Nsb3QpIGNvbnN0IHsKKyAgICAgICAgY29uc3QgRXh0cmFEYXRhICplZCA9IGdldEV4dHJhRGF0YSh0aGlzKTsKKyAgICAgICAgKmdlbmVyYXRpb24gPSBlZC0+Z2VuZXJhdGlvbjsKKyAgICAgICAgKmlnYnBfaWQgPSB1bnNpZ25lZChlZC0+aWdicF9pZF9sbykgfCB1aW50NjRfdCh1bnNpZ25lZChlZC0+aWdicF9pZF9oaSkpIDw8IDMyOworICAgICAgICAqaWdicF9zbG90ID0gZWQtPmlnYnBfc2xvdDsKKyAgICB9CisKKyAgICBzdGF0aWMgYm9vbCBpc1ZhbGlkKGNvbnN0IEMySGFuZGxlICpjb25zdCBvKSB7CisgICAgICAgIGlmIChvID09IG51bGxwdHIpIHsgLy8gbnVsbCBoYW5kbGUgaXMgYWx3YXlzIHZhbGlkCisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQorICAgICAgICBjb25zdCBFeHRyYURhdGEgKnhkID0gZ2V0RXh0cmFEYXRhKG8pOworICAgICAgICAvLyB3ZSBjYW5ub3QgdmFsaWRhdGUgd2lkdGgvaGVpZ2h0L2Zvcm1hdC91c2FnZSB3aXRob3V0IGFjY2Vzc2luZyBncmFsbG9jIGRyaXZlcgorICAgICAgICByZXR1cm4geGQgIT0gbnVsbHB0ciAmJiB4ZC0+bWFnaWMgPT0gTUFHSUM7CisgICAgfQorCisgICAgc3RhdGljIEMySGFuZGxlR3JhbGxvYyogV3JhcE5hdGl2ZUhhbmRsZSgKKyAgICAgICAgICAgIGNvbnN0IG5hdGl2ZV9oYW5kbGVfdCAqY29uc3QgaGFuZGxlLAorICAgICAgICAgICAgdWludDMyX3Qgd2lkdGgsIHVpbnQzMl90IGhlaWdodCwgdWludDMyX3QgZm9ybWF0LCB1aW50NjRfdCB1c2FnZSwKKyAgICAgICAgICAgIHVpbnQzMl90IHN0cmlkZSwgdWludDMyX3QgZ2VuZXJhdGlvbiwgdWludDY0X3QgaWdicF9pZCA9IDAsIHVpbnQzMl90IGlnYnBfc2xvdCA9IDApIHsKKyAgICAgICAgLy9DSEVDSyhoYW5kbGUgIT0gbnVsbHB0cik7CisgICAgICAgIGlmIChuYXRpdmVfaGFuZGxlX2lzX2ludmFsaWQoaGFuZGxlKSB8fAorICAgICAgICAgICAgaGFuZGxlLT5udW1JbnRzID4gaW50KChJTlRfTUFYIC0gaGFuZGxlLT52ZXJzaW9uKSAvIHNpemVvZihpbnQpKSAtIE5VTV9JTlRTIC0gaGFuZGxlLT5udW1GZHMpIHsKKyAgICAgICAgICAgIHJldHVybiBudWxscHRyOworICAgICAgICB9CisgICAgICAgIEV4dHJhRGF0YSB4ZCA9IHsKKyAgICAgICAgICAgIHdpZHRoLCBoZWlnaHQsIGZvcm1hdCwgdWludDMyX3QodXNhZ2UgJiAweEZGRkZGRkZGKSwgdWludDMyX3QodXNhZ2UgPj4gMzIpLAorICAgICAgICAgICAgc3RyaWRlLCBnZW5lcmF0aW9uLCB1aW50MzJfdChpZ2JwX2lkICYgMHhGRkZGRkZGRiksIHVpbnQzMl90KGlnYnBfaWQgPj4gMzIpLAorICAgICAgICAgICAgaWdicF9zbG90LCBNQUdJQworICAgICAgICB9OworICAgICAgICBuYXRpdmVfaGFuZGxlX3QgKnJlcyA9IG5hdGl2ZV9oYW5kbGVfY3JlYXRlKGhhbmRsZS0+bnVtRmRzLCBoYW5kbGUtPm51bUludHMgKyBOVU1fSU5UUyk7CisgICAgICAgIGlmIChyZXMgIT0gbnVsbHB0cikgeworICAgICAgICAgICAgbWVtY3B5KCZyZXMtPmRhdGEsICZoYW5kbGUtPmRhdGEsIHNpemVvZihpbnQpICogKGhhbmRsZS0+bnVtRmRzICsgaGFuZGxlLT5udW1JbnRzKSk7CisgICAgICAgICAgICAqZ2V0RXh0cmFEYXRhKHJlcykgPSB4ZDsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxDMkhhbmRsZUdyYWxsb2MgKj4ocmVzKTsKKyAgICB9CisKKyAgICBzdGF0aWMgbmF0aXZlX2hhbmRsZV90KiBVbndyYXBOYXRpdmVIYW5kbGUoCisgICAgICAgICAgICBjb25zdCBDMkhhbmRsZSAqY29uc3QgaGFuZGxlKSB7CisgICAgICAgIGNvbnN0IEV4dHJhRGF0YSAqeGQgPSBnZXRFeHRyYURhdGEoaGFuZGxlKTsKKyAgICAgICAgaWYgKHhkID09IG51bGxwdHIgfHwgeGQtPm1hZ2ljICE9IE1BR0lDKSB7CisgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAgICAgfQorICAgICAgICBuYXRpdmVfaGFuZGxlX3QgKnJlcyA9IG5hdGl2ZV9oYW5kbGVfY3JlYXRlKGhhbmRsZS0+bnVtRmRzLCBoYW5kbGUtPm51bUludHMgLSBOVU1fSU5UUyk7CisgICAgICAgIGlmIChyZXMgIT0gbnVsbHB0cikgeworICAgICAgICAgICAgbWVtY3B5KCZyZXMtPmRhdGEsICZoYW5kbGUtPmRhdGEsIHNpemVvZihpbnQpICogKHJlcy0+bnVtRmRzICsgcmVzLT5udW1JbnRzKSk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHJlczsKKyAgICB9CisKKyAgICBzdGF0aWMgbmF0aXZlX2hhbmRsZV90KiBVbndyYXBOYXRpdmVIYW5kbGUoCisgICAgICAgICAgICBjb25zdCBDMkhhbmRsZSAqY29uc3QgaGFuZGxlLAorICAgICAgICAgICAgdWludDMyX3QgKmdlbmVyYXRpb24sIHVpbnQ2NF90ICppZ2JwX2lkLCB1aW50MzJfdCAqaWdicF9zbG90KSB7CisgICAgICAgIGNvbnN0IEV4dHJhRGF0YSAqeGQgPSBnZXRFeHRyYURhdGEoaGFuZGxlKTsKKyAgICAgICAgaWYgKHhkID09IG51bGxwdHIgfHwgeGQtPm1hZ2ljICE9IE1BR0lDKSB7CisgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAgICAgfQorICAgICAgICAqZ2VuZXJhdGlvbiA9IHhkLT5nZW5lcmF0aW9uOworICAgICAgICAqaWdicF9pZCA9IHVuc2lnbmVkKHhkLT5pZ2JwX2lkX2xvKSB8IHVpbnQ2NF90KHVuc2lnbmVkKHhkLT5pZ2JwX2lkX2hpKSkgPDwgMzI7CisgICAgICAgICppZ2JwX3Nsb3QgPSB4ZC0+aWdicF9zbG90OworICAgICAgICBuYXRpdmVfaGFuZGxlX3QgKnJlcyA9IG5hdGl2ZV9oYW5kbGVfY3JlYXRlKGhhbmRsZS0+bnVtRmRzLCBoYW5kbGUtPm51bUludHMgLSBOVU1fSU5UUyk7CisgICAgICAgIGlmIChyZXMgIT0gbnVsbHB0cikgeworICAgICAgICAgICAgbWVtY3B5KCZyZXMtPmRhdGEsICZoYW5kbGUtPmRhdGEsIHNpemVvZihpbnQpICogKHJlcy0+bnVtRmRzICsgcmVzLT5udW1JbnRzKSk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHJlczsKKyAgICB9CisKKyAgICBzdGF0aWMgY29uc3QgQzJIYW5kbGVHcmFsbG9jKiBJbXBvcnQoCisgICAgICAgICAgICBjb25zdCBDMkhhbmRsZSAqY29uc3QgaGFuZGxlLAorICAgICAgICAgICAgdWludDMyX3QgKndpZHRoLCB1aW50MzJfdCAqaGVpZ2h0LCB1aW50MzJfdCAqZm9ybWF0LAorICAgICAgICAgICAgdWludDY0X3QgKnVzYWdlLCB1aW50MzJfdCAqc3RyaWRlLAorICAgICAgICAgICAgdWludDMyX3QgKmdlbmVyYXRpb24sIHVpbnQ2NF90ICppZ2JwX2lkLCB1aW50MzJfdCAqaWdicF9zbG90KSB7CisgICAgICAgIGNvbnN0IEV4dHJhRGF0YSAqeGQgPSBnZXRFeHRyYURhdGEoaGFuZGxlKTsKKyAgICAgICAgaWYgKHhkID09IG51bGxwdHIpIHsKKyAgICAgICAgICAgIHJldHVybiBudWxscHRyOworICAgICAgICB9CisgICAgICAgICp3aWR0aCA9IHhkLT53aWR0aDsKKyAgICAgICAgKmhlaWdodCA9IHhkLT5oZWlnaHQ7CisgICAgICAgICpmb3JtYXQgPSB4ZC0+Zm9ybWF0OworICAgICAgICAqdXNhZ2UgPSB4ZC0+dXNhZ2VfbG8gfCAodWludDY0X3QoeGQtPnVzYWdlX2hpKSA8PCAzMik7CisgICAgICAgICpzdHJpZGUgPSB4ZC0+c3RyaWRlOworICAgICAgICAqZ2VuZXJhdGlvbiA9IHhkLT5nZW5lcmF0aW9uOworICAgICAgICAqaWdicF9pZCA9IHhkLT5pZ2JwX2lkX2xvIHwgKHVpbnQ2NF90KHhkLT5pZ2JwX2lkX2hpKSA8PCAzMik7CisgICAgICAgICppZ2JwX3Nsb3QgPSB4ZC0+aWdicF9zbG90OworICAgICAgICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxjb25zdCBDMkhhbmRsZUdyYWxsb2MgKj4oaGFuZGxlKTsKKyAgICB9Cit9OworCituYXRpdmVfaGFuZGxlX3QgKlVud3JhcE5hdGl2ZUNvZGVjMkdyYWxsb2NIYW5kbGUoY29uc3QgQzJIYW5kbGUgKmNvbnN0IGhhbmRsZSkgeworICAgIHJldHVybiBDMkhhbmRsZUdyYWxsb2M6OlVud3JhcE5hdGl2ZUhhbmRsZShoYW5kbGUpOworfQorCituYXRpdmVfaGFuZGxlX3QgKlVud3JhcE5hdGl2ZUNvZGVjMkdyYWxsb2NIYW5kbGUoCisgICAgICAgIGNvbnN0IEMySGFuZGxlICpjb25zdCBoYW5kbGUsCisgICAgICAgIHVpbnQzMl90ICpnZW5lcmF0aW9uLCB1aW50NjRfdCAqaWdicF9pZCwgdWludDMyX3QgKmlnYnBfc2xvdCkgeworICAgIHJldHVybiBDMkhhbmRsZUdyYWxsb2M6OlVud3JhcE5hdGl2ZUhhbmRsZShoYW5kbGUsIGdlbmVyYXRpb24sIGlnYnBfaWQsIGlnYnBfc2xvdCk7Cit9CisKK0MySGFuZGxlICpXcmFwTmF0aXZlQ29kZWMyR3JhbGxvY0hhbmRsZSgKKyAgICAgICAgY29uc3QgbmF0aXZlX2hhbmRsZV90ICpjb25zdCBoYW5kbGUsCisgICAgICAgIHVpbnQzMl90IHdpZHRoLCB1aW50MzJfdCBoZWlnaHQsIHVpbnQzMl90IGZvcm1hdCwgdWludDY0X3QgdXNhZ2UsIHVpbnQzMl90IHN0cmlkZSwKKyAgICAgICAgdWludDMyX3QgZ2VuZXJhdGlvbiwgdWludDY0X3QgaWdicF9pZCwgdWludDMyX3QgaWdicF9zbG90KSB7CisgICAgcmV0dXJuIEMySGFuZGxlR3JhbGxvYzo6V3JhcE5hdGl2ZUhhbmRsZShoYW5kbGUsIHdpZHRoLCBoZWlnaHQsIGZvcm1hdCwgdXNhZ2UsIHN0cmlkZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdlbmVyYXRpb24sIGlnYnBfaWQsIGlnYnBfc2xvdCk7Cit9CisKK2NsYXNzIEMyQWxsb2NhdGlvbkdyYWxsb2MgOiBwdWJsaWMgQzJHcmFwaGljQWxsb2NhdGlvbiB7CitwdWJsaWM6CisgICAgdmlydHVhbCB+QzJBbGxvY2F0aW9uR3JhbGxvYygpIG92ZXJyaWRlOworCisgICAgdmlydHVhbCBjMl9zdGF0dXNfdCBtYXAoCisgICAgICAgICAgICBDMlJlY3QgcmVjdCwgQzJNZW1vcnlVc2FnZSB1c2FnZSwgQzJGZW5jZSAqZmVuY2UsCisgICAgICAgICAgICBDMlBsYW5hckxheW91dCAqbGF5b3V0IC8qIG5vbm51bGwgKi8sIHVpbnQ4X3QgKiphZGRyIC8qIG5vbm51bGwgKi8pIG92ZXJyaWRlOworICAgIHZpcnR1YWwgYzJfc3RhdHVzX3QgdW5tYXAoCisgICAgICAgICAgICB1aW50OF90ICoqYWRkciAvKiBub25udWxsICovLCBDMlJlY3QgcmVjdCwgQzJGZW5jZSAqZmVuY2UgLyogbnVsbGFibGUgKi8pIG92ZXJyaWRlOworICAgIHZpcnR1YWwgQzJBbGxvY2F0b3I6OmlkX3QgZ2V0QWxsb2NhdG9ySWQoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBtQWxsb2NhdG9ySWQ7IH0KKyAgICB2aXJ0dWFsIGNvbnN0IEMySGFuZGxlICpoYW5kbGUoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBtTG9ja2VkSGFuZGxlID8gOiBtSGFuZGxlOyB9CisgICAgdmlydHVhbCBib29sIGVxdWFscyhjb25zdCBzdGQ6OnNoYXJlZF9wdHI8Y29uc3QgQzJHcmFwaGljQWxsb2NhdGlvbj4gJm90aGVyKSBjb25zdCBvdmVycmlkZTsKKworICAgIC8vIGludGVybmFsIG1ldGhvZHMKKyAgICAvLyB8aGFuZGxlfCB3aWxsIGJlIG1vdmVkLgorICAgIEMyQWxsb2NhdGlvbkdyYWxsb2MoCisgICAgICAgICAgICAgIGNvbnN0IEJ1ZmZlckRlc2NyaXB0b3JJbmZvICZpbmZvLAorICAgICAgICAgICAgICBjb25zdCBzcDxJTWFwcGVyPiAmbWFwcGVyLAorICAgICAgICAgICAgICBoaWRsX2hhbmRsZSAmaGlkbEhhbmRsZSwKKyAgICAgICAgICAgICAgY29uc3QgQzJIYW5kbGVHcmFsbG9jICpjb25zdCBoYW5kbGUsCisgICAgICAgICAgICAgIEMyQWxsb2NhdG9yOjppZF90IGFsbG9jYXRvcklkKTsKKyAgICBpbnQgZHVwKCkgY29uc3Q7CisgICAgYzJfc3RhdHVzX3Qgc3RhdHVzKCkgY29uc3Q7CisKK3ByaXZhdGU6CisgICAgY29uc3QgQnVmZmVyRGVzY3JpcHRvckluZm8gbUluZm87CisgICAgY29uc3Qgc3A8SU1hcHBlcj4gbU1hcHBlcjsKKyAgICBjb25zdCBoaWRsX2hhbmRsZSBtSGlkbEhhbmRsZTsKKyAgICBjb25zdCBDMkhhbmRsZUdyYWxsb2MgKm1IYW5kbGU7CisgICAgYnVmZmVyX2hhbmRsZV90IG1CdWZmZXI7CisgICAgY29uc3QgQzJIYW5kbGVHcmFsbG9jICptTG9ja2VkSGFuZGxlOworICAgIGJvb2wgbUxvY2tlZDsKKyAgICBDMkFsbG9jYXRvcjo6aWRfdCBtQWxsb2NhdG9ySWQ7CisgICAgc3RkOjptdXRleCBtTWFwcGVkTG9jazsKK307CisKK0MyQWxsb2NhdGlvbkdyYWxsb2M6OkMyQWxsb2NhdGlvbkdyYWxsb2MoCisgICAgICAgICAgY29uc3QgQnVmZmVyRGVzY3JpcHRvckluZm8gJmluZm8sCisgICAgICAgICAgY29uc3Qgc3A8SU1hcHBlcj4gJm1hcHBlciwKKyAgICAgICAgICBoaWRsX2hhbmRsZSAmaGlkbEhhbmRsZSwKKyAgICAgICAgICBjb25zdCBDMkhhbmRsZUdyYWxsb2MgKmNvbnN0IGhhbmRsZSwKKyAgICAgICAgICBDMkFsbG9jYXRvcjo6aWRfdCBhbGxvY2F0b3JJZCkKKyAgICA6IEMyR3JhcGhpY0FsbG9jYXRpb24oaW5mby5tYXBwZXJJbmZvLndpZHRoLCBpbmZvLm1hcHBlckluZm8uaGVpZ2h0KSwKKyAgICAgIG1JbmZvKGluZm8pLAorICAgICAgbU1hcHBlcihtYXBwZXIpLAorICAgICAgbUhpZGxIYW5kbGUoc3RkOjptb3ZlKGhpZGxIYW5kbGUpKSwKKyAgICAgIG1IYW5kbGUoaGFuZGxlKSwKKyAgICAgIG1CdWZmZXIobnVsbHB0ciksCisgICAgICBtTG9ja2VkSGFuZGxlKG51bGxwdHIpLAorICAgICAgbUxvY2tlZChmYWxzZSksCisgICAgICBtQWxsb2NhdG9ySWQoYWxsb2NhdG9ySWQpIHsKK30KKworQzJBbGxvY2F0aW9uR3JhbGxvYzo6fkMyQWxsb2NhdGlvbkdyYWxsb2MoKSB7CisgICAgaWYgKCFtQnVmZmVyKSB7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgaWYgKG1Mb2NrZWQpIHsKKyAgICAgICAgLy8gaW1wbGVtZW50YXRpb24gaWdub3JlcyBhZGRyZXNzcyBhbmQgcmVjdAorICAgICAgICB1aW50OF90KiBhZGRyW0MyUGxhbmFyTGF5b3V0OjpNQVhfTlVNX1BMQU5FU10gPSB7fTsKKyAgICAgICAgdW5tYXAoYWRkciwgQzJSZWN0KCksIG51bGxwdHIpOworICAgIH0KKyAgICBtTWFwcGVyLT5mcmVlQnVmZmVyKGNvbnN0X2Nhc3Q8bmF0aXZlX2hhbmRsZV90ICo+KG1CdWZmZXIpKTsKKyAgICBuYXRpdmVfaGFuZGxlX2RlbGV0ZShjb25zdF9jYXN0PG5hdGl2ZV9oYW5kbGVfdCo+KAorICAgICAgICAgICAgcmVpbnRlcnByZXRfY2FzdDxjb25zdCBuYXRpdmVfaGFuZGxlX3QqPihtSGFuZGxlKSkpOworfQorCitjMl9zdGF0dXNfdCBDMkFsbG9jYXRpb25HcmFsbG9jOjptYXAoCisgICAgICAgIEMyUmVjdCByZWN0LCBDMk1lbW9yeVVzYWdlIHVzYWdlLCBDMkZlbmNlICpmZW5jZSwKKyAgICAgICAgQzJQbGFuYXJMYXlvdXQgKmxheW91dCAvKiBub25udWxsICovLCB1aW50OF90ICoqYWRkciAvKiBub25udWxsICovKSB7CisgICAgdWludDY0X3QgZ3JhbGxvY1VzYWdlID0gc3RhdGljX2Nhc3Q8QzJBbmRyb2lkTWVtb3J5VXNhZ2U+KHVzYWdlKS5hc0dyYWxsb2NVc2FnZSgpOworICAgIEFMT0dWKCJtYXBwaW5nIGJ1ZmZlciB3aXRoIHVzYWdlICUjbGx4ID0+ICUjbGx4IiwKKyAgICAgICAgICAobG9uZyBsb25nKXVzYWdlLmV4cGVjdGVkLCAobG9uZyBsb25nKWdyYWxsb2NVc2FnZSk7CisKKyAgICAvLyBUT0RPCisgICAgKHZvaWQpIGZlbmNlOworCisgICAgc3RkOjpsb2NrX2d1YXJkPHN0ZDo6bXV0ZXg+IGxvY2sobU1hcHBlZExvY2spOworICAgIGlmIChtQnVmZmVyICYmIG1Mb2NrZWQpIHsKKyAgICAgICAgQUxPR0QoImFscmVhZHkgbWFwcGVkIik7CisgICAgICAgIHJldHVybiBDMl9EVVBMSUNBVEU7CisgICAgfQorICAgIGlmICghbGF5b3V0IHx8ICFhZGRyKSB7CisgICAgICAgIEFMT0dEKCJ3cm9uZyBwYXJhbSIpOworICAgICAgICByZXR1cm4gQzJfQkFEX1ZBTFVFOworICAgIH0KKworICAgIGMyX3N0YXR1c190IGVyciA9IEMyX09LOworICAgIGlmICghbUJ1ZmZlcikgeworICAgICAgICBtTWFwcGVyLT5pbXBvcnRCdWZmZXIoCisgICAgICAgICAgICAgICAgbUhpZGxIYW5kbGUsIFsmZXJyLCB0aGlzXShjb25zdCBhdXRvICZtYXBlcnIsIGNvbnN0IGF1dG8gJmJ1ZmZlcikgeworICAgICAgICAgICAgICAgICAgICBlcnIgPSBtYXBlcnIyZXJyb3IobWFwZXJyKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGVyciA9PSBDMl9PSykgeworICAgICAgICAgICAgICAgICAgICAgICAgbUJ1ZmZlciA9IHN0YXRpY19jYXN0PGJ1ZmZlcl9oYW5kbGVfdD4oYnVmZmVyKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0pOworICAgICAgICBpZiAoZXJyICE9IEMyX09LKSB7CisgICAgICAgICAgICBBTE9HRCgiaW1wb3J0QnVmZmVyIGZhaWxlZDogJWQiLCBlcnIpOworICAgICAgICAgICAgcmV0dXJuIGVycjsKKyAgICAgICAgfQorICAgICAgICBpZiAobUJ1ZmZlciA9PSBudWxscHRyKSB7CisgICAgICAgICAgICBBTE9HRCgiaW1wb3J0QnVmZmVyIHJldHVybmVkIG51bGwgYnVmZmVyIik7CisgICAgICAgICAgICByZXR1cm4gQzJfQ09SUlVQVEVEOworICAgICAgICB9CisgICAgICAgIHVpbnQzMl90IGdlbmVyYXRpb24gPSAwOworICAgICAgICB1aW50NjRfdCBpZ2JwX2lkID0gMDsKKyAgICAgICAgdWludDMyX3QgaWdicF9zbG90ID0gMDsKKyAgICAgICAgaWYgKG1IYW5kbGUpIHsKKyAgICAgICAgICAgIG1IYW5kbGUtPmdldElnYnBEYXRhKCZnZW5lcmF0aW9uLCAmaWdicF9pZCwgJmlnYnBfc2xvdCk7CisgICAgICAgIH0KKyAgICAgICAgbUxvY2tlZEhhbmRsZSA9IEMySGFuZGxlR3JhbGxvYzo6V3JhcE5hdGl2ZUhhbmRsZSgKKyAgICAgICAgICAgICAgICBtQnVmZmVyLCBtSW5mby5tYXBwZXJJbmZvLndpZHRoLCBtSW5mby5tYXBwZXJJbmZvLmhlaWdodCwKKyAgICAgICAgICAgICAgICAodWludDMyX3QpbUluZm8ubWFwcGVySW5mby5mb3JtYXQsIG1JbmZvLm1hcHBlckluZm8udXNhZ2UsIG1JbmZvLnN0cmlkZSwKKyAgICAgICAgICAgICAgICBnZW5lcmF0aW9uLCBpZ2JwX2lkLCBpZ2JwX3Nsb3QpOworICAgIH0KKworICAgIC8vIFVHTFkgSEFDSzogYXNzdW1lIFlDYkNyIDQ6MjowIDgtYml0IGZvcm1hdCAoYW5kIGxvY2thYmxlIHZpYSBsb2NrWUNiQ3IpIGlmIHdlIGRvbid0CisgICAgLy8gcmVjb2duaXplIHRoZSBmb3JtYXQKKyAgICBQaXhlbEZvcm1hdCBmb3JtYXQgPSBtSW5mby5tYXBwZXJJbmZvLmZvcm1hdDsKKyAgICBpZiAoZm9ybWF0ICE9IFBpeGVsRm9ybWF0OjpSR0JBXzg4ODggJiYgZm9ybWF0ICE9IFBpeGVsRm9ybWF0OjpSR0JYXzg4ODgpIHsKKyAgICAgICAgZm9ybWF0ID0gUGl4ZWxGb3JtYXQ6OllDQkNSXzQyMF84ODg7CisgICAgfQorCisgICAgc3dpdGNoIChmb3JtYXQpIHsKKyAgICAgICAgY2FzZSBQaXhlbEZvcm1hdDo6WUNCQ1JfNDIwXzg4ODoKKyAgICAgICAgY2FzZSBQaXhlbEZvcm1hdDo6WVYxMjogeworICAgICAgICAgICAgWUNiQ3JMYXlvdXQgeWNiY3JMYXlvdXQ7CisgICAgICAgICAgICBtTWFwcGVyLT5sb2NrWUNiQ3IoCisgICAgICAgICAgICAgICAgICAgIGNvbnN0X2Nhc3Q8bmF0aXZlX2hhbmRsZV90ICo+KG1CdWZmZXIpLCBncmFsbG9jVXNhZ2UsCisgICAgICAgICAgICAgICAgICAgIHsgKGludDMyX3QpcmVjdC5sZWZ0LCAoaW50MzJfdClyZWN0LnRvcCwgKGludDMyX3QpcmVjdC53aWR0aCwgKGludDMyX3QpcmVjdC5oZWlnaHQgfSwKKyAgICAgICAgICAgICAgICAgICAgLy8gVE9ETzogZmVuY2UKKyAgICAgICAgICAgICAgICAgICAgaGlkbF9oYW5kbGUoKSwKKyAgICAgICAgICAgICAgICAgICAgWyZlcnIsICZ5Y2JjckxheW91dF0oY29uc3QgYXV0byAmbWFwZXJyLCBjb25zdCBhdXRvICZtYXBMYXlvdXQpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGVyciA9IG1hcGVycjJlcnJvcihtYXBlcnIpOworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGVyciA9PSBDMl9PSykgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHljYmNyTGF5b3V0ID0gbWFwTGF5b3V0OworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICB9KTsKKyAgICAgICAgICAgIGlmIChlcnIgIT0gQzJfT0spIHsKKyAgICAgICAgICAgICAgICBBTE9HRCgibG9ja1lDYkNyIGZhaWxlZDogJWQiLCBlcnIpOworICAgICAgICAgICAgICAgIHJldHVybiBlcnI7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBhZGRyW0MyUGxhbmFyTGF5b3V0OjpQTEFORV9ZXSA9ICh1aW50OF90ICopeWNiY3JMYXlvdXQueTsKKyAgICAgICAgICAgIGFkZHJbQzJQbGFuYXJMYXlvdXQ6OlBMQU5FX1VdID0gKHVpbnQ4X3QgKil5Y2JjckxheW91dC5jYjsKKyAgICAgICAgICAgIGFkZHJbQzJQbGFuYXJMYXlvdXQ6OlBMQU5FX1ZdID0gKHVpbnQ4X3QgKil5Y2JjckxheW91dC5jcjsKKyAgICAgICAgICAgIGxheW91dC0+dHlwZSA9IEMyUGxhbmFyTGF5b3V0OjpUWVBFX1lVVjsKKyAgICAgICAgICAgIGxheW91dC0+bnVtUGxhbmVzID0gMzsKKyAgICAgICAgICAgIGxheW91dC0+cm9vdFBsYW5lcyA9IDM7CisgICAgICAgICAgICBsYXlvdXQtPnBsYW5lc1tDMlBsYW5hckxheW91dDo6UExBTkVfWV0gPSB7CisgICAgICAgICAgICAgICAgQzJQbGFuZUluZm86OkNIQU5ORUxfWSwgICAgICAgICAvLyBjaGFubmVsCisgICAgICAgICAgICAgICAgMSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBjb2xJbmMKKyAgICAgICAgICAgICAgICAoaW50MzJfdCl5Y2JjckxheW91dC55U3RyaWRlLCAgIC8vIHJvd0luYworICAgICAgICAgICAgICAgIDEsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gbUNvbFNhbXBsaW5nCisgICAgICAgICAgICAgICAgMSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBtUm93U2FtcGxpbmcKKyAgICAgICAgICAgICAgICA4LCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGFsbG9jYXRlZERlcHRoCisgICAgICAgICAgICAgICAgOCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBiaXREZXB0aAorICAgICAgICAgICAgICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gcmlnaHRTaGlmdAorICAgICAgICAgICAgICAgIEMyUGxhbmVJbmZvOjpOQVRJVkUsICAgICAgICAgICAgLy8gZW5kaWFubmVzcworICAgICAgICAgICAgICAgIEMyUGxhbmFyTGF5b3V0OjpQTEFORV9ZLCAgICAgICAgLy8gcm9vdEl4CisgICAgICAgICAgICAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBvZmZzZXQKKyAgICAgICAgICAgIH07CisgICAgICAgICAgICBsYXlvdXQtPnBsYW5lc1tDMlBsYW5hckxheW91dDo6UExBTkVfVV0gPSB7CisgICAgICAgICAgICAgICAgQzJQbGFuZUluZm86OkNIQU5ORUxfQ0IsICAgICAgICAgIC8vIGNoYW5uZWwKKyAgICAgICAgICAgICAgICAoaW50MzJfdCl5Y2JjckxheW91dC5jaHJvbWFTdGVwLCAgLy8gY29sSW5jCisgICAgICAgICAgICAgICAgKGludDMyX3QpeWNiY3JMYXlvdXQuY1N0cmlkZSwgICAgIC8vIHJvd0luYworICAgICAgICAgICAgICAgIDIsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBtQ29sU2FtcGxpbmcKKyAgICAgICAgICAgICAgICAyLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gbVJvd1NhbXBsaW5nCisgICAgICAgICAgICAgICAgOCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGFsbG9jYXRlZERlcHRoCisgICAgICAgICAgICAgICAgOCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGJpdERlcHRoCisgICAgICAgICAgICAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHJpZ2h0U2hpZnQKKyAgICAgICAgICAgICAgICBDMlBsYW5lSW5mbzo6TkFUSVZFLCAgICAgICAgICAgICAgLy8gZW5kaWFubmVzcworICAgICAgICAgICAgICAgIEMyUGxhbmFyTGF5b3V0OjpQTEFORV9VLCAgICAgICAgICAvLyByb290SXgKKyAgICAgICAgICAgICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gb2Zmc2V0CisgICAgICAgICAgICB9OworICAgICAgICAgICAgbGF5b3V0LT5wbGFuZXNbQzJQbGFuYXJMYXlvdXQ6OlBMQU5FX1ZdID0geworICAgICAgICAgICAgICAgIEMyUGxhbmVJbmZvOjpDSEFOTkVMX0NSLCAgICAgICAgICAvLyBjaGFubmVsCisgICAgICAgICAgICAgICAgKGludDMyX3QpeWNiY3JMYXlvdXQuY2hyb21hU3RlcCwgIC8vIGNvbEluYworICAgICAgICAgICAgICAgIChpbnQzMl90KXljYmNyTGF5b3V0LmNTdHJpZGUsICAgICAvLyByb3dJbmMKKyAgICAgICAgICAgICAgICAyLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gbUNvbFNhbXBsaW5nCisgICAgICAgICAgICAgICAgMiwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIG1Sb3dTYW1wbGluZworICAgICAgICAgICAgICAgIDgsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBhbGxvY2F0ZWREZXB0aAorICAgICAgICAgICAgICAgIDgsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBiaXREZXB0aAorICAgICAgICAgICAgICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyByaWdodFNoaWZ0CisgICAgICAgICAgICAgICAgQzJQbGFuZUluZm86Ok5BVElWRSwgICAgICAgICAgICAgIC8vIGVuZGlhbm5lc3MKKyAgICAgICAgICAgICAgICBDMlBsYW5hckxheW91dDo6UExBTkVfViwgICAgICAgICAgLy8gcm9vdEl4CisgICAgICAgICAgICAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIG9mZnNldAorICAgICAgICAgICAgfTsKKyAgICAgICAgICAgIC8vIGhhbmRsZSBpbnRlcmxlYXZlZCBmb3JtYXRzCisgICAgICAgICAgICBpbnRwdHJfdCB1dk9mZnNldCA9IGFkZHJbQzJQbGFuYXJMYXlvdXQ6OlBMQU5FX1ZdIC0gYWRkcltDMlBsYW5hckxheW91dDo6UExBTkVfVV07CisgICAgICAgICAgICBpZiAodXZPZmZzZXQgPiAwICYmIHV2T2Zmc2V0IDwgKGludHB0cl90KXljYmNyTGF5b3V0LmNocm9tYVN0ZXApIHsKKyAgICAgICAgICAgICAgICBsYXlvdXQtPnJvb3RQbGFuZXMgPSAyOworICAgICAgICAgICAgICAgIGxheW91dC0+cGxhbmVzW0MyUGxhbmFyTGF5b3V0OjpQTEFORV9WXS5yb290SXggPSBDMlBsYW5hckxheW91dDo6UExBTkVfVTsKKyAgICAgICAgICAgICAgICBsYXlvdXQtPnBsYW5lc1tDMlBsYW5hckxheW91dDo6UExBTkVfVl0ub2Zmc2V0ID0gdXZPZmZzZXQ7CisgICAgICAgICAgICB9IGVsc2UgaWYgKHV2T2Zmc2V0IDwgMCAmJiB1dk9mZnNldCA+IC0oaW50cHRyX3QpeWNiY3JMYXlvdXQuY2hyb21hU3RlcCkgeworICAgICAgICAgICAgICAgIGxheW91dC0+cm9vdFBsYW5lcyA9IDI7CisgICAgICAgICAgICAgICAgbGF5b3V0LT5wbGFuZXNbQzJQbGFuYXJMYXlvdXQ6OlBMQU5FX1VdLnJvb3RJeCA9IEMyUGxhbmFyTGF5b3V0OjpQTEFORV9WOworICAgICAgICAgICAgICAgIGxheW91dC0+cGxhbmVzW0MyUGxhbmFyTGF5b3V0OjpQTEFORV9VXS5vZmZzZXQgPSAtdXZPZmZzZXQ7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgIGNhc2UgUGl4ZWxGb3JtYXQ6OlJHQkFfODg4ODoKKyAgICAgICAgICAgIC8vIFRPRE86IGFscGhhIGNoYW5uZWwKKyAgICAgICAgICAgIC8vIGZhbGwtdGhyb3VnaAorICAgICAgICBjYXNlIFBpeGVsRm9ybWF0OjpSR0JYXzg4ODg6IHsKKyAgICAgICAgICAgIHZvaWQgKnBvaW50ZXIgPSBudWxscHRyOworICAgICAgICAgICAgbU1hcHBlci0+bG9jaygKKyAgICAgICAgICAgICAgICAgICAgY29uc3RfY2FzdDxuYXRpdmVfaGFuZGxlX3QgKj4obUJ1ZmZlciksCisgICAgICAgICAgICAgICAgICAgIGdyYWxsb2NVc2FnZSwKKyAgICAgICAgICAgICAgICAgICAgeyAoaW50MzJfdClyZWN0LmxlZnQsIChpbnQzMl90KXJlY3QudG9wLCAoaW50MzJfdClyZWN0LndpZHRoLCAoaW50MzJfdClyZWN0LmhlaWdodCB9LAorICAgICAgICAgICAgICAgICAgICAvLyBUT0RPOiBmZW5jZQorICAgICAgICAgICAgICAgICAgICBoaWRsX2hhbmRsZSgpLAorICAgICAgICAgICAgICAgICAgICBbJmVyciwgJnBvaW50ZXJdKGNvbnN0IGF1dG8gJm1hcGVyciwgY29uc3QgYXV0byAmbWFwUG9pbnRlcikgeworICAgICAgICAgICAgICAgICAgICAgICAgZXJyID0gbWFwZXJyMmVycm9yKG1hcGVycik7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZXJyID09IEMyX09LKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcG9pbnRlciA9IG1hcFBvaW50ZXI7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIH0pOworICAgICAgICAgICAgaWYgKGVyciAhPSBDMl9PSykgeworICAgICAgICAgICAgICAgIEFMT0dEKCJsb2NrIGZhaWxlZDogJWQiLCBlcnIpOworICAgICAgICAgICAgICAgIHJldHVybiBlcnI7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBhZGRyW0MyUGxhbmFyTGF5b3V0OjpQTEFORV9SXSA9ICh1aW50OF90ICopcG9pbnRlcjsKKyAgICAgICAgICAgIGFkZHJbQzJQbGFuYXJMYXlvdXQ6OlBMQU5FX0ddID0gKHVpbnQ4X3QgKilwb2ludGVyICsgMTsKKyAgICAgICAgICAgIGFkZHJbQzJQbGFuYXJMYXlvdXQ6OlBMQU5FX0JdID0gKHVpbnQ4X3QgKilwb2ludGVyICsgMjsKKyAgICAgICAgICAgIGxheW91dC0+dHlwZSA9IEMyUGxhbmFyTGF5b3V0OjpUWVBFX1JHQjsKKyAgICAgICAgICAgIGxheW91dC0+bnVtUGxhbmVzID0gMzsKKyAgICAgICAgICAgIGxheW91dC0+cm9vdFBsYW5lcyA9IDE7CisgICAgICAgICAgICBsYXlvdXQtPnBsYW5lc1tDMlBsYW5hckxheW91dDo6UExBTkVfUl0gPSB7CisgICAgICAgICAgICAgICAgQzJQbGFuZUluZm86OkNIQU5ORUxfUiwgICAgICAgICAvLyBjaGFubmVsCisgICAgICAgICAgICAgICAgNCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBjb2xJbmMKKyAgICAgICAgICAgICAgICA0ICogKGludDMyX3QpbUluZm8uc3RyaWRlLCAgICAgIC8vIHJvd0luYworICAgICAgICAgICAgICAgIDEsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gbUNvbFNhbXBsaW5nCisgICAgICAgICAgICAgICAgMSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBtUm93U2FtcGxpbmcKKyAgICAgICAgICAgICAgICA4LCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGFsbG9jYXRlZERlcHRoCisgICAgICAgICAgICAgICAgOCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBiaXREZXB0aAorICAgICAgICAgICAgICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gcmlnaHRTaGlmdAorICAgICAgICAgICAgICAgIEMyUGxhbmVJbmZvOjpOQVRJVkUsICAgICAgICAgICAgLy8gZW5kaWFubmVzcworICAgICAgICAgICAgICAgIEMyUGxhbmFyTGF5b3V0OjpQTEFORV9SLCAgICAgICAgLy8gcm9vdEl4CisgICAgICAgICAgICAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBvZmZzZXQKKyAgICAgICAgICAgIH07CisgICAgICAgICAgICBsYXlvdXQtPnBsYW5lc1tDMlBsYW5hckxheW91dDo6UExBTkVfR10gPSB7CisgICAgICAgICAgICAgICAgQzJQbGFuZUluZm86OkNIQU5ORUxfRywgICAgICAgICAvLyBjaGFubmVsCisgICAgICAgICAgICAgICAgNCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBjb2xJbmMKKyAgICAgICAgICAgICAgICA0ICogKGludDMyX3QpbUluZm8uc3RyaWRlLCAgICAgIC8vIHJvd0luYworICAgICAgICAgICAgICAgIDEsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gbUNvbFNhbXBsaW5nCisgICAgICAgICAgICAgICAgMSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBtUm93U2FtcGxpbmcKKyAgICAgICAgICAgICAgICA4LCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGFsbG9jYXRlZERlcHRoCisgICAgICAgICAgICAgICAgOCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBiaXREZXB0aAorICAgICAgICAgICAgICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gcmlnaHRTaGlmdAorICAgICAgICAgICAgICAgIEMyUGxhbmVJbmZvOjpOQVRJVkUsICAgICAgICAgICAgLy8gZW5kaWFubmVzcworICAgICAgICAgICAgICAgIEMyUGxhbmFyTGF5b3V0OjpQTEFORV9SLCAgICAgICAgLy8gcm9vdEl4CisgICAgICAgICAgICAgICAgMSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBvZmZzZXQKKyAgICAgICAgICAgIH07CisgICAgICAgICAgICBsYXlvdXQtPnBsYW5lc1tDMlBsYW5hckxheW91dDo6UExBTkVfQl0gPSB7CisgICAgICAgICAgICAgICAgQzJQbGFuZUluZm86OkNIQU5ORUxfQiwgICAgICAgICAvLyBjaGFubmVsCisgICAgICAgICAgICAgICAgNCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBjb2xJbmMKKyAgICAgICAgICAgICAgICA0ICogKGludDMyX3QpbUluZm8uc3RyaWRlLCAgICAgIC8vIHJvd0luYworICAgICAgICAgICAgICAgIDEsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gbUNvbFNhbXBsaW5nCisgICAgICAgICAgICAgICAgMSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBtUm93U2FtcGxpbmcKKyAgICAgICAgICAgICAgICA4LCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGFsbG9jYXRlZERlcHRoCisgICAgICAgICAgICAgICAgOCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBiaXREZXB0aAorICAgICAgICAgICAgICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gcmlnaHRTaGlmdAorICAgICAgICAgICAgICAgIEMyUGxhbmVJbmZvOjpOQVRJVkUsICAgICAgICAgICAgLy8gZW5kaWFubmVzcworICAgICAgICAgICAgICAgIEMyUGxhbmFyTGF5b3V0OjpQTEFORV9SLCAgICAgICAgLy8gcm9vdEl4CisgICAgICAgICAgICAgICAgMiwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBvZmZzZXQKKyAgICAgICAgICAgIH07CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBkZWZhdWx0OiB7CisgICAgICAgICAgICBBTE9HRCgidW5zdXBwb3J0ZWQgcGl4ZWwgZm9ybWF0OiAlZCIsIG1JbmZvLm1hcHBlckluZm8uZm9ybWF0KTsKKyAgICAgICAgICAgIHJldHVybiBDMl9PTUlUVEVEOworICAgICAgICB9CisgICAgfQorICAgIG1Mb2NrZWQgPSB0cnVlOworCisgICAgcmV0dXJuIEMyX09LOworfQorCitjMl9zdGF0dXNfdCBDMkFsbG9jYXRpb25HcmFsbG9jOjp1bm1hcCgKKyAgICAgICAgdWludDhfdCAqKmFkZHIsIEMyUmVjdCByZWN0LCBDMkZlbmNlICpmZW5jZSAvKiBudWxsYWJsZSAqLykgeworICAgIC8vIFRPRE86IGNoZWNrIGFkZHIgYW5kIHNpemUsIHVzZSBmZW5jZQorICAgICh2b2lkKWFkZHI7CisgICAgKHZvaWQpcmVjdDsKKworICAgIHN0ZDo6bG9ja19ndWFyZDxzdGQ6Om11dGV4PiBsb2NrKG1NYXBwZWRMb2NrKTsKKyAgICBjMl9zdGF0dXNfdCBlcnIgPSBDMl9PSzsKKyAgICBtTWFwcGVyLT51bmxvY2soCisgICAgICAgICAgICBjb25zdF9jYXN0PG5hdGl2ZV9oYW5kbGVfdCAqPihtQnVmZmVyKSwKKyAgICAgICAgICAgIFsmZXJyLCAmZmVuY2VdKGNvbnN0IGF1dG8gJm1hcGVyciwgY29uc3QgYXV0byAmcmVsZWFzZUZlbmNlKSB7CisgICAgICAgICAgICAgICAgLy8gVE9ETworICAgICAgICAgICAgICAgICh2b2lkKSBmZW5jZTsKKyAgICAgICAgICAgICAgICAodm9pZCkgcmVsZWFzZUZlbmNlOworICAgICAgICAgICAgICAgIGVyciA9IG1hcGVycjJlcnJvcihtYXBlcnIpOworICAgICAgICAgICAgICAgIGlmIChlcnIgPT0gQzJfT0spIHsKKyAgICAgICAgICAgICAgICAgICAgLy8gVE9ETzogZmVuY2UKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9KTsKKyAgICBpZiAoZXJyID09IEMyX09LKSB7CisgICAgICAgIG1Mb2NrZWQgPSBmYWxzZTsKKyAgICB9CisgICAgcmV0dXJuIGVycjsKK30KKworYm9vbCBDMkFsbG9jYXRpb25HcmFsbG9jOjplcXVhbHMoY29uc3Qgc3RkOjpzaGFyZWRfcHRyPGNvbnN0IEMyR3JhcGhpY0FsbG9jYXRpb24+ICZvdGhlcikgY29uc3QgeworICAgIHJldHVybiBvdGhlciAmJiBvdGhlci0+aGFuZGxlKCkgPT0gaGFuZGxlKCk7Cit9CisKKy8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gR1JBTExPQyBBTExPQ0FUT1IgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCitjbGFzcyBDMkFsbG9jYXRvckdyYWxsb2M6OkltcGwgeworcHVibGljOgorICAgIEltcGwoaWRfdCBpZCwgYm9vbCBidWZmZXJRdWV1ZSk7CisKKyAgICBpZF90IGdldElkKCkgY29uc3QgeworICAgICAgICByZXR1cm4gbVRyYWl0cy0+aWQ7CisgICAgfQorCisgICAgQzJTdHJpbmcgZ2V0TmFtZSgpIGNvbnN0IHsKKyAgICAgICAgcmV0dXJuIG1UcmFpdHMtPm5hbWU7CisgICAgfQorCisgICAgc3RkOjpzaGFyZWRfcHRyPGNvbnN0IEMyQWxsb2NhdG9yOjpUcmFpdHM+IGdldFRyYWl0cygpIGNvbnN0IHsKKyAgICAgICAgcmV0dXJuIG1UcmFpdHM7CisgICAgfQorCisgICAgYzJfc3RhdHVzX3QgbmV3R3JhcGhpY0FsbG9jYXRpb24oCisgICAgICAgICAgICB1aW50MzJfdCB3aWR0aCwgdWludDMyX3QgaGVpZ2h0LCB1aW50MzJfdCBmb3JtYXQsIGNvbnN0IEMyTWVtb3J5VXNhZ2UgJnVzYWdlLAorICAgICAgICAgICAgc3RkOjpzaGFyZWRfcHRyPEMyR3JhcGhpY0FsbG9jYXRpb24+ICphbGxvY2F0aW9uKTsKKworICAgIGMyX3N0YXR1c190IHByaW9yR3JhcGhpY0FsbG9jYXRpb24oCisgICAgICAgICAgICBjb25zdCBDMkhhbmRsZSAqaGFuZGxlLAorICAgICAgICAgICAgc3RkOjpzaGFyZWRfcHRyPEMyR3JhcGhpY0FsbG9jYXRpb24+ICphbGxvY2F0aW9uKTsKKworICAgIGMyX3N0YXR1c190IHN0YXR1cygpIGNvbnN0IHsgcmV0dXJuIG1Jbml0OyB9CisKK3ByaXZhdGU6CisgICAgc3RkOjpzaGFyZWRfcHRyPEMyQWxsb2NhdG9yOjpUcmFpdHM+IG1UcmFpdHM7CisgICAgYzJfc3RhdHVzX3QgbUluaXQ7CisgICAgc3A8SUFsbG9jYXRvcj4gbUFsbG9jYXRvcjsKKyAgICBzcDxJTWFwcGVyPiBtTWFwcGVyOworICAgIGNvbnN0IGJvb2wgbUJ1ZmZlclF1ZXVlOworfTsKKwordm9pZCBfVW53cmFwTmF0aXZlQ29kZWMyR3JhbGxvY01ldGFkYXRhKAorICAgICAgICBjb25zdCBDMkhhbmRsZSAqY29uc3QgaGFuZGxlLAorICAgICAgICB1aW50MzJfdCAqd2lkdGgsIHVpbnQzMl90ICpoZWlnaHQsIHVpbnQzMl90ICpmb3JtYXQsdWludDY0X3QgKnVzYWdlLCB1aW50MzJfdCAqc3RyaWRlLAorICAgICAgICB1aW50MzJfdCAqZ2VuZXJhdGlvbiwgdWludDY0X3QgKmlnYnBfaWQsIHVpbnQzMl90ICppZ2JwX3Nsb3QpIHsKKyAgICAodm9pZClDMkhhbmRsZUdyYWxsb2M6OkltcG9ydChoYW5kbGUsIHdpZHRoLCBoZWlnaHQsIGZvcm1hdCwgdXNhZ2UsIHN0cmlkZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZW5lcmF0aW9uLCBpZ2JwX2lkLCBpZ2JwX3Nsb3QpOworfQorCitDMkFsbG9jYXRvckdyYWxsb2M6OkltcGw6OkltcGwoaWRfdCBpZCwgYm9vbCBidWZmZXJRdWV1ZSkKKyAgICA6IG1Jbml0KEMyX09LKSwgbUJ1ZmZlclF1ZXVlKGJ1ZmZlclF1ZXVlKSB7CisgICAgLy8gVE9ETzogZ2V0IHRoaXMgZnJvbSBhbGxvY2F0b3IKKyAgICBDMk1lbW9yeVVzYWdlIG1pblVzYWdlID0geyAwLCAwIH0sIG1heFVzYWdlID0geyB+KHVpbnQ2NF90KTAsIH4odWludDY0X3QpMCB9OworICAgIFRyYWl0cyB0cmFpdHMgPSB7ICJhbmRyb2lkLmFsbG9jYXRvci5ncmFsbG9jIiwgaWQsIEMyQWxsb2NhdG9yOjpHUkFQSElDLCBtaW5Vc2FnZSwgbWF4VXNhZ2UgfTsKKyAgICBtVHJhaXRzID0gc3RkOjptYWtlX3NoYXJlZDxDMkFsbG9jYXRvcjo6VHJhaXRzPih0cmFpdHMpOworCisgICAgLy8gZ3JhbGxvYyBhbGxvY2F0b3IgaXMgYSBzaW5nbGV0b24sIHNvIGFsbCBvYmplY3RzIHNoYXJlIGEgZ2xvYmFsIHNlcnZpY2UKKyAgICBtQWxsb2NhdG9yID0gSUFsbG9jYXRvcjo6Z2V0U2VydmljZSgpOworICAgIG1NYXBwZXIgPSBJTWFwcGVyOjpnZXRTZXJ2aWNlKCk7CisgICAgaWYgKG1BbGxvY2F0b3IgPT0gbnVsbHB0ciB8fCBtTWFwcGVyID09IG51bGxwdHIpIHsKKyAgICAgICAgbUluaXQgPSBDMl9DT1JSVVBURUQ7CisgICAgfQorfQorCitjMl9zdGF0dXNfdCBDMkFsbG9jYXRvckdyYWxsb2M6OkltcGw6Om5ld0dyYXBoaWNBbGxvY2F0aW9uKAorICAgICAgICB1aW50MzJfdCB3aWR0aCwgdWludDMyX3QgaGVpZ2h0LCB1aW50MzJfdCBmb3JtYXQsIGNvbnN0IEMyTWVtb3J5VXNhZ2UgJnVzYWdlLAorICAgICAgICBzdGQ6OnNoYXJlZF9wdHI8QzJHcmFwaGljQWxsb2NhdGlvbj4gKmFsbG9jYXRpb24pIHsKKyAgICB1aW50NjRfdCBncmFsbG9jVXNhZ2UgPSBzdGF0aWNfY2FzdDxDMkFuZHJvaWRNZW1vcnlVc2FnZT4odXNhZ2UpLmFzR3JhbGxvY1VzYWdlKCk7CisgICAgQUxPR1YoImFsbG9jYXRpbmcgYnVmZmVyIHdpdGggdXNhZ2UgJSNsbHggPT4gJSNsbHgiLAorICAgICAgICAgIChsb25nIGxvbmcpdXNhZ2UuZXhwZWN0ZWQsIChsb25nIGxvbmcpZ3JhbGxvY1VzYWdlKTsKKworICAgIEJ1ZmZlckRlc2NyaXB0b3JJbmZvIGluZm8gPSB7CisgICAgICAgIHsKKyAgICAgICAgICAgIHdpZHRoLAorICAgICAgICAgICAgaGVpZ2h0LAorICAgICAgICAgICAgMXUsICAvLyBsYXllckNvdW50CisgICAgICAgICAgICAoUGl4ZWxGb3JtYXQpZm9ybWF0LAorICAgICAgICAgICAgZ3JhbGxvY1VzYWdlLAorICAgICAgICB9LAorICAgICAgICAwdSwgIC8vIHN0cmlkZSBwbGFjZWhvbGRlcgorICAgIH07CisgICAgYzJfc3RhdHVzX3QgZXJyID0gQzJfT0s7CisgICAgQnVmZmVyRGVzY3JpcHRvciBkZXNjOworICAgIG1NYXBwZXItPmNyZWF0ZURlc2NyaXB0b3IoCisgICAgICAgICAgICBpbmZvLm1hcHBlckluZm8sIFsmZXJyLCAmZGVzY10oY29uc3QgYXV0byAmbWFwZXJyLCBjb25zdCBhdXRvICZkZXNjcmlwdG9yKSB7CisgICAgICAgICAgICAgICAgZXJyID0gbWFwZXJyMmVycm9yKG1hcGVycik7CisgICAgICAgICAgICAgICAgaWYgKGVyciA9PSBDMl9PSykgeworICAgICAgICAgICAgICAgICAgICBkZXNjID0gZGVzY3JpcHRvcjsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9KTsKKyAgICBpZiAoZXJyICE9IEMyX09LKSB7CisgICAgICAgIHJldHVybiBlcnI7CisgICAgfQorCisgICAgLy8gSUFsbG9jYXRvciBzaGFyZXMgSU1hcHBlciBlcnJvciBjb2Rlcy4KKyAgICBoaWRsX2hhbmRsZSBidWZmZXI7CisgICAgbUFsbG9jYXRvci0+YWxsb2NhdGUoCisgICAgICAgICAgICBkZXNjLAorICAgICAgICAgICAgMXUsCisgICAgICAgICAgICBbJmVyciwgJmJ1ZmZlciwgJmluZm9dKGNvbnN0IGF1dG8gJm1hcGVyciwgY29uc3QgYXV0byAmc3RyaWRlLCBhdXRvICZidWZmZXJzKSB7CisgICAgICAgICAgICAgICAgZXJyID0gbWFwZXJyMmVycm9yKG1hcGVycik7CisgICAgICAgICAgICAgICAgaWYgKGVyciAhPSBDMl9PSykgeworICAgICAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGlmIChidWZmZXJzLnNpemUoKSAhPSAxdSkgeworICAgICAgICAgICAgICAgICAgICBlcnIgPSBDMl9DT1JSVVBURUQ7CisgICAgICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgaW5mby5zdHJpZGUgPSBzdHJpZGU7CisgICAgICAgICAgICAgICAgYnVmZmVyID0gc3RkOjptb3ZlKGJ1ZmZlcnNbMF0pOworICAgICAgICAgICAgfSk7CisgICAgaWYgKGVyciAhPSBDMl9PSykgeworICAgICAgICByZXR1cm4gZXJyOworICAgIH0KKworCisgICAgYWxsb2NhdGlvbi0+cmVzZXQobmV3IEMyQWxsb2NhdGlvbkdyYWxsb2MoCisgICAgICAgICAgICBpbmZvLCBtTWFwcGVyLCBidWZmZXIsCisgICAgICAgICAgICBDMkhhbmRsZUdyYWxsb2M6OldyYXBOYXRpdmVIYW5kbGUoCisgICAgICAgICAgICAgICAgICAgIGJ1ZmZlci5nZXROYXRpdmVIYW5kbGUoKSwKKyAgICAgICAgICAgICAgICAgICAgaW5mby5tYXBwZXJJbmZvLndpZHRoLCBpbmZvLm1hcHBlckluZm8uaGVpZ2h0LAorICAgICAgICAgICAgICAgICAgICAodWludDMyX3QpaW5mby5tYXBwZXJJbmZvLmZvcm1hdCwgaW5mby5tYXBwZXJJbmZvLnVzYWdlLCBpbmZvLnN0cmlkZSwKKyAgICAgICAgICAgICAgICAgICAgMCwgMCwgbUJ1ZmZlclF1ZXVlID8gfjAgOiAwKSwKKyAgICAgICAgICAgIG1UcmFpdHMtPmlkKSk7CisgICAgcmV0dXJuIEMyX09LOworfQorCitjMl9zdGF0dXNfdCBDMkFsbG9jYXRvckdyYWxsb2M6OkltcGw6OnByaW9yR3JhcGhpY0FsbG9jYXRpb24oCisgICAgICAgIGNvbnN0IEMySGFuZGxlICpoYW5kbGUsCisgICAgICAgIHN0ZDo6c2hhcmVkX3B0cjxDMkdyYXBoaWNBbGxvY2F0aW9uPiAqYWxsb2NhdGlvbikgeworICAgIEJ1ZmZlckRlc2NyaXB0b3JJbmZvIGluZm87CisgICAgaW5mby5tYXBwZXJJbmZvLmxheWVyQ291bnQgPSAxdTsKKyAgICB1aW50MzJfdCBnZW5lcmF0aW9uOworICAgIHVpbnQ2NF90IGlnYnBfaWQ7CisgICAgdWludDMyX3QgaWdicF9zbG90OworICAgIGNvbnN0IEMySGFuZGxlR3JhbGxvYyAqZ3JhbGxvY0hhbmRsZSA9IEMySGFuZGxlR3JhbGxvYzo6SW1wb3J0KAorICAgICAgICAgICAgaGFuZGxlLAorICAgICAgICAgICAgJmluZm8ubWFwcGVySW5mby53aWR0aCwgJmluZm8ubWFwcGVySW5mby5oZWlnaHQsCisgICAgICAgICAgICAodWludDMyX3QgKikmaW5mby5tYXBwZXJJbmZvLmZvcm1hdCwgKHVpbnQ2NF90ICopJmluZm8ubWFwcGVySW5mby51c2FnZSwgJmluZm8uc3RyaWRlLAorICAgICAgICAgICAgJmdlbmVyYXRpb24sICZpZ2JwX2lkLCAmaWdicF9zbG90KTsKKyAgICBpZiAoZ3JhbGxvY0hhbmRsZSA9PSBudWxscHRyKSB7CisgICAgICAgIHJldHVybiBDMl9CQURfVkFMVUU7CisgICAgfQorCisgICAgaGlkbF9oYW5kbGUgaGlkbEhhbmRsZTsKKyAgICBoaWRsSGFuZGxlLnNldFRvKEMySGFuZGxlR3JhbGxvYzo6VW53cmFwTmF0aXZlSGFuZGxlKGdyYWxsb2NIYW5kbGUpLCB0cnVlKTsKKworICAgIGFsbG9jYXRpb24tPnJlc2V0KG5ldyBDMkFsbG9jYXRpb25HcmFsbG9jKGluZm8sIG1NYXBwZXIsIGhpZGxIYW5kbGUsIGdyYWxsb2NIYW5kbGUsIG1UcmFpdHMtPmlkKSk7CisgICAgcmV0dXJuIEMyX09LOworfQorCitDMkFsbG9jYXRvckdyYWxsb2M6OkMyQWxsb2NhdG9yR3JhbGxvYyhpZF90IGlkLCBib29sIGJ1ZmZlclF1ZXVlKQorICAgICAgICA6IG1JbXBsKG5ldyBJbXBsKGlkLCBidWZmZXJRdWV1ZSkpIHt9CisKK0MyQWxsb2NhdG9yR3JhbGxvYzo6fkMyQWxsb2NhdG9yR3JhbGxvYygpIHsgZGVsZXRlIG1JbXBsOyB9CisKK0MyQWxsb2NhdG9yOjppZF90IEMyQWxsb2NhdG9yR3JhbGxvYzo6Z2V0SWQoKSBjb25zdCB7CisgICAgcmV0dXJuIG1JbXBsLT5nZXRJZCgpOworfQorCitDMlN0cmluZyBDMkFsbG9jYXRvckdyYWxsb2M6OmdldE5hbWUoKSBjb25zdCB7CisgICAgcmV0dXJuIG1JbXBsLT5nZXROYW1lKCk7Cit9CisKK3N0ZDo6c2hhcmVkX3B0cjxjb25zdCBDMkFsbG9jYXRvcjo6VHJhaXRzPiBDMkFsbG9jYXRvckdyYWxsb2M6OmdldFRyYWl0cygpIGNvbnN0IHsKKyAgICByZXR1cm4gbUltcGwtPmdldFRyYWl0cygpOworfQorCitjMl9zdGF0dXNfdCBDMkFsbG9jYXRvckdyYWxsb2M6Om5ld0dyYXBoaWNBbGxvY2F0aW9uKAorICAgICAgICB1aW50MzJfdCB3aWR0aCwgdWludDMyX3QgaGVpZ2h0LCB1aW50MzJfdCBmb3JtYXQsIEMyTWVtb3J5VXNhZ2UgdXNhZ2UsCisgICAgICAgIHN0ZDo6c2hhcmVkX3B0cjxDMkdyYXBoaWNBbGxvY2F0aW9uPiAqYWxsb2NhdGlvbikgeworICAgIHJldHVybiBtSW1wbC0+bmV3R3JhcGhpY0FsbG9jYXRpb24od2lkdGgsIGhlaWdodCwgZm9ybWF0LCB1c2FnZSwgYWxsb2NhdGlvbik7Cit9CisKK2MyX3N0YXR1c190IEMyQWxsb2NhdG9yR3JhbGxvYzo6cHJpb3JHcmFwaGljQWxsb2NhdGlvbigKKyAgICAgICAgY29uc3QgQzJIYW5kbGUgKmhhbmRsZSwKKyAgICAgICAgc3RkOjpzaGFyZWRfcHRyPEMyR3JhcGhpY0FsbG9jYXRpb24+ICphbGxvY2F0aW9uKSB7CisgICAgcmV0dXJuIG1JbXBsLT5wcmlvckdyYXBoaWNBbGxvY2F0aW9uKGhhbmRsZSwgYWxsb2NhdGlvbik7Cit9CisKK2MyX3N0YXR1c190IEMyQWxsb2NhdG9yR3JhbGxvYzo6c3RhdHVzKCkgY29uc3QgeworICAgIHJldHVybiBtSW1wbC0+c3RhdHVzKCk7Cit9CisKK2Jvb2wgQzJBbGxvY2F0b3JHcmFsbG9jOjppc1ZhbGlkKGNvbnN0IEMySGFuZGxlKiBjb25zdCBvKSB7CisgICAgcmV0dXJuIEMySGFuZGxlR3JhbGxvYzo6aXNWYWxpZChvKTsKK30KKworfSAvLyBuYW1lc3BhY2UgYW5kcm9pZApkaWZmIC0tZ2l0IGEvbWVkaWEvY29kZWMyL3ZuZGsvQzJBbGxvY2F0b3JJb24uY3BwIGIvbWVkaWEvY29kZWMyL3ZuZGsvQzJBbGxvY2F0b3JJb24uY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjczNmFhYzUKLS0tIC9kZXYvbnVsbAorKysgYi9tZWRpYS9jb2RlYzIvdm5kay9DMkFsbG9jYXRvcklvbi5jcHAKQEAgLTAsMCArMSw1NjEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworCisvLyNkZWZpbmUgTE9HX05ERUJVRyAwCisjZGVmaW5lIExPR19UQUcgIkMyQWxsb2NhdG9ySW9uIgorI2luY2x1ZGUgPHV0aWxzL0xvZy5oPgorCisjaW5jbHVkZSA8bGlzdD4KKworI2luY2x1ZGUgPGlvbi9pb24uaD4KKyNpbmNsdWRlIDxzeXMvbW1hbi5oPgorI2luY2x1ZGUgPHVuaXN0ZC5oPiAvLyBnZXRwYWdlc2l6ZSwgc2l6ZV90LCBjbG9zZSwgZHVwCisKKyNpbmNsdWRlIDxDMkFsbG9jYXRvcklvbi5oPgorI2luY2x1ZGUgPEMyQnVmZmVyLmg+CisjaW5jbHVkZSA8QzJEZWJ1Zy5oPgorI2luY2x1ZGUgPEMyRXJybm9VdGlscy5oPgorCituYW1lc3BhY2UgYW5kcm9pZCB7CisKK25hbWVzcGFjZSB7CisgICAgY29uc3RleHByIHNpemVfdCBVU0FHRV9MUlVfQ0FDSEVfU0laRSA9IDEwMjQ7Cit9CisKKy8qIHNpemVfdCA8PT4gaW50KGxvKSwgaW50KGhpKSBjb252ZXJzaW9ucyAqLworY29uc3RleHByIGlubGluZSBpbnQgc2l6ZTJpbnRMbyhzaXplX3QgcykgeworICAgIHJldHVybiBpbnQocyAmIDB4RkZGRkZGRkYpOworfQorCitjb25zdGV4cHIgaW5saW5lIGludCBzaXplMmludEhpKHNpemVfdCBzKSB7CisgICAgLy8gY2FzdCB0byB1aW50NjRfdCBhcyBzaXplX3QgbWF5IGJlIDMyIGJpdHMgd2lkZQorICAgIHJldHVybiBpbnQoKHVpbnQ2NF90KHMpID4+IDMyKSAmIDB4RkZGRkZGRkYpOworfQorCitjb25zdGV4cHIgaW5saW5lIHNpemVfdCBpbnRzMnNpemUoaW50IGludExvLCBpbnQgaW50SGkpIHsKKyAgICAvLyBjb252ZXJ0IGluIDIgc3RhZ2VzIHRvIDY0IGJpdHMgYXMgaW50SGkgbWF5IGJlIG5lZ2F0aXZlCisgICAgcmV0dXJuIHNpemVfdCh1bnNpZ25lZChpbnRMbykpIHwgc2l6ZV90KHVpbnQ2NF90KHVuc2lnbmVkKGludEhpKSkgPDwgMzIpOworfQorCisvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSBJT04gSEFORExFID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KKy8qKgorICogSU9OIGhhbmRsZQorICoKKyAqIFRoZXJlIGNhbiBiZSBvbmx5IGEgc29sZSBpb24gY2xpZW50IHBlciBwcm9jZXNzLCB0aGlzIGlzIGNhcHR1cmVkIGluIHRoZSBpb24gZmQgdGhhdCBpcyBwYXNzZWQKKyAqIHRvIHRoZSBjb25zdHJ1Y3RvciwgYnV0IHRoaXMgc2hvdWxkIGJlIG1hbmFnZWQgYnkgdGhlIGlvbiBidWZmZXIgYWxsb2NhdG9yL21hcHBlci4KKyAqCisgKiBpb24gdXNlcyBpb25fdXNlcl9oYW5kbGVfdCBmb3IgYnVmZmVycy4gV2UgZG9uJ3Qgc3RvcmUgdGhpcyBpbiB0aGUgbmF0aXZlIGhhbmRsZSBhcworICogaXQgcmVxdWlyZXMgYW4gaW9uX2ZyZWUgdG8gZGVjcmVmLiBJbnN0ZWFkLCB3ZSBzaGFyZSB0aGUgYnVmZmVyIHRvIGdldCBhbiBmZCB0aGF0IGFsc28gaG9sZHMKKyAqIGEgcmVmY291bnQuCisgKgorICogVGhpcyBoYW5kbGUgd2lsbCBub3QgY2FwdHVyZSBtYXBwZWQgZmQtcyBhcyB1cGRhdGluZyB0aGF0IHdvdWxkIHJlcXVpcmUgYSBnbG9iYWwgbXV0ZXguCisgKi8KKworc3RydWN0IEMySGFuZGxlSW9uIDogcHVibGljIEMySGFuZGxlIHsKKyAgICAvLyBpb24gaGFuZGxlIG93bnMgaW9uRmQoISkgYW5kIGJ1ZmZlckZkCisgICAgQzJIYW5kbGVJb24oaW50IGJ1ZmZlckZkLCBzaXplX3Qgc2l6ZSkKKyAgICAgICAgOiBDMkhhbmRsZShjSGVhZGVyKSwKKyAgICAgICAgICBtRmRzeyBidWZmZXJGZCB9LAorICAgICAgICAgIG1JbnRzeyBpbnQoc2l6ZSAmIDB4RkZGRkZGRkYpLCBpbnQoKHVpbnQ2NF90KHNpemUpID4+IDMyKSAmIDB4RkZGRkZGRkYpLCBrTWFnaWMgfSB7IH0KKworICAgIHN0YXRpYyBib29sIGlzVmFsaWQoY29uc3QgQzJIYW5kbGUgKiBjb25zdCBvKTsKKworICAgIGludCBidWZmZXJGZCgpIGNvbnN0IHsgcmV0dXJuIG1GZHMubUJ1ZmZlcjsgfQorICAgIHNpemVfdCBzaXplKCkgY29uc3QgeworICAgICAgICByZXR1cm4gc2l6ZV90KHVuc2lnbmVkKG1JbnRzLm1TaXplTG8pKQorICAgICAgICAgICAgICAgIHwgc2l6ZV90KHVpbnQ2NF90KHVuc2lnbmVkKG1JbnRzLm1TaXplSGkpKSA8PCAzMik7CisgICAgfQorCitwcm90ZWN0ZWQ6CisgICAgc3RydWN0IHsKKyAgICAgICAgaW50IG1CdWZmZXI7IC8vIHNoYXJlZCBpb24gYnVmZmVyCisgICAgfSBtRmRzOworICAgIHN0cnVjdCB7CisgICAgICAgIGludCBtU2l6ZUxvOyAvLyBsb3cgMzItYml0cyBvZiBzaXplCisgICAgICAgIGludCBtU2l6ZUhpOyAvLyBoaWdoIDMyLWJpdHMgb2Ygc2l6ZQorICAgICAgICBpbnQgbU1hZ2ljOworICAgIH0gbUludHM7CisKK3ByaXZhdGU6CisgICAgdHlwZWRlZiBDMkhhbmRsZUlvbiBfdHlwZTsKKyAgICBlbnVtIHsKKyAgICAgICAga01hZ2ljID0gJ1x4YzJpb1x4MDAnLAorICAgICAgICBudW1GZHMgPSBzaXplb2YobUZkcykgLyBzaXplb2YoaW50KSwKKyAgICAgICAgbnVtSW50cyA9IHNpemVvZihtSW50cykgLyBzaXplb2YoaW50KSwKKyAgICAgICAgdmVyc2lvbiA9IHNpemVvZihDMkhhbmRsZSkKKyAgICB9OworICAgIC8vY29uc3RleHByIHN0YXRpYyBDMkhhbmRsZSBjSGVhZGVyID0geyB2ZXJzaW9uLCBudW1GZHMsIG51bUludHMsIHt9IH07CisgICAgY29uc3Qgc3RhdGljIEMySGFuZGxlIGNIZWFkZXI7Cit9OworCitjb25zdCBDMkhhbmRsZSBDMkhhbmRsZUlvbjo6Y0hlYWRlciA9IHsKKyAgICBDMkhhbmRsZUlvbjo6dmVyc2lvbiwKKyAgICBDMkhhbmRsZUlvbjo6bnVtRmRzLAorICAgIEMySGFuZGxlSW9uOjpudW1JbnRzLAorICAgIHt9Cit9OworCisvLyBzdGF0aWMKK2Jvb2wgQzJIYW5kbGVJb246OmlzVmFsaWQoY29uc3QgQzJIYW5kbGUgKiBjb25zdCBvKSB7CisgICAgaWYgKCFvIHx8IG1lbWNtcChvLCAmY0hlYWRlciwgc2l6ZW9mKGNIZWFkZXIpKSkgeworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorICAgIGNvbnN0IEMySGFuZGxlSW9uICpvdGhlciA9IHN0YXRpY19jYXN0PGNvbnN0IEMySGFuZGxlSW9uKj4obyk7CisgICAgcmV0dXJuIG90aGVyLT5tSW50cy5tTWFnaWMgPT0ga01hZ2ljOworfQorCisvLyBUT0RPOiBpcyB0aGUgZHVwIG9mIGFuIGlvbiBmZCBpZGVudGljYWwgdG8gaW9uX3NoYXJlPworCisvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gSU9OIEFMTE9DQVRJT04gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KK2NsYXNzIEMyQWxsb2NhdGlvbklvbiA6IHB1YmxpYyBDMkxpbmVhckFsbG9jYXRpb24geworcHVibGljOgorICAgIC8qIEludGVyZmFjZSBtZXRob2RzICovCisgICAgdmlydHVhbCBjMl9zdGF0dXNfdCBtYXAoCisgICAgICAgIHNpemVfdCBvZmZzZXQsIHNpemVfdCBzaXplLCBDMk1lbW9yeVVzYWdlIHVzYWdlLCBDMkZlbmNlICpmZW5jZSwKKyAgICAgICAgdm9pZCAqKmFkZHIgLyogbm9ubnVsbCAqLykgb3ZlcnJpZGU7CisgICAgdmlydHVhbCBjMl9zdGF0dXNfdCB1bm1hcCh2b2lkICphZGRyLCBzaXplX3Qgc2l6ZSwgQzJGZW5jZSAqZmVuY2VGZCkgb3ZlcnJpZGU7CisgICAgdmlydHVhbCB+QzJBbGxvY2F0aW9uSW9uKCkgb3ZlcnJpZGU7CisgICAgdmlydHVhbCBjb25zdCBDMkhhbmRsZSAqaGFuZGxlKCkgY29uc3Qgb3ZlcnJpZGU7CisgICAgdmlydHVhbCBpZF90IGdldEFsbG9jYXRvcklkKCkgY29uc3Qgb3ZlcnJpZGU7CisgICAgdmlydHVhbCBib29sIGVxdWFscyhjb25zdCBzdGQ6OnNoYXJlZF9wdHI8QzJMaW5lYXJBbGxvY2F0aW9uPiAmb3RoZXIpIGNvbnN0IG92ZXJyaWRlOworCisgICAgLy8gaW50ZXJuYWwgbWV0aG9kcworICAgIEMyQWxsb2NhdGlvbklvbihpbnQgaW9uRmQsIHNpemVfdCBzaXplLCBzaXplX3QgYWxpZ24sIHVuc2lnbmVkIGhlYXBNYXNrLCB1bnNpZ25lZCBmbGFncywgQzJBbGxvY2F0b3I6OmlkX3QgaWQpOworICAgIEMyQWxsb2NhdGlvbklvbihpbnQgaW9uRmQsIHNpemVfdCBzaXplLCBpbnQgc2hhcmVGZCwgQzJBbGxvY2F0b3I6OmlkX3QgaWQpOworCisgICAgYzJfc3RhdHVzX3Qgc3RhdHVzKCkgY29uc3Q7CisKK3Byb3RlY3RlZDoKKyAgICBjbGFzcyBJbXBsOworICAgIEltcGwgKm1JbXBsOworCisgICAgLy8gVE9ETzogd2UgY291bGQgbWFrZSB0aGlzIGVuY2Fwc3VsYXRlIHNoYXJlZF9wdHIgYW5kIGNvcGlhYmxlCisgICAgQzJfRE9fTk9UX0NPUFkoQzJBbGxvY2F0aW9uSW9uKTsKK307CisKK2NsYXNzIEMyQWxsb2NhdGlvbklvbjo6SW1wbCB7Citwcml2YXRlOgorICAgIC8qKgorICAgICAqIENvbnN0cnVjdHMgYW4gaW9uIGFsbG9jYXRpb24uCisgICAgICoKKyAgICAgKiBcbm90ZSBXZSBhbHdheXMgY3JlYXRlIGFuIGlvbiBhbGxvY2F0aW9uLCBldmVuIGlmIHRoZSBhbGxvY2F0aW9uIG9yIGltcG9ydCBmYWlscworICAgICAqIHNvIHRoYXQgd2UgY2FuIGNhcHR1cmUgdGhlIGVycm9yLgorICAgICAqCisgICAgICogXHBhcmFtIGlvbkZkICAgICBpb24gY2xpZW50IChvd25lcnNoaXAgdHJhbnNmZXJyZWQgdG8gY3JlYXRlZCBvYmplY3QpCisgICAgICogXHBhcmFtIGNhcGFjaXR5ICBzaXplIG9mIGFsbG9jYXRpb24KKyAgICAgKiBccGFyYW0gYnVmZmVyRmQgIGJ1ZmZlciBoYW5kbGUgKG93bmVyc2hpcCB0cmFuc2ZlcnJlZCB0byBjcmVhdGVkIG9iamVjdCkuIE11c3QgYmUKKyAgICAgKiAgICAgICAgICAgICAgICAgIGludmFsaWQgaWYgZXJyIGlzIG5vdCAwLgorICAgICAqIFxwYXJhbSBidWZmZXIgICAgaW9uIGJ1ZmZlciB1c2VyIGhhbmRsZSAob3duZXJzaGlwIHRyYW5zZmVycmVkIHRvIGNyZWF0ZWQgb2JqZWN0KS4gTXVzdCBiZQorICAgICAqICAgICAgICAgICAgICAgICAgaW52YWxpZCBpZiBlcnIgaXMgbm90IDAuCisgICAgICogXHBhcmFtIGVyciAgICAgICBlcnJubyBkdXJpbmcgYnVmZmVyIGFsbG9jYXRpb24gb3IgaW1wb3J0CisgICAgICovCisgICAgSW1wbChpbnQgaW9uRmQsIHNpemVfdCBjYXBhY2l0eSwgaW50IGJ1ZmZlckZkLCBpb25fdXNlcl9oYW5kbGVfdCBidWZmZXIsIEMyQWxsb2NhdG9yOjppZF90IGlkLCBpbnQgZXJyKQorICAgICAgICA6IG1Jb25GZChpb25GZCksCisgICAgICAgICAgbUhhbmRsZShidWZmZXJGZCwgY2FwYWNpdHkpLAorICAgICAgICAgIG1CdWZmZXIoYnVmZmVyKSwKKyAgICAgICAgICBtSWQoaWQpLAorICAgICAgICAgIG1Jbml0KGMyX21hcF9lcnJubzxFTk9NRU0sIEVBQ0NFUywgRUlOVkFMPihlcnIpKSwKKyAgICAgICAgICBtTWFwRmQoLTEpIHsKKyAgICAgICAgaWYgKG1Jbml0ICE9IEMyX09LKSB7CisgICAgICAgICAgICAvLyBjbG9zZSBpb25GZCBub3cgb24gZXJyb3IKKyAgICAgICAgICAgIGlmIChtSW9uRmQgPj0gMCkgeworICAgICAgICAgICAgICAgIGNsb3NlKG1Jb25GZCk7CisgICAgICAgICAgICAgICAgbUlvbkZkID0gLTE7CisgICAgICAgICAgICB9CisgICAgICAgICAgICAvLyBDMl9DSEVDSyhidWZmZXJGZCA8IDApOworICAgICAgICAgICAgLy8gQzJfQ0hFQ0soYnVmZmVyIDwgMCk7CisgICAgICAgIH0KKyAgICB9CisKK3B1YmxpYzoKKyAgICAvKioKKyAgICAgKiBDb25zdHJ1Y3RzIGFuIGlvbiBhbGxvY2F0aW9uIGJ5IGltcG9ydGluZyBhIHNoYXJlZCBidWZmZXIgZmQuCisgICAgICoKKyAgICAgKiBccGFyYW0gaW9uRmQgICAgIGlvbiBjbGllbnQgKG93bmVyc2hpcCB0cmFuc2ZlcnJlZCB0byBjcmVhdGVkIG9iamVjdCkKKyAgICAgKiBccGFyYW0gY2FwYWNpdHkgIHNpemUgb2YgYWxsb2NhdGlvbgorICAgICAqIFxwYXJhbSBidWZmZXJGZCAgYnVmZmVyIGhhbmRsZSAob3duZXJzaGlwIHRyYW5zZmVycmVkIHRvIGNyZWF0ZWQgb2JqZWN0KQorICAgICAqCisgICAgICogXHJldHVybiBjcmVhdGVkIGlvbiBhbGxvY2F0aW9uIChpbXBsZW1lbnRhdGlvbikgd2hpY2ggbWF5IGJlIGludmFsaWQgaWYgdGhlCisgICAgICogaW1wb3J0IGZhaWxlZC4KKyAgICAgKi8KKyAgICBzdGF0aWMgSW1wbCAqSW1wb3J0KGludCBpb25GZCwgc2l6ZV90IGNhcGFjaXR5LCBpbnQgYnVmZmVyRmQsIEMyQWxsb2NhdG9yOjppZF90IGlkKSB7CisgICAgICAgIGlvbl91c2VyX2hhbmRsZV90IGJ1ZmZlciA9IC0xOworICAgICAgICBpbnQgcmV0ID0gaW9uX2ltcG9ydChpb25GZCwgYnVmZmVyRmQsICZidWZmZXIpOworICAgICAgICByZXR1cm4gbmV3IEltcGwoaW9uRmQsIGNhcGFjaXR5LCBidWZmZXJGZCwgYnVmZmVyLCBpZCwgcmV0KTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBDb25zdHJ1Y3RzIGFuIGlvbiBhbGxvY2F0aW9uIGJ5IGFsbG9jYXRpbmcgYW4gaW9uIGJ1ZmZlci4KKyAgICAgKgorICAgICAqIFxwYXJhbSBpb25GZCAgICAgaW9uIGNsaWVudCAob3duZXJzaGlwIHRyYW5zZmVycmVkIHRvIGNyZWF0ZWQgb2JqZWN0KQorICAgICAqIFxwYXJhbSBzaXplICAgICAgc2l6ZSBvZiBhbGxvY2F0aW9uCisgICAgICogXHBhcmFtIGFsaWduICAgICBkZXNpcmVkIGFsaWdubWVudCBvZiBhbGxvY2F0aW9uCisgICAgICogXHBhcmFtIGhlYXBNYXNrICBtYXNrIG9mIGhlYXBzIGNvbnNpZGVyZWQKKyAgICAgKiBccGFyYW0gZmxhZ3MgICAgIGlvbiBhbGxvY2F0aW9uIGZsYWdzCisgICAgICoKKyAgICAgKiBccmV0dXJuIGNyZWF0ZWQgaW9uIGFsbG9jYXRpb24gKGltcGxlbWVudGF0aW9uKSB3aGljaCBtYXkgYmUgaW52YWxpZCBpZiB0aGUKKyAgICAgKiBhbGxvY2F0aW9uIGZhaWxlZC4KKyAgICAgKi8KKyAgICBzdGF0aWMgSW1wbCAqQWxsb2MoaW50IGlvbkZkLCBzaXplX3Qgc2l6ZSwgc2l6ZV90IGFsaWduLCB1bnNpZ25lZCBoZWFwTWFzaywgdW5zaWduZWQgZmxhZ3MsIEMyQWxsb2NhdG9yOjppZF90IGlkKSB7CisgICAgICAgIGludCBidWZmZXJGZCA9IC0xOworICAgICAgICBpb25fdXNlcl9oYW5kbGVfdCBidWZmZXIgPSAtMTsKKyAgICAgICAgc2l6ZV90IGFsaWduZWRTaXplID0gYWxpZ24gPT0gMCA/IHNpemUgOiAoc2l6ZSArIGFsaWduIC0gMSkgJiB+KGFsaWduIC0gMSk7CisgICAgICAgIGludCByZXQgPSBpb25fYWxsb2MoaW9uRmQsIGFsaWduZWRTaXplLCBhbGlnbiwgaGVhcE1hc2ssIGZsYWdzLCAmYnVmZmVyKTsKKyAgICAgICAgQUxPR1YoImlvbl9hbGxvYyhpb25GZCA9ICVkLCBzaXplID0gJXp1LCBhbGlnbiA9ICV6dSwgcHJvdCA9ICVkLCBmbGFncyA9ICVkKSAiCisgICAgICAgICAgICAgICJyZXR1cm5lZCAoJWQpIDsgYnVmZmVyID0gJWQiLAorICAgICAgICAgICAgICBpb25GZCwgYWxpZ25lZFNpemUsIGFsaWduLCBoZWFwTWFzaywgZmxhZ3MsIHJldCwgYnVmZmVyKTsKKyAgICAgICAgaWYgKHJldCA9PSAwKSB7CisgICAgICAgICAgICAvLyBnZXQgYnVmZmVyIGZkIGZvciBuYXRpdmUgaGFuZGxlIGNvbnN0cnVjdG9yCisgICAgICAgICAgICByZXQgPSBpb25fc2hhcmUoaW9uRmQsIGJ1ZmZlciwgJmJ1ZmZlckZkKTsKKyAgICAgICAgICAgIGlmIChyZXQgIT0gMCkgeworICAgICAgICAgICAgICAgIGlvbl9mcmVlKGlvbkZkLCBidWZmZXIpOworICAgICAgICAgICAgICAgIGJ1ZmZlciA9IC0xOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIHJldHVybiBuZXcgSW1wbChpb25GZCwgYWxpZ25lZFNpemUsIGJ1ZmZlckZkLCBidWZmZXIsIGlkLCByZXQpOworICAgIH0KKworICAgIGMyX3N0YXR1c190IG1hcChzaXplX3Qgb2Zmc2V0LCBzaXplX3Qgc2l6ZSwgQzJNZW1vcnlVc2FnZSB1c2FnZSwgQzJGZW5jZSAqZmVuY2UsIHZvaWQgKiphZGRyKSB7CisgICAgICAgICh2b2lkKWZlbmNlOyAvLyBUT0RPOiB3YWl0IGZvciBmZW5jZQorICAgICAgICAqYWRkciA9IG51bGxwdHI7CisgICAgICAgIGlmICghbU1hcHBpbmdzLmVtcHR5KCkpIHsKKyAgICAgICAgICAgIEFMT0dWKCJtdWx0aXBsZSBtYXAiKTsKKyAgICAgICAgICAgIC8vIFRPRE86IHRlY2huaWNhbGx5IHdlIHNob3VsZCByZXR1cm4gRFVQTElDQVRFIGhlcmUsIGJ1dCBvdXIgYmxvY2sgdmlld3MgZG9uJ3QKKyAgICAgICAgICAgIC8vIGFjdHVhbGx5IHVubWFwLCBzbyB3ZSBlbmQgdXAgcmVtYXBwaW5nIGFuIGlvbiBidWZmZXIgbXVsdGlwbGUgdGltZXMuCisgICAgICAgICAgICAvLworICAgICAgICAgICAgLy8gcmV0dXJuIEMyX0RVUExJQ0FURTsKKyAgICAgICAgfQorICAgICAgICBpZiAoc2l6ZSA9PSAwKSB7CisgICAgICAgICAgICByZXR1cm4gQzJfQkFEX1ZBTFVFOworICAgICAgICB9CisKKyAgICAgICAgaW50IHByb3QgPSBQUk9UX05PTkU7CisgICAgICAgIGludCBmbGFncyA9IE1BUF9TSEFSRUQ7CisgICAgICAgIGlmICh1c2FnZS5leHBlY3RlZCAmIEMyTWVtb3J5VXNhZ2U6OkNQVV9SRUFEKSB7CisgICAgICAgICAgICBwcm90IHw9IFBST1RfUkVBRDsKKyAgICAgICAgfQorICAgICAgICBpZiAodXNhZ2UuZXhwZWN0ZWQgJiBDMk1lbW9yeVVzYWdlOjpDUFVfV1JJVEUpIHsKKyAgICAgICAgICAgIHByb3QgfD0gUFJPVF9XUklURTsKKyAgICAgICAgfQorCisgICAgICAgIHNpemVfdCBhbGlnbm1lbnRCeXRlcyA9IG9mZnNldCAlIFBBR0VfU0laRTsKKyAgICAgICAgc2l6ZV90IG1hcE9mZnNldCA9IG9mZnNldCAtIGFsaWdubWVudEJ5dGVzOworICAgICAgICBzaXplX3QgbWFwU2l6ZSA9IHNpemUgKyBhbGlnbm1lbnRCeXRlczsKKyAgICAgICAgTWFwcGluZyBtYXAgPSB7IG51bGxwdHIsIGFsaWdubWVudEJ5dGVzLCBtYXBTaXplIH07CisKKyAgICAgICAgYzJfc3RhdHVzX3QgZXJyID0gQzJfT0s7CisgICAgICAgIGlmIChtTWFwRmQgPT0gLTEpIHsKKyAgICAgICAgICAgIGludCByZXQgPSBpb25fbWFwKG1Jb25GZCwgbUJ1ZmZlciwgbWFwU2l6ZSwgcHJvdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZsYWdzLCBtYXBPZmZzZXQsICh1bnNpZ25lZCBjaGFyKiopJm1hcC5hZGRyLCAmbU1hcEZkKTsKKyAgICAgICAgICAgIEFMT0dWKCJpb25fbWFwKGlvbkZkID0gJWQsIGhhbmRsZSA9ICVkLCBzaXplID0gJXp1LCBwcm90ID0gJWQsIGZsYWdzID0gJWQsICIKKyAgICAgICAgICAgICAgICAgICJvZmZzZXQgPSAlenUpIHJldHVybmVkICglZCkiLAorICAgICAgICAgICAgICAgICAgbUlvbkZkLCBtQnVmZmVyLCBtYXBTaXplLCBwcm90LCBmbGFncywgbWFwT2Zmc2V0LCByZXQpOworICAgICAgICAgICAgaWYgKHJldCkgeworICAgICAgICAgICAgICAgIG1NYXBGZCA9IC0xOworICAgICAgICAgICAgICAgIG1hcC5hZGRyID0gKmFkZHIgPSBudWxscHRyOworICAgICAgICAgICAgICAgIGVyciA9IGMyX21hcF9lcnJubzxFSU5WQUw+KC1yZXQpOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAqYWRkciA9ICh1aW50OF90ICopbWFwLmFkZHIgKyBhbGlnbm1lbnRCeXRlczsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIG1hcC5hZGRyID0gbW1hcChudWxscHRyLCBtYXBTaXplLCBwcm90LCBmbGFncywgbU1hcEZkLCBtYXBPZmZzZXQpOworICAgICAgICAgICAgQUxPR1YoIm1tYXAoc2l6ZSA9ICV6dSwgcHJvdCA9ICVkLCBmbGFncyA9ICVkLCBtYXBGZCA9ICVkLCBvZmZzZXQgPSAlenUpICIKKyAgICAgICAgICAgICAgICAgICJyZXR1cm5lZCAoJWQpIiwKKyAgICAgICAgICAgICAgICAgIG1hcFNpemUsIHByb3QsIGZsYWdzLCBtTWFwRmQsIG1hcE9mZnNldCwgZXJybm8pOworICAgICAgICAgICAgaWYgKG1hcC5hZGRyID09IE1BUF9GQUlMRUQpIHsKKyAgICAgICAgICAgICAgICBtYXAuYWRkciA9ICphZGRyID0gbnVsbHB0cjsKKyAgICAgICAgICAgICAgICBlcnIgPSBjMl9tYXBfZXJybm88RUlOVkFMPihlcnJubyk7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICphZGRyID0gKHVpbnQ4X3QgKiltYXAuYWRkciArIGFsaWdubWVudEJ5dGVzOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGlmIChtYXAuYWRkcikgeworICAgICAgICAgICAgbU1hcHBpbmdzLnB1c2hfYmFjayhtYXApOworICAgICAgICB9CisgICAgICAgIHJldHVybiBlcnI7CisgICAgfQorCisgICAgYzJfc3RhdHVzX3QgdW5tYXAodm9pZCAqYWRkciwgc2l6ZV90IHNpemUsIEMyRmVuY2UgKmZlbmNlKSB7CisgICAgICAgIGlmIChtTWFwRmQgPCAwIHx8IG1NYXBwaW5ncy5lbXB0eSgpKSB7CisgICAgICAgICAgICBBTE9HRCgidHJpZWQgdG8gdW5tYXAgdW5tYXBwZWQgYnVmZmVyIik7CisgICAgICAgICAgICByZXR1cm4gQzJfTk9UX0ZPVU5EOworICAgICAgICB9CisgICAgICAgIGZvciAoYXV0byBpdCA9IG1NYXBwaW5ncy5iZWdpbigpOyBpdCAhPSBtTWFwcGluZ3MuZW5kKCk7ICsraXQpIHsKKyAgICAgICAgICAgIGlmIChhZGRyICE9ICh1aW50OF90ICopaXQtPmFkZHIgKyBpdC0+YWxpZ25tZW50Qnl0ZXMgfHwKKyAgICAgICAgICAgICAgICAgICAgc2l6ZSArIGl0LT5hbGlnbm1lbnRCeXRlcyAhPSBpdC0+c2l6ZSkgeworICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaW50IGVyciA9IG11bm1hcChpdC0+YWRkciwgaXQtPnNpemUpOworICAgICAgICAgICAgaWYgKGVyciAhPSAwKSB7CisgICAgICAgICAgICAgICAgQUxPR0QoIm11bm1hcCBmYWlsZWQiKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gYzJfbWFwX2Vycm5vPEVJTlZBTD4oZXJybm8pOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKGZlbmNlKSB7CisgICAgICAgICAgICAgICAgKmZlbmNlID0gQzJGZW5jZSgpOyAvLyBub3QgdXNpbmcgZmVuY2VzCisgICAgICAgICAgICB9CisgICAgICAgICAgICAodm9pZCltTWFwcGluZ3MuZXJhc2UoaXQpOworICAgICAgICAgICAgQUxPR1YoInN1Y2Nlc3NmdWxseSB1bm1hcHBlZDogJWQiLCBtQnVmZmVyKTsKKyAgICAgICAgICAgIHJldHVybiBDMl9PSzsKKyAgICAgICAgfQorICAgICAgICBBTE9HRCgidW5tYXAgZmFpbGVkIHRvIGZpbmQgc3BlY2lmaWVkIG1hcCIpOworICAgICAgICByZXR1cm4gQzJfQkFEX1ZBTFVFOworICAgIH0KKworICAgIH5JbXBsKCkgeworICAgICAgICBpZiAoIW1NYXBwaW5ncy5lbXB0eSgpKSB7CisgICAgICAgICAgICBBTE9HRCgiRGFuZ2xpbmcgbWFwcGluZ3MhIik7CisgICAgICAgICAgICBmb3IgKGNvbnN0IE1hcHBpbmcgJm1hcCA6IG1NYXBwaW5ncykgeworICAgICAgICAgICAgICAgICh2b2lkKW11bm1hcChtYXAuYWRkciwgbWFwLnNpemUpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGlmIChtTWFwRmQgPj0gMCkgeworICAgICAgICAgICAgY2xvc2UobU1hcEZkKTsKKyAgICAgICAgICAgIG1NYXBGZCA9IC0xOworICAgICAgICB9CisgICAgICAgIGlmIChtSW5pdCA9PSBDMl9PSykgeworICAgICAgICAgICAgKHZvaWQpaW9uX2ZyZWUobUlvbkZkLCBtQnVmZmVyKTsKKyAgICAgICAgICAgIG5hdGl2ZV9oYW5kbGVfY2xvc2UoJm1IYW5kbGUpOworICAgICAgICB9CisgICAgICAgIGlmIChtSW9uRmQgPj0gMCkgeworICAgICAgICAgICAgY2xvc2UobUlvbkZkKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIGMyX3N0YXR1c190IHN0YXR1cygpIGNvbnN0IHsKKyAgICAgICAgcmV0dXJuIG1Jbml0OworICAgIH0KKworICAgIGNvbnN0IEMySGFuZGxlICpoYW5kbGUoKSBjb25zdCB7CisgICAgICAgIHJldHVybiAmbUhhbmRsZTsKKyAgICB9CisKKyAgICBDMkFsbG9jYXRvcjo6aWRfdCBnZXRBbGxvY2F0b3JJZCgpIGNvbnN0IHsKKyAgICAgICAgcmV0dXJuIG1JZDsKKyAgICB9CisKKyAgICBpb25fdXNlcl9oYW5kbGVfdCBpb25IYW5kbGUoKSBjb25zdCB7CisgICAgICAgIHJldHVybiBtQnVmZmVyOworICAgIH0KKworcHJpdmF0ZToKKyAgICBpbnQgbUlvbkZkOworICAgIEMySGFuZGxlSW9uIG1IYW5kbGU7CisgICAgaW9uX3VzZXJfaGFuZGxlX3QgbUJ1ZmZlcjsKKyAgICBDMkFsbG9jYXRvcjo6aWRfdCBtSWQ7CisgICAgYzJfc3RhdHVzX3QgbUluaXQ7CisgICAgaW50IG1NYXBGZDsgLy8gb25seSBvbmUgZm9yIG5vdworICAgIHN0cnVjdCBNYXBwaW5nIHsKKyAgICAgICAgdm9pZCAqYWRkcjsKKyAgICAgICAgc2l6ZV90IGFsaWdubWVudEJ5dGVzOworICAgICAgICBzaXplX3Qgc2l6ZTsKKyAgICB9OworICAgIHN0ZDo6bGlzdDxNYXBwaW5nPiBtTWFwcGluZ3M7Cit9OworCitjMl9zdGF0dXNfdCBDMkFsbG9jYXRpb25Jb246Om1hcCgKKyAgICBzaXplX3Qgb2Zmc2V0LCBzaXplX3Qgc2l6ZSwgQzJNZW1vcnlVc2FnZSB1c2FnZSwgQzJGZW5jZSAqZmVuY2UsIHZvaWQgKiphZGRyKSB7CisgICAgcmV0dXJuIG1JbXBsLT5tYXAob2Zmc2V0LCBzaXplLCB1c2FnZSwgZmVuY2UsIGFkZHIpOworfQorCitjMl9zdGF0dXNfdCBDMkFsbG9jYXRpb25Jb246OnVubWFwKHZvaWQgKmFkZHIsIHNpemVfdCBzaXplLCBDMkZlbmNlICpmZW5jZSkgeworICAgIHJldHVybiBtSW1wbC0+dW5tYXAoYWRkciwgc2l6ZSwgZmVuY2UpOworfQorCitjMl9zdGF0dXNfdCBDMkFsbG9jYXRpb25Jb246OnN0YXR1cygpIGNvbnN0IHsKKyAgICByZXR1cm4gbUltcGwtPnN0YXR1cygpOworfQorCitDMkFsbG9jYXRvcjo6aWRfdCBDMkFsbG9jYXRpb25Jb246OmdldEFsbG9jYXRvcklkKCkgY29uc3QgeworICAgIHJldHVybiBtSW1wbC0+Z2V0QWxsb2NhdG9ySWQoKTsKK30KKworYm9vbCBDMkFsbG9jYXRpb25Jb246OmVxdWFscyhjb25zdCBzdGQ6OnNoYXJlZF9wdHI8QzJMaW5lYXJBbGxvY2F0aW9uPiAmb3RoZXIpIGNvbnN0IHsKKyAgICBpZiAoIW90aGVyIHx8IG90aGVyLT5nZXRBbGxvY2F0b3JJZCgpICE9IGdldEFsbG9jYXRvcklkKCkpIHsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAgICAvLyBnZXQgdXNlciBoYW5kbGUgdG8gY29tcGFyZSBvYmplY3RzCisgICAgc3RkOjpzaGFyZWRfcHRyPEMyQWxsb2NhdGlvbklvbj4gb3RoZXJBc0lvbiA9IHN0ZDo6c3RhdGljX3BvaW50ZXJfY2FzdDxDMkFsbG9jYXRpb25Jb24+KG90aGVyKTsKKyAgICByZXR1cm4gbUltcGwtPmlvbkhhbmRsZSgpID09IG90aGVyQXNJb24tPm1JbXBsLT5pb25IYW5kbGUoKTsKK30KKworY29uc3QgQzJIYW5kbGUgKkMyQWxsb2NhdGlvbklvbjo6aGFuZGxlKCkgY29uc3QgeworICAgIHJldHVybiBtSW1wbC0+aGFuZGxlKCk7Cit9CisKK0MyQWxsb2NhdGlvbklvbjo6fkMyQWxsb2NhdGlvbklvbigpIHsKKyAgICBkZWxldGUgbUltcGw7Cit9CisKK0MyQWxsb2NhdGlvbklvbjo6QzJBbGxvY2F0aW9uSW9uKGludCBpb25GZCwgc2l6ZV90IHNpemUsIHNpemVfdCBhbGlnbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGhlYXBNYXNrLCB1bnNpZ25lZCBmbGFncywgQzJBbGxvY2F0b3I6OmlkX3QgaWQpCisgICAgOiBDMkxpbmVhckFsbG9jYXRpb24oc2l6ZSksCisgICAgICBtSW1wbChJbXBsOjpBbGxvYyhpb25GZCwgc2l6ZSwgYWxpZ24sIGhlYXBNYXNrLCBmbGFncywgaWQpKSB7IH0KKworQzJBbGxvY2F0aW9uSW9uOjpDMkFsbG9jYXRpb25Jb24oaW50IGlvbkZkLCBzaXplX3Qgc2l6ZSwgaW50IHNoYXJlRmQsIEMyQWxsb2NhdG9yOjppZF90IGlkKQorICAgIDogQzJMaW5lYXJBbGxvY2F0aW9uKHNpemUpLAorICAgICAgbUltcGwoSW1wbDo6SW1wb3J0KGlvbkZkLCBzaXplLCBzaGFyZUZkLCBpZCkpIHsgfQorCisvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gSU9OIEFMTE9DQVRPUiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLworQzJBbGxvY2F0b3JJb246OkMyQWxsb2NhdG9ySW9uKGlkX3QgaWQpCisgICAgOiBtSW5pdChDMl9PSyksCisgICAgICBtSW9uRmQoaW9uX29wZW4oKSkgeworICAgIGlmIChtSW9uRmQgPCAwKSB7CisgICAgICAgIHN3aXRjaCAoZXJybm8pIHsKKyAgICAgICAgY2FzZSBFTk9FTlQ6ICAgIG1Jbml0ID0gQzJfT01JVFRFRDsgYnJlYWs7CisgICAgICAgIGRlZmF1bHQ6ICAgICAgICBtSW5pdCA9IGMyX21hcF9lcnJubzxFQUNDRVM+KGVycm5vKTsgYnJlYWs7CisgICAgICAgIH0KKyAgICB9IGVsc2UgeworICAgICAgICBDMk1lbW9yeVVzYWdlIG1pblVzYWdlID0geyAwLCAwIH07CisgICAgICAgIEMyTWVtb3J5VXNhZ2UgbWF4VXNhZ2UgPSB7IEMyTWVtb3J5VXNhZ2U6OkNQVV9SRUFELCBDMk1lbW9yeVVzYWdlOjpDUFVfV1JJVEUgfTsKKyAgICAgICAgVHJhaXRzIHRyYWl0cyA9IHsgImFuZHJvaWQuYWxsb2NhdG9yLmlvbiIsIGlkLCBMSU5FQVIsIG1pblVzYWdlLCBtYXhVc2FnZSB9OworICAgICAgICBtVHJhaXRzID0gc3RkOjptYWtlX3NoYXJlZDxUcmFpdHM+KHRyYWl0cyk7CisgICAgICAgIG1CbG9ja1NpemUgPSA6OmdldHBhZ2VzaXplKCk7CisgICAgfQorfQorCitDMkFsbG9jYXRvcklvbjo6fkMyQWxsb2NhdG9ySW9uKCkgeworICAgIGlmIChtSW5pdCA9PSBDMl9PSykgeworICAgICAgICBpb25fY2xvc2UobUlvbkZkKTsKKyAgICB9Cit9CisKK0MyQWxsb2NhdG9yOjppZF90IEMyQWxsb2NhdG9ySW9uOjpnZXRJZCgpIGNvbnN0IHsKKyAgICBzdGQ6OmxvY2tfZ3VhcmQ8c3RkOjptdXRleD4gbG9jayhtVXNhZ2VNYXBwZXJMb2NrKTsKKyAgICByZXR1cm4gbVRyYWl0cy0+aWQ7Cit9CisKK0MyU3RyaW5nIEMyQWxsb2NhdG9ySW9uOjpnZXROYW1lKCkgY29uc3QgeworICAgIHN0ZDo6bG9ja19ndWFyZDxzdGQ6Om11dGV4PiBsb2NrKG1Vc2FnZU1hcHBlckxvY2spOworICAgIHJldHVybiBtVHJhaXRzLT5uYW1lOworfQorCitzdGQ6OnNoYXJlZF9wdHI8Y29uc3QgQzJBbGxvY2F0b3I6OlRyYWl0cz4gQzJBbGxvY2F0b3JJb246OmdldFRyYWl0cygpIGNvbnN0IHsKKyAgICBzdGQ6OmxvY2tfZ3VhcmQ8c3RkOjptdXRleD4gbG9jayhtVXNhZ2VNYXBwZXJMb2NrKTsKKyAgICByZXR1cm4gbVRyYWl0czsKK30KKwordm9pZCBDMkFsbG9jYXRvcklvbjo6c2V0VXNhZ2VNYXBwZXIoCisgICAgICAgIGNvbnN0IFVzYWdlTWFwcGVyRm4gJm1hcHBlciwgdWludDY0X3QgbWluVXNhZ2UsIHVpbnQ2NF90IG1heFVzYWdlLCB1aW50NjRfdCBibG9ja1NpemUpIHsKKyAgICBzdGQ6OmxvY2tfZ3VhcmQ8c3RkOjptdXRleD4gbG9jayhtVXNhZ2VNYXBwZXJMb2NrKTsKKyAgICBtVXNhZ2VNYXBwZXJDYWNoZS5jbGVhcigpOworICAgIG1Vc2FnZU1hcHBlckxydS5jbGVhcigpOworICAgIG1Vc2FnZU1hcHBlciA9IG1hcHBlcjsKKyAgICBUcmFpdHMgdHJhaXRzID0geworICAgICAgICBtVHJhaXRzLT5uYW1lLCBtVHJhaXRzLT5pZCwgTElORUFSLAorICAgICAgICBDMk1lbW9yeVVzYWdlKG1pblVzYWdlKSwgQzJNZW1vcnlVc2FnZShtYXhVc2FnZSkKKyAgICB9OworICAgIG1UcmFpdHMgPSBzdGQ6Om1ha2Vfc2hhcmVkPFRyYWl0cz4odHJhaXRzKTsKKyAgICBtQmxvY2tTaXplID0gYmxvY2tTaXplOworfQorCitzdGQ6OnNpemVfdCBDMkFsbG9jYXRvcklvbjo6TWFwcGVyS2V5SGFzaDo6b3BlcmF0b3IoKShjb25zdCBNYXBwZXJLZXkgJmspIGNvbnN0IHsKKyAgICByZXR1cm4gc3RkOjpoYXNoPHVpbnQ2NF90Pnt9KGsuZmlyc3QpIF4gc3RkOjpoYXNoPHNpemVfdD57fShrLnNlY29uZCk7Cit9CisKK2MyX3N0YXR1c190IEMyQWxsb2NhdG9ySW9uOjptYXBVc2FnZSgKKyAgICAgICAgQzJNZW1vcnlVc2FnZSB1c2FnZSwgc2l6ZV90IGNhcGFjaXR5LCBzaXplX3QgKmFsaWduLCB1bnNpZ25lZCAqaGVhcE1hc2ssIHVuc2lnbmVkICpmbGFncykgeworICAgIHN0ZDo6bG9ja19ndWFyZDxzdGQ6Om11dGV4PiBsb2NrKG1Vc2FnZU1hcHBlckxvY2spOworICAgIGMyX3N0YXR1c190IHJlcyA9IEMyX09LOworICAgIC8vIGFsaWduIGNhcGFjaXR5CisgICAgY2FwYWNpdHkgPSAoY2FwYWNpdHkgKyBtQmxvY2tTaXplIC0gMSkgJiB+KG1CbG9ja1NpemUgLSAxKTsKKyAgICBNYXBwZXJLZXkga2V5ID0gc3RkOjptYWtlX3BhaXIodXNhZ2UuZXhwZWN0ZWQsIGNhcGFjaXR5KTsKKyAgICBhdXRvIGVudHJ5ID0gbVVzYWdlTWFwcGVyQ2FjaGUuZmluZChrZXkpOworICAgIGlmIChlbnRyeSA9PSBtVXNhZ2VNYXBwZXJDYWNoZS5lbmQoKSkgeworICAgICAgICBpZiAobVVzYWdlTWFwcGVyKSB7CisgICAgICAgICAgICByZXMgPSBtVXNhZ2VNYXBwZXIodXNhZ2UsIGNhcGFjaXR5LCBhbGlnbiwgaGVhcE1hc2ssIGZsYWdzKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICphbGlnbiA9IDA7IC8vIFRPRE8gbWFrZSB0aGlzIDEKKyAgICAgICAgICAgICpoZWFwTWFzayA9IH4wOyAvLyBkZWZhdWx0IG1hc2sKKyAgICAgICAgICAgICpmbGFncyA9IDA7IC8vIGRlZmF1bHQgZmxhZ3MKKyAgICAgICAgICAgIHJlcyA9IEMyX05PX0lOSVQ7CisgICAgICAgIH0KKyAgICAgICAgLy8gYWRkIHVzYWdlIHRvIGNhY2hlCisgICAgICAgIE1hcHBlclZhbHVlIHZhbHVlID0gc3RkOjptYWtlX3R1cGxlKCphbGlnbiwgKmhlYXBNYXNrLCAqZmxhZ3MsIHJlcyk7CisgICAgICAgIG1Vc2FnZU1hcHBlckxydS5lbXBsYWNlX2Zyb250KGtleSwgdmFsdWUpOworICAgICAgICBtVXNhZ2VNYXBwZXJDYWNoZS5lbXBsYWNlKHN0ZDo6bWFrZV9wYWlyKGtleSwgbVVzYWdlTWFwcGVyTHJ1LmJlZ2luKCkpKTsKKyAgICAgICAgaWYgKG1Vc2FnZU1hcHBlckNhY2hlLnNpemUoKSA+IFVTQUdFX0xSVV9DQUNIRV9TSVpFKSB7CisgICAgICAgICAgICAvLyByZW1vdmUgTFJVIGVudHJ5CisgICAgICAgICAgICBNYXBwZXJLZXkgbHJ1S2V5ID0gbVVzYWdlTWFwcGVyTHJ1LmZyb250KCkuZmlyc3Q7CisgICAgICAgICAgICBtVXNhZ2VNYXBwZXJDYWNoZS5lcmFzZShscnVLZXkpOworICAgICAgICAgICAgbVVzYWdlTWFwcGVyTHJ1LnBvcF9iYWNrKCk7CisgICAgICAgIH0KKyAgICB9IGVsc2UgeworICAgICAgICAvLyBtb3ZlIGVudHJ5IHRvIE1SVQorICAgICAgICBtVXNhZ2VNYXBwZXJMcnUuc3BsaWNlKG1Vc2FnZU1hcHBlckxydS5iZWdpbigpLCBtVXNhZ2VNYXBwZXJMcnUsIGVudHJ5LT5zZWNvbmQpOworICAgICAgICBjb25zdCBNYXBwZXJWYWx1ZSAmdmFsdWUgPSBlbnRyeS0+c2Vjb25kLT5zZWNvbmQ7CisgICAgICAgIHN0ZDo6dGllKCphbGlnbiwgKmhlYXBNYXNrLCAqZmxhZ3MsIHJlcykgPSB2YWx1ZTsKKyAgICB9CisgICAgcmV0dXJuIHJlczsKK30KKworYzJfc3RhdHVzX3QgQzJBbGxvY2F0b3JJb246Om5ld0xpbmVhckFsbG9jYXRpb24oCisgICAgICAgIHVpbnQzMl90IGNhcGFjaXR5LCBDMk1lbW9yeVVzYWdlIHVzYWdlLCBzdGQ6OnNoYXJlZF9wdHI8QzJMaW5lYXJBbGxvY2F0aW9uPiAqYWxsb2NhdGlvbikgeworICAgIGlmIChhbGxvY2F0aW9uID09IG51bGxwdHIpIHsKKyAgICAgICAgcmV0dXJuIEMyX0JBRF9WQUxVRTsKKyAgICB9CisKKyAgICBhbGxvY2F0aW9uLT5yZXNldCgpOworICAgIGlmIChtSW5pdCAhPSBDMl9PSykgeworICAgICAgICByZXR1cm4gbUluaXQ7CisgICAgfQorCisgICAgc2l6ZV90IGFsaWduID0gMDsKKyAgICB1bnNpZ25lZCBoZWFwTWFzayA9IH4wOworICAgIHVuc2lnbmVkIGZsYWdzID0gMDsKKyAgICBjMl9zdGF0dXNfdCByZXQgPSBtYXBVc2FnZSh1c2FnZSwgY2FwYWNpdHksICZhbGlnbiwgJmhlYXBNYXNrLCAmZmxhZ3MpOworICAgIGlmIChyZXQgJiYgcmV0ICE9IEMyX05PX0lOSVQpIHsKKyAgICAgICAgcmV0dXJuIHJldDsKKyAgICB9CisKKyAgICBzdGQ6OnNoYXJlZF9wdHI8QzJBbGxvY2F0aW9uSW9uPiBhbGxvYworICAgICAgICA9IHN0ZDo6bWFrZV9zaGFyZWQ8QzJBbGxvY2F0aW9uSW9uPihkdXAobUlvbkZkKSwgY2FwYWNpdHksIGFsaWduLCBoZWFwTWFzaywgZmxhZ3MsIG1UcmFpdHMtPmlkKTsKKyAgICByZXQgPSBhbGxvYy0+c3RhdHVzKCk7CisgICAgaWYgKHJldCA9PSBDMl9PSykgeworICAgICAgICAqYWxsb2NhdGlvbiA9IGFsbG9jOworICAgIH0KKyAgICByZXR1cm4gcmV0OworfQorCitjMl9zdGF0dXNfdCBDMkFsbG9jYXRvcklvbjo6cHJpb3JMaW5lYXJBbGxvY2F0aW9uKAorICAgICAgICBjb25zdCBDMkhhbmRsZSAqaGFuZGxlLCBzdGQ6OnNoYXJlZF9wdHI8QzJMaW5lYXJBbGxvY2F0aW9uPiAqYWxsb2NhdGlvbikgeworICAgICphbGxvY2F0aW9uID0gbnVsbHB0cjsKKyAgICBpZiAobUluaXQgIT0gQzJfT0spIHsKKyAgICAgICAgcmV0dXJuIG1Jbml0OworICAgIH0KKworICAgIGlmICghQzJIYW5kbGVJb246OmlzVmFsaWQoaGFuZGxlKSkgeworICAgICAgICByZXR1cm4gQzJfQkFEX1ZBTFVFOworICAgIH0KKworICAgIC8vIFRPRE86IGdldCBjYXBhY2l0eSBhbmQgdmFsaWRhdGUgaXQKKyAgICBjb25zdCBDMkhhbmRsZUlvbiAqaCA9IHN0YXRpY19jYXN0PGNvbnN0IEMySGFuZGxlSW9uKj4oaGFuZGxlKTsKKyAgICBzdGQ6OnNoYXJlZF9wdHI8QzJBbGxvY2F0aW9uSW9uPiBhbGxvYworICAgICAgICA9IHN0ZDo6bWFrZV9zaGFyZWQ8QzJBbGxvY2F0aW9uSW9uPihkdXAobUlvbkZkKSwgaC0+c2l6ZSgpLCBoLT5idWZmZXJGZCgpLCBtVHJhaXRzLT5pZCk7CisgICAgYzJfc3RhdHVzX3QgcmV0ID0gYWxsb2MtPnN0YXR1cygpOworICAgIGlmIChyZXQgPT0gQzJfT0spIHsKKyAgICAgICAgKmFsbG9jYXRpb24gPSBhbGxvYzsKKyAgICAgICAgbmF0aXZlX2hhbmRsZV9kZWxldGUoY29uc3RfY2FzdDxuYXRpdmVfaGFuZGxlX3QqPigKKyAgICAgICAgICAgICAgICByZWludGVycHJldF9jYXN0PGNvbnN0IG5hdGl2ZV9oYW5kbGVfdCo+KGhhbmRsZSkpKTsKKyAgICB9CisgICAgcmV0dXJuIHJldDsKK30KKworYm9vbCBDMkFsbG9jYXRvcklvbjo6aXNWYWxpZChjb25zdCBDMkhhbmRsZSogY29uc3QgbykgeworICAgIHJldHVybiBDMkhhbmRsZUlvbjo6aXNWYWxpZChvKTsKK30KKworfSAvLyBuYW1lc3BhY2UgYW5kcm9pZAorCmRpZmYgLS1naXQgYS9tZWRpYS9jb2RlYzIvdm5kay9DMkJ1ZmZlci5jcHAgYi9tZWRpYS9jb2RlYzIvdm5kay9DMkJ1ZmZlci5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDczNjZjYQotLS0gL2Rldi9udWxsCisrKyBiL21lZGlhL2NvZGVjMi92bmRrL0MyQnVmZmVyLmNwcApAQCAtMCwwICsxLDEzMDQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworCisvLyNkZWZpbmUgTE9HX05ERUJVRyAwCisjZGVmaW5lIExPR19UQUcgIkMyQnVmZmVyIgorI2luY2x1ZGUgPHV0aWxzL0xvZy5oPgorCisjaW5jbHVkZSA8bGlzdD4KKyNpbmNsdWRlIDxtYXA+CisjaW5jbHVkZSA8bXV0ZXg+CisKKyNpbmNsdWRlIDxDMkFsbG9jYXRvcklvbi5oPgorI2luY2x1ZGUgPEMyQWxsb2NhdG9yR3JhbGxvYy5oPgorI2luY2x1ZGUgPEMyQnVmZmVyUHJpdi5oPgorI2luY2x1ZGUgPEMyQmxvY2tJbnRlcm5hbC5oPgorI2luY2x1ZGUgPGJ1ZmZlcnBvb2wvQ2xpZW50TWFuYWdlci5oPgorCituYW1lc3BhY2UgeworCit1c2luZyBhbmRyb2lkOjpDMkFsbG9jYXRvckdyYWxsb2M7Cit1c2luZyBhbmRyb2lkOjpDMkFsbG9jYXRvcklvbjsKK3VzaW5nIGFuZHJvaWQ6OmhhcmR3YXJlOjptZWRpYTo6YnVmZmVycG9vbDo6QnVmZmVyUG9vbERhdGE7Cit1c2luZyBhbmRyb2lkOjpoYXJkd2FyZTo6bWVkaWE6OmJ1ZmZlcnBvb2w6OlYxXzA6OlJlc3VsdFN0YXR1czsKK3VzaW5nIGFuZHJvaWQ6OmhhcmR3YXJlOjptZWRpYTo6YnVmZmVycG9vbDo6VjFfMDo6aW1wbGVtZW50YXRpb246OkJ1ZmZlclBvb2xBbGxvY2F0aW9uOwordXNpbmcgYW5kcm9pZDo6aGFyZHdhcmU6Om1lZGlhOjpidWZmZXJwb29sOjpWMV8wOjppbXBsZW1lbnRhdGlvbjo6QnVmZmVyUG9vbEFsbG9jYXRvcjsKK3VzaW5nIGFuZHJvaWQ6OmhhcmR3YXJlOjptZWRpYTo6YnVmZmVycG9vbDo6VjFfMDo6aW1wbGVtZW50YXRpb246OkNsaWVudE1hbmFnZXI7Cit1c2luZyBhbmRyb2lkOjpoYXJkd2FyZTo6bWVkaWE6OmJ1ZmZlcnBvb2w6OlYxXzA6OmltcGxlbWVudGF0aW9uOjpDb25uZWN0aW9uSWQ7Cit1c2luZyBhbmRyb2lkOjpoYXJkd2FyZTo6bWVkaWE6OmJ1ZmZlcnBvb2w6OlYxXzA6OmltcGxlbWVudGF0aW9uOjpJTlZBTElEX0NPTk5FQ1RJT05JRDsKKworLy8gVGhpcyBhbm9ueW1vdXMgbmFtZXNwYWNlIGNvbnRhaW5zIHRoZSBoZWxwZXIgY2xhc3NlcyB0aGF0IGFsbG93IG91ciBpbXBsZW1lbnRhdGlvbiB0byBjcmVhdGUKKy8vIGJsb2NrL2J1ZmZlciBvYmplY3RzLgorLy8KKy8vIEluaGVyaXQgZnJvbSB0aGUgcGFyZW50LCBzaGFyZSB3aXRoIHRoZSBmcmllbmQuCitjbGFzcyBSZWFkVmlld0J1ZGR5IDogcHVibGljIEMyUmVhZFZpZXcgeworICAgIHVzaW5nIEMyUmVhZFZpZXc6OkMyUmVhZFZpZXc7CisgICAgZnJpZW5kIGNsYXNzIDo6QzJDb25zdExpbmVhckJsb2NrOworfTsKKworY2xhc3MgV3JpdGVWaWV3QnVkZHkgOiBwdWJsaWMgQzJXcml0ZVZpZXcgeworICAgIHVzaW5nIEMyV3JpdGVWaWV3OjpDMldyaXRlVmlldzsKKyAgICBmcmllbmQgY2xhc3MgOjpDMkxpbmVhckJsb2NrOworfTsKKworY2xhc3MgQ29uc3RMaW5lYXJCbG9ja0J1ZGR5IDogcHVibGljIEMyQ29uc3RMaW5lYXJCbG9jayB7CisgICAgdXNpbmcgQzJDb25zdExpbmVhckJsb2NrOjpDMkNvbnN0TGluZWFyQmxvY2s7CisgICAgZnJpZW5kIGNsYXNzIDo6QzJMaW5lYXJCbG9jazsKK307CisKK2NsYXNzIExpbmVhckJsb2NrQnVkZHkgOiBwdWJsaWMgQzJMaW5lYXJCbG9jayB7CisgICAgdXNpbmcgQzJMaW5lYXJCbG9jazo6QzJMaW5lYXJCbG9jazsKKyAgICBmcmllbmQgY2xhc3MgOjpDMkJhc2ljTGluZWFyQmxvY2tQb29sOworfTsKKworY2xhc3MgQWNxdWlyYWJsZVJlYWRWaWV3QnVkZHkgOiBwdWJsaWMgQzJBY3F1aXJhYmxlPEMyUmVhZFZpZXc+IHsKKyAgICB1c2luZyBDMkFjcXVpcmFibGU6OkMyQWNxdWlyYWJsZTsKKyAgICBmcmllbmQgY2xhc3MgOjpDMkNvbnN0TGluZWFyQmxvY2s7Cit9OworCitjbGFzcyBBY3F1aXJhYmxlV3JpdGVWaWV3QnVkZHkgOiBwdWJsaWMgQzJBY3F1aXJhYmxlPEMyV3JpdGVWaWV3PiB7CisgICAgdXNpbmcgQzJBY3F1aXJhYmxlOjpDMkFjcXVpcmFibGU7CisgICAgZnJpZW5kIGNsYXNzIDo6QzJMaW5lYXJCbG9jazsKK307CisKK2NsYXNzIEdyYXBoaWNWaWV3QnVkZHkgOiBwdWJsaWMgQzJHcmFwaGljVmlldyB7CisgICAgdXNpbmcgQzJHcmFwaGljVmlldzo6QzJHcmFwaGljVmlldzsKKyAgICBmcmllbmQgY2xhc3MgOjpDMkNvbnN0R3JhcGhpY0Jsb2NrOworICAgIGZyaWVuZCBjbGFzcyA6OkMyR3JhcGhpY0Jsb2NrOworfTsKKworY2xhc3MgQWNxdWlyYWJsZUNvbnN0R3JhcGhpY1ZpZXdCdWRkeSA6IHB1YmxpYyBDMkFjcXVpcmFibGU8Y29uc3QgQzJHcmFwaGljVmlldz4geworICAgIHVzaW5nIEMyQWNxdWlyYWJsZTo6QzJBY3F1aXJhYmxlOworICAgIGZyaWVuZCBjbGFzcyA6OkMyQ29uc3RHcmFwaGljQmxvY2s7Cit9OworCitjbGFzcyBBY3F1aXJhYmxlR3JhcGhpY1ZpZXdCdWRkeSA6IHB1YmxpYyBDMkFjcXVpcmFibGU8QzJHcmFwaGljVmlldz4geworICAgIHVzaW5nIEMyQWNxdWlyYWJsZTo6QzJBY3F1aXJhYmxlOworICAgIGZyaWVuZCBjbGFzcyA6OkMyR3JhcGhpY0Jsb2NrOworfTsKKworY2xhc3MgQ29uc3RHcmFwaGljQmxvY2tCdWRkeSA6IHB1YmxpYyBDMkNvbnN0R3JhcGhpY0Jsb2NrIHsKKyAgICB1c2luZyBDMkNvbnN0R3JhcGhpY0Jsb2NrOjpDMkNvbnN0R3JhcGhpY0Jsb2NrOworICAgIGZyaWVuZCBjbGFzcyA6OkMyR3JhcGhpY0Jsb2NrOworfTsKKworY2xhc3MgR3JhcGhpY0Jsb2NrQnVkZHkgOiBwdWJsaWMgQzJHcmFwaGljQmxvY2sgeworICAgIHVzaW5nIEMyR3JhcGhpY0Jsb2NrOjpDMkdyYXBoaWNCbG9jazsKKyAgICBmcmllbmQgY2xhc3MgOjpDMkJhc2ljR3JhcGhpY0Jsb2NrUG9vbDsKK307CisKK2NsYXNzIEJ1ZmZlckRhdGFCdWRkeSA6IHB1YmxpYyBDMkJ1ZmZlckRhdGEgeworICAgIHVzaW5nIEMyQnVmZmVyRGF0YTo6QzJCdWZmZXJEYXRhOworICAgIGZyaWVuZCBjbGFzcyA6OkMyQnVmZmVyOworfTsKKworfSAgLy8gbmFtZXNwYWNlCisKKy8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAxRCBCTE9DSyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLworCisvKioKKyAqIFRoaXMgY2xhc3MgaXMgdGhlIGJhc2UgY2xhc3MgZm9yIGFsbCAxRCBibG9jayBhbmQgdmlldyBpbXBsZW1lbnRhdGlvbnMuCisgKgorICogVGhpcyBpcyBiYXNpY2FsbHkganVzdCBhIHBsYWNlaG9sZGVyIGZvciB0aGUgdW5kZXJseWluZyAxRCBhbGxvY2F0aW9uIGFuZCB0aGUgcmFuZ2Ugb2YgdGhlCisgKiBhbGxvdGVkIHBvcnRpb24gdG8gdGhpcyBibG9jay4gVGhlcmUgaXMgYWxzbyBhIHBsYWNlaG9sZGVyIGZvciBhIGJsb2NrcG9vbCBkYXRhLgorICovCitjbGFzcyBDMl9ISURFIF9DMkJsb2NrMURJbXBsIDogcHVibGljIF9DMkxpbmVhclJhbmdlQXNwZWN0IHsKK3B1YmxpYzoKKyAgICBfQzJCbG9jazFESW1wbChjb25zdCBzdGQ6OnNoYXJlZF9wdHI8QzJMaW5lYXJBbGxvY2F0aW9uPiAmYWxsb2MsCisgICAgICAgICAgICBjb25zdCBzdGQ6OnNoYXJlZF9wdHI8X0MyQmxvY2tQb29sRGF0YT4gJnBvb2xEYXRhID0gbnVsbHB0ciwKKyAgICAgICAgICAgIHNpemVfdCBvZmZzZXQgPSAwLCBzaXplX3Qgc2l6ZSA9IH4oc2l6ZV90KTApCisgICAgICAgIDogX0MyTGluZWFyUmFuZ2VBc3BlY3QoYWxsb2MuZ2V0KCksIG9mZnNldCwgc2l6ZSksCisgICAgICAgICAgbUFsbG9jYXRpb24oYWxsb2MpLAorICAgICAgICAgIG1Qb29sRGF0YShwb29sRGF0YSkgeyB9CisKKyAgICBfQzJCbG9jazFESW1wbChjb25zdCBfQzJCbG9jazFESW1wbCAmb3RoZXIsIHNpemVfdCBvZmZzZXQgPSAwLCBzaXplX3Qgc2l6ZSA9IH4oc2l6ZV90KTApCisgICAgICAgIDogX0MyTGluZWFyUmFuZ2VBc3BlY3QoJm90aGVyLCBvZmZzZXQsIHNpemUpLAorICAgICAgICAgIG1BbGxvY2F0aW9uKG90aGVyLm1BbGxvY2F0aW9uKSwKKyAgICAgICAgICBtUG9vbERhdGEob3RoZXIubVBvb2xEYXRhKSB7IH0KKworICAgIC8qKiByZXR1cm5zIHBvb2wgZGF0YSAgKi8KKyAgICBzdGQ6OnNoYXJlZF9wdHI8X0MyQmxvY2tQb29sRGF0YT4gcG9vbERhdGEoKSBjb25zdCB7CisgICAgICAgIHJldHVybiBtUG9vbERhdGE7CisgICAgfQorCisgICAgLyoqIHJldHVybnMgbmF0aXZlIGhhbmRsZSAqLworICAgIGNvbnN0IEMySGFuZGxlICpoYW5kbGUoKSBjb25zdCB7CisgICAgICAgIHJldHVybiBtQWxsb2NhdGlvbiA/IG1BbGxvY2F0aW9uLT5oYW5kbGUoKSA6IG51bGxwdHI7CisgICAgfQorCisgICAgLyoqIHJldHVybnMgdGhlIGFsbG9jYXRvcidzIElEICovCisgICAgQzJBbGxvY2F0b3I6OmlkX3QgZ2V0QWxsb2NhdG9ySWQoKSBjb25zdCB7CisgICAgICAgIC8vIEJBRF9JRCBjYW4gb25seSBoYXBwZW4gaWYgdGhpcyBJbXBsIGNsYXNzIGlzIGluaXRpYWxpemVkIGZvciBhIHZpZXcgLSBuZXZlciBmb3IgYSBibG9jay4KKyAgICAgICAgcmV0dXJuIG1BbGxvY2F0aW9uID8gbUFsbG9jYXRpb24tPmdldEFsbG9jYXRvcklkKCkgOiBDMkFsbG9jYXRvcjo6QkFEX0lEOworICAgIH0KKworICAgIHN0ZDo6c2hhcmVkX3B0cjxDMkxpbmVhckFsbG9jYXRpb24+IGdldEFsbG9jYXRpb24oKSBjb25zdCB7CisgICAgICAgIHJldHVybiBtQWxsb2NhdGlvbjsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgc3RkOjpzaGFyZWRfcHRyPEMyTGluZWFyQWxsb2NhdGlvbj4gbUFsbG9jYXRpb247CisgICAgc3RkOjpzaGFyZWRfcHRyPF9DMkJsb2NrUG9vbERhdGE+IG1Qb29sRGF0YTsKK307CisKKy8qKgorICogVGhpcyBjbGFzcyBjb250YWlucyB0aGUgbWFwcGVkIGRhdGEgcG9pbnRlciwgYW5kIHRoZSBwb3RlbnRpYWwgZXJyb3IuCisgKgorICogcmFuZ2UgaXMgdGhlIG1hcHBlZCByYW5nZSBvZiB0aGUgdW5kZXJseWluZyBhbGxvY2F0aW9uICh3aGljaCBpcyBwYXJ0IG9mIHRoZSBhbGxvdHRlZAorICogcmFuZ2UpLgorICovCitjbGFzcyBDMl9ISURFIF9DMk1hcHBlZEJsb2NrMURJbXBsIDogcHVibGljIF9DMkJsb2NrMURJbXBsIHsKK3B1YmxpYzoKKyAgICBfQzJNYXBwZWRCbG9jazFESW1wbChjb25zdCBfQzJCbG9jazFESW1wbCAmYmxvY2ssIHVpbnQ4X3QgKmRhdGEsCisgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IG9mZnNldCA9IDAsIHNpemVfdCBzaXplID0gfihzaXplX3QpMCkKKyAgICAgICAgOiBfQzJCbG9jazFESW1wbChibG9jaywgb2Zmc2V0LCBzaXplKSwgbURhdGEoZGF0YSksIG1FcnJvcihDMl9PSykgeyB9CisKKyAgICBfQzJNYXBwZWRCbG9jazFESW1wbChjMl9zdGF0dXNfdCBlcnJvcikKKyAgICAgICAgOiBfQzJCbG9jazFESW1wbChudWxscHRyKSwgbURhdGEobnVsbHB0ciksIG1FcnJvcihlcnJvcikgeworICAgICAgICAvLyBDSEVDSyhlcnJvciAhPSBDMl9PSyk7CisgICAgfQorCisgICAgY29uc3QgdWludDhfdCAqZGF0YSgpIGNvbnN0IHsKKyAgICAgICAgcmV0dXJuIG1EYXRhOworICAgIH0KKworICAgIHVpbnQ4X3QgKmRhdGEoKSB7CisgICAgICAgIHJldHVybiBtRGF0YTsKKyAgICB9CisKKyAgICBjMl9zdGF0dXNfdCBlcnJvcigpIGNvbnN0IHsKKyAgICAgICAgcmV0dXJuIG1FcnJvcjsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgdWludDhfdCAqbURhdGE7CisgICAgYzJfc3RhdHVzX3QgbUVycm9yOworfTsKKworLyoqCisgKiBCbG9jayBpbXBsZW1lbnRhdGlvbi4KKyAqLworY2xhc3MgQzJCbG9jazFEOjpJbXBsIDogcHVibGljIF9DMkJsb2NrMURJbXBsIHsKKyAgICB1c2luZyBfQzJCbG9jazFESW1wbDo6X0MyQmxvY2sxREltcGw7Cit9OworCitjb25zdCBDMkhhbmRsZSAqQzJCbG9jazFEOjpoYW5kbGUoKSBjb25zdCB7CisgICAgcmV0dXJuIG1JbXBsLT5oYW5kbGUoKTsKK307CisKK0MyQWxsb2NhdG9yOjppZF90IEMyQmxvY2sxRDo6Z2V0QWxsb2NhdG9ySWQoKSBjb25zdCB7CisgICAgcmV0dXJuIG1JbXBsLT5nZXRBbGxvY2F0b3JJZCgpOworfTsKKworQzJCbG9jazFEOjpDMkJsb2NrMUQoc3RkOjpzaGFyZWRfcHRyPEltcGw+IGltcGwsIGNvbnN0IF9DMkxpbmVhclJhbmdlQXNwZWN0ICZyYW5nZSkKKyAgICAvLyBhbHdheXMgY2xhbXAgc3VicmFuZ2UgdG8gcGFyZW50IChpbXBsKSByYW5nZSBmb3Igc2FmZXR5CisgICAgOiBfQzJMaW5lYXJSYW5nZUFzcGVjdChpbXBsLmdldCgpLCByYW5nZS5vZmZzZXQoKSwgcmFuZ2Uuc2l6ZSgpKSwgbUltcGwoaW1wbCkgeworfQorCisvKioKKyAqIFJlYWQgdmlldyBpbXBsZW1lbnRhdGlvbi4KKyAqCisgKiByYW5nZSBvZiBJbXBsIGlzIHRoZSBtYXBwZWQgcmFuZ2Ugb2YgdGhlIHVuZGVybHlpbmcgYWxsb2NhdGlvbiAod2hpY2ggaXMgcGFydCBvZiB0aGUgYWxsb3R0ZWQKKyAqIHJhbmdlKS4gcmFuZ2Ugb2YgVmlldyBpcyAwIHRvIGNhcGFjaXR5KCkgKG5vdCByZXByZXNlbnRlZCBhcyBhbiBhY3R1YWwgcmFuZ2UpLiBUaGlzIG1hcHMgdG8gYQorICogc3VicmFuZ2Ugb2YgSW1wbCByYW5nZSBzdGFydGluZyBhdCBtSW1wbC0+b2Zmc2V0KCkgKyBfbU9mZnNldC4KKyAqLworY2xhc3MgQzJSZWFkVmlldzo6SW1wbCA6IHB1YmxpYyBfQzJNYXBwZWRCbG9jazFESW1wbCB7CisgICAgdXNpbmcgX0MyTWFwcGVkQmxvY2sxREltcGw6Ol9DMk1hcHBlZEJsb2NrMURJbXBsOworfTsKKworQzJSZWFkVmlldzo6QzJSZWFkVmlldyhzdGQ6OnNoYXJlZF9wdHI8SW1wbD4gaW1wbCwgdWludDMyX3Qgb2Zmc2V0LCB1aW50MzJfdCBzaXplKQorICAgIDogX0MyTGluZWFyQ2FwYWNpdHlBc3BlY3QoQzJMaW5lYXJDYXBhY2l0eShpbXBsLT5zaXplKCkpLnJhbmdlKG9mZnNldCwgc2l6ZSkuc2l6ZSgpKSwKKyAgICAgIG1JbXBsKGltcGwpLAorICAgICAgbU9mZnNldChDMkxpbmVhckNhcGFjaXR5KGltcGwtPnNpemUoKSkucmFuZ2Uob2Zmc2V0LCBzaXplKS5vZmZzZXQoKSkgeyB9CisKK0MyUmVhZFZpZXc6OkMyUmVhZFZpZXcoYzJfc3RhdHVzX3QgZXJyb3IpCisgICAgOiBfQzJMaW5lYXJDYXBhY2l0eUFzcGVjdCgwdSksIG1JbXBsKHN0ZDo6bWFrZV9zaGFyZWQ8SW1wbD4oZXJyb3IpKSwgbU9mZnNldCgwdSkgeworICAgIC8vIENIRUNLKGVycm9yICE9IEMyX09LKTsKK30KKworY29uc3QgdWludDhfdCAqQzJSZWFkVmlldzo6ZGF0YSgpIGNvbnN0IHsKKyAgICByZXR1cm4gbUltcGwtPmVycm9yKCkgPyBudWxscHRyIDogbUltcGwtPmRhdGEoKSArIG1PZmZzZXQ7Cit9CisKK2MyX3N0YXR1c190IEMyUmVhZFZpZXc6OmVycm9yKCkgY29uc3QgeworICAgIHJldHVybiBtSW1wbC0+ZXJyb3IoKTsKK30KKworQzJSZWFkVmlldyBDMlJlYWRWaWV3OjpzdWJWaWV3KHNpemVfdCBvZmZzZXQsIHNpemVfdCBzaXplKSBjb25zdCB7CisgICAgQzJMaW5lYXJSYW5nZSBzdWJSYW5nZSgqdGhpcywgb2Zmc2V0LCBzaXplKTsKKyAgICByZXR1cm4gQzJSZWFkVmlldyhtSW1wbCwgbU9mZnNldCArIHN1YlJhbmdlLm9mZnNldCgpLCBzdWJSYW5nZS5zaXplKCkpOworfQorCisvKioKKyAqIFdyaXRlIHZpZXcgaW1wbGVtZW50YXRpb24uCisgKi8KK2NsYXNzIEMyV3JpdGVWaWV3OjpJbXBsIDogcHVibGljIF9DMk1hcHBlZEJsb2NrMURJbXBsIHsKKyAgICB1c2luZyBfQzJNYXBwZWRCbG9jazFESW1wbDo6X0MyTWFwcGVkQmxvY2sxREltcGw7Cit9OworCitDMldyaXRlVmlldzo6QzJXcml0ZVZpZXcoc3RkOjpzaGFyZWRfcHRyPEltcGw+IGltcGwpCisvLyBVR0xZOiBfQzJMaW5lYXJSYW5nZUFzcGVjdCByZXF1aXJlcyBhIGJvbmEtZmlkZSBvYmplY3QgZm9yIGNhcGFjaXR5IHRvIHByZXZlbnQgc3Bvb2ZpbmcsIHNvCisvLyB0aGlzIGlzIHdoYXQgd2UgaGF2ZSB0byBkby4KKy8vIFRPRE86IHVzZSBjaGlsZFJhbmdlCisgICAgOiBfQzJFZGl0YWJsZUxpbmVhclJhbmdlQXNwZWN0KHN0ZDo6bWFrZV91bmlxdWU8QzJMaW5lYXJDYXBhY2l0eT4oaW1wbC0+c2l6ZSgpKS5nZXQoKSksIG1JbXBsKGltcGwpIHsgfQorCitDMldyaXRlVmlldzo6QzJXcml0ZVZpZXcoYzJfc3RhdHVzX3QgZXJyb3IpCisgICAgOiBfQzJFZGl0YWJsZUxpbmVhclJhbmdlQXNwZWN0KG51bGxwdHIpLCBtSW1wbChzdGQ6Om1ha2Vfc2hhcmVkPEltcGw+KGVycm9yKSkge30KKwordWludDhfdCAqQzJXcml0ZVZpZXc6OmJhc2UoKSB7IHJldHVybiBtSW1wbC0+ZGF0YSgpOyB9CisKK3VpbnQ4X3QgKkMyV3JpdGVWaWV3OjpkYXRhKCkgeyByZXR1cm4gbUltcGwtPmRhdGEoKSArIG9mZnNldCgpOyB9CisKK2MyX3N0YXR1c190IEMyV3JpdGVWaWV3OjplcnJvcigpIGNvbnN0IHsgcmV0dXJuIG1JbXBsLT5lcnJvcigpOyB9CisKKy8qKgorICogQ29uc3QgbGluZWFyIGJsb2NrIGltcGxlbWVudGF0aW9uLgorICovCitDMkNvbnN0TGluZWFyQmxvY2s6OkMyQ29uc3RMaW5lYXJCbG9jayhzdGQ6OnNoYXJlZF9wdHI8SW1wbD4gaW1wbCwgY29uc3QgX0MyTGluZWFyUmFuZ2VBc3BlY3QgJnJhbmdlLCBDMkZlbmNlIGZlbmNlKQorICAgIDogQzJCbG9jazFEKGltcGwsIHJhbmdlKSwgbUZlbmNlKGZlbmNlKSB7IH0KKworQzJBY3F1aXJhYmxlPEMyUmVhZFZpZXc+IEMyQ29uc3RMaW5lYXJCbG9jazo6bWFwKCkgY29uc3QgeworICAgIHZvaWQgKmJhc2UgPSBudWxscHRyOworICAgIHVpbnQzMl90IGxlbiA9IHNpemUoKTsKKyAgICBjMl9zdGF0dXNfdCBlcnJvciA9IG1JbXBsLT5nZXRBbGxvY2F0aW9uKCktPm1hcCgKKyAgICAgICAgICAgIG9mZnNldCgpLCBsZW4sIHsgQzJNZW1vcnlVc2FnZTo6Q1BVX1JFQUQsIDAgfSwgbnVsbHB0ciwgJmJhc2UpOworICAgIC8vIFRPRE86IHdhaXQgb24gZmVuY2UKKyAgICBpZiAoZXJyb3IgPT0gQzJfT0spIHsKKyAgICAgICAgc3RkOjpzaGFyZWRfcHRyPFJlYWRWaWV3QnVkZHk6OkltcGw+IHJ2aSA9IHN0ZDo6c2hhcmVkX3B0cjxSZWFkVmlld0J1ZGR5OjpJbXBsPigKKyAgICAgICAgICAgICAgICBuZXcgUmVhZFZpZXdCdWRkeTo6SW1wbCgqbUltcGwsICh1aW50OF90ICopYmFzZSwgb2Zmc2V0KCksIGxlbiksCisgICAgICAgICAgICAgICAgW2Jhc2UsIGxlbl0oUmVhZFZpZXdCdWRkeTo6SW1wbCAqaSkgeworICAgICAgICAgICAgICAgICAgICAodm9pZClpLT5nZXRBbGxvY2F0aW9uKCktPnVubWFwKGJhc2UsIGxlbiwgbnVsbHB0cik7CisgICAgICAgICAgICAgICAgICAgIGRlbGV0ZSBpOworICAgICAgICB9KTsKKyAgICAgICAgcmV0dXJuIEFjcXVpcmFibGVSZWFkVmlld0J1ZGR5KGVycm9yLCBDMkZlbmNlKCksIFJlYWRWaWV3QnVkZHkocnZpLCAwLCBsZW4pKTsKKyAgICB9IGVsc2UgeworICAgICAgICByZXR1cm4gQWNxdWlyYWJsZVJlYWRWaWV3QnVkZHkoZXJyb3IsIEMyRmVuY2UoKSwgUmVhZFZpZXdCdWRkeShlcnJvcikpOworICAgIH0KK30KKworQzJDb25zdExpbmVhckJsb2NrIEMyQ29uc3RMaW5lYXJCbG9jazo6c3ViQmxvY2soc2l6ZV90IG9mZnNldF8sIHNpemVfdCBzaXplXykgY29uc3QgeworICAgIEMyTGluZWFyUmFuZ2Ugc3ViUmFuZ2UoKm1JbXBsLCBvZmZzZXRfLCBzaXplXyk7CisgICAgcmV0dXJuIEMyQ29uc3RMaW5lYXJCbG9jayhtSW1wbCwgc3ViUmFuZ2UsIG1GZW5jZSk7Cit9CisKKy8qKgorICogTGluZWFyIGJsb2NrIGltcGxlbWVudGF0aW9uLgorICovCitDMkxpbmVhckJsb2NrOjpDMkxpbmVhckJsb2NrKHN0ZDo6c2hhcmVkX3B0cjxJbXBsPiBpbXBsLCBjb25zdCBfQzJMaW5lYXJSYW5nZUFzcGVjdCAmcmFuZ2UpCisgICAgOiBDMkJsb2NrMUQoaW1wbCwgcmFuZ2UpIHsgfQorCitDMkFjcXVpcmFibGU8QzJXcml0ZVZpZXc+IEMyTGluZWFyQmxvY2s6Om1hcCgpIHsKKyAgICB2b2lkICpiYXNlID0gbnVsbHB0cjsKKyAgICB1aW50MzJfdCBsZW4gPSBzaXplKCk7CisgICAgYzJfc3RhdHVzX3QgZXJyb3IgPSBtSW1wbC0+Z2V0QWxsb2NhdGlvbigpLT5tYXAoCisgICAgICAgICAgICBvZmZzZXQoKSwgbGVuLCB7IEMyTWVtb3J5VXNhZ2U6OkNQVV9SRUFELCBDMk1lbW9yeVVzYWdlOjpDUFVfV1JJVEUgfSwgbnVsbHB0ciwgJmJhc2UpOworICAgIC8vIFRPRE86IHdhaXQgb24gZmVuY2UKKyAgICBpZiAoZXJyb3IgPT0gQzJfT0spIHsKKyAgICAgICAgc3RkOjpzaGFyZWRfcHRyPFdyaXRlVmlld0J1ZGR5OjpJbXBsPiBydmkgPSBzdGQ6OnNoYXJlZF9wdHI8V3JpdGVWaWV3QnVkZHk6OkltcGw+KAorICAgICAgICAgICAgICAgIG5ldyBXcml0ZVZpZXdCdWRkeTo6SW1wbCgqbUltcGwsICh1aW50OF90ICopYmFzZSwgMCwgbGVuKSwKKyAgICAgICAgICAgICAgICBbYmFzZSwgbGVuXShXcml0ZVZpZXdCdWRkeTo6SW1wbCAqaSkgeworICAgICAgICAgICAgICAgICAgICAodm9pZClpLT5nZXRBbGxvY2F0aW9uKCktPnVubWFwKGJhc2UsIGxlbiwgbnVsbHB0cik7CisgICAgICAgICAgICAgICAgICAgIGRlbGV0ZSBpOworICAgICAgICB9KTsKKyAgICAgICAgcmV0dXJuIEFjcXVpcmFibGVXcml0ZVZpZXdCdWRkeShlcnJvciwgQzJGZW5jZSgpLCBXcml0ZVZpZXdCdWRkeShydmkpKTsKKyAgICB9IGVsc2UgeworICAgICAgICByZXR1cm4gQWNxdWlyYWJsZVdyaXRlVmlld0J1ZGR5KGVycm9yLCBDMkZlbmNlKCksIFdyaXRlVmlld0J1ZGR5KGVycm9yKSk7CisgICAgfQorfQorCitDMkNvbnN0TGluZWFyQmxvY2sgQzJMaW5lYXJCbG9jazo6c2hhcmUoc2l6ZV90IG9mZnNldF8sIHNpemVfdCBzaXplXywgQzJGZW5jZSBmZW5jZSkgeworICAgIHJldHVybiBDb25zdExpbmVhckJsb2NrQnVkZHkobUltcGwsIEMyTGluZWFyUmFuZ2UoKnRoaXMsIG9mZnNldF8sIHNpemVfKSwgZmVuY2UpOworfQorCitDMkJhc2ljTGluZWFyQmxvY2tQb29sOjpDMkJhc2ljTGluZWFyQmxvY2tQb29sKAorICAgICAgICBjb25zdCBzdGQ6OnNoYXJlZF9wdHI8QzJBbGxvY2F0b3I+ICZhbGxvY2F0b3IpCisgIDogbUFsbG9jYXRvcihhbGxvY2F0b3IpIHsgfQorCitjMl9zdGF0dXNfdCBDMkJhc2ljTGluZWFyQmxvY2tQb29sOjpmZXRjaExpbmVhckJsb2NrKAorICAgICAgICB1aW50MzJfdCBjYXBhY2l0eSwKKyAgICAgICAgQzJNZW1vcnlVc2FnZSB1c2FnZSwKKyAgICAgICAgc3RkOjpzaGFyZWRfcHRyPEMyTGluZWFyQmxvY2s+ICpibG9jayAvKiBub25udWxsICovKSB7CisgICAgYmxvY2stPnJlc2V0KCk7CisKKyAgICBzdGQ6OnNoYXJlZF9wdHI8QzJMaW5lYXJBbGxvY2F0aW9uPiBhbGxvYzsKKyAgICBjMl9zdGF0dXNfdCBlcnIgPSBtQWxsb2NhdG9yLT5uZXdMaW5lYXJBbGxvY2F0aW9uKGNhcGFjaXR5LCB1c2FnZSwgJmFsbG9jKTsKKyAgICBpZiAoZXJyICE9IEMyX09LKSB7CisgICAgICAgIHJldHVybiBlcnI7CisgICAgfQorCisgICAgKmJsb2NrID0gX0MyQmxvY2tGYWN0b3J5OjpDcmVhdGVMaW5lYXJCbG9jayhhbGxvYyk7CisKKyAgICByZXR1cm4gQzJfT0s7Cit9CisKK3N0cnVjdCBDMl9ISURFIEMyUG9vbGVkQmxvY2tQb29sRGF0YSA6IF9DMkJsb2NrUG9vbERhdGEgeworCisgICAgdmlydHVhbCB0eXBlX3QgZ2V0VHlwZSgpIGNvbnN0IG92ZXJyaWRlIHsKKyAgICAgICAgcmV0dXJuIFRZUEVfQlVGRkVSUE9PTDsKKyAgICB9CisKKyAgICB2b2lkIGdldEJ1ZmZlclBvb2xEYXRhKHN0ZDo6c2hhcmVkX3B0cjxCdWZmZXJQb29sRGF0YT4gKmRhdGEpIGNvbnN0IHsKKyAgICAgICAgKmRhdGEgPSBtRGF0YTsKKyAgICB9CisKKyAgICBDMlBvb2xlZEJsb2NrUG9vbERhdGEoY29uc3Qgc3RkOjpzaGFyZWRfcHRyPEJ1ZmZlclBvb2xEYXRhPiAmZGF0YSkgOiBtRGF0YShkYXRhKSB7fQorCisgICAgdmlydHVhbCB+QzJQb29sZWRCbG9ja1Bvb2xEYXRhKCkgb3ZlcnJpZGUge30KKworcHJpdmF0ZToKKyAgICBzdGQ6OnNoYXJlZF9wdHI8QnVmZmVyUG9vbERhdGE+IG1EYXRhOworfTsKKworYm9vbCBfQzJCbG9ja0ZhY3Rvcnk6OkdldEJ1ZmZlclBvb2xEYXRhKAorICAgICAgICBjb25zdCBzdGQ6OnNoYXJlZF9wdHI8Y29uc3QgX0MyQmxvY2tQb29sRGF0YT4gJmRhdGEsCisgICAgICAgIHN0ZDo6c2hhcmVkX3B0cjxCdWZmZXJQb29sRGF0YT4gKmJ1ZmZlclBvb2xEYXRhKSB7CisgICAgaWYgKGRhdGEgJiYgZGF0YS0+Z2V0VHlwZSgpID09IF9DMkJsb2NrUG9vbERhdGE6OlRZUEVfQlVGRkVSUE9PTCkgeworICAgICAgICBjb25zdCBzdGQ6OnNoYXJlZF9wdHI8Y29uc3QgQzJQb29sZWRCbG9ja1Bvb2xEYXRhPiBwb29sRGF0YSA9CisgICAgICAgICAgICAgICAgc3RkOjpzdGF0aWNfcG9pbnRlcl9jYXN0PGNvbnN0IEMyUG9vbGVkQmxvY2tQb29sRGF0YT4oZGF0YSk7CisgICAgICAgIHBvb2xEYXRhLT5nZXRCdWZmZXJQb29sRGF0YShidWZmZXJQb29sRGF0YSk7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK3N0ZDo6c2hhcmVkX3B0cjxDMkxpbmVhckJsb2NrPiBfQzJCbG9ja0ZhY3Rvcnk6OkNyZWF0ZUxpbmVhckJsb2NrKAorICAgICAgICBjb25zdCBzdGQ6OnNoYXJlZF9wdHI8QzJMaW5lYXJBbGxvY2F0aW9uPiAmYWxsb2MsCisgICAgICAgIGNvbnN0IHN0ZDo6c2hhcmVkX3B0cjxfQzJCbG9ja1Bvb2xEYXRhPiAmZGF0YSwgc2l6ZV90IG9mZnNldCwgc2l6ZV90IHNpemUpIHsKKyAgICBzdGQ6OnNoYXJlZF9wdHI8QzJCbG9jazFEOjpJbXBsPiBpbXBsID0KKyAgICAgICAgc3RkOjptYWtlX3NoYXJlZDxDMkJsb2NrMUQ6OkltcGw+KGFsbG9jLCBkYXRhLCBvZmZzZXQsIHNpemUpOworICAgIHJldHVybiBzdGQ6OnNoYXJlZF9wdHI8QzJMaW5lYXJCbG9jaz4obmV3IEMyTGluZWFyQmxvY2soaW1wbCwgKmltcGwpKTsKK30KKworc3RkOjpzaGFyZWRfcHRyPF9DMkJsb2NrUG9vbERhdGE+IF9DMkJsb2NrRmFjdG9yeTo6R2V0TGluZWFyQmxvY2tQb29sRGF0YSgKKyAgICAgICAgY29uc3QgQzJCbG9jazFEICZibG9jaykgeworICAgIGlmIChibG9jay5tSW1wbCkgeworICAgICAgICByZXR1cm4gYmxvY2subUltcGwtPnBvb2xEYXRhKCk7CisgICAgfQorICAgIHJldHVybiBudWxscHRyOworfQorCitzdGQ6OnNoYXJlZF9wdHI8QzJMaW5lYXJCbG9jaz4gX0MyQmxvY2tGYWN0b3J5OjpDcmVhdGVMaW5lYXJCbG9jaygKKyAgICAgICAgY29uc3QgQzJIYW5kbGUgKmhhbmRsZSkgeworICAgIC8vIFRPRE86IGdldCBwcm9wZXIgYWxsb2NhdG9yPyBhbmQgbXV0ZXg/CisgICAgc3RhdGljIHN0ZDo6dW5pcXVlX3B0cjxDMkFsbG9jYXRvcklvbj4gc0FsbG9jYXRvciA9IHN0ZDo6bWFrZV91bmlxdWU8QzJBbGxvY2F0b3JJb24+KDApOworCisgICAgc3RkOjpzaGFyZWRfcHRyPEMyTGluZWFyQWxsb2NhdGlvbj4gYWxsb2M7CisgICAgaWYgKEMyQWxsb2NhdG9ySW9uOjppc1ZhbGlkKGhhbmRsZSkpIHsKKyAgICAgICAgYzJfc3RhdHVzX3QgZXJyID0gc0FsbG9jYXRvci0+cHJpb3JMaW5lYXJBbGxvY2F0aW9uKGhhbmRsZSwgJmFsbG9jKTsKKyAgICAgICAgaWYgKGVyciA9PSBDMl9PSykgeworICAgICAgICAgICAgc3RkOjpzaGFyZWRfcHRyPEMyTGluZWFyQmxvY2s+IGJsb2NrID0gX0MyQmxvY2tGYWN0b3J5OjpDcmVhdGVMaW5lYXJCbG9jayhhbGxvYyk7CisgICAgICAgICAgICByZXR1cm4gYmxvY2s7CisgICAgICAgIH0KKyAgICB9CisgICAgcmV0dXJuIG51bGxwdHI7Cit9CisKK3N0ZDo6c2hhcmVkX3B0cjxDMkxpbmVhckJsb2NrPiBfQzJCbG9ja0ZhY3Rvcnk6OkNyZWF0ZUxpbmVhckJsb2NrKAorICAgICAgICBjb25zdCBDMkhhbmRsZSAqY0hhbmRsZSwgY29uc3Qgc3RkOjpzaGFyZWRfcHRyPEJ1ZmZlclBvb2xEYXRhPiAmZGF0YSkgeworICAgIC8vIFRPRE86IGdldCBwcm9wZXIgYWxsb2NhdG9yPyBhbmQgbXV0ZXg/CisgICAgc3RhdGljIHN0ZDo6dW5pcXVlX3B0cjxDMkFsbG9jYXRvcklvbj4gc0FsbG9jYXRvciA9IHN0ZDo6bWFrZV91bmlxdWU8QzJBbGxvY2F0b3JJb24+KDApOworCisgICAgc3RkOjpzaGFyZWRfcHRyPEMyTGluZWFyQWxsb2NhdGlvbj4gYWxsb2M7CisgICAgaWYgKEMyQWxsb2NhdG9ySW9uOjppc1ZhbGlkKGNIYW5kbGUpKSB7CisgICAgICAgIG5hdGl2ZV9oYW5kbGVfdCAqaGFuZGxlID0gbmF0aXZlX2hhbmRsZV9jbG9uZShjSGFuZGxlKTsKKyAgICAgICAgaWYgKGhhbmRsZSkgeworICAgICAgICAgICAgYzJfc3RhdHVzX3QgZXJyID0gc0FsbG9jYXRvci0+cHJpb3JMaW5lYXJBbGxvY2F0aW9uKGhhbmRsZSwgJmFsbG9jKTsKKyAgICAgICAgICAgIGNvbnN0IHN0ZDo6c2hhcmVkX3B0cjxDMlBvb2xlZEJsb2NrUG9vbERhdGE+IHBvb2xEYXRhID0KKyAgICAgICAgICAgICAgICAgICAgc3RkOjptYWtlX3NoYXJlZDxDMlBvb2xlZEJsb2NrUG9vbERhdGE+KGRhdGEpOworICAgICAgICAgICAgaWYgKGVyciA9PSBDMl9PSyAmJiBwb29sRGF0YSkgeworICAgICAgICAgICAgICAgIC8vIFRPRE86IGNvbmZpZyBwYXJhbXM/CisgICAgICAgICAgICAgICAgc3RkOjpzaGFyZWRfcHRyPEMyTGluZWFyQmxvY2s+IGJsb2NrID0KKyAgICAgICAgICAgICAgICAgICAgICAgIF9DMkJsb2NrRmFjdG9yeTo6Q3JlYXRlTGluZWFyQmxvY2soYWxsb2MsIHBvb2xEYXRhKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gYmxvY2s7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisgICAgcmV0dXJuIG51bGxwdHI7Cit9OworCisvKioKKyAqIFdyYXBwZWQgQzJBbGxvY2F0b3Igd2hpY2ggaXMgaW5qZWN0ZWQgdG8gYnVmZmVyIHBvb2wgb24gYmVoYWxmIG9mCisgKiBDMkJsb2NrUG9vbC4KKyAqLworY2xhc3MgX0MyQnVmZmVyUG9vbEFsbG9jYXRvciA6IHB1YmxpYyBCdWZmZXJQb29sQWxsb2NhdG9yIHsKK3B1YmxpYzoKKyAgICBfQzJCdWZmZXJQb29sQWxsb2NhdG9yKGNvbnN0IHN0ZDo6c2hhcmVkX3B0cjxDMkFsbG9jYXRvcj4gJmFsbG9jYXRvcikKKyAgICAgICAgOiBtQWxsb2NhdG9yKGFsbG9jYXRvcikge30KKworICAgIH5fQzJCdWZmZXJQb29sQWxsb2NhdG9yKCkgb3ZlcnJpZGUge30KKworICAgIFJlc3VsdFN0YXR1cyBhbGxvY2F0ZShjb25zdCBzdGQ6OnZlY3Rvcjx1aW50OF90PiAmcGFyYW1zLAorICAgICAgICAgICAgICAgICAgICAgICAgICBzdGQ6OnNoYXJlZF9wdHI8QnVmZmVyUG9vbEFsbG9jYXRpb24+ICphbGxvYywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90ICphbGxvY1NpemUpIG92ZXJyaWRlOworCisgICAgYm9vbCBjb21wYXRpYmxlKGNvbnN0IHN0ZDo6dmVjdG9yPHVpbnQ4X3Q+ICZuZXdQYXJhbXMsCisgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0ZDo6dmVjdG9yPHVpbnQ4X3Q+ICZvbGRQYXJhbXMpIG92ZXJyaWRlOworCisgICAgLy8gTWV0aG9kcyBmb3IgY29kZWMyIGNvbXBvbmVudCAoQzJCbG9ja1Bvb2wpLgorICAgIC8qKgorICAgICAqIFRyYW5zZm9ybXMgbGluZWFyIGFsbG9jYXRpb24gcGFyYW1ldGVycyBmb3IgQzJBbGxvY2F0b3IgdG8gcGFyYW1ldGVycworICAgICAqIGZvciBidWZmZXIgcG9vbC4KKyAgICAgKgorICAgICAqIEBwYXJhbSBjYXBhY2l0eSAgICAgIHNpemUgb2YgbGluZWFyIGFsbG9jYXRpb24KKyAgICAgKiBAcGFyYW0gdXNhZ2UgICAgICAgICBtZW1vcnkgdXNhZ2UgcGF0dGVybiBmb3IgbGluZWFyIGFsbG9jYXRpb24KKyAgICAgKiBAcGFyYW0gcGFyYW1zICAgICAgICBhbGxvY2F0aW9uIHBhcmFtZXRlcnMgZm9yIGJ1ZmZlciBwb29sCisgICAgICovCisgICAgdm9pZCBnZXRMaW5lYXJQYXJhbXModWludDMyX3QgY2FwYWNpdHksIEMyTWVtb3J5VXNhZ2UgdXNhZ2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgc3RkOjp2ZWN0b3I8dWludDhfdD4gKnBhcmFtcyk7CisKKyAgICAvKioKKyAgICAgKiBUcmFuc2Zvcm1zIGdyYXBoaWMgYWxsb2NhdGlvbiBwYXJhbWV0ZXJzIGZvciBDMkFsbG9jYXRvciB0byBwYXJhbWV0ZXJzCisgICAgICogZm9yIGJ1ZmZlciBwb29sLgorICAgICAqCisgICAgICogQHBhcmFtIHdpZHRoICAgICAgICAgd2lkdGggb2YgZ3JhcGhpYyBhbGxvY2F0aW9uCisgICAgICogQHBhcmFtIGhlaWdodCAgICAgICAgaGVpZ2h0IG9mIGdyYXBoaWMgYWxsb2NhdGlvbgorICAgICAqIEBwYXJhbSBmb3JtYXQgICAgICAgIGNvbG9yIGZvcm1hdCBvZiBncmFwaGljIGFsbG9jYXRpb24KKyAgICAgKiBAcGFyYW0gcGFyYW1zICAgICAgICBhbGxvY2F0aW9uIHBhcmFtZXRlciBmb3IgYnVmZmVyIHBvb2wKKyAgICAgKi8KKyAgICB2b2lkIGdldEdyYXBoaWNQYXJhbXModWludDMyX3Qgd2lkdGgsIHVpbnQzMl90IGhlaWdodCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3QgZm9ybWF0LCBDMk1lbW9yeVVzYWdlIHVzYWdlLAorICAgICAgICAgICAgICAgICAgICAgICAgICBzdGQ6OnZlY3Rvcjx1aW50OF90PiAqcGFyYW1zKTsKKworICAgIC8qKgorICAgICAqIFRyYW5zZm9ybXMgYW4gZXhpc3RpbmcgbmF0aXZlIGhhbmRsZSB0byBhbiBDMkxpbmVhckFsbGNhdGlvbi4KKyAgICAgKiBXcmFwcGVyIHRvIEMyQWxsb2NhdG9yI3ByaW9yTGluZWFyQWxsb2NhdGlvbgorICAgICAqLworICAgIGMyX3N0YXR1c190IHByaW9yTGluZWFyQWxsb2NhdGlvbigKKyAgICAgICAgICAgIGNvbnN0IEMySGFuZGxlICpoYW5kbGUsCisgICAgICAgICAgICBzdGQ6OnNoYXJlZF9wdHI8QzJMaW5lYXJBbGxvY2F0aW9uPiAqYzJBbGxvY2F0aW9uKTsKKworICAgIC8qKgorICAgICAqIFRyYW5zZm9ybXMgYW4gZXhpc3RpbmcgbmF0aXZlIGhhbmRsZSB0byBhbiBDMkdyYXBoaWNBbGxjYXRpb24uCisgICAgICogV3JhcHBlciB0byBDMkFsbG9jYXRvciNwcmlvckdyYXBoaWNBbGxvY2F0aW9uCisgICAgICovCisgICAgYzJfc3RhdHVzX3QgcHJpb3JHcmFwaGljQWxsb2NhdGlvbigKKyAgICAgICAgICAgIGNvbnN0IEMySGFuZGxlICpoYW5kbGUsCisgICAgICAgICAgICBzdGQ6OnNoYXJlZF9wdHI8QzJHcmFwaGljQWxsb2NhdGlvbj4gKmMyQWxsb2NhdGlvbik7CisKK3ByaXZhdGU6CisgICAgc3RhdGljIGNvbnN0ZXhwciBpbnQga01heEludFBhcmFtcyA9IDU7IC8vIGxhcmdlIGVub3VnaCBudW1iZXI7CisKKyAgICBlbnVtIEFsbG9jVHlwZSA6IHVpbnQ4X3QgeworICAgICAgICBBTExPQ19OT05FID0gMCwKKworICAgICAgICBBTExPQ19MSU5FQVIsCisgICAgICAgIEFMTE9DX0dSQVBISUMsCisgICAgfTsKKworICAgIHVuaW9uIEFsbG9jUGFyYW1zIHsKKyAgICAgICAgc3RydWN0IHsKKyAgICAgICAgICAgIEFsbG9jVHlwZSBhbGxvY1R5cGU7CisgICAgICAgICAgICBDMk1lbW9yeVVzYWdlIHVzYWdlOworICAgICAgICAgICAgdWludDMyX3QgcGFyYW1zW2tNYXhJbnRQYXJhbXNdOworICAgICAgICB9IGRhdGE7CisgICAgICAgIHVpbnQ4X3QgYXJyYXlbMF07CisKKyAgICAgICAgQWxsb2NQYXJhbXMoKSA6IGRhdGF7QUxMT0NfTk9ORSwgezAsIDB9LCB7MH19IHt9CisgICAgICAgIEFsbG9jUGFyYW1zKEMyTWVtb3J5VXNhZ2UgdXNhZ2UsIHVpbnQzMl90IGNhcGFjaXR5KQorICAgICAgICAgICAgOiBkYXRhe0FMTE9DX0xJTkVBUiwgdXNhZ2UsIHtbMF0gPSBjYXBhY2l0eX19IHt9CisgICAgICAgIEFsbG9jUGFyYW1zKAorICAgICAgICAgICAgICAgIEMyTWVtb3J5VXNhZ2UgdXNhZ2UsCisgICAgICAgICAgICAgICAgdWludDMyX3Qgd2lkdGgsIHVpbnQzMl90IGhlaWdodCwgdWludDMyX3QgZm9ybWF0KQorICAgICAgICAgICAgICAgIDogZGF0YXtBTExPQ19HUkFQSElDLCB1c2FnZSwge3dpZHRoLCBoZWlnaHQsIGZvcm1hdH19IHt9CisgICAgfTsKKworICAgIGNvbnN0IHN0ZDo6c2hhcmVkX3B0cjxDMkFsbG9jYXRvcj4gbUFsbG9jYXRvcjsKK307CisKK3N0cnVjdCBMaW5lYXJBbGxvY2F0aW9uRHRvciB7CisgICAgTGluZWFyQWxsb2NhdGlvbkR0b3IoY29uc3Qgc3RkOjpzaGFyZWRfcHRyPEMyTGluZWFyQWxsb2NhdGlvbj4gJmFsbG9jKQorICAgICAgICA6IG1BbGxvY2F0aW9uKGFsbG9jKSB7fQorCisgICAgdm9pZCBvcGVyYXRvcigpKEJ1ZmZlclBvb2xBbGxvY2F0aW9uICpwb29sQWxsb2MpIHsgZGVsZXRlIHBvb2xBbGxvYzsgfQorCisgICAgY29uc3Qgc3RkOjpzaGFyZWRfcHRyPEMyTGluZWFyQWxsb2NhdGlvbj4gbUFsbG9jYXRpb247Cit9OworCitzdHJ1Y3QgR3JhcGhpY0FsbG9jYXRpb25EdG9yIHsKKyAgICBHcmFwaGljQWxsb2NhdGlvbkR0b3IoY29uc3Qgc3RkOjpzaGFyZWRfcHRyPEMyR3JhcGhpY0FsbG9jYXRpb24+ICZhbGxvYykKKyAgICAgICAgOiBtQWxsb2NhdGlvbihhbGxvYykge30KKworICAgIHZvaWQgb3BlcmF0b3IoKShCdWZmZXJQb29sQWxsb2NhdGlvbiAqcG9vbEFsbG9jKSB7IGRlbGV0ZSBwb29sQWxsb2M7IH0KKworICAgIGNvbnN0IHN0ZDo6c2hhcmVkX3B0cjxDMkdyYXBoaWNBbGxvY2F0aW9uPiBtQWxsb2NhdGlvbjsKK307CisKK1Jlc3VsdFN0YXR1cyBfQzJCdWZmZXJQb29sQWxsb2NhdG9yOjphbGxvY2F0ZSgKKyAgICAgICAgY29uc3Qgc3RkOjp2ZWN0b3I8dWludDhfdD4gICZwYXJhbXMsCisgICAgICAgIHN0ZDo6c2hhcmVkX3B0cjxCdWZmZXJQb29sQWxsb2NhdGlvbj4gKmFsbG9jLAorICAgICAgICBzaXplX3QgKmFsbG9jU2l6ZSkgeworICAgIEFsbG9jUGFyYW1zIGMyUGFyYW1zOworICAgIG1lbWNweSgmYzJQYXJhbXMsIHBhcmFtcy5kYXRhKCksIHN0ZDo6bWluKHNpemVvZihBbGxvY1BhcmFtcyksIHBhcmFtcy5zaXplKCkpKTsKKyAgICBjMl9zdGF0dXNfdCBzdGF0dXMgPSBDMl9CQURfVkFMVUU7CisgICAgc3dpdGNoKGMyUGFyYW1zLmRhdGEuYWxsb2NUeXBlKSB7CisgICAgICAgIGNhc2UgQUxMT0NfTk9ORToKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEFMTE9DX0xJTkVBUjogeworICAgICAgICAgICAgc3RkOjpzaGFyZWRfcHRyPEMyTGluZWFyQWxsb2NhdGlvbj4gYzJMaW5lYXI7CisgICAgICAgICAgICBzdGF0dXMgPSBtQWxsb2NhdG9yLT5uZXdMaW5lYXJBbGxvY2F0aW9uKAorICAgICAgICAgICAgICAgICAgICBjMlBhcmFtcy5kYXRhLnBhcmFtc1swXSwgYzJQYXJhbXMuZGF0YS51c2FnZSwgJmMyTGluZWFyKTsKKyAgICAgICAgICAgIGlmIChzdGF0dXMgPT0gQzJfT0sgJiYgYzJMaW5lYXIpIHsKKyAgICAgICAgICAgICAgICBCdWZmZXJQb29sQWxsb2NhdGlvbiAqcHRyID0gbmV3IEJ1ZmZlclBvb2xBbGxvY2F0aW9uKGMyTGluZWFyLT5oYW5kbGUoKSk7CisgICAgICAgICAgICAgICAgaWYgKHB0cikgeworICAgICAgICAgICAgICAgICAgICAqYWxsb2MgPSBzdGQ6OnNoYXJlZF9wdHI8QnVmZmVyUG9vbEFsbG9jYXRpb24+KAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHB0ciwgTGluZWFyQWxsb2NhdGlvbkR0b3IoYzJMaW5lYXIpKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKCphbGxvYykgeworICAgICAgICAgICAgICAgICAgICAgICAgKmFsbG9jU2l6ZSA9IChzaXplX3QpYzJQYXJhbXMuZGF0YS5wYXJhbXNbMF07CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gUmVzdWx0U3RhdHVzOjpPSzsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBkZWxldGUgcHRyOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICByZXR1cm4gUmVzdWx0U3RhdHVzOjpOT19NRU1PUlk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBjYXNlIEFMTE9DX0dSQVBISUM6IHsKKyAgICAgICAgICAgIHN0ZDo6c2hhcmVkX3B0cjxDMkdyYXBoaWNBbGxvY2F0aW9uPiBjMkdyYXBoaWM7CisgICAgICAgICAgICBzdGF0dXMgPSBtQWxsb2NhdG9yLT5uZXdHcmFwaGljQWxsb2NhdGlvbigKKyAgICAgICAgICAgICAgICAgICAgYzJQYXJhbXMuZGF0YS5wYXJhbXNbMF0sCisgICAgICAgICAgICAgICAgICAgIGMyUGFyYW1zLmRhdGEucGFyYW1zWzFdLAorICAgICAgICAgICAgICAgICAgICBjMlBhcmFtcy5kYXRhLnBhcmFtc1syXSwKKyAgICAgICAgICAgICAgICAgICAgYzJQYXJhbXMuZGF0YS51c2FnZSwgJmMyR3JhcGhpYyk7CisgICAgICAgICAgICBpZiAoc3RhdHVzID09IEMyX09LICYmIGMyR3JhcGhpYykgeworICAgICAgICAgICAgICAgIEJ1ZmZlclBvb2xBbGxvY2F0aW9uICpwdHIgPSBuZXcgQnVmZmVyUG9vbEFsbG9jYXRpb24oYzJHcmFwaGljLT5oYW5kbGUoKSk7CisgICAgICAgICAgICAgICAgaWYgKHB0cikgeworICAgICAgICAgICAgICAgICAgICAqYWxsb2MgPSBzdGQ6OnNoYXJlZF9wdHI8QnVmZmVyUG9vbEFsbG9jYXRpb24+KAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHB0ciwgR3JhcGhpY0FsbG9jYXRpb25EdG9yKGMyR3JhcGhpYykpOworICAgICAgICAgICAgICAgICAgICBpZiAoKmFsbG9jKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAqYWxsb2NTaXplID0gYzJQYXJhbXMuZGF0YS5wYXJhbXNbMF0gKiBjMlBhcmFtcy5kYXRhLnBhcmFtc1sxXTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBSZXN1bHRTdGF0dXM6Ok9LOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGRlbGV0ZSBwdHI7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIHJldHVybiBSZXN1bHRTdGF0dXM6Ok5PX01FTU9SWTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBicmVhazsKKyAgICB9CisgICAgcmV0dXJuIFJlc3VsdFN0YXR1czo6Q1JJVElDQUxfRVJST1I7Cit9CisKK2Jvb2wgX0MyQnVmZmVyUG9vbEFsbG9jYXRvcjo6Y29tcGF0aWJsZSgKKyAgICAgICAgY29uc3Qgc3RkOjp2ZWN0b3I8dWludDhfdD4gICZuZXdQYXJhbXMsCisgICAgICAgIGNvbnN0IHN0ZDo6dmVjdG9yPHVpbnQ4X3Q+ICAmb2xkUGFyYW1zKSB7CisgICAgQWxsb2NQYXJhbXMgbmV3QWxsb2M7CisgICAgQWxsb2NQYXJhbXMgb2xkQWxsb2M7CisgICAgbWVtY3B5KCZuZXdBbGxvYywgbmV3UGFyYW1zLmRhdGEoKSwgc3RkOjptaW4oc2l6ZW9mKEFsbG9jUGFyYW1zKSwgbmV3UGFyYW1zLnNpemUoKSkpOworICAgIG1lbWNweSgmb2xkQWxsb2MsIG9sZFBhcmFtcy5kYXRhKCksIHN0ZDo6bWluKHNpemVvZihBbGxvY1BhcmFtcyksIG9sZFBhcmFtcy5zaXplKCkpKTsKKworICAgIC8vIFRPRE86IHN1cHBvcnQgbm90IGV4YWN0IG1hdGNoaW5nLiBlLmcpIG5ld0NhcGFjaXR5IDwgb2xkQ2FwYWNpdHkKKyAgICBpZiAobmV3QWxsb2MuZGF0YS5hbGxvY1R5cGUgPT0gb2xkQWxsb2MuZGF0YS5hbGxvY1R5cGUgJiYKKyAgICAgICAgICAgIG5ld0FsbG9jLmRhdGEudXNhZ2UuZXhwZWN0ZWQgPT0gb2xkQWxsb2MuZGF0YS51c2FnZS5leHBlY3RlZCkgeworICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGtNYXhJbnRQYXJhbXM7ICsraSkgeworICAgICAgICAgICAgaWYgKG5ld0FsbG9jLmRhdGEucGFyYW1zW2ldICE9IG9sZEFsbG9jLmRhdGEucGFyYW1zW2ldKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK3ZvaWQgX0MyQnVmZmVyUG9vbEFsbG9jYXRvcjo6Z2V0TGluZWFyUGFyYW1zKAorICAgICAgICB1aW50MzJfdCBjYXBhY2l0eSwgQzJNZW1vcnlVc2FnZSB1c2FnZSwgc3RkOjp2ZWN0b3I8dWludDhfdD4gKnBhcmFtcykgeworICAgIEFsbG9jUGFyYW1zIGMyUGFyYW1zKHVzYWdlLCBjYXBhY2l0eSk7CisgICAgcGFyYW1zLT5hc3NpZ24oYzJQYXJhbXMuYXJyYXksIGMyUGFyYW1zLmFycmF5ICsgc2l6ZW9mKEFsbG9jUGFyYW1zKSk7Cit9CisKK3ZvaWQgX0MyQnVmZmVyUG9vbEFsbG9jYXRvcjo6Z2V0R3JhcGhpY1BhcmFtcygKKyAgICAgICAgdWludDMyX3Qgd2lkdGgsIHVpbnQzMl90IGhlaWdodCwgdWludDMyX3QgZm9ybWF0LCBDMk1lbW9yeVVzYWdlIHVzYWdlLAorICAgICAgICBzdGQ6OnZlY3Rvcjx1aW50OF90PiAqcGFyYW1zKSB7CisgICAgQWxsb2NQYXJhbXMgYzJQYXJhbXModXNhZ2UsIHdpZHRoLCBoZWlnaHQsIGZvcm1hdCk7CisgICAgcGFyYW1zLT5hc3NpZ24oYzJQYXJhbXMuYXJyYXksIGMyUGFyYW1zLmFycmF5ICsgc2l6ZW9mKEFsbG9jUGFyYW1zKSk7Cit9CisKK2MyX3N0YXR1c190IF9DMkJ1ZmZlclBvb2xBbGxvY2F0b3I6OnByaW9yTGluZWFyQWxsb2NhdGlvbigKKyAgICAgICAgY29uc3QgQzJIYW5kbGUgKmhhbmRsZSwKKyAgICAgICAgc3RkOjpzaGFyZWRfcHRyPEMyTGluZWFyQWxsb2NhdGlvbj4gKmMyQWxsb2NhdGlvbikgeworICAgIHJldHVybiBtQWxsb2NhdG9yLT5wcmlvckxpbmVhckFsbG9jYXRpb24oaGFuZGxlLCBjMkFsbG9jYXRpb24pOworfQorCitjMl9zdGF0dXNfdCBfQzJCdWZmZXJQb29sQWxsb2NhdG9yOjpwcmlvckdyYXBoaWNBbGxvY2F0aW9uKAorICAgICAgICBjb25zdCBDMkhhbmRsZSAqaGFuZGxlLAorICAgICAgICBzdGQ6OnNoYXJlZF9wdHI8QzJHcmFwaGljQWxsb2NhdGlvbj4gKmMyQWxsb2NhdGlvbikgeworICAgIHJldHVybiBtQWxsb2NhdG9yLT5wcmlvckdyYXBoaWNBbGxvY2F0aW9uKGhhbmRsZSwgYzJBbGxvY2F0aW9uKTsKK30KKworY2xhc3MgQzJQb29sZWRCbG9ja1Bvb2w6OkltcGwgeworcHVibGljOgorICAgIEltcGwoY29uc3Qgc3RkOjpzaGFyZWRfcHRyPEMyQWxsb2NhdG9yPiAmYWxsb2NhdG9yKQorICAgICAgICAgICAgOiBtSW5pdChDMl9PSyksCisgICAgICAgICAgICAgIG1CdWZmZXJQb29sTWFuYWdlcihDbGllbnRNYW5hZ2VyOjpnZXRJbnN0YW5jZSgpKSwKKyAgICAgICAgICAgICAgbUFsbG9jYXRvcihzdGQ6Om1ha2Vfc2hhcmVkPF9DMkJ1ZmZlclBvb2xBbGxvY2F0b3I+KGFsbG9jYXRvcikpIHsKKyAgICAgICAgaWYgKG1BbGxvY2F0b3IgJiYgbUJ1ZmZlclBvb2xNYW5hZ2VyKSB7CisgICAgICAgICAgICBpZiAobUJ1ZmZlclBvb2xNYW5hZ2VyLT5jcmVhdGUoCisgICAgICAgICAgICAgICAgICAgIG1BbGxvY2F0b3IsICZtQ29ubmVjdGlvbklkKSA9PSBSZXN1bHRTdGF0dXM6Ok9LKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIG1Jbml0ID0gQzJfTk9fSU5JVDsKKyAgICB9CisKKyAgICB+SW1wbCgpIHsKKyAgICAgICAgaWYgKG1Jbml0ID09IEMyX09LKSB7CisgICAgICAgICAgICBtQnVmZmVyUG9vbE1hbmFnZXItPmNsb3NlKG1Db25uZWN0aW9uSWQpOworICAgICAgICB9CisgICAgfQorCisgICAgYzJfc3RhdHVzX3QgZmV0Y2hMaW5lYXJCbG9jaygKKyAgICAgICAgICAgIHVpbnQzMl90IGNhcGFjaXR5LCBDMk1lbW9yeVVzYWdlIHVzYWdlLAorICAgICAgICAgICAgc3RkOjpzaGFyZWRfcHRyPEMyTGluZWFyQmxvY2s+ICpibG9jayAvKiBub25udWxsICovKSB7CisgICAgICAgIGJsb2NrLT5yZXNldCgpOworICAgICAgICBpZiAobUluaXQgIT0gQzJfT0spIHsKKyAgICAgICAgICAgIHJldHVybiBtSW5pdDsKKyAgICAgICAgfQorICAgICAgICBzdGQ6OnZlY3Rvcjx1aW50OF90PiBwYXJhbXM7CisgICAgICAgIG1BbGxvY2F0b3ItPmdldExpbmVhclBhcmFtcyhjYXBhY2l0eSwgdXNhZ2UsICZwYXJhbXMpOworICAgICAgICBzdGQ6OnNoYXJlZF9wdHI8QnVmZmVyUG9vbERhdGE+IGJ1ZmZlclBvb2xEYXRhOworICAgICAgICBuYXRpdmVfaGFuZGxlX3QgKmNIYW5kbGUgPSBudWxscHRyOworICAgICAgICBSZXN1bHRTdGF0dXMgc3RhdHVzID0gbUJ1ZmZlclBvb2xNYW5hZ2VyLT5hbGxvY2F0ZSgKKyAgICAgICAgICAgICAgICBtQ29ubmVjdGlvbklkLCBwYXJhbXMsICZjSGFuZGxlLCAmYnVmZmVyUG9vbERhdGEpOworICAgICAgICBpZiAoc3RhdHVzID09IFJlc3VsdFN0YXR1czo6T0spIHsKKyAgICAgICAgICAgIG5hdGl2ZV9oYW5kbGVfdCAqaGFuZGxlID0gbmF0aXZlX2hhbmRsZV9jbG9uZShjSGFuZGxlKTsKKyAgICAgICAgICAgIGlmIChoYW5kbGUpIHsKKyAgICAgICAgICAgICAgICBzdGQ6OnNoYXJlZF9wdHI8QzJMaW5lYXJBbGxvY2F0aW9uPiBhbGxvYzsKKyAgICAgICAgICAgICAgICBzdGQ6OnNoYXJlZF9wdHI8QzJQb29sZWRCbG9ja1Bvb2xEYXRhPiBwb29sRGF0YSA9CisgICAgICAgICAgICAgICAgICAgICAgICBzdGQ6Om1ha2Vfc2hhcmVkPEMyUG9vbGVkQmxvY2tQb29sRGF0YT4oYnVmZmVyUG9vbERhdGEpOworICAgICAgICAgICAgICAgIGMyX3N0YXR1c190IGVyciA9IG1BbGxvY2F0b3ItPnByaW9yTGluZWFyQWxsb2NhdGlvbihoYW5kbGUsICZhbGxvYyk7CisgICAgICAgICAgICAgICAgaWYgKGVyciA9PSBDMl9PSyAmJiBwb29sRGF0YSAmJiBhbGxvYykgeworICAgICAgICAgICAgICAgICAgICAqYmxvY2sgPSBfQzJCbG9ja0ZhY3Rvcnk6OkNyZWF0ZUxpbmVhckJsb2NrKGFsbG9jLCBwb29sRGF0YSwgMCwgY2FwYWNpdHkpOworICAgICAgICAgICAgICAgICAgICBpZiAoKmJsb2NrKSB7CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gQzJfT0s7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICByZXR1cm4gQzJfTk9fTUVNT1JZOworICAgICAgICB9CisgICAgICAgIGlmIChzdGF0dXMgPT0gUmVzdWx0U3RhdHVzOjpOT19NRU1PUlkpIHsKKyAgICAgICAgICAgIHJldHVybiBDMl9OT19NRU1PUlk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIEMyX0NPUlJVUFRFRDsKKyAgICB9CisKKyAgICBjMl9zdGF0dXNfdCBmZXRjaEdyYXBoaWNCbG9jaygKKyAgICAgICAgICAgIHVpbnQzMl90IHdpZHRoLCB1aW50MzJfdCBoZWlnaHQsIHVpbnQzMl90IGZvcm1hdCwKKyAgICAgICAgICAgIEMyTWVtb3J5VXNhZ2UgdXNhZ2UsCisgICAgICAgICAgICBzdGQ6OnNoYXJlZF9wdHI8QzJHcmFwaGljQmxvY2s+ICpibG9jaykgeworICAgICAgICBibG9jay0+cmVzZXQoKTsKKyAgICAgICAgaWYgKG1Jbml0ICE9IEMyX09LKSB7CisgICAgICAgICAgICByZXR1cm4gbUluaXQ7CisgICAgICAgIH0KKyAgICAgICAgc3RkOjp2ZWN0b3I8dWludDhfdD4gcGFyYW1zOworICAgICAgICBtQWxsb2NhdG9yLT5nZXRHcmFwaGljUGFyYW1zKHdpZHRoLCBoZWlnaHQsIGZvcm1hdCwgdXNhZ2UsICZwYXJhbXMpOworICAgICAgICBzdGQ6OnNoYXJlZF9wdHI8QnVmZmVyUG9vbERhdGE+IGJ1ZmZlclBvb2xEYXRhOworICAgICAgICBuYXRpdmVfaGFuZGxlX3QgKmNIYW5kbGUgPSBudWxscHRyOworICAgICAgICBSZXN1bHRTdGF0dXMgc3RhdHVzID0gbUJ1ZmZlclBvb2xNYW5hZ2VyLT5hbGxvY2F0ZSgKKyAgICAgICAgICAgICAgICBtQ29ubmVjdGlvbklkLCBwYXJhbXMsICZjSGFuZGxlLCAmYnVmZmVyUG9vbERhdGEpOworICAgICAgICBpZiAoc3RhdHVzID09IFJlc3VsdFN0YXR1czo6T0spIHsKKyAgICAgICAgICAgIG5hdGl2ZV9oYW5kbGVfdCAqaGFuZGxlID0gbmF0aXZlX2hhbmRsZV9jbG9uZShjSGFuZGxlKTsKKyAgICAgICAgICAgIGlmIChoYW5kbGUpIHsKKyAgICAgICAgICAgICAgICBzdGQ6OnNoYXJlZF9wdHI8QzJHcmFwaGljQWxsb2NhdGlvbj4gYWxsb2M7CisgICAgICAgICAgICAgICAgc3RkOjpzaGFyZWRfcHRyPEMyUG9vbGVkQmxvY2tQb29sRGF0YT4gcG9vbERhdGEgPQorICAgICAgICAgICAgICAgICAgICBzdGQ6Om1ha2Vfc2hhcmVkPEMyUG9vbGVkQmxvY2tQb29sRGF0YT4oYnVmZmVyUG9vbERhdGEpOworICAgICAgICAgICAgICAgIGMyX3N0YXR1c190IGVyciA9IG1BbGxvY2F0b3ItPnByaW9yR3JhcGhpY0FsbG9jYXRpb24oCisgICAgICAgICAgICAgICAgICAgICAgICBoYW5kbGUsICZhbGxvYyk7CisgICAgICAgICAgICAgICAgaWYgKGVyciA9PSBDMl9PSyAmJiBwb29sRGF0YSAmJiBhbGxvYykgeworICAgICAgICAgICAgICAgICAgICAqYmxvY2sgPSBfQzJCbG9ja0ZhY3Rvcnk6OkNyZWF0ZUdyYXBoaWNCbG9jaygKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbGxvYywgcG9vbERhdGEsIEMyUmVjdCh3aWR0aCwgaGVpZ2h0KSk7CisgICAgICAgICAgICAgICAgICAgIGlmICgqYmxvY2spIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBDMl9PSzsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJldHVybiBDMl9OT19NRU1PUlk7CisgICAgICAgIH0KKyAgICAgICAgaWYgKHN0YXR1cyA9PSBSZXN1bHRTdGF0dXM6Ok5PX01FTU9SWSkgeworICAgICAgICAgICAgcmV0dXJuIEMyX05PX01FTU9SWTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gQzJfQ09SUlVQVEVEOworICAgIH0KKworICAgIENvbm5lY3Rpb25JZCBnZXRDb25uZWN0aW9uSWQoKSB7CisgICAgICAgIHJldHVybiBtSW5pdCAhPSBDMl9PSyA/IElOVkFMSURfQ09OTkVDVElPTklEIDogbUNvbm5lY3Rpb25JZDsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgYzJfc3RhdHVzX3QgbUluaXQ7CisgICAgY29uc3QgYW5kcm9pZDo6c3A8Q2xpZW50TWFuYWdlcj4gbUJ1ZmZlclBvb2xNYW5hZ2VyOworICAgIENvbm5lY3Rpb25JZCBtQ29ubmVjdGlvbklkOyAvLyBsb2NhbGx5CisgICAgY29uc3Qgc3RkOjpzaGFyZWRfcHRyPF9DMkJ1ZmZlclBvb2xBbGxvY2F0b3I+IG1BbGxvY2F0b3I7Cit9OworCitDMlBvb2xlZEJsb2NrUG9vbDo6QzJQb29sZWRCbG9ja1Bvb2woCisgICAgICAgIGNvbnN0IHN0ZDo6c2hhcmVkX3B0cjxDMkFsbG9jYXRvcj4gJmFsbG9jYXRvciwgY29uc3QgbG9jYWxfaWRfdCBsb2NhbElkKQorICAgICAgICA6IG1BbGxvY2F0b3IoYWxsb2NhdG9yKSwgbUxvY2FsSWQobG9jYWxJZCksIG1JbXBsKG5ldyBJbXBsKGFsbG9jYXRvcikpIHt9CisKK0MyUG9vbGVkQmxvY2tQb29sOjp+QzJQb29sZWRCbG9ja1Bvb2woKSB7Cit9CisKK2MyX3N0YXR1c190IEMyUG9vbGVkQmxvY2tQb29sOjpmZXRjaExpbmVhckJsb2NrKAorICAgICAgICB1aW50MzJfdCBjYXBhY2l0eSwKKyAgICAgICAgQzJNZW1vcnlVc2FnZSB1c2FnZSwKKyAgICAgICAgc3RkOjpzaGFyZWRfcHRyPEMyTGluZWFyQmxvY2s+ICpibG9jayAvKiBub25udWxsICovKSB7CisgICAgaWYgKG1JbXBsKSB7CisgICAgICAgIHJldHVybiBtSW1wbC0+ZmV0Y2hMaW5lYXJCbG9jayhjYXBhY2l0eSwgdXNhZ2UsIGJsb2NrKTsKKyAgICB9CisgICAgcmV0dXJuIEMyX0NPUlJVUFRFRDsKK30KKworYzJfc3RhdHVzX3QgQzJQb29sZWRCbG9ja1Bvb2w6OmZldGNoR3JhcGhpY0Jsb2NrKAorICAgICAgICB1aW50MzJfdCB3aWR0aCwKKyAgICAgICAgdWludDMyX3QgaGVpZ2h0LAorICAgICAgICB1aW50MzJfdCBmb3JtYXQsCisgICAgICAgIEMyTWVtb3J5VXNhZ2UgdXNhZ2UsCisgICAgICAgIHN0ZDo6c2hhcmVkX3B0cjxDMkdyYXBoaWNCbG9jaz4gKmJsb2NrKSB7CisgICAgaWYgKG1JbXBsKSB7CisgICAgICAgIHJldHVybiBtSW1wbC0+ZmV0Y2hHcmFwaGljQmxvY2sod2lkdGgsIGhlaWdodCwgZm9ybWF0LCB1c2FnZSwgYmxvY2spOworICAgIH0KKyAgICByZXR1cm4gQzJfQ09SUlVQVEVEOworfQorCitpbnQ2NF90IEMyUG9vbGVkQmxvY2tQb29sOjpnZXRDb25uZWN0aW9uSWQoKSB7CisgICAgaWYgKG1JbXBsKSB7CisgICAgICAgIHJldHVybiBtSW1wbC0+Z2V0Q29ubmVjdGlvbklkKCk7CisgICAgfQorICAgIHJldHVybiAwOworfQorCisvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gMkQgQkxPQ0sgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KKworLyoqCisgKiBJbXBsZW1lbnRhdGlvbiB0aGF0IGlzIHNoYXJlZCBiZXR3ZWVuIGFsbCAyRCBibG9ja3MgYW5kIHZpZXdzLgorICoKKyAqIEZvciBibG9ja3MnIEltcGwncyBjcm9wIGlzIGFsd2F5cyB0aGUgYWxsb3R0ZWQgY3JvcCwgZXZlbiBpZiBpdCBpcyBhIHN1YiBibG9jay4KKyAqCisgKiBGb3Igdmlld3MnIEltcGwncyBjcm9wIGlzIHRoZSBtYXBwZWQgcG9ydGlvbiAtIHdoaWNoIGZvciBub3cgaXMgYWx3YXlzIHRoZQorICogYWxsb3R0ZWQgY3JvcC4KKyAqLworY2xhc3MgQzJfSElERSBfQzJCbG9jazJESW1wbCA6IHB1YmxpYyBfQzJQbGFuYXJTZWN0aW9uQXNwZWN0IHsKK3B1YmxpYzoKKyAgICAvKioKKyAgICAgKiBJbXBsJ3MgY3JvcCBpcyBhbHdheXMgdGhlIG9yIHBhcnQgb2YgdGhlIGFsbG90dGVkIGNyb3Agb2YgdGhlIGFsbG9jYXRpb24uCisgICAgICovCisgICAgX0MyQmxvY2syREltcGwoY29uc3Qgc3RkOjpzaGFyZWRfcHRyPEMyR3JhcGhpY0FsbG9jYXRpb24+ICZhbGxvYywKKyAgICAgICAgICAgIGNvbnN0IHN0ZDo6c2hhcmVkX3B0cjxfQzJCbG9ja1Bvb2xEYXRhPiAmcG9vbERhdGEgPSBudWxscHRyLAorICAgICAgICAgICAgY29uc3QgQzJSZWN0ICZhbGxvdHRlZENyb3AgPSBDMlJlY3QofjB1LCB+MHUpKQorICAgICAgICA6IF9DMlBsYW5hclNlY3Rpb25Bc3BlY3QoYWxsb2MuZ2V0KCksIGFsbG90dGVkQ3JvcCksCisgICAgICAgICAgbUFsbG9jYXRpb24oYWxsb2MpLAorICAgICAgICAgIG1Qb29sRGF0YShwb29sRGF0YSkgeyB9CisKKyAgICB2aXJ0dWFsIH5fQzJCbG9jazJESW1wbCgpID0gZGVmYXVsdDsKKworICAgIC8qKiByZXR1cm5zIHBvb2wgZGF0YSAgKi8KKyAgICBzdGQ6OnNoYXJlZF9wdHI8X0MyQmxvY2tQb29sRGF0YT4gcG9vbERhdGEoKSBjb25zdCB7CisgICAgICAgIHJldHVybiBtUG9vbERhdGE7CisgICAgfQorCisgICAgLyoqIHJldHVybnMgbmF0aXZlIGhhbmRsZSAqLworICAgIGNvbnN0IEMySGFuZGxlICpoYW5kbGUoKSBjb25zdCB7CisgICAgICAgIHJldHVybiBtQWxsb2NhdGlvbiA/IG1BbGxvY2F0aW9uLT5oYW5kbGUoKSA6IG51bGxwdHI7CisgICAgfQorCisgICAgLyoqIHJldHVybnMgdGhlIGFsbG9jYXRvcidzIElEICovCisgICAgQzJBbGxvY2F0b3I6OmlkX3QgZ2V0QWxsb2NhdG9ySWQoKSBjb25zdCB7CisgICAgICAgIC8vIEJBRF9JRCBjYW4gb25seSBoYXBwZW4gaWYgdGhpcyBJbXBsIGNsYXNzIGlzIGluaXRpYWxpemVkIGZvciBhIHZpZXcgLSBuZXZlciBmb3IgYSBibG9jay4KKyAgICAgICAgcmV0dXJuIG1BbGxvY2F0aW9uID8gbUFsbG9jYXRpb24tPmdldEFsbG9jYXRvcklkKCkgOiBDMkFsbG9jYXRvcjo6QkFEX0lEOworICAgIH0KKworICAgIHN0ZDo6c2hhcmVkX3B0cjxDMkdyYXBoaWNBbGxvY2F0aW9uPiBnZXRBbGxvY2F0aW9uKCkgY29uc3QgeworICAgICAgICByZXR1cm4gbUFsbG9jYXRpb247CisgICAgfQorCitwcml2YXRlOgorICAgIHN0ZDo6c2hhcmVkX3B0cjxDMkdyYXBoaWNBbGxvY2F0aW9uPiBtQWxsb2NhdGlvbjsKKyAgICBzdGQ6OnNoYXJlZF9wdHI8X0MyQmxvY2tQb29sRGF0YT4gbVBvb2xEYXRhOworfTsKKworY2xhc3MgQzJfSElERSBfQzJNYXBwaW5nQmxvY2syREltcGwKKyAgICA6IHB1YmxpYyBfQzJCbG9jazJESW1wbCwgcHVibGljIHN0ZDo6ZW5hYmxlX3NoYXJlZF9mcm9tX3RoaXM8X0MyTWFwcGluZ0Jsb2NrMkRJbXBsPiB7CitwdWJsaWM6CisgICAgdXNpbmcgX0MyQmxvY2syREltcGw6Ol9DMkJsb2NrMkRJbXBsOworCisgICAgdmlydHVhbCB+X0MyTWFwcGluZ0Jsb2NrMkRJbXBsKCkgb3ZlcnJpZGUgPSBkZWZhdWx0OworCisgICAgLyoqCisgICAgICogVGhpcyBjbGFzcyBjb250YWlucyB0aGUgbWFwcGVkIGRhdGEgcG9pbnRlciwgYW5kIHRoZSBwb3RlbnRpYWwgZXJyb3IuCisgICAgICovCisgICAgc3RydWN0IE1hcHBlZCB7CisgICAgcHJpdmF0ZToKKyAgICAgICAgZnJpZW5kIGNsYXNzIF9DMk1hcHBpbmdCbG9jazJESW1wbDsKKworICAgICAgICBNYXBwZWQoY29uc3Qgc3RkOjpzaGFyZWRfcHRyPF9DMkJsb2NrMkRJbXBsPiAmaW1wbCwgYm9vbCB3cml0YWJsZSwgQzJGZW5jZSAqZmVuY2UgX191bnVzZWQpCisgICAgICAgICAgICA6IG1JbXBsKGltcGwpLCBtV3JpdGFibGUod3JpdGFibGUpIHsKKyAgICAgICAgICAgIG1lbXNldChtRGF0YSwgMCwgc2l6ZW9mKG1EYXRhKSk7CisgICAgICAgICAgICBjb25zdCBDMlJlY3QgY3JvcCA9IG1JbXBsLT5jcm9wKCk7CisgICAgICAgICAgICAvLyBncmFsbG9jIHJlcXVpcmVzIG1hcHBpbmcgdGhlIHdob2xlIHJlZ2lvbiBvZiBpbnRlcmVzdCBhcyB3ZSBjYW5ub3QKKyAgICAgICAgICAgIC8vIG1hcCBtdWx0aXBsZSByZWdpb25zCisgICAgICAgICAgICBtRXJyb3IgPSBtSW1wbC0+Z2V0QWxsb2NhdGlvbigpLT5tYXAoCisgICAgICAgICAgICAgICAgICAgIGNyb3AsCisgICAgICAgICAgICAgICAgICAgIHsgQzJNZW1vcnlVc2FnZTo6Q1BVX1JFQUQsIHdyaXRhYmxlID8gQzJNZW1vcnlVc2FnZTo6Q1BVX1dSSVRFIDogMCB9LAorICAgICAgICAgICAgICAgICAgICBudWxscHRyLAorICAgICAgICAgICAgICAgICAgICAmbUxheW91dCwKKyAgICAgICAgICAgICAgICAgICAgbURhdGEpOworICAgICAgICAgICAgaWYgKG1FcnJvciAhPSBDMl9PSykgeworICAgICAgICAgICAgICAgIG1lbXNldCgmbUxheW91dCwgMCwgc2l6ZW9mKG1MYXlvdXQpKTsKKyAgICAgICAgICAgICAgICBtZW1zZXQobURhdGEsIDAsIHNpemVvZihtRGF0YSkpOworICAgICAgICAgICAgICAgIG1lbXNldChtT2Zmc2V0RGF0YSwgMCwgc2l6ZW9mKG1EYXRhKSk7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIC8vIFRPRE86IHZhbGlkYXRlIHBsYW5lIGxheW91dCBhbmQKKyAgICAgICAgICAgICAgICAvLyBhZGp1c3QgZGF0YSBwb2ludGVycyB0byB0aGUgY3JvcCByZWdpb24ncyB0b3AgbGVmdCBjb3JuZXIuCisgICAgICAgICAgICAgICAgLy8gZmFpbCBpZiBpdCBpcyBub3Qgb24gYSBzdWJzYW1wbGluZyBib3VuZGFyeQorICAgICAgICAgICAgICAgIGZvciAoc2l6ZV90IHBsYW5lSXggPSAwOyBwbGFuZUl4IDwgbUxheW91dC5udW1QbGFuZXM7ICsrcGxhbmVJeCkgeworICAgICAgICAgICAgICAgICAgICBjb25zdCB1aW50MzJfdCBjb2xTYW1wbGluZyA9IG1MYXlvdXQucGxhbmVzW3BsYW5lSXhdLmNvbFNhbXBsaW5nOworICAgICAgICAgICAgICAgICAgICBjb25zdCB1aW50MzJfdCByb3dTYW1wbGluZyA9IG1MYXlvdXQucGxhbmVzW3BsYW5lSXhdLnJvd1NhbXBsaW5nOworICAgICAgICAgICAgICAgICAgICBpZiAoY3JvcC5sZWZ0ICUgY29sU2FtcGxpbmcgfHwgY3JvcC5yaWdodCgpICUgY29sU2FtcGxpbmcKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB8fCBjcm9wLnRvcCAlIHJvd1NhbXBsaW5nIHx8IGNyb3AuYm90dG9tKCkgJSByb3dTYW1wbGluZykgeworICAgICAgICAgICAgICAgICAgICAgICAgLy8gY2Fubm90IGNhbGN1bGF0ZSBkYXRhIHBvaW50ZXIKKyAgICAgICAgICAgICAgICAgICAgICAgIG1JbXBsLT5nZXRBbGxvY2F0aW9uKCktPnVubWFwKG1EYXRhLCBjcm9wLCBudWxscHRyKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIG1lbXNldCgmbUxheW91dCwgMCwgc2l6ZW9mKG1MYXlvdXQpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIG1lbXNldChtRGF0YSwgMCwgc2l6ZW9mKG1EYXRhKSk7CisgICAgICAgICAgICAgICAgICAgICAgICBtZW1zZXQobU9mZnNldERhdGEsIDAsIHNpemVvZihtRGF0YSkpOworICAgICAgICAgICAgICAgICAgICAgICAgbUVycm9yID0gQzJfQkFEX1ZBTFVFOworICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIG1PZmZzZXREYXRhW3BsYW5lSXhdID0KKyAgICAgICAgICAgICAgICAgICAgICAgIG1EYXRhW3BsYW5lSXhdICsgKHNzaXplX3QpY3JvcC5sZWZ0ICogbUxheW91dC5wbGFuZXNbcGxhbmVJeF0uY29sSW5jCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsgKHNzaXplX3QpY3JvcC50b3AgKiBtTGF5b3V0LnBsYW5lc1twbGFuZUl4XS5yb3dJbmM7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgZXhwbGljaXQgTWFwcGVkKGMyX3N0YXR1c190IGVycm9yKQorICAgICAgICAgICAgOiBtSW1wbChudWxscHRyKSwgbVdyaXRhYmxlKGZhbHNlKSwgbUVycm9yKGVycm9yKSB7CisgICAgICAgICAgICAvLyBDSEVDSyhlcnJvciAhPSBDMl9PSyk7CisgICAgICAgICAgICBtZW1zZXQoJm1MYXlvdXQsIDAsIHNpemVvZihtTGF5b3V0KSk7CisgICAgICAgICAgICBtZW1zZXQobURhdGEsIDAsIHNpemVvZihtRGF0YSkpOworICAgICAgICAgICAgbWVtc2V0KG1PZmZzZXREYXRhLCAwLCBzaXplb2YobURhdGEpKTsKKyAgICAgICAgfQorCisgICAgcHVibGljOgorICAgICAgICB+TWFwcGVkKCkgeworICAgICAgICAgICAgaWYgKG1EYXRhWzBdICE9IG51bGxwdHIpIHsKKyAgICAgICAgICAgICAgICBtSW1wbC0+Z2V0QWxsb2NhdGlvbigpLT51bm1hcChtRGF0YSwgbUltcGwtPmNyb3AoKSwgbnVsbHB0cik7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICAvKiogcmV0dXJucyBtYXBwaW5nIHN0YXR1cyAqLworICAgICAgICBjMl9zdGF0dXNfdCBlcnJvcigpIGNvbnN0IHsgcmV0dXJuIG1FcnJvcjsgfQorCisgICAgICAgIC8qKiByZXR1cm5zIGRhdGEgcG9pbnRlciAqLworICAgICAgICB1aW50OF90ICpjb25zdCAqZGF0YSgpIGNvbnN0IHsgcmV0dXJuIG1PZmZzZXREYXRhOyB9CisKKyAgICAgICAgLyoqIHJldHVybnMgdGhlIHBsYW5lIGxheW91dCAqLworICAgICAgICBDMlBsYW5hckxheW91dCBsYXlvdXQoKSBjb25zdCB7IHJldHVybiBtTGF5b3V0OyB9CisKKyAgICAgICAgLyoqIHJldHVybnMgd2hldGhlciB0aGUgbWFwcGluZyBpcyB3cml0YWJsZSAqLworICAgICAgICBib29sIHdyaXRhYmxlKCkgY29uc3QgeyByZXR1cm4gbVdyaXRhYmxlOyB9CisKKyAgICBwcml2YXRlOgorICAgICAgICBjb25zdCBzdGQ6OnNoYXJlZF9wdHI8X0MyQmxvY2syREltcGw+IG1JbXBsOworICAgICAgICBib29sIG1Xcml0YWJsZTsKKyAgICAgICAgYzJfc3RhdHVzX3QgbUVycm9yOworICAgICAgICB1aW50OF90ICptRGF0YVtDMlBsYW5hckxheW91dDo6TUFYX05VTV9QTEFORVNdOworICAgICAgICB1aW50OF90ICptT2Zmc2V0RGF0YVtDMlBsYW5hckxheW91dDo6TUFYX05VTV9QTEFORVNdOworICAgICAgICBDMlBsYW5hckxheW91dCBtTGF5b3V0OworICAgIH07CisKKyAgICAvKioKKyAgICAgKiBNYXBzIHRoZSBhbGxvdHRlZCByZWdpb24uCisgICAgICoKKyAgICAgKiBJZiBhbHJlYWR5IG1hcHBlZCBhbmQgaXQgaXMgY3VycmVudGx5IGluIHVzZSwgcmV0dXJucyB0aGUgZXhpc3RpbmcgbWFwcGluZy4KKyAgICAgKiBJZiBmZW5jZSBpcyBwcm92aWRlZCwgYW4gYWNxdWlyZSBmZW5jZSBpcyBzdG9yZWQgdGhlcmUuCisgICAgICovCisgICAgc3RkOjpzaGFyZWRfcHRyPE1hcHBlZD4gbWFwKGJvb2wgd3JpdGFibGUsIEMyRmVuY2UgKmZlbmNlKSB7CisgICAgICAgIHN0ZDo6bG9ja19ndWFyZDxzdGQ6Om11dGV4PiBsb2NrKG1NYXBwZWRMb2NrKTsKKyAgICAgICAgc3RkOjpzaGFyZWRfcHRyPE1hcHBlZD4gZXhpc3RpbmcgPSBtTWFwcGVkLmxvY2soKTsKKyAgICAgICAgaWYgKCFleGlzdGluZykgeworICAgICAgICAgICAgZXhpc3RpbmcgPSBzdGQ6OnNoYXJlZF9wdHI8TWFwcGVkPihuZXcgTWFwcGVkKHNoYXJlZF9mcm9tX3RoaXMoKSwgd3JpdGFibGUsIGZlbmNlKSk7CisgICAgICAgICAgICBtTWFwcGVkID0gZXhpc3Rpbmc7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAvLyBpZiB3ZSBtYXBwZWQgdGhlIHJlZ2lvbiByZWFkLW9ubHksIHdlIGNhbm5vdCByZW1hcCBpdCByZWFkLXdyaXRlCisgICAgICAgICAgICBpZiAod3JpdGFibGUgJiYgIWV4aXN0aW5nLT53cml0YWJsZSgpKSB7CisgICAgICAgICAgICAgICAgZXhpc3RpbmcgPSBzdGQ6OnNoYXJlZF9wdHI8TWFwcGVkPihuZXcgTWFwcGVkKEMyX0NBTk5PVF9ETykpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKGZlbmNlICE9IG51bGxwdHIpIHsKKyAgICAgICAgICAgICAgICAqZmVuY2UgPSBDMkZlbmNlKCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIGV4aXN0aW5nOworICAgIH0KKworcHJpdmF0ZToKKyAgICBzdGQ6OndlYWtfcHRyPE1hcHBlZD4gbU1hcHBlZDsKKyAgICBzdGQ6Om11dGV4IG1NYXBwZWRMb2NrOworfTsKKworY2xhc3MgQzJfSElERSBfQzJNYXBwZWRCbG9jazJESW1wbCA6IHB1YmxpYyBfQzJCbG9jazJESW1wbCB7CitwdWJsaWM6CisgICAgX0MyTWFwcGVkQmxvY2syREltcGwoY29uc3QgX0MyQmxvY2syREltcGwgJmltcGwsCisgICAgICAgICAgICAgICAgICAgICAgICAgc3RkOjpzaGFyZWRfcHRyPF9DMk1hcHBpbmdCbG9jazJESW1wbDo6TWFwcGVkPiBtYXBwaW5nKQorICAgICAgICA6IF9DMkJsb2NrMkRJbXBsKGltcGwpLCBtTWFwcGluZyhtYXBwaW5nKSB7CisgICAgfQorCisgICAgdmlydHVhbCB+X0MyTWFwcGVkQmxvY2syREltcGwoKSBvdmVycmlkZSA9IGRlZmF1bHQ7CisKKyAgICBzdGQ6OnNoYXJlZF9wdHI8X0MyTWFwcGluZ0Jsb2NrMkRJbXBsOjpNYXBwZWQ+IG1hcHBpbmcoKSBjb25zdCB7IHJldHVybiBtTWFwcGluZzsgfQorCitwcml2YXRlOgorICAgIHN0ZDo6c2hhcmVkX3B0cjxfQzJNYXBwaW5nQmxvY2syREltcGw6Ok1hcHBlZD4gbU1hcHBpbmc7Cit9OworCisvKioKKyAqIEJsb2NrIGltcGxlbWVudGF0aW9uLgorICovCitjbGFzcyBDMkJsb2NrMkQ6OkltcGwgOiBwdWJsaWMgX0MyTWFwcGluZ0Jsb2NrMkRJbXBsIHsKK3B1YmxpYzoKKyAgICB1c2luZyBfQzJNYXBwaW5nQmxvY2syREltcGw6Ol9DMk1hcHBpbmdCbG9jazJESW1wbDsKKyAgICB2aXJ0dWFsIH5JbXBsKCkgb3ZlcnJpZGUgPSBkZWZhdWx0OworfTsKKworY29uc3QgQzJIYW5kbGUgKkMyQmxvY2syRDo6aGFuZGxlKCkgY29uc3QgeworICAgIHJldHVybiBtSW1wbC0+aGFuZGxlKCk7Cit9CisKK0MyQWxsb2NhdG9yOjppZF90IEMyQmxvY2syRDo6Z2V0QWxsb2NhdG9ySWQoKSBjb25zdCB7CisgICAgcmV0dXJuIG1JbXBsLT5nZXRBbGxvY2F0b3JJZCgpOworfQorCitDMkJsb2NrMkQ6OkMyQmxvY2syRChzdGQ6OnNoYXJlZF9wdHI8SW1wbD4gaW1wbCwgY29uc3QgX0MyUGxhbmFyU2VjdGlvbkFzcGVjdCAmc2VjdGlvbikKKyAgICAvLyBhbHdheXMgY2xhbXAgc3Vic2VjdGlvbiB0byBwYXJlbnQgKGltcGwpIGNyb3AgZm9yIHNhZmV0eQorICAgIDogX0MyUGxhbmFyU2VjdGlvbkFzcGVjdChpbXBsLmdldCgpLCBzZWN0aW9uLmNyb3AoKSksIG1JbXBsKGltcGwpIHsKK30KKworLyoqCisgKiBHcmFwaGljIHZpZXcgaW1wbGVtZW50YXRpb24uCisgKgorICogcmFuZ2Ugb2YgSW1wbCBpcyB0aGUgbWFwcGVkIHJhbmdlIG9mIHRoZSB1bmRlcmx5aW5nIGFsbG9jYXRpb24uIHJhbmdlIG9mIFZpZXcgaXMgdGhlIGN1cnJlbnQKKyAqIGNyb3AuCisgKi8KK2NsYXNzIEMyR3JhcGhpY1ZpZXc6OkltcGwgOiBwdWJsaWMgX0MyTWFwcGVkQmxvY2syREltcGwgeworcHVibGljOgorICAgIHVzaW5nIF9DMk1hcHBlZEJsb2NrMkRJbXBsOjpfQzJNYXBwZWRCbG9jazJESW1wbDsKKyAgICB2aXJ0dWFsIH5JbXBsKCkgb3ZlcnJpZGUgPSBkZWZhdWx0OworfTsKKworQzJHcmFwaGljVmlldzo6QzJHcmFwaGljVmlldyhzdGQ6OnNoYXJlZF9wdHI8SW1wbD4gaW1wbCwgY29uc3QgX0MyUGxhbmFyU2VjdGlvbkFzcGVjdCAmc2VjdGlvbikKKyAgICA6IF9DMkVkaXRhYmxlUGxhbmFyU2VjdGlvbkFzcGVjdChpbXBsLmdldCgpLCBzZWN0aW9uLmNyb3AoKSksIG1JbXBsKGltcGwpIHsKK30KKworY29uc3QgdWludDhfdCAqY29uc3QgKkMyR3JhcGhpY1ZpZXc6OmRhdGEoKSBjb25zdCB7CisgICAgcmV0dXJuIG1JbXBsLT5tYXBwaW5nKCktPmRhdGEoKTsKK30KKwordWludDhfdCAqY29uc3QgKkMyR3JhcGhpY1ZpZXc6OmRhdGEoKSB7CisgICAgcmV0dXJuIG1JbXBsLT5tYXBwaW5nKCktPmRhdGEoKTsKK30KKworY29uc3QgQzJQbGFuYXJMYXlvdXQgQzJHcmFwaGljVmlldzo6bGF5b3V0KCkgY29uc3QgeworICAgIHJldHVybiBtSW1wbC0+bWFwcGluZygpLT5sYXlvdXQoKTsKK30KKworY29uc3QgQzJHcmFwaGljVmlldyBDMkdyYXBoaWNWaWV3OjpzdWJWaWV3KGNvbnN0IEMyUmVjdCAmcmVjdCkgY29uc3QgeworICAgIHJldHVybiBDMkdyYXBoaWNWaWV3KG1JbXBsLCBDMlBsYW5hclNlY3Rpb24oKm1JbXBsLCByZWN0KSk7Cit9CisKK0MyR3JhcGhpY1ZpZXcgQzJHcmFwaGljVmlldzo6c3ViVmlldyhjb25zdCBDMlJlY3QgJnJlY3QpIHsKKyAgICByZXR1cm4gQzJHcmFwaGljVmlldyhtSW1wbCwgQzJQbGFuYXJTZWN0aW9uKCptSW1wbCwgcmVjdCkpOworfQorCitjMl9zdGF0dXNfdCBDMkdyYXBoaWNWaWV3OjplcnJvcigpIGNvbnN0IHsKKyAgICByZXR1cm4gbUltcGwtPm1hcHBpbmcoKS0+ZXJyb3IoKTsKK30KKworLyoqCisgKiBDb25zdCBncmFwaGljIGJsb2NrIGltcGxlbWVudGF0aW9uLgorICovCitDMkNvbnN0R3JhcGhpY0Jsb2NrOjpDMkNvbnN0R3JhcGhpY0Jsb2NrKAorICAgICAgICBzdGQ6OnNoYXJlZF9wdHI8SW1wbD4gaW1wbCwgY29uc3QgX0MyUGxhbmFyU2VjdGlvbkFzcGVjdCAmc2VjdGlvbiwgQzJGZW5jZSBmZW5jZSkKKyAgICA6IEMyQmxvY2syRChpbXBsLCBzZWN0aW9uKSwgbUZlbmNlKGZlbmNlKSB7IH0KKworQzJBY3F1aXJhYmxlPGNvbnN0IEMyR3JhcGhpY1ZpZXc+IEMyQ29uc3RHcmFwaGljQmxvY2s6Om1hcCgpIGNvbnN0IHsKKyAgICBDMkZlbmNlIGZlbmNlOworICAgIHN0ZDo6c2hhcmVkX3B0cjxfQzJNYXBwaW5nQmxvY2syREltcGw6Ok1hcHBlZD4gbWFwcGluZyA9CisgICAgICAgIG1JbXBsLT5tYXAoZmFsc2UgLyogd3JpdGFibGUgKi8sICZmZW5jZSk7CisgICAgc3RkOjpzaGFyZWRfcHRyPEdyYXBoaWNWaWV3QnVkZHk6OkltcGw+IGd2aSA9CisgICAgICAgIHN0ZDo6c2hhcmVkX3B0cjxHcmFwaGljVmlld0J1ZGR5OjpJbXBsPihuZXcgR3JhcGhpY1ZpZXdCdWRkeTo6SW1wbCgqbUltcGwsIG1hcHBpbmcpKTsKKyAgICByZXR1cm4gQWNxdWlyYWJsZUNvbnN0R3JhcGhpY1ZpZXdCdWRkeSgKKyAgICAgICAgICAgIG1hcHBpbmctPmVycm9yKCksIGZlbmNlLCBHcmFwaGljVmlld0J1ZGR5KGd2aSwgQzJQbGFuYXJTZWN0aW9uKCptSW1wbCwgY3JvcCgpKSkpOworfQorCitDMkNvbnN0R3JhcGhpY0Jsb2NrIEMyQ29uc3RHcmFwaGljQmxvY2s6OnN1YkJsb2NrKGNvbnN0IEMyUmVjdCAmcmVjdCkgY29uc3QgeworICAgIHJldHVybiBDMkNvbnN0R3JhcGhpY0Jsb2NrKG1JbXBsLCBDMlBsYW5hclNlY3Rpb24oKm1JbXBsLCBjcm9wKCkuaW50ZXJzZWN0KHJlY3QpKSwgbUZlbmNlKTsKK30KKworLyoqCisgKiBHcmFwaGljIGJsb2NrIGltcGxlbWVudGF0aW9uLgorICovCitDMkdyYXBoaWNCbG9jazo6QzJHcmFwaGljQmxvY2soCisgICAgc3RkOjpzaGFyZWRfcHRyPEltcGw+IGltcGwsIGNvbnN0IF9DMlBsYW5hclNlY3Rpb25Bc3BlY3QgJnNlY3Rpb24pCisgICAgOiBDMkJsb2NrMkQoaW1wbCwgc2VjdGlvbikgeyB9CisKK0MyQWNxdWlyYWJsZTxDMkdyYXBoaWNWaWV3PiBDMkdyYXBoaWNCbG9jazo6bWFwKCkgeworICAgIEMyRmVuY2UgZmVuY2U7CisgICAgc3RkOjpzaGFyZWRfcHRyPF9DMk1hcHBpbmdCbG9jazJESW1wbDo6TWFwcGVkPiBtYXBwaW5nID0KKyAgICAgICAgbUltcGwtPm1hcCh0cnVlIC8qIHdyaXRhYmxlICovLCAmZmVuY2UpOworICAgIHN0ZDo6c2hhcmVkX3B0cjxHcmFwaGljVmlld0J1ZGR5OjpJbXBsPiBndmkgPQorICAgICAgICBzdGQ6OnNoYXJlZF9wdHI8R3JhcGhpY1ZpZXdCdWRkeTo6SW1wbD4obmV3IEdyYXBoaWNWaWV3QnVkZHk6OkltcGwoKm1JbXBsLCBtYXBwaW5nKSk7CisgICAgcmV0dXJuIEFjcXVpcmFibGVHcmFwaGljVmlld0J1ZGR5KAorICAgICAgICAgICAgbWFwcGluZy0+ZXJyb3IoKSwgZmVuY2UsIEdyYXBoaWNWaWV3QnVkZHkoZ3ZpLCBDMlBsYW5hclNlY3Rpb24oKm1JbXBsLCBjcm9wKCkpKSk7Cit9CisKK0MyQ29uc3RHcmFwaGljQmxvY2sgQzJHcmFwaGljQmxvY2s6OnNoYXJlKGNvbnN0IEMyUmVjdCAmY3JvcCwgQzJGZW5jZSBmZW5jZSkgeworICAgIHJldHVybiBDb25zdEdyYXBoaWNCbG9ja0J1ZGR5KG1JbXBsLCBDMlBsYW5hclNlY3Rpb24oKm1JbXBsLCBjcm9wKSwgZmVuY2UpOworfQorCisvKioKKyAqIEJhc2ljIGJsb2NrIHBvb2wgaW1wbGVtZW50YXRpb25zLgorICovCitDMkJhc2ljR3JhcGhpY0Jsb2NrUG9vbDo6QzJCYXNpY0dyYXBoaWNCbG9ja1Bvb2woCisgICAgICAgIGNvbnN0IHN0ZDo6c2hhcmVkX3B0cjxDMkFsbG9jYXRvcj4gJmFsbG9jYXRvcikKKyAgOiBtQWxsb2NhdG9yKGFsbG9jYXRvcikge30KKworYzJfc3RhdHVzX3QgQzJCYXNpY0dyYXBoaWNCbG9ja1Bvb2w6OmZldGNoR3JhcGhpY0Jsb2NrKAorICAgICAgICB1aW50MzJfdCB3aWR0aCwKKyAgICAgICAgdWludDMyX3QgaGVpZ2h0LAorICAgICAgICB1aW50MzJfdCBmb3JtYXQsCisgICAgICAgIEMyTWVtb3J5VXNhZ2UgdXNhZ2UsCisgICAgICAgIHN0ZDo6c2hhcmVkX3B0cjxDMkdyYXBoaWNCbG9jaz4gKmJsb2NrIC8qIG5vbm51bGwgKi8pIHsKKyAgICBibG9jay0+cmVzZXQoKTsKKworICAgIHN0ZDo6c2hhcmVkX3B0cjxDMkdyYXBoaWNBbGxvY2F0aW9uPiBhbGxvYzsKKyAgICBjMl9zdGF0dXNfdCBlcnIgPSBtQWxsb2NhdG9yLT5uZXdHcmFwaGljQWxsb2NhdGlvbih3aWR0aCwgaGVpZ2h0LCBmb3JtYXQsIHVzYWdlLCAmYWxsb2MpOworICAgIGlmIChlcnIgIT0gQzJfT0spIHsKKyAgICAgICAgcmV0dXJuIGVycjsKKyAgICB9CisKKyAgICAqYmxvY2sgPSBfQzJCbG9ja0ZhY3Rvcnk6OkNyZWF0ZUdyYXBoaWNCbG9jayhhbGxvYyk7CisKKyAgICByZXR1cm4gQzJfT0s7Cit9CisKK3N0ZDo6c2hhcmVkX3B0cjxDMkdyYXBoaWNCbG9jaz4gX0MyQmxvY2tGYWN0b3J5OjpDcmVhdGVHcmFwaGljQmxvY2soCisgICAgICAgIGNvbnN0IHN0ZDo6c2hhcmVkX3B0cjxDMkdyYXBoaWNBbGxvY2F0aW9uPiAmYWxsb2MsCisgICAgICAgIGNvbnN0IHN0ZDo6c2hhcmVkX3B0cjxfQzJCbG9ja1Bvb2xEYXRhPiAmZGF0YSwgY29uc3QgQzJSZWN0ICZhbGxvdHRlZENyb3ApIHsKKyAgICBzdGQ6OnNoYXJlZF9wdHI8QzJCbG9jazJEOjpJbXBsPiBpbXBsID0KKyAgICAgICAgc3RkOjptYWtlX3NoYXJlZDxDMkJsb2NrMkQ6OkltcGw+KGFsbG9jLCBkYXRhLCBhbGxvdHRlZENyb3ApOworICAgIHJldHVybiBzdGQ6OnNoYXJlZF9wdHI8QzJHcmFwaGljQmxvY2s+KG5ldyBDMkdyYXBoaWNCbG9jayhpbXBsLCAqaW1wbCkpOworfQorCitzdGQ6OnNoYXJlZF9wdHI8X0MyQmxvY2tQb29sRGF0YT4gX0MyQmxvY2tGYWN0b3J5OjpHZXRHcmFwaGljQmxvY2tQb29sRGF0YSgKKyAgICAgICAgY29uc3QgQzJCbG9jazJEICZibG9jaykgeworICAgIGlmIChibG9jay5tSW1wbCkgeworICAgICAgICByZXR1cm4gYmxvY2subUltcGwtPnBvb2xEYXRhKCk7CisgICAgfQorICAgIHJldHVybiBudWxscHRyOworfQorCitzdGQ6OnNoYXJlZF9wdHI8QzJHcmFwaGljQmxvY2s+IF9DMkJsb2NrRmFjdG9yeTo6Q3JlYXRlR3JhcGhpY0Jsb2NrKAorICAgICAgICBjb25zdCBDMkhhbmRsZSAqY0hhbmRsZSwKKyAgICAgICAgY29uc3Qgc3RkOjpzaGFyZWRfcHRyPEJ1ZmZlclBvb2xEYXRhPiAmZGF0YSkgeworICAgIC8vIFRPRE86IGdldCBwcm9wZXIgYWxsb2NhdG9yPyBhbmQgbXV0ZXg/CisgICAgc3RhdGljIHN0ZDo6dW5pcXVlX3B0cjxDMkFsbG9jYXRvckdyYWxsb2M+IHNBbGxvY2F0b3IgPSBzdGQ6Om1ha2VfdW5pcXVlPEMyQWxsb2NhdG9yR3JhbGxvYz4oMCk7CisKKyAgICBzdGQ6OnNoYXJlZF9wdHI8QzJHcmFwaGljQWxsb2NhdGlvbj4gYWxsb2M7CisgICAgaWYgKEMyQWxsb2NhdG9yR3JhbGxvYzo6aXNWYWxpZChjSGFuZGxlKSkgeworICAgICAgICBuYXRpdmVfaGFuZGxlX3QgKmhhbmRsZSA9IG5hdGl2ZV9oYW5kbGVfY2xvbmUoY0hhbmRsZSk7CisgICAgICAgIGlmIChoYW5kbGUpIHsKKyAgICAgICAgICAgIGMyX3N0YXR1c190IGVyciA9IHNBbGxvY2F0b3ItPnByaW9yR3JhcGhpY0FsbG9jYXRpb24oaGFuZGxlLCAmYWxsb2MpOworICAgICAgICAgICAgY29uc3Qgc3RkOjpzaGFyZWRfcHRyPEMyUG9vbGVkQmxvY2tQb29sRGF0YT4gcG9vbERhdGEgPQorICAgICAgICAgICAgICAgICAgICBzdGQ6Om1ha2Vfc2hhcmVkPEMyUG9vbGVkQmxvY2tQb29sRGF0YT4oZGF0YSk7CisgICAgICAgICAgICBpZiAoZXJyID09IEMyX09LICYmIHBvb2xEYXRhKSB7CisgICAgICAgICAgICAgICAgLy8gVE9ETzogY29uZmlnIHNldHVwPworICAgICAgICAgICAgICAgIHN0ZDo6c2hhcmVkX3B0cjxDMkdyYXBoaWNCbG9jaz4gYmxvY2sgPQorICAgICAgICAgICAgICAgICAgICAgICAgX0MyQmxvY2tGYWN0b3J5OjpDcmVhdGVHcmFwaGljQmxvY2soYWxsb2MsIHBvb2xEYXRhKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gYmxvY2s7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisgICAgcmV0dXJuIG51bGxwdHI7Cit9OworCisKKy8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSBCVUZGRVIgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KKworY2xhc3MgQzJCdWZmZXJEYXRhOjpJbXBsIHsKK3B1YmxpYzoKKyAgICBleHBsaWNpdCBJbXBsKGNvbnN0IHN0ZDo6dmVjdG9yPEMyQ29uc3RMaW5lYXJCbG9jaz4gJmJsb2NrcykKKyAgICAgICAgOiBtVHlwZShibG9ja3Muc2l6ZSgpID09IDEgPyBMSU5FQVIgOiBMSU5FQVJfQ0hVTktTKSwKKyAgICAgICAgICBtTGluZWFyQmxvY2tzKGJsb2NrcykgeworICAgIH0KKworICAgIGV4cGxpY2l0IEltcGwoY29uc3Qgc3RkOjp2ZWN0b3I8QzJDb25zdEdyYXBoaWNCbG9jaz4gJmJsb2NrcykKKyAgICAgICAgOiBtVHlwZShibG9ja3Muc2l6ZSgpID09IDEgPyBHUkFQSElDIDogR1JBUEhJQ19DSFVOS1MpLAorICAgICAgICAgIG1HcmFwaGljQmxvY2tzKGJsb2NrcykgeworICAgIH0KKworICAgIHR5cGVfdCB0eXBlKCkgY29uc3QgeyByZXR1cm4gbVR5cGU7IH0KKyAgICBjb25zdCBzdGQ6OnZlY3RvcjxDMkNvbnN0TGluZWFyQmxvY2s+ICZsaW5lYXJCbG9ja3MoKSBjb25zdCB7IHJldHVybiBtTGluZWFyQmxvY2tzOyB9CisgICAgY29uc3Qgc3RkOjp2ZWN0b3I8QzJDb25zdEdyYXBoaWNCbG9jaz4gJmdyYXBoaWNCbG9ja3MoKSBjb25zdCB7IHJldHVybiBtR3JhcGhpY0Jsb2NrczsgfQorCitwcml2YXRlOgorICAgIHR5cGVfdCBtVHlwZTsKKyAgICBzdGQ6OnZlY3RvcjxDMkNvbnN0TGluZWFyQmxvY2s+IG1MaW5lYXJCbG9ja3M7CisgICAgc3RkOjp2ZWN0b3I8QzJDb25zdEdyYXBoaWNCbG9jaz4gbUdyYXBoaWNCbG9ja3M7Cit9OworCitDMkJ1ZmZlckRhdGE6OkMyQnVmZmVyRGF0YShjb25zdCBzdGQ6OnZlY3RvcjxDMkNvbnN0TGluZWFyQmxvY2s+ICZibG9ja3MpIDogbUltcGwobmV3IEltcGwoYmxvY2tzKSkge30KK0MyQnVmZmVyRGF0YTo6QzJCdWZmZXJEYXRhKGNvbnN0IHN0ZDo6dmVjdG9yPEMyQ29uc3RHcmFwaGljQmxvY2s+ICZibG9ja3MpIDogbUltcGwobmV3IEltcGwoYmxvY2tzKSkge30KKworQzJCdWZmZXJEYXRhOjp0eXBlX3QgQzJCdWZmZXJEYXRhOjp0eXBlKCkgY29uc3QgeyByZXR1cm4gbUltcGwtPnR5cGUoKTsgfQorCitjb25zdCBzdGQ6OnZlY3RvcjxDMkNvbnN0TGluZWFyQmxvY2s+IEMyQnVmZmVyRGF0YTo6bGluZWFyQmxvY2tzKCkgY29uc3QgeworICAgIHJldHVybiBtSW1wbC0+bGluZWFyQmxvY2tzKCk7Cit9CisKK2NvbnN0IHN0ZDo6dmVjdG9yPEMyQ29uc3RHcmFwaGljQmxvY2s+IEMyQnVmZmVyRGF0YTo6Z3JhcGhpY0Jsb2NrcygpIGNvbnN0IHsKKyAgICByZXR1cm4gbUltcGwtPmdyYXBoaWNCbG9ja3MoKTsKK30KKworY2xhc3MgQzJCdWZmZXI6OkltcGwgeworcHVibGljOgorICAgIEltcGwoQzJCdWZmZXIgKnRoaXosIGNvbnN0IHN0ZDo6dmVjdG9yPEMyQ29uc3RMaW5lYXJCbG9jaz4gJmJsb2NrcykKKyAgICAgICAgOiBtVGhpcyh0aGl6KSwgbURhdGEoYmxvY2tzKSB7fQorICAgIEltcGwoQzJCdWZmZXIgKnRoaXosIGNvbnN0IHN0ZDo6dmVjdG9yPEMyQ29uc3RHcmFwaGljQmxvY2s+ICZibG9ja3MpCisgICAgICAgIDogbVRoaXModGhpeiksIG1EYXRhKGJsb2Nrcykge30KKworICAgIH5JbXBsKCkgeworICAgICAgICBmb3IgKGNvbnN0IGF1dG8gJnBhaXIgOiBtTm90aWZ5KSB7CisgICAgICAgICAgICBwYWlyLmZpcnN0KG1UaGlzLCBwYWlyLnNlY29uZCk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBjb25zdCBDMkJ1ZmZlckRhdGEgJmRhdGEoKSBjb25zdCB7IHJldHVybiBtRGF0YTsgfQorCisgICAgYzJfc3RhdHVzX3QgcmVnaXN0ZXJPbkRlc3Ryb3lOb3RpZnkoT25EZXN0cm95Tm90aWZ5IG9uRGVzdHJveU5vdGlmeSwgdm9pZCAqYXJnKSB7CisgICAgICAgIGF1dG8gaXQgPSBzdGQ6OmZpbmRfaWYoCisgICAgICAgICAgICAgICAgbU5vdGlmeS5iZWdpbigpLCBtTm90aWZ5LmVuZCgpLAorICAgICAgICAgICAgICAgIFtvbkRlc3Ryb3lOb3RpZnksIGFyZ10gKGNvbnN0IGF1dG8gJnBhaXIpIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHBhaXIuZmlyc3QgPT0gb25EZXN0cm95Tm90aWZ5ICYmIHBhaXIuc2Vjb25kID09IGFyZzsKKyAgICAgICAgICAgICAgICB9KTsKKyAgICAgICAgaWYgKGl0ICE9IG1Ob3RpZnkuZW5kKCkpIHsKKyAgICAgICAgICAgIHJldHVybiBDMl9EVVBMSUNBVEU7CisgICAgICAgIH0KKyAgICAgICAgbU5vdGlmeS5lbXBsYWNlX2JhY2sob25EZXN0cm95Tm90aWZ5LCBhcmcpOworICAgICAgICByZXR1cm4gQzJfT0s7CisgICAgfQorCisgICAgYzJfc3RhdHVzX3QgdW5yZWdpc3Rlck9uRGVzdHJveU5vdGlmeShPbkRlc3Ryb3lOb3RpZnkgb25EZXN0cm95Tm90aWZ5LCB2b2lkICphcmcpIHsKKyAgICAgICAgYXV0byBpdCA9IHN0ZDo6ZmluZF9pZigKKyAgICAgICAgICAgICAgICBtTm90aWZ5LmJlZ2luKCksIG1Ob3RpZnkuZW5kKCksCisgICAgICAgICAgICAgICAgW29uRGVzdHJveU5vdGlmeSwgYXJnXSAoY29uc3QgYXV0byAmcGFpcikgeworICAgICAgICAgICAgICAgICAgICByZXR1cm4gcGFpci5maXJzdCA9PSBvbkRlc3Ryb3lOb3RpZnkgJiYgcGFpci5zZWNvbmQgPT0gYXJnOworICAgICAgICAgICAgICAgIH0pOworICAgICAgICBpZiAoaXQgPT0gbU5vdGlmeS5lbmQoKSkgeworICAgICAgICAgICAgcmV0dXJuIEMyX05PVF9GT1VORDsKKyAgICAgICAgfQorICAgICAgICBtTm90aWZ5LmVyYXNlKGl0KTsKKyAgICAgICAgcmV0dXJuIEMyX09LOworICAgIH0KKworICAgIHN0ZDo6dmVjdG9yPHN0ZDo6c2hhcmVkX3B0cjxjb25zdCBDMkluZm8+PiBpbmZvKCkgY29uc3QgeworICAgICAgICBzdGQ6OnZlY3RvcjxzdGQ6OnNoYXJlZF9wdHI8Y29uc3QgQzJJbmZvPj4gcmVzdWx0KG1JbmZvcy5zaXplKCkpOworICAgICAgICBzdGQ6OnRyYW5zZm9ybSgKKyAgICAgICAgICAgICAgICBtSW5mb3MuYmVnaW4oKSwgbUluZm9zLmVuZCgpLCByZXN1bHQuYmVnaW4oKSwKKyAgICAgICAgICAgICAgICBbXSAoY29uc3QgYXV0byAmZWxlbSkgeyByZXR1cm4gZWxlbS5zZWNvbmQ7IH0pOworICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KKworICAgIGMyX3N0YXR1c190IHNldEluZm8oY29uc3Qgc3RkOjpzaGFyZWRfcHRyPEMySW5mbz4gJmluZm8pIHsKKyAgICAgICAgLy8gVG8gInVwZGF0ZSIgeW91IG5lZWQgdG8gZXJhc2UgdGhlIGV4aXN0aW5nIG9uZSBpZiBhbnksIGFuZCB0aGVuIGluc2VydC4KKyAgICAgICAgKHZvaWQpIG1JbmZvcy5lcmFzZShpbmZvLT5jb3JlSW5kZXgoKSk7CisgICAgICAgICh2b2lkKSBtSW5mb3MuaW5zZXJ0KHsgaW5mby0+Y29yZUluZGV4KCksIGluZm8gfSk7CisgICAgICAgIHJldHVybiBDMl9PSzsKKyAgICB9CisKKyAgICBib29sIGhhc0luZm8oQzJQYXJhbTo6VHlwZSBpbmRleCkgY29uc3QgeworICAgICAgICByZXR1cm4gbUluZm9zLmNvdW50KGluZGV4LmNvcmVJbmRleCgpKSA+IDA7CisgICAgfQorCisgICAgc3RkOjpzaGFyZWRfcHRyPGNvbnN0IEMySW5mbz4gZ2V0SW5mbyhDMlBhcmFtOjpUeXBlIGluZGV4KSBjb25zdCB7CisgICAgICAgIGF1dG8gaXQgPSBtSW5mb3MuZmluZChpbmRleC5jb3JlSW5kZXgoKSk7CisgICAgICAgIGlmIChpdCA9PSBtSW5mb3MuZW5kKCkpIHsKKyAgICAgICAgICAgIHJldHVybiBudWxscHRyOworICAgICAgICB9CisgICAgICAgIHJldHVybiBzdGQ6OmNvbnN0X3BvaW50ZXJfY2FzdDxjb25zdCBDMkluZm8+KGl0LT5zZWNvbmQpOworICAgIH0KKworICAgIHN0ZDo6c2hhcmVkX3B0cjxDMkluZm8+IHJlbW92ZUluZm8oQzJQYXJhbTo6VHlwZSBpbmRleCkgeworICAgICAgICBhdXRvIGl0ID0gbUluZm9zLmZpbmQoaW5kZXguY29yZUluZGV4KCkpOworICAgICAgICBpZiAoaXQgPT0gbUluZm9zLmVuZCgpKSB7CisgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAgICAgfQorICAgICAgICBzdGQ6OnNoYXJlZF9wdHI8QzJJbmZvPiByZXQgPSBpdC0+c2Vjb25kOworICAgICAgICAodm9pZCkgbUluZm9zLmVyYXNlKGl0KTsKKyAgICAgICAgcmV0dXJuIHJldDsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgQzJCdWZmZXIgKiBjb25zdCBtVGhpczsKKyAgICBCdWZmZXJEYXRhQnVkZHkgbURhdGE7CisgICAgc3RkOjptYXA8QzJQYXJhbTo6Q29yZUluZGV4LCBzdGQ6OnNoYXJlZF9wdHI8QzJJbmZvPj4gbUluZm9zOworICAgIHN0ZDo6bGlzdDxzdGQ6OnBhaXI8T25EZXN0cm95Tm90aWZ5LCB2b2lkICo+PiBtTm90aWZ5OworfTsKKworQzJCdWZmZXI6OkMyQnVmZmVyKGNvbnN0IHN0ZDo6dmVjdG9yPEMyQ29uc3RMaW5lYXJCbG9jaz4gJmJsb2NrcykKKyAgICA6IG1JbXBsKG5ldyBJbXBsKHRoaXMsIGJsb2NrcykpIHt9CisKK0MyQnVmZmVyOjpDMkJ1ZmZlcihjb25zdCBzdGQ6OnZlY3RvcjxDMkNvbnN0R3JhcGhpY0Jsb2NrPiAmYmxvY2tzKQorICAgIDogbUltcGwobmV3IEltcGwodGhpcywgYmxvY2tzKSkge30KKworY29uc3QgQzJCdWZmZXJEYXRhIEMyQnVmZmVyOjpkYXRhKCkgY29uc3QgeyByZXR1cm4gbUltcGwtPmRhdGEoKTsgfQorCitjMl9zdGF0dXNfdCBDMkJ1ZmZlcjo6cmVnaXN0ZXJPbkRlc3Ryb3lOb3RpZnkoT25EZXN0cm95Tm90aWZ5IG9uRGVzdHJveU5vdGlmeSwgdm9pZCAqYXJnKSB7CisgICAgcmV0dXJuIG1JbXBsLT5yZWdpc3Rlck9uRGVzdHJveU5vdGlmeShvbkRlc3Ryb3lOb3RpZnksIGFyZyk7Cit9CisKK2MyX3N0YXR1c190IEMyQnVmZmVyOjp1bnJlZ2lzdGVyT25EZXN0cm95Tm90aWZ5KE9uRGVzdHJveU5vdGlmeSBvbkRlc3Ryb3lOb3RpZnksIHZvaWQgKmFyZykgeworICAgIHJldHVybiBtSW1wbC0+dW5yZWdpc3Rlck9uRGVzdHJveU5vdGlmeShvbkRlc3Ryb3lOb3RpZnksIGFyZyk7Cit9CisKK2NvbnN0IHN0ZDo6dmVjdG9yPHN0ZDo6c2hhcmVkX3B0cjxjb25zdCBDMkluZm8+PiBDMkJ1ZmZlcjo6aW5mbygpIGNvbnN0IHsKKyAgICByZXR1cm4gbUltcGwtPmluZm8oKTsKK30KKworYzJfc3RhdHVzX3QgQzJCdWZmZXI6OnNldEluZm8oY29uc3Qgc3RkOjpzaGFyZWRfcHRyPEMySW5mbz4gJmluZm8pIHsKKyAgICByZXR1cm4gbUltcGwtPnNldEluZm8oaW5mbyk7Cit9CisKK2Jvb2wgQzJCdWZmZXI6Omhhc0luZm8oQzJQYXJhbTo6VHlwZSBpbmRleCkgY29uc3QgeworICAgIHJldHVybiBtSW1wbC0+aGFzSW5mbyhpbmRleCk7Cit9CisKK3N0ZDo6c2hhcmVkX3B0cjxjb25zdCBDMkluZm8+IEMyQnVmZmVyOjpnZXRJbmZvKEMyUGFyYW06OlR5cGUgaW5kZXgpIGNvbnN0IHsKKyAgICByZXR1cm4gbUltcGwtPmdldEluZm8oaW5kZXgpOworfQorCitzdGQ6OnNoYXJlZF9wdHI8QzJJbmZvPiBDMkJ1ZmZlcjo6cmVtb3ZlSW5mbyhDMlBhcmFtOjpUeXBlIGluZGV4KSB7CisgICAgcmV0dXJuIG1JbXBsLT5yZW1vdmVJbmZvKGluZGV4KTsKK30KKworLy8gc3RhdGljCitzdGQ6OnNoYXJlZF9wdHI8QzJCdWZmZXI+IEMyQnVmZmVyOjpDcmVhdGVMaW5lYXJCdWZmZXIoY29uc3QgQzJDb25zdExpbmVhckJsb2NrICZibG9jaykgeworICAgIHJldHVybiBzdGQ6OnNoYXJlZF9wdHI8QzJCdWZmZXI+KG5ldyBDMkJ1ZmZlcih7IGJsb2NrIH0pKTsKK30KKworLy8gc3RhdGljCitzdGQ6OnNoYXJlZF9wdHI8QzJCdWZmZXI+IEMyQnVmZmVyOjpDcmVhdGVHcmFwaGljQnVmZmVyKGNvbnN0IEMyQ29uc3RHcmFwaGljQmxvY2sgJmJsb2NrKSB7CisgICAgcmV0dXJuIHN0ZDo6c2hhcmVkX3B0cjxDMkJ1ZmZlcj4obmV3IEMyQnVmZmVyKHsgYmxvY2sgfSkpOworfQorCmRpZmYgLS1naXQgYS9tZWRpYS9jb2RlYzIvdm5kay9DMkNvbmZpZy5jcHAgYi9tZWRpYS9jb2RlYzIvdm5kay9DMkNvbmZpZy5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGExMjkwMwotLS0gL2Rldi9udWxsCisrKyBiL21lZGlhL2NvZGVjMi92bmRrL0MyQ29uZmlnLmNwcApAQCAtMCwwICsxLDIzMSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNyBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCisKKy8vI2RlZmluZSBMT0dfTkRFQlVHIDAKKyNkZWZpbmUgTE9HX1RBRyAiQzJDb25maWciCisjaW5jbHVkZSA8dXRpbHMvTG9nLmg+CisKKy8qKgorICogRGVmaW5lIGFuZCBpbml0aWFsaXplIGdsb2JhbCBjb25maWcgZmllbGQgZGVzY3JpcHRvcnMgaW4gdGhpcyBjcHAgZmlsZQorICovCisjZGVmaW5lIF9fQzJfR0VORVJBVEVfR0xPQkFMX1ZBUlNfXworI2luY2x1ZGUgPEMyQ29uZmlnLmg+CisKK0RFRklORV9DMl9FTlVNX1ZBTFVFX0NVU1RPTV9IRUxQRVIoQzJDb25maWc6OnByb2ZpbGVfdCwgKHsKKyAgICAgICAgeyAidW51c2VkIiwgQzJDb25maWc6OlBST0ZJTEVfVU5VU0VEIH0sCisgICAgICAgIHsgImFhYy1sYyIsIEMyQ29uZmlnOjpQUk9GSUxFX0FBQ19MQyB9LAorICAgICAgICB7ICJhYWMtbWFpbiIsIEMyQ29uZmlnOjpQUk9GSUxFX0FBQ19NQUlOIH0sCisgICAgICAgIHsgImFhYy1zc3IiLCBDMkNvbmZpZzo6UFJPRklMRV9BQUNfU1NSIH0sCisgICAgICAgIHsgImFhYy1sdHAiLCBDMkNvbmZpZzo6UFJPRklMRV9BQUNfTFRQIH0sCisgICAgICAgIHsgImFhYy1oZSIsIEMyQ29uZmlnOjpQUk9GSUxFX0FBQ19IRSB9LAorICAgICAgICB7ICJhYWMtc2NhbGFibGUiLCBDMkNvbmZpZzo6UFJPRklMRV9BQUNfU0NBTEFCTEUgfSwKKyAgICAgICAgeyAiYWFjLWVyLWxjIiwgQzJDb25maWc6OlBST0ZJTEVfQUFDX0VSX0xDIH0sCisgICAgICAgIHsgImFhYy1lci1zY2FsYWJsZSIsIEMyQ29uZmlnOjpQUk9GSUxFX0FBQ19FUl9TQ0FMQUJMRSB9LAorICAgICAgICB7ICJhYWMtbGQiLCBDMkNvbmZpZzo6UFJPRklMRV9BQUNfTEQgfSwKKyAgICAgICAgeyAiYWFjLWhlLXBzIiwgQzJDb25maWc6OlBST0ZJTEVfQUFDX0hFX1BTIH0sCisgICAgICAgIHsgImFhYy1lbGQiLCBDMkNvbmZpZzo6UFJPRklMRV9BQUNfRUxEIH0sCisgICAgICAgIHsgImFhYy14aGUiLCBDMkNvbmZpZzo6UFJPRklMRV9BQUNfWEhFIH0sCisgICAgICAgIHsgIm1wMnYtc2ltcGxlIiwgQzJDb25maWc6OlBST0ZJTEVfTVAyVl9TSU1QTEUgfSwKKyAgICAgICAgeyAibXAydi1tYWluIiwgQzJDb25maWc6OlBST0ZJTEVfTVAyVl9NQUlOIH0sCisgICAgICAgIHsgIm1wMnYtc25yLXNjYWxhYmxlIiwgQzJDb25maWc6OlBST0ZJTEVfTVAyVl9TTlJfU0NBTEFCTEUgfSwKKyAgICAgICAgeyAibXAydi1zcGF0aWFsbHktc2NhbGFibGUiLCBDMkNvbmZpZzo6UFJPRklMRV9NUDJWX1NQQVRJQUxMWV9TQ0FMQUJMRSB9LAorICAgICAgICB7ICJtcDJ2LWhpZ2giLCBDMkNvbmZpZzo6UFJPRklMRV9NUDJWX0hJR0ggfSwKKyAgICAgICAgeyAibXAydi00MjIiLCBDMkNvbmZpZzo6UFJPRklMRV9NUDJWXzQyMiB9LAorICAgICAgICB7ICJtcDJ2LW11bHRpdmlldyIsIEMyQ29uZmlnOjpQUk9GSUxFX01QMlZfTVVMVElWSUVXIH0sCisgICAgICAgIHsgImgyNjMtYmFzZWxpbmUiLCBDMkNvbmZpZzo6UFJPRklMRV9IMjYzX0JBU0VMSU5FIH0sCisgICAgICAgIHsgImgyNjMtaDMyMCIsIEMyQ29uZmlnOjpQUk9GSUxFX0gyNjNfSDMyMCB9LAorICAgICAgICB7ICJoMjYzLXYxYmMiLCBDMkNvbmZpZzo6UFJPRklMRV9IMjYzX1YxQkMgfSwKKyAgICAgICAgeyAiaDI2My1pc3d2MiIsIEMyQ29uZmlnOjpQUk9GSUxFX0gyNjNfSVNXVjIgfSwKKyAgICAgICAgeyAiaDI2My1pc3d2MyIsIEMyQ29uZmlnOjpQUk9GSUxFX0gyNjNfSVNXVjMgfSwKKyAgICAgICAgeyAiaDI2My1oaWdoLWNvbXByZXNzaW9uIiwgQzJDb25maWc6OlBST0ZJTEVfSDI2M19ISUdIX0NPTVBSRVNTSU9OIH0sCisgICAgICAgIHsgImgyNjMtaW50ZXJuZXQiLCBDMkNvbmZpZzo6UFJPRklMRV9IMjYzX0lOVEVSTkVUIH0sCisgICAgICAgIHsgImgyNjMtaW50ZXJsYWNlIiwgQzJDb25maWc6OlBST0ZJTEVfSDI2M19JTlRFUkxBQ0UgfSwKKyAgICAgICAgeyAiaDI2My1oaWdoLWxhdGVuY3kiLCBDMkNvbmZpZzo6UFJPRklMRV9IMjYzX0hJR0hfTEFURU5DWSB9LAorICAgICAgICB7ICJtcDR2LXNpbXBsZSIsIEMyQ29uZmlnOjpQUk9GSUxFX01QNFZfU0lNUExFIH0sCisgICAgICAgIHsgIm1wNHYtc2ltcGxlLXNjYWxhYmxlIiwgQzJDb25maWc6OlBST0ZJTEVfTVA0Vl9TSU1QTEVfU0NBTEFCTEUgfSwKKyAgICAgICAgeyAibXA0di1jb3JlIiwgQzJDb25maWc6OlBST0ZJTEVfTVA0Vl9DT1JFIH0sCisgICAgICAgIHsgIm1wNHYtbWFpbiIsIEMyQ29uZmlnOjpQUk9GSUxFX01QNFZfTUFJTiB9LAorICAgICAgICB7ICJtcDR2LW5iaXQiLCBDMkNvbmZpZzo6UFJPRklMRV9NUDRWX05CSVQgfSwKKyAgICAgICAgeyAibXA0di1hcnRzIiwgQzJDb25maWc6OlBST0ZJTEVfTVA0Vl9BUlRTIH0sCisgICAgICAgIHsgIm1wNHYtY29yZS1zY2FsYWJsZSIsIEMyQ29uZmlnOjpQUk9GSUxFX01QNFZfQ09SRV9TQ0FMQUJMRSB9LAorICAgICAgICB7ICJtcDR2LWFjZSIsIEMyQ29uZmlnOjpQUk9GSUxFX01QNFZfQUNFIH0sCisgICAgICAgIHsgIm1wNHYtYWR2YW5jZWQtY29yZSIsIEMyQ29uZmlnOjpQUk9GSUxFX01QNFZfQURWQU5DRURfQ09SRSB9LAorICAgICAgICB7ICJtcDR2LXNpbXBsZS1zdHVkaW8iLCBDMkNvbmZpZzo6UFJPRklMRV9NUDRWX1NJTVBMRV9TVFVESU8gfSwKKyAgICAgICAgeyAibXA0di1jb3JlLXN0dWRpbyIsIEMyQ29uZmlnOjpQUk9GSUxFX01QNFZfQ09SRV9TVFVESU8gfSwKKyAgICAgICAgeyAibXA0di1hZHZhbmNlZC1zaW1wbGUiLCBDMkNvbmZpZzo6UFJPRklMRV9NUDRWX0FEVkFOQ0VEX1NJTVBMRSB9LAorICAgICAgICB7ICJtcDR2LWZncyIsIEMyQ29uZmlnOjpQUk9GSUxFX01QNFZfRkdTIH0sCisgICAgICAgIHsgImF2Yy1iYXNlbGluZSIsIEMyQ29uZmlnOjpQUk9GSUxFX0FWQ19CQVNFTElORSB9LAorICAgICAgICB7ICJhdmMtY29uc3RyYWluZWQtYmFzZWxpbmUiLCBDMkNvbmZpZzo6UFJPRklMRV9BVkNfQ09OU1RSQUlORURfQkFTRUxJTkUgfSwKKyAgICAgICAgeyAiYXZjLW1haW4iLCBDMkNvbmZpZzo6UFJPRklMRV9BVkNfTUFJTiB9LAorICAgICAgICB7ICJhdmMtZXh0ZW5kZWQiLCBDMkNvbmZpZzo6UFJPRklMRV9BVkNfRVhURU5ERUQgfSwKKyAgICAgICAgeyAiYXZjLWhpZ2giLCBDMkNvbmZpZzo6UFJPRklMRV9BVkNfSElHSCB9LAorICAgICAgICB7ICJhdmMtcHJvZ3Jlc3NpdmUtaGlnaCIsIEMyQ29uZmlnOjpQUk9GSUxFX0FWQ19QUk9HUkVTU0lWRV9ISUdIIH0sCisgICAgICAgIHsgImF2Yy1jb25zdHJhaW5lZC1oaWdoIiwgQzJDb25maWc6OlBST0ZJTEVfQVZDX0NPTlNUUkFJTkVEX0hJR0ggfSwKKyAgICAgICAgeyAiYXZjLWhpZ2gtMTAiLCBDMkNvbmZpZzo6UFJPRklMRV9BVkNfSElHSF8xMCB9LAorICAgICAgICB7ICJhdmMtcHJvZ3Jlc3NpdmUtaGlnaC0xMCIsIEMyQ29uZmlnOjpQUk9GSUxFX0FWQ19QUk9HUkVTU0lWRV9ISUdIXzEwIH0sCisgICAgICAgIHsgImF2Yy1oaWdoLTQyMiIsIEMyQ29uZmlnOjpQUk9GSUxFX0FWQ19ISUdIXzQyMiB9LAorICAgICAgICB7ICJhdmMtaGlnaC00NDQtcHJlZGljdGl2ZSIsIEMyQ29uZmlnOjpQUk9GSUxFX0FWQ19ISUdIXzQ0NF9QUkVESUNUSVZFIH0sCisgICAgICAgIHsgImF2Yy1oaWdoLTEwLWludHJhIiwgQzJDb25maWc6OlBST0ZJTEVfQVZDX0hJR0hfMTBfSU5UUkEgfSwKKyAgICAgICAgeyAiYXZjLWhpZ2gtNDIyLWludHJhIiwgQzJDb25maWc6OlBST0ZJTEVfQVZDX0hJR0hfNDIyX0lOVFJBIH0sCisgICAgICAgIHsgImF2Yy1oaWdoLTQ0NC1pbnRyYSIsIEMyQ29uZmlnOjpQUk9GSUxFX0FWQ19ISUdIXzQ0NF9JTlRSQSB9LAorICAgICAgICB7ICJhdmMtY2F2bGMtNDQ0LWludHJhIiwgQzJDb25maWc6OlBST0ZJTEVfQVZDX0NBVkxDXzQ0NF9JTlRSQSB9LAorICAgICAgICB7ICJhdmMtc2NhbGFibGUtYmFzZWxpbmUiLCBDMkNvbmZpZzo6UFJPRklMRV9BVkNfU0NBTEFCTEVfQkFTRUxJTkUgfSwKKyAgICAgICAgeyAiYXZjLXNjYWxhYmxlLWNvbnN0cmFpbmVkLWJhc2VsaW5lIiwgQzJDb25maWc6OlBST0ZJTEVfQVZDX1NDQUxBQkxFX0NPTlNUUkFJTkVEX0JBU0VMSU5FIH0sCisgICAgICAgIHsgImF2Yy1zY2FsYWJsZS1oaWdoIiwgQzJDb25maWc6OlBST0ZJTEVfQVZDX1NDQUxBQkxFX0hJR0ggfSwKKyAgICAgICAgeyAiYXZjLXNjYWxhYmxlLWNvbnN0cmFpbmVkLWhpZ2giLCBDMkNvbmZpZzo6UFJPRklMRV9BVkNfU0NBTEFCTEVfQ09OU1RSQUlORURfSElHSCB9LAorICAgICAgICB7ICJhdmMtc2NhbGFibGUtaGlnaC1pbnRyYSIsIEMyQ29uZmlnOjpQUk9GSUxFX0FWQ19TQ0FMQUJMRV9ISUdIX0lOVFJBIH0sCisgICAgICAgIHsgImF2Yy1tdWx0aXZpZXctaGlnaCIsIEMyQ29uZmlnOjpQUk9GSUxFX0FWQ19NVUxUSVZJRVdfSElHSCB9LAorICAgICAgICB7ICJhdmMtc3RlcmVvLWhpZ2giLCBDMkNvbmZpZzo6UFJPRklMRV9BVkNfU1RFUkVPX0hJR0ggfSwKKyAgICAgICAgeyAiYXZjLW1mYy1oaWdoIiwgQzJDb25maWc6OlBST0ZJTEVfQVZDX01GQ19ISUdIIH0sCisgICAgICAgIHsgImF2Yy1tdWx0aXZpZXctZGVwdGgtaGlnaCIsIEMyQ29uZmlnOjpQUk9GSUxFX0FWQ19NVUxUSVZJRVdfREVQVEhfSElHSCB9LAorICAgICAgICB7ICJhdmMtbWZjLWRlcHRoLWhpZ2giLCBDMkNvbmZpZzo6UFJPRklMRV9BVkNfTUZDX0RFUFRIX0hJR0ggfSwKKyAgICAgICAgeyAiYXZjLWVuaGFuY2VkLW11bHRpdmlldy1kZXB0aC1oaWdoIiwgQzJDb25maWc6OlBST0ZJTEVfQVZDX0VOSEFOQ0VEX01VTFRJVklFV19ERVBUSF9ISUdIIH0sCisgICAgICAgIHsgImhldmMtbWFpbiIsIEMyQ29uZmlnOjpQUk9GSUxFX0hFVkNfTUFJTiB9LAorICAgICAgICB7ICJoZXZjLW1haW4tMTAiLCBDMkNvbmZpZzo6UFJPRklMRV9IRVZDX01BSU5fMTAgfSwKKyAgICAgICAgeyAiaGV2Yy1tYWluLXN0aWxsIiwgQzJDb25maWc6OlBST0ZJTEVfSEVWQ19NQUlOX1NUSUxMIH0sCisgICAgICAgIHsgImhldmMtbW9ubyIsIEMyQ29uZmlnOjpQUk9GSUxFX0hFVkNfTU9OTyB9LAorICAgICAgICB7ICJoZXZjLW1vbm8tMTIiLCBDMkNvbmZpZzo6UFJPRklMRV9IRVZDX01PTk9fMTIgfSwKKyAgICAgICAgeyAiaGV2Yy1tb25vLTE2IiwgQzJDb25maWc6OlBST0ZJTEVfSEVWQ19NT05PXzE2IH0sCisgICAgICAgIHsgImhldmMtbWFpbi0xMiIsIEMyQ29uZmlnOjpQUk9GSUxFX0hFVkNfTUFJTl8xMiB9LAorICAgICAgICB7ICJoZXZjLW1haW4tNDIyLTEwIiwgQzJDb25maWc6OlBST0ZJTEVfSEVWQ19NQUlOXzQyMl8xMCB9LAorICAgICAgICB7ICJoZXZjLW1haW4tNDIyLTEyIiwgQzJDb25maWc6OlBST0ZJTEVfSEVWQ19NQUlOXzQyMl8xMiB9LAorICAgICAgICB7ICJoZXZjLW1haW4tNDQ0IiwgQzJDb25maWc6OlBST0ZJTEVfSEVWQ19NQUlOXzQ0NCB9LAorICAgICAgICB7ICJoZXZjLW1haW4tNDQ0LTEwIiwgQzJDb25maWc6OlBST0ZJTEVfSEVWQ19NQUlOXzQ0NF8xMCB9LAorICAgICAgICB7ICJoZXZjLW1haW4tNDQ0LTEyIiwgQzJDb25maWc6OlBST0ZJTEVfSEVWQ19NQUlOXzQ0NF8xMiB9LAorICAgICAgICB7ICJoZXZjLW1haW4taW50cmEiLCBDMkNvbmZpZzo6UFJPRklMRV9IRVZDX01BSU5fSU5UUkEgfSwKKyAgICAgICAgeyAiaGV2Yy1tYWluLTEwLWludHJhIiwgQzJDb25maWc6OlBST0ZJTEVfSEVWQ19NQUlOXzEwX0lOVFJBIH0sCisgICAgICAgIHsgImhldmMtbWFpbi0xMi1pbnRyYSIsIEMyQ29uZmlnOjpQUk9GSUxFX0hFVkNfTUFJTl8xMl9JTlRSQSB9LAorICAgICAgICB7ICJoZXZjLW1haW4tNDIyLTEwLWludHJhIiwgQzJDb25maWc6OlBST0ZJTEVfSEVWQ19NQUlOXzQyMl8xMF9JTlRSQSB9LAorICAgICAgICB7ICJoZXZjLW1haW4tNDIyLTEyLWludHJhIiwgQzJDb25maWc6OlBST0ZJTEVfSEVWQ19NQUlOXzQyMl8xMl9JTlRSQSB9LAorICAgICAgICB7ICJoZXZjLW1haW4tNDQ0LWludHJhIiwgQzJDb25maWc6OlBST0ZJTEVfSEVWQ19NQUlOXzQ0NF9JTlRSQSB9LAorICAgICAgICB7ICJoZXZjLW1haW4tNDQ0LTEwLWludHJhIiwgQzJDb25maWc6OlBST0ZJTEVfSEVWQ19NQUlOXzQ0NF8xMF9JTlRSQSB9LAorICAgICAgICB7ICJoZXZjLW1haW4tNDQ0LTEyLWludHJhIiwgQzJDb25maWc6OlBST0ZJTEVfSEVWQ19NQUlOXzQ0NF8xMl9JTlRSQSB9LAorICAgICAgICB7ICJoZXZjLW1haW4tNDQ0LTE2LWludHJhIiwgQzJDb25maWc6OlBST0ZJTEVfSEVWQ19NQUlOXzQ0NF8xNl9JTlRSQSB9LAorICAgICAgICB7ICJoZXZjLW1haW4tNDQ0LXN0aWxsIiwgQzJDb25maWc6OlBST0ZJTEVfSEVWQ19NQUlOXzQ0NF9TVElMTCB9LAorICAgICAgICB7ICJoZXZjLW1haW4tNDQ0LTE2LXN0aWxsIiwgQzJDb25maWc6OlBST0ZJTEVfSEVWQ19NQUlOXzQ0NF8xNl9TVElMTCB9LAorICAgICAgICB7ICJoZXZjLWhpZ2gtNDQ0IiwgQzJDb25maWc6OlBST0ZJTEVfSEVWQ19ISUdIXzQ0NCB9LAorICAgICAgICB7ICJoZXZjLWhpZ2gtNDQ0LTEwIiwgQzJDb25maWc6OlBST0ZJTEVfSEVWQ19ISUdIXzQ0NF8xMCB9LAorICAgICAgICB7ICJoZXZjLWhpZ2gtNDQ0LTE0IiwgQzJDb25maWc6OlBST0ZJTEVfSEVWQ19ISUdIXzQ0NF8xNCB9LAorICAgICAgICB7ICJoZXZjLWhpZ2gtNDQ0LTE2LWludHJhIiwgQzJDb25maWc6OlBST0ZJTEVfSEVWQ19ISUdIXzQ0NF8xNl9JTlRSQSB9LAorICAgICAgICB7ICJoZXZjLXN4LW1haW4iLCBDMkNvbmZpZzo6UFJPRklMRV9IRVZDX1NYX01BSU4gfSwKKyAgICAgICAgeyAiaGV2Yy1zeC1tYWluLTEwIiwgQzJDb25maWc6OlBST0ZJTEVfSEVWQ19TWF9NQUlOXzEwIH0sCisgICAgICAgIHsgImhldmMtc3gtbWFpbi00NDQiLCBDMkNvbmZpZzo6UFJPRklMRV9IRVZDX1NYX01BSU5fNDQ0IH0sCisgICAgICAgIHsgImhldmMtc3gtbWFpbi00NDQtMTAiLCBDMkNvbmZpZzo6UFJPRklMRV9IRVZDX1NYX01BSU5fNDQ0XzEwIH0sCisgICAgICAgIHsgImhldmMtc3gtaGlnaC00NDQiLCBDMkNvbmZpZzo6UFJPRklMRV9IRVZDX1NYX0hJR0hfNDQ0IH0sCisgICAgICAgIHsgImhldmMtc3gtaGlnaC00NDQtMTAiLCBDMkNvbmZpZzo6UFJPRklMRV9IRVZDX1NYX0hJR0hfNDQ0XzEwIH0sCisgICAgICAgIHsgImhldmMtc3gtaGlnaC00NDQtMTQiLCBDMkNvbmZpZzo6UFJPRklMRV9IRVZDX1NYX0hJR0hfNDQ0XzE0IH0sCisgICAgICAgIHsgImhldmMtbXVsdGl2aWV3LW1haW4iLCBDMkNvbmZpZzo6UFJPRklMRV9IRVZDX01VTFRJVklFV19NQUlOIH0sCisgICAgICAgIHsgImhldmMtc2NhbGFibGUtbWFpbiIsIEMyQ29uZmlnOjpQUk9GSUxFX0hFVkNfU0NBTEFCTEVfTUFJTiB9LAorICAgICAgICB7ICJoZXZjLXNjYWxhYmxlLW1haW4tMTAiLCBDMkNvbmZpZzo6UFJPRklMRV9IRVZDX1NDQUxBQkxFX01BSU5fMTAgfSwKKyAgICAgICAgeyAiaGV2Yy1zY2FsYWJsZS1tb25vIiwgQzJDb25maWc6OlBST0ZJTEVfSEVWQ19TQ0FMQUJMRV9NT05PIH0sCisgICAgICAgIHsgImhldmMtc2NhbGFibGUtbW9uby0xMiIsIEMyQ29uZmlnOjpQUk9GSUxFX0hFVkNfU0NBTEFCTEVfTU9OT18xMiB9LAorICAgICAgICB7ICJoZXZjLXNjYWxhYmxlLW1vbm8tMTYiLCBDMkNvbmZpZzo6UFJPRklMRV9IRVZDX1NDQUxBQkxFX01PTk9fMTYgfSwKKyAgICAgICAgeyAiaGV2Yy1zY2FsYWJsZS1tYWluLTQ0NCIsIEMyQ29uZmlnOjpQUk9GSUxFX0hFVkNfU0NBTEFCTEVfTUFJTl80NDQgfSwKKyAgICAgICAgeyAiaGV2Yy0zZC1tYWluIiwgQzJDb25maWc6OlBST0ZJTEVfSEVWQ18zRF9NQUlOIH0sCisgICAgICAgIHsgInZwOS0wIiwgQzJDb25maWc6OlBST0ZJTEVfVlA5XzAgfSwKKyAgICAgICAgeyAidnA5LTEiLCBDMkNvbmZpZzo6UFJPRklMRV9WUDlfMSB9LAorICAgICAgICB7ICJ2cDktMiIsIEMyQ29uZmlnOjpQUk9GSUxFX1ZQOV8yIH0sCisgICAgICAgIHsgInZwOS0zIiwgQzJDb25maWc6OlBST0ZJTEVfVlA5XzMgfSwKK30pKQorCitERUZJTkVfQzJfRU5VTV9WQUxVRV9DVVNUT01fSEVMUEVSKEMyQ29uZmlnOjpsZXZlbF90LCAoeworICAgICAgICB7ICJ1bnVzZWQiLCBDMkNvbmZpZzo6TEVWRUxfVU5VU0VEIH0sCisgICAgICAgIHsgIm1wMnYtbG93IiwgQzJDb25maWc6OkxFVkVMX01QMlZfTE9XIH0sCisgICAgICAgIHsgIm1wMnYtbWFpbiIsIEMyQ29uZmlnOjpMRVZFTF9NUDJWX01BSU4gfSwKKyAgICAgICAgeyAibXAydi1oaWdoLTE0NDAiLCBDMkNvbmZpZzo6TEVWRUxfTVAyVl9ISUdIXzE0NDAgfSwKKyAgICAgICAgeyAibXAydi1oaWdoIiwgQzJDb25maWc6OkxFVkVMX01QMlZfSElHSCB9LAorICAgICAgICB7ICJtcDJ2LWhpZ2hwIiwgQzJDb25maWc6OkxFVkVMX01QMlZfSElHSFAgfSwKKyAgICAgICAgeyAiaDI2My0xMCIsIEMyQ29uZmlnOjpMRVZFTF9IMjYzXzEwIH0sCisgICAgICAgIHsgImgyNjMtMjAiLCBDMkNvbmZpZzo6TEVWRUxfSDI2M18yMCB9LAorICAgICAgICB7ICJoMjYzLTMwIiwgQzJDb25maWc6OkxFVkVMX0gyNjNfMzAgfSwKKyAgICAgICAgeyAiaDI2My00MCIsIEMyQ29uZmlnOjpMRVZFTF9IMjYzXzQwIH0sCisgICAgICAgIHsgImgyNjMtNDUiLCBDMkNvbmZpZzo6TEVWRUxfSDI2M180NSB9LAorICAgICAgICB7ICJoMjYzLTUwIiwgQzJDb25maWc6OkxFVkVMX0gyNjNfNTAgfSwKKyAgICAgICAgeyAiaDI2My02MCIsIEMyQ29uZmlnOjpMRVZFTF9IMjYzXzYwIH0sCisgICAgICAgIHsgImgyNjMtNzAiLCBDMkNvbmZpZzo6TEVWRUxfSDI2M183MCB9LAorICAgICAgICB7ICJtcDR2LTAiLCBDMkNvbmZpZzo6TEVWRUxfTVA0Vl8wIH0sCisgICAgICAgIHsgIm1wNHYtMGIiLCBDMkNvbmZpZzo6TEVWRUxfTVA0Vl8wQiB9LAorICAgICAgICB7ICJtcDR2LTEiLCBDMkNvbmZpZzo6TEVWRUxfTVA0Vl8xIH0sCisgICAgICAgIHsgIm1wNHYtMiIsIEMyQ29uZmlnOjpMRVZFTF9NUDRWXzIgfSwKKyAgICAgICAgeyAibXA0di0zIiwgQzJDb25maWc6OkxFVkVMX01QNFZfMyB9LAorICAgICAgICB7ICJtcDR2LTNiIiwgQzJDb25maWc6OkxFVkVMX01QNFZfM0IgfSwKKyAgICAgICAgeyAibXA0di00IiwgQzJDb25maWc6OkxFVkVMX01QNFZfNCB9LAorICAgICAgICB7ICJtcDR2LTRhIiwgQzJDb25maWc6OkxFVkVMX01QNFZfNEEgfSwKKyAgICAgICAgeyAibXA0di01IiwgQzJDb25maWc6OkxFVkVMX01QNFZfNSB9LAorICAgICAgICB7ICJtcDR2LTYiLCBDMkNvbmZpZzo6TEVWRUxfTVA0Vl82IH0sCisgICAgICAgIHsgImF2Yy0xIiwgQzJDb25maWc6OkxFVkVMX0FWQ18xIH0sCisgICAgICAgIHsgImF2Yy0xYiIsIEMyQ29uZmlnOjpMRVZFTF9BVkNfMUIgfSwKKyAgICAgICAgeyAiYXZjLTEuMSIsIEMyQ29uZmlnOjpMRVZFTF9BVkNfMV8xIH0sCisgICAgICAgIHsgImF2Yy0xLjIiLCBDMkNvbmZpZzo6TEVWRUxfQVZDXzFfMiB9LAorICAgICAgICB7ICJhdmMtMS4zIiwgQzJDb25maWc6OkxFVkVMX0FWQ18xXzMgfSwKKyAgICAgICAgeyAiYXZjLTIiLCBDMkNvbmZpZzo6TEVWRUxfQVZDXzIgfSwKKyAgICAgICAgeyAiYXZjLTIuMSIsIEMyQ29uZmlnOjpMRVZFTF9BVkNfMl8xIH0sCisgICAgICAgIHsgImF2Yy0yLjIiLCBDMkNvbmZpZzo6TEVWRUxfQVZDXzJfMiB9LAorICAgICAgICB7ICJhdmMtMyIsIEMyQ29uZmlnOjpMRVZFTF9BVkNfMyB9LAorICAgICAgICB7ICJhdmMtMy4xIiwgQzJDb25maWc6OkxFVkVMX0FWQ18zXzEgfSwKKyAgICAgICAgeyAiYXZjLTMuMiIsIEMyQ29uZmlnOjpMRVZFTF9BVkNfM18yIH0sCisgICAgICAgIHsgImF2Yy00IiwgQzJDb25maWc6OkxFVkVMX0FWQ180IH0sCisgICAgICAgIHsgImF2Yy00LjEiLCBDMkNvbmZpZzo6TEVWRUxfQVZDXzRfMSB9LAorICAgICAgICB7ICJhdmMtNC4yIiwgQzJDb25maWc6OkxFVkVMX0FWQ180XzIgfSwKKyAgICAgICAgeyAiYXZjLTUiLCBDMkNvbmZpZzo6TEVWRUxfQVZDXzUgfSwKKyAgICAgICAgeyAiYXZjLTUuMSIsIEMyQ29uZmlnOjpMRVZFTF9BVkNfNV8xIH0sCisgICAgICAgIHsgImF2Yy01LjIiLCBDMkNvbmZpZzo6TEVWRUxfQVZDXzVfMiB9LAorICAgICAgICB7ICJoZXZjLW1haW4tMSIsIEMyQ29uZmlnOjpMRVZFTF9IRVZDX01BSU5fMSB9LAorICAgICAgICB7ICJoZXZjLW1haW4tMiIsIEMyQ29uZmlnOjpMRVZFTF9IRVZDX01BSU5fMiB9LAorICAgICAgICB7ICJoZXZjLW1haW4tMi4xIiwgQzJDb25maWc6OkxFVkVMX0hFVkNfTUFJTl8yXzEgfSwKKyAgICAgICAgeyAiaGV2Yy1tYWluLTMiLCBDMkNvbmZpZzo6TEVWRUxfSEVWQ19NQUlOXzMgfSwKKyAgICAgICAgeyAiaGV2Yy1tYWluLTMuMSIsIEMyQ29uZmlnOjpMRVZFTF9IRVZDX01BSU5fM18xIH0sCisgICAgICAgIHsgImhldmMtbWFpbi00IiwgQzJDb25maWc6OkxFVkVMX0hFVkNfTUFJTl80IH0sCisgICAgICAgIHsgImhldmMtbWFpbi00LjEiLCBDMkNvbmZpZzo6TEVWRUxfSEVWQ19NQUlOXzRfMSB9LAorICAgICAgICB7ICJoZXZjLW1haW4tNSIsIEMyQ29uZmlnOjpMRVZFTF9IRVZDX01BSU5fNSB9LAorICAgICAgICB7ICJoZXZjLW1haW4tNS4xIiwgQzJDb25maWc6OkxFVkVMX0hFVkNfTUFJTl81XzEgfSwKKyAgICAgICAgeyAiaGV2Yy1tYWluLTUuMiIsIEMyQ29uZmlnOjpMRVZFTF9IRVZDX01BSU5fNV8yIH0sCisgICAgICAgIHsgImhldmMtbWFpbi02IiwgQzJDb25maWc6OkxFVkVMX0hFVkNfTUFJTl82IH0sCisgICAgICAgIHsgImhldmMtbWFpbi02LjEiLCBDMkNvbmZpZzo6TEVWRUxfSEVWQ19NQUlOXzZfMSB9LAorICAgICAgICB7ICJoZXZjLW1haW4tNi4yIiwgQzJDb25maWc6OkxFVkVMX0hFVkNfTUFJTl82XzIgfSwKKyAgICAgICAgeyAiaGV2Yy1oaWdoLTQiLCBDMkNvbmZpZzo6TEVWRUxfSEVWQ19ISUdIXzQgfSwKKyAgICAgICAgeyAiaGV2Yy1oaWdoLTQuMSIsIEMyQ29uZmlnOjpMRVZFTF9IRVZDX0hJR0hfNF8xIH0sCisgICAgICAgIHsgImhldmMtaGlnaC01IiwgQzJDb25maWc6OkxFVkVMX0hFVkNfSElHSF81IH0sCisgICAgICAgIHsgImhldmMtaGlnaC01LjEiLCBDMkNvbmZpZzo6TEVWRUxfSEVWQ19ISUdIXzVfMSB9LAorICAgICAgICB7ICJoZXZjLWhpZ2gtNS4yIiwgQzJDb25maWc6OkxFVkVMX0hFVkNfSElHSF81XzIgfSwKKyAgICAgICAgeyAiaGV2Yy1oaWdoLTYiLCBDMkNvbmZpZzo6TEVWRUxfSEVWQ19ISUdIXzYgfSwKKyAgICAgICAgeyAiaGV2Yy1oaWdoLTYuMSIsIEMyQ29uZmlnOjpMRVZFTF9IRVZDX0hJR0hfNl8xIH0sCisgICAgICAgIHsgImhldmMtaGlnaC02LjIiLCBDMkNvbmZpZzo6TEVWRUxfSEVWQ19ISUdIXzZfMiB9LAorICAgICAgICB7ICJ2cDktMSIsIEMyQ29uZmlnOjpMRVZFTF9WUDlfMSB9LAorICAgICAgICB7ICJ2cDktMS4xIiwgQzJDb25maWc6OkxFVkVMX1ZQOV8xXzEgfSwKKyAgICAgICAgeyAidnA5LTIiLCBDMkNvbmZpZzo6TEVWRUxfVlA5XzIgfSwKKyAgICAgICAgeyAidnA5LTIuMSIsIEMyQ29uZmlnOjpMRVZFTF9WUDlfMl8xIH0sCisgICAgICAgIHsgInZwOS0zIiwgQzJDb25maWc6OkxFVkVMX1ZQOV8zIH0sCisgICAgICAgIHsgInZwOS0zLjEiLCBDMkNvbmZpZzo6TEVWRUxfVlA5XzNfMSB9LAorICAgICAgICB7ICJ2cDktNCIsIEMyQ29uZmlnOjpMRVZFTF9WUDlfNCB9LAorICAgICAgICB7ICJ2cDktNC4xIiwgQzJDb25maWc6OkxFVkVMX1ZQOV80XzEgfSwKKyAgICAgICAgeyAidnA5LTUiLCBDMkNvbmZpZzo6TEVWRUxfVlA5XzUgfSwKKyAgICAgICAgeyAidnA5LTUuMSIsIEMyQ29uZmlnOjpMRVZFTF9WUDlfNV8xIH0sCisgICAgICAgIHsgInZwOS01LjIiLCBDMkNvbmZpZzo6TEVWRUxfVlA5XzVfMiB9LAorICAgICAgICB7ICJ2cDktNiIsIEMyQ29uZmlnOjpMRVZFTF9WUDlfNiB9LAorICAgICAgICB7ICJ2cDktNi4xIiwgQzJDb25maWc6OkxFVkVMX1ZQOV82XzEgfSwKKyAgICAgICAgeyAidnA5LTYuMiIsIEMyQ29uZmlnOjpMRVZFTF9WUDlfNl8yIH0sCit9KSkKKworREVGSU5FX0MyX0VOVU1fVkFMVUVfQ1VTVE9NX0hFTFBFUihDMkJ1ZmZlckRhdGE6OnR5cGVfdCwgKHsKKyAgICAgICAgeyAiaW52YWxpZCIsICAgICAgICBDMkJ1ZmZlckRhdGE6OklOVkFMSUQgfSwKKyAgICAgICAgeyAibGluZWFyIiwgICAgICAgICBDMkJ1ZmZlckRhdGE6OkxJTkVBUiB9LAorICAgICAgICB7ICJsaW5lYXItY2h1bmtzIiwgIEMyQnVmZmVyRGF0YTo6TElORUFSX0NIVU5LUyB9LAorICAgICAgICB7ICJncmFwaGljIiwgICAgICAgIEMyQnVmZmVyRGF0YTo6R1JBUEhJQyB9LAorICAgICAgICB7ICJncmFwaGljLWNodW5rcyIsIEMyQnVmZmVyRGF0YTo6R1JBUEhJQ19DSFVOS1MgfSwKK30pKQorCisKZGlmZiAtLWdpdCBhL21lZGlhL2NvZGVjMi92bmRrL0MyUGxhdGZvcm1TdG9yZVBsdWdpbkxvYWRlci5jcHAgYi9tZWRpYS9jb2RlYzIvdm5kay9DMlBsYXRmb3JtU3RvcmVQbHVnaW5Mb2FkZXIuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdhNDYwZjQKLS0tIC9kZXYvbnVsbAorKysgYi9tZWRpYS9jb2RlYzIvdm5kay9DMlBsYXRmb3JtU3RvcmVQbHVnaW5Mb2FkZXIuY3BwCkBAIC0wLDAgKzEsOTUgQEAKKy8qCisgKiBDb3B5cmlnaHQgMjAxOCwgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCisKKy8vI2RlZmluZSBMT0dfTkRFQlVHIDAKKyNkZWZpbmUgTE9HX1RBRyAiQzJQbGF0Zm9ybVN0b3JlUGx1Z2luTG9hZGVyIgorCisjaW5jbHVkZSA8ZGxmY24uaD4KKworI2luY2x1ZGUgPHV0aWxzL0xvZy5oPgorCisjaW5jbHVkZSAiQzJQbGF0Zm9ybVN0b3JlUGx1Z2luTG9hZGVyLmgiCisKKy8qIHN0YXRpYyAqLyBhbmRyb2lkOjpNdXRleCBDMlBsYXRmb3JtU3RvcmVQbHVnaW5Mb2FkZXI6OnNNdXRleDsKKy8qIHN0YXRpYyAqLyBzdGQ6OnVuaXF1ZV9wdHI8QzJQbGF0Zm9ybVN0b3JlUGx1Z2luTG9hZGVyPiBDMlBsYXRmb3JtU3RvcmVQbHVnaW5Mb2FkZXI6OnNJbnN0YW5jZTsKKworQzJQbGF0Zm9ybVN0b3JlUGx1Z2luTG9hZGVyOjpDMlBsYXRmb3JtU3RvcmVQbHVnaW5Mb2FkZXIoY29uc3QgY2hhciAqbGliUGF0aCkKKyAgICA6IG1DcmVhdGVCbG9ja1Bvb2wobnVsbHB0cikgeworICAgIG1MaWJIYW5kbGUgPSBkbG9wZW4obGliUGF0aCwgUlRMRF9OT1cgfCBSVExEX05PREVMRVRFKTsKKyAgICBpZiAobUxpYkhhbmRsZSA9PSBudWxscHRyKSB7CisgICAgICAgIEFMT0dEKCJGYWlsZWQgdG8gbG9hZCBsaWJyYXJ5OiAlcyAoJXMpIiwgbGliUGF0aCwgZGxlcnJvcigpKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBtQ3JlYXRlQmxvY2tQb29sID0gKENyZWF0ZUJsb2NrUG9vbEZ1bmMpZGxzeW0obUxpYkhhbmRsZSwgIkNyZWF0ZUJsb2NrUG9vbCIpOworICAgIGlmIChtQ3JlYXRlQmxvY2tQb29sID09IG51bGxwdHIpIHsKKyAgICAgICAgQUxPR0QoIkZhaWxlZCB0byBmaW5kIHN5bWJvbDogQ3JlYXRlQmxvY2tQb29sICglcykiLCBkbGVycm9yKCkpOworICAgIH0KKyAgICBtQ3JlYXRlQWxsb2NhdG9yID0gKENyZWF0ZUFsbG9jYXRvckZ1bmMpZGxzeW0obUxpYkhhbmRsZSwgIkNyZWF0ZUFsbG9jYXRvciIpOworICAgIGlmIChtQ3JlYXRlQWxsb2NhdG9yID09IG51bGxwdHIpIHsKKyAgICAgICAgQUxPR0QoIkZhaWxlZCB0byBmaW5kIHN5bWJvbDogQ3JlYXRlQWxsb2NhdG9yICglcykiLCBkbGVycm9yKCkpOworICAgIH0KK30KKworQzJQbGF0Zm9ybVN0b3JlUGx1Z2luTG9hZGVyOjp+QzJQbGF0Zm9ybVN0b3JlUGx1Z2luTG9hZGVyKCkgeworICAgIGlmIChtTGliSGFuZGxlICE9IG51bGxwdHIpIHsKKyAgICAgICAgQUxPR1YoIkNsb3NpbmcgaGFuZGxlIik7CisgICAgICAgIGRsY2xvc2UobUxpYkhhbmRsZSk7CisgICAgfQorfQorCitjMl9zdGF0dXNfdCBDMlBsYXRmb3JtU3RvcmVQbHVnaW5Mb2FkZXI6OmNyZWF0ZUJsb2NrUG9vbCgKKyAgICAgICAgOjpDMkFsbG9jYXRvcjo6aWRfdCBhbGxvY2F0b3JJZCwgOjpDMkJsb2NrUG9vbDo6bG9jYWxfaWRfdCBibG9ja1Bvb2xJZCwKKyAgICAgICAgc3RkOjpzaGFyZWRfcHRyPEMyQmxvY2tQb29sPiogcG9vbCkgeworICAgIGlmIChtQ3JlYXRlQmxvY2tQb29sID09IG51bGxwdHIpIHsKKyAgICAgICAgQUxPR0QoIkhhbmRsZSBvciBDcmVhdGVCbG9ja1Bvb2wgc3ltYm9sIGlzIG51bGwiKTsKKyAgICAgICAgcmV0dXJuIEMyX05PVF9GT1VORDsKKyAgICB9CisKKyAgICBzdGQ6OnNoYXJlZF9wdHI8OjpDMkJsb2NrUG9vbD4gcHRyKG1DcmVhdGVCbG9ja1Bvb2woYWxsb2NhdG9ySWQsIGJsb2NrUG9vbElkKSk7CisgICAgaWYgKHB0cikgeworICAgICAgICAqcG9vbCA9IHB0cjsKKyAgICAgICAgcmV0dXJuIEMyX09LOworICAgIH0KKyAgICBBTE9HRCgiRmFpbGVkIHRvIENyZWF0ZUJsb2NrUG9vbCBieSBhbGxvY2F0b3IgaWQ6ICV1IiwgYWxsb2NhdG9ySWQpOworICAgIHJldHVybiBDMl9CQURfSU5ERVg7Cit9CisKK2MyX3N0YXR1c190IEMyUGxhdGZvcm1TdG9yZVBsdWdpbkxvYWRlcjo6Y3JlYXRlQWxsb2NhdG9yKAorICAgICAgICA6OkMyQWxsb2NhdG9yOjppZF90IGFsbG9jYXRvcklkLCBzdGQ6OnNoYXJlZF9wdHI8QzJBbGxvY2F0b3I+KiBjb25zdCBhbGxvY2F0b3IpIHsKKyAgICBpZiAobUNyZWF0ZUFsbG9jYXRvciA9PSBudWxscHRyKSB7CisgICAgICAgIEFMT0dEKCJIYW5kbGUgb3IgQ3JlYXRlQWxsb2NhdG9yIHN5bWJvbCBpcyBudWxsIik7CisgICAgICAgIHJldHVybiBDMl9OT1RfRk9VTkQ7CisgICAgfQorCisgICAgYzJfc3RhdHVzX3QgcmVzID0gQzJfQ09SUlVQVEVEOworICAgIGFsbG9jYXRvci0+cmVzZXQobUNyZWF0ZUFsbG9jYXRvcihhbGxvY2F0b3JJZCwgJnJlcykpOworICAgIGlmIChyZXMgIT0gQzJfT0spIHsKKyAgICAgICAgQUxPR0QoIkZhaWxlZCB0byBDcmVhdGVBbGxvY2F0b3IgYnkgaWQ6ICV1LCByZXM6ICVkIiwgYWxsb2NhdG9ySWQsIHJlcyk7CisgICAgICAgIGFsbG9jYXRvci0+cmVzZXQoKTsKKyAgICAgICAgcmV0dXJuIHJlczsKKyAgICB9CisgICAgcmV0dXJuIEMyX09LOworfQorCisvLyBzdGF0aWMKK2NvbnN0IHN0ZDo6dW5pcXVlX3B0cjxDMlBsYXRmb3JtU3RvcmVQbHVnaW5Mb2FkZXI+JiBDMlBsYXRmb3JtU3RvcmVQbHVnaW5Mb2FkZXI6OkdldEluc3RhbmNlKCkgeworICAgIGFuZHJvaWQ6Ok11dGV4OjpBdXRvbG9jayBfbChzTXV0ZXgpOworICAgIGlmICghc0luc3RhbmNlKSB7CisgICAgICAgIEFMT0dWKCJMb2FkaW5nIGxpYnJhcnkiKTsKKyAgICAgICAgc0luc3RhbmNlLnJlc2V0KG5ldyBDMlBsYXRmb3JtU3RvcmVQbHVnaW5Mb2FkZXIoImxpYnN0YWdlZnJpZ2h0X2Njb2RlY19leHQuc28iKSk7CisgICAgfQorICAgIHJldHVybiBzSW5zdGFuY2U7Cit9CmRpZmYgLS1naXQgYS9tZWRpYS9jb2RlYzIvdm5kay9DMlN0b3JlLmNwcCBiL21lZGlhL2NvZGVjMi92bmRrL0MyU3RvcmUuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMzMDE5ZWQKLS0tIC9kZXYvbnVsbAorKysgYi9tZWRpYS9jb2RlYzIvdm5kay9DMlN0b3JlLmNwcApAQCAtMCwwICsxLDk3NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNyBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCisKKyNkZWZpbmUgTE9HX1RBRyAiQzJTdG9yZSIKKyNkZWZpbmUgTE9HX05ERUJVRyAwCisjaW5jbHVkZSA8dXRpbHMvTG9nLmg+CisKKyNpbmNsdWRlIDxDMkFsbG9jYXRvckdyYWxsb2MuaD4KKyNpbmNsdWRlIDxDMkFsbG9jYXRvcklvbi5oPgorI2luY2x1ZGUgPEMyQnVmZmVyUHJpdi5oPgorI2luY2x1ZGUgPEMyQnFCdWZmZXJQcml2Lmg+CisjaW5jbHVkZSA8QzJDb21wb25lbnQuaD4KKyNpbmNsdWRlIDxDMkNvbmZpZy5oPgorI2luY2x1ZGUgPEMyUGxhdGZvcm1TdG9yZVBsdWdpbkxvYWRlci5oPgorI2luY2x1ZGUgPEMyUGxhdGZvcm1TdXBwb3J0Lmg+CisjaW5jbHVkZSA8dXRpbC9DMkludGVyZmFjZUhlbHBlci5oPgorCisjaW5jbHVkZSA8ZGxmY24uaD4KKyNpbmNsdWRlIDx1bmlzdGQuaD4gLy8gZ2V0cGFnZXNpemUKKworI2luY2x1ZGUgPG1hcD4KKyNpbmNsdWRlIDxtZW1vcnk+CisjaW5jbHVkZSA8bXV0ZXg+CisKK25hbWVzcGFjZSBhbmRyb2lkIHsKKworLyoqCisgKiBSZXR1cm5zIHRoZSBwcmVmZXJyZWQgY29tcG9uZW50IHN0b3JlIGluIHRoaXMgcHJvY2VzcyB0byBhY2Nlc3MgaXRzIGludGVyZmFjZS4KKyAqLworc3RkOjpzaGFyZWRfcHRyPEMyQ29tcG9uZW50U3RvcmU+IEdldFByZWZlcnJlZENvZGVjMkNvbXBvbmVudFN0b3JlKCk7CisKKy8qKgorICogVGhlIHBsYXRmb3JtIGFsbG9jYXRvciBzdG9yZSBwcm92aWRlcyBiYXNpYyBhbGxvY2F0b3ItdHlwZXMgZm9yIHRoZSBmcmFtZXdvcmsgYmFzZWQgb24gaW9uIGFuZAorICogZ3JhbGxvYy4gQWxsb2NhdG9ycyBhcmUgbm90IG1lYW50IHRvIGJlIHVwZGF0YWJsZS4KKyAqCisgKiBcdG9kbyBQcm92aWRlIGFsbG9jYXRvciBiYXNlZCBvbiBhc2htZW0KKyAqIFx0b2RvIE1vdmUgaW9uIGFsbG9jYXRpb24gaW50byBpdHMgSElETCBvciBwcm92aWRlIHNvbWUgbWFwcGluZyBmcm9tIG1lbW9yeSB1c2FnZSB0byBpb24gZmxhZ3MKKyAqIFx0b2RvIE1ha2UgdGhpcyBhbGxvY2F0b3Igc3RvcmUgZXh0ZW5kYWJsZQorICovCitjbGFzcyBDMlBsYXRmb3JtQWxsb2NhdG9yU3RvcmVJbXBsIDogcHVibGljIEMyUGxhdGZvcm1BbGxvY2F0b3JTdG9yZSB7CitwdWJsaWM6CisgICAgQzJQbGF0Zm9ybUFsbG9jYXRvclN0b3JlSW1wbCgpOworCisgICAgdmlydHVhbCBjMl9zdGF0dXNfdCBmZXRjaEFsbG9jYXRvcigKKyAgICAgICAgICAgIGlkX3QgaWQsIHN0ZDo6c2hhcmVkX3B0cjxDMkFsbG9jYXRvcj4gKmNvbnN0IGFsbG9jYXRvcikgb3ZlcnJpZGU7CisKKyAgICB2aXJ0dWFsIHN0ZDo6dmVjdG9yPHN0ZDo6c2hhcmVkX3B0cjxjb25zdCBDMkFsbG9jYXRvcjo6VHJhaXRzPj4gbGlzdEFsbG9jYXRvcnNfbmIoKQorICAgICAgICAgICAgY29uc3Qgb3ZlcnJpZGUgeworICAgICAgICByZXR1cm4gc3RkOjp2ZWN0b3I8c3RkOjpzaGFyZWRfcHRyPGNvbnN0IEMyQWxsb2NhdG9yOjpUcmFpdHM+PigpOyAvLy8gXHRvZG8KKyAgICB9CisKKyAgICB2aXJ0dWFsIEMyU3RyaW5nIGdldE5hbWUoKSBjb25zdCBvdmVycmlkZSB7CisgICAgICAgIHJldHVybiAiYW5kcm9pZC5hbGxvY2F0b3Itc3RvcmUiOworICAgIH0KKworICAgIHZvaWQgc2V0Q29tcG9uZW50U3RvcmUoc3RkOjpzaGFyZWRfcHRyPEMyQ29tcG9uZW50U3RvcmU+IHN0b3JlKTsKKworICAgIH5DMlBsYXRmb3JtQWxsb2NhdG9yU3RvcmVJbXBsKCkgb3ZlcnJpZGUgPSBkZWZhdWx0OworCitwcml2YXRlOgorICAgIC8vLyByZXR1cm5zIGEgc2hhcmVkLXNpbmdsZXRvbiBpb24gYWxsb2NhdG9yCisgICAgc3RkOjpzaGFyZWRfcHRyPEMyQWxsb2NhdG9yPiBmZXRjaElvbkFsbG9jYXRvcigpOworCisgICAgLy8vIHJldHVybnMgYSBzaGFyZWQtc2luZ2xldG9uIGdyYWxsb2MgYWxsb2NhdG9yCisgICAgc3RkOjpzaGFyZWRfcHRyPEMyQWxsb2NhdG9yPiBmZXRjaEdyYWxsb2NBbGxvY2F0b3IoKTsKKworICAgIC8vLyByZXR1cm5zIGEgc2hhcmVkLXNpbmdsZXRvbiBidWZmZXJxdWV1ZSBzdXBwb3J0aW5nIGdyYWxsb2MgYWxsb2NhdG9yCisgICAgc3RkOjpzaGFyZWRfcHRyPEMyQWxsb2NhdG9yPiBmZXRjaEJ1ZmZlclF1ZXVlQWxsb2NhdG9yKCk7CisKKyAgICAvLy8gY29tcG9uZW50IHN0b3JlIHRvIHVzZQorICAgIHN0ZDo6bXV0ZXggX21Db21wb25lbnRTdG9yZVNldExvY2s7IC8vIHByb3RlY3RzIHRoZSBlbnRpcmUgdXBkYXRpbmcgX21Db21wb25lbnRTdG9yZSBhbmQgaXRzCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gZGVwZW5kZW5jaWVzCisgICAgc3RkOjptdXRleCBfbUNvbXBvbmVudFN0b3JlUmVhZExvY2s7IC8vIG11c3QgcHJvdGVjdCBvbmx5IHJlYWQvd3JpdGUgb2YgX21Db21wb25lbnRTdG9yZQorICAgIHN0ZDo6c2hhcmVkX3B0cjxDMkNvbXBvbmVudFN0b3JlPiBfbUNvbXBvbmVudFN0b3JlOworfTsKKworQzJQbGF0Zm9ybUFsbG9jYXRvclN0b3JlSW1wbDo6QzJQbGF0Zm9ybUFsbG9jYXRvclN0b3JlSW1wbCgpIHsKK30KKworYzJfc3RhdHVzX3QgQzJQbGF0Zm9ybUFsbG9jYXRvclN0b3JlSW1wbDo6ZmV0Y2hBbGxvY2F0b3IoCisgICAgICAgIGlkX3QgaWQsIHN0ZDo6c2hhcmVkX3B0cjxDMkFsbG9jYXRvcj4gKmNvbnN0IGFsbG9jYXRvcikgeworICAgIGFsbG9jYXRvci0+cmVzZXQoKTsKKyAgICBzd2l0Y2ggKGlkKSB7CisgICAgLy8gVE9ETzogc2hvdWxkIHdlIGltcGxlbWVudCBhIGdlbmVyaWMgcmVnaXN0cnkgZm9yIGFsbCwgYW5kIHVzZSB0aGF0PworICAgIGNhc2UgQzJQbGF0Zm9ybUFsbG9jYXRvclN0b3JlOjpJT046CisgICAgY2FzZSBDMkFsbG9jYXRvclN0b3JlOjpERUZBVUxUX0xJTkVBUjoKKyAgICAgICAgKmFsbG9jYXRvciA9IGZldGNoSW9uQWxsb2NhdG9yKCk7CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBDMlBsYXRmb3JtQWxsb2NhdG9yU3RvcmU6OkdSQUxMT0M6CisgICAgY2FzZSBDMkFsbG9jYXRvclN0b3JlOjpERUZBVUxUX0dSQVBISUM6CisgICAgICAgICphbGxvY2F0b3IgPSBmZXRjaEdyYWxsb2NBbGxvY2F0b3IoKTsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIEMyUGxhdGZvcm1BbGxvY2F0b3JTdG9yZTo6QlVGRkVSUVVFVUU6CisgICAgICAgICphbGxvY2F0b3IgPSBmZXRjaEJ1ZmZlclF1ZXVlQWxsb2NhdG9yKCk7CisgICAgICAgIGJyZWFrOworCisgICAgZGVmYXVsdDoKKyAgICAgICAgLy8gVHJ5IHRvIGNyZWF0ZSBhbGxvY2F0b3IgZnJvbSBwbGF0Zm9ybSBzdG9yZSBwbHVnaW5zLgorICAgICAgICBjMl9zdGF0dXNfdCByZXMgPQorICAgICAgICAgICAgICAgIEMyUGxhdGZvcm1TdG9yZVBsdWdpbkxvYWRlcjo6R2V0SW5zdGFuY2UoKS0+Y3JlYXRlQWxsb2NhdG9yKGlkLCBhbGxvY2F0b3IpOworICAgICAgICBpZiAocmVzICE9IEMyX09LKSB7CisgICAgICAgICAgICByZXR1cm4gcmVzOworICAgICAgICB9CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICBpZiAoKmFsbG9jYXRvciA9PSBudWxscHRyKSB7CisgICAgICAgIHJldHVybiBDMl9OT19NRU1PUlk7CisgICAgfQorICAgIHJldHVybiBDMl9PSzsKK30KKworbmFtZXNwYWNlIHsKKworc3RkOjptdXRleCBnSW9uQWxsb2NhdG9yTXV0ZXg7CitzdGQ6OndlYWtfcHRyPEMyQWxsb2NhdG9ySW9uPiBnSW9uQWxsb2NhdG9yOworCit2b2lkIFVzZUNvbXBvbmVudFN0b3JlRm9ySW9uQWxsb2NhdG9yKAorICAgICAgICBjb25zdCBzdGQ6OnNoYXJlZF9wdHI8QzJBbGxvY2F0b3JJb24+IGFsbG9jYXRvciwKKyAgICAgICAgc3RkOjpzaGFyZWRfcHRyPEMyQ29tcG9uZW50U3RvcmU+IHN0b3JlKSB7CisgICAgQzJBbGxvY2F0b3JJb246OlVzYWdlTWFwcGVyRm4gbWFwcGVyOworICAgIHVpbnQ2NF90IG1pblVzYWdlID0gMDsKKyAgICB1aW50NjRfdCBtYXhVc2FnZSA9IEMyTWVtb3J5VXNhZ2UoQzJNZW1vcnlVc2FnZTo6Q1BVX1JFQUQsIEMyTWVtb3J5VXNhZ2U6OkNQVV9XUklURSkuZXhwZWN0ZWQ7CisgICAgc2l6ZV90IGJsb2NrU2l6ZSA9IGdldHBhZ2VzaXplKCk7CisKKyAgICAvLyBxdWVyeSBtaW4gYW5kIG1heCB1c2FnZSBhcyB3ZWxsIGFzIGJsb2NrIHNpemUgdmlhIHN1cHBvcnRlZCB2YWx1ZXMKKyAgICBDMlN0b3JlSW9uVXNhZ2VJbmZvIHVzYWdlSW5mbzsKKyAgICBzdGQ6OnZlY3RvcjxDMkZpZWxkU3VwcG9ydGVkVmFsdWVzUXVlcnk+IHF1ZXJ5ID0geworICAgICAgICBDMkZpZWxkU3VwcG9ydGVkVmFsdWVzUXVlcnk6OlBvc3NpYmxlKEMyUGFyYW1GaWVsZDo6TWFrZSh1c2FnZUluZm8sIHVzYWdlSW5mby51c2FnZSkpLAorICAgICAgICBDMkZpZWxkU3VwcG9ydGVkVmFsdWVzUXVlcnk6OlBvc3NpYmxlKEMyUGFyYW1GaWVsZDo6TWFrZSh1c2FnZUluZm8sIHVzYWdlSW5mby5jYXBhY2l0eSkpLAorICAgIH07CisgICAgYzJfc3RhdHVzX3QgcmVzID0gc3RvcmUtPnF1ZXJ5U3VwcG9ydGVkVmFsdWVzX3NtKHF1ZXJ5KTsKKyAgICBpZiAocmVzID09IEMyX09LKSB7CisgICAgICAgIGlmIChxdWVyeVswXS5zdGF0dXMgPT0gQzJfT0spIHsKKyAgICAgICAgICAgIGNvbnN0IEMyRmllbGRTdXBwb3J0ZWRWYWx1ZXMgJmZzdiA9IHF1ZXJ5WzBdLnZhbHVlczsKKyAgICAgICAgICAgIGlmIChmc3YudHlwZSA9PSBDMkZpZWxkU3VwcG9ydGVkVmFsdWVzOjpGTEFHUyAmJiAhZnN2LnZhbHVlcy5lbXB0eSgpKSB7CisgICAgICAgICAgICAgICAgbWluVXNhZ2UgPSBmc3YudmFsdWVzWzBdLnU2NDsKKyAgICAgICAgICAgICAgICBtYXhVc2FnZSA9IDA7CisgICAgICAgICAgICAgICAgZm9yIChDMlZhbHVlOjpQcmltaXRpdmUgdiA6IGZzdi52YWx1ZXMpIHsKKyAgICAgICAgICAgICAgICAgICAgbWF4VXNhZ2UgfD0gdi51NjQ7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGlmIChxdWVyeVsxXS5zdGF0dXMgPT0gQzJfT0spIHsKKyAgICAgICAgICAgIGNvbnN0IEMyRmllbGRTdXBwb3J0ZWRWYWx1ZXMgJmZzdiA9IHF1ZXJ5WzFdLnZhbHVlczsKKyAgICAgICAgICAgIGlmIChmc3YudHlwZSA9PSBDMkZpZWxkU3VwcG9ydGVkVmFsdWVzOjpSQU5HRSAmJiBmc3YucmFuZ2Uuc3RlcC51MzIgPiAwKSB7CisgICAgICAgICAgICAgICAgYmxvY2tTaXplID0gZnN2LnJhbmdlLnN0ZXAudTMyOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgbWFwcGVyID0gW3N0b3JlXShDMk1lbW9yeVVzYWdlIHVzYWdlLCBzaXplX3QgY2FwYWNpdHksCisgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90ICphbGlnbiwgdW5zaWduZWQgKmhlYXBNYXNrLCB1bnNpZ25lZCAqZmxhZ3MpIC0+IGMyX3N0YXR1c190IHsKKyAgICAgICAgICAgIGlmIChjYXBhY2l0eSA+IFVJTlQzMl9NQVgpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gQzJfQkFEX1ZBTFVFOworICAgICAgICAgICAgfQorICAgICAgICAgICAgQzJTdG9yZUlvblVzYWdlSW5mbyB1c2FnZUluZm8gPSB7IHVzYWdlLmV4cGVjdGVkLCBjYXBhY2l0eSB9OworICAgICAgICAgICAgc3RkOjp2ZWN0b3I8c3RkOjp1bmlxdWVfcHRyPEMyU2V0dGluZ1Jlc3VsdD4+IGZhaWx1cmVzOyAvLyBUT0RPOiByZW1vdmUKKyAgICAgICAgICAgIGMyX3N0YXR1c190IHJlcyA9IHN0b3JlLT5jb25maWdfc20oeyZ1c2FnZUluZm99LCAmZmFpbHVyZXMpOworICAgICAgICAgICAgaWYgKHJlcyA9PSBDMl9PSykgeworICAgICAgICAgICAgICAgICphbGlnbiA9IHVzYWdlSW5mby5taW5BbGlnbm1lbnQ7CisgICAgICAgICAgICAgICAgKmhlYXBNYXNrID0gdXNhZ2VJbmZvLmhlYXBNYXNrOworICAgICAgICAgICAgICAgICpmbGFncyA9IHVzYWdlSW5mby5hbGxvY0ZsYWdzOworICAgICAgICAgICAgfQorICAgICAgICAgICAgcmV0dXJuIHJlczsKKyAgICAgICAgfTsKKyAgICB9CisKKyAgICBhbGxvY2F0b3ItPnNldFVzYWdlTWFwcGVyKG1hcHBlciwgbWluVXNhZ2UsIG1heFVzYWdlLCBibG9ja1NpemUpOworfQorCit9CisKK3ZvaWQgQzJQbGF0Zm9ybUFsbG9jYXRvclN0b3JlSW1wbDo6c2V0Q29tcG9uZW50U3RvcmUoc3RkOjpzaGFyZWRfcHRyPEMyQ29tcG9uZW50U3RvcmU+IHN0b3JlKSB7CisgICAgLy8gdGVjaG5pY2FsbHkgdGhpcyBzZXQgbG9jayBpcyBub3QgbmVlZGVkLCBidXQgaXMgaGVyZSBmb3Igc2FmZXR5IGluIGNhc2Ugd2UgYWRkIG1vcmUKKyAgICAvLyBnZXR0ZXIgb3JkZXJzCisgICAgc3RkOjpsb2NrX2d1YXJkPHN0ZDo6bXV0ZXg+IGxvY2soX21Db21wb25lbnRTdG9yZVNldExvY2spOworICAgIHsKKyAgICAgICAgc3RkOjpsb2NrX2d1YXJkPHN0ZDo6bXV0ZXg+IGxvY2soX21Db21wb25lbnRTdG9yZVJlYWRMb2NrKTsKKyAgICAgICAgX21Db21wb25lbnRTdG9yZSA9IHN0b3JlOworICAgIH0KKyAgICBzdGQ6OnNoYXJlZF9wdHI8QzJBbGxvY2F0b3JJb24+IGFsbG9jYXRvcjsKKyAgICB7CisgICAgICAgIHN0ZDo6bG9ja19ndWFyZDxzdGQ6Om11dGV4PiBsb2NrKGdJb25BbGxvY2F0b3JNdXRleCk7CisgICAgICAgIGFsbG9jYXRvciA9IGdJb25BbGxvY2F0b3IubG9jaygpOworICAgIH0KKyAgICBpZiAoYWxsb2NhdG9yKSB7CisgICAgICAgIFVzZUNvbXBvbmVudFN0b3JlRm9ySW9uQWxsb2NhdG9yKGFsbG9jYXRvciwgc3RvcmUpOworICAgIH0KK30KKworc3RkOjpzaGFyZWRfcHRyPEMyQWxsb2NhdG9yPiBDMlBsYXRmb3JtQWxsb2NhdG9yU3RvcmVJbXBsOjpmZXRjaElvbkFsbG9jYXRvcigpIHsKKyAgICBzdGQ6OmxvY2tfZ3VhcmQ8c3RkOjptdXRleD4gbG9jayhnSW9uQWxsb2NhdG9yTXV0ZXgpOworICAgIHN0ZDo6c2hhcmVkX3B0cjxDMkFsbG9jYXRvcklvbj4gYWxsb2NhdG9yID0gZ0lvbkFsbG9jYXRvci5sb2NrKCk7CisgICAgaWYgKGFsbG9jYXRvciA9PSBudWxscHRyKSB7CisgICAgICAgIHN0ZDo6c2hhcmVkX3B0cjxDMkNvbXBvbmVudFN0b3JlPiBjb21wb25lbnRTdG9yZTsKKyAgICAgICAgeworICAgICAgICAgICAgc3RkOjpsb2NrX2d1YXJkPHN0ZDo6bXV0ZXg+IGxvY2soX21Db21wb25lbnRTdG9yZVJlYWRMb2NrKTsKKyAgICAgICAgICAgIGNvbXBvbmVudFN0b3JlID0gX21Db21wb25lbnRTdG9yZTsKKyAgICAgICAgfQorICAgICAgICBhbGxvY2F0b3IgPSBzdGQ6Om1ha2Vfc2hhcmVkPEMyQWxsb2NhdG9ySW9uPihDMlBsYXRmb3JtQWxsb2NhdG9yU3RvcmU6OklPTik7CisgICAgICAgIFVzZUNvbXBvbmVudFN0b3JlRm9ySW9uQWxsb2NhdG9yKGFsbG9jYXRvciwgY29tcG9uZW50U3RvcmUpOworICAgICAgICBnSW9uQWxsb2NhdG9yID0gYWxsb2NhdG9yOworICAgIH0KKyAgICByZXR1cm4gYWxsb2NhdG9yOworfQorCitzdGQ6OnNoYXJlZF9wdHI8QzJBbGxvY2F0b3I+IEMyUGxhdGZvcm1BbGxvY2F0b3JTdG9yZUltcGw6OmZldGNoR3JhbGxvY0FsbG9jYXRvcigpIHsKKyAgICBzdGF0aWMgc3RkOjptdXRleCBtdXRleDsKKyAgICBzdGF0aWMgc3RkOjp3ZWFrX3B0cjxDMkFsbG9jYXRvcj4gZ3JhbGxvY0FsbG9jYXRvcjsKKyAgICBzdGQ6OmxvY2tfZ3VhcmQ8c3RkOjptdXRleD4gbG9jayhtdXRleCk7CisgICAgc3RkOjpzaGFyZWRfcHRyPEMyQWxsb2NhdG9yPiBhbGxvY2F0b3IgPSBncmFsbG9jQWxsb2NhdG9yLmxvY2soKTsKKyAgICBpZiAoYWxsb2NhdG9yID09IG51bGxwdHIpIHsKKyAgICAgICAgYWxsb2NhdG9yID0gc3RkOjptYWtlX3NoYXJlZDxDMkFsbG9jYXRvckdyYWxsb2M+KEMyUGxhdGZvcm1BbGxvY2F0b3JTdG9yZTo6R1JBTExPQyk7CisgICAgICAgIGdyYWxsb2NBbGxvY2F0b3IgPSBhbGxvY2F0b3I7CisgICAgfQorICAgIHJldHVybiBhbGxvY2F0b3I7Cit9CisKK3N0ZDo6c2hhcmVkX3B0cjxDMkFsbG9jYXRvcj4gQzJQbGF0Zm9ybUFsbG9jYXRvclN0b3JlSW1wbDo6ZmV0Y2hCdWZmZXJRdWV1ZUFsbG9jYXRvcigpIHsKKyAgICBzdGF0aWMgc3RkOjptdXRleCBtdXRleDsKKyAgICBzdGF0aWMgc3RkOjp3ZWFrX3B0cjxDMkFsbG9jYXRvcj4gZ3JhbGxvY0FsbG9jYXRvcjsKKyAgICBzdGQ6OmxvY2tfZ3VhcmQ8c3RkOjptdXRleD4gbG9jayhtdXRleCk7CisgICAgc3RkOjpzaGFyZWRfcHRyPEMyQWxsb2NhdG9yPiBhbGxvY2F0b3IgPSBncmFsbG9jQWxsb2NhdG9yLmxvY2soKTsKKyAgICBpZiAoYWxsb2NhdG9yID09IG51bGxwdHIpIHsKKyAgICAgICAgYWxsb2NhdG9yID0gc3RkOjptYWtlX3NoYXJlZDxDMkFsbG9jYXRvckdyYWxsb2M+KAorICAgICAgICAgICAgICAgIEMyUGxhdGZvcm1BbGxvY2F0b3JTdG9yZTo6QlVGRkVSUVVFVUUsIHRydWUpOworICAgICAgICBncmFsbG9jQWxsb2NhdG9yID0gYWxsb2NhdG9yOworICAgIH0KKyAgICByZXR1cm4gYWxsb2NhdG9yOworfQorCituYW1lc3BhY2UgeworICAgIHN0ZDo6bXV0ZXggZ1ByZWZlcnJlZENvbXBvbmVudFN0b3JlTXV0ZXg7CisgICAgc3RkOjpzaGFyZWRfcHRyPEMyQ29tcG9uZW50U3RvcmU+IGdQcmVmZXJyZWRDb21wb25lbnRTdG9yZTsKKworICAgIHN0ZDo6bXV0ZXggZ1BsYXRmb3JtQWxsb2NhdG9yU3RvcmVNdXRleDsKKyAgICBzdGQ6OndlYWtfcHRyPEMyUGxhdGZvcm1BbGxvY2F0b3JTdG9yZUltcGw+IGdQbGF0Zm9ybUFsbG9jYXRvclN0b3JlOworfQorCitzdGQ6OnNoYXJlZF9wdHI8QzJBbGxvY2F0b3JTdG9yZT4gR2V0Q29kZWMyUGxhdGZvcm1BbGxvY2F0b3JTdG9yZSgpIHsKKyAgICBzdGQ6OmxvY2tfZ3VhcmQ8c3RkOjptdXRleD4gbG9jayhnUGxhdGZvcm1BbGxvY2F0b3JTdG9yZU11dGV4KTsKKyAgICBzdGQ6OnNoYXJlZF9wdHI8QzJQbGF0Zm9ybUFsbG9jYXRvclN0b3JlSW1wbD4gc3RvcmUgPSBnUGxhdGZvcm1BbGxvY2F0b3JTdG9yZS5sb2NrKCk7CisgICAgaWYgKHN0b3JlID09IG51bGxwdHIpIHsKKyAgICAgICAgc3RvcmUgPSBzdGQ6Om1ha2Vfc2hhcmVkPEMyUGxhdGZvcm1BbGxvY2F0b3JTdG9yZUltcGw+KCk7CisgICAgICAgIHN0b3JlLT5zZXRDb21wb25lbnRTdG9yZShHZXRQcmVmZXJyZWRDb2RlYzJDb21wb25lbnRTdG9yZSgpKTsKKyAgICAgICAgZ1BsYXRmb3JtQWxsb2NhdG9yU3RvcmUgPSBzdG9yZTsKKyAgICB9CisgICAgcmV0dXJuIHN0b3JlOworfQorCit2b2lkIFNldFByZWZlcnJlZENvZGVjMkNvbXBvbmVudFN0b3JlKHN0ZDo6c2hhcmVkX3B0cjxDMkNvbXBvbmVudFN0b3JlPiBjb21wb25lbnRTdG9yZSkgeworICAgIHN0YXRpYyBzdGQ6Om11dGV4IG11dGV4OworICAgIHN0ZDo6bG9ja19ndWFyZDxzdGQ6Om11dGV4PiBsb2NrKG11dGV4KTsgLy8gZG9uJ3QgaW50ZXJsZXZlIHNldC1zCisKKyAgICAvLyB1cGRhdGUgcHJlZmVycmVkIHN0b3JlCisgICAgeworICAgICAgICBzdGQ6OmxvY2tfZ3VhcmQ8c3RkOjptdXRleD4gbG9jayhnUHJlZmVycmVkQ29tcG9uZW50U3RvcmVNdXRleCk7CisgICAgICAgIGdQcmVmZXJyZWRDb21wb25lbnRTdG9yZSA9IGNvbXBvbmVudFN0b3JlOworICAgIH0KKworICAgIC8vIHVwZGF0ZSBwbGF0Zm9ybSBhbGxvY2F0b3IncyBzdG9yZSBhcyB3ZWxsIGlmIGl0IGlzIGFsaXZlCisgICAgc3RkOjpzaGFyZWRfcHRyPEMyUGxhdGZvcm1BbGxvY2F0b3JTdG9yZUltcGw+IGFsbG9jYXRvclN0b3JlOworICAgIHsKKyAgICAgICAgc3RkOjpsb2NrX2d1YXJkPHN0ZDo6bXV0ZXg+IGxvY2soZ1BsYXRmb3JtQWxsb2NhdG9yU3RvcmVNdXRleCk7CisgICAgICAgIGFsbG9jYXRvclN0b3JlID0gZ1BsYXRmb3JtQWxsb2NhdG9yU3RvcmUubG9jaygpOworICAgIH0KKyAgICBpZiAoYWxsb2NhdG9yU3RvcmUpIHsKKyAgICAgICAgYWxsb2NhdG9yU3RvcmUtPnNldENvbXBvbmVudFN0b3JlKGNvbXBvbmVudFN0b3JlKTsKKyAgICB9Cit9CisKK3N0ZDo6c2hhcmVkX3B0cjxDMkNvbXBvbmVudFN0b3JlPiBHZXRQcmVmZXJyZWRDb2RlYzJDb21wb25lbnRTdG9yZSgpIHsKKyAgICBzdGQ6OmxvY2tfZ3VhcmQ8c3RkOjptdXRleD4gbG9jayhnUHJlZmVycmVkQ29tcG9uZW50U3RvcmVNdXRleCk7CisgICAgcmV0dXJuIGdQcmVmZXJyZWRDb21wb25lbnRTdG9yZSA/IGdQcmVmZXJyZWRDb21wb25lbnRTdG9yZSA6IEdldENvZGVjMlBsYXRmb3JtQ29tcG9uZW50U3RvcmUoKTsKK30KKworbmFtZXNwYWNlIHsKKworY2xhc3MgX0MyQmxvY2tQb29sQ2FjaGUgeworcHVibGljOgorICAgIF9DMkJsb2NrUG9vbENhY2hlKCkgOiBtQmxvY2tQb29sU2VxSWQoQzJCbG9ja1Bvb2w6OlBMQVRGT1JNX1NUQVJUICsgMSkge30KKworICAgIGMyX3N0YXR1c190IF9jcmVhdGVCbG9ja1Bvb2woCisgICAgICAgICAgICBDMlBsYXRmb3JtQWxsb2NhdG9yU3RvcmU6OmlkX3QgYWxsb2NhdG9ySWQsCisgICAgICAgICAgICBzdGQ6OnNoYXJlZF9wdHI8Y29uc3QgQzJDb21wb25lbnQ+IGNvbXBvbmVudCwKKyAgICAgICAgICAgIEMyQmxvY2tQb29sOjpsb2NhbF9pZF90IHBvb2xJZCwKKyAgICAgICAgICAgIHN0ZDo6c2hhcmVkX3B0cjxDMkJsb2NrUG9vbD4gKnBvb2wpIHsKKyAgICAgICAgc3RkOjpzaGFyZWRfcHRyPEMyQWxsb2NhdG9yU3RvcmU+IGFsbG9jYXRvclN0b3JlID0KKyAgICAgICAgICAgICAgICBHZXRDb2RlYzJQbGF0Zm9ybUFsbG9jYXRvclN0b3JlKCk7CisgICAgICAgIHN0ZDo6c2hhcmVkX3B0cjxDMkFsbG9jYXRvcj4gYWxsb2NhdG9yOworICAgICAgICBjMl9zdGF0dXNfdCByZXMgPSBDMl9OT1RfRk9VTkQ7CisKKyAgICAgICAgc3dpdGNoKGFsbG9jYXRvcklkKSB7CisgICAgICAgICAgICBjYXNlIEMyUGxhdGZvcm1BbGxvY2F0b3JTdG9yZTo6SU9OOgorICAgICAgICAgICAgY2FzZSBDMkFsbG9jYXRvclN0b3JlOjpERUZBVUxUX0xJTkVBUjoKKyAgICAgICAgICAgICAgICByZXMgPSBhbGxvY2F0b3JTdG9yZS0+ZmV0Y2hBbGxvY2F0b3IoCisgICAgICAgICAgICAgICAgICAgICAgICBDMkFsbG9jYXRvclN0b3JlOjpERUZBVUxUX0xJTkVBUiwgJmFsbG9jYXRvcik7CisgICAgICAgICAgICAgICAgaWYgKHJlcyA9PSBDMl9PSykgeworICAgICAgICAgICAgICAgICAgICBzdGQ6OnNoYXJlZF9wdHI8QzJCbG9ja1Bvb2w+IHB0ciA9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RkOjptYWtlX3NoYXJlZDxDMlBvb2xlZEJsb2NrUG9vbD4oCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbGxvY2F0b3IsIHBvb2xJZCk7CisgICAgICAgICAgICAgICAgICAgICpwb29sID0gcHRyOworICAgICAgICAgICAgICAgICAgICBtQmxvY2tQb29sc1twb29sSWRdID0gcHRyOworICAgICAgICAgICAgICAgICAgICBtQ29tcG9uZW50c1twb29sSWRdID0gY29tcG9uZW50OworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgQzJQbGF0Zm9ybUFsbG9jYXRvclN0b3JlOjpHUkFMTE9DOgorICAgICAgICAgICAgY2FzZSBDMkFsbG9jYXRvclN0b3JlOjpERUZBVUxUX0dSQVBISUM6CisgICAgICAgICAgICAgICAgcmVzID0gYWxsb2NhdG9yU3RvcmUtPmZldGNoQWxsb2NhdG9yKAorICAgICAgICAgICAgICAgICAgICAgICAgQzJBbGxvY2F0b3JTdG9yZTo6REVGQVVMVF9HUkFQSElDLCAmYWxsb2NhdG9yKTsKKyAgICAgICAgICAgICAgICBpZiAocmVzID09IEMyX09LKSB7CisgICAgICAgICAgICAgICAgICAgIHN0ZDo6c2hhcmVkX3B0cjxDMkJsb2NrUG9vbD4gcHRyID0KKyAgICAgICAgICAgICAgICAgICAgICAgIHN0ZDo6bWFrZV9zaGFyZWQ8QzJQb29sZWRCbG9ja1Bvb2w+KGFsbG9jYXRvciwgcG9vbElkKTsKKyAgICAgICAgICAgICAgICAgICAgKnBvb2wgPSBwdHI7CisgICAgICAgICAgICAgICAgICAgIG1CbG9ja1Bvb2xzW3Bvb2xJZF0gPSBwdHI7CisgICAgICAgICAgICAgICAgICAgIG1Db21wb25lbnRzW3Bvb2xJZF0gPSBjb21wb25lbnQ7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBDMlBsYXRmb3JtQWxsb2NhdG9yU3RvcmU6OkJVRkZFUlFVRVVFOgorICAgICAgICAgICAgICAgIHJlcyA9IGFsbG9jYXRvclN0b3JlLT5mZXRjaEFsbG9jYXRvcigKKyAgICAgICAgICAgICAgICAgICAgICAgIEMyUGxhdGZvcm1BbGxvY2F0b3JTdG9yZTo6QlVGRkVSUVVFVUUsICZhbGxvY2F0b3IpOworICAgICAgICAgICAgICAgIGlmIChyZXMgPT0gQzJfT0spIHsKKyAgICAgICAgICAgICAgICAgICAgc3RkOjpzaGFyZWRfcHRyPEMyQmxvY2tQb29sPiBwdHIgPQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZDo6bWFrZV9zaGFyZWQ8QzJCdWZmZXJRdWV1ZUJsb2NrUG9vbD4oCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbGxvY2F0b3IsIHBvb2xJZCk7CisgICAgICAgICAgICAgICAgICAgICpwb29sID0gcHRyOworICAgICAgICAgICAgICAgICAgICBtQmxvY2tQb29sc1twb29sSWRdID0gcHRyOworICAgICAgICAgICAgICAgICAgICBtQ29tcG9uZW50c1twb29sSWRdID0gY29tcG9uZW50OworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgLy8gVHJ5IHRvIGNyZWF0ZSBibG9jayBwb29sIGZyb20gcGxhdGZvcm0gc3RvcmUgcGx1Z2lucy4KKyAgICAgICAgICAgICAgICBzdGQ6OnNoYXJlZF9wdHI8QzJCbG9ja1Bvb2w+IHB0cjsKKyAgICAgICAgICAgICAgICByZXMgPSBDMlBsYXRmb3JtU3RvcmVQbHVnaW5Mb2FkZXI6OkdldEluc3RhbmNlKCktPmNyZWF0ZUJsb2NrUG9vbCgKKyAgICAgICAgICAgICAgICAgICAgICAgIGFsbG9jYXRvcklkLCBwb29sSWQsICZwdHIpOworICAgICAgICAgICAgICAgIGlmIChyZXMgPT0gQzJfT0spIHsKKyAgICAgICAgICAgICAgICAgICAgKnBvb2wgPSBwdHI7CisgICAgICAgICAgICAgICAgICAgIG1CbG9ja1Bvb2xzW3Bvb2xJZF0gPSBwdHI7CisgICAgICAgICAgICAgICAgICAgIG1Db21wb25lbnRzW3Bvb2xJZF0gPSBjb21wb25lbnQ7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIHJldHVybiByZXM7CisgICAgfQorCisgICAgYzJfc3RhdHVzX3QgY3JlYXRlQmxvY2tQb29sKAorICAgICAgICAgICAgQzJQbGF0Zm9ybUFsbG9jYXRvclN0b3JlOjppZF90IGFsbG9jYXRvcklkLAorICAgICAgICAgICAgc3RkOjpzaGFyZWRfcHRyPGNvbnN0IEMyQ29tcG9uZW50PiBjb21wb25lbnQsCisgICAgICAgICAgICBzdGQ6OnNoYXJlZF9wdHI8QzJCbG9ja1Bvb2w+ICpwb29sKSB7CisgICAgICAgIHJldHVybiBfY3JlYXRlQmxvY2tQb29sKGFsbG9jYXRvcklkLCBjb21wb25lbnQsIG1CbG9ja1Bvb2xTZXFJZCsrLCBwb29sKTsKKyAgICB9CisKKyAgICBib29sIGdldEJsb2NrUG9vbCgKKyAgICAgICAgICAgIEMyQmxvY2tQb29sOjpsb2NhbF9pZF90IGJsb2NrUG9vbElkLAorICAgICAgICAgICAgc3RkOjpzaGFyZWRfcHRyPGNvbnN0IEMyQ29tcG9uZW50PiBjb21wb25lbnQsCisgICAgICAgICAgICBzdGQ6OnNoYXJlZF9wdHI8QzJCbG9ja1Bvb2w+ICpwb29sKSB7CisgICAgICAgIC8vIFRPRE86IHVzZSBvbmUgaXRlcmF0b3IgZm9yIG11bHRpcGxlIGJsb2NrcG9vbCB0eXBlIHNjYWxhYmlsaXR5LgorICAgICAgICBzdGQ6OnNoYXJlZF9wdHI8QzJCbG9ja1Bvb2w+IHB0cjsKKyAgICAgICAgYXV0byBpdCA9IG1CbG9ja1Bvb2xzLmZpbmQoYmxvY2tQb29sSWQpOworICAgICAgICBpZiAoaXQgIT0gbUJsb2NrUG9vbHMuZW5kKCkpIHsKKyAgICAgICAgICAgIHB0ciA9IGl0LT5zZWNvbmQubG9jaygpOworICAgICAgICAgICAgaWYgKCFwdHIpIHsKKyAgICAgICAgICAgICAgICBtQmxvY2tQb29scy5lcmFzZShpdCk7CisgICAgICAgICAgICAgICAgbUNvbXBvbmVudHMuZXJhc2UoYmxvY2tQb29sSWQpOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBhdXRvIGZvdW5kID0gbUNvbXBvbmVudHMuZmluZChibG9ja1Bvb2xJZCk7CisgICAgICAgICAgICAgICAgaWYgKGNvbXBvbmVudCA9PSBmb3VuZC0+c2Vjb25kLmxvY2soKSkgeworICAgICAgICAgICAgICAgICAgICAqcG9vbCA9IHB0cjsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgQzJCbG9ja1Bvb2w6OmxvY2FsX2lkX3QgbUJsb2NrUG9vbFNlcUlkOworCisgICAgc3RkOjptYXA8QzJCbG9ja1Bvb2w6OmxvY2FsX2lkX3QsIHN0ZDo6d2Vha19wdHI8QzJCbG9ja1Bvb2w+PiBtQmxvY2tQb29sczsKKyAgICBzdGQ6Om1hcDxDMkJsb2NrUG9vbDo6bG9jYWxfaWRfdCwgc3RkOjp3ZWFrX3B0cjxjb25zdCBDMkNvbXBvbmVudD4+IG1Db21wb25lbnRzOworfTsKKworc3RhdGljIHN0ZDo6dW5pcXVlX3B0cjxfQzJCbG9ja1Bvb2xDYWNoZT4gc0Jsb2NrUG9vbENhY2hlID0KKyAgICBzdGQ6Om1ha2VfdW5pcXVlPF9DMkJsb2NrUG9vbENhY2hlPigpOworc3RhdGljIHN0ZDo6bXV0ZXggc0Jsb2NrUG9vbENhY2hlTXV0ZXg7CisKK30gLy8gYW55bnltb3VzIG5hbWVzcGFjZQorCitjMl9zdGF0dXNfdCBHZXRDb2RlYzJCbG9ja1Bvb2woCisgICAgICAgIEMyQmxvY2tQb29sOjpsb2NhbF9pZF90IGlkLCBzdGQ6OnNoYXJlZF9wdHI8Y29uc3QgQzJDb21wb25lbnQ+IGNvbXBvbmVudCwKKyAgICAgICAgc3RkOjpzaGFyZWRfcHRyPEMyQmxvY2tQb29sPiAqcG9vbCkgeworICAgIHBvb2wtPnJlc2V0KCk7CisgICAgc3RkOjpsb2NrX2d1YXJkPHN0ZDo6bXV0ZXg+IGxvY2soc0Jsb2NrUG9vbENhY2hlTXV0ZXgpOworICAgIHN0ZDo6c2hhcmVkX3B0cjxDMkFsbG9jYXRvclN0b3JlPiBhbGxvY2F0b3JTdG9yZSA9IEdldENvZGVjMlBsYXRmb3JtQWxsb2NhdG9yU3RvcmUoKTsKKyAgICBzdGQ6OnNoYXJlZF9wdHI8QzJBbGxvY2F0b3I+IGFsbG9jYXRvcjsKKyAgICBjMl9zdGF0dXNfdCByZXMgPSBDMl9OT1RfRk9VTkQ7CisKKyAgICBpZiAoaWQgPj0gQzJCbG9ja1Bvb2w6OlBMQVRGT1JNX1NUQVJUKSB7CisgICAgICAgIGlmIChzQmxvY2tQb29sQ2FjaGUtPmdldEJsb2NrUG9vbChpZCwgY29tcG9uZW50LCBwb29sKSkgeworICAgICAgICAgICAgcmV0dXJuIEMyX09LOworICAgICAgICB9CisgICAgfQorCisgICAgc3dpdGNoIChpZCkgeworICAgIGNhc2UgQzJCbG9ja1Bvb2w6OkJBU0lDX0xJTkVBUjoKKyAgICAgICAgcmVzID0gYWxsb2NhdG9yU3RvcmUtPmZldGNoQWxsb2NhdG9yKEMyQWxsb2NhdG9yU3RvcmU6OkRFRkFVTFRfTElORUFSLCAmYWxsb2NhdG9yKTsKKyAgICAgICAgaWYgKHJlcyA9PSBDMl9PSykgeworICAgICAgICAgICAgKnBvb2wgPSBzdGQ6Om1ha2Vfc2hhcmVkPEMyQmFzaWNMaW5lYXJCbG9ja1Bvb2w+KGFsbG9jYXRvcik7CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBDMkJsb2NrUG9vbDo6QkFTSUNfR1JBUEhJQzoKKyAgICAgICAgcmVzID0gYWxsb2NhdG9yU3RvcmUtPmZldGNoQWxsb2NhdG9yKEMyQWxsb2NhdG9yU3RvcmU6OkRFRkFVTFRfR1JBUEhJQywgJmFsbG9jYXRvcik7CisgICAgICAgIGlmIChyZXMgPT0gQzJfT0spIHsKKyAgICAgICAgICAgICpwb29sID0gc3RkOjptYWtlX3NoYXJlZDxDMkJhc2ljR3JhcGhpY0Jsb2NrUG9vbD4oYWxsb2NhdG9yKTsKKyAgICAgICAgfQorICAgICAgICBicmVhazsKKyAgICAvLyBUT0RPOiByZW1vdmUgdGhpcy4gdGhpcyBpcyB0ZW1wb3JhcnkKKyAgICBjYXNlIEMyQmxvY2tQb29sOjpQTEFURk9STV9TVEFSVDoKKyAgICAgICAgcmVzID0gc0Jsb2NrUG9vbENhY2hlLT5fY3JlYXRlQmxvY2tQb29sKAorICAgICAgICAgICAgICAgIEMyUGxhdGZvcm1BbGxvY2F0b3JTdG9yZTo6QlVGRkVSUVVFVUUsIGNvbXBvbmVudCwgaWQsIHBvb2wpOworICAgICAgICBicmVhazsKKyAgICBkZWZhdWx0OgorICAgICAgICBicmVhazsKKyAgICB9CisgICAgcmV0dXJuIHJlczsKK30KKworYzJfc3RhdHVzX3QgQ3JlYXRlQ29kZWMyQmxvY2tQb29sKAorICAgICAgICBDMlBsYXRmb3JtQWxsb2NhdG9yU3RvcmU6OmlkX3QgYWxsb2NhdG9ySWQsCisgICAgICAgIHN0ZDo6c2hhcmVkX3B0cjxjb25zdCBDMkNvbXBvbmVudD4gY29tcG9uZW50LAorICAgICAgICBzdGQ6OnNoYXJlZF9wdHI8QzJCbG9ja1Bvb2w+ICpwb29sKSB7CisgICAgcG9vbC0+cmVzZXQoKTsKKworICAgIHN0ZDo6bG9ja19ndWFyZDxzdGQ6Om11dGV4PiBsb2NrKHNCbG9ja1Bvb2xDYWNoZU11dGV4KTsKKyAgICByZXR1cm4gc0Jsb2NrUG9vbENhY2hlLT5jcmVhdGVCbG9ja1Bvb2woYWxsb2NhdG9ySWQsIGNvbXBvbmVudCwgcG9vbCk7Cit9CisKK2NsYXNzIEMyUGxhdGZvcm1Db21wb25lbnRTdG9yZSA6IHB1YmxpYyBDMkNvbXBvbmVudFN0b3JlIHsKK3B1YmxpYzoKKyAgICB2aXJ0dWFsIHN0ZDo6dmVjdG9yPHN0ZDo6c2hhcmVkX3B0cjxjb25zdCBDMkNvbXBvbmVudDo6VHJhaXRzPj4gbGlzdENvbXBvbmVudHMoKSBvdmVycmlkZTsKKyAgICB2aXJ0dWFsIHN0ZDo6c2hhcmVkX3B0cjxDMlBhcmFtUmVmbGVjdG9yPiBnZXRQYXJhbVJlZmxlY3RvcigpIGNvbnN0IG92ZXJyaWRlOworICAgIHZpcnR1YWwgQzJTdHJpbmcgZ2V0TmFtZSgpIGNvbnN0IG92ZXJyaWRlOworICAgIHZpcnR1YWwgYzJfc3RhdHVzX3QgcXVlcnlTdXBwb3J0ZWRWYWx1ZXNfc20oCisgICAgICAgICAgICBzdGQ6OnZlY3RvcjxDMkZpZWxkU3VwcG9ydGVkVmFsdWVzUXVlcnk+ICZmaWVsZHMpIGNvbnN0IG92ZXJyaWRlOworICAgIHZpcnR1YWwgYzJfc3RhdHVzX3QgcXVlcnlTdXBwb3J0ZWRQYXJhbXNfbmIoCisgICAgICAgICAgICBzdGQ6OnZlY3RvcjxzdGQ6OnNoYXJlZF9wdHI8QzJQYXJhbURlc2NyaXB0b3I+PiAqY29uc3QgcGFyYW1zKSBjb25zdCBvdmVycmlkZTsKKyAgICB2aXJ0dWFsIGMyX3N0YXR1c190IHF1ZXJ5X3NtKAorICAgICAgICAgICAgY29uc3Qgc3RkOjp2ZWN0b3I8QzJQYXJhbSo+ICZzdGFja1BhcmFtcywKKyAgICAgICAgICAgIGNvbnN0IHN0ZDo6dmVjdG9yPEMyUGFyYW06OkluZGV4PiAmaGVhcFBhcmFtSW5kaWNlcywKKyAgICAgICAgICAgIHN0ZDo6dmVjdG9yPHN0ZDo6dW5pcXVlX3B0cjxDMlBhcmFtPj4gKmNvbnN0IGhlYXBQYXJhbXMpIGNvbnN0IG92ZXJyaWRlOworICAgIHZpcnR1YWwgYzJfc3RhdHVzX3QgY3JlYXRlSW50ZXJmYWNlKAorICAgICAgICAgICAgQzJTdHJpbmcgbmFtZSwgc3RkOjpzaGFyZWRfcHRyPEMyQ29tcG9uZW50SW50ZXJmYWNlPiAqY29uc3QgaW50ZXJmYWNlKSBvdmVycmlkZTsKKyAgICB2aXJ0dWFsIGMyX3N0YXR1c190IGNyZWF0ZUNvbXBvbmVudCgKKyAgICAgICAgICAgIEMyU3RyaW5nIG5hbWUsIHN0ZDo6c2hhcmVkX3B0cjxDMkNvbXBvbmVudD4gKmNvbnN0IGNvbXBvbmVudCkgb3ZlcnJpZGU7CisgICAgdmlydHVhbCBjMl9zdGF0dXNfdCBjb3B5QnVmZmVyKAorICAgICAgICAgICAgc3RkOjpzaGFyZWRfcHRyPEMyR3JhcGhpY0J1ZmZlcj4gc3JjLCBzdGQ6OnNoYXJlZF9wdHI8QzJHcmFwaGljQnVmZmVyPiBkc3QpIG92ZXJyaWRlOworICAgIHZpcnR1YWwgYzJfc3RhdHVzX3QgY29uZmlnX3NtKAorICAgICAgICAgICAgY29uc3Qgc3RkOjp2ZWN0b3I8QzJQYXJhbSo+ICZwYXJhbXMsCisgICAgICAgICAgICBzdGQ6OnZlY3RvcjxzdGQ6OnVuaXF1ZV9wdHI8QzJTZXR0aW5nUmVzdWx0Pj4gKmNvbnN0IGZhaWx1cmVzKSBvdmVycmlkZTsKKyAgICBDMlBsYXRmb3JtQ29tcG9uZW50U3RvcmUoKTsKKworICAgIHZpcnR1YWwgfkMyUGxhdGZvcm1Db21wb25lbnRTdG9yZSgpIG92ZXJyaWRlID0gZGVmYXVsdDsKKworcHJpdmF0ZToKKworICAgIC8qKgorICAgICAqIEFuIG9iamVjdCBlbmNhcHN1bGF0aW5nIGEgbG9hZGVkIGNvbXBvbmVudCBtb2R1bGUuCisgICAgICoKKyAgICAgKiBcdG9kbyBwcm92aWRlIGEgd2F5IHRvIGFkZCB0cmFpdHMgdG8ga25vd24gY29tcG9uZW50cyBoZXJlIHRvIGF2b2lkIGxvYWRpbmcgdGhlIC5zby1zCisgICAgICogZm9yIGxpc3RDb21wb25lbnRzCisgICAgICovCisgICAgc3RydWN0IENvbXBvbmVudE1vZHVsZSA6IHB1YmxpYyBDMkNvbXBvbmVudEZhY3RvcnksCisgICAgICAgICAgICBwdWJsaWMgc3RkOjplbmFibGVfc2hhcmVkX2Zyb21fdGhpczxDb21wb25lbnRNb2R1bGU+IHsKKyAgICAgICAgdmlydHVhbCBjMl9zdGF0dXNfdCBjcmVhdGVDb21wb25lbnQoCisgICAgICAgICAgICAgICAgYzJfbm9kZV9pZF90IGlkLCBzdGQ6OnNoYXJlZF9wdHI8QzJDb21wb25lbnQ+ICpjb21wb25lbnQsCisgICAgICAgICAgICAgICAgQ29tcG9uZW50RGVsZXRlciBkZWxldGVyID0gc3RkOjpkZWZhdWx0X2RlbGV0ZTxDMkNvbXBvbmVudD4oKSkgb3ZlcnJpZGU7CisgICAgICAgIHZpcnR1YWwgYzJfc3RhdHVzX3QgY3JlYXRlSW50ZXJmYWNlKAorICAgICAgICAgICAgICAgIGMyX25vZGVfaWRfdCBpZCwgc3RkOjpzaGFyZWRfcHRyPEMyQ29tcG9uZW50SW50ZXJmYWNlPiAqaW50ZXJmYWNlLAorICAgICAgICAgICAgICAgIEludGVyZmFjZURlbGV0ZXIgZGVsZXRlciA9IHN0ZDo6ZGVmYXVsdF9kZWxldGU8QzJDb21wb25lbnRJbnRlcmZhY2U+KCkpIG92ZXJyaWRlOworCisgICAgICAgIC8qKgorICAgICAgICAgKiBccmV0dXJucyB0aGUgdHJhaXRzIG9mIHRoZSBjb21wb25lbnQgaW4gdGhpcyBtb2R1bGUuCisgICAgICAgICAqLworICAgICAgICBzdGQ6OnNoYXJlZF9wdHI8Y29uc3QgQzJDb21wb25lbnQ6OlRyYWl0cz4gZ2V0VHJhaXRzKCk7CisKKyAgICAgICAgLyoqCisgICAgICAgICAqIENyZWF0ZXMgYW4gdW5pbml0aWFsaXplZCBjb21wb25lbnQgbW9kdWxlLgorICAgICAgICAgKgorICAgICAgICAgKiBccGFyYW0gbmFtZVtpbl0gIGNvbXBvbmVudCBuYW1lLgorICAgICAgICAgKgorICAgICAgICAgKiBcbm90ZSBPbmx5IHVzZWQgYnkgQ29tcG9uZW50TG9hZGVyLgorICAgICAgICAgKi8KKyAgICAgICAgQ29tcG9uZW50TW9kdWxlKCkKKyAgICAgICAgICAgIDogbUluaXQoQzJfTk9fSU5JVCksCisgICAgICAgICAgICAgIG1MaWJIYW5kbGUobnVsbHB0ciksCisgICAgICAgICAgICAgIGNyZWF0ZUZhY3RvcnkobnVsbHB0ciksCisgICAgICAgICAgICAgIGRlc3Ryb3lGYWN0b3J5KG51bGxwdHIpLAorICAgICAgICAgICAgICBtQ29tcG9uZW50RmFjdG9yeShudWxscHRyKSB7CisgICAgICAgIH0KKworICAgICAgICAvKioKKyAgICAgICAgICogSW5pdGlhbGl6ZXMgYSBjb21wb25lbnQgbW9kdWxlIHdpdGggYSBnaXZlbiBsaWJyYXJ5IHBhdGguIE11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZS4KKyAgICAgICAgICoKKyAgICAgICAgICogXG5vdGUgT25seSB1c2VkIGJ5IENvbXBvbmVudExvYWRlci4KKyAgICAgICAgICoKKyAgICAgICAgICogXHBhcmFtIGFsaWFzW2luXSAgIG1vZHVsZSBhbGlhcworICAgICAgICAgKiBccGFyYW0gbGliUGF0aFtpbl0gbGlicmFyeSBwYXRoCisgICAgICAgICAqCisgICAgICAgICAqIFxyZXR2YWwgQzJfT0sgICAgICAgIHRoZSBjb21wb25lbnQgbW9kdWxlIGhhcyBiZWVuIHN1Y2Nlc3NmdWxseSBsb2FkZWQKKyAgICAgICAgICogXHJldHZhbCBDMl9OT19NRU1PUlkgbm90IGVub3VnaCBtZW1vcnkgdG8gbG9hZGluZyB0aGUgY29tcG9uZW50IG1vZHVsZQorICAgICAgICAgKiBccmV0dmFsIEMyX05PVF9GT1VORCBjb3VsZCBub3QgbG9jYXRlIHRoZSBjb21wb25lbnQgbW9kdWxlCisgICAgICAgICAqIFxyZXR2YWwgQzJfQ09SUlVQVEVEIHRoZSBjb21wb25lbnQgbW9kdWxlIGNvdWxkIG5vdCBiZSBsb2FkZWQgKHVuZXhwZWN0ZWQpCisgICAgICAgICAqIFxyZXR2YWwgQzJfUkVGVVNFRCAgIHBlcm1pc3Npb24gZGVuaWVkIHRvIGxvYWQgdGhlIGNvbXBvbmVudCBtb2R1bGUgKHVuZXhwZWN0ZWQpCisgICAgICAgICAqIFxyZXR2YWwgQzJfVElNRURfT1VUIGNvdWxkIG5vdCBsb2FkIHRoZSBtb2R1bGUgd2l0aGluIHRoZSB0aW1lIGxpbWl0ICh1bmV4cGVjdGVkKQorICAgICAgICAgKi8KKyAgICAgICAgYzJfc3RhdHVzX3QgaW5pdChzdGQ6OnN0cmluZyBhbGlhcywgc3RkOjpzdHJpbmcgbGliUGF0aCk7CisKKyAgICAgICAgdmlydHVhbCB+Q29tcG9uZW50TW9kdWxlKCkgb3ZlcnJpZGU7CisKKyAgICBwcm90ZWN0ZWQ6CisgICAgICAgIHN0ZDo6cmVjdXJzaXZlX211dGV4IG1Mb2NrOyAvLy88IGxvY2sgcHJvdGVjdGluZyBtVHJhaXRzCisgICAgICAgIHN0ZDo6c2hhcmVkX3B0cjxDMkNvbXBvbmVudDo6VHJhaXRzPiBtVHJhaXRzOyAvLy88IGNhY2hlZCBjb21wb25lbnQgdHJhaXRzCisKKyAgICAgICAgYzJfc3RhdHVzX3QgbUluaXQ7IC8vLzwgaW5pdGlhbGl6YXRpb24gcmVzdWx0CisKKyAgICAgICAgdm9pZCAqbUxpYkhhbmRsZTsgLy8vPCBsb2FkZWQgbGlicmFyeSBoYW5kbGUKKyAgICAgICAgQzJDb21wb25lbnRGYWN0b3J5OjpDcmVhdGVDb2RlYzJGYWN0b3J5RnVuYyBjcmVhdGVGYWN0b3J5OyAvLy88IGxvYWRlZCBjcmVhdGUgZnVuY3Rpb24KKyAgICAgICAgQzJDb21wb25lbnRGYWN0b3J5OjpEZXN0cm95Q29kZWMyRmFjdG9yeUZ1bmMgZGVzdHJveUZhY3Rvcnk7IC8vLzwgbG9hZGVkIGRlc3Ryb3kgZnVuY3Rpb24KKyAgICAgICAgQzJDb21wb25lbnRGYWN0b3J5ICptQ29tcG9uZW50RmFjdG9yeTsgLy8vPCBsb2FkZWQvY3JlYXRlZCBjb21wb25lbnQgZmFjdG9yeQorICAgIH07CisKKyAgICAvKioKKyAgICAgKiBBbiBvYmplY3QgZW5jYXBzdWxhdGluZyBhIGxvYWRhYmxlIGNvbXBvbmVudCBtb2R1bGUuCisgICAgICoKKyAgICAgKiBcdG9kbyBtYWtlIHRoaXMgYWxzbyB3b3JrIGZvciBlbnVtZXJhdGlvbnMKKyAgICAgKi8KKyAgICBzdHJ1Y3QgQ29tcG9uZW50TG9hZGVyIHsKKyAgICAgICAgLyoqCisgICAgICAgICAqIExvYWQgdGhlIGNvbXBvbmVudCBtb2R1bGUuCisgICAgICAgICAqCisgICAgICAgICAqIFRoaXMgbWV0aG9kIHNpbXBseSByZXR1cm5zIHRoZSBjb21wb25lbnQgbW9kdWxlIGlmIGl0IGlzIGFscmVhZHkgY3VycmVudGx5IGxvYWRlZCwgb3IKKyAgICAgICAgICogYXR0ZW1wdHMgdG8gbG9hZCBpdCBpZiBpdCBpcyBub3QuCisgICAgICAgICAqCisgICAgICAgICAqIFxwYXJhbSBtb2R1bGVbb3V0XSBwb2ludGVyIHRvIHRoZSBzaGFyZWQgcG9pbnRlciB3aGVyZSB0aGUgbG9hZGVkIG1vZHVsZSBzaGFsbCBiZSBzdG9yZWQuCisgICAgICAgICAqICAgICAgICAgICAgICAgICAgICBUaGlzIHdpbGwgYmUgbnVsbHB0ciBvbiBlcnJvci4KKyAgICAgICAgICoKKyAgICAgICAgICogXHJldHZhbCBDMl9PSyAgICAgICAgdGhlIGNvbXBvbmVudCBtb2R1bGUgaGFzIGJlZW4gc3VjY2Vzc2Z1bGx5IGxvYWRlZAorICAgICAgICAgKiBccmV0dmFsIEMyX05PX01FTU9SWSBub3QgZW5vdWdoIG1lbW9yeSB0byBsb2FkaW5nIHRoZSBjb21wb25lbnQgbW9kdWxlCisgICAgICAgICAqIFxyZXR2YWwgQzJfTk9UX0ZPVU5EIGNvdWxkIG5vdCBsb2NhdGUgdGhlIGNvbXBvbmVudCBtb2R1bGUKKyAgICAgICAgICogXHJldHZhbCBDMl9DT1JSVVBURUQgdGhlIGNvbXBvbmVudCBtb2R1bGUgY291bGQgbm90IGJlIGxvYWRlZAorICAgICAgICAgKiBccmV0dmFsIEMyX1JFRlVTRUQgICBwZXJtaXNzaW9uIGRlbmllZCB0byBsb2FkIHRoZSBjb21wb25lbnQgbW9kdWxlCisgICAgICAgICAqLworICAgICAgICBjMl9zdGF0dXNfdCBmZXRjaE1vZHVsZShzdGQ6OnNoYXJlZF9wdHI8Q29tcG9uZW50TW9kdWxlPiAqbW9kdWxlKSB7CisgICAgICAgICAgICBjMl9zdGF0dXNfdCByZXMgPSBDMl9PSzsKKyAgICAgICAgICAgIHN0ZDo6bG9ja19ndWFyZDxzdGQ6Om11dGV4PiBsb2NrKG1NdXRleCk7CisgICAgICAgICAgICBzdGQ6OnNoYXJlZF9wdHI8Q29tcG9uZW50TW9kdWxlPiBsb2NhbE1vZHVsZSA9IG1Nb2R1bGUubG9jaygpOworICAgICAgICAgICAgaWYgKGxvY2FsTW9kdWxlID09IG51bGxwdHIpIHsKKyAgICAgICAgICAgICAgICBsb2NhbE1vZHVsZSA9IHN0ZDo6bWFrZV9zaGFyZWQ8Q29tcG9uZW50TW9kdWxlPigpOworICAgICAgICAgICAgICAgIHJlcyA9IGxvY2FsTW9kdWxlLT5pbml0KG1BbGlhcywgbUxpYlBhdGgpOworICAgICAgICAgICAgICAgIGlmIChyZXMgPT0gQzJfT0spIHsKKyAgICAgICAgICAgICAgICAgICAgbU1vZHVsZSA9IGxvY2FsTW9kdWxlOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgICptb2R1bGUgPSBsb2NhbE1vZHVsZTsKKyAgICAgICAgICAgIHJldHVybiByZXM7CisgICAgICAgIH0KKworICAgICAgICAvKioKKyAgICAgICAgICogQ3JlYXRlcyBhIGNvbXBvbmVudCBsb2FkZXIgZm9yIGEgc3BlY2lmaWMgbGlicmFyeSBwYXRoIChvciBuYW1lKS4KKyAgICAgICAgICovCisgICAgICAgIENvbXBvbmVudExvYWRlcihzdGQ6OnN0cmluZyBhbGlhcywgc3RkOjpzdHJpbmcgbGliUGF0aCkKKyAgICAgICAgICAgIDogbUFsaWFzKGFsaWFzKSwgbUxpYlBhdGgobGliUGF0aCkge30KKworICAgIHByaXZhdGU6CisgICAgICAgIHN0ZDo6bXV0ZXggbU11dGV4OyAvLy88IG11dGV4IGd1YXJkaW5nIHRoZSBtb2R1bGUKKyAgICAgICAgc3RkOjp3ZWFrX3B0cjxDb21wb25lbnRNb2R1bGU+IG1Nb2R1bGU7IC8vLzwgd2VhayByZWZlcmVuY2UgdG8gdGhlIGxvYWRlZCBtb2R1bGUKKyAgICAgICAgc3RkOjpzdHJpbmcgbUFsaWFzOyAvLy88IGNvbXBvbmVudCBhbGlhcworICAgICAgICBzdGQ6OnN0cmluZyBtTGliUGF0aDsgLy8vPCBsaWJyYXJ5IHBhdGgKKyAgICB9OworCisgICAgc3RydWN0IEludGVyZmFjZSA6IHB1YmxpYyBDMkludGVyZmFjZUhlbHBlciB7CisgICAgICAgIHN0ZDo6c2hhcmVkX3B0cjxDMlN0b3JlSW9uVXNhZ2VJbmZvPiBtSW9uVXNhZ2VJbmZvOworCisgICAgICAgIEludGVyZmFjZShzdGQ6OnNoYXJlZF9wdHI8QzJSZWZsZWN0b3JIZWxwZXI+IHJlZmxlY3RvcikKKyAgICAgICAgICAgIDogQzJJbnRlcmZhY2VIZWxwZXIocmVmbGVjdG9yKSB7CisgICAgICAgICAgICBzZXREZXJpdmVkSW5zdGFuY2UodGhpcyk7CisKKyAgICAgICAgICAgIHN0cnVjdCBTZXR0ZXIgeworICAgICAgICAgICAgICAgIHN0YXRpYyBDMlIgc2V0SW9uVXNhZ2UoYm9vbCAvKiBtYXlCbG9jayAqLywgQzJQPEMyU3RvcmVJb25Vc2FnZUluZm8+ICZtZSkgeworICAgICAgICAgICAgICAgICAgICBtZS5zZXQoKS5oZWFwTWFzayA9IH4wOworICAgICAgICAgICAgICAgICAgICBtZS5zZXQoKS5hbGxvY0ZsYWdzID0gMDsKKyAgICAgICAgICAgICAgICAgICAgbWUuc2V0KCkubWluQWxpZ25tZW50ID0gMDsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEMyUjo6T2soKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9OworCisgICAgICAgICAgICBhZGRQYXJhbWV0ZXIoCisgICAgICAgICAgICAgICAgRGVmaW5lUGFyYW0obUlvblVzYWdlSW5mbywgImlvbi11c2FnZSIpCisgICAgICAgICAgICAgICAgLndpdGhEZWZhdWx0KG5ldyBDMlN0b3JlSW9uVXNhZ2VJbmZvKCkpCisgICAgICAgICAgICAgICAgLndpdGhGaWVsZHMoeworICAgICAgICAgICAgICAgICAgICBDMkYobUlvblVzYWdlSW5mbywgdXNhZ2UpLmZsYWdzKHtDMk1lbW9yeVVzYWdlOjpDUFVfUkVBRCB8IEMyTWVtb3J5VXNhZ2U6OkNQVV9XUklURX0pLAorICAgICAgICAgICAgICAgICAgICBDMkYobUlvblVzYWdlSW5mbywgY2FwYWNpdHkpLmluUmFuZ2UoMCwgVUlOVDMyX01BWCwgMTAyNCksCisgICAgICAgICAgICAgICAgICAgIEMyRihtSW9uVXNhZ2VJbmZvLCBoZWFwTWFzaykuYW55KCksCisgICAgICAgICAgICAgICAgICAgIEMyRihtSW9uVXNhZ2VJbmZvLCBhbGxvY0ZsYWdzKS5mbGFncyh7fSksCisgICAgICAgICAgICAgICAgICAgIEMyRihtSW9uVXNhZ2VJbmZvLCBtaW5BbGlnbm1lbnQpLmVxdWFsVG8oMCkKKyAgICAgICAgICAgICAgICB9KQorICAgICAgICAgICAgICAgIC53aXRoU2V0dGVyKFNldHRlcjo6c2V0SW9uVXNhZ2UpCisgICAgICAgICAgICAgICAgLmJ1aWxkKCkpOworICAgICAgICB9CisgICAgfTsKKworICAgIC8qKgorICAgICAqIFJldHJpZXZlcyB0aGUgY29tcG9uZW50IGxvYWRlciBmb3IgYSBjb21wb25lbnQuCisgICAgICoKKyAgICAgKiBccmV0dXJuIGEgbm9uLXJlZi1ob2xkaW5nIHBvaW50ZXIgdG8gdGhlIGNvbXBvbmVudCBsb2FkZXIuCisgICAgICoKKyAgICAgKiBccmV0dmFsIEMyX09LICAgICAgICB0aGUgY29tcG9uZW50IGxvYWRlciBoYXMgYmVlbiBzdWNjZXNzZnVsbHkgcmV0cmlldmVkCisgICAgICogXHJldHZhbCBDMl9OT19NRU1PUlkgbm90IGVub3VnaCBtZW1vcnkgdG8gbG9jYXRlIHRoZSBjb21wb25lbnQgbG9hZGVyCisgICAgICogXHJldHZhbCBDMl9OT1RfRk9VTkQgY291bGQgbm90IGxvY2F0ZSB0aGUgY29tcG9uZW50IHRvIGJlIGxvYWRlZAorICAgICAqIFxyZXR2YWwgQzJfQ09SUlVQVEVEIHRoZSBjb21wb25lbnQgbG9hZGVyIGNvdWxkIG5vdCBiZSBpZGVudGlmaWVkIGR1ZSB0byBzb21lIG1vZHVsZXMgYmVpbmcKKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICBjb3JydXB0ZWQgKHRoaXMgY2FuIGhhcHBlbiBpZiB0aGUgbmFtZSBkb2VzIG5vdCByZWZlciB0byBhbiBhbHJlYWR5CisgICAgICogICAgICAgICAgICAgICAgICAgICAgaWRlbnRpZmllZCBjb21wb25lbnQgYnV0IHNvbWUgY29tcG9uZW50cyBjb3VsZCBub3QgYmUgbG9hZGVkIGR1ZSB0bworICAgICAqICAgICAgICAgICAgICAgICAgICAgIGJhZCBsaWJyYXJ5KQorICAgICAqIFxyZXR2YWwgQzJfUkVGVVNFRCAgIHBlcm1pc3Npb24gZGVuaWVkIHRvIGZpbmQgdGhlIGNvbXBvbmVudCBsb2FkZXIgZm9yIHRoZSBuYW1lZCBjb21wb25lbnQKKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAodGhpcyBjYW4gaGFwcGVuIGlmIHRoZSBuYW1lIGRvZXMgbm90IHJlZmVyIHRvIGFuIGFscmVhZHkgaWRlbnRpZmllZAorICAgICAqICAgICAgICAgICAgICAgICAgICAgIGNvbXBvbmVudCBidXQgc29tZSBjb21wb25lbnRzIGNvdWxkIG5vdCBiZSBsb2FkZWQgZHVlIHRvIGxhY2sgb2YKKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICBwZXJtaXNzaW9ucykKKyAgICAgKi8KKyAgICBjMl9zdGF0dXNfdCBmaW5kQ29tcG9uZW50KEMyU3RyaW5nIG5hbWUsIENvbXBvbmVudExvYWRlciAqKmxvYWRlcik7CisKKyAgICBzdGQ6Om1hcDxDMlN0cmluZywgQ29tcG9uZW50TG9hZGVyPiBtQ29tcG9uZW50czsgLy8vPCBtYXAgb2YgbmFtZSAtPiBjb21wb25lbnRzCisgICAgc3RkOjp2ZWN0b3I8QzJTdHJpbmc+IG1Db21wb25lbnRzTGlzdDsgLy8vPCBsaXN0IG9mIGNvbXBvbmVudHMKKyAgICBzdGQ6OnNoYXJlZF9wdHI8QzJSZWZsZWN0b3JIZWxwZXI+IG1SZWZsZWN0b3I7CisgICAgSW50ZXJmYWNlIG1JbnRlcmZhY2U7Cit9OworCitjMl9zdGF0dXNfdCBDMlBsYXRmb3JtQ29tcG9uZW50U3RvcmU6OkNvbXBvbmVudE1vZHVsZTo6aW5pdCgKKyAgICAgICAgc3RkOjpzdHJpbmcgYWxpYXMsIHN0ZDo6c3RyaW5nIGxpYlBhdGgpIHsKKyAgICBBTE9HVigiaW4gJXMiLCBfX2Z1bmNfXyk7CisgICAgQUxPR1YoImxvYWRpbmcgZGxsIik7CisgICAgbUxpYkhhbmRsZSA9IGRsb3BlbihsaWJQYXRoLmNfc3RyKCksIFJUTERfTk9XfFJUTERfTk9ERUxFVEUpOworICAgIGlmIChtTGliSGFuZGxlID09IG51bGxwdHIpIHsKKyAgICAgICAgLy8gY291bGQgYmUgYWNjZXNzL3N5bWJvbCBvciBzaW1wbHkgbm90IGJlaW5nIHRoZXJlCisgICAgICAgIEFMT0dEKCJjb3VsZCBub3QgZGxvcGVuICVzOiAlcyIsIGxpYlBhdGguY19zdHIoKSwgZGxlcnJvcigpKTsKKyAgICAgICAgbUluaXQgPSBDMl9DT1JSVVBURUQ7CisgICAgfSBlbHNlIHsKKyAgICAgICAgY3JlYXRlRmFjdG9yeSA9CisgICAgICAgICAgICAoQzJDb21wb25lbnRGYWN0b3J5OjpDcmVhdGVDb2RlYzJGYWN0b3J5RnVuYylkbHN5bShtTGliSGFuZGxlLCAiQ3JlYXRlQ29kZWMyRmFjdG9yeSIpOworICAgICAgICBkZXN0cm95RmFjdG9yeSA9CisgICAgICAgICAgICAoQzJDb21wb25lbnRGYWN0b3J5OjpEZXN0cm95Q29kZWMyRmFjdG9yeUZ1bmMpZGxzeW0obUxpYkhhbmRsZSwgIkRlc3Ryb3lDb2RlYzJGYWN0b3J5Iik7CisKKyAgICAgICAgbUNvbXBvbmVudEZhY3RvcnkgPSBjcmVhdGVGYWN0b3J5KCk7CisgICAgICAgIGlmIChtQ29tcG9uZW50RmFjdG9yeSA9PSBudWxscHRyKSB7CisgICAgICAgICAgICBBTE9HRCgiY291bGQgbm90IGNyZWF0ZSBmYWN0b3J5IGluICVzIiwgbGliUGF0aC5jX3N0cigpKTsKKyAgICAgICAgICAgIG1Jbml0ID0gQzJfTk9fTUVNT1JZOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgbUluaXQgPSBDMl9PSzsKKyAgICAgICAgfQorICAgIH0KKyAgICBpZiAobUluaXQgIT0gQzJfT0spIHsKKyAgICAgICAgcmV0dXJuIG1Jbml0OworICAgIH0KKworICAgIHN0ZDo6c2hhcmVkX3B0cjxDMkNvbXBvbmVudEludGVyZmFjZT4gaW50ZjsKKyAgICBjMl9zdGF0dXNfdCByZXMgPSBjcmVhdGVJbnRlcmZhY2UoMCwgJmludGYpOworICAgIGlmIChyZXMgIT0gQzJfT0spIHsKKyAgICAgICAgQUxPR0QoImZhaWxlZCB0byBjcmVhdGUgaW50ZXJmYWNlOiAlZCIsIHJlcyk7CisgICAgICAgIHJldHVybiBtSW5pdDsKKyAgICB9CisKKyAgICBzdGQ6OnNoYXJlZF9wdHI8QzJDb21wb25lbnQ6OlRyYWl0cz4gdHJhaXRzKG5ldyAoc3RkOjpub3Rocm93KSBDMkNvbXBvbmVudDo6VHJhaXRzKTsKKyAgICBpZiAodHJhaXRzKSB7CisgICAgICAgIGlmIChhbGlhcyAhPSBpbnRmLT5nZXROYW1lKCkpIHsKKyAgICAgICAgICAgIEFMT0dWKCIlcyBpcyBhbGlhcyB0byAlcyIsIGFsaWFzLmNfc3RyKCksIGludGYtPmdldE5hbWUoKS5jX3N0cigpKTsKKyAgICAgICAgfQorICAgICAgICB0cmFpdHMtPm5hbWUgPSBhbGlhczsKKyAgICAgICAgLy8gVE9ETzogZ2V0IHRoaXMgZnJvbSBpbnRlcmZhY2UgcHJvcGVybHkuCisgICAgICAgIGJvb2wgZW5jb2RlciA9ICh0cmFpdHMtPm5hbWUuZmluZCgiZW5jb2RlciIpICE9IHN0ZDo6c3RyaW5nOjpucG9zKTsKKyAgICAgICAgdWludDMyX3QgbWVkaWFUeXBlSW5kZXggPSBlbmNvZGVyID8gQzJQb3J0TWltZUNvbmZpZzo6b3V0cHV0OjpQQVJBTV9UWVBFCisgICAgICAgICAgICAgICAgOiBDMlBvcnRNaW1lQ29uZmlnOjppbnB1dDo6UEFSQU1fVFlQRTsKKyAgICAgICAgc3RkOjp2ZWN0b3I8c3RkOjp1bmlxdWVfcHRyPEMyUGFyYW0+PiBwYXJhbXM7CisgICAgICAgIHJlcyA9IGludGYtPnF1ZXJ5X3ZiKHt9LCB7IG1lZGlhVHlwZUluZGV4IH0sIEMyX01BWV9CTE9DSywgJnBhcmFtcyk7CisgICAgICAgIGlmIChyZXMgIT0gQzJfT0spIHsKKyAgICAgICAgICAgIEFMT0dEKCJmYWlsZWQgdG8gcXVlcnkgaW50ZXJmYWNlOiAlZCIsIHJlcyk7CisgICAgICAgICAgICByZXR1cm4gbUluaXQ7CisgICAgICAgIH0KKyAgICAgICAgaWYgKHBhcmFtcy5zaXplKCkgIT0gMXUpIHsKKyAgICAgICAgICAgIEFMT0dEKCJmYWlsZWQgdG8gcXVlcnkgaW50ZXJmYWNlOiB1bmV4cGVjdGVkIHZlY3RvciBzaXplOiAlenUiLCBwYXJhbXMuc2l6ZSgpKTsKKyAgICAgICAgICAgIHJldHVybiBtSW5pdDsKKyAgICAgICAgfQorICAgICAgICBDMlBvcnRNaW1lQ29uZmlnICptZWRpYVR5cGVDb25maWcgPSAoQzJQb3J0TWltZUNvbmZpZyAqKShwYXJhbXNbMF0uZ2V0KCkpOworICAgICAgICBpZiAobWVkaWFUeXBlQ29uZmlnID09IG51bGxwdHIpIHsKKyAgICAgICAgICAgIEFMT0dEKCJmYWlsZWQgdG8gcXVlcnkgbWVkaWEgdHlwZSIpOworICAgICAgICAgICAgcmV0dXJuIG1Jbml0OworICAgICAgICB9CisgICAgICAgIHRyYWl0cy0+bWVkaWFUeXBlID0gbWVkaWFUeXBlQ29uZmlnLT5tLnZhbHVlOworICAgICAgICAvLyBUT0RPOiBnZXQgdGhpcyBwcm9wZXJseS4KKyAgICAgICAgdHJhaXRzLT5yYW5rID0gMHgyMDA7CisKKyAgICAgICAgLy8gVE9ETzogZGVmaW5lIHRoZXNlIHZhbHVlcyBwcm9wZXJseQorICAgICAgICBib29sIGRlY29kZXIgPSAodHJhaXRzLT5uYW1lLmZpbmQoImRlY29kZXIiKSAhPSBzdGQ6OnN0cmluZzo6bnBvcyk7CisgICAgICAgIHRyYWl0cy0+a2luZCA9CisgICAgICAgICAgICAgICAgZGVjb2RlciA/IEMyQ29tcG9uZW50OjpLSU5EX0RFQ09ERVIgOgorICAgICAgICAgICAgICAgIGVuY29kZXIgPyBDMkNvbXBvbmVudDo6S0lORF9FTkNPREVSIDoKKyAgICAgICAgICAgICAgICBDMkNvbXBvbmVudDo6S0lORF9PVEhFUjsKKyAgICAgICAgaWYgKHN0cm5jbXAodHJhaXRzLT5tZWRpYVR5cGUuY19zdHIoKSwgImF1ZGlvLyIsIDYpID09IDApIHsKKyAgICAgICAgICAgIHRyYWl0cy0+ZG9tYWluID0gQzJDb21wb25lbnQ6OkRPTUFJTl9BVURJTzsKKyAgICAgICAgfSBlbHNlIGlmIChzdHJuY21wKHRyYWl0cy0+bWVkaWFUeXBlLmNfc3RyKCksICJ2aWRlby8iLCA2KSA9PSAwKSB7CisgICAgICAgICAgICB0cmFpdHMtPmRvbWFpbiA9IEMyQ29tcG9uZW50OjpET01BSU5fVklERU87CisgICAgICAgIH0gZWxzZSBpZiAoc3RybmNtcCh0cmFpdHMtPm1lZGlhVHlwZS5jX3N0cigpLCAiaW1hZ2UvIiwgNikgPT0gMCkgeworICAgICAgICAgICAgdHJhaXRzLT5kb21haW4gPSBDMkNvbXBvbmVudDo6RE9NQUlOX0lNQUdFOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgdHJhaXRzLT5kb21haW4gPSBDMkNvbXBvbmVudDo6RE9NQUlOX09USEVSOworICAgICAgICB9CisgICAgfQorICAgIG1UcmFpdHMgPSB0cmFpdHM7CisKKyAgICByZXR1cm4gbUluaXQ7Cit9CisKK0MyUGxhdGZvcm1Db21wb25lbnRTdG9yZTo6Q29tcG9uZW50TW9kdWxlOjp+Q29tcG9uZW50TW9kdWxlKCkgeworICAgIEFMT0dWKCJpbiAlcyIsIF9fZnVuY19fKTsKKyAgICBpZiAoZGVzdHJveUZhY3RvcnkgJiYgbUNvbXBvbmVudEZhY3RvcnkpIHsKKyAgICAgICAgZGVzdHJveUZhY3RvcnkobUNvbXBvbmVudEZhY3RvcnkpOworICAgIH0KKyAgICBpZiAobUxpYkhhbmRsZSkgeworICAgICAgICBBTE9HVigidW5sb2FkaW5nIGRsbCIpOworICAgICAgICBkbGNsb3NlKG1MaWJIYW5kbGUpOworICAgIH0KK30KKworYzJfc3RhdHVzX3QgQzJQbGF0Zm9ybUNvbXBvbmVudFN0b3JlOjpDb21wb25lbnRNb2R1bGU6OmNyZWF0ZUludGVyZmFjZSgKKyAgICAgICAgYzJfbm9kZV9pZF90IGlkLCBzdGQ6OnNoYXJlZF9wdHI8QzJDb21wb25lbnRJbnRlcmZhY2U+ICppbnRlcmZhY2UsCisgICAgICAgIHN0ZDo6ZnVuY3Rpb248dm9pZCg6OkMyQ29tcG9uZW50SW50ZXJmYWNlKik+IGRlbGV0ZXIpIHsKKyAgICBpbnRlcmZhY2UtPnJlc2V0KCk7CisgICAgaWYgKG1Jbml0ICE9IEMyX09LKSB7CisgICAgICAgIHJldHVybiBtSW5pdDsKKyAgICB9CisgICAgc3RkOjpzaGFyZWRfcHRyPENvbXBvbmVudE1vZHVsZT4gbW9kdWxlID0gc2hhcmVkX2Zyb21fdGhpcygpOworICAgIGMyX3N0YXR1c190IHJlcyA9IG1Db21wb25lbnRGYWN0b3J5LT5jcmVhdGVJbnRlcmZhY2UoCisgICAgICAgICAgICBpZCwgaW50ZXJmYWNlLCBbbW9kdWxlLCBkZWxldGVyXShDMkNvbXBvbmVudEludGVyZmFjZSAqcCkgbXV0YWJsZSB7CisgICAgICAgICAgICAgICAgLy8gY2FwdHVyZSBtb2R1bGUgc28gdGhhdCB3ZSBlbnN1cmUgd2Ugc3RpbGwgaGF2ZSBpdCB3aGlsZSBkZWxldGluZyBpbnRlcmZhY2UKKyAgICAgICAgICAgICAgICBkZWxldGVyKHApOyAvLyBkZWxldGUgaW50ZXJmYWNlIGZpcnN0CisgICAgICAgICAgICAgICAgbW9kdWxlLnJlc2V0KCk7IC8vIHJlbW92ZSBtb2R1bGUgcmVmIChub3QgdGVjaG5pY2FsbHkgbmVlZGVkKQorICAgIH0pOworICAgIHJldHVybiByZXM7Cit9CisKK2MyX3N0YXR1c190IEMyUGxhdGZvcm1Db21wb25lbnRTdG9yZTo6Q29tcG9uZW50TW9kdWxlOjpjcmVhdGVDb21wb25lbnQoCisgICAgICAgIGMyX25vZGVfaWRfdCBpZCwgc3RkOjpzaGFyZWRfcHRyPEMyQ29tcG9uZW50PiAqY29tcG9uZW50LAorICAgICAgICBzdGQ6OmZ1bmN0aW9uPHZvaWQoOjpDMkNvbXBvbmVudCopPiBkZWxldGVyKSB7CisgICAgY29tcG9uZW50LT5yZXNldCgpOworICAgIGlmIChtSW5pdCAhPSBDMl9PSykgeworICAgICAgICByZXR1cm4gbUluaXQ7CisgICAgfQorICAgIHN0ZDo6c2hhcmVkX3B0cjxDb21wb25lbnRNb2R1bGU+IG1vZHVsZSA9IHNoYXJlZF9mcm9tX3RoaXMoKTsKKyAgICBjMl9zdGF0dXNfdCByZXMgPSBtQ29tcG9uZW50RmFjdG9yeS0+Y3JlYXRlQ29tcG9uZW50KAorICAgICAgICAgICAgaWQsIGNvbXBvbmVudCwgW21vZHVsZSwgZGVsZXRlcl0oQzJDb21wb25lbnQgKnApIG11dGFibGUgeworICAgICAgICAgICAgICAgIC8vIGNhcHR1cmUgbW9kdWxlIHNvIHRoYXQgd2UgZW5zdXJlIHdlIHN0aWxsIGhhdmUgaXQgd2hpbGUgZGVsZXRpbmcgY29tcG9uZW50CisgICAgICAgICAgICAgICAgZGVsZXRlcihwKTsgLy8gZGVsZXRlIGNvbXBvbmVudCBmaXJzdAorICAgICAgICAgICAgICAgIG1vZHVsZS5yZXNldCgpOyAvLyByZW1vdmUgbW9kdWxlIHJlZiAobm90IHRlY2huaWNhbGx5IG5lZWRlZCkKKyAgICB9KTsKKyAgICByZXR1cm4gcmVzOworfQorCitzdGQ6OnNoYXJlZF9wdHI8Y29uc3QgQzJDb21wb25lbnQ6OlRyYWl0cz4gQzJQbGF0Zm9ybUNvbXBvbmVudFN0b3JlOjpDb21wb25lbnRNb2R1bGU6OmdldFRyYWl0cygpIHsKKyAgICBzdGQ6OnVuaXF1ZV9sb2NrPHN0ZDo6cmVjdXJzaXZlX211dGV4PiBsb2NrKG1Mb2NrKTsKKyAgICByZXR1cm4gbVRyYWl0czsKK30KKworQzJQbGF0Zm9ybUNvbXBvbmVudFN0b3JlOjpDMlBsYXRmb3JtQ29tcG9uZW50U3RvcmUoKQorICAgIDogbVJlZmxlY3RvcihzdGQ6Om1ha2Vfc2hhcmVkPEMyUmVmbGVjdG9ySGVscGVyPigpKSwKKyAgICAgIG1JbnRlcmZhY2UobVJlZmxlY3RvcikgeworCisgICAgYXV0byBlbXBsYWNlID0gW3RoaXNdKGNvbnN0IGNoYXIgKmFsaWFzLCBjb25zdCBjaGFyICpsaWJQYXRoKSB7CisgICAgICAgIC8vIENvbXBvbmVudExvYWRlciBpcyBuZWl0aGVyIGNvcGlhYmxlIG5vciBtb3ZhYmxlLCBzbyBpdCBtdXN0IGJlCisgICAgICAgIC8vIGNvbnN0cnVjdGVkIGluLXBsYWNlLiBOb3cgQ29tcG9uZW50TG9hZGVyIHRha2VzIHR3byBhcmd1bWVudHMgaW4KKyAgICAgICAgLy8gY29uc3RydWN0b3IsIHNvIHdlIG5lZWQgdG8gdXNlIHBpZWNld2lzZV9jb25zdHJ1Y3QgdG8gYWNoaWV2ZSB0aGlzCisgICAgICAgIC8vIGJlaGF2aW9yLgorICAgICAgICBtQ29tcG9uZW50cy5lbXBsYWNlKAorICAgICAgICAgICAgICAgIHN0ZDo6cGllY2V3aXNlX2NvbnN0cnVjdCwKKyAgICAgICAgICAgICAgICBzdGQ6OmZvcndhcmRfYXNfdHVwbGUoYWxpYXMpLAorICAgICAgICAgICAgICAgIHN0ZDo6Zm9yd2FyZF9hc190dXBsZShhbGlhcywgbGliUGF0aCkpOworICAgICAgICBtQ29tcG9uZW50c0xpc3QuZW1wbGFjZV9iYWNrKGFsaWFzKTsKKyAgICB9OworICAgIC8vIFRPRE86IG1vdmUgdGhpcyBhbHNvIGludG8gYSAuc28gc28gaXQgY2FuIGJlIHVwZGF0ZWQKKyAgICBlbXBsYWNlKCJjMi5hbmRyb2lkLmF2Yy5kZWNvZGVyIiwgImxpYnN0YWdlZnJpZ2h0X3NvZnRfYzJhdmNkZWMuc28iKTsKKyAgICBlbXBsYWNlKCJjMi5hbmRyb2lkLmF2Yy5lbmNvZGVyIiwgImxpYnN0YWdlZnJpZ2h0X3NvZnRfYzJhdmNlbmMuc28iKTsKKyAgICBlbXBsYWNlKCJjMi5hbmRyb2lkLmFhYy5kZWNvZGVyIiwgImxpYnN0YWdlZnJpZ2h0X3NvZnRfYzJhYWNkZWMuc28iKTsKKyAgICBlbXBsYWNlKCJjMi5hbmRyb2lkLmFhYy5lbmNvZGVyIiwgImxpYnN0YWdlZnJpZ2h0X3NvZnRfYzJhYWNlbmMuc28iKTsKKyAgICBlbXBsYWNlKCJjMi5hbmRyb2lkLmFtcm5iLmRlY29kZXIiLCAibGlic3RhZ2VmcmlnaHRfc29mdF9jMmFtcm5iZGVjLnNvIik7CisgICAgZW1wbGFjZSgiYzIuYW5kcm9pZC5hbXJuYi5lbmNvZGVyIiwgImxpYnN0YWdlZnJpZ2h0X3NvZnRfYzJhbXJuYmVuYy5zbyIpOworICAgIGVtcGxhY2UoImMyLmFuZHJvaWQuYW1yd2IuZGVjb2RlciIsICJsaWJzdGFnZWZyaWdodF9zb2Z0X2MyYW1yd2JkZWMuc28iKTsKKyAgICBlbXBsYWNlKCJjMi5hbmRyb2lkLmFtcndiLmVuY29kZXIiLCAibGlic3RhZ2VmcmlnaHRfc29mdF9jMmFtcndiZW5jLnNvIik7CisgICAgZW1wbGFjZSgiYzIuYW5kcm9pZC5oZXZjLmRlY29kZXIiLCAibGlic3RhZ2VmcmlnaHRfc29mdF9jMmhldmNkZWMuc28iKTsKKyAgICBlbXBsYWNlKCJjMi5hbmRyb2lkLmc3MTEuYWxhdy5kZWNvZGVyIiwgImxpYnN0YWdlZnJpZ2h0X3NvZnRfYzJnNzExYWxhd2RlYy5zbyIpOworICAgIGVtcGxhY2UoImMyLmFuZHJvaWQuZzcxMS5tbGF3LmRlY29kZXIiLCAibGlic3RhZ2VmcmlnaHRfc29mdF9jMmc3MTFtbGF3ZGVjLnNvIik7CisgICAgZW1wbGFjZSgiYzIuYW5kcm9pZC5tcGVnMi5kZWNvZGVyIiwgImxpYnN0YWdlZnJpZ2h0X3NvZnRfYzJtcGVnMmRlYy5zbyIpOworICAgIGVtcGxhY2UoImMyLmFuZHJvaWQuaDI2My5kZWNvZGVyIiwgImxpYnN0YWdlZnJpZ2h0X3NvZnRfYzJoMjYzZGVjLnNvIik7CisgICAgZW1wbGFjZSgiYzIuYW5kcm9pZC5oMjYzLmVuY29kZXIiLCAibGlic3RhZ2VmcmlnaHRfc29mdF9jMmgyNjNlbmMuc28iKTsKKyAgICBlbXBsYWNlKCJjMi5hbmRyb2lkLm1wZWc0LmRlY29kZXIiLCAibGlic3RhZ2VmcmlnaHRfc29mdF9jMm1wZWc0ZGVjLnNvIik7CisgICAgZW1wbGFjZSgiYzIuYW5kcm9pZC5tcGVnNC5lbmNvZGVyIiwgImxpYnN0YWdlZnJpZ2h0X3NvZnRfYzJtcGVnNGVuYy5zbyIpOworICAgIGVtcGxhY2UoImMyLmFuZHJvaWQubXAzLmRlY29kZXIiLCAibGlic3RhZ2VmcmlnaHRfc29mdF9jMm1wM2RlYy5zbyIpOworICAgIGVtcGxhY2UoImMyLmFuZHJvaWQudm9yYmlzLmRlY29kZXIiLCAibGlic3RhZ2VmcmlnaHRfc29mdF9jMnZvcmJpc2RlYy5zbyIpOworICAgIGVtcGxhY2UoImMyLmFuZHJvaWQub3B1cy5kZWNvZGVyIiwgImxpYnN0YWdlZnJpZ2h0X3NvZnRfYzJvcHVzZGVjLnNvIik7CisgICAgZW1wbGFjZSgiYzIuYW5kcm9pZC52cDguZGVjb2RlciIsICJsaWJzdGFnZWZyaWdodF9zb2Z0X2MydnA4ZGVjLnNvIik7CisgICAgZW1wbGFjZSgiYzIuYW5kcm9pZC52cDkuZGVjb2RlciIsICJsaWJzdGFnZWZyaWdodF9zb2Z0X2MydnA5ZGVjLnNvIik7CisgICAgZW1wbGFjZSgiYzIuYW5kcm9pZC52cDguZW5jb2RlciIsICJsaWJzdGFnZWZyaWdodF9zb2Z0X2MydnA4ZW5jLnNvIik7CisgICAgZW1wbGFjZSgiYzIuYW5kcm9pZC52cDkuZW5jb2RlciIsICJsaWJzdGFnZWZyaWdodF9zb2Z0X2MydnA5ZW5jLnNvIik7CisgICAgZW1wbGFjZSgiYzIuYW5kcm9pZC5yYXcuZGVjb2RlciIsICJsaWJzdGFnZWZyaWdodF9zb2Z0X2MycmF3ZGVjLnNvIik7CisgICAgZW1wbGFjZSgiYzIuYW5kcm9pZC5mbGFjLmRlY29kZXIiLCAibGlic3RhZ2VmcmlnaHRfc29mdF9jMmZsYWNkZWMuc28iKTsKKyAgICBlbXBsYWNlKCJjMi5hbmRyb2lkLmZsYWMuZW5jb2RlciIsICJsaWJzdGFnZWZyaWdodF9zb2Z0X2MyZmxhY2VuYy5zbyIpOworICAgIGVtcGxhY2UoImMyLmFuZHJvaWQuZ3NtLmRlY29kZXIiLCAibGlic3RhZ2VmcmlnaHRfc29mdF9jMmdzbWRlYy5zbyIpOworICAgIGVtcGxhY2UoImMyLmFuZHJvaWQueGFhYy5kZWNvZGVyIiwgImxpYnN0YWdlZnJpZ2h0X3NvZnRfYzJ4YWFjZGVjLnNvIik7CisKKyAgICAvLyAiQWxpYXNlcyIKKyAgICAvLyBUT0RPOiB1c2UgYWxpYXNlcyBwcm9wZXIgZnJvbSBDMkNvbXBvbmVudDo6VHJhaXRzCisgICAgZW1wbGFjZSgiT01YLmdvb2dsZS5oMjY0LmRlY29kZXIiLCAibGlic3RhZ2VmcmlnaHRfc29mdF9jMmF2Y2RlYy5zbyIpOworICAgIGVtcGxhY2UoIk9NWC5nb29nbGUuaDI2NC5lbmNvZGVyIiwgImxpYnN0YWdlZnJpZ2h0X3NvZnRfYzJhdmNlbmMuc28iKTsKKyAgICBlbXBsYWNlKCJPTVguZ29vZ2xlLmFhYy5kZWNvZGVyIiwgImxpYnN0YWdlZnJpZ2h0X3NvZnRfYzJhYWNkZWMuc28iKTsKKyAgICBlbXBsYWNlKCJPTVguZ29vZ2xlLmFhYy5lbmNvZGVyIiwgImxpYnN0YWdlZnJpZ2h0X3NvZnRfYzJhYWNlbmMuc28iKTsKKyAgICBlbXBsYWNlKCJPTVguZ29vZ2xlLmFtcm5iLmRlY29kZXIiLCAibGlic3RhZ2VmcmlnaHRfc29mdF9jMmFtcm5iZGVjLnNvIik7CisgICAgZW1wbGFjZSgiT01YLmdvb2dsZS5hbXJuYi5lbmNvZGVyIiwgImxpYnN0YWdlZnJpZ2h0X3NvZnRfYzJhbXJuYmVuYy5zbyIpOworICAgIGVtcGxhY2UoIk9NWC5nb29nbGUuYW1yd2IuZGVjb2RlciIsICJsaWJzdGFnZWZyaWdodF9zb2Z0X2MyYW1yd2JkZWMuc28iKTsKKyAgICBlbXBsYWNlKCJPTVguZ29vZ2xlLmFtcndiLmVuY29kZXIiLCAibGlic3RhZ2VmcmlnaHRfc29mdF9jMmFtcndiZW5jLnNvIik7CisgICAgZW1wbGFjZSgiT01YLmdvb2dsZS5oZXZjLmRlY29kZXIiLCAibGlic3RhZ2VmcmlnaHRfc29mdF9jMmhldmNkZWMuc28iKTsKKyAgICBlbXBsYWNlKCJPTVguZ29vZ2xlLmc3MTEuYWxhdy5kZWNvZGVyIiwgImxpYnN0YWdlZnJpZ2h0X3NvZnRfYzJnNzExYWxhd2RlYy5zbyIpOworICAgIGVtcGxhY2UoIk9NWC5nb29nbGUuZzcxMS5tbGF3LmRlY29kZXIiLCAibGlic3RhZ2VmcmlnaHRfc29mdF9jMmc3MTFtbGF3ZGVjLnNvIik7CisgICAgZW1wbGFjZSgiT01YLmdvb2dsZS5tcGVnMi5kZWNvZGVyIiwgImxpYnN0YWdlZnJpZ2h0X3NvZnRfYzJtcGVnMmRlYy5zbyIpOworICAgIGVtcGxhY2UoIk9NWC5nb29nbGUuaDI2My5kZWNvZGVyIiwgImxpYnN0YWdlZnJpZ2h0X3NvZnRfYzJoMjYzZGVjLnNvIik7CisgICAgZW1wbGFjZSgiT01YLmdvb2dsZS5oMjYzLmVuY29kZXIiLCAibGlic3RhZ2VmcmlnaHRfc29mdF9jMmgyNjNlbmMuc28iKTsKKyAgICBlbXBsYWNlKCJPTVguZ29vZ2xlLm1wZWc0LmRlY29kZXIiLCAibGlic3RhZ2VmcmlnaHRfc29mdF9jMm1wZWc0ZGVjLnNvIik7CisgICAgZW1wbGFjZSgiT01YLmdvb2dsZS5tcGVnNC5lbmNvZGVyIiwgImxpYnN0YWdlZnJpZ2h0X3NvZnRfYzJtcGVnNGVuYy5zbyIpOworICAgIGVtcGxhY2UoIk9NWC5nb29nbGUubXAzLmRlY29kZXIiLCAibGlic3RhZ2VmcmlnaHRfc29mdF9jMm1wM2RlYy5zbyIpOworICAgIGVtcGxhY2UoIk9NWC5nb29nbGUudm9yYmlzLmRlY29kZXIiLCAibGlic3RhZ2VmcmlnaHRfc29mdF9jMnZvcmJpc2RlYy5zbyIpOworICAgIGVtcGxhY2UoIk9NWC5nb29nbGUub3B1cy5kZWNvZGVyIiwgImxpYnN0YWdlZnJpZ2h0X3NvZnRfYzJvcHVzZGVjLnNvIik7CisgICAgZW1wbGFjZSgiT01YLmdvb2dsZS52cDguZGVjb2RlciIsICJsaWJzdGFnZWZyaWdodF9zb2Z0X2MydnA4ZGVjLnNvIik7CisgICAgZW1wbGFjZSgiT01YLmdvb2dsZS52cDkuZGVjb2RlciIsICJsaWJzdGFnZWZyaWdodF9zb2Z0X2MydnA5ZGVjLnNvIik7CisgICAgZW1wbGFjZSgiT01YLmdvb2dsZS52cDguZW5jb2RlciIsICJsaWJzdGFnZWZyaWdodF9zb2Z0X2MydnA4ZW5jLnNvIik7CisgICAgZW1wbGFjZSgiT01YLmdvb2dsZS52cDkuZW5jb2RlciIsICJsaWJzdGFnZWZyaWdodF9zb2Z0X2MydnA5ZW5jLnNvIik7CisgICAgZW1wbGFjZSgiT01YLmdvb2dsZS5yYXcuZGVjb2RlciIsICJsaWJzdGFnZWZyaWdodF9zb2Z0X2MycmF3ZGVjLnNvIik7CisgICAgZW1wbGFjZSgiT01YLmdvb2dsZS5mbGFjLmRlY29kZXIiLCAibGlic3RhZ2VmcmlnaHRfc29mdF9jMmZsYWNkZWMuc28iKTsKKyAgICBlbXBsYWNlKCJPTVguZ29vZ2xlLmZsYWMuZW5jb2RlciIsICJsaWJzdGFnZWZyaWdodF9zb2Z0X2MyZmxhY2VuYy5zbyIpOworICAgIGVtcGxhY2UoIk9NWC5nb29nbGUuZ3NtLmRlY29kZXIiLCAibGlic3RhZ2VmcmlnaHRfc29mdF9jMmdzbWRlYy5zbyIpOworICAgIGVtcGxhY2UoIk9NWC5nb29nbGUueGFhYy5kZWNvZGVyIiwgImxpYnN0YWdlZnJpZ2h0X3NvZnRfYzJ4YWFjZGVjLnNvIik7Cit9CisKK2MyX3N0YXR1c190IEMyUGxhdGZvcm1Db21wb25lbnRTdG9yZTo6Y29weUJ1ZmZlcigKKyAgICAgICAgc3RkOjpzaGFyZWRfcHRyPEMyR3JhcGhpY0J1ZmZlcj4gc3JjLCBzdGQ6OnNoYXJlZF9wdHI8QzJHcmFwaGljQnVmZmVyPiBkc3QpIHsKKyAgICAodm9pZClzcmM7CisgICAgKHZvaWQpZHN0OworICAgIHJldHVybiBDMl9PTUlUVEVEOworfQorCitjMl9zdGF0dXNfdCBDMlBsYXRmb3JtQ29tcG9uZW50U3RvcmU6OnF1ZXJ5X3NtKAorICAgICAgICBjb25zdCBzdGQ6OnZlY3RvcjxDMlBhcmFtKj4gJnN0YWNrUGFyYW1zLAorICAgICAgICBjb25zdCBzdGQ6OnZlY3RvcjxDMlBhcmFtOjpJbmRleD4gJmhlYXBQYXJhbUluZGljZXMsCisgICAgICAgIHN0ZDo6dmVjdG9yPHN0ZDo6dW5pcXVlX3B0cjxDMlBhcmFtPj4gKmNvbnN0IGhlYXBQYXJhbXMpIGNvbnN0IHsKKyAgICByZXR1cm4gbUludGVyZmFjZS5xdWVyeShzdGFja1BhcmFtcywgaGVhcFBhcmFtSW5kaWNlcywgQzJfTUFZX0JMT0NLLCBoZWFwUGFyYW1zKTsKK30KKworYzJfc3RhdHVzX3QgQzJQbGF0Zm9ybUNvbXBvbmVudFN0b3JlOjpjb25maWdfc20oCisgICAgICAgIGNvbnN0IHN0ZDo6dmVjdG9yPEMyUGFyYW0qPiAmcGFyYW1zLAorICAgICAgICBzdGQ6OnZlY3RvcjxzdGQ6OnVuaXF1ZV9wdHI8QzJTZXR0aW5nUmVzdWx0Pj4gKmNvbnN0IGZhaWx1cmVzKSB7CisgICAgcmV0dXJuIG1JbnRlcmZhY2UuY29uZmlnKHBhcmFtcywgQzJfTUFZX0JMT0NLLCBmYWlsdXJlcyk7Cit9CisKK3N0ZDo6dmVjdG9yPHN0ZDo6c2hhcmVkX3B0cjxjb25zdCBDMkNvbXBvbmVudDo6VHJhaXRzPj4gQzJQbGF0Zm9ybUNvbXBvbmVudFN0b3JlOjpsaXN0Q29tcG9uZW50cygpIHsKKyAgICAvLyBUaGlzIG1ldGhvZCBTSEFMTCByZXR1cm4gd2l0aGluIDUwMG1zLgorICAgIHN0ZDo6dmVjdG9yPHN0ZDo6c2hhcmVkX3B0cjxjb25zdCBDMkNvbXBvbmVudDo6VHJhaXRzPj4gbGlzdDsKKyAgICBmb3IgKGNvbnN0IEMyU3RyaW5nICZhbGlhcyA6IG1Db21wb25lbnRzTGlzdCkgeworICAgICAgICBDb21wb25lbnRMb2FkZXIgJmxvYWRlciA9IG1Db21wb25lbnRzLmF0KGFsaWFzKTsKKyAgICAgICAgc3RkOjpzaGFyZWRfcHRyPENvbXBvbmVudE1vZHVsZT4gbW9kdWxlOworICAgICAgICBjMl9zdGF0dXNfdCByZXMgPSBsb2FkZXIuZmV0Y2hNb2R1bGUoJm1vZHVsZSk7CisgICAgICAgIGlmIChyZXMgPT0gQzJfT0spIHsKKyAgICAgICAgICAgIHN0ZDo6c2hhcmVkX3B0cjxjb25zdCBDMkNvbXBvbmVudDo6VHJhaXRzPiB0cmFpdHMgPSBtb2R1bGUtPmdldFRyYWl0cygpOworICAgICAgICAgICAgaWYgKHRyYWl0cykgeworICAgICAgICAgICAgICAgIGxpc3QucHVzaF9iYWNrKHRyYWl0cyk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisgICAgcmV0dXJuIGxpc3Q7Cit9CisKK2MyX3N0YXR1c190IEMyUGxhdGZvcm1Db21wb25lbnRTdG9yZTo6ZmluZENvbXBvbmVudChDMlN0cmluZyBuYW1lLCBDb21wb25lbnRMb2FkZXIgKipsb2FkZXIpIHsKKyAgICAqbG9hZGVyID0gbnVsbHB0cjsKKyAgICBhdXRvIHBvcyA9IG1Db21wb25lbnRzLmZpbmQobmFtZSk7CisgICAgLy8gVE9ETzogY2hlY2sgYWxpYXNlcworICAgIGlmIChwb3MgPT0gbUNvbXBvbmVudHMuZW5kKCkpIHsKKyAgICAgICAgcmV0dXJuIEMyX05PVF9GT1VORDsKKyAgICB9CisgICAgKmxvYWRlciA9ICZwb3MtPnNlY29uZDsKKyAgICByZXR1cm4gQzJfT0s7Cit9CisKK2MyX3N0YXR1c190IEMyUGxhdGZvcm1Db21wb25lbnRTdG9yZTo6Y3JlYXRlQ29tcG9uZW50KAorICAgICAgICBDMlN0cmluZyBuYW1lLCBzdGQ6OnNoYXJlZF9wdHI8QzJDb21wb25lbnQ+ICpjb25zdCBjb21wb25lbnQpIHsKKyAgICAvLyBUaGlzIG1ldGhvZCBTSEFMTCByZXR1cm4gd2l0aGluIDEwMG1zLgorICAgIGNvbXBvbmVudC0+cmVzZXQoKTsKKyAgICBDb21wb25lbnRMb2FkZXIgKmxvYWRlcjsKKyAgICBjMl9zdGF0dXNfdCByZXMgPSBmaW5kQ29tcG9uZW50KG5hbWUsICZsb2FkZXIpOworICAgIGlmIChyZXMgPT0gQzJfT0spIHsKKyAgICAgICAgc3RkOjpzaGFyZWRfcHRyPENvbXBvbmVudE1vZHVsZT4gbW9kdWxlOworICAgICAgICByZXMgPSBsb2FkZXItPmZldGNoTW9kdWxlKCZtb2R1bGUpOworICAgICAgICBpZiAocmVzID09IEMyX09LKSB7CisgICAgICAgICAgICAvLyBUT0RPOiBnZXQgYSB1bmlxdWUgbm9kZSBJRAorICAgICAgICAgICAgcmVzID0gbW9kdWxlLT5jcmVhdGVDb21wb25lbnQoMCwgY29tcG9uZW50KTsKKyAgICAgICAgfQorICAgIH0KKyAgICByZXR1cm4gcmVzOworfQorCitjMl9zdGF0dXNfdCBDMlBsYXRmb3JtQ29tcG9uZW50U3RvcmU6OmNyZWF0ZUludGVyZmFjZSgKKyAgICAgICAgQzJTdHJpbmcgbmFtZSwgc3RkOjpzaGFyZWRfcHRyPEMyQ29tcG9uZW50SW50ZXJmYWNlPiAqY29uc3QgaW50ZXJmYWNlKSB7CisgICAgLy8gVGhpcyBtZXRob2QgU0hBTEwgcmV0dXJuIHdpdGhpbiAxMDBtcy4KKyAgICBpbnRlcmZhY2UtPnJlc2V0KCk7CisgICAgQ29tcG9uZW50TG9hZGVyICpsb2FkZXI7CisgICAgYzJfc3RhdHVzX3QgcmVzID0gZmluZENvbXBvbmVudChuYW1lLCAmbG9hZGVyKTsKKyAgICBpZiAocmVzID09IEMyX09LKSB7CisgICAgICAgIHN0ZDo6c2hhcmVkX3B0cjxDb21wb25lbnRNb2R1bGU+IG1vZHVsZTsKKyAgICAgICAgcmVzID0gbG9hZGVyLT5mZXRjaE1vZHVsZSgmbW9kdWxlKTsKKyAgICAgICAgaWYgKHJlcyA9PSBDMl9PSykgeworICAgICAgICAgICAgLy8gVE9ETzogZ2V0IGEgdW5pcXVlIG5vZGUgSUQKKyAgICAgICAgICAgIHJlcyA9IG1vZHVsZS0+Y3JlYXRlSW50ZXJmYWNlKDAsIGludGVyZmFjZSk7CisgICAgICAgIH0KKyAgICB9CisgICAgcmV0dXJuIHJlczsKK30KKworYzJfc3RhdHVzX3QgQzJQbGF0Zm9ybUNvbXBvbmVudFN0b3JlOjpxdWVyeVN1cHBvcnRlZFBhcmFtc19uYigKKyAgICAgICAgc3RkOjp2ZWN0b3I8c3RkOjpzaGFyZWRfcHRyPEMyUGFyYW1EZXNjcmlwdG9yPj4gKmNvbnN0IHBhcmFtcykgY29uc3QgeworICAgIHJldHVybiBtSW50ZXJmYWNlLnF1ZXJ5U3VwcG9ydGVkUGFyYW1zKHBhcmFtcyk7Cit9CisKK2MyX3N0YXR1c190IEMyUGxhdGZvcm1Db21wb25lbnRTdG9yZTo6cXVlcnlTdXBwb3J0ZWRWYWx1ZXNfc20oCisgICAgICAgIHN0ZDo6dmVjdG9yPEMyRmllbGRTdXBwb3J0ZWRWYWx1ZXNRdWVyeT4gJmZpZWxkcykgY29uc3QgeworICAgIHJldHVybiBtSW50ZXJmYWNlLnF1ZXJ5U3VwcG9ydGVkVmFsdWVzKGZpZWxkcywgQzJfTUFZX0JMT0NLKTsKK30KKworQzJTdHJpbmcgQzJQbGF0Zm9ybUNvbXBvbmVudFN0b3JlOjpnZXROYW1lKCkgY29uc3QgeworICAgIHJldHVybiAiYW5kcm9pZC5jb21wb25lbnRTdG9yZS5wbGF0Zm9ybSI7Cit9CisKK3N0ZDo6c2hhcmVkX3B0cjxDMlBhcmFtUmVmbGVjdG9yPiBDMlBsYXRmb3JtQ29tcG9uZW50U3RvcmU6OmdldFBhcmFtUmVmbGVjdG9yKCkgY29uc3QgeworICAgIHJldHVybiBtUmVmbGVjdG9yOworfQorCitzdGQ6OnNoYXJlZF9wdHI8QzJDb21wb25lbnRTdG9yZT4gR2V0Q29kZWMyUGxhdGZvcm1Db21wb25lbnRTdG9yZSgpIHsKKyAgICBzdGF0aWMgc3RkOjptdXRleCBtdXRleDsKKyAgICBzdGF0aWMgc3RkOjp3ZWFrX3B0cjxDMkNvbXBvbmVudFN0b3JlPiBwbGF0Zm9ybVN0b3JlOworICAgIHN0ZDo6bG9ja19ndWFyZDxzdGQ6Om11dGV4PiBsb2NrKG11dGV4KTsKKyAgICBzdGQ6OnNoYXJlZF9wdHI8QzJDb21wb25lbnRTdG9yZT4gc3RvcmUgPSBwbGF0Zm9ybVN0b3JlLmxvY2soKTsKKyAgICBpZiAoc3RvcmUgPT0gbnVsbHB0cikgeworICAgICAgICBzdG9yZSA9IHN0ZDo6bWFrZV9zaGFyZWQ8QzJQbGF0Zm9ybUNvbXBvbmVudFN0b3JlPigpOworICAgICAgICBwbGF0Zm9ybVN0b3JlID0gc3RvcmU7CisgICAgfQorICAgIHJldHVybiBzdG9yZTsKK30KKworfSAvLyBuYW1lc3BhY2UgYW5kcm9pZApkaWZmIC0tZ2l0IGEvbWVkaWEvY29kZWMyL3ZuZGsvaW5jbHVkZS9DMkFsbG9jYXRvckdyYWxsb2MuaCBiL21lZGlhL2NvZGVjMi92bmRrL2luY2x1ZGUvQzJBbGxvY2F0b3JHcmFsbG9jLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDVkOTg5ZQotLS0gL2Rldi9udWxsCisrKyBiL21lZGlhL2NvZGVjMi92bmRrL2luY2x1ZGUvQzJBbGxvY2F0b3JHcmFsbG9jLmgKQEAgLTAsMCArMSw4NiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNiBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCisKKyNpZm5kZWYgU1RBR0VGUklHSFRfQ09ERUMyX0FMTE9DQVRPUl9HUkFMTE9DX0hfCisjZGVmaW5lIFNUQUdFRlJJR0hUX0NPREVDMl9BTExPQ0FUT1JfR1JBTExPQ19IXworCisjaW5jbHVkZSA8ZnVuY3Rpb25hbD4KKworI2luY2x1ZGUgPEMyQnVmZmVyLmg+CisKK25hbWVzcGFjZSBhbmRyb2lkIHsKKworLyoqCisgKiBVbndyYXAgdGhlIG5hdGl2ZSBoYW5kbGUgZnJvbSBhIENvZGVjMiBoYW5kbGUgYWxsb2NhdGVkIGJ5IEMyQWxsb2NhdG9yR3JhbGxvYy4KKyAqCisgKiBAcGFyYW0gaGFuZGxlIGEgaGFuZGxlIGFsbG9jYXRlZCBieSBDMkFsbG9jYXRvckdyYWxsb2MuIFRoaXMgaW5jbHVkZXMgaGFuZGxlcyByZXR1cm5lZCBmb3IgYQorICogZ3JhcGhpYyBibG9jayBhbGxvY2F0aW9uIGhhbmRsZSByZXR1cm5lZC4KKyAqCisgKiBAcmV0dXJuIGEgbmV3IE5PTi1PV05JTkcgbmF0aXZlIGhhbmRsZSB0aGF0IG11c3QgYmUgZGVsZXRlZCB1c2luZyBuYXRpdmVfaGFuZGxlX2RlbGV0ZS4KKyAqLworbmF0aXZlX2hhbmRsZV90ICpVbndyYXBOYXRpdmVDb2RlYzJHcmFsbG9jSGFuZGxlKGNvbnN0IEMySGFuZGxlICpjb25zdCBoYW5kbGUpOworCisvKioKKyAqIFdyYXAgdGhlIGdyYWxsb2MgaGFuZGxlIGFuZCBtZXRhZGF0YSBpbnRvIENvZGVjMiBoYW5kbGUgcmVjb2duaXplZCBieQorICogQzJBbGxvY2F0b3JHcmFsbG9jLgorICoKKyAqIEByZXR1cm4gYSBuZXcgTk9OLU9XTklORyBDMkhhbmRsZSB0aGF0IG11c3QgYmUgZGVsZXRlZCB1c2luZyBuYXRpdmVfaGFuZGxlX2RlbGV0ZS4KKyAqLworQzJIYW5kbGUgKldyYXBOYXRpdmVDb2RlYzJHcmFsbG9jSGFuZGxlKAorICAgICAgICBjb25zdCBuYXRpdmVfaGFuZGxlX3QgKmNvbnN0IGhhbmRsZSwKKyAgICAgICAgdWludDMyX3Qgd2lkdGgsIHVpbnQzMl90IGhlaWdodCwgdWludDMyX3QgZm9ybWF0LCB1aW50NjRfdCB1c2FnZSwgdWludDMyX3Qgc3RyaWRlLAorICAgICAgICB1aW50MzJfdCBnZW5lcmF0aW9uID0gMCwgdWludDY0X3QgaWdicF9pZCA9IDAsIHVpbnQzMl90IGlnYnBfc2xvdCA9IDApOworCisvKioKKyAqIFx0b2RvIEdldCB0aGlzIGZyb20gdGhlIGJ1ZmZlcgorICovCit2b2lkIF9VbndyYXBOYXRpdmVDb2RlYzJHcmFsbG9jTWV0YWRhdGEoCisgICAgICAgIGNvbnN0IEMySGFuZGxlICpjb25zdCBoYW5kbGUsCisgICAgICAgIHVpbnQzMl90ICp3aWR0aCwgdWludDMyX3QgKmhlaWdodCwgdWludDMyX3QgKmZvcm1hdCwgdWludDY0X3QgKnVzYWdlLCB1aW50MzJfdCAqc3RyaWRlLAorICAgICAgICB1aW50MzJfdCAqZ2VuZXJhdGlvbiwgdWludDY0X3QgKmlnYnBfaWQsIHVpbnQzMl90ICppZ2JwX3Nsb3QpOworCitjbGFzcyBDMkFsbG9jYXRvckdyYWxsb2MgOiBwdWJsaWMgQzJBbGxvY2F0b3IgeworcHVibGljOgorICAgIHZpcnR1YWwgaWRfdCBnZXRJZCgpIGNvbnN0IG92ZXJyaWRlOworCisgICAgdmlydHVhbCBDMlN0cmluZyBnZXROYW1lKCkgY29uc3Qgb3ZlcnJpZGU7CisKKyAgICB2aXJ0dWFsIHN0ZDo6c2hhcmVkX3B0cjxjb25zdCBUcmFpdHM+IGdldFRyYWl0cygpIGNvbnN0IG92ZXJyaWRlOworCisgICAgdmlydHVhbCBjMl9zdGF0dXNfdCBuZXdHcmFwaGljQWxsb2NhdGlvbigKKyAgICAgICAgICAgIHVpbnQzMl90IHdpZHRoLCB1aW50MzJfdCBoZWlnaHQsIHVpbnQzMl90IGZvcm1hdCwgQzJNZW1vcnlVc2FnZSB1c2FnZSwKKyAgICAgICAgICAgIHN0ZDo6c2hhcmVkX3B0cjxDMkdyYXBoaWNBbGxvY2F0aW9uPiAqYWxsb2NhdGlvbikgb3ZlcnJpZGU7CisKKyAgICB2aXJ0dWFsIGMyX3N0YXR1c190IHByaW9yR3JhcGhpY0FsbG9jYXRpb24oCisgICAgICAgICAgICBjb25zdCBDMkhhbmRsZSAqaGFuZGxlLAorICAgICAgICAgICAgc3RkOjpzaGFyZWRfcHRyPEMyR3JhcGhpY0FsbG9jYXRpb24+ICphbGxvY2F0aW9uKSBvdmVycmlkZTsKKworICAgIEMyQWxsb2NhdG9yR3JhbGxvYyhpZF90IGlkLCBib29sIGJ1ZmZlclF1ZXVlID0gZmFsc2UpOworCisgICAgYzJfc3RhdHVzX3Qgc3RhdHVzKCkgY29uc3Q7CisKKyAgICB2aXJ0dWFsIH5DMkFsbG9jYXRvckdyYWxsb2MoKSBvdmVycmlkZTsKKworICAgIHN0YXRpYyBib29sIGlzVmFsaWQoY29uc3QgQzJIYW5kbGUqIGNvbnN0IG8pOworCitwcml2YXRlOgorICAgIGNsYXNzIEltcGw7CisgICAgSW1wbCAqbUltcGw7Cit9OworCit9IC8vIG5hbWVzcGFjZSBhbmRyb2lkCisKKyNlbmRpZiAvLyBTVEFHRUZSSUdIVF9DT0RFQzJfQUxMT0NBVE9SX0dSQUxMT0NfSF8KZGlmZiAtLWdpdCBhL21lZGlhL2NvZGVjMi92bmRrL2luY2x1ZGUvQzJBbGxvY2F0b3JJb24uaCBiL21lZGlhL2NvZGVjMi92bmRrL2luY2x1ZGUvQzJBbGxvY2F0b3JJb24uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xYjIwNTFmCi0tLSAvZGV2L251bGwKKysrIGIvbWVkaWEvY29kZWMyL3ZuZGsvaW5jbHVkZS9DMkFsbG9jYXRvcklvbi5oCkBAIC0wLDAgKzEsMTAzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE2IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KKworI2lmbmRlZiBTVEFHRUZSSUdIVF9DT0RFQzJfQUxMT0NBVE9SX0lPTl9IXworI2RlZmluZSBTVEFHRUZSSUdIVF9DT0RFQzJfQUxMT0NBVE9SX0lPTl9IXworCisjaW5jbHVkZSA8ZnVuY3Rpb25hbD4KKyNpbmNsdWRlIDxsaXN0PgorI2luY2x1ZGUgPG11dGV4PgorI2luY2x1ZGUgPHR1cGxlPgorI2luY2x1ZGUgPHVub3JkZXJlZF9tYXA+CisKKyNpbmNsdWRlIDxDMkJ1ZmZlci5oPgorCituYW1lc3BhY2UgYW5kcm9pZCB7CisKK2NsYXNzIEMyQWxsb2NhdG9ySW9uIDogcHVibGljIEMyQWxsb2NhdG9yIHsKK3B1YmxpYzoKKyAgICAvLyBVc2FnZSBtYXBwZXIgZnVuY3Rpb24gdXNlZCBieSB0aGUgYWxsb2NhdG9yCisgICAgLy8gICAodXNhZ2UsIGNhcGFjaXR5KSA9PiAoYWxpZ24sIGhlYXBNYXNrLCBmbGFncykKKyAgICAvLworICAgIC8vIGNhcGFjaXR5IGlzIGFsaWduZWQgdG8gdGhlIGRlZmF1bHQgYmxvY2stc2l6ZSAoZGVmYXVsdHMgdG8gcGFnZSBzaXplKSB0byByZWR1Y2UgY2FjaGluZworICAgIC8vIG92ZXJoZWFkCisgICAgdHlwZWRlZiBzdGQ6OmZ1bmN0aW9uPGMyX3N0YXR1c190KEMyTWVtb3J5VXNhZ2UsIHNpemVfdCwKKyAgICAgICAgICAgICAgICAgICAgICAvKiA9PiAqLyBzaXplX3QqLCB1bnNpZ25lZCosIHVuc2lnbmVkKik+IFVzYWdlTWFwcGVyRm47CisKKyAgICB2aXJ0dWFsIGlkX3QgZ2V0SWQoKSBjb25zdCBvdmVycmlkZTsKKworICAgIHZpcnR1YWwgQzJTdHJpbmcgZ2V0TmFtZSgpIGNvbnN0IG92ZXJyaWRlOworCisgICAgdmlydHVhbCBzdGQ6OnNoYXJlZF9wdHI8Y29uc3QgVHJhaXRzPiBnZXRUcmFpdHMoKSBjb25zdCBvdmVycmlkZTsKKworICAgIHZpcnR1YWwgYzJfc3RhdHVzX3QgbmV3TGluZWFyQWxsb2NhdGlvbigKKyAgICAgICAgICAgIHVpbnQzMl90IGNhcGFjaXR5LCBDMk1lbW9yeVVzYWdlIHVzYWdlLAorICAgICAgICAgICAgc3RkOjpzaGFyZWRfcHRyPEMyTGluZWFyQWxsb2NhdGlvbj4gKmFsbG9jYXRpb24pIG92ZXJyaWRlOworCisgICAgdmlydHVhbCBjMl9zdGF0dXNfdCBwcmlvckxpbmVhckFsbG9jYXRpb24oCisgICAgICAgICAgICBjb25zdCBDMkhhbmRsZSAqaGFuZGxlLAorICAgICAgICAgICAgc3RkOjpzaGFyZWRfcHRyPEMyTGluZWFyQWxsb2NhdGlvbj4gKmFsbG9jYXRpb24pIG92ZXJyaWRlOworCisgICAgQzJBbGxvY2F0b3JJb24oaWRfdCBpZCk7CisKKyAgICB2aXJ0dWFsIGMyX3N0YXR1c190IHN0YXR1cygpIGNvbnN0IHsgcmV0dXJuIG1Jbml0OyB9CisKKyAgICB2aXJ0dWFsIH5DMkFsbG9jYXRvcklvbigpIG92ZXJyaWRlOworCisgICAgc3RhdGljIGJvb2wgaXNWYWxpZChjb25zdCBDMkhhbmRsZSogY29uc3Qgbyk7CisKKyAgICAvKioKKyAgICAgKiBVcGRhdGVzIHRoZSB1c2FnZSBtYXBwZXIgZm9yIHN1YnNlcXVlbnQgbmV3IGFsbG9jYXRpb25zLCBhcyB3ZWxsIGFzIHRoZSBzdXBwb3J0ZWQKKyAgICAgKiBtaW5pbXVtIGFuZCBtYXhpbXVtIHVzYWdlIG1hc2tzIGFuZCBkZWZhdWx0IGJsb2NrLXNpemUgdG8gdXNlIGZvciB0aGUgbWFwcGVyLgorICAgICAqCisgICAgICogXHBhcmFtIG1hcHBlciB0aGlzIG1ldGhvZCBpcyBjYWxsZWQgdG8gbWFwIENvZGVjIDIuMCBidWZmZXIgdXNhZ2UgdG8gaW9uIGZsYWdzCisgICAgICogICAgICAgIHJlcXVpcmVkIGJ5IHRoZSBpb24gZGV2aWNlCisgICAgICogXHBhcmFtIG1pblVzYWdlIG1pbmltdW0gYnVmZmVyIHVzYWdlIHJlcXVpcmVkIGZvciBzdXBwb3J0ZWQgYWxsb2NhdGlvbnMgKGRlZmF1bHRzIHRvIDApCisgICAgICogXHBhcmFtIG1heFVzYWdlIG1heGltdW0gYnVmZmVyIHVzYWdlIHN1cHBvcnRlZCBieSB0aGUgaW9uIGFsbG9jYXRvciAoZGVmYXVsdHMgdG8gU1dfUkVBRAorICAgICAqICAgICAgICB8IFNXX1dSSVRFKQorICAgICAqIFxwYXJhbSBibG9ja1NpemUgYWxpZ25tZW50IHVzZWQgcHJpb3IgdG8gY2FsbGluZyB8bWFwcGVyfCBmb3IgdGhlIGJ1ZmZlciBjYXBhY2l0eS4KKyAgICAgKiAgICAgICAgVGhpcyBhbHNvIGhlbHBzIHJlZHVjZSB0aGUgc2l6ZSBvZiBjYWNoZSByZXF1aXJlZCBmb3IgY2FjaGluZyBtYXBwZXIgcmVzdWx0cy4KKyAgICAgKiAgICAgICAgKGRlZmF1bHRzIHRvIHRoZSBwYWdlIHNpemUpCisgICAgICovCisgICAgdm9pZCBzZXRVc2FnZU1hcHBlcigKKyAgICAgICAgICAgIGNvbnN0IFVzYWdlTWFwcGVyRm4gJm1hcHBlciwgdWludDY0X3QgbWluVXNhZ2UsIHVpbnQ2NF90IG1heFVzYWdlLCB1aW50NjRfdCBibG9ja1NpemUpOworCitwcml2YXRlOgorICAgIGMyX3N0YXR1c190IG1hcFVzYWdlKEMyTWVtb3J5VXNhZ2UgdXNhZ2UsIHNpemVfdCBzaXplLAorICAgICAgICAgICAgICAgICAgICAgLyogPT4gKi8gc2l6ZV90ICphbGlnbiwgdW5zaWduZWQgKmhlYXBNYXNrLCB1bnNpZ25lZCAqZmxhZ3MpOworCisgICAgYzJfc3RhdHVzX3QgbUluaXQ7CisgICAgaW50IG1Jb25GZDsKKworICAgIC8vIHRoaXMgbG9ja3MgbVRyYWl0cywgbUJsb2NrU2l6ZSwgbVVzYWdlTWFwcGVyLCBtVXNhZ2VNYXBwZXJMcnUgYW5kIG1Vc2FnZU1hcHBlckNhY2hlCisgICAgbXV0YWJsZSBzdGQ6Om11dGV4IG1Vc2FnZU1hcHBlckxvY2s7CisgICAgc3RkOjpzaGFyZWRfcHRyPGNvbnN0IFRyYWl0cz4gbVRyYWl0czsKKyAgICBzaXplX3QgbUJsb2NrU2l6ZTsKKyAgICBVc2FnZU1hcHBlckZuIG1Vc2FnZU1hcHBlcjsKKyAgICB0eXBlZGVmIHN0ZDo6cGFpcjx1aW50NjRfdCwgc2l6ZV90PiBNYXBwZXJLZXk7CisgICAgc3RydWN0IE1hcHBlcktleUhhc2ggeworICAgICAgICBzdGQ6OnNpemVfdCBvcGVyYXRvcigpKGNvbnN0IE1hcHBlcktleSAmKSBjb25zdDsKKyAgICB9OworICAgIHR5cGVkZWYgc3RkOjp0dXBsZTxzaXplX3QsIHVuc2lnbmVkLCB1bnNpZ25lZCwgYzJfc3RhdHVzX3Q+IE1hcHBlclZhbHVlOworICAgIHR5cGVkZWYgc3RkOjpwYWlyPE1hcHBlcktleSwgTWFwcGVyVmFsdWU+IE1hcHBlcktleVZhbHVlOworICAgIHR5cGVkZWYgc3RkOjpsaXN0PE1hcHBlcktleVZhbHVlPjo6aXRlcmF0b3IgTWFwcGVyS2V5VmFsdWVQb2ludGVyOworICAgIHN0ZDo6bGlzdDxNYXBwZXJLZXlWYWx1ZT4gbVVzYWdlTWFwcGVyTHJ1OworICAgIHN0ZDo6dW5vcmRlcmVkX21hcDxNYXBwZXJLZXksIE1hcHBlcktleVZhbHVlUG9pbnRlciwgTWFwcGVyS2V5SGFzaD4gbVVzYWdlTWFwcGVyQ2FjaGU7Cit9OworCit9IC8vIG5hbWVzcGFjZSBhbmRyb2lkCisKKyNlbmRpZiAvLyBTVEFHRUZSSUdIVF9DT0RFQzJfQUxMT0NBVE9SX0lPTl9IXwpkaWZmIC0tZ2l0IGEvbWVkaWEvY29kZWMyL3ZuZGsvaW5jbHVkZS9DMkJxQnVmZmVyUHJpdi5oIGIvbWVkaWEvY29kZWMyL3ZuZGsvaW5jbHVkZS9DMkJxQnVmZmVyUHJpdi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkyNzFhNzEKLS0tIC9kZXYvbnVsbAorKysgYi9tZWRpYS9jb2RlYzIvdm5kay9pbmNsdWRlL0MyQnFCdWZmZXJQcml2LmgKQEAgLTAsMCArMSw3NyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxOCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCisKKyNpZm5kZWYgU1RBR0VGUklHSFRfQ09ERUMyX0JRX0JVRkZFUl9QUklWX0hfCisjZGVmaW5lIFNUQUdFRlJJR0hUX0NPREVDMl9CUV9CVUZGRVJfUFJJVl9IXworCisjaW5jbHVkZSA8ZnVuY3Rpb25hbD4KKworI2luY2x1ZGUgPEMyQnVmZmVyLmg+CisjaW5jbHVkZSA8bWVkaWEvc3RhZ2VmcmlnaHQvYnFoZWxwZXIvV0dyYXBoaWNCdWZmZXJQcm9kdWNlci5oPgorCitjbGFzcyBDMkJ1ZmZlclF1ZXVlQmxvY2tQb29sIDogcHVibGljIEMyQmxvY2tQb29sIHsKK3B1YmxpYzoKKyAgICBDMkJ1ZmZlclF1ZXVlQmxvY2tQb29sKGNvbnN0IHN0ZDo6c2hhcmVkX3B0cjxDMkFsbG9jYXRvcj4gJmFsbG9jYXRvciwgY29uc3QgbG9jYWxfaWRfdCBsb2NhbElkKTsKKworICAgIHZpcnR1YWwgfkMyQnVmZmVyUXVldWVCbG9ja1Bvb2woKSBvdmVycmlkZTsKKworICAgIHZpcnR1YWwgQzJBbGxvY2F0b3I6OmlkX3QgZ2V0QWxsb2NhdG9ySWQoKSBjb25zdCBvdmVycmlkZSB7CisgICAgICAgIHJldHVybiBtQWxsb2NhdG9yLT5nZXRJZCgpOworICAgIH07CisKKyAgICB2aXJ0dWFsIGxvY2FsX2lkX3QgZ2V0TG9jYWxJZCgpIGNvbnN0IG92ZXJyaWRlIHsKKyAgICAgICAgcmV0dXJuIG1Mb2NhbElkOworICAgIH07CisKKyAgICB2aXJ0dWFsIGMyX3N0YXR1c190IGZldGNoR3JhcGhpY0Jsb2NrKAorICAgICAgICAgICAgdWludDMyX3Qgd2lkdGgsCisgICAgICAgICAgICB1aW50MzJfdCBoZWlnaHQsCisgICAgICAgICAgICB1aW50MzJfdCBmb3JtYXQsCisgICAgICAgICAgICBDMk1lbW9yeVVzYWdlIHVzYWdlLAorICAgICAgICAgICAgc3RkOjpzaGFyZWRfcHRyPEMyR3JhcGhpY0Jsb2NrPiAqYmxvY2sgLyogbm9ubnVsbCAqLykgb3ZlcnJpZGU7CisKKyAgICB0eXBlZGVmIHN0ZDo6ZnVuY3Rpb248dm9pZCh1aW50NjRfdCBwcm9kdWNlciwgaW50MzJfdCBzbG90LCBpbnQ2NF90IG5zZWNzKT4gT25SZW5kZXJDYWxsYmFjazsKKworICAgIC8qKgorICAgICAqIFNldHMgcmVuZGVyIGNhbGxiYWNrLgorICAgICAqCisgICAgICogXHBhcmFtIHJlbmRlckNhbGxiYWsgY2FsbGJhY2sgdG8gY2FsbCBmb3IgYWxsIGRlcXVldWUgYnVmZmVyLgorICAgICAqLworICAgIHZpcnR1YWwgdm9pZCBzZXRSZW5kZXJDYWxsYmFjayhjb25zdCBPblJlbmRlckNhbGxiYWNrICZyZW5kZXJDYWxsYmFjayA9IE9uUmVuZGVyQ2FsbGJhY2soKSk7CisKKyAgICAvKioKKyAgICAgKiBDb25maWd1cmVzIGFuIElHQlAgaW4gb3JkZXIgdG8gY3JlYXRlIGJsb2Nrcy4gQSBuZXdseSBjcmVhdGVkIGJsb2NrIGlzCisgICAgICogZGVxdWV1ZWQgZnJvbSB0aGUgY29uZmlndXJlZCBJR0JQLiBVbmlxdWUgSWQgb2YgSUdCUCBhbmQgdGhlIHNsb3QgbnVtYmVyIG9mCisgICAgICogYmxvY2tzIGFyZSBwYXNzZWQgdmlhIG5hdGl2ZV9oYW5kbGUuIE1hbmFnaW5nIElHQlAgaXMgcmVzcG9uc2liaWxpdHkgb2YgY2FsbGVyLgorICAgICAqIFdoZW4gSUdCUCBpcyBub3QgY29uZmlndXJlZCwgYmxvY2sgd2lsbCBiZSBjcmVhdGVkIHZpYSBhbGxvY2F0b3IuCisgICAgICogU2luY2UgemVybyBpcyBub3QgdXNlZCBmb3IgVW5pcXVlIElkIG9mIElHQlAsIGlmIElHQlAgaXMgbm90IGNvbmZpZ3VyZWQgb3IgcHJvZHVjZXIKKyAgICAgKiBpcyBjb25maWd1cmVkIGFzIG51bGxwdHIsIHVuaXF1ZSBpZCB3aGljaCBpcyBidW5kbGVkIGluIG5hdGl2ZV9oYW5kbGUgaXMgemVyby4KKyAgICAgKgorICAgICAqIFxwYXJhbSBwcm9kdWNlciAgICAgIHRoZSBJR0JQLCB3aGljaCB3aWxsIGJlIHVzZWQgdG8gZmV0Y2ggYmxvY2tzCisgICAgICovCisgICAgdmlydHVhbCB2b2lkIGNvbmZpZ3VyZVByb2R1Y2VyKGNvbnN0IGFuZHJvaWQ6OnNwPGFuZHJvaWQ6OkhHcmFwaGljQnVmZmVyUHJvZHVjZXI+ICZwcm9kdWNlcik7CisKK3ByaXZhdGU6CisgICAgY29uc3Qgc3RkOjpzaGFyZWRfcHRyPEMyQWxsb2NhdG9yPiBtQWxsb2NhdG9yOworICAgIGNvbnN0IGxvY2FsX2lkX3QgbUxvY2FsSWQ7CisKKyAgICBjbGFzcyBJbXBsOworICAgIHN0ZDo6c2hhcmVkX3B0cjxJbXBsPiBtSW1wbDsKKworICAgIGZyaWVuZCBzdHJ1Y3QgQzJCdWZmZXJRdWV1ZUJsb2NrUG9vbERhdGE7Cit9OworCisjZW5kaWYgLy8gU1RBR0VGUklHSFRfQ09ERUMyX0JVRkZFUl9QUklWX0hfCmRpZmYgLS1naXQgYS9tZWRpYS9jb2RlYzIvdm5kay9pbmNsdWRlL0MyQnVmZmVyUHJpdi5oIGIvbWVkaWEvY29kZWMyL3ZuZGsvaW5jbHVkZS9DMkJ1ZmZlclByaXYuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kMGI5MTUyCi0tLSAvZGV2L251bGwKKysrIGIvbWVkaWEvY29kZWMyL3ZuZGsvaW5jbHVkZS9DMkJ1ZmZlclByaXYuaApAQCAtMCwwICsxLDEyNSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNiBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCisKKyNpZm5kZWYgU1RBR0VGUklHSFRfQ09ERUMyX0JVRkZFUl9QUklWX0hfCisjZGVmaW5lIFNUQUdFRlJJR0hUX0NPREVDMl9CVUZGRVJfUFJJVl9IXworCisjaW5jbHVkZSA8ZnVuY3Rpb25hbD4KKworI2luY2x1ZGUgPEMyQnVmZmVyLmg+CisjaW5jbHVkZSA8YW5kcm9pZC9oYXJkd2FyZS9tZWRpYS9idWZmZXJwb29sLzEuMC9JQWNjZXNzb3IuaD4KKworY2xhc3MgQzJCYXNpY0xpbmVhckJsb2NrUG9vbCA6IHB1YmxpYyBDMkJsb2NrUG9vbCB7CitwdWJsaWM6CisgICAgZXhwbGljaXQgQzJCYXNpY0xpbmVhckJsb2NrUG9vbChjb25zdCBzdGQ6OnNoYXJlZF9wdHI8QzJBbGxvY2F0b3I+ICZhbGxvY2F0b3IpOworCisgICAgdmlydHVhbCB+QzJCYXNpY0xpbmVhckJsb2NrUG9vbCgpIG92ZXJyaWRlID0gZGVmYXVsdDsKKworICAgIHZpcnR1YWwgQzJBbGxvY2F0b3I6OmlkX3QgZ2V0QWxsb2NhdG9ySWQoKSBjb25zdCBvdmVycmlkZSB7CisgICAgICAgIHJldHVybiBtQWxsb2NhdG9yLT5nZXRJZCgpOworICAgIH0KKworICAgIHZpcnR1YWwgbG9jYWxfaWRfdCBnZXRMb2NhbElkKCkgY29uc3Qgb3ZlcnJpZGUgeworICAgICAgICByZXR1cm4gQkFTSUNfTElORUFSOworICAgIH0KKworICAgIHZpcnR1YWwgYzJfc3RhdHVzX3QgZmV0Y2hMaW5lYXJCbG9jaygKKyAgICAgICAgICAgIHVpbnQzMl90IGNhcGFjaXR5LAorICAgICAgICAgICAgQzJNZW1vcnlVc2FnZSB1c2FnZSwKKyAgICAgICAgICAgIHN0ZDo6c2hhcmVkX3B0cjxDMkxpbmVhckJsb2NrPiAqYmxvY2sgLyogbm9ubnVsbCAqLykgb3ZlcnJpZGU7CisKKyAgICAvLyBUT0RPOiBmZXRjaENpcmN1bGFyQmxvY2sKKworcHJpdmF0ZToKKyAgICBjb25zdCBzdGQ6OnNoYXJlZF9wdHI8QzJBbGxvY2F0b3I+IG1BbGxvY2F0b3I7Cit9OworCitjbGFzcyBDMkJhc2ljR3JhcGhpY0Jsb2NrUG9vbCA6IHB1YmxpYyBDMkJsb2NrUG9vbCB7CitwdWJsaWM6CisgICAgZXhwbGljaXQgQzJCYXNpY0dyYXBoaWNCbG9ja1Bvb2woY29uc3Qgc3RkOjpzaGFyZWRfcHRyPEMyQWxsb2NhdG9yPiAmYWxsb2NhdG9yKTsKKworICAgIHZpcnR1YWwgfkMyQmFzaWNHcmFwaGljQmxvY2tQb29sKCkgb3ZlcnJpZGUgPSBkZWZhdWx0OworCisgICAgdmlydHVhbCBDMkFsbG9jYXRvcjo6aWRfdCBnZXRBbGxvY2F0b3JJZCgpIGNvbnN0IG92ZXJyaWRlIHsKKyAgICAgICAgcmV0dXJuIG1BbGxvY2F0b3ItPmdldElkKCk7CisgICAgfQorCisgICAgdmlydHVhbCBsb2NhbF9pZF90IGdldExvY2FsSWQoKSBjb25zdCBvdmVycmlkZSB7CisgICAgICAgIHJldHVybiBCQVNJQ19HUkFQSElDOworICAgIH0KKworICAgIHZpcnR1YWwgYzJfc3RhdHVzX3QgZmV0Y2hHcmFwaGljQmxvY2soCisgICAgICAgICAgICB1aW50MzJfdCB3aWR0aCwKKyAgICAgICAgICAgIHVpbnQzMl90IGhlaWdodCwKKyAgICAgICAgICAgIHVpbnQzMl90IGZvcm1hdCwKKyAgICAgICAgICAgIEMyTWVtb3J5VXNhZ2UgdXNhZ2UsCisgICAgICAgICAgICBzdGQ6OnNoYXJlZF9wdHI8QzJHcmFwaGljQmxvY2s+ICpibG9jayAvKiBub25udWxsICovKSBvdmVycmlkZTsKKworcHJpdmF0ZToKKyAgICBjb25zdCBzdGQ6OnNoYXJlZF9wdHI8QzJBbGxvY2F0b3I+IG1BbGxvY2F0b3I7Cit9OworCitjbGFzcyBDMlBvb2xlZEJsb2NrUG9vbCA6IHB1YmxpYyBDMkJsb2NrUG9vbCB7CitwdWJsaWM6CisgICAgQzJQb29sZWRCbG9ja1Bvb2woY29uc3Qgc3RkOjpzaGFyZWRfcHRyPEMyQWxsb2NhdG9yPiAmYWxsb2NhdG9yLCBjb25zdCBsb2NhbF9pZF90IGxvY2FsSWQpOworCisgICAgdmlydHVhbCB+QzJQb29sZWRCbG9ja1Bvb2woKSBvdmVycmlkZTsKKworICAgIHZpcnR1YWwgQzJBbGxvY2F0b3I6OmlkX3QgZ2V0QWxsb2NhdG9ySWQoKSBjb25zdCBvdmVycmlkZSB7CisgICAgICAgIHJldHVybiBtQWxsb2NhdG9yLT5nZXRJZCgpOworICAgIH0KKworICAgIHZpcnR1YWwgbG9jYWxfaWRfdCBnZXRMb2NhbElkKCkgY29uc3Qgb3ZlcnJpZGUgeworICAgICAgICByZXR1cm4gbUxvY2FsSWQ7CisgICAgfQorCisgICAgdmlydHVhbCBjMl9zdGF0dXNfdCBmZXRjaExpbmVhckJsb2NrKAorICAgICAgICAgICAgdWludDMyX3QgY2FwYWNpdHksCisgICAgICAgICAgICBDMk1lbW9yeVVzYWdlIHVzYWdlLAorICAgICAgICAgICAgc3RkOjpzaGFyZWRfcHRyPEMyTGluZWFyQmxvY2s+ICpibG9jayAvKiBub25udWxsICovKSBvdmVycmlkZTsKKworICAgIHZpcnR1YWwgYzJfc3RhdHVzX3QgZmV0Y2hHcmFwaGljQmxvY2soCisgICAgICAgICAgICB1aW50MzJfdCB3aWR0aCwKKyAgICAgICAgICAgIHVpbnQzMl90IGhlaWdodCwKKyAgICAgICAgICAgIHVpbnQzMl90IGZvcm1hdCwKKyAgICAgICAgICAgIEMyTWVtb3J5VXNhZ2UgdXNhZ2UsCisgICAgICAgICAgICBzdGQ6OnNoYXJlZF9wdHI8QzJHcmFwaGljQmxvY2s+ICpibG9jaykgb3ZlcnJpZGU7CisKKyAgICAvKioKKyAgICAgKiBSZXRyaWV2ZXMgdGhlIGNvbm5lY3Rpb24gSWQgZm9yIHVuZGVybHlpbmcgYnVmZmVycG9vbAorICAgICAqLworICAgIGludDY0X3QgZ2V0Q29ubmVjdGlvbklkKCk7CisKKyAgICAvKioKKyAgICAgKiBSZXRyaWV2ZXMgdGhlIGFjY2Vzc29yIHdoaWNoIGlzIHVzZWQgYnkgdW5kZXJseWluZyBidWZmZXJwb29sLiAoSXQgY2FuIGJlCisgICAgICogcGFzc2VkIHRvIHJlY2VpdmluZyBwcm9jZXNzLikKKyAgICAgKgorICAgICAqIFxwYXJhbSBhY2Nlc3NvciAgICAgICAgICBJQWNjZXNzb3Igd2lsbCBiZSB3cml0dGVuIHRvIHRoaXMgb3V0IHBhcmFtZXRlci4KKyAgICAgKgorICAgICAqIFxyZXR1cm4gdHJ1ZSAgICAgICAgICAgICBJQWNlc3NvciBpcyB3cml0ZW4gc3VjY2Vzc2Z1bGx5LgorICAgICAqIFxyZXR1cm4gZmFsc2UgICAgICAgICAgICBJQWNjZXNzb3IgaXMgbm90IHdyaXR0ZW4uCisgICAgICovCisgICAgYm9vbCBnZXRBY2Nlc3NvcihhbmRyb2lkOjpzcDxhbmRyb2lkOjpoYXJkd2FyZTo6bWVkaWE6OmJ1ZmZlcnBvb2w6OlYxXzA6OklBY2Nlc3Nvcj4gKmFjY2Vzc29yKTsKKworcHJpdmF0ZToKKyAgICBjb25zdCBzdGQ6OnNoYXJlZF9wdHI8QzJBbGxvY2F0b3I+IG1BbGxvY2F0b3I7CisgICAgY29uc3QgbG9jYWxfaWRfdCBtTG9jYWxJZDsKKworICAgIGNsYXNzIEltcGw7CisgICAgc3RkOjp1bmlxdWVfcHRyPEltcGw+IG1JbXBsOworfTsKKworI2VuZGlmIC8vIFNUQUdFRlJJR0hUX0NPREVDMl9CVUZGRVJfUFJJVl9IXwpkaWZmIC0tZ2l0IGEvbWVkaWEvY29kZWMyL3ZuZGsvaW5jbHVkZS9DMkNvbXBvbmVudEZhY3RvcnkuaCBiL21lZGlhL2NvZGVjMi92bmRrL2luY2x1ZGUvQzJDb21wb25lbnRGYWN0b3J5LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjZkOGI5OAotLS0gL2Rldi9udWxsCisrKyBiL21lZGlhL2NvZGVjMi92bmRrL2luY2x1ZGUvQzJDb21wb25lbnRGYWN0b3J5LmgKQEAgLTAsMCArMSw4NyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxOCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCisKKyNpZm5kZWYgU1RBR0VGUklHSFRfQ09ERUMyX0NPTVBPTkVOVF9GQUNUT1JZX0hfCisjZGVmaW5lIFNUQUdFRlJJR0hUX0NPREVDMl9DT01QT05FTlRfRkFDVE9SWV9IXworCisjaW5jbHVkZSA8QzJDb21wb25lbnQuaD4KKworI2luY2x1ZGUgPGZ1bmN0aW9uYWw+CisjaW5jbHVkZSA8bWVtb3J5PgorCisvKioKKyAqIENvbXBvbmVudCBmYWN0b3J5IG9iamVjdCB0aGF0IGVuYWJsZXMgdG8gY3JlYXRlIGEgY29tcG9uZW50IGFuZC9vciBpbnRlcmZhY2UgZnJvbSBhIGR5bmFtaWNhbGx5CisgKiBsaW5rZWQgbGlicmFyeS4gVGhpcyBpcyBuZWVkZWQgYmVjYXVzZSB0aGUgY29tcG9uZW50L2ludGVyZmFjZXMgYXJlIG1hbmFnZWQgb2JqZWN0cywgYnV0IHdlCisgKiBjYW5ub3Qgc2FmZWx5IGNyZWF0ZSBhIG1hbmFnZWQgb2JqZWN0IGFuZCBwYXNzIGl0IGluIEMuCisgKgorICogQ29tcG9uZW50cy9pbnRlcmZhY2VzIHR5cGljYWxseSBpbmhlcml0IGZyb20gc3RkOjplbmFibGVfc2hhcmVkX2Zyb21fdGhpcywgYnV0IEMgcmVxdWlyZXMKKyAqIHBhc3Npbmcgc2ltcGxlIHBvaW50ZXIsIGFuZCBzaGFyZWRfcHRyIGNvbnN0cnVjdG9yIG5lZWRzIHRvIGtub3cgdGhlIGNsYXNzIHRvIGJlIGNvbnN0cnVjdGVkCisgKiBkZXJpdmVzIGZyb20gZW5hYmxlX3NoYXJlZF9mcm9tX3RoaXMuCisgKgorICovCitjbGFzcyBDMkNvbXBvbmVudEZhY3RvcnkgeworcHVibGljOgorICAgIHR5cGVkZWYgc3RkOjpmdW5jdGlvbjx2b2lkKDo6QzJDb21wb25lbnQqKT4gQ29tcG9uZW50RGVsZXRlcjsKKyAgICB0eXBlZGVmIHN0ZDo6ZnVuY3Rpb248dm9pZCg6OkMyQ29tcG9uZW50SW50ZXJmYWNlKik+IEludGVyZmFjZURlbGV0ZXI7CisKKyAgICAvKioKKyAgICAgKiBDcmVhdGVzIGEgY29tcG9uZW50LgorICAgICAqCisgICAgICogVGhpcyBtZXRob2QgU0hBTEwgcmV0dXJuIHdpdGhpbiAxMDBtcy4KKyAgICAgKgorICAgICAqIFxwYXJhbSBpZCAgICAgICAgY29tcG9uZW50IElEIGZvciB0aGUgY3JlYXRlZCBjb21wb25lbnQKKyAgICAgKiBccGFyYW0gY29tcG9uZW50IHNoYXJlZCBwb2ludGVyIHdoZXJlIHRoZSBjcmVhdGVkIGNvbXBvbmVudCBpcyBzdG9yZWQuIENsZWFyZWQgb24KKyAgICAgKiAgICAgICAgICAgICAgICAgIGZhaWx1cmUgYW5kIHVwZGF0ZWQgb24gc3VjY2Vzcy4KKyAgICAgKgorICAgICAqIFxyZXR2YWwgQzJfT0sgICAgICAgIHRoZSBjb21wb25lbnQgd2FzIGNyZWF0ZWQgc3VjY2Vzc2Z1bGx5CisgICAgICogXHJldHZhbCBDMl9USU1FRF9PVVQgY291bGQgbm90IGNyZWF0ZSB0aGUgY29tcG9uZW50IHdpdGhpbiB0aGUgdGltZSBsaW1pdCAodW5leHBlY3RlZCkKKyAgICAgKiBccmV0dmFsIEMyX0NPUlJVUFRFRCBzb21lIHVua25vd24gZXJyb3IgcHJldmVudGVkIHRoZSBjcmVhdGlvbiBvZiB0aGUgY29tcG9uZW50ICh1bmV4cGVjdGVkKQorICAgICAqCisgICAgICogXHJldHZhbCBDMl9OT19NRU1PUlkgbm90IGVub3VnaCBtZW1vcnkgdG8gY3JlYXRlIHRoZSBjb21wb25lbnQKKyAgICAgKi8KKyAgICB2aXJ0dWFsIGMyX3N0YXR1c190IGNyZWF0ZUNvbXBvbmVudCgKKyAgICAgICAgICAgIGMyX25vZGVfaWRfdCBpZCwgc3RkOjpzaGFyZWRfcHRyPEMyQ29tcG9uZW50PiogY29uc3QgY29tcG9uZW50LAorICAgICAgICAgICAgQ29tcG9uZW50RGVsZXRlciBkZWxldGVyID0gc3RkOjpkZWZhdWx0X2RlbGV0ZTxDMkNvbXBvbmVudD4oKSkgPSAwOworCisgICAgLyoqCisgICAgICogQ3JlYXRlcyBhIGNvbXBvbmVudCBpbnRlcmZhY2UuCisgICAgICoKKyAgICAgKiBUaGlzIG1ldGhvZCBTSEFMTCByZXR1cm4gd2l0aGluIDEwMG1zLgorICAgICAqCisgICAgICogXHBhcmFtIGlkICAgICAgICBjb21wb25lbnQgaW50ZXJmYWNlIElEIGZvciB0aGUgY3JlYXRlZCBpbnRlcmZhY2UKKyAgICAgKiBccGFyYW0gaW50ZXJmYWNlIHNoYXJlZCBwb2ludGVyIHdoZXJlIHRoZSBjcmVhdGVkIGludGVyZmFjZSBpcyBzdG9yZWQuIENsZWFyZWQgb24KKyAgICAgKiAgICAgICAgICAgICAgICAgIGZhaWx1cmUgYW5kIHVwZGF0ZWQgb24gc3VjY2Vzcy4KKyAgICAgKgorICAgICAqIFxyZXR2YWwgQzJfT0sgICAgICAgIHRoZSBjb21wb25lbnQgaW50ZXJmYWNlIHdhcyBjcmVhdGVkIHN1Y2Nlc3NmdWxseQorICAgICAqIFxyZXR2YWwgQzJfVElNRURfT1VUIGNvdWxkIG5vdCBjcmVhdGUgdGhlIGNvbXBvbmVudCBpbnRlcmZhY2Ugd2l0aGluIHRoZSB0aW1lIGxpbWl0CisgICAgICogICAgICAgICAgICAgICAgICAgICAgKHVuZXhwZWN0ZWQpCisgICAgICogXHJldHZhbCBDMl9DT1JSVVBURUQgc29tZSB1bmtub3duIGVycm9yIHByZXZlbnRlZCB0aGUgY3JlYXRpb24gb2YgdGhlIGNvbXBvbmVudCBpbnRlcmZhY2UKKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAodW5leHBlY3RlZCkKKyAgICAgKgorICAgICAqIFxyZXR2YWwgQzJfTk9fTUVNT1JZIG5vdCBlbm91Z2ggbWVtb3J5IHRvIGNyZWF0ZSB0aGUgY29tcG9uZW50IGludGVyZmFjZQorICAgICAqLworICAgIHZpcnR1YWwgYzJfc3RhdHVzX3QgY3JlYXRlSW50ZXJmYWNlKAorICAgICAgICAgICAgYzJfbm9kZV9pZF90IGlkLCBzdGQ6OnNoYXJlZF9wdHI8QzJDb21wb25lbnRJbnRlcmZhY2U+KiBjb25zdCBpbnRlcmZhY2UsCisgICAgICAgICAgICBJbnRlcmZhY2VEZWxldGVyIGRlbGV0ZXIgPSBzdGQ6OmRlZmF1bHRfZGVsZXRlPEMyQ29tcG9uZW50SW50ZXJmYWNlPigpKSA9IDA7CisKKyAgICB2aXJ0dWFsIH5DMkNvbXBvbmVudEZhY3RvcnkoKSA9IGRlZmF1bHQ7CisKKyAgICB0eXBlZGVmIDo6QzJDb21wb25lbnRGYWN0b3J5KiAoKkNyZWF0ZUNvZGVjMkZhY3RvcnlGdW5jKSh2b2lkKTsKKyAgICB0eXBlZGVmIHZvaWQgKCpEZXN0cm95Q29kZWMyRmFjdG9yeUZ1bmMpKDo6QzJDb21wb25lbnRGYWN0b3J5Kik7Cit9OworCisKKyNlbmRpZiAvLyBTVEFHRUZSSUdIVF9DT0RFQzJfQ09NUE9ORU5UX0ZBQ1RPUllfSF8KZGlmZiAtLWdpdCBhL21lZGlhL2NvZGVjMi92bmRrL2luY2x1ZGUvQzJEZWJ1Zy5oIGIvbWVkaWEvY29kZWMyL3ZuZGsvaW5jbHVkZS9DMkRlYnVnLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWYxY2RhYgotLS0gL2Rldi9udWxsCisrKyBiL21lZGlhL2NvZGVjMi92bmRrL2luY2x1ZGUvQzJEZWJ1Zy5oCkBAIC0wLDAgKzEsMjggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTggVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworCisjaWZuZGVmIEMyVVRJTFNfREVCVUdfSF8KKyNkZWZpbmUgQzJVVElMU19ERUJVR19IXworCisjaW5jbHVkZSA8dXRpbC9DMkRlYnVnLWxvZy5oPgorCisvLyBUbyBhbGxvdyBhcmJpdHJhcnkgb3JkZXJpbmcgb2YgQzJEZWJ1Zy5oIGFuZCBBUEkgaGVhZGVycyBhbmQgdG8ga2VlcCBkZWJ1ZyB1dGlsaXRpZXMgc2VwYXJhdGVseQorLy8gZnJvbSB0aGUgQVBJIGRlZmluaXRpb25zLCB3ZSBwcm92aWRlIEFQSSBoZWFkZXIgc3BlY2lmaWMgZGVidWcgaGVhZGVycy4KKyNpZmRlZiBDMlBBUkFNX0hfCisjaW5jbHVkZSA8dXRpbC9DMkRlYnVnLXBhcmFtLmg+CisjZW5kaWYKKworI2VuZGlmICAvLyBDMlVUSUxTX0RFQlVHX0hfCmRpZmYgLS1naXQgYS9tZWRpYS9jb2RlYzIvdm5kay9pbmNsdWRlL0MyRXJybm9VdGlscy5oIGIvbWVkaWEvY29kZWMyL3ZuZGsvaW5jbHVkZS9DMkVycm5vVXRpbHMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41Yjk5NWY2Ci0tLSAvZGV2L251bGwKKysrIGIvbWVkaWEvY29kZWMyL3ZuZGsvaW5jbHVkZS9DMkVycm5vVXRpbHMuaApAQCAtMCwwICsxLDU0IEBACisvKgorICogQ29weXJpZ2h0IDIwMTYgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworCisjaWZuZGVmIFNUQUdFRlJJR0hUX0NPREVDMl9FUlJOT19VVElMU19IXworI2RlZmluZSBTVEFHRUZSSUdIVF9DT0RFQzJfRVJSTk9fVVRJTFNfSF8KKworI2luY2x1ZGUgPGVycm5vLmg+CisjaW5jbHVkZSA8QzIuaD4KKworLy8gc3RhbmRhcmQgRVJSTk8gbWFwcGluZ3MKK3RlbXBsYXRlPGludCBOPiBjb25zdGV4cHIgYzJfc3RhdHVzX3QgX2MyX2Vycm5vMnN0YXR1c19pbXBsKCk7Cit0ZW1wbGF0ZTw+IGNvbnN0ZXhwciBjMl9zdGF0dXNfdCBfYzJfZXJybm8yc3RhdHVzX2ltcGw8MD4oKSAgICAgICB7IHJldHVybiBDMl9PSzsgfQordGVtcGxhdGU8PiBjb25zdGV4cHIgYzJfc3RhdHVzX3QgX2MyX2Vycm5vMnN0YXR1c19pbXBsPEVJTlZBTD4oKSAgeyByZXR1cm4gQzJfQkFEX1ZBTFVFOyB9Cit0ZW1wbGF0ZTw+IGNvbnN0ZXhwciBjMl9zdGF0dXNfdCBfYzJfZXJybm8yc3RhdHVzX2ltcGw8RUFDQ0VTPigpICB7IHJldHVybiBDMl9SRUZVU0VEOyB9Cit0ZW1wbGF0ZTw+IGNvbnN0ZXhwciBjMl9zdGF0dXNfdCBfYzJfZXJybm8yc3RhdHVzX2ltcGw8RVBFUk0+KCkgICB7IHJldHVybiBDMl9SRUZVU0VEOyB9Cit0ZW1wbGF0ZTw+IGNvbnN0ZXhwciBjMl9zdGF0dXNfdCBfYzJfZXJybm8yc3RhdHVzX2ltcGw8RU5PTUVNPigpICB7IHJldHVybiBDMl9OT19NRU1PUlk7IH0KKworLy8gbWFwIHN0YW5kYXJkIGVycm5vLXMgdG8gdGhlIGVxdWl2YWxlbnQgYzJfc3RhdHVzX3QKK3RlbXBsYXRlPGludC4uLiBOPiBzdHJ1Y3QgX2MyX21hcF9lcnJub19pbXBsOwordGVtcGxhdGU8aW50IEUsIGludCAuLi4gTj4gc3RydWN0IF9jMl9tYXBfZXJybm9faW1wbDxFLCBOLi4uPiB7CisgICAgc3RhdGljIGMyX3N0YXR1c190IG1hcChpbnQgcmVzdWx0KSB7CisgICAgICAgIGlmIChyZXN1bHQgPT0gRSkgeworICAgICAgICAgICAgcmV0dXJuIF9jMl9lcnJubzJzdGF0dXNfaW1wbCA8RT4oKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHJldHVybiBfYzJfbWFwX2Vycm5vX2ltcGw8Ti4uLj46Om1hcChyZXN1bHQpOworICAgICAgICB9CisgICAgfQorfTsKK3RlbXBsYXRlPD4gc3RydWN0IF9jMl9tYXBfZXJybm9faW1wbDw+IHsKKyAgICBzdGF0aWMgYzJfc3RhdHVzX3QgbWFwKGludCByZXN1bHQpIHsKKyAgICAgICAgcmV0dXJuIHJlc3VsdCA9PSAwID8gQzJfT0sgOiBDMl9DT1JSVVBURUQ7CisgICAgfQorfTsKKwordGVtcGxhdGU8aW50Li4uIE4+CitjMl9zdGF0dXNfdCBjMl9tYXBfZXJybm8oaW50IHJlc3VsdCkgeworICAgIHJldHVybiBfYzJfbWFwX2Vycm5vX2ltcGw8Ti4uLj46Om1hcChyZXN1bHQpOworfQorCisjZW5kaWYgLy8gU1RBR0VGUklHSFRfQ09ERUMyX0VSUk5PX1VUSUxTX0hfCisKZGlmZiAtLWdpdCBhL21lZGlhL2NvZGVjMi92bmRrL2luY2x1ZGUvQzJQbGF0Zm9ybVN0b3JlUGx1Z2luTG9hZGVyLmggYi9tZWRpYS9jb2RlYzIvdm5kay9pbmNsdWRlL0MyUGxhdGZvcm1TdG9yZVBsdWdpbkxvYWRlci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRjMTA2NDMKLS0tIC9kZXYvbnVsbAorKysgYi9tZWRpYS9jb2RlYzIvdm5kay9pbmNsdWRlL0MyUGxhdGZvcm1TdG9yZVBsdWdpbkxvYWRlci5oCkBAIC0wLDAgKzEsOTggQEAKKy8qCisgKiBDb3B5cmlnaHQgMjAxOCwgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCisKKyNpZm5kZWYgU1RBR0VGUklHSFRfQzJfUExBVEZPUk1fU1RPUkVfUExVR0lOX0xPQURFUl9IXworCisjZGVmaW5lIFNUQUdFRlJJR0hUX0MyX1BMQVRGT1JNX1NUT1JFX1BMVUdJTl9MT0FERVJfSF8KKworI2luY2x1ZGUgPG1lbW9yeT4KKworI2luY2x1ZGUgPHV0aWxzL011dGV4Lmg+CisKKyNpbmNsdWRlIDxDMi5oPgorI2luY2x1ZGUgPEMyQnVmZmVyLmg+CisKKy8qKgorICogRXh0ZXJuIEMgaW50ZXJmYWNlIGZvciBjcmVhdGluZyBibG9jayBwb29sIGZyb20gcGxhdGZvcm0gc3RvcmUgZXh0ZW5zaW9uLgorICoKKyAqIFxwYXJhbSBhbGxvY3RvcklkICB0aGUgSUQgb2YgdGhlIGJhY2tpbmcgYWxsb2NhdG9yIHR5cGUuCisgKiBccGFyZW0gYmxvY2tQb29sSWQgdGhlIElEIG9mIGNyZWF0ZWQgYmxvY2sgcG9vbC4KKyAqCisgKiBccmV0dXJuIHBvaW50ZXIgb2YgY3JlYXRlZCBDMkJsb2NrUG9vbCwgbnVsbHB0ciBvbiBlcnJvci4KKyAqLwordHlwZWRlZiA6OkMyQmxvY2tQb29sKiAoKkNyZWF0ZUJsb2NrUG9vbEZ1bmMpKDo6QzJBbGxvY2F0b3I6OmlkX3QsIDo6QzJCbG9ja1Bvb2w6OmxvY2FsX2lkX3QpOworCisvKioKKyAqIEV4dGVybiBDIGludGVyZmFjZSBmb3IgY3JlYXRpbmcgYWxsb2NhdG9yIGZyb20gcGxhdGZvcm0gc3RvcmUgZXh0ZW5zaW9uLgorICoKKyAqIFxwYXJhbSBhbGxvY3RvcklkICB0aGUgSUQgb2YgdGhlIGFsbG9jYXRvciB0byBjcmVhdGUuCisgKiBccGFyYW0gc3RhdHVzICAgICAgdGhlIHJldHVybmVkIHN0YXR1cyBmcm9tIGNyZWF0aW5nIGFsbG9jYXRvci4KKyAqCisgKiBccmV0dXJuIHBvaW50ZXIgb2YgY3JlYXRlZCBDMkFsbG9jYXRvciwgbnVsbHB0ciBvbiBlcnJvci4KKyAqLwordHlwZWRlZiA6OkMyQWxsb2NhdG9yKiAoKkNyZWF0ZUFsbG9jYXRvckZ1bmMpKDo6QzJBbGxvY2F0b3I6OmlkX3QsIDo6YzJfc3RhdHVzX3QqKTsKKworY2xhc3MgQzJQbGF0Zm9ybVN0b3JlUGx1Z2luTG9hZGVyIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgY29uc3Qgc3RkOjp1bmlxdWVfcHRyPEMyUGxhdGZvcm1TdG9yZVBsdWdpbkxvYWRlcj4mIEdldEluc3RhbmNlKCk7CisgICAgfkMyUGxhdGZvcm1TdG9yZVBsdWdpbkxvYWRlcigpOworCisgICAgLyoqCisgICAgICogQ3JlYXRlcyBibG9jayBwb29sIGZyb20gcGxhdGZvcm0gc3RvcmUgZXh0ZW5zaW9uLgorICAgICAqCisgICAgICogXHBhcmFtIGFsbG9jdG9ySWQgIHRoZSBJRCBvZiB0aGUgYmFja2luZyBhbGxvY2F0b3IgdHlwZS4KKyAgICAgKiBccGFyYW0gYmxvY2tQb29sSWQgdGhlIElEIG9mIGNyZWF0ZWQgYmxvY2sgcG9vbC4KKyAgICAgKiBccGFyYW0gcG9vbCAgICAgICAgc2hhcmVkIHBvaW50ZXIgd2hlcmUgdGhlIGNyZWF0ZWQgYmxvY2sgcG9vbCBpcyBzdG9yZWQuCisgICAgICoKKyAgICAgKiBccmV0dmFsIEMyX09LICAgICAgICB0aGUgYmxvY2sgcG9vbCB3YXMgY3JlYXRlZCBzdWNjZXNzZnVsbHkuCisgICAgICogXHJldHZhbCBDMl9OT1RfRk9VTkQgdGhlIGV4dGVuc2lvbiBzeW1ib2wgd2FzIG5vdCBmb3VuZC4KKyAgICAgKiBccmV0dmFsIEMyX0JBRF9JTkRFWCB0aGUgaW5wdXQgYWxsb2NhdG9ySWQgaXMgbm90IGRlZmluZWQgaW4gcGxhdGZvcm0gc3RvcmUgZXh0ZW5zaW9uLgorICAgICAqLworICAgIGMyX3N0YXR1c190IGNyZWF0ZUJsb2NrUG9vbCg6OkMyQWxsb2NhdG9yOjppZF90IGFsbG9jYXRvcklkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6OkMyQmxvY2tQb29sOjpsb2NhbF9pZF90IGJsb2NrUG9vbElkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGQ6OnNoYXJlZF9wdHI8QzJCbG9ja1Bvb2w+KiBwb29sKTsKKworICAgIC8qKgorICAgICAqIENyZWF0ZXMgYWxsb2NhdG9yIGZyb20gcGxhdGZvcm0gc3RvcmUgZXh0ZW5zaW9uLgorICAgICAqCisgICAgICogTm90ZSB0aGF0IHRoaXMgYWxsb2NhdG9yIGlzIG5vdCBjcmVhdGVkIGFzIHNoYXJlZCBzaW5nbGV0b24gYXMgQzJBbGxvY2F0b3JTdG9yZSBkb2VzLCBiZWNhdXNlCisgICAgICogQyBpbnRlcmZhY2Ugb25seSBhbGxvd3MgcmF3IHBvaW50ZXIgdHJhbnNtaXNzaW9uIGZvciBleHRlbnNpb24uCisgICAgICoKKyAgICAgKiBccGFyYW0gYWxsb2N0b3JJZCAgdGhlIElEIG9mIHRoZSBhbGxvY2F0b3IgdG8gY3JlYXRlLgorICAgICAqIFxwYXJhbSBhbGxvY2F0b3IgICBzaGFyZWQgcG9pbnRlciB3aGVyZSB0aGUgY3JlYXRlZCBhbGxvY2F0b3IgaXMgc3RvcmVkLgorICAgICAqCisgICAgICogXHJldHZhbCBDMl9PSyAgICAgICAgdGhlIGFsbG9jYXRvciB3YXMgY3JlYXRlZCBzdWNjZXNzZnVsbHkuCisgICAgICogXHJldHZhbCBDMl9USU1FRF9PVVQgY291bGQgbm90IGNyZWF0ZSB0aGUgYWxsb2NhdG9yIHdpdGhpbiB0aGUgdGltZSBsaW1pdCAodW5leHBlY3RlZCkKKyAgICAgKiBccmV0dmFsIEMyX0NPUlJVUFRFRCBzb21lIHVua25vd24gZXJyb3IgcHJldmVudGVkIHRoZSBjcmVhdGlvbiBvZiB0aGUgYWxsb2NhdG9yICh1bmV4cGVjdGVkKQorICAgICAqIFxyZXR2YWwgQzJfTk9UX0ZPVU5EIHRoZSBleHRlbnNpb24gc3ltYm9sIHdhcyBub3QgZm91bmQuCisgICAgICogXHJldHZhbCBDMl9CQURfSU5ERVggdGhlIGlucHV0IGFsbG9jYXRvcklkIGlzIG5vdCBkZWZpbmVkIGluIHBsYXRmb3JtIHN0b3JlIGV4dGVuc2lvbi4KKyAgICAgKiBccmV0dmFsIEMyX05PX01FTU9SWSBub3QgZW5vdWdoIG1lbW9yeSB0byBjcmVhdGUgdGhlIGFsbG9jYXRvcgorICAgICAqLworICAgIGMyX3N0YXR1c190IGNyZWF0ZUFsbG9jYXRvcig6OkMyQWxsb2NhdG9yOjppZF90IGFsbG9jYXRvcklkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGQ6OnNoYXJlZF9wdHI8QzJBbGxvY2F0b3I+KiBjb25zdCBhbGxvY2F0b3IpOworCitwcml2YXRlOgorICAgIGV4cGxpY2l0IEMyUGxhdGZvcm1TdG9yZVBsdWdpbkxvYWRlcihjb25zdCBjaGFyICpsaWJQYXRoKTsKKworICAgIHN0YXRpYyBhbmRyb2lkOjpNdXRleCBzTXV0ZXg7CisgICAgc3RhdGljIHN0ZDo6dW5pcXVlX3B0cjxDMlBsYXRmb3JtU3RvcmVQbHVnaW5Mb2FkZXI+IHNJbnN0YW5jZTsKKworICAgIHZvaWQgKm1MaWJIYW5kbGU7CisgICAgQ3JlYXRlQmxvY2tQb29sRnVuYyBtQ3JlYXRlQmxvY2tQb29sOworICAgIENyZWF0ZUFsbG9jYXRvckZ1bmMgbUNyZWF0ZUFsbG9jYXRvcjsKK307CisKKyNlbmRpZiAgLy8gU1RBR0VGUklHSFRfQzJfUExBVEZPUk1fU1RPUkVfUExVR0lOX0xPQURFUl9IXwpkaWZmIC0tZ2l0IGEvbWVkaWEvY29kZWMyL3ZuZGsvaW5jbHVkZS9DMlBsYXRmb3JtU3VwcG9ydC5oIGIvbWVkaWEvY29kZWMyL3ZuZGsvaW5jbHVkZS9DMlBsYXRmb3JtU3VwcG9ydC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYzMTI4MmMKLS0tIC9kZXYvbnVsbAorKysgYi9tZWRpYS9jb2RlYzIvdm5kay9pbmNsdWRlL0MyUGxhdGZvcm1TdXBwb3J0LmgKQEAgLTAsMCArMSwxMzYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTcgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworCisjaWZuZGVmIFNUQUdFRlJJR0hUX0NPREVDMl9QTEFURk9STV9TVVBQT1JUX0hfCisjZGVmaW5lIFNUQUdFRlJJR0hUX0NPREVDMl9QTEFURk9STV9TVVBQT1JUX0hfCisKKyNpbmNsdWRlIDxDMkNvbXBvbmVudC5oPgorI2luY2x1ZGUgPEMyQ29tcG9uZW50RmFjdG9yeS5oPgorCisjaW5jbHVkZSA8bWVtb3J5PgorCituYW1lc3BhY2UgYW5kcm9pZCB7CisKKy8qKgorICogUmV0dXJucyB0aGUgcGxhdGZvcm0gYWxsb2NhdG9yIHN0b3JlLgorICogXHJldHZhbCBudWxscHRyIGlmIHRoZSBwbGF0Zm9ybSBhbGxvY2F0b3Igc3RvcmUgY291bGQgbm90IGJlIG9idGFpbmVkCisgKi8KK3N0ZDo6c2hhcmVkX3B0cjxDMkFsbG9jYXRvclN0b3JlPiBHZXRDb2RlYzJQbGF0Zm9ybUFsbG9jYXRvclN0b3JlKCk7CisKKy8qKgorICogUGxhdGZvcm0gYWxsb2NhdG9yIHN0b3JlIElEcworICovCitjbGFzcyBDMlBsYXRmb3JtQWxsb2NhdG9yU3RvcmUgOiBwdWJsaWMgQzJBbGxvY2F0b3JTdG9yZSB7CitwdWJsaWM6CisgICAgZW51bSA6IGlkX3QgeworICAgICAgICAvKioKKyAgICAgICAgICogSUQgb2YgdGhlIGlvbiBiYWNrZWQgcGxhdGZvcm0gYWxsb2NhdG9yLgorICAgICAgICAgKgorICAgICAgICAgKiBDMkhhbmRsZSBjb25zaXN0cyBvZjoKKyAgICAgICAgICogICBmZCAgc2hhcmVkIGlvbiBidWZmZXIgaGFuZGxlCisgICAgICAgICAqICAgaW50IHNpemUgKGxvIDMyIGJpdHMpCisgICAgICAgICAqICAgaW50IHNpemUgKGhpIDMyIGJpdHMpCisgICAgICAgICAqICAgaW50IG1hZ2ljICdceGMyaW9ceDAwJworICAgICAgICAgKi8KKyAgICAgICAgSU9OID0gUExBVEZPUk1fU1RBUlQsCisKKyAgICAgICAgLyoqCisgICAgICAgICAqIElEIG9mIHRoZSBncmFsbG9jIGJhY2tlZCBwbGF0Zm9ybSBhbGxvY2F0b3IuCisgICAgICAgICAqCisgICAgICAgICAqIEMySGFuZGxlIGxheW91dCBpcyBub3QgcHVibGljLiBVc2UgQzJBbGxvY2F0b3JHcmFsbG9jOjpVbndyYXBOYXRpdmVDb2RlYzJHcmFsbG9jSGFuZGxlCisgICAgICAgICAqIHRvIGdldCB0aGUgdW5kZXJseWluZyBncmFsbG9jIGhhbmRsZSBmcm9tIGEgQzJIYW5kbGUsIGFuZCBXcmFwTmF0aXZlQ29kZWMyR3JhbGxvY0hhbmRsZQorICAgICAgICAgKiB0byBjcmVhdGUgYSBDMkhhbmRsZSBmcm9tIGEgZ3JhbGxvYyBoYW5kbGUgLSBmb3IgQzJBbGxvY2F0b3I6OnByaW9yQWxsb2NhdGlvbi4KKyAgICAgICAgICovCisgICAgICAgIEdSQUxMT0MsCisKKyAgICAgICAgLyoqCisgICAgICAgICAqIElEIG9mIHRoZSBidWZmZXJxdWV1ZSBiYWNrZWQgcGxhdGZvcm0gYWxsb2NhdG9yLgorICAgICAgICAgKgorICAgICAgICAgKiBDMkhhbmRsZSBsYXlvdXQgaXMgbm90IHB1YmxpYy4gVXNlIEMyQWxsb2NhdG9yR3JhbGxvYzo6VW53cmFwTmF0aXZlQ29kZWMyR3JhbGxvY0hhbmRsZQorICAgICAgICAgKiB0byBnZXQgdGhlIHVuZGVybHlpbmcgaGFuZGxlIGZyb20gYSBDMkhhbmRsZSwgYW5kIFdyYXBOYXRpdmVDb2RlYzJHcmFsbG9jSGFuZGxlCisgICAgICAgICAqIHRvIGNyZWF0ZSBhIEMySGFuZGxlIGZyb20gYSBoYW5kbGUgLSBmb3IgQzJBbGxvY2F0b3I6OnByaW9yQWxsb2NhdGlvbi4KKyAgICAgICAgICovCisgICAgICAgIEJVRkZFUlFVRVVFLAorCisgICAgICAgIC8qKgorICAgICAgICAgKiBJRCBvZiBpbmRpY2F0aW5nIHRoZSBlbmQgb2YgcGxhdGZvcm0gYWxsb2NhdG9yIGRlZmluaXRpb24uCisgICAgICAgICAqCisgICAgICAgICAqIFxub3RlIGFsd2F5cyBwdXQgdGhpcyBtYWNybyBpbiB0aGUgbGFzdCBwbGFjZS4KKyAgICAgICAgICoKKyAgICAgICAgICogRXh0ZW5kZWQgcGxhdGZvcm0gc3RvcmUgcGx1Z2luIHNob3VsZCB1c2UgdGhpcyBtYWNybyBhcyB0aGUgc3RhcnQgSUQgb2YgaXRzIG93biBhbGxvY2F0b3IKKyAgICAgICAgICogdHlwZXMuCisgICAgICAgICAqLworICAgICAgICBQTEFURk9STV9FTkQsCisgICAgfTsKK307CisKKy8qKgorICogUmV0cmlldmVzIGEgYmxvY2sgcG9vbCBmb3IgYSBjb21wb25lbnQuCisgKgorICogXHBhcmFtIGlkICAgICAgICB0aGUgbG9jYWwgSUQgb2YgdGhlIGJsb2NrIHBvb2wKKyAqIFxwYXJhbSBjb21wb25lbnQgdGhlIGNvbXBvbmVudCB1c2luZyB0aGUgYmxvY2sgcG9vbCAobXVzdCBiZSBub24tbnVsbCkKKyAqIFxwYXJhbSBwb29sICAgICAgcG9pbnRlciB0byB3aGVyZSB0aGUgb2J0YWluZWQgYmxvY2sgcG9vbCBzaGFsbCBiZSBzdG9yZWQgb24gc3VjY2Vzcy4gbnVsbHB0cgorICogICAgICAgICAgICAgICAgICB3aWxsIGJlIHN0b3JlZCBoZXJlIG9uIGZhaWx1cmUKKyAqCisgKiBccmV0dmFsIEMyX09LICAgICAgICB0aGUgb3BlcmF0aW9uIHdhcyBzdWNjZXNzZnVsCisgKiBccmV0dmFsIEMyX0JBRF9WQUxVRSB0aGUgY29tcG9uZW50IGlzIG51bGwKKyAqIFxyZXR2YWwgQzJfTk9UX0ZPVU5EIGlmIHRoZSBibG9jayBwb29sIGRvZXMgbm90IGV4aXN0CisgKiBccmV0dmFsIEMyX05PX01FTU9SWSBub3QgZW5vdWdoIG1lbW9yeSB0byBmZXRjaCB0aGUgYmxvY2sgcG9vbCAodGhpcyByZXR1cm4gdmFsdWUgaXMgb25seQorICogICAgICAgICAgICAgICAgICAgICAgcG9zc2libGUgZm9yIGJhc2ljIHBvb2xzKQorICogXHJldHZhbCBDMl9USU1FRF9PVVQgdGhlIG9wZXJhdGlvbiB0aW1lZCBvdXQgKHRoaXMgcmV0dXJuIHZhbHVlIGlzIG9ubHkgcG9zc2libGUgZm9yIGJhc2ljIHBvb2xzKQorICogXHJldHZhbCBDMl9SRUZVU0VEICAgbm8gcGVybWlzc2lvbiB0byBjb21wbGV0ZSBhbnkgcmVxdWlyZWQgYWxsb2NhdGlvbiAodGhpcyByZXR1cm4gdmFsdWUgaXMgb25seQorICogICAgICAgICAgICAgICAgICAgICAgcG9zc2libGUgZm9yIGJhc2ljIHBvb2xzKQorICogXHJldHZhbCBDMl9DT1JSVVBURUQgc29tZSB1bmtub3duLCB1bnJlY292ZXJhYmxlIGVycm9yIG9jY3VyZWQgZHVyaW5nIG9wZXJhdGlvbiAodW5leHBlY3RlZCwKKyAqICAgICAgICAgICAgICAgICAgICAgIHRoaXMgcmV0dXJuIHZhbHVlIGlzIG9ubHkgcG9zc2libGUgZm9yIGJhc2ljIHBvb2xzKQorICovCitjMl9zdGF0dXNfdCBHZXRDb2RlYzJCbG9ja1Bvb2woCisgICAgICAgIEMyQmxvY2tQb29sOjpsb2NhbF9pZF90IGlkLCBzdGQ6OnNoYXJlZF9wdHI8Y29uc3QgQzJDb21wb25lbnQ+IGNvbXBvbmVudCwKKyAgICAgICAgc3RkOjpzaGFyZWRfcHRyPEMyQmxvY2tQb29sPiAqcG9vbCk7CisKKy8qKgorICogQ3JlYXRlcyBhIGJsb2NrIHBvb2wuCisgKiBccGFyYW0gYWxsb2NhdG9ySWQgIHRoZSBhbGxvY2F0b3IgSUQgd2hpY2ggaXMgdXNlZCB0byBhbGxvY2F0ZSBibG9ja3MKKyAqIFxwYXJhbSBjb21wb25lbnQgICAgIHRoZSBjb21wb25lbnQgdXNpbmcgdGhlIGJsb2NrIHBvb2wgKG11c3QgYmUgbm9uLW51bGwpCisgKiBccGFyYW0gcG9vbCAgICAgICAgICBwb2ludGVyIHRvIHdoZXJlIHRoZSBjcmVhdGVkIGJsb2NrIHBvb2wgc2hhbGwgYmUgc3RvcmUgb24gc3VjY2Vzcy4KKyAqICAgICAgICAgICAgICAgICAgICAgIG51bGxwdHIgd2lsbCBiZSBzdG9yZWQgaGVyZSBvbiBmYWlsdXJlCisgKgorICogXHJldHZhbCBDMl9PSyAgICAgICAgdGhlIG9wZXJhdGlvbiB3YXMgc3VjY2Vzc2Z1bAorICogXHJldHZhbCBDMl9CQURfVkFMVUUgdGhlIGNvbXBvbmVudCBpcyBudWxsCisgKiBccmV0dmFsIEMyX05PVF9GT1VORCBpZiB0aGUgYWxsb2NhdG9yIGRvZXMgbm90IGV4aXN0CisgKiBccmV0dmFsIEMyX05PX01FTU9SWSBub3QgZW5vdWdoIG1lbW9yeSB0byBjcmVhdGUgYSBibG9jayBwb29sCisgKi8KK2MyX3N0YXR1c190IENyZWF0ZUNvZGVjMkJsb2NrUG9vbCgKKyAgICAgICAgQzJQbGF0Zm9ybUFsbG9jYXRvclN0b3JlOjppZF90IGFsbG9jYXRvcklkLAorICAgICAgICBzdGQ6OnNoYXJlZF9wdHI8Y29uc3QgQzJDb21wb25lbnQ+IGNvbXBvbmVudCwKKyAgICAgICAgc3RkOjpzaGFyZWRfcHRyPEMyQmxvY2tQb29sPiAqcG9vbCk7CisKKy8qKgorICogUmV0dXJucyB0aGUgcGxhdGZvcm0gY29tcG9uZW50IHN0b3JlLgorICogXHJldHZhbCBudWxscHRyIGlmIHRoZSBwbGF0Zm9ybSBjb21wb25lbnQgc3RvcmUgY291bGQgbm90IGJlIG9idGFpbmVkCisgKi8KK3N0ZDo6c2hhcmVkX3B0cjxDMkNvbXBvbmVudFN0b3JlPiBHZXRDb2RlYzJQbGF0Zm9ybUNvbXBvbmVudFN0b3JlKCk7CisKKy8qKgorICogU2V0cyB0aGUgcHJlZmVycmVkIGNvbXBvbmVudCBzdG9yZSBpbiB0aGlzIHByb2Nlc3MgZm9yIHRoZSBzb2xlIHB1cnBvc2Ugb2YgYWNjZXNzaW5nIGl0cworICogaW50ZXJmYWNlLiBJZiB0aGlzIGlzIG5vdCBjYWxsZWQsIHRoZSBkZWZhdWx0IElDb21wb25lbnRTdG9yZSBIQUwgKGlmIGV4aXN0cykgaXMgdGhlIHByZWZlcnJlZAorICogc3RvcmUgZm9yIHRoaXMgcHVycG9zZS4gSWYgdGhlIGRlZmF1bHQgSUNvbXBvbmVudFN0b3JlIEhBTCBpcyBub3QgcHJlc2VudCwgdGhlIHBsYXRmb3JtCisgKiBjb21wb25lbnQgc3RvcmUgaXMgdXNlZC4KKyAqLwordm9pZCBTZXRQcmVmZXJyZWRDb2RlYzJDb21wb25lbnRTdG9yZShzdGQ6OnNoYXJlZF9wdHI8QzJDb21wb25lbnRTdG9yZT4gc3RvcmUpOworCit9IC8vIG5hbWVzcGFjZSBhbmRyb2lkCisKKyNlbmRpZiAvLyBTVEFHRUZSSUdIVF9DT0RFQzJfUExBVEZPUk1fU1VQUE9SVF9IXwpkaWZmIC0tZ2l0IGEvbWVkaWEvY29kZWMyL3ZuZGsvaW5jbHVkZS9hbmRyb2lkLUMyRGVidWctbG9nLmggYi9tZWRpYS9jb2RlYzIvdm5kay9pbmNsdWRlL2FuZHJvaWQtQzJEZWJ1Zy1sb2cuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41OTEwMjI4Ci0tLSAvZGV2L251bGwKKysrIGIvbWVkaWEvY29kZWMyL3ZuZGsvaW5jbHVkZS9hbmRyb2lkLUMyRGVidWctbG9nLmgKQEAgLTAsMCArMSw2NyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxOCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCisKKyNpZm5kZWYgQzJVVElMU19BTkRST0lEX0RFQlVHX0xPR19IXworI2RlZmluZSBDMlVUSUxTX0FORFJPSURfREVCVUdfTE9HX0hfCisKKy8qCisgKiBBbmRyb2lkIHByb3ZpZGVzIGxvZ2dpbmcgYW5kIGRlYnVnIG1hY3Jvcy4gUmVkZWZpbmUgdGhlbSB3aXRoIEMyIHByZWZpeCBhbmQgYWRkIHN1cHBvcnQgZm9yCisgKiBvcHRpbmcgb3V0IG9mIHZlcmJvc2UgbG9ncy4KKyAqLworCisjaWZkZWYgQzJfTE9HX1RBRworI2RlZmluZSBMT0dfVEFHIEMyX0xPR19UQUcKKyNlbmRpZgorCisjaW5jbHVkZSA8YW5kcm9pZC1iYXNlL2xvZ2dpbmcuaD4KKworI2lmZGVmIEMyX0xPR19WRVJCT1NFCisjZGVmaW5lIEMyX0xPRyhMRVZFTCkgTE9HKDo6YW5kcm9pZDo6YmFzZTo6TEVWRUwpCisjZWxzZQorLyoqCisgKiBVc2UgYXMgZm9sbG93czoKKyAqCisgKiAjZGVmaW5lIEMyX0xPR19UQUcgInRhZyIKKyAqIC8vI2RlZmluZSBDMl9MT0dfVkVSQk9TRSAgLy8gZW5hYmxlIHZlcmJvc2UgbG9ncyBpbiB0aGlzIGZpbGUKKyAqICNpbmNsdWRlIDxDMkRlYnVnLmg+CisgKgorICogQzJfTE9HKERFQlVHKSA8PCBleHByIC4uLjsKKyAqCisgKiBMb2cgbGV2ZWxzIGFyZTogVkVSQk9TRSwgREVCVUcsIElORk8sIFdBUk5JTkcsIEVSUk9SLCBGQVRBTCAoYWJvcnRzKS4KKyAqCisgKiBObyBlbmRsIGlzIHJlcXVpcmVkLgorICovCisjZGVmaW5lIEMyX0xPRyhMRVZFTCkgXAorICAgICAgICAoOjphbmRyb2lkOjpiYXNlOjpMRVZFTCAhPSA6OmFuZHJvaWQ6OmJhc2U6OlZFUkJPU0UpICYmIExPRyg6OmFuZHJvaWQ6OmJhc2U6OkxFVkVMKQorI2VuZGlmCisKKyNkZWZpbmUgQzJfQ0hFQ0sgICAgQ0hFQ0sKKyNkZWZpbmUgQzJfQ0hFQ0tfTFQgQ0hFQ0tfTFQKKyNkZWZpbmUgQzJfQ0hFQ0tfTEUgQ0hFQ0tfTEUKKyNkZWZpbmUgQzJfQ0hFQ0tfRVEgQ0hFQ0tfRVEKKyNkZWZpbmUgQzJfQ0hFQ0tfR0UgQ0hFQ0tfR0UKKyNkZWZpbmUgQzJfQ0hFQ0tfR1QgQ0hFQ0tfR1QKKyNkZWZpbmUgQzJfQ0hFQ0tfTkUgQ0hFQ0tfTkUKKworI2RlZmluZSBDMl9EQ0hFQ0sgICAgRENIRUNLCisjZGVmaW5lIEMyX0RDSEVDS19MVCBEQ0hFQ0tfTFQKKyNkZWZpbmUgQzJfRENIRUNLX0xFIERDSEVDS19MRQorI2RlZmluZSBDMl9EQ0hFQ0tfRVEgRENIRUNLX0VRCisjZGVmaW5lIEMyX0RDSEVDS19HRSBEQ0hFQ0tfR0UKKyNkZWZpbmUgQzJfRENIRUNLX0dUIERDSEVDS19HVAorI2RlZmluZSBDMl9EQ0hFQ0tfTkUgRENIRUNLX05FCisKKyNlbmRpZiAgLy8gQzJVVElMU19BTkRST0lEX0RFQlVHX0xPR19IXwpkaWZmIC0tZ2l0IGEvbWVkaWEvY29kZWMyL3ZuZGsvaW5jbHVkZS91dGlsL0MyRGVidWctYmFzZS5oIGIvbWVkaWEvY29kZWMyL3ZuZGsvaW5jbHVkZS91dGlsL0MyRGVidWctYmFzZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmEwNDBlNDIKLS0tIC9kZXYvbnVsbAorKysgYi9tZWRpYS9jb2RlYzIvdm5kay9pbmNsdWRlL3V0aWwvQzJEZWJ1Zy1iYXNlLmgKQEAgLTAsMCArMSwzNiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxOCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCisKKyNpZm5kZWYgQzJVVElMU19ERUJVR19CQVNFX0hfCisjZGVmaW5lIEMyVVRJTFNfREVCVUdfQkFTRV9IXworCisjaW5jbHVkZSA8aW9zdHJlYW0+CisKKy8qKgorICogRGVidWcgcHJpbnQgdXRpbGl0aWVzIGZvciBDb2RlYyAyLjAgYmFzZSBvYmplY3RzLgorICovCisKKyNkZWZpbmUgQzJfREVDTEFSRV9BU19TVFJJTkdfQU5EX0RFRklORV9TVFJFQU1fT1VUKHR5cGUpIFwKK2NvbnN0IGNoYXIgKmFzU3RyaW5nKHR5cGUgaSwgY29uc3QgY2hhciAqZGVmID0gIj8/Iik7IFwKK2lubGluZSBzdGQ6Om9zdHJlYW0mIG9wZXJhdG9yPDwoc3RkOjpvc3RyZWFtJiBvcywgY29uc3QgdHlwZSAmaSkgeyBcCisgICAgcmV0dXJuIG9zIDw8IGFzU3RyaW5nKGkpOyBcCit9CisKK0MyX0RFQ0xBUkVfQVNfU1RSSU5HX0FORF9ERUZJTkVfU1RSRUFNX09VVChjMl9zdGF0dXNfdCkKKworCisjZW5kaWYgIC8vIEMyVVRJTFNfREVCVUdfQkFTRV9IXworCmRpZmYgLS1naXQgYS9tZWRpYS9jb2RlYzIvdm5kay9pbmNsdWRlL3V0aWwvQzJEZWJ1Zy1pbnRlcmZhY2UuaCBiL21lZGlhL2NvZGVjMi92bmRrL2luY2x1ZGUvdXRpbC9DMkRlYnVnLWludGVyZmFjZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNmMzE4NzUKLS0tIC9kZXYvbnVsbAorKysgYi9tZWRpYS9jb2RlYzIvdm5kay9pbmNsdWRlL3V0aWwvQzJEZWJ1Zy1pbnRlcmZhY2UuaApAQCAtMCwwICsxLDM0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE4IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KKworI2lmbmRlZiBDMlVUSUxTX0RFQlVHX0lOVEVSRkFDRV9IXworI2RlZmluZSBDMlVUSUxTX0RFQlVHX0lOVEVSRkFDRV9IXworCisjaW5jbHVkZSA8dXRpbC9DMkRlYnVnLWJhc2UuaD4KKyNpbmNsdWRlIDx1dGlsL0MySW50ZXJmYWNlVXRpbHMuaD4KKworI2luY2x1ZGUgPGlvc3RyZWFtPgorCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPgorc3RkOjpvc3RyZWFtJiBvcGVyYXRvcjw8KHN0ZDo6b3N0cmVhbSYgb3MsIGNvbnN0IEMyU3VwcG9ydGVkUmFuZ2U8VD4gJmkpOworCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPgorc3RkOjpvc3RyZWFtJiBvcGVyYXRvcjw8KHN0ZDo6b3N0cmVhbSYgb3MsIGNvbnN0IEMyU3VwcG9ydGVkVmFsdWVTZXQ8VD4gJmkpOworCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPgorc3RkOjpvc3RyZWFtJiBvcGVyYXRvcjw8KHN0ZDo6b3N0cmVhbSYgb3MsIGNvbnN0IEMyRmllbGRTdXBwb3J0ZWRWYWx1ZXNIZWxwZXI8VD4gJmkpOworCisjZW5kaWYgIC8vIEMyVVRJTFNfREVCVUdfSU5URVJGQUNFX0hfCmRpZmYgLS1naXQgYS9tZWRpYS9jb2RlYzIvdm5kay9pbmNsdWRlL3V0aWwvQzJEZWJ1Zy1sb2cuaCBiL21lZGlhL2NvZGVjMi92bmRrL2luY2x1ZGUvdXRpbC9DMkRlYnVnLWxvZy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE5NWM0YzEKLS0tIC9kZXYvbnVsbAorKysgYi9tZWRpYS9jb2RlYzIvdm5kay9pbmNsdWRlL3V0aWwvQzJEZWJ1Zy1sb2cuaApAQCAtMCwwICsxLDI3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE4IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KKworI2lmbmRlZiBDMlVUSUxTX0RFQlVHX0xPR19IXworI2RlZmluZSBDMlVUSUxTX0RFQlVHX0xPR19IXworCisvLyBQbGF0Zm9ybSBzcGVjaWZpYyBkZWJ1ZyB1dGlsaXRpZXMKKyNpZmRlZiBfX0FORFJPSURfXworI2luY2x1ZGUgPGFuZHJvaWQtQzJEZWJ1Zy1sb2cuaD4KKyNlbHNlCisvLyBUT0RPOiBpbXBsZW1lbnQgYmFzZSBkZWJ1ZyB1dGlscworI2VuZGlmCisKKyNlbmRpZiAgLy8gQzJVVElMU19ERUJVR19MT0dfSF8KZGlmZiAtLWdpdCBhL21lZGlhL2NvZGVjMi92bmRrL2luY2x1ZGUvdXRpbC9DMkRlYnVnLXBhcmFtLmggYi9tZWRpYS9jb2RlYzIvdm5kay9pbmNsdWRlL3V0aWwvQzJEZWJ1Zy1wYXJhbS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUxYzFkZTAKLS0tIC9kZXYvbnVsbAorKysgYi9tZWRpYS9jb2RlYzIvdm5kay9pbmNsdWRlL3V0aWwvQzJEZWJ1Zy1wYXJhbS5oCkBAIC0wLDAgKzEsMzcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTggVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworCisjaWZuZGVmIEMyVVRJTFNfREVCVUdfUEFSQU1fSF8KKyNkZWZpbmUgQzJVVElMU19ERUJVR19QQVJBTV9IXworCisjaW5jbHVkZSA8QzJQYXJhbS5oPgorI2luY2x1ZGUgPHV0aWwvQzJEZWJ1Zy1iYXNlLmg+CisKKyNpbmNsdWRlIDxpb3N0cmVhbT4KKworLyoqCisgKiBEZWJ1Zy9wcmludCBkZWNsYXJhdGlvbnMgZm9yIG9iamVjdHMgZGVmaW5lZCBpbiBDMlBhcmFtLmgKKyAqLworQzJfREVDTEFSRV9BU19TVFJJTkdfQU5EX0RFRklORV9TVFJFQU1fT1VUKEMyRmllbGREZXNjcmlwdG9yOjp0eXBlX3QpCisKK3N0ZDo6b3N0cmVhbSYgb3BlcmF0b3I8PChzdGQ6Om9zdHJlYW0mIG9zLCBjb25zdCBDMlBhcmFtOjpDb3JlSW5kZXggJmkpOworc3RkOjpvc3RyZWFtJiBvcGVyYXRvcjw8KHN0ZDo6b3N0cmVhbSYgb3MsIGNvbnN0IEMyUGFyYW06OlR5cGUgJmkpOworc3RkOjpvc3RyZWFtJiBvcGVyYXRvcjw8KHN0ZDo6b3N0cmVhbSYgb3MsIGNvbnN0IEMyUGFyYW06OkluZGV4ICZpKTsKK3N0ZDo6b3N0cmVhbSYgb3BlcmF0b3I8PChzdGQ6Om9zdHJlYW0mIG9zLCBjb25zdCBfQzJGaWVsZElkICZpKTsKK3N0ZDo6b3N0cmVhbSYgb3BlcmF0b3I8PChzdGQ6Om9zdHJlYW0mIG9zLCBjb25zdCBDMkZpZWxkRGVzY3JpcHRvciAmaSk7CitzdGQ6Om9zdHJlYW0mIG9wZXJhdG9yPDwoc3RkOjpvc3RyZWFtJiBvcywgY29uc3QgQzJQYXJhbUZpZWxkICZpKTsKKworI2VuZGlmICAvLyBDMlVUSUxTX0RFQlVHX1BBUkFNX0hfCmRpZmYgLS1naXQgYS9tZWRpYS9jb2RlYzIvdm5kay9pbmNsdWRlL3V0aWwvQzJJbnRlcmZhY2VIZWxwZXIuaCBiL21lZGlhL2NvZGVjMi92bmRrL2luY2x1ZGUvdXRpbC9DMkludGVyZmFjZUhlbHBlci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJmYjQzYWYKLS0tIC9kZXYvbnVsbAorKysgYi9tZWRpYS9jb2RlYzIvdm5kay9pbmNsdWRlL3V0aWwvQzJJbnRlcmZhY2VIZWxwZXIuaApAQCAtMCwwICsxLDc1MiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxOCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCisKKyNpZm5kZWYgQzJVVElMU19JTlRFUkZBQ0VfSEVMUEVSX0hfCisjZGVmaW5lIEMyVVRJTFNfSU5URVJGQUNFX0hFTFBFUl9IXworCisjaW5jbHVkZSA8QzJDb21wb25lbnQuaD4KKyNpbmNsdWRlIDx1dGlsL0MySW50ZXJmYWNlVXRpbHMuaD4KKworI2luY2x1ZGUgPG1hcD4KKyNpbmNsdWRlIDxtdXRleD4KKyNpbmNsdWRlIDx2ZWN0b3I+CisKKyNpbmNsdWRlIDxzdGRkZWYuaD4KKworLyoqCisgKiBJbnRlcmZhY2UgSGVscGVyCisgKi8KK3VzaW5nIEMyUiA9IEMyU2V0dGluZ1Jlc3VsdHNCdWlsZGVyOworCit0ZW1wbGF0ZTx0eXBlbmFtZSBULCBib29sIEU9c3RkOjppc19lbnVtPFQ+Ojp2YWx1ZT4KK3N0cnVjdCBfYzJfcmVkdWNlX2VudW1fdG9fdW5kZXJseWluZ190eXBlIHsKKyAgICB0eXBlZGVmIFQgdHlwZTsKK307CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+CitzdHJ1Y3QgX2MyX3JlZHVjZV9lbnVtX3RvX3VuZGVybHlpbmdfdHlwZTxULCB0cnVlPiB7CisgICAgdHlwZWRlZiB0eXBlbmFtZSBzdGQ6OnVuZGVybHlpbmdfdHlwZTxUPjo6dHlwZSB0eXBlOworfTsKKworLyoqCisgKiBIZWxwZXIgY2xhc3MgdG8gaW1wbGVtZW50IHBhcmFtZXRlciByZWZsZWN0b3JzLiBUaGlzIGNsYXNzIGlzIGR5bmFtaWMgYW5kIGlzIGRlc2lnbmVkIHRvIGJlCisgKiBzaGFyZWQgYnkgbXVsdGlwbGUgaW50ZXJmYWNlcy4gVGhpcyBhbGxvd3MgaW50ZXJmYWNlcyB0byBhZGQgc3RydWN0dXJlIGRlc2NyaXB0b3JzIGFzIG5lZWRlZC4KKyAqLworY2xhc3MgQzJSZWZsZWN0b3JIZWxwZXIgOiBwdWJsaWMgQzJQYXJhbVJlZmxlY3RvciB7CitwdWJsaWM6CisgICAgQzJSZWZsZWN0b3JIZWxwZXIoKSA9IGRlZmF1bHQ7CisgICAgdmlydHVhbCB+QzJSZWZsZWN0b3JIZWxwZXIoKSA9IGRlZmF1bHQ7CisgICAgdmlydHVhbCBzdGQ6OnVuaXF1ZV9wdHI8QzJTdHJ1Y3REZXNjcmlwdG9yPiBkZXNjcmliZSgKKyAgICAgICAgICAgIEMyUGFyYW06OkNvcmVJbmRleCBwYXJhbUluZGV4KSBjb25zdCBvdmVycmlkZTsKKworICAgIC8qKgorICAgICAqIEFkZHMgc3VwcG9ydCBmb3IgZGVzY3JpYmluZyB0aGUgZ2l2ZW4gcGFyYW1ldGVycy4KKyAgICAgKgorICAgICAqIFxwYXJhbSBQYXJhbXMgdHlwZXMgb2YgY29kZWMgMi4wIHN0cnVjdHMgKG9yIHBhcmFtZXRlcnMpIHRvIGRlc2NyaWJlCisgICAgICovCisgICAgdGVtcGxhdGU8dHlwZW5hbWUuLi4gUGFyYW1zPgorICAgIEMyX0lOTElORSB2b2lkIGFkZFN0cnVjdERlc2NyaXB0b3JzKCkgeworICAgICAgICBzdGQ6OnZlY3RvcjxDMlN0cnVjdERlc2NyaXB0b3I+IHN0cnVjdHM7CisgICAgICAgIGFkZFN0cnVjdERlc2NyaXB0b3JzKHN0cnVjdHMsIChfVHVwbGU8UGFyYW1zLi4uPiAqKW51bGxwdHIpOworICAgIH0KKworICAgIC8qKgorICAgICAqIEFkZHMgc3VwcG9ydCBmb3IgZGVzY3JpYmluZyBhIHNwZWNpZmljIHN0cnVjdC4KKyAgICAgKgorICAgICAqIFxwYXJhbSBzdHJ1a3QgZGVzY3JpcHRvciBmb3IgdGhlIHN0cnVjdCB0aGF0IHdpbGwgYmUgbW92ZWQgb3V0LgorICAgICAqLworICAgIHZvaWQgYWRkU3RydWN0RGVzY3JpcHRvcihDMlN0cnVjdERlc2NyaXB0b3IgJiZzdHJ1a3QpOworCitwcml2YXRlOgorICAgIHRlbXBsYXRlPHR5cGVuYW1lLi4uIFBhcmFtcz4KKyAgICBjbGFzcyBDMl9ISURFIF9UdXBsZSB7IH07CisKKyAgICAvKioKKyAgICAgKiBBZGRzIHN1cHBvcnQgZm9yIGRlc2NyaWJpbmcgdGhlIGdpdmVuIGRlc2NyaXB0b3JzLgorICAgICAqCisgICAgICogXHBhcmFtIHN0cnVjdHMgTGlzdCBvZiBzdHJ1Y3R1cmUgZGVzY3JpcHRvcnMgdG8gYWRkIHN1cHBvcnQgZm9yCisgICAgICovCisgICAgdm9pZCBhZGRTdHJ1Y3REZXNjcmlwdG9ycygKKyAgICAgICAgICAgIHN0ZDo6dmVjdG9yPEMyU3RydWN0RGVzY3JpcHRvcj4gJnN0cnVjdHMsIF9UdXBsZTw+ICopOworCisgICAgLyoqCisgICAgICogVXRpbGl0eSBtZXRob2QgdGhhdCBhZGRzIHN1cHBvcnQgZm9yIGRlc2NyaWJpbmcgdGhlIGdpdmVuIGRlc2NyaXB0b3JzIGluIGEgcmVjdXJzaXZlIG1hbm5lcgorICAgICAqIG9uZSBzdHJ1Y3R1cmUgYXQgYSB0aW1lIHVzaW5nIGEgbGlzdCBvZiBzdHJ1Y3R1cmUgZGVzY3JpcHRvcnMgdGVtcG9yYXJ5LgorICAgICAqCisgICAgICogXHBhcmFtIFQgdGhlIHR5cGUgb2YgY29kZWMgMi4wIHN0cnVjdCB0byBkZXNjcmliZQorICAgICAqIFxwYXJhbSBQYXJhbXMgcmVzdCBvZiB0aGUgc3RydWN0cworICAgICAqIFxwYXJhbSBzdHJ1Y3RzIFRlbXBvcmFyeSBsaXN0IG9mIHN0cnVjdHVyZSBkZXNjcmlwdG9ycyB1c2VkIHRvIG9wdGltaXplIHRoZSBvcGVyYXRpb24uCisgICAgICovCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUuLi4gUGFyYW1zPgorICAgIEMyX0lOTElORSB2b2lkIGFkZFN0cnVjdERlc2NyaXB0b3JzKAorICAgICAgICAgICAgc3RkOjp2ZWN0b3I8QzJTdHJ1Y3REZXNjcmlwdG9yPiAmc3RydWN0cywgX1R1cGxlPFQsIFBhcmFtcy4uLj4gKikgeworICAgICAgICBzdHJ1Y3RzLmVtcGxhY2VfYmFjaygoVCopbnVsbHB0cik7CisgICAgICAgIGFkZFN0cnVjdERlc2NyaXB0b3JzKHN0cnVjdHMsIChfVHVwbGU8UGFyYW1zLi4uPiAqKW51bGxwdHIpOworICAgIH0KKworICAgIG11dGFibGUgc3RkOjptdXRleCBfbU11dGV4OworICAgIHN0ZDo6bWFwPEMyUGFyYW06OkNvcmVJbmRleCwgY29uc3QgQzJTdHJ1Y3REZXNjcmlwdG9yPiBfbVN0cnVjdHM7IC8vLzwgZGVzY3JpcHRvcnMKK307CisKKy8qKgorICogVXRpbGl0eSBjbGFzcyB0aGF0IGltcGxlbWVudHMgdGhlIGNvZGVjIDIuMCBpbnRlcmZhY2UgQVBJLXMgZm9yIHNvbWUgcGFyYW1ldGVycy4KKyAqCisgKiBUaGlzIGNsYXNzIG11c3QgYmUgc3ViY2xhc3NlZC4KKyAqLworY2xhc3MgQzJJbnRlcmZhY2VIZWxwZXIgeworcHVibGljOgorICAgIC8qKgorICAgICAqIFJldHVybnMgdGhlIGJhc2Ugb2Zmc2V0IG9mIGEgZmllbGQgYXQgfG9mZnNldHwgdGhhdCBjb3VsZCBiZSBwYXJ0IG9mIGFuIGFycmF5IG9yIHBhcnQgb2YgYQorICAgICAqIHN1Yi1zdHJ1Y3R1cmUuCisgICAgICoKKyAgICAgKiBUaGlzIG1ldGhvZCBkb2VzIG5vdCBkbyBmaWVsZCBzaXplIHZlcmlmaWNhdGlvbiwgZS5nLiBpZiBvZmZzZXQgaWYgb2J0YWluZWQgZnJvbSBhIHN0cnVjdHVyZSwKKyAgICAgKiBpdCB3aWxsIG5vdCBzdG9wIGF0IHRoZSBzdHJ1Y3R1cmUgYm91bmRhcnkgLSB0aGlzIGlzIG9rYXksIGFzIHdlIGp1c3Qgd2FudCB0aGUgYmFzZSBvZmZzZXQKKyAgICAgKiBoZXJlLCB3aGljaCBpcyB0aGUgc2FtZS4KKyAgICAgKi8KKyAgICBzdGF0aWMKKyAgICBzaXplX3QgR2V0QmFzZU9mZnNldChjb25zdCBzdGQ6OnNoYXJlZF9wdHI8QzJQYXJhbVJlZmxlY3Rvcj4gJnJlZmxlY3RvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQzJQYXJhbTo6Q29yZUluZGV4IGluZGV4LCBzaXplX3Qgb2Zmc2V0KTsKKworICAgIC8qKgorICAgICAqIFRoZSBpbnRlcmZhY2UgaGVscGVyIGNsYXNzIHVzZXMgcmVmZXJlbmNlcyB0byBzdGQ6OnNoYXJlZF9wdHI8VD4gY29uZmlnIHBhcmFtZXRlcnMuCisgICAgICogSW50ZXJuYWxseSwgdGhlc2UgbmVlZCB0byBiZSBnZW5lcmFsaXplZCB0byBzdGQ6OnNoYXJlZF9wdHI8QzJQYXJhbT4gcmVmcywgYnV0IHRoZSBjYXN0IGlzCisgICAgICogbm90IGFsbG93ZWQgKGFzIHRoZXNlIGFyZSByZWZlcmVuY2VzKS4gQXMgc3VjaCwgdGhpcyBjbGFzcyBuZXZlciByZXR1cm5zIHBvaW50ZXIgdG8gdGhlCisgICAgICogc2hhcmVkX3B0cnMuCisgICAgICovCisgICAgc3RydWN0IFBhcmFtUmVmIHsKKyAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgZW5hYmxlPQorICAgICAgICAgICAgICAgIHR5cGVuYW1lIHN0ZDo6ZW5hYmxlX2lmPHN0ZDo6aXNfY29udmVydGlibGU8VCwgQzJQYXJhbT46OnZhbHVlPjo6dHlwZT4KKyAgICAgICAgaW5saW5lIEMyX0hJREUgUGFyYW1SZWYoc3RkOjpzaGFyZWRfcHRyPFQ+ICZwYXJhbSkKKyAgICAgICAgICAgIDogX21SZWYocmVpbnRlcnByZXRfY2FzdDxzdGQ6OnNoYXJlZF9wdHI8QzJQYXJhbT4qPigmcGFyYW0pKSB7IH0KKworICAgICAgICAvLyB1c2VkIGJ5IGNvbXBhcmlzb24gb3BlcmF0b3IgZm9yIGNvbnRhaW5lcnMKKyAgICAgICAgb3BlcmF0b3Igc3RkOjpzaGFyZWRfcHRyPEMyUGFyYW0+ICooKSBjb25zdCB7IHJldHVybiBfbVJlZjsgfQorCisgICAgICAgIC8qKgorICAgICAgICAgKiBSZXR1cm5zIGEgc2hhcmVkIHBvaW50ZXIgdG8gdGhlIHBhcmFtZXRlci4KKyAgICAgICAgICovCisgICAgICAgIHN0ZDo6c2hhcmVkX3B0cjxDMlBhcmFtPiBnZXQoKSBjb25zdCB7IHJldHVybiAqX21SZWY7IH0KKworICAgIHByaXZhdGU6CisgICAgICAgIHN0ZDo6c2hhcmVkX3B0cjxDMlBhcmFtPiAqX21SZWY7CisgICAgfTsKKworICAgIC8qKgorICAgICAqIEZpZWxkIGhlbHBlci4KKyAgICAgKgorICAgICAqIENvbnRhaW5zIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gZm9yIHRoZSBmaWVsZDogcG9zc2libGUgdmFsdWVzLCBhbmQgY3VycmVudGx5IHN1cHBvcnRlZAorICAgICAqIHZhbHVlcy4KKyAgICAgKi8KKyAgICBjbGFzcyBGaWVsZEhlbHBlciB7CisgICAgcHVibGljOgorICAgICAgICAvKioKKyAgICAgICAgICogQ3JlYXRlcyBoZWxwZXIgZm9yIGEgZmllbGQgd2l0aCBnaXZlbiBwb3NzaWJsZSB2YWx1ZXMuCisgICAgICAgICAqCisgICAgICAgICAqIFxwYXJhbSBwYXJhbSBwYXJhbWV0ZXIgcmVmZXJlbmNlLiBUaGUgcGFyYW1ldGVyIGRvZXMgbm90IGhhdmUgdG8gYmUgaW5pdGlhbGl6ZWQgYXQgdGhpcworICAgICAgICAgKiAgICAgICAgcG9pbnQuCisgICAgICAgICAqIFxwYXJhbSBmaWVsZCBmaWVsZCBpZGVudGlmaWVyCisgICAgICAgICAqIFxwYXJhbSB2YWx1ZXMgcG9zc2libGUgdmFsdWVzIGZvciB0aGUgZmllbGQKKyAgICAgICAgICovCisgICAgICAgIEZpZWxkSGVscGVyKGNvbnN0IFBhcmFtUmVmICZwYXJhbSwgY29uc3QgX0MyRmllbGRJZCAmZmllbGQsCisgICAgICAgICAgICAgICAgICAgIHN0ZDo6dW5pcXVlX3B0cjxDMkZpZWxkU3VwcG9ydGVkVmFsdWVzPiAmJnZhbHVlcyk7CisKKyAgICAgICAgLyoqCisgICAgICAgICAqIENyZWF0ZXMgYSBwYXJhbS1maWVsZCBpZGVudGlmaWVyIGZvciB0aGlzIGZpZWxkLiBUaGlzIG1ldGhvZCBpcyBjYWxsZWQgYWZ0ZXIgdGhlCisgICAgICAgICAqIHVuZGVybHlpbmcgcGFyYW1ldGVyIGhhcyBiZWVuIGluaXRpYWxpemVkLgorICAgICAgICAgKgorICAgICAgICAgKiBcYXJhbSBpbmRleAorICAgICAgICAgKgorICAgICAgICAgKiBAcmV0dXJuIEMyUGFyYW1GaWVsZAorICAgICAgICAgKi8KKyAgICAgICAgQzJQYXJhbUZpZWxkIG1ha2VQYXJhbUZpZWxkKEMyUGFyYW06OkluZGV4IGluZGV4KSBjb25zdDsKKworICAgICAgICAvKioKKyAgICAgICAgICogU2V0cyB0aGUgY3VycmVudGx5IHN1cHBvcnRlZCB2YWx1ZXMgZm9yIHRoaXMgZmllbGQuCisgICAgICAgICAqCisgICAgICAgICAqIFxwYXJhbSB2YWx1ZXMgY3VycmVudGx5IHN1cHBvcnRlZCB2YWx1ZXMgdGhhdCB3aWxsIGJlIG1vdmVkIG91dAorICAgICAgICAgKi8KKyAgICAgICAgdm9pZCBzZXRTdXBwb3J0ZWRWYWx1ZXMoc3RkOjp1bmlxdWVfcHRyPEMyRmllbGRTdXBwb3J0ZWRWYWx1ZXM+ICYmdmFsdWVzKTsKKworICAgICAgICAvKioKKyAgICAgICAgICogR2V0cyB0aGUgY3VycmVudGx5IHN1cHBvcnRlZCB2YWx1ZXMgZm9yIHRoaXMgZmllbGQuIFRoaXMgZGVmYXVsdHMgdG8gdGhlIHBvc3NpYmxlIHZhbHVlcworICAgICAgICAgKiBpZiBjdXJyZW50bHkgc3VwcG9ydGVkIHZhbHVlcyB3ZXJlIG5ldmVyIHNldC4KKyAgICAgICAgICovCisgICAgICAgIGNvbnN0IEMyRmllbGRTdXBwb3J0ZWRWYWx1ZXMgKmdldFN1cHBvcnRlZFZhbHVlcygpIGNvbnN0OworCisgICAgICAgIC8qKgorICAgICAgICAgKiBHZXRzIHRoZSBwb3NzaWJsZSB2YWx1ZXMgZm9yIHRoaXMgZmllbGQuCisgICAgICAgICAqLworICAgICAgICBjb25zdCBDMkZpZWxkU3VwcG9ydGVkVmFsdWVzICpnZXRQb3NzaWJsZVZhbHVlcygpIGNvbnN0OworCisgICAgcHJvdGVjdGVkOgorICAgICAgICAvLyBUT0RPOiBtb3ZlIHRvIGltcGwgZm9yIHNhZmV0eQorICAgICAgICBQYXJhbVJlZiBtUGFyYW07CisgICAgICAgIF9DMkZpZWxkSWQgbUZpZWxkSWQ7CisgICAgICAgIHN0ZDo6dW5pcXVlX3B0cjxDMkZpZWxkU3VwcG9ydGVkVmFsdWVzPiBtUG9zc2libGU7CisgICAgICAgIHN0ZDo6dW5pcXVlX3B0cjxDMkZpZWxkU3VwcG9ydGVkVmFsdWVzPiBtU3VwcG9ydGVkOyAvLy88IGlmIGRpZmZlcmVudCBmcm9tIHBvc3NpYmxlCisgICAgfTsKKworICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+CisgICAgc3RydWN0IEMyX0hJREUgUGFyYW07CisgICAgY2xhc3MgUGFyYW1IZWxwZXI7CisKKyAgICAvKioKKyAgICAgKiBGYWN0b3J5IGlzIGFuIGludGVyZmFjZSB0byBnZXQgdGhlIHBhcmFtZXRlciBoZWxwZXJzIGZyb20gYSBzdGQ6OnNoYXJlZF9wdHI8VD4gJi4KKyAgICAgKi8KKyAgICBjbGFzcyBGYWN0b3J5IHsKKyAgICAgICAgLy8gXHRvZG8gdGhpcyBtYXkgYmUgYWxyZWFkeSBpbiBQYXJhbUhlbHBlcgorICAgICAgICB2aXJ0dWFsIHN0ZDo6c2hhcmVkX3B0cjxDMlBhcmFtUmVmbGVjdG9yPiBnZXRSZWZsZWN0b3IoKSBjb25zdCA9IDA7CisKKyAgICAgICAgdmlydHVhbCBzdGQ6OnNoYXJlZF9wdHI8UGFyYW1IZWxwZXI+IGdldFBhcmFtSGVscGVyKGNvbnN0IFBhcmFtUmVmICZwYXJhbSkgY29uc3QgPSAwOworCisgICAgcHVibGljOgorICAgICAgICB2aXJ0dWFsIH5GYWN0b3J5KCkgPSBkZWZhdWx0OworCisgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+CisgICAgICAgIFBhcmFtPFQ+IGdldChzdGQ6OnNoYXJlZF9wdHI8VD4gJnBhcmFtLCBzdGQ6OnNoYXJlZF9wdHI8VD4gYWx0VmFsdWUgPSBudWxscHRyKSBjb25zdCB7CisgICAgICAgICAgICByZXR1cm4gUGFyYW08VD4oZ2V0UGFyYW1IZWxwZXIoUGFyYW1SZWYocGFyYW0pKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbHRWYWx1ZSA9PSBudWxscHRyID8gcGFyYW0gOiBhbHRWYWx1ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZXRSZWZsZWN0b3IoKSk7CisgICAgICAgIH0KKyAgICB9OworCisgICAgLyoqCisgICAgICogVHlwZWQgZmllbGQgaGVscGVyLgorICAgICAqLworICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+CisgICAgc3RydWN0IEZpZWxkIHsKKyAgICAgICAgLyoqCisgICAgICAgICAqIENvbnN0cnVjdG9yLgorICAgICAgICAgKgorICAgICAgICAgKiBccGFyYW0gaGVscGVyIGhlbHBlciBmb3IgdGhpcyBmaWVsZAorICAgICAgICAgKiBccGFyYW0gaW5kZXggIHBhcmFtZXRlciBpbmRleCAodGhpcyBpcyBuZWVkZWQgYXMgaXQgaXMgbm90IGF2YWlsYWJsZSBkdXJpbmcgcGFyYW1ldGVyCisgICAgICAgICAqICAgICAgICBjb25zdHJ1Y3Rpb24pIFx0b2RvIHJlbW92ZQorICAgICAgICAgKi8KKyAgICAgICAgRmllbGQoc3RkOjpzaGFyZWRfcHRyPEZpZWxkSGVscGVyPiBoZWxwZXIsIEMyUGFyYW06OkluZGV4IGluZGV4KTsKKworICAgICAgICBib29sIHN1cHBvcnRzQXRBbGwoVCB2YWx1ZSkgY29uc3QgeworICAgICAgICAgICAgcmV0dXJuIEMyRmllbGRTdXBwb3J0ZWRWYWx1ZXNIZWxwZXI8VD4oKl9tSGVscGVyLT5nZXRQb3NzaWJsZVZhbHVlcygpKS5zdXBwb3J0cyh2YWx1ZSk7CisgICAgICAgIH0KKworICAgICAgICBib29sIHN1cHBvcnRzTm93KFQgdmFsdWUpIGNvbnN0IHsKKyAgICAgICAgICAgIHJldHVybiBDMkZpZWxkU3VwcG9ydGVkVmFsdWVzSGVscGVyPFQ+KCpfbUhlbHBlci0+Z2V0U3VwcG9ydGVkVmFsdWVzKCkpLnN1cHBvcnRzKHZhbHVlKTsKKyAgICAgICAgfQorCisgICAgICAgIC8qKgorICAgICAgICAgKiBDcmVhdGVzIGEgY29uZmxpY3QgcmVzb2x1dGlvbiBzdWdnZXN0aW9uIGJ1aWxkZXIgZm9yIHRoaXMgZmllbGQuCisgICAgICAgICAqLworICAgICAgICBDMlBhcmFtRmllbGRWYWx1ZXNCdWlsZGVyPFQ+IHNob3VsZEJlKCkgY29uc3Q7CisKKyAgICAgICAgLyoqCisgICAgICAgICAqIENyZWF0ZXMgYSBjdXJyZW50bHkgc3VwcG9ydGVkIHZhbHVlcyBidWlsZGVyIGZvciB0aGlzIGZpZWxkLiBUaGlzIGlzIG9ubHkgc3VwcG9ydGVkCisgICAgICAgICAqIGZvciBub24tY29uc3QgZmllbGRzIHRvIGRpc2FsbG93IHNldHRpbmcgc3VwcG9ydGVkIHZhbHVlcyBmb3IgZGVwZW5kZW5jaWVzLgorICAgICAgICAgKi8KKyAgICAgICAgQzJQYXJhbUZpZWxkVmFsdWVzQnVpbGRlcjxUPiBtdXN0QmUoKTsKKworICAgICAgICBvcGVyYXRvciBDMlBhcmFtRmllbGQoKSBjb25zdCB7CisgICAgICAgICAgICByZXR1cm4gX21GaWVsZDsKKyAgICAgICAgfQorCisgICAgICAgIC8vIFRPRE8KKyAgICAgICAgQzJSIHZhbGlkYXRlUG9zc2libGUoY29uc3QgVCAmdmFsdWUgX191bnVzZWQpIGNvbnN0IHsKKyAgICAgICAgICAgIC8vLyBUT0RPCisgICAgICAgICAgICByZXR1cm4gQzJSOjpPaygpOworICAgICAgICB9CisKKyAgICBwcml2YXRlOgorICAgICAgICBzdGQ6OnNoYXJlZF9wdHI8RmllbGRIZWxwZXI+IF9tSGVscGVyOworICAgICAgICBDMlBhcmFtRmllbGQgX21GaWVsZDsKKyAgICB9OworCisgICAgY2xhc3MgUGFyYW1IZWxwZXIgeworICAgIHB1YmxpYzoKKyAgICAgICAgUGFyYW1IZWxwZXIoUGFyYW1SZWYgcGFyYW0sIEMyU3RyaW5nTGl0ZXJhbCBuYW1lLCBDMlN0cnVjdERlc2NyaXB0b3IgJiYpOworICAgICAgICBQYXJhbUhlbHBlcihQYXJhbUhlbHBlciAmJik7CisgICAgICAgIH5QYXJhbUhlbHBlcigpOworCisgICAgICAgIC8qKgorICAgICAgICAgKiBGaW5kcyBhIGZpZWxkIGRlc2NyaXB0b3IuCisgICAgICAgICAqLworICAgICAgICBzdGQ6OnNoYXJlZF9wdHI8RmllbGRIZWxwZXI+IGZpbmRGaWVsZChzaXplX3QgYmFzZU9mZnMsIHNpemVfdCBiYXNlU2l6ZSkgY29uc3Q7CisKKyAgICAgICAgLy8vIHJldHVybnMgdGhlIHBhcmFtZXRlciByZWYgZm9yIHRoaXMgcGFyYW1ldGVyCisgICAgICAgIGNvbnN0IFBhcmFtUmVmIHJlZigpIGNvbnN0OworCisgICAgICAgIC8vLyByZXR1cm5zIHRoZSBjdXJyZW50IHZhbHVlIG9mIHRoaXMgcGFyYW1ldGVyIGFzIG1vZGlmaWFibGUuIFRoZSBjb25zdG5lc3Mgb2YgdGhpcworICAgICAgICAvLy8gb2JqZWN0IGRldGVybWluZXMgdGhlIGNvbnN0bmVzcyBvZiB0aGUgcmV0dXJuZWQgdmFsdWUuCisgICAgICAgIHN0ZDo6c2hhcmVkX3B0cjxDMlBhcmFtPiB2YWx1ZSgpOworCisgICAgICAgIC8vLyByZXR1cm5zIHRoZSBjdXJyZW50IHZhbHVlIG9mIHRoaXMgcGFyYW1ldGVyIGFzIGNvbnN0CisgICAgICAgIHN0ZDo6c2hhcmVkX3B0cjxjb25zdCBDMlBhcmFtPiB2YWx1ZSgpIGNvbnN0OworCisgICAgICAgIC8qKgorICAgICAgICAgKiBQZXJmb3JtcyBhIGNvbmZpZ3VyYXRpb24gY2hhbmdlIHJlcXVlc3QgZm9yIHRoaXMgcGFyYW1ldGVyLgorICAgICAgICAgKgorICAgICAgICAgKiBccGFyYW0gdmFsdWUgICAgdGhlIHZhbHVlIHRoYXQgaXMgYmVpbmcgYXNzaWduZWQgdG8gdGhpcyBwYXJhbWV0ZXIuCisgICAgICAgICAqICAgICAgICAgICAgICAgICBUaGlzIGNvdWxkIGJlIHBvaW50aW5nIHRvIHRoZSBjdXJyZW50IHZhbHVlIG9mIHRoZQorICAgICAgICAgKiAgICAgICAgICAgICAgICAgcGFyYW1ldGVyLiBUaGlzIG11c3Qgbm90IGNoYW5nZS4KKyAgICAgICAgICogXHBhcmFtIG1heUJsb2NrIHdoZXRoZXIgYmxvY2tpbmcgaXMgYWxsb3dlZAorICAgICAgICAgKiBccGFyYW0gZW5kVmFsdWUgdGhlIHJlc3VsdGluZyB2YWx1ZQorICAgICAgICAgKiBccGFyYW0gZmFjdG9yeSAgcGFyYW1ldGVyIGZhY3RvcnkgKHRvIGFjY2VzcyBkZXBlbmRlbmNpZXMpCisgICAgICAgICAqIFxwYXJhbSBmYWlsdXJlcyB2ZWN0b3Igb2YgZmFpbHVyZXMgdG8gYXBwZW5kIGFueSBmYWlsdXJlcyBmcm9tIHRoaXMKKyAgICAgICAgICogICAgICAgICAgICAgICAgIG9wZXJhdGlvbgorICAgICAgICAgKgorICAgICAgICAgKiBccmV0dmFsIEMyX09LICAgICAgICBjb25maWd1cmF0aW9uIHdhcyBzdWNjZXNzZnVsCisgICAgICAgICAqIFxyZXR2YWwgQzJfQkFEX1ZBTFVFIHZhbHVlIGlzIGluY29ycmVjdCAoVEJEKQorICAgICAgICAgKiBccmV0dmFsIEMyX05PX01FTU9SWSBub3QgZW5vdWdoIG1lbW9yeSB0byBwZXJmb3JtIHRoZSBhc3NpZ25tZW50CisgICAgICAgICAqIFxyZXR2YWwgQzJfVElNRURfT1VUIGNvbmZpZ3VyYXRpb24gdGltZWQgb3V0CisgICAgICAgICAqIFxyZXR2YWwgQzJfQkxPQ0tJTkcgIGNvbmZpZ3VyYXRpb24gcmVxdWlyZXMgYmxvY2tpbmcgdG8gYmUgYWxsb3dlZAorICAgICAgICAgKiBccmV0dmFsIEMyX0NPUlJVUFRFRCBpbnRlcmZhY2UgaXMgY29ycnVwdGVkCisgICAgICAgICAqLworICAgICAgICBjMl9zdGF0dXNfdCB0cnlTZXQoCisgICAgICAgICAgICAgICAgY29uc3QgQzJQYXJhbSAqdmFsdWUsIGJvb2wgbWF5QmxvY2ssCisgICAgICAgICAgICAgICAgYm9vbCAqY2hhbmdlZCwKKyAgICAgICAgICAgICAgICBGYWN0b3J5ICZmYWN0b3J5LAorICAgICAgICAgICAgICAgIHN0ZDo6dmVjdG9yPHN0ZDo6dW5pcXVlX3B0cjxDMlNldHRpbmdSZXN1bHQ+PiogY29uc3QgZmFpbHVyZXMpOworCisgICAgICAgIC8vLyByZXR1cm5zIHBhcmFtZXRlciBpbmRpY2VzIHRoYXQgZGVwZW5kIG9uIHRoaXMgcGFyYW1ldGVyCisgICAgICAgIGNvbnN0IHN0ZDo6dmVjdG9yPEMyUGFyYW06OkluZGV4PiBnZXREb3duRGVwZW5kZW5jaWVzKCkgY29uc3Q7CisKKyAgICAgICAgLy8vIGFkZHMgYSBkZXBlbmRlbnQgcGFyYW1ldGVyCisgICAgICAgIHZvaWQgYWRkRG93bkRlcGVuZGVuY3koQzJQYXJhbTo6SW5kZXggaW5kZXgpOworCisgICAgICAgIC8vLyByZXR1cm5zIHRoYXQgcGFyYW1ldGVyIHJlZnMgZm9yIHBhcmFtZXRlcnMgdGhhdCBkZXBlbmQgb24gdGhpcworICAgICAgICBjb25zdCBzdGQ6OnZlY3RvcjxQYXJhbVJlZj4gZ2V0RGVwZW5kZW5jaWVzQXNSZWZzKCkgY29uc3Q7CisKKyAgICAgICAgLy8vIHJldHVybnMgYW5kIG1vdmVzIG91dCBzdG9yZWQgc3RydWN0IGRlc2NyaXB0b3IKKyAgICAgICAgQzJTdHJ1Y3REZXNjcmlwdG9yIHJldHJpZXZlU3RydWN0RGVzY3JpcHRvcigpOworCisgICAgICAgIC8vLyByZXR1cm5zIHRoZSBuYW1lIG9mIHRoaXMgcGFyYW1ldGVyCisgICAgICAgIEMyU3RyaW5nIG5hbWUoKSBjb25zdDsKKworICAgICAgICAvLy8gcmV0dXJucyB0aGUgaW5kZXggb2YgdGhpcyBwYXJhbWV0ZXIKKyAgICAgICAgQzJQYXJhbTo6SW5kZXggaW5kZXgoKSBjb25zdDsKKworICAgICAgICAvLy8gcmV0dXJucyB0aGUgcGFyYW1ldGVyIGRlc2NyaXB0b3IKKyAgICAgICAgc3RkOjpzaGFyZWRfcHRyPGNvbnN0IEMyUGFyYW1EZXNjcmlwdG9yPiBnZXREZXNjcmlwdG9yKCkgY29uc3Q7CisKKyAgICAgICAgLyoqCisgICAgICAgICAqIFZhbGlkYXRlcyBwYXJhbSBoZWxwZXIuCisgICAgICAgICAqCisgICAgICAgICAqIEZvciBub3csIHRoaXMgZmlsbHMgZmllbGQgaW5mbyBmb3IgY29uc3QgcGFyYW1zLgorICAgICAgICAgKgorICAgICAgICAgKiBccmV0dmFsIEMyX0NPUlJVUFRFRCB0aGUgcGFyYW1ldGVyIGNhbm5vdCBiZSBhZGRlZCBhcyBzdWNoCisgICAgICAgICAqLworICAgICAgICBjMl9zdGF0dXNfdCB2YWxpZGF0ZShjb25zdCBzdGQ6OnNoYXJlZF9wdHI8QzJQYXJhbVJlZmxlY3Rvcj4gJnJlZmxlY3Rvcik7CisKKyAgICBwcm90ZWN0ZWQ6CisgICAgICAgIHR5cGVkZWYgQzJQYXJhbURlc2NyaXB0b3I6OmF0dHJpYl90IGF0dHJpYl90OworICAgICAgICBhdHRyaWJfdCYgYXR0cmliKCk7CisKKyAgICAgICAgLy8vIHNldHMgdGhlIGRlZmF1bHQgdmFsdWUgb2YgdGhpcyBwYXJhbWV0ZXIKKyAgICAgICAgdm9pZCBzZXREZWZhdWx0VmFsdWUoc3RkOjpzaGFyZWRfcHRyPEMyUGFyYW0+IGRlZmF1bHRfKTsKKworICAgICAgICAvLy8gc2V0cyB0aGUgc2V0dGVyIG1ldGhvZAorICAgICAgICB2b2lkIHNldFNldHRlcihzdGQ6OmZ1bmN0aW9uPEMyUihjb25zdCBDMlBhcmFtICosIGJvb2wsIGJvb2wgKiwgRmFjdG9yeSAmKT4gc2V0dGVyKTsKKworICAgICAgICAvLy8gc2V0cyB0aGUgZ2V0dGVyIG1ldGhvZAorICAgICAgICB2b2lkIHNldEdldHRlcihzdGQ6OmZ1bmN0aW9uPHN0ZDo6c2hhcmVkX3B0cjxDMlBhcmFtPihib29sKT4gZ2V0dGVyKTsKKworICAgICAgICAvLy8gc2V0cyB0aGUgZGVwZW5kZW5jaWVzCisgICAgICAgIHZvaWQgc2V0RGVwZW5kZW5jaWVzKHN0ZDo6dmVjdG9yPEMyUGFyYW06OkluZGV4PiBpbmRpY2VzLCBzdGQ6OnZlY3RvcjxQYXJhbVJlZj4gcmVmcyk7CisKKyAgICAgICAgLy8vIHNldHMgdGhlIGZpZWxkcyBhbmQgdGhlaXIgc3VwcG9ydGVkIHZhbHVlcworICAgICAgICB2b2lkIHNldEZpZWxkcyhzdGQ6OnZlY3RvcjxDMlBhcmFtRmllbGRWYWx1ZXM+ICYmZmllbGRzKTsKKworICAgICAgICAvLy8gYnVpbGQgdGhpcyBpbnRvIGEgZmluYWwgUGFyYW1IZWxwZXIgb2JqZWN0CisgICAgICAgIHN0ZDo6c2hhcmVkX3B0cjxQYXJhbUhlbHBlcj4gYnVpbGQoKTsKKworICAgICAgICBjbGFzcyBJbXBsOworICAgICAgICBzdGQ6OnVuaXF1ZV9wdHI8SW1wbD4gbUltcGw7CisgICAgfTsKKworICAgIC8qKgorICAgICAqIFR5cGVkIHBhcmFtZXRlciBoZWxwZXIuIFRoaXMgcHJvdmlkZXMgYWNjZXNzIHRvIG1lbWJlcnMgYXMgd2VsbCBhcyBmaWVsZCBoZWxwZXJzLgorICAgICAqLworICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+CisgICAgc3RydWN0IEMyX0hJREUgUGFyYW0geworICAgICAgICBQYXJhbSgKKyAgICAgICAgICAgICAgICBzdGQ6OnNoYXJlZF9wdHI8UGFyYW1IZWxwZXI+IGhlbHBlciwgc3RkOjpzaGFyZWRfcHRyPFQ+ICZwYXJhbSwKKyAgICAgICAgICAgICAgICBzdGQ6OnNoYXJlZF9wdHI8QzJQYXJhbVJlZmxlY3Rvcj4gcmVmbGVjdG9yKQorICAgICAgICAgICAgOiB2KCpwYXJhbS5nZXQoKSksCisgICAgICAgICAgICAgIF9tVHlwZWRQYXJhbShwYXJhbSksCisgICAgICAgICAgICAgIF9tSGVscGVyKGhlbHBlciksCisgICAgICAgICAgICAgIF9tUmVmbGVjdG9yKHJlZmxlY3RvcikgeyB9CisKKyAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgUz4KKyAgICAgICAgdXNpbmcgRmllbGRUeXBlID0gRmllbGQ8CisgICAgICAgICAgICAgICAgdHlwZW5hbWUgX2MyX3JlZHVjZV9lbnVtX3RvX3VuZGVybHlpbmdfdHlwZTwKKyAgICAgICAgICAgICAgICAgICAgICAgIHR5cGVuYW1lIHN0ZDo6cmVtb3ZlX2NvbnN0PAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlbmFtZSBzdGQ6OnJlbW92ZV9leHRlbnQ8Uz46OnR5cGU+Ojp0eXBlPjo6dHlwZT47CisKKyAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgUz4KKyAgICAgICAgRmllbGRUeXBlPFM+IEYoUyAmZmllbGQpIHsKKyAgICAgICAgICAgIHNpemVfdCBvZmZzID0gKHVpbnRwdHJfdCkmZmllbGQgLSAodWludHB0cl90KSZnZXQoKTsKKyAgICAgICAgICAgIC8vIHRoaXMgbXVzdCBmYWxsIGVpdGhlciB3aXRoaW4gc2l6ZW9mKFQpICsgRkxFWF9TSVpFIG9yIHBhcmFtLT5zaXplKCkKKyAgICAgICAgICAgIC8vIHNpemVfdCBzaXplID0gc2l6ZW9mKGZpZWxkKTsKKyAgICAgICAgICAgIC8vIG1QYXJhbSBtYXkgYmUgbnVsbAorICAgICAgICAgICAgc2l6ZV90IGJhc2VTaXplID0gc2l6ZW9mKHR5cGVuYW1lIHN0ZDo6cmVtb3ZlX2V4dGVudDxTPjo6dHlwZSk7CisgICAgICAgICAgICBzaXplX3QgYmFzZU9mZnMgPSBHZXRCYXNlT2Zmc2V0KAorICAgICAgICAgICAgICAgICAgICBfbVJlZmxlY3RvciwgVDo6Q09SRV9JTkRFWCwgb2ZmcyAtIHNpemVvZihDMlBhcmFtKSk7CisgICAgICAgICAgICBpZiAofmJhc2VPZmZzID09IDApIHsKKyAgICAgICAgICAgICAgICAvLyBDMl9MT0coRkFUQUwpIDw8ICJ1bmtub3duIGZpZWxkIGF0IG9mZnNldCAiIDw8IG9mZnMgPDwgIiBzaXplICIgPDwgc2l6ZW9mKFMpCisgICAgICAgICAgICAgICAgLy8gICAgICAgPDwgIiBiYXNlLXNpemUgIiA8PCBiYXNlU2l6ZTsKKyAgICAgICAgICAgICAgICAvLyBfX2J1aWx0aW5fdHJhcCgpOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBiYXNlT2ZmcyArPSBzaXplb2YoQzJQYXJhbSk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHN0ZDo6c2hhcmVkX3B0cjxGaWVsZEhlbHBlcj4gaGVscGVyID0gX21IZWxwZXItPmZpbmRGaWVsZChiYXNlT2ZmcywgYmFzZVNpemUpOworICAgICAgICAgICAgcmV0dXJuIEZpZWxkVHlwZTxTPihoZWxwZXIsIF9tVHlwZWRQYXJhbS0+aW5kZXgoKSk7CisgICAgICAgIH0KKworICAgICAgICAvLyBjb25zdCBQYXJhbSBoYXZlIGNvbnN0IEZpZWxkczsgaG93ZXZlciwgcmVtb3ZlIGNvbnN0IGZyb20gUworICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBTPgorICAgICAgICBjb25zdCBGaWVsZFR5cGU8Uz4gRihTICZmaWVsZCkgY29uc3QgeworICAgICAgICAgICAgcmV0dXJuIGNvbnN0X2Nhc3Q8Y29uc3QgRmllbGRUeXBlPFM+Pihjb25zdF9jYXN0PFBhcmFtICo+KHRoaXMpLT5GKGZpZWxkKSk7CisgICAgICAgIH0KKworICAgICAgICAvLy8gUmV0dXJucyBhIGNvbnN0IHJlZiB2YWx1ZSBvZiB0aGlzIGNvbnN0IHBhcmFtLgorICAgICAgICBjb25zdCBUICZnZXQoKSBjb25zdCB7CisgICAgICAgICAgICByZXR1cm4gKl9tVHlwZWRQYXJhbS5nZXQoKTsKKyAgICAgICAgfQorCisgICAgICAgIC8vLyBSZXR1cm5zIGEgbW9kaWZpYWJsZSByZWYgdmFsdWUgb2YgdGhpcyBub24tY29uc3QgcGFyYW0uCisgICAgICAgIFQgJnNldCgpIHsKKyAgICAgICAgICAgIHJldHVybiAqX21UeXBlZFBhcmFtLmdldCgpOworICAgICAgICB9CisKKyAgICAgICAgLy8vIENvbnN0LXJlZmVyZW5jZSB0byB0aGUgdmFsdWUucworICAgICAgICBUIGNvbnN0ICZ2OworCisgICAgcHJpdmF0ZToKKyAgICAgICAgc3RkOjpzaGFyZWRfcHRyPFQ+IF9tVHlwZWRQYXJhbTsKKyAgICAgICAgc3RkOjpzaGFyZWRfcHRyPFBhcmFtSGVscGVyPiBfbUhlbHBlcjsKKyAgICAgICAgc3RkOjpzaGFyZWRfcHRyPEMyUGFyYW1SZWZsZWN0b3I+IF9tUmVmbGVjdG9yOworICAgIH07CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgorICAgIHVzaW5nIEMyUCA9IFBhcmFtPFQ+OworCisgICAgLyoqCisgICAgICogVGVtcGxhdGVkIG1vdmUgYnVpbGRlciBjbGFzcyBmb3IgYSBwYXJhbWV0ZXIgaGVscGVyLgorICAgICAqLworICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+CisgICAgY2xhc3MgQzJfSElERSBQYXJhbUJ1aWxkZXIgOiBwcml2YXRlIFBhcmFtSGVscGVyIHsKKyAgICBwdWJsaWM6CisgICAgICAgIC8qKiBDb25zdHJ1Y3QgdGhlIHBhcmFtZXRlciBidWlsZGVyIGZyb20gbWluaW1hbCBpbmZvIHJlcXVpcmVkLiAqLworICAgICAgICBQYXJhbUJ1aWxkZXIoc3RkOjpzaGFyZWRfcHRyPFQ+ICZwYXJhbSwgQzJTdHJpbmdMaXRlcmFsIG5hbWUpCisgICAgICAgICAgICA6IFBhcmFtSGVscGVyKHBhcmFtLCBuYW1lLCBDMlN0cnVjdERlc2NyaXB0b3IoKFQqKW51bGxwdHIpKSwKKyAgICAgICAgICAgICAgbVR5cGVkUGFyYW0oJnBhcmFtKSB7CisgICAgICAgICAgICBhdHRyaWIoKSA9IGF0dHJpYl90OjpJU19QRVJTSVNURU5UOworICAgICAgICB9CisKKyAgICAgICAgLyoqIE1ha2VzIHRoaXMgcGFyYW1ldGVyIHJlcXVpcmVkLiAqLworICAgICAgICBpbmxpbmUgUGFyYW1CdWlsZGVyICZyZXF1aXJlZCgpIHsKKyAgICAgICAgICAgIGF0dHJpYigpIHw9IGF0dHJpYl90OjpJU19SRVFVSVJFRDsKKyAgICAgICAgICAgIHJldHVybiAqdGhpczsKKyAgICAgICAgfQorCisgICAgICAgIC8qKiBNYWtlcyB0aGlzIHBhcmFtZXRlciB0cmFuc2llbnQgKG5vdCBwZXJzaXN0ZW50KS4gKi8KKyAgICAgICAgaW5saW5lIFBhcmFtQnVpbGRlciAmdHJhbnNpZW50KCkgeworICAgICAgICAgICAgYXR0cmliKCkgJj0gfmF0dHJpYl90OjpJU19QRVJTSVNURU5UOworICAgICAgICAgICAgcmV0dXJuICp0aGlzOworICAgICAgICB9CisKKyAgICAgICAgLyoqIE1ha2VzIHRoaXMgcGFyYW1ldGVyIGhpZGRlbiAobm90IGV4cG9zZWQgaW4gSkFWQSBBUEkpLiAqLworICAgICAgICBpbmxpbmUgUGFyYW1CdWlsZGVyICZoaWRkZW4oKSB7CisgICAgICAgICAgICBhdHRyaWIoKSB8PSBhdHRyaWJfdDo6SVNfSElEREVOOworICAgICAgICAgICAgcmV0dXJuICp0aGlzOworICAgICAgICB9CisKKyAgICAgICAgLyoqIE1ha2VzIHRoaXMgcGFyYW1ldGVyIGludGVybmFsIChub3QgZXhwb3NlZCB0byBxdWVyeS9zZXR0aW5ncykuICovCisgICAgICAgIGlubGluZSBQYXJhbUJ1aWxkZXIgJmludGVybmFsKCkgeworICAgICAgICAgICAgYXR0cmliKCkgfD0gYXR0cmliX3Q6OklTX0lOVEVSTkFMOworICAgICAgICAgICAgcmV0dXJuICp0aGlzOworICAgICAgICB9CisKKyAgICAgICAgLyoqIEFkZHMgZGVmYXVsdCB2YWx1ZS4gTXVzdCBiZSBhZGRlZCBleGFjdGx5IG9uY2UuICovCisgICAgICAgIGlubGluZSBQYXJhbUJ1aWxkZXIgJndpdGhEZWZhdWx0KHN0ZDo6c2hhcmVkX3B0cjxUPiBkZWZhdWx0XykgeworICAgICAgICAgICAgLy8gQ0hFQ0soIW1EZWZhdWx0VmFsdWUpOworICAgICAgICAgICAgLy8gV0FSTl9JRighZGVmYXVsdF8pOyAvLyBjb3VsZCBiZSBudWxscHRyIGlmIE9PTQorICAgICAgICAgICAgLy8gdGVjaG5pY2FsbHksIHRoaXMgY291bGQgYmUgaW4gdGhlIHBhcmVudAorICAgICAgICAgICAgKm1UeXBlZFBhcmFtID0gc3RkOjpzaGFyZWRfcHRyPFQ+KFQ6OkZyb20oQzJQYXJhbTo6Q29weSgqZGVmYXVsdF8pLnJlbGVhc2UoKSkpOworICAgICAgICAgICAgc2V0RGVmYXVsdFZhbHVlKGRlZmF1bHRfKTsKKyAgICAgICAgICAgIHN0ZDo6c2hhcmVkX3B0cjxUPiAqdHlwZWRQYXJhbSA9IG1UeXBlZFBhcmFtOworICAgICAgICAgICAgc2V0R2V0dGVyKFt0eXBlZFBhcmFtXShib29sKSAtPiBzdGQ6OnNoYXJlZF9wdHI8QzJQYXJhbT4geworICAgICAgICAgICAgICAgIHJldHVybiBzdGQ6OnN0YXRpY19wb2ludGVyX2Nhc3Q8QzJQYXJhbT4oKnR5cGVkUGFyYW0pOworICAgICAgICAgICAgfSk7CisgICAgICAgICAgICByZXR1cm4gKnRoaXM7CisgICAgICAgIH0KKworICAgICAgICAvKiogQWRkcyBkZWZhdWx0IHZhbHVlLiBNdXN0IGJlIGFkZGVkIGV4YWN0bHkgb25jZS4gKi8KKyAgICAgICAgaW5saW5lIFBhcmFtQnVpbGRlciAmd2l0aERlZmF1bHQoVCAqZGVmYXVsdF8pIHsKKyAgICAgICAgICAgIHJldHVybiB3aXRoRGVmYXVsdChzdGQ6OnNoYXJlZF9wdHI8VD4oZGVmYXVsdF8pKTsKKyAgICAgICAgfQorCisgICAgICAgIC8qKiBBZGRzIGFsbCBmaWVsZHMgdG8gdGhpcyBwYXJhbWV0ZXIgd2l0aCB0aGVpciBwb3NzaWJsZSB2YWx1ZXMuICovCisgICAgICAgIGlubGluZSBQYXJhbUJ1aWxkZXIgJndpdGhGaWVsZHMoc3RkOjp2ZWN0b3I8QzJQYXJhbUZpZWxkVmFsdWVzPiAmJmZpZWxkc18pIHsKKyAgICAgICAgICAgIHNldEZpZWxkcyhzdGQ6Om1vdmUoZmllbGRzXykpOworICAgICAgICAgICAgcmV0dXJuICp0aGlzOworICAgICAgICB9CisKKyAgICAgICAgLyoqCisgICAgICAgICAqIEFkZHMgYSBjb25zdGFudCB2YWx1ZSAoYWxzbyBhcyBkZWZhdWx0KS4gTXVzdCBiZSBhZGRlZCBleGFjdGx5IG9uY2UuCisgICAgICAgICAqCisgICAgICAgICAqIENvbnN0IHBhcmFtZXRlcnMgYnkgZGVmaW5pdGlvbiBoYXZlIG5vIGRlcGVuZGVuY2llcy4KKyAgICAgICAgICovCisgICAgICAgIGlubGluZSBQYXJhbUJ1aWxkZXIgJndpdGhDb25zdFZhbHVlKHN0ZDo6c2hhcmVkX3B0cjxUPiBkZWZhdWx0XykgeworICAgICAgICAgICAgYXR0cmliKCkgfD0gYXR0cmliX3Q6OklTX0NPTlNUOworICAgICAgICAgICAgc2V0U2V0dGVyKFtkZWZhdWx0X10oCisgICAgICAgICAgICAgICAgICAgIGNvbnN0IEMyUGFyYW0gKnZhbHVlLCBib29sIG1heUJsb2NrIF9fdW51c2VkLCBib29sICpjaGFuZ2VkLCBGYWN0b3J5ICYpIC0+IEMyUiB7CisgICAgICAgICAgICAgICAgKmNoYW5nZWQgPSBmYWxzZTsKKyAgICAgICAgICAgICAgICBjb25zdCBUICp0eXBlZFZhbHVlID0gVDo6RnJvbSh2YWx1ZSk7CisgICAgICAgICAgICAgICAgaWYgKHR5cGVkVmFsdWUgPT0gbnVsbHB0cikgeworICAgICAgICAgICAgICAgICAgICByZXR1cm4gQzJSOjpDb3JydXB0ZWQoKTsgLy8gVE9ETyBCYWRWYWx1ZS9JbnZhbGlkLiBUaGlzIHNob3VsZCBub3QgaGFwcGVuIGhlcmUuCisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGlmICgqdHlwZWRWYWx1ZSAhPSAqZGVmYXVsdF8pIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEMyUjo6Q29ycnVwdGVkKCk7IC8vIFRPRE8gUmVhZE9ubHkoKmRlZmF1bHRfKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgKmNoYW5nZWQgPSBmYWxzZTsKKyAgICAgICAgICAgICAgICByZXR1cm4gQzJSOjpPaygpOworICAgICAgICAgICAgfSk7CisgICAgICAgICAgICByZXR1cm4gd2l0aERlZmF1bHQoZGVmYXVsdF8pOworICAgICAgICB9CisKKyAgICAgICAgLyoqIEFkZHMgY29uc3RhbnQgdmFsdWUgKGFsc28gYXMgZGVmYXVsdCkuIE11c3QgYmUgYWRkZWQgZXhhY3RseSBvbmNlLiAqLworICAgICAgICBpbmxpbmUgUGFyYW1CdWlsZGVyICZ3aXRoQ29uc3RWYWx1ZShUICpkZWZhdWx0XykgeworICAgICAgICAgICAgcmV0dXJuIHdpdGhDb25zdFZhbHVlKHN0ZDo6c2hhcmVkX3B0cjxUPihkZWZhdWx0XykpOworICAgICAgICB9CisKKyAgICAgICAgLyoqCisgICAgICAgICAqIFVzZSBhIHN0cmljdCBzZXR0ZXIuCisgICAgICAgICAqCisgICAgICAgICAqIFxwYXJhbSBmbiAgIHN0cmljdCBzZXR0ZXIKKyAgICAgICAgICogXHBhcmFtIGRlcHMgZGVwZW5kZW5jaWVzIChyZWZlcmVuY2VzKQorICAgICAgICAgKi8KKyAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgLi4uIERlcHM+CisgICAgICAgIGlubGluZSBQYXJhbUJ1aWxkZXIgJndpdGhTZXR0ZXIoCisgICAgICAgICAgICAgICAgQzJSICgqZm4pKGJvb2wsIGNvbnN0IEMyUDxUPiAmLCBDMlA8VD4gJiwgY29uc3QgQzJQPERlcHM+ICYuLi4pLAorICAgICAgICAgICAgICAgIHN0ZDo6c2hhcmVkX3B0cjxEZXBzPiYgLi4uIGRlcHMpIHsKKyAgICAgICAgICAgIGF0dHJpYigpIHw9IGF0dHJpYl90OjpJU19TVFJJQ1Q7CisgICAgICAgICAgICBzdGQ6OnNoYXJlZF9wdHI8VD4gKnR5cGVkUGFyYW0gPSBtVHlwZWRQYXJhbTsKKyAgICAgICAgICAgIHNldFNldHRlcihbdHlwZWRQYXJhbSwgZm4sICZkZXBzLi4uXSgKKyAgICAgICAgICAgICAgICAgICAgY29uc3QgQzJQYXJhbSAqdmFsdWUsIGJvb2wgbWF5QmxvY2ssIGJvb2wgKmNoYW5nZWQsIEZhY3RvcnkgJmZhY3RvcnkpIC0+IEMyUiB7CisgICAgICAgICAgICAgICAgKmNoYW5nZWQgPSBmYWxzZTsKKyAgICAgICAgICAgICAgICBjb25zdCBUICp0eXBlZFZhbHVlID0gVDo6RnJvbSh2YWx1ZSk7CisgICAgICAgICAgICAgICAgaWYgKHR5cGVkVmFsdWUgPT0gbnVsbHB0cikgeworICAgICAgICAgICAgICAgICAgICByZXR1cm4gQzJSOjpDb3JydXB0ZWQoKTsgLy8gVE9ETyBCYWRWYWx1ZS9JbnZhbGlkLiBUaGlzIHNob3VsZCBub3QgaGFwcGVuIGhlcmUuCisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIC8vIERvIGNvcHktb24tY2hhbmdlIGZvciBwYXJhbWV0ZXJzIGluIHRoaXMgaGVscGVyIHNvIGNoYW5nZSBjYW4gYmUgZGV0ZWN0ZWQgYnkKKyAgICAgICAgICAgICAgICAvLyBhIGNoYW5nZSBvZiB0aGUgcG9pbnRlci4gRG8gdGhpcyBieSB3b3JraW5nIG9uIGEgcHJvcG9zZWQgdmFsdWUuCisgICAgICAgICAgICAgICAgc3RkOjpzaGFyZWRfcHRyPFQ+IHByb3Bvc2VkVmFsdWUgPQorICAgICAgICAgICAgICAgICAgICBzdGQ6OnNoYXJlZF9wdHI8VD4oVDo6RnJvbShDMlBhcmFtOjpDb3B5KCp2YWx1ZSkucmVsZWFzZSgpKSk7CisgICAgICAgICAgICAgICAgaWYgKHByb3Bvc2VkVmFsdWUgPT0gbnVsbHB0cikgeworICAgICAgICAgICAgICAgICAgICByZXR1cm4gQzJSOjpOb01lbW9yeSh2YWx1ZS0+aW5kZXgoKSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIEMyUDxUPiBvbGRWYWx1ZSA9IGZhY3RvcnkuZ2V0KCp0eXBlZFBhcmFtKTsKKyAgICAgICAgICAgICAgICAvLyBHZXQgYSBwYXJhbWV0ZXIgaGVscGVyIHdpdGggdmFsdWUgcG9pbnRpbmcgdG8gcHJvcG9zZWRWYWx1ZQorICAgICAgICAgICAgICAgIEMyUDxUPiBoZWxwZXIgPSBmYWN0b3J5LmdldCgqdHlwZWRQYXJhbSwgcHJvcG9zZWRWYWx1ZSk7CisgICAgICAgICAgICAgICAgQzJSIHJlc3VsdCA9IGZuKG1heUJsb2NrLCBvbGRWYWx1ZSwgaGVscGVyLCBmYWN0b3J5LmdldChkZXBzKS4uLik7CisKKyAgICAgICAgICAgICAgICAvLyBJZiB2YWx1ZSBjaGFuZ2VkLCBjb3B5IHJlc3VsdCB0byBjdXJyZW50IHZhbHVlCisgICAgICAgICAgICAgICAgaWYgKGhlbHBlci5nZXQoKSAhPSAqdHlwZWRQYXJhbS0+Z2V0KCkpIHsKKyAgICAgICAgICAgICAgICAgICAgKnR5cGVkUGFyYW0gPSBwcm9wb3NlZFZhbHVlOworICAgICAgICAgICAgICAgICAgICAqY2hhbmdlZCA9IHRydWU7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgICAgICAgICB9KTsKKyAgICAgICAgICAgIHNldERlcGVuZGVuY2llcyhzdGQ6OnZlY3RvcjxDMlBhcmFtOjpJbmRleD57IGRlcHMtPmluZGV4KCkuLi4gfSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGQ6OnZlY3RvcjxQYXJhbVJlZj57IFBhcmFtUmVmKGRlcHMpLi4uIH0pOworICAgICAgICAgICAgcmV0dXJuICp0aGlzOworICAgICAgICB9CisKKyAgICAgICAgLyoqCisgICAgICAgICAqIFVzZSBhIG5vbi1zdHJpY3Qgc2V0dGVyLgorICAgICAgICAgKgorICAgICAgICAgKiBccGFyYW0gZm4gICBub24tc3RyaWN0IHNldHRlcgorICAgICAgICAgKiBccGFyYW0gZGVwcyBkZXBlbmRlbmNpZXMgKHJlZmVyZW5jZXMpCisgICAgICAgICAqLworICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSAuLi4gRGVwcz4KKyAgICAgICAgaW5saW5lIFBhcmFtQnVpbGRlciAmd2l0aFNldHRlcigKKyAgICAgICAgICAgICAgICBDMlIgKCpmbikoYm9vbCwgQzJQPFQ+ICYsIGNvbnN0IEMyUDxEZXBzPiAmLi4uKSwgc3RkOjpzaGFyZWRfcHRyPERlcHM+JiAuLi4gZGVwcykgeworICAgICAgICAgICAgc3RkOjpzaGFyZWRfcHRyPFQ+ICp0eXBlZFBhcmFtID0gbVR5cGVkUGFyYW07CisgICAgICAgICAgICBzZXRTZXR0ZXIoW3R5cGVkUGFyYW0sIGZuLCAmZGVwcy4uLl0oCisgICAgICAgICAgICAgICAgICAgIGNvbnN0IEMyUGFyYW0gKnZhbHVlLCBib29sIG1heUJsb2NrLCBib29sICpjaGFuZ2VkLCBGYWN0b3J5ICZmYWN0b3J5KSAtPiBDMlIgeworICAgICAgICAgICAgICAgICpjaGFuZ2VkID0gZmFsc2U7CisgICAgICAgICAgICAgICAgY29uc3QgVCAqdHlwZWRWYWx1ZSA9IFQ6OkZyb20odmFsdWUpOworICAgICAgICAgICAgICAgIGlmICh0eXBlZFZhbHVlID09IG51bGxwdHIpIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEMyUjo6Q29ycnVwdGVkKCk7IC8vIFRPRE8gQmFkVmFsdWUvSW52YWxpZC4gVGhpcyBzaG91bGQgbm90IGhhcHBlbiBoZXJlLgorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAvLyBEbyBjb3B5LW9uLWNoYW5nZSBmb3IgcGFyYW1ldGVycyBpbiB0aGlzIGhlbHBlciBzbyBjaGFuZ2UgY2FuIGJlIGRldGVjdGVkIGJ5CisgICAgICAgICAgICAgICAgLy8gYSBjaGFuZ2Ugb2YgdGhlIHBvaW50ZXIuIERvIHRoaXMgYnkgd29ya2luZyBvbiBhIHByb3Bvc2VkIHZhbHVlLgorICAgICAgICAgICAgICAgIHN0ZDo6c2hhcmVkX3B0cjxUPiBwcm9wb3NlZFZhbHVlID0KKyAgICAgICAgICAgICAgICAgICAgc3RkOjpzaGFyZWRfcHRyPFQ+KFQ6OkZyb20oQzJQYXJhbTo6Q29weSgqdmFsdWUpLnJlbGVhc2UoKSkpOworICAgICAgICAgICAgICAgIGlmIChwcm9wb3NlZFZhbHVlID09IG51bGxwdHIpIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEMyUjo6Tm9NZW1vcnkodmFsdWUtPmluZGV4KCkpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAvLyBHZXQgYSBwYXJhbWV0ZXIgaGVscGVyIHdpdGggdmFsdWUgcG9pbnRpbmcgdG8gcHJvcG9zZWRWYWx1ZQorICAgICAgICAgICAgICAgIEMyUDxUPiBoZWxwZXIgPSBmYWN0b3J5LmdldCgqdHlwZWRQYXJhbSwgcHJvcG9zZWRWYWx1ZSk7CisgICAgICAgICAgICAgICAgQzJSIHJlc3VsdCA9IGZuKG1heUJsb2NrLCBoZWxwZXIsIGZhY3RvcnkuZ2V0KGRlcHMpLi4uKTsKKworICAgICAgICAgICAgICAgIC8vIElmIHZhbHVlIGNoYW5nZWQsIGNvcHkgcmVzdWx0IHRvIGN1cnJlbnQgdmFsdWUKKyAgICAgICAgICAgICAgICBpZiAoaGVscGVyLmdldCgpICE9ICp0eXBlZFBhcmFtLT5nZXQoKSkgeworICAgICAgICAgICAgICAgICAgICAqdHlwZWRQYXJhbSA9IHByb3Bvc2VkVmFsdWU7CisgICAgICAgICAgICAgICAgICAgICpjaGFuZ2VkID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICAgICAgICAgIH0pOworICAgICAgICAgICAgc2V0RGVwZW5kZW5jaWVzKHN0ZDo6dmVjdG9yPEMyUGFyYW06OkluZGV4PnsgZGVwcy0+aW5kZXgoKS4uLiB9LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZDo6dmVjdG9yPFBhcmFtUmVmPnsgUGFyYW1SZWYoZGVwcykuLi4gfSk7CisgICAgICAgICAgICByZXR1cm4gKnRoaXM7CisgICAgICAgIH0KKworICAgICAgICAvKioKKyAgICAgICAgICogTWFya3MgdGhpcyBhIGNhbGN1bGF0ZWQgKHJlYWQtb25seSkgZmllbGQuCisgICAgICAgICAqCisgICAgICAgICAqIFxwYXJhbSBmbiAgIG5vbi1zdHJpY3Qgc2V0dGVyIChjYWxjdWxhdG9yKQorICAgICAgICAgKiBccGFyYW0gZGVwcyBkZXBlbmRlbmNpZXMgKHJlZmVyZW5jZXMpCisgICAgICAgICAqLworICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSAuLi4gRGVwcz4KKyAgICAgICAgaW5saW5lIFBhcmFtQnVpbGRlciAmY2FsY3VsYXRlZEFzKAorICAgICAgICAgICAgICAgIEMyUiAoKmZuKShib29sLCBDMlA8VD4gJiwgY29uc3QgQzJQPERlcHM+ICYuLi4pLCBzdGQ6OnNoYXJlZF9wdHI8RGVwcz4mIC4uLiBkZXBzKSB7CisgICAgICAgICAgICBhdHRyaWIoKSB8PSBhdHRyaWJfdDo6SVNfUkVBRF9PTkxZOworICAgICAgICAgICAgcmV0dXJuIHdpdGhTZXR0ZXIoZm4sIHN0ZDo6Zm9yd2FyZDxkZWNsdHlwZShkZXBzKT4oZGVwcykuLi4pOworICAgICAgICB9CisKKyAgICAgICAgaW5saW5lIHN0ZDo6c2hhcmVkX3B0cjxQYXJhbUhlbHBlcj4gYnVpbGQoKSB7CisgICAgICAgICAgICByZXR1cm4gUGFyYW1IZWxwZXI6OmJ1aWxkKCk7CisgICAgICAgIH0KKworICAgIHByb3RlY3RlZDoKKyAgICAgICAgc3RkOjpzaGFyZWRfcHRyPFQ+ICptVHlwZWRQYXJhbTsKKyAgICB9OworCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4KKyAgICBzdGF0aWMgUGFyYW1CdWlsZGVyPFQ+IERlZmluZVBhcmFtKHN0ZDo6c2hhcmVkX3B0cjxUPiAmcGFyYW0sIEMyU3RyaW5nTGl0ZXJhbCBuYW1lKSB7CisgICAgICAgIHJldHVybiBQYXJhbUJ1aWxkZXI8VD4ocGFyYW0sIG5hbWUpOworICAgIH0KKworcHVibGljOgorICAgIGMyX3N0YXR1c190IHF1ZXJ5KAorICAgICAgICAgICAgY29uc3Qgc3RkOjp2ZWN0b3I8QzJQYXJhbSo+ICZzdGFja1BhcmFtcywKKyAgICAgICAgICAgIGNvbnN0IHN0ZDo6dmVjdG9yPEMyUGFyYW06OkluZGV4PiAmaGVhcFBhcmFtSW5kaWNlcywKKyAgICAgICAgICAgIGMyX2Jsb2NraW5nX3QgbWF5QmxvY2ssCisgICAgICAgICAgICBzdGQ6OnZlY3RvcjxzdGQ6OnVuaXF1ZV9wdHI8QzJQYXJhbT4+KiBjb25zdCBoZWFwUGFyYW1zKSBjb25zdDsKKworICAgIC8qKgorICAgICAqIEhlbHBlciBpbXBsZW1lbnRpbmcgY29uZmlnIGNhbGxzIGFzIHdlbGwgYXMgb3RoZXIgY29uZmlndXJhdGlvbiB1cGRhdGVzLgorICAgICAqCisgICAgICogVGhpcyBtZXRob2QgaXMgdmlydHVhbCwgc28gaW1wbGVtZW50YXRpb25zIG1heSBwcm92aWRlIHdyYXBwZXJzIGFyb3VuZCBpdCAoYW5kIHBlcmZvcm0KKyAgICAgKiBhY3Rpb25zIGp1c3QgYmVmb3JlIGFuZCBhZnRlciBhIGNvbmZpZ3VyYXRpb24pLgorICAgICAqCisgICAgICogXHBhcmFtIHBhcmFtcworICAgICAqIFxwYXJhbSBtYXlCbG9jaworICAgICAqIFxwYXJhbSBmYWlsdXJlcworICAgICAqIFxwYXJhbSB1cGRhdGVQYXJhbXMgaWYgdHJ1ZSwgdGhlIHVwZGF0ZWQgcGFyYW1ldGVyIHZhbHVlcyBhcmUgY29waWVkIGJhY2sgaW50byB0aGUgYXJndW1lbnRzCisgICAgICogICAgICAgICAgICAgICAgICAgICBwYXNzZWQgaW4gfHBhcmFtc3wKKyAgICAgKiBccGFyYW0gY2hhbmdlcyAgICAgIHBvaW50ZWQgdG8gYSB2ZWN0b3IgdG8gcmVjZWl2ZSBzZXR0aW5ncyB3aXRoIHRoZWlyIHZhbHVlcyBjaGFuZ2VkLiBJZiBub3QKKyAgICAgKiAgICAgICAgICAgICAgICAgICAgIG51bGwsIHNldHRpbmdzIHdpdGggdGhlaXIgdmFsdWVzIGNoYW5nZWQgYXJlIGFkZGVkIHRvIHRoaXMuCisgICAgICogXHJldHVybiByZXN1bHQgZnJvbSBjb25maWcKKyAgICAgKi8KKyAgICB2aXJ0dWFsIGMyX3N0YXR1c190IGNvbmZpZygKKyAgICAgICAgICAgIGNvbnN0IHN0ZDo6dmVjdG9yPEMyUGFyYW0qPiAmcGFyYW1zLCBjMl9ibG9ja2luZ190IG1heUJsb2NrLAorICAgICAgICAgICAgc3RkOjp2ZWN0b3I8c3RkOjp1bmlxdWVfcHRyPEMyU2V0dGluZ1Jlc3VsdD4+KiBjb25zdCBmYWlsdXJlcywKKyAgICAgICAgICAgIGJvb2wgdXBkYXRlUGFyYW1zID0gdHJ1ZSwKKyAgICAgICAgICAgIHN0ZDo6dmVjdG9yPHN0ZDo6c2hhcmVkX3B0cjxDMlBhcmFtPj4gKmNoYW5nZXMgPSBudWxscHRyKTsKKworICAgIGMyX3N0YXR1c190IHF1ZXJ5U3VwcG9ydGVkUGFyYW1zKAorICAgICAgICAgICAgc3RkOjp2ZWN0b3I8c3RkOjpzaGFyZWRfcHRyPEMyUGFyYW1EZXNjcmlwdG9yPj4gKmNvbnN0IHBhcmFtcykgY29uc3Q7CisKKyAgICBjMl9zdGF0dXNfdCBxdWVyeVN1cHBvcnRlZFZhbHVlcygKKyAgICAgICAgICAgIHN0ZDo6dmVjdG9yPEMyRmllbGRTdXBwb3J0ZWRWYWx1ZXNRdWVyeT4gJmZpZWxkcywgYzJfYmxvY2tpbmdfdCBtYXlCbG9jaykgY29uc3Q7CisKKyAgICBzdGQ6OnNoYXJlZF9wdHI8QzJSZWZsZWN0b3JIZWxwZXI+IGdldFJlZmxlY3RvcigpIHsKKyAgICAgICAgcmV0dXJuIG1SZWZsZWN0b3I7CisgICAgfQorCisgICAgdHlwZWRlZiBzdGQ6OnVuaXF1ZV9sb2NrPHN0ZDo6bXV0ZXg+IExvY2s7CisKKyAgICAvKioKKyAgICAgKiBMb2NrcyB0aGUgaW50ZXJmYWNlIGFuZCByZXR1cm5zIGEgbG9jay4gVGhpcyBsb2NrIG11c3QgYmUgdW5sb2NrZWQgb3IgcmVsZWFzZWQgd2l0aG91dAorICAgICAqIGNhbGxpbmcgYW55IG90aGVyIGJsb2NraW5nIGNhbGwuCisgICAgICovCisgICAgTG9jayBsb2NrKCkgY29uc3Q7CisKK3ByaXZhdGU6CisgICAgdm9pZCBzZXRJbnRlcmZhY2VBZGRyZXNzQm91bmRzKHVpbnRwdHJfdCBzdGFydCwgdWludHB0cl90IGVuZCkgeworICAgICAgICAvLyBUT0RPOiBleGNsdWRlIHRoaXMgaGVscGVyCisgICAgICAgICh2b2lkKXN0YXJ0OworICAgICAgICAodm9pZCllbmQ7CisgICAgfQorCitwcm90ZWN0ZWQ6CisgICAgbXV0YWJsZSBzdGQ6Om11dGV4IG1NdXRleDsKKyAgICBzdGQ6OnNoYXJlZF9wdHI8QzJSZWZsZWN0b3JIZWxwZXI+IG1SZWZsZWN0b3I7CisgICAgc3RydWN0IEZhY3RvcnlJbXBsOworICAgIHN0ZDo6c2hhcmVkX3B0cjxGYWN0b3J5SW1wbD4gX21GYWN0b3J5OworCisgICAgQzJJbnRlcmZhY2VIZWxwZXIoc3RkOjpzaGFyZWRfcHRyPEMyUmVmbGVjdG9ySGVscGVyPiByZWZsZWN0b3IpOworCisgICAgLyoqCisgICAgICogQWRkcyBhIHBhcmFtZXRlciB0byB0aGlzIGludGVyZmFjZS4KKyAgICAgKiBcbm90ZSBUaGlzIG1ldGhvZCBDSEVDS3MuCisgICAgICoKKyAgICAgKiBccGFyYW0gcGFyYW0gcGFyYW1ldGVyIHRvIGFkZC4KKyAgICAgKi8KKyAgICB2b2lkIGFkZFBhcmFtZXRlcihzdGQ6OnNoYXJlZF9wdHI8UGFyYW1IZWxwZXI+IHBhcmFtKTsKKworICAgIC8qKgorICAgICAqIFJldHVybnMgdGhlIGRlcGVuZGVuY3kgaW5kZXggZm9yIGEgcGFyYW1ldGVyLgorICAgICAqCisgICAgICogXHBhcmFtIGl4IHRoZSBpbmRleCBvZiB0aGUgcGFyYW1ldGVyCisgICAgICovCisgICAgc2l6ZV90IGdldERlcGVuZGVuY3lJbmRleF9sKEMyUGFyYW06OkluZGV4IGl4KSBjb25zdDsKKworICAgIHZpcnR1YWwgfkMySW50ZXJmYWNlSGVscGVyKCkgPSBkZWZhdWx0OworCisgICAgLyoqCisgICAgICogU2V0cyBzdWJjbGFzcyBpbnN0YW5jZSdzIGFkZHJlc3MgYW5kIHNpemUuCisgICAgICoKKyAgICAgKiBcdG9kbyBhbGxvdyBzdWJjbGFzcyB0byBzcGVjaWZ5IHBhcmFtZXRlciBhZGRyZXNzIHJhbmdlIGRpcmVjdGx5IChlLmcuIGRvIG5vdCBhc3N1bWUgdGhhdAorICAgICAqICAgICAgIHRoZXkgYXJlIGxvY2FsIHRvIHRoZSBzdWJjbGFzcyBpbnN0YW5jZSkKKyAgICAgKgorICAgICAqIFxwYXJhbSBUIHR5cGUgb2YgdGhlIGRlcml2ZWQgaW5zdGFuY2UKKyAgICAgKiBccGFyYW0gaW5zdGFuY2UgcG9pbnRlciB0byB0aGUgZGVyaXZlZCBpbnN0YW5jZQorICAgICAqLworICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+CisgICAgaW5saW5lIEMyX0hJREUgdm9pZCBzZXREZXJpdmVkSW5zdGFuY2UoVCAqaW5zdGFuY2UpIHsKKyAgICAgICAgc2V0SW50ZXJmYWNlQWRkcmVzc0JvdW5kcygodWludHB0cl90KWluc3RhbmNlLCAodWludHB0cl90KShpbnN0YW5jZSArIDEpKTsKKyAgICB9CisKKyAgICBDMl9ET19OT1RfQ09QWShDMkludGVyZmFjZUhlbHBlcik7Cit9OworCisvKioKKyAqIENyZWF0ZXMgYSBDMlBhcmFtRmllbGRWYWx1ZXNCdWlsZGVyIGNsYXNzIGZvciBhIGZpZWxkIG9mIGEgcGFyYW1ldGVyCisgKgorICogXHBhcmFtIHNwUGFyYW0gYSBjb25maWd1cmF0aW9uIHBhcmFtZXRlciBpbiBhbiBpbnRlcmZhY2UgY2xhc3Mgc3ViY2xhc3NlZCBmcm9tIEMySW50ZXJmYWNlSGVscGVyLgorICogXHBhcmFtIGZpZWxkICAgYSBmaWVsZCBvZiBzdWNoIHBhcmFtZXRlcgorICovCisjZGVmaW5lIEMyRihzcFBhcmFtLCBmaWVsZCkgXAorICAgIEMyUGFyYW1GaWVsZFZhbHVlc0J1aWxkZXI8IFwKKyAgICAgICAgICAgIHR5cGVuYW1lIF9jMl9yZWR1Y2VfZW51bV90b191bmRlcmx5aW5nX3R5cGU8IFwKKyAgICAgICAgICAgICAgICAgICAgdHlwZW5hbWUgc3RkOjpyZW1vdmVfcmVmZXJlbmNlPCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZW5hbWUgc3RkOjpyZW1vdmVfZXh0ZW50PCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWNsdHlwZShzcFBhcmFtLT5maWVsZCk+Ojp0eXBlPjo6dHlwZT46OnR5cGU+KCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEMyUGFyYW1GaWVsZChzcFBhcmFtLmdldCgpLCAmc3BQYXJhbS0+ZmllbGQpKQorCisjZW5kaWYgIC8vIEMyVVRJTFNfSU5URVJGQUNFX0hFTFBFUl9IXwpkaWZmIC0tZ2l0IGEvbWVkaWEvY29kZWMyL3ZuZGsvaW5jbHVkZS91dGlsL0MySW50ZXJmYWNlVXRpbHMuaCBiL21lZGlhL2NvZGVjMi92bmRrL2luY2x1ZGUvdXRpbC9DMkludGVyZmFjZVV0aWxzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTkwMzdlNQotLS0gL2Rldi9udWxsCisrKyBiL21lZGlhL2NvZGVjMi92bmRrL2luY2x1ZGUvdXRpbC9DMkludGVyZmFjZVV0aWxzLmgKQEAgLTAsMCArMSwxMTM1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE4IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KKworI2lmbmRlZiBDMlVUSUxTX0lOVEVSRkFDRV9VVElMU19IXworI2RlZmluZSBDMlVUSUxTX0lOVEVSRkFDRV9VVElMU19IXworCisjaW5jbHVkZSA8QzJQYXJhbS5oPgorI2luY2x1ZGUgPEMyV29yay5oPgorCisjaW5jbHVkZSA8Y21hdGg+CisjaW5jbHVkZSA8aXRlcmF0b3I+CisjaW5jbHVkZSA8bGltaXRzPgorI2luY2x1ZGUgPHR5cGVfdHJhaXRzPgorCisvKioKKyAqIEhlbHBlciBjbGFzcyB0byBtYXAgdW5kZXJseWluZyB0eXBlcyB0byBDMlZhbHVlIHR5cGVzIGFzIHdlbGwgYXMgdG8gcHJpbnQgZmllbGQgdmFsdWVzLiBUaGlzIGlzCisgKiBnZW5lcmFsbHkgdGhlIHNhbWUgYXMgc2ltcGx5IHRoZSB1bmRlcmx5aW5nIHR5cGUgZXhjZXB0IGZvciBjaGFyYWN0ZXJzIChTVFJJTkcpIGFuZCBieXRlcyAoQkxPQikuCisgKi8KK3RlbXBsYXRlPHR5cGVuYW1lIFQ+CitzdHJ1Y3QgQzJfSElERSBfQzJGaWVsZFZhbHVlSGVscGVyIHsKKyAgICB0eXBlZGVmIFQgVmFsdWVUeXBlOworICAgIGlubGluZSBzdGF0aWMgc3RkOjpvc3RyZWFtJiBwdXQoc3RkOjpvc3RyZWFtICZvcywgY29uc3QgQzJWYWx1ZTo6UHJpbWl0aXZlICZwKSB7CisgICAgICAgIHJldHVybiBvcyA8PCBwLnJlZjxUPigpOworICAgIH0KK307CisKK3RlbXBsYXRlPD4KK3N0cnVjdCBDMl9ISURFIF9DMkZpZWxkVmFsdWVIZWxwZXI8dWludDhfdD4geworICAgIHR5cGVkZWYgdWludDMyX3QgVmFsdWVUeXBlOworICAgIHN0YXRpYyBzdGQ6Om9zdHJlYW0mIHB1dChzdGQ6Om9zdHJlYW0gJm9zLCBjb25zdCBDMlZhbHVlOjpQcmltaXRpdmUgJnApOworfTsKKwordGVtcGxhdGU8Pgorc3RydWN0IEMyX0hJREUgX0MyRmllbGRWYWx1ZUhlbHBlcjxjaGFyPiB7CisgICAgdHlwZWRlZiBpbnQzMl90IFZhbHVlVHlwZTsKKyAgICBzdGF0aWMgc3RkOjpvc3RyZWFtJiBwdXQoc3RkOjpvc3RyZWFtICZvcywgY29uc3QgQzJWYWx1ZTo6UHJpbWl0aXZlICZwKTsKK307CisKKy8qKgorICogU3VwcG9ydGVkIHZhbHVlIHJhbmdlIHV0aWxpdHkgZm9yIGEgZmllbGQgb2YgYSBnaXZlbiB0eXBlLgorICoKKyAqIFRoaXMgbWltaWNzIEMyRmllbGRTdXBwb3J0ZWRWYWx1ZSBmb3IgUkFOR0UgdHlwZS4KKyAqLwordGVtcGxhdGU8dHlwZW5hbWUgVD4KK2NsYXNzIEMyU3VwcG9ydGVkUmFuZ2UgeworICAgIHR5cGVkZWYgdHlwZW5hbWUgX0MyRmllbGRWYWx1ZUhlbHBlcjxUPjo6VmFsdWVUeXBlIFZhbHVlVHlwZTsKKworLy9wcml2YXRlOgorICAgIGNvbnN0ZXhwciBzdGF0aWMgVCBNSU5fVkFMVUUgPSBzdGQ6Om51bWVyaWNfbGltaXRzPFQ+OjptaW4oKTsKKyAgICBjb25zdGV4cHIgc3RhdGljIFQgTUFYX1ZBTFVFID0gc3RkOjpudW1lcmljX2xpbWl0czxUPjo6bWF4KCk7CisgICAgY29uc3RleHByIHN0YXRpYyBUIE1JTl9TVEVQID0gc3RkOjppc19mbG9hdGluZ19wb2ludDxUPjo6dmFsdWUgPyAwIDogMTsKKworcHVibGljOgorICAgIC8qKgorICAgICAqIENvbnN0cnVjdHMgYW4gZW1wdHkgcmFuZ2Ugd2l0aCBubyBzdXBwb3J0ZWQgdmFsdWVzLgorICAgICAqCisgICAgICogXG5vdGUgVGhpcyBpcyBhIHNwZWNpYWxpemF0ZWQgc3VwcG9ydGVkIHJhbmdlIHJlcHJlc2VudGF0aW9uIHRoYXQgaXMgb25seSB1c2VkIGZvcgorICAgICAqIHRoaXMgb2JqZWN0IC0gaXQgaXMgZXF1aXZhbGVudCB0byB0aGUgRU1QVFkgdHlwZSBpbiBDMkZpZWxkU3VwcG9ydGVkVmFsdWVzLgorICAgICAqLworICAgIGlubGluZSBzdGF0aWMgY29uc3RleHByIEMyU3VwcG9ydGVkUmFuZ2U8VD4gTm9uZSgpIHsKKyAgICAgICAgcmV0dXJuIEMyU3VwcG9ydGVkUmFuZ2UoTUFYX1ZBTFVFLCBNSU5fVkFMVUUpOworICAgIH0KKworICAgIC8qKgorICAgICAqIENvbnN0cnVjdHMgYSByYW5nZSB3aXRoIGFsbCB2YWx1ZXMgc3VwcG9ydGVkLgorICAgICAqLworICAgIGlubGluZSBzdGF0aWMgY29uc3RleHByIEMyU3VwcG9ydGVkUmFuZ2U8VD4gQW55KCkgeworICAgICAgICByZXR1cm4gQzJTdXBwb3J0ZWRSYW5nZShNSU5fVkFMVUUsIE1BWF9WQUxVRSk7CisgICAgfQorCisgICAgLyoqCisgICAgICogQ29uc3RydWN0cyBhIHJhbmdlIHdpdGggYSBzaW5nbGUgc3VwcG9ydGVkIHZhbHVlLgorICAgICAqCisgICAgICogXHBhcmFtIHZhbHVlIHRoZSBzb2xlIHN1cHBvcnRlZCB2YWx1ZQorICAgICAqLworICAgIGlubGluZSBzdGF0aWMgY29uc3RleHByIEMyU3VwcG9ydGVkUmFuZ2U8VD4gRXF1YWxUbyhUIHZhbHVlKSB7CisgICAgICAgIHJldHVybiBDMlN1cHBvcnRlZFJhbmdlKHZhbHVlLCB2YWx1ZSk7CisgICAgfQorCisgICAgLyoqCisgICAgICogQ29uc3RydWN0cyBhIHJhbmdlIHdpdGggc3VwcG9ydGVkIHZhbHVlcyBncmVhdGVyIHRoYW4gYSBnaXZlbiB2YWx1ZS4KKyAgICAgKgorICAgICAqIFxwYXJhbSB2YWx1ZSB0aGUgZ2l2ZW4gdmFsdWUKKyAgICAgKi8KKyAgICBpbmxpbmUgc3RhdGljIEMyU3VwcG9ydGVkUmFuZ2U8VD4gR3JlYXRlclRoYW4oVCB2YWx1ZSkgeworICAgICAgICByZXR1cm4gKHZhbHVlID09IE1BWF9WQUxVRSA/IE5vbmUoKSA6CisgICAgICAgICAgICAgICAgc3RkOjppc19mbG9hdGluZ19wb2ludDxUPjo6dmFsdWUgPworICAgICAgICAgICAgICAgICAgICAgICAgQzJTdXBwb3J0ZWRSYW5nZShzdGQ6Om5leHRhZnRlcih2YWx1ZSwgTUFYX1ZBTFVFKSwgTUFYX1ZBTFVFKSA6CisgICAgICAgICAgICAgICAgICAgICAgICBDMlN1cHBvcnRlZFJhbmdlKHZhbHVlICsgTUlOX1NURVAsIE1BWF9WQUxVRSkpOworICAgIH0KKworICAgIC8qKgorICAgICAqIENvbnN0cnVjdHMgYSByYW5nZSB3aXRoIHN1cHBvcnRlZCB2YWx1ZXMgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvIGEgZ2l2ZW4gdmFsdWUuCisgICAgICoKKyAgICAgKiBccGFyYW0gdmFsdWUgdGhlIGdpdmVuIHZhbHVlCisgICAgICovCisgICAgaW5saW5lIHN0YXRpYyBjb25zdGV4cHIgQzJTdXBwb3J0ZWRSYW5nZTxUPiBHcmVhdGVyVGhhbk9yRXF1YWxUbyhUIHZhbHVlKSB7CisgICAgICAgIHJldHVybiBDMlN1cHBvcnRlZFJhbmdlKHZhbHVlLCBNQVhfVkFMVUUpOworICAgIH0KKworICAgIC8qKgorICAgICAqIENvbnN0cnVjdHMgYSByYW5nZSB3aXRoIHN1cHBvcnRlZCB2YWx1ZXMgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvIChha2Egbm90IGxlc3MgdGhhbikgYSBnaXZlbgorICAgICAqIHZhbHVlLgorICAgICAqCisgICAgICogXHBhcmFtIHZhbHVlIHRoZSBnaXZlbiB2YWx1ZQorICAgICAqLworICAgIGlubGluZSBzdGF0aWMgY29uc3RleHByIEMyU3VwcG9ydGVkUmFuZ2U8VD4gTm90TGVzc1RoYW4oVCB2YWx1ZSkgeworICAgICAgICByZXR1cm4gR3JlYXRlclRoYW5PckVxdWFsVG8odmFsdWUpOworICAgIH0KKworICAgIC8qKgorICAgICAqIENvbnN0cnVjdHMgYSByYW5nZSB3aXRoIHN1cHBvcnRlZCB2YWx1ZXMgbGVzcyB0aGFuIG9yIGVxdWFsIHRvIGEgZ2l2ZW4gdmFsdWUuCisgICAgICoKKyAgICAgKiBccGFyYW0gdmFsdWUgdGhlIGdpdmVuIHZhbHVlCisgICAgICovCisgICAgaW5saW5lIHN0YXRpYyBjb25zdGV4cHIgQzJTdXBwb3J0ZWRSYW5nZTxUPiBMZXNzVGhhbk9yRXF1YWxUbyhUIHZhbHVlKSB7CisgICAgICAgIHJldHVybiBDMlN1cHBvcnRlZFJhbmdlKE1JTl9WQUxVRSwgdmFsdWUpOworICAgIH0KKworICAgIC8qKgorICAgICAqIENvbnN0cnVjdHMgYSByYW5nZSB3aXRoIHN1cHBvcnRlZCB2YWx1ZXMgbGVzcyB0aGFuIG9yIGVxdWFsIHRvIChha2Egbm90IGdyZWF0ZXIgdGhhbikgYSBnaXZlbgorICAgICAqIHZhbHVlLgorICAgICAqCisgICAgICogXHBhcmFtIHZhbHVlIHRoZSBnaXZlbiB2YWx1ZQorICAgICAqLworICAgIGlubGluZSBzdGF0aWMgY29uc3RleHByIEMyU3VwcG9ydGVkUmFuZ2U8VD4gTm90R3JlYXRlclRoYW4oVCB2YWx1ZSkgeworICAgICAgICByZXR1cm4gTGVzc1RoYW5PckVxdWFsVG8odmFsdWUpOworICAgIH0KKworICAgIC8qKgorICAgICAqIENvbnN0cnVjdHMgYSByYW5nZSB3aXRoIHN1cHBvcnRlZCB2YWx1ZXMgbGVzcyB0aGFuIGEgZ2l2ZW4gdmFsdWUuCisgICAgICoKKyAgICAgKiBccGFyYW0gdmFsdWUgdGhlIGdpdmVuIHZhbHVlCisgICAgICovCisgICAgaW5saW5lIHN0YXRpYyBDMlN1cHBvcnRlZFJhbmdlPFQ+IExlc3NUaGFuKFQgdmFsdWUpIHsKKyAgICAgICAgcmV0dXJuICh2YWx1ZSA9PSBNSU5fVkFMVUUgPyBOb25lKCkgOgorICAgICAgICAgICAgICAgIHN0ZDo6aXNfZmxvYXRpbmdfcG9pbnQ8VD46OnZhbHVlID8KKyAgICAgICAgICAgICAgICAgICAgICAgIEMyU3VwcG9ydGVkUmFuZ2UoTUlOX1ZBTFVFLCBzdGQ6Om5leHRhZnRlcih2YWx1ZSwgTUlOX1ZBTFVFKSkgOgorICAgICAgICAgICAgICAgICAgICAgICAgQzJTdXBwb3J0ZWRSYW5nZShNSU5fVkFMVUUsIHZhbHVlIC0gTUlOX1NURVApKTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBDb25zdHJ1Y3RzIGEgY29udGludW91cyBvciBhcml0aG1ldGljIHJhbmdlIGJldHdlZW4gdHdvIHZhbHVlcy4KKyAgICAgKgorICAgICAqIFxwYXJhbSBtaW4gdGhlIGxvd2VyIHZhbHVlCisgICAgICogXHBhcmFtIG1heCB0aGUgaGlnaGVyIHZhbHVlIChpZiB0aGlzIGlzIGxvd2VyIHRoYW4gfG1pbnwgdGhlIHJhbmdlIHdpbGwgYmUgZW1wdHkpCisgICAgICogXHBhcmFtIHN0ZXAgdGhlIHN0ZXAgb2YgdGhlIGFyaXRobWV0aWMgcmFuZ2UuIChJZiB0aGlzIGlzIDAgZm9yIGZsb2F0aW5nIHBvaW50IHR5cGVzIG9yIDEgZm9yCisgICAgICogICAgICAgIGludGVnZXIgdHlwZXMsIHRoZSBjb25zdHJ1Y3RlZCByYW5nZSBpcyBjb250aW51b3VzKQorICAgICAqLworICAgIGlubGluZSBzdGF0aWMgY29uc3RleHByCisgICAgQzJTdXBwb3J0ZWRSYW5nZTxUPiBJblJhbmdlKFQgbWluLCBUIG1heCwgVCBzdGVwID0gTUlOX1NURVApIHsKKyAgICAgICAgcmV0dXJuIEMyU3VwcG9ydGVkUmFuZ2UobWluLCBtYXgsIHN0ZXApOworICAgIH0KKworICAgIC8qKgorICAgICAqIENvbnN0cnVjdHMgYSByYW5nZSBvdmVyIGEgZ2VvbWV0cmljIHNlcmllcyBiZXR3ZWVuIHR3byB2YWx1ZXMuCisgICAgICoKKyAgICAgKiBccGFyYW0gbWluIHRoZSBsb3dlciBib3VuZCBvZiB0aGUgcmFuZ2UuIFRoaXMgdmFsdWUgaXMgYWx3YXlzIHBhcnQgb2YgdGhlIGNvbnN0cnVjdGVkIHJhbmdlCisgICAgICogICAgICAgIGFzIGxvbmcgYXMgaXQgaXMgbm90IGdyZWF0ZXIgdGhhbiB8bWF4fC4KKyAgICAgKiBccGFyYW0gbWF4IHRoZSB1cHBlciBib3VuZCBvZiB0aGUgcmFuZ2UuIFRoaXMgdmFsdWUgaXMgb25seSBwYXJ0IG9mIHRoZSBjb25zdHJ1Y3RlZAorICAgICAqICAgICAgICByYW5nZSBpZiBpdCBpcyBwYXJ0IG9mIHRoZSBnZW9tZXRyaWMgc2VyaWVzLgorICAgICAqIFxwYXJhbSBudW0gdGhlIG51bWVyYXRvciBvZiB0aGUgZ2VvbWV0cmljIHNlcmllcy4KKyAgICAgKiBccGFyYW0gZGVub20gdGhlIGRlbm9taW5hdG9yIG9mIHRoZSBnZW9tZXRyaWMgc2VyaWVzLgorICAgICAqLworICAgIGlubGluZSBzdGF0aWMgY29uc3RleHByCisgICAgQzJTdXBwb3J0ZWRSYW5nZTxUPiBJblNlcmllcyhUIG1pbiwgVCBtYXgsIFQgbnVtLCBUIGRlbm9tKSB7CisgICAgICAgIHJldHVybiBDMlN1cHBvcnRlZFJhbmdlKG1pbiwgbWF4LCAwLCBudW0sIGRlbm9tKTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBDb25zdHJ1Y3RzIGEgcmFuZ2Ugb3ZlciBhIG11bHRpcGx5LWFjY3VtdWxhdGUgc2VyaWVzIGJldHdlZW4gdHdvIHZhbHVlcy4KKyAgICAgKgorICAgICAqIFxwYXJhbSBtaW4gdGhlIGxvd2VyIGJvdW5kIG9mIHRoZSByYW5nZS4gVGhpcyB2YWx1ZSBpcyBhbHdheXMgcGFydCBvZiB0aGUgY29uc3RydWN0ZWQgcmFuZ2UKKyAgICAgKiAgICAgICAgYXMgbG9uZyBhcyBpdCBpcyBub3QgZ3JlYXRlciB0aGFuIHxtYXh8LgorICAgICAqIFxwYXJhbSBtYXggdGhlIHVwcGVyIGJvdW5kIG9mIHRoZSByYW5nZS4gVGhpcyB2YWx1ZSBpcyBvbmx5IHBhcnQgb2YgdGhlIGNvbnN0cnVjdGVkCisgICAgICogICAgICAgIHJhbmdlIGlmIGl0IGlzIHBhcnQgb2YgdGhlIHNlcmllcy4KKyAgICAgKiBccGFyYW0gc3RlcCB0aGUgYWNjdW11bGF0b3Igb2YgdGhlIG11bHRpcGx5LWFjY3VtdWxhdGUgc2VyaWVzCisgICAgICogXHBhcmFtIG51bSB0aGUgbnVtZXJhdG9yIG9mIHRoZSBtdWx0aXBseS1hY2N1bXVsYXRlIHNlcmllcy4KKyAgICAgKiBccGFyYW0gZGVub20gdGhlIGRlbm9taW5hdG9yIG9mIHRoZSBtdWx0aXBseS1hY2N1bXVsYXRlIHNlcmllcy4KKyAgICAgKi8KKyAgICBpbmxpbmUgc3RhdGljIGNvbnN0ZXhwcgorICAgIEMyU3VwcG9ydGVkUmFuZ2U8VD4gSW5NYWNTZXJpZXMoVCBtaW4sIFQgbWF4LCBUIHN0ZXAsIFQgbnVtLCBUIGRlbm9tKSB7CisgICAgICAgIHJldHVybiBDMlN1cHBvcnRlZFJhbmdlKG1pbiwgbWF4LCBzdGVwLCBudW0sIGRlbm9tKTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBDb25zdHJ1Y3RzIGEgcmFuZ2UgZnJvbSBhIGdlbmVyaWMgQzJGaWVsZFN1cHBvcnRlZFZhbHVlcyBvYmplY3QuIFRoaXMgd2lsbCBiZSBhbiBlbXB0eQorICAgICAqIHJhbmdlIGlmIHRoZSBzdXBwb3J0ZWQgdmFsdWVzIGFyZSBub3Qgb2YgUkFOR0UgdHlwZS4KKyAgICAgKgorICAgICAqIFxwYXJhbSB2YWx1ZXMgdGhlIHN1cHBvcnRlZCB2YWx1ZXMgb2JqZWN0CisgICAgICovCisgICAgQzJTdXBwb3J0ZWRSYW5nZShjb25zdCBDMkZpZWxkU3VwcG9ydGVkVmFsdWVzICZ2YWx1ZXMpOworCisgICAgLyoqCisgICAgICogUmV0dXJucyB3aGV0aGVyIHRoaXMgcmFuZ2UgaXMgZW1wdHkuCisgICAgICovCisgICAgaW5saW5lIGNvbnN0ZXhwciBib29sIGlzRW1wdHkoKSBjb25zdCB7CisgICAgICAgIHJldHVybiBfbU1pbiA+IF9tTWF4OworICAgIH0KKworICAgIC8qKgorICAgICAqIFJldHVybnMgd2hldGhlciB0aGlzIHJhbmdlIGlzIHZhbGlkLgorICAgICAqCisgICAgICogUmFuZ2VzIGFyZSB2YWxpZCBpZiB0aGV5IGFyZSBjb250aW51b3VzIG9yIG1vbm90b25pYy4KKyAgICAgKi8KKyAgICBpbmxpbmUgY29uc3RleHByIGJvb2wgaXNWYWxpZCgpIGNvbnN0IHsKKyAgICAgICAgLy8gVE9ETzogaGFuZGxlIG92ZXJmbG93IG9yIG5lZ2F0aXZlIHNlcmllcworICAgICAgICByZXR1cm4gX21EZW5vbSA+IDAgJiYgX21OdW0gPj0gX21EZW5vbSAmJiBfbU1pbiAqIChfbURlbm9tIC0gX21OdW0pIDwgX21TdGVwICogX21EZW5vbTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBSZXR1cm5zIHdoZXRoZXIgYSB2YWx1ZSBpcyBwYXJ0IG9mIHRoaXMgcmFuZ2UuCisgICAgICoKKyAgICAgKiBccGFyYW0gdmFsdWUgdGhlIHZhbHVlIHRvIGNoZWNrLgorICAgICAqLworICAgIGJvb2wgY29udGFpbnMoVCB2YWx1ZSkgY29uc3Q7CisKKyAgICAvKioKKyAgICAgKiBSZXR1cm5zIGEgbmV3IHJhbmdlIHRoYXQgaXMgdGhlIGludGVyc2VjdGlvbiBvZiB0aGlzIHJhbmdlIGFuZCBhbm90aGVyLCBpZiBpdCBpcworICAgICAqIHJlcHJlc2VudGFibGUgYXMgYSByYW5nZSBvYmplY3QuCisgICAgICoKKyAgICAgKiBccGFyYW0gbGltaXQgdGhlIG90aGVyIHJhbmdlCisgICAgICovCisgICAgQzJTdXBwb3J0ZWRSYW5nZTxUPiBsaW1pdGVkVG8oY29uc3QgQzJTdXBwb3J0ZWRSYW5nZTxUPiAmbGltaXQpIGNvbnN0OworCisgICAgLyoqCisgICAgICogQ29udmVydHMgdGhpcyBvYmplY3QgdG8gYSBDMkZpZWxkU3VwcG9ydGVkVmFsdWVzIG9iamVjdC4KKyAgICAgKi8KKyAgICBpbmxpbmUgb3BlcmF0b3IgQzJGaWVsZFN1cHBvcnRlZFZhbHVlcygpIGNvbnN0IHsKKyAgICAgICAgcmV0dXJuIEMyRmllbGRTdXBwb3J0ZWRWYWx1ZXMoX21NaW4sIF9tTWF4LCBfbVN0ZXAsIF9tTnVtLCBfbURlbm9tKTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBSZXR1cm5zIHRoZSBsb3dlciBib3VuZCBhbmQgc3RhcnRpbmcgcG9pbnQgb2YgdGhpcyByYW5nZS4KKyAgICAgKi8KKyAgICBpbmxpbmUgQzJfSElERSBjb25zdGV4cHIgVCBtaW4oKSBjb25zdCAgIHsgcmV0dXJuIF9tTWluOyAgIH0KKworICAgIC8qKgorICAgICAqIFJldHVybnMgdGhlIHVwcGVyIGJvdW5kIG9mIHRoaXMgcmFuZ2UuCisgICAgICovCisgICAgaW5saW5lIEMyX0hJREUgY29uc3RleHByIFQgbWF4KCkgY29uc3QgICB7IHJldHVybiBfbU1heDsgICB9CisKKyAgICAvKioKKyAgICAgKiBSZXR1cm5zIHRoZSBzdGVwIG9mIHRoaXMgcmFuZ2UuCisgICAgICovCisgICAgaW5saW5lIEMyX0hJREUgY29uc3RleHByIFQgc3RlcCgpIGNvbnN0ICB7IHJldHVybiBfbVN0ZXA7ICB9CisKKyAgICAvKioKKyAgICAgKiBSZXR1cm5zIHRoZSBudW1lcmF0b3Igb2YgdGhpcyByYW5nZS4KKyAgICAgKi8KKyAgICBpbmxpbmUgQzJfSElERSBjb25zdGV4cHIgVCBudW0oKSBjb25zdCAgIHsgcmV0dXJuIF9tTnVtOyAgIH0KKworICAgIC8qKgorICAgICAqIFJldHVybnMgdGhlIGRlbm9taW5hdG9yIG9mIHRoaXMgcmFuZ2UuCisgICAgICovCisgICAgaW5saW5lIEMyX0hJREUgY29uc3RleHByIFQgZGVub20oKSBjb25zdCB7IHJldHVybiBfbURlbm9tOyB9CisKK3ByaXZhdGU6CisgICAgLyoqCisgICAgICogUmV0dXJucyB3aGV0aGVyIHhbaS4uLl0gaXMgYWxsIHZhbHVlcyBiZXR3ZWVuIF9tTWluIGFuZCBfbU1heC4KKyAgICAgKi8KKyAgICBpbmxpbmUgQzJfSElERSBjb25zdGV4cHIgYm9vbCBpc1NpbXBsZVJhbmdlKCkgY29uc3QgeworICAgICAgICByZXR1cm4gX21TdGVwID09IE1JTl9TVEVQICYmIF9tTnVtID09IDEgJiYgX21EZW5vbSA9PSAxOworICAgIH0KKworICAgIC8qKgorICAgICAqIFJldHVybnMgd2hldGhlciB4W2kuLi5dIGlzIGRlZmluZWQgYXMgc3VjaDoKKyAgICAgKiB4W2kgKyAxXSA9IHhbaV0gKyBfbVN0ZXAsIHdoZXJlIF9tU3RlcCA+IDAgYW5kIF9tTWluIDw9IHhbaV0gPD0gX21NYXgKKyAgICAgKi8KKyAgICBpbmxpbmUgQzJfSElERSBjb25zdGV4cHIgYm9vbCBpc0FyaXRobWV0aWNTZXJpZXMoKSBjb25zdCB7CisgICAgICAgIHJldHVybiBfbVN0ZXAgPiBNSU5fU1RFUCAmJiBfbU51bSA9PSAxICYmIF9tRGVub20gPT0gMTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBSZXR1cm5zIHdoZXRoZXIgeFtpLi4uXSBpcyBkZWZpbmVkIGFzIHN1Y2g6CisgICAgICogeFtpXSA9IHhbMF0gKiAoX21OdW0gLyBfbURlbm9tKSBeIGkgKHdpdGggcm91bmRpbmcpLCB3aGVyZSBfbU51bSA+IF9tRGVub20gPiAwIGFuZCB4WzBdID4gMAorICAgICAqLworICAgIGlubGluZSBDMl9ISURFIGNvbnN0ZXhwciBib29sIGlzR2VvbWV0cmljU2VyaWVzKCkgY29uc3QgeworICAgICAgICByZXR1cm4gX21NaW4gPiAwICYmIF9tU3RlcCA9PSAwICYmIF9tTnVtID4gX21EZW5vbSAmJiBfbURlbm9tID4gMDsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBSZXR1cm5zIHdoZXRoZXIgeFtpLi4uXSBpcyBkZWZpbmVkIGFzIHN1Y2g6CisgICAgICogeFtpICsgMV0gPSB4W2ldICogX21OdW0gLyBfbURlbm9tICsgX21TdGVwICh3aXRoIHJvdW5kaW5nKSwgd2hpbGUgeFtpICsgMV0gPiB4W2ldLCB3aGVyZQorICAgICAqIF9tU3RlcCAhPSAwLCBfbURlbm9tID4gMCBhbmQgX21OdW0gPiAwCisgICAgICovCisgICAgaW5saW5lIEMyX0hJREUgY29uc3RleHByIGJvb2wgaXNNYWNTZXJpZXMoKSBjb25zdCB7CisgICAgICAgIHJldHVybiBfbVN0ZXAgIT0gMCAmJiBfbU51bSA+IDAgJiYgX21EZW5vbSA+IDA7CisgICAgfQorCisgICAgLyoqCisgICAgICogQ29uc3RydWN0cyBhbiBhcml0aG1ldGljIG9yIGNvbnRpbnVvdXMgcmFuZ2UuCisgICAgICoKKyAgICAgKiBccGFyYW0gbWluIHRoZSBsb3dlciB2YWx1ZQorICAgICAqIFxwYXJhbSBtYXggdGhlIGhpZ2hlciB2YWx1ZSAoaWYgdGhpcyBpcyBsb3dlciB0aGFuIHxtaW58IHRoZSByYW5nZSB3aWxsIGJlIGVtcHR5KQorICAgICAqIFxwYXJhbSBzdGVwIHRoZSBzdGVwIG9mIHRoZSBhcml0aG1ldGljIHJhbmdlLiAoSWYgdGhpcyBpcyAwIGZvciBmbG9hdGluZyBwb2ludCB0eXBlcyBvciAxIGZvcgorICAgICAqICAgICAgICBpbnRlZ2VyIHR5cGVzLCB0aGUgY29uc3RydWN0ZWQgcmFuZ2UgaXMgY29udGludW91cykKKyAgICAgKi8KKyAgICBjb25zdGV4cHIgQzJfSElERSBDMlN1cHBvcnRlZFJhbmdlKFQgbWluLCBUIG1heCwgVCBzdGVwID0gVChzdGQ6OmlzX2Zsb2F0aW5nX3BvaW50PFQ+Ojp2YWx1ZSA/IDAgOiAxKSkKKyAgICAgICAgOiBfbU1pbihtaW4pLCBfbU1heChtYXgpLCBfbVN0ZXAoc3RlcCksIF9tTnVtKDEpLCBfbURlbm9tKDEpIHsgfQorCisgICAgLyoqCisgICAgICogQ29uc3RydWN0cyBhIHJhbmdlIG92ZXIgYSBnZW9tZXJ0aWMgc29yIG11bHRpcGx5LWFjY3VtdWxhdGUgc2VyaWVzLgorICAgICAqCisgICAgICogXHBhcmFtIG1pbiB0aGUgbG93ZXIgYm91bmQgb2YgdGhlIHJhbmdlLiBUaGlzIHZhbHVlIGlzIGFsd2F5cyBwYXJ0IG9mIHRoZSBjb25zdHJ1Y3RlZCByYW5nZQorICAgICAqICAgICAgICBhcyBsb25nIGFzIGl0IGlzIG5vdCBncmVhdGVyIHRoYW4gfG1heHwuCisgICAgICogXHBhcmFtIG1heCB0aGUgdXBwZXIgYm91bmQgb2YgdGhlIHJhbmdlLiBUaGlzIHZhbHVlIGlzIG9ubHkgcGFydCBvZiB0aGUgY29uc3RydWN0ZWQKKyAgICAgKiAgICAgICAgcmFuZ2UgaWYgaXQgaXMgcGFydCBvZiB0aGUgZ2VvbWV0cmljIHNlcmllcy4KKyAgICAgKiBccGFyYW0gc3RlcCB0aGUgYWNjdW11bGF0b3Igb2YgdGhlIG11bHRpcGx5LWFjY3VtdWxhdGUgc2VyaWVzLiBUaGlzIGlzIDAgZm9yIGEgcHVyZSBnZW9tZXRyaWMKKyAgICAgKiAgICAgICAgc2VyaWVzCisgICAgICogXHBhcmFtIG51bSB0aGUgbnVtZXJhdG9yIG9mIHRoZSBnZW9tZXRyaWMgc2VyaWVzLgorICAgICAqIFxwYXJhbSBkZW5vbSB0aGUgZGVub21pbmF0b3Igb2YgdGhlIGdlb21ldHJpYyBzZXJpZXMuCisgICAgICovCisgICAgY29uc3RleHByIEMyX0hJREUgQzJTdXBwb3J0ZWRSYW5nZShUIG1pbiwgVCBtYXgsIFQgc3RlcCwgVCBudW0sIFQgZGVuKQorICAgICAgICA6IF9tTWluKG1pbiksIF9tTWF4KG1heCksIF9tU3RlcChzdGVwKSwgX21OdW0obnVtKSwgX21EZW5vbShkZW4pIHsgfQorCisgICAgVCBfbU1pbjsgLy8vPCBsb3dlciBib3VuZCBhbmQgc3RhcnRpbmcgcG9pbnQKKyAgICBUIF9tTWF4OyAvLy88IHVwcGVyIGJvdW5kCisgICAgVCBfbVN0ZXA7IC8vLzwgc3RlcCBvZiBhbiBhcml0aG1ldGljIHNlcmllcyAoMCBpZiBjb250aW51b3VzIGZsb2F0aW5nIHBvaW50IHJhbmdlKQorICAgIFQgX21OdW07IC8vLzwgbnVtZXJhdG9yIG9mIGEgZ2VvbWV0cmljIHNlcmllcworICAgIFQgX21EZW5vbTsgLy8vPCBkZW5vbWluYXRvciBvZiBhIGdlb21ldHJpYyBzZXJpZXMKK307CisKKy8qKgorICogT3JkZXJlZCBzdXBwb3J0ZWQgZmxhZyBzZXQgZm9yIGEgZmllbGQgb2YgYSBnaXZlbiB0eXBlLgorICovCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPgorY2xhc3MgQzJTdXBwb3J0ZWRGbGFncyB7CisgICAgdHlwZWRlZiB0eXBlbmFtZSBfQzJGaWVsZFZhbHVlSGVscGVyPFQ+OjpWYWx1ZVR5cGUgVmFsdWVUeXBlOworCitwdWJsaWM6CisgICAgLyoqCisgICAgICogQ29uc3RydWN0cyBhbiBlbXB0eSBmbGFnIHNldC4KKyAgICAgKgorICAgICAqIFxub3RlIFRoaXMgaXMgYSBzcGVjaWFsaXphdGVkIHN1cHBvcnRlZCBmbGFncyByZXByZXNlbnRhdGlvbiB0aGF0IGlzIG9ubHkgdXNlZCBmb3IKKyAgICAgKiB0aGlzIG9iamVjdCAtIGl0IGlzIGVxdWl2YWxlbnQgdG8gdGhlIEVNUFRZIHR5cGUgaW4gQzJGaWVsZFN1cHBvcnRlZFZhbHVlcy4KKyAgICAgKi8KKyAgICBzdGF0aWMgaW5saW5lIEMyU3VwcG9ydGVkRmxhZ3M8VD4gTm9uZSgpIHsKKyAgICAgICAgcmV0dXJuIEMyU3VwcG9ydGVkRmxhZ3Moc3RkOjppbml0aWFsaXplcl9saXN0PEMyVmFsdWU6OlByaW1pdGl2ZT4oKSk7CisgICAgfQorCisgICAgLyoqCisgICAgICogQ29uc3RydWN0cyBhIGZsYWdzIHNldCBvZiBnaXZlbiBmbGFncy4KKyAgICAgKgorICAgICAqIFxwYXJhbSBmbGFncyB0aGUgb3JkZXJlZCBzZXQgb2YgZmxhZ3MgYXMgYW4gaW5pdGlhbGl6ZXIgbGlzdC4KKyAgICAgKiBccGFyYW0gbWluIG1pbmltdW0gc2V0IG9mIGZsYWdzIHRvIGJlIHNldC4KKyAgICAgKi8KKyAgICBzdGF0aWMgaW5saW5lIEMyU3VwcG9ydGVkRmxhZ3M8VD4gRmxhZ3MoY29uc3Qgc3RkOjppbml0aWFsaXplcl9saXN0PFQ+IGZsYWdzLCBUIG1pbiA9IFQoMCkpIHsKKyAgICAgICAgcmV0dXJuIEMyU3VwcG9ydGVkRmxhZ3MobWluLCBmbGFncyk7CisgICAgfQorCisgICAgLyoqCisgICAgICogQ29uc3RydWN0cyBhIGZsYWdzIHNldCBvZiBnaXZlbiBmbGFncy4KKyAgICAgKgorICAgICAqIFxwYXJhbSBmbGFncyB0aGUgb3JkZXJlZCBzZXQgb2YgZmxhZ3MuCisgICAgICogXHBhcmFtIG1pbiBtaW5pbXVtIHNldCBvZiBmbGFncyB0byBiZSBzZXQuCisgICAgICovCisgICAgc3RhdGljIGlubGluZSBDMlN1cHBvcnRlZEZsYWdzPFQ+IEZsYWdzKGNvbnN0IHN0ZDo6dmVjdG9yPFQ+ICZmbGFncywgVCBtaW4gPSBUKDApKSB7CisgICAgICAgIHJldHVybiBDMlN1cHBvcnRlZEZsYWdzKG1pbiwgZmxhZ3MpOworICAgIH0KKworICAgIC8qKgorICAgICAqIENvbnN0cnVjdHMgYSBmbGFnIHNldCBmcm9tIGEgZ2VuZXJpYyBDMkZpZWxkU3VwcG9ydGVkVmFsdWVzIG9iamVjdC4gVGhpcyB3aWxsIGJlIGFuIGVtcHR5CisgICAgICogc2V0IGlmIHRoZSBzdXBwb3J0ZWQgdmFsdWVzIGFyZSBub3Qgb2YgRkxBR1MgdHlwZS4KKyAgICAgKgorICAgICAqIFxwYXJhbSB2YWx1ZXMgdGhlIHN1cHBvcnRlZCB2YWx1ZXMgb2JqZWN0CisgICAgICovCisgICAgQzJTdXBwb3J0ZWRGbGFnczxUPihjb25zdCBDMkZpZWxkU3VwcG9ydGVkVmFsdWVzICZ2YWx1ZXMpIHsKKyAgICAgICAgaWYgKHZhbHVlcy50eXBlID09IEMyRmllbGRTdXBwb3J0ZWRWYWx1ZXM6OkZMQUdTKSB7CisgICAgICAgICAgICBfbVZhbHVlcy5pbnNlcnQoX21WYWx1ZXMuZW5kKCksIHZhbHVlcy52YWx1ZXMuYmVnaW4oKSwgdmFsdWVzLnZhbHVlcy5lbmQoKSk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBSZXR1cm5zIHdoZXRoZXIgdGhpcyBzZXQgaXMgZW1wdHkuCisgICAgICovCisgICAgY29uc3RleHByIGJvb2wgaXNFbXB0eSgpIGNvbnN0IHsKKyAgICAgICAgcmV0dXJuIF9tVmFsdWVzLmVtcHR5KCk7CisgICAgfQorCisgICAgLyoqCisgICAgICogUmV0dXJucyB3aGV0aGVyIGEgdmFsdWUgaXMgcGFydCBvZiB0aGlzIHNldC4KKyAgICAgKgorICAgICAqIFxwYXJhbSB2YWx1ZSB0aGUgdmFsdWUgdG8gY2hlY2suCisgICAgICovCisgICAgYm9vbCBjb250YWlucyhUIHZhbHVlKSBjb25zdDsKKworICAgIC8qKgorICAgICAqIFJldHVybnMgYSBuZXcgZmxhZyBzZXQgdGhhdCBpcyB0aGUgaW50ZXJzZWN0aW9uIG9mIHRoaXMgc2V0IGFuZCBhbm90aGVyLgorICAgICAqCisgICAgICogXHBhcmFtIGxpbWl0IHRoZSBvdGhlciB2YWx1ZSBzZXQKKyAgICAgKi8KKyAgICBDMlN1cHBvcnRlZEZsYWdzPFQ+IGxpbWl0ZWRUbyhjb25zdCBDMlN1cHBvcnRlZEZsYWdzPFQ+ICZsaW1pdCkgY29uc3Q7CisKKyAgICAvKioKKyAgICAgKiBDb252ZXJ0cyB0aGlzIG9iamVjdCB0byBhIEMyRmllbGRTdXBwb3J0ZWRWYWx1ZXMgb2JqZWN0LgorICAgICAqLworICAgIG9wZXJhdG9yIEMyRmllbGRTdXBwb3J0ZWRWYWx1ZXMoKSBjb25zdCB7CisgICAgICAgIHJldHVybiBDMkZpZWxkU3VwcG9ydGVkVmFsdWVzKCFpc0VtcHR5KCkgLyogZmxhZ3MgKi8sIF9tVmFsdWVzKTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBSZXR1cm5zIHRoZSBvcmRlcmVkIHNldCBvZiBmbGFncyBvZiB0aGlzIG9iamVjdC4KKyAgICAgKi8KKyAgICBjb25zdCBzdGQ6OnZlY3RvcjxUPiBmbGFncygpIGNvbnN0OworCisgICAgLyoqCisgICAgICogUmV0dXJucyB0aGUgbWluaW11bSBzZXQgb2YgZmxhZ3MgZm9yIHRoaXMgb2JqZWN0LgorICAgICAqLworICAgIFQgbWluKCkgY29uc3Q7CisKKyAgICAvKioKKyAgICAgKiBDbGVhcnMgdGhpcyBzdXBwb3J0ZWQgdmFsdWUgc2V0LgorICAgICAqLworICAgIGlubGluZSB2b2lkIGNsZWFyKCkgeworICAgICAgICBfbVZhbHVlcy5jbGVhcigpOworICAgIH0KKworcHJpdmF0ZToKKyAgICAvKioKKyAgICAgKiBDb25zdHJ1Y3RzIGEgZmxhZyBzZXQgZGlyZWN0bHkgZnJvbSBhbiBpbnRlcm5hbCByZXByZXNlbnRhdGlvbi4KKyAgICAgKgorICAgICAqIFxwYXJhbSB2YWx1ZXMgYSB2ZWN0b3IgY29udGFpbmluZyB0aGUgbWluaW11bSBmbGFnIHNldCBmb2xsb3dlZCBieSB0aGUgc2V0IG9mIGZsYWdzCisgICAgICovCisgICAgQzJTdXBwb3J0ZWRGbGFncyhzdGQ6OnZlY3RvcjxDMlZhbHVlOjpQcmltaXRpdmU+ICYmdmFsdWVzKQorICAgICAgICA6IF9tVmFsdWVzKHZhbHVlcykgeworICAgIH0KKworICAgIC8qKgorICAgICAqIENvbnN0cnVjdHMgYSBmbGFnIHNldCBmcm9tIGEgc2V0IG9mIGZsYWdzIGFuZCBhIG1pbmltdW0gZmxhZyBzZXQuCisgICAgICoKKyAgICAgKiBccGFyYW0gZmxhZ3MgdGhlIHNldAorICAgICAqLworICAgIEMyU3VwcG9ydGVkRmxhZ3MoVCBtaW4sIGNvbnN0IHN0ZDo6dmVjdG9yPFQ+ICZmbGFncykgeworICAgICAgICBfbVZhbHVlcy5lbXBsYWNlX2JhY2sobWluKTsKKyAgICAgICAgZm9yIChUIGVsZW0gOiBmbGFncykgeworICAgICAgICAgICAgX21WYWx1ZXMuZW1wbGFjZV9iYWNrKGVsZW0pOworICAgICAgICB9CisgICAgfQorCisgICAgLyoqCisgICAgICogQ29uc3RydWN0cyBhIGZsYWcgc2V0IGZyb20gYSBzZXQgb2YgaW5pdGlhbGl6ZXIgbGlzdCB2YWx1ZXMgYW5kIGEgbWluaW11bSBmbGFnIHNldAorICAgICAqCisgICAgICogXHBhcmFtIGZsYWdzIHRoZSBzZXQKKyAgICAgKi8KKyAgICBDMlN1cHBvcnRlZEZsYWdzKFQgbWluLCBjb25zdCBzdGQ6OmluaXRpYWxpemVyX2xpc3Q8VD4gZmxhZ3MpIHsKKyAgICAgICAgX21WYWx1ZXMuZW1wbGFjZV9iYWNrKG1pbik7CisgICAgICAgIGZvciAoVCBlbGVtIDogZmxhZ3MpIHsKKyAgICAgICAgICAgIF9tVmFsdWVzLmVtcGxhY2VfYmFjayhlbGVtKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHN0ZDo6dmVjdG9yPEMyVmFsdWU6OlByaW1pdGl2ZT4gX21WYWx1ZXM7IC8vLzwgdGhlIG1pbmltdW0gZmxhZyBzZXQgZm9sbG93ZWQgYnkgdGhlIHNldCBvZiBmbGFncworfTsKKworLyoqCisgKiBPcmRlcmVkIHN1cHBvcnRlZCB2YWx1ZSBzZXQgZm9yIGEgZmllbGQgb2YgYSBnaXZlbiB0eXBlLgorICovCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPgorY2xhc3MgQzJTdXBwb3J0ZWRWYWx1ZVNldCB7CisgICAgdHlwZWRlZiB0eXBlbmFtZSBfQzJGaWVsZFZhbHVlSGVscGVyPFQ+OjpWYWx1ZVR5cGUgVmFsdWVUeXBlOworCitwdWJsaWM6CisgICAgLyoqCisgICAgICogQ29uc3RydWN0cyBhbiBlbXB0eSB2YWx1ZSBzZXQuCisgICAgICoKKyAgICAgKiBcbm90ZSBUaGlzIGlzIGEgc3BlY2lhbGl6YXRlZCBzdXBwb3J0ZWQgcmFuZ2UgcmVwcmVzZW50YXRpb24gdGhhdCBpcyBvbmx5IHVzZWQgZm9yCisgICAgICogdGhpcyBvYmplY3QgLSBpdCBpcyBlcXVpdmFsZW50IHRvIHRoZSBFTVBUWSB0eXBlIGluIEMyRmllbGRTdXBwb3J0ZWRWYWx1ZXMuCisgICAgICovCisgICAgc3RhdGljIGlubGluZSBDMlN1cHBvcnRlZFZhbHVlU2V0PFQ+IE5vbmUoKSB7CisgICAgICAgIHJldHVybiBDMlN1cHBvcnRlZFZhbHVlU2V0KHsgfSk7CisgICAgfQorCisgICAgLyoqCisgICAgICogQ29uc3RydWN0cyBhIHZhbHVlIHNldCBvZiBnaXZlbiB2YWx1ZXMuCisgICAgICoKKyAgICAgKiBccGFyYW0gdmFsdWVzIHRoZSBvcmRlcmVkIHNldCBvZiB2YWx1ZXMgYXMgYW4gaW5pdGlhbGl6ZXIgbGlzdC4KKyAgICAgKi8KKyAgICBzdGF0aWMgaW5saW5lIEMyU3VwcG9ydGVkVmFsdWVTZXQ8VD4gT25lT2YoY29uc3Qgc3RkOjppbml0aWFsaXplcl9saXN0PFQ+IHZhbHVlcykgeworICAgICAgICByZXR1cm4gQzJTdXBwb3J0ZWRWYWx1ZVNldCh2YWx1ZXMpOworICAgIH0KKworICAgIC8qKgorICAgICAqIENvbnN0cnVjdHMgYSB2YWx1ZSBzZXQgb2YgZ2l2ZW4gdmFsdWVzLgorICAgICAqCisgICAgICogXHBhcmFtIHZhbHVlcyB0aGUgb3JkZXJlZCBzZXQgb2YgdmFsdWVzLgorICAgICAqLworICAgIHN0YXRpYyBpbmxpbmUgQzJTdXBwb3J0ZWRWYWx1ZVNldDxUPiBPbmVPZihjb25zdCBzdGQ6OnZlY3RvcjxUPiAmdmFsdWVzKSB7CisgICAgICAgIHJldHVybiBDMlN1cHBvcnRlZFZhbHVlU2V0KHZhbHVlcyk7CisgICAgfQorCisgICAgLyoqCisgICAgICogQ29uc3RydWN0cyBhIHZhbHVlIHNldCBmcm9tIGEgZ2VuZXJpYyBDMkZpZWxkU3VwcG9ydGVkVmFsdWVzIG9iamVjdC4gVGhpcyB3aWxsIGJlIGFuIGVtcHR5CisgICAgICogc2V0IGlmIHRoZSBzdXBwb3J0ZWQgdmFsdWVzIGFyZSBub3Qgb2YgVkFMVUVTIHR5cGUuCisgICAgICoKKyAgICAgKiBccGFyYW0gdmFsdWVzIHRoZSBzdXBwb3J0ZWQgdmFsdWVzIG9iamVjdAorICAgICAqLworICAgIEMyU3VwcG9ydGVkVmFsdWVTZXQ8VD4oY29uc3QgQzJGaWVsZFN1cHBvcnRlZFZhbHVlcyAmdmFsdWVzKSB7CisgICAgICAgIGlmICh2YWx1ZXMudHlwZSA9PSBDMkZpZWxkU3VwcG9ydGVkVmFsdWVzOjpWQUxVRVMpIHsKKyAgICAgICAgICAgIF9tVmFsdWVzLmluc2VydChfbVZhbHVlcy5lbmQoKSwgdmFsdWVzLnZhbHVlcy5iZWdpbigpLCB2YWx1ZXMudmFsdWVzLmVuZCgpKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIC8qKgorICAgICAqIFJldHVybnMgd2hldGhlciB0aGlzIHJhbmdlIGlzIGVtcHR5LgorICAgICAqLworICAgIGNvbnN0ZXhwciBib29sIGlzRW1wdHkoKSBjb25zdCB7CisgICAgICAgIHJldHVybiBfbVZhbHVlcy5lbXB0eSgpOworICAgIH0KKworICAgIC8qKgorICAgICAqIFJldHVybnMgd2hldGhlciBhIHZhbHVlIGlzIHBhcnQgb2YgdGhpcyBzZXQuCisgICAgICoKKyAgICAgKiBccGFyYW0gdmFsdWUgdGhlIHZhbHVlIHRvIGNoZWNrLgorICAgICAqLworICAgIGJvb2wgY29udGFpbnMoVCB2YWx1ZSkgY29uc3Q7CisKKyAgICAvKioKKyAgICAgKiBSZXR1cm5zIGEgbmV3IHZhbHVlIHNldCB0aGF0IGlzIHRoZSBpbnRlcnNlY3Rpb24gb2YgdGhpcyBzZXQgYW5kIGFub3RoZXIuCisgICAgICoKKyAgICAgKiBccGFyYW0gbGltaXQgdGhlIG90aGVyIHZhbHVlIHNldAorICAgICAqLworICAgIEMyU3VwcG9ydGVkVmFsdWVTZXQ8VD4gbGltaXRlZFRvKGNvbnN0IEMyU3VwcG9ydGVkVmFsdWVTZXQ8VD4gJmxpbWl0KSBjb25zdDsKKworICAgIC8qKgorICAgICAqIFJldHVybnMgYSBuZXcgdmFsdWUgc2V0IHRoYXQgaXMgdGhlIGludGVyc2VjdGlvbiBvZiB0aGlzIHNldCBhbmQgYSB2YWx1ZSByYW5nZS4KKyAgICAgKgorICAgICAqIFxwYXJhbSBsaW1pdCB0aGUgb3RoZXIgcmFuZ2UKKyAgICAgKi8KKyAgICBDMlN1cHBvcnRlZFZhbHVlU2V0PFQ+IGxpbWl0ZWRUbyhjb25zdCBDMlN1cHBvcnRlZFJhbmdlPFQ+ICZsaW1pdCkgY29uc3Q7CisKKyAgICAvKioKKyAgICAgKiBSZXR1cm5zIGEgbmV3IHZhbHVlIHNldCB0aGF0IGlzIHRoZSBpbnRlcnNlY3Rpb24gb2YgdGhpcyBzZXQgYW5kIGEgZmxhZyBzZXQuCisgICAgICoKKyAgICAgKiBccGFyYW0gbGltaXQgdGhlIG90aGVyIGZsYWcgc2V0CisgICAgICovCisgICAgQzJTdXBwb3J0ZWRWYWx1ZVNldDxUPiBsaW1pdGVkVG8oY29uc3QgQzJTdXBwb3J0ZWRGbGFnczxUPiAmbGltaXQpIGNvbnN0OworCisgICAgLyoqCisgICAgICogQ29udmVydHMgdGhpcyBvYmplY3QgdG8gYSBDMkZpZWxkU3VwcG9ydGVkVmFsdWVzIG9iamVjdC4KKyAgICAgKi8KKyAgICBvcGVyYXRvciBDMkZpZWxkU3VwcG9ydGVkVmFsdWVzKCkgY29uc3QgeworICAgICAgICByZXR1cm4gQzJGaWVsZFN1cHBvcnRlZFZhbHVlcyhmYWxzZSAvKiBmbGFncyAqLywgX21WYWx1ZXMpOworICAgIH0KKworICAgIC8qKgorICAgICAqIFJldHVybnMgdGhlIG9yZGVyZWQgc2V0IG9mIHZhbHVlcyBvZiB0aGlzIG9iamVjdC4KKyAgICAgKi8KKyAgICBjb25zdCBzdGQ6OnZlY3RvcjxUPiB2YWx1ZXMoKSBjb25zdDsKKworICAgIC8qKgorICAgICAqIENsZWFycyB0aGlzIHN1cHBvcnRlZCB2YWx1ZSBzZXQuCisgICAgICovCisgICAgaW5saW5lIHZvaWQgY2xlYXIoKSB7CisgICAgICAgIF9tVmFsdWVzLmNsZWFyKCk7CisgICAgfQorCitwcml2YXRlOgorICAgIC8qKgorICAgICAqIENvbnN0cnVjdHMgYSB2YWx1ZSBzZXQgZnJvbSBhIHNldCBvZiBDMlZhbHVlOjpQcmltaXRpdmUgdmFsdWVzLgorICAgICAqCisgICAgICogXHBhcmFtIHZhbHVlcyB0aGUgc2V0CisgICAgICovCisgICAgQzJTdXBwb3J0ZWRWYWx1ZVNldChzdGQ6OnZlY3RvcjxDMlZhbHVlOjpQcmltaXRpdmU+ICYmdmFsdWVzKQorICAgICAgICA6IF9tVmFsdWVzKHZhbHVlcykgeworICAgIH0KKworICAgIC8qKgorICAgICAqIENvbnN0cnVjdHMgYSB2YWx1ZSBzZXQgZnJvbSBhIHNldCBvZiB2YWx1ZXMuCisgICAgICoKKyAgICAgKiBccGFyYW0gdmFsdWVzIHRoZSBzZXQKKyAgICAgKi8KKyAgICBDMlN1cHBvcnRlZFZhbHVlU2V0KGNvbnN0IHN0ZDo6dmVjdG9yPFQ+ICZ2YWx1ZXMpIHsKKyAgICAgICAgZm9yIChUIGVsZW0gOiB2YWx1ZXMpIHsKKyAgICAgICAgICAgIF9tVmFsdWVzLmVtcGxhY2VfYmFjayhlbGVtKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIC8qKgorICAgICAqIENvbnN0cnVjdHMgYSB2YWx1ZSBzZXQgZnJvbSBhIHNldCBvZiBpbml0aWFsaXplciBsaXN0IHZhbHVlcworICAgICAqCisgICAgICogXHBhcmFtIHZhbHVlcyB0aGUgc2V0CisgICAgICovCisgICAgQzJTdXBwb3J0ZWRWYWx1ZVNldChjb25zdCBzdGQ6OmluaXRpYWxpemVyX2xpc3Q8VD4gdmFsdWVzKSB7CisgICAgICAgIGZvciAoVCBlbGVtIDogdmFsdWVzKSB7CisgICAgICAgICAgICBfbVZhbHVlcy5lbXBsYWNlX2JhY2soZWxlbSk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBzdGQ6OnZlY3RvcjxDMlZhbHVlOjpQcmltaXRpdmU+IF9tVmFsdWVzOyAvLy88IHRoZSBzdXBwb3J0ZWQgc2V0IG9mIHZhbHVlcworfTsKKworLyoqCisgKiBIZWxwZXIgY2xhc3MgdG8gaGFuZGxlIEMyRmllbGRTdXBwb3J0ZVZhbHVlcyBvYmplY3QgZm9yIGZpZWxkcyBvZiB2YXJpb3VzIHR5cGVzLgorICovCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPgorY2xhc3MgQzJGaWVsZFN1cHBvcnRlZFZhbHVlc0hlbHBlcjsKKworLy8gdGVtcGxhdGVkIG9wZXJhdG9yIG11c3QgYmUgcHJlZGVjbGFyZWQgZm9yIGZyaWVuZCBkZWNsYXJhdGlvbgordGVtcGxhdGU8dHlwZW5hbWUgVD4KK3N0ZDo6b3N0cmVhbSYgb3BlcmF0b3I8PChzdGQ6Om9zdHJlYW0mIG9zLCBjb25zdCBDMkZpZWxkU3VwcG9ydGVkVmFsdWVzSGVscGVyPFQ+ICZpKTsKKwordGVtcGxhdGU8dHlwZW5hbWUgVD4KK2NsYXNzIEMyRmllbGRTdXBwb3J0ZWRWYWx1ZXNIZWxwZXIgeworcHVibGljOgorICAgIC8qKgorICAgICAqIENyZWF0ZXMgYSBoZWxwZXIgZm9yIGEgc3BlY2lmaWMgdHlwZSBmcm9tIGEgZ2VuZXJpYyBDMkZpZWxkU3VwcG9ydGVkVmFsdWVzIHN0cnVjdC4KKyAgICAgKi8KKyAgICBDMkZpZWxkU3VwcG9ydGVkVmFsdWVzSGVscGVyKGNvbnN0IEMyRmllbGRTdXBwb3J0ZWRWYWx1ZXMgJnZhbHVlcyk7CisKKyAgICAvLyBUUklDS1k6IG5lZWRlZCBmb3Igc3RkOjp1bmlxdWVfcHRyPEltcGw+IGRlY2xhcmF0aW9uCisgICAgfkMyRmllbGRTdXBwb3J0ZWRWYWx1ZXNIZWxwZXIoKTsKKworICAgIC8vIHN1cHBvcnQgY29weSBjb25zdHJ1Y3Rvci9vcGVyYXRvcgorICAgIEMyRmllbGRTdXBwb3J0ZWRWYWx1ZXNIZWxwZXIoY29uc3QgQzJGaWVsZFN1cHBvcnRlZFZhbHVlc0hlbHBlciAmKTsKKyAgICBDMkZpZWxkU3VwcG9ydGVkVmFsdWVzSGVscGVyJiBvcGVyYXRvcj0oY29uc3QgQzJGaWVsZFN1cHBvcnRlZFZhbHVlc0hlbHBlciAmKTsKKworICAgIGJvb2wgc3VwcG9ydHMoVCB2YWx1ZSkgY29uc3Q7CisKK3ByaXZhdGU6CisgICAgLy8gdXNlIHBpbXBsIGFzIGltcGxlbWVudGF0aW9uIG1heSBjaGFuZ2UgaW4gdGhlIGZ1dHVyZQorICAgIHN0cnVjdCBJbXBsOworICAgIHN0ZDo6dW5pcXVlX3B0cjxJbXBsPiBfbUltcGw7CisKKyAgICBmcmllbmQgc3RkOjpvc3RyZWFtJiBvcGVyYXRvcjw8IDxUPihzdGQ6Om9zdHJlYW0mIG9zLCBjb25zdCBDMkZpZWxkU3VwcG9ydGVkVmFsdWVzSGVscGVyPFQ+ICZpKTsKKyAgICAvL2ZyaWVuZCBzdGQ6Om9zdHJlYW0mIG9wZXJhdG9yPDwoc3RkOjpvc3RyZWFtJiBvcywgY29uc3QgQzJGaWVsZFN1cHBvcnRlZFZhbHVlc0hlbHBlciAmaSk7Cit9OworCisvKioKKyAqIEJ1aWxkZXIgZm9yIHN1cHBvcnRlZCB2YWx1ZXMgZm9yIGEgZmllbGQgb2YgYSBnaXZlbiB0eXBlLgorICoKKyAqIFRoaXMgYnVpbGRlciBjYW4gYmUgdXNlZCB0byBzdWNjZXNzaXZlbHkgcmVzdHJpY3QgdGhlIHN1cHBvcnRlZCB2YWx1ZXMgZm9yIGEgZmllbGQuIFVwb24KKyAqIGNyZWF0aW9uLCB0aGVyZSBhcmUgbm8gc3VwcG9ydGVkIHZhbHVlcyBzcGVjaWZpZWQgLSB3aGljaCBmb3IgdGhpcyBidWlsZGVyIG1lYW5zIHRoYXQgYWxsCisgKiB2YWx1ZXMgYXJlIHN1cHBvcnRlZC4KKyAqLwordGVtcGxhdGU8dHlwZW5hbWUgVD4KK2NsYXNzIEMyUGFyYW1GaWVsZFZhbHVlc0J1aWxkZXIgeworcHVibGljOgorICAgIC8qKgorICAgICAqIENyZWF0ZXMgYSBidWlsZGVyIHdpdGggbm8gZGVmaW5lZCB2YWx1ZXMgLSBidXQgaW1wbGljaXRseSBhbnkgdmFsdWUgYWxsb3dlZC4KKyAgICAgKi8KKyAgICBDMlBhcmFtRmllbGRWYWx1ZXNCdWlsZGVyKGNvbnN0IEMyUGFyYW1GaWVsZCAmZmllbGQpOworCisgICAgLyoqCisgICAgICogR2V0IEMyUGFyYW1GaWVsZFZhbHVlcyBmcm9tIHRoaXMgYnVpbGRlci4KKyAgICAgKi8KKyAgICBvcGVyYXRvciBDMlBhcmFtRmllbGRWYWx1ZXMoKSBjb25zdDsKKworICAgIC8qKgorICAgICAqIERlZmluZSB0aGUgc3VwcG9ydGVkIHZhbHVlcyBhcyB0aGUgY3VycmVudGx5IHN1cHBvcnRlZCB2YWx1ZXMgb2YgdGhpcyBidWlsZGVyLgorICAgICAqLworICAgIEMyUGFyYW1GaWVsZFZhbHVlc0J1aWxkZXI8VD4gJmFueSgpOworCisgICAgLyoqCisgICAgICogUmVzdHJpY3QgKGFuZCB0aHVzIGRlZmluZSkgdGhlIHN1cHBvcnRlZCB2YWx1ZXMgdG8gbm9uZS4KKyAgICAgKgorICAgICAqIFxub3RlIFRoaXMgcmVhbGx5IHNob3VsZCBub3QgYmUgdXNlZCBmcm9tIHRoZSBidWlsZGVyIGFzIGFsbCBwYXJhbXMgbXVzdCBoYXZlIHN1cHBvcnRlZAorICAgICAqICAgICAgIHZhbHVlcywgYnV0IGlzIGhlcmUgaW4gY2FzZSB0aGlzIGlzIHJlYWxseSB0aGUgY2FzZS4KKyAgICAgKi8KKyAgICBDMlBhcmFtRmllbGRWYWx1ZXNCdWlsZGVyPFQ+ICZub25lKCk7CisKKyAgICAvKioKKyAgICAgKiBSZXN0cmljdCAoYW5kIHRodXMgZGVmaW5lKSB0aGUgc3VwcG9ydGVkIHZhbHVlcyB0byB8dmFsdWV8IGFsb25lLgorICAgICAqLworICAgIEMyUGFyYW1GaWVsZFZhbHVlc0J1aWxkZXI8VD4gJmVxdWFsVG8oVCB2YWx1ZSk7CisKKyAgICAvKioKKyAgICAgKiBSZXN0cmljdCAoYW5kIHRodXMgZGVmaW5lKSB0aGUgc3VwcG9ydGVkIHZhbHVlcyB0byB2YWx1ZXMgZ3JlYXRlciB0aGFuIHx2YWx1ZXwuCisgICAgICovCisgICAgaW5saW5lIEMyUGFyYW1GaWVsZFZhbHVlc0J1aWxkZXI8VD4gJmdyZWF0ZXJUaGFuKFQgdmFsdWUpIHsKKyAgICAgICAgcmV0dXJuIGxpbWl0VG8oQzJTdXBwb3J0ZWRSYW5nZTxUPjo6R3JlYXRlclRoYW4odmFsdWUpKTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBSZXN0cmljdCAoYW5kIHRodXMgZGVmaW5lKSB0aGUgc3VwcG9ydGVkIHZhbHVlcyB0byB2YWx1ZXMgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvIHx2YWx1ZXwuCisgICAgICovCisgICAgQzJQYXJhbUZpZWxkVmFsdWVzQnVpbGRlcjxUPiAmZ3JlYXRlclRoYW5PckVxdWFsVG8oVCB2YWx1ZSkgeworICAgICAgICByZXR1cm4gbGltaXRUbyhDMlN1cHBvcnRlZFJhbmdlPFQ+OjpHcmVhdGVyVGhhbk9yRXF1YWxUbyh2YWx1ZSkpOworICAgIH0KKworICAgIC8qKgorICAgICAqIFJlc3RyaWN0IChhbmQgdGh1cyBkZWZpbmUpIHRoZSBzdXBwb3J0ZWQgdmFsdWVzIHRvIHZhbHVlcyBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gfHZhbHVlfC4KKyAgICAgKi8KKyAgICBDMlBhcmFtRmllbGRWYWx1ZXNCdWlsZGVyPFQ+ICZub3RMZXNzVGhhbihUIHZhbHVlKSB7CisgICAgICAgIHJldHVybiBsaW1pdFRvKEMyU3VwcG9ydGVkUmFuZ2U8VD46Ok5vdExlc3NUaGFuKHZhbHVlKSk7CisgICAgfQorCisgICAgLyoqCisgICAgICogUmVzdHJpY3QgKGFuZCB0aHVzIGRlZmluZSkgdGhlIHN1cHBvcnRlZCB2YWx1ZXMgdG8gdmFsdWVzIGxlc3MgdGhhbiBvciBlcXVhbCB0byB8dmFsdWV8LgorICAgICAqLworICAgIEMyUGFyYW1GaWVsZFZhbHVlc0J1aWxkZXI8VD4gJmxlc3NUaGFuT3JFcXVhbFRvKFQgdmFsdWUpIHsKKyAgICAgICAgcmV0dXJuIGxpbWl0VG8oQzJTdXBwb3J0ZWRSYW5nZTxUPjo6TGVzc1RoYW5PckVxdWFsVG8odmFsdWUpKTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBSZXN0cmljdCAoYW5kIHRodXMgZGVmaW5lKSB0aGUgc3VwcG9ydGVkIHZhbHVlcyB0byB2YWx1ZXMgbGVzcyB0aGFuIG9yIGVxdWFsIHRvIHx2YWx1ZXwuCisgICAgICovCisgICAgQzJQYXJhbUZpZWxkVmFsdWVzQnVpbGRlcjxUPiAmbm90R3JlYXRlclRoYW4oVCB2YWx1ZSkgeworICAgICAgICByZXR1cm4gbGltaXRUbyhDMlN1cHBvcnRlZFJhbmdlPFQ+OjpOb3RHcmVhdGVyVGhhbih2YWx1ZSkpOworICAgIH0KKworICAgIC8qKgorICAgICAqIFJlc3RyaWN0IChhbmQgdGh1cyBkZWZpbmUpIHRoZSBzdXBwb3J0ZWQgdmFsdWVzIHRvIHZhbHVlcyBsZXNzIHRoYW4gfHZhbHVlfC4KKyAgICAgKi8KKyAgICBDMlBhcmFtRmllbGRWYWx1ZXNCdWlsZGVyPFQ+ICZsZXNzVGhhbihUIHZhbHVlKSB7CisgICAgICAgIHJldHVybiBsaW1pdFRvKEMyU3VwcG9ydGVkUmFuZ2U8VD46Okxlc3NUaGFuKHZhbHVlKSk7CisgICAgfQorCisgICAgLyoqCisgICAgICogUmVzdHJpY3QgKGFuZCB0aHVzIGRlZmluZSkgdGhlIHN1cHBvcnRlZCB2YWx1ZXMgdG8gdmFsdWVzIGluIHRoZSByYW5nZSBvZiBbIHxtaW58LCB8bWF4fCBdCisgICAgICogd2l0aCBvcHRpb25hbCB8c3RlcHwuCisgICAgICovCisgICAgQzJQYXJhbUZpZWxkVmFsdWVzQnVpbGRlcjxUPiAmaW5SYW5nZSgKKyAgICAgICAgICAgIFQgbWluLCBUIG1heCwgVCBzdGVwID0gc3RkOjppc19mbG9hdGluZ19wb2ludDxUPjo6dmFsdWUgPyBUKDApIDogVCgxKSkgIHsKKyAgICAgICAgcmV0dXJuIGxpbWl0VG8oQzJTdXBwb3J0ZWRSYW5nZTxUPjo6SW5SYW5nZShtaW4sIG1heCwgc3RlcCkpOworICAgIH0KKworICAgIC8qKgorICAgICAqIFJlc3RyaWN0IChhbmQgdGh1cyBkZWZpbmUpIHRoZSBzdXBwb3J0ZWQgdmFsdWVzIHRvIHZhbHVlcyBpbiB0aGUgZ2VvbWV0cmljIHNlcmllcyBzdGFydGluZworICAgICAqIGZyb20gfG1pbnwgd2l0aCBmYWN0b3IgfG51bXwgLyB8ZGVub218LCBub3QgZ3JlYXRlciB0aGFuIHxtYXh8LgorICAgICAqLworICAgIEMyUGFyYW1GaWVsZFZhbHVlc0J1aWxkZXI8VD4gJmluU2VyaWVzKFQgbWluLCBUIG1heCwgVCBudW0sIFQgZGVub20pIHsKKyAgICAgICAgcmV0dXJuIGxpbWl0VG8oQzJTdXBwb3J0ZWRSYW5nZTxUPjo6SW5TZXJpZXMobWluLCBtYXgsIG51bSwgZGVub20pKTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBSZXN0cmljdCAoYW5kIHRodXMgZGVmaW5lKSB0aGUgc3VwcG9ydGVkIHZhbHVlcyB0byB2YWx1ZXMgaW4gdGhlIG11bHRpcGx5LWFjY3VtdWxhdGUgc2VyaWVzCisgICAgICogc3RhcnRpbmcgZnJvbSB8bWlufCB3aXRoIGZhY3RvciB8bnVtfCAvIHxkZW5vbXwgYW5kIHxzdGVwfCwgbm90IGdyZWF0ZXIgdGhhbiB8bWF4fC4KKyAgICAgKi8KKyAgICBDMlBhcmFtRmllbGRWYWx1ZXNCdWlsZGVyPFQ+ICZpbk1hY1NlcmllcyhUIG1pbiwgVCBtYXgsIFQgc3RlcCwgVCBudW0sIFQgZGVub20pIHsKKyAgICAgICAgcmV0dXJuIGxpbWl0VG8oQzJTdXBwb3J0ZWRSYW5nZTxUPjo6SW5NYWNTZXJpZXMobWluLCBtYXgsIHN0ZXAsIG51bSwgZGVub20pKTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBSZXN0cmljdCAoYW5kIHRodXMgZGVmaW5lKSB0aGUgc3VwcG9ydGVkIHZhbHVlcyB0byB2YWx1ZXMgaW4gfHZhbHVlc3wuCisgICAgICovCisgICAgQzJQYXJhbUZpZWxkVmFsdWVzQnVpbGRlcjxUPiAmb25lT2YoY29uc3Qgc3RkOjppbml0aWFsaXplcl9saXN0PFQ+IHZhbHVlcykgeworICAgICAgICByZXR1cm4gbGltaXRUbyhDMlN1cHBvcnRlZFZhbHVlU2V0PFQ+OjpPbmVPZih2YWx1ZXMpKTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBSZXN0cmljdCAoYW5kIHRodXMgZGVmaW5lKSB0aGUgc3VwcG9ydGVkIHZhbHVlcyB0byB2YWx1ZXMgaW4gfHZhbHVlc3wuCisgICAgICovCisgICAgQzJQYXJhbUZpZWxkVmFsdWVzQnVpbGRlcjxUPiAmb25lT2YoY29uc3Qgc3RkOjp2ZWN0b3I8VD4gJnZhbHVlcykgeworICAgICAgICByZXR1cm4gbGltaXRUbyhDMlN1cHBvcnRlZFZhbHVlU2V0PFQ+OjpPbmVPZih2YWx1ZXMpKTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBSZXN0cmljdCAoYW5kIHRodXMgZGVmaW5lKSB0aGUgc3VwcG9ydGVkIHZhbHVlcyB0byBmbGFncyBpbiB8ZmxhZ3N8IHdpdGggYXQgbGVhc3QgfG1pbnwKKyAgICAgKiBzZXQuCisgICAgICovCisgICAgQzJQYXJhbUZpZWxkVmFsdWVzQnVpbGRlcjxUPiAmZmxhZ3MoY29uc3Qgc3RkOjp2ZWN0b3I8VD4gJmZsYWdzLCBUIG1pbiA9IFQoMCkpIHsKKyAgICAgICAgcmV0dXJuIGxpbWl0VG8oQzJTdXBwb3J0ZWRGbGFnczxUPjo6RmxhZ3MoZmxhZ3MsIG1pbikpOworICAgIH0KKworICAgIC8qKgorICAgICAqIFJlc3RyaWN0IChhbmQgdGh1cyBkZWZpbmUpIHRoZSBzdXBwb3J0ZWQgdmFsdWVzIHRvIGZsYWdzIGluIHx2YWx1ZXN8IHdpdGggYXQgbGVhc3QgfG1pbnwKKyAgICAgKiBzZXQuCisgICAgICovCisgICAgQzJQYXJhbUZpZWxkVmFsdWVzQnVpbGRlcjxUPiAmZmxhZ3MoY29uc3Qgc3RkOjppbml0aWFsaXplcl9saXN0PFQ+IGZsYWdzLCBUIG1pbiA9IFQoMCkpIHsKKyAgICAgICAgcmV0dXJuIGxpbWl0VG8oQzJTdXBwb3J0ZWRGbGFnczxUPjo6RmxhZ3MoZmxhZ3MsIG1pbikpOworICAgIH0KKworICAgIHZpcnR1YWwgfkMyUGFyYW1GaWVsZFZhbHVlc0J1aWxkZXIoKTsKKworICAgIC8vIHN1cHBvcnQgY29weSBjb25zdHJ1Y3Rvci9vcGVyYXRvcgorICAgIEMyUGFyYW1GaWVsZFZhbHVlc0J1aWxkZXIoY29uc3QgQzJQYXJhbUZpZWxkVmFsdWVzQnVpbGRlciAmKTsKKyAgICBDMlBhcmFtRmllbGRWYWx1ZXNCdWlsZGVyJiBvcGVyYXRvcj0oY29uc3QgQzJQYXJhbUZpZWxkVmFsdWVzQnVpbGRlciAmKTsKKworcHJpdmF0ZToKKyAgICAvKioKKyAgICAgKiBSZXN0cmljdCAoYW5kIHRodXMgZGVmaW5lKSB0aGUgc3VwcG9ydGVkIHZhbHVlcyB0byBhIHZhbHVlIHNldC4KKyAgICAgKi8KKyAgICBDMlBhcmFtRmllbGRWYWx1ZXNCdWlsZGVyPFQ+ICZsaW1pdFRvKGNvbnN0IEMyU3VwcG9ydGVkVmFsdWVTZXQ8VD4gJmxpbWl0KTsKKworICAgIC8qKgorICAgICAqIFJlc3RyaWN0IChhbmQgdGh1cyBkZWZpbmUpIHRoZSBzdXBwb3J0ZWQgdmFsdWVzIHRvIGEgdmFsdWUgc2V0LgorICAgICAqLworICAgIEMyUGFyYW1GaWVsZFZhbHVlc0J1aWxkZXI8VD4gJmxpbWl0VG8oY29uc3QgQzJTdXBwb3J0ZWRGbGFnczxUPiAmbGltaXQpOworCisgICAgLyoqCisgICAgICogUmVzdHJpY3QgKGFuZCB0aHVzIGRlZmluZSkgdGhlIHN1cHBvcnRlZCB2YWx1ZXMgdG8gYSByYW5nZS4KKyAgICAgKi8KKyAgICBDMlBhcmFtRmllbGRWYWx1ZXNCdWlsZGVyPFQ+ICZsaW1pdFRvKGNvbnN0IEMyU3VwcG9ydGVkUmFuZ2U8VD4gJmxpbWl0KTsKKworICAgIHN0cnVjdCBJbXBsOworICAgIHN0ZDo6dW5pcXVlX3B0cjxJbXBsPiBfbUltcGw7Cit9OworCisvKioKKyAqIEJ1aWxkZXIgZm9yIGEgbGlzdCBvZiBzZXR0aW5nIGNvbmZsaWN0cy4KKyAqLworY2xhc3MgQzJTZXR0aW5nQ29uZmxpY3RzQnVpbGRlciB7CitwdWJsaWM6CisgICAgLyoqCisgICAgICogQ3JlYXRlcyBhbiBlbXB0eSBsaXN0IG9mIHNldHRpbmcgY29uZmxpY3RzLgorICAgICAqLworICAgIEMyU2V0dGluZ0NvbmZsaWN0c0J1aWxkZXIoKTsKKworICAgIC8qKgorICAgICAqIENyZWF0ZXMgYSBsaXN0IGNvbnRhaW5pbmcgYSBzaW5nbGUgc2V0dGluZyBjb25mbGljdC4KKyAgICAgKi8KKyAgICBDMlNldHRpbmdDb25mbGljdHNCdWlsZGVyKEMyUGFyYW1GaWVsZFZhbHVlcyAmJmNvbmZsaWN0KTsKKworICAgIC8qKgorICAgICAqIEFkZHMgYSBjb25mbGljdCB0byB0aGUgY3VycmVudCBsaXN0IG9mIGNvbmZsaWN0cyBhbmQgcmV0dXJucyB0aGlzCisgICAgICovCisgICAgQzJTZXR0aW5nQ29uZmxpY3RzQnVpbGRlciYgd2l0aChDMlBhcmFtRmllbGRWYWx1ZXMgJiZjb25mbGljdCk7CisKKyAgICAvKioKKyAgICAgKiBHZXRzIHRoZSBjdXJyZW50IGxpc3Qgb2YgY29uZmxpY3RzIChhbmQgbW92ZXMgdGhlbSBvdXQgb2YgdGhpcyBidWlsZGVyLikKKyAgICAgKiAodGhpcyBpcyB3aHkgaXQgaXMgbm90IGNvbnN0KQorICAgICAqLworICAgIHN0ZDo6dmVjdG9yPEMyUGFyYW1GaWVsZFZhbHVlcz4gcmV0cmlldmVDb25mbGljdHMoKTsKKworICAgIC8qKgorICAgICAqIFJldHVybnMgd2hldGhlciB0aGUgY3VycmVudCBsaXN0IGlzIGVtcHR5LgorICAgICAqLworICAgIGlubGluZSBib29sIGVtcHR5KCkgY29uc3QgeyByZXR1cm4gX21Db25mbGljdHMuZW1wdHkoKTsgfQorCisgICAgaW5saW5lIG9wZXJhdG9yIGJvb2woKSBjb25zdCB7IHJldHVybiBlbXB0eSgpOyB9CisKK3ByaXZhdGU6CisgICAgc3RkOjp2ZWN0b3I8QzJQYXJhbUZpZWxkVmFsdWVzPiBfbUNvbmZsaWN0czsKK307CisKKy8qKgorICogU2V0dGluZyByZXN1bHQgYnVpbGRlciBmb3IgYSBwYXJhbWV0ZXIuCisgKi8KK3N0cnVjdCBDMlNldHRpbmdSZXN1bHRCdWlsZGVyIHsKKyAgICAvKioKKyAgICAgKiBDcmVhdGVzIGEgcmVhZC1vbmx5IHNldHRpbmcgcmVzdWx0IGZhaWx1cmUuCisgICAgICoKKyAgICAgKiBUaGlzIGRvZXMgbm90IHRha2UgRlNWIGFzIG9ubHkgdGhlIGN1cnJlbnQgdmFsdWUgb2YgdGhlIGZpZWxkIGlzIHN1cHBvcnRlZC4KKyAgICAgKi8KKyAgICBzdGF0aWMgQzJTZXR0aW5nUmVzdWx0IFJlYWRPbmx5KGNvbnN0IEMyUGFyYW1GaWVsZCAmcGFyYW0pOworCisgICAgLyoqCisgICAgICogQ3JlYXRlcyBhIGJhZC12YWx1ZSBvciBpbmZvaW5mb3JtYXRpb25hbCBiYWQtdmFsdWUgc2V0dGluZyByZXN1bHQgZmFpbHVyZS4KKyAgICAgKgorICAgICAqIFRoaXMgZG9lcyBub3QgdGFrZSBGU1YgYXMgdGhlIHZhbHVlIGlzIG91dHNpZGUgb2YgdGhlIHBvc3NpYmxlIHZhbHVlcy4gQXMgc3VjaCwgdGhlcmUgYXJlIG5vCisgICAgICogY29uZmxpY3RzIGZvciB0aGlzIGNhc2UgZWl0aGVyLgorICAgICAqLworICAgIHN0YXRpYyBDMlNldHRpbmdSZXN1bHQgQmFkVmFsdWUoY29uc3QgQzJQYXJhbUZpZWxkICZwYXJhbUZpZWxkLCBib29sIGlzSW5mbyA9IGZhbHNlKTsKKworICAgIC8qKgorICAgICAqIENyZWF0ZXMgYSBjb25mbGljdCAob3IgaW5mb3JtYXRpb25hbCBjb25mbGljdCkgc2V0dGluZyByZXN1bHQgZmFpbHVyZS4KKyAgICAgKgorICAgICAqIFRoaXMgdGFrZXMgRlNWIHNvIHVzZSBwYXJhbUZpZWxkVmFsdWVzIGFuZCBvcHRpb25hbCBjb25mbGljdHMuCisgICAgICovCisgICAgc3RhdGljIEMyU2V0dGluZ1Jlc3VsdCBDb25mbGljdCgKKyAgICAgICAgICAgIEMyUGFyYW1GaWVsZFZhbHVlcyAmJnBhcmFtRmllbGRWYWx1ZXMsIEMyU2V0dGluZ0NvbmZsaWN0c0J1aWxkZXIgJmNvbmZsaWN0cywKKyAgICAgICAgICAgIGJvb2wgaXNJbmZvID0gZmFsc2UpOworCisgICAgLy8gVE9ETzogcmV0cmlldmUgcmVzdWx0cworCisKK3ByaXZhdGU6CisgICAgQzJQYXJhbUZpZWxkIF9tUGFyYW1GaWVsZDsKKyAgICBDMlNldHRpbmdSZXN1bHQgX21SZXN1bHQ7CisKKyAgICBDMlNldHRpbmdSZXN1bHRCdWlsZGVyKGNvbnN0IEMyU2V0dGluZ1Jlc3VsdEJ1aWxkZXIgJikgPSBkZWxldGU7Cit9OworCisvKioKKyAqIFNldHRpbmcgcmVzdWx0cyAoUExVUkFMKSBidWlsZGVyLgorICoKKyAqIFNldHRpbmcgcmVzdWx0cyBjb250YWluIGEgZmFpbHVyZSBzdGF0dXMgYWxvbmcgd2l0aCBhIGxpc3Qgb2YgZmFpbGluZyBmaWVsZHMgb3IgcGFyYW1zLgorICovCitzdHJ1Y3QgQzJTZXR0aW5nUmVzdWx0c0J1aWxkZXIgeworICAgIEMyU2V0dGluZ1Jlc3VsdHNCdWlsZGVyKGNvbnN0IEMyU2V0dGluZ1Jlc3VsdHNCdWlsZGVyJikgPSBkZWxldGU7CisgICAgQzJTZXR0aW5nUmVzdWx0c0J1aWxkZXIoQzJTZXR0aW5nUmVzdWx0c0J1aWxkZXImJikgPSBkZWZhdWx0OworICAgIEMyU2V0dGluZ1Jlc3VsdHNCdWlsZGVyICZvcGVyYXRvcj0oQzJTZXR0aW5nUmVzdWx0c0J1aWxkZXImJikgPSBkZWZhdWx0OworCisgICAgLyoqIFxyZXR1cm5zIChkZWZhdWx0KSBzdWNjZXNzZnVsIHJlc3VsdCB3aXRoIG5vIGRldGFpbHMuICovCisgICAgaW5saW5lIHN0YXRpYyBDMlNldHRpbmdSZXN1bHRzQnVpbGRlciBPaygpIHsKKyAgICAgICAgcmV0dXJuIEMyU2V0dGluZ1Jlc3VsdHNCdWlsZGVyKEMyX09LKTsKKyAgICB9CisKKyAgICAvKiogXHJldHVybnMgSW50ZXJmYWNlIGlzIGluIGJhZCBzdGF0ZSwgd2l0aCBubyBmdXJ0aGVyIGRldGFpbHMuICovCisgICAgaW5saW5lIHN0YXRpYyBDMlNldHRpbmdSZXN1bHRzQnVpbGRlciBCYWRTdGF0ZSgpIHsKKyAgICAgICAgcmV0dXJuIEMyU2V0dGluZ1Jlc3VsdHNCdWlsZGVyKEMyX0JBRF9TVEFURSk7CisgICAgfQorCisgICAgLyoqIFxyZXR1cm5zIEludGVyZmFjZSBjb25uZWN0aW9uIHRpbWVkIG91dCwgd2l0aCBubyBmdXJ0aGVyIGRldGFpbHMuICovCisgICAgaW5saW5lIHN0YXRpYyBDMlNldHRpbmdSZXN1bHRzQnVpbGRlciBUaW1lZE91dCgpIHsKKyAgICAgICAgcmV0dXJuIEMyU2V0dGluZ1Jlc3VsdHNCdWlsZGVyKEMyX1RJTUVEX09VVCk7CisgICAgfQorCisgICAgLyoqIFxyZXR1cm5zIEludGVyZmFjZSBjb25uZWN0aW9uIGlzIGNvcnJ1cHRlZCwgd2l0aCBubyBmdXJ0aGVyIGRldGFpbHMuICovCisgICAgaW5saW5lIHN0YXRpYyBDMlNldHRpbmdSZXN1bHRzQnVpbGRlciBDb3JydXB0ZWQoKSB7CisgICAgICAgIHJldHVybiBDMlNldHRpbmdSZXN1bHRzQnVpbGRlcihDMl9DT1JSVVBURUQpOworICAgIH0KKworICAgIGlubGluZSBzdGF0aWMgQzJTZXR0aW5nUmVzdWx0c0J1aWxkZXIgTm9NZW1vcnkoQzJQYXJhbTo6SW5kZXggaW5kZXhfIF9fdW51c2VkKSB7CisgICAgICAgIC8vIFRPRE86IHRyeSB0byBhZGQgZmFpbHVyZSByZXN1bHQKKyAgICAgICAgcmV0dXJuIEMyU2V0dGluZ1Jlc3VsdHNCdWlsZGVyKEMyX05PX01FTU9SWSk7CisgICAgfQorCisgICAgLy8gVE9ETzogdGhpcyBzaG91bGQgbm90IGJlIGEgY29uc3RydWN0b3IKKyAgICAvKiogQ3JlYXRlcyBhIGJ1aWxkZXIgd2l0aCBhIHNpbmdsZSBiYWQgdmFsdWUgc2V0dGluZyByZXN1bHQuICovCisgICAgQzJTZXR0aW5nUmVzdWx0c0J1aWxkZXIoQzJTZXR0aW5nUmVzdWx0ICYmcmVzdWx0KTsKKworICAgIC8qKiBDb21iaW5lcyB0aGlzIHJlc3VsdHMgd2l0aCBvdGhlciByZXN1bHRzLiAqLworICAgIEMyU2V0dGluZ1Jlc3VsdHNCdWlsZGVyIHBsdXMoQzJTZXR0aW5nUmVzdWx0c0J1aWxkZXImJiByZXN1bHRzKTsKKworICAgIC8qKiBSZXRyaWV2ZSAoZ2V0IGFuZCBtb3ZlIG91dCkgZmFpbHVyZXMgYW5kIHJldHVybiB0aGUgZmFpbHVyZSBzdGF0dXMuICovCisgICAgYzJfc3RhdHVzX3QgcmV0cmlldmVGYWlsdXJlcyhzdGQ6OnZlY3RvcjxzdGQ6OnVuaXF1ZV9wdHI8QzJTZXR0aW5nUmVzdWx0Pj4qIGNvbnN0IGZhaWx1cmVzKTsKKworcHJpdmF0ZToKKyAgICAvKiogU2V0dGluZyByZXN1bHRzIGJhc2VkIG9uIGEgc2luZ2xlIHN0YXR1cy4gVGhpcyBpcyB1c2VkIHdoZW4gYWN0dWFsIHNldHRpbmcgY291bGQgbm90IGJlCisgICAgICogIGF0dGVtcHRlZCB0byBnZXQgYSBzaW5nbGUgQzJTZXR0aW5nUmVzdWx0LCBvciB3aGVuIGEgc2V0dGluZyBzdWNjZWVkZWQgd2l0aG91dAorICAgICAqICAnY29tcGxhaW50cycuICovCisgICAgQzJTZXR0aW5nUmVzdWx0c0J1aWxkZXIoYzJfc3RhdHVzX3Qgc3RhdHVzKTsKKyAgICAgICAgLy8gc3RhdHVzIG11c3QgYmUgb25lIG9mIE9LLCBCQURfU1RBVEUsIFRJTUVEX09VVCwgQ09SUlVQVEVEIG9yIE5PX01FTU9SWQorICAgICAgICAvLyBtYWlubHk6IEJMT0NLSU5HLCBCQURfSU5ERVgsIEJBRF9WQUxVRSBhbmQgTk9fTUVNT1JZIHJlcXVpcmVzIGEgc2V0dGluZyBhdHRlbXB0LCBidXQKKyAgICAgICAgLy8gTk9fTUVNT1JZIG1heSBub3QgYWxsb3cgdXMgdG8gY3JlYXRlIGEgcmVzdWx0cyBzdHJ1Y3R1cmUuCisKKyAgICAvKioKKyAgICAgKiBPbmUgb2YgT0ssIEJBRF9JTkRFWCwgQkFEX1ZBTFVFLCBCQURfU1RBVEUsIE5PX01FTU9SWSwgVElNRURfT1VULCBCTE9DS0lORyBvciBDT1JSVVBURUQuCisgICAgICovCisgICAgYzJfc3RhdHVzX3QgX21TdGF0dXMgX191bnVzZWQ7CisKKyAgICAvKioKKyAgICAgKiBWZWN0b3Igb2YgaW5kaXZpZHVhbCBzZXR0aW5nIHJlc3VsdCBkZXRhaWxzLgorICAgICAqLworICAgIHN0ZDo6dmVjdG9yPHN0ZDo6dW5pcXVlX3B0cjxDMlNldHRpbmdSZXN1bHQ+PiBfbVJlc3VsdHM7Cit9OworCisvKioKKyAqIFV0aWxpdHkgY2xhc3MgdG8gZW51bWVyYXRlIGZpZWxkcyBvZiBwYXJhbWV0ZXJzLgorICovCitzdHJ1Y3QgQzJGaWVsZFV0aWxzIHsKKyAgICBzdHJ1Y3QgX0luc3BlY3RvcjsKKworICAgIC8qKgorICAgICAqIEFuIGV4dGVuZGVkIGZpZWxkIGRlc2NyaXB0b3Igb2JqZWN0IHdpdGggc3RydWN0dXJhbCBpbmZvcm1hdGlvbiAobGluZWFnZSBiYWNrIHRvIHRoZSByb290IG9mCisgICAgICogdGhlIHBhcmFtKS4KKyAgICAgKi8KKyAgICBzdHJ1Y3QgSW5mbyB7CisgICAgICAgIHR5cGVkZWYgQzJGaWVsZERlc2NyaXB0b3I6OnR5cGVfdCB0eXBlX3Q7IC8vLzwgZmllbGQgdHlwZQorICAgICAgICB0eXBlZGVmIEMyRmllbGREZXNjcmlwdG9yOjpOYW1lZFZhbHVlc1R5cGUgTmFtZWRWYWx1ZXNUeXBlOyAvLy88IG5hbWVkIHZhbHVlcyBsaXN0IHR5cGUKKworICAgICAgICAvLy8gcmV0dXJucyB0aGUgbmFtZSBvZiB0aGUgZmllbGQKKyAgICAgICAgQzJTdHJpbmcgbmFtZSgpIGNvbnN0OworCisgICAgICAgIC8vLyByZXR1cm5zIHRoZSB0eXBlIG9mIHRoaXMgZmllbGQKKyAgICAgICAgdHlwZV90IHR5cGUoKSBjb25zdDsKKworICAgICAgICAvKioKKyAgICAgICAgICogUmV0dXJucyB0aGUgZGVmaW5lZCBuYW1lLXZhbHVlIHBhaXJpbmdzIGZvciB0aGlzIGZpZWxkLiBUaGUgcmV0dXJuZWQgcmVmZXJlbmNlIGlzCisgICAgICAgICAqIG9ubHkgdmFsaWQgZHVyaW5nIHRoZSB2YWxpZGl0eSBvZiB0aGlzIG9iamVjdAorICAgICAgICAgKi8KKyAgICAgICAgY29uc3QgTmFtZWRWYWx1ZXNUeXBlICZuYW1lZFZhbHVlcygpIGNvbnN0OworCisgICAgICAgIC8qKgorICAgICAgICAgKiBUaGUgaW5kZXggb2YgdGhpcyBmaWVsZC4gRS5nLiBwYXJhbS5maWVsZCBvciBwYXJhbS5maWVsZFswXSBoYXMgYW4gaW5kZXggb2YgMCwgYW5kCisgICAgICAgICAqIHBhcmFtLnN0cnVjdFsyXS5maWVsZFszXSBoYXMgYW4gaW5kZXggb2YgMy4KKyAgICAgICAgICovCisgICAgICAgIHNpemVfdCBpbmRleCgpIGNvbnN0OworCisgICAgICAgIC8vLyByZXR1cm5zIHRoZSBsZW5ndGggb2YgdGhlIGZpZWxkIGluIGNhc2UgaXQgaXMgYW4gYXJyYXkuIFJldHVybnMgMCBmb3IKKyAgICAgICAgLy8vIFRbXSBhcnJheXMgaWYgdGhpcyBpbmZvIGNvbWVzIGZyb20gYSBDMlBhcmFtOjpJbmRleCBvYmplY3QsIGFuZCB0aGUgY3VycmVudGx5IHVzZWQKKyAgICAgICAgLy8vIGV4dGVudCBpZiBpdCBjb21lcyBmcm9tIGEgQzJQYXJhbSBvYmplY3QuIFJldHVybnMgMSBmb3IgVFsxXSBhcnJheXMgYXMgd2VsbCBhcyBpZiB0aGUKKyAgICAgICAgLy8vIGZpZWxkIGlzIG5vdCBhbiBhcnJheS4KKyAgICAgICAgc2l6ZV90IGV4dGVudCgpIGNvbnN0OworCisgICAgICAgIC8qKgorICAgICAgICAgKiBUaGUgKHN0cnVjdHVyYWwpIGRlcHRoIG9mIHRoaXMgZmllbGQuIEUuZy4gcGFyYW0uZmllbGQgb3IgcGFyYW0uZmllbGRbMF0gaGFzIGEgZGVwdGggb2YKKyAgICAgICAgICogIDAsIGFuZCBwYXJhbS5zdHJ1Y3QuZmllbGQgb3IgcGFyYW0uc3RydWN0WzBdLmZpZWxkWzBdIGhhcyBhIGRlcHRoIG9mIDEuCisgICAgICAgICAqLworICAgICAgICBzaXplX3QgZGVwdGgoKSBjb25zdDsKKworICAgICAgICAvKioKKyAgICAgICAgICogUmV0dXJucyB0aGUgb2Zmc2V0IG9mIHRoaXMgZmllbGQgaW4gdGhlIHBhcmFtZXRlciBpbiBieXRlcy4KKyAgICAgICAgICovCisgICAgICAgIHNpemVfdCBvZmZzZXQoKSBjb25zdDsKKworICAgICAgICAvKioKKyAgICAgICAgICogUmV0dXJucyB0aGUgc2l6ZSBvZiB0aGlzIGZpZWxkIGluIGJ5dGVzLgorICAgICAgICAgKi8KKyAgICAgICAgc2l6ZV90IHNpemUoKSBjb25zdDsKKworICAgICAgICAvKioKKyAgICAgICAgICogVGhlIG9mZnNldCBvZiB0aGlzIGZpZWxkJ3MgYXJyYXkuIEUuZy4gZm9yIHBhcmFtLnN0cnVjdFsyXS5maWVsZFszXSB0aGlzIGlzIHRoZSBvZmZzZXQKKyAgICAgICAgICogb2YgaXRzIHNtYWxsZXN0IHNpYmxpbmc6IHBhcmFtLnN0cnVjdFsyXS5maWVsZFswXS4KKyAgICAgICAgICovCisgICAgICAgIHNpemVfdCBhcnJheU9mZnNldCgpIGNvbnN0OworCisgICAgICAgIC8qKgorICAgICAgICAgKiBSZXR1cm5zIHRoZSBzaXplIG9mIHRoaXMgZmllbGQncyBhcnJheS4gVGhpcyBpcyBlcXVpdmFsZW50IHRvIGV4dGVudCgpICogc2l6ZSgpCisgICAgICAgICAqLworICAgICAgICBzaXplX3QgYXJyYXlTaXplKCkgY29uc3Q7CisKKyAgICAgICAgLyoqCisgICAgICAgICAqIFRoZSBvZmZzZXQgb2YgdGhlIGJhc2UgZmllbGQuIFRoZSBiYXNlIGZpZWxkIGlzIGEgY291c2luIG9mIHRoZSBjdXJyZW50IGZpZWxkIHdoZXJlCisgICAgICAgICAqIGFsbCBpbmRpY2VzIGFyZSAwLiBFLmcuIHRoZSB0aGUgYmFzZSBmaWVsZCBmb3IgcGFyYW0uc3RydWN0WzJdLmZpZWxkWzNdIGlzCisgICAgICAgICAqIHBhcmFtLnN0cnVjdFswXS5maWVsZFswXS4gQmFzZSBmaWVsZHMgYXJlIHVzZWQgdG8gc3BlY2lmeSBzdXBwb3J0ZWQgdmFsdWVzIGZvcgorICAgICAgICAgKiBhbGwgY291c2luIGZpZWxkcy4KKyAgICAgICAgICovCisgICAgICAgIHNpemVfdCBiYXNlRmllbGRPZmZzZXQoKSBjb25zdDsKKworICAgICAgICAvKioKKyAgICAgICAgICogUmV0dXJucyB3aGV0aGVyIHRoaXMgZmllbGQgaXMgYW4gYXJpdGhtZXRpYyAoaW50ZWdyYWwsIGNvdW50ZXIgb3IgZmxvYXQpIGZpZWxkLgorICAgICAgICAgKi8KKyAgICAgICAgYm9vbCBpc0FyaXRobWV0aWMoKSBjb25zdDsKKworICAgICAgICAvKioKKyAgICAgICAgICogUmV0dXJucyB3aGV0aGVyIHRoaXMgZmllbGQgY2FuIGhhdmUgYSBmbGV4aWJsZSBleHRlbnQuIGV4dGVudCgpIHJldHVybnMgdGhlIGN1cnJlbnQKKyAgICAgICAgICogZXh0ZW50LgorICAgICAgICAgKi8KKyAgICAgICAgYm9vbCBpc0ZsZXhpYmxlKCkgY29uc3Q7CisKKyAgICAgICAgLy8vIHJldHVybnMgd2hldGhlciB0aGlzIGluZm8gaXMgdmFsaWQKKyAgICAgICAgaW5saW5lIGJvb2wgaXNWYWxpZCgpIGNvbnN0IHsgcmV0dXJuIF9tSW1wbCAhPSBudWxscHRyOyB9CisKKyAgICAgICAgLy8vIHJldHVybnMgdGhlIGluZm8gZm9yIHRoZSBwYXJlbnQgb2YgdGhpcyBmaWVsZCwgb3IgYW4gaW52YWxpZCBJbmZvIG9iamVjdCBpZiBpdCBoYXMgbm8KKyAgICAgICAgLy8vIHBhcmVudHMKKyAgICAgICAgSW5mbyBwYXJlbnQoKSBjb25zdDsKKworICAgICAgICAvLy8gcmV0dXJucyB3aGV0aGVyIHRoaXMgaW5mbyBpcyB2YWxpZAorICAgICAgICBpbmxpbmUgb3BlcmF0b3IgYm9vbCgpIGNvbnN0IHsgcmV0dXJuIGlzVmFsaWQoKTsgfQorCisgICAgICAgIHN0cnVjdCBJbXBsOworICAgICAgICBJbmZvKHN0ZDo6c2hhcmVkX3B0cjxJbXBsPik7CisKKyAgICBwcml2YXRlOgorICAgICAgICBzdGQ6OnNoYXJlZF9wdHI8SW1wbD4gX21JbXBsOworICAgICAgICBmcmllbmQgc3RydWN0IF9JbnNwZWN0b3I7CisgICAgfTsKKworICAgIC8qKgorICAgICAqIEFuIChpbnB1dCkgaXRlcmF0b3Igb2JqZWN0IG92ZXIgZmllbGRzIHVzaW5nIEluZm8gb2JqZWN0cy4KKyAgICAgKi8KKyAgICBzdHJ1Y3QgSXRlcmF0b3IgeworICAgICAgICB0eXBlZGVmIEluZm8gY29uc3QgdmFsdWVfdHlwZTsKKyAgICAgICAgdHlwZWRlZiBwdHJkaWZmX3QgZGlmZmVyZW5jZV90eXBlOworICAgICAgICB0eXBlZGVmIEluZm8gY29uc3QgKiBwb2ludGVyOworICAgICAgICB0eXBlZGVmIEluZm8gY29uc3QgcmVmZXJlbmNlOworICAgICAgICB0eXBlZGVmIHN0ZDo6aW5wdXRfaXRlcmF0b3JfdGFnIGl0ZXJhdG9yX2NhdGVnb3J5OworCisgICAgICAgIC8vLyByZXR1cm4gSW5mbyBhdCBjdXJyZW50IHBvc2l0aW9uCisgICAgICAgIHZpcnR1YWwgcmVmZXJlbmNlIG9wZXJhdG9yKigpIGNvbnN0OworCisgICAgICAgIC8vLyBtb3ZlIHRvIHRoZSBuZXh0IGZpZWxkCisgICAgICAgIHZpcnR1YWwgSXRlcmF0b3ImIG9wZXJhdG9yKysoKTsKKworICAgICAgICB2aXJ0dWFsIGJvb2wgb3BlcmF0b3I9PShjb25zdCBJdGVyYXRvciAmKSBjb25zdDsKKyAgICAgICAgaW5saW5lIGJvb2wgb3BlcmF0b3IhPShjb25zdCBJdGVyYXRvciAmb3RoZXIpIGNvbnN0IHsgcmV0dXJuICFvcGVyYXRvcj09KG90aGVyKTsgfQorCisgICAgICAgIHZpcnR1YWwgfkl0ZXJhdG9yKCkgPSBkZWZhdWx0OworCisgICAgICAgIHN0cnVjdCBJbXBsOworICAgICAgICBJdGVyYXRvcihzdGQ6OnNoYXJlZF9wdHI8SW1wbD4pOworCisgICAgcHJvdGVjdGVkOgorICAgICAgICBzdGQ6OnNoYXJlZF9wdHI8SW1wbD4gbUltcGw7CisgICAgfTsKKworICAgIC8qKgorICAgICAqIEFuIChpbnB1dCkgaXRlcmFibGUgb2JqZWN0IHJlcHJlc2VudGluZyBhIGxpc3Qgb2YgZmllbGRzLgorICAgICAqLworICAgIHN0cnVjdCBMaXN0IHsKKyAgICAgICAgLy8vIHJldHVybnMgYW4gaXRlcmF0b3IgdG8gdGhlIGJlZ2lubmluZyBvZiB0aGUgbGlzdAorICAgICAgICB2aXJ0dWFsIEl0ZXJhdG9yIGJlZ2luKCkgY29uc3Q7CisKKyAgICAgICAgLy8vIHJldHVybnMgYW4gaXRlcmF0b3IgdG8gdGhlIGVuZCBvZiB0aGUgbGlzdAorICAgICAgICB2aXJ0dWFsIEl0ZXJhdG9yIGVuZCgpIGNvbnN0OworCisgICAgICAgIHZpcnR1YWwgfkxpc3QoKSA9IGRlZmF1bHQ7CisKKyAgICAgICAgc3RydWN0IEltcGw7CisgICAgICAgIExpc3Qoc3RkOjpzaGFyZWRfcHRyPEltcGw+KTsKKworICAgIHByb3RlY3RlZDoKKyAgICAgICAgc3RkOjpzaGFyZWRfcHRyPEltcGw+IG1JbXBsOworICAgIH07CisKKyAgICAvKioKKyAgICAgKiBFbnVtZXJhdGVzIGFsbCAoYmFzZSkgZmllbGRzIGF0IGluZGV4IDAgb2YgdGhlIHBhcmFtZXRlci4gVGhlIG9yZGVyIG9mIGl0ZXJhdGlvbiBpcyB0aGUKKyAgICAgKiBmb2xsb3dpbmc6CisgICAgICogICBGaWVsZHMgb2YgYSBzdHJ1Y3R1cmUgYXJlIGVudW1lcmF0ZWQgaW4gZmllbGQgb3JkZXIuIEhvd2V2ZXIsIHN1Yi1maWVsZHMgb2YgYSBzdHJ1Y3R1cmUKKyAgICAgKiAgIGFyZSBlbnVtZXJhdGVkIGRpcmVjdGx5IGFmdGVyIHRoZSBzdHJ1Y3R1cmUgZmllbGQsIGFuZCBwcmlvciB0byBzaWJsaW5nIGZpZWxkcy4KKyAgICAgKgorICAgICAqIEluIGVzc2VuY2UgdGhlIG9yZGVyIG9mIGVudW1lcmF0aW9uIGlzIGZpcnN0IGJ5IGluY3JlYXNpbmcgb2Zmc2V0LCB0aGVuIGJ5IGRlY3JlYXNpbmcgc2l6ZS4KKyAgICAgKgorICAgICAqIFxwYXJhbSBwYXJhbSBwYXJhbWV0ZXIgdG8gZW51bWVyYXRlIGl0cyBmaWVsZHMKKyAgICAgKiBccGFyYW0gcmVmbGVjdG9yIHBhcmFtZXRlciByZWZsZWN0b3IgdXNlZCBmb3IgZW51bWVyYXRpb24KKyAgICAgKgorICAgICAqIFxyZXR1cm4gYW4gaXRlcmFibGUgb2JqZWN0CisgICAgICovCisgICAgc3RhdGljIExpc3QgZW51bWVyYXRlRmllbGRzKAorICAgICAgICAgICAgY29uc3QgQzJQYXJhbSAmcGFyYW0sCisgICAgICAgICAgICBjb25zdCBzdGQ6OnNoYXJlZF9wdHI8QzJQYXJhbVJlZmxlY3Rvcj4gJnJlZmxlY3Rvcik7CisKKyAgICAvKioKKyAgICAgKiBFbnVtZXJhdGVzIGFsbCBjb3VzaW4gZmllbGRzIHVwIHRvIGRlcHRoIC0gbGV2ZWwgZm9yIGEgZmllbGQuIElmIGxldmVsIGlzIDAsIGl0IGVudW1lcmF0ZXMKKyAgICAgKiBvbmx5IHRoZSBmaWVsZC4gRm9yIGxldmVsIDEsIGl0IGVudW1lcmF0ZXMgYWxsIGZpZWxkcyBpbiBpdHMgY3VycmVudCBhcnJheSAod2hpY2ggbWF5IGJlCisgICAgICogaXRzZWxmIGlmIGV4dGVudCBpcyAxKS4gVGhlIG9yZGVyIG9mIGl0ZXJhdGlvbiBpcyBieSBpbmNyZWFzaW5nIGZpZWxkIG9mZnNldC4KKyAgICAgKi8KKyAgICBzdGF0aWMgTGlzdCBlbnVtZXJhdGVDb3VzaW5zKAorICAgICAgICAgICAgY29uc3QgSW5mbyAmZmllbGQsCisgICAgICAgICAgICB1aW50MzJfdCBsZXZlbCA9IH4wKTsKKworICAgIC8qKgorICAgICAqIExvY2F0ZXMgdGhlIGZpZWxkIGluIGEgcGFyYW1ldGVyIGFuZCByZXR1cm5zIGEgbGlzdCBvZiAyIGVsZW1lbnRzIC0gdGhlIG1vc3Qtc3BlY2lmaWMgZmllbGQKKyAgICAgKiBhcnJheSBvZiB0aGUgcGFyYW1ldGVyIHRoYXQgY29udGFpbnMgdGhlIGVudGlyZSBmaWVsZC4gSWYgdGhlIGZpZWxkIGlzIG5vdCBhIHZhbGlkIGZpZWxkCisgICAgICogc3BlY2lmaWVyIGZvciB0aGlzIHBhcmFtZXRlciAoZS5nLiBpdCBpcyBvdXRzaWRlIHRoZSBib3VuZHMgb2YgdGhlIHBhcmFtZXRlciksIGl0IHJldHVybnMKKyAgICAgKiBhbiBlbXB0eSBsaXN0LgorICAgICAqLworICAgIHN0YXRpYyBzdGQ6OnZlY3RvcjxJbmZvPiBsb2NhdGVGaWVsZCgKKyAgICAgICAgICAgIGNvbnN0IEMyUGFyYW0gJnBhcmFtLCBjb25zdCBfQzJGaWVsZElkICZmaWVsZCwKKyAgICAgICAgICAgIGNvbnN0IHN0ZDo6c2hhcmVkX3B0cjxDMlBhcmFtUmVmbGVjdG9yPiAmcmVmbGVjdG9yKTsKKworICAgIHN0YXRpYyBzdGQ6OnZlY3RvcjxJbmZvPiBsb2NhdGVGaWVsZCgKKyAgICAgICAgICAgIGNvbnN0IEMyUGFyYW1GaWVsZCAmcGYsIGNvbnN0IHN0ZDo6c2hhcmVkX3B0cjxDMlBhcmFtUmVmbGVjdG9yPiAmcmVmbGVjdG9yKTsKKworfTsKKworI2luY2x1ZGUgPHV0aWwvQzJEZWJ1Zy1pbnRlcmZhY2UuaD4KKworI2VuZGlmICAvLyBDMlVUSUxTX0lOVEVSRkFDRV9VVElMU19IXwpkaWZmIC0tZ2l0IGEvbWVkaWEvY29kZWMyL3ZuZGsvaW5jbHVkZS91dGlsL0MyUGFyYW1VdGlscy5oIGIvbWVkaWEvY29kZWMyL3ZuZGsvaW5jbHVkZS91dGlsL0MyUGFyYW1VdGlscy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI1MWJkOTQKLS0tIC9kZXYvbnVsbAorKysgYi9tZWRpYS9jb2RlYzIvdm5kay9pbmNsdWRlL3V0aWwvQzJQYXJhbVV0aWxzLmgKQEAgLTAsMCArMSw0NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNiBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCisKKyNpZm5kZWYgQzJVVElMU19QQVJBTV9VVElMU19IXworI2RlZmluZSBDMlVUSUxTX1BBUkFNX1VUSUxTX0hfCisKKyNpbmNsdWRlIDx1dGlsaXR5PgorI2luY2x1ZGUgPHZlY3Rvcj4KKworLyoqIFxmaWxlCisgKiBVdGlsaXRpZXMgZm9yIHBhcmFtZXRlciBoYW5kbGluZyB0byBiZSB1c2VkIGJ5IENvZGVjMiBpbXBsZW1lbnRhdGlvbnMuCisgKi8KKworLy8vIFxjb25kIElOVEVSTkFMCisKK3N0cnVjdCBDMlBhcmFtOworCitjbGFzcyBDMlBhcmFtVXRpbHMgeworICAgIGZyaWVuZCBjbGFzcyBDMlV0aWxUZXN0X1BhcmFtVXRpbHNUZXN0X1Rlc3Q7CisKK3B1YmxpYzoKKworICAgIC8vLyBzYWZlKHIpIHBhcnNpbmcgZnJvbSBwYXJhbWV0ZXIgYmxvYgorICAgIHN0YXRpYworICAgIEMyUGFyYW0gKlBhcnNlRmlyc3QoY29uc3QgdWludDhfdCAqYmxvYiwgc2l6ZV90IHNpemUpOworfTsKKworLy8vIFxlbmRjb25kCisKKyNlbmRpZiAgLy8gQzJVVElMU19QQVJBTV9VVElMU19IXworCmRpZmYgLS1naXQgYS9tZWRpYS9jb2RlYzIvdm5kay9pbnRlcm5hbC9DMkJsb2NrSW50ZXJuYWwuaCBiL21lZGlhL2NvZGVjMi92bmRrL2ludGVybmFsL0MyQmxvY2tJbnRlcm5hbC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJhYmYzYWMKLS0tIC9kZXYvbnVsbAorKysgYi9tZWRpYS9jb2RlYzIvdm5kay9pbnRlcm5hbC9DMkJsb2NrSW50ZXJuYWwuaApAQCAtMCwwICsxLDMzNyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxOCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCisKKyNpZm5kZWYgQU5EUk9JRF9TVEFHRUZSSUdIVF9DMkJMT0NLX0lOVEVSTkFMX0hfCisjZGVmaW5lIEFORFJPSURfU1RBR0VGUklHSFRfQzJCTE9DS19JTlRFUk5BTF9IXworCisjaW5jbHVkZSA8YW5kcm9pZC9oYXJkd2FyZS9ncmFwaGljcy9idWZmZXJxdWV1ZS8xLjAvSUdyYXBoaWNCdWZmZXJQcm9kdWNlci5oPgorCisjaW5jbHVkZSA8QzJCdWZmZXIuaD4KKworbmFtZXNwYWNlIGFuZHJvaWQgeworbmFtZXNwYWNlIGhhcmR3YXJlIHsKK25hbWVzcGFjZSBtZWRpYSB7CituYW1lc3BhY2UgYnVmZmVycG9vbCB7CisKK3N0cnVjdCBCdWZmZXJQb29sRGF0YTsKKworfQorfQorfQorfQorCisvKioKKyAqIFN0b3JlcyBpbmZvcm1hdGlvbnMgZnJvbSBDMkJsb2NrUG9vbCBpbXBsZW1lbnRhdGlvbnMgd2hpY2ggYXJlIHJlcXVpcmVkIGJ5IEMyQmxvY2suCisgKi8KK3N0cnVjdCBDMl9ISURFIF9DMkJsb2NrUG9vbERhdGEgeworICAgIGVudW0gdHlwZV90IDogaW50IHsKKyAgICAgICAgVFlQRV9CVUZGRVJQT09MID0gMCwKKyAgICAgICAgVFlQRV9CVUZGRVJRVUVVRSwKKyAgICB9OworCisgICAgdmlydHVhbCB0eXBlX3QgZ2V0VHlwZSgpIGNvbnN0ID0gMDsKKworcHJvdGVjdGVkOgorICAgIF9DMkJsb2NrUG9vbERhdGEoKSA9IGRlZmF1bHQ7CisKKyAgICB2aXJ0dWFsIH5fQzJCbG9ja1Bvb2xEYXRhKCkgPSBkZWZhdWx0OworfTsKKworc3RydWN0IEMyQnVmZmVyUXVldWVCbG9ja1Bvb2xEYXRhOworCisvKioKKyAqIEludGVybmFsIG9ubHkgaW50ZXJmYWNlIGZvciBjcmVhdGluZyBibG9ja3MgYnkgYmxvY2sgcG9vbC9idWZmZXIgcGFzc2luZyBpbXBsZW1lbnRhdGlvbnMuCisgKgorICogXHRvZG8gdGhpcyBtdXN0IGJlIGhpZGRlbgorICovCitzdHJ1Y3QgX0MyQmxvY2tGYWN0b3J5IHsKKyAgICAvKioKKyAgICAgKiBDcmVhdGUgYSBsaW5lYXIgYmxvY2sgZnJvbSBhbiBhbGxvY2F0aW9uIGZvciBhbiBhbGxvdHRlZCByYW5nZS4KKyAgICAgKgorICAgICAqIFxwYXJhbSBhbGxvYyBwYXJlbnQgYWxsb2NhdGlvbgorICAgICAqIFxwYXJhbSBkYXRhICBibG9ja3Bvb2wgZGF0YQorICAgICAqIFxwYXJhbSBvZmZzZXQgYWxsb3R0ZWQgcmFuZ2Ugb2Zmc2V0CisgICAgICogXHBhcmFtIHNpemUgIGFsbG90dGVkIHNpemUKKyAgICAgKgorICAgICAqIFxyZXR1cm4gc2hhcmVkIHBvaW50ZXIgdG8gdGhlIGxpbmVhciBibG9jay4gbnVsbHB0ciBpZiB0aGVyZSB3YXMgbm90IGVub3VnaCBtZW1vcnkgdG8KKyAgICAgKiAgICAgICAgIGNyZWF0ZSB0aGlzIGJsb2NrLgorICAgICAqLworICAgIHN0YXRpYworICAgIHN0ZDo6c2hhcmVkX3B0cjxDMkxpbmVhckJsb2NrPiBDcmVhdGVMaW5lYXJCbG9jaygKKyAgICAgICAgICAgIGNvbnN0IHN0ZDo6c2hhcmVkX3B0cjxDMkxpbmVhckFsbG9jYXRpb24+ICZhbGxvYywKKyAgICAgICAgICAgIGNvbnN0IHN0ZDo6c2hhcmVkX3B0cjxfQzJCbG9ja1Bvb2xEYXRhPiAmZGF0YSA9IG51bGxwdHIsCisgICAgICAgICAgICBzaXplX3Qgb2Zmc2V0ID0gMCwKKyAgICAgICAgICAgIHNpemVfdCBzaXplID0gfihzaXplX3QpMCk7CisKKyAgICAvKioKKyAgICAgKiBDcmVhdGUgYSBncmFwaGljIGJsb2NrIGZyb20gYW4gYWxsb2NhdGlvbiBmb3IgYW4gYWxsb3R0ZWQgc2VjdGlvbi4KKyAgICAgKgorICAgICAqIFxwYXJhbSBhbGxvYyBwYXJlbnQgYWxsb2NhdGlvbgorICAgICAqIFxwYXJhbSBkYXRhICBibG9ja3Bvb2wgZGF0YQorICAgICAqIFxwYXJhbSBjcm9wICBhbGxvdHRlZCBjcm9wIHJlZ2lvbgorICAgICAqCisgICAgICogXHJldHVybiBzaGFyZWQgcG9pbnRlciB0byB0aGUgZ3JhcGhpYyBibG9jay4gbnVsbHB0ciBpZiB0aGVyZSB3YXMgbm90IGVub3VnaCBtZW1vcnkgdG8KKyAgICAgKiAgICAgICAgIGNyZWF0ZSB0aGlzIGJsb2NrLgorICAgICAqLworICAgIHN0YXRpYworICAgIHN0ZDo6c2hhcmVkX3B0cjxDMkdyYXBoaWNCbG9jaz4gQ3JlYXRlR3JhcGhpY0Jsb2NrKAorICAgICAgICAgICAgY29uc3Qgc3RkOjpzaGFyZWRfcHRyPEMyR3JhcGhpY0FsbG9jYXRpb24+ICZhbGxvYywKKyAgICAgICAgICAgIGNvbnN0IHN0ZDo6c2hhcmVkX3B0cjxfQzJCbG9ja1Bvb2xEYXRhPiAmZGF0YSA9IG51bGxwdHIsCisgICAgICAgICAgICBjb25zdCBDMlJlY3QgJmFsbG90dGVkQ3JvcCA9IEMyUmVjdCh+MHUsIH4wdSkpOworCisgICAgLyoqCisgICAgICogUmV0dXJuIGEgYmxvY2sgcG9vbCBkYXRhIGZyb20gMUQgYmxvY2suCisgICAgICoKKyAgICAgKiBccGFyYW0gc2hhcmVkIHBvaW50ZXIgdG8gdGhlIDFEIGJsb2NrIHdoaWNoIGlzIGFscmVhZHkgY3JlYXRlZC4KKyAgICAgKi8KKyAgICBzdGF0aWMKKyAgICBzdGQ6OnNoYXJlZF9wdHI8X0MyQmxvY2tQb29sRGF0YT4gR2V0TGluZWFyQmxvY2tQb29sRGF0YSgKKyAgICAgICAgICAgIGNvbnN0IEMyQmxvY2sxRCYgYmxvY2spOworCisgICAgLyoqCisgICAgICogUmV0dXJuIGEgYmxvY2sgcG9vbCBkYXRhIGZyb20gMkQgYmxvY2suCisgICAgICoKKyAgICAgKiBccGFyYW0gc2hhcmVkIHBvaW50ZXIgdG8gdGhlIDJEIGJsb2NrIHdoaWNoIGlzIGFscmVhZHkgY3JlYXRlZC4KKyAgICAgKi8KKyAgICBzdGF0aWMKKyAgICBzdGQ6OnNoYXJlZF9wdHI8X0MyQmxvY2tQb29sRGF0YT4gR2V0R3JhcGhpY0Jsb2NrUG9vbERhdGEoCisgICAgICAgICAgICBjb25zdCBDMkJsb2NrMkQmIGJsb2NrKTsKKworICAgIC8qKgorICAgICAqIENyZWF0ZSBhIGxpbmVhciBibG9jayBmcm9tIHRoZSByZWNlaXZlZCBuYXRpdmUgaGFuZGxlLgorICAgICAqCisgICAgICogXHBhcmFtIGhhbmRsZSAgICBuYXRpdmUgaGFuZGxlIHRvIGEgbGluZWFyIGJsb2NrCisgICAgICoKKyAgICAgKiBccmV0dXJuIHNoYXJlZCBwb2ludGVyIHRvIHRoZSBsaW5lYXIgYmxvY2suIG51bGxwdHIgaWYgdGhlcmUgd2FzIG5vdCBlbm91Z2ggbWVtb3J5IHRvCisgICAgICogICAgICAgICBjcmVhdGUgdGhpcyBibG9jay4KKyAgICAgKi8KKyAgICBzdGF0aWMKKyAgICBzdGQ6OnNoYXJlZF9wdHI8QzJMaW5lYXJCbG9jaz4gQ3JlYXRlTGluZWFyQmxvY2soCisgICAgICAgICAgICBjb25zdCBDMkhhbmRsZSAqaGFuZGxlKTsKKworICAgIC8qKgorICAgICAqIENyZWF0ZSBhIGdyYXBoaWMgYmxvY2sgZnJvbSB0aGUgcmVjZWl2ZWQgbmF0aXZlIGhhbmRsZS4KKyAgICAgKgorICAgICAqIFxwYXJhbSBoYW5kbGUgICAgbmF0aXZlIGhhbmRsZSB0byBhIGdyYXBoaWMgYmxvY2sKKyAgICAgKgorICAgICAqIFxyZXR1cm4gc2hhcmVkIHBvaW50ZXIgdG8gdGhlIGdyYXBoaWMgYmxvY2suIG51bGxwdHIgaWYgdGhlcmUgd2FzIG5vdCBlbm91Z2ggbWVtb3J5IHRvCisgICAgICogICAgICAgICBjcmVhdGUgdGhpcyBibG9jay4KKyAgICAgKi8KKyAgICBzdGF0aWMKKyAgICBzdGQ6OnNoYXJlZF9wdHI8QzJHcmFwaGljQmxvY2s+IENyZWF0ZUdyYXBoaWNCbG9jaygKKyAgICAgICAgICAgIGNvbnN0IEMySGFuZGxlICpoYW5kbGUpOworCisgICAgLyoqCisgICAgICogQ3JlYXRlIGEgbGluZWFyIGJsb2NrIGZyb20gdGhlIHJlY2VpdmVkIGJ1ZmZlcnBvb2wgZGF0YS4KKyAgICAgKgorICAgICAqIFxwYXJhbSBkYXRhICBidWZmZXJwb29sIGRhdGEgdG8gYSBsaW5lYXIgYmxvY2sKKyAgICAgKgorICAgICAqIFxyZXR1cm4gc2hhcmVkIHBvaW50ZXIgdG8gdGhlIGxpbmVhciBibG9jay4gbnVsbHB0ciBpZiB0aGVyZSB3YXMgbm90IGVub3VnaCBtZW1vcnkgdG8KKyAgICAgKiAgICAgICAgIGNyZWF0ZSB0aGlzIGJsb2NrLgorICAgICAqLworICAgIHN0YXRpYworICAgIHN0ZDo6c2hhcmVkX3B0cjxDMkxpbmVhckJsb2NrPiBDcmVhdGVMaW5lYXJCbG9jaygKKyAgICAgICAgICAgIGNvbnN0IEMySGFuZGxlICpoYW5kbGUsCisgICAgICAgICAgICBjb25zdCBzdGQ6OnNoYXJlZF9wdHI8YW5kcm9pZDo6aGFyZHdhcmU6Om1lZGlhOjpidWZmZXJwb29sOjpCdWZmZXJQb29sRGF0YT4gJmRhdGEpOworCisgICAgLyoqCisgICAgICogQ3JlYXRlIGEgZ3JhcGhpYyBibG9jayBmcm9tIHRoZSByZWNlaXZlZCBidWZmZXJwb29sIGRhdGEuCisgICAgICoKKyAgICAgKiBccGFyYW0gZGF0YSAgYnVmZmVycG9vbCBkYXRhIHRvIGEgZ3JhcGhpYyBibG9jaworICAgICAqCisgICAgICogXHJldHVybiBzaGFyZWQgcG9pbnRlciB0byB0aGUgZ3JhcGhpYyBibG9jay4gbnVsbHB0ciBpZiB0aGVyZSB3YXMgbm90IGVub3VnaCBtZW1vcnkgdG8KKyAgICAgKiAgICAgICAgIGNyZWF0ZSB0aGlzIGJsb2NrLgorICAgICAqLworICAgIHN0YXRpYworICAgIHN0ZDo6c2hhcmVkX3B0cjxDMkdyYXBoaWNCbG9jaz4gQ3JlYXRlR3JhcGhpY0Jsb2NrKAorICAgICAgICAgICAgY29uc3QgQzJIYW5kbGUgKmhhbmRsZSwKKyAgICAgICAgICAgIGNvbnN0IHN0ZDo6c2hhcmVkX3B0cjxhbmRyb2lkOjpoYXJkd2FyZTo6bWVkaWE6OmJ1ZmZlcnBvb2w6OkJ1ZmZlclBvb2xEYXRhPiAmZGF0YSk7CisKKyAgICAvKioKKyAgICAgKiBHZXQgYnVmZmVycG9vbCBkYXRhIGZyb20gdGhlIGJsb2NrcG9vbCBkYXRhLgorICAgICAqCisgICAgICogXHBhcmFtIHBvb2xEYXRhICAgICAgICAgIGJsb2NrcG9vbCBkYXRhCisgICAgICogXHBhcmFtIGJ1ZmZlclBvb2xEYXRhICAgIHBvaW50ZXIgdG8gYnVmZmVycG9vbCBkYXRhIHdoZXJlIHRoZSBidWZmZXJwb29sCisgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEgaXMgc3RvcmVkLgorICAgICAqCisgICAgICogXHJldHVybiB7XGNvZGUgdHJ1ZX0gd2hlbiB0aGVyZSBpcyB2YWxpZCBidWZmZXJwb29sIGRhdGEsIHtcY29kZSBmYWxzZX0gb3RoZXJ3aXNlLgorICAgICAqLworICAgIHN0YXRpYworICAgIGJvb2wgR2V0QnVmZmVyUG9vbERhdGEoCisgICAgICAgICAgICBjb25zdCBzdGQ6OnNoYXJlZF9wdHI8Y29uc3QgX0MyQmxvY2tQb29sRGF0YT4gJnBvb2xEYXRhLAorICAgICAgICAgICAgc3RkOjpzaGFyZWRfcHRyPGFuZHJvaWQ6OmhhcmR3YXJlOjptZWRpYTo6YnVmZmVycG9vbDo6QnVmZmVyUG9vbERhdGE+ICpidWZmZXJQb29sRGF0YSk7CisKKyAgICAvKgorICAgICAqIExpZmUgQ3ljbGUgTWFuYWdlbWVudCBvZiBCdWZmZXJRdWV1ZS1CYXNlZCBCbG9ja3MKKyAgICAgKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgICAgICoKKyAgICAgKiBBIGJsb2NrIHRoYXQgaXMgY3JlYXRlZCBieSBhIGJ1ZmZlcnF1ZXVlLWJhc2VkIGJsb2NrcG9vbCByZXF1aXJlcyBzb21lCisgICAgICogc3BlY2lhbCB0cmVhdG1lbnQgd2hlbiBpdCBpcyBkZXN0cm95ZWQuIEluIHBhcnRpY3VsYXIsIGlmIHRoZSBibG9jaworICAgICAqIGNvcnJlc3BvbmRzIHRvIGEgaGVsZCAoZGVxdWV1ZWQvYXR0YWNoZWQpIEdyYXBoaWNCdWZmZXIgaW4gYSBzbG90IG9mIGEKKyAgICAgKiBidWZmZXJxdWV1ZSwgaXRzIGRlc3RydWN0aW9uIHNob3VsZCB0cmlnZ2VyIGEgY2FsbCB0bworICAgICAqIElHcmFwaGljQnVmZmVyUHJvZHVjZXI6OmNhbmNlbEJ1ZmZlcigpLiBPbiB0aGUgb3RoZXIgaGFuZCwgaWYgdGhlCisgICAgICogR3JhcGhpY0J1ZmZlciBpcyBub3QgaGVsZCwgaS5lLiwgaWYgaXQgaGFzIGJlZW4gcXVldWVkIG9yIGRldGFjaGVkLAorICAgICAqIGNhbmNlbEJ1ZmZlcigpIHNob3VsZCBub3QgYmUgY2FsbGVkIHVwb24gdGhlIGRlc3RydWN0aW9uIG9mIHRoZSBibG9jay4KKyAgICAgKgorICAgICAqIF9DMkJsb2NrUG9vbERhdGEgY3JlYXRlZCBieSBhIGJ1ZmZlcnF1ZXVlLWJhc2VkIGJsb2NrcG9vbCBpbmNsdWRlcyB0d28KKyAgICAgKiBtYWluIHBpZWNlcyBvZiBpbmZvcm1hdGlvbjoKKyAgICAgKiAgIC0gImhlbGQiIHN0YXR1czogV2hldGhlciBjYW5jZWxCdWZmZXIoKSBzaG91bGQgYmUgY2FsbGVkIHVwb24KKyAgICAgKiAgICAgZGVzdHJ1Y3Rpb24gb2YgdGhlIGJsb2NrLgorICAgICAqICAgLSBidWZmZXJxdWV1ZSBhc3NpZ25tZW50OiBUaGUgcXVhZHJ1cGxlIChpZ2JwLCBnZW5lcmF0aW9uLCBicUlkLAorICAgICAqICAgICBicVNsb3QpLCB3aGVyZSBpZ2JwIGlzIHRoZSBJR3JhcGhpY0J1ZmZlclByb2R1Y2VyIGluc3RhbmNlIG9mIHRoZQorICAgICAqICAgICBidWZmZXJxdWV1ZSwgZ2VuZXJhdGlvbiBpcyB0aGUgbGF0ZXN0IGdlbmVyYXRpb24gbnVtYmVyLCBvZiB0aGUKKyAgICAgKiAgICAgYnVmZmVycXVldWUsIGJxSWQgaXMgdGhlIGdsb2JhbGx5IHVuaXF1ZSBpZCBvZiB0aGUgYnVmZmVycXVldWUsIGFuZAorICAgICAqICAgICBicVNsb3QgaXMgdGhlIHNsb3QgaW4gdGhlIGJ1ZmZlcnF1ZXVlLgorICAgICAqCisgICAgICogaWdicCBpcyB0aGUgaW5zdGFuY2Ugb2YgSUdyYXBoaWNCdWZmZXJQcm9kdWNlciBvbiB3aGljaCBjYW5jZWxCdWZmZXIoKQorICAgICAqIHdpbGwgYmUgY2FsbGVkIGlmICJoZWxkIiBzdGF0dXMgaXMgdHJ1ZSB3aGVuIHRoZSBibG9jayBpcyBkZXN0cm95ZWQuCisgICAgICogKGJxU2xvdCBpcyBhbiBpbnB1dCB0byBjYW5jZWxCdWZmZXIoKS4pIEhvd2V2ZXIsIG9ubHkgZ2VuZXJhdGlvbiwgYnFJZAorICAgICAqIGFuZCBicVNsb3QgYXJlIHJldGFpbmVkIHdoZW4gYSBibG9jayBpcyB0cmFuc2ZlcnJlZCBmcm9tIG9uZSBwcm9jZXNzIHRvCisgICAgICogYW5vdGhlci4gSXQgaXMgdGhlIHJlc3BvbnNpYmlsaXR5IG9mIGJvdGggdGhlIHNlbmRpbmcgYW5kIHJlY2VpdmluZworICAgICAqIHByb2Nlc3NlcyB0byBtYWludGFpbiBjb25zaXN0ZW5jeSBvZiAiaGVsZCIgc3RhdHVzIGFuZCBpZ2JwLiBCZWxvdyBhcmUKKyAgICAgKiBmdW5jdGlvbnMgcHJvdmlkZWQgZm9yIHRoaXMgcHVycG9zZToKKyAgICAgKgorICAgICAqICAgLSBHZXRCdWZmZXJRdWV1ZURhdGEoKTogUmV0dXJucyBnZW5lcmF0aW9uLCBicUlkIGFuZCBicVNsb3QuCisgICAgICogICAtIEhvbGRCbG9ja0Zyb21CdWZmZXJRdWV1ZSgpOiBTZXRzICJoZWxkIiBzdGF0dXMgdG8gdHJ1ZS4KKyAgICAgKiAgIC0gWWllbGRCbG9ja1RvQnVmZmVyUXVldWUoKTogU2V0cyAiaGVsZCIgc3RhdHVzIHRvIGZhbHNlLgorICAgICAqICAgLSBBc3NpZ25CbG9ja1RvQnVmZmVyUXVldWUoKTogU2V0cyB0aGUgYnVmZmVycXVldWUgYXNzaWdubWVudCBhbmQKKyAgICAgKiAgICAgImhlbGQiIHN0YXR1cy4KKyAgICAgKgorICAgICAqIEFsbCB0aGVzZSBmdW5jdGlvbnMgb3BlcmF0ZSBvbiBfQzJCbG9ja1Bvb2xEYXRhLCB3aGljaCBjYW4gYmUgb2J0YWluZWQgYnkKKyAgICAgKiBjYWxsaW5nIEdldEdyYXBoaWNCbG9ja1Bvb2xEYXRhKCkuCisgICAgICoKKyAgICAgKiBIb2xkQmxvY2tGcm9tQnVmZmVyUXVldWUoKSB3aWxsIG1hcmsgdGhlIGJsb2NrIGFzIGhlbGQsIHdoaWxlCisgICAgICogWWllbGRCbG9ja1RvQnVmZmVyUXVldWUoKSB3aWxsIGRvIHRoZSBvcHBvc2l0ZS4gVGhlc2UgdHdvIGZ1bmN0aW9ucyBkbworICAgICAqIG5vdCBtb2RpZnkgdGhlIGJ1ZmZlcnF1ZXVlIGFzc2lnbm1lbnQsIHNvIGl0IGlzIG5vdCB3cm9uZyB0byBjYWxsCisgICAgICogSG9sZEJsb2NrRnJvbUJ1ZmZlclF1ZXVlKCkgYWZ0ZXIgWWllbGRCbG9ja1RvQnVmZmVyUXVldWUoKSBpZiBpdCBjYW4gYmUKKyAgICAgKiBndWFyYW50ZWVkIHRoYXQgdGhlIGJsb2NrIGlzIG5vdCBkZXN0cm95ZWQgZHVyaW5nIHRoZSBwZXJpb2QgYmV0d2VlbiB0aGUKKyAgICAgKiB0d28gY2FsbHMuCisgICAgICoKKyAgICAgKiBBc3NpbmdCbG9ja1RvQnVmZmVyUXVldWUoKSBoYXMgYSAiaGVsZCIgc3RhdHVzIGFzIGFuIG9wdGlvbmFsIGFyZ3VtZW50LgorICAgICAqIFRoZSBkZWZhdWx0IHZhbHVlIGlzIHRydWUuCisgICAgICoKKyAgICAgKiBNYWludGFpbmluZyBDb25zaXN0ZW5jeSB3aXRoIElHcmFwaGljQnVmZmVyUHJvZHVjZXIgT3BlcmF0aW9ucworICAgICAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgICAgICoKKyAgICAgKiBkZXF1ZXVlQnVmZmVyKCkKKyAgICAgKiAgIC0gVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgYnkgdGhlIGJsb2NrcG9vbC4gSXQgc2hvdWxkIG5vdCBiZSBjYWxsZWQKKyAgICAgKiAgICAgbWFudWFsbHkuIFRoZSBibG9ja3Bvb2wgd2lsbCBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlIHRoZSBjb3JyZWN0CisgICAgICogICAgIGluZm9ybWF0aW9uIGZvciBfQzJCbG9ja1Bvb2xEYXRhLCB3aXRoICJoZWxkIiBzdGF0dXMgc2V0IHRvIHRydWUuCisgICAgICoKKyAgICAgKiBxdWV1ZUJ1ZmZlcigpCisgICAgICogICAtIEFmdGVyIHF1ZXVlQnVmZmVyKCkgaXMgY2FsbGVkLCBZaWVsZEJsb2NrVG9CdWZmZXJRdWV1ZSgpIHNob3VsZCBiZQorICAgICAqICAgICBjYWxsZWQuCisgICAgICoKKyAgICAgKiBhdHRhY2hCdWZmZXIoKQorICAgICAqICAgLSBBZnRlciBhdHRhY2hCdWZmZXIoKSBpcyBjYWxsZWQsIEFzc2lnbkJsb2NrVG9CdWZmZXJRdWV1ZSgpIHNob3VsZCBiZQorICAgICAqICAgICBjYWxsZWQgd2l0aCAiaGVsZCIgc3RhdHVzIHNldCB0byB0cnVlLgorICAgICAqCisgICAgICogZGV0YWNoQnVmZmVyKCkKKyAgICAgKiAgIC0gQWZ0ZXIgZGV0YWNoQnVmZmVyKCkgaXMgY2FsbGVkLCBIb2xkQmxvY2tGcm9tQnVmZmVyUXVldWUoKSBzaG91bGQgYmUKKyAgICAgKiAgICAgY2FsbGVkLgorICAgICAqLworCisgICAgLyoqCisgICAgICogR2V0IGJ1ZmZlcnF1ZXVlIGRhdGEgZnJvbSB0aGUgYmxvY2twb29sIGRhdGEuCisgICAgICoKKyAgICAgKiBDYWxsaW5nIHRoaXMgZnVuY3Rpb24gd2l0aCBccCBnZW5lcmF0aW9uIHNldCB0byBudWxscHRyIHdpbGwgcmV0dXJuCisgICAgICogd2hldGhlciB0aGUgYmxvY2sgY29tZXMgZnJvbSBhIGJ1ZmZlcnF1ZXVlLWJhc2VkIGJsb2NrcG9vbCwgYnV0IHdpbGwgbm90CisgICAgICogZmlsbCBpbiB0aGUgdmFsdWVzIGZvciBccCBnZW5lcmF0aW9uLCBccCBicUlkIG9yIFxwIGJxU2xvdC4KKyAgICAgKgorICAgICAqIFxwYXJhbVtpbl0gIHBvb2xEYXRhICAgYmxvY2twb29sIGRhdGEuCisgICAgICogXHBhcmFtW291dF0gZ2VuZXJhdGlvbiBHZW5lcmF0aW9uIG51bWJlciBhdHRhY2hlZCB0byB0aGUgYnVmZmVyLgorICAgICAqIFxwYXJhbVtvdXRdIGJxSWQgICAgICAgSWQgb2YgdGhlIGJ1ZmZlcnF1ZXVlIG93bmluZyB0aGUgYnVmZmVyIChibG9jaykuCisgICAgICogXHBhcmFtW291dF0gYnFTbG90ICAgICBTbG90IG51bWJlciBvZiB0aGUgYnVmZmVyLgorICAgICAqCisgICAgICogXHJldHVybiBcYyB0cnVlIHdoZW4gdGhlcmUgaXMgdmFsaWQgYnVmZmVycXVldWUgZGF0YTsKKyAgICAgKiAgICAgICAgIFxjIGZhbHNlIG90aGVyd2lzZS4KKyAgICAgKi8KKyAgICBzdGF0aWMKKyAgICBib29sIEdldEJ1ZmZlclF1ZXVlRGF0YSgKKyAgICAgICAgICAgIGNvbnN0IHN0ZDo6c2hhcmVkX3B0cjxfQzJCbG9ja1Bvb2xEYXRhPiYgcG9vbERhdGEsCisgICAgICAgICAgICB1aW50MzJfdCogZ2VuZXJhdGlvbiA9IG51bGxwdHIsCisgICAgICAgICAgICB1aW50NjRfdCogYnFJZCA9IG51bGxwdHIsCisgICAgICAgICAgICBpbnQzMl90KiBicVNsb3QgPSBudWxscHRyKTsKKworICAgIC8qKgorICAgICAqIFNldCBidWZmZXJxdWV1ZSBhc3NpZ25tZW50IGFuZCAiaGVsZCIgc3RhdHVzIHRvIGEgYmxvY2sgY3JlYXRlZCBieSBhCisgICAgICogYnVmZmVycXVldWUtYmFzZWQgYmxvY2twb29sLgorICAgICAqCisgICAgICogXHBhcmFtIHBvb2xEYXRhIGJsb2NrcG9vbCBkYXRhIGFzc29jaWF0ZWQgdG8gdGhlIGJsb2NrLgorICAgICAqIFxwYXJhbSBpZ2JwICAgICAgIFxjIElHcmFwaGljQnVmZmVyUHJvZHVjZXIgaW5zdGFuY2UgZnJvbSB0aGUgZGVzaWduYXRlZAorICAgICAqICAgICAgICAgICAgICAgICAgIGJ1ZmZlcnF1ZXVlLgorICAgICAqIFxwYXJhbSBnZW5lcmF0aW9uIEdlbmVyYXRpb24gbnVtYmVyIHRoYXQgdGhlIGJ1ZmZlciBiZWxvbmdzIHRvLgorICAgICAqIFxwYXJhbSBicUlkICAgICAgIElkIG9mIHRoZSBidWZmZXJxdWV1ZSB0aGF0IHdpbGwgb3duIHRoZSBidWZmZXIgKGJsb2NrKS4KKyAgICAgKiBccGFyYW0gYnFTbG90ICAgICBTbG90IG51bWJlciBvZiB0aGUgYnVmZmVyLgorICAgICAqIFxwYXJhbSBoZWxkICAgICAgIFdoZXRoZXIgdGhlIGJsb2NrIGlzIGhlbGQuIFRoaXMgImhlbGQiIHN0YXR1cyBjYW4gYmUKKyAgICAgKiAgICAgICAgICAgICAgICAgICBjaGFuZ2VkIGxhdGVyIGJ5IGNhbGxpbmcgWWllbGRCbG9ja1RvQnVmZmVyUXVldWUoKSBvcgorICAgICAqICAgICAgICAgICAgICAgICAgIEhvbGRCbG9ja0Zyb21CdWZmZXJRdWV1ZSgpLgorICAgICAqCisgICAgICogXHJldHVybiBcYyB0cnVlIGlmIFxwIHBvb2xEYXRhIGlzIHZhbGlkIGJ1ZmZlcnF1ZXVlIGRhdGE7CisgICAgICogICAgICAgICBcYyBmYWxzZSBvdGhlcndpc2UuCisgICAgICoKKyAgICAgKiBOb3RlOiBccCBnZW5lcmF0aW9uIHNob3VsZCBtYXRjaCB0aGUgbGF0ZXN0IGdlbmVyYXRpb24gbnVtYmVyIHNldCBvbiB0aGUKKyAgICAgKiBidWZmZXJxdWV1ZSwgYW5kIFxwIGJxSWQgc2hvdWxkIG1hdGNoIHRoZSB1bmlxdWUgaWQgZm9yIHRoZSBidWZmZXJxdWV1ZQorICAgICAqIChvYnRhaW5hYmxlIGJ5IGNhbGxpbmcgaWdicC0+Z2V0VW5pcXVlSWQoKSkuCisgICAgICovCisgICAgc3RhdGljCisgICAgYm9vbCBBc3NpZ25CbG9ja1RvQnVmZmVyUXVldWUoCisgICAgICAgICAgICBjb25zdCBzdGQ6OnNoYXJlZF9wdHI8X0MyQmxvY2tQb29sRGF0YT4mIHBvb2xEYXRhLAorICAgICAgICAgICAgY29uc3QgOjphbmRyb2lkOjpzcDw6OmFuZHJvaWQ6OmhhcmR3YXJlOjpncmFwaGljczo6YnVmZmVycXVldWU6OgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBWMV8wOjpJR3JhcGhpY0J1ZmZlclByb2R1Y2VyPiYgaWdicCwKKyAgICAgICAgICAgIHVpbnQzMl90IGdlbmVyYXRpb24sCisgICAgICAgICAgICB1aW50NjRfdCBicUlkLAorICAgICAgICAgICAgaW50MzJfdCBicVNsb3QsCisgICAgICAgICAgICBib29sIGhlbGQgPSB0cnVlKTsKKworICAgIC8qKgorICAgICAqIEhvbGQgYSBibG9jayBmcm9tIHRoZSBkZXNpZ25hdGVkIGJ1ZmZlcnF1ZXVlLiBUaGlzIGNhdXNlcyB0aGUgZGVzdHJ1Y3Rpb24KKyAgICAgKiBvZiB0aGUgYmxvY2sgdG8gdHJpZ2dlciBhIGNhbGwgdG8gY2FuY2VsQnVmZmVyKCkuCisgICAgICoKKyAgICAgKiBUaGlzIGZ1bmN0aW9uIGFzc3VtZXMgdGhhdCBccCBwb29sRGF0YSBjb21lcyBmcm9tIGEgYnVmZmVycXVldWUtYmFzZWQKKyAgICAgKiBibG9jay4gSXQgZG9lcyBub3QgY2hlY2sgaWYgdGhhdCBpcyB0aGUgY2FzZS4KKyAgICAgKgorICAgICAqIFxwYXJhbSBwb29sRGF0YSBibG9ja3Bvb2wgZGF0YSBhc3NvY2lhdGVkIHRvIHRoZSBibG9jay4KKyAgICAgKiBccGFyYW0gaWdicCAgICAgXGMgSUdyYXBoaWNCdWZmZXJQcm9kdWNlciBpbnN0YW5jZSB0byBiZSBhc3NpZ25lZCB0byB0aGUKKyAgICAgKiAgICAgICAgICAgICAgICAgYmxvY2suIFRoaXMgaXMgbm90IG5lZWRlZCB3aGVuIHRoZSBibG9jayBpcyBsb2NhbC4KKyAgICAgKgorICAgICAqIFxyZXR1cm4gVGhlIHByZXZpb3VzIGhlbGQgc3RhdHVzLgorICAgICAqLworICAgIHN0YXRpYworICAgIGJvb2wgSG9sZEJsb2NrRnJvbUJ1ZmZlclF1ZXVlKAorICAgICAgICAgICAgY29uc3Qgc3RkOjpzaGFyZWRfcHRyPF9DMkJsb2NrUG9vbERhdGE+JiBwb29sRGF0YSwKKyAgICAgICAgICAgIGNvbnN0IDo6YW5kcm9pZDo6c3A8OjphbmRyb2lkOjpoYXJkd2FyZTo6Z3JhcGhpY3M6OmJ1ZmZlcnF1ZXVlOjoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVjFfMDo6SUdyYXBoaWNCdWZmZXJQcm9kdWNlcj4mIGlnYnAgPSBudWxscHRyKTsKKworICAgIC8qKgorICAgICAqIFlpZWxkIGEgYmxvY2sgdG8gdGhlIGRlc2lnbmF0ZWQgYnVmZmVycXVldWUuIFRoaXMgY2F1c2VzIHRoZSBkZXN0cnVjdGlvbgorICAgICAqIG9mIHRoZSBibG9jayBub3QgdG8gdHJpZ2dlciBhIGNhbGwgdG8gY2FuY2VsQnVmZmVyKCk7CisgICAgICoKKyAgICAgKiBUaGlzIGZ1bmN0aW9uIGFzc3VtZXMgdGhhdCBccCBwb29sRGF0YSBjb21lcyBmcm9tIGEgYnVmZmVycXVldWUtYmFzZWQKKyAgICAgKiBibG9jay4gSXQgZG9lcyBub3QgY2hlY2sgaWYgdGhhdCBpcyB0aGUgY2FzZS4KKyAgICAgKgorICAgICAqIFxwYXJhbSBwb29sRGF0YSBibG9ja3Bvb2wgZGF0YSBhc3NvY2lhdGVkIHRvIHRoZSBibG9jay4KKyAgICAgKgorICAgICAqIFxyZXR1cm4gVGhlIHByZXZpb3VzIGhlbGQgc3RhdHVzLgorICAgICAqLworICAgIHN0YXRpYworICAgIGJvb2wgWWllbGRCbG9ja1RvQnVmZmVyUXVldWUoCisgICAgICAgICAgICBjb25zdCBzdGQ6OnNoYXJlZF9wdHI8X0MyQmxvY2tQb29sRGF0YT4mIHBvb2xEYXRhKTsKKworfTsKKworI2VuZGlmIC8vIEFORFJPSURfU1RBR0VGUklHSFRfQzJCTE9DS19JTlRFUk5BTF9IXworCmRpZmYgLS1naXQgYS9tZWRpYS9jb2RlYzIvdm5kay9pbnRlcm5hbC9DMlBhcmFtSW50ZXJuYWwuaCBiL21lZGlhL2NvZGVjMi92bmRrL2ludGVybmFsL0MyUGFyYW1JbnRlcm5hbC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI0YThmMjcKLS0tIC9kZXYvbnVsbAorKysgYi9tZWRpYS9jb2RlYzIvdm5kay9pbnRlcm5hbC9DMlBhcmFtSW50ZXJuYWwuaApAQCAtMCwwICsxLDExMSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxOCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCisKKyNpZm5kZWYgQU5EUk9JRF9TVEFHRUZSSUdIVF9DMlBBUkFNX0lOVEVSTkFMX0hfCisjZGVmaW5lIEFORFJPSURfU1RBR0VGUklHSFRfQzJQQVJBTV9JTlRFUk5BTF9IXworCisjaW5jbHVkZSA8QzJQYXJhbS5oPgorCitzdHJ1Y3QgQzJfSElERSBfQzJQYXJhbUluc3BlY3RvciB7CisgICAgaW5saW5lIHN0YXRpYyB1aW50MzJfdCBHZXRPZmZzZXQoY29uc3QgQzJGaWVsZERlc2NyaXB0b3IgJmZkKSB7CisgICAgICAgIHJldHVybiBmZC5fbUZpZWxkSWQuX21PZmZzZXQ7CisgICAgfQorCisgICAgaW5saW5lIHN0YXRpYyB2b2lkIFNldE9mZnNldChDMkZpZWxkRGVzY3JpcHRvciAmZmQsIHVpbnQzMl90IG9mZnNldCkgeworICAgICAgICBmZC5fbUZpZWxkSWQuX21PZmZzZXQgPSBvZmZzZXQ7CisgICAgfQorCisgICAgaW5saW5lIHN0YXRpYyB1aW50MzJfdCBHZXRFbmRPZmZzZXQoY29uc3QgQzJGaWVsZERlc2NyaXB0b3IgJmZkLCB1aW50MzJfdCBwYXJhbVNpemUgPSAwKSB7CisgICAgICAgIHVpbnQzMl90IGVuZE9mZnNldCA9IGZkLl9tRmllbGRJZC5fbU9mZnNldCArIGZkLl9tRXh0ZW50ICogZmQuX21GaWVsZElkLl9tU2l6ZTsKKyAgICAgICAgLy8vIGZvciBmbGV4IHBhcmFtZXRlcnMgcmV0dXJuIHBhcmFtU2l6ZSBpZiBnaXZlbgorICAgICAgICByZXR1cm4gZmQuX21FeHRlbnQgPyBlbmRPZmZzZXQgOiBzdGQ6Om1heChlbmRPZmZzZXQsIHBhcmFtU2l6ZSk7CisgICAgfQorCisgICAgaW5saW5lIHN0YXRpYyB1aW50MzJfdCBHZXRTaXplKGNvbnN0IEMyRmllbGREZXNjcmlwdG9yICZmZCkgeworICAgICAgICByZXR1cm4gZmQuX21GaWVsZElkLl9tU2l6ZTsKKyAgICB9CisKKyAgICBpbmxpbmUgc3RhdGljIHVpbnQzMl90IEdldEluZGV4KGNvbnN0IEMyUGFyYW1GaWVsZCAmcGYpIHsKKyAgICAgICAgcmV0dXJuIHBmLl9tSW5kZXg7CisgICAgfQorCisgICAgaW5saW5lIHN0YXRpYyB1aW50MzJfdCBHZXRPZmZzZXQoY29uc3QgQzJQYXJhbUZpZWxkICZwZikgeworICAgICAgICByZXR1cm4gcGYuX21GaWVsZElkLl9tT2Zmc2V0OworICAgIH0KKworICAgIGlubGluZSBzdGF0aWMgdWludDMyX3QgR2V0U2l6ZShjb25zdCBDMlBhcmFtRmllbGQgJnBmKSB7CisgICAgICAgIHJldHVybiBwZi5fbUZpZWxkSWQuX21TaXplOworICAgIH0KKworICAgIGlubGluZSBzdGF0aWMgdWludDMyX3QgR2V0T2Zmc2V0KGNvbnN0IF9DMkZpZWxkSWQgJmYpIHsKKyAgICAgICAgcmV0dXJuIGYuX21PZmZzZXQ7CisgICAgfQorCisgICAgaW5saW5lIHN0YXRpYyB1aW50MzJfdCBHZXRTaXplKGNvbnN0IF9DMkZpZWxkSWQgJmYpIHsKKyAgICAgICAgcmV0dXJuIGYuX21TaXplOworICAgIH0KKworICAgIGlubGluZSBzdGF0aWMgX0MyRmllbGRJZCBHZXRGaWVsZChjb25zdCBDMkZpZWxkRGVzY3JpcHRvciAmZmQpIHsKKyAgICAgICAgcmV0dXJuIGZkLl9tRmllbGRJZDsKKyAgICB9CisKKyAgICBpbmxpbmUgc3RhdGljIHVpbnQzMl90IEdldEF0dHJpYihjb25zdCBDMlBhcmFtRGVzY3JpcHRvciAmcGQpIHsKKyAgICAgICAgcmV0dXJuIHBkLl9tQXR0cmliOworICAgIH0KKworICAgIGlubGluZSBzdGF0aWMgX0MyRmllbGRJZCBHZXRGaWVsZChjb25zdCBDMlBhcmFtRmllbGQgJnBmKSB7CisgICAgICAgIHJldHVybiBwZi5fbUZpZWxkSWQ7CisgICAgfQorCisgICAgaW5saW5lIHN0YXRpYworICAgIEMyUGFyYW1GaWVsZCBDcmVhdGVQYXJhbUZpZWxkKEMyUGFyYW06OkluZGV4IGluZGV4LCB1aW50MzJfdCBvZmZzZXQsIHVpbnQzMl90IHNpemUpIHsKKyAgICAgICAgcmV0dXJuIEMyUGFyYW1GaWVsZChpbmRleCwgb2Zmc2V0LCBzaXplKTsKKyAgICB9CisKKyAgICBpbmxpbmUgc3RhdGljCisgICAgQzJQYXJhbUZpZWxkIENyZWF0ZVBhcmFtRmllbGQoQzJQYXJhbTo6SW5kZXggaW5kZXgsIF9DMkZpZWxkSWQgZmllbGQpIHsKKyAgICAgICAgcmV0dXJuIEMyUGFyYW1GaWVsZChpbmRleCwgZmllbGQuX21PZmZzZXQsIGZpZWxkLl9tU2l6ZSk7CisgICAgfQorCisgICAgaW5saW5lIHN0YXRpYworICAgIHZvaWQgVHJpbVBhcmFtKEMyUGFyYW0gKnBhcmFtLCB1aW50MzJfdCBuZXdTaXplKSB7CisgICAgICAgIGlmIChwYXJhbSAmJiAqcGFyYW0gJiYgcGFyYW0tPnNpemUoKSA+IG5ld1NpemUgJiYgbmV3U2l6ZSA+PSBzaXplb2YoQzJQYXJhbSkpIHsKKyAgICAgICAgICAgIHBhcmFtLT5fbVNpemUgPSBuZXdTaXplOworICAgICAgICB9CisgICAgfQorCisgICAgaW5saW5lIHN0YXRpYyB2b2lkIEFkZE5hbWVkVmFsdWVzKAorICAgICAgICAgICAgQzJGaWVsZERlc2NyaXB0b3IgJmZkLCBDMkZpZWxkRGVzY3JpcHRvcjo6TmFtZWRWYWx1ZXNUeXBlICYmbmFtZWRWYWx1ZXMpIHsKKyAgICAgICAgZmQuX21OYW1lZFZhbHVlcyA9IHN0ZDo6bW92ZShuYW1lZFZhbHVlcyk7CisgICAgfQorCisgICAgaW5saW5lIHN0YXRpYworICAgIEMyU3RydWN0RGVzY3JpcHRvciBDcmVhdGVTdHJ1Y3REZXNjcmlwdG9yKEMyUGFyYW06OkNvcmVJbmRleCBpbmRleCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGQ6OnZlY3RvcjxDMkZpZWxkRGVzY3JpcHRvcj4gJiZmaWVsZHMpIHsKKyAgICAgICAgcmV0dXJuIEMyU3RydWN0RGVzY3JpcHRvcihpbmRleCwgc3RkOjptb3ZlKGZpZWxkcykpOworICAgIH0KKworICAgIGlubGluZSBzdGF0aWMKKyAgICBDMkZpZWxkRGVzY3JpcHRvciBPZmZzZXRGaWVsZERlc2NyaXB0b3IoY29uc3QgQzJGaWVsZERlc2NyaXB0b3IgJmZkLCBzaXplX3Qgb2Zmc2V0KSB7CisgICAgICAgIHJldHVybiBDMkZpZWxkRGVzY3JpcHRvcihmZCwgb2Zmc2V0KTsKKyAgICB9CisKKyAgICAvLyBleHBvc2UgYXR0cmlidXRlcworICAgIHR5cGVkZWYgQzJQYXJhbURlc2NyaXB0b3I6OmF0dHJpYl90IGF0dHJpYl90OworfTsKKworI2VuZGlmIC8vIEFORFJPSURfU1RBR0VGUklHSFRfQzJQQVJBTV9JTlRFUk5BTF9IXworCmRpZmYgLS1naXQgYS9tZWRpYS9jb2RlYzIvdm5kay9wbGF0Zm9ybS9DMkJxQnVmZmVyLmNwcCBiL21lZGlhL2NvZGVjMi92bmRrL3BsYXRmb3JtL0MyQnFCdWZmZXIuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdhMjYwMzUKLS0tIC9kZXYvbnVsbAorKysgYi9tZWRpYS9jb2RlYzIvdm5kay9wbGF0Zm9ybS9DMkJxQnVmZmVyLmNwcApAQCAtMCwwICsxLDQ5NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxOCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCisKKy8vI2RlZmluZSBMT0dfTkRFQlVHIDAKKyNkZWZpbmUgTE9HX1RBRyAiQzJCcUJ1ZmZlciIKKyNpbmNsdWRlIDx1dGlscy9Mb2cuaD4KKworI2luY2x1ZGUgPGd1aS9CdWZmZXJRdWV1ZURlZnMuaD4KKyNpbmNsdWRlIDxsaXN0PgorI2luY2x1ZGUgPG1hcD4KKyNpbmNsdWRlIDxtdXRleD4KKworI2luY2x1ZGUgPEMyQWxsb2NhdG9yR3JhbGxvYy5oPgorI2luY2x1ZGUgPEMyQnFCdWZmZXJQcml2Lmg+CisjaW5jbHVkZSA8QzJCbG9ja0ludGVybmFsLmg+CisKK3VzaW5nIDo6YW5kcm9pZDo6QW53QnVmZmVyOwordXNpbmcgOjphbmRyb2lkOjpCdWZmZXJRdWV1ZURlZnM6Ok5VTV9CVUZGRVJfU0xPVFM7Cit1c2luZyA6OmFuZHJvaWQ6OkMyQWxsb2NhdG9yR3JhbGxvYzsKK3VzaW5nIDo6YW5kcm9pZDo6QzJBbmRyb2lkTWVtb3J5VXNhZ2U7Cit1c2luZyA6OmFuZHJvaWQ6OkZlbmNlOwordXNpbmcgOjphbmRyb2lkOjpHcmFwaGljQnVmZmVyOwordXNpbmcgOjphbmRyb2lkOjpIR3JhcGhpY0J1ZmZlclByb2R1Y2VyOwordXNpbmcgOjphbmRyb2lkOjpJR3JhcGhpY0J1ZmZlclByb2R1Y2VyOwordXNpbmcgOjphbmRyb2lkOjpoaWRsX2hhbmRsZTsKK3VzaW5nIDo6YW5kcm9pZDo6c3A7Cit1c2luZyA6OmFuZHJvaWQ6OnN0YXR1c190OwordXNpbmcgOjphbmRyb2lkOjp3cDsKKwordXNpbmcgOjphbmRyb2lkOjpoYXJkd2FyZTo6UmV0dXJuOwordXNpbmcgOjphbmRyb2lkOjpoYXJkd2FyZTo6Z3JhcGhpY3M6OmNvbW1vbjo6VjFfMDo6UGl4ZWxGb3JtYXQ7CisKK3N0cnVjdCBDMkJ1ZmZlclF1ZXVlQmxvY2tQb29sRGF0YSA6IHB1YmxpYyBfQzJCbG9ja1Bvb2xEYXRhIHsKKworICAgIGJvb2wgaGVsZDsKKyAgICBib29sIGxvY2FsOworICAgIHVpbnQzMl90IGdlbmVyYXRpb247CisgICAgdWludDY0X3QgYnFJZDsKKyAgICBpbnQzMl90IGJxU2xvdDsKKyAgICBzcDxIR3JhcGhpY0J1ZmZlclByb2R1Y2VyPiBpZ2JwOworICAgIHN0ZDo6c2hhcmVkX3B0cjxDMkJ1ZmZlclF1ZXVlQmxvY2tQb29sOjpJbXBsPiBsb2NhbFBvb2w7CisKKyAgICB2aXJ0dWFsIHR5cGVfdCBnZXRUeXBlKCkgY29uc3Qgb3ZlcnJpZGUgeworICAgICAgICByZXR1cm4gVFlQRV9CVUZGRVJRVUVVRTsKKyAgICB9CisKKyAgICAvLyBDcmVhdGUgYSByZW1vdGUgQmxvY2tQb29sRGF0YS4KKyAgICBDMkJ1ZmZlclF1ZXVlQmxvY2tQb29sRGF0YSgKKyAgICAgICAgICAgIHVpbnQzMl90IGdlbmVyYXRpb24sIHVpbnQ2NF90IGJxSWQsIGludDMyX3QgYnFTbG90LAorICAgICAgICAgICAgY29uc3Qgc3A8SEdyYXBoaWNCdWZmZXJQcm9kdWNlcj4mIHByb2R1Y2VyID0gbnVsbHB0cik7CisKKyAgICAvLyBDcmVhdGUgYSBsb2NhbCBCbG9ja1Bvb2xEYXRhLgorICAgIEMyQnVmZmVyUXVldWVCbG9ja1Bvb2xEYXRhKAorICAgICAgICAgICAgdWludDMyX3QgZ2VuZXJhdGlvbiwgdWludDY0X3QgYnFJZCwgaW50MzJfdCBicVNsb3QsCisgICAgICAgICAgICBjb25zdCBzdGQ6OnNoYXJlZF9wdHI8QzJCdWZmZXJRdWV1ZUJsb2NrUG9vbDo6SW1wbD4mIHBvb2wpOworCisgICAgdmlydHVhbCB+QzJCdWZmZXJRdWV1ZUJsb2NrUG9vbERhdGEoKSBvdmVycmlkZTsKKworfTsKKworYm9vbCBfQzJCbG9ja0ZhY3Rvcnk6OkdldEJ1ZmZlclF1ZXVlRGF0YSgKKyAgICAgICAgY29uc3Qgc3RkOjpzaGFyZWRfcHRyPF9DMkJsb2NrUG9vbERhdGE+JiBkYXRhLAorICAgICAgICB1aW50MzJfdCogZ2VuZXJhdGlvbiwgdWludDY0X3QqIGJxSWQsIGludDMyX3QqIGJxU2xvdCkgeworICAgIGlmIChkYXRhICYmIGRhdGEtPmdldFR5cGUoKSA9PSBfQzJCbG9ja1Bvb2xEYXRhOjpUWVBFX0JVRkZFUlFVRVVFKSB7CisgICAgICAgIGlmIChnZW5lcmF0aW9uKSB7CisgICAgICAgICAgICBjb25zdCBzdGQ6OnNoYXJlZF9wdHI8QzJCdWZmZXJRdWV1ZUJsb2NrUG9vbERhdGE+IHBvb2xEYXRhID0KKyAgICAgICAgICAgICAgICAgICAgc3RkOjpzdGF0aWNfcG9pbnRlcl9jYXN0PEMyQnVmZmVyUXVldWVCbG9ja1Bvb2xEYXRhPihkYXRhKTsKKyAgICAgICAgICAgICpnZW5lcmF0aW9uID0gcG9vbERhdGEtPmdlbmVyYXRpb247CisgICAgICAgICAgICBpZiAoYnFJZCkgeworICAgICAgICAgICAgICAgICpicUlkID0gcG9vbERhdGEtPmJxSWQ7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoYnFTbG90KSB7CisgICAgICAgICAgICAgICAgKmJxU2xvdCA9IHBvb2xEYXRhLT5icVNsb3Q7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorICAgIHJldHVybiBmYWxzZTsKK30KKworYm9vbCBfQzJCbG9ja0ZhY3Rvcnk6OkFzc2lnbkJsb2NrVG9CdWZmZXJRdWV1ZSgKKyAgICAgICAgY29uc3Qgc3RkOjpzaGFyZWRfcHRyPF9DMkJsb2NrUG9vbERhdGE+JiBkYXRhLAorICAgICAgICBjb25zdCBzcDxIR3JhcGhpY0J1ZmZlclByb2R1Y2VyPiYgaWdicCwKKyAgICAgICAgdWludDMyX3QgZ2VuZXJhdGlvbiwKKyAgICAgICAgdWludDY0X3QgYnFJZCwKKyAgICAgICAgaW50MzJfdCBicVNsb3QsCisgICAgICAgIGJvb2wgaGVsZCkgeworICAgIGlmIChkYXRhICYmIGRhdGEtPmdldFR5cGUoKSA9PSBfQzJCbG9ja1Bvb2xEYXRhOjpUWVBFX0JVRkZFUlFVRVVFKSB7CisgICAgICAgIGNvbnN0IHN0ZDo6c2hhcmVkX3B0cjxDMkJ1ZmZlclF1ZXVlQmxvY2tQb29sRGF0YT4gcG9vbERhdGEgPQorICAgICAgICAgICAgICAgIHN0ZDo6c3RhdGljX3BvaW50ZXJfY2FzdDxDMkJ1ZmZlclF1ZXVlQmxvY2tQb29sRGF0YT4oZGF0YSk7CisgICAgICAgIHBvb2xEYXRhLT5pZ2JwID0gaWdicDsKKyAgICAgICAgcG9vbERhdGEtPmdlbmVyYXRpb24gPSBnZW5lcmF0aW9uOworICAgICAgICBwb29sRGF0YS0+YnFJZCA9IGJxSWQ7CisgICAgICAgIHBvb2xEYXRhLT5icVNsb3QgPSBicVNsb3Q7CisgICAgICAgIHBvb2xEYXRhLT5oZWxkID0gaGVsZDsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorICAgIHJldHVybiBmYWxzZTsKK30KKworYm9vbCBfQzJCbG9ja0ZhY3Rvcnk6OkhvbGRCbG9ja0Zyb21CdWZmZXJRdWV1ZSgKKyAgICAgICAgY29uc3Qgc3RkOjpzaGFyZWRfcHRyPF9DMkJsb2NrUG9vbERhdGE+JiBkYXRhLAorICAgICAgICBjb25zdCBzcDxIR3JhcGhpY0J1ZmZlclByb2R1Y2VyPiYgaWdicCkgeworICAgIGNvbnN0IHN0ZDo6c2hhcmVkX3B0cjxDMkJ1ZmZlclF1ZXVlQmxvY2tQb29sRGF0YT4gcG9vbERhdGEgPQorICAgICAgICAgICAgc3RkOjpzdGF0aWNfcG9pbnRlcl9jYXN0PEMyQnVmZmVyUXVldWVCbG9ja1Bvb2xEYXRhPihkYXRhKTsKKyAgICBpZiAoIXBvb2xEYXRhLT5sb2NhbCkgeworICAgICAgICBwb29sRGF0YS0+aWdicCA9IGlnYnA7CisgICAgfQorICAgIGlmIChwb29sRGF0YS0+aGVsZCkgeworICAgICAgICBwb29sRGF0YS0+aGVsZCA9IHRydWU7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgICAgcG9vbERhdGEtPmhlbGQgPSB0cnVlOworICAgIHJldHVybiB0cnVlOworfQorCitib29sIF9DMkJsb2NrRmFjdG9yeTo6WWllbGRCbG9ja1RvQnVmZmVyUXVldWUoCisgICAgICAgIGNvbnN0IHN0ZDo6c2hhcmVkX3B0cjxfQzJCbG9ja1Bvb2xEYXRhPiYgZGF0YSkgeworICAgIGNvbnN0IHN0ZDo6c2hhcmVkX3B0cjxDMkJ1ZmZlclF1ZXVlQmxvY2tQb29sRGF0YT4gcG9vbERhdGEgPQorICAgICAgICAgICAgc3RkOjpzdGF0aWNfcG9pbnRlcl9jYXN0PEMyQnVmZmVyUXVldWVCbG9ja1Bvb2xEYXRhPihkYXRhKTsKKyAgICBpZiAoIXBvb2xEYXRhLT5oZWxkKSB7CisgICAgICAgIHBvb2xEYXRhLT5oZWxkID0gZmFsc2U7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgICAgcG9vbERhdGEtPmhlbGQgPSBmYWxzZTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworc3RkOjpzaGFyZWRfcHRyPEMyR3JhcGhpY0Jsb2NrPiBfQzJCbG9ja0ZhY3Rvcnk6OkNyZWF0ZUdyYXBoaWNCbG9jaygKKyAgICAgICAgY29uc3QgQzJIYW5kbGUgKmhhbmRsZSkgeworICAgIC8vIFRPRE86IGdldCBwcm9wZXIgYWxsb2NhdG9yPyBhbmQgbXV0ZXg/CisgICAgc3RhdGljIHN0ZDo6dW5pcXVlX3B0cjxDMkFsbG9jYXRvckdyYWxsb2M+IHNBbGxvY2F0b3IgPSBzdGQ6Om1ha2VfdW5pcXVlPEMyQWxsb2NhdG9yR3JhbGxvYz4oMCk7CisKKyAgICBzdGQ6OnNoYXJlZF9wdHI8QzJHcmFwaGljQWxsb2NhdGlvbj4gYWxsb2M7CisgICAgaWYgKEMyQWxsb2NhdG9yR3JhbGxvYzo6aXNWYWxpZChoYW5kbGUpKSB7CisgICAgICAgIHVpbnQzMl90IHdpZHRoOworICAgICAgICB1aW50MzJfdCBoZWlnaHQ7CisgICAgICAgIHVpbnQzMl90IGZvcm1hdDsKKyAgICAgICAgdWludDY0X3QgdXNhZ2U7CisgICAgICAgIHVpbnQzMl90IHN0cmlkZTsKKyAgICAgICAgdWludDMyX3QgZ2VuZXJhdGlvbjsKKyAgICAgICAgdWludDY0X3QgYnFJZDsKKyAgICAgICAgdWludDMyX3QgYnFTbG90OworICAgICAgICBhbmRyb2lkOjpfVW53cmFwTmF0aXZlQ29kZWMyR3JhbGxvY01ldGFkYXRhKAorICAgICAgICAgICAgICAgIGhhbmRsZSwgJndpZHRoLCAmaGVpZ2h0LCAmZm9ybWF0LCAmdXNhZ2UsICZzdHJpZGUsICZnZW5lcmF0aW9uLCAmYnFJZCwgJmJxU2xvdCk7CisgICAgICAgIGMyX3N0YXR1c190IGVyciA9IHNBbGxvY2F0b3ItPnByaW9yR3JhcGhpY0FsbG9jYXRpb24oaGFuZGxlLCAmYWxsb2MpOworICAgICAgICBpZiAoZXJyID09IEMyX09LKSB7CisgICAgICAgICAgICBzdGQ6OnNoYXJlZF9wdHI8QzJHcmFwaGljQmxvY2s+IGJsb2NrOworICAgICAgICAgICAgaWYgKGJxSWQgfHwgYnFTbG90KSB7CisgICAgICAgICAgICAgICAgLy8gQlFCQlAKKyAgICAgICAgICAgICAgICBzdGQ6OnNoYXJlZF9wdHI8QzJCdWZmZXJRdWV1ZUJsb2NrUG9vbERhdGE+IHBvb2xEYXRhID0KKyAgICAgICAgICAgICAgICAgICAgICAgIHN0ZDo6bWFrZV9zaGFyZWQ8QzJCdWZmZXJRdWV1ZUJsb2NrUG9vbERhdGE+KGdlbmVyYXRpb24sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicUlkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGludDMyX3QpYnFTbG90KTsKKyAgICAgICAgICAgICAgICBibG9jayA9IF9DMkJsb2NrRmFjdG9yeTo6Q3JlYXRlR3JhcGhpY0Jsb2NrKGFsbG9jLCBwb29sRGF0YSk7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIGJsb2NrID0gX0MyQmxvY2tGYWN0b3J5OjpDcmVhdGVHcmFwaGljQmxvY2soYWxsb2MpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgcmV0dXJuIGJsb2NrOworICAgICAgICB9CisgICAgfQorICAgIHJldHVybiBudWxscHRyOworfQorCitjbGFzcyBDMkJ1ZmZlclF1ZXVlQmxvY2tQb29sOjpJbXBsCisgICAgICAgIDogcHVibGljIHN0ZDo6ZW5hYmxlX3NoYXJlZF9mcm9tX3RoaXM8QzJCdWZmZXJRdWV1ZUJsb2NrUG9vbDo6SW1wbD4geworcHJpdmF0ZToKKyAgICBjMl9zdGF0dXNfdCBmZXRjaEZyb21JZ2JwX2woCisgICAgICAgICAgICB1aW50MzJfdCB3aWR0aCwKKyAgICAgICAgICAgIHVpbnQzMl90IGhlaWdodCwKKyAgICAgICAgICAgIHVpbnQzMl90IGZvcm1hdCwKKyAgICAgICAgICAgIEMyTWVtb3J5VXNhZ2UgdXNhZ2UsCisgICAgICAgICAgICBzdGQ6OnNoYXJlZF9wdHI8QzJHcmFwaGljQmxvY2s+ICpibG9jayAvKiBub25udWxsICovKSB7CisgICAgICAgIC8vIFdlIGhhdmUgYW4gSUdCUCBub3cuCisgICAgICAgIHNwPEZlbmNlPiBmZW5jZSA9IG5ldyBGZW5jZSgpOworICAgICAgICBDMkFuZHJvaWRNZW1vcnlVc2FnZSBhbmRyb2lkVXNhZ2UgPSB1c2FnZTsKKyAgICAgICAgc3RhdHVzX3Qgc3RhdHVzOworICAgICAgICBQaXhlbEZvcm1hdCBwaXhlbEZvcm1hdCA9IHN0YXRpY19jYXN0PFBpeGVsRm9ybWF0Pihmb3JtYXQpOworICAgICAgICBpbnQgc2xvdDsKKyAgICAgICAgQUxPR1YoInRyaWVzIHRvIGRlcXVldWUgYnVmZmVyIik7CisgICAgICAgIFJldHVybjx2b2lkPiB0cmFuc1N0YXR1cyA9IG1Qcm9kdWNlci0+ZGVxdWV1ZUJ1ZmZlcigKKyAgICAgICAgICAgICAgICB3aWR0aCwgaGVpZ2h0LCBwaXhlbEZvcm1hdCwgYW5kcm9pZFVzYWdlLmFzR3JhbGxvY1VzYWdlKCksIHRydWUsCisgICAgICAgICAgICAgICAgWyZzdGF0dXMsICZzbG90LCAmZmVuY2VdKAorICAgICAgICAgICAgICAgICAgICAgICAgaW50MzJfdCB0U3RhdHVzLCBpbnQzMl90IHRTbG90LCBoaWRsX2hhbmRsZSBjb25zdCYgdEZlbmNlLAorICAgICAgICAgICAgICAgICAgICAgICAgSEdyYXBoaWNCdWZmZXJQcm9kdWNlcjo6RnJhbWVFdmVudEhpc3RvcnlEZWx0YSBjb25zdCYgdFRzKSB7CisgICAgICAgICAgICAgICAgICAgIHN0YXR1cyA9IHRTdGF0dXM7CisgICAgICAgICAgICAgICAgICAgIHNsb3QgPSB0U2xvdDsKKyAgICAgICAgICAgICAgICAgICAgaWYgKCFhbmRyb2lkOjpjb252ZXJzaW9uOjpjb252ZXJ0VG8oZmVuY2UuZ2V0KCksIHRGZW5jZSkgJiYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0dXMgPT0gYW5kcm9pZDo6Tk9fRVJST1IpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHN0YXR1cyA9IGFuZHJvaWQ6OkJBRF9WQUxVRTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAodm9pZCkgdFRzOworICAgICAgICAgICAgICAgIH0pOworICAgICAgICAvLyBkZXF1ZXVlQnVmZmVyIHJldHVybnMgZmxhZy4KKyAgICAgICAgaWYgKCF0cmFuc1N0YXR1cy5pc09rKCkgfHwgc3RhdHVzIDwgYW5kcm9pZDo6T0spIHsKKyAgICAgICAgICAgIEFMT0dEKCJjYW5ub3QgZGVxdWV1ZSBidWZmZXIgJWQiLCBzdGF0dXMpOworICAgICAgICAgICAgaWYgKHRyYW5zU3RhdHVzLmlzT2soKSAmJiBzdGF0dXMgPT0gYW5kcm9pZDo6SU5WQUxJRF9PUEVSQVRJT04pIHsKKyAgICAgICAgICAgICAgLy8gVG9vIG1hbnkgYnVmZmVyIGRlcXVldWVkLiByZXRyeWluZyBhZnRlciBzb21lIHRpbWUgaXMgcmVxdWlyZWQuCisgICAgICAgICAgICAgIHJldHVybiBDMl9USU1FRF9PVVQ7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICByZXR1cm4gQzJfQkFEX1ZBTFVFOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIEFMT0dWKCJkZXF1ZXVlZCBhIGJ1ZmZlciBzdWNjZXNzZnVsbHkiKTsKKyAgICAgICAgbmF0aXZlX2hhbmRsZV90KiBuaCA9IG51bGxwdHI7CisgICAgICAgIGhpZGxfaGFuZGxlIGZlbmNlSGFuZGxlOworICAgICAgICBpZiAoZmVuY2UpIHsKKyAgICAgICAgICAgIGFuZHJvaWQ6OmNvbnZlcnNpb246OndyYXBBcygmZmVuY2VIYW5kbGUsICZuaCwgKmZlbmNlKTsKKyAgICAgICAgfQorICAgICAgICBpZiAoZmVuY2UpIHsKKyAgICAgICAgICAgIHN0YXRpYyBjb25zdGV4cHIgaW50IGtGZW5jZVdhaXRUaW1lTXMgPSAxMDsKKworICAgICAgICAgICAgc3RhdHVzX3Qgc3RhdHVzID0gZmVuY2UtPndhaXQoa0ZlbmNlV2FpdFRpbWVNcyk7CisgICAgICAgICAgICBpZiAoc3RhdHVzID09IC1FVElNRSkgeworICAgICAgICAgICAgICAgIC8vIGZlbmNlIGlzIG5vdCBzaWduYWxsZWQgeWV0LgorICAgICAgICAgICAgICAgICh2b2lkKW1Qcm9kdWNlci0+Y2FuY2VsQnVmZmVyKHNsb3QsIGZlbmNlSGFuZGxlKS5pc09rKCk7CisgICAgICAgICAgICAgICAgcmV0dXJuIEMyX1RJTUVEX09VVDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChzdGF0dXMgIT0gYW5kcm9pZDo6Tk9fRVJST1IpIHsKKyAgICAgICAgICAgICAgICBBTE9HRCgiYnVmZmVyIGZlbmNlIHdhaXQgZXJyb3IgJWQiLCBzdGF0dXMpOworICAgICAgICAgICAgICAgICh2b2lkKW1Qcm9kdWNlci0+Y2FuY2VsQnVmZmVyKHNsb3QsIGZlbmNlSGFuZGxlKS5pc09rKCk7CisgICAgICAgICAgICAgICAgcmV0dXJuIEMyX0JBRF9WQUxVRTsKKyAgICAgICAgICAgIH0gZWxzZSBpZiAobVJlbmRlckNhbGxiYWNrKSB7CisgICAgICAgICAgICAgICAgbnNlY3NfdCBzaWduYWxUaW1lID0gZmVuY2UtPmdldFNpZ25hbFRpbWUoKTsKKyAgICAgICAgICAgICAgICBpZiAoc2lnbmFsVGltZSA+PSAwICYmIHNpZ25hbFRpbWUgPCBJTlQ2NF9NQVgpIHsKKyAgICAgICAgICAgICAgICAgICAgbVJlbmRlckNhbGxiYWNrKG1Qcm9kdWNlcklkLCBzbG90LCBzaWduYWxUaW1lKTsKKyAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICBBTE9HVigiZ290IGZlbmNlIHNpZ25hbCB0aW1lIG9mICVsbGQiLCAobG9uZyBsb25nKXNpZ25hbFRpbWUpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIHNwPEdyYXBoaWNCdWZmZXI+ICZzbG90QnVmZmVyID0gbUJ1ZmZlcnNbc2xvdF07CisgICAgICAgIGlmIChzdGF0dXMgJiBJR3JhcGhpY0J1ZmZlclByb2R1Y2VyOjpCVUZGRVJfTkVFRFNfUkVBTExPQ0FUSU9OIHx8ICFzbG90QnVmZmVyKSB7CisgICAgICAgICAgICBpZiAoIXNsb3RCdWZmZXIpIHsKKyAgICAgICAgICAgICAgICBzbG90QnVmZmVyID0gbmV3IEdyYXBoaWNCdWZmZXIoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIC8vIE4uQi4gVGhpcyBhc3N1bWVzIHJlcXVlc3RCdWZmZXIjIHJldHVybnMgYW4gZXhpc3RpbmcgYWxsb2NhdGlvbgorICAgICAgICAgICAgLy8gaW5zdGVhZCBvZiBhIG5ldyBhbGxvY2F0aW9uLgorICAgICAgICAgICAgUmV0dXJuPHZvaWQ+IHRyYW5zU3RhdHVzID0gbVByb2R1Y2VyLT5yZXF1ZXN0QnVmZmVyKAorICAgICAgICAgICAgICAgICAgICBzbG90LAorICAgICAgICAgICAgICAgICAgICBbJnN0YXR1cywgJnNsb3RCdWZmZXJdKGludDMyX3QgdFN0YXR1cywgQW53QnVmZmVyIGNvbnN0JiB0QnVmZmVyKXsKKyAgICAgICAgICAgICAgICAgICAgICAgIHN0YXR1cyA9IHRTdGF0dXM7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWFuZHJvaWQ6OmNvbnZlcnNpb246OmNvbnZlcnRUbyhzbG90QnVmZmVyLmdldCgpLCB0QnVmZmVyKSAmJgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0dXMgPT0gYW5kcm9pZDo6Tk9fRVJST1IpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0dXMgPSBhbmRyb2lkOjpCQURfVkFMVUU7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIH0pOworCisgICAgICAgICAgICBpZiAoIXRyYW5zU3RhdHVzLmlzT2soKSkgeworICAgICAgICAgICAgICAgIHJldHVybiBDMl9CQURfVkFMVUU7CisgICAgICAgICAgICB9IGVsc2UgaWYgKHN0YXR1cyAhPSBhbmRyb2lkOjpOT19FUlJPUikgeworICAgICAgICAgICAgICAgIHNsb3RCdWZmZXIuY2xlYXIoKTsKKyAgICAgICAgICAgICAgICAodm9pZCltUHJvZHVjZXItPmNhbmNlbEJ1ZmZlcihzbG90LCBmZW5jZUhhbmRsZSkuaXNPaygpOworICAgICAgICAgICAgICAgIHJldHVybiBDMl9CQURfVkFMVUU7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgaWYgKHNsb3RCdWZmZXIpIHsKKyAgICAgICAgICAgIG5hdGl2ZV9oYW5kbGVfdCAqZ3JhbGxvY0hhbmRsZSA9IG5hdGl2ZV9oYW5kbGVfY2xvbmUoc2xvdEJ1ZmZlci0+aGFuZGxlKTsKKworICAgICAgICAgICAgaWYgKGdyYWxsb2NIYW5kbGUpIHsKKyAgICAgICAgICAgICAgICBBTE9HVigiYnVmZmVyIHdyYXBzICVsbHUgJWQiLCAodW5zaWduZWQgbG9uZyBsb25nKW1Qcm9kdWNlcklkLCBzbG90KTsKKyAgICAgICAgICAgICAgICBDMkhhbmRsZSAqYzJIYW5kbGUgPSBhbmRyb2lkOjpXcmFwTmF0aXZlQ29kZWMyR3JhbGxvY0hhbmRsZSgKKyAgICAgICAgICAgICAgICAgICAgICAgIGdyYWxsb2NIYW5kbGUsCisgICAgICAgICAgICAgICAgICAgICAgICBzbG90QnVmZmVyLT53aWR0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgIHNsb3RCdWZmZXItPmhlaWdodCwKKyAgICAgICAgICAgICAgICAgICAgICAgIHNsb3RCdWZmZXItPmZvcm1hdCwKKyAgICAgICAgICAgICAgICAgICAgICAgIHNsb3RCdWZmZXItPnVzYWdlLAorICAgICAgICAgICAgICAgICAgICAgICAgc2xvdEJ1ZmZlci0+c3RyaWRlLAorICAgICAgICAgICAgICAgICAgICAgICAgc2xvdEJ1ZmZlci0+Z2V0R2VuZXJhdGlvbk51bWJlcigpLAorICAgICAgICAgICAgICAgICAgICAgICAgbVByb2R1Y2VySWQsIHNsb3QpOworICAgICAgICAgICAgICAgIGlmIChjMkhhbmRsZSkgeworICAgICAgICAgICAgICAgICAgICAvLyBNb3ZlZCBldmVyeXRoaW5nIHRvIGMySGFuZGxlLgorICAgICAgICAgICAgICAgICAgICBuYXRpdmVfaGFuZGxlX2RlbGV0ZShncmFsbG9jSGFuZGxlKTsKKyAgICAgICAgICAgICAgICAgICAgc3RkOjpzaGFyZWRfcHRyPEMyR3JhcGhpY0FsbG9jYXRpb24+IGFsbG9jOworICAgICAgICAgICAgICAgICAgICBjMl9zdGF0dXNfdCBlcnIgPSBtQWxsb2NhdG9yLT5wcmlvckdyYXBoaWNBbGxvY2F0aW9uKGMySGFuZGxlLCAmYWxsb2MpOworICAgICAgICAgICAgICAgICAgICBpZiAoZXJyICE9IEMyX09LKSB7CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZXJyOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIHN0ZDo6c2hhcmVkX3B0cjxDMkJ1ZmZlclF1ZXVlQmxvY2tQb29sRGF0YT4gcG9vbERhdGEgPQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZDo6bWFrZV9zaGFyZWQ8QzJCdWZmZXJRdWV1ZUJsb2NrUG9vbERhdGE+KAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2xvdEJ1ZmZlci0+Z2V0R2VuZXJhdGlvbk51bWJlcigpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbVByb2R1Y2VySWQsIHNsb3QsIHNoYXJlZF9mcm9tX3RoaXMoKSk7CisgICAgICAgICAgICAgICAgICAgICpibG9jayA9IF9DMkJsb2NrRmFjdG9yeTo6Q3JlYXRlR3JhcGhpY0Jsb2NrKGFsbG9jLCBwb29sRGF0YSk7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBDMl9PSzsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgbmF0aXZlX2hhbmRsZV9jbG9zZShncmFsbG9jSGFuZGxlKTsKKyAgICAgICAgICAgICAgICBuYXRpdmVfaGFuZGxlX2RlbGV0ZShncmFsbG9jSGFuZGxlKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIC8vIEJsb2NrIHdhcyBub3QgY3JlYXRlZC4gY2FsbCByZXF1ZXN0QnVmZmVyIyBhZ2FpbiBuZXh0IHRpbWUuCisgICAgICAgICAgICBzbG90QnVmZmVyLmNsZWFyKCk7CisgICAgICAgICAgICAodm9pZCltUHJvZHVjZXItPmNhbmNlbEJ1ZmZlcihzbG90LCBmZW5jZUhhbmRsZSkuaXNPaygpOworICAgICAgICB9CisgICAgICAgIHJldHVybiBDMl9CQURfVkFMVUU7CisgICAgfQorCitwdWJsaWM6CisgICAgSW1wbChjb25zdCBzdGQ6OnNoYXJlZF9wdHI8QzJBbGxvY2F0b3I+ICZhbGxvY2F0b3IpCisgICAgICAgIDogbUluaXQoQzJfT0spLCBtUHJvZHVjZXJJZCgwKSwgbUFsbG9jYXRvcihhbGxvY2F0b3IpIHsKKyAgICB9CisKKyAgICB+SW1wbCgpIHsKKyAgICAgICAgYm9vbCBub0luaXQgPSBmYWxzZTsKKyAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBOVU1fQlVGRkVSX1NMT1RTOyArK2kpIHsKKyAgICAgICAgICAgIGlmICghbm9Jbml0ICYmIG1Qcm9kdWNlcikgeworICAgICAgICAgICAgICAgIFJldHVybjxpbnQzMl90PiB0cmFuc1Jlc3VsdCA9CisgICAgICAgICAgICAgICAgICAgICAgICBtUHJvZHVjZXItPmRldGFjaEJ1ZmZlcihzdGF0aWNfY2FzdDxpbnQzMl90PihpKSk7CisgICAgICAgICAgICAgICAgbm9Jbml0ID0gIXRyYW5zUmVzdWx0LmlzT2soKSB8fAorICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRpY19jYXN0PGludDMyX3Q+KHRyYW5zUmVzdWx0KSA9PSBhbmRyb2lkOjpOT19JTklUOworICAgICAgICAgICAgfQorICAgICAgICAgICAgbUJ1ZmZlcnNbaV0uY2xlYXIoKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIGMyX3N0YXR1c190IGZldGNoR3JhcGhpY0Jsb2NrKAorICAgICAgICAgICAgdWludDMyX3Qgd2lkdGgsCisgICAgICAgICAgICB1aW50MzJfdCBoZWlnaHQsCisgICAgICAgICAgICB1aW50MzJfdCBmb3JtYXQsCisgICAgICAgICAgICBDMk1lbW9yeVVzYWdlIHVzYWdlLAorICAgICAgICAgICAgc3RkOjpzaGFyZWRfcHRyPEMyR3JhcGhpY0Jsb2NrPiAqYmxvY2sgLyogbm9ubnVsbCAqLykgeworICAgICAgICBibG9jay0+cmVzZXQoKTsKKyAgICAgICAgaWYgKG1Jbml0ICE9IEMyX09LKSB7CisgICAgICAgICAgICByZXR1cm4gbUluaXQ7CisgICAgICAgIH0KKworICAgICAgICBzdGF0aWMgaW50IGtNYXhJZ2JwUmV0cnkgPSAyMDsgLy8gVE9ETzogc21hbGwgbnVtYmVyIGNhbiBjYXVzZSBjcmFzaCBpbiByZWxlYXNpbmcuCisgICAgICAgIHN0YXRpYyBpbnQga01heElnYnBSZXRyeURlbGF5VXMgPSAxMDAwMDsKKworICAgICAgICBpbnQgY3VyVHJ5ID0gMDsKKworICAgICAgICB3aGlsZSAoY3VyVHJ5KysgPCBrTWF4SWdicFJldHJ5KSB7CisgICAgICAgICAgICBzdGQ6OnVuaXF1ZV9sb2NrPHN0ZDo6bXV0ZXg+IGxvY2sobU11dGV4KTsKKyAgICAgICAgICAgIC8vIFRPRE86IHJldHVybiBDMl9OT19JTklUCisgICAgICAgICAgICBpZiAobVByb2R1Y2VySWQgPT0gMCkgeworICAgICAgICAgICAgICAgIHN0ZDo6c2hhcmVkX3B0cjxDMkdyYXBoaWNBbGxvY2F0aW9uPiBhbGxvYzsKKyAgICAgICAgICAgICAgICBjMl9zdGF0dXNfdCBlcnIgPSBtQWxsb2NhdG9yLT5uZXdHcmFwaGljQWxsb2NhdGlvbigKKyAgICAgICAgICAgICAgICAgICAgICAgIHdpZHRoLCBoZWlnaHQsIGZvcm1hdCwgdXNhZ2UsICZhbGxvYyk7CisgICAgICAgICAgICAgICAgaWYgKGVyciAhPSBDMl9PSykgeworICAgICAgICAgICAgICAgICAgICByZXR1cm4gZXJyOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBzdGQ6OnNoYXJlZF9wdHI8QzJCdWZmZXJRdWV1ZUJsb2NrUG9vbERhdGE+IHBvb2xEYXRhID0KKyAgICAgICAgICAgICAgICAgICAgICAgIHN0ZDo6bWFrZV9zaGFyZWQ8QzJCdWZmZXJRdWV1ZUJsb2NrUG9vbERhdGE+KAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwLCAodWludDY0X3QpMCwgfjAsIHNoYXJlZF9mcm9tX3RoaXMoKSk7CisgICAgICAgICAgICAgICAgLy8gVE9ETzogY29uZmlnPworICAgICAgICAgICAgICAgICpibG9jayA9IF9DMkJsb2NrRmFjdG9yeTo6Q3JlYXRlR3JhcGhpY0Jsb2NrKGFsbG9jLCBwb29sRGF0YSk7CisgICAgICAgICAgICAgICAgQUxPR1YoImFsbG9jYXRlZCBhIGJ1ZmZlciBzdWNjZXNzZnVsbHkiKTsKKworICAgICAgICAgICAgICAgIHJldHVybiBDMl9PSzsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGMyX3N0YXR1c190IHN0YXR1cyA9IGZldGNoRnJvbUlnYnBfbCh3aWR0aCwgaGVpZ2h0LCBmb3JtYXQsIHVzYWdlLCBibG9jayk7CisgICAgICAgICAgICBpZiAoc3RhdHVzID09IEMyX1RJTUVEX09VVCkgeworICAgICAgICAgICAgICAgIGxvY2sudW5sb2NrKCk7CisgICAgICAgICAgICAgICAgOjp1c2xlZXAoa01heElnYnBSZXRyeURlbGF5VXMpOworICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgfQorICAgICAgICAgICAgcmV0dXJuIHN0YXR1czsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gQzJfVElNRURfT1VUOworICAgIH0KKworICAgIHZvaWQgc2V0UmVuZGVyQ2FsbGJhY2soY29uc3QgT25SZW5kZXJDYWxsYmFjayAmcmVuZGVyQ2FsbGJhY2spIHsKKyAgICAgICAgc3RkOjpsb2NrX2d1YXJkPHN0ZDo6bXV0ZXg+IGxvY2sobU11dGV4KTsKKyAgICAgICAgbVJlbmRlckNhbGxiYWNrID0gcmVuZGVyQ2FsbGJhY2s7CisgICAgfQorCisgICAgdm9pZCBjb25maWd1cmVQcm9kdWNlcihjb25zdCBzcDxIR3JhcGhpY0J1ZmZlclByb2R1Y2VyPiAmcHJvZHVjZXIpIHsKKyAgICAgICAgaW50MzJfdCBzdGF0dXMgPSBhbmRyb2lkOjpPSzsKKyAgICAgICAgdWludDY0X3QgcHJvZHVjZXJJZCA9IDA7CisgICAgICAgIGlmIChwcm9kdWNlcikgeworICAgICAgICAgICAgUmV0dXJuPHZvaWQ+IHRyYW5zU3RhdHVzID0gcHJvZHVjZXItPmdldFVuaXF1ZUlkKAorICAgICAgICAgICAgICAgICAgICBbJnN0YXR1cywgJnByb2R1Y2VySWRdKGludDMyX3QgdFN0YXR1cywgaW50NjRfdCB0UHJvZHVjZXJJZCkgeworICAgICAgICAgICAgICAgICAgICAgICAgc3RhdHVzID0gdFN0YXR1czsKKyAgICAgICAgICAgICAgICAgICAgICAgIHByb2R1Y2VySWQgPSB0UHJvZHVjZXJJZDsKKyAgICAgICAgICAgICAgICAgICAgfSk7CisgICAgICAgICAgICBpZiAoIXRyYW5zU3RhdHVzLmlzT2soKSkgeworICAgICAgICAgICAgICAgIEFMT0dEKCJjb25maWd1cmVQcm9kdWNlciAtLSBmYWlsZWQgdG8gY29ubmVjdCB0byB0aGUgcHJvZHVjZXIiKTsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgeworICAgICAgICAgICAgc3RkOjpsb2NrX2d1YXJkPHN0ZDo6bXV0ZXg+IGxvY2sobU11dGV4KTsKKyAgICAgICAgICAgIGJvb2wgbm9Jbml0ID0gZmFsc2U7CisgICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IE5VTV9CVUZGRVJfU0xPVFM7ICsraSkgeworICAgICAgICAgICAgICAgIGlmICghbm9Jbml0ICYmIG1Qcm9kdWNlcikgeworICAgICAgICAgICAgICAgICAgICBSZXR1cm48aW50MzJfdD4gdHJhbnNSZXN1bHQgPQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1Qcm9kdWNlci0+ZGV0YWNoQnVmZmVyKHN0YXRpY19jYXN0PGludDMyX3Q+KGkpKTsKKyAgICAgICAgICAgICAgICAgICAgbm9Jbml0ID0gIXRyYW5zUmVzdWx0LmlzT2soKSB8fAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0aWNfY2FzdDxpbnQzMl90Pih0cmFuc1Jlc3VsdCkgPT0gYW5kcm9pZDo6Tk9fSU5JVDsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgbUJ1ZmZlcnNbaV0uY2xlYXIoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChwcm9kdWNlciAmJiBzdGF0dXMgPT0gYW5kcm9pZDo6T0spIHsKKyAgICAgICAgICAgICAgICBtUHJvZHVjZXIgPSBwcm9kdWNlcjsKKyAgICAgICAgICAgICAgICBtUHJvZHVjZXJJZCA9IHByb2R1Y2VySWQ7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIG1Qcm9kdWNlciA9IG51bGxwdHI7CisgICAgICAgICAgICAgICAgbVByb2R1Y2VySWQgPSAwOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCitwcml2YXRlOgorICAgIGZyaWVuZCBzdHJ1Y3QgQzJCdWZmZXJRdWV1ZUJsb2NrUG9vbERhdGE7CisKKyAgICB2b2lkIGNhbmNlbCh1aW50NjRfdCBpZ2JwX2lkLCBpbnQzMl90IGlnYnBfc2xvdCkgeworICAgICAgICBzdGQ6OmxvY2tfZ3VhcmQ8c3RkOjptdXRleD4gbG9jayhtTXV0ZXgpOworICAgICAgICBpZiAoaWdicF9pZCA9PSBtUHJvZHVjZXJJZCAmJiBtUHJvZHVjZXIpIHsKKyAgICAgICAgICAgICh2b2lkKW1Qcm9kdWNlci0+Y2FuY2VsQnVmZmVyKGlnYnBfc2xvdCwgbnVsbHB0cikuaXNPaygpOworICAgICAgICB9CisgICAgfQorCisgICAgYzJfc3RhdHVzX3QgbUluaXQ7CisgICAgdWludDY0X3QgbVByb2R1Y2VySWQ7CisgICAgT25SZW5kZXJDYWxsYmFjayBtUmVuZGVyQ2FsbGJhY2s7CisKKyAgICBjb25zdCBzdGQ6OnNoYXJlZF9wdHI8QzJBbGxvY2F0b3I+IG1BbGxvY2F0b3I7CisKKyAgICBzdGQ6Om11dGV4IG1NdXRleDsKKyAgICBzcDxIR3JhcGhpY0J1ZmZlclByb2R1Y2VyPiBtUHJvZHVjZXI7CisKKyAgICBzcDxHcmFwaGljQnVmZmVyPiBtQnVmZmVyc1tOVU1fQlVGRkVSX1NMT1RTXTsKK307CisKK0MyQnVmZmVyUXVldWVCbG9ja1Bvb2xEYXRhOjpDMkJ1ZmZlclF1ZXVlQmxvY2tQb29sRGF0YSgKKyAgICAgICAgdWludDMyX3QgZ2VuZXJhdGlvbiwgdWludDY0X3QgYnFJZCwgaW50MzJfdCBicVNsb3QsCisgICAgICAgIGNvbnN0IHNwPEhHcmFwaGljQnVmZmVyUHJvZHVjZXI+JiBwcm9kdWNlcikgOgorICAgICAgICBoZWxkKHByb2R1Y2VyICYmIGJxSWQgIT0gMCksIGxvY2FsKGZhbHNlKSwKKyAgICAgICAgZ2VuZXJhdGlvbihnZW5lcmF0aW9uKSwgYnFJZChicUlkKSwgYnFTbG90KGJxU2xvdCksCisgICAgICAgIGlnYnAocHJvZHVjZXIpLAorICAgICAgICBsb2NhbFBvb2woKSB7Cit9CisKK0MyQnVmZmVyUXVldWVCbG9ja1Bvb2xEYXRhOjpDMkJ1ZmZlclF1ZXVlQmxvY2tQb29sRGF0YSgKKyAgICAgICAgdWludDMyX3QgZ2VuZXJhdGlvbiwgdWludDY0X3QgYnFJZCwgaW50MzJfdCBicVNsb3QsCisgICAgICAgIGNvbnN0IHN0ZDo6c2hhcmVkX3B0cjxDMkJ1ZmZlclF1ZXVlQmxvY2tQb29sOjpJbXBsPiYgcG9vbCkgOgorICAgICAgICBoZWxkKHRydWUpLCBsb2NhbCh0cnVlKSwKKyAgICAgICAgZ2VuZXJhdGlvbihnZW5lcmF0aW9uKSwgYnFJZChicUlkKSwgYnFTbG90KGJxU2xvdCksCisgICAgICAgIGlnYnAocG9vbCA/IHBvb2wtPm1Qcm9kdWNlciA6IG51bGxwdHIpLAorICAgICAgICBsb2NhbFBvb2wocG9vbCkgeworfQorCitDMkJ1ZmZlclF1ZXVlQmxvY2tQb29sRGF0YTo6fkMyQnVmZmVyUXVldWVCbG9ja1Bvb2xEYXRhKCkgeworICAgIGlmICghaGVsZCB8fCBicUlkID09IDApIHsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBpZiAobG9jYWwgJiYgbG9jYWxQb29sKSB7CisgICAgICAgIGxvY2FsUG9vbC0+Y2FuY2VsKGJxSWQsIGJxU2xvdCk7CisgICAgfSBlbHNlIGlmIChpZ2JwKSB7CisgICAgICAgIGlnYnAtPmNhbmNlbEJ1ZmZlcihicVNsb3QsIG51bGxwdHIpOworICAgIH0KK30KKworQzJCdWZmZXJRdWV1ZUJsb2NrUG9vbDo6QzJCdWZmZXJRdWV1ZUJsb2NrUG9vbCgKKyAgICAgICAgY29uc3Qgc3RkOjpzaGFyZWRfcHRyPEMyQWxsb2NhdG9yPiAmYWxsb2NhdG9yLCBjb25zdCBsb2NhbF9pZF90IGxvY2FsSWQpCisgICAgICAgIDogbUFsbG9jYXRvcihhbGxvY2F0b3IpLCBtTG9jYWxJZChsb2NhbElkKSwgbUltcGwobmV3IEltcGwoYWxsb2NhdG9yKSkge30KKworQzJCdWZmZXJRdWV1ZUJsb2NrUG9vbDo6fkMyQnVmZmVyUXVldWVCbG9ja1Bvb2woKSB7fQorCitjMl9zdGF0dXNfdCBDMkJ1ZmZlclF1ZXVlQmxvY2tQb29sOjpmZXRjaEdyYXBoaWNCbG9jaygKKyAgICAgICAgdWludDMyX3Qgd2lkdGgsCisgICAgICAgIHVpbnQzMl90IGhlaWdodCwKKyAgICAgICAgdWludDMyX3QgZm9ybWF0LAorICAgICAgICBDMk1lbW9yeVVzYWdlIHVzYWdlLAorICAgICAgICBzdGQ6OnNoYXJlZF9wdHI8QzJHcmFwaGljQmxvY2s+ICpibG9jayAvKiBub25udWxsICovKSB7CisgICAgaWYgKG1JbXBsKSB7CisgICAgICAgIHJldHVybiBtSW1wbC0+ZmV0Y2hHcmFwaGljQmxvY2sod2lkdGgsIGhlaWdodCwgZm9ybWF0LCB1c2FnZSwgYmxvY2spOworICAgIH0KKyAgICByZXR1cm4gQzJfQ09SUlVQVEVEOworfQorCit2b2lkIEMyQnVmZmVyUXVldWVCbG9ja1Bvb2w6OmNvbmZpZ3VyZVByb2R1Y2VyKGNvbnN0IHNwPEhHcmFwaGljQnVmZmVyUHJvZHVjZXI+ICZwcm9kdWNlcikgeworICAgIGlmIChtSW1wbCkgeworICAgICAgICBtSW1wbC0+Y29uZmlndXJlUHJvZHVjZXIocHJvZHVjZXIpOworICAgIH0KK30KKwordm9pZCBDMkJ1ZmZlclF1ZXVlQmxvY2tQb29sOjpzZXRSZW5kZXJDYWxsYmFjayhjb25zdCBPblJlbmRlckNhbGxiYWNrICZyZW5kZXJDYWxsYmFjaykgeworICAgIGlmIChtSW1wbCkgeworICAgICAgICBtSW1wbC0+c2V0UmVuZGVyQ2FsbGJhY2socmVuZGVyQ2FsbGJhY2spOworICAgIH0KK30KZGlmZiAtLWdpdCBhL21lZGlhL2NvZGVjMi92bmRrL3V0aWwvQzJEZWJ1Zy5jcHAgYi9tZWRpYS9jb2RlYzIvdm5kay91dGlsL0MyRGVidWcuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI0YWE3MTkKLS0tIC9kZXYvbnVsbAorKysgYi9tZWRpYS9jb2RlYzIvdm5kay91dGlsL0MyRGVidWcuY3BwCkBAIC0wLDAgKzEsMjc5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE4IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KKworI2luY2x1ZGUgPEMyUGFyYW1JbnRlcm5hbC5oPgorI2luY2x1ZGUgPHV0aWwvQzJEZWJ1Zy1pbnRlcmZhY2UuaD4KKyNpbmNsdWRlIDx1dGlsL0MyRGVidWctcGFyYW0uaD4KKyNpbmNsdWRlIDx1dGlsL0MySW50ZXJmYWNlVXRpbHMuaD4KKworI2luY2x1ZGUgPGlvc3RyZWFtPgorCisjaW5jbHVkZSA8YW5kcm9pZC1iYXNlL3N0cmluZ3ByaW50Zi5oPgorCit1c2luZyBhbmRyb2lkOjpiYXNlOjpTdHJpbmdQcmludGY7CisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIGFzU3RyaW5nIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKK2NvbnN0IGNoYXIgKmFzU3RyaW5nKGMyX3N0YXR1c190IGksIGNvbnN0IGNoYXIgKmRlZikgeworICAgIHN3aXRjaCAoaSkgeworICAgICAgICBjYXNlIEMyX09LOiAgICAgICAgcmV0dXJuICJPSyI7CisgICAgICAgIGNhc2UgQzJfQkFEX1ZBTFVFOiByZXR1cm4gIkJBRF9WQUxVRSI7CisgICAgICAgIGNhc2UgQzJfQkFEX0lOREVYOiByZXR1cm4gIkJBRF9JTkRFWCI7CisgICAgICAgIGNhc2UgQzJfQ0FOTk9UX0RPOiByZXR1cm4gIkNBTk5PVF9ETyI7CisgICAgICAgIGNhc2UgQzJfRFVQTElDQVRFOiByZXR1cm4gIkRVUExJQ0FURSI7CisgICAgICAgIGNhc2UgQzJfTk9UX0ZPVU5EOiByZXR1cm4gIk5PVF9GT1VORCI7CisgICAgICAgIGNhc2UgQzJfQkFEX1NUQVRFOiByZXR1cm4gIkJBRF9TVEFURSI7CisgICAgICAgIGNhc2UgQzJfQkxPQ0tJTkc6ICByZXR1cm4gIkJMT0NLSU5HIjsKKyAgICAgICAgY2FzZSBDMl9DQU5DRUxFRDogIHJldHVybiAiQ0FOQ0VMRUQiOworICAgICAgICBjYXNlIEMyX05PX01FTU9SWTogcmV0dXJuICJOT19NRU1PUlkiOworICAgICAgICBjYXNlIEMyX1JFRlVTRUQ6ICAgcmV0dXJuICJSRUZVU0VEIjsKKyAgICAgICAgY2FzZSBDMl9USU1FRF9PVVQ6IHJldHVybiAiVElNRURfT1VUIjsKKyAgICAgICAgY2FzZSBDMl9PTUlUVEVEOiAgIHJldHVybiAiT01JVFRFRCI7CisgICAgICAgIGNhc2UgQzJfQ09SUlVQVEVEOiByZXR1cm4gIkNPUlJVUFRFRCI7CisgICAgICAgIGNhc2UgQzJfTk9fSU5JVDogICByZXR1cm4gIk5PX0lOSVQiOworICAgICAgICBkZWZhdWx0OiAgICAgICAgICAgcmV0dXJuIGRlZjsKKyAgICB9Cit9CisKK2NvbnN0IGNoYXIgKmFzU3RyaW5nKEMyRmllbGREZXNjcmlwdG9yOjp0eXBlX3QgaSwgY29uc3QgY2hhciAqZGVmKSB7CisgICAgc3dpdGNoIChpKSB7CisgICAgICAgIGNhc2UgQzJGaWVsZERlc2NyaXB0b3I6OkJMT0I6ICAgcmV0dXJuICJ1OCI7CisgICAgICAgIGNhc2UgQzJGaWVsZERlc2NyaXB0b3I6OkNOVFIzMjogcmV0dXJuICJjMzIiOworICAgICAgICBjYXNlIEMyRmllbGREZXNjcmlwdG9yOjpDTlRSNjQ6IHJldHVybiAiYzY0IjsKKyAgICAgICAgY2FzZSBDMkZpZWxkRGVzY3JpcHRvcjo6RkxPQVQ6ICByZXR1cm4gImZwIjsKKyAgICAgICAgY2FzZSBDMkZpZWxkRGVzY3JpcHRvcjo6SU5UMzI6ICByZXR1cm4gImkzMiI7CisgICAgICAgIGNhc2UgQzJGaWVsZERlc2NyaXB0b3I6OklOVDY0OiAgcmV0dXJuICJpNjQiOworICAgICAgICBjYXNlIEMyRmllbGREZXNjcmlwdG9yOjpTVFJJTkc6IHJldHVybiAiY2hyIjsKKyAgICAgICAgY2FzZSBDMkZpZWxkRGVzY3JpcHRvcjo6VUlOVDMyOiByZXR1cm4gInUzMiI7CisgICAgICAgIGNhc2UgQzJGaWVsZERlc2NyaXB0b3I6OlVJTlQ2NDogcmV0dXJuICJ1NjQiOworICAgICAgICBkZWZhdWx0OiByZXR1cm4gKGkgJiBDMkZpZWxkRGVzY3JpcHRvcjo6U1RSVUNUX0ZMQUcpID8gInN0cnVjdCIgOiBkZWY7CisgICAgfQorfQorCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gQzJQYXJhbUZpZWxkIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCitzdGF0aWMgc3RkOjpzdHJpbmcgYXR0cmliUGFyYW1Db3JlSW5kZXgoY29uc3QgQzJQYXJhbTo6Q29yZUluZGV4ICZpKSB7CisgICAgcmV0dXJuIFN0cmluZ1ByaW50ZigiJWMlYyUwM3giLAorICAgICAgICAgICAgaS5pc0ZsZXhpYmxlKCkgPyAnRicgOiAnLScsCisgICAgICAgICAgICBpLmlzVmVuZG9yKCkgPyAnVicgOiAnLScsCisgICAgICAgICAgICBpLmNvcmVJbmRleCgpKTsKK30KKworc3RhdGljIHN0ZDo6c3RyaW5nIGF0dHJpYlBhcmFtSW5kZXgoCisgICAgICAgIGNvbnN0IEMyUGFyYW06OlR5cGUgJmksIGJvb2wgYWRkU3RyZWFtLCB1bnNpZ25lZCBzdHJlYW1JZCkgeworICAgIHN0ZDo6c3RyaW5nIHYgPSBTdHJpbmdQcmludGYoIiVjJWMiLAorICAgICAgICAgICAgaS5mb3JJbnB1dCgpID8gJ0knIDogaS5mb3JPdXRwdXQoKSA/ICdPJyA6ICctJywKKyAgICAgICAgICAgIGkuZm9yU3RyZWFtKCkgPyAnUycgOiBpLmZvclBvcnQoKSA/ICdQJyA6ICdHJyk7CisgICAgaWYgKGFkZFN0cmVhbSkgeworICAgICAgICBpZiAoaS5mb3JTdHJlYW0oKSkgeworICAgICAgICAgICAgdiArPSBTdHJpbmdQcmludGYoIiUwMmQiLCBzdHJlYW1JZCk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICB2ICs9ICItLSI7CisgICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gdgorICAgICAgICAgICAgKyBTdHJpbmdQcmludGYoIiVjICIsCisgICAgICAgICAgICAgICAgICAgICAgIGkua2luZCgpID09IEMyUGFyYW06OlNUUlVDVCAgPyAnUycgOgorICAgICAgICAgICAgICAgICAgICAgICBpLmtpbmQoKSA9PSBDMlBhcmFtOjpJTkZPICAgID8gJ2knIDoKKyAgICAgICAgICAgICAgICAgICAgICAgaS5raW5kKCkgPT0gQzJQYXJhbTo6VFVOSU5HICA/ICd0JyA6CisgICAgICAgICAgICAgICAgICAgICAgIGkua2luZCgpID09IEMyUGFyYW06OlNFVFRJTkcgPyAncycgOgorICAgICAgICAgICAgICAgICAgICAgICBpLmtpbmQoKSA9PSBDMlBhcmFtOjpOT05FICAgID8gJy0nIDogJz8nKQorICAgICAgICAgICAgKyBhdHRyaWJQYXJhbUNvcmVJbmRleChpKTsKK30KKworc3RkOjpvc3RyZWFtJiBvcGVyYXRvcjw8KHN0ZDo6b3N0cmVhbSYgb3MsIGNvbnN0IEMyUGFyYW06OkNvcmVJbmRleCAmaSkgeworICAgIHJldHVybiBvcyA8PCAiUGFyYW06OkNvcmVJbmRleCgiIDw8IGF0dHJpYlBhcmFtQ29yZUluZGV4KGkpIDw8ICIpIjsKK30KKworc3RkOjpvc3RyZWFtJiBvcGVyYXRvcjw8KHN0ZDo6b3N0cmVhbSYgb3MsIGNvbnN0IEMyUGFyYW06OlR5cGUgJmkpIHsKKyAgICByZXR1cm4gb3MgPDwgU3RyaW5nUHJpbnRmKCJQYXJhbTo6VHlwZSglMDh4OiAiLCBpLnR5cGUoKSkKKyAgICAgICAgICAgIDw8IGF0dHJpYlBhcmFtSW5kZXgoaSwgZmFsc2UsIDApIDw8ICIpIjsKK30KKworc3RkOjpvc3RyZWFtJiBvcGVyYXRvcjw8KHN0ZDo6b3N0cmVhbSYgb3MsIGNvbnN0IEMyUGFyYW06OkluZGV4ICZpKSB7CisgICAgcmV0dXJuIG9zIDw8IFN0cmluZ1ByaW50ZigiUGFyYW06OkluZGV4KCUwOHg6ICIsICh1aW50MzJfdClpKQorICAgICAgICAgICAgPDwgYXR0cmliUGFyYW1JbmRleChpLCB0cnVlLCBpLnN0cmVhbSgpKSA8PCAiKSI7Cit9CisKK3N0YXRpYyBzdGQ6OnN0cmluZyBhdHRyaWJGaWVsZElkKGNvbnN0IF9DMkZpZWxkSWQgJmkpIHsKKyAgICByZXR1cm4gU3RyaW5nUHJpbnRmKCJGaWVsZChAJTAyeCslMDJ4KSIsCisgICAgICAgICAgICBfQzJQYXJhbUluc3BlY3Rvcjo6R2V0T2Zmc2V0KGkpLAorICAgICAgICAgICAgX0MyUGFyYW1JbnNwZWN0b3I6OkdldFNpemUoaSkpOworfQorCisKK3N0ZDo6b3N0cmVhbSYgb3BlcmF0b3I8PChzdGQ6Om9zdHJlYW0mIG9zLCBjb25zdCBfQzJGaWVsZElkICZpKSB7CisgICAgcmV0dXJuIG9zIDw8ICI8IiA8PCBhdHRyaWJGaWVsZElkKGkpIDw8ICI+IjsKK30KKworCitzdGQ6Om9zdHJlYW0mIG9wZXJhdG9yPDwoc3RkOjpvc3RyZWFtJiBvcywgY29uc3QgQzJGaWVsZERlc2NyaXB0b3IgJmkpIHsKKyAgICBvcyA8PCBhdHRyaWJGaWVsZElkKF9DMlBhcmFtSW5zcGVjdG9yOjpHZXRGaWVsZChpKSkgPDwgIiAiOworICAgIGlmIChpLm5hbWVkVmFsdWVzKCkuc2l6ZSgpKSB7CisgICAgICAgIG9zIDw8ICJlbnVtICI7CisgICAgfQorICAgIHJldHVybiBvcyA8PCBhc1N0cmluZyhpLnR5cGUoKSkgPDwgIiAiIDw8IGkubmFtZSgpCisgICAgICAgICAgICA8PCBTdHJpbmdQcmludGYoIlslenVdIiwgaS5leHRlbnQoKSk7Cit9CisKKworc3RkOjpvc3RyZWFtJiBvcGVyYXRvcjw8KHN0ZDo6b3N0cmVhbSYgb3MsIGNvbnN0IEMyUGFyYW1GaWVsZCAmaSkgeworICAgIG9zIDw8ICI8IiA8PCBDMlBhcmFtOjpJbmRleChfQzJQYXJhbUluc3BlY3Rvcjo6R2V0SW5kZXgoaSkpCisgICAgICAgICAgICA8PCBTdHJpbmdQcmludGYoIjo6RmllbGQoQCUwMngrJTAyeCk+IiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBfQzJQYXJhbUluc3BlY3Rvcjo6R2V0T2Zmc2V0KGkpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9DMlBhcmFtSW5zcGVjdG9yOjpHZXRTaXplKGkpKTsKKyAgICByZXR1cm4gb3M7Cit9CisKKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gX0MyRmllbGRWYWx1ZUhlbHBlciAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCitzdGQ6Om9zdHJlYW0mIF9DMkZpZWxkVmFsdWVIZWxwZXI8Y2hhcj46OnB1dChzdGQ6Om9zdHJlYW0gJm9zLCBjb25zdCBDMlZhbHVlOjpQcmltaXRpdmUgJnApIHsKKyAgICBpZiAoaXNwcmludChwLmkzMikpIHsKKyAgICAgICAgcmV0dXJuIG9zIDw8IFN0cmluZ1ByaW50ZigiJyVjJyIsIHAuaTMyKTsKKyAgICB9IGVsc2UgeworICAgICAgICByZXR1cm4gb3MgPDwgU3RyaW5nUHJpbnRmKCInXFx4JTAyeCciLCAodWludDMyX3QpcC5pMzIpOworICAgIH0KK30KKworc3RkOjpvc3RyZWFtJiBfQzJGaWVsZFZhbHVlSGVscGVyPHVpbnQ4X3Q+OjpwdXQoc3RkOjpvc3RyZWFtICZvcywgY29uc3QgQzJWYWx1ZTo6UHJpbWl0aXZlICZwKSB7CisgICAgcmV0dXJuIG9zIDw8IFN0cmluZ1ByaW50ZigiMHglMDJ4IiwgcC51MzIpOworfQorCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tIEMyRmllbGRTdXBwb3J0ZWRWYWx1ZXNIZWxwZXIgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPgorc3RkOjpvc3RyZWFtJiBvcGVyYXRvcjw8KHN0ZDo6b3N0cmVhbSAmb3MsIGNvbnN0IGMyX2NudHJfdDxUPiAmdikgeworICAgIHJldHVybiBvcyA8PCAiY3RyKCIgPDwgdi5wZWVrdSgpIDw8ICIpIjsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgVD4KK3N0ZDo6b3N0cmVhbSYgb3BlcmF0b3I8PChzdGQ6Om9zdHJlYW0mIG9zLCBjb25zdCBDMlN1cHBvcnRlZFJhbmdlPFQ+ICZpKSB7CisgICAgb3MgPDwgIlJhbmdlKCI7CisgICAgX0MyRmllbGRWYWx1ZUhlbHBlcjxUPjo6cHV0KG9zLCBpLm1pbigpKTsKKyAgICBvcyA8PCAiLi4iOworICAgIF9DMkZpZWxkVmFsdWVIZWxwZXI8VD46OnB1dChvcywgaS5tYXgoKSk7CisgICAgb3MgPDwgIiAqPSAiIDw8IGkubnVtKCkgPDwgIiAvPSAiIDw8IGkuZGVub20oKSA8PCAiICs9ICIgPDwgaS5zdGVwKCkgPDwgIikiOworICAgIHJldHVybiBvczsKK30KK3RlbXBsYXRlIHN0ZDo6b3N0cmVhbSYgb3BlcmF0b3I8PChzdGQ6Om9zdHJlYW0mIG9zLCBjb25zdCBDMlN1cHBvcnRlZFJhbmdlPGNoYXI+ICZpKTsKK3RlbXBsYXRlIHN0ZDo6b3N0cmVhbSYgb3BlcmF0b3I8PChzdGQ6Om9zdHJlYW0mIG9zLCBjb25zdCBDMlN1cHBvcnRlZFJhbmdlPHVpbnQ4X3Q+ICZpKTsKK3RlbXBsYXRlIHN0ZDo6b3N0cmVhbSYgb3BlcmF0b3I8PChzdGQ6Om9zdHJlYW0mIG9zLCBjb25zdCBDMlN1cHBvcnRlZFJhbmdlPGludDMyX3Q+ICZpKTsKK3RlbXBsYXRlIHN0ZDo6b3N0cmVhbSYgb3BlcmF0b3I8PChzdGQ6Om9zdHJlYW0mIG9zLCBjb25zdCBDMlN1cHBvcnRlZFJhbmdlPHVpbnQzMl90PiAmaSk7CisvL3RlbXBsYXRlIHN0ZDo6b3N0cmVhbSYgb3BlcmF0b3I8PChzdGQ6Om9zdHJlYW0mIG9zLCBjb25zdCBDMlN1cHBvcnRlZFJhbmdlPGMyX2NudHIzMl90PiAmaSk7Cit0ZW1wbGF0ZSBzdGQ6Om9zdHJlYW0mIG9wZXJhdG9yPDwoc3RkOjpvc3RyZWFtJiBvcywgY29uc3QgQzJTdXBwb3J0ZWRSYW5nZTxpbnQ2NF90PiAmaSk7Cit0ZW1wbGF0ZSBzdGQ6Om9zdHJlYW0mIG9wZXJhdG9yPDwoc3RkOjpvc3RyZWFtJiBvcywgY29uc3QgQzJTdXBwb3J0ZWRSYW5nZTx1aW50NjRfdD4gJmkpOworLy90ZW1wbGF0ZSBzdGQ6Om9zdHJlYW0mIG9wZXJhdG9yPDwoc3RkOjpvc3RyZWFtJiBvcywgY29uc3QgQzJTdXBwb3J0ZWRSYW5nZTxjMl9jbnRyNjRfdD4gJmkpOwordGVtcGxhdGUgc3RkOjpvc3RyZWFtJiBvcGVyYXRvcjw8KHN0ZDo6b3N0cmVhbSYgb3MsIGNvbnN0IEMyU3VwcG9ydGVkUmFuZ2U8ZmxvYXQ+ICZpKTsKKwordGVtcGxhdGU8dHlwZW5hbWUgVD4KK3N0ZDo6b3N0cmVhbSYgb3BlcmF0b3I8PChzdGQ6Om9zdHJlYW0mIG9zLCBjb25zdCBDMlN1cHBvcnRlZEZsYWdzPFQ+ICZpKSB7CisgICAgb3MgPDwgIkZsYWdzWyI7CisgICAgaWYgKCFpLmlzRW1wdHkoKSkgeworICAgICAgICBvcyA8PCAibWluPSI7CisgICAgICAgIF9DMkZpZWxkVmFsdWVIZWxwZXI8VD46OnB1dChvcywgaS5taW4oKSk7CisgICAgfQorICAgIGJvb2wgY29tbWEgPSBmYWxzZTsKKyAgICBmb3IgKGNvbnN0IFQgJnYgOiBpLmZsYWdzKCkpIHsKKyAgICAgICAgaWYgKGNvbW1hKSB7CisgICAgICAgICAgICBvcyA8PCAiLCAiOworICAgICAgICB9CisgICAgICAgIF9DMkZpZWxkVmFsdWVIZWxwZXI8VD46OnB1dChvcywgdik7CisgICAgICAgIGNvbW1hID0gdHJ1ZTsKKyAgICB9CisgICAgb3MgPDwgIl0iOworICAgIHJldHVybiBvczsKK30KK3RlbXBsYXRlIHN0ZDo6b3N0cmVhbSYgb3BlcmF0b3I8PChzdGQ6Om9zdHJlYW0mIG9zLCBjb25zdCBDMlN1cHBvcnRlZEZsYWdzPGNoYXI+ICZpKTsKK3RlbXBsYXRlIHN0ZDo6b3N0cmVhbSYgb3BlcmF0b3I8PChzdGQ6Om9zdHJlYW0mIG9zLCBjb25zdCBDMlN1cHBvcnRlZEZsYWdzPHVpbnQ4X3Q+ICZpKTsKK3RlbXBsYXRlIHN0ZDo6b3N0cmVhbSYgb3BlcmF0b3I8PChzdGQ6Om9zdHJlYW0mIG9zLCBjb25zdCBDMlN1cHBvcnRlZEZsYWdzPGludDMyX3Q+ICZpKTsKK3RlbXBsYXRlIHN0ZDo6b3N0cmVhbSYgb3BlcmF0b3I8PChzdGQ6Om9zdHJlYW0mIG9zLCBjb25zdCBDMlN1cHBvcnRlZEZsYWdzPHVpbnQzMl90PiAmaSk7CisvL3RlbXBsYXRlIHN0ZDo6b3N0cmVhbSYgb3BlcmF0b3I8PChzdGQ6Om9zdHJlYW0mIG9zLCBjb25zdCBDMlN1cHBvcnRlZEZsYWdzPGMyX2NudHIzMl90PiAmaSk7Cit0ZW1wbGF0ZSBzdGQ6Om9zdHJlYW0mIG9wZXJhdG9yPDwoc3RkOjpvc3RyZWFtJiBvcywgY29uc3QgQzJTdXBwb3J0ZWRGbGFnczxpbnQ2NF90PiAmaSk7Cit0ZW1wbGF0ZSBzdGQ6Om9zdHJlYW0mIG9wZXJhdG9yPDwoc3RkOjpvc3RyZWFtJiBvcywgY29uc3QgQzJTdXBwb3J0ZWRGbGFnczx1aW50NjRfdD4gJmkpOworLy90ZW1wbGF0ZSBzdGQ6Om9zdHJlYW0mIG9wZXJhdG9yPDwoc3RkOjpvc3RyZWFtJiBvcywgY29uc3QgQzJTdXBwb3J0ZWRGbGFnczxjMl9jbnRyNjRfdD4gJmkpOwordGVtcGxhdGUgc3RkOjpvc3RyZWFtJiBvcGVyYXRvcjw8KHN0ZDo6b3N0cmVhbSYgb3MsIGNvbnN0IEMyU3VwcG9ydGVkRmxhZ3M8ZmxvYXQ+ICZpKTsKKwordGVtcGxhdGU8dHlwZW5hbWUgVD4KK3N0ZDo6b3N0cmVhbSYgb3BlcmF0b3I8PChzdGQ6Om9zdHJlYW0mIG9zLCBjb25zdCBDMlN1cHBvcnRlZFZhbHVlU2V0PFQ+ICZpKSB7CisgICAgb3MgPDwgIlZhbHVlc1siOworICAgIGJvb2wgY29tbWEgPSBmYWxzZTsKKyAgICBmb3IgKGNvbnN0IFQgJnYgOiBpLnZhbHVlcygpKSB7CisgICAgICAgIGlmIChjb21tYSkgeworICAgICAgICAgICAgb3MgPDwgIiwgIjsKKyAgICAgICAgfQorICAgICAgICBfQzJGaWVsZFZhbHVlSGVscGVyPFQ+OjpwdXQob3MsIHYpOworICAgICAgICBjb21tYSA9IHRydWU7CisgICAgfQorICAgIG9zIDw8ICJdIjsKKyAgICByZXR1cm4gb3M7Cit9Cit0ZW1wbGF0ZSBzdGQ6Om9zdHJlYW0mIG9wZXJhdG9yPDwoc3RkOjpvc3RyZWFtJiBvcywgY29uc3QgQzJTdXBwb3J0ZWRWYWx1ZVNldDxjaGFyPiAmaSk7Cit0ZW1wbGF0ZSBzdGQ6Om9zdHJlYW0mIG9wZXJhdG9yPDwoc3RkOjpvc3RyZWFtJiBvcywgY29uc3QgQzJTdXBwb3J0ZWRWYWx1ZVNldDx1aW50OF90PiAmaSk7Cit0ZW1wbGF0ZSBzdGQ6Om9zdHJlYW0mIG9wZXJhdG9yPDwoc3RkOjpvc3RyZWFtJiBvcywgY29uc3QgQzJTdXBwb3J0ZWRWYWx1ZVNldDxpbnQzMl90PiAmaSk7Cit0ZW1wbGF0ZSBzdGQ6Om9zdHJlYW0mIG9wZXJhdG9yPDwoc3RkOjpvc3RyZWFtJiBvcywgY29uc3QgQzJTdXBwb3J0ZWRWYWx1ZVNldDx1aW50MzJfdD4gJmkpOworLy90ZW1wbGF0ZSBzdGQ6Om9zdHJlYW0mIG9wZXJhdG9yPDwoc3RkOjpvc3RyZWFtJiBvcywgY29uc3QgQzJTdXBwb3J0ZWRWYWx1ZVNldDxjMl9jbnRyMzJfdD4gJmkpOwordGVtcGxhdGUgc3RkOjpvc3RyZWFtJiBvcGVyYXRvcjw8KHN0ZDo6b3N0cmVhbSYgb3MsIGNvbnN0IEMyU3VwcG9ydGVkVmFsdWVTZXQ8aW50NjRfdD4gJmkpOwordGVtcGxhdGUgc3RkOjpvc3RyZWFtJiBvcGVyYXRvcjw8KHN0ZDo6b3N0cmVhbSYgb3MsIGNvbnN0IEMyU3VwcG9ydGVkVmFsdWVTZXQ8dWludDY0X3Q+ICZpKTsKKy8vdGVtcGxhdGUgc3RkOjpvc3RyZWFtJiBvcGVyYXRvcjw8KHN0ZDo6b3N0cmVhbSYgb3MsIGNvbnN0IEMyU3VwcG9ydGVkVmFsdWVTZXQ8YzJfY250cjY0X3Q+ICZpKTsKK3RlbXBsYXRlIHN0ZDo6b3N0cmVhbSYgb3BlcmF0b3I8PChzdGQ6Om9zdHJlYW0mIG9zLCBjb25zdCBDMlN1cHBvcnRlZFZhbHVlU2V0PGZsb2F0PiAmaSk7CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+CitzdHJ1Y3QgQzJGaWVsZFN1cHBvcnRlZFZhbHVlc0hlbHBlcjxUPjo6SW1wbCB7CisgICAgSW1wbChjb25zdCBDMkZpZWxkU3VwcG9ydGVkVmFsdWVzICZ2YWx1ZXMpOworCitwcml2YXRlOgorICAgIHR5cGVkZWYgdHlwZW5hbWUgX0MyRmllbGRWYWx1ZUhlbHBlcjxUPjo6VmFsdWVUeXBlIFZhbHVlVHlwZTsKKyAgICBDMkZpZWxkU3VwcG9ydGVkVmFsdWVzOjp0eXBlX3QgX21UeXBlOworICAgIEMyU3VwcG9ydGVkUmFuZ2U8VmFsdWVUeXBlPiBfbVJhbmdlOworICAgIEMyU3VwcG9ydGVkVmFsdWVTZXQ8VmFsdWVUeXBlPiBfbVZhbHVlczsKKyAgICBDMlN1cHBvcnRlZEZsYWdzPFZhbHVlVHlwZT4gX21GbGFnczsKKworcHVibGljOgorLy8gICAgZnJpZW5kIHN0ZDo6b3N0cmVhbSYgb3BlcmF0b3I8PCA8VD4oc3RkOjpvc3RyZWFtJiBvcywgY29uc3QgQzJGaWVsZFN1cHBvcnRlZFZhbHVlc0hlbHBlcjxUPjo6SW1wbCAmaSk7CisvLyAgICBmcmllbmQgc3RkOjpvc3RyZWFtJiBvcGVyYXRvcjw8KHN0ZDo6b3N0cmVhbSYgb3MsIGNvbnN0IEltcGwgJmkpOworICAgIHN0ZDo6b3N0cmVhbSYgc3RyZWFtT3V0KHN0ZDo6b3N0cmVhbSYgb3MpIGNvbnN0OworfTsKKwordGVtcGxhdGU8dHlwZW5hbWUgVD4KK3N0ZDo6b3N0cmVhbSYgQzJGaWVsZFN1cHBvcnRlZFZhbHVlc0hlbHBlcjxUPjo6SW1wbDo6c3RyZWFtT3V0KHN0ZDo6b3N0cmVhbSYgb3MpIGNvbnN0IHsKKyAgICBpZiAoX21UeXBlID09IEMyRmllbGRTdXBwb3J0ZWRWYWx1ZXM6OlJBTkdFKSB7CisgICAgICAgIG9zIDw8IF9tUmFuZ2U7CisgICAgfSBlbHNlIGlmIChfbVR5cGUgPT0gQzJGaWVsZFN1cHBvcnRlZFZhbHVlczo6VkFMVUVTKSB7CisgICAgICAgIG9zIDw8IF9tVmFsdWVzOworICAgIH0gZWxzZSBpZiAoX21UeXBlID09IEMyRmllbGRTdXBwb3J0ZWRWYWx1ZXM6OkZMQUdTKSB7CisgICAgICAgIG9zIDw8IF9tRmxhZ3M7CisgICAgfSBlbHNlIHsKKyAgICAgICAgb3MgPDwgIlVua25vd24gRlNWIHR5cGU6ICIgPDwgKHVpbnQzMl90KV9tVHlwZTsKKyAgICB9CisgICAgcmV0dXJuIG9zOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPgorc3RkOjpvc3RyZWFtJiBvcGVyYXRvcjw8KHN0ZDo6b3N0cmVhbSYgb3MsIGNvbnN0IEMyRmllbGRTdXBwb3J0ZWRWYWx1ZXNIZWxwZXI8VD4gJmkpIHsKKyAgICByZXR1cm4gaS5fbUltcGwtPnN0cmVhbU91dChvcyk7Cit9Cit0ZW1wbGF0ZSBzdGQ6Om9zdHJlYW0mIG9wZXJhdG9yPDwoc3RkOjpvc3RyZWFtJiBvcywgY29uc3QgQzJGaWVsZFN1cHBvcnRlZFZhbHVlc0hlbHBlcjxjaGFyPiAmaSk7Cit0ZW1wbGF0ZSBzdGQ6Om9zdHJlYW0mIG9wZXJhdG9yPDwoc3RkOjpvc3RyZWFtJiBvcywgY29uc3QgQzJGaWVsZFN1cHBvcnRlZFZhbHVlc0hlbHBlcjx1aW50OF90PiAmaSk7Cit0ZW1wbGF0ZSBzdGQ6Om9zdHJlYW0mIG9wZXJhdG9yPDwoc3RkOjpvc3RyZWFtJiBvcywgY29uc3QgQzJGaWVsZFN1cHBvcnRlZFZhbHVlc0hlbHBlcjxpbnQzMl90PiAmaSk7Cit0ZW1wbGF0ZSBzdGQ6Om9zdHJlYW0mIG9wZXJhdG9yPDwoc3RkOjpvc3RyZWFtJiBvcywgY29uc3QgQzJGaWVsZFN1cHBvcnRlZFZhbHVlc0hlbHBlcjx1aW50MzJfdD4gJmkpOworLy90ZW1wbGF0ZSBzdGQ6Om9zdHJlYW0mIG9wZXJhdG9yPDwoc3RkOjpvc3RyZWFtJiBvcywgY29uc3QgQzJGaWVsZFN1cHBvcnRlZFZhbHVlc0hlbHBlcjxjMl9jbnRyMzJfdD4gJmkpOwordGVtcGxhdGUgc3RkOjpvc3RyZWFtJiBvcGVyYXRvcjw8KHN0ZDo6b3N0cmVhbSYgb3MsIGNvbnN0IEMyRmllbGRTdXBwb3J0ZWRWYWx1ZXNIZWxwZXI8aW50NjRfdD4gJmkpOwordGVtcGxhdGUgc3RkOjpvc3RyZWFtJiBvcGVyYXRvcjw8KHN0ZDo6b3N0cmVhbSYgb3MsIGNvbnN0IEMyRmllbGRTdXBwb3J0ZWRWYWx1ZXNIZWxwZXI8dWludDY0X3Q+ICZpKTsKKy8vdGVtcGxhdGUgc3RkOjpvc3RyZWFtJiBvcGVyYXRvcjw8KHN0ZDo6b3N0cmVhbSYgb3MsIGNvbnN0IEMyRmllbGRTdXBwb3J0ZWRWYWx1ZXNIZWxwZXI8YzJfY250cjY0X3Q+ICZpKTsKK3RlbXBsYXRlIHN0ZDo6b3N0cmVhbSYgb3BlcmF0b3I8PChzdGQ6Om9zdHJlYW0mIG9zLCBjb25zdCBDMkZpZWxkU3VwcG9ydGVkVmFsdWVzSGVscGVyPGZsb2F0PiAmaSk7CisKZGlmZiAtLWdpdCBhL21lZGlhL2NvZGVjMi92bmRrL3V0aWwvQzJJbnRlcmZhY2VIZWxwZXIuY3BwIGIvbWVkaWEvY29kZWMyL3ZuZGsvdXRpbC9DMkludGVyZmFjZUhlbHBlci5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTQ0N2ZiZQotLS0gL2Rldi9udWxsCisrKyBiL21lZGlhL2NvZGVjMi92bmRrL3V0aWwvQzJJbnRlcmZhY2VIZWxwZXIuY3BwCkBAIC0wLDAgKzEsODQxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE4IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KKworI2luY2x1ZGUgPEMyRGVidWcuaD4KKyNpbmNsdWRlIDxDMlBhcmFtSW50ZXJuYWwuaD4KKyNpbmNsdWRlIDx1dGlsL0MySW50ZXJmYWNlSGVscGVyLmg+CisKKyNpbmNsdWRlIDxhbmRyb2lkLWJhc2Uvc3RyaW5ncHJpbnRmLmg+CisKK3VzaW5nIDo6YW5kcm9pZDo6YmFzZTo6U3RyaW5nUHJpbnRmOworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gUmVmbGVjdG9ySGVscGVyIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCit2b2lkIEMyUmVmbGVjdG9ySGVscGVyOjphZGRTdHJ1Y3REZXNjcmlwdG9ycygKKyAgICAgICAgc3RkOjp2ZWN0b3I8QzJTdHJ1Y3REZXNjcmlwdG9yPiAmc3RydWN0cywgX1R1cGxlPD4gKikgeworICAgIHN0ZDo6bG9ja19ndWFyZDxzdGQ6Om11dGV4PiBsb2NrKF9tTXV0ZXgpOworICAgIGZvciAoQzJTdHJ1Y3REZXNjcmlwdG9yICZzdHJ1a3QgOiBzdHJ1Y3RzKSB7CisgICAgICAgIC8vIFRPRE86IGNoZWNrIGlmIHN0cnVjdHVyZSBkZXNjcmlwdGlvbnMgY29uZmxpY3Qgd2l0aCBleGlzdGluZyBvbmVzCisgICAgICAgIGFkZFN0cnVjdERlc2NyaXB0b3Ioc3RkOjptb3ZlKHN0cnVrdCkpOworICAgIH0KK30KKworc3RkOjp1bmlxdWVfcHRyPEMyU3RydWN0RGVzY3JpcHRvcj4KK0MyUmVmbGVjdG9ySGVscGVyOjpkZXNjcmliZShDMlBhcmFtOjpDb3JlSW5kZXggcGFyYW1JbmRleCkgY29uc3QgeworICAgIHN0ZDo6bG9ja19ndWFyZDxzdGQ6Om11dGV4PiBsb2NrKF9tTXV0ZXgpOworICAgIGF1dG8gaXQgPSBfbVN0cnVjdHMuZmluZChwYXJhbUluZGV4KTsKKyAgICBpZiAoaXQgPT0gX21TdHJ1Y3RzLmVuZCgpKSB7CisgICAgICAgIHJldHVybiBudWxscHRyOworICAgIH0gZWxzZSB7CisgICAgICAgIHJldHVybiBzdGQ6Om1ha2VfdW5pcXVlPEMyU3RydWN0RGVzY3JpcHRvcj4oaXQtPnNlY29uZCk7CisgICAgfQorfTsKKwordm9pZCBDMlJlZmxlY3RvckhlbHBlcjo6YWRkU3RydWN0RGVzY3JpcHRvcihDMlN0cnVjdERlc2NyaXB0b3IgJiZzdHJ1a3QpIHsKKyAgICBpZiAoX21TdHJ1Y3RzLmZpbmQoc3RydWt0LmNvcmVJbmRleCgpKSAhPSBfbVN0cnVjdHMuZW5kKCkpIHsKKyAgICAgICAgLy8gYWxyZWFkeSBhZGRlZAorICAgICAgICAvLyBUT0RPOiB2YWxpZGF0ZSB0aGF0IGRlc2NyaXB0b3IgbWF0Y2hlcyBzdG9yZWQgZGVzY3JpcHRvcgorICAgIH0KKyAgICAvLyB2YWxpZGF0ZSB0aGF0IGFsbCBzdHJ1Y3QgZmllbGRzIGFyZSBrbm93biB0byB0aGlzIHJlZmxlY3RvcgorICAgIGZvciAoY29uc3QgQzJGaWVsZERlc2NyaXB0b3IgJmZkIDogc3RydWt0KSB7CisgICAgICAgIGlmIChmZC50eXBlKCkgJiBDMkZpZWxkRGVzY3JpcHRvcjo6U1RSVUNUX0ZMQUcpIHsKKyAgICAgICAgICAgIEMyUGFyYW06OkNvcmVJbmRleCBjb3JlSW5kZXggPSBmZC50eXBlKCkgJn4gQzJGaWVsZERlc2NyaXB0b3I6OlNUUlVDVF9GTEFHOworICAgICAgICAgICAgaWYgKF9tU3RydWN0cy5maW5kKGNvcmVJbmRleCkgPT0gX21TdHJ1Y3RzLmVuZCgpKSB7CisgICAgICAgICAgICAgICAgQzJfTE9HKElORk8pIDw8ICJtaXNzaW5nIHN0cnVjdCBkZXNjcmlwdG9yICMiIDw8IGNvcmVJbmRleCA8PCAiIGZvciBmaWVsZCAiCisgICAgICAgICAgICAgICAgICAgICAgICA8PCBmZC5uYW1lKCkgPDwgIiBvZiBzdHJ1Y3QgIyIgPDwgc3RydWt0LmNvcmVJbmRleCgpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorICAgIF9tU3RydWN0cy5lbXBsYWNlKHN0cnVrdC5jb3JlSW5kZXgoKSwgc3RydWt0KTsKK30KKworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIFBhcmFtSGVscGVyIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworY2xhc3MgQzJJbnRlcmZhY2VIZWxwZXI6OlBhcmFtSGVscGVyOjpJbXBsIHsKK3B1YmxpYzoKKyAgICBJbXBsKFBhcmFtUmVmIHBhcmFtLCBDMlN0cmluZ0xpdGVyYWwgbmFtZSwgQzJTdHJ1Y3REZXNjcmlwdG9yICYmc3RydWt0KQorICAgICAgICA6IG1QYXJhbShwYXJhbSksIG1OYW1lKG5hbWUpLCBfbVN0cnVjdChzdHJ1a3QpIHsgfQorCisgICAgSW1wbChJbXBsJiYpID0gZGVmYXVsdDsKKworICAgIHZvaWQgYWRkRG93bkRlcGVuZGVuY3koQzJQYXJhbTo6SW5kZXggaW5kZXgpIHsKKyAgICAgICAgbURvd25EZXBlbmRlbmNpZXMucHVzaF9iYWNrKGluZGV4KTsKKyAgICB9CisKKyAgICBDMkludGVyZmFjZUhlbHBlcjo6UGFyYW1IZWxwZXI6OmF0dHJpYl90JiBhdHRyaWIoKSB7CisgICAgICAgIHJldHVybiBtQXR0cmliOworICAgIH0KKworICAgIHZvaWQgYnVpbGQoKSB7CisgICAgICAgIC8vIG1vdmUgZGVwZW5kZW5jaWVzIGludG8gZGVzY3JpcHRvcgorICAgICAgICBtRGVzY3JpcHRvciA9IHN0ZDo6bWFrZV9zaGFyZWQ8QzJQYXJhbURlc2NyaXB0b3I+KAorICAgICAgICAgICAgICAgIGluZGV4KCksIChDMlBhcmFtRGVzY3JpcHRvcjo6YXR0cmliX3QpbUF0dHJpYiwKKyAgICAgICAgICAgICAgICBzdGQ6Om1vdmUobU5hbWUpLCBzdGQ6Om1vdmUobURlcGVuZGVuY2llcykpOworICAgIH0KKworICAgIHZvaWQgY3JlYXRlRmllbGRzQW5kU3VwcG9ydGVkVmFsdWVzKGNvbnN0IHN0ZDo6c2hhcmVkX3B0cjxDMlBhcmFtUmVmbGVjdG9yPiAmcmVmbGVjdG9yKSB7CisgICAgICAgIGZvciAoY29uc3QgQzJGaWVsZFV0aWxzOjpJbmZvICZmIDoKKyAgICAgICAgICAgICAgICBDMkZpZWxkVXRpbHM6OmVudW1lcmF0ZUZpZWxkcygqbURlZmF1bHRWYWx1ZSwgcmVmbGVjdG9yKSkgeworICAgICAgICAgICAgaWYgKCFmLmlzQXJpdGhtZXRpYygpKSB7CisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBzdGQ6OnVuaXF1ZV9wdHI8QzJGaWVsZFN1cHBvcnRlZFZhbHVlcz4gZnN2UG9pbnRlcjsKKworICAgICAgICAgICAgLy8gY3JlYXRlIGEgYnJlYWthYmxlIHN0cnVjdHVyZQorICAgICAgICAgICAgZG8geworICAgICAgICAgICAgICAgIEMyRmllbGRTdXBwb3J0ZWRWYWx1ZXMgZnN2OworICAgICAgICAgICAgICAgIHN3aXRjaCAoZi50eXBlKCkpIHsKKyAgICAgICAgICAgICAgICAgICAgY2FzZSBDMkZpZWxkRGVzY3JpcHRvcjo6SU5UMzI6ICBmc3YgPSBDMlN1cHBvcnRlZFJhbmdlPGludDMyX3Q+OjpBbnkoKTsgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIGNhc2UgQzJGaWVsZERlc2NyaXB0b3I6OlVJTlQzMjogZnN2ID0gQzJTdXBwb3J0ZWRSYW5nZTx1aW50MzJfdD46OkFueSgpOyBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgY2FzZSBDMkZpZWxkRGVzY3JpcHRvcjo6SU5UNjQ6ICBmc3YgPSBDMlN1cHBvcnRlZFJhbmdlPGludDY0X3Q+OjpBbnkoKTsgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIGNhc2UgQzJGaWVsZERlc2NyaXB0b3I6OlVJTlQ2NDogZnN2ID0gQzJTdXBwb3J0ZWRSYW5nZTx1aW50NjRfdD46OkFueSgpOyBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgY2FzZSBDMkZpZWxkRGVzY3JpcHRvcjo6RkxPQVQ6ICBmc3YgPSBDMlN1cHBvcnRlZFJhbmdlPGZsb2F0Pjo6QW55KCk7IGJyZWFrOworICAgICAgICAgICAgICAgICAgICBjYXNlIEMyRmllbGREZXNjcmlwdG9yOjpCTE9COiAgIGZzdiA9IEMyU3VwcG9ydGVkUmFuZ2U8dWludDhfdD46OkFueSgpOyBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgY2FzZSBDMkZpZWxkRGVzY3JpcHRvcjo6U1RSSU5HOiBmc3YgPSBDMlN1cHBvcnRlZFJhbmdlPGNoYXI+OjpBbnkoKTsgYnJlYWs7CisgICAgICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICAgICAgY29udGludWU7IC8vIGJyZWFrIG91dCBvZiBkbyB7fSB3aGlsZQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBmc3ZQb2ludGVyID0gc3RkOjptYWtlX3VuaXF1ZTxDMkZpZWxkU3VwcG9ydGVkVmFsdWVzPihmc3YpOworICAgICAgICAgICAgfSB3aGlsZSAoZmFsc2UpOworCisgICAgICAgICAgICBtRmllbGRzLmVtcGxhY2VfaGludCgKKyAgICAgICAgICAgICAgICAgICAgbUZpZWxkcy5lbmQoKSwKKyAgICAgICAgICAgICAgICAgICAgX0MyRmllbGRJZChmLm9mZnNldCgpLCBmLnNpemUoKSksCisgICAgICAgICAgICAgICAgICAgIHN0ZDo6bWFrZV9zaGFyZWQ8RmllbGRIZWxwZXI+KAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1QYXJhbSwgX0MyRmllbGRJZChmLm9mZnNldCgpLCBmLnNpemUoKSksIHN0ZDo6bW92ZShmc3ZQb2ludGVyKSkpOworICAgICAgICB9CisgICAgfQorCisgICAgLyoqCisgICAgICogRmluZHMgYSBmaWVsZCBkZXNjcmlwdG9yLgorICAgICAqLworICAgIHN0ZDo6c2hhcmVkX3B0cjxGaWVsZEhlbHBlcj4gZmluZEZpZWxkKHNpemVfdCBiYXNlT2Zmcywgc2l6ZV90IGJhc2VTaXplKSBjb25zdCB7CisgICAgICAgIGF1dG8gaXQgPSBtRmllbGRzLmZpbmQoX0MyRmllbGRJZChiYXNlT2ZmcywgYmFzZVNpemUpKTsKKyAgICAgICAgaWYgKGl0ID09IG1GaWVsZHMuZW5kKCkpIHsKKyAgICAgICAgICAgIHJldHVybiBudWxscHRyOworICAgICAgICB9CisgICAgICAgIHJldHVybiBpdC0+c2Vjb25kOworICAgIH0KKworICAgIGNvbnN0IHN0ZDo6dmVjdG9yPFBhcmFtUmVmPiBnZXREZXBlbmRlbmNpZXNBc1JlZnMoKSBjb25zdCB7CisgICAgICAgIHJldHVybiBtRGVwZW5kZW5jaWVzQXNSZWZzOworICAgIH0KKworICAgIHN0ZDo6c2hhcmVkX3B0cjxjb25zdCBDMlBhcmFtRGVzY3JpcHRvcj4gZ2V0RGVzY3JpcHRvcigpIGNvbnN0IHsKKyAgICAgICAgcmV0dXJuIG1EZXNjcmlwdG9yOworICAgIH0KKworICAgIGNvbnN0IHN0ZDo6dmVjdG9yPEMyUGFyYW06OkluZGV4PiBnZXREb3duRGVwZW5kZW5jaWVzKCkgY29uc3QgeworICAgICAgICByZXR1cm4gbURvd25EZXBlbmRlbmNpZXM7CisgICAgfQorCisgICAgQzJQYXJhbTo6SW5kZXggaW5kZXgoKSBjb25zdCB7CisgICAgICAgIGlmICghbURlZmF1bHRWYWx1ZSkgeworICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICIlcyBtaXNzaW5nIGRlZmF1bHQgdmFsdWVcbiIsIG1OYW1lLmNfc3RyKCkpOworICAgICAgICB9CisgICAgICAgIHJldHVybiBtRGVmYXVsdFZhbHVlLT5pbmRleCgpOworICAgIH0KKworICAgIEMyU3RyaW5nIG5hbWUoKSBjb25zdCB7CisgICAgICAgIHJldHVybiBtTmFtZTsKKyAgICB9CisKKyAgICBjb25zdCBQYXJhbVJlZiByZWYoKSBjb25zdCB7CisgICAgICAgIHJldHVybiBtUGFyYW07CisgICAgfQorCisgICAgQzJTdHJ1Y3REZXNjcmlwdG9yIHJldHJpZXZlU3RydWN0RGVzY3JpcHRvcigpIHsKKyAgICAgICAgcmV0dXJuIHN0ZDo6bW92ZShfbVN0cnVjdCk7CisgICAgfQorCisgICAgdm9pZCBzZXREZWZhdWx0VmFsdWUoc3RkOjpzaGFyZWRfcHRyPEMyUGFyYW0+IGRlZmF1bHRfKSB7CisgICAgICAgIG1EZWZhdWx0VmFsdWUgPSBkZWZhdWx0XzsKKyAgICB9CisKKyAgICB2b2lkIHNldERlcGVuZGVuY2llcyhzdGQ6OnZlY3RvcjxDMlBhcmFtOjpJbmRleD4gaW5kaWNlcywgc3RkOjp2ZWN0b3I8UGFyYW1SZWY+IHJlZnMpIHsKKyAgICAgICAgbURlcGVuZGVuY2llcyA9IGluZGljZXM7CisgICAgICAgIG1EZXBlbmRlbmNpZXNBc1JlZnMgPSByZWZzOworICAgIH0KKworICAgIHZvaWQgc2V0RmllbGRzKHN0ZDo6dmVjdG9yPEMyUGFyYW1GaWVsZFZhbHVlcz4gJiZmaWVsZHMpIHsKKyAgICAgICAgLy8gZG8gbm90IGFsbG93IGFkZGluZyBmaWVsZHMgbXVsdGlwbGUgdGltZXMsIG9yIHRvIGNvbnN0IHZhbHVlcworICAgICAgICBpZiAoIW1GaWVsZHMuZW1wdHkoKSkgeworICAgICAgICAgICAgQzJfTE9HKEZBVEFMKSA8PCAiVHJ5aW5nIHRvIGFkZCBmaWVsZHMgdG8gcGFyYW0gIiA8PCBtTmFtZSA8PCAiIG11bHRpcGxlIHRpbWVzIjsKKyAgICAgICAgfSBlbHNlIGlmIChtQXR0cmliICYgYXR0cmliX3Q6OklTX0NPTlNUKSB7CisgICAgICAgICAgICBDMl9MT0coRkFUQUwpIDw8ICJUcnlpbmcgdG8gYWRkIGZpZWxkcyB0byBjb25zdCBwYXJhbSAiIDw8IG1OYW1lOworICAgICAgICB9CisKKyAgICAgICAgZm9yIChDMlBhcmFtRmllbGRWYWx1ZXMgJnBmdiA6IGZpZWxkcykgeworICAgICAgICAgICAgbUZpZWxkcy5lbXBsYWNlX2hpbnQoCisgICAgICAgICAgICAgICAgICAgIG1GaWVsZHMuZW5kKCksCisgICAgICAgICAgICAgICAgICAgIC8vIF9DMkZpZWxkSWQgY29uc3RydWN0b3IKKyAgICAgICAgICAgICAgICAgICAgX0MyUGFyYW1JbnNwZWN0b3I6OkdldEZpZWxkKHBmdi5wYXJhbU9yRmllbGQpLAorICAgICAgICAgICAgICAgICAgICAvLyBGaWVsZCBjb25zdHJ1Y3RvcgorICAgICAgICAgICAgICAgICAgICBzdGQ6Om1ha2Vfc2hhcmVkPEZpZWxkSGVscGVyPihtUGFyYW0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9DMlBhcmFtSW5zcGVjdG9yOjpHZXRGaWVsZChwZnYucGFyYW1PckZpZWxkKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RkOjptb3ZlKHBmdi52YWx1ZXMpKSk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICB2b2lkIHNldEdldHRlcihzdGQ6OmZ1bmN0aW9uPHN0ZDo6c2hhcmVkX3B0cjxDMlBhcmFtPihib29sKT4gZ2V0dGVyKSB7CisgICAgICAgIG1HZXR0ZXIgPSBnZXR0ZXI7CisgICAgfQorCisgICAgdm9pZCBzZXRTZXR0ZXIoc3RkOjpmdW5jdGlvbjxDMlIoY29uc3QgQzJQYXJhbSAqLCBib29sLCBib29sICosIEZhY3RvcnkgJik+IHNldHRlcikgeworICAgICAgICBtU2V0dGVyID0gc2V0dGVyOworICAgIH0KKworICAgIGMyX3N0YXR1c190IHRyeVNldCgKKyAgICAgICAgICAgIGNvbnN0IEMyUGFyYW0gKnZhbHVlLCBib29sIG1heUJsb2NrLCBib29sICpjaGFuZ2VkLCBGYWN0b3J5ICZmLAorICAgICAgICAgICAgc3RkOjp2ZWN0b3I8c3RkOjp1bmlxdWVfcHRyPEMyU2V0dGluZ1Jlc3VsdD4+KiBjb25zdCBmYWlsdXJlcykgeworICAgICAgICBDMlIgcmVzdWx0ID0gbVNldHRlcih2YWx1ZSwgbWF5QmxvY2ssIGNoYW5nZWQsIGYpOworICAgICAgICByZXR1cm4gcmVzdWx0LnJldHJpZXZlRmFpbHVyZXMoZmFpbHVyZXMpOworICAgIH0KKworICAgIGMyX3N0YXR1c190IHZhbGlkYXRlKGNvbnN0IHN0ZDo6c2hhcmVkX3B0cjxDMlBhcmFtUmVmbGVjdG9yPiAmcmVmbGVjdG9yKSB7CisgICAgICAgIGlmICghbVNldHRlciAmJiBtRmllbGRzLmVtcHR5KCkpIHsKKyAgICAgICAgICAgIEMyX0xPRyhXQVJOSU5HKSA8PCAiUGFyYW0gIiA8PCBtTmFtZSA8PCAiIGhhcyBubyBzZXR0ZXIsIG1ha2luZyBpdCBjb25zdCI7CisgICAgICAgICAgICAvLyBkZXBlbmRlbmNpZXMgYXJlIGVtcHR5IGluIHRoaXMgY2FzZQorICAgICAgICAgICAgbUF0dHJpYiB8PSBhdHRyaWJfdDo6SVNfQ09OU1Q7CisgICAgICAgIH0gZWxzZSBpZiAoIW1TZXR0ZXIpIHsKKyAgICAgICAgICAgIEMyX0xPRyhGQVRBTCkgPDwgIlBhcmFtICIgPDwgbU5hbWUgPDwgIiBoYXMgbm8gc2V0dGVyIjsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChtQXR0cmliICYgYXR0cmliX3Q6OklTX0NPTlNUKSB7CisgICAgICAgICAgICBjcmVhdGVGaWVsZHNBbmRTdXBwb3J0ZWRWYWx1ZXMocmVmbGVjdG9yKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIC8vIFRPRE86IHVwZGF0ZSBkZWZhdWx0IGJhc2VkIG9uIHNldHRlciBhbmQgdmVyaWZ5IHRoYXQgRlNWIGNvdmVycyB0aGUgdmFsdWVzCisgICAgICAgIH0KKworICAgICAgICBpZiAobUZpZWxkcy5lbXB0eSgpKSB7CisgICAgICAgICAgICBDMl9MT0coRkFUQUwpIDw8ICJQYXJhbSAiIDw8IG1OYW1lIDw8ICIgaGFzIG5vIGZpZWxkcyI7CisgICAgICAgIH0KKworICAgICAgICByZXR1cm4gQzJfT0s7CisgICAgfQorCisgICAgc3RkOjpzaGFyZWRfcHRyPEMyUGFyYW0+IHZhbHVlKCkgeworICAgICAgICByZXR1cm4gbVBhcmFtLmdldCgpOworICAgIH0KKworICAgIHN0ZDo6c2hhcmVkX3B0cjxjb25zdCBDMlBhcmFtPiB2YWx1ZSgpIGNvbnN0IHsKKyAgICAgICAgcmV0dXJuIG1QYXJhbS5nZXQoKTsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgdHlwZWRlZiBfQzJQYXJhbUluc3BlY3Rvcjo6YXR0cmliX3QgYXR0cmliX3Q7CisgICAgUGFyYW1SZWYgbVBhcmFtOworICAgIEMyU3RyaW5nIG1OYW1lOworICAgIEMyU3RydWN0RGVzY3JpcHRvciBfbVN0cnVjdDsKKyAgICBzdGQ6OnNoYXJlZF9wdHI8QzJQYXJhbT4gbURlZmF1bHRWYWx1ZTsKKyAgICBhdHRyaWJfdCBtQXR0cmliOworICAgIHN0ZDo6ZnVuY3Rpb248QzJSKGNvbnN0IEMyUGFyYW0gKiwgYm9vbCwgYm9vbCAqLCBGYWN0b3J5ICYpPiBtU2V0dGVyOworICAgIHN0ZDo6ZnVuY3Rpb248c3RkOjpzaGFyZWRfcHRyPEMyUGFyYW0+KGJvb2wpPiBtR2V0dGVyOworICAgIHN0ZDo6dmVjdG9yPEMyUGFyYW06OkluZGV4PiBtRGVwZW5kZW5jaWVzOworICAgIHN0ZDo6dmVjdG9yPFBhcmFtUmVmPiBtRGVwZW5kZW5jaWVzQXNSZWZzOworICAgIHN0ZDo6dmVjdG9yPEMyUGFyYW06OkluZGV4PiBtRG93bkRlcGVuZGVuY2llczsgLy8gVE9ETzogdGhpcyBkb2VzIG5vdCB3b3JrIGZvciBzdHJlYW0gZGVwZW5kZW5jaWVzCisgICAgc3RkOjptYXA8X0MyRmllbGRJZCwgc3RkOjpzaGFyZWRfcHRyPEZpZWxkSGVscGVyPj4gbUZpZWxkczsKKyAgICBzdGQ6OnNoYXJlZF9wdHI8QzJQYXJhbURlc2NyaXB0b3I+IG1EZXNjcmlwdG9yOworfTsKKworQzJJbnRlcmZhY2VIZWxwZXI6OlBhcmFtSGVscGVyOjpQYXJhbUhlbHBlcigKKyAgICAgICAgUGFyYW1SZWYgcGFyYW0sIEMyU3RyaW5nTGl0ZXJhbCBuYW1lLCBDMlN0cnVjdERlc2NyaXB0b3IgJiZzdHJ1a3QpCisgICAgOiBtSW1wbChzdGQ6Om1ha2VfdW5pcXVlPEMySW50ZXJmYWNlSGVscGVyOjpQYXJhbUhlbHBlcjo6SW1wbD4oCisgICAgICAgICAgICBwYXJhbSwgbmFtZSwgc3RkOjptb3ZlKHN0cnVrdCkpKSB7IH0KKworQzJJbnRlcmZhY2VIZWxwZXI6OlBhcmFtSGVscGVyOjpQYXJhbUhlbHBlcihDMkludGVyZmFjZUhlbHBlcjo6UGFyYW1IZWxwZXIgJiYpID0gZGVmYXVsdDsKKworQzJJbnRlcmZhY2VIZWxwZXI6OlBhcmFtSGVscGVyOjp+UGFyYW1IZWxwZXIoKSA9IGRlZmF1bHQ7CisKK3ZvaWQgQzJJbnRlcmZhY2VIZWxwZXI6OlBhcmFtSGVscGVyOjphZGREb3duRGVwZW5kZW5jeShDMlBhcmFtOjpJbmRleCBpbmRleCkgeworICAgIHJldHVybiBtSW1wbC0+YWRkRG93bkRlcGVuZGVuY3koaW5kZXgpOworfQorCitDMkludGVyZmFjZUhlbHBlcjo6UGFyYW1IZWxwZXI6OmF0dHJpYl90JiBDMkludGVyZmFjZUhlbHBlcjo6UGFyYW1IZWxwZXI6OmF0dHJpYigpIHsKKyAgICByZXR1cm4gbUltcGwtPmF0dHJpYigpOworfQorCitzdGQ6OnNoYXJlZF9wdHI8QzJJbnRlcmZhY2VIZWxwZXI6OlBhcmFtSGVscGVyPiBDMkludGVyZmFjZUhlbHBlcjo6UGFyYW1IZWxwZXI6OmJ1aWxkKCkgeworICAgIG1JbXBsLT5idWlsZCgpOworICAgIHJldHVybiBzdGQ6Om1ha2Vfc2hhcmVkPEMySW50ZXJmYWNlSGVscGVyOjpQYXJhbUhlbHBlcj4oc3RkOjptb3ZlKCp0aGlzKSk7Cit9CisKK3N0ZDo6c2hhcmVkX3B0cjxDMkludGVyZmFjZUhlbHBlcjo6RmllbGRIZWxwZXI+CitDMkludGVyZmFjZUhlbHBlcjo6UGFyYW1IZWxwZXI6OmZpbmRGaWVsZChzaXplX3QgYmFzZU9mZnMsIHNpemVfdCBiYXNlU2l6ZSkgY29uc3QgeworICAgIHJldHVybiBtSW1wbC0+ZmluZEZpZWxkKGJhc2VPZmZzLCBiYXNlU2l6ZSk7Cit9CisKK2NvbnN0IHN0ZDo6dmVjdG9yPEMySW50ZXJmYWNlSGVscGVyOjpQYXJhbVJlZj4KK0MySW50ZXJmYWNlSGVscGVyOjpQYXJhbUhlbHBlcjo6Z2V0RGVwZW5kZW5jaWVzQXNSZWZzKCkgY29uc3QgeworICAgIHJldHVybiBtSW1wbC0+Z2V0RGVwZW5kZW5jaWVzQXNSZWZzKCk7Cit9CisKK3N0ZDo6c2hhcmVkX3B0cjxjb25zdCBDMlBhcmFtRGVzY3JpcHRvcj4KK0MySW50ZXJmYWNlSGVscGVyOjpQYXJhbUhlbHBlcjo6Z2V0RGVzY3JpcHRvcigpIGNvbnN0IHsKKyAgICByZXR1cm4gbUltcGwtPmdldERlc2NyaXB0b3IoKTsKK30KKworY29uc3Qgc3RkOjp2ZWN0b3I8QzJQYXJhbTo6SW5kZXg+IEMySW50ZXJmYWNlSGVscGVyOjpQYXJhbUhlbHBlcjo6Z2V0RG93bkRlcGVuZGVuY2llcygpIGNvbnN0IHsKKyAgICByZXR1cm4gbUltcGwtPmdldERvd25EZXBlbmRlbmNpZXMoKTsKK30KKworQzJQYXJhbTo6SW5kZXggQzJJbnRlcmZhY2VIZWxwZXI6OlBhcmFtSGVscGVyOjppbmRleCgpIGNvbnN0IHsKKyAgICByZXR1cm4gbUltcGwtPmluZGV4KCk7Cit9CisKK0MyU3RyaW5nIEMySW50ZXJmYWNlSGVscGVyOjpQYXJhbUhlbHBlcjo6bmFtZSgpIGNvbnN0IHsKKyAgICByZXR1cm4gbUltcGwtPm5hbWUoKTsKK30KKworY29uc3QgQzJJbnRlcmZhY2VIZWxwZXI6OlBhcmFtUmVmIEMySW50ZXJmYWNlSGVscGVyOjpQYXJhbUhlbHBlcjo6cmVmKCkgY29uc3QgeworICAgIHJldHVybiBtSW1wbC0+cmVmKCk7Cit9CisKK0MyU3RydWN0RGVzY3JpcHRvciBDMkludGVyZmFjZUhlbHBlcjo6UGFyYW1IZWxwZXI6OnJldHJpZXZlU3RydWN0RGVzY3JpcHRvcigpIHsKKyAgICByZXR1cm4gbUltcGwtPnJldHJpZXZlU3RydWN0RGVzY3JpcHRvcigpOworfQorCit2b2lkIEMySW50ZXJmYWNlSGVscGVyOjpQYXJhbUhlbHBlcjo6c2V0RGVmYXVsdFZhbHVlKHN0ZDo6c2hhcmVkX3B0cjxDMlBhcmFtPiBkZWZhdWx0XykgeworICAgIG1JbXBsLT5zZXREZWZhdWx0VmFsdWUoZGVmYXVsdF8pOworfQorCit2b2lkIEMySW50ZXJmYWNlSGVscGVyOjpQYXJhbUhlbHBlcjo6c2V0RGVwZW5kZW5jaWVzKAorICAgICAgICBzdGQ6OnZlY3RvcjxDMlBhcmFtOjpJbmRleD4gaW5kaWNlcywgc3RkOjp2ZWN0b3I8UGFyYW1SZWY+IHJlZnMpIHsKKyAgICBtSW1wbC0+c2V0RGVwZW5kZW5jaWVzKGluZGljZXMsIHJlZnMpOworfQorCit2b2lkIEMySW50ZXJmYWNlSGVscGVyOjpQYXJhbUhlbHBlcjo6c2V0RmllbGRzKHN0ZDo6dmVjdG9yPEMyUGFyYW1GaWVsZFZhbHVlcz4gJiZmaWVsZHMpIHsKKyAgICByZXR1cm4gbUltcGwtPnNldEZpZWxkcyhzdGQ6Om1vdmUoZmllbGRzKSk7Cit9CisKK3ZvaWQgQzJJbnRlcmZhY2VIZWxwZXI6OlBhcmFtSGVscGVyOjpzZXRHZXR0ZXIoCisgICAgICAgIHN0ZDo6ZnVuY3Rpb248c3RkOjpzaGFyZWRfcHRyPEMyUGFyYW0+KGJvb2wpPiBnZXR0ZXIpIHsKKyAgICBtSW1wbC0+c2V0R2V0dGVyKGdldHRlcik7Cit9CisKK3ZvaWQgQzJJbnRlcmZhY2VIZWxwZXI6OlBhcmFtSGVscGVyOjpzZXRTZXR0ZXIoCisgICAgICAgIHN0ZDo6ZnVuY3Rpb248QzJSKGNvbnN0IEMyUGFyYW0gKiwgYm9vbCwgYm9vbCAqLCBGYWN0b3J5ICYpPiBzZXR0ZXIpIHsKKyAgICBtSW1wbC0+c2V0U2V0dGVyKHNldHRlcik7Cit9CisKK2MyX3N0YXR1c190IEMySW50ZXJmYWNlSGVscGVyOjpQYXJhbUhlbHBlcjo6dHJ5U2V0KAorICAgICAgICBjb25zdCBDMlBhcmFtICp2YWx1ZSwgYm9vbCBtYXlCbG9jaywgYm9vbCAqY2hhbmdlZCwgRmFjdG9yeSAmZiwKKyAgICAgICAgc3RkOjp2ZWN0b3I8c3RkOjp1bmlxdWVfcHRyPEMyU2V0dGluZ1Jlc3VsdD4+KiBjb25zdCBmYWlsdXJlcykgeworICAgIHJldHVybiBtSW1wbC0+dHJ5U2V0KHZhbHVlLCBtYXlCbG9jaywgY2hhbmdlZCwgZiwgZmFpbHVyZXMpOworfQorCitjMl9zdGF0dXNfdCBDMkludGVyZmFjZUhlbHBlcjo6UGFyYW1IZWxwZXI6OnZhbGlkYXRlKAorICAgICAgICBjb25zdCBzdGQ6OnNoYXJlZF9wdHI8QzJQYXJhbVJlZmxlY3Rvcj4gJnJlZmxlY3RvcikgeworICAgIHJldHVybiBtSW1wbC0+dmFsaWRhdGUocmVmbGVjdG9yKTsKK30KKworc3RkOjpzaGFyZWRfcHRyPEMyUGFyYW0+IEMySW50ZXJmYWNlSGVscGVyOjpQYXJhbUhlbHBlcjo6dmFsdWUoKSB7CisgICAgcmV0dXJuIG1JbXBsLT52YWx1ZSgpOworfQorCitzdGQ6OnNoYXJlZF9wdHI8Y29uc3QgQzJQYXJhbT4gQzJJbnRlcmZhY2VIZWxwZXI6OlBhcmFtSGVscGVyOjp2YWx1ZSgpIGNvbnN0IHsKKyAgICByZXR1cm4gbUltcGwtPnZhbHVlKCk7Cit9CisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gRmllbGRIZWxwZXIgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCitDMlBhcmFtRmllbGQgQzJJbnRlcmZhY2VIZWxwZXI6OkZpZWxkSGVscGVyOjptYWtlUGFyYW1GaWVsZChDMlBhcmFtOjpJbmRleCBpbmRleCkgY29uc3QgeworICAgIHJldHVybiBfQzJQYXJhbUluc3BlY3Rvcjo6Q3JlYXRlUGFyYW1GaWVsZChpbmRleCwgbUZpZWxkSWQpOworfQorCitDMkludGVyZmFjZUhlbHBlcjo6RmllbGRIZWxwZXI6OkZpZWxkSGVscGVyKGNvbnN0IFBhcmFtUmVmICZwYXJhbSwgY29uc3QgX0MyRmllbGRJZCAmZmllbGQsCisgICAgICAgICAgICBzdGQ6OnVuaXF1ZV9wdHI8QzJGaWVsZFN1cHBvcnRlZFZhbHVlcz4gJiZ2YWx1ZXMpCisgICAgOiBtUGFyYW0ocGFyYW0pLAorICAgICAgbUZpZWxkSWQoZmllbGQpLAorICAgICAgbVBvc3NpYmxlKHN0ZDo6bW92ZSh2YWx1ZXMpKSB7CisgICAgQzJfTE9HKFZFUkJPU0UpIDw8ICJDcmVhdGluZyBmaWVsZCBoZWxwZXIgIiA8PCBmaWVsZCA8PCAiICIKKyAgICAgICAgICAgIDw8IEMyRmllbGRTdXBwb3J0ZWRWYWx1ZXNIZWxwZXI8dWludDMyX3Q+KCptUG9zc2libGUpOworfQorCit2b2lkIEMySW50ZXJmYWNlSGVscGVyOjpGaWVsZEhlbHBlcjo6c2V0U3VwcG9ydGVkVmFsdWVzKAorICAgICAgICBzdGQ6OnVuaXF1ZV9wdHI8QzJGaWVsZFN1cHBvcnRlZFZhbHVlcz4gJiZ2YWx1ZXMpIHsKKyAgICBtU3VwcG9ydGVkID0gc3RkOjptb3ZlKHZhbHVlcyk7Cit9CisKK2NvbnN0IEMyRmllbGRTdXBwb3J0ZWRWYWx1ZXMgKkMySW50ZXJmYWNlSGVscGVyOjpGaWVsZEhlbHBlcjo6Z2V0U3VwcG9ydGVkVmFsdWVzKCkgY29uc3QgeworICAgIHJldHVybiAobVN1cHBvcnRlZCA/IG1TdXBwb3J0ZWQgOiBtUG9zc2libGUpLmdldCgpOworfQorCitjb25zdCBDMkZpZWxkU3VwcG9ydGVkVmFsdWVzICpDMkludGVyZmFjZUhlbHBlcjo6RmllbGRIZWxwZXI6OmdldFBvc3NpYmxlVmFsdWVzKCkgY29uc3QgeworICAgIHJldHVybiBtUG9zc2libGUuZ2V0KCk7Cit9CisKKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBGaWVsZCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKKy8qKgorICogV3JhcHBlciBhcm91bmQgZmllbGQtc3VwcG9ydGVkLXZhbHVlcyBidWlsZGVyIHRoYXQgZ2V0cyBzdG9yZWQgaW4gdGhlCisgKiBmaWVsZCBoZWxwZXIgd2hlbiB0aGUgYnVpbGRlciBnb2VzIG91dCBvZiBzY29wZS4KKyAqLwordGVtcGxhdGU8dHlwZW5hbWUgVD4KK3N0cnVjdCBTdXBwb3J0ZWRWYWx1ZXNCdWlsZGVyIDogQzJQYXJhbUZpZWxkVmFsdWVzQnVpbGRlcjxUPiB7CisgICAgU3VwcG9ydGVkVmFsdWVzQnVpbGRlcigKKyAgICAgICAgICAgIEMyUGFyYW1GaWVsZCAmZmllbGQsIHN0ZDo6c2hhcmVkX3B0cjxDMkludGVyZmFjZUhlbHBlcjo6RmllbGRIZWxwZXI+IGhlbHBlcikKKyAgICAgICAgOiBDMlBhcmFtRmllbGRWYWx1ZXNCdWlsZGVyPFQ+KGZpZWxkKSwgX21IZWxwZXIoaGVscGVyKSwgX21GaWVsZChmaWVsZCkgeworICAgIH0KKworICAgIC8qKgorICAgICAqIFNhdmUgYnVpbGRlciB2YWx1ZXMgb24gZGVzdHJ1Y3Rpb24uCisgICAgICovCisgICAgdmlydHVhbCB+U3VwcG9ydGVkVmFsdWVzQnVpbGRlcigpIG92ZXJyaWRlIHsKKyAgICAgICAgX21IZWxwZXItPnNldFN1cHBvcnRlZFZhbHVlcyhzdGQ6Om1vdmUoQzJQYXJhbUZpZWxkVmFsdWVzKCp0aGlzKS52YWx1ZXMpKTsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgc3RkOjpzaGFyZWRfcHRyPEMySW50ZXJmYWNlSGVscGVyOjpGaWVsZEhlbHBlcj4gX21IZWxwZXI7CisgICAgQzJQYXJhbUZpZWxkIF9tRmllbGQ7Cit9OworCisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+CitDMlBhcmFtRmllbGRWYWx1ZXNCdWlsZGVyPFQ+IEMySW50ZXJmYWNlSGVscGVyOjpGaWVsZDxUPjo6c2hvdWxkQmUoKSBjb25zdCB7CisgICAgcmV0dXJuIEMyUGFyYW1GaWVsZFZhbHVlc0J1aWxkZXI8VD4oX21GaWVsZCk7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+CitDMlBhcmFtRmllbGRWYWx1ZXNCdWlsZGVyPFQ+IEMySW50ZXJmYWNlSGVscGVyOjpGaWVsZDxUPjo6bXVzdEJlKCkgeworICAgIHJldHVybiBTdXBwb3J0ZWRWYWx1ZXNCdWlsZGVyPFQ+KF9tRmllbGQsIF9tSGVscGVyKTsKK30KKworLyoKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IEMyU2V0dGluZ1Jlc3VsdHNCdWlsZGVyIEMySW50ZXJmYWNlSGVscGVyOjpGaWVsZDxUPjo6dmFsaWRhdGVQb3NzaWJsZShUICZ2YWx1ZSkKK2NvbnN0IHsKKyAgICAvLy8gVE9ETworICAgIHJldHVybiBDMlNldHRpbmdSZXN1bHRzQnVpbGRlcjo6T2soKTsKK30KKyovCisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+CitDMkludGVyZmFjZUhlbHBlcjo6RmllbGQ8VD46OkZpZWxkKHN0ZDo6c2hhcmVkX3B0cjxGaWVsZEhlbHBlcj4gaGVscGVyLCBDMlBhcmFtOjpJbmRleCBpbmRleCkKKyAgICA6IF9tSGVscGVyKGhlbHBlciksIF9tRmllbGQoaGVscGVyLT5tYWtlUGFyYW1GaWVsZChpbmRleCkpIHsgfQorCit0ZW1wbGF0ZSBzdHJ1Y3QgQzJJbnRlcmZhY2VIZWxwZXI6OkZpZWxkPHVpbnQ4X3Q+OwordGVtcGxhdGUgc3RydWN0IEMySW50ZXJmYWNlSGVscGVyOjpGaWVsZDxjaGFyPjsKK3RlbXBsYXRlIHN0cnVjdCBDMkludGVyZmFjZUhlbHBlcjo6RmllbGQ8aW50MzJfdD47Cit0ZW1wbGF0ZSBzdHJ1Y3QgQzJJbnRlcmZhY2VIZWxwZXI6OkZpZWxkPHVpbnQzMl90PjsKKy8vdGVtcGxhdGUgc3RydWN0IEMySW50ZXJmYWNlSGVscGVyOjpGaWVsZDxjMl9jbnRyMzJfdD47Cit0ZW1wbGF0ZSBzdHJ1Y3QgQzJJbnRlcmZhY2VIZWxwZXI6OkZpZWxkPGludDY0X3Q+OwordGVtcGxhdGUgc3RydWN0IEMySW50ZXJmYWNlSGVscGVyOjpGaWVsZDx1aW50NjRfdD47CisvL3RlbXBsYXRlIHN0cnVjdCBDMkludGVyZmFjZUhlbHBlcjo6RmllbGQ8YzJfY250cjY0X3Q+OwordGVtcGxhdGUgc3RydWN0IEMySW50ZXJmYWNlSGVscGVyOjpGaWVsZDxmbG9hdD47CisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBGYWN0b3J5IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCitzdHJ1Y3QgQzJJbnRlcmZhY2VIZWxwZXI6OkZhY3RvcnlJbXBsIDogcHVibGljIEMySW50ZXJmYWNlSGVscGVyOjpGYWN0b3J5IHsKKyAgICB2aXJ0dWFsIHN0ZDo6c2hhcmVkX3B0cjxDMlBhcmFtUmVmbGVjdG9yPiBnZXRSZWZsZWN0b3IoKSBjb25zdCBvdmVycmlkZSB7CisgICAgICAgIHJldHVybiBfbVJlZmxlY3RvcjsKKyAgICB9CisKKyAgICB2aXJ0dWFsIHN0ZDo6c2hhcmVkX3B0cjxQYXJhbUhlbHBlcj4KKyAgICBnZXRQYXJhbUhlbHBlcihjb25zdCBQYXJhbVJlZiAmcGFyYW0pIGNvbnN0IG92ZXJyaWRlIHsKKyAgICAgICAgcmV0dXJuIF9tUGFyYW1zLmZpbmQocGFyYW0pLT5zZWNvbmQ7CisgICAgfQorCitwdWJsaWM6CisgICAgRmFjdG9yeUltcGwoc3RkOjpzaGFyZWRfcHRyPEMyUGFyYW1SZWZsZWN0b3I+IHJlZmxlY3RvcikKKyAgICAgICAgOiBfbVJlZmxlY3RvcihyZWZsZWN0b3IpIHsgfQorCisgICAgdmlydHVhbCB+RmFjdG9yeUltcGwoKSA9IGRlZmF1bHQ7CisKKyAgICB2b2lkIGFkZFBhcmFtKHN0ZDo6c2hhcmVkX3B0cjxQYXJhbUhlbHBlcj4gcGFyYW0pIHsKKyAgICAgICAgX21QYXJhbXMuaW5zZXJ0KHsgcGFyYW0tPnJlZigpLCBwYXJhbSB9KTsKKyAgICAgICAgX21JbmRleFRvSGVscGVyLmluc2VydCh7cGFyYW0tPmluZGV4KCksIHBhcmFtfSk7CisKKyAgICAgICAgLy8gYWRkIGRvd24tZGVwZW5kZW5jaWVzIChhbmQgdmFsaWRhdGUgZGVwZW5kZW5jaWVzIGFzIGEgcmVzdWx0KQorICAgICAgICBzaXplX3QgaXggPSAwOworICAgICAgICBmb3IgKGNvbnN0IFBhcmFtUmVmICZyZWYgOiBwYXJhbS0+Z2V0RGVwZW5kZW5jaWVzQXNSZWZzKCkpIHsKKyAgICAgICAgICAgIC8vIGRlcGVuZGVuY2llcyBtdXN0IGFscmVhZHkgYmUgZGVmaW5lZAorICAgICAgICAgICAgaWYgKCFfbVBhcmFtcy5jb3VudChyZWYpKSB7CisgICAgICAgICAgICAgICAgQzJfTE9HKEZBVEFMKSA8PCAiUGFyYW1ldGVyICIgPDwgcGFyYW0tPm5hbWUoKSA8PCAiIGhhcyBhIGRlcGVuZGVuY3kgYXQgaW5kZXggIgorICAgICAgICAgICAgICAgICAgICAgICAgPDwgaXggPDwgIiB0aGF0IGlzIG5vdCB5ZXQgZGVmaW5lZCI7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBfbVBhcmFtcy5maW5kKHJlZiktPnNlY29uZC0+YWRkRG93bkRlcGVuZGVuY3kocGFyYW0tPmluZGV4KCkpOworICAgICAgICAgICAgKytpeDsKKyAgICAgICAgfQorCisgICAgICAgIF9tRGVwZW5kZW5jeUluZGV4LmVtcGxhY2UocGFyYW0tPmluZGV4KCksIF9tRGVwZW5kZW5jeUluZGV4LnNpemUoKSk7CisgICAgfQorCisgICAgc3RkOjpzaGFyZWRfcHRyPFBhcmFtSGVscGVyPiBnZXRQYXJhbShDMlBhcmFtOjpJbmRleCBpeCkgY29uc3QgeworICAgICAgICAvLyBUT0RPOiBoYW5kbGUgc3RyZWFtcyBzZXBhcmF0ZWx5CisgICAgICAgIGNvbnN0IGF1dG8gaXQgPSBfbUluZGV4VG9IZWxwZXIuZmluZChpeCk7CisgICAgICAgIGlmIChpdCA9PSBfbUluZGV4VG9IZWxwZXIuZW5kKCkpIHsKKyAgICAgICAgICAgIHJldHVybiBudWxscHRyOworICAgICAgICB9CisgICAgICAgIHJldHVybiBpdC0+c2Vjb25kOworICAgIH0KKworICAgIC8qKgorICAgICAqIFRPRE86IHRoaXMgY291bGQgcmV0dXJuIGEgY29weSB1c2luZyBwcm9wZXIgcG9pbnRlciBjYXN0LgorICAgICAqLworICAgIHN0ZDo6c2hhcmVkX3B0cjxDMlBhcmFtPiBnZXRQYXJhbVZhbHVlKEMyUGFyYW06OkluZGV4IGl4KSBjb25zdCB7CisgICAgICAgIHN0ZDo6c2hhcmVkX3B0cjxQYXJhbUhlbHBlcj4gaGVscGVyID0gZ2V0UGFyYW0oaXgpOworICAgICAgICByZXR1cm4gaGVscGVyID8gaGVscGVyLT52YWx1ZSgpIDogbnVsbHB0cjsKKyAgICB9CisKKyAgICBjMl9zdGF0dXNfdCBxdWVyeVN1cHBvcnRlZFBhcmFtcygKKyAgICAgICAgICAgIHN0ZDo6dmVjdG9yPHN0ZDo6c2hhcmVkX3B0cjxDMlBhcmFtRGVzY3JpcHRvcj4+ICpjb25zdCBwYXJhbXMpIGNvbnN0IHsKKyAgICAgICAgZm9yIChjb25zdCBhdXRvICZpdCA6IF9tUGFyYW1zKSB7CisgICAgICAgICAgICAvLyBUT0RPOiBjaGFuZ2UgcXVlcnlTdXBwb3J0ZWRQYXJhbXMgc2lnbmF0dXJlPworICAgICAgICAgICAgcGFyYW1zLT5wdXNoX2JhY2soCisgICAgICAgICAgICAgICAgICAgIHN0ZDo6Y29uc3RfcG9pbnRlcl9jYXN0PEMyUGFyYW1EZXNjcmlwdG9yPihpdC5zZWNvbmQtPmdldERlc2NyaXB0b3IoKSkpOworICAgICAgICB9CisgICAgICAgIC8vIFRPRE86IGhhbmRsZSBlcnJvcnMKKyAgICAgICAgcmV0dXJuIEMyX09LOworICAgIH0KKworICAgIHNpemVfdCBnZXREZXBlbmRlbmN5SW5kZXgoQzJQYXJhbTo6SW5kZXggaXgpIHsKKyAgICAgICAgLy8gaW4gdGhpcyB2ZXJzaW9uIG9mIHRoZSBoZWxwZXIgdGhlcmUgaXMgb25seSBhIHNpbmdsZSBzdHJlYW0gc28KKyAgICAgICAgLy8gd2UgY2FuIGxvb2sgdXAgZGlyZWN0bHkgYnkgaW5kZXgKKyAgICAgICAgYXV0byBpdCA9IF9tRGVwZW5kZW5jeUluZGV4LmZpbmQoaXgpOworICAgICAgICByZXR1cm4gaXQgPT0gX21EZXBlbmRlbmN5SW5kZXguZW5kKCkgPyBTSVpFX01BWCA6IGl0LT5zZWNvbmQ7CisgICAgfQorCitwcml2YXRlOgorICAgIHN0ZDo6bWFwPFBhcmFtUmVmLCBzdGQ6OnNoYXJlZF9wdHI8UGFyYW1IZWxwZXI+PiBfbVBhcmFtczsKKyAgICBzdGQ6Om1hcDxDMlBhcmFtOjpJbmRleCwgc3RkOjpzaGFyZWRfcHRyPFBhcmFtSGVscGVyPj4gX21JbmRleFRvSGVscGVyOworICAgIHN0ZDo6c2hhcmVkX3B0cjxDMlBhcmFtUmVmbGVjdG9yPiBfbVJlZmxlY3RvcjsKKyAgICBzdGQ6Om1hcDxDMlBhcmFtOjpJbmRleCwgc2l6ZV90PiBfbURlcGVuZGVuY3lJbmRleDsKK307CisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBIZWxwZXIgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKK25hbWVzcGFjZSB7CisKK3N0YXRpYyBzdGQ6OnN0cmluZyBhc1N0cmluZyhDMlBhcmFtICpwKSB7CisgICAgY2hhciBhZGRyWzIwXTsKKyAgICBzcHJpbnRmKGFkZHIsICIlcDpbIiwgcCk7CisgICAgc3RkOjpzdHJpbmcgdiA9IGFkZHI7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBwLT5zaXplKCk7ICsraSkgeworICAgICAgICBjaGFyIGRbNF07CisgICAgICAgIHNwcmludGYoZCwgIiAlMDJ4IiwgKigoKHVpbnQ4X3QgKilwKSArIGkpKTsKKyAgICAgICAgdiArPSBkICsgKGkgPT0gMCk7CisgICAgfQorICAgIHJldHVybiB2ICsgIl0iOworfQorCit9CisKK0MySW50ZXJmYWNlSGVscGVyOjpDMkludGVyZmFjZUhlbHBlcihzdGQ6OnNoYXJlZF9wdHI8QzJSZWZsZWN0b3JIZWxwZXI+IHJlZmxlY3RvcikKKyAgICA6IG1SZWZsZWN0b3IocmVmbGVjdG9yKSwKKyAgICAgIF9tRmFjdG9yeShzdGQ6Om1ha2Vfc2hhcmVkPEZhY3RvcnlJbXBsPihyZWZsZWN0b3IpKSB7IH0KKworCitzaXplX3QgQzJJbnRlcmZhY2VIZWxwZXI6OkdldEJhc2VPZmZzZXQoY29uc3Qgc3RkOjpzaGFyZWRfcHRyPEMyUGFyYW1SZWZsZWN0b3I+ICZyZWZsZWN0b3IsCisgICAgICAgIEMyUGFyYW06OkNvcmVJbmRleCBpbmRleCwgc2l6ZV90IG9mZnNldCkgeworICAgIHN0ZDo6dW5pcXVlX3B0cjxDMlN0cnVjdERlc2NyaXB0b3I+IHBhcmFtID0gcmVmbGVjdG9yLT5kZXNjcmliZShpbmRleCk7CisgICAgaWYgKHBhcmFtID09IG51bGxwdHIpIHsKKyAgICAgICAgcmV0dXJuIH4oc2l6ZV90KTA7IC8vIHBhcmFtIHN0cnVjdHVyZSBub3QgZGVzY3JpYmVkCisgICAgfQorCisgICAgZm9yIChjb25zdCBDMkZpZWxkRGVzY3JpcHRvciAmZmllbGQgOiAqcGFyYW0pIHsKKyAgICAgICAgc2l6ZV90IGZpZWxkT2Zmc2V0ID0gX0MyUGFyYW1JbnNwZWN0b3I6OkdldE9mZnNldChmaWVsZCk7CisgICAgICAgIHNpemVfdCBmaWVsZFNpemUgPSBfQzJQYXJhbUluc3BlY3Rvcjo6R2V0U2l6ZShmaWVsZCk7CisgICAgICAgIHNpemVfdCBmaWVsZEV4dGVudCA9IGZpZWxkLmV4dGVudCgpOworICAgICAgICBpZiAob2Zmc2V0IDwgZmllbGRPZmZzZXQpIHsKKyAgICAgICAgICAgIHJldHVybiB+KHNpemVfdCkwOyAvLyBub3QgZm91bmQKKyAgICAgICAgfQorICAgICAgICBpZiAob2Zmc2V0ID09IGZpZWxkT2Zmc2V0KSB7CisgICAgICAgICAgICAvLyBleGFjdCBtYXRjaAorICAgICAgICAgICAgcmV0dXJuIG9mZnNldDsKKyAgICAgICAgfQorICAgICAgICBpZiAoZmllbGQuZXh0ZW50KCkgPT0gMCB8fCBvZmZzZXQgPCBmaWVsZE9mZnNldCArIGZpZWxkU2l6ZSAqIGZpZWxkRXh0ZW50KSB7CisgICAgICAgICAgICAvLyByZWR1Y2UgdG8gZmlyc3QgZWxlbWVudCBpbiBjYXNlIG9mIGFycmF5CisgICAgICAgICAgICBvZmZzZXQgPSBmaWVsZE9mZnNldCArIChvZmZzZXQgLSBmaWVsZE9mZnNldCkgJSBmaWVsZFNpemU7CisgICAgICAgICAgICBpZiAoZmllbGQudHlwZSgpID49IEMyRmllbGREZXNjcmlwdG9yOjpTVFJVQ1RfRkxBRykgeworICAgICAgICAgICAgICAgIC8vIHRoaXMgb2Zmc2V0IGlzIHdpdGhpbiBhIGZpZWxkCisgICAgICAgICAgICAgICAgb2Zmc2V0ID0gR2V0QmFzZU9mZnNldCgKKyAgICAgICAgICAgICAgICAgICAgICAgIHJlZmxlY3RvciwgZmllbGQudHlwZSgpICYgfkMyRmllbGREZXNjcmlwdG9yOjpTVFJVQ1RfRkxBRywKKyAgICAgICAgICAgICAgICAgICAgICAgIG9mZnNldCAtIGZpZWxkT2Zmc2V0KTsKKyAgICAgICAgICAgICAgICByZXR1cm4gfm9mZnNldCA/IGZpZWxkT2Zmc2V0ICsgb2Zmc2V0IDogb2Zmc2V0OworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorICAgIHJldHVybiB+KHNpemVfdCkwOyAvLyBub3QgZm91bmQKK30KKwordm9pZCBDMkludGVyZmFjZUhlbHBlcjo6YWRkUGFyYW1ldGVyKHN0ZDo6c2hhcmVkX3B0cjxQYXJhbUhlbHBlcj4gcGFyYW0pIHsKKyAgICBzdGQ6OmxvY2tfZ3VhcmQ8c3RkOjptdXRleD4gbG9jayhtTXV0ZXgpOworICAgIG1SZWZsZWN0b3ItPmFkZFN0cnVjdERlc2NyaXB0b3IocGFyYW0tPnJldHJpZXZlU3RydWN0RGVzY3JpcHRvcigpKTsKKyAgICBjMl9zdGF0dXNfdCBlcnIgPSBwYXJhbS0+dmFsaWRhdGUobVJlZmxlY3Rvcik7CisgICAgaWYgKGVyciAhPSBDMl9DT1JSVVBURUQpIHsKKyAgICAgICAgX21GYWN0b3J5LT5hZGRQYXJhbShwYXJhbSk7CisKKyAgICAgICAgLy8gcnVuIHNldHRlciB0byBlbnN1cmUgY29ycmVjdCB2YWx1ZXMKKyAgICAgICAgYm9vbCBjaGFuZ2VkID0gZmFsc2U7CisgICAgICAgIHN0ZDo6dmVjdG9yPHN0ZDo6dW5pcXVlX3B0cjxDMlNldHRpbmdSZXN1bHQ+PiBmYWlsdXJlczsKKyAgICAgICAgKHZvaWQpcGFyYW0tPnRyeVNldChwYXJhbS0+dmFsdWUoKS5nZXQoKSwgQzJfTUFZX0JMT0NLLCAmY2hhbmdlZCwgKl9tRmFjdG9yeSwgJmZhaWx1cmVzKTsKKyAgICB9Cit9CisKK2MyX3N0YXR1c190IEMySW50ZXJmYWNlSGVscGVyOjpjb25maWcoCisgICAgICAgY29uc3Qgc3RkOjp2ZWN0b3I8QzJQYXJhbSo+ICZwYXJhbXMsIGMyX2Jsb2NraW5nX3QgbWF5QmxvY2ssCisgICAgICAgc3RkOjp2ZWN0b3I8c3RkOjp1bmlxdWVfcHRyPEMyU2V0dGluZ1Jlc3VsdD4+KiBjb25zdCBmYWlsdXJlcywgYm9vbCB1cGRhdGVQYXJhbXMsCisgICAgICAgc3RkOjp2ZWN0b3I8c3RkOjpzaGFyZWRfcHRyPEMyUGFyYW0+PiAqY2hhbmdlcyBfX3VudXNlZCAvKiBUT0RPICovKSB7CisgICAgc3RkOjpsb2NrX2d1YXJkPHN0ZDo6bXV0ZXg+IGxvY2sobU11dGV4KTsKKyAgICBib29sIHBhcmFtV2FzSW52YWxpZCA9IGZhbHNlOyAvLyBUT0RPIGlzIHRoaXMgdGhlIHNhbWUgYXMgYmFkIHZhbHVlPworICAgIGJvb2wgcGFyYW1Ob3RGb3VuZCA9IGZhbHNlOworICAgIGJvb2wgcGFyYW1CYWRWYWx1ZSA9IGZhbHNlOworICAgIGJvb2wgcGFyYW1Ob01lbW9yeSA9IGZhbHNlOworICAgIGJvb2wgcGFyYW1CbG9ja2luZyA9IGZhbHNlOworICAgIGJvb2wgcGFyYW1UaW1lZE91dCA9IGZhbHNlOworICAgIGJvb2wgcGFyYW1Db3JydXB0ZWQgPSBmYWxzZTsKKworICAgIC8vIGRlcGVuZGVuY2llcworICAgIC8vIGRvd24gZGVwZW5kZW5jaWVzIGFyZSBtYXJrZWQgZGlydHksIGJ1dCBwYXJhbXMgc2V0IGFyZSBub3QgaW1tZWRpYXRlbHkKKyAgICAvLyBtYXJrZWQgZGlydHkgKHVubGVzcyB0aGV5IGJlY29tZSBkb3duIGRlcGVuZGVuY3kpIHNvIHRoYXQgd2UgY2FuCisgICAgLy8gYXZvaWQgc2V0dGluZyB0aGVtIGlmIHRoZXkgZGlkIG5vdCBjaGFuZ2UKKworICAgIC8vIFRPRE86IHRoZXJlIGNvdWxkIGJlIG11bHRpcGxlIGluZGljZXMgZm9yIHRoZSBzYW1lIGRlcGVuZGVuY3kgaW5kZXgKKyAgICAvLyB7IGRlcEl4LCBwYXJhbUl4IH0gbWF5IGJlIGEgc3VpdGFibGUga2V5CisgICAgc3RkOjptYXA8c2l6ZV90LCBzdGQ6OnBhaXI8QzJQYXJhbTo6SW5kZXgsIGJvb2w+PiBkZXBlbmRlbmNpZXM7CisKKyAgICAvLyB3ZSBjYW5ub3QgZGV0ZXJtaW5lIHRoZSBsYXN0IHZhbGlkIHBhcmFtZXRlciwgc28gYWRkIGFuIGV4dHJhCisgICAgLy8gbG9vcCBpdGVyYXRpb24gYWZ0ZXIgdGhlIGxhc3QgcGFyYW1ldGVyCisgICAgZm9yIChzaXplX3QgcF9peCA9IDA7IHBfaXggPD0gcGFyYW1zLnNpemUoKTsgKytwX2l4KSB7CisgICAgICAgIEMyUGFyYW0gKnAgPSBudWxscHRyOworICAgICAgICBDMlBhcmFtOjpJbmRleCBwYXJhbUl4ID0gMHU7CisgICAgICAgIHNpemVfdCBwYXJhbURlcEl4ID0gU0laRV9NQVg7CisgICAgICAgIGJvb2wgbGFzdCA9IHBfaXggPT0gcGFyYW1zLnNpemUoKTsKKyAgICAgICAgaWYgKCFsYXN0KSB7CisgICAgICAgICAgICBwID0gcGFyYW1zW3BfaXhdOworICAgICAgICAgICAgaWYgKCEqcCkgeworICAgICAgICAgICAgICAgIHBhcmFtV2FzSW52YWxpZCA9IHRydWU7CisgICAgICAgICAgICAgICAgcC0+aW52YWxpZGF0ZSgpOworICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBwYXJhbUl4ID0gcC0+aW5kZXgoKTsKKyAgICAgICAgICAgIHBhcmFtRGVwSXggPSBnZXREZXBlbmRlbmN5SW5kZXhfbChwYXJhbUl4KTsKKyAgICAgICAgICAgIGlmIChwYXJhbURlcEl4ID09IFNJWkVfTUFYKSB7CisgICAgICAgICAgICAgICAgLy8gdW5zdXBwb3J0ZWQgcGFyYW1ldGVyCisgICAgICAgICAgICAgICAgcGFyYW1Ob3RGb3VuZCA9IHRydWU7CisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIC8vCisgICAgICAgICAgICAvLyBmaXJzdCBpbnNlcnQgLSBtYXJrIG5vdCBkaXJ0eQorICAgICAgICAgICAgLy8gaXQgbWF5IGhhdmUgYmVlbiBtYXJrZWQgZGlydHkgYnkgYSBkZXBlbmRlbmN5IHVwZGF0ZQorICAgICAgICAgICAgLy8gdGhpcyBkb2VzIG5vdCBvdmVycndyaXRlKCEpCisgICAgICAgICAgICAodm9pZClkZXBlbmRlbmNpZXMuaW5zZXJ0KHsgcGFyYW1EZXBJeCwgeyBwYXJhbUl4LCBmYWxzZSAvKiBkaXJ0eSAqLyB9fSk7CisgICAgICAgICAgICBhdXRvIGl0ID0gZGVwZW5kZW5jaWVzLmZpbmQocGFyYW1EZXBJeCk7CisgICAgICAgICAgICBDMl9MT0coVkVSQk9TRSkgPDwgIm1hcmtpbmcgZGVwZW5kZW5jeSBmb3Igc2V0dGluZyBhdCAjIiA8PCBwYXJhbURlcEl4IDw8ICI6ICIKKyAgICAgICAgICAgICAgICAgICAgPDwgaXQtPnNlY29uZC5maXJzdCA8PCAiLCB1cGRhdGUgIgorICAgICAgICAgICAgICAgICAgICA8PCAoaXQtPnNlY29uZC5zZWNvbmQgPyAiYWx3YXlzIChkaXJ0eSkiIDogIm9ubHkgaWYgY2hhbmdlZCIpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgLy8gcHJvY2VzcyBhbnkgcmVtYWluaW5nIGRlcGVuZGVuY2llcworICAgICAgICAgICAgaWYgKGRlcGVuZGVuY2llcy5lbXB0eSgpKSB7CisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBDMl9MT0coVkVSQk9TRSkgPDwgImhhbmRsaW5nIGRpcnR5IGRvd24gZGVwZW5kZW5jaWVzIGFmdGVyIGxhc3Qgc2V0dGluZyI7CisgICAgICAgIH0KKworICAgICAgICAvLyBwcm9jZXNzIGFueSBkaXJ0aWVkIGRvd24tZGVwZW5kZW5jaWVzIHVudGlsIHRoZSBuZXh0IHBhcmFtCisgICAgICAgIHdoaWxlIChkZXBlbmRlbmNpZXMuc2l6ZSgpICYmIGRlcGVuZGVuY2llcy5iZWdpbigpLT5maXJzdCA8PSBwYXJhbURlcEl4KSB7CisgICAgICAgICAgICBhdXRvIG1pbiA9IGRlcGVuZGVuY2llcy5iZWdpbigpOworICAgICAgICAgICAgQzJQYXJhbTo6SW5kZXggaXggPSBtaW4tPnNlY29uZC5maXJzdDsKKyAgICAgICAgICAgIGJvb2wgZGlydHkgPSBtaW4tPnNlY29uZC5zZWNvbmQ7CisgICAgICAgICAgICBkZXBlbmRlbmNpZXMuZXJhc2UobWluKTsKKworICAgICAgICAgICAgc3RkOjpzaGFyZWRfcHRyPFBhcmFtSGVscGVyPiBwYXJhbSA9IF9tRmFjdG9yeS0+Z2V0UGFyYW0oaXgpOworICAgICAgICAgICAgQzJfTE9HKFZFUkJPU0UpIDw8ICJvbGQgdmFsdWUgIiA8PCBhc1N0cmluZyhwYXJhbS0+dmFsdWUoKS5nZXQoKSk7CisgICAgICAgICAgICBpZiAoIWxhc3QpIHsKKyAgICAgICAgICAgICAgICBDMl9MT0coVkVSQk9TRSkgPDwgIm5ldyB2YWx1ZSAiIDw8IGFzU3RyaW5nKHApOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKCFsYXN0ICYmICFkaXJ0eSAmJiBpeCA9PSBwYXJhbUl4ICYmICpwYXJhbS0+dmFsdWUoKSA9PSAqcCkgeworICAgICAgICAgICAgICAgIC8vIG5vIGNoYW5nZSBpbiB2YWx1ZSAtIGFuZCBkZXBlbmRlbmNpZXMgd2VyZSBub3QgdXBkYXRlZAorICAgICAgICAgICAgICAgIC8vIG5vIG5lZWQgdG8gdXBkYXRlCisgICAgICAgICAgICAgICAgQzJfTE9HKFZFUkJPU0UpIDw8ICJpZ25vcmluZyBzZXR0aW5nIHVuY2hhbmdlZCBwYXJhbSAiIDw8IGl4OworICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICAvLyBhcHBseSBzZXR0aW5nCisgICAgICAgICAgICBib29sIGNoYW5nZWQgPSBmYWxzZTsKKyAgICAgICAgICAgIEMyX0xPRyhWRVJCT1NFKSA8PCAic2V0dGluZyBwYXJhbSAiIDw8IGl4OworICAgICAgICAgICAgc3RkOjpzaGFyZWRfcHRyPEMyUGFyYW0+IG9sZFZhbHVlID0gcGFyYW0tPnZhbHVlKCk7CisgICAgICAgICAgICBjMl9zdGF0dXNfdCByZXMgPSBwYXJhbS0+dHJ5U2V0KAorICAgICAgICAgICAgICAgICAgICAoIWxhc3QgJiYgcGFyYW1JeCA9PSBpeCkgPyBwIDogcGFyYW0tPnZhbHVlKCkuZ2V0KCksIG1heUJsb2NrLAorICAgICAgICAgICAgICAgICAgICAmY2hhbmdlZCwgKl9tRmFjdG9yeSwgZmFpbHVyZXMpOworICAgICAgICAgICAgc3RkOjpzaGFyZWRfcHRyPEMyUGFyYW0+IG5ld1ZhbHVlID0gcGFyYW0tPnZhbHVlKCk7CisgICAgICAgICAgICBDMl9DSEVDS19FUShvbGRWYWx1ZSA9PSBuZXdWYWx1ZSwgKm9sZFZhbHVlID09ICpuZXdWYWx1ZSk7CisgICAgICAgICAgICBzd2l0Y2ggKHJlcykgeworICAgICAgICAgICAgICAgIGNhc2UgQzJfT0s6IGJyZWFrOworICAgICAgICAgICAgICAgIGNhc2UgQzJfQkFEX1ZBTFVFOiBwYXJhbUJhZFZhbHVlID0gdHJ1ZTsgYnJlYWs7CisgICAgICAgICAgICAgICAgY2FzZSBDMl9OT19NRU1PUlk6IHBhcmFtTm9NZW1vcnkgPSB0cnVlOyBicmVhazsKKyAgICAgICAgICAgICAgICBjYXNlIEMyX1RJTUVEX09VVDogcGFyYW1UaW1lZE91dCA9IHRydWU7IGJyZWFrOworICAgICAgICAgICAgICAgIGNhc2UgQzJfQkxPQ0tJTkc6ICBwYXJhbUJsb2NraW5nID0gdHJ1ZTsgYnJlYWs7CisgICAgICAgICAgICAgICAgY2FzZSBDMl9DT1JSVVBURUQ6IHBhcmFtQ29ycnVwdGVkID0gdHJ1ZTsgYnJlYWs7CisgICAgICAgICAgICAgICAgZGVmYXVsdDogOy8vIFRPRE8gZmF0YWwKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgLy8gY29weSBiYWNrIHJlc3VsdCBmb3IgY29uZmlndXJlZCB2YWx1ZXMgKG9yIGludmFsaWRhdGUgaWYgaXQgZG9lcyBub3QgZml0IG9yIG1hdGNoKQorICAgICAgICAgICAgaWYgKHVwZGF0ZVBhcmFtcyAmJiAhbGFzdCAmJiBwYXJhbUl4ID09IGl4KSB7CisgICAgICAgICAgICAgICAgaWYgKCFwLT51cGRhdGVGcm9tKCpwYXJhbS0+dmFsdWUoKSkpIHsKKyAgICAgICAgICAgICAgICAgICAgcC0+aW52YWxpZGF0ZSgpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgLy8gY29tcGFyZSBwdHJzIGFzIHBhcmFtcyBhcmUgY29weSBvbiB3cml0ZQorICAgICAgICAgICAgaWYgKGNoYW5nZWQpIHsKKyAgICAgICAgICAgICAgICBDMl9MT0coVkVSQk9TRSkgPDwgInBhcmFtICIgPDwgaXggPDwgIiB2YWx1ZSBjaGFuZ2VkIjsKKyAgICAgICAgICAgICAgICAvLyB2YWx1ZSBjaGFuZ2VkIHVwZGF0ZSBkb3duLWRlcGVuZGVuY2llcyBhbmQgbWFyayB0aGVtIGRpcnR5CisgICAgICAgICAgICAgICAgZm9yIChjb25zdCBDMlBhcmFtOjpJbmRleCBpeCA6IHBhcmFtLT5nZXREb3duRGVwZW5kZW5jaWVzKCkpIHsKKyAgICAgICAgICAgICAgICAgICAgQzJfTE9HKFZFUkJPU0UpIDw8IDE7CisgICAgICAgICAgICAgICAgICAgIGF1dG8gaW5zZXJ0X3JlcyA9IGRlcGVuZGVuY2llcy5pbnNlcnQoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgeyBnZXREZXBlbmRlbmN5SW5kZXhfbChpeCksIHsgaXgsIHRydWUgLyogZGlydHkgKi8gfX0pOworICAgICAgICAgICAgICAgICAgICBpZiAoIWluc2VydF9yZXMuc2Vjb25kKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAoKmluc2VydF9yZXMuZmlyc3QpLnNlY29uZC5zZWNvbmQgPSB0cnVlOyAvLyBtYXJrIGRpcnR5CisgICAgICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgICAgICBhdXRvIGl0ID0gZGVwZW5kZW5jaWVzLmZpbmQoZ2V0RGVwZW5kZW5jeUluZGV4X2woaXgpKTsKKyAgICAgICAgICAgICAgICAgICAgQzJfQ0hFQ0soaXQtPnNlY29uZC5zZWNvbmQpOworICAgICAgICAgICAgICAgICAgICBDMl9MT0coVkVSQk9TRSkgPDwgIm1hcmtpbmcgZG93biBkZXBlbmRlbmNpZXMgdG8gdXBkYXRlIGF0ICMiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPDwgZ2V0RGVwZW5kZW5jeUluZGV4X2woaXgpIDw8ICI6ICIgPDwgaXQtPnNlY29uZC5maXJzdDsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gKHBhcmFtQ29ycnVwdGVkID8gQzJfQ09SUlVQVEVEIDoKKyAgICAgICAgICAgIHBhcmFtQmxvY2tpbmcgPyBDMl9CTE9DS0lORyA6CisgICAgICAgICAgICBwYXJhbVRpbWVkT3V0ID8gQzJfVElNRURfT1VUIDoKKyAgICAgICAgICAgIHBhcmFtTm9NZW1vcnkgPyBDMl9OT19NRU1PUlkgOgorICAgICAgICAgICAgKHBhcmFtQmFkVmFsdWUgfHwgcGFyYW1XYXNJbnZhbGlkKSA/IEMyX0JBRF9WQUxVRSA6CisgICAgICAgICAgICBwYXJhbU5vdEZvdW5kID8gQzJfQkFEX0lOREVYIDogQzJfT0spOworfQorCitzaXplX3QgQzJJbnRlcmZhY2VIZWxwZXI6OmdldERlcGVuZGVuY3lJbmRleF9sKEMyUGFyYW06OkluZGV4IGl4KSBjb25zdCB7CisgICAgcmV0dXJuIF9tRmFjdG9yeS0+Z2V0RGVwZW5kZW5jeUluZGV4KGl4KTsKK30KKworYzJfc3RhdHVzX3QgQzJJbnRlcmZhY2VIZWxwZXI6OnF1ZXJ5KAorICAgICAgICBjb25zdCBzdGQ6OnZlY3RvcjxDMlBhcmFtKj4gJnN0YWNrUGFyYW1zLAorICAgICAgICBjb25zdCBzdGQ6OnZlY3RvcjxDMlBhcmFtOjpJbmRleD4gJmhlYXBQYXJhbUluZGljZXMsCisgICAgICAgIGMyX2Jsb2NraW5nX3QgbWF5QmxvY2sgX191bnVzZWQgLyogVE9ETyAqLywKKyAgICAgICAgc3RkOjp2ZWN0b3I8c3RkOjp1bmlxdWVfcHRyPEMyUGFyYW0+PiogY29uc3QgaGVhcFBhcmFtcykgY29uc3QgeworICAgIHN0ZDo6bG9ja19ndWFyZDxzdGQ6Om11dGV4PiBsb2NrKG1NdXRleCk7CisgICAgYm9vbCBwYXJhbVdhc0ludmFsaWQgPSBmYWxzZTsKKyAgICBib29sIHBhcmFtTm90Rm91bmQgPSBmYWxzZTsKKyAgICBib29sIHBhcmFtRGlkTm90Rml0ID0gZmFsc2U7CisgICAgYm9vbCBwYXJhbU5vTWVtb3J5ID0gZmFsc2U7CisKKyAgICBmb3IgKEMyUGFyYW0qIGNvbnN0IHAgOiBzdGFja1BhcmFtcykgeworICAgICAgICBpZiAoISpwKSB7CisgICAgICAgICAgICBwYXJhbVdhc0ludmFsaWQgPSB0cnVlOworICAgICAgICAgICAgcC0+aW52YWxpZGF0ZSgpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgc3RkOjpzaGFyZWRfcHRyPEMyUGFyYW0+IHZhbHVlID0gX21GYWN0b3J5LT5nZXRQYXJhbVZhbHVlKHAtPmluZGV4KCkpOworICAgICAgICAgICAgaWYgKCF2YWx1ZSkgeworICAgICAgICAgICAgICAgIHBhcmFtTm90Rm91bmQgPSB0cnVlOworICAgICAgICAgICAgICAgIHAtPmludmFsaWRhdGUoKTsKKyAgICAgICAgICAgIH0gZWxzZSBpZiAoIXAtPnVwZGF0ZUZyb20oKnZhbHVlKSkgeworICAgICAgICAgICAgICAgIHBhcmFtRGlkTm90Rml0ID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICBwLT5pbnZhbGlkYXRlKCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKKyAgICBmb3IgKGNvbnN0IEMyUGFyYW06OkluZGV4IGl4IDogaGVhcFBhcmFtSW5kaWNlcykgeworICAgICAgICBzdGQ6OnNoYXJlZF9wdHI8QzJQYXJhbT4gdmFsdWUgPSBfbUZhY3RvcnktPmdldFBhcmFtVmFsdWUoaXgpOworICAgICAgICBpZiAodmFsdWUpIHsKKyAgICAgICAgICAgIHN0ZDo6dW5pcXVlX3B0cjxDMlBhcmFtPiBwID0gQzJQYXJhbTo6Q29weSgqdmFsdWUpOworICAgICAgICAgICAgaWYgKHAgIT0gbnVsbHB0cikgeworICAgICAgICAgICAgICAgIGhlYXBQYXJhbXMtPnB1c2hfYmFjayhzdGQ6Om1vdmUocCkpOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBwYXJhbU5vTWVtb3J5ID0gdHJ1ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHBhcmFtTm90Rm91bmQgPSB0cnVlOworICAgICAgICB9CisgICAgfQorCisgICAgcmV0dXJuIHBhcmFtTm9NZW1vcnkgPyBDMl9OT19NRU1PUlkgOgorICAgICAgICAgICBwYXJhbU5vdEZvdW5kID8gQzJfQkFEX0lOREVYIDoKKyAgICAgICAgICAgLy8gdGhlIGZvbGxvd2luZyBlcnJvcnMgYXJlIG5vdCBtYXJrZWQgaW4gdGhlIHJldHVybiB2YWx1ZQorICAgICAgICAgICBwYXJhbURpZE5vdEZpdCA/IEMyX09LIDoKKyAgICAgICAgICAgcGFyYW1XYXNJbnZhbGlkID8gQzJfT0sgOiBDMl9PSzsKK30KKworYzJfc3RhdHVzX3QgQzJJbnRlcmZhY2VIZWxwZXI6OnF1ZXJ5U3VwcG9ydGVkUGFyYW1zKAorICAgICAgICBzdGQ6OnZlY3RvcjxzdGQ6OnNoYXJlZF9wdHI8QzJQYXJhbURlc2NyaXB0b3I+PiAqY29uc3QgcGFyYW1zKSBjb25zdCB7CisgICAgc3RkOjpsb2NrX2d1YXJkPHN0ZDo6bXV0ZXg+IGxvY2sobU11dGV4KTsKKyAgICByZXR1cm4gX21GYWN0b3J5LT5xdWVyeVN1cHBvcnRlZFBhcmFtcyhwYXJhbXMpOworfQorCisKK2MyX3N0YXR1c190IEMySW50ZXJmYWNlSGVscGVyOjpxdWVyeVN1cHBvcnRlZFZhbHVlcygKKyAgICAgICAgc3RkOjp2ZWN0b3I8QzJGaWVsZFN1cHBvcnRlZFZhbHVlc1F1ZXJ5PiAmZmllbGRzLCBjMl9ibG9ja2luZ190IG1heUJsb2NrIF9fdW51c2VkKSBjb25zdCB7CisgICAgc3RkOjpsb2NrX2d1YXJkPHN0ZDo6bXV0ZXg+IGxvY2sobU11dGV4KTsKKyAgICBmb3IgKEMyRmllbGRTdXBwb3J0ZWRWYWx1ZXNRdWVyeSAmcXVlcnkgOiBmaWVsZHMpIHsKKyAgICAgICAgQzJfTE9HKFZFUkJPU0UpIDw8ICJxdWVyeWluZyBmaWVsZCAiIDw8IHF1ZXJ5LmZpZWxkKCk7CisgICAgICAgIEMyUGFyYW06OkluZGV4IGl4ID0gX0MyUGFyYW1JbnNwZWN0b3I6OkdldEluZGV4KHF1ZXJ5LmZpZWxkKCkpOworICAgICAgICBzdGQ6OnNoYXJlZF9wdHI8UGFyYW1IZWxwZXI+IHBhcmFtID0gX21GYWN0b3J5LT5nZXRQYXJhbShpeCk7CisgICAgICAgIGlmICghcGFyYW0pIHsKKyAgICAgICAgICAgIEMyX0xPRyhWRVJCT1NFKSA8PCAiYmFkIHBhcmFtIjsKKyAgICAgICAgICAgIHF1ZXJ5LnN0YXR1cyA9IEMyX0JBRF9JTkRFWDsKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB9CisgICAgICAgIHNpemVfdCBvZmZzID0gR2V0QmFzZU9mZnNldCgKKyAgICAgICAgICAgICAgICBtUmVmbGVjdG9yLCBpeCwKKyAgICAgICAgICAgICAgICBfQzJQYXJhbUluc3BlY3Rvcjo6R2V0T2Zmc2V0KHF1ZXJ5LmZpZWxkKCkpIC0gc2l6ZW9mKEMyUGFyYW0pKTsKKyAgICAgICAgaWYgKH5vZmZzID09IDApIHsKKyAgICAgICAgICAgIEMyX0xPRyhWRVJCT1NFKSA8PCAiZmllbGQgY291bGQgbm90IGJlIGZvdW5kIjsKKyAgICAgICAgICAgIHF1ZXJ5LnN0YXR1cyA9IEMyX05PVF9GT1VORDsKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB9CisgICAgICAgIG9mZnMgKz0gc2l6ZW9mKEMyUGFyYW0pOworICAgICAgICBDMl9MT0coVkVSQk9TRSkgPDwgImZpZWxkIHJlc29sdmVkIHRvICIKKyAgICAgICAgICAgICAgICA8PCBTdHJpbmdQcmludGYoIkAlMDJ6eCslMDJ4Iiwgb2ZmcywgX0MyUGFyYW1JbnNwZWN0b3I6OkdldFNpemUocXVlcnkuZmllbGQoKSkpOworICAgICAgICBzdGQ6OnNoYXJlZF9wdHI8RmllbGRIZWxwZXI+IGZpZWxkID0KKyAgICAgICAgICAgIHBhcmFtLT5maW5kRmllbGQob2ZmcywgX0MyUGFyYW1JbnNwZWN0b3I6OkdldFNpemUocXVlcnkuZmllbGQoKSkpOworICAgICAgICBpZiAoIWZpZWxkKSB7CisgICAgICAgICAgICBDMl9MT0coVkVSQk9TRSkgPDwgImJhZCBmaWVsZCI7CisgICAgICAgICAgICBxdWVyeS5zdGF0dXMgPSBDMl9OT1RfRk9VTkQ7CisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQorCisgICAgICAgIGNvbnN0IEMyRmllbGRTdXBwb3J0ZWRWYWx1ZXMgKnZhbHVlcyA9IG51bGxwdHI7CisgICAgICAgIHN3aXRjaCAocXVlcnkudHlwZSgpKSB7CisgICAgICAgIGNhc2UgQzJGaWVsZFN1cHBvcnRlZFZhbHVlc1F1ZXJ5OjpDVVJSRU5UOgorICAgICAgICAgICAgdmFsdWVzID0gZmllbGQtPmdldFN1cHBvcnRlZFZhbHVlcygpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgQzJGaWVsZFN1cHBvcnRlZFZhbHVlc1F1ZXJ5OjpQT1NTSUJMRToKKyAgICAgICAgICAgIHZhbHVlcyA9IGZpZWxkLT5nZXRQb3NzaWJsZVZhbHVlcygpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBDMl9MT0coVkVSQk9TRSkgPDwgImJhZCBxdWVyeSB0eXBlOiAiIDw8IHF1ZXJ5LnR5cGUoKTsKKyAgICAgICAgICAgIHF1ZXJ5LnN0YXR1cyA9IEMyX0JBRF9WQUxVRTsKKyAgICAgICAgfQorICAgICAgICBpZiAodmFsdWVzKSB7CisgICAgICAgICAgICBxdWVyeS52YWx1ZXMgPSAqdmFsdWVzOworICAgICAgICAgICAgcXVlcnkuc3RhdHVzID0gQzJfT0s7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBDMl9MT0coREVCVUcpIDw8ICJubyB2YWx1ZXMgcHVibGlzaGVkIGJ5IGNvbXBvbmVudCI7CisgICAgICAgICAgICBxdWVyeS5zdGF0dXMgPSBDMl9DT1JSVVBURUQ7CisgICAgICAgIH0KKyAgICB9CisgICAgcmV0dXJuIEMyX09LOworfQorCitzdGQ6OnVuaXF1ZV9sb2NrPHN0ZDo6bXV0ZXg+IEMySW50ZXJmYWNlSGVscGVyOjpsb2NrKCkgY29uc3QgeworICAgIHJldHVybiBzdGQ6OnVuaXF1ZV9sb2NrPHN0ZDo6bXV0ZXg+KG1NdXRleCk7Cit9CmRpZmYgLS1naXQgYS9tZWRpYS9jb2RlYzIvdm5kay91dGlsL0MySW50ZXJmYWNlVXRpbHMuY3BwIGIvbWVkaWEvY29kZWMyL3ZuZGsvdXRpbC9DMkludGVyZmFjZVV0aWxzLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42MWVjOTExCi0tLSAvZGV2L251bGwKKysrIGIvbWVkaWEvY29kZWMyL3ZuZGsvdXRpbC9DMkludGVyZmFjZVV0aWxzLmNwcApAQCAtMCwwICsxLDEyOTIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTcgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworCisjcHJhZ21hIGNsYW5nIGRpYWdub3N0aWMgcHVzaAorI3ByYWdtYSBjbGFuZyBkaWFnbm9zdGljIGlnbm9yZWQgIi1XdW51c2VkLXBhcmFtZXRlciIKKyNwcmFnbWEgY2xhbmcgZGlhZ25vc3RpYyBpZ25vcmVkICItV3VudXNlZC12YXJpYWJsZSIKKyNwcmFnbWEgY2xhbmcgZGlhZ25vc3RpYyBpZ25vcmVkICItV3VudXNlZC12YWx1ZSIKKworI2RlZmluZSBDMl9MT0dfVkVSQk9TRQorCisjaW5jbHVkZSA8QzJEZWJ1Zy5oPgorI2luY2x1ZGUgPEMyUGFyYW0uaD4KKyNpbmNsdWRlIDxDMlBhcmFtRGVmLmg+CisjaW5jbHVkZSA8QzJQYXJhbUludGVybmFsLmg+CisjaW5jbHVkZSA8dXRpbC9DMkludGVyZmFjZVV0aWxzLmg+CisKKyNpbmNsdWRlIDxjbWF0aD4KKyNpbmNsdWRlIDxsaW1pdHM+CisjaW5jbHVkZSA8bWFwPgorI2luY2x1ZGUgPHR5cGVfdHJhaXRzPgorCisjaW5jbHVkZSA8YW5kcm9pZC1iYXNlL3N0cmluZ3ByaW50Zi5oPgorCitzdGQ6Om9zdHJlYW0mIG9wZXJhdG9yPDwoc3RkOjpvc3RyZWFtJiBvcywgY29uc3QgX0MyRmllbGRJZCAmaSk7CisKK3N0ZDo6b3N0cmVhbSYgb3BlcmF0b3I8PChzdGQ6Om9zdHJlYW0mIG9zLCBjb25zdCBDMlBhcmFtRmllbGQgJmkpOworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIEMyU3VwcG9ydGVkUmFuZ2UgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCisvKioKKyAqIEhlbHBlciBjbGFzcyBmb3Igc3VwcG9ydGVkIHZhbHVlcyByYW5nZSBjYWxjdWxhdGlvbnMuCisgKi8KK3RlbXBsYXRlPHR5cGVuYW1lIFQsIGJvb2wgRlA9c3RkOjppc19mbG9hdGluZ19wb2ludDxUPjo6dmFsdWU+CitzdHJ1Y3QgX0MyVHlwZWRTdXBwb3J0ZWRSYW5nZUhlbHBlciB7CisgICAgLyoqCisgICAgICogdHlwZSBvZiByYW5nZSBzaXplOiBhIC0gYiBpZiBhID49IGIgYW5kIGEgYW5kIGIgYXJlIG9mIHR5cGUgVAorICAgICAqLworICAgIHR5cGVkZWYgdHlwZW5hbWUgc3RkOjptYWtlX3Vuc2lnbmVkPFQ+Ojp0eXBlIERpZmZUeXBlOworCisgICAgLyoqCisgICAgICogY2FsY3VsYXRlIChoaWdoIC0gbG93KSBtb2Qgc3RlcAorICAgICAqLworICAgIHN0YXRpYyBEaWZmVHlwZSBtb2QoVCBsb3csIFQgaGlnaCwgVCBzdGVwKSB7CisgICAgICAgIHJldHVybiBEaWZmVHlwZShoaWdoIC0gbG93KSAlIERpZmZUeXBlKHN0ZXApOworICAgIH0KK307CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+CitzdHJ1Y3QgX0MyVHlwZWRTdXBwb3J0ZWRSYW5nZUhlbHBlcjxULCB0cnVlPiB7CisgICAgdHlwZWRlZiBUIERpZmZUeXBlOworCisgICAgc3RhdGljIERpZmZUeXBlIG1vZChUIGxvdywgVCBoaWdoLCBUIHN0ZXApIHsKKyAgICAgICAgcmV0dXJuIGZtb2QoaGlnaCAtIGxvdywgc3RlcCk7CisgICAgfQorfTsKKwordGVtcGxhdGU8dHlwZW5hbWUgVD4KK0MyU3VwcG9ydGVkUmFuZ2U8VD46OkMyU3VwcG9ydGVkUmFuZ2UoY29uc3QgQzJGaWVsZFN1cHBvcnRlZFZhbHVlcyAmdmFsdWVzKSB7CisgICAgaWYgKHZhbHVlcy50eXBlID09IEMyRmllbGRTdXBwb3J0ZWRWYWx1ZXM6OlJBTkdFKSB7CisgICAgICAgIF9tTWluID0gdmFsdWVzLnJhbmdlLm1pbi5yZWY8VmFsdWVUeXBlPigpOworICAgICAgICBfbU1heCA9IHZhbHVlcy5yYW5nZS5tYXgucmVmPFZhbHVlVHlwZT4oKTsKKyAgICAgICAgX21TdGVwID0gdmFsdWVzLnJhbmdlLnN0ZXAucmVmPFZhbHVlVHlwZT4oKTsKKyAgICAgICAgX21OdW0gPSB2YWx1ZXMucmFuZ2UubnVtLnJlZjxWYWx1ZVR5cGU+KCk7CisgICAgICAgIF9tRGVub20gPSB2YWx1ZXMucmFuZ2UuZGVub20ucmVmPFZhbHVlVHlwZT4oKTsKKyAgICB9IGVsc2UgeworICAgICAgICBfbU1pbiA9IE1BWF9WQUxVRTsKKyAgICAgICAgX21NYXggPSBNSU5fVkFMVUU7CisgICAgICAgIF9tU3RlcCA9IE1JTl9TVEVQOworICAgICAgICBfbU51bSA9IDA7CisgICAgICAgIF9tRGVub20gPSAwOworICAgIH0KK30KKwordGVtcGxhdGU8dHlwZW5hbWUgVD4KK2Jvb2wgQzJTdXBwb3J0ZWRSYW5nZTxUPjo6Y29udGFpbnMoVCB2YWx1ZSkgY29uc3QgeworICAgIC8vIHZhbHVlIG11c3QgZmFsbCBiZXR3ZWVuIG1pbiBhbmQgbWF4CisgICAgaWYgKHZhbHVlIDwgX21NaW4gfHwgdmFsdWUgPiBfbU1heCkgeworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorICAgIC8vIHNpbXBsZSByYW5nZXMgY29udGFpbiBhbGwgdmFsdWVzIGJldHdlZW4gbWluIGFuZCBtYXgKKyAgICBpZiAoaXNTaW1wbGVSYW5nZSgpKSB7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyAgICAvLyBtaW4gaXMgYWx3YXlzIHBhcnQgb2YgdGhlIHJhbmdlCisgICAgaWYgKHZhbHVlID09IF9tTWluKSB7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyAgICAvLyBzdGVwcGVkIHJhbmdlcyByZXF1aXJlICh2YWwgLSBtaW4pICUgc3RlcCB0byBiZSB6ZXJvCisgICAgaWYgKGlzQXJpdGhtZXRpY1NlcmllcygpKSB7CisgICAgICAgIHJldHVybiBfQzJUeXBlZFN1cHBvcnRlZFJhbmdlSGVscGVyPFQ+Ojptb2QoX21NaW4sIHZhbHVlLCBfbVN0ZXApID09IDA7CisgICAgfQorICAgIC8vIHB1cmUgZ2VvbWV0cmljIHNlcmllcyByZXF1aXJlICh2YWwgLyBtaW4pIHRvIGJlIGludGVnZXIgbXVsdGlwbGUgb2YgKG51bS9kZW5vbSkKKyAgICBpZiAoaXNHZW9tZXRyaWNTZXJpZXMoKSkgeworICAgICAgICBpZiAodmFsdWUgPD0gMCkgeworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgICAgIGRvdWJsZSBsb2cyYmFzZSA9IGxvZzIoX21OdW0gLyBfbURlbm9tKTsKKyAgICAgICAgZG91YmxlIHBvd2VyID0gbGxyb3VuZChsb2cyKHZhbHVlIC8gZG91YmxlKF9tTWluKSkgLyBsb2cyYmFzZSk7CisgICAgICAgIC8vIFRPRE86IHZhbGlkYXRlIHRoYXQgcmVzdWx0IGZhbGxzIHdpdGhpbiBwcmVjaXNpb24gKG90aGVyIHRoYW4gcm91bmQpCisgICAgICAgIHJldHVybiB2YWx1ZSA9PSBUKF9tTWluICogcG93KF9tTnVtIC8gX21EZW5vbSwgcG93ZXIpICsgTUlOX1NURVAgLyAyKTsKKyAgICB9CisgICAgLy8gbXVsdGlwbHktYWNjdW11bGF0ZSBzZXJpZXMgcmVxdWlyZSB2YWxpZGF0aW5nIGJ5IHdhbGtpbmcgdGhyb3VnaCB0aGUgc2VyaWVzCisgICAgaWYgKGlzTWFjU2VyaWVzKCkpIHsKKyAgICAgICAgZG91YmxlIGxhc3RWYWx1ZSA9IF9tTWluOworICAgICAgICBkb3VibGUgYmFzZSA9IF9tTnVtIC8gX21EZW5vbTsKKyAgICAgICAgd2hpbGUgKHRydWUpIHsKKyAgICAgICAgICAgIC8vIHRoaXMgY2FzdCBpcyBzYWZlIGFzIF9tTWluIDw9IGxhc3RWYWx1ZSA8PSBfbU1heAorICAgICAgICAgICAgaWYgKFQobGFzdFZhbHVlICsgTUlOX1NURVAgLyAyKSA9PSB2YWx1ZSkgeworICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZG91YmxlIG5leHRWYWx1ZSA9IGZtYShsYXN0VmFsdWUsIGJhc2UsIF9tU3RlcCk7CisgICAgICAgICAgICBpZiAobmV4dFZhbHVlIDw9IGxhc3RWYWx1ZSB8fCBuZXh0VmFsdWUgPiBfbU1heCkgeworICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsgLy8gc2VyaWVzIGlzIG5vIGxvbmdlciBtb25vdG9uaWMgb3Igd2l0aGluIHJhbmdlCisgICAgICAgICAgICB9CisgICAgICAgICAgICBsYXN0VmFsdWUgPSBuZXh0VmFsdWU7CisgICAgICAgIH07CisgICAgfQorICAgIC8vIGlmIHdlIGFyZSBoZXJlLCB0aGlzIG11c3QgYmUgYW4gaW52YWxpZCByYW5nZQorICAgIHJldHVybiBmYWxzZTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgVD4KK0MyU3VwcG9ydGVkUmFuZ2U8VD4gQzJTdXBwb3J0ZWRSYW5nZTxUPjo6bGltaXRlZFRvKGNvbnN0IEMyU3VwcG9ydGVkUmFuZ2U8VD4gJmxpbWl0KSBjb25zdCB7CisgICAgLy8gVE9ETyAtIHRoaXMgb25seSB3b3JrcyBmb3Igc2ltcGxlIHJhbmdlcworICAgIHJldHVybiBDMlN1cHBvcnRlZFJhbmdlKHN0ZDo6bWF4KF9tTWluLCBsaW1pdC5fbU1pbiksIHN0ZDo6bWluKF9tTWF4LCBsaW1pdC5fbU1heCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGQ6Om1heChfbVN0ZXAsIGxpbWl0Ll9tU3RlcCkpOworfQorCit0ZW1wbGF0ZSBjbGFzcyBDMlN1cHBvcnRlZFJhbmdlPHVpbnQ4X3Q+OwordGVtcGxhdGUgY2xhc3MgQzJTdXBwb3J0ZWRSYW5nZTxjaGFyPjsKK3RlbXBsYXRlIGNsYXNzIEMyU3VwcG9ydGVkUmFuZ2U8aW50MzJfdD47Cit0ZW1wbGF0ZSBjbGFzcyBDMlN1cHBvcnRlZFJhbmdlPHVpbnQzMl90PjsKKy8vdGVtcGxhdGUgY2xhc3MgQzJTdXBwb3J0ZWRSYW5nZTxjMl9jbnRyMzJfdD47Cit0ZW1wbGF0ZSBjbGFzcyBDMlN1cHBvcnRlZFJhbmdlPGludDY0X3Q+OwordGVtcGxhdGUgY2xhc3MgQzJTdXBwb3J0ZWRSYW5nZTx1aW50NjRfdD47CisvL3RlbXBsYXRlIGNsYXNzIEMyU3VwcG9ydGVkUmFuZ2U8YzJfY250cjY0X3Q+OwordGVtcGxhdGUgY2xhc3MgQzJTdXBwb3J0ZWRSYW5nZTxmbG9hdD47CisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIEMyU3VwcG9ydGVkRmxhZ3MgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworLyoqCisgKiBPcmRlcmVkIHN1cHBvcnRlZCBmbGFnIHNldCBmb3IgYSBmaWVsZCBvZiBhIGdpdmVuIHR5cGUuCisgKi8KKy8vIGZsb2F0IGZsYWdzIGFyZSBub3Qgc3VwcG9ydGVkLCBidXQgZGVmaW5lIGEgZmV3IG1ldGhvZHMgdG8gc3VwcG9ydCBnZW5lcmljIHN1cHBvcnRlZCB2YWx1ZXMgY29kZQordGVtcGxhdGU8PgorYm9vbCBDMlN1cHBvcnRlZEZsYWdzPGZsb2F0Pjo6Y29udGFpbnMoZmxvYXQgdmFsdWUpIGNvbnN0IHsKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK3RlbXBsYXRlPD4KK2NvbnN0IHN0ZDo6dmVjdG9yPGZsb2F0PiBDMlN1cHBvcnRlZEZsYWdzPGZsb2F0Pjo6ZmxhZ3MoKSBjb25zdCB7CisgICAgcmV0dXJuIHN0ZDo6dmVjdG9yPGZsb2F0PigpOworfQorCit0ZW1wbGF0ZTw+CitDMlN1cHBvcnRlZEZsYWdzPGZsb2F0PiBDMlN1cHBvcnRlZEZsYWdzPGZsb2F0Pjo6bGltaXRlZFRvKGNvbnN0IEMyU3VwcG9ydGVkRmxhZ3M8ZmxvYXQ+ICZsaW1pdCkgY29uc3QgeworICAgIHN0ZDo6dmVjdG9yPEMyVmFsdWU6OlByaW1pdGl2ZT4gdmFsdWVzOworICAgIHJldHVybiBDMlN1cHBvcnRlZEZsYWdzKHN0ZDo6bW92ZSh2YWx1ZXMpKTsKK30KKwordGVtcGxhdGU8PgorZmxvYXQgQzJTdXBwb3J0ZWRGbGFnczxmbG9hdD46Om1pbigpIGNvbnN0IHsKKyAgICByZXR1cm4gMDsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgVD4KK2Jvb2wgQzJTdXBwb3J0ZWRGbGFnczxUPjo6Y29udGFpbnMoVCB2YWx1ZSkgY29uc3QgeworICAgIC8vIHZhbHVlIG11c3QgY29udGFpbiB0aGUgbWluaW1hbCBtYXNrCisgICAgVCBtaW5NYXNrID0gbWluKCk7CisgICAgaWYgKH52YWx1ZSAmIG1pbk1hc2spIHsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAgICB2YWx1ZSAmPSB+bWluTWFzazsKKyAgICAvLyBvdGhlcndpc2UsIHJlbW92ZSBmbGFncyBmcm9tIHZhbHVlIGFuZCBzZWUgaWYgd2UgYXJyaXZlIGF0IDAKKyAgICBmb3IgKGNvbnN0IEMyVmFsdWU6OlByaW1pdGl2ZSAmdiA6IF9tVmFsdWVzKSB7CisgICAgICAgIGlmICh2YWx1ZSA9PSAwKSB7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBpZiAoKH52YWx1ZSAmIHYucmVmPFZhbHVlVHlwZT4oKSkgPT0gMCkgeworICAgICAgICAgICAgdmFsdWUgJj0gfnYucmVmPFZhbHVlVHlwZT4oKTsKKyAgICAgICAgfQorICAgIH0KKyAgICByZXR1cm4gdmFsdWUgPT0gMDsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgVD4KK2NvbnN0IHN0ZDo6dmVjdG9yPFQ+IEMyU3VwcG9ydGVkRmxhZ3M8VD46OmZsYWdzKCkgY29uc3QgeworICAgIHN0ZDo6dmVjdG9yPFQ+IHZhbHMoYzJfbWF4KF9tVmFsdWVzLnNpemUoKSwgMXUpIC0gMSk7CisgICAgaWYgKCFfbVZhbHVlcy5lbXB0eSgpKSB7CisgICAgICAgIHN0ZDo6dHJhbnNmb3JtKF9tVmFsdWVzLmNiZWdpbigpICsgMSwgX21WYWx1ZXMuY2VuZCgpLCB2YWxzLmJlZ2luKCksCisgICAgICAgICAgICAgICAgICAgICAgIFtdKGNvbnN0IEMyVmFsdWU6OlByaW1pdGl2ZSAmcCktPlQgeworICAgICAgICAgICAgcmV0dXJuIHAucmVmPFZhbHVlVHlwZT4oKTsKKyAgICAgICAgfSk7CisgICAgfQorICAgIHJldHVybiB2YWxzOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPgorQzJTdXBwb3J0ZWRGbGFnczxUPiBDMlN1cHBvcnRlZEZsYWdzPFQ+OjpsaW1pdGVkVG8oY29uc3QgQzJTdXBwb3J0ZWRGbGFnczxUPiAmbGltaXQpIGNvbnN0IHsKKyAgICBzdGQ6OnZlY3RvcjxDMlZhbHVlOjpQcmltaXRpdmU+IHZhbHVlcyA9IF9tVmFsdWVzOyAvLyBtYWtlIGEgY29weQorICAgIFQgbWluTWFzayA9IG1pbigpIHwgbGltaXQubWluKCk7CisgICAgLy8gbWluaW11bSBtYXNrIG11c3QgYmUgY292ZXJlZCBieSBib3RoIHRoaXMgYW5kIG90aGVyCisgICAgaWYgKGxpbWl0LmNvbnRhaW5zKG1pbk1hc2spICYmIGNvbnRhaW5zKG1pbk1hc2spKSB7CisgICAgICAgIHZhbHVlc1swXSA9IG1pbk1hc2s7CisgICAgICAgIC8vIGtlZXAgb25seSBmbGFncyB0aGF0IGFyZSBjb3ZlcmVkIGJ5IGxpbWl0CisgICAgICAgIHN0ZDo6cmVtb3ZlX2lmKHZhbHVlcy5iZWdpbigpLCB2YWx1ZXMuZW5kKCksIFsmbGltaXQsIG1pbk1hc2tdKGNvbnN0IEMyVmFsdWU6OlByaW1pdGl2ZSAmdikgLT4gYm9vbCB7CisgICAgICAgICAgICBUIHZhbHVlID0gdi5yZWY8VmFsdWVUeXBlPigpIHwgbWluTWFzazsKKyAgICAgICAgICAgIHJldHVybiB2YWx1ZSA9PSBtaW5NYXNrIHx8ICFsaW1pdC5jb250YWlucyh2YWx1ZSk7IH0pOworICAgICAgICAvLyB3ZSBhbHNvIG5lZWQgdG8gZG8gaXQgdmljZSB2ZXJzYQorICAgICAgICBmb3IgKGNvbnN0IEMyVmFsdWU6OlByaW1pdGl2ZSAmdiA6IF9tVmFsdWVzKSB7CisgICAgICAgICAgICBUIHZhbHVlID0gdi5yZWY8VmFsdWVUeXBlPigpIHwgbWluTWFzazsKKyAgICAgICAgICAgIGlmICh2YWx1ZSAhPSBtaW5NYXNrICYmIGNvbnRhaW5zKHZhbHVlKSkgeworICAgICAgICAgICAgICAgIHZhbHVlcy5lbXBsYWNlX2JhY2soKFZhbHVlVHlwZSl2YWx1ZSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisgICAgcmV0dXJuIEMyU3VwcG9ydGVkRmxhZ3Moc3RkOjptb3ZlKHZhbHVlcykpOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPgorVCBDMlN1cHBvcnRlZEZsYWdzPFQ+OjptaW4oKSBjb25zdCB7CisgICAgaWYgKCFfbVZhbHVlcy5lbXB0eSgpKSB7CisgICAgICAgIHJldHVybiBfbVZhbHVlcy5mcm9udCgpLnRlbXBsYXRlIHJlZjxWYWx1ZVR5cGU+KCk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgcmV0dXJuIFQoMCk7CisgICAgfQorfQorCit0ZW1wbGF0ZSBjbGFzcyBDMlN1cHBvcnRlZEZsYWdzPHVpbnQ4X3Q+OwordGVtcGxhdGUgY2xhc3MgQzJTdXBwb3J0ZWRGbGFnczxjaGFyPjsKK3RlbXBsYXRlIGNsYXNzIEMyU3VwcG9ydGVkRmxhZ3M8aW50MzJfdD47Cit0ZW1wbGF0ZSBjbGFzcyBDMlN1cHBvcnRlZEZsYWdzPHVpbnQzMl90PjsKKy8vdGVtcGxhdGUgY2xhc3MgQzJTdXBwb3J0ZWRGbGFnczxjMl9jbnRyMzJfdD47Cit0ZW1wbGF0ZSBjbGFzcyBDMlN1cHBvcnRlZEZsYWdzPGludDY0X3Q+OwordGVtcGxhdGUgY2xhc3MgQzJTdXBwb3J0ZWRGbGFnczx1aW50NjRfdD47CisvL3RlbXBsYXRlIGNsYXNzIEMyU3VwcG9ydGVkRmxhZ3M8YzJfY250cjY0X3Q+OworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBDMlN1cHBvcnRlZFZhbHVlU2V0IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKKy8qKgorICogT3JkZXJlZCBzdXBwb3J0ZWQgdmFsdWUgc2V0IGZvciBhIGZpZWxkIG9mIGEgZ2l2ZW4gdHlwZS4KKyAqLwordGVtcGxhdGU8dHlwZW5hbWUgVD4KK2Jvb2wgQzJTdXBwb3J0ZWRWYWx1ZVNldDxUPjo6Y29udGFpbnMoVCB2YWx1ZSkgY29uc3QgeworICAgIHJldHVybiBzdGQ6OmZpbmRfaWYoX21WYWx1ZXMuY2JlZ2luKCksIF9tVmFsdWVzLmNlbmQoKSwKKyAgICAgICAgICAgIFt2YWx1ZV0oY29uc3QgQzJWYWx1ZTo6UHJpbWl0aXZlICZwKSAtPiBib29sIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gdmFsdWUgPT0gcC5yZWY8VmFsdWVUeXBlPigpOworICAgICAgICAgICAgfSkgIT0gX21WYWx1ZXMuY2VuZCgpOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPgorQzJTdXBwb3J0ZWRWYWx1ZVNldDxUPiBDMlN1cHBvcnRlZFZhbHVlU2V0PFQ+OjpsaW1pdGVkVG8oY29uc3QgQzJTdXBwb3J0ZWRWYWx1ZVNldDxUPiAmbGltaXQpIGNvbnN0IHsKKyAgICBzdGQ6OnZlY3RvcjxDMlZhbHVlOjpQcmltaXRpdmU+IHZhbHVlcyA9IF9tVmFsdWVzOyAvLyBtYWtlIGEgY29weQorICAgIHN0ZDo6cmVtb3ZlX2lmKHZhbHVlcy5iZWdpbigpLCB2YWx1ZXMuZW5kKCksIFsmbGltaXRdKGNvbnN0IEMyVmFsdWU6OlByaW1pdGl2ZSAmdikgLT4gYm9vbCB7CisgICAgICAgIHJldHVybiAhbGltaXQuY29udGFpbnModi5yZWY8VmFsdWVUeXBlPigpKTsgfSk7CisgICAgcmV0dXJuIEMyU3VwcG9ydGVkVmFsdWVTZXQoc3RkOjptb3ZlKHZhbHVlcykpOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPgorQzJTdXBwb3J0ZWRWYWx1ZVNldDxUPiBDMlN1cHBvcnRlZFZhbHVlU2V0PFQ+OjpsaW1pdGVkVG8oY29uc3QgQzJTdXBwb3J0ZWRSYW5nZTxUPiAmbGltaXQpIGNvbnN0IHsKKyAgICBzdGQ6OnZlY3RvcjxDMlZhbHVlOjpQcmltaXRpdmU+IHZhbHVlcyA9IF9tVmFsdWVzOyAvLyBtYWtlIGEgY29weQorICAgIHN0ZDo6cmVtb3ZlX2lmKHZhbHVlcy5iZWdpbigpLCB2YWx1ZXMuZW5kKCksIFsmbGltaXRdKGNvbnN0IEMyVmFsdWU6OlByaW1pdGl2ZSAmdikgLT4gYm9vbCB7CisgICAgICAgIHJldHVybiAhbGltaXQuY29udGFpbnModi5yZWY8VmFsdWVUeXBlPigpKTsgfSk7CisgICAgcmV0dXJuIEMyU3VwcG9ydGVkVmFsdWVTZXQoc3RkOjptb3ZlKHZhbHVlcykpOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPgorQzJTdXBwb3J0ZWRWYWx1ZVNldDxUPiBDMlN1cHBvcnRlZFZhbHVlU2V0PFQ+OjpsaW1pdGVkVG8oY29uc3QgQzJTdXBwb3J0ZWRGbGFnczxUPiAmbGltaXQpIGNvbnN0IHsKKyAgICBzdGQ6OnZlY3RvcjxDMlZhbHVlOjpQcmltaXRpdmU+IHZhbHVlcyA9IF9tVmFsdWVzOyAvLyBtYWtlIGEgY29weQorICAgIHN0ZDo6cmVtb3ZlX2lmKHZhbHVlcy5iZWdpbigpLCB2YWx1ZXMuZW5kKCksIFsmbGltaXRdKGNvbnN0IEMyVmFsdWU6OlByaW1pdGl2ZSAmdikgLT4gYm9vbCB7CisgICAgICAgIHJldHVybiAhbGltaXQuY29udGFpbnModi5yZWY8VmFsdWVUeXBlPigpKTsgfSk7CisgICAgcmV0dXJuIEMyU3VwcG9ydGVkVmFsdWVTZXQoc3RkOjptb3ZlKHZhbHVlcykpOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPgorY29uc3Qgc3RkOjp2ZWN0b3I8VD4gQzJTdXBwb3J0ZWRWYWx1ZVNldDxUPjo6dmFsdWVzKCkgY29uc3QgeworICAgIHN0ZDo6dmVjdG9yPFQ+IHZhbHMoX21WYWx1ZXMuc2l6ZSgpKTsKKyAgICBzdGQ6OnRyYW5zZm9ybShfbVZhbHVlcy5jYmVnaW4oKSwgX21WYWx1ZXMuY2VuZCgpLCB2YWxzLmJlZ2luKCksIFtdKGNvbnN0IEMyVmFsdWU6OlByaW1pdGl2ZSAmcCkgLT4gVCB7CisgICAgICAgIHJldHVybiBwLnJlZjxWYWx1ZVR5cGU+KCk7CisgICAgfSk7CisgICAgcmV0dXJuIHZhbHM7Cit9CisKK3RlbXBsYXRlIGNsYXNzIEMyU3VwcG9ydGVkVmFsdWVTZXQ8dWludDhfdD47Cit0ZW1wbGF0ZSBjbGFzcyBDMlN1cHBvcnRlZFZhbHVlU2V0PGNoYXI+OwordGVtcGxhdGUgY2xhc3MgQzJTdXBwb3J0ZWRWYWx1ZVNldDxpbnQzMl90PjsKK3RlbXBsYXRlIGNsYXNzIEMyU3VwcG9ydGVkVmFsdWVTZXQ8dWludDMyX3Q+OworLy90ZW1wbGF0ZSBjbGFzcyBDMlN1cHBvcnRlZFZhbHVlU2V0PGMyX2NudHIzMl90PjsKK3RlbXBsYXRlIGNsYXNzIEMyU3VwcG9ydGVkVmFsdWVTZXQ8aW50NjRfdD47Cit0ZW1wbGF0ZSBjbGFzcyBDMlN1cHBvcnRlZFZhbHVlU2V0PHVpbnQ2NF90PjsKKy8vdGVtcGxhdGUgY2xhc3MgQzJTdXBwb3J0ZWRWYWx1ZVNldDxjMl9jbnRyNjRfdD47Cit0ZW1wbGF0ZSBjbGFzcyBDMlN1cHBvcnRlZFZhbHVlU2V0PGZsb2F0PjsKKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBDMkZpZWxkU3VwcG9ydGVkVmFsdWVzSGVscGVyIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKwordGVtcGxhdGU8dHlwZW5hbWUgVD4KK3N0cnVjdCBDMkZpZWxkU3VwcG9ydGVkVmFsdWVzSGVscGVyPFQ+OjpJbXBsIHsKKyAgICBJbXBsKGNvbnN0IEMyRmllbGRTdXBwb3J0ZWRWYWx1ZXMgJnZhbHVlcykKKyAgICAgICAgOiBfbVR5cGUodmFsdWVzLnR5cGUpLAorICAgICAgICAgIF9tUmFuZ2UodmFsdWVzKSwKKyAgICAgICAgICBfbVZhbHVlcyh2YWx1ZXMpLAorICAgICAgICAgIF9tRmxhZ3ModmFsdWVzKSB7IH0KKworICAgIGJvb2wgc3VwcG9ydHMoVCB2YWx1ZSkgY29uc3Q7CisKK3ByaXZhdGU6CisgICAgdHlwZWRlZiB0eXBlbmFtZSBfQzJGaWVsZFZhbHVlSGVscGVyPFQ+OjpWYWx1ZVR5cGUgVmFsdWVUeXBlOworICAgIEMyRmllbGRTdXBwb3J0ZWRWYWx1ZXM6OnR5cGVfdCBfbVR5cGU7CisgICAgQzJTdXBwb3J0ZWRSYW5nZTxWYWx1ZVR5cGU+IF9tUmFuZ2U7CisgICAgQzJTdXBwb3J0ZWRWYWx1ZVNldDxWYWx1ZVR5cGU+IF9tVmFsdWVzOworICAgIEMyU3VwcG9ydGVkVmFsdWVTZXQ8VmFsdWVUeXBlPiBfbUZsYWdzOworCisvLyAgICBmcmllbmQgc3RkOjpvc3RyZWFtJiBvcGVyYXRvcjw8IDxUPihzdGQ6Om9zdHJlYW0mIG9zLCBjb25zdCBDMkZpZWxkU3VwcG9ydGVkVmFsdWVzSGVscGVyPFQ+OjpJbXBsICZpKTsKKy8vICAgIGZyaWVuZCBzdGQ6Om9zdHJlYW0mIG9wZXJhdG9yPDwoc3RkOjpvc3RyZWFtJiBvcywgY29uc3QgSW1wbCAmaSk7CisgICAgc3RkOjpvc3RyZWFtJiBzdHJlYW1PdXQoc3RkOjpvc3RyZWFtJiBvcykgY29uc3Q7Cit9OworCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPgorYm9vbCBDMkZpZWxkU3VwcG9ydGVkVmFsdWVzSGVscGVyPFQ+OjpJbXBsOjpzdXBwb3J0cyhUIHZhbHVlKSBjb25zdCB7CisgICAgc3dpdGNoIChfbVR5cGUpIHsKKyAgICAgICAgY2FzZSBDMkZpZWxkU3VwcG9ydGVkVmFsdWVzOjpSQU5HRTogcmV0dXJuIF9tUmFuZ2UuY29udGFpbnModmFsdWUpOworICAgICAgICBjYXNlIEMyRmllbGRTdXBwb3J0ZWRWYWx1ZXM6OlZBTFVFUzogcmV0dXJuIF9tVmFsdWVzLmNvbnRhaW5zKHZhbHVlKTsKKyAgICAgICAgY2FzZSBDMkZpZWxkU3VwcG9ydGVkVmFsdWVzOjpGTEFHUzogcmV0dXJuIF9tRmxhZ3MuY29udGFpbnModmFsdWUpOworICAgICAgICBkZWZhdWx0OiByZXR1cm4gZmFsc2U7CisgICAgfQorfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPgorQzJGaWVsZFN1cHBvcnRlZFZhbHVlc0hlbHBlcjxUPjo6QzJGaWVsZFN1cHBvcnRlZFZhbHVlc0hlbHBlcihjb25zdCBDMkZpZWxkU3VwcG9ydGVkVmFsdWVzICZ2YWx1ZXMpCisgICAgOiBfbUltcGwoc3RkOjptYWtlX3VuaXF1ZTxDMkZpZWxkU3VwcG9ydGVkVmFsdWVzSGVscGVyPFQ+OjpJbXBsPih2YWx1ZXMpKSB7IH0KKwordGVtcGxhdGU8dHlwZW5hbWUgVD4KK0MyRmllbGRTdXBwb3J0ZWRWYWx1ZXNIZWxwZXI8VD46On5DMkZpZWxkU3VwcG9ydGVkVmFsdWVzSGVscGVyKCkgPSBkZWZhdWx0OworCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPgorYm9vbCBDMkZpZWxkU3VwcG9ydGVkVmFsdWVzSGVscGVyPFQ+OjpzdXBwb3J0cyhUIHZhbHVlKSBjb25zdCB7CisgICAgcmV0dXJuIF9tSW1wbC0+c3VwcG9ydHModmFsdWUpOworfQorCit0ZW1wbGF0ZSBjbGFzcyBDMkZpZWxkU3VwcG9ydGVkVmFsdWVzSGVscGVyPHVpbnQ4X3Q+OwordGVtcGxhdGUgY2xhc3MgQzJGaWVsZFN1cHBvcnRlZFZhbHVlc0hlbHBlcjxjaGFyPjsKK3RlbXBsYXRlIGNsYXNzIEMyRmllbGRTdXBwb3J0ZWRWYWx1ZXNIZWxwZXI8aW50MzJfdD47Cit0ZW1wbGF0ZSBjbGFzcyBDMkZpZWxkU3VwcG9ydGVkVmFsdWVzSGVscGVyPHVpbnQzMl90PjsKKy8vdGVtcGxhdGUgY2xhc3MgQzJGaWVsZFN1cHBvcnRlZFZhbHVlc0hlbHBlcjxjMl9jbnRyMzJfdD47Cit0ZW1wbGF0ZSBjbGFzcyBDMkZpZWxkU3VwcG9ydGVkVmFsdWVzSGVscGVyPGludDY0X3Q+OwordGVtcGxhdGUgY2xhc3MgQzJGaWVsZFN1cHBvcnRlZFZhbHVlc0hlbHBlcjx1aW50NjRfdD47CisvL3RlbXBsYXRlIGNsYXNzIEMyRmllbGRTdXBwb3J0ZWRWYWx1ZXNIZWxwZXI8YzJfY250cjY0X3Q+OwordGVtcGxhdGUgY2xhc3MgQzJGaWVsZFN1cHBvcnRlZFZhbHVlc0hlbHBlcjxmbG9hdD47CisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIEMyUGFyYW1GaWVsZFZhbHVlc0J1aWxkZXIgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKwordGVtcGxhdGU8dHlwZW5hbWUgVD4KK3N0cnVjdCBDMlBhcmFtRmllbGRWYWx1ZXNCdWlsZGVyPFQ+OjpJbXBsIHsKKyAgICBJbXBsKGNvbnN0IEMyUGFyYW1GaWVsZCAmZmllbGQpCisgICAgICAgIDogX21QYXJhbUZpZWxkKGZpZWxkKSwKKyAgICAgICAgICBfbVR5cGUodHlwZV90OjpSQU5HRSksCisgICAgICAgICAgX21EZWZpbmVkKGZhbHNlKSwKKyAgICAgICAgICBfbVJhbmdlKEMyU3VwcG9ydGVkUmFuZ2U8VD46OkFueSgpKSwKKyAgICAgICAgICBfbVZhbHVlcyhDMlN1cHBvcnRlZFZhbHVlU2V0PFQ+OjpOb25lKCkpLAorICAgICAgICAgIF9tRmxhZ3MoQzJTdXBwb3J0ZWRGbGFnczxUPjo6Tm9uZSgpKSB7IH0KKworICAgIC8qKgorICAgICAqIEdldCBDMlBhcmFtRmllbGRWYWx1ZXMgZnJvbSB0aGlzIGJ1aWxkZXIuCisgICAgICovCisgICAgb3BlcmF0b3IgQzJQYXJhbUZpZWxkVmFsdWVzKCkgY29uc3QgeworICAgICAgICBpZiAoIV9tRGVmaW5lZCkgeworICAgICAgICAgICAgcmV0dXJuIEMyUGFyYW1GaWVsZFZhbHVlcyhfbVBhcmFtRmllbGQpOworICAgICAgICB9CisgICAgICAgIHN3aXRjaCAoX21UeXBlKSB7CisgICAgICAgIGNhc2UgdHlwZV90OjpFTVBUWToKKyAgICAgICAgY2FzZSB0eXBlX3Q6OlZBTFVFUzoKKyAgICAgICAgICAgIHJldHVybiBDMlBhcmFtRmllbGRWYWx1ZXMoX21QYXJhbUZpZWxkLCAoQzJGaWVsZFN1cHBvcnRlZFZhbHVlcylfbVZhbHVlcyk7CisgICAgICAgIGNhc2UgdHlwZV90OjpSQU5HRToKKyAgICAgICAgICAgIHJldHVybiBDMlBhcmFtRmllbGRWYWx1ZXMoX21QYXJhbUZpZWxkLCAoQzJGaWVsZFN1cHBvcnRlZFZhbHVlcylfbVJhbmdlKTsKKyAgICAgICAgY2FzZSB0eXBlX3Q6OkZMQUdTOgorICAgICAgICAgICAgcmV0dXJuIEMyUGFyYW1GaWVsZFZhbHVlcyhfbVBhcmFtRmllbGQsIChDMkZpZWxkU3VwcG9ydGVkVmFsdWVzKV9tRmxhZ3MpOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgLy8gVFJFU1BBU1MKKyAgICAgICAgICAgIC8vIHNob3VsZCBuZXZlciBnZXQgaGVyZQorICAgICAgICAgICAgcmV0dXJuIEMyUGFyYW1GaWVsZFZhbHVlcyhfbVBhcmFtRmllbGQpOworICAgICAgICB9CisgICAgfQorCisgICAgLyoqIERlZmluZSB0aGUgc3VwcG9ydGVkIHZhbHVlcyBhcyB0aGUgY3VycmVudGx5IHN1cHBvcnRlZCB2YWx1ZXMgb2YgdGhpcyBidWlsZGVyLiAqLworICAgIHZvaWQgYW55KCkgeworICAgICAgICBfbURlZmluZWQgPSB0cnVlOworICAgIH0KKworICAgIC8qKiBSZXN0cmljdCAoYW5kIHRodXMgZGVmaW5lKSB0aGUgc3VwcG9ydGVkIHZhbHVlcyB0byBub25lLiAqLworICAgIHZvaWQgbm9uZSgpIHsKKyAgICAgICAgX21EZWZpbmVkID0gdHJ1ZTsKKyAgICAgICAgX21UeXBlID0gdHlwZV90OjpWQUxVRVM7CisgICAgICAgIF9tVmFsdWVzLmNsZWFyKCk7CisgICAgfQorCisgICAgLyoqIFJlc3RyaWN0IChhbmQgdGh1cyBkZWZpbmUpIHRoZSBzdXBwb3J0ZWQgdmFsdWVzIHRvIHx2YWx1ZXwgYWxvbmUuICovCisgICAgdm9pZCBlcXVhbFRvKFQgdmFsdWUpIHsKKyAgICAgICAgIHJldHVybiBsaW1pdFRvKEMyU3VwcG9ydGVkVmFsdWVTZXQ8VD46Ok9uZU9mKHt2YWx1ZX0pKTsKKyAgICB9CisKKyAgICAvKiogUmVzdHJpY3QgKGFuZCB0aHVzIGRlZmluZSkgdGhlIHN1cHBvcnRlZCB2YWx1ZXMgdG8gYSB2YWx1ZSBzZXQuICovCisgICAgdm9pZCBsaW1pdFRvKGNvbnN0IEMyU3VwcG9ydGVkVmFsdWVTZXQ8VD4gJmxpbWl0KSB7CisgICAgICAgIGlmICghX21EZWZpbmVkKSB7CisgICAgICAgICAgICBDMl9MT0coVkVSQk9TRSkgPDwgIk5BLmxpbWl0VG8oIiA8PCBDMkZpZWxkU3VwcG9ydGVkVmFsdWVzSGVscGVyPFQ+KGxpbWl0KSA8PCAiKSI7CisKKyAgICAgICAgICAgIC8vIHNob3J0Y3V0IGZvciBmaXJzdCBsaW1pdCBhcHBsaWVkCisgICAgICAgICAgICBfbURlZmluZWQgPSB0cnVlOworICAgICAgICAgICAgX21WYWx1ZXMgPSBsaW1pdDsKKyAgICAgICAgICAgIF9tVHlwZSA9IF9tVmFsdWVzLmlzRW1wdHkoKSA/IHR5cGVfdDo6RU1QVFkgOiB0eXBlX3Q6OlZBTFVFUzsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHN3aXRjaCAoX21UeXBlKSB7CisgICAgICAgICAgICBjYXNlIHR5cGVfdDo6RU1QVFk6CisgICAgICAgICAgICBjYXNlIHR5cGVfdDo6VkFMVUVTOgorICAgICAgICAgICAgICAgIEMyX0xPRyhWRVJCT1NFKSA8PCAiKCIgPDwgQzJGaWVsZFN1cHBvcnRlZFZhbHVlc0hlbHBlcjxUPihfbVZhbHVlcykgPDwgIikubGltaXRUbygiCisgICAgICAgICAgICAgICAgICAgICAgICA8PCBDMkZpZWxkU3VwcG9ydGVkVmFsdWVzSGVscGVyPFQ+KGxpbWl0KSA8PCAiKSI7CisKKyAgICAgICAgICAgICAgICBfbVZhbHVlcyA9IF9tVmFsdWVzLmxpbWl0ZWRUbyhsaW1pdCk7CisgICAgICAgICAgICAgICAgX21UeXBlID0gX21WYWx1ZXMuaXNFbXB0eSgpID8gdHlwZV90OjpFTVBUWSA6IHR5cGVfdDo6VkFMVUVTOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSB0eXBlX3Q6OlJBTkdFOgorICAgICAgICAgICAgICAgIEMyX0xPRyhWRVJCT1NFKSA8PCAiKCIgPDwgQzJGaWVsZFN1cHBvcnRlZFZhbHVlc0hlbHBlcjxUPihfbVJhbmdlKSA8PCAiKS5saW1pdFRvKCIKKyAgICAgICAgICAgICAgICAgICAgICAgIDw8IEMyRmllbGRTdXBwb3J0ZWRWYWx1ZXNIZWxwZXI8VD4obGltaXQpIDw8ICIpIjsKKworICAgICAgICAgICAgICAgIF9tVmFsdWVzID0gbGltaXQubGltaXRlZFRvKF9tUmFuZ2UpOworICAgICAgICAgICAgICAgIF9tVHlwZSA9IF9tVmFsdWVzLmlzRW1wdHkoKSA/IHR5cGVfdDo6RU1QVFkgOiB0eXBlX3Q6OlZBTFVFUzsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgdHlwZV90OjpGTEFHUzoKKyAgICAgICAgICAgICAgICBDMl9MT0coVkVSQk9TRSkgPDwgIigiIDw8IEMyRmllbGRTdXBwb3J0ZWRWYWx1ZXNIZWxwZXI8VD4oX21SYW5nZSkgPDwgIikubGltaXRUbygiCisgICAgICAgICAgICAgICAgICAgICAgICA8PCBDMkZpZWxkU3VwcG9ydGVkVmFsdWVzSGVscGVyPFQ+KGxpbWl0KSA8PCAiKSI7CisKKyAgICAgICAgICAgICAgICBfbVZhbHVlcyA9IGxpbWl0LmxpbWl0ZWRUbyhfbUZsYWdzKTsKKyAgICAgICAgICAgICAgICBfbVR5cGUgPSBfbVZhbHVlcy5pc0VtcHR5KCkgPyB0eXBlX3Q6OkVNUFRZIDogdHlwZV90OjpWQUxVRVM7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgIEMyX0xPRyhGQVRBTCk7IC8vIHNob3VsZCBub3QgYmUgaGVyZQorICAgICAgICAgICAgfQorICAgICAgICAgICAgLy8gVE9ETzogc3VwcG9ydCBmbGFncworICAgICAgICB9CisgICAgICAgIEMyX0xPRyhWRVJCT1NFKSA8PCAiID0gIiA8PCBfbVR5cGUgPDwgIjoiIDw8IEMyRmllbGRTdXBwb3J0ZWRWYWx1ZXNIZWxwZXI8VD4oX21WYWx1ZXMpOworICAgIH0KKworICAgIC8qKiBSZXN0cmljdCAoYW5kIHRodXMgZGVmaW5lKSB0aGUgc3VwcG9ydGVkIHZhbHVlcyB0byBhIGZsYWcgc2V0LiAqLworICAgIHZvaWQgbGltaXRUbyhjb25zdCBDMlN1cHBvcnRlZEZsYWdzPFQ+ICZsaW1pdCkgeworICAgICAgICBpZiAoIV9tRGVmaW5lZCkgeworICAgICAgICAgICAgQzJfTE9HKFZFUkJPU0UpIDw8ICJOQS5saW1pdFRvKCIgPDwgQzJGaWVsZFN1cHBvcnRlZFZhbHVlc0hlbHBlcjxUPihsaW1pdCkgPDwgIikiOworCisgICAgICAgICAgICAvLyBzaG9ydGN1dCBmb3IgZmlyc3QgbGltaXQgYXBwbGllZAorICAgICAgICAgICAgX21EZWZpbmVkID0gdHJ1ZTsKKyAgICAgICAgICAgIF9tRmxhZ3MgPSBsaW1pdDsKKyAgICAgICAgICAgIF9tVHlwZSA9IF9tRmxhZ3MuaXNFbXB0eSgpID8gdHlwZV90OjpFTVBUWSA6IHR5cGVfdDo6RkxBR1M7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBzd2l0Y2ggKF9tVHlwZSkgeworICAgICAgICAgICAgY2FzZSB0eXBlX3Q6OkVNUFRZOgorICAgICAgICAgICAgY2FzZSB0eXBlX3Q6OlZBTFVFUzoKKyAgICAgICAgICAgICAgICBDMl9MT0coVkVSQk9TRSkgPDwgIigiIDw8IEMyRmllbGRTdXBwb3J0ZWRWYWx1ZXNIZWxwZXI8VD4oX21WYWx1ZXMpIDw8ICIpLmxpbWl0VG8oIgorICAgICAgICAgICAgICAgICAgICAgICAgPDwgQzJGaWVsZFN1cHBvcnRlZFZhbHVlc0hlbHBlcjxUPihsaW1pdCkgPDwgIikiOworCisgICAgICAgICAgICAgICAgX21WYWx1ZXMgPSBfbVZhbHVlcy5saW1pdGVkVG8obGltaXQpOworICAgICAgICAgICAgICAgIF9tVHlwZSA9IF9tVmFsdWVzLmlzRW1wdHkoKSA/IHR5cGVfdDo6RU1QVFkgOiB0eXBlX3Q6OlZBTFVFUzsKKyAgICAgICAgICAgICAgICBDMl9MT0coVkVSQk9TRSkgPDwgIiA9ICIgPDwgX21UeXBlIDw8ICI6IiA8PCBDMkZpZWxkU3VwcG9ydGVkVmFsdWVzSGVscGVyPFQ+KF9tVmFsdWVzKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgdHlwZV90OjpGTEFHUzoKKyAgICAgICAgICAgICAgICBDMl9MT0coVkVSQk9TRSkgPDwgIigiIDw8IEMyRmllbGRTdXBwb3J0ZWRWYWx1ZXNIZWxwZXI8VD4oX21GbGFncykgPDwgIikubGltaXRUbygiCisgICAgICAgICAgICAgICAgICAgICAgICA8PCBDMkZpZWxkU3VwcG9ydGVkVmFsdWVzSGVscGVyPFQ+KGxpbWl0KSA8PCAiKSI7CisKKyAgICAgICAgICAgICAgICBfbUZsYWdzID0gX21GbGFncy5saW1pdGVkVG8obGltaXQpOworICAgICAgICAgICAgICAgIF9tVHlwZSA9IF9tRmxhZ3MuaXNFbXB0eSgpID8gdHlwZV90OjpFTVBUWSA6IHR5cGVfdDo6RkxBR1M7CisgICAgICAgICAgICAgICAgQzJfTE9HKFZFUkJPU0UpIDw8ICIgPSAiIDw8IF9tVHlwZSA8PCAiOiIgPDwgQzJGaWVsZFN1cHBvcnRlZFZhbHVlc0hlbHBlcjxUPihfbUZsYWdzKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgdHlwZV90OjpSQU5HRToKKyAgICAgICAgICAgICAgICBDMl9MT0coRkFUQUwpIDw8ICJsaW1pdGluZyByYW5nZXMgdG8gZmxhZ3MgaXMgbm90IHN1cHBvcnRlZCI7CisgICAgICAgICAgICAgICAgX21UeXBlID0gdHlwZV90OjpFTVBUWTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgQzJfTE9HKEZBVEFMKTsgLy8gc2hvdWxkIG5vdCBiZSBoZXJlCisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKKyAgICB2b2lkIGxpbWl0VG8oY29uc3QgQzJTdXBwb3J0ZWRSYW5nZTxUPiAmbGltaXQpIHsKKyAgICAgICAgaWYgKCFfbURlZmluZWQpIHsKKyAgICAgICAgICAgIEMyX0xPRyhWRVJCT1NFKSA8PCAiTkEubGltaXRUbygiIDw8IEMyRmllbGRTdXBwb3J0ZWRWYWx1ZXNIZWxwZXI8VD4obGltaXQpIDw8ICIpIjsKKworICAgICAgICAgICAgLy8gc2hvcnRjdXQgZm9yIGZpcnN0IGxpbWl0IGFwcGxpZWQKKyAgICAgICAgICAgIF9tRGVmaW5lZCA9IHRydWU7CisgICAgICAgICAgICBfbVJhbmdlID0gbGltaXQ7CisgICAgICAgICAgICBfbVR5cGUgPSBfbVJhbmdlLmlzRW1wdHkoKSA/IHR5cGVfdDo6RU1QVFkgOiB0eXBlX3Q6OlJBTkdFOworICAgICAgICAgICAgQzJfTE9HKFZFUkJPU0UpIDw8ICIgPSAiIDw8IF9tVHlwZSA8PCAiOiIgPDwgQzJGaWVsZFN1cHBvcnRlZFZhbHVlc0hlbHBlcjxUPihfbVJhbmdlKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHN3aXRjaCAoX21UeXBlKSB7CisgICAgICAgICAgICBjYXNlIHR5cGVfdDo6RU1QVFk6CisgICAgICAgICAgICBjYXNlIHR5cGVfdDo6VkFMVUVTOgorICAgICAgICAgICAgICAgIEMyX0xPRyhWRVJCT1NFKSA8PCAiKCIgPDwgQzJGaWVsZFN1cHBvcnRlZFZhbHVlc0hlbHBlcjxUPihfbVZhbHVlcykgPDwgIikubGltaXRUbygiCisgICAgICAgICAgICAgICAgICAgICAgICA8PCBDMkZpZWxkU3VwcG9ydGVkVmFsdWVzSGVscGVyPFQ+KGxpbWl0KSA8PCAiKSI7CisgICAgICAgICAgICAgICAgX21WYWx1ZXMgPSBfbVZhbHVlcy5saW1pdGVkVG8obGltaXQpOworICAgICAgICAgICAgICAgIF9tVHlwZSA9IF9tVmFsdWVzLmlzRW1wdHkoKSA/IHR5cGVfdDo6RU1QVFkgOiB0eXBlX3Q6OlZBTFVFUzsKKyAgICAgICAgICAgICAgICBDMl9MT0coVkVSQk9TRSkgPDwgIiA9ICIgPDwgX21UeXBlIDw8ICI6IiA8PCBDMkZpZWxkU3VwcG9ydGVkVmFsdWVzSGVscGVyPFQ+KF9tVmFsdWVzKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgdHlwZV90OjpGTEFHUzoKKyAgICAgICAgICAgICAgICBDMl9MT0coRkFUQUwpIDw8ICJsaW1pdGluZyBmbGFncyB0byByYW5nZXMgaXMgbm90IHN1cHBvcnRlZCI7CisgICAgICAgICAgICAgICAgX21UeXBlID0gdHlwZV90OjpFTVBUWTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgdHlwZV90OjpSQU5HRToKKyAgICAgICAgICAgICAgICBDMl9MT0coVkVSQk9TRSkgPDwgIigiIDw8IEMyRmllbGRTdXBwb3J0ZWRWYWx1ZXNIZWxwZXI8VD4oX21SYW5nZSkgPDwgIikubGltaXRUbygiCisgICAgICAgICAgICAgICAgICAgICAgICA8PCBDMkZpZWxkU3VwcG9ydGVkVmFsdWVzSGVscGVyPFQ+KGxpbWl0KSA8PCAiKSI7CisgICAgICAgICAgICAgICAgX21SYW5nZSA9IF9tUmFuZ2UubGltaXRlZFRvKGxpbWl0KTsKKyAgICAgICAgICAgICAgICBDMl9EQ0hFQ0soX21WYWx1ZXMuaXNFbXB0eSgpKTsKKyAgICAgICAgICAgICAgICBfbVR5cGUgPSBfbVJhbmdlLmlzRW1wdHkoKSA/IHR5cGVfdDo6RU1QVFkgOiB0eXBlX3Q6OlJBTkdFOworICAgICAgICAgICAgICAgIEMyX0xPRyhWRVJCT1NFKSA8PCAiID0gIiA8PCBfbVR5cGUgPDwgIjoiIDw8IEMyRmllbGRTdXBwb3J0ZWRWYWx1ZXNIZWxwZXI8VD4oX21SYW5nZSk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgIEMyX0xPRyhGQVRBTCk7IC8vIHNob3VsZCBub3QgYmUgaGVyZQorICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCitwcml2YXRlOgorICAgIHZvaWQgaW5zdGFudGlhdGUoKSBfX3VudXNlZCB7CisgICAgICAgICh2b2lkKV9tVmFsdWVzLnZhbHVlcygpOyAvLyBpbnN0YW50aWF0ZSBub24tY29uc3QgdmFsdWVzKCkKKyAgICB9CisKKyAgICB2b2lkIGluc3RhbnRpYXRlKCkgY29uc3QgX191bnVzZWQgeworICAgICAgICAodm9pZClfbVZhbHVlcy52YWx1ZXMoKTsgLy8gaW5zdGFudGlhdGUgY29uc3QgdmFsdWVzKCkKKyAgICB9CisKKyAgICB0eXBlZGVmIEMyRmllbGRTdXBwb3J0ZWRWYWx1ZXM6OnR5cGVfdCB0eXBlX3Q7CisKKyAgICBDMlBhcmFtRmllbGQgX21QYXJhbUZpZWxkOworICAgIHR5cGVfdCBfbVR5cGU7CisgICAgYm9vbCBfbURlZmluZWQ7CisgICAgQzJTdXBwb3J0ZWRSYW5nZTxUPiBfbVJhbmdlOworICAgIEMyU3VwcG9ydGVkVmFsdWVTZXQ8VD4gX21WYWx1ZXM7CisgICAgQzJTdXBwb3J0ZWRGbGFnczxUPiBfbUZsYWdzOworCit9OworCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPgorQzJQYXJhbUZpZWxkVmFsdWVzQnVpbGRlcjxUPjo6b3BlcmF0b3IgQzJQYXJhbUZpZWxkVmFsdWVzKCkgY29uc3QgeworICAgIHJldHVybiAoQzJQYXJhbUZpZWxkVmFsdWVzKSgqX21JbXBsLmdldCgpKTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgVD4KK0MyUGFyYW1GaWVsZFZhbHVlc0J1aWxkZXI8VD46OkMyUGFyYW1GaWVsZFZhbHVlc0J1aWxkZXIoY29uc3QgQzJQYXJhbUZpZWxkICZmaWVsZCkKKyAgICA6IF9tSW1wbChzdGQ6Om1ha2VfdW5pcXVlPEMyUGFyYW1GaWVsZFZhbHVlc0J1aWxkZXI8VD46OkltcGw+KGZpZWxkKSkgeyB9CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+CitDMlBhcmFtRmllbGRWYWx1ZXNCdWlsZGVyPFQ+ICZDMlBhcmFtRmllbGRWYWx1ZXNCdWlsZGVyPFQ+OjphbnkoKSB7CisgICAgX21JbXBsLT5hbnkoKTsKKyAgICByZXR1cm4gKnRoaXM7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+CitDMlBhcmFtRmllbGRWYWx1ZXNCdWlsZGVyPFQ+ICZDMlBhcmFtRmllbGRWYWx1ZXNCdWlsZGVyPFQ+Ojpub25lKCkgeworICAgIF9tSW1wbC0+bm9uZSgpOworICAgIHJldHVybiAqdGhpczsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgVD4KK0MyUGFyYW1GaWVsZFZhbHVlc0J1aWxkZXI8VD4gJkMyUGFyYW1GaWVsZFZhbHVlc0J1aWxkZXI8VD46OmVxdWFsVG8oVCB2YWx1ZSkgeworICAgIF9tSW1wbC0+ZXF1YWxUbyh2YWx1ZSk7CisgICAgcmV0dXJuICp0aGlzOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPgorQzJQYXJhbUZpZWxkVmFsdWVzQnVpbGRlcjxUPiAmQzJQYXJhbUZpZWxkVmFsdWVzQnVpbGRlcjxUPjo6bGltaXRUbyhjb25zdCBDMlN1cHBvcnRlZFZhbHVlU2V0PFQ+ICZsaW1pdCkgeworICAgIF9tSW1wbC0+bGltaXRUbyhsaW1pdCk7CisgICAgcmV0dXJuICp0aGlzOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPgorQzJQYXJhbUZpZWxkVmFsdWVzQnVpbGRlcjxUPiAmQzJQYXJhbUZpZWxkVmFsdWVzQnVpbGRlcjxUPjo6bGltaXRUbyhjb25zdCBDMlN1cHBvcnRlZEZsYWdzPFQ+ICZsaW1pdCkgeworICAgIF9tSW1wbC0+bGltaXRUbyhsaW1pdCk7CisgICAgcmV0dXJuICp0aGlzOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPgorQzJQYXJhbUZpZWxkVmFsdWVzQnVpbGRlcjxUPiAmQzJQYXJhbUZpZWxkVmFsdWVzQnVpbGRlcjxUPjo6bGltaXRUbyhjb25zdCBDMlN1cHBvcnRlZFJhbmdlPFQ+ICZsaW1pdCkgeworICAgIF9tSW1wbC0+bGltaXRUbyhsaW1pdCk7CisgICAgcmV0dXJuICp0aGlzOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPgorQzJQYXJhbUZpZWxkVmFsdWVzQnVpbGRlcjxUPjo6QzJQYXJhbUZpZWxkVmFsdWVzQnVpbGRlcihjb25zdCBDMlBhcmFtRmllbGRWYWx1ZXNCdWlsZGVyPFQ+ICZvdGhlcikKKyAgICA6IF9tSW1wbChzdGQ6Om1ha2VfdW5pcXVlPEMyUGFyYW1GaWVsZFZhbHVlc0J1aWxkZXI8VD46OkltcGw+KCpvdGhlci5fbUltcGwuZ2V0KCkpKSB7IH0KKwordGVtcGxhdGU8dHlwZW5hbWUgVD4KK0MyUGFyYW1GaWVsZFZhbHVlc0J1aWxkZXI8VD4gJkMyUGFyYW1GaWVsZFZhbHVlc0J1aWxkZXI8VD46Om9wZXJhdG9yPSgKKyAgICAgICAgY29uc3QgQzJQYXJhbUZpZWxkVmFsdWVzQnVpbGRlcjxUPiAmb3RoZXIpIHsKKyAgICBfbUltcGwgPSBzdGQ6Om1ha2VfdW5pcXVlPEMyUGFyYW1GaWVsZFZhbHVlc0J1aWxkZXI8VD46OkltcGw+KCpvdGhlci5fbUltcGwuZ2V0KCkpOworICAgIHJldHVybiAqdGhpczsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgVD4KK0MyUGFyYW1GaWVsZFZhbHVlc0J1aWxkZXI8VD46On5DMlBhcmFtRmllbGRWYWx1ZXNCdWlsZGVyKCkgPSBkZWZhdWx0OworCit0ZW1wbGF0ZSBjbGFzcyBDMlBhcmFtRmllbGRWYWx1ZXNCdWlsZGVyPHVpbnQ4X3Q+OwordGVtcGxhdGUgY2xhc3MgQzJQYXJhbUZpZWxkVmFsdWVzQnVpbGRlcjxjaGFyPjsKK3RlbXBsYXRlIGNsYXNzIEMyUGFyYW1GaWVsZFZhbHVlc0J1aWxkZXI8aW50MzJfdD47Cit0ZW1wbGF0ZSBjbGFzcyBDMlBhcmFtRmllbGRWYWx1ZXNCdWlsZGVyPHVpbnQzMl90PjsKKy8vdGVtcGxhdGUgY2xhc3MgQzJQYXJhbUZpZWxkVmFsdWVzQnVpbGRlcjxjMl9jbnRyMzJfdD47Cit0ZW1wbGF0ZSBjbGFzcyBDMlBhcmFtRmllbGRWYWx1ZXNCdWlsZGVyPGludDY0X3Q+OwordGVtcGxhdGUgY2xhc3MgQzJQYXJhbUZpZWxkVmFsdWVzQnVpbGRlcjx1aW50NjRfdD47CisvL3RlbXBsYXRlIGNsYXNzIEMyUGFyYW1GaWVsZFZhbHVlc0J1aWxkZXI8YzJfY250cjY0X3Q+OwordGVtcGxhdGUgY2xhc3MgQzJQYXJhbUZpZWxkVmFsdWVzQnVpbGRlcjxmbG9hdD47CisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gQzJTZXR0aW5nUmVzdWx0QnVpbGRlciAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKK0MyU2V0dGluZ0NvbmZsaWN0c0J1aWxkZXI6OkMyU2V0dGluZ0NvbmZsaWN0c0J1aWxkZXIoKSA6IF9tQ29uZmxpY3RzKCkgeyB9CisKK0MyU2V0dGluZ0NvbmZsaWN0c0J1aWxkZXI6OkMyU2V0dGluZ0NvbmZsaWN0c0J1aWxkZXIoQzJQYXJhbUZpZWxkVmFsdWVzICYmY29uZmxpY3QpIHsKKyAgICBfbUNvbmZsaWN0cy5lbXBsYWNlX2JhY2soc3RkOjptb3ZlKGNvbmZsaWN0KSk7Cit9CisKK0MyU2V0dGluZ0NvbmZsaWN0c0J1aWxkZXImIEMyU2V0dGluZ0NvbmZsaWN0c0J1aWxkZXI6OndpdGgoQzJQYXJhbUZpZWxkVmFsdWVzICYmY29uZmxpY3QpIHsKKyAgICBfbUNvbmZsaWN0cy5lbXBsYWNlX2JhY2soc3RkOjptb3ZlKGNvbmZsaWN0KSk7CisgICAgcmV0dXJuICp0aGlzOworfQorCitzdGQ6OnZlY3RvcjxDMlBhcmFtRmllbGRWYWx1ZXM+IEMyU2V0dGluZ0NvbmZsaWN0c0J1aWxkZXI6OnJldHJpZXZlQ29uZmxpY3RzKCkgeworICAgIHJldHVybiBzdGQ6Om1vdmUoX21Db25mbGljdHMpOworfQorCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIEMyU2V0dGluZ1Jlc3VsdC9zQnVpbGRlciAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKK0MyU2V0dGluZ1Jlc3VsdCBDMlNldHRpbmdSZXN1bHRCdWlsZGVyOjpSZWFkT25seShjb25zdCBDMlBhcmFtRmllbGQgJnBhcmFtKSB7CisgICAgcmV0dXJuIEMyU2V0dGluZ1Jlc3VsdCB7IEMyU2V0dGluZ1Jlc3VsdDo6UkVBRF9PTkxZLCB7IHBhcmFtIH0sIHsgfSB9OworfQorCitDMlNldHRpbmdSZXN1bHQgQzJTZXR0aW5nUmVzdWx0QnVpbGRlcjo6QmFkVmFsdWUoY29uc3QgQzJQYXJhbUZpZWxkICZwYXJhbUZpZWxkLCBib29sIGlzSW5mbykgeworICAgIHJldHVybiB7IGlzSW5mbyA/IEMyU2V0dGluZ1Jlc3VsdDo6SU5GT19CQURfVkFMVUUgOiBDMlNldHRpbmdSZXN1bHQ6OkJBRF9WQUxVRSwKKyAgICAgICAgICAgICB7IHBhcmFtRmllbGQgfSwgeyB9IH07Cit9CisKK0MyU2V0dGluZ1Jlc3VsdCBDMlNldHRpbmdSZXN1bHRCdWlsZGVyOjpDb25mbGljdCgKKyAgICAgICAgQzJQYXJhbUZpZWxkVmFsdWVzICYmcGFyYW1GaWVsZFZhbHVlcywgQzJTZXR0aW5nQ29uZmxpY3RzQnVpbGRlciAmY29uZmxpY3RzLCBib29sIGlzSW5mbykgeworICAgIEMyX0NIRUNLKCFjb25mbGljdHMuZW1wdHkoKSk7CisgICAgaWYgKGlzSW5mbykgeworICAgICAgICByZXR1cm4gQzJTZXR0aW5nUmVzdWx0IHsKKyAgICAgICAgICAgIEMyU2V0dGluZ1Jlc3VsdDo6SU5GT19DT05GTElDVCwKKyAgICAgICAgICAgIHN0ZDo6bW92ZShwYXJhbUZpZWxkVmFsdWVzKSwgY29uZmxpY3RzLnJldHJpZXZlQ29uZmxpY3RzKCkKKyAgICAgICAgfTsKKyAgICB9IGVsc2UgeworICAgICAgICByZXR1cm4gQzJTZXR0aW5nUmVzdWx0IHsKKyAgICAgICAgICAgIEMyU2V0dGluZ1Jlc3VsdDo6Q09ORkxJQ1QsCisgICAgICAgICAgICBzdGQ6Om1vdmUocGFyYW1GaWVsZFZhbHVlcyksIGNvbmZsaWN0cy5yZXRyaWV2ZUNvbmZsaWN0cygpCisgICAgICAgIH07CisgICAgfQorfQorCitDMlNldHRpbmdSZXN1bHRzQnVpbGRlcjo6QzJTZXR0aW5nUmVzdWx0c0J1aWxkZXIoQzJTZXR0aW5nUmVzdWx0ICYmcmVzdWx0KQorICAgICAgICA6IF9tU3RhdHVzKEMyX0JBRF9WQUxVRSkgeworICAgIF9tUmVzdWx0cy5lbXBsYWNlX2JhY2sobmV3IEMyU2V0dGluZ1Jlc3VsdChzdGQ6Om1vdmUocmVzdWx0KSkpOworfQorCitDMlNldHRpbmdSZXN1bHRzQnVpbGRlciBDMlNldHRpbmdSZXN1bHRzQnVpbGRlcjo6cGx1cyhDMlNldHRpbmdSZXN1bHRzQnVpbGRlciYmIHJlc3VsdHMpIHsKKyAgICBmb3IgKHN0ZDo6dW5pcXVlX3B0cjxDMlNldHRpbmdSZXN1bHQ+ICZyIDogcmVzdWx0cy5fbVJlc3VsdHMpIHsKKyAgICAgICAgX21SZXN1bHRzLmVtcGxhY2VfYmFjayhzdGQ6Om1vdmUocikpOworICAgIH0KKyAgICByZXN1bHRzLl9tUmVzdWx0cy5jbGVhcigpOworICAgIC8vIFRPRE86IG1TdGF0dXMKKyAgICByZXR1cm4gc3RkOjptb3ZlKCp0aGlzKTsKK30KKworYzJfc3RhdHVzX3QgQzJTZXR0aW5nUmVzdWx0c0J1aWxkZXI6OnJldHJpZXZlRmFpbHVyZXMoCisgICAgICAgIHN0ZDo6dmVjdG9yPHN0ZDo6dW5pcXVlX3B0cjxDMlNldHRpbmdSZXN1bHQ+PiogY29uc3QgZmFpbHVyZXMpIHsKKyAgICBmb3IgKHN0ZDo6dW5pcXVlX3B0cjxDMlNldHRpbmdSZXN1bHQ+ICZyIDogX21SZXN1bHRzKSB7CisgICAgICAgIGZhaWx1cmVzLT5lbXBsYWNlX2JhY2soc3RkOjptb3ZlKHIpKTsKKyAgICB9CisgICAgX21SZXN1bHRzLmNsZWFyKCk7CisgICAgcmV0dXJuIF9tU3RhdHVzOworfQorCitDMlNldHRpbmdSZXN1bHRzQnVpbGRlcjo6QzJTZXR0aW5nUmVzdWx0c0J1aWxkZXIoYzJfc3RhdHVzX3Qgc3RhdHVzKSA6IF9tU3RhdHVzKHN0YXR1cykgeworICAgIC8vIHN0YXR1cyBtdXN0IGJlIG9uZSBvZiBPSywgQkFEX1NUQVRFLCBUSU1FRF9PVVQgb3IgQ09SUlVQVEVECisgICAgLy8gbWFpbmx5OiBCTE9DS0lORywgQkFEX0lOREVYLCBCQURfVkFMVUUgYW5kIE5PX01FTU9SWSByZXF1aXJlcyBhIHNldHRpbmcgYXR0ZW1wdAorfQorCisjcHJhZ21hIGNsYW5nIGRpYWdub3N0aWMgcG9wCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gQzJGaWVsZFV0aWxzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworc3RydWN0IEMyX0hJREUgQzJGaWVsZFV0aWxzOjpfSW5zcGVjdG9yIHsKKyAgICAvLy8gcmV0dXJucyB0aGUgaW1wbGVtZW50YXRpb24gb2JqZWN0CisgICAgaW5saW5lIHN0YXRpYyBzdGQ6OnNoYXJlZF9wdHI8SW5mbzo6SW1wbD4gR2V0SW1wbChjb25zdCBJbmZvICZpbmZvKSB7CisgICAgICAgIHJldHVybiBpbmZvLl9tSW1wbDsKKyAgICB9Cit9OworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIEMyRmllbGRVdGlsczo6SW5mbyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKK3N0cnVjdCBDMl9ISURFIEMyRmllbGRVdGlsczo6SW5mbzo6SW1wbCB7CisgICAgQzJGaWVsZERlc2NyaXB0b3IgZmllbGQ7CisgICAgc3RkOjpzaGFyZWRfcHRyPEltcGw+IHBhcmVudDsKKyAgICB1aW50MzJfdCBpbmRleDsKKyAgICB1aW50MzJfdCBkZXB0aDsKKyAgICB1aW50MzJfdCBiYXNlRmllbGRPZmZzZXQ7CisgICAgdWludDMyX3QgYXJyYXlPZmZzZXQ7CisgICAgdWludDMyX3QgdXNlZEV4dGVudDsKKworICAgIC8vLyBjcmVhdGVzIGEgY29weSBvZiB0aGlzIG9iamVjdCBpbmNsdWRpbmcgY29waWVzIG9mIGl0cyBwYXJlbnQgY2hhaW4KKyAgICBJbXBsIGNsb25lKCkgY29uc3Q7CisKKyAgICAvLy8gY3JlYXRlcyBhIGNvcHkgb2YgYSBzaGFyZWQgcG9pbnRlciB0byBhbiBvYmplY3QKKyAgICBzdGF0aWMgc3RkOjpzaGFyZWRfcHRyPEltcGw+IENsb25lKGNvbnN0IHN0ZDo6c2hhcmVkX3B0cjxJbXBsPiAmKTsKKworICAgIEltcGwoY29uc3QgQzJGaWVsZERlc2NyaXB0b3IgJmZpZWxkXywgc3RkOjpzaGFyZWRfcHRyPEltcGw+IHBhcmVudF8sCisgICAgICAgICAgICB1aW50MzJfdCBpbmRleF8sIHVpbnQzMl90IGRlcHRoXywgdWludDMyX3QgYmFzZUZpZWxkT2Zmc2V0XywKKyAgICAgICAgICAgIHVpbnQzMl90IGFycmF5T2Zmc2V0XywgdWludDMyX3QgdXNlZEV4dGVudF8pCisgICAgICAgIDogZmllbGQoZmllbGRfKSwgcGFyZW50KHBhcmVudF8pLCBpbmRleChpbmRleF8pLCBkZXB0aChkZXB0aF8pLAorICAgICAgICAgIGJhc2VGaWVsZE9mZnNldChiYXNlRmllbGRPZmZzZXRfKSwgYXJyYXlPZmZzZXQoYXJyYXlPZmZzZXRfKSwgdXNlZEV4dGVudCh1c2VkRXh0ZW50XykgeyB9Cit9OworCitzdGQ6OnNoYXJlZF9wdHI8QzJGaWVsZFV0aWxzOjpJbmZvOjpJbXBsPiBDMkZpZWxkVXRpbHM6OkluZm86OkltcGw6OkNsb25lKGNvbnN0IHN0ZDo6c2hhcmVkX3B0cjxJbXBsPiAmaW5mbykgeworICAgIGlmIChpbmZvKSB7CisgICAgICAgIHJldHVybiBzdGQ6Om1ha2Vfc2hhcmVkPEltcGw+KGluZm8tPmNsb25lKCkpOworICAgIH0KKyAgICByZXR1cm4gbnVsbHB0cjsKK30KKworQzJGaWVsZFV0aWxzOjpJbmZvOjpJbXBsIEMyRmllbGRVdGlsczo6SW5mbzo6SW1wbDo6Y2xvbmUoKSBjb25zdCB7CisgICAgSW1wbCByZXMgPSBJbXBsKCp0aGlzKTsKKyAgICByZXMucGFyZW50ID0gQ2xvbmUocmVzLnBhcmVudCk7CisgICAgcmV0dXJuIHJlczsKK30KKworQzJGaWVsZFV0aWxzOjpJbmZvOjpJbmZvKHN0ZDo6c2hhcmVkX3B0cjxJbXBsPiBpbXBsKQorICAgIDogX21JbXBsKGltcGwpIHsgfQorCitzaXplX3QgQzJGaWVsZFV0aWxzOjpJbmZvOjphcnJheU9mZnNldCgpIGNvbnN0IHsKKyAgICByZXR1cm4gX21JbXBsLT5hcnJheU9mZnNldDsKK30KKworc2l6ZV90IEMyRmllbGRVdGlsczo6SW5mbzo6YXJyYXlTaXplKCkgY29uc3QgeworICAgIHJldHVybiBleHRlbnQoKSAqIHNpemUoKTsKK30KKworc2l6ZV90IEMyRmllbGRVdGlsczo6SW5mbzo6YmFzZUZpZWxkT2Zmc2V0KCkgY29uc3QgeworICAgIHJldHVybiBfbUltcGwtPmJhc2VGaWVsZE9mZnNldDsKK307CisKK3NpemVfdCBDMkZpZWxkVXRpbHM6OkluZm86OmRlcHRoKCkgY29uc3QgeworICAgIHJldHVybiBfbUltcGwtPmRlcHRoOworfQorCitzaXplX3QgQzJGaWVsZFV0aWxzOjpJbmZvOjpleHRlbnQoKSBjb25zdCB7CisgICAgcmV0dXJuIF9tSW1wbC0+dXNlZEV4dGVudDsKK30KKworc2l6ZV90IEMyRmllbGRVdGlsczo6SW5mbzo6aW5kZXgoKSBjb25zdCB7CisgICAgcmV0dXJuIF9tSW1wbC0+aW5kZXg7Cit9CisKK2Jvb2wgQzJGaWVsZFV0aWxzOjpJbmZvOjppc0FyaXRobWV0aWMoKSBjb25zdCB7CisgICAgc3dpdGNoIChfbUltcGwtPmZpZWxkLnR5cGUoKSkgeworICAgIGNhc2UgQzJGaWVsZERlc2NyaXB0b3I6OkJMT0I6CisgICAgY2FzZSBDMkZpZWxkRGVzY3JpcHRvcjo6Q05UUjMyOgorICAgIGNhc2UgQzJGaWVsZERlc2NyaXB0b3I6OkNOVFI2NDoKKyAgICBjYXNlIEMyRmllbGREZXNjcmlwdG9yOjpGTE9BVDoKKyAgICBjYXNlIEMyRmllbGREZXNjcmlwdG9yOjpJTlQzMjoKKyAgICBjYXNlIEMyRmllbGREZXNjcmlwdG9yOjpJTlQ2NDoKKyAgICBjYXNlIEMyRmllbGREZXNjcmlwdG9yOjpTVFJJTkc6CisgICAgY2FzZSBDMkZpZWxkRGVzY3JpcHRvcjo6VUlOVDMyOgorICAgIGNhc2UgQzJGaWVsZERlc2NyaXB0b3I6OlVJTlQ2NDoKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgZGVmYXVsdDoKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KK30KKworYm9vbCBDMkZpZWxkVXRpbHM6OkluZm86OmlzRmxleGlibGUoKSBjb25zdCB7CisgICAgcmV0dXJuIF9tSW1wbC0+ZmllbGQuZXh0ZW50KCkgPT0gMDsKK30KKworQzJTdHJpbmcgQzJGaWVsZFV0aWxzOjpJbmZvOjpuYW1lKCkgY29uc3QgeworICAgIHJldHVybiBfbUltcGwtPmZpZWxkLm5hbWUoKTsKK30KKworY29uc3QgQzJGaWVsZFV0aWxzOjpJbmZvOjpOYW1lZFZhbHVlc1R5cGUgJkMyRmllbGRVdGlsczo6SW5mbzo6bmFtZWRWYWx1ZXMoKSBjb25zdCB7CisgICAgcmV0dXJuIF9tSW1wbC0+ZmllbGQubmFtZWRWYWx1ZXMoKTsKK30KKworc2l6ZV90IEMyRmllbGRVdGlsczo6SW5mbzo6b2Zmc2V0KCkgY29uc3QgeworICAgIHJldHVybiBfQzJQYXJhbUluc3BlY3Rvcjo6R2V0T2Zmc2V0KF9tSW1wbC0+ZmllbGQpOworfQorCitDMkZpZWxkVXRpbHM6OkluZm8gQzJGaWVsZFV0aWxzOjpJbmZvOjpwYXJlbnQoKSBjb25zdCB7CisgICAgcmV0dXJuIEluZm8oX21JbXBsLT5wYXJlbnQpOworfTsKKworc2l6ZV90IEMyRmllbGRVdGlsczo6SW5mbzo6c2l6ZSgpIGNvbnN0IHsKKyAgICByZXR1cm4gX0MyUGFyYW1JbnNwZWN0b3I6OkdldFNpemUoX21JbXBsLT5maWVsZCk7Cit9CisKK0MyRmllbGRVdGlsczo6SW5mbzo6dHlwZV90IEMyRmllbGRVdGlsczo6SW5mbzo6dHlwZSgpIGNvbnN0IHsKKyAgICByZXR1cm4gX21JbXBsLT5maWVsZC50eXBlKCk7Cit9CisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gQzJGaWVsZFV0aWxzOjpJdGVyYXRvciAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKK3N0cnVjdCBDMl9ISURFIEMyRmllbGRVdGlsczo6SXRlcmF0b3I6OkltcGwgOiBwdWJsaWMgX0MyUGFyYW1JbnNwZWN0b3IgeworICAgIEltcGwoKSA9IGRlZmF1bHQ7CisKKyAgICB2aXJ0dWFsIH5JbXBsKCkgPSBkZWZhdWx0OworCisgICAgLy8vIGltcGxlbWVudHMgb2JqZWN0IGVxdWFsaXR5CisgICAgdmlydHVhbCBib29sIGVxdWFscyhjb25zdCBzdGQ6OnNoYXJlZF9wdHI8SW1wbD4gJm90aGVyKSBjb25zdCB7CisgICAgICAgIHJldHVybiBvdGhlciAhPSBudWxscHRyICYmIG1IZWFkID09IG90aGVyLT5tSGVhZDsKKyAgICB9OworCisgICAgLy8vIHJldHVybnMgdGhlIGluZm8gcG9pbnRlZCB0byBieSB0aGlzIGl0ZXJhdG9yCisgICAgdmlydHVhbCB2YWx1ZV90eXBlIGdldCgpIGNvbnN0IHsKKyAgICAgICAgcmV0dXJuIEluZm8obUhlYWQpOworICAgIH0KKworICAgIC8vLyBpbmNyZW1lbnRzIHRoaXMgaXRlcmF0b3IKKyAgICB2aXJ0dWFsIHZvaWQgaW5jcmVtZW50KCkgeworICAgICAgICAvLyBub3RlOiB0aGlzIGNhbm5vdCBiZSBhYnN0cmFjdCBhcyB3ZSBpbnN0YW50aWF0ZSB0aGlzIGZvciBMaXN0OjplbmQoKS4gaW5jcmVtZW50IHRvIGVuZCgpCisgICAgICAgIC8vIGluc3RlYWQuCisgICAgICAgIG1IZWFkLnJlc2V0KCk7CisgICAgfQorCitwcm90ZWN0ZWQ6CisgICAgSW1wbChzdGQ6OnNoYXJlZF9wdHI8QzJGaWVsZFV0aWxzOjpJbmZvOjpJbXBsPiBoZWFkKQorICAgICAgICA6IG1IZWFkKGhlYWQpIHsgfQorCisgICAgc3RkOjpzaGFyZWRfcHRyPEluZm86OkltcGw+IG1IZWFkOyAvLy88IGN1cnJlbnQgZmllbGQKK307CisKK0MyRmllbGRVdGlsczo6SXRlcmF0b3I6Okl0ZXJhdG9yKHN0ZDo6c2hhcmVkX3B0cjxJbXBsPiBpbXBsKQorICAgIDogbUltcGwoaW1wbCkgeyB9CisKK0MyRmllbGRVdGlsczo6SXRlcmF0b3I6OnZhbHVlX3R5cGUgQzJGaWVsZFV0aWxzOjpJdGVyYXRvcjo6b3BlcmF0b3IqKCkgY29uc3QgeworICAgIHJldHVybiBtSW1wbC0+Z2V0KCk7Cit9CisKK0MyRmllbGRVdGlsczo6SXRlcmF0b3ImIEMyRmllbGRVdGlsczo6SXRlcmF0b3I6Om9wZXJhdG9yKysoKSB7CisgICAgbUltcGwtPmluY3JlbWVudCgpOworICAgIHJldHVybiAqdGhpczsKK30KKworYm9vbCBDMkZpZWxkVXRpbHM6Okl0ZXJhdG9yOjpvcGVyYXRvcj09KGNvbnN0IEl0ZXJhdG9yICZvdGhlcikgY29uc3QgeworICAgIHJldHVybiBtSW1wbC0+ZXF1YWxzKG90aGVyLm1JbXBsKTsKK30KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBDMkZpZWxkVXRpbHM6Okxpc3QgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCitzdHJ1Y3QgQzJfSElERSBDMkZpZWxkVXRpbHM6Okxpc3Q6OkltcGwgeworICAgIHZpcnR1YWwgc3RkOjpzaGFyZWRfcHRyPEl0ZXJhdG9yOjpJbXBsPiBiZWdpbigpIGNvbnN0ID0gMDsKKworICAgIC8vLyByZXR1cm5zIGFuIGl0ZXJhdG9yIHRvIHRoZSBlbmQgb2YgdGhlIGxpc3QKKyAgICB2aXJ0dWFsIHN0ZDo6c2hhcmVkX3B0cjxJdGVyYXRvcjo6SW1wbD4gZW5kKCkgY29uc3QgeworICAgICAgICByZXR1cm4gc3RkOjptYWtlX3NoYXJlZDxJdGVyYXRvcjo6SW1wbD4oKTsKKyAgICB9CisKKyAgICB2aXJ0dWFsIH5JbXBsKCkgPSBkZWZhdWx0OworfTsKKworQzJGaWVsZFV0aWxzOjpMaXN0OjpMaXN0KHN0ZDo6c2hhcmVkX3B0cjxJbXBsPiBpbXBsKQorICAgIDogbUltcGwoaW1wbCkgeyB9CisKK0MyRmllbGRVdGlsczo6SXRlcmF0b3IgQzJGaWVsZFV0aWxzOjpMaXN0OjpiZWdpbigpIGNvbnN0IHsKKyAgICByZXR1cm4gQzJGaWVsZFV0aWxzOjpJdGVyYXRvcihtSW1wbC0+YmVnaW4oKSk7Cit9CisKK0MyRmllbGRVdGlsczo6SXRlcmF0b3IgQzJGaWVsZFV0aWxzOjpMaXN0OjplbmQoKSBjb25zdCB7CisgICAgcmV0dXJuIEMyRmllbGRVdGlsczo6SXRlcmF0b3IobUltcGwtPmVuZCgpKTsKK30KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBDMkZpZWxkVXRpbHM6OmVudW1lcmF0ZUZpZWxkcyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKK25hbWVzcGFjZSB7CisKKy8qKgorICogSXRlcmF0b3IgYmFzZSBjbGFzcyBoZWxwZXIgdGhhdCBhbGxvd3MgZGVzY2VuZGluZyBpbnRvIHRoZSBmaWVsZCBoaWVyYXJjaHkuCisgKi8KK3N0cnVjdCBDMkZpZWxkVXRpbHNGaWVsZHNJdGVyYXRvckhlbHBlciA6IHB1YmxpYyBDMkZpZWxkVXRpbHM6Okl0ZXJhdG9yOjpJbXBsIHsKKyAgICB2aXJ0dWFsIH5DMkZpZWxkVXRpbHNGaWVsZHNJdGVyYXRvckhlbHBlcigpIG92ZXJyaWRlID0gZGVmYXVsdDsKKworICAgIC8vLyByZXR1cm5zIHRoZSBiYXNlLWZpZWxkJ3Mgb2Zmc2V0IG9mIHRoZSBwYXJlbnQgZmllbGQgKG9yIHRoZSBwYXJhbSBvZmZzZXQgaWYgbm8gcGFyZW50KQorICAgIHN0YXRpYyBpbmxpbmUgdWludDMyX3QgR2V0UGFyZW50QmFzZUZpZWxkT2Zmc2V0KAorICAgICAgICAgICAgY29uc3Qgc3RkOjpzaGFyZWRfcHRyPEMyRmllbGRVdGlsczo6SW5mbzo6SW1wbD4gcGFyZW50KSB7CisgICAgICAgIHJldHVybiBwYXJlbnQgPT0gbnVsbHB0ciA/IHNpemVvZihDMlBhcmFtKSA6IHBhcmVudC0+YmFzZUZpZWxkT2Zmc2V0OworICAgIH0KKworICAgIC8vLyByZXR1cm5zIHRoZSBvZmZzZXQgb2YgdGhlIHBhcmVudCBmaWVsZCAob3IgdGhlIHBhcmFtKQorICAgIHN0YXRpYyBpbmxpbmUgdWludDMyX3QgR2V0UGFyZW50T2Zmc2V0KGNvbnN0IHN0ZDo6c2hhcmVkX3B0cjxDMkZpZWxkVXRpbHM6OkluZm86OkltcGw+IHBhcmVudCkgeworICAgICAgICByZXR1cm4gcGFyZW50ID09IG51bGxwdHIgPyBzaXplb2YoQzJQYXJhbSkgOiBHZXRPZmZzZXQocGFyZW50LT5maWVsZCk7CisgICAgfQorCitwcm90ZWN0ZWQ6CisgICAgQzJGaWVsZFV0aWxzRmllbGRzSXRlcmF0b3JIZWxwZXIoCisgICAgICAgICAgICBzdGQ6OnNoYXJlZF9wdHI8QzJQYXJhbVJlZmxlY3Rvcj4gcmVmbGVjdG9yLAorICAgICAgICAgICAgdWludDMyX3QgcGFyYW1TaXplLAorICAgICAgICAgICAgc3RkOjpzaGFyZWRfcHRyPEMyRmllbGRVdGlsczo6SW5mbzo6SW1wbD4gaGVhZCA9IG51bGxwdHIpCisgICAgICAgIDogQzJGaWVsZFV0aWxzOjpJdGVyYXRvcjo6SW1wbChoZWFkKSwKKyAgICAgICAgICBtUGFyYW1TaXplKHBhcmFtU2l6ZSksCisgICAgICAgICAgbVJlZmxlY3RvcihyZWZsZWN0b3IpIHsgfQorCisgICAgLy8vIHJldHVybnMgYSBsZWFmIGluZm8gb2JqZWN0IGF0IGEgc3BlY2lmaWMgaW5kZXggZm9yIGEgY2hpbGQgZmllbGQKKyAgICBzdGQ6OnNoYXJlZF9wdHI8QzJGaWVsZFV0aWxzOjpJbmZvOjpJbXBsPiBtYWtlTGVhZigKKyAgICAgICAgICAgIGNvbnN0IEMyRmllbGREZXNjcmlwdG9yICZmaWVsZCwgdWludDMyX3QgaW5kZXgpIHsKKyAgICAgICAgdWludDMyX3QgcGFyZW50T2Zmc2V0ID0gR2V0UGFyZW50T2Zmc2V0KG1IZWFkKTsKKyAgICAgICAgdWludDMyX3QgYXJyYXlPZmZzZXQgPSBwYXJlbnRPZmZzZXQgKyBHZXRPZmZzZXQoZmllbGQpOworICAgICAgICB1aW50MzJfdCB1c2VkRXh0ZW50ID0gZmllbGQuZXh0ZW50KCkgPyA6CisgICAgICAgICAgICAgICAgKHN0ZDo6bWF4KGFycmF5T2Zmc2V0LCBtUGFyYW1TaXplKSAtIGFycmF5T2Zmc2V0KSAvIEdldFNpemUoZmllbGQpOworCisgICAgICAgIHJldHVybiBzdGQ6Om1ha2Vfc2hhcmVkPEMyRmllbGRVdGlsczo6SW5mbzo6SW1wbD4oCisgICAgICAgICAgICAgICAgT2Zmc2V0RmllbGREZXNjcmlwdG9yKGZpZWxkLCBwYXJlbnRPZmZzZXQgKyBpbmRleCAqIEdldFNpemUoZmllbGQpKSwKKyAgICAgICAgICAgICAgICBtSGVhZCAvKiBwYXJlbnQgKi8sIGluZGV4LCBtSGVhZCA9PSBudWxscHRyID8gMCA6IG1IZWFkLT5kZXB0aCArIDEsCisgICAgICAgICAgICAgICAgR2V0UGFyZW50QmFzZUZpZWxkT2Zmc2V0KG1IZWFkKSArIEdldE9mZnNldChmaWVsZCksCisgICAgICAgICAgICAgICAgYXJyYXlPZmZzZXQsIHVzZWRFeHRlbnQpOworICAgIH0KKworICAgIC8vLyByZXR1cm5zIHdoZXRoZXIgdGhpcyBzdHJ1Y3QgaW5kZXggaGF2ZSBiZWVuIHRyYXZlcnNlZCB0byBnZXQgdG8gdGhpcyBmaWVsZAorICAgIGJvb2wgdmlzaXRlZChDMlBhcmFtOjpDb3JlSW5kZXggaW5kZXgpIGNvbnN0IHsKKyAgICAgICAgZm9yIChjb25zdCBzdGQ6OnNoYXJlZF9wdHI8QzJTdHJ1Y3REZXNjcmlwdG9yPiAmc2QgOiBtSGlzdG9yeSkgeworICAgICAgICAgICAgaWYgKHNkLT5jb3JlSW5kZXgoKSA9PSBpbmRleCkgeworICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICB1aW50MzJfdCBtUGFyYW1TaXplOworICAgIHN0ZDo6c2hhcmVkX3B0cjxDMlBhcmFtUmVmbGVjdG9yPiBtUmVmbGVjdG9yOworICAgIHN0ZDo6dmVjdG9yPHN0ZDo6c2hhcmVkX3B0cjxDMlN0cnVjdERlc2NyaXB0b3I+PiBtSGlzdG9yeTsgLy8gc3RydWN0dXJlIHR5cGVzIHZpc2l0ZWQKK307CisKKy8qKgorICogSXRlcmF0b3IgaW1wbGVtZW50aW5nIGVudW1lcmF0ZUZpZWxkcygpIHRoYXQgdmlzaXRzIGVhY2ggYmFzZSBmaWVsZC4KKyAqLworc3RydWN0IEMyRmllbGRVdGlsc0ZpZWxkc0l0ZXJhdG9yIDogcHVibGljIEMyRmllbGRVdGlsc0ZpZWxkc0l0ZXJhdG9ySGVscGVyIHsKKyAgICAvLy8gZW51bWVyYXRlIGJhc2UgZmllbGRzIG9mIGEgcGFyYW1ldGVyCisgICAgQzJGaWVsZFV0aWxzRmllbGRzSXRlcmF0b3IoY29uc3QgQzJQYXJhbSAmcGFyYW0sIHN0ZDo6c2hhcmVkX3B0cjxDMlBhcmFtUmVmbGVjdG9yPiByZWZsZWN0b3IpCisgICAgICAgIDogQzJGaWVsZFV0aWxzRmllbGRzSXRlcmF0b3JIZWxwZXIocmVmbGVjdG9yLCBwYXJhbS5zaXplKCkpIHsKKyAgICAgICAgZGVzY2VuZEludG8ocGFyYW0uY29yZUluZGV4KCkpOworICAgIH0KKworICAgIC8vLyBlbnVtZXJhdGUgYmFzZSBmaWVsZHMgb2YgYSBmaWVsZAorICAgIEMyRmllbGRVdGlsc0ZpZWxkc0l0ZXJhdG9yKHN0ZDo6c2hhcmVkX3B0cjxDMkZpZWxkVXRpbHNGaWVsZHNJdGVyYXRvcj4gaW1wbCkKKyAgICAgICAgOiBDMkZpZWxkVXRpbHNGaWVsZHNJdGVyYXRvckhlbHBlcihpbXBsLT5tUmVmbGVjdG9yLCBpbXBsLT5tUGFyYW1TaXplLCBpbXBsLT5tSGVhZCkgeworICAgICAgICBtSGlzdG9yeSA9IGltcGwtPm1IaXN0b3J5OworICAgICAgICBpZiAobUhlYWQtPmZpZWxkLnR5cGUoKSAmIEMyRmllbGREZXNjcmlwdG9yOjpTVFJVQ1RfRkxBRykgeworICAgICAgICAgICAgQzJQYXJhbTo6Q29yZUluZGV4IGluZGV4ID0geyBtSGVhZC0+ZmllbGQudHlwZSgpICZ+QzJGaWVsZERlc2NyaXB0b3I6OlNUUlVDVF9GTEFHIH07CisgICAgICAgICAgICBpZiAoIXZpc2l0ZWQoaW5kZXgpKSB7CisgICAgICAgICAgICAgICAgZGVzY2VuZEludG8oaW5kZXgpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCisgICAgdmlydHVhbCB+QzJGaWVsZFV0aWxzRmllbGRzSXRlcmF0b3IoKSBvdmVycmlkZSA9IGRlZmF1bHQ7CisKKyAgICAvLy8gSW5jcmVtZW50cyB0aGlzIGl0ZXJhdG9yIGJ5IHZpc2l0aW5nIGVhY2ggYmFzZSBmaWVsZC4KKyAgICB2aXJ0dWFsIHZvaWQgaW5jcmVtZW50KCkgb3ZlcnJpZGUgeworICAgICAgICAvLyBkb24ndCBnbyBwYXN0IGVuZAorICAgICAgICBpZiAobUhlYWQgPT0gbnVsbHB0ciB8fCBfbUZpZWxkcy5lbXB0eSgpKSB7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICAvLyBkZXNjZW5kIGludG8gc3RydWN0dXJlcworICAgICAgICBpZiAobUhlYWQtPmZpZWxkLnR5cGUoKSAmIEMyRmllbGREZXNjcmlwdG9yOjpTVFJVQ1RfRkxBRykgeworICAgICAgICAgICAgQzJQYXJhbTo6Q29yZUluZGV4IGluZGV4ID0geyBtSGVhZC0+ZmllbGQudHlwZSgpICZ+QzJGaWVsZERlc2NyaXB0b3I6OlNUUlVDVF9GTEFHIH07CisgICAgICAgICAgICAvLyBkbyBub3QgcmVjdXJzZSBpbnRvIHRoZSBzYW1lIHN0cnVjdHMKKyAgICAgICAgICAgIGlmICghdmlzaXRlZChpbmRleCkgJiYgZGVzY2VuZEludG8oaW5kZXgpKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgLy8gYXNjZW5kIGFmdGVyIHRoZSBsYXN0IGZpZWxkIGluIHRoZSBjdXJyZW50IHN0cnVjdAorICAgICAgICB3aGlsZSAoIW1IaXN0b3J5LmVtcHR5KCkgJiYgX21GaWVsZHMuYmFjaygpID09IG1IaXN0b3J5LmJhY2soKS0+ZW5kKCkpIHsKKyAgICAgICAgICAgIG1IZWFkID0gbUhlYWQtPnBhcmVudDsKKyAgICAgICAgICAgIG1IaXN0b3J5LnBvcF9iYWNrKCk7CisgICAgICAgICAgICBfbUZpZWxkcy5wb3BfYmFjaygpOworICAgICAgICB9CisKKyAgICAgICAgLy8gZG9uZSBpZiBoaXN0b3J5IGlzIG5vdyBlbXB0eQorICAgICAgICBpZiAoX21GaWVsZHMuZW1wdHkoKSkgeworICAgICAgICAgICAgLy8gd2UgY291bGQgYmUgdHJhdmVyc2luZyBhIHN1Yi10cmVlIHNvIGNsZWFyIGhlYWQKKyAgICAgICAgICAgIG1IZWFkLnJlc2V0KCk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICAvLyBtb3ZlIHRvIHRoZSBuZXh0IGZpZWxkIGluIHRoZSBjdXJyZW50IHN0cnVjdAorICAgICAgICBDMlN0cnVjdERlc2NyaXB0b3I6OmZpZWxkX2l0ZXJhdG9yIG5leHQgPSBfbUZpZWxkcy5iYWNrKCk7CisgICAgICAgIG1IZWFkLT5maWVsZCA9IE9mZnNldEZpZWxkRGVzY3JpcHRvcigqbmV4dCwgR2V0UGFyZW50T2Zmc2V0KG1IZWFkLT5wYXJlbnQpKTsKKyAgICAgICAgbUhlYWQtPmluZGV4ID0gMDsgLy8gcmVzZXQgaW5kZXgganVzdCBpbiBjYXNlIGZvciBjb3JyZWN0bmVzcworICAgICAgICBtSGVhZC0+YmFzZUZpZWxkT2Zmc2V0ID0gR2V0UGFyZW50QmFzZUZpZWxkT2Zmc2V0KG1IZWFkLT5wYXJlbnQpICsgR2V0T2Zmc2V0KCpuZXh0KTsKKyAgICAgICAgbUhlYWQtPmFycmF5T2Zmc2V0ID0gR2V0T2Zmc2V0KG1IZWFkLT5maWVsZCk7CisgICAgICAgIG1IZWFkLT51c2VkRXh0ZW50ID0gbUhlYWQtPmZpZWxkLmV4dGVudCgpID8gOgorICAgICAgICAgICAgICAgIChzdGQ6Om1heChtSGVhZC0+YXJyYXlPZmZzZXQsIG1QYXJhbVNpemUpIC0gbUhlYWQtPmFycmF5T2Zmc2V0KQorICAgICAgICAgICAgICAgICAgICAgICAgLyBHZXRTaXplKG1IZWFkLT5maWVsZCk7CisgICAgICAgICsrX21GaWVsZHMuYmFjaygpOworICAgIH0KKworcHJpdmF0ZToKKyAgICAvLy8gSWYgdGhlIGN1cnJlbnQgZmllbGQgaXMgYSBrbm93biwgdmFsaWQgKHVudHJhdmVyc2VkKSBzdHJ1Y3R1cmUsIGl0IG1vZGlmaWVzIHRoaXMgaXRlcmF0b3IKKyAgICAvLy8gdG8gcG9pbnQgdG8gdGhlIGZpcnN0IGZpZWxkIG9mIHRoZSBzdHJ1Y3R1cmUgYW5kIHJldHVybnMgdHJ1ZS4gT3RoZXJ3aXNlLCBpdCBkb2VzIG5vdAorICAgIC8vLyBtb2RpZnkgdGhpcyBpdGVyYXRvciBhbmQgcmV0dXJucyBmYWxzZS4KKyAgICBib29sIGRlc2NlbmRJbnRvKEMyUGFyYW06OkNvcmVJbmRleCBpbmRleCkgeworICAgICAgICBzdGQ6OnVuaXF1ZV9wdHI8QzJTdHJ1Y3REZXNjcmlwdG9yPiBkZXNjVW5pcXVlID0gbVJlZmxlY3Rvci0+ZGVzY3JpYmUoaW5kZXgpOworICAgICAgICAvLyBkZXNjZW5kIGludG8ga25vd24gc3RydWN0cyAoYXMgbG9uZyBhcyB0aGV5IGhhdmUgYXQgbGVhc3Qgb25lIGZpZWxkKQorICAgICAgICBpZiAoZGVzY1VuaXF1ZSAmJiBkZXNjVW5pcXVlLT5iZWdpbigpICE9IGRlc2NVbmlxdWUtPmVuZCgpKSB7CisgICAgICAgICAgICBzdGQ6OnNoYXJlZF9wdHI8QzJTdHJ1Y3REZXNjcmlwdG9yPiBkZXNjKHN0ZDo6bW92ZShkZXNjVW5pcXVlKSk7CisgICAgICAgICAgICBtSGlzdG9yeS5lbXBsYWNlX2JhY2soZGVzYyk7CisgICAgICAgICAgICBDMlN0cnVjdERlc2NyaXB0b3I6OmZpZWxkX2l0ZXJhdG9yIGZpcnN0ID0gZGVzYy0+YmVnaW4oKTsKKyAgICAgICAgICAgIG1IZWFkID0gbWFrZUxlYWYoKmZpcnN0LCAwIC8qIGluZGV4ICovKTsKKyAgICAgICAgICAgIF9tRmllbGRzLmVtcGxhY2VfYmFjaygrK2ZpcnN0KTsKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICAvLy8gbmV4dCBmaWVsZCBwb2ludGVycyBmb3IgZWFjaCBkZXB0aC4KKyAgICAvLy8gbm90ZTogX21GaWVsZHMgbWF5IGJlIHNob3J0ZWQgdGhhbiBtSGlzdG9yeSwgaWYgaXRlcmF0aW5nIGF0IGEgZGVwdGgKKyAgICBzdGQ6OnZlY3RvcjxDMlN0cnVjdERlc2NyaXB0b3I6OmZpZWxkX2l0ZXJhdG9yPiBfbUZpZWxkczsKK307CisKKy8qKgorICogSXRlcmFibGUgaW1wbGVtZW50aW5nIGVudW1lcmF0ZUZpZWxkcygpLgorICovCitzdHJ1Y3QgQzJGaWVsZFV0aWxzRmllbGRJdGVyYWJsZSA6IHB1YmxpYyBDMkZpZWxkVXRpbHM6Okxpc3Q6OkltcGwgeworICAgIC8vLyByZXR1cm5zIGFuIGl0ZXJhdG9yIHRvIHRoZSBiZWdpbm5pbmcgb2YgdGhlIGxpc3QKKyAgICB2aXJ0dWFsIHN0ZDo6c2hhcmVkX3B0cjxDMkZpZWxkVXRpbHM6Okl0ZXJhdG9yOjpJbXBsPiBiZWdpbigpIGNvbnN0IG92ZXJyaWRlIHsKKyAgICAgICAgcmV0dXJuIHN0ZDo6bWFrZV9zaGFyZWQ8QzJGaWVsZFV0aWxzRmllbGRzSXRlcmF0b3I+KCpfbVBhcmFtLCBfbVJlZmxlY3Rvcik7CisgICAgfTsKKworICAgIEMyRmllbGRVdGlsc0ZpZWxkSXRlcmFibGUoY29uc3QgQzJQYXJhbSAmcGFyYW0sIHN0ZDo6c2hhcmVkX3B0cjxDMlBhcmFtUmVmbGVjdG9yPiByZWZsZWN0b3IpCisgICAgICAgIDogX21QYXJhbSgmcGFyYW0pLCBfbVJlZmxlY3RvcihyZWZsZWN0b3IpIHsgfQorCitwcml2YXRlOgorICAgIGNvbnN0IEMyUGFyYW0gKl9tUGFyYW07CisgICAgc3RkOjpzaGFyZWRfcHRyPEMyUGFyYW1SZWZsZWN0b3I+IF9tUmVmbGVjdG9yOworfTsKKworfQorCitDMkZpZWxkVXRpbHM6Okxpc3QgQzJGaWVsZFV0aWxzOjplbnVtZXJhdGVGaWVsZHMoCisgICAgICAgIGNvbnN0IEMyUGFyYW0gJnBhcmFtLCBjb25zdCBzdGQ6OnNoYXJlZF9wdHI8QzJQYXJhbVJlZmxlY3Rvcj4gJnJlZmxlY3RvcikgeworICAgIHJldHVybiBDMkZpZWxkVXRpbHM6Okxpc3Qoc3RkOjptYWtlX3NoYXJlZDxDMkZpZWxkVXRpbHNGaWVsZEl0ZXJhYmxlPihwYXJhbSwgcmVmbGVjdG9yKSk7Cit9CisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gQzJGaWVsZFV0aWxzOjplbnVtZXJhdGUgc2libGluZ3MgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCituYW1lc3BhY2UgeworCitzdHJ1Y3QgQzJGaWVsZFV0aWxzQ291c2luc0l0ZXJhdG9yIDogcHVibGljIEMyRmllbGRVdGlsczo6SXRlcmF0b3I6OkltcGwgeworICAgIEMyRmllbGRVdGlsc0NvdXNpbnNJdGVyYXRvcigKKyAgICAgICAgICAgICAgICBjb25zdCBzdGQ6OnNoYXJlZF9wdHI8QzJGaWVsZFV0aWxzOjpJbmZvOjpJbXBsPiAmaW5mbywgc2l6ZV90IGxldmVsKQorICAgICAgICAgIC8vIGNsb25lIGluZm8gY2hhaW4gYXMgdGhpcyBpdGVyYXRvciB3aWxsIGNoYW5nZSBpdAorICAgICAgICA6IEMyRmllbGRVdGlsczo6SXRlcmF0b3I6OkltcGwoQzJGaWVsZFV0aWxzOjpJbmZvOjpJbXBsOjpDbG9uZShpbmZvKSkgeworICAgICAgICBpZiAobGV2ZWwgPT0gMCkgeworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgLy8gc3RvcmUgcGFyZW50IGNoYWluICh1cCB0byBsZXZlbCkgZm9yIHF1aWNrIGFjY2VzcworICAgICAgICBzdGQ6OnNoYXJlZF9wdHI8QzJGaWVsZFV0aWxzOjpJbmZvOjpJbXBsPiBub2RlID0gbUhlYWQ7CisgICAgICAgIHNpemVfdCBpeCA9IDA7CisgICAgICAgIGZvciAoOyBpeCA8IGxldmVsICYmIG5vZGU7ICsraXgpIHsKKyAgICAgICAgICAgIG5vZGUtPmluZGV4ID0gMDsKKyAgICAgICAgICAgIF9tUGF0aC5lbXBsYWNlX2JhY2sobm9kZSk7CisgICAgICAgICAgICBub2RlID0gbm9kZS0+cGFyZW50OworICAgICAgICB9CisgICAgICAgIHNldHVwUGF0aChpeCk7CisgICAgfQorCisgICAgdmlydHVhbCB+QzJGaWVsZFV0aWxzQ291c2luc0l0ZXJhdG9yKCkgb3ZlcnJpZGUgPSBkZWZhdWx0OworCisgICAgLy8vIEluY3JlbWVudHMgdGhpcyBpdGVyYXRvciBieSB2aXNpdGluZyBlYWNoIGluZGV4LgorICAgIHZpcnR1YWwgdm9pZCBpbmNyZW1lbnQoKSBvdmVycmlkZSB7CisgICAgICAgIHNpemVfdCBpeCA9IDA7CisgICAgICAgIHdoaWxlIChpeCA8IF9tUGF0aC5zaXplKCkpIHsKKyAgICAgICAgICAgIGlmICgrK19tUGF0aFtpeF0tPmluZGV4IDwgX21QYXRoW2l4XS0+dXNlZEV4dGVudCkgeworICAgICAgICAgICAgICAgIHNldHVwUGF0aChpeCArIDEpOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIF9tUGF0aFtpeCsrXS0+aW5kZXggPSAwOworICAgICAgICB9CisgICAgICAgIG1IZWFkLnJlc2V0KCk7CisgICAgfQorCitwcml2YXRlOgorICAgIC8vLyBhZGp1c3RzIGZpZWxkIG9mZnNldHMgYWxvbmcgdGhlIHBhdGggdXAgdG8gdGhlIHNwZWNpZmljIGxldmVsIC0gMS4KKyAgICAvLy8gVGhpcyBpbi1mYWN0IGhhcyB0byBiZSBkb25lIGRvd24gdGhlIHBhdGggZnJvbSBwYXJlbnQgdG8gY2hpbGQgYXMgY2hpbGQgZmllbGRzIG11c3QKKyAgICAvLy8gZmFsbCB3aXRoaW4gcGFyZW50IGZpZWxkcy4KKyAgICB2b2lkIHNldHVwUGF0aChzaXplX3QgbGV2ZWwpIHsKKyAgICAgICAgQzJfQ0hFQ0tfTEUobGV2ZWwsIF9tUGF0aC5zaXplKCkpOworICAgICAgICB1aW50MzJfdCBvbGRBcnJheU9mZnNldCA9IGxldmVsID8gX21QYXRoW2xldmVsIC0gMV0tPmFycmF5T2Zmc2V0IDogMCAvKiB1bnVzZWQgKi87CisgICAgICAgIHdoaWxlIChsZXZlbCkgeworICAgICAgICAgICAgLS1sZXZlbDsKKyAgICAgICAgICAgIEMyRmllbGRVdGlsczo6SW5mbzo6SW1wbCAmcGF0aCA9ICpfbVBhdGhbbGV2ZWxdOworICAgICAgICAgICAgdWludDMyX3Qgc2l6ZSA9IEdldFNpemUocGF0aC5maWVsZCk7CisgICAgICAgICAgICB1aW50MzJfdCBvZmZzZXQgPSBwYXRoLmFycmF5T2Zmc2V0ICsgc2l6ZSAqIHBhdGguaW5kZXg7CisgICAgICAgICAgICBTZXRPZmZzZXQocGF0aC5maWVsZCwgb2Zmc2V0KTsKKyAgICAgICAgICAgIGlmIChsZXZlbCkgeworICAgICAgICAgICAgICAgIC8vIHJlc2V0IGNoaWxkJ3MgYXJyYXkgb2Zmc2V0IHRvIGZhbGwgd2l0aGluIGN1cnJlbnQgaW5kZXgsIGJ1dCBob2xkIG9udG8gdGhlCisgICAgICAgICAgICAgICAgLy8gb3JpZ2luYWwgdmFsdWUgb2YgdGhlIGFycmF5T2Zmc2V0IHNvIHRoYXQgd2UgY2FuIGFkanVzdCBzdWJzZXF1ZW50IGNoaWxkcmVuLgorICAgICAgICAgICAgICAgIC8vIFRoaXMgaXMgYmVjYXVzZSB0aGUgbW9kdWxvIGlzIG9ubHkgZGVmaW5lZCB3aXRoaW4gdGhlIGN1cnJlbnQgYXJyYXkuCisgICAgICAgICAgICAgICAgdWludDMyX3QgY2hpbGRBcnJheU9mZnNldCA9CisgICAgICAgICAgICAgICAgICAgIG9mZnNldCArIChfbVBhdGhbbGV2ZWwgLSAxXS0+YXJyYXlPZmZzZXQgLSBvbGRBcnJheU9mZnNldCkgJSBzaXplOworICAgICAgICAgICAgICAgIG9sZEFycmF5T2Zmc2V0ID0gX21QYXRoW2xldmVsIC0gMV0tPmFycmF5T2Zmc2V0OworICAgICAgICAgICAgICAgIF9tUGF0aFtsZXZlbCAtIDFdLT5hcnJheU9mZnNldCA9IGNoaWxkQXJyYXlPZmZzZXQ7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKKyAgICBzdGQ6OnZlY3RvcjxzdGQ6OnNoYXJlZF9wdHI8QzJGaWVsZFV0aWxzOjpJbmZvOjpJbXBsPj4gX21QYXRoOworfTsKKworLyoqCisgKiBJdGVyYWJsZSBpbXBsZW1lbnRpbmcgZW51bWVyYXRlRmllbGRzKCkuCisgKi8KK3N0cnVjdCBDMkZpZWxkVXRpbHNDb3VzaW5zSXRlcmFibGUgOiBwdWJsaWMgQzJGaWVsZFV0aWxzOjpMaXN0OjpJbXBsIHsKKyAgICAvLy8gcmV0dXJucyBhbiBpdGVyYXRvciB0byB0aGUgYmVnaW5uaW5nIG9mIHRoZSBsaXN0CisgICAgdmlydHVhbCBzdGQ6OnNoYXJlZF9wdHI8QzJGaWVsZFV0aWxzOjpJdGVyYXRvcjo6SW1wbD4gYmVnaW4oKSBjb25zdCBvdmVycmlkZSB7CisgICAgICAgIHJldHVybiBzdGQ6Om1ha2Vfc2hhcmVkPEMyRmllbGRVdGlsc0NvdXNpbnNJdGVyYXRvcj4oX21IZWFkLCBfbUxldmVsKTsKKyAgICB9OworCisgICAgQzJGaWVsZFV0aWxzQ291c2luc0l0ZXJhYmxlKGNvbnN0IEMyRmllbGRVdGlsczo6SW5mbyAmZmllbGQsIHVpbnQzMl90IGxldmVsKQorICAgICAgICA6IF9tSGVhZChDMkZpZWxkVXRpbHM6Ol9JbnNwZWN0b3I6OkdldEltcGwoZmllbGQpKSwgX21MZXZlbChsZXZlbCkgeyB9CisKK3ByaXZhdGU6CisgICAgc3RkOjpzaGFyZWRfcHRyPEMyRmllbGRVdGlsczo6SW5mbzo6SW1wbD4gX21IZWFkOworICAgIHNpemVfdCBfbUxldmVsOworfTsKKworfQorCitDMkZpZWxkVXRpbHM6Okxpc3QgQzJGaWVsZFV0aWxzOjplbnVtZXJhdGVDb3VzaW5zKGNvbnN0IEMyRmllbGRVdGlsczo6SW5mbyAmZmllbGQsIHVpbnQzMl90IGxldmVsKSB7CisgICAgcmV0dXJuIEMyRmllbGRVdGlsczo6TGlzdChzdGQ6Om1ha2Vfc2hhcmVkPEMyRmllbGRVdGlsc0NvdXNpbnNJdGVyYWJsZT4oZmllbGQsIGxldmVsKSk7Cit9CisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gQzJGaWVsZFV0aWxzOjpsb2NhdGVGaWVsZCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKK25hbWVzcGFjZSB7CisKKy8qKgorICogSXRlcmF0b3IgaW1wbGVtZW50aW5nIGxvY2F0ZUZpZWxkKCkuCisgKi8KK3N0cnVjdCBDMkZpZWxkVXRpbHNGaWVsZExvY2F0b3IgOiBwdWJsaWMgQzJGaWVsZFV0aWxzRmllbGRzSXRlcmF0b3JIZWxwZXIgeworICAgIEMyRmllbGRVdGlsc0ZpZWxkTG9jYXRvcigKKyAgICAgICAgICAgIEMyUGFyYW06OkNvcmVJbmRleCBpbmRleCwgY29uc3QgX0MyRmllbGRJZCAmZmllbGQsIHVpbnQzMl90IHBhcmFtU2l6ZSwKKyAgICAgICAgICAgIHN0ZDo6c2hhcmVkX3B0cjxDMlBhcmFtUmVmbGVjdG9yPiByZWZsZWN0b3IpCisgICAgICAgIDogQzJGaWVsZFV0aWxzRmllbGRzSXRlcmF0b3JIZWxwZXIocmVmbGVjdG9yLCBwYXJhbVNpemUpLAorICAgICAgICAgIF9tRmllbGQoZmllbGQpIHsKKyAgICAgICAgd2hpbGUgKGRlc2NlbmRJbnRvKGluZGV4KSkgeworICAgICAgICAgICAgaWYgKChtSGVhZC0+ZmllbGQudHlwZSgpICYgQzJGaWVsZERlc2NyaXB0b3I6OlNUUlVDVF9GTEFHKSA9PSAwKSB7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpbmRleCA9IEMyUGFyYW06OkNvcmVJbmRleChtSGVhZC0+ZmllbGQudHlwZSgpICZ+IEMyRmllbGREZXNjcmlwdG9yOjpTVFJVQ1RfRkxBRyk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICB2b2lkIGluY3JlbWVudCgpIHsKKyAgICAgICAgbUhlYWQgPSBfbVRhaWw7CisgICAgICAgIF9tVGFpbCA9IG51bGxwdHI7CisgICAgfQorCitwcml2YXRlOgorICAgIC8vLyBJZiB0aGUgY3VycmVudCBmaWVsZCBpcyBhIGtub3duLCB2YWxpZCAodW50cmF2ZXJzZWQpIHN0cnVjdHVyZSwgaXQgbW9kaWZpZXMgdGhpcyBpdGVyYXRvcgorICAgIC8vLyB0byBwb2ludCB0byB0aGUgZmllbGQgYXQgdGhlIGJlZ2lubmluZy9lbmQgb2YgdGhlIGdpdmVuIGZpZWxkIG9mIHRoZSBzdHJ1Y3R1cmUgYW5kIHJldHVybnMKKyAgICAvLy8gdHJ1ZS4gT3RoZXJ3aXNlLCBpbmNsdWRpbmcgaWYgbm8gc3VjaCBmaWVsZCBleGlzdHMgaW4gdGhlIHN0cnVjdHVyZSwgaXQgZG9lcyBub3QgbW9kaWZ5IHRoaXMKKyAgICAvLy8gaXRlcmF0b3IgYW5kIHJldHVybnMgZmFsc2UuCisgICAgYm9vbCBkZXNjZW5kSW50byhDMlBhcmFtOjpDb3JlSW5kZXggaW5kZXgpIHsKKyAgICAgICAgLy8gY2hlY2sgdGhhdCB0aGUgYm91bmRhcmllcyBvZiB0aGUgZmllbGQgdG8gYmUgbG9jYXRlZCBhcmUgc3RpbGwgd2l0aGluIHRoZSBzYW1lIHBhcmVudAorICAgICAgICAvLyBmaWVsZAorICAgICAgICBpZiAobUhlYWQgIT0gX21UYWlsKSB7CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKworICAgICAgICBzdGQ6OnVuaXF1ZV9wdHI8QzJTdHJ1Y3REZXNjcmlwdG9yPiBkZXNjVW5pcXVlID0gbVJlZmxlY3Rvci0+ZGVzY3JpYmUoaW5kZXgpOworICAgICAgICAvLyBkZXNjZW5kIGludG8ga25vd24gc3RydWN0cyAoYXMgbG9uZyBhcyB0aGV5IGhhdmUgYXQgbGVhc3Qgb25lIGZpZWxkKQorICAgICAgICBpZiAoZGVzY1VuaXF1ZSAmJiBkZXNjVW5pcXVlLT5iZWdpbigpICE9IGRlc2NVbmlxdWUtPmVuZCgpKSB7CisgICAgICAgICAgICBzdGQ6OnNoYXJlZF9wdHI8QzJTdHJ1Y3REZXNjcmlwdG9yPiBkZXNjKHN0ZDo6bW92ZShkZXNjVW5pcXVlKSk7CisgICAgICAgICAgICBtSGlzdG9yeS5lbXBsYWNlX2JhY2soZGVzYyk7CisKKyAgICAgICAgICAgIHVpbnQzMl90IHBhcmVudE9mZnNldCA9IEdldFBhcmVudE9mZnNldChtSGVhZCk7CisKKyAgICAgICAgICAgIC8vIGxvY2F0ZSBmaWVsZCB1c2luZyBhIGR1bW15IGZpZWxkIGRlc2NyaXB0b3IKKyAgICAgICAgICAgIEMyRmllbGREZXNjcmlwdG9yIGR1bW15ID0geworICAgICAgICAgICAgICAgIEMyRmllbGREZXNjcmlwdG9yOjpCTE9CLCAxIC8qIGV4dGVudCAqLywgIm5hbWUiLAorICAgICAgICAgICAgICAgIEdldE9mZnNldChfbUZpZWxkKSAtIHBhcmVudE9mZnNldCwgR2V0U2l6ZShfbUZpZWxkKQorICAgICAgICAgICAgfTsKKworICAgICAgICAgICAgLy8gbG9jYXRlIGZpcnN0IGZpZWxkIHdoZXJlIG9mZnNldCBpcyBncmVhdGVyIHRoYW4gZHVtbXkgb2Zmc2V0ICh3aGljaCBpcyBvbmUgcGFzdCkKKyAgICAgICAgICAgIGF1dG8gaXQgPSBzdGQ6OnVwcGVyX2JvdW5kKAorICAgICAgICAgICAgICAgICAgICBkZXNjLT5jYmVnaW4oKSwgZGVzYy0+Y2VuZCgpLCBkdW1teSwKKyAgICAgICAgICAgICAgICAgICAgW10oY29uc3QgQzJGaWVsZERlc2NyaXB0b3IgJmEsIGNvbnN0IEMyRmllbGREZXNjcmlwdG9yICZiKSAtPiBib29sIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gX0MyUGFyYW1JbnNwZWN0b3I6OkdldE9mZnNldChhKSA8IF9DMlBhcmFtSW5zcGVjdG9yOjpHZXRPZmZzZXQoYik7CisgICAgICAgICAgICB9KTsKKyAgICAgICAgICAgIGlmIChpdCA9PSBkZXNjLT5iZWdpbigpKSB7CisgICAgICAgICAgICAgICAgLy8gZmllbGQgaXMgcHJpb3IgdG8gZmlyc3QgZmllbGQKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICB9CisgICAgICAgICAgICAtLWl0OworICAgICAgICAgICAgY29uc3QgQzJGaWVsZERlc2NyaXB0b3IgJmZpZWxkID0gKml0OworCisgICAgICAgICAgICAvLyBjaGVjayB0aGF0IGR1bW15IGVuZC1vZmZzZXQgaXMgd2l0aGluIHRoaXMgZmllbGQKKyAgICAgICAgICAgIHVpbnQzMl90IHN0cnVjdFNpemUgPSBzdGQ6Om1heChtUGFyYW1TaXplLCBwYXJlbnRPZmZzZXQpIC0gcGFyZW50T2Zmc2V0OworICAgICAgICAgICAgaWYgKEdldEVuZE9mZnNldChkdW1teSkgPiBHZXRFbmRPZmZzZXQoZmllbGQsIHN0cnVjdFNpemUpKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICB1aW50MzJfdCBzdGFydEluZGV4ID0gKEdldE9mZnNldChkdW1teSkgLSBHZXRPZmZzZXQoZmllbGQpKSAvIEdldFNpemUoZmllbGQpOworICAgICAgICAgICAgdWludDMyX3QgZW5kSW5kZXggPQorICAgICAgICAgICAgICAgIChHZXRFbmRPZmZzZXQoZHVtbXkpIC0gR2V0T2Zmc2V0KGZpZWxkKSArIEdldFNpemUoZmllbGQpIC0gMSkgLyBHZXRTaXplKGZpZWxkKTsKKyAgICAgICAgICAgIGlmIChlbmRJbmRleCA+IHN0YXJ0SW5kZXgpIHsKKyAgICAgICAgICAgICAgICAvLyBGaWVsZCBzaXplIGNvdWxkIGJlIHplcm8sIGluIHdoaWNoIGNhc2UgZW5kIGluZGV4IGlzIHN0aWxsIG9uIHN0YXJ0IGluZGV4LgorICAgICAgICAgICAgICAgIC8vIEhvd2V2ZXIsIGZvciBhbGwgb3RoZXIgY2FzZXMsIGVuZEluZGV4IHdhcyByb3VuZGVkIHVwIHRvIHRoZSBuZXh0IGluZGV4LCBzbworICAgICAgICAgICAgICAgIC8vIGRlY3JlbWVudCBpdC4KKyAgICAgICAgICAgICAgICAtLWVuZEluZGV4OworICAgICAgICAgICAgfQorICAgICAgICAgICAgc3RkOjpzaGFyZWRfcHRyPEMyRmllbGRVdGlsczo6SW5mbzo6SW1wbD4gc3RhcnRMZWFmID0KKyAgICAgICAgICAgICAgICBtYWtlTGVhZihmaWVsZCwgc3RhcnRJbmRleCk7CisgICAgICAgICAgICBpZiAoZW5kSW5kZXggPT0gc3RhcnRJbmRleCkgeworICAgICAgICAgICAgICAgIF9tVGFpbCA9IHN0YXJ0TGVhZjsKKyAgICAgICAgICAgICAgICBtSGVhZCA9IHN0YXJ0TGVhZjsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgX21UYWlsID0gbWFrZUxlYWYoZmllbGQsIGVuZEluZGV4KTsKKyAgICAgICAgICAgICAgICBtSGVhZCA9IHN0YXJ0TGVhZjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBfQzJGaWVsZElkIF9tRmllbGQ7CisgICAgc3RkOjpzaGFyZWRfcHRyPEMyRmllbGRVdGlsczo6SW5mbzo6SW1wbD4gX21UYWlsOworfTsKKworLyoqCisgKiBJdGVyYWJsZSBpbXBsZW1lbnRpbmcgbG9jYXRlRmllbGQoKS4KKyAqLworc3RydWN0IEMyRmllbGRVdGlsc0ZpZWxkTG9jYXRpb24gOiBwdWJsaWMgQzJGaWVsZFV0aWxzOjpMaXN0OjpJbXBsIHsKKyAgICAvLy8gcmV0dXJucyBhbiBpdGVyYXRvciB0byB0aGUgYmVnaW5uaW5nIG9mIHRoZSBsaXN0CisgICAgdmlydHVhbCBzdGQ6OnNoYXJlZF9wdHI8QzJGaWVsZFV0aWxzOjpJdGVyYXRvcjo6SW1wbD4gYmVnaW4oKSBjb25zdCBvdmVycmlkZSB7CisgICAgICAgIHJldHVybiBzdGQ6Om1ha2Vfc2hhcmVkPEMyRmllbGRVdGlsc0ZpZWxkTG9jYXRvcj4oCisgICAgICAgICAgICAgICAgX21JbmRleCwgX21GaWVsZCwgX21QYXJhbVNpemUsIF9tUmVmbGVjdG9yKTsKKyAgICB9OworCisgICAgQzJGaWVsZFV0aWxzRmllbGRMb2NhdGlvbigKKyAgICAgICAgICAgIGNvbnN0IEMyUGFyYW1GaWVsZCAmcGYsIHN0ZDo6c2hhcmVkX3B0cjxDMlBhcmFtUmVmbGVjdG9yPiByZWZsZWN0b3IpCisgICAgICAgIDogX21JbmRleChDMlBhcmFtOjpDb3JlSW5kZXgoX0MyUGFyYW1JbnNwZWN0b3I6OkdldEluZGV4KHBmKSkpLAorICAgICAgICAgIF9tRmllbGQoX0MyUGFyYW1JbnNwZWN0b3I6OkdldEZpZWxkKHBmKSksCisgICAgICAgICAgX21QYXJhbVNpemUoMCksCisgICAgICAgICAgX21SZWZsZWN0b3IocmVmbGVjdG9yKSB7IH0KKworCisgICAgQzJGaWVsZFV0aWxzRmllbGRMb2NhdGlvbigKKyAgICAgICAgICAgIGNvbnN0IEMyUGFyYW0gJnBhcmFtLCBjb25zdCBfQzJGaWVsZElkICZmaWVsZCwKKyAgICAgICAgICAgIHN0ZDo6c2hhcmVkX3B0cjxDMlBhcmFtUmVmbGVjdG9yPiByZWZsZWN0b3IpCisgICAgICAgIDogX21JbmRleChwYXJhbS5jb3JlSW5kZXgoKSksCisgICAgICAgICAgX21GaWVsZChmaWVsZCksCisgICAgICAgICAgX21QYXJhbVNpemUocGFyYW0uc2l6ZSgpKSwKKyAgICAgICAgICBfbVJlZmxlY3RvcihyZWZsZWN0b3IpIHsgfQorCitwcml2YXRlOgorICAgIEMyUGFyYW06OkNvcmVJbmRleCBfbUluZGV4OworICAgIF9DMkZpZWxkSWQgX21GaWVsZDsKKyAgICB1aW50MzJfdCBfbVBhcmFtU2l6ZTsKKyAgICBzdGQ6OnNoYXJlZF9wdHI8QzJQYXJhbVJlZmxlY3Rvcj4gX21SZWZsZWN0b3I7Cit9OworCit9CisKK3N0ZDo6dmVjdG9yPEMyRmllbGRVdGlsczo6SW5mbz4gQzJGaWVsZFV0aWxzOjpsb2NhdGVGaWVsZCgKKyAgICAgICAgY29uc3QgQzJQYXJhbUZpZWxkICZwZiwgY29uc3Qgc3RkOjpzaGFyZWRfcHRyPEMyUGFyYW1SZWZsZWN0b3I+ICZyZWZsZWN0b3IpIHsKKyAgICBDMkZpZWxkVXRpbHM6Okxpc3QgbG9jYXRpb24gPSB7IHN0ZDo6bWFrZV9zaGFyZWQ8QzJGaWVsZFV0aWxzRmllbGRMb2NhdGlvbj4ocGYsIHJlZmxlY3RvcikgfTsKKyAgICByZXR1cm4gc3RkOjp2ZWN0b3I8SW5mbz4obG9jYXRpb24uYmVnaW4oKSwgbG9jYXRpb24uZW5kKCkpOworfQorCitzdGQ6OnZlY3RvcjxDMkZpZWxkVXRpbHM6OkluZm8+IEMyRmllbGRVdGlsczo6bG9jYXRlRmllbGQoCisgICAgICAgIGNvbnN0IEMyUGFyYW0gJnBhcmFtLCBjb25zdCBfQzJGaWVsZElkICZmaWVsZCwKKyAgICAgICAgY29uc3Qgc3RkOjpzaGFyZWRfcHRyPEMyUGFyYW1SZWZsZWN0b3I+ICZyZWZsZWN0b3IpIHsKKyAgICBDMkZpZWxkVXRpbHM6Okxpc3QgbG9jYXRpb24gPSB7CisgICAgICAgIHN0ZDo6bWFrZV9zaGFyZWQ8QzJGaWVsZFV0aWxzRmllbGRMb2NhdGlvbj4ocGFyYW0sIGZpZWxkLCByZWZsZWN0b3IpCisgICAgfTsKKyAgICByZXR1cm4gc3RkOjp2ZWN0b3I8SW5mbz4obG9jYXRpb24uYmVnaW4oKSwgbG9jYXRpb24uZW5kKCkpOworfQorCmRpZmYgLS1naXQgYS9tZWRpYS9jb2RlYzIvdm5kay91dGlsL0MyUGFyYW1VdGlscy5jcHAgYi9tZWRpYS9jb2RlYzIvdm5kay91dGlsL0MyUGFyYW1VdGlscy5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODA1NzNkOAotLS0gL2Rldi9udWxsCisrKyBiL21lZGlhL2NvZGVjMi92bmRrL3V0aWwvQzJQYXJhbVV0aWxzLmNwcApAQCAtMCwwICsxLDIwOSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNiBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCisKKyNkZWZpbmUgX19DMl9HRU5FUkFURV9HTE9CQUxfVkFSU19fIC8vIHRvIGJlIGFibGUgdG8gaW1wbGVtZW50IHRoZSBtZXRob2RzIGRlZmluZWQKKyNpbmNsdWRlIDxDMkVudW0uaD4KKyNpbmNsdWRlIDx1dGlsL0MyRGVidWctbG9nLmg+CisjaW5jbHVkZSA8dXRpbC9DMlBhcmFtVXRpbHMuaD4KKworI2luY2x1ZGUgPHV0aWxpdHk+CisjaW5jbHVkZSA8dmVjdG9yPgorCisvKiogXGZpbGUKKyAqIFV0aWxpdGllcyBmb3IgcGFyYW1ldGVyIGhhbmRsaW5nIHRvIGJlIHVzZWQgYnkgQ29kZWMyIGltcGxlbWVudGF0aW9ucy4KKyAqLworCisvLy8gXGNvbmQgSU5URVJOQUwKKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBVVElMSVRJRVMgRk9SIEVOVU1FUkFUSU9OIFJFRkxFQ1RJT04gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCitzdGF0aWMgc2l6ZV90IGNvdW50TGVhZGluZ1VuZGVyc2NvcmVzKEMyU3RyaW5nTGl0ZXJhbCBhKSB7CisgICAgc2l6ZV90IGkgPSAwOworICAgIHdoaWxlIChhW2ldID09ICdfJykgeworICAgICAgICArK2k7CisgICAgfQorICAgIHJldHVybiBpOworfQorCitzdGF0aWMgc2l6ZV90IGNvdW50TWF0Y2hpbmcoQzJTdHJpbmdMaXRlcmFsIGEsIGNvbnN0IEMyU3RyaW5nICZiKSB7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBiLnNpemUoKTsgKytpKSB7CisgICAgICAgIGlmICghYVtpXSB8fCBhW2ldICE9IGJbaV0pIHsKKyAgICAgICAgICAgIHJldHVybiBpOworICAgICAgICB9CisgICAgfQorICAgIHJldHVybiBiLnNpemUoKTsKK30KKworLy8gQUJDRGVmID0+IGFiYy1kZWYKKy8vIEFCQ0QyZWYgPT4gYWJjZDItZWYgLy8gMAorLy8gQUJDRDJFZiA9PiBhbmNkMi1lZiAvLyAtMQorLy8gQWJjRGVmID0+IGFiYy1kZWYgLy8gLTEKKy8vIEFiYzJEZWYgPT4gYWJjLTJkZWYKKy8vIEFiYzJkZWYgPT4gYWJjLTItZGVmCisvLyBfWW8gPT4gX3lvCisvLyBfeW8gPT4gX3lvCisvLyBDMl95byA9PiBjMi15bworLy8gQzJfX3lvID0+IGMyLXlvCisKKy8vc3RhdGljCitDMlN0cmluZyBfQzJFbnVtVXRpbHM6OmNhbWVsQ2FzZVRvRGFzaGVkKEMyU3RyaW5nIG5hbWUpIHsKKyAgICBlbnVtIHsKKyAgICAgICAga05vbmUgPSAnLicsCisgICAgICAgIGtMb3dlciA9ICdhJywKKyAgICAgICAga1VwcGVyID0gJ0EnLAorICAgICAgICBrRGlnaXQgPSAnMScsCisgICAgICAgIGtEYXNoID0gJy0nLAorICAgICAgICBrVW5kZXJzY29yZSA9ICdfJywKKyAgICB9IHR5cGUgPSBrTm9uZTsKKyAgICBzaXplX3Qgd29yZF9zdGFydCA9IDA7CisgICAgZm9yIChzaXplX3QgaXggPSAwOyBpeCA8IG5hbWUuc2l6ZSgpOyArK2l4KSB7CisgICAgICAgIEMyX0xPRyhWRVJCT1NFKSA8PCBuYW1lLnN1YnN0cigwLCB3b3JkX3N0YXJ0KSA8PCAifCIKKyAgICAgICAgICAgICAgICA8PCBuYW1lLnN1YnN0cih3b3JkX3N0YXJ0LCBpeCAtIHdvcmRfc3RhcnQpIDw8ICJbIgorICAgICAgICAgICAgICAgIDw8IG5hbWUuc3Vic3RyKGl4LCAxKSA8PCAiXSIgPDwgbmFtZS5zdWJzdHIoaXggKyAxKQorICAgICAgICAgICAgICAgIDw8ICI6ICIgPDwgKGNoYXIpdHlwZTsKKyAgICAgICAgaWYgKGlzdXBwZXIobmFtZVtpeF0pKSB7CisgICAgICAgICAgICBpZiAodHlwZSA9PSBrTG93ZXIpIHsKKyAgICAgICAgICAgICAgICBuYW1lLmluc2VydChpeCsrLCAxLCAnLScpOworICAgICAgICAgICAgICAgIHdvcmRfc3RhcnQgPSBpeDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIG5hbWVbaXhdID0gdG9sb3dlcihuYW1lW2l4XSk7CisgICAgICAgICAgICB0eXBlID0ga1VwcGVyOworICAgICAgICB9IGVsc2UgaWYgKGlzbG93ZXIobmFtZVtpeF0pKSB7CisgICAgICAgICAgICBpZiAodHlwZSA9PSBrRGlnaXQgJiYgaXggPiAwKSB7CisgICAgICAgICAgICAgICAgbmFtZS5pbnNlcnQoaXgrKywgMSwgJy0nKTsKKyAgICAgICAgICAgICAgICB3b3JkX3N0YXJ0ID0gaXg7CisgICAgICAgICAgICB9IGVsc2UgaWYgKHR5cGUgPT0ga1VwcGVyICYmIGl4ID4gd29yZF9zdGFydCArIDEpIHsKKyAgICAgICAgICAgICAgICBuYW1lLmluc2VydChpeCsrIC0gMSwgMSwgJy0nKTsKKyAgICAgICAgICAgICAgICB3b3JkX3N0YXJ0ID0gaXggLSAxOworICAgICAgICAgICAgfQorICAgICAgICAgICAgdHlwZSA9IGtMb3dlcjsKKyAgICAgICAgfSBlbHNlIGlmIChpc2RpZ2l0KG5hbWVbaXhdKSkgeworICAgICAgICAgICAgaWYgKHR5cGUgPT0ga0xvd2VyKSB7CisgICAgICAgICAgICAgICAgbmFtZS5pbnNlcnQoaXgrKywgMSwgJy0nKTsKKyAgICAgICAgICAgICAgICB3b3JkX3N0YXJ0ID0gaXg7CisgICAgICAgICAgICB9CisgICAgICAgICAgICB0eXBlID0ga0RpZ2l0OworICAgICAgICB9IGVsc2UgaWYgKG5hbWVbaXhdID09ICdfJykgeworICAgICAgICAgICAgaWYgKHR5cGUgPT0ga0Rhc2gpIHsKKyAgICAgICAgICAgICAgICBuYW1lLmVyYXNlKGl4LS0sIDEpOworICAgICAgICAgICAgfSBlbHNlIGlmICh0eXBlICE9IGtOb25lICYmIHR5cGUgIT0ga1VuZGVyc2NvcmUpIHsKKyAgICAgICAgICAgICAgICBuYW1lW2l4XSA9ICctJzsKKyAgICAgICAgICAgICAgICB0eXBlID0ga0Rhc2g7CisgICAgICAgICAgICAgICAgd29yZF9zdGFydCA9IGl4ICsgMTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgdHlwZSA9IGtVbmRlcnNjb3JlOworICAgICAgICAgICAgICAgIHdvcmRfc3RhcnQgPSBpeCArIDE7CisgICAgICAgICAgICB9CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBuYW1lLnJlc2l6ZShpeCk7CisgICAgICAgIH0KKyAgICB9CisgICAgQzJfTE9HKFZFUkJPU0UpIDw8ICI9PiAiIDw8IG5hbWU7CisgICAgcmV0dXJuIG5hbWU7Cit9CisKKy8vc3RhdGljCitzdGQ6OnZlY3RvcjxDMlN0cmluZz4gX0MyRW51bVV0aWxzOjpzYW5pdGl6ZUVudW1WYWx1ZU5hbWVzKAorICAgICAgICBjb25zdCBzdGQ6OnZlY3RvcjxDMlN0cmluZ0xpdGVyYWw+IG5hbWVzLAorICAgICAgICBDMlN0cmluZ0xpdGVyYWwgX3ByZWZpeCkgeworICAgIHN0ZDo6dmVjdG9yPEMyU3RyaW5nPiBzYW5pdGl6ZWROYW1lczsKKyAgICBDMlN0cmluZyBwcmVmaXg7CisgICAgc2l6ZV90IGV4dHJhVW5kZXJzY29yZXMgPSAwOworICAgIGJvb2wgZmlyc3QgPSB0cnVlOworICAgIGlmIChfcHJlZml4KSB7CisgICAgICAgIGV4dHJhVW5kZXJzY29yZXMgPSBjb3VudExlYWRpbmdVbmRlcnNjb3JlcyhfcHJlZml4KTsKKyAgICAgICAgcHJlZml4ID0gX3ByZWZpeCArIGV4dHJhVW5kZXJzY29yZXM7CisgICAgICAgIGZpcnN0ID0gZmFsc2U7CisgICAgICAgIEMyX0xPRyhWRVJCT1NFKSA8PCAicHJlZml4OiIgPDwgcHJlZml4IDw8ICIsIHVuZGVyc2NvcmVzOiIgPDwgZXh0cmFVbmRlcnNjb3JlczsKKyAgICB9CisKKyAgICAvLyBjYWxjdWxhdGUgcHJlZml4IGFuZCBtaW5pbXVtIGxlYWRpbmcgdW5kZXJzY29yZXMKKyAgICBmb3IgKEMyU3RyaW5nTGl0ZXJhbCBzIDogbmFtZXMpIHsKKyAgICAgICAgQzJfTE9HKFZFUkJPU0UpIDw8IHM7CisgICAgICAgIHNpemVfdCB1bmRlcnNjb3JlcyA9IGNvdW50TGVhZGluZ1VuZGVyc2NvcmVzKHMpOworICAgICAgICBpZiAoZmlyc3QpIHsKKyAgICAgICAgICAgIGV4dHJhVW5kZXJzY29yZXMgPSB1bmRlcnNjb3JlczsKKyAgICAgICAgICAgIHByZWZpeCA9IHMgKyB1bmRlcnNjb3JlczsKKyAgICAgICAgICAgIGZpcnN0ID0gZmFsc2U7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBzaXplX3QgbWF0Y2hpbmcgPSBjb3VudE1hdGNoaW5nKAorICAgICAgICAgICAgICAgIHMgKyB1bmRlcnNjb3JlcywKKyAgICAgICAgICAgICAgICBwcmVmaXgpOworICAgICAgICAgICAgcHJlZml4LnJlc2l6ZShtYXRjaGluZyk7CisgICAgICAgICAgICBleHRyYVVuZGVyc2NvcmVzID0gc3RkOjptaW4odW5kZXJzY29yZXMsIGV4dHJhVW5kZXJzY29yZXMpOworICAgICAgICB9CisgICAgICAgIEMyX0xPRyhWRVJCT1NFKSA8PCAicHJlZml4OiIgPDwgcHJlZml4IDw8ICIsIHVuZGVyc2NvcmVzOiIgPDwgZXh0cmFVbmRlcnNjb3JlczsKKyAgICAgICAgaWYgKHByZWZpeC5zaXplKCkgPT0gMCAmJiBleHRyYVVuZGVyc2NvcmVzID09IDApIHsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgfQorCisgICAgLy8gd2Ugc3dhbGxvdyB0aGUgZmlyc3QgdW5kZXJzY29yZSBhZnRlciB1cHBlciBjYXNlIHByZWZpeGVzCisgICAgYm9vbCB1cHBlckNhc2VQcmVmaXggPSB0cnVlOworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgcHJlZml4LnNpemUoKTsgKytpKSB7CisgICAgICAgIGlmIChpc2xvd2VyKHByZWZpeFtpXSkpIHsKKyAgICAgICAgICAgIHVwcGVyQ2FzZVByZWZpeCA9IGZhbHNlOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBmb3IgKEMyU3RyaW5nTGl0ZXJhbCBzIDogbmFtZXMpIHsKKyAgICAgICAgc2l6ZV90IHVuZGVyc2NvcmVzID0gY291bnRMZWFkaW5nVW5kZXJzY29yZXMocyk7CisgICAgICAgIEMyU3RyaW5nIHNhbml0aXplZCA9IEMyU3RyaW5nKHMsIHVuZGVyc2NvcmVzIC0gZXh0cmFVbmRlcnNjb3Jlcyk7CisgICAgICAgIHNhbml0aXplZC5hcHBlbmQocyArIHByZWZpeC5zaXplKCkgKyB1bmRlcnNjb3JlcyArCisgICAgICAgICAgICAgICAgICAgICh1cHBlckNhc2VQcmVmaXggJiYgc1twcmVmaXguc2l6ZSgpICsgdW5kZXJzY29yZXNdID09ICdfJykpOworICAgICAgICBzYW5pdGl6ZWROYW1lcy5wdXNoX2JhY2soY2FtZWxDYXNlVG9EYXNoZWQoc2FuaXRpemVkKSk7CisgICAgfQorCisgICAgZm9yIChDMlN0cmluZyBzIDogc2FuaXRpemVkTmFtZXMpIHsKKyAgICAgICAgQzJfTE9HKFZFUkJPU0UpIDw8IHM7CisgICAgfQorCisgICAgcmV0dXJuIHNhbml0aXplZE5hbWVzOworfQorCisvL3N0YXRpYworc3RkOjp2ZWN0b3I8QzJTdHJpbmc+IF9DMkVudW1VdGlsczo6cGFyc2VFbnVtVmFsdWVzRnJvbVN0cmluZyhDMlN0cmluZ0xpdGVyYWwgdmFsdWUpIHsKKyAgICBzdGQ6OnZlY3RvcjxDMlN0cmluZz4gZm91bmROYW1lczsKKyAgICBzaXplX3QgcG9zID0gMCwgbGVuID0gc3RybGVuKHZhbHVlKTsKKyAgICBkbyB7CisgICAgICAgIHNpemVfdCBlbmRQb3MgPSBzdHJjc3BuKHZhbHVlICsgcG9zLCAiICw9IikgKyBwb3M7CisgICAgICAgIGlmIChlbmRQb3MgPiBwb3MpIHsKKyAgICAgICAgICAgIGZvdW5kTmFtZXMuZW1wbGFjZV9iYWNrKHZhbHVlICsgcG9zLCBlbmRQb3MgLSBwb3MpOworICAgICAgICB9CisgICAgICAgIGlmICh2YWx1ZVtlbmRQb3NdICYmIHZhbHVlW2VuZFBvc10gIT0gJywnKSB7CisgICAgICAgICAgICBlbmRQb3MgKz0gc3RyY3Nwbih2YWx1ZSArIGVuZFBvcywgIiwiKTsKKyAgICAgICAgfQorICAgICAgICBwb3MgPSBzdHJzcG4odmFsdWUgKyBlbmRQb3MsICIgLCIpICsgZW5kUG9zOworICAgIH0gd2hpbGUgKHBvcyA8IGxlbik7CisgICAgcmV0dXJuIGZvdW5kTmFtZXM7Cit9CisKKy8vLyBzYWZlKHIpIHBhcnNpbmcgZnJvbSBwYXJhbWV0ZXIgYmxvYgorLy9zdGF0aWMKK0MyUGFyYW0gKkMyUGFyYW1VdGlsczo6UGFyc2VGaXJzdChjb25zdCB1aW50OF90ICpibG9iLCBzaXplX3Qgc2l6ZSkgeworICAgIC8vIF9tU2l6ZSBtdXN0IGZpdCBpbnRvIHNpemUsIGJ1dCByZWFsbHkgQzJQYXJhbSBtdXN0IGFsc28gdG8gYmUgYSB2YWxpZCBwYXJhbQorICAgIGlmIChzaXplIDwgc2l6ZW9mKEMyUGFyYW0pKSB7CisgICAgICAgIHJldHVybiBudWxscHRyOworICAgIH0KKyAgICAvLyBfbVNpemUgbXVzdCBtYXRjaCBsZW5ndGgKKyAgICBDMlBhcmFtICpwYXJhbSA9IChDMlBhcmFtKilibG9iOworICAgIGlmIChwYXJhbS0+c2l6ZSgpID4gc2l6ZSkgeworICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICB9CisgICAgcmV0dXJuIHBhcmFtOworfQorCmRpZmYgLS1naXQgYS9tZWRpYS9leHRyYWN0b3JzL2FhYy9BQUNFeHRyYWN0b3IuY3BwIGIvbWVkaWEvZXh0cmFjdG9ycy9hYWMvQUFDRXh0cmFjdG9yLmNwcAppbmRleCA5ZmM1YTc2Li5mMjc4MTA3IDEwMDY0NAotLS0gYS9tZWRpYS9leHRyYWN0b3JzL2FhYy9BQUNFeHRyYWN0b3IuY3BwCisrKyBiL21lZGlhL2V4dHJhY3RvcnMvYWFjL0FBQ0V4dHJhY3Rvci5jcHAKQEAgLTE5LDM0ICsxOSwzMiBAQAogI2luY2x1ZGUgPHV0aWxzL0xvZy5oPgogCiAjaW5jbHVkZSAiQUFDRXh0cmFjdG9yLmgiCi0jaW5jbHVkZSA8bWVkaWEvRGF0YVNvdXJjZUJhc2UuaD4KLSNpbmNsdWRlIDxtZWRpYS9NZWRpYVRyYWNrLmg+CisjaW5jbHVkZSA8bWVkaWEvTWVkaWFFeHRyYWN0b3JQbHVnaW5BcGkuaD4KICNpbmNsdWRlIDxtZWRpYS9zdGFnZWZyaWdodC9mb3VuZGF0aW9uL0FCdWZmZXIuaD4KICNpbmNsdWRlIDxtZWRpYS9zdGFnZWZyaWdodC9mb3VuZGF0aW9uL0FNZXNzYWdlLmg+CiAjaW5jbHVkZSA8bWVkaWEvc3RhZ2VmcmlnaHQvZm91bmRhdGlvbi9BRGVidWcuaD4KICNpbmNsdWRlIDxtZWRpYS9zdGFnZWZyaWdodC9NZWRpYUJ1ZmZlckdyb3VwLmg+CiAjaW5jbHVkZSA8bWVkaWEvc3RhZ2VmcmlnaHQvTWVkaWFEZWZzLmg+CiAjaW5jbHVkZSA8bWVkaWEvc3RhZ2VmcmlnaHQvTWVkaWFFcnJvcnMuaD4KLSNpbmNsdWRlIDxtZWRpYS9zdGFnZWZyaWdodC9NZXRhRGF0YS5oPgogI2luY2x1ZGUgPG1lZGlhL3N0YWdlZnJpZ2h0L01ldGFEYXRhVXRpbHMuaD4KICNpbmNsdWRlIDx1dGlscy9TdHJpbmc4Lmg+CiAKIG5hbWVzcGFjZSBhbmRyb2lkIHsKIAotY2xhc3MgQUFDU291cmNlIDogcHVibGljIE1lZGlhVHJhY2sgeworY2xhc3MgQUFDU291cmNlIDogcHVibGljIE1lZGlhVHJhY2tIZWxwZXJWMiB7CiBwdWJsaWM6CiAgICAgQUFDU291cmNlKAotICAgICAgICAgICAgRGF0YVNvdXJjZUJhc2UgKnNvdXJjZSwKLSAgICAgICAgICAgIE1ldGFEYXRhQmFzZSAmbWV0YSwKKyAgICAgICAgICAgIERhdGFTb3VyY2VIZWxwZXIgKnNvdXJjZSwKKyAgICAgICAgICAgIEFNZWRpYUZvcm1hdCAqbWV0YSwKICAgICAgICAgICAgIGNvbnN0IFZlY3Rvcjx1aW50NjRfdD4gJm9mZnNldF92ZWN0b3IsCiAgICAgICAgICAgICBpbnQ2NF90IGZyYW1lX2R1cmF0aW9uX3VzKTsKIAotICAgIHZpcnR1YWwgc3RhdHVzX3Qgc3RhcnQoTWV0YURhdGFCYXNlICpwYXJhbXMgPSBOVUxMKTsKLSAgICB2aXJ0dWFsIHN0YXR1c190IHN0b3AoKTsKKyAgICB2aXJ0dWFsIG1lZGlhX3N0YXR1c190IHN0YXJ0KCk7CisgICAgdmlydHVhbCBtZWRpYV9zdGF0dXNfdCBzdG9wKCk7CiAKLSAgICB2aXJ0dWFsIHN0YXR1c190IGdldEZvcm1hdChNZXRhRGF0YUJhc2UmKTsKKyAgICB2aXJ0dWFsIG1lZGlhX3N0YXR1c190IGdldEZvcm1hdChBTWVkaWFGb3JtYXQqKTsKIAotICAgIHZpcnR1YWwgc3RhdHVzX3QgcmVhZCgKKyAgICB2aXJ0dWFsIG1lZGlhX3N0YXR1c190IHJlYWQoCiAgICAgICAgICAgICBNZWRpYUJ1ZmZlckJhc2UgKipidWZmZXIsIGNvbnN0IFJlYWRPcHRpb25zICpvcHRpb25zID0gTlVMTCk7CiAKIHByb3RlY3RlZDoKQEAgLTU0LDggKzUyLDggQEAKIAogcHJpdmF0ZToKICAgICBzdGF0aWMgY29uc3Qgc2l6ZV90IGtNYXhGcmFtZVNpemU7Ci0gICAgRGF0YVNvdXJjZUJhc2UgKm1EYXRhU291cmNlOwotICAgIE1ldGFEYXRhQmFzZSBtTWV0YTsKKyAgICBEYXRhU291cmNlSGVscGVyICptRGF0YVNvdXJjZTsKKyAgICBBTWVkaWFGb3JtYXQgKm1NZXRhOwogCiAgICAgb2ZmNjRfdCBtT2Zmc2V0OwogICAgIGludDY0X3QgbUN1cnJlbnRUaW1lVXM7CkBAIC05Miw3ICs5MCw3IEBACiAvLyBUaGUgcmV0dXJuZWQgdmFsdWUgaXMgdGhlIEFBQyBmcmFtZSBzaXplIHdpdGggdGhlIEFEVFMgaGVhZGVyIGxlbmd0aCAocmVnYXJkbGVzcyBvZgogLy8gICAgIHRoZSBwcmVzZW5jZSBvZiB0aGUgQ1JDKS4KIC8vIElmIGhlYWRlclNpemUgaXMgbm9uLU5VTEwsIGl0IHdpbGwgYmUgdXNlZCB0byByZXR1cm4gdGhlIHNpemUgb2YgdGhlIGhlYWRlciBvZiB0aGlzIEFEVFMgZnJhbWUuCi1zdGF0aWMgc2l6ZV90IGdldEFkdHNGcmFtZUxlbmd0aChEYXRhU291cmNlQmFzZSAqc291cmNlLCBvZmY2NF90IG9mZnNldCwgc2l6ZV90KiBoZWFkZXJTaXplKSB7CitzdGF0aWMgc2l6ZV90IGdldEFkdHNGcmFtZUxlbmd0aChEYXRhU291cmNlSGVscGVyICpzb3VyY2UsIG9mZjY0X3Qgb2Zmc2V0LCBzaXplX3QqIGhlYWRlclNpemUpIHsKIAogICAgIGNvbnN0IHNpemVfdCBrQWR0c0hlYWRlckxlbmd0aE5vQ3JjID0gNzsKICAgICBjb25zdCBzaXplX3Qga0FkdHNIZWFkZXJMZW5ndGhXaXRoQ3JjID0gOTsKQEAgLTEzMyw3ICsxMzEsNyBAQAogfQogCiBBQUNFeHRyYWN0b3I6OkFBQ0V4dHJhY3RvcigKLSAgICAgICAgRGF0YVNvdXJjZUJhc2UgKnNvdXJjZSwgb2ZmNjRfdCBvZmZzZXQpCisgICAgICAgIERhdGFTb3VyY2VIZWxwZXIgKnNvdXJjZSwgb2ZmNjRfdCBvZmZzZXQpCiAgICAgOiBtRGF0YVNvdXJjZShzb3VyY2UpLAogICAgICAgbUluaXRDaGVjayhOT19JTklUKSwKICAgICAgIG1GcmFtZUR1cmF0aW9uVXMoMCkgewpAQCAtMTUxLDYgKzE0OSw3IEBACiAgICAgfQogICAgIGNoYW5uZWwgPSAoaGVhZGVyWzBdICYgMHgxKSA8PCAyIHwgKGhlYWRlclsxXSA+PiA2KTsKIAorICAgIG1NZXRhID0gQU1lZGlhRm9ybWF0X25ldygpOwogICAgIE1ha2VBQUNDb2RlY1NwZWNpZmljRGF0YShtTWV0YSwgcHJvZmlsZSwgc2ZfaW5kZXgsIGNoYW5uZWwpOwogCiAgICAgb2ZmNjRfdCBzdHJlYW1TaXplLCBudW1GcmFtZXMgPSAwOwpAQCAtMTc0LDI5ICsxNzMsMzAgQEAKICAgICAgICAgLy8gUm91bmQgdXAgYW5kIGdldCB0aGUgZHVyYXRpb24KICAgICAgICAgbUZyYW1lRHVyYXRpb25VcyA9ICgxMDI0ICogMTAwMDAwMGxsICsgKHNyIC0gMSkpIC8gc3I7CiAgICAgICAgIGR1cmF0aW9uID0gbnVtRnJhbWVzICogbUZyYW1lRHVyYXRpb25VczsKLSAgICAgICAgbU1ldGEuc2V0SW50NjQoa0tleUR1cmF0aW9uLCBkdXJhdGlvbik7CisgICAgICAgIEFNZWRpYUZvcm1hdF9zZXRJbnQ2NChtTWV0YSwgQU1FRElBRk9STUFUX0tFWV9EVVJBVElPTiwgZHVyYXRpb24pOwogICAgIH0KIAogICAgIG1Jbml0Q2hlY2sgPSBPSzsKIH0KIAogQUFDRXh0cmFjdG9yOjp+QUFDRXh0cmFjdG9yKCkgeworICAgIEFNZWRpYUZvcm1hdF9kZWxldGUobU1ldGEpOwogfQogCi1zdGF0dXNfdCBBQUNFeHRyYWN0b3I6OmdldE1ldGFEYXRhKE1ldGFEYXRhQmFzZSAmbWV0YSkgewotICAgIG1ldGEuY2xlYXIoKTsKK21lZGlhX3N0YXR1c190IEFBQ0V4dHJhY3Rvcjo6Z2V0TWV0YURhdGEoQU1lZGlhRm9ybWF0ICptZXRhKSB7CisgICAgQU1lZGlhRm9ybWF0X2NsZWFyKG1ldGEpOwogICAgIGlmIChtSW5pdENoZWNrID09IE9LKSB7Ci0gICAgICAgIG1ldGEuc2V0Q1N0cmluZyhrS2V5TUlNRVR5cGUsIE1FRElBX01JTUVUWVBFX0FVRElPX0FBQ19BRFRTKTsKKyAgICAgICAgQU1lZGlhRm9ybWF0X3NldFN0cmluZyhtZXRhLCBBTUVESUFGT1JNQVRfS0VZX01JTUUsIE1FRElBX01JTUVUWVBFX0FVRElPX0FBQ19BRFRTKTsKICAgICB9CiAKLSAgICByZXR1cm4gT0s7CisgICAgcmV0dXJuIEFNRURJQV9PSzsKIH0KIAogc2l6ZV90IEFBQ0V4dHJhY3Rvcjo6Y291bnRUcmFja3MoKSB7CiAgICAgcmV0dXJuIG1Jbml0Q2hlY2sgPT0gT0sgPyAxIDogMDsKIH0KIAotTWVkaWFUcmFjayAqQUFDRXh0cmFjdG9yOjpnZXRUcmFjayhzaXplX3QgaW5kZXgpIHsKK01lZGlhVHJhY2tIZWxwZXJWMiAqQUFDRXh0cmFjdG9yOjpnZXRUcmFjayhzaXplX3QgaW5kZXgpIHsKICAgICBpZiAobUluaXRDaGVjayAhPSBPSyB8fCBpbmRleCAhPSAwKSB7CiAgICAgICAgIHJldHVybiBOVUxMOwogICAgIH0KQEAgLTIwNCwxMyArMjA0LDEyIEBACiAgICAgcmV0dXJuIG5ldyBBQUNTb3VyY2UobURhdGFTb3VyY2UsIG1NZXRhLCBtT2Zmc2V0VmVjdG9yLCBtRnJhbWVEdXJhdGlvblVzKTsKIH0KIAotc3RhdHVzX3QgQUFDRXh0cmFjdG9yOjpnZXRUcmFja01ldGFEYXRhKE1ldGFEYXRhQmFzZSAmbWV0YSwgc2l6ZV90IGluZGV4LCB1aW50MzJfdCAvKiBmbGFncyAqLykgeworbWVkaWFfc3RhdHVzX3QgQUFDRXh0cmFjdG9yOjpnZXRUcmFja01ldGFEYXRhKEFNZWRpYUZvcm1hdCAqbWV0YSwgc2l6ZV90IGluZGV4LCB1aW50MzJfdCAvKiBmbGFncyAqLykgewogICAgIGlmIChtSW5pdENoZWNrICE9IE9LIHx8IGluZGV4ICE9IDApIHsKLSAgICAgICAgcmV0dXJuIFVOS05PV05fRVJST1I7CisgICAgICAgIHJldHVybiBBTUVESUFfRVJST1JfVU5LTk9XTjsKICAgICB9CiAKLSAgICBtZXRhID0gbU1ldGE7Ci0gICAgcmV0dXJuIE9LOworICAgIHJldHVybiBBTWVkaWFGb3JtYXRfY29weShtZXRhLCBtTWV0YSk7CiB9CiAKIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCkBAIC0yMTksOCArMjE4LDggQEAKIGNvbnN0IHNpemVfdCBBQUNTb3VyY2U6OmtNYXhGcmFtZVNpemUgPSA4MTkyOwogCiBBQUNTb3VyY2U6OkFBQ1NvdXJjZSgKLSAgICAgICAgRGF0YVNvdXJjZUJhc2UgKnNvdXJjZSwKLSAgICAgICAgTWV0YURhdGFCYXNlICZtZXRhLAorICAgICAgICBEYXRhU291cmNlSGVscGVyICpzb3VyY2UsCisgICAgICAgIEFNZWRpYUZvcm1hdCAqbWV0YSwKICAgICAgICAgY29uc3QgVmVjdG9yPHVpbnQ2NF90PiAmb2Zmc2V0X3ZlY3RvciwKICAgICAgICAgaW50NjRfdCBmcmFtZV9kdXJhdGlvbl91cykKICAgICA6IG1EYXRhU291cmNlKHNvdXJjZSksCkBAIC0yMzksNyArMjM4LDcgQEAKICAgICB9CiB9CiAKLXN0YXR1c190IEFBQ1NvdXJjZTo6c3RhcnQoTWV0YURhdGFCYXNlICogLyogcGFyYW1zICovKSB7CittZWRpYV9zdGF0dXNfdCBBQUNTb3VyY2U6OnN0YXJ0KCkgewogICAgIENIRUNLKCFtU3RhcnRlZCk7CiAKICAgICBpZiAobU9mZnNldFZlY3Rvci5lbXB0eSgpKSB7CkBAIC0yNTMsMjUgKzI1MiwyNCBAQAogICAgIG1Hcm91cC0+YWRkX2J1ZmZlcihNZWRpYUJ1ZmZlckJhc2U6OkNyZWF0ZShrTWF4RnJhbWVTaXplKSk7CiAgICAgbVN0YXJ0ZWQgPSB0cnVlOwogCi0gICAgcmV0dXJuIE9LOworICAgIHJldHVybiBBTUVESUFfT0s7CiB9CiAKLXN0YXR1c190IEFBQ1NvdXJjZTo6c3RvcCgpIHsKK21lZGlhX3N0YXR1c190IEFBQ1NvdXJjZTo6c3RvcCgpIHsKICAgICBDSEVDSyhtU3RhcnRlZCk7CiAKICAgICBkZWxldGUgbUdyb3VwOwogICAgIG1Hcm91cCA9IE5VTEw7CiAKICAgICBtU3RhcnRlZCA9IGZhbHNlOwotICAgIHJldHVybiBPSzsKKyAgICByZXR1cm4gQU1FRElBX09LOwogfQogCi1zdGF0dXNfdCBBQUNTb3VyY2U6OmdldEZvcm1hdChNZXRhRGF0YUJhc2UgJm1ldGEpIHsKLSAgICBtZXRhID0gbU1ldGE7Ci0gICAgcmV0dXJuIE9LOworbWVkaWFfc3RhdHVzX3QgQUFDU291cmNlOjpnZXRGb3JtYXQoQU1lZGlhRm9ybWF0ICptZXRhKSB7CisgICAgcmV0dXJuIEFNZWRpYUZvcm1hdF9jb3B5KG1ldGEsIG1NZXRhKTsKIH0KIAotc3RhdHVzX3QgQUFDU291cmNlOjpyZWFkKAorbWVkaWFfc3RhdHVzX3QgQUFDU291cmNlOjpyZWFkKAogICAgICAgICBNZWRpYUJ1ZmZlckJhc2UgKipvdXQsIGNvbnN0IFJlYWRPcHRpb25zICpvcHRpb25zKSB7CiAgICAgKm91dCA9IE5VTEw7CiAKQEAgLTI4Miw3ICsyODAsNyBAQAogICAgICAgICAgICAgaW50NjRfdCBzZWVrRnJhbWUgPSBzZWVrVGltZVVzIC8gbUZyYW1lRHVyYXRpb25VczsKICAgICAgICAgICAgIGlmIChzZWVrRnJhbWUgPCAwIHx8IHNlZWtGcmFtZSA+PSAoaW50NjRfdCltT2Zmc2V0VmVjdG9yLnNpemUoKSkgewogICAgICAgICAgICAgICAgIGFuZHJvaWRfZXJyb3JXcml0ZUxvZygweDUzNGU0NTU0LCAiNzAyMzk1MDciKTsKLSAgICAgICAgICAgICAgICByZXR1cm4gRVJST1JfTUFMRk9STUVEOworICAgICAgICAgICAgICAgIHJldHVybiBBTUVESUFfRVJST1JfTUFMRk9STUVEOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgbUN1cnJlbnRUaW1lVXMgPSBzZWVrRnJhbWUgKiBtRnJhbWVEdXJhdGlvblVzOwogCkBAIC0yOTIsMTMgKzI5MCwxMyBAQAogCiAgICAgc2l6ZV90IGZyYW1lU2l6ZSwgZnJhbWVTaXplV2l0aG91dEhlYWRlciwgaGVhZGVyU2l6ZTsKICAgICBpZiAoKGZyYW1lU2l6ZSA9IGdldEFkdHNGcmFtZUxlbmd0aChtRGF0YVNvdXJjZSwgbU9mZnNldCwgJmhlYWRlclNpemUpKSA9PSAwKSB7Ci0gICAgICAgIHJldHVybiBFUlJPUl9FTkRfT0ZfU1RSRUFNOworICAgICAgICByZXR1cm4gQU1FRElBX0VSUk9SX0VORF9PRl9TVFJFQU07CiAgICAgfQogCiAgICAgTWVkaWFCdWZmZXJCYXNlICpidWZmZXI7CiAgICAgc3RhdHVzX3QgZXJyID0gbUdyb3VwLT5hY3F1aXJlX2J1ZmZlcigmYnVmZmVyKTsKICAgICBpZiAoZXJyICE9IE9LKSB7Ci0gICAgICAgIHJldHVybiBlcnI7CisgICAgICAgIHJldHVybiBBTUVESUFfRVJST1JfVU5LTk9XTjsKICAgICB9CiAKICAgICBmcmFtZVNpemVXaXRob3V0SGVhZGVyID0gZnJhbWVTaXplIC0gaGVhZGVyU2l6ZTsKQEAgLTMwNyw3ICszMDUsNyBAQAogICAgICAgICBidWZmZXItPnJlbGVhc2UoKTsKICAgICAgICAgYnVmZmVyID0gTlVMTDsKIAotICAgICAgICByZXR1cm4gRVJST1JfSU87CisgICAgICAgIHJldHVybiBBTUVESUFfRVJST1JfSU87CiAgICAgfQogCiAgICAgYnVmZmVyLT5zZXRfcmFuZ2UoMCwgZnJhbWVTaXplV2l0aG91dEhlYWRlcik7CkBAIC0zMTgsMjYgKzMxNiwyNyBAQAogICAgIG1DdXJyZW50VGltZVVzICs9IG1GcmFtZUR1cmF0aW9uVXM7CiAKICAgICAqb3V0ID0gYnVmZmVyOwotICAgIHJldHVybiBPSzsKKyAgICByZXR1cm4gQU1FRElBX09LOwogfQogCiAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLwogCi1zdGF0aWMgTWVkaWFFeHRyYWN0b3IqIENyZWF0ZUV4dHJhY3RvcigKLSAgICAgICAgRGF0YVNvdXJjZUJhc2UgKnNvdXJjZSwKK3N0YXRpYyBDTWVkaWFFeHRyYWN0b3JWMiogQ3JlYXRlRXh0cmFjdG9yKAorICAgICAgICBDRGF0YVNvdXJjZSAqc291cmNlLAogICAgICAgICB2b2lkICptZXRhKSB7CiAgICAgb2ZmNjRfdCBvZmZzZXQgPSAqc3RhdGljX2Nhc3Q8b2ZmNjRfdCo+KG1ldGEpOwotICAgIHJldHVybiBuZXcgQUFDRXh0cmFjdG9yKHNvdXJjZSwgb2Zmc2V0KTsKKyAgICByZXR1cm4gd3JhcFYyKG5ldyBBQUNFeHRyYWN0b3IobmV3IERhdGFTb3VyY2VIZWxwZXIoc291cmNlKSwgb2Zmc2V0KSk7CiB9CiAKLXN0YXRpYyBNZWRpYUV4dHJhY3Rvcjo6Q3JlYXRvckZ1bmMgU25pZmYoCi0gICAgICAgIERhdGFTb3VyY2VCYXNlICpzb3VyY2UsIGZsb2F0ICpjb25maWRlbmNlLCB2b2lkICoqbWV0YSwKLSAgICAgICAgTWVkaWFFeHRyYWN0b3I6OkZyZWVNZXRhRnVuYyAqZnJlZU1ldGEpIHsKK3N0YXRpYyBDcmVhdG9yRnVuY1YyIFNuaWZmKAorICAgICAgICBDRGF0YVNvdXJjZSAqc291cmNlLCBmbG9hdCAqY29uZmlkZW5jZSwgdm9pZCAqKm1ldGEsCisgICAgICAgIEZyZWVNZXRhRnVuYyAqZnJlZU1ldGEpIHsKICAgICBvZmY2NF90IHBvcyA9IDA7CiAKKyAgICBEYXRhU291cmNlSGVscGVyIGhlbHBlcihzb3VyY2UpOwogICAgIGZvciAoOzspIHsKICAgICAgICAgdWludDhfdCBpZDNoZWFkZXJbMTBdOwotICAgICAgICBpZiAoc291cmNlLT5yZWFkQXQocG9zLCBpZDNoZWFkZXIsIHNpemVvZihpZDNoZWFkZXIpKQorICAgICAgICBpZiAoaGVscGVyLnJlYWRBdChwb3MsIGlkM2hlYWRlciwgc2l6ZW9mKGlkM2hlYWRlcikpCiAgICAgICAgICAgICAgICAgPCAoc3NpemVfdClzaXplb2YoaWQzaGVhZGVyKSkgewogICAgICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgICAgIH0KQEAgLTM2NCw3ICszNjMsNyBAQAogCiAgICAgdWludDhfdCBoZWFkZXJbMl07CiAKLSAgICBpZiAoc291cmNlLT5yZWFkQXQocG9zLCAmaGVhZGVyLCAyKSAhPSAyKSB7CisgICAgaWYgKGhlbHBlci5yZWFkQXQocG9zLCAmaGVhZGVyLCAyKSAhPSAyKSB7CiAgICAgICAgIHJldHVybiBOVUxMOwogICAgIH0KIApAQCAtMzg3LDEzICszODYsMTMgQEAKIGV4dGVybiAiQyIgewogLy8gVGhpcyBpcyB0aGUgb25seSBzeW1ib2wgdGhhdCBuZWVkcyB0byBiZSBleHBvcnRlZAogX19hdHRyaWJ1dGVfXyAoKHZpc2liaWxpdHkgKCJkZWZhdWx0IikpKQotTWVkaWFFeHRyYWN0b3I6OkV4dHJhY3RvckRlZiBHRVRFWFRSQUNUT1JERUYoKSB7CitFeHRyYWN0b3JEZWYgR0VURVhUUkFDVE9SREVGKCkgewogICAgIHJldHVybiB7Ci0gICAgICAgIE1lZGlhRXh0cmFjdG9yOjpFWFRSQUNUT1JERUZfVkVSU0lPTiwKKyAgICAgICAgRVhUUkFDVE9SREVGX1ZFUlNJT05fQ1VSUkVOVCwKICAgICAgICAgVVVJRCgiNGZkODBlYWUtMDNkMi00ZDcyLTllYjktNDhmYTZiYjU0NjEzIiksCiAgICAgICAgIDEsIC8vIHZlcnNpb24KICAgICAgICAgIkFBQyBFeHRyYWN0b3IiLAotICAgICAgICBTbmlmZgorICAgICAgICB7IC52MiA9IFNuaWZmIH0KICAgICB9OwogfQogCmRpZmYgLS1naXQgYS9tZWRpYS9leHRyYWN0b3JzL2FhYy9BQUNFeHRyYWN0b3IuaCBiL21lZGlhL2V4dHJhY3RvcnMvYWFjL0FBQ0V4dHJhY3Rvci5oCmluZGV4IDlkYWRiZWQuLjNiMTFmOTUgMTAwNjQ0Ci0tLSBhL21lZGlhL2V4dHJhY3RvcnMvYWFjL0FBQ0V4dHJhY3Rvci5oCisrKyBiL21lZGlhL2V4dHJhY3RvcnMvYWFjL0FBQ0V4dHJhY3Rvci5oCkBAIC0xOCw4ICsxOCw5IEBACiAKICNkZWZpbmUgQUFDX0VYVFJBQ1RPUl9IXwogCi0jaW5jbHVkZSA8bWVkaWEvTWVkaWFFeHRyYWN0b3IuaD4KLSNpbmNsdWRlIDxtZWRpYS9zdGFnZWZyaWdodC9NZXRhRGF0YUJhc2UuaD4KKyNpbmNsdWRlIDxtZWRpYS9NZWRpYUV4dHJhY3RvclBsdWdpbkFwaS5oPgorI2luY2x1ZGUgPG1lZGlhL01lZGlhRXh0cmFjdG9yUGx1Z2luSGVscGVyLmg+CisjaW5jbHVkZSA8bWVkaWEvTmRrTWVkaWFGb3JtYXQuaD4KIAogI2luY2x1ZGUgPHV0aWxzL1ZlY3Rvci5oPgogCkBAIC0yOCwyMyArMjksMjMgQEAKIHN0cnVjdCBBTWVzc2FnZTsKIGNsYXNzIFN0cmluZzg7CiAKLWNsYXNzIEFBQ0V4dHJhY3RvciA6IHB1YmxpYyBNZWRpYUV4dHJhY3RvciB7CitjbGFzcyBBQUNFeHRyYWN0b3IgOiBwdWJsaWMgTWVkaWFFeHRyYWN0b3JQbHVnaW5IZWxwZXJWMiB7CiBwdWJsaWM6Ci0gICAgQUFDRXh0cmFjdG9yKERhdGFTb3VyY2VCYXNlICpzb3VyY2UsIG9mZjY0X3Qgb2Zmc2V0KTsKKyAgICBBQUNFeHRyYWN0b3IoRGF0YVNvdXJjZUhlbHBlciAqc291cmNlLCBvZmY2NF90IG9mZnNldCk7CiAKICAgICB2aXJ0dWFsIHNpemVfdCBjb3VudFRyYWNrcygpOwotICAgIHZpcnR1YWwgTWVkaWFUcmFjayAqZ2V0VHJhY2soc2l6ZV90IGluZGV4KTsKLSAgICB2aXJ0dWFsIHN0YXR1c190IGdldFRyYWNrTWV0YURhdGEoTWV0YURhdGFCYXNlJiBtZXRhLCBzaXplX3QgaW5kZXgsIHVpbnQzMl90IGZsYWdzKTsKKyAgICB2aXJ0dWFsIE1lZGlhVHJhY2tIZWxwZXJWMiAqZ2V0VHJhY2soc2l6ZV90IGluZGV4KTsKKyAgICB2aXJ0dWFsIG1lZGlhX3N0YXR1c190IGdldFRyYWNrTWV0YURhdGEoQU1lZGlhRm9ybWF0ICptZXRhLCBzaXplX3QgaW5kZXgsIHVpbnQzMl90IGZsYWdzKTsKIAotICAgIHZpcnR1YWwgc3RhdHVzX3QgZ2V0TWV0YURhdGEoTWV0YURhdGFCYXNlJiBtZXRhKTsKKyAgICB2aXJ0dWFsIG1lZGlhX3N0YXR1c190IGdldE1ldGFEYXRhKEFNZWRpYUZvcm1hdCAqbWV0YSk7CiAgICAgdmlydHVhbCBjb25zdCBjaGFyICogbmFtZSgpIHsgcmV0dXJuICJBQUNFeHRyYWN0b3IiOyB9CiAKIHByb3RlY3RlZDoKICAgICB2aXJ0dWFsIH5BQUNFeHRyYWN0b3IoKTsKIAogcHJpdmF0ZToKLSAgICBEYXRhU291cmNlQmFzZSAqbURhdGFTb3VyY2U7Ci0gICAgTWV0YURhdGFCYXNlIG1NZXRhOworICAgIERhdGFTb3VyY2VIZWxwZXIgKm1EYXRhU291cmNlOworICAgIEFNZWRpYUZvcm1hdCAqbU1ldGE7CiAgICAgc3RhdHVzX3QgbUluaXRDaGVjazsKIAogICAgIFZlY3Rvcjx1aW50NjRfdD4gbU9mZnNldFZlY3RvcjsKQEAgLTU1LDcgKzU2LDcgQEAKIH07CiAKIGJvb2wgU25pZmZBQUMoCi0gICAgICAgIERhdGFTb3VyY2VCYXNlICpzb3VyY2UsIFN0cmluZzggKm1pbWVUeXBlLCBmbG9hdCAqY29uZmlkZW5jZSwgb2ZmNjRfdCAqb2Zmc2V0KTsKKyAgICAgICAgRGF0YVNvdXJjZUhlbHBlciAqc291cmNlLCBTdHJpbmc4ICptaW1lVHlwZSwgZmxvYXQgKmNvbmZpZGVuY2UsIG9mZjY0X3QgKm9mZnNldCk7CiAKIH0gIC8vIG5hbWVzcGFjZSBhbmRyb2lkCiAKZGlmZiAtLWdpdCBhL21lZGlhL2V4dHJhY3RvcnMvYWFjL0FuZHJvaWQuYnAgYi9tZWRpYS9leHRyYWN0b3JzL2FhYy9BbmRyb2lkLmJwCmluZGV4IDVmMDViNDIuLjQyYjBhNjQgMTAwNjQ0Ci0tLSBhL21lZGlhL2V4dHJhY3RvcnMvYWFjL0FuZHJvaWQuYnAKKysrIGIvbWVkaWEvZXh0cmFjdG9ycy9hYWMvQW5kcm9pZC5icApAQCAtOSw2ICs5LDcgQEAKICAgICBzaGFyZWRfbGliczogWwogICAgICAgICAibGlibG9nIiwKICAgICAgICAgImxpYm1lZGlhZXh0cmFjdG9yIiwKKyAgICAgICAgImxpYm1lZGlhbmRrIiwKICAgICBdLAogCiAgICAgc3RhdGljX2xpYnM6IFsKZGlmZiAtLWdpdCBhL21lZGlhL2V4dHJhY3RvcnMvYW1yL0FNUkV4dHJhY3Rvci5jcHAgYi9tZWRpYS9leHRyYWN0b3JzL2Ftci9BTVJFeHRyYWN0b3IuY3BwCmluZGV4IGY1NmQ1ZWYuLjUxMWIxNGQgMTAwNjQ0Ci0tLSBhL21lZGlhL2V4dHJhY3RvcnMvYW1yL0FNUkV4dHJhY3Rvci5jcHAKKysrIGIvbWVkaWEvZXh0cmFjdG9ycy9hbXIvQU1SRXh0cmFjdG9yLmNwcApAQCAtMjAsOCArMjAsNiBAQAogCiAjaW5jbHVkZSAiQU1SRXh0cmFjdG9yLmgiCiAKLSNpbmNsdWRlIDxtZWRpYS9EYXRhU291cmNlQmFzZS5oPgotI2luY2x1ZGUgPG1lZGlhL01lZGlhVHJhY2suaD4KICNpbmNsdWRlIDxtZWRpYS9zdGFnZWZyaWdodC9mb3VuZGF0aW9uL0FEZWJ1Zy5oPgogI2luY2x1ZGUgPG1lZGlhL3N0YWdlZnJpZ2h0L01lZGlhQnVmZmVyR3JvdXAuaD4KICNpbmNsdWRlIDxtZWRpYS9zdGFnZWZyaWdodC9NZWRpYURlZnMuaD4KQEAgLTMxLDI5ICsyOSwyOSBAQAogCiBuYW1lc3BhY2UgYW5kcm9pZCB7CiAKLWNsYXNzIEFNUlNvdXJjZSA6IHB1YmxpYyBNZWRpYVRyYWNrIHsKK2NsYXNzIEFNUlNvdXJjZSA6IHB1YmxpYyBNZWRpYVRyYWNrSGVscGVyVjIgewogcHVibGljOgogICAgIEFNUlNvdXJjZSgKLSAgICAgICAgICAgIERhdGFTb3VyY2VCYXNlICpzb3VyY2UsCi0gICAgICAgICAgICBNZXRhRGF0YUJhc2UgJm1ldGEsCisgICAgICAgICAgICBEYXRhU291cmNlSGVscGVyICpzb3VyY2UsCisgICAgICAgICAgICBBTWVkaWFGb3JtYXQgKm1ldGEsCiAgICAgICAgICAgICBib29sIGlzV2lkZSwKICAgICAgICAgICAgIGNvbnN0IG9mZjY0X3QgKm9mZnNldF90YWJsZSwKICAgICAgICAgICAgIHNpemVfdCBvZmZzZXRfdGFibGVfbGVuZ3RoKTsKIAotICAgIHZpcnR1YWwgc3RhdHVzX3Qgc3RhcnQoTWV0YURhdGFCYXNlICpwYXJhbXMgPSBOVUxMKTsKLSAgICB2aXJ0dWFsIHN0YXR1c190IHN0b3AoKTsKKyAgICB2aXJ0dWFsIG1lZGlhX3N0YXR1c190IHN0YXJ0KCk7CisgICAgdmlydHVhbCBtZWRpYV9zdGF0dXNfdCBzdG9wKCk7CiAKLSAgICB2aXJ0dWFsIHN0YXR1c190IGdldEZvcm1hdChNZXRhRGF0YUJhc2UgJik7CisgICAgdmlydHVhbCBtZWRpYV9zdGF0dXNfdCBnZXRGb3JtYXQoQU1lZGlhRm9ybWF0ICopOwogCi0gICAgdmlydHVhbCBzdGF0dXNfdCByZWFkKAorICAgIHZpcnR1YWwgbWVkaWFfc3RhdHVzX3QgcmVhZCgKICAgICAgICAgICAgIE1lZGlhQnVmZmVyQmFzZSAqKmJ1ZmZlciwgY29uc3QgUmVhZE9wdGlvbnMgKm9wdGlvbnMgPSBOVUxMKTsKIAogcHJvdGVjdGVkOgogICAgIHZpcnR1YWwgfkFNUlNvdXJjZSgpOwogCiBwcml2YXRlOgotICAgIERhdGFTb3VyY2VCYXNlICptRGF0YVNvdXJjZTsKLSAgICBNZXRhRGF0YUJhc2UgbU1ldGE7CisgICAgRGF0YVNvdXJjZUhlbHBlciAqbURhdGFTb3VyY2U7CisgICAgQU1lZGlhRm9ybWF0ICptTWV0YTsKICAgICBib29sIG1Jc1dpZGU7CiAKICAgICBvZmY2NF90IG1PZmZzZXQ7CkBAIC05OCwyNyArOTYsMjcgQEAKICAgICByZXR1cm4gZnJhbWVTaXplOwogfQogCi1zdGF0aWMgc3RhdHVzX3QgZ2V0RnJhbWVTaXplQnlPZmZzZXQoRGF0YVNvdXJjZUJhc2UgKnNvdXJjZSwKK3N0YXRpYyBtZWRpYV9zdGF0dXNfdCBnZXRGcmFtZVNpemVCeU9mZnNldChEYXRhU291cmNlSGVscGVyICpzb3VyY2UsCiAgICAgICAgIG9mZjY0X3Qgb2Zmc2V0LCBib29sIGlzV2lkZSwgc2l6ZV90ICpmcmFtZVNpemUpIHsKICAgICB1aW50OF90IGhlYWRlcjsKICAgICBzc2l6ZV90IGNvdW50ID0gc291cmNlLT5yZWFkQXQob2Zmc2V0LCAmaGVhZGVyLCAxKTsKICAgICBpZiAoY291bnQgPT0gMCkgewotICAgICAgICByZXR1cm4gRVJST1JfRU5EX09GX1NUUkVBTTsKKyAgICAgICAgcmV0dXJuIEFNRURJQV9FUlJPUl9FTkRfT0ZfU1RSRUFNOwogICAgIH0gZWxzZSBpZiAoY291bnQgPCAwKSB7Ci0gICAgICAgIHJldHVybiBFUlJPUl9JTzsKKyAgICAgICAgcmV0dXJuIEFNRURJQV9FUlJPUl9JTzsKICAgICB9CiAKICAgICB1bnNpZ25lZCBGVCA9IChoZWFkZXIgPj4gMykgJiAweDBmOwogCiAgICAgKmZyYW1lU2l6ZSA9IGdldEZyYW1lU2l6ZShpc1dpZGUsIEZUKTsKICAgICBpZiAoKmZyYW1lU2l6ZSA9PSAwKSB7Ci0gICAgICAgIHJldHVybiBFUlJPUl9NQUxGT1JNRUQ7CisgICAgICAgIHJldHVybiBBTUVESUFfRVJST1JfTUFMRk9STUVEOwogICAgIH0KLSAgICByZXR1cm4gT0s7CisgICAgcmV0dXJuIEFNRURJQV9PSzsKIH0KIAogc3RhdGljIGJvb2wgU25pZmZBTVIoCi0gICAgICAgIERhdGFTb3VyY2VCYXNlICpzb3VyY2UsIGJvb2wgKmlzV2lkZSwgZmxvYXQgKmNvbmZpZGVuY2UpIHsKKyAgICAgICAgRGF0YVNvdXJjZUhlbHBlciAqc291cmNlLCBib29sICppc1dpZGUsIGZsb2F0ICpjb25maWRlbmNlKSB7CiAgICAgY2hhciBoZWFkZXJbOV07CiAKICAgICBpZiAoc291cmNlLT5yZWFkQXQoMCwgaGVhZGVyLCBzaXplb2YoaGVhZGVyKSkgIT0gc2l6ZW9mKGhlYWRlcikpIHsKQEAgLTE0NCw3ICsxNDIsNyBAQAogICAgIHJldHVybiBmYWxzZTsKIH0KIAotQU1SRXh0cmFjdG9yOjpBTVJFeHRyYWN0b3IoRGF0YVNvdXJjZUJhc2UgKnNvdXJjZSkKK0FNUkV4dHJhY3Rvcjo6QU1SRXh0cmFjdG9yKERhdGFTb3VyY2VIZWxwZXIgKnNvdXJjZSkKICAgICA6IG1EYXRhU291cmNlKHNvdXJjZSksCiAgICAgICBtSW5pdENoZWNrKE5PX0lOSVQpLAogICAgICAgbU9mZnNldFRhYmxlTGVuZ3RoKDApIHsKQEAgLTE1MywxMiArMTUxLDEyIEBACiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBtTWV0YS5zZXRDU3RyaW5nKAotICAgICAgICAgICAga0tleU1JTUVUeXBlLCBtSXNXaWRlID8gTUVESUFfTUlNRVRZUEVfQVVESU9fQU1SX1dCCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBNRURJQV9NSU1FVFlQRV9BVURJT19BTVJfTkIpOworICAgIG1NZXRhID0gQU1lZGlhRm9ybWF0X25ldygpOworICAgIEFNZWRpYUZvcm1hdF9zZXRTdHJpbmcobU1ldGEsIEFNRURJQUZPUk1BVF9LRVlfTUlNRSwKKyAgICAgICAgICAgIG1Jc1dpZGUgPyBNRURJQV9NSU1FVFlQRV9BVURJT19BTVJfV0IgOiBNRURJQV9NSU1FVFlQRV9BVURJT19BTVJfTkIpOwogCi0gICAgbU1ldGEuc2V0SW50MzIoa0tleUNoYW5uZWxDb3VudCwgMSk7Ci0gICAgbU1ldGEuc2V0SW50MzIoa0tleVNhbXBsZVJhdGUsIG1Jc1dpZGUgPyAxNjAwMCA6IDgwMDApOworICAgIEFNZWRpYUZvcm1hdF9zZXRJbnQzMihtTWV0YSwgQU1FRElBRk9STUFUX0tFWV9DSEFOTkVMX0NPVU5ULCAxKTsKKyAgICBBTWVkaWFGb3JtYXRfc2V0SW50MzIobU1ldGEsIEFNRURJQUZPUk1BVF9LRVlfU0FNUExFX1JBVEUsIG1Jc1dpZGUgPyAxNjAwMCA6IDgwMDApOwogCiAgICAgb2ZmNjRfdCBvZmZzZXQgPSBtSXNXaWRlID8gOSA6IDY7CiAgICAgb2ZmNjRfdCBzdHJlYW1TaXplOwpAQCAtMTY2LDExICsxNjQsMTEgQEAKICAgICBpbnQ2NF90IGR1cmF0aW9uID0gMDsKIAogICAgIGlmIChtRGF0YVNvdXJjZS0+Z2V0U2l6ZSgmc3RyZWFtU2l6ZSkgPT0gT0spIHsKLSAgICAgICAgIHdoaWxlIChvZmZzZXQgPCBzdHJlYW1TaXplKSB7Ci0gICAgICAgICAgICAgc3RhdHVzX3Qgc3RhdHVzID0gZ2V0RnJhbWVTaXplQnlPZmZzZXQoc291cmNlLCBvZmZzZXQsIG1Jc1dpZGUsICZmcmFtZVNpemUpOwotICAgICAgICAgICAgIGlmIChzdGF0dXMgPT0gRVJST1JfRU5EX09GX1NUUkVBTSkgewotICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICB9IGVsc2UgaWYgKHN0YXR1cyAhPSBPSykgeworICAgICAgICB3aGlsZSAob2Zmc2V0IDwgc3RyZWFtU2l6ZSkgeworICAgICAgICAgICAgc3RhdHVzX3Qgc3RhdHVzID0gZ2V0RnJhbWVTaXplQnlPZmZzZXQoc291cmNlLCBvZmZzZXQsIG1Jc1dpZGUsICZmcmFtZVNpemUpOworICAgICAgICAgICAgaWYgKHN0YXR1cyA9PSBFUlJPUl9FTkRfT0ZfU1RSRUFNKSB7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9IGVsc2UgaWYgKHN0YXR1cyAhPSBPSykgewogICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgIH0KIApAQCAtMTg1LDMwICsxODMsMzMgQEAKICAgICAgICAgICAgIG51bUZyYW1lcyArKzsKICAgICAgICAgfQogCi0gICAgICAgIG1NZXRhLnNldEludDY0KGtLZXlEdXJhdGlvbiwgZHVyYXRpb24pOworICAgICAgICBBTWVkaWFGb3JtYXRfc2V0SW50NjQobU1ldGEsIEFNRURJQUZPUk1BVF9LRVlfRFVSQVRJT04sIGR1cmF0aW9uKTsKICAgICB9CiAKICAgICBtSW5pdENoZWNrID0gT0s7CiB9CiAKIEFNUkV4dHJhY3Rvcjo6fkFNUkV4dHJhY3RvcigpIHsKKyAgICBkZWxldGUgbURhdGFTb3VyY2U7CisgICAgQU1lZGlhRm9ybWF0X2RlbGV0ZShtTWV0YSk7CiB9CiAKLXN0YXR1c190IEFNUkV4dHJhY3Rvcjo6Z2V0TWV0YURhdGEoTWV0YURhdGFCYXNlICZtZXRhKSB7Ci0gICAgbWV0YS5jbGVhcigpOworbWVkaWFfc3RhdHVzX3QgQU1SRXh0cmFjdG9yOjpnZXRNZXRhRGF0YShBTWVkaWFGb3JtYXQgKm1ldGEpIHsKKyAgICBBTWVkaWFGb3JtYXRfY2xlYXIobWV0YSk7CiAKICAgICBpZiAobUluaXRDaGVjayA9PSBPSykgewotICAgICAgICBtZXRhLnNldENTdHJpbmcoa0tleU1JTUVUeXBlLCBtSXNXaWRlID8gImF1ZGlvL2Ftci13YiIgOiAiYXVkaW8vYW1yIik7CisgICAgICAgIEFNZWRpYUZvcm1hdF9zZXRTdHJpbmcobWV0YSwKKyAgICAgICAgICAgICAgICBBTUVESUFGT1JNQVRfS0VZX01JTUUsIG1Jc1dpZGUgPyAiYXVkaW8vYW1yLXdiIiA6ICJhdWRpby9hbXIiKTsKICAgICB9CiAKLSAgICByZXR1cm4gT0s7CisgICAgcmV0dXJuIEFNRURJQV9PSzsKIH0KIAogc2l6ZV90IEFNUkV4dHJhY3Rvcjo6Y291bnRUcmFja3MoKSB7CiAgICAgcmV0dXJuIG1Jbml0Q2hlY2sgPT0gT0sgPyAxIDogMDsKIH0KIAotTWVkaWFUcmFjayAqQU1SRXh0cmFjdG9yOjpnZXRUcmFjayhzaXplX3QgaW5kZXgpIHsKK01lZGlhVHJhY2tIZWxwZXJWMiAqQU1SRXh0cmFjdG9yOjpnZXRUcmFjayhzaXplX3QgaW5kZXgpIHsKICAgICBpZiAobUluaXRDaGVjayAhPSBPSyB8fCBpbmRleCAhPSAwKSB7CiAgICAgICAgIHJldHVybiBOVUxMOwogICAgIH0KQEAgLTIxNywxOSArMjE4LDE4IEBACiAgICAgICAgICAgICBtT2Zmc2V0VGFibGUsIG1PZmZzZXRUYWJsZUxlbmd0aCk7CiB9CiAKLXN0YXR1c190IEFNUkV4dHJhY3Rvcjo6Z2V0VHJhY2tNZXRhRGF0YShNZXRhRGF0YUJhc2UgJm1ldGEsIHNpemVfdCBpbmRleCwgdWludDMyX3QgLyogZmxhZ3MgKi8pIHsKK21lZGlhX3N0YXR1c190IEFNUkV4dHJhY3Rvcjo6Z2V0VHJhY2tNZXRhRGF0YShBTWVkaWFGb3JtYXQgKm1ldGEsIHNpemVfdCBpbmRleCwgdWludDMyX3QgLyogZmxhZ3MgKi8pIHsKICAgICBpZiAobUluaXRDaGVjayAhPSBPSyB8fCBpbmRleCAhPSAwKSB7Ci0gICAgICAgIHJldHVybiBVTktOT1dOX0VSUk9SOworICAgICAgICByZXR1cm4gQU1FRElBX0VSUk9SX1VOS05PV047CiAgICAgfQogCi0gICAgbWV0YSA9IG1NZXRhOwotICAgIHJldHVybiBPSzsKKyAgICByZXR1cm4gQU1lZGlhRm9ybWF0X2NvcHkobWV0YSwgbU1ldGEpOwogfQogCiAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLwogCiBBTVJTb3VyY2U6OkFNUlNvdXJjZSgKLSAgICAgICAgRGF0YVNvdXJjZUJhc2UgKnNvdXJjZSwgTWV0YURhdGFCYXNlICZtZXRhLAorICAgICAgICBEYXRhU291cmNlSGVscGVyICpzb3VyY2UsIEFNZWRpYUZvcm1hdCAqbWV0YSwKICAgICAgICAgYm9vbCBpc1dpZGUsIGNvbnN0IG9mZjY0X3QgKm9mZnNldF90YWJsZSwgc2l6ZV90IG9mZnNldF90YWJsZV9sZW5ndGgpCiAgICAgOiBtRGF0YVNvdXJjZShzb3VyY2UpLAogICAgICAgbU1ldGEobWV0YSksCkBAIC0yNTAsNyArMjUwLDcgQEAKICAgICB9CiB9CiAKLXN0YXR1c190IEFNUlNvdXJjZTo6c3RhcnQoTWV0YURhdGFCYXNlICogLyogcGFyYW1zICovKSB7CittZWRpYV9zdGF0dXNfdCBBTVJTb3VyY2U6OnN0YXJ0KCkgewogICAgIENIRUNLKCFtU3RhcnRlZCk7CiAKICAgICBtT2Zmc2V0ID0gbUlzV2lkZSA/IDkgOiA2OwpAQCAtMjU5LDI1ICsyNTksMjQgQEAKICAgICBtR3JvdXAtPmFkZF9idWZmZXIoTWVkaWFCdWZmZXJCYXNlOjpDcmVhdGUoMTI4KSk7CiAgICAgbVN0YXJ0ZWQgPSB0cnVlOwogCi0gICAgcmV0dXJuIE9LOworICAgIHJldHVybiBBTUVESUFfT0s7CiB9CiAKLXN0YXR1c190IEFNUlNvdXJjZTo6c3RvcCgpIHsKK21lZGlhX3N0YXR1c190IEFNUlNvdXJjZTo6c3RvcCgpIHsKICAgICBDSEVDSyhtU3RhcnRlZCk7CiAKICAgICBkZWxldGUgbUdyb3VwOwogICAgIG1Hcm91cCA9IE5VTEw7CiAKICAgICBtU3RhcnRlZCA9IGZhbHNlOwotICAgIHJldHVybiBPSzsKKyAgICByZXR1cm4gQU1FRElBX09LOwogfQogCi1zdGF0dXNfdCBBTVJTb3VyY2U6OmdldEZvcm1hdChNZXRhRGF0YUJhc2UgJm1ldGEpIHsKLSAgICBtZXRhID0gbU1ldGE7Ci0gICAgcmV0dXJuIE9LOworbWVkaWFfc3RhdHVzX3QgQU1SU291cmNlOjpnZXRGb3JtYXQoQU1lZGlhRm9ybWF0ICptZXRhKSB7CisgICAgcmV0dXJuIEFNZWRpYUZvcm1hdF9jb3B5KG1ldGEsIG1NZXRhKTsKIH0KIAotc3RhdHVzX3QgQU1SU291cmNlOjpyZWFkKAorbWVkaWFfc3RhdHVzX3QgQU1SU291cmNlOjpyZWFkKAogICAgICAgICBNZWRpYUJ1ZmZlckJhc2UgKipvdXQsIGNvbnN0IFJlYWRPcHRpb25zICpvcHRpb25zKSB7CiAgICAgKm91dCA9IE5VTEw7CiAKQEAgLTI5Niw3ICsyOTUsNyBAQAogICAgICAgICBtT2Zmc2V0ID0gbU9mZnNldFRhYmxlW2luZGV4XSArIChtSXNXaWRlID8gOSA6IDYpOwogCiAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpPCBzZWVrRnJhbWUgLSBpbmRleCAqIDUwOyBpKyspIHsKLSAgICAgICAgICAgIHN0YXR1c190IGVycjsKKyAgICAgICAgICAgIG1lZGlhX3N0YXR1c190IGVycjsKICAgICAgICAgICAgIGlmICgoZXJyID0gZ2V0RnJhbWVTaXplQnlPZmZzZXQobURhdGFTb3VyY2UsIG1PZmZzZXQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbUlzV2lkZSwgJnNpemUpKSAhPSBPSykgewogICAgICAgICAgICAgICAgIHJldHVybiBlcnI7CkBAIC0zMDksNyArMzA4LDcgQEAKICAgICBzc2l6ZV90IG4gPSBtRGF0YVNvdXJjZS0+cmVhZEF0KG1PZmZzZXQsICZoZWFkZXIsIDEpOwogCiAgICAgaWYgKG4gPCAxKSB7Ci0gICAgICAgIHJldHVybiBFUlJPUl9FTkRfT0ZfU1RSRUFNOworICAgICAgICByZXR1cm4gQU1FRElBX0VSUk9SX0VORF9PRl9TVFJFQU07CiAgICAgfQogCiAgICAgaWYgKGhlYWRlciAmIDB4ODMpIHsKQEAgLTMxNywyMCArMzE2LDIwIEBACiAKICAgICAgICAgQUxPR0UoInBhZGRpbmcgYml0cyBtdXN0IGJlIDAsIGhlYWRlciBpcyAweCUwMngiLCBoZWFkZXIpOwogCi0gICAgICAgIHJldHVybiBFUlJPUl9NQUxGT1JNRUQ7CisgICAgICAgIHJldHVybiBBTUVESUFfRVJST1JfTUFMRk9STUVEOwogICAgIH0KIAogICAgIHVuc2lnbmVkIEZUID0gKGhlYWRlciA+PiAzKSAmIDB4MGY7CiAKICAgICBzaXplX3QgZnJhbWVTaXplID0gZ2V0RnJhbWVTaXplKG1Jc1dpZGUsIEZUKTsKICAgICBpZiAoZnJhbWVTaXplID09IDApIHsKLSAgICAgICAgcmV0dXJuIEVSUk9SX01BTEZPUk1FRDsKKyAgICAgICAgcmV0dXJuIEFNRURJQV9FUlJPUl9NQUxGT1JNRUQ7CiAgICAgfQogCiAgICAgTWVkaWFCdWZmZXJCYXNlICpidWZmZXI7CiAgICAgc3RhdHVzX3QgZXJyID0gbUdyb3VwLT5hY3F1aXJlX2J1ZmZlcigmYnVmZmVyKTsKICAgICBpZiAoZXJyICE9IE9LKSB7Ci0gICAgICAgIHJldHVybiBlcnI7CisgICAgICAgIHJldHVybiBBTUVESUFfRVJST1JfVU5LTk9XTjsKICAgICB9CiAKICAgICBuID0gbURhdGFTb3VyY2UtPnJlYWRBdChtT2Zmc2V0LCBidWZmZXItPmRhdGEoKSwgZnJhbWVTaXplKTsKQEAgLTM0MCwxMSArMzM5LDExIEBACiAgICAgICAgIGJ1ZmZlciA9IE5VTEw7CiAKICAgICAgICAgaWYgKG4gPCAwKSB7Ci0gICAgICAgICAgICByZXR1cm4gRVJST1JfSU87CisgICAgICAgICAgICByZXR1cm4gQU1FRElBX0VSUk9SX0lPOwogICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgLy8gb25seSBwYXJ0aWFsIGZyYW1lIGlzIGF2YWlsYWJsZSwgdHJlYXQgaXQgYXMgRU9TLgogICAgICAgICAgICAgbU9mZnNldCArPSBuOwotICAgICAgICAgICAgcmV0dXJuIEVSUk9SX0VORF9PRl9TVFJFQU07CisgICAgICAgICAgICByZXR1cm4gQU1FRElBX0VSUk9SX0VORF9PRl9TVFJFQU07CiAgICAgICAgIH0KICAgICB9CiAKQEAgLTM1Nyw3ICszNTYsNyBAQAogCiAgICAgKm91dCA9IGJ1ZmZlcjsKIAotICAgIHJldHVybiBPSzsKKyAgICByZXR1cm4gQU1FRElBX09LOwogfQogCiAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLwpAQCAtMzY1LDI0ICszNjQsMjcgQEAKIGV4dGVybiAiQyIgewogLy8gVGhpcyBpcyB0aGUgb25seSBzeW1ib2wgdGhhdCBuZWVkcyB0byBiZSBleHBvcnRlZAogX19hdHRyaWJ1dGVfXyAoKHZpc2liaWxpdHkgKCJkZWZhdWx0IikpKQotTWVkaWFFeHRyYWN0b3I6OkV4dHJhY3RvckRlZiBHRVRFWFRSQUNUT1JERUYoKSB7CitFeHRyYWN0b3JEZWYgR0VURVhUUkFDVE9SREVGKCkgewogICAgIHJldHVybiB7Ci0gICAgICAgIE1lZGlhRXh0cmFjdG9yOjpFWFRSQUNUT1JERUZfVkVSU0lPTiwKKyAgICAgICAgRVhUUkFDVE9SREVGX1ZFUlNJT05fQ1VSUkVOVCwKICAgICAgICAgVVVJRCgiYzg2NjM5YzktMmYzMS00MGFjLWE3MTUtZmEwMWI0NDkzYWFmIiksCiAgICAgICAgIDEsCiAgICAgICAgICJBTVIgRXh0cmFjdG9yIiwKLSAgICAgICAgW10oCi0gICAgICAgICAgICAgICAgRGF0YVNvdXJjZUJhc2UgKnNvdXJjZSwKLSAgICAgICAgICAgICAgICBmbG9hdCAqY29uZmlkZW5jZSwKLSAgICAgICAgICAgICAgICB2b2lkICoqLAotICAgICAgICAgICAgICAgIE1lZGlhRXh0cmFjdG9yOjpGcmVlTWV0YUZ1bmMgKikgLT4gTWVkaWFFeHRyYWN0b3I6OkNyZWF0b3JGdW5jIHsKLSAgICAgICAgICAgIGlmIChTbmlmZkFNUihzb3VyY2UsIG51bGxwdHIsIGNvbmZpZGVuY2UpKSB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIFtdKAotICAgICAgICAgICAgICAgICAgICAgICAgRGF0YVNvdXJjZUJhc2UgKnNvdXJjZSwKLSAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKikgLT4gTWVkaWFFeHRyYWN0b3IqIHsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBBTVJFeHRyYWN0b3Ioc291cmNlKTt9OworICAgICAgICB7CisgICAgICAgICAgIC52MiA9IFtdKAorICAgICAgICAgICAgICAgICAgICBDRGF0YVNvdXJjZSAqc291cmNlLAorICAgICAgICAgICAgICAgICAgICBmbG9hdCAqY29uZmlkZW5jZSwKKyAgICAgICAgICAgICAgICAgICAgdm9pZCAqKiwKKyAgICAgICAgICAgICAgICAgICAgRnJlZU1ldGFGdW5jICopIC0+IENyZWF0b3JGdW5jVjIgeworICAgICAgICAgICAgICAgIERhdGFTb3VyY2VIZWxwZXIgaGVscGVyKHNvdXJjZSk7CisgICAgICAgICAgICAgICAgaWYgKFNuaWZmQU1SKCZoZWxwZXIsIG51bGxwdHIsIGNvbmZpZGVuY2UpKSB7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBbXSgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBDRGF0YVNvdXJjZSAqc291cmNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKikgLT4gQ01lZGlhRXh0cmFjdG9yVjIqIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB3cmFwVjIobmV3IEFNUkV4dHJhY3RvcihuZXcgRGF0YVNvdXJjZUhlbHBlcihzb3VyY2UpKSk7fTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICByZXR1cm4gTlVMTDsKICAgICAgICAgfQogICAgIH07CiB9CmRpZmYgLS1naXQgYS9tZWRpYS9leHRyYWN0b3JzL2Ftci9BTVJFeHRyYWN0b3IuaCBiL21lZGlhL2V4dHJhY3RvcnMvYW1yL0FNUkV4dHJhY3Rvci5oCmluZGV4IGM5MGIzMjUuLjQ0YjJjYmQgMTAwNjQ0Ci0tLSBhL21lZGlhL2V4dHJhY3RvcnMvYW1yL0FNUkV4dHJhY3Rvci5oCisrKyBiL21lZGlhL2V4dHJhY3RvcnMvYW1yL0FNUkV4dHJhY3Rvci5oCkBAIC0xOSw4ICsxOSw5IEBACiAjZGVmaW5lIEFNUl9FWFRSQUNUT1JfSF8KIAogI2luY2x1ZGUgPHV0aWxzL0Vycm9ycy5oPgotI2luY2x1ZGUgPG1lZGlhL01lZGlhRXh0cmFjdG9yLmg+Ci0jaW5jbHVkZSA8bWVkaWEvc3RhZ2VmcmlnaHQvTWV0YURhdGFCYXNlLmg+CisjaW5jbHVkZSA8bWVkaWEvTWVkaWFFeHRyYWN0b3JQbHVnaW5BcGkuaD4KKyNpbmNsdWRlIDxtZWRpYS9NZWRpYUV4dHJhY3RvclBsdWdpbkhlbHBlci5oPgorI2luY2x1ZGUgPG1lZGlhL05ka01lZGlhRm9ybWF0Lmg+CiAKIG5hbWVzcGFjZSBhbmRyb2lkIHsKIApAQCAtMjgsMjMgKzI5LDIzIEBACiBjbGFzcyBTdHJpbmc4OwogI2RlZmluZSBPRkZTRVRfVEFCTEVfTEVOICAgIDMwMAogCi1jbGFzcyBBTVJFeHRyYWN0b3IgOiBwdWJsaWMgTWVkaWFFeHRyYWN0b3IgeworY2xhc3MgQU1SRXh0cmFjdG9yIDogcHVibGljIE1lZGlhRXh0cmFjdG9yUGx1Z2luSGVscGVyVjIgewogcHVibGljOgotICAgIGV4cGxpY2l0IEFNUkV4dHJhY3RvcihEYXRhU291cmNlQmFzZSAqc291cmNlKTsKKyAgICBleHBsaWNpdCBBTVJFeHRyYWN0b3IoRGF0YVNvdXJjZUhlbHBlciAqc291cmNlKTsKIAogICAgIHZpcnR1YWwgc2l6ZV90IGNvdW50VHJhY2tzKCk7Ci0gICAgdmlydHVhbCBNZWRpYVRyYWNrICpnZXRUcmFjayhzaXplX3QgaW5kZXgpOwotICAgIHZpcnR1YWwgc3RhdHVzX3QgZ2V0VHJhY2tNZXRhRGF0YShNZXRhRGF0YUJhc2UmIG1ldGEsIHNpemVfdCBpbmRleCwgdWludDMyX3QgZmxhZ3MpOworICAgIHZpcnR1YWwgTWVkaWFUcmFja0hlbHBlclYyICpnZXRUcmFjayhzaXplX3QgaW5kZXgpOworICAgIHZpcnR1YWwgbWVkaWFfc3RhdHVzX3QgZ2V0VHJhY2tNZXRhRGF0YShBTWVkaWFGb3JtYXQgKm1ldGEsIHNpemVfdCBpbmRleCwgdWludDMyX3QgZmxhZ3MpOwogCi0gICAgdmlydHVhbCBzdGF0dXNfdCBnZXRNZXRhRGF0YShNZXRhRGF0YUJhc2UmIG1ldGEpOworICAgIHZpcnR1YWwgbWVkaWFfc3RhdHVzX3QgZ2V0TWV0YURhdGEoQU1lZGlhRm9ybWF0ICptZXRhKTsKICAgICB2aXJ0dWFsIGNvbnN0IGNoYXIgKiBuYW1lKCkgeyByZXR1cm4gIkFNUkV4dHJhY3RvciI7IH0KIAogcHJvdGVjdGVkOgogICAgIHZpcnR1YWwgfkFNUkV4dHJhY3RvcigpOwogCiBwcml2YXRlOgotICAgIERhdGFTb3VyY2VCYXNlICptRGF0YVNvdXJjZTsKLSAgICBNZXRhRGF0YUJhc2UgbU1ldGE7CisgICAgRGF0YVNvdXJjZUhlbHBlciAqbURhdGFTb3VyY2U7CisgICAgQU1lZGlhRm9ybWF0ICptTWV0YTsKICAgICBzdGF0dXNfdCBtSW5pdENoZWNrOwogICAgIGJvb2wgbUlzV2lkZTsKIApkaWZmIC0tZ2l0IGEvbWVkaWEvZXh0cmFjdG9ycy9hbXIvQW5kcm9pZC5icCBiL21lZGlhL2V4dHJhY3RvcnMvYW1yL0FuZHJvaWQuYnAKaW5kZXggZDk2MmI5My4uODNlYTRjNyAxMDA2NDQKLS0tIGEvbWVkaWEvZXh0cmFjdG9ycy9hbXIvQW5kcm9pZC5icAorKysgYi9tZWRpYS9leHRyYWN0b3JzL2Ftci9BbmRyb2lkLmJwCkBAIC05LDYgKzksNyBAQAogICAgIHNoYXJlZF9saWJzOiBbCiAgICAgICAgICJsaWJsb2ciLAogICAgICAgICAibGlibWVkaWFleHRyYWN0b3IiLAorICAgICAgICAibGlibWVkaWFuZGsiLAogICAgIF0sCiAKICAgICBzdGF0aWNfbGliczogWwpkaWZmIC0tZ2l0IGEvbWVkaWEvZXh0cmFjdG9ycy9mbGFjL0FuZHJvaWQuYnAgYi9tZWRpYS9leHRyYWN0b3JzL2ZsYWMvQW5kcm9pZC5icAppbmRleCA2MjgyNzkzLi40ZDBhNGNjIDEwMDY0NAotLS0gYS9tZWRpYS9leHRyYWN0b3JzL2ZsYWMvQW5kcm9pZC5icAorKysgYi9tZWRpYS9leHRyYWN0b3JzL2ZsYWMvQW5kcm9pZC5icApAQCAtOCwxMyArOCwxOCBAQAogICAgIF0sCiAKICAgICBzaGFyZWRfbGliczogWworICAgICAgICAibGliYmluZGVyX25kayIsCiAgICAgICAgICJsaWJsb2ciLAogICAgICAgICAibGlibWVkaWFleHRyYWN0b3IiLAorICAgICAgICAibGlibWVkaWFuZGsiLAogICAgIF0sCiAKICAgICBzdGF0aWNfbGliczogWworICAgICAgICAibGliYXVkaW91dGlscyIsCiAgICAgICAgICJsaWJGTEFDIiwKICAgICAgICAgImxpYnN0YWdlZnJpZ2h0X2ZvdW5kYXRpb24iLAorICAgICAgICAibGlic3RhZ2VmcmlnaHRfbWV0YWRhdGF1dGlscyIsCisgICAgICAgICJsaWJ1dGlscyIsCiAgICAgXSwKIAogICAgIG5hbWU6ICJsaWJmbGFjZXh0cmFjdG9yIiwKZGlmZiAtLWdpdCBhL21lZGlhL2V4dHJhY3RvcnMvZmxhYy9GTEFDRXh0cmFjdG9yLmNwcCBiL21lZGlhL2V4dHJhY3RvcnMvZmxhYy9GTEFDRXh0cmFjdG9yLmNwcAppbmRleCBjY2Y4MGQwLi5kNTRhYWVmIDEwMDY0NAotLS0gYS9tZWRpYS9leHRyYWN0b3JzL2ZsYWMvRkxBQ0V4dHJhY3Rvci5jcHAKKysrIGIvbWVkaWEvZXh0cmFjdG9ycy9mbGFjL0ZMQUNFeHRyYWN0b3IuY3BwCkBAIC0yNCw0MSArMjQsNTcgQEAKIC8vIGxpYkZMQUMgcGFyc2VyCiAjaW5jbHVkZSAiRkxBQy9zdHJlYW1fZGVjb2Rlci5oIgogCi0jaW5jbHVkZSA8bWVkaWEvRGF0YVNvdXJjZUJhc2UuaD4KLSNpbmNsdWRlIDxtZWRpYS9NZWRpYVRyYWNrLmg+Ci0jaW5jbHVkZSA8bWVkaWEvVm9yYmlzQ29tbWVudC5oPgorI2luY2x1ZGUgPGFuZHJvaWQvYmluZGVyX2liaW5kZXIuaD4gLy8gZm9yIEFJQmluZGVyX2dldENhbGxpbmdVaWQKKyNpbmNsdWRlIDxhdWRpb191dGlscy9wcmltaXRpdmVzLmg+CisjaW5jbHVkZSA8bWVkaWEvTWVkaWFFeHRyYWN0b3JQbHVnaW5BcGkuaD4KKyNpbmNsdWRlIDxtZWRpYS9OZGtNZWRpYUZvcm1hdC5oPgogI2luY2x1ZGUgPG1lZGlhL3N0YWdlZnJpZ2h0L2ZvdW5kYXRpb24vQUJ1ZmZlci5oPgogI2luY2x1ZGUgPG1lZGlhL3N0YWdlZnJpZ2h0L2ZvdW5kYXRpb24vQURlYnVnLmg+CiAjaW5jbHVkZSA8bWVkaWEvc3RhZ2VmcmlnaHQvZm91bmRhdGlvbi9iYXNlNjQuaD4KICNpbmNsdWRlIDxtZWRpYS9zdGFnZWZyaWdodC9NZWRpYUJ1ZmZlckdyb3VwLmg+CiAjaW5jbHVkZSA8bWVkaWEvc3RhZ2VmcmlnaHQvTWVkaWFEZWZzLmg+CisjaW5jbHVkZSA8bWVkaWEvc3RhZ2VmcmlnaHQvTWVkaWFFcnJvcnMuaD4KICNpbmNsdWRlIDxtZWRpYS9zdGFnZWZyaWdodC9NZXRhRGF0YS5oPgorI2luY2x1ZGUgPG1lZGlhL3N0YWdlZnJpZ2h0L01ldGFEYXRhVXRpbHMuaD4KICNpbmNsdWRlIDxtZWRpYS9zdGFnZWZyaWdodC9NZWRpYUJ1ZmZlckJhc2UuaD4KKyNpbmNsdWRlIDxwcml2YXRlL2FuZHJvaWRfZmlsZXN5c3RlbV9jb25maWcuaD4gLy8gZm9yIEFJRF9NRURJQQorI2luY2x1ZGUgPHN5c3RlbS9hdWRpby5oPgogCiBuYW1lc3BhY2UgYW5kcm9pZCB7CiAKKy8vIE1lZGlhU2VydmVyIGlzIGNhcGFibGUgb2YgaGFuZGxpbmcgZmxvYXQgZXh0cmFjdG9yIG91dHB1dCwgYnV0IGdlbmVyYWwgcHJvY2Vzc2VzCisvLyBtYXkgbm90IGJlIGFibGUgdG8gZG8gc28uCisvLyBUT0RPOiBJbXByb3ZlIEFQSSB0byBzZXQgZXh0cmFjdG9yIGZsb2F0IG91dHB1dC4KKy8vIChOb3RlOiBkdXBsaWNhdGVkIHdpdGggV0FWRXh0cmFjdG9yLmNwcCkKK3N0YXRpYyBpbmxpbmUgYm9vbCBzaG91bGRFeHRyYWN0b3JPdXRwdXRGbG9hdChpbnQgYml0c1BlclNhbXBsZSkKK3sKKyAgICByZXR1cm4gYml0c1BlclNhbXBsZSA+IDE2ICYmIEFJQmluZGVyX2dldENhbGxpbmdVaWQoKSA9PSBBSURfTUVESUE7Cit9CisKIGNsYXNzIEZMQUNQYXJzZXI7CiAKLWNsYXNzIEZMQUNTb3VyY2UgOiBwdWJsaWMgTWVkaWFUcmFjayB7CitjbGFzcyBGTEFDU291cmNlIDogcHVibGljIE1lZGlhVHJhY2tIZWxwZXJWMiB7CiAKIHB1YmxpYzoKICAgICBGTEFDU291cmNlKAotICAgICAgICAgICAgRGF0YVNvdXJjZUJhc2UgKmRhdGFTb3VyY2UsCi0gICAgICAgICAgICBNZXRhRGF0YUJhc2UgJm1ldGEpOworICAgICAgICAgICAgRGF0YVNvdXJjZUhlbHBlciAqZGF0YVNvdXJjZSwKKyAgICAgICAgICAgIEFNZWRpYUZvcm1hdCAqbWV0YSwKKyAgICAgICAgICAgIGJvb2wgb3V0cHV0RmxvYXQpOwogCi0gICAgdmlydHVhbCBzdGF0dXNfdCBzdGFydChNZXRhRGF0YUJhc2UgKnBhcmFtcyk7Ci0gICAgdmlydHVhbCBzdGF0dXNfdCBzdG9wKCk7Ci0gICAgdmlydHVhbCBzdGF0dXNfdCBnZXRGb3JtYXQoTWV0YURhdGFCYXNlICZtZXRhKTsKKyAgICB2aXJ0dWFsIG1lZGlhX3N0YXR1c190IHN0YXJ0KCk7CisgICAgdmlydHVhbCBtZWRpYV9zdGF0dXNfdCBzdG9wKCk7CisgICAgdmlydHVhbCBtZWRpYV9zdGF0dXNfdCBnZXRGb3JtYXQoQU1lZGlhRm9ybWF0ICptZXRhKTsKIAotICAgIHZpcnR1YWwgc3RhdHVzX3QgcmVhZCgKKyAgICB2aXJ0dWFsIG1lZGlhX3N0YXR1c190IHJlYWQoCiAgICAgICAgICAgICBNZWRpYUJ1ZmZlckJhc2UgKipidWZmZXIsIGNvbnN0IFJlYWRPcHRpb25zICpvcHRpb25zID0gTlVMTCk7CiAKIHByb3RlY3RlZDoKICAgICB2aXJ0dWFsIH5GTEFDU291cmNlKCk7CiAKIHByaXZhdGU6Ci0gICAgRGF0YVNvdXJjZUJhc2UgKm1EYXRhU291cmNlOwotICAgIE1ldGFEYXRhQmFzZSBtVHJhY2tNZXRhZGF0YTsKKyAgICBEYXRhU291cmNlSGVscGVyICptRGF0YVNvdXJjZTsKKyAgICBBTWVkaWFGb3JtYXQgKm1UcmFja01ldGFkYXRhOworICAgIGNvbnN0IGJvb2wgbU91dHB1dEZsb2F0OwogICAgIEZMQUNQYXJzZXIgKm1QYXJzZXI7CiAgICAgYm9vbCBtSW5pdENoZWNrOwogICAgIGJvb2wgbVN0YXJ0ZWQ7CkBAIC03NSwxNCArOTEsMTUgQEAKIAogcHVibGljOgogICAgIGVudW0gewotICAgICAgICBrTWF4Q2hhbm5lbHMgPSA4LAorICAgICAgICBrTWF4Q2hhbm5lbHMgPSBGQ0NfOCwKICAgICB9OwogCiAgICAgZXhwbGljaXQgRkxBQ1BhcnNlcigKLSAgICAgICAgRGF0YVNvdXJjZUJhc2UgKmRhdGFTb3VyY2UsCisgICAgICAgIERhdGFTb3VyY2VIZWxwZXIgKmRhdGFTb3VyY2UsCisgICAgICAgIGJvb2wgb3V0cHV0RmxvYXQsCiAgICAgICAgIC8vIElmIG1ldGFkYXRhIHBvaW50ZXJzIGFyZW4ndCBwcm92aWRlZCwgd2UgZG9uJ3QgZmlsbCB0aGVtCi0gICAgICAgIE1ldGFEYXRhQmFzZSAqZmlsZU1ldGFkYXRhID0gMCwKLSAgICAgICAgTWV0YURhdGFCYXNlICp0cmFja01ldGFkYXRhID0gMCk7CisgICAgICAgIEFNZWRpYUZvcm1hdCAqZmlsZU1ldGFkYXRhID0gMCwKKyAgICAgICAgQU1lZGlhRm9ybWF0ICp0cmFja01ldGFkYXRhID0gMCk7CiAKICAgICB2aXJ0dWFsIH5GTEFDUGFyc2VyKCk7CiAKQEAgLTExOCw5ICsxMzUsMTAgQEAKICAgICB9CiAKIHByaXZhdGU6Ci0gICAgRGF0YVNvdXJjZUJhc2UgKm1EYXRhU291cmNlOwotICAgIE1ldGFEYXRhQmFzZSAqbUZpbGVNZXRhZGF0YTsKLSAgICBNZXRhRGF0YUJhc2UgKm1UcmFja01ldGFkYXRhOworICAgIERhdGFTb3VyY2VIZWxwZXIgKm1EYXRhU291cmNlOworICAgIGNvbnN0IGJvb2wgbU91dHB1dEZsb2F0OworICAgIEFNZWRpYUZvcm1hdCAqbUZpbGVNZXRhZGF0YTsKKyAgICBBTWVkaWFGb3JtYXQgKm1UcmFja01ldGFkYXRhOwogICAgIGJvb2wgbUluaXRDaGVjazsKIAogICAgIC8vIG1lZGlhIGJ1ZmZlcnMKQEAgLTE2OSw2ICsxODcsNyBAQAogICAgICAgICAgICAgY29uc3QgRkxBQ19fRnJhbWUgKmZyYW1lLCBjb25zdCBGTEFDX19pbnQzMiAqIGNvbnN0IGJ1ZmZlcltdKTsKICAgICB2b2lkIG1ldGFkYXRhQ2FsbGJhY2soY29uc3QgRkxBQ19fU3RyZWFtTWV0YWRhdGEgKm1ldGFkYXRhKTsKICAgICB2b2lkIGVycm9yQ2FsbGJhY2soRkxBQ19fU3RyZWFtRGVjb2RlckVycm9yU3RhdHVzIHN0YXR1cyk7CisgICAgc2l6ZV90IGdldE91dHB1dFNhbXBsZVNpemUoKSBjb25zdCB7IHJldHVybiBtT3V0cHV0RmxvYXQgPyBzaXplb2YoZmxvYXQpIDogc2l6ZW9mKGludDE2X3QpOyB9CiAKICAgICAvLyBGTEFDIHBhcnNlciBjYWxsYmFja3MgYXMgQy1jYWxsYWJsZSBmdW5jdGlvbnMKICAgICBzdGF0aWMgRkxBQ19fU3RyZWFtRGVjb2RlclJlYWRTdGF0dXMgcmVhZF9jYWxsYmFjaygKQEAgLTM2NCw5ICszODMsOCBAQAogICAgIGNhc2UgRkxBQ19fTUVUQURBVEFfVFlQRV9QSUNUVVJFOgogICAgICAgICBpZiAobUZpbGVNZXRhZGF0YSAhPSAwKSB7CiAgICAgICAgICAgICBjb25zdCBGTEFDX19TdHJlYW1NZXRhZGF0YV9QaWN0dXJlICpwID0gJm1ldGFkYXRhLT5kYXRhLnBpY3R1cmU7Ci0gICAgICAgICAgICBtRmlsZU1ldGFkYXRhLT5zZXREYXRhKGtLZXlBbGJ1bUFydCwKLSAgICAgICAgICAgICAgICAgICAgTWV0YURhdGE6OlRZUEVfTk9ORSwgcC0+ZGF0YSwgcC0+ZGF0YV9sZW5ndGgpOwotICAgICAgICAgICAgbUZpbGVNZXRhZGF0YS0+c2V0Q1N0cmluZyhrS2V5QWxidW1BcnRNSU1FLCBwLT5taW1lX3R5cGUpOworICAgICAgICAgICAgQU1lZGlhRm9ybWF0X3NldEJ1ZmZlcihtRmlsZU1ldGFkYXRhLCBBTUVESUFGT1JNQVRfS0VZX0FMQlVNQVJULAorICAgICAgICAgICAgICAgICAgIHAtPmRhdGEsIHAtPmRhdGFfbGVuZ3RoKTsKICAgICAgICAgfQogICAgICAgICBicmVhazsKICAgICBkZWZhdWx0OgpAQCAtMzgxLDEyMiArMzk5LDUxIEBACiAgICAgbUVycm9yU3RhdHVzID0gc3RhdHVzOwogfQogCi0vLyBDb3B5IHNhbXBsZXMgZnJvbSBGTEFDIG5hdGl2ZSAzMi1iaXQgbm9uLWludGVybGVhdmVkIHRvIDE2LWJpdCBpbnRlcmxlYXZlZC4KKy8vIENvcHkgc2FtcGxlcyBmcm9tIEZMQUMgbmF0aXZlIDMyLWJpdCBub24taW50ZXJsZWF2ZWQgdG8gMTYtYml0IHNpZ25lZAorLy8gb3IgMzItYml0IGZsb2F0IGludGVybGVhdmVkLgogLy8gVGhlc2UgYXJlIGNhbmRpZGF0ZXMgZm9yIG9wdGltaXphdGlvbiBpZiBuZWVkZWQuCi0KLXN0YXRpYyB2b2lkIGNvcHlNb25vOCgKLSAgICAgICAgaW50MTZfdCAqZHN0LAotICAgICAgICBjb25zdCBpbnQgKiBzcmNbRkxBQ1BhcnNlcjo6a01heENoYW5uZWxzXSwKK3N0YXRpYyB2b2lkIGNvcHlUbzE2U2lnbmVkKAorICAgICAgICBzaG9ydCAqZHN0LAorICAgICAgICBjb25zdCBpbnQgKmNvbnN0ICpzcmMsCiAgICAgICAgIHVuc2lnbmVkIG5TYW1wbGVzLAotICAgICAgICB1bnNpZ25lZCAvKiBuQ2hhbm5lbHMgKi8pIHsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgblNhbXBsZXM7ICsraSkgewotICAgICAgICAqZHN0KysgPSBzcmNbMF1baV0gPDwgODsKLSAgICB9Ci19Ci0KLXN0YXRpYyB2b2lkIGNvcHlTdGVyZW84KAotICAgICAgICBpbnQxNl90ICpkc3QsCi0gICAgICAgIGNvbnN0IGludCAqIHNyY1tGTEFDUGFyc2VyOjprTWF4Q2hhbm5lbHNdLAotICAgICAgICB1bnNpZ25lZCBuU2FtcGxlcywKLSAgICAgICAgdW5zaWduZWQgLyogbkNoYW5uZWxzICovKSB7Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG5TYW1wbGVzOyArK2kpIHsKLSAgICAgICAgKmRzdCsrID0gc3JjWzBdW2ldIDw8IDg7Ci0gICAgICAgICpkc3QrKyA9IHNyY1sxXVtpXSA8PCA4OwotICAgIH0KLX0KLQotc3RhdGljIHZvaWQgY29weU11bHRpQ2g4KGludDE2X3QgKmRzdCwgY29uc3QgaW50ICogc3JjW0ZMQUNQYXJzZXI6OmtNYXhDaGFubmVsc10sIHVuc2lnbmVkIG5TYW1wbGVzLCB1bnNpZ25lZCBuQ2hhbm5lbHMpCi17CisgICAgICAgIHVuc2lnbmVkIG5DaGFubmVscywKKyAgICAgICAgdW5zaWduZWQgYml0c1BlclNhbXBsZSkgeworICAgIGNvbnN0IHVuc2lnbmVkIGxlZnRTaGlmdCA9IDE2IC0gYml0c1BlclNhbXBsZTsKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgblNhbXBsZXM7ICsraSkgewogICAgICAgICBmb3IgKHVuc2lnbmVkIGMgPSAwOyBjIDwgbkNoYW5uZWxzOyArK2MpIHsKLSAgICAgICAgICAgICpkc3QrKyA9IHNyY1tjXVtpXSA8PCA4OworICAgICAgICAgICAgKmRzdCsrID0gc3JjW2NdW2ldIDw8IGxlZnRTaGlmdDsKICAgICAgICAgfQogICAgIH0KIH0KIAotc3RhdGljIHZvaWQgY29weU1vbm8xNigKLSAgICAgICAgaW50MTZfdCAqZHN0LAotICAgICAgICBjb25zdCBpbnQgKiBzcmNbRkxBQ1BhcnNlcjo6a01heENoYW5uZWxzXSwKK3N0YXRpYyB2b2lkIGNvcHlUb0Zsb2F0KAorICAgICAgICBmbG9hdCAqZHN0LAorICAgICAgICBjb25zdCBpbnQgKmNvbnN0ICpzcmMsCiAgICAgICAgIHVuc2lnbmVkIG5TYW1wbGVzLAotICAgICAgICB1bnNpZ25lZCAvKiBuQ2hhbm5lbHMgKi8pIHsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgblNhbXBsZXM7ICsraSkgewotICAgICAgICAqZHN0KysgPSBzcmNbMF1baV07Ci0gICAgfQotfQotCi1zdGF0aWMgdm9pZCBjb3B5U3RlcmVvMTYoCi0gICAgICAgIGludDE2X3QgKmRzdCwKLSAgICAgICAgY29uc3QgaW50ICogc3JjW0ZMQUNQYXJzZXI6OmtNYXhDaGFubmVsc10sCi0gICAgICAgIHVuc2lnbmVkIG5TYW1wbGVzLAotICAgICAgICB1bnNpZ25lZCAvKiBuQ2hhbm5lbHMgKi8pIHsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgblNhbXBsZXM7ICsraSkgewotICAgICAgICAqZHN0KysgPSBzcmNbMF1baV07Ci0gICAgICAgICpkc3QrKyA9IHNyY1sxXVtpXTsKLSAgICB9Ci19Ci0KLXN0YXRpYyB2b2lkIGNvcHlNdWx0aUNoMTYoaW50MTZfdCAqZHN0LCBjb25zdCBpbnQgKiBzcmNbRkxBQ1BhcnNlcjo6a01heENoYW5uZWxzXSwgdW5zaWduZWQgblNhbXBsZXMsIHVuc2lnbmVkIG5DaGFubmVscykKLXsKKyAgICAgICAgdW5zaWduZWQgbkNoYW5uZWxzLAorICAgICAgICB1bnNpZ25lZCBiaXRzUGVyU2FtcGxlKSB7CisgICAgY29uc3QgdW5zaWduZWQgbGVmdFNoaWZ0ID0gMzIgLSBiaXRzUGVyU2FtcGxlOwogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBuU2FtcGxlczsgKytpKSB7CiAgICAgICAgIGZvciAodW5zaWduZWQgYyA9IDA7IGMgPCBuQ2hhbm5lbHM7ICsrYykgewotICAgICAgICAgICAgKmRzdCsrID0gc3JjW2NdW2ldOworICAgICAgICAgICAgKmRzdCsrID0gZmxvYXRfZnJvbV9pMzIoc3JjW2NdW2ldIDw8IGxlZnRTaGlmdCk7CiAgICAgICAgIH0KICAgICB9CiB9CiAKLS8vIDI0LWJpdCB2ZXJzaW9ucyBzaG91bGQgZG8gZGl0aGVyaW5nIG9yIG5vaXNlLXNoYXBpbmcsIGhlcmUgb3IgaW4gQXVkaW9GbGluZ2VyCi0KLXN0YXRpYyB2b2lkIGNvcHlNb25vMjQoCi0gICAgICAgIGludDE2X3QgKmRzdCwKLSAgICAgICAgY29uc3QgaW50ICogc3JjW0ZMQUNQYXJzZXI6OmtNYXhDaGFubmVsc10sCi0gICAgICAgIHVuc2lnbmVkIG5TYW1wbGVzLAotICAgICAgICB1bnNpZ25lZCAvKiBuQ2hhbm5lbHMgKi8pIHsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgblNhbXBsZXM7ICsraSkgewotICAgICAgICAqZHN0KysgPSBzcmNbMF1baV0gPj4gODsKLSAgICB9Ci19Ci0KLXN0YXRpYyB2b2lkIGNvcHlTdGVyZW8yNCgKLSAgICAgICAgaW50MTZfdCAqZHN0LAotICAgICAgICBjb25zdCBpbnQgKiBzcmNbRkxBQ1BhcnNlcjo6a01heENoYW5uZWxzXSwKLSAgICAgICAgdW5zaWduZWQgblNhbXBsZXMsCi0gICAgICAgIHVuc2lnbmVkIC8qIG5DaGFubmVscyAqLykgewotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBuU2FtcGxlczsgKytpKSB7Ci0gICAgICAgICpkc3QrKyA9IHNyY1swXVtpXSA+PiA4OwotICAgICAgICAqZHN0KysgPSBzcmNbMV1baV0gPj4gODsKLSAgICB9Ci19Ci0KLXN0YXRpYyB2b2lkIGNvcHlNdWx0aUNoMjQoaW50MTZfdCAqZHN0LCBjb25zdCBpbnQgKiBzcmNbRkxBQ1BhcnNlcjo6a01heENoYW5uZWxzXSwgdW5zaWduZWQgblNhbXBsZXMsIHVuc2lnbmVkIG5DaGFubmVscykKLXsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgblNhbXBsZXM7ICsraSkgewotICAgICAgICBmb3IgKHVuc2lnbmVkIGMgPSAwOyBjIDwgbkNoYW5uZWxzOyArK2MpIHsKLSAgICAgICAgICAgICpkc3QrKyA9IHNyY1tjXVtpXSA+PiA4OwotICAgICAgICB9Ci0gICAgfQotfQotCi1zdGF0aWMgdm9pZCBjb3B5VHJlc3Bhc3MoCi0gICAgICAgIGludDE2X3QgKiAvKiBkc3QgKi8sCi0gICAgICAgIGNvbnN0IGludCAqW0ZMQUNQYXJzZXI6OmtNYXhDaGFubmVsc10gLyogc3JjICovLAotICAgICAgICB1bnNpZ25lZCAvKiBuU2FtcGxlcyAqLywKLSAgICAgICAgdW5zaWduZWQgLyogbkNoYW5uZWxzICovKSB7Ci0gICAgVFJFU1BBU1MoKTsKLX0KLQogLy8gRkxBQ1BhcnNlcgogCiBGTEFDUGFyc2VyOjpGTEFDUGFyc2VyKAotICAgICAgICBEYXRhU291cmNlQmFzZSAqZGF0YVNvdXJjZSwKLSAgICAgICAgTWV0YURhdGFCYXNlICpmaWxlTWV0YWRhdGEsCi0gICAgICAgIE1ldGFEYXRhQmFzZSAqdHJhY2tNZXRhZGF0YSkKKyAgICAgICAgRGF0YVNvdXJjZUhlbHBlciAqZGF0YVNvdXJjZSwKKyAgICAgICAgYm9vbCBvdXRwdXRGbG9hdCwKKyAgICAgICAgQU1lZGlhRm9ybWF0ICpmaWxlTWV0YWRhdGEsCisgICAgICAgIEFNZWRpYUZvcm1hdCAqdHJhY2tNZXRhZGF0YSkKICAgICA6IG1EYXRhU291cmNlKGRhdGFTb3VyY2UpLAorICAgICAgbU91dHB1dEZsb2F0KG91dHB1dEZsb2F0KSwKICAgICAgIG1GaWxlTWV0YWRhdGEoZmlsZU1ldGFkYXRhKSwKICAgICAgIG1UcmFja01ldGFkYXRhKHRyYWNrTWV0YWRhdGEpLAogICAgICAgbUluaXRDaGVjayhmYWxzZSksCiAgICAgICBtTWF4QnVmZmVyU2l6ZSgwKSwKICAgICAgIG1Hcm91cChOVUxMKSwKLSAgICAgIG1Db3B5KGNvcHlUcmVzcGFzcyksCiAgICAgICBtRGVjb2RlcihOVUxMKSwKICAgICAgIG1DdXJyZW50UG9zKDBMTCksCiAgICAgICBtRU9GKGZhbHNlKSwKQEAgLTU5MCw0NiArNTM3LDI3IEBACiAgICAgICAgICAgICBBTE9HRSgidW5zdXBwb3J0ZWQgc2FtcGxlIHJhdGUgJXUiLCBnZXRTYW1wbGVSYXRlKCkpOwogICAgICAgICAgICAgcmV0dXJuIE5PX0lOSVQ7CiAgICAgICAgIH0KLSAgICAgICAgLy8gY29uZmlndXJlIHRoZSBhcHByb3ByaWF0ZSBjb3B5IGZ1bmN0aW9uLCBkZWZhdWx0aW5nIHRvIHRyZXNwYXNzCi0gICAgICAgIHN0YXRpYyBjb25zdCBzdHJ1Y3QgewotICAgICAgICAgICAgdW5zaWduZWQgbUNoYW5uZWxzOwotICAgICAgICAgICAgdW5zaWduZWQgbUJpdHNQZXJTYW1wbGU7Ci0gICAgICAgICAgICB2b2lkICgqbUNvcHkpKGludDE2X3QgKmRzdCwgY29uc3QgaW50ICogc3JjW2tNYXhDaGFubmVsc10sIHVuc2lnbmVkIG5TYW1wbGVzLCB1bnNpZ25lZCBuQ2hhbm5lbHMpOwotICAgICAgICB9IHRhYmxlW10gPSB7Ci0gICAgICAgICAgICB7IDEsICA4LCBjb3B5TW9ubzggICAgfSwKLSAgICAgICAgICAgIHsgMiwgIDgsIGNvcHlTdGVyZW84ICB9LAotICAgICAgICAgICAgeyA4LCAgOCwgY29weU11bHRpQ2g4ICB9LAotICAgICAgICAgICAgeyAxLCAxNiwgY29weU1vbm8xNiAgIH0sCi0gICAgICAgICAgICB7IDIsIDE2LCBjb3B5U3RlcmVvMTYgfSwKLSAgICAgICAgICAgIHsgOCwgMTYsIGNvcHlNdWx0aUNoMTYgfSwKLSAgICAgICAgICAgIHsgMSwgMjQsIGNvcHlNb25vMjQgICB9LAotICAgICAgICAgICAgeyAyLCAyNCwgY29weVN0ZXJlbzI0IH0sCi0gICAgICAgICAgICB7IDgsIDI0LCBjb3B5TXVsdGlDaDI0IH0sCi0gICAgICAgIH07Ci0gICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBzaXplb2YodGFibGUpL3NpemVvZih0YWJsZVswXSk7ICsraSkgewotICAgICAgICAgICAgaWYgKHRhYmxlW2ldLm1DaGFubmVscyA+PSBnZXRDaGFubmVscygpICYmCi0gICAgICAgICAgICAgICAgICAgIHRhYmxlW2ldLm1CaXRzUGVyU2FtcGxlID09IGdldEJpdHNQZXJTYW1wbGUoKSkgewotICAgICAgICAgICAgICAgIG1Db3B5ID0gdGFibGVbaV0ubUNvcHk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KICAgICAgICAgLy8gcG9wdWxhdGUgdHJhY2sgbWV0YWRhdGEKICAgICAgICAgaWYgKG1UcmFja01ldGFkYXRhICE9IDApIHsKLSAgICAgICAgICAgIG1UcmFja01ldGFkYXRhLT5zZXRDU3RyaW5nKGtLZXlNSU1FVHlwZSwgTUVESUFfTUlNRVRZUEVfQVVESU9fUkFXKTsKLSAgICAgICAgICAgIG1UcmFja01ldGFkYXRhLT5zZXRJbnQzMihrS2V5Q2hhbm5lbENvdW50LCBnZXRDaGFubmVscygpKTsKLSAgICAgICAgICAgIG1UcmFja01ldGFkYXRhLT5zZXRJbnQzMihrS2V5U2FtcGxlUmF0ZSwgZ2V0U2FtcGxlUmF0ZSgpKTsKLSAgICAgICAgICAgIG1UcmFja01ldGFkYXRhLT5zZXRJbnQzMihrS2V5Qml0c1BlclNhbXBsZSwgZ2V0Qml0c1BlclNhbXBsZSgpKTsKLSAgICAgICAgICAgIG1UcmFja01ldGFkYXRhLT5zZXRJbnQzMihrS2V5UGNtRW5jb2RpbmcsIGtBdWRpb0VuY29kaW5nUGNtMTZiaXQpOworICAgICAgICAgICAgQU1lZGlhRm9ybWF0X3NldFN0cmluZyhtVHJhY2tNZXRhZGF0YSwKKyAgICAgICAgICAgICAgICAgICAgQU1FRElBRk9STUFUX0tFWV9NSU1FLCBNRURJQV9NSU1FVFlQRV9BVURJT19SQVcpOworICAgICAgICAgICAgQU1lZGlhRm9ybWF0X3NldEludDMyKG1UcmFja01ldGFkYXRhLAorICAgICAgICAgICAgICAgICAgICBBTUVESUFGT1JNQVRfS0VZX0NIQU5ORUxfQ09VTlQsIGdldENoYW5uZWxzKCkpOworICAgICAgICAgICAgQU1lZGlhRm9ybWF0X3NldEludDMyKG1UcmFja01ldGFkYXRhLAorICAgICAgICAgICAgICAgICAgICBBTUVESUFGT1JNQVRfS0VZX1NBTVBMRV9SQVRFLCBnZXRTYW1wbGVSYXRlKCkpOworICAgICAgICAgICAgQU1lZGlhRm9ybWF0X3NldEludDMyKG1UcmFja01ldGFkYXRhLAorICAgICAgICAgICAgICAgICAgICBBTUVESUFGT1JNQVRfS0VZX0JJVFNfUEVSX1NBTVBMRSwgZ2V0Qml0c1BlclNhbXBsZSgpKTsKICAgICAgICAgICAgIC8vIHNhbXBsZSByYXRlIGlzIG5vbi16ZXJvLCBzbyBkaXZpc2lvbiBieSB6ZXJvIG5vdCBwb3NzaWJsZQotICAgICAgICAgICAgbVRyYWNrTWV0YWRhdGEtPnNldEludDY0KGtLZXlEdXJhdGlvbiwKLSAgICAgICAgICAgICAgICAgICAgKGdldFRvdGFsU2FtcGxlcygpICogMTAwMDAwMExMKSAvIGdldFNhbXBsZVJhdGUoKSk7CisgICAgICAgICAgICBBTWVkaWFGb3JtYXRfc2V0SW50NjQobVRyYWNrTWV0YWRhdGEsCisgICAgICAgICAgICAgICAgICAgIEFNRURJQUZPUk1BVF9LRVlfRFVSQVRJT04sIChnZXRUb3RhbFNhbXBsZXMoKSAqIDEwMDAwMDBMTCkgLyBnZXRTYW1wbGVSYXRlKCkpOwogICAgICAgICB9CiAgICAgfSBlbHNlIHsKICAgICAgICAgQUxPR0UoIm1pc3NpbmcgU1RSRUFNSU5GTyIpOwogICAgICAgICByZXR1cm4gTk9fSU5JVDsKICAgICB9CiAgICAgaWYgKG1GaWxlTWV0YWRhdGEgIT0gMCkgewotICAgICAgICBtRmlsZU1ldGFkYXRhLT5zZXRDU3RyaW5nKGtLZXlNSU1FVHlwZSwgTUVESUFfTUlNRVRZUEVfQVVESU9fRkxBQyk7CisgICAgICAgIEFNZWRpYUZvcm1hdF9zZXRTdHJpbmcobUZpbGVNZXRhZGF0YSwKKyAgICAgICAgICAgICAgICBBTUVESUFGT1JNQVRfS0VZX01JTUUsIE1FRElBX01JTUVUWVBFX0FVRElPX0ZMQUMpOwogICAgIH0KICAgICByZXR1cm4gT0s7CiB9CkBAIC02MzgsNyArNTY2LDcgQEAKIHsKICAgICBDSEVDSyhtR3JvdXAgPT0gTlVMTCk7CiAgICAgbUdyb3VwID0gbmV3IE1lZGlhQnVmZmVyR3JvdXA7Ci0gICAgbU1heEJ1ZmZlclNpemUgPSBnZXRNYXhCbG9ja1NpemUoKSAqIGdldENoYW5uZWxzKCkgKiBzaXplb2YoaW50MTZfdCk7CisgICAgbU1heEJ1ZmZlclNpemUgPSBnZXRNYXhCbG9ja1NpemUoKSAqIGdldENoYW5uZWxzKCkgKiBnZXRPdXRwdXRTYW1wbGVTaXplKCk7CiAgICAgbUdyb3VwLT5hZGRfYnVmZmVyKE1lZGlhQnVmZmVyQmFzZTo6Q3JlYXRlKG1NYXhCdWZmZXJTaXplKSk7CiB9CiAKQEAgLTY5MSwxMiArNjE5LDI0IEBACiAgICAgaWYgKGVyciAhPSBPSykgewogICAgICAgICByZXR1cm4gTlVMTDsKICAgICB9Ci0gICAgc2l6ZV90IGJ1ZmZlclNpemUgPSBibG9ja3NpemUgKiBnZXRDaGFubmVscygpICogc2l6ZW9mKGludDE2X3QpOworICAgIGNvbnN0IHNpemVfdCBidWZmZXJTaXplID0gYmxvY2tzaXplICogZ2V0Q2hhbm5lbHMoKSAqIGdldE91dHB1dFNhbXBsZVNpemUoKTsKICAgICBDSEVDSyhidWZmZXJTaXplIDw9IG1NYXhCdWZmZXJTaXplKTsKLSAgICBpbnQxNl90ICpkYXRhID0gKGludDE2X3QgKikgYnVmZmVyLT5kYXRhKCk7CiAgICAgYnVmZmVyLT5zZXRfcmFuZ2UoMCwgYnVmZmVyU2l6ZSk7CiAgICAgLy8gY29weSBQQ00gZnJvbSBGTEFDIHdyaXRlIGJ1ZmZlciB0byBvdXIgbWVkaWEgYnVmZmVyLCB3aXRoIGludGVybGVhdmluZwotICAgICgqbUNvcHkpKGRhdGEsIG1Xcml0ZUJ1ZmZlciwgYmxvY2tzaXplLCBnZXRDaGFubmVscygpKTsKKyAgICBjb25zdCB1bnNpZ25lZCBiaXRzUGVyU2FtcGxlID0gZ2V0Qml0c1BlclNhbXBsZSgpOworICAgIGlmIChtT3V0cHV0RmxvYXQpIHsKKyAgICAgICAgY29weVRvRmxvYXQocmVpbnRlcnByZXRfY2FzdDxmbG9hdCo+KGJ1ZmZlci0+ZGF0YSgpKSwKKyAgICAgICAgICAgICAgICAgICAgbVdyaXRlQnVmZmVyLAorICAgICAgICAgICAgICAgICAgICBibG9ja3NpemUsCisgICAgICAgICAgICAgICAgICAgIGdldENoYW5uZWxzKCksCisgICAgICAgICAgICAgICAgICAgIGJpdHNQZXJTYW1wbGUpOworICAgIH0gZWxzZSB7CisgICAgICAgIGNvcHlUbzE2U2lnbmVkKHJlaW50ZXJwcmV0X2Nhc3Q8c2hvcnQqPihidWZmZXItPmRhdGEoKSksCisgICAgICAgICAgICAgICAgICAgICAgIG1Xcml0ZUJ1ZmZlciwKKyAgICAgICAgICAgICAgICAgICAgICAgYmxvY2tzaXplLAorICAgICAgICAgICAgICAgICAgICAgICBnZXRDaGFubmVscygpLAorICAgICAgICAgICAgICAgICAgICAgICBiaXRzUGVyU2FtcGxlKTsKKyAgICB9CiAgICAgLy8gZmlsbCBpbiBidWZmZXIgbWV0YWRhdGEKICAgICBDSEVDSyhtV3JpdGVIZWFkZXIubnVtYmVyX3R5cGUgPT0gRkxBQ19fRlJBTUVfTlVNQkVSX1RZUEVfU0FNUExFX05VTUJFUik7CiAgICAgRkxBQ19fdWludDY0IHNhbXBsZU51bWJlciA9IG1Xcml0ZUhlYWRlci5udW1iZXIuc2FtcGxlX251bWJlcjsKQEAgLTcwOSwxOCArNjQ5LDE3IEBACiAvLyBGTEFDc291cmNlCiAKIEZMQUNTb3VyY2U6OkZMQUNTb3VyY2UoCi0gICAgICAgIERhdGFTb3VyY2VCYXNlICpkYXRhU291cmNlLAotICAgICAgICBNZXRhRGF0YUJhc2UgJnRyYWNrTWV0YWRhdGEpCisgICAgICAgIERhdGFTb3VyY2VIZWxwZXIgKmRhdGFTb3VyY2UsCisgICAgICAgIEFNZWRpYUZvcm1hdCAqdHJhY2tNZXRhZGF0YSwKKyAgICAgICAgYm9vbCBvdXRwdXRGbG9hdCkKICAgICA6IG1EYXRhU291cmNlKGRhdGFTb3VyY2UpLAogICAgICAgbVRyYWNrTWV0YWRhdGEodHJhY2tNZXRhZGF0YSksCi0gICAgICBtUGFyc2VyKDApLAotICAgICAgbUluaXRDaGVjayhmYWxzZSksCisgICAgICBtT3V0cHV0RmxvYXQob3V0cHV0RmxvYXQpLAorICAgICAgbVBhcnNlcihuZXcgRkxBQ1BhcnNlcihtRGF0YVNvdXJjZSwgb3V0cHV0RmxvYXQpKSwKKyAgICAgIG1Jbml0Q2hlY2sobVBhcnNlci0+aW5pdENoZWNrKCkpLAogICAgICAgbVN0YXJ0ZWQoZmFsc2UpCiB7CiAgICAgQUxPR1YoIkZMQUNTb3VyY2U6OkZMQUNTb3VyY2UiKTsKLSAgICAvLyByZS11c2UgdGhlIHNhbWUgdHJhY2sgbWV0YWRhdGEgcGFzc2VkIGludG8gY29uc3RydWN0b3IgZnJvbSBGTEFDRXh0cmFjdG9yCi0gICAgbVBhcnNlciA9IG5ldyBGTEFDUGFyc2VyKG1EYXRhU291cmNlKTsKLSAgICBtSW5pdENoZWNrICA9IG1QYXJzZXItPmluaXRDaGVjaygpOwogfQogCiBGTEFDU291cmNlOjp+RkxBQ1NvdXJjZSgpCkBAIC03MzIsNyArNjcxLDcgQEAKICAgICBkZWxldGUgbVBhcnNlcjsKIH0KIAotc3RhdHVzX3QgRkxBQ1NvdXJjZTo6c3RhcnQoTWV0YURhdGFCYXNlICogLyogcGFyYW1zICovKQorbWVkaWFfc3RhdHVzX3QgRkxBQ1NvdXJjZTo6c3RhcnQoKQogewogICAgIEFMT0dWKCJGTEFDU291cmNlOjpzdGFydCIpOwogCkBAIC03NDAsMTAgKzY3OSwxMCBAQAogICAgIG1QYXJzZXItPmFsbG9jYXRlQnVmZmVycygpOwogICAgIG1TdGFydGVkID0gdHJ1ZTsKIAotICAgIHJldHVybiBPSzsKKyAgICByZXR1cm4gQU1FRElBX09LOwogfQogCi1zdGF0dXNfdCBGTEFDU291cmNlOjpzdG9wKCkKK21lZGlhX3N0YXR1c190IEZMQUNTb3VyY2U6OnN0b3AoKQogewogICAgIEFMT0dWKCJGTEFDU291cmNlOjpzdG9wIik7CiAKQEAgLTc1MSwxNiArNjkwLDIwIEBACiAgICAgbVBhcnNlci0+cmVsZWFzZUJ1ZmZlcnMoKTsKICAgICBtU3RhcnRlZCA9IGZhbHNlOwogCi0gICAgcmV0dXJuIE9LOworICAgIHJldHVybiBBTUVESUFfT0s7CiB9CiAKLXN0YXR1c190IEZMQUNTb3VyY2U6OmdldEZvcm1hdChNZXRhRGF0YUJhc2UgJm1ldGEpCittZWRpYV9zdGF0dXNfdCBGTEFDU291cmNlOjpnZXRGb3JtYXQoQU1lZGlhRm9ybWF0ICptZXRhKQogewotICAgIG1ldGEgPSBtVHJhY2tNZXRhZGF0YTsKLSAgICByZXR1cm4gT0s7CisgICAgY29uc3QgbWVkaWFfc3RhdHVzX3Qgc3RhdHVzID0gQU1lZGlhRm9ybWF0X2NvcHkobWV0YSwgbVRyYWNrTWV0YWRhdGEpOworICAgIGlmIChzdGF0dXMgPT0gT0spIHsKKyAgICAgICAgQU1lZGlhRm9ybWF0X3NldEludDMyKG1ldGEsIEFNRURJQUZPUk1BVF9LRVlfUENNX0VOQ09ESU5HLAorICAgICAgICAgICAgICAgIG1PdXRwdXRGbG9hdCA/IGtBdWRpb0VuY29kaW5nUGNtRmxvYXQgOiBrQXVkaW9FbmNvZGluZ1BjbTE2Yml0KTsKKyAgICB9CisgICAgcmV0dXJuIHN0YXR1czsKIH0KIAotc3RhdHVzX3QgRkxBQ1NvdXJjZTo6cmVhZCgKK21lZGlhX3N0YXR1c190IEZMQUNTb3VyY2U6OnJlYWQoCiAgICAgICAgIE1lZGlhQnVmZmVyQmFzZSAqKm91dEJ1ZmZlciwgY29uc3QgUmVhZE9wdGlvbnMgKm9wdGlvbnMpCiB7CiAgICAgTWVkaWFCdWZmZXJCYXNlICpidWZmZXI7CkBAIC03ODQsMjAgKzcyNywyMiBAQAogICAgICAgICBidWZmZXIgPSBtUGFyc2VyLT5yZWFkQnVmZmVyKCk7CiAgICAgfQogICAgICpvdXRCdWZmZXIgPSBidWZmZXI7Ci0gICAgcmV0dXJuIGJ1ZmZlciAhPSBOVUxMID8gKHN0YXR1c190KSBPSyA6IChzdGF0dXNfdCkgRVJST1JfRU5EX09GX1NUUkVBTTsKKyAgICByZXR1cm4gYnVmZmVyICE9IE5VTEwgPyBBTUVESUFfT0sgOiBBTUVESUFfRVJST1JfRU5EX09GX1NUUkVBTTsKIH0KIAogLy8gRkxBQ0V4dHJhY3RvcgogCiBGTEFDRXh0cmFjdG9yOjpGTEFDRXh0cmFjdG9yKAotICAgICAgICBEYXRhU291cmNlQmFzZSAqZGF0YVNvdXJjZSkKKyAgICAgICAgRGF0YVNvdXJjZUhlbHBlciAqZGF0YVNvdXJjZSkKICAgICA6IG1EYXRhU291cmNlKGRhdGFTb3VyY2UpLAogICAgICAgbVBhcnNlcihudWxscHRyKSwKICAgICAgIG1Jbml0Q2hlY2soZmFsc2UpCiB7CiAgICAgQUxPR1YoIkZMQUNFeHRyYWN0b3I6OkZMQUNFeHRyYWN0b3IiKTsKICAgICAvLyBGTEFDUGFyc2VyIHdpbGwgZmlsbCBpbiB0aGUgbWV0YWRhdGEgZm9yIHVzCi0gICAgbVBhcnNlciA9IG5ldyBGTEFDUGFyc2VyKG1EYXRhU291cmNlLCAmbUZpbGVNZXRhZGF0YSwgJm1UcmFja01ldGFkYXRhKTsKKyAgICBtRmlsZU1ldGFkYXRhID0gQU1lZGlhRm9ybWF0X25ldygpOworICAgIG1UcmFja01ldGFkYXRhID0gQU1lZGlhRm9ybWF0X25ldygpOworICAgIG1QYXJzZXIgPSBuZXcgRkxBQ1BhcnNlcihtRGF0YVNvdXJjZSwgZmFsc2UgLyogb3V0cHV0RmxvYXQgKi8sIG1GaWxlTWV0YWRhdGEsIG1UcmFja01ldGFkYXRhKTsKICAgICBtSW5pdENoZWNrID0gbVBhcnNlci0+aW5pdENoZWNrKCk7CiB9CiAKQEAgLTgwNSw2ICs3NTAsOSBAQAogewogICAgIEFMT0dWKCJ+RkxBQ0V4dHJhY3Rvcjo6RkxBQ0V4dHJhY3RvciIpOwogICAgIGRlbGV0ZSBtUGFyc2VyOworICAgIGRlbGV0ZSBtRGF0YVNvdXJjZTsKKyAgICBBTWVkaWFGb3JtYXRfZGVsZXRlKG1GaWxlTWV0YWRhdGEpOworICAgIEFNZWRpYUZvcm1hdF9kZWxldGUobVRyYWNrTWV0YWRhdGEpOwogfQogCiBzaXplX3QgRkxBQ0V4dHJhY3Rvcjo6Y291bnRUcmFja3MoKQpAQCAtODEyLDMzICs3NjAsMzkgQEAKICAgICByZXR1cm4gbUluaXRDaGVjayA9PSBPSyA/IDEgOiAwOwogfQogCi1NZWRpYVRyYWNrICpGTEFDRXh0cmFjdG9yOjpnZXRUcmFjayhzaXplX3QgaW5kZXgpCitNZWRpYVRyYWNrSGVscGVyVjIgKkZMQUNFeHRyYWN0b3I6OmdldFRyYWNrKHNpemVfdCBpbmRleCkKIHsKICAgICBpZiAobUluaXRDaGVjayAhPSBPSyB8fCBpbmRleCA+IDApIHsKICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgfQotICAgIHJldHVybiBuZXcgRkxBQ1NvdXJjZShtRGF0YVNvdXJjZSwgbVRyYWNrTWV0YWRhdGEpOworCisgICAgcmV0dXJuIG5ldyBGTEFDU291cmNlKAorICAgICAgICAgICAgbURhdGFTb3VyY2UsIG1UcmFja01ldGFkYXRhLCBzaG91bGRFeHRyYWN0b3JPdXRwdXRGbG9hdChtUGFyc2VyLT5nZXRCaXRzUGVyU2FtcGxlKCkpKTsKIH0KIAotc3RhdHVzX3QgRkxBQ0V4dHJhY3Rvcjo6Z2V0VHJhY2tNZXRhRGF0YSgKLSAgICAgICAgTWV0YURhdGFCYXNlICZtZXRhLAorbWVkaWFfc3RhdHVzX3QgRkxBQ0V4dHJhY3Rvcjo6Z2V0VHJhY2tNZXRhRGF0YSgKKyAgICAgICAgQU1lZGlhRm9ybWF0ICptZXRhLAogICAgICAgICBzaXplX3QgaW5kZXgsIHVpbnQzMl90IC8qIGZsYWdzICovKSB7CiAgICAgaWYgKG1Jbml0Q2hlY2sgIT0gT0sgfHwgaW5kZXggPiAwKSB7Ci0gICAgICAgIHJldHVybiBVTktOT1dOX0VSUk9SOworICAgICAgICByZXR1cm4gQU1FRElBX0VSUk9SX1VOS05PV047CiAgICAgfQotICAgIG1ldGEgPSBtVHJhY2tNZXRhZGF0YTsKLSAgICByZXR1cm4gT0s7CisgICAgY29uc3QgbWVkaWFfc3RhdHVzX3Qgc3RhdHVzID0gQU1lZGlhRm9ybWF0X2NvcHkobWV0YSwgbVRyYWNrTWV0YWRhdGEpOworICAgIGlmIChzdGF0dXMgPT0gT0spIHsKKyAgICAgICAgQU1lZGlhRm9ybWF0X3NldEludDMyKG1ldGEsIEFNRURJQUZPUk1BVF9LRVlfUENNX0VOQ09ESU5HLAorICAgICAgICAgICAgICAgIHNob3VsZEV4dHJhY3Rvck91dHB1dEZsb2F0KG1QYXJzZXItPmdldEJpdHNQZXJTYW1wbGUoKSkKKyAgICAgICAgICAgICAgICAgICAgICAgID8ga0F1ZGlvRW5jb2RpbmdQY21GbG9hdCA6IGtBdWRpb0VuY29kaW5nUGNtMTZiaXQpOworICAgIH0KKyAgICByZXR1cm4gc3RhdHVzOwogfQogCi1zdGF0dXNfdCBGTEFDRXh0cmFjdG9yOjpnZXRNZXRhRGF0YShNZXRhRGF0YUJhc2UgJm1ldGEpCittZWRpYV9zdGF0dXNfdCBGTEFDRXh0cmFjdG9yOjpnZXRNZXRhRGF0YShBTWVkaWFGb3JtYXQgKm1ldGEpCiB7Ci0gICAgbWV0YSA9IG1GaWxlTWV0YWRhdGE7Ci0gICAgcmV0dXJuIE9LOworICAgIHJldHVybiBBTWVkaWFGb3JtYXRfY29weShtZXRhLCBtRmlsZU1ldGFkYXRhKTsKIH0KIAogLy8gU25pZmZlcgogCi1ib29sIFNuaWZmRkxBQyhEYXRhU291cmNlQmFzZSAqc291cmNlLCBmbG9hdCAqY29uZmlkZW5jZSkKK2Jvb2wgU25pZmZGTEFDKERhdGFTb3VyY2VIZWxwZXIgKnNvdXJjZSwgZmxvYXQgKmNvbmZpZGVuY2UpCiB7CiAgICAgLy8gZmlyc3QgNCBpcyB0aGUgc2lnbmF0dXJlIHdvcmQKICAgICAvLyBzZWNvbmQgNCBpcyB0aGUgc2l6ZW9mIFNUUkVBTUlORk8KQEAgLTg2MCwyNCArODE0LDI3IEBACiBleHRlcm4gIkMiIHsKIC8vIFRoaXMgaXMgdGhlIG9ubHkgc3ltYm9sIHRoYXQgbmVlZHMgdG8gYmUgZXhwb3J0ZWQKIF9fYXR0cmlidXRlX18gKCh2aXNpYmlsaXR5ICgiZGVmYXVsdCIpKSkKLU1lZGlhRXh0cmFjdG9yOjpFeHRyYWN0b3JEZWYgR0VURVhUUkFDVE9SREVGKCkgeworRXh0cmFjdG9yRGVmIEdFVEVYVFJBQ1RPUkRFRigpIHsKICAgICByZXR1cm4gewotICAgICAgICBNZWRpYUV4dHJhY3Rvcjo6RVhUUkFDVE9SREVGX1ZFUlNJT04sCisgICAgICAgICAgICBFWFRSQUNUT1JERUZfVkVSU0lPTl9DVVJSRU5ULAogICAgICAgICAgICAgVVVJRCgiMTM2NGIwNDgtY2M0NS00ZmRhLTk5MzQtMzI3ZDBlYmY5ODI5IiksCiAgICAgICAgICAgICAxLAogICAgICAgICAgICAgIkZMQUMgRXh0cmFjdG9yIiwKLSAgICAgICAgICAgIFtdKAotICAgICAgICAgICAgICAgICAgICBEYXRhU291cmNlQmFzZSAqc291cmNlLAotICAgICAgICAgICAgICAgICAgICBmbG9hdCAqY29uZmlkZW5jZSwKLSAgICAgICAgICAgICAgICAgICAgdm9pZCAqKiwKLSAgICAgICAgICAgICAgICAgICAgTWVkaWFFeHRyYWN0b3I6OkZyZWVNZXRhRnVuYyAqKSAtPiBNZWRpYUV4dHJhY3Rvcjo6Q3JlYXRvckZ1bmMgewotICAgICAgICAgICAgICAgIGlmIChTbmlmZkZMQUMoc291cmNlLCBjb25maWRlbmNlKSkgewotICAgICAgICAgICAgICAgICAgICByZXR1cm4gW10oCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgRGF0YVNvdXJjZUJhc2UgKnNvdXJjZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICopIC0+IE1lZGlhRXh0cmFjdG9yKiB7Ci0gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbmV3IEZMQUNFeHRyYWN0b3Ioc291cmNlKTt9OworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIC52MiA9IFtdKAorICAgICAgICAgICAgICAgICAgICAgICAgQ0RhdGFTb3VyY2UgKnNvdXJjZSwKKyAgICAgICAgICAgICAgICAgICAgICAgIGZsb2F0ICpjb25maWRlbmNlLAorICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAqKiwKKyAgICAgICAgICAgICAgICAgICAgICAgIEZyZWVNZXRhRnVuYyAqKSAtPiBDcmVhdG9yRnVuY1YyIHsKKyAgICAgICAgICAgICAgICAgICAgRGF0YVNvdXJjZUhlbHBlciBoZWxwZXIoc291cmNlKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKFNuaWZmRkxBQygmaGVscGVyLCBjb25maWRlbmNlKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFtdKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDRGF0YVNvdXJjZSAqc291cmNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICopIC0+IENNZWRpYUV4dHJhY3RvclYyKiB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHdyYXBWMihuZXcgRkxBQ0V4dHJhY3RvcihuZXcgRGF0YVNvdXJjZUhlbHBlcihzb3VyY2UpKSk7fTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gTlVMTDsKICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgICAgICAgICB9CiAgICAgIH07CiB9CmRpZmYgLS1naXQgYS9tZWRpYS9leHRyYWN0b3JzL2ZsYWMvRkxBQ0V4dHJhY3Rvci5oIGIvbWVkaWEvZXh0cmFjdG9ycy9mbGFjL0ZMQUNFeHRyYWN0b3IuaAppbmRleCA3ZmI2ZWM2Li4zMjMzMDdiIDEwMDY0NAotLS0gYS9tZWRpYS9leHRyYWN0b3JzL2ZsYWMvRkxBQ0V4dHJhY3Rvci5oCisrKyBiL21lZGlhL2V4dHJhY3RvcnMvZmxhYy9GTEFDRXh0cmFjdG9yLmgKQEAgLTE4LDQ1ICsxOCw0NCBAQAogI2RlZmluZSBGTEFDX0VYVFJBQ1RPUl9IXwogCiAjaW5jbHVkZSA8bWVkaWEvRGF0YVNvdXJjZUJhc2UuaD4KLSNpbmNsdWRlIDxtZWRpYS9NZWRpYUV4dHJhY3Rvci5oPgotI2luY2x1ZGUgPG1lZGlhL3N0YWdlZnJpZ2h0L01ldGFEYXRhQmFzZS5oPgorI2luY2x1ZGUgPG1lZGlhL01lZGlhRXh0cmFjdG9yUGx1Z2luQXBpLmg+CisjaW5jbHVkZSA8bWVkaWEvTWVkaWFFeHRyYWN0b3JQbHVnaW5IZWxwZXIuaD4KKyNpbmNsdWRlIDxtZWRpYS9OZGtNZWRpYUZvcm1hdC5oPgogI2luY2x1ZGUgPHV0aWxzL1N0cmluZzguaD4KIAogbmFtZXNwYWNlIGFuZHJvaWQgewogCiBjbGFzcyBGTEFDUGFyc2VyOwogCi1jbGFzcyBGTEFDRXh0cmFjdG9yIDogcHVibGljIE1lZGlhRXh0cmFjdG9yIHsKK2NsYXNzIEZMQUNFeHRyYWN0b3IgOiBwdWJsaWMgTWVkaWFFeHRyYWN0b3JQbHVnaW5IZWxwZXJWMiB7CiAKIHB1YmxpYzoKLSAgICBleHBsaWNpdCBGTEFDRXh0cmFjdG9yKERhdGFTb3VyY2VCYXNlICpzb3VyY2UpOworICAgIGV4cGxpY2l0IEZMQUNFeHRyYWN0b3IoRGF0YVNvdXJjZUhlbHBlciAqc291cmNlKTsKIAogICAgIHZpcnR1YWwgc2l6ZV90IGNvdW50VHJhY2tzKCk7Ci0gICAgdmlydHVhbCBNZWRpYVRyYWNrICpnZXRUcmFjayhzaXplX3QgaW5kZXgpOwotICAgIHZpcnR1YWwgc3RhdHVzX3QgZ2V0VHJhY2tNZXRhRGF0YShNZXRhRGF0YUJhc2UmIG1ldGEsIHNpemVfdCBpbmRleCwgdWludDMyX3QgZmxhZ3MpOworICAgIHZpcnR1YWwgTWVkaWFUcmFja0hlbHBlclYyICpnZXRUcmFjayhzaXplX3QgaW5kZXgpOworICAgIHZpcnR1YWwgbWVkaWFfc3RhdHVzX3QgZ2V0VHJhY2tNZXRhRGF0YShBTWVkaWFGb3JtYXQgKm1ldGEsIHNpemVfdCBpbmRleCwgdWludDMyX3QgZmxhZ3MpOwogCi0gICAgdmlydHVhbCBzdGF0dXNfdCBnZXRNZXRhRGF0YShNZXRhRGF0YUJhc2UmIG1ldGEpOworICAgIHZpcnR1YWwgbWVkaWFfc3RhdHVzX3QgZ2V0TWV0YURhdGEoQU1lZGlhRm9ybWF0ICptZXRhKTsKICAgICB2aXJ0dWFsIGNvbnN0IGNoYXIgKiBuYW1lKCkgeyByZXR1cm4gIkZMQUNFeHRyYWN0b3IiOyB9CiAKIHByb3RlY3RlZDoKICAgICB2aXJ0dWFsIH5GTEFDRXh0cmFjdG9yKCk7CiAKIHByaXZhdGU6Ci0gICAgRGF0YVNvdXJjZUJhc2UgKm1EYXRhU291cmNlOworICAgIERhdGFTb3VyY2VIZWxwZXIgKm1EYXRhU291cmNlOwogICAgIEZMQUNQYXJzZXIgKm1QYXJzZXI7CiAgICAgc3RhdHVzX3QgbUluaXRDaGVjazsKLSAgICBNZXRhRGF0YUJhc2UgbUZpbGVNZXRhZGF0YTsKKyAgICBBTWVkaWFGb3JtYXQgKm1GaWxlTWV0YWRhdGE7CiAKICAgICAvLyBUaGVyZSBpcyBvbmx5IG9uZSB0cmFjawotICAgIE1ldGFEYXRhQmFzZSBtVHJhY2tNZXRhZGF0YTsKKyAgICBBTWVkaWFGb3JtYXQgKm1UcmFja01ldGFkYXRhOwogCiAgICAgRkxBQ0V4dHJhY3Rvcihjb25zdCBGTEFDRXh0cmFjdG9yICYpOwogICAgIEZMQUNFeHRyYWN0b3IgJm9wZXJhdG9yPShjb25zdCBGTEFDRXh0cmFjdG9yICYpOwogCiB9OwogCi1ib29sIFNuaWZmRkxBQyhEYXRhU291cmNlQmFzZSAqc291cmNlLCBmbG9hdCAqY29uZmlkZW5jZSk7Ci0KIH0gIC8vIG5hbWVzcGFjZSBhbmRyb2lkCiAKICNlbmRpZiAgLy8gRkxBQ19FWFRSQUNUT1JfSF8KZGlmZiAtLWdpdCBhL21lZGlhL2V4dHJhY3RvcnMvbWlkaS9BbmRyb2lkLmJwIGIvbWVkaWEvZXh0cmFjdG9ycy9taWRpL0FuZHJvaWQuYnAKaW5kZXggZmRlMDlkZjE4Li5jNWRmNWM3IDEwMDY0NAotLS0gYS9tZWRpYS9leHRyYWN0b3JzL21pZGkvQW5kcm9pZC5icAorKysgYi9tZWRpYS9leHRyYWN0b3JzL21pZGkvQW5kcm9pZC5icApAQCAtOSw2ICs5LDcgQEAKICAgICBzaGFyZWRfbGliczogWwogICAgICAgICAibGlibG9nIiwKICAgICAgICAgImxpYm1lZGlhZXh0cmFjdG9yIiwKKyAgICAgICAgImxpYm1lZGlhbmRrIiwKICAgICBdLAogCiAgICAgc3RhdGljX2xpYnM6IFsKZGlmZiAtLWdpdCBhL21lZGlhL2V4dHJhY3RvcnMvbWlkaS9NaWRpRXh0cmFjdG9yLmNwcCBiL21lZGlhL2V4dHJhY3RvcnMvbWlkaS9NaWRpRXh0cmFjdG9yLmNwcAppbmRleCBhMzBiNmY4Li5jZDM5Y2VjIDEwMDY0NAotLS0gYS9tZWRpYS9leHRyYWN0b3JzL21pZGkvTWlkaUV4dHJhY3Rvci5jcHAKKysrIGIvbWVkaWEvZXh0cmFjdG9ycy9taWRpL01pZGlFeHRyYWN0b3IuY3BwCkBAIC0yNCw4ICsyNCw4IEBACiAjaW5jbHVkZSA8bWVkaWEvc3RhZ2VmcmlnaHQvZm91bmRhdGlvbi9BRGVidWcuaD4KICNpbmNsdWRlIDxtZWRpYS9zdGFnZWZyaWdodC9NZWRpYUJ1ZmZlckdyb3VwLmg+CiAjaW5jbHVkZSA8bWVkaWEvc3RhZ2VmcmlnaHQvTWVkaWFEZWZzLmg+CisjaW5jbHVkZSA8bWVkaWEvc3RhZ2VmcmlnaHQvTWVkaWFFcnJvcnMuaD4KICNpbmNsdWRlIDxtZWRpYS9zdGFnZWZyaWdodC9NZXRhRGF0YS5oPgotI2luY2x1ZGUgPG1lZGlhL01lZGlhVHJhY2suaD4KICNpbmNsdWRlIDxsaWJzb25pdm94L2Vhc19yZXZlcmIuaD4KIAogbmFtZXNwYWNlIGFuZHJvaWQgewpAQCAtMzMsMTggKzMzLDE4IEBACiAvLyBob3cgbWFueSBTb25pdm94IG91dHB1dCBidWZmZXJzIHRvIGFnZ3JlZ2F0ZSBpbnRvIG9uZSBNZWRpYUJ1ZmZlckJhc2UKIHN0YXRpYyBjb25zdCBpbnQgTlVNX0NPTUJJTkVfQlVGRkVSUyA9IDQ7CiAKLWNsYXNzIE1pZGlTb3VyY2UgOiBwdWJsaWMgTWVkaWFUcmFjayB7CitjbGFzcyBNaWRpU291cmNlIDogcHVibGljIE1lZGlhVHJhY2tIZWxwZXJWMiB7CiAKIHB1YmxpYzoKICAgICBNaWRpU291cmNlKAogICAgICAgICAgICAgTWlkaUVuZ2luZSAmZW5naW5lLAotICAgICAgICAgICAgTWV0YURhdGFCYXNlICZ0cmFja01ldGFkYXRhKTsKKyAgICAgICAgICAgIEFNZWRpYUZvcm1hdCAqdHJhY2tNZXRhZGF0YSk7CiAKLSAgICB2aXJ0dWFsIHN0YXR1c190IHN0YXJ0KE1ldGFEYXRhQmFzZSAqcGFyYW1zKTsKLSAgICB2aXJ0dWFsIHN0YXR1c190IHN0b3AoKTsKLSAgICB2aXJ0dWFsIHN0YXR1c190IGdldEZvcm1hdChNZXRhRGF0YUJhc2UmKTsKKyAgICB2aXJ0dWFsIG1lZGlhX3N0YXR1c190IHN0YXJ0KCk7CisgICAgdmlydHVhbCBtZWRpYV9zdGF0dXNfdCBzdG9wKCk7CisgICAgdmlydHVhbCBtZWRpYV9zdGF0dXNfdCBnZXRGb3JtYXQoQU1lZGlhRm9ybWF0ICopOwogCi0gICAgdmlydHVhbCBzdGF0dXNfdCByZWFkKAorICAgIHZpcnR1YWwgbWVkaWFfc3RhdHVzX3QgcmVhZCgKICAgICAgICAgICAgIE1lZGlhQnVmZmVyQmFzZSAqKmJ1ZmZlciwgY29uc3QgUmVhZE9wdGlvbnMgKm9wdGlvbnMgPSBOVUxMKTsKIAogcHJvdGVjdGVkOgpAQCAtNTIsNyArNTIsNyBAQAogCiBwcml2YXRlOgogICAgIE1pZGlFbmdpbmUgJm1FbmdpbmU7Ci0gICAgTWV0YURhdGFCYXNlICZtVHJhY2tNZXRhZGF0YTsKKyAgICBBTWVkaWFGb3JtYXQgKm1UcmFja01ldGFkYXRhOwogICAgIGJvb2wgbUluaXRDaGVjazsKICAgICBib29sIG1TdGFydGVkOwogCkBAIC02OSw3ICs2OSw3IEBACiAKIE1pZGlTb3VyY2U6Ok1pZGlTb3VyY2UoCiAgICAgICAgIE1pZGlFbmdpbmUgJmVuZ2luZSwKLSAgICAgICAgTWV0YURhdGFCYXNlICZ0cmFja01ldGFkYXRhKQorICAgICAgICBBTWVkaWFGb3JtYXQgKnRyYWNrTWV0YWRhdGEpCiAgICAgOiBtRW5naW5lKGVuZ2luZSksCiAgICAgICBtVHJhY2tNZXRhZGF0YSh0cmFja01ldGFkYXRhKSwKICAgICAgIG1Jbml0Q2hlY2soZmFsc2UpLApAQCAtODcsMTcgKzg3LDE3IEBACiAgICAgfQogfQogCi1zdGF0dXNfdCBNaWRpU291cmNlOjpzdGFydChNZXRhRGF0YUJhc2UgKiAvKiBwYXJhbXMgKi8pCittZWRpYV9zdGF0dXNfdCBNaWRpU291cmNlOjpzdGFydCgpCiB7CiAgICAgQUxPR1YoIk1pZGlTb3VyY2U6OnN0YXJ0Iik7CiAKICAgICBDSEVDSyghbVN0YXJ0ZWQpOwogICAgIG1TdGFydGVkID0gdHJ1ZTsKICAgICBtRW5naW5lLmFsbG9jYXRlQnVmZmVycygpOwotICAgIHJldHVybiBPSzsKKyAgICByZXR1cm4gQU1FRElBX09LOwogfQogCi1zdGF0dXNfdCBNaWRpU291cmNlOjpzdG9wKCkKK21lZGlhX3N0YXR1c190IE1pZGlTb3VyY2U6OnN0b3AoKQogewogICAgIEFMT0dWKCJNaWRpU291cmNlOjpzdG9wIik7CiAKQEAgLTEwNSwxNiArMTA1LDE1IEBACiAgICAgbVN0YXJ0ZWQgPSBmYWxzZTsKICAgICBtRW5naW5lLnJlbGVhc2VCdWZmZXJzKCk7CiAKLSAgICByZXR1cm4gT0s7CisgICAgcmV0dXJuIEFNRURJQV9PSzsKIH0KIAotc3RhdHVzX3QgTWlkaVNvdXJjZTo6Z2V0Rm9ybWF0KE1ldGFEYXRhQmFzZSAmbWV0YSkKK21lZGlhX3N0YXR1c190IE1pZGlTb3VyY2U6OmdldEZvcm1hdChBTWVkaWFGb3JtYXQgKm1ldGEpCiB7Ci0gICAgbWV0YSA9IG1UcmFja01ldGFkYXRhOwotICAgIHJldHVybiBPSzsKKyAgICByZXR1cm4gQU1lZGlhRm9ybWF0X2NvcHkobWV0YSwgbVRyYWNrTWV0YWRhdGEpOwogfQogCi1zdGF0dXNfdCBNaWRpU291cmNlOjpyZWFkKAorbWVkaWFfc3RhdHVzX3QgTWlkaVNvdXJjZTo6cmVhZCgKICAgICAgICAgTWVkaWFCdWZmZXJCYXNlICoqb3V0QnVmZmVyLCBjb25zdCBSZWFkT3B0aW9ucyAqb3B0aW9ucykKIHsKICAgICBBTE9HVigiTWlkaVNvdXJjZTo6cmVhZCIpOwpAQCAtMTMxLDcgKzEzMCw3IEBACiAgICAgYnVmZmVyID0gbUVuZ2luZS5yZWFkQnVmZmVyKCk7CiAgICAgKm91dEJ1ZmZlciA9IGJ1ZmZlcjsKICAgICBBTE9HVigiTWlkaVNvdXJjZTo6cmVhZCAlcCBkb25lIiwgdGhpcyk7Ci0gICAgcmV0dXJuIGJ1ZmZlciAhPSBOVUxMID8gKHN0YXR1c190KSBPSyA6IChzdGF0dXNfdCkgRVJST1JfRU5EX09GX1NUUkVBTTsKKyAgICByZXR1cm4gYnVmZmVyICE9IE5VTEwgPyBBTUVESUFfT0sgOiBBTUVESUFfRVJST1JfRU5EX09GX1NUUkVBTTsKIH0KIAogc3RhdHVzX3QgTWlkaVNvdXJjZTo6aW5pdCgpCkBAIC0xNDIsOSArMTQxLDkgQEAKIAogLy8gTWlkaUVuZ2luZQogCi1NaWRpRW5naW5lOjpNaWRpRW5naW5lKERhdGFTb3VyY2VCYXNlICpkYXRhU291cmNlLAotICAgICAgICBNZXRhRGF0YUJhc2UgKmZpbGVNZXRhZGF0YSwKLSAgICAgICAgTWV0YURhdGFCYXNlICp0cmFja01ldGFkYXRhKSA6CitNaWRpRW5naW5lOjpNaWRpRW5naW5lKENEYXRhU291cmNlICpkYXRhU291cmNlLAorICAgICAgICBBTWVkaWFGb3JtYXQgKmZpbGVNZXRhZGF0YSwKKyAgICAgICAgQU1lZGlhRm9ybWF0ICp0cmFja01ldGFkYXRhKSA6CiAgICAgICAgICAgICBtR3JvdXAoTlVMTCksCiAgICAgICAgICAgICBtRWFzRGF0YShOVUxMKSwKICAgICAgICAgICAgIG1FYXNIYW5kbGUoTlVMTCksCkBAIC0xNzAsMTYgKzE2OSwyMCBAQAogICAgIH0KIAogICAgIGlmIChmaWxlTWV0YWRhdGEgIT0gTlVMTCkgewotICAgICAgICBmaWxlTWV0YWRhdGEtPnNldENTdHJpbmcoa0tleU1JTUVUeXBlLCBNRURJQV9NSU1FVFlQRV9BVURJT19NSURJKTsKKyAgICAgICAgQU1lZGlhRm9ybWF0X3NldFN0cmluZyhmaWxlTWV0YWRhdGEsIEFNRURJQUZPUk1BVF9LRVlfTUlNRSwgTUVESUFfTUlNRVRZUEVfQVVESU9fTUlESSk7CiAgICAgfQogCiAgICAgaWYgKHRyYWNrTWV0YWRhdGEgIT0gTlVMTCkgewotICAgICAgICB0cmFja01ldGFkYXRhLT5zZXRDU3RyaW5nKGtLZXlNSU1FVHlwZSwgTUVESUFfTUlNRVRZUEVfQVVESU9fUkFXKTsKLSAgICAgICAgdHJhY2tNZXRhZGF0YS0+c2V0SW50NjQoa0tleUR1cmF0aW9uLCAxMDAwbGwgKiB0ZW1wKTsgLy8gbWlsbGktPm1pY3JvCisgICAgICAgIEFNZWRpYUZvcm1hdF9zZXRTdHJpbmcodHJhY2tNZXRhZGF0YSwgQU1FRElBRk9STUFUX0tFWV9NSU1FLCBNRURJQV9NSU1FVFlQRV9BVURJT19SQVcpOworICAgICAgICBBTWVkaWFGb3JtYXRfc2V0SW50NjQoCisgICAgICAgICAgICAgICAgdHJhY2tNZXRhZGF0YSwgQU1FRElBRk9STUFUX0tFWV9EVVJBVElPTiwgMTAwMGxsICogdGVtcCk7IC8vIG1pbGxpLT5taWNybwogICAgICAgICBtRWFzQ29uZmlnID0gRUFTX0NvbmZpZygpOwotICAgICAgICB0cmFja01ldGFkYXRhLT5zZXRJbnQzMihrS2V5U2FtcGxlUmF0ZSwgbUVhc0NvbmZpZy0+c2FtcGxlUmF0ZSk7Ci0gICAgICAgIHRyYWNrTWV0YWRhdGEtPnNldEludDMyKGtLZXlDaGFubmVsQ291bnQsIG1FYXNDb25maWctPm51bUNoYW5uZWxzKTsKLSAgICAgICAgdHJhY2tNZXRhZGF0YS0+c2V0SW50MzIoa0tleVBjbUVuY29kaW5nLCBrQXVkaW9FbmNvZGluZ1BjbTE2Yml0KTsKKyAgICAgICAgQU1lZGlhRm9ybWF0X3NldEludDMyKAorICAgICAgICAgICAgICAgIHRyYWNrTWV0YWRhdGEsIEFNRURJQUZPUk1BVF9LRVlfU0FNUExFX1JBVEUsIG1FYXNDb25maWctPnNhbXBsZVJhdGUpOworICAgICAgICBBTWVkaWFGb3JtYXRfc2V0SW50MzIoCisgICAgICAgICAgICAgICAgdHJhY2tNZXRhZGF0YSwgQU1FRElBRk9STUFUX0tFWV9DSEFOTkVMX0NPVU5ULCBtRWFzQ29uZmlnLT5udW1DaGFubmVscyk7CisgICAgICAgIEFNZWRpYUZvcm1hdF9zZXRJbnQzMigKKyAgICAgICAgICAgICAgICB0cmFja01ldGFkYXRhLCBBTUVESUFGT1JNQVRfS0VZX1BDTV9FTkNPRElORywga0F1ZGlvRW5jb2RpbmdQY20xNmJpdCk7CiAgICAgfQogICAgIG1Jc0luaXRpYWxpemVkID0gdHJ1ZTsKIH0KQEAgLTI2MywxOCArMjY2LDIyIEBACiAvLyBNaWRpRXh0cmFjdG9yCiAKIE1pZGlFeHRyYWN0b3I6Ok1pZGlFeHRyYWN0b3IoCi0gICAgICAgIERhdGFTb3VyY2VCYXNlICpkYXRhU291cmNlKQorICAgICAgICBDRGF0YVNvdXJjZSAqZGF0YVNvdXJjZSkKICAgICA6IG1EYXRhU291cmNlKGRhdGFTb3VyY2UpLAogICAgICAgbUluaXRDaGVjayhmYWxzZSkKIHsKICAgICBBTE9HVigiTWlkaUV4dHJhY3RvciBjdG9yIik7Ci0gICAgbUVuZ2luZSA9IG5ldyBNaWRpRW5naW5lKG1EYXRhU291cmNlLCAmbUZpbGVNZXRhZGF0YSwgJm1UcmFja01ldGFkYXRhKTsKKyAgICBtRmlsZU1ldGFkYXRhID0gQU1lZGlhRm9ybWF0X25ldygpOworICAgIG1UcmFja01ldGFkYXRhID0gQU1lZGlhRm9ybWF0X25ldygpOworICAgIG1FbmdpbmUgPSBuZXcgTWlkaUVuZ2luZShtRGF0YVNvdXJjZSwgbUZpbGVNZXRhZGF0YSwgbVRyYWNrTWV0YWRhdGEpOwogICAgIG1Jbml0Q2hlY2sgPSBtRW5naW5lLT5pbml0Q2hlY2soKTsKIH0KIAogTWlkaUV4dHJhY3Rvcjo6fk1pZGlFeHRyYWN0b3IoKQogewogICAgIEFMT0dWKCJNaWRpRXh0cmFjdG9yIGR0b3IiKTsKKyAgICBBTWVkaWFGb3JtYXRfZGVsZXRlKG1GaWxlTWV0YWRhdGEpOworICAgIEFNZWRpYUZvcm1hdF9kZWxldGUobVRyYWNrTWV0YWRhdGEpOwogfQogCiBzaXplX3QgTWlkaUV4dHJhY3Rvcjo6Y291bnRUcmFja3MoKQpAQCAtMjgyLDcgKzI4OSw3IEBACiAgICAgcmV0dXJuIG1Jbml0Q2hlY2sgPT0gT0sgPyAxIDogMDsKIH0KIAotTWVkaWFUcmFjayAqTWlkaUV4dHJhY3Rvcjo6Z2V0VHJhY2soc2l6ZV90IGluZGV4KQorTWVkaWFUcmFja0hlbHBlclYyICpNaWRpRXh0cmFjdG9yOjpnZXRUcmFjayhzaXplX3QgaW5kZXgpCiB7CiAgICAgaWYgKG1Jbml0Q2hlY2sgIT0gT0sgfHwgaW5kZXggPiAwKSB7CiAgICAgICAgIHJldHVybiBOVUxMOwpAQCAtMjkwLDI3ICsyOTcsMjUgQEAKICAgICByZXR1cm4gbmV3IE1pZGlTb3VyY2UoKm1FbmdpbmUsIG1UcmFja01ldGFkYXRhKTsKIH0KIAotc3RhdHVzX3QgTWlkaUV4dHJhY3Rvcjo6Z2V0VHJhY2tNZXRhRGF0YSgKLSAgICAgICAgTWV0YURhdGFCYXNlICZtZXRhLAorbWVkaWFfc3RhdHVzX3QgTWlkaUV4dHJhY3Rvcjo6Z2V0VHJhY2tNZXRhRGF0YSgKKyAgICAgICAgQU1lZGlhRm9ybWF0ICptZXRhLAogICAgICAgICBzaXplX3QgaW5kZXgsIHVpbnQzMl90IC8qIGZsYWdzICovKSB7CiAgICAgQUxPR1YoIk1pZGlFeHRyYWN0b3I6OmdldFRyYWNrTWV0YURhdGEiKTsKICAgICBpZiAobUluaXRDaGVjayAhPSBPSyB8fCBpbmRleCA+IDApIHsKLSAgICAgICAgcmV0dXJuIFVOS05PV05fRVJST1I7CisgICAgICAgIHJldHVybiBBTUVESUFfRVJST1JfVU5LTk9XTjsKICAgICB9Ci0gICAgbWV0YSA9IG1UcmFja01ldGFkYXRhOwotICAgIHJldHVybiBPSzsKKyAgICByZXR1cm4gQU1lZGlhRm9ybWF0X2NvcHkobWV0YSwgbVRyYWNrTWV0YWRhdGEpOwogfQogCi1zdGF0dXNfdCBNaWRpRXh0cmFjdG9yOjpnZXRNZXRhRGF0YShNZXRhRGF0YUJhc2UgJm1ldGEpCittZWRpYV9zdGF0dXNfdCBNaWRpRXh0cmFjdG9yOjpnZXRNZXRhRGF0YShBTWVkaWFGb3JtYXQgKm1ldGEpCiB7CiAgICAgQUxPR1YoIk1pZGlFeHRyYWN0b3I6OmdldE1ldGFEYXRhIik7Ci0gICAgbWV0YSA9IG1GaWxlTWV0YWRhdGE7Ci0gICAgcmV0dXJuIE9LOworICAgIHJldHVybiBBTWVkaWFGb3JtYXRfY29weShtZXRhLCBtRmlsZU1ldGFkYXRhKTsKIH0KIAogLy8gU25pZmZlcgogCi1ib29sIFNuaWZmTWlkaShEYXRhU291cmNlQmFzZSAqc291cmNlLCBmbG9hdCAqY29uZmlkZW5jZSkKK2Jvb2wgU25pZmZNaWRpKENEYXRhU291cmNlICpzb3VyY2UsIGZsb2F0ICpjb25maWRlbmNlKQogewogICAgIE1pZGlFbmdpbmUgcChzb3VyY2UsIE5VTEwsIE5VTEwpOwogICAgIGlmIChwLmluaXRDaGVjaygpID09IE9LKSB7CkBAIC0zMjMsMjcgKzMyOCwzMCBAQAogCiB9CiAKKwogZXh0ZXJuICJDIiB7CiAvLyBUaGlzIGlzIHRoZSBvbmx5IHN5bWJvbCB0aGF0IG5lZWRzIHRvIGJlIGV4cG9ydGVkCiBfX2F0dHJpYnV0ZV9fICgodmlzaWJpbGl0eSAoImRlZmF1bHQiKSkpCi1NZWRpYUV4dHJhY3Rvcjo6RXh0cmFjdG9yRGVmIEdFVEVYVFJBQ1RPUkRFRigpIHsKK0V4dHJhY3RvckRlZiBHRVRFWFRSQUNUT1JERUYoKSB7CiAgICAgcmV0dXJuIHsKLSAgICAgICAgTWVkaWFFeHRyYWN0b3I6OkVYVFJBQ1RPUkRFRl9WRVJTSU9OLAorICAgICAgICBFWFRSQUNUT1JERUZfVkVSU0lPTl9DVVJSRU5ULAogICAgICAgICBVVUlEKCJlZjZjY2EwYS1mOGEyLTQzZTYtYmE1Zi1kZmNkN2M5YTdlZjIiKSwKICAgICAgICAgMSwKICAgICAgICAgIk1JREkgRXh0cmFjdG9yIiwKLSAgICAgICAgW10oCi0gICAgICAgICAgICAgICAgRGF0YVNvdXJjZUJhc2UgKnNvdXJjZSwKKyAgICAgICAgeworICAgICAgICAgICAgLnYyID0gW10oCisgICAgICAgICAgICAgICAgQ0RhdGFTb3VyY2UgKnNvdXJjZSwKICAgICAgICAgICAgICAgICBmbG9hdCAqY29uZmlkZW5jZSwKICAgICAgICAgICAgICAgICB2b2lkICoqLAotICAgICAgICAgICAgICAgIE1lZGlhRXh0cmFjdG9yOjpGcmVlTWV0YUZ1bmMgKikgLT4gTWVkaWFFeHRyYWN0b3I6OkNyZWF0b3JGdW5jIHsKLSAgICAgICAgICAgIGlmIChTbmlmZk1pZGkoc291cmNlLCBjb25maWRlbmNlKSkgewotICAgICAgICAgICAgICAgIHJldHVybiBbXSgKLSAgICAgICAgICAgICAgICAgICAgICAgIERhdGFTb3VyY2VCYXNlICpzb3VyY2UsCi0gICAgICAgICAgICAgICAgICAgICAgICB2b2lkICopIC0+IE1lZGlhRXh0cmFjdG9yKiB7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBuZXcgTWlkaUV4dHJhY3Rvcihzb3VyY2UpO307CisgICAgICAgICAgICAgICAgRnJlZU1ldGFGdW5jICopIC0+IENyZWF0b3JGdW5jVjIgeworICAgICAgICAgICAgICAgIGlmIChTbmlmZk1pZGkoc291cmNlLCBjb25maWRlbmNlKSkgeworICAgICAgICAgICAgICAgICAgICByZXR1cm4gW10oCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ0RhdGFTb3VyY2UgKnNvdXJjZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICopIC0+IENNZWRpYUV4dHJhY3RvclYyKiB7CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gd3JhcFYyKG5ldyBNaWRpRXh0cmFjdG9yKHNvdXJjZSkpO307CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIHJldHVybiBOVUxMOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgICAgIH0KICAgICB9OwogfQpkaWZmIC0tZ2l0IGEvbWVkaWEvZXh0cmFjdG9ycy9taWRpL01pZGlFeHRyYWN0b3IuaCBiL21lZGlhL2V4dHJhY3RvcnMvbWlkaS9NaWRpRXh0cmFjdG9yLmgKaW5kZXggMjQ0ZGQwZi4uNDEyZDZlYiAxMDA2NDQKLS0tIGEvbWVkaWEvZXh0cmFjdG9ycy9taWRpL01pZGlFeHRyYWN0b3IuaAorKysgYi9tZWRpYS9leHRyYWN0b3JzL21pZGkvTWlkaUV4dHJhY3Rvci5oCkBAIC0xOCwxMSArMTgsMTIgQEAKICNkZWZpbmUgTUlESV9FWFRSQUNUT1JfSF8KIAogI2luY2x1ZGUgPG1lZGlhL0RhdGFTb3VyY2VCYXNlLmg+Ci0jaW5jbHVkZSA8bWVkaWEvTWVkaWFFeHRyYWN0b3IuaD4KKyNpbmNsdWRlIDxtZWRpYS9NZWRpYUV4dHJhY3RvclBsdWdpbkFwaS5oPgorI2luY2x1ZGUgPG1lZGlhL01lZGlhRXh0cmFjdG9yUGx1Z2luSGVscGVyLmg+CiAjaW5jbHVkZSA8bWVkaWEvc3RhZ2VmcmlnaHQvTWVkaWFCdWZmZXJCYXNlLmg+CiAjaW5jbHVkZSA8bWVkaWEvc3RhZ2VmcmlnaHQvTWVkaWFCdWZmZXJHcm91cC5oPgotI2luY2x1ZGUgPG1lZGlhL3N0YWdlZnJpZ2h0L01ldGFEYXRhQmFzZS5oPgogI2luY2x1ZGUgPG1lZGlhL01pZGlJb1dyYXBwZXIuaD4KKyNpbmNsdWRlIDxtZWRpYS9OZGtNZWRpYUZvcm1hdC5oPgogI2luY2x1ZGUgPHV0aWxzL1N0cmluZzguaD4KICNpbmNsdWRlIDxsaWJzb25pdm94L2Vhcy5oPgogCkBAIC0zMCw5ICszMSw5IEBACiAKIGNsYXNzIE1pZGlFbmdpbmUgewogcHVibGljOgotICAgIGV4cGxpY2l0IE1pZGlFbmdpbmUoRGF0YVNvdXJjZUJhc2UgKmRhdGFTb3VyY2UsCi0gICAgICAgICAgICBNZXRhRGF0YUJhc2UgKmZpbGVNZXRhZGF0YSwKLSAgICAgICAgICAgIE1ldGFEYXRhQmFzZSAqdHJhY2tNZXRhZGF0YSk7CisgICAgZXhwbGljaXQgTWlkaUVuZ2luZShDRGF0YVNvdXJjZSAqZGF0YVNvdXJjZSwKKyAgICAgICAgICAgIEFNZWRpYUZvcm1hdCAqZmlsZU1ldGFkYXRhLAorICAgICAgICAgICAgQU1lZGlhRm9ybWF0ICp0cmFja01ldGFkYXRhKTsKICAgICB+TWlkaUVuZ2luZSgpOwogCiAgICAgc3RhdHVzX3QgaW5pdENoZWNrKCk7CkBAIC01MCwyOCArNTEsMjggQEAKICAgICBib29sIG1Jc0luaXRpYWxpemVkOwogfTsKIAotY2xhc3MgTWlkaUV4dHJhY3RvciA6IHB1YmxpYyBNZWRpYUV4dHJhY3RvciB7CitjbGFzcyBNaWRpRXh0cmFjdG9yIDogcHVibGljIE1lZGlhRXh0cmFjdG9yUGx1Z2luSGVscGVyVjIgewogCiBwdWJsaWM6Ci0gICAgZXhwbGljaXQgTWlkaUV4dHJhY3RvcihEYXRhU291cmNlQmFzZSAqc291cmNlKTsKKyAgICBleHBsaWNpdCBNaWRpRXh0cmFjdG9yKENEYXRhU291cmNlICpzb3VyY2UpOwogCiAgICAgdmlydHVhbCBzaXplX3QgY291bnRUcmFja3MoKTsKLSAgICB2aXJ0dWFsIE1lZGlhVHJhY2sgKmdldFRyYWNrKHNpemVfdCBpbmRleCk7Ci0gICAgdmlydHVhbCBzdGF0dXNfdCBnZXRUcmFja01ldGFEYXRhKE1ldGFEYXRhQmFzZSYgbWV0YSwgc2l6ZV90IGluZGV4LCB1aW50MzJfdCBmbGFncyk7CisgICAgdmlydHVhbCBNZWRpYVRyYWNrSGVscGVyVjIgKmdldFRyYWNrKHNpemVfdCBpbmRleCk7CisgICAgdmlydHVhbCBtZWRpYV9zdGF0dXNfdCBnZXRUcmFja01ldGFEYXRhKEFNZWRpYUZvcm1hdCAqbWV0YSwgc2l6ZV90IGluZGV4LCB1aW50MzJfdCBmbGFncyk7CiAKLSAgICB2aXJ0dWFsIHN0YXR1c190IGdldE1ldGFEYXRhKE1ldGFEYXRhQmFzZSYgbWV0YSk7CisgICAgdmlydHVhbCBtZWRpYV9zdGF0dXNfdCBnZXRNZXRhRGF0YShBTWVkaWFGb3JtYXQgKm1ldGEpOwogICAgIHZpcnR1YWwgY29uc3QgY2hhciAqIG5hbWUoKSB7IHJldHVybiAiTWlkaUV4dHJhY3RvciI7IH0KIAogcHJvdGVjdGVkOgogICAgIHZpcnR1YWwgfk1pZGlFeHRyYWN0b3IoKTsKIAogcHJpdmF0ZToKLSAgICBEYXRhU291cmNlQmFzZSAqbURhdGFTb3VyY2U7CisgICAgQ0RhdGFTb3VyY2UgKm1EYXRhU291cmNlOwogICAgIHN0YXR1c190IG1Jbml0Q2hlY2s7Ci0gICAgTWV0YURhdGFCYXNlIG1GaWxlTWV0YWRhdGE7CisgICAgQU1lZGlhRm9ybWF0ICptRmlsZU1ldGFkYXRhOwogCiAgICAgLy8gVGhlcmUgaXMgb25seSBvbmUgdHJhY2sKLSAgICBNZXRhRGF0YUJhc2UgbVRyYWNrTWV0YWRhdGE7CisgICAgQU1lZGlhRm9ybWF0ICptVHJhY2tNZXRhZGF0YTsKIAogICAgIE1pZGlFbmdpbmUgKm1FbmdpbmU7CiAKQEAgLTg4LDcgKzg5LDcgQEAKIAogfTsKIAotYm9vbCBTbmlmZk1pZGkoRGF0YVNvdXJjZUJhc2UgKnNvdXJjZSwgZmxvYXQgKmNvbmZpZGVuY2UpOworYm9vbCBTbmlmZk1pZGkoQ0RhdGFTb3VyY2UgKnNvdXJjZSwgZmxvYXQgKmNvbmZpZGVuY2UpOwogCiB9ICAvLyBuYW1lc3BhY2UgYW5kcm9pZAogCmRpZmYgLS1naXQgYS9tZWRpYS9leHRyYWN0b3JzL21rdi9BbmRyb2lkLmJwIGIvbWVkaWEvZXh0cmFjdG9ycy9ta3YvQW5kcm9pZC5icAppbmRleCA2ODFmZDM1Li5hZTEwOGVjIDEwMDY0NAotLS0gYS9tZWRpYS9leHRyYWN0b3JzL21rdi9BbmRyb2lkLmJwCisrKyBiL21lZGlhL2V4dHJhY3RvcnMvbWt2L0FuZHJvaWQuYnAKQEAgLTEyLDYgKzEyLDcgQEAKICAgICBzaGFyZWRfbGliczogWwogICAgICAgICAibGlibG9nIiwKICAgICAgICAgImxpYm1lZGlhZXh0cmFjdG9yIiwKKyAgICAgICAgImxpYm1lZGlhbmRrIiwKICAgICBdLAogCiAgICAgc3RhdGljX2xpYnM6IFsKZGlmZiAtLWdpdCBhL21lZGlhL2V4dHJhY3RvcnMvbWt2L01hdHJvc2thRXh0cmFjdG9yLmNwcCBiL21lZGlhL2V4dHJhY3RvcnMvbWt2L01hdHJvc2thRXh0cmFjdG9yLmNwcAppbmRleCBkNjU3NTgyLi4xZmRhYzA1IDEwMDY0NAotLS0gYS9tZWRpYS9leHRyYWN0b3JzL21rdi9NYXRyb3NrYUV4dHJhY3Rvci5jcHAKKysrIGIvbWVkaWEvZXh0cmFjdG9ycy9ta3YvTWF0cm9za2FFeHRyYWN0b3IuY3BwCkBAIC0yMyw3ICsyMyw2IEBACiAKICNpbmNsdWRlIDxtZWRpYS9EYXRhU291cmNlQmFzZS5oPgogI2luY2x1ZGUgPG1lZGlhL0V4dHJhY3RvclV0aWxzLmg+Ci0jaW5jbHVkZSA8bWVkaWEvTWVkaWFUcmFjay5oPgogI2luY2x1ZGUgPG1lZGlhL3N0YWdlZnJpZ2h0L2ZvdW5kYXRpb24vQURlYnVnLmg+CiAjaW5jbHVkZSA8bWVkaWEvc3RhZ2VmcmlnaHQvZm91bmRhdGlvbi9BVXRpbHMuaD4KICNpbmNsdWRlIDxtZWRpYS9zdGFnZWZyaWdodC9mb3VuZGF0aW9uL0FCdWZmZXIuaD4KQEAgLTQ0LDcgKzQzLDcgQEAKIG5hbWVzcGFjZSBhbmRyb2lkIHsKIAogc3RydWN0IERhdGFTb3VyY2VCYXNlUmVhZGVyIDogcHVibGljIG1rdnBhcnNlcjo6SU1rdlJlYWRlciB7Ci0gICAgZXhwbGljaXQgRGF0YVNvdXJjZUJhc2VSZWFkZXIoRGF0YVNvdXJjZUJhc2UgKnNvdXJjZSkKKyAgICBleHBsaWNpdCBEYXRhU291cmNlQmFzZVJlYWRlcihEYXRhU291cmNlSGVscGVyICpzb3VyY2UpCiAgICAgICAgIDogbVNvdXJjZShzb3VyY2UpIHsKICAgICB9CiAKQEAgLTY4LDggKzY3LDEyIEBACiAgICAgdmlydHVhbCBpbnQgTGVuZ3RoKGxvbmcgbG9uZyogdG90YWwsIGxvbmcgbG9uZyogYXZhaWxhYmxlKSB7CiAgICAgICAgIG9mZjY0X3Qgc2l6ZTsKICAgICAgICAgaWYgKG1Tb3VyY2UtPmdldFNpemUoJnNpemUpICE9IE9LKSB7Ci0gICAgICAgICAgICAqdG90YWwgPSAtMTsKLSAgICAgICAgICAgICphdmFpbGFibGUgPSAobG9uZyBsb25nKSgoMXVsbCA8PCA2MykgLSAxKTsKKyAgICAgICAgICAgIGlmICh0b3RhbCkgeworICAgICAgICAgICAgICAgICp0b3RhbCA9IC0xOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKGF2YWlsYWJsZSkgeworICAgICAgICAgICAgICAgICphdmFpbGFibGUgPSAobG9uZyBsb25nKSgoMXVsbCA8PCA2MykgLSAxKTsKKyAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgcmV0dXJuIDA7CiAgICAgICAgIH0KQEAgLTg2LDcgKzg5LDcgQEAKICAgICB9CiAKIHByaXZhdGU6Ci0gICAgRGF0YVNvdXJjZUJhc2UgKm1Tb3VyY2U7CisgICAgRGF0YVNvdXJjZUhlbHBlciAqbVNvdXJjZTsKIAogICAgIERhdGFTb3VyY2VCYXNlUmVhZGVyKGNvbnN0IERhdGFTb3VyY2VCYXNlUmVhZGVyICYpOwogICAgIERhdGFTb3VyY2VCYXNlUmVhZGVyICZvcGVyYXRvcj0oY29uc3QgRGF0YVNvdXJjZUJhc2VSZWFkZXIgJik7CkBAIC0xMjQsMTUgKzEyNywxNSBAQAogICAgIEJsb2NrSXRlcmF0b3IgJm9wZXJhdG9yPShjb25zdCBCbG9ja0l0ZXJhdG9yICYpOwogfTsKIAotc3RydWN0IE1hdHJvc2thU291cmNlIDogcHVibGljIE1lZGlhVHJhY2sgeworc3RydWN0IE1hdHJvc2thU291cmNlIDogcHVibGljIE1lZGlhVHJhY2tIZWxwZXJWMiB7CiAgICAgTWF0cm9za2FTb3VyY2UoTWF0cm9za2FFeHRyYWN0b3IgKmV4dHJhY3Rvciwgc2l6ZV90IGluZGV4KTsKIAotICAgIHZpcnR1YWwgc3RhdHVzX3Qgc3RhcnQoTWV0YURhdGFCYXNlICpwYXJhbXMpOwotICAgIHZpcnR1YWwgc3RhdHVzX3Qgc3RvcCgpOworICAgIHZpcnR1YWwgbWVkaWFfc3RhdHVzX3Qgc3RhcnQoKTsKKyAgICB2aXJ0dWFsIG1lZGlhX3N0YXR1c190IHN0b3AoKTsKIAotICAgIHZpcnR1YWwgc3RhdHVzX3QgZ2V0Rm9ybWF0KE1ldGFEYXRhQmFzZSAmKTsKKyAgICB2aXJ0dWFsIG1lZGlhX3N0YXR1c190IGdldEZvcm1hdChBTWVkaWFGb3JtYXQgKik7CiAKLSAgICB2aXJ0dWFsIHN0YXR1c190IHJlYWQoCisgICAgdmlydHVhbCBtZWRpYV9zdGF0dXNfdCByZWFkKAogICAgICAgICAgICAgTWVkaWFCdWZmZXJCYXNlICoqYnVmZmVyLCBjb25zdCBSZWFkT3B0aW9ucyAqb3B0aW9ucyk7CiAKIHByb3RlY3RlZDoKQEAgLTE1OCw3ICsxNjEsNyBAQAogICAgIHN0YXR1c190IGFkdmFuY2UoKTsKIAogICAgIHN0YXR1c190IHNldFdlYm1CbG9ja0NyeXB0b0luZm8oTWVkaWFCdWZmZXJCYXNlICptYnVmKTsKLSAgICBzdGF0dXNfdCByZWFkQmxvY2soKTsKKyAgICBtZWRpYV9zdGF0dXNfdCByZWFkQmxvY2soKTsKICAgICB2b2lkIGNsZWFyUGVuZGluZ0ZyYW1lcygpOwogCiAgICAgTWF0cm9za2FTb3VyY2UoY29uc3QgTWF0cm9za2FTb3VyY2UgJik7CkBAIC0yMjIsNDMgKzIyNSwzMSBAQAogICAgICAgICAgICAgICAgICBtRXh0cmFjdG9yLT5tVHJhY2tzLml0ZW1BdChpbmRleCkubVRyYWNrTnVtLAogICAgICAgICAgICAgICAgICBpbmRleCksCiAgICAgICBtTkFMU2l6ZUxlbigtMSkgewotICAgIE1ldGFEYXRhQmFzZSAmbWV0YSA9IG1FeHRyYWN0b3ItPm1UcmFja3MuZWRpdEl0ZW1BdChpbmRleCkubU1ldGE7CisgICAgTWF0cm9za2FFeHRyYWN0b3I6OlRyYWNrSW5mbyAmdHJhY2tJbmZvID0gbUV4dHJhY3Rvci0+bVRyYWNrcy5lZGl0SXRlbUF0KGluZGV4KTsKKyAgICBBTWVkaWFGb3JtYXQgKm1ldGEgPSB0cmFja0luZm8ubU1ldGE7CiAKICAgICBjb25zdCBjaGFyICptaW1lOwotICAgIENIRUNLKG1ldGEuZmluZENTdHJpbmcoa0tleU1JTUVUeXBlLCAmbWltZSkpOworICAgIENIRUNLKEFNZWRpYUZvcm1hdF9nZXRTdHJpbmcobWV0YSwgQU1FRElBRk9STUFUX0tFWV9NSU1FLCAmbWltZSkpOwogCiAgICAgbUlzQXVkaW8gPSAhc3RybmNhc2VjbXAoImF1ZGlvLyIsIG1pbWUsIDYpOwogCiAgICAgaWYgKCFzdHJjYXNlY21wKG1pbWUsIE1FRElBX01JTUVUWVBFX1ZJREVPX0FWQykpIHsKICAgICAgICAgbVR5cGUgPSBBVkM7CiAKLSAgICAgICAgdWludDMyX3QgZHVtbXk7Ci0gICAgICAgIGNvbnN0IHVpbnQ4X3QgKmF2Y2M7Ci0gICAgICAgIHNpemVfdCBhdmNjU2l6ZTsKLSAgICAgICAgaW50MzJfdCBuYWxTaXplTGVuID0gMDsKLSAgICAgICAgaWYgKG1ldGEuZmluZEludDMyKGtLZXlOYWxMZW5ndGhTaXplLCAmbmFsU2l6ZUxlbikpIHsKLSAgICAgICAgICAgIGlmIChuYWxTaXplTGVuID49IDAgJiYgbmFsU2l6ZUxlbiA8PSA0KSB7Ci0gICAgICAgICAgICAgICAgbU5BTFNpemVMZW4gPSBuYWxTaXplTGVuOwotICAgICAgICAgICAgfQotICAgICAgICB9IGVsc2UgaWYgKG1ldGEuZmluZERhdGEoa0tleUFWQ0MsICZkdW1teSwgKGNvbnN0IHZvaWQgKiopJmF2Y2MsICZhdmNjU2l6ZSkKLSAgICAgICAgICAgICAgICAmJiBhdmNjU2l6ZSA+PSA1dSkgewotICAgICAgICAgICAgbU5BTFNpemVMZW4gPSAxICsgKGF2Y2NbNF0gJiAzKTsKLSAgICAgICAgICAgIEFMT0dWKCJtTkFMU2l6ZUxlbiA9ICV6ZCIsIG1OQUxTaXplTGVuKTsKKyAgICAgICAgaW50MzJfdCBuYWxTaXplTGVuID0gdHJhY2tJbmZvLm1OYWxMZW5ndGhTaXplOworICAgICAgICBpZiAobmFsU2l6ZUxlbiA+PSAwICYmIG5hbFNpemVMZW4gPD0gNCkgeworICAgICAgICAgICAgbU5BTFNpemVMZW4gPSBuYWxTaXplTGVuOwogICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgQUxPR0UoIk5vIG1OQUxTaXplTGVuIik7CisgICAgICAgICAgICBBTE9HRSgiTm8gQVZDIG1OQUxTaXplTGVuIik7CiAgICAgICAgIH0KICAgICB9IGVsc2UgaWYgKCFzdHJjYXNlY21wKG1pbWUsIE1FRElBX01JTUVUWVBFX1ZJREVPX0hFVkMpKSB7CiAgICAgICAgIG1UeXBlID0gSEVWQzsKIAotICAgICAgICB1aW50MzJfdCBkdW1teTsKLSAgICAgICAgY29uc3QgdWludDhfdCAqaHZjYzsKLSAgICAgICAgc2l6ZV90IGh2Y2NTaXplOwotICAgICAgICBpZiAobWV0YS5maW5kRGF0YShrS2V5SFZDQywgJmR1bW15LCAoY29uc3Qgdm9pZCAqKikmaHZjYywgJmh2Y2NTaXplKQotICAgICAgICAgICAgICAgICYmIGh2Y2NTaXplID49IDIydSkgewotICAgICAgICAgICAgbU5BTFNpemVMZW4gPSAxICsgKGh2Y2NbMTQrN10gJiAzKTsKLSAgICAgICAgICAgIEFMT0dWKCJtTkFMU2l6ZUxlbiA9ICV6dSIsIG1OQUxTaXplTGVuKTsKKyAgICAgICAgaW50MzJfdCBuYWxTaXplTGVuID0gdHJhY2tJbmZvLm1OYWxMZW5ndGhTaXplOworICAgICAgICBpZiAobmFsU2l6ZUxlbiA+PSAwICYmIG5hbFNpemVMZW4gPD0gNCkgeworICAgICAgICAgICAgbU5BTFNpemVMZW4gPSBuYWxTaXplTGVuOwogICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgQUxPR0UoIk5vIG1OQUxTaXplTGVuIik7CisgICAgICAgICAgICBBTE9HRSgiTm8gSEVWQyBtTkFMU2l6ZUxlbiIpOwogICAgICAgICB9CiAgICAgfSBlbHNlIGlmICghc3RyY2FzZWNtcChtaW1lLCBNRURJQV9NSU1FVFlQRV9BVURJT19BQUMpKSB7CiAgICAgICAgIG1UeXBlID0gQUFDOwpAQCAtMjY5LDI1ICsyNjAsMjQgQEAKICAgICBjbGVhclBlbmRpbmdGcmFtZXMoKTsKIH0KIAotc3RhdHVzX3QgTWF0cm9za2FTb3VyY2U6OnN0YXJ0KE1ldGFEYXRhQmFzZSAqIC8qIHBhcmFtcyAqLykgeworbWVkaWFfc3RhdHVzX3QgTWF0cm9za2FTb3VyY2U6OnN0YXJ0KCkgewogICAgIGlmIChtVHlwZSA9PSBBVkMgJiYgbU5BTFNpemVMZW4gPCAwKSB7Ci0gICAgICAgIHJldHVybiBFUlJPUl9NQUxGT1JNRUQ7CisgICAgICAgIHJldHVybiBBTUVESUFfRVJST1JfTUFMRk9STUVEOwogICAgIH0KIAogICAgIG1CbG9ja0l0ZXIucmVzZXQoKTsKIAotICAgIHJldHVybiBPSzsKKyAgICByZXR1cm4gQU1FRElBX09LOwogfQogCi1zdGF0dXNfdCBNYXRyb3NrYVNvdXJjZTo6c3RvcCgpIHsKK21lZGlhX3N0YXR1c190IE1hdHJvc2thU291cmNlOjpzdG9wKCkgewogICAgIGNsZWFyUGVuZGluZ0ZyYW1lcygpOwogCi0gICAgcmV0dXJuIE9LOworICAgIHJldHVybiBBTUVESUFfT0s7CiB9CiAKLXN0YXR1c190IE1hdHJvc2thU291cmNlOjpnZXRGb3JtYXQoTWV0YURhdGFCYXNlICZtZXRhKSB7Ci0gICAgbWV0YSA9IG1FeHRyYWN0b3ItPm1UcmFja3MuaXRlbUF0KG1UcmFja0luZGV4KS5tTWV0YTsKLSAgICByZXR1cm4gT0s7CittZWRpYV9zdGF0dXNfdCBNYXRyb3NrYVNvdXJjZTo6Z2V0Rm9ybWF0KEFNZWRpYUZvcm1hdCAqbWV0YSkgeworICAgIHJldHVybiBBTWVkaWFGb3JtYXRfY29weShtZXRhLCBtRXh0cmFjdG9yLT5tVHJhY2tzLml0ZW1BdChtVHJhY2tJbmRleCkubU1ldGEpOwogfQogCiAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLwpAQCAtNjA0LDExICs1OTQsMTEgQEAKICAgICBNZXRhRGF0YUJhc2UgJm1ldGEgPSBtYnVmLT5tZXRhX2RhdGEoKTsKICAgICBpZiAoZW5jcnlwdGVkKSB7CiAgICAgICAgIHVpbnQ4X3QgY3RyQ291bnRlclsxNl0gPSB7IDAgfTsKLSAgICAgICAgdWludDMyX3QgdHlwZTsKICAgICAgICAgY29uc3QgdWludDhfdCAqa2V5SWQ7CiAgICAgICAgIHNpemVfdCBrZXlJZFNpemU7Ci0gICAgICAgIGNvbnN0IE1ldGFEYXRhQmFzZSAmdHJhY2tNZXRhID0gbUV4dHJhY3Rvci0+bVRyYWNrcy5pdGVtQXQobVRyYWNrSW5kZXgpLm1NZXRhOwotICAgICAgICBDSEVDSyh0cmFja01ldGEuZmluZERhdGEoa0tleUNyeXB0b0tleSwgJnR5cGUsIChjb25zdCB2b2lkICoqKSZrZXlJZCwgJmtleUlkU2l6ZSkpOworICAgICAgICBBTWVkaWFGb3JtYXQgKnRyYWNrTWV0YSA9IG1FeHRyYWN0b3ItPm1UcmFja3MuaXRlbUF0KG1UcmFja0luZGV4KS5tTWV0YTsKKyAgICAgICAgQU1lZGlhRm9ybWF0X2dldEJ1ZmZlcih0cmFja01ldGEsIEFNRURJQUZPUk1BVF9LRVlfQ1JZUFRPX0tFWSwKKyAgICAgICAgICAgICAgICAodm9pZCoqKSZrZXlJZCwgJmtleUlkU2l6ZSk7CiAgICAgICAgIG1ldGEuc2V0RGF0YShrS2V5Q3J5cHRvS2V5LCAwLCBrZXlJZCwga2V5SWRTaXplKTsKICAgICAgICAgbWVtY3B5KGN0ckNvdW50ZXIsIGRhdGEgKyAxLCA4KTsKICAgICAgICAgbWV0YS5zZXREYXRhKGtLZXlDcnlwdG9JViwgMCwgY3RyQ291bnRlciwgMTYpOwpAQCAtNzExLDExICs3MDEsMTEgQEAKICAgICByZXR1cm4gT0s7CiB9CiAKLXN0YXR1c190IE1hdHJvc2thU291cmNlOjpyZWFkQmxvY2soKSB7CittZWRpYV9zdGF0dXNfdCBNYXRyb3NrYVNvdXJjZTo6cmVhZEJsb2NrKCkgewogICAgIENIRUNLKG1QZW5kaW5nRnJhbWVzLmVtcHR5KCkpOwogCiAgICAgaWYgKG1CbG9ja0l0ZXIuZW9zKCkpIHsKLSAgICAgICAgcmV0dXJuIEVSUk9SX0VORF9PRl9TVFJFQU07CisgICAgICAgIHJldHVybiBBTUVESUFfRVJST1JfRU5EX09GX1NUUkVBTTsKICAgICB9CiAKICAgICBjb25zdCBta3ZwYXJzZXI6OkJsb2NrICpibG9jayA9IG1CbG9ja0l0ZXIuYmxvY2soKTsKQEAgLTcyNyw3ICs3MTcsNyBAQAogICAgICAgICBjb25zdCBta3ZwYXJzZXI6OkJsb2NrOjpGcmFtZSAmZnJhbWUgPSBibG9jay0+R2V0RnJhbWUoaSk7CiAgICAgICAgIHNpemVfdCBsZW4gPSBmcmFtZS5sZW47CiAgICAgICAgIGlmIChTSVpFX01BWCAtIGxlbiA8IHRyYWNrSW5mby0+bUhlYWRlckxlbikgewotICAgICAgICAgICAgcmV0dXJuIEVSUk9SX01BTEZPUk1FRDsKKyAgICAgICAgICAgIHJldHVybiBBTUVESUFfRVJST1JfTUFMRk9STUVEOwogICAgICAgICB9CiAKICAgICAgICAgbGVuICs9IHRyYWNrSW5mby0+bUhlYWRlckxlbjsKQEAgLTc1Miw3ICs3NDIsNyBAQAogCiAgICAgICAgICAgICBtQmxvY2tJdGVyLmFkdmFuY2UoKTsKICAgICAgICAgICAgIG1idWYtPnJlbGVhc2UoKTsKLSAgICAgICAgICAgIHJldHVybiBlcnI7CisgICAgICAgICAgICByZXR1cm4gQU1FRElBX0VSUk9SX1VOS05PV047CiAgICAgICAgIH0KIAogICAgICAgICBtUGVuZGluZ0ZyYW1lcy5wdXNoX2JhY2sobWJ1Zik7CkBAIC03NjAsMTAgKzc1MCwxMCBAQAogCiAgICAgbUJsb2NrSXRlci5hZHZhbmNlKCk7CiAKLSAgICByZXR1cm4gT0s7CisgICAgcmV0dXJuIEFNRURJQV9PSzsKIH0KIAotc3RhdHVzX3QgTWF0cm9za2FTb3VyY2U6OnJlYWQoCittZWRpYV9zdGF0dXNfdCBNYXRyb3NrYVNvdXJjZTo6cmVhZCgKICAgICAgICAgTWVkaWFCdWZmZXJCYXNlICoqb3V0LCBjb25zdCBSZWFkT3B0aW9ucyAqb3B0aW9ucykgewogICAgICpvdXQgPSBOVUxMOwogCkBAIC03NzMsNyArNzYzLDcgQEAKICAgICBSZWFkT3B0aW9uczo6U2Vla01vZGUgbW9kZTsKICAgICBpZiAob3B0aW9ucyAmJiBvcHRpb25zLT5nZXRTZWVrVG8oJnNlZWtUaW1lVXMsICZtb2RlKSkgewogICAgICAgICBpZiAobW9kZSA9PSBSZWFkT3B0aW9uczo6U0VFS19GUkFNRV9JTkRFWCkgewotICAgICAgICAgICAgcmV0dXJuIEVSUk9SX1VOU1VQUE9SVEVEOworICAgICAgICAgICAgcmV0dXJuIEFNRURJQV9FUlJPUl9VTlNVUFBPUlRFRDsKICAgICAgICAgfQogCiAgICAgICAgIGlmICghbUV4dHJhY3Rvci0+aXNMaXZlU3RyZWFtaW5nKCkpIHsKQEAgLTc5MSw3ICs3ODEsNyBAQAogICAgIH0KIAogICAgIHdoaWxlIChtUGVuZGluZ0ZyYW1lcy5lbXB0eSgpKSB7Ci0gICAgICAgIHN0YXR1c190IGVyciA9IHJlYWRCbG9jaygpOworICAgICAgICBtZWRpYV9zdGF0dXNfdCBlcnIgPSByZWFkQmxvY2soKTsKIAogICAgICAgICBpZiAoZXJyICE9IE9LKSB7CiAgICAgICAgICAgICBjbGVhclBlbmRpbmdGcmFtZXMoKTsKQEAgLTgxMSw3ICs4MDEsNyBAQAogCiAgICAgICAgICpvdXQgPSBmcmFtZTsKIAotICAgICAgICByZXR1cm4gT0s7CisgICAgICAgIHJldHVybiBBTUVESUFfT0s7CiAgICAgfQogCiAgICAgLy8gRWFjaCBpbnB1dCBmcmFtZSBjb250YWlucyBvbmUgb3IgbW9yZSBOQUwgZnJhZ21lbnRzLCBlYWNoIGZyYWdtZW50CkBAIC04NTAsNyArODQwLDcgQEAKICAgICAgICAgICAgICAgICBmcmFtZS0+cmVsZWFzZSgpOwogICAgICAgICAgICAgICAgIGZyYW1lID0gTlVMTDsKIAotICAgICAgICAgICAgICAgIHJldHVybiBFUlJPUl9NQUxGT1JNRUQ7CisgICAgICAgICAgICAgICAgcmV0dXJuIEFNRURJQV9FUlJPUl9NQUxGT1JNRUQ7CiAgICAgICAgICAgICB9IGVsc2UgaWYgKHNyY09mZnNldCArIG1OQUxTaXplTGVuICsgTkFMc2l6ZSA+IHNyY1NpemUpIHsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0KQEAgLTg3OCw3ICs4NjgsNyBAQAogICAgICAgICAgICAgZnJhbWUtPnJlbGVhc2UoKTsKICAgICAgICAgICAgIGZyYW1lID0gTlVMTDsKIAotICAgICAgICAgICAgcmV0dXJuIEVSUk9SX01BTEZPUk1FRDsKKyAgICAgICAgICAgIHJldHVybiBBTUVESUFfRVJST1JfTUFMRk9STUVEOwogICAgICAgICB9CiAKICAgICAgICAgaWYgKHBhc3MgPT0gMCkgewpAQCAtOTE2LDEyICs5MDYsMTIgQEAKIAogICAgICpvdXQgPSBidWZmZXI7CiAKLSAgICByZXR1cm4gT0s7CisgICAgcmV0dXJuIEFNRURJQV9PSzsKIH0KIAogLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KIAotTWF0cm9za2FFeHRyYWN0b3I6Ok1hdHJvc2thRXh0cmFjdG9yKERhdGFTb3VyY2VCYXNlICpzb3VyY2UpCitNYXRyb3NrYUV4dHJhY3Rvcjo6TWF0cm9za2FFeHRyYWN0b3IoRGF0YVNvdXJjZUhlbHBlciAqc291cmNlKQogICAgIDogbURhdGFTb3VyY2Uoc291cmNlKSwKICAgICAgIG1SZWFkZXIobmV3IERhdGFTb3VyY2VCYXNlUmVhZGVyKG1EYXRhU291cmNlKSksCiAgICAgICBtU2VnbWVudChOVUxMKSwKQEAgLTk5NCwxMyArOTg0LDE1IEBACiAKICAgICBkZWxldGUgbVJlYWRlcjsKICAgICBtUmVhZGVyID0gTlVMTDsKKworICAgIGRlbGV0ZSBtRGF0YVNvdXJjZTsKIH0KIAogc2l6ZV90IE1hdHJvc2thRXh0cmFjdG9yOjpjb3VudFRyYWNrcygpIHsKICAgICByZXR1cm4gbVRyYWNrcy5zaXplKCk7CiB9CiAKLU1lZGlhVHJhY2sgKk1hdHJvc2thRXh0cmFjdG9yOjpnZXRUcmFjayhzaXplX3QgaW5kZXgpIHsKK01lZGlhVHJhY2tIZWxwZXJWMiAqTWF0cm9za2FFeHRyYWN0b3I6OmdldFRyYWNrKHNpemVfdCBpbmRleCkgewogICAgIGlmIChpbmRleCA+PSBtVHJhY2tzLnNpemUoKSkgewogICAgICAgICByZXR1cm4gTlVMTDsKICAgICB9CkBAIC0xMDA4LDExICsxMDAwLDExIEBACiAgICAgcmV0dXJuIG5ldyBNYXRyb3NrYVNvdXJjZSh0aGlzLCBpbmRleCk7CiB9CiAKLXN0YXR1c190IE1hdHJvc2thRXh0cmFjdG9yOjpnZXRUcmFja01ldGFEYXRhKAotICAgICAgICBNZXRhRGF0YUJhc2UgJm1ldGEsCittZWRpYV9zdGF0dXNfdCBNYXRyb3NrYUV4dHJhY3Rvcjo6Z2V0VHJhY2tNZXRhRGF0YSgKKyAgICAgICAgQU1lZGlhRm9ybWF0ICptZXRhLAogICAgICAgICBzaXplX3QgaW5kZXgsIHVpbnQzMl90IGZsYWdzKSB7CiAgICAgaWYgKGluZGV4ID49IG1UcmFja3Muc2l6ZSgpKSB7Ci0gICAgICAgIHJldHVybiBVTktOT1dOX0VSUk9SOworICAgICAgICByZXR1cm4gQU1FRElBX0VSUk9SX1VOS05PV047CiAgICAgfQogCiAgICAgaWYgKChmbGFncyAmIGtJbmNsdWRlRXh0ZW5zaXZlTWV0YURhdGEpICYmICFtRXh0cmFjdGVkVGh1bWJuYWlscwpAQCAtMTAyMSw4ICsxMDEzLDcgQEAKICAgICAgICAgbUV4dHJhY3RlZFRodW1ibmFpbHMgPSB0cnVlOwogICAgIH0KIAotICAgIG1ldGEgPSBtVHJhY2tzLml0ZW1BdChpbmRleCkubU1ldGE7Ci0gICAgcmV0dXJuIE9LOworICAgIHJldHVybiBBTWVkaWFGb3JtYXRfY29weShtZXRhLCBtVHJhY2tzLml0ZW1BdChpbmRleCkubU1ldGEpOwogfQogCiBib29sIE1hdHJvc2thRXh0cmFjdG9yOjppc0xpdmVTdHJlYW1pbmcoKSBjb25zdCB7CkBAIC0xMDU3LDcgKzEwNDgsNyBAQAogfQogCiBzdGF0aWMgdm9pZCBhZGRFU0RTRnJvbUNvZGVjUHJpdmF0ZSgKLSAgICAgICAgTWV0YURhdGFCYXNlICZtZXRhLAorICAgICAgICBBTWVkaWFGb3JtYXQgKm1ldGEsCiAgICAgICAgIGJvb2wgaXNBdWRpbywgY29uc3Qgdm9pZCAqcHJpdiwgc2l6ZV90IHByaXZTaXplKSB7CiAKICAgICBpbnQgcHJpdlNpemVCeXRlc1JlcXVpcmVkID0gYnl0ZXNGb3JTaXplKHByaXZTaXplKTsKQEAgLTEwODUsMTQgKzEwNzYsMTQgQEAKICAgICBzdG9yZVNpemUoZXNkcywgaWR4LCBwcml2U2l6ZSk7CiAgICAgbWVtY3B5KGVzZHMgKyBpZHgsIHByaXYsIHByaXZTaXplKTsKIAotICAgIG1ldGEuc2V0RGF0YShrS2V5RVNEUywgMCwgZXNkcywgZXNkc1NpemUpOworICAgIEFNZWRpYUZvcm1hdF9zZXRCdWZmZXIobWV0YSwgQU1FRElBRk9STUFUX0tFWV9DU0RfMCwgcHJpdiwgcHJpdlNpemUpOwogCiAgICAgZGVsZXRlW10gZXNkczsKICAgICBlc2RzID0gTlVMTDsKIH0KIAogc3RhdHVzX3QgYWRkVm9yYmlzQ29kZWNJbmZvKAotICAgICAgICBNZXRhRGF0YUJhc2UgJm1ldGEsCisgICAgICAgIEFNZWRpYUZvcm1hdCAqbWV0YSwKICAgICAgICAgY29uc3Qgdm9pZCAqX2NvZGVjUHJpdmF0ZSwgc2l6ZV90IGNvZGVjUHJpdmF0ZVNpemUpIHsKICAgICAvLyBoZXhkdW1wKF9jb2RlY1ByaXZhdGUsIGNvZGVjUHJpdmF0ZVNpemUpOwogCkBAIC0xMTUwLDcgKzExNDEsOCBAQAogICAgIGlmIChjb2RlY1ByaXZhdGVbb2Zmc2V0XSAhPSAweDAxKSB7CiAgICAgICAgIHJldHVybiBFUlJPUl9NQUxGT1JNRUQ7CiAgICAgfQotICAgIG1ldGEuc2V0RGF0YShrS2V5Vm9yYmlzSW5mbywgMCwgJmNvZGVjUHJpdmF0ZVtvZmZzZXRdLCBsZW4xKTsKKyAgICAvLyBmb3JtZXJseSBrS2V5Vm9yYmlzSW5mbworICAgIEFNZWRpYUZvcm1hdF9zZXRCdWZmZXIobWV0YSwgQU1FRElBRk9STUFUX0tFWV9DU0RfMCwgJmNvZGVjUHJpdmF0ZVtvZmZzZXRdLCBsZW4xKTsKIAogICAgIG9mZnNldCArPSBsZW4xOwogICAgIGlmIChjb2RlY1ByaXZhdGVbb2Zmc2V0XSAhPSAweDAzKSB7CkBAIC0xMTYyLDE5ICsxMTU0LDIwIEBACiAgICAgICAgIHJldHVybiBFUlJPUl9NQUxGT1JNRUQ7CiAgICAgfQogCi0gICAgbWV0YS5zZXREYXRhKAotICAgICAgICAgICAga0tleVZvcmJpc0Jvb2tzLCAwLCAmY29kZWNQcml2YXRlW29mZnNldF0sCi0gICAgICAgICAgICBjb2RlY1ByaXZhdGVTaXplIC0gb2Zmc2V0KTsKKyAgICAvLyBmb3JtZXJseSBrS2V5Vm9yYmlzQm9va3MKKyAgICBBTWVkaWFGb3JtYXRfc2V0QnVmZmVyKG1ldGEsIEFNRURJQUZPUk1BVF9LRVlfQ1NEXzEsCisgICAgICAgICAgICAmY29kZWNQcml2YXRlW29mZnNldF0sIGNvZGVjUHJpdmF0ZVNpemUgLSBvZmZzZXQpOwogCiAgICAgcmV0dXJuIE9LOwogfQogCiBzdGF0aWMgc3RhdHVzX3QgYWRkRmxhY01ldGFkYXRhKAotICAgICAgICBNZXRhRGF0YUJhc2UgJm1ldGEsCisgICAgICAgIEFNZWRpYUZvcm1hdCAqbWV0YSwKICAgICAgICAgY29uc3Qgdm9pZCAqY29kZWNQcml2YXRlLCBzaXplX3QgY29kZWNQcml2YXRlU2l6ZSkgewogICAgIC8vIGhleGR1bXAoY29kZWNQcml2YXRlLCBjb2RlY1ByaXZhdGVTaXplKTsKIAotICAgIG1ldGEuc2V0RGF0YShrS2V5RmxhY01ldGFkYXRhLCAwLCBjb2RlY1ByaXZhdGUsIGNvZGVjUHJpdmF0ZVNpemUpOworICAgIC8vIGZvcm1lcmx5IGtLZXlGbGFjTWV0YWRhdGEKKyAgICBBTWVkaWFGb3JtYXRfc2V0QnVmZmVyKG1ldGEsIEFNRURJQUZPUk1BVF9LRVlfQ1NEXzAsIGNvZGVjUHJpdmF0ZSwgY29kZWNQcml2YXRlU2l6ZSk7CiAKICAgICBpbnQzMl90IG1heElucHV0U2l6ZSA9IDY0IDw8IDEwOwogICAgIEZMQUNEZWNvZGVyICpmbGFjRGVjb2RlciA9IEZMQUNEZWNvZGVyOjpDcmVhdGUoKTsKQEAgLTExOTYsNyArMTE4OSw3IEBACiAgICAgICAgICAgICAgICAgKiBzdHJlYW1JbmZvLm1heF9ibG9ja3NpemUgKiBzdHJlYW1JbmZvLmNoYW5uZWxzOwogICAgICAgICB9CiAgICAgfQotICAgIG1ldGEuc2V0SW50MzIoa0tleU1heElucHV0U2l6ZSwgbWF4SW5wdXRTaXplKTsKKyAgICBBTWVkaWFGb3JtYXRfc2V0SW50MzIobWV0YSwgQU1FRElBRk9STUFUX0tFWV9NQVhfSU5QVVRfU0laRSwgbWF4SW5wdXRTaXplKTsKIAogICAgIGRlbGV0ZSBmbGFjRGVjb2RlcjsKICAgICByZXR1cm4gT0s7CkBAIC0xMjI1LDcgKzEyMTgsNyBAQAogICAgIH0KIAogICAgIC8vIE92ZXJyaWRlIHRoZSBzeW50aGVzaXplZCBuYWwgbGVuZ3RoIHNpemUsIHdoaWNoIGlzIGFyYml0cmFyeQotICAgIHRyYWNrSW5mby0+bU1ldGEuc2V0SW50MzIoa0tleU5hbExlbmd0aFNpemUsIDApOworICAgIHRyYWNrSW5mby0+bU5hbExlbmd0aFNpemUgPSAwOwogICAgIHJldHVybiBPSzsKIH0KIApAQCAtMTI0Nyw3ICsxMjQwLDcgQEAKIH0KIAogdm9pZCBNYXRyb3NrYUV4dHJhY3Rvcjo6Z2V0Q29sb3JJbmZvcm1hdGlvbigKLSAgICAgICAgY29uc3QgbWt2cGFyc2VyOjpWaWRlb1RyYWNrICp2dHJhY2ssIE1ldGFEYXRhQmFzZSAmbWV0YSkgeworICAgICAgICBjb25zdCBta3ZwYXJzZXI6OlZpZGVvVHJhY2sgKnZ0cmFjaywgQU1lZGlhRm9ybWF0ICptZXRhKSB7CiAgICAgY29uc3QgbWt2cGFyc2VyOjpDb2xvdXIgKmNvbG9yID0gdnRyYWNrLT5HZXRDb2xvdXIoKTsKICAgICBpZiAoY29sb3IgPT0gTlVMTCkgewogICAgICAgICByZXR1cm47CkBAIC0xMjU2LDcgKzEyNDksNyBAQAogICAgIC8vIENvbG9yIEFzcGVjdHMKICAgICB7CiAgICAgICAgIGludDMyX3QgcHJpbWFyaWVzID0gMjsgLy8gSVNPIHVuc3BlY2lmaWVkCi0gICAgICAgIGludDMyX3QgdHJhbnNmZXIgPSAyOyAvLyBJU08gdW5zcGVjaWZpZWQKKyAgICAgICAgaW50MzJfdCBpc290cmFuc2ZlciA9IDI7IC8vIElTTyB1bnNwZWNpZmllZAogICAgICAgICBpbnQzMl90IGNvZWZmcyA9IDI7IC8vIElTTyB1bnNwZWNpZmllZAogICAgICAgICBib29sIGZ1bGxSYW5nZSA9IGZhbHNlOyAvLyBkZWZhdWx0CiAgICAgICAgIGJvb2wgcmFuZ2VTcGVjaWZpZWQgPSBmYWxzZTsKQEAgLTEyNjUsNyArMTI1OCw3IEBACiAgICAgICAgICAgICBwcmltYXJpZXMgPSBjb2xvci0+cHJpbWFyaWVzOwogICAgICAgICB9CiAgICAgICAgIGlmIChpc1ZhbGlkSW50MzJDb2xvdXJWYWx1ZShjb2xvci0+dHJhbnNmZXJfY2hhcmFjdGVyaXN0aWNzKSkgewotICAgICAgICAgICAgdHJhbnNmZXIgPSBjb2xvci0+dHJhbnNmZXJfY2hhcmFjdGVyaXN0aWNzOworICAgICAgICAgICAgaXNvdHJhbnNmZXIgPSBjb2xvci0+dHJhbnNmZXJfY2hhcmFjdGVyaXN0aWNzOwogICAgICAgICB9CiAgICAgICAgIGlmIChpc1ZhbGlkSW50MzJDb2xvdXJWYWx1ZShjb2xvci0+bWF0cml4X2NvZWZmaWNpZW50cykpIHsKICAgICAgICAgICAgIGNvZWZmcyA9IGNvbG9yLT5tYXRyaXhfY29lZmZpY2llbnRzOwpAQCAtMTI3OCwxNCArMTI3MSwyMSBAQAogICAgICAgICAgICAgcmFuZ2VTcGVjaWZpZWQgPSB0cnVlOwogICAgICAgICB9CiAKLSAgICAgICAgQ29sb3JBc3BlY3RzIGFzcGVjdHM7Ci0gICAgICAgIENvbG9yVXRpbHM6OmNvbnZlcnRJc29Db2xvckFzcGVjdHNUb0NvZGVjQXNwZWN0cygKLSAgICAgICAgICAgICAgICBwcmltYXJpZXMsIHRyYW5zZmVyLCBjb2VmZnMsIGZ1bGxSYW5nZSwgYXNwZWN0cyk7Ci0gICAgICAgIG1ldGEuc2V0SW50MzIoa0tleUNvbG9yUHJpbWFyaWVzLCBhc3BlY3RzLm1QcmltYXJpZXMpOwotICAgICAgICBtZXRhLnNldEludDMyKGtLZXlUcmFuc2ZlckZ1bmN0aW9uLCBhc3BlY3RzLm1UcmFuc2Zlcik7Ci0gICAgICAgIG1ldGEuc2V0SW50MzIoa0tleUNvbG9yTWF0cml4LCBhc3BlY3RzLm1NYXRyaXhDb2VmZnMpOwotICAgICAgICBtZXRhLnNldEludDMyKAotICAgICAgICAgICAgICAgIGtLZXlDb2xvclJhbmdlLCByYW5nZVNwZWNpZmllZCA/IGFzcGVjdHMubVJhbmdlIDogQ29sb3JBc3BlY3RzOjpSYW5nZVVuc3BlY2lmaWVkKTsKKyAgICAgICAgaW50MzJfdCByYW5nZSA9IDA7CisgICAgICAgIGludDMyX3Qgc3RhbmRhcmQgPSAwOworICAgICAgICBpbnQzMl90IHRyYW5zZmVyID0gMDsKKyAgICAgICAgQ29sb3JVdGlsczo6Y29udmVydElzb0NvbG9yQXNwZWN0c1RvUGxhdGZvcm1Bc3BlY3RzKAorICAgICAgICAgICAgICAgIHByaW1hcmllcywgaXNvdHJhbnNmZXIsIGNvZWZmcywgZnVsbFJhbmdlLAorICAgICAgICAgICAgICAgICZyYW5nZSwgJnN0YW5kYXJkLCAmdHJhbnNmZXIpOworICAgICAgICBpZiAocmFuZ2UgIT0gMCkgeworICAgICAgICAgICAgQU1lZGlhRm9ybWF0X3NldEludDMyKG1ldGEsIEFNRURJQUZPUk1BVF9LRVlfQ09MT1JfUkFOR0UsIHJhbmdlKTsKKyAgICAgICAgfQorICAgICAgICBpZiAoc3RhbmRhcmQgIT0gMCkgeworICAgICAgICAgICAgQU1lZGlhRm9ybWF0X3NldEludDMyKG1ldGEsIEFNRURJQUZPUk1BVF9LRVlfQ09MT1JfU1RBTkRBUkQsIHN0YW5kYXJkKTsKKyAgICAgICAgfQorICAgICAgICBpZiAodHJhbnNmZXIgIT0gMCkgeworICAgICAgICAgICAgQU1lZGlhRm9ybWF0X3NldEludDMyKG1ldGEsIEFNRURJQUZPUk1BVF9LRVlfQ09MT1JfVFJBTlNGRVIsIHRyYW5zZmVyKTsKKyAgICAgICAgfQogICAgIH0KIAogICAgIC8vIEhEUiBTdGF0aWMgSW5mbwpAQCAtMTMyOSwyNiArMTMyOSwyOCBAQAogICAgICAgICAvLyBPbmx5IGFkdmVydGlzZSBzdGF0aWMgaW5mbyBpZiBhdCBsZWFzdCBvbmUgb2YgdGhlIGdyb3VwcyBoYXZlIGJlZW4gc3BlY2lmaWVkLgogICAgICAgICBpZiAobWVtY21wKCZpbmZvLCAmbnVsbEluZm8sIHNpemVvZihpbmZvKSkgIT0gMCkgewogICAgICAgICAgICAgaW5mby5tSUQgPSBIRFJTdGF0aWNJbmZvOjprVHlwZTE7Ci0gICAgICAgICAgICBtZXRhLnNldERhdGEoa0tleUhkclN0YXRpY0luZm8sICdoZHJTJywgJmluZm8sIHNpemVvZihpbmZvKSk7CisgICAgICAgICAgICBDb2xvclV0aWxzOjpzZXRIRFJTdGF0aWNJbmZvSW50b0FNZWRpYUZvcm1hdChpbmZvLCBtZXRhKTsKICAgICAgICAgfQogICAgIH0KIH0KIAogc3RhdHVzX3QgTWF0cm9za2FFeHRyYWN0b3I6OmluaXRUcmFja0luZm8oCi0gICAgICAgIGNvbnN0IG1rdnBhcnNlcjo6VHJhY2sgKnRyYWNrLCBNZXRhRGF0YUJhc2UgJm1ldGEsIFRyYWNrSW5mbyAqdHJhY2tJbmZvKSB7CisgICAgICAgIGNvbnN0IG1rdnBhcnNlcjo6VHJhY2sgKnRyYWNrLCBBTWVkaWFGb3JtYXQgKm1ldGEsIFRyYWNrSW5mbyAqdHJhY2tJbmZvKSB7CiAgICAgdHJhY2tJbmZvLT5tVHJhY2tOdW0gPSB0cmFjay0+R2V0TnVtYmVyKCk7CiAgICAgdHJhY2tJbmZvLT5tTWV0YSA9IG1ldGE7CiAgICAgdHJhY2tJbmZvLT5tRXh0cmFjdG9yID0gdGhpczsKICAgICB0cmFja0luZm8tPm1FbmNyeXB0ZWQgPSBmYWxzZTsKICAgICB0cmFja0luZm8tPm1IZWFkZXIgPSBOVUxMOwogICAgIHRyYWNrSW5mby0+bUhlYWRlckxlbiA9IDA7CisgICAgdHJhY2tJbmZvLT5tTmFsTGVuZ3RoU2l6ZSA9IC0xOwogCiAgICAgZm9yKHNpemVfdCBpID0gMDsgaSA8IHRyYWNrLT5HZXRDb250ZW50RW5jb2RpbmdDb3VudCgpOyBpKyspIHsKICAgICAgICAgY29uc3QgbWt2cGFyc2VyOjpDb250ZW50RW5jb2RpbmcgKmVuY29kaW5nID0gdHJhY2stPkdldENvbnRlbnRFbmNvZGluZ0J5SW5kZXgoaSk7CiAgICAgICAgIGZvcihzaXplX3QgaiA9IDA7IGogPCBlbmNvZGluZy0+R2V0RW5jcnlwdGlvbkNvdW50KCk7IGorKykgewogICAgICAgICAgICAgY29uc3QgbWt2cGFyc2VyOjpDb250ZW50RW5jb2Rpbmc6OkNvbnRlbnRFbmNyeXB0aW9uICplbmNyeXB0aW9uOwogICAgICAgICAgICAgZW5jcnlwdGlvbiA9IGVuY29kaW5nLT5HZXRFbmNyeXB0aW9uQnlJbmRleChqKTsKLSAgICAgICAgICAgIHRyYWNrSW5mby0+bU1ldGEuc2V0RGF0YShrS2V5Q3J5cHRvS2V5LCAwLCBlbmNyeXB0aW9uLT5rZXlfaWQsIGVuY3J5cHRpb24tPmtleV9pZF9sZW4pOworICAgICAgICAgICAgQU1lZGlhRm9ybWF0X3NldEJ1ZmZlcih0cmFja0luZm8tPm1NZXRhLAorICAgICAgICAgICAgICAgICAgICBBTUVESUFGT1JNQVRfS0VZX0NSWVBUT19LRVksIGVuY3J5cHRpb24tPmtleV9pZCwgZW5jcnlwdGlvbi0+a2V5X2lkX2xlbik7CiAgICAgICAgICAgICB0cmFja0luZm8tPm1FbmNyeXB0ZWQgPSB0cnVlOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KQEAgLTEzOTcsOSArMTM5OSwxMCBAQAogCiAgICAgICAgIGVudW0geyBWSURFT19UUkFDSyA9IDEsIEFVRElPX1RSQUNLID0gMiB9OwogCi0gICAgICAgIE1ldGFEYXRhQmFzZSBtZXRhOworICAgICAgICBBTWVkaWFGb3JtYXQgKm1ldGEgPSBBTWVkaWFGb3JtYXRfbmV3KCk7CiAKICAgICAgICAgc3RhdHVzX3QgZXJyID0gT0s7CisgICAgICAgIGludDMyX3QgbmFsU2l6ZSA9IC0xOwogCiAgICAgICAgIHN3aXRjaCAodHJhY2stPkdldFR5cGUoKSkgewogICAgICAgICAgICAgY2FzZSBWSURFT19UUkFDSzoKQEAgLTE0MDgsMjAgKzE0MTEsMjggQEAKICAgICAgICAgICAgICAgICAgICAgc3RhdGljX2Nhc3Q8Y29uc3QgbWt2cGFyc2VyOjpWaWRlb1RyYWNrICo+KHRyYWNrKTsKIAogICAgICAgICAgICAgICAgIGlmICghc3RyY21wKCJWX01QRUc0L0lTTy9BVkMiLCBjb2RlY0lEKSkgewotICAgICAgICAgICAgICAgICAgICBtZXRhLnNldENTdHJpbmcoa0tleU1JTUVUeXBlLCBNRURJQV9NSU1FVFlQRV9WSURFT19BVkMpOwotICAgICAgICAgICAgICAgICAgICBtZXRhLnNldERhdGEoa0tleUFWQ0MsIDAsIGNvZGVjUHJpdmF0ZSwgY29kZWNQcml2YXRlU2l6ZSk7CisgICAgICAgICAgICAgICAgICAgIEFNZWRpYUZvcm1hdF9zZXRTdHJpbmcobWV0YSwgQU1FRElBRk9STUFUX0tFWV9NSU1FLCBNRURJQV9NSU1FVFlQRV9WSURFT19BVkMpOworICAgICAgICAgICAgICAgICAgICBBTWVkaWFGb3JtYXRfc2V0QnVmZmVyKG1ldGEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBBTUVESUFGT1JNQVRfS0VZX0NTRF9BVkMsIGNvZGVjUHJpdmF0ZSwgY29kZWNQcml2YXRlU2l6ZSk7CisgICAgICAgICAgICAgICAgICAgIGlmIChjb2RlY1ByaXZhdGVTaXplID4gNCkgeworICAgICAgICAgICAgICAgICAgICAgICAgbmFsU2l6ZSA9IDEgKyAoY29kZWNQcml2YXRlWzRdICYgMyk7CisgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKCFzdHJjbXAoIlZfTVBFR0gvSVNPL0hFVkMiLCBjb2RlY0lEKSkgewotICAgICAgICAgICAgICAgICAgICBtZXRhLnNldENTdHJpbmcoa0tleU1JTUVUeXBlLCBNRURJQV9NSU1FVFlQRV9WSURFT19IRVZDKTsKKyAgICAgICAgICAgICAgICAgICAgQU1lZGlhRm9ybWF0X3NldFN0cmluZyhtZXRhLCBBTUVESUFGT1JNQVRfS0VZX01JTUUsIE1FRElBX01JTUVUWVBFX1ZJREVPX0hFVkMpOwogICAgICAgICAgICAgICAgICAgICBpZiAoY29kZWNQcml2YXRlU2l6ZSA+IDApIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIG1ldGEuc2V0RGF0YShrS2V5SFZDQywga1R5cGVIVkNDLCBjb2RlY1ByaXZhdGUsIGNvZGVjUHJpdmF0ZVNpemUpOworICAgICAgICAgICAgICAgICAgICAgICAgQU1lZGlhRm9ybWF0X3NldEJ1ZmZlcihtZXRhLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFNRURJQUZPUk1BVF9LRVlfQ1NEX0hFVkMsIGNvZGVjUHJpdmF0ZSwgY29kZWNQcml2YXRlU2l6ZSk7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoY29kZWNQcml2YXRlU2l6ZSA+IDE0ICsgNykgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbFNpemUgPSAxICsgKGNvZGVjUHJpdmF0ZVsxNCArIDddICYgMyk7CisgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICAgICBBTE9HVygiSEVWQyBpcyBkZXRlY3RlZCwgYnV0IGRvZXMgbm90IGhhdmUgY29uZmlndXJhdGlvbi4iKTsKICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgfSBlbHNlIGlmICghc3RyY21wKCJWX01QRUc0L0lTTy9BU1AiLCBjb2RlY0lEKSkgewogICAgICAgICAgICAgICAgICAgICBpZiAoY29kZWNQcml2YXRlU2l6ZSA+IDApIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIG1ldGEuc2V0Q1N0cmluZygKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga0tleU1JTUVUeXBlLCBNRURJQV9NSU1FVFlQRV9WSURFT19NUEVHNCk7CisgICAgICAgICAgICAgICAgICAgICAgICBBTWVkaWFGb3JtYXRfc2V0U3RyaW5nKG1ldGEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFNRURJQUZPUk1BVF9LRVlfTUlNRSwgTUVESUFfTUlNRVRZUEVfVklERU9fTVBFRzQpOwogICAgICAgICAgICAgICAgICAgICAgICAgYWRkRVNEU0Zyb21Db2RlY1ByaXZhdGUoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1ldGEsIGZhbHNlLCBjb2RlY1ByaXZhdGUsIGNvZGVjUHJpdmF0ZVNpemUpOwogICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewpAQCAtMTQzMCwxNSArMTQ0MSwxNCBAQAogICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKCFzdHJjbXAoIlZfVlA4IiwgY29kZWNJRCkpIHsKLSAgICAgICAgICAgICAgICAgICAgbWV0YS5zZXRDU3RyaW5nKGtLZXlNSU1FVHlwZSwgTUVESUFfTUlNRVRZUEVfVklERU9fVlA4KTsKKyAgICAgICAgICAgICAgICAgICAgQU1lZGlhRm9ybWF0X3NldFN0cmluZyhtZXRhLCBBTUVESUFGT1JNQVRfS0VZX01JTUUsIE1FRElBX01JTUVUWVBFX1ZJREVPX1ZQOCk7CiAgICAgICAgICAgICAgICAgfSBlbHNlIGlmICghc3RyY21wKCJWX1ZQOSIsIGNvZGVjSUQpKSB7Ci0gICAgICAgICAgICAgICAgICAgIG1ldGEuc2V0Q1N0cmluZyhrS2V5TUlNRVR5cGUsIE1FRElBX01JTUVUWVBFX1ZJREVPX1ZQOSk7CisgICAgICAgICAgICAgICAgICAgIEFNZWRpYUZvcm1hdF9zZXRTdHJpbmcobWV0YSwgQU1FRElBRk9STUFUX0tFWV9NSU1FLCBNRURJQV9NSU1FVFlQRV9WSURFT19WUDkpOwogICAgICAgICAgICAgICAgICAgICBpZiAoY29kZWNQcml2YXRlU2l6ZSA+IDApIHsKICAgICAgICAgICAgICAgICAgICAgICAvLyAnY3NkLTAnIGZvciBWUDkgaXMgdGhlIEJsb2Igb2YgQ29kZWMgUHJpdmF0ZSBkYXRhIGFzCiAgICAgICAgICAgICAgICAgICAgICAgLy8gc3BlY2lmaWVkIGluIGh0dHA6Ly93d3cud2VibXByb2plY3Qub3JnL3ZwOS9wcm9maWxlcy8uCi0gICAgICAgICAgICAgICAgICAgICAgICBtZXRhLnNldERhdGEoCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrS2V5VnA5Q29kZWNQcml2YXRlLCAwLCBjb2RlY1ByaXZhdGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2RlY1ByaXZhdGVTaXplKTsKKyAgICAgICAgICAgICAgICAgICAgICBBTWVkaWFGb3JtYXRfc2V0QnVmZmVyKG1ldGEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFNRURJQUZPUk1BVF9LRVlfQ1NEXzAsIGNvZGVjUHJpdmF0ZSwgY29kZWNQcml2YXRlU2l6ZSk7CiAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgICBBTE9HVygiJXMgaXMgbm90IHN1cHBvcnRlZC4iLCBjb2RlY0lEKTsKQEAgLTE0NTUsOCArMTQ2NSw4IEBACiAgICAgICAgICAgICAgICAgICAgIEFMT0dXKCJ0cmFjayBoZWlnaHQgZXhjZWVkcyBpbnQzMl90LCAlbGxkIiwgaGVpZ2h0KTsKICAgICAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIG1ldGEuc2V0SW50MzIoa0tleVdpZHRoLCAoaW50MzJfdCl3aWR0aCk7Ci0gICAgICAgICAgICAgICAgbWV0YS5zZXRJbnQzMihrS2V5SGVpZ2h0LCAoaW50MzJfdCloZWlnaHQpOworICAgICAgICAgICAgICAgIEFNZWRpYUZvcm1hdF9zZXRJbnQzMihtZXRhLCBBTUVESUFGT1JNQVRfS0VZX1dJRFRILCAoaW50MzJfdCl3aWR0aCk7CisgICAgICAgICAgICAgICAgQU1lZGlhRm9ybWF0X3NldEludDMyKG1ldGEsIEFNRURJQUZPUk1BVF9LRVlfSEVJR0hULCAoaW50MzJfdCloZWlnaHQpOwogCiAgICAgICAgICAgICAgICAgLy8gc2V0dGluZyBkaXNwbGF5IHdpZHRoL2hlaWdodCBpcyBvcHRpb25hbAogICAgICAgICAgICAgICAgIGNvbnN0IGxvbmcgbG9uZyBkaXNwbGF5VW5pdCA9IHZ0cmFjay0+R2V0RGlzcGxheVVuaXQoKTsKQEAgLTE0NjYsOCArMTQ3NiwxMCBAQAogICAgICAgICAgICAgICAgICAgICAgICAgJiYgZGlzcGxheUhlaWdodCA+IDAgJiYgZGlzcGxheUhlaWdodCA8PSBJTlQzMl9NQVgpIHsKICAgICAgICAgICAgICAgICAgICAgc3dpdGNoIChkaXNwbGF5VW5pdCkgewogICAgICAgICAgICAgICAgICAgICBjYXNlIDA6IC8vIHBpeGVscwotICAgICAgICAgICAgICAgICAgICAgICAgbWV0YS5zZXRJbnQzMihrS2V5RGlzcGxheVdpZHRoLCAoaW50MzJfdClkaXNwbGF5V2lkdGgpOwotICAgICAgICAgICAgICAgICAgICAgICAgbWV0YS5zZXRJbnQzMihrS2V5RGlzcGxheUhlaWdodCwgKGludDMyX3QpZGlzcGxheUhlaWdodCk7CisgICAgICAgICAgICAgICAgICAgICAgICBBTWVkaWFGb3JtYXRfc2V0SW50MzIobWV0YSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQU1FRElBRk9STUFUX0tFWV9ESVNQTEFZX1dJRFRILCAoaW50MzJfdClkaXNwbGF5V2lkdGgpOworICAgICAgICAgICAgICAgICAgICAgICAgQU1lZGlhRm9ybWF0X3NldEludDMyKG1ldGEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFNRURJQUZPUk1BVF9LRVlfRElTUExBWV9IRUlHSFQsIChpbnQzMl90KWRpc3BsYXlIZWlnaHQpOwogICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgIGNhc2UgMTogLy8gY2VudGltZXRlcnMKICAgICAgICAgICAgICAgICAgICAgY2FzZSAyOiAvLyBpbmNoZXMKQEAgLTE0ODEsOCArMTQ5MywxMCBAQAogICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgbG9uZyBsb25nIGNvbXB1dGVkSGVpZ2h0ID0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RkOjptYXgoaGVpZ2h0LCB3aWR0aCAqIGRpc3BsYXlIZWlnaHQgLyBkaXNwbGF5V2lkdGgpOwogICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNvbXB1dGVkV2lkdGggPD0gSU5UMzJfTUFYICYmIGNvbXB1dGVkSGVpZ2h0IDw9IElOVDMyX01BWCkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1ldGEuc2V0SW50MzIoa0tleURpc3BsYXlXaWR0aCwgKGludDMyX3QpY29tcHV0ZWRXaWR0aCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgbWV0YS5zZXRJbnQzMihrS2V5RGlzcGxheUhlaWdodCwgKGludDMyX3QpY29tcHV0ZWRIZWlnaHQpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFNZWRpYUZvcm1hdF9zZXRJbnQzMihtZXRhLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQU1FRElBRk9STUFUX0tFWV9ESVNQTEFZX1dJRFRILCAoaW50MzJfdCljb21wdXRlZFdpZHRoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBBTWVkaWFGb3JtYXRfc2V0SW50MzIobWV0YSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFNRURJQUZPUk1BVF9LRVlfRElTUExBWV9IRUlHSFQsIChpbnQzMl90KWNvbXB1dGVkSGVpZ2h0KTsKICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICB9CkBAIC0xNTAyLDM0ICsxNTE2LDM5IEBACiAgICAgICAgICAgICAgICAgICAgIHN0YXRpY19jYXN0PGNvbnN0IG1rdnBhcnNlcjo6QXVkaW9UcmFjayAqPih0cmFjayk7CiAKICAgICAgICAgICAgICAgICBpZiAoIXN0cmNtcCgiQV9BQUMiLCBjb2RlY0lEKSkgewotICAgICAgICAgICAgICAgICAgICBtZXRhLnNldENTdHJpbmcoa0tleU1JTUVUeXBlLCBNRURJQV9NSU1FVFlQRV9BVURJT19BQUMpOworICAgICAgICAgICAgICAgICAgICBBTWVkaWFGb3JtYXRfc2V0U3RyaW5nKG1ldGEsIEFNRURJQUZPUk1BVF9LRVlfTUlNRSwgTUVESUFfTUlNRVRZUEVfQVVESU9fQUFDKTsKICAgICAgICAgICAgICAgICAgICAgQ0hFQ0soY29kZWNQcml2YXRlU2l6ZSA+PSAyKTsKIAogICAgICAgICAgICAgICAgICAgICBhZGRFU0RTRnJvbUNvZGVjUHJpdmF0ZSgKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXRhLCB0cnVlLCBjb2RlY1ByaXZhdGUsIGNvZGVjUHJpdmF0ZVNpemUpOwogICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoIXN0cmNtcCgiQV9WT1JCSVMiLCBjb2RlY0lEKSkgewotICAgICAgICAgICAgICAgICAgICBtZXRhLnNldENTdHJpbmcoa0tleU1JTUVUeXBlLCBNRURJQV9NSU1FVFlQRV9BVURJT19WT1JCSVMpOworICAgICAgICAgICAgICAgICAgICBBTWVkaWFGb3JtYXRfc2V0U3RyaW5nKG1ldGEsIEFNRURJQUZPUk1BVF9LRVlfTUlNRSwgTUVESUFfTUlNRVRZUEVfQVVESU9fVk9SQklTKTsKIAogICAgICAgICAgICAgICAgICAgICBlcnIgPSBhZGRWb3JiaXNDb2RlY0luZm8oCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWV0YSwgY29kZWNQcml2YXRlLCBjb2RlY1ByaXZhdGVTaXplKTsKICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKCFzdHJjbXAoIkFfT1BVUyIsIGNvZGVjSUQpKSB7Ci0gICAgICAgICAgICAgICAgICAgIG1ldGEuc2V0Q1N0cmluZyhrS2V5TUlNRVR5cGUsIE1FRElBX01JTUVUWVBFX0FVRElPX09QVVMpOwotICAgICAgICAgICAgICAgICAgICBtZXRhLnNldERhdGEoa0tleU9wdXNIZWFkZXIsIDAsIGNvZGVjUHJpdmF0ZSwgY29kZWNQcml2YXRlU2l6ZSk7Ci0gICAgICAgICAgICAgICAgICAgIG1ldGEuc2V0SW50NjQoa0tleU9wdXNDb2RlY0RlbGF5LCB0cmFjay0+R2V0Q29kZWNEZWxheSgpKTsKLSAgICAgICAgICAgICAgICAgICAgbWV0YS5zZXRJbnQ2NChrS2V5T3B1c1NlZWtQcmVSb2xsLCB0cmFjay0+R2V0U2Vla1ByZVJvbGwoKSk7CisgICAgICAgICAgICAgICAgICAgIEFNZWRpYUZvcm1hdF9zZXRTdHJpbmcobWV0YSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBBTUVESUFGT1JNQVRfS0VZX01JTUUsIE1FRElBX01JTUVUWVBFX0FVRElPX09QVVMpOworICAgICAgICAgICAgICAgICAgICBBTWVkaWFGb3JtYXRfc2V0QnVmZmVyKG1ldGEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgQU1FRElBRk9STUFUX0tFWV9DU0RfMCwgY29kZWNQcml2YXRlLCBjb2RlY1ByaXZhdGVTaXplKTsKKyAgICAgICAgICAgICAgICAgICAgaW50NjRfdCBjb2RlY0RlbGF5ID0gdHJhY2stPkdldENvZGVjRGVsYXkoKTsKKyAgICAgICAgICAgICAgICAgICAgQU1lZGlhRm9ybWF0X3NldEJ1ZmZlcihtZXRhLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFNRURJQUZPUk1BVF9LRVlfQ1NEXzEsICZjb2RlY0RlbGF5LCBzaXplb2YoY29kZWNEZWxheSkpOwogICAgICAgICAgICAgICAgICAgICBtU2Vla1ByZVJvbGxOcyA9IHRyYWNrLT5HZXRTZWVrUHJlUm9sbCgpOworICAgICAgICAgICAgICAgICAgICBBTWVkaWFGb3JtYXRfc2V0QnVmZmVyKG1ldGEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgQU1FRElBRk9STUFUX0tFWV9DU0RfMiwgJm1TZWVrUHJlUm9sbE5zLCBzaXplb2YobVNlZWtQcmVSb2xsTnMpKTsKICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKCFzdHJjbXAoIkFfTVBFRy9MMyIsIGNvZGVjSUQpKSB7Ci0gICAgICAgICAgICAgICAgICAgIG1ldGEuc2V0Q1N0cmluZyhrS2V5TUlNRVR5cGUsIE1FRElBX01JTUVUWVBFX0FVRElPX01QRUcpOworICAgICAgICAgICAgICAgICAgICBBTWVkaWFGb3JtYXRfc2V0U3RyaW5nKG1ldGEsIEFNRURJQUZPUk1BVF9LRVlfTUlNRSwgTUVESUFfTUlNRVRZUEVfQVVESU9fTVBFRyk7CiAgICAgICAgICAgICAgICAgfSBlbHNlIGlmICghc3RyY21wKCJBX0ZMQUMiLCBjb2RlY0lEKSkgewotICAgICAgICAgICAgICAgICAgICBtZXRhLnNldENTdHJpbmcoa0tleU1JTUVUeXBlLCBNRURJQV9NSU1FVFlQRV9BVURJT19GTEFDKTsKKyAgICAgICAgICAgICAgICAgICAgQU1lZGlhRm9ybWF0X3NldFN0cmluZyhtZXRhLCBBTUVESUFGT1JNQVRfS0VZX01JTUUsIE1FRElBX01JTUVUWVBFX0FVRElPX0ZMQUMpOwogICAgICAgICAgICAgICAgICAgICBlcnIgPSBhZGRGbGFjTWV0YWRhdGEobWV0YSwgY29kZWNQcml2YXRlLCBjb2RlY1ByaXZhdGVTaXplKTsKICAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgICBBTE9HVygiJXMgaXMgbm90IHN1cHBvcnRlZC4iLCBjb2RlY0lEKTsKICAgICAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICAgICAgfQogCi0gICAgICAgICAgICAgICAgbWV0YS5zZXRJbnQzMihrS2V5U2FtcGxlUmF0ZSwgYXRyYWNrLT5HZXRTYW1wbGluZ1JhdGUoKSk7Ci0gICAgICAgICAgICAgICAgbWV0YS5zZXRJbnQzMihrS2V5Q2hhbm5lbENvdW50LCBhdHJhY2stPkdldENoYW5uZWxzKCkpOworICAgICAgICAgICAgICAgIEFNZWRpYUZvcm1hdF9zZXRJbnQzMihtZXRhLCBBTUVESUFGT1JNQVRfS0VZX1NBTVBMRV9SQVRFLCBhdHJhY2stPkdldFNhbXBsaW5nUmF0ZSgpKTsKKyAgICAgICAgICAgICAgICBBTWVkaWFGb3JtYXRfc2V0SW50MzIobWV0YSwgQU1FRElBRk9STUFUX0tFWV9DSEFOTkVMX0NPVU5ULCBhdHJhY2stPkdldENoYW5uZWxzKCkpOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQogCkBAIC0xNTQyLDcgKzE1NjEsNyBAQAogICAgICAgICAgICBjaGFyIGxhbmdbNF07CiAgICAgICAgICAgIHN0cm5jcHkobGFuZywgbGFuZ3VhZ2UsIDMpOwogICAgICAgICAgICBsYW5nWzNdID0gJ1wwJzsKLSAgICAgICAgICAgbWV0YS5zZXRDU3RyaW5nKGtLZXlNZWRpYUxhbmd1YWdlLCBsYW5nKTsKKyAgICAgICAgICAgQU1lZGlhRm9ybWF0X3NldFN0cmluZyhtZXRhLCBBTUVESUFGT1JNQVRfS0VZX0xBTkdVQUdFLCBsYW5nKTsKICAgICAgICAgfQogCiAgICAgICAgIGlmIChlcnIgIT0gT0spIHsKQEAgLTE1NTEsMTIgKzE1NzAsMTMgQEAKICAgICAgICAgfQogCiAgICAgICAgIGxvbmcgbG9uZyBkdXJhdGlvbk5zID0gbVNlZ21lbnQtPkdldER1cmF0aW9uKCk7Ci0gICAgICAgIG1ldGEuc2V0SW50NjQoa0tleUR1cmF0aW9uLCAoZHVyYXRpb25OcyArIDUwMCkgLyAxMDAwKTsKKyAgICAgICAgQU1lZGlhRm9ybWF0X3NldEludDY0KG1ldGEsIEFNRURJQUZPUk1BVF9LRVlfRFVSQVRJT04sIChkdXJhdGlvbk5zICsgNTAwKSAvIDEwMDApOwogCiAgICAgICAgIG1UcmFja3MucHVzaCgpOwogICAgICAgICBzaXplX3QgbiA9IG1UcmFja3Muc2l6ZSgpIC0gMTsKICAgICAgICAgVHJhY2tJbmZvICp0cmFja0luZm8gPSAmbVRyYWNrcy5lZGl0SXRlbUF0KG4pOwogICAgICAgICBpbml0VHJhY2tJbmZvKHRyYWNrLCBtZXRhLCB0cmFja0luZm8pOworICAgICAgICB0cmFja0luZm8tPm1OYWxMZW5ndGhTaXplID0gbmFsU2l6ZTsKIAogICAgICAgICBpZiAoIXN0cmNtcCgiVl9NUEVHNC9JU08vQVZDIiwgY29kZWNJRCkgJiYgY29kZWNQcml2YXRlU2l6ZSA9PSAwKSB7CiAgICAgICAgICAgICAvLyBBdHRlbXB0IHRvIHJlY292ZXIgZnJvbSBBVkMgdHJhY2sgd2l0aG91dCBjb2RlYyBwcml2YXRlIGRhdGEKQEAgLTE1NzMsNyArMTU5Myw3IEBACiAgICAgICAgIFRyYWNrSW5mbyAqaW5mbyA9ICZtVHJhY2tzLmVkaXRJdGVtQXQoaSk7CiAKICAgICAgICAgY29uc3QgY2hhciAqbWltZTsKLSAgICAgICAgQ0hFQ0soaW5mby0+bU1ldGEuZmluZENTdHJpbmcoa0tleU1JTUVUeXBlLCAmbWltZSkpOworICAgICAgICBDSEVDSyhBTWVkaWFGb3JtYXRfZ2V0U3RyaW5nKGluZm8tPm1NZXRhLCBBTUVESUFGT1JNQVRfS0VZX01JTUUsICZtaW1lKSk7CiAKICAgICAgICAgaWYgKHN0cm5jYXNlY21wKG1pbWUsICJ2aWRlby8iLCA2KSkgewogICAgICAgICAgICAgY29udGludWU7CkBAIC0xNTk5LDE2ICsxNjE5LDE2IEBACiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBpdGVyLmFkdmFuY2UoKTsKICAgICAgICAgfQotICAgICAgICBpbmZvLT5tTWV0YS5zZXRJbnQ2NChrS2V5VGh1bWJuYWlsVGltZSwgdGh1bWJuYWlsVGltZVVzKTsKKyAgICAgICAgQU1lZGlhRm9ybWF0X3NldEludDY0KGluZm8tPm1NZXRhLAorICAgICAgICAgICAgICAgIEFNRURJQUZPUk1BVF9LRVlfVEhVTUJOQUlMX1RJTUUsIHRodW1ibmFpbFRpbWVVcyk7CiAgICAgfQogfQogCi1zdGF0dXNfdCBNYXRyb3NrYUV4dHJhY3Rvcjo6Z2V0TWV0YURhdGEoTWV0YURhdGFCYXNlICZtZXRhKSB7Ci0gICAgbWV0YS5zZXRDU3RyaW5nKAotICAgICAgICAgICAga0tleU1JTUVUeXBlLAotICAgICAgICAgICAgbUlzV2VibSA/ICJ2aWRlby93ZWJtIiA6IE1FRElBX01JTUVUWVBFX0NPTlRBSU5FUl9NQVRST1NLQSk7CittZWRpYV9zdGF0dXNfdCBNYXRyb3NrYUV4dHJhY3Rvcjo6Z2V0TWV0YURhdGEoQU1lZGlhRm9ybWF0ICptZXRhKSB7CisgICAgQU1lZGlhRm9ybWF0X3NldFN0cmluZyhtZXRhLAorICAgICAgICAgICAgQU1FRElBRk9STUFUX0tFWV9NSU1FLCBtSXNXZWJtID8gInZpZGVvL3dlYm0iIDogTUVESUFfTUlNRVRZUEVfQ09OVEFJTkVSX01BVFJPU0tBKTsKIAotICAgIHJldHVybiBPSzsKKyAgICByZXR1cm4gQU1FRElBX09LOwogfQogCiB1aW50MzJfdCBNYXRyb3NrYUV4dHJhY3Rvcjo6ZmxhZ3MoKSBjb25zdCB7CkBAIC0xNjIxLDcgKzE2NDEsNyBAQAogfQogCiBib29sIFNuaWZmTWF0cm9za2EoCi0gICAgICAgIERhdGFTb3VyY2VCYXNlICpzb3VyY2UsIGZsb2F0ICpjb25maWRlbmNlKSB7CisgICAgICAgIERhdGFTb3VyY2VIZWxwZXIgKnNvdXJjZSwgZmxvYXQgKmNvbmZpZGVuY2UpIHsKICAgICBEYXRhU291cmNlQmFzZVJlYWRlciByZWFkZXIoc291cmNlKTsKICAgICBta3ZwYXJzZXI6OkVCTUxIZWFkZXIgZWJtbEhlYWRlcjsKICAgICBsb25nIGxvbmcgcG9zOwpAQCAtMTYzOCwyNCArMTY1OCwyNyBAQAogZXh0ZXJuICJDIiB7CiAvLyBUaGlzIGlzIHRoZSBvbmx5IHN5bWJvbCB0aGF0IG5lZWRzIHRvIGJlIGV4cG9ydGVkCiBfX2F0dHJpYnV0ZV9fICgodmlzaWJpbGl0eSAoImRlZmF1bHQiKSkpCi1NZWRpYUV4dHJhY3Rvcjo6RXh0cmFjdG9yRGVmIEdFVEVYVFJBQ1RPUkRFRigpIHsKK0V4dHJhY3RvckRlZiBHRVRFWFRSQUNUT1JERUYoKSB7CiAgICAgcmV0dXJuIHsKLSAgICAgICAgTWVkaWFFeHRyYWN0b3I6OkVYVFJBQ1RPUkRFRl9WRVJTSU9OLAorICAgICAgICBFWFRSQUNUT1JERUZfVkVSU0lPTl9DVVJSRU5ULAogICAgICAgICBVVUlEKCJhYmJlZGQ5Mi0zOGM0LTQ5MDQtYTRjMS1iM2Y0NWY4OTk5ODAiKSwKICAgICAgICAgMSwKICAgICAgICAgIk1hdHJvc2thIEV4dHJhY3RvciIsCi0gICAgICAgIFtdKAotICAgICAgICAgICAgICAgIERhdGFTb3VyY2VCYXNlICpzb3VyY2UsCi0gICAgICAgICAgICAgICAgZmxvYXQgKmNvbmZpZGVuY2UsCi0gICAgICAgICAgICAgICAgdm9pZCAqKiwKLSAgICAgICAgICAgICAgICBNZWRpYUV4dHJhY3Rvcjo6RnJlZU1ldGFGdW5jICopIC0+IE1lZGlhRXh0cmFjdG9yOjpDcmVhdG9yRnVuYyB7Ci0gICAgICAgICAgICBpZiAoU25pZmZNYXRyb3NrYShzb3VyY2UsIGNvbmZpZGVuY2UpKSB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIFtdKAotICAgICAgICAgICAgICAgICAgICAgICAgRGF0YVNvdXJjZUJhc2UgKnNvdXJjZSwKLSAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKikgLT4gTWVkaWFFeHRyYWN0b3IqIHsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBNYXRyb3NrYUV4dHJhY3Rvcihzb3VyY2UpO307CisgICAgICAgIHsKKyAgICAgICAgICAgIC52MiA9IFtdKAorICAgICAgICAgICAgICAgICAgICBDRGF0YVNvdXJjZSAqc291cmNlLAorICAgICAgICAgICAgICAgICAgICBmbG9hdCAqY29uZmlkZW5jZSwKKyAgICAgICAgICAgICAgICAgICAgdm9pZCAqKiwKKyAgICAgICAgICAgICAgICAgICAgRnJlZU1ldGFGdW5jICopIC0+IENyZWF0b3JGdW5jVjIgeworICAgICAgICAgICAgICAgIERhdGFTb3VyY2VIZWxwZXIgaGVscGVyKHNvdXJjZSk7CisgICAgICAgICAgICAgICAgaWYgKFNuaWZmTWF0cm9za2EoJmhlbHBlciwgY29uZmlkZW5jZSkpIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFtdKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIENEYXRhU291cmNlICpzb3VyY2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAqKSAtPiBDTWVkaWFFeHRyYWN0b3JWMiogeworICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHdyYXBWMihuZXcgTWF0cm9za2FFeHRyYWN0b3IobmV3IERhdGFTb3VyY2VIZWxwZXIoc291cmNlKSkpO307CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIHJldHVybiBOVUxMOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgICAgIH0KICAgICB9OwogfQpkaWZmIC0tZ2l0IGEvbWVkaWEvZXh0cmFjdG9ycy9ta3YvTWF0cm9za2FFeHRyYWN0b3IuaCBiL21lZGlhL2V4dHJhY3RvcnMvbWt2L01hdHJvc2thRXh0cmFjdG9yLmgKaW5kZXggMzU2OGVhMS4uMmZhODg4MSAxMDA2NDQKLS0tIGEvbWVkaWEvZXh0cmFjdG9ycy9ta3YvTWF0cm9za2FFeHRyYWN0b3IuaAorKysgYi9tZWRpYS9leHRyYWN0b3JzL21rdi9NYXRyb3NrYUV4dHJhY3Rvci5oCkBAIC0yMCw4ICsyMCw5IEBACiAKICNpbmNsdWRlICJta3ZwYXJzZXIvbWt2cGFyc2VyLmgiCiAKLSNpbmNsdWRlIDxtZWRpYS9NZWRpYUV4dHJhY3Rvci5oPgotI2luY2x1ZGUgPG1lZGlhL3N0YWdlZnJpZ2h0L01ldGFEYXRhQmFzZS5oPgorI2luY2x1ZGUgPG1lZGlhL01lZGlhRXh0cmFjdG9yUGx1Z2luQXBpLmg+CisjaW5jbHVkZSA8bWVkaWEvTWVkaWFFeHRyYWN0b3JQbHVnaW5IZWxwZXIuaD4KKyNpbmNsdWRlIDxtZWRpYS9OZGtNZWRpYUZvcm1hdC5oPgogI2luY2x1ZGUgPHV0aWxzL1ZlY3Rvci5oPgogI2luY2x1ZGUgPHV0aWxzL3RocmVhZHMuaD4KIApAQCAtMzQsMTYgKzM1LDE2IEBACiBzdHJ1Y3QgRGF0YVNvdXJjZUJhc2VSZWFkZXI7CiBzdHJ1Y3QgTWF0cm9za2FTb3VyY2U7CiAKLXN0cnVjdCBNYXRyb3NrYUV4dHJhY3RvciA6IHB1YmxpYyBNZWRpYUV4dHJhY3RvciB7Ci0gICAgZXhwbGljaXQgTWF0cm9za2FFeHRyYWN0b3IoRGF0YVNvdXJjZUJhc2UgKnNvdXJjZSk7CitzdHJ1Y3QgTWF0cm9za2FFeHRyYWN0b3IgOiBwdWJsaWMgTWVkaWFFeHRyYWN0b3JQbHVnaW5IZWxwZXJWMiB7CisgICAgZXhwbGljaXQgTWF0cm9za2FFeHRyYWN0b3IoRGF0YVNvdXJjZUhlbHBlciAqc291cmNlKTsKIAogICAgIHZpcnR1YWwgc2l6ZV90IGNvdW50VHJhY2tzKCk7CiAKLSAgICB2aXJ0dWFsIE1lZGlhVHJhY2sgKmdldFRyYWNrKHNpemVfdCBpbmRleCk7CisgICAgdmlydHVhbCBNZWRpYVRyYWNrSGVscGVyVjIgKmdldFRyYWNrKHNpemVfdCBpbmRleCk7CiAKLSAgICB2aXJ0dWFsIHN0YXR1c190IGdldFRyYWNrTWV0YURhdGEoTWV0YURhdGFCYXNlJiBtZXRhLCBzaXplX3QgaW5kZXgsIHVpbnQzMl90IGZsYWdzKTsKKyAgICB2aXJ0dWFsIG1lZGlhX3N0YXR1c190IGdldFRyYWNrTWV0YURhdGEoQU1lZGlhRm9ybWF0ICptZXRhLCBzaXplX3QgaW5kZXgsIHVpbnQzMl90IGZsYWdzKTsKIAotICAgIHZpcnR1YWwgc3RhdHVzX3QgZ2V0TWV0YURhdGEoTWV0YURhdGFCYXNlJiBtZXRhKTsKKyAgICB2aXJ0dWFsIG1lZGlhX3N0YXR1c190IGdldE1ldGFEYXRhKEFNZWRpYUZvcm1hdCAqbWV0YSk7CiAKICAgICB2aXJ0dWFsIHVpbnQzMl90IGZsYWdzKCkgY29uc3Q7CiAKQEAgLTU3LDkgKzU4LDE3IEBACiAgICAgZnJpZW5kIHN0cnVjdCBCbG9ja0l0ZXJhdG9yOwogCiAgICAgc3RydWN0IFRyYWNrSW5mbyB7CisgICAgICAgIFRyYWNrSW5mbygpIHsKKyAgICAgICAgICAgIG1NZXRhID0gTlVMTDsKKyAgICAgICAgfQorICAgICAgICB+VHJhY2tJbmZvKCkgeworICAgICAgICAgICAgaWYgKG1NZXRhKSB7CisgICAgICAgICAgICAgICAgQU1lZGlhRm9ybWF0X2RlbGV0ZShtTWV0YSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KICAgICAgICAgdW5zaWduZWQgbG9uZyBtVHJhY2tOdW07CiAgICAgICAgIGJvb2wgbUVuY3J5cHRlZDsKLSAgICAgICAgTWV0YURhdGFCYXNlIG1NZXRhOworICAgICAgICBBTWVkaWFGb3JtYXQgKm1NZXRhOwogICAgICAgICBjb25zdCBNYXRyb3NrYUV4dHJhY3RvciAqbUV4dHJhY3RvcjsKICAgICAgICAgVmVjdG9yPGNvbnN0IG1rdnBhcnNlcjo6Q3VlUG9pbnQqPiBtQ3VlUG9pbnRzOwogCkBAIC02OCw2ICs3Nyw3IEBACiAgICAgICAgIC8vIGluIH5NYXRyb3NrYUV4dHJhY3Rvci4KICAgICAgICAgdW5zaWduZWQgY2hhciAqbUhlYWRlcjsKICAgICAgICAgc2l6ZV90IG1IZWFkZXJMZW47CisgICAgICAgIGludDMyX3QgbU5hbExlbmd0aFNpemU7CiAKICAgICAgICAgY29uc3QgbWt2cGFyc2VyOjpUcmFjayogZ2V0VHJhY2soKSBjb25zdDsKICAgICAgICAgY29uc3QgbWt2cGFyc2VyOjpDdWVQb2ludDo6VHJhY2tQb3NpdGlvbiAqZmluZChsb25nIGxvbmcgdGltZU5zKSBjb25zdDsKQEAgLTc2LDcgKzg2LDcgQEAKICAgICBNdXRleCBtTG9jazsKICAgICBWZWN0b3I8VHJhY2tJbmZvPiBtVHJhY2tzOwogCi0gICAgRGF0YVNvdXJjZUJhc2UgKm1EYXRhU291cmNlOworICAgIERhdGFTb3VyY2VIZWxwZXIgKm1EYXRhU291cmNlOwogICAgIERhdGFTb3VyY2VCYXNlUmVhZGVyICptUmVhZGVyOwogICAgIG1rdnBhcnNlcjo6U2VnbWVudCAqbVNlZ21lbnQ7CiAgICAgYm9vbCBtRXh0cmFjdGVkVGh1bWJuYWlsczsKQEAgLTg3LDEzICs5NywxMyBAQAogICAgIHN0YXR1c190IHN5bnRoZXNpemVBVkNDKFRyYWNrSW5mbyAqdHJhY2tJbmZvLCBzaXplX3QgaW5kZXgpOwogICAgIHN0YXR1c190IGluaXRUcmFja0luZm8oCiAgICAgICAgICAgICBjb25zdCBta3ZwYXJzZXI6OlRyYWNrICp0cmFjaywKLSAgICAgICAgICAgIE1ldGFEYXRhQmFzZSAmbWV0YSwKKyAgICAgICAgICAgIEFNZWRpYUZvcm1hdCAqbWV0YSwKICAgICAgICAgICAgIFRyYWNrSW5mbyAqdHJhY2tJbmZvKTsKICAgICB2b2lkIGFkZFRyYWNrcygpOwogICAgIHZvaWQgZmluZFRodW1ibmFpbHMoKTsKICAgICB2b2lkIGdldENvbG9ySW5mb3JtYXRpb24oCiAgICAgICAgICAgICBjb25zdCBta3ZwYXJzZXI6OlZpZGVvVHJhY2sgKnZ0cmFjaywKLSAgICAgICAgICAgIE1ldGFEYXRhQmFzZSAmbWV0YSk7CisgICAgICAgICAgICBBTWVkaWFGb3JtYXQgKm1ldGEpOwogICAgIGJvb2wgaXNMaXZlU3RyZWFtaW5nKCkgY29uc3Q7CiAKICAgICBNYXRyb3NrYUV4dHJhY3Rvcihjb25zdCBNYXRyb3NrYUV4dHJhY3RvciAmKTsKZGlmZiAtLWdpdCBhL21lZGlhL2V4dHJhY3RvcnMvbXAzL0FuZHJvaWQuYnAgYi9tZWRpYS9leHRyYWN0b3JzL21wMy9BbmRyb2lkLmJwCmluZGV4IGEzYWVhY2EuLjEwMjVjNDYgMTAwNjQ0Ci0tLSBhL21lZGlhL2V4dHJhY3RvcnMvbXAzL0FuZHJvaWQuYnAKKysrIGIvbWVkaWEvZXh0cmFjdG9ycy9tcDMvQW5kcm9pZC5icApAQCAtMTMsNiArMTMsNyBAQAogICAgIHNoYXJlZF9saWJzOiBbCiAgICAgICAgICJsaWJsb2ciLAogICAgICAgICAibGlibWVkaWFleHRyYWN0b3IiLAorICAgICAgICAibGlibWVkaWFuZGsiLAogICAgICAgICAibGlic3RhZ2VmcmlnaHRfZm91bmRhdGlvbiIsCiAgICAgXSwKIApkaWZmIC0tZ2l0IGEvbWVkaWEvZXh0cmFjdG9ycy9tcDMvTVAzRXh0cmFjdG9yLmNwcCBiL21lZGlhL2V4dHJhY3RvcnMvbXAzL01QM0V4dHJhY3Rvci5jcHAKaW5kZXggMzNjZmY5Ni4uMGUxZmZiNCAxMDA2NDQKLS0tIGEvbWVkaWEvZXh0cmFjdG9ycy9tcDMvTVAzRXh0cmFjdG9yLmNwcAorKysgYi9tZWRpYS9leHRyYWN0b3JzL21wMy9NUDNFeHRyYWN0b3IuY3BwCkBAIC0yNCw4ICsyNCw2IEBACiAjaW5jbHVkZSAiVkJSSVNlZWtlci5oIgogI2luY2x1ZGUgIlhJTkdTZWVrZXIuaCIKIAotI2luY2x1ZGUgPG1lZGlhL0RhdGFTb3VyY2VCYXNlLmg+Ci0jaW5jbHVkZSA8bWVkaWEvTWVkaWFUcmFjay5oPgogI2luY2x1ZGUgPG1lZGlhL3N0YWdlZnJpZ2h0L2ZvdW5kYXRpb24vQURlYnVnLmg+CiAjaW5jbHVkZSA8bWVkaWEvc3RhZ2VmcmlnaHQvZm91bmRhdGlvbi9BTWVzc2FnZS5oPgogI2luY2x1ZGUgPG1lZGlhL3N0YWdlZnJpZ2h0L2ZvdW5kYXRpb24vYXZjX3V0aWxzLmg+CkBAIC00Niw3ICs0NCw3IEBACiBzdGF0aWMgY29uc3QgdWludDMyX3Qga01hc2sgPSAweGZmZmUwYzAwOwogCiBzdGF0aWMgYm9vbCBSZXN5bmMoCi0gICAgICAgIERhdGFTb3VyY2VCYXNlICpzb3VyY2UsIHVpbnQzMl90IG1hdGNoX2hlYWRlciwKKyAgICAgICAgRGF0YVNvdXJjZUhlbHBlciAqc291cmNlLCB1aW50MzJfdCBtYXRjaF9oZWFkZXIsCiAgICAgICAgIG9mZjY0X3QgKmlub3V0X3Bvcywgb2ZmNjRfdCAqcG9zdF9pZDNfcG9zLCB1aW50MzJfdCAqb3V0X2hlYWRlcikgewogICAgIGlmIChwb3N0X2lkM19wb3MgIT0gTlVMTCkgewogICAgICAgICAqcG9zdF9pZDNfcG9zID0gMDsKQEAgLTIwOSwxOSArMjA3LDE5IEBACiAgICAgcmV0dXJuIHZhbGlkOwogfQogCi1jbGFzcyBNUDNTb3VyY2UgOiBwdWJsaWMgTWVkaWFUcmFjayB7CitjbGFzcyBNUDNTb3VyY2UgOiBwdWJsaWMgTWVkaWFUcmFja0hlbHBlclYyIHsKIHB1YmxpYzoKICAgICBNUDNTb3VyY2UoCi0gICAgICAgICAgICBNZXRhRGF0YUJhc2UgJm1ldGEsIERhdGFTb3VyY2VCYXNlICpzb3VyY2UsCisgICAgICAgICAgICBBTWVkaWFGb3JtYXQgKm1ldGEsIERhdGFTb3VyY2VIZWxwZXIgKnNvdXJjZSwKICAgICAgICAgICAgIG9mZjY0X3QgZmlyc3RfZnJhbWVfcG9zLCB1aW50MzJfdCBmaXhlZF9oZWFkZXIsCiAgICAgICAgICAgICBNUDNTZWVrZXIgKnNlZWtlcik7CiAKLSAgICB2aXJ0dWFsIHN0YXR1c190IHN0YXJ0KE1ldGFEYXRhQmFzZSAqcGFyYW1zID0gTlVMTCk7Ci0gICAgdmlydHVhbCBzdGF0dXNfdCBzdG9wKCk7CisgICAgdmlydHVhbCBtZWRpYV9zdGF0dXNfdCBzdGFydCgpOworICAgIHZpcnR1YWwgbWVkaWFfc3RhdHVzX3Qgc3RvcCgpOwogCi0gICAgdmlydHVhbCBzdGF0dXNfdCBnZXRGb3JtYXQoTWV0YURhdGFCYXNlICZtZXRhKTsKKyAgICB2aXJ0dWFsIG1lZGlhX3N0YXR1c190IGdldEZvcm1hdChBTWVkaWFGb3JtYXQgKm1ldGEpOwogCi0gICAgdmlydHVhbCBzdGF0dXNfdCByZWFkKAorICAgIHZpcnR1YWwgbWVkaWFfc3RhdHVzX3QgcmVhZCgKICAgICAgICAgICAgIE1lZGlhQnVmZmVyQmFzZSAqKmJ1ZmZlciwgY29uc3QgUmVhZE9wdGlvbnMgKm9wdGlvbnMgPSBOVUxMKTsKIAogcHJvdGVjdGVkOgpAQCAtMjI5LDggKzIyNyw4IEBACiAKIHByaXZhdGU6CiAgICAgc3RhdGljIGNvbnN0IHNpemVfdCBrTWF4RnJhbWVTaXplOwotICAgIE1ldGFEYXRhQmFzZSAmbU1ldGE7Ci0gICAgRGF0YVNvdXJjZUJhc2UgKm1EYXRhU291cmNlOworICAgIEFNZWRpYUZvcm1hdCAqbU1ldGE7CisgICAgRGF0YVNvdXJjZUhlbHBlciAqbURhdGFTb3VyY2U7CiAgICAgb2ZmNjRfdCBtRmlyc3RGcmFtZVBvczsKICAgICB1aW50MzJfdCBtRml4ZWRIZWFkZXI7CiAgICAgb2ZmNjRfdCBtQ3VycmVudFBvczsKQEAgLTI1Myw3ICsyNTEsNyBAQAogfTsKIAogTVAzRXh0cmFjdG9yOjpNUDNFeHRyYWN0b3IoCi0gICAgICAgIERhdGFTb3VyY2VCYXNlICpzb3VyY2UsIE1wM01ldGEgKm1ldGEpCisgICAgICAgIERhdGFTb3VyY2VIZWxwZXIgKnNvdXJjZSwgTXAzTWV0YSAqbWV0YSkKICAgICA6IG1Jbml0Q2hlY2soTk9fSU5JVCksCiAgICAgICBtRGF0YVNvdXJjZShzb3VyY2UpLAogICAgICAgbUZpcnN0RnJhbWVQb3MoLTEpLApAQCAtMjg1LDYgKzI4Myw3IEBACiAgICAgbUZpeGVkSGVhZGVyID0gaGVhZGVyOwogICAgIFhJTkdTZWVrZXIgKnNlZWtlciA9IFhJTkdTZWVrZXI6OkNyZWF0ZUZyb21Tb3VyY2UobURhdGFTb3VyY2UsIG1GaXJzdEZyYW1lUG9zKTsKIAorICAgIG1NZXRhID0gQU1lZGlhRm9ybWF0X25ldygpOwogICAgIGlmIChzZWVrZXIgPT0gTlVMTCkgewogICAgICAgICBtU2Vla2VyID0gVkJSSVNlZWtlcjo6Q3JlYXRlRnJvbVNvdXJjZShtRGF0YVNvdXJjZSwgcG9zdF9pZDNfcG9zKTsKICAgICB9IGVsc2UgewpAQCAtMjkyLDggKzI5MSw4IEBACiAgICAgICAgIGludCBlbmNkID0gc2Vla2VyLT5nZXRFbmNvZGVyRGVsYXkoKTsKICAgICAgICAgaW50IGVuY3AgPSBzZWVrZXItPmdldEVuY29kZXJQYWRkaW5nKCk7CiAgICAgICAgIGlmIChlbmNkICE9IDAgfHwgZW5jcCAhPSAwKSB7Ci0gICAgICAgICAgICBtTWV0YS5zZXRJbnQzMihrS2V5RW5jb2RlckRlbGF5LCBlbmNkKTsKLSAgICAgICAgICAgIG1NZXRhLnNldEludDMyKGtLZXlFbmNvZGVyUGFkZGluZywgZW5jcCk7CisgICAgICAgICAgICBBTWVkaWFGb3JtYXRfc2V0SW50MzIobU1ldGEsIEFNRURJQUZPUk1BVF9LRVlfRU5DT0RFUl9ERUxBWSwgZW5jZCk7CisgICAgICAgICAgICBBTWVkaWFGb3JtYXRfc2V0SW50MzIobU1ldGEsIEFNRURJQUZPUk1BVF9LRVlfRU5DT0RFUl9QQURESU5HLCBlbmNwKTsKICAgICAgICAgfQogICAgIH0KIApAQCAtMzI5LDIxICszMjgsMjMgQEAKIAogICAgIHN3aXRjaCAobGF5ZXIpIHsKICAgICAgICAgY2FzZSAxOgotICAgICAgICAgICAgbU1ldGEuc2V0Q1N0cmluZyhrS2V5TUlNRVR5cGUsIE1FRElBX01JTUVUWVBFX0FVRElPX01QRUdfTEFZRVJfSSk7CisgICAgICAgICAgICBBTWVkaWFGb3JtYXRfc2V0U3RyaW5nKG1NZXRhLAorICAgICAgICAgICAgICAgICAgICBBTUVESUFGT1JNQVRfS0VZX01JTUUsIE1FRElBX01JTUVUWVBFX0FVRElPX01QRUdfTEFZRVJfSSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSAyOgotICAgICAgICAgICAgbU1ldGEuc2V0Q1N0cmluZyhrS2V5TUlNRVR5cGUsIE1FRElBX01JTUVUWVBFX0FVRElPX01QRUdfTEFZRVJfSUkpOworICAgICAgICAgICAgQU1lZGlhRm9ybWF0X3NldFN0cmluZyhtTWV0YSwKKyAgICAgICAgICAgICAgICAgICAgQU1FRElBRk9STUFUX0tFWV9NSU1FLCBNRURJQV9NSU1FVFlQRV9BVURJT19NUEVHX0xBWUVSX0lJKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIDM6Ci0gICAgICAgICAgICBtTWV0YS5zZXRDU3RyaW5nKGtLZXlNSU1FVHlwZSwgTUVESUFfTUlNRVRZUEVfQVVESU9fTVBFRyk7CisgICAgICAgICAgICBBTWVkaWFGb3JtYXRfc2V0U3RyaW5nKG1NZXRhLCBBTUVESUFGT1JNQVRfS0VZX01JTUUsIE1FRElBX01JTUVUWVBFX0FVRElPX01QRUcpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICBUUkVTUEFTUygpOwogICAgIH0KIAotICAgIG1NZXRhLnNldEludDMyKGtLZXlTYW1wbGVSYXRlLCBzYW1wbGVfcmF0ZSk7Ci0gICAgbU1ldGEuc2V0SW50MzIoa0tleUJpdFJhdGUsIGJpdHJhdGUgKiAxMDAwKTsKLSAgICBtTWV0YS5zZXRJbnQzMihrS2V5Q2hhbm5lbENvdW50LCBudW1fY2hhbm5lbHMpOworICAgIEFNZWRpYUZvcm1hdF9zZXRJbnQzMihtTWV0YSwgQU1FRElBRk9STUFUX0tFWV9TQU1QTEVfUkFURSwgc2FtcGxlX3JhdGUpOworICAgIEFNZWRpYUZvcm1hdF9zZXRJbnQzMihtTWV0YSwgQU1FRElBRk9STUFUX0tFWV9CSVRfUkFURSwgYml0cmF0ZSAqIDEwMDApOworICAgIEFNZWRpYUZvcm1hdF9zZXRJbnQzMihtTWV0YSwgQU1FRElBRk9STUFUX0tFWV9DSEFOTkVMX0NPVU5ULCBudW1fY2hhbm5lbHMpOwogCiAgICAgaW50NjRfdCBkdXJhdGlvblVzOwogCkBAIC0zNjMsNyArMzY0LDcgQEAKICAgICB9CiAKICAgICBpZiAoZHVyYXRpb25VcyA+PSAwKSB7Ci0gICAgICAgIG1NZXRhLnNldEludDY0KGtLZXlEdXJhdGlvbiwgZHVyYXRpb25Vcyk7CisgICAgICAgIEFNZWRpYUZvcm1hdF9zZXRJbnQ2NChtTWV0YSwgQU1FRElBRk9STUFUX0tFWV9EVVJBVElPTiwgZHVyYXRpb25Vcyk7CiAgICAgfQogCiAgICAgbUluaXRDaGVjayA9IE9LOwpAQCAtMzcxLDcgKzM3Miw4IEBACiAgICAgLy8gR2V0IGlUdW5lcy1zdHlsZSBnYXBsZXNzIGluZm8gaWYgcHJlc2VudC4KICAgICAvLyBXaGVuIGdldHRpbmcgdGhlIGlkMyB0YWcsIHNraXAgdGhlIFYxIHRhZ3MgdG8gcHJldmVudCB0aGUgc291cmNlIGNhY2hlCiAgICAgLy8gZnJvbSBiZWluZyBpdGVyYXRlZCB0byB0aGUgZW5kIG9mIHRoZSBmaWxlLgotICAgIElEMyBpZDMobURhdGFTb3VyY2UsIHRydWUpOworICAgIERhdGFTb3VyY2VIZWxwZXIgaGVscGVyKG1EYXRhU291cmNlKTsKKyAgICBJRDMgaWQzKCZoZWxwZXIsIHRydWUpOwogICAgIGlmIChpZDMuaXNWYWxpZCgpKSB7CiAgICAgICAgIElEMzo6SXRlcmF0b3IgKmNvbSA9IG5ldyBJRDM6Okl0ZXJhdG9yKGlkMywgIkNPTSIpOwogICAgICAgICBpZiAoY29tLT5kb25lKCkpIHsKQEAgLTM5MCw4ICszOTIsOCBAQAogCiAgICAgICAgICAgICAgICAgaW50MzJfdCBkZWxheSwgcGFkZGluZzsKICAgICAgICAgICAgICAgICBpZiAoc3NjYW5mKHZhbHVlLCAiICUqeCAleCAleCAlKngiLCAmZGVsYXksICZwYWRkaW5nKSA9PSAyKSB7Ci0gICAgICAgICAgICAgICAgICAgIG1NZXRhLnNldEludDMyKGtLZXlFbmNvZGVyRGVsYXksIGRlbGF5KTsKLSAgICAgICAgICAgICAgICAgICAgbU1ldGEuc2V0SW50MzIoa0tleUVuY29kZXJQYWRkaW5nLCBwYWRkaW5nKTsKKyAgICAgICAgICAgICAgICAgICAgQU1lZGlhRm9ybWF0X3NldEludDMyKG1NZXRhLCBBTUVESUFGT1JNQVRfS0VZX0VOQ09ERVJfREVMQVksIGRlbGF5KTsKKyAgICAgICAgICAgICAgICAgICAgQU1lZGlhRm9ybWF0X3NldEludDMyKG1NZXRhLCBBTUVESUFGT1JNQVRfS0VZX0VOQ09ERVJfUEFERElORywgcGFkZGluZyk7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQpAQCAtNDA0LDEzICs0MDYsMTUgQEAKIAogTVAzRXh0cmFjdG9yOjp+TVAzRXh0cmFjdG9yKCkgewogICAgIGRlbGV0ZSBtU2Vla2VyOworICAgIGRlbGV0ZSBtRGF0YVNvdXJjZTsKKyAgICBBTWVkaWFGb3JtYXRfZGVsZXRlKG1NZXRhKTsKIH0KIAogc2l6ZV90IE1QM0V4dHJhY3Rvcjo6Y291bnRUcmFja3MoKSB7CiAgICAgcmV0dXJuIG1Jbml0Q2hlY2sgIT0gT0sgPyAwIDogMTsKIH0KIAotTWVkaWFUcmFjayAqTVAzRXh0cmFjdG9yOjpnZXRUcmFjayhzaXplX3QgaW5kZXgpIHsKK01lZGlhVHJhY2tIZWxwZXJWMiAqTVAzRXh0cmFjdG9yOjpnZXRUcmFjayhzaXplX3QgaW5kZXgpIHsKICAgICBpZiAobUluaXRDaGVjayAhPSBPSyB8fCBpbmRleCAhPSAwKSB7CiAgICAgICAgIHJldHVybiBOVUxMOwogICAgIH0KQEAgLTQyMCwxNCArNDI0LDE0IEBACiAgICAgICAgICAgICBtU2Vla2VyKTsKIH0KIAotc3RhdHVzX3QgTVAzRXh0cmFjdG9yOjpnZXRUcmFja01ldGFEYXRhKAotICAgICAgICBNZXRhRGF0YUJhc2UgJm1ldGEsCittZWRpYV9zdGF0dXNfdCBNUDNFeHRyYWN0b3I6OmdldFRyYWNrTWV0YURhdGEoCisgICAgICAgIEFNZWRpYUZvcm1hdCAqbWV0YSwKICAgICAgICAgc2l6ZV90IGluZGV4LCB1aW50MzJfdCAvKiBmbGFncyAqLykgewogICAgIGlmIChtSW5pdENoZWNrICE9IE9LIHx8IGluZGV4ICE9IDApIHsKLSAgICAgICAgcmV0dXJuIFVOS05PV05fRVJST1I7CisgICAgICAgIHJldHVybiBBTUVESUFfRVJST1JfVU5LTk9XTjsKICAgICB9Ci0gICAgbWV0YSA9IG1NZXRhOwotICAgIHJldHVybiBPSzsKKyAgICBBTWVkaWFGb3JtYXRfY29weShtZXRhLCBtTWV0YSk7CisgICAgcmV0dXJuIEFNRURJQV9PSzsKIH0KIAogLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KQEAgLTQ0MCw3ICs0NDQsNyBAQAogLy8gU2V0IG91ciBtYXggZnJhbWUgc2l6ZSB0byB0aGUgbmVhcmVzdCBwb3dlciBvZiAyIGFib3ZlIHRoaXMgc2l6ZSAoYWthLCA0a0IpCiBjb25zdCBzaXplX3QgTVAzU291cmNlOjprTWF4RnJhbWVTaXplID0gKDEgPDwgMTIpOyAvKiA0MDk2IGJ5dGVzICovCiBNUDNTb3VyY2U6Ok1QM1NvdXJjZSgKLSAgICAgICAgTWV0YURhdGFCYXNlICZtZXRhLCBEYXRhU291cmNlQmFzZSAqc291cmNlLAorICAgICAgICBBTWVkaWFGb3JtYXQgKm1ldGEsIERhdGFTb3VyY2VIZWxwZXIgKnNvdXJjZSwKICAgICAgICAgb2ZmNjRfdCBmaXJzdF9mcmFtZV9wb3MsIHVpbnQzMl90IGZpeGVkX2hlYWRlciwKICAgICAgICAgTVAzU2Vla2VyICpzZWVrZXIpCiAgICAgOiBtTWV0YShtZXRhKSwKQEAgLTQ2Miw3ICs0NjYsNyBAQAogICAgIH0KIH0KIAotc3RhdHVzX3QgTVAzU291cmNlOjpzdGFydChNZXRhRGF0YUJhc2UgKikgeworbWVkaWFfc3RhdHVzX3QgTVAzU291cmNlOjpzdGFydCgpIHsKICAgICBDSEVDSyghbVN0YXJ0ZWQpOwogCiAgICAgbUdyb3VwID0gbmV3IE1lZGlhQnVmZmVyR3JvdXA7CkBAIC00NzcsMTAgKzQ4MSwxMCBAQAogCiAgICAgbVN0YXJ0ZWQgPSB0cnVlOwogCi0gICAgcmV0dXJuIE9LOworICAgIHJldHVybiBBTUVESUFfT0s7CiB9CiAKLXN0YXR1c190IE1QM1NvdXJjZTo6c3RvcCgpIHsKK21lZGlhX3N0YXR1c190IE1QM1NvdXJjZTo6c3RvcCgpIHsKICAgICBDSEVDSyhtU3RhcnRlZCk7CiAKICAgICBkZWxldGUgbUdyb3VwOwpAQCAtNDg4LDE1ICs0OTIsMTQgQEAKIAogICAgIG1TdGFydGVkID0gZmFsc2U7CiAKLSAgICByZXR1cm4gT0s7CisgICAgcmV0dXJuIEFNRURJQV9PSzsKIH0KIAotc3RhdHVzX3QgTVAzU291cmNlOjpnZXRGb3JtYXQoTWV0YURhdGFCYXNlICZtZXRhKSB7Ci0gICAgbWV0YSA9IG1NZXRhOwotICAgIHJldHVybiBPSzsKK21lZGlhX3N0YXR1c190IE1QM1NvdXJjZTo6Z2V0Rm9ybWF0KEFNZWRpYUZvcm1hdCAqbWV0YSkgeworICAgIHJldHVybiBBTWVkaWFGb3JtYXRfY29weShtZXRhLCBtTWV0YSk7CiB9CiAKLXN0YXR1c190IE1QM1NvdXJjZTo6cmVhZCgKK21lZGlhX3N0YXR1c190IE1QM1NvdXJjZTo6cmVhZCgKICAgICAgICAgTWVkaWFCdWZmZXJCYXNlICoqb3V0LCBjb25zdCBSZWFkT3B0aW9ucyAqb3B0aW9ucykgewogICAgICpvdXQgPSBOVUxMOwogCkBAIC01MDksMTEgKzUxMiwxMSBAQAogICAgICAgICBpZiAobVNlZWtlciA9PSBOVUxMCiAgICAgICAgICAgICAgICAgfHwgIW1TZWVrZXItPmdldE9mZnNldEZvclRpbWUoJmFjdHVhbFNlZWtUaW1lVXMsICZtQ3VycmVudFBvcykpIHsKICAgICAgICAgICAgIGludDMyX3QgYml0cmF0ZTsKLSAgICAgICAgICAgIGlmICghbU1ldGEuZmluZEludDMyKGtLZXlCaXRSYXRlLCAmYml0cmF0ZSkpIHsKKyAgICAgICAgICAgIGlmICghQU1lZGlhRm9ybWF0X2dldEludDMyKG1NZXRhLCBBTUVESUFGT1JNQVRfS0VZX0JJVF9SQVRFLCAmYml0cmF0ZSkpIHsKICAgICAgICAgICAgICAgICAvLyBiaXRyYXRlIGlzIGluIGJpdHMvc2VjLgogICAgICAgICAgICAgICAgIEFMT0dJKCJubyBiaXRyYXRlIik7CiAKLSAgICAgICAgICAgICAgICByZXR1cm4gRVJST1JfVU5TVVBQT1JURUQ7CisgICAgICAgICAgICAgICAgcmV0dXJuIEFNRURJQV9FUlJPUl9VTlNVUFBPUlRFRDsKICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgbUN1cnJlbnRUaW1lVXMgPSBzZWVrVGltZVVzOwpAQCAtNTMwLDcgKzUzMyw3IEBACiAgICAgTWVkaWFCdWZmZXJCYXNlICpidWZmZXI7CiAgICAgc3RhdHVzX3QgZXJyID0gbUdyb3VwLT5hY3F1aXJlX2J1ZmZlcigmYnVmZmVyKTsKICAgICBpZiAoZXJyICE9IE9LKSB7Ci0gICAgICAgIHJldHVybiBlcnI7CisgICAgICAgIHJldHVybiBBTUVESUFfRVJST1JfVU5LTk9XTjsKICAgICB9CiAKICAgICBzaXplX3QgZnJhbWVfc2l6ZTsKQEAgLTU0Myw3ICs1NDYsOCBAQAogICAgICAgICAgICAgYnVmZmVyLT5yZWxlYXNlKCk7CiAgICAgICAgICAgICBidWZmZXIgPSBOVUxMOwogCi0gICAgICAgICAgICByZXR1cm4gKG4gPCAwID8gbiA6IEVSUk9SX0VORF9PRl9TVFJFQU0pOworICAgICAgICAgICAgcmV0dXJuICgobiA8IDAgJiYgbiAhPSBFUlJPUl9FTkRfT0ZfU1RSRUFNKSA/CisgICAgICAgICAgICAgICAgICAgIEFNRURJQV9FUlJPUl9VTktOT1dOIDogQU1FRElBX0VSUk9SX0VORF9PRl9TVFJFQU0pOwogICAgICAgICB9CiAKICAgICAgICAgdWludDMyX3QgaGVhZGVyID0gVTMyX0FUKChjb25zdCB1aW50OF90ICopYnVmZmVyLT5kYXRhKCkpOwpAQCAtNTcyLDcgKzU3Niw3IEBACiAgICAgICAgICAgICBidWZmZXItPnJlbGVhc2UoKTsKICAgICAgICAgICAgIGJ1ZmZlciA9IE5VTEw7CiAKLSAgICAgICAgICAgIHJldHVybiBFUlJPUl9FTkRfT0ZfU1RSRUFNOworICAgICAgICAgICAgcmV0dXJuIEFNRURJQV9FUlJPUl9FTkRfT0ZfU1RSRUFNOwogICAgICAgICB9CiAKICAgICAgICAgbUN1cnJlbnRQb3MgPSBwb3M7CkBAIC01ODcsNyArNTkxLDggQEAKICAgICAgICAgYnVmZmVyLT5yZWxlYXNlKCk7CiAgICAgICAgIGJ1ZmZlciA9IE5VTEw7CiAKLSAgICAgICAgcmV0dXJuIChuIDwgMCA/IG4gOiBFUlJPUl9FTkRfT0ZfU1RSRUFNKTsKKyAgICAgICAgcmV0dXJuICgobiA8IDAgJiYgbiAhPSBFUlJPUl9FTkRfT0ZfU1RSRUFNKSA/CisgICAgICAgICAgICAgICAgQU1FRElBX0VSUk9SX1VOS05PV04gOiBBTUVESUFfRVJST1JfRU5EX09GX1NUUkVBTSk7CiAgICAgfQogCiAgICAgYnVmZmVyLT5zZXRfcmFuZ2UoMCwgZnJhbWVfc2l6ZSk7CkBAIC02MDIsMzkgKzYwNyw0MCBAQAogCiAgICAgKm91dCA9IGJ1ZmZlcjsKIAotICAgIHJldHVybiBPSzsKKyAgICByZXR1cm4gQU1FRElBX09LOwogfQogCi1zdGF0dXNfdCBNUDNFeHRyYWN0b3I6OmdldE1ldGFEYXRhKE1ldGFEYXRhQmFzZSAmbWV0YSkgewotICAgIG1ldGEuY2xlYXIoKTsKK21lZGlhX3N0YXR1c190IE1QM0V4dHJhY3Rvcjo6Z2V0TWV0YURhdGEoQU1lZGlhRm9ybWF0ICptZXRhKSB7CisgICAgQU1lZGlhRm9ybWF0X2NsZWFyKG1ldGEpOwogICAgIGlmIChtSW5pdENoZWNrICE9IE9LKSB7Ci0gICAgICAgIHJldHVybiBVTktOT1dOX0VSUk9SOworICAgICAgICByZXR1cm4gQU1FRElBX0VSUk9SX1VOS05PV047CiAgICAgfQotICAgIG1ldGEuc2V0Q1N0cmluZyhrS2V5TUlNRVR5cGUsICJhdWRpby9tcGVnIik7CisgICAgQU1lZGlhRm9ybWF0X3NldFN0cmluZyhtZXRhLCBBTUVESUFGT1JNQVRfS0VZX01JTUUsICJhdWRpby9tcGVnIik7CiAKLSAgICBJRDMgaWQzKG1EYXRhU291cmNlKTsKKyAgICBEYXRhU291cmNlSGVscGVyIGhlbHBlcihtRGF0YVNvdXJjZSk7CisgICAgSUQzIGlkMygmaGVscGVyKTsKIAogICAgIGlmICghaWQzLmlzVmFsaWQoKSkgewotICAgICAgICByZXR1cm4gT0s7CisgICAgICAgIHJldHVybiBBTUVESUFfT0s7CiAgICAgfQogCiAgICAgc3RydWN0IE1hcCB7Ci0gICAgICAgIGludCBrZXk7CisgICAgICAgIGNvbnN0IGNoYXIgKmtleTsKICAgICAgICAgY29uc3QgY2hhciAqdGFnMTsKICAgICAgICAgY29uc3QgY2hhciAqdGFnMjsKICAgICB9OwogICAgIHN0YXRpYyBjb25zdCBNYXAga01hcFtdID0gewotICAgICAgICB7IGtLZXlBbGJ1bSwgIlRBTEIiLCAiVEFMIiB9LAotICAgICAgICB7IGtLZXlBcnRpc3QsICJUUEUxIiwgIlRQMSIgfSwKLSAgICAgICAgeyBrS2V5QWxidW1BcnRpc3QsICJUUEUyIiwgIlRQMiIgfSwKLSAgICAgICAgeyBrS2V5Q29tcG9zZXIsICJUQ09NIiwgIlRDTSIgfSwKLSAgICAgICAgeyBrS2V5R2VucmUsICJUQ09OIiwgIlRDTyIgfSwKLSAgICAgICAgeyBrS2V5VGl0bGUsICJUSVQyIiwgIlRUMiIgfSwKLSAgICAgICAgeyBrS2V5WWVhciwgIlRZRSIsICJUWUVSIiB9LAotICAgICAgICB7IGtLZXlBdXRob3IsICJUWFQiLCAiVEVYVCIgfSwKLSAgICAgICAgeyBrS2V5Q0RUcmFja051bWJlciwgIlRSSyIsICJUUkNLIiB9LAotICAgICAgICB7IGtLZXlEaXNjTnVtYmVyLCAiVFBBIiwgIlRQT1MiIH0sCi0gICAgICAgIHsga0tleUNvbXBpbGF0aW9uLCAiVENQIiwgIlRDTVAiIH0sCisgICAgICAgIHsgQU1FRElBRk9STUFUX0tFWV9BTEJVTSwgIlRBTEIiLCAiVEFMIiB9LAorICAgICAgICB7IEFNRURJQUZPUk1BVF9LRVlfQVJUSVNULCAiVFBFMSIsICJUUDEiIH0sCisgICAgICAgIHsgQU1FRElBRk9STUFUX0tFWV9BTEJVTUFSVElTVCwgIlRQRTIiLCAiVFAyIiB9LAorICAgICAgICB7IEFNRURJQUZPUk1BVF9LRVlfQ09NUE9TRVIsICJUQ09NIiwgIlRDTSIgfSwKKyAgICAgICAgeyBBTUVESUFGT1JNQVRfS0VZX0dFTlJFLCAiVENPTiIsICJUQ08iIH0sCisgICAgICAgIHsgQU1FRElBRk9STUFUX0tFWV9USVRMRSwgIlRJVDIiLCAiVFQyIiB9LAorICAgICAgICB7IEFNRURJQUZPUk1BVF9LRVlfWUVBUiwgIlRZRSIsICJUWUVSIiB9LAorICAgICAgICB7IEFNRURJQUZPUk1BVF9LRVlfQVVUSE9SLCAiVFhUIiwgIlRFWFQiIH0sCisgICAgICAgIHsgQU1FRElBRk9STUFUX0tFWV9DRFRSQUNLTlVNQkVSLCAiVFJLIiwgIlRSQ0siIH0sCisgICAgICAgIHsgQU1FRElBRk9STUFUX0tFWV9ESVNDTlVNQkVSLCAiVFBBIiwgIlRQT1MiIH0sCisgICAgICAgIHsgQU1FRElBRk9STUFUX0tFWV9DT01QSUxBVElPTiwgIlRDUCIsICJUQ01QIiB9LAogICAgIH07CiAgICAgc3RhdGljIGNvbnN0IHNpemVfdCBrTnVtTWFwRW50cmllcyA9IHNpemVvZihrTWFwKSAvIHNpemVvZihrTWFwWzBdKTsKIApAQCAtNjU0LDcgKzY2MCw3IEBACiAgICAgICAgIGl0LT5nZXRTdHJpbmcoJnMpOwogICAgICAgICBkZWxldGUgaXQ7CiAKLSAgICAgICAgbWV0YS5zZXRDU3RyaW5nKGtNYXBbaV0ua2V5LCBzKTsKKyAgICAgICAgQU1lZGlhRm9ybWF0X3NldFN0cmluZyhtZXRhLCBrTWFwW2ldLmtleSwgcy5zdHJpbmcoKSk7CiAgICAgfQogCiAgICAgc2l6ZV90IGRhdGFTaXplOwpAQCAtNjYyLDI4ICs2NjgsMjggQEAKICAgICBjb25zdCB2b2lkICpkYXRhID0gaWQzLmdldEFsYnVtQXJ0KCZkYXRhU2l6ZSwgJm1pbWUpOwogCiAgICAgaWYgKGRhdGEpIHsKLSAgICAgICAgbWV0YS5zZXREYXRhKGtLZXlBbGJ1bUFydCwgTWV0YURhdGE6OlRZUEVfTk9ORSwgZGF0YSwgZGF0YVNpemUpOwotICAgICAgICBtZXRhLnNldENTdHJpbmcoa0tleUFsYnVtQXJ0TUlNRSwgbWltZS5zdHJpbmcoKSk7CisgICAgICAgIEFNZWRpYUZvcm1hdF9zZXRCdWZmZXIobWV0YSwgQU1FRElBRk9STUFUX0tFWV9BTEJVTUFSVCwgZGF0YSwgZGF0YVNpemUpOwogICAgIH0KIAotICAgIHJldHVybiBPSzsKKyAgICByZXR1cm4gQU1FRElBX09LOwogfQogCi1zdGF0aWMgTWVkaWFFeHRyYWN0b3IqIENyZWF0ZUV4dHJhY3RvcigKLSAgICAgICAgRGF0YVNvdXJjZUJhc2UgKnNvdXJjZSwKK3N0YXRpYyBDTWVkaWFFeHRyYWN0b3JWMiogQ3JlYXRlRXh0cmFjdG9yKAorICAgICAgICBDRGF0YVNvdXJjZSAqc291cmNlLAogICAgICAgICB2b2lkICptZXRhKSB7CiAgICAgTXAzTWV0YSAqbWV0YURhdGEgPSBzdGF0aWNfY2FzdDxNcDNNZXRhICo+KG1ldGEpOwotICAgIHJldHVybiBuZXcgTVAzRXh0cmFjdG9yKHNvdXJjZSwgbWV0YURhdGEpOworICAgIHJldHVybiB3cmFwVjIobmV3IE1QM0V4dHJhY3RvcihuZXcgRGF0YVNvdXJjZUhlbHBlcihzb3VyY2UpLCBtZXRhRGF0YSkpOwogfQogCi1zdGF0aWMgTWVkaWFFeHRyYWN0b3I6OkNyZWF0b3JGdW5jIFNuaWZmKAotICAgICAgICBEYXRhU291cmNlQmFzZSAqc291cmNlLCBmbG9hdCAqY29uZmlkZW5jZSwgdm9pZCAqKm1ldGEsCi0gICAgICAgIE1lZGlhRXh0cmFjdG9yOjpGcmVlTWV0YUZ1bmMgKmZyZWVNZXRhKSB7CitzdGF0aWMgQ3JlYXRvckZ1bmNWMiBTbmlmZigKKyAgICAgICAgQ0RhdGFTb3VyY2UgKnNvdXJjZSwgZmxvYXQgKmNvbmZpZGVuY2UsIHZvaWQgKiptZXRhLAorICAgICAgICBGcmVlTWV0YUZ1bmMgKmZyZWVNZXRhKSB7CiAgICAgb2ZmNjRfdCBwb3MgPSAwOwogICAgIG9mZjY0X3QgcG9zdF9pZDNfcG9zOwogICAgIHVpbnQzMl90IGhlYWRlcjsKICAgICB1aW50OF90IG1wZWdfaGVhZGVyWzVdOwotICAgIGlmIChzb3VyY2UtPnJlYWRBdCgwLCBtcGVnX2hlYWRlciwgc2l6ZW9mKG1wZWdfaGVhZGVyKSkgPCAoc3NpemVfdClzaXplb2YobXBlZ19oZWFkZXIpKSB7CisgICAgRGF0YVNvdXJjZUhlbHBlciBoZWxwZXIoc291cmNlKTsKKyAgICBpZiAoaGVscGVyLnJlYWRBdCgwLCBtcGVnX2hlYWRlciwgc2l6ZW9mKG1wZWdfaGVhZGVyKSkgPCAoc3NpemVfdClzaXplb2YobXBlZ19oZWFkZXIpKSB7CiAgICAgICAgIHJldHVybiBOVUxMOwogICAgIH0KIApAQCAtNjkxLDcgKzY5Nyw3IEBACiAgICAgICAgIEFMT0dWKCJNUEVHMVBTIGNvbnRhaW5lciBpcyBub3Qgc3VwcG9ydGVkISIpOwogICAgICAgICByZXR1cm4gTlVMTDsKICAgICB9Ci0gICAgaWYgKCFSZXN5bmMoc291cmNlLCAwLCAmcG9zLCAmcG9zdF9pZDNfcG9zLCAmaGVhZGVyKSkgeworICAgIGlmICghUmVzeW5jKCZoZWxwZXIsIDAsICZwb3MsICZwb3N0X2lkM19wb3MsICZoZWFkZXIpKSB7CiAgICAgICAgIHJldHVybiBOVUxMOwogICAgIH0KIApAQCAtNzEwLDEzICs3MTYsMTMgQEAKIGV4dGVybiAiQyIgewogLy8gVGhpcyBpcyB0aGUgb25seSBzeW1ib2wgdGhhdCBuZWVkcyB0byBiZSBleHBvcnRlZAogX19hdHRyaWJ1dGVfXyAoKHZpc2liaWxpdHkgKCJkZWZhdWx0IikpKQotTWVkaWFFeHRyYWN0b3I6OkV4dHJhY3RvckRlZiBHRVRFWFRSQUNUT1JERUYoKSB7CitFeHRyYWN0b3JEZWYgR0VURVhUUkFDVE9SREVGKCkgewogICAgIHJldHVybiB7Ci0gICAgICAgIE1lZGlhRXh0cmFjdG9yOjpFWFRSQUNUT1JERUZfVkVSU0lPTiwKKyAgICAgICAgRVhUUkFDVE9SREVGX1ZFUlNJT05fQ1VSUkVOVCwKICAgICAgICAgVVVJRCgiODEyYTNmNmMtYzhjZi00NmRlLWI1MjktMzc3NGIxNDEwM2Q0IiksCiAgICAgICAgIDEsIC8vIHZlcnNpb24KICAgICAgICAgIk1QMyBFeHRyYWN0b3IiLAotICAgICAgICBTbmlmZgorICAgICAgICB7IC52MiA9IFNuaWZmIH0KICAgICB9OwogfQogCmRpZmYgLS1naXQgYS9tZWRpYS9leHRyYWN0b3JzL21wMy9NUDNFeHRyYWN0b3IuaCBiL21lZGlhL2V4dHJhY3RvcnMvbXAzL01QM0V4dHJhY3Rvci5oCmluZGV4IDQ4NWIwY2EuLjIyNTQ3ZTIgMTAwNjQ0Ci0tLSBhL21lZGlhL2V4dHJhY3RvcnMvbXAzL01QM0V4dHJhY3Rvci5oCisrKyBiL21lZGlhL2V4dHJhY3RvcnMvbXAzL01QM0V4dHJhY3Rvci5oCkBAIC0xOSwzNSArMTksMzcgQEAKICNkZWZpbmUgTVAzX0VYVFJBQ1RPUl9IXwogCiAjaW5jbHVkZSA8dXRpbHMvRXJyb3JzLmg+Ci0jaW5jbHVkZSA8bWVkaWEvTWVkaWFFeHRyYWN0b3IuaD4KLSNpbmNsdWRlIDxtZWRpYS9zdGFnZWZyaWdodC9NZXRhRGF0YUJhc2UuaD4KKyNpbmNsdWRlIDxtZWRpYS9NZWRpYUV4dHJhY3RvclBsdWdpbkFwaS5oPgorI2luY2x1ZGUgPG1lZGlhL01lZGlhRXh0cmFjdG9yUGx1Z2luSGVscGVyLmg+CisjaW5jbHVkZSA8bWVkaWEvTmRrTWVkaWFGb3JtYXQuaD4KIAogbmFtZXNwYWNlIGFuZHJvaWQgewogCitjbGFzcyBEYXRhU291cmNlSGVscGVyOworCiBzdHJ1Y3QgQU1lc3NhZ2U7Ci1jbGFzcyBEYXRhU291cmNlQmFzZTsKIHN0cnVjdCBNUDNTZWVrZXI7CiBjbGFzcyBTdHJpbmc4Owogc3RydWN0IE1wM01ldGE7CiAKLWNsYXNzIE1QM0V4dHJhY3RvciA6IHB1YmxpYyBNZWRpYUV4dHJhY3RvciB7CitjbGFzcyBNUDNFeHRyYWN0b3IgOiBwdWJsaWMgTWVkaWFFeHRyYWN0b3JQbHVnaW5IZWxwZXJWMiB7CiBwdWJsaWM6Ci0gICAgTVAzRXh0cmFjdG9yKERhdGFTb3VyY2VCYXNlICpzb3VyY2UsIE1wM01ldGEgKm1ldGEpOworICAgIE1QM0V4dHJhY3RvcihEYXRhU291cmNlSGVscGVyICpzb3VyY2UsIE1wM01ldGEgKm1ldGEpOwogICAgIH5NUDNFeHRyYWN0b3IoKTsKIAogICAgIHZpcnR1YWwgc2l6ZV90IGNvdW50VHJhY2tzKCk7Ci0gICAgdmlydHVhbCBNZWRpYVRyYWNrICpnZXRUcmFjayhzaXplX3QgaW5kZXgpOwotICAgIHZpcnR1YWwgc3RhdHVzX3QgZ2V0VHJhY2tNZXRhRGF0YShNZXRhRGF0YUJhc2UmIG1ldGEsIHNpemVfdCBpbmRleCwgdWludDMyX3QgZmxhZ3MpOworICAgIHZpcnR1YWwgTWVkaWFUcmFja0hlbHBlclYyICpnZXRUcmFjayhzaXplX3QgaW5kZXgpOworICAgIHZpcnR1YWwgbWVkaWFfc3RhdHVzX3QgZ2V0VHJhY2tNZXRhRGF0YShBTWVkaWFGb3JtYXQgKm1ldGEsIHNpemVfdCBpbmRleCwgdWludDMyX3QgZmxhZ3MpOwogCi0gICAgdmlydHVhbCBzdGF0dXNfdCBnZXRNZXRhRGF0YShNZXRhRGF0YUJhc2UmIG1ldGEpOworICAgIHZpcnR1YWwgbWVkaWFfc3RhdHVzX3QgZ2V0TWV0YURhdGEoQU1lZGlhRm9ybWF0ICptZXRhKTsKICAgICB2aXJ0dWFsIGNvbnN0IGNoYXIgKiBuYW1lKCkgeyByZXR1cm4gIk1QM0V4dHJhY3RvciI7IH0KIAogcHJpdmF0ZToKICAgICBzdGF0dXNfdCBtSW5pdENoZWNrOwogCi0gICAgRGF0YVNvdXJjZUJhc2UgKm1EYXRhU291cmNlOworICAgIERhdGFTb3VyY2VIZWxwZXIgKm1EYXRhU291cmNlOwogICAgIG9mZjY0X3QgbUZpcnN0RnJhbWVQb3M7Ci0gICAgTWV0YURhdGFCYXNlIG1NZXRhOworICAgIEFNZWRpYUZvcm1hdCAqbU1ldGE7CiAgICAgdWludDMyX3QgbUZpeGVkSGVhZGVyOwogICAgIE1QM1NlZWtlciAqbVNlZWtlcjsKIApkaWZmIC0tZ2l0IGEvbWVkaWEvZXh0cmFjdG9ycy9tcDMvVkJSSVNlZWtlci5jcHAgYi9tZWRpYS9leHRyYWN0b3JzL21wMy9WQlJJU2Vla2VyLmNwcAppbmRleCA1MjNmMTRjLi45ZWI3MmE3IDEwMDY0NAotLS0gYS9tZWRpYS9leHRyYWN0b3JzL21wMy9WQlJJU2Vla2VyLmNwcAorKysgYi9tZWRpYS9leHRyYWN0b3JzL21wMy9WQlJJU2Vla2VyLmNwcApAQCAtMjcsNyArMjcsOSBAQAogCiAjaW5jbHVkZSA8bWVkaWEvc3RhZ2VmcmlnaHQvZm91bmRhdGlvbi9BRGVidWcuaD4KICNpbmNsdWRlIDxtZWRpYS9zdGFnZWZyaWdodC9mb3VuZGF0aW9uL0J5dGVVdGlscy5oPgotI2luY2x1ZGUgPG1lZGlhL0RhdGFTb3VyY2VCYXNlLmg+CisKKyNpbmNsdWRlIDxtZWRpYS9NZWRpYUV4dHJhY3RvclBsdWdpbkFwaS5oPgorI2luY2x1ZGUgPG1lZGlhL01lZGlhRXh0cmFjdG9yUGx1Z2luSGVscGVyLmg+CiAKIG5hbWVzcGFjZSBhbmRyb2lkIHsKIApAQCAtMzcsNyArMzksNyBAQAogCiAvLyBzdGF0aWMKIFZCUklTZWVrZXIgKlZCUklTZWVrZXI6OkNyZWF0ZUZyb21Tb3VyY2UoCi0gICAgICAgIERhdGFTb3VyY2VCYXNlICpzb3VyY2UsIG9mZjY0X3QgcG9zdF9pZDNfcG9zKSB7CisgICAgICAgIERhdGFTb3VyY2VIZWxwZXIgKnNvdXJjZSwgb2ZmNjRfdCBwb3N0X2lkM19wb3MpIHsKICAgICBvZmY2NF90IHBvcyA9IHBvc3RfaWQzX3BvczsKIAogICAgIHVpbnQ4X3QgaGVhZGVyWzRdOwpkaWZmIC0tZ2l0IGEvbWVkaWEvZXh0cmFjdG9ycy9tcDMvVkJSSVNlZWtlci5oIGIvbWVkaWEvZXh0cmFjdG9ycy9tcDMvVkJSSVNlZWtlci5oCmluZGV4IDkyMTNmNmUuLjUwNzg5OWMgMTAwNjQ0Ci0tLSBhL21lZGlhL2V4dHJhY3RvcnMvbXAzL1ZCUklTZWVrZXIuaAorKysgYi9tZWRpYS9leHRyYWN0b3JzL21wMy9WQlJJU2Vla2VyLmgKQEAgLTI0LDExICsyNCwxMSBAQAogCiBuYW1lc3BhY2UgYW5kcm9pZCB7CiAKLWNsYXNzIERhdGFTb3VyY2VCYXNlOworY2xhc3MgRGF0YVNvdXJjZUhlbHBlcjsKIAogc3RydWN0IFZCUklTZWVrZXIgOiBwdWJsaWMgTVAzU2Vla2VyIHsKICAgICBzdGF0aWMgVkJSSVNlZWtlciAqQ3JlYXRlRnJvbVNvdXJjZSgKLSAgICAgICAgICAgIERhdGFTb3VyY2VCYXNlICpzb3VyY2UsIG9mZjY0X3QgcG9zdF9pZDNfcG9zKTsKKyAgICAgICAgICAgIERhdGFTb3VyY2VIZWxwZXIgKnNvdXJjZSwgb2ZmNjRfdCBwb3N0X2lkM19wb3MpOwogCiAgICAgdmlydHVhbCBib29sIGdldER1cmF0aW9uKGludDY0X3QgKmR1cmF0aW9uVXMpOwogICAgIHZpcnR1YWwgYm9vbCBnZXRPZmZzZXRGb3JUaW1lKGludDY0X3QgKnRpbWVVcywgb2ZmNjRfdCAqcG9zKTsKZGlmZiAtLWdpdCBhL21lZGlhL2V4dHJhY3RvcnMvbXAzL1hJTkdTZWVrZXIuY3BwIGIvbWVkaWEvZXh0cmFjdG9ycy9tcDMvWElOR1NlZWtlci5jcHAKaW5kZXggMDFlMDZjYS4uOWYxZmQ3YSAxMDA2NDQKLS0tIGEvbWVkaWEvZXh0cmFjdG9ycy9tcDMvWElOR1NlZWtlci5jcHAKKysrIGIvbWVkaWEvZXh0cmFjdG9ycy9tcDMvWElOR1NlZWtlci5jcHAKQEAgLTIxLDcgKzIxLDkgQEAKICNpbmNsdWRlIDxtZWRpYS9zdGFnZWZyaWdodC9mb3VuZGF0aW9uL2F2Y191dGlscy5oPgogCiAjaW5jbHVkZSA8bWVkaWEvc3RhZ2VmcmlnaHQvZm91bmRhdGlvbi9CeXRlVXRpbHMuaD4KLSNpbmNsdWRlIDxtZWRpYS9EYXRhU291cmNlQmFzZS5oPgorCisjaW5jbHVkZSA8bWVkaWEvTWVkaWFFeHRyYWN0b3JQbHVnaW5BcGkuaD4KKyNpbmNsdWRlIDxtZWRpYS9NZWRpYUV4dHJhY3RvclBsdWdpbkhlbHBlci5oPgogCiBuYW1lc3BhY2UgYW5kcm9pZCB7CiAKQEAgLTc5LDcgKzgxLDcgQEAKIAogLy8gc3RhdGljCiBYSU5HU2Vla2VyICpYSU5HU2Vla2VyOjpDcmVhdGVGcm9tU291cmNlKAotICAgICAgICBEYXRhU291cmNlQmFzZSAqc291cmNlLCBvZmY2NF90IGZpcnN0X2ZyYW1lX3BvcykgeworICAgICAgICBEYXRhU291cmNlSGVscGVyICpzb3VyY2UsIG9mZjY0X3QgZmlyc3RfZnJhbWVfcG9zKSB7CiAKICAgICB1aW50OF90IGJ1ZmZlcls0XTsKICAgICBpbnQgb2Zmc2V0ID0gZmlyc3RfZnJhbWVfcG9zOwpkaWZmIC0tZ2l0IGEvbWVkaWEvZXh0cmFjdG9ycy9tcDMvWElOR1NlZWtlci5oIGIvbWVkaWEvZXh0cmFjdG9ycy9tcDMvWElOR1NlZWtlci5oCmluZGV4IDU4NjdlYWUuLjlhY2VlMzggMTAwNjQ0Ci0tLSBhL21lZGlhL2V4dHJhY3RvcnMvbXAzL1hJTkdTZWVrZXIuaAorKysgYi9tZWRpYS9leHRyYWN0b3JzL21wMy9YSU5HU2Vla2VyLmgKQEAgLTIyLDExICsyMiwxMSBAQAogCiBuYW1lc3BhY2UgYW5kcm9pZCB7CiAKLWNsYXNzIERhdGFTb3VyY2VCYXNlOworY2xhc3MgRGF0YVNvdXJjZUhlbHBlcjsKIAogc3RydWN0IFhJTkdTZWVrZXIgOiBwdWJsaWMgTVAzU2Vla2VyIHsKICAgICBzdGF0aWMgWElOR1NlZWtlciAqQ3JlYXRlRnJvbVNvdXJjZSgKLSAgICAgICAgICAgIERhdGFTb3VyY2VCYXNlICpzb3VyY2UsIG9mZjY0X3QgZmlyc3RfZnJhbWVfcG9zKTsKKyAgICAgICAgICAgIERhdGFTb3VyY2VIZWxwZXIgKnNvdXJjZSwgb2ZmNjRfdCBmaXJzdF9mcmFtZV9wb3MpOwogCiAgICAgdmlydHVhbCBib29sIGdldER1cmF0aW9uKGludDY0X3QgKmR1cmF0aW9uVXMpOwogICAgIHZpcnR1YWwgYm9vbCBnZXRPZmZzZXRGb3JUaW1lKGludDY0X3QgKnRpbWVVcywgb2ZmNjRfdCAqcG9zKTsKZGlmZiAtLWdpdCBhL21lZGlhL2V4dHJhY3RvcnMvbXA0L0FDNFBhcnNlci5jcHAgYi9tZWRpYS9leHRyYWN0b3JzL21wNC9BQzRQYXJzZXIuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE5NWMyZGIKLS0tIC9kZXYvbnVsbAorKysgYi9tZWRpYS9leHRyYWN0b3JzL21wNC9BQzRQYXJzZXIuY3BwCkBAIC0wLDAgKzEsNjI0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE4IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KKworLy8jZGVmaW5lIExPR19OREVCVUcgMAorI2RlZmluZSBMT0dfVEFHICJBQzRQYXJzZXIiCisKKyNpbmNsdWRlIDxpbnR0eXBlcy5oPgorI2luY2x1ZGUgPHV0aWxzL0xvZy5oPgorI2luY2x1ZGUgPHV0aWxzL21pc2MuaD4KKworI2luY2x1ZGUgIkFDNFBhcnNlci5oIgorCisjZGVmaW5lIEJPT0xTVFIoYSkgICgoYSk/InRydWUiOiJmYWxzZSIpCisjZGVmaW5lIEJZVEVfQUxJR04gbUJpdFJlYWRlci5za2lwQml0cyhtQml0UmVhZGVyLm51bUJpdHNMZWZ0KCkgJSA4KQorI2RlZmluZSBDSEVDS19CSVRTX0xFRlQobikgaWYgKG1CaXRSZWFkZXIubnVtQml0c0xlZnQoKSA8IG4pIHtyZXR1cm4gZmFsc2U7fQorCituYW1lc3BhY2UgYW5kcm9pZCB7CisKK0FDNFBhcnNlcjo6QUM0UGFyc2VyKCkgeworfQorCitBQzREU0lQYXJzZXI6OkFDNERTSVBhcnNlcihBQml0UmVhZGVyICZicikKKyAgICA6IG1CaXRSZWFkZXIoYnIpeworCisgICAgbURTSVNpemUgPSBtQml0UmVhZGVyLm51bUJpdHNMZWZ0KCk7Cit9CisKKy8vIEVUU0kgVFMgMTAzIDE5MC0yIFYxLjEuMSAoMjAxNS0wOSkgVGFibGUgNzk6IGNoYW5uZWxfbW9kZQorc3RhdGljIGNvbnN0IGNoYXIgKkNoYW5uZWxNb2Rlc1tdID0geworICAgICJtb25vIiwKKyAgICAic3RlcmVvIiwKKyAgICAiMy4wIiwKKyAgICAiNS4wIiwKKyAgICAiNS4xIiwKKyAgICAiNy4wICgzLzQvMCkiLAorICAgICI3LjEgKDMvNC8wLjEpIiwKKyAgICAiNy4wICg1LzIvMCkiLAorICAgICI3LjEgKDUvMi8wLjEpIiwKKyAgICAiNy4wICgzLzIvMikiLAorICAgICI3LjEgKDMvMi8yLjEpIiwKKyAgICAiNy4wLjQiLAorICAgICI3LjEuNCIsCisgICAgIjkuMC40IiwKKyAgICAiOS4xLjQiLAorICAgICIyMi4yIgorfTsKKworc3RhdGljIGNvbnN0IGNoYXIqIENvbnRlbnRDbGFzc2lmaWVyW10gPSB7CisgICAgIkNvbXBsZXRlIE1haW4iLAorICAgICJNdXNpYyBhbmQgRWZmZWN0cyIsCisgICAgIlZpc3VhbGx5IEltcGFpcmVkIiwKKyAgICAiSGVhcmluZyBJbXBhaXJlZCIsCisgICAgIkRpYWxvZyIsCisgICAgIkNvbW1lbnRhcnkiLAorICAgICJFbWVyZ2VuY3kiLAorICAgICJWb2ljZSBPdmVyIgorfTsKKworYm9vbCBBQzREU0lQYXJzZXI6OnBhcnNlTGFuZ3VhZ2VUYWcodWludDMyX3QgcHJlc2VudGF0aW9uSUQsIHVpbnQzMl90IHN1YnN0cmVhbUlEKXsKKyAgICBDSEVDS19CSVRTX0xFRlQoNik7CisgICAgdWludDMyX3Qgbl9sYW5ndWFnZV90YWdfYnl0ZXMgPSBtQml0UmVhZGVyLmdldEJpdHMoNik7CisgICAgaWYgKG5fbGFuZ3VhZ2VfdGFnX2J5dGVzIDwgMiB8fCBuX2xhbmd1YWdlX3RhZ19ieXRlcyA+PSA0MikgeworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorICAgIENIRUNLX0JJVFNfTEVGVChuX2xhbmd1YWdlX3RhZ19ieXRlcyAqIDgpOworICAgIGNoYXIgbGFuZ3VhZ2VfdGFnX2J5dGVzWzQyXTsgLy8gVFMgMTAzIDE5MCBwYXJ0IDEgNC4zLjMuOC43CisgICAgZm9yICh1aW50MzJfdCBpID0gMDsgaSA8IG5fbGFuZ3VhZ2VfdGFnX2J5dGVzOyBpKyspIHsKKyAgICAgICAgbGFuZ3VhZ2VfdGFnX2J5dGVzW2ldID0gKGNoYXIpbUJpdFJlYWRlci5nZXRCaXRzKDgpOworICAgIH0KKyAgICBsYW5ndWFnZV90YWdfYnl0ZXNbbl9sYW5ndWFnZV90YWdfYnl0ZXNdID0gMDsKKyAgICBBTE9HVigiJXUuJXU6IGxhbmd1YWdlX3RhZyA9ICVzXG4iLCBwcmVzZW50YXRpb25JRCwgc3Vic3RyZWFtSUQsIGxhbmd1YWdlX3RhZ19ieXRlcyk7CisKKyAgICBzdGQ6OnN0cmluZyBsYW5ndWFnZShsYW5ndWFnZV90YWdfYnl0ZXMsIG5fbGFuZ3VhZ2VfdGFnX2J5dGVzKTsKKyAgICBtUHJlc2VudGF0aW9uc1twcmVzZW50YXRpb25JRF0ubUxhbmd1YWdlID0gbGFuZ3VhZ2U7CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworLy8gVFMgMTAzIDE5MC0xIHYxLjIuMSBFLjUgYW5kIFRTIDEwMyAxOTAtMiB2MS4xLjEgRS45Citib29sIEFDNERTSVBhcnNlcjo6cGFyc2VTdWJzdHJlYW1EU0kodWludDMyX3QgcHJlc2VudGF0aW9uSUQsIHVpbnQzMl90IHN1YnN0cmVhbUlEKXsKKyAgICBDSEVDS19CSVRTX0xFRlQoNSk7CisgICAgdWludDMyX3QgY2hhbm5lbF9tb2RlID0gbUJpdFJlYWRlci5nZXRCaXRzKDUpOworICAgIENIRUNLX0JJVFNfTEVGVCgyKTsKKyAgICB1aW50MzJfdCBkc2lfc2ZfbXVsdGlwbGllciA9IG1CaXRSZWFkZXIuZ2V0Qml0cygyKTsKKyAgICBDSEVDS19CSVRTX0xFRlQoMSk7CisgICAgYm9vbCBiX3N1YnN0cmVhbV9iaXRyYXRlX2luZGljYXRvciA9IChtQml0UmVhZGVyLmdldEJpdHMoMSkgPT0gMSk7CisgICAgQUxPR1YoIiV1LiV1OiBjaGFubmVsX21vZGUgPSAldSAoJXMpXG4iLCBwcmVzZW50YXRpb25JRCwgc3Vic3RyZWFtSUQsIGNoYW5uZWxfbW9kZSwKKyAgICBjaGFubmVsX21vZGUgPCBORUxFTShDaGFubmVsTW9kZXMpID8gQ2hhbm5lbE1vZGVzW2NoYW5uZWxfbW9kZV0gOiAicmVzZXJ2ZWQiKTsKKyAgICBBTE9HVigiJXUuJXU6IGRzaV9zZl9tdWx0aXBsaWVyID0gJXVcbiIsIHByZXNlbnRhdGlvbklELAorICAgICAgICBzdWJzdHJlYW1JRCwgZHNpX3NmX211bHRpcGxpZXIpOworICAgIEFMT0dWKCIldS4ldTogYl9zdWJzdHJlYW1fYml0cmF0ZV9pbmRpY2F0b3IgPSAlc1xuIiwgcHJlc2VudGF0aW9uSUQsCisgICAgICAgIHN1YnN0cmVhbUlELCBCT09MU1RSKGJfc3Vic3RyZWFtX2JpdHJhdGVfaW5kaWNhdG9yKSk7CisKKyAgICBpZiAoYl9zdWJzdHJlYW1fYml0cmF0ZV9pbmRpY2F0b3IpIHsKKyAgICAgICAgQ0hFQ0tfQklUU19MRUZUKDUpOworICAgICAgICB1aW50MzJfdCBzdWJzdHJlYW1fYml0cmF0ZV9pbmRpY2F0b3IgPSBtQml0UmVhZGVyLmdldEJpdHMoNSk7CisgICAgICAgIEFMT0dWKCIldS4ldTogc3Vic3RyZWFtX2JpdHJhdGVfaW5kaWNhdG9yID0gJXVcbiIsIHByZXNlbnRhdGlvbklELCBzdWJzdHJlYW1JRCwKKyAgICAgICAgICAgIHN1YnN0cmVhbV9iaXRyYXRlX2luZGljYXRvcik7CisgICAgfQorICAgIGlmIChjaGFubmVsX21vZGUgPj0gNyAmJiBjaGFubmVsX21vZGUgPD0gMTApIHsKKyAgICAgICAgQ0hFQ0tfQklUU19MRUZUKDEpOworICAgICAgICB1aW50MzJfdCBhZGRfY2hfYmFzZSA9IG1CaXRSZWFkZXIuZ2V0Qml0cygxKTsKKyAgICAgICAgQUxPR1YoIiV1LiV1OiBhZGRfY2hfYmFzZSA9ICV1XG4iLCBwcmVzZW50YXRpb25JRCwgc3Vic3RyZWFtSUQsIGFkZF9jaF9iYXNlKTsKKyAgICB9CisgICAgQ0hFQ0tfQklUU19MRUZUKDEpOworICAgIGJvb2wgYl9jb250ZW50X3R5cGUgPSAobUJpdFJlYWRlci5nZXRCaXRzKDEpID09IDEpOworICAgIEFMT0dWKCIldS4ldTogYl9jb250ZW50X3R5cGUgPSAlc1xuIiwgcHJlc2VudGF0aW9uSUQsIHN1YnN0cmVhbUlELCBCT09MU1RSKGJfY29udGVudF90eXBlKSk7CisgICAgaWYgKGJfY29udGVudF90eXBlKSB7CisgICAgICAgIENIRUNLX0JJVFNfTEVGVCgzKTsKKyAgICAgICAgdWludDMyX3QgY29udGVudF9jbGFzc2lmaWVyID0gbUJpdFJlYWRlci5nZXRCaXRzKDMpOworICAgICAgICBBTE9HVigiJXUuJXU6IGNvbnRlbnRfY2xhc3NpZmllciA9ICV1ICglcylcbiIsIHByZXNlbnRhdGlvbklELCBzdWJzdHJlYW1JRCwKKyAgICAgICAgICAgIGNvbnRlbnRfY2xhc3NpZmllciwgQ29udGVudENsYXNzaWZpZXJbY29udGVudF9jbGFzc2lmaWVyXSk7CisKKyAgICAgICAgLy8gRm9yIHN0cmVhbXMgYmFzZWQgb24gVFMgMTAzIDE5MCBwYXJ0IDEgdGhlIHByZXNlbnRhdGlvbiBsZXZlbCBjaGFubmVsX21vZGUgZG9lc24ndAorICAgICAgICAvLyBleGlzdCBhbmQgc28gd2UgdXNlIHRoZSBjaGFubmVsX21vZGUgZnJvbSBlaXRoZXIgdGhlIENNIG9yIE0mRSBzdWJzdHJlYW0KKyAgICAgICAgLy8gKHRoZXkgYXJlIG11dHVhbGx5IGV4Y2x1c2l2ZSkKKyAgICAgICAgaWYgKG1QcmVzZW50YXRpb25zW3ByZXNlbnRhdGlvbklEXS5tQ2hhbm5lbE1vZGUgPT0gLTEgJiYKKyAgICAgICAgICAgIChjb250ZW50X2NsYXNzaWZpZXIgPT0gMCB8fCBjb250ZW50X2NsYXNzaWZpZXIgPT0gMSkpIHsKKyAgICAgICAgICAgIG1QcmVzZW50YXRpb25zW3ByZXNlbnRhdGlvbklEXS5tQ2hhbm5lbE1vZGUgPSBjaGFubmVsX21vZGU7CisgICAgICAgIH0KKyAgICAgICAgbVByZXNlbnRhdGlvbnNbcHJlc2VudGF0aW9uSURdLm1Db250ZW50Q2xhc3NpZmllciA9IGNvbnRlbnRfY2xhc3NpZmllcjsKKyAgICAgICAgQ0hFQ0tfQklUU19MRUZUKDEpOworICAgICAgICBib29sIGJfbGFuZ3VhZ2VfaW5kaWNhdG9yID0gKG1CaXRSZWFkZXIuZ2V0Qml0cygxKSA9PSAxKTsKKyAgICAgICAgQUxPR1YoIiV1LiV1OiBiX2xhbmd1YWdlX2luZGljYXRvciA9ICVzXG4iLCBwcmVzZW50YXRpb25JRCwgc3Vic3RyZWFtSUQsCisgICAgICAgICAgICBCT09MU1RSKGJfbGFuZ3VhZ2VfaW5kaWNhdG9yKSk7CisgICAgICAgIGlmIChiX2xhbmd1YWdlX2luZGljYXRvcikgeworICAgICAgICAgICAgaWYgKCFwYXJzZUxhbmd1YWdlVGFnKHByZXNlbnRhdGlvbklELCBzdWJzdHJlYW1JRCkpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworLy8gRVRTSSBUUyAxMDMgMTkwLTIgdjEuMS4xIHNlY3Rpb24gRS4xMQorYm9vbCBBQzREU0lQYXJzZXI6OnBhcnNlU3Vic3RyZWFtR3JvdXBEU0kodWludDMyX3QgcHJlc2VudGF0aW9uSUQsIHVpbnQzMl90IGdyb3VwSUQpCit7CisgICAgQ0hFQ0tfQklUU19MRUZUKDEpOworICAgIGJvb2wgYl9zdWJzdHJlYW1zX3ByZXNlbnQgPSAobUJpdFJlYWRlci5nZXRCaXRzKDEpID09IDEpOworICAgIENIRUNLX0JJVFNfTEVGVCgxKTsKKyAgICBib29sIGJfaHNmX2V4dCA9IChtQml0UmVhZGVyLmdldEJpdHMoMSkgPT0gMSk7CisgICAgQ0hFQ0tfQklUU19MRUZUKDEpOworICAgIGJvb2wgYl9jaGFubmVsX2NvZGVkID0gKG1CaXRSZWFkZXIuZ2V0Qml0cygxKSA9PSAxKTsKKyAgICBDSEVDS19CSVRTX0xFRlQoOCk7CisgICAgdWludDMyX3Qgbl9zdWJzdHJlYW1zID0gbUJpdFJlYWRlci5nZXRCaXRzKDgpOworICAgIEFMT0dWKCIldS4ldTogYl9zdWJzdHJlYW1zX3ByZXNlbnQgPSAlc1xuIiwgcHJlc2VudGF0aW9uSUQsIGdyb3VwSUQsCisgICAgICAgIEJPT0xTVFIoYl9zdWJzdHJlYW1zX3ByZXNlbnQpKTsKKyAgICBBTE9HVigiJXUuJXU6IGJfaHNmX2V4dCA9ICVzXG4iLCBwcmVzZW50YXRpb25JRCwgZ3JvdXBJRCwgQk9PTFNUUihiX2hzZl9leHQpKTsKKyAgICBBTE9HVigiJXUuJXU6IGJfY2hhbm5lbF9jb2RlZCA9ICVzXG4iLCBwcmVzZW50YXRpb25JRCwgZ3JvdXBJRCwgQk9PTFNUUihiX2NoYW5uZWxfY29kZWQpKTsKKyAgICBBTE9HVigiJXUuJXU6IG5fc3Vic3RyZWFtcyA9ICV1XG4iLCBwcmVzZW50YXRpb25JRCwgZ3JvdXBJRCwgbl9zdWJzdHJlYW1zKTsKKworICAgIGZvciAodWludDMyX3QgaSA9IDA7IGkgPCBuX3N1YnN0cmVhbXM7IGkrKykgeworICAgICAgICBDSEVDS19CSVRTX0xFRlQoMik7CisgICAgICAgIHVpbnQzMl90IGRzaV9zZl9tdWx0aXBsaWVyID0gbUJpdFJlYWRlci5nZXRCaXRzKDIpOworICAgICAgICBDSEVDS19CSVRTX0xFRlQoMSk7CisgICAgICAgIGJvb2wgYl9zdWJzdHJlYW1fYml0cmF0ZV9pbmRpY2F0b3IgPSAobUJpdFJlYWRlci5nZXRCaXRzKDEpID09IDEpOworICAgICAgICBBTE9HVigiJXUuJXUuJXU6IGRzaV9zZl9tdWx0aXBsaWVyID0gJXVcbiIsIHByZXNlbnRhdGlvbklELCBncm91cElELCBpLCBkc2lfc2ZfbXVsdGlwbGllcik7CisgICAgICAgIEFMT0dWKCIldS4ldS4ldTogYl9zdWJzdHJlYW1fYml0cmF0ZV9pbmRpY2F0b3IgPSAlc1xuIiwgcHJlc2VudGF0aW9uSUQsIGdyb3VwSUQsIGksCisgICAgICAgICAgICBCT09MU1RSKGJfc3Vic3RyZWFtX2JpdHJhdGVfaW5kaWNhdG9yKSk7CisKKyAgICAgICAgaWYgKGJfc3Vic3RyZWFtX2JpdHJhdGVfaW5kaWNhdG9yKSB7CisgICAgICAgICAgICBDSEVDS19CSVRTX0xFRlQoNSk7CisgICAgICAgICAgICB1aW50MzJfdCBzdWJzdHJlYW1fYml0cmF0ZV9pbmRpY2F0b3IgPSBtQml0UmVhZGVyLmdldEJpdHMoNSk7CisgICAgICAgICAgICBBTE9HVigiJXUuJXUuJXU6IHN1YnN0cmVhbV9iaXRyYXRlX2luZGljYXRvciA9ICV1XG4iLCBwcmVzZW50YXRpb25JRCwgZ3JvdXBJRCwgaSwKKyAgICAgICAgICAgICAgICBzdWJzdHJlYW1fYml0cmF0ZV9pbmRpY2F0b3IpOworICAgICAgICB9CisgICAgICAgIGlmIChiX2NoYW5uZWxfY29kZWQpIHsKKyAgICAgICAgICAgIENIRUNLX0JJVFNfTEVGVCgyNCk7CisgICAgICAgICAgICB1aW50MzJfdCBkc2lfc3Vic3RyZWFtX2NoYW5uZWxfbWFzayA9IG1CaXRSZWFkZXIuZ2V0Qml0cygyNCk7CisgICAgICAgICAgICBBTE9HVigiJXUuJXUuJXU6IGRzaV9zdWJzdHJlYW1fY2hhbm5lbF9tYXNrID0gMHglMDZ4XG4iLCBwcmVzZW50YXRpb25JRCwgZ3JvdXBJRCwgaSwKKyAgICAgICAgICAgICAgICBkc2lfc3Vic3RyZWFtX2NoYW5uZWxfbWFzayk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBDSEVDS19CSVRTX0xFRlQoMSk7CisgICAgICAgICAgICBib29sIGJfYWpvYyA9IChtQml0UmVhZGVyLmdldEJpdHMoMSkgPT0gMSk7CisgICAgICAgICAgICBBTE9HVigiJXUuJXUuJXU6IGJfYWpvYyA9ICVzXG4iLCBwcmVzZW50YXRpb25JRCwgZ3JvdXBJRCwgaSwgQk9PTFNUUihiX2Fqb2MpKTsKKyAgICAgICAgICAgIGlmIChiX2Fqb2MpIHsKKyAgICAgICAgICAgICAgICBDSEVDS19CSVRTX0xFRlQoMSk7CisgICAgICAgICAgICAgICAgYm9vbCBiX3N0YXRpY19kbXggPSAobUJpdFJlYWRlci5nZXRCaXRzKDEpID09IDEpOworICAgICAgICAgICAgICAgIEFMT0dWKCIldS4ldS4ldTogYl9zdGF0aWNfZG14ID0gJXNcbiIsIHByZXNlbnRhdGlvbklELCBncm91cElELCBpLAorICAgICAgICAgICAgICAgICAgICBCT09MU1RSKGJfc3RhdGljX2RteCkpOworICAgICAgICAgICAgICAgIGlmICghYl9zdGF0aWNfZG14KSB7CisgICAgICAgICAgICAgICAgICAgIENIRUNLX0JJVFNfTEVGVCg0KTsKKyAgICAgICAgICAgICAgICAgICAgdWludDMyX3Qgbl9kbXhfb2JqZWN0c19taW51czEgPSBtQml0UmVhZGVyLmdldEJpdHMoNCk7CisgICAgICAgICAgICAgICAgICAgIEFMT0dWKCIldS4ldS4ldTogbl9kbXhfb2JqZWN0c19taW51czEgPSAldVxuIiwgcHJlc2VudGF0aW9uSUQsIGdyb3VwSUQsIGksCisgICAgICAgICAgICAgICAgICAgICAgICBuX2RteF9vYmplY3RzX21pbnVzMSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIENIRUNLX0JJVFNfTEVGVCg2KTsKKyAgICAgICAgICAgICAgICB1aW50MzJfdCBuX3VteF9vYmplY3RzX21pbnVzMSA9IG1CaXRSZWFkZXIuZ2V0Qml0cyg2KTsKKyAgICAgICAgICAgICAgICBBTE9HVigiJXUuJXUuJXU6IG5fdW14X29iamVjdHNfbWludXMxID0gJXVcbiIsIHByZXNlbnRhdGlvbklELCBncm91cElELCBpLAorICAgICAgICAgICAgICAgICAgICBuX3VteF9vYmplY3RzX21pbnVzMSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBDSEVDS19CSVRTX0xFRlQoNCk7CisgICAgICAgICAgICBtQml0UmVhZGVyLnNraXBCaXRzKDQpOyAvLyBvYmplY3RzX2Fzc2lnbm1lbnRfbWFzaworICAgICAgICB9CisgICAgfQorCisgICAgQ0hFQ0tfQklUU19MRUZUKDEpOworICAgIGJvb2wgYl9jb250ZW50X3R5cGUgPSAobUJpdFJlYWRlci5nZXRCaXRzKDEpID09IDEpOworICAgIEFMT0dWKCIldS4ldTogYl9jb250ZW50X3R5cGUgPSAlc1xuIiwgcHJlc2VudGF0aW9uSUQsIGdyb3VwSUQsIEJPT0xTVFIoYl9jb250ZW50X3R5cGUpKTsKKyAgICBpZiAoYl9jb250ZW50X3R5cGUpIHsKKyAgICAgICAgQ0hFQ0tfQklUU19MRUZUKDMpOworICAgICAgICB1aW50MzJfdCBjb250ZW50X2NsYXNzaWZpZXIgPSBtQml0UmVhZGVyLmdldEJpdHMoMyk7CisgICAgICAgIEFMT0dWKCIldS4ldTogY29udGVudF9jbGFzc2lmaWVyID0gJXMgKCV1KVxuIiwgcHJlc2VudGF0aW9uSUQsIGdyb3VwSUQsCisgICAgICAgICAgICBDb250ZW50Q2xhc3NpZmllcltjb250ZW50X2NsYXNzaWZpZXJdLCBjb250ZW50X2NsYXNzaWZpZXIpOworCisgICAgICAgIG1QcmVzZW50YXRpb25zW3ByZXNlbnRhdGlvbklEXS5tQ29udGVudENsYXNzaWZpZXIgPSBjb250ZW50X2NsYXNzaWZpZXI7CisKKyAgICAgICAgQ0hFQ0tfQklUU19MRUZUKDEpOworICAgICAgICBib29sIGJfbGFuZ3VhZ2VfaW5kaWNhdG9yID0gKG1CaXRSZWFkZXIuZ2V0Qml0cygxKSA9PSAxKTsKKyAgICAgICAgQUxPR1YoIiV1LiV1OiBiX2xhbmd1YWdlX2luZGljYXRvciA9ICVzXG4iLCBwcmVzZW50YXRpb25JRCwgZ3JvdXBJRCwKKyAgICAgICAgICAgIEJPT0xTVFIoYl9sYW5ndWFnZV9pbmRpY2F0b3IpKTsKKworICAgICAgICBpZiAoYl9sYW5ndWFnZV9pbmRpY2F0b3IpIHsKKyAgICAgICAgICAgIGlmICghcGFyc2VMYW5ndWFnZVRhZyhwcmVzZW50YXRpb25JRCwgZ3JvdXBJRCkpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBBQzREU0lQYXJzZXI6OnBhcnNlQml0cmF0ZURzaSgpIHsKKyAgICBDSEVDS19CSVRTX0xFRlQoMiArIDMyICsgMzIpOworICAgIG1CaXRSZWFkZXIuc2tpcEJpdHMoMik7IC8vIGJpdF9yYXRlX21vZGUKKyAgICBtQml0UmVhZGVyLnNraXBCaXRzKDMyKTsgLy8gYml0X3JhdGUKKyAgICBtQml0UmVhZGVyLnNraXBCaXRzKDMyKTsgLy8gYml0X3JhdGVfcHJlY2lzaW9uCisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworLy8gVFMgMTAzIDE5MC0xIHNlY3Rpb24gRS40IChhYzRfZHNpKSBhbmQgVFMgMTAzIDE5MC0yIHNlY3Rpb24gRS42IChhYzRfZHNpX3YxKQorYm9vbCBBQzREU0lQYXJzZXI6OnBhcnNlKCkgeworICAgIENIRUNLX0JJVFNfTEVGVCgzKTsKKyAgICB1aW50MzJfdCBhYzRfZHNpX3ZlcnNpb24gPSBtQml0UmVhZGVyLmdldEJpdHMoMyk7CisgICAgaWYgKGFjNF9kc2lfdmVyc2lvbiA+IDEpIHsKKyAgICAgICAgQUxPR0UoImVycm9yIHdoaWxlIHBhcnNpbmcgYWMtNCBkc2k6IG9ubHkgdmVyc2lvbnMgMCBhbmQgMSBhcmUgc3VwcG9ydGVkIik7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBDSEVDS19CSVRTX0xFRlQoNyArIDEgKyA0ICsgOSk7CisgICAgdWludDMyX3QgYml0c3RyZWFtX3ZlcnNpb24gPSBtQml0UmVhZGVyLmdldEJpdHMoNyk7CisgICAgbUJpdFJlYWRlci5za2lwQml0cygxKTsgLy8gZnNfaW5kZXgKKyAgICBtQml0UmVhZGVyLnNraXBCaXRzKDQpOyAvLyBmcmFtZV9yYXRlX2luZGV4CisgICAgdWludDMyX3Qgbl9wcmVzZW50YXRpb25zID0gbUJpdFJlYWRlci5nZXRCaXRzKDkpOworCisgICAgaW50MzJfdCBzaG9ydF9wcm9ncmFtX2lkID0gLTE7CisgICAgaWYgKGJpdHN0cmVhbV92ZXJzaW9uID4gMSkgeworICAgICAgICBpZiAoYWM0X2RzaV92ZXJzaW9uID09IDApeworICAgICAgICAgICAgQUxPR0UoImludmFsaWQgYWM0IGRzaSIpOworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgICAgIENIRUNLX0JJVFNfTEVGVCgxKTsKKyAgICAgICAgYm9vbCBiX3Byb2dyYW1faWQgPSAobUJpdFJlYWRlci5nZXRCaXRzKDEpID09IDEpOworICAgICAgICBpZiAoYl9wcm9ncmFtX2lkKSB7CisgICAgICAgICAgICBDSEVDS19CSVRTX0xFRlQoMTYgKyAxKTsKKyAgICAgICAgICAgIHNob3J0X3Byb2dyYW1faWQgPSBtQml0UmVhZGVyLmdldEJpdHMoMTYpOworICAgICAgICAgICAgYm9vbCBiX3V1aWQgPSAobUJpdFJlYWRlci5nZXRCaXRzKDEpID09IDEpOworICAgICAgICAgICAgaWYgKGJfdXVpZCkgeworICAgICAgICAgICAgICAgIGNvbnN0IHVpbnQzMl90IGtBQzRVVUlEU2l6ZUluQnl0ZXMgPSAxNjsKKyAgICAgICAgICAgICAgICBjaGFyIHByb2dyYW1fdXVpZFtrQUM0VVVJRFNpemVJbkJ5dGVzXTsKKyAgICAgICAgICAgICAgICBDSEVDS19CSVRTX0xFRlQoa0FDNFVVSURTaXplSW5CeXRlcyAqIDgpOworICAgICAgICAgICAgICAgIGZvciAodWludDMyX3QgaSA9IDA7IGkgPCBrQUM0VVVJRFNpemVJbkJ5dGVzOyBpKyspIHsKKyAgICAgICAgICAgICAgICAgICAgcHJvZ3JhbV91dWlkW2ldID0gKGNoYXIpKG1CaXRSZWFkZXIuZ2V0Qml0cyg4KSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIEFMT0dWKCJVVUlEID0gJXMiLCBwcm9ncmFtX3V1aWQpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCisgICAgaWYgKGFjNF9kc2lfdmVyc2lvbiA9PSAxKSB7CisgICAgICAgIGlmICghcGFyc2VCaXRyYXRlRHNpKCkpIHsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgICAgICBCWVRFX0FMSUdOOworICAgIH0KKworICAgIGZvciAodWludDMyX3QgcHJlc2VudGF0aW9uID0gMDsgcHJlc2VudGF0aW9uIDwgbl9wcmVzZW50YXRpb25zOyBwcmVzZW50YXRpb24rKykgeworICAgICAgICBtUHJlc2VudGF0aW9uc1twcmVzZW50YXRpb25dLm1Qcm9ncmFtSUQgPSBzaG9ydF9wcm9ncmFtX2lkOworICAgICAgICAvLyBrbm93biBhcyBiX3NpbmdsZV9zdWJzdHJlYW0gaW4gYWM0X2RzaV92ZXJzaW9uIDAKKyAgICAgICAgYm9vbCBiX3NpbmdsZV9zdWJzdHJlYW1fZ3JvdXAgPSBmYWxzZTsKKyAgICAgICAgdWludDMyX3QgcHJlc2VudGF0aW9uX2NvbmZpZyA9IDAsIHByZXNlbnRhdGlvbl92ZXJzaW9uID0gMDsKKyAgICAgICAgdWludDMyX3QgcHJlc19ieXRlcyA9IDA7CisKKyAgICAgICAgaWYgKGFjNF9kc2lfdmVyc2lvbiA9PSAwKSB7CisgICAgICAgICAgICBDSEVDS19CSVRTX0xFRlQoMSArIDUgKyA1KTsKKyAgICAgICAgICAgIGJfc2luZ2xlX3N1YnN0cmVhbV9ncm91cCA9IChtQml0UmVhZGVyLmdldEJpdHMoMSkgPT0gMSk7CisgICAgICAgICAgICBwcmVzZW50YXRpb25fY29uZmlnID0gbUJpdFJlYWRlci5nZXRCaXRzKDUpOworICAgICAgICAgICAgcHJlc2VudGF0aW9uX3ZlcnNpb24gPSBtQml0UmVhZGVyLmdldEJpdHMoNSk7CisgICAgICAgIH0gZWxzZSBpZiAoYWM0X2RzaV92ZXJzaW9uID09IDEpIHsKKyAgICAgICAgICAgIENIRUNLX0JJVFNfTEVGVCg4ICsgOCk7CisgICAgICAgICAgICBwcmVzZW50YXRpb25fdmVyc2lvbiA9IG1CaXRSZWFkZXIuZ2V0Qml0cyg4KTsKKyAgICAgICAgICAgIHByZXNfYnl0ZXMgPSBtQml0UmVhZGVyLmdldEJpdHMoOCk7CisgICAgICAgICAgICBpZiAocHJlc19ieXRlcyA9PSAweGZmKSB7CisgICAgICAgICAgICAgICAgQ0hFQ0tfQklUU19MRUZUKDE2KTsKKyAgICAgICAgICAgICAgICBwcmVzX2J5dGVzICs9IG1CaXRSZWFkZXIuZ2V0Qml0cygxNik7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBBTE9HVigiJXU6IHByZXNfYnl0ZXMgPSAldVxuIiwgcHJlc2VudGF0aW9uLCBwcmVzX2J5dGVzKTsKKyAgICAgICAgICAgIGlmIChwcmVzZW50YXRpb25fdmVyc2lvbiA+IDEpIHsKKyAgICAgICAgICAgICAgICBDSEVDS19CSVRTX0xFRlQocHJlc19ieXRlcyAqIDgpOworICAgICAgICAgICAgICAgIG1CaXRSZWFkZXIuc2tpcEJpdHMocHJlc19ieXRlcyAqIDgpOworICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgfQorICAgICAgICAgICAgLy8gYWM0X3ByZXNlbnRhdGlvbl92MF9kc2koKSBhbmQgYWM0X3ByZXNlbnRhdGlvbl92MV9kc2koKSBib3RoCisgICAgICAgICAgICAvLyBzdGFydCB3aXRoIGEgcHJlc2VudGF0aW9uX2NvbmZpZyBvZiA1IGJpdHMKKyAgICAgICAgICAgIENIRUNLX0JJVFNfTEVGVCg1KTsKKyAgICAgICAgICAgIHByZXNlbnRhdGlvbl9jb25maWcgPSBtQml0UmVhZGVyLmdldEJpdHMoNSk7CisgICAgICAgICAgICBiX3NpbmdsZV9zdWJzdHJlYW1fZ3JvdXAgPSAocHJlc2VudGF0aW9uX2NvbmZpZyA9PSAweDFmKTsKKyAgICAgICAgfQorCisgICAgICAgIHN0YXRpYyBjb25zdCBjaGFyICpQcmVzZW50YXRpb25Db25maWdbXSA9IHsKKyAgICAgICAgICAgICJNdXNpYyZFZmZlY3RzICsgRGlhbG9nIiwKKyAgICAgICAgICAgICJNYWluICsgREUiLAorICAgICAgICAgICAgIk1haW4gKyBBc3NvY2lhdGUiLAorICAgICAgICAgICAgIk11c2ljJkVmZmVjdHMgKyBEaWFsb2cgKyBBc3NvY2lhdGUiLAorICAgICAgICAgICAgIk1haW4gKyBERSArIEFzc29jaWF0ZSIsCisgICAgICAgICAgICAiQXJiaXRyYXJ5IHN1YnN0cmVhbSBncm91cHMiLAorICAgICAgICAgICAgIkVNREYgb25seSIKKyAgICAgICAgfTsKKyAgICAgICAgQUxPR1YoIiV1OiBiX3NpbmdsZV9zdWJzdHJlYW0vZ3JvdXAgPSAlc1xuIiwgcHJlc2VudGF0aW9uLAorICAgICAgICAgICAgQk9PTFNUUihiX3NpbmdsZV9zdWJzdHJlYW1fZ3JvdXApKTsKKyAgICAgICAgQUxPR1YoIiV1OiBwcmVzZW50YXRpb25fdmVyc2lvbiA9ICV1XG4iLCBwcmVzZW50YXRpb24sIHByZXNlbnRhdGlvbl92ZXJzaW9uKTsKKyAgICAgICAgQUxPR1YoIiV1OiBwcmVzZW50YXRpb25fY29uZmlnID0gJXUgKCVzKVxuIiwgcHJlc2VudGF0aW9uLCBwcmVzZW50YXRpb25fY29uZmlnLAorICAgICAgICAgICAgKHByZXNlbnRhdGlvbl9jb25maWcgPj0gTkVMRU0oUHJlc2VudGF0aW9uQ29uZmlnKSA/CisgICAgICAgICAgICAicmVzZXJ2ZWQiIDogUHJlc2VudGF0aW9uQ29uZmlnW3ByZXNlbnRhdGlvbl9jb25maWddKSk7CisKKyAgICAgICAgLyogcmVjb3JkIGEgbWFya2VyLCBsZXNzIHRoZSBzaXplIG9mIHRoZSBwcmVzZW50YXRpb25fY29uZmlnICovCisgICAgICAgIHVpbnQ2NF90IHN0YXJ0ID0gKG1EU0lTaXplIC0gbUJpdFJlYWRlci5udW1CaXRzTGVmdCgpKSAvIDg7CisKKyAgICAgICAgYm9vbCBiX2FkZF9lbWRmX3N1YnN0cmVhbXMgPSBmYWxzZTsKKyAgICAgICAgaWYgKCFiX3NpbmdsZV9zdWJzdHJlYW1fZ3JvdXAgJiYgcHJlc2VudGF0aW9uX2NvbmZpZyA9PSA2KSB7CisgICAgICAgICAgICBiX2FkZF9lbWRmX3N1YnN0cmVhbXMgPSB0cnVlOworICAgICAgICAgICAgQUxPR1YoIiV1OiBiX2FkZF9lbWRmX3N1YnN0cmVhbXMgPSAlc1xuIiwgcHJlc2VudGF0aW9uLCBCT09MU1RSKGJfYWRkX2VtZGZfc3Vic3RyZWFtcykpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgQ0hFQ0tfQklUU19MRUZUKDMgKyAxKTsKKyAgICAgICAgICAgIHVpbnQzMl90IG1kY29tcGF0ID0gbUJpdFJlYWRlci5nZXRCaXRzKDMpOworICAgICAgICAgICAgQUxPR1YoIiV1OiBtZGNvbXBhdCA9ICVkXG4iLCBwcmVzZW50YXRpb24sIG1kY29tcGF0KTsKKworICAgICAgICAgICAgYm9vbCBiX3ByZXNlbnRhdGlvbl9ncm91cF9pbmRleCA9IChtQml0UmVhZGVyLmdldEJpdHMoMSkgPT0gMSk7CisgICAgICAgICAgICBBTE9HVigiJXU6IGJfcHJlc2VudGF0aW9uX2dyb3VwX2luZGV4ID0gJXNcbiIsIHByZXNlbnRhdGlvbiwKKyAgICAgICAgICAgICAgICBCT09MU1RSKGJfcHJlc2VudGF0aW9uX2dyb3VwX2luZGV4KSk7CisgICAgICAgICAgICBpZiAoYl9wcmVzZW50YXRpb25fZ3JvdXBfaW5kZXgpIHsKKyAgICAgICAgICAgICAgICBDSEVDS19CSVRTX0xFRlQoNSk7CisgICAgICAgICAgICAgICAgbVByZXNlbnRhdGlvbnNbcHJlc2VudGF0aW9uXS5tR3JvdXBJbmRleCA9IG1CaXRSZWFkZXIuZ2V0Qml0cyg1KTsKKyAgICAgICAgICAgICAgICBBTE9HVigiJXU6IHByZXNlbnRhdGlvbl9ncm91cF9pbmRleCA9ICVkXG4iLCBwcmVzZW50YXRpb24sCisgICAgICAgICAgICAgICAgICAgIG1QcmVzZW50YXRpb25zW3ByZXNlbnRhdGlvbl0ubUdyb3VwSW5kZXgpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgQ0hFQ0tfQklUU19MRUZUKDIpOworICAgICAgICAgICAgdWludDMyX3QgZHNpX2ZyYW1lX3JhdGVfbXVsdGlwbHlfaW5mbyA9IG1CaXRSZWFkZXIuZ2V0Qml0cygyKTsKKyAgICAgICAgICAgIEFMT0dWKCIldTogZHNpX2ZyYW1lX3JhdGVfbXVsdGlwbHlfaW5mbyA9ICVkXG4iLCBwcmVzZW50YXRpb24sCisgICAgICAgICAgICAgICAgZHNpX2ZyYW1lX3JhdGVfbXVsdGlwbHlfaW5mbyk7CisgICAgICAgICAgICBpZiAoYWM0X2RzaV92ZXJzaW9uID09IDEgJiYgcHJlc2VudGF0aW9uX3ZlcnNpb24gPT0gMSkgeworICAgICAgICAgICAgICAgIENIRUNLX0JJVFNfTEVGVCgyKTsKKyAgICAgICAgICAgICAgICB1aW50MzJfdCBkc2lfZnJhbWVfcmF0ZV9mcmFjdGlvbl9pbmZvID0gbUJpdFJlYWRlci5nZXRCaXRzKDIpOworICAgICAgICAgICAgICAgIEFMT0dWKCIldTogZHNpX2ZyYW1lX3JhdGVfZnJhY3Rpb25faW5mbyA9ICVkXG4iLCBwcmVzZW50YXRpb24sCisgICAgICAgICAgICAgICAgICAgIGRzaV9mcmFtZV9yYXRlX2ZyYWN0aW9uX2luZm8pOworICAgICAgICAgICAgfQorICAgICAgICAgICAgQ0hFQ0tfQklUU19MRUZUKDUgKyAxMCk7CisgICAgICAgICAgICB1aW50MzJfdCBwcmVzZW50YXRpb25fZW1kZl92ZXJzaW9uID0gbUJpdFJlYWRlci5nZXRCaXRzKDUpOworICAgICAgICAgICAgdWludDMyX3QgcHJlc2VudGF0aW9uX2tleV9pZCA9IG1CaXRSZWFkZXIuZ2V0Qml0cygxMCk7CisgICAgICAgICAgICBBTE9HVigiJXU6IHByZXNlbnRhdGlvbl9lbWRmX3ZlcnNpb24gPSAlZFxuIiwgcHJlc2VudGF0aW9uLCBwcmVzZW50YXRpb25fZW1kZl92ZXJzaW9uKTsKKyAgICAgICAgICAgIEFMT0dWKCIldTogcHJlc2VudGF0aW9uX2tleV9pZCA9ICVkXG4iLCBwcmVzZW50YXRpb24sIHByZXNlbnRhdGlvbl9rZXlfaWQpOworCisgICAgICAgICAgICBpZiAoYWM0X2RzaV92ZXJzaW9uID09IDEpIHsKKyAgICAgICAgICAgICAgICBib29sIGJfcHJlc2VudGF0aW9uX2NoYW5uZWxfY29kZWQgPSBmYWxzZTsKKyAgICAgICAgICAgICAgICBpZiAocHJlc2VudGF0aW9uX3ZlcnNpb24gPT0gMCkgeworICAgICAgICAgICAgICAgICAgICBiX3ByZXNlbnRhdGlvbl9jaGFubmVsX2NvZGVkID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICBDSEVDS19CSVRTX0xFRlQoMSk7CisgICAgICAgICAgICAgICAgICAgIGJfcHJlc2VudGF0aW9uX2NoYW5uZWxfY29kZWQgPSAobUJpdFJlYWRlci5nZXRCaXRzKDEpID09IDEpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBBTE9HVigiJXU6IGJfcHJlc2VudGF0aW9uX2NoYW5uZWxfY29kZWQgPSAlc1xuIiwgcHJlc2VudGF0aW9uLAorICAgICAgICAgICAgICAgICAgICBCT09MU1RSKGJfcHJlc2VudGF0aW9uX2NoYW5uZWxfY29kZWQpKTsKKyAgICAgICAgICAgICAgICBpZiAoYl9wcmVzZW50YXRpb25fY2hhbm5lbF9jb2RlZCkgeworICAgICAgICAgICAgICAgICAgICBpZiAocHJlc2VudGF0aW9uX3ZlcnNpb24gPT0gMSkgeworICAgICAgICAgICAgICAgICAgICAgICAgQ0hFQ0tfQklUU19MRUZUKDUpOworICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3QgZHNpX3ByZXNlbnRhdGlvbl9jaF9tb2RlID0gbUJpdFJlYWRlci5nZXRCaXRzKDUpOworICAgICAgICAgICAgICAgICAgICAgICAgbVByZXNlbnRhdGlvbnNbcHJlc2VudGF0aW9uXS5tQ2hhbm5lbE1vZGUgPSBkc2lfcHJlc2VudGF0aW9uX2NoX21vZGU7CisgICAgICAgICAgICAgICAgICAgICAgICBBTE9HVigiJXU6IGRzaV9wcmVzZW50YXRpb25fY2hfbW9kZSA9ICVkICglcylcbiIsIHByZXNlbnRhdGlvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBkc2lfcHJlc2VudGF0aW9uX2NoX21vZGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZHNpX3ByZXNlbnRhdGlvbl9jaF9tb2RlIDwgTkVMRU0oQ2hhbm5lbE1vZGVzKSA/CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ2hhbm5lbE1vZGVzW2RzaV9wcmVzZW50YXRpb25fY2hfbW9kZV0gOiAicmVzZXJ2ZWQiKTsKKworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGRzaV9wcmVzZW50YXRpb25fY2hfbW9kZSA+PSAxMSAmJiBkc2lfcHJlc2VudGF0aW9uX2NoX21vZGUgPD0gMTQpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBDSEVDS19CSVRTX0xFRlQoMSArIDIpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90IHByZXNfYl80X2JhY2tfY2hhbm5lbHNfcHJlc2VudCA9IG1CaXRSZWFkZXIuZ2V0Qml0cygxKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCBwcmVzX3RvcF9jaGFubmVsX3BhaXJzID0gbUJpdFJlYWRlci5nZXRCaXRzKDIpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFMT0dWKCIldTogcHJlc19iXzRfYmFja19jaGFubmVsc19wcmVzZW50ID0gJXNcbiIsIHByZXNlbnRhdGlvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQk9PTFNUUihwcmVzX2JfNF9iYWNrX2NoYW5uZWxzX3ByZXNlbnQpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBBTE9HVigiJXU6IHByZXNfdG9wX2NoYW5uZWxfcGFpcnMgPSAlZFxuIiwgcHJlc2VudGF0aW9uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmVzX3RvcF9jaGFubmVsX3BhaXJzKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAvLyBwcmVzZW50YXRpb25fY2hhbm5lbF9tYXNrIGluIGFjNF9wcmVzZW50YXRpb25fdjBfZHNpKCkKKyAgICAgICAgICAgICAgICAgICAgQ0hFQ0tfQklUU19MRUZUKDI0KTsKKyAgICAgICAgICAgICAgICAgICAgdWludDMyX3QgcHJlc2VudGF0aW9uX2NoYW5uZWxfbWFza192MSA9IG1CaXRSZWFkZXIuZ2V0Qml0cygyNCk7CisgICAgICAgICAgICAgICAgICAgIEFMT0dWKCIldTogcHJlc2VudGF0aW9uX2NoYW5uZWxfbWFza192MSA9IDB4JTA2eFxuIiwgcHJlc2VudGF0aW9uLAorICAgICAgICAgICAgICAgICAgICAgICAgcHJlc2VudGF0aW9uX2NoYW5uZWxfbWFza192MSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGlmIChwcmVzZW50YXRpb25fdmVyc2lvbiA9PSAxKSB7CisgICAgICAgICAgICAgICAgICAgIENIRUNLX0JJVFNfTEVGVCgxKTsKKyAgICAgICAgICAgICAgICAgICAgYm9vbCBiX3ByZXNlbnRhdGlvbl9jb3JlX2RpZmZlcnMgPSAobUJpdFJlYWRlci5nZXRCaXRzKDEpID09IDEpOworICAgICAgICAgICAgICAgICAgICBBTE9HVigiJXU6IGJfcHJlc2VudGF0aW9uX2NvcmVfZGlmZmVycyA9ICVzXG4iLCBwcmVzZW50YXRpb24sCisgICAgICAgICAgICAgICAgICAgICAgICBCT09MU1RSKGJfcHJlc2VudGF0aW9uX2NvcmVfZGlmZmVycykpOworICAgICAgICAgICAgICAgICAgICBpZiAoYl9wcmVzZW50YXRpb25fY29yZV9kaWZmZXJzKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBDSEVDS19CSVRTX0xFRlQoMSk7CisgICAgICAgICAgICAgICAgICAgICAgICBib29sIGJfcHJlc2VudGF0aW9uX2NvcmVfY2hhbm5lbF9jb2RlZCA9IChtQml0UmVhZGVyLmdldEJpdHMoMSkgPT0gMSk7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoYl9wcmVzZW50YXRpb25fY29yZV9jaGFubmVsX2NvZGVkKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ0hFQ0tfQklUU19MRUZUKDIpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1CaXRSZWFkZXIuc2tpcEJpdHMoMik7IC8vIGRzaV9wcmVzZW50YXRpb25fY2hhbm5lbF9tb2RlX2NvcmUKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBDSEVDS19CSVRTX0xFRlQoMSk7CisgICAgICAgICAgICAgICAgICAgIGJvb2wgYl9wcmVzZW50YXRpb25fZmlsdGVyID0gKG1CaXRSZWFkZXIuZ2V0Qml0cygxKSA9PSAxKTsKKyAgICAgICAgICAgICAgICAgICAgQUxPR1YoIiV1OiBiX3ByZXNlbnRhdGlvbl9maWx0ZXIgPSAlc1xuIiwgcHJlc2VudGF0aW9uLAorICAgICAgICAgICAgICAgICAgICAgICAgQk9PTFNUUihiX3ByZXNlbnRhdGlvbl9maWx0ZXIpKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGJfcHJlc2VudGF0aW9uX2ZpbHRlcikgeworICAgICAgICAgICAgICAgICAgICAgICAgQ0hFQ0tfQklUU19MRUZUKDEgKyA4KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgYl9lbmFibGVfcHJlc2VudGF0aW9uID0gKG1CaXRSZWFkZXIuZ2V0Qml0cygxKSA9PSAxKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICghYl9lbmFibGVfcHJlc2VudGF0aW9uKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbVByZXNlbnRhdGlvbnNbcHJlc2VudGF0aW9uXS5tRW5hYmxlZCA9IGZhbHNlOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgQUxPR1YoIiV1OiBiX2VuYWJsZV9wcmVzZW50YXRpb24gPSAlc1xuIiwgcHJlc2VudGF0aW9uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJPT0xTVFIoYl9lbmFibGVfcHJlc2VudGF0aW9uKSk7CisgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCBuX2ZpbHRlcl9ieXRlcyA9IG1CaXRSZWFkZXIuZ2V0Qml0cyg4KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIENIRUNLX0JJVFNfTEVGVChuX2ZpbHRlcl9ieXRlcyAqIDgpOworICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh1aW50MzJfdCBpID0gMDsgaSA8IG5fZmlsdGVyX2J5dGVzOyBpKyspIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBtQml0UmVhZGVyLnNraXBCaXRzKDgpOyAvLyBmaWx0ZXJfZGF0YQorICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfSAvKiBhYzRfZHNpX3ZlcnNpb24gPT0gMSAqLworCisgICAgICAgICAgICBpZiAoYl9zaW5nbGVfc3Vic3RyZWFtX2dyb3VwKSB7CisgICAgICAgICAgICAgICAgaWYgKHByZXNlbnRhdGlvbl92ZXJzaW9uID09IDApIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKCFwYXJzZVN1YnN0cmVhbURTSShwcmVzZW50YXRpb24sIDApKSB7CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICBpZiAoIXBhcnNlU3Vic3RyZWFtR3JvdXBEU0kocHJlc2VudGF0aW9uLCAwKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBpZiAoYWM0X2RzaV92ZXJzaW9uID09IDEpIHsKKyAgICAgICAgICAgICAgICAgICAgQ0hFQ0tfQklUU19MRUZUKDEpOworICAgICAgICAgICAgICAgICAgICBib29sIGJfbXVsdGlfcGlkID0gKG1CaXRSZWFkZXIuZ2V0Qml0cygxKSA9PSAxKTsKKyAgICAgICAgICAgICAgICAgICAgQUxPR1YoIiV1OiBiX211bHRpX3BpZCA9ICVzXG4iLCBwcmVzZW50YXRpb24sIEJPT0xTVFIoYl9tdWx0aV9waWQpKTsKKyAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICBDSEVDS19CSVRTX0xFRlQoMSk7CisgICAgICAgICAgICAgICAgICAgIGJvb2wgYl9oc2ZfZXh0ID0gKG1CaXRSZWFkZXIuZ2V0Qml0cygxKSA9PSAxKTsKKyAgICAgICAgICAgICAgICAgICAgQUxPR1YoIiV1OiBiX2hzZl9leHQgPSAlc1xuIiwgcHJlc2VudGF0aW9uLCBCT09MU1RSKGJfaHNmX2V4dCkpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBzd2l0Y2ggKHByZXNlbnRhdGlvbl9jb25maWcpIHsKKyAgICAgICAgICAgICAgICBjYXNlIDA6CisgICAgICAgICAgICAgICAgY2FzZSAxOgorICAgICAgICAgICAgICAgIGNhc2UgMjoKKyAgICAgICAgICAgICAgICAgICAgaWYgKHByZXNlbnRhdGlvbl92ZXJzaW9uID09IDApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICghcGFyc2VTdWJzdHJlYW1EU0kocHJlc2VudGF0aW9uLCAwKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICghcGFyc2VTdWJzdHJlYW1EU0kocHJlc2VudGF0aW9uLCAxKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICghcGFyc2VTdWJzdHJlYW1Hcm91cERTSShwcmVzZW50YXRpb24sIDApKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFwYXJzZVN1YnN0cmVhbUdyb3VwRFNJKHByZXNlbnRhdGlvbiwgMSkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgY2FzZSAzOgorICAgICAgICAgICAgICAgIGNhc2UgNDoKKyAgICAgICAgICAgICAgICAgICAgaWYgKHByZXNlbnRhdGlvbl92ZXJzaW9uID09IDApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICghcGFyc2VTdWJzdHJlYW1EU0kocHJlc2VudGF0aW9uLCAwKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICghcGFyc2VTdWJzdHJlYW1EU0kocHJlc2VudGF0aW9uLCAxKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICghcGFyc2VTdWJzdHJlYW1EU0kocHJlc2VudGF0aW9uLCAyKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICghcGFyc2VTdWJzdHJlYW1Hcm91cERTSShwcmVzZW50YXRpb24sIDApKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFwYXJzZVN1YnN0cmVhbUdyb3VwRFNJKHByZXNlbnRhdGlvbiwgMSkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXBhcnNlU3Vic3RyZWFtR3JvdXBEU0kocHJlc2VudGF0aW9uLCAyKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICBjYXNlIDU6CisgICAgICAgICAgICAgICAgICAgIGlmIChwcmVzZW50YXRpb25fdmVyc2lvbiA9PSAwKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXBhcnNlU3Vic3RyZWFtRFNJKHByZXNlbnRhdGlvbiwgMCkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgICAgICBDSEVDS19CSVRTX0xFRlQoMyk7CisgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCBuX3N1YnN0cmVhbV9ncm91cHNfbWludXMyID0gbUJpdFJlYWRlci5nZXRCaXRzKDMpOworICAgICAgICAgICAgICAgICAgICAgICAgQUxPR1YoIiV1OiBuX3N1YnN0cmVhbV9ncm91cHNfbWludXMyID0gJWRcbiIsIHByZXNlbnRhdGlvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBuX3N1YnN0cmVhbV9ncm91cHNfbWludXMyKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodWludDMyX3Qgc2cgPSAwOyBzZyA8IG5fc3Vic3RyZWFtX2dyb3Vwc19taW51czIgKyAyOyBzZysrKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFwYXJzZVN1YnN0cmVhbUdyb3VwRFNJKHByZXNlbnRhdGlvbiwgc2cpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICAgICAgQ0hFQ0tfQklUU19MRUZUKDcpOworICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCBuX3NraXBfYnl0ZXMgPSBtQml0UmVhZGVyLmdldEJpdHMoNyk7CisgICAgICAgICAgICAgICAgICAgIENIRUNLX0JJVFNfTEVGVChuX3NraXBfYnl0ZXMgKiA4KQorICAgICAgICAgICAgICAgICAgICBmb3IgKHVpbnQzMl90IGogPSAwOyBqIDwgbl9za2lwX2J5dGVzOyBqKyspIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIG1CaXRSZWFkZXIuZ2V0Qml0cyg4KTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgQ0hFQ0tfQklUU19MRUZUKDEgKyAxKTsKKyAgICAgICAgICAgICAgICBib29sIGJfcHJlX3ZpcnR1YWxpemVkID0gKG1CaXRSZWFkZXIuZ2V0Qml0cygxKSA9PSAxKTsKKyAgICAgICAgICAgICAgICBtUHJlc2VudGF0aW9uc1twcmVzZW50YXRpb25dLm1QcmVWaXJ0dWFsaXplZCA9IGJfcHJlX3ZpcnR1YWxpemVkOworICAgICAgICAgICAgICAgIGJfYWRkX2VtZGZfc3Vic3RyZWFtcyA9IChtQml0UmVhZGVyLmdldEJpdHMoMSkgPT0gMSk7CisgICAgICAgICAgICAgICAgQUxPR1YoIiV1OiBiX3ByZV92aXJ0dWFsaXplZCA9ICVzXG4iLCBwcmVzZW50YXRpb24sIEJPT0xTVFIoYl9wcmVfdmlydHVhbGl6ZWQpKTsKKyAgICAgICAgICAgICAgICBBTE9HVigiJXU6IGJfYWRkX2VtZGZfc3Vic3RyZWFtcyA9ICVzXG4iLCBwcmVzZW50YXRpb24sCisgICAgICAgICAgICAgICAgICAgIEJPT0xTVFIoYl9hZGRfZW1kZl9zdWJzdHJlYW1zKSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgaWYgKGJfYWRkX2VtZGZfc3Vic3RyZWFtcykgeworICAgICAgICAgICAgQ0hFQ0tfQklUU19MRUZUKDcpOworICAgICAgICAgICAgdWludDMyX3Qgbl9hZGRfZW1kZl9zdWJzdHJlYW1zID0gbUJpdFJlYWRlci5nZXRCaXRzKDcpOworICAgICAgICAgICAgZm9yICh1aW50MzJfdCBqID0gMDsgaiA8IG5fYWRkX2VtZGZfc3Vic3RyZWFtczsgaisrKSB7CisgICAgICAgICAgICAgICAgQ0hFQ0tfQklUU19MRUZUKDUgKyAxMCk7CisgICAgICAgICAgICAgICAgdWludDMyX3Qgc3Vic3RyZWFtX2VtZGZfdmVyc2lvbiA9IG1CaXRSZWFkZXIuZ2V0Qml0cyg1KTsKKyAgICAgICAgICAgICAgICB1aW50MzJfdCBzdWJzdHJlYW1fa2V5X2lkID0gbUJpdFJlYWRlci5nZXRCaXRzKDEwKTsKKyAgICAgICAgICAgICAgICBBTE9HVigiJXU6IGVtZGZfc3Vic3RyZWFtWyVkXTogdmVyc2lvbj0lZCwga2V5X2lkPSVkXG4iLCBwcmVzZW50YXRpb24sIGosCisgICAgICAgICAgICAgICAgICAgIHN1YnN0cmVhbV9lbWRmX3ZlcnNpb24sIHN1YnN0cmVhbV9rZXlfaWQpOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgYm9vbCBiX3ByZXNlbnRhdGlvbl9iaXRyYXRlX2luZm8gPSBmYWxzZTsKKyAgICAgICAgaWYgKHByZXNlbnRhdGlvbl92ZXJzaW9uID4gMCkgeworICAgICAgICAgICAgQ0hFQ0tfQklUU19MRUZUKDEpOworICAgICAgICAgICAgYl9wcmVzZW50YXRpb25fYml0cmF0ZV9pbmZvID0gKG1CaXRSZWFkZXIuZ2V0Qml0cygxKSA9PSAxKTsKKyAgICAgICAgfQorCisgICAgICAgIEFMT0dWKCJiX3ByZXNlbnRhdGlvbl9iaXRyYXRlX2luZm8gPSAlc1xuIiwgQk9PTFNUUihiX3ByZXNlbnRhdGlvbl9iaXRyYXRlX2luZm8pKTsKKyAgICAgICAgaWYgKGJfcHJlc2VudGF0aW9uX2JpdHJhdGVfaW5mbykgeworICAgICAgICAgICAgaWYgKCFwYXJzZUJpdHJhdGVEc2koKSkgeworICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIGlmIChwcmVzZW50YXRpb25fdmVyc2lvbiA+IDApIHsKKyAgICAgICAgICAgIENIRUNLX0JJVFNfTEVGVCgxKTsKKyAgICAgICAgICAgIGJvb2wgYl9hbHRlcm5hdGl2ZSA9IChtQml0UmVhZGVyLmdldEJpdHMoMSkgPT0gMSk7CisgICAgICAgICAgICBBTE9HVigiYl9hbHRlcm5hdGl2ZSA9ICVzXG4iLCBCT09MU1RSKGJfYWx0ZXJuYXRpdmUpKTsKKyAgICAgICAgICAgIGlmIChiX2FsdGVybmF0aXZlKSB7CisgICAgICAgICAgICAgICAgQllURV9BTElHTjsKKyAgICAgICAgICAgICAgICBDSEVDS19CSVRTX0xFRlQoMTYpOworICAgICAgICAgICAgICAgIHVpbnQzMl90IG5hbWVfbGVuID0gbUJpdFJlYWRlci5nZXRCaXRzKDE2KTsKKyAgICAgICAgICAgICAgICBDSEVDS19CSVRTX0xFRlQobmFtZV9sZW4gKiA4KTsKKyAgICAgICAgICAgICAgICBzdGQ6OnN0cmluZyAmcHJlc2VudGF0aW9uX25hbWUgPQorICAgICAgICAgICAgICAgICAgICBtUHJlc2VudGF0aW9uc1twcmVzZW50YXRpb25dLm1EZXNjcmlwdGlvbjsKKyAgICAgICAgICAgICAgICBwcmVzZW50YXRpb25fbmFtZS5jbGVhcigpOworICAgICAgICAgICAgICAgIHByZXNlbnRhdGlvbl9uYW1lLnJlc2l6ZShuYW1lX2xlbik7CisgICAgICAgICAgICAgICAgZm9yICh1aW50MzJfdCBpID0gMDsgaSA8IG5hbWVfbGVuOyBpKyspIHsKKyAgICAgICAgICAgICAgICAgICAgcHJlc2VudGF0aW9uX25hbWVbaV0gPSAoY2hhcikobUJpdFJlYWRlci5nZXRCaXRzKDgpKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgQ0hFQ0tfQklUU19MRUZUKDUpOworICAgICAgICAgICAgICAgIHVpbnQzMl90IG5fdGFyZ2V0cyA9IG1CaXRSZWFkZXIuZ2V0Qml0cyg1KTsKKyAgICAgICAgICAgICAgICBDSEVDS19CSVRTX0xFRlQobl90YXJnZXRzICogKDMgKyA4KSk7CisgICAgICAgICAgICAgICAgZm9yICh1aW50MzJfdCBpID0gMDsgaSA8IG5fdGFyZ2V0czsgaSsrKXsKKyAgICAgICAgICAgICAgICAgICAgbUJpdFJlYWRlci5za2lwQml0cygzKTsgLy8gdGFyZ2V0X21kX2NvbXBhdAorICAgICAgICAgICAgICAgICAgICBtQml0UmVhZGVyLnNraXBCaXRzKDgpOyAvLyB0YXJnZXRfZGV2aWNlX2NhdGVnb3J5CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgQllURV9BTElHTjsKKworICAgICAgICBpZiAoYWM0X2RzaV92ZXJzaW9uID09IDEpIHsKKyAgICAgICAgICAgIHVpbnQ2NF90IGVuZCA9IChtRFNJU2l6ZSAtIG1CaXRSZWFkZXIubnVtQml0c0xlZnQoKSkgLyA4OworICAgICAgICAgICAgaWYgKG1CaXRSZWFkZXIubnVtQml0c0xlZnQoKSAlIDggIT0gMCkgeworICAgICAgICAgICAgICAgIGVuZCArPSAxOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICB1aW50NjRfdCBwcmVzZW50YXRpb25fYnl0ZXMgPSBlbmQgLSBzdGFydDsKKyAgICAgICAgICAgIHVpbnQ2NF90IHNraXBfYnl0ZXMgPSBwcmVzX2J5dGVzIC0gcHJlc2VudGF0aW9uX2J5dGVzOworICAgICAgICAgICAgQUxPR1YoInNraXBwaW5nID0gJSIgUFJJdTY0ICIgYnl0ZXMiLCBza2lwX2J5dGVzKTsKKyAgICAgICAgICAgIENIRUNLX0JJVFNfTEVGVChza2lwX2J5dGVzICogOCk7CisgICAgICAgICAgICBtQml0UmVhZGVyLnNraXBCaXRzKHNraXBfYnl0ZXMgKiA4KTsKKyAgICAgICAgfQorCisgICAgICAgIC8vIHdlIHNob3VsZCBrbm93IHRoaXMgb3Igc29tZXRoaW5nIGlzIHByb2JhYmx5IHdyb25nCisgICAgICAgIC8vIHdpdGggdGhlIGJpdHN0cmVhbSAob3Igd2UgZG9uJ3Qgc3VwcG9ydCBpdCkKKyAgICAgICAgaWYgKG1QcmVzZW50YXRpb25zW3ByZXNlbnRhdGlvbl0ubUNoYW5uZWxNb2RlID09IC0xKXsKKyAgICAgICAgICAgIEFMT0dFKCJjb3VsZCBub3QgZGV0ZXJtaW5nIGNoYW5uZWwgbW9kZSBvZiBwcmVzZW50YXRpb24gJWQiLCBwcmVzZW50YXRpb24pOworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgfSAvKiBlYWNoIHByZXNlbnRhdGlvbiAqLworCisgICAgcmV0dXJuIHRydWU7Cit9CisKK307CmRpZmYgLS1naXQgYS9tZWRpYS9leHRyYWN0b3JzL21wNC9BQzRQYXJzZXIuaCBiL21lZGlhL2V4dHJhY3RvcnMvbXA0L0FDNFBhcnNlci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjczYjZlMzEKLS0tIC9kZXYvbnVsbAorKysgYi9tZWRpYS9leHRyYWN0b3JzL21wNC9BQzRQYXJzZXIuaApAQCAtMCwwICsxLDEwOSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxOCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCisKKyNpZm5kZWYgQUM0X1BBUlNFUl9IXworI2RlZmluZSBBQzRfUEFSU0VSX0hfCisKKyNpbmNsdWRlIDxjc3RkaW50PgorI2luY2x1ZGUgPG1hcD4KKyNpbmNsdWRlIDxzdHJpbmc+CisKKyNpbmNsdWRlIDxtZWRpYS9zdGFnZWZyaWdodC9mb3VuZGF0aW9uL0FCaXRSZWFkZXIuaD4KKworbmFtZXNwYWNlIGFuZHJvaWQgeworCitjbGFzcyBBQzRQYXJzZXIgeworcHVibGljOgorICAgIEFDNFBhcnNlcigpOworICAgIHZpcnR1YWwgfkFDNFBhcnNlcigpIHsgfQorCisgICAgdmlydHVhbCBib29sIHBhcnNlKCkgPSAwOworCisgICAgc3RydWN0IEFDNFByZXNlbnRhdGlvbiB7CisgICAgICAgIGludDMyX3QgbUNoYW5uZWxNb2RlID0gLTE7CisgICAgICAgIGludDMyX3QgbVByb2dyYW1JRCA9IC0xOworICAgICAgICBpbnQzMl90IG1Hcm91cEluZGV4ID0gLTE7CisKKyAgICAgICAgLy8gVFMgMTAzIDE5MC0xIHYxLjIuMSA0LjMuMy44LjEKKyAgICAgICAgZW51bSBDb250ZW50Q2xhc3NpZmllcnMgeworICAgICAgICAgICAga0NvbXBsZXRlTWFpbiwKKyAgICAgICAgICAgIGtNdXNpY0FuZEVmZmVjdHMsCisgICAgICAgICAgICBrVmlzdWFsbHlJbXBhaXJlZCwKKyAgICAgICAgICAgIGtIZWFyaW5nSW1wYWlyZWQsCisgICAgICAgICAgICBrRGlhbG9nLAorICAgICAgICAgICAga0NvbW1lbnRhcnksCisgICAgICAgICAgICBrRW1lcmdlbmN5LAorICAgICAgICAgICAga1ZvaWNlT3ZlcgorICAgICAgICB9OworCisgICAgICAgIHVpbnQzMl90IG1Db250ZW50Q2xhc3NpZmllciA9IGtDb21wbGV0ZU1haW47CisKKyAgICAgICAgLy8gRVRTSSBUUyAxMDMgMTkwLTIgVjEuMS4xICgyMDE1LTA5KSBUYWJsZSA3OTogY2hhbm5lbF9tb2RlCisgICAgICAgIGVudW0gSW5wdXRDaGFubmVsTW9kZSB7CisgICAgICAgICAgICBrQ2hhbm5lbE1vZGVfTW9ubywKKyAgICAgICAgICAgIGtDaGFubmVsTW9kZV9TdGVyZW8sCisgICAgICAgICAgICBrQ2hhbm5lbE1vZGVfM18wLAorICAgICAgICAgICAga0NoYW5uZWxNb2RlXzVfMCwKKyAgICAgICAgICAgIGtDaGFubmVsTW9kZV81XzEsCisgICAgICAgICAgICBrQ2hhbm5lbE1vZGVfN18wXzM0LAorICAgICAgICAgICAga0NoYW5uZWxNb2RlXzdfMV8zNCwKKyAgICAgICAgICAgIGtDaGFubmVsTW9kZV83XzBfNTIsCisgICAgICAgICAgICBrQ2hhbm5lbE1vZGVfN18xXzUyLAorICAgICAgICAgICAga0NoYW5uZWxNb2RlXzdfMF8zMjIsCisgICAgICAgICAgICBrQ2hhbm5lbE1vZGVfN18xXzMyMiwKKyAgICAgICAgICAgIGtDaGFubmVsTW9kZV83XzBfNCwKKyAgICAgICAgICAgIGtDaGFubmVsTW9kZV83XzFfNCwKKyAgICAgICAgICAgIGtDaGFubmVsTW9kZV85XzBfNCwKKyAgICAgICAgICAgIGtDaGFubmVsTW9kZV85XzFfNCwKKyAgICAgICAgICAgIGtDaGFubmVsTW9kZV8yMl8yLAorICAgICAgICAgICAga0NoYW5uZWxNb2RlX1Jlc2VydmVkLAorICAgICAgICB9OworCisgICAgICAgIGJvb2wgbUhhc0RpYWxvZ0VuaGFuY2VtZW50cyA9IGZhbHNlOworICAgICAgICBib29sIG1QcmVWaXJ0dWFsaXplZCA9IGZhbHNlOworICAgICAgICBib29sIG1FbmFibGVkID0gdHJ1ZTsKKworICAgICAgICBzdGQ6OnN0cmluZyBtTGFuZ3VhZ2U7CisgICAgICAgIHN0ZDo6c3RyaW5nIG1EZXNjcmlwdGlvbjsKKyAgICB9OworICAgIHR5cGVkZWYgc3RkOjptYXA8dWludDMyX3QsIEFDNFByZXNlbnRhdGlvbj4gQUM0UHJlc2VudGF0aW9uczsKKworICAgIGNvbnN0IEFDNFByZXNlbnRhdGlvbnMmIGdldFByZXNlbnRhdGlvbnMoKSBjb25zdCB7IHJldHVybiBtUHJlc2VudGF0aW9uczsgfQorCitwcm90ZWN0ZWQ6CisgICAgQUM0UHJlc2VudGF0aW9ucyBtUHJlc2VudGF0aW9uczsKK307CisKK2NsYXNzIEFDNERTSVBhcnNlcjogcHVibGljIEFDNFBhcnNlciB7CitwdWJsaWM6CisgICAgZXhwbGljaXQgQUM0RFNJUGFyc2VyKEFCaXRSZWFkZXIgJmJyKTsKKyAgICB2aXJ0dWFsIH5BQzREU0lQYXJzZXIoKSB7IH0KKworICAgIGJvb2wgcGFyc2UoKTsKKworcHJpdmF0ZToKKyAgICBib29sIHBhcnNlU3Vic3RyZWFtRFNJKHVpbnQzMl90IHByZXNlbnRhdGlvbklELCB1aW50MzJfdCBzdWJzdHJlYW1JRCk7CisgICAgYm9vbCBwYXJzZVN1YnN0cmVhbUdyb3VwRFNJKHVpbnQzMl90IHByZXNlbnRhdGlvbklELCB1aW50MzJfdCBncm91cElEKTsKKyAgICBib29sIHBhcnNlTGFuZ3VhZ2VUYWcodWludDMyX3QgcHJlc2VudGF0aW9uSUQsIHVpbnQzMl90IHN1YnN0cmVhbUlEKTsKKyAgICBib29sIHBhcnNlQml0cmF0ZURzaSgpOworCisgICAgdWludDY0X3QgbURTSVNpemU7CisgICAgQUJpdFJlYWRlciYgbUJpdFJlYWRlcjsKK307CisKK307CisKKyNlbmRpZiAgLy8gQUM0X1BBUlNFUl9IXwpkaWZmIC0tZ2l0IGEvbWVkaWEvZXh0cmFjdG9ycy9tcDQvQW5kcm9pZC5icCBiL21lZGlhL2V4dHJhY3RvcnMvbXA0L0FuZHJvaWQuYnAKaW5kZXggZmE3MzllOC4uNDdkYzcxOCAxMDA2NDQKLS0tIGEvbWVkaWEvZXh0cmFjdG9ycy9tcDQvQW5kcm9pZC5icAorKysgYi9tZWRpYS9leHRyYWN0b3JzL21wNC9BbmRyb2lkLmJwCkBAIC0yLDYgKzIsNyBAQAogICAgIG5hbWU6ICJsaWJtcDRleHRyYWN0b3JfZGVmYXVsdHMiLAogCiAgICAgc3JjczogWworICAgICAgICAiQUM0UGFyc2VyLmNwcCIsCiAgICAgICAgICJJdGVtVGFibGUuY3BwIiwKICAgICAgICAgIk1QRUc0RXh0cmFjdG9yLmNwcCIsCiAgICAgICAgICJTYW1wbGVJdGVyYXRvci5jcHAiLApAQCAtMTUsNiArMTYsNyBAQAogICAgIHNoYXJlZF9saWJzOiBbCiAgICAgICAgICJsaWJsb2ciLAogICAgICAgICAibGlibWVkaWFleHRyYWN0b3IiLAorICAgICAgICAibGlibWVkaWFuZGsiCiAgICAgXSwKIAogICAgIHN0YXRpY19saWJzOiBbCmRpZmYgLS1naXQgYS9tZWRpYS9leHRyYWN0b3JzL21wNC9JdGVtVGFibGUuY3BwIGIvbWVkaWEvZXh0cmFjdG9ycy9tcDQvSXRlbVRhYmxlLmNwcAppbmRleCBjYTlkZWFiLi41NWEwYzQ3IDEwMDY0NAotLS0gYS9tZWRpYS9leHRyYWN0b3JzL21wNC9JdGVtVGFibGUuY3BwCisrKyBiL21lZGlhL2V4dHJhY3RvcnMvbXA0L0l0ZW1UYWJsZS5jcHAKQEAgLTE4LDcgKzE4LDggQEAKICNkZWZpbmUgTE9HX1RBRyAiSXRlbVRhYmxlIgogCiAjaW5jbHVkZSA8SXRlbVRhYmxlLmg+Ci0jaW5jbHVkZSA8bWVkaWEvRGF0YVNvdXJjZUJhc2UuaD4KKyNpbmNsdWRlIDxtZWRpYS9NZWRpYUV4dHJhY3RvclBsdWdpbkFwaS5oPgorI2luY2x1ZGUgPG1lZGlhL01lZGlhRXh0cmFjdG9yUGx1Z2luSGVscGVyLmg+CiAjaW5jbHVkZSA8bWVkaWEvc3RhZ2VmcmlnaHQvTWV0YURhdGEuaD4KICNpbmNsdWRlIDxtZWRpYS9zdGFnZWZyaWdodC9NZWRpYUVycm9ycy5oPgogI2luY2x1ZGUgPG1lZGlhL3N0YWdlZnJpZ2h0L2ZvdW5kYXRpb24vQUJ1ZmZlci5oPgpAQCAtOTIsNyArOTMsNyBAQAogCiBzdHJ1Y3QgQm94IHsKIHByb3RlY3RlZDoKLSAgICBCb3goRGF0YVNvdXJjZUJhc2UgKnNvdXJjZSwgdWludDMyX3QgdHlwZSkgOgorICAgIEJveChEYXRhU291cmNlSGVscGVyICpzb3VyY2UsIHVpbnQzMl90IHR5cGUpIDoKICAgICAgICAgbURhdGFTb3VyY2Uoc291cmNlKSwgbVR5cGUodHlwZSkge30KIAogICAgIHZpcnR1YWwgfkJveCgpIHt9CkBAIC0xMDQsMTQgKzEwNSwxNCBAQAogCiAgICAgaW5saW5lIHVpbnQzMl90IHR5cGUoKSBjb25zdCB7IHJldHVybiBtVHlwZTsgfQogCi0gICAgaW5saW5lIERhdGFTb3VyY2VCYXNlICpzb3VyY2UoKSBjb25zdCB7IHJldHVybiBtRGF0YVNvdXJjZTsgfQorICAgIGlubGluZSBEYXRhU291cmNlSGVscGVyICpzb3VyY2UoKSBjb25zdCB7IHJldHVybiBtRGF0YVNvdXJjZTsgfQogCiAgICAgc3RhdHVzX3QgcGFyc2VDaHVuayhvZmY2NF90ICpvZmZzZXQpOwogCiAgICAgc3RhdHVzX3QgcGFyc2VDaHVua3Mob2ZmNjRfdCBvZmZzZXQsIHNpemVfdCBzaXplKTsKIAogcHJpdmF0ZToKLSAgICBEYXRhU291cmNlQmFzZSAqbURhdGFTb3VyY2U7CisgICAgRGF0YVNvdXJjZUhlbHBlciAqbURhdGFTb3VyY2U7CiAgICAgdWludDMyX3QgbVR5cGU7CiB9OwogCkBAIC0xODYsNyArMTg3LDcgQEAKIAogc3RydWN0IEZ1bGxCb3ggOiBwdWJsaWMgQm94IHsKIHByb3RlY3RlZDoKLSAgICBGdWxsQm94KERhdGFTb3VyY2VCYXNlICpzb3VyY2UsIHVpbnQzMl90IHR5cGUpIDoKKyAgICBGdWxsQm94KERhdGFTb3VyY2VIZWxwZXIgKnNvdXJjZSwgdWludDMyX3QgdHlwZSkgOgogICAgICAgICBCb3goc291cmNlLCB0eXBlKSwgbVZlcnNpb24oMCksIG1GbGFncygwKSB7fQogCiAgICAgaW5saW5lIHVpbnQ4X3QgdmVyc2lvbigpIGNvbnN0IHsgcmV0dXJuIG1WZXJzaW9uOyB9CkBAIC0yMjEsNyArMjIyLDcgQEAKIC8vCiAKIHN0cnVjdCBQaXRtQm94IDogcHVibGljIEZ1bGxCb3ggewotICAgIFBpdG1Cb3goRGF0YVNvdXJjZUJhc2UgKnNvdXJjZSkgOgorICAgIFBpdG1Cb3goRGF0YVNvdXJjZUhlbHBlciAqc291cmNlKSA6CiAgICAgICAgIEZ1bGxCb3goc291cmNlLCBGT1VSQ0MoJ3AnLCAnaScsICd0JywgJ20nKSkge30KIAogICAgIHN0YXR1c190IHBhcnNlKG9mZjY0X3Qgb2Zmc2V0LCBzaXplX3Qgc2l6ZSwgdWludDMyX3QgKnByaW1hcnlJdGVtSWQpOwpAQCAtMzAxLDcgKzMwMiw3IEBACiB9OwogCiBzdHJ1Y3QgSWxvY0JveCA6IHB1YmxpYyBGdWxsQm94IHsKLSAgICBJbG9jQm94KERhdGFTb3VyY2VCYXNlICpzb3VyY2UsIEtleWVkVmVjdG9yPHVpbnQzMl90LCBJdGVtTG9jPiAqaXRlbUxvY3MpIDoKKyAgICBJbG9jQm94KERhdGFTb3VyY2VIZWxwZXIgKnNvdXJjZSwgS2V5ZWRWZWN0b3I8dWludDMyX3QsIEl0ZW1Mb2M+ICppdGVtTG9jcykgOgogICAgICAgICBGdWxsQm94KHNvdXJjZSwgRk9VUkNDKCdpJywgJ2wnLCAnbycsICdjJykpLAogICAgICAgICBtSXRlbUxvY3MoaXRlbUxvY3MpLCBtSGFzQ29uc3RydWN0TWV0aG9kMShmYWxzZSkge30KIApAQCAtNDcxLDcgKzQ3Miw3IEBACiAvLwogCiBzdHJ1Y3QgSXRlbVJlZmVyZW5jZSA6IHB1YmxpYyBCb3gsIHB1YmxpYyBSZWZCYXNlIHsKLSAgICBJdGVtUmVmZXJlbmNlKERhdGFTb3VyY2VCYXNlICpzb3VyY2UsIHVpbnQzMl90IHR5cGUsIHVpbnQzMl90IGl0ZW1JZFNpemUpIDoKKyAgICBJdGVtUmVmZXJlbmNlKERhdGFTb3VyY2VIZWxwZXIgKnNvdXJjZSwgdWludDMyX3QgdHlwZSwgdWludDMyX3QgaXRlbUlkU2l6ZSkgOgogICAgICAgICBCb3goc291cmNlLCB0eXBlKSwgbUl0ZW1JZCgwKSwgbVJlZklkU2l6ZShpdGVtSWRTaXplKSB7fQogCiAgICAgc3RhdHVzX3QgcGFyc2Uob2ZmNjRfdCBvZmZzZXQsIHNpemVfdCBzaXplKTsKQEAgLTYyNiw3ICs2MjcsNyBAQAogfQogCiBzdHJ1Y3QgSXJlZkJveCA6IHB1YmxpYyBGdWxsQm94IHsKLSAgICBJcmVmQm94KERhdGFTb3VyY2VCYXNlICpzb3VyY2UsIFZlY3RvcjxzcDxJdGVtUmVmZXJlbmNlPiA+ICppdGVtUmVmcykgOgorICAgIElyZWZCb3goRGF0YVNvdXJjZUhlbHBlciAqc291cmNlLCBWZWN0b3I8c3A8SXRlbVJlZmVyZW5jZT4gPiAqaXRlbVJlZnMpIDoKICAgICAgICAgRnVsbEJveChzb3VyY2UsIEZPVVJDQygnaScsICdyJywgJ2UnLCAnZicpKSwgbVJlZklkU2l6ZSgwKSwgbUl0ZW1SZWZzKGl0ZW1SZWZzKSB7fQogCiAgICAgc3RhdHVzX3QgcGFyc2Uob2ZmNjRfdCBvZmZzZXQsIHNpemVfdCBzaXplKTsKQEAgLTY4OCw3ICs2ODksNyBAQAogfTsKIAogc3RydWN0IElzcGVCb3ggOiBwdWJsaWMgRnVsbEJveCwgcHVibGljIEl0ZW1Qcm9wZXJ0eSB7Ci0gICAgSXNwZUJveChEYXRhU291cmNlQmFzZSAqc291cmNlKSA6CisgICAgSXNwZUJveChEYXRhU291cmNlSGVscGVyICpzb3VyY2UpIDoKICAgICAgICAgRnVsbEJveChzb3VyY2UsIEZPVVJDQygnaScsICdzJywgJ3AnLCAnZScpKSwgbVdpZHRoKDApLCBtSGVpZ2h0KDApIHt9CiAKICAgICBzdGF0dXNfdCBwYXJzZShvZmY2NF90IG9mZnNldCwgc2l6ZV90IHNpemUpIG92ZXJyaWRlOwpAQCAtNzI0LDcgKzcyNSw3IEBACiB9CiAKIHN0cnVjdCBIdmNjQm94IDogcHVibGljIEJveCwgcHVibGljIEl0ZW1Qcm9wZXJ0eSB7Ci0gICAgSHZjY0JveChEYXRhU291cmNlQmFzZSAqc291cmNlKSA6CisgICAgSHZjY0JveChEYXRhU291cmNlSGVscGVyICpzb3VyY2UpIDoKICAgICAgICAgQm94KHNvdXJjZSwgRk9VUkNDKCdoJywgJ3YnLCAnYycsICdDJykpIHt9CiAKICAgICBzdGF0dXNfdCBwYXJzZShvZmY2NF90IG9mZnNldCwgc2l6ZV90IHNpemUpIG92ZXJyaWRlOwpAQCAtNzU3LDcgKzc1OCw3IEBACiB9CiAKIHN0cnVjdCBJcm90Qm94IDogcHVibGljIEJveCwgcHVibGljIEl0ZW1Qcm9wZXJ0eSB7Ci0gICAgSXJvdEJveChEYXRhU291cmNlQmFzZSAqc291cmNlKSA6CisgICAgSXJvdEJveChEYXRhU291cmNlSGVscGVyICpzb3VyY2UpIDoKICAgICAgICAgQm94KHNvdXJjZSwgRk9VUkNDKCdpJywgJ3InLCAnbycsICd0JykpLCBtQW5nbGUoMCkge30KIAogICAgIHN0YXR1c190IHBhcnNlKG9mZjY0X3Qgb2Zmc2V0LCBzaXplX3Qgc2l6ZSkgb3ZlcnJpZGU7CkBAIC03ODYsNyArNzg3LDcgQEAKIH0KIAogc3RydWN0IENvbHJCb3ggOiBwdWJsaWMgQm94LCBwdWJsaWMgSXRlbVByb3BlcnR5IHsKLSAgICBDb2xyQm94KERhdGFTb3VyY2VCYXNlICpzb3VyY2UpIDoKKyAgICBDb2xyQm94KERhdGFTb3VyY2VIZWxwZXIgKnNvdXJjZSkgOgogICAgICAgICBCb3goc291cmNlLCBGT1VSQ0MoJ2MnLCAnbycsICdsJywgJ3InKSkge30KIAogICAgIHN0YXR1c190IHBhcnNlKG9mZjY0X3Qgb2Zmc2V0LCBzaXplX3Qgc2l6ZSkgb3ZlcnJpZGU7CkBAIC04MzQsNyArODM1LDcgQEAKIH0KIAogc3RydWN0IElwbWFCb3ggOiBwdWJsaWMgRnVsbEJveCB7Ci0gICAgSXBtYUJveChEYXRhU291cmNlQmFzZSAqc291cmNlLCBWZWN0b3I8QXNzb2NpYXRpb25FbnRyeT4gKmFzc29jaWF0aW9ucykgOgorICAgIElwbWFCb3goRGF0YVNvdXJjZUhlbHBlciAqc291cmNlLCBWZWN0b3I8QXNzb2NpYXRpb25FbnRyeT4gKmFzc29jaWF0aW9ucykgOgogICAgICAgICBGdWxsQm94KHNvdXJjZSwgRk9VUkNDKCdpJywgJ3AnLCAnbScsICdhJykpLCBtQXNzb2NpYXRpb25zKGFzc29jaWF0aW9ucykge30KIAogICAgIHN0YXR1c190IHBhcnNlKG9mZjY0X3Qgb2Zmc2V0LCBzaXplX3Qgc2l6ZSk7CkBAIC05MDgsNyArOTA5LDcgQEAKIH0KIAogc3RydWN0IElwY29Cb3ggOiBwdWJsaWMgQm94IHsKLSAgICBJcGNvQm94KERhdGFTb3VyY2VCYXNlICpzb3VyY2UsIFZlY3RvcjxzcDxJdGVtUHJvcGVydHk+ID4gKnByb3BlcnRpZXMpIDoKKyAgICBJcGNvQm94KERhdGFTb3VyY2VIZWxwZXIgKnNvdXJjZSwgVmVjdG9yPHNwPEl0ZW1Qcm9wZXJ0eT4gPiAqcHJvcGVydGllcykgOgogICAgICAgICBCb3goc291cmNlLCBGT1VSQ0MoJ2knLCAncCcsICdjJywgJ28nKSksIG1JdGVtUHJvcGVydGllcyhwcm9wZXJ0aWVzKSB7fQogCiAgICAgc3RhdHVzX3QgcGFyc2Uob2ZmNjRfdCBvZmZzZXQsIHNpemVfdCBzaXplKTsKQEAgLTk2NSw3ICs5NjYsNyBAQAogfQogCiBzdHJ1Y3QgSXBycEJveCA6IHB1YmxpYyBCb3ggewotICAgIElwcnBCb3goRGF0YVNvdXJjZUJhc2UgKnNvdXJjZSwKKyAgICBJcHJwQm94KERhdGFTb3VyY2VIZWxwZXIgKnNvdXJjZSwKICAgICAgICAgICAgIFZlY3RvcjxzcDxJdGVtUHJvcGVydHk+ID4gKnByb3BlcnRpZXMsCiAgICAgICAgICAgICBWZWN0b3I8QXNzb2NpYXRpb25FbnRyeT4gKmFzc29jaWF0aW9ucykgOgogICAgICAgICBCb3goc291cmNlLCBGT1VSQ0MoJ2knLCAncCcsICdyJywgJ3AnKSksCkBAIC0xMDIyLDcgKzEwMjMsNyBAQAogfTsKIAogc3RydWN0IEluZmVCb3ggOiBwdWJsaWMgRnVsbEJveCB7Ci0gICAgSW5mZUJveChEYXRhU291cmNlQmFzZSAqc291cmNlKSA6CisgICAgSW5mZUJveChEYXRhU291cmNlSGVscGVyICpzb3VyY2UpIDoKICAgICAgICAgRnVsbEJveChzb3VyY2UsIEZPVVJDQygnaScsICduJywgJ2YnLCAnZScpKSB7fQogCiAgICAgc3RhdHVzX3QgcGFyc2Uob2ZmNjRfdCBvZmZzZXQsIHNpemVfdCBzaXplLCBJdGVtSW5mbyAqaXRlbUluZm8pOwpAQCAtMTEyNyw3ICsxMTI4LDcgQEAKIH0KIAogc3RydWN0IElpbmZCb3ggOiBwdWJsaWMgRnVsbEJveCB7Ci0gICAgSWluZkJveChEYXRhU291cmNlQmFzZSAqc291cmNlLCBWZWN0b3I8SXRlbUluZm8+ICppdGVtSW5mb3MpIDoKKyAgICBJaW5mQm94KERhdGFTb3VyY2VIZWxwZXIgKnNvdXJjZSwgVmVjdG9yPEl0ZW1JbmZvPiAqaXRlbUluZm9zKSA6CiAgICAgICAgIEZ1bGxCb3goc291cmNlLCBGT1VSQ0MoJ2knLCAnaScsICduJywgJ2YnKSksCiAgICAgICAgIG1JdGVtSW5mb3MoaXRlbUluZm9zKSwgbUhhc0dyaWRzKGZhbHNlKSB7fQogCkBAIC0xMTk2LDcgKzExOTcsNyBAQAogCiAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KIAotSXRlbVRhYmxlOjpJdGVtVGFibGUoRGF0YVNvdXJjZUJhc2UgKnNvdXJjZSkKK0l0ZW1UYWJsZTo6SXRlbVRhYmxlKERhdGFTb3VyY2VIZWxwZXIgKnNvdXJjZSkKICAgICA6IG1EYXRhU291cmNlKHNvdXJjZSksCiAgICAgICBtUHJpbWFyeUl0ZW1JZCgwKSwKICAgICAgIG1JZGF0T2Zmc2V0KDApLApAQCAtMTQ3Niw3ICsxNDc3LDcgQEAKICAgICByZXR1cm4gbUltYWdlSXRlbXNWYWxpZCA/IG1EaXNwbGF5YWJsZXMuc2l6ZSgpIDogMDsKIH0KIAotc3A8TWV0YURhdGE+IEl0ZW1UYWJsZTo6Z2V0SW1hZ2VNZXRhKGNvbnN0IHVpbnQzMl90IGltYWdlSW5kZXgpIHsKK0FNZWRpYUZvcm1hdCAqSXRlbVRhYmxlOjpnZXRJbWFnZU1ldGEoY29uc3QgdWludDMyX3QgaW1hZ2VJbmRleCkgewogICAgIGlmICghbUltYWdlSXRlbXNWYWxpZCkgewogICAgICAgICByZXR1cm4gTlVMTDsKICAgICB9CkBAIC0xNTAxLDY0ICsxNTAyLDc5IEBACiAgICAgICAgIH0KICAgICB9CiAKLSAgICBzcDxNZXRhRGF0YT4gbWV0YSA9IG5ldyBNZXRhRGF0YTsKLSAgICBtZXRhLT5zZXRDU3RyaW5nKGtLZXlNSU1FVHlwZSwgTUVESUFfTUlNRVRZUEVfSU1BR0VfQU5EUk9JRF9IRUlDKTsKKyAgICBBTWVkaWFGb3JtYXQgKm1ldGEgPSBBTWVkaWFGb3JtYXRfbmV3KCk7CisgICAgQU1lZGlhRm9ybWF0X3NldFN0cmluZyhtZXRhLCBBTUVESUFGT1JNQVRfS0VZX01JTUUsIE1FRElBX01JTUVUWVBFX0lNQUdFX0FORFJPSURfSEVJQyk7CiAKICAgICBpZiAoaW1hZ2UtPml0ZW1JZCA9PSBtUHJpbWFyeUl0ZW1JZCkgewotICAgICAgICBtZXRhLT5zZXRJbnQzMihrS2V5VHJhY2tJc0RlZmF1bHQsIDEpOworICAgICAgICBBTWVkaWFGb3JtYXRfc2V0SW50MzIobWV0YSwgQU1FRElBRk9STUFUX0tFWV9JU19ERUZBVUxULCAxKTsKICAgICB9CiAKICAgICBBTE9HVigiaW1hZ2VbJXVdOiBzaXplICVkeCVkIiwgaW1hZ2VJbmRleCwgaW1hZ2UtPndpZHRoLCBpbWFnZS0+aGVpZ2h0KTsKIAotICAgIG1ldGEtPnNldEludDMyKGtLZXlXaWR0aCwgaW1hZ2UtPndpZHRoKTsKLSAgICBtZXRhLT5zZXRJbnQzMihrS2V5SGVpZ2h0LCBpbWFnZS0+aGVpZ2h0KTsKKyAgICBBTWVkaWFGb3JtYXRfc2V0SW50MzIobWV0YSwgQU1FRElBRk9STUFUX0tFWV9XSURUSCwgaW1hZ2UtPndpZHRoKTsKKyAgICBBTWVkaWFGb3JtYXRfc2V0SW50MzIobWV0YSwgQU1FRElBRk9STUFUX0tFWV9IRUlHSFQsIGltYWdlLT5oZWlnaHQpOwogICAgIGlmIChpbWFnZS0+cm90YXRpb24gIT0gMCkgewogICAgICAgICAvLyBSb3RhdGlvbiBhbmdsZSBpbiBIRUlGIGlzIENDVywgY29udmVydCB0byBDVyBoZXJlIHRvIGJlCiAgICAgICAgIC8vIGNvbnNpc3RlbnQgd2l0aCB0aGUgb3RoZXIgbWVkaWEgZm9ybWF0cy4KICAgICAgICAgc3dpdGNoKGltYWdlLT5yb3RhdGlvbikgewotICAgICAgICAgICAgY2FzZSA5MDogbWV0YS0+c2V0SW50MzIoa0tleVJvdGF0aW9uLCAyNzApOyBicmVhazsKLSAgICAgICAgICAgIGNhc2UgMTgwOiBtZXRhLT5zZXRJbnQzMihrS2V5Um90YXRpb24sIDE4MCk7IGJyZWFrOwotICAgICAgICAgICAgY2FzZSAyNzA6IG1ldGEtPnNldEludDMyKGtLZXlSb3RhdGlvbiwgOTApOyBicmVhazsKKyAgICAgICAgICAgIGNhc2UgOTA6CisgICAgICAgICAgICBjYXNlIDE4MDoKKyAgICAgICAgICAgIGNhc2UgMjcwOgorICAgICAgICAgICAgICAgIEFNZWRpYUZvcm1hdF9zZXRJbnQzMihtZXRhLCBBTUVESUFGT1JNQVRfS0VZX1JPVEFUSU9OLCAzNjAgLSBpbWFnZS0+cm90YXRpb24pOworICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgZGVmYXVsdDogYnJlYWs7IC8vIGRvbid0IHNldCBpZiBpbnZhbGlkCiAgICAgICAgIH0KICAgICB9Ci0gICAgbWV0YS0+c2V0SW50MzIoa0tleU1heElucHV0U2l6ZSwgaW1hZ2UtPndpZHRoICogaW1hZ2UtPmhlaWdodCAqIDEuNSk7CisgICAgQU1lZGlhRm9ybWF0X3NldEludDMyKG1ldGEsCisgICAgICAgICAgICBBTUVESUFGT1JNQVRfS0VZX01BWF9JTlBVVF9TSVpFLCBpbWFnZS0+d2lkdGggKiBpbWFnZS0+aGVpZ2h0ICogMS41KTsKIAogICAgIGlmICghaW1hZ2UtPnRodW1ibmFpbHMuZW1wdHkoKSkgewogICAgICAgICBzc2l6ZV90IHRodW1iSXRlbUluZGV4ID0gbUl0ZW1JZFRvSXRlbU1hcC5pbmRleE9mS2V5KGltYWdlLT50aHVtYm5haWxzWzBdKTsKICAgICAgICAgaWYgKHRodW1iSXRlbUluZGV4ID49IDApIHsKICAgICAgICAgICAgIGNvbnN0IEltYWdlSXRlbSAmdGh1bWJuYWlsID0gbUl0ZW1JZFRvSXRlbU1hcFt0aHVtYkl0ZW1JbmRleF07CiAKLSAgICAgICAgICAgIG1ldGEtPnNldEludDMyKGtLZXlUaHVtYm5haWxXaWR0aCwgdGh1bWJuYWlsLndpZHRoKTsKLSAgICAgICAgICAgIG1ldGEtPnNldEludDMyKGtLZXlUaHVtYm5haWxIZWlnaHQsIHRodW1ibmFpbC5oZWlnaHQpOwotICAgICAgICAgICAgbWV0YS0+c2V0RGF0YShrS2V5VGh1bWJuYWlsSFZDQywga1R5cGVIVkNDLAotICAgICAgICAgICAgICAgICAgICB0aHVtYm5haWwuaHZjYy0+ZGF0YSgpLCB0aHVtYm5haWwuaHZjYy0+c2l6ZSgpKTsKLSAgICAgICAgICAgIEFMT0dWKCJpbWFnZVsldV06IHRodW1ibmFpbDogc2l6ZSAlZHglZCwgaXRlbSBpbmRleCAlemQiLAotICAgICAgICAgICAgICAgICAgICBpbWFnZUluZGV4LCB0aHVtYm5haWwud2lkdGgsIHRodW1ibmFpbC5oZWlnaHQsIHRodW1iSXRlbUluZGV4KTsKKyAgICAgICAgICAgIGlmICh0aHVtYm5haWwuaHZjYyAhPSBOVUxMKSB7CisgICAgICAgICAgICAgICAgQU1lZGlhRm9ybWF0X3NldEludDMyKG1ldGEsCisgICAgICAgICAgICAgICAgICAgICAgICBBTUVESUFGT1JNQVRfS0VZX1RIVU1CTkFJTF9XSURUSCwgdGh1bWJuYWlsLndpZHRoKTsKKyAgICAgICAgICAgICAgICBBTWVkaWFGb3JtYXRfc2V0SW50MzIobWV0YSwKKyAgICAgICAgICAgICAgICAgICAgICAgIEFNRURJQUZPUk1BVF9LRVlfVEhVTUJOQUlMX0hFSUdIVCwgdGh1bWJuYWlsLmhlaWdodCk7CisgICAgICAgICAgICAgICAgQU1lZGlhRm9ybWF0X3NldEJ1ZmZlcihtZXRhLAorICAgICAgICAgICAgICAgICAgICAgICAgQU1FRElBRk9STUFUX0tFWV9DU0RfSEVWQywgdGh1bWJuYWlsLmh2Y2MtPmRhdGEoKSwgdGh1bWJuYWlsLmh2Y2MtPnNpemUoKSk7CisgICAgICAgICAgICAgICAgQUxPR1YoImltYWdlWyV1XTogdGh1bWJuYWlsOiBzaXplICVkeCVkLCBpdGVtIGluZGV4ICV6ZCIsCisgICAgICAgICAgICAgICAgICAgICAgICBpbWFnZUluZGV4LCB0aHVtYm5haWwud2lkdGgsIHRodW1ibmFpbC5oZWlnaHQsIHRodW1iSXRlbUluZGV4KTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgQUxPR1coIiVzOiB0aHVtYm5haWwgZGF0YSBpcyBtaXNzaW5nIGZvciBpbWFnZVsldV0hIiwgX19GVU5DVElPTl9fLCBpbWFnZUluZGV4KTsKKyAgICAgICAgICAgIH0KICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIEFMT0dXKCIlczogUmVmZXJlbmNlZCB0aHVtYm5haWwgZG9lcyBub3QgZXhpc3QhIiwgX19GVU5DVElPTl9fKTsKICAgICAgICAgfQogICAgIH0KIAogICAgIGlmIChpbWFnZS0+aXNHcmlkKCkpIHsKLSAgICAgICAgbWV0YS0+c2V0SW50MzIoa0tleUdyaWRSb3dzLCBpbWFnZS0+cm93cyk7Ci0gICAgICAgIG1ldGEtPnNldEludDMyKGtLZXlHcmlkQ29scywgaW1hZ2UtPmNvbHVtbnMpOwotCisgICAgICAgIEFNZWRpYUZvcm1hdF9zZXRJbnQzMihtZXRhLAorICAgICAgICAgICAgICAgIEFNRURJQUZPUk1BVF9LRVlfR1JJRF9ST1dTLCBpbWFnZS0+cm93cyk7CisgICAgICAgIEFNZWRpYUZvcm1hdF9zZXRJbnQzMihtZXRhLAorICAgICAgICAgICAgICAgIEFNRURJQUZPUk1BVF9LRVlfR1JJRF9DT0xVTU5TLCBpbWFnZS0+Y29sdW1ucyk7CiAgICAgICAgIC8vIHBvaW50IGltYWdlIHRvIHRoZSBmaXJzdCB0aWxlIGZvciBncmlkIHNpemUgYW5kIEhWQ0MKICAgICAgICAgaW1hZ2UgPSAmbUl0ZW1JZFRvSXRlbU1hcC5lZGl0VmFsdWVBdCh0aWxlSXRlbUluZGV4KTsKLSAgICAgICAgbWV0YS0+c2V0SW50MzIoa0tleVRpbGVXaWR0aCwgaW1hZ2UtPndpZHRoKTsKLSAgICAgICAgbWV0YS0+c2V0SW50MzIoa0tleVRpbGVIZWlnaHQsIGltYWdlLT5oZWlnaHQpOwotICAgICAgICBtZXRhLT5zZXRJbnQzMihrS2V5TWF4SW5wdXRTaXplLCBpbWFnZS0+d2lkdGggKiBpbWFnZS0+aGVpZ2h0ICogMS41KTsKKyAgICAgICAgQU1lZGlhRm9ybWF0X3NldEludDMyKG1ldGEsCisgICAgICAgICAgICAgICAgQU1FRElBRk9STUFUX0tFWV9USUxFX1dJRFRILCBpbWFnZS0+d2lkdGgpOworICAgICAgICBBTWVkaWFGb3JtYXRfc2V0SW50MzIobWV0YSwKKyAgICAgICAgICAgICAgICBBTUVESUFGT1JNQVRfS0VZX1RJTEVfSEVJR0hULCBpbWFnZS0+aGVpZ2h0KTsKKyAgICAgICAgQU1lZGlhRm9ybWF0X3NldEludDMyKG1ldGEsCisgICAgICAgICAgICAgICAgQU1FRElBRk9STUFUX0tFWV9NQVhfSU5QVVRfU0laRSwgaW1hZ2UtPndpZHRoICogaW1hZ2UtPmhlaWdodCAqIDEuNSk7CiAgICAgfQogCiAgICAgaWYgKGltYWdlLT5odmNjID09IE5VTEwpIHsKICAgICAgICAgQUxPR0UoIiVzOiBodmNjIGlzIG1pc3NpbmcgZm9yIGltYWdlWyV1XSEiLCBfX0ZVTkNUSU9OX18sIGltYWdlSW5kZXgpOwogICAgICAgICByZXR1cm4gTlVMTDsKICAgICB9Ci0gICAgbWV0YS0+c2V0RGF0YShrS2V5SFZDQywga1R5cGVIVkNDLCBpbWFnZS0+aHZjYy0+ZGF0YSgpLCBpbWFnZS0+aHZjYy0+c2l6ZSgpKTsKKyAgICBBTWVkaWFGb3JtYXRfc2V0QnVmZmVyKG1ldGEsCisgICAgICAgICAgICBBTUVESUFGT1JNQVRfS0VZX0NTRF9IRVZDLCBpbWFnZS0+aHZjYy0+ZGF0YSgpLCBpbWFnZS0+aHZjYy0+c2l6ZSgpKTsKIAogICAgIGlmIChpbWFnZS0+aWNjICE9IE5VTEwpIHsKLSAgICAgICAgbWV0YS0+c2V0RGF0YShrS2V5SWNjUHJvZmlsZSwgMCwgaW1hZ2UtPmljYy0+ZGF0YSgpLCBpbWFnZS0+aWNjLT5zaXplKCkpOworICAgICAgICBBTWVkaWFGb3JtYXRfc2V0QnVmZmVyKG1ldGEsCisgICAgICAgICAgICAgICAgQU1FRElBRk9STUFUX0tFWV9JQ0NfUFJPRklMRSwgaW1hZ2UtPmljYy0+ZGF0YSgpLCBpbWFnZS0+aWNjLT5zaXplKCkpOwogICAgIH0KICAgICByZXR1cm4gbWV0YTsKIH0KZGlmZiAtLWdpdCBhL21lZGlhL2V4dHJhY3RvcnMvbXA0L0l0ZW1UYWJsZS5oIGIvbWVkaWEvZXh0cmFjdG9ycy9tcDQvSXRlbVRhYmxlLmgKaW5kZXggNTM2ZGNiMC4uYmU4MWI1OSAxMDA2NDQKLS0tIGEvbWVkaWEvZXh0cmFjdG9ycy9tcDQvSXRlbVRhYmxlLmgKKysrIGIvbWVkaWEvZXh0cmFjdG9ycy9tcDQvSXRlbVRhYmxlLmgKQEAgLTE5LDEzICsxOSwxNSBAQAogCiAjaW5jbHVkZSA8c2V0PgogCisjaW5jbHVkZSA8bWVkaWEvTmRrTWVkaWFGb3JtYXQuaD4KKwogI2luY2x1ZGUgPG1lZGlhL3N0YWdlZnJpZ2h0L2ZvdW5kYXRpb24vQURlYnVnLmg+CiAjaW5jbHVkZSA8dXRpbHMvS2V5ZWRWZWN0b3IuaD4KICNpbmNsdWRlIDx1dGlscy9SZWZCYXNlLmg+CiAKIG5hbWVzcGFjZSBhbmRyb2lkIHsKIAotY2xhc3MgRGF0YVNvdXJjZUJhc2U7CitjbGFzcyBEYXRhU291cmNlSGVscGVyOwogY2xhc3MgTWV0YURhdGE7CiAKIG5hbWVzcGFjZSBoZWlmIHsKQEAgLTQ1LDEzICs0NywxMyBAQAogCiBjbGFzcyBJdGVtVGFibGUgOiBwdWJsaWMgUmVmQmFzZSB7CiBwdWJsaWM6Ci0gICAgZXhwbGljaXQgSXRlbVRhYmxlKERhdGFTb3VyY2VCYXNlICpzb3VyY2UpOworICAgIGV4cGxpY2l0IEl0ZW1UYWJsZShEYXRhU291cmNlSGVscGVyICpzb3VyY2UpOwogCiAgICAgc3RhdHVzX3QgcGFyc2UodWludDMyX3QgdHlwZSwgb2ZmNjRfdCBvZmZzZXQsIHNpemVfdCBzaXplKTsKIAogICAgIGJvb2wgaXNWYWxpZCgpIHsgcmV0dXJuIG1JbWFnZUl0ZW1zVmFsaWQ7IH0KICAgICB1aW50MzJfdCBjb3VudEltYWdlcygpIGNvbnN0OwotICAgIHNwPE1ldGFEYXRhPiBnZXRJbWFnZU1ldGEoY29uc3QgdWludDMyX3QgaW1hZ2VJbmRleCk7CisgICAgQU1lZGlhRm9ybWF0ICpnZXRJbWFnZU1ldGEoY29uc3QgdWludDMyX3QgaW1hZ2VJbmRleCk7CiAgICAgc3RhdHVzX3QgZmluZEltYWdlSXRlbShjb25zdCB1aW50MzJfdCBpbWFnZUluZGV4LCB1aW50MzJfdCAqaXRlbUluZGV4KTsKICAgICBzdGF0dXNfdCBmaW5kVGh1bWJuYWlsSXRlbShjb25zdCB1aW50MzJfdCBpbWFnZUluZGV4LCB1aW50MzJfdCAqaXRlbUluZGV4KTsKICAgICBzdGF0dXNfdCBnZXRJbWFnZU9mZnNldEFuZFNpemUoCkBAIC02Miw3ICs2NCw3IEBACiAgICAgfkl0ZW1UYWJsZSgpOwogCiBwcml2YXRlOgotICAgIERhdGFTb3VyY2VCYXNlICptRGF0YVNvdXJjZTsKKyAgICBEYXRhU291cmNlSGVscGVyICptRGF0YVNvdXJjZTsKIAogICAgIEtleWVkVmVjdG9yPHVpbnQzMl90LCBJdGVtTG9jPiBtSXRlbUxvY3M7CiAgICAgVmVjdG9yPEl0ZW1JbmZvPiBtSXRlbUluZm9zOwpkaWZmIC0tZ2l0IGEvbWVkaWEvZXh0cmFjdG9ycy9tcDQvTVBFRzRFeHRyYWN0b3IuY3BwIGIvbWVkaWEvZXh0cmFjdG9ycy9tcDQvTVBFRzRFeHRyYWN0b3IuY3BwCmluZGV4IDIxY2NmNDQuLjMzN2ZmMmEgMTAwNjQ0Ci0tLSBhL21lZGlhL2V4dHJhY3RvcnMvbXA0L01QRUc0RXh0cmFjdG9yLmNwcAorKysgYi9tZWRpYS9leHRyYWN0b3JzL21wNC9NUEVHNEV4dHJhY3Rvci5jcHAKQEAgLTI2LDE3ICsyNiwxOSBAQAogCiAjaW5jbHVkZSA8dXRpbHMvTG9nLmg+CiAKKyNpbmNsdWRlICJBQzRQYXJzZXIuaCIKICNpbmNsdWRlICJNUEVHNEV4dHJhY3Rvci5oIgogI2luY2x1ZGUgIlNhbXBsZVRhYmxlLmgiCiAjaW5jbHVkZSAiSXRlbVRhYmxlLmgiCiAjaW5jbHVkZSAiaW5jbHVkZS9FU0RTLmgiCiAKKyNpbmNsdWRlIDxtZWRpYS9EYXRhU291cmNlQmFzZS5oPgogI2luY2x1ZGUgPG1lZGlhL0V4dHJhY3RvclV0aWxzLmg+Ci0jaW5jbHVkZSA8bWVkaWEvTWVkaWFUcmFjay5oPgogI2luY2x1ZGUgPG1lZGlhL3N0YWdlZnJpZ2h0L2ZvdW5kYXRpb24vQUJpdFJlYWRlci5oPgogI2luY2x1ZGUgPG1lZGlhL3N0YWdlZnJpZ2h0L2ZvdW5kYXRpb24vQUJ1ZmZlci5oPgogI2luY2x1ZGUgPG1lZGlhL3N0YWdlZnJpZ2h0L2ZvdW5kYXRpb24vQURlYnVnLmg+CiAjaW5jbHVkZSA8bWVkaWEvc3RhZ2VmcmlnaHQvZm91bmRhdGlvbi9BTWVzc2FnZS5oPgorI2luY2x1ZGUgPG1lZGlhL3N0YWdlZnJpZ2h0L2ZvdW5kYXRpb24vQXVkaW9QcmVzZW50YXRpb25JbmZvLmg+CiAjaW5jbHVkZSA8bWVkaWEvc3RhZ2VmcmlnaHQvZm91bmRhdGlvbi9BVXRpbHMuaD4KICNpbmNsdWRlIDxtZWRpYS9zdGFnZWZyaWdodC9mb3VuZGF0aW9uL0J5dGVVdGlscy5oPgogI2luY2x1ZGUgPG1lZGlhL3N0YWdlZnJpZ2h0L2ZvdW5kYXRpb24vQ29sb3JVdGlscy5oPgpAQCAtNjgsMTMgKzcwLDEyIEBACiAgICAga01heEF0b21TaXplID0gNjQgKiAxMDI0ICogMTAyNCwKIH07CiAKK2NsYXNzIE1QRUc0U291cmNlIDogcHVibGljIE1lZGlhVHJhY2tIZWxwZXJWMiB7CiBzdGF0aWMgY29uc3Qgc2l6ZV90ICBrTWF4UGNtRnJhbWVTaXplID0gODE5MjsKLQotY2xhc3MgTVBFRzRTb3VyY2UgOiBwdWJsaWMgTWVkaWFUcmFjayB7CiBwdWJsaWM6CiAgICAgLy8gQ2FsbGVyIHJldGFpbnMgb3duZXJzaGlwIG9mIGJvdGggImRhdGFTb3VyY2UiIGFuZCAic2FtcGxlVGFibGUiLgotICAgIE1QRUc0U291cmNlKE1ldGFEYXRhQmFzZSAmZm9ybWF0LAotICAgICAgICAgICAgICAgIERhdGFTb3VyY2VCYXNlICpkYXRhU291cmNlLAorICAgIE1QRUc0U291cmNlKEFNZWRpYUZvcm1hdCAqZm9ybWF0LAorICAgICAgICAgICAgICAgIERhdGFTb3VyY2VIZWxwZXIgKmRhdGFTb3VyY2UsCiAgICAgICAgICAgICAgICAgaW50MzJfdCB0aW1lU2NhbGUsCiAgICAgICAgICAgICAgICAgY29uc3Qgc3A8U2FtcGxlVGFibGU+ICZzYW1wbGVUYWJsZSwKICAgICAgICAgICAgICAgICBWZWN0b3I8U2lkeEVudHJ5PiAmc2lkeCwKQEAgLTgzLDIyICs4NCwyMyBAQAogICAgICAgICAgICAgICAgIGNvbnN0IHNwPEl0ZW1UYWJsZT4gJml0ZW1UYWJsZSk7CiAgICAgdmlydHVhbCBzdGF0dXNfdCBpbml0KCk7CiAKLSAgICB2aXJ0dWFsIHN0YXR1c190IHN0YXJ0KE1ldGFEYXRhQmFzZSAqcGFyYW1zID0gTlVMTCk7Ci0gICAgdmlydHVhbCBzdGF0dXNfdCBzdG9wKCk7CisgICAgdmlydHVhbCBtZWRpYV9zdGF0dXNfdCBzdGFydCgpOworICAgIHZpcnR1YWwgbWVkaWFfc3RhdHVzX3Qgc3RvcCgpOwogCi0gICAgdmlydHVhbCBzdGF0dXNfdCBnZXRGb3JtYXQoTWV0YURhdGFCYXNlICYpOworICAgIHZpcnR1YWwgbWVkaWFfc3RhdHVzX3QgZ2V0Rm9ybWF0KEFNZWRpYUZvcm1hdCAqKTsKIAotICAgIHZpcnR1YWwgc3RhdHVzX3QgcmVhZChNZWRpYUJ1ZmZlckJhc2UgKipidWZmZXIsIGNvbnN0IFJlYWRPcHRpb25zICpvcHRpb25zID0gTlVMTCk7CisgICAgdmlydHVhbCBtZWRpYV9zdGF0dXNfdCByZWFkKE1lZGlhQnVmZmVyQmFzZSAqKmJ1ZmZlciwgY29uc3QgUmVhZE9wdGlvbnMgKm9wdGlvbnMgPSBOVUxMKTsKICAgICB2aXJ0dWFsIGJvb2wgc3VwcG9ydE5vbmJsb2NraW5nUmVhZCgpIHsgcmV0dXJuIHRydWU7IH0KLSAgICB2aXJ0dWFsIHN0YXR1c190IGZyYWdtZW50ZWRSZWFkKE1lZGlhQnVmZmVyQmFzZSAqKmJ1ZmZlciwgY29uc3QgUmVhZE9wdGlvbnMgKm9wdGlvbnMgPSBOVUxMKTsKKyAgICB2aXJ0dWFsIG1lZGlhX3N0YXR1c190IGZyYWdtZW50ZWRSZWFkKAorICAgICAgICAgICAgTWVkaWFCdWZmZXJCYXNlICoqYnVmZmVyLCBjb25zdCBSZWFkT3B0aW9ucyAqb3B0aW9ucyA9IE5VTEwpOwogCiAgICAgdmlydHVhbCB+TVBFRzRTb3VyY2UoKTsKIAogcHJpdmF0ZToKICAgICBNdXRleCBtTG9jazsKIAotICAgIE1ldGFEYXRhQmFzZSAmbUZvcm1hdDsKLSAgICBEYXRhU291cmNlQmFzZSAqbURhdGFTb3VyY2U7CisgICAgQU1lZGlhRm9ybWF0ICptRm9ybWF0OworICAgIERhdGFTb3VyY2VIZWxwZXIgKm1EYXRhU291cmNlOwogICAgIGludDMyX3QgbVRpbWVzY2FsZTsKICAgICBzcDxTYW1wbGVUYWJsZT4gbVNhbXBsZVRhYmxlOwogICAgIHVpbnQzMl90IG1DdXJyZW50U2FtcGxlSW5kZXg7CkBAIC0xMjksNiArMTMxLDcgQEAKIAogICAgIGJvb2wgbUlzQVZDOwogICAgIGJvb2wgbUlzSEVWQzsKKyAgICBib29sIG1Jc0FDNDsKICAgICBib29sIG1Jc1BjbTsKICAgICBzaXplX3QgbU5BTExlbmd0aFNpemU7CiAKQEAgLTEzOCw4ICsxNDEsNiBAQAogCiAgICAgTWVkaWFCdWZmZXJCYXNlICptQnVmZmVyOwogCi0gICAgYm9vbCBtV2FudHNOQUxGcmFnbWVudHM7Ci0KICAgICB1aW50OF90ICptU3JjQnVmZmVyOwogCiAgICAgYm9vbCBtSXNIZWlmOwpAQCAtMTUzLDYgKzE1NCw4IEBACiAgICAgc3RhdHVzX3QgcGFyc2VTYW1wbGVBdXhpbGlhcnlJbmZvcm1hdGlvbk9mZnNldHMob2ZmNjRfdCBvZmZzZXQsIG9mZjY0X3Qgc2l6ZSk7CiAgICAgc3RhdHVzX3QgcGFyc2VDbGVhckVuY3J5cHRlZFNpemVzKG9mZjY0X3Qgb2Zmc2V0LCBib29sIGlzU3Vic2FtcGxlRW5jcnlwdGlvbiwgdWludDMyX3QgZmxhZ3MpOwogICAgIHN0YXR1c190IHBhcnNlU2FtcGxlRW5jcnlwdGlvbihvZmY2NF90IG9mZnNldCk7CisgICAgLy8gcmV0dXJucyAtMSBmb3IgaW52YWxpZCBsYXllciBJRAorICAgIGludDMyX3QgcGFyc2VIRVZDTGF5ZXJJZChjb25zdCB1aW50OF90ICpkYXRhLCBzaXplX3Qgc2l6ZSk7CiAKICAgICBzdHJ1Y3QgVHJhY2tGcmFnbWVudEhlYWRlckluZm8gewogICAgICAgICBlbnVtIEZsYWdzIHsKQEAgLTE5OCwxNCArMjAxLDE0IEBACiAvLyBwb3NzaWJseSB3cmFwcGluZyBtdWx0aXBsZSB0aW1lcyB0byBjb3ZlciBhbGwgdHJhY2tzLCBpLmUuCiAvLyBFYWNoIENhY2hlZFJhbmdlZERhdGFTb3VyY2UgY2FjaGVzIHRoZSBzYW1wbGV0YWJsZSBtZXRhZGF0YSBmb3IgYSBzaW5nbGUgdHJhY2suCiAKLXN0cnVjdCBDYWNoZWRSYW5nZWREYXRhU291cmNlIDogcHVibGljIERhdGFTb3VyY2VCYXNlIHsKLSAgICBleHBsaWNpdCBDYWNoZWRSYW5nZWREYXRhU291cmNlKERhdGFTb3VyY2VCYXNlICpzb3VyY2UpOworY2xhc3MgQ2FjaGVkUmFuZ2VkRGF0YVNvdXJjZSA6IHB1YmxpYyBEYXRhU291cmNlSGVscGVyIHsKK3B1YmxpYzoKKyAgICBleHBsaWNpdCBDYWNoZWRSYW5nZWREYXRhU291cmNlKERhdGFTb3VyY2VIZWxwZXIgKnNvdXJjZSk7CiAgICAgdmlydHVhbCB+Q2FjaGVkUmFuZ2VkRGF0YVNvdXJjZSgpOwogCi0gICAgdmlydHVhbCBzdGF0dXNfdCBpbml0Q2hlY2soKSBjb25zdDsKLSAgICB2aXJ0dWFsIHNzaXplX3QgcmVhZEF0KG9mZjY0X3Qgb2Zmc2V0LCB2b2lkICpkYXRhLCBzaXplX3Qgc2l6ZSk7Ci0gICAgdmlydHVhbCBzdGF0dXNfdCBnZXRTaXplKG9mZjY0X3QgKnNpemUpOwotICAgIHZpcnR1YWwgdWludDMyX3QgZmxhZ3MoKTsKKyAgICBzc2l6ZV90IHJlYWRBdChvZmY2NF90IG9mZnNldCwgdm9pZCAqZGF0YSwgc2l6ZV90IHNpemUpIG92ZXJyaWRlOworICAgIHN0YXR1c190IGdldFNpemUob2ZmNjRfdCAqc2l6ZSkgb3ZlcnJpZGU7CisgICAgdWludDMyX3QgZmxhZ3MoKSBvdmVycmlkZTsKIAogICAgIHN0YXR1c190IHNldENhY2hlZFJhbmdlKG9mZjY0X3Qgb2Zmc2V0LCBzaXplX3Qgc2l6ZSwgYm9vbCBhc3N1bWVTb3VyY2VPd25lcnNoaXBPblN1Y2Nlc3MpOwogCkBAIC0yMTMsNyArMjE2LDcgQEAKIHByaXZhdGU6CiAgICAgTXV0ZXggbUxvY2s7CiAKLSAgICBEYXRhU291cmNlQmFzZSAqbVNvdXJjZTsKKyAgICBEYXRhU291cmNlSGVscGVyICptU291cmNlOwogICAgIGJvb2wgbU93bnNEYXRhU291cmNlOwogICAgIG9mZjY0X3QgbUNhY2hlZE9mZnNldDsKICAgICBzaXplX3QgbUNhY2hlZFNpemU7CkBAIC0yMjUsOCArMjI4LDkgQEAKICAgICBDYWNoZWRSYW5nZWREYXRhU291cmNlICZvcGVyYXRvcj0oY29uc3QgQ2FjaGVkUmFuZ2VkRGF0YVNvdXJjZSAmKTsKIH07CiAKLUNhY2hlZFJhbmdlZERhdGFTb3VyY2U6OkNhY2hlZFJhbmdlZERhdGFTb3VyY2UoRGF0YVNvdXJjZUJhc2UgKnNvdXJjZSkKLSAgICA6IG1Tb3VyY2Uoc291cmNlKSwKK0NhY2hlZFJhbmdlZERhdGFTb3VyY2U6OkNhY2hlZFJhbmdlZERhdGFTb3VyY2UoRGF0YVNvdXJjZUhlbHBlciAqc291cmNlKQorICAgIDogRGF0YVNvdXJjZUhlbHBlcihzb3VyY2UpLAorICAgICAgbVNvdXJjZShzb3VyY2UpLAogICAgICAgbU93bnNEYXRhU291cmNlKGZhbHNlKSwKICAgICAgIG1DYWNoZWRPZmZzZXQoMCksCiAgICAgICBtQ2FjaGVkU2l6ZSgwKSwKQEAgLTIzNiw3ICsyNDAsNyBAQAogQ2FjaGVkUmFuZ2VkRGF0YVNvdXJjZTo6fkNhY2hlZFJhbmdlZERhdGFTb3VyY2UoKSB7CiAgICAgY2xlYXJDYWNoZSgpOwogICAgIGlmIChtT3duc0RhdGFTb3VyY2UpIHsKLSAgICAgICAgZGVsZXRlIChDYWNoZWRSYW5nZWREYXRhU291cmNlKiltU291cmNlOworICAgICAgICBkZWxldGUgbVNvdXJjZTsKICAgICB9CiB9CiAKQEAgLTI1MCwxMCArMjU0LDYgQEAKICAgICBtQ2FjaGVkU2l6ZSA9IDA7CiB9CiAKLXN0YXR1c190IENhY2hlZFJhbmdlZERhdGFTb3VyY2U6OmluaXRDaGVjaygpIGNvbnN0IHsKLSAgICByZXR1cm4gbVNvdXJjZS0+aW5pdENoZWNrKCk7Ci19Ci0KIHNzaXplX3QgQ2FjaGVkUmFuZ2VkRGF0YVNvdXJjZTo6cmVhZEF0KG9mZjY0X3Qgb2Zmc2V0LCB2b2lkICpkYXRhLCBzaXplX3Qgc2l6ZSkgewogICAgIE11dGV4OjpBdXRvbG9jayBhdXRvTG9jayhtTG9jayk7CiAKQEAgLTMxNSw2ICszMTUsOSBAQAogICAgICAgICBjYXNlIEZPVVJDQygncycsICdhJywgJ3cnLCAnYicpOgogICAgICAgICAgICAgcmV0dXJuIE1FRElBX01JTUVUWVBFX0FVRElPX0FNUl9XQjsKIAorICAgICAgICBjYXNlIEZPVVJDQygnZScsICdjJywgJy0nLCAnMycpOgorICAgICAgICAgICAgcmV0dXJuIE1FRElBX01JTUVUWVBFX0FVRElPX0VBQzM7CisKICAgICAgICAgY2FzZSBGT1VSQ0MoJ20nLCAncCcsICc0JywgJ3YnKToKICAgICAgICAgICAgIHJldHVybiBNRURJQV9NSU1FVFlQRV9WSURFT19NUEVHNDsKIApAQCAtMzI5LDYgKzMzMiw4IEBACiAgICAgICAgIGNhc2UgRk9VUkNDKCdoJywgJ3YnLCAnYycsICcxJyk6CiAgICAgICAgIGNhc2UgRk9VUkNDKCdoJywgJ2UnLCAndicsICcxJyk6CiAgICAgICAgICAgICByZXR1cm4gTUVESUFfTUlNRVRZUEVfVklERU9fSEVWQzsKKyAgICAgICAgY2FzZSBGT1VSQ0MoJ2EnLCAnYycsICctJywgJzQnKToKKyAgICAgICAgICAgIHJldHVybiBNRURJQV9NSU1FVFlQRV9BVURJT19BQzQ7CiAKICAgICAgICAgY2FzZSBGT1VSQ0MoJ3QnLCAndycsICdvJywgJ3MnKToKICAgICAgICAgY2FzZSBGT1VSQ0MoJ3MnLCAnbycsICd3JywgJ3QnKToKQEAgLTM2MiwxMiArMzY3LDExIEBACiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi1NUEVHNEV4dHJhY3Rvcjo6TVBFRzRFeHRyYWN0b3IoRGF0YVNvdXJjZUJhc2UgKnNvdXJjZSwgY29uc3QgY2hhciAqbWltZSkKK01QRUc0RXh0cmFjdG9yOjpNUEVHNEV4dHJhY3RvcihEYXRhU291cmNlSGVscGVyICpzb3VyY2UsIGNvbnN0IGNoYXIgKm1pbWUpCiAgICAgOiBtTW9vZk9mZnNldCgwKSwKICAgICAgIG1Nb29mRm91bmQoZmFsc2UpLAogICAgICAgbU1kYXRGb3VuZChmYWxzZSksCiAgICAgICBtRGF0YVNvdXJjZShzb3VyY2UpLAotICAgICAgbUNhY2hlZFNvdXJjZShOVUxMKSwKICAgICAgIG1Jbml0Q2hlY2soTk9fSU5JVCksCiAgICAgICBtSGVhZGVyVGltZXNjYWxlKDApLAogICAgICAgbUlzUVQoZmFsc2UpLApAQCAtMzc3LDYgKzM4MSw3IEBACiAgICAgICBtRmlyc3RUcmFjayhOVUxMKSwKICAgICAgIG1MYXN0VHJhY2soTlVMTCkgewogICAgIEFMT0dWKCJtaW1lPSVzLCBtUHJlZmVySGVpZj0lZCIsIG1pbWUsIG1QcmVmZXJIZWlmKTsKKyAgICBtRmlsZU1ldGFEYXRhID0gQU1lZGlhRm9ybWF0X25ldygpOwogfQogCiBNUEVHNEV4dHJhY3Rvcjo6fk1QRUc0RXh0cmFjdG9yKCkgewpAQCAtMzg0LDYgKzM4OSw3IEBACiAgICAgd2hpbGUgKHRyYWNrKSB7CiAgICAgICAgIFRyYWNrICpuZXh0ID0gdHJhY2stPm5leHQ7CiAKKyAgICAgICAgQU1lZGlhRm9ybWF0X2RlbGV0ZSh0cmFjay0+bWV0YSk7CiAgICAgICAgIGRlbGV0ZSB0cmFjazsKICAgICAgICAgdHJhY2sgPSBuZXh0OwogICAgIH0KQEAgLTM5NCw3ICs0MDAsOCBAQAogICAgIH0KICAgICBtUHNzaC5jbGVhcigpOwogCi0gICAgZGVsZXRlIG1DYWNoZWRTb3VyY2U7CisgICAgZGVsZXRlIG1EYXRhU291cmNlOworICAgIEFNZWRpYUZvcm1hdF9kZWxldGUobUZpbGVNZXRhRGF0YSk7CiB9CiAKIHVpbnQzMl90IE1QRUc0RXh0cmFjdG9yOjpmbGFncygpIGNvbnN0IHsKQEAgLTQwMywxMyArNDEwLDEzIEBACiAgICAgICAgICAgICAgICAgICAgIChDQU5fU0VFS19CQUNLV0FSRCB8IENBTl9TRUVLX0ZPUldBUkQgfCBDQU5fU0VFSykgOiAwKTsKIH0KIAotc3RhdHVzX3QgTVBFRzRFeHRyYWN0b3I6OmdldE1ldGFEYXRhKE1ldGFEYXRhQmFzZSAmbWV0YSkgeworbWVkaWFfc3RhdHVzX3QgTVBFRzRFeHRyYWN0b3I6OmdldE1ldGFEYXRhKEFNZWRpYUZvcm1hdCAqbWV0YSkgewogICAgIHN0YXR1c190IGVycjsKICAgICBpZiAoKGVyciA9IHJlYWRNZXRhRGF0YSgpKSAhPSBPSykgewotICAgICAgICByZXR1cm4gVU5LTk9XTl9FUlJPUjsKKyAgICAgICAgcmV0dXJuIEFNRURJQV9FUlJPUl9VTktOT1dOOwogICAgIH0KLSAgICBtZXRhID0gbUZpbGVNZXRhRGF0YTsKLSAgICByZXR1cm4gT0s7CisgICAgQU1lZGlhRm9ybWF0X2NvcHkobWV0YSwgbUZpbGVNZXRhRGF0YSk7CisgICAgcmV0dXJuIEFNRURJQV9PSzsKIH0KIAogc2l6ZV90IE1QRUc0RXh0cmFjdG9yOjpjb3VudFRyYWNrcygpIHsKQEAgLTQzMCwxOCArNDM3LDE4IEBACiAgICAgcmV0dXJuIG47CiB9CiAKLXN0YXR1c190IE1QRUc0RXh0cmFjdG9yOjpnZXRUcmFja01ldGFEYXRhKAotICAgICAgICBNZXRhRGF0YUJhc2UgJm1ldGEsCittZWRpYV9zdGF0dXNfdCBNUEVHNEV4dHJhY3Rvcjo6Z2V0VHJhY2tNZXRhRGF0YSgKKyAgICAgICAgQU1lZGlhRm9ybWF0ICptZXRhLAogICAgICAgICBzaXplX3QgaW5kZXgsIHVpbnQzMl90IGZsYWdzKSB7CiAgICAgc3RhdHVzX3QgZXJyOwogICAgIGlmICgoZXJyID0gcmVhZE1ldGFEYXRhKCkpICE9IE9LKSB7Ci0gICAgICAgIHJldHVybiBVTktOT1dOX0VSUk9SOworICAgICAgICByZXR1cm4gQU1FRElBX0VSUk9SX1VOS05PV047CiAgICAgfQogCiAgICAgVHJhY2sgKnRyYWNrID0gbUZpcnN0VHJhY2s7CiAgICAgd2hpbGUgKGluZGV4ID4gMCkgewogICAgICAgICBpZiAodHJhY2sgPT0gTlVMTCkgewotICAgICAgICAgICAgcmV0dXJuIFVOS05PV05fRVJST1I7CisgICAgICAgICAgICByZXR1cm4gQU1FRElBX0VSUk9SX1VOS05PV047CiAgICAgICAgIH0KIAogICAgICAgICB0cmFjayA9IHRyYWNrLT5uZXh0OwpAQCAtNDQ5LDE1ICs0NTYsMTUgQEAKICAgICB9CiAKICAgICBpZiAodHJhY2sgPT0gTlVMTCkgewotICAgICAgICByZXR1cm4gVU5LTk9XTl9FUlJPUjsKKyAgICAgICAgcmV0dXJuIEFNRURJQV9FUlJPUl9VTktOT1dOOwogICAgIH0KIAogICAgIFs9XSB7CiAgICAgICAgIGludDY0X3QgZHVyYXRpb247CiAgICAgICAgIGludDMyX3Qgc2FtcGxlcmF0ZTsKICAgICAgICAgaWYgKHRyYWNrLT5oYXNfZWxzdCAmJiBtSGVhZGVyVGltZXNjYWxlICE9IDAgJiYKLSAgICAgICAgICAgICAgICB0cmFjay0+bWV0YS5maW5kSW50NjQoa0tleUR1cmF0aW9uLCAmZHVyYXRpb24pICYmCi0gICAgICAgICAgICAgICAgdHJhY2stPm1ldGEuZmluZEludDMyKGtLZXlTYW1wbGVSYXRlLCAmc2FtcGxlcmF0ZSkpIHsKKyAgICAgICAgICAgICAgICBBTWVkaWFGb3JtYXRfZ2V0SW50NjQodHJhY2stPm1ldGEsIEFNRURJQUZPUk1BVF9LRVlfRFVSQVRJT04sICZkdXJhdGlvbikgJiYKKyAgICAgICAgICAgICAgICBBTWVkaWFGb3JtYXRfZ2V0SW50MzIodHJhY2stPm1ldGEsIEFNRURJQUZPUk1BVF9LRVlfU0FNUExFX1JBVEUsICZzYW1wbGVyYXRlKSkgewogCiAgICAgICAgICAgICAvLyBlbHN0IGhhcyB0byBiZSBwcm9jZXNzZWQgb25seSB0aGUgZmlyc3QgdGltZSB0aGlzIGZ1bmN0aW9uIGlzIGNhbGxlZAogICAgICAgICAgICAgdHJhY2stPmhhc19lbHN0ID0gZmFsc2U7CkBAIC00ODIsMjAgKzQ4OSwxNCBAQAogICAgICAgICAgICAgLy8gZGVsYXkgPSAoKG1lZGlhX3RpbWUgKiBzYW1wbGVyYXRlKSArIGhhbGZzY2FsZSkgLyB0cmFjay0+dGltZXNjYWxlOwogICAgICAgICAgICAgaWYgKF9fYnVpbHRpbl9tdWxfb3ZlcmZsb3cobWVkaWFfdGltZSwgc2FtcGxlcmF0ZSwgJmRlbGF5KSB8fAogICAgICAgICAgICAgICAgICAgICBfX2J1aWx0aW5fYWRkX292ZXJmbG93KGRlbGF5LCBoYWxmc2NhbGUsICZkZWxheSkgfHwKLSAgICAgICAgICAgICAgICAgICAgKGRlbGF5IC89IG1IZWFkZXJUaW1lc2NhbGUsIGZhbHNlKSB8fAotICAgICAgICAgICAgICAgICAgICAvKiB0aGUgY2FsY3VsYXRlZCBkZWxheSBzaG91bGQgYmUgc21hbGwsIGJ1dCBzb21lIGFwcHMKLSAgICAgICAgICAgICAgICAgICAgICogYXBwZWFyIHRvIHdyaXRlIGEgYm9ndXMgZWRpdCBsaXN0IHRoYXQgY2F1c2VzIGEgcmVhbGx5Ci0gICAgICAgICAgICAgICAgICAgICAqIGxhcmdlIGRlbGF5LCByZXN1bHRpbmcgaW4gcGxheWJhY2sgcHJvYmxlbXMuCi0gICAgICAgICAgICAgICAgICAgICAqIElnbm9yZSBzdWNoIGVkaXQgbGlzdHMuCi0gICAgICAgICAgICAgICAgICAgICAqICg0MDk2IGlzIGVub3VnaCB0byBkcm9wIDQgZnVsbCBzYW1wbGVzKQotICAgICAgICAgICAgICAgICAgICAgKi8KLSAgICAgICAgICAgICAgICAgICAgZGVsYXkgPiA0MDk2IHx8Ci0gICAgICAgICAgICAgICAgICAgIGRlbGF5IDwgMCkgeworICAgICAgICAgICAgICAgICAgICAoZGVsYXkgLz0gdHJhY2stPnRpbWVzY2FsZSwgZmFsc2UpIHx8CisgICAgICAgICAgICAgICAgICAgIGRlbGF5ID4gSU5UMzJfTUFYIHx8CisgICAgICAgICAgICAgICAgICAgIGRlbGF5IDwgSU5UMzJfTUlOKSB7CiAgICAgICAgICAgICAgICAgQUxPR1coImlnbm9yaW5nIGVkaXQgbGlzdCB3aXRoIGJvZ3VzIHZhbHVlcyIpOwogICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIEFMT0dWKCJkZWxheSA9ICUiIFBSSWQ2NCwgZGVsYXkpOwotICAgICAgICAgICAgdHJhY2stPm1ldGEuc2V0SW50MzIoa0tleUVuY29kZXJEZWxheSwgZGVsYXkpOworICAgICAgICAgICAgQU1lZGlhRm9ybWF0X3NldEludDMyKHRyYWNrLT5tZXRhLCBBTUVESUFGT1JNQVRfS0VZX0VOQ09ERVJfREVMQVksIGRlbGF5KTsKIAogICAgICAgICAgICAgaW50NjRfdCBzY2FsZWRfZHVyYXRpb247CiAgICAgICAgICAgICAvLyBzY2FsZWRfZHVyYXRpb24gPSBkdXJhdGlvbiAqIG1IZWFkZXJUaW1lc2NhbGU7CkBAIC01MjYsOCArNTI3LDggQEAKICAgICAgICAgICAgIEFMT0dWKCJzZWdtZW50X2VuZCA9ICUiIFBSSWQ2NCAiLCBwYWRkaW5nID0gJSIgUFJJZDY0LCBzZWdtZW50X2VuZCwgcGFkZGluZyk7CiAgICAgICAgICAgICBpbnQ2NF90IHBhZGRpbmdzYW1wbGVzID0gMDsKICAgICAgICAgICAgIGlmIChwYWRkaW5nIDwgMCkgewotICAgICAgICAgICAgICAgIC8vIHRyYWNrIGR1cmF0aW9uIGZyb20gbWVkaWEgaGVhZGVyICh3aGljaCBpcyB3aGF0IGtLZXlEdXJhdGlvbiBpcykgbWlnaHQKLSAgICAgICAgICAgICAgICAvLyBiZSBzbGlnaHRseSBzaG9ydGVyIHRoYW4gdGhlIHNlZ21lbnQgZHVyYXRpb24sIHdoaWNoIHdvdWxkIG1ha2UgdGhlCisgICAgICAgICAgICAgICAgLy8gdHJhY2sgZHVyYXRpb24gZnJvbSBtZWRpYSBoZWFkZXIgKHdoaWNoIGlzIHdoYXQgQU1FRElBRk9STUFUX0tFWV9EVVJBVElPTiBpcykKKyAgICAgICAgICAgICAgICAvLyBtaWdodCBiZSBzbGlnaHRseSBzaG9ydGVyIHRoYW4gdGhlIHNlZ21lbnQgZHVyYXRpb24sIHdoaWNoIHdvdWxkIG1ha2UgdGhlCiAgICAgICAgICAgICAgICAgLy8gcGFkZGluZyBuZWdhdGl2ZS4gQ2xhbXAgdG8gemVyby4KICAgICAgICAgICAgICAgICBwYWRkaW5nID0gMDsKICAgICAgICAgICAgIH0gZWxzZSB7CkBAIC01NDUsNyArNTQ2LDcgQEAKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBBTE9HVigicGFkZGluZ3NhbXBsZXMgPSAlIiBQUklkNjQsIHBhZGRpbmdzYW1wbGVzKTsKLSAgICAgICAgICAgIHRyYWNrLT5tZXRhLnNldEludDMyKGtLZXlFbmNvZGVyUGFkZGluZywgcGFkZGluZ3NhbXBsZXMpOworICAgICAgICAgICAgQU1lZGlhRm9ybWF0X3NldEludDMyKHRyYWNrLT5tZXRhLCBBTUVESUFGT1JNQVRfS0VZX0VOQ09ERVJfUEFERElORywgcGFkZGluZ3NhbXBsZXMpOwogICAgICAgICB9CiAgICAgfSgpOwogCkBAIC01NTQsNyArNTU1LDcgQEAKICAgICAgICAgdHJhY2stPmluY2x1ZGVzX2V4cGVuc2l2ZV9tZXRhZGF0YSA9IHRydWU7CiAKICAgICAgICAgY29uc3QgY2hhciAqbWltZTsKLSAgICAgICAgQ0hFQ0sodHJhY2stPm1ldGEuZmluZENTdHJpbmcoa0tleU1JTUVUeXBlLCAmbWltZSkpOworICAgICAgICBDSEVDSyhBTWVkaWFGb3JtYXRfZ2V0U3RyaW5nKHRyYWNrLT5tZXRhLCBBTUVESUFGT1JNQVRfS0VZX01JTUUsICZtaW1lKSk7CiAgICAgICAgIGlmICghc3RybmNhc2VjbXAoInZpZGVvLyIsIG1pbWUsIDYpKSB7CiAgICAgICAgICAgICAvLyBNUEVHMiB0cmFja3MgZG8gbm90IHByb3ZpZGUgQ1NELCBzbyByZWFkIHRoZSBzdHJlYW0gaGVhZGVyCiAgICAgICAgICAgICBpZiAoIXN0cmNtcChtaW1lLCBNRURJQV9NSU1FVFlQRV9WSURFT19NUEVHMikpIHsKQEAgLTU2NywxNyArNTY4LDE5IEBACiAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgdWludDhfdCBoZWFkZXJba01heFRyYWNrSGVhZGVyU2l6ZV07CiAgICAgICAgICAgICAgICAgICAgIGlmIChtRGF0YVNvdXJjZS0+cmVhZEF0KG9mZnNldCwgJmhlYWRlciwgc2l6ZSkgPT0gKHNzaXplX3Qpc2l6ZSkgewotICAgICAgICAgICAgICAgICAgICAgICAgdHJhY2stPm1ldGEuc2V0RGF0YShrS2V5U3RyZWFtSGVhZGVyLCAnbWRhdCcsIGhlYWRlciwgc2l6ZSk7CisgICAgICAgICAgICAgICAgICAgICAgICBBTWVkaWFGb3JtYXRfc2V0QnVmZmVyKHRyYWNrLT5tZXRhLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBTUVESUFGT1JNQVRfS0VZX01QRUcyX1NUUkVBTV9IRUFERVIsIGhlYWRlciwgc2l6ZSk7CiAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9CiAKICAgICAgICAgICAgIGlmIChtTW9vZk9mZnNldCA+IDApIHsKICAgICAgICAgICAgICAgICBpbnQ2NF90IGR1cmF0aW9uOwotICAgICAgICAgICAgICAgIGlmICh0cmFjay0+bWV0YS5maW5kSW50NjQoa0tleUR1cmF0aW9uLCAmZHVyYXRpb24pKSB7CisgICAgICAgICAgICAgICAgaWYgKEFNZWRpYUZvcm1hdF9nZXRJbnQ2NCh0cmFjay0+bWV0YSwKKyAgICAgICAgICAgICAgICAgICAgICAgIEFNRURJQUZPUk1BVF9LRVlfRFVSQVRJT04sICZkdXJhdGlvbikpIHsKICAgICAgICAgICAgICAgICAgICAgLy8gbm90aGluZyBmYW5jeSwganVzdCBwaWNrIGEgZnJhbWUgbmVhciAxLzR0aCBvZiB0aGUgZHVyYXRpb24KLSAgICAgICAgICAgICAgICAgICAgdHJhY2stPm1ldGEuc2V0SW50NjQoCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAga0tleVRodW1ibmFpbFRpbWUsIGR1cmF0aW9uIC8gNCk7CisgICAgICAgICAgICAgICAgICAgIEFNZWRpYUZvcm1hdF9zZXRJbnQ2NCh0cmFjay0+bWV0YSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBBTUVESUFGT1JNQVRfS0VZX1RIVU1CTkFJTF9USU1FLCBkdXJhdGlvbiAvIDQpOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgdWludDMyX3Qgc2FtcGxlSW5kZXg7CkBAIC01ODcsMTYgKzU5MCwxNiBAQAogICAgICAgICAgICAgICAgICAgICAgICAgJiYgdHJhY2stPnNhbXBsZVRhYmxlLT5nZXRNZXRhRGF0YUZvclNhbXBsZSgKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzYW1wbGVJbmRleCwgTlVMTCAvKiBvZmZzZXQgKi8sIE5VTEwgLyogc2l6ZSAqLywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmc2FtcGxlVGltZSkgPT0gT0spIHsKLSAgICAgICAgICAgICAgICAgICAgdHJhY2stPm1ldGEuc2V0SW50NjQoCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAga0tleVRodW1ibmFpbFRpbWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgKChpbnQ2NF90KXNhbXBsZVRpbWUgKiAxMDAwMDAwKSAvIHRyYWNrLT50aW1lc2NhbGUpOworICAgICAgICAgICAgICAgICAgICAgICAgQU1lZGlhRm9ybWF0X3NldEludDY0KHRyYWNrLT5tZXRhLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBTUVESUFGT1JNQVRfS0VZX1RIVU1CTkFJTF9USU1FLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKGludDY0X3Qpc2FtcGxlVGltZSAqIDEwMDAwMDApIC8gdHJhY2stPnRpbWVzY2FsZSk7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgfQogCi0gICAgbWV0YSA9IHRyYWNrLT5tZXRhOwotICAgIHJldHVybiBPSzsKKyAgICBBTWVkaWFGb3JtYXRfY29weShtZXRhLCB0cmFjay0+bWV0YSk7CisgICAgcmV0dXJuIEFNRURJQV9PSzsKIH0KIAogc3RhdHVzX3QgTVBFRzRFeHRyYWN0b3I6OnJlYWRNZXRhRGF0YSgpIHsKQEAgLTYzMSwxMiArNjM0LDE0IEBACiAgICAgICAgIG9mZjY0X3QgZXhpZk9mZnNldDsKICAgICAgICAgc2l6ZV90IGV4aWZTaXplOwogICAgICAgICBpZiAobUl0ZW1UYWJsZS0+Z2V0RXhpZk9mZnNldEFuZFNpemUoJmV4aWZPZmZzZXQsICZleGlmU2l6ZSkgPT0gT0spIHsKLSAgICAgICAgICAgIG1GaWxlTWV0YURhdGEuc2V0SW50NjQoa0tleUV4aWZPZmZzZXQsIChpbnQ2NF90KWV4aWZPZmZzZXQpOwotICAgICAgICAgICAgbUZpbGVNZXRhRGF0YS5zZXRJbnQ2NChrS2V5RXhpZlNpemUsIChpbnQ2NF90KWV4aWZTaXplKTsKKyAgICAgICAgICAgIEFNZWRpYUZvcm1hdF9zZXRJbnQ2NChtRmlsZU1ldGFEYXRhLAorICAgICAgICAgICAgICAgICAgICBBTUVESUFGT1JNQVRfS0VZX0VYSUZfT0ZGU0VULCAoaW50NjRfdClleGlmT2Zmc2V0KTsKKyAgICAgICAgICAgIEFNZWRpYUZvcm1hdF9zZXRJbnQ2NChtRmlsZU1ldGFEYXRhLAorICAgICAgICAgICAgICAgICAgICBBTUVESUFGT1JNQVRfS0VZX0VYSUZfU0laRSwgKGludDY0X3QpZXhpZlNpemUpOwogICAgICAgICB9CiAgICAgICAgIGZvciAodWludDMyX3QgaW1hZ2VJbmRleCA9IDA7CiAgICAgICAgICAgICAgICAgaW1hZ2VJbmRleCA8IG1JdGVtVGFibGUtPmNvdW50SW1hZ2VzKCk7IGltYWdlSW5kZXgrKykgewotICAgICAgICAgICAgc3A8TWV0YURhdGE+IG1ldGEgPSBtSXRlbVRhYmxlLT5nZXRJbWFnZU1ldGEoaW1hZ2VJbmRleCk7CisgICAgICAgICAgICBBTWVkaWFGb3JtYXQgKm1ldGEgPSBtSXRlbVRhYmxlLT5nZXRJbWFnZU1ldGEoaW1hZ2VJbmRleCk7CiAgICAgICAgICAgICBpZiAobWV0YSA9PSBOVUxMKSB7CiAgICAgICAgICAgICAgICAgQUxPR0UoImhlaWYgaW1hZ2UgJXUgaGFzIG5vIG1ldGEhIiwgaW1hZ2VJbmRleCk7CiAgICAgICAgICAgICAgICAgY29udGludWU7CkBAIC02NjEsOCArNjY2LDggQEAKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIG1MYXN0VHJhY2sgPSB0cmFjazsKIAotICAgICAgICAgICAgdHJhY2stPm1ldGEgPSAqKG1ldGEuZ2V0KCkpOwotICAgICAgICAgICAgdHJhY2stPm1ldGEuc2V0SW50MzIoa0tleVRyYWNrSUQsIGltYWdlSW5kZXgpOworICAgICAgICAgICAgdHJhY2stPm1ldGEgPSBtZXRhOworICAgICAgICAgICAgQU1lZGlhRm9ybWF0X3NldEludDMyKHRyYWNrLT5tZXRhLCBBTUVESUFGT1JNQVRfS0VZX1RSQUNLX0lELCBpbWFnZUluZGV4KTsKICAgICAgICAgICAgIHRyYWNrLT5pbmNsdWRlc19leHBlbnNpdmVfbWV0YWRhdGEgPSBmYWxzZTsKICAgICAgICAgICAgIHRyYWNrLT5za2lwVHJhY2sgPSBmYWxzZTsKICAgICAgICAgICAgIHRyYWNrLT50aW1lc2NhbGUgPSAxMDAwMDAwOwpAQCAtNjcxLDE2ICs2NzYsMTggQEAKIAogICAgIGlmIChtSW5pdENoZWNrID09IE9LKSB7CiAgICAgICAgIGlmIChmaW5kVHJhY2tCeU1pbWVQcmVmaXgoInZpZGVvLyIpICE9IE5VTEwpIHsKLSAgICAgICAgICAgIG1GaWxlTWV0YURhdGEuc2V0Q1N0cmluZygKLSAgICAgICAgICAgICAgICAgICAga0tleU1JTUVUeXBlLCBNRURJQV9NSU1FVFlQRV9DT05UQUlORVJfTVBFRzQpOworICAgICAgICAgICAgQU1lZGlhRm9ybWF0X3NldFN0cmluZyhtRmlsZU1ldGFEYXRhLAorICAgICAgICAgICAgICAgICAgICBBTUVESUFGT1JNQVRfS0VZX01JTUUsIE1FRElBX01JTUVUWVBFX0NPTlRBSU5FUl9NUEVHNCk7CiAgICAgICAgIH0gZWxzZSBpZiAoZmluZFRyYWNrQnlNaW1lUHJlZml4KCJhdWRpby8iKSAhPSBOVUxMKSB7Ci0gICAgICAgICAgICBtRmlsZU1ldGFEYXRhLnNldENTdHJpbmcoa0tleU1JTUVUeXBlLCAiYXVkaW8vbXA0Iik7CisgICAgICAgICAgICBBTWVkaWFGb3JtYXRfc2V0U3RyaW5nKG1GaWxlTWV0YURhdGEsCisgICAgICAgICAgICAgICAgICAgIEFNRURJQUZPUk1BVF9LRVlfTUlNRSwgImF1ZGlvL21wNCIpOwogICAgICAgICB9IGVsc2UgaWYgKGZpbmRUcmFja0J5TWltZVByZWZpeCgKICAgICAgICAgICAgICAgICBNRURJQV9NSU1FVFlQRV9JTUFHRV9BTkRST0lEX0hFSUMpICE9IE5VTEwpIHsKLSAgICAgICAgICAgIG1GaWxlTWV0YURhdGEuc2V0Q1N0cmluZygKLSAgICAgICAgICAgICAgICAgICAga0tleU1JTUVUeXBlLCBNRURJQV9NSU1FVFlQRV9DT05UQUlORVJfSEVJRik7CisgICAgICAgICAgICBBTWVkaWFGb3JtYXRfc2V0U3RyaW5nKG1GaWxlTWV0YURhdGEsCisgICAgICAgICAgICAgICAgICAgIEFNRURJQUZPUk1BVF9LRVlfTUlNRSwgTUVESUFfTUlNRVRZUEVfQ09OVEFJTkVSX0hFSUYpOwogICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgbUZpbGVNZXRhRGF0YS5zZXRDU3RyaW5nKGtLZXlNSU1FVHlwZSwgImFwcGxpY2F0aW9uL29jdGV0LXN0cmVhbSIpOworICAgICAgICAgICAgQU1lZGlhRm9ybWF0X3NldFN0cmluZyhtRmlsZU1ldGFEYXRhLAorICAgICAgICAgICAgICAgICAgICBBTUVESUFGT1JNQVRfS0VZX01JTUUsICJhcHBsaWNhdGlvbi9vY3RldC1zdHJlYW0iKTsKICAgICAgICAgfQogICAgIH0gZWxzZSB7CiAgICAgICAgIG1Jbml0Q2hlY2sgPSBlcnI7CkBAIC03MDUsNyArNzEyLDcgQEAKICAgICAgICAgICAgIG1lbWNweShwdHIgKyAyMCwgbVBzc2hbaV0uZGF0YSwgbVBzc2hbaV0uZGF0YWxlbik7CiAgICAgICAgICAgICBwdHIgKz0gKDIwICsgbVBzc2hbaV0uZGF0YWxlbik7CiAgICAgICAgIH0KLSAgICAgICAgbUZpbGVNZXRhRGF0YS5zZXREYXRhKGtLZXlQc3NoLCAncHNzaCcsIGJ1ZiwgcHNzaHNpemUpOworICAgICAgICBBTWVkaWFGb3JtYXRfc2V0QnVmZmVyKG1GaWxlTWV0YURhdGEsIEFNRURJQUZPUk1BVF9LRVlfUFNTSCwgYnVmLCBwc3Noc2l6ZSk7CiAgICAgICAgIGZyZWUoYnVmKTsKICAgICB9CiAKQEAgLTkyMSw4ICs5MjgsOCBAQAogCiAgICAgICAgICAgICAgICAgICAgIGlmIChjYWNoZWRTb3VyY2UtPnNldENhY2hlZFJhbmdlKAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICpvZmZzZXQsIGNodW5rX3NpemUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgbUNhY2hlZFNvdXJjZSAhPSBOVUxMIC8qIGFzc3VtZSBvd25lcnNoaXAgb24gc3VjY2VzcyAqLykgPT0gT0spIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIG1EYXRhU291cmNlID0gbUNhY2hlZFNvdXJjZSA9IGNhY2hlZFNvdXJjZTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cnVlIC8qIGFzc3VtZSBvd25lcnNoaXAgb24gc3VjY2VzcyAqLykgPT0gT0spIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIG1EYXRhU291cmNlID0gY2FjaGVkU291cmNlOwogICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgICAgZGVsZXRlIGNhY2hlZFNvdXJjZTsKICAgICAgICAgICAgICAgICAgICAgfQpAQCAtOTU2LDcgKzk2Myw5IEBACiAgICAgICAgICAgICAgICAgdHJhY2stPmluY2x1ZGVzX2V4cGVuc2l2ZV9tZXRhZGF0YSA9IGZhbHNlOwogICAgICAgICAgICAgICAgIHRyYWNrLT5za2lwVHJhY2sgPSBmYWxzZTsKICAgICAgICAgICAgICAgICB0cmFjay0+dGltZXNjYWxlID0gMDsKLSAgICAgICAgICAgICAgICB0cmFjay0+bWV0YS5zZXRDU3RyaW5nKGtLZXlNSU1FVHlwZSwgImFwcGxpY2F0aW9uL29jdGV0LXN0cmVhbSIpOworICAgICAgICAgICAgICAgIHRyYWNrLT5tZXRhID0gQU1lZGlhRm9ybWF0X25ldygpOworICAgICAgICAgICAgICAgIEFNZWRpYUZvcm1hdF9zZXRTdHJpbmcodHJhY2stPm1ldGEsCisgICAgICAgICAgICAgICAgICAgICAgICBBTUVESUFGT1JNQVRfS0VZX01JTUUsICJhcHBsaWNhdGlvbi9vY3RldC1zdHJlYW0iKTsKICAgICAgICAgICAgICAgICB0cmFjay0+aGFzX2Vsc3QgPSBmYWxzZTsKICAgICAgICAgICAgICAgICB0cmFjay0+c3Vic2FtcGxlX2VuY3J5cHRpb24gPSBmYWxzZTsKICAgICAgICAgICAgIH0KQEAgLTk4MCw4ICs5ODksMTAgQEAKIAogICAgICAgICAgICAgaWYgKGlzVHJhY2spIHsKICAgICAgICAgICAgICAgICBpbnQzMl90IHRyYWNrSWQ7Ci0gICAgICAgICAgICAgICAgLy8gVGhlcmUgbXVzdCBiZSBleGFjdCBvbmUgdHJhY2sgaGVhZGVyIHBlciB0cmFjay4KLSAgICAgICAgICAgICAgICBpZiAoIW1MYXN0VHJhY2stPm1ldGEuZmluZEludDMyKGtLZXlUcmFja0lELCAmdHJhY2tJZCkpIHsKKyAgICAgICAgICAgICAgICAvLyBUaGVyZSBtdXN0IGJlIGV4YWN0bHkgb25lIHRyYWNrIGhlYWRlciBwZXIgdHJhY2suCisKKyAgICAgICAgICAgICAgICBpZiAoIUFNZWRpYUZvcm1hdF9nZXRJbnQzMihtTGFzdFRyYWNrLT5tZXRhLAorICAgICAgICAgICAgICAgICAgICAgICAgQU1FRElBRk9STUFUX0tFWV9UUkFDS19JRCwgJnRyYWNrSWQpKSB7CiAgICAgICAgICAgICAgICAgICAgIG1MYXN0VHJhY2stPnNraXBUcmFjayA9IHRydWU7CiAgICAgICAgICAgICAgICAgfQogCkBAIC0xMDU3LDcgKzEwNjgsNyBAQAogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGlmIChtb2RlICE9IGtDcnlwdG9Nb2RlVW5lbmNyeXB0ZWQpIHsKLSAgICAgICAgICAgICAgICBtTGFzdFRyYWNrLT5tZXRhLnNldEludDMyKGtLZXlDcnlwdG9Nb2RlLCBtb2RlKTsKKyAgICAgICAgICAgICAgICBBTWVkaWFGb3JtYXRfc2V0SW50MzIobUxhc3RUcmFjay0+bWV0YSwgQU1FRElBRk9STUFUX0tFWV9DUllQVE9fTU9ERSwgbW9kZSk7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQpAQCAtMTEzMywxMiArMTE0NCwxNSBAQAogICAgICAgICAgICAgICAgIHJldHVybiBFUlJPUl9NQUxGT1JNRUQ7CiAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgIG1MYXN0VHJhY2stPm1ldGEuc2V0Q1N0cmluZyhrS2V5TUlNRVR5cGUsIEZvdXJDQzJNSU1FKG9yaWdpbmFsX2ZvdXJjYykpOworICAgICAgICAgICAgQU1lZGlhRm9ybWF0X3NldFN0cmluZyhtTGFzdFRyYWNrLT5tZXRhLAorICAgICAgICAgICAgICAgICAgICBBTUVESUFGT1JNQVRfS0VZX01JTUUsIEZvdXJDQzJNSU1FKG9yaWdpbmFsX2ZvdXJjYykpOwogICAgICAgICAgICAgdWludDMyX3QgbnVtX2NoYW5uZWxzID0gMDsKICAgICAgICAgICAgIHVpbnQzMl90IHNhbXBsZV9yYXRlID0gMDsKICAgICAgICAgICAgIGlmIChBZGp1c3RDaGFubmVsc0FuZFJhdGUob3JpZ2luYWxfZm91cmNjLCAmbnVtX2NoYW5uZWxzLCAmc2FtcGxlX3JhdGUpKSB7Ci0gICAgICAgICAgICAgICAgbUxhc3RUcmFjay0+bWV0YS5zZXRJbnQzMihrS2V5Q2hhbm5lbENvdW50LCBudW1fY2hhbm5lbHMpOwotICAgICAgICAgICAgICAgIG1MYXN0VHJhY2stPm1ldGEuc2V0SW50MzIoa0tleVNhbXBsZVJhdGUsIHNhbXBsZV9yYXRlKTsKKyAgICAgICAgICAgICAgICBBTWVkaWFGb3JtYXRfc2V0SW50MzIobUxhc3RUcmFjay0+bWV0YSwKKyAgICAgICAgICAgICAgICAgICAgICAgIEFNRURJQUZPUk1BVF9LRVlfQ0hBTk5FTF9DT1VOVCwgbnVtX2NoYW5uZWxzKTsKKyAgICAgICAgICAgICAgICBBTWVkaWFGb3JtYXRfc2V0SW50MzIobUxhc3RUcmFjay0+bWV0YSwKKyAgICAgICAgICAgICAgICAgICAgICAgIEFNRURJQUZPUk1BVF9LRVlfU0FNUExFX1JBVEUsIHNhbXBsZV9yYXRlKTsKICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgLy8gSWYgZm9ybWF0IHR5cGUgaXMgJ2FsYWMnLCBpdCBpcyBuZWNlc3NhcnkgdG8gZ2V0IHRoZSBwYXJhbWV0ZXJzCkBAIC0xMTY3LDExICsxMTgxLDE0IEBACiAgICAgICAgICAgICAgICAgfQogCiAgICAgICAgICAgICAgICAgdWludDhfdCBiaXRzUGVyU2FtcGxlID0gY29va2llWzVdOwotICAgICAgICAgICAgICAgIG1MYXN0VHJhY2stPm1ldGEuc2V0SW50MzIoa0tleUJpdHNQZXJTYW1wbGUsIGJpdHNQZXJTYW1wbGUpOwotICAgICAgICAgICAgICAgIG1MYXN0VHJhY2stPm1ldGEuc2V0SW50MzIoa0tleUNoYW5uZWxDb3VudCwgY29va2llWzldKTsKLSAgICAgICAgICAgICAgICBtTGFzdFRyYWNrLT5tZXRhLnNldEludDMyKGtLZXlTYW1wbGVSYXRlLCBVMzJfQVQoJmNvb2tpZVsyMF0pKTsKLSAgICAgICAgICAgICAgICBtTGFzdFRyYWNrLT5tZXRhLnNldERhdGEoCi0gICAgICAgICAgICAgICAgICAgIGtLZXlBbGFjTWFnaWNDb29raWUsIE1ldGFEYXRhOjpUWVBFX05PTkUsIGNvb2tpZSwgc2l6ZW9mKGNvb2tpZSkpOworICAgICAgICAgICAgICAgIEFNZWRpYUZvcm1hdF9zZXRJbnQzMihtTGFzdFRyYWNrLT5tZXRhLAorICAgICAgICAgICAgICAgICAgICAgICAgQU1FRElBRk9STUFUX0tFWV9CSVRTX1BFUl9TQU1QTEUsIGJpdHNQZXJTYW1wbGUpOworICAgICAgICAgICAgICAgIEFNZWRpYUZvcm1hdF9zZXRJbnQzMihtTGFzdFRyYWNrLT5tZXRhLAorICAgICAgICAgICAgICAgICAgICAgICAgQU1FRElBRk9STUFUX0tFWV9DSEFOTkVMX0NPVU5ULCBjb29raWVbOV0pOworICAgICAgICAgICAgICAgIEFNZWRpYUZvcm1hdF9zZXRJbnQzMihtTGFzdFRyYWNrLT5tZXRhLAorICAgICAgICAgICAgICAgICAgICAgICAgQU1FRElBRk9STUFUX0tFWV9TQU1QTEVfUkFURSwgVTMyX0FUKCZjb29raWVbMjBdKSk7CisgICAgICAgICAgICAgICAgQU1lZGlhRm9ybWF0X3NldEJ1ZmZlcihtTGFzdFRyYWNrLT5tZXRhLAorICAgICAgICAgICAgICAgICAgICAgICAgQU1FRElBRk9STUFUX0tFWV9DU0RfMCwgY29va2llLCBzaXplb2YoY29va2llKSk7CiAKICAgICAgICAgICAgICAgICAvLyBBZGQgdGhlIHNpemUgb2YgQUxBQyBTcGVjaWZpYyBJbmZvICgzNiBieXRlcykgYW5kIHRlcm1pbmF0b3IKICAgICAgICAgICAgICAgICAvLyBhdG9tICg4IGJ5dGVzKS4KQEAgLTEyNzIsMTYgKzEyODksMjMgQEAKICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgaW50MzJfdCB0bXBBbGdvcml0aG1JZDsKLSAgICAgICAgICAgIGlmICghbUxhc3RUcmFjay0+bWV0YS5maW5kSW50MzIoa0tleUNyeXB0b01vZGUsICZ0bXBBbGdvcml0aG1JZCkpIHsKLSAgICAgICAgICAgICAgICBtTGFzdFRyYWNrLT5tZXRhLnNldEludDMyKGtLZXlDcnlwdG9Nb2RlLCBkZWZhdWx0QWxnb3JpdGhtSWQpOworICAgICAgICAgICAgaWYgKCFBTWVkaWFGb3JtYXRfZ2V0SW50MzIobUxhc3RUcmFjay0+bWV0YSwKKyAgICAgICAgICAgICAgICAgICAgQU1FRElBRk9STUFUX0tFWV9DUllQVE9fTU9ERSwgJnRtcEFsZ29yaXRobUlkKSkgeworICAgICAgICAgICAgICAgIEFNZWRpYUZvcm1hdF9zZXRJbnQzMihtTGFzdFRyYWNrLT5tZXRhLAorICAgICAgICAgICAgICAgICAgICAgICAgQU1FRElBRk9STUFUX0tFWV9DUllQVE9fTU9ERSwgZGVmYXVsdEFsZ29yaXRobUlkKTsKICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgbUxhc3RUcmFjay0+bWV0YS5zZXRJbnQzMihrS2V5Q3J5cHRvRGVmYXVsdElWU2l6ZSwgZGVmYXVsdElWU2l6ZSk7Ci0gICAgICAgICAgICBtTGFzdFRyYWNrLT5tZXRhLnNldERhdGEoa0tleUNyeXB0b0tleSwgJ3RlbmMnLCBkZWZhdWx0S2V5SWQsIDE2KTsKLSAgICAgICAgICAgIG1MYXN0VHJhY2stPm1ldGEuc2V0SW50MzIoa0tleUVuY3J5cHRlZEJ5dGVCbG9jaywgZGVmYXVsdEVuY3J5cHRlZEJ5dGVCbG9jayk7Ci0gICAgICAgICAgICBtTGFzdFRyYWNrLT5tZXRhLnNldEludDMyKGtLZXlTa2lwQnl0ZUJsb2NrLCBkZWZhdWx0U2tpcEJ5dGVCbG9jayk7CisgICAgICAgICAgICBBTWVkaWFGb3JtYXRfc2V0SW50MzIobUxhc3RUcmFjay0+bWV0YSwKKyAgICAgICAgICAgICAgICAgICAgQU1FRElBRk9STUFUX0tFWV9DUllQVE9fREVGQVVMVF9JVl9TSVpFLCBkZWZhdWx0SVZTaXplKTsKKyAgICAgICAgICAgIEFNZWRpYUZvcm1hdF9zZXRCdWZmZXIobUxhc3RUcmFjay0+bWV0YSwKKyAgICAgICAgICAgICAgICAgICAgQU1FRElBRk9STUFUX0tFWV9DUllQVE9fS0VZLCBkZWZhdWx0S2V5SWQsIDE2KTsKKyAgICAgICAgICAgIEFNZWRpYUZvcm1hdF9zZXRJbnQzMihtTGFzdFRyYWNrLT5tZXRhLAorICAgICAgICAgICAgICAgICAgICBBTUVESUFGT1JNQVRfS0VZX0NSWVBUT19FTkNSWVBURURfQllURV9CTE9DSywgZGVmYXVsdEVuY3J5cHRlZEJ5dGVCbG9jayk7CisgICAgICAgICAgICBBTWVkaWFGb3JtYXRfc2V0SW50MzIobUxhc3RUcmFjay0+bWV0YSwKKyAgICAgICAgICAgICAgICAgICAgQU1FRElBRk9STUFUX0tFWV9DUllQVE9fU0tJUF9CWVRFX0JMT0NLLCBkZWZhdWx0U2tpcEJ5dGVCbG9jayk7CiAgICAgICAgICAgICBpZiAoZGVmYXVsdENvbnN0YW50SXYgIT0gTlVMTCkgewotICAgICAgICAgICAgICAgIG1MYXN0VHJhY2stPm1ldGEuc2V0RGF0YShrS2V5Q3J5cHRvSVYsICdkY2l2JywgZGVmYXVsdENvbnN0YW50SXYtPmRhdGEoKSwgZGVmYXVsdENvbnN0YW50SXYtPnNpemUoKSk7CisgICAgICAgICAgICAgICAgQU1lZGlhRm9ybWF0X3NldEJ1ZmZlcihtTGFzdFRyYWNrLT5tZXRhLCBBTUVESUFGT1JNQVRfS0VZX0NSWVBUT19JViwKKyAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHRDb25zdGFudEl2LT5kYXRhKCksIGRlZmF1bHRDb25zdGFudEl2LT5zaXplKCkpOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KQEAgLTE0MzAsOCArMTQ1NCw4IEBACiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQogICAgICAgICAgICAgaWYgKGR1cmF0aW9uICE9IDAgJiYgbUxhc3RUcmFjay0+dGltZXNjYWxlICE9IDApIHsKLSAgICAgICAgICAgICAgICBtTGFzdFRyYWNrLT5tZXRhLnNldEludDY0KAotICAgICAgICAgICAgICAgICAgICAgICAga0tleUR1cmF0aW9uLCAoZHVyYXRpb24gKiAxMDAwMDAwKSAvIG1MYXN0VHJhY2stPnRpbWVzY2FsZSk7CisgICAgICAgICAgICAgICAgQU1lZGlhRm9ybWF0X3NldEludDY0KG1MYXN0VHJhY2stPm1ldGEsIEFNRURJQUZPUk1BVF9LRVlfRFVSQVRJT04sCisgICAgICAgICAgICAgICAgICAgICAgICAoZHVyYXRpb24gKiAxMDAwMDAwKSAvIG1MYXN0VHJhY2stPnRpbWVzY2FsZSk7CiAgICAgICAgICAgICB9CiAKICAgICAgICAgICAgIHVpbnQ4X3QgbGFuZ1syXTsKQEAgLTE0NTgsOCArMTQ4Miw3IEBACiAgICAgICAgICAgICBsYW5nX2NvZGVbMl0gPSAobGFuZ1sxXSAmIDB4MWYpICsgMHg2MDsKICAgICAgICAgICAgIGxhbmdfY29kZVszXSA9ICdcMCc7CiAKLSAgICAgICAgICAgIG1MYXN0VHJhY2stPm1ldGEuc2V0Q1N0cmluZygKLSAgICAgICAgICAgICAgICAgICAga0tleU1lZGlhTGFuZ3VhZ2UsIGxhbmdfY29kZSk7CisgICAgICAgICAgICBBTWVkaWFGb3JtYXRfc2V0U3RyaW5nKG1MYXN0VHJhY2stPm1ldGEsIEFNRURJQUZPUk1BVF9LRVlfTEFOR1VBR0UsIGxhbmdfY29kZSk7CiAKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CkBAIC0xNDkzLDcgKzE1MTYsNyBAQAogICAgICAgICAgICAgICAgIGlmIChtTGFzdFRyYWNrID09IE5VTEwpCiAgICAgICAgICAgICAgICAgICAgIHJldHVybiBFUlJPUl9NQUxGT1JNRUQ7CiAKLSAgICAgICAgICAgICAgICBDSEVDSyhtTGFzdFRyYWNrLT5tZXRhLmZpbmRDU3RyaW5nKGtLZXlNSU1FVHlwZSwgJm1pbWUpKTsKKyAgICAgICAgICAgICAgICBDSEVDSyhBTWVkaWFGb3JtYXRfZ2V0U3RyaW5nKG1MYXN0VHJhY2stPm1ldGEsIEFNRURJQUZPUk1BVF9LRVlfTUlNRSwgJm1pbWUpKTsKICAgICAgICAgICAgICAgICBpZiAoc3RyY2FzZWNtcChtaW1lLCBNRURJQV9NSU1FVFlQRV9URVhUXzNHUFApICYmCiAgICAgICAgICAgICAgICAgICAgICAgICBzdHJjYXNlY21wKG1pbWUsICJhcHBsaWNhdGlvbi9vY3RldC1zdHJlYW0iKSkgewogICAgICAgICAgICAgICAgICAgICAvLyBGb3Igbm93IHdlIG9ubHkgc3VwcG9ydCBhIHNpbmdsZSB0eXBlIG9mIG1lZGlhIHBlciB0cmFjay4KQEAgLTE1MzQsNyArMTU1Nyw3IEBACiAgICAgICAgICAgICB9CiAKICAgICAgICAgICAgIFN0cmluZzggbWltZUZvcm1hdCgoY29uc3QgY2hhciAqKShidWZmZXIuZ2V0KCkpLCBjaHVua19kYXRhX3NpemUpOwotICAgICAgICAgICAgbUxhc3RUcmFjay0+bWV0YS5zZXRDU3RyaW5nKGtLZXlNSU1FVHlwZSwgbWltZUZvcm1hdC5zdHJpbmcoKSk7CisgICAgICAgICAgICBBTWVkaWFGb3JtYXRfc2V0U3RyaW5nKG1MYXN0VHJhY2stPm1ldGEsIEFNRURJQUZPUk1BVF9LRVlfTUlNRSwgbWltZUZvcm1hdC5zdHJpbmcoKSk7CiAKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CkBAIC0xNjEzLDIwICsxNjM2LDIzIEBACiAKICAgICAgICAgICAgIGlmIChjaHVua190eXBlICE9IEZPVVJDQygnZScsICduJywgJ2MnLCAnYScpKSB7CiAgICAgICAgICAgICAgICAgLy8gaWYgdGhlIGNodW5rIHR5cGUgaXMgZW5jYSwgd2UnbGwgZ2V0IHRoZSB0eXBlIGZyb20gdGhlIGZybWEgYm94IGxhdGVyCi0gICAgICAgICAgICAgICAgbUxhc3RUcmFjay0+bWV0YS5zZXRDU3RyaW5nKGtLZXlNSU1FVHlwZSwgRm91ckNDMk1JTUUoY2h1bmtfdHlwZSkpOworICAgICAgICAgICAgICAgIEFNZWRpYUZvcm1hdF9zZXRTdHJpbmcobUxhc3RUcmFjay0+bWV0YSwKKyAgICAgICAgICAgICAgICAgICAgICAgIEFNRURJQUZPUk1BVF9LRVlfTUlNRSwgRm91ckNDMk1JTUUoY2h1bmtfdHlwZSkpOwogICAgICAgICAgICAgICAgIEFkanVzdENoYW5uZWxzQW5kUmF0ZShjaHVua190eXBlLCAmbnVtX2NoYW5uZWxzLCAmc2FtcGxlX3JhdGUpOwogCiAgICAgICAgICAgICAgICAgaWYgKCFzdHJjYXNlY21wKE1FRElBX01JTUVUWVBFX0FVRElPX1JBVywgRm91ckNDMk1JTUUoY2h1bmtfdHlwZSkpKSB7Ci0gICAgICAgICAgICAgICAgICAgIG1MYXN0VHJhY2stPm1ldGEuc2V0SW50MzIoa0tleUJpdHNQZXJTYW1wbGUsIHNhbXBsZV9zaXplKTsKKyAgICAgICAgICAgICAgICAgICAgQU1lZGlhRm9ybWF0X3NldEludDMyKG1MYXN0VHJhY2stPm1ldGEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgQU1FRElBRk9STUFUX0tFWV9CSVRTX1BFUl9TQU1QTEUsIHNhbXBsZV9zaXplKTsKICAgICAgICAgICAgICAgICAgICAgaWYgKGNodW5rX3R5cGUgPT0gRk9VUkNDKCd0JywgJ3cnLCAnbycsICdzJykpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIG1MYXN0VHJhY2stPm1ldGEuc2V0SW50MzIoa0tleVBjbUJpZ0VuZGlhbiwgMSk7CisgICAgICAgICAgICAgICAgICAgICAgICBBTWVkaWFGb3JtYXRfc2V0SW50MzIobUxhc3RUcmFjay0+bWV0YSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQU1FRElBRk9STUFUX0tFWV9QQ01fQklHX0VORElBTiwgMSk7CiAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBBTE9HVigiKioqIGNvZGluZz0nJXMnICVkIGNoYW5uZWxzLCBzaXplICVkLCByYXRlICVkXG4iLAogICAgICAgICAgICAgICAgICAgIGNodW5rLCBudW1fY2hhbm5lbHMsIHNhbXBsZV9zaXplLCBzYW1wbGVfcmF0ZSk7Ci0gICAgICAgICAgICBtTGFzdFRyYWNrLT5tZXRhLnNldEludDMyKGtLZXlDaGFubmVsQ291bnQsIG51bV9jaGFubmVscyk7Ci0gICAgICAgICAgICBtTGFzdFRyYWNrLT5tZXRhLnNldEludDMyKGtLZXlTYW1wbGVSYXRlLCBzYW1wbGVfcmF0ZSk7CisgICAgICAgICAgICBBTWVkaWFGb3JtYXRfc2V0SW50MzIobUxhc3RUcmFjay0+bWV0YSwgQU1FRElBRk9STUFUX0tFWV9DSEFOTkVMX0NPVU5ULCBudW1fY2hhbm5lbHMpOworICAgICAgICAgICAgQU1lZGlhRm9ybWF0X3NldEludDMyKG1MYXN0VHJhY2stPm1ldGEsIEFNRURJQUZPUk1BVF9LRVlfU0FNUExFX1JBVEUsIHNhbXBsZV9yYXRlKTsKIAogICAgICAgICAgICAgaWYgKGNodW5rX3R5cGUgPT0gRk9VUkNDKCdhJywgJ2wnLCAnYScsICdjJykpIHsKIApAQCAtMTY1MiwxMSArMTY3OCwxNCBAQAogICAgICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgICAgIHVpbnQ4X3QgYml0c1BlclNhbXBsZSA9IGNvb2tpZVs1XTsKLSAgICAgICAgICAgICAgICBtTGFzdFRyYWNrLT5tZXRhLnNldEludDMyKGtLZXlCaXRzUGVyU2FtcGxlLCBiaXRzUGVyU2FtcGxlKTsKLSAgICAgICAgICAgICAgICBtTGFzdFRyYWNrLT5tZXRhLnNldEludDMyKGtLZXlDaGFubmVsQ291bnQsIGNvb2tpZVs5XSk7Ci0gICAgICAgICAgICAgICAgbUxhc3RUcmFjay0+bWV0YS5zZXRJbnQzMihrS2V5U2FtcGxlUmF0ZSwgVTMyX0FUKCZjb29raWVbMjBdKSk7Ci0gICAgICAgICAgICAgICAgbUxhc3RUcmFjay0+bWV0YS5zZXREYXRhKAotICAgICAgICAgICAgICAgICAgICAgICAga0tleUFsYWNNYWdpY0Nvb2tpZSwgTWV0YURhdGE6OlRZUEVfTk9ORSwgY29va2llLCBzaXplb2YoY29va2llKSk7CisgICAgICAgICAgICAgICAgQU1lZGlhRm9ybWF0X3NldEludDMyKG1MYXN0VHJhY2stPm1ldGEsCisgICAgICAgICAgICAgICAgICAgICAgICBBTUVESUFGT1JNQVRfS0VZX0JJVFNfUEVSX1NBTVBMRSwgYml0c1BlclNhbXBsZSk7CisgICAgICAgICAgICAgICAgQU1lZGlhRm9ybWF0X3NldEludDMyKG1MYXN0VHJhY2stPm1ldGEsCisgICAgICAgICAgICAgICAgICAgICAgICBBTUVESUFGT1JNQVRfS0VZX0NIQU5ORUxfQ09VTlQsIGNvb2tpZVs5XSk7CisgICAgICAgICAgICAgICAgQU1lZGlhRm9ybWF0X3NldEludDMyKG1MYXN0VHJhY2stPm1ldGEsCisgICAgICAgICAgICAgICAgICAgICAgICBBTUVESUFGT1JNQVRfS0VZX1NBTVBMRV9SQVRFLCBVMzJfQVQoJmNvb2tpZVsyMF0pKTsKKyAgICAgICAgICAgICAgICBBTWVkaWFGb3JtYXRfc2V0QnVmZmVyKG1MYXN0VHJhY2stPm1ldGEsCisgICAgICAgICAgICAgICAgICAgICAgICBBTUVESUFGT1JNQVRfS0VZX0NTRF8wLCBjb29raWUsIHNpemVvZihjb29raWUpKTsKICAgICAgICAgICAgICAgICBkYXRhX29mZnNldCArPSBzaXplb2YoY29va2llKTsKICAgICAgICAgICAgICAgICAqb2Zmc2V0ID0gZGF0YV9vZmZzZXQ7CiAgICAgICAgICAgICAgICAgQ0hFQ0tfRVEoKm9mZnNldCwgc3RvcF9vZmZzZXQpOwpAQCAtMTcxNCwxMCArMTc0MywxMSBAQAogCiAgICAgICAgICAgICBpZiAoY2h1bmtfdHlwZSAhPSBGT1VSQ0MoJ2UnLCAnbicsICdjJywgJ3YnKSkgewogICAgICAgICAgICAgICAgIC8vIGlmIHRoZSBjaHVuayB0eXBlIGlzIGVuY3YsIHdlJ2xsIGdldCB0aGUgdHlwZSBmcm9tIHRoZSBmcm1hIGJveCBsYXRlcgotICAgICAgICAgICAgICAgIG1MYXN0VHJhY2stPm1ldGEuc2V0Q1N0cmluZyhrS2V5TUlNRVR5cGUsIEZvdXJDQzJNSU1FKGNodW5rX3R5cGUpKTsKKyAgICAgICAgICAgICAgICBBTWVkaWFGb3JtYXRfc2V0U3RyaW5nKG1MYXN0VHJhY2stPm1ldGEsCisgICAgICAgICAgICAgICAgICAgICAgICBBTUVESUFGT1JNQVRfS0VZX01JTUUsIEZvdXJDQzJNSU1FKGNodW5rX3R5cGUpKTsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIG1MYXN0VHJhY2stPm1ldGEuc2V0SW50MzIoa0tleVdpZHRoLCB3aWR0aCk7Ci0gICAgICAgICAgICBtTGFzdFRyYWNrLT5tZXRhLnNldEludDMyKGtLZXlIZWlnaHQsIGhlaWdodCk7CisgICAgICAgICAgICBBTWVkaWFGb3JtYXRfc2V0SW50MzIobUxhc3RUcmFjay0+bWV0YSwgQU1FRElBRk9STUFUX0tFWV9XSURUSCwgd2lkdGgpOworICAgICAgICAgICAgQU1lZGlhRm9ybWF0X3NldEludDMyKG1MYXN0VHJhY2stPm1ldGEsIEFNRURJQUZPUk1BVF9LRVlfSEVJR0hULCBoZWlnaHQpOwogCiAgICAgICAgICAgICBvZmY2NF90IHN0b3Bfb2Zmc2V0ID0gKm9mZnNldCArIGNodW5rX3NpemU7CiAgICAgICAgICAgICAqb2Zmc2V0ID0gZGF0YV9vZmZzZXQgKyBzaXplb2YoYnVmZmVyKTsKQEAgLTE4MDUsMTIgKzE4MzUsMTUgQEAKICAgICAgICAgICAgICAgICAgICAgQUxPR0UoIm1heCBzYW1wbGUgc2l6ZSB0b28gYmlnOiAlenUiLCBtYXhfc2l6ZSk7CiAgICAgICAgICAgICAgICAgICAgIHJldHVybiBFUlJPUl9NQUxGT1JNRUQ7CiAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIG1MYXN0VHJhY2stPm1ldGEuc2V0SW50MzIoa0tleU1heElucHV0U2l6ZSwgbWF4X3NpemUgKyAxMCAqIDIpOworICAgICAgICAgICAgICAgIEFNZWRpYUZvcm1hdF9zZXRJbnQzMihtTGFzdFRyYWNrLT5tZXRhLAorICAgICAgICAgICAgICAgICAgICAgICAgQU1FRElBRk9STUFUX0tFWV9NQVhfSU5QVVRfU0laRSwgbWF4X3NpemUgKyAxMCAqIDIpOwogICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAvLyBObyBzaXplIHdhcyBzcGVjaWZpZWQuIFBpY2sgYSBjb25zZXJ2YXRpdmVseSBsYXJnZSBzaXplLgogICAgICAgICAgICAgICAgIHVpbnQzMl90IHdpZHRoLCBoZWlnaHQ7Ci0gICAgICAgICAgICAgICAgaWYgKCFtTGFzdFRyYWNrLT5tZXRhLmZpbmRJbnQzMihrS2V5V2lkdGgsIChpbnQzMl90Kikmd2lkdGgpIHx8Ci0gICAgICAgICAgICAgICAgICAgICFtTGFzdFRyYWNrLT5tZXRhLmZpbmRJbnQzMihrS2V5SGVpZ2h0LChpbnQzMl90KikgJmhlaWdodCkpIHsKKyAgICAgICAgICAgICAgICBpZiAoIUFNZWRpYUZvcm1hdF9nZXRJbnQzMihtTGFzdFRyYWNrLT5tZXRhLAorICAgICAgICAgICAgICAgICAgICAgICAgQU1FRElBRk9STUFUX0tFWV9XSURUSCwgKGludDMyX3QqKSZ3aWR0aCkgfHwKKyAgICAgICAgICAgICAgICAgICAgIUFNZWRpYUZvcm1hdF9nZXRJbnQzMihtTGFzdFRyYWNrLT5tZXRhLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFNRURJQUZPUk1BVF9LRVlfSEVJR0hULChpbnQzMl90KikgJmhlaWdodCkpIHsKICAgICAgICAgICAgICAgICAgICAgQUxPR0UoIk5vIHdpZHRoIG9yIGhlaWdodCwgYXNzdW1pbmcgd29yc3QgY2FzZSAxMDgwcCIpOwogICAgICAgICAgICAgICAgICAgICB3aWR0aCA9IDE5MjA7CiAgICAgICAgICAgICAgICAgICAgIGhlaWdodCA9IDEwODA7CkBAIC0xODI1LDcgKzE4NTgsNyBAQAogICAgICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKm1pbWU7Ci0gICAgICAgICAgICAgICAgQ0hFQ0sobUxhc3RUcmFjay0+bWV0YS5maW5kQ1N0cmluZyhrS2V5TUlNRVR5cGUsICZtaW1lKSk7CisgICAgICAgICAgICAgICAgQ0hFQ0soQU1lZGlhRm9ybWF0X2dldFN0cmluZyhtTGFzdFRyYWNrLT5tZXRhLCBBTUVESUFGT1JNQVRfS0VZX01JTUUsICZtaW1lKSk7CiAgICAgICAgICAgICAgICAgaWYgKCFzdHJuY21wKG1pbWUsICJhdWRpby8iLCA2KSkgewogICAgICAgICAgICAgICAgICAgICAvLyBmb3IgYXVkaW8sIHVzZSAxMjhLQgogICAgICAgICAgICAgICAgICAgICBtYXhfc2l6ZSA9IDEwMjQgKiAxMjg7CkBAIC0xODQyLDI2ICsxODc1LDI4IEBACiAgICAgICAgICAgICAgICAgLy8gSEFDSzogYWxsb3cgMTAlIG92ZXJoZWFkCiAgICAgICAgICAgICAgICAgLy8gVE9ETzogcmVhZCBzYW1wbGUgc2l6ZSBmcm9tIHRyYWYgYXRvbSBmb3IgZnJhZ21lbnRlZCBNUEVHNC4KICAgICAgICAgICAgICAgICBtYXhfc2l6ZSArPSBtYXhfc2l6ZSAvIDEwOwotICAgICAgICAgICAgICAgIG1MYXN0VHJhY2stPm1ldGEuc2V0SW50MzIoa0tleU1heElucHV0U2l6ZSwgbWF4X3NpemUpOworICAgICAgICAgICAgICAgIEFNZWRpYUZvcm1hdF9zZXRJbnQzMihtTGFzdFRyYWNrLT5tZXRhLCBBTUVESUFGT1JNQVRfS0VZX01BWF9JTlBVVF9TSVpFLCBtYXhfc2l6ZSk7CiAgICAgICAgICAgICB9CiAKICAgICAgICAgICAgIC8vIE5PVEU6IHNldHRpbmcgYW5vdGhlciBwaWVjZSBvZiBtZXRhZGF0YSBpbnZhbGlkYXRlcyBhbnkgcG9pbnRlcnMgKHN1Y2ggYXMgdGhlCiAgICAgICAgICAgICAvLyBtaW1ldHlwZSkgcHJldmlvdXNseSBvYnRhaW5lZCwgc28gZG9uJ3QgY2FjaGUgdGhlbS4KICAgICAgICAgICAgIGNvbnN0IGNoYXIgKm1pbWU7Ci0gICAgICAgICAgICBDSEVDSyhtTGFzdFRyYWNrLT5tZXRhLmZpbmRDU3RyaW5nKGtLZXlNSU1FVHlwZSwgJm1pbWUpKTsKKyAgICAgICAgICAgIENIRUNLKEFNZWRpYUZvcm1hdF9nZXRTdHJpbmcobUxhc3RUcmFjay0+bWV0YSwgQU1FRElBRk9STUFUX0tFWV9NSU1FLCAmbWltZSkpOwogICAgICAgICAgICAgLy8gQ2FsY3VsYXRlIGF2ZXJhZ2UgZnJhbWUgcmF0ZS4KICAgICAgICAgICAgIGlmICghc3RybmNhc2VjbXAoInZpZGVvLyIsIG1pbWUsIDYpKSB7CiAgICAgICAgICAgICAgICAgc2l6ZV90IG5TYW1wbGVzID0gbUxhc3RUcmFjay0+c2FtcGxlVGFibGUtPmNvdW50U2FtcGxlcygpOwogICAgICAgICAgICAgICAgIGlmIChuU2FtcGxlcyA9PSAwKSB7CiAgICAgICAgICAgICAgICAgICAgIGludDMyX3QgdHJhY2tJZDsKLSAgICAgICAgICAgICAgICAgICAgaWYgKG1MYXN0VHJhY2stPm1ldGEuZmluZEludDMyKGtLZXlUcmFja0lELCAmdHJhY2tJZCkpIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKEFNZWRpYUZvcm1hdF9nZXRJbnQzMihtTGFzdFRyYWNrLT5tZXRhLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFNRURJQUZPUk1BVF9LRVlfVFJBQ0tfSUQsICZ0cmFja0lkKSkgewogICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtVHJleC5zaXplKCk7IGkrKykgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRyZXggKnQgPSAmbVRyZXguZWRpdEl0ZW1BdChpKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodC0+dHJhY2tfSUQgPT0gKHVpbnQzMl90KSB0cmFja0lkKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0LT5kZWZhdWx0X3NhbXBsZV9kdXJhdGlvbiA+IDApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludDMyX3QgZnJhbWVSYXRlID0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbUxhc3RUcmFjay0+dGltZXNjYWxlIC8gdC0+ZGVmYXVsdF9zYW1wbGVfZHVyYXRpb247Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtTGFzdFRyYWNrLT5tZXRhLnNldEludDMyKGtLZXlGcmFtZVJhdGUsIGZyYW1lUmF0ZSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBTWVkaWFGb3JtYXRfc2V0SW50MzIobUxhc3RUcmFjay0+bWV0YSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQU1FRElBRk9STUFUX0tFWV9GUkFNRV9SQVRFLCBmcmFtZVJhdGUpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KQEAgLTE4NjksMTUgKzE5MDQsMTggQEAKICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgIGludDY0X3QgZHVyYXRpb25VczsKLSAgICAgICAgICAgICAgICAgICAgaWYgKG1MYXN0VHJhY2stPm1ldGEuZmluZEludDY0KGtLZXlEdXJhdGlvbiwgJmR1cmF0aW9uVXMpKSB7CisgICAgICAgICAgICAgICAgICAgIGlmIChBTWVkaWFGb3JtYXRfZ2V0SW50NjQobUxhc3RUcmFjay0+bWV0YSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBBTUVESUFGT1JNQVRfS0VZX0RVUkFUSU9OLCAmZHVyYXRpb25VcykpIHsKICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChkdXJhdGlvblVzID4gMCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludDMyX3QgZnJhbWVSYXRlID0gKG5TYW1wbGVzICogMTAwMDAwMExMICsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoZHVyYXRpb25VcyA+PiAxKSkgLyBkdXJhdGlvblVzOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1MYXN0VHJhY2stPm1ldGEuc2V0SW50MzIoa0tleUZyYW1lUmF0ZSwgZnJhbWVSYXRlKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBBTWVkaWFGb3JtYXRfc2V0SW50MzIobUxhc3RUcmFjay0+bWV0YSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFNRURJQUZPUk1BVF9LRVlfRlJBTUVfUkFURSwgZnJhbWVSYXRlKTsKICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICBBTE9HVigic2V0dGluZyBmcmFtZSBjb3VudCAlenUiLCBuU2FtcGxlcyk7Ci0gICAgICAgICAgICAgICAgICAgIG1MYXN0VHJhY2stPm1ldGEuc2V0SW50MzIoa0tleUZyYW1lQ291bnQsIG5TYW1wbGVzKTsKKyAgICAgICAgICAgICAgICAgICAgQU1lZGlhRm9ybWF0X3NldEludDMyKG1MYXN0VHJhY2stPm1ldGEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgQU1FRElBRk9STUFUX0tFWV9GUkFNRV9DT1VOVCwgblNhbXBsZXMpOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KIApAQCAtMTk4NSw3ICsyMDIzLDcgQEAKICAgICAgICAgICAgIGlmIChidWZmZXJbbGVuIC0gMV0gIT0gJy8nKSB7CiAgICAgICAgICAgICAgICAgYnVmZmVyW2xlbl0gPSAnLyc7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBtRmlsZU1ldGFEYXRhLnNldENTdHJpbmcoa0tleUxvY2F0aW9uLCAmYnVmZmVyWzBdKTsKKyAgICAgICAgICAgIEFNZWRpYUZvcm1hdF9zZXRTdHJpbmcobUZpbGVNZXRhRGF0YSwgQU1FRElBRk9STUFUX0tFWV9MT0NBVElPTiwgJmJ1ZmZlclswXSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogCkBAIC0yMDE1LDggKzIwNTMsOCBAQAogICAgICAgICAgICAgaWYgKG1MYXN0VHJhY2sgPT0gTlVMTCkKICAgICAgICAgICAgICAgICByZXR1cm4gRVJST1JfTUFMRk9STUVEOwogCi0gICAgICAgICAgICBtTGFzdFRyYWNrLT5tZXRhLnNldERhdGEoCi0gICAgICAgICAgICAgICAgICAgIGtLZXlFU0RTLCBrVHlwZUVTRFMsICZidWZmZXJbNF0sIGNodW5rX2RhdGFfc2l6ZSAtIDQpOworICAgICAgICAgICAgQU1lZGlhRm9ybWF0X3NldEJ1ZmZlcihtTGFzdFRyYWNrLT5tZXRhLCAKKyAgICAgICAgICAgICAgICAgICAgQU1FRElBRk9STUFUX0tFWV9FU0RTLCAmYnVmZmVyWzRdLCBjaHVua19kYXRhX3NpemUgLSA0KTsKIAogICAgICAgICAgICAgaWYgKG1QYXRoLnNpemUoKSA+PSAyCiAgICAgICAgICAgICAgICAgICAgICYmIG1QYXRoW21QYXRoLnNpemUoKSAtIDJdID09IEZPVVJDQygnbScsICdwJywgJzQnLCAnYScpKSB7CkBAIC0yMDQwLDcgKzIwNzgsOCBAQAogICAgICAgICAgICAgICAgIHVpbnQ4X3Qgb2JqZWN0VHlwZUluZGljYXRpb247CiAgICAgICAgICAgICAgICAgaWYgKGVzZHMuZ2V0T2JqZWN0VHlwZUluZGljYXRpb24oJm9iamVjdFR5cGVJbmRpY2F0aW9uKSA9PSBPSykgewogICAgICAgICAgICAgICAgICAgICBpZiAob2JqZWN0VHlwZUluZGljYXRpb24gPj0gMHg2MCAmJiBvYmplY3RUeXBlSW5kaWNhdGlvbiA8PSAweDY1KSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBtTGFzdFRyYWNrLT5tZXRhLnNldENTdHJpbmcoa0tleU1JTUVUeXBlLCBNRURJQV9NSU1FVFlQRV9WSURFT19NUEVHMik7CisgICAgICAgICAgICAgICAgICAgICAgICBBTWVkaWFGb3JtYXRfc2V0U3RyaW5nKG1MYXN0VHJhY2stPm1ldGEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFNRURJQUZPUk1BVF9LRVlfTUlNRSwgTUVESUFfTUlNRVRZUEVfVklERU9fTVBFRzIpOwogICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQpAQCAtMjA2NywxMCArMjEwNiwxMiBAQAogICAgICAgICAgICAgdWludDMyX3QgbWF4Qml0cmF0ZSA9IFUzMl9BVCgmYnVmZmVyWzRdKTsKICAgICAgICAgICAgIHVpbnQzMl90IGF2Z0JpdHJhdGUgPSBVMzJfQVQoJmJ1ZmZlcls4XSk7CiAgICAgICAgICAgICBpZiAobWF4Qml0cmF0ZSA+IDAgJiYgbWF4Qml0cmF0ZSA8IElOVDMyX01BWCkgewotICAgICAgICAgICAgICAgIG1MYXN0VHJhY2stPm1ldGEuc2V0SW50MzIoa0tleU1heEJpdFJhdGUsIChpbnQzMl90KW1heEJpdHJhdGUpOworICAgICAgICAgICAgICAgIEFNZWRpYUZvcm1hdF9zZXRJbnQzMihtTGFzdFRyYWNrLT5tZXRhLAorICAgICAgICAgICAgICAgICAgICAgICAgQU1FRElBRk9STUFUX0tFWV9NQVhfQklUX1JBVEUsIChpbnQzMl90KW1heEJpdHJhdGUpOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgaWYgKGF2Z0JpdHJhdGUgPiAwICYmIGF2Z0JpdHJhdGUgPCBJTlQzMl9NQVgpIHsKLSAgICAgICAgICAgICAgICBtTGFzdFRyYWNrLT5tZXRhLnNldEludDMyKGtLZXlCaXRSYXRlLCAoaW50MzJfdClhdmdCaXRyYXRlKTsKKyAgICAgICAgICAgICAgICBBTWVkaWFGb3JtYXRfc2V0SW50MzIobUxhc3RUcmFjay0+bWV0YSwKKyAgICAgICAgICAgICAgICAgICAgICAgIEFNRURJQUZPUk1BVF9LRVlfQklUX1JBVEUsIChpbnQzMl90KWF2Z0JpdHJhdGUpOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KQEAgLTIwOTQsOCArMjEzNSw4IEBACiAgICAgICAgICAgICBpZiAobUxhc3RUcmFjayA9PSBOVUxMKQogICAgICAgICAgICAgICAgIHJldHVybiBFUlJPUl9NQUxGT1JNRUQ7CiAKLSAgICAgICAgICAgIG1MYXN0VHJhY2stPm1ldGEuc2V0RGF0YSgKLSAgICAgICAgICAgICAgICAgICAga0tleUFWQ0MsIGtUeXBlQVZDQywgYnVmZmVyLmdldCgpLCBjaHVua19kYXRhX3NpemUpOworICAgICAgICAgICAgQU1lZGlhRm9ybWF0X3NldEJ1ZmZlcihtTGFzdFRyYWNrLT5tZXRhLCAKKyAgICAgICAgICAgICAgICAgICAgQU1FRElBRk9STUFUX0tFWV9DU0RfQVZDLCBidWZmZXIuZ2V0KCksIGNodW5rX2RhdGFfc2l6ZSk7CiAKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CkBAIC0yMTE2LDggKzIxNTcsOCBAQAogICAgICAgICAgICAgaWYgKG1MYXN0VHJhY2sgPT0gTlVMTCkKICAgICAgICAgICAgICAgICByZXR1cm4gRVJST1JfTUFMRk9STUVEOwogCi0gICAgICAgICAgICBtTGFzdFRyYWNrLT5tZXRhLnNldERhdGEoCi0gICAgICAgICAgICAgICAgICAgIGtLZXlIVkNDLCBrVHlwZUhWQ0MsIGJ1ZmZlci5nZXQoKSwgY2h1bmtfZGF0YV9zaXplKTsKKyAgICAgICAgICAgIEFNZWRpYUZvcm1hdF9zZXRCdWZmZXIobUxhc3RUcmFjay0+bWV0YSwgCisgICAgICAgICAgICAgICAgICAgIEFNRURJQUZPUk1BVF9LRVlfQ1NEX0hFVkMsIGJ1ZmZlci5nZXQoKSwgY2h1bmtfZGF0YV9zaXplKTsKIAogICAgICAgICAgICAgKm9mZnNldCArPSBjaHVua19zaXplOwogICAgICAgICAgICAgYnJlYWs7CkBAIC0yMTUyLDcgKzIxOTMsOCBAQAogICAgICAgICAgICAgaWYgKG1MYXN0VHJhY2sgPT0gTlVMTCkKICAgICAgICAgICAgICAgICByZXR1cm4gRVJST1JfTUFMRk9STUVEOwogCi0gICAgICAgICAgICBtTGFzdFRyYWNrLT5tZXRhLnNldERhdGEoa0tleUQyNjMsIGtUeXBlRDI2MywgYnVmZmVyLCBjaHVua19kYXRhX3NpemUpOworICAgICAgICAgICAgQU1lZGlhRm9ybWF0X3NldEJ1ZmZlcihtTGFzdFRyYWNrLT5tZXRhLAorICAgICAgICAgICAgICAgICAgICBBTUVESUFGT1JNQVRfS0VZX0QyNjMsIGJ1ZmZlciwgY2h1bmtfZGF0YV9zaXplKTsKIAogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KQEAgLTIyODAsMTUgKzIzMjIsMTUgQEAKICAgICAgICAgICAgICAgICBkdXJhdGlvbiA9IGQzMjsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGlmIChkdXJhdGlvbiAhPSAwICYmIG1IZWFkZXJUaW1lc2NhbGUgIT0gMCAmJiBkdXJhdGlvbiA8IFVJTlQ2NF9NQVggLyAxMDAwMDAwKSB7Ci0gICAgICAgICAgICAgICAgbUZpbGVNZXRhRGF0YS5zZXRJbnQ2NChrS2V5RHVyYXRpb24sIGR1cmF0aW9uICogMTAwMDAwMCAvIG1IZWFkZXJUaW1lc2NhbGUpOworICAgICAgICAgICAgICAgIEFNZWRpYUZvcm1hdF9zZXRJbnQ2NChtRmlsZU1ldGFEYXRhLAorICAgICAgICAgICAgICAgICAgICAgICAgQU1FRElBRk9STUFUX0tFWV9EVVJBVElPTiwgZHVyYXRpb24gKiAxMDAwMDAwIC8gbUhlYWRlclRpbWVzY2FsZSk7CiAgICAgICAgICAgICB9CiAKICAgICAgICAgICAgIFN0cmluZzggczsKICAgICAgICAgICAgIGlmIChjb252ZXJ0VGltZVRvRGF0ZShjcmVhdGlvblRpbWUsICZzKSkgewotICAgICAgICAgICAgICAgIG1GaWxlTWV0YURhdGEuc2V0Q1N0cmluZyhrS2V5RGF0ZSwgcy5zdHJpbmcoKSk7CisgICAgICAgICAgICAgICAgQU1lZGlhRm9ybWF0X3NldFN0cmluZyhtRmlsZU1ldGFEYXRhLCBBTUVESUFGT1JNQVRfS0VZX0RBVEUsIHMuc3RyaW5nKCkpOwogICAgICAgICAgICAgfQogCi0KICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAKQEAgLTIzMzAsNyArMjM3Miw4IEBACiAgICAgICAgICAgICB9CiAKICAgICAgICAgICAgIGlmIChkdXJhdGlvbiAhPSAwICYmIG1IZWFkZXJUaW1lc2NhbGUgIT0gMCkgewotICAgICAgICAgICAgICAgIG1GaWxlTWV0YURhdGEuc2V0SW50NjQoa0tleUR1cmF0aW9uLCBkdXJhdGlvbiAqIDEwMDAwMDAgLyBtSGVhZGVyVGltZXNjYWxlKTsKKyAgICAgICAgICAgICAgICBBTWVkaWFGb3JtYXRfc2V0SW50NjQobUZpbGVNZXRhRGF0YSwKKyAgICAgICAgICAgICAgICAgICAgICAgIEFNRURJQUZPUk1BVF9LRVlfRFVSQVRJT04sIGR1cmF0aW9uICogMTAwMDAwMCAvIG1IZWFkZXJUaW1lc2NhbGUpOwogICAgICAgICAgICAgfQogCiAgICAgICAgICAgICBicmVhazsKQEAgLTIzNjQsNyArMjQwNyw4IEBACiAgICAgICAgICAgICAvLyBmb3IgYSBwcmFjdGljYWwgcmVhc29uIGFzIHZhcmlvdXMgTVBFRzQgY29udGFpbmVycyB1c2UgaXQuCiAgICAgICAgICAgICBpZiAodHlwZSA9PSBGT1VSQ0MoJ3QnLCAnZScsICd4JywgJ3QnKSB8fCB0eXBlID09IEZPVVJDQygncycsICdiJywgJ3QnLCAnbCcpKSB7CiAgICAgICAgICAgICAgICAgaWYgKG1MYXN0VHJhY2sgIT0gTlVMTCkgewotICAgICAgICAgICAgICAgICAgICBtTGFzdFRyYWNrLT5tZXRhLnNldENTdHJpbmcoa0tleU1JTUVUeXBlLCBNRURJQV9NSU1FVFlQRV9URVhUXzNHUFApOworICAgICAgICAgICAgICAgICAgICBBTWVkaWFGb3JtYXRfc2V0U3RyaW5nKG1MYXN0VHJhY2stPm1ldGEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgQU1FRElBRk9STUFUX0tFWV9NSU1FLCBNRURJQV9NSU1FVFlQRV9URVhUXzNHUFApOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KIApAQCAtMjQwOCwxMSArMjQ1MiwxMCBAQAogICAgICAgICAgICAgaWYgKG1MYXN0VHJhY2sgPT0gTlVMTCkKICAgICAgICAgICAgICAgICByZXR1cm4gRVJST1JfTUFMRk9STUVEOwogCi0gICAgICAgICAgICB1aW50MzJfdCB0eXBlOwotICAgICAgICAgICAgY29uc3Qgdm9pZCAqZGF0YTsKKyAgICAgICAgICAgIHZvaWQgKmRhdGE7CiAgICAgICAgICAgICBzaXplX3Qgc2l6ZSA9IDA7Ci0gICAgICAgICAgICBpZiAoIW1MYXN0VHJhY2stPm1ldGEuZmluZERhdGEoCi0gICAgICAgICAgICAgICAgICAgIGtLZXlUZXh0Rm9ybWF0RGF0YSwgJnR5cGUsICZkYXRhLCAmc2l6ZSkpIHsKKyAgICAgICAgICAgIGlmICghQU1lZGlhRm9ybWF0X2dldEJ1ZmZlcihtTGFzdFRyYWNrLT5tZXRhLAorICAgICAgICAgICAgICAgICAgICBBTUVESUFGT1JNQVRfS0VZX1RFWFRfRk9STUFUX0RBVEEsICZkYXRhLCAmc2l6ZSkpIHsKICAgICAgICAgICAgICAgICBzaXplID0gMDsKICAgICAgICAgICAgIH0KIApAQCAtMjQzOSw4ICsyNDgyLDggQEAKICAgICAgICAgICAgICAgICByZXR1cm4gRVJST1JfSU87CiAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgIG1MYXN0VHJhY2stPm1ldGEuc2V0RGF0YSgKLSAgICAgICAgICAgICAgICAgICAga0tleVRleHRGb3JtYXREYXRhLCAwLCBidWZmZXIsIHNpemUgKyBjaHVua19zaXplKTsKKyAgICAgICAgICAgIEFNZWRpYUZvcm1hdF9zZXRCdWZmZXIobUxhc3RUcmFjay0+bWV0YSwKKyAgICAgICAgICAgICAgICAgICAgQU1FRElBRk9STUFUX0tFWV9URVhUX0ZPUk1BVF9EQVRBLCBidWZmZXIsIHNpemUgKyBjaHVua19zaXplKTsKIAogICAgICAgICAgICAgZGVsZXRlW10gYnVmZmVyOwogCkBAIC0yNDcyLDggKzI1MTUsOCBAQAogICAgICAgICAgICAgICAgIHJldHVybiBFUlJPUl9NQUxGT1JNRUQ7CiAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgIG1GaWxlTWV0YURhdGEuc2V0RGF0YSgKLSAgICAgICAgICAgICAgICBrS2V5QWxidW1BcnQsIE1ldGFEYXRhOjpUWVBFX05PTkUsCisgICAgICAgICAgICBBTWVkaWFGb3JtYXRfc2V0QnVmZmVyKG1GaWxlTWV0YURhdGEsCisgICAgICAgICAgICAgICAgQU1FRElBRk9STUFUX0tFWV9BTEJVTUFSVCwKICAgICAgICAgICAgICAgICBidWZmZXIuZ2V0KCkgKyBrU2tpcEJ5dGVzT2ZEYXRhQm94LCBjaHVua19kYXRhX3NpemUgLSBrU2tpcEJ5dGVzT2ZEYXRhQm94KTsKIAogICAgICAgICAgICAgYnJlYWs7CkBAIC0yNTQ3LDcgKzI1OTAsMTkgQEAKICAgICAgICAgY2FzZSBGT1VSQ0MoJ2EnLCAnYycsICctJywgJzMnKToKICAgICAgICAgewogICAgICAgICAgICAgKm9mZnNldCArPSBjaHVua19zaXplOwotICAgICAgICAgICAgcmV0dXJuIHBhcnNlQUMzU2FtcGxlRW50cnkoZGF0YV9vZmZzZXQpOworICAgICAgICAgICAgcmV0dXJuIHBhcnNlQUMzU3BlY2lmaWNCb3goZGF0YV9vZmZzZXQpOworICAgICAgICB9CisKKyAgICAgICAgY2FzZSBGT1VSQ0MoJ2UnLCAnYycsICctJywgJzMnKToKKyAgICAgICAgeworICAgICAgICAgICAgKm9mZnNldCArPSBjaHVua19zaXplOworICAgICAgICAgICAgcmV0dXJuIHBhcnNlRUFDM1NwZWNpZmljQm94KGRhdGFfb2Zmc2V0KTsKKyAgICAgICAgfQorCisgICAgICAgIGNhc2UgRk9VUkNDKCdhJywgJ2MnLCAnLScsICc0Jyk6CisgICAgICAgIHsKKyAgICAgICAgICAgICpvZmZzZXQgKz0gY2h1bmtfc2l6ZTsKKyAgICAgICAgICAgIHJldHVybiBwYXJzZUFDNFNwZWNpZmljQm94KGRhdGFfb2Zmc2V0KTsKICAgICAgICAgfQogCiAgICAgICAgIGNhc2UgRk9VUkNDKCdmJywgJ3QnLCAneScsICdwJyk6CkBAIC0yNjIxLDM2ICsyNjc2LDMyOSBAQAogICAgIHJldHVybiBPSzsKIH0KIAotc3RhdHVzX3QgTVBFRzRFeHRyYWN0b3I6OnBhcnNlQUMzU2FtcGxlRW50cnkob2ZmNjRfdCBvZmZzZXQpIHsKK3N0YXR1c190IE1QRUc0RXh0cmFjdG9yOjpwYXJzZUNoYW5uZWxDb3VudFNhbXBsZVJhdGUoCisgICAgICAgIG9mZjY0X3QgKm9mZnNldCwgdWludDE2X3QgKmNoYW5uZWxDb3VudCwgdWludDE2X3QgKnNhbXBsZVJhdGUpIHsKICAgICAvLyBza2lwIDE2IGJ5dGVzOgogICAgIC8vICArIDYtYnl0ZSByZXNlcnZlZCwKICAgICAvLyAgKyAyLWJ5dGUgZGF0YSByZWZlcmVuY2UgaW5kZXgsCiAgICAgLy8gICsgOC1ieXRlIHJlc2VydmVkCi0gICAgb2Zmc2V0ICs9IDE2OwotICAgIHVpbnQxNl90IGNoYW5uZWxDb3VudDsKLSAgICBpZiAoIW1EYXRhU291cmNlLT5nZXRVSW50MTYob2Zmc2V0LCAmY2hhbm5lbENvdW50KSkgeworICAgICpvZmZzZXQgKz0gMTY7CisgICAgaWYgKCFtRGF0YVNvdXJjZS0+Z2V0VUludDE2KCpvZmZzZXQsIGNoYW5uZWxDb3VudCkpIHsKKyAgICAgICAgQUxPR0UoIk1QRUc0RXh0cmFjdG9yOiBlcnJvciB3aGlsZSByZWFkaW5nIHNhbXBsZSBlbnRyeSBib3g6IGNhbm5vdCByZWFkIGNoYW5uZWwgY291bnQiKTsKICAgICAgICAgcmV0dXJuIEVSUk9SX01BTEZPUk1FRDsKICAgICB9CiAgICAgLy8gc2tpcCA4IGJ5dGVzOgogICAgIC8vICArIDItYnl0ZSBjaGFubmVsQ291bnQsCiAgICAgLy8gICsgMi1ieXRlIHNhbXBsZSBzaXplLAogICAgIC8vICArIDQtYnl0ZSByZXNlcnZlZAotICAgIG9mZnNldCArPSA4OwotICAgIHVpbnQxNl90IHNhbXBsZVJhdGU7Ci0gICAgaWYgKCFtRGF0YVNvdXJjZS0+Z2V0VUludDE2KG9mZnNldCwgJnNhbXBsZVJhdGUpKSB7Ci0gICAgICAgIEFMT0dFKCJNUEVHNEV4dHJhY3RvcjogZXJyb3Igd2hpbGUgcmVhZGluZyBhYy0zIGJsb2NrOiBjYW5ub3QgcmVhZCBzYW1wbGUgcmF0ZSIpOworICAgICpvZmZzZXQgKz0gODsKKyAgICBpZiAoIW1EYXRhU291cmNlLT5nZXRVSW50MTYoKm9mZnNldCwgc2FtcGxlUmF0ZSkpIHsKKyAgICAgICAgQUxPR0UoIk1QRUc0RXh0cmFjdG9yOiBlcnJvciB3aGlsZSByZWFkaW5nIHNhbXBsZSBlbnRyeSBib3g6IGNhbm5vdCByZWFkIHNhbXBsZSByYXRlIik7CiAgICAgICAgIHJldHVybiBFUlJPUl9NQUxGT1JNRUQ7CiAgICAgfQotCiAgICAgLy8gc2tpcCA0IGJ5dGVzOgogICAgIC8vICArIDItYnl0ZSBzYW1wbGVSYXRlLAogICAgIC8vICArIDItYnl0ZSByZXNlcnZlZAotICAgIG9mZnNldCArPSA0OwotICAgIHJldHVybiBwYXJzZUFDM1NwZWNpZmljQm94KG9mZnNldCwgc2FtcGxlUmF0ZSk7CisgICAgKm9mZnNldCArPSA0OworICAgIHJldHVybiBPSzsKIH0KIAotc3RhdHVzX3QgTVBFRzRFeHRyYWN0b3I6OnBhcnNlQUMzU3BlY2lmaWNCb3goCi0gICAgICAgIG9mZjY0X3Qgb2Zmc2V0LCB1aW50MTZfdCBzYW1wbGVSYXRlKSB7CitzdGF0dXNfdCBNUEVHNEV4dHJhY3Rvcjo6cGFyc2VBQzRTcGVjaWZpY0JveChvZmY2NF90IG9mZnNldCkgeworICAgIGlmIChtTGFzdFRyYWNrID09IE5VTEwpIHsKKyAgICAgICAgcmV0dXJuIEVSUk9SX01BTEZPUk1FRDsKKyAgICB9CisKKyAgICB1aW50MTZfdCBzYW1wbGVSYXRlLCBjaGFubmVsQ291bnQ7CisgICAgc3RhdHVzX3Qgc3RhdHVzOworICAgIGlmICgoc3RhdHVzID0gcGFyc2VDaGFubmVsQ291bnRTYW1wbGVSYXRlKCZvZmZzZXQsICZjaGFubmVsQ291bnQsICZzYW1wbGVSYXRlKSkgIT0gT0spIHsKKyAgICAgICAgcmV0dXJuIHN0YXR1czsKKyAgICB9CisgICAgdWludDMyX3Qgc2l6ZTsKKyAgICAvLyArIDQtYnl0ZSBzaXplCisgICAgLy8gKyA0LWJ5dGUgdHlwZQorICAgIC8vICsgMy1ieXRlIHBheWxvYWQKKyAgICBjb25zdCB1aW50MzJfdCBrQUM0TWluaW11bUJveFNpemUgPSA0ICsgNCArIDM7CisgICAgaWYgKCFtRGF0YVNvdXJjZS0+Z2V0VUludDMyKG9mZnNldCwgJnNpemUpIHx8IHNpemUgPCBrQUM0TWluaW11bUJveFNpemUpIHsKKyAgICAgICAgQUxPR0UoIk1QRUc0RXh0cmFjdG9yOiBlcnJvciB3aGlsZSByZWFkaW5nIGFjLTQgYmxvY2s6IGNhbm5vdCByZWFkIHNwZWNpZmljIGJveCBzaXplIik7CisgICAgICAgIHJldHVybiBFUlJPUl9NQUxGT1JNRUQ7CisgICAgfQorCisgICAgLy8gKyA0LWJ5dGUgc2l6ZQorICAgIG9mZnNldCArPSA0OworICAgIHVpbnQzMl90IHR5cGU7CisgICAgaWYgKCFtRGF0YVNvdXJjZS0+Z2V0VUludDMyKG9mZnNldCwgJnR5cGUpIHx8IHR5cGUgIT0gRk9VUkNDKCdkJywgJ2EnLCAnYycsICc0JykpIHsKKyAgICAgICAgQUxPR0UoIk1QRUc0RXh0cmFjdG9yOiBlcnJvciB3aGlsZSByZWFkaW5nIGFjLTQgc3BlY2lmaWMgYmxvY2s6IGhlYWRlciBub3QgZGFjNCIpOworICAgICAgICByZXR1cm4gRVJST1JfTUFMRk9STUVEOworICAgIH0KKworICAgIC8vICsgNC1ieXRlIHR5cGUKKyAgICBvZmZzZXQgKz0gNDsKKyAgICAvLyBhdCBsZWFzdCBmb3IgQUM0IERTSSB2MSB0aGlzIGlzIGJpZyBlbm91Z2gKKyAgICBjb25zdCB1aW50MzJfdCBrQUM0U3BlY2lmaWNCb3hQYXlsb2FkU2l6ZSA9IDI1NjsKKyAgICB1aW50OF90IGNodW5rW2tBQzRTcGVjaWZpY0JveFBheWxvYWRTaXplXTsKKyAgICBzc2l6ZV90IGRzaVNpemUgPSBzaXplIC0gODsgLy8gc2l6ZSBvZiBib3ggLSBzaXplIGFuZCB0eXBlIGZpZWxkcworICAgIGlmIChkc2lTaXplID49IChzc2l6ZV90KWtBQzRTcGVjaWZpY0JveFBheWxvYWRTaXplIHx8CisgICAgICAgIG1EYXRhU291cmNlLT5yZWFkQXQob2Zmc2V0LCBjaHVuaywgZHNpU2l6ZSkgIT0gZHNpU2l6ZSkgeworICAgICAgICBBTE9HRSgiTVBFRzRFeHRyYWN0b3I6IGVycm9yIHdoaWxlIHJlYWRpbmcgYWMtNCBzcGVjaWZpYyBibG9jazogYml0c3RyZWFtIGZpZWxkcyIpOworICAgICAgICByZXR1cm4gRVJST1JfTUFMRk9STUVEOworICAgIH0KKyAgICAvLyArIHNpemUtYnl0ZSBwYXlsb2FkCisgICAgb2Zmc2V0ICs9IGRzaVNpemU7CisgICAgQUJpdFJlYWRlciBicihjaHVuaywgZHNpU2l6ZSk7CisgICAgQUM0RFNJUGFyc2VyIHBhcnNlcihicik7CisgICAgaWYgKCFwYXJzZXIucGFyc2UoKSl7CisgICAgICAgIEFMT0dFKCJNUEVHNEV4dHJhY3RvcjogZXJyb3Igd2hpbGUgcGFyc2luZyBhYy00IHNwZWNpZmljIGJsb2NrIik7CisgICAgICAgIHJldHVybiBFUlJPUl9NQUxGT1JNRUQ7CisgICAgfQorCisgICAgQU1lZGlhRm9ybWF0X3NldFN0cmluZyhtTGFzdFRyYWNrLT5tZXRhLCBBTUVESUFGT1JNQVRfS0VZX01JTUUsIE1FRElBX01JTUVUWVBFX0FVRElPX0FDNCk7CisgICAgQU1lZGlhRm9ybWF0X3NldEludDMyKG1MYXN0VHJhY2stPm1ldGEsIEFNRURJQUZPUk1BVF9LRVlfQ0hBTk5FTF9DT1VOVCwgY2hhbm5lbENvdW50KTsKKyAgICBBTWVkaWFGb3JtYXRfc2V0SW50MzIobUxhc3RUcmFjay0+bWV0YSwgQU1FRElBRk9STUFUX0tFWV9TQU1QTEVfUkFURSwgc2FtcGxlUmF0ZSk7CisKKyAgICBBdWRpb1ByZXNlbnRhdGlvbkNvbGxlY3Rpb24gcHJlc2VudGF0aW9uczsKKyAgICAvLyB0cmFuc2xhdGUgdGhlIEFDNCBwcmVzZW50YXRpb24gaW5mb3JtYXRpb24gdG8gYXVkaW8gcHJlc2VudGF0aW9ucyBmb3IgdGhpcyB0cmFjaworICAgIEFDNERTSVBhcnNlcjo6QUM0UHJlc2VudGF0aW9ucyBhYzRQcmVzZW50YXRpb25zID0gcGFyc2VyLmdldFByZXNlbnRhdGlvbnMoKTsKKyAgICBpZiAoIWFjNFByZXNlbnRhdGlvbnMuZW1wdHkoKSkgeworICAgICAgICBmb3IgKGNvbnN0IGF1dG8mIGFjNFByZXNlbnRhdGlvbiA6IGFjNFByZXNlbnRhdGlvbnMpIHsKKyAgICAgICAgICAgIGF1dG8mIHByZXNlbnRhdGlvbiA9IGFjNFByZXNlbnRhdGlvbi5zZWNvbmQ7CisgICAgICAgICAgICBpZiAoIXByZXNlbnRhdGlvbi5tRW5hYmxlZCkgeworICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgfQorICAgICAgICAgICAgQXVkaW9QcmVzZW50YXRpb25WMSBhcDsKKyAgICAgICAgICAgIGFwLm1QcmVzZW50YXRpb25JZCA9IHByZXNlbnRhdGlvbi5tR3JvdXBJbmRleDsKKyAgICAgICAgICAgIGFwLm1Qcm9ncmFtSWQgPSBwcmVzZW50YXRpb24ubVByb2dyYW1JRDsKKyAgICAgICAgICAgIGFwLm1MYW5ndWFnZSA9IHByZXNlbnRhdGlvbi5tTGFuZ3VhZ2U7CisgICAgICAgICAgICBpZiAocHJlc2VudGF0aW9uLm1QcmVWaXJ0dWFsaXplZCkgeworICAgICAgICAgICAgICAgIGFwLm1NYXN0ZXJpbmdJbmRpY2F0aW9uID0gTUFTVEVSRURfRk9SX0hFQURQSE9ORTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgc3dpdGNoIChwcmVzZW50YXRpb24ubUNoYW5uZWxNb2RlKSB7CisgICAgICAgICAgICAgICAgICAgIGNhc2UgQUM0UGFyc2VyOjpBQzRQcmVzZW50YXRpb246OmtDaGFubmVsTW9kZV9Nb25vOgorICAgICAgICAgICAgICAgICAgICBjYXNlIEFDNFBhcnNlcjo6QUM0UHJlc2VudGF0aW9uOjprQ2hhbm5lbE1vZGVfU3RlcmVvOgorICAgICAgICAgICAgICAgICAgICAgICAgYXAubU1hc3RlcmluZ0luZGljYXRpb24gPSBNQVNURVJFRF9GT1JfU1RFUkVPOworICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIGNhc2UgQUM0UGFyc2VyOjpBQzRQcmVzZW50YXRpb246OmtDaGFubmVsTW9kZV8zXzA6CisgICAgICAgICAgICAgICAgICAgIGNhc2UgQUM0UGFyc2VyOjpBQzRQcmVzZW50YXRpb246OmtDaGFubmVsTW9kZV81XzA6CisgICAgICAgICAgICAgICAgICAgIGNhc2UgQUM0UGFyc2VyOjpBQzRQcmVzZW50YXRpb246OmtDaGFubmVsTW9kZV81XzE6CisgICAgICAgICAgICAgICAgICAgIGNhc2UgQUM0UGFyc2VyOjpBQzRQcmVzZW50YXRpb246OmtDaGFubmVsTW9kZV83XzBfMzQ6CisgICAgICAgICAgICAgICAgICAgIGNhc2UgQUM0UGFyc2VyOjpBQzRQcmVzZW50YXRpb246OmtDaGFubmVsTW9kZV83XzFfMzQ6CisgICAgICAgICAgICAgICAgICAgIGNhc2UgQUM0UGFyc2VyOjpBQzRQcmVzZW50YXRpb246OmtDaGFubmVsTW9kZV83XzBfNTI6CisgICAgICAgICAgICAgICAgICAgIGNhc2UgQUM0UGFyc2VyOjpBQzRQcmVzZW50YXRpb246OmtDaGFubmVsTW9kZV83XzFfNTI6CisgICAgICAgICAgICAgICAgICAgICAgICBhcC5tTWFzdGVyaW5nSW5kaWNhdGlvbiA9IE1BU1RFUkVEX0ZPUl9TVVJST1VORDsKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICBjYXNlIEFDNFBhcnNlcjo6QUM0UHJlc2VudGF0aW9uOjprQ2hhbm5lbE1vZGVfN18wXzMyMjoKKyAgICAgICAgICAgICAgICAgICAgY2FzZSBBQzRQYXJzZXI6OkFDNFByZXNlbnRhdGlvbjo6a0NoYW5uZWxNb2RlXzdfMV8zMjI6CisgICAgICAgICAgICAgICAgICAgIGNhc2UgQUM0UGFyc2VyOjpBQzRQcmVzZW50YXRpb246OmtDaGFubmVsTW9kZV83XzBfNDoKKyAgICAgICAgICAgICAgICAgICAgY2FzZSBBQzRQYXJzZXI6OkFDNFByZXNlbnRhdGlvbjo6a0NoYW5uZWxNb2RlXzdfMV80OgorICAgICAgICAgICAgICAgICAgICBjYXNlIEFDNFBhcnNlcjo6QUM0UHJlc2VudGF0aW9uOjprQ2hhbm5lbE1vZGVfOV8wXzQ6CisgICAgICAgICAgICAgICAgICAgIGNhc2UgQUM0UGFyc2VyOjpBQzRQcmVzZW50YXRpb246OmtDaGFubmVsTW9kZV85XzFfNDoKKyAgICAgICAgICAgICAgICAgICAgY2FzZSBBQzRQYXJzZXI6OkFDNFByZXNlbnRhdGlvbjo6a0NoYW5uZWxNb2RlXzIyXzI6CisgICAgICAgICAgICAgICAgICAgICAgICBhcC5tTWFzdGVyaW5nSW5kaWNhdGlvbiA9IE1BU1RFUkVEX0ZPUl8zRDsKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgICAgICAgICAgQUxPR0UoIkludmFsaWQgY2hhbm5lbCBtb2RlIGluIEFDNCBwcmVzZW50YXRpb24iKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBFUlJPUl9NQUxGT1JNRUQ7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorCisgICAgICAgICAgICBhcC5tQXVkaW9EZXNjcmlwdGlvbkF2YWlsYWJsZSA9IChwcmVzZW50YXRpb24ubUNvbnRlbnRDbGFzc2lmaWVyID09CisgICAgICAgICAgICAgICAgICAgIEFDNFBhcnNlcjo6QUM0UHJlc2VudGF0aW9uOjprVmlzdWFsbHlJbXBhaXJlZCk7CisgICAgICAgICAgICBhcC5tU3Bva2VuU3VidGl0bGVzQXZhaWxhYmxlID0gKHByZXNlbnRhdGlvbi5tQ29udGVudENsYXNzaWZpZXIgPT0KKyAgICAgICAgICAgICAgICAgICAgQUM0UGFyc2VyOjpBQzRQcmVzZW50YXRpb246OmtWb2ljZU92ZXIpOworICAgICAgICAgICAgYXAubURpYWxvZ3VlRW5oYW5jZW1lbnRBdmFpbGFibGUgPSBwcmVzZW50YXRpb24ubUhhc0RpYWxvZ0VuaGFuY2VtZW50czsKKyAgICAgICAgICAgIGlmICghYXAubUxhbmd1YWdlLmVtcHR5KCkpIHsKKyAgICAgICAgICAgICAgICBhcC5tTGFiZWxzLmVtcGxhY2UoYXAubUxhbmd1YWdlLCBwcmVzZW50YXRpb24ubURlc2NyaXB0aW9uKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHByZXNlbnRhdGlvbnMucHVzaF9iYWNrKHN0ZDo6bW92ZShhcCkpOworICAgICAgICB9CisgICAgfQorCisgICAgaWYgKHByZXNlbnRhdGlvbnMuZW1wdHkoKSkgeworICAgICAgICAvLyBDbGVhciBhdWRpbyBwcmVzZW50YXRpb24gaW5mbyBpbiBtZXRhZGF0YS4KKyAgICAgICAgQU1lZGlhRm9ybWF0X3NldEJ1ZmZlcigKKyAgICAgICAgICAgICAgICBtTGFzdFRyYWNrLT5tZXRhLCBBTUVESUFGT1JNQVRfS0VZX0FVRElPX1BSRVNFTlRBVElPTl9JTkZPLCBudWxscHRyLCAwKTsKKyAgICB9IGVsc2UgeworICAgICAgICBzdGQ6Om9zdHJpbmdzdHJlYW0gb3V0U3RyZWFtKHN0ZDo6aW9zOjpvdXQpOworICAgICAgICBzZXJpYWxpemVBdWRpb1ByZXNlbnRhdGlvbnMocHJlc2VudGF0aW9ucywgJm91dFN0cmVhbSk7CisgICAgICAgIEFNZWRpYUZvcm1hdF9zZXRCdWZmZXIoCisgICAgICAgICAgICAgICAgbUxhc3RUcmFjay0+bWV0YSwgQU1FRElBRk9STUFUX0tFWV9BVURJT19QUkVTRU5UQVRJT05fSU5GTywKKyAgICAgICAgICAgICAgICBvdXRTdHJlYW0uc3RyKCkuZGF0YSgpLCBvdXRTdHJlYW0uc3RyKCkuc2l6ZSgpKTsKKyAgICB9CisgICAgcmV0dXJuIE9LOworfQorCitzdGF0dXNfdCBNUEVHNEV4dHJhY3Rvcjo6cGFyc2VFQUMzU3BlY2lmaWNCb3gob2ZmNjRfdCBvZmZzZXQpIHsKKyAgICBpZiAobUxhc3RUcmFjayA9PSBOVUxMKSB7CisgICAgICAgIHJldHVybiBFUlJPUl9NQUxGT1JNRUQ7CisgICAgfQorCisgICAgdWludDE2X3Qgc2FtcGxlUmF0ZSwgY2hhbm5lbHM7CisgICAgc3RhdHVzX3Qgc3RhdHVzOworICAgIGlmICgoc3RhdHVzID0gcGFyc2VDaGFubmVsQ291bnRTYW1wbGVSYXRlKCZvZmZzZXQsICZjaGFubmVscywgJnNhbXBsZVJhdGUpKSAhPSBPSykgeworICAgICAgICByZXR1cm4gc3RhdHVzOworICAgIH0KKyAgICB1aW50MzJfdCBzaXplOworICAgIC8vICsgNC1ieXRlIHNpemUKKyAgICAvLyArIDQtYnl0ZSB0eXBlCisgICAgLy8gKyAzLWJ5dGUgcGF5bG9hZAorICAgIGNvbnN0IHVpbnQzMl90IGtFQUMzU3BlY2lmaWNCb3hNaW5TaXplID0gMTE7CisgICAgLy8gMTMgKyAzICsgKDggKiAoMiArIDUgKyA1ICsgMyArIDEgKyAzICsgNCArICgxNCAqIDkgKyAxKSkpIGJpdHMgPT0gMTUyIGJ5dGVzIHRoZW9yZXRpY2FsIG1heAorICAgIC8vIGNhbGN1bGF0ZWQgZnJvbSB0aGUgcmVxdWlyZWQgYml0cyByZWFkIGJlbG93IGFzIHdlbGwgYXMgdGhlIG1heGltdW0gbnVtYmVyIG9mIGluZGVwZW5kZW50CisgICAgLy8gYW5kIGRlcGVuZGFudCBzdWIgc3RyZWFtcyB5b3UgY2FuIGhhdmUKKyAgICBjb25zdCB1aW50MzJfdCBrRUFDM1NwZWNpZmljQm94TWF4U2l6ZSA9IDE1MjsKKyAgICBpZiAoIW1EYXRhU291cmNlLT5nZXRVSW50MzIob2Zmc2V0LCAmc2l6ZSkgfHwKKyAgICAgICAgc2l6ZSA8IGtFQUMzU3BlY2lmaWNCb3hNaW5TaXplIHx8CisgICAgICAgIHNpemUgPiBrRUFDM1NwZWNpZmljQm94TWF4U2l6ZSkgeworICAgICAgICBBTE9HRSgiTVBFRzRFeHRyYWN0b3I6IGVycm9yIHdoaWxlIHJlYWRpbmcgZWFjLTMgYmxvY2s6IGNhbm5vdCByZWFkIHNwZWNpZmljIGJveCBzaXplIik7CisgICAgICAgIHJldHVybiBFUlJPUl9NQUxGT1JNRUQ7CisgICAgfQorCisgICAgb2Zmc2V0ICs9IDQ7CisgICAgdWludDMyX3QgdHlwZTsKKyAgICBpZiAoIW1EYXRhU291cmNlLT5nZXRVSW50MzIob2Zmc2V0LCAmdHlwZSkgfHwgdHlwZSAhPSBGT1VSQ0MoJ2QnLCAnZScsICdjJywgJzMnKSkgeworICAgICAgICBBTE9HRSgiTVBFRzRFeHRyYWN0b3I6IGVycm9yIHdoaWxlIHJlYWRpbmcgZWFjLTMgc3BlY2lmaWMgYmxvY2s6IGhlYWRlciBub3QgZGVjMyIpOworICAgICAgICByZXR1cm4gRVJST1JfTUFMRk9STUVEOworICAgIH0KKworICAgIG9mZnNldCArPSA0OworICAgIHVpbnQ4X3QqIGNodW5rID0gbmV3IChzdGQ6Om5vdGhyb3cpIHVpbnQ4X3Rbc2l6ZV07CisgICAgaWYgKGNodW5rID09IE5VTEwpIHsKKyAgICAgICAgcmV0dXJuIEVSUk9SX01BTEZPUk1FRDsKKyAgICB9CisKKyAgICBpZiAobURhdGFTb3VyY2UtPnJlYWRBdChvZmZzZXQsIGNodW5rLCBzaXplKSAhPSAoc3NpemVfdClzaXplKSB7CisgICAgICAgIEFMT0dFKCJNUEVHNEV4dHJhY3RvcjogZXJyb3Igd2hpbGUgcmVhZGluZyBlYWMtMyBzcGVjaWZpYyBibG9jazogYml0c3RyZWFtIGZpZWxkcyIpOworICAgICAgICBkZWxldGVbXSBjaHVuazsKKyAgICAgICAgcmV0dXJuIEVSUk9SX01BTEZPUk1FRDsKKyAgICB9CisKKyAgICBBQml0UmVhZGVyIGJyKGNodW5rLCBzaXplKTsKKyAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhbm5lbENvdW50VGFibGVbXSA9IHsyLCAxLCAyLCAzLCAzLCA0LCA0LCA1fTsKKyAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgc2FtcGxlUmF0ZVRhYmxlW10gPSB7NDgwMDAsIDQ0MTAwLCAzMjAwMH07CisKKyAgICBpZiAoYnIubnVtQml0c0xlZnQoKSA8IDE2KSB7CisgICAgICAgIGRlbGV0ZVtdIGNodW5rOworICAgICAgICByZXR1cm4gRVJST1JfTUFMRk9STUVEOworICAgIH0KKyAgICB1bnNpZ25lZCBkYXRhX3JhdGUgPSBici5nZXRCaXRzKDEzKTsKKyAgICBBTE9HVigiRUFDMyBkYXRhIHJhdGUgPSAlZCIsIGRhdGFfcmF0ZSk7CisKKyAgICB1bnNpZ25lZCBudW1faW5kX3N1YiA9IGJyLmdldEJpdHMoMykgKyAxOworICAgIEFMT0dWKCJFQUMzIGluZGVwZW5kYW50IHN1YnN0cmVhbXMgPSAlZCIsIG51bV9pbmRfc3ViKTsKKyAgICBpZiAoYnIubnVtQml0c0xlZnQoKSA8IChudW1faW5kX3N1YiAqIDIzKSkgeworICAgICAgICBkZWxldGVbXSBjaHVuazsKKyAgICAgICAgcmV0dXJuIEVSUk9SX01BTEZPUk1FRDsKKyAgICB9CisKKyAgICB1bnNpZ25lZCBjaGFubmVsQ291bnQgPSAwOworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBudW1faW5kX3N1YjsgaSsrKSB7CisgICAgICAgIHVuc2lnbmVkIGZzY29kID0gYnIuZ2V0Qml0cygyKTsKKyAgICAgICAgaWYgKGZzY29kID09IDMpIHsKKyAgICAgICAgICAgIEFMT0dFKCJJbmNvcnJlY3QgZnNjb2QgKDMpIGluIEVBQzMgaGVhZGVyIik7CisgICAgICAgICAgICBkZWxldGVbXSBjaHVuazsKKyAgICAgICAgICAgIHJldHVybiBFUlJPUl9NQUxGT1JNRUQ7CisgICAgICAgIH0KKyAgICAgICAgdW5zaWduZWQgYm94U2FtcGxlUmF0ZSA9IHNhbXBsZVJhdGVUYWJsZVtmc2NvZF07CisgICAgICAgIGlmIChib3hTYW1wbGVSYXRlICE9IHNhbXBsZVJhdGUpIHsKKyAgICAgICAgICAgIEFMT0dFKCJzYW1wbGUgcmF0ZSBtaXNtYXRjaDogYm94U2FtcGxlUmF0ZSA9ICVkLCBzYW1wbGVSYXRlID0gJWQiLAorICAgICAgICAgICAgICAgIGJveFNhbXBsZVJhdGUsIHNhbXBsZVJhdGUpOworICAgICAgICAgICAgZGVsZXRlW10gY2h1bms7CisgICAgICAgICAgICByZXR1cm4gRVJST1JfTUFMRk9STUVEOworICAgICAgICB9CisKKyAgICAgICAgdW5zaWduZWQgYnNpZCA9IGJyLmdldEJpdHMoNSk7CisgICAgICAgIGlmIChic2lkIDwgOCkgeworICAgICAgICAgICAgQUxPR1coIkluY29ycmVjdCBic2lkIGluIEVBQzMgaGVhZGVyLiBQb3NzaWJseSBBQy0zPyIpOworICAgICAgICAgICAgZGVsZXRlW10gY2h1bms7CisgICAgICAgICAgICByZXR1cm4gRVJST1JfTUFMRk9STUVEOworICAgICAgICB9CisKKyAgICAgICAgLy8gc2tpcAorICAgICAgICBici5za2lwQml0cygyKTsKKyAgICAgICAgdW5zaWduZWQgYnNtb2QgPSBici5nZXRCaXRzKDMpOworICAgICAgICB1bnNpZ25lZCBhY21vZCA9IGJyLmdldEJpdHMoMyk7CisgICAgICAgIHVuc2lnbmVkIGxmZW9uID0gYnIuZ2V0Qml0cygxKTsKKyAgICAgICAgLy8gd2UgY3VycmVudGx5IG9ubHkgc3VwcG9ydCB0aGUgZmlyc3Qgc3RyZWFtCisgICAgICAgIGlmIChpID09IDApCisgICAgICAgICAgICBjaGFubmVsQ291bnQgPSBjaGFubmVsQ291bnRUYWJsZVthY21vZF0gKyBsZmVvbjsKKyAgICAgICAgQUxPR1YoImJzbW9kID0gJWQsIGFjbW9kID0gJWQsIGxmZW9uID0gJWQiLCBic21vZCwgYWNtb2QsIGxmZW9uKTsKKworICAgICAgICBici5za2lwQml0cygzKTsKKyAgICAgICAgdW5zaWduZWQgbnVtX2RlcF9zdWIgPSBici5nZXRCaXRzKDQpOworICAgICAgICBBTE9HVigiRUFDMyBkZXBlbmRhbnQgc3Vic3RyZWFtcyA9ICVkIiwgbnVtX2RlcF9zdWIpOworICAgICAgICBpZiAobnVtX2RlcF9zdWIgIT0gMCkgeworICAgICAgICAgICAgaWYgKGJyLm51bUJpdHNMZWZ0KCkgPCA5KSB7CisgICAgICAgICAgICAgICAgZGVsZXRlW10gY2h1bms7CisgICAgICAgICAgICAgICAgcmV0dXJuIEVSUk9SX01BTEZPUk1FRDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHN0YXRpYyBjb25zdCBjaGFyKiBjaGFuX2xvY190YmxbXSA9IHsgIkxjL1JjIiwiTHJzL1JycyIsIkNzIiwiVHMiLCJMc2QvUnNkIiwKKyAgICAgICAgICAgICAgICAiTHcvUnciLCJMdmgvUnZoIiwiQ3ZoIiwiTGZlMiIgfTsKKyAgICAgICAgICAgIHVuc2lnbmVkIGNoYW5fbG9jID0gYnIuZ2V0Qml0cyg5KTsKKyAgICAgICAgICAgIHVuc2lnbmVkIG1hc2sgPSAxOworICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBqID0gMDsgaiA8IDk7IGorKywgbWFzayA8PD0gMSkgeworICAgICAgICAgICAgICAgIGlmICgoY2hhbl9sb2MgJiBtYXNrKSAhPSAwKSB7CisgICAgICAgICAgICAgICAgICAgIC8vIHdlIGN1cnJlbnRseSBvbmx5IHN1cHBvcnQgdGhlIGZpcnN0IHN0cmVhbQorICAgICAgICAgICAgICAgICAgICBpZiAoaSA9PSAwKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBjaGFubmVsQ291bnQrKzsKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIHRoZXNlIGFyZSAyIGNoYW5uZWxzIGluIHRoZSBtYXNrCisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaiA9PSAwIHx8IGogPT0gMSB8fCBqID09IDQgfHwgaiA9PSA1IHx8IGogPT0gNikgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYW5uZWxDb3VudCsrOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIEFMT0dWKCIgJXMiLCBjaGFuX2xvY190Ymxbal0pOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGlmIChici5udW1CaXRzTGVmdCgpID09IDApIHsKKyAgICAgICAgICAgICAgICBkZWxldGVbXSBjaHVuazsKKyAgICAgICAgICAgICAgICByZXR1cm4gRVJST1JfTUFMRk9STUVEOworICAgICAgICAgICAgfQorICAgICAgICAgICAgYnIuc2tpcEJpdHMoMSk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBpZiAoYnIubnVtQml0c0xlZnQoKSAhPSAwKSB7CisgICAgICAgIGlmIChici5udW1CaXRzTGVmdCgpIDwgOCkgeworICAgICAgICAgICAgZGVsZXRlW10gY2h1bms7CisgICAgICAgICAgICByZXR1cm4gRVJST1JfTUFMRk9STUVEOworICAgICAgICB9CisgICAgICAgIHVuc2lnbmVkIG1hc2sgPSBici5nZXRCaXRzKDgpOworICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgODsgaSsrKSB7CisgICAgICAgICAgICBpZiAoKCgweDEgPDwgaSkgJiYgbWFzaykgPT0gMCkKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKworICAgICAgICAgICAgaWYgKGJyLm51bUJpdHNMZWZ0KCkgPCA4KSB7CisgICAgICAgICAgICAgICAgZGVsZXRlW10gY2h1bms7CisgICAgICAgICAgICAgICAgcmV0dXJuIEVSUk9SX01BTEZPUk1FRDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHN3aXRjaCAoaSkgeworICAgICAgICAgICAgICAgIGNhc2UgMDogeworICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjb21wbGV4aXR5ID0gYnIuZ2V0Qml0cyg4KTsKKyAgICAgICAgICAgICAgICAgICAgQUxPR1YoIkZvdW5kIGEgSk9DIHN0cmVhbSB3aXRoIGNvbXBsZXhpdHkgPSAlZCIsIGNvbXBsZXhpdHkpOworICAgICAgICAgICAgICAgIH1icmVhazsKKyAgICAgICAgICAgICAgICBkZWZhdWx0OiB7CisgICAgICAgICAgICAgICAgICAgIGJyLnNraXBCaXRzKDgpOworICAgICAgICAgICAgICAgIH1icmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKyAgICBBTWVkaWFGb3JtYXRfc2V0U3RyaW5nKG1MYXN0VHJhY2stPm1ldGEsIEFNRURJQUZPUk1BVF9LRVlfTUlNRSwgTUVESUFfTUlNRVRZUEVfQVVESU9fRUFDMyk7CisgICAgQU1lZGlhRm9ybWF0X3NldEludDMyKG1MYXN0VHJhY2stPm1ldGEsIEFNRURJQUZPUk1BVF9LRVlfQ0hBTk5FTF9DT1VOVCwgY2hhbm5lbENvdW50KTsKKyAgICBBTWVkaWFGb3JtYXRfc2V0SW50MzIobUxhc3RUcmFjay0+bWV0YSwgQU1FRElBRk9STUFUX0tFWV9TQU1QTEVfUkFURSwgc2FtcGxlUmF0ZSk7CisKKyAgICBkZWxldGVbXSBjaHVuazsKKyAgICByZXR1cm4gT0s7Cit9CisKK3N0YXR1c190IE1QRUc0RXh0cmFjdG9yOjpwYXJzZUFDM1NwZWNpZmljQm94KG9mZjY0X3Qgb2Zmc2V0KSB7CisgICAgaWYgKG1MYXN0VHJhY2sgPT0gTlVMTCkgeworICAgICAgICByZXR1cm4gRVJST1JfTUFMRk9STUVEOworICAgIH0KKworICAgIHVpbnQxNl90IHNhbXBsZVJhdGUsIGNoYW5uZWxzOworICAgIHN0YXR1c190IHN0YXR1czsKKyAgICBpZiAoKHN0YXR1cyA9IHBhcnNlQ2hhbm5lbENvdW50U2FtcGxlUmF0ZSgmb2Zmc2V0LCAmY2hhbm5lbHMsICZzYW1wbGVSYXRlKSkgIT0gT0spIHsKKyAgICAgICAgcmV0dXJuIHN0YXR1czsKKyAgICB9CiAgICAgdWludDMyX3Qgc2l6ZTsKICAgICAvLyArIDQtYnl0ZSBzaXplCiAgICAgLy8gKyA0LWJ5dGUgdHlwZQpAQCAtMjcwNSwxMiArMzA1Myw5IEBACiAgICAgdW5zaWduZWQgbGZlb24gPSBici5nZXRCaXRzKDEpOwogICAgIHVuc2lnbmVkIGNoYW5uZWxDb3VudCA9IGNoYW5uZWxDb3VudFRhYmxlW2FjbW9kXSArIGxmZW9uOwogCi0gICAgaWYgKG1MYXN0VHJhY2sgPT0gTlVMTCkgewotICAgICAgICByZXR1cm4gRVJST1JfTUFMRk9STUVEOwotICAgIH0KLSAgICBtTGFzdFRyYWNrLT5tZXRhLnNldENTdHJpbmcoa0tleU1JTUVUeXBlLCBNRURJQV9NSU1FVFlQRV9BVURJT19BQzMpOwotICAgIG1MYXN0VHJhY2stPm1ldGEuc2V0SW50MzIoa0tleUNoYW5uZWxDb3VudCwgY2hhbm5lbENvdW50KTsKLSAgICBtTGFzdFRyYWNrLT5tZXRhLnNldEludDMyKGtLZXlTYW1wbGVSYXRlLCBzYW1wbGVSYXRlKTsKKyAgICBBTWVkaWFGb3JtYXRfc2V0U3RyaW5nKG1MYXN0VHJhY2stPm1ldGEsIEFNRURJQUZPUk1BVF9LRVlfTUlNRSwgTUVESUFfTUlNRVRZUEVfQVVESU9fQUMzKTsKKyAgICBBTWVkaWFGb3JtYXRfc2V0SW50MzIobUxhc3RUcmFjay0+bWV0YSwgQU1FRElBRk9STUFUX0tFWV9DSEFOTkVMX0NPVU5ULCBjaGFubmVsQ291bnQpOworICAgIEFNZWRpYUZvcm1hdF9zZXRJbnQzMihtTGFzdFRyYWNrLT5tZXRhLCBBTUVESUFGT1JNQVRfS0VZX1NBTVBMRV9SQVRFLCBzYW1wbGVSYXRlKTsKICAgICByZXR1cm4gT0s7CiB9CiAKQEAgLTI4MzAsOCArMzE3NSw5IEBACiAgICAgICAgIHJldHVybiBFUlJPUl9NQUxGT1JNRUQ7CiAKICAgICBpbnQ2NF90IG1ldGFEdXJhdGlvbjsKLSAgICBpZiAoIW1MYXN0VHJhY2stPm1ldGEuZmluZEludDY0KGtLZXlEdXJhdGlvbiwgJm1ldGFEdXJhdGlvbikgfHwgbWV0YUR1cmF0aW9uID09IDApIHsKLSAgICAgICAgbUxhc3RUcmFjay0+bWV0YS5zZXRJbnQ2NChrS2V5RHVyYXRpb24sIHNpZHhEdXJhdGlvbik7CisgICAgaWYgKCFBTWVkaWFGb3JtYXRfZ2V0SW50NjQobUxhc3RUcmFjay0+bWV0YSwKKyAgICAgICAgICAgICAgICBBTUVESUFGT1JNQVRfS0VZX0RVUkFUSU9OLCAmbWV0YUR1cmF0aW9uKSB8fCBtZXRhRHVyYXRpb24gPT0gMCkgeworICAgICAgICBBTWVkaWFGb3JtYXRfc2V0SW50NjQobUxhc3RUcmFjay0+bWV0YSwgQU1FRElBRk9STUFUX0tFWV9EVVJBVElPTiwgc2lkeER1cmF0aW9uKTsKICAgICB9CiAgICAgcmV0dXJuIE9LOwogfQpAQCAtMjkyOSw3ICszMjc1LDcgQEAKICAgICAgICAgICAgIHJldHVybiBFUlJPUl9NQUxGT1JNRUQ7CiAgICAgICAgIH0KICAgICAgICAgaWYgKCFzdHJjYXNlY21wKG1NZXRhS2V5TWFwW2luZGV4XS5jX3N0cigpLCAiY29tLmFuZHJvaWQuY2FwdHVyZS5mcHMiKSkgewotICAgICAgICAgICAgbUZpbGVNZXRhRGF0YS5zZXRGbG9hdChrS2V5Q2FwdHVyZUZyYW1lcmF0ZSwgKihmbG9hdCAqKSZ2YWwpOworICAgICAgICAgICAgQU1lZGlhRm9ybWF0X3NldEZsb2F0KG1GaWxlTWV0YURhdGEsIEFNRURJQUZPUk1BVF9LRVlfQ0FQVFVSRV9SQVRFLCAqKGZsb2F0ICopJnZhbCk7CiAgICAgICAgIH0KICAgICB9IGVsc2UgaWYgKGRhdGFUeXBlID09IDY3ICYmIGRhdGFTaXplID49IDQpIHsKICAgICAgICAgLy8gQkUgc2lnbmVkIGludDMyCkBAIC0yOTM4LDcgKzMyODQsOCBAQAogICAgICAgICAgICAgcmV0dXJuIEVSUk9SX01BTEZPUk1FRDsKICAgICAgICAgfQogICAgICAgICBpZiAoIXN0cmNhc2VjbXAobU1ldGFLZXlNYXBbaW5kZXhdLmNfc3RyKCksICJjb20uYW5kcm9pZC52aWRlby50ZW1wb3JhbF9sYXllcnNfY291bnQiKSkgewotICAgICAgICAgICAgbUZpbGVNZXRhRGF0YS5zZXRJbnQzMihrS2V5VGVtcG9yYWxMYXllckNvdW50LCB2YWwpOworICAgICAgICAgICAgQU1lZGlhRm9ybWF0X3NldEludDMyKG1GaWxlTWV0YURhdGEsCisgICAgICAgICAgICAgICAgICAgIEFNRURJQUZPUk1BVF9LRVlfVEVNUE9SQUxfTEFZRVJfQ09VTlQsIHZhbCk7CiAgICAgICAgIH0KICAgICB9IGVsc2UgewogICAgICAgICAvLyBhZGQgbW9yZSBrZXlzIGlmIG5lZWRlZApAQCAtMjk5Miw3ICszMzM5LDcgQEAKICAgICBpZiAobUxhc3RUcmFjayA9PSBOVUxMKQogICAgICAgICByZXR1cm4gRVJST1JfTUFMRk9STUVEOwogCi0gICAgbUxhc3RUcmFjay0+bWV0YS5zZXRJbnQzMihrS2V5VHJhY2tJRCwgaWQpOworICAgIEFNZWRpYUZvcm1hdF9zZXRJbnQzMihtTGFzdFRyYWNrLT5tZXRhLCBBTUVESUFGT1JNQVRfS0VZX1RSQUNLX0lELCBpZCk7CiAKICAgICBzaXplX3QgbWF0cml4T2Zmc2V0ID0gZHluU2l6ZSArIDE2OwogICAgIGludDMyX3QgYTAwID0gVTMyX0FUKCZidWZmZXJbbWF0cml4T2Zmc2V0XSk7CkBAIC0zMDI4LDE1ICszMzc1LDE1IEBACiAgICAgfQogCiAgICAgaWYgKHJvdGF0aW9uRGVncmVlcyAhPSAwKSB7Ci0gICAgICAgIG1MYXN0VHJhY2stPm1ldGEuc2V0SW50MzIoa0tleVJvdGF0aW9uLCByb3RhdGlvbkRlZ3JlZXMpOworICAgICAgICBBTWVkaWFGb3JtYXRfc2V0SW50MzIobUxhc3RUcmFjay0+bWV0YSwgQU1FRElBRk9STUFUX0tFWV9ST1RBVElPTiwgcm90YXRpb25EZWdyZWVzKTsKICAgICB9CiAKICAgICAvLyBIYW5kbGUgcHJlc2VudGF0aW9uIGRpc3BsYXkgc2l6ZSwgd2hpY2ggY291bGQgYmUgZGlmZmVyZW50Ci0gICAgLy8gZnJvbSB0aGUgaW1hZ2Ugc2l6ZSBpbmRpY2F0ZWQgYnkga0tleVdpZHRoIGFuZCBrS2V5SGVpZ2h0LgorICAgIC8vIGZyb20gdGhlIGltYWdlIHNpemUgaW5kaWNhdGVkIGJ5IEFNRURJQUZPUk1BVF9LRVlfV0lEVEggYW5kIEFNRURJQUZPUk1BVF9LRVlfSEVJR0hULgogICAgIHVpbnQzMl90IHdpZHRoID0gVTMyX0FUKCZidWZmZXJbZHluU2l6ZSArIDUyXSk7CiAgICAgdWludDMyX3QgaGVpZ2h0ID0gVTMyX0FUKCZidWZmZXJbZHluU2l6ZSArIDU2XSk7Ci0gICAgbUxhc3RUcmFjay0+bWV0YS5zZXRJbnQzMihrS2V5RGlzcGxheVdpZHRoLCB3aWR0aCA+PiAxNik7Ci0gICAgbUxhc3RUcmFjay0+bWV0YS5zZXRJbnQzMihrS2V5RGlzcGxheUhlaWdodCwgaGVpZ2h0ID4+IDE2KTsKKyAgICBBTWVkaWFGb3JtYXRfc2V0SW50MzIobUxhc3RUcmFjay0+bWV0YSwgQU1FRElBRk9STUFUX0tFWV9ESVNQTEFZX1dJRFRILCB3aWR0aCA+PiAxNik7CisgICAgQU1lZGlhRm9ybWF0X3NldEludDMyKG1MYXN0VHJhY2stPm1ldGEsIEFNRURJQUZPUk1BVF9LRVlfRElTUExBWV9IRUlHSFQsIGhlaWdodCA+PiAxNik7CiAKICAgICByZXR1cm4gT0s7CiB9CkBAIC0zMDY0LDU0ICszNDExLDUwIEBACiAKICAgICB1aW50MzJfdCBmbGFncyA9IFUzMl9BVChidWZmZXIpOwogCi0gICAgdWludDMyX3QgbWV0YWRhdGFLZXkgPSAwOworICAgIGNvbnN0IGNoYXIgKm1ldGFkYXRhS2V5ID0gbnVsbHB0cjsKICAgICBjaGFyIGNodW5rWzVdOwogICAgIE1ha2VGb3VyQ0NTdHJpbmcobVBhdGhbNF0sIGNodW5rKTsKICAgICBBTE9HVigibWV0YTogJXMgQCAlbGxkIiwgY2h1bmssIChsb25nIGxvbmcpb2Zmc2V0KTsKICAgICBzd2l0Y2ggKChpbnQzMl90KW1QYXRoWzRdKSB7CiAgICAgICAgIGNhc2UgRk9VUkNDKDB4YTksICdhJywgJ2wnLCAnYicpOgogICAgICAgICB7Ci0gICAgICAgICAgICBtZXRhZGF0YUtleSA9IGtLZXlBbGJ1bTsKKyAgICAgICAgICAgIG1ldGFkYXRhS2V5ID0gImFsYnVtIjsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgIGNhc2UgRk9VUkNDKDB4YTksICdBJywgJ1InLCAnVCcpOgogICAgICAgICB7Ci0gICAgICAgICAgICBtZXRhZGF0YUtleSA9IGtLZXlBcnRpc3Q7CisgICAgICAgICAgICBtZXRhZGF0YUtleSA9ICJhcnRpc3QiOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgY2FzZSBGT1VSQ0MoJ2EnLCAnQScsICdSJywgJ1QnKToKICAgICAgICAgewotICAgICAgICAgICAgbWV0YWRhdGFLZXkgPSBrS2V5QWxidW1BcnRpc3Q7CisgICAgICAgICAgICBtZXRhZGF0YUtleSA9ICJhbGJ1bWFydGlzdCI7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICBjYXNlIEZPVVJDQygweGE5LCAnZCcsICdhJywgJ3knKToKICAgICAgICAgewotICAgICAgICAgICAgbWV0YWRhdGFLZXkgPSBrS2V5WWVhcjsKKyAgICAgICAgICAgIG1ldGFkYXRhS2V5ID0gInllYXIiOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgY2FzZSBGT1VSQ0MoMHhhOSwgJ24nLCAnYScsICdtJyk6CiAgICAgICAgIHsKLSAgICAgICAgICAgIG1ldGFkYXRhS2V5ID0ga0tleVRpdGxlOworICAgICAgICAgICAgbWV0YWRhdGFLZXkgPSAidGl0bGUiOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgY2FzZSBGT1VSQ0MoMHhhOSwgJ3cnLCAncicsICd0Jyk6CiAgICAgICAgIHsKLSAgICAgICAgICAgIG1ldGFkYXRhS2V5ID0ga0tleVdyaXRlcjsKKyAgICAgICAgICAgIG1ldGFkYXRhS2V5ID0gIndyaXRlciI7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICBjYXNlIEZPVVJDQygnYycsICdvJywgJ3YnLCAncicpOgogICAgICAgICB7Ci0gICAgICAgICAgICBtZXRhZGF0YUtleSA9IGtLZXlBbGJ1bUFydDsKKyAgICAgICAgICAgIG1ldGFkYXRhS2V5ID0gImFsYnVtYXJ0IjsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgIGNhc2UgRk9VUkNDKCdnJywgJ24nLCAncicsICdlJyk6Ci0gICAgICAgIHsKLSAgICAgICAgICAgIG1ldGFkYXRhS2V5ID0ga0tleUdlbnJlOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KICAgICAgICAgY2FzZSBGT1VSQ0MoMHhhOSwgJ2cnLCAnZScsICduJyk6CiAgICAgICAgIHsKLSAgICAgICAgICAgIG1ldGFkYXRhS2V5ID0ga0tleUdlbnJlOworICAgICAgICAgICAgbWV0YWRhdGFLZXkgPSAiZ2VucmUiOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgY2FzZSBGT1VSQ0MoJ2MnLCAncCcsICdpJywgJ2wnKToKQEAgLTMxMjEsNyArMzQ2NCw3IEBACiAgICAgICAgICAgICAgICAgc3ByaW50Zih0bXAsICIlZCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAoaW50KWJ1ZmZlcltzaXplIC0gMV0pOwogCi0gICAgICAgICAgICAgICAgbUZpbGVNZXRhRGF0YS5zZXRDU3RyaW5nKGtLZXlDb21waWxhdGlvbiwgdG1wKTsKKyAgICAgICAgICAgICAgICBBTWVkaWFGb3JtYXRfc2V0U3RyaW5nKG1GaWxlTWV0YURhdGEsIEFNRURJQUZPUk1BVF9LRVlfQ09NUElMQVRJT04sIHRtcCk7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQpAQCAtMzEzMyw3ICszNDc2LDcgQEAKICAgICAgICAgICAgICAgICB1aW50MTZfdCogcFRvdGFsVHJhY2tzID0gKHVpbnQxNl90KikmYnVmZmVyWzEyXTsKICAgICAgICAgICAgICAgICBzcHJpbnRmKHRtcCwgIiVkLyVkIiwgbnRvaHMoKnBUcmFjayksIG50b2hzKCpwVG90YWxUcmFja3MpKTsKIAotICAgICAgICAgICAgICAgIG1GaWxlTWV0YURhdGEuc2V0Q1N0cmluZyhrS2V5Q0RUcmFja051bWJlciwgdG1wKTsKKyAgICAgICAgICAgICAgICBBTWVkaWFGb3JtYXRfc2V0U3RyaW5nKG1GaWxlTWV0YURhdGEsIEFNRURJQUZPUk1BVF9LRVlfQ0RUUkFDS05VTUJFUiwgdG1wKTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CkBAIC0zMTQ1LDcgKzM0ODgsNyBAQAogICAgICAgICAgICAgICAgIHVpbnQxNl90KiBwVG90YWxEaXNjcyA9ICh1aW50MTZfdCopJmJ1ZmZlclsxMl07CiAgICAgICAgICAgICAgICAgc3ByaW50Zih0bXAsICIlZC8lZCIsIG50b2hzKCpwRGlzYyksIG50b2hzKCpwVG90YWxEaXNjcykpOwogCi0gICAgICAgICAgICAgICAgbUZpbGVNZXRhRGF0YS5zZXRDU3RyaW5nKGtLZXlEaXNjTnVtYmVyLCB0bXApOworICAgICAgICAgICAgICAgIEFNZWRpYUZvcm1hdF9zZXRTdHJpbmcobUZpbGVNZXRhRGF0YSwgQU1FRElBRk9STUFUX0tFWV9ESVNDTlVNQkVSLCB0bXApOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KQEAgLTMxODksOCArMzUzMiwxMCBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBFUlJPUl9NQUxGT1JNRUQ7CiAgICAgICAgICAgICAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgICAgICAgICAgICAgIG1MYXN0VHJhY2stPm1ldGEuc2V0SW50MzIoa0tleUVuY29kZXJEZWxheSwgZGVsYXkpOwotICAgICAgICAgICAgICAgICAgICAgICAgbUxhc3RUcmFjay0+bWV0YS5zZXRJbnQzMihrS2V5RW5jb2RlclBhZGRpbmcsIHBhZGRpbmcpOworICAgICAgICAgICAgICAgICAgICAgICAgQU1lZGlhRm9ybWF0X3NldEludDMyKG1MYXN0VHJhY2stPm1ldGEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFNRURJQUZPUk1BVF9LRVlfRU5DT0RFUl9ERUxBWSwgZGVsYXkpOworICAgICAgICAgICAgICAgICAgICAgICAgQU1lZGlhRm9ybWF0X3NldEludDMyKG1MYXN0VHJhY2stPm1ldGEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFNRURJQUZPUk1BVF9LRVlfRU5DT0RFUl9QQURESU5HLCBwYWRkaW5nKTsKICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIH0KIApAQCAtMzIwNSwxMiArMzU1MCwxNCBAQAogICAgICAgICAgICAgYnJlYWs7CiAgICAgfQogCi0gICAgaWYgKHNpemUgPj0gOCAmJiBtZXRhZGF0YUtleSAmJiAhbUZpbGVNZXRhRGF0YS5oYXNEYXRhKG1ldGFkYXRhS2V5KSkgewotICAgICAgICBpZiAobWV0YWRhdGFLZXkgPT0ga0tleUFsYnVtQXJ0KSB7Ci0gICAgICAgICAgICBtRmlsZU1ldGFEYXRhLnNldERhdGEoCi0gICAgICAgICAgICAgICAgICAgIGtLZXlBbGJ1bUFydCwgTWV0YURhdGE6OlRZUEVfTk9ORSwKKyAgICB2b2lkICp0bXBEYXRhOworICAgIHNpemVfdCB0bXBEYXRhU2l6ZTsKKyAgICBpZiAoc2l6ZSA+PSA4ICYmIG1ldGFkYXRhS2V5ICYmCisgICAgICAgICAgICAhQU1lZGlhRm9ybWF0X2dldEJ1ZmZlcihtRmlsZU1ldGFEYXRhLCBtZXRhZGF0YUtleSwgJnRtcERhdGEsICZ0bXBEYXRhU2l6ZSkpIHsKKyAgICAgICAgaWYgKCFzdHJjbXAobWV0YWRhdGFLZXksICJhbGJ1bWFydCIpKSB7CisgICAgICAgICAgICBBTWVkaWFGb3JtYXRfc2V0QnVmZmVyKG1GaWxlTWV0YURhdGEsIG1ldGFkYXRhS2V5LAogICAgICAgICAgICAgICAgICAgICBidWZmZXIgKyA4LCBzaXplIC0gOCk7Ci0gICAgICAgIH0gZWxzZSBpZiAobWV0YWRhdGFLZXkgPT0ga0tleUdlbnJlKSB7CisgICAgICAgIH0gZWxzZSBpZiAoIXN0cmNtcChtZXRhZGF0YUtleSwgImdlbnJlIikpIHsKICAgICAgICAgICAgIGlmIChmbGFncyA9PSAwKSB7CiAgICAgICAgICAgICAgICAgLy8gdWludDhfdCBnZW5yZSBjb2RlLCBpVHVuZXMgZ2VucmUgY29kZXMgYXJlCiAgICAgICAgICAgICAgICAgLy8gdGhlIHN0YW5kYXJkIGlkMyBjb2RlcywgZXhjZXB0IHRoZXkgc3RhcnQKQEAgLTMyMjQsMTggKzM1NzEsMTggQEAKICAgICAgICAgICAgICAgICBjaGFyIGdlbnJlWzEwXTsKICAgICAgICAgICAgICAgICBzcHJpbnRmKGdlbnJlLCAiJWQiLCBnZW5yZWNvZGUpOwogCi0gICAgICAgICAgICAgICAgbUZpbGVNZXRhRGF0YS5zZXRDU3RyaW5nKG1ldGFkYXRhS2V5LCBnZW5yZSk7CisgICAgICAgICAgICAgICAgQU1lZGlhRm9ybWF0X3NldFN0cmluZyhtRmlsZU1ldGFEYXRhLCBtZXRhZGF0YUtleSwgZ2VucmUpOwogICAgICAgICAgICAgfSBlbHNlIGlmIChmbGFncyA9PSAxKSB7CiAgICAgICAgICAgICAgICAgLy8gY3VzdG9tIGdlbnJlIHN0cmluZwogICAgICAgICAgICAgICAgIGJ1ZmZlcltzaXplXSA9ICdcMCc7CiAKLSAgICAgICAgICAgICAgICBtRmlsZU1ldGFEYXRhLnNldENTdHJpbmcoCisgICAgICAgICAgICAgICAgQU1lZGlhRm9ybWF0X3NldFN0cmluZyhtRmlsZU1ldGFEYXRhLCAKICAgICAgICAgICAgICAgICAgICAgICAgIG1ldGFkYXRhS2V5LCAoY29uc3QgY2hhciAqKWJ1ZmZlciArIDgpOwogICAgICAgICAgICAgfQogICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgYnVmZmVyW3NpemVdID0gJ1wwJzsKIAotICAgICAgICAgICAgbUZpbGVNZXRhRGF0YS5zZXRDU3RyaW5nKAorICAgICAgICAgICAgQU1lZGlhRm9ybWF0X3NldFN0cmluZyhtRmlsZU1ldGFEYXRhLCAKICAgICAgICAgICAgICAgICAgICAgbWV0YWRhdGFLZXksIChjb25zdCBjaGFyICopYnVmZmVyICsgOCk7CiAgICAgICAgIH0KICAgICB9CkBAIC0zMjY1LDIxICszNjEyLDMxIEBACiAgICAgaW50MzJfdCB0eXBlID0gVTMyX0FUKCZidWZmZXJbMF0pOwogICAgIGlmICgodHlwZSA9PSBGT1VSQ0MoJ24nLCAnYycsICdsJywgJ3gnKSAmJiBzaXplID49IDExKQogICAgICAgICAgICAgfHwgKHR5cGUgPT0gRk9VUkNDKCduJywgJ2MnLCAnbCcsICdjJykgJiYgc2l6ZSA+PSAxMCkpIHsKLSAgICAgICAgaW50MzJfdCBwcmltYXJpZXMgPSBVMTZfQVQoJmJ1ZmZlcls0XSk7Ci0gICAgICAgIGludDMyX3QgdHJhbnNmZXIgPSBVMTZfQVQoJmJ1ZmZlcls2XSk7Ci0gICAgICAgIGludDMyX3QgY29lZmZzID0gVTE2X0FUKCZidWZmZXJbOF0pOwotICAgICAgICBib29sIGZ1bGxSYW5nZSA9ICh0eXBlID09IEZPVVJDQygnbicsICdjJywgJ2wnLCAneCcpKSAmJiAoYnVmZmVyWzEwXSAmIDEyOCk7Ci0KLSAgICAgICAgQ29sb3JBc3BlY3RzIGFzcGVjdHM7Ci0gICAgICAgIENvbG9yVXRpbHM6OmNvbnZlcnRJc29Db2xvckFzcGVjdHNUb0NvZGVjQXNwZWN0cygKLSAgICAgICAgICAgICAgICBwcmltYXJpZXMsIHRyYW5zZmVyLCBjb2VmZnMsIGZ1bGxSYW5nZSwgYXNwZWN0cyk7Ci0KICAgICAgICAgLy8gb25seSBzdG9yZSB0aGUgZmlyc3QgY29sb3Igc3BlY2lmaWNhdGlvbgotICAgICAgICBpZiAoIW1MYXN0VHJhY2stPm1ldGEuaGFzRGF0YShrS2V5Q29sb3JQcmltYXJpZXMpKSB7Ci0gICAgICAgICAgICBtTGFzdFRyYWNrLT5tZXRhLnNldEludDMyKGtLZXlDb2xvclByaW1hcmllcywgYXNwZWN0cy5tUHJpbWFyaWVzKTsKLSAgICAgICAgICAgIG1MYXN0VHJhY2stPm1ldGEuc2V0SW50MzIoa0tleVRyYW5zZmVyRnVuY3Rpb24sIGFzcGVjdHMubVRyYW5zZmVyKTsKLSAgICAgICAgICAgIG1MYXN0VHJhY2stPm1ldGEuc2V0SW50MzIoa0tleUNvbG9yTWF0cml4LCBhc3BlY3RzLm1NYXRyaXhDb2VmZnMpOwotICAgICAgICAgICAgbUxhc3RUcmFjay0+bWV0YS5zZXRJbnQzMihrS2V5Q29sb3JSYW5nZSwgYXNwZWN0cy5tUmFuZ2UpOworICAgICAgICBpbnQzMl90IGV4aXN0aW5nQ29sb3I7CisgICAgICAgIGlmICghQU1lZGlhRm9ybWF0X2dldEludDMyKG1MYXN0VHJhY2stPm1ldGEsCisgICAgICAgICAgICAgICAgQU1FRElBRk9STUFUX0tFWV9DT0xPUl9SQU5HRSwgJmV4aXN0aW5nQ29sb3IpKSB7CisgICAgICAgICAgICBpbnQzMl90IHByaW1hcmllcyA9IFUxNl9BVCgmYnVmZmVyWzRdKTsKKyAgICAgICAgICAgIGludDMyX3QgaXNvdHJhbnNmZXIgPSBVMTZfQVQoJmJ1ZmZlcls2XSk7CisgICAgICAgICAgICBpbnQzMl90IGNvZWZmcyA9IFUxNl9BVCgmYnVmZmVyWzhdKTsKKyAgICAgICAgICAgIGJvb2wgZnVsbFJhbmdlID0gKHR5cGUgPT0gRk9VUkNDKCduJywgJ2MnLCAnbCcsICd4JykpICYmIChidWZmZXJbMTBdICYgMTI4KTsKKworICAgICAgICAgICAgaW50MzJfdCByYW5nZSA9IDA7CisgICAgICAgICAgICBpbnQzMl90IHN0YW5kYXJkID0gMDsKKyAgICAgICAgICAgIGludDMyX3QgdHJhbnNmZXIgPSAwOworICAgICAgICAgICAgQ29sb3JVdGlsczo6Y29udmVydElzb0NvbG9yQXNwZWN0c1RvUGxhdGZvcm1Bc3BlY3RzKAorICAgICAgICAgICAgICAgICAgICBwcmltYXJpZXMsIGlzb3RyYW5zZmVyLCBjb2VmZnMsIGZ1bGxSYW5nZSwKKyAgICAgICAgICAgICAgICAgICAgJnJhbmdlLCAmc3RhbmRhcmQsICZ0cmFuc2Zlcik7CisKKyAgICAgICAgICAgIGlmIChyYW5nZSAhPSAwKSB7CisgICAgICAgICAgICAgICAgQU1lZGlhRm9ybWF0X3NldEludDMyKG1MYXN0VHJhY2stPm1ldGEsIEFNRURJQUZPUk1BVF9LRVlfQ09MT1JfUkFOR0UsIHJhbmdlKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChzdGFuZGFyZCAhPSAwKSB7CisgICAgICAgICAgICAgICAgQU1lZGlhRm9ybWF0X3NldEludDMyKG1MYXN0VHJhY2stPm1ldGEsIEFNRURJQUZPUk1BVF9LRVlfQ09MT1JfU1RBTkRBUkQsIHN0YW5kYXJkKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmICh0cmFuc2ZlciAhPSAwKSB7CisgICAgICAgICAgICAgICAgQU1lZGlhRm9ybWF0X3NldEludDMyKG1MYXN0VHJhY2stPm1ldGEsIEFNRURJQUZPUk1BVF9LRVlfQ09MT1JfVFJBTlNGRVIsIHRyYW5zZmVyKTsKKyAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgIH0KIApAQCAtMzMwNiwyNiArMzY2MywyNiBAQAogICAgICAgICByZXR1cm4gRVJST1JfSU87CiAgICAgfQogCi0gICAgdWludDMyX3QgbWV0YWRhdGFLZXkgPSAwOworICAgIGNvbnN0IGNoYXIgKm1ldGFkYXRhS2V5ID0gbnVsbHB0cjsKICAgICBzd2l0Y2ggKG1QYXRoW2RlcHRoXSkgewogICAgICAgICBjYXNlIEZPVVJDQygndCcsICdpJywgJ3QnLCAnbCcpOgogICAgICAgICB7Ci0gICAgICAgICAgICBtZXRhZGF0YUtleSA9IGtLZXlUaXRsZTsKKyAgICAgICAgICAgIG1ldGFkYXRhS2V5ID0gInRpdGxlIjsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgIGNhc2UgRk9VUkNDKCdwJywgJ2UnLCAncicsICdmJyk6CiAgICAgICAgIHsKLSAgICAgICAgICAgIG1ldGFkYXRhS2V5ID0ga0tleUFydGlzdDsKKyAgICAgICAgICAgIG1ldGFkYXRhS2V5ID0gImFydGlzdCI7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICBjYXNlIEZPVVJDQygnYScsICd1JywgJ3QnLCAnaCcpOgogICAgICAgICB7Ci0gICAgICAgICAgICBtZXRhZGF0YUtleSA9IGtLZXlXcml0ZXI7CisgICAgICAgICAgICBtZXRhZGF0YUtleSA9ICJ3cml0ZXIiOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgY2FzZSBGT1VSQ0MoJ2cnLCAnbicsICdyJywgJ2UnKToKICAgICAgICAgewotICAgICAgICAgICAgbWV0YWRhdGFLZXkgPSBrS2V5R2VucmU7CisgICAgICAgICAgICBtZXRhZGF0YUtleSA9ICJnZW5yZSI7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICBjYXNlIEZPVVJDQygnYScsICdsJywgJ2InLCAnbScpOgpAQCAtMzMzNCwxMCArMzY5MSwxMCBAQAogICAgICAgICAgICAgICBjaGFyIHRtcFs0XTsKICAgICAgICAgICAgICAgc3ByaW50Zih0bXAsICIldSIsIGJ1ZmZlcltzaXplIC0gMV0pOwogCi0gICAgICAgICAgICAgIG1GaWxlTWV0YURhdGEuc2V0Q1N0cmluZyhrS2V5Q0RUcmFja051bWJlciwgdG1wKTsKKyAgICAgICAgICAgICAgQU1lZGlhRm9ybWF0X3NldFN0cmluZyhtRmlsZU1ldGFEYXRhLCBBTUVESUFGT1JNQVRfS0VZX0NEVFJBQ0tOVU1CRVIsIHRtcCk7CiAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgIG1ldGFkYXRhS2V5ID0ga0tleUFsYnVtOworICAgICAgICAgICAgbWV0YWRhdGFLZXkgPSAiYWxidW0iOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgY2FzZSBGT1VSQ0MoJ3knLCAncicsICdyJywgJ2MnKToKQEAgLTMzNTUsNyArMzcxMiw3IEBACiAgICAgICAgICAgICBpZiAoeWVhciA8IDEwMDAwKSB7CiAgICAgICAgICAgICAgICAgc3ByaW50Zih0bXAsICIldSIsIHllYXIpOwogCi0gICAgICAgICAgICAgICAgbUZpbGVNZXRhRGF0YS5zZXRDU3RyaW5nKGtLZXlZZWFyLCB0bXApOworICAgICAgICAgICAgICAgIEFNZWRpYUZvcm1hdF9zZXRTdHJpbmcobUZpbGVNZXRhRGF0YSwgQU1FRElBRk9STUFUX0tFWV9ZRUFSLCB0bXApOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KQEAgLTMzNjQsNyArMzcyMSw3IEBACiAgICAgICAgICAgICBicmVhazsKICAgICB9CiAKLSAgICBpZiAobWV0YWRhdGFLZXkgPiAwKSB7CisgICAgaWYgKG1ldGFkYXRhS2V5KSB7CiAgICAgICAgIGJvb2wgaXNVVEY4ID0gdHJ1ZTsgLy8gQ29tbW9uIGNhc2UKICAgICAgICAgY2hhcjE2X3QgKmZyYW1lZGF0YSA9IE5VTEw7CiAgICAgICAgIGludCBsZW4xNiA9IDA7IC8vIE51bWJlciBvZiBVVEYtMTYgY2hhcmFjdGVycwpAQCAtMzQwMCwxMSArMzc1NywxMSBAQAogCiAgICAgICAgIGlmIChpc1VURjgpIHsKICAgICAgICAgICAgIGJ1ZmZlcltzaXplXSA9IDA7Ci0gICAgICAgICAgICBtRmlsZU1ldGFEYXRhLnNldENTdHJpbmcobWV0YWRhdGFLZXksIChjb25zdCBjaGFyICopYnVmZmVyICsgNik7CisgICAgICAgICAgICBBTWVkaWFGb3JtYXRfc2V0U3RyaW5nKG1GaWxlTWV0YURhdGEsIG1ldGFkYXRhS2V5LCAoY29uc3QgY2hhciAqKWJ1ZmZlciArIDYpOwogICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgLy8gQ29udmVydCBmcm9tIFVURi0xNiBzdHJpbmcgdG8gVVRGLTggc3RyaW5nLgogICAgICAgICAgICAgU3RyaW5nOCB0bXBVVEY4c3RyKGZyYW1lZGF0YSwgbGVuMTYpOwotICAgICAgICAgICAgbUZpbGVNZXRhRGF0YS5zZXRDU3RyaW5nKG1ldGFkYXRhS2V5LCB0bXBVVEY4c3RyLnN0cmluZygpKTsKKyAgICAgICAgICAgIEFNZWRpYUZvcm1hdF9zZXRTdHJpbmcobUZpbGVNZXRhRGF0YSwgbWV0YWRhdGFLZXksIHRtcFVURjhzdHIuc3RyaW5nKCkpOwogICAgICAgICB9CiAgICAgfQogCkBAIC0zNDE5LDI3ICszNzc2LDI5IEBACiAKICAgICBpZiAoaWQzLmlzVmFsaWQoKSkgewogICAgICAgICBzdHJ1Y3QgTWFwIHsKLSAgICAgICAgICAgIGludCBrZXk7CisgICAgICAgICAgICBjb25zdCBjaGFyICprZXk7CiAgICAgICAgICAgICBjb25zdCBjaGFyICp0YWcxOwogICAgICAgICAgICAgY29uc3QgY2hhciAqdGFnMjsKICAgICAgICAgfTsKICAgICAgICAgc3RhdGljIGNvbnN0IE1hcCBrTWFwW10gPSB7Ci0gICAgICAgICAgICB7IGtLZXlBbGJ1bSwgIlRBTEIiLCAiVEFMIiB9LAotICAgICAgICAgICAgeyBrS2V5QXJ0aXN0LCAiVFBFMSIsICJUUDEiIH0sCi0gICAgICAgICAgICB7IGtLZXlBbGJ1bUFydGlzdCwgIlRQRTIiLCAiVFAyIiB9LAotICAgICAgICAgICAgeyBrS2V5Q29tcG9zZXIsICJUQ09NIiwgIlRDTSIgfSwKLSAgICAgICAgICAgIHsga0tleUdlbnJlLCAiVENPTiIsICJUQ08iIH0sCi0gICAgICAgICAgICB7IGtLZXlUaXRsZSwgIlRJVDIiLCAiVFQyIiB9LAotICAgICAgICAgICAgeyBrS2V5WWVhciwgIlRZRSIsICJUWUVSIiB9LAotICAgICAgICAgICAgeyBrS2V5QXV0aG9yLCAiVFhUIiwgIlRFWFQiIH0sCi0gICAgICAgICAgICB7IGtLZXlDRFRyYWNrTnVtYmVyLCAiVFJLIiwgIlRSQ0siIH0sCi0gICAgICAgICAgICB7IGtLZXlEaXNjTnVtYmVyLCAiVFBBIiwgIlRQT1MiIH0sCi0gICAgICAgICAgICB7IGtLZXlDb21waWxhdGlvbiwgIlRDUCIsICJUQ01QIiB9LAorICAgICAgICAgICAgeyBBTUVESUFGT1JNQVRfS0VZX0FMQlVNLCAiVEFMQiIsICJUQUwiIH0sCisgICAgICAgICAgICB7IEFNRURJQUZPUk1BVF9LRVlfQVJUSVNULCAiVFBFMSIsICJUUDEiIH0sCisgICAgICAgICAgICB7IEFNRURJQUZPUk1BVF9LRVlfQUxCVU1BUlRJU1QsICJUUEUyIiwgIlRQMiIgfSwKKyAgICAgICAgICAgIHsgQU1FRElBRk9STUFUX0tFWV9DT01QT1NFUiwgIlRDT00iLCAiVENNIiB9LAorICAgICAgICAgICAgeyBBTUVESUFGT1JNQVRfS0VZX0dFTlJFLCAiVENPTiIsICJUQ08iIH0sCisgICAgICAgICAgICB7IEFNRURJQUZPUk1BVF9LRVlfVElUTEUsICJUSVQyIiwgIlRUMiIgfSwKKyAgICAgICAgICAgIHsgQU1FRElBRk9STUFUX0tFWV9ZRUFSLCAiVFlFIiwgIlRZRVIiIH0sCisgICAgICAgICAgICB7IEFNRURJQUZPUk1BVF9LRVlfQVVUSE9SLCAiVFhUIiwgIlRFWFQiIH0sCisgICAgICAgICAgICB7IEFNRURJQUZPUk1BVF9LRVlfQ0RUUkFDS05VTUJFUiwgIlRSSyIsICJUUkNLIiB9LAorICAgICAgICAgICAgeyBBTUVESUFGT1JNQVRfS0VZX0RJU0NOVU1CRVIsICJUUEEiLCAiVFBPUyIgfSwKKyAgICAgICAgICAgIHsgQU1FRElBRk9STUFUX0tFWV9DT01QSUxBVElPTiwgIlRDUCIsICJUQ01QIiB9LAogICAgICAgICB9OwogICAgICAgICBzdGF0aWMgY29uc3Qgc2l6ZV90IGtOdW1NYXBFbnRyaWVzID0gc2l6ZW9mKGtNYXApIC8gc2l6ZW9mKGtNYXBbMF0pOwogCisgICAgICAgIHZvaWQgKnRtcERhdGE7CisgICAgICAgIHNpemVfdCB0bXBEYXRhU2l6ZTsKICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBrTnVtTWFwRW50cmllczsgKytpKSB7Ci0gICAgICAgICAgICBpZiAoIW1GaWxlTWV0YURhdGEuaGFzRGF0YShrTWFwW2ldLmtleSkpIHsKKyAgICAgICAgICAgIGlmICghQU1lZGlhRm9ybWF0X2dldEJ1ZmZlcihtRmlsZU1ldGFEYXRhLCBrTWFwW2ldLmtleSwgJnRtcERhdGEsICZ0bXBEYXRhU2l6ZSkpIHsKICAgICAgICAgICAgICAgICBJRDM6Okl0ZXJhdG9yICppdCA9IG5ldyBJRDM6Okl0ZXJhdG9yKGlkMywga01hcFtpXS50YWcxKTsKICAgICAgICAgICAgICAgICBpZiAoaXQtPmRvbmUoKSkgewogICAgICAgICAgICAgICAgICAgICBkZWxldGUgaXQ7CkBAIC0zNDU1LDcgKzM4MTQsNyBAQAogICAgICAgICAgICAgICAgIGl0LT5nZXRTdHJpbmcoJnMpOwogICAgICAgICAgICAgICAgIGRlbGV0ZSBpdDsKIAotICAgICAgICAgICAgICAgIG1GaWxlTWV0YURhdGEuc2V0Q1N0cmluZyhrTWFwW2ldLmtleSwgcyk7CisgICAgICAgICAgICAgICAgQU1lZGlhRm9ybWF0X3NldFN0cmluZyhtRmlsZU1ldGFEYXRhLCBrTWFwW2ldLmtleSwgcyk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KIApAQCAtMzQ2NCwxMyArMzgyMywxMiBAQAogICAgICAgICBjb25zdCB2b2lkICpkYXRhID0gaWQzLmdldEFsYnVtQXJ0KCZkYXRhU2l6ZSwgJm1pbWUpOwogCiAgICAgICAgIGlmIChkYXRhKSB7Ci0gICAgICAgICAgICBtRmlsZU1ldGFEYXRhLnNldERhdGEoa0tleUFsYnVtQXJ0LCBNZXRhRGF0YTo6VFlQRV9OT05FLCBkYXRhLCBkYXRhU2l6ZSk7Ci0gICAgICAgICAgICBtRmlsZU1ldGFEYXRhLnNldENTdHJpbmcoa0tleUFsYnVtQXJ0TUlNRSwgbWltZS5zdHJpbmcoKSk7CisgICAgICAgICAgICBBTWVkaWFGb3JtYXRfc2V0QnVmZmVyKG1GaWxlTWV0YURhdGEsIEFNRURJQUZPUk1BVF9LRVlfQUxCVU1BUlQsIGRhdGEsIGRhdGFTaXplKTsKICAgICAgICAgfQogICAgIH0KIH0KIAotTWVkaWFUcmFjayAqTVBFRzRFeHRyYWN0b3I6OmdldFRyYWNrKHNpemVfdCBpbmRleCkgeworTWVkaWFUcmFja0hlbHBlclYyICpNUEVHNEV4dHJhY3Rvcjo6Z2V0VHJhY2soc2l6ZV90IGluZGV4KSB7CiAgICAgc3RhdHVzX3QgZXJyOwogICAgIGlmICgoZXJyID0gcmVhZE1ldGFEYXRhKCkpICE9IE9LKSB7CiAgICAgICAgIHJldHVybiBOVUxMOwpAQCAtMzQ5Myw3ICszODUxLDcgQEAKIAogICAgIFRyZXggKnRyZXggPSBOVUxMOwogICAgIGludDMyX3QgdHJhY2tJZDsKLSAgICBpZiAodHJhY2stPm1ldGEuZmluZEludDMyKGtLZXlUcmFja0lELCAmdHJhY2tJZCkpIHsKKyAgICBpZiAoQU1lZGlhRm9ybWF0X2dldEludDMyKHRyYWNrLT5tZXRhLCBBTUVESUFGT1JNQVRfS0VZX1RSQUNLX0lELCAmdHJhY2tJZCkpIHsKICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtVHJleC5zaXplKCk7IGkrKykgewogICAgICAgICAgICAgVHJleCAqdCA9ICZtVHJleC5lZGl0SXRlbUF0KGkpOwogICAgICAgICAgICAgaWYgKHQtPnRyYWNrX0lEID09ICh1aW50MzJfdCkgdHJhY2tJZCkgewpAQCAtMzUwOSwxNiArMzg2NywxNSBAQAogICAgIEFMT0dWKCJnZXRUcmFjayBjYWxsZWQsIHBzc2g6ICV6dSIsIG1Qc3NoLnNpemUoKSk7CiAKICAgICBjb25zdCBjaGFyICptaW1lOwotICAgIGlmICghdHJhY2stPm1ldGEuZmluZENTdHJpbmcoa0tleU1JTUVUeXBlLCAmbWltZSkpIHsKKyAgICBpZiAoIUFNZWRpYUZvcm1hdF9nZXRTdHJpbmcodHJhY2stPm1ldGEsIEFNRURJQUZPUk1BVF9LRVlfTUlNRSwgJm1pbWUpKSB7CiAgICAgICAgIHJldHVybiBOVUxMOwogICAgIH0KIAogICAgIHNwPEl0ZW1UYWJsZT4gaXRlbVRhYmxlOwogICAgIGlmICghc3RyY2FzZWNtcChtaW1lLCBNRURJQV9NSU1FVFlQRV9WSURFT19BVkMpKSB7Ci0gICAgICAgIHVpbnQzMl90IHR5cGU7Ci0gICAgICAgIGNvbnN0IHZvaWQgKmRhdGE7CisgICAgICAgIHZvaWQgKmRhdGE7CiAgICAgICAgIHNpemVfdCBzaXplOwotICAgICAgICBpZiAoIXRyYWNrLT5tZXRhLmZpbmREYXRhKGtLZXlBVkNDLCAmdHlwZSwgJmRhdGEsICZzaXplKSkgeworICAgICAgICBpZiAoIUFNZWRpYUZvcm1hdF9nZXRCdWZmZXIodHJhY2stPm1ldGEsIEFNRURJQUZPUk1BVF9LRVlfQ1NEX0FWQywgJmRhdGEsICZzaXplKSkgewogICAgICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgICAgIH0KIApAQCAtMzUyOSwxMCArMzg4Niw5IEBACiAgICAgICAgIH0KICAgICB9IGVsc2UgaWYgKCFzdHJjYXNlY21wKG1pbWUsIE1FRElBX01JTUVUWVBFX1ZJREVPX0hFVkMpCiAgICAgICAgICAgICB8fCAhc3RyY2FzZWNtcChtaW1lLCBNRURJQV9NSU1FVFlQRV9JTUFHRV9BTkRST0lEX0hFSUMpKSB7Ci0gICAgICAgIHVpbnQzMl90IHR5cGU7Ci0gICAgICAgIGNvbnN0IHZvaWQgKmRhdGE7CisgICAgICAgIHZvaWQgKmRhdGE7CiAgICAgICAgIHNpemVfdCBzaXplOwotICAgICAgICBpZiAoIXRyYWNrLT5tZXRhLmZpbmREYXRhKGtLZXlIVkNDLCAmdHlwZSwgJmRhdGEsICZzaXplKSkgeworICAgICAgICBpZiAoIUFNZWRpYUZvcm1hdF9nZXRCdWZmZXIodHJhY2stPm1ldGEsIEFNRURJQUZPUk1BVF9LRVlfQ1NEX0hFVkMsICZkYXRhLCAmc2l6ZSkpIHsKICAgICAgICAgICAgIHJldHVybiBOVUxMOwogICAgICAgICB9CiAKQEAgLTM1NTksMjYgKzM5MTUsMjIgQEAKIC8vIHN0YXRpYwogc3RhdHVzX3QgTVBFRzRFeHRyYWN0b3I6OnZlcmlmeVRyYWNrKFRyYWNrICp0cmFjaykgewogICAgIGNvbnN0IGNoYXIgKm1pbWU7Ci0gICAgQ0hFQ0sodHJhY2stPm1ldGEuZmluZENTdHJpbmcoa0tleU1JTUVUeXBlLCAmbWltZSkpOworICAgIENIRUNLKEFNZWRpYUZvcm1hdF9nZXRTdHJpbmcodHJhY2stPm1ldGEsIEFNRURJQUZPUk1BVF9LRVlfTUlNRSwgJm1pbWUpKTsKIAotICAgIHVpbnQzMl90IHR5cGU7Ci0gICAgY29uc3Qgdm9pZCAqZGF0YTsKKyAgICB2b2lkICpkYXRhOwogICAgIHNpemVfdCBzaXplOwogICAgIGlmICghc3RyY2FzZWNtcChtaW1lLCBNRURJQV9NSU1FVFlQRV9WSURFT19BVkMpKSB7Ci0gICAgICAgIGlmICghdHJhY2stPm1ldGEuZmluZERhdGEoa0tleUFWQ0MsICZ0eXBlLCAmZGF0YSwgJnNpemUpCi0gICAgICAgICAgICAgICAgfHwgdHlwZSAhPSBrVHlwZUFWQ0MpIHsKKyAgICAgICAgaWYgKCFBTWVkaWFGb3JtYXRfZ2V0QnVmZmVyKHRyYWNrLT5tZXRhLCBBTUVESUFGT1JNQVRfS0VZX0NTRF9BVkMsICZkYXRhLCAmc2l6ZSkpIHsKICAgICAgICAgICAgIHJldHVybiBFUlJPUl9NQUxGT1JNRUQ7CiAgICAgICAgIH0KICAgICB9IGVsc2UgaWYgKCFzdHJjYXNlY21wKG1pbWUsIE1FRElBX01JTUVUWVBFX1ZJREVPX0hFVkMpKSB7Ci0gICAgICAgIGlmICghdHJhY2stPm1ldGEuZmluZERhdGEoa0tleUhWQ0MsICZ0eXBlLCAmZGF0YSwgJnNpemUpCi0gICAgICAgICAgICAgICAgICAgIHx8IHR5cGUgIT0ga1R5cGVIVkNDKSB7CisgICAgICAgIGlmICghQU1lZGlhRm9ybWF0X2dldEJ1ZmZlcih0cmFjay0+bWV0YSwgQU1FRElBRk9STUFUX0tFWV9DU0RfSEVWQywgJmRhdGEsICZzaXplKSkgewogICAgICAgICAgICAgcmV0dXJuIEVSUk9SX01BTEZPUk1FRDsKICAgICAgICAgfQogICAgIH0gZWxzZSBpZiAoIXN0cmNhc2VjbXAobWltZSwgTUVESUFfTUlNRVRZUEVfVklERU9fTVBFRzQpCiAgICAgICAgICAgICB8fCAhc3RyY2FzZWNtcChtaW1lLCBNRURJQV9NSU1FVFlQRV9WSURFT19NUEVHMikKICAgICAgICAgICAgIHx8ICFzdHJjYXNlY21wKG1pbWUsIE1FRElBX01JTUVUWVBFX0FVRElPX0FBQykpIHsKLSAgICAgICAgaWYgKCF0cmFjay0+bWV0YS5maW5kRGF0YShrS2V5RVNEUywgJnR5cGUsICZkYXRhLCAmc2l6ZSkKLSAgICAgICAgICAgICAgICB8fCB0eXBlICE9IGtUeXBlRVNEUykgeworICAgICAgICBpZiAoIUFNZWRpYUZvcm1hdF9nZXRCdWZmZXIodHJhY2stPm1ldGEsIEFNRURJQUZPUk1BVF9LRVlfRVNEUywgJmRhdGEsICZzaXplKSkgewogICAgICAgICAgICAgcmV0dXJuIEVSUk9SX01BTEZPUk1FRDsKICAgICAgICAgfQogICAgIH0KQEAgLTM2NjMsNyArNDAxNSw3IEBACiAgICAgICAgIGlmIChtTGFzdFRyYWNrID09IE5VTEwpCiAgICAgICAgICAgICByZXR1cm4gRVJST1JfTUFMRk9STUVEOwogCi0gICAgICAgIG1MYXN0VHJhY2stPm1ldGEuc2V0Q1N0cmluZyhrS2V5TUlNRVR5cGUsIE1FRElBX01JTUVUWVBFX0FVRElPX1FDRUxQKTsKKyAgICAgICAgQU1lZGlhRm9ybWF0X3NldFN0cmluZyhtTGFzdFRyYWNrLT5tZXRhLCBBTUVESUFGT1JNQVRfS0VZX01JTUUsIE1FRElBX01JTUVUWVBFX0FVRElPX1FDRUxQKTsKICAgICAgICAgcmV0dXJuIE9LOwogICAgIH0KIApAQCAtMzY4MCwxMCArNDAzMiwxMiBAQAogICAgICAgICB1aW50MzJfdCBhdmdCaXRyYXRlID0gMDsKICAgICAgICAgZXNkcy5nZXRCaXRSYXRlKCZtYXhCaXRyYXRlLCAmYXZnQml0cmF0ZSk7CiAgICAgICAgIGlmIChtYXhCaXRyYXRlID4gMCAmJiBtYXhCaXRyYXRlIDwgSU5UMzJfTUFYKSB7Ci0gICAgICAgICAgICBtTGFzdFRyYWNrLT5tZXRhLnNldEludDMyKGtLZXlNYXhCaXRSYXRlLCAoaW50MzJfdCltYXhCaXRyYXRlKTsKKyAgICAgICAgICAgIEFNZWRpYUZvcm1hdF9zZXRJbnQzMihtTGFzdFRyYWNrLT5tZXRhLAorICAgICAgICAgICAgICAgICAgICBBTUVESUFGT1JNQVRfS0VZX01BWF9CSVRfUkFURSwgKGludDMyX3QpbWF4Qml0cmF0ZSk7CiAgICAgICAgIH0KICAgICAgICAgaWYgKGF2Z0JpdHJhdGUgPiAwICYmIGF2Z0JpdHJhdGUgPCBJTlQzMl9NQVgpIHsKLSAgICAgICAgICAgIG1MYXN0VHJhY2stPm1ldGEuc2V0SW50MzIoa0tleUJpdFJhdGUsIChpbnQzMl90KWF2Z0JpdHJhdGUpOworICAgICAgICAgICAgQU1lZGlhRm9ybWF0X3NldEludDMyKG1MYXN0VHJhY2stPm1ldGEsCisgICAgICAgICAgICAgICAgICAgIEFNRURJQUZPUk1BVF9LRVlfQklUX1JBVEUsIChpbnQzMl90KWF2Z0JpdHJhdGUpOwogICAgICAgICB9CiAgICAgfQogCkBAIC0zNzI3LDcgKzQwODEsNyBAQAogICAgICAgICByZXR1cm4gRVJST1JfTUFMRk9STUVEOwogCiAgICAgLy9rZWVwIEFPVCB0eXBlCi0gICAgbUxhc3RUcmFjay0+bWV0YS5zZXRJbnQzMihrS2V5QUFDQU9ULCBvYmplY3RUeXBlKTsKKyAgICBBTWVkaWFGb3JtYXRfc2V0SW50MzIobUxhc3RUcmFjay0+bWV0YSwgQU1FRElBRk9STUFUX0tFWV9BQUNfUFJPRklMRSwgb2JqZWN0VHlwZSk7CiAKICAgICB1aW50MzJfdCBmcmVxSW5kZXggPSBici5nZXRCaXRzKDQpOwogCkBAIC0zNzQ4LDcgKzQxMDIsNyBAQAogICAgICAgICBzYW1wbGVSYXRlID0ga1NhbXBsaW5nUmF0ZVtmcmVxSW5kZXhdOwogICAgIH0KIAotICAgIGlmIChvYmplY3RUeXBlID09IEFPVF9TQlIgfHwgb2JqZWN0VHlwZSA9PSBBT1RfUFMpIHsvL1NCUiBzcGVjaWZpYyBjb25maWcgcGVyIDE0NDk2LTMgdGFibGUgMS4xMworICAgIGlmIChvYmplY3RUeXBlID09IEFPVF9TQlIgfHwgb2JqZWN0VHlwZSA9PSBBT1RfUFMpIHsvL1NCUiBzcGVjaWZpYyBjb25maWcgcGVyIDE0NDk2LTMgdGJsIDEuMTMKICAgICAgICAgaWYgKGJyLm51bUJpdHNMZWZ0KCkgPCA0KSByZXR1cm4gRVJST1JfTUFMRk9STUVEOwogICAgICAgICB1aW50MzJfdCBleHRGcmVxSW5kZXggPSBici5nZXRCaXRzKDQpOwogICAgICAgICBpbnQzMl90IGV4dFNhbXBsZVJhdGUgX191bnVzZWQ7CkBAIC0zNzY1LDcgKzQxMTksNyBAQAogICAgICAgICAgICAgZXh0U2FtcGxlUmF0ZSA9IGtTYW1wbGluZ1JhdGVbZXh0RnJlcUluZGV4XTsKICAgICAgICAgfQogICAgICAgICAvL1RPRE86IHNhdmUgdGhlIGV4dGVuc2lvbiBzYW1wbGluZyByYXRlIHZhbHVlIGluIG1ldGEgZGF0YSA9PgotICAgICAgICAvLyAgICAgIG1MYXN0VHJhY2stPm1ldGEuc2V0SW50MzIoa0tleUV4dFNhbXBsZVJhdGUsIGV4dFNhbXBsZVJhdGUpOworICAgICAgICAvLyAgICAgIEFNZWRpYUZvcm1hdF9zZXRJbnQzMihtTGFzdFRyYWNrLT5tZXRhLCBrS2V5RXh0U2FtcGxlUmF0ZSwgZXh0U2FtcGxlUmF0ZSk7CiAgICAgfQogCiAgICAgc3dpdGNoIChudW1DaGFubmVscykgewpAQCAtMzkxOCwyNCArNDI3MiwyNSBAQAogICAgICAgICByZXR1cm4gRVJST1JfTUFMRk9STUVEOwogCiAgICAgaW50MzJfdCBwcmV2U2FtcGxlUmF0ZTsKLSAgICBDSEVDSyhtTGFzdFRyYWNrLT5tZXRhLmZpbmRJbnQzMihrS2V5U2FtcGxlUmF0ZSwgJnByZXZTYW1wbGVSYXRlKSk7CisgICAgQ0hFQ0soQU1lZGlhRm9ybWF0X2dldEludDMyKG1MYXN0VHJhY2stPm1ldGEsIEFNRURJQUZPUk1BVF9LRVlfU0FNUExFX1JBVEUsICZwcmV2U2FtcGxlUmF0ZSkpOwogCiAgICAgaWYgKHByZXZTYW1wbGVSYXRlICE9IHNhbXBsZVJhdGUpIHsKICAgICAgICAgQUxPR1YoIm1wZWc0IGF1ZGlvIHNhbXBsZSByYXRlIGRpZmZlcmVudCBmcm9tIHByZXZpb3VzIHNldHRpbmcuICIKICAgICAgICAgICAgICAid2FzOiAlZCwgbm93OiAlZCIsIHByZXZTYW1wbGVSYXRlLCBzYW1wbGVSYXRlKTsKICAgICB9CiAKLSAgICBtTGFzdFRyYWNrLT5tZXRhLnNldEludDMyKGtLZXlTYW1wbGVSYXRlLCBzYW1wbGVSYXRlKTsKKyAgICBBTWVkaWFGb3JtYXRfc2V0SW50MzIobUxhc3RUcmFjay0+bWV0YSwgQU1FRElBRk9STUFUX0tFWV9TQU1QTEVfUkFURSwgc2FtcGxlUmF0ZSk7CiAKICAgICBpbnQzMl90IHByZXZDaGFubmVsQ291bnQ7Ci0gICAgQ0hFQ0sobUxhc3RUcmFjay0+bWV0YS5maW5kSW50MzIoa0tleUNoYW5uZWxDb3VudCwgJnByZXZDaGFubmVsQ291bnQpKTsKKyAgICBDSEVDSyhBTWVkaWFGb3JtYXRfZ2V0SW50MzIobUxhc3RUcmFjay0+bWV0YSwKKyAgICAgICAgICAgIEFNRURJQUZPUk1BVF9LRVlfQ0hBTk5FTF9DT1VOVCwgJnByZXZDaGFubmVsQ291bnQpKTsKIAogICAgIGlmIChwcmV2Q2hhbm5lbENvdW50ICE9IG51bUNoYW5uZWxzKSB7CiAgICAgICAgIEFMT0dWKCJtcGVnNCBhdWRpbyBjaGFubmVsIGNvdW50IGRpZmZlcmVudCBmcm9tIHByZXZpb3VzIHNldHRpbmcuICIKICAgICAgICAgICAgICAid2FzOiAlZCwgbm93OiAlZCIsIHByZXZDaGFubmVsQ291bnQsIG51bUNoYW5uZWxzKTsKICAgICB9CiAKLSAgICBtTGFzdFRyYWNrLT5tZXRhLnNldEludDMyKGtLZXlDaGFubmVsQ291bnQsIG51bUNoYW5uZWxzKTsKKyAgICBBTWVkaWFGb3JtYXRfc2V0SW50MzIobUxhc3RUcmFjay0+bWV0YSwgQU1FRElBRk9STUFUX0tFWV9DSEFOTkVMX0NPVU5ULCBudW1DaGFubmVscyk7CiAKICAgICByZXR1cm4gT0s7CiB9CkBAIC0zOTQzLDggKzQyOTgsOCBAQAogLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KIAogTVBFRzRTb3VyY2U6Ok1QRUc0U291cmNlKAotICAgICAgICBNZXRhRGF0YUJhc2UgJmZvcm1hdCwKLSAgICAgICAgRGF0YVNvdXJjZUJhc2UgKmRhdGFTb3VyY2UsCisgICAgICAgIEFNZWRpYUZvcm1hdCAqZm9ybWF0LAorICAgICAgICBEYXRhU291cmNlSGVscGVyICpkYXRhU291cmNlLAogICAgICAgICBpbnQzMl90IHRpbWVTY2FsZSwKICAgICAgICAgY29uc3Qgc3A8U2FtcGxlVGFibGU+ICZzYW1wbGVUYWJsZSwKICAgICAgICAgVmVjdG9yPFNpZHhFbnRyeT4gJnNpZHgsCkBAIC0zOTcxLDQ2ICs0MzI2LDUwIEBACiAgICAgICBtQ3VycmVudFNhbXBsZUluZm9PZmZzZXRzKE5VTEwpLAogICAgICAgbUlzQVZDKGZhbHNlKSwKICAgICAgIG1Jc0hFVkMoZmFsc2UpLAorICAgICAgbUlzQUM0KGZhbHNlKSwKICAgICAgIG1Jc1BjbShmYWxzZSksCiAgICAgICBtTkFMTGVuZ3RoU2l6ZSgwKSwKICAgICAgIG1TdGFydGVkKGZhbHNlKSwKICAgICAgIG1Hcm91cChOVUxMKSwKICAgICAgIG1CdWZmZXIoTlVMTCksCi0gICAgICBtV2FudHNOQUxGcmFnbWVudHMoZmFsc2UpLAogICAgICAgbVNyY0J1ZmZlcihOVUxMKSwKICAgICAgIG1Jc0hlaWYoaXRlbVRhYmxlICE9IE5VTEwpLAogICAgICAgbUl0ZW1UYWJsZShpdGVtVGFibGUpIHsKIAogICAgIG1lbXNldCgmbVRyYWNrRnJhZ21lbnRIZWFkZXJJbmZvLCAwLCBzaXplb2YobVRyYWNrRnJhZ21lbnRIZWFkZXJJbmZvKSk7CiAKLSAgICBtRm9ybWF0LmZpbmRJbnQzMihrS2V5Q3J5cHRvTW9kZSwgJm1DcnlwdG9Nb2RlKTsKKyAgICBBTWVkaWFGb3JtYXRfZ2V0SW50MzIobUZvcm1hdCwKKyAgICAgICAgICAgIEFNRURJQUZPUk1BVF9LRVlfQ1JZUFRPX01PREUsICZtQ3J5cHRvTW9kZSk7CiAgICAgbURlZmF1bHRJVlNpemUgPSAwOwotICAgIG1Gb3JtYXQuZmluZEludDMyKGtLZXlDcnlwdG9EZWZhdWx0SVZTaXplLCAmbURlZmF1bHRJVlNpemUpOwotICAgIHVpbnQzMl90IGtleXR5cGU7Ci0gICAgY29uc3Qgdm9pZCAqa2V5OworICAgIEFNZWRpYUZvcm1hdF9nZXRJbnQzMihtRm9ybWF0LAorICAgICAgICAgICAgQU1FRElBRk9STUFUX0tFWV9DUllQVE9fREVGQVVMVF9JVl9TSVpFLCAmbURlZmF1bHRJVlNpemUpOworICAgIHZvaWQgKmtleTsKICAgICBzaXplX3Qga2V5c2l6ZTsKLSAgICBpZiAobUZvcm1hdC5maW5kRGF0YShrS2V5Q3J5cHRvS2V5LCAma2V5dHlwZSwgJmtleSwgJmtleXNpemUpKSB7CisgICAgaWYgKEFNZWRpYUZvcm1hdF9nZXRCdWZmZXIobUZvcm1hdCwKKyAgICAgICAgICAgIEFNRURJQUZPUk1BVF9LRVlfQ1JZUFRPX0tFWSwgJmtleSwgJmtleXNpemUpKSB7CiAgICAgICAgIENIRUNLKGtleXNpemUgPD0gMTYpOwogICAgICAgICBtZW1zZXQobUNyeXB0b0tleSwgMCwgMTYpOwogICAgICAgICBtZW1jcHkobUNyeXB0b0tleSwga2V5LCBrZXlzaXplKTsKICAgICB9CiAKLSAgICBtRm9ybWF0LmZpbmRJbnQzMihrS2V5RW5jcnlwdGVkQnl0ZUJsb2NrLCAmbURlZmF1bHRFbmNyeXB0ZWRCeXRlQmxvY2spOwotICAgIG1Gb3JtYXQuZmluZEludDMyKGtLZXlTa2lwQnl0ZUJsb2NrLCAmbURlZmF1bHRTa2lwQnl0ZUJsb2NrKTsKKyAgICBBTWVkaWFGb3JtYXRfZ2V0SW50MzIobUZvcm1hdCwKKyAgICAgICAgICAgIEFNRURJQUZPUk1BVF9LRVlfQ1JZUFRPX0VOQ1JZUFRFRF9CWVRFX0JMT0NLLCAmbURlZmF1bHRFbmNyeXB0ZWRCeXRlQmxvY2spOworICAgIEFNZWRpYUZvcm1hdF9nZXRJbnQzMihtRm9ybWF0LAorICAgICAgICAgICAgQU1FRElBRk9STUFUX0tFWV9DUllQVE9fU0tJUF9CWVRFX0JMT0NLLCAmbURlZmF1bHRTa2lwQnl0ZUJsb2NrKTsKIAogICAgIGNvbnN0IGNoYXIgKm1pbWU7Ci0gICAgYm9vbCBzdWNjZXNzID0gbUZvcm1hdC5maW5kQ1N0cmluZyhrS2V5TUlNRVR5cGUsICZtaW1lKTsKKyAgICBib29sIHN1Y2Nlc3MgPSBBTWVkaWFGb3JtYXRfZ2V0U3RyaW5nKG1Gb3JtYXQsIEFNRURJQUZPUk1BVF9LRVlfTUlNRSwgJm1pbWUpOwogICAgIENIRUNLKHN1Y2Nlc3MpOwogCiAgICAgbUlzQVZDID0gIXN0cmNhc2VjbXAobWltZSwgTUVESUFfTUlNRVRZUEVfVklERU9fQVZDKTsKICAgICBtSXNIRVZDID0gIXN0cmNhc2VjbXAobWltZSwgTUVESUFfTUlNRVRZUEVfVklERU9fSEVWQykgfHwKICAgICAgICAgICAgICAgIXN0cmNhc2VjbXAobWltZSwgTUVESUFfTUlNRVRZUEVfSU1BR0VfQU5EUk9JRF9IRUlDKTsKKyAgICBtSXNBQzQgPSAhc3RyY2FzZWNtcChtaW1lLCBNRURJQV9NSU1FVFlQRV9BVURJT19BQzQpOwogCiAgICAgaWYgKG1Jc0FWQykgewotICAgICAgICB1aW50MzJfdCB0eXBlOwotICAgICAgICBjb25zdCB2b2lkICpkYXRhOworICAgICAgICB2b2lkICpkYXRhOwogICAgICAgICBzaXplX3Qgc2l6ZTsKLSAgICAgICAgQ0hFQ0soZm9ybWF0LmZpbmREYXRhKGtLZXlBVkNDLCAmdHlwZSwgJmRhdGEsICZzaXplKSk7CisgICAgICAgIENIRUNLKEFNZWRpYUZvcm1hdF9nZXRCdWZmZXIoZm9ybWF0LCBBTUVESUFGT1JNQVRfS0VZX0NTRF9BVkMsICZkYXRhLCAmc2l6ZSkpOwogCiAgICAgICAgIGNvbnN0IHVpbnQ4X3QgKnB0ciA9IChjb25zdCB1aW50OF90ICopZGF0YTsKIApAQCAtNDAyMCwxMCArNDM3OSw5IEBACiAgICAgICAgIC8vIFRoZSBudW1iZXIgb2YgYnl0ZXMgdXNlZCB0byBlbmNvZGUgdGhlIGxlbmd0aCBvZiBhIE5BTCB1bml0LgogICAgICAgICBtTkFMTGVuZ3RoU2l6ZSA9IDEgKyAocHRyWzRdICYgMyk7CiAgICAgfSBlbHNlIGlmIChtSXNIRVZDKSB7Ci0gICAgICAgIHVpbnQzMl90IHR5cGU7Ci0gICAgICAgIGNvbnN0IHZvaWQgKmRhdGE7CisgICAgICAgIHZvaWQgKmRhdGE7CiAgICAgICAgIHNpemVfdCBzaXplOwotICAgICAgICBDSEVDSyhmb3JtYXQuZmluZERhdGEoa0tleUhWQ0MsICZ0eXBlLCAmZGF0YSwgJnNpemUpKTsKKyAgICAgICAgQ0hFQ0soQU1lZGlhRm9ybWF0X2dldEJ1ZmZlcihmb3JtYXQsIEFNRURJQUZPUk1BVF9LRVlfQ1NEX0hFVkMsICZkYXRhLCAmc2l6ZSkpOwogCiAgICAgICAgIGNvbnN0IHVpbnQ4X3QgKnB0ciA9IChjb25zdCB1aW50OF90ICopZGF0YTsKIApAQCAtNDAzOCwyMyArNDM5NiwyNSBAQAogICAgIGlmIChtSXNQY20pIHsKICAgICAgICAgaW50MzJfdCBudW1DaGFubmVscyA9IDA7CiAgICAgICAgIGludDMyX3QgYml0c1BlclNhbXBsZSA9IDA7Ci0gICAgICAgIENIRUNLKG1Gb3JtYXQuZmluZEludDMyKGtLZXlCaXRzUGVyU2FtcGxlLCAmYml0c1BlclNhbXBsZSkpOwotICAgICAgICBDSEVDSyhtRm9ybWF0LmZpbmRJbnQzMihrS2V5Q2hhbm5lbENvdW50LCAmbnVtQ2hhbm5lbHMpKTsKKyAgICAgICAgQ0hFQ0soQU1lZGlhRm9ybWF0X2dldEludDMyKG1Gb3JtYXQsIEFNRURJQUZPUk1BVF9LRVlfQklUU19QRVJfU0FNUExFLCAmYml0c1BlclNhbXBsZSkpOworICAgICAgICBDSEVDSyhBTWVkaWFGb3JtYXRfZ2V0SW50MzIobUZvcm1hdCwgQU1FRElBRk9STUFUX0tFWV9DSEFOTkVMX0NPVU5ULCAmbnVtQ2hhbm5lbHMpKTsKIAogICAgICAgICBpbnQzMl90IGJ5dGVzUGVyU2FtcGxlID0gYml0c1BlclNhbXBsZSA+PiAzOwogICAgICAgICBpbnQzMl90IHBjbVNhbXBsZVNpemUgPSBieXRlc1BlclNhbXBsZSAqIG51bUNoYW5uZWxzOwogCiAgICAgICAgIHNpemVfdCBtYXhTYW1wbGVTaXplOwogICAgICAgICBzdGF0dXNfdCBlcnIgPSBtU2FtcGxlVGFibGUtPmdldE1heFNhbXBsZVNpemUoJm1heFNhbXBsZVNpemUpOwotICAgICAgICBpZiAoZXJyICE9IE9LIHx8IG1heFNhbXBsZVNpemUgIT0gc3RhdGljX2Nhc3Q8c2l6ZV90PihwY21TYW1wbGVTaXplKSB8fCBiaXRzUGVyU2FtcGxlICE9IDE2KSB7CisgICAgICAgIGlmIChlcnIgIT0gT0sgfHwgbWF4U2FtcGxlU2l6ZSAhPSBzdGF0aWNfY2FzdDxzaXplX3Q+KHBjbVNhbXBsZVNpemUpCisgICAgICAgICAgICAgICB8fCBiaXRzUGVyU2FtcGxlICE9IDE2KSB7CiAgICAgICAgICAgICAvLyBOb3Qgc3VwcG9ydGVkCiAgICAgICAgICAgICBtSXNQY20gPSBmYWxzZTsKICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIG1Gb3JtYXQuc2V0SW50MzIoa0tleU1heElucHV0U2l6ZSwgcGNtU2FtcGxlU2l6ZSAqIGtNYXhQY21GcmFtZVNpemUpOworICAgICAgICAgICAgQU1lZGlhRm9ybWF0X3NldEludDMyKG1Gb3JtYXQsCisgICAgICAgICAgICAgICAgICAgIEFNRURJQUZPUk1BVF9LRVlfTUFYX0lOUFVUX1NJWkUsIHBjbVNhbXBsZVNpemUgKiBrTWF4UGNtRnJhbWVTaXplKTsKICAgICAgICAgfQogICAgIH0KIAotICAgIENIRUNLKGZvcm1hdC5maW5kSW50MzIoa0tleVRyYWNrSUQsICZtVHJhY2tJZCkpOworICAgIENIRUNLKEFNZWRpYUZvcm1hdF9nZXRJbnQzMihmb3JtYXQsIEFNRURJQUZPUk1BVF9LRVlfVFJBQ0tfSUQsICZtVHJhY2tJZCkpOwogCiB9CiAKQEAgLTQwNzQsMjEgKzQ0MzQsMTMgQEAKICAgICBmcmVlKG1DdXJyZW50U2FtcGxlSW5mb09mZnNldHMpOwogfQogCi1zdGF0dXNfdCBNUEVHNFNvdXJjZTo6c3RhcnQoTWV0YURhdGFCYXNlICpwYXJhbXMpIHsKK21lZGlhX3N0YXR1c190IE1QRUc0U291cmNlOjpzdGFydCgpIHsKICAgICBNdXRleDo6QXV0b2xvY2sgYXV0b0xvY2sobUxvY2spOwogCiAgICAgQ0hFQ0soIW1TdGFydGVkKTsKIAotICAgIGludDMyX3QgdmFsOwotICAgIGlmIChwYXJhbXMgJiYgcGFyYW1zLT5maW5kSW50MzIoa0tleVdhbnRzTkFMRnJhZ21lbnRzLCAmdmFsKQotICAgICAgICAmJiB2YWwgIT0gMCkgewotICAgICAgICBtV2FudHNOQUxGcmFnbWVudHMgPSB0cnVlOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIG1XYW50c05BTEZyYWdtZW50cyA9IGZhbHNlOwotICAgIH0KLQogICAgIGludDMyX3QgdG1wOwotICAgIENIRUNLKG1Gb3JtYXQuZmluZEludDMyKGtLZXlNYXhJbnB1dFNpemUsICZ0bXApKTsKKyAgICBDSEVDSyhBTWVkaWFGb3JtYXRfZ2V0SW50MzIobUZvcm1hdCwgQU1FRElBRk9STUFUX0tFWV9NQVhfSU5QVVRfU0laRSwgJnRtcCkpOwogICAgIHNpemVfdCBtYXhfc2l6ZSA9IHRtcDsKIAogICAgIC8vIEEgc29tZXdoYXQgYXJiaXRyYXJ5IGxpbWl0IHRoYXQgc2hvdWxkIGJlIHN1ZmZpY2llbnQgZm9yIDhrIHZpZGVvIGZyYW1lcwpAQCAtNDA5NiwxMSArNDQ0OCwxMSBAQAogICAgIGNvbnN0IHNpemVfdCBrTWF4QnVmZmVyU2l6ZSA9IDY0ICogMTAyNCAqIDEwMjQ7CiAgICAgaWYgKG1heF9zaXplID4ga01heEJ1ZmZlclNpemUpIHsKICAgICAgICAgQUxPR0UoImJvZ3VzIG1heCBpbnB1dCBzaXplOiAlenUgPiAlenUiLCBtYXhfc2l6ZSwga01heEJ1ZmZlclNpemUpOwotICAgICAgICByZXR1cm4gRVJST1JfTUFMRk9STUVEOworICAgICAgICByZXR1cm4gQU1FRElBX0VSUk9SX01BTEZPUk1FRDsKICAgICB9CiAgICAgaWYgKG1heF9zaXplID09IDApIHsKICAgICAgICAgQUxPR0UoInplcm8gbWF4IGlucHV0IHNpemUiKTsKLSAgICAgICAgcmV0dXJuIEVSUk9SX01BTEZPUk1FRDsKKyAgICAgICAgcmV0dXJuIEFNRURJQV9FUlJPUl9NQUxGT1JNRUQ7CiAgICAgfQogCiAgICAgLy8gQWxsb3cgdXAgdG8ga01heEJ1ZmZlcnMsIGJ1dCBub3QgaWYgdGhlIHRvdGFsIGV4Y2VlZHMga01heEJ1ZmZlclNpemUuCkBAIC00MTEzLDE1ICs0NDY1LDE1IEBACiAgICAgICAgIC8vIGZpbGUgcHJvYmFibHkgc3BlY2lmaWVkIGEgYmFkIG1heCBzaXplCiAgICAgICAgIGRlbGV0ZSBtR3JvdXA7CiAgICAgICAgIG1Hcm91cCA9IE5VTEw7Ci0gICAgICAgIHJldHVybiBFUlJPUl9NQUxGT1JNRUQ7CisgICAgICAgIHJldHVybiBBTUVESUFfRVJST1JfTUFMRk9STUVEOwogICAgIH0KIAogICAgIG1TdGFydGVkID0gdHJ1ZTsKIAotICAgIHJldHVybiBPSzsKKyAgICByZXR1cm4gQU1FRElBX09LOwogfQogCi1zdGF0dXNfdCBNUEVHNFNvdXJjZTo6c3RvcCgpIHsKK21lZGlhX3N0YXR1c190IE1QRUc0U291cmNlOjpzdG9wKCkgewogICAgIE11dGV4OjpBdXRvbG9jayBhdXRvTG9jayhtTG9jayk7CiAKICAgICBDSEVDSyhtU3RhcnRlZCk7CkBAIC00MTQwLDcgKzQ0OTIsNyBAQAogICAgIG1TdGFydGVkID0gZmFsc2U7CiAgICAgbUN1cnJlbnRTYW1wbGVJbmRleCA9IDA7CiAKLSAgICByZXR1cm4gT0s7CisgICAgcmV0dXJuIEFNRURJQV9PSzsKIH0KIAogc3RhdHVzX3QgTVBFRzRTb3VyY2U6OnBhcnNlQ2h1bmsob2ZmNjRfdCAqb2Zmc2V0KSB7CkBAIC00MjU4LDcgKzQ2MTAsOCBAQAogICAgICAgICB9CiAgICAgICAgIGNhc2UgRk9VUkNDKCdzJywgJ2EnLCAnaScsICdvJyk6IHsKICAgICAgICAgICAgIHN0YXR1c190IGVycjsKLSAgICAgICAgICAgIGlmICgoZXJyID0gcGFyc2VTYW1wbGVBdXhpbGlhcnlJbmZvcm1hdGlvbk9mZnNldHMoZGF0YV9vZmZzZXQsIGNodW5rX2RhdGFfc2l6ZSkpICE9IE9LKSB7CisgICAgICAgICAgICBpZiAoKGVyciA9IHBhcnNlU2FtcGxlQXV4aWxpYXJ5SW5mb3JtYXRpb25PZmZzZXRzKGRhdGFfb2Zmc2V0LCBjaHVua19kYXRhX3NpemUpKQorICAgICAgICAgICAgICAgICAgICAhPSBPSykgewogICAgICAgICAgICAgICAgIHJldHVybiBlcnI7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICAqb2Zmc2V0ICs9IGNodW5rX3NpemU7CkBAIC00Mzg5LDcgKzQ3NDIsOCBAQAogICAgIGlmIChlbnRyeWNvdW50ID4gbUN1cnJlbnRTYW1wbGVJbmZvT2Zmc2V0c0FsbG9jU2l6ZSkgewogICAgICAgICB1aW50NjRfdCAqbmV3UHRyID0gKHVpbnQ2NF90ICopcmVhbGxvYyhtQ3VycmVudFNhbXBsZUluZm9PZmZzZXRzLCBlbnRyeWNvdW50ICogOCk7CiAgICAgICAgIGlmIChuZXdQdHIgPT0gTlVMTCkgewotICAgICAgICAgICAgQUxPR0UoImZhaWxlZCB0byByZWFsbG9jICV1IC0+ICV1IiwgbUN1cnJlbnRTYW1wbGVJbmZvT2Zmc2V0c0FsbG9jU2l6ZSwgZW50cnljb3VudCAqIDgpOworICAgICAgICAgICAgQUxPR0UoImZhaWxlZCB0byByZWFsbG9jICV1IC0+ICV1IiwKKyAgICAgICAgICAgICAgICAgICAgbUN1cnJlbnRTYW1wbGVJbmZvT2Zmc2V0c0FsbG9jU2l6ZSwgZW50cnljb3VudCAqIDgpOwogICAgICAgICAgICAgcmV0dXJuIE5PX01FTU9SWTsKICAgICAgICAgfQogICAgICAgICBtQ3VycmVudFNhbXBsZUluZm9PZmZzZXRzID0gbmV3UHRyOwpAQCAtNDQyOCwxMCArNDc4MiwxMSBAQAogICAgIHJldHVybiBwYXJzZUNsZWFyRW5jcnlwdGVkU2l6ZXMoZHJtb2Zmc2V0LCBmYWxzZSwgMCk7CiB9CiAKLXN0YXR1c190IE1QRUc0U291cmNlOjpwYXJzZUNsZWFyRW5jcnlwdGVkU2l6ZXMob2ZmNjRfdCBvZmZzZXQsIGJvb2wgaXNTdWJzYW1wbGVFbmNyeXB0aW9uLCB1aW50MzJfdCBmbGFncykgeworc3RhdHVzX3QgTVBFRzRTb3VyY2U6OnBhcnNlQ2xlYXJFbmNyeXB0ZWRTaXplcygKKyAgICAgICAgb2ZmNjRfdCBvZmZzZXQsIGJvb2wgaXNTdWJzYW1wbGVFbmNyeXB0aW9uLCB1aW50MzJfdCBmbGFncykgewogCi0gICAgaW50IGl2bGVuZ3RoOwotICAgIENIRUNLKG1Gb3JtYXQuZmluZEludDMyKGtLZXlDcnlwdG9EZWZhdWx0SVZTaXplLCAmaXZsZW5ndGgpKTsKKyAgICBpbnQzMl90IGl2bGVuZ3RoOworICAgIENIRUNLKEFNZWRpYUZvcm1hdF9nZXRJbnQzMihtRm9ybWF0LCBBTUVESUFGT1JNQVRfS0VZX0NSWVBUT19ERUZBVUxUX0lWX1NJWkUsICZpdmxlbmd0aCkpOwogCiAgICAgLy8gb25seSAwLCA4IGFuZCAxNiBieXRlIGluaXRpYWxpemF0aW9uIHZlY3RvcnMgYXJlIHN1cHBvcnRlZAogICAgIGlmIChpdmxlbmd0aCAhPSAwICYmIGl2bGVuZ3RoICE9IDggJiYgaXZsZW5ndGggIT0gMTYpIHsKQEAgLTQ3NzUsMTAgKzUxMzAsMTAgQEAKICAgICByZXR1cm4gT0s7CiB9CiAKLXN0YXR1c190IE1QRUc0U291cmNlOjpnZXRGb3JtYXQoTWV0YURhdGFCYXNlICZtZXRhKSB7CittZWRpYV9zdGF0dXNfdCBNUEVHNFNvdXJjZTo6Z2V0Rm9ybWF0KEFNZWRpYUZvcm1hdCAqbWV0YSkgewogICAgIE11dGV4OjpBdXRvbG9jayBhdXRvTG9jayhtTG9jayk7Ci0gICAgbWV0YSA9IG1Gb3JtYXQ7Ci0gICAgcmV0dXJuIE9LOworICAgIEFNZWRpYUZvcm1hdF9jb3B5KG1ldGEsIG1Gb3JtYXQpOworICAgIHJldHVybiBBTUVESUFfT0s7CiB9CiAKIHNpemVfdCBNUEVHNFNvdXJjZTo6cGFyc2VOQUxTaXplKGNvbnN0IHVpbnQ4X3QgKmRhdGEpIGNvbnN0IHsKQEAgLTQ4MDAsNyArNTE1NSwzNiBAQAogICAgIHJldHVybiAwOwogfQogCi1zdGF0dXNfdCBNUEVHNFNvdXJjZTo6cmVhZCgKK2ludDMyX3QgTVBFRzRTb3VyY2U6OnBhcnNlSEVWQ0xheWVySWQoY29uc3QgdWludDhfdCAqZGF0YSwgc2l6ZV90IHNpemUpIHsKKyAgICBDSEVDSyhkYXRhICE9IG51bGxwdHIgJiYgc2l6ZSA+PSAobU5BTExlbmd0aFNpemUgKyAyKSk7CisKKyAgICAvLyBIRVZDIE5BTC1oZWFkZXIgKDE2LWJpdCkKKyAgICAvLyAgMSAgIDYgICAgICA2ICAgICAzCisgICAgLy8gfC18dXV1dXV1fC0tLS0tLXxpaWl8CisgICAgLy8gICAgICBeICAgICAgICAgICAgXgorICAgIC8vICBOQUxfdHlwZSAgICAgICAgbGF5ZXJfaWQgKyAxCisgICAgLy8KKyAgICAvLyBMYXllci1pZCBpcyBub24temVybyBvbmx5IGZvciBUZW1wb3JhbCBTdWItbGF5ZXIgQWNjZXNzIHBpY3R1cmVzIChUU0EpCisgICAgZW51bSB7CisgICAgICAgIFRTQV9OID0gMiwKKyAgICAgICAgVFNBX1IgPSAzLAorICAgICAgICBTVFNBX04gPSA0LAorICAgICAgICBTVFNBX1IgPSA1LAorICAgIH07CisKKyAgICBkYXRhICs9IG1OQUxMZW5ndGhTaXplOworICAgIHVpbnQxNl90IG5hbEhlYWRlciA9IGRhdGFbMF0gPDwgOCB8IGRhdGFbMV07CisKKyAgICB1aW50MTZfdCBuYWxUeXBlID0gKG5hbEhlYWRlciA+PiA5KSAmIDB4M0Z1OworICAgIGlmIChuYWxUeXBlID09IFRTQV9OIHx8IG5hbFR5cGUgPT0gVFNBX1IgfHwgbmFsVHlwZSA9PSBTVFNBX04gfHwgbmFsVHlwZSA9PSBTVFNBX1IpIHsKKyAgICAgICAgaW50MzJfdCBsYXllcklkUGx1c09uZSA9IG5hbEhlYWRlciAmIDB4N3U7CisgICAgICAgIEFMT0dEX0lGKGxheWVySWRQbHVzT25lID09IDAsICJnb3QgbGF5ZXJJZCAwIGZvciBUU0EgcGljdHVyZSIpOworICAgICAgICByZXR1cm4gbGF5ZXJJZFBsdXNPbmUgLSAxOworICAgIH0KKyAgICByZXR1cm4gMDsKK30KKworbWVkaWFfc3RhdHVzX3QgTVBFRzRTb3VyY2U6OnJlYWQoCiAgICAgICAgIE1lZGlhQnVmZmVyQmFzZSAqKm91dCwgY29uc3QgUmVhZE9wdGlvbnMgKm9wdGlvbnMpIHsKICAgICBNdXRleDo6QXV0b2xvY2sgYXV0b0xvY2sobUxvY2spOwogCkBAIC00ODA4LDcgKzUxOTIsNyBAQAogCiAgICAgaWYgKG9wdGlvbnMgIT0gbnVsbHB0ciAmJiBvcHRpb25zLT5nZXROb25CbG9ja2luZygpICYmICFtR3JvdXAtPmhhc19idWZmZXJzKCkpIHsKICAgICAgICAgKm91dCA9IG51bGxwdHI7Ci0gICAgICAgIHJldHVybiBXT1VMRF9CTE9DSzsKKyAgICAgICAgcmV0dXJuIEFNRURJQV9FUlJPUl9XT1VMRF9CTE9DSzsKICAgICB9CiAKICAgICBpZiAobUZpcnN0TW9vZk9mZnNldCA+IDApIHsKQEAgLTQ4MjYsOCArNTIxMCw4IEBACiAgICAgICAgICAgICBDSEVDSyhtU2FtcGxlVGFibGUgPT0gTlVMTCk7CiAgICAgICAgICAgICBDSEVDSyhtSXRlbVRhYmxlICE9IE5VTEwpOwogICAgICAgICAgICAgaW50MzJfdCBpbWFnZUluZGV4OwotICAgICAgICAgICAgaWYgKCFtRm9ybWF0LmZpbmRJbnQzMihrS2V5VHJhY2tJRCwgJmltYWdlSW5kZXgpKSB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIEVSUk9SX01BTEZPUk1FRDsKKyAgICAgICAgICAgIGlmICghQU1lZGlhRm9ybWF0X2dldEludDMyKG1Gb3JtYXQsIEFNRURJQUZPUk1BVF9LRVlfVFJBQ0tfSUQsICZpbWFnZUluZGV4KSkgeworICAgICAgICAgICAgICAgIHJldHVybiBBTUVESUFfRVJST1JfTUFMRk9STUVEOwogICAgICAgICAgICAgfQogCiAgICAgICAgICAgICBzdGF0dXNfdCBlcnI7CkBAIC00ODM3LDcgKzUyMjEsNyBAQAogICAgICAgICAgICAgICAgIGVyciA9IG1JdGVtVGFibGUtPmZpbmRUaHVtYm5haWxJdGVtKGltYWdlSW5kZXgsICZtQ3VycmVudFNhbXBsZUluZGV4KTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGlmIChlcnIgIT0gT0spIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gZXJyOworICAgICAgICAgICAgICAgIHJldHVybiBBTUVESUFfRVJST1JfVU5LTk9XTjsKICAgICAgICAgICAgIH0KICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIHVpbnQzMl90IGZpbmRGbGFncyA9IDA7CkBAIC00ODkyLDEwICs1Mjc2LDEwIEBACiAgICAgICAgICAgICAgICAgICAgIC8vIHRoaXMgYWxsIHRoZSB3YXkgdG8gdGhlIE1lZGlhUGxheWVyIHdvdWxkIGNhdXNlIGFibm9ybWFsCiAgICAgICAgICAgICAgICAgICAgIC8vIHRlcm1pbmF0aW9uLiBMZWdhY3kgYmVoYXZpb3VyIGFwcGVhcnMgdG8gYmUgdG8gYmVoYXZlIGFzIGlmCiAgICAgICAgICAgICAgICAgICAgIC8vIHdlIGhhZCBzZWVrZWQgdG8gdGhlIGVuZCBvZiBzdHJlYW0sIGVuZGluZyBub3JtYWxseS4KLSAgICAgICAgICAgICAgICAgICAgZXJyID0gRVJST1JfRU5EX09GX1NUUkVBTTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEFNRURJQV9FUlJPUl9FTkRfT0ZfU1RSRUFNOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICBBTE9HVigiZW5kIG9mIHN0cmVhbSIpOwotICAgICAgICAgICAgICAgIHJldHVybiBlcnI7CisgICAgICAgICAgICAgICAgcmV0dXJuIEFNRURJQV9FUlJPUl9VTktOT1dOOwogICAgICAgICAgICAgfQogCiAgICAgICAgICAgICBpZiAobW9kZSA9PSBSZWFkT3B0aW9uczo6U0VFS19DTE9TRVNUCkBAIC00OTQ5LDI0ICs1MzMzLDI3IEBACiAgICAgICAgIH0KIAogICAgICAgICBpZiAoZXJyICE9IE9LKSB7Ci0gICAgICAgICAgICByZXR1cm4gZXJyOworICAgICAgICAgICAgaWYgKGVyciA9PSBFUlJPUl9FTkRfT0ZfU1RSRUFNKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIEFNRURJQV9FUlJPUl9FTkRfT0ZfU1RSRUFNOworICAgICAgICAgICAgfQorICAgICAgICAgICAgcmV0dXJuIEFNRURJQV9FUlJPUl9VTktOT1dOOwogICAgICAgICB9CiAKICAgICAgICAgZXJyID0gbUdyb3VwLT5hY3F1aXJlX2J1ZmZlcigmbUJ1ZmZlcik7CiAKICAgICAgICAgaWYgKGVyciAhPSBPSykgewogICAgICAgICAgICAgQ0hFQ0sobUJ1ZmZlciA9PSBOVUxMKTsKLSAgICAgICAgICAgIHJldHVybiBlcnI7CisgICAgICAgICAgICByZXR1cm4gQU1FRElBX0VSUk9SX1VOS05PV047CiAgICAgICAgIH0KICAgICAgICAgaWYgKHNpemUgPiBtQnVmZmVyLT5zaXplKCkpIHsKICAgICAgICAgICAgIEFMT0dFKCJidWZmZXIgdG9vIHNtYWxsOiAlenUgPiAlenUiLCBzaXplLCBtQnVmZmVyLT5zaXplKCkpOwogICAgICAgICAgICAgbUJ1ZmZlci0+cmVsZWFzZSgpOwogICAgICAgICAgICAgbUJ1ZmZlciA9IE5VTEw7Ci0gICAgICAgICAgICByZXR1cm4gRVJST1JfQlVGRkVSX1RPT19TTUFMTDsKKyAgICAgICAgICAgIHJldHVybiBBTUVESUFfRVJST1JfVU5LTk9XTjsgLy8gRVJST1JfQlVGRkVSX1RPT19TTUFMTAogICAgICAgICB9CiAgICAgfQogCi0gICAgaWYgKCghbUlzQVZDICYmICFtSXNIRVZDKSB8fCBtV2FudHNOQUxGcmFnbWVudHMpIHsKKyAgICBpZiAoKCFtSXNBVkMgJiYgIW1Jc0hFVkMgJiYgIW1Jc0FDNCkpIHsKICAgICAgICAgaWYgKG5ld0J1ZmZlcikgewogICAgICAgICAgICAgaWYgKG1Jc1BjbSkgewogICAgICAgICAgICAgICAgIC8vIFRoZSB0d29zJyBQQ00gYmxvY2sgcmVhZGVyIGFzc3VtZXMgdGhhdCBhbGwgc2FtcGxlcyBoYXMgdGhlIHNhbWUgc2l6ZS4KQEAgLTQ5ODEsMTQgKzUzNjgsMTQgQEAKICAgICAgICAgICAgICAgICAgICAgICBzYW1wbGVzVG9SZWFkLCBzaXplLCBtQ3VycmVudFNhbXBsZUluZGV4LAogICAgICAgICAgICAgICAgICAgICAgIG1TYW1wbGVUYWJsZS0+Z2V0TGFzdFNhbXBsZUluZGV4SW5DaHVuaygpKTsKIAotICAgICAgICAgICAgICAgIHNpemVfdCB0b3RhbFNpemUgPSBzYW1wbGVzVG9SZWFkICogc2l6ZTsKKyAgICAgICAgICAgICAgIHNpemVfdCB0b3RhbFNpemUgPSBzYW1wbGVzVG9SZWFkICogc2l6ZTsKICAgICAgICAgICAgICAgICB1aW50OF90KiBidWYgPSAodWludDhfdCAqKW1CdWZmZXItPmRhdGEoKTsKICAgICAgICAgICAgICAgICBzc2l6ZV90IGJ5dGVzUmVhZCA9IG1EYXRhU291cmNlLT5yZWFkQXQob2Zmc2V0LCBidWYsIHRvdGFsU2l6ZSk7CiAgICAgICAgICAgICAgICAgaWYgKGJ5dGVzUmVhZCA8IChzc2l6ZV90KXRvdGFsU2l6ZSkgewogICAgICAgICAgICAgICAgICAgICBtQnVmZmVyLT5yZWxlYXNlKCk7CiAgICAgICAgICAgICAgICAgICAgIG1CdWZmZXIgPSBOVUxMOwogCi0gICAgICAgICAgICAgICAgICAgIHJldHVybiBFUlJPUl9JTzsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEFNRURJQV9FUlJPUl9JTzsKICAgICAgICAgICAgICAgICB9CiAKICAgICAgICAgICAgICAgICBtQnVmZmVyLT5tZXRhX2RhdGEoKS5jbGVhcigpOwpAQCAtNDk5Niw3ICs1MzgzLDggQEAKICAgICAgICAgICAgICAgICBtQnVmZmVyLT5tZXRhX2RhdGEoKS5zZXRJbnQzMihrS2V5SXNTeW5jRnJhbWUsIDEpOwogCiAgICAgICAgICAgICAgICAgaW50MzJfdCBieXRlT3JkZXI7Ci0gICAgICAgICAgICAgICAgbUZvcm1hdC5maW5kSW50MzIoa0tleVBjbUJpZ0VuZGlhbiwgJmJ5dGVPcmRlcik7CisgICAgICAgICAgICAgICAgQU1lZGlhRm9ybWF0X2dldEludDMyKG1Gb3JtYXQsCisgICAgICAgICAgICAgICAgICAgICAgICBBTUVESUFGT1JNQVRfS0VZX1BDTV9CSUdfRU5ESUFOLCAmYnl0ZU9yZGVyKTsKIAogICAgICAgICAgICAgICAgIGlmIChieXRlT3JkZXIgPT0gMSkgewogICAgICAgICAgICAgICAgICAgICAvLyBCaWctZW5kaWFuIC0+IGxpdHRsZS1lbmRpYW4KQEAgLTUwMTgsNyArNTQwNiw3IEBACiAgICAgICAgICAgICAgICAgICAgIG1CdWZmZXItPnJlbGVhc2UoKTsKICAgICAgICAgICAgICAgICAgICAgbUJ1ZmZlciA9IE5VTEw7CiAKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEVSUk9SX0lPOworICAgICAgICAgICAgICAgICAgICByZXR1cm4gQU1FRElBX0VSUk9SX0lPOwogICAgICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgICAgIENIRUNLKG1CdWZmZXIgIT0gTlVMTCk7CkBAIC01MDM3LDE2ICs1NDI1LDIzIEBACiAgICAgICAgICAgICAgICAgaWYgKGlzU3luY1NhbXBsZSkgewogICAgICAgICAgICAgICAgICAgICBtQnVmZmVyLT5tZXRhX2RhdGEoKS5zZXRJbnQzMihrS2V5SXNTeW5jRnJhbWUsIDEpOwogICAgICAgICAgICAgICAgIH0KLQorIAogICAgICAgICAgICAgICAgICsrbUN1cnJlbnRTYW1wbGVJbmRleDsKICAgICAgICAgICAgIH0KICAgICAgICAgfQogCi0gICAgICAgIGlmICghbUlzQVZDICYmICFtSXNIRVZDKSB7CisgICAgICAgIGlmICghbUlzQVZDICYmICFtSXNIRVZDICYmICFtSXNBQzQpIHsKICAgICAgICAgICAgICpvdXQgPSBtQnVmZmVyOwogICAgICAgICAgICAgbUJ1ZmZlciA9IE5VTEw7CiAKLSAgICAgICAgICAgIHJldHVybiBPSzsKKyAgICAgICAgICAgIHJldHVybiBBTUVESUFfT0s7CisgICAgICAgIH0KKworICAgICAgICBpZiAobUlzQUM0KSB7CisgICAgICAgICAgICBtQnVmZmVyLT5yZWxlYXNlKCk7CisgICAgICAgICAgICBtQnVmZmVyID0gTlVMTDsKKworICAgICAgICAgICAgcmV0dXJuIEFNRURJQV9FUlJPUl9JTzsKICAgICAgICAgfQogCiAgICAgICAgIC8vIEVhY2ggTkFMIHVuaXQgaXMgc3BsaXQgdXAgaW50byBpdHMgY29uc3RpdHVlbnQgZnJhZ21lbnRzIGFuZApAQCAtNTA2Nyw3ICs1NDYyLDcgQEAKICAgICAgICAgICAgIG1CdWZmZXItPnJlbGVhc2UoKTsKICAgICAgICAgICAgIG1CdWZmZXIgPSBOVUxMOwogCi0gICAgICAgICAgICByZXR1cm4gRVJST1JfTUFMRk9STUVEOworICAgICAgICAgICAgcmV0dXJuIEFNRURJQV9FUlJPUl9NQUxGT1JNRUQ7CiAgICAgICAgIH0KIAogICAgICAgICBNZWRpYUJ1ZmZlckJhc2UgKmNsb25lID0gbUJ1ZmZlci0+Y2xvbmUoKTsKQEAgLTUwODYsNzggKzU0ODEsMTE3IEBACiAKICAgICAgICAgKm91dCA9IGNsb25lOwogCi0gICAgICAgIHJldHVybiBPSzsKKyAgICAgICAgcmV0dXJuIEFNRURJQV9PSzsKKyAgICB9IGVsc2UgaWYgKG1Jc0FDNCkgeworICAgICAgICBDSEVDSyhtQnVmZmVyICE9IE5VTEwpOworICAgICAgICAvLyBNYWtlIHN1cmUgdGhlcmUgaXMgZW5vdWdoIHNwYWNlIHRvIHdyaXRlIHRoZSBzeW5jIGhlYWRlciBhbmQgdGhlIHJhdyBmcmFtZQorICAgICAgICBpZiAobUJ1ZmZlci0+cmFuZ2VfbGVuZ3RoKCkgPCAoNyArIHNpemUpKSB7CisgICAgICAgICAgICBtQnVmZmVyLT5yZWxlYXNlKCk7CisgICAgICAgICAgICBtQnVmZmVyID0gTlVMTDsKKworICAgICAgICAgICAgcmV0dXJuIEFNRURJQV9FUlJPUl9JTzsKKyAgICAgICAgfQorCisgICAgICAgIHVpbnQ4X3QgKmRzdERhdGEgPSAodWludDhfdCAqKW1CdWZmZXItPmRhdGEoKTsKKyAgICAgICAgc2l6ZV90IGRzdE9mZnNldCA9IDA7CisgICAgICAgIC8vIEFkZCBBQy00IHN5bmMgaGVhZGVyIHRvIE1QRUc0IGVuY2Fwc3VsYXRlZCBBQy00IHJhdyBmcmFtZQorICAgICAgICAvLyBBQzQwIHN5bmMgd29yZCwgbWVhbmluZyBubyBDUkMgYXQgdGhlIGVuZCBvZiB0aGUgZnJhbWUKKyAgICAgICAgZHN0RGF0YVtkc3RPZmZzZXQrK10gPSAweEFDOworICAgICAgICBkc3REYXRhW2RzdE9mZnNldCsrXSA9IDB4NDA7CisgICAgICAgIGRzdERhdGFbZHN0T2Zmc2V0KytdID0gMHhGRjsKKyAgICAgICAgZHN0RGF0YVtkc3RPZmZzZXQrK10gPSAweEZGOworICAgICAgICBkc3REYXRhW2RzdE9mZnNldCsrXSA9ICh1aW50OF90KSgoc2l6ZSA+PiAxNikgJiAweEZGKTsKKyAgICAgICAgZHN0RGF0YVtkc3RPZmZzZXQrK10gPSAodWludDhfdCkoKHNpemUgPj4gOCkgJiAweEZGKTsKKyAgICAgICAgZHN0RGF0YVtkc3RPZmZzZXQrK10gPSAodWludDhfdCkoKHNpemUgPj4gMCkgJiAweEZGKTsKKworICAgICAgICBzc2l6ZV90IG51bUJ5dGVzUmVhZCA9IG1EYXRhU291cmNlLT5yZWFkQXQob2Zmc2V0LCBkc3REYXRhICsgZHN0T2Zmc2V0LCBzaXplKTsKKyAgICAgICAgaWYgKG51bUJ5dGVzUmVhZCAhPSAoc3NpemVfdClzaXplKSB7CisgICAgICAgICAgICBtQnVmZmVyLT5yZWxlYXNlKCk7CisgICAgICAgICAgICBtQnVmZmVyID0gTlVMTDsKKworICAgICAgICAgICAgcmV0dXJuIEFNRURJQV9FUlJPUl9JTzsKKyAgICAgICAgfQorCisgICAgICAgIG1CdWZmZXItPnNldF9yYW5nZSgwLCBkc3RPZmZzZXQgKyBzaXplKTsKKyAgICAgICAgbUJ1ZmZlci0+bWV0YV9kYXRhKCkuY2xlYXIoKTsKKyAgICAgICAgbUJ1ZmZlci0+bWV0YV9kYXRhKCkuc2V0SW50NjQoCisgICAgICAgICAgICAgICAga0tleVRpbWUsICgoaW50NjRfdCljdHMgKiAxMDAwMDAwKSAvIG1UaW1lc2NhbGUpOworICAgICAgICBtQnVmZmVyLT5tZXRhX2RhdGEoKS5zZXRJbnQ2NCgKKyAgICAgICAgICAgICAgICBrS2V5RHVyYXRpb24sICgoaW50NjRfdClzdHRzICogMTAwMDAwMCkgLyBtVGltZXNjYWxlKTsKKworICAgICAgICBpZiAodGFyZ2V0U2FtcGxlVGltZVVzID49IDApIHsKKyAgICAgICAgICAgIG1CdWZmZXItPm1ldGFfZGF0YSgpLnNldEludDY0KAorICAgICAgICAgICAgICAgICAgICBrS2V5VGFyZ2V0VGltZSwgdGFyZ2V0U2FtcGxlVGltZVVzKTsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChpc1N5bmNTYW1wbGUpIHsKKyAgICAgICAgICAgIG1CdWZmZXItPm1ldGFfZGF0YSgpLnNldEludDMyKGtLZXlJc1N5bmNGcmFtZSwgMSk7CisgICAgICAgIH0KKworICAgICAgICArK21DdXJyZW50U2FtcGxlSW5kZXg7CisKKyAgICAgICAgKm91dCA9IG1CdWZmZXI7CisgICAgICAgIG1CdWZmZXIgPSBOVUxMOworCisgICAgICAgIHJldHVybiBBTUVESUFfT0s7CiAgICAgfSBlbHNlIHsKICAgICAgICAgLy8gV2hvbGUgTkFMIHVuaXRzIGFyZSByZXR1cm5lZCBidXQgZWFjaCBmcmFnbWVudCBpcyBwcmVmaXhlZCBieQogICAgICAgICAvLyB0aGUgc3RhcnQgY29kZSAoMHgwMCAwMCAwMCAwMSkuCiAgICAgICAgIHNzaXplX3QgbnVtX2J5dGVzX3JlYWQgPSAwOwotICAgICAgICBpbnQzMl90IGRybSA9IDA7Ci0gICAgICAgIGJvb2wgdXNlc0RSTSA9IChtRm9ybWF0LmZpbmRJbnQzMihrS2V5SXNEUk0sICZkcm0pICYmIGRybSAhPSAwKTsKLSAgICAgICAgaWYgKHVzZXNEUk0pIHsKLSAgICAgICAgICAgIG51bV9ieXRlc19yZWFkID0KLSAgICAgICAgICAgICAgICBtRGF0YVNvdXJjZS0+cmVhZEF0KG9mZnNldCwgKHVpbnQ4X3QqKW1CdWZmZXItPmRhdGEoKSwgc2l6ZSk7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBudW1fYnl0ZXNfcmVhZCA9IG1EYXRhU291cmNlLT5yZWFkQXQob2Zmc2V0LCBtU3JjQnVmZmVyLCBzaXplKTsKLSAgICAgICAgfQorICAgICAgICBudW1fYnl0ZXNfcmVhZCA9IG1EYXRhU291cmNlLT5yZWFkQXQob2Zmc2V0LCBtU3JjQnVmZmVyLCBzaXplKTsKIAogICAgICAgICBpZiAobnVtX2J5dGVzX3JlYWQgPCAoc3NpemVfdClzaXplKSB7CiAgICAgICAgICAgICBtQnVmZmVyLT5yZWxlYXNlKCk7CiAgICAgICAgICAgICBtQnVmZmVyID0gTlVMTDsKIAotICAgICAgICAgICAgcmV0dXJuIEVSUk9SX0lPOworICAgICAgICAgICAgcmV0dXJuIEFNRURJQV9FUlJPUl9JTzsKICAgICAgICAgfQogCi0gICAgICAgIGlmICh1c2VzRFJNKSB7Ci0gICAgICAgICAgICBDSEVDSyhtQnVmZmVyICE9IE5VTEwpOwotICAgICAgICAgICAgbUJ1ZmZlci0+c2V0X3JhbmdlKDAsIHNpemUpOworICAgICAgICB1aW50OF90ICpkc3REYXRhID0gKHVpbnQ4X3QgKiltQnVmZmVyLT5kYXRhKCk7CisgICAgICAgIHNpemVfdCBzcmNPZmZzZXQgPSAwOworICAgICAgICBzaXplX3QgZHN0T2Zmc2V0ID0gMDsKIAotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgdWludDhfdCAqZHN0RGF0YSA9ICh1aW50OF90ICopbUJ1ZmZlci0+ZGF0YSgpOwotICAgICAgICAgICAgc2l6ZV90IHNyY09mZnNldCA9IDA7Ci0gICAgICAgICAgICBzaXplX3QgZHN0T2Zmc2V0ID0gMDsKLQotICAgICAgICAgICAgd2hpbGUgKHNyY09mZnNldCA8IHNpemUpIHsKLSAgICAgICAgICAgICAgICBib29sIGlzTWFsRm9ybWVkID0gIWlzSW5SYW5nZSgoc2l6ZV90KTB1LCBzaXplLCBzcmNPZmZzZXQsIG1OQUxMZW5ndGhTaXplKTsKLSAgICAgICAgICAgICAgICBzaXplX3QgbmFsTGVuZ3RoID0gMDsKLSAgICAgICAgICAgICAgICBpZiAoIWlzTWFsRm9ybWVkKSB7Ci0gICAgICAgICAgICAgICAgICAgIG5hbExlbmd0aCA9IHBhcnNlTkFMU2l6ZSgmbVNyY0J1ZmZlcltzcmNPZmZzZXRdKTsKLSAgICAgICAgICAgICAgICAgICAgc3JjT2Zmc2V0ICs9IG1OQUxMZW5ndGhTaXplOwotICAgICAgICAgICAgICAgICAgICBpc01hbEZvcm1lZCA9ICFpc0luUmFuZ2UoKHNpemVfdCkwdSwgc2l6ZSwgc3JjT2Zmc2V0LCBuYWxMZW5ndGgpOwotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIGlmIChpc01hbEZvcm1lZCkgewotICAgICAgICAgICAgICAgICAgICBBTE9HRSgiVmlkZW8gaXMgbWFsZm9ybWVkIik7Ci0gICAgICAgICAgICAgICAgICAgIG1CdWZmZXItPnJlbGVhc2UoKTsKLSAgICAgICAgICAgICAgICAgICAgbUJ1ZmZlciA9IE5VTEw7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBFUlJPUl9NQUxGT1JNRUQ7Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgaWYgKG5hbExlbmd0aCA9PSAwKSB7Ci0gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIGlmIChkc3RPZmZzZXQgPiBTSVpFX01BWCAtIDQgfHwKLSAgICAgICAgICAgICAgICAgICAgICAgIGRzdE9mZnNldCArIDQgPiBTSVpFX01BWCAtIG5hbExlbmd0aCB8fAotICAgICAgICAgICAgICAgICAgICAgICAgZHN0T2Zmc2V0ICsgNCArIG5hbExlbmd0aCA+IG1CdWZmZXItPnNpemUoKSkgewotICAgICAgICAgICAgICAgICAgICBBTE9HRSgiYi8yNzIwODYyMSA6ICV6dSAlenUiLCBkc3RPZmZzZXQsIG1CdWZmZXItPnNpemUoKSk7Ci0gICAgICAgICAgICAgICAgICAgIGFuZHJvaWRfZXJyb3JXcml0ZUxvZygweDUzNGU0NTU0LCAiMjcyMDg2MjEiKTsKLSAgICAgICAgICAgICAgICAgICAgbUJ1ZmZlci0+cmVsZWFzZSgpOwotICAgICAgICAgICAgICAgICAgICBtQnVmZmVyID0gTlVMTDsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEVSUk9SX01BTEZPUk1FRDsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICBkc3REYXRhW2RzdE9mZnNldCsrXSA9IDA7Ci0gICAgICAgICAgICAgICAgZHN0RGF0YVtkc3RPZmZzZXQrK10gPSAwOwotICAgICAgICAgICAgICAgIGRzdERhdGFbZHN0T2Zmc2V0KytdID0gMDsKLSAgICAgICAgICAgICAgICBkc3REYXRhW2RzdE9mZnNldCsrXSA9IDE7Ci0gICAgICAgICAgICAgICAgbWVtY3B5KCZkc3REYXRhW2RzdE9mZnNldF0sICZtU3JjQnVmZmVyW3NyY09mZnNldF0sIG5hbExlbmd0aCk7Ci0gICAgICAgICAgICAgICAgc3JjT2Zmc2V0ICs9IG5hbExlbmd0aDsKLSAgICAgICAgICAgICAgICBkc3RPZmZzZXQgKz0gbmFsTGVuZ3RoOworICAgICAgICB3aGlsZSAoc3JjT2Zmc2V0IDwgc2l6ZSkgeworICAgICAgICAgICAgYm9vbCBpc01hbEZvcm1lZCA9ICFpc0luUmFuZ2UoKHNpemVfdCkwdSwgc2l6ZSwgc3JjT2Zmc2V0LCBtTkFMTGVuZ3RoU2l6ZSk7CisgICAgICAgICAgICBzaXplX3QgbmFsTGVuZ3RoID0gMDsKKyAgICAgICAgICAgIGlmICghaXNNYWxGb3JtZWQpIHsKKyAgICAgICAgICAgICAgICBuYWxMZW5ndGggPSBwYXJzZU5BTFNpemUoJm1TcmNCdWZmZXJbc3JjT2Zmc2V0XSk7CisgICAgICAgICAgICAgICAgc3JjT2Zmc2V0ICs9IG1OQUxMZW5ndGhTaXplOworICAgICAgICAgICAgICAgIGlzTWFsRm9ybWVkID0gIWlzSW5SYW5nZSgoc2l6ZV90KTB1LCBzaXplLCBzcmNPZmZzZXQsIG5hbExlbmd0aCk7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBDSEVDS19FUShzcmNPZmZzZXQsIHNpemUpOwotICAgICAgICAgICAgQ0hFQ0sobUJ1ZmZlciAhPSBOVUxMKTsKLSAgICAgICAgICAgIG1CdWZmZXItPnNldF9yYW5nZSgwLCBkc3RPZmZzZXQpOworCisgICAgICAgICAgICBpZiAoaXNNYWxGb3JtZWQpIHsKKyAgICAgICAgICAgICAgICBBTE9HRSgiVmlkZW8gaXMgbWFsZm9ybWVkIik7CisgICAgICAgICAgICAgICAgbUJ1ZmZlci0+cmVsZWFzZSgpOworICAgICAgICAgICAgICAgIG1CdWZmZXIgPSBOVUxMOworICAgICAgICAgICAgICAgIHJldHVybiBBTUVESUFfRVJST1JfTUFMRk9STUVEOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAobmFsTGVuZ3RoID09IDApIHsKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKGRzdE9mZnNldCA+IFNJWkVfTUFYIC0gNCB8fAorICAgICAgICAgICAgICAgICAgICBkc3RPZmZzZXQgKyA0ID4gU0laRV9NQVggLSBuYWxMZW5ndGggfHwKKyAgICAgICAgICAgICAgICAgICAgZHN0T2Zmc2V0ICsgNCArIG5hbExlbmd0aCA+IG1CdWZmZXItPnNpemUoKSkgeworICAgICAgICAgICAgICAgIEFMT0dFKCJiLzI3MjA4NjIxIDogJXp1ICV6dSIsIGRzdE9mZnNldCwgbUJ1ZmZlci0+c2l6ZSgpKTsKKyAgICAgICAgICAgICAgICBhbmRyb2lkX2Vycm9yV3JpdGVMb2coMHg1MzRlNDU1NCwgIjI3MjA4NjIxIik7CisgICAgICAgICAgICAgICAgbUJ1ZmZlci0+cmVsZWFzZSgpOworICAgICAgICAgICAgICAgIG1CdWZmZXIgPSBOVUxMOworICAgICAgICAgICAgICAgIHJldHVybiBBTUVESUFfRVJST1JfTUFMRk9STUVEOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBkc3REYXRhW2RzdE9mZnNldCsrXSA9IDA7CisgICAgICAgICAgICBkc3REYXRhW2RzdE9mZnNldCsrXSA9IDA7CisgICAgICAgICAgICBkc3REYXRhW2RzdE9mZnNldCsrXSA9IDA7CisgICAgICAgICAgICBkc3REYXRhW2RzdE9mZnNldCsrXSA9IDE7CisgICAgICAgICAgICBtZW1jcHkoJmRzdERhdGFbZHN0T2Zmc2V0XSwgJm1TcmNCdWZmZXJbc3JjT2Zmc2V0XSwgbmFsTGVuZ3RoKTsKKyAgICAgICAgICAgIHNyY09mZnNldCArPSBuYWxMZW5ndGg7CisgICAgICAgICAgICBkc3RPZmZzZXQgKz0gbmFsTGVuZ3RoOwogICAgICAgICB9CisgICAgICAgIENIRUNLX0VRKHNyY09mZnNldCwgc2l6ZSk7CisgICAgICAgIENIRUNLKG1CdWZmZXIgIT0gTlVMTCk7CisgICAgICAgIG1CdWZmZXItPnNldF9yYW5nZSgwLCBkc3RPZmZzZXQpOwogCiAgICAgICAgIG1CdWZmZXItPm1ldGFfZGF0YSgpLmNsZWFyKCk7CiAgICAgICAgIG1CdWZmZXItPm1ldGFfZGF0YSgpLnNldEludDY0KApAQCAtNTE3NCw2ICs1NjA4LDEyIEBACiAgICAgICAgICAgICB1aW50MzJfdCBsYXllcklkID0gRmluZEFWQ0xheWVySWQoCiAgICAgICAgICAgICAgICAgICAgIChjb25zdCB1aW50OF90ICopbUJ1ZmZlci0+ZGF0YSgpLCBtQnVmZmVyLT5yYW5nZV9sZW5ndGgoKSk7CiAgICAgICAgICAgICBtQnVmZmVyLT5tZXRhX2RhdGEoKS5zZXRJbnQzMihrS2V5VGVtcG9yYWxMYXllcklkLCBsYXllcklkKTsKKyAgICAgICAgfSBlbHNlIGlmIChtSXNIRVZDKSB7CisgICAgICAgICAgICBpbnQzMl90IGxheWVySWQgPSBwYXJzZUhFVkNMYXllcklkKAorICAgICAgICAgICAgICAgICAgICAoY29uc3QgdWludDhfdCAqKW1CdWZmZXItPmRhdGEoKSwgbUJ1ZmZlci0+cmFuZ2VfbGVuZ3RoKCkpOworICAgICAgICAgICAgaWYgKGxheWVySWQgPj0gMCkgeworICAgICAgICAgICAgICAgIG1CdWZmZXItPm1ldGFfZGF0YSgpLnNldEludDMyKGtLZXlUZW1wb3JhbExheWVySWQsIGxheWVySWQpOworICAgICAgICAgICAgfQogICAgICAgICB9CiAKICAgICAgICAgaWYgKGlzU3luY1NhbXBsZSkgewpAQCAtNTE4NSwxMSArNTYyNSwxMSBAQAogICAgICAgICAqb3V0ID0gbUJ1ZmZlcjsKICAgICAgICAgbUJ1ZmZlciA9IE5VTEw7CiAKLSAgICAgICAgcmV0dXJuIE9LOworICAgICAgICByZXR1cm4gQU1FRElBX09LOwogICAgIH0KIH0KIAotc3RhdHVzX3QgTVBFRzRTb3VyY2U6OmZyYWdtZW50ZWRSZWFkKAorbWVkaWFfc3RhdHVzX3QgTVBFRzRTb3VyY2U6OmZyYWdtZW50ZWRSZWFkKAogICAgICAgICBNZWRpYUJ1ZmZlckJhc2UgKipvdXQsIGNvbnN0IFJlYWRPcHRpb25zICpvcHRpb25zKSB7CiAKICAgICBBTE9HVigiTVBFRzRTb3VyY2U6OmZyYWdtZW50ZWRSZWFkIik7CkBAIC01MjMxLDcgKzU2NzEsNyBAQAogICAgICAgICAgICAgbUN1cnJlbnRTYW1wbGVJbmRleCA9IDA7CiAgICAgICAgICAgICBzdGF0dXNfdCBlcnIgPSBwYXJzZUNodW5rKCZ0b3RhbE9mZnNldCk7CiAgICAgICAgICAgICBpZiAoZXJyICE9IE9LKSB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGVycjsKKyAgICAgICAgICAgICAgICByZXR1cm4gQU1FRElBX0VSUk9SX1VOS05PV047CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBtQ3VycmVudFRpbWUgPSB0b3RhbFRpbWUgKiBtVGltZXNjYWxlIC8gMTAwMDAwMGxsOwogICAgICAgICB9IGVsc2UgewpAQCAtNTI0Myw3ICs1NjgzLDcgQEAKICAgICAgICAgICAgIG9mZjY0X3QgdG1wID0gbUN1cnJlbnRNb29mT2Zmc2V0OwogICAgICAgICAgICAgc3RhdHVzX3QgZXJyID0gcGFyc2VDaHVuaygmdG1wKTsKICAgICAgICAgICAgIGlmIChlcnIgIT0gT0spIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gZXJyOworICAgICAgICAgICAgICAgIHJldHVybiBBTUVESUFfRVJST1JfVU5LTk9XTjsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIG1DdXJyZW50VGltZSA9IDA7CiAgICAgICAgIH0KQEAgLTUyNjEsMTMgKzU3MDEsMTcgQEAKICAgICB1aW50MzJfdCBjdHMgPSAwOwogICAgIGJvb2wgaXNTeW5jU2FtcGxlID0gZmFsc2U7CiAgICAgYm9vbCBuZXdCdWZmZXIgPSBmYWxzZTsKLSAgICBpZiAobUJ1ZmZlciA9PSBOVUxMKSB7CisgICAgaWYgKG1CdWZmZXIgPT0gTlVMTCB8fCBtQ3VycmVudFNhbXBsZUluZGV4ID49IG1DdXJyZW50U2FtcGxlcy5zaXplKCkpIHsKICAgICAgICAgbmV3QnVmZmVyID0gdHJ1ZTsKIAorICAgICAgICBpZiAobUJ1ZmZlciAhPSBOVUxMKSB7CisgICAgICAgICAgICBtQnVmZmVyLT5yZWxlYXNlKCk7CisgICAgICAgICAgICBtQnVmZmVyID0gTlVMTDsKKyAgICAgICAgfQogICAgICAgICBpZiAobUN1cnJlbnRTYW1wbGVJbmRleCA+PSBtQ3VycmVudFNhbXBsZXMuc2l6ZSgpKSB7CiAgICAgICAgICAgICAvLyBtb3ZlIHRvIG5leHQgZnJhZ21lbnQgaWYgdGhlcmUgaXMgb25lCiAgICAgICAgICAgICBpZiAobU5leHRNb29mT2Zmc2V0IDw9IG1DdXJyZW50TW9vZk9mZnNldCkgewotICAgICAgICAgICAgICAgIHJldHVybiBFUlJPUl9FTkRfT0ZfU1RSRUFNOworICAgICAgICAgICAgICAgIHJldHVybiBBTUVESUFfRVJST1JfRU5EX09GX1NUUkVBTTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIG9mZjY0X3QgbmV4dE1vb2YgPSBtTmV4dE1vb2ZPZmZzZXQ7CiAgICAgICAgICAgICBtQ3VycmVudE1vb2ZPZmZzZXQgPSBuZXh0TW9vZjsKQEAgLTUyNzUsMTAgKzU3MTksMTAgQEAKICAgICAgICAgICAgIG1DdXJyZW50U2FtcGxlSW5kZXggPSAwOwogICAgICAgICAgICAgc3RhdHVzX3QgZXJyID0gcGFyc2VDaHVuaygmbmV4dE1vb2YpOwogICAgICAgICAgICAgaWYgKGVyciAhPSBPSykgewotICAgICAgICAgICAgICAgIHJldHVybiBlcnI7CisgICAgICAgICAgICAgICAgcmV0dXJuIEFNRURJQV9FUlJPUl9VTktOT1dOOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgaWYgKG1DdXJyZW50U2FtcGxlSW5kZXggPj0gbUN1cnJlbnRTYW1wbGVzLnNpemUoKSkgewotICAgICAgICAgICAgICAgIHJldHVybiBFUlJPUl9FTkRfT0ZfU1RSRUFNOworICAgICAgICAgICAgICAgIHJldHVybiBBTUVESUFfRVJST1JfRU5EX09GX1NUUkVBTTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQogCkBAIC01Mjg3LDIwICs1NzMxLDIwIEBACiAgICAgICAgIHNpemUgPSBzbXBsLT5zaXplOwogICAgICAgICBjdHMgPSBtQ3VycmVudFRpbWUgKyBzbXBsLT5jb21wb3NpdGlvbk9mZnNldDsKICAgICAgICAgbUN1cnJlbnRUaW1lICs9IHNtcGwtPmR1cmF0aW9uOwotICAgICAgICBpc1N5bmNTYW1wbGUgPSAobUN1cnJlbnRTYW1wbGVJbmRleCA9PSAwKTsgLy8gWFhYCisgICAgICAgIGlzU3luY1NhbXBsZSA9IChtQ3VycmVudFNhbXBsZUluZGV4ID09IDApOwogCiAgICAgICAgIHN0YXR1c190IGVyciA9IG1Hcm91cC0+YWNxdWlyZV9idWZmZXIoJm1CdWZmZXIpOwogCiAgICAgICAgIGlmIChlcnIgIT0gT0spIHsKICAgICAgICAgICAgIENIRUNLKG1CdWZmZXIgPT0gTlVMTCk7CiAgICAgICAgICAgICBBTE9HVigiYWNxdWlyZV9idWZmZXIgcmV0dXJuZWQgJWQiLCBlcnIpOwotICAgICAgICAgICAgcmV0dXJuIGVycjsKKyAgICAgICAgICAgIHJldHVybiBBTUVESUFfRVJST1JfVU5LTk9XTjsKICAgICAgICAgfQogICAgICAgICBpZiAoc2l6ZSA+IG1CdWZmZXItPnNpemUoKSkgewogICAgICAgICAgICAgQUxPR0UoImJ1ZmZlciB0b28gc21hbGw6ICV6dSA+ICV6dSIsIHNpemUsIG1CdWZmZXItPnNpemUoKSk7CiAgICAgICAgICAgICBtQnVmZmVyLT5yZWxlYXNlKCk7CiAgICAgICAgICAgICBtQnVmZmVyID0gTlVMTDsKLSAgICAgICAgICAgIHJldHVybiBFUlJPUl9CVUZGRVJfVE9PX1NNQUxMOworICAgICAgICAgICAgcmV0dXJuIEFNRURJQV9FUlJPUl9VTktOT1dOOwogICAgICAgICB9CiAgICAgfQogCkBAIC01MzE5LDI2ICs1NzYzLDI1IEBACiAgICAgICAgIGJ1Zm1ldGEuc2V0SW50MzIoa0tleUVuY3J5cHRlZEJ5dGVCbG9jaywgbURlZmF1bHRFbmNyeXB0ZWRCeXRlQmxvY2spOwogICAgICAgICBidWZtZXRhLnNldEludDMyKGtLZXlTa2lwQnl0ZUJsb2NrLCBtRGVmYXVsdFNraXBCeXRlQmxvY2spOwogCi0gICAgICAgIHVpbnQzMl90IHR5cGUgPSAwOwotICAgICAgICBjb25zdCB2b2lkICppdiA9IE5VTEw7CisgICAgICAgIHZvaWQgKml2ID0gTlVMTDsKICAgICAgICAgc2l6ZV90IGl2bGVuZ3RoID0gMDsKLSAgICAgICAgaWYgKCFtRm9ybWF0LmZpbmREYXRhKAotICAgICAgICAgICAgICAgIGtLZXlDcnlwdG9JViwgJnR5cGUsICZpdiwgJml2bGVuZ3RoKSkgewotICAgICAgICAgICAgaXYgPSBzbXBsLT5pdjsKKyAgICAgICAgaWYgKCFBTWVkaWFGb3JtYXRfZ2V0QnVmZmVyKG1Gb3JtYXQsCisgICAgICAgICAgICAgICAgImNyeXB0by1pdiIsICZpdiwgJml2bGVuZ3RoKSkgeworICAgICAgICAgICAgaXYgPSAodm9pZCAqKSBzbXBsLT5pdjsKICAgICAgICAgICAgIGl2bGVuZ3RoID0gMTY7IC8vIHVzZSAxNiBvciB0aGUgYWN0dWFsIHNpemU/CiAgICAgICAgIH0KICAgICAgICAgYnVmbWV0YS5zZXREYXRhKGtLZXlDcnlwdG9JViwgMCwgaXYsIGl2bGVuZ3RoKTsKIAogICAgIH0KIAotICAgIGlmICgoIW1Jc0FWQyAmJiAhbUlzSEVWQyl8fCBtV2FudHNOQUxGcmFnbWVudHMpIHsKKyAgICBpZiAoKCFtSXNBVkMgJiYgIW1Jc0hFVkMpKSB7CiAgICAgICAgIGlmIChuZXdCdWZmZXIpIHsKICAgICAgICAgICAgIGlmICghaXNJblJhbmdlKChzaXplX3QpMHUsIG1CdWZmZXItPnNpemUoKSwgc2l6ZSkpIHsKICAgICAgICAgICAgICAgICBtQnVmZmVyLT5yZWxlYXNlKCk7CiAgICAgICAgICAgICAgICAgbUJ1ZmZlciA9IE5VTEw7CiAKICAgICAgICAgICAgICAgICBBTE9HRSgiZnJhZ21lbnRlZFJlYWQgRVJST1JfTUFMRk9STUVEIHNpemUgJXp1Iiwgc2l6ZSk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIEVSUk9SX01BTEZPUk1FRDsKKyAgICAgICAgICAgICAgICByZXR1cm4gQU1FRElBX0VSUk9SX01BTEZPUk1FRDsKICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgc3NpemVfdCBudW1fYnl0ZXNfcmVhZCA9CkBAIC01MzQ5LDcgKzU3OTIsNyBAQAogICAgICAgICAgICAgICAgIG1CdWZmZXIgPSBOVUxMOwogCiAgICAgICAgICAgICAgICAgQUxPR0UoImkvbyBlcnJvciIpOwotICAgICAgICAgICAgICAgIHJldHVybiBFUlJPUl9JTzsKKyAgICAgICAgICAgICAgICByZXR1cm4gQU1FRElBX0VSUk9SX0lPOwogICAgICAgICAgICAgfQogCiAgICAgICAgICAgICBDSEVDSyhtQnVmZmVyICE9IE5VTEwpOwpAQCAtNTM2OCw2ICs1ODExLDEyIEBACiAgICAgICAgICAgICAgICAgdWludDMyX3QgbGF5ZXJJZCA9IEZpbmRBVkNMYXllcklkKAogICAgICAgICAgICAgICAgICAgICAgICAgKGNvbnN0IHVpbnQ4X3QgKiltQnVmZmVyLT5kYXRhKCksIG1CdWZmZXItPnJhbmdlX2xlbmd0aCgpKTsKICAgICAgICAgICAgICAgICBtQnVmZmVyLT5tZXRhX2RhdGEoKS5zZXRJbnQzMihrS2V5VGVtcG9yYWxMYXllcklkLCBsYXllcklkKTsKKyAgICAgICAgICAgIH0gZWxzZSBpZiAobUlzSEVWQykgeworICAgICAgICAgICAgICAgIGludDMyX3QgbGF5ZXJJZCA9IHBhcnNlSEVWQ0xheWVySWQoCisgICAgICAgICAgICAgICAgICAgICAgICAoY29uc3QgdWludDhfdCAqKW1CdWZmZXItPmRhdGEoKSwgbUJ1ZmZlci0+cmFuZ2VfbGVuZ3RoKCkpOworICAgICAgICAgICAgICAgIGlmIChsYXllcklkID49IDApIHsKKyAgICAgICAgICAgICAgICAgICAgbUJ1ZmZlci0+bWV0YV9kYXRhKCkuc2V0SW50MzIoa0tleVRlbXBvcmFsTGF5ZXJJZCwgbGF5ZXJJZCk7CisgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQogCiAgICAgICAgICAgICBpZiAoaXNTeW5jU2FtcGxlKSB7CkBAIC01MzgxLDcgKzU4MzAsNyBAQAogICAgICAgICAgICAgKm91dCA9IG1CdWZmZXI7CiAgICAgICAgICAgICBtQnVmZmVyID0gTlVMTDsKIAotICAgICAgICAgICAgcmV0dXJuIE9LOworICAgICAgICAgICAgcmV0dXJuIEFNRURJQV9PSzsKICAgICAgICAgfQogCiAgICAgICAgIC8vIEVhY2ggTkFMIHVuaXQgaXMgc3BsaXQgdXAgaW50byBpdHMgY29uc3RpdHVlbnQgZnJhZ21lbnRzIGFuZApAQCAtNTQwMyw3ICs1ODUyLDcgQEAKICAgICAgICAgICAgIG1CdWZmZXItPnJlbGVhc2UoKTsKICAgICAgICAgICAgIG1CdWZmZXIgPSBOVUxMOwogCi0gICAgICAgICAgICByZXR1cm4gRVJST1JfTUFMRk9STUVEOworICAgICAgICAgICAgcmV0dXJuIEFNRURJQV9FUlJPUl9NQUxGT1JNRUQ7CiAgICAgICAgIH0KIAogICAgICAgICBNZWRpYUJ1ZmZlckJhc2UgKmNsb25lID0gbUJ1ZmZlci0+Y2xvbmUoKTsKQEAgLTU0MjIsMzAgKzU4NzEsMjAgQEAKIAogICAgICAgICAqb3V0ID0gY2xvbmU7CiAKLSAgICAgICAgcmV0dXJuIE9LOworICAgICAgICByZXR1cm4gQU1FRElBX09LOwogICAgIH0gZWxzZSB7CiAgICAgICAgIEFMT0dWKCJ3aG9sZSBOQUwiKTsKICAgICAgICAgLy8gV2hvbGUgTkFMIHVuaXRzIGFyZSByZXR1cm5lZCBidXQgZWFjaCBmcmFnbWVudCBpcyBwcmVmaXhlZCBieQogICAgICAgICAvLyB0aGUgc3RhcnQgY29kZSAoMHgwMCAwMCAwMCAwMSkuCiAgICAgICAgIHNzaXplX3QgbnVtX2J5dGVzX3JlYWQgPSAwOwotICAgICAgICBpbnQzMl90IGRybSA9IDA7Ci0gICAgICAgIGJvb2wgdXNlc0RSTSA9IChtRm9ybWF0LmZpbmRJbnQzMihrS2V5SXNEUk0sICZkcm0pICYmIGRybSAhPSAwKTsKICAgICAgICAgdm9pZCAqZGF0YSA9IE5VTEw7CiAgICAgICAgIGJvb2wgaXNNYWxGb3JtZWQgPSBmYWxzZTsKLSAgICAgICAgaWYgKHVzZXNEUk0pIHsKLSAgICAgICAgICAgIGlmIChtQnVmZmVyID09IE5VTEwgfHwgIWlzSW5SYW5nZSgoc2l6ZV90KTB1LCBtQnVmZmVyLT5zaXplKCksIHNpemUpKSB7Ci0gICAgICAgICAgICAgICAgaXNNYWxGb3JtZWQgPSB0cnVlOwotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICBkYXRhID0gbUJ1ZmZlci0+ZGF0YSgpOwotICAgICAgICAgICAgfQorICAgICAgICBpbnQzMl90IG1heF9zaXplOworICAgICAgICBpZiAoIUFNZWRpYUZvcm1hdF9nZXRJbnQzMihtRm9ybWF0LCBBTUVESUFGT1JNQVRfS0VZX01BWF9JTlBVVF9TSVpFLCAmbWF4X3NpemUpCisgICAgICAgICAgICAgICAgfHwgIWlzSW5SYW5nZSgoc2l6ZV90KTB1LCAoc2l6ZV90KW1heF9zaXplLCBzaXplKSkgeworICAgICAgICAgICAgaXNNYWxGb3JtZWQgPSB0cnVlOwogICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgaW50MzJfdCBtYXhfc2l6ZTsKLSAgICAgICAgICAgIGlmICghbUZvcm1hdC5maW5kSW50MzIoa0tleU1heElucHV0U2l6ZSwgJm1heF9zaXplKQotICAgICAgICAgICAgICAgICAgICB8fCAhaXNJblJhbmdlKChzaXplX3QpMHUsIChzaXplX3QpbWF4X3NpemUsIHNpemUpKSB7Ci0gICAgICAgICAgICAgICAgaXNNYWxGb3JtZWQgPSB0cnVlOwotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICBkYXRhID0gbVNyY0J1ZmZlcjsKLSAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGRhdGEgPSBtU3JjQnVmZmVyOwogICAgICAgICB9CiAKICAgICAgICAgaWYgKGlzTWFsRm9ybWVkIHx8IGRhdGEgPT0gTlVMTCkgewpAQCAtNTQ1NCw3ICs1ODkzLDcgQEAKICAgICAgICAgICAgICAgICBtQnVmZmVyLT5yZWxlYXNlKCk7CiAgICAgICAgICAgICAgICAgbUJ1ZmZlciA9IE5VTEw7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICByZXR1cm4gRVJST1JfTUFMRk9STUVEOworICAgICAgICAgICAgcmV0dXJuIEFNRURJQV9FUlJPUl9NQUxGT1JNRUQ7CiAgICAgICAgIH0KICAgICAgICAgbnVtX2J5dGVzX3JlYWQgPSBtRGF0YVNvdXJjZS0+cmVhZEF0KG9mZnNldCwgZGF0YSwgc2l6ZSk7CiAKQEAgLTU0NjMsNjIgKzU5MDIsNTYgQEAKICAgICAgICAgICAgIG1CdWZmZXIgPSBOVUxMOwogCiAgICAgICAgICAgICBBTE9HRSgiaS9vIGVycm9yIik7Ci0gICAgICAgICAgICByZXR1cm4gRVJST1JfSU87CisgICAgICAgICAgICByZXR1cm4gQU1FRElBX0VSUk9SX0lPOwogICAgICAgICB9CiAKLSAgICAgICAgaWYgKHVzZXNEUk0pIHsKLSAgICAgICAgICAgIENIRUNLKG1CdWZmZXIgIT0gTlVMTCk7Ci0gICAgICAgICAgICBtQnVmZmVyLT5zZXRfcmFuZ2UoMCwgc2l6ZSk7CisgICAgICAgIHVpbnQ4X3QgKmRzdERhdGEgPSAodWludDhfdCAqKW1CdWZmZXItPmRhdGEoKTsKKyAgICAgICAgc2l6ZV90IHNyY09mZnNldCA9IDA7CisgICAgICAgIHNpemVfdCBkc3RPZmZzZXQgPSAwOwogCi0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICB1aW50OF90ICpkc3REYXRhID0gKHVpbnQ4X3QgKiltQnVmZmVyLT5kYXRhKCk7Ci0gICAgICAgICAgICBzaXplX3Qgc3JjT2Zmc2V0ID0gMDsKLSAgICAgICAgICAgIHNpemVfdCBkc3RPZmZzZXQgPSAwOwotCi0gICAgICAgICAgICB3aGlsZSAoc3JjT2Zmc2V0IDwgc2l6ZSkgewotICAgICAgICAgICAgICAgIGlzTWFsRm9ybWVkID0gIWlzSW5SYW5nZSgoc2l6ZV90KTB1LCBzaXplLCBzcmNPZmZzZXQsIG1OQUxMZW5ndGhTaXplKTsKLSAgICAgICAgICAgICAgICBzaXplX3QgbmFsTGVuZ3RoID0gMDsKLSAgICAgICAgICAgICAgICBpZiAoIWlzTWFsRm9ybWVkKSB7Ci0gICAgICAgICAgICAgICAgICAgIG5hbExlbmd0aCA9IHBhcnNlTkFMU2l6ZSgmbVNyY0J1ZmZlcltzcmNPZmZzZXRdKTsKLSAgICAgICAgICAgICAgICAgICAgc3JjT2Zmc2V0ICs9IG1OQUxMZW5ndGhTaXplOwotICAgICAgICAgICAgICAgICAgICBpc01hbEZvcm1lZCA9ICFpc0luUmFuZ2UoKHNpemVfdCkwdSwgc2l6ZSwgc3JjT2Zmc2V0LCBuYWxMZW5ndGgpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgfHwgIWlzSW5SYW5nZSgoc2l6ZV90KTB1LCBtQnVmZmVyLT5zaXplKCksIGRzdE9mZnNldCwgKHNpemVfdCk0dSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB8fCAhaXNJblJhbmdlKChzaXplX3QpMHUsIG1CdWZmZXItPnNpemUoKSwgZHN0T2Zmc2V0ICsgNCwgbmFsTGVuZ3RoKTsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICBpZiAoaXNNYWxGb3JtZWQpIHsKLSAgICAgICAgICAgICAgICAgICAgQUxPR0UoIlZpZGVvIGlzIG1hbGZvcm1lZDsgbmFsTGVuZ3RoICV6dSIsIG5hbExlbmd0aCk7Ci0gICAgICAgICAgICAgICAgICAgIG1CdWZmZXItPnJlbGVhc2UoKTsKLSAgICAgICAgICAgICAgICAgICAgbUJ1ZmZlciA9IE5VTEw7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBFUlJPUl9NQUxGT1JNRUQ7Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgaWYgKG5hbExlbmd0aCA9PSAwKSB7Ci0gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIGlmIChkc3RPZmZzZXQgPiBTSVpFX01BWCAtIDQgfHwKLSAgICAgICAgICAgICAgICAgICAgICAgIGRzdE9mZnNldCArIDQgPiBTSVpFX01BWCAtIG5hbExlbmd0aCB8fAotICAgICAgICAgICAgICAgICAgICAgICAgZHN0T2Zmc2V0ICsgNCArIG5hbExlbmd0aCA+IG1CdWZmZXItPnNpemUoKSkgewotICAgICAgICAgICAgICAgICAgICBBTE9HRSgiYi8yNjM2NTM0OSA6ICV6dSAlenUiLCBkc3RPZmZzZXQsIG1CdWZmZXItPnNpemUoKSk7Ci0gICAgICAgICAgICAgICAgICAgIGFuZHJvaWRfZXJyb3JXcml0ZUxvZygweDUzNGU0NTU0LCAiMjYzNjUzNDkiKTsKLSAgICAgICAgICAgICAgICAgICAgbUJ1ZmZlci0+cmVsZWFzZSgpOwotICAgICAgICAgICAgICAgICAgICBtQnVmZmVyID0gTlVMTDsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEVSUk9SX01BTEZPUk1FRDsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICBkc3REYXRhW2RzdE9mZnNldCsrXSA9IDA7Ci0gICAgICAgICAgICAgICAgZHN0RGF0YVtkc3RPZmZzZXQrK10gPSAwOwotICAgICAgICAgICAgICAgIGRzdERhdGFbZHN0T2Zmc2V0KytdID0gMDsKLSAgICAgICAgICAgICAgICBkc3REYXRhW2RzdE9mZnNldCsrXSA9IDE7Ci0gICAgICAgICAgICAgICAgbWVtY3B5KCZkc3REYXRhW2RzdE9mZnNldF0sICZtU3JjQnVmZmVyW3NyY09mZnNldF0sIG5hbExlbmd0aCk7Ci0gICAgICAgICAgICAgICAgc3JjT2Zmc2V0ICs9IG5hbExlbmd0aDsKLSAgICAgICAgICAgICAgICBkc3RPZmZzZXQgKz0gbmFsTGVuZ3RoOworICAgICAgICB3aGlsZSAoc3JjT2Zmc2V0IDwgc2l6ZSkgeworICAgICAgICAgICAgaXNNYWxGb3JtZWQgPSAhaXNJblJhbmdlKChzaXplX3QpMHUsIHNpemUsIHNyY09mZnNldCwgbU5BTExlbmd0aFNpemUpOworICAgICAgICAgICAgc2l6ZV90IG5hbExlbmd0aCA9IDA7CisgICAgICAgICAgICBpZiAoIWlzTWFsRm9ybWVkKSB7CisgICAgICAgICAgICAgICAgbmFsTGVuZ3RoID0gcGFyc2VOQUxTaXplKCZtU3JjQnVmZmVyW3NyY09mZnNldF0pOworICAgICAgICAgICAgICAgIHNyY09mZnNldCArPSBtTkFMTGVuZ3RoU2l6ZTsKKyAgICAgICAgICAgICAgICBpc01hbEZvcm1lZCA9ICFpc0luUmFuZ2UoKHNpemVfdCkwdSwgc2l6ZSwgc3JjT2Zmc2V0LCBuYWxMZW5ndGgpCisgICAgICAgICAgICAgICAgICAgICAgICB8fCAhaXNJblJhbmdlKChzaXplX3QpMHUsIG1CdWZmZXItPnNpemUoKSwgZHN0T2Zmc2V0LCAoc2l6ZV90KTR1KQorICAgICAgICAgICAgICAgICAgICAgICAgfHwgIWlzSW5SYW5nZSgoc2l6ZV90KTB1LCBtQnVmZmVyLT5zaXplKCksIGRzdE9mZnNldCArIDQsIG5hbExlbmd0aCk7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBDSEVDS19FUShzcmNPZmZzZXQsIHNpemUpOwotICAgICAgICAgICAgQ0hFQ0sobUJ1ZmZlciAhPSBOVUxMKTsKLSAgICAgICAgICAgIG1CdWZmZXItPnNldF9yYW5nZSgwLCBkc3RPZmZzZXQpOworCisgICAgICAgICAgICBpZiAoaXNNYWxGb3JtZWQpIHsKKyAgICAgICAgICAgICAgICBBTE9HRSgiVmlkZW8gaXMgbWFsZm9ybWVkOyBuYWxMZW5ndGggJXp1IiwgbmFsTGVuZ3RoKTsKKyAgICAgICAgICAgICAgICBtQnVmZmVyLT5yZWxlYXNlKCk7CisgICAgICAgICAgICAgICAgbUJ1ZmZlciA9IE5VTEw7CisgICAgICAgICAgICAgICAgcmV0dXJuIEFNRURJQV9FUlJPUl9NQUxGT1JNRUQ7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmIChuYWxMZW5ndGggPT0gMCkgeworICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAoZHN0T2Zmc2V0ID4gU0laRV9NQVggLSA0IHx8CisgICAgICAgICAgICAgICAgICAgIGRzdE9mZnNldCArIDQgPiBTSVpFX01BWCAtIG5hbExlbmd0aCB8fAorICAgICAgICAgICAgICAgICAgICBkc3RPZmZzZXQgKyA0ICsgbmFsTGVuZ3RoID4gbUJ1ZmZlci0+c2l6ZSgpKSB7CisgICAgICAgICAgICAgICAgQUxPR0UoImIvMjYzNjUzNDkgOiAlenUgJXp1IiwgZHN0T2Zmc2V0LCBtQnVmZmVyLT5zaXplKCkpOworICAgICAgICAgICAgICAgIGFuZHJvaWRfZXJyb3JXcml0ZUxvZygweDUzNGU0NTU0LCAiMjYzNjUzNDkiKTsKKyAgICAgICAgICAgICAgICBtQnVmZmVyLT5yZWxlYXNlKCk7CisgICAgICAgICAgICAgICAgbUJ1ZmZlciA9IE5VTEw7CisgICAgICAgICAgICAgICAgcmV0dXJuIEFNRURJQV9FUlJPUl9NQUxGT1JNRUQ7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGRzdERhdGFbZHN0T2Zmc2V0KytdID0gMDsKKyAgICAgICAgICAgIGRzdERhdGFbZHN0T2Zmc2V0KytdID0gMDsKKyAgICAgICAgICAgIGRzdERhdGFbZHN0T2Zmc2V0KytdID0gMDsKKyAgICAgICAgICAgIGRzdERhdGFbZHN0T2Zmc2V0KytdID0gMTsKKyAgICAgICAgICAgIG1lbWNweSgmZHN0RGF0YVtkc3RPZmZzZXRdLCAmbVNyY0J1ZmZlcltzcmNPZmZzZXRdLCBuYWxMZW5ndGgpOworICAgICAgICAgICAgc3JjT2Zmc2V0ICs9IG5hbExlbmd0aDsKKyAgICAgICAgICAgIGRzdE9mZnNldCArPSBuYWxMZW5ndGg7CiAgICAgICAgIH0KKyAgICAgICAgQ0hFQ0tfRVEoc3JjT2Zmc2V0LCBzaXplKTsKKyAgICAgICAgQ0hFQ0sobUJ1ZmZlciAhPSBOVUxMKTsKKyAgICAgICAgbUJ1ZmZlci0+c2V0X3JhbmdlKDAsIGRzdE9mZnNldCk7CiAKICAgICAgICAgbUJ1ZmZlci0+bWV0YV9kYXRhKCkuc2V0SW50NjQoCiAgICAgICAgICAgICAgICAga0tleVRpbWUsICgoaW50NjRfdCljdHMgKiAxMDAwMDAwKSAvIG1UaW1lc2NhbGUpOwpAQCAtNTUzOSwxNSArNTk3MiwxNyBAQAogICAgICAgICAqb3V0ID0gbUJ1ZmZlcjsKICAgICAgICAgbUJ1ZmZlciA9IE5VTEw7CiAKLSAgICAgICAgcmV0dXJuIE9LOworICAgICAgICByZXR1cm4gQU1FRElBX09LOwogICAgIH0KKworICAgIHJldHVybiBBTUVESUFfT0s7CiB9CiAKIE1QRUc0RXh0cmFjdG9yOjpUcmFjayAqTVBFRzRFeHRyYWN0b3I6OmZpbmRUcmFja0J5TWltZVByZWZpeCgKICAgICAgICAgY29uc3QgY2hhciAqbWltZVByZWZpeCkgewogICAgIGZvciAoVHJhY2sgKnRyYWNrID0gbUZpcnN0VHJhY2s7IHRyYWNrICE9IE5VTEw7IHRyYWNrID0gdHJhY2stPm5leHQpIHsKICAgICAgICAgY29uc3QgY2hhciAqbWltZTsKLSAgICAgICAgaWYgKHRyYWNrLT5tZXRhLmZpbmRDU3RyaW5nKGtLZXlNSU1FVHlwZSwgJm1pbWUpCisgICAgICAgIGlmIChBTWVkaWFGb3JtYXRfZ2V0U3RyaW5nKHRyYWNrLT5tZXRhLCBBTUVESUFGT1JNQVRfS0VZX01JTUUsICZtaW1lKQogICAgICAgICAgICAgICAgICYmICFzdHJuY2FzZWNtcChtaW1lLCBtaW1lUHJlZml4LCBzdHJsZW4obWltZVByZWZpeCkpKSB7CiAgICAgICAgICAgICByZXR1cm4gdHJhY2s7CiAgICAgICAgIH0KQEAgLTU1NTYsNyArNTk5MSw3IEBACiAgICAgcmV0dXJuIE5VTEw7CiB9CiAKLXN0YXRpYyBib29sIExlZ2FjeVNuaWZmTVBFRzQoRGF0YVNvdXJjZUJhc2UgKnNvdXJjZSwgZmxvYXQgKmNvbmZpZGVuY2UpIHsKK3N0YXRpYyBib29sIExlZ2FjeVNuaWZmTVBFRzQoRGF0YVNvdXJjZUhlbHBlciAqc291cmNlLCBmbG9hdCAqY29uZmlkZW5jZSkgewogICAgIHVpbnQ4X3QgaGVhZGVyWzhdOwogCiAgICAgc3NpemVfdCBuID0gc291cmNlLT5yZWFkQXQoNCwgaGVhZGVyLCBzaXplb2YoaGVhZGVyKSk7CkBAIC01NjIxLDcgKzYwNTYsNyBAQAogLy8gQWxzbyB0cnkgdG8gaWRlbnRpZnkgd2hlcmUgdGhpcyBmaWxlJ3MgbWV0YWRhdGEgZW5kcwogLy8gKGVuZCBvZiB0aGUgJ21vb3YnIGF0b20pIGFuZCByZXBvcnQgaXQgdG8gdGhlIGNhbGxlciBhcyBwYXJ0IG9mCiAvLyB0aGUgbWV0YWRhdGEuCi1zdGF0aWMgYm9vbCBCZXR0ZXJTbmlmZk1QRUc0KERhdGFTb3VyY2VCYXNlICpzb3VyY2UsIGZsb2F0ICpjb25maWRlbmNlKSB7CitzdGF0aWMgYm9vbCBCZXR0ZXJTbmlmZk1QRUc0KERhdGFTb3VyY2VIZWxwZXIgKnNvdXJjZSwgZmxvYXQgKmNvbmZpZGVuY2UpIHsKICAgICAvLyBXZSBzY2FuIHVwIHRvIDEyOCBieXRlcyB0byBpZGVudGlmeSB0aGlzIGZpbGUgYXMgYW4gTVA0LgogICAgIHN0YXRpYyBjb25zdCBvZmY2NF90IGtNYXhTY2FuT2Zmc2V0ID0gMTI4bGw7CiAKQEAgLTU2NjcsNyArNjEwMiw4IEBACiAKICAgICAgICAgY2hhciBjaHVua3N0cmluZ1s1XTsKICAgICAgICAgTWFrZUZvdXJDQ1N0cmluZyhjaHVua1R5cGUsIGNodW5rc3RyaW5nKTsKLSAgICAgICAgQUxPR1YoInNhdyBjaHVuayB0eXBlICVzLCBzaXplICUiIFBSSXU2NCAiIEAgJWxsZCIsIGNodW5rc3RyaW5nLCBjaHVua1NpemUsIChsb25nIGxvbmcpb2Zmc2V0KTsKKyAgICAgICAgQUxPR1YoInNhdyBjaHVuayB0eXBlICVzLCBzaXplICUiIFBSSXU2NCAiIEAgJWxsZCIsCisgICAgICAgICAgICAgICAgY2h1bmtzdHJpbmcsIGNodW5rU2l6ZSwgKGxvbmcgbG9uZylvZmZzZXQpOwogICAgICAgICBzd2l0Y2ggKGNodW5rVHlwZSkgewogICAgICAgICAgICAgY2FzZSBGT1VSQ0MoJ2YnLCAndCcsICd5JywgJ3AnKToKICAgICAgICAgICAgIHsKQEAgLTU3MjgsMTggKzYxNjQsMTkgQEAKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotc3RhdGljIE1lZGlhRXh0cmFjdG9yKiBDcmVhdGVFeHRyYWN0b3IoRGF0YVNvdXJjZUJhc2UgKnNvdXJjZSwgdm9pZCAqKSB7Ci0gICAgcmV0dXJuIG5ldyBNUEVHNEV4dHJhY3Rvcihzb3VyY2UpOworc3RhdGljIENNZWRpYUV4dHJhY3RvclYyKiBDcmVhdGVFeHRyYWN0b3IoQ0RhdGFTb3VyY2UgKnNvdXJjZSwgdm9pZCAqKSB7CisgICAgcmV0dXJuIHdyYXBWMihuZXcgTVBFRzRFeHRyYWN0b3IobmV3IERhdGFTb3VyY2VIZWxwZXIoc291cmNlKSkpOwogfQogCi1zdGF0aWMgTWVkaWFFeHRyYWN0b3I6OkNyZWF0b3JGdW5jIFNuaWZmKAotICAgICAgICBEYXRhU291cmNlQmFzZSAqc291cmNlLCBmbG9hdCAqY29uZmlkZW5jZSwgdm9pZCAqKiwKLSAgICAgICAgTWVkaWFFeHRyYWN0b3I6OkZyZWVNZXRhRnVuYyAqKSB7Ci0gICAgaWYgKEJldHRlclNuaWZmTVBFRzQoc291cmNlLCBjb25maWRlbmNlKSkgeworc3RhdGljIENyZWF0b3JGdW5jVjIgU25pZmYoCisgICAgICAgIENEYXRhU291cmNlICpzb3VyY2UsIGZsb2F0ICpjb25maWRlbmNlLCB2b2lkICoqLAorICAgICAgICBGcmVlTWV0YUZ1bmMgKikgeworICAgIERhdGFTb3VyY2VIZWxwZXIgaGVscGVyKHNvdXJjZSk7CisgICAgaWYgKEJldHRlclNuaWZmTVBFRzQoJmhlbHBlciwgY29uZmlkZW5jZSkpIHsKICAgICAgICAgcmV0dXJuIENyZWF0ZUV4dHJhY3RvcjsKICAgICB9CiAKLSAgICBpZiAoTGVnYWN5U25pZmZNUEVHNChzb3VyY2UsIGNvbmZpZGVuY2UpKSB7CisgICAgaWYgKExlZ2FjeVNuaWZmTVBFRzQoJmhlbHBlciwgY29uZmlkZW5jZSkpIHsKICAgICAgICAgQUxPR1coIklkZW50aWZpZWQgc3VwcG9ydGVkIG1wZWc0IHRocm91Z2ggTGVnYWN5U25pZmZNUEVHNC4iKTsKICAgICAgICAgcmV0dXJuIENyZWF0ZUV4dHJhY3RvcjsKICAgICB9CkBAIC01NzUwLDEzICs2MTg3LDEzIEBACiBleHRlcm4gIkMiIHsKIC8vIFRoaXMgaXMgdGhlIG9ubHkgc3ltYm9sIHRoYXQgbmVlZHMgdG8gYmUgZXhwb3J0ZWQKIF9fYXR0cmlidXRlX18gKCh2aXNpYmlsaXR5ICgiZGVmYXVsdCIpKSkKLU1lZGlhRXh0cmFjdG9yOjpFeHRyYWN0b3JEZWYgR0VURVhUUkFDVE9SREVGKCkgeworRXh0cmFjdG9yRGVmIEdFVEVYVFJBQ1RPUkRFRigpIHsKICAgICByZXR1cm4gewotICAgICAgICBNZWRpYUV4dHJhY3Rvcjo6RVhUUkFDVE9SREVGX1ZFUlNJT04sCisgICAgICAgIEVYVFJBQ1RPUkRFRl9WRVJTSU9OX0NVUlJFTlQsCiAgICAgICAgIFVVSUQoIjI3NTc1YzY3LTQ0MTctNGM1NC04ZDNkLThlNjI2OTg1YTE2NCIpLAotICAgICAgICAxLCAvLyB2ZXJzaW9uCisgICAgICAgIDIsIC8vIHZlcnNpb24KICAgICAgICAgIk1QNCBFeHRyYWN0b3IiLAotICAgICAgICBTbmlmZgorICAgICAgICB7IC52MiA9IFNuaWZmIH0KICAgICB9OwogfQogCmRpZmYgLS1naXQgYS9tZWRpYS9leHRyYWN0b3JzL21wNC9NUEVHNEV4dHJhY3Rvci5oIGIvbWVkaWEvZXh0cmFjdG9ycy9tcDQvTVBFRzRFeHRyYWN0b3IuaAppbmRleCAzZWEwOTYzLi41NmI2NDFkIDEwMDY0NAotLS0gYS9tZWRpYS9leHRyYWN0b3JzL21wNC9NUEVHNEV4dHJhY3Rvci5oCisrKyBiL21lZGlhL2V4dHJhY3RvcnMvbXA0L01QRUc0RXh0cmFjdG9yLmgKQEAgLTIwLDkgKzIwLDkgQEAKIAogI2luY2x1ZGUgPGFycGEvaW5ldC5oPgogCi0jaW5jbHVkZSA8bWVkaWEvRGF0YVNvdXJjZUJhc2UuaD4KLSNpbmNsdWRlIDxtZWRpYS9NZWRpYUV4dHJhY3Rvci5oPgotI2luY2x1ZGUgPG1lZGlhL3N0YWdlZnJpZ2h0L01ldGFEYXRhQmFzZS5oPgorI2luY2x1ZGUgPG1lZGlhL01lZGlhRXh0cmFjdG9yUGx1Z2luQXBpLmg+CisjaW5jbHVkZSA8bWVkaWEvTWVkaWFFeHRyYWN0b3JQbHVnaW5IZWxwZXIuaD4KKyNpbmNsdWRlIDxtZWRpYS9OZGtNZWRpYUZvcm1hdC5oPgogI2luY2x1ZGUgPG1lZGlhL3N0YWdlZnJpZ2h0L2ZvdW5kYXRpb24vQVN0cmluZy5oPgogI2luY2x1ZGUgPHV0aWxzL0tleWVkVmVjdG9yLmg+CiAjaW5jbHVkZSA8dXRpbHMvTGlzdC5oPgpAQCAtMzEsOCArMzEsOCBAQAogCiBuYW1lc3BhY2UgYW5kcm9pZCB7CiBzdHJ1Y3QgQU1lc3NhZ2U7Ci1jbGFzcyBEYXRhU291cmNlQmFzZTsKLXN0cnVjdCBDYWNoZWRSYW5nZWREYXRhU291cmNlOworc3RydWN0IENEYXRhU291cmNlOworY2xhc3MgRGF0YVNvdXJjZUhlbHBlcjsKIGNsYXNzIFNhbXBsZVRhYmxlOwogY2xhc3MgU3RyaW5nODsKIG5hbWVzcGFjZSBoZWlmIHsKQEAgLTUzLDE1ICs1MywxNSBAQAogICAgIHVpbnQzMl90IGRlZmF1bHRfc2FtcGxlX2ZsYWdzOwogfTsKIAotY2xhc3MgTVBFRzRFeHRyYWN0b3IgOiBwdWJsaWMgTWVkaWFFeHRyYWN0b3IgeworY2xhc3MgTVBFRzRFeHRyYWN0b3IgOiBwdWJsaWMgTWVkaWFFeHRyYWN0b3JQbHVnaW5IZWxwZXJWMiB7CiBwdWJsaWM6Ci0gICAgZXhwbGljaXQgTVBFRzRFeHRyYWN0b3IoRGF0YVNvdXJjZUJhc2UgKnNvdXJjZSwgY29uc3QgY2hhciAqbWltZSA9IE5VTEwpOworICAgIGV4cGxpY2l0IE1QRUc0RXh0cmFjdG9yKERhdGFTb3VyY2VIZWxwZXIgKnNvdXJjZSwgY29uc3QgY2hhciAqbWltZSA9IE5VTEwpOwogCiAgICAgdmlydHVhbCBzaXplX3QgY291bnRUcmFja3MoKTsKLSAgICB2aXJ0dWFsIE1lZGlhVHJhY2sgKmdldFRyYWNrKHNpemVfdCBpbmRleCk7Ci0gICAgdmlydHVhbCBzdGF0dXNfdCBnZXRUcmFja01ldGFEYXRhKE1ldGFEYXRhQmFzZSYgbWV0YSwgc2l6ZV90IGluZGV4LCB1aW50MzJfdCBmbGFncyk7CisgICAgdmlydHVhbCBNZWRpYVRyYWNrSGVscGVyVjIgKmdldFRyYWNrKHNpemVfdCBpbmRleCk7CisgICAgdmlydHVhbCBtZWRpYV9zdGF0dXNfdCBnZXRUcmFja01ldGFEYXRhKEFNZWRpYUZvcm1hdCAqbWV0YSwgc2l6ZV90IGluZGV4LCB1aW50MzJfdCBmbGFncyk7CiAKLSAgICB2aXJ0dWFsIHN0YXR1c190IGdldE1ldGFEYXRhKE1ldGFEYXRhQmFzZSYgbWV0YSk7CisgICAgdmlydHVhbCBtZWRpYV9zdGF0dXNfdCBnZXRNZXRhRGF0YShBTWVkaWFGb3JtYXQgKm1ldGEpOwogICAgIHZpcnR1YWwgdWludDMyX3QgZmxhZ3MoKSBjb25zdDsKICAgICB2aXJ0dWFsIGNvbnN0IGNoYXIgKiBuYW1lKCkgeyByZXR1cm4gIk1QRUc0RXh0cmFjdG9yIjsgfQogCkBAIC03Nyw3ICs3Nyw3IEBACiAgICAgfTsKICAgICBzdHJ1Y3QgVHJhY2sgewogICAgICAgICBUcmFjayAqbmV4dDsKLSAgICAgICAgTWV0YURhdGFCYXNlIG1ldGE7CisgICAgICAgIEFNZWRpYUZvcm1hdCAqbWV0YTsKICAgICAgICAgdWludDMyX3QgdGltZXNjYWxlOwogICAgICAgICBzcDxTYW1wbGVUYWJsZT4gc2FtcGxlVGFibGU7CiAgICAgICAgIGJvb2wgaW5jbHVkZXNfZXhwZW5zaXZlX21ldGFkYXRhOwpAQCAtOTcsOCArOTcsNyBAQAogCiAgICAgVmVjdG9yPFRyZXg+IG1UcmV4OwogCi0gICAgRGF0YVNvdXJjZUJhc2UgKm1EYXRhU291cmNlOwotICAgIENhY2hlZFJhbmdlZERhdGFTb3VyY2UgKm1DYWNoZWRTb3VyY2U7CisgICAgRGF0YVNvdXJjZUhlbHBlciAqbURhdGFTb3VyY2U7CiAgICAgc3RhdHVzX3QgbUluaXRDaGVjazsKICAgICB1aW50MzJfdCBtSGVhZGVyVGltZXNjYWxlOwogICAgIGJvb2wgbUlzUVQ7CkBAIC0xMDgsNyArMTA3LDcgQEAKIAogICAgIFRyYWNrICptRmlyc3RUcmFjaywgKm1MYXN0VHJhY2s7CiAKLSAgICBNZXRhRGF0YUJhc2UgbUZpbGVNZXRhRGF0YTsKKyAgICBBTWVkaWFGb3JtYXQgKm1GaWxlTWV0YURhdGE7CiAKICAgICBWZWN0b3I8dWludDMyX3Q+IG1QYXRoOwogICAgIFN0cmluZzggbUxhc3RDb21tZW50TWVhbjsKQEAgLTEzOSwxNyArMTM4LDE2IEBACiAKICAgICBUcmFjayAqZmluZFRyYWNrQnlNaW1lUHJlZml4KGNvbnN0IGNoYXIgKm1pbWVQcmVmaXgpOwogCi0gICAgc3RhdHVzX3QgcGFyc2VBQzNTYW1wbGVFbnRyeShvZmY2NF90IG9mZnNldCk7Ci0gICAgc3RhdHVzX3QgcGFyc2VBQzNTcGVjaWZpY0JveChvZmY2NF90IG9mZnNldCwgdWludDE2X3Qgc2FtcGxlUmF0ZSk7CisgICAgc3RhdHVzX3QgcGFyc2VDaGFubmVsQ291bnRTYW1wbGVSYXRlKAorICAgICAgICAgICAgb2ZmNjRfdCAqb2Zmc2V0LCB1aW50MTZfdCAqY2hhbm5lbENvdW50LCB1aW50MTZfdCAqc2FtcGxlUmF0ZSk7CisgICAgc3RhdHVzX3QgcGFyc2VBQzNTcGVjaWZpY0JveChvZmY2NF90IG9mZnNldCk7CisgICAgc3RhdHVzX3QgcGFyc2VFQUMzU3BlY2lmaWNCb3gob2ZmNjRfdCBvZmZzZXQpOworICAgIHN0YXR1c190IHBhcnNlQUM0U3BlY2lmaWNCb3gob2ZmNjRfdCBvZmZzZXQpOwogCiAgICAgTVBFRzRFeHRyYWN0b3IoY29uc3QgTVBFRzRFeHRyYWN0b3IgJik7CiAgICAgTVBFRzRFeHRyYWN0b3IgJm9wZXJhdG9yPShjb25zdCBNUEVHNEV4dHJhY3RvciAmKTsKIH07CiAKLWJvb2wgU25pZmZNUEVHNCgKLSAgICAgICAgRGF0YVNvdXJjZUJhc2UgKnNvdXJjZSwgU3RyaW5nOCAqbWltZVR5cGUsIGZsb2F0ICpjb25maWRlbmNlLAotICAgICAgICBzcDxBTWVzc2FnZT4gKik7Ci0KIH0gIC8vIG5hbWVzcGFjZSBhbmRyb2lkCiAKICNlbmRpZiAgLy8gTVBFRzRfRVhUUkFDVE9SX0hfCmRpZmYgLS1naXQgYS9tZWRpYS9leHRyYWN0b3JzL21wNC9TYW1wbGVJdGVyYXRvci5jcHAgYi9tZWRpYS9leHRyYWN0b3JzL21wNC9TYW1wbGVJdGVyYXRvci5jcHAKaW5kZXggOTNlZTdjNi4uMWE2ZDMwNiAxMDA2NDQKLS0tIGEvbWVkaWEvZXh0cmFjdG9ycy9tcDQvU2FtcGxlSXRlcmF0b3IuY3BwCisrKyBiL21lZGlhL2V4dHJhY3RvcnMvbXA0L1NhbXBsZUl0ZXJhdG9yLmNwcApAQCAtMzI4LDcgKzMyOCwxNSBAQAogICAgICAgICArK21UaW1lVG9TYW1wbGVJbmRleDsKICAgICB9CiAKLSAgICAqdGltZSA9IG1UVFNTYW1wbGVUaW1lICsgbVRUU0R1cmF0aW9uICogKHNhbXBsZUluZGV4IC0gbVRUU1NhbXBsZUluZGV4KTsKKyAgICAvLyBiZWxvdyBpcyBlcXVpdmFsZW50IHRvOgorICAgIC8vICp0aW1lID0gbVRUU1NhbXBsZVRpbWUgKyBtVFRTRHVyYXRpb24gKiAoc2FtcGxlSW5kZXggLSBtVFRTU2FtcGxlSW5kZXgpOworICAgIHVpbnQzMl90IHRtcDsKKyAgICBpZiAoX19idWlsdGluX3N1Yl9vdmVyZmxvdyhzYW1wbGVJbmRleCwgbVRUU1NhbXBsZUluZGV4LCAmdG1wKSB8fAorICAgICAgICAgICAgX19idWlsdGluX211bF9vdmVyZmxvdyhtVFRTRHVyYXRpb24sIHRtcCwgJnRtcCkgfHwKKyAgICAgICAgICAgIF9fYnVpbHRpbl9hZGRfb3ZlcmZsb3cobVRUU1NhbXBsZVRpbWUsIHRtcCwgJnRtcCkpIHsKKyAgICAgICAgcmV0dXJuIEVSUk9SX09VVF9PRl9SQU5HRTsKKyAgICB9CisgICAgKnRpbWUgPSB0bXA7CiAKICAgICBpbnQzMl90IG9mZnNldCA9IG1UYWJsZS0+Z2V0Q29tcG9zaXRpb25UaW1lT2Zmc2V0KHNhbXBsZUluZGV4KTsKICAgICBpZiAoKG9mZnNldCA8IDAgJiYgKnRpbWUgPCAob2Zmc2V0ID09IElOVDMyX01JTiA/CmRpZmYgLS1naXQgYS9tZWRpYS9leHRyYWN0b3JzL21wNC9TYW1wbGVUYWJsZS5jcHAgYi9tZWRpYS9leHRyYWN0b3JzL21wNC9TYW1wbGVUYWJsZS5jcHAKaW5kZXggMjhmZTcxNy4uZDI0Mjc5OCAxMDA2NDQKLS0tIGEvbWVkaWEvZXh0cmFjdG9ycy9tcDQvU2FtcGxlVGFibGUuY3BwCisrKyBiL21lZGlhL2V4dHJhY3RvcnMvbXA0L1NhbXBsZVRhYmxlLmNwcApAQCAtMjUsNyArMjUsNyBAQAogCiAjaW5jbHVkZSA8YXJwYS9pbmV0Lmg+CiAKLSNpbmNsdWRlIDxtZWRpYS9EYXRhU291cmNlQmFzZS5oPgorI2luY2x1ZGUgPG1lZGlhL01lZGlhRXh0cmFjdG9yUGx1Z2luQXBpLmg+CiAjaW5jbHVkZSA8bWVkaWEvc3RhZ2VmcmlnaHQvZm91bmRhdGlvbi9BRGVidWcuaD4KICNpbmNsdWRlIDxtZWRpYS9zdGFnZWZyaWdodC9mb3VuZGF0aW9uL0J5dGVVdGlscy5oPgogCkBAIC0xMTQsNyArMTE0LDcgQEAKIAogLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KIAotU2FtcGxlVGFibGU6OlNhbXBsZVRhYmxlKERhdGFTb3VyY2VCYXNlICpzb3VyY2UpCitTYW1wbGVUYWJsZTo6U2FtcGxlVGFibGUoRGF0YVNvdXJjZUhlbHBlciAqc291cmNlKQogICAgIDogbURhdGFTb3VyY2Uoc291cmNlKSwKICAgICAgIG1DaHVua09mZnNldE9mZnNldCgtMSksCiAgICAgICBtQ2h1bmtPZmZzZXRUeXBlKDApLApkaWZmIC0tZ2l0IGEvbWVkaWEvZXh0cmFjdG9ycy9tcDQvU2FtcGxlVGFibGUuaCBiL21lZGlhL2V4dHJhY3RvcnMvbXA0L1NhbXBsZVRhYmxlLmgKaW5kZXggZGQ2ODg2MC4uZDRiNWRjOCAxMDA2NDQKLS0tIGEvbWVkaWEvZXh0cmFjdG9ycy9tcDQvU2FtcGxlVGFibGUuaAorKysgYi9tZWRpYS9leHRyYWN0b3JzL21wNC9TYW1wbGVUYWJsZS5oCkBAIC0yMSwxOCArMjEsMTkgQEAKICNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KICNpbmNsdWRlIDxzdGRpbnQuaD4KIAorI2luY2x1ZGUgPG1lZGlhL01lZGlhRXh0cmFjdG9yUGx1Z2luSGVscGVyLmg+CiAjaW5jbHVkZSA8bWVkaWEvc3RhZ2VmcmlnaHQvTWVkaWFFcnJvcnMuaD4KICNpbmNsdWRlIDx1dGlscy9SZWZCYXNlLmg+CiAjaW5jbHVkZSA8dXRpbHMvdGhyZWFkcy5oPgogCiBuYW1lc3BhY2UgYW5kcm9pZCB7CiAKLWNsYXNzIERhdGFTb3VyY2VCYXNlOworY2xhc3MgRGF0YVNvdXJjZUhlbHBlcjsKIHN0cnVjdCBTYW1wbGVJdGVyYXRvcjsKIAogY2xhc3MgU2FtcGxlVGFibGUgOiBwdWJsaWMgUmVmQmFzZSB7CiBwdWJsaWM6Ci0gICAgZXhwbGljaXQgU2FtcGxlVGFibGUoRGF0YVNvdXJjZUJhc2UgKnNvdXJjZSk7CisgICAgZXhwbGljaXQgU2FtcGxlVGFibGUoRGF0YVNvdXJjZUhlbHBlciAqc291cmNlKTsKIAogICAgIGJvb2wgaXNWYWxpZCgpIGNvbnN0OwogCkBAIC0xMDIsNyArMTAzLDcgQEAKICAgICAvLyBMaW1pdCB0aGUgdG90YWwgc2l6ZSBvZiBhbGwgaW50ZXJuYWwgdGFibGVzIHRvIDIwME1pQi4KICAgICBzdGF0aWMgY29uc3Qgc2l6ZV90IGtNYXhUb3RhbFNpemUgPSAyMDAgKiAoMSA8PCAyMCk7CiAKLSAgICBEYXRhU291cmNlQmFzZSAqbURhdGFTb3VyY2U7CisgICAgRGF0YVNvdXJjZUhlbHBlciAqbURhdGFTb3VyY2U7CiAgICAgTXV0ZXggbUxvY2s7CiAKICAgICBvZmY2NF90IG1DaHVua09mZnNldE9mZnNldDsKZGlmZiAtLWdpdCBhL21lZGlhL2V4dHJhY3RvcnMvbXBlZzIvRXh0cmFjdG9yQnVuZGxlLmNwcCBiL21lZGlhL2V4dHJhY3RvcnMvbXBlZzIvRXh0cmFjdG9yQnVuZGxlLmNwcAppbmRleCA4YTBmYTAzLi4zNjZhYTU5IDEwMDY0NAotLS0gYS9tZWRpYS9leHRyYWN0b3JzL21wZWcyL0V4dHJhY3RvckJ1bmRsZS5jcHAKKysrIGIvbWVkaWEvZXh0cmFjdG9ycy9tcGVnMi9FeHRyYWN0b3JCdW5kbGUuY3BwCkBAIC0xOCwzOCArMTgsNDMgQEAKICNkZWZpbmUgTE9HX1RBRyAiTVBFRzJFeHRyYWN0b3JCdW5kbGUiCiAjaW5jbHVkZSA8dXRpbHMvTG9nLmg+CiAKLSNpbmNsdWRlIDxtZWRpYS9NZWRpYUV4dHJhY3Rvci5oPgorI2luY2x1ZGUgPG1lZGlhL01lZGlhRXh0cmFjdG9yUGx1Z2luSGVscGVyLmg+CiAjaW5jbHVkZSAiTVBFRzJQU0V4dHJhY3Rvci5oIgogI2luY2x1ZGUgIk1QRUcyVFNFeHRyYWN0b3IuaCIKIAogbmFtZXNwYWNlIGFuZHJvaWQgewogCitzdHJ1Y3QgQ0RhdGFTb3VyY2U7CisKIGV4dGVybiAiQyIgewogLy8gVGhpcyBpcyB0aGUgb25seSBzeW1ib2wgdGhhdCBuZWVkcyB0byBiZSBleHBvcnRlZAogX19hdHRyaWJ1dGVfXyAoKHZpc2liaWxpdHkgKCJkZWZhdWx0IikpKQotTWVkaWFFeHRyYWN0b3I6OkV4dHJhY3RvckRlZiBHRVRFWFRSQUNUT1JERUYoKSB7CitFeHRyYWN0b3JEZWYgR0VURVhUUkFDVE9SREVGKCkgewogICAgIHJldHVybiB7Ci0gICAgICAgIE1lZGlhRXh0cmFjdG9yOjpFWFRSQUNUT1JERUZfVkVSU0lPTiwKKyAgICAgICAgRVhUUkFDVE9SREVGX1ZFUlNJT04sCiAgICAgICAgIFVVSUQoIjNkMWRjZmViLWU0MGEtNDM2ZC1hNTc0LWMyNDM4YTU1NWU1ZiIpLAogICAgICAgICAxLAogICAgICAgICAiTVBFRzItUFMvVFMgRXh0cmFjdG9yIiwKLSAgICAgICAgW10oCi0gICAgICAgICAgICAgICAgRGF0YVNvdXJjZUJhc2UgKnNvdXJjZSwKLSAgICAgICAgICAgICAgICBmbG9hdCAqY29uZmlkZW5jZSwKLSAgICAgICAgICAgICAgICB2b2lkICoqLAotICAgICAgICAgICAgICAgIE1lZGlhRXh0cmFjdG9yOjpGcmVlTWV0YUZ1bmMgKikgLT4gTWVkaWFFeHRyYWN0b3I6OkNyZWF0b3JGdW5jIHsKLSAgICAgICAgICAgIGlmIChTbmlmZk1QRUcyVFMoc291cmNlLCBjb25maWRlbmNlKSkgewotICAgICAgICAgICAgICAgIHJldHVybiBbXSgKLSAgICAgICAgICAgICAgICAgICAgICAgIERhdGFTb3VyY2VCYXNlICpzb3VyY2UsCi0gICAgICAgICAgICAgICAgICAgICAgICB2b2lkICopIC0+IE1lZGlhRXh0cmFjdG9yKiB7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBuZXcgTVBFRzJUU0V4dHJhY3Rvcihzb3VyY2UpO307Ci0gICAgICAgICAgICB9IGVsc2UgaWYgKFNuaWZmTVBFRzJQUyhzb3VyY2UsIGNvbmZpZGVuY2UpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gW10oCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERhdGFTb3VyY2VCYXNlICpzb3VyY2UsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKikgLT4gTWVkaWFFeHRyYWN0b3IqIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbmV3IE1QRUcyUFNFeHRyYWN0b3Ioc291cmNlKTt9OworICAgICAgICB7CisgICAgICAgICAgICBbXSgKKyAgICAgICAgICAgICAgICAgICAgQ0RhdGFTb3VyY2UgKnNvdXJjZSwKKyAgICAgICAgICAgICAgICAgICAgZmxvYXQgKmNvbmZpZGVuY2UsCisgICAgICAgICAgICAgICAgICAgIHZvaWQgKiosCisgICAgICAgICAgICAgICAgICAgIEZyZWVNZXRhRnVuYyAqKSAtPiBDcmVhdG9yRnVuYyB7CisgICAgICAgICAgICAgICAgRGF0YVNvdXJjZUhlbHBlciBoZWxwZXIoc291cmNlKTsKKyAgICAgICAgICAgICAgICBpZiAoU25pZmZNUEVHMlRTKCZoZWxwZXIsIGNvbmZpZGVuY2UpKSB7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBbXSgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBDRGF0YVNvdXJjZSAqc291cmNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKikgLT4gQ01lZGlhRXh0cmFjdG9yKiB7CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gd3JhcChuZXcgTVBFRzJUU0V4dHJhY3RvcihuZXcgRGF0YVNvdXJjZUhlbHBlcihzb3VyY2UpKSk7fTsKKyAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKFNuaWZmTVBFRzJQUygmaGVscGVyLCBjb25maWRlbmNlKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBbXSgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENEYXRhU291cmNlICpzb3VyY2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICopIC0+IENNZWRpYUV4dHJhY3RvciogeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gd3JhcChuZXcgTVBFRzJQU0V4dHJhY3RvcihuZXcgRGF0YVNvdXJjZUhlbHBlcihzb3VyY2UpKSk7fTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICByZXR1cm4gTlVMTDsKICAgICAgICAgfQogICAgIH07CiB9CmRpZmYgLS1naXQgYS9tZWRpYS9leHRyYWN0b3JzL21wZWcyL01QRUcyUFNFeHRyYWN0b3IuY3BwIGIvbWVkaWEvZXh0cmFjdG9ycy9tcGVnMi9NUEVHMlBTRXh0cmFjdG9yLmNwcAppbmRleCA2OTgwYjgyLi5mYzEzZDJjIDEwMDY0NAotLS0gYS9tZWRpYS9leHRyYWN0b3JzL21wZWcyL01QRUcyUFNFeHRyYWN0b3IuY3BwCisrKyBiL21lZGlhL2V4dHJhY3RvcnMvbXBlZzIvTVBFRzJQU0V4dHJhY3Rvci5jcHAKQEAgLTI0LDcgKzI0LDYgQEAKICNpbmNsdWRlICJtcGVnMnRzL0VTUXVldWUuaCIKIAogI2luY2x1ZGUgPG1lZGlhL0RhdGFTb3VyY2VCYXNlLmg+Ci0jaW5jbHVkZSA8bWVkaWEvTWVkaWFUcmFjay5oPgogI2luY2x1ZGUgPG1lZGlhL3N0YWdlZnJpZ2h0L2ZvdW5kYXRpb24vQUJpdFJlYWRlci5oPgogI2luY2x1ZGUgPG1lZGlhL3N0YWdlZnJpZ2h0L2ZvdW5kYXRpb24vQUJ1ZmZlci5oPgogI2luY2x1ZGUgPG1lZGlhL3N0YWdlZnJpZ2h0L2ZvdW5kYXRpb24vQURlYnVnLmg+CkBAIC00MCwxMSArMzksMTEgQEAKIAogbmFtZXNwYWNlIGFuZHJvaWQgewogCi1zdHJ1Y3QgTVBFRzJQU0V4dHJhY3Rvcjo6VHJhY2sgOiBwdWJsaWMgTWVkaWFUcmFjaywgcHVibGljIFJlZkJhc2Ugeworc3RydWN0IE1QRUcyUFNFeHRyYWN0b3I6OlRyYWNrIDogcHVibGljIE1lZGlhVHJhY2tIZWxwZXIsIHB1YmxpYyBSZWZCYXNlIHsKICAgICBUcmFjayhNUEVHMlBTRXh0cmFjdG9yICpleHRyYWN0b3IsCiAgICAgICAgICAgdW5zaWduZWQgc3RyZWFtX2lkLCB1bnNpZ25lZCBzdHJlYW1fdHlwZSk7CiAKLSAgICB2aXJ0dWFsIHN0YXR1c190IHN0YXJ0KE1ldGFEYXRhQmFzZSAqcGFyYW1zKTsKKyAgICB2aXJ0dWFsIHN0YXR1c190IHN0YXJ0KCk7CiAgICAgdmlydHVhbCBzdGF0dXNfdCBzdG9wKCk7CiAgICAgdmlydHVhbCBzdGF0dXNfdCBnZXRGb3JtYXQoTWV0YURhdGFCYXNlICYpOwogCkBAIC03MiwxMCArNzEsMTAgQEAKICAgICBESVNBTExPV19FVklMX0NPTlNUUlVDVE9SUyhUcmFjayk7CiB9OwogCi1zdHJ1Y3QgTVBFRzJQU0V4dHJhY3Rvcjo6V3JhcHBlZFRyYWNrIDogcHVibGljIE1lZGlhVHJhY2sgeworc3RydWN0IE1QRUcyUFNFeHRyYWN0b3I6OldyYXBwZWRUcmFjayA6IHB1YmxpYyBNZWRpYVRyYWNrSGVscGVyIHsKICAgICBXcmFwcGVkVHJhY2soTVBFRzJQU0V4dHJhY3RvciAqZXh0cmFjdG9yLCBjb25zdCBzcDxUcmFjaz4gJnRyYWNrKTsKIAotICAgIHZpcnR1YWwgc3RhdHVzX3Qgc3RhcnQoTWV0YURhdGFCYXNlICpwYXJhbXMpOworICAgIHZpcnR1YWwgc3RhdHVzX3Qgc3RhcnQoKTsKICAgICB2aXJ0dWFsIHN0YXR1c190IHN0b3AoKTsKICAgICB2aXJ0dWFsIHN0YXR1c190IGdldEZvcm1hdChNZXRhRGF0YUJhc2UgJik7CiAKQEAgLTk0LDcgKzkzLDcgQEAKIAogLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KIAotTVBFRzJQU0V4dHJhY3Rvcjo6TVBFRzJQU0V4dHJhY3RvcihEYXRhU291cmNlQmFzZSAqc291cmNlKQorTVBFRzJQU0V4dHJhY3Rvcjo6TVBFRzJQU0V4dHJhY3RvcihEYXRhU291cmNlSGVscGVyICpzb3VyY2UpCiAgICAgOiBtRGF0YVNvdXJjZShzb3VyY2UpLAogICAgICAgbU9mZnNldCgwKSwKICAgICAgIG1GaW5hbFJlc3VsdChPSyksCkBAIC0xMjAsMTMgKzExOSwxNCBAQAogfQogCiBNUEVHMlBTRXh0cmFjdG9yOjp+TVBFRzJQU0V4dHJhY3RvcigpIHsKKyAgICBkZWxldGUgbURhdGFTb3VyY2U7CiB9CiAKIHNpemVfdCBNUEVHMlBTRXh0cmFjdG9yOjpjb3VudFRyYWNrcygpIHsKICAgICByZXR1cm4gbVRyYWNrcy5zaXplKCk7CiB9CiAKLU1lZGlhVHJhY2sgKk1QRUcyUFNFeHRyYWN0b3I6OmdldFRyYWNrKHNpemVfdCBpbmRleCkgeworTWVkaWFUcmFja0hlbHBlciAqTVBFRzJQU0V4dHJhY3Rvcjo6Z2V0VHJhY2soc2l6ZV90IGluZGV4KSB7CiAgICAgaWYgKGluZGV4ID49IG1UcmFja3Muc2l6ZSgpKSB7CiAgICAgICAgIHJldHVybiBOVUxMOwogICAgIH0KQEAgLTYzNSw3ICs2MzUsNyBAQAogICAgIG1RdWV1ZSA9IE5VTEw7CiB9CiAKLXN0YXR1c190IE1QRUcyUFNFeHRyYWN0b3I6OlRyYWNrOjpzdGFydChNZXRhRGF0YUJhc2UgKikgeworc3RhdHVzX3QgTVBFRzJQU0V4dHJhY3Rvcjo6VHJhY2s6OnN0YXJ0KCkgewogICAgIGlmIChtU291cmNlID09IE5VTEwpIHsKICAgICAgICAgcmV0dXJuIE5PX0lOSVQ7CiAgICAgfQpAQCAtNjgwLDcgKzY4MCw3IEBACiAgICAgICAgIH0KICAgICB9CiAKLSAgICByZXR1cm4gbVNvdXJjZS0+cmVhZChidWZmZXIsIG9wdGlvbnMpOworICAgIHJldHVybiBtU291cmNlLT5yZWFkKGJ1ZmZlciwgKE1lZGlhU291cmNlOjpSZWFkT3B0aW9ucyopb3B0aW9ucyk7CiB9CiAKIHN0YXR1c190IE1QRUcyUFNFeHRyYWN0b3I6OlRyYWNrOjphcHBlbmRQRVNEYXRhKApAQCAtNzM0LDggKzczNCw4IEBACiBNUEVHMlBTRXh0cmFjdG9yOjpXcmFwcGVkVHJhY2s6On5XcmFwcGVkVHJhY2soKSB7CiB9CiAKLXN0YXR1c190IE1QRUcyUFNFeHRyYWN0b3I6OldyYXBwZWRUcmFjazo6c3RhcnQoTWV0YURhdGFCYXNlICpwYXJhbXMpIHsKLSAgICByZXR1cm4gbVRyYWNrLT5zdGFydChwYXJhbXMpOworc3RhdHVzX3QgTVBFRzJQU0V4dHJhY3Rvcjo6V3JhcHBlZFRyYWNrOjpzdGFydCgpIHsKKyAgICByZXR1cm4gbVRyYWNrLT5zdGFydCgpOwogfQogCiBzdGF0dXNfdCBNUEVHMlBTRXh0cmFjdG9yOjpXcmFwcGVkVHJhY2s6OnN0b3AoKSB7CkBAIC03NTQsNyArNzU0LDcgQEAKIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCiAKIGJvb2wgU25pZmZNUEVHMlBTKAotICAgICAgICBEYXRhU291cmNlQmFzZSAqc291cmNlLCBmbG9hdCAqY29uZmlkZW5jZSkgeworICAgICAgICBEYXRhU291cmNlSGVscGVyICpzb3VyY2UsIGZsb2F0ICpjb25maWRlbmNlKSB7CiAgICAgdWludDhfdCBoZWFkZXJbNV07CiAgICAgaWYgKHNvdXJjZS0+cmVhZEF0KDAsIGhlYWRlciwgc2l6ZW9mKGhlYWRlcikpIDwgKHNzaXplX3Qpc2l6ZW9mKGhlYWRlcikpIHsKICAgICAgICAgcmV0dXJuIGZhbHNlOwpkaWZmIC0tZ2l0IGEvbWVkaWEvZXh0cmFjdG9ycy9tcGVnMi9NUEVHMlBTRXh0cmFjdG9yLmggYi9tZWRpYS9leHRyYWN0b3JzL21wZWcyL01QRUcyUFNFeHRyYWN0b3IuaAppbmRleCA4YjlkYWQ5Li5jNDA4MmVmIDEwMDY0NAotLS0gYS9tZWRpYS9leHRyYWN0b3JzL21wZWcyL01QRUcyUFNFeHRyYWN0b3IuaAorKysgYi9tZWRpYS9leHRyYWN0b3JzL21wZWcyL01QRUcyUFNFeHRyYWN0b3IuaApAQCAtMTksNyArMTksOCBAQAogI2RlZmluZSBNUEVHMl9QU19FWFRSQUNUT1JfSF8KIAogI2luY2x1ZGUgPG1lZGlhL3N0YWdlZnJpZ2h0L2ZvdW5kYXRpb24vQUJhc2UuaD4KLSNpbmNsdWRlIDxtZWRpYS9NZWRpYUV4dHJhY3Rvci5oPgorI2luY2x1ZGUgPG1lZGlhL01lZGlhRXh0cmFjdG9yUGx1Z2luQXBpLmg+CisjaW5jbHVkZSA8bWVkaWEvTWVkaWFFeHRyYWN0b3JQbHVnaW5IZWxwZXIuaD4KICNpbmNsdWRlIDxtZWRpYS9zdGFnZWZyaWdodC9NZXRhRGF0YUJhc2UuaD4KICNpbmNsdWRlIDx1dGlscy90aHJlYWRzLmg+CiAjaW5jbHVkZSA8dXRpbHMvS2V5ZWRWZWN0b3IuaD4KQEAgLTMxLDExICszMiwxMSBAQAogc3RydWN0IFRyYWNrOwogY2xhc3MgU3RyaW5nODsKIAotc3RydWN0IE1QRUcyUFNFeHRyYWN0b3IgOiBwdWJsaWMgTWVkaWFFeHRyYWN0b3IgewotICAgIGV4cGxpY2l0IE1QRUcyUFNFeHRyYWN0b3IoRGF0YVNvdXJjZUJhc2UgKnNvdXJjZSk7CitzdHJ1Y3QgTVBFRzJQU0V4dHJhY3RvciA6IHB1YmxpYyBNZWRpYUV4dHJhY3RvclBsdWdpbkhlbHBlciB7CisgICAgZXhwbGljaXQgTVBFRzJQU0V4dHJhY3RvcihEYXRhU291cmNlSGVscGVyICpzb3VyY2UpOwogCiAgICAgdmlydHVhbCBzaXplX3QgY291bnRUcmFja3MoKTsKLSAgICB2aXJ0dWFsIE1lZGlhVHJhY2sgKmdldFRyYWNrKHNpemVfdCBpbmRleCk7CisgICAgdmlydHVhbCBNZWRpYVRyYWNrSGVscGVyICpnZXRUcmFjayhzaXplX3QgaW5kZXgpOwogICAgIHZpcnR1YWwgc3RhdHVzX3QgZ2V0VHJhY2tNZXRhRGF0YShNZXRhRGF0YUJhc2UmIG1ldGEsIHNpemVfdCBpbmRleCwgdWludDMyX3QgZmxhZ3MpOwogCiAgICAgdmlydHVhbCBzdGF0dXNfdCBnZXRNZXRhRGF0YShNZXRhRGF0YUJhc2UmIG1ldGEpOwpAQCAtNTEsNyArNTIsNyBAQAogICAgIHN0cnVjdCBXcmFwcGVkVHJhY2s7CiAKICAgICBtdXRhYmxlIE11dGV4IG1Mb2NrOwotICAgIERhdGFTb3VyY2VCYXNlICptRGF0YVNvdXJjZTsKKyAgICBEYXRhU291cmNlSGVscGVyICptRGF0YVNvdXJjZTsKIAogICAgIG9mZjY0X3QgbU9mZnNldDsKICAgICBzdGF0dXNfdCBtRmluYWxSZXN1bHQ7CkBAIC03Miw3ICs3Myw3IEBACiAgICAgRElTQUxMT1dfRVZJTF9DT05TVFJVQ1RPUlMoTVBFRzJQU0V4dHJhY3Rvcik7CiB9OwogCi1ib29sIFNuaWZmTVBFRzJQUyhEYXRhU291cmNlQmFzZSAqc291cmNlLCBmbG9hdCAqY29uZmlkZW5jZSk7Citib29sIFNuaWZmTVBFRzJQUyhEYXRhU291cmNlSGVscGVyICpzb3VyY2UsIGZsb2F0ICpjb25maWRlbmNlKTsKIAogfSAgLy8gbmFtZXNwYWNlIGFuZHJvaWQKIApkaWZmIC0tZ2l0IGEvbWVkaWEvZXh0cmFjdG9ycy9tcGVnMi9NUEVHMlRTRXh0cmFjdG9yLmNwcCBiL21lZGlhL2V4dHJhY3RvcnMvbXBlZzIvTVBFRzJUU0V4dHJhY3Rvci5jcHAKaW5kZXggMjRlNjIzYi4uNjA1YjEzYSAxMDA2NDQKLS0tIGEvbWVkaWEvZXh0cmFjdG9ycy9tcGVnMi9NUEVHMlRTRXh0cmFjdG9yLmNwcAorKysgYi9tZWRpYS9leHRyYWN0b3JzL21wZWcyL01QRUcyVFNFeHRyYWN0b3IuY3BwCkBAIC0yNiw3ICsyNiw2IEBACiAKICNpbmNsdWRlIDxtZWRpYS9EYXRhU291cmNlQmFzZS5oPgogI2luY2x1ZGUgPG1lZGlhL0lTdHJlYW1Tb3VyY2UuaD4KLSNpbmNsdWRlIDxtZWRpYS9NZWRpYVRyYWNrLmg+CiAjaW5jbHVkZSA8bWVkaWEvc3RhZ2VmcmlnaHQvZm91bmRhdGlvbi9BQnVmZmVyLmg+CiAjaW5jbHVkZSA8bWVkaWEvc3RhZ2VmcmlnaHQvZm91bmRhdGlvbi9BRGVidWcuaD4KICNpbmNsdWRlIDxtZWRpYS9zdGFnZWZyaWdodC9mb3VuZGF0aW9uL0FMb29wZXIuaD4KQEAgLTUxLDE0ICs1MCwxNCBAQAogc3RhdGljIGNvbnN0IGludCBrTWF4RHVyYXRpb25SZWFkU2l6ZSA9IDI1MDAwMExMOwogc3RhdGljIGNvbnN0IGludCBrTWF4RHVyYXRpb25SZXRyeSA9IDY7CiAKLXN0cnVjdCBNUEVHMlRTU291cmNlIDogcHVibGljIE1lZGlhVHJhY2sgeworc3RydWN0IE1QRUcyVFNTb3VyY2UgOiBwdWJsaWMgTWVkaWFUcmFja0hlbHBlciB7CiAgICAgTVBFRzJUU1NvdXJjZSgKICAgICAgICAgICAgIE1QRUcyVFNFeHRyYWN0b3IgKmV4dHJhY3RvciwKICAgICAgICAgICAgIGNvbnN0IHNwPEFub3RoZXJQYWNrZXRTb3VyY2U+ICZpbXBsLAogICAgICAgICAgICAgYm9vbCBkb2VzU2Vlayk7CiAgICAgdmlydHVhbCB+TVBFRzJUU1NvdXJjZSgpOwogCi0gICAgdmlydHVhbCBzdGF0dXNfdCBzdGFydChNZXRhRGF0YUJhc2UgKnBhcmFtcyA9IE5VTEwpOworICAgIHZpcnR1YWwgc3RhdHVzX3Qgc3RhcnQoKTsKICAgICB2aXJ0dWFsIHN0YXR1c190IHN0b3AoKTsKICAgICB2aXJ0dWFsIHN0YXR1c190IGdldEZvcm1hdChNZXRhRGF0YUJhc2UgJik7CiAKQEAgLTg4LDcgKzg3LDcgQEAKIE1QRUcyVFNTb3VyY2U6On5NUEVHMlRTU291cmNlKCkgewogfQogCi1zdGF0dXNfdCBNUEVHMlRTU291cmNlOjpzdGFydChNZXRhRGF0YUJhc2UgKikgeworc3RhdHVzX3QgTVBFRzJUU1NvdXJjZTo6c3RhcnQoKSB7CiAgICAgcmV0dXJuIG1JbXBsLT5zdGFydChOVUxMKTsgLy8gQW5vdGhlclBhY2tldFNvdXJjZTo6c3RhcnQoKSBkb2Vzbid0IHVzZSBpdHMgYXJndW1lbnQKIH0KIApAQCAtMTEwLDcgKzEwOSw3IEBACiAgICAgUmVhZE9wdGlvbnM6OlNlZWtNb2RlIHNlZWtNb2RlOwogICAgIGlmIChtRG9lc1NlZWsgJiYgb3B0aW9ucyAmJiBvcHRpb25zLT5nZXRTZWVrVG8oJnNlZWtUaW1lVXMsICZzZWVrTW9kZSkpIHsKICAgICAgICAgLy8gc2VlayBpcyBuZWVkZWQKLSAgICAgICAgc3RhdHVzX3QgZXJyID0gbUV4dHJhY3Rvci0+c2VlayhzZWVrVGltZVVzLCBzZWVrTW9kZSk7CisgICAgICAgIHN0YXR1c190IGVyciA9IG1FeHRyYWN0b3ItPnNlZWsoc2Vla1RpbWVVcywgKFJlYWRPcHRpb25zOjpTZWVrTW9kZSlzZWVrTW9kZSk7CiAgICAgICAgIGlmIChlcnIgIT0gT0spIHsKICAgICAgICAgICAgIHJldHVybiBlcnI7CiAgICAgICAgIH0KQEAgLTEyMCwxMiArMTE5LDEyIEBACiAgICAgICAgIHJldHVybiBFUlJPUl9FTkRfT0ZfU1RSRUFNOwogICAgIH0KIAotICAgIHJldHVybiBtSW1wbC0+cmVhZChvdXQsIG9wdGlvbnMpOworICAgIHJldHVybiBtSW1wbC0+cmVhZChvdXQsIChNZWRpYVNvdXJjZTo6UmVhZE9wdGlvbnMqKSBvcHRpb25zKTsKIH0KIAogLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KIAotTVBFRzJUU0V4dHJhY3Rvcjo6TVBFRzJUU0V4dHJhY3RvcihEYXRhU291cmNlQmFzZSAqc291cmNlKQorTVBFRzJUU0V4dHJhY3Rvcjo6TVBFRzJUU0V4dHJhY3RvcihEYXRhU291cmNlSGVscGVyICpzb3VyY2UpCiAgICAgOiBtRGF0YVNvdXJjZShzb3VyY2UpLAogICAgICAgbVBhcnNlcihuZXcgQVRTUGFyc2VyKSwKICAgICAgIG1MYXN0U3luY0V2ZW50KDApLApAQCAtMTMzLDExICsxMzIsMTUgQEAKICAgICBpbml0KCk7CiB9CiAKK01QRUcyVFNFeHRyYWN0b3I6On5NUEVHMlRTRXh0cmFjdG9yKCkgeworICAgIGRlbGV0ZSBtRGF0YVNvdXJjZTsKK30KKwogc2l6ZV90IE1QRUcyVFNFeHRyYWN0b3I6OmNvdW50VHJhY2tzKCkgewogICAgIHJldHVybiBtU291cmNlSW1wbHMuc2l6ZSgpOwogfQogCi1NZWRpYVRyYWNrICpNUEVHMlRTRXh0cmFjdG9yOjpnZXRUcmFjayhzaXplX3QgaW5kZXgpIHsKK01lZGlhVHJhY2tIZWxwZXIgKk1QRUcyVFNFeHRyYWN0b3I6OmdldFRyYWNrKHNpemVfdCBpbmRleCkgewogICAgIGlmIChpbmRleCA+PSBtU291cmNlSW1wbHMuc2l6ZSgpKSB7CiAgICAgICAgIHJldHVybiBOVUxMOwogICAgIH0KQEAgLTQ5MSw3ICs0OTQsNyBAQAogfQogCiBzdGF0dXNfdCBNUEVHMlRTRXh0cmFjdG9yOjpzZWVrKGludDY0X3Qgc2Vla1RpbWVVcywKLSAgICAgICAgY29uc3QgTWVkaWFUcmFjazo6UmVhZE9wdGlvbnM6OlNlZWtNb2RlICZzZWVrTW9kZSkgeworICAgICAgICBjb25zdCBNZWRpYVRyYWNrSGVscGVyOjpSZWFkT3B0aW9uczo6U2Vla01vZGUgJnNlZWtNb2RlKSB7CiAgICAgaWYgKG1TZWVrU3luY1BvaW50cyA9PSBOVUxMIHx8IG1TZWVrU3luY1BvaW50cy0+aXNFbXB0eSgpKSB7CiAgICAgICAgIEFMT0dXKCJObyBzeW5jIHBvaW50IHRvIHNlZWsgdG8uIik7CiAgICAgICAgIC8vIC4uLiBhbmQgdGhlcmVmb3JlIHdlIGhhdmUgbm90aGluZyB1c2VmdWwgdG8gZG8gaGVyZS4KQEAgLTUxMiwxOCArNTE1LDE4IEBACiAgICAgfQogCiAgICAgc3dpdGNoIChzZWVrTW9kZSkgewotICAgICAgICBjYXNlIE1lZGlhVHJhY2s6OlJlYWRPcHRpb25zOjpTRUVLX05FWFRfU1lOQzoKKyAgICAgICAgY2FzZSBNZWRpYVRyYWNrSGVscGVyOjpSZWFkT3B0aW9uczo6U0VFS19ORVhUX1NZTkM6CiAgICAgICAgICAgICBpZiAoaW5kZXggPT0gbVNlZWtTeW5jUG9pbnRzLT5zaXplKCkpIHsKICAgICAgICAgICAgICAgICBBTE9HVygiTmV4dCBzeW5jIG5vdCBmb3VuZDsgc3RhcnRpbmcgZnJvbSB0aGUgbGF0ZXN0IHN5bmMuIik7CiAgICAgICAgICAgICAgICAgLS1pbmRleDsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIE1lZGlhVHJhY2s6OlJlYWRPcHRpb25zOjpTRUVLX0NMT1NFU1RfU1lOQzoKLSAgICAgICAgY2FzZSBNZWRpYVRyYWNrOjpSZWFkT3B0aW9uczo6U0VFS19DTE9TRVNUOgorICAgICAgICBjYXNlIE1lZGlhVHJhY2tIZWxwZXI6OlJlYWRPcHRpb25zOjpTRUVLX0NMT1NFU1RfU1lOQzoKKyAgICAgICAgY2FzZSBNZWRpYVRyYWNrSGVscGVyOjpSZWFkT3B0aW9uczo6U0VFS19DTE9TRVNUOgogICAgICAgICAgICAgQUxPR1coInNlZWtNb2RlIG5vdCBzdXBwb3J0ZWQ6ICVkOyBmYWxsaW5nIGJhY2sgdG8gUFJFVklPVVNfU1lOQyIsCiAgICAgICAgICAgICAgICAgICAgIHNlZWtNb2RlKTsKICAgICAgICAgICAgIEZBTExUSFJPVUdIX0lOVEVOREVEOwotICAgICAgICBjYXNlIE1lZGlhVHJhY2s6OlJlYWRPcHRpb25zOjpTRUVLX1BSRVZJT1VTX1NZTkM6CisgICAgICAgIGNhc2UgTWVkaWFUcmFja0hlbHBlcjo6UmVhZE9wdGlvbnM6OlNFRUtfUFJFVklPVVNfU1lOQzoKICAgICAgICAgICAgIGlmIChpbmRleCA9PSAwKSB7CiAgICAgICAgICAgICAgICAgQUxPR1coIlByZXZpb3VzIHN5bmMgbm90IGZvdW5kOyBzdGFydGluZyBmcm9tIHRoZSBlYXJsaWVzdCAiCiAgICAgICAgICAgICAgICAgICAgICAgICAic3luYy4iKTsKQEAgLTY2Niw3ICs2NjksNyBAQAogCiAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLwogCi1ib29sIFNuaWZmTVBFRzJUUyhEYXRhU291cmNlQmFzZSAqc291cmNlLCBmbG9hdCAqY29uZmlkZW5jZSkgeworYm9vbCBTbmlmZk1QRUcyVFMoRGF0YVNvdXJjZUhlbHBlciAqc291cmNlLCBmbG9hdCAqY29uZmlkZW5jZSkgewogICAgIGZvciAoaW50IGkgPSAwOyBpIDwgNTsgKytpKSB7CiAgICAgICAgIGNoYXIgaGVhZGVyOwogICAgICAgICBpZiAoc291cmNlLT5yZWFkQXQoa1RTUGFja2V0U2l6ZSAqIGksICZoZWFkZXIsIDEpICE9IDEKZGlmZiAtLWdpdCBhL21lZGlhL2V4dHJhY3RvcnMvbXBlZzIvTVBFRzJUU0V4dHJhY3Rvci5oIGIvbWVkaWEvZXh0cmFjdG9ycy9tcGVnMi9NUEVHMlRTRXh0cmFjdG9yLmgKaW5kZXggY2JkZDNjYi4uNDAxMzQ0MiAxMDA2NDQKLS0tIGEvbWVkaWEvZXh0cmFjdG9ycy9tcGVnMi9NUEVHMlRTRXh0cmFjdG9yLmgKKysrIGIvbWVkaWEvZXh0cmFjdG9ycy9tcGVnMi9NUEVHMlRTRXh0cmFjdG9yLmgKQEAgLTIwLDggKzIwLDggQEAKICNkZWZpbmUgTVBFRzJfVFNfRVhUUkFDVE9SX0hfCiAKICNpbmNsdWRlIDxtZWRpYS9zdGFnZWZyaWdodC9mb3VuZGF0aW9uL0FCYXNlLmg+Ci0jaW5jbHVkZSA8bWVkaWEvTWVkaWFFeHRyYWN0b3IuaD4KLSNpbmNsdWRlIDxtZWRpYS9NZWRpYVRyYWNrLmg+CisjaW5jbHVkZSA8bWVkaWEvTWVkaWFFeHRyYWN0b3JQbHVnaW5BcGkuaD4KKyNpbmNsdWRlIDxtZWRpYS9NZWRpYUV4dHJhY3RvclBsdWdpbkhlbHBlci5oPgogI2luY2x1ZGUgPG1lZGlhL3N0YWdlZnJpZ2h0L01ldGFEYXRhQmFzZS5oPgogI2luY2x1ZGUgPHV0aWxzL3RocmVhZHMuaD4KICNpbmNsdWRlIDx1dGlscy9LZXllZFZlY3Rvci5oPgpAQCAtMzQsMTUgKzM0LDE1IEBACiBzdHJ1Y3QgQU1lc3NhZ2U7CiBzdHJ1Y3QgQW5vdGhlclBhY2tldFNvdXJjZTsKIHN0cnVjdCBBVFNQYXJzZXI7Ci1jbGFzcyBEYXRhU291cmNlQmFzZTsKK3N0cnVjdCBDRGF0YVNvdXJjZTsKIHN0cnVjdCBNUEVHMlRTU291cmNlOwogY2xhc3MgU3RyaW5nODsKIAotc3RydWN0IE1QRUcyVFNFeHRyYWN0b3IgOiBwdWJsaWMgTWVkaWFFeHRyYWN0b3IgewotICAgIGV4cGxpY2l0IE1QRUcyVFNFeHRyYWN0b3IoRGF0YVNvdXJjZUJhc2UgKnNvdXJjZSk7CitzdHJ1Y3QgTVBFRzJUU0V4dHJhY3RvciA6IHB1YmxpYyBNZWRpYUV4dHJhY3RvclBsdWdpbkhlbHBlciB7CisgICAgZXhwbGljaXQgTVBFRzJUU0V4dHJhY3RvcihEYXRhU291cmNlSGVscGVyICpzb3VyY2UpOwogCiAgICAgdmlydHVhbCBzaXplX3QgY291bnRUcmFja3MoKTsKLSAgICB2aXJ0dWFsIE1lZGlhVHJhY2sgKmdldFRyYWNrKHNpemVfdCBpbmRleCk7CisgICAgdmlydHVhbCBNZWRpYVRyYWNrSGVscGVyICpnZXRUcmFjayhzaXplX3QgaW5kZXgpOwogICAgIHZpcnR1YWwgc3RhdHVzX3QgZ2V0VHJhY2tNZXRhRGF0YShNZXRhRGF0YUJhc2UgJm1ldGEsIHNpemVfdCBpbmRleCwgdWludDMyX3QgZmxhZ3MpOwogCiAgICAgdmlydHVhbCBzdGF0dXNfdCBnZXRNZXRhRGF0YShNZXRhRGF0YUJhc2UmIG1ldGEpOwpAQCAtNTIsMTIgKzUyLDE1IEBACiAgICAgdmlydHVhbCB1aW50MzJfdCBmbGFncygpIGNvbnN0OwogICAgIHZpcnR1YWwgY29uc3QgY2hhciAqIG5hbWUoKSB7IHJldHVybiAiTVBFRzJUU0V4dHJhY3RvciI7IH0KIAorcHJvdGVjdGVkOgorICAgIHZpcnR1YWwgfk1QRUcyVFNFeHRyYWN0b3IoKTsKKwogcHJpdmF0ZToKICAgICBmcmllbmQgc3RydWN0IE1QRUcyVFNTb3VyY2U7CiAKICAgICBtdXRhYmxlIE11dGV4IG1Mb2NrOwogCi0gICAgRGF0YVNvdXJjZUJhc2UgKm1EYXRhU291cmNlOworICAgIERhdGFTb3VyY2VIZWxwZXIgKm1EYXRhU291cmNlOwogCiAgICAgc3A8QVRTUGFyc2VyPiBtUGFyc2VyOwogCkBAIC04MSwxMyArODQsMTMgQEAKICAgICAvLyBUcnkgdG8gZmVlZCBtb3JlIGRhdGEgZnJvbSBzb3VyY2UgdG8gcGFyc2VyLgogICAgIC8vIHxpc0luaXR8IG1lYW5zIHRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIGluc2lkZSBpbml0KCkuIFRoaXMgaXMgYSBzaWduYWwgdG8KICAgICAvLyBzYXZlIFN5bmNFdmVudCBzbyB0aGF0IGluaXQoKSBjYW4gYWRkIFN5bmNQb2ludCBhZnRlciBpdCB1cGRhdGVzIHxtU291cmNlSW1wbHN8LgotICAgIC8vIFRoaXMgZnVuY3Rpb24gcmV0dXJucyBPSyBpZiBleHBlY3RlZCBhbW91bnQgb2YgZGF0YSBpcyBmZWQgZnJvbSBEYXRhU291cmNlQmFzZSB0bworICAgIC8vIFRoaXMgZnVuY3Rpb24gcmV0dXJucyBPSyBpZiBleHBlY3RlZCBhbW91bnQgb2YgZGF0YSBpcyBmZWQgZnJvbSBEYXRhU291cmNlSGVscGVyIHRvCiAgICAgLy8gcGFyc2VyIGFuZCBpcyBzdWNjZXNzZnVsbHkgcGFyc2VkLiBPdGhlcndpc2UsIHZhcmlvdXMgZXJyb3IgY29kZXMgY291bGQgYmUKLSAgICAvLyByZXR1cm5lZCwgZS5nLiwgRVJST1JfRU5EX09GX1NUUkVBTSwgb3Igbm8gZGF0YSBhdmFpbGFsYmUgZnJvbSBEYXRhU291cmNlQmFzZSwgb3IKKyAgICAvLyByZXR1cm5lZCwgZS5nLiwgRVJST1JfRU5EX09GX1NUUkVBTSwgb3Igbm8gZGF0YSBhdmFpbGFsYmUgZnJvbSBEYXRhU291cmNlSGVscGVyLCBvcgogICAgIC8vIHRoZSBkYXRhIGhhcyBzeW50YXggZXJyb3IgZHVyaW5nIHBhcnNpbmcsIGV0Yy4KICAgICBzdGF0dXNfdCBmZWVkTW9yZShib29sIGlzSW5pdCA9IGZhbHNlKTsKICAgICBzdGF0dXNfdCBzZWVrKGludDY0X3Qgc2Vla1RpbWVVcywKLSAgICAgICAgICAgIGNvbnN0IE1lZGlhU291cmNlOjpSZWFkT3B0aW9uczo6U2Vla01vZGUmIHNlZWtNb2RlKTsKKyAgICAgICAgICAgIGNvbnN0IE1lZGlhVHJhY2tIZWxwZXI6OlJlYWRPcHRpb25zOjpTZWVrTW9kZSYgc2Vla01vZGUpOwogICAgIHN0YXR1c190IHF1ZXVlRGlzY29udGludWl0eUZvclNlZWsoaW50NjRfdCBhY3R1YWxTZWVrVGltZVVzKTsKICAgICBzdGF0dXNfdCBzZWVrQmV5b25kKGludDY0X3Qgc2Vla1RpbWVVcyk7CiAKQEAgLTEwMSw3ICsxMDQsNyBAQAogICAgIERJU0FMTE9XX0VWSUxfQ09OU1RSVUNUT1JTKE1QRUcyVFNFeHRyYWN0b3IpOwogfTsKIAotYm9vbCBTbmlmZk1QRUcyVFMoRGF0YVNvdXJjZUJhc2UgKnNvdXJjZSwgZmxvYXQgKmNvbmZpZGVuY2UpOworYm9vbCBTbmlmZk1QRUcyVFMoRGF0YVNvdXJjZUhlbHBlciAqc291cmNlLCBmbG9hdCAqY29uZmlkZW5jZSk7CiAKIH0gIC8vIG5hbWVzcGFjZSBhbmRyb2lkCiAKZGlmZiAtLWdpdCBhL21lZGlhL2V4dHJhY3RvcnMvb2dnL0FuZHJvaWQuYnAgYi9tZWRpYS9leHRyYWN0b3JzL29nZy9BbmRyb2lkLmJwCmluZGV4IDdjNmZjNzUuLmM2ZGViMTggMTAwNjQ0Ci0tLSBhL21lZGlhL2V4dHJhY3RvcnMvb2dnL0FuZHJvaWQuYnAKKysrIGIvbWVkaWEvZXh0cmFjdG9ycy9vZ2cvQW5kcm9pZC5icApAQCAtMTAsMTAgKzEwLDEyIEBACiAgICAgc2hhcmVkX2xpYnM6IFsKICAgICAgICAgImxpYmxvZyIsCiAgICAgICAgICJsaWJtZWRpYWV4dHJhY3RvciIsCisgICAgICAgICJsaWJtZWRpYW5kayIsCiAgICAgXSwKIAogICAgIHN0YXRpY19saWJzOiBbCiAgICAgICAgICJsaWJzdGFnZWZyaWdodF9mb3VuZGF0aW9uIiwKKyAgICAgICAgImxpYnN0YWdlZnJpZ2h0X21ldGFkYXRhdXRpbHMiLAogICAgICAgICAibGlidXRpbHMiLAogICAgICAgICAibGlidm9yYmlzaWRlYyIsCiAgICAgXSwKZGlmZiAtLWdpdCBhL21lZGlhL2V4dHJhY3RvcnMvb2dnL09nZ0V4dHJhY3Rvci5jcHAgYi9tZWRpYS9leHRyYWN0b3JzL29nZy9PZ2dFeHRyYWN0b3IuY3BwCmluZGV4IGIyZmU2OWMuLmE1MmNjYjEgMTAwNjQ0Ci0tLSBhL21lZGlhL2V4dHJhY3RvcnMvb2dnL09nZ0V4dHJhY3Rvci5jcHAKKysrIGIvbWVkaWEvZXh0cmFjdG9ycy9vZ2cvT2dnRXh0cmFjdG9yLmNwcApAQCAtMjEsMTAgKzIxLDkgQEAKICNpbmNsdWRlICJPZ2dFeHRyYWN0b3IuaCIKIAogI2luY2x1ZGUgPGN1dGlscy9wcm9wZXJ0aWVzLmg+CisjaW5jbHVkZSA8dXRpbHMvVmVjdG9yLmg+CiAjaW5jbHVkZSA8bWVkaWEvRGF0YVNvdXJjZUJhc2UuaD4KICNpbmNsdWRlIDxtZWRpYS9FeHRyYWN0b3JVdGlscy5oPgotI2luY2x1ZGUgPG1lZGlhL01lZGlhVHJhY2suaD4KLSNpbmNsdWRlIDxtZWRpYS9Wb3JiaXNDb21tZW50Lmg+CiAjaW5jbHVkZSA8bWVkaWEvc3RhZ2VmcmlnaHQvZm91bmRhdGlvbi9BQnVmZmVyLmg+CiAjaW5jbHVkZSA8bWVkaWEvc3RhZ2VmcmlnaHQvZm91bmRhdGlvbi9BRGVidWcuaD4KICNpbmNsdWRlIDxtZWRpYS9zdGFnZWZyaWdodC9mb3VuZGF0aW9uL2Jhc2U2NC5oPgpAQCAtMzQsNiArMzMsNyBAQAogI2luY2x1ZGUgPG1lZGlhL3N0YWdlZnJpZ2h0L01lZGlhRGVmcy5oPgogI2luY2x1ZGUgPG1lZGlhL3N0YWdlZnJpZ2h0L01lZGlhRXJyb3JzLmg+CiAjaW5jbHVkZSA8bWVkaWEvc3RhZ2VmcmlnaHQvTWV0YURhdGFCYXNlLmg+CisjaW5jbHVkZSA8bWVkaWEvc3RhZ2VmcmlnaHQvTWV0YURhdGFVdGlscy5oPgogI2luY2x1ZGUgPHV0aWxzL1N0cmluZzguaD4KIAogZXh0ZXJuICJDIiB7CkBAIC00NywxNSArNDcsMTUgQEAKIAogbmFtZXNwYWNlIGFuZHJvaWQgewogCi1zdHJ1Y3QgT2dnU291cmNlIDogcHVibGljIE1lZGlhVHJhY2sgeworc3RydWN0IE9nZ1NvdXJjZSA6IHB1YmxpYyBNZWRpYVRyYWNrSGVscGVyVjIgewogICAgIGV4cGxpY2l0IE9nZ1NvdXJjZShPZ2dFeHRyYWN0b3IgKmV4dHJhY3Rvcik7CiAKLSAgICB2aXJ0dWFsIHN0YXR1c190IGdldEZvcm1hdChNZXRhRGF0YUJhc2UgJik7CisgICAgdmlydHVhbCBtZWRpYV9zdGF0dXNfdCBnZXRGb3JtYXQoQU1lZGlhRm9ybWF0ICopOwogCi0gICAgdmlydHVhbCBzdGF0dXNfdCBzdGFydChNZXRhRGF0YUJhc2UgKnBhcmFtcyA9IE5VTEwpOwotICAgIHZpcnR1YWwgc3RhdHVzX3Qgc3RvcCgpOworICAgIHZpcnR1YWwgbWVkaWFfc3RhdHVzX3Qgc3RhcnQoKTsKKyAgICB2aXJ0dWFsIG1lZGlhX3N0YXR1c190IHN0b3AoKTsKIAotICAgIHZpcnR1YWwgc3RhdHVzX3QgcmVhZCgKKyAgICB2aXJ0dWFsIG1lZGlhX3N0YXR1c190IHJlYWQoCiAgICAgICAgICAgICBNZWRpYUJ1ZmZlckJhc2UgKipidWZmZXIsIGNvbnN0IFJlYWRPcHRpb25zICpvcHRpb25zID0gTlVMTCk7CiAKIHByb3RlY3RlZDoKQEAgLTcxLDI2ICs3MSwyNSBAQAogCiBzdHJ1Y3QgTXlPZ2dFeHRyYWN0b3IgewogICAgIE15T2dnRXh0cmFjdG9yKAotICAgICAgICAgICAgRGF0YVNvdXJjZUJhc2UgKnNvdXJjZSwKKyAgICAgICAgICAgIERhdGFTb3VyY2VIZWxwZXIgKnNvdXJjZSwKICAgICAgICAgICAgIGNvbnN0IGNoYXIgKm1pbWVUeXBlLAogICAgICAgICAgICAgc2l6ZV90IG51bUhlYWRlcnMsCiAgICAgICAgICAgICBpbnQ2NF90IHNlZWtQcmVSb2xsVXMpOwogICAgIHZpcnR1YWwgfk15T2dnRXh0cmFjdG9yKCk7CiAKLSAgICBzdGF0dXNfdCBnZXRGb3JtYXQoTWV0YURhdGFCYXNlICYpIGNvbnN0OworICAgIG1lZGlhX3N0YXR1c190IGdldEZvcm1hdChBTWVkaWFGb3JtYXQgKikgY29uc3Q7CiAKICAgICAvLyBSZXR1cm5zIGFuIGFwcHJveGltYXRlIGJpdHJhdGUgaW4gYml0cyBwZXIgc2Vjb25kLgogICAgIHZpcnR1YWwgdWludDY0X3QgYXBwcm94Qml0cmF0ZSgpIGNvbnN0ID0gMDsKIAogICAgIHN0YXR1c190IHNlZWtUb1RpbWUoaW50NjRfdCB0aW1lVXMpOwogICAgIHN0YXR1c190IHNlZWtUb09mZnNldChvZmY2NF90IG9mZnNldCk7Ci0gICAgdmlydHVhbCBzdGF0dXNfdCByZWFkTmV4dFBhY2tldChNZWRpYUJ1ZmZlckJhc2UgKipidWZmZXIpID0gMDsKKyAgICB2aXJ0dWFsIG1lZGlhX3N0YXR1c190IHJlYWROZXh0UGFja2V0KE1lZGlhQnVmZmVyQmFzZSAqKmJ1ZmZlcikgPSAwOwogCiAgICAgc3RhdHVzX3QgaW5pdCgpOwogCi0gICAgc3RhdHVzX3QgZ2V0RmlsZU1ldGFEYXRhKE1ldGFEYXRhQmFzZSAmbWV0YSkgewotICAgICAgICBtZXRhID0gbUZpbGVNZXRhOwotICAgICAgICByZXR1cm4gT0s7CisgICAgbWVkaWFfc3RhdHVzX3QgZ2V0RmlsZU1ldGFEYXRhKEFNZWRpYUZvcm1hdCAqbWV0YSkgeworICAgICAgICByZXR1cm4gQU1lZGlhRm9ybWF0X2NvcHkobWV0YSwgbUZpbGVNZXRhKTsKICAgICB9CiAKIHByb3RlY3RlZDoKQEAgLTExMCw3ICsxMDksNyBAQAogICAgICAgICBpbnQ2NF90IG1UaW1lVXM7CiAgICAgfTsKIAotICAgIERhdGFTb3VyY2VCYXNlICptU291cmNlOworICAgIERhdGFTb3VyY2VIZWxwZXIgKm1Tb3VyY2U7CiAgICAgb2ZmNjRfdCBtT2Zmc2V0OwogICAgIFBhZ2UgbUN1cnJlbnRQYWdlOwogICAgIHVpbnQ2NF90IG1DdXJHcmFudWxlUG9zaXRpb247CkBAIC0xMjksOCArMTI4LDggQEAKICAgICB2b3JiaXNfaW5mbyBtVmk7CiAgICAgdm9yYmlzX2NvbW1lbnQgbVZjOwogCi0gICAgTWV0YURhdGFCYXNlIG1NZXRhOwotICAgIE1ldGFEYXRhQmFzZSBtRmlsZU1ldGE7CisgICAgQU1lZGlhRm9ybWF0ICptTWV0YTsKKyAgICBBTWVkaWFGb3JtYXQgKm1GaWxlTWV0YTsKIAogICAgIFZlY3RvcjxUT0NFbnRyeT4gbVRhYmxlT2ZDb250ZW50czsKIApAQCAtMTQ2LDcgKzE0NSw3IEBACiAgICAgLy8gMSAtIGJpdHN0cmVhbSBpZGVudGlmaWNhdGlvbiBoZWFkZXIKICAgICAvLyAzIC0gY29tbWVudCBoZWFkZXIKICAgICAvLyA1IC0gY29kZWMgc2V0dXAgaGVhZGVyIChWb3JiaXMgb25seSkKLSAgICB2aXJ0dWFsIHN0YXR1c190IHZlcmlmeUhlYWRlcihNZWRpYUJ1ZmZlckJhc2UgKmJ1ZmZlciwgdWludDhfdCB0eXBlKSA9IDA7CisgICAgdmlydHVhbCBtZWRpYV9zdGF0dXNfdCB2ZXJpZnlIZWFkZXIoTWVkaWFCdWZmZXJCYXNlICpidWZmZXIsIHVpbnQ4X3QgdHlwZSkgPSAwOwogCiAgICAgLy8gUmVhZCB0aGUgbmV4dCBvZ2cgcGFja2V0IGZyb20gdGhlIHVuZGVybHlpbmcgZGF0YSBzb3VyY2U7IG9wdGlvbmFsbHkKICAgICAvLyBjYWxjdWxhdGUgdGhlIHRpbWVzdGFtcCBmb3IgdGhlIG91dHB1dCBwYWNrZXQgd2hpbHN0IHByZXRlbmRpbmcKQEAgLTE1NCw3ICsxNTMsNyBAQAogICAgIC8vCiAgICAgLy8gKmJ1ZmZlciBpcyBOVUxMJ2VkIG91dCBpbW1lZGlhdGVseSB1cG9uIGVudHJ5LCBhbmQgaWYgc3VjY2Vzc2Z1bCBhIG5ldyBidWZmZXIgaXMgYWxsb2NhdGVkOwogICAgIC8vIGNsaWVudHMgYXJlIHJlc3BvbnNpYmxlIGZvciByZWxlYXNpbmcgdGhlIG9yaWdpbmFsIGJ1ZmZlci4KLSAgICBzdGF0dXNfdCBfcmVhZE5leHRQYWNrZXQoTWVkaWFCdWZmZXJCYXNlICoqYnVmZmVyLCBib29sIGNhbGNWb3JiaXNUaW1lc3RhbXApOworICAgIG1lZGlhX3N0YXR1c190IF9yZWFkTmV4dFBhY2tldChNZWRpYUJ1ZmZlckJhc2UgKipidWZmZXIsIGJvb2wgY2FsY1ZvcmJpc1RpbWVzdGFtcCk7CiAKICAgICBpbnQzMl90IGdldFBhY2tldEJsb2NrU2l6ZShNZWRpYUJ1ZmZlckJhc2UgKmJ1ZmZlcik7CiAKQEAgLTE2OSw3ICsxNjgsNyBAQAogfTsKIAogc3RydWN0IE15Vm9yYmlzRXh0cmFjdG9yIDogcHVibGljIE15T2dnRXh0cmFjdG9yIHsKLSAgICBleHBsaWNpdCBNeVZvcmJpc0V4dHJhY3RvcihEYXRhU291cmNlQmFzZSAqc291cmNlKQorICAgIGV4cGxpY2l0IE15Vm9yYmlzRXh0cmFjdG9yKERhdGFTb3VyY2VIZWxwZXIgKnNvdXJjZSkKICAgICAgICAgOiBNeU9nZ0V4dHJhY3Rvcihzb3VyY2UsCiAgICAgICAgICAgICAgICAgTUVESUFfTUlNRVRZUEVfQVVESU9fVk9SQklTLAogICAgICAgICAgICAgICAgIC8qIG51bUhlYWRlcnMgKi8gMywKQEAgLTE3OCw3ICsxNzcsNyBAQAogCiAgICAgdmlydHVhbCB1aW50NjRfdCBhcHByb3hCaXRyYXRlKCkgY29uc3Q7CiAKLSAgICB2aXJ0dWFsIHN0YXR1c190IHJlYWROZXh0UGFja2V0KE1lZGlhQnVmZmVyQmFzZSAqKmJ1ZmZlcikgeworICAgIHZpcnR1YWwgbWVkaWFfc3RhdHVzX3QgcmVhZE5leHRQYWNrZXQoTWVkaWFCdWZmZXJCYXNlICoqYnVmZmVyKSB7CiAgICAgICAgIHJldHVybiBfcmVhZE5leHRQYWNrZXQoYnVmZmVyLCAvKiBjYWxjVm9yYmlzVGltZXN0YW1wID0gKi8gdHJ1ZSk7CiAgICAgfQogCkBAIC0xOTAsMTQgKzE4OSwxNCBAQAogICAgICAgICByZXR1cm4gZ3JhbnVsZVBvcyAqIDEwMDAwMDBsbCAvIG1WaS5yYXRlOwogICAgIH0KIAotICAgIHZpcnR1YWwgc3RhdHVzX3QgdmVyaWZ5SGVhZGVyKE1lZGlhQnVmZmVyQmFzZSAqYnVmZmVyLCB1aW50OF90IHR5cGUpOworICAgIHZpcnR1YWwgbWVkaWFfc3RhdHVzX3QgdmVyaWZ5SGVhZGVyKE1lZGlhQnVmZmVyQmFzZSAqYnVmZmVyLCB1aW50OF90IHR5cGUpOwogfTsKIAogc3RydWN0IE15T3B1c0V4dHJhY3RvciA6IHB1YmxpYyBNeU9nZ0V4dHJhY3RvciB7CiAgICAgc3RhdGljIGNvbnN0IGludDMyX3Qga09wdXNTYW1wbGVSYXRlID0gNDgwMDA7CiAgICAgc3RhdGljIGNvbnN0IGludDY0X3Qga09wdXNTZWVrUHJlUm9sbFVzID0gODAwMDA7IC8vIDgwIG1zCiAKLSAgICBleHBsaWNpdCBNeU9wdXNFeHRyYWN0b3IoRGF0YVNvdXJjZUJhc2UgKnNvdXJjZSkKKyAgICBleHBsaWNpdCBNeU9wdXNFeHRyYWN0b3IoRGF0YVNvdXJjZUhlbHBlciAqc291cmNlKQogICAgICAgICA6IE15T2dnRXh0cmFjdG9yKHNvdXJjZSwgTUVESUFfTUlNRVRZUEVfQVVESU9fT1BVUywgLypudW1IZWFkZXJzKi8gMiwga09wdXNTZWVrUHJlUm9sbFVzKSwKICAgICAgICAgICBtQ2hhbm5lbENvdW50KDApLAogICAgICAgICAgIG1Db2RlY0RlbGF5KDApLApAQCAtMjA4LDE1ICsyMDcsMTUgQEAKICAgICAgICAgcmV0dXJuIDA7CiAgICAgfQogCi0gICAgdmlydHVhbCBzdGF0dXNfdCByZWFkTmV4dFBhY2tldChNZWRpYUJ1ZmZlckJhc2UgKipidWZmZXIpOworICAgIHZpcnR1YWwgbWVkaWFfc3RhdHVzX3QgcmVhZE5leHRQYWNrZXQoTWVkaWFCdWZmZXJCYXNlICoqYnVmZmVyKTsKIAogcHJvdGVjdGVkOgogICAgIHZpcnR1YWwgaW50NjRfdCBnZXRUaW1lVXNPZkdyYW51bGUodWludDY0X3QgZ3JhbnVsZVBvcykgY29uc3Q7Ci0gICAgdmlydHVhbCBzdGF0dXNfdCB2ZXJpZnlIZWFkZXIoTWVkaWFCdWZmZXJCYXNlICpidWZmZXIsIHVpbnQ4X3QgdHlwZSk7CisgICAgdmlydHVhbCBtZWRpYV9zdGF0dXNfdCB2ZXJpZnlIZWFkZXIoTWVkaWFCdWZmZXJCYXNlICpidWZmZXIsIHVpbnQ4X3QgdHlwZSk7CiAKIHByaXZhdGU6Ci0gICAgc3RhdHVzX3QgdmVyaWZ5T3B1c0hlYWRlcihNZWRpYUJ1ZmZlckJhc2UgKmJ1ZmZlcik7Ci0gICAgc3RhdHVzX3QgdmVyaWZ5T3B1c0NvbW1lbnRzKE1lZGlhQnVmZmVyQmFzZSAqYnVmZmVyKTsKKyAgICBtZWRpYV9zdGF0dXNfdCB2ZXJpZnlPcHVzSGVhZGVyKE1lZGlhQnVmZmVyQmFzZSAqYnVmZmVyKTsKKyAgICBtZWRpYV9zdGF0dXNfdCB2ZXJpZnlPcHVzQ29tbWVudHMoTWVkaWFCdWZmZXJCYXNlICpidWZmZXIpOwogICAgIHVpbnQzMl90IGdldE51bVNhbXBsZXNJblBhY2tldChNZWRpYUJ1ZmZlckJhc2UgKmJ1ZmZlcikgY29uc3Q7CiAKICAgICB1aW50OF90IG1DaGFubmVsQ291bnQ7CkBAIC0yMzcsMjcgKzIzNiwyNyBAQAogICAgIH0KIH0KIAotc3RhdHVzX3QgT2dnU291cmNlOjpnZXRGb3JtYXQoTWV0YURhdGFCYXNlICZtZXRhKSB7CittZWRpYV9zdGF0dXNfdCBPZ2dTb3VyY2U6OmdldEZvcm1hdChBTWVkaWFGb3JtYXQgKm1ldGEpIHsKICAgICByZXR1cm4gbUV4dHJhY3Rvci0+bUltcGwtPmdldEZvcm1hdChtZXRhKTsKIH0KIAotc3RhdHVzX3QgT2dnU291cmNlOjpzdGFydChNZXRhRGF0YUJhc2UgKiAvKiBwYXJhbXMgKi8pIHsKK21lZGlhX3N0YXR1c190IE9nZ1NvdXJjZTo6c3RhcnQoKSB7CiAgICAgaWYgKG1TdGFydGVkKSB7Ci0gICAgICAgIHJldHVybiBJTlZBTElEX09QRVJBVElPTjsKKyAgICAgICAgcmV0dXJuIEFNRURJQV9FUlJPUl9JTlZBTElEX09QRVJBVElPTjsKICAgICB9CiAKICAgICBtU3RhcnRlZCA9IHRydWU7CiAKLSAgICByZXR1cm4gT0s7CisgICAgcmV0dXJuIEFNRURJQV9PSzsKIH0KIAotc3RhdHVzX3QgT2dnU291cmNlOjpzdG9wKCkgeworbWVkaWFfc3RhdHVzX3QgT2dnU291cmNlOjpzdG9wKCkgewogICAgIG1TdGFydGVkID0gZmFsc2U7CiAKLSAgICByZXR1cm4gT0s7CisgICAgcmV0dXJuIEFNRURJQV9PSzsKIH0KIAotc3RhdHVzX3QgT2dnU291cmNlOjpyZWFkKAorbWVkaWFfc3RhdHVzX3QgT2dnU291cmNlOjpyZWFkKAogICAgICAgICBNZWRpYUJ1ZmZlckJhc2UgKipvdXQsIGNvbnN0IFJlYWRPcHRpb25zICpvcHRpb25zKSB7CiAgICAgKm91dCA9IE5VTEw7CiAKQEAgLTI2NiwxNCArMjY1LDE0IEBACiAgICAgaWYgKG9wdGlvbnMgJiYgb3B0aW9ucy0+Z2V0U2Vla1RvKCZzZWVrVGltZVVzLCAmbW9kZSkpIHsKICAgICAgICAgc3RhdHVzX3QgZXJyID0gbUV4dHJhY3Rvci0+bUltcGwtPnNlZWtUb1RpbWUoc2Vla1RpbWVVcyk7CiAgICAgICAgIGlmIChlcnIgIT0gT0spIHsKLSAgICAgICAgICAgIHJldHVybiBlcnI7CisgICAgICAgICAgICByZXR1cm4gQU1FRElBX0VSUk9SX1VOS05PV047CiAgICAgICAgIH0KICAgICB9CiAKICAgICBNZWRpYUJ1ZmZlckJhc2UgKnBhY2tldDsKLSAgICBzdGF0dXNfdCBlcnIgPSBtRXh0cmFjdG9yLT5tSW1wbC0+cmVhZE5leHRQYWNrZXQoJnBhY2tldCk7CisgICAgbWVkaWFfc3RhdHVzX3QgZXJyID0gbUV4dHJhY3Rvci0+bUltcGwtPnJlYWROZXh0UGFja2V0KCZwYWNrZXQpOwogCi0gICAgaWYgKGVyciAhPSBPSykgeworICAgIGlmIChlcnIgIT0gQU1FRElBX09LKSB7CiAgICAgICAgIHJldHVybiBlcnI7CiAgICAgfQogCkBAIC0yOTAsMTMgKzI4OSwxMyBAQAogCiAgICAgKm91dCA9IHBhY2tldDsKIAotICAgIHJldHVybiBPSzsKKyAgICByZXR1cm4gQU1FRElBX09LOwogfQogCiAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLwogCiBNeU9nZ0V4dHJhY3Rvcjo6TXlPZ2dFeHRyYWN0b3IoCi0gICAgICAgIERhdGFTb3VyY2VCYXNlICpzb3VyY2UsCisgICAgICAgIERhdGFTb3VyY2VIZWxwZXIgKnNvdXJjZSwKICAgICAgICAgY29uc3QgY2hhciAqbWltZVR5cGUsCiAgICAgICAgIHNpemVfdCBudW1IZWFkZXJzLAogICAgICAgICBpbnQ2NF90IHNlZWtQcmVSb2xsVXMpCkBAIC0zMTYsMTYgKzMxNSwxOSBAQAogCiAgICAgdm9yYmlzX2luZm9faW5pdCgmbVZpKTsKICAgICB2b3JiaXNfY29tbWVudF9pbml0KCZtVmMpOworICAgIG1NZXRhID0gQU1lZGlhRm9ybWF0X25ldygpOworICAgIG1GaWxlTWV0YSA9IEFNZWRpYUZvcm1hdF9uZXcoKTsKIH0KIAogTXlPZ2dFeHRyYWN0b3I6On5NeU9nZ0V4dHJhY3RvcigpIHsKKyAgICBBTWVkaWFGb3JtYXRfZGVsZXRlKG1GaWxlTWV0YSk7CisgICAgQU1lZGlhRm9ybWF0X2RlbGV0ZShtTWV0YSk7CiAgICAgdm9yYmlzX2NvbW1lbnRfY2xlYXIoJm1WYyk7CiAgICAgdm9yYmlzX2luZm9fY2xlYXIoJm1WaSk7CiB9CiAKLXN0YXR1c190IE15T2dnRXh0cmFjdG9yOjpnZXRGb3JtYXQoTWV0YURhdGFCYXNlICZtZXRhKSBjb25zdCB7Ci0gICAgbWV0YSA9IG1NZXRhOwotICAgIHJldHVybiBPSzsKK21lZGlhX3N0YXR1c190IE15T2dnRXh0cmFjdG9yOjpnZXRGb3JtYXQoQU1lZGlhRm9ybWF0ICptZXRhKSBjb25zdCB7CisgICAgcmV0dXJuIEFNZWRpYUZvcm1hdF9jb3B5KG1ldGEsIG1NZXRhKTsKIH0KIAogc3RhdHVzX3QgTXlPZ2dFeHRyYWN0b3I6OmZpbmROZXh0UGFnZSgKQEAgLTUwNSwyNyArNTA3LDI3IEBACiAgICAgICAgIGlmIChuIDwgMCkgewogICAgICAgICAgICAgcmV0dXJuIG47CiAgICAgICAgIH0gZWxzZSBpZiAobiA9PSAwKSB7Ci0gICAgICAgICAgICByZXR1cm4gRVJST1JfRU5EX09GX1NUUkVBTTsKKyAgICAgICAgICAgIHJldHVybiBBTUVESUFfRVJST1JfRU5EX09GX1NUUkVBTTsKICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIHJldHVybiBFUlJPUl9JTzsKKyAgICAgICAgICAgIHJldHVybiBBTUVESUFfRVJST1JfSU87CiAgICAgICAgIH0KICAgICB9CiAKICAgICBpZiAobWVtY21wKGhlYWRlciwgIk9nZ1MiLCA0KSkgewotICAgICAgICByZXR1cm4gRVJST1JfTUFMRk9STUVEOworICAgICAgICByZXR1cm4gQU1FRElBX0VSUk9SX01BTEZPUk1FRDsKICAgICB9CiAKICAgICBpZiAoaGVhZGVyWzRdICE9IDApIHsKICAgICAgICAgLy8gV3JvbmcgdmVyc2lvbi4KIAotICAgICAgICByZXR1cm4gRVJST1JfVU5TVVBQT1JURUQ7CisgICAgICAgIHJldHVybiBBTUVESUFfRVJST1JfVU5TVVBQT1JURUQ7CiAgICAgfQogCiAgICAgcGFnZS0+bUZsYWdzID0gaGVhZGVyWzVdOwogCiAgICAgaWYgKHBhZ2UtPm1GbGFncyAmIH43KSB7CiAgICAgICAgIC8vIE9ubHkgYml0cyAwLTIgYXJlIGRlZmluZWQgaW4gdmVyc2lvbiAwLgotICAgICAgICByZXR1cm4gRVJST1JfTUFMRk9STUVEOworICAgICAgICByZXR1cm4gQU1FRElBX0VSUk9SX01BTEZPUk1FRDsKICAgICB9CiAKICAgICBwYWdlLT5tR3JhbnVsZVBvc2l0aW9uID0gVTY0TEVfQVQoJmhlYWRlcls2XSk7CkBAIC01NDIsNyArNTQ0LDcgQEAKICAgICBpZiAobVNvdXJjZS0+cmVhZEF0KAogICAgICAgICAgICAgICAgIG9mZnNldCArIHNpemVvZihoZWFkZXIpLCBwYWdlLT5tTGFjZSwgcGFnZS0+bU51bVNlZ21lbnRzKQogICAgICAgICAgICAgPCAoc3NpemVfdClwYWdlLT5tTnVtU2VnbWVudHMpIHsKLSAgICAgICAgcmV0dXJuIEVSUk9SX0lPOworICAgICAgICByZXR1cm4gQU1FRElBX0VSUk9SX0lPOwogICAgIH0KIAogICAgIHNpemVfdCB0b3RhbFNpemUgPSAwOzsKQEAgLTU2NSw3ICs1NjcsNyBAQAogICAgIHJldHVybiBzaXplb2YoaGVhZGVyKSArIHBhZ2UtPm1OdW1TZWdtZW50cyArIHRvdGFsU2l6ZTsKIH0KIAotc3RhdHVzX3QgTXlPcHVzRXh0cmFjdG9yOjpyZWFkTmV4dFBhY2tldChNZWRpYUJ1ZmZlckJhc2UgKipvdXQpIHsKK21lZGlhX3N0YXR1c190IE15T3B1c0V4dHJhY3Rvcjo6cmVhZE5leHRQYWNrZXQoTWVkaWFCdWZmZXJCYXNlICoqb3V0KSB7CiAgICAgaWYgKG1PZmZzZXQgPD0gbUZpcnN0RGF0YU9mZnNldCAmJiBtU3RhcnRHcmFudWxlUG9zaXRpb24gPCAwKSB7CiAgICAgICAgIC8vIFRoZSBmaXJzdCBzYW1wbGUgbWlnaHQgbm90IHN0YXJ0IGF0IHRpbWUgMDsgZmluZCBvdXQgd2hlcmUgYnkgc3VidHJhY3RpbmcKICAgICAgICAgLy8gdGhlIG51bWJlciBvZiBzYW1wbGVzIG9uIHRoZSBmaXJzdCBwYWdlIGZyb20gdGhlIGdyYW51bGUgcG9zaXRpb24KQEAgLTU3NSwxMiArNTc3LDEyIEBACiAgICAgICAgIHVpbnQzMl90IG51bVNhbXBsZXMgPSAwOwogICAgICAgICB1aW50NjRfdCBjdXJHcmFudWxlUG9zaXRpb24gPSAwOwogICAgICAgICB3aGlsZSAodHJ1ZSkgewotICAgICAgICAgICAgc3RhdHVzX3QgZXJyID0gX3JlYWROZXh0UGFja2V0KCZtQnVmLCAvKiBjYWxjVm9yYmlzVGltZXN0YW1wID0gKi9mYWxzZSk7Ci0gICAgICAgICAgICBpZiAoZXJyICE9IE9LICYmIGVyciAhPSBFUlJPUl9FTkRfT0ZfU1RSRUFNKSB7CisgICAgICAgICAgICBtZWRpYV9zdGF0dXNfdCBlcnIgPSBfcmVhZE5leHRQYWNrZXQoJm1CdWYsIC8qIGNhbGNWb3JiaXNUaW1lc3RhbXAgPSAqL2ZhbHNlKTsKKyAgICAgICAgICAgIGlmIChlcnIgIT0gQU1FRElBX09LICYmIGVyciAhPSBBTUVESUFfRVJST1JfRU5EX09GX1NUUkVBTSkgewogICAgICAgICAgICAgICAgIHJldHVybiBlcnI7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICAvLyBGaXJzdCB0d28gcGFnZXMgYXJlIGhlYWRlciBwYWdlcy4KLSAgICAgICAgICAgIGlmIChlcnIgPT0gRVJST1JfRU5EX09GX1NUUkVBTSB8fCBtQ3VycmVudFBhZ2UubVBhZ2VObyA+IDIpIHsKKyAgICAgICAgICAgIGlmIChlcnIgPT0gQU1FRElBX0VSUk9SX0VORF9PRl9TVFJFQU0gfHwgbUN1cnJlbnRQYWdlLm1QYWdlTm8gPiAyKSB7CiAgICAgICAgICAgICAgICAgaWYgKG1CdWYgIT0gTlVMTCkgewogICAgICAgICAgICAgICAgICAgICBtQnVmLT5yZWxlYXNlKCk7CiAgICAgICAgICAgICAgICAgICAgIG1CdWYgPSBOVUxMOwpAQCAtNjAxLDggKzYwMyw4IEBACiAgICAgICAgIHNlZWtUb09mZnNldCgwKTsKICAgICB9CiAKLSAgICBzdGF0dXNfdCBlcnIgPSBfcmVhZE5leHRQYWNrZXQob3V0LCAvKiBjYWxjVm9yYmlzVGltZXN0YW1wID0gKi9mYWxzZSk7Ci0gICAgaWYgKGVyciAhPSBPSykgeworICAgIG1lZGlhX3N0YXR1c190IGVyciA9IF9yZWFkTmV4dFBhY2tldChvdXQsIC8qIGNhbGNWb3JiaXNUaW1lc3RhbXAgPSAqL2ZhbHNlKTsKKyAgICBpZiAoZXJyICE9IEFNRURJQV9PSykgewogICAgICAgICByZXR1cm4gZXJyOwogICAgIH0KIApAQCAtNjIzLDcgKzYyNSw3IEBACiAKICAgICB1aW50MzJfdCBmcmFtZXMgPSBnZXROdW1TYW1wbGVzSW5QYWNrZXQoKm91dCk7CiAgICAgbUN1ckdyYW51bGVQb3NpdGlvbiArPSBmcmFtZXM7Ci0gICAgcmV0dXJuIE9LOworICAgIHJldHVybiBBTUVESUFfT0s7CiB9CiAKIHVpbnQzMl90IE15T3B1c0V4dHJhY3Rvcjo6Z2V0TnVtU2FtcGxlc0luUGFja2V0KE1lZGlhQnVmZmVyQmFzZSAqYnVmZmVyKSBjb25zdCB7CkBAIC02NzIsNyArNjc0LDcgQEAKICAgICByZXR1cm4gbnVtU2FtcGxlczsKIH0KIAotc3RhdHVzX3QgTXlPZ2dFeHRyYWN0b3I6Ol9yZWFkTmV4dFBhY2tldChNZWRpYUJ1ZmZlckJhc2UgKipvdXQsIGJvb2wgY2FsY1ZvcmJpc1RpbWVzdGFtcCkgeworbWVkaWFfc3RhdHVzX3QgTXlPZ2dFeHRyYWN0b3I6Ol9yZWFkTmV4dFBhY2tldChNZWRpYUJ1ZmZlckJhc2UgKipvdXQsIGJvb2wgY2FsY1ZvcmJpc1RpbWVzdGFtcCkgewogICAgICpvdXQgPSBOVUxMOwogCiAgICAgTWVkaWFCdWZmZXJCYXNlICpidWZmZXIgPSBOVUxMOwpAQCAtNzA5LDcgKzcxMSw3IEBACiAgICAgICAgICAgICAgICAgICAgIGJ1ZmZlci0+cmVsZWFzZSgpOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICBBTE9HRSgiYi8zNjU5MjIwMiIpOwotICAgICAgICAgICAgICAgIHJldHVybiBFUlJPUl9NQUxGT1JNRUQ7CisgICAgICAgICAgICAgICAgcmV0dXJuIEFNRURJQV9FUlJPUl9NQUxGT1JNRUQ7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBNZWRpYUJ1ZmZlckJhc2UgKnRtcCA9IE1lZGlhQnVmZmVyQmFzZTo6Q3JlYXRlKGZ1bGxTaXplKTsKICAgICAgICAgICAgIGlmICh0bXAgPT0gTlVMTCkgewpAQCAtNzE3LDcgKzcxOSw3IEBACiAgICAgICAgICAgICAgICAgICAgIGJ1ZmZlci0+cmVsZWFzZSgpOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICBBTE9HRSgiYi8zNjU5MjIwMiIpOwotICAgICAgICAgICAgICAgIHJldHVybiBFUlJPUl9NQUxGT1JNRUQ7CisgICAgICAgICAgICAgICAgcmV0dXJuIEFNRURJQV9FUlJPUl9NQUxGT1JNRUQ7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBpZiAoYnVmZmVyICE9IE5VTEwpIHsKICAgICAgICAgICAgICAgICBtZW1jcHkodG1wLT5kYXRhKCksIGJ1ZmZlci0+ZGF0YSgpLCBidWZmZXItPnJhbmdlX2xlbmd0aCgpKTsKQEAgLTczNyw3ICs3MzksNyBAQAogICAgICAgICAgICAgICAgIGJ1ZmZlci0+cmVsZWFzZSgpOwogICAgICAgICAgICAgICAgIEFMT0dWKCJmYWlsZWQgdG8gcmVhZCAlenUgYnl0ZXMgYXQgJSMwMTZsbHgsIGdvdCAlemQgYnl0ZXMiLAogICAgICAgICAgICAgICAgICAgICAgICAgcGFja2V0U2l6ZSwgKGxvbmcgbG9uZylkYXRhT2Zmc2V0LCBuKTsKLSAgICAgICAgICAgICAgICByZXR1cm4gRVJST1JfSU87CisgICAgICAgICAgICAgICAgcmV0dXJuIEFNRURJQV9FUlJPUl9JTzsKICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgYnVmZmVyLT5zZXRfcmFuZ2UoMCwgZnVsbFNpemUpOwpAQCAtNzc0LDcgKzc3Niw3IEBACiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICpvdXQgPSBidWZmZXI7CiAKLSAgICAgICAgICAgICAgICByZXR1cm4gT0s7CisgICAgICAgICAgICAgICAgcmV0dXJuIEFNRURJQV9PSzsKICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgLy8gZmFsbCB0aHJvdWdoLCB0aGUgYnVmZmVyIG5vdyBjb250YWlucyB0aGUgc3RhcnQgb2YgdGhlIHBhY2tldC4KQEAgLTc5Myw3ICs3OTUsNyBAQAogCiAgICAgICAgICAgICBBTE9HVigicmVhZFBhZ2UgcmV0dXJuZWQgJXpkIiwgbik7CiAKLSAgICAgICAgICAgIHJldHVybiBuIDwgMCA/IG4gOiAoc3RhdHVzX3QpRVJST1JfRU5EX09GX1NUUkVBTTsKKyAgICAgICAgICAgIHJldHVybiBuIDwgMCA/IChtZWRpYV9zdGF0dXNfdCkgbiA6IEFNRURJQV9FUlJPUl9FTkRfT0ZfU1RSRUFNOwogICAgICAgICB9CiAKICAgICAgICAgLy8gUHJldmVudCBhIGhhcm1sZXNzIHVuc2lnbmVkIGludGVnZXIgb3ZlcmZsb3cgYnkgY2xhbXBpbmcgdG8gMApAQCAtODI1LDI3ICs4MjcsMjcgQEAKIAogICAgICAgICAgICAgICAgICpvdXQgPSBidWZmZXI7CiAKLSAgICAgICAgICAgICAgICByZXR1cm4gT0s7CisgICAgICAgICAgICAgICAgcmV0dXJuIEFNRURJQV9PSzsKICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgIH0KIH0KIAogc3RhdHVzX3QgTXlPZ2dFeHRyYWN0b3I6OmluaXQoKSB7Ci0gICAgbU1ldGEuc2V0Q1N0cmluZyhrS2V5TUlNRVR5cGUsIG1NaW1lVHlwZSk7CisgICAgQU1lZGlhRm9ybWF0X3NldFN0cmluZyhtTWV0YSwgQU1FRElBRk9STUFUX0tFWV9NSU1FLCBtTWltZVR5cGUpOwogCi0gICAgc3RhdHVzX3QgZXJyOworICAgIG1lZGlhX3N0YXR1c190IGVycjsKICAgICBNZWRpYUJ1ZmZlckJhc2UgKnBhY2tldDsKICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1OdW1IZWFkZXJzOyArK2kpIHsKICAgICAgICAgLy8gaWdub3JlIHRpbWVzdGFtcCBmb3IgY29uZmlndXJhdGlvbiBwYWNrZXRzCi0gICAgICAgIGlmICgoZXJyID0gX3JlYWROZXh0UGFja2V0KCZwYWNrZXQsIC8qIGNhbGNWb3JiaXNUaW1lc3RhbXAgPSAqLyBmYWxzZSkpICE9IE9LKSB7CisgICAgICAgIGlmICgoZXJyID0gX3JlYWROZXh0UGFja2V0KCZwYWNrZXQsIC8qIGNhbGNWb3JiaXNUaW1lc3RhbXAgPSAqLyBmYWxzZSkpICE9IEFNRURJQV9PSykgewogICAgICAgICAgICAgcmV0dXJuIGVycjsKICAgICAgICAgfQogICAgICAgICBBTE9HVigicmVhZCBwYWNrZXQgb2Ygc2l6ZSAlenVcbiIsIHBhY2tldC0+cmFuZ2VfbGVuZ3RoKCkpOwogICAgICAgICBlcnIgPSB2ZXJpZnlIZWFkZXIocGFja2V0LCAvKiB0eXBlID0gKi8gaSAqIDIgKyAxKTsKICAgICAgICAgcGFja2V0LT5yZWxlYXNlKCk7CiAgICAgICAgIHBhY2tldCA9IE5VTEw7Ci0gICAgICAgIGlmIChlcnIgIT0gT0spIHsKKyAgICAgICAgaWYgKGVyciAhPSBBTUVESUFfT0spIHsKICAgICAgICAgICAgIHJldHVybiBlcnI7CiAgICAgICAgIH0KICAgICB9CkBAIC04NjUsMTIgKzg2NywxMiBAQAogCiAgICAgICAgIGludDY0X3QgZHVyYXRpb25VcyA9IGdldFRpbWVVc09mR3JhbnVsZShsYXN0R3JhbnVsZVBvc2l0aW9uKTsKIAotICAgICAgICBtTWV0YS5zZXRJbnQ2NChrS2V5RHVyYXRpb24sIGR1cmF0aW9uVXMpOworICAgICAgICBBTWVkaWFGb3JtYXRfc2V0SW50NjQobU1ldGEsIEFNRURJQUZPUk1BVF9LRVlfRFVSQVRJT04sIGR1cmF0aW9uVXMpOwogCiAgICAgICAgIGJ1aWxkVGFibGVPZkNvbnRlbnRzKCk7CiAgICAgfQogCi0gICAgcmV0dXJuIE9LOworICAgIHJldHVybiBBTUVESUFfT0s7CiB9CiAKIHZvaWQgTXlPZ2dFeHRyYWN0b3I6OmJ1aWxkVGFibGVPZkNvbnRlbnRzKCkgewpAQCAtOTUyLDcgKzk1NCw3IEBACiAgICAgcmV0dXJuIHBjbVNhbXBsZVBvc2l0aW9uICogMTAwMDAwMGxsIC8ga09wdXNTYW1wbGVSYXRlOwogfQogCi1zdGF0dXNfdCBNeU9wdXNFeHRyYWN0b3I6OnZlcmlmeUhlYWRlcihNZWRpYUJ1ZmZlckJhc2UgKmJ1ZmZlciwgdWludDhfdCB0eXBlKSB7CittZWRpYV9zdGF0dXNfdCBNeU9wdXNFeHRyYWN0b3I6OnZlcmlmeUhlYWRlcihNZWRpYUJ1ZmZlckJhc2UgKmJ1ZmZlciwgdWludDhfdCB0eXBlKSB7CiAgICAgc3dpdGNoICh0eXBlKSB7CiAgICAgICAgIC8vIHRoZXJlIGFyZSBhY3R1YWxseSBubyBoZWFkZXIgdHlwZXMgZGVmaW5lZCBpbiB0aGUgT3B1cyBzcGVjOyB3ZSBjaG9vc2UgMSBhbmQgMyB0byBtZWFuCiAgICAgICAgIC8vIGhlYWRlciBhbmQgY29tbWVudHMgc3VjaCB0aGF0IHdlIGNhbiBzaGFyZSBjb2RlIHdpdGggTXlWb3JiaXNFeHRyYWN0b3IuCkBAIC05NjEsMTEgKzk2MywxMSBAQAogICAgICAgICBjYXNlIDM6CiAgICAgICAgICAgICByZXR1cm4gdmVyaWZ5T3B1c0NvbW1lbnRzKGJ1ZmZlcik7CiAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICByZXR1cm4gSU5WQUxJRF9PUEVSQVRJT047CisgICAgICAgICAgICByZXR1cm4gQU1FRElBX0VSUk9SX0lOVkFMSURfT1BFUkFUSU9OOwogICAgIH0KIH0KIAotc3RhdHVzX3QgTXlPcHVzRXh0cmFjdG9yOjp2ZXJpZnlPcHVzSGVhZGVyKE1lZGlhQnVmZmVyQmFzZSAqYnVmZmVyKSB7CittZWRpYV9zdGF0dXNfdCBNeU9wdXNFeHRyYWN0b3I6OnZlcmlmeU9wdXNIZWFkZXIoTWVkaWFCdWZmZXJCYXNlICpidWZmZXIpIHsKICAgICBjb25zdCBzaXplX3Qga09wdXNIZWFkZXJTaXplID0gMTk7CiAgICAgY29uc3QgdWludDhfdCAqZGF0YSA9CiAgICAgICAgIChjb25zdCB1aW50OF90ICopYnVmZmVyLT5kYXRhKCkgKyBidWZmZXItPnJhbmdlX29mZnNldCgpOwpAQCAtOTc1LDI5ICs5NzcsMzEgQEAKICAgICBpZiAoc2l6ZSA8IGtPcHVzSGVhZGVyU2l6ZQogICAgICAgICAgICAgfHwgbWVtY21wKGRhdGEsICJPcHVzSGVhZCIsIDgpCiAgICAgICAgICAgICB8fCAvKiB2ZXJzaW9uID0gKi8gZGF0YVs4XSAhPSAxKSB7Ci0gICAgICAgIHJldHVybiBFUlJPUl9NQUxGT1JNRUQ7CisgICAgICAgIHJldHVybiBBTUVESUFfRVJST1JfTUFMRk9STUVEOwogICAgIH0KIAogICAgIG1DaGFubmVsQ291bnQgPSBkYXRhWzldOwogICAgIG1Db2RlY0RlbGF5ID0gVTE2TEVfQVQoJmRhdGFbMTBdKTsKIAotICAgIG1NZXRhLnNldERhdGEoa0tleU9wdXNIZWFkZXIsIDAsIGRhdGEsIHNpemUpOwotICAgIG1NZXRhLnNldEludDMyKGtLZXlTYW1wbGVSYXRlLCBrT3B1c1NhbXBsZVJhdGUpOwotICAgIG1NZXRhLnNldEludDMyKGtLZXlDaGFubmVsQ291bnQsIG1DaGFubmVsQ291bnQpOwotICAgIG1NZXRhLnNldEludDY0KGtLZXlPcHVzU2Vla1ByZVJvbGwgLyogbnMgKi8sIGtPcHVzU2Vla1ByZVJvbGxVcyAqIDEwMDAgLyogPSA4MCBtcyovKTsKLSAgICBtTWV0YS5zZXRJbnQ2NChrS2V5T3B1c0NvZGVjRGVsYXkgLyogbnMgKi8sCi0gICAgICAgICAgICBtQ29kZWNEZWxheSAvKiBzYW1wbGUvcyAqLyAqIDEwMDAwMDAwMDBsbCAvIGtPcHVzU2FtcGxlUmF0ZSk7CisgICAgLy8ga0tleU9wdXNIZWFkZXIgaXMgY3NkLTAKKyAgICBBTWVkaWFGb3JtYXRfc2V0QnVmZmVyKG1NZXRhLCBBTUVESUFGT1JNQVRfS0VZX0NTRF8wLCBkYXRhLCBzaXplKTsKKyAgICBBTWVkaWFGb3JtYXRfc2V0SW50MzIobU1ldGEsIEFNRURJQUZPUk1BVF9LRVlfU0FNUExFX1JBVEUsIGtPcHVzU2FtcGxlUmF0ZSk7CisgICAgQU1lZGlhRm9ybWF0X3NldEludDMyKG1NZXRhLCBBTUVESUFGT1JNQVRfS0VZX0NIQU5ORUxfQ09VTlQsIG1DaGFubmVsQ291bnQpOworICAgIGludDY0X3QgY29kZWNkZWxheSA9IG1Db2RlY0RlbGF5IC8qIHNhbXBsZS9zICovICogMTAwMDAwMDAwMGxsIC8ga09wdXNTYW1wbGVSYXRlOworICAgIEFNZWRpYUZvcm1hdF9zZXRCdWZmZXIobU1ldGEsIEFNRURJQUZPUk1BVF9LRVlfQ1NEXzEsICZjb2RlY2RlbGF5LCBzaXplb2YoY29kZWNkZWxheSkpOworICAgIGludDY0X3QgcHJlcm9sbCA9IGtPcHVzU2Vla1ByZVJvbGxVcyAqIDEwMDAgLyogPSA4MCBtcyovOworICAgIEFNZWRpYUZvcm1hdF9zZXRCdWZmZXIobU1ldGEsIEFNRURJQUZPUk1BVF9LRVlfQ1NEXzIsICZwcmVyb2xsLCBzaXplb2YocHJlcm9sbCkpOwogCi0gICAgcmV0dXJuIE9LOworICAgIHJldHVybiBBTUVESUFfT0s7CiB9CiAKLXN0YXR1c190IE15T3B1c0V4dHJhY3Rvcjo6dmVyaWZ5T3B1c0NvbW1lbnRzKE1lZGlhQnVmZmVyQmFzZSAqYnVmZmVyKSB7CittZWRpYV9zdGF0dXNfdCBNeU9wdXNFeHRyYWN0b3I6OnZlcmlmeU9wdXNDb21tZW50cyhNZWRpYUJ1ZmZlckJhc2UgKmJ1ZmZlcikgewogICAgIC8vIGFkZCBhcnRpZmljaWFsIGZyYW1pbmcgYml0IHNvIHdlIGNhbiByZXVzZSBfdm9yYmlzX3VucGFja19jb21tZW50CiAgICAgaW50MzJfdCBjb21tZW50U2l6ZSA9IGJ1ZmZlci0+cmFuZ2VfbGVuZ3RoKCkgKyAxOwogICAgIGF1dG8gdG1wID0gaGVhcGJ1ZmZlcjx1aW50OF90Pihjb21tZW50U2l6ZSk7CiAgICAgdWludDhfdCAqY29tbWVudERhdGEgPSB0bXAuZ2V0KCk7CiAgICAgaWYgKGNvbW1lbnREYXRhID09IG51bGxwdHIpIHsKLSAgICAgICAgcmV0dXJuIEVSUk9SX01BTEZPUk1FRDsKKyAgICAgICAgcmV0dXJuIEFNRURJQV9FUlJPUl9NQUxGT1JNRUQ7CiAgICAgfQogCiAgICAgbWVtY3B5KGNvbW1lbnREYXRhLApAQCAtMTAyNiwxNCArMTAzMCwxNCBAQAogICAgIGZvciAoaW50IGkgPSAwOyBpIDwgaGVhZGVyTGVuOyArK2kpIHsKICAgICAgICAgY2hhciBjaHIgPSBvZ2dwYWNrX3JlYWQoJmJpdHMsIDgpOwogICAgICAgICBpZiAoY2hyICE9IE9wdXNUYWdzW2ldKSB7Ci0gICAgICAgICAgICByZXR1cm4gRVJST1JfTUFMRk9STUVEOworICAgICAgICAgICAgcmV0dXJuIEFNRURJQV9FUlJPUl9NQUxGT1JNRUQ7CiAgICAgICAgIH0KICAgICB9CiAKICAgICBpbnQzMl90IHZlbmRvckxlbiA9IG9nZ3BhY2tfcmVhZCgmYml0cywgMzIpOwogICAgIGZyYW1pbmdCaXRPZmZzZXQgKz0gNDsKICAgICBpZiAodmVuZG9yTGVuIDwgMCB8fCB2ZW5kb3JMZW4gPiBjb21tZW50U2l6ZSAtIDgpIHsKLSAgICAgICAgcmV0dXJuIEVSUk9SX01BTEZPUk1FRDsKKyAgICAgICAgcmV0dXJuIEFNRURJQV9FUlJPUl9NQUxGT1JNRUQ7CiAgICAgfQogICAgIC8vIHNraXAgdmVuZG9yIHN0cmluZwogICAgIGZyYW1pbmdCaXRPZmZzZXQgKz0gdmVuZG9yTGVuOwpAQCAtMTA0NCwxMyArMTA0OCwxMyBAQAogICAgIGludDMyX3QgbiA9IG9nZ3BhY2tfcmVhZCgmYml0cywgMzIpOwogICAgIGZyYW1pbmdCaXRPZmZzZXQgKz0gNDsKICAgICBpZiAobiA8IDAgfHwgbiA+ICgoY29tbWVudFNpemUgLSBvZ2dwYWNrX2J5dGVzKCZiaXRzKSkgPj4gMikpIHsKLSAgICAgICAgcmV0dXJuIEVSUk9SX01BTEZPUk1FRDsKKyAgICAgICAgcmV0dXJuIEFNRURJQV9FUlJPUl9NQUxGT1JNRUQ7CiAgICAgfQogICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbjsgKytpKSB7CiAgICAgICAgIGludDMyX3QgbGVuID0gb2dncGFja19yZWFkKCZiaXRzLCAzMik7CiAgICAgICAgIGZyYW1pbmdCaXRPZmZzZXQgKz0gNDsKICAgICAgICAgaWYgKGxlbiAgPCAwIHx8IGxlbiAgPiAoY29tbWVudFNpemUgLSBvZ2dwYWNrX2J5dGVzKCZiaXRzKSkpIHsKLSAgICAgICAgICAgIHJldHVybiBFUlJPUl9NQUxGT1JNRUQ7CisgICAgICAgICAgICByZXR1cm4gQU1FRElBX0VSUk9SX01BTEZPUk1FRDsKICAgICAgICAgfQogICAgICAgICBmcmFtaW5nQml0T2Zmc2V0ICs9IGxlbjsKICAgICAgICAgZm9yIChpbnQgaiA9IDA7IGogPCBsZW47ICsraikgewpAQCAtMTA1OCw3ICsxMDYyLDcgQEAKICAgICAgICAgfQogICAgIH0KICAgICBpZiAoZnJhbWluZ0JpdE9mZnNldCA8IDAgfHwgZnJhbWluZ0JpdE9mZnNldCA+PSBjb21tZW50U2l6ZSkgewotICAgICAgICByZXR1cm4gRVJST1JfTUFMRk9STUVEOworICAgICAgICByZXR1cm4gQU1FRElBX0VSUk9SX01BTEZPUk1FRDsKICAgICB9CiAgICAgY29tbWVudERhdGFbZnJhbWluZ0JpdE9mZnNldF0gPSAxOwogCkBAIC0xMDc1LDE0ICsxMDc5LDE0IEBACiAgICAgb2dncGFja19yZWFkaW5pdCgmYml0cywgJnJlZik7CiAgICAgaW50IGVyciA9IF92b3JiaXNfdW5wYWNrX2NvbW1lbnQoJm1WYywgJmJpdHMpOwogICAgIGlmICgwICE9IGVycikgewotICAgICAgICByZXR1cm4gRVJST1JfTUFMRk9STUVEOworICAgICAgICByZXR1cm4gQU1FRElBX0VSUk9SX01BTEZPUk1FRDsKICAgICB9CiAKICAgICBwYXJzZUZpbGVNZXRhRGF0YSgpOwotICAgIHJldHVybiBPSzsKKyAgICByZXR1cm4gQU1FRElBX09LOwogfQogCi1zdGF0dXNfdCBNeVZvcmJpc0V4dHJhY3Rvcjo6dmVyaWZ5SGVhZGVyKAorbWVkaWFfc3RhdHVzX3QgTXlWb3JiaXNFeHRyYWN0b3I6OnZlcmlmeUhlYWRlcigKICAgICAgICAgTWVkaWFCdWZmZXJCYXNlICpidWZmZXIsIHVpbnQ4X3QgdHlwZSkgewogICAgIGNvbnN0IHVpbnQ4X3QgKmRhdGEgPQogICAgICAgICAoY29uc3QgdWludDhfdCAqKWJ1ZmZlci0+ZGF0YSgpICsgYnVmZmVyLT5yYW5nZV9vZmZzZXQoKTsKQEAgLTEwOTAsNyArMTA5NCw3IEBACiAgICAgc2l6ZV90IHNpemUgPSBidWZmZXItPnJhbmdlX2xlbmd0aCgpOwogCiAgICAgaWYgKHNpemUgPCA3IHx8IGRhdGFbMF0gIT0gdHlwZSB8fCBtZW1jbXAoJmRhdGFbMV0sICJ2b3JiaXMiLCA2KSkgewotICAgICAgICByZXR1cm4gRVJST1JfTUFMRk9STUVEOworICAgICAgICByZXR1cm4gQU1FRElBX0VSUk9SX01BTEZPUk1FRDsKICAgICB9CiAKICAgICBvZ2dfYnVmZmVyIGJ1ZjsKQEAgLTExMDksNyArMTExMyw3IEBACiAgICAgb2dncGFja19yZWFkaW5pdCgmYml0cywgJnJlZik7CiAKICAgICBpZiAob2dncGFja19yZWFkKCZiaXRzLCA4KSAhPSB0eXBlKSB7Ci0gICAgICAgIHJldHVybiBFUlJPUl9NQUxGT1JNRUQ7CisgICAgICAgIHJldHVybiBBTUVESUFfRVJST1JfTUFMRk9STUVEOwogICAgIH0KICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IDY7ICsraSkgewogICAgICAgICBvZ2dwYWNrX3JlYWQoJmJpdHMsIDgpOyAgLy8gc2tpcCAndm9yYmlzJwpAQCAtMTExOSwxMyArMTEyMywxMyBAQAogICAgICAgICBjYXNlIDE6CiAgICAgICAgIHsKICAgICAgICAgICAgIGlmICgwICE9IF92b3JiaXNfdW5wYWNrX2luZm8oJm1WaSwgJmJpdHMpKSB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIEVSUk9SX01BTEZPUk1FRDsKKyAgICAgICAgICAgICAgICByZXR1cm4gQU1FRElBX0VSUk9SX01BTEZPUk1FRDsKICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgbU1ldGEuc2V0RGF0YShrS2V5Vm9yYmlzSW5mbywgMCwgZGF0YSwgc2l6ZSk7Ci0gICAgICAgICAgICBtTWV0YS5zZXRJbnQzMihrS2V5U2FtcGxlUmF0ZSwgbVZpLnJhdGUpOwotICAgICAgICAgICAgbU1ldGEuc2V0SW50MzIoa0tleUNoYW5uZWxDb3VudCwgbVZpLmNoYW5uZWxzKTsKLSAgICAgICAgICAgIG1NZXRhLnNldEludDMyKGtLZXlCaXRSYXRlLCBtVmkuYml0cmF0ZV9ub21pbmFsKTsKKyAgICAgICAgICAgIEFNZWRpYUZvcm1hdF9zZXRCdWZmZXIobU1ldGEsIEFNRURJQUZPUk1BVF9LRVlfQ1NEXzAsIGRhdGEsIHNpemUpOworICAgICAgICAgICAgQU1lZGlhRm9ybWF0X3NldEludDMyKG1NZXRhLCBBTUVESUFGT1JNQVRfS0VZX1NBTVBMRV9SQVRFLCBtVmkucmF0ZSk7CisgICAgICAgICAgICBBTWVkaWFGb3JtYXRfc2V0SW50MzIobU1ldGEsIEFNRURJQUZPUk1BVF9LRVlfQ0hBTk5FTF9DT1VOVCwgbVZpLmNoYW5uZWxzKTsKKyAgICAgICAgICAgIEFNZWRpYUZvcm1hdF9zZXRJbnQzMihtTWV0YSwgQU1FRElBRk9STUFUX0tFWV9CSVRfUkFURSwgbVZpLmJpdHJhdGVfbm9taW5hbCk7CiAKICAgICAgICAgICAgIEFMT0dWKCJsb3dlci1iaXRyYXRlID0gJWxkIiwgbVZpLmJpdHJhdGVfbG93ZXIpOwogICAgICAgICAgICAgQUxPR1YoInVwcGVyLWJpdHJhdGUgPSAlbGQiLCBtVmkuYml0cmF0ZV91cHBlcik7CkBAIC0xMTQwLDcgKzExNDQsNyBAQAogICAgICAgICAgICAgaWYgKG1Tb3VyY2UtPmdldFNpemUoJnNpemUpID09IE9LKSB7CiAgICAgICAgICAgICAgICAgdWludDY0X3QgYnBzID0gYXBwcm94Qml0cmF0ZSgpOwogICAgICAgICAgICAgICAgIGlmIChicHMgIT0gMCkgewotICAgICAgICAgICAgICAgICAgICBtTWV0YS5zZXRJbnQ2NChrS2V5RHVyYXRpb24sIHNpemUgKiA4MDAwMDAwbGwgLyBicHMpOworICAgICAgICAgICAgICAgICAgICBBTWVkaWFGb3JtYXRfc2V0SW50NjQobU1ldGEsIEFNRURJQUZPUk1BVF9LRVlfRFVSQVRJT04sIHNpemUgKiA4MDAwMDAwbGwgLyBicHMpOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGJyZWFrOwpAQCAtMTE0OSw3ICsxMTUzLDcgQEAKICAgICAgICAgY2FzZSAzOgogICAgICAgICB7CiAgICAgICAgICAgICBpZiAoMCAhPSBfdm9yYmlzX3VucGFja19jb21tZW50KCZtVmMsICZiaXRzKSkgewotICAgICAgICAgICAgICAgIHJldHVybiBFUlJPUl9NQUxGT1JNRUQ7CisgICAgICAgICAgICAgICAgcmV0dXJuIEFNRURJQV9FUlJPUl9NQUxGT1JNRUQ7CiAgICAgICAgICAgICB9CiAKICAgICAgICAgICAgIHBhcnNlRmlsZU1ldGFEYXRhKCk7CkBAIC0xMTU5LDE1ICsxMTYzLDE1IEBACiAgICAgICAgIGNhc2UgNToKICAgICAgICAgewogICAgICAgICAgICAgaWYgKDAgIT0gX3ZvcmJpc191bnBhY2tfYm9va3MoJm1WaSwgJmJpdHMpKSB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIEVSUk9SX01BTEZPUk1FRDsKKyAgICAgICAgICAgICAgICByZXR1cm4gQU1FRElBX0VSUk9SX01BTEZPUk1FRDsKICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgbU1ldGEuc2V0RGF0YShrS2V5Vm9yYmlzQm9va3MsIDAsIGRhdGEsIHNpemUpOworICAgICAgICAgICAgQU1lZGlhRm9ybWF0X3NldEJ1ZmZlcihtTWV0YSwgQU1FRElBRk9STUFUX0tFWV9DU0RfMSwgZGF0YSwgc2l6ZSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgIH0KIAotICAgIHJldHVybiBPSzsKKyAgICByZXR1cm4gQU1FRElBX09LOwogfQogCiB1aW50NjRfdCBNeVZvcmJpc0V4dHJhY3Rvcjo6YXBwcm94Qml0cmF0ZSgpIGNvbnN0IHsKQEAgLTExODAsMTIgKzExODQsMTIgQEAKIAogCiB2b2lkIE15T2dnRXh0cmFjdG9yOjpwYXJzZUZpbGVNZXRhRGF0YSgpIHsKLSAgICBtRmlsZU1ldGEuc2V0Q1N0cmluZyhrS2V5TUlNRVR5cGUsIE1FRElBX01JTUVUWVBFX0NPTlRBSU5FUl9PR0cpOworICAgIEFNZWRpYUZvcm1hdF9zZXRTdHJpbmcobUZpbGVNZXRhLCBBTUVESUFGT1JNQVRfS0VZX01JTUUsIE1FRElBX01JTUVUWVBFX0NPTlRBSU5FUl9PR0cpOwogCiAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBtVmMuY29tbWVudHM7ICsraSkgewogICAgICAgICBjb25zdCBjaGFyICpjb21tZW50ID0gbVZjLnVzZXJfY29tbWVudHNbaV07CiAgICAgICAgIHNpemVfdCBjb21tZW50TGVuZ3RoID0gbVZjLmNvbW1lbnRfbGVuZ3Roc1tpXTsKLSAgICAgICAgcGFyc2VWb3JiaXNDb21tZW50KCZtRmlsZU1ldGEsIGNvbW1lbnQsIGNvbW1lbnRMZW5ndGgpOworICAgICAgICBwYXJzZVZvcmJpc0NvbW1lbnQobUZpbGVNZXRhLCBjb21tZW50LCBjb21tZW50TGVuZ3RoKTsKICAgICAgICAgLy9BTE9HSSgiY29tbWVudCAjJWQ6ICclcyciLCBpICsgMSwgbVZjLnVzZXJfY29tbWVudHNbaV0pOwogICAgIH0KIH0KQEAgLTExOTMsNyArMTE5Nyw3IEBACiAKIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCiAKLU9nZ0V4dHJhY3Rvcjo6T2dnRXh0cmFjdG9yKERhdGFTb3VyY2VCYXNlICpzb3VyY2UpCitPZ2dFeHRyYWN0b3I6Ok9nZ0V4dHJhY3RvcihEYXRhU291cmNlSGVscGVyICpzb3VyY2UpCiAgICAgOiBtRGF0YVNvdXJjZShzb3VyY2UpLAogICAgICAgbUluaXRDaGVjayhOT19JTklUKSwKICAgICAgIG1JbXBsKE5VTEwpIHsKQEAgLTEyMjAsMTMgKzEyMjQsMTQgQEAKIE9nZ0V4dHJhY3Rvcjo6fk9nZ0V4dHJhY3RvcigpIHsKICAgICBkZWxldGUgbUltcGw7CiAgICAgbUltcGwgPSBOVUxMOworICAgIGRlbGV0ZSBtRGF0YVNvdXJjZTsKIH0KIAogc2l6ZV90IE9nZ0V4dHJhY3Rvcjo6Y291bnRUcmFja3MoKSB7CiAgICAgcmV0dXJuIG1Jbml0Q2hlY2sgIT0gT0sgPyAwIDogMTsKIH0KIAotTWVkaWFUcmFjayAqT2dnRXh0cmFjdG9yOjpnZXRUcmFjayhzaXplX3QgaW5kZXgpIHsKK01lZGlhVHJhY2tIZWxwZXJWMiAqT2dnRXh0cmFjdG9yOjpnZXRUcmFjayhzaXplX3QgaW5kZXgpIHsKICAgICBpZiAoaW5kZXggPj0gMSkgewogICAgICAgICByZXR1cm4gTlVMTDsKICAgICB9CkBAIC0xMjM0LDMzICsxMjM5LDM0IEBACiAgICAgcmV0dXJuIG5ldyBPZ2dTb3VyY2UodGhpcyk7CiB9CiAKLXN0YXR1c190IE9nZ0V4dHJhY3Rvcjo6Z2V0VHJhY2tNZXRhRGF0YSgKLSAgICAgICAgTWV0YURhdGFCYXNlICZtZXRhLAorbWVkaWFfc3RhdHVzX3QgT2dnRXh0cmFjdG9yOjpnZXRUcmFja01ldGFEYXRhKAorICAgICAgICBBTWVkaWFGb3JtYXQgKm1ldGEsCiAgICAgICAgIHNpemVfdCBpbmRleCwgdWludDMyX3QgLyogZmxhZ3MgKi8pIHsKICAgICBpZiAoaW5kZXggPj0gMSkgewotICAgICAgICByZXR1cm4gVU5LTk9XTl9FUlJPUjsKKyAgICAgICAgcmV0dXJuIEFNRURJQV9FUlJPUl9VTktOT1dOOwogICAgIH0KIAogICAgIHJldHVybiBtSW1wbC0+Z2V0Rm9ybWF0KG1ldGEpOwogfQogCi1zdGF0dXNfdCBPZ2dFeHRyYWN0b3I6OmdldE1ldGFEYXRhKE1ldGFEYXRhQmFzZSAmbWV0YSkgeworbWVkaWFfc3RhdHVzX3QgT2dnRXh0cmFjdG9yOjpnZXRNZXRhRGF0YShBTWVkaWFGb3JtYXQgKm1ldGEpIHsKICAgICByZXR1cm4gbUltcGwtPmdldEZpbGVNZXRhRGF0YShtZXRhKTsKIH0KIAotc3RhdGljIE1lZGlhRXh0cmFjdG9yKiBDcmVhdGVFeHRyYWN0b3IoCi0gICAgICAgIERhdGFTb3VyY2VCYXNlICpzb3VyY2UsCitzdGF0aWMgQ01lZGlhRXh0cmFjdG9yVjIqIENyZWF0ZUV4dHJhY3RvcigKKyAgICAgICAgQ0RhdGFTb3VyY2UgKnNvdXJjZSwKICAgICAgICAgdm9pZCAqKSB7Ci0gICAgcmV0dXJuIG5ldyBPZ2dFeHRyYWN0b3Ioc291cmNlKTsKKyAgICByZXR1cm4gd3JhcFYyKG5ldyBPZ2dFeHRyYWN0b3IobmV3IERhdGFTb3VyY2VIZWxwZXIoc291cmNlKSkpOwogfQogCi1zdGF0aWMgTWVkaWFFeHRyYWN0b3I6OkNyZWF0b3JGdW5jIFNuaWZmKAotICAgICAgICBEYXRhU291cmNlQmFzZSAqc291cmNlLAorc3RhdGljIENyZWF0b3JGdW5jVjIgU25pZmYoCisgICAgICAgIENEYXRhU291cmNlICpzb3VyY2UsCiAgICAgICAgIGZsb2F0ICpjb25maWRlbmNlLAogICAgICAgICB2b2lkICoqLAotICAgICAgICBNZWRpYUV4dHJhY3Rvcjo6RnJlZU1ldGFGdW5jICopIHsKKyAgICAgICAgRnJlZU1ldGFGdW5jICopIHsKKyAgICBEYXRhU291cmNlSGVscGVyIGhlbHBlcihzb3VyY2UpOwogICAgIGNoYXIgdG1wWzRdOwotICAgIGlmIChzb3VyY2UtPnJlYWRBdCgwLCB0bXAsIDQpIDwgNCB8fCBtZW1jbXAodG1wLCAiT2dnUyIsIDQpKSB7CisgICAgaWYgKGhlbHBlci5yZWFkQXQoMCwgdG1wLCA0KSA8IDQgfHwgbWVtY21wKHRtcCwgIk9nZ1MiLCA0KSkgewogICAgICAgICByZXR1cm4gTlVMTDsKICAgICB9CiAKQEAgLTEyNzIsMTMgKzEyNzgsMTMgQEAKIGV4dGVybiAiQyIgewogLy8gVGhpcyBpcyB0aGUgb25seSBzeW1ib2wgdGhhdCBuZWVkcyB0byBiZSBleHBvcnRlZAogX19hdHRyaWJ1dGVfXyAoKHZpc2liaWxpdHkgKCJkZWZhdWx0IikpKQotTWVkaWFFeHRyYWN0b3I6OkV4dHJhY3RvckRlZiBHRVRFWFRSQUNUT1JERUYoKSB7CitFeHRyYWN0b3JEZWYgR0VURVhUUkFDVE9SREVGKCkgewogICAgIHJldHVybiB7Ci0gICAgICAgIE1lZGlhRXh0cmFjdG9yOjpFWFRSQUNUT1JERUZfVkVSU0lPTiwKKyAgICAgICAgRVhUUkFDVE9SREVGX1ZFUlNJT05fQ1VSUkVOVCwKICAgICAgICAgVVVJRCgiOGNjNWNkMDYtZjc3Mi00OTVlLThhNjItY2JhOTY0OTM3NGU5IiksCiAgICAgICAgIDEsIC8vIHZlcnNpb24KICAgICAgICAgIk9nZyBFeHRyYWN0b3IiLAotICAgICAgICBTbmlmZgorICAgICAgICB7IC52MiA9IFNuaWZmIH0KICAgICB9OwogfQogCmRpZmYgLS1naXQgYS9tZWRpYS9leHRyYWN0b3JzL29nZy9PZ2dFeHRyYWN0b3IuaCBiL21lZGlhL2V4dHJhY3RvcnMvb2dnL09nZ0V4dHJhY3Rvci5oCmluZGV4IDlmZTI5NDQuLmNkNjc0ZjMgMTAwNjQ0Ci0tLSBhL21lZGlhL2V4dHJhY3RvcnMvb2dnL09nZ0V4dHJhY3Rvci5oCisrKyBiL21lZGlhL2V4dHJhY3RvcnMvb2dnL09nZ0V4dHJhY3Rvci5oCkBAIC0xOSwyNSArMTksMjYgQEAKICNkZWZpbmUgT0dHX0VYVFJBQ1RPUl9IXwogCiAjaW5jbHVkZSA8dXRpbHMvRXJyb3JzLmg+Ci0jaW5jbHVkZSA8bWVkaWEvTWVkaWFFeHRyYWN0b3IuaD4KKyNpbmNsdWRlIDxtZWRpYS9NZWRpYUV4dHJhY3RvclBsdWdpbkFwaS5oPgorI2luY2x1ZGUgPG1lZGlhL01lZGlhRXh0cmFjdG9yUGx1Z2luSGVscGVyLmg+CisjaW5jbHVkZSA8bWVkaWEvTmRrTWVkaWFGb3JtYXQuaD4KIAogbmFtZXNwYWNlIGFuZHJvaWQgewogCiBzdHJ1Y3QgQU1lc3NhZ2U7Ci1jbGFzcyBEYXRhU291cmNlQmFzZTsKIGNsYXNzIFN0cmluZzg7CiAKIHN0cnVjdCBNeU9nZ0V4dHJhY3RvcjsKIHN0cnVjdCBPZ2dTb3VyY2U7CiAKLXN0cnVjdCBPZ2dFeHRyYWN0b3IgOiBwdWJsaWMgTWVkaWFFeHRyYWN0b3IgewotICAgIGV4cGxpY2l0IE9nZ0V4dHJhY3RvcihEYXRhU291cmNlQmFzZSAqc291cmNlKTsKK3N0cnVjdCBPZ2dFeHRyYWN0b3IgOiBwdWJsaWMgTWVkaWFFeHRyYWN0b3JQbHVnaW5IZWxwZXJWMiB7CisgICAgZXhwbGljaXQgT2dnRXh0cmFjdG9yKERhdGFTb3VyY2VIZWxwZXIgKnNvdXJjZSk7CiAKICAgICB2aXJ0dWFsIHNpemVfdCBjb3VudFRyYWNrcygpOwotICAgIHZpcnR1YWwgTWVkaWFUcmFjayAqZ2V0VHJhY2soc2l6ZV90IGluZGV4KTsKLSAgICB2aXJ0dWFsIHN0YXR1c190IGdldFRyYWNrTWV0YURhdGEoTWV0YURhdGFCYXNlJiBtZXRhLCBzaXplX3QgaW5kZXgsIHVpbnQzMl90IGZsYWdzKTsKKyAgICB2aXJ0dWFsIE1lZGlhVHJhY2tIZWxwZXJWMiAqZ2V0VHJhY2soc2l6ZV90IGluZGV4KTsKKyAgICB2aXJ0dWFsIG1lZGlhX3N0YXR1c190IGdldFRyYWNrTWV0YURhdGEoQU1lZGlhRm9ybWF0ICptZXRhLCBzaXplX3QgaW5kZXgsIHVpbnQzMl90IGZsYWdzKTsKIAotICAgIHZpcnR1YWwgc3RhdHVzX3QgZ2V0TWV0YURhdGEoTWV0YURhdGFCYXNlJiBtZXRhKTsKKyAgICB2aXJ0dWFsIG1lZGlhX3N0YXR1c190IGdldE1ldGFEYXRhKEFNZWRpYUZvcm1hdCAqbWV0YSk7CiAgICAgdmlydHVhbCBjb25zdCBjaGFyICogbmFtZSgpIHsgcmV0dXJuICJPZ2dFeHRyYWN0b3IiOyB9CiAKIHByb3RlY3RlZDoKQEAgLTQ2LDcgKzQ3LDcgQEAKIHByaXZhdGU6CiAgICAgZnJpZW5kIHN0cnVjdCBPZ2dTb3VyY2U7CiAKLSAgICBEYXRhU291cmNlQmFzZSAqbURhdGFTb3VyY2U7CisgICAgRGF0YVNvdXJjZUhlbHBlciAqbURhdGFTb3VyY2U7CiAgICAgc3RhdHVzX3QgbUluaXRDaGVjazsKIAogICAgIE15T2dnRXh0cmFjdG9yICptSW1wbDsKZGlmZiAtLWdpdCBhL21lZGlhL2V4dHJhY3RvcnMvd2F2L0FuZHJvaWQuYnAgYi9tZWRpYS9leHRyYWN0b3JzL3dhdi9BbmRyb2lkLmJwCmluZGV4IDA2NzkzM2UuLjE4NWJiMzIgMTAwNjQ0Ci0tLSBhL21lZGlhL2V4dHJhY3RvcnMvd2F2L0FuZHJvaWQuYnAKKysrIGIvbWVkaWEvZXh0cmFjdG9ycy93YXYvQW5kcm9pZC5icApAQCAtNywxMSArNywxNCBAQAogICAgIF0sCiAKICAgICBzaGFyZWRfbGliczogWworICAgICAgICAibGliYmluZGVyX25kayIsCiAgICAgICAgICJsaWJsb2ciLAogICAgICAgICAibGlibWVkaWFleHRyYWN0b3IiLAorICAgICAgICAibGlibWVkaWFuZGsiLAogICAgIF0sCiAKICAgICBzdGF0aWNfbGliczogWworICAgICAgICAibGliYXVkaW91dGlscyIsCiAgICAgICAgICJsaWJmaWZvIiwKICAgICAgICAgImxpYnN0YWdlZnJpZ2h0X2ZvdW5kYXRpb24iLAogICAgIF0sCmRpZmYgLS1naXQgYS9tZWRpYS9leHRyYWN0b3JzL3dhdi9XQVZFeHRyYWN0b3IuY3BwIGIvbWVkaWEvZXh0cmFjdG9ycy93YXYvV0FWRXh0cmFjdG9yLmNwcAppbmRleCBmZTUwOWJmLi44NjUwMGVmIDEwMDY0NAotLS0gYS9tZWRpYS9leHRyYWN0b3JzL3dhdi9XQVZFeHRyYWN0b3IuY3BwCisrKyBiL21lZGlhL2V4dHJhY3RvcnMvd2F2L1dBVkV4dHJhY3Rvci5jcHAKQEAgLTIwLDIxICsyMCwzNCBAQAogCiAjaW5jbHVkZSAiV0FWRXh0cmFjdG9yLmgiCiAKKyNpbmNsdWRlIDxhbmRyb2lkL2JpbmRlcl9pYmluZGVyLmg+IC8vIGZvciBBSUJpbmRlcl9nZXRDYWxsaW5nVWlkCiAjaW5jbHVkZSA8YXVkaW9fdXRpbHMvcHJpbWl0aXZlcy5oPgogI2luY2x1ZGUgPG1lZGlhL0RhdGFTb3VyY2VCYXNlLmg+Ci0jaW5jbHVkZSA8bWVkaWEvTWVkaWFUcmFjay5oPgogI2luY2x1ZGUgPG1lZGlhL3N0YWdlZnJpZ2h0L2ZvdW5kYXRpb24vQURlYnVnLmg+CiAjaW5jbHVkZSA8bWVkaWEvc3RhZ2VmcmlnaHQvTWVkaWFCdWZmZXJHcm91cC5oPgogI2luY2x1ZGUgPG1lZGlhL3N0YWdlZnJpZ2h0L01lZGlhRGVmcy5oPgogI2luY2x1ZGUgPG1lZGlhL3N0YWdlZnJpZ2h0L01lZGlhRXJyb3JzLmg+CiAjaW5jbHVkZSA8bWVkaWEvc3RhZ2VmcmlnaHQvTWV0YURhdGEuaD4KKyNpbmNsdWRlIDxwcml2YXRlL2FuZHJvaWRfZmlsZXN5c3RlbV9jb25maWcuaD4gLy8gZm9yIEFJRF9NRURJQQorI2luY2x1ZGUgPHN5c3RlbS9hdWRpby5oPgogI2luY2x1ZGUgPHV0aWxzL1N0cmluZzguaD4KICNpbmNsdWRlIDxjdXRpbHMvYml0b3BzLmg+CiAKICNkZWZpbmUgQ0hBTk5FTF9NQVNLX1VTRV9DSEFOTkVMX09SREVSIDAKIAorLy8gTk9URTogVGhpcyBjb2RlIGFzc3VtZXMgdGhlIGRldmljZSBwcm9jZXNzb3IgaXMgbGl0dGxlIGVuZGlhbi4KKwogbmFtZXNwYWNlIGFuZHJvaWQgewogCisvLyBNZWRpYVNlcnZlciBpcyBjYXBhYmxlIG9mIGhhbmRsaW5nIGZsb2F0IGV4dHJhY3RvciBvdXRwdXQsIGJ1dCBnZW5lcmFsIHByb2Nlc3NlcworLy8gbWF5IG5vdCBiZSBhYmxlIHRvIGRvIHNvLgorLy8gVE9ETzogSW1wcm92ZSBBUEkgdG8gc2V0IGV4dHJhY3RvciBmbG9hdCBvdXRwdXQuCisvLyAoTm90ZTogZHVwbGljYXRlZCB3aXRoIEZMQUNFeHRyYWN0b3IuY3BwKQorc3RhdGljIGlubGluZSBib29sIHNob3VsZEV4dHJhY3Rvck91dHB1dEZsb2F0KGludCBiaXRzUGVyU2FtcGxlKQoreworICAgIHJldHVybiBiaXRzUGVyU2FtcGxlID4gMTYgJiYgQUlCaW5kZXJfZ2V0Q2FsbGluZ1VpZCgpID09IEFJRF9NRURJQTsKK30KKwogZW51bSB7CiAgICAgV0FWRV9GT1JNQVRfUENNICAgICAgICA9IDB4MDAwMSwKICAgICBXQVZFX0ZPUk1BVF9JRUVFX0ZMT0FUID0gMHgwMDAzLApAQCAtNTUsMTkgKzY4LDE5IEBACiAgICAgcmV0dXJuIHB0clsxXSA8PCA4IHwgcHRyWzBdOwogfQogCi1zdHJ1Y3QgV0FWU291cmNlIDogcHVibGljIE1lZGlhVHJhY2sgeworc3RydWN0IFdBVlNvdXJjZSA6IHB1YmxpYyBNZWRpYVRyYWNrSGVscGVyVjIgewogICAgIFdBVlNvdXJjZSgKLSAgICAgICAgICAgIERhdGFTb3VyY2VCYXNlICpkYXRhU291cmNlLAotICAgICAgICAgICAgTWV0YURhdGFCYXNlICZtZXRhLAorICAgICAgICAgICAgRGF0YVNvdXJjZUhlbHBlciAqZGF0YVNvdXJjZSwKKyAgICAgICAgICAgIEFNZWRpYUZvcm1hdCAqbWV0YSwKICAgICAgICAgICAgIHVpbnQxNl90IHdhdmVGb3JtYXQsCi0gICAgICAgICAgICBpbnQzMl90IGJpdHNQZXJTYW1wbGUsCisgICAgICAgICAgICBib29sIG91dHB1dEZsb2F0LAogICAgICAgICAgICAgb2ZmNjRfdCBvZmZzZXQsIHNpemVfdCBzaXplKTsKIAotICAgIHZpcnR1YWwgc3RhdHVzX3Qgc3RhcnQoTWV0YURhdGFCYXNlICpwYXJhbXMgPSBOVUxMKTsKLSAgICB2aXJ0dWFsIHN0YXR1c190IHN0b3AoKTsKLSAgICB2aXJ0dWFsIHN0YXR1c190IGdldEZvcm1hdChNZXRhRGF0YUJhc2UgJm1ldGEpOworICAgIHZpcnR1YWwgbWVkaWFfc3RhdHVzX3Qgc3RhcnQoKTsKKyAgICB2aXJ0dWFsIG1lZGlhX3N0YXR1c190IHN0b3AoKTsKKyAgICB2aXJ0dWFsIG1lZGlhX3N0YXR1c190IGdldEZvcm1hdChBTWVkaWFGb3JtYXQgKm1ldGEpOwogCi0gICAgdmlydHVhbCBzdGF0dXNfdCByZWFkKAorICAgIHZpcnR1YWwgbWVkaWFfc3RhdHVzX3QgcmVhZCgKICAgICAgICAgICAgIE1lZGlhQnVmZmVyQmFzZSAqKmJ1ZmZlciwgY29uc3QgUmVhZE9wdGlvbnMgKm9wdGlvbnMgPSBOVUxMKTsKIAogICAgIHZpcnR1YWwgYm9vbCBzdXBwb3J0Tm9uYmxvY2tpbmdSZWFkKCkgeyByZXR1cm4gdHJ1ZTsgfQpAQCAtNzgsOSArOTEsMTAgQEAKIHByaXZhdGU6CiAgICAgc3RhdGljIGNvbnN0IHNpemVfdCBrTWF4RnJhbWVTaXplOwogCi0gICAgRGF0YVNvdXJjZUJhc2UgKm1EYXRhU291cmNlOwotICAgIE1ldGFEYXRhQmFzZSAmbU1ldGE7CisgICAgRGF0YVNvdXJjZUhlbHBlciAqbURhdGFTb3VyY2U7CisgICAgQU1lZGlhRm9ybWF0ICptTWV0YTsKICAgICB1aW50MTZfdCBtV2F2ZUZvcm1hdDsKKyAgICBjb25zdCBib29sIG1PdXRwdXRGbG9hdDsKICAgICBpbnQzMl90IG1TYW1wbGVSYXRlOwogICAgIGludDMyX3QgbU51bUNoYW5uZWxzOwogICAgIGludDMyX3QgbUJpdHNQZXJTYW1wbGU7CkBAIC05NCw0OCArMTA4LDU2IEBACiAgICAgV0FWU291cmNlICZvcGVyYXRvcj0oY29uc3QgV0FWU291cmNlICYpOwogfTsKIAotV0FWRXh0cmFjdG9yOjpXQVZFeHRyYWN0b3IoRGF0YVNvdXJjZUJhc2UgKnNvdXJjZSkKK1dBVkV4dHJhY3Rvcjo6V0FWRXh0cmFjdG9yKERhdGFTb3VyY2VIZWxwZXIgKnNvdXJjZSkKICAgICA6IG1EYXRhU291cmNlKHNvdXJjZSksCiAgICAgICBtVmFsaWRGb3JtYXQoZmFsc2UpLAogICAgICAgbUNoYW5uZWxNYXNrKENIQU5ORUxfTUFTS19VU0VfQ0hBTk5FTF9PUkRFUikgeworICAgIG1UcmFja01ldGEgPSBBTWVkaWFGb3JtYXRfbmV3KCk7CiAgICAgbUluaXRDaGVjayA9IGluaXQoKTsKIH0KIAogV0FWRXh0cmFjdG9yOjp+V0FWRXh0cmFjdG9yKCkgeworICAgIGRlbGV0ZSBtRGF0YVNvdXJjZTsKKyAgICBBTWVkaWFGb3JtYXRfZGVsZXRlKG1UcmFja01ldGEpOwogfQogCi1zdGF0dXNfdCBXQVZFeHRyYWN0b3I6OmdldE1ldGFEYXRhKE1ldGFEYXRhQmFzZSAmbWV0YSkgewotICAgIG1ldGEuY2xlYXIoKTsKK21lZGlhX3N0YXR1c190IFdBVkV4dHJhY3Rvcjo6Z2V0TWV0YURhdGEoQU1lZGlhRm9ybWF0ICptZXRhKSB7CisgICAgQU1lZGlhRm9ybWF0X2NsZWFyKG1ldGEpOwogICAgIGlmIChtSW5pdENoZWNrID09IE9LKSB7Ci0gICAgICAgIG1ldGEuc2V0Q1N0cmluZyhrS2V5TUlNRVR5cGUsIE1FRElBX01JTUVUWVBFX0NPTlRBSU5FUl9XQVYpOworICAgICAgICBBTWVkaWFGb3JtYXRfc2V0U3RyaW5nKG1ldGEsIEFNRURJQUZPUk1BVF9LRVlfTUlNRSwgTUVESUFfTUlNRVRZUEVfQ09OVEFJTkVSX1dBVik7CiAgICAgfQogCi0gICAgcmV0dXJuIE9LOworICAgIHJldHVybiBBTUVESUFfT0s7CiB9CiAKIHNpemVfdCBXQVZFeHRyYWN0b3I6OmNvdW50VHJhY2tzKCkgewogICAgIHJldHVybiBtSW5pdENoZWNrID09IE9LID8gMSA6IDA7CiB9CiAKLU1lZGlhVHJhY2sgKldBVkV4dHJhY3Rvcjo6Z2V0VHJhY2soc2l6ZV90IGluZGV4KSB7CitNZWRpYVRyYWNrSGVscGVyVjIgKldBVkV4dHJhY3Rvcjo6Z2V0VHJhY2soc2l6ZV90IGluZGV4KSB7CiAgICAgaWYgKG1Jbml0Q2hlY2sgIT0gT0sgfHwgaW5kZXggPiAwKSB7CiAgICAgICAgIHJldHVybiBOVUxMOwogICAgIH0KIAogICAgIHJldHVybiBuZXcgV0FWU291cmNlKAogICAgICAgICAgICAgbURhdGFTb3VyY2UsIG1UcmFja01ldGEsCi0gICAgICAgICAgICBtV2F2ZUZvcm1hdCwgbUJpdHNQZXJTYW1wbGUsIG1EYXRhT2Zmc2V0LCBtRGF0YVNpemUpOworICAgICAgICAgICAgbVdhdmVGb3JtYXQsIHNob3VsZEV4dHJhY3Rvck91dHB1dEZsb2F0KG1CaXRzUGVyU2FtcGxlKSwgbURhdGFPZmZzZXQsIG1EYXRhU2l6ZSk7CiB9CiAKLXN0YXR1c190IFdBVkV4dHJhY3Rvcjo6Z2V0VHJhY2tNZXRhRGF0YSgKLSAgICAgICAgTWV0YURhdGFCYXNlICZtZXRhLAorbWVkaWFfc3RhdHVzX3QgV0FWRXh0cmFjdG9yOjpnZXRUcmFja01ldGFEYXRhKAorICAgICAgICBBTWVkaWFGb3JtYXQgKm1ldGEsCiAgICAgICAgIHNpemVfdCBpbmRleCwgdWludDMyX3QgLyogZmxhZ3MgKi8pIHsKICAgICBpZiAobUluaXRDaGVjayAhPSBPSyB8fCBpbmRleCA+IDApIHsKLSAgICAgICAgcmV0dXJuIFVOS05PV05fRVJST1I7CisgICAgICAgIHJldHVybiBBTUVESUFfRVJST1JfVU5LTk9XTjsKICAgICB9CiAKLSAgICBtZXRhID0gbVRyYWNrTWV0YTsKLSAgICByZXR1cm4gT0s7CisgICAgY29uc3QgbWVkaWFfc3RhdHVzX3Qgc3RhdHVzID0gQU1lZGlhRm9ybWF0X2NvcHkobWV0YSwgbVRyYWNrTWV0YSk7CisgICAgaWYgKHN0YXR1cyA9PSBPSykgeworICAgICAgICBBTWVkaWFGb3JtYXRfc2V0SW50MzIobWV0YSwgQU1FRElBRk9STUFUX0tFWV9QQ01fRU5DT0RJTkcsCisgICAgICAgICAgICAgICAgc2hvdWxkRXh0cmFjdG9yT3V0cHV0RmxvYXQobUJpdHNQZXJTYW1wbGUpCisgICAgICAgICAgICAgICAgICAgICAgICA/IGtBdWRpb0VuY29kaW5nUGNtRmxvYXQgOiBrQXVkaW9FbmNvZGluZ1BjbTE2Yml0KTsKKyAgICB9CisgICAgcmV0dXJuIHN0YXR1czsKIH0KIAogc3RhdHVzX3QgV0FWRXh0cmFjdG9yOjppbml0KCkgewpAQCAtMTg1LDcgKzIwNyw3IEBACiAgICAgICAgICAgICAgICAgICAgICYmIG1XYXZlRm9ybWF0ICE9IFdBVkVfRk9STUFUX01VTEFXCiAgICAgICAgICAgICAgICAgICAgICYmIG1XYXZlRm9ybWF0ICE9IFdBVkVfRk9STUFUX01TR1NNCiAgICAgICAgICAgICAgICAgICAgICYmIG1XYXZlRm9ybWF0ICE9IFdBVkVfRk9STUFUX0VYVEVOU0lCTEUpIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gRVJST1JfVU5TVVBQT1JURUQ7CisgICAgICAgICAgICAgICAgcmV0dXJuIEFNRURJQV9FUlJPUl9VTlNVUFBPUlRFRDsKICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgdWludDhfdCBmbXRTaXplID0gMTY7CkBAIC0xOTgsMTMgKzIyMCwxMyBAQAogCiAgICAgICAgICAgICBtTnVtQ2hhbm5lbHMgPSBVMTZfTEVfQVQoJmZvcm1hdFNwZWNbMl0pOwogCi0gICAgICAgICAgICBpZiAobU51bUNoYW5uZWxzIDwgMSB8fCBtTnVtQ2hhbm5lbHMgPiA4KSB7CisgICAgICAgICAgICBpZiAobU51bUNoYW5uZWxzIDwgMSB8fCBtTnVtQ2hhbm5lbHMgPiBGQ0NfOCkgewogICAgICAgICAgICAgICAgIEFMT0dFKCJVbnN1cHBvcnRlZCBudW1iZXIgb2YgY2hhbm5lbHMgKCVkKSIsIG1OdW1DaGFubmVscyk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIEVSUk9SX1VOU1VQUE9SVEVEOworICAgICAgICAgICAgICAgIHJldHVybiBBTUVESUFfRVJST1JfVU5TVVBQT1JURUQ7CiAgICAgICAgICAgICB9CiAKICAgICAgICAgICAgIGlmIChtV2F2ZUZvcm1hdCAhPSBXQVZFX0ZPUk1BVF9FWFRFTlNJQkxFKSB7Ci0gICAgICAgICAgICAgICAgaWYgKG1OdW1DaGFubmVscyAhPSAxICYmIG1OdW1DaGFubmVscyAhPSAyKSB7CisgICAgICAgICAgICAgICAgaWYgKG1OdW1DaGFubmVscyAhPSAxICYmIG1OdW1DaGFubmVscyAhPSBGQ0NfMikgewogICAgICAgICAgICAgICAgICAgICBBTE9HVygiTW9yZSB0aGFuIDIgY2hhbm5lbHMgKCVkKSBpbiBub24tV0FWRV9FWFQsIHVua25vd24gY2hhbm5lbCBtYXNrIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtTnVtQ2hhbm5lbHMpOwogICAgICAgICAgICAgICAgIH0KQEAgLTIyNCw3ICsyNDYsNyBAQAogICAgICAgICAgICAgICAgICAgICBpZiAodmFsaWRCaXRzUGVyU2FtcGxlICE9IDApIHsKICAgICAgICAgICAgICAgICAgICAgICAgIEFMT0dFKCJ2YWxpZEJpdHMoJWQpICE9IGJpdHNQZXJTYW1wbGUoJWQpIGFyZSBub3Qgc3VwcG9ydGVkIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsaWRCaXRzUGVyU2FtcGxlLCBtQml0c1BlclNhbXBsZSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gRVJST1JfVU5TVVBQT1JURUQ7CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gQU1FRElBX0VSUk9SX1VOU1VQUE9SVEVEOwogICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgICAgLy8gd2Ugb25seSBzdXBwb3J0IHZhbGl0Qml0c1BlclNhbXBsZSA9PSBiaXRzUGVyU2FtcGxlIGJ1dCBzb21lIFdBVl9FWFQKICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHdyaXRlcnMgZG9uJ3QgY29ycmVjdGx5IHNldCB0aGUgdmFsaWQgYml0cyB2YWx1ZSwgYW5kIGxlYXZlIGl0IGF0IDAuCkBAIC0yODQsMzUgKzMwNiwzMyBAQAogICAgICAgICAgICAgICAgIG1EYXRhT2Zmc2V0ID0gb2Zmc2V0OwogICAgICAgICAgICAgICAgIG1EYXRhU2l6ZSA9IGNodW5rU2l6ZTsKIAotICAgICAgICAgICAgICAgIG1UcmFja01ldGEuY2xlYXIoKTsKKyAgICAgICAgICAgICAgICBBTWVkaWFGb3JtYXRfY2xlYXIobVRyYWNrTWV0YSk7CiAKICAgICAgICAgICAgICAgICBzd2l0Y2ggKG1XYXZlRm9ybWF0KSB7CiAgICAgICAgICAgICAgICAgICAgIGNhc2UgV0FWRV9GT1JNQVRfUENNOgogICAgICAgICAgICAgICAgICAgICBjYXNlIFdBVkVfRk9STUFUX0lFRUVfRkxPQVQ6Ci0gICAgICAgICAgICAgICAgICAgICAgICBtVHJhY2tNZXRhLnNldENTdHJpbmcoCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtLZXlNSU1FVHlwZSwgTUVESUFfTUlNRVRZUEVfQVVESU9fUkFXKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIEFNZWRpYUZvcm1hdF9zZXRTdHJpbmcobVRyYWNrTWV0YSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQU1FRElBRk9STUFUX0tFWV9NSU1FLCBNRURJQV9NSU1FVFlQRV9BVURJT19SQVcpOwogICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgIGNhc2UgV0FWRV9GT1JNQVRfQUxBVzoKLSAgICAgICAgICAgICAgICAgICAgICAgIG1UcmFja01ldGEuc2V0Q1N0cmluZygKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga0tleU1JTUVUeXBlLCBNRURJQV9NSU1FVFlQRV9BVURJT19HNzExX0FMQVcpOworICAgICAgICAgICAgICAgICAgICAgICAgQU1lZGlhRm9ybWF0X3NldFN0cmluZyhtVHJhY2tNZXRhLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBTUVESUFGT1JNQVRfS0VZX01JTUUsIE1FRElBX01JTUVUWVBFX0FVRElPX0c3MTFfQUxBVyk7CiAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgY2FzZSBXQVZFX0ZPUk1BVF9NU0dTTToKLSAgICAgICAgICAgICAgICAgICAgICAgIG1UcmFja01ldGEuc2V0Q1N0cmluZygKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga0tleU1JTUVUeXBlLCBNRURJQV9NSU1FVFlQRV9BVURJT19NU0dTTSk7CisgICAgICAgICAgICAgICAgICAgICAgICBBTWVkaWFGb3JtYXRfc2V0U3RyaW5nKG1UcmFja01ldGEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFNRURJQUZPUk1BVF9LRVlfTUlNRSwgTUVESUFfTUlNRVRZUEVfQVVESU9fTVNHU00pOwogICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICAgICAgICAgICAgICBDSEVDS19FUShtV2F2ZUZvcm1hdCwgKHVpbnQxNl90KVdBVkVfRk9STUFUX01VTEFXKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIG1UcmFja01ldGEuc2V0Q1N0cmluZygKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga0tleU1JTUVUeXBlLCBNRURJQV9NSU1FVFlQRV9BVURJT19HNzExX01MQVcpOworICAgICAgICAgICAgICAgICAgICAgICAgQU1lZGlhRm9ybWF0X3NldFN0cmluZyhtVHJhY2tNZXRhLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBTUVESUFGT1JNQVRfS0VZX01JTUUsIE1FRElBX01JTUVUWVBFX0FVRElPX0c3MTFfTUxBVyk7CiAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgICAgICBtVHJhY2tNZXRhLnNldEludDMyKGtLZXlDaGFubmVsQ291bnQsIG1OdW1DaGFubmVscyk7Ci0gICAgICAgICAgICAgICAgbVRyYWNrTWV0YS5zZXRJbnQzMihrS2V5Q2hhbm5lbE1hc2ssIG1DaGFubmVsTWFzayk7Ci0gICAgICAgICAgICAgICAgbVRyYWNrTWV0YS5zZXRJbnQzMihrS2V5U2FtcGxlUmF0ZSwgbVNhbXBsZVJhdGUpOwotICAgICAgICAgICAgICAgIG1UcmFja01ldGEuc2V0SW50MzIoa0tleUJpdHNQZXJTYW1wbGUsIG1CaXRzUGVyU2FtcGxlKTsKLSAgICAgICAgICAgICAgICBtVHJhY2tNZXRhLnNldEludDMyKGtLZXlQY21FbmNvZGluZywga0F1ZGlvRW5jb2RpbmdQY20xNmJpdCk7Ci0KKyAgICAgICAgICAgICAgICBBTWVkaWFGb3JtYXRfc2V0SW50MzIobVRyYWNrTWV0YSwgQU1FRElBRk9STUFUX0tFWV9DSEFOTkVMX0NPVU5ULCBtTnVtQ2hhbm5lbHMpOworICAgICAgICAgICAgICAgIEFNZWRpYUZvcm1hdF9zZXRJbnQzMihtVHJhY2tNZXRhLCBBTUVESUFGT1JNQVRfS0VZX0NIQU5ORUxfTUFTSywgbUNoYW5uZWxNYXNrKTsKKyAgICAgICAgICAgICAgICBBTWVkaWFGb3JtYXRfc2V0SW50MzIobVRyYWNrTWV0YSwgQU1FRElBRk9STUFUX0tFWV9TQU1QTEVfUkFURSwgbVNhbXBsZVJhdGUpOworICAgICAgICAgICAgICAgIEFNZWRpYUZvcm1hdF9zZXRJbnQzMihtVHJhY2tNZXRhLCBBTUVESUFGT1JNQVRfS0VZX0JJVFNfUEVSX1NBTVBMRSwgbUJpdHNQZXJTYW1wbGUpOwogICAgICAgICAgICAgICAgIGludDY0X3QgZHVyYXRpb25VcyA9IDA7CiAgICAgICAgICAgICAgICAgaWYgKG1XYXZlRm9ybWF0ID09IFdBVkVfRk9STUFUX01TR1NNKSB7CiAgICAgICAgICAgICAgICAgICAgIC8vIDY1IGJ5dGVzIGRlY29kZSB0byAzMjAgOGtIeiBzYW1wbGVzCkBAIC0zMjIsMTggKzM0MiwxOCBAQAogICAgICAgICAgICAgICAgICAgICBzaXplX3QgYnl0ZXNQZXJTYW1wbGUgPSBtQml0c1BlclNhbXBsZSA+PiAzOwogCiAgICAgICAgICAgICAgICAgICAgIGlmICghYnl0ZXNQZXJTYW1wbGUgfHwgIW1OdW1DaGFubmVscykKLSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBFUlJPUl9NQUxGT1JNRUQ7CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gQU1FRElBX0VSUk9SX01BTEZPUk1FRDsKIAogICAgICAgICAgICAgICAgICAgICBzaXplX3QgbnVtX3NhbXBsZXMgPSBtRGF0YVNpemUgLyAobU51bUNoYW5uZWxzICogYnl0ZXNQZXJTYW1wbGUpOwogCiAgICAgICAgICAgICAgICAgICAgIGlmICghbVNhbXBsZVJhdGUpCi0gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gRVJST1JfTUFMRk9STUVEOworICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEFNRURJQV9FUlJPUl9NQUxGT1JNRUQ7CiAKICAgICAgICAgICAgICAgICAgICAgZHVyYXRpb25VcyA9CiAgICAgICAgICAgICAgICAgICAgICAgICAxMDAwMDAwTEwgKiBudW1fc2FtcGxlcyAvIG1TYW1wbGVSYXRlOwogICAgICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgICAgIG1UcmFja01ldGEuc2V0SW50NjQoa0tleUR1cmF0aW9uLCBkdXJhdGlvblVzKTsKKyAgICAgICAgICAgICAgICBBTWVkaWFGb3JtYXRfc2V0SW50NjQobVRyYWNrTWV0YSwgQU1FRElBRk9STUFUX0tFWV9EVVJBVElPTiwgZHVyYXRpb25Vcyk7CiAKICAgICAgICAgICAgICAgICByZXR1cm4gT0s7CiAgICAgICAgICAgICB9CkBAIC0zNDgsMjUgKzM2OCwyMiBAQAogY29uc3Qgc2l6ZV90IFdBVlNvdXJjZTo6a01heEZyYW1lU2l6ZSA9IDMyNzY4OwogCiBXQVZTb3VyY2U6OldBVlNvdXJjZSgKLSAgICAgICAgRGF0YVNvdXJjZUJhc2UgKmRhdGFTb3VyY2UsCi0gICAgICAgIE1ldGFEYXRhQmFzZSAmbWV0YSwKKyAgICAgICAgRGF0YVNvdXJjZUhlbHBlciAqZGF0YVNvdXJjZSwKKyAgICAgICAgQU1lZGlhRm9ybWF0ICptZXRhLAogICAgICAgICB1aW50MTZfdCB3YXZlRm9ybWF0LAotICAgICAgICBpbnQzMl90IGJpdHNQZXJTYW1wbGUsCisgICAgICAgIGJvb2wgb3V0cHV0RmxvYXQsCiAgICAgICAgIG9mZjY0X3Qgb2Zmc2V0LCBzaXplX3Qgc2l6ZSkKICAgICA6IG1EYXRhU291cmNlKGRhdGFTb3VyY2UpLAogICAgICAgbU1ldGEobWV0YSksCiAgICAgICBtV2F2ZUZvcm1hdCh3YXZlRm9ybWF0KSwKLSAgICAgIG1TYW1wbGVSYXRlKDApLAotICAgICAgbU51bUNoYW5uZWxzKDApLAotICAgICAgbUJpdHNQZXJTYW1wbGUoYml0c1BlclNhbXBsZSksCisgICAgICBtT3V0cHV0RmxvYXQob3V0cHV0RmxvYXQpLAogICAgICAgbU9mZnNldChvZmZzZXQpLAogICAgICAgbVNpemUoc2l6ZSksCiAgICAgICBtU3RhcnRlZChmYWxzZSksCiAgICAgICBtR3JvdXAoTlVMTCkgewotICAgIENIRUNLKG1NZXRhLmZpbmRJbnQzMihrS2V5U2FtcGxlUmF0ZSwgJm1TYW1wbGVSYXRlKSk7Ci0gICAgQ0hFQ0sobU1ldGEuZmluZEludDMyKGtLZXlDaGFubmVsQ291bnQsICZtTnVtQ2hhbm5lbHMpKTsKLQotICAgIG1NZXRhLnNldEludDMyKGtLZXlNYXhJbnB1dFNpemUsIGtNYXhGcmFtZVNpemUpOworICAgIENIRUNLKEFNZWRpYUZvcm1hdF9nZXRJbnQzMihtTWV0YSwgQU1FRElBRk9STUFUX0tFWV9TQU1QTEVfUkFURSwgJm1TYW1wbGVSYXRlKSk7CisgICAgQ0hFQ0soQU1lZGlhRm9ybWF0X2dldEludDMyKG1NZXRhLCBBTUVESUFGT1JNQVRfS0VZX0NIQU5ORUxfQ09VTlQsICZtTnVtQ2hhbm5lbHMpKTsKKyAgICBDSEVDSyhBTWVkaWFGb3JtYXRfZ2V0SW50MzIobU1ldGEsIEFNRURJQUZPUk1BVF9LRVlfQklUU19QRVJfU0FNUExFLCAmbUJpdHNQZXJTYW1wbGUpKTsKIH0KIAogV0FWU291cmNlOjp+V0FWU291cmNlKCkgewpAQCAtMzc1LDcgKzM5Miw3IEBACiAgICAgfQogfQogCi1zdGF0dXNfdCBXQVZTb3VyY2U6OnN0YXJ0KE1ldGFEYXRhQmFzZSAqIC8qIHBhcmFtcyAqLykgeworbWVkaWFfc3RhdHVzX3QgV0FWU291cmNlOjpzdGFydCgpIHsKICAgICBBTE9HVigiV0FWU291cmNlOjpzdGFydCIpOwogCiAgICAgQ0hFQ0soIW1TdGFydGVkKTsKQEAgLTM4MywxOSArNDAwLDE0IEBACiAgICAgLy8gc29tZSBXQVYgZmlsZXMgbWF5IGhhdmUgbGFyZ2UgYXVkaW8gYnVmZmVycyB0aGF0IHVzZSBzaGFyZWQgbWVtb3J5IHRyYW5zZmVyLgogICAgIG1Hcm91cCA9IG5ldyBNZWRpYUJ1ZmZlckdyb3VwKDQgLyogYnVmZmVycyAqLywga01heEZyYW1lU2l6ZSk7CiAKLSAgICBpZiAobUJpdHNQZXJTYW1wbGUgPT0gOCkgewotICAgICAgICAvLyBBcyBhIHRlbXBvcmFyeSBidWZmZXIgZm9yIDgtPjE2IGJpdCBjb252ZXJzaW9uLgotICAgICAgICBtR3JvdXAtPmFkZF9idWZmZXIoTWVkaWFCdWZmZXJCYXNlOjpDcmVhdGUoa01heEZyYW1lU2l6ZSkpOwotICAgIH0KLQogICAgIG1DdXJyZW50UG9zID0gbU9mZnNldDsKIAogICAgIG1TdGFydGVkID0gdHJ1ZTsKIAotICAgIHJldHVybiBPSzsKKyAgICByZXR1cm4gQU1FRElBX09LOwogfQogCi1zdGF0dXNfdCBXQVZTb3VyY2U6OnN0b3AoKSB7CittZWRpYV9zdGF0dXNfdCBXQVZTb3VyY2U6OnN0b3AoKSB7CiAgICAgQUxPR1YoIldBVlNvdXJjZTo6c3RvcCIpOwogCiAgICAgQ0hFQ0sobVN0YXJ0ZWQpOwpAQCAtNDA1LDIyICs0MTcsMjcgQEAKIAogICAgIG1TdGFydGVkID0gZmFsc2U7CiAKLSAgICByZXR1cm4gT0s7CisgICAgcmV0dXJuIEFNRURJQV9PSzsKIH0KIAotc3RhdHVzX3QgV0FWU291cmNlOjpnZXRGb3JtYXQoTWV0YURhdGFCYXNlICZtZXRhKSB7CittZWRpYV9zdGF0dXNfdCBXQVZTb3VyY2U6OmdldEZvcm1hdChBTWVkaWFGb3JtYXQgKm1ldGEpIHsKICAgICBBTE9HVigiV0FWU291cmNlOjpnZXRGb3JtYXQiKTsKIAotICAgIG1ldGEgPSBtTWV0YTsKLSAgICByZXR1cm4gT0s7CisgICAgY29uc3QgbWVkaWFfc3RhdHVzX3Qgc3RhdHVzID0gQU1lZGlhRm9ybWF0X2NvcHkobWV0YSwgbU1ldGEpOworICAgIGlmIChzdGF0dXMgPT0gT0spIHsKKyAgICAgICAgQU1lZGlhRm9ybWF0X3NldEludDMyKG1ldGEsIEFNRURJQUZPUk1BVF9LRVlfTUFYX0lOUFVUX1NJWkUsIGtNYXhGcmFtZVNpemUpOworICAgICAgICBBTWVkaWFGb3JtYXRfc2V0SW50MzIobWV0YSwgQU1FRElBRk9STUFUX0tFWV9QQ01fRU5DT0RJTkcsCisgICAgICAgICAgICAgICAgbU91dHB1dEZsb2F0ID8ga0F1ZGlvRW5jb2RpbmdQY21GbG9hdCA6IGtBdWRpb0VuY29kaW5nUGNtMTZiaXQpOworICAgIH0KKyAgICByZXR1cm4gc3RhdHVzOwogfQogCi1zdGF0dXNfdCBXQVZTb3VyY2U6OnJlYWQoCittZWRpYV9zdGF0dXNfdCBXQVZTb3VyY2U6OnJlYWQoCiAgICAgICAgIE1lZGlhQnVmZmVyQmFzZSAqKm91dCwgY29uc3QgUmVhZE9wdGlvbnMgKm9wdGlvbnMpIHsKICAgICAqb3V0ID0gTlVMTDsKIAogICAgIGlmIChvcHRpb25zICE9IG51bGxwdHIgJiYgb3B0aW9ucy0+Z2V0Tm9uQmxvY2tpbmcoKSAmJiAhbUdyb3VwLT5oYXNfYnVmZmVycygpKSB7Ci0gICAgICAgIHJldHVybiBXT1VMRF9CTE9DSzsKKyAgICAgICAgcmV0dXJuIEFNRURJQV9FUlJPUl9XT1VMRF9CTE9DSzsKICAgICB9CiAKICAgICBpbnQ2NF90IHNlZWtUaW1lVXM7CkBAIC00NDUsMTUgKzQ2MiwxOSBAQAogICAgIE1lZGlhQnVmZmVyQmFzZSAqYnVmZmVyOwogICAgIHN0YXR1c190IGVyciA9IG1Hcm91cC0+YWNxdWlyZV9idWZmZXIoJmJ1ZmZlcik7CiAgICAgaWYgKGVyciAhPSBPSykgewotICAgICAgICByZXR1cm4gZXJyOworICAgICAgICByZXR1cm4gQU1FRElBX0VSUk9SX1VOS05PV047CiAgICAgfQogCi0gICAgLy8gbWFrZSBzdXJlIHRoYXQgbWF4Qnl0ZXNUb1JlYWQgaXMgbXVsdGlwbGUgb2YgMywgaW4gMjQtYml0IGNhc2UKLSAgICBzaXplX3QgbWF4Qnl0ZXNUb1JlYWQgPQotICAgICAgICBtQml0c1BlclNhbXBsZSA9PSA4ID8ga01heEZyYW1lU2l6ZSAvIDIgOiAKLSAgICAgICAgKG1CaXRzUGVyU2FtcGxlID09IDI0ID8gMyooa01heEZyYW1lU2l6ZS8zKToga01heEZyYW1lU2l6ZSk7CisgICAgLy8gbWF4Qnl0ZXNUb1JlYWQgbWF5IGJlIHJlZHVjZWQgc28gdGhhdCBpbi1wbGFjZSBkYXRhIGNvbnZlcnNpb24gd2lsbCBmaXQgaW4gYnVmZmVyIHNpemUuCisgICAgY29uc3Qgc2l6ZV90IGJ1ZmZlclNpemUgPSBidWZmZXItPnNpemUoKTsKKyAgICBzaXplX3QgbWF4Qnl0ZXNUb1JlYWQ7CisgICAgaWYgKG1PdXRwdXRGbG9hdCkgeyAvLyBkZXN0aW5hdGlvbiBpcyBmbG9hdCBhdCA0IGJ5dGVzIHBlciBzYW1wbGUsIHNvdXJjZSBtYXkgYmUgbGVzcy4KKyAgICAgICAgbWF4Qnl0ZXNUb1JlYWQgPSAobUJpdHNQZXJTYW1wbGUgLyA4KSAqIChidWZmZXJTaXplIC8gNCk7CisgICAgfSBlbHNlIHsgLy8gZGVzdGluYXRpb24gaXMgaW50MTZfdCBhdCAyIGJ5dGVzIHBlciBzYW1wbGUsIG9ubHkgc291cmNlIG9mIDggYml0cyBpcyBsZXNzLgorICAgICAgICBtYXhCeXRlc1RvUmVhZCA9IG1CaXRzUGVyU2FtcGxlID09IDggPyBidWZmZXJTaXplIC8gMiA6IGJ1ZmZlclNpemU7CisgICAgfQogCi0gICAgc2l6ZV90IG1heEJ5dGVzQXZhaWxhYmxlID0KKyAgICBjb25zdCBzaXplX3QgbWF4Qnl0ZXNBdmFpbGFibGUgPQogICAgICAgICAobUN1cnJlbnRQb3MgLSBtT2Zmc2V0ID49IChvZmY2NF90KW1TaXplKQogICAgICAgICAgICAgPyAwIDogbVNpemUgLSAobUN1cnJlbnRQb3MgLSBtT2Zmc2V0KTsKIApAQCAtNDgyLDQ1ICs1MDMsNjQgQEAKICAgICAgICAgYnVmZmVyLT5yZWxlYXNlKCk7CiAgICAgICAgIGJ1ZmZlciA9IE5VTEw7CiAKLSAgICAgICAgcmV0dXJuIEVSUk9SX0VORF9PRl9TVFJFQU07CisgICAgICAgIHJldHVybiBBTUVESUFfRVJST1JfRU5EX09GX1NUUkVBTTsKICAgICB9CiAKICAgICBidWZmZXItPnNldF9yYW5nZSgwLCBuKTsKIAogICAgIC8vIFRPRE86IGFkZCBjYXBhYmlsaXR5IHRvIHJldHVybiBkYXRhIGFzIGZsb2F0IFBDTSBpbnN0ZWFkIG9mIDE2IGJpdCBQQ00uCiAgICAgaWYgKG1XYXZlRm9ybWF0ID09IFdBVkVfRk9STUFUX1BDTSkgewotICAgICAgICBpZiAobUJpdHNQZXJTYW1wbGUgPT0gOCkgewotICAgICAgICAgICAgLy8gQ29udmVydCA4LWJpdCB1bnNpZ25lZCBzYW1wbGVzIHRvIDE2LWJpdCBzaWduZWQuCi0KLSAgICAgICAgICAgIC8vIENyZWF0ZSBuZXcgYnVmZmVyIHdpdGggMiBieXRlIHdpZGUgc2FtcGxlcwotICAgICAgICAgICAgTWVkaWFCdWZmZXJCYXNlICp0bXA7Ci0gICAgICAgICAgICBDSEVDS19FUShtR3JvdXAtPmFjcXVpcmVfYnVmZmVyKCZ0bXApLCAoc3RhdHVzX3QpT0spOwotICAgICAgICAgICAgdG1wLT5zZXRfcmFuZ2UoMCwgMiAqIG4pOwotCi0gICAgICAgICAgICBtZW1jcHlfdG9faTE2X2Zyb21fdTgoKGludDE2X3QgKil0bXAtPmRhdGEoKSwgKGNvbnN0IHVpbnQ4X3QgKilidWZmZXItPmRhdGEoKSwgbik7Ci0gICAgICAgICAgICBidWZmZXItPnJlbGVhc2UoKTsKLSAgICAgICAgICAgIGJ1ZmZlciA9IHRtcDsKLSAgICAgICAgfSBlbHNlIGlmIChtQml0c1BlclNhbXBsZSA9PSAyNCkgewotICAgICAgICAgICAgLy8gQ29udmVydCAyNC1iaXQgc2lnbmVkIHNhbXBsZXMgdG8gMTYtYml0IHNpZ25lZCBpbiBwbGFjZQotICAgICAgICAgICAgY29uc3Qgc2l6ZV90IG51bVNhbXBsZXMgPSBuIC8gMzsKLQotICAgICAgICAgICAgbWVtY3B5X3RvX2kxNl9mcm9tX3AyNCgoaW50MTZfdCAqKWJ1ZmZlci0+ZGF0YSgpLCAoY29uc3QgdWludDhfdCAqKWJ1ZmZlci0+ZGF0YSgpLCBudW1TYW1wbGVzKTsKLSAgICAgICAgICAgIGJ1ZmZlci0+c2V0X3JhbmdlKDAsIDIgKiBudW1TYW1wbGVzKTsKLSAgICAgICAgfSAgZWxzZSBpZiAobUJpdHNQZXJTYW1wbGUgPT0gMzIpIHsKLSAgICAgICAgICAgIC8vIENvbnZlcnQgMzItYml0IHNpZ25lZCBzYW1wbGVzIHRvIDE2LWJpdCBzaWduZWQgaW4gcGxhY2UKLSAgICAgICAgICAgIGNvbnN0IHNpemVfdCBudW1TYW1wbGVzID0gbiAvIDQ7Ci0KLSAgICAgICAgICAgIG1lbWNweV90b19pMTZfZnJvbV9pMzIoKGludDE2X3QgKilidWZmZXItPmRhdGEoKSwgKGNvbnN0IGludDMyX3QgKilidWZmZXItPmRhdGEoKSwgbnVtU2FtcGxlcyk7Ci0gICAgICAgICAgICBidWZmZXItPnNldF9yYW5nZSgwLCAyICogbnVtU2FtcGxlcyk7CisgICAgICAgIGlmIChtT3V0cHV0RmxvYXQpIHsKKyAgICAgICAgICAgIGZsb2F0ICpmZGVzdCA9IChmbG9hdCAqKWJ1ZmZlci0+ZGF0YSgpOworICAgICAgICAgICAgc3dpdGNoIChtQml0c1BlclNhbXBsZSkgeworICAgICAgICAgICAgY2FzZSA4OiB7CisgICAgICAgICAgICAgICAgYnVmZmVyLT5zZXRfcmFuZ2UoMCwgNCAqIG4pOworICAgICAgICAgICAgICAgIG1lbWNweV90b19mbG9hdF9mcm9tX3U4KGZkZXN0LCAoY29uc3QgdWludDhfdCAqKWJ1ZmZlci0+ZGF0YSgpLCBuKTsKKyAgICAgICAgICAgIH0gYnJlYWs7CisgICAgICAgICAgICBjYXNlIDE2OiB7CisgICAgICAgICAgICAgICAgY29uc3Qgc2l6ZV90IG51bVNhbXBsZXMgPSBuIC8gMjsKKyAgICAgICAgICAgICAgICBidWZmZXItPnNldF9yYW5nZSgwLCA0ICogbnVtU2FtcGxlcyk7CisgICAgICAgICAgICAgICAgbWVtY3B5X3RvX2Zsb2F0X2Zyb21faTE2KGZkZXN0LCAoY29uc3QgaW50MTZfdCAqKWJ1ZmZlci0+ZGF0YSgpLCBudW1TYW1wbGVzKTsKKyAgICAgICAgICAgIH0gYnJlYWs7CisgICAgICAgICAgICBjYXNlIDI0OiB7CisgICAgICAgICAgICAgICAgY29uc3Qgc2l6ZV90IG51bVNhbXBsZXMgPSBuIC8gMzsKKyAgICAgICAgICAgICAgICBidWZmZXItPnNldF9yYW5nZSgwLCA0ICogbnVtU2FtcGxlcyk7CisgICAgICAgICAgICAgICAgbWVtY3B5X3RvX2Zsb2F0X2Zyb21fcDI0KGZkZXN0LCAoY29uc3QgdWludDhfdCAqKWJ1ZmZlci0+ZGF0YSgpLCBudW1TYW1wbGVzKTsKKyAgICAgICAgICAgIH0gYnJlYWs7CisgICAgICAgICAgICBjYXNlIDMyOiB7IC8vIGJ1ZmZlciByYW5nZSBpcyBjb3JyZWN0CisgICAgICAgICAgICAgICAgY29uc3Qgc2l6ZV90IG51bVNhbXBsZXMgPSBuIC8gNDsKKyAgICAgICAgICAgICAgICBtZW1jcHlfdG9fZmxvYXRfZnJvbV9pMzIoZmRlc3QsIChjb25zdCBpbnQzMl90ICopYnVmZmVyLT5kYXRhKCksIG51bVNhbXBsZXMpOworICAgICAgICAgICAgfSBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGludDE2X3QgKmlkZXN0ID0gKGludDE2X3QgKilidWZmZXItPmRhdGEoKTsKKyAgICAgICAgICAgIHN3aXRjaCAobUJpdHNQZXJTYW1wbGUpIHsKKyAgICAgICAgICAgIGNhc2UgODogeworICAgICAgICAgICAgICAgIGJ1ZmZlci0+c2V0X3JhbmdlKDAsIDIgKiBuKTsKKyAgICAgICAgICAgICAgICBtZW1jcHlfdG9faTE2X2Zyb21fdTgoaWRlc3QsIChjb25zdCB1aW50OF90ICopYnVmZmVyLT5kYXRhKCksIG4pOworICAgICAgICAgICAgfSBicmVhazsKKyAgICAgICAgICAgIGNhc2UgMTY6CisgICAgICAgICAgICAgICAgYnJlYWs7IC8vIG5vIHRyYW5zbGF0aW9uIG5lZWRlZAorICAgICAgICAgICAgY2FzZSAyNDogeworICAgICAgICAgICAgICAgIGNvbnN0IHNpemVfdCBudW1TYW1wbGVzID0gbiAvIDM7CisgICAgICAgICAgICAgICAgYnVmZmVyLT5zZXRfcmFuZ2UoMCwgMiAqIG51bVNhbXBsZXMpOworICAgICAgICAgICAgICAgIG1lbWNweV90b19pMTZfZnJvbV9wMjQoaWRlc3QsIChjb25zdCB1aW50OF90ICopYnVmZmVyLT5kYXRhKCksIG51bVNhbXBsZXMpOworICAgICAgICAgICAgfSBicmVhazsKKyAgICAgICAgICAgIGNhc2UgMzI6IHsKKyAgICAgICAgICAgICAgICBjb25zdCBzaXplX3QgbnVtU2FtcGxlcyA9IG4gLyA0OworICAgICAgICAgICAgICAgIGJ1ZmZlci0+c2V0X3JhbmdlKDAsIDIgKiBudW1TYW1wbGVzKTsKKyAgICAgICAgICAgICAgICBtZW1jcHlfdG9faTE2X2Zyb21faTMyKGlkZXN0LCAoY29uc3QgaW50MzJfdCAqKWJ1ZmZlci0+ZGF0YSgpLCBudW1TYW1wbGVzKTsKKyAgICAgICAgICAgIH0gYnJlYWs7CisgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICB9IGVsc2UgaWYgKG1XYXZlRm9ybWF0ID09IFdBVkVfRk9STUFUX0lFRUVfRkxPQVQpIHsKLSAgICAgICAgaWYgKG1CaXRzUGVyU2FtcGxlID09IDMyKSB7Ci0gICAgICAgICAgICAvLyBDb252ZXJ0IDMyLWJpdCBmbG9hdCBzYW1wbGVzIHRvIDE2LWJpdCBzaWduZWQgaW4gcGxhY2UKKyAgICAgICAgaWYgKCFtT3V0cHV0RmxvYXQpIHsgLy8gbUJpdHNQZXJTYW1wbGUgPT0gMzIKKyAgICAgICAgICAgIGludDE2X3QgKmlkZXN0ID0gKGludDE2X3QgKilidWZmZXItPmRhdGEoKTsKICAgICAgICAgICAgIGNvbnN0IHNpemVfdCBudW1TYW1wbGVzID0gbiAvIDQ7Ci0KLSAgICAgICAgICAgIG1lbWNweV90b19pMTZfZnJvbV9mbG9hdCgoaW50MTZfdCAqKWJ1ZmZlci0+ZGF0YSgpLCAoY29uc3QgZmxvYXQgKilidWZmZXItPmRhdGEoKSwgbnVtU2FtcGxlcyk7CisgICAgICAgICAgICBtZW1jcHlfdG9faTE2X2Zyb21fZmxvYXQoaWRlc3QsIChjb25zdCBmbG9hdCAqKWJ1ZmZlci0+ZGF0YSgpLCBudW1TYW1wbGVzKTsKICAgICAgICAgICAgIGJ1ZmZlci0+c2V0X3JhbmdlKDAsIDIgKiBudW1TYW1wbGVzKTsKICAgICAgICAgfQorICAgICAgICAvLyBOb3RlOiBpZiBvdXRwdXQgZW5jb2RpbmcgaXMgZmxvYXQsIG5vIG5lZWQgdG8gY29udmVydCBpZiBzb3VyY2UgaXMgZmxvYXQuCiAgICAgfQogCiAgICAgaW50NjRfdCB0aW1lU3RhbXBVcyA9IDA7CkBAIC01NDAsMzIgKzU4MCwzNSBAQAogCiAgICAgKm91dCA9IGJ1ZmZlcjsKIAotICAgIHJldHVybiBPSzsKKyAgICByZXR1cm4gQU1FRElBX09LOwogfQogCiAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLwogCi1zdGF0aWMgTWVkaWFFeHRyYWN0b3IqIENyZWF0ZUV4dHJhY3RvcigKLSAgICAgICAgRGF0YVNvdXJjZUJhc2UgKnNvdXJjZSwKK3N0YXRpYyBDTWVkaWFFeHRyYWN0b3JWMiogQ3JlYXRlRXh0cmFjdG9yKAorICAgICAgICBDRGF0YVNvdXJjZSAqc291cmNlLAogICAgICAgICB2b2lkICopIHsKLSAgICByZXR1cm4gbmV3IFdBVkV4dHJhY3Rvcihzb3VyY2UpOworICAgIHJldHVybiB3cmFwVjIobmV3IFdBVkV4dHJhY3RvcihuZXcgRGF0YVNvdXJjZUhlbHBlcihzb3VyY2UpKSk7CiB9CiAKLXN0YXRpYyBNZWRpYUV4dHJhY3Rvcjo6Q3JlYXRvckZ1bmMgU25pZmYoCi0gICAgICAgIERhdGFTb3VyY2VCYXNlICpzb3VyY2UsCitzdGF0aWMgQ3JlYXRvckZ1bmNWMiBTbmlmZigKKyAgICAgICAgQ0RhdGFTb3VyY2UgKnNvdXJjZSwKICAgICAgICAgZmxvYXQgKmNvbmZpZGVuY2UsCiAgICAgICAgIHZvaWQgKiosCi0gICAgICAgIE1lZGlhRXh0cmFjdG9yOjpGcmVlTWV0YUZ1bmMgKikgeworICAgICAgICBGcmVlTWV0YUZ1bmMgKikgeworICAgIERhdGFTb3VyY2VIZWxwZXIgKmhlbHBlciA9IG5ldyBEYXRhU291cmNlSGVscGVyKHNvdXJjZSk7CiAgICAgY2hhciBoZWFkZXJbMTJdOwotICAgIGlmIChzb3VyY2UtPnJlYWRBdCgwLCBoZWFkZXIsIHNpemVvZihoZWFkZXIpKSA8IChzc2l6ZV90KXNpemVvZihoZWFkZXIpKSB7CisgICAgaWYgKGhlbHBlci0+cmVhZEF0KDAsIGhlYWRlciwgc2l6ZW9mKGhlYWRlcikpIDwgKHNzaXplX3Qpc2l6ZW9mKGhlYWRlcikpIHsKKyAgICAgICAgZGVsZXRlIGhlbHBlcjsKICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgfQogCiAgICAgaWYgKG1lbWNtcChoZWFkZXIsICJSSUZGIiwgNCkgfHwgbWVtY21wKCZoZWFkZXJbOF0sICJXQVZFIiwgNCkpIHsKKyAgICAgICAgZGVsZXRlIGhlbHBlcjsKICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgfQogCi0gICAgTWVkaWFFeHRyYWN0b3IgKmV4dHJhY3RvciA9IG5ldyBXQVZFeHRyYWN0b3Ioc291cmNlKTsKKyAgICBXQVZFeHRyYWN0b3IgKmV4dHJhY3RvciA9IG5ldyBXQVZFeHRyYWN0b3IoaGVscGVyKTsgLy8gZXh0cmFjdG9yIG93bnMgdGhlIGhlbHBlcgogICAgIGludCBudW1UcmFja3MgPSBleHRyYWN0b3ItPmNvdW50VHJhY2tzKCk7CiAgICAgZGVsZXRlIGV4dHJhY3RvcjsKICAgICBpZiAobnVtVHJhY2tzID09IDApIHsKQEAgLTU4MCwxMyArNjIzLDEzIEBACiBleHRlcm4gIkMiIHsKIC8vIFRoaXMgaXMgdGhlIG9ubHkgc3ltYm9sIHRoYXQgbmVlZHMgdG8gYmUgZXhwb3J0ZWQKIF9fYXR0cmlidXRlX18gKCh2aXNpYmlsaXR5ICgiZGVmYXVsdCIpKSkKLU1lZGlhRXh0cmFjdG9yOjpFeHRyYWN0b3JEZWYgR0VURVhUUkFDVE9SREVGKCkgeworRXh0cmFjdG9yRGVmIEdFVEVYVFJBQ1RPUkRFRigpIHsKICAgICByZXR1cm4gewotICAgICAgICBNZWRpYUV4dHJhY3Rvcjo6RVhUUkFDVE9SREVGX1ZFUlNJT04sCisgICAgICAgIEVYVFJBQ1RPUkRFRl9WRVJTSU9OX0NVUlJFTlQsCiAgICAgICAgIFVVSUQoIjdkNjEzODU4LTU4MzctNGEzOC04NGM1LTMzMmQxY2RkZWUyNyIpLAogICAgICAgICAxLCAvLyB2ZXJzaW9uCiAgICAgICAgICJXQVYgRXh0cmFjdG9yIiwKLSAgICAgICAgU25pZmYKKyAgICAgICAgeyAudjIgPSBTbmlmZiB9CiAgICAgfTsKIH0KIApkaWZmIC0tZ2l0IGEvbWVkaWEvZXh0cmFjdG9ycy93YXYvV0FWRXh0cmFjdG9yLmggYi9tZWRpYS9leHRyYWN0b3JzL3dhdi9XQVZFeHRyYWN0b3IuaAppbmRleCA0NjdkMGI3Li5jZTM0ODgxIDEwMDY0NAotLS0gYS9tZWRpYS9leHRyYWN0b3JzL3dhdi9XQVZFeHRyYWN0b3IuaAorKysgYi9tZWRpYS9leHRyYWN0b3JzL3dhdi9XQVZFeHRyYWN0b3IuaApAQCAtMTksMzAgKzE5LDMxIEBACiAjZGVmaW5lIFdBVl9FWFRSQUNUT1JfSF8KIAogI2luY2x1ZGUgPHV0aWxzL0Vycm9ycy5oPgotI2luY2x1ZGUgPG1lZGlhL01lZGlhRXh0cmFjdG9yLmg+Ci0jaW5jbHVkZSA8bWVkaWEvc3RhZ2VmcmlnaHQvTWV0YURhdGFCYXNlLmg+CisjaW5jbHVkZSA8bWVkaWEvTWVkaWFFeHRyYWN0b3JQbHVnaW5BcGkuaD4KKyNpbmNsdWRlIDxtZWRpYS9NZWRpYUV4dHJhY3RvclBsdWdpbkhlbHBlci5oPgorI2luY2x1ZGUgPG1lZGlhL05ka01lZGlhRm9ybWF0Lmg+CiAKIG5hbWVzcGFjZSBhbmRyb2lkIHsKIAogc3RydWN0IEFNZXNzYWdlOwotY2xhc3MgRGF0YVNvdXJjZUJhc2U7CitzdHJ1Y3QgQ0RhdGFTb3VyY2U7CiBjbGFzcyBTdHJpbmc4OwogCi1jbGFzcyBXQVZFeHRyYWN0b3IgOiBwdWJsaWMgTWVkaWFFeHRyYWN0b3IgeworY2xhc3MgV0FWRXh0cmFjdG9yIDogcHVibGljIE1lZGlhRXh0cmFjdG9yUGx1Z2luSGVscGVyVjIgewogcHVibGljOgotICAgIGV4cGxpY2l0IFdBVkV4dHJhY3RvcihEYXRhU291cmNlQmFzZSAqc291cmNlKTsKKyAgICBleHBsaWNpdCBXQVZFeHRyYWN0b3IoRGF0YVNvdXJjZUhlbHBlciAqc291cmNlKTsKIAogICAgIHZpcnR1YWwgc2l6ZV90IGNvdW50VHJhY2tzKCk7Ci0gICAgdmlydHVhbCBNZWRpYVRyYWNrICpnZXRUcmFjayhzaXplX3QgaW5kZXgpOwotICAgIHZpcnR1YWwgc3RhdHVzX3QgZ2V0VHJhY2tNZXRhRGF0YShNZXRhRGF0YUJhc2UmIG1ldGEsIHNpemVfdCBpbmRleCwgdWludDMyX3QgZmxhZ3MpOworICAgIHZpcnR1YWwgTWVkaWFUcmFja0hlbHBlclYyICpnZXRUcmFjayhzaXplX3QgaW5kZXgpOworICAgIHZpcnR1YWwgbWVkaWFfc3RhdHVzX3QgZ2V0VHJhY2tNZXRhRGF0YShBTWVkaWFGb3JtYXQgKm1ldGEsIHNpemVfdCBpbmRleCwgdWludDMyX3QgZmxhZ3MpOwogCi0gICAgdmlydHVhbCBzdGF0dXNfdCBnZXRNZXRhRGF0YShNZXRhRGF0YUJhc2UmIG1ldGEpOworICAgIHZpcnR1YWwgbWVkaWFfc3RhdHVzX3QgZ2V0TWV0YURhdGEoQU1lZGlhRm9ybWF0ICptZXRhKTsKICAgICB2aXJ0dWFsIGNvbnN0IGNoYXIgKiBuYW1lKCkgeyByZXR1cm4gIldBVkV4dHJhY3RvciI7IH0KIAogICAgIHZpcnR1YWwgfldBVkV4dHJhY3RvcigpOwogCiBwcml2YXRlOgotICAgIERhdGFTb3VyY2VCYXNlICptRGF0YVNvdXJjZTsKKyAgICBEYXRhU291cmNlSGVscGVyICptRGF0YVNvdXJjZTsKICAgICBzdGF0dXNfdCBtSW5pdENoZWNrOwogICAgIGJvb2wgbVZhbGlkRm9ybWF0OwogICAgIHVpbnQxNl90IG1XYXZlRm9ybWF0OwpAQCAtNTIsNyArNTMsNyBAQAogICAgIHVpbnQxNl90IG1CaXRzUGVyU2FtcGxlOwogICAgIG9mZjY0X3QgbURhdGFPZmZzZXQ7CiAgICAgc2l6ZV90IG1EYXRhU2l6ZTsKLSAgICBNZXRhRGF0YUJhc2UgbVRyYWNrTWV0YTsKKyAgICBBTWVkaWFGb3JtYXQgKm1UcmFja01ldGE7CiAKICAgICBzdGF0dXNfdCBpbml0KCk7CiAKZGlmZiAtLWdpdCBhL21lZGlhL2ltZ191dGlscy9pbmNsdWRlL2ltZ191dGlscy9EbmdVdGlscy5oIGIvbWVkaWEvaW1nX3V0aWxzL2luY2x1ZGUvaW1nX3V0aWxzL0RuZ1V0aWxzLmgKaW5kZXggZGU4ZjEyMC4uODgxOWY4NyAxMDA2NDQKLS0tIGEvbWVkaWEvaW1nX3V0aWxzL2luY2x1ZGUvaW1nX3V0aWxzL0RuZ1V0aWxzLmgKKysrIGIvbWVkaWEvaW1nX3V0aWxzL2luY2x1ZGUvaW1nX3V0aWxzL0RuZ1V0aWxzLmgKQEAgLTQ5LDYgKzQ5LDcgQEAKICAgICAgICAgICAgIENGQV9SR0dCLAogICAgICAgICAgICAgQ0ZBX0JHR1IsCiAgICAgICAgICAgICBDRkFfR0JSRywKKyAgICAgICAgICAgIENGQV9OT05FLAogICAgICAgICB9OwogCiAgICAgICAgIE9wY29kZUxpc3RCdWlsZGVyKCk7CkBAIC04OSw3ICs5MCw2IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDZmFMYXlvdXQgY2ZhLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZmxvYXQqIGxlbnNTaGFkaW5nTWFwKTsKIAotCiAgICAgICAgIC8qKgogICAgICAgICAgKiBBZGQgYSBHYWluTWFwIG9wY29kZSB3aXRoIHRoZSBnaXZlbiBmaWVsZHMuICBUaGUgbWFwR2FpbnMgYXJyYXkKICAgICAgICAgICogbXVzdCBoYXZlIG1hcFBvaW50c1YgKiBtYXBQb2ludHNIICogbWFwUGxhbmVzIGVsZW1lbnRzLgpAQCAtMTk3LDYgKzE5NywzMyBAQAogCiAgICAgICAgIHN0YXR1c190IGFkZE9wY29kZVByZWFtYmxlKHVpbnQzMl90IG9wY29kZUlkKTsKIAorICAgIHByaXZhdGU6CisgICAgICAgIC8qKgorICAgICAgICAgKiBBZGQgQmF5ZXIgR2Fpbk1hcCBvcGNvZGUocykgZm9yIHRoZSBnaXZlbiBtZXRhZGF0YSBwYXJhbWV0ZXJzLgorICAgICAgICAgKiBDRkEgbGF5b3V0IG11c3QgbWF0Y2ggdGhlIGxheW91dCBvZiB0aGUgc2hhZGluZyBtYXAgcGFzc2VkIGludG8gdGhlCisgICAgICAgICAqIGxlbnNTaGFkaW5nTWFwIHBhcmFtZXRlci4KKyAgICAgICAgICoKKyAgICAgICAgICogUmV0dXJucyBPSyBvbiBzdWNjZXNzLCBvciBhIG5lZ2F0aXZlIGVycm9yIGNvZGUuCisgICAgICAgICAqLworICAgICAgICBzdGF0dXNfdCBhZGRCYXllckdhaW5NYXBzRm9yTWV0YWRhdGEodWludDMyX3QgbHNtV2lkdGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCBsc21IZWlnaHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCBhY3RpdmVBcmVhV2lkdGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCBhY3RpdmVBcmVhSGVpZ2h0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ2ZhTGF5b3V0IGNmYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGZsb2F0KiBsZW5zU2hhZGluZ01hcCk7CisKKyAgICAgICAgLyoqCisgICAgICAgICAqIEFkZCBCYXllciBHYWluTWFwIG9wY29kZShzKSBmb3IgdGhlIGdpdmVuIG1ldGFkYXRhIHBhcmFtZXRlcnMuCisgICAgICAgICAqIENGQSBsYXlvdXQgbXVzdCBtYXRjaCB0aGUgbGF5b3V0IG9mIHRoZSBzaGFkaW5nIG1hcCBwYXNzZWQgaW50byB0aGUKKyAgICAgICAgICogbGVuc1NoYWRpbmdNYXAgcGFyYW1ldGVyLgorICAgICAgICAgKgorICAgICAgICAgKiBSZXR1cm5zIE9LIG9uIHN1Y2Nlc3MsIG9yIGEgbmVnYXRpdmUgZXJyb3IgY29kZS4KKyAgICAgICAgICovCisgICAgICAgIHN0YXR1c190IGFkZE1vbm9jaHJvbWVHYWluTWFwc0Zvck1ldGFkYXRhKHVpbnQzMl90IGxzbVdpZHRoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3QgbHNtSGVpZ2h0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3QgYWN0aXZlQXJlYVdpZHRoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3QgYWN0aXZlQXJlYUhlaWdodCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGZsb2F0KiBsZW5zU2hhZGluZ01hcCk7CiB9OwogCiB9IC8qbmFtZXNwYWNlIGltZ191dGlscyovCmRpZmYgLS1naXQgYS9tZWRpYS9pbWdfdXRpbHMvc3JjL0RuZ1V0aWxzLmNwcCBiL21lZGlhL2ltZ191dGlscy9zcmMvRG5nVXRpbHMuY3BwCmluZGV4IDlhYzdlMmEuLjkzMDRmNTMgMTAwNjQ0Ci0tLSBhL21lZGlhL2ltZ191dGlscy9zcmMvRG5nVXRpbHMuY3BwCisrKyBiL21lZGlhL2ltZ191dGlscy9zcmMvRG5nVXRpbHMuY3BwCkBAIC02MCwzNCArNjAsMzYgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90IGFjdGl2ZUFyZWFSaWdodCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENmYUxheW91dCBjZmEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBmbG9hdCogbGVuc1NoYWRpbmdNYXApIHsKKyAgICBzdGF0dXNfdCBlcnIgPSBPSzsKICAgICB1aW50MzJfdCBhY3RpdmVBcmVhV2lkdGggPSBhY3RpdmVBcmVhUmlnaHQgLSBhY3RpdmVBcmVhTGVmdDsKICAgICB1aW50MzJfdCBhY3RpdmVBcmVhSGVpZ2h0ID0gYWN0aXZlQXJlYUJvdHRvbSAtIGFjdGl2ZUFyZWFUb3A7Ci0gICAgZG91YmxlIHNwYWNpbmdWID0gMS4wIC8gc3RkOjptYXgoMXUsIGxzbUhlaWdodCAtIDEpOwotICAgIGRvdWJsZSBzcGFjaW5nSCA9IDEuMCAvIHN0ZDo6bWF4KDF1LCBsc21XaWR0aCAtIDEpOwogCi0gICAgc3RkOjp2ZWN0b3I8ZmxvYXQ+IHJlZE1hcFZlY3Rvcihsc21XaWR0aCAqIGxzbUhlaWdodCk7Ci0gICAgZmxvYXQgKnJlZE1hcCA9IHJlZE1hcFZlY3Rvci5kYXRhKCk7Ci0KLSAgICBzdGQ6OnZlY3RvcjxmbG9hdD4gZ3JlZW5FdmVuTWFwVmVjdG9yKGxzbVdpZHRoICogbHNtSGVpZ2h0KTsKLSAgICBmbG9hdCAqZ3JlZW5FdmVuTWFwID0gZ3JlZW5FdmVuTWFwVmVjdG9yLmRhdGEoKTsKLQotICAgIHN0ZDo6dmVjdG9yPGZsb2F0PiBncmVlbk9kZE1hcFZlY3Rvcihsc21XaWR0aCAqIGxzbUhlaWdodCk7Ci0gICAgZmxvYXQgKmdyZWVuT2RkTWFwID0gZ3JlZW5PZGRNYXBWZWN0b3IuZGF0YSgpOwotCi0gICAgc3RkOjp2ZWN0b3I8ZmxvYXQ+IGJsdWVNYXBWZWN0b3IobHNtV2lkdGggKiBsc21IZWlnaHQpOwotICAgIGZsb2F0ICpibHVlTWFwID0gYmx1ZU1hcFZlY3Rvci5kYXRhKCk7Ci0KLSAgICBzaXplX3QgbHNtTWFwU2l6ZSA9IGxzbVdpZHRoICogbHNtSGVpZ2h0ICogNDsKLQotICAgIC8vIFNwbGl0IGxlbnMgc2hhZGluZyBtYXAgY2hhbm5lbHMgaW50byBzZXBhcmF0ZSBhcnJheXMKLSAgICBzaXplX3QgaiA9IDA7Ci0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBsc21NYXBTaXplOyBpICs9IDQsICsraikgewotICAgICAgICByZWRNYXBbal0gPSBsZW5zU2hhZGluZ01hcFtpICsgTFNNX1JfSU5EXTsKLSAgICAgICAgZ3JlZW5FdmVuTWFwW2pdID0gbGVuc1NoYWRpbmdNYXBbaSArIExTTV9HRV9JTkRdOwotICAgICAgICBncmVlbk9kZE1hcFtqXSA9IGxlbnNTaGFkaW5nTWFwW2kgKyBMU01fR09fSU5EXTsKLSAgICAgICAgYmx1ZU1hcFtqXSA9IGxlbnNTaGFkaW5nTWFwW2kgKyBMU01fQl9JTkRdOworICAgIHN3aXRjaCAoY2ZhKSB7CisgICAgICAgIGNhc2UgQ0ZBX1JHR0I6CisgICAgICAgIGNhc2UgQ0ZBX0dSQkc6CisgICAgICAgIGNhc2UgQ0ZBX0dCUkc6CisgICAgICAgIGNhc2UgQ0ZBX0JHR1I6CisgICAgICAgICAgICBlcnIgPSBhZGRCYXllckdhaW5NYXBzRm9yTWV0YWRhdGEobHNtV2lkdGgsIGxzbUhlaWdodCwgYWN0aXZlQXJlYVdpZHRoLAorICAgICAgICAgICAgICAgICAgICBhY3RpdmVBcmVhSGVpZ2h0LCBjZmEsIGxlbnNTaGFkaW5nTWFwKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIENGQV9OT05FOgorICAgICAgICAgICAgZXJyID0gYWRkTW9ub2Nocm9tZUdhaW5NYXBzRm9yTWV0YWRhdGEobHNtV2lkdGgsIGxzbUhlaWdodCwgYWN0aXZlQXJlYVdpZHRoLAorICAgICAgICAgICAgICAgICAgICBhY3RpdmVBcmVhSGVpZ2h0LCBsZW5zU2hhZGluZ01hcCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIEFMT0dFKCIlczogVW5rbm93biBDRkEgbGF5b3V0ICVkIiwgX19GVU5DVElPTl9fLCBjZmEpOworICAgICAgICAgICAgZXJyID0gQkFEX1ZBTFVFOworICAgICAgICAgICAgYnJlYWs7CiAgICAgfQorICAgIHJldHVybiBlcnI7Cit9CiAKK3N0YXR1c190IE9wY29kZUxpc3RCdWlsZGVyOjphZGRCYXllckdhaW5NYXBzRm9yTWV0YWRhdGEodWludDMyX3QgbHNtV2lkdGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCBsc21IZWlnaHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCBhY3RpdmVBcmVhV2lkdGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCBhY3RpdmVBcmVhSGVpZ2h0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ2ZhTGF5b3V0IGNmYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGZsb2F0KiBsZW5zU2hhZGluZ01hcCkgewogICAgIHVpbnQzMl90IHJlZFRvcCA9IDA7CiAgICAgdWludDMyX3QgcmVkTGVmdCA9IDA7CiAgICAgdWludDMyX3QgZ3JlZW5FdmVuVG9wID0gMDsKQEAgLTE0Myw2ICsxNDUsMzIgQEAKICAgICAgICAgICAgIHJldHVybiBCQURfVkFMVUU7CiAgICAgfQogCisgICAgc3RkOjp2ZWN0b3I8ZmxvYXQ+IHJlZE1hcFZlY3Rvcihsc21XaWR0aCAqIGxzbUhlaWdodCk7CisgICAgZmxvYXQgKnJlZE1hcCA9IHJlZE1hcFZlY3Rvci5kYXRhKCk7CisKKyAgICBzdGQ6OnZlY3RvcjxmbG9hdD4gZ3JlZW5FdmVuTWFwVmVjdG9yKGxzbVdpZHRoICogbHNtSGVpZ2h0KTsKKyAgICBmbG9hdCAqZ3JlZW5FdmVuTWFwID0gZ3JlZW5FdmVuTWFwVmVjdG9yLmRhdGEoKTsKKworICAgIHN0ZDo6dmVjdG9yPGZsb2F0PiBncmVlbk9kZE1hcFZlY3Rvcihsc21XaWR0aCAqIGxzbUhlaWdodCk7CisgICAgZmxvYXQgKmdyZWVuT2RkTWFwID0gZ3JlZW5PZGRNYXBWZWN0b3IuZGF0YSgpOworCisgICAgc3RkOjp2ZWN0b3I8ZmxvYXQ+IGJsdWVNYXBWZWN0b3IobHNtV2lkdGggKiBsc21IZWlnaHQpOworICAgIGZsb2F0ICpibHVlTWFwID0gYmx1ZU1hcFZlY3Rvci5kYXRhKCk7CisKKyAgICBkb3VibGUgc3BhY2luZ1YgPSAxLjAgLyBzdGQ6Om1heCgxdSwgbHNtSGVpZ2h0IC0gMSk7CisgICAgZG91YmxlIHNwYWNpbmdIID0gMS4wIC8gc3RkOjptYXgoMXUsIGxzbVdpZHRoIC0gMSk7CisKKyAgICBzaXplX3QgbHNtTWFwU2l6ZSA9IGxzbVdpZHRoICogbHNtSGVpZ2h0ICogNDsKKworICAgIC8vIFNwbGl0IGxlbnMgc2hhZGluZyBtYXAgY2hhbm5lbHMgaW50byBzZXBhcmF0ZSBhcnJheXMKKyAgICBzaXplX3QgaiA9IDA7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBsc21NYXBTaXplOyBpICs9IDQsICsraikgeworICAgICAgICByZWRNYXBbal0gPSBsZW5zU2hhZGluZ01hcFtpICsgTFNNX1JfSU5EXTsKKyAgICAgICAgZ3JlZW5FdmVuTWFwW2pdID0gbGVuc1NoYWRpbmdNYXBbaSArIExTTV9HRV9JTkRdOworICAgICAgICBncmVlbk9kZE1hcFtqXSA9IGxlbnNTaGFkaW5nTWFwW2kgKyBMU01fR09fSU5EXTsKKyAgICAgICAgYmx1ZU1hcFtqXSA9IGxlbnNTaGFkaW5nTWFwW2kgKyBMU01fQl9JTkRdOworICAgIH0KKwogICAgIHN0YXR1c190IGVyciA9IGFkZEdhaW5NYXAoLyp0b3AqL3JlZFRvcCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qbGVmdCovcmVkTGVmdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qYm90dG9tKi9hY3RpdmVBcmVhSGVpZ2h0IC0gMSwKQEAgLTIxNiw2ICsyNDQsNDYgQEAKICAgICByZXR1cm4gZXJyOwogfQogCitzdGF0dXNfdCBPcGNvZGVMaXN0QnVpbGRlcjo6YWRkTW9ub2Nocm9tZUdhaW5NYXBzRm9yTWV0YWRhdGEodWludDMyX3QgbHNtV2lkdGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCBsc21IZWlnaHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCBhY3RpdmVBcmVhV2lkdGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCBhY3RpdmVBcmVhSGVpZ2h0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZmxvYXQqIGxlbnNTaGFkaW5nTWFwKSB7CisgICAgc3RkOjp2ZWN0b3I8ZmxvYXQ+IG1hcFZlY3Rvcihsc21XaWR0aCAqIGxzbUhlaWdodCk7CisgICAgZmxvYXQgKm1hcCA9IG1hcFZlY3Rvci5kYXRhKCk7CisKKyAgICBkb3VibGUgc3BhY2luZ1YgPSAxLjAgLyBzdGQ6Om1heCgxdSwgbHNtSGVpZ2h0IC0gMSk7CisgICAgZG91YmxlIHNwYWNpbmdIID0gMS4wIC8gc3RkOjptYXgoMXUsIGxzbVdpZHRoIC0gMSk7CisKKyAgICBzaXplX3QgbHNtTWFwU2l6ZSA9IGxzbVdpZHRoICogbHNtSGVpZ2h0ICogNDsKKworICAgIC8vIFNwbGl0IGxlbnMgc2hhZGluZyBtYXAgY2hhbm5lbHMgaW50byBzZXBhcmF0ZSBhcnJheXMKKyAgICBzaXplX3QgaiA9IDA7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBsc21NYXBTaXplOyBpICs9IDQsICsraikgeworICAgICAgICBtYXBbal0gPSBsZW5zU2hhZGluZ01hcFtpXTsKKyAgICB9CisKKyAgICBzdGF0dXNfdCBlcnIgPSBhZGRHYWluTWFwKC8qdG9wKi8wLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLypsZWZ0Ki8wLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLypib3R0b20qL2FjdGl2ZUFyZWFIZWlnaHQgLSAxLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLypyaWdodCovYWN0aXZlQXJlYVdpZHRoIC0gMSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qcGxhbmUqLzAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKnBsYW5lcyovMSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qcm93UGl0Y2gqLzEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKmNvbFBpdGNoKi8xLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyptYXBQb2ludHNWKi9sc21IZWlnaHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKm1hcFBvaW50c0gqL2xzbVdpZHRoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyptYXBTcGFjaW5nViovc3BhY2luZ1YsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKm1hcFNwYWNpbmdIKi9zcGFjaW5nSCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qbWFwT3JpZ2luViovMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qbWFwT3JpZ2luSCovMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qbWFwUGxhbmVzKi8xLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyptYXBHYWlucyovbWFwKTsKKyAgICBpZiAoZXJyICE9IE9LKSByZXR1cm4gZXJyOworCisgICAgcmV0dXJuIGVycjsKK30KKwogc3RhdHVzX3QgT3Bjb2RlTGlzdEJ1aWxkZXI6OmFkZEdhaW5NYXAodWludDMyX3QgdG9wLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3QgbGVmdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90IGJvdHRvbSwKZGlmZiAtLWdpdCBhL21lZGlhL2xpYmFhdWRpby9leGFtcGxlcy9pbnB1dF9tb25pdG9yL2puaS9BbmRyb2lkLm1rIGIvbWVkaWEvbGliYWF1ZGlvL2V4YW1wbGVzL2lucHV0X21vbml0b3Ivam5pL0FuZHJvaWQubWsKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGEwYjk4MWMuLjAwMDAwMDAKLS0tIGEvbWVkaWEvbGliYWF1ZGlvL2V4YW1wbGVzL2lucHV0X21vbml0b3Ivam5pL0FuZHJvaWQubWsKKysrIC9kZXYvbnVsbApAQCAtMSwzNSArMCwwIEBACi1MT0NBTF9QQVRIIDo9ICQoY2FsbCBteS1kaXIpCi0KLWluY2x1ZGUgJChDTEVBUl9WQVJTKQotTE9DQUxfTU9EVUxFX1RBR1MgOj0gdGVzdHMKLUxPQ0FMX0NfSU5DTFVERVMgOj0gXAotICAgICQoY2FsbCBpbmNsdWRlLXBhdGgtZm9yLCBhdWRpby11dGlscykgXAotICAgIGZyYW1ld29ya3MvYXYvbWVkaWEvbGliYWF1ZGlvL2luY2x1ZGUgXAotICAgIGZyYW1ld29ya3MvYXYvbWVkaWEvbGliYWF1ZGlvL3NyYyBcCi0gICAgZnJhbWV3b3Jrcy9hdi9tZWRpYS9saWJhYXVkaW8vZXhhbXBsZXMvdXRpbHMKLQotIyBOREsgcmVjb21tZW5kcyB1c2luZyB0aGlzIGtpbmQgb2YgcmVsYXRpdmUgcGF0aCBpbnN0ZWFkIG9mIGFuIGFic29sdXRlIHBhdGguCi1MT0NBTF9TUkNfRklMRVM6PSAuLi9zcmMvaW5wdXRfbW9uaXRvci5jcHAKLUxPQ0FMX0NGTEFHUyA6PSAtV2FsbCAtV2Vycm9yCi1MT0NBTF9TSEFSRURfTElCUkFSSUVTIDo9IGxpYmFhdWRpbwotTE9DQUxfTU9EVUxFIDo9IGlucHV0X21vbml0b3IKLWluY2x1ZGUgJChCVUlMRF9FWEVDVVRBQkxFKQotCi1pbmNsdWRlICQoQ0xFQVJfVkFSUykKLUxPQ0FMX01PRFVMRV9UQUdTIDo9IHRlc3RzCi1MT0NBTF9DX0lOQ0xVREVTIDo9IFwKLSAgICAkKGNhbGwgaW5jbHVkZS1wYXRoLWZvciwgYXVkaW8tdXRpbHMpIFwKLSAgICBmcmFtZXdvcmtzL2F2L21lZGlhL2xpYmFhdWRpby9pbmNsdWRlIFwKLSAgICBmcmFtZXdvcmtzL2F2L21lZGlhL2xpYmFhdWRpby9leGFtcGxlcy91dGlscwotCi1MT0NBTF9TUkNfRklMRVM6PSAuLi9zcmMvaW5wdXRfbW9uaXRvcl9jYWxsYmFjay5jcHAKLUxPQ0FMX0NGTEFHUyA6PSAtV2FsbCAtV2Vycm9yCi1MT0NBTF9TSEFSRURfTElCUkFSSUVTIDo9IGxpYmFhdWRpbwotTE9DQUxfTU9EVUxFIDo9IGlucHV0X21vbml0b3JfY2FsbGJhY2sKLWluY2x1ZGUgJChCVUlMRF9FWEVDVVRBQkxFKQotCi1pbmNsdWRlICQoQ0xFQVJfVkFSUykKLUxPQ0FMX01PRFVMRSA6PSBsaWJhYXVkaW9fcHJlYnVpbHQKLUxPQ0FMX1NSQ19GSUxFUyA6PSBsaWJhYXVkaW8uc28KLUxPQ0FMX0VYUE9SVF9DX0lOQ0xVREVTIDo9ICQoTE9DQUxfUEFUSCkvaW5jbHVkZQotaW5jbHVkZSAkKFBSRUJVSUxUX1NIQVJFRF9MSUJSQVJZKQpkaWZmIC0tZ2l0IGEvbWVkaWEvbGliYWF1ZGlvL2V4YW1wbGVzL2lucHV0X21vbml0b3Ivam5pL0FwcGxpY2F0aW9uLm1rIGIvbWVkaWEvbGliYWF1ZGlvL2V4YW1wbGVzL2lucHV0X21vbml0b3Ivam5pL0FwcGxpY2F0aW9uLm1rCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlNzQ0NzVjLi4wMDAwMDAwCi0tLSBhL21lZGlhL2xpYmFhdWRpby9leGFtcGxlcy9pbnB1dF9tb25pdG9yL2puaS9BcHBsaWNhdGlvbi5taworKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotIyBUT0RPIHJlbW92ZSB0aGVuIHdoZW4gd2Ugc3VwcG9ydCBvdGhlciBhcmNoaXRlY3R1cmVzCi1BUFBfQUJJIDo9IGFybTY0LXY4YQotQVBQX0NQUEZMQUdTICs9IC1zdGQ9YysrMTEKZGlmZiAtLWdpdCBhL21lZGlhL2xpYmFhdWRpby9leGFtcGxlcy9sb29wYmFjay9qbmkvQW5kcm9pZC5tayBiL21lZGlhL2xpYmFhdWRpby9leGFtcGxlcy9sb29wYmFjay9qbmkvQW5kcm9pZC5tawpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYWViZTg3Ny4uMDAwMDAwMAotLS0gYS9tZWRpYS9saWJhYXVkaW8vZXhhbXBsZXMvbG9vcGJhY2svam5pL0FuZHJvaWQubWsKKysrIC9kZXYvbnVsbApAQCAtMSwxNiArMCwwIEBACi1MT0NBTF9QQVRIIDo9ICQoY2FsbCBteS1kaXIpCi0KLWluY2x1ZGUgJChDTEVBUl9WQVJTKQotTE9DQUxfTU9EVUxFX1RBR1MgOj0gdGVzdHMKLUxPQ0FMX0NfSU5DTFVERVMgOj0gXAotICAgICQoY2FsbCBpbmNsdWRlLXBhdGgtZm9yLCBhdWRpby11dGlscykgXAotICAgIGZyYW1ld29ya3MvYXYvbWVkaWEvbGliYWF1ZGlvL2luY2x1ZGUgXAotICAgIGZyYW1ld29ya3MvYXYvbWVkaWEvbGliYWF1ZGlvL2V4YW1wbGVzL3V0aWxzCi0KLSMgTkRLIHJlY29tbWVuZHMgdXNpbmcgdGhpcyBraW5kIG9mIHJlbGF0aXZlIHBhdGggaW5zdGVhZCBvZiBhbiBhYnNvbHV0ZSBwYXRoLgotTE9DQUxfU1JDX0ZJTEVTOj0gLi4vc3JjL2xvb3BiYWNrLmNwcAotTE9DQUxfQ0ZMQUdTIDo9IC1XYWxsIC1XZXJyb3IKLUxPQ0FMX1NUQVRJQ19MSUJSQVJJRVMgOj0gbGlic25kZmlsZQotTE9DQUxfU0hBUkVEX0xJQlJBUklFUyA6PSBsaWJhYXVkaW8gbGliYXVkaW91dGlscwotTE9DQUxfTU9EVUxFIDo9IGFhdWRpb19sb29wYmFjawotaW5jbHVkZSAkKEJVSUxEX0VYRUNVVEFCTEUpCmRpZmYgLS1naXQgYS9tZWRpYS9saWJhYXVkaW8vZXhhbXBsZXMvbG9vcGJhY2svam5pL0FwcGxpY2F0aW9uLm1rIGIvbWVkaWEvbGliYWF1ZGlvL2V4YW1wbGVzL2xvb3BiYWNrL2puaS9BcHBsaWNhdGlvbi5tawpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYmE0NGYzNy4uMDAwMDAwMAotLS0gYS9tZWRpYS9saWJhYXVkaW8vZXhhbXBsZXMvbG9vcGJhY2svam5pL0FwcGxpY2F0aW9uLm1rCisrKyAvZGV2L251bGwKQEAgLTEgKzAsMCBAQAotQVBQX0NQUEZMQUdTICs9IC1zdGQ9YysrMTEKZGlmZiAtLWdpdCBhL21lZGlhL2xpYmFhdWRpby9leGFtcGxlcy91dGlscy9BQXVkaW9BcmdzUGFyc2VyLmggYi9tZWRpYS9saWJhYXVkaW8vZXhhbXBsZXMvdXRpbHMvQUF1ZGlvQXJnc1BhcnNlci5oCmluZGV4IGEyYjkxNzcuLmE1ZGM1NWYgMTAwNjQ0Ci0tLSBhL21lZGlhL2xpYmFhdWRpby9leGFtcGxlcy91dGlscy9BQXVkaW9BcmdzUGFyc2VyLmgKKysrIGIvbWVkaWEvbGliYWF1ZGlvL2V4YW1wbGVzL3V0aWxzL0FBdWRpb0FyZ3NQYXJzZXIuaApAQCAtMjgzLDcgKzI4Myw3IEBACiAgICAgICAgICAgICAgICAgICAgIGlmIChzdHJsZW4oYXJnKSA+IDIpIHsKICAgICAgICAgICAgICAgICAgICAgICAgIHBvbGljeSA9IGF0b2koJmFyZ1syXSk7CiAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgaWYgKCFBQXVkaW9fc2V0TU1hcFBvbGljeShwb2xpY3kpKSB7CisgICAgICAgICAgICAgICAgICAgIGlmIChBQXVkaW9fc2V0TU1hcFBvbGljeShwb2xpY3kpICE9IEFBVURJT19PSykgewogICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnRmKCJFUlJPUjogaW52YWxpZCBNTUFQIHBvbGljeSBtb2RlICVpXG4iLCBwb2xpY3kpOwogICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgfSBicmVhazsKZGlmZiAtLWdpdCBhL21lZGlhL2xpYmFhdWRpby9leGFtcGxlcy93cml0ZV9zaW5lL2puaS9BbmRyb2lkLm1rIGIvbWVkaWEvbGliYWF1ZGlvL2V4YW1wbGVzL3dyaXRlX3NpbmUvam5pL0FuZHJvaWQubWsKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDFhMWJkNDMuLjAwMDAwMDAKLS0tIGEvbWVkaWEvbGliYWF1ZGlvL2V4YW1wbGVzL3dyaXRlX3NpbmUvam5pL0FuZHJvaWQubWsKKysrIC9kZXYvbnVsbApAQCAtMSwzNSArMCwwIEBACi1MT0NBTF9QQVRIIDo9ICQoY2FsbCBteS1kaXIpCi0KLWluY2x1ZGUgJChDTEVBUl9WQVJTKQotTE9DQUxfTU9EVUxFX1RBR1MgOj0gdGVzdHMKLUxPQ0FMX0NfSU5DTFVERVMgOj0gXAotICAgICQoY2FsbCBpbmNsdWRlLXBhdGgtZm9yLCBhdWRpby11dGlscykgXAotICAgIGZyYW1ld29ya3MvYXYvbWVkaWEvbGliYWF1ZGlvL2luY2x1ZGUgXAotICAgIGZyYW1ld29ya3MvYXYvbWVkaWEvbGliYWF1ZGlvL3NyYyBcCi0gICAgZnJhbWV3b3Jrcy9hdi9tZWRpYS9saWJhYXVkaW8vZXhhbXBsZXMvdXRpbHMKLQotIyBOREsgcmVjb21tZW5kcyB1c2luZyB0aGlzIGtpbmQgb2YgcmVsYXRpdmUgcGF0aCBpbnN0ZWFkIG9mIGFuIGFic29sdXRlIHBhdGguCi1MT0NBTF9TUkNfRklMRVM6PSAuLi9zcmMvd3JpdGVfc2luZS5jcHAKLUxPQ0FMX0NGTEFHUyA6PSAtV2FsbCAtV2Vycm9yCi1MT0NBTF9TSEFSRURfTElCUkFSSUVTIDo9IGxpYmFhdWRpbwotTE9DQUxfTU9EVUxFIDo9IHdyaXRlX3NpbmUKLWluY2x1ZGUgJChCVUlMRF9FWEVDVVRBQkxFKQotCi1pbmNsdWRlICQoQ0xFQVJfVkFSUykKLUxPQ0FMX01PRFVMRV9UQUdTIDo9IHRlc3RzCi1MT0NBTF9DX0lOQ0xVREVTIDo9IFwKLSAgICAkKGNhbGwgaW5jbHVkZS1wYXRoLWZvciwgYXVkaW8tdXRpbHMpIFwKLSAgICBmcmFtZXdvcmtzL2F2L21lZGlhL2xpYmFhdWRpby9pbmNsdWRlIFwKLSAgICBmcmFtZXdvcmtzL2F2L21lZGlhL2xpYmFhdWRpby9leGFtcGxlcy91dGlscwotCi1MT0NBTF9TUkNfRklMRVM6PSAuLi9zcmMvd3JpdGVfc2luZV9jYWxsYmFjay5jcHAKLUxPQ0FMX0NGTEFHUyA6PSAtV2FsbCAtV2Vycm9yCi1MT0NBTF9TSEFSRURfTElCUkFSSUVTIDo9IGxpYmFhdWRpbwotTE9DQUxfTU9EVUxFIDo9IHdyaXRlX3NpbmVfY2FsbGJhY2sKLWluY2x1ZGUgJChCVUlMRF9FWEVDVVRBQkxFKQotCi1pbmNsdWRlICQoQ0xFQVJfVkFSUykKLUxPQ0FMX01PRFVMRSA6PSBsaWJhYXVkaW9fcHJlYnVpbHQKLUxPQ0FMX1NSQ19GSUxFUyA6PSBsaWJhYXVkaW8uc28KLUxPQ0FMX0VYUE9SVF9DX0lOQ0xVREVTIDo9ICQoTE9DQUxfUEFUSCkvaW5jbHVkZQotaW5jbHVkZSAkKFBSRUJVSUxUX1NIQVJFRF9MSUJSQVJZKQpkaWZmIC0tZ2l0IGEvbWVkaWEvbGliYWF1ZGlvL2V4YW1wbGVzL3dyaXRlX3NpbmUvam5pL0FwcGxpY2F0aW9uLm1rIGIvbWVkaWEvbGliYWF1ZGlvL2V4YW1wbGVzL3dyaXRlX3NpbmUvam5pL0FwcGxpY2F0aW9uLm1rCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiYTQ0ZjM3Li4wMDAwMDAwCi0tLSBhL21lZGlhL2xpYmFhdWRpby9leGFtcGxlcy93cml0ZV9zaW5lL2puaS9BcHBsaWNhdGlvbi5taworKysgL2Rldi9udWxsCkBAIC0xICswLDAgQEAKLUFQUF9DUFBGTEFHUyArPSAtc3RkPWMrKzExCmRpZmYgLS1naXQgYS9tZWRpYS9saWJhYXVkaW8vc3JjL0FuZHJvaWQuYnAgYi9tZWRpYS9saWJhYXVkaW8vc3JjL0FuZHJvaWQuYnAKaW5kZXggYjllMjhhMC4uNDA5MDI4NiAxMDA2NDQKLS0tIGEvbWVkaWEvbGliYWF1ZGlvL3NyYy9BbmRyb2lkLmJwCisrKyBiL21lZGlhL2xpYmFhdWRpby9zcmMvQW5kcm9pZC5icApAQCAtNiw2ICs2LDcgQEAKICAgICAgICAgImNsaWVudCIsCiAgICAgICAgICJjb3JlIiwKICAgICAgICAgImZpZm8iLAorICAgICAgICAiZmxvd2dyYXBoIiwKICAgICAgICAgImxlZ2FjeSIsCiAgICAgICAgICJ1dGlsaXR5IiwKICAgICBdLApAQCAtMjUsOSArMjYsOSBAQAogICAgICAgICAidXRpbGl0eS9GaXhlZEJsb2NrQWRhcHRlci5jcHAiLAogICAgICAgICAidXRpbGl0eS9GaXhlZEJsb2NrUmVhZGVyLmNwcCIsCiAgICAgICAgICJ1dGlsaXR5L0ZpeGVkQmxvY2tXcml0ZXIuY3BwIiwKLSAgICAgICAgInV0aWxpdHkvTGluZWFyUmFtcC5jcHAiLAogICAgICAgICAiZmlmby9GaWZvQnVmZmVyLmNwcCIsCiAgICAgICAgICJmaWZvL0ZpZm9Db250cm9sbGVyQmFzZS5jcHAiLAorICAgICAgICAiY2xpZW50L0FBdWRpb0Zsb3dHcmFwaC5jcHAiLAogICAgICAgICAiY2xpZW50L0F1ZGlvRW5kcG9pbnQuY3BwIiwKICAgICAgICAgImNsaWVudC9BdWRpb1N0cmVhbUludGVybmFsLmNwcCIsCiAgICAgICAgICJjbGllbnQvQXVkaW9TdHJlYW1JbnRlcm5hbENhcHR1cmUuY3BwIiwKQEAgLTQyLDYgKzQzLDE2IEBACiAgICAgICAgICJiaW5kaW5nL1JpbmdCdWZmZXJQYXJjZWxhYmxlLmNwcCIsCiAgICAgICAgICJiaW5kaW5nL1NoYXJlZE1lbW9yeVBhcmNlbGFibGUuY3BwIiwKICAgICAgICAgImJpbmRpbmcvU2hhcmVkUmVnaW9uUGFyY2VsYWJsZS5jcHAiLAorICAgICAgICAiZmxvd2dyYXBoL0F1ZGlvUHJvY2Vzc29yQmFzZS5jcHAiLAorICAgICAgICAiZmxvd2dyYXBoL0NsaXBUb1JhbmdlLmNwcCIsCisgICAgICAgICJmbG93Z3JhcGgvTW9ub1RvTXVsdGlDb252ZXJ0ZXIuY3BwIiwKKyAgICAgICAgImZsb3dncmFwaC9SYW1wTGluZWFyLmNwcCIsCisgICAgICAgICJmbG93Z3JhcGgvU2lua0Zsb2F0LmNwcCIsCisgICAgICAgICJmbG93Z3JhcGgvU2lua0kxNi5jcHAiLAorICAgICAgICAiZmxvd2dyYXBoL1NpbmtJMjQuY3BwIiwKKyAgICAgICAgImZsb3dncmFwaC9Tb3VyY2VGbG9hdC5jcHAiLAorICAgICAgICAiZmxvd2dyYXBoL1NvdXJjZUkxNi5jcHAiLAorICAgICAgICAiZmxvd2dyYXBoL1NvdXJjZUkyNC5jcHAiLAogICAgIF0sCiAKICAgICBjZmxhZ3M6IFsKZGlmZiAtLWdpdCBhL21lZGlhL2xpYmFhdWRpby9zcmMvYmluZGluZy9BQXVkaW9TdHJlYW1Db25maWd1cmF0aW9uLmNwcCBiL21lZGlhL2xpYmFhdWRpby9zcmMvYmluZGluZy9BQXVkaW9TdHJlYW1Db25maWd1cmF0aW9uLmNwcAppbmRleCA5NTlkYjYxLi4zZDFiYzliIDEwMDY0NAotLS0gYS9tZWRpYS9saWJhYXVkaW8vc3JjL2JpbmRpbmcvQUF1ZGlvU3RyZWFtQ29uZmlndXJhdGlvbi5jcHAKKysrIGIvbWVkaWEvbGliYWF1ZGlvL3NyYy9iaW5kaW5nL0FBdWRpb1N0cmVhbUNvbmZpZ3VyYXRpb24uY3BwCkBAIC0xNCw2ICsxNCwxMCBAQAogICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCiAgKi8KIAorI2RlZmluZSBMT0dfVEFHICJBQXVkaW9TdHJlYW1Db25maWd1cmF0aW9uIgorLy8jZGVmaW5lIExPR19OREVCVUcgMAorI2luY2x1ZGUgPHV0aWxzL0xvZy5oPgorCiAjaW5jbHVkZSA8c3RkaW50Lmg+CiAKICNpbmNsdWRlIDxzeXMvbW1hbi5oPgpAQCAtMzYsNiArNDAsNyBAQAogCiBzdGF0dXNfdCBBQXVkaW9TdHJlYW1Db25maWd1cmF0aW9uOjp3cml0ZVRvUGFyY2VsKFBhcmNlbCogcGFyY2VsKSBjb25zdCB7CiAgICAgc3RhdHVzX3Qgc3RhdHVzOworCiAgICAgc3RhdHVzID0gcGFyY2VsLT53cml0ZUludDMyKGdldERldmljZUlkKCkpOwogICAgIGlmIChzdGF0dXMgIT0gTk9fRVJST1IpIGdvdG8gZXJyb3I7CiAgICAgc3RhdHVzID0gcGFyY2VsLT53cml0ZUludDMyKGdldFNhbXBsZVJhdGUoKSk7CkBAIC00Niw2ICs1MSw3IEBACiAgICAgaWYgKHN0YXR1cyAhPSBOT19FUlJPUikgZ290byBlcnJvcjsKICAgICBzdGF0dXMgPSBwYXJjZWwtPndyaXRlSW50MzIoKGludDMyX3QpIGdldEZvcm1hdCgpKTsKICAgICBpZiAoc3RhdHVzICE9IE5PX0VSUk9SKSBnb3RvIGVycm9yOworCiAgICAgc3RhdHVzID0gcGFyY2VsLT53cml0ZUludDMyKChpbnQzMl90KSBnZXREaXJlY3Rpb24oKSk7CiAgICAgaWYgKHN0YXR1cyAhPSBOT19FUlJPUikgZ290byBlcnJvcjsKICAgICBzdGF0dXMgPSBwYXJjZWwtPndyaXRlSW50MzIoZ2V0QnVmZmVyQ2FwYWNpdHkoKSk7CkBAIC02MCw3ICs2Niw3IEBACiAgICAgaWYgKHN0YXR1cyAhPSBOT19FUlJPUikgZ290byBlcnJvcjsKICAgICByZXR1cm4gTk9fRVJST1I7CiBlcnJvcjoKLSAgICBBTE9HRSgiQUF1ZGlvU3RyZWFtQ29uZmlndXJhdGlvbi53cml0ZVRvUGFyY2VsKCk6IHdyaXRlIGZhaWxlZCA9ICVkIiwgc3RhdHVzKTsKKyAgICBBTE9HRSgiJXMoKTogd3JpdGUgZmFpbGVkID0gJWQiLCBfX2Z1bmNfXywgc3RhdHVzKTsKICAgICByZXR1cm4gc3RhdHVzOwogfQogCkBAIC04MCw3ICs4Niw4IEBACiAgICAgc2V0U2hhcmluZ01vZGUoKGFhdWRpb19zaGFyaW5nX21vZGVfdCkgdmFsdWUpOwogICAgIHN0YXR1cyA9IHBhcmNlbC0+cmVhZEludDMyKCZ2YWx1ZSk7CiAgICAgaWYgKHN0YXR1cyAhPSBOT19FUlJPUikgZ290byBlcnJvcjsKLSAgICBzZXRGb3JtYXQoKGFhdWRpb19mb3JtYXRfdCkgdmFsdWUpOworICAgIHNldEZvcm1hdCgoYXVkaW9fZm9ybWF0X3QpIHZhbHVlKTsKKwogICAgIHN0YXR1cyA9IHBhcmNlbC0+cmVhZEludDMyKCZ2YWx1ZSk7CiAgICAgaWYgKHN0YXR1cyAhPSBOT19FUlJPUikgZ290byBlcnJvcjsKICAgICBzZXREaXJlY3Rpb24oKGFhdWRpb19kaXJlY3Rpb25fdCkgdmFsdWUpOwpAQCAtOTksOCArMTA2LDkgQEAKICAgICBzdGF0dXMgPSBwYXJjZWwtPnJlYWRJbnQzMigmdmFsdWUpOwogICAgIGlmIChzdGF0dXMgIT0gTk9fRVJST1IpIGdvdG8gZXJyb3I7CiAgICAgc2V0U2Vzc2lvbklkKHZhbHVlKTsKKwogICAgIHJldHVybiBOT19FUlJPUjsKIGVycm9yOgotICAgIEFMT0dFKCJBQXVkaW9TdHJlYW1Db25maWd1cmF0aW9uLnJlYWRGcm9tUGFyY2VsKCk6IHJlYWQgZmFpbGVkID0gJWQiLCBzdGF0dXMpOworICAgIEFMT0dFKCIlcygpOiByZWFkIGZhaWxlZCA9ICVkIiwgX19mdW5jX18sIHN0YXR1cyk7CiAgICAgcmV0dXJuIHN0YXR1czsKIH0KZGlmZiAtLWdpdCBhL21lZGlhL2xpYmFhdWRpby9zcmMvYmluZGluZy9TaGFyZWRNZW1vcnlQYXJjZWxhYmxlLmNwcCBiL21lZGlhL2xpYmFhdWRpby9zcmMvYmluZGluZy9TaGFyZWRNZW1vcnlQYXJjZWxhYmxlLmNwcAppbmRleCAwYjBjZjc3Li42Nzk1NWU4IDEwMDY0NAotLS0gYS9tZWRpYS9saWJhYXVkaW8vc3JjL2JpbmRpbmcvU2hhcmVkTWVtb3J5UGFyY2VsYWJsZS5jcHAKKysrIGIvbWVkaWEvbGliYWF1ZGlvL3NyYy9iaW5kaW5nL1NoYXJlZE1lbW9yeVBhcmNlbGFibGUuY3BwCkBAIC00Myw3ICs0Myw3IEBACiAKIHZvaWQgU2hhcmVkTWVtb3J5UGFyY2VsYWJsZTo6c2V0dXAoY29uc3QgdW5pcXVlX2ZkJiBmZCwgaW50MzJfdCBzaXplSW5CeXRlcykgewogICAgIG1GZC5yZXNldChkdXAoZmQuZ2V0KCkpKTsgLy8gc3RvcmUgYSBkdXBsaWNhdGUgZmQKLSAgICBBTE9HVigic2V0dXAoJWQgLT4gJWQsICVkKSB0aGlzID0gJXBcbiIsIGZkLmdldCgpLCBtRmQuZ2V0KCksIHNpemVJbkJ5dGVzLCB0aGlzKTsKKyAgICBBTE9HVigic2V0dXAoZmQgPSAlZCAtPiAlZCwgc2l6ZSA9ICVkKSB0aGlzID0gJXBcbiIsIGZkLmdldCgpLCBtRmQuZ2V0KCksIHNpemVJbkJ5dGVzLCB0aGlzKTsKICAgICBtU2l6ZUluQnl0ZXMgPSBzaXplSW5CeXRlczsKIH0KIApAQCAtMTA0LDcgKzEwNCw4IEBACiAgICAgbVJlc29sdmVkQWRkcmVzcyA9ICh1aW50OF90ICopIG1tYXAoMCwgbVNpemVJbkJ5dGVzLCBQUk9UX1JFQUQgfCBQUk9UX1dSSVRFLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1BUF9TSEFSRUQsIGZkLmdldCgpLCAwKTsKICAgICBpZiAobVJlc29sdmVkQWRkcmVzcyA9PSBNTUFQX1VOUkVTT0xWRURfQUREUkVTUykgewotICAgICAgICBBTE9HRSgibW1hcCgpIGZhaWxlZCBmb3IgZmQgPSAlZCwgZXJybm8gPSAlcyIsIGZkLmdldCgpLCBzdHJlcnJvcihlcnJubykpOworICAgICAgICBBTE9HRSgibW1hcCgpIGZhaWxlZCBmb3IgZmQgPSAlZCwgbkJ5dGVzID0gJWQsIGVycm5vID0gJXMiLAorICAgICAgICAgICAgICBmZC5nZXQoKSwgbVNpemVJbkJ5dGVzLCBzdHJlcnJvcihlcnJubykpOwogICAgICAgICByZXR1cm4gQUFVRElPX0VSUk9SX0lOVEVSTkFMOwogICAgIH0KICAgICByZXR1cm4gQUFVRElPX09LOwpkaWZmIC0tZ2l0IGEvbWVkaWEvbGliYWF1ZGlvL3NyYy9iaW5kaW5nL1NoYXJlZE1lbW9yeVBhcmNlbGFibGUuaCBiL21lZGlhL2xpYmFhdWRpby9zcmMvYmluZGluZy9TaGFyZWRNZW1vcnlQYXJjZWxhYmxlLmgKaW5kZXggODJjMjI0MC4uNGVjMzhjNSAxMDA2NDQKLS0tIGEvbWVkaWEvbGliYWF1ZGlvL3NyYy9iaW5kaW5nL1NoYXJlZE1lbW9yeVBhcmNlbGFibGUuaAorKysgYi9tZWRpYS9saWJhYXVkaW8vc3JjL2JpbmRpbmcvU2hhcmVkTWVtb3J5UGFyY2VsYWJsZS5oCkBAIC03MCw4ICs3MCw4IEBACiAgICAgYWF1ZGlvX3Jlc3VsdF90IHJlc29sdmVTaGFyZWRNZW1vcnkoY29uc3QgYW5kcm9pZDo6YmFzZTo6dW5pcXVlX2ZkJiBmZCk7CiAKICAgICBhbmRyb2lkOjpiYXNlOjp1bmlxdWVfZmQgICBtRmQ7Ci0gICAgaW50MzJfdCAgICAgbVNpemVJbkJ5dGVzID0gMDsKLSAgICB1aW50OF90ICAgICptUmVzb2x2ZWRBZGRyZXNzID0gTU1BUF9VTlJFU09MVkVEX0FERFJFU1M7CisgICAgaW50MzJfdCAgICAgICAgICAgICAgICAgICAgbVNpemVJbkJ5dGVzID0gMDsKKyAgICB1aW50OF90ICAgICAgICAgICAgICAgICAgICptUmVzb2x2ZWRBZGRyZXNzID0gTU1BUF9VTlJFU09MVkVEX0FERFJFU1M7CiAKIHByaXZhdGU6CiAKZGlmZiAtLWdpdCBhL21lZGlhL2xpYmFhdWRpby9zcmMvY2xpZW50L0FBdWRpb0Zsb3dHcmFwaC5jcHAgYi9tZWRpYS9saWJhYXVkaW8vc3JjL2NsaWVudC9BQXVkaW9GbG93R3JhcGguY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNlNDNjNmIKLS0tIC9kZXYvbnVsbAorKysgYi9tZWRpYS9saWJhYXVkaW8vc3JjL2NsaWVudC9BQXVkaW9GbG93R3JhcGguY3BwCkBAIC0wLDAgKzEsMTE2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE4IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KKworI2RlZmluZSBMT0dfVEFHICJBQXVkaW9GbG93R3JhcGgiCisvLyNkZWZpbmUgTE9HX05ERUJVRyAwCisjaW5jbHVkZSA8dXRpbHMvTG9nLmg+CisKKyNpbmNsdWRlICJBQXVkaW9GbG93R3JhcGguaCIKKworI2luY2x1ZGUgPGZsb3dncmFwaC9DbGlwVG9SYW5nZS5oPgorI2luY2x1ZGUgPGZsb3dncmFwaC9Nb25vVG9NdWx0aUNvbnZlcnRlci5oPgorI2luY2x1ZGUgPGZsb3dncmFwaC9SYW1wTGluZWFyLmg+CisjaW5jbHVkZSA8Zmxvd2dyYXBoL1NpbmtGbG9hdC5oPgorI2luY2x1ZGUgPGZsb3dncmFwaC9TaW5rSTE2Lmg+CisjaW5jbHVkZSA8Zmxvd2dyYXBoL1NpbmtJMjQuaD4KKyNpbmNsdWRlIDxmbG93Z3JhcGgvU291cmNlRmxvYXQuaD4KKyNpbmNsdWRlIDxmbG93Z3JhcGgvU291cmNlSTE2Lmg+CisjaW5jbHVkZSA8Zmxvd2dyYXBoL1NvdXJjZUkyNC5oPgorCit1c2luZyBuYW1lc3BhY2UgZmxvd2dyYXBoOworCithYXVkaW9fcmVzdWx0X3QgQUF1ZGlvRmxvd0dyYXBoOjpjb25maWd1cmUoYXVkaW9fZm9ybWF0X3Qgc291cmNlRm9ybWF0LAorICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQzMl90IHNvdXJjZUNoYW5uZWxDb3VudCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgYXVkaW9fZm9ybWF0X3Qgc2lua0Zvcm1hdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgaW50MzJfdCBzaW5rQ2hhbm5lbENvdW50KSB7CisgICAgQXVkaW9GbG9hdE91dHB1dFBvcnQgKmxhc3RPdXRwdXQgPSBudWxscHRyOworCisgICAgQUxPR0QoIiVzKCkgc291cmNlIGZvcm1hdCA9IDB4JTA4eCwgY2hhbm5lbHMgPSAlZCwgc2luayBmb3JtYXQgPSAweCUwOHgsIGNoYW5uZWxzID0gJWQiLAorICAgICAgICAgIF9fZnVuY19fLCBzb3VyY2VGb3JtYXQsIHNvdXJjZUNoYW5uZWxDb3VudCwgc2lua0Zvcm1hdCwgc2lua0NoYW5uZWxDb3VudCk7CisKKyAgICBzd2l0Y2ggKHNvdXJjZUZvcm1hdCkgeworICAgICAgICBjYXNlIEFVRElPX0ZPUk1BVF9QQ01fRkxPQVQ6CisgICAgICAgICAgICBtU291cmNlID0gc3RkOjptYWtlX3VuaXF1ZTxTb3VyY2VGbG9hdD4oc291cmNlQ2hhbm5lbENvdW50KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEFVRElPX0ZPUk1BVF9QQ01fMTZfQklUOgorICAgICAgICAgICAgbVNvdXJjZSA9IHN0ZDo6bWFrZV91bmlxdWU8U291cmNlSTE2Pihzb3VyY2VDaGFubmVsQ291bnQpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgQVVESU9fRk9STUFUX1BDTV8yNF9CSVRfUEFDS0VEOgorICAgICAgICAgICAgbVNvdXJjZSA9IHN0ZDo6bWFrZV91bmlxdWU8U291cmNlSTI0Pihzb3VyY2VDaGFubmVsQ291bnQpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGRlZmF1bHQ6IC8vIFRPRE8gYWRkIEkzMgorICAgICAgICAgICAgQUxPR0UoIiVzKCkgVW5zdXBwb3J0ZWQgc291cmNlIGZvcm1hdCA9ICVkIiwgX19mdW5jX18sIHNvdXJjZUZvcm1hdCk7CisgICAgICAgICAgICByZXR1cm4gQUFVRElPX0VSUk9SX1VOSU1QTEVNRU5URUQ7CisgICAgfQorICAgIGxhc3RPdXRwdXQgPSAmbVNvdXJjZS0+b3V0cHV0OworCisgICAgLy8gQXBwbHkgdm9sdW1lIGFzIGEgcmFtcCB0byBhdm9pZCBwb3BzLgorICAgIG1Wb2x1bWVSYW1wID0gc3RkOjptYWtlX3VuaXF1ZTxSYW1wTGluZWFyPihzb3VyY2VDaGFubmVsQ291bnQpOworICAgIGxhc3RPdXRwdXQtPmNvbm5lY3QoJm1Wb2x1bWVSYW1wLT5pbnB1dCk7CisgICAgbGFzdE91dHB1dCA9ICZtVm9sdW1lUmFtcC0+b3V0cHV0OworCisgICAgLy8gRm9yIGEgcHVyZSBmbG9hdCBncmFwaCwgdGhlcmUgaXMgY2hhbmNlIHRoYXQgdGhlIGRhdGEgcmFuZ2UgbWF5IGJlIHZlcnkgbGFyZ2UuCisgICAgLy8gU28gd2Ugc2hvdWxkIGNsaXAgdG8gYSByZWFzb25hYmxlIHZhbHVlIHRoYXQgYWxsb3dzIGEgbGl0dGxlIGhlYWRyb29tLgorICAgIGlmIChzb3VyY2VGb3JtYXQgPT0gQVVESU9fRk9STUFUX1BDTV9GTE9BVCAmJiBzaW5rRm9ybWF0ID09IEFVRElPX0ZPUk1BVF9QQ01fRkxPQVQpIHsKKyAgICAgICAgbUNsaXBwZXIgPSBzdGQ6Om1ha2VfdW5pcXVlPENsaXBUb1JhbmdlPihzb3VyY2VDaGFubmVsQ291bnQpOworICAgICAgICBsYXN0T3V0cHV0LT5jb25uZWN0KCZtQ2xpcHBlci0+aW5wdXQpOworICAgICAgICBsYXN0T3V0cHV0ID0gJm1DbGlwcGVyLT5vdXRwdXQ7CisgICAgfQorCisgICAgLy8gRXhwYW5kIHRoZSBudW1iZXIgb2YgY2hhbm5lbHMgaWYgcmVxdWlyZWQuCisgICAgaWYgKHNvdXJjZUNoYW5uZWxDb3VudCA9PSAxICYmIHNpbmtDaGFubmVsQ291bnQgPiAxKSB7CisgICAgICAgIG1DaGFubmVsQ29udmVydGVyID0gc3RkOjptYWtlX3VuaXF1ZTxNb25vVG9NdWx0aUNvbnZlcnRlcj4oc2lua0NoYW5uZWxDb3VudCk7CisgICAgICAgIGxhc3RPdXRwdXQtPmNvbm5lY3QoJm1DaGFubmVsQ29udmVydGVyLT5pbnB1dCk7CisgICAgICAgIGxhc3RPdXRwdXQgPSAmbUNoYW5uZWxDb252ZXJ0ZXItPm91dHB1dDsKKyAgICB9IGVsc2UgaWYgKHNvdXJjZUNoYW5uZWxDb3VudCAhPSBzaW5rQ2hhbm5lbENvdW50KSB7CisgICAgICAgIEFMT0dFKCIlcygpIENoYW5uZWwgcmVkdWN0aW9uIG5vdCBzdXBwb3J0ZWQuIiwgX19mdW5jX18pOworICAgICAgICByZXR1cm4gQUFVRElPX0VSUk9SX1VOSU1QTEVNRU5URUQ7CisgICAgfQorCisgICAgc3dpdGNoIChzaW5rRm9ybWF0KSB7CisgICAgICAgIGNhc2UgQVVESU9fRk9STUFUX1BDTV9GTE9BVDoKKyAgICAgICAgICAgIG1TaW5rID0gc3RkOjptYWtlX3VuaXF1ZTxTaW5rRmxvYXQ+KHNpbmtDaGFubmVsQ291bnQpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgQVVESU9fRk9STUFUX1BDTV8xNl9CSVQ6CisgICAgICAgICAgICBtU2luayA9IHN0ZDo6bWFrZV91bmlxdWU8U2lua0kxNj4oc2lua0NoYW5uZWxDb3VudCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBBVURJT19GT1JNQVRfUENNXzI0X0JJVF9QQUNLRUQ6CisgICAgICAgICAgICBtU2luayA9IHN0ZDo6bWFrZV91bmlxdWU8U2lua0kyND4oc2lua0NoYW5uZWxDb3VudCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgZGVmYXVsdDogLy8gVE9ETyBhZGQgSTMyCisgICAgICAgICAgICBBTE9HRSgiJXMoKSBVbnN1cHBvcnRlZCBzaW5rIGZvcm1hdCA9ICVkIiwgX19mdW5jX18sIHNpbmtGb3JtYXQpOworICAgICAgICAgICAgcmV0dXJuIEFBVURJT19FUlJPUl9VTklNUExFTUVOVEVEOworICAgIH0KKyAgICBsYXN0T3V0cHV0LT5jb25uZWN0KCZtU2luay0+aW5wdXQpOworCisgICAgcmV0dXJuIEFBVURJT19PSzsKK30KKwordm9pZCBBQXVkaW9GbG93R3JhcGg6OnByb2Nlc3MoY29uc3Qgdm9pZCAqc291cmNlLCB2b2lkICpkZXN0aW5hdGlvbiwgaW50MzJfdCBudW1GcmFtZXMpIHsKKyAgICBtU291cmNlLT5zZXREYXRhKHNvdXJjZSwgbnVtRnJhbWVzKTsKKyAgICBtU2luay0+cmVhZChkZXN0aW5hdGlvbiwgbnVtRnJhbWVzKTsKK30KKworLyoqCisgKiBAcGFyYW0gdm9sdW1lIGJldHdlZW4gMC4wIGFuZCAxLjAKKyAqLwordm9pZCBBQXVkaW9GbG93R3JhcGg6OnNldFRhcmdldFZvbHVtZShmbG9hdCB2b2x1bWUpIHsKKyAgICBtVm9sdW1lUmFtcC0+c2V0VGFyZ2V0KHZvbHVtZSk7Cit9CisKK3ZvaWQgQUF1ZGlvRmxvd0dyYXBoOjpzZXRSYW1wTGVuZ3RoSW5GcmFtZXMoaW50MzJfdCBudW1GcmFtZXMpIHsKKyAgICBtVm9sdW1lUmFtcC0+c2V0TGVuZ3RoSW5GcmFtZXMobnVtRnJhbWVzKTsKK30KZGlmZiAtLWdpdCBhL21lZGlhL2xpYmFhdWRpby9zcmMvY2xpZW50L0FBdWRpb0Zsb3dHcmFwaC5oIGIvbWVkaWEvbGliYWF1ZGlvL3NyYy9jbGllbnQvQUF1ZGlvRmxvd0dyYXBoLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTQ5ZjY0ZQotLS0gL2Rldi9udWxsCisrKyBiL21lZGlhL2xpYmFhdWRpby9zcmMvY2xpZW50L0FBdWRpb0Zsb3dHcmFwaC5oCkBAIC0wLDAgKzEsNjQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTggVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworCisjaWZuZGVmIEFORFJPSURfQUFVRElPX0ZMT1dfR1JBUEhfSAorI2RlZmluZSBBTkRST0lEX0FBVURJT19GTE9XX0dSQVBIX0gKKworI2luY2x1ZGUgPG1lbW9yeT4KKyNpbmNsdWRlIDxzdGRpbnQuaD4KKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyNpbmNsdWRlIDxzeXN0ZW0vYXVkaW8uaD4KKworI2luY2x1ZGUgPGFhdWRpby9BQXVkaW8uaD4KKyNpbmNsdWRlIDxmbG93Z3JhcGgvQ2xpcFRvUmFuZ2UuaD4KKyNpbmNsdWRlIDxmbG93Z3JhcGgvTW9ub1RvTXVsdGlDb252ZXJ0ZXIuaD4KKyNpbmNsdWRlIDxmbG93Z3JhcGgvUmFtcExpbmVhci5oPgorCitjbGFzcyBBQXVkaW9GbG93R3JhcGggeworcHVibGljOgorICAgIC8qKiBDb25uZWN0IHNldmVyYWwgbW9kdWxlcyB0b2dldGhlciB0byBjb252ZXJ0IGZyb20gc291cmNlIHRvIHNpbmsuCisgICAgICogVGhpcyBzaG91bGQgb25seSBiZSBjYWxsZWQgb25jZSBmb3IgZWFjaCBpbnN0YW5jZS4KKyAgICAgKgorICAgICAqIEBwYXJhbSBzb3VyY2VGb3JtYXQKKyAgICAgKiBAcGFyYW0gc291cmNlQ2hhbm5lbENvdW50CisgICAgICogQHBhcmFtIHNpbmtGb3JtYXQKKyAgICAgKiBAcGFyYW0gc2lua0NoYW5uZWxDb3VudAorICAgICAqIEByZXR1cm4KKyAgICAgKi8KKyAgICBhYXVkaW9fcmVzdWx0X3QgY29uZmlndXJlKGF1ZGlvX2Zvcm1hdF90IHNvdXJjZUZvcm1hdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludDMyX3Qgc291cmNlQ2hhbm5lbENvdW50LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXVkaW9fZm9ybWF0X3Qgc2lua0Zvcm1hdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludDMyX3Qgc2lua0NoYW5uZWxDb3VudCk7CisKKyAgICB2b2lkIHByb2Nlc3MoY29uc3Qgdm9pZCAqc291cmNlLCB2b2lkICpkZXN0aW5hdGlvbiwgaW50MzJfdCBudW1GcmFtZXMpOworCisgICAgLyoqCisgICAgICogQHBhcmFtIHZvbHVtZSBiZXR3ZWVuIDAuMCBhbmQgMS4wCisgICAgICovCisgICAgdm9pZCBzZXRUYXJnZXRWb2x1bWUoZmxvYXQgdm9sdW1lKTsKKworICAgIHZvaWQgc2V0UmFtcExlbmd0aEluRnJhbWVzKGludDMyX3QgbnVtRnJhbWVzKTsKKworcHJpdmF0ZToKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8Zmxvd2dyYXBoOjpBdWRpb1NvdXJjZT4gICAgICAgICAgbVNvdXJjZTsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8Zmxvd2dyYXBoOjpSYW1wTGluZWFyPiAgICAgICAgICAgbVZvbHVtZVJhbXA7CisgICAgc3RkOjp1bmlxdWVfcHRyPGZsb3dncmFwaDo6Q2xpcFRvUmFuZ2U+ICAgICAgICAgIG1DbGlwcGVyOworICAgIHN0ZDo6dW5pcXVlX3B0cjxmbG93Z3JhcGg6Ok1vbm9Ub011bHRpQ29udmVydGVyPiBtQ2hhbm5lbENvbnZlcnRlcjsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8Zmxvd2dyYXBoOjpBdWRpb1Npbms+ICAgICAgICAgICAgbVNpbms7Cit9OworCisKKyNlbmRpZiAvL0FORFJPSURfQUFVRElPX0ZMT1dfR1JBUEhfSApkaWZmIC0tZ2l0IGEvbWVkaWEvbGliYWF1ZGlvL3NyYy9jbGllbnQvQXVkaW9FbmRwb2ludC5jcHAgYi9tZWRpYS9saWJhYXVkaW8vc3JjL2NsaWVudC9BdWRpb0VuZHBvaW50LmNwcAppbmRleCBmOGUzNGQxLi4yMTRmODg4IDEwMDY0NAotLS0gYS9tZWRpYS9saWJhYXVkaW8vc3JjL2NsaWVudC9BdWRpb0VuZHBvaW50LmNwcAorKysgYi9tZWRpYS9saWJhYXVkaW8vc3JjL2NsaWVudC9BdWRpb0VuZHBvaW50LmNwcApAQCAtMTk2LDcgKzE5Niw3IEBACiAKIGludDMyX3QgQXVkaW9FbmRwb2ludDo6Z2V0RW1wdHlGcmFtZXNBdmFpbGFibGUoKQogewotICAgIHJldHVybiBtRGF0YVF1ZXVlLT5nZXRGaWZvQ29udHJvbGxlckJhc2UoKS0+Z2V0RW1wdHlGcmFtZXNBdmFpbGFibGUoKTsKKyAgICByZXR1cm4gbURhdGFRdWV1ZS0+Z2V0RW1wdHlGcmFtZXNBdmFpbGFibGUoKTsKIH0KIAogaW50MzJfdCBBdWRpb0VuZHBvaW50OjpnZXRGdWxsRnJhbWVzQXZhaWxhYmxlKFdyYXBwaW5nQnVmZmVyICp3cmFwcGluZ0J1ZmZlcikKQEAgLTIwNiwxNSArMjA2LDE1IEBACiAKIGludDMyX3QgQXVkaW9FbmRwb2ludDo6Z2V0RnVsbEZyYW1lc0F2YWlsYWJsZSgpCiB7Ci0gICAgcmV0dXJuIG1EYXRhUXVldWUtPmdldEZpZm9Db250cm9sbGVyQmFzZSgpLT5nZXRGdWxsRnJhbWVzQXZhaWxhYmxlKCk7CisgICAgcmV0dXJuIG1EYXRhUXVldWUtPmdldEZ1bGxGcmFtZXNBdmFpbGFibGUoKTsKIH0KIAogdm9pZCBBdWRpb0VuZHBvaW50OjphZHZhbmNlV3JpdGVJbmRleChpbnQzMl90IGRlbHRhRnJhbWVzKSB7Ci0gICAgbURhdGFRdWV1ZS0+Z2V0Rmlmb0NvbnRyb2xsZXJCYXNlKCktPmFkdmFuY2VXcml0ZUluZGV4KGRlbHRhRnJhbWVzKTsKKyAgICBtRGF0YVF1ZXVlLT5hZHZhbmNlV3JpdGVJbmRleChkZWx0YUZyYW1lcyk7CiB9CiAKIHZvaWQgQXVkaW9FbmRwb2ludDo6YWR2YW5jZVJlYWRJbmRleChpbnQzMl90IGRlbHRhRnJhbWVzKSB7Ci0gICAgbURhdGFRdWV1ZS0+Z2V0Rmlmb0NvbnRyb2xsZXJCYXNlKCktPmFkdmFuY2VSZWFkSW5kZXgoZGVsdGFGcmFtZXMpOworICAgIG1EYXRhUXVldWUtPmFkdmFuY2VSZWFkSW5kZXgoZGVsdGFGcmFtZXMpOwogfQogCiB2b2lkIEF1ZGlvRW5kcG9pbnQ6OnNldERhdGFSZWFkQ291bnRlcihmaWZvX2NvdW50ZXJfdCBmcmFtZXNSZWFkKQpkaWZmIC0tZ2l0IGEvbWVkaWEvbGliYWF1ZGlvL3NyYy9jbGllbnQvQXVkaW9TdHJlYW1JbnRlcm5hbC5jcHAgYi9tZWRpYS9saWJhYXVkaW8vc3JjL2NsaWVudC9BdWRpb1N0cmVhbUludGVybmFsLmNwcAppbmRleCA5MjA0ODI0Li4wYTgwMjFhIDEwMDY0NAotLS0gYS9tZWRpYS9saWJhYXVkaW8vc3JjL2NsaWVudC9BdWRpb1N0cmVhbUludGVybmFsLmNwcAorKysgYi9tZWRpYS9saWJhYXVkaW8vc3JjL2NsaWVudC9BdWRpb1N0cmVhbUludGVybmFsLmNwcApAQCAtMzksNyArMzksNiBAQAogI2luY2x1ZGUgImNvcmUvQXVkaW9TdHJlYW1CdWlsZGVyLmgiCiAjaW5jbHVkZSAiZmlmby9GaWZvQnVmZmVyLmgiCiAjaW5jbHVkZSAidXRpbGl0eS9BdWRpb0Nsb2NrLmgiCi0jaW5jbHVkZSAidXRpbGl0eS9MaW5lYXJSYW1wLmgiCiAKICNpbmNsdWRlICJBdWRpb1N0cmVhbUludGVybmFsLmgiCiAKQEAgLTkyLDExICs5MSwxMSBAQAogICAgIH0KIAogICAgIC8vIFdlIGhhdmUgdG8gZG8gdm9sdW1lIHNjYWxpbmcuIFNvIHdlIHByZWZlciBGTE9BVCBmb3JtYXQuCi0gICAgaWYgKGdldEZvcm1hdCgpID09IEFBVURJT19GT1JNQVRfVU5TUEVDSUZJRUQpIHsKLSAgICAgICAgc2V0Rm9ybWF0KEFBVURJT19GT1JNQVRfUENNX0ZMT0FUKTsKKyAgICBpZiAoZ2V0Rm9ybWF0KCkgPT0gQVVESU9fRk9STUFUX0RFRkFVTFQpIHsKKyAgICAgICAgc2V0Rm9ybWF0KEFVRElPX0ZPUk1BVF9QQ01fRkxPQVQpOwogICAgIH0KICAgICAvLyBSZXF1ZXN0IEZMT0FUIGZvciB0aGUgc2hhcmVkIG1peGVyLgotICAgIHJlcXVlc3QuZ2V0Q29uZmlndXJhdGlvbigpLnNldEZvcm1hdChBQVVESU9fRk9STUFUX1BDTV9GTE9BVCk7CisgICAgcmVxdWVzdC5nZXRDb25maWd1cmF0aW9uKCkuc2V0Rm9ybWF0KEFVRElPX0ZPUk1BVF9QQ01fRkxPQVQpOwogCiAgICAgLy8gQnVpbGQgdGhlIHJlcXVlc3QgdG8gc2VuZCB0byB0aGUgc2VydmVyLgogICAgIHJlcXVlc3Quc2V0VXNlcklkKGdldHVpZCgpKTsKQEAgLTEyNiw3ICsxMjUsNyBAQAogICAgICAgICAvLyBpZiB0aGF0IGZhaWxlZCB0aGVuIHRyeSBzd2l0Y2hpbmcgZnJvbSBtb25vIHRvIHN0ZXJlbyBpZiBPVVRQVVQuCiAgICAgICAgIC8vIE9ubHkgZG8gdGhpcyBpbiB0aGUgY2xpZW50LiBPdGhlcndpc2Ugd2UgZW5kIHVwIHdpdGggYSBtb25vIG1peGVyIGluIHRoZSBzZXJ2aWNlCiAgICAgICAgIC8vIHRoYXQgd3JpdGVzIHRvIGEgc3RlcmVvIE1NQVAgc3RyZWFtLgotICAgICAgICBBTE9HRCgiJXMgLSBvcGVuU3RyZWFtKCkgcmV0dXJuZWQgJWQsIHRyeSBzd2l0Y2hpbmcgZnJvbSBNT05PIHRvIFNURVJFTyIsCisgICAgICAgIEFMT0dEKCIlcygpIC0gb3BlblN0cmVhbSgpIHJldHVybmVkICVkLCB0cnkgc3dpdGNoaW5nIGZyb20gTU9OTyB0byBTVEVSRU8iLAogICAgICAgICAgICAgICBfX2Z1bmNfXywgbVNlcnZpY2VTdHJlYW1IYW5kbGUpOwogICAgICAgICByZXF1ZXN0LmdldENvbmZpZ3VyYXRpb24oKS5zZXRTYW1wbGVzUGVyRnJhbWUoMik7IC8vIHN0ZXJlbwogICAgICAgICBtU2VydmljZVN0cmVhbUhhbmRsZSA9IG1TZXJ2aWNlSW50ZXJmYWNlLm9wZW5TdHJlYW0ocmVxdWVzdCwgY29uZmlndXJhdGlvbk91dHB1dCk7CkBAIC0yMTIsOSArMjExLDcgQEAKICAgICAgICAgICAgIG1DYWxsYmFja0ZyYW1lcyA9IG1GcmFtZXNQZXJCdXJzdDsKICAgICAgICAgfQogCi0gICAgICAgIGludDMyX3QgYnl0ZXNQZXJGcmFtZSA9IGdldFNhbXBsZXNQZXJGcmFtZSgpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICogQUF1ZGlvQ29udmVydF9mb3JtYXRUb1NpemVJbkJ5dGVzKGdldEZvcm1hdCgpKTsKLSAgICAgICAgaW50MzJfdCBjYWxsYmFja0J1ZmZlclNpemUgPSBtQ2FsbGJhY2tGcmFtZXMgKiBieXRlc1BlckZyYW1lOworICAgICAgICBjb25zdCBpbnQzMl90IGNhbGxiYWNrQnVmZmVyU2l6ZSA9IG1DYWxsYmFja0ZyYW1lcyAqIGdldEJ5dGVzUGVyRnJhbWUoKTsKICAgICAgICAgbUNhbGxiYWNrQnVmZmVyID0gbmV3IHVpbnQ4X3RbY2FsbGJhY2tCdWZmZXJTaXplXTsKICAgICB9CiAKZGlmZiAtLWdpdCBhL21lZGlhL2xpYmFhdWRpby9zcmMvY2xpZW50L0F1ZGlvU3RyZWFtSW50ZXJuYWwuaCBiL21lZGlhL2xpYmFhdWRpby9zcmMvY2xpZW50L0F1ZGlvU3RyZWFtSW50ZXJuYWwuaAppbmRleCAwNDI1Y2Q1Li4zYmI5ZTFlIDEwMDY0NAotLS0gYS9tZWRpYS9saWJhYXVkaW8vc3JjL2NsaWVudC9BdWRpb1N0cmVhbUludGVybmFsLmgKKysrIGIvbWVkaWEvbGliYWF1ZGlvL3NyYy9jbGllbnQvQXVkaW9TdHJlYW1JbnRlcm5hbC5oCkBAIC0yNyw3ICsyNyw2IEBACiAjaW5jbHVkZSAiY2xpZW50L0F1ZGlvRW5kcG9pbnQuaCIKICNpbmNsdWRlICJjb3JlL0F1ZGlvU3RyZWFtLmgiCiAjaW5jbHVkZSAidXRpbGl0eS9BdWRpb0Nsb2NrLmgiCi0jaW5jbHVkZSAidXRpbGl0eS9MaW5lYXJSYW1wLmgiCiAKIHVzaW5nIGFuZHJvaWQ6OnNwOwogdXNpbmcgYW5kcm9pZDo6SUFBdWRpb1NlcnZpY2U7CkBAIC0xOTMsNiArMTkyLDggQEAKIAogICAgIGludDY0X3QgICAgICAgICAgICAgICAgICBtU2VydmljZUxhdGVuY3lOYW5vcyA9IDA7CiAKKyAgICAvLyBTb21ldGltZXMgdGhlIGhhcmR3YXJlIGlzIG9wZXJhdGluZyB3aXRoIGEgZGlmZmVyZW50IGNoYW5uZWwgY291bnQgZnJvbSB0aGUgYXBwLgorICAgIC8vIFRoZW4gd2UgcmVxdWlyZSBjb252ZXJzaW9uIGluIEFBdWRpby4KICAgICBpbnQzMl90ICAgICAgICAgICAgICAgICAgbURldmljZUNoYW5uZWxDb3VudCA9IDA7CiB9OwogCmRpZmYgLS1naXQgYS9tZWRpYS9saWJhYXVkaW8vc3JjL2NsaWVudC9BdWRpb1N0cmVhbUludGVybmFsQ2FwdHVyZS5jcHAgYi9tZWRpYS9saWJhYXVkaW8vc3JjL2NsaWVudC9BdWRpb1N0cmVhbUludGVybmFsQ2FwdHVyZS5jcHAKaW5kZXggMDcxOWZlMS4uNGEwZTZkYSAxMDA2NDQKLS0tIGEvbWVkaWEvbGliYWF1ZGlvL3NyYy9jbGllbnQvQXVkaW9TdHJlYW1JbnRlcm5hbENhcHR1cmUuY3BwCisrKyBiL21lZGlhL2xpYmFhdWRpby9zcmMvY2xpZW50L0F1ZGlvU3RyZWFtSW50ZXJuYWxDYXB0dXJlLmNwcApAQCAtMjAsNiArMjAsNyBAQAogI2luY2x1ZGUgPHV0aWxzL0xvZy5oPgogCiAjaW5jbHVkZSA8YWxnb3JpdGhtPgorI2luY2x1ZGUgPGF1ZGlvX3V0aWxzL3ByaW1pdGl2ZXMuaD4KICNpbmNsdWRlIDxhYXVkaW8vQUF1ZGlvLmg+CiAKICNpbmNsdWRlICJjbGllbnQvQXVkaW9TdHJlYW1JbnRlcm5hbENhcHR1cmUuaCIKQEAgLTE2NSwzNSArMTY2LDM2IEBACiAgICAgLy8gUmVhZCBkYXRhIGluIG9uZSBvciB0d28gcGFydHMuCiAgICAgZm9yIChpbnQgcGFydEluZGV4ID0gMDsgZnJhbWVzTGVmdCA+IDAgJiYgcGFydEluZGV4IDwgV3JhcHBpbmdCdWZmZXI6OlNJWkU7IHBhcnRJbmRleCsrKSB7CiAgICAgICAgIGludDMyX3QgZnJhbWVzVG9Qcm9jZXNzID0gZnJhbWVzTGVmdDsKLSAgICAgICAgaW50MzJfdCBmcmFtZXNBdmFpbGFibGUgPSB3cmFwcGluZ0J1ZmZlci5udW1GcmFtZXNbcGFydEluZGV4XTsKKyAgICAgICAgY29uc3QgaW50MzJfdCBmcmFtZXNBdmFpbGFibGUgPSB3cmFwcGluZ0J1ZmZlci5udW1GcmFtZXNbcGFydEluZGV4XTsKICAgICAgICAgaWYgKGZyYW1lc0F2YWlsYWJsZSA8PSAwKSBicmVhazsKIAogICAgICAgICBpZiAoZnJhbWVzVG9Qcm9jZXNzID4gZnJhbWVzQXZhaWxhYmxlKSB7CiAgICAgICAgICAgICBmcmFtZXNUb1Byb2Nlc3MgPSBmcmFtZXNBdmFpbGFibGU7CiAgICAgICAgIH0KIAotICAgICAgICBpbnQzMl90IG51bUJ5dGVzID0gZ2V0Qnl0ZXNQZXJGcmFtZSgpICogZnJhbWVzVG9Qcm9jZXNzOwotICAgICAgICBpbnQzMl90IG51bVNhbXBsZXMgPSBmcmFtZXNUb1Byb2Nlc3MgKiBnZXRTYW1wbGVzUGVyRnJhbWUoKTsKKyAgICAgICAgY29uc3QgaW50MzJfdCBudW1CeXRlcyA9IGdldEJ5dGVzUGVyRnJhbWUoKSAqIGZyYW1lc1RvUHJvY2VzczsKKyAgICAgICAgY29uc3QgaW50MzJfdCBudW1TYW1wbGVzID0gZnJhbWVzVG9Qcm9jZXNzICogZ2V0U2FtcGxlc1BlckZyYW1lKCk7CiAKKyAgICAgICAgY29uc3QgYXVkaW9fZm9ybWF0X3Qgc291cmNlRm9ybWF0ID0gZ2V0RGV2aWNlRm9ybWF0KCk7CisgICAgICAgIGNvbnN0IGF1ZGlvX2Zvcm1hdF90IGRlc3RpbmF0aW9uRm9ybWF0ID0gZ2V0Rm9ybWF0KCk7CiAgICAgICAgIC8vIFRPRE8gZmFjdG9yIHRoaXMgb3V0IGludG8gYSB1dGlsaXR5IGZ1bmN0aW9uCi0gICAgICAgIGlmIChnZXREZXZpY2VGb3JtYXQoKSA9PSBnZXRGb3JtYXQoKSkgeworICAgICAgICBpZiAoc291cmNlRm9ybWF0ID09IGRlc3RpbmF0aW9uRm9ybWF0KSB7CiAgICAgICAgICAgICBtZW1jcHkoZGVzdGluYXRpb24sIHdyYXBwaW5nQnVmZmVyLmRhdGFbcGFydEluZGV4XSwgbnVtQnl0ZXMpOwotICAgICAgICB9IGVsc2UgaWYgKGdldERldmljZUZvcm1hdCgpID09IEFBVURJT19GT1JNQVRfUENNX0kxNgotICAgICAgICAgICAgICAgICAgICYmIGdldEZvcm1hdCgpID09IEFBVURJT19GT1JNQVRfUENNX0ZMT0FUKSB7Ci0gICAgICAgICAgICBBQXVkaW9Db252ZXJ0X3BjbTE2VG9GbG9hdCgKLSAgICAgICAgICAgICAgICAgICAgKGNvbnN0IGludDE2X3QgKikgd3JhcHBpbmdCdWZmZXIuZGF0YVtwYXJ0SW5kZXhdLAorICAgICAgICB9IGVsc2UgaWYgKHNvdXJjZUZvcm1hdCA9PSBBVURJT19GT1JNQVRfUENNXzE2X0JJVAorICAgICAgICAgICAgICAgICAgICYmIGRlc3RpbmF0aW9uRm9ybWF0ID09IEFVRElPX0ZPUk1BVF9QQ01fRkxPQVQpIHsKKyAgICAgICAgICAgIG1lbWNweV90b19mbG9hdF9mcm9tX2kxNigKICAgICAgICAgICAgICAgICAgICAgKGZsb2F0ICopIGRlc3RpbmF0aW9uLAotICAgICAgICAgICAgICAgICAgICBudW1TYW1wbGVzLAotICAgICAgICAgICAgICAgICAgICAxLjBmKTsKLSAgICAgICAgfSBlbHNlIGlmIChnZXREZXZpY2VGb3JtYXQoKSA9PSBBQVVESU9fRk9STUFUX1BDTV9GTE9BVAotICAgICAgICAgICAgICAgICAgICYmIGdldEZvcm1hdCgpID09IEFBVURJT19GT1JNQVRfUENNX0kxNikgewotICAgICAgICAgICAgQUF1ZGlvQ29udmVydF9mbG9hdFRvUGNtMTYoCi0gICAgICAgICAgICAgICAgICAgIChjb25zdCBmbG9hdCAqKSB3cmFwcGluZ0J1ZmZlci5kYXRhW3BhcnRJbmRleF0sCisgICAgICAgICAgICAgICAgICAgIChjb25zdCBpbnQxNl90ICopIHdyYXBwaW5nQnVmZmVyLmRhdGFbcGFydEluZGV4XSwKKyAgICAgICAgICAgICAgICAgICAgbnVtU2FtcGxlcyk7CisgICAgICAgIH0gZWxzZSBpZiAoc291cmNlRm9ybWF0ID09IEFVRElPX0ZPUk1BVF9QQ01fRkxPQVQKKyAgICAgICAgICAgICAgICAgICAmJiBkZXN0aW5hdGlvbkZvcm1hdCA9PSBBVURJT19GT1JNQVRfUENNXzE2X0JJVCkgeworICAgICAgICAgICAgbWVtY3B5X3RvX2kxNl9mcm9tX2Zsb2F0KAogICAgICAgICAgICAgICAgICAgICAoaW50MTZfdCAqKSBkZXN0aW5hdGlvbiwKLSAgICAgICAgICAgICAgICAgICAgbnVtU2FtcGxlcywKLSAgICAgICAgICAgICAgICAgICAgMS4wZik7CisgICAgICAgICAgICAgICAgICAgIChjb25zdCBmbG9hdCAqKSB3cmFwcGluZ0J1ZmZlci5kYXRhW3BhcnRJbmRleF0sCisgICAgICAgICAgICAgICAgICAgIG51bVNhbXBsZXMpOwogICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgQUxPR0UoIkZvcm1hdCBjb252ZXJzaW9uIG5vdCBzdXBwb3J0ZWQhIik7CisgICAgICAgICAgICBBTE9HRSgiJXMoKSAtIEZvcm1hdCBjb252ZXJzaW9uIG5vdCBzdXBwb3J0ZWQhIGF1ZGlvX2Zvcm1hdF90IHNvdXJjZSA9ICV1LCBkZXN0ID0gJXUiLAorICAgICAgICAgICAgICAgIF9fZnVuY19fLCBzb3VyY2VGb3JtYXQsIGRlc3RpbmF0aW9uRm9ybWF0KTsKICAgICAgICAgICAgIHJldHVybiBBQVVESU9fRVJST1JfSU5WQUxJRF9GT1JNQVQ7CiAgICAgICAgIH0KICAgICAgICAgZGVzdGluYXRpb24gKz0gbnVtQnl0ZXM7CmRpZmYgLS1naXQgYS9tZWRpYS9saWJhYXVkaW8vc3JjL2NsaWVudC9BdWRpb1N0cmVhbUludGVybmFsUGxheS5jcHAgYi9tZWRpYS9saWJhYXVkaW8vc3JjL2NsaWVudC9BdWRpb1N0cmVhbUludGVybmFsUGxheS5jcHAKaW5kZXggNzk1YmEyYy4uMmFlMzdhNSAxMDA2NDQKLS0tIGEvbWVkaWEvbGliYWF1ZGlvL3NyYy9jbGllbnQvQXVkaW9TdHJlYW1JbnRlcm5hbFBsYXkuY3BwCisrKyBiL21lZGlhL2xpYmFhdWRpby9zcmMvY2xpZW50L0F1ZGlvU3RyZWFtSW50ZXJuYWxQbGF5LmNwcApAQCAtNDMsOSArNDMsMTcgQEAKIGFhdWRpb19yZXN1bHRfdCBBdWRpb1N0cmVhbUludGVybmFsUGxheTo6b3Blbihjb25zdCBBdWRpb1N0cmVhbUJ1aWxkZXIgJmJ1aWxkZXIpIHsKICAgICBhYXVkaW9fcmVzdWx0X3QgcmVzdWx0ID0gQXVkaW9TdHJlYW1JbnRlcm5hbDo6b3BlbihidWlsZGVyKTsKICAgICBpZiAocmVzdWx0ID09IEFBVURJT19PSykgeworICAgICAgICByZXN1bHQgPSBtRmxvd0dyYXBoLmNvbmZpZ3VyZShnZXRGb3JtYXQoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2V0U2FtcGxlc1BlckZyYW1lKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdldERldmljZUZvcm1hdCgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZXREZXZpY2VDaGFubmVsQ291bnQoKSk7CisKKyAgICAgICAgaWYgKHJlc3VsdCAhPSBBQVVESU9fT0spIHsKKyAgICAgICAgICAgIGNsb3NlKCk7CisgICAgICAgIH0KICAgICAgICAgLy8gU2FtcGxlIHJhdGUgaXMgY29uc3RyYWluZWQgdG8gY29tbW9uIHZhbHVlcyBieSBub3cgYW5kIHNob3VsZCBub3Qgb3ZlcmZsb3cuCiAgICAgICAgIGludDMyX3QgbnVtRnJhbWVzID0ga1JhbXBNU2VjICogZ2V0U2FtcGxlUmF0ZSgpIC8gQUFVRElPX01JTExJU19QRVJfU0VDT05EOwotICAgICAgICBtVm9sdW1lUmFtcC5zZXRMZW5ndGhJbkZyYW1lcyhudW1GcmFtZXMpOworICAgICAgICBtRmxvd0dyYXBoLnNldFJhbXBMZW5ndGhJbkZyYW1lcyhudW1GcmFtZXMpOwogICAgIH0KICAgICByZXR1cm4gcmVzdWx0OwogfQpAQCAtMjE2LDIyICsyMjQsMTAgQEAKICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgaW50MzJfdCBudW1CeXRlcyA9IGdldEJ5dGVzUGVyRnJhbWUoKSAqIGZyYW1lc1RvV3JpdGU7Ci0gICAgICAgICAgICAvLyBEYXRhIGNvbnZlcnNpb24uCi0gICAgICAgICAgICBmbG9hdCBsZXZlbEZyb207Ci0gICAgICAgICAgICBmbG9hdCBsZXZlbFRvOwotICAgICAgICAgICAgbVZvbHVtZVJhbXAubmV4dFNlZ21lbnQoZnJhbWVzVG9Xcml0ZSwgJmxldmVsRnJvbSwgJmxldmVsVG8pOwogCi0gICAgICAgICAgICBBQXVkaW9EYXRhQ29udmVydGVyOjpGb3JtYXR0ZWREYXRhIHNvdXJjZSgKLSAgICAgICAgICAgICAgICAgICAgKHZvaWQgKilieXRlQnVmZmVyLAotICAgICAgICAgICAgICAgICAgICBnZXRGb3JtYXQoKSwKLSAgICAgICAgICAgICAgICAgICAgZ2V0U2FtcGxlc1BlckZyYW1lKCkpOwotICAgICAgICAgICAgQUF1ZGlvRGF0YUNvbnZlcnRlcjo6Rm9ybWF0dGVkRGF0YSBkZXN0aW5hdGlvbigKLSAgICAgICAgICAgICAgICAgICAgd3JhcHBpbmdCdWZmZXIuZGF0YVtwYXJ0SW5kZXhdLAotICAgICAgICAgICAgICAgICAgICBnZXREZXZpY2VGb3JtYXQoKSwKLSAgICAgICAgICAgICAgICAgICAgZ2V0RGV2aWNlQ2hhbm5lbENvdW50KCkpOwotCi0gICAgICAgICAgICBBQXVkaW9EYXRhQ29udmVydGVyOjpjb252ZXJ0KHNvdXJjZSwgZGVzdGluYXRpb24sIGZyYW1lc1RvV3JpdGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldmVsRnJvbSwgbGV2ZWxUbyk7CisgICAgICAgICAgICBtRmxvd0dyYXBoLnByb2Nlc3MoKHZvaWQgKilieXRlQnVmZmVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdyYXBwaW5nQnVmZmVyLmRhdGFbcGFydEluZGV4XSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmcmFtZXNUb1dyaXRlKTsKIAogICAgICAgICAgICAgYnl0ZUJ1ZmZlciArPSBudW1CeXRlczsKICAgICAgICAgICAgIGZyYW1lc0xlZnQgLT0gZnJhbWVzVG9Xcml0ZTsKQEAgLTMxMyw2ICszMDksNiBAQAogICAgIGZsb2F0IGNvbWJpbmVkVm9sdW1lID0gbVN0cmVhbVZvbHVtZSAqIGdldER1Y2tBbmRNdXRlVm9sdW1lKCk7CiAgICAgQUxPR0QoIiVzKCkgbVN0cmVhbVZvbHVtZSAqIGR1Y2tBbmRNdXRlVm9sdW1lID0gJWYgKiAlZiA9ICVmIiwKICAgICAgICAgICBfX2Z1bmNfXywgbVN0cmVhbVZvbHVtZSwgZ2V0RHVja0FuZE11dGVWb2x1bWUoKSwgY29tYmluZWRWb2x1bWUpOwotICAgIG1Wb2x1bWVSYW1wLnNldFRhcmdldChjb21iaW5lZFZvbHVtZSk7CisgICAgbUZsb3dHcmFwaC5zZXRUYXJnZXRWb2x1bWUoY29tYmluZWRWb2x1bWUpOwogICAgIHJldHVybiBhbmRyb2lkOjpOT19FUlJPUjsKIH0KZGlmZiAtLWdpdCBhL21lZGlhL2xpYmFhdWRpby9zcmMvY2xpZW50L0F1ZGlvU3RyZWFtSW50ZXJuYWxQbGF5LmggYi9tZWRpYS9saWJhYXVkaW8vc3JjL2NsaWVudC9BdWRpb1N0cmVhbUludGVybmFsUGxheS5oCmluZGV4IDk3N2E5MDkuLmNhYjI5NDIgMTAwNjQ0Ci0tLSBhL21lZGlhL2xpYmFhdWRpby9zcmMvY2xpZW50L0F1ZGlvU3RyZWFtSW50ZXJuYWxQbGF5LmgKKysrIGIvbWVkaWEvbGliYWF1ZGlvL3NyYy9jbGllbnQvQXVkaW9TdHJlYW1JbnRlcm5hbFBsYXkuaApAQCAtMjEsNiArMjEsNyBAQAogI2luY2x1ZGUgPGFhdWRpby9BQXVkaW8uaD4KIAogI2luY2x1ZGUgImJpbmRpbmcvQUF1ZGlvU2VydmljZUludGVyZmFjZS5oIgorI2luY2x1ZGUgImNsaWVudC9BQXVkaW9GbG93R3JhcGguaCIKICNpbmNsdWRlICJjbGllbnQvQXVkaW9TdHJlYW1JbnRlcm5hbC5oIgogCiB1c2luZyBhbmRyb2lkOjpzcDsKQEAgLTkzLDcgKzk0LDcgQEAKIAogICAgIGludDY0X3QgICAgICAgICAgICAgICAgICBtTGFzdEZyYW1lc1JlYWQgPSAwOyAvLyB1c2VkIHRvIHByZXZlbnQgcmV0cm9ncmFkZSBtb3Rpb24KIAotICAgIExpbmVhclJhbXAgICAgICAgICAgICAgICBtVm9sdW1lUmFtcDsKKyAgICBBQXVkaW9GbG93R3JhcGggICAgICAgICAgbUZsb3dHcmFwaDsKIAogfTsKIApkaWZmIC0tZ2l0IGEvbWVkaWEvbGliYWF1ZGlvL3NyYy9jb3JlL0FBdWRpb0F1ZGlvLmNwcCBiL21lZGlhL2xpYmFhdWRpby9zcmMvY29yZS9BQXVkaW9BdWRpby5jcHAKaW5kZXggZGYwZGI3OS4uZTI3MmYyYSAxMDA2NDQKLS0tIGEvbWVkaWEvbGliYWF1ZGlvL3NyYy9jb3JlL0FBdWRpb0F1ZGlvLmNwcAorKysgYi9tZWRpYS9saWJhYXVkaW8vc3JjL2NvcmUvQUF1ZGlvQXVkaW8uY3BwCkBAIC0xNDYsMTQgKzE0NiwxNCBAQAogQUFVRElPX0FQSSB2b2lkIEFBdWRpb1N0cmVhbUJ1aWxkZXJfc2V0Q2hhbm5lbENvdW50KEFBdWRpb1N0cmVhbUJ1aWxkZXIqIGJ1aWxkZXIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50MzJfdCBjaGFubmVsQ291bnQpCiB7Ci0gICAgQXVkaW9TdHJlYW1CdWlsZGVyICpzdHJlYW1CdWlsZGVyID0gY29udmVydEFBdWRpb0J1aWxkZXJUb1N0cmVhbUJ1aWxkZXIoYnVpbGRlcik7Ci0gICAgc3RyZWFtQnVpbGRlci0+c2V0U2FtcGxlc1BlckZyYW1lKGNoYW5uZWxDb3VudCk7CisgICAgQUF1ZGlvU3RyZWFtQnVpbGRlcl9zZXRTYW1wbGVzUGVyRnJhbWUoYnVpbGRlciwgY2hhbm5lbENvdW50KTsKIH0KIAogQUFVRElPX0FQSSB2b2lkIEFBdWRpb1N0cmVhbUJ1aWxkZXJfc2V0U2FtcGxlc1BlckZyYW1lKEFBdWRpb1N0cmVhbUJ1aWxkZXIqIGJ1aWxkZXIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50MzJfdCBjaGFubmVsQ291bnQpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50MzJfdCBzYW1wbGVzUGVyRnJhbWUpCiB7Ci0gICAgQUF1ZGlvU3RyZWFtQnVpbGRlcl9zZXRDaGFubmVsQ291bnQoYnVpbGRlciwgY2hhbm5lbENvdW50KTsKKyAgICBBdWRpb1N0cmVhbUJ1aWxkZXIgKnN0cmVhbUJ1aWxkZXIgPSBjb252ZXJ0QUF1ZGlvQnVpbGRlclRvU3RyZWFtQnVpbGRlcihidWlsZGVyKTsKKyAgICBzdHJlYW1CdWlsZGVyLT5zZXRTYW1wbGVzUGVyRnJhbWUoc2FtcGxlc1BlckZyYW1lKTsKIH0KIAogQUFVRElPX0FQSSB2b2lkIEFBdWRpb1N0cmVhbUJ1aWxkZXJfc2V0RGlyZWN0aW9uKEFBdWRpb1N0cmVhbUJ1aWxkZXIqIGJ1aWxkZXIsCkBAIC0xNjcsNyArMTY3LDkgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFhdWRpb19mb3JtYXRfdCBmb3JtYXQpCiB7CiAgICAgQXVkaW9TdHJlYW1CdWlsZGVyICpzdHJlYW1CdWlsZGVyID0gY29udmVydEFBdWRpb0J1aWxkZXJUb1N0cmVhbUJ1aWxkZXIoYnVpbGRlcik7Ci0gICAgc3RyZWFtQnVpbGRlci0+c2V0Rm9ybWF0KGZvcm1hdCk7CisgICAgLy8gVXNlIGF1ZGlvX2Zvcm1hdF90IGV2ZXJ5d2hlcmUgaW50ZXJuYWxseS4KKyAgICBjb25zdCBhdWRpb19mb3JtYXRfdCBpbnRlcm5hbEZvcm1hdCA9IEFBdWRpb0NvbnZlcnRfYWF1ZGlvVG9BbmRyb2lkRGF0YUZvcm1hdChmb3JtYXQpOworICAgIHN0cmVhbUJ1aWxkZXItPnNldEZvcm1hdChpbnRlcm5hbEZvcm1hdCk7CiB9CiAKIEFBVURJT19BUEkgdm9pZCBBQXVkaW9TdHJlYW1CdWlsZGVyX3NldFNoYXJpbmdNb2RlKEFBdWRpb1N0cmVhbUJ1aWxkZXIqIGJ1aWxkZXIsCkBAIC00MDgsNyArNDEwLDkgQEAKIEFBVURJT19BUEkgYWF1ZGlvX2Zvcm1hdF90IEFBdWRpb1N0cmVhbV9nZXRGb3JtYXQoQUF1ZGlvU3RyZWFtKiBzdHJlYW0pCiB7CiAgICAgQXVkaW9TdHJlYW0gKmF1ZGlvU3RyZWFtID0gY29udmVydEFBdWRpb1N0cmVhbVRvQXVkaW9TdHJlYW0oc3RyZWFtKTsKLSAgICByZXR1cm4gYXVkaW9TdHJlYW0tPmdldEZvcm1hdCgpOworICAgIC8vIFVzZSBhdWRpb19mb3JtYXRfdCBpbnRlcm5hbGx5LgorICAgIGF1ZGlvX2Zvcm1hdF90IGludGVybmFsRm9ybWF0ID0gYXVkaW9TdHJlYW0tPmdldEZvcm1hdCgpOworICAgIHJldHVybiBBQXVkaW9Db252ZXJ0X2FuZHJvaWRUb0FBdWRpb0RhdGFGb3JtYXQoaW50ZXJuYWxGb3JtYXQpOwogfQogCiBBQVVESU9fQVBJIGFhdWRpb19yZXN1bHRfdCBBQXVkaW9TdHJlYW1fc2V0QnVmZmVyU2l6ZUluRnJhbWVzKEFBdWRpb1N0cmVhbSogc3RyZWFtLApkaWZmIC0tZ2l0IGEvbWVkaWEvbGliYWF1ZGlvL3NyYy9jb3JlL0FBdWRpb1N0cmVhbVBhcmFtZXRlcnMuY3BwIGIvbWVkaWEvbGliYWF1ZGlvL3NyYy9jb3JlL0FBdWRpb1N0cmVhbVBhcmFtZXRlcnMuY3BwCmluZGV4IGQ1NjcwMWIuLmJkNDI2OTcgMTAwNjQ0Ci0tLSBhL21lZGlhL2xpYmFhdWRpby9zcmMvY29yZS9BQXVkaW9TdHJlYW1QYXJhbWV0ZXJzLmNwcAorKysgYi9tZWRpYS9saWJhYXVkaW8vc3JjL2NvcmUvQUF1ZGlvU3RyZWFtUGFyYW1ldGVycy5jcHAKQEAgLTQ4LDYgKzQ4LDIwIEBACiAgICAgbUlucHV0UHJlc2V0ICAgICA9IG90aGVyLm1JbnB1dFByZXNldDsKIH0KIAorc3RhdGljIGFhdWRpb19yZXN1bHRfdCBpc0Zvcm1hdFZhbGlkKGF1ZGlvX2Zvcm1hdF90IGZvcm1hdCkgeworICAgIHN3aXRjaCAoZm9ybWF0KSB7CisgICAgICAgIGNhc2UgQVVESU9fRk9STUFUX0RFRkFVTFQ6CisgICAgICAgIGNhc2UgQVVESU9fRk9STUFUX1BDTV8xNl9CSVQ6CisgICAgICAgIGNhc2UgQVVESU9fRk9STUFUX1BDTV9GTE9BVDoKKyAgICAgICAgICAgIGJyZWFrOyAvLyB2YWxpZAorICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgQUxPR0UoImF1ZGlvRm9ybWF0IG5vdCB2YWxpZCwgYXVkaW9fZm9ybWF0X3QgPSAweCUwOHgiLCBmb3JtYXQpOworICAgICAgICAgICAgcmV0dXJuIEFBVURJT19FUlJPUl9JTlZBTElEX0ZPUk1BVDsKKyAgICAgICAgICAgIC8vIGJyZWFrOworICAgIH0KKyAgICByZXR1cm4gQUFVRElPX09LOworfQorCiBhYXVkaW9fcmVzdWx0X3QgQUF1ZGlvU3RyZWFtUGFyYW1ldGVyczo6dmFsaWRhdGUoKSBjb25zdCB7CiAgICAgaWYgKG1TYW1wbGVzUGVyRnJhbWUgIT0gQUFVRElPX1VOU1BFQ0lGSUVECiAgICAgICAgICYmIChtU2FtcGxlc1BlckZyYW1lIDwgU0FNUExFU19QRVJfRlJBTUVfTUlOIHx8IG1TYW1wbGVzUGVyRnJhbWUgPiBTQU1QTEVTX1BFUl9GUkFNRV9NQVgpKSB7CkBAIC03OSwxNiArOTMsOCBAQAogICAgICAgICAgICAgLy8gYnJlYWs7CiAgICAgfQogCi0gICAgc3dpdGNoIChtQXVkaW9Gb3JtYXQpIHsKLSAgICAgICAgY2FzZSBBQVVESU9fRk9STUFUX1VOU1BFQ0lGSUVEOgotICAgICAgICBjYXNlIEFBVURJT19GT1JNQVRfUENNX0kxNjoKLSAgICAgICAgY2FzZSBBQVVESU9fRk9STUFUX1BDTV9GTE9BVDoKLSAgICAgICAgICAgIGJyZWFrOyAvLyB2YWxpZAotICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgQUxPR0UoImF1ZGlvRm9ybWF0IG5vdCB2YWxpZCA9ICVkIiwgbUF1ZGlvRm9ybWF0KTsKLSAgICAgICAgICAgIHJldHVybiBBQVVESU9fRVJST1JfSU5WQUxJRF9GT1JNQVQ7Ci0gICAgICAgICAgICAvLyBicmVhazsKLSAgICB9CisgICAgYWF1ZGlvX3Jlc3VsdF90IHJlc3VsdCA9IGlzRm9ybWF0VmFsaWQgKG1BdWRpb0Zvcm1hdCk7CisgICAgaWYgKHJlc3VsdCAhPSBBQVVESU9fT0spIHJldHVybiByZXN1bHQ7CiAKICAgICBpZiAobVNhbXBsZVJhdGUgIT0gQUFVRElPX1VOU1BFQ0lGSUVECiAgICAgICAgICYmIChtU2FtcGxlUmF0ZSA8IFNBTVBMRV9SQVRFX0haX01JTiB8fCBtU2FtcGxlUmF0ZSA+IFNBTVBMRV9SQVRFX0haX01BWCkpIHsKZGlmZiAtLWdpdCBhL21lZGlhL2xpYmFhdWRpby9zcmMvY29yZS9BQXVkaW9TdHJlYW1QYXJhbWV0ZXJzLmggYi9tZWRpYS9saWJhYXVkaW8vc3JjL2NvcmUvQUF1ZGlvU3RyZWFtUGFyYW1ldGVycy5oCmluZGV4IGNlNWRhY2QuLjZiZWI0YjIgMTAwNjQ0Ci0tLSBhL21lZGlhL2xpYmFhdWRpby9zcmMvY29yZS9BQXVkaW9TdHJlYW1QYXJhbWV0ZXJzLmgKKysrIGIvbWVkaWEvbGliYWF1ZGlvL3NyYy9jb3JlL0FBdWRpb1N0cmVhbVBhcmFtZXRlcnMuaApAQCAtNTYsMTEgKzU2LDExIEBACiAgICAgICAgIG1TYW1wbGVzUGVyRnJhbWUgPSBzYW1wbGVzUGVyRnJhbWU7CiAgICAgfQogCi0gICAgYWF1ZGlvX2Zvcm1hdF90IGdldEZvcm1hdCgpIGNvbnN0IHsKKyAgICBhdWRpb19mb3JtYXRfdCBnZXRGb3JtYXQoKSBjb25zdCB7CiAgICAgICAgIHJldHVybiBtQXVkaW9Gb3JtYXQ7CiAgICAgfQogCi0gICAgdm9pZCBzZXRGb3JtYXQoYWF1ZGlvX2Zvcm1hdF90IGF1ZGlvRm9ybWF0KSB7CisgICAgdm9pZCBzZXRGb3JtYXQoYXVkaW9fZm9ybWF0X3QgYXVkaW9Gb3JtYXQpIHsKICAgICAgICAgbUF1ZGlvRm9ybWF0ID0gYXVkaW9Gb3JtYXQ7CiAgICAgfQogCkBAIC0xMjAsOCArMTIwLDExIEBACiAgICAgICAgIG1TZXNzaW9uSWQgPSBzZXNzaW9uSWQ7CiAgICAgfQogCisgICAgLyoqCisgICAgICogQHJldHVybiBieXRlcyBwZXIgZnJhbWUgb2YgZ2V0Rm9ybWF0KCkKKyAgICAgKi8KICAgICBpbnQzMl90IGNhbGN1bGF0ZUJ5dGVzUGVyRnJhbWUoKSBjb25zdCB7Ci0gICAgICAgIHJldHVybiBnZXRTYW1wbGVzUGVyRnJhbWUoKSAqIEFBdWRpb0NvbnZlcnRfZm9ybWF0VG9TaXplSW5CeXRlcyhnZXRGb3JtYXQoKSk7CisgICAgICAgIHJldHVybiBnZXRTYW1wbGVzUGVyRnJhbWUoKSAqIGF1ZGlvX2J5dGVzX3Blcl9zYW1wbGUoZ2V0Rm9ybWF0KCkpOwogICAgIH0KIAogICAgIC8qKgpAQCAtMTM5LDcgKzE0Miw3IEBACiAgICAgaW50MzJfdCAgICAgICAgICAgICAgICAgICAgbVNhbXBsZVJhdGUgICAgICA9IEFBVURJT19VTlNQRUNJRklFRDsKICAgICBpbnQzMl90ICAgICAgICAgICAgICAgICAgICBtRGV2aWNlSWQgICAgICAgID0gQUFVRElPX1VOU1BFQ0lGSUVEOwogICAgIGFhdWRpb19zaGFyaW5nX21vZGVfdCAgICAgIG1TaGFyaW5nTW9kZSAgICAgPSBBQVVESU9fU0hBUklOR19NT0RFX1NIQVJFRDsKLSAgICBhYXVkaW9fZm9ybWF0X3QgICAgICAgICAgICBtQXVkaW9Gb3JtYXQgICAgID0gQUFVRElPX0ZPUk1BVF9VTlNQRUNJRklFRDsKKyAgICBhdWRpb19mb3JtYXRfdCAgICAgICAgICAgICBtQXVkaW9Gb3JtYXQgICAgID0gQVVESU9fRk9STUFUX0RFRkFVTFQ7CiAgICAgYWF1ZGlvX2RpcmVjdGlvbl90ICAgICAgICAgbURpcmVjdGlvbiAgICAgICA9IEFBVURJT19ESVJFQ1RJT05fT1VUUFVUOwogICAgIGFhdWRpb191c2FnZV90ICAgICAgICAgICAgIG1Vc2FnZSAgICAgICAgICAgPSBBQVVESU9fVU5TUEVDSUZJRUQ7CiAgICAgYWF1ZGlvX2NvbnRlbnRfdHlwZV90ICAgICAgbUNvbnRlbnRUeXBlICAgICA9IEFBVURJT19VTlNQRUNJRklFRDsKZGlmZiAtLWdpdCBhL21lZGlhL2xpYmFhdWRpby9zcmMvY29yZS9BdWRpb1N0cmVhbS5oIGIvbWVkaWEvbGliYWF1ZGlvL3NyYy9jb3JlL0F1ZGlvU3RyZWFtLmgKaW5kZXggMzFiODk1Yy4uNjAyMDBiMiAxMDA2NDQKLS0tIGEvbWVkaWEvbGliYWF1ZGlvL3NyYy9jb3JlL0F1ZGlvU3RyZWFtLmgKKysrIGIvbWVkaWEvbGliYWF1ZGlvL3NyYy9jb3JlL0F1ZGlvU3RyZWFtLmgKQEAgLTE5Miw3ICsxOTIsNyBAQAogICAgICAgICByZXR1cm4gbVNhbXBsZVJhdGU7CiAgICAgfQogCi0gICAgYWF1ZGlvX2Zvcm1hdF90IGdldEZvcm1hdCgpICBjb25zdCB7CisgICAgYXVkaW9fZm9ybWF0X3QgZ2V0Rm9ybWF0KCkgIGNvbnN0IHsKICAgICAgICAgcmV0dXJuIG1Gb3JtYXQ7CiAgICAgfQogCkBAIC0yNDksMjEgKzI0OSwxNCBAQAogICAgICAqIFRoaXMgaXMgb25seSB2YWxpZCBhZnRlciBzZXRGb3JtYXQoKSBoYXMgYmVlbiBjYWxsZWQuCiAgICAgICovCiAgICAgaW50MzJfdCBnZXRCeXRlc1BlclNhbXBsZSgpIGNvbnN0IHsKLSAgICAgICAgcmV0dXJuIEFBdWRpb0NvbnZlcnRfZm9ybWF0VG9TaXplSW5CeXRlcyhtRm9ybWF0KTsKKyAgICAgICAgcmV0dXJuIGF1ZGlvX2J5dGVzX3Blcl9zYW1wbGUobUZvcm1hdCk7CiAgICAgfQogCiAgICAgLyoqCiAgICAgICogVGhpcyBpcyBvbmx5IHZhbGlkIGFmdGVyIHNldFNhbXBsZXNQZXJGcmFtZSgpIGFuZCBzZXREZXZpY2VGb3JtYXQoKSBoYXZlIGJlZW4gY2FsbGVkLgogICAgICAqLwogICAgIGludDMyX3QgZ2V0Qnl0ZXNQZXJEZXZpY2VGcmFtZSgpIGNvbnN0IHsKLSAgICAgICAgcmV0dXJuIG1TYW1wbGVzUGVyRnJhbWUgKiBnZXRCeXRlc1BlckRldmljZVNhbXBsZSgpOwotICAgIH0KLQotICAgIC8qKgotICAgICAqIFRoaXMgaXMgb25seSB2YWxpZCBhZnRlciBzZXREZXZpY2VGb3JtYXQoKSBoYXMgYmVlbiBjYWxsZWQuCi0gICAgICovCi0gICAgaW50MzJfdCBnZXRCeXRlc1BlckRldmljZVNhbXBsZSgpIGNvbnN0IHsKLSAgICAgICAgcmV0dXJuIEFBdWRpb0NvbnZlcnRfZm9ybWF0VG9TaXplSW5CeXRlcyhnZXREZXZpY2VGb3JtYXQoKSk7CisgICAgICAgIHJldHVybiBnZXRTYW1wbGVzUGVyRnJhbWUoKSAqIGF1ZGlvX2J5dGVzX3Blcl9zYW1wbGUoZ2V0RGV2aWNlRm9ybWF0KCkpOwogICAgIH0KIAogICAgIHZpcnR1YWwgaW50NjRfdCBnZXRGcmFtZXNXcml0dGVuKCkgPSAwOwpAQCAtNDc4LDE4ICs0NzEsMTggQEAKICAgICAvKioKICAgICAgKiBUaGlzIHNob3VsZCBub3QgYmUgY2FsbGVkIGFmdGVyIHRoZSBvcGVuKCkgY2FsbC4KICAgICAgKi8KLSAgICB2b2lkIHNldEZvcm1hdChhYXVkaW9fZm9ybWF0X3QgZm9ybWF0KSB7CisgICAgdm9pZCBzZXRGb3JtYXQoYXVkaW9fZm9ybWF0X3QgZm9ybWF0KSB7CiAgICAgICAgIG1Gb3JtYXQgPSBmb3JtYXQ7CiAgICAgfQogCiAgICAgLyoqCiAgICAgICogVGhpcyBzaG91bGQgbm90IGJlIGNhbGxlZCBhZnRlciB0aGUgb3BlbigpIGNhbGwuCiAgICAgICovCi0gICAgdm9pZCBzZXREZXZpY2VGb3JtYXQoYWF1ZGlvX2Zvcm1hdF90IGZvcm1hdCkgeworICAgIHZvaWQgc2V0RGV2aWNlRm9ybWF0KGF1ZGlvX2Zvcm1hdF90IGZvcm1hdCkgewogICAgICAgICBtRGV2aWNlRm9ybWF0ID0gZm9ybWF0OwogICAgIH0KIAotICAgIGFhdWRpb19mb3JtYXRfdCBnZXREZXZpY2VGb3JtYXQoKSBjb25zdCB7CisgICAgYXVkaW9fZm9ybWF0X3QgZ2V0RGV2aWNlRm9ybWF0KCkgY29uc3QgewogICAgICAgICByZXR1cm4gbURldmljZUZvcm1hdDsKICAgICB9CiAKQEAgLTU2NSw3ICs1NTgsNyBAQAogICAgIGludDMyX3QgICAgICAgICAgICAgICAgICAgICBtRGV2aWNlSWQgPSBBQVVESU9fVU5TUEVDSUZJRUQ7CiAgICAgYWF1ZGlvX3NoYXJpbmdfbW9kZV90ICAgICAgIG1TaGFyaW5nTW9kZSA9IEFBVURJT19TSEFSSU5HX01PREVfU0hBUkVEOwogICAgIGJvb2wgICAgICAgICAgICAgICAgICAgICAgICBtU2hhcmluZ01vZGVNYXRjaFJlcXVpcmVkID0gZmFsc2U7IC8vIG11c3QgbWF0Y2ggc2hhcmluZyBtb2RlIHJlcXVlc3RlZAotICAgIGFhdWRpb19mb3JtYXRfdCAgICAgICAgICAgICBtRm9ybWF0ID0gQUFVRElPX0ZPUk1BVF9VTlNQRUNJRklFRDsKKyAgICBhdWRpb19mb3JtYXRfdCAgICAgICAgICAgICAgbUZvcm1hdCA9IEFVRElPX0ZPUk1BVF9ERUZBVUxUOwogICAgIGFhdWRpb19zdHJlYW1fc3RhdGVfdCAgICAgICBtU3RhdGUgPSBBQVVESU9fU1RSRUFNX1NUQVRFX1VOSU5JVElBTElaRUQ7CiAgICAgYWF1ZGlvX3BlcmZvcm1hbmNlX21vZGVfdCAgIG1QZXJmb3JtYW5jZU1vZGUgPSBBQVVESU9fUEVSRk9STUFOQ0VfTU9ERV9OT05FOwogCkBAIC01NzcsNyArNTcwLDcgQEAKIAogICAgIC8vIFNvbWV0aW1lcyB0aGUgaGFyZHdhcmUgaXMgb3BlcmF0aW5nIHdpdGggYSBkaWZmZXJlbnQgZm9ybWF0IGZyb20gdGhlIGFwcC4KICAgICAvLyBUaGVuIHdlIHJlcXVpcmUgY29udmVyc2lvbiBpbiBBQXVkaW8uCi0gICAgYWF1ZGlvX2Zvcm1hdF90ICAgICAgICAgICAgIG1EZXZpY2VGb3JtYXQgPSBBQVVESU9fRk9STUFUX1VOU1BFQ0lGSUVEOworICAgIGF1ZGlvX2Zvcm1hdF90ICAgICAgICAgICAgICBtRGV2aWNlRm9ybWF0ID0gQVVESU9fRk9STUFUX0lOVkFMSUQ7CiAKICAgICAvLyBjYWxsYmFjayAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKZGlmZiAtLWdpdCBhL21lZGlhL2xpYmFhdWRpby9zcmMvZmlmby9GaWZvQnVmZmVyLmNwcCBiL21lZGlhL2xpYmFhdWRpby9zcmMvZmlmby9GaWZvQnVmZmVyLmNwcAppbmRleCBiMDkyNThlLi5mNTExM2YyIDEwMDY0NAotLS0gYS9tZWRpYS9saWJhYXVkaW8vc3JjL2ZpZm8vRmlmb0J1ZmZlci5jcHAKKysrIGIvbWVkaWEvbGliYWF1ZGlvL3NyYy9maWZvL0ZpZm9CdWZmZXIuY3BwCkBAIC0yMywzMCArMjMsMjYgQEAKICNpbmNsdWRlIDx1dGlscy9Mb2cuaD4KIAogI2luY2x1ZGUgPGFsZ29yaXRobT4KKyNpbmNsdWRlIDxtZW1vcnk+CiAKICNpbmNsdWRlICJGaWZvQ29udHJvbGxlckJhc2UuaCIKICNpbmNsdWRlICJGaWZvQ29udHJvbGxlci5oIgogI2luY2x1ZGUgIkZpZm9Db250cm9sbGVySW5kaXJlY3QuaCIKICNpbmNsdWRlICJGaWZvQnVmZmVyLmgiCiAKLXVzaW5nIG5hbWVzcGFjZSBhbmRyb2lkOyAvLyBUT0RPIGp1c3QgaW1wb3J0IG5hbWVzIG5lZWRlZAordXNpbmcgYW5kcm9pZDo6Rmlmb0J1ZmZlcjsKK3VzaW5nIGFuZHJvaWQ6OmZpZm9fZnJhbWVzX3Q7CiAKIEZpZm9CdWZmZXI6OkZpZm9CdWZmZXIoaW50MzJfdCBieXRlc1BlckZyYW1lLCBmaWZvX2ZyYW1lc190IGNhcGFjaXR5SW5GcmFtZXMpCi0gICAgICAgIDogbUZyYW1lQ2FwYWNpdHkoY2FwYWNpdHlJbkZyYW1lcykKLSAgICAgICAgLCBtQnl0ZXNQZXJGcmFtZShieXRlc1BlckZyYW1lKQotICAgICAgICAsIG1TdG9yYWdlKG51bGxwdHIpCi0gICAgICAgICwgbUZyYW1lc1JlYWRDb3VudCgwKQotICAgICAgICAsIG1GcmFtZXNVbmRlcnJ1bkNvdW50KDApCi0gICAgICAgICwgbVVuZGVycnVuQ291bnQoMCkKKyAgICAgICAgOiBtQnl0ZXNQZXJGcmFtZShieXRlc1BlckZyYW1lKQogewotICAgIC8vIFRPRE8gSGFuZGxlIHBvc3NpYmxlIGZhaWx1cmVzIHRvIGFsbG9jYXRlLiBNb3ZlIG91dCBvZiBjb25zdHJ1Y3Rvcj8KLSAgICBtRmlmbyA9IG5ldyBGaWZvQ29udHJvbGxlcihjYXBhY2l0eUluRnJhbWVzLCBjYXBhY2l0eUluRnJhbWVzKTsKKyAgICBtRmlmbyA9IHN0ZDo6bWFrZV91bmlxdWU8Rmlmb0NvbnRyb2xsZXI+KGNhcGFjaXR5SW5GcmFtZXMsIGNhcGFjaXR5SW5GcmFtZXMpOwogICAgIC8vIGFsbG9jYXRlIGJ1ZmZlcgogICAgIGludDMyX3QgYnl0ZXNQZXJCdWZmZXIgPSBieXRlc1BlckZyYW1lICogY2FwYWNpdHlJbkZyYW1lczsKICAgICBtU3RvcmFnZSA9IG5ldyB1aW50OF90W2J5dGVzUGVyQnVmZmVyXTsKICAgICBtU3RvcmFnZU93bmVkID0gdHJ1ZTsKLSAgICBBTE9HVigiY2FwYWNpdHlJbkZyYW1lcyA9ICVkLCBieXRlc1BlckZyYW1lID0gJWQiLAotICAgICAgICAgIGNhcGFjaXR5SW5GcmFtZXMsIGJ5dGVzUGVyRnJhbWUpOworICAgIEFMT0dWKCIlcygpIGNhcGFjaXR5SW5GcmFtZXMgPSAlZCwgYnl0ZXNQZXJGcmFtZSA9ICVkIiwKKyAgICAgICAgICBfX2Z1bmNfXywgY2FwYWNpdHlJbkZyYW1lcywgYnl0ZXNQZXJGcmFtZSk7CiB9CiAKIEZpZm9CdWZmZXI6OkZpZm9CdWZmZXIoIGludDMyX3QgICBieXRlc1BlckZyYW1lLApAQCAtNTUsMTQgKzUxLDEwIEBACiAgICAgICAgICAgICAgICAgICAgICAgICBmaWZvX2NvdW50ZXJfdCAqICB3cml0ZUluZGV4QWRkcmVzcywKICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKiAgZGF0YVN0b3JhZ2VBZGRyZXNzCiAgICAgICAgICAgICAgICAgICAgICAgICApCi0gICAgICAgIDogbUZyYW1lQ2FwYWNpdHkoY2FwYWNpdHlJbkZyYW1lcykKLSAgICAgICAgLCBtQnl0ZXNQZXJGcmFtZShieXRlc1BlckZyYW1lKQorICAgICAgICA6IG1CeXRlc1BlckZyYW1lKGJ5dGVzUGVyRnJhbWUpCiAgICAgICAgICwgbVN0b3JhZ2Uoc3RhdGljX2Nhc3Q8dWludDhfdCAqPihkYXRhU3RvcmFnZUFkZHJlc3MpKQotICAgICAgICAsIG1GcmFtZXNSZWFkQ291bnQoMCkKLSAgICAgICAgLCBtRnJhbWVzVW5kZXJydW5Db3VudCgwKQotICAgICAgICAsIG1VbmRlcnJ1bkNvdW50KDApCiB7Ci0gICAgbUZpZm8gPSBuZXcgRmlmb0NvbnRyb2xsZXJJbmRpcmVjdChjYXBhY2l0eUluRnJhbWVzLAorICAgIG1GaWZvID0gc3RkOjptYWtlX3VuaXF1ZTxGaWZvQ29udHJvbGxlckluZGlyZWN0PihjYXBhY2l0eUluRnJhbWVzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FwYWNpdHlJbkZyYW1lcywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlYWRJbmRleEFkZHJlc3MsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3cml0ZUluZGV4QWRkcmVzcyk7CkBAIC03MywxMCArNjUsOCBAQAogICAgIGlmIChtU3RvcmFnZU93bmVkKSB7CiAgICAgICAgIGRlbGV0ZVtdIG1TdG9yYWdlOwogICAgIH0KLSAgICBkZWxldGUgbUZpZm87CiB9CiAKLQogaW50MzJfdCBGaWZvQnVmZmVyOjpjb252ZXJ0RnJhbWVzVG9CeXRlcyhmaWZvX2ZyYW1lc190IGZyYW1lcykgewogICAgIHJldHVybiBmcmFtZXMgKiBtQnl0ZXNQZXJGcmFtZTsKIH0KQEAgLTg3LDExICs3NywxMiBAQAogICAgIHdyYXBwaW5nQnVmZmVyLT5kYXRhWzFdID0gbnVsbHB0cjsKICAgICB3cmFwcGluZ0J1ZmZlci0+bnVtRnJhbWVzWzFdID0gMDsKICAgICBpZiAoZnJhbWVzQXZhaWxhYmxlID4gMCkgeworICAgICAgICBmaWZvX2ZyYW1lc190IGNhcGFjaXR5ID0gbUZpZm8tPmdldENhcGFjaXR5KCk7CiAgICAgICAgIHVpbnQ4X3QgKnNvdXJjZSA9ICZtU3RvcmFnZVtjb252ZXJ0RnJhbWVzVG9CeXRlcyhzdGFydEluZGV4KV07CiAgICAgICAgIC8vIERvZXMgdGhlIGF2YWlsYWJsZSBkYXRhIGNyb3NzIHRoZSBlbmQgb2YgdGhlIEZJRk8/Ci0gICAgICAgIGlmICgoc3RhcnRJbmRleCArIGZyYW1lc0F2YWlsYWJsZSkgPiBtRnJhbWVDYXBhY2l0eSkgeworICAgICAgICBpZiAoKHN0YXJ0SW5kZXggKyBmcmFtZXNBdmFpbGFibGUpID4gY2FwYWNpdHkpIHsKICAgICAgICAgICAgIHdyYXBwaW5nQnVmZmVyLT5kYXRhWzBdID0gc291cmNlOwotICAgICAgICAgICAgZmlmb19mcmFtZXNfdCBmaXJzdEZyYW1lcyA9IG1GcmFtZUNhcGFjaXR5IC0gc3RhcnRJbmRleDsKKyAgICAgICAgICAgIGZpZm9fZnJhbWVzX3QgZmlyc3RGcmFtZXMgPSBjYXBhY2l0eSAtIHN0YXJ0SW5kZXg7CiAgICAgICAgICAgICB3cmFwcGluZ0J1ZmZlci0+bnVtRnJhbWVzWzBdID0gZmlyc3RGcmFtZXM7CiAgICAgICAgICAgICB3cmFwcGluZ0J1ZmZlci0+ZGF0YVsxXSA9ICZtU3RvcmFnZVswXTsKICAgICAgICAgICAgIHdyYXBwaW5nQnVmZmVyLT5udW1GcmFtZXNbMV0gPSBmcmFtZXNBdmFpbGFibGUgLSBmaXJzdEZyYW1lczsKQEAgLTEwNyw3ICs5OCw4IEBACiAKIGZpZm9fZnJhbWVzX3QgRmlmb0J1ZmZlcjo6Z2V0RnVsbERhdGFBdmFpbGFibGUoV3JhcHBpbmdCdWZmZXIgKndyYXBwaW5nQnVmZmVyKSB7CiAgICAgLy8gVGhlIEZJRk8gbWlnaHQgYmUgb3ZlcmZ1bGwgc28gY2xpcCB0byBjYXBhY2l0eS4KLSAgICBmaWZvX2ZyYW1lc190IGZyYW1lc0F2YWlsYWJsZSA9IHN0ZDo6bWluKG1GaWZvLT5nZXRGdWxsRnJhbWVzQXZhaWxhYmxlKCksIG1GcmFtZUNhcGFjaXR5KTsKKyAgICBmaWZvX2ZyYW1lc190IGZyYW1lc0F2YWlsYWJsZSA9IHN0ZDo6bWluKG1GaWZvLT5nZXRGdWxsRnJhbWVzQXZhaWxhYmxlKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtRmlmby0+Z2V0Q2FwYWNpdHkoKSk7CiAgICAgZmlmb19mcmFtZXNfdCBzdGFydEluZGV4ID0gbUZpZm8tPmdldFJlYWRJbmRleCgpOwogICAgIGZpbGxXcmFwcGluZ0J1ZmZlcih3cmFwcGluZ0J1ZmZlciwgZnJhbWVzQXZhaWxhYmxlLCBzdGFydEluZGV4KTsKICAgICByZXR1cm4gZnJhbWVzQXZhaWxhYmxlOwpAQCAtMTE1LDcgKzEwNyw4IEBACiAKIGZpZm9fZnJhbWVzX3QgRmlmb0J1ZmZlcjo6Z2V0RW1wdHlSb29tQXZhaWxhYmxlKFdyYXBwaW5nQnVmZmVyICp3cmFwcGluZ0J1ZmZlcikgewogICAgIC8vIFRoZSBGSUZPIG1pZ2h0IGhhdmUgdW5kZXJydW4gc28gY2xpcCB0byBjYXBhY2l0eS4KLSAgICBmaWZvX2ZyYW1lc190IGZyYW1lc0F2YWlsYWJsZSA9IHN0ZDo6bWluKG1GaWZvLT5nZXRFbXB0eUZyYW1lc0F2YWlsYWJsZSgpLCBtRnJhbWVDYXBhY2l0eSk7CisgICAgZmlmb19mcmFtZXNfdCBmcmFtZXNBdmFpbGFibGUgPSBzdGQ6Om1pbihtRmlmby0+Z2V0RW1wdHlGcmFtZXNBdmFpbGFibGUoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1GaWZvLT5nZXRDYXBhY2l0eSgpKTsKICAgICBmaWZvX2ZyYW1lc190IHN0YXJ0SW5kZXggPSBtRmlmby0+Z2V0V3JpdGVJbmRleCgpOwogICAgIGZpbGxXcmFwcGluZ0J1ZmZlcih3cmFwcGluZ0J1ZmZlciwgZnJhbWVzQXZhaWxhYmxlLCBzdGFydEluZGV4KTsKICAgICByZXR1cm4gZnJhbWVzQXZhaWxhYmxlOwpAQCAtMTgzLDIzICsxNzYsNiBAQAogICAgIHJldHVybiBmcmFtZXNXcml0dGVuOwogfQogCi1maWZvX2ZyYW1lc190IEZpZm9CdWZmZXI6OnJlYWROb3codm9pZCAqYnVmZmVyLCBmaWZvX2ZyYW1lc190IG51bUZyYW1lcykgewotICAgIG1MYXN0UmVhZFNpemUgPSBudW1GcmFtZXM7Ci0gICAgZmlmb19mcmFtZXNfdCBmcmFtZXNMZWZ0ID0gbnVtRnJhbWVzOwotICAgIGZpZm9fZnJhbWVzX3QgZnJhbWVzUmVhZCA9IHJlYWQoYnVmZmVyLCBudW1GcmFtZXMpOwotICAgIGZyYW1lc0xlZnQgLT0gZnJhbWVzUmVhZDsKLSAgICBtRnJhbWVzUmVhZENvdW50ICs9IGZyYW1lc1JlYWQ7Ci0gICAgbUZyYW1lc1VuZGVycnVuQ291bnQgKz0gZnJhbWVzTGVmdDsKLSAgICAvLyBaZXJvIG91dCBhbnkgc2FtcGxlcyB3ZSBjb3VsZCBub3Qgc2V0LgotICAgIGlmIChmcmFtZXNMZWZ0ID4gMCkgewotICAgICAgICBtVW5kZXJydW5Db3VudCsrOwotICAgICAgICBpbnQzMl90IGJ5dGVzVG9aZXJvID0gY29udmVydEZyYW1lc1RvQnl0ZXMoZnJhbWVzTGVmdCk7Ci0gICAgICAgIG1lbXNldChidWZmZXIsIDAsIGJ5dGVzVG9aZXJvKTsKLSAgICB9Ci0KLSAgICByZXR1cm4gZnJhbWVzUmVhZDsKLX0KLQogZmlmb19mcmFtZXNfdCBGaWZvQnVmZmVyOjpnZXRUaHJlc2hvbGQoKSB7CiAgICAgcmV0dXJuIG1GaWZvLT5nZXRUaHJlc2hvbGQoKTsKIH0KZGlmZiAtLWdpdCBhL21lZGlhL2xpYmFhdWRpby9zcmMvZmlmby9GaWZvQnVmZmVyLmggYi9tZWRpYS9saWJhYXVkaW8vc3JjL2ZpZm8vRmlmb0J1ZmZlci5oCmluZGV4IGY1YTllMjcuLjBkMTg4YzQgMTAwNjQ0Ci0tLSBhL21lZGlhL2xpYmFhdWRpby9zcmMvZmlmby9GaWZvQnVmZmVyLmgKKysrIGIvbWVkaWEvbGliYWF1ZGlvL3NyYy9maWZvL0ZpZm9CdWZmZXIuaApAQCAtMTcsNiArMTcsNyBAQAogI2lmbmRlZiBGSUZPX0ZJRk9fQlVGRkVSX0gKICNkZWZpbmUgRklGT19GSUZPX0JVRkZFUl9ICiAKKyNpbmNsdWRlIDxtZW1vcnk+CiAjaW5jbHVkZSA8c3RkaW50Lmg+CiAKICNpbmNsdWRlICJGaWZvQ29udHJvbGxlckJhc2UuaCIKQEAgLTc3LDI0ICs3OCwxMiBAQAogICAgICAqLwogICAgIGZpZm9fZnJhbWVzX3QgZ2V0RW1wdHlSb29tQXZhaWxhYmxlKFdyYXBwaW5nQnVmZmVyICp3cmFwcGluZ0J1ZmZlcik7CiAKLSAgICAvKioKLSAgICAgKiBDb3B5IGRhdGEgZnJvbSB0aGUgRklGTyBpbnRvIHRoZSBidWZmZXIuCi0gICAgICogQHBhcmFtIGJ1ZmZlcgotICAgICAqIEBwYXJhbSBudW1GcmFtZXMKLSAgICAgKiBAcmV0dXJuCi0gICAgICovCi0gICAgZmlmb19mcmFtZXNfdCByZWFkTm93KHZvaWQgKmJ1ZmZlciwgZmlmb19mcmFtZXNfdCBudW1GcmFtZXMpOwotCi0gICAgaW50NjRfdCBnZXROZXh0UmVhZFRpbWUoaW50MzJfdCBmcmFtZVJhdGUpOwotCi0gICAgaW50MzJfdCBnZXRVbmRlcnJ1bkNvdW50KCkgY29uc3QgeyByZXR1cm4gbVVuZGVycnVuQ291bnQ7IH0KLQotICAgIEZpZm9Db250cm9sbGVyQmFzZSAqZ2V0Rmlmb0NvbnRyb2xsZXJCYXNlKCkgeyByZXR1cm4gbUZpZm87IH0KLQogICAgIGludDMyX3QgZ2V0Qnl0ZXNQZXJGcmFtZSgpIHsKICAgICAgICAgcmV0dXJuIG1CeXRlc1BlckZyYW1lOwogICAgIH0KIAorICAgIC8vIFByb3h5IG1ldGhvZHMgZm9yIHRoZSBpbnRlcm5hbCBGaWZvQ29udHJvbGxlcgorCiAgICAgZmlmb19jb3VudGVyX3QgZ2V0UmVhZENvdW50ZXIoKSB7CiAgICAgICAgIHJldHVybiBtRmlmby0+Z2V0UmVhZENvdW50ZXIoKTsKICAgICB9CkBAIC0xMTEsNiArMTAwLDIyIEBACiAgICAgICAgIG1GaWZvLT5zZXRXcml0ZUNvdW50ZXIobik7CiAgICAgfQogCisgICAgdm9pZCBhZHZhbmNlUmVhZEluZGV4KGZpZm9fZnJhbWVzX3QgbnVtRnJhbWVzKSB7CisgICAgICAgIG1GaWZvLT5hZHZhbmNlUmVhZEluZGV4KG51bUZyYW1lcyk7CisgICAgfQorCisgICAgdm9pZCBhZHZhbmNlV3JpdGVJbmRleChmaWZvX2ZyYW1lc190IG51bUZyYW1lcykgeworICAgICAgICBtRmlmby0+YWR2YW5jZVdyaXRlSW5kZXgobnVtRnJhbWVzKTsKKyAgICB9CisKKyAgICBmaWZvX2ZyYW1lc190IGdldEVtcHR5RnJhbWVzQXZhaWxhYmxlKCkgeworICAgICAgICByZXR1cm4gbUZpZm8tPmdldEVtcHR5RnJhbWVzQXZhaWxhYmxlKCk7CisgICAgfQorCisgICAgZmlmb19mcmFtZXNfdCBnZXRGdWxsRnJhbWVzQXZhaWxhYmxlKCkgeworICAgICAgICByZXR1cm4gbUZpZm8tPmdldEZ1bGxGcmFtZXNBdmFpbGFibGUoKTsKKyAgICB9CisKICAgICAvKgogICAgICAqIFRoaXMgaXMgZ2VuZXJhbGx5IG9ubHkgY2FsbGVkIGJlZm9yZSBvciBhZnRlciB0aGUgYnVmZmVyIGlzIHVzZWQuCiAgICAgICovCkBAIC0xMjEsMTUgKzEyNiwxMiBAQAogICAgIHZvaWQgZmlsbFdyYXBwaW5nQnVmZmVyKFdyYXBwaW5nQnVmZmVyICp3cmFwcGluZ0J1ZmZlciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQzMl90IGZyYW1lc0F2YWlsYWJsZSwgaW50MzJfdCBzdGFydEluZGV4KTsKIAotICAgIGNvbnN0IGZpZm9fZnJhbWVzX3QgbUZyYW1lQ2FwYWNpdHk7Ci0gICAgY29uc3QgaW50MzJfdCBtQnl0ZXNQZXJGcmFtZTsKLSAgICB1aW50OF90ICptU3RvcmFnZTsKLSAgICBib29sIG1TdG9yYWdlT3duZWQ7IC8vIGRpZCB0aGlzIG9iamVjdCBhbGxvY2F0ZSB0aGUgc3RvcmFnZT8KLSAgICBGaWZvQ29udHJvbGxlckJhc2UgKm1GaWZvOwotICAgIGZpZm9fY291bnRlcl90IG1GcmFtZXNSZWFkQ291bnQ7Ci0gICAgZmlmb19jb3VudGVyX3QgbUZyYW1lc1VuZGVycnVuQ291bnQ7Ci0gICAgaW50MzJfdCBtVW5kZXJydW5Db3VudDsgLy8gbmVlZD8ganVzdCB1c2UgZnJhbWVzCi0gICAgaW50MzJfdCBtTGFzdFJlYWRTaXplOworICAgIGNvbnN0IGludDMyX3QgICAgICAgICAgICAgbUJ5dGVzUGVyRnJhbWU7CisgICAgLy8gV2UgZG8gbm90IHVzZSBhIHN0ZDo6dW5pcXVlX3B0ciBmb3IgbVN0b3JhZ2UgYmVjYXVzZSBpdCBpcyBvZnRlbiBhIHBvaW50ZXIgdG8KKyAgICAvLyBtZW1vcnkgc2hhcmVkIGJldHdlZW4gcHJvY2Vzc2VzIGFuZCBjYW5ub3QgYmUgZGVsZXRlZCB0cml2aWFsbHkuCisgICAgdWludDhfdCAgICAgICAgICAgICAgICAgICptU3RvcmFnZSA9IG51bGxwdHI7CisgICAgYm9vbCAgICAgICAgICAgICAgICAgICAgICBtU3RvcmFnZU93bmVkID0gZmFsc2U7IC8vIGRpZCB0aGlzIG9iamVjdCBhbGxvY2F0ZSB0aGUgc3RvcmFnZT8KKyAgICBzdGQ6OnVuaXF1ZV9wdHI8Rmlmb0NvbnRyb2xsZXJCYXNlPiBtRmlmb3t9OwogfTsKIAogfSAgLy8gYW5kcm9pZApkaWZmIC0tZ2l0IGEvbWVkaWEvbGliYWF1ZGlvL3NyYy9maWZvL0ZpZm9Db250cm9sbGVyLmggYi9tZWRpYS9saWJhYXVkaW8vc3JjL2ZpZm8vRmlmb0NvbnRyb2xsZXIuaAppbmRleCA3OWQ5OGExLi4wNTdhOTRlIDEwMDY0NAotLS0gYS9tZWRpYS9saWJhYXVkaW8vc3JjL2ZpZm8vRmlmb0NvbnRyb2xsZXIuaAorKysgYi9tZWRpYS9saWJhYXVkaW8vc3JjL2ZpZm8vRmlmb0NvbnRyb2xsZXIuaApAQCAtMzAsNyArMzAsNyBAQAogY2xhc3MgRmlmb0NvbnRyb2xsZXIgOiBwdWJsaWMgRmlmb0NvbnRyb2xsZXJCYXNlCiB7CiBwdWJsaWM6Ci0gICAgRmlmb0NvbnRyb2xsZXIoZmlmb19jb3VudGVyX3QgYnVmZmVyU2l6ZSwgZmlmb19jb3VudGVyX3QgdGhyZXNob2xkKQorICAgIEZpZm9Db250cm9sbGVyKGZpZm9fZnJhbWVzX3QgYnVmZmVyU2l6ZSwgZmlmb19mcmFtZXNfdCB0aHJlc2hvbGQpCiAgICAgOiBGaWZvQ29udHJvbGxlckJhc2UoYnVmZmVyU2l6ZSwgdGhyZXNob2xkKQogICAgICwgbVJlYWRDb3VudGVyKDApCiAgICAgLCBtV3JpdGVDb3VudGVyKDApCmRpZmYgLS1naXQgYS9tZWRpYS9saWJhYXVkaW8vc3JjL2ZpZm8vRmlmb0NvbnRyb2xsZXJCYXNlLmNwcCBiL21lZGlhL2xpYmFhdWRpby9zcmMvZmlmby9GaWZvQ29udHJvbGxlckJhc2UuY3BwCmluZGV4IDE0YTJiZTEuLjk4ODVjYjAgMTAwNjQ0Ci0tLSBhL21lZGlhL2xpYmFhdWRpby9zcmMvZmlmby9GaWZvQ29udHJvbGxlckJhc2UuY3BwCisrKyBiL21lZGlhL2xpYmFhdWRpby9zcmMvZmlmby9GaWZvQ29udHJvbGxlckJhc2UuY3BwCkBAIC01OSw1ICs1OSwxMCBAQAogfQogCiB2b2lkIEZpZm9Db250cm9sbGVyQmFzZTo6c2V0VGhyZXNob2xkKGZpZm9fZnJhbWVzX3QgdGhyZXNob2xkKSB7CisgICAgaWYgKHRocmVzaG9sZCA+IG1DYXBhY2l0eSkgeworICAgICAgICB0aHJlc2hvbGQgPSBtQ2FwYWNpdHk7CisgICAgfSBlbHNlIGlmICh0aHJlc2hvbGQgPCAwKSB7CisgICAgICAgIHRocmVzaG9sZCA9IDA7CisgICAgfQogICAgIG1UaHJlc2hvbGQgPSB0aHJlc2hvbGQ7CiB9CmRpZmYgLS1naXQgYS9tZWRpYS9saWJhYXVkaW8vc3JjL2ZpZm8vRmlmb0NvbnRyb2xsZXJCYXNlLmggYi9tZWRpYS9saWJhYXVkaW8vc3JjL2ZpZm8vRmlmb0NvbnRyb2xsZXJCYXNlLmgKaW5kZXggNjRhZjc3Ny4uMWVkYjhhMyAxMDA2NDQKLS0tIGEvbWVkaWEvbGliYWF1ZGlvL3NyYy9maWZvL0ZpZm9Db250cm9sbGVyQmFzZS5oCisrKyBiL21lZGlhL2xpYmFhdWRpby9zcmMvZmlmby9GaWZvQ29udHJvbGxlckJhc2UuaApAQCAtMTAyLDYgKzEwMiw5IEBACiAgICAgLyoqCiAgICAgICogWW91IGNhbiByZXF1ZXN0IHRoYXQgdGhlIGJ1ZmZlciBub3QgYmUgZmlsbGVkIGFib3ZlIGEgbWF4aW11bQogICAgICAqIG51bWJlciBvZiBmcmFtZXMuCisgICAgICoKKyAgICAgKiBUaGUgdGhyZXNob2xkIHdpbGwgYmUgY2xpcHBlZCBiZXR3ZWVuIHplcm8gYW5kIHRoZSBidWZmZXIgY2FwYWNpdHkuCisgICAgICoKICAgICAgKiBAcGFyYW0gdGhyZXNob2xkIGVmZmVjdGl2ZSBzaXplIG9mIHRoZSBidWZmZXIKICAgICAgKi8KICAgICB2b2lkIHNldFRocmVzaG9sZChmaWZvX2ZyYW1lc190IHRocmVzaG9sZCk7CmRpZmYgLS1naXQgYS9tZWRpYS9saWJhYXVkaW8vc3JjL2Zsb3dncmFwaC9BdWRpb1Byb2Nlc3NvckJhc2UuY3BwIGIvbWVkaWEvbGliYWF1ZGlvL3NyYy9mbG93Z3JhcGgvQXVkaW9Qcm9jZXNzb3JCYXNlLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NjY3ZmRiCi0tLSAvZGV2L251bGwKKysrIGIvbWVkaWEvbGliYWF1ZGlvL3NyYy9mbG93Z3JhcGgvQXVkaW9Qcm9jZXNzb3JCYXNlLmNwcApAQCAtMCwwICsxLDgyIEBACisvKgorICogQ29weXJpZ2h0IDIwMTUgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworCisjaW5jbHVkZSA8YWxnb3JpdGhtPgorI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorI2luY2x1ZGUgIkF1ZGlvUHJvY2Vzc29yQmFzZS5oIgorCit1c2luZyBuYW1lc3BhY2UgZmxvd2dyYXBoOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworaW50MzJfdCBBdWRpb1Byb2Nlc3NvckJhc2U6OnB1bGxEYXRhKGludDY0X3QgZnJhbWVQb3NpdGlvbiwgaW50MzJfdCBudW1GcmFtZXMpIHsKKyAgICBpZiAoZnJhbWVQb3NpdGlvbiA+IG1MYXN0RnJhbWVQb3NpdGlvbikgeworICAgICAgICBtTGFzdEZyYW1lUG9zaXRpb24gPSBmcmFtZVBvc2l0aW9uOworICAgICAgICBtRnJhbWVzVmFsaWQgPSBvblByb2Nlc3MoZnJhbWVQb3NpdGlvbiwgbnVtRnJhbWVzKTsKKyAgICB9CisgICAgcmV0dXJuIG1GcmFtZXNWYWxpZDsKK30KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK0F1ZGlvRmxvYXRCbG9ja1BvcnQ6OkF1ZGlvRmxvYXRCbG9ja1BvcnQoQXVkaW9Qcm9jZXNzb3JCYXNlICZwYXJlbnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50MzJfdCBzYW1wbGVzUGVyRnJhbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50MzJfdCBmcmFtZXNQZXJCbG9jaykKKyAgICAgICAgOiBBdWRpb1BvcnQocGFyZW50LCBzYW1wbGVzUGVyRnJhbWUpCisgICAgICAgICwgbUZyYW1lc1BlckJsb2NrKGZyYW1lc1BlckJsb2NrKQorICAgICAgICAsIG1TYW1wbGVCbG9jayhOVUxMKSB7CisgICAgaW50MzJfdCBudW1GbG9hdHMgPSBmcmFtZXNQZXJCbG9jayAqIGdldFNhbXBsZXNQZXJGcmFtZSgpOworICAgIG1TYW1wbGVCbG9jayA9IG5ldyBmbG9hdFtudW1GbG9hdHNdezAuMGZ9OworfQorCitBdWRpb0Zsb2F0QmxvY2tQb3J0Ojp+QXVkaW9GbG9hdEJsb2NrUG9ydCgpIHsKKyAgICBkZWxldGVbXSBtU2FtcGxlQmxvY2s7Cit9CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitpbnQzMl90IEF1ZGlvRmxvYXRPdXRwdXRQb3J0OjpwdWxsRGF0YShpbnQ2NF90IGZyYW1lUG9zaXRpb24sIGludDMyX3QgbnVtRnJhbWVzKSB7CisgICAgbnVtRnJhbWVzID0gc3RkOjptaW4oZ2V0RnJhbWVzUGVyQmxvY2soKSwgbnVtRnJhbWVzKTsKKyAgICByZXR1cm4gbVBhcmVudC5wdWxsRGF0YShmcmFtZVBvc2l0aW9uLCBudW1GcmFtZXMpOworfQorCisvLyBUaGVzZSBuZWVkIHRvIGJlIGluIHRoZSAuY3BwIGZpbGUgYmVjYXVzZSBvZiBmb3J3YXJkIGNyb3NzIHJlZmVyZW5jZXMuCit2b2lkIEF1ZGlvRmxvYXRPdXRwdXRQb3J0Ojpjb25uZWN0KEF1ZGlvRmxvYXRJbnB1dFBvcnQgKnBvcnQpIHsKKyAgICBwb3J0LT5jb25uZWN0KHRoaXMpOworfQorCit2b2lkIEF1ZGlvRmxvYXRPdXRwdXRQb3J0OjpkaXNjb25uZWN0KEF1ZGlvRmxvYXRJbnB1dFBvcnQgKnBvcnQpIHsKKyAgICBwb3J0LT5kaXNjb25uZWN0KHRoaXMpOworfQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworaW50MzJfdCBBdWRpb0Zsb2F0SW5wdXRQb3J0OjpwdWxsRGF0YShpbnQ2NF90IGZyYW1lUG9zaXRpb24sIGludDMyX3QgbnVtRnJhbWVzKSB7CisgICAgcmV0dXJuIChtQ29ubmVjdGVkID09IE5VTEwpCisgICAgICAgICAgICA/IHN0ZDo6bWluKGdldEZyYW1lc1BlckJsb2NrKCksIG51bUZyYW1lcykKKyAgICAgICAgICAgIDogbUNvbm5lY3RlZC0+cHVsbERhdGEoZnJhbWVQb3NpdGlvbiwgbnVtRnJhbWVzKTsKK30KKworZmxvYXQgKkF1ZGlvRmxvYXRJbnB1dFBvcnQ6OmdldEJsb2NrKCkgeworICAgIGlmIChtQ29ubmVjdGVkID09IE5VTEwpIHsKKyAgICAgICAgcmV0dXJuIEF1ZGlvRmxvYXRCbG9ja1BvcnQ6OmdldEJsb2NrKCk7IC8vIGxvYWRlZCB1c2luZyBzZXRWYWx1ZSgpCisgICAgfSBlbHNlIHsKKyAgICAgICAgcmV0dXJuIG1Db25uZWN0ZWQtPmdldEJsb2NrKCk7CisgICAgfQorfQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworaW50MzJfdCBBdWRpb1Npbms6OnB1bGwoaW50MzJfdCBudW1GcmFtZXMpIHsKKyAgICBpbnQzMl90IGFjdHVhbEZyYW1lcyA9IGlucHV0LnB1bGxEYXRhKG1GcmFtZVBvc2l0aW9uLCBudW1GcmFtZXMpOworICAgIG1GcmFtZVBvc2l0aW9uICs9IGFjdHVhbEZyYW1lczsKKyAgICByZXR1cm4gYWN0dWFsRnJhbWVzOworfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL21lZGlhL2xpYmFhdWRpby9zcmMvZmxvd2dyYXBoL0F1ZGlvUHJvY2Vzc29yQmFzZS5oIGIvbWVkaWEvbGliYWF1ZGlvL3NyYy9mbG93Z3JhcGgvQXVkaW9Qcm9jZXNzb3JCYXNlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWRhNDZhZQotLS0gL2Rldi9udWxsCisrKyBiL21lZGlhL2xpYmFhdWRpby9zcmMvZmxvd2dyYXBoL0F1ZGlvUHJvY2Vzc29yQmFzZS5oCkBAIC0wLDAgKzEsMjkzIEBACisvKgorICogQ29weXJpZ2h0IDIwMTUgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworCisvKgorICogQXVkaW9Qcm9jZXNzb3JCYXNlLmgKKyAqCisgKiBBdWRpbyBwcm9jZXNzaW5nIG5vZGUgYW5kIHBvcnRzIHRoYXQgY2FuIGJlIHVzZWQgaW4gYSBzaW1wbGUgZGF0YSBmbG93IGdyYXBoLgorICovCisKKyNpZm5kZWYgRkxPV0dSQVBIX0FVRElPX1BST0NFU1NPUl9CQVNFX0gKKyNkZWZpbmUgRkxPV0dSQVBIX0FVRElPX1BST0NFU1NPUl9CQVNFX0gKKworI2luY2x1ZGUgPGNhc3NlcnQ+CisjaW5jbHVkZSA8Y3N0cmluZz4KKyNpbmNsdWRlIDxtYXRoLmg+CisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisjaW5jbHVkZSA8dGltZS5oPgorI2luY2x1ZGUgPHVuaXN0ZC5oPgorCisvLyBUT0RPIGNvbnNpZGVyIHB1Ymxpc2hpbmcgYWxsIGhlYWRlciBmaWxlcyB1bmRlciAiaW5jbHVkZS9saWJhYXVkaW8vRmxvd0dyYXBoLmgiCisKK25hbWVzcGFjZSBmbG93Z3JhcGggeworCisvLyBEZWZhdWx0IGJsb2NrIHNpemUgdGhhdCBjYW4gYmUgb3ZlcnJpZGRlbiB3aGVuIHRoZSBBdWRpb0Zsb2F0QmxvY2tQb3J0IGlzIGNyZWF0ZWQuCisvLyBJZiBpdCBpcyB0b28gc21hbGwgdGhlbiB3ZSB3aWxsIGhhdmUgdG9vIG11Y2ggb3ZlcmhlYWQgZnJvbSBzd2l0Y2hpbmcgYmV0d2VlbiBub2Rlcy4KKy8vIElmIGl0IGlzIHRvbyBoaWdoIHRoZW4gd2Ugd2lsbCB0aHJhc2ggdGhlIGNhY2hlcy4KK2NvbnN0ZXhwciBpbnQga0RlZmF1bHRCbG9ja1NpemUgPSA4OyAvLyBhcmJpdHJhcnkKKworY2xhc3MgQXVkaW9GbG9hdElucHV0UG9ydDsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK2NsYXNzIEF1ZGlvUHJvY2Vzc29yQmFzZSB7CitwdWJsaWM6CisgICAgdmlydHVhbCB+QXVkaW9Qcm9jZXNzb3JCYXNlKCkgPSBkZWZhdWx0OworCisgICAgLyoqCisgICAgICogUGVyZm9ybSBjdXN0b20gZnVuY3Rpb24uCisgICAgICoKKyAgICAgKiBAcGFyYW0gZnJhbWVQb3NpdGlvbiBpbmRleCBvZiBmaXJzdCBmcmFtZSB0byBiZSBwcm9jZXNzZWQKKyAgICAgKiBAcGFyYW0gbnVtRnJhbWVzIG1heGltdW0gbnVtYmVyIG9mIGZyYW1lcyByZXF1ZXN0ZWQgZm9yIHByb2Nlc3NpbmcKKyAgICAgKiBAcmV0dXJuIG51bWJlciBvZiBmcmFtZXMgYWN0dWFsbHkgcHJvY2Vzc2VkCisgICAgICovCisgICAgdmlydHVhbCBpbnQzMl90IG9uUHJvY2VzcyhpbnQ2NF90IGZyYW1lUG9zaXRpb24sIGludDMyX3QgbnVtRnJhbWVzKSA9IDA7CisKKyAgICAvKioKKyAgICAgKiBJZiB0aGUgZnJhbWVQb3NpdGlvbiBpcyBhdCBvciBhZnRlciB0aGUgbGFzdCBmcmFtZSBwb3NpdGlvbiB0aGVuIGNhbGwgb25Qcm9jZXNzKCkuCisgICAgICogVGhpcyBwcmV2ZW50cyBpbmZpbml0ZSByZWN1cnNpb24gaW4gY2FzZSBvZiBjeWNsaWMgZ3JhcGhzLgorICAgICAqIEl0IGFsc28gcHJldmVudHMgbm9kZXMgdXBzdHJlYW0gZnJvbSBhIGJyYW5jaCBmcm9tIGJlaW5nIGV4ZWN1dGVkIHR3aWNlLgorICAgICAqCisgICAgICogQHBhcmFtIGZyYW1lUG9zaXRpb24KKyAgICAgKiBAcGFyYW0gbnVtRnJhbWVzCisgICAgICogQHJldHVybgorICAgICAqLworICAgIGludDMyX3QgcHVsbERhdGEoaW50NjRfdCBmcmFtZVBvc2l0aW9uLCBpbnQzMl90IG51bUZyYW1lcyk7CisKK3Byb3RlY3RlZDoKKyAgICBpbnQ2NF90ICBtTGFzdEZyYW1lUG9zaXRpb24gPSAtMTsgLy8gU3RhcnQgYXQgLTEgc28gdGhhdCB0aGUgZmlyc3QgcHVsbCB3b3Jrcy4KKworcHJpdmF0ZToKKyAgICBpbnQzMl90ICBtRnJhbWVzVmFsaWQgPSAwOyAvLyBudW0gdmFsaWQgZnJhbWVzIGluIHRoZSBibG9jaworfTsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qKgorICAqIFRoaXMgaXMgYSBjb25uZWN0b3IgdGhhdCBhbGxvd3MgZGF0YSB0byBmbG93IGJldHdlZW4gbW9kdWxlcy4KKyAgKi8KK2NsYXNzIEF1ZGlvUG9ydCB7CitwdWJsaWM6CisgICAgQXVkaW9Qb3J0KEF1ZGlvUHJvY2Vzc29yQmFzZSAmcGFyZW50LCBpbnQzMl90IHNhbXBsZXNQZXJGcmFtZSkKKyAgICAgICAgICAgIDogbVBhcmVudChwYXJlbnQpCisgICAgICAgICAgICAsIG1TYW1wbGVzUGVyRnJhbWUoc2FtcGxlc1BlckZyYW1lKSB7CisgICAgfQorCisgICAgLy8gUG9ydHMgYXJlIG9mdGVuIGRlY2xhcmVkIHB1YmxpYy4gU28gbGV0J3MgbWFrZSB0aGVtIG5vbi1jb3B5YWJsZS4KKyAgICBBdWRpb1BvcnQoY29uc3QgQXVkaW9Qb3J0JikgPSBkZWxldGU7CisgICAgQXVkaW9Qb3J0JiBvcGVyYXRvcj0oY29uc3QgQXVkaW9Qb3J0JikgPSBkZWxldGU7CisKKyAgICBpbnQzMl90IGdldFNhbXBsZXNQZXJGcmFtZSgpIGNvbnN0IHsKKyAgICAgICAgcmV0dXJuIG1TYW1wbGVzUGVyRnJhbWU7CisgICAgfQorCitwcm90ZWN0ZWQ6CisgICAgQXVkaW9Qcm9jZXNzb3JCYXNlICZtUGFyZW50OworCitwcml2YXRlOgorICAgIGNvbnN0IGludDMyX3QgICAgbVNhbXBsZXNQZXJGcmFtZSA9IDE7Cit9OworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyoqCisgKiBUaGlzIHBvcnQgY29udGFpbnMgYSBmbG9hdCB0eXBlIGJ1ZmZlci4KKyAqIFRoZSBzaXplIGlzIGZyYW1lc1BlckJsb2NrICogc2FtcGxlc1BlckZyYW1lKS4KKyAqLworY2xhc3MgQXVkaW9GbG9hdEJsb2NrUG9ydCAgOiBwdWJsaWMgQXVkaW9Qb3J0IHsKK3B1YmxpYzoKKyAgICBBdWRpb0Zsb2F0QmxvY2tQb3J0KEF1ZGlvUHJvY2Vzc29yQmFzZSAmbVBhcmVudCwKKyAgICAgICAgICAgICAgICAgICBpbnQzMl90IHNhbXBsZXNQZXJGcmFtZSwKKyAgICAgICAgICAgICAgICAgICBpbnQzMl90IGZyYW1lc1BlckJsb2NrID0ga0RlZmF1bHRCbG9ja1NpemUKKyAgICAgICAgICAgICAgICApOworCisgICAgdmlydHVhbCB+QXVkaW9GbG9hdEJsb2NrUG9ydCgpOworCisgICAgaW50MzJfdCBnZXRGcmFtZXNQZXJCbG9jaygpIGNvbnN0IHsKKyAgICAgICAgcmV0dXJuIG1GcmFtZXNQZXJCbG9jazsKKyAgICB9CisKK3Byb3RlY3RlZDoKKworICAgIC8qKgorICAgICAqIEByZXR1cm4gYnVmZmVyIGludGVybmFsIHRvIHRoZSBwb3J0IG9yIGZyb20gYSBjb25uZWN0ZWQgcG9ydAorICAgICAqLworICAgIHZpcnR1YWwgZmxvYXQgKmdldEJsb2NrKCkgeworICAgICAgICByZXR1cm4gbVNhbXBsZUJsb2NrOworICAgIH0KKworCitwcml2YXRlOgorICAgIGNvbnN0IGludDMyX3QgICAgbUZyYW1lc1BlckJsb2NrID0gMTsKKyAgICBmbG9hdCAgICAgICAgICAgKm1TYW1wbGVCbG9jayA9IG51bGxwdHI7IC8vIGFsbG9jYXRlZCBpbiBjb25zdHJ1Y3RvcgorfTsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qKgorICAqIFRoZSByZXN1bHRzIG9mIGEgbW9kdWxlIGFyZSBzdG9yZWQgaW4gdGhlIGJ1ZmZlciBvZiB0aGUgb3V0cHV0IHBvcnRzLgorICAqLworY2xhc3MgQXVkaW9GbG9hdE91dHB1dFBvcnQgOiBwdWJsaWMgQXVkaW9GbG9hdEJsb2NrUG9ydCB7CitwdWJsaWM6CisgICAgQXVkaW9GbG9hdE91dHB1dFBvcnQoQXVkaW9Qcm9jZXNzb3JCYXNlICZwYXJlbnQsIGludDMyX3Qgc2FtcGxlc1BlckZyYW1lKQorICAgICAgICAgICAgOiBBdWRpb0Zsb2F0QmxvY2tQb3J0KHBhcmVudCwgc2FtcGxlc1BlckZyYW1lKSB7CisgICAgfQorCisgICAgdmlydHVhbCB+QXVkaW9GbG9hdE91dHB1dFBvcnQoKSA9IGRlZmF1bHQ7CisKKyAgICB1c2luZyBBdWRpb0Zsb2F0QmxvY2tQb3J0OjpnZXRCbG9jazsKKworICAgIC8qKgorICAgICAqIENhbGwgdGhlIHBhcmVudCBtb2R1bGUncyBvblByb2Nlc3MoKSBtZXRob2QuCisgICAgICogVGhhdCBtYXkgcHVsbCBkYXRhIGZyb20gaXRzIGlucHV0cyBhbmQgcmVjdXJzaXZlbHkKKyAgICAgKiBwcm9jZXNzIHRoZSBlbnRpcmUgZ3JhcGguCisgICAgICogQHJldHVybiBudW1iZXIgb2YgZnJhbWVzIGFjdHVhbGx5IHB1bGxlZAorICAgICAqLworICAgIGludDMyX3QgcHVsbERhdGEoaW50NjRfdCBmcmFtZVBvc2l0aW9uLCBpbnQzMl90IG51bUZyYW1lcyk7CisKKyAgICAvKioKKyAgICAgKiBDb25uZWN0IHRvIHRoZSBpbnB1dCBvZiBhbm90aGVyIG1vZHVsZS4KKyAgICAgKiBBbiBpbnB1dCBwb3J0IGNhbiBvbmx5IGhhdmUgb25lIGNvbm5lY3Rpb24uCisgICAgICogQW4gb3V0cHV0IHBvcnQgY2FuIGhhdmUgbXVsdGlwbGUgY29ubmVjdGlvbnMuCisgICAgICogSWYgeW91IGNvbm5lY3QgYSBzZWNvbmQgb3V0cHV0IHBvcnQgdG8gYW4gaW5wdXQgcG9ydAorICAgICAqIHRoZW4gaXQgb3ZlcndyaXRlcyB0aGUgcHJldmlvdXMgY29ubmVjdGlvbi4KKyAgICAgKgorICAgICAqIFRoaXMgbm90IHRocmVhZCBzYWZlLiBEbyBub3QgbW9kaWZ5IHRoZSBncmFwaCB0b3BvbG9neSBmb3JtIGFub3RoZXIgdGhyZWFkIHdoaWxlIHJ1bm5pbmcuCisgICAgICovCisgICAgdm9pZCBjb25uZWN0KEF1ZGlvRmxvYXRJbnB1dFBvcnQgKnBvcnQpOworCisgICAgLyoqCisgICAgICogRGlzY29ubmVjdCBmcm9tIHRoZSBpbnB1dCBvZiBhbm90aGVyIG1vZHVsZS4KKyAgICAgKiBUaGlzIG5vdCB0aHJlYWQgc2FmZS4KKyAgICAgKi8KKyAgICB2b2lkIGRpc2Nvbm5lY3QoQXVkaW9GbG9hdElucHV0UG9ydCAqcG9ydCk7Cit9OworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworY2xhc3MgQXVkaW9GbG9hdElucHV0UG9ydCA6IHB1YmxpYyBBdWRpb0Zsb2F0QmxvY2tQb3J0IHsKK3B1YmxpYzoKKyAgICBBdWRpb0Zsb2F0SW5wdXRQb3J0KEF1ZGlvUHJvY2Vzc29yQmFzZSAmcGFyZW50LCBpbnQzMl90IHNhbXBsZXNQZXJGcmFtZSkKKyAgICAgICAgICAgIDogQXVkaW9GbG9hdEJsb2NrUG9ydChwYXJlbnQsIHNhbXBsZXNQZXJGcmFtZSkgeworICAgIH0KKworICAgIHZpcnR1YWwgfkF1ZGlvRmxvYXRJbnB1dFBvcnQoKSA9IGRlZmF1bHQ7CisKKyAgICAvKioKKyAgICAgKiBJZiBjb25uZWN0ZWQgdG8gYW4gb3V0cHV0IHBvcnQgdGhlbiB0aGlzIHdpbGwgcmV0dXJuCisgICAgICogdGhhdCBvdXRwdXQgcG9ydHMgYnVmZmVycy4KKyAgICAgKiBJZiBub3QgY29ubmVjdGVkIHRoZW4gaXQgcmV0dXJucyB0aGUgaW5wdXQgcG9ydHMgb3duIGJ1ZmZlcgorICAgICAqIHdoaWNoIGNhbiBiZSBsb2FkZWQgdXNpbmcgc2V0VmFsdWUoKS4KKyAgICAgKi8KKyAgICBmbG9hdCAqZ2V0QmxvY2soKSBvdmVycmlkZTsKKworICAgIC8qKgorICAgICAqIFB1bGwgZGF0YSBmcm9tIGFueSBvdXRwdXQgcG9ydCB0aGF0IGlzIGNvbm5lY3RlZC4KKyAgICAgKi8KKyAgICBpbnQzMl90IHB1bGxEYXRhKGludDY0X3QgZnJhbWVQb3NpdGlvbiwgaW50MzJfdCBudW1GcmFtZXMpOworCisgICAgLyoqCisgICAgICogV3JpdGUgZXZlcnkgdmFsdWUgb2YgdGhlIGZsb2F0IGJ1ZmZlci4KKyAgICAgKiBUaGlzIHZhbHVlIHdpbGwgYmUgaWdub3JlZCBpZiBhbiBvdXRwdXQgcG9ydCBpcyBjb25uZWN0ZWQKKyAgICAgKiB0byB0aGlzIHBvcnQuCisgICAgICovCisgICAgdm9pZCBzZXRWYWx1ZShmbG9hdCB2YWx1ZSkgeworICAgICAgICBpbnQgbnVtRmxvYXRzID0ga0RlZmF1bHRCbG9ja1NpemUgKiBnZXRTYW1wbGVzUGVyRnJhbWUoKTsKKyAgICAgICAgZmxvYXQgKmJ1ZmZlciA9IGdldEJsb2NrKCk7CisgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbnVtRmxvYXRzOyBpKyspIHsKKyAgICAgICAgICAgICpidWZmZXIrKyA9IHZhbHVlOworICAgICAgICB9CisgICAgfQorCisgICAgLyoqCisgICAgICogQ29ubmVjdCB0byB0aGUgb3V0cHV0IG9mIGFub3RoZXIgbW9kdWxlLgorICAgICAqIEFuIGlucHV0IHBvcnQgY2FuIG9ubHkgaGF2ZSBvbmUgY29ubmVjdGlvbi4KKyAgICAgKiBBbiBvdXRwdXQgcG9ydCBjYW4gaGF2ZSBtdWx0aXBsZSBjb25uZWN0aW9ucy4KKyAgICAgKiBUaGlzIG5vdCB0aHJlYWQgc2FmZS4KKyAgICAgKi8KKyAgICB2b2lkIGNvbm5lY3QoQXVkaW9GbG9hdE91dHB1dFBvcnQgKnBvcnQpIHsKKyAgICAgICAgYXNzZXJ0KGdldFNhbXBsZXNQZXJGcmFtZSgpID09IHBvcnQtPmdldFNhbXBsZXNQZXJGcmFtZSgpKTsKKyAgICAgICAgbUNvbm5lY3RlZCA9IHBvcnQ7CisgICAgfQorCisgICAgdm9pZCBkaXNjb25uZWN0KEF1ZGlvRmxvYXRPdXRwdXRQb3J0ICpwb3J0KSB7CisgICAgICAgIGFzc2VydChtQ29ubmVjdGVkID09IHBvcnQpOworICAgICAgICAodm9pZCkgcG9ydDsKKyAgICAgICAgbUNvbm5lY3RlZCA9IG51bGxwdHI7CisgICAgfQorCisgICAgdm9pZCBkaXNjb25uZWN0KCkgeworICAgICAgICBtQ29ubmVjdGVkID0gbnVsbHB0cjsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgQXVkaW9GbG9hdE91dHB1dFBvcnQgKm1Db25uZWN0ZWQgPSBudWxscHRyOworfTsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK2NsYXNzIEF1ZGlvU291cmNlIDogcHVibGljIEF1ZGlvUHJvY2Vzc29yQmFzZSB7CitwdWJsaWM6CisgICAgZXhwbGljaXQgQXVkaW9Tb3VyY2UoaW50MzJfdCBjaGFubmVsQ291bnQpCisgICAgICAgICAgICA6IG91dHB1dCgqdGhpcywgY2hhbm5lbENvdW50KSB7CisgICAgfQorCisgICAgdmlydHVhbCB+QXVkaW9Tb3VyY2UoKSA9IGRlZmF1bHQ7CisKKyAgICBBdWRpb0Zsb2F0T3V0cHV0UG9ydCBvdXRwdXQ7CisKKyAgICB2b2lkIHNldERhdGEoY29uc3Qgdm9pZCAqZGF0YSwgaW50MzJfdCBudW1GcmFtZXMpIHsKKyAgICAgICAgbURhdGEgPSBkYXRhOworICAgICAgICBtU2l6ZUluRnJhbWVzID0gbnVtRnJhbWVzOworICAgICAgICBtRnJhbWVJbmRleCA9IDA7CisgICAgfQorCitwcm90ZWN0ZWQ6CisgICAgY29uc3Qgdm9pZCAqbURhdGEgPSBudWxscHRyOworICAgIGludDMyX3QgICAgIG1TaXplSW5GcmFtZXMgPSAwOyAvLyBudW1iZXIgb2YgZnJhbWVzIGluIG1EYXRhCisgICAgaW50MzJfdCAgICAgbUZyYW1lSW5kZXggPSAwOyAvLyBpbmRleCBvZiBuZXh0IGZyYW1lIHRvIGJlIHByb2Nlc3NlZAorfTsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK2NsYXNzIEF1ZGlvU2luayA6IHB1YmxpYyBBdWRpb1Byb2Nlc3NvckJhc2UgeworcHVibGljOgorICAgIGV4cGxpY2l0IEF1ZGlvU2luayhpbnQzMl90IGNoYW5uZWxDb3VudCkKKyAgICAgICAgICAgIDogaW5wdXQoKnRoaXMsIGNoYW5uZWxDb3VudCkgeworICAgIH0KKworICAgIHZpcnR1YWwgfkF1ZGlvU2luaygpID0gZGVmYXVsdDsKKworICAgIEF1ZGlvRmxvYXRJbnB1dFBvcnQgaW5wdXQ7CisKKyAgICAvKioKKyAgICAgKiBEdW1teSBwcm9jZXNzb3IuIFRoZSB3b3JrIGhhcHBlbnMgaW4gdGhlIHJlYWQoKSBtZXRob2QuCisgICAgICoKKyAgICAgKiBAcGFyYW0gZnJhbWVQb3NpdGlvbiBpbmRleCBvZiBmaXJzdCBmcmFtZSB0byBiZSBwcm9jZXNzZWQKKyAgICAgKiBAcGFyYW0gbnVtRnJhbWVzCisgICAgICogQHJldHVybiBudW1iZXIgb2YgZnJhbWVzIGFjdHVhbGx5IHByb2Nlc3NlZAorICAgICAqLworICAgIGludDMyX3Qgb25Qcm9jZXNzKGludDY0X3QgZnJhbWVQb3NpdGlvbiwgaW50MzJfdCBudW1GcmFtZXMpIG92ZXJyaWRlIHsKKyAgICAgICAgKHZvaWQpIGZyYW1lUG9zaXRpb247CisgICAgICAgICh2b2lkKSBudW1GcmFtZXM7CisgICAgICAgIHJldHVybiAwOworICAgIH07CisKKyAgICB2aXJ0dWFsIGludDMyX3QgcmVhZCh2b2lkICpkYXRhLCBpbnQzMl90IG51bUZyYW1lcykgPSAwOworCitwcm90ZWN0ZWQ6CisgICAgaW50MzJfdCBwdWxsKGludDMyX3QgbnVtRnJhbWVzKTsKKworcHJpdmF0ZToKKyAgICBpbnQ2NF90IG1GcmFtZVBvc2l0aW9uID0gMDsKK307CisKK30gLyogbmFtZXNwYWNlIGZsb3dncmFwaCAqLworCisjZW5kaWYgLyogRkxPV0dSQVBIX0FVRElPX1BST0NFU1NPUl9CQVNFX0ggKi8KZGlmZiAtLWdpdCBhL21lZGlhL2xpYmFhdWRpby9zcmMvZmxvd2dyYXBoL0NsaXBUb1JhbmdlLmNwcCBiL21lZGlhL2xpYmFhdWRpby9zcmMvZmxvd2dyYXBoL0NsaXBUb1JhbmdlLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iZDljMjJhCi0tLSAvZGV2L251bGwKKysrIGIvbWVkaWEvbGliYWF1ZGlvL3NyYy9mbG93Z3JhcGgvQ2xpcFRvUmFuZ2UuY3BwCkBAIC0wLDAgKzEsNDAgQEAKKy8qCisgKiBDb3B5cmlnaHQgMjAxNSBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCisKKyNpbmNsdWRlIDxhbGdvcml0aG0+CisjaW5jbHVkZSA8dW5pc3RkLmg+CisjaW5jbHVkZSAiQXVkaW9Qcm9jZXNzb3JCYXNlLmgiCisjaW5jbHVkZSAiQ2xpcFRvUmFuZ2UuaCIKKwordXNpbmcgbmFtZXNwYWNlIGZsb3dncmFwaDsKKworQ2xpcFRvUmFuZ2U6OkNsaXBUb1JhbmdlKGludDMyX3QgY2hhbm5lbENvdW50KQorICAgICAgICA6IGlucHV0KCp0aGlzLCBjaGFubmVsQ291bnQpCisgICAgICAgICwgb3V0cHV0KCp0aGlzLCBjaGFubmVsQ291bnQpIHsKK30KKworaW50MzJfdCBDbGlwVG9SYW5nZTo6b25Qcm9jZXNzKGludDY0X3QgZnJhbWVQb3NpdGlvbiwgaW50MzJfdCBudW1GcmFtZXMpIHsKKyAgICBpbnQzMl90IGZyYW1lc1RvUHJvY2VzcyA9IGlucHV0LnB1bGxEYXRhKGZyYW1lUG9zaXRpb24sIG51bUZyYW1lcyk7CisgICAgY29uc3QgZmxvYXQgKmlucHV0QnVmZmVyID0gaW5wdXQuZ2V0QmxvY2soKTsKKyAgICBmbG9hdCAqb3V0cHV0QnVmZmVyID0gb3V0cHV0LmdldEJsb2NrKCk7CisKKyAgICBpbnQzMl90IG51bVNhbXBsZXMgPSBmcmFtZXNUb1Byb2Nlc3MgKiBvdXRwdXQuZ2V0U2FtcGxlc1BlckZyYW1lKCk7CisgICAgZm9yIChpbnQzMl90IGkgPSAwOyBpIDwgbnVtU2FtcGxlczsgaSsrKSB7CisgICAgICAgICpvdXRwdXRCdWZmZXIrKyA9IHN0ZDo6bWluKG1NYXhpbXVtLCBzdGQ6Om1heChtTWluaW11bSwgKmlucHV0QnVmZmVyKyspKTsKKyAgICB9CisKKyAgICByZXR1cm4gZnJhbWVzVG9Qcm9jZXNzOworfQpkaWZmIC0tZ2l0IGEvbWVkaWEvbGliYWF1ZGlvL3NyYy9mbG93Z3JhcGgvQ2xpcFRvUmFuZ2UuaCBiL21lZGlhL2xpYmFhdWRpby9zcmMvZmxvd2dyYXBoL0NsaXBUb1JhbmdlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWVlZjI1NAotLS0gL2Rldi9udWxsCisrKyBiL21lZGlhL2xpYmFhdWRpby9zcmMvZmxvd2dyYXBoL0NsaXBUb1JhbmdlLmgKQEAgLTAsMCArMSw2NyBAQAorLyoKKyAqIENvcHlyaWdodCAyMDE1IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KKworI2lmbmRlZiBGTE9XR1JBUEhfQ0xJUF9UT19SQU5HRV9ICisjZGVmaW5lIEZMT1dHUkFQSF9DTElQX1RPX1JBTkdFX0gKKworI2luY2x1ZGUgPGF0b21pYz4KKyNpbmNsdWRlIDx1bmlzdGQuaD4KKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKworI2luY2x1ZGUgIkF1ZGlvUHJvY2Vzc29yQmFzZS5oIgorCituYW1lc3BhY2UgZmxvd2dyYXBoIHsKKworLy8gVGhpcyBpcyAzIGRCLCAoMTBeKDMvMjApKSwgdG8gbWF0Y2ggdGhlIG1heGltdW0gaGVhZHJvb20gaW4gQXVkaW9UcmFjayBmb3IgZmxvYXQgZGF0YS4KKy8vIEl0IGlzIGRlc2lnbmVkIHRvIGFsbG93IG9jY2FzaW9uYWwgdHJhbnNpZW50IHBlYWtzLgorY29uc3RleHByIGZsb2F0IGtEZWZhdWx0TWF4SGVhZHJvb20gPSAxLjQxMjUzNzU0ZjsKK2NvbnN0ZXhwciBmbG9hdCBrRGVmYXVsdE1pbkhlYWRyb29tID0gLWtEZWZhdWx0TWF4SGVhZHJvb207CisKK2NsYXNzIENsaXBUb1JhbmdlIDogcHVibGljIEF1ZGlvUHJvY2Vzc29yQmFzZSB7CitwdWJsaWM6CisgICAgZXhwbGljaXQgQ2xpcFRvUmFuZ2UoaW50MzJfdCBjaGFubmVsQ291bnQpOworCisgICAgdmlydHVhbCB+Q2xpcFRvUmFuZ2UoKSA9IGRlZmF1bHQ7CisKKyAgICBpbnQzMl90IG9uUHJvY2VzcyhpbnQ2NF90IGZyYW1lUG9zaXRpb24sIGludDMyX3QgbnVtRnJhbWVzKSBvdmVycmlkZTsKKworICAgIHZvaWQgc2V0TWluaW11bShmbG9hdCBtaW4pIHsKKyAgICAgICAgbU1pbmltdW0gPSBtaW47CisgICAgfQorCisgICAgZmxvYXQgZ2V0TWluaW11bSgpIGNvbnN0IHsKKyAgICAgICAgcmV0dXJuIG1NaW5pbXVtOworICAgIH0KKworICAgIHZvaWQgc2V0TWF4aW11bShmbG9hdCBtaW4pIHsKKyAgICAgICAgbU1heGltdW0gPSBtaW47CisgICAgfQorCisgICAgZmxvYXQgZ2V0TWF4aW11bSgpIGNvbnN0IHsKKyAgICAgICAgcmV0dXJuIG1NYXhpbXVtOworICAgIH0KKworICAgIEF1ZGlvRmxvYXRJbnB1dFBvcnQgaW5wdXQ7CisgICAgQXVkaW9GbG9hdE91dHB1dFBvcnQgb3V0cHV0OworCitwcml2YXRlOgorICAgIGZsb2F0IG1NaW5pbXVtID0ga0RlZmF1bHRNaW5IZWFkcm9vbTsKKyAgICBmbG9hdCBtTWF4aW11bSA9IGtEZWZhdWx0TWF4SGVhZHJvb207Cit9OworCit9IC8qIG5hbWVzcGFjZSBmbG93Z3JhcGggKi8KKworI2VuZGlmIC8vRkxPV0dSQVBIX0NMSVBfVE9fUkFOR0VfSApkaWZmIC0tZ2l0IGEvbWVkaWEvbGliYWF1ZGlvL3NyYy9mbG93Z3JhcGgvTW9ub1RvTXVsdGlDb252ZXJ0ZXIuY3BwIGIvbWVkaWEvbGliYWF1ZGlvL3NyYy9mbG93Z3JhcGgvTW9ub1RvTXVsdGlDb252ZXJ0ZXIuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc4YWFkNTIKLS0tIC9kZXYvbnVsbAorKysgYi9tZWRpYS9saWJhYXVkaW8vc3JjL2Zsb3dncmFwaC9Nb25vVG9NdWx0aUNvbnZlcnRlci5jcHAKQEAgLTAsMCArMSw0NyBAQAorLyoKKyAqIENvcHlyaWdodCAyMDE1IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KKworCisjaW5jbHVkZSA8dW5pc3RkLmg+CisjaW5jbHVkZSAiQXVkaW9Qcm9jZXNzb3JCYXNlLmgiCisjaW5jbHVkZSAiTW9ub1RvTXVsdGlDb252ZXJ0ZXIuaCIKKwordXNpbmcgbmFtZXNwYWNlIGZsb3dncmFwaDsKKworTW9ub1RvTXVsdGlDb252ZXJ0ZXI6Ok1vbm9Ub011bHRpQ29udmVydGVyKGludDMyX3QgY2hhbm5lbENvdW50KQorICAgICAgICA6IGlucHV0KCp0aGlzLCAxKQorICAgICAgICAsIG91dHB1dCgqdGhpcywgY2hhbm5lbENvdW50KSB7Cit9CisKK01vbm9Ub011bHRpQ29udmVydGVyOjp+TW9ub1RvTXVsdGlDb252ZXJ0ZXIoKSB7IH0KKworaW50MzJfdCBNb25vVG9NdWx0aUNvbnZlcnRlcjo6b25Qcm9jZXNzKGludDY0X3QgZnJhbWVQb3NpdGlvbiwgaW50MzJfdCBudW1GcmFtZXMpIHsKKyAgICBpbnQzMl90IGZyYW1lc1RvUHJvY2VzcyA9IGlucHV0LnB1bGxEYXRhKGZyYW1lUG9zaXRpb24sIG51bUZyYW1lcyk7CisKKyAgICBjb25zdCBmbG9hdCAqaW5wdXRCdWZmZXIgPSBpbnB1dC5nZXRCbG9jaygpOworICAgIGZsb2F0ICpvdXRwdXRCdWZmZXIgPSBvdXRwdXQuZ2V0QmxvY2soKTsKKyAgICBpbnQzMl90IGNoYW5uZWxDb3VudCA9IG91dHB1dC5nZXRTYW1wbGVzUGVyRnJhbWUoKTsKKyAgICAvLyBUT0RPIG1heWJlIG1vdmUgdG8gYXVkaW9fdXRpbCBhcyBhdWRpb19tb25vX3RvX211bHRpKCkKKyAgICBmb3IgKGludCBpID0gMDsgaSA8IGZyYW1lc1RvUHJvY2VzczsgaSsrKSB7CisgICAgICAgIC8vIHJlYWQgb25lLCB3cml0ZSBtYW55CisgICAgICAgIGZsb2F0IHNhbXBsZSA9ICppbnB1dEJ1ZmZlcisrOworICAgICAgICBmb3IgKGludCBjaGFubmVsID0gMDsgY2hhbm5lbCA8IGNoYW5uZWxDb3VudDsgY2hhbm5lbCsrKSB7CisgICAgICAgICAgICAqb3V0cHV0QnVmZmVyKysgPSBzYW1wbGU7CisgICAgICAgIH0KKyAgICB9CisgICAgcmV0dXJuIGZyYW1lc1RvUHJvY2VzczsKK30KKwpkaWZmIC0tZ2l0IGEvbWVkaWEvbGliYWF1ZGlvL3NyYy9mbG93Z3JhcGgvTW9ub1RvTXVsdGlDb252ZXJ0ZXIuaCBiL21lZGlhL2xpYmFhdWRpby9zcmMvZmxvd2dyYXBoL01vbm9Ub011bHRpQ29udmVydGVyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzRkNTNjNwotLS0gL2Rldi9udWxsCisrKyBiL21lZGlhL2xpYmFhdWRpby9zcmMvZmxvd2dyYXBoL01vbm9Ub011bHRpQ29udmVydGVyLmgKQEAgLTAsMCArMSw0MiBAQAorLyoKKyAqIENvcHlyaWdodCAyMDE1IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KKworCisjaWZuZGVmIEZMT1dHUkFQSF9NT05PX1RPX01VTFRJX0NPTlZFUlRFUl9ICisjZGVmaW5lIEZMT1dHUkFQSF9NT05PX1RPX01VTFRJX0NPTlZFUlRFUl9ICisKKyNpbmNsdWRlIDx1bmlzdGQuaD4KKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKworI2luY2x1ZGUgIkF1ZGlvUHJvY2Vzc29yQmFzZS5oIgorCituYW1lc3BhY2UgZmxvd2dyYXBoIHsKKworY2xhc3MgTW9ub1RvTXVsdGlDb252ZXJ0ZXIgOiBwdWJsaWMgQXVkaW9Qcm9jZXNzb3JCYXNlIHsKK3B1YmxpYzoKKyAgICBleHBsaWNpdCBNb25vVG9NdWx0aUNvbnZlcnRlcihpbnQzMl90IGNoYW5uZWxDb3VudCk7CisKKyAgICB2aXJ0dWFsIH5Nb25vVG9NdWx0aUNvbnZlcnRlcigpOworCisgICAgaW50MzJfdCBvblByb2Nlc3MoaW50NjRfdCBmcmFtZVBvc2l0aW9uLCBpbnQzMl90IG51bUZyYW1lcykgb3ZlcnJpZGU7CisKKyAgICBBdWRpb0Zsb2F0SW5wdXRQb3J0IGlucHV0OworICAgIEF1ZGlvRmxvYXRPdXRwdXRQb3J0IG91dHB1dDsKK307CisKK30gLyogbmFtZXNwYWNlIGZsb3dncmFwaCAqLworCisjZW5kaWYgLy9GTE9XR1JBUEhfTU9OT19UT19NVUxUSV9DT05WRVJURVJfSApkaWZmIC0tZ2l0IGEvbWVkaWEvbGliYWF1ZGlvL3NyYy9mbG93Z3JhcGgvUmFtcExpbmVhci5jcHAgYi9tZWRpYS9saWJhYXVkaW8vc3JjL2Zsb3dncmFwaC9SYW1wTGluZWFyLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hMjYwODI4Ci0tLSAvZGV2L251bGwKKysrIGIvbWVkaWEvbGliYWF1ZGlvL3NyYy9mbG93Z3JhcGgvUmFtcExpbmVhci5jcHAKQEAgLTAsMCArMSw4NSBAQAorLyoKKyAqIENvcHlyaWdodCAyMDE1IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KKworI2RlZmluZSBMT0dfVEFHICJSYW1wTGluZWFyIgorLy8jZGVmaW5lIExPR19OREVCVUcgMAorI2luY2x1ZGUgPHV0aWxzL0xvZy5oPgorCisjaW5jbHVkZSA8YWxnb3JpdGhtPgorI2luY2x1ZGUgPHVuaXN0ZC5oPgorI2luY2x1ZGUgIkF1ZGlvUHJvY2Vzc29yQmFzZS5oIgorI2luY2x1ZGUgIlJhbXBMaW5lYXIuaCIKKwordXNpbmcgbmFtZXNwYWNlIGZsb3dncmFwaDsKKworUmFtcExpbmVhcjo6UmFtcExpbmVhcihpbnQzMl90IGNoYW5uZWxDb3VudCkKKyAgICAgICAgOiBpbnB1dCgqdGhpcywgY2hhbm5lbENvdW50KQorICAgICAgICAsIG91dHB1dCgqdGhpcywgY2hhbm5lbENvdW50KSB7CisgICAgbVRhcmdldC5zdG9yZSgxLjBmKTsKK30KKwordm9pZCBSYW1wTGluZWFyOjpzZXRMZW5ndGhJbkZyYW1lcyhpbnQzMl90IGZyYW1lcykgeworICAgIG1MZW5ndGhJbkZyYW1lcyA9IGZyYW1lczsKK30KKwordm9pZCBSYW1wTGluZWFyOjpzZXRUYXJnZXQoZmxvYXQgdGFyZ2V0KSB7CisgICAgbVRhcmdldC5zdG9yZSh0YXJnZXQpOworfQorCitmbG9hdCBSYW1wTGluZWFyOjppbnRlcnBvbGF0ZUN1cnJlbnQoKSB7CisgICAgcmV0dXJuIG1MZXZlbFRvIC0gKG1SZW1haW5pbmcgKiBtU2NhbGVyKTsKK30KKworaW50MzJfdCBSYW1wTGluZWFyOjpvblByb2Nlc3MoaW50NjRfdCBmcmFtZVBvc2l0aW9uLCBpbnQzMl90IG51bUZyYW1lcykgeworICAgIGludDMyX3QgZnJhbWVzVG9Qcm9jZXNzID0gaW5wdXQucHVsbERhdGEoZnJhbWVQb3NpdGlvbiwgbnVtRnJhbWVzKTsKKyAgICBjb25zdCBmbG9hdCAqaW5wdXRCdWZmZXIgPSBpbnB1dC5nZXRCbG9jaygpOworICAgIGZsb2F0ICpvdXRwdXRCdWZmZXIgPSBvdXRwdXQuZ2V0QmxvY2soKTsKKyAgICBpbnQzMl90IGNoYW5uZWxDb3VudCA9IG91dHB1dC5nZXRTYW1wbGVzUGVyRnJhbWUoKTsKKworICAgIGZsb2F0IHRhcmdldCA9IGdldFRhcmdldCgpOworICAgIGlmICh0YXJnZXQgIT0gbUxldmVsVG8pIHsKKyAgICAgICAgLy8gU3RhcnQgbmV3IHJhbXAuIENvbnRpbnVlIGZyb20gcHJldmlvdXMgbGV2ZWwuCisgICAgICAgIG1MZXZlbEZyb20gPSBpbnRlcnBvbGF0ZUN1cnJlbnQoKTsKKyAgICAgICAgbUxldmVsVG8gPSB0YXJnZXQ7CisgICAgICAgIG1SZW1haW5pbmcgPSBtTGVuZ3RoSW5GcmFtZXM7CisgICAgICAgIEFMT0dWKCIlcygpIG1MZXZlbEZyb20gPSAlZiwgbUxldmVsVG8gPSAlZiwgbVJlbWFpbmluZyA9ICVkLCBtU2NhbGVyID0gJWYiLAorICAgICAgICAgICAgICBfX2Z1bmNfXywgbUxldmVsRnJvbSwgbUxldmVsVG8sIG1SZW1haW5pbmcsIG1TY2FsZXIpOworICAgICAgICBtU2NhbGVyID0gKG1MZXZlbFRvIC0gbUxldmVsRnJvbSkgLyBtTGVuZ3RoSW5GcmFtZXM7IC8vIGZvciBpbnRlcnBvbGF0aW9uCisgICAgfQorCisgICAgaW50MzJfdCBmcmFtZXNMZWZ0ID0gZnJhbWVzVG9Qcm9jZXNzOworCisgICAgaWYgKG1SZW1haW5pbmcgPiAwKSB7IC8vIFJhbXBpbmc/IFRoaXMgZG9lc24ndCBoYXBwZW4gdmVyeSBvZnRlbi4KKyAgICAgICAgaW50MzJfdCBmcmFtZXNUb1JhbXAgPSBzdGQ6Om1pbihmcmFtZXNMZWZ0LCBtUmVtYWluaW5nKTsKKyAgICAgICAgZnJhbWVzTGVmdCAtPSBmcmFtZXNUb1JhbXA7CisgICAgICAgIHdoaWxlIChmcmFtZXNUb1JhbXAgPiAwKSB7CisgICAgICAgICAgICBmbG9hdCBjdXJyZW50TGV2ZWwgPSBpbnRlcnBvbGF0ZUN1cnJlbnQoKTsKKyAgICAgICAgICAgIGZvciAoaW50IGNoID0gMDsgY2ggPCBjaGFubmVsQ291bnQ7IGNoKyspIHsKKyAgICAgICAgICAgICAgICAqb3V0cHV0QnVmZmVyKysgPSAqaW5wdXRCdWZmZXIrKyAqIGN1cnJlbnRMZXZlbDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIG1SZW1haW5pbmctLTsKKyAgICAgICAgICAgIGZyYW1lc1RvUmFtcC0tOworICAgICAgICB9CisgICAgfQorCisgICAgLy8gUHJvY2VzcyBhbnkgZnJhbWVzIGFmdGVyIHRoZSByYW1wLgorICAgIGludDMyX3Qgc2FtcGxlc0xlZnQgPSBmcmFtZXNMZWZ0ICogY2hhbm5lbENvdW50OworICAgIGZvciAoaW50IGkgPSAwOyBpIDwgc2FtcGxlc0xlZnQ7IGkrKykgeworICAgICAgICAqb3V0cHV0QnVmZmVyKysgPSAqaW5wdXRCdWZmZXIrKyAqIG1MZXZlbFRvOworICAgIH0KKworICAgIHJldHVybiBmcmFtZXNUb1Byb2Nlc3M7Cit9CmRpZmYgLS1naXQgYS9tZWRpYS9saWJhYXVkaW8vc3JjL2Zsb3dncmFwaC9SYW1wTGluZWFyLmggYi9tZWRpYS9saWJhYXVkaW8vc3JjL2Zsb3dncmFwaC9SYW1wTGluZWFyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmRjOGY0MQotLS0gL2Rldi9udWxsCisrKyBiL21lZGlhL2xpYmFhdWRpby9zcmMvZmxvd2dyYXBoL1JhbXBMaW5lYXIuaApAQCAtMCwwICsxLDg3IEBACisvKgorICogQ29weXJpZ2h0IDIwMTUgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworCisjaWZuZGVmIEZMT1dHUkFQSF9SQU1QX0xJTkVBUl9ICisjZGVmaW5lIEZMT1dHUkFQSF9SQU1QX0xJTkVBUl9ICisKKyNpbmNsdWRlIDxhdG9taWM+CisjaW5jbHVkZSA8dW5pc3RkLmg+CisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisKKyNpbmNsdWRlICJBdWRpb1Byb2Nlc3NvckJhc2UuaCIKKworbmFtZXNwYWNlIGZsb3dncmFwaCB7CisKK2NsYXNzIFJhbXBMaW5lYXIgOiBwdWJsaWMgQXVkaW9Qcm9jZXNzb3JCYXNlIHsKK3B1YmxpYzoKKyAgICBleHBsaWNpdCBSYW1wTGluZWFyKGludDMyX3QgY2hhbm5lbENvdW50KTsKKworICAgIHZpcnR1YWwgflJhbXBMaW5lYXIoKSA9IGRlZmF1bHQ7CisKKyAgICBpbnQzMl90IG9uUHJvY2VzcyhpbnQ2NF90IGZyYW1lUG9zaXRpb24sIGludDMyX3QgbnVtRnJhbWVzKSBvdmVycmlkZTsKKworICAgIC8qKgorICAgICAqIFRoaXMgaXMgdXNlZCBmb3IgdGhlIG5leHQgcmFtcC4KKyAgICAgKiBDYWxsaW5nIHRoaXMgZG9lcyBub3QgYWZmZWN0IGEgcmFtcCB0aGF0IGlzIGluIHByb2dyZXNzLgorICAgICAqLworICAgIHZvaWQgc2V0TGVuZ3RoSW5GcmFtZXMoaW50MzJfdCBmcmFtZXMpOworCisgICAgaW50MzJfdCBnZXRMZW5ndGhJbkZyYW1lcygpIGNvbnN0IHsKKyAgICAgICAgcmV0dXJuIG1MZW5ndGhJbkZyYW1lczsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1heSBiZSBzYWZlbHkgY2FsbGVkIGJ5IGFub3RoZXIgdGhyZWFkLgorICAgICAqIEBwYXJhbSB0YXJnZXQKKyAgICAgKi8KKyAgICB2b2lkIHNldFRhcmdldChmbG9hdCB0YXJnZXQpOworCisgICAgZmxvYXQgZ2V0VGFyZ2V0KCkgY29uc3QgeworICAgICAgICByZXR1cm4gbVRhcmdldC5sb2FkKCk7CisgICAgfQorCisgICAgLyoqCisgICAgICogRm9yY2UgdGhlIG5leHRTZWdtZW50IHRvIHN0YXJ0IGZyb20gdGhpcyBsZXZlbC4KKyAgICAgKgorICAgICAqIFdBUk5JTkc6IHRoaXMgY2FuIGNhdXNlIGEgZGlzY29udGludWl0eSBpZiBjYWxsZWQgd2hpbGUgdGhlIHJhbXAgaXMgYmVpbmcgdXNlZC4KKyAgICAgKiBPbmx5IGNhbGwgdGhpcyB3aGVuIHNldHRpbmcgdGhlIGluaXRpYWwgcmFtcC4KKyAgICAgKgorICAgICAqIEBwYXJhbSBsZXZlbAorICAgICAqLworICAgIHZvaWQgZm9yY2VDdXJyZW50KGZsb2F0IGxldmVsKSB7CisgICAgICAgIG1MZXZlbEZyb20gPSBsZXZlbDsKKyAgICAgICAgbUxldmVsVG8gPSBsZXZlbDsKKyAgICB9CisKKyAgICBBdWRpb0Zsb2F0SW5wdXRQb3J0IGlucHV0OworICAgIEF1ZGlvRmxvYXRPdXRwdXRQb3J0IG91dHB1dDsKKworcHJpdmF0ZToKKworICAgIGZsb2F0IGludGVycG9sYXRlQ3VycmVudCgpOworCisgICAgc3RkOjphdG9taWM8ZmxvYXQ+ICBtVGFyZ2V0OworCisgICAgaW50MzJfdCAgICAgICAgICAgICBtTGVuZ3RoSW5GcmFtZXMgID0gNDgwMDAuMGYgLyAxMDAuMGYgOyAvLyAxMCBtc2VjIGF0IDQ4MDAwIEh6OworICAgIGludDMyX3QgICAgICAgICAgICAgbVJlbWFpbmluZyAgICAgICA9IDA7CisgICAgZmxvYXQgICAgICAgICAgICAgICBtU2NhbGVyICAgICAgICAgID0gMC4wZjsKKyAgICBmbG9hdCAgICAgICAgICAgICAgIG1MZXZlbEZyb20gICAgICAgPSAwLjBmOworICAgIGZsb2F0ICAgICAgICAgICAgICAgbUxldmVsVG8gICAgICAgICA9IDAuMGY7Cit9OworCit9IC8qIG5hbWVzcGFjZSBmbG93Z3JhcGggKi8KKworI2VuZGlmIC8vRkxPV0dSQVBIX1JBTVBfTElORUFSX0gKZGlmZiAtLWdpdCBhL21lZGlhL2xpYmFhdWRpby9zcmMvZmxvd2dyYXBoL1NpbmtGbG9hdC5jcHAgYi9tZWRpYS9saWJhYXVkaW8vc3JjL2Zsb3dncmFwaC9TaW5rRmxvYXQuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZiM2RjYmMKLS0tIC9kZXYvbnVsbAorKysgYi9tZWRpYS9saWJhYXVkaW8vc3JjL2Zsb3dncmFwaC9TaW5rRmxvYXQuY3BwCkBAIC0wLDAgKzEsNDYgQEAKKy8qCisgKiBDb3B5cmlnaHQgMjAxOCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCisKKyNpbmNsdWRlIDxhbGdvcml0aG0+CisjaW5jbHVkZSA8dW5pc3RkLmg+CisjaW5jbHVkZSAiQXVkaW9Qcm9jZXNzb3JCYXNlLmgiCisjaW5jbHVkZSAiU2lua0Zsb2F0LmgiCisKK3VzaW5nIG5hbWVzcGFjZSBmbG93Z3JhcGg7CisKK1NpbmtGbG9hdDo6U2lua0Zsb2F0KGludDMyX3QgY2hhbm5lbENvdW50KQorICAgICAgICA6IEF1ZGlvU2luayhjaGFubmVsQ291bnQpIHsKK30KKworaW50MzJfdCBTaW5rRmxvYXQ6OnJlYWQodm9pZCAqZGF0YSwgaW50MzJfdCBudW1GcmFtZXMpIHsKKyAgICBmbG9hdCAqZmxvYXREYXRhID0gKGZsb2F0ICopIGRhdGE7CisgICAgaW50MzJfdCBjaGFubmVsQ291bnQgPSBpbnB1dC5nZXRTYW1wbGVzUGVyRnJhbWUoKTsKKworICAgIGludDMyX3QgZnJhbWVzTGVmdCA9IG51bUZyYW1lczsKKyAgICB3aGlsZSAoZnJhbWVzTGVmdCA+IDApIHsKKyAgICAgICAgLy8gUnVuIHRoZSBncmFwaCBhbmQgcHVsbCBkYXRhIHRocm91Z2ggdGhlIGlucHV0IHBvcnQuCisgICAgICAgIGludDMyX3QgZnJhbWVzUmVhZCA9IHB1bGwoZnJhbWVzTGVmdCk7CisgICAgICAgIGlmIChmcmFtZXNSZWFkIDw9IDApIHsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGNvbnN0IGZsb2F0ICpzaWduYWwgPSBpbnB1dC5nZXRCbG9jaygpOworICAgICAgICBpbnQzMl90IG51bVNhbXBsZXMgPSBmcmFtZXNSZWFkICogY2hhbm5lbENvdW50OworICAgICAgICBtZW1jcHkoZmxvYXREYXRhLCBzaWduYWwsIG51bVNhbXBsZXMgKiBzaXplb2YoZmxvYXQpKTsKKyAgICAgICAgZmxvYXREYXRhICs9IG51bVNhbXBsZXM7CisgICAgICAgIGZyYW1lc0xlZnQgLT0gZnJhbWVzUmVhZDsKKyAgICB9CisgICAgcmV0dXJuIG51bUZyYW1lcyAtIGZyYW1lc0xlZnQ7Cit9CmRpZmYgLS1naXQgYS9tZWRpYS9saWJhYXVkaW8vc3JjL2Zsb3dncmFwaC9TaW5rRmxvYXQuaCBiL21lZGlhL2xpYmFhdWRpby9zcmMvZmxvd2dyYXBoL1NpbmtGbG9hdC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc3NzVjMDgKLS0tIC9kZXYvbnVsbAorKysgYi9tZWRpYS9saWJhYXVkaW8vc3JjL2Zsb3dncmFwaC9TaW5rRmxvYXQuaApAQCAtMCwwICsxLDM4IEBACisvKgorICogQ29weXJpZ2h0IDIwMTggVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworCisKKyNpZm5kZWYgRkxPV0dSQVBIX1NJTktfRkxPQVRfSAorI2RlZmluZSBGTE9XR1JBUEhfU0lOS19GTE9BVF9ICisKKyNpbmNsdWRlIDx1bmlzdGQuaD4KKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKworI2luY2x1ZGUgIkF1ZGlvUHJvY2Vzc29yQmFzZS5oIgorCituYW1lc3BhY2UgZmxvd2dyYXBoIHsKKworY2xhc3MgU2lua0Zsb2F0IDogcHVibGljIEF1ZGlvU2luayB7CitwdWJsaWM6CisgICAgZXhwbGljaXQgU2lua0Zsb2F0KGludDMyX3QgY2hhbm5lbENvdW50KTsKKworICAgIGludDMyX3QgcmVhZCh2b2lkICpkYXRhLCBpbnQzMl90IG51bUZyYW1lcykgb3ZlcnJpZGU7CisKK307CisKK30gLyogbmFtZXNwYWNlIGZsb3dncmFwaCAqLworCisjZW5kaWYgLy9GTE9XR1JBUEhfU0lOS19GTE9BVF9ICmRpZmYgLS1naXQgYS9tZWRpYS9saWJhYXVkaW8vc3JjL2Zsb3dncmFwaC9TaW5rSTE2LmNwcCBiL21lZGlhL2xpYmFhdWRpby9zcmMvZmxvd2dyYXBoL1NpbmtJMTYuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZmZWM4ZjUKLS0tIC9kZXYvbnVsbAorKysgYi9tZWRpYS9saWJhYXVkaW8vc3JjL2Zsb3dncmFwaC9TaW5rSTE2LmNwcApAQCAtMCwwICsxLDU4IEBACisvKgorICogQ29weXJpZ2h0IDIwMTggVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworCisjaW5jbHVkZSA8YWxnb3JpdGhtPgorI2luY2x1ZGUgPHVuaXN0ZC5oPgorCisjaWZkZWYgX19BTkRST0lEX18KKyNpbmNsdWRlIDxhdWRpb191dGlscy9wcmltaXRpdmVzLmg+CisjZW5kaWYKKworI2luY2x1ZGUgIkF1ZGlvUHJvY2Vzc29yQmFzZS5oIgorI2luY2x1ZGUgIlNpbmtJMTYuaCIKKwordXNpbmcgbmFtZXNwYWNlIGZsb3dncmFwaDsKKworU2lua0kxNjo6U2lua0kxNihpbnQzMl90IGNoYW5uZWxDb3VudCkKKyAgICAgICAgOiBBdWRpb1NpbmsoY2hhbm5lbENvdW50KSB7fQorCitpbnQzMl90IFNpbmtJMTY6OnJlYWQodm9pZCAqZGF0YSwgaW50MzJfdCBudW1GcmFtZXMpIHsKKyAgICBpbnQxNl90ICpzaG9ydERhdGEgPSAoaW50MTZfdCAqKSBkYXRhOworICAgIGNvbnN0IGludDMyX3QgY2hhbm5lbENvdW50ID0gaW5wdXQuZ2V0U2FtcGxlc1BlckZyYW1lKCk7CisKKyAgICBpbnQzMl90IGZyYW1lc0xlZnQgPSBudW1GcmFtZXM7CisgICAgd2hpbGUgKGZyYW1lc0xlZnQgPiAwKSB7CisgICAgICAgIC8vIFJ1biB0aGUgZ3JhcGggYW5kIHB1bGwgZGF0YSB0aHJvdWdoIHRoZSBpbnB1dCBwb3J0LgorICAgICAgICBpbnQzMl90IGZyYW1lc1JlYWQgPSBwdWxsKGZyYW1lc0xlZnQpOworICAgICAgICBpZiAoZnJhbWVzUmVhZCA8PSAwKSB7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBjb25zdCBmbG9hdCAqc2lnbmFsID0gaW5wdXQuZ2V0QmxvY2soKTsKKyAgICAgICAgaW50MzJfdCBudW1TYW1wbGVzID0gZnJhbWVzUmVhZCAqIGNoYW5uZWxDb3VudDsKKyNpZmRlZiBfX0FORFJPSURfXworICAgICAgICBtZW1jcHlfdG9faTE2X2Zyb21fZmxvYXQoc2hvcnREYXRhLCBzaWduYWwsIG51bVNhbXBsZXMpOworICAgICAgICBzaG9ydERhdGEgKz0gbnVtU2FtcGxlczsKKyAgICAgICAgc2lnbmFsICs9IG51bVNhbXBsZXM7CisjZWxzZQorICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IG51bVNhbXBsZXM7IGkrKykgeworICAgICAgICAgICAgaW50MzJfdCBuID0gKGludDMyX3QpICgqc2lnbmFsKysgKiAzMjc2OC4wZik7CisgICAgICAgICAgICAqc2hvcnREYXRhKysgPSBzdGQ6Om1pbihJTlQxNl9NQVgsIHN0ZDo6bWF4KElOVDE2X01JTiwgbikpOyAvLyBjbGlwCisgICAgICAgIH0KKyNlbmRpZgorICAgICAgICBmcmFtZXNMZWZ0IC09IGZyYW1lc1JlYWQ7CisgICAgfQorICAgIHJldHVybiBudW1GcmFtZXMgLSBmcmFtZXNMZWZ0OworfQpkaWZmIC0tZ2l0IGEvbWVkaWEvbGliYWF1ZGlvL3NyYy9mbG93Z3JhcGgvU2lua0kxNi5oIGIvbWVkaWEvbGliYWF1ZGlvL3NyYy9mbG93Z3JhcGgvU2lua0kxNi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZkODYyNjYKLS0tIC9kZXYvbnVsbAorKysgYi9tZWRpYS9saWJhYXVkaW8vc3JjL2Zsb3dncmFwaC9TaW5rSTE2LmgKQEAgLTAsMCArMSwzNiBAQAorLyoKKyAqIENvcHlyaWdodCAyMDE4IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KKworI2lmbmRlZiBGTE9XR1JBUEhfU0lOS19JMTZfSAorI2RlZmluZSBGTE9XR1JBUEhfU0lOS19JMTZfSAorCisjaW5jbHVkZSA8dW5pc3RkLmg+CisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisKKyNpbmNsdWRlICJBdWRpb1Byb2Nlc3NvckJhc2UuaCIKKworbmFtZXNwYWNlIGZsb3dncmFwaCB7CisKK2NsYXNzIFNpbmtJMTYgOiBwdWJsaWMgQXVkaW9TaW5rIHsKK3B1YmxpYzoKKyAgICBleHBsaWNpdCBTaW5rSTE2KGludDMyX3QgY2hhbm5lbENvdW50KTsKKworICAgIGludDMyX3QgcmVhZCh2b2lkICpkYXRhLCBpbnQzMl90IG51bUZyYW1lcykgb3ZlcnJpZGU7Cit9OworCit9IC8qIG5hbWVzcGFjZSBmbG93Z3JhcGggKi8KKworI2VuZGlmIC8vRkxPV0dSQVBIX1NJTktfSTE2X0gKZGlmZiAtLWdpdCBhL21lZGlhL2xpYmFhdWRpby9zcmMvZmxvd2dyYXBoL1NpbmtJMjQuY3BwIGIvbWVkaWEvbGliYWF1ZGlvL3NyYy9mbG93Z3JhcGgvU2lua0kyNC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjU5MjgyOAotLS0gL2Rldi9udWxsCisrKyBiL21lZGlhL2xpYmFhdWRpby9zcmMvZmxvd2dyYXBoL1NpbmtJMjQuY3BwCkBAIC0wLDAgKzEsNjYgQEAKKy8qCisgKiBDb3B5cmlnaHQgMjAxOCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCisKKyNpbmNsdWRlIDxhbGdvcml0aG0+CisjaW5jbHVkZSA8dW5pc3RkLmg+CisKKyNpZmRlZiBfX0FORFJPSURfXworI2luY2x1ZGUgPGF1ZGlvX3V0aWxzL3ByaW1pdGl2ZXMuaD4KKyNlbmRpZgorCisjaW5jbHVkZSAiQXVkaW9Qcm9jZXNzb3JCYXNlLmgiCisjaW5jbHVkZSAiU2lua0kyNC5oIgorCit1c2luZyBuYW1lc3BhY2UgZmxvd2dyYXBoOworCisKK1NpbmtJMjQ6OlNpbmtJMjQoaW50MzJfdCBjaGFubmVsQ291bnQpCisgICAgICAgIDogQXVkaW9TaW5rKGNoYW5uZWxDb3VudCkge30KKworaW50MzJfdCBTaW5rSTI0OjpyZWFkKHZvaWQgKmRhdGEsIGludDMyX3QgbnVtRnJhbWVzKSB7CisgICAgdWludDhfdCAqYnl0ZURhdGEgPSAodWludDhfdCAqKSBkYXRhOworICAgIGNvbnN0IGludDMyX3QgY2hhbm5lbENvdW50ID0gaW5wdXQuZ2V0U2FtcGxlc1BlckZyYW1lKCk7CisKKyAgICBpbnQzMl90IGZyYW1lc0xlZnQgPSBudW1GcmFtZXM7CisgICAgd2hpbGUgKGZyYW1lc0xlZnQgPiAwKSB7CisgICAgICAgIC8vIFJ1biB0aGUgZ3JhcGggYW5kIHB1bGwgZGF0YSB0aHJvdWdoIHRoZSBpbnB1dCBwb3J0LgorICAgICAgICBpbnQzMl90IGZyYW1lc1JlYWQgPSBwdWxsKGZyYW1lc0xlZnQpOworICAgICAgICBpZiAoZnJhbWVzUmVhZCA8PSAwKSB7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBjb25zdCBmbG9hdCAqZmxvYXREYXRhID0gaW5wdXQuZ2V0QmxvY2soKTsKKyAgICAgICAgaW50MzJfdCBudW1TYW1wbGVzID0gZnJhbWVzUmVhZCAqIGNoYW5uZWxDb3VudDsKKyNpZmRlZiBfX0FORFJPSURfXworICAgICAgICBtZW1jcHlfdG9fcDI0X2Zyb21fZmxvYXQoYnl0ZURhdGEsIGZsb2F0RGF0YSwgbnVtU2FtcGxlcyk7CisgICAgICAgIHN0YXRpYyBjb25zdCBpbnQga0J5dGVzUGVySTI0UGFja2VkID0gMzsKKyAgICAgICAgYnl0ZURhdGEgKz0gbnVtU2FtcGxlcyAqIGtCeXRlc1BlckkyNFBhY2tlZDsKKyAgICAgICAgZmxvYXREYXRhICs9IG51bVNhbXBsZXM7CisjZWxzZQorICAgICAgICBjb25zdCBpbnQzMl90IGtJMjRQYWNrZWRNYXggPSAweDAwN0ZGRkZGOworICAgICAgICBjb25zdCBpbnQzMl90IGtJMjRQYWNrZWRNaW4gPSAweEZGODAwMDAwOworICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IG51bVNhbXBsZXM7IGkrKykgeworICAgICAgICAgICAgaW50MzJfdCBuID0gKGludDMyX3QpICgqZmxvYXREYXRhKysgKiAweDAwODAwMDAwKTsKKyAgICAgICAgICAgIG4gPSBzdGQ6Om1pbihrSTI0UGFja2VkTWF4LCBzdGQ6Om1heChrSTI0UGFja2VkTWluLCBuKSk7IC8vIGNsaXAKKyAgICAgICAgICAgIC8vIFdyaXRlIGFzIGEgcGFja2VkIDI0LWJpdCBpbnRlZ2VyIGluIExpdHRsZSBFbmRpYW4gZm9ybWF0LgorICAgICAgICAgICAgKmJ5dGVEYXRhKysgPSAodWludDhfdCkgbjsKKyAgICAgICAgICAgICpieXRlRGF0YSsrID0gKHVpbnQ4X3QpIChuID4+IDgpOworICAgICAgICAgICAgKmJ5dGVEYXRhKysgPSAodWludDhfdCkgKG4gPj4gMTYpOworICAgICAgICB9CisjZW5kaWYKKyAgICAgICAgZnJhbWVzTGVmdCAtPSBmcmFtZXNSZWFkOworICAgIH0KKyAgICByZXR1cm4gbnVtRnJhbWVzIC0gZnJhbWVzTGVmdDsKK30KZGlmZiAtLWdpdCBhL21lZGlhL2xpYmFhdWRpby9zcmMvZmxvd2dyYXBoL1NpbmtJMjQuaCBiL21lZGlhL2xpYmFhdWRpby9zcmMvZmxvd2dyYXBoL1NpbmtJMjQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41YjliNTA1Ci0tLSAvZGV2L251bGwKKysrIGIvbWVkaWEvbGliYWF1ZGlvL3NyYy9mbG93Z3JhcGgvU2lua0kyNC5oCkBAIC0wLDAgKzEsMzYgQEAKKy8qCisgKiBDb3B5cmlnaHQgMjAxOCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCisKKyNpZm5kZWYgRkxPV0dSQVBIX1NJTktfSTI0X0gKKyNkZWZpbmUgRkxPV0dSQVBIX1NJTktfSTI0X0gKKworI2luY2x1ZGUgPHVuaXN0ZC5oPgorI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorCisjaW5jbHVkZSAiQXVkaW9Qcm9jZXNzb3JCYXNlLmgiCisKK25hbWVzcGFjZSBmbG93Z3JhcGggeworCitjbGFzcyBTaW5rSTI0IDogcHVibGljIEF1ZGlvU2luayB7CitwdWJsaWM6CisgICAgZXhwbGljaXQgU2lua0kyNChpbnQzMl90IGNoYW5uZWxDb3VudCk7CisKKyAgICBpbnQzMl90IHJlYWQodm9pZCAqZGF0YSwgaW50MzJfdCBudW1GcmFtZXMpIG92ZXJyaWRlOworfTsKKworfSAvKiBuYW1lc3BhY2UgZmxvd2dyYXBoICovCisKKyNlbmRpZiAvL0ZMT1dHUkFQSF9TSU5LX0kyNF9ICmRpZmYgLS1naXQgYS9tZWRpYS9saWJhYXVkaW8vc3JjL2Zsb3dncmFwaC9Tb3VyY2VGbG9hdC5jcHAgYi9tZWRpYS9saWJhYXVkaW8vc3JjL2Zsb3dncmFwaC9Tb3VyY2VGbG9hdC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGJiNjc0ZgotLS0gL2Rldi9udWxsCisrKyBiL21lZGlhL2xpYmFhdWRpby9zcmMvZmxvd2dyYXBoL1NvdXJjZUZsb2F0LmNwcApAQCAtMCwwICsxLDQzIEBACisvKgorICogQ29weXJpZ2h0IDIwMTggVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworCisjaW5jbHVkZSA8YWxnb3JpdGhtPgorI2luY2x1ZGUgPHVuaXN0ZC5oPgorI2luY2x1ZGUgIkF1ZGlvUHJvY2Vzc29yQmFzZS5oIgorI2luY2x1ZGUgIlNvdXJjZUZsb2F0LmgiCisKK3VzaW5nIG5hbWVzcGFjZSBmbG93Z3JhcGg7CisKK1NvdXJjZUZsb2F0OjpTb3VyY2VGbG9hdChpbnQzMl90IGNoYW5uZWxDb3VudCkKKyAgICAgICAgOiBBdWRpb1NvdXJjZShjaGFubmVsQ291bnQpIHsKK30KKworaW50MzJfdCBTb3VyY2VGbG9hdDo6b25Qcm9jZXNzKGludDY0X3QgZnJhbWVQb3NpdGlvbiwgaW50MzJfdCBudW1GcmFtZXMpIHsKKworICAgIGZsb2F0ICpvdXRwdXRCdWZmZXIgPSBvdXRwdXQuZ2V0QmxvY2soKTsKKyAgICBpbnQzMl90IGNoYW5uZWxDb3VudCA9IG91dHB1dC5nZXRTYW1wbGVzUGVyRnJhbWUoKTsKKworICAgIGludDMyX3QgZnJhbWVzTGVmdCA9IG1TaXplSW5GcmFtZXMgLSBtRnJhbWVJbmRleDsKKyAgICBpbnQzMl90IGZyYW1lc1RvUHJvY2VzcyA9IHN0ZDo6bWluKG51bUZyYW1lcywgZnJhbWVzTGVmdCk7CisgICAgaW50MzJfdCBudW1TYW1wbGVzID0gZnJhbWVzVG9Qcm9jZXNzICogY2hhbm5lbENvdW50OworCisgICAgY29uc3QgZmxvYXQgKmZsb2F0QmFzZSA9IChmbG9hdCAqKSBtRGF0YTsKKyAgICBjb25zdCBmbG9hdCAqZmxvYXREYXRhID0gJmZsb2F0QmFzZVttRnJhbWVJbmRleCAqIGNoYW5uZWxDb3VudF07CisgICAgbWVtY3B5KG91dHB1dEJ1ZmZlciwgZmxvYXREYXRhLCBudW1TYW1wbGVzICogc2l6ZW9mKGZsb2F0KSk7CisgICAgbUZyYW1lSW5kZXggKz0gZnJhbWVzVG9Qcm9jZXNzOworICAgIHJldHVybiBmcmFtZXNUb1Byb2Nlc3M7Cit9CisKZGlmZiAtLWdpdCBhL21lZGlhL2xpYmFhdWRpby9zcmMvZmxvd2dyYXBoL1NvdXJjZUZsb2F0LmggYi9tZWRpYS9saWJhYXVkaW8vc3JjL2Zsb3dncmFwaC9Tb3VyY2VGbG9hdC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU2ZWVkOWYKLS0tIC9kZXYvbnVsbAorKysgYi9tZWRpYS9saWJhYXVkaW8vc3JjL2Zsb3dncmFwaC9Tb3VyY2VGbG9hdC5oCkBAIC0wLDAgKzEsMzYgQEAKKy8qCisgKiBDb3B5cmlnaHQgMjAxOCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCisKKyNpZm5kZWYgRkxPV0dSQVBIX1NPVVJDRV9GTE9BVF9ICisjZGVmaW5lIEZMT1dHUkFQSF9TT1VSQ0VfRkxPQVRfSAorCisjaW5jbHVkZSA8dW5pc3RkLmg+CisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisKKyNpbmNsdWRlICJBdWRpb1Byb2Nlc3NvckJhc2UuaCIKKworbmFtZXNwYWNlIGZsb3dncmFwaCB7CisKK2NsYXNzIFNvdXJjZUZsb2F0IDogcHVibGljIEF1ZGlvU291cmNlIHsKK3B1YmxpYzoKKyAgICBleHBsaWNpdCBTb3VyY2VGbG9hdChpbnQzMl90IGNoYW5uZWxDb3VudCk7CisKKyAgICBpbnQzMl90IG9uUHJvY2VzcyhpbnQ2NF90IGZyYW1lUG9zaXRpb24sIGludDMyX3QgbnVtRnJhbWVzKSBvdmVycmlkZTsKK307CisKK30gLyogbmFtZXNwYWNlIGZsb3dncmFwaCAqLworCisjZW5kaWYgLy9GTE9XR1JBUEhfU09VUkNFX0ZMT0FUX0gKZGlmZiAtLWdpdCBhL21lZGlhL2xpYmFhdWRpby9zcmMvZmxvd2dyYXBoL1NvdXJjZUkxNi5jcHAgYi9tZWRpYS9saWJhYXVkaW8vc3JjL2Zsb3dncmFwaC9Tb3VyY2VJMTYuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMzZmNlYzIKLS0tIC9kZXYvbnVsbAorKysgYi9tZWRpYS9saWJhYXVkaW8vc3JjL2Zsb3dncmFwaC9Tb3VyY2VJMTYuY3BwCkBAIC0wLDAgKzEsNTQgQEAKKy8qCisgKiBDb3B5cmlnaHQgMjAxOCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCisKKyNpbmNsdWRlIDxhbGdvcml0aG0+CisjaW5jbHVkZSA8dW5pc3RkLmg+CisKKyNpZmRlZiBfX0FORFJPSURfXworI2luY2x1ZGUgPGF1ZGlvX3V0aWxzL3ByaW1pdGl2ZXMuaD4KKyNlbmRpZgorCisjaW5jbHVkZSAiQXVkaW9Qcm9jZXNzb3JCYXNlLmgiCisjaW5jbHVkZSAiU291cmNlSTE2LmgiCisKK3VzaW5nIG5hbWVzcGFjZSBmbG93Z3JhcGg7CisKK1NvdXJjZUkxNjo6U291cmNlSTE2KGludDMyX3QgY2hhbm5lbENvdW50KQorICAgICAgICA6IEF1ZGlvU291cmNlKGNoYW5uZWxDb3VudCkgeworfQorCitpbnQzMl90IFNvdXJjZUkxNjo6b25Qcm9jZXNzKGludDY0X3QgZnJhbWVQb3NpdGlvbiwgaW50MzJfdCBudW1GcmFtZXMpIHsKKyAgICBmbG9hdCAqZmxvYXREYXRhID0gb3V0cHV0LmdldEJsb2NrKCk7CisgICAgaW50MzJfdCBjaGFubmVsQ291bnQgPSBvdXRwdXQuZ2V0U2FtcGxlc1BlckZyYW1lKCk7CisKKyAgICBpbnQzMl90IGZyYW1lc0xlZnQgPSBtU2l6ZUluRnJhbWVzIC0gbUZyYW1lSW5kZXg7CisgICAgaW50MzJfdCBmcmFtZXNUb1Byb2Nlc3MgPSBzdGQ6Om1pbihudW1GcmFtZXMsIGZyYW1lc0xlZnQpOworICAgIGludDMyX3QgbnVtU2FtcGxlcyA9IGZyYW1lc1RvUHJvY2VzcyAqIGNoYW5uZWxDb3VudDsKKworICAgIGNvbnN0IGludDE2X3QgKnNob3J0QmFzZSA9IHN0YXRpY19jYXN0PGNvbnN0IGludDE2X3QgKj4obURhdGEpOworICAgIGNvbnN0IGludDE2X3QgKnNob3J0RGF0YSA9ICZzaG9ydEJhc2VbbUZyYW1lSW5kZXggKiBjaGFubmVsQ291bnRdOworCisjaWZkZWYgX19BTkRST0lEX18KKyAgICBtZW1jcHlfdG9fZmxvYXRfZnJvbV9pMTYoZmxvYXREYXRhLCBzaG9ydERhdGEsIG51bVNhbXBsZXMpOworI2Vsc2UKKyAgICBmb3IgKGludCBpID0gMDsgaSA8IG51bVNhbXBsZXM7IGkrKykgeworICAgICAgICAqZmxvYXREYXRhKysgPSAqc2hvcnREYXRhKysgKiAoMS4wZiAvIDMyNzY4KTsKKyAgICB9CisjZW5kaWYKKworICAgIG1GcmFtZUluZGV4ICs9IGZyYW1lc1RvUHJvY2VzczsKKyAgICByZXR1cm4gZnJhbWVzVG9Qcm9jZXNzOworfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL21lZGlhL2xpYmFhdWRpby9zcmMvZmxvd2dyYXBoL1NvdXJjZUkxNi5oIGIvbWVkaWEvbGliYWF1ZGlvL3NyYy9mbG93Z3JhcGgvU291cmNlSTE2LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmIxMTZjZgotLS0gL2Rldi9udWxsCisrKyBiL21lZGlhL2xpYmFhdWRpby9zcmMvZmxvd2dyYXBoL1NvdXJjZUkxNi5oCkBAIC0wLDAgKzEsMzYgQEAKKy8qCisgKiBDb3B5cmlnaHQgMjAxOCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCisKKyNpZm5kZWYgRkxPV0dSQVBIX1NPVVJDRV9JMTZfSAorI2RlZmluZSBGTE9XR1JBUEhfU09VUkNFX0kxNl9ICisKKyNpbmNsdWRlIDx1bmlzdGQuaD4KKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKworI2luY2x1ZGUgIkF1ZGlvUHJvY2Vzc29yQmFzZS5oIgorCituYW1lc3BhY2UgZmxvd2dyYXBoIHsKKworY2xhc3MgU291cmNlSTE2IDogcHVibGljIEF1ZGlvU291cmNlIHsKK3B1YmxpYzoKKyAgICBleHBsaWNpdCBTb3VyY2VJMTYoaW50MzJfdCBjaGFubmVsQ291bnQpOworCisgICAgaW50MzJfdCBvblByb2Nlc3MoaW50NjRfdCBmcmFtZVBvc2l0aW9uLCBpbnQzMl90IG51bUZyYW1lcykgb3ZlcnJpZGU7Cit9OworCit9IC8qIG5hbWVzcGFjZSBmbG93Z3JhcGggKi8KKworI2VuZGlmIC8vRkxPV0dSQVBIX1NPVVJDRV9JMTZfSApkaWZmIC0tZ2l0IGEvbWVkaWEvbGliYWF1ZGlvL3NyYy9mbG93Z3JhcGgvU291cmNlSTI0LmNwcCBiL21lZGlhL2xpYmFhdWRpby9zcmMvZmxvd2dyYXBoL1NvdXJjZUkyNC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjMxOTg4MAotLS0gL2Rldi9udWxsCisrKyBiL21lZGlhL2xpYmFhdWRpby9zcmMvZmxvd2dyYXBoL1NvdXJjZUkyNC5jcHAKQEAgLTAsMCArMSw2NSBAQAorLyoKKyAqIENvcHlyaWdodCAyMDE4IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KKworI2luY2x1ZGUgPGFsZ29yaXRobT4KKyNpbmNsdWRlIDx1bmlzdGQuaD4KKworI2lmZGVmIF9fQU5EUk9JRF9fCisjaW5jbHVkZSA8YXVkaW9fdXRpbHMvcHJpbWl0aXZlcy5oPgorI2VuZGlmCisKKyNpbmNsdWRlICJBdWRpb1Byb2Nlc3NvckJhc2UuaCIKKyNpbmNsdWRlICJTb3VyY2VJMjQuaCIKKwordXNpbmcgbmFtZXNwYWNlIGZsb3dncmFwaDsKKworY29uc3RleHByIGludCBrQnl0ZXNQZXJJMjRQYWNrZWQgPSAzOworCitTb3VyY2VJMjQ6OlNvdXJjZUkyNChpbnQzMl90IGNoYW5uZWxDb3VudCkKKyAgICAgICAgOiBBdWRpb1NvdXJjZShjaGFubmVsQ291bnQpIHsKK30KKworaW50MzJfdCBTb3VyY2VJMjQ6Om9uUHJvY2VzcyhpbnQ2NF90IGZyYW1lUG9zaXRpb24sIGludDMyX3QgbnVtRnJhbWVzKSB7CisgICAgZmxvYXQgKmZsb2F0RGF0YSA9IG91dHB1dC5nZXRCbG9jaygpOworICAgIGludDMyX3QgY2hhbm5lbENvdW50ID0gb3V0cHV0LmdldFNhbXBsZXNQZXJGcmFtZSgpOworCisgICAgaW50MzJfdCBmcmFtZXNMZWZ0ID0gbVNpemVJbkZyYW1lcyAtIG1GcmFtZUluZGV4OworICAgIGludDMyX3QgZnJhbWVzVG9Qcm9jZXNzID0gc3RkOjptaW4obnVtRnJhbWVzLCBmcmFtZXNMZWZ0KTsKKyAgICBpbnQzMl90IG51bVNhbXBsZXMgPSBmcmFtZXNUb1Byb2Nlc3MgKiBjaGFubmVsQ291bnQ7CisKKyAgICBjb25zdCB1aW50OF90ICpieXRlQmFzZSA9ICh1aW50OF90ICopIG1EYXRhOworICAgIGNvbnN0IHVpbnQ4X3QgKmJ5dGVEYXRhID0gJmJ5dGVCYXNlW21GcmFtZUluZGV4ICogY2hhbm5lbENvdW50ICoga0J5dGVzUGVySTI0UGFja2VkXTsKKworI2lmZGVmIF9fQU5EUk9JRF9fCisgICAgbWVtY3B5X3RvX2Zsb2F0X2Zyb21fcDI0KGZsb2F0RGF0YSwgYnl0ZURhdGEsIG51bVNhbXBsZXMpOworI2Vsc2UKKyAgICBzdGF0aWMgY29uc3QgZmxvYXQgc2NhbGUgPSAxLiAvIChmbG9hdCkoMVVMIDw8IDMxKTsKKyAgICBmb3IgKGludCBpID0gMDsgaSA8IG51bVNhbXBsZXM7IGkrKykgeworICAgICAgICAvLyBBc3NlbWJsZSB0aGUgZGF0YSBhc3N1bWluZyBMaXR0bGUgRW5kaWFuIGZvcm1hdC4KKyAgICAgICAgaW50MzJfdCBwYWQgPSBieXRlRGF0YVsyXTsKKyAgICAgICAgcGFkIDw8PSA4OworICAgICAgICBwYWQgfD0gYnl0ZURhdGFbMV07CisgICAgICAgIHBhZCA8PD0gODsKKyAgICAgICAgcGFkIHw9IGJ5dGVEYXRhWzBdOworICAgICAgICBwYWQgPDw9IDg7IC8vIFNoaWZ0IHRvIDMyIGJpdCBkYXRhIHNvIHRoZSBzaWduIGlzIGNvcnJlY3QuCisgICAgICAgIGJ5dGVEYXRhICs9IGtCeXRlc1BlckkyNFBhY2tlZDsKKyAgICAgICAgKmZsb2F0RGF0YSsrID0gcGFkICogc2NhbGU7IC8vIHNjYWxlIHRvIHJhbmdlIC0xLjAgdG8gMS4wCisgICAgfQorI2VuZGlmCisKKyAgICBtRnJhbWVJbmRleCArPSBmcmFtZXNUb1Byb2Nlc3M7CisgICAgcmV0dXJuIGZyYW1lc1RvUHJvY2VzczsKK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9tZWRpYS9saWJhYXVkaW8vc3JjL2Zsb3dncmFwaC9Tb3VyY2VJMjQuaCBiL21lZGlhL2xpYmFhdWRpby9zcmMvZmxvd2dyYXBoL1NvdXJjZUkyNC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM5ZjE0ZGEKLS0tIC9kZXYvbnVsbAorKysgYi9tZWRpYS9saWJhYXVkaW8vc3JjL2Zsb3dncmFwaC9Tb3VyY2VJMjQuaApAQCAtMCwwICsxLDM2IEBACisvKgorICogQ29weXJpZ2h0IDIwMTggVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworCisjaWZuZGVmIEZMT1dHUkFQSF9TT1VSQ0VfSTI0X0gKKyNkZWZpbmUgRkxPV0dSQVBIX1NPVVJDRV9JMjRfSAorCisjaW5jbHVkZSA8dW5pc3RkLmg+CisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisKKyNpbmNsdWRlICJBdWRpb1Byb2Nlc3NvckJhc2UuaCIKKworbmFtZXNwYWNlIGZsb3dncmFwaCB7CisKK2NsYXNzIFNvdXJjZUkyNCA6IHB1YmxpYyBBdWRpb1NvdXJjZSB7CitwdWJsaWM6CisgICAgZXhwbGljaXQgU291cmNlSTI0KGludDMyX3QgY2hhbm5lbENvdW50KTsKKworICAgIGludDMyX3Qgb25Qcm9jZXNzKGludDY0X3QgZnJhbWVQb3NpdGlvbiwgaW50MzJfdCBudW1GcmFtZXMpIG92ZXJyaWRlOworfTsKKworfSAvKiBuYW1lc3BhY2UgZmxvd2dyYXBoICovCisKKyNlbmRpZiAvL0ZMT1dHUkFQSF9TT1VSQ0VfSTI0X0gKZGlmZiAtLWdpdCBhL21lZGlhL2xpYmFhdWRpby9zcmMvbGVnYWN5L0F1ZGlvU3RyZWFtTGVnYWN5LmggYi9tZWRpYS9saWJhYXVkaW8vc3JjL2xlZ2FjeS9BdWRpb1N0cmVhbUxlZ2FjeS5oCmluZGV4IDQ5NGVkYmMuLjhlNzg1NTQgMTAwNjQ0Ci0tLSBhL21lZGlhL2xpYmFhdWRpby9zcmMvbGVnYWN5L0F1ZGlvU3RyZWFtTGVnYWN5LmgKKysrIGIvbWVkaWEvbGliYWF1ZGlvL3NyYy9sZWdhY3kvQXVkaW9TdHJlYW1MZWdhY3kuaApAQCAtNzcsNyArNzcsNiBAQAogCiAgICAgdmlydHVhbCBpbnQ2NF90IGluY3JlbWVudENsaWVudEZyYW1lQ291bnRlcihpbnQzMl90IGZyYW1lcykgID0gMDsKIAotCiAgICAgdmlydHVhbCBpbnQ2NF90IGdldEZyYW1lc1dyaXR0ZW4oKSBvdmVycmlkZSB7CiAgICAgICAgIHJldHVybiBtRnJhbWVzV3JpdHRlbi5nZXQoKTsKICAgICB9CmRpZmYgLS1naXQgYS9tZWRpYS9saWJhYXVkaW8vc3JjL2xlZ2FjeS9BdWRpb1N0cmVhbVJlY29yZC5jcHAgYi9tZWRpYS9saWJhYXVkaW8vc3JjL2xlZ2FjeS9BdWRpb1N0cmVhbVJlY29yZC5jcHAKaW5kZXggNTA1ZjJlZS4uNDBlMjJhYyAxMDA2NDQKLS0tIGEvbWVkaWEvbGliYWF1ZGlvL3NyYy9sZWdhY3kvQXVkaW9TdHJlYW1SZWNvcmQuY3BwCisrKyBiL21lZGlhL2xpYmFhdWRpby9zcmMvbGVnYWN5L0F1ZGlvU3RyZWFtUmVjb3JkLmNwcApAQCAtNTcsNiArNTcsOSBAQAogCiAgICAgLy8gVHJ5IHRvIGNyZWF0ZSBhbiBBdWRpb1JlY29yZAogCisgICAgY29uc3QgYWF1ZGlvX3Nlc3Npb25faWRfdCByZXF1ZXN0ZWRTZXNzaW9uSWQgPSBidWlsZGVyLmdldFNlc3Npb25JZCgpOworICAgIGNvbnN0IGF1ZGlvX3Nlc3Npb25fdCBzZXNzaW9uSWQgPSBBQXVkaW9Db252ZXJ0X2FhdWRpb1RvQW5kcm9pZFNlc3Npb25JZChyZXF1ZXN0ZWRTZXNzaW9uSWQpOworCiAgICAgLy8gVE9ETyBTdXBwb3J0IFVOU1BFQ0lGSUVEIGluIEF1ZGlvUmVjb3JkLiBGb3Igbm93LCB1c2Ugc3RlcmVvIGlmIHVuc3BlY2lmaWVkLgogICAgIGludDMyX3Qgc2FtcGxlc1BlckZyYW1lID0gKGdldFNhbXBsZXNQZXJGcmFtZSgpID09IEFBVURJT19VTlNQRUNJRklFRCkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gMiA6IGdldFNhbXBsZXNQZXJGcmFtZSgpOwpAQCAtNjYsMjMgKzY5LDI3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICA6IGJ1aWxkZXIuZ2V0QnVmZmVyQ2FwYWNpdHkoKTsKIAogCi0gICAgYXVkaW9faW5wdXRfZmxhZ3NfdCBmbGFncyA9IEFVRElPX0lOUFVUX0ZMQUdfTk9ORTsKKyAgICBhdWRpb19pbnB1dF9mbGFnc190IGZsYWdzOwogICAgIGFhdWRpb19wZXJmb3JtYW5jZV9tb2RlX3QgcGVyZk1vZGUgPSBnZXRQZXJmb3JtYW5jZU1vZGUoKTsKICAgICBzd2l0Y2ggKHBlcmZNb2RlKSB7CiAgICAgICAgIGNhc2UgQUFVRElPX1BFUkZPUk1BTkNFX01PREVfTE9XX0xBVEVOQ1k6Ci0gICAgICAgICAgICBmbGFncyA9IChhdWRpb19pbnB1dF9mbGFnc190KSAoQVVESU9fSU5QVVRfRkxBR19GQVNUIHwgQVVESU9fSU5QVVRfRkxBR19SQVcpOworICAgICAgICAgICAgLy8gSWYgdGhlIGFwcCBhc2tzIGZvciBhIHNlc3Npb25JZCB0aGVuIGl0IG1lYW5zIHRoZXkgd2FudCB0byB1c2UgZWZmZWN0cy4KKyAgICAgICAgICAgIC8vIFNvIGRvbid0IHVzZSBSQVcgZmxhZy4KKyAgICAgICAgICAgIGZsYWdzID0gKGF1ZGlvX2lucHV0X2ZsYWdzX3QpICgocmVxdWVzdGVkU2Vzc2lvbklkID09IEFBVURJT19TRVNTSU9OX0lEX05PTkUpCisgICAgICAgICAgICAgICAgICAgID8gKEFVRElPX0lOUFVUX0ZMQUdfRkFTVCB8IEFVRElPX0lOUFVUX0ZMQUdfUkFXKQorICAgICAgICAgICAgICAgICAgICA6IChBVURJT19JTlBVVF9GTEFHX0ZBU1QpKTsKICAgICAgICAgICAgIGJyZWFrOwogCiAgICAgICAgIGNhc2UgQUFVRElPX1BFUkZPUk1BTkNFX01PREVfUE9XRVJfU0FWSU5HOgogICAgICAgICBjYXNlIEFBVURJT19QRVJGT1JNQU5DRV9NT0RFX05PTkU6CiAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAvLyBObyBmbGFncy4KKyAgICAgICAgICAgIGZsYWdzID0gQVVESU9fSU5QVVRfRkxBR19OT05FOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgfQogCiAgICAgLy8gUHJlc2VydmUgYmVoYXZpb3Igb2YgQVBJIDI2Ci0gICAgaWYgKGdldEZvcm1hdCgpID09IEFBVURJT19GT1JNQVRfVU5TUEVDSUZJRUQpIHsKLSAgICAgICAgc2V0Rm9ybWF0KEFBVURJT19GT1JNQVRfUENNX0ZMT0FUKTsKKyAgICBpZiAoZ2V0Rm9ybWF0KCkgPT0gQVVESU9fRk9STUFUX0RFRkFVTFQpIHsKKyAgICAgICAgc2V0Rm9ybWF0KEFVRElPX0ZPUk1BVF9QQ01fRkxPQVQpOwogICAgIH0KIAogICAgIC8vIE1heWJlIGNoYW5nZSBkZXZpY2UgZm9ybWF0IHRvIGdldCBhIEZBU1QgcGF0aC4KQEAgLTk5LDEyICsxMDYsMTIgQEAKICAgICAvLyBXZSBqdXN0IG1heSBub3QgZ2V0IGEgRkFTVCB0cmFjay4KICAgICAvLyBCdXQgd2Ugd291bGRuJ3QgaGF2ZSBhbnl3YXkgd2l0aG91dCB0aGlzIGhhY2suCiAgICAgY29uc3RleHByIGludDMyX3Qga01vc3RMaWtlbHlTYW1wbGVSYXRlRm9yRmFzdCA9IDQ4MDAwOwotICAgIGlmIChnZXRGb3JtYXQoKSA9PSBBQVVESU9fRk9STUFUX1BDTV9GTE9BVAorICAgIGlmIChnZXRGb3JtYXQoKSA9PSBBVURJT19GT1JNQVRfUENNX0ZMT0FUCiAgICAgICAgICAgICAmJiBwZXJmTW9kZSA9PSBBQVVESU9fUEVSRk9STUFOQ0VfTU9ERV9MT1dfTEFURU5DWQogICAgICAgICAgICAgJiYgKHNhbXBsZXNQZXJGcmFtZSA8PSAyKSAvLyBGQVNUIG9ubHkgZm9yIG1vbm8gYW5kIHN0ZXJlbwogICAgICAgICAgICAgJiYgKGdldFNhbXBsZVJhdGUoKSA9PSBrTW9zdExpa2VseVNhbXBsZVJhdGVGb3JGYXN0CiAgICAgICAgICAgICAgICAgfHwgZ2V0U2FtcGxlUmF0ZSgpID09IEFBVURJT19VTlNQRUNJRklFRCkpIHsKLSAgICAgICAgc2V0RGV2aWNlRm9ybWF0KEFBVURJT19GT1JNQVRfUENNX0kxNik7CisgICAgICAgIHNldERldmljZUZvcm1hdChBVURJT19GT1JNQVRfUENNXzE2X0JJVCk7CiAgICAgfSBlbHNlIHsKICAgICAgICAgc2V0RGV2aWNlRm9ybWF0KGdldEZvcm1hdCgpKTsKICAgICB9CkBAIC0xNDEsMTQgKzE0OCwxMCBAQAogICAgICAgICAgICAgLnRhZ3MgPSAiIgogICAgIH07CiAKLSAgICBhYXVkaW9fc2Vzc2lvbl9pZF90IHJlcXVlc3RlZFNlc3Npb25JZCA9IGJ1aWxkZXIuZ2V0U2Vzc2lvbklkKCk7Ci0gICAgYXVkaW9fc2Vzc2lvbl90IHNlc3Npb25JZCA9IEFBdWRpb0NvbnZlcnRfYWF1ZGlvVG9BbmRyb2lkU2Vzc2lvbklkKHJlcXVlc3RlZFNlc3Npb25JZCk7Ci0KICAgICAvLyAtLS0tLS0tLS0tLSBvcGVuIHRoZSBBdWRpb1JlY29yZCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgICAvLyBNaWdodCByZXRyeSwgYnV0IG5ldmVyIG1vcmUgdGhhbiBvbmNlLgogICAgIGZvciAoaW50IGkgPSAwOyBpIDwgMjsgaSArKykgewotICAgICAgICBhdWRpb19mb3JtYXRfdCByZXF1ZXN0ZWRJbnRlcm5hbEZvcm1hdCA9Ci0gICAgICAgICAgICAgICAgQUF1ZGlvQ29udmVydF9hYXVkaW9Ub0FuZHJvaWREYXRhRm9ybWF0KGdldERldmljZUZvcm1hdCgpKTsKKyAgICAgICAgY29uc3QgYXVkaW9fZm9ybWF0X3QgcmVxdWVzdGVkSW50ZXJuYWxGb3JtYXQgPSBnZXREZXZpY2VGb3JtYXQoKTsKIAogICAgICAgICBtQXVkaW9SZWNvcmQgPSBuZXcgQXVkaW9SZWNvcmQoCiAgICAgICAgICAgICAgICAgbU9wUGFja2FnZU5hbWUgLy8gY29uc3QgU3RyaW5nMTYmIG9wUGFja2FnZU5hbWUgVE9ETyBkb2VzIG5vdCBjb21waWxlCkBAIC0yMTQsOCArMjE3LDggQEAKICAgICB9CiAKICAgICAvLyBBbGxvY2F0ZSBmb3JtYXQgY29udmVyc2lvbiBidWZmZXIgaWYgbmVlZGVkLgotICAgIGlmIChnZXREZXZpY2VGb3JtYXQoKSA9PSBBQVVESU9fRk9STUFUX1BDTV9JMTYKLSAgICAgICAgJiYgZ2V0Rm9ybWF0KCkgPT0gQUFVRElPX0ZPUk1BVF9QQ01fRkxPQVQpIHsKKyAgICBpZiAoZ2V0RGV2aWNlRm9ybWF0KCkgPT0gQVVESU9fRk9STUFUX1BDTV8xNl9CSVQKKyAgICAgICAgJiYgZ2V0Rm9ybWF0KCkgPT0gQVVESU9fRk9STUFUX1BDTV9GTE9BVCkgewogCiAgICAgICAgIGlmIChidWlsZGVyLmdldERhdGFDYWxsYmFja1Byb2MoKSAhPSBudWxscHRyKSB7CiAgICAgICAgICAgICAvLyBJZiB3ZSBoYXZlIGEgY2FsbGJhY2sgdGhlbiB3ZSBuZWVkIHRvIGNvbnZlcnQgdGhlIGRhdGEgaW50byBhbiBpbnRlcm5hbCBmbG9hdApkaWZmIC0tZ2l0IGEvbWVkaWEvbGliYWF1ZGlvL3NyYy9sZWdhY3kvQXVkaW9TdHJlYW1UcmFjay5jcHAgYi9tZWRpYS9saWJhYXVkaW8vc3JjL2xlZ2FjeS9BdWRpb1N0cmVhbVRyYWNrLmNwcAppbmRleCA1MDVjZDc3Li4xYWMyNTU4IDEwMDY0NAotLS0gYS9tZWRpYS9saWJhYXVkaW8vc3JjL2xlZ2FjeS9BdWRpb1N0cmVhbVRyYWNrLmNwcAorKysgYi9tZWRpYS9saWJhYXVkaW8vc3JjL2xlZ2FjeS9BdWRpb1N0cmVhbVRyYWNrLmNwcApAQCAtNTksMTggKzU5LDI1IEBACiAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgfQogCisgICAgY29uc3QgYWF1ZGlvX3Nlc3Npb25faWRfdCByZXF1ZXN0ZWRTZXNzaW9uSWQgPSBidWlsZGVyLmdldFNlc3Npb25JZCgpOworICAgIGNvbnN0IGF1ZGlvX3Nlc3Npb25fdCBzZXNzaW9uSWQgPSBBQXVkaW9Db252ZXJ0X2FhdWRpb1RvQW5kcm9pZFNlc3Npb25JZChyZXF1ZXN0ZWRTZXNzaW9uSWQpOworCiAgICAgLy8gVHJ5IHRvIGNyZWF0ZSBhbiBBdWRpb1RyYWNrCiAgICAgLy8gVXNlIHN0ZXJlbyBpZiB1bnNwZWNpZmllZC4KICAgICBpbnQzMl90IHNhbXBsZXNQZXJGcmFtZSA9IChnZXRTYW1wbGVzUGVyRnJhbWUoKSA9PSBBQVVESU9fVU5TUEVDSUZJRUQpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IDIgOiBnZXRTYW1wbGVzUGVyRnJhbWUoKTsKICAgICBhdWRpb19jaGFubmVsX21hc2tfdCBjaGFubmVsTWFzayA9IGF1ZGlvX2NoYW5uZWxfb3V0X21hc2tfZnJvbV9jb3VudChzYW1wbGVzUGVyRnJhbWUpOwogCi0gICAgYXVkaW9fb3V0cHV0X2ZsYWdzX3QgZmxhZ3MgPSBBVURJT19PVVRQVVRfRkxBR19OT05FOworICAgIGF1ZGlvX291dHB1dF9mbGFnc190IGZsYWdzOwogICAgIGFhdWRpb19wZXJmb3JtYW5jZV9tb2RlX3QgcGVyZk1vZGUgPSBnZXRQZXJmb3JtYW5jZU1vZGUoKTsKICAgICBzd2l0Y2gocGVyZk1vZGUpIHsKICAgICAgICAgY2FzZSBBQVVESU9fUEVSRk9STUFOQ0VfTU9ERV9MT1dfTEFURU5DWToKICAgICAgICAgICAgIC8vIEJ5cGFzcyB0aGUgbm9ybWFsIG1peGVyIGFuZCBnbyBzdHJhaWdodCB0byB0aGUgRkFTVCBtaXhlci4KLSAgICAgICAgICAgIGZsYWdzID0gKGF1ZGlvX291dHB1dF9mbGFnc190KShBVURJT19PVVRQVVRfRkxBR19GQVNUIHwgQVVESU9fT1VUUFVUX0ZMQUdfUkFXKTsKKyAgICAgICAgICAgIC8vIElmIHRoZSBhcHAgYXNrcyBmb3IgYSBzZXNzaW9uSWQgdGhlbiBpdCBtZWFucyB0aGV5IHdhbnQgdG8gdXNlIGVmZmVjdHMuCisgICAgICAgICAgICAvLyBTbyBkb24ndCB1c2UgUkFXIGZsYWcuCisgICAgICAgICAgICBmbGFncyA9IChhdWRpb19vdXRwdXRfZmxhZ3NfdCkgKChyZXF1ZXN0ZWRTZXNzaW9uSWQgPT0gQUFVRElPX1NFU1NJT05fSURfTk9ORSkKKyAgICAgICAgICAgICAgICAgICAgPyAoQVVESU9fT1VUUFVUX0ZMQUdfRkFTVCB8IEFVRElPX09VVFBVVF9GTEFHX1JBVykKKyAgICAgICAgICAgICAgICAgICAgOiAoQVVESU9fT1VUUFVUX0ZMQUdfRkFTVCkpOwogICAgICAgICAgICAgYnJlYWs7CiAKICAgICAgICAgY2FzZSBBQVVESU9fUEVSRk9STUFOQ0VfTU9ERV9QT1dFUl9TQVZJTkc6CkBAIC04MSw2ICs4OCw3IEBACiAgICAgICAgIGNhc2UgQUFVRElPX1BFUkZPUk1BTkNFX01PREVfTk9ORToKICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgIC8vIE5vIGZsYWdzLiBVc2UgYSBub3JtYWwgbWl4ZXIgaW4gZnJvbnQgb2YgdGhlIEZBU1QgbWl4ZXIuCisgICAgICAgICAgICBmbGFncyA9IEFVRElPX09VVFBVVF9GTEFHX05PTkU7CiAgICAgICAgICAgICBicmVhazsKICAgICB9CiAKQEAgLTg4LDkgKzk2LDkgQEAKIAogICAgIGludDMyX3Qgbm90aWZpY2F0aW9uRnJhbWVzID0gMDsKIAotICAgIGF1ZGlvX2Zvcm1hdF90IGZvcm1hdCA9IChnZXRGb3JtYXQoKSA9PSBBQVVESU9fRk9STUFUX1VOU1BFQ0lGSUVEKQorICAgIGNvbnN0IGF1ZGlvX2Zvcm1hdF90IGZvcm1hdCA9IChnZXRGb3JtYXQoKSA9PSBBVURJT19GT1JNQVRfREVGQVVMVCkKICAgICAgICAgICAgID8gQVVESU9fRk9STUFUX1BDTV9GTE9BVAotICAgICAgICAgICAgOiBBQXVkaW9Db252ZXJ0X2FhdWRpb1RvQW5kcm9pZERhdGFGb3JtYXQoZ2V0Rm9ybWF0KCkpOworICAgICAgICAgICAgOiBnZXRGb3JtYXQoKTsKIAogICAgIC8vIFNldHVwIHRoZSBjYWxsYmFjayBpZiB0aGVyZSBpcyBvbmUuCiAgICAgQXVkaW9UcmFjazo6Y2FsbGJhY2tfdCBjYWxsYmFjayA9IG51bGxwdHI7CkBAIC0xMzUsMTEgKzE0Myw2IEBACiAgICAgICAgICAgICAudGFncyA9ICIiCiAgICAgfTsKIAotICAgIHN0YXRpY19hc3NlcnQoQUFVRElPX1VOU1BFQ0lGSUVEID09IEFVRElPX1NFU1NJT05fQUxMT0NBVEUsICJTZXNzaW9uIElEcyBzaG91bGQgbWF0Y2giKTsKLQotICAgIGFhdWRpb19zZXNzaW9uX2lkX3QgcmVxdWVzdGVkU2Vzc2lvbklkID0gYnVpbGRlci5nZXRTZXNzaW9uSWQoKTsKLSAgICBhdWRpb19zZXNzaW9uX3Qgc2Vzc2lvbklkID0gQUF1ZGlvQ29udmVydF9hYXVkaW9Ub0FuZHJvaWRTZXNzaW9uSWQocmVxdWVzdGVkU2Vzc2lvbklkKTsKLQogICAgIG1BdWRpb1RyYWNrID0gbmV3IEF1ZGlvVHJhY2soKTsKICAgICBtQXVkaW9UcmFjay0+c2V0KAogICAgICAgICAgICAgQVVESU9fU1RSRUFNX0RFRkFVTFQsICAvLyBpZ25vcmVkIGJlY2F1c2Ugd2UgcGFzcyBhdHRyaWJ1dGVzIGJlbG93CkBAIC0xNzgsMTAgKzE4MSw4IEBACiAKICAgICAvLyBHZXQgdGhlIGFjdHVhbCB2YWx1ZXMgZnJvbSB0aGUgQXVkaW9UcmFjay4KICAgICBzZXRTYW1wbGVzUGVyRnJhbWUobUF1ZGlvVHJhY2stPmNoYW5uZWxDb3VudCgpKTsKLSAgICBhYXVkaW9fZm9ybWF0X3QgYWF1ZGlvRm9ybWF0ID0KLSAgICAgICAgICAgIEFBdWRpb0NvbnZlcnRfYW5kcm9pZFRvQUF1ZGlvRGF0YUZvcm1hdChtQXVkaW9UcmFjay0+Zm9ybWF0KCkpOwotICAgIHNldEZvcm1hdChhYXVkaW9Gb3JtYXQpOwotICAgIHNldERldmljZUZvcm1hdChhYXVkaW9Gb3JtYXQpOworICAgIHNldEZvcm1hdChtQXVkaW9UcmFjay0+Zm9ybWF0KCkpOworICAgIHNldERldmljZUZvcm1hdChtQXVkaW9UcmFjay0+Zm9ybWF0KCkpOwogCiAgICAgaW50MzJfdCBhY3R1YWxTYW1wbGVSYXRlID0gbUF1ZGlvVHJhY2stPmdldFNhbXBsZVJhdGUoKTsKICAgICBBTE9HV19JRihhY3R1YWxTYW1wbGVSYXRlICE9IGdldFNhbXBsZVJhdGUoKSwKZGlmZiAtLWdpdCBhL21lZGlhL2xpYmFhdWRpby9zcmMvdXRpbGl0eS9BQXVkaW9VdGlsaXRpZXMuY3BwIGIvbWVkaWEvbGliYWF1ZGlvL3NyYy91dGlsaXR5L0FBdWRpb1V0aWxpdGllcy5jcHAKaW5kZXggNDBlYmI3Ni4uZjViM2FkNCAxMDA2NDQKLS0tIGEvbWVkaWEvbGliYWF1ZGlvL3NyYy91dGlsaXR5L0FBdWRpb1V0aWxpdGllcy5jcHAKKysrIGIvbWVkaWEvbGliYWF1ZGlvL3NyYy91dGlsaXR5L0FBdWRpb1V0aWxpdGllcy5jcHAKQEAgLTMzLDM5NSArMzMsNiBAQAogCiB1c2luZyBuYW1lc3BhY2UgYW5kcm9pZDsKIAotLy8gVGhpcyBpcyAzIGRCLCAoMTBeKDMvMjApKSwgdG8gbWF0Y2ggdGhlIG1heGltdW0gaGVhZHJvb20gaW4gQXVkaW9UcmFjayBmb3IgZmxvYXQgZGF0YS4KLS8vIEl0IGlzIGRlc2lnbmVkIHRvIGFsbG93IG9jY2FzaW9uYWwgdHJhbnNpZW50IHBlYWtzLgotI2RlZmluZSBNQVhfSEVBRFJPT00gKDEuNDEyNTM3NTRmKQotI2RlZmluZSBNSU5fSEVBRFJPT00gKDAgLSBNQVhfSEVBRFJPT00pCi0KLWludDMyX3QgQUF1ZGlvQ29udmVydF9mb3JtYXRUb1NpemVJbkJ5dGVzKGFhdWRpb19mb3JtYXRfdCBmb3JtYXQpIHsKLSAgICBpbnQzMl90IHNpemUgPSBBQVVESU9fRVJST1JfSUxMRUdBTF9BUkdVTUVOVDsKLSAgICBzd2l0Y2ggKGZvcm1hdCkgewotICAgICAgICBjYXNlIEFBVURJT19GT1JNQVRfUENNX0kxNjoKLSAgICAgICAgICAgIHNpemUgPSBzaXplb2YoaW50MTZfdCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBBQVVESU9fRk9STUFUX1BDTV9GTE9BVDoKLSAgICAgICAgICAgIHNpemUgPSBzaXplb2YoZmxvYXQpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICBicmVhazsKLSAgICB9Ci0gICAgcmV0dXJuIHNpemU7Ci19Ci0KLS8vIFRPRE8gZXhwb3NlIGFuZCBjYWxsIGNsYW1wMTZfZnJvbV9mbG9hdCBmdW5jdGlvbiBpbiBwcmltaXRpdmVzLmgKLXN0YXRpYyBpbmxpbmUgaW50MTZfdCBjbGFtcDE2X2Zyb21fZmxvYXQoZmxvYXQgZikgewotICAgIHN0YXRpYyBjb25zdCBmbG9hdCBzY2FsZSA9IDEgPDwgMTU7Ci0gICAgcmV0dXJuIChpbnQxNl90KSByb3VuZGYoZm1heGYoZm1pbmYoZiAqIHNjYWxlLCBzY2FsZSAtIDEuZiksIC1zY2FsZSkpOwotfQotCi0vLyBDbGlwIHRvIHZhbGlkIHJhbmdlIG9mIGEgZmxvYXQgc2FtcGxlIHRvIHByZXZlbnQgZXhjZXNzaXZlIHZvbHVtZS4KLS8vIEJ5IHVzaW5nIGZtaW4gYW5kIGZtYXggd2UgYWxzbyBwcm90ZWN0IGFnYWluc3QgTmFOLgotc3RhdGljIGZsb2F0IGNsaXBUb01pbk1heEhlYWRyb29tKGZsb2F0IGlucHV0KSB7Ci0gICAgcmV0dXJuIGZtaW4oTUFYX0hFQURST09NLCBmbWF4KE1JTl9IRUFEUk9PTSwgaW5wdXQpKTsKLX0KLQotc3RhdGljIGZsb2F0IGNsaXBBbmRDbGFtcEZsb2F0VG9QY20xNihmbG9hdCBzYW1wbGUsIGZsb2F0IHNjYWxlcikgewotICAgIC8vIENsaXAgdG8gdmFsaWQgcmFuZ2Ugb2YgYSBmbG9hdCBzYW1wbGUgdG8gcHJldmVudCBleGNlc3NpdmUgdm9sdW1lLgotICAgIHNhbXBsZSA9IGNsaXBUb01pbk1heEhlYWRyb29tKHNhbXBsZSk7Ci0KLSAgICAvLyBTY2FsZSBhbmQgY29udmVydCB0byBhIHNob3J0LgotICAgIGZsb2F0IGZ2YWwgPSBzYW1wbGUgKiBzY2FsZXI7Ci0gICAgcmV0dXJuIGNsYW1wMTZfZnJvbV9mbG9hdChmdmFsKTsKLX0KLQotdm9pZCBBQXVkaW9Db252ZXJ0X2Zsb2F0VG9QY20xNihjb25zdCBmbG9hdCAqc291cmNlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQxNl90ICpkZXN0aW5hdGlvbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50MzJfdCBudW1TYW1wbGVzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmbG9hdCBhbXBsaXR1ZGUpIHsKLSAgICBjb25zdCBmbG9hdCBzY2FsZXIgPSBhbXBsaXR1ZGU7Ci0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBudW1TYW1wbGVzOyBpKyspIHsKLSAgICAgICAgZmxvYXQgc2FtcGxlID0gKnNvdXJjZSsrOwotICAgICAgICAqZGVzdGluYXRpb24rKyA9IGNsaXBBbmRDbGFtcEZsb2F0VG9QY20xNihzYW1wbGUsIHNjYWxlcik7Ci0gICAgfQotfQotCi12b2lkIEFBdWRpb0NvbnZlcnRfZmxvYXRUb1BjbTE2KGNvbnN0IGZsb2F0ICpzb3VyY2UsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludDE2X3QgKmRlc3RpbmF0aW9uLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQzMl90IG51bUZyYW1lcywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50MzJfdCBzYW1wbGVzUGVyRnJhbWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZsb2F0IGFtcGxpdHVkZTEsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZsb2F0IGFtcGxpdHVkZTIpIHsKLSAgICBmbG9hdCBzY2FsZXIgPSBhbXBsaXR1ZGUxOwotICAgIC8vIGRpdmlkZSBieSBudW1GcmFtZXMgc28gdGhhdCB3ZSBhbG1vc3QgcmVhY2ggYW1wbGl0dWRlMgotICAgIGZsb2F0IGRlbHRhID0gKGFtcGxpdHVkZTIgLSBhbXBsaXR1ZGUxKSAvIG51bUZyYW1lczsKLSAgICBmb3IgKGludCBmcmFtZUluZGV4ID0gMDsgZnJhbWVJbmRleCA8IG51bUZyYW1lczsgZnJhbWVJbmRleCsrKSB7Ci0gICAgICAgIGZvciAoaW50IHNhbXBsZUluZGV4ID0gMDsgc2FtcGxlSW5kZXggPCBzYW1wbGVzUGVyRnJhbWU7IHNhbXBsZUluZGV4KyspIHsKLSAgICAgICAgICAgIGZsb2F0IHNhbXBsZSA9ICpzb3VyY2UrKzsKLSAgICAgICAgICAgICpkZXN0aW5hdGlvbisrID0gY2xpcEFuZENsYW1wRmxvYXRUb1BjbTE2KHNhbXBsZSwgc2NhbGVyKTsKLSAgICAgICAgfQotICAgICAgICBzY2FsZXIgKz0gZGVsdGE7Ci0gICAgfQotfQotCi0jZGVmaW5lIFNIT1JUX1NDQUxFICAzMjc2OAotCi12b2lkIEFBdWRpb0NvbnZlcnRfcGNtMTZUb0Zsb2F0KGNvbnN0IGludDE2X3QgKnNvdXJjZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmxvYXQgKmRlc3RpbmF0aW9uLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQzMl90IG51bVNhbXBsZXMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZsb2F0IGFtcGxpdHVkZSkgewotICAgIGNvbnN0IGZsb2F0IHNjYWxlciA9IGFtcGxpdHVkZSAvIFNIT1JUX1NDQUxFOwotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbnVtU2FtcGxlczsgaSsrKSB7Ci0gICAgICAgIGRlc3RpbmF0aW9uW2ldID0gc291cmNlW2ldICogc2NhbGVyOwotICAgIH0KLX0KLQotLy8gVGhpcyBjb2RlIGFzc3VtZXMgYW1wbGl0dWRlMSBhbmQgYW1wbGl0dWRlMiBhcmUgYmV0d2VlbiAwLjAgYW5kIDEuMAotdm9pZCBBQXVkaW9Db252ZXJ0X3BjbTE2VG9GbG9hdChjb25zdCBpbnQxNl90ICpzb3VyY2UsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZsb2F0ICpkZXN0aW5hdGlvbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50MzJfdCBudW1GcmFtZXMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludDMyX3Qgc2FtcGxlc1BlckZyYW1lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmbG9hdCBhbXBsaXR1ZGUxLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmbG9hdCBhbXBsaXR1ZGUyKSB7Ci0gICAgZmxvYXQgc2NhbGVyID0gYW1wbGl0dWRlMSAvIFNIT1JUX1NDQUxFOwotICAgIGNvbnN0IGZsb2F0IGRlbHRhID0gKGFtcGxpdHVkZTIgLSBhbXBsaXR1ZGUxKSAvIChTSE9SVF9TQ0FMRSAqIChmbG9hdCkgbnVtRnJhbWVzKTsKLSAgICBmb3IgKGludCBmcmFtZUluZGV4ID0gMDsgZnJhbWVJbmRleCA8IG51bUZyYW1lczsgZnJhbWVJbmRleCsrKSB7Ci0gICAgICAgIGZvciAoaW50IHNhbXBsZUluZGV4ID0gMDsgc2FtcGxlSW5kZXggPCBzYW1wbGVzUGVyRnJhbWU7IHNhbXBsZUluZGV4KyspIHsKLSAgICAgICAgICAgICpkZXN0aW5hdGlvbisrID0gKnNvdXJjZSsrICogc2NhbGVyOwotICAgICAgICB9Ci0gICAgICAgIHNjYWxlciArPSBkZWx0YTsKLSAgICB9Ci19Ci0KLQotLy8gVGhpcyBjb2RlIGFzc3VtZXMgYW1wbGl0dWRlMSBhbmQgYW1wbGl0dWRlMiBhcmUgYmV0d2VlbiAwLjAgYW5kIDEuMAotdm9pZCBBQXVkaW9fbGluZWFyUmFtcChjb25zdCBmbG9hdCAqc291cmNlLAotICAgICAgICAgICAgICAgICAgICAgICBmbG9hdCAqZGVzdGluYXRpb24sCi0gICAgICAgICAgICAgICAgICAgICAgIGludDMyX3QgbnVtRnJhbWVzLAotICAgICAgICAgICAgICAgICAgICAgICBpbnQzMl90IHNhbXBsZXNQZXJGcmFtZSwKLSAgICAgICAgICAgICAgICAgICAgICAgZmxvYXQgYW1wbGl0dWRlMSwKLSAgICAgICAgICAgICAgICAgICAgICAgZmxvYXQgYW1wbGl0dWRlMikgewotICAgIGZsb2F0IHNjYWxlciA9IGFtcGxpdHVkZTE7Ci0gICAgY29uc3QgZmxvYXQgZGVsdGEgPSAoYW1wbGl0dWRlMiAtIGFtcGxpdHVkZTEpIC8gbnVtRnJhbWVzOwotICAgIGZvciAoaW50IGZyYW1lSW5kZXggPSAwOyBmcmFtZUluZGV4IDwgbnVtRnJhbWVzOyBmcmFtZUluZGV4KyspIHsKLSAgICAgICAgZm9yIChpbnQgc2FtcGxlSW5kZXggPSAwOyBzYW1wbGVJbmRleCA8IHNhbXBsZXNQZXJGcmFtZTsgc2FtcGxlSW5kZXgrKykgewotICAgICAgICAgICAgZmxvYXQgc2FtcGxlID0gKnNvdXJjZSsrOwotICAgICAgICAgICAgLy8gQ2xpcCB0byB2YWxpZCByYW5nZSBvZiBhIGZsb2F0IHNhbXBsZSB0byBwcmV2ZW50IGV4Y2Vzc2l2ZSB2b2x1bWUuCi0gICAgICAgICAgICBzYW1wbGUgPSBjbGlwVG9NaW5NYXhIZWFkcm9vbShzYW1wbGUpOwotCi0gICAgICAgICAgICAqZGVzdGluYXRpb24rKyA9IHNhbXBsZSAqIHNjYWxlcjsKLSAgICAgICAgfQotICAgICAgICBzY2FsZXIgKz0gZGVsdGE7Ci0gICAgfQotfQotCi0vLyBUaGlzIGNvZGUgYXNzdW1lcyBhbXBsaXR1ZGUxIGFuZCBhbXBsaXR1ZGUyIGFyZSBiZXR3ZWVuIDAuMCBhbmQgMS4wCi12b2lkIEFBdWRpb19saW5lYXJSYW1wKGNvbnN0IGludDE2X3QgKnNvdXJjZSwKLSAgICAgICAgICAgICAgICAgICAgICAgaW50MTZfdCAqZGVzdGluYXRpb24sCi0gICAgICAgICAgICAgICAgICAgICAgIGludDMyX3QgbnVtRnJhbWVzLAotICAgICAgICAgICAgICAgICAgICAgICBpbnQzMl90IHNhbXBsZXNQZXJGcmFtZSwKLSAgICAgICAgICAgICAgICAgICAgICAgZmxvYXQgYW1wbGl0dWRlMSwKLSAgICAgICAgICAgICAgICAgICAgICAgZmxvYXQgYW1wbGl0dWRlMikgewotICAgIC8vIEJlY2F1c2Ugd2UgYXJlIGNvbnZlcnRpbmcgZnJvbSBpbnQxNiB0byAxbnQxNiwgd2UgZG8gbm90IGhhdmUgdG8gc2NhbGUgYnkgMS8zMjc2OC4KLSAgICBmbG9hdCBzY2FsZXIgPSBhbXBsaXR1ZGUxOwotICAgIGNvbnN0IGZsb2F0IGRlbHRhID0gKGFtcGxpdHVkZTIgLSBhbXBsaXR1ZGUxKSAvIG51bUZyYW1lczsKLSAgICBmb3IgKGludCBmcmFtZUluZGV4ID0gMDsgZnJhbWVJbmRleCA8IG51bUZyYW1lczsgZnJhbWVJbmRleCsrKSB7Ci0gICAgICAgIGZvciAoaW50IHNhbXBsZUluZGV4ID0gMDsgc2FtcGxlSW5kZXggPCBzYW1wbGVzUGVyRnJhbWU7IHNhbXBsZUluZGV4KyspIHsKLSAgICAgICAgICAgIC8vIE5vIG5lZWQgdG8gY2xpcCBiZWNhdXNlIGludDE2X3QgcmFuZ2UgaXMgaW5oZXJlbnRseSBsaW1pdGVkLgotICAgICAgICAgICAgZmxvYXQgc2FtcGxlID0gICpzb3VyY2UrKyAqIHNjYWxlcjsKLSAgICAgICAgICAgICpkZXN0aW5hdGlvbisrID0gKGludDE2X3QpIHJvdW5kZihzYW1wbGUpOwotICAgICAgICB9Ci0gICAgICAgIHNjYWxlciArPSBkZWx0YTsKLSAgICB9Ci19Ci0KLS8vICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLS8vIENvbnZlcnQgTW9ubyBUbyBTdGVyZW8gYXQgdGhlIHNhbWUgdGltZSBhcyBjb252ZXJ0aW5nIGZvcm1hdC4KLXZvaWQgQUF1ZGlvQ29udmVydF9mb3JtYXRNb25vVG9TdGVyZW8oY29uc3QgZmxvYXQgKnNvdXJjZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50MTZfdCAqZGVzdGluYXRpb24sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludDMyX3QgbnVtRnJhbWVzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmbG9hdCBhbXBsaXR1ZGUpIHsKLSAgICBjb25zdCBmbG9hdCBzY2FsZXIgPSBhbXBsaXR1ZGU7Ci0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBudW1GcmFtZXM7IGkrKykgewotICAgICAgICBmbG9hdCBzYW1wbGUgPSAqc291cmNlKys7Ci0gICAgICAgIGludDE2X3Qgc2FtcGxlMTYgPSBjbGlwQW5kQ2xhbXBGbG9hdFRvUGNtMTYoc2FtcGxlLCBzY2FsZXIpOwotICAgICAgICAqZGVzdGluYXRpb24rKyA9IHNhbXBsZTE2OwotICAgICAgICAqZGVzdGluYXRpb24rKyA9IHNhbXBsZTE2OwotICAgIH0KLX0KLQotdm9pZCBBQXVkaW9Db252ZXJ0X2Zvcm1hdE1vbm9Ub1N0ZXJlbyhjb25zdCBmbG9hdCAqc291cmNlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQxNl90ICpkZXN0aW5hdGlvbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50MzJfdCBudW1GcmFtZXMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZsb2F0IGFtcGxpdHVkZTEsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZsb2F0IGFtcGxpdHVkZTIpIHsKLSAgICAvLyBkaXZpZGUgYnkgbnVtRnJhbWVzIHNvIHRoYXQgd2UgYWxtb3N0IHJlYWNoIGFtcGxpdHVkZTIKLSAgICBjb25zdCBmbG9hdCBkZWx0YSA9IChhbXBsaXR1ZGUyIC0gYW1wbGl0dWRlMSkgLyBudW1GcmFtZXM7Ci0gICAgZm9yIChpbnQgZnJhbWVJbmRleCA9IDA7IGZyYW1lSW5kZXggPCBudW1GcmFtZXM7IGZyYW1lSW5kZXgrKykgewotICAgICAgICBjb25zdCBmbG9hdCBzY2FsZXIgPSBhbXBsaXR1ZGUxICsgKGZyYW1lSW5kZXggKiBkZWx0YSk7Ci0gICAgICAgIGNvbnN0IGZsb2F0IHNhbXBsZSA9ICpzb3VyY2UrKzsKLSAgICAgICAgaW50MTZfdCBzYW1wbGUxNiA9IGNsaXBBbmRDbGFtcEZsb2F0VG9QY20xNihzYW1wbGUsIHNjYWxlcik7Ci0gICAgICAgICpkZXN0aW5hdGlvbisrID0gc2FtcGxlMTY7Ci0gICAgICAgICpkZXN0aW5hdGlvbisrID0gc2FtcGxlMTY7Ci0gICAgfQotfQotCi12b2lkIEFBdWRpb0NvbnZlcnRfZm9ybWF0TW9ub1RvU3RlcmVvKGNvbnN0IGludDE2X3QgKnNvdXJjZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmxvYXQgKmRlc3RpbmF0aW9uLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQzMl90IG51bUZyYW1lcywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmxvYXQgYW1wbGl0dWRlKSB7Ci0gICAgY29uc3QgZmxvYXQgc2NhbGVyID0gYW1wbGl0dWRlIC8gU0hPUlRfU0NBTEU7Ci0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBudW1GcmFtZXM7IGkrKykgewotICAgICAgICBmbG9hdCBzYW1wbGUgPSBzb3VyY2VbaV0gKiBzY2FsZXI7Ci0gICAgICAgICpkZXN0aW5hdGlvbisrID0gc2FtcGxlOwotICAgICAgICAqZGVzdGluYXRpb24rKyA9IHNhbXBsZTsKLSAgICB9Ci19Ci0KLS8vIFRoaXMgY29kZSBhc3N1bWVzIGFtcGxpdHVkZTEgYW5kIGFtcGxpdHVkZTIgYXJlIGJldHdlZW4gMC4wIGFuZCAxLjAKLXZvaWQgQUF1ZGlvQ29udmVydF9mb3JtYXRNb25vVG9TdGVyZW8oY29uc3QgaW50MTZfdCAqc291cmNlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmbG9hdCAqZGVzdGluYXRpb24sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludDMyX3QgbnVtRnJhbWVzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmbG9hdCBhbXBsaXR1ZGUxLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmbG9hdCBhbXBsaXR1ZGUyKSB7Ci0gICAgY29uc3QgZmxvYXQgc2NhbGVyMSA9IGFtcGxpdHVkZTEgLyBTSE9SVF9TQ0FMRTsKLSAgICBjb25zdCBmbG9hdCBkZWx0YSA9IChhbXBsaXR1ZGUyIC0gYW1wbGl0dWRlMSkgLyAoU0hPUlRfU0NBTEUgKiAoZmxvYXQpIG51bUZyYW1lcyk7Ci0gICAgZm9yIChpbnQgZnJhbWVJbmRleCA9IDA7IGZyYW1lSW5kZXggPCBudW1GcmFtZXM7IGZyYW1lSW5kZXgrKykgewotICAgICAgICBmbG9hdCBzY2FsZXIgPSBzY2FsZXIxICsgKGZyYW1lSW5kZXggKiBkZWx0YSk7Ci0gICAgICAgIGZsb2F0IHNhbXBsZSA9IHNvdXJjZVtmcmFtZUluZGV4XSAqIHNjYWxlcjsKLSAgICAgICAgKmRlc3RpbmF0aW9uKysgPSBzYW1wbGU7Ci0gICAgICAgICpkZXN0aW5hdGlvbisrID0gc2FtcGxlOwotICAgIH0KLX0KLQotLy8gVGhpcyBjb2RlIGFzc3VtZXMgYW1wbGl0dWRlMSBhbmQgYW1wbGl0dWRlMiBhcmUgYmV0d2VlbiAwLjAgYW5kIDEuMAotdm9pZCBBQXVkaW9fbGluZWFyUmFtcE1vbm9Ub1N0ZXJlbyhjb25zdCBmbG9hdCAqc291cmNlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmbG9hdCAqZGVzdGluYXRpb24sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludDMyX3QgbnVtRnJhbWVzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmbG9hdCBhbXBsaXR1ZGUxLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmbG9hdCBhbXBsaXR1ZGUyKSB7Ci0gICAgY29uc3QgZmxvYXQgZGVsdGEgPSAoYW1wbGl0dWRlMiAtIGFtcGxpdHVkZTEpIC8gbnVtRnJhbWVzOwotICAgIGZvciAoaW50IGZyYW1lSW5kZXggPSAwOyBmcmFtZUluZGV4IDwgbnVtRnJhbWVzOyBmcmFtZUluZGV4KyspIHsKLSAgICAgICAgZmxvYXQgc2FtcGxlID0gKnNvdXJjZSsrOwotCi0gICAgICAgIC8vIENsaXAgdG8gdmFsaWQgcmFuZ2Ugb2YgYSBmbG9hdCBzYW1wbGUgdG8gcHJldmVudCBleGNlc3NpdmUgdm9sdW1lLgotICAgICAgICBzYW1wbGUgPSBjbGlwVG9NaW5NYXhIZWFkcm9vbShzYW1wbGUpOwotCi0gICAgICAgIGNvbnN0IGZsb2F0IHNjYWxlciA9IGFtcGxpdHVkZTEgKyAoZnJhbWVJbmRleCAqIGRlbHRhKTsKLSAgICAgICAgZmxvYXQgc2FtcGxlU2NhbGVkID0gc2FtcGxlICogc2NhbGVyOwotICAgICAgICAqZGVzdGluYXRpb24rKyA9IHNhbXBsZVNjYWxlZDsKLSAgICAgICAgKmRlc3RpbmF0aW9uKysgPSBzYW1wbGVTY2FsZWQ7Ci0gICAgfQotfQotCi0vLyBUaGlzIGNvZGUgYXNzdW1lcyBhbXBsaXR1ZGUxIGFuZCBhbXBsaXR1ZGUyIGFyZSBiZXR3ZWVuIDAuMCBhbmQgMS4wCi12b2lkIEFBdWRpb19saW5lYXJSYW1wTW9ub1RvU3RlcmVvKGNvbnN0IGludDE2X3QgKnNvdXJjZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50MTZfdCAqZGVzdGluYXRpb24sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludDMyX3QgbnVtRnJhbWVzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmbG9hdCBhbXBsaXR1ZGUxLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmbG9hdCBhbXBsaXR1ZGUyKSB7Ci0gICAgLy8gQmVjYXVzZSB3ZSBhcmUgY29udmVydGluZyBmcm9tIGludDE2IHRvIDFudDE2LCB3ZSBkbyBub3QgaGF2ZSB0byBzY2FsZSBieSAxLzMyNzY4LgotICAgIGNvbnN0IGZsb2F0IGRlbHRhID0gKGFtcGxpdHVkZTIgLSBhbXBsaXR1ZGUxKSAvIG51bUZyYW1lczsKLSAgICBmb3IgKGludCBmcmFtZUluZGV4ID0gMDsgZnJhbWVJbmRleCA8IG51bUZyYW1lczsgZnJhbWVJbmRleCsrKSB7Ci0gICAgICAgIGNvbnN0IGZsb2F0IHNjYWxlciA9IGFtcGxpdHVkZTEgKyAoZnJhbWVJbmRleCAqIGRlbHRhKTsKLSAgICAgICAgLy8gTm8gbmVlZCB0byBjbGlwIGJlY2F1c2UgaW50MTZfdCByYW5nZSBpcyBpbmhlcmVudGx5IGxpbWl0ZWQuCi0gICAgICAgIGNvbnN0IGZsb2F0IHNhbXBsZSA9ICAqc291cmNlKysgKiBzY2FsZXI7Ci0gICAgICAgIGludDE2X3Qgc2FtcGxlMTYgPSAoaW50MTZfdCkgcm91bmRmKHNhbXBsZSk7Ci0gICAgICAgICpkZXN0aW5hdGlvbisrID0gc2FtcGxlMTY7Ci0gICAgICAgICpkZXN0aW5hdGlvbisrID0gc2FtcGxlMTY7Ci0gICAgfQotfQotCi0vLyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi12b2lkIEFBdWRpb0RhdGFDb252ZXJ0ZXI6OmNvbnZlcnQoCi0gICAgICAgIGNvbnN0IEZvcm1hdHRlZERhdGEgJnNvdXJjZSwKLSAgICAgICAgY29uc3QgRm9ybWF0dGVkRGF0YSAmZGVzdGluYXRpb24sCi0gICAgICAgIGludDMyX3QgbnVtRnJhbWVzLAotICAgICAgICBmbG9hdCBsZXZlbEZyb20sCi0gICAgICAgIGZsb2F0IGxldmVsVG8pIHsKLQotICAgIGlmIChzb3VyY2UuY2hhbm5lbENvdW50ID09IDEgJiYgZGVzdGluYXRpb24uY2hhbm5lbENvdW50ID09IDIpIHsKLSAgICAgICAgY29udmVydE1vbm9Ub1N0ZXJlbyhzb3VyY2UsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVzdGluYXRpb24sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgbnVtRnJhbWVzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldmVsRnJvbSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXZlbFRvKTsKLSAgICB9IGVsc2UgewotICAgICAgICAvLyBXZSBvbmx5IHN1cHBvcnQgbW9ubyB0byBzdGVyZW8gY29udmVyc2lvbi4gT3RoZXJ3aXNlIHNvdXJjZSBhbmQgZGVzdGluYXRpb24KLSAgICAgICAgLy8gbXVzdCBtYXRjaC4KLSAgICAgICAgYXNzZXJ0KHNvdXJjZS5jaGFubmVsQ291bnQgPT0gZGVzdGluYXRpb24uY2hhbm5lbENvdW50KTsKLSAgICAgICAgY29udmVydENoYW5uZWxzTWF0Y2goc291cmNlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXN0aW5hdGlvbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnVtRnJhbWVzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXZlbEZyb20sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldmVsVG8pOwotICAgIH0KLX0KLQotdm9pZCBBQXVkaW9EYXRhQ29udmVydGVyOjpjb252ZXJ0TW9ub1RvU3RlcmVvKAotICAgICAgICBjb25zdCBGb3JtYXR0ZWREYXRhICZzb3VyY2UsCi0gICAgICAgIGNvbnN0IEZvcm1hdHRlZERhdGEgJmRlc3RpbmF0aW9uLAotICAgICAgICBpbnQzMl90IG51bUZyYW1lcywKLSAgICAgICAgZmxvYXQgbGV2ZWxGcm9tLAotICAgICAgICBmbG9hdCBsZXZlbFRvKSB7Ci0KLSAgICAvLyBUaGUgZm9ybWF0cyBhcmUgdmFsaWRhdGVkIHdoZW4gdGhlIHN0cmVhbSBpcyBvcGVuZWQgc28gd2UgZG8gbm90IGhhdmUgdG8KLSAgICAvLyBjaGVjayBmb3IgaWxsZWdhbCBjb21iaW5hdGlvbnMgaGVyZS4KLSAgICBpZiAoc291cmNlLmZvcm1hdCA9PSBBQVVESU9fRk9STUFUX1BDTV9GTE9BVCkgewotICAgICAgICBpZiAoZGVzdGluYXRpb24uZm9ybWF0ID09IEFBVURJT19GT1JNQVRfUENNX0ZMT0FUKSB7Ci0gICAgICAgICAgICBBQXVkaW9fbGluZWFyUmFtcE1vbm9Ub1N0ZXJlbygKLSAgICAgICAgICAgICAgICAgICAgKGNvbnN0IGZsb2F0ICopIHNvdXJjZS5kYXRhLAotICAgICAgICAgICAgICAgICAgICAoZmxvYXQgKikgZGVzdGluYXRpb24uZGF0YSwKLSAgICAgICAgICAgICAgICAgICAgbnVtRnJhbWVzLAotICAgICAgICAgICAgICAgICAgICBsZXZlbEZyb20sCi0gICAgICAgICAgICAgICAgICAgIGxldmVsVG8pOwotICAgICAgICB9IGVsc2UgaWYgKGRlc3RpbmF0aW9uLmZvcm1hdCA9PSBBQVVESU9fRk9STUFUX1BDTV9JMTYpIHsKLSAgICAgICAgICAgIGlmIChsZXZlbEZyb20gIT0gbGV2ZWxUbykgewotICAgICAgICAgICAgICAgIEFBdWRpb0NvbnZlcnRfZm9ybWF0TW9ub1RvU3RlcmVvKAotICAgICAgICAgICAgICAgICAgICAgICAgKGNvbnN0IGZsb2F0ICopIHNvdXJjZS5kYXRhLAotICAgICAgICAgICAgICAgICAgICAgICAgKGludDE2X3QgKikgZGVzdGluYXRpb24uZGF0YSwKLSAgICAgICAgICAgICAgICAgICAgICAgIG51bUZyYW1lcywKLSAgICAgICAgICAgICAgICAgICAgICAgIGxldmVsRnJvbSwKLSAgICAgICAgICAgICAgICAgICAgICAgIGxldmVsVG8pOwotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICBBQXVkaW9Db252ZXJ0X2Zvcm1hdE1vbm9Ub1N0ZXJlbygKLSAgICAgICAgICAgICAgICAgICAgICAgIChjb25zdCBmbG9hdCAqKSBzb3VyY2UuZGF0YSwKLSAgICAgICAgICAgICAgICAgICAgICAgIChpbnQxNl90ICopIGRlc3RpbmF0aW9uLmRhdGEsCi0gICAgICAgICAgICAgICAgICAgICAgICBudW1GcmFtZXMsCi0gICAgICAgICAgICAgICAgICAgICAgICBsZXZlbFRvKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0gZWxzZSBpZiAoc291cmNlLmZvcm1hdCA9PSBBQVVESU9fRk9STUFUX1BDTV9JMTYpIHsKLSAgICAgICAgaWYgKGRlc3RpbmF0aW9uLmZvcm1hdCA9PSBBQVVESU9fRk9STUFUX1BDTV9GTE9BVCkgewotICAgICAgICAgICAgaWYgKGxldmVsRnJvbSAhPSBsZXZlbFRvKSB7Ci0gICAgICAgICAgICAgICAgQUF1ZGlvQ29udmVydF9mb3JtYXRNb25vVG9TdGVyZW8oCi0gICAgICAgICAgICAgICAgICAgICAgICAoY29uc3QgaW50MTZfdCAqKSBzb3VyY2UuZGF0YSwKLSAgICAgICAgICAgICAgICAgICAgICAgIChmbG9hdCAqKSBkZXN0aW5hdGlvbi5kYXRhLAotICAgICAgICAgICAgICAgICAgICAgICAgbnVtRnJhbWVzLAotICAgICAgICAgICAgICAgICAgICAgICAgbGV2ZWxGcm9tLAotICAgICAgICAgICAgICAgICAgICAgICAgbGV2ZWxUbyk7Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIEFBdWRpb0NvbnZlcnRfZm9ybWF0TW9ub1RvU3RlcmVvKAotICAgICAgICAgICAgICAgICAgICAgICAgKGNvbnN0IGludDE2X3QgKikgc291cmNlLmRhdGEsCi0gICAgICAgICAgICAgICAgICAgICAgICAoZmxvYXQgKikgZGVzdGluYXRpb24uZGF0YSwKLSAgICAgICAgICAgICAgICAgICAgICAgIG51bUZyYW1lcywKLSAgICAgICAgICAgICAgICAgICAgICAgIGxldmVsVG8pOwotICAgICAgICAgICAgfQotICAgICAgICB9IGVsc2UgaWYgKGRlc3RpbmF0aW9uLmZvcm1hdCA9PSBBQVVESU9fRk9STUFUX1BDTV9JMTYpIHsKLSAgICAgICAgICAgIEFBdWRpb19saW5lYXJSYW1wTW9ub1RvU3RlcmVvKAotICAgICAgICAgICAgICAgICAgICAoY29uc3QgaW50MTZfdCAqKSBzb3VyY2UuZGF0YSwKLSAgICAgICAgICAgICAgICAgICAgKGludDE2X3QgKikgZGVzdGluYXRpb24uZGF0YSwKLSAgICAgICAgICAgICAgICAgICAgbnVtRnJhbWVzLAotICAgICAgICAgICAgICAgICAgICBsZXZlbEZyb20sCi0gICAgICAgICAgICAgICAgICAgIGxldmVsVG8pOwotICAgICAgICB9Ci0gICAgfQotfQotCi12b2lkIEFBdWRpb0RhdGFDb252ZXJ0ZXI6OmNvbnZlcnRDaGFubmVsc01hdGNoKAotICAgICAgICBjb25zdCBGb3JtYXR0ZWREYXRhICZzb3VyY2UsCi0gICAgICAgIGNvbnN0IEZvcm1hdHRlZERhdGEgJmRlc3RpbmF0aW9uLAotICAgICAgICBpbnQzMl90IG51bUZyYW1lcywKLSAgICAgICAgZmxvYXQgbGV2ZWxGcm9tLAotICAgICAgICBmbG9hdCBsZXZlbFRvKSB7Ci0gICAgY29uc3QgaW50MzJfdCBudW1TYW1wbGVzID0gbnVtRnJhbWVzICogc291cmNlLmNoYW5uZWxDb3VudDsKLQotICAgIC8vIFRoZSBmb3JtYXRzIGFyZSB2YWxpZGF0ZWQgd2hlbiB0aGUgc3RyZWFtIGlzIG9wZW5lZCBzbyB3ZSBkbyBub3QgaGF2ZSB0bwotICAgIC8vIGNoZWNrIGZvciBpbGxlZ2FsIGNvbWJpbmF0aW9ucyBoZXJlLgotICAgIGlmIChzb3VyY2UuZm9ybWF0ID09IEFBVURJT19GT1JNQVRfUENNX0ZMT0FUKSB7Ci0gICAgICAgIGlmIChkZXN0aW5hdGlvbi5mb3JtYXQgPT0gQUFVRElPX0ZPUk1BVF9QQ01fRkxPQVQpIHsKLSAgICAgICAgICAgIEFBdWRpb19saW5lYXJSYW1wKAotICAgICAgICAgICAgICAgICAgICAoY29uc3QgZmxvYXQgKikgc291cmNlLmRhdGEsCi0gICAgICAgICAgICAgICAgICAgIChmbG9hdCAqKSBkZXN0aW5hdGlvbi5kYXRhLAotICAgICAgICAgICAgICAgICAgICBudW1GcmFtZXMsCi0gICAgICAgICAgICAgICAgICAgIHNvdXJjZS5jaGFubmVsQ291bnQsCi0gICAgICAgICAgICAgICAgICAgIGxldmVsRnJvbSwKLSAgICAgICAgICAgICAgICAgICAgbGV2ZWxUbyk7Ci0gICAgICAgIH0gZWxzZSBpZiAoZGVzdGluYXRpb24uZm9ybWF0ID09IEFBVURJT19GT1JNQVRfUENNX0kxNikgewotICAgICAgICAgICAgaWYgKGxldmVsRnJvbSAhPSBsZXZlbFRvKSB7Ci0gICAgICAgICAgICAgICAgQUF1ZGlvQ29udmVydF9mbG9hdFRvUGNtMTYoCi0gICAgICAgICAgICAgICAgICAgICAgICAoY29uc3QgZmxvYXQgKikgc291cmNlLmRhdGEsCi0gICAgICAgICAgICAgICAgICAgICAgICAoaW50MTZfdCAqKSBkZXN0aW5hdGlvbi5kYXRhLAotICAgICAgICAgICAgICAgICAgICAgICAgbnVtRnJhbWVzLAotICAgICAgICAgICAgICAgICAgICAgICAgc291cmNlLmNoYW5uZWxDb3VudCwKLSAgICAgICAgICAgICAgICAgICAgICAgIGxldmVsRnJvbSwKLSAgICAgICAgICAgICAgICAgICAgICAgIGxldmVsVG8pOwotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICBBQXVkaW9Db252ZXJ0X2Zsb2F0VG9QY20xNigKLSAgICAgICAgICAgICAgICAgICAgICAgIChjb25zdCBmbG9hdCAqKSBzb3VyY2UuZGF0YSwKLSAgICAgICAgICAgICAgICAgICAgICAgIChpbnQxNl90ICopIGRlc3RpbmF0aW9uLmRhdGEsCi0gICAgICAgICAgICAgICAgICAgICAgICBudW1TYW1wbGVzLAotICAgICAgICAgICAgICAgICAgICAgICAgbGV2ZWxUbyk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9IGVsc2UgaWYgKHNvdXJjZS5mb3JtYXQgPT0gQUFVRElPX0ZPUk1BVF9QQ01fSTE2KSB7Ci0gICAgICAgIGlmIChkZXN0aW5hdGlvbi5mb3JtYXQgPT0gQUFVRElPX0ZPUk1BVF9QQ01fRkxPQVQpIHsKLSAgICAgICAgICAgIGlmIChsZXZlbEZyb20gIT0gbGV2ZWxUbykgewotICAgICAgICAgICAgICAgIEFBdWRpb0NvbnZlcnRfcGNtMTZUb0Zsb2F0KAotICAgICAgICAgICAgICAgICAgICAgICAgKGNvbnN0IGludDE2X3QgKikgc291cmNlLmRhdGEsCi0gICAgICAgICAgICAgICAgICAgICAgICAoZmxvYXQgKikgZGVzdGluYXRpb24uZGF0YSwKLSAgICAgICAgICAgICAgICAgICAgICAgIG51bUZyYW1lcywKLSAgICAgICAgICAgICAgICAgICAgICAgIHNvdXJjZS5jaGFubmVsQ291bnQsCi0gICAgICAgICAgICAgICAgICAgICAgICBsZXZlbEZyb20sCi0gICAgICAgICAgICAgICAgICAgICAgICBsZXZlbFRvKTsKLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgQUF1ZGlvQ29udmVydF9wY20xNlRvRmxvYXQoCi0gICAgICAgICAgICAgICAgICAgICAgICAoY29uc3QgaW50MTZfdCAqKSBzb3VyY2UuZGF0YSwKLSAgICAgICAgICAgICAgICAgICAgICAgIChmbG9hdCAqKSBkZXN0aW5hdGlvbi5kYXRhLAotICAgICAgICAgICAgICAgICAgICAgICAgbnVtU2FtcGxlcywKLSAgICAgICAgICAgICAgICAgICAgICAgIGxldmVsVG8pOwotICAgICAgICAgICAgfQotICAgICAgICB9IGVsc2UgaWYgKGRlc3RpbmF0aW9uLmZvcm1hdCA9PSBBQVVESU9fRk9STUFUX1BDTV9JMTYpIHsKLSAgICAgICAgICAgIEFBdWRpb19saW5lYXJSYW1wKAotICAgICAgICAgICAgICAgICAgICAoY29uc3QgaW50MTZfdCAqKSBzb3VyY2UuZGF0YSwKLSAgICAgICAgICAgICAgICAgICAgKGludDE2X3QgKikgZGVzdGluYXRpb24uZGF0YSwKLSAgICAgICAgICAgICAgICAgICAgbnVtRnJhbWVzLAotICAgICAgICAgICAgICAgICAgICBzb3VyY2UuY2hhbm5lbENvdW50LAotICAgICAgICAgICAgICAgICAgICBsZXZlbEZyb20sCi0gICAgICAgICAgICAgICAgICAgIGxldmVsVG8pOwotICAgICAgICB9Ci0gICAgfQotfQotCiBzdGF0dXNfdCBBQXVkaW9Db252ZXJ0X2FhdWRpb1RvQW5kcm9pZFN0YXR1cyhhYXVkaW9fcmVzdWx0X3QgcmVzdWx0KSB7CiAgICAgLy8gVGhpcyBjb3ZlcnMgdGhlIGNhc2UgZm9yIEFBVURJT19PSyBhbmQgZm9yIHBvc2l0aXZlIHJlc3VsdHMuCiAgICAgaWYgKHJlc3VsdCA+PSAwKSB7CkBAIC01MTMsNiArMTI0LDkgQEAKIGF1ZGlvX2Zvcm1hdF90IEFBdWRpb0NvbnZlcnRfYWF1ZGlvVG9BbmRyb2lkRGF0YUZvcm1hdChhYXVkaW9fZm9ybWF0X3QgYWF1ZGlvRm9ybWF0KSB7CiAgICAgYXVkaW9fZm9ybWF0X3QgYW5kcm9pZEZvcm1hdDsKICAgICBzd2l0Y2ggKGFhdWRpb0Zvcm1hdCkgeworICAgIGNhc2UgQUFVRElPX0ZPUk1BVF9VTlNQRUNJRklFRDoKKyAgICAgICAgYW5kcm9pZEZvcm1hdCA9IEFVRElPX0ZPUk1BVF9ERUZBVUxUOworICAgICAgICBicmVhazsKICAgICBjYXNlIEFBVURJT19GT1JNQVRfUENNX0kxNjoKICAgICAgICAgYW5kcm9pZEZvcm1hdCA9IEFVRElPX0ZPUk1BVF9QQ01fMTZfQklUOwogICAgICAgICBicmVhazsKQEAgLTUyMCwxNiArMTM0LDE5IEBACiAgICAgICAgIGFuZHJvaWRGb3JtYXQgPSBBVURJT19GT1JNQVRfUENNX0ZMT0FUOwogICAgICAgICBicmVhazsKICAgICBkZWZhdWx0OgotICAgICAgICBhbmRyb2lkRm9ybWF0ID0gQVVESU9fRk9STUFUX0RFRkFVTFQ7Ci0gICAgICAgIEFMT0dFKCJBQXVkaW9Db252ZXJ0X2FhdWRpb1RvQW5kcm9pZERhdGFGb3JtYXQgMHglMDhYIHVucmVjb2duaXplZCIsIGFhdWRpb0Zvcm1hdCk7CisgICAgICAgIGFuZHJvaWRGb3JtYXQgPSBBVURJT19GT1JNQVRfSU5WQUxJRDsKKyAgICAgICAgQUxPR0UoIiVzKCkgMHglMDhYIHVucmVjb2duaXplZCIsIF9fZnVuY19fLCBhYXVkaW9Gb3JtYXQpOwogICAgICAgICBicmVhazsKICAgICB9CiAgICAgcmV0dXJuIGFuZHJvaWRGb3JtYXQ7CiB9CiAKIGFhdWRpb19mb3JtYXRfdCBBQXVkaW9Db252ZXJ0X2FuZHJvaWRUb0FBdWRpb0RhdGFGb3JtYXQoYXVkaW9fZm9ybWF0X3QgYW5kcm9pZEZvcm1hdCkgewotICAgIGFhdWRpb19mb3JtYXRfdCBhYXVkaW9Gb3JtYXQgPSBBQVVESU9fRk9STUFUX0lOVkFMSUQ7CisgICAgYWF1ZGlvX2Zvcm1hdF90IGFhdWRpb0Zvcm1hdDsKICAgICBzd2l0Y2ggKGFuZHJvaWRGb3JtYXQpIHsKKyAgICBjYXNlIEFVRElPX0ZPUk1BVF9ERUZBVUxUOgorICAgICAgICBhYXVkaW9Gb3JtYXQgPSBBQVVESU9fRk9STUFUX1VOU1BFQ0lGSUVEOworICAgICAgICBicmVhazsKICAgICBjYXNlIEFVRElPX0ZPUk1BVF9QQ01fMTZfQklUOgogICAgICAgICBhYXVkaW9Gb3JtYXQgPSBBQVVESU9fRk9STUFUX1BDTV9JMTY7CiAgICAgICAgIGJyZWFrOwpAQCAtNTM4LDcgKzE1NSw3IEBACiAgICAgICAgIGJyZWFrOwogICAgIGRlZmF1bHQ6CiAgICAgICAgIGFhdWRpb0Zvcm1hdCA9IEFBVURJT19GT1JNQVRfSU5WQUxJRDsKLSAgICAgICAgQUxPR0UoIkFBdWRpb0NvbnZlcnRfYW5kcm9pZFRvQUF1ZGlvRGF0YUZvcm1hdCAweCUwOFggdW5yZWNvZ25pemVkIiwgYW5kcm9pZEZvcm1hdCk7CisgICAgICAgIEFMT0dFKCIlcygpIDB4JTA4WCB1bnJlY29nbml6ZWQiLCBfX2Z1bmNfXywgYW5kcm9pZEZvcm1hdCk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KICAgICByZXR1cm4gYWF1ZGlvRm9ybWF0OwpkaWZmIC0tZ2l0IGEvbWVkaWEvbGliYWF1ZGlvL3NyYy91dGlsaXR5L0FBdWRpb1V0aWxpdGllcy5oIGIvbWVkaWEvbGliYWF1ZGlvL3NyYy91dGlsaXR5L0FBdWRpb1V0aWxpdGllcy5oCmluZGV4IDRiOTc1ZTguLmRjMmIxOTggMTAwNjQ0Ci0tLSBhL21lZGlhL2xpYmFhdWRpby9zcmMvdXRpbGl0eS9BQXVkaW9VdGlsaXRpZXMuaAorKysgYi9tZWRpYS9saWJhYXVkaW8vc3JjL3V0aWxpdHkvQUF1ZGlvVXRpbGl0aWVzLmgKQEAgLTQ1LDE1NiArNDUsNiBAQAogYXVkaW9fc2Vzc2lvbl90IEFBdWRpb0NvbnZlcnRfYWF1ZGlvVG9BbmRyb2lkU2Vzc2lvbklkKGFhdWRpb19zZXNzaW9uX2lkX3Qgc2Vzc2lvbklkKTsKIAogLyoqCi0gKiBDb252ZXJ0IGFuIGFycmF5IG9mIGZsb2F0cyB0byBhbiBhcnJheSBvZiBpbnQxNl90LgotICoKLSAqIEBwYXJhbSBzb3VyY2UKLSAqIEBwYXJhbSBkZXN0aW5hdGlvbgotICogQHBhcmFtIG51bVNhbXBsZXMgbnVtYmVyIG9mIHZhbHVlcyBpbiB0aGUgYXJyYXkKLSAqIEBwYXJhbSBhbXBsaXR1ZGUgbGV2ZWwgYmV0d2VlbiAwLjAgYW5kIDEuMAotICovCi12b2lkIEFBdWRpb0NvbnZlcnRfZmxvYXRUb1BjbTE2KGNvbnN0IGZsb2F0ICpzb3VyY2UsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludDE2X3QgKmRlc3RpbmF0aW9uLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQzMl90IG51bVNhbXBsZXMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZsb2F0IGFtcGxpdHVkZSk7Ci0KLS8qKgotICogQ29udmVydCBmbG9hdHMgdG8gaW50MTZfdCBhbmQgc2NhbGUgYnkgYSBsaW5lYXIgcmFtcC4KLSAqCi0gKiBUaGUgcmFtcCBzdG9wcyBqdXN0IHNob3J0IG9mIHJlYWNoaW5nIGFtcGxpdHVkZTIgc28gdGhhdCB0aGUgbmV4dAotICogcmFtcCBjYW4gc3RhcnQgYXQgYW1wbGl0dWRlMiB3aXRob3V0IGNhdXNpbmcgYSBkaXNjb250aW51aXR5LgotICoKLSAqIEBwYXJhbSBzb3VyY2UKLSAqIEBwYXJhbSBkZXN0aW5hdGlvbgotICogQHBhcmFtIG51bUZyYW1lcwotICogQHBhcmFtIHNhbXBsZXNQZXJGcmFtZSBBS0EgbnVtYmVyIG9mIGNoYW5uZWxzCi0gKiBAcGFyYW0gYW1wbGl0dWRlMSBsZXZlbCBhdCBzdGFydCBvZiByYW1wLCBiZXR3ZWVuIDAuMCBhbmQgMS4wCi0gKiBAcGFyYW0gYW1wbGl0dWRlMiBsZXZlbCBwYXN0IGVuZCBvZiByYW1wLCBiZXR3ZWVuIDAuMCBhbmQgMS4wCi0gKi8KLXZvaWQgQUF1ZGlvQ29udmVydF9mbG9hdFRvUGNtMTYoY29uc3QgZmxvYXQgKnNvdXJjZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50MTZfdCAqZGVzdGluYXRpb24sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludDMyX3QgbnVtRnJhbWVzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQzMl90IHNhbXBsZXNQZXJGcmFtZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmxvYXQgYW1wbGl0dWRlMSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmxvYXQgYW1wbGl0dWRlMik7Ci0KLS8qKgotICogQ29udmVydCBpbnQxNl90IGFycmF5IHRvIGZsb2F0IGFycmF5IHJhbmdpbmcgZnJvbSAtMS4wIHRvICsxLjAuCi0gKiBAcGFyYW0gc291cmNlCi0gKiBAcGFyYW0gZGVzdGluYXRpb24KLSAqIEBwYXJhbSBudW1TYW1wbGVzCi0gKi8KLS8vdm9pZCBBQXVkaW9Db252ZXJ0X3BjbTE2VG9GbG9hdChjb25zdCBpbnQxNl90ICpzb3VyY2UsIGludDMyX3QgbnVtU2FtcGxlcywKLS8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmbG9hdCAqZGVzdGluYXRpb24pOwotCi0vKioKLSAqCi0gKiBDb252ZXJ0IGludDE2X3QgYXJyYXkgdG8gZmxvYXQgYXJyYXkgcmFuZ2luZyBmcm9tICsvLSBhbXBsaXR1ZGUuCi0gKiBAcGFyYW0gc291cmNlCi0gKiBAcGFyYW0gZGVzdGluYXRpb24KLSAqIEBwYXJhbSBudW1TYW1wbGVzCi0gKiBAcGFyYW0gYW1wbGl0dWRlCi0gKi8KLXZvaWQgQUF1ZGlvQ29udmVydF9wY20xNlRvRmxvYXQoY29uc3QgaW50MTZfdCAqc291cmNlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmbG9hdCAqZGVzdGluYXRpb24sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludDMyX3QgbnVtU2FtcGxlcywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmxvYXQgYW1wbGl0dWRlKTsKLQotLyoqCi0gKiBDb252ZXJ0IGZsb2F0cyB0byBpbnQxNl90IGFuZCBzY2FsZSBieSBhIGxpbmVhciByYW1wLgotICoKLSAqIFRoZSByYW1wIHN0b3BzIGp1c3Qgc2hvcnQgb2YgcmVhY2hpbmcgYW1wbGl0dWRlMiBzbyB0aGF0IHRoZSBuZXh0Ci0gKiByYW1wIGNhbiBzdGFydCBhdCBhbXBsaXR1ZGUyIHdpdGhvdXQgY2F1c2luZyBhIGRpc2NvbnRpbnVpdHkuCi0gKgotICogQHBhcmFtIHNvdXJjZQotICogQHBhcmFtIGRlc3RpbmF0aW9uCi0gKiBAcGFyYW0gbnVtRnJhbWVzCi0gKiBAcGFyYW0gc2FtcGxlc1BlckZyYW1lIEFLQSBudW1iZXIgb2YgY2hhbm5lbHMKLSAqIEBwYXJhbSBhbXBsaXR1ZGUxIGxldmVsIGF0IHN0YXJ0IG9mIHJhbXAsIGJldHdlZW4gMC4wIGFuZCAxLjAKLSAqIEBwYXJhbSBhbXBsaXR1ZGUyIGxldmVsIGF0IGVuZCBvZiByYW1wLCBiZXR3ZWVuIDAuMCBhbmQgMS4wCi0gKi8KLXZvaWQgQUF1ZGlvQ29udmVydF9wY20xNlRvRmxvYXQoY29uc3QgaW50MTZfdCAqc291cmNlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmbG9hdCAqZGVzdGluYXRpb24sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludDMyX3QgbnVtRnJhbWVzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQzMl90IHNhbXBsZXNQZXJGcmFtZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmxvYXQgYW1wbGl0dWRlMSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmxvYXQgYW1wbGl0dWRlMik7Ci0KLS8qKgotICogU2NhbGUgZmxvYXRzIGJ5IGEgbGluZWFyIHJhbXAuCi0gKgotICogVGhlIHJhbXAgc3RvcHMganVzdCBzaG9ydCBvZiByZWFjaGluZyBhbXBsaXR1ZGUyIHNvIHRoYXQgdGhlIG5leHQKLSAqIHJhbXAgY2FuIHN0YXJ0IGF0IGFtcGxpdHVkZTIgd2l0aG91dCBjYXVzaW5nIGEgZGlzY29udGludWl0eS4KLSAqCi0gKiBAcGFyYW0gc291cmNlCi0gKiBAcGFyYW0gZGVzdGluYXRpb24KLSAqIEBwYXJhbSBudW1GcmFtZXMKLSAqIEBwYXJhbSBzYW1wbGVzUGVyRnJhbWUKLSAqIEBwYXJhbSBhbXBsaXR1ZGUxCi0gKiBAcGFyYW0gYW1wbGl0dWRlMgotICovCi12b2lkIEFBdWRpb19saW5lYXJSYW1wKGNvbnN0IGZsb2F0ICpzb3VyY2UsCi0gICAgICAgICAgICAgICAgICAgICAgIGZsb2F0ICpkZXN0aW5hdGlvbiwKLSAgICAgICAgICAgICAgICAgICAgICAgaW50MzJfdCBudW1GcmFtZXMsCi0gICAgICAgICAgICAgICAgICAgICAgIGludDMyX3Qgc2FtcGxlc1BlckZyYW1lLAotICAgICAgICAgICAgICAgICAgICAgICBmbG9hdCBhbXBsaXR1ZGUxLAotICAgICAgICAgICAgICAgICAgICAgICBmbG9hdCBhbXBsaXR1ZGUyKTsKLQotLyoqCi0gKiBTY2FsZSBpbnQxNl90J3MgYnkgYSBsaW5lYXIgcmFtcC4KLSAqCi0gKiBUaGUgcmFtcCBzdG9wcyBqdXN0IHNob3J0IG9mIHJlYWNoaW5nIGFtcGxpdHVkZTIgc28gdGhhdCB0aGUgbmV4dAotICogcmFtcCBjYW4gc3RhcnQgYXQgYW1wbGl0dWRlMiB3aXRob3V0IGNhdXNpbmcgYSBkaXNjb250aW51aXR5LgotICoKLSAqIEBwYXJhbSBzb3VyY2UKLSAqIEBwYXJhbSBkZXN0aW5hdGlvbgotICogQHBhcmFtIG51bUZyYW1lcwotICogQHBhcmFtIHNhbXBsZXNQZXJGcmFtZQotICogQHBhcmFtIGFtcGxpdHVkZTEKLSAqIEBwYXJhbSBhbXBsaXR1ZGUyCi0gKi8KLXZvaWQgQUF1ZGlvX2xpbmVhclJhbXAoY29uc3QgaW50MTZfdCAqc291cmNlLAotICAgICAgICAgICAgICAgICAgICAgICBpbnQxNl90ICpkZXN0aW5hdGlvbiwKLSAgICAgICAgICAgICAgICAgICAgICAgaW50MzJfdCBudW1GcmFtZXMsCi0gICAgICAgICAgICAgICAgICAgICAgIGludDMyX3Qgc2FtcGxlc1BlckZyYW1lLAotICAgICAgICAgICAgICAgICAgICAgICBmbG9hdCBhbXBsaXR1ZGUxLAotICAgICAgICAgICAgICAgICAgICAgICBmbG9hdCBhbXBsaXR1ZGUyKTsKLQotY2xhc3MgQUF1ZGlvRGF0YUNvbnZlcnRlciB7Ci1wdWJsaWM6Ci0KLSAgICBzdHJ1Y3QgRm9ybWF0dGVkRGF0YSB7Ci0KLSAgICAgICAgRm9ybWF0dGVkRGF0YSh2b2lkICpkYXRhLCBhYXVkaW9fZm9ybWF0X3QgZm9ybWF0LCBpbnQzMl90IGNoYW5uZWxDb3VudCkKLSAgICAgICAgICAgIDogZGF0YShkYXRhKQotICAgICAgICAgICAgLCBmb3JtYXQoZm9ybWF0KQotICAgICAgICAgICAgLCBjaGFubmVsQ291bnQoY2hhbm5lbENvdW50KSB7fQotCi0gICAgICAgIGNvbnN0IHZvaWQgICAgICAgICAgICAqZGF0YSA9IG51bGxwdHI7Ci0gICAgICAgIGNvbnN0IGFhdWRpb19mb3JtYXRfdCAgZm9ybWF0ID0gQUFVRElPX0ZPUk1BVF9VTlNQRUNJRklFRDsKLSAgICAgICAgY29uc3QgaW50MzJfdCAgICAgICAgICBjaGFubmVsQ291bnQgPSAxOwotICAgIH07Ci0KLSAgICBzdGF0aWMgdm9pZCBjb252ZXJ0KGNvbnN0IEZvcm1hdHRlZERhdGEgJnNvdXJjZSwKLSAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEZvcm1hdHRlZERhdGEgJmRlc3RpbmF0aW9uLAotICAgICAgICAgICAgICAgICAgICAgICAgaW50MzJfdCBudW1GcmFtZXMsCi0gICAgICAgICAgICAgICAgICAgICAgICBmbG9hdCBsZXZlbEZyb20sCi0gICAgICAgICAgICAgICAgICAgICAgICBmbG9hdCBsZXZlbFRvKTsKLQotcHJpdmF0ZToKLSAgICBzdGF0aWMgdm9pZCBjb252ZXJ0TW9ub1RvU3RlcmVvKGNvbnN0IEZvcm1hdHRlZERhdGEgJnNvdXJjZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEZvcm1hdHRlZERhdGEgJmRlc3RpbmF0aW9uLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50MzJfdCBudW1GcmFtZXMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmbG9hdCBsZXZlbEZyb20sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmbG9hdCBsZXZlbFRvKTsKLQotICAgIHN0YXRpYyB2b2lkIGNvbnZlcnRDaGFubmVsc01hdGNoKGNvbnN0IEZvcm1hdHRlZERhdGEgJnNvdXJjZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBGb3JtYXR0ZWREYXRhICZkZXN0aW5hdGlvbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQzMl90IG51bUZyYW1lcywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmbG9hdCBsZXZlbEZyb20sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmxvYXQgbGV2ZWxUbyk7Ci19OwotCi0vKioKICAqIENhbGN1bGF0ZSB0aGUgbnVtYmVyIG9mIGJ5dGVzIGFuZCBwcmV2ZW50IG51bWVyaWMgb3ZlcmZsb3cuCiAgKiBUaGUgKnNpemVJbkJ5dGVzIHdpbGwgYmUgc2V0IHRvIHplcm8gaWYgdGhlcmUgaXMgYW4gZXJyb3IuCiAgKgpAQCAtMjM0LDEyICs4NCw2IEBACiAgKi8KIGF1ZGlvX3NvdXJjZV90IEFBdWRpb0NvbnZlcnRfaW5wdXRQcmVzZXRUb0F1ZGlvU291cmNlKGFhdWRpb19pbnB1dF9wcmVzZXRfdCBwcmVzZXQpOwogCi0vKioKLSAqIEByZXR1cm4gdGhlIHNpemUgb2YgYSBzYW1wbGUgb2YgdGhlIGdpdmVuIGZvcm1hdCBpbiBieXRlcyBvciBBQVVESU9fRVJST1JfSUxMRUdBTF9BUkdVTUVOVAotICovCi1pbnQzMl90IEFBdWRpb0NvbnZlcnRfZm9ybWF0VG9TaXplSW5CeXRlcyhhYXVkaW9fZm9ybWF0X3QgZm9ybWF0KTsKLQotCiAvLyBOb3RlIHRoYXQgdGhpcyBjb2RlIG1heSBiZSByZXBsYWNlZCBieSBTZXR0aW5ncyBvciBieSBzb21lIG90aGVyIHN5c3RlbSBjb25maWd1cmF0aW9uIHRvb2wuCiAKICNkZWZpbmUgQUFVRElPX1BST1BfTU1BUF9QT0xJQ1kgICAgICAgICAgICJhYXVkaW8ubW1hcF9wb2xpY3kiCmRpZmYgLS1naXQgYS9tZWRpYS9saWJhYXVkaW8vc3JjL3V0aWxpdHkvTGluZWFyUmFtcC5jcHAgYi9tZWRpYS9saWJhYXVkaW8vc3JjL3V0aWxpdHkvTGluZWFyUmFtcC5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDE3MTRiYmYuLjAwMDAwMDAKLS0tIGEvbWVkaWEvbGliYWF1ZGlvL3NyYy91dGlsaXR5L0xpbmVhclJhbXAuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsNTAgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAyMDE3IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKLSAqCi0gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKLSAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KLSAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotICoKLSAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0gKgotICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQotICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKLSAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgotICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAotICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCi0gKi8KLQotI2luY2x1ZGUgIkxpbmVhclJhbXAuaCIKLQotYm9vbCBMaW5lYXJSYW1wOjppc1JhbXBpbmcoKSB7Ci0gICAgZmxvYXQgdGFyZ2V0ID0gbVRhcmdldC5sb2FkKCk7Ci0gICAgaWYgKHRhcmdldCAhPSBtTGV2ZWxUbykgewotICAgICAgICAvLyBVcGRhdGUgdGFyZ2V0LiBDb250aW51ZSBmcm9tIHByZXZpb3VzIGxldmVsLgotICAgICAgICBtTGV2ZWxUbyA9IHRhcmdldDsKLSAgICAgICAgbVJlbWFpbmluZyA9IG1MZW5ndGhJbkZyYW1lczsKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgcmV0dXJuIG1SZW1haW5pbmcgPiAwOwotICAgIH0KLX0KLQotYm9vbCBMaW5lYXJSYW1wOjpuZXh0U2VnbWVudChpbnQzMl90IGZyYW1lcywgZmxvYXQgKmxldmVsRnJvbSwgZmxvYXQgKmxldmVsVG8pIHsKLSAgICBib29sIHJhbXBpbmcgPSBpc1JhbXBpbmcoKTsKLSAgICAqbGV2ZWxGcm9tID0gbUxldmVsRnJvbTsKLSAgICBpZiAocmFtcGluZykgewotICAgICAgICBmbG9hdCBsZXZlbDsKLSAgICAgICAgaWYgKGZyYW1lcyA+PSBtUmVtYWluaW5nKSB7Ci0gICAgICAgICAgICBsZXZlbCA9IG1MZXZlbFRvOwotICAgICAgICAgICAgbVJlbWFpbmluZyA9IDA7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAvLyBJbnRlcnBvbGF0ZSB0byBhIHBvaW50IGFsb25nIHRoZSBmdWxsIHJhbXAuCi0gICAgICAgICAgICBsZXZlbCA9IG1MZXZlbEZyb20gKyAoZnJhbWVzICogKG1MZXZlbFRvIC0gbUxldmVsRnJvbSkgLyBtUmVtYWluaW5nKTsKLSAgICAgICAgICAgIG1SZW1haW5pbmcgLT0gZnJhbWVzOwotICAgICAgICB9Ci0gICAgICAgIG1MZXZlbEZyb20gPSBsZXZlbDsgLy8gZm9yIG5leHQgcmFtcAotICAgICAgICAqbGV2ZWxUbyA9IGxldmVsOwotICAgIH0gZWxzZSB7Ci0gICAgICAgICpsZXZlbFRvID0gbUxldmVsVG87Ci0gICAgfQotICAgIHJldHVybiByYW1waW5nOwotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL21lZGlhL2xpYmFhdWRpby9zcmMvdXRpbGl0eS9MaW5lYXJSYW1wLmggYi9tZWRpYS9saWJhYXVkaW8vc3JjL3V0aWxpdHkvTGluZWFyUmFtcC5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyYjFiOGUwLi4wMDAwMDAwCi0tLSBhL21lZGlhL2xpYmFhdWRpby9zcmMvdXRpbGl0eS9MaW5lYXJSYW1wLmgKKysrIC9kZXYvbnVsbApAQCAtMSw5NyArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IDIwMTcgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAotICoKLSAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwotICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgotICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0gKgotICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLSAqCi0gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCi0gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAotICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCi0gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCi0gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KLSAqLwotCi0jaWZuZGVmIEFBVURJT19MSU5FQVJfUkFNUF9ICi0jZGVmaW5lIEFBVURJT19MSU5FQVJfUkFNUF9ICi0KLSNpbmNsdWRlIDxhdG9taWM+Ci0jaW5jbHVkZSA8c3RkaW50Lmg+Ci0KLS8qKgotICogR2VuZXJhdGUgc2VnbWVudHMgYWxvbmcgYSBsaW5lYXIgcmFtcC4KLSAqIFRoZSByYW1wIHRhcmdldCBjYW4gYmUgdXBkYXRlZCBmcm9tIGFub3RoZXIgdGhyZWFkLgotICogV2hlbiB0aGUgdGFyZ2V0IGlzIHVwZGF0ZWQsIGEgbmV3IHJhbXAgaXMgc3RhcnRlZCBmcm9tIHRoZSBjdXJyZW50IHBvc2l0aW9uLgotICoKLSAqIFRoZSBmaXJzdCByYW1wIHN0YXJ0cyBhdCAwLjAuCi0gKgotICovCi1jbGFzcyBMaW5lYXJSYW1wIHsKLXB1YmxpYzoKLSAgICBMaW5lYXJSYW1wKCkgewotICAgICAgICBtVGFyZ2V0LnN0b3JlKDEuMGYpOwotICAgIH0KLQotICAgIHZvaWQgc2V0TGVuZ3RoSW5GcmFtZXMoaW50MzJfdCBmcmFtZXMpIHsKLSAgICAgICAgbUxlbmd0aEluRnJhbWVzID0gZnJhbWVzOwotICAgIH0KLQotICAgIGludDMyX3QgZ2V0TGVuZ3RoSW5GcmFtZXMoKSB7Ci0gICAgICAgIHJldHVybiBtTGVuZ3RoSW5GcmFtZXM7Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogVGhpcyBtYXkgYmUgY2FsbGVkIGJ5IGFub3RoZXIgdGhyZWFkLgotICAgICAqIEBwYXJhbSB0YXJnZXQKLSAgICAgKi8KLSAgICB2b2lkIHNldFRhcmdldChmbG9hdCB0YXJnZXQpIHsKLSAgICAgICAgbVRhcmdldC5zdG9yZSh0YXJnZXQpOwotICAgIH0KLQotICAgIGZsb2F0IGdldFRhcmdldCgpIHsKLSAgICAgICAgcmV0dXJuIG1UYXJnZXQubG9hZCgpOwotICAgIH0KLQotICAgIC8qKgotICAgICAqIEZvcmNlIHRoZSBuZXh0U2VnbWVudCB0byBzdGFydCBmcm9tIHRoaXMgbGV2ZWwuCi0gICAgICoKLSAgICAgKiBXQVJOSU5HOiB0aGlzIGNhbiBjYXVzZSBhIGRpc2NvbnRpbnVpdHkgaWYgY2FsbGVkIHdoaWxlIHRoZSByYW1wIGlzIGJlaW5nIHVzZWQuCi0gICAgICogT25seSBjYWxsIHRoaXMgd2hlbiBzZXR0aW5nIHRoZSBpbml0aWFsIHJhbXAuCi0gICAgICoKLSAgICAgKiBAcGFyYW0gbGV2ZWwKLSAgICAgKi8KLSAgICB2b2lkIGZvcmNlQ3VycmVudChmbG9hdCBsZXZlbCkgewotICAgICAgICBtTGV2ZWxGcm9tID0gbGV2ZWw7Ci0gICAgICAgIG1MZXZlbFRvID0gbGV2ZWw7IC8vIGZvcmNlcyBhIHJhbXAgaWYgaXQgZG9lcyBub3QgbWF0Y2ggdGFyZ2V0Ci0gICAgfQotCi0gICAgZmxvYXQgZ2V0Q3VycmVudCgpIHsKLSAgICAgICAgcmV0dXJuIG1MZXZlbEZyb207Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogR2V0IGxldmVscyBmb3IgbmV4dCByYW1wIHNlZ21lbnQuCi0gICAgICoKLSAgICAgKiBAcGFyYW0gZnJhbWVzIG51bWJlciBvZiBmcmFtZXMgaW4gdGhlIHNlZ21lbnQKLSAgICAgKiBAcGFyYW0gbGV2ZWxGcm9tIHBvaW50ZXIgdG8gc3RhcnRpbmcgYW1wbGl0dWRlCi0gICAgICogQHBhcmFtIGxldmVsVG8gcG9pbnRlciB0byBlbmRpbmcgYW1wbGl0dWRlCi0gICAgICogQHJldHVybiB0cnVlIGlmIHJhbXAgaXMgc3RpbGwgbW92aW5nIHRvd2FyZHMgdGhlIHRhcmdldAotICAgICAqLwotICAgIGJvb2wgbmV4dFNlZ21lbnQoaW50MzJfdCBmcmFtZXMsIGZsb2F0ICpsZXZlbEZyb20sIGZsb2F0ICpsZXZlbFRvKTsKLQotcHJpdmF0ZToKLQotICAgIGJvb2wgaXNSYW1waW5nKCk7Ci0KLSAgICBzdGQ6OmF0b21pYzxmbG9hdD4gICBtVGFyZ2V0OwotCi0gICAgaW50MzJfdCBtTGVuZ3RoSW5GcmFtZXMgID0gNDgwMDAgLyAxMDA7IC8vIDEwIG1zZWMgYXQgNDgwMDAgSHoKLSAgICBpbnQzMl90IG1SZW1haW5pbmcgICAgICAgPSAwOwotICAgIGZsb2F0ICAgbUxldmVsRnJvbSAgICAgICA9IDAuMGY7Ci0gICAgZmxvYXQgICBtTGV2ZWxUbyAgICAgICAgID0gMC4wZjsKLX07Ci0KLQotI2VuZGlmIC8vQUFVRElPX0xJTkVBUl9SQU1QX0gKZGlmZiAtLWdpdCBhL21lZGlhL2xpYmFhdWRpby90ZXN0cy9BbmRyb2lkLmJwIGIvbWVkaWEvbGliYWF1ZGlvL3Rlc3RzL0FuZHJvaWQuYnAKaW5kZXggNjgxOTRkYi4uMzE5NDY3ZSAxMDA2NDQKLS0tIGEvbWVkaWEvbGliYWF1ZGlvL3Rlc3RzL0FuZHJvaWQuYnAKKysrIGIvbWVkaWEvbGliYWF1ZGlvL3Rlc3RzL0FuZHJvaWQuYnAKQEAgLTE5LDYgKzE5LDE4IEBACiB9CiAKIGNjX3Rlc3QgeworICAgIG5hbWU6ICJ0ZXN0X2Nsb2NrX21vZGVsIiwKKyAgICBkZWZhdWx0czogWyJsaWJhYXVkaW9fdGVzdHNfZGVmYXVsdHMiXSwKKyAgICBzcmNzOiBbInRlc3RfY2xvY2tfbW9kZWwuY3BwIl0sCisgICAgc2hhcmVkX2xpYnM6IFsKKyAgICAgICAgImxpYmFhdWRpbyIsCisgICAgICAgICJsaWJhdWRpb3V0aWxzIiwKKyAgICAgICAgImxpYmN1dGlscyIsCisgICAgICAgICJsaWJ1dGlscyIsCisgICAgXSwKK30KKworY2NfdGVzdCB7CiAgICAgbmFtZTogInRlc3RfYmxvY2tfYWRhcHRlciIsCiAgICAgZGVmYXVsdHM6IFsibGliYWF1ZGlvX3Rlc3RzX2RlZmF1bHRzIl0sCiAgICAgc3JjczogWyJ0ZXN0X2Jsb2NrX2FkYXB0ZXIuY3BwIl0sCkBAIC0zNCwxMyArNDYsNiBAQAogfQogCiBjY190ZXN0IHsKLSAgICBuYW1lOiAidGVzdF9saW5lYXJfcmFtcCIsCi0gICAgZGVmYXVsdHM6IFsibGliYWF1ZGlvX3Rlc3RzX2RlZmF1bHRzIl0sCi0gICAgc3JjczogWyJ0ZXN0X2xpbmVhcl9yYW1wLmNwcCJdLAotICAgIHNoYXJlZF9saWJzOiBbImxpYmFhdWRpbyJdLAotfQotCi1jY190ZXN0IHsKICAgICBuYW1lOiAidGVzdF9vcGVuX3BhcmFtcyIsCiAgICAgZGVmYXVsdHM6IFsibGliYWF1ZGlvX3Rlc3RzX2RlZmF1bHRzIl0sCiAgICAgc3JjczogWyJ0ZXN0X29wZW5fcGFyYW1zLmNwcCJdLApAQCAtMTY3LDMgKzE3MiwxNSBAQAogICAgIHNyY3M6IFsidGVzdF9hdG9taWNfZmlmby5jcHAiXSwKICAgICBzaGFyZWRfbGliczogWyJsaWJhYXVkaW8iXSwKIH0KKworY2NfdGVzdCB7CisgICAgbmFtZTogInRlc3RfZmxvd2dyYXBoIiwKKyAgICBkZWZhdWx0czogWyJsaWJhYXVkaW9fdGVzdHNfZGVmYXVsdHMiXSwKKyAgICBzcmNzOiBbInRlc3RfZmxvd2dyYXBoLmNwcCJdLAorICAgIHNoYXJlZF9saWJzOiBbCisgICAgICAgICJsaWJhYXVkaW8iLAorICAgICAgICAibGliYmluZGVyIiwKKyAgICAgICAgImxpYmN1dGlscyIsCisgICAgICAgICJsaWJ1dGlscyIsCisgICAgXSwKK30KZGlmZiAtLWdpdCBhL21lZGlhL2xpYmFhdWRpby90ZXN0cy90ZXN0X2F0b21pY19maWZvLmNwcCBiL21lZGlhL2xpYmFhdWRpby90ZXN0cy90ZXN0X2F0b21pY19maWZvLmNwcAppbmRleCAwMDg1MjE3Li5hMDliNzRjIDEwMDY0NAotLS0gYS9tZWRpYS9saWJhYXVkaW8vdGVzdHMvdGVzdF9hdG9taWNfZmlmby5jcHAKKysrIGIvbWVkaWEvbGliYWF1ZGlvL3Rlc3RzL3Rlc3RfYXRvbWljX2ZpZm8uY3BwCkBAIC05NiwxNCArOTYsMTQgQEAKICAgICB2b2lkIGNoZWNrV3JhcHBpbmdCdWZmZXIoKSB7CiAgICAgICAgIFdyYXBwaW5nQnVmZmVyIHdyYXBwaW5nQnVmZmVyOwogICAgICAgICBmaWZvX2ZyYW1lc190IGZyYW1lc0F2YWlsYWJsZSA9Ci0gICAgICAgICAgICAgICAgbUZpZm9CdWZmZXIuZ2V0Rmlmb0NvbnRyb2xsZXJCYXNlKCktPmdldEVtcHR5RnJhbWVzQXZhaWxhYmxlKCk7CisgICAgICAgICAgICAgICAgbUZpZm9CdWZmZXIuZ2V0RW1wdHlGcmFtZXNBdmFpbGFibGUoKTsKICAgICAgICAgZmlmb19mcmFtZXNfdCB3cmFwQXZhaWxhYmxlID0gbUZpZm9CdWZmZXIuZ2V0RW1wdHlSb29tQXZhaWxhYmxlKCZ3cmFwcGluZ0J1ZmZlcik7CiAgICAgICAgIEVYUEVDVF9FUShmcmFtZXNBdmFpbGFibGUsIHdyYXBBdmFpbGFibGUpOwogICAgICAgICBmaWZvX2ZyYW1lc190IGJvdGhBdmFpbGFibGUgPSB3cmFwcGluZ0J1ZmZlci5udW1GcmFtZXNbMF0gKyB3cmFwcGluZ0J1ZmZlci5udW1GcmFtZXNbMV07CiAgICAgICAgIEVYUEVDVF9FUShmcmFtZXNBdmFpbGFibGUsIGJvdGhBdmFpbGFibGUpOwogCiAgICAgICAgIGZyYW1lc0F2YWlsYWJsZSA9Ci0gICAgICAgICAgICAgICAgbUZpZm9CdWZmZXIuZ2V0Rmlmb0NvbnRyb2xsZXJCYXNlKCktPmdldEZ1bGxGcmFtZXNBdmFpbGFibGUoKTsKKyAgICAgICAgICAgICAgICBtRmlmb0J1ZmZlci5nZXRGdWxsRnJhbWVzQXZhaWxhYmxlKCk7CiAgICAgICAgIHdyYXBBdmFpbGFibGUgPSBtRmlmb0J1ZmZlci5nZXRGdWxsRGF0YUF2YWlsYWJsZSgmd3JhcHBpbmdCdWZmZXIpOwogICAgICAgICBFWFBFQ1RfRVEoZnJhbWVzQXZhaWxhYmxlLCB3cmFwQXZhaWxhYmxlKTsKICAgICAgICAgYm90aEF2YWlsYWJsZSA9IHdyYXBwaW5nQnVmZmVyLm51bUZyYW1lc1swXSArIHdyYXBwaW5nQnVmZmVyLm51bUZyYW1lc1sxXTsKQEAgLTExMyw3ICsxMTMsNyBAQAogICAgIC8vIFdyaXRlIGRhdGEgYnV0IGRvIG5vdCBvdmVyZmxvdy4KICAgICB2b2lkIHdyaXRlRGF0YShmaWZvX2ZyYW1lc190IG51bUZyYW1lcykgewogICAgICAgICBmaWZvX2ZyYW1lc190IGZyYW1lc0F2YWlsYWJsZSA9Ci0gICAgICAgICAgICAgICAgbUZpZm9CdWZmZXIuZ2V0Rmlmb0NvbnRyb2xsZXJCYXNlKCktPmdldEVtcHR5RnJhbWVzQXZhaWxhYmxlKCk7CisgICAgICAgICAgICAgICAgbUZpZm9CdWZmZXIuZ2V0RW1wdHlGcmFtZXNBdmFpbGFibGUoKTsKICAgICAgICAgZmlmb19mcmFtZXNfdCBmcmFtZXNUb1dyaXRlID0gc3RkOjptaW4oZnJhbWVzQXZhaWxhYmxlLCBudW1GcmFtZXMpOwogICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGZyYW1lc1RvV3JpdGU7IGkrKykgewogICAgICAgICAgICAgbURhdGFbaV0gPSBtTmV4dFdyaXRlSW5kZXgrKzsKQEAgLTEyNSw3ICsxMjUsNyBAQAogICAgIC8vIFJlYWQgZGF0YSBidXQgZG8gbm90IHVuZGVyZmxvdy4KICAgICB2b2lkIHZlcmlmeURhdGEoZmlmb19mcmFtZXNfdCBudW1GcmFtZXMpIHsKICAgICAgICAgZmlmb19mcmFtZXNfdCBmcmFtZXNBdmFpbGFibGUgPQotICAgICAgICAgICAgICAgIG1GaWZvQnVmZmVyLmdldEZpZm9Db250cm9sbGVyQmFzZSgpLT5nZXRGdWxsRnJhbWVzQXZhaWxhYmxlKCk7CisgICAgICAgICAgICAgICAgbUZpZm9CdWZmZXIuZ2V0RnVsbEZyYW1lc0F2YWlsYWJsZSgpOwogICAgICAgICBmaWZvX2ZyYW1lc190IGZyYW1lc1RvUmVhZCA9IHN0ZDo6bWluKGZyYW1lc0F2YWlsYWJsZSwgbnVtRnJhbWVzKTsKICAgICAgICAgZmlmb19mcmFtZXNfdCBhY3R1YWwgPSBtRmlmb0J1ZmZlci5yZWFkKG1EYXRhLCBmcmFtZXNUb1JlYWQpOwogICAgICAgICBBU1NFUlRfRVEoZnJhbWVzVG9SZWFkLCBhY3R1YWwpOwpAQCAtMTc4LDEyICsxNzgsMTIgQEAKICAgICB2b2lkIGNoZWNrUmFuZG9tV3JpdGVSZWFkKCkgewogICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IDIwOyBpKyspIHsKICAgICAgICAgICAgIGZpZm9fZnJhbWVzX3QgZnJhbWVzRW1wdHkgPQotICAgICAgICAgICAgICAgICAgICBtRmlmb0J1ZmZlci5nZXRGaWZvQ29udHJvbGxlckJhc2UoKS0+Z2V0RW1wdHlGcmFtZXNBdmFpbGFibGUoKTsKKyAgICAgICAgICAgICAgICAgICAgbUZpZm9CdWZmZXIuZ2V0RW1wdHlGcmFtZXNBdmFpbGFibGUoKTsKICAgICAgICAgICAgIGZpZm9fZnJhbWVzX3QgbnVtRnJhbWVzID0gKGZpZm9fZnJhbWVzX3QpKGRyYW5kNDgoKSAqIGZyYW1lc0VtcHR5KTsKICAgICAgICAgICAgIHdyaXRlRGF0YShudW1GcmFtZXMpOwogCiAgICAgICAgICAgICBmaWZvX2ZyYW1lc190IGZyYW1lc0Z1bGwgPQotICAgICAgICAgICAgICAgICAgICBtRmlmb0J1ZmZlci5nZXRGaWZvQ29udHJvbGxlckJhc2UoKS0+Z2V0RnVsbEZyYW1lc0F2YWlsYWJsZSgpOworICAgICAgICAgICAgICAgICAgICBtRmlmb0J1ZmZlci5nZXRGdWxsRnJhbWVzQXZhaWxhYmxlKCk7CiAgICAgICAgICAgICBudW1GcmFtZXMgPSAoZmlmb19mcmFtZXNfdCkoZHJhbmQ0OCgpICogZnJhbWVzRnVsbCk7CiAgICAgICAgICAgICB2ZXJpZnlEYXRhKG51bUZyYW1lcyk7CiAgICAgICAgIH0KZGlmZiAtLWdpdCBhL21lZGlhL2xpYmFhdWRpby90ZXN0cy90ZXN0X2Nsb2NrX21vZGVsLmNwcCBiL21lZGlhL2xpYmFhdWRpby90ZXN0cy90ZXN0X2Nsb2NrX21vZGVsLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zYzA5MDI1Ci0tLSAvZGV2L251bGwKKysrIGIvbWVkaWEvbGliYWF1ZGlvL3Rlc3RzL3Rlc3RfY2xvY2tfbW9kZWwuY3BwCkBAIC0wLDAgKzEsMTE1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE4IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KKworLy8gVW5pdCB0ZXN0cyBmb3IgSXNvY2hyb25vdXMgQ2xvY2sgTW9kZWwKKworI2luY2x1ZGUgPG1hdGguaD4KKyNpbmNsdWRlIDxzdGRsaWIuaD4KKworCisjaW5jbHVkZSA8YWF1ZGlvL0FBdWRpby5oPgorI2luY2x1ZGUgPGF1ZGlvX3V0aWxzL2Nsb2NrLmg+CisjaW5jbHVkZSA8Y2xpZW50L0lzb2Nocm9ub3VzQ2xvY2tNb2RlbC5oPgorI2luY2x1ZGUgPGd0ZXN0L2d0ZXN0Lmg+CisKK3VzaW5nIG5hbWVzcGFjZSBhYXVkaW87CisKKy8vIFdlIGNhbiB1c2UgYXJiaXRyYXJ5IHZhbHVlcyBoZXJlIGJlY2F1c2Ugd2UgYXJlIG5vdCBvcGVuaW5nIGEgcmVhbCBhdWRpbyBzdHJlYW0uCisjZGVmaW5lIFNBTVBMRV9SQVRFICAgICAgICAgICAgIDQ4MDAwCisjZGVmaW5lIEhXX0ZSQU1FU19QRVJfQlVSU1QgICAgIDQ4CisjZGVmaW5lIE5BTk9TX1BFUl9CVVJTVCAgICAgICAgIChOQU5PU19QRVJfU0VDT05EICogSFdfRlJBTUVTX1BFUl9CVVJTVCAvIFNBTVBMRV9SQVRFKQorCitjbGFzcyBDbG9ja01vZGVsVGVzdEZpeHR1cmU6IHB1YmxpYyA6OnRlc3Rpbmc6OlRlc3QgeworcHVibGljOgorICAgIENsb2NrTW9kZWxUZXN0Rml4dHVyZSgpIHsKKyAgICB9CisKKyAgICB2b2lkIFNldFVwKCkgeworICAgICAgICBtb2RlbC5zZXRTYW1wbGVSYXRlKFNBTVBMRV9SQVRFKTsKKyAgICAgICAgbW9kZWwuc2V0RnJhbWVzUGVyQnVyc3QoSFdfRlJBTUVTX1BFUl9CVVJTVCk7CisgICAgfQorCisgICAgdm9pZCBUZWFyRG93bigpIHsKKworICAgIH0KKworICAgIH5DbG9ja01vZGVsVGVzdEZpeHR1cmUoKSAgeworICAgICAgICAvLyBjbGVhbnVwIGFueSBwZW5kaW5nIHN0dWZmLCBidXQgbm8gZXhjZXB0aW9ucyBhbGxvd2VkCisgICAgfQorCisgICAgSXNvY2hyb25vdXNDbG9ja01vZGVsIG1vZGVsOworfTsKKworLy8gQ2hlY2sgZGVmYXVsdCBzZXR1cC4KK1RFU1RfRihDbG9ja01vZGVsVGVzdEZpeHR1cmUsIGNsb2NrX3NldHVwKSB7CisgICAgQVNTRVJUX0VRKFNBTVBMRV9SQVRFLCBtb2RlbC5nZXRTYW1wbGVSYXRlKCkpOworICAgIEFTU0VSVF9FUShIV19GUkFNRVNfUEVSX0JVUlNULCBtb2RlbC5nZXRGcmFtZXNQZXJCdXJzdCgpKTsKK30KKworLy8gVGVzdCBkZWx0YSBjYWxjdWxhdGlvbnMuCitURVNUX0YoQ2xvY2tNb2RlbFRlc3RGaXh0dXJlLCBjbG9ja19kZWx0YXMpIHsKKyAgICBpbnQ2NF90IHBvc2l0aW9uID0gbW9kZWwuY29udmVydERlbHRhVGltZVRvUG9zaXRpb24oTkFOT1NfUEVSX1NFQ09ORCk7CisgICAgQVNTRVJUX0VRKFNBTVBMRV9SQVRFLCBwb3NpdGlvbik7CisKKyAgICAvLyBEZWx0YXMgYXJlIG5vdCBxdWFudGl6ZWQuCisgICAgLy8gQ29tcGFyZSB0aW1lIHRvIHRoZSBlcXVpdmFsZW50IHBvc2l0aW9uIGluIGZyYW1lcy4KKyAgICBjb25zdGV4cHIgaW50NjRfdCBrTmFub3NQZXJCdXJzdCA9IEhXX0ZSQU1FU19QRVJfQlVSU1QgKiBOQU5PU19QRVJfU0VDT05EIC8gU0FNUExFX1JBVEU7CisgICAgcG9zaXRpb24gPSBtb2RlbC5jb252ZXJ0RGVsdGFUaW1lVG9Qb3NpdGlvbihOQU5PU19QRVJfU0VDT05EICsgKGtOYW5vc1BlckJ1cnN0IC8gMikpOworICAgIEFTU0VSVF9FUShTQU1QTEVfUkFURSArIChIV19GUkFNRVNfUEVSX0JVUlNUIC8gMiksIHBvc2l0aW9uKTsKKworICAgIGludDY0X3QgdGltZSA9IG1vZGVsLmNvbnZlcnREZWx0YVBvc2l0aW9uVG9UaW1lKFNBTVBMRV9SQVRFKTsKKyAgICBBU1NFUlRfRVEoTkFOT1NfUEVSX1NFQ09ORCwgdGltZSk7CisKKyAgICAvLyBDb21wYXJlIHBvc2l0aW9uIGluIGZyYW1lcyB0byB0aGUgZXF1aXZhbGVudCB0aW1lLgorICAgIHRpbWUgPSBtb2RlbC5jb252ZXJ0RGVsdGFQb3NpdGlvblRvVGltZShTQU1QTEVfUkFURSArIChIV19GUkFNRVNfUEVSX0JVUlNUIC8gMikpOworICAgIEFTU0VSVF9FUShOQU5PU19QRVJfU0VDT05EICsgKGtOYW5vc1BlckJ1cnN0IC8gMiksIHRpbWUpOworfQorCisvLyBzdGFydCgpIHNob3VsZCBmb3JjZSB0aGUgaW50ZXJuYWwgbWFya2VycworVEVTVF9GKENsb2NrTW9kZWxUZXN0Rml4dHVyZSwgY2xvY2tfc3RhcnQpIHsKKyAgICBjb25zdCBpbnQ2NF90IHN0YXJ0VGltZSA9IDEwMDAwMDsKKyAgICBtb2RlbC5zdGFydChzdGFydFRpbWUpOworCisgICAgaW50NjRfdCBwb3NpdGlvbiA9IG1vZGVsLmNvbnZlcnRUaW1lVG9Qb3NpdGlvbihzdGFydFRpbWUpOworICAgIEVYUEVDVF9FUSgwLCBwb3NpdGlvbik7CisKKyAgICBpbnQ2NF90IHRpbWUgPSBtb2RlbC5jb252ZXJ0UG9zaXRpb25Ub1RpbWUocG9zaXRpb24pOworICAgIEVYUEVDVF9FUShzdGFydFRpbWUsIHRpbWUpOworCisgICAgdGltZSA9IHN0YXJ0VGltZSArICg1MDAgKiBOQU5PU19QRVJfTUlDUk9TRUNPTkQpOworICAgIHBvc2l0aW9uID0gbW9kZWwuY29udmVydFRpbWVUb1Bvc2l0aW9uKHRpbWUpOworICAgIEVYUEVDVF9FUSgwLCBwb3NpdGlvbik7Cit9CisKKy8vIHRpbWVzdGFtcHMgbW92ZXMgdGhlIHdpbmRvdyBpZiBvdXRzaWRlIHRoZSBib3VuZHMKKy8vIFRPRE8gdGVzdCBudWRnaW5nIHRoZSB3aW5kb3cKK1RFU1RfRihDbG9ja01vZGVsVGVzdEZpeHR1cmUsIGNsb2NrX3RpbWVzdGFtcCkgeworICAgIGNvbnN0IGludDY0X3Qgc3RhcnRUaW1lID0gMTAwMDAwMDAwOworICAgIG1vZGVsLnN0YXJ0KHN0YXJ0VGltZSk7CisKKyAgICBjb25zdCBpbnQ2NF90IHBvc2l0aW9uID0gSFdfRlJBTUVTX1BFUl9CVVJTVDsgLy8gaGFyZHdhcmUKKyAgICBpbnQ2NF90IG1hcmtlclRpbWUgPSBzdGFydFRpbWUgKyBOQU5PU19QRVJfTUlMTElTRUNPTkQgKyAoMjAwICogTkFOT1NfUEVSX01JQ1JPU0VDT05EKTsKKworICAgIC8vIFNob3VsZCBzZXQgbWFya2VyLgorICAgIG1vZGVsLnByb2Nlc3NUaW1lc3RhbXAocG9zaXRpb24sIG1hcmtlclRpbWUpOworICAgIEVYUEVDVF9FUShwb3NpdGlvbiwgbW9kZWwuY29udmVydFRpbWVUb1Bvc2l0aW9uKG1hcmtlclRpbWUpKTsKKworICAgIC8vIGNvbnZlcnRUaW1lVG9Qb3NpdGlvbiByb3VuZHMgZG93bgorICAgIEVYUEVDVF9FUShwb3NpdGlvbiwgbW9kZWwuY29udmVydFRpbWVUb1Bvc2l0aW9uKG1hcmtlclRpbWUgKyAoNzMgKiBOQU5PU19QRVJfTUlDUk9TRUNPTkQpKSk7CisKKyAgICAvLyBjb252ZXJ0UG9zaXRpb25Ub1RpbWUgcm91bmRzIHVwCisgICAgRVhQRUNUX0VRKG1hcmtlclRpbWUgKyBOQU5PU19QRVJfQlVSU1QsIG1vZGVsLmNvbnZlcnRQb3NpdGlvblRvVGltZShwb3NpdGlvbiArIDE3KSk7Cit9CmRpZmYgLS1naXQgYS9tZWRpYS9saWJhYXVkaW8vdGVzdHMvdGVzdF9mbG93Z3JhcGguY3BwIGIvbWVkaWEvbGliYWF1ZGlvL3Rlc3RzL3Rlc3RfZmxvd2dyYXBoLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNTYzYTdlCi0tLSAvZGV2L251bGwKKysrIGIvbWVkaWEvbGliYWF1ZGlvL3Rlc3RzL3Rlc3RfZmxvd2dyYXBoLmNwcApAQCAtMCwwICsxLDE1NyBAQAorLyoKKyAqIENvcHlyaWdodCAyMDE4IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KKworLyoKKyAqIFRlc3QgRmxvd0dyYXBoCisgKi8KKworI2luY2x1ZGUgPGlvc3RyZWFtPgorCisjaW5jbHVkZSA8Z3Rlc3QvZ3Rlc3QuaD4KKworI2luY2x1ZGUgImZsb3dncmFwaC9DbGlwVG9SYW5nZS5oIgorI2luY2x1ZGUgImZsb3dncmFwaC9Nb25vVG9NdWx0aUNvbnZlcnRlci5oIgorI2luY2x1ZGUgImZsb3dncmFwaC9Tb3VyY2VGbG9hdC5oIgorI2luY2x1ZGUgImZsb3dncmFwaC9SYW1wTGluZWFyLmgiCisjaW5jbHVkZSAiZmxvd2dyYXBoL1NpbmtGbG9hdC5oIgorI2luY2x1ZGUgImZsb3dncmFwaC9TaW5rSTE2LmgiCisjaW5jbHVkZSAiZmxvd2dyYXBoL1NpbmtJMjQuaCIKKyNpbmNsdWRlICJmbG93Z3JhcGgvU291cmNlSTE2LmgiCisjaW5jbHVkZSAiZmxvd2dyYXBoL1NvdXJjZUkyNC5oIgorCit1c2luZyBuYW1lc3BhY2UgZmxvd2dyYXBoOworCitjb25zdGV4cHIgaW50IGtCeXRlc1BlckkyNFBhY2tlZCA9IDM7CisKK1RFU1QodGVzdF9mbG93Z3JhcGgsIG1vZHVsZV9zaW5raTE2KSB7CisgICAgc3RhdGljIGNvbnN0IGZsb2F0IGlucHV0W10gPSB7MS4wZiwgMC41ZiwgLTAuMjVmLCAtMS4wZiwgMC4wZiwgNTMuOWYsIC04Ny4yZn07CisgICAgc3RhdGljIGNvbnN0IGludDE2X3QgZXhwZWN0ZWRbXSA9IHszMjc2NywgMTYzODQsIC04MTkyLCAtMzI3NjgsIDAsIDMyNzY3LCAtMzI3Njh9OworICAgIGludDE2X3Qgb3V0cHV0WzIwXTsKKyAgICBTb3VyY2VGbG9hdCBzb3VyY2VGbG9hdHsxfTsKKyAgICBTaW5rSTE2IHNpbmtJMTZ7MX07CisKKyAgICBpbnQgbnVtSW5wdXRGcmFtZXMgPSBzaXplb2YoaW5wdXQpIC8gc2l6ZW9mKGlucHV0WzBdKTsKKyAgICBzb3VyY2VGbG9hdC5zZXREYXRhKGlucHV0LCBudW1JbnB1dEZyYW1lcyk7CisgICAgc291cmNlRmxvYXQub3V0cHV0LmNvbm5lY3QoJnNpbmtJMTYuaW5wdXQpOworCisgICAgaW50IG51bU91dHB1dEZyYW1lcyA9IHNpemVvZihvdXRwdXQpIC8gc2l6ZW9mKGludDE2X3QpOworICAgIGludDMyX3QgbnVtUmVhZCA9IHNpbmtJMTYucmVhZChvdXRwdXQsIG51bU91dHB1dEZyYW1lcyk7CisgICAgQVNTRVJUX0VRKG51bUlucHV0RnJhbWVzLCBudW1SZWFkKTsKKyAgICBmb3IgKGludCBpID0gMDsgaSA8IG51bVJlYWQ7IGkrKykgeworICAgICAgICBFWFBFQ1RfRVEoZXhwZWN0ZWRbaV0sIG91dHB1dFtpXSk7CisgICAgfQorfQorCitURVNUKHRlc3RfZmxvd2dyYXBoLCBtb2R1bGVfbW9ub190b19zdGVyZW8pIHsKKyAgICBzdGF0aWMgY29uc3QgZmxvYXQgaW5wdXRbXSA9IHsxLjBmLCAyLjBmLCAzLjBmfTsKKyAgICBmbG9hdCBvdXRwdXRbMTAwXSA9IHt9OworICAgIFNvdXJjZUZsb2F0IHNvdXJjZUZsb2F0ezF9OworICAgIE1vbm9Ub011bHRpQ29udmVydGVyIG1vbm9Ub1N0ZXJlb3syfTsKKyAgICBTaW5rRmxvYXQgc2lua0Zsb2F0ezJ9OworCisgICAgc291cmNlRmxvYXQuc2V0RGF0YShpbnB1dCwgMyk7CisKKyAgICBzb3VyY2VGbG9hdC5vdXRwdXQuY29ubmVjdCgmbW9ub1RvU3RlcmVvLmlucHV0KTsKKyAgICBtb25vVG9TdGVyZW8ub3V0cHV0LmNvbm5lY3QoJnNpbmtGbG9hdC5pbnB1dCk7CisKKyAgICBpbnQzMl90IG51bVJlYWQgPSBzaW5rRmxvYXQucmVhZChvdXRwdXQsIDgpOworICAgIEFTU0VSVF9FUSgzLCBudW1SZWFkKTsKKyAgICBFWFBFQ1RfRVEoaW5wdXRbMF0sIG91dHB1dFswXSk7CisgICAgRVhQRUNUX0VRKGlucHV0WzBdLCBvdXRwdXRbMV0pOworICAgIEVYUEVDVF9FUShpbnB1dFsxXSwgb3V0cHV0WzJdKTsKKyAgICBFWFBFQ1RfRVEoaW5wdXRbMV0sIG91dHB1dFszXSk7Cit9CisKK1RFU1QodGVzdF9mbG93Z3JhcGgsIG1vZHVsZV9yYW1wX2xpbmVhcikgeworICAgIGNvbnN0ZXhwciBpbnQgcmFtcFNpemUgPSA1OworICAgIGNvbnN0ZXhwciBpbnQgbnVtT3V0cHV0ID0gMTAwOworICAgIGNvbnN0ZXhwciBmbG9hdCB2YWx1ZSA9IDEuMGY7CisgICAgY29uc3RleHByIGZsb2F0IHRhcmdldCA9IDEwMC4wZjsKKyAgICBmbG9hdCBvdXRwdXRbbnVtT3V0cHV0XSA9IHt9OworICAgIFJhbXBMaW5lYXIgcmFtcExpbmVhcnsxfTsKKyAgICBTaW5rRmxvYXQgc2lua0Zsb2F0ezF9OworCisgICAgcmFtcExpbmVhci5pbnB1dC5zZXRWYWx1ZSh2YWx1ZSk7CisgICAgcmFtcExpbmVhci5zZXRMZW5ndGhJbkZyYW1lcyhyYW1wU2l6ZSk7CisgICAgcmFtcExpbmVhci5zZXRUYXJnZXQodGFyZ2V0KTsKKyAgICByYW1wTGluZWFyLmZvcmNlQ3VycmVudCgwLjBmKTsKKworICAgIHJhbXBMaW5lYXIub3V0cHV0LmNvbm5lY3QoJnNpbmtGbG9hdC5pbnB1dCk7CisKKyAgICBpbnQzMl90IG51bVJlYWQgPSBzaW5rRmxvYXQucmVhZChvdXRwdXQsIG51bU91dHB1dCk7CisgICAgQVNTRVJUX0VRKG51bU91dHB1dCwgbnVtUmVhZCk7CisgICAgY29uc3RleHByIGZsb2F0IHRvbGVyYW5jZSA9IDAuMDAwMWY7IC8vIGFyYml0cmFyeQorICAgIGludCBpID0gMDsKKyAgICBmb3IgKDsgaSA8IHJhbXBTaXplOyBpKyspIHsKKyAgICAgICAgZmxvYXQgZXhwZWN0ZWQgPSBpICogdmFsdWUgKiB0YXJnZXQgLyByYW1wU2l6ZTsKKyAgICAgICAgRVhQRUNUX05FQVIoZXhwZWN0ZWQsIG91dHB1dFtpXSwgdG9sZXJhbmNlKTsKKyAgICB9CisgICAgZm9yICg7IGkgPCBudW1PdXRwdXQ7IGkrKykgeworICAgICAgICBmbG9hdCBleHBlY3RlZCA9IHZhbHVlICogdGFyZ2V0OworICAgICAgICBFWFBFQ1RfTkVBUihleHBlY3RlZCwgb3V0cHV0W2ldLCB0b2xlcmFuY2UpOworICAgIH0KK30KKworLy8gSXQgaXMgZWFzaWVzdCB0byByZXByZXNlbnQgcGFja2VkIDI0LWJpdCBkYXRhIGFzIGEgYnl0ZSBhcnJheS4KKy8vIFRoaXMgdGVzdCB3aWxsIHJlYWQgZnJvbSBpbnB1dCwgY29udmVydCB0byBmbG9hdCwgdGhlbiB3cml0ZQorLy8gYmFjayB0byBvdXRwdXQgYXMgYnl0ZXMuCitURVNUKHRlc3RfZmxvd2dyYXBoLCBtb2R1bGVfcGFja2VkXzI0KSB7CisgICAgc3RhdGljIGNvbnN0IHVpbnQ4X3QgaW5wdXRbXSA9IHsweDAxLCAweDIzLCAweDQ1LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg2NywgMHg4OSwgMHhBQiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4Q0QsIDB4RUYsIDB4NUF9OworICAgIHVpbnQ4X3Qgb3V0cHV0Wzk5XSA9IHt9OworICAgIFNvdXJjZUkyNCBzb3VyY2VJMjR7MX07CisgICAgU2lua0kyNCBzaW5rSTI0ezF9OworCisgICAgaW50IG51bUlucHV0RnJhbWVzID0gc2l6ZW9mKGlucHV0KSAvIGtCeXRlc1BlckkyNFBhY2tlZDsKKyAgICBzb3VyY2VJMjQuc2V0RGF0YShpbnB1dCwgbnVtSW5wdXRGcmFtZXMpOworICAgIHNvdXJjZUkyNC5vdXRwdXQuY29ubmVjdCgmc2lua0kyNC5pbnB1dCk7CisKKyAgICBpbnQzMl90IG51bVJlYWQgPSBzaW5rSTI0LnJlYWQob3V0cHV0LCBzaXplb2Yob3V0cHV0KSAvIGtCeXRlc1BlckkyNFBhY2tlZCk7CisgICAgQVNTRVJUX0VRKG51bUlucHV0RnJhbWVzLCBudW1SZWFkKTsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHNpemVvZihpbnB1dCk7IGkrKykgeworICAgICAgICBFWFBFQ1RfRVEoaW5wdXRbaV0sIG91dHB1dFtpXSk7CisgICAgfQorfQorCitURVNUKHRlc3RfZmxvd2dyYXBoLCBtb2R1bGVfY2xpcF90b19yYW5nZSkgeworICAgIGNvbnN0ZXhwciBmbG9hdCBteU1pbiA9IC0yLjBmOworICAgIGNvbnN0ZXhwciBmbG9hdCBteU1heCA9IDEuNWY7CisKKyAgICBzdGF0aWMgY29uc3QgZmxvYXQgaW5wdXRbXSA9IHstOS43LCAwLjVmLCAtMC4yNSwgMS4wZiwgMTIuM307CisgICAgc3RhdGljIGNvbnN0IGZsb2F0IGV4cGVjdGVkW10gPSB7bXlNaW4sIDAuNWYsIC0wLjI1LCAxLjBmLCBteU1heH07CisgICAgZmxvYXQgb3V0cHV0WzEwMF07CisgICAgU291cmNlRmxvYXQgc291cmNlRmxvYXR7MX07CisgICAgQ2xpcFRvUmFuZ2UgY2xpcHBlcnsxfTsKKyAgICBTaW5rRmxvYXQgc2lua0Zsb2F0ezF9OworCisgICAgaW50IG51bUlucHV0RnJhbWVzID0gc2l6ZW9mKGlucHV0KSAvIHNpemVvZihpbnB1dFswXSk7CisgICAgc291cmNlRmxvYXQuc2V0RGF0YShpbnB1dCwgbnVtSW5wdXRGcmFtZXMpOworCisgICAgY2xpcHBlci5zZXRNaW5pbXVtKG15TWluKTsKKyAgICBjbGlwcGVyLnNldE1heGltdW0obXlNYXgpOworCisgICAgc291cmNlRmxvYXQub3V0cHV0LmNvbm5lY3QoJmNsaXBwZXIuaW5wdXQpOworICAgIGNsaXBwZXIub3V0cHV0LmNvbm5lY3QoJnNpbmtGbG9hdC5pbnB1dCk7CisKKyAgICBpbnQgbnVtT3V0cHV0RnJhbWVzID0gc2l6ZW9mKG91dHB1dCkgLyBzaXplb2Yob3V0cHV0WzBdKTsKKyAgICBpbnQzMl90IG51bVJlYWQgPSBzaW5rRmxvYXQucmVhZChvdXRwdXQsIG51bU91dHB1dEZyYW1lcyk7CisgICAgQVNTRVJUX0VRKG51bUlucHV0RnJhbWVzLCBudW1SZWFkKTsKKyAgICBjb25zdGV4cHIgZmxvYXQgdG9sZXJhbmNlID0gMC4wMDAwMDFmOyAvLyBhcmJpdHJhcnkKKyAgICBmb3IgKGludCBpID0gMDsgaSA8IG51bVJlYWQ7IGkrKykgeworICAgICAgICBFWFBFQ1RfTkVBUihleHBlY3RlZFtpXSwgb3V0cHV0W2ldLCB0b2xlcmFuY2UpOworICAgIH0KK30KZGlmZiAtLWdpdCBhL21lZGlhL2xpYmFhdWRpby90ZXN0cy90ZXN0X2xpbmVhcl9yYW1wLmNwcCBiL21lZGlhL2xpYmFhdWRpby90ZXN0cy90ZXN0X2xpbmVhcl9yYW1wLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTMyMjZiYS4uMDAwMDAwMAotLS0gYS9tZWRpYS9saWJhYXVkaW8vdGVzdHMvdGVzdF9saW5lYXJfcmFtcC5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSwxODAgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNyBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0Ci0gKgotICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7Ci0gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCi0gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLSAqCi0gKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotICoKLSAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKLSAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCi0gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KLSAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKLSAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgotICovCi0KLSNpbmNsdWRlIDxpb3N0cmVhbT4KLSNpbmNsdWRlIDxtYXRoLmg+Ci0KLSNpbmNsdWRlIDxndGVzdC9ndGVzdC5oPgotCi0jaW5jbHVkZSAidXRpbGl0eS9BQXVkaW9VdGlsaXRpZXMuaCIKLSNpbmNsdWRlICJ1dGlsaXR5L0xpbmVhclJhbXAuaCIKLQotVEVTVCh0ZXN0X2xpbmVhcl9yYW1wLCBsaW5lYXJfcmFtcF9zZWdtZW50cykgewotICAgIExpbmVhclJhbXAgcmFtcDsKLSAgICBjb25zdCBmbG9hdCBzb3VyY2VbNF0gPSB7MS4wZiwgMS4wZiwgMS4wZiwgMS4wZiB9OwotICAgIGZsb2F0IGRlc3RpbmF0aW9uWzRdID0gezEuMGYsIDEuMGYsIDEuMGYsIDEuMGYgfTsKLQotICAgIGZsb2F0IGxldmVsRnJvbSA9IC0xLjBmOwotICAgIGZsb2F0IGxldmVsVG8gPSAtMS4wZjsKLSAgICByYW1wLnNldExlbmd0aEluRnJhbWVzKDgpOwotICAgIHJhbXAuc2V0VGFyZ2V0KDguMGYpOwotCi0gICAgRVhQRUNUX0VRKDgsIHJhbXAuZ2V0TGVuZ3RoSW5GcmFtZXMoKSk7Ci0KLSAgICBib29sIHJhbXBpbmcgPSByYW1wLm5leHRTZWdtZW50KDQsICZsZXZlbEZyb20sICZsZXZlbFRvKTsKLSAgICBFWFBFQ1RfRVEoMSwgcmFtcGluZyk7Ci0gICAgRVhQRUNUX0VRKDAuMGYsIGxldmVsRnJvbSk7Ci0gICAgRVhQRUNUX0VRKDQuMGYsIGxldmVsVG8pOwotCi0gICAgQUF1ZGlvX2xpbmVhclJhbXAoc291cmNlLCBkZXN0aW5hdGlvbiwgNCwgMSwgbGV2ZWxGcm9tLCBsZXZlbFRvKTsKLSAgICBFWFBFQ1RfRVEoMC4wZiwgZGVzdGluYXRpb25bMF0pOwotICAgIEVYUEVDVF9FUSgxLjBmLCBkZXN0aW5hdGlvblsxXSk7Ci0gICAgRVhQRUNUX0VRKDIuMGYsIGRlc3RpbmF0aW9uWzJdKTsKLSAgICBFWFBFQ1RfRVEoMy4wZiwgZGVzdGluYXRpb25bM10pOwotCi0gICAgcmFtcGluZyA9IHJhbXAubmV4dFNlZ21lbnQoNCwgJmxldmVsRnJvbSwgJmxldmVsVG8pOwotICAgIEVYUEVDVF9FUSgxLCByYW1waW5nKTsKLSAgICBFWFBFQ1RfRVEoNC4wZiwgbGV2ZWxGcm9tKTsKLSAgICBFWFBFQ1RfRVEoOC4wZiwgbGV2ZWxUbyk7Ci0KLSAgICBBQXVkaW9fbGluZWFyUmFtcChzb3VyY2UsIGRlc3RpbmF0aW9uLCA0LCAxLCBsZXZlbEZyb20sIGxldmVsVG8pOwotICAgIEVYUEVDVF9FUSg0LjBmLCBkZXN0aW5hdGlvblswXSk7Ci0gICAgRVhQRUNUX0VRKDUuMGYsIGRlc3RpbmF0aW9uWzFdKTsKLSAgICBFWFBFQ1RfRVEoNi4wZiwgZGVzdGluYXRpb25bMl0pOwotICAgIEVYUEVDVF9FUSg3LjBmLCBkZXN0aW5hdGlvblszXSk7Ci0KLSAgICByYW1waW5nID0gcmFtcC5uZXh0U2VnbWVudCg0LCAmbGV2ZWxGcm9tLCAmbGV2ZWxUbyk7Ci0gICAgRVhQRUNUX0VRKDAsIHJhbXBpbmcpOwotICAgIEVYUEVDVF9FUSg4LjBmLCBsZXZlbEZyb20pOwotICAgIEVYUEVDVF9FUSg4LjBmLCBsZXZlbFRvKTsKLQotICAgIEFBdWRpb19saW5lYXJSYW1wKHNvdXJjZSwgZGVzdGluYXRpb24sIDQsIDEsIGxldmVsRnJvbSwgbGV2ZWxUbyk7Ci0gICAgRVhQRUNUX0VRKDguMGYsIGRlc3RpbmF0aW9uWzBdKTsKLSAgICBFWFBFQ1RfRVEoOC4wZiwgZGVzdGluYXRpb25bMV0pOwotICAgIEVYUEVDVF9FUSg4LjBmLCBkZXN0aW5hdGlvblsyXSk7Ci0gICAgRVhQRUNUX0VRKDguMGYsIGRlc3RpbmF0aW9uWzNdKTsKLQotfTsKLQotCi1URVNUKHRlc3RfbGluZWFyX3JhbXAsIGxpbmVhcl9yYW1wX2ZvcmNlZCkgewotICAgIExpbmVhclJhbXAgcmFtcDsKLSAgICBjb25zdCBmbG9hdCBzb3VyY2VbNF0gPSB7MS4wZiwgMS4wZiwgMS4wZiwgMS4wZiB9OwotICAgIGZsb2F0IGRlc3RpbmF0aW9uWzRdID0gezEuMGYsIDEuMGYsIDEuMGYsIDEuMGYgfTsKLQotICAgIGZsb2F0IGxldmVsRnJvbSA9IC0xLjBmOwotICAgIGZsb2F0IGxldmVsVG8gPSAtMS4wZjsKLSAgICByYW1wLnNldExlbmd0aEluRnJhbWVzKDQpOwotICAgIHJhbXAuc2V0VGFyZ2V0KDguMGYpOwotICAgIHJhbXAuZm9yY2VDdXJyZW50KDQuMGYpOwotICAgIEVYUEVDVF9FUSg0LjBmLCByYW1wLmdldEN1cnJlbnQoKSk7Ci0KLSAgICBib29sIHJhbXBpbmcgPSByYW1wLm5leHRTZWdtZW50KDQsICZsZXZlbEZyb20sICZsZXZlbFRvKTsKLSAgICBFWFBFQ1RfRVEoMSwgcmFtcGluZyk7Ci0gICAgRVhQRUNUX0VRKDQuMGYsIGxldmVsRnJvbSk7Ci0gICAgRVhQRUNUX0VRKDguMGYsIGxldmVsVG8pOwotCi0gICAgQUF1ZGlvX2xpbmVhclJhbXAoc291cmNlLCBkZXN0aW5hdGlvbiwgNCwgMSwgbGV2ZWxGcm9tLCBsZXZlbFRvKTsKLSAgICBFWFBFQ1RfRVEoNC4wZiwgZGVzdGluYXRpb25bMF0pOwotICAgIEVYUEVDVF9FUSg1LjBmLCBkZXN0aW5hdGlvblsxXSk7Ci0gICAgRVhQRUNUX0VRKDYuMGYsIGRlc3RpbmF0aW9uWzJdKTsKLSAgICBFWFBFQ1RfRVEoNy4wZiwgZGVzdGluYXRpb25bM10pOwotCi0gICAgcmFtcGluZyA9IHJhbXAubmV4dFNlZ21lbnQoNCwgJmxldmVsRnJvbSwgJmxldmVsVG8pOwotICAgIEVYUEVDVF9FUSgwLCByYW1waW5nKTsKLSAgICBFWFBFQ1RfRVEoOC4wZiwgbGV2ZWxGcm9tKTsKLSAgICBFWFBFQ1RfRVEoOC4wZiwgbGV2ZWxUbyk7Ci0KLSAgICBBQXVkaW9fbGluZWFyUmFtcChzb3VyY2UsIGRlc3RpbmF0aW9uLCA0LCAxLCBsZXZlbEZyb20sIGxldmVsVG8pOwotICAgIEVYUEVDVF9FUSg4LjBmLCBkZXN0aW5hdGlvblswXSk7Ci0gICAgRVhQRUNUX0VRKDguMGYsIGRlc3RpbmF0aW9uWzFdKTsKLSAgICBFWFBFQ1RfRVEoOC4wZiwgZGVzdGluYXRpb25bMl0pOwotICAgIEVYUEVDVF9FUSg4LjBmLCBkZXN0aW5hdGlvblszXSk7Ci0KLX07Ci0KLWNvbnN0ZXhwciBpbnQxNl90IGtNYXhJMTYgPSBJTlQxNl9NQVg7Ci1jb25zdGV4cHIgaW50MTZfdCBrTWluSTE2ID0gSU5UMTZfTUlOOwotY29uc3RleHByIGludDE2X3Qga0hhbGZJMTYgPSAxNjM4NDsKLWNvbnN0ZXhwciBpbnQxNl90IGtUZW50aEkxNiA9IDMyNzc7Ci0KLS8vdm9pZCBBQXVkaW9Db252ZXJ0X2Zsb2F0VG9QY20xNihjb25zdCBmbG9hdCAqc291cmNlLAotLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludDE2X3QgKmRlc3RpbmF0aW9uLAotLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludDMyX3QgbnVtU2FtcGxlcywKLS8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmbG9hdCBhbXBsaXR1ZGUpOwotVEVTVCh0ZXN0X2xpbmVhcl9yYW1wLCBmbG9hdF90b19pMTYpIHsKLSAgICBjb25zdCBmbG9hdCBzb3VyY2VbXSA9IHsxMjM0NS42ZiwgMS4wZiwgMC41ZiwgMC4xZiwgMC4wZiwgLTAuMWYsIC0wLjVmLCAtMS4wZiwgLTEyMzQ1LjZmfTsKLSAgICBjb25zdGV4cHIgc2l6ZV90IGNvdW50ID0gc2l6ZW9mKHNvdXJjZSkgLyBzaXplb2Yoc291cmNlWzBdKTsKLSAgICBpbnQxNl90IGRlc3RpbmF0aW9uW2NvdW50XTsKLSAgICBjb25zdCBpbnQxNl90IGV4cGVjdGVkW2NvdW50XSA9IHtrTWF4STE2LCBrTWF4STE2LCBrSGFsZkkxNiwga1RlbnRoSTE2LCAwLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC1rVGVudGhJMTYsIC1rSGFsZkkxNiwga01pbkkxNiwga01pbkkxNn07Ci0KLSAgICBBQXVkaW9Db252ZXJ0X2Zsb2F0VG9QY20xNihzb3VyY2UsIGRlc3RpbmF0aW9uLCBjb3VudCwgMS4wZik7Ci0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBjb3VudDsgaSsrKSB7Ci0gICAgICAgIEVYUEVDVF9FUShleHBlY3RlZFtpXSwgZGVzdGluYXRpb25baV0pOwotICAgIH0KLQotfQotCi0vL3ZvaWQgQUF1ZGlvQ29udmVydF9wY20xNlRvRmxvYXQoY29uc3QgaW50MTZfdCAqc291cmNlLAotLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZsb2F0ICpkZXN0aW5hdGlvbiwKLS8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQzMl90IG51bVNhbXBsZXMsCi0vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmxvYXQgYW1wbGl0dWRlKTsKLVRFU1QodGVzdF9saW5lYXJfcmFtcCwgaTE2X3RvX2Zsb2F0KSB7Ci0gICAgY29uc3QgaW50MTZfdCBzb3VyY2VbXSA9IHtrTWF4STE2LCBrSGFsZkkxNiwga1RlbnRoSTE2LCAwLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLWtUZW50aEkxNiwgLWtIYWxmSTE2LCBrTWluSTE2fTsKLSAgICBjb25zdGV4cHIgc2l6ZV90IGNvdW50ID0gc2l6ZW9mKHNvdXJjZSkgLyBzaXplb2Yoc291cmNlWzBdKTsKLSAgICBmbG9hdCBkZXN0aW5hdGlvbltjb3VudF07Ci0gICAgY29uc3QgZmxvYXQgZXhwZWN0ZWRbY291bnRdID0geygzMjc2Ny4wZiAvIDMyNzY4LjBmKSwgMC41ZiwgMC4xZiwgMC4wZiwgLTAuMWYsIC0wLjVmLCAtMS4wZn07Ci0KLSAgICBBQXVkaW9Db252ZXJ0X3BjbTE2VG9GbG9hdChzb3VyY2UsIGRlc3RpbmF0aW9uLCBjb3VudCwgMS4wZik7Ci0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBjb3VudDsgaSsrKSB7Ci0gICAgICAgIEVYUEVDVF9ORUFSKGV4cGVjdGVkW2ldLCBkZXN0aW5hdGlvbltpXSwgMC4wMDAxZik7Ci0gICAgfQotCi19Ci0KLS8vdm9pZCBBQXVkaW9fbGluZWFyUmFtcChjb25zdCBpbnQxNl90ICpzb3VyY2UsCi0vLyAgICAgICAgICAgICAgICAgICAgICAgaW50MTZfdCAqZGVzdGluYXRpb24sCi0vLyAgICAgICAgICAgICAgICAgICAgICAgaW50MzJfdCBudW1GcmFtZXMsCi0vLyAgICAgICAgICAgICAgICAgICAgICAgaW50MzJfdCBzYW1wbGVzUGVyRnJhbWUsCi0vLyAgICAgICAgICAgICAgICAgICAgICAgZmxvYXQgYW1wbGl0dWRlMSwKLS8vICAgICAgICAgICAgICAgICAgICAgICBmbG9hdCBhbXBsaXR1ZGUyKTsKLVRFU1QodGVzdF9saW5lYXJfcmFtcCwgcmFtcF9pMTZfdG9faTE2KSB7Ci0gICAgY29uc3QgaW50MTZfdCBzb3VyY2VbXSA9IHsxLCAxLCAxLCAxLCAxLCAxLCAxLCAxfTsKLSAgICBjb25zdGV4cHIgc2l6ZV90IGNvdW50ID0gc2l6ZW9mKHNvdXJjZSkgLyBzaXplb2Yoc291cmNlWzBdKTsKLSAgICBpbnQxNl90IGRlc3RpbmF0aW9uW2NvdW50XTsKLSAgICAvLyBSYW1wIHdpbGwgc3dlZXAgZnJvbSAtMSB0byBhbG1vc3QgKzEKLSAgICBjb25zdCBpbnQxNl90IGV4cGVjdGVkW2NvdW50XSA9IHsKLSAgICAgICAgICAgIC0xLCAvLyBmcm9tIC0xLjAwCi0gICAgICAgICAgICAtMSwgLy8gZnJvbSAtMC43NQotICAgICAgICAgICAgLTEsIC8vIGZyb20gLTAuNTUsIHJvdW5kIGF3YXkgZnJvbSB6ZXJvCi0gICAgICAgICAgICAwLCAgLy8gZnJvbSAtMC4yNSwgcm91bmQgdXAgdG8gemVybwotICAgICAgICAgICAgMCwgIC8vIGZyb20gIDAuMDAKLSAgICAgICAgICAgIDAsICAvLyBmcm9tICAwLjI1LCByb3VuZCBkb3duIHRvIHplcm8KLSAgICAgICAgICAgIDEsICAvLyBmcm9tICAwLjUwLCByb3VuZCBhd2F5IGZyb20gemVybwotICAgICAgICAgICAgMSAgIC8vIGZyb20gIDAuNzUKLSAgICB9OwotCi0gICAgLy8gc3dlZXAgYWNyb3NzIHplcm8gdG8gdGVzdCBzeW1tZXRyeQotICAgIGNvbnN0ZXhwciBmbG9hdCBhbXBsaXR1ZGUxID0gLTEuMDsKLSAgICBjb25zdGV4cHIgZmxvYXQgYW1wbGl0dWRlMiA9IDEuMDsKLSAgICBBQXVkaW9fbGluZWFyUmFtcChzb3VyY2UsIGRlc3RpbmF0aW9uLCBjb3VudCwgMSwgYW1wbGl0dWRlMSwgYW1wbGl0dWRlMik7Ci0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBjb3VudDsgaSsrKSB7Ci0gICAgICAgIEVYUEVDVF9FUShleHBlY3RlZFtpXSwgZGVzdGluYXRpb25baV0pOwotICAgIH0KLQotfQpkaWZmIC0tZ2l0IGEvbWVkaWEvbGliYXVkaW9jbGllbnQvQW5kcm9pZC5icCBiL21lZGlhL2xpYmF1ZGlvY2xpZW50L0FuZHJvaWQuYnAKaW5kZXggZjkzZDQ0Yi4uODI3ZGY2YSAxMDA2NDQKLS0tIGEvbWVkaWEvbGliYXVkaW9jbGllbnQvQW5kcm9pZC5icAorKysgYi9tZWRpYS9saWJhdWRpb2NsaWVudC9BbmRyb2lkLmJwCkBAIC00MCwxNSArNDAsMTcgQEAKICAgICAgICAgIlRyYWNrUGxheWVyQmFzZS5jcHAiLAogICAgIF0sCiAgICAgc2hhcmVkX2xpYnM6IFsKLSAgICAgICAgImxpYmxvZyIsCi0gICAgICAgICJsaWJjdXRpbHMiLAotICAgICAgICAibGlidXRpbHMiLAotICAgICAgICAibGliYmluZGVyIiwKLSAgICAgICAgImxpYmRsIiwKICAgICAgICAgImxpYmF1ZGlvdXRpbHMiLAogICAgICAgICAibGliYXVkaW9tYW5hZ2VyIiwKKyAgICAgICAgImxpYmJpbmRlciIsCisgICAgICAgICJsaWJjdXRpbHMiLAorICAgICAgICAibGliZGwiLAorICAgICAgICAibGlibG9nIiwKICAgICAgICAgImxpYm1lZGlhX2hlbHBlciIsCiAgICAgICAgICJsaWJtZWRpYW1ldHJpY3MiLAorICAgICAgICAibGlibWVkaWF1dGlscyIsCisgICAgICAgICJsaWJuYmxvZyIsCisgICAgICAgICJsaWJ1dGlscyIsCiAgICAgXSwKICAgICBleHBvcnRfc2hhcmVkX2xpYl9oZWFkZXJzOiBbImxpYmJpbmRlciJdLAogCmRpZmYgLS1naXQgYS9tZWRpYS9saWJhdWRpb2NsaWVudC9BdWRpb0VmZmVjdC5jcHAgYi9tZWRpYS9saWJhdWRpb2NsaWVudC9BdWRpb0VmZmVjdC5jcHAKaW5kZXggYjQwZjBkYi4uY2YxMTkzNiAxMDA2NDQKLS0tIGEvbWVkaWEvbGliYXVkaW9jbGllbnQvQXVkaW9FZmZlY3QuY3BwCisrKyBiL21lZGlhL2xpYmF1ZGlvY2xpZW50L0F1ZGlvRWZmZWN0LmNwcApAQCAtNDMyLDE0ICs0MzIsMTUgQEAKIH0KIAogc3RhdHVzX3QgQXVkaW9FZmZlY3Q6OmdldEVmZmVjdERlc2NyaXB0b3IoY29uc3QgZWZmZWN0X3V1aWRfdCAqdXVpZCwKLSAgICAgICAgZWZmZWN0X2Rlc2NyaXB0b3JfdCAqZGVzY3JpcHRvcikgLypjb25zdCovCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBlZmZlY3RfdXVpZF90ICp0eXBlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3QgcHJlZmVycmVkVHlwZUZsYWcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlZmZlY3RfZGVzY3JpcHRvcl90ICpkZXNjcmlwdG9yKQogewogICAgIGNvbnN0IHNwPElBdWRpb0ZsaW5nZXI+JiBhZiA9IEF1ZGlvU3lzdGVtOjpnZXRfYXVkaW9fZmxpbmdlcigpOwogICAgIGlmIChhZiA9PSAwKSByZXR1cm4gUEVSTUlTU0lPTl9ERU5JRUQ7Ci0gICAgcmV0dXJuIGFmLT5nZXRFZmZlY3REZXNjcmlwdG9yKHV1aWQsIGRlc2NyaXB0b3IpOworICAgIHJldHVybiBhZi0+Z2V0RWZmZWN0RGVzY3JpcHRvcih1dWlkLCB0eXBlLCBwcmVmZXJyZWRUeXBlRmxhZywgZGVzY3JpcHRvcik7CiB9CiAKLQogc3RhdHVzX3QgQXVkaW9FZmZlY3Q6OnF1ZXJ5RGVmYXVsdFByZVByb2Nlc3NpbmcoYXVkaW9fc2Vzc2lvbl90IGF1ZGlvU2Vzc2lvbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVmZmVjdF9kZXNjcmlwdG9yX3QgKmRlc2NyaXB0b3JzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3QgKmNvdW50KQpAQCAtNDQ4LDYgKzQ0OSw5NSBAQAogICAgIGlmIChhcHMgPT0gMCkgcmV0dXJuIFBFUk1JU1NJT05fREVOSUVEOwogICAgIHJldHVybiBhcHMtPnF1ZXJ5RGVmYXVsdFByZVByb2Nlc3NpbmcoYXVkaW9TZXNzaW9uLCBkZXNjcmlwdG9ycywgY291bnQpOwogfQorCitzdGF0dXNfdCBBdWRpb0VmZmVjdDo6bmV3RWZmZWN0VW5pcXVlSWQoYXVkaW9fdW5pcXVlX2lkX3QqIGlkKQoreworICAgIGNvbnN0IHNwPElBdWRpb0ZsaW5nZXI+JiBhZiA9IEF1ZGlvU3lzdGVtOjpnZXRfYXVkaW9fZmxpbmdlcigpOworICAgIGlmIChhZiA9PSAwKSByZXR1cm4gUEVSTUlTU0lPTl9ERU5JRUQ7CisgICAgKmlkID0gYWYtPm5ld0F1ZGlvVW5pcXVlSWQoQVVESU9fVU5JUVVFX0lEX1VTRV9FRkZFQ1QpOworICAgIHJldHVybiBOT19FUlJPUjsKK30KKworc3RhdHVzX3QgQXVkaW9FZmZlY3Q6OmFkZFNvdXJjZURlZmF1bHRFZmZlY3QoY29uc3QgY2hhciAqdHlwZVN0ciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFN0cmluZzE2JiBvcFBhY2thZ2VOYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqdXVpZFN0ciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludDMyX3QgcHJpb3JpdHksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdWRpb19zb3VyY2VfdCBzb3VyY2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdWRpb191bmlxdWVfaWRfdCAqaWQpCit7CisgICAgY29uc3Qgc3A8SUF1ZGlvUG9saWN5U2VydmljZT4mIGFwcyA9IEF1ZGlvU3lzdGVtOjpnZXRfYXVkaW9fcG9saWN5X3NlcnZpY2UoKTsKKyAgICBpZiAoYXBzID09IDApIHJldHVybiBQRVJNSVNTSU9OX0RFTklFRDsKKworICAgIGlmICh0eXBlU3RyID09IE5VTEwgJiYgdXVpZFN0ciA9PSBOVUxMKSByZXR1cm4gQkFEX1ZBTFVFOworCisgICAgLy8gQ29udmVydCB0eXBlICYgdXVpZCBmcm9tIHN0cmluZyB0byBlZmZlY3RfdXVpZF90LgorICAgIGVmZmVjdF91dWlkX3QgdHlwZTsKKyAgICBpZiAodHlwZVN0ciAhPSBOVUxMKSB7CisgICAgICAgIHN0YXR1c190IHJlcyA9IHN0cmluZ1RvR3VpZCh0eXBlU3RyLCAmdHlwZSk7CisgICAgICAgIGlmIChyZXMgIT0gT0spIHJldHVybiByZXM7CisgICAgfSBlbHNlIHsKKyAgICAgICAgdHlwZSA9ICpFRkZFQ1RfVVVJRF9OVUxMOworICAgIH0KKworICAgIGVmZmVjdF91dWlkX3QgdXVpZDsKKyAgICBpZiAodXVpZFN0ciAhPSBOVUxMKSB7CisgICAgICAgIHN0YXR1c190IHJlcyA9IHN0cmluZ1RvR3VpZCh1dWlkU3RyLCAmdXVpZCk7CisgICAgICAgIGlmIChyZXMgIT0gT0spIHJldHVybiByZXM7CisgICAgfSBlbHNlIHsKKyAgICAgICAgdXVpZCA9ICpFRkZFQ1RfVVVJRF9OVUxMOworICAgIH0KKworICAgIHJldHVybiBhcHMtPmFkZFNvdXJjZURlZmF1bHRFZmZlY3QoJnR5cGUsIG9wUGFja2FnZU5hbWUsICZ1dWlkLCBwcmlvcml0eSwgc291cmNlLCBpZCk7Cit9CisKK3N0YXR1c190IEF1ZGlvRWZmZWN0OjphZGRTdHJlYW1EZWZhdWx0RWZmZWN0KGNvbnN0IGNoYXIgKnR5cGVTdHIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBTdHJpbmcxNiYgb3BQYWNrYWdlTmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKnV1aWRTdHIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQzMl90IHByaW9yaXR5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXVkaW9fdXNhZ2VfdCB1c2FnZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF1ZGlvX3VuaXF1ZV9pZF90ICppZCkKK3sKKyAgICBjb25zdCBzcDxJQXVkaW9Qb2xpY3lTZXJ2aWNlPiYgYXBzID0gQXVkaW9TeXN0ZW06OmdldF9hdWRpb19wb2xpY3lfc2VydmljZSgpOworICAgIGlmIChhcHMgPT0gMCkgcmV0dXJuIFBFUk1JU1NJT05fREVOSUVEOworCisgICAgaWYgKHR5cGVTdHIgPT0gTlVMTCAmJiB1dWlkU3RyID09IE5VTEwpIHJldHVybiBCQURfVkFMVUU7CisKKyAgICAvLyBDb252ZXJ0IHR5cGUgJiB1dWlkIGZyb20gc3RyaW5nIHRvIGVmZmVjdF91dWlkX3QuCisgICAgZWZmZWN0X3V1aWRfdCB0eXBlOworICAgIGlmICh0eXBlU3RyICE9IE5VTEwpIHsKKyAgICAgICAgc3RhdHVzX3QgcmVzID0gc3RyaW5nVG9HdWlkKHR5cGVTdHIsICZ0eXBlKTsKKyAgICAgICAgaWYgKHJlcyAhPSBPSykgcmV0dXJuIHJlczsKKyAgICB9IGVsc2UgeworICAgICAgICB0eXBlID0gKkVGRkVDVF9VVUlEX05VTEw7CisgICAgfQorCisgICAgZWZmZWN0X3V1aWRfdCB1dWlkOworICAgIGlmICh1dWlkU3RyICE9IE5VTEwpIHsKKyAgICAgICAgc3RhdHVzX3QgcmVzID0gc3RyaW5nVG9HdWlkKHV1aWRTdHIsICZ1dWlkKTsKKyAgICAgICAgaWYgKHJlcyAhPSBPSykgcmV0dXJuIHJlczsKKyAgICB9IGVsc2UgeworICAgICAgICB1dWlkID0gKkVGRkVDVF9VVUlEX05VTEw7CisgICAgfQorCisgICAgcmV0dXJuIGFwcy0+YWRkU3RyZWFtRGVmYXVsdEVmZmVjdCgmdHlwZSwgb3BQYWNrYWdlTmFtZSwgJnV1aWQsIHByaW9yaXR5LCB1c2FnZSwgaWQpOworfQorCitzdGF0dXNfdCBBdWRpb0VmZmVjdDo6cmVtb3ZlU291cmNlRGVmYXVsdEVmZmVjdChhdWRpb191bmlxdWVfaWRfdCBpZCkKK3sKKyAgICBjb25zdCBzcDxJQXVkaW9Qb2xpY3lTZXJ2aWNlPiYgYXBzID0gQXVkaW9TeXN0ZW06OmdldF9hdWRpb19wb2xpY3lfc2VydmljZSgpOworICAgIGlmIChhcHMgPT0gMCkgcmV0dXJuIFBFUk1JU1NJT05fREVOSUVEOworCisgICAgcmV0dXJuIGFwcy0+cmVtb3ZlU291cmNlRGVmYXVsdEVmZmVjdChpZCk7Cit9CisKK3N0YXR1c190IEF1ZGlvRWZmZWN0OjpyZW1vdmVTdHJlYW1EZWZhdWx0RWZmZWN0KGF1ZGlvX3VuaXF1ZV9pZF90IGlkKQoreworICAgIGNvbnN0IHNwPElBdWRpb1BvbGljeVNlcnZpY2U+JiBhcHMgPSBBdWRpb1N5c3RlbTo6Z2V0X2F1ZGlvX3BvbGljeV9zZXJ2aWNlKCk7CisgICAgaWYgKGFwcyA9PSAwKSByZXR1cm4gUEVSTUlTU0lPTl9ERU5JRUQ7CisKKyAgICByZXR1cm4gYXBzLT5yZW1vdmVTdHJlYW1EZWZhdWx0RWZmZWN0KGlkKTsKK30KKwogLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCiBzdGF0dXNfdCBBdWRpb0VmZmVjdDo6c3RyaW5nVG9HdWlkKGNvbnN0IGNoYXIgKnN0ciwgZWZmZWN0X3V1aWRfdCAqZ3VpZCkKZGlmZiAtLWdpdCBhL21lZGlhL2xpYmF1ZGlvY2xpZW50L0F1ZGlvUmVjb3JkLmNwcCBiL21lZGlhL2xpYmF1ZGlvY2xpZW50L0F1ZGlvUmVjb3JkLmNwcAppbmRleCAwYWFiYWY3Li4wMzhjODU0IDEwMDY0NAotLS0gYS9tZWRpYS9saWJhdWRpb2NsaWVudC9BdWRpb1JlY29yZC5jcHAKKysrIGIvbWVkaWEvbGliYXVkaW9jbGllbnQvQXVkaW9SZWNvcmQuY3BwCkBAIC00OSw4ICs0OSw5IEBACiAgICAgc2l6ZV90IHNpemU7CiAgICAgc3RhdHVzX3Qgc3RhdHVzID0gQXVkaW9TeXN0ZW06OmdldElucHV0QnVmZmVyU2l6ZShzYW1wbGVSYXRlLCBmb3JtYXQsIGNoYW5uZWxNYXNrLCAmc2l6ZSk7CiAgICAgaWYgKHN0YXR1cyAhPSBOT19FUlJPUikgewotICAgICAgICBBTE9HRSgiQXVkaW9TeXN0ZW0gY291bGQgbm90IHF1ZXJ5IHRoZSBpbnB1dCBidWZmZXIgc2l6ZSBmb3Igc2FtcGxlUmF0ZSAldSwgZm9ybWF0ICUjeCwgIgotICAgICAgICAgICAgICAiY2hhbm5lbE1hc2sgJSN4OyBzdGF0dXMgJWQiLCBzYW1wbGVSYXRlLCBmb3JtYXQsIGNoYW5uZWxNYXNrLCBzdGF0dXMpOworICAgICAgICBBTE9HRSgiJXMoKTogQXVkaW9TeXN0ZW0gY291bGQgbm90IHF1ZXJ5IHRoZSBpbnB1dCBidWZmZXIgc2l6ZSBmb3IiCisgICAgICAgICAgICAgICIgc2FtcGxlUmF0ZSAldSwgZm9ybWF0ICUjeCwgY2hhbm5lbE1hc2sgJSN4OyBzdGF0dXMgJWQiLAorICAgICAgICAgICAgICAgX19mdW5jX18sIHNhbXBsZVJhdGUsIGZvcm1hdCwgY2hhbm5lbE1hc2ssIHN0YXR1cyk7CiAgICAgICAgIHJldHVybiBzdGF0dXM7CiAgICAgfQogCkBAIC01OCw4ICs1OSw4IEBACiAgICAgLy8gQXNzdW1lcyBhdWRpb19pc19saW5lYXJfcGNtKGZvcm1hdCkKICAgICBpZiAoKCpmcmFtZUNvdW50ID0gKHNpemUgKiAyKSAvIChhdWRpb19jaGFubmVsX2NvdW50X2Zyb21faW5fbWFzayhjaGFubmVsTWFzaykgKgogICAgICAgICAgICAgYXVkaW9fYnl0ZXNfcGVyX3NhbXBsZShmb3JtYXQpKSkgPT0gMCkgewotICAgICAgICBBTE9HRSgiVW5zdXBwb3J0ZWQgY29uZmlndXJhdGlvbjogc2FtcGxlUmF0ZSAldSwgZm9ybWF0ICUjeCwgY2hhbm5lbE1hc2sgJSN4IiwKLSAgICAgICAgICAgIHNhbXBsZVJhdGUsIGZvcm1hdCwgY2hhbm5lbE1hc2spOworICAgICAgICBBTE9HRSgiJXMoKTogVW5zdXBwb3J0ZWQgY29uZmlndXJhdGlvbjogc2FtcGxlUmF0ZSAldSwgZm9ybWF0ICUjeCwgY2hhbm5lbE1hc2sgJSN4IiwKKyAgICAgICAgICAgICAgICBfX2Z1bmNfXywgc2FtcGxlUmF0ZSwgZm9ybWF0LCBjaGFubmVsTWFzayk7CiAgICAgICAgIHJldHVybiBCQURfVkFMVUU7CiAgICAgfQogCkBAIC0yMDksOCArMjEwLDggQEAKICAgICAgICAgbUNibGtNZW1vcnkuY2xlYXIoKTsKICAgICAgICAgbUJ1ZmZlck1lbW9yeS5jbGVhcigpOwogICAgICAgICBJUENUaHJlYWRTdGF0ZTo6c2VsZigpLT5mbHVzaENvbW1hbmRzKCk7Ci0gICAgICAgIEFMT0dWKCJ+QXVkaW9SZWNvcmQsIHJlbGVhc2luZyBzZXNzaW9uIGlkICVkIiwKLSAgICAgICAgICAgICAgICBtU2Vzc2lvbklkKTsKKyAgICAgICAgQUxPR1YoIiVzKCVkKTogcmVsZWFzaW5nIHNlc3Npb24gaWQgJWQiLAorICAgICAgICAgICAgICAgIF9fZnVuY19fLCBtSWQsIG1TZXNzaW9uSWQpOwogICAgICAgICBBdWRpb1N5c3RlbTo6cmVsZWFzZUF1ZGlvU2Vzc2lvbklkKG1TZXNzaW9uSWQsIC0xIC8qcGlkKi8pOwogICAgIH0KIH0KQEAgLTIzOCw5ICsyMzksMTEgQEAKICAgICBwaWRfdCBjYWxsaW5nUGlkOwogICAgIHBpZF90IG15UGlkOwogCi0gICAgQUxPR1YoInNldCgpOiBpbnB1dFNvdXJjZSAlZCwgc2FtcGxlUmF0ZSAldSwgZm9ybWF0ICUjeCwgY2hhbm5lbE1hc2sgJSN4LCBmcmFtZUNvdW50ICV6dSwgIgorICAgIC8vIE5vdGUgbUlkIGlzIG5vdCB2YWxpZCB1bnRpbCB0aGUgdHJhY2sgaXMgY3JlYXRlZCwgc28gb21pdCBtSWQgaW4gQUxPRyBmb3Igc2V0LgorICAgIEFMT0dWKCIlcygpOiBpbnB1dFNvdXJjZSAlZCwgc2FtcGxlUmF0ZSAldSwgZm9ybWF0ICUjeCwgY2hhbm5lbE1hc2sgJSN4LCBmcmFtZUNvdW50ICV6dSwgIgogICAgICAgICAgICJub3RpZmljYXRpb25GcmFtZXMgJXUsIHNlc3Npb25JZCAlZCwgdHJhbnNmZXJUeXBlICVkLCBmbGFncyAlI3gsIG9wUGFja2FnZU5hbWUgJXMgIgogICAgICAgICAgICJ1aWQgJWQsIHBpZCAlZCIsCisgICAgICAgICAgX19mdW5jX18sCiAgICAgICAgICAgaW5wdXRTb3VyY2UsIHNhbXBsZVJhdGUsIGZvcm1hdCwgY2hhbm5lbE1hc2ssIGZyYW1lQ291bnQsIG5vdGlmaWNhdGlvbkZyYW1lcywKICAgICAgICAgICBzZXNzaW9uSWQsIHRyYW5zZmVyVHlwZSwgZmxhZ3MsIFN0cmluZzgobU9wUGFja2FnZU5hbWUpLnN0cmluZygpLCB1aWQsIHBpZCk7CiAKQEAgLTI1Niw3ICsyNTksNyBAQAogICAgICAgICBicmVhazsKICAgICBjYXNlIFRSQU5TRkVSX0NBTExCQUNLOgogICAgICAgICBpZiAoY2JmID09IE5VTEwpIHsKLSAgICAgICAgICAgIEFMT0dFKCJUcmFuc2ZlciB0eXBlIFRSQU5TRkVSX0NBTExCQUNLIGJ1dCBjYmYgPT0gTlVMTCIpOworICAgICAgICAgICAgQUxPR0UoIiVzKCk6IFRyYW5zZmVyIHR5cGUgVFJBTlNGRVJfQ0FMTEJBQ0sgYnV0IGNiZiA9PSBOVUxMIiwgX19mdW5jX18pOwogICAgICAgICAgICAgc3RhdHVzID0gQkFEX1ZBTFVFOwogICAgICAgICAgICAgZ290byBleGl0OwogICAgICAgICB9CkBAIC0yNjUsNyArMjY4LDcgQEAKICAgICBjYXNlIFRSQU5TRkVSX1NZTkM6CiAgICAgICAgIGJyZWFrOwogICAgIGRlZmF1bHQ6Ci0gICAgICAgIEFMT0dFKCJJbnZhbGlkIHRyYW5zZmVyIHR5cGUgJWQiLCB0cmFuc2ZlclR5cGUpOworICAgICAgICBBTE9HRSgiJXMoKTogSW52YWxpZCB0cmFuc2ZlciB0eXBlICVkIiwgX19mdW5jX18sIHRyYW5zZmVyVHlwZSk7CiAgICAgICAgIHN0YXR1cyA9IEJBRF9WQUxVRTsKICAgICAgICAgZ290byBleGl0OwogICAgIH0KQEAgLTI3Myw3ICsyNzYsNyBAQAogCiAgICAgLy8gaW52YXJpYW50IHRoYXQgbUF1ZGlvUmVjb3JkICE9IDAgaXMgdHJ1ZSBvbmx5IGFmdGVyIHNldCgpIHJldHVybnMgc3VjY2Vzc2Z1bGx5CiAgICAgaWYgKG1BdWRpb1JlY29yZCAhPSAwKSB7Ci0gICAgICAgIEFMT0dFKCJUcmFjayBhbHJlYWR5IGluIHVzZSIpOworICAgICAgICBBTE9HRSgiJXMoKTogVHJhY2sgYWxyZWFkeSBpbiB1c2UiLCBfX2Z1bmNfXyk7CiAgICAgICAgIHN0YXR1cyA9IElOVkFMSURfT1BFUkFUSU9OOwogICAgICAgICBnb3RvIGV4aXQ7CiAgICAgfQpAQCAtMjg0LDggKzI4Nyw4IEBACiAgICAgfSBlbHNlIHsKICAgICAgICAgLy8gc3RyZWFtIHR5cGUgc2hvdWxkbid0IGJlIGxvb2tlZCBhdCwgdGhpcyB0cmFjayBoYXMgYXVkaW8gYXR0cmlidXRlcwogICAgICAgICBtZW1jcHkoJm1BdHRyaWJ1dGVzLCBwQXR0cmlidXRlcywgc2l6ZW9mKGF1ZGlvX2F0dHJpYnV0ZXNfdCkpOwotICAgICAgICBBTE9HVigiQnVpbGRpbmcgQXVkaW9SZWNvcmQgd2l0aCBhdHRyaWJ1dGVzOiBzb3VyY2U9JWQgZmxhZ3M9MHgleCB0YWdzPVslc10iLAotICAgICAgICAgICAgICBtQXR0cmlidXRlcy5zb3VyY2UsIG1BdHRyaWJ1dGVzLmZsYWdzLCBtQXR0cmlidXRlcy50YWdzKTsKKyAgICAgICAgQUxPR1YoIiVzKCk6IEJ1aWxkaW5nIEF1ZGlvUmVjb3JkIHdpdGggYXR0cmlidXRlczogc291cmNlPSVkIGZsYWdzPTB4JXggdGFncz1bJXNdIiwKKyAgICAgICAgICAgICAgICBfX2Z1bmNfXywgbUF0dHJpYnV0ZXMuc291cmNlLCBtQXR0cmlidXRlcy5mbGFncywgbUF0dHJpYnV0ZXMudGFncyk7CiAgICAgfQogCiAgICAgbVNhbXBsZVJhdGUgPSBzYW1wbGVSYXRlOwpAQCAtMjk4LDE0ICszMDEsMTQgQEAKICAgICAvLyB2YWxpZGF0ZSBwYXJhbWV0ZXJzCiAgICAgLy8gQXVkaW9GbGluZ2VyIGNhcHR1cmUgb25seSBzdXBwb3J0cyBsaW5lYXIgUENNCiAgICAgaWYgKCFhdWRpb19pc192YWxpZF9mb3JtYXQoZm9ybWF0KSB8fCAhYXVkaW9faXNfbGluZWFyX3BjbShmb3JtYXQpKSB7Ci0gICAgICAgIEFMT0dFKCJGb3JtYXQgJSN4IGlzIG5vdCBsaW5lYXIgcGNtIiwgZm9ybWF0KTsKKyAgICAgICAgQUxPR0UoIiVzKCk6IEZvcm1hdCAlI3ggaXMgbm90IGxpbmVhciBwY20iLCBfX2Z1bmNfXywgZm9ybWF0KTsKICAgICAgICAgc3RhdHVzID0gQkFEX1ZBTFVFOwogICAgICAgICBnb3RvIGV4aXQ7CiAgICAgfQogICAgIG1Gb3JtYXQgPSBmb3JtYXQ7CiAKICAgICBpZiAoIWF1ZGlvX2lzX2lucHV0X2NoYW5uZWwoY2hhbm5lbE1hc2spKSB7Ci0gICAgICAgIEFMT0dFKCJJbnZhbGlkIGNoYW5uZWwgbWFzayAlI3giLCBjaGFubmVsTWFzayk7CisgICAgICAgIEFMT0dFKCIlcygpOiBJbnZhbGlkIGNoYW5uZWwgbWFzayAlI3giLCBfX2Z1bmNfXywgY2hhbm5lbE1hc2spOwogICAgICAgICBzdGF0dXMgPSBCQURfVkFMVUU7CiAgICAgICAgIGdvdG8gZXhpdDsKICAgICB9CkBAIC0zMjYsNyArMzI5LDcgQEAKICAgICAvLyBtTm90aWZpY2F0aW9uRnJhbWVzQWN0IGlzIGluaXRpYWxpemVkIGluIGNyZWF0ZVJlY29yZF9sCiAKICAgICBtU2Vzc2lvbklkID0gc2Vzc2lvbklkOwotICAgIEFMT0dWKCJzZXQoKTogbVNlc3Npb25JZCAlZCIsIG1TZXNzaW9uSWQpOworICAgIEFMT0dWKCIlcygpOiBtU2Vzc2lvbklkICVkIiwgX19mdW5jX18sIG1TZXNzaW9uSWQpOwogCiAgICAgY2FsbGluZ1BpZCA9IElQQ1RocmVhZFN0YXRlOjpzZWxmKCktPmdldENhbGxpbmdQaWQoKTsKICAgICBteVBpZCA9IGdldHBpZCgpOwpAQCAtMzUzLDYgKzM1Niw4IEBACiAgICAgLy8gY3JlYXRlIHRoZSBJQXVkaW9SZWNvcmQKICAgICBzdGF0dXMgPSBjcmVhdGVSZWNvcmRfbCgwIC8qZXBvY2gqLywgbU9wUGFja2FnZU5hbWUpOwogCisgICAgQUxPR1YoIiVzKCVkKTogc3RhdHVzICVkIiwgX19mdW5jX18sIG1JZCwgc3RhdHVzKTsKKwogICAgIGlmIChzdGF0dXMgIT0gTk9fRVJST1IpIHsKICAgICAgICAgaWYgKG1BdWRpb1JlY29yZFRocmVhZCAhPSAwKSB7CiAgICAgICAgICAgICBtQXVkaW9SZWNvcmRUaHJlYWQtPnJlcXVlc3RFeGl0KCk7ICAgLy8gc2VlIGNvbW1lbnQgaW4gQXVkaW9SZWNvcmQuaApAQCAtMzg4LDcgKzM5Myw3IEBACiAKIHN0YXR1c190IEF1ZGlvUmVjb3JkOjpzdGFydChBdWRpb1N5c3RlbTo6c3luY19ldmVudF90IGV2ZW50LCBhdWRpb19zZXNzaW9uX3QgdHJpZ2dlclNlc3Npb24pCiB7Ci0gICAgQUxPR1YoInN0YXJ0LCBzeW5jIGV2ZW50ICVkIHRyaWdnZXIgc2Vzc2lvbiAlZCIsIGV2ZW50LCB0cmlnZ2VyU2Vzc2lvbik7CisgICAgQUxPR1YoIiVzKCVkKTogc3luYyBldmVudCAlZCB0cmlnZ2VyIHNlc3Npb24gJWQiLCBfX2Z1bmNfXywgbUlkLCBldmVudCwgdHJpZ2dlclNlc3Npb24pOwogCiAgICAgQXV0b011dGV4IGxvY2sobUxvY2spOwogICAgIGlmIChtQWN0aXZlKSB7CkBAIC00MjksNyArNDM0LDcgQEAKIAogICAgIGlmIChzdGF0dXMgIT0gTk9fRVJST1IpIHsKICAgICAgICAgbUFjdGl2ZSA9IGZhbHNlOwotICAgICAgICBBTE9HRSgic3RhcnQoKSBzdGF0dXMgJWQiLCBzdGF0dXMpOworICAgICAgICBBTE9HRSgiJXMoJWQpOiBzdGF0dXMgJWQiLCBfX2Z1bmNfXywgbUlkLCBzdGF0dXMpOwogICAgIH0gZWxzZSB7CiAgICAgICAgIHNwPEF1ZGlvUmVjb3JkVGhyZWFkPiB0ID0gbUF1ZGlvUmVjb3JkVGhyZWFkOwogICAgICAgICBpZiAodCAhPSAwKSB7CkBAIC00NTMsNiArNDU4LDcgQEAKIHZvaWQgQXVkaW9SZWNvcmQ6OnN0b3AoKQogewogICAgIEF1dG9NdXRleCBsb2NrKG1Mb2NrKTsKKyAgICBBTE9HVigiJXMoJWQpOiBtQWN0aXZlOiVkXG4iLCBfX2Z1bmNfXywgbUlkLCBtQWN0aXZlKTsKICAgICBpZiAoIW1BY3RpdmUpIHsKICAgICAgICAgcmV0dXJuOwogICAgIH0KQEAgLTYzMSw4ICs2MzcsOCBAQAogICAgIFN0cmluZzggcmVzdWx0OwogCiAgICAgcmVzdWx0LmFwcGVuZCgiIEF1ZGlvUmVjb3JkOjpkdW1wXG4iKTsKLSAgICByZXN1bHQuYXBwZW5kRm9ybWF0KCIgIHN0YXR1cyglZCksIGFjdGl2ZSglZCksIHNlc3Npb24gSWQoJWQpXG4iLAotICAgICAgICAgICAgICAgICAgICAgICAgbVN0YXR1cywgbUFjdGl2ZSwgbVNlc3Npb25JZCk7CisgICAgcmVzdWx0LmFwcGVuZEZvcm1hdCgiICBpZCglZCkgc3RhdHVzKCVkKSwgYWN0aXZlKCVkKSwgc2Vzc2lvbiBJZCglZClcbiIsCisgICAgICAgICAgICAgICAgICAgICAgICBtSWQsIG1TdGF0dXMsIG1BY3RpdmUsIG1TZXNzaW9uSWQpOwogICAgIHJlc3VsdC5hcHBlbmRGb3JtYXQoIiAgZmxhZ3MoJSN4KSwgcmVxLiBmbGFncyglI3gpLCBhdWRpbyBzb3VyY2UoJWQpXG4iLAogICAgICAgICAgICAgICAgICAgICAgICAgbUZsYWdzLCBtT3JpZ0ZsYWdzLCBtQXR0cmlidXRlcy5zb3VyY2UpOwogICAgIHJlc3VsdC5hcHBlbmRGb3JtYXQoIiAgZm9ybWF0KCUjeCksIGNoYW5uZWwgbWFzayglI3gpLCBjaGFubmVsIGNvdW50KCV1KSwgc2FtcGxlIHJhdGUoJXUpXG4iLApAQCAtNjc0LDcgKzY4MCw3IEBACiAgICAgc3RhdHVzX3Qgc3RhdHVzOwogCiAgICAgaWYgKGF1ZGlvRmxpbmdlciA9PSAwKSB7Ci0gICAgICAgIEFMT0dFKCJDb3VsZCBub3QgZ2V0IGF1ZGlvZmxpbmdlciIpOworICAgICAgICBBTE9HRSgiJXMoJWQpOiBDb3VsZCBub3QgZ2V0IGF1ZGlvZmxpbmdlciIsIF9fZnVuY19fLCBtSWQpOwogICAgICAgICBzdGF0dXMgPSBOT19JTklUOwogICAgICAgICBnb3RvIGV4aXQ7CiAgICAgfQpAQCAtNzAxLDcgKzcwNyw4IEBACiAgICAgICAgICAgICAvLyB1c2UgY2FzZSAzOiBvYnRhaW4vcmVsZWFzZSBtb2RlCiAgICAgICAgICAgICAobVRyYW5zZmVyID09IFRSQU5TRkVSX09CVEFJTik7CiAgICAgICAgIGlmICghdXNlQ2FzZUFsbG93ZWQpIHsKLSAgICAgICAgICAgIEFMT0dXKCJBVURJT19JTlBVVF9GTEFHX0ZBU1QgZGVuaWVkLCBpbmNvbXBhdGlibGUgdHJhbnNmZXIgPSAlcyIsCisgICAgICAgICAgICBBTE9HVygiJXMoJWQpOiBBVURJT19JTlBVVF9GTEFHX0ZBU1QgZGVuaWVkLCBpbmNvbXBhdGlibGUgdHJhbnNmZXIgPSAlcyIsCisgICAgICAgICAgICAgICAgICBfX2Z1bmNfXywgbUlkLAogICAgICAgICAgICAgICAgICAgY29udmVydFRyYW5zZmVyVG9UZXh0KG1UcmFuc2ZlcikpOwogICAgICAgICAgICAgbUZsYWdzID0gKGF1ZGlvX2lucHV0X2ZsYWdzX3QpIChtRmxhZ3MgJiB+KEFVRElPX0lOUFVUX0ZMQUdfRkFTVCB8CiAgICAgICAgICAgICAgICAgICAgIEFVRElPX0lOUFVUX0ZMQUdfUkFXKSk7CkBAIC03MzYsNyArNzQzLDggQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnN0YXR1cyk7CiAKICAgICBpZiAoc3RhdHVzICE9IE5PX0VSUk9SKSB7Ci0gICAgICAgIEFMT0dFKCJBdWRpb0ZsaW5nZXIgY291bGQgbm90IGNyZWF0ZSByZWNvcmQgdHJhY2ssIHN0YXR1czogJWQiLCBzdGF0dXMpOworICAgICAgICBBTE9HRSgiJXMoJWQpOiBBdWRpb0ZsaW5nZXIgY291bGQgbm90IGNyZWF0ZSByZWNvcmQgdHJhY2ssIHN0YXR1czogJWQiLAorICAgICAgICAgICAgICBfX2Z1bmNfXywgbUlkLCBzdGF0dXMpOwogICAgICAgICBnb3RvIGV4aXQ7CiAgICAgfQogICAgIEFMT0dfQVNTRVJUKHJlY29yZCAhPSAwKTsKQEAgLTc0Niw3ICs3NTQsOCBAQAogCiAgICAgbUF3YWl0Qm9vc3QgPSBmYWxzZTsKICAgICBpZiAob3V0cHV0LmZsYWdzICYgQVVESU9fSU5QVVRfRkxBR19GQVNUKSB7Ci0gICAgICAgIEFMT0dJKCJBVURJT19JTlBVVF9GTEFHX0ZBU1Qgc3VjY2Vzc2Z1bDsgZnJhbWVDb3VudCAlenUgLT4gJXp1IiwKKyAgICAgICAgQUxPR0koIiVzKCVkKTogQVVESU9fSU5QVVRfRkxBR19GQVNUIHN1Y2Nlc3NmdWw7IGZyYW1lQ291bnQgJXp1IC0+ICV6dSIsCisgICAgICAgICAgICAgIF9fZnVuY19fLCBtSWQsCiAgICAgICAgICAgICAgIG1SZXFGcmFtZUNvdW50LCBvdXRwdXQuZnJhbWVDb3VudCk7CiAgICAgICAgIG1Bd2FpdEJvb3N0ID0gdHJ1ZTsKICAgICB9CkBAIC03NTYsMTMgKzc2NSwxMyBAQAogICAgIG1TYW1wbGVSYXRlID0gb3V0cHV0LnNhbXBsZVJhdGU7CiAKICAgICBpZiAob3V0cHV0LmNibGsgPT0gMCkgewotICAgICAgICBBTE9HRSgiQ291bGQgbm90IGdldCBjb250cm9sIGJsb2NrIik7CisgICAgICAgIEFMT0dFKCIlcyglZCk6IENvdWxkIG5vdCBnZXQgY29udHJvbCBibG9jayIsIF9fZnVuY19fLCBtSWQpOwogICAgICAgICBzdGF0dXMgPSBOT19JTklUOwogICAgICAgICBnb3RvIGV4aXQ7CiAgICAgfQogICAgIGlNZW1Qb2ludGVyID0gb3V0cHV0LmNibGsgLT5wb2ludGVyKCk7CiAgICAgaWYgKGlNZW1Qb2ludGVyID09IE5VTEwpIHsKLSAgICAgICAgQUxPR0UoIkNvdWxkIG5vdCBnZXQgY29udHJvbCBibG9jayBwb2ludGVyIik7CisgICAgICAgIEFMT0dFKCIlcyglZCk6IENvdWxkIG5vdCBnZXQgY29udHJvbCBibG9jayBwb2ludGVyIiwgX19mdW5jX18sIG1JZCk7CiAgICAgICAgIHN0YXR1cyA9IE5PX0lOSVQ7CiAgICAgICAgIGdvdG8gZXhpdDsKICAgICB9CkBAIC03NzcsNyArNzg2LDcgQEAKICAgICB9IGVsc2UgewogICAgICAgICBidWZmZXJzID0gb3V0cHV0LmJ1ZmZlcnMtPnBvaW50ZXIoKTsKICAgICAgICAgaWYgKGJ1ZmZlcnMgPT0gTlVMTCkgewotICAgICAgICAgICAgQUxPR0UoIkNvdWxkIG5vdCBnZXQgYnVmZmVyIHBvaW50ZXIiKTsKKyAgICAgICAgICAgIEFMT0dFKCIlcyglZCk6IENvdWxkIG5vdCBnZXQgYnVmZmVyIHBvaW50ZXIiLCBfX2Z1bmNfXywgbUlkKTsKICAgICAgICAgICAgIHN0YXR1cyA9IE5PX0lOSVQ7CiAgICAgICAgICAgICBnb3RvIGV4aXQ7CiAgICAgICAgIH0KQEAgLTc5MSwxOSArODAwLDIyIEBACiAgICAgbUF1ZGlvUmVjb3JkID0gcmVjb3JkOwogICAgIG1DYmxrTWVtb3J5ID0gb3V0cHV0LmNibGs7CiAgICAgbUJ1ZmZlck1lbW9yeSA9IG91dHB1dC5idWZmZXJzOworICAgIG1JZCA9IG91dHB1dC50cmFja0lkOwogICAgIElQQ1RocmVhZFN0YXRlOjpzZWxmKCktPmZsdXNoQ29tbWFuZHMoKTsKIAogICAgIG1DYmxrID0gY2JsazsKICAgICAvLyBub3RlIHRoYXQgb3V0cHV0LmZyYW1lQ291bnQgaXMgdGhlIChwb3NzaWJseSByZXZpc2VkKSB2YWx1ZSBvZiBtUmVxRnJhbWVDb3VudAogICAgIGlmIChvdXRwdXQuZnJhbWVDb3VudCA8IG1SZXFGcmFtZUNvdW50IHx8IChtUmVxRnJhbWVDb3VudCA9PSAwICYmIG91dHB1dC5mcmFtZUNvdW50ID09IDApKSB7Ci0gICAgICAgIEFMT0dXKCJSZXF1ZXN0ZWQgZnJhbWVDb3VudCAlenUgYnV0IHJlY2VpdmVkIGZyYW1lQ291bnQgJXp1IiwKKyAgICAgICAgQUxPR1coIiVzKCVkKTogUmVxdWVzdGVkIGZyYW1lQ291bnQgJXp1IGJ1dCByZWNlaXZlZCBmcmFtZUNvdW50ICV6dSIsCisgICAgICAgICAgICAgIF9fZnVuY19fLCBtSWQsCiAgICAgICAgICAgICAgIG1SZXFGcmFtZUNvdW50LCAgb3V0cHV0LmZyYW1lQ291bnQpOwogICAgIH0KIAogICAgIC8vIE1ha2Ugc3VyZSB0aGF0IGFwcGxpY2F0aW9uIGlzIG5vdGlmaWVkIHdpdGggc3VmZmljaWVudCBtYXJnaW4gYmVmb3JlIG92ZXJydW4uCiAgICAgLy8gVGhlIGNvbXB1dGF0aW9uIGlzIGRvbmUgb24gc2VydmVyIHNpZGUuCiAgICAgaWYgKG1Ob3RpZmljYXRpb25GcmFtZXNSZXEgPiAwICYmIG91dHB1dC5ub3RpZmljYXRpb25GcmFtZUNvdW50ICE9IG1Ob3RpZmljYXRpb25GcmFtZXNSZXEpIHsKLSAgICAgICAgQUxPR1coIlNlcnZlciBhZGp1c3RlZCBub3RpZmljYXRpb25GcmFtZXMgZnJvbSAldSB0byAlenUgZm9yIGZyYW1lQ291bnQgJXp1IiwKKyAgICAgICAgQUxPR1coIiVzKCVkKTogU2VydmVyIGFkanVzdGVkIG5vdGlmaWNhdGlvbkZyYW1lcyBmcm9tICV1IHRvICV6dSBmb3IgZnJhbWVDb3VudCAlenUiLAorICAgICAgICAgICAgICAgIF9fZnVuY19fLCBtSWQsCiAgICAgICAgICAgICAgICAgbU5vdGlmaWNhdGlvbkZyYW1lc1JlcSwgb3V0cHV0Lm5vdGlmaWNhdGlvbkZyYW1lQ291bnQsIG91dHB1dC5mcmFtZUNvdW50KTsKICAgICB9CiAgICAgbU5vdGlmaWNhdGlvbkZyYW1lc0FjdCA9ICh1aW50MzJfdClvdXRwdXQubm90aWZpY2F0aW9uRnJhbWVDb3VudDsKQEAgLTg3MSw3ICs4ODMsNyBAQAogICAgICAgICB0aW1lb3V0LnR2X25zZWMgPSAobG9uZykgKG1zICUgMTAwMCkgKiAxMDAwMDAwOwogICAgICAgICByZXF1ZXN0ZWQgPSAmdGltZW91dDsKICAgICB9IGVsc2UgewotICAgICAgICBBTE9HRSgiJXMgaW52YWxpZCB3YWl0Q291bnQgJWQiLCBfX2Z1bmNfXywgd2FpdENvdW50KTsKKyAgICAgICAgQUxPR0UoIiVzKCVkKTogaW52YWxpZCB3YWl0Q291bnQgJWQiLCBfX2Z1bmNfXywgbUlkLCB3YWl0Q291bnQpOwogICAgICAgICByZXF1ZXN0ZWQgPSBOVUxMOwogICAgIH0KICAgICByZXR1cm4gb2J0YWluQnVmZmVyKGF1ZGlvQnVmZmVyLCByZXF1ZXN0ZWQsIE5VTEwgLyplbGFwc2VkKi8sIG5vbkNvbnRpZyk7CkBAIC05ODAsNyArOTkyLDggQEAKICAgICBpZiAoc3NpemVfdCh1c2VyU2l6ZSkgPCAwIHx8IChidWZmZXIgPT0gTlVMTCAmJiB1c2VyU2l6ZSAhPSAwKSkgewogICAgICAgICAvLyBzYW5pdHktY2hlY2suIHVzZXIgaXMgbW9zdC1saWtlbHkgcGFzc2luZyBhbiBlcnJvciBjb2RlLCBhbmQgaXQgd291bGQKICAgICAgICAgLy8gbWFrZSB0aGUgcmV0dXJuIHZhbHVlIGFtYmlndW91cyAoYWN0dWFsU2l6ZSB2cyBlcnJvcikuCi0gICAgICAgIEFMT0dFKCJBdWRpb1JlY29yZDo6cmVhZChidWZmZXI9JXAsIHNpemU9JXp1ICglenUpIiwgYnVmZmVyLCB1c2VyU2l6ZSwgdXNlclNpemUpOworICAgICAgICBBTE9HRSgiJXMoJWQpIChidWZmZXI9JXAsIHNpemU9JXp1ICglenUpIiwKKyAgICAgICAgICAgICAgICBfX2Z1bmNfXywgbUlkLCBidWZmZXIsIHVzZXJTaXplLCB1c2VyU2l6ZSk7CiAgICAgICAgIHJldHVybiBCQURfVkFMVUU7CiAgICAgfQogCkBAIC0xMDM3LDcgKzEwNTAsNyBAQAogICAgICAgICAgICAgcG9sbFVzIDw8PSAxOwogICAgICAgICB9IHdoaWxlICh0cnlDb3VudGVyLS0gPiAwKTsKICAgICAgICAgaWYgKHRyeUNvdW50ZXIgPCAwKSB7Ci0gICAgICAgICAgICBBTE9HRSgiZGlkIG5vdCByZWNlaXZlIGV4cGVjdGVkIHByaW9yaXR5IGJvb3N0IG9uIHRpbWUiKTsKKyAgICAgICAgICAgIEFMT0dFKCIlcyglZCk6IGRpZCBub3QgcmVjZWl2ZSBleHBlY3RlZCBwcmlvcml0eSBib29zdCBvbiB0aW1lIiwgX19mdW5jX18sIG1JZCk7CiAgICAgICAgIH0KICAgICAgICAgLy8gUnVuIGFnYWluIGltbWVkaWF0ZWx5CiAgICAgICAgIHJldHVybiAwOwpAQCAtMTE2MCw3ICsxMTczLDggQEAKICAgICBpZiAobnMgIT0gTlNfV0hFTkVWRVIpIHsKICAgICAgICAgdGltZW91dC50dl9zZWMgPSBucyAvIDEwMDAwMDAwMDBMTDsKICAgICAgICAgdGltZW91dC50dl9uc2VjID0gbnMgJSAxMDAwMDAwMDAwTEw7Ci0gICAgICAgIEFMT0dWKCJ0aW1lb3V0ICVsZC4lMDNkIiwgdGltZW91dC50dl9zZWMsIChpbnQpIHRpbWVvdXQudHZfbnNlYyAvIDEwMDAwMDApOworICAgICAgICBBTE9HVigiJXMoJWQpOiB0aW1lb3V0ICVsZC4lMDNkIiwKKyAgICAgICAgICAgICAgICBfX2Z1bmNfXywgbUlkLCB0aW1lb3V0LnR2X3NlYywgKGludCkgdGltZW91dC50dl9uc2VjIC8gMTAwMDAwMCk7CiAgICAgICAgIHJlcXVlc3RlZCA9ICZ0aW1lb3V0OwogICAgIH0KIApAQCAtMTE3MiwxNiArMTE4NiwxOCBAQAogICAgICAgICBzaXplX3Qgbm9uQ29udGlnOwogICAgICAgICBzdGF0dXNfdCBlcnIgPSBvYnRhaW5CdWZmZXIoJmF1ZGlvQnVmZmVyLCByZXF1ZXN0ZWQsIE5VTEwsICZub25Db250aWcpOwogICAgICAgICBMT0dfQUxXQVlTX0ZBVEFMX0lGKChlcnIgIT0gTk9fRVJST1IpICE9IChhdWRpb0J1ZmZlci5mcmFtZUNvdW50ID09IDApLAotICAgICAgICAgICAgICAgICJvYnRhaW5CdWZmZXIoKSBlcnI9JWQgZnJhbWVDb3VudD0lenUiLCBlcnIsIGF1ZGlvQnVmZmVyLmZyYW1lQ291bnQpOworICAgICAgICAgICAgICAgICIlcyglZCk6IG9idGFpbkJ1ZmZlcigpIGVycj0lZCBmcmFtZUNvdW50PSV6dSIsCisgICAgICAgICAgICAgICAgX19mdW5jX18sIG1JZCwgZXJyLCBhdWRpb0J1ZmZlci5mcmFtZUNvdW50KTsKICAgICAgICAgcmVxdWVzdGVkID0gJkNsaWVudFByb3h5OjprTm9uQmxvY2tpbmc7CiAgICAgICAgIHNpemVfdCBhdmFpbCA9IGF1ZGlvQnVmZmVyLmZyYW1lQ291bnQgKyBub25Db250aWc7Ci0gICAgICAgIEFMT0dWKCJvYnRhaW5CdWZmZXIoJXUpIHJldHVybmVkICV6dSA9ICV6dSArICV6dSBlcnIgJWQiLAotICAgICAgICAgICAgICAgIG1SZW1haW5pbmdGcmFtZXMsIGF2YWlsLCBhdWRpb0J1ZmZlci5mcmFtZUNvdW50LCBub25Db250aWcsIGVycik7CisgICAgICAgIEFMT0dWKCIlcyglZCk6IG9idGFpbkJ1ZmZlcigldSkgcmV0dXJuZWQgJXp1ID0gJXp1ICsgJXp1IGVyciAlZCIsCisgICAgICAgICAgICAgICAgX19mdW5jX18sIG1JZCwgbVJlbWFpbmluZ0ZyYW1lcywgYXZhaWwsIGF1ZGlvQnVmZmVyLmZyYW1lQ291bnQsIG5vbkNvbnRpZywgZXJyKTsKICAgICAgICAgaWYgKGVyciAhPSBOT19FUlJPUikgewogICAgICAgICAgICAgaWYgKGVyciA9PSBUSU1FRF9PVVQgfHwgZXJyID09IFdPVUxEX0JMT0NLIHx8IGVyciA9PSAtRUlOVFIpIHsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIEFMT0dFKCJFcnJvciAlZCBvYnRhaW5pbmcgYW4gYXVkaW8gYnVmZmVyLCBnaXZpbmcgdXAuIiwgZXJyKTsKKyAgICAgICAgICAgIEFMT0dFKCIlcyglZCk6IEVycm9yICVkIG9idGFpbmluZyBhbiBhdWRpbyBidWZmZXIsIGdpdmluZyB1cC4iLAorICAgICAgICAgICAgICAgICAgICBfX2Z1bmNfXywgbUlkLCBlcnIpOwogICAgICAgICAgICAgcmV0dXJuIE5TX05FVkVSOwogICAgICAgICB9CiAKQEAgLTEyMDMsOCArMTIxOSw4IEBACiAKICAgICAgICAgLy8gU2FuaXR5IGNoZWNrIG9uIHJldHVybmVkIHNpemUKICAgICAgICAgaWYgKHNzaXplX3QocmVhZFNpemUpIDwgMCB8fCByZWFkU2l6ZSA+IHJlcVNpemUpIHsKLSAgICAgICAgICAgIEFMT0dFKCJFVkVOVF9NT1JFX0RBVEEgcmVxdWVzdGVkICV6dSBieXRlcyBidXQgY2FsbGJhY2sgcmV0dXJuZWQgJXpkIGJ5dGVzIiwKLSAgICAgICAgICAgICAgICAgICAgcmVxU2l6ZSwgc3NpemVfdChyZWFkU2l6ZSkpOworICAgICAgICAgICAgQUxPR0UoIiVzKCVkKTogIEVWRU5UX01PUkVfREFUQSByZXF1ZXN0ZWQgJXp1IGJ5dGVzIGJ1dCBjYWxsYmFjayByZXR1cm5lZCAlemQgYnl0ZXMiLAorICAgICAgICAgICAgICAgICAgICBfX2Z1bmNfXywgbUlkLCByZXFTaXplLCBzc2l6ZV90KHJlYWRTaXplKSk7CiAgICAgICAgICAgICByZXR1cm4gTlNfTkVWRVI7CiAgICAgICAgIH0KIApAQCAtMTI2NCw3ICsxMjgwLDcgQEAKIAogc3RhdHVzX3QgQXVkaW9SZWNvcmQ6OnJlc3RvcmVSZWNvcmRfbChjb25zdCBjaGFyICpmcm9tKQogewotICAgIEFMT0dXKCJkZWFkIElBdWRpb1JlY29yZCwgY3JlYXRpbmcgYSBuZXcgb25lIGZyb20gJXMoKSIsIGZyb20pOworICAgIEFMT0dXKCIlcyglZCk6IGRlYWQgSUF1ZGlvUmVjb3JkLCBjcmVhdGluZyBhIG5ldyBvbmUgZnJvbSAlcygpIiwgX19mdW5jX18sIG1JZCwgZnJvbSk7CiAgICAgKyttU2VxdWVuY2U7CiAKICAgICBjb25zdCBpbnQgSU5JVElBTF9SRVRSSUVTID0gMzsKQEAgLTEyODQsMTAgKzEzMDAsNyBAQAogICAgIG1OZXdQb3NpdGlvbiA9IHBvc2l0aW9uICsgbVVwZGF0ZVBlcmlvZDsKICAgICBzdGF0dXNfdCByZXN1bHQgPSBjcmVhdGVSZWNvcmRfbChwb3NpdGlvbiwgbU9wUGFja2FnZU5hbWUpOwogCi0gICAgaWYgKHJlc3VsdCAhPSBOT19FUlJPUikgewotICAgICAgICBBTE9HVygiJXMoKTogY3JlYXRlUmVjb3JkX2wgZmFpbGVkLCBkbyBub3QgcmV0cnkiLCBfX2Z1bmNfXyk7Ci0gICAgICAgIHJldHJpZXMgPSAwOwotICAgIH0gZWxzZSB7CisgICAgaWYgKHJlc3VsdCA9PSBOT19FUlJPUikgewogICAgICAgICBpZiAobUFjdGl2ZSkgewogICAgICAgICAgICAgLy8gY2FsbGJhY2sgdGhyZWFkIG9yIHN5bmMgZXZlbnQgaGFzbid0IGNoYW5nZWQKICAgICAgICAgICAgIC8vIEZJWE1FIHRoaXMgZmFpbHMgaWYgd2UgaGF2ZSBhIG5ldyBBdWRpb0ZsaW5nZXIgaW5zdGFuY2UKQEAgLTEyOTgsMTUgKzEzMTEsMTcgQEAKICAgICB9CiAKICAgICBpZiAocmVzdWx0ICE9IE5PX0VSUk9SKSB7Ci0gICAgICAgIEFMT0dXKCIlcygpIGZhaWxlZCBzdGF0dXMgJWQsIHJldHJpZXMgJWQiLCBfX2Z1bmNfXywgcmVzdWx0LCByZXRyaWVzKTsKKyAgICAgICAgQUxPR1coIiVzKCVkKTogZmFpbGVkIHN0YXR1cyAlZCwgcmV0cmllcyAlZCIsIF9fZnVuY19fLCBtSWQsIHJlc3VsdCwgcmV0cmllcyk7CiAgICAgICAgIGlmICgtLXJldHJpZXMgPiAwKSB7CisgICAgICAgICAgICAvLyBsZWF2ZSB0aW1lIGZvciBhbiBldmVudHVhbCByYWNlIGNvbmRpdGlvbiB0byBjbGVhciBiZWZvcmUgcmV0cnlpbmcKKyAgICAgICAgICAgIHVzbGVlcCg1MDAwMDApOwogICAgICAgICAgICAgZ290byByZXRyeTsKICAgICAgICAgfQotICAgIH0KLQotICAgIGlmIChyZXN1bHQgIT0gTk9fRVJST1IpIHsKLSAgICAgICAgQUxPR1coInJlc3RvcmVSZWNvcmRfbCgpIGZhaWxlZCBzdGF0dXMgJWQiLCByZXN1bHQpOwotICAgICAgICBtQWN0aXZlID0gZmFsc2U7CisgICAgICAgIC8vIGlmIG5vIHJldHJpZXMgbGVmdCwgc2V0IGludmFsaWQgYml0IHRvIGZvcmNlIHJlc3RvcmluZyBhdCBuZXh0IG9jY2FzaW9uCisgICAgICAgIC8vIGFuZCBhdm9pZCBpbmNvbnNpc3RlbnQgYWN0aXZlIHN0YXRlIG9uIGNsaWVudCBhbmQgc2VydmVyIHNpZGVzCisgICAgICAgIGlmIChtQ2JsayAhPSBudWxscHRyKSB7CisgICAgICAgICAgICBhbmRyb2lkX2F0b21pY19vcihDQkxLX0lOVkFMSUQsICZtQ2Jsay0+bUZsYWdzKTsKKyAgICAgICAgfQogICAgIH0KIAogICAgIHJldHVybiByZXN1bHQ7CkBAIC0xMzE1LDE4ICsxMzMwLDE4IEBACiBzdGF0dXNfdCBBdWRpb1JlY29yZDo6YWRkQXVkaW9EZXZpY2VDYWxsYmFjayhjb25zdCBzcDxBdWRpb1N5c3RlbTo6QXVkaW9EZXZpY2VDYWxsYmFjaz4mIGNhbGxiYWNrKQogewogICAgIGlmIChjYWxsYmFjayA9PSAwKSB7Ci0gICAgICAgIEFMT0dXKCIlcyBhZGRpbmcgTlVMTCBjYWxsYmFjayEiLCBfX0ZVTkNUSU9OX18pOworICAgICAgICBBTE9HVygiJXMoJWQpOiBhZGRpbmcgTlVMTCBjYWxsYmFjayEiLCBfX2Z1bmNfXywgbUlkKTsKICAgICAgICAgcmV0dXJuIEJBRF9WQUxVRTsKICAgICB9CiAgICAgQXV0b011dGV4IGxvY2sobUxvY2spOwogICAgIGlmIChtRGV2aWNlQ2FsbGJhY2sudW5zYWZlX2dldCgpID09IGNhbGxiYWNrLmdldCgpKSB7Ci0gICAgICAgIEFMT0dXKCIlcyBhZGRpbmcgc2FtZSBjYWxsYmFjayEiLCBfX0ZVTkNUSU9OX18pOworICAgICAgICBBTE9HVygiJXMoJWQpOiBhZGRpbmcgc2FtZSBjYWxsYmFjayEiLCBfX2Z1bmNfXywgbUlkKTsKICAgICAgICAgcmV0dXJuIElOVkFMSURfT1BFUkFUSU9OOwogICAgIH0KICAgICBzdGF0dXNfdCBzdGF0dXMgPSBOT19FUlJPUjsKICAgICBpZiAobUlucHV0ICE9IEFVRElPX0lPX0hBTkRMRV9OT05FKSB7CiAgICAgICAgIGlmIChtRGV2aWNlQ2FsbGJhY2sgIT0gMCkgewotICAgICAgICAgICAgQUxPR1coIiVzIGNhbGxiYWNrIGFscmVhZHkgcHJlc2VudCEiLCBfX0ZVTkNUSU9OX18pOworICAgICAgICAgICAgQUxPR1coIiVzKCVkKTogY2FsbGJhY2sgYWxyZWFkeSBwcmVzZW50ISIsIF9fZnVuY19fLCBtSWQpOwogICAgICAgICAgICAgQXVkaW9TeXN0ZW06OnJlbW92ZUF1ZGlvRGV2aWNlQ2FsbGJhY2sodGhpcywgbUlucHV0KTsKICAgICAgICAgfQogICAgICAgICBzdGF0dXMgPSBBdWRpb1N5c3RlbTo6YWRkQXVkaW9EZXZpY2VDYWxsYmFjayh0aGlzLCBtSW5wdXQpOwpAQCAtMTMzOSwxMiArMTM1NCwxMiBAQAogICAgICAgICBjb25zdCBzcDxBdWRpb1N5c3RlbTo6QXVkaW9EZXZpY2VDYWxsYmFjaz4mIGNhbGxiYWNrKQogewogICAgIGlmIChjYWxsYmFjayA9PSAwKSB7Ci0gICAgICAgIEFMT0dXKCIlcyByZW1vdmluZyBOVUxMIGNhbGxiYWNrISIsIF9fRlVOQ1RJT05fXyk7CisgICAgICAgIEFMT0dXKCIlcyglZCk6IHJlbW92aW5nIE5VTEwgY2FsbGJhY2shIiwgX19mdW5jX18sIG1JZCk7CiAgICAgICAgIHJldHVybiBCQURfVkFMVUU7CiAgICAgfQogICAgIEF1dG9NdXRleCBsb2NrKG1Mb2NrKTsKICAgICBpZiAobURldmljZUNhbGxiYWNrLnVuc2FmZV9nZXQoKSAhPSBjYWxsYmFjay5nZXQoKSkgewotICAgICAgICBBTE9HVygiJXMgcmVtb3ZpbmcgZGlmZmVyZW50IGNhbGxiYWNrISIsIF9fRlVOQ1RJT05fXyk7CisgICAgICAgIEFMT0dXKCIlcyglZCk6IHJlbW92aW5nIGRpZmZlcmVudCBjYWxsYmFjayEiLCBfX2Z1bmNfXywgbUlkKTsKICAgICAgICAgcmV0dXJuIElOVkFMSURfT1BFUkFUSU9OOwogICAgIH0KICAgICBtRGV2aWNlQ2FsbGJhY2suY2xlYXIoKTsKQEAgLTE0NDksNyArMTQ2NCw3IEBACiAgICAgICAgIG5zID0gSU5UNjRfTUFYOwogICAgICAgICBGQUxMVEhST1VHSF9JTlRFTkRFRDsKICAgICBkZWZhdWx0OgotICAgICAgICBMT0dfQUxXQVlTX0ZBVEFMX0lGKG5zIDwgMCwgInByb2Nlc3NBdWRpb0J1ZmZlcigpIHJldHVybmVkICUiIFBSSWQ2NCwgbnMpOworICAgICAgICBMT0dfQUxXQVlTX0ZBVEFMX0lGKG5zIDwgMCwgIiVzKCkgcmV0dXJuZWQgJWxsZCIsIF9fZnVuY19fLCAobG9uZyBsb25nKW5zKTsKICAgICAgICAgcGF1c2VJbnRlcm5hbChucyk7CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KZGlmZiAtLWdpdCBhL21lZGlhL2xpYmF1ZGlvY2xpZW50L0F1ZGlvU3lzdGVtLmNwcCBiL21lZGlhL2xpYmF1ZGlvY2xpZW50L0F1ZGlvU3lzdGVtLmNwcAppbmRleCBjMDcyOTAxLi5lYzM2ZWQ3IDEwMDY0NAotLS0gYS9tZWRpYS9saWJhdWRpb2NsaWVudC9BdWRpb1N5c3RlbS5jcHAKKysrIGIvbWVkaWEvbGliYXVkaW9jbGllbnQvQXVkaW9TeXN0ZW0uY3BwCkBAIC04NzgsMzEgKzg3OCwyNSBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmxhZ3MsIHNlbGVjdGVkRGV2aWNlSWQsIHBvcnRJZCk7CiB9CiAKLXN0YXR1c190IEF1ZGlvU3lzdGVtOjpzdGFydE91dHB1dChhdWRpb19pb19oYW5kbGVfdCBvdXRwdXQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXVkaW9fc3RyZWFtX3R5cGVfdCBzdHJlYW0sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXVkaW9fc2Vzc2lvbl90IHNlc3Npb24pCitzdGF0dXNfdCBBdWRpb1N5c3RlbTo6c3RhcnRPdXRwdXQoYXVkaW9fcG9ydF9oYW5kbGVfdCBwb3J0SWQpCiB7CiAgICAgY29uc3Qgc3A8SUF1ZGlvUG9saWN5U2VydmljZT4mIGFwcyA9IEF1ZGlvU3lzdGVtOjpnZXRfYXVkaW9fcG9saWN5X3NlcnZpY2UoKTsKICAgICBpZiAoYXBzID09IDApIHJldHVybiBQRVJNSVNTSU9OX0RFTklFRDsKLSAgICByZXR1cm4gYXBzLT5zdGFydE91dHB1dChvdXRwdXQsIHN0cmVhbSwgc2Vzc2lvbik7CisgICAgcmV0dXJuIGFwcy0+c3RhcnRPdXRwdXQocG9ydElkKTsKIH0KIAotc3RhdHVzX3QgQXVkaW9TeXN0ZW06OnN0b3BPdXRwdXQoYXVkaW9faW9faGFuZGxlX3Qgb3V0cHV0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXVkaW9fc3RyZWFtX3R5cGVfdCBzdHJlYW0sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdWRpb19zZXNzaW9uX3Qgc2Vzc2lvbikKK3N0YXR1c190IEF1ZGlvU3lzdGVtOjpzdG9wT3V0cHV0KGF1ZGlvX3BvcnRfaGFuZGxlX3QgcG9ydElkKQogewogICAgIGNvbnN0IHNwPElBdWRpb1BvbGljeVNlcnZpY2U+JiBhcHMgPSBBdWRpb1N5c3RlbTo6Z2V0X2F1ZGlvX3BvbGljeV9zZXJ2aWNlKCk7CiAgICAgaWYgKGFwcyA9PSAwKSByZXR1cm4gUEVSTUlTU0lPTl9ERU5JRUQ7Ci0gICAgcmV0dXJuIGFwcy0+c3RvcE91dHB1dChvdXRwdXQsIHN0cmVhbSwgc2Vzc2lvbik7CisgICAgcmV0dXJuIGFwcy0+c3RvcE91dHB1dChwb3J0SWQpOwogfQogCi12b2lkIEF1ZGlvU3lzdGVtOjpyZWxlYXNlT3V0cHV0KGF1ZGlvX2lvX2hhbmRsZV90IG91dHB1dCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXVkaW9fc3RyZWFtX3R5cGVfdCBzdHJlYW0sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF1ZGlvX3Nlc3Npb25fdCBzZXNzaW9uKQordm9pZCBBdWRpb1N5c3RlbTo6cmVsZWFzZU91dHB1dChhdWRpb19wb3J0X2hhbmRsZV90IHBvcnRJZCkKIHsKICAgICBjb25zdCBzcDxJQXVkaW9Qb2xpY3lTZXJ2aWNlPiYgYXBzID0gQXVkaW9TeXN0ZW06OmdldF9hdWRpb19wb2xpY3lfc2VydmljZSgpOwogICAgIGlmIChhcHMgPT0gMCkgcmV0dXJuOwotICAgIGFwcy0+cmVsZWFzZU91dHB1dChvdXRwdXQsIHN0cmVhbSwgc2Vzc2lvbik7CisgICAgYXBzLT5yZWxlYXNlT3V0cHV0KHBvcnRJZCk7CiB9CiAKIHN0YXR1c190IEF1ZGlvU3lzdGVtOjpnZXRJbnB1dEZvckF0dHIoY29uc3QgYXVkaW9fYXR0cmlidXRlc190ICphdHRyLApAQCAtMTI0NCwxOCArMTIzOCwxOCBAQAogCiBzdGF0dXNfdCBBdWRpb1N5c3RlbTo6c3RhcnRBdWRpb1NvdXJjZShjb25zdCBzdHJ1Y3QgYXVkaW9fcG9ydF9jb25maWcgKnNvdXJjZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGF1ZGlvX2F0dHJpYnV0ZXNfdCAqYXR0cmlidXRlcywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF1ZGlvX3BhdGNoX2hhbmRsZV90ICpoYW5kbGUpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdWRpb19wb3J0X2hhbmRsZV90ICpwb3J0SWQpCiB7CiAgICAgY29uc3Qgc3A8SUF1ZGlvUG9saWN5U2VydmljZT4mIGFwcyA9IEF1ZGlvU3lzdGVtOjpnZXRfYXVkaW9fcG9saWN5X3NlcnZpY2UoKTsKICAgICBpZiAoYXBzID09IDApIHJldHVybiBQRVJNSVNTSU9OX0RFTklFRDsKLSAgICByZXR1cm4gYXBzLT5zdGFydEF1ZGlvU291cmNlKHNvdXJjZSwgYXR0cmlidXRlcywgaGFuZGxlKTsKKyAgICByZXR1cm4gYXBzLT5zdGFydEF1ZGlvU291cmNlKHNvdXJjZSwgYXR0cmlidXRlcywgcG9ydElkKTsKIH0KIAotc3RhdHVzX3QgQXVkaW9TeXN0ZW06OnN0b3BBdWRpb1NvdXJjZShhdWRpb19wYXRjaF9oYW5kbGVfdCBoYW5kbGUpCitzdGF0dXNfdCBBdWRpb1N5c3RlbTo6c3RvcEF1ZGlvU291cmNlKGF1ZGlvX3BvcnRfaGFuZGxlX3QgcG9ydElkKQogewogICAgIGNvbnN0IHNwPElBdWRpb1BvbGljeVNlcnZpY2U+JiBhcHMgPSBBdWRpb1N5c3RlbTo6Z2V0X2F1ZGlvX3BvbGljeV9zZXJ2aWNlKCk7CiAgICAgaWYgKGFwcyA9PSAwKSByZXR1cm4gUEVSTUlTU0lPTl9ERU5JRUQ7Ci0gICAgcmV0dXJuIGFwcy0+c3RvcEF1ZGlvU291cmNlKGhhbmRsZSk7CisgICAgcmV0dXJuIGFwcy0+c3RvcEF1ZGlvU291cmNlKHBvcnRJZCk7CiB9CiAKIHN0YXR1c190IEF1ZGlvU3lzdGVtOjpzZXRNYXN0ZXJNb25vKGJvb2wgbW9ubykKQEAgLTEzMDQsNiArMTI5OCwyNCBAQAogICAgIHJldHVybiBhcHMtPnNldFN1cnJvdW5kRm9ybWF0RW5hYmxlZChhdWRpb0Zvcm1hdCwgZW5hYmxlZCk7CiB9CiAKKworc3RhdHVzX3QgQXVkaW9TeXN0ZW06OnNldEFzc2lzdGFudFVpZCh1aWRfdCB1aWQpCit7CisgICAgY29uc3Qgc3AgPElBdWRpb1BvbGljeVNlcnZpY2U+JiBhcHMgPSBBdWRpb1N5c3RlbTo6Z2V0X2F1ZGlvX3BvbGljeV9zZXJ2aWNlKCk7CisgICAgaWYgKGFwcyA9PSAwKSByZXR1cm4gUEVSTUlTU0lPTl9ERU5JRUQ7CisKKyAgICByZXR1cm4gYXBzLT5zZXRBc3Npc3RhbnRVaWQodWlkKTsKK30KKworc3RhdHVzX3QgQXVkaW9TeXN0ZW06OnNldEExMXlTZXJ2aWNlc1VpZHMoY29uc3Qgc3RkOjp2ZWN0b3I8dWlkX3Q+JiB1aWRzKQoreworICAgIGNvbnN0IHNwIDxJQXVkaW9Qb2xpY3lTZXJ2aWNlPiYgYXBzID0gQXVkaW9TeXN0ZW06OmdldF9hdWRpb19wb2xpY3lfc2VydmljZSgpOworICAgIGlmIChhcHMgPT0gMCkgcmV0dXJuIFBFUk1JU1NJT05fREVOSUVEOworCisgICAgcmV0dXJuIGFwcy0+c2V0QTExeVNlcnZpY2VzVWlkcyh1aWRzKTsKK30KKworCiAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAogaW50IEF1ZGlvU3lzdGVtOjpBdWRpb1BvbGljeVNlcnZpY2VDbGllbnQ6OmFkZEF1ZGlvUG9ydENhbGxiYWNrKApkaWZmIC0tZ2l0IGEvbWVkaWEvbGliYXVkaW9jbGllbnQvQXVkaW9UcmFjay5jcHAgYi9tZWRpYS9saWJhdWRpb2NsaWVudC9BdWRpb1RyYWNrLmNwcAppbmRleCA0ODgxZGRjLi5kZjlhZWE2IDEwMDY0NAotLS0gYS9tZWRpYS9saWJhdWRpb2NsaWVudC9BdWRpb1RyYWNrLmNwcAorKysgYi9tZWRpYS9saWJhdWRpb2NsaWVudC9BdWRpb1RyYWNrLmNwcApAQCAtMTIwLDIyICsxMjAsMjIgQEAKICAgICBzdGF0dXNfdCBzdGF0dXM7CiAgICAgc3RhdHVzID0gQXVkaW9TeXN0ZW06OmdldE91dHB1dFNhbXBsaW5nUmF0ZSgmYWZTYW1wbGVSYXRlLCBzdHJlYW1UeXBlKTsKICAgICBpZiAoc3RhdHVzICE9IE5PX0VSUk9SKSB7Ci0gICAgICAgIEFMT0dFKCJVbmFibGUgdG8gcXVlcnkgb3V0cHV0IHNhbXBsZSByYXRlIGZvciBzdHJlYW0gdHlwZSAlZDsgc3RhdHVzICVkIiwKLSAgICAgICAgICAgICAgICBzdHJlYW1UeXBlLCBzdGF0dXMpOworICAgICAgICBBTE9HRSgiJXMoKTogVW5hYmxlIHRvIHF1ZXJ5IG91dHB1dCBzYW1wbGUgcmF0ZSBmb3Igc3RyZWFtIHR5cGUgJWQ7IHN0YXR1cyAlZCIsCisgICAgICAgICAgICAgICAgX19mdW5jX18sIHN0cmVhbVR5cGUsIHN0YXR1cyk7CiAgICAgICAgIHJldHVybiBzdGF0dXM7CiAgICAgfQogICAgIHNpemVfdCBhZkZyYW1lQ291bnQ7CiAgICAgc3RhdHVzID0gQXVkaW9TeXN0ZW06OmdldE91dHB1dEZyYW1lQ291bnQoJmFmRnJhbWVDb3VudCwgc3RyZWFtVHlwZSk7CiAgICAgaWYgKHN0YXR1cyAhPSBOT19FUlJPUikgewotICAgICAgICBBTE9HRSgiVW5hYmxlIHRvIHF1ZXJ5IG91dHB1dCBmcmFtZSBjb3VudCBmb3Igc3RyZWFtIHR5cGUgJWQ7IHN0YXR1cyAlZCIsCi0gICAgICAgICAgICAgICAgc3RyZWFtVHlwZSwgc3RhdHVzKTsKKyAgICAgICAgQUxPR0UoIiVzKCk6IFVuYWJsZSB0byBxdWVyeSBvdXRwdXQgZnJhbWUgY291bnQgZm9yIHN0cmVhbSB0eXBlICVkOyBzdGF0dXMgJWQiLAorICAgICAgICAgICAgICAgIF9fZnVuY19fLCBzdHJlYW1UeXBlLCBzdGF0dXMpOwogICAgICAgICByZXR1cm4gc3RhdHVzOwogICAgIH0KICAgICB1aW50MzJfdCBhZkxhdGVuY3k7CiAgICAgc3RhdHVzID0gQXVkaW9TeXN0ZW06OmdldE91dHB1dExhdGVuY3koJmFmTGF0ZW5jeSwgc3RyZWFtVHlwZSk7CiAgICAgaWYgKHN0YXR1cyAhPSBOT19FUlJPUikgewotICAgICAgICBBTE9HRSgiVW5hYmxlIHRvIHF1ZXJ5IG91dHB1dCBsYXRlbmN5IGZvciBzdHJlYW0gdHlwZSAlZDsgc3RhdHVzICVkIiwKLSAgICAgICAgICAgICAgICBzdHJlYW1UeXBlLCBzdGF0dXMpOworICAgICAgICBBTE9HRSgiJXMoKTogVW5hYmxlIHRvIHF1ZXJ5IG91dHB1dCBsYXRlbmN5IGZvciBzdHJlYW0gdHlwZSAlZDsgc3RhdHVzICVkIiwKKyAgICAgICAgICAgICAgICBfX2Z1bmNfXywgc3RyZWFtVHlwZSwgc3RhdHVzKTsKICAgICAgICAgcmV0dXJuIHN0YXR1czsKICAgICB9CiAKQEAgLTE0OCwxMiArMTQ4LDEyIEBACiAgICAgLy8gQXVkaW9UcmFjay5TQU1QTEVfUkFURV9IWl9NSU4gPD0gc2FtcGxlUmF0ZSA8PSBBdWRpb1RyYWNrLlNBTVBMRV9SQVRFX0haX01BWC4KICAgICAvLyBSZXR1cm4gZXJyb3IgaW4gdGhlIHVubGlrZWx5IGV2ZW50IHRoYXQgaXQgZG9lcyBub3QsIGFzIHRoYXQncyBwYXJ0IG9mIHRoZSBBUEkgY29udHJhY3QuCiAgICAgaWYgKCpmcmFtZUNvdW50ID09IDApIHsKLSAgICAgICAgQUxPR0UoIkF1ZGlvVHJhY2s6OmdldE1pbkZyYW1lQ291bnQgZmFpbGVkIGZvciBzdHJlYW1UeXBlICVkLCBzYW1wbGVSYXRlICV1IiwKLSAgICAgICAgICAgICAgICBzdHJlYW1UeXBlLCBzYW1wbGVSYXRlKTsKKyAgICAgICAgQUxPR0UoIiVzKCk6IGZhaWxlZCBmb3Igc3RyZWFtVHlwZSAlZCwgc2FtcGxlUmF0ZSAldSIsCisgICAgICAgICAgICAgICAgX19mdW5jX18sIHN0cmVhbVR5cGUsIHNhbXBsZVJhdGUpOwogICAgICAgICByZXR1cm4gQkFEX1ZBTFVFOwogICAgIH0KLSAgICBBTE9HVigiZ2V0TWluRnJhbWVDb3VudD0lenU6IGFmRnJhbWVDb3VudD0lenUsIGFmU2FtcGxlUmF0ZT0ldSwgYWZMYXRlbmN5PSV1IiwKLSAgICAgICAgICAgICpmcmFtZUNvdW50LCBhZkZyYW1lQ291bnQsIGFmU2FtcGxlUmF0ZSwgYWZMYXRlbmN5KTsKKyAgICBBTE9HVigiJXMoKTogZ2V0TWluRnJhbWVDb3VudD0lenU6IGFmRnJhbWVDb3VudD0lenUsIGFmU2FtcGxlUmF0ZT0ldSwgYWZMYXRlbmN5PSV1IiwKKyAgICAgICAgICAgIF9fZnVuY19fLCAqZnJhbWVDb3VudCwgYWZGcmFtZUNvdW50LCBhZlNhbXBsZVJhdGUsIGFmTGF0ZW5jeSk7CiAgICAgcmV0dXJuIE5PX0VSUk9SOwogfQogCkBAIC0yMDEsNyArMjAxLDcgQEAKICAgICAvLyBYWFg6IHNoYWxsIHdlIGdhdGhlciBhbHRlcm5hdGl2ZSBpbmZvIGlmIGZhaWxpbmc/CiAgICAgY29uc3Qgc3RhdHVzX3QgbHN0YXR1cyA9IHRyYWNrLT5pbml0Q2hlY2soKTsKICAgICBpZiAobHN0YXR1cyAhPSBOT19FUlJPUikgewotICAgICAgICBBTE9HRCgibm8gbWV0cmljcyBnYXRoZXJlZCwgdHJhY2sgc3RhdHVzPSVkIiwgKGludCkgbHN0YXR1cyk7CisgICAgICAgIEFMT0dEKCIlcygpOiBubyBtZXRyaWNzIGdhdGhlcmVkLCB0cmFjayBzdGF0dXM9JWQiLCBfX2Z1bmNfXywgKGludCkgbHN0YXR1cyk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKQEAgLTM0Myw3ICszNDMsOCBAQAogICAgICAgICBtQ2Jsa01lbW9yeS5jbGVhcigpOwogICAgICAgICBtU2hhcmVkQnVmZmVyLmNsZWFyKCk7CiAgICAgICAgIElQQ1RocmVhZFN0YXRlOjpzZWxmKCktPmZsdXNoQ29tbWFuZHMoKTsKLSAgICAgICAgQUxPR1YoIn5BdWRpb1RyYWNrLCByZWxlYXNpbmcgc2Vzc2lvbiBpZCAlZCBmcm9tICVkIG9uIGJlaGFsZiBvZiAlZCIsCisgICAgICAgIEFMT0dWKCIlcyglZCksIHJlbGVhc2luZyBzZXNzaW9uIGlkICVkIGZyb20gJWQgb24gYmVoYWxmIG9mICVkIiwKKyAgICAgICAgICAgICAgICBfX2Z1bmNfXywgbUlkLAogICAgICAgICAgICAgICAgIG1TZXNzaW9uSWQsIElQQ1RocmVhZFN0YXRlOjpzZWxmKCktPmdldENhbGxpbmdQaWQoKSwgbUNsaWVudFBpZCk7CiAgICAgICAgIEF1ZGlvU3lzdGVtOjpyZWxlYXNlQXVkaW9TZXNzaW9uSWQobVNlc3Npb25JZCwgbUNsaWVudFBpZCk7CiAgICAgfQpAQCAtMzc2LDggKzM3NywxMCBAQAogICAgIHBpZF90IGNhbGxpbmdQaWQ7CiAgICAgcGlkX3QgbXlQaWQ7CiAKLSAgICBBTE9HVigic2V0KCk6IHN0cmVhbVR5cGUgJWQsIHNhbXBsZVJhdGUgJXUsIGZvcm1hdCAlI3gsIGNoYW5uZWxNYXNrICUjeCwgZnJhbWVDb3VudCAlenUsICIKKyAgICAvLyBOb3RlIG1JZCBpcyBub3QgdmFsaWQgdW50aWwgdGhlIHRyYWNrIGlzIGNyZWF0ZWQsIHNvIG9taXQgbUlkIGluIEFMT0cgZm9yIHNldC4KKyAgICBBTE9HVigiJXMoKTogc3RyZWFtVHlwZSAlZCwgc2FtcGxlUmF0ZSAldSwgZm9ybWF0ICUjeCwgY2hhbm5lbE1hc2sgJSN4LCBmcmFtZUNvdW50ICV6dSwgIgogICAgICAgICAgICJmbGFncyAjJXgsIG5vdGlmaWNhdGlvbkZyYW1lcyAlZCwgc2Vzc2lvbklkICVkLCB0cmFuc2ZlclR5cGUgJWQsIHVpZCAlZCwgcGlkICVkIiwKKyAgICAgICAgICBfX2Z1bmNfXywKICAgICAgICAgICBzdHJlYW1UeXBlLCBzYW1wbGVSYXRlLCBmb3JtYXQsIGNoYW5uZWxNYXNrLCBmcmFtZUNvdW50LCBmbGFncywgbm90aWZpY2F0aW9uRnJhbWVzLAogICAgICAgICAgIHNlc3Npb25JZCwgdHJhbnNmZXJUeXBlLCB1aWQsIHBpZCk7CiAKQEAgLTM5Niw4ICszOTksMTAgQEAKICAgICAgICAgfQogICAgICAgICBicmVhazsKICAgICBjYXNlIFRSQU5TRkVSX0NBTExCQUNLOgorICAgIGNhc2UgVFJBTlNGRVJfU1lOQ19OT1RJRl9DQUxMQkFDSzoKICAgICAgICAgaWYgKGNiZiA9PSBOVUxMIHx8IHNoYXJlZEJ1ZmZlciAhPSAwKSB7Ci0gICAgICAgICAgICBBTE9HRSgiVHJhbnNmZXIgdHlwZSBUUkFOU0ZFUl9DQUxMQkFDSyBidXQgY2JmID09IE5VTEwgfHwgc2hhcmVkQnVmZmVyICE9IDAiKTsKKyAgICAgICAgICAgIEFMT0dFKCIlcygpOiBUcmFuc2ZlciB0eXBlICVzIGJ1dCBjYmYgPT0gTlVMTCB8fCBzaGFyZWRCdWZmZXIgIT0gMCIsCisgICAgICAgICAgICAgICAgICAgIGNvbnZlcnRUcmFuc2ZlclRvVGV4dCh0cmFuc2ZlclR5cGUpLCBfX2Z1bmNfXyk7CiAgICAgICAgICAgICBzdGF0dXMgPSBCQURfVkFMVUU7CiAgICAgICAgICAgICBnb3RvIGV4aXQ7CiAgICAgICAgIH0KQEAgLTQwNSwyMCArNDEwLDIxIEBACiAgICAgY2FzZSBUUkFOU0ZFUl9PQlRBSU46CiAgICAgY2FzZSBUUkFOU0ZFUl9TWU5DOgogICAgICAgICBpZiAoc2hhcmVkQnVmZmVyICE9IDApIHsKLSAgICAgICAgICAgIEFMT0dFKCJUcmFuc2ZlciB0eXBlIFRSQU5TRkVSX09CVEFJTiBidXQgc2hhcmVkQnVmZmVyICE9IDAiKTsKKyAgICAgICAgICAgIEFMT0dFKCIlcygpOiBUcmFuc2ZlciB0eXBlIFRSQU5TRkVSX09CVEFJTiBidXQgc2hhcmVkQnVmZmVyICE9IDAiLCBfX2Z1bmNfXyk7CiAgICAgICAgICAgICBzdGF0dXMgPSBCQURfVkFMVUU7CiAgICAgICAgICAgICBnb3RvIGV4aXQ7CiAgICAgICAgIH0KICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBUUkFOU0ZFUl9TSEFSRUQ6CiAgICAgICAgIGlmIChzaGFyZWRCdWZmZXIgPT0gMCkgewotICAgICAgICAgICAgQUxPR0UoIlRyYW5zZmVyIHR5cGUgVFJBTlNGRVJfU0hBUkVEIGJ1dCBzaGFyZWRCdWZmZXIgPT0gMCIpOworICAgICAgICAgICAgQUxPR0UoIiVzKCk6IFRyYW5zZmVyIHR5cGUgVFJBTlNGRVJfU0hBUkVEIGJ1dCBzaGFyZWRCdWZmZXIgPT0gMCIsIF9fZnVuY19fKTsKICAgICAgICAgICAgIHN0YXR1cyA9IEJBRF9WQUxVRTsKICAgICAgICAgICAgIGdvdG8gZXhpdDsKICAgICAgICAgfQogICAgICAgICBicmVhazsKICAgICBkZWZhdWx0OgotICAgICAgICBBTE9HRSgiSW52YWxpZCB0cmFuc2ZlciB0eXBlICVkIiwgdHJhbnNmZXJUeXBlKTsKKyAgICAgICAgQUxPR0UoIiVzKCk6IEludmFsaWQgdHJhbnNmZXIgdHlwZSAlZCIsCisgICAgICAgICAgICAgICAgX19mdW5jX18sIHRyYW5zZmVyVHlwZSk7CiAgICAgICAgIHN0YXR1cyA9IEJBRF9WQUxVRTsKICAgICAgICAgZ290byBleGl0OwogICAgIH0KQEAgLTQyNiwxNCArNDMyLDE1IEBACiAgICAgbVRyYW5zZmVyID0gdHJhbnNmZXJUeXBlOwogICAgIG1Eb05vdFJlY29ubmVjdCA9IGRvTm90UmVjb25uZWN0OwogCi0gICAgQUxPR1ZfSUYoc2hhcmVkQnVmZmVyICE9IDAsICJzaGFyZWRCdWZmZXI6ICVwLCBzaXplOiAlenUiLCBzaGFyZWRCdWZmZXItPnBvaW50ZXIoKSwKLSAgICAgICAgICAgIHNoYXJlZEJ1ZmZlci0+c2l6ZSgpKTsKKyAgICBBTE9HVl9JRihzaGFyZWRCdWZmZXIgIT0gMCwgIiVzKCk6IHNoYXJlZEJ1ZmZlcjogJXAsIHNpemU6ICV6dSIsCisgICAgICAgICAgICBfX2Z1bmNfXywgc2hhcmVkQnVmZmVyLT5wb2ludGVyKCksIHNoYXJlZEJ1ZmZlci0+c2l6ZSgpKTsKIAotICAgIEFMT0dWKCJzZXQoKSBzdHJlYW1UeXBlICVkIGZyYW1lQ291bnQgJXp1IGZsYWdzICUwNHgiLCBzdHJlYW1UeXBlLCBmcmFtZUNvdW50LCBmbGFncyk7CisgICAgQUxPR1YoIiVzKCk6IHN0cmVhbVR5cGUgJWQgZnJhbWVDb3VudCAlenUgZmxhZ3MgJTA0eCIsCisgICAgICAgICAgICBfX2Z1bmNfXywgc3RyZWFtVHlwZSwgZnJhbWVDb3VudCwgZmxhZ3MpOwogCiAgICAgLy8gaW52YXJpYW50IHRoYXQgbUF1ZGlvVHJhY2sgIT0gMCBpcyB0cnVlIG9ubHkgYWZ0ZXIgc2V0KCkgcmV0dXJucyBzdWNjZXNzZnVsbHkKICAgICBpZiAobUF1ZGlvVHJhY2sgIT0gMCkgewotICAgICAgICBBTE9HRSgiVHJhY2sgYWxyZWFkeSBpbiB1c2UiKTsKKyAgICAgICAgQUxPR0UoIiVzKCk6IFRyYWNrIGFscmVhZHkgaW4gdXNlIiwgX19mdW5jX18pOwogICAgICAgICBzdGF0dXMgPSBJTlZBTElEX09QRVJBVElPTjsKICAgICAgICAgZ290byBleGl0OwogICAgIH0KQEAgLTQ0NCw3ICs0NTEsNyBAQAogICAgIH0KICAgICBpZiAocEF0dHJpYnV0ZXMgPT0gTlVMTCkgewogICAgICAgICBpZiAodWludDMyX3Qoc3RyZWFtVHlwZSkgPj0gQVVESU9fU1RSRUFNX1BVQkxJQ19DTlQpIHsKLSAgICAgICAgICAgIEFMT0dFKCJJbnZhbGlkIHN0cmVhbSB0eXBlICVkIiwgc3RyZWFtVHlwZSk7CisgICAgICAgICAgICBBTE9HRSgiJXMoKTogSW52YWxpZCBzdHJlYW0gdHlwZSAlZCIsIF9fZnVuY19fLCBzdHJlYW1UeXBlKTsKICAgICAgICAgICAgIHN0YXR1cyA9IEJBRF9WQUxVRTsKICAgICAgICAgICAgIGdvdG8gZXhpdDsKICAgICAgICAgfQpAQCAtNDUzLDggKzQ2MCwxMCBAQAogICAgIH0gZWxzZSB7CiAgICAgICAgIC8vIHN0cmVhbSB0eXBlIHNob3VsZG4ndCBiZSBsb29rZWQgYXQsIHRoaXMgdHJhY2sgaGFzIGF1ZGlvIGF0dHJpYnV0ZXMKICAgICAgICAgbWVtY3B5KCZtQXR0cmlidXRlcywgcEF0dHJpYnV0ZXMsIHNpemVvZihhdWRpb19hdHRyaWJ1dGVzX3QpKTsKLSAgICAgICAgQUxPR1YoIkJ1aWxkaW5nIEF1ZGlvVHJhY2sgd2l0aCBhdHRyaWJ1dGVzOiB1c2FnZT0lZCBjb250ZW50PSVkIGZsYWdzPTB4JXggdGFncz1bJXNdIiwKLSAgICAgICAgICAgICAgICBtQXR0cmlidXRlcy51c2FnZSwgbUF0dHJpYnV0ZXMuY29udGVudF90eXBlLCBtQXR0cmlidXRlcy5mbGFncywgbUF0dHJpYnV0ZXMudGFncyk7CisgICAgICAgIEFMT0dWKCIlcygpOiBCdWlsZGluZyBBdWRpb1RyYWNrIHdpdGggYXR0cmlidXRlczoiCisgICAgICAgICAgICAgICAgIiB1c2FnZT0lZCBjb250ZW50PSVkIGZsYWdzPTB4JXggdGFncz1bJXNdIiwKKyAgICAgICAgICAgICAgICBfX2Z1bmNfXywKKyAgICAgICAgICAgICAgICAgbUF0dHJpYnV0ZXMudXNhZ2UsIG1BdHRyaWJ1dGVzLmNvbnRlbnRfdHlwZSwgbUF0dHJpYnV0ZXMuZmxhZ3MsIG1BdHRyaWJ1dGVzLnRhZ3MpOwogICAgICAgICBtU3RyZWFtVHlwZSA9IEFVRElPX1NUUkVBTV9ERUZBVUxUOwogICAgICAgICBpZiAoKG1BdHRyaWJ1dGVzLmZsYWdzICYgQVVESU9fRkxBR19IV19BVl9TWU5DKSAhPSAwKSB7CiAgICAgICAgICAgICBmbGFncyA9IChhdWRpb19vdXRwdXRfZmxhZ3NfdCkoZmxhZ3MgfCBBVURJT19PVVRQVVRfRkxBR19IV19BVl9TWU5DKTsKQEAgLTQ3NywxNCArNDg2LDE0IEBACiAKICAgICAvLyB2YWxpZGF0ZSBwYXJhbWV0ZXJzCiAgICAgaWYgKCFhdWRpb19pc192YWxpZF9mb3JtYXQoZm9ybWF0KSkgewotICAgICAgICBBTE9HRSgiSW52YWxpZCBmb3JtYXQgJSN4IiwgZm9ybWF0KTsKKyAgICAgICAgQUxPR0UoIiVzKCk6IEludmFsaWQgZm9ybWF0ICUjeCIsIF9fZnVuY19fLCBmb3JtYXQpOwogICAgICAgICBzdGF0dXMgPSBCQURfVkFMVUU7CiAgICAgICAgIGdvdG8gZXhpdDsKICAgICB9CiAgICAgbUZvcm1hdCA9IGZvcm1hdDsKIAogICAgIGlmICghYXVkaW9faXNfb3V0cHV0X2NoYW5uZWwoY2hhbm5lbE1hc2spKSB7Ci0gICAgICAgIEFMT0dFKCJJbnZhbGlkIGNoYW5uZWwgbWFzayAlI3giLCBjaGFubmVsTWFzayk7CisgICAgICAgIEFMT0dFKCIlcygpOiBJbnZhbGlkIGNoYW5uZWwgbWFzayAlI3giLCAgX19mdW5jX18sIGNoYW5uZWxNYXNrKTsKICAgICAgICAgc3RhdHVzID0gQkFEX1ZBTFVFOwogICAgICAgICBnb3RvIGV4aXQ7CiAgICAgfQpAQCAtNDk3LDggKzUwNiw5IEBACiAgICAgaWYgKChmbGFncyAmIEFVRElPX09VVFBVVF9GTEFHX0NPTVBSRVNTX09GRkxPQUQpCiAgICAgICAgICAgICB8fCAhYXVkaW9faXNfbGluZWFyX3BjbShmb3JtYXQpKSB7CiAgICAgICAgIEFMT0dWKCAoZmxhZ3MgJiBBVURJT19PVVRQVVRfRkxBR19DT01QUkVTU19PRkZMT0FEKQotICAgICAgICAgICAgICAgICAgICA/ICJPZmZsb2FkIHJlcXVlc3QsIGZvcmNpbmcgdG8gRGlyZWN0IE91dHB1dCIKLSAgICAgICAgICAgICAgICAgICAgOiAiTm90IGxpbmVhciBQQ00sIGZvcmNpbmcgdG8gRGlyZWN0IE91dHB1dCIpOworICAgICAgICAgICAgICAgICAgICA/ICIlcygpOiBPZmZsb2FkIHJlcXVlc3QsIGZvcmNpbmcgdG8gRGlyZWN0IE91dHB1dCIKKyAgICAgICAgICAgICAgICAgICAgOiAiJXMoKTogTm90IGxpbmVhciBQQ00sIGZvcmNpbmcgdG8gRGlyZWN0IE91dHB1dCIsCisgICAgICAgICAgICAgICAgICAgIF9fZnVuY19fKTsKICAgICAgICAgZmxhZ3MgPSAoYXVkaW9fb3V0cHV0X2ZsYWdzX3QpCiAgICAgICAgICAgICAgICAgLy8gRklYTUUgd2h5IGNhbid0IHdlIGFsbG93IGRpcmVjdCBBTkQgZmFzdD8KICAgICAgICAgICAgICAgICAoKGZsYWdzIHwgQVVESU9fT1VUUFVUX0ZMQUdfRElSRUNUKSAmIH5BVURJT19PVVRQVVRfRkxBR19GQVNUKTsKQEAgLTU1NCwxNCArNTY0LDE0IEBACiAgICAgICAgIG1Ob3RpZmljYXRpb25zUGVyQnVmZmVyUmVxID0gMDsKICAgICB9IGVsc2UgewogICAgICAgICBpZiAoIShmbGFncyAmIEFVRElPX09VVFBVVF9GTEFHX0ZBU1QpKSB7Ci0gICAgICAgICAgICBBTE9HRSgibm90aWZpY2F0aW9uRnJhbWVzPSVkIG5vdCBwZXJtaXR0ZWQgZm9yIG5vbi1mYXN0IHRyYWNrIiwKLSAgICAgICAgICAgICAgICAgICAgbm90aWZpY2F0aW9uRnJhbWVzKTsKKyAgICAgICAgICAgIEFMT0dFKCIlcygpOiBub3RpZmljYXRpb25GcmFtZXM9JWQgbm90IHBlcm1pdHRlZCBmb3Igbm9uLWZhc3QgdHJhY2siLAorICAgICAgICAgICAgICAgICAgICBfX2Z1bmNfXywgbm90aWZpY2F0aW9uRnJhbWVzKTsKICAgICAgICAgICAgIHN0YXR1cyA9IEJBRF9WQUxVRTsKICAgICAgICAgICAgIGdvdG8gZXhpdDsKICAgICAgICAgfQogICAgICAgICBpZiAoZnJhbWVDb3VudCA+IDApIHsKLSAgICAgICAgICAgIEFMT0dFKCJub3RpZmljYXRpb25GcmFtZXM9JWQgbm90IHBlcm1pdHRlZCB3aXRoIG5vbi16ZXJvIGZyYW1lQ291bnQ9JXp1IiwKLSAgICAgICAgICAgICAgICAgICAgbm90aWZpY2F0aW9uRnJhbWVzLCBmcmFtZUNvdW50KTsKKyAgICAgICAgICAgIEFMT0dFKCIlcygpOiBub3RpZmljYXRpb25GcmFtZXM9JWQgbm90IHBlcm1pdHRlZCB3aXRoIG5vbi16ZXJvIGZyYW1lQ291bnQ9JXp1IiwKKyAgICAgICAgICAgICAgICAgICAgX19mdW5jX18sIG5vdGlmaWNhdGlvbkZyYW1lcywgZnJhbWVDb3VudCk7CiAgICAgICAgICAgICBzdGF0dXMgPSBCQURfVkFMVUU7CiAgICAgICAgICAgICBnb3RvIGV4aXQ7CiAgICAgICAgIH0KQEAgLTU3MSw3ICs1ODEsOCBAQAogICAgICAgICBtTm90aWZpY2F0aW9uc1BlckJ1ZmZlclJlcSA9IG1pbihtYXhOb3RpZmljYXRpb25zUGVyQnVmZmVyLAogICAgICAgICAgICAgICAgIG1heCgodWludDMyX3QpIC1ub3RpZmljYXRpb25GcmFtZXMsIG1pbk5vdGlmaWNhdGlvbnNQZXJCdWZmZXIpKTsKICAgICAgICAgQUxPR1dfSUYobU5vdGlmaWNhdGlvbnNQZXJCdWZmZXJSZXEgIT0gKHVpbnQzMl90KSAtbm90aWZpY2F0aW9uRnJhbWVzLAotICAgICAgICAgICAgICAgICJub3RpZmljYXRpb25GcmFtZXM9JWQgY2xhbXBlZCB0byB0aGUgcmFuZ2UgLSV1IHRvIC0ldSIsCisgICAgICAgICAgICAgICAgIiVzKCk6IG5vdGlmaWNhdGlvbkZyYW1lcz0lZCBjbGFtcGVkIHRvIHRoZSByYW5nZSAtJXUgdG8gLSV1IiwKKyAgICAgICAgICAgICAgICBfX2Z1bmNfXywKICAgICAgICAgICAgICAgICBub3RpZmljYXRpb25GcmFtZXMsIG1pbk5vdGlmaWNhdGlvbnNQZXJCdWZmZXIsIG1heE5vdGlmaWNhdGlvbnNQZXJCdWZmZXIpOwogICAgIH0KICAgICBtTm90aWZpY2F0aW9uRnJhbWVzQWN0ID0gMDsKQEAgLTY0Nyw2ICs2NTgsNyBAQAogc3RhdHVzX3QgQXVkaW9UcmFjazo6c3RhcnQoKQogewogICAgIEF1dG9NdXRleCBsb2NrKG1Mb2NrKTsKKyAgICBBTE9HVigiJXMoJWQpOiBwcmlvciBzdGF0ZTolcyIsIF9fZnVuY19fLCBtSWQsIHN0YXRlVG9TdHJpbmcobVN0YXRlKSk7CiAKICAgICBpZiAobVN0YXRlID09IFNUQVRFX0FDVElWRSkgewogICAgICAgICByZXR1cm4gSU5WQUxJRF9PUEVSQVRJT047CkBAIC02ODYsNyArNjk4LDggQEAKICAgICAgICAgICAgIC8vIFNlcnZlciBzaWRlIGhhcyBjb25zdW1lZCBzb21ldGhpbmcsIGJ1dCBpcyBpdCBmaW5pc2hlZCBjb25zdW1pbmc/CiAgICAgICAgICAgICAvLyBJdCBpcyBwb3NzaWJsZSBzaW5jZSBmbHVzaCBhbmQgc3RvcCBhcmUgYXN5bmNocm9ub3VzIHRoYXQgdGhlIHNlcnZlcgogICAgICAgICAgICAgLy8gaXMgc3RpbGwgYWN0aXZlIGF0IHRoaXMgcG9pbnQuCi0gICAgICAgICAgICBBTE9HVigic3RhcnQ6IHNlcnZlciByZWFkOiVsbGQgIGN1bXVsYXRpdmUgZmx1c2hlZDolbGxkICBjbGllbnQgd3JpdHRlbjolbGxkIiwKKyAgICAgICAgICAgIEFMT0dWKCIlcyglZCk6IHNlcnZlciByZWFkOiVsbGQgIGN1bXVsYXRpdmUgZmx1c2hlZDolbGxkICBjbGllbnQgd3JpdHRlbjolbGxkIiwKKyAgICAgICAgICAgICAgICAgICAgX19mdW5jX18sIG1JZCwKICAgICAgICAgICAgICAgICAgICAgKGxvbmcgbG9uZykobUZyYW1lc1dyaXR0ZW5TZXJ2ZXJPZmZzZXQKICAgICAgICAgICAgICAgICAgICAgICAgICAgICArIG1TdGFydEV0cy5tUG9zaXRpb25bRXh0ZW5kZWRUaW1lc3RhbXA6OkxPQ0FUSU9OX1NFUlZFUl0pLAogICAgICAgICAgICAgICAgICAgICAobG9uZyBsb25nKW1TdGFydEV0cy5tRmx1c2hlZCwKQEAgLTc0Nyw3ICs3NjAsNyBAQAogICAgICAgICAvLyBTdGFydCBvdXIgbG9jYWwgVm9sdW1lSGFuZGxlciBmb3IgcmVzdG9yYXRpb24gcHVycG9zZXMuCiAgICAgICAgIG1Wb2x1bWVIYW5kbGVyLT5zZXRTdGFydGVkKCk7CiAgICAgfSBlbHNlIHsKLSAgICAgICAgQUxPR0UoInN0YXJ0KCkgc3RhdHVzICVkIiwgc3RhdHVzKTsKKyAgICAgICAgQUxPR0UoIiVzKCVkKTogc3RhdHVzICVkIiwgX19mdW5jX18sIG1JZCwgc3RhdHVzKTsKICAgICAgICAgbVN0YXRlID0gcHJldmlvdXNTdGF0ZTsKICAgICAgICAgaWYgKHQgIT0gMCkgewogICAgICAgICAgICAgaWYgKHByZXZpb3VzU3RhdGUgIT0gU1RBVEVfU1RPUFBJTkcpIHsKQEAgLTc2NSw2ICs3NzgsOCBAQAogdm9pZCBBdWRpb1RyYWNrOjpzdG9wKCkKIHsKICAgICBBdXRvTXV0ZXggbG9jayhtTG9jayk7CisgICAgQUxPR1YoIiVzKCVkKTogcHJpb3Igc3RhdGU6JXMiLCBfX2Z1bmNfXywgbUlkLCBzdGF0ZVRvU3RyaW5nKG1TdGF0ZSkpOworCiAgICAgaWYgKG1TdGF0ZSAhPSBTVEFURV9BQ1RJVkUgJiYgbVN0YXRlICE9IFNUQVRFX1BBVVNFRCkgewogICAgICAgICByZXR1cm47CiAgICAgfQpAQCAtNzc0LDcgKzc4OSw3IEBACiAgICAgfSBlbHNlIHsKICAgICAgICAgbVN0YXRlID0gU1RBVEVfU1RPUFBFRDsKICAgICAgICAgQUxPR0RfSUYobVNoYXJlZEJ1ZmZlciA9PSBudWxscHRyLAotICAgICAgICAgICAgICAgICJzdG9wKCkgY2FsbGVkIHdpdGggJXUgZnJhbWVzIGRlbGl2ZXJlZCIsIG1SZWxlYXNlZC52YWx1ZSgpKTsKKyAgICAgICAgICAgICAgICAiJXMoJWQpOiBjYWxsZWQgd2l0aCAldSBmcmFtZXMgZGVsaXZlcmVkIiwgX19mdW5jX18sIG1JZCwgbVJlbGVhc2VkLnZhbHVlKCkpOwogICAgICAgICBtUmVsZWFzZWQgPSAwOwogICAgIH0KIApAQCAtNzk1LDYgKzgxMCwxMCBAQAogICAgIGlmICh0ICE9IDApIHsKICAgICAgICAgaWYgKCFpc09mZmxvYWRlZF9sKCkpIHsKICAgICAgICAgICAgIHQtPnBhdXNlKCk7CisgICAgICAgIH0gZWxzZSBpZiAobVRyYW5zZmVyID09IFRSQU5TRkVSX1NZTkNfTk9USUZfQ0FMTEJBQ0spIHsKKyAgICAgICAgICAgIC8vIGNhdXNlcyB3YWtlIHVwIG9mIHRoZSBwbGF5YmFjayB0aHJlYWQsIHRoYXQgd2lsbCBjYWxsYmFjayB0aGUgY2xpZW50IGZvcgorICAgICAgICAgICAgLy8gRVZFTlRfU1RSRUFNX0VORCBpbiBwcm9jZXNzQXVkaW9CdWZmZXIoKQorICAgICAgICAgICAgdC0+d2FrZSgpOwogICAgICAgICB9CiAgICAgfSBlbHNlIHsKICAgICAgICAgc2V0cHJpb3JpdHkoUFJJT19QUk9DRVNTLCAwLCBtUHJldmlvdXNQcmlvcml0eSk7CkBAIC04MTAsMTAgKzgyOSwxMiBAQAogCiB2b2lkIEF1ZGlvVHJhY2s6OmZsdXNoKCkKIHsKKyAgICBBdXRvTXV0ZXggbG9jayhtTG9jayk7CisgICAgQUxPR1YoIiVzKCVkKTogcHJpb3Igc3RhdGU6JXMiLCBfX2Z1bmNfXywgbUlkLCBzdGF0ZVRvU3RyaW5nKG1TdGF0ZSkpOworCiAgICAgaWYgKG1TaGFyZWRCdWZmZXIgIT0gMCkgewogICAgICAgICByZXR1cm47CiAgICAgfQotICAgIEF1dG9NdXRleCBsb2NrKG1Mb2NrKTsKICAgICBpZiAobVN0YXRlID09IFNUQVRFX0FDVElWRSkgewogICAgICAgICByZXR1cm47CiAgICAgfQpAQCAtODQyLDYgKzg2Myw4IEBACiB2b2lkIEF1ZGlvVHJhY2s6OnBhdXNlKCkKIHsKICAgICBBdXRvTXV0ZXggbG9jayhtTG9jayk7CisgICAgQUxPR1YoIiVzKCVkKTogcHJpb3Igc3RhdGU6JXMiLCBfX2Z1bmNfXywgbUlkLCBzdGF0ZVRvU3RyaW5nKG1TdGF0ZSkpOworCiAgICAgaWYgKG1TdGF0ZSA9PSBTVEFURV9BQ1RJVkUpIHsKICAgICAgICAgbVN0YXRlID0gU1RBVEVfUEFVU0VEOwogICAgIH0gZWxzZSBpZiAobVN0YXRlID09IFNUQVRFX1NUT1BQSU5HKSB7CkBAIC04NjcsNyArODkwLDggQEAKIAogICAgICAgICAgICAgdWludDMyX3QgaGFsRnJhbWVzOwogICAgICAgICAgICAgQXVkaW9TeXN0ZW06OmdldFJlbmRlclBvc2l0aW9uKG1PdXRwdXQsICZoYWxGcmFtZXMsICZtUGF1c2VkUG9zaXRpb24pOwotICAgICAgICAgICAgQUxPR1YoIkF1ZGlvVHJhY2s6OnBhdXNlIGZvciBvZmZsb2FkLCBjYWNoZSBjdXJyZW50IHBvc2l0aW9uICV1IiwgbVBhdXNlZFBvc2l0aW9uKTsKKyAgICAgICAgICAgIEFMT0dWKCIlcyglZCk6IGZvciBvZmZsb2FkLCBjYWNoZSBjdXJyZW50IHBvc2l0aW9uICV1IiwKKyAgICAgICAgICAgICAgICAgICAgX19mdW5jX18sIG1JZCwgbVBhdXNlZFBvc2l0aW9uKTsKICAgICAgICAgfQogICAgIH0KIH0KQEAgLTkyMSw2ICs5NDUsOCBAQAogc3RhdHVzX3QgQXVkaW9UcmFjazo6c2V0U2FtcGxlUmF0ZSh1aW50MzJfdCByYXRlKQogewogICAgIEF1dG9NdXRleCBsb2NrKG1Mb2NrKTsKKyAgICBBTE9HVigiJXMoJWQpOiBwcmlvciBzdGF0ZTolcyByYXRlOiV1IiwgX19mdW5jX18sIG1JZCwgc3RhdGVUb1N0cmluZyhtU3RhdGUpLCByYXRlKTsKKwogICAgIGlmIChyYXRlID09IG1TYW1wbGVSYXRlKSB7CiAgICAgICAgIHJldHVybiBOT19FUlJPUjsKICAgICB9CkBAIC05ODYsOCArMTAxMiw4IEBACiAgICAgICAgIHJldHVybiBJTlZBTElEX09QRVJBVElPTjsKICAgICB9CiAKLSAgICBBTE9HVigic2V0UGxheWJhY2tSYXRlIChpbnB1dCk6IG1TYW1wbGVSYXRlOiV1ICBtU3BlZWQ6JWYgIG1QaXRjaDolZiIsCi0gICAgICAgICAgICBtU2FtcGxlUmF0ZSwgcGxheWJhY2tSYXRlLm1TcGVlZCwgcGxheWJhY2tSYXRlLm1QaXRjaCk7CisgICAgQUxPR1YoIiVzKCVkKTogbVNhbXBsZVJhdGU6JXUgIG1TcGVlZDolZiAgbVBpdGNoOiVmIiwKKyAgICAgICAgICAgIF9fZnVuY19fLCBtSWQsIG1TYW1wbGVSYXRlLCBwbGF5YmFja1JhdGUubVNwZWVkLCBwbGF5YmFja1JhdGUubVBpdGNoKTsKICAgICAvLyBwaXRjaCBpcyBlbXVsYXRlZCBieSBhZGp1c3Rpbmcgc3BlZWQgYW5kIHNhbXBsZVJhdGUKICAgICBjb25zdCB1aW50MzJfdCBlZmZlY3RpdmVSYXRlID0gYWRqdXN0U2FtcGxlUmF0ZShtU2FtcGxlUmF0ZSwgcGxheWJhY2tSYXRlLm1QaXRjaCk7CiAgICAgY29uc3QgZmxvYXQgZWZmZWN0aXZlU3BlZWQgPSBhZGp1c3RTcGVlZChwbGF5YmFja1JhdGUubVNwZWVkLCBwbGF5YmFja1JhdGUubVBpdGNoKTsKQEAgLTk5NiwzMiArMTAyMiwzMiBAQAogICAgIHBsYXliYWNrUmF0ZVRlbXAubVNwZWVkID0gZWZmZWN0aXZlU3BlZWQ7CiAgICAgcGxheWJhY2tSYXRlVGVtcC5tUGl0Y2ggPSBlZmZlY3RpdmVQaXRjaDsKIAotICAgIEFMT0dWKCJzZXRQbGF5YmFja1JhdGUgKGVmZmVjdGl2ZSk6IG1TYW1wbGVSYXRlOiV1ICBtU3BlZWQ6JWYgIG1QaXRjaDolZiIsCi0gICAgICAgICAgICBlZmZlY3RpdmVSYXRlLCBlZmZlY3RpdmVTcGVlZCwgZWZmZWN0aXZlUGl0Y2gpOworICAgIEFMT0dWKCIlcyglZCkgKGVmZmVjdGl2ZSkgbVNhbXBsZVJhdGU6JXUgIG1TcGVlZDolZiAgbVBpdGNoOiVmIiwKKyAgICAgICAgICAgIF9fZnVuY19fLCBtSWQsIGVmZmVjdGl2ZVJhdGUsIGVmZmVjdGl2ZVNwZWVkLCBlZmZlY3RpdmVQaXRjaCk7CiAKICAgICBpZiAoIWlzQXVkaW9QbGF5YmFja1JhdGVWYWxpZChwbGF5YmFja1JhdGVUZW1wKSkgewotICAgICAgICBBTE9HVygic2V0UGxheWJhY2tSYXRlKCVmLCAlZikgZmFpbGVkIChlZmZlY3RpdmUgcmF0ZSBvdXQgb2YgYm91bmRzKSIsCi0gICAgICAgICAgICAgICAgcGxheWJhY2tSYXRlLm1TcGVlZCwgcGxheWJhY2tSYXRlLm1QaXRjaCk7CisgICAgICAgIEFMT0dXKCIlcyglZCkgKCVmLCAlZikgZmFpbGVkIChlZmZlY3RpdmUgcmF0ZSBvdXQgb2YgYm91bmRzKSIsCisgICAgICAgICAgICAgICAgX19mdW5jX18sIG1JZCwgcGxheWJhY2tSYXRlLm1TcGVlZCwgcGxheWJhY2tSYXRlLm1QaXRjaCk7CiAgICAgICAgIHJldHVybiBCQURfVkFMVUU7CiAgICAgfQogICAgIC8vIENoZWNrIGlmIHRoZSBidWZmZXIgc2l6ZSBpcyBjb21wYXRpYmxlLgogICAgIGlmICghaXNTYW1wbGVSYXRlU3BlZWRBbGxvd2VkX2woZWZmZWN0aXZlUmF0ZSwgZWZmZWN0aXZlU3BlZWQpKSB7Ci0gICAgICAgIEFMT0dXKCJzZXRQbGF5YmFja1JhdGUoJWYsICVmKSBmYWlsZWQgKGJ1ZmZlciBzaXplKSIsCi0gICAgICAgICAgICAgICAgcGxheWJhY2tSYXRlLm1TcGVlZCwgcGxheWJhY2tSYXRlLm1QaXRjaCk7CisgICAgICAgIEFMT0dXKCIlcyglZCkgKCVmLCAlZikgZmFpbGVkIChidWZmZXIgc2l6ZSkiLAorICAgICAgICAgICAgICAgIF9fZnVuY19fLCBtSWQsIHBsYXliYWNrUmF0ZS5tU3BlZWQsIHBsYXliYWNrUmF0ZS5tUGl0Y2gpOwogICAgICAgICByZXR1cm4gQkFEX1ZBTFVFOwogICAgIH0KIAogICAgIC8vIENoZWNrIHJlc2FtcGxlciByYXRpb3MgYXJlIHdpdGhpbiBib3VuZHMKICAgICBpZiAoKHVpbnQ2NF90KWVmZmVjdGl2ZVJhdGUgPiAodWludDY0X3QpbVNhbXBsZVJhdGUgKgogICAgICAgICAgICAgKHVpbnQ2NF90KUFVRElPX1JFU0FNUExFUl9ET1dOX1JBVElPX01BWCkgewotICAgICAgICBBTE9HVygic2V0UGxheWJhY2tSYXRlKCVmLCAlZikgZmFpbGVkLiBSZXNhbXBsZSByYXRlIGV4Y2VlZHMgbWF4IGFjY2VwdGVkIHZhbHVlIiwKLSAgICAgICAgICAgICAgICBwbGF5YmFja1JhdGUubVNwZWVkLCBwbGF5YmFja1JhdGUubVBpdGNoKTsKKyAgICAgICAgQUxPR1coIiVzKCVkKSAoJWYsICVmKSBmYWlsZWQuIFJlc2FtcGxlIHJhdGUgZXhjZWVkcyBtYXggYWNjZXB0ZWQgdmFsdWUiLAorICAgICAgICAgICAgICAgIF9fZnVuY19fLCBtSWQsIHBsYXliYWNrUmF0ZS5tU3BlZWQsIHBsYXliYWNrUmF0ZS5tUGl0Y2gpOwogICAgICAgICByZXR1cm4gQkFEX1ZBTFVFOwogICAgIH0KIAogICAgIGlmICgodWludDY0X3QpZWZmZWN0aXZlUmF0ZSAqICh1aW50NjRfdClBVURJT19SRVNBTVBMRVJfVVBfUkFUSU9fTUFYIDwgKHVpbnQ2NF90KW1TYW1wbGVSYXRlKSB7Ci0gICAgICAgIEFMT0dXKCJzZXRQbGF5YmFja1JhdGUoJWYsICVmKSBmYWlsZWQuIFJlc2FtcGxlIHJhdGUgYmVsb3cgbWluIGFjY2VwdGVkIHZhbHVlIiwKLSAgICAgICAgICAgICAgICAgICAgICAgIHBsYXliYWNrUmF0ZS5tU3BlZWQsIHBsYXliYWNrUmF0ZS5tUGl0Y2gpOworICAgICAgICBBTE9HVygiJXMoJWQpICglZiwgJWYpIGZhaWxlZC4gUmVzYW1wbGUgcmF0ZSBiZWxvdyBtaW4gYWNjZXB0ZWQgdmFsdWUiLAorICAgICAgICAgICAgICAgIF9fZnVuY19fLCBtSWQsIHBsYXliYWNrUmF0ZS5tU3BlZWQsIHBsYXliYWNrUmF0ZS5tUGl0Y2gpOwogICAgICAgICByZXR1cm4gQkFEX1ZBTFVFOwogICAgIH0KICAgICBtUGxheWJhY2tSYXRlID0gcGxheWJhY2tSYXRlOwpAQCAtMTIyMiw3ICsxMjQ4LDggQEAKICAgICAgICAgdWludDMyX3QgZHNwRnJhbWVzID0gMDsKIAogICAgICAgICBpZiAoaXNPZmZsb2FkZWRfbCgpICYmICgobVN0YXRlID09IFNUQVRFX1BBVVNFRCkgfHwgKG1TdGF0ZSA9PSBTVEFURV9QQVVTRURfU1RPUFBJTkcpKSkgewotICAgICAgICAgICAgQUxPR1YoImdldFBvc2l0aW9uIGNhbGxlZCBpbiBwYXVzZWQgc3RhdGUsIHJldHVybiBjYWNoZWQgcG9zaXRpb24gJXUiLCBtUGF1c2VkUG9zaXRpb24pOworICAgICAgICAgICAgQUxPR1YoIiVzKCVkKTogY2FsbGVkIGluIHBhdXNlZCBzdGF0ZSwgcmV0dXJuIGNhY2hlZCBwb3NpdGlvbiAldSIsCisgICAgICAgICAgICAgICAgX19mdW5jX18sIG1JZCwgbVBhdXNlZFBvc2l0aW9uKTsKICAgICAgICAgICAgICpwb3NpdGlvbiA9IG1QYXVzZWRQb3NpdGlvbjsKICAgICAgICAgICAgIHJldHVybiBOT19FUlJPUjsKICAgICAgICAgfQpAQCAtMTM2OCw3ICsxMzk1LDcgQEAKIHsKICAgICBzdGF0dXNfdCBzdGF0dXMgPSBBdWRpb1N5c3RlbTo6Z2V0TGF0ZW5jeShtT3V0cHV0LCAmbUFmTGF0ZW5jeSk7CiAgICAgaWYgKHN0YXR1cyAhPSBOT19FUlJPUikgewotICAgICAgICBBTE9HVygiZ2V0TGF0ZW5jeSglZCkgZmFpbGVkIHN0YXR1cyAlZCIsIG1PdXRwdXQsIHN0YXR1cyk7CisgICAgICAgIEFMT0dXKCIlcyglZCk6IGdldExhdGVuY3koJWQpIGZhaWxlZCBzdGF0dXMgJWQiLCBfX2Z1bmNfXywgbUlkLCBtT3V0cHV0LCBzdGF0dXMpOwogICAgIH0gZWxzZSB7CiAgICAgICAgIC8vIEZJWE1FIGRvbid0IGJlbGlldmUgdGhpcyBsaWUKICAgICAgICAgbUxhdGVuY3kgPSBtQWZMYXRlbmN5ICsgKDEwMDBMTCAqIG1GcmFtZUNvdW50KSAvIG1TYW1wbGVSYXRlOwpAQCAtMTM4NCw2ICsxNDExLDcgQEAKICAgICAgICAgTUVESUFfQ0FTRV9FTlVNKFRSQU5TRkVSX09CVEFJTik7CiAgICAgICAgIE1FRElBX0NBU0VfRU5VTShUUkFOU0ZFUl9TWU5DKTsKICAgICAgICAgTUVESUFfQ0FTRV9FTlVNKFRSQU5TRkVSX1NIQVJFRCk7CisgICAgICAgIE1FRElBX0NBU0VfRU5VTShUUkFOU0ZFUl9TWU5DX05PVElGX0NBTExCQUNLKTsKICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgIHJldHVybiAiVU5SRUNPR05JWkVEIjsKICAgICB9CkBAIC0xMzk2LDcgKzE0MjQsOCBAQAogCiAgICAgY29uc3Qgc3A8SUF1ZGlvRmxpbmdlcj4mIGF1ZGlvRmxpbmdlciA9IEF1ZGlvU3lzdGVtOjpnZXRfYXVkaW9fZmxpbmdlcigpOwogICAgIGlmIChhdWRpb0ZsaW5nZXIgPT0gMCkgewotICAgICAgICBBTE9HRSgiQ291bGQgbm90IGdldCBhdWRpb2ZsaW5nZXIiKTsKKyAgICAgICAgQUxPR0UoIiVzKCVkKTogQ291bGQgbm90IGdldCBhdWRpb2ZsaW5nZXIiLAorICAgICAgICAgICAgICAgIF9fZnVuY19fLCBtSWQpOwogICAgICAgICBzdGF0dXMgPSBOT19JTklUOwogICAgICAgICBnb3RvIGV4aXQ7CiAgICAgfQpAQCAtMTQxNSwxMSArMTQ0NCwxNCBAQAogICAgICAgICAgICAgLy8gdXNlIGNhc2UgMzogb2J0YWluL3JlbGVhc2UgbW9kZQogICAgICAgICAgICAgKG1UcmFuc2ZlciA9PSBUUkFOU0ZFUl9PQlRBSU4pIHx8CiAgICAgICAgICAgICAvLyB1c2UgY2FzZSA0OiBzeW5jaHJvbm91cyB3cml0ZQotICAgICAgICAgICAgKChtVHJhbnNmZXIgPT0gVFJBTlNGRVJfU1lOQykgJiYgbVRocmVhZENhbkNhbGxKYXZhKTsKKyAgICAgICAgICAgICgobVRyYW5zZmVyID09IFRSQU5TRkVSX1NZTkMgfHwgbVRyYW5zZmVyID09IFRSQU5TRkVSX1NZTkNfTk9USUZfQ0FMTEJBQ0spCisgICAgICAgICAgICAgICAgICAgICYmIG1UaHJlYWRDYW5DYWxsSmF2YSk7CiAKICAgICAgICAgYm9vbCBmYXN0QWxsb3dlZCA9IHNoYXJlZEJ1ZmZlciB8fCB0cmFuc2ZlckFsbG93ZWQ7CiAgICAgICAgIGlmICghZmFzdEFsbG93ZWQpIHsKLSAgICAgICAgICAgIEFMT0dXKCJBVURJT19PVVRQVVRfRkxBR19GQVNUIGRlbmllZCBieSBjbGllbnQsIG5vdCBzaGFyZWQgYnVmZmVyIGFuZCB0cmFuc2ZlciA9ICVzIiwKKyAgICAgICAgICAgIEFMT0dXKCIlcyglZCk6IEFVRElPX09VVFBVVF9GTEFHX0ZBU1QgZGVuaWVkIGJ5IGNsaWVudCwiCisgICAgICAgICAgICAgICAgICAiIG5vdCBzaGFyZWQgYnVmZmVyIGFuZCB0cmFuc2ZlciA9ICVzIiwKKyAgICAgICAgICAgICAgICAgIF9fZnVuY19fLCBtSWQsCiAgICAgICAgICAgICAgICAgICBjb252ZXJ0VHJhbnNmZXJUb1RleHQobVRyYW5zZmVyKSk7CiAgICAgICAgICAgICBtRmxhZ3MgPSAoYXVkaW9fb3V0cHV0X2ZsYWdzX3QpIChtRmxhZ3MgJiB+QVVESU9fT1VUUFVUX0ZMQUdfRkFTVCk7CiAgICAgICAgIH0KQEAgLTE0NjgsNyArMTUwMCw4IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmc3RhdHVzKTsKIAogICAgIGlmIChzdGF0dXMgIT0gTk9fRVJST1IgfHwgb3V0cHV0Lm91dHB1dElkID09IEFVRElPX0lPX0hBTkRMRV9OT05FKSB7Ci0gICAgICAgIEFMT0dFKCJBdWRpb0ZsaW5nZXIgY291bGQgbm90IGNyZWF0ZSB0cmFjaywgc3RhdHVzOiAlZCBvdXRwdXQgJWQiLCBzdGF0dXMsIG91dHB1dC5vdXRwdXRJZCk7CisgICAgICAgIEFMT0dFKCIlcyglZCk6IEF1ZGlvRmxpbmdlciBjb3VsZCBub3QgY3JlYXRlIHRyYWNrLCBzdGF0dXM6ICVkIG91dHB1dCAlZCIsCisgICAgICAgICAgICAgICAgX19mdW5jX18sIG1JZCwgc3RhdHVzLCBvdXRwdXQub3V0cHV0SWQpOwogICAgICAgICBpZiAoc3RhdHVzID09IE5PX0VSUk9SKSB7CiAgICAgICAgICAgICBzdGF0dXMgPSBOT19JTklUOwogICAgICAgICB9CkBAIC0xNDg5LDYgKzE1MjIsNyBAQAogICAgIG1BZkZyYW1lQ291bnQgPSBvdXRwdXQuYWZGcmFtZUNvdW50OwogICAgIG1BZlNhbXBsZVJhdGUgPSBvdXRwdXQuYWZTYW1wbGVSYXRlOwogICAgIG1BZkxhdGVuY3kgPSBvdXRwdXQuYWZMYXRlbmN5TXM7CisgICAgbUlkID0gb3V0cHV0LnRyYWNrSWQ7CiAKICAgICBtTGF0ZW5jeSA9IG1BZkxhdGVuY3kgKyAoMTAwMExMICogbUZyYW1lQ291bnQpIC8gbVNhbXBsZVJhdGU7CiAKQEAgLTE0OTgsMTMgKzE1MzIsMTMgQEAKICAgICAvLyBGSVhNRSBjb21wYXJlIHRvIEF1ZGlvUmVjb3JkCiAgICAgc3A8SU1lbW9yeT4gaU1lbSA9IHRyYWNrLT5nZXRDYmxrKCk7CiAgICAgaWYgKGlNZW0gPT0gMCkgewotICAgICAgICBBTE9HRSgiQ291bGQgbm90IGdldCBjb250cm9sIGJsb2NrIik7CisgICAgICAgIEFMT0dFKCIlcyglZCk6IENvdWxkIG5vdCBnZXQgY29udHJvbCBibG9jayIsIF9fZnVuY19fLCBtSWQpOwogICAgICAgICBzdGF0dXMgPSBOT19JTklUOwogICAgICAgICBnb3RvIGV4aXQ7CiAgICAgfQogICAgIHZvaWQgKmlNZW1Qb2ludGVyID0gaU1lbS0+cG9pbnRlcigpOwogICAgIGlmIChpTWVtUG9pbnRlciA9PSBOVUxMKSB7Ci0gICAgICAgIEFMT0dFKCJDb3VsZCBub3QgZ2V0IGNvbnRyb2wgYmxvY2sgcG9pbnRlciIpOworICAgICAgICBBTE9HRSgiJXMoJWQpOiBDb3VsZCBub3QgZ2V0IGNvbnRyb2wgYmxvY2sgcG9pbnRlciIsIF9fZnVuY19fLCBtSWQpOwogICAgICAgICBzdGF0dXMgPSBOT19JTklUOwogICAgICAgICBnb3RvIGV4aXQ7CiAgICAgfQpAQCAtMTUyMywxNCArMTU1NywxNCBAQAogICAgIG1Bd2FpdEJvb3N0ID0gZmFsc2U7CiAgICAgaWYgKG1GbGFncyAmIEFVRElPX09VVFBVVF9GTEFHX0ZBU1QpIHsKICAgICAgICAgaWYgKG91dHB1dC5mbGFncyAmIEFVRElPX09VVFBVVF9GTEFHX0ZBU1QpIHsKLSAgICAgICAgICAgIEFMT0dJKCJBVURJT19PVVRQVVRfRkxBR19GQVNUIHN1Y2Nlc3NmdWw7IGZyYW1lQ291bnQgJXp1IC0+ICV6dSIsCi0gICAgICAgICAgICAgICAgICBtUmVxRnJhbWVDb3VudCwgbUZyYW1lQ291bnQpOworICAgICAgICAgICAgQUxPR0koIiVzKCVkKTogQVVESU9fT1VUUFVUX0ZMQUdfRkFTVCBzdWNjZXNzZnVsOyBmcmFtZUNvdW50ICV6dSAtPiAlenUiLAorICAgICAgICAgICAgICAgICAgX19mdW5jX18sIG1JZCwgbVJlcUZyYW1lQ291bnQsIG1GcmFtZUNvdW50KTsKICAgICAgICAgICAgIGlmICghbVRocmVhZENhbkNhbGxKYXZhKSB7CiAgICAgICAgICAgICAgICAgbUF3YWl0Qm9vc3QgPSB0cnVlOwogICAgICAgICAgICAgfQogICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgQUxPR1coIkFVRElPX09VVFBVVF9GTEFHX0ZBU1QgZGVuaWVkIGJ5IHNlcnZlcjsgZnJhbWVDb3VudCAlenUgLT4gJXp1IiwgbVJlcUZyYW1lQ291bnQsCi0gICAgICAgICAgICAgICAgICBtRnJhbWVDb3VudCk7CisgICAgICAgICAgICBBTE9HVygiJXMoJWQpOiBBVURJT19PVVRQVVRfRkxBR19GQVNUIGRlbmllZCBieSBzZXJ2ZXI7IGZyYW1lQ291bnQgJXp1IC0+ICV6dSIsCisgICAgICAgICAgICAgICAgICBfX2Z1bmNfXywgbUlkLCBtUmVxRnJhbWVDb3VudCwgbUZyYW1lQ291bnQpOwogICAgICAgICB9CiAgICAgfQogICAgIG1GbGFncyA9IG91dHB1dC5mbGFnczsKQEAgLTE1NTgsNyArMTU5Miw3IEBACiAgICAgfSBlbHNlIHsKICAgICAgICAgYnVmZmVycyA9IG1TaGFyZWRCdWZmZXItPnBvaW50ZXIoKTsKICAgICAgICAgaWYgKGJ1ZmZlcnMgPT0gTlVMTCkgewotICAgICAgICAgICAgQUxPR0UoIkNvdWxkIG5vdCBnZXQgYnVmZmVyIHBvaW50ZXIiKTsKKyAgICAgICAgICAgIEFMT0dFKCIlcyglZCk6IENvdWxkIG5vdCBnZXQgYnVmZmVyIHBvaW50ZXIiLCBfX2Z1bmNfXywgbUlkKTsKICAgICAgICAgICAgIHN0YXR1cyA9IE5PX0lOSVQ7CiAgICAgICAgICAgICBnb3RvIGV4aXQ7CiAgICAgICAgIH0KQEAgLTE2NDcsNyArMTY4MSw3IEBACiAgICAgICAgIHRpbWVvdXQudHZfbnNlYyA9IChsb25nKSAobXMgJSAxMDAwKSAqIDEwMDAwMDA7CiAgICAgICAgIHJlcXVlc3RlZCA9ICZ0aW1lb3V0OwogICAgIH0gZWxzZSB7Ci0gICAgICAgIEFMT0dFKCIlcyBpbnZhbGlkIHdhaXRDb3VudCAlZCIsIF9fZnVuY19fLCB3YWl0Q291bnQpOworICAgICAgICBBTE9HRSgiJXMoJWQpOiBpbnZhbGlkIHdhaXRDb3VudCAlZCIsIF9fZnVuY19fLCBtSWQsIHdhaXRDb3VudCk7CiAgICAgICAgIHJlcXVlc3RlZCA9IE5VTEw7CiAgICAgfQogICAgIHJldHVybiBvYnRhaW5CdWZmZXIoYXVkaW9CdWZmZXIsIHJlcXVlc3RlZCwgTlVMTCAvKmVsYXBzZWQqLywgbm9uQ29udGlnKTsKQEAgLTE3NTcsNyArMTc5MSw4IEBACiB7CiAgICAgaW50MzJfdCBmbGFncyA9IGFuZHJvaWRfYXRvbWljX2FuZCh+Q0JMS19ESVNBQkxFRCwgJm1DYmxrLT5tRmxhZ3MpOwogICAgIGlmICgobVN0YXRlID09IFNUQVRFX0FDVElWRSkgJiYgKGZsYWdzICYgQ0JMS19ESVNBQkxFRCkpIHsKLSAgICAgICAgQUxPR1coInJlbGVhc2VCdWZmZXIoKSB0cmFjayAlcCBkaXNhYmxlZCBkdWUgdG8gcHJldmlvdXMgdW5kZXJydW4sIHJlc3RhcnRpbmciLCB0aGlzKTsKKyAgICAgICAgQUxPR1coIiVzKCVkKTogcmVsZWFzZUJ1ZmZlcigpIHRyYWNrICVwIGRpc2FibGVkIGR1ZSB0byBwcmV2aW91cyB1bmRlcnJ1biwgcmVzdGFydGluZyIsCisgICAgICAgICAgICAgICAgX19mdW5jX18sIG1JZCwgdGhpcyk7CiAgICAgICAgIC8vIEZJWE1FIGlnbm9yaW5nIHN0YXR1cwogICAgICAgICBtQXVkaW9UcmFjay0+c3RhcnQoKTsKICAgICB9CkBAIC0xNzY3LDcgKzE4MDIsNyBAQAogCiBzc2l6ZV90IEF1ZGlvVHJhY2s6OndyaXRlKGNvbnN0IHZvaWQqIGJ1ZmZlciwgc2l6ZV90IHVzZXJTaXplLCBib29sIGJsb2NraW5nKQogewotICAgIGlmIChtVHJhbnNmZXIgIT0gVFJBTlNGRVJfU1lOQykgeworICAgIGlmIChtVHJhbnNmZXIgIT0gVFJBTlNGRVJfU1lOQyAmJiBtVHJhbnNmZXIgIT0gVFJBTlNGRVJfU1lOQ19OT1RJRl9DQUxMQkFDSykgewogICAgICAgICByZXR1cm4gSU5WQUxJRF9PUEVSQVRJT047CiAgICAgfQogCkBAIC0xNzg0LDcgKzE4MTksOCBAQAogICAgIGlmIChzc2l6ZV90KHVzZXJTaXplKSA8IDAgfHwgKGJ1ZmZlciA9PSBOVUxMICYmIHVzZXJTaXplICE9IDApKSB7CiAgICAgICAgIC8vIFNhbml0eS1jaGVjazogdXNlciBpcyBtb3N0LWxpa2VseSBwYXNzaW5nIGFuIGVycm9yIGNvZGUsIGFuZCBpdCB3b3VsZAogICAgICAgICAvLyBtYWtlIHRoZSByZXR1cm4gdmFsdWUgYW1iaWd1b3VzIChhY3R1YWxTaXplIHZzIGVycm9yKS4KLSAgICAgICAgQUxPR0UoIkF1ZGlvVHJhY2s6OndyaXRlKGJ1ZmZlcj0lcCwgc2l6ZT0lenUgKCV6ZCkiLCBidWZmZXIsIHVzZXJTaXplLCB1c2VyU2l6ZSk7CisgICAgICAgIEFMT0dFKCIlcyglZCk6IEF1ZGlvVHJhY2s6OndyaXRlKGJ1ZmZlcj0lcCwgc2l6ZT0lenUgKCV6ZCkiLAorICAgICAgICAgICAgICAgIF9fZnVuY19fLCBtSWQsIGJ1ZmZlciwgdXNlclNpemUsIHVzZXJTaXplKTsKICAgICAgICAgcmV0dXJuIEJBRF9WQUxVRTsKICAgICB9CiAKQEAgLTE4MTcsNyArMTg1MywxNyBAQAogCiAgICAgaWYgKHdyaXR0ZW4gPiAwKSB7CiAgICAgICAgIG1GcmFtZXNXcml0dGVuICs9IHdyaXR0ZW4gLyBtRnJhbWVTaXplOworCisgICAgICAgIGlmIChtVHJhbnNmZXIgPT0gVFJBTlNGRVJfU1lOQ19OT1RJRl9DQUxMQkFDSykgeworICAgICAgICAgICAgY29uc3Qgc3A8QXVkaW9UcmFja1RocmVhZD4gdCA9IG1BdWRpb1RyYWNrVGhyZWFkOworICAgICAgICAgICAgaWYgKHQgIT0gMCkgeworICAgICAgICAgICAgICAgIC8vIGNhdXNlcyB3YWtlIHVwIG9mIHRoZSBwbGF5YmFjayB0aHJlYWQsIHRoYXQgd2lsbCBjYWxsYmFjayB0aGUgY2xpZW50IGZvcgorICAgICAgICAgICAgICAgIC8vIG1vcmUgZGF0YSAod2l0aCBFVkVOVF9DQU5fV1JJVEVfTU9SRV9EQVRBKSBpbiBwcm9jZXNzQXVkaW9CdWZmZXIoKQorICAgICAgICAgICAgICAgIHQtPndha2UoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQogICAgIH0KKwogICAgIHJldHVybiB3cml0dGVuOwogfQogCkBAIC0xODQ2LDcgKzE4OTIsOCBAQAogICAgICAgICAgICAgcG9sbFVzIDw8PSAxOwogICAgICAgICB9IHdoaWxlICh0cnlDb3VudGVyLS0gPiAwKTsKICAgICAgICAgaWYgKHRyeUNvdW50ZXIgPCAwKSB7Ci0gICAgICAgICAgICBBTE9HRSgiZGlkIG5vdCByZWNlaXZlIGV4cGVjdGVkIHByaW9yaXR5IGJvb3N0IG9uIHRpbWUiKTsKKyAgICAgICAgICAgIEFMT0dFKCIlcyglZCk6IGRpZCBub3QgcmVjZWl2ZSBleHBlY3RlZCBwcmlvcml0eSBib29zdCBvbiB0aW1lIiwKKyAgICAgICAgICAgICAgICAgICAgX19mdW5jX18sIG1JZCk7CiAgICAgICAgIH0KICAgICAgICAgLy8gUnVuIGFnYWluIGltbWVkaWF0ZWx5CiAgICAgICAgIHJldHVybiAwOwpAQCAtMjA3MCw4ICsyMTE3LDggQEAKICAgICAgICAgaWYgKG5zIDwgMCkgbnMgPSAwOwogICAgIH0KIAotICAgIC8vIElmIG5vdCBzdXBwbHlpbmcgZGF0YSBieSBFVkVOVF9NT1JFX0RBVEEsIHRoZW4gd2UncmUgZG9uZQotICAgIGlmIChtVHJhbnNmZXIgIT0gVFJBTlNGRVJfQ0FMTEJBQ0spIHsKKyAgICAvLyBJZiBub3Qgc3VwcGx5aW5nIGRhdGEgYnkgRVZFTlRfTU9SRV9EQVRBIG9yIEVWRU5UX0NBTl9XUklURV9NT1JFX0RBVEEsIHRoZW4gd2UncmUgZG9uZQorICAgIGlmIChtVHJhbnNmZXIgIT0gVFJBTlNGRVJfQ0FMTEJBQ0sgJiYgbVRyYW5zZmVyICE9IFRSQU5TRkVSX1NZTkNfTk9USUZfQ0FMTEJBQ0spIHsKICAgICAgICAgcmV0dXJuIG5zOwogICAgIH0KIApAQCAtMjA4Nyw3ICsyMTM0LDggQEAKICAgICBpZiAobnMgIT0gTlNfV0hFTkVWRVIpIHsKICAgICAgICAgdGltZW91dC50dl9zZWMgPSBucyAvIDEwMDAwMDAwMDBMTDsKICAgICAgICAgdGltZW91dC50dl9uc2VjID0gbnMgJSAxMDAwMDAwMDAwTEw7Ci0gICAgICAgIEFMT0dWKCJ0aW1lb3V0ICVsZC4lMDNkIiwgdGltZW91dC50dl9zZWMsIChpbnQpIHRpbWVvdXQudHZfbnNlYyAvIDEwMDAwMDApOworICAgICAgICBBTE9HVigiJXMoJWQpOiB0aW1lb3V0ICVsZC4lMDNkIiwKKyAgICAgICAgICAgICAgICBfX2Z1bmNfXywgbUlkLCB0aW1lb3V0LnR2X3NlYywgKGludCkgdGltZW91dC50dl9uc2VjIC8gMTAwMDAwMCk7CiAgICAgICAgIHJlcXVlc3RlZCA9ICZ0aW1lb3V0OwogICAgIH0KIApAQCAtMjA5OSwxOCArMjE0NywyMCBAQAogICAgICAgICBzaXplX3Qgbm9uQ29udGlnOwogICAgICAgICBzdGF0dXNfdCBlcnIgPSBvYnRhaW5CdWZmZXIoJmF1ZGlvQnVmZmVyLCByZXF1ZXN0ZWQsIE5VTEwsICZub25Db250aWcpOwogICAgICAgICBMT0dfQUxXQVlTX0ZBVEFMX0lGKChlcnIgIT0gTk9fRVJST1IpICE9IChhdWRpb0J1ZmZlci5mcmFtZUNvdW50ID09IDApLAotICAgICAgICAgICAgICAgICJvYnRhaW5CdWZmZXIoKSBlcnI9JWQgZnJhbWVDb3VudD0lenUiLCBlcnIsIGF1ZGlvQnVmZmVyLmZyYW1lQ291bnQpOworICAgICAgICAgICAgICAgICIlcyglZCk6IG9idGFpbkJ1ZmZlcigpIGVycj0lZCBmcmFtZUNvdW50PSV6dSIsCisgICAgICAgICAgICAgICAgIF9fZnVuY19fLCBtSWQsIGVyciwgYXVkaW9CdWZmZXIuZnJhbWVDb3VudCk7CiAgICAgICAgIHJlcXVlc3RlZCA9ICZDbGllbnRQcm94eTo6a05vbkJsb2NraW5nOwogICAgICAgICBzaXplX3QgYXZhaWwgPSBhdWRpb0J1ZmZlci5mcmFtZUNvdW50ICsgbm9uQ29udGlnOwotICAgICAgICBBTE9HVigib2J0YWluQnVmZmVyKCV1KSByZXR1cm5lZCAlenUgPSAlenUgKyAlenUgZXJyICVkIiwKLSAgICAgICAgICAgICAgICBtUmVtYWluaW5nRnJhbWVzLCBhdmFpbCwgYXVkaW9CdWZmZXIuZnJhbWVDb3VudCwgbm9uQ29udGlnLCBlcnIpOworICAgICAgICBBTE9HVigiJXMoJWQpOiBvYnRhaW5CdWZmZXIoJXUpIHJldHVybmVkICV6dSA9ICV6dSArICV6dSBlcnIgJWQiLAorICAgICAgICAgICAgICAgIF9fZnVuY19fLCBtSWQsIG1SZW1haW5pbmdGcmFtZXMsIGF2YWlsLCBhdWRpb0J1ZmZlci5mcmFtZUNvdW50LCBub25Db250aWcsIGVycik7CiAgICAgICAgIGlmIChlcnIgIT0gTk9fRVJST1IpIHsKICAgICAgICAgICAgIGlmIChlcnIgPT0gVElNRURfT1VUIHx8IGVyciA9PSBXT1VMRF9CTE9DSyB8fCBlcnIgPT0gLUVJTlRSIHx8CiAgICAgICAgICAgICAgICAgICAgIChpc09mZmxvYWRlZCgpICYmIChlcnIgPT0gREVBRF9PQkpFQ1QpKSkgewogICAgICAgICAgICAgICAgIC8vIEZJWE1FIGJ1ZyAyNTE5NTc1OQogICAgICAgICAgICAgICAgIHJldHVybiAxMDAwMDAwOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgQUxPR0UoIkVycm9yICVkIG9idGFpbmluZyBhbiBhdWRpbyBidWZmZXIsIGdpdmluZyB1cC4iLCBlcnIpOworICAgICAgICAgICAgQUxPR0UoIiVzKCVkKTogRXJyb3IgJWQgb2J0YWluaW5nIGFuIGF1ZGlvIGJ1ZmZlciwgZ2l2aW5nIHVwLiIsCisgICAgICAgICAgICAgICAgICAgIF9fZnVuY19fLCBtSWQsIGVycik7CiAgICAgICAgICAgICByZXR1cm4gTlNfTkVWRVI7CiAgICAgICAgIH0KIApAQCAtMjEzMCwxNyArMjE4MCwzMSBAQAogICAgICAgICB9CiAKICAgICAgICAgc2l6ZV90IHJlcVNpemUgPSBhdWRpb0J1ZmZlci5zaXplOwotICAgICAgICBtQ2JmKEVWRU5UX01PUkVfREFUQSwgbVVzZXJEYXRhLCAmYXVkaW9CdWZmZXIpOworICAgICAgICBpZiAobVRyYW5zZmVyID09IFRSQU5TRkVSX1NZTkNfTk9USUZfQ0FMTEJBQ0spIHsKKyAgICAgICAgICAgIC8vIHdoZW4gbm90aWZ5aW5nIGNsaWVudCBpdCBjYW4gd3JpdGUgbW9yZSBkYXRhLCBwYXNzIHRoZSB0b3RhbCBzaXplIHRoYXQgY2FuIGJlCisgICAgICAgICAgICAvLyB3cml0dGVuIGluIHRoZSBuZXh0IHdyaXRlKCkgY2FsbCwgc2luY2UgaXQncyBub3QgcGFzc2VkIHRocm91Z2ggdGhlIGNhbGxiYWNrCisgICAgICAgICAgICBhdWRpb0J1ZmZlci5zaXplICs9IG5vbkNvbnRpZzsKKyAgICAgICAgfQorICAgICAgICBtQ2JmKG1UcmFuc2ZlciA9PSBUUkFOU0ZFUl9DQUxMQkFDSyA/IEVWRU5UX01PUkVfREFUQSA6IEVWRU5UX0NBTl9XUklURV9NT1JFX0RBVEEsCisgICAgICAgICAgICAgICAgbVVzZXJEYXRhLCAmYXVkaW9CdWZmZXIpOwogICAgICAgICBzaXplX3Qgd3JpdHRlblNpemUgPSBhdWRpb0J1ZmZlci5zaXplOwogCiAgICAgICAgIC8vIFNhbml0eSBjaGVjayBvbiByZXR1cm5lZCBzaXplCiAgICAgICAgIGlmIChzc2l6ZV90KHdyaXR0ZW5TaXplKSA8IDAgfHwgd3JpdHRlblNpemUgPiByZXFTaXplKSB7Ci0gICAgICAgICAgICBBTE9HRSgiRVZFTlRfTU9SRV9EQVRBIHJlcXVlc3RlZCAlenUgYnl0ZXMgYnV0IGNhbGxiYWNrIHJldHVybmVkICV6ZCBieXRlcyIsCi0gICAgICAgICAgICAgICAgICAgIHJlcVNpemUsIHNzaXplX3Qod3JpdHRlblNpemUpKTsKKyAgICAgICAgICAgIEFMT0dFKCIlcyglZCk6IEVWRU5UX01PUkVfREFUQSByZXF1ZXN0ZWQgJXp1IGJ5dGVzIGJ1dCBjYWxsYmFjayByZXR1cm5lZCAlemQgYnl0ZXMiLAorICAgICAgICAgICAgICAgICAgICBfX2Z1bmNfXywgbUlkLCByZXFTaXplLCBzc2l6ZV90KHdyaXR0ZW5TaXplKSk7CiAgICAgICAgICAgICByZXR1cm4gTlNfTkVWRVI7CiAgICAgICAgIH0KIAogICAgICAgICBpZiAod3JpdHRlblNpemUgPT0gMCkgeworICAgICAgICAgICAgaWYgKG1UcmFuc2ZlciA9PSBUUkFOU0ZFUl9TWU5DX05PVElGX0NBTExCQUNLKSB7CisgICAgICAgICAgICAgICAgLy8gVGhlIGNhbGxiYWNrIEVWRU5UX0NBTl9XUklURV9NT1JFX0RBVEEgd2FzIHByb2Nlc3NlZCBpbiB0aGUgSk5JIG9mCisgICAgICAgICAgICAgICAgLy8gYW5kcm9pZC5tZWRpYS5BdWRpb1RyYWNrLiBUaGUgSk5JIGlzIG5vdCB1c2luZyB0aGUgY2FsbGJhY2sgdG8gcHJvdmlkZSBkYXRhLAorICAgICAgICAgICAgICAgIC8vIGl0IG9ubHkgc2lnbmFscyB0byB0aGUgSmF2YSBjbGllbnQgdGhhdCBpdCBjYW4gcHJvdmlkZSBtb3JlIGRhdGEsIHdoaWNoCisgICAgICAgICAgICAgICAgLy8gdGhpcyB0cmFjayBpcyByZWFkIHRvIGFjY2VwdCBub3cuCisgICAgICAgICAgICAgICAgLy8gVGhlIHBsYXliYWNrIHRocmVhZCB3aWxsIGJlIGF3YWtlbiBhdCB0aGUgbmV4dCA6OndyaXRlKCkKKyAgICAgICAgICAgICAgICByZXR1cm4gTlNfV0hFTkVWRVI7CisgICAgICAgICAgICB9CiAgICAgICAgICAgICAvLyBUaGUgY2FsbGJhY2sgaXMgZG9uZSBmaWxsaW5nIGJ1ZmZlcnMKICAgICAgICAgICAgIC8vIEtlZXAgdGhpcyB0aHJlYWQgZ29pbmcgdG8gaGFuZGxlIHRpbWVkIGV2ZW50cyBhbmQKICAgICAgICAgICAgIC8vIHN0aWxsIHRyeSB0byBnZXQgbW9yZSBkYXRhIGluIGludGVydmFscyBvZiBXQUlUX1BFUklPRF9NUwpAQCAtMjIzMSw4ICsyMjk1LDggQEAKIAogc3RhdHVzX3QgQXVkaW9UcmFjazo6cmVzdG9yZVRyYWNrX2woY29uc3QgY2hhciAqZnJvbSkKIHsKLSAgICBBTE9HVygiZGVhZCBJQXVkaW9UcmFjaywgJXMsIGNyZWF0aW5nIGEgbmV3IG9uZSBmcm9tICVzKCkiLAotICAgICAgICAgIGlzT2ZmbG9hZGVkT3JEaXJlY3RfbCgpID8gIk9mZmxvYWRlZCBvciBEaXJlY3QiIDogIlBDTSIsIGZyb20pOworICAgIEFMT0dXKCIlcyglZCk6IGRlYWQgSUF1ZGlvVHJhY2ssICVzLCBjcmVhdGluZyBhIG5ldyBvbmUgZnJvbSAlcygpIiwKKyAgICAgICAgICAgIF9fZnVuY19fLCBtSWQsIGlzT2ZmbG9hZGVkT3JEaXJlY3RfbCgpID8gIk9mZmxvYWRlZCBvciBEaXJlY3QiIDogIlBDTSIsIGZyb20pOwogICAgICsrbVNlcXVlbmNlOwogCiAgICAgLy8gcmVmcmVzaCB0aGUgYXVkaW8gY29uZmlndXJhdGlvbiBjYWNoZSBpbiB0aGlzIHByb2Nlc3MgdG8gbWFrZSBzdXJlIHdlIGdldCBuZXcKQEAgLTIyNzUsMTAgKzIzMzksNyBAQAogICAgIC8vIElmIGEgbmV3IElBdWRpb1RyYWNrIGNhbm5vdCBiZSBjcmVhdGVkLCB0aGUgcHJldmlvdXMgKGRlYWQpIGluc3RhbmNlIHdpbGwgYmUgbGVmdCBpbnRhY3QuCiAgICAgc3RhdHVzX3QgcmVzdWx0ID0gY3JlYXRlVHJhY2tfbCgpOwogCi0gICAgaWYgKHJlc3VsdCAhPSBOT19FUlJPUikgewotICAgICAgICBBTE9HVygiJXMoKTogY3JlYXRlVHJhY2tfbCBmYWlsZWQsIGRvIG5vdCByZXRyeSIsIF9fZnVuY19fKTsKLSAgICAgICAgcmV0cmllcyA9IDA7Ci0gICAgfSBlbHNlIHsKKyAgICBpZiAocmVzdWx0ID09IE5PX0VSUk9SKSB7CiAgICAgICAgIC8vIHRha2UgdGhlIGZyYW1lcyB0aGF0IHdpbGwgYmUgbG9zdCBieSB0cmFjayByZWNyZWF0aW9uIGludG8gYWNjb3VudCBpbiBzYXZlZCBwb3NpdGlvbgogICAgICAgICAvLyBGb3Igc3RyZWFtaW5nIHRyYWNrcywgdGhpcyBpcyB0aGUgYW1vdW50IHdlIG9idGFpbmVkIGZyb20gdGhlIHVzZXIvY2xpZW50CiAgICAgICAgIC8vIChub3QgdGhlIG51bWJlciBhY3R1YWxseSBjb25zdW1lZCBhdCB0aGUgc2VydmVyIC0gdGhvc2UgYXJlIGFscmVhZHkgbG9zdCkuCkBAIC0yMjkzLDcgKzIzNTQsNyBAQAogICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICBtU3RhdGljUHJveHktPnNldEJ1ZmZlclBvc2l0aW9uKGJ1ZmZlclBvc2l0aW9uKTsKICAgICAgICAgICAgICAgICBpZiAoYnVmZmVyUG9zaXRpb24gPT0gbUZyYW1lQ291bnQpIHsKLSAgICAgICAgICAgICAgICAgICAgQUxPR0QoInJlc3RvcmluZyB0cmFjayBhdCBlbmQgb2Ygc3RhdGljIGJ1ZmZlciIpOworICAgICAgICAgICAgICAgICAgICBBTE9HRCgiJXMoJWQpOiByZXN0b3JpbmcgdHJhY2sgYXQgZW5kIG9mIHN0YXRpYyBidWZmZXIiLCBfX2Z1bmNfXywgbUlkKTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KQEAgLTIzMjMsMTQgKzIzODQsMTggQEAKICAgICAgICAgbUZyYW1lc1dyaXR0ZW5BdFJlc3RvcmUgPSBtRnJhbWVzV3JpdHRlblNlcnZlck9mZnNldDsKICAgICB9CiAgICAgaWYgKHJlc3VsdCAhPSBOT19FUlJPUikgewotICAgICAgICBBTE9HVygiJXMoKSBmYWlsZWQgc3RhdHVzICVkLCByZXRyaWVzICVkIiwgX19mdW5jX18sIHJlc3VsdCwgcmV0cmllcyk7CisgICAgICAgIEFMT0dXKCIlcyglZCk6IGZhaWxlZCBzdGF0dXMgJWQsIHJldHJpZXMgJWQiLCBfX2Z1bmNfXywgbUlkLCByZXN1bHQsIHJldHJpZXMpOwogICAgICAgICBpZiAoLS1yZXRyaWVzID4gMCkgeworICAgICAgICAgICAgLy8gbGVhdmUgdGltZSBmb3IgYW4gZXZlbnR1YWwgcmFjZSBjb25kaXRpb24gdG8gY2xlYXIgYmVmb3JlIHJldHJ5aW5nCisgICAgICAgICAgICB1c2xlZXAoNTAwMDAwKTsKICAgICAgICAgICAgIGdvdG8gcmV0cnk7CiAgICAgICAgIH0KLSAgICAgICAgbVN0YXRlID0gU1RBVEVfU1RPUFBFRDsKLSAgICAgICAgbVJlbGVhc2VkID0gMDsKKyAgICAgICAgLy8gaWYgbm8gcmV0cmllcyBsZWZ0LCBzZXQgaW52YWxpZCBiaXQgdG8gZm9yY2UgcmVzdG9yaW5nIGF0IG5leHQgb2NjYXNpb24KKyAgICAgICAgLy8gYW5kIGF2b2lkIGluY29uc2lzdGVudCBhY3RpdmUgc3RhdGUgb24gY2xpZW50IGFuZCBzZXJ2ZXIgc2lkZXMKKyAgICAgICAgaWYgKG1DYmxrICE9IG51bGxwdHIpIHsKKyAgICAgICAgICAgIGFuZHJvaWRfYXRvbWljX29yKENCTEtfSU5WQUxJRCwgJm1DYmxrLT5tRmxhZ3MpOworICAgICAgICB9CiAgICAgfQotCiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIApAQCAtMjM0OCw4ICsyNDEzLDggQEAKICAgICAvLyAgICAgIHVubGVzcyB0aGUgc2VydmVyIGhhcyBtb3JlIHRoYW4gMl4zMSBmcmFtZXMgaW4gaXRzIGJ1ZmZlciwKICAgICAvLyAgICAgIGluIHdoaWNoIGNhc2UgdGhlIHVzZSBvZiB1aW50MzJfdCBmb3IgdGhlc2UgY291bnRlcnMgaGFzIGJpZ2dlciBpc3N1ZXMuCiAgICAgQUxPR0VfSUYoZGVsdGEgPCAwLAotICAgICAgICAgICAgImRldGVjdGVkIGlsbGVnYWwgcmV0cm9ncmFkZSBtb3Rpb24gYnkgdGhlIHNlcnZlcjogbVNlcnZlciBhZHZhbmNlZCBieSAlZCIsCi0gICAgICAgICAgICBkZWx0YSk7CisgICAgICAgICAgICAiJXMoJWQpOiBkZXRlY3RlZCBpbGxlZ2FsIHJldHJvZ3JhZGUgbW90aW9uIGJ5IHRoZSBzZXJ2ZXI6IG1TZXJ2ZXIgYWR2YW5jZWQgYnkgJWQiLAorICAgICAgICAgICAgX19mdW5jX18sIG1JZCwgZGVsdGEpOwogICAgIG1TZXJ2ZXIgPSBuZXdTZXJ2ZXI7CiAgICAgaWYgKGRlbHRhID4gMCkgeyAvLyBhdm9pZCByZXRyb2dyYWRlCiAgICAgICAgIG1Qb3NpdGlvbiArPSBkZWx0YTsKQEAgLTIzNjksOSArMjQzNCwxMCBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzYW1wbGVSYXRlLCBzcGVlZCAvKiwgMCBtTm90aWZpY2F0aW9uc1BlckJ1ZmZlclJlcSovKTsKICAgICBjb25zdCBib29sIGFsbG93ZWQgPSBtRnJhbWVDb3VudCA+PSBtaW5GcmFtZUNvdW50OwogICAgIEFMT0dEX0lGKCFhbGxvd2VkLAotICAgICAgICAgICAgImlzU2FtcGxlUmF0ZVNwZWVkQWxsb3dlZF9sIGRlbmllZCAiCisgICAgICAgICAgICAiJXMoJWQpOiBkZW5pZWQgIgogICAgICAgICAgICAgIm1BZkxhdGVuY3k6JXUgIG1BZkZyYW1lQ291bnQ6JXp1ICBtQWZTYW1wbGVSYXRlOiV1ICBzYW1wbGVSYXRlOiV1ICBzcGVlZDolZiAiCiAgICAgICAgICAgICAibUZyYW1lQ291bnQ6JXp1IDwgbWluRnJhbWVDb3VudDolenUiLAorICAgICAgICAgICAgX19mdW5jX18sIG1JZCwKICAgICAgICAgICAgIG1BZkxhdGVuY3ksIG1BZkZyYW1lQ291bnQsIG1BZlNhbXBsZVJhdGUsIHNhbXBsZVJhdGUsIHNwZWVkLAogICAgICAgICAgICAgbUZyYW1lQ291bnQsIG1pbkZyYW1lQ291bnQpOwogICAgIHJldHVybiBhbGxvd2VkOwpAQCAtMjM4OSw3ICsyNDU1LDggQEAKICAgICBBdWRpb1BhcmFtZXRlciBwYXJhbSA9IEF1ZGlvUGFyYW1ldGVyKCk7CiAgICAgcGFyYW0uYWRkSW50KFN0cmluZzgoQXVkaW9QYXJhbWV0ZXI6OmtleVByZXNlbnRhdGlvbklkKSwgcHJlc2VudGF0aW9uSWQpOwogICAgIHBhcmFtLmFkZEludChTdHJpbmc4KEF1ZGlvUGFyYW1ldGVyOjprZXlQcm9ncmFtSWQpLCBwcm9ncmFtSWQpOwotICAgIEFMT0dWKCJQcmVzZW50YXRpb25JZC9Qcm9ncmFtSWRbJXNdIixwYXJhbS50b1N0cmluZygpLnN0cmluZygpKTsKKyAgICBBTE9HVigiJXMoJWQpOiBQcmVzZW50YXRpb25JZC9Qcm9ncmFtSWRbJXNdIiwKKyAgICAgICAgICAgIF9fZnVuY19fLCBtSWQsIHBhcmFtLnRvU3RyaW5nKCkuc3RyaW5nKCkpOwogCiAgICAgcmV0dXJuIG1BdWRpb1RyYWNrLT5zZXRQYXJhbWV0ZXJzKHBhcmFtLnRvU3RyaW5nKCkpOwogfQpAQCAtMjQxNiw3ICsyNDgzLDcgQEAKICAgICB9IGVsc2UgewogICAgICAgICAvLyB3YXJuIG9ubHkgaWYgbm90IGFuIGV4cGVjdGVkIHJlc3RvcmUgZmFpbHVyZS4KICAgICAgICAgQUxPR1dfSUYoISgoaXNPZmZsb2FkZWRPckRpcmVjdF9sKCkgfHwgbURvTm90UmVjb25uZWN0KSAmJiBzdGF0dXMgPT0gREVBRF9PQkpFQ1QpLAotICAgICAgICAgICAgICAgICJhcHBseVZvbHVtZVNoYXBlciBmYWlsZWQ6ICVkIiwgc3RhdHVzKTsKKyAgICAgICAgICAgICAgICAiJXMoJWQpOiBhcHBseVZvbHVtZVNoYXBlciBmYWlsZWQ6ICVkIiwgX19mdW5jX18sIG1JZCwgc3RhdHVzKTsKICAgICB9CiAgICAgcmV0dXJuIHN0YXR1czsKIH0KQEAgLTI0NTcsNyArMjUyNCw4IEBACiAgICAgICAgIHJldHVybiBJTlZBTElEX09QRVJBVElPTjsgLy8gbm90IHN1cHBvcnRlZAogICAgIH0KICAgICBzdGF0dXNfdCBzdGF0dXMgPSBtUHJveHktPmdldFRpbWVzdGFtcCh0aW1lc3RhbXApOwotICAgIExPR19BTFdBWVNfRkFUQUxfSUYoc3RhdHVzICE9IE9LLCAic3RhdHVzICVkIG5vdCBhbGxvd2VkIGZyb20gcHJveHkgZ2V0VGltZXN0YW1wIiwgc3RhdHVzKTsKKyAgICBMT0dfQUxXQVlTX0ZBVEFMX0lGKHN0YXR1cyAhPSBPSywgIiVzKCVkKTogc3RhdHVzICVkIG5vdCBhbGxvd2VkIGZyb20gcHJveHkgZ2V0VGltZXN0YW1wIiwKKyAgICAgICAgICAgIF9fZnVuY19fLCBtSWQsIHN0YXR1cyk7CiAgICAgYm9vbCBmb3VuZCA9IGZhbHNlOwogICAgIHRpbWVzdGFtcC0+bVBvc2l0aW9uW0V4dGVuZGVkVGltZXN0YW1wOjpMT0NBVElPTl9DTElFTlRdID0gbUZyYW1lc1dyaXR0ZW47CiAgICAgdGltZXN0YW1wLT5tVGltZU5zW0V4dGVuZGVkVGltZXN0YW1wOjpMT0NBVElPTl9DTElFTlRdID0gMDsKQEAgLTI1MDAsNyArMjU2OCw4IEBACiAgICAgICAgIH0KICAgICAgICAgYnJlYWs7IC8vIG9mZmxvYWRlZCB0cmFja3MgaGFuZGxlZCBiZWxvdwogICAgIGRlZmF1bHQ6Ci0gICAgICAgIExPR19BTFdBWVNfRkFUQUwoIkludmFsaWQgbVN0YXRlIGluIGdldFRpbWVzdGFtcCgpOiAlZCIsIG1TdGF0ZSk7CisgICAgICAgIExPR19BTFdBWVNfRkFUQUwoIiVzKCVkKTogSW52YWxpZCBtU3RhdGUgaW4gZ2V0VGltZXN0YW1wKCk6ICVkIiwKKyAgICAgICAgICAgICAgIF9fZnVuY19fLCBtSWQsIG1TdGF0ZSk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KIApAQCAtMjUzNCw3ICsyNjAzLDggQEAKICAgICAgICAgICAgICAgICAvLyBJbiB0aGlzIGNhc2Ugd2UgYWRqdXN0IHRoZSBwb3NpdGlvbiBmcm9tIHRoZSBwcmV2aW91cyBjb21wdXRlZCBsYXRlbmN5LgogICAgICAgICAgICAgICAgIGlmIChsb2NhdGlvbiA9PSBFeHRlbmRlZFRpbWVzdGFtcDo6TE9DQVRJT05fU0VSVkVSKSB7CiAgICAgICAgICAgICAgICAgICAgIEFMT0dXX0lGKG1QcmV2aW91c0xvY2F0aW9uID09IEV4dGVuZGVkVGltZXN0YW1wOjpMT0NBVElPTl9LRVJORUwsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgImdldFRpbWVzdGFtcCgpIGxvY2F0aW9uIG1vdmVkIGZyb20ga2VybmVsIHRvIHNlcnZlciIpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICIlcyglZCk6IGxvY2F0aW9uIG1vdmVkIGZyb20ga2VybmVsIHRvIHNlcnZlciIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19mdW5jX18sIG1JZCk7CiAgICAgICAgICAgICAgICAgICAgIC8vIGNoZWNrIHRoYXQgdGhlIGxhc3Qga2VybmVsIE9LIHRpbWUgaW5mbyBleGlzdHMgYW5kIHRoZSBwb3NpdGlvbnMKICAgICAgICAgICAgICAgICAgICAgLy8gYXJlIHZhbGlkIChpZiB0aGV5IHByZWRhdGUgdGhlIGN1cnJlbnQgdHJhY2ssIHRoZSBwb3NpdGlvbnMgbWF5CiAgICAgICAgICAgICAgICAgICAgIC8vIGJlIHplcm8gb3IgbmVnYXRpdmUpLgpAQCAtMjU0OSw4ICsyNjE5LDggQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGV0cy5tUG9zaXRpb25bRXh0ZW5kZWRUaW1lc3RhbXA6OkxPQ0FUSU9OX1NFUlZFUl9MQVNUS0VSTkVMT0tdCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSBldHMubVBvc2l0aW9uW0V4dGVuZGVkVGltZXN0YW1wOjpMT0NBVElPTl9LRVJORUxfTEFTVEtFUk5FTE9LXSk7Ci0gICAgICAgICAgICAgICAgICAgIEFMT0dWKCJmcmFtZSBhZGp1c3RtZW50OiVsbGQgIHRpbWVzdGFtcDolcyIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxvbmcgbG9uZylmcmFtZXMsIGV0cy50b1N0cmluZygpLmNfc3RyKCkpOworICAgICAgICAgICAgICAgICAgICBBTE9HVigiJXMoJWQpOiBmcmFtZSBhZGp1c3RtZW50OiVsbGQgIHRpbWVzdGFtcDolcyIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19mdW5jX18sIG1JZCwgKGxvbmcgbG9uZylmcmFtZXMsIGV0cy50b1N0cmluZygpLmNfc3RyKCkpOwogICAgICAgICAgICAgICAgICAgICBpZiAoZnJhbWVzID49IGV0cy5tUG9zaXRpb25bbG9jYXRpb25dKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICB0aW1lc3RhbXAubVBvc2l0aW9uID0gMDsKICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKQEAgLTI1NTgsNyArMjYyOCw4IEBACiAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGxvY2F0aW9uID09IEV4dGVuZGVkVGltZXN0YW1wOjpMT0NBVElPTl9LRVJORUwpIHsKICAgICAgICAgICAgICAgICAgICAgQUxPR1ZfSUYobVByZXZpb3VzTG9jYXRpb24gPT0gRXh0ZW5kZWRUaW1lc3RhbXA6OkxPQ0FUSU9OX1NFUlZFUiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZ2V0VGltZXN0YW1wKCkgbG9jYXRpb24gbW92ZWQgZnJvbSBzZXJ2ZXIgdG8ga2VybmVsIik7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiVzKCVkKTogbG9jYXRpb24gbW92ZWQgZnJvbSBzZXJ2ZXIgdG8ga2VybmVsIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2Z1bmNfXywgbUlkKTsKICAgICAgICAgICAgICAgICB9CiAKICAgICAgICAgICAgICAgICAvLyBXZSB1cGRhdGUgdGhlIHRpbWVzdGFtcCB0aW1lIGV2ZW4gd2hlbiBwYXVzZWQuCkBAIC0yNTgyLDcgKzI2NTMsNyBAQAogICAgICAgICAgICAgICAgIG1QcmV2aW91c0xvY2F0aW9uID0gbG9jYXRpb247CiAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgIC8vIHJpZ2h0IGFmdGVyIEF1ZGlvVHJhY2sgaXMgc3RhcnRlZCwgb25lIG1heSBub3QgZmluZCBhIHRpbWVzdGFtcAotICAgICAgICAgICAgICAgIEFMT0dWKCJnZXRCZXN0VGltZXN0YW1wIGRpZCBub3QgZmluZCB0aW1lc3RhbXAiKTsKKyAgICAgICAgICAgICAgICBBTE9HVigiJXMoJWQpOiBnZXRCZXN0VGltZXN0YW1wIGRpZCBub3QgZmluZCB0aW1lc3RhbXAiLCBfX2Z1bmNfXywgbUlkKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgICAgICBpZiAoc3RhdHVzID09IElOVkFMSURfT1BFUkFUSU9OKSB7CkBAIC0yNTkyLDcgKzI2NjMsOCBAQAogICAgICAgICAgICAgLy8gdG8gYmUgemVybyB3ZSBjb252ZXJ0IHRoaXMgdG8gV09VTERfQkxPQ0sgKHdpdGggdGhlIGltcGxpY2l0IG1lYW5pbmcgb2YKICAgICAgICAgICAgIC8vICJ6ZXJvIiBmb3IgTnVQbGF5ZXIpLiAgV2UgZG9uJ3QgY29udmVydCBmb3IgdHJhY2sgcmVzdG9yYXRpb24gYXMgcG9zaXRpb24KICAgICAgICAgICAgIC8vIGRvZXMgbm90IHJlc2V0LgotICAgICAgICAgICAgQUxPR1YoInRpbWVzdGFtcCBzZXJ2ZXIgb2Zmc2V0OiVsbGQgcmVzdG9yZSBmcmFtZXM6JWxsZCIsCisgICAgICAgICAgICBBTE9HVigiJXMoJWQpOiB0aW1lc3RhbXAgc2VydmVyIG9mZnNldDolbGxkIHJlc3RvcmUgZnJhbWVzOiVsbGQiLAorICAgICAgICAgICAgICAgICAgICBfX2Z1bmNfXywgbUlkLAogICAgICAgICAgICAgICAgICAgICAobG9uZyBsb25nKW1GcmFtZXNXcml0dGVuU2VydmVyT2Zmc2V0LCAobG9uZyBsb25nKW1GcmFtZXNXcml0dGVuQXRSZXN0b3JlKTsKICAgICAgICAgICAgIGlmIChtRnJhbWVzV3JpdHRlblNlcnZlck9mZnNldCAhPSBtRnJhbWVzV3JpdHRlbkF0UmVzdG9yZSkgewogICAgICAgICAgICAgICAgIHN0YXR1cyA9IFdPVUxEX0JMT0NLOwpAQCAtMjYwMCw3ICsyNjcyLDcgQEAKICAgICAgICAgfQogICAgIH0KICAgICBpZiAoc3RhdHVzICE9IE5PX0VSUk9SKSB7Ci0gICAgICAgIEFMT0dWX0lGKHN0YXR1cyAhPSBXT1VMRF9CTE9DSywgImdldFRpbWVzdGFtcCBlcnJvcjolI3giLCBzdGF0dXMpOworICAgICAgICBBTE9HVl9JRihzdGF0dXMgIT0gV09VTERfQkxPQ0ssICIlcyglZCk6IGdldFRpbWVzdGFtcCBlcnJvcjolI3giLCBfX2Z1bmNfXywgbUlkLCBzdGF0dXMpOwogICAgICAgICByZXR1cm4gc3RhdHVzOwogICAgIH0KICAgICBpZiAoaXNPZmZsb2FkZWRPckRpcmVjdF9sKCkpIHsKQEAgLTI2MzksOCArMjcxMSw5IEBACiAgICAgICAgICAgICAgICAgICAgIC8vIHNpbmNlIHRoZSBzdGFydCB0aW1lLiAgSWYgZ3JlYXRlciwgdGhlbiB0aGF0IG1lYW5zIHdlIG1heSBoYXZlIGZhaWxlZAogICAgICAgICAgICAgICAgICAgICAvLyB0byBjb21wbGV0ZWx5IGZsdXNoIG9yIHN0b3AgdGhlIHByZXZpb3VzIHBsYXlpbmcgdHJhY2suCiAgICAgICAgICAgICAgICAgICAgIEFMT0dXX0lGKCFtVGltZXN0YW1wU3RhcnR1cEdsaXRjaFJlcG9ydGVkLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICJnZXRUaW1lc3RhbXAgc3RhcnR1cCBnbGl0Y2ggZGV0ZWN0ZWQiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiVzKCVkKTogc3RhcnR1cCBnbGl0Y2ggZGV0ZWN0ZWQiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiBkZWx0YVRpbWVVcyglbGxkKSBkZWx0YVBvc2l0aW9uVXMoJWxsZCkgdHNtUG9zaXRpb24oJXUpIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2Z1bmNfXywgbUlkLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsb25nIGxvbmcpZGVsdGFUaW1lVXMsIChsb25nIGxvbmcpZGVsdGFQb3NpdGlvbkJ5VXMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGltZXN0YW1wLm1Qb3NpdGlvbik7CiAgICAgICAgICAgICAgICAgICAgIG1UaW1lc3RhbXBTdGFydHVwR2xpdGNoUmVwb3J0ZWQgPSB0cnVlOwpAQCAtMjcwOCw4ICsyNzgxLDkgQEAKICAgICAgICAgICAgIGNvbnN0IGludDY0X3QgbGFnTnMgPSBpbnQ2NF90KG1BZkxhdGVuY3kgKiAxMDAwMDAwTEwpOwogICAgICAgICAgICAgY29uc3QgaW50NjRfdCBsaW1pdE5zID0gbVN0YXJ0TnMgLSBsYWdOczsKICAgICAgICAgICAgIGlmIChjdXJyZW50VGltZU5hbm9zIDwgbGltaXROcykgewotICAgICAgICAgICAgICAgIEFMT0dEKCJjb3JyZWN0aW5nIHRpbWVzdGFtcCB0aW1lIGZvciBwYXVzZSwgIgorICAgICAgICAgICAgICAgIEFMT0dEKCIlcyglZCk6IGNvcnJlY3RpbmcgdGltZXN0YW1wIHRpbWUgZm9yIHBhdXNlLCAiCiAgICAgICAgICAgICAgICAgICAgICAgICAiY3VycmVudFRpbWVOYW5vczogJWxsZCA8IGxpbWl0TnM6ICVsbGQgPCBtU3RhcnROczogJWxsZCIsCisgICAgICAgICAgICAgICAgICAgICAgICBfX2Z1bmNfXywgbUlkLAogICAgICAgICAgICAgICAgICAgICAgICAgKGxvbmcgbG9uZyljdXJyZW50VGltZU5hbm9zLCAobG9uZyBsb25nKWxpbWl0TnMsIChsb25nIGxvbmcpbVN0YXJ0TnMpOwogICAgICAgICAgICAgICAgIHRpbWVzdGFtcC5tVGltZSA9IGNvbnZlcnROc1RvVGltZXNwZWMobGltaXROcyk7CiAgICAgICAgICAgICAgICAgY3VycmVudFRpbWVOYW5vcyA9IGxpbWl0TnM7CkBAIC0yNzE3LDcgKzI3OTEsOCBAQAogCiAgICAgICAgICAgICAvLyByZXRyb2dyYWRlIGNoZWNrCiAgICAgICAgICAgICBpZiAoY3VycmVudFRpbWVOYW5vcyA8IHByZXZpb3VzVGltZU5hbm9zKSB7Ci0gICAgICAgICAgICAgICAgQUxPR1coInJldHJvZ3JhZGUgdGltZXN0YW1wIHRpbWUgY29ycmVjdGVkLCAlbGxkIDwgJWxsZCIsCisgICAgICAgICAgICAgICAgQUxPR1coIiVzKCVkKTogcmV0cm9ncmFkZSB0aW1lc3RhbXAgdGltZSBjb3JyZWN0ZWQsICVsbGQgPCAlbGxkIiwKKyAgICAgICAgICAgICAgICAgICAgICAgIF9fZnVuY19fLCBtSWQsCiAgICAgICAgICAgICAgICAgICAgICAgICAobG9uZyBsb25nKWN1cnJlbnRUaW1lTmFub3MsIChsb25nIGxvbmcpcHJldmlvdXNUaW1lTmFub3MpOwogICAgICAgICAgICAgICAgIHRpbWVzdGFtcC5tVGltZSA9IG1QcmV2aW91c1RpbWVzdGFtcC5tVGltZTsKICAgICAgICAgICAgICAgICAvLyBjdXJyZW50VGltZU5hbm9zIG5vdCB1c2VkIGJlbG93LgpAQCAtMjczMCw3ICsyODA1LDggQEAKICAgICAgICAgICAgIGlmIChkZWx0YVBvc2l0aW9uIDwgMCkgewogICAgICAgICAgICAgICAgIC8vIE9ubHkgcmVwb3J0IG9uY2UgcGVyIHBvc2l0aW9uIGluc3RlYWQgb2Ygc3BhbW1pbmcgdGhlIGxvZy4KICAgICAgICAgICAgICAgICBpZiAoIW1SZXRyb2dyYWRlTW90aW9uUmVwb3J0ZWQpIHsKLSAgICAgICAgICAgICAgICAgICAgQUxPR1coInJldHJvZ3JhZGUgdGltZXN0YW1wIHBvc2l0aW9uIGNvcnJlY3RlZCwgJWQgPSAldSAtICV1IiwKKyAgICAgICAgICAgICAgICAgICAgQUxPR1coIiVzKCVkKTogcmV0cm9ncmFkZSB0aW1lc3RhbXAgcG9zaXRpb24gY29ycmVjdGVkLCAlZCA9ICV1IC0gJXUiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fZnVuY19fLCBtSWQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVsdGFQb3NpdGlvbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aW1lc3RhbXAubVBvc2l0aW9uLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1QcmV2aW91c1RpbWVzdGFtcC5tUG9zaXRpb24pOwpAQCAtMjc1MCw3ICsyODI2LDggQEAKICAgICAgICAgICAgIGlmIChkZWx0YVRpbWUgIT0gMCkgewogICAgICAgICAgICAgICAgIGNvbnN0IGludDY0X3QgY29tcHV0ZWRTYW1wbGVSYXRlID0KICAgICAgICAgICAgICAgICAgICAgICAgIGRlbHRhUG9zaXRpb24gKiAobG9uZyBsb25nKU5BTk9TX1BFUl9TRUNPTkQgLyBkZWx0YVRpbWU7Ci0gICAgICAgICAgICAgICAgQUxPR0QoImNvbXB1dGVkU2FtcGxlUmF0ZToldSAgc2FtcGxlUmF0ZToldSIsCisgICAgICAgICAgICAgICAgQUxPR0QoIiVzKCVkKTogY29tcHV0ZWRTYW1wbGVSYXRlOiV1ICBzYW1wbGVSYXRlOiV1IiwKKyAgICAgICAgICAgICAgICAgICAgICAgIF9fZnVuY19fLCBtSWQsCiAgICAgICAgICAgICAgICAgICAgICAgICAodW5zaWduZWQpY29tcHV0ZWRTYW1wbGVSYXRlLCBtU2FtcGxlUmF0ZSk7CiAgICAgICAgICAgICB9CiAjZW5kaWYKQEAgLTI3OTYsOCArMjg3Myw4IEBACiAgICAgU3RyaW5nOCByZXN1bHQ7CiAKICAgICByZXN1bHQuYXBwZW5kKCIgQXVkaW9UcmFjazo6ZHVtcFxuIik7Ci0gICAgcmVzdWx0LmFwcGVuZEZvcm1hdCgiICBzdGF0dXMoJWQpLCBzdGF0ZSglZCksIHNlc3Npb24gSWQoJWQpLCBmbGFncyglI3gpXG4iLAotICAgICAgICAgICAgICAgICAgICAgICAgbVN0YXR1cywgbVN0YXRlLCBtU2Vzc2lvbklkLCBtRmxhZ3MpOworICAgIHJlc3VsdC5hcHBlbmRGb3JtYXQoIiAgaWQoJWQpIHN0YXR1cyglZCksIHN0YXRlKCVkKSwgc2Vzc2lvbiBJZCglZCksIGZsYWdzKCUjeClcbiIsCisgICAgICAgICAgICAgICAgICAgICAgICBtSWQsIG1TdGF0dXMsIG1TdGF0ZSwgbVNlc3Npb25JZCwgbUZsYWdzKTsKICAgICByZXN1bHQuYXBwZW5kRm9ybWF0KCIgIHN0cmVhbSB0eXBlKCVkKSwgbGVmdCAtIHJpZ2h0IHZvbHVtZSglZiwgJWYpXG4iLAogICAgICAgICAgICAgICAgICAgICAgICAgKG1TdHJlYW1UeXBlID09IEFVRElPX1NUUkVBTV9ERUZBVUxUKSA/CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF1ZGlvX2F0dHJpYnV0ZXNfdG9fc3RyZWFtX3R5cGUoJm1BdHRyaWJ1dGVzKSA6IG1TdHJlYW1UeXBlLApAQCAtMjgzOSwxOCArMjkxNiwxOCBAQAogc3RhdHVzX3QgQXVkaW9UcmFjazo6YWRkQXVkaW9EZXZpY2VDYWxsYmFjayhjb25zdCBzcDxBdWRpb1N5c3RlbTo6QXVkaW9EZXZpY2VDYWxsYmFjaz4mIGNhbGxiYWNrKQogewogICAgIGlmIChjYWxsYmFjayA9PSAwKSB7Ci0gICAgICAgIEFMT0dXKCIlcyBhZGRpbmcgTlVMTCBjYWxsYmFjayEiLCBfX0ZVTkNUSU9OX18pOworICAgICAgICBBTE9HVygiJXMoJWQpOiBhZGRpbmcgTlVMTCBjYWxsYmFjayEiLCBfX2Z1bmNfXywgbUlkKTsKICAgICAgICAgcmV0dXJuIEJBRF9WQUxVRTsKICAgICB9CiAgICAgQXV0b011dGV4IGxvY2sobUxvY2spOwogICAgIGlmIChtRGV2aWNlQ2FsbGJhY2sudW5zYWZlX2dldCgpID09IGNhbGxiYWNrLmdldCgpKSB7Ci0gICAgICAgIEFMT0dXKCIlcyBhZGRpbmcgc2FtZSBjYWxsYmFjayEiLCBfX0ZVTkNUSU9OX18pOworICAgICAgICBBTE9HVygiJXMoJWQpOiBhZGRpbmcgc2FtZSBjYWxsYmFjayEiLCBfX2Z1bmNfXywgbUlkKTsKICAgICAgICAgcmV0dXJuIElOVkFMSURfT1BFUkFUSU9OOwogICAgIH0KICAgICBzdGF0dXNfdCBzdGF0dXMgPSBOT19FUlJPUjsKICAgICBpZiAobU91dHB1dCAhPSBBVURJT19JT19IQU5ETEVfTk9ORSkgewogICAgICAgICBpZiAobURldmljZUNhbGxiYWNrICE9IDApIHsKLSAgICAgICAgICAgIEFMT0dXKCIlcyBjYWxsYmFjayBhbHJlYWR5IHByZXNlbnQhIiwgX19GVU5DVElPTl9fKTsKKyAgICAgICAgICAgIEFMT0dXKCIlcyglZCk6IGNhbGxiYWNrIGFscmVhZHkgcHJlc2VudCEiLCBfX2Z1bmNfXywgbUlkKTsKICAgICAgICAgICAgIEF1ZGlvU3lzdGVtOjpyZW1vdmVBdWRpb0RldmljZUNhbGxiYWNrKHRoaXMsIG1PdXRwdXQpOwogICAgICAgICB9CiAgICAgICAgIHN0YXR1cyA9IEF1ZGlvU3lzdGVtOjphZGRBdWRpb0RldmljZUNhbGxiYWNrKHRoaXMsIG1PdXRwdXQpOwpAQCAtMjg2MywxMiArMjk0MCwxMiBAQAogICAgICAgICBjb25zdCBzcDxBdWRpb1N5c3RlbTo6QXVkaW9EZXZpY2VDYWxsYmFjaz4mIGNhbGxiYWNrKQogewogICAgIGlmIChjYWxsYmFjayA9PSAwKSB7Ci0gICAgICAgIEFMT0dXKCIlcyByZW1vdmluZyBOVUxMIGNhbGxiYWNrISIsIF9fRlVOQ1RJT05fXyk7CisgICAgICAgIEFMT0dXKCIlcyglZCk6IHJlbW92aW5nIE5VTEwgY2FsbGJhY2shIiwgX19mdW5jX18sIG1JZCk7CiAgICAgICAgIHJldHVybiBCQURfVkFMVUU7CiAgICAgfQogICAgIEF1dG9NdXRleCBsb2NrKG1Mb2NrKTsKICAgICBpZiAobURldmljZUNhbGxiYWNrLnVuc2FmZV9nZXQoKSAhPSBjYWxsYmFjay5nZXQoKSkgewotICAgICAgICBBTE9HVygiJXMgcmVtb3ZpbmcgZGlmZmVyZW50IGNhbGxiYWNrISIsIF9fRlVOQ1RJT05fXyk7CisgICAgICAgIEFMT0dXKCIlcyglZCk6IHJlbW92aW5nIGRpZmZlcmVudCBjYWxsYmFjayEiLCBfX2Z1bmNfXywgbUlkKTsKICAgICAgICAgcmV0dXJuIElOVkFMSURfT1BFUkFUSU9OOwogICAgIH0KICAgICBtRGV2aWNlQ2FsbGJhY2suY2xlYXIoKTsKQEAgLTI5NzQsNyArMzA1MSw3IEBACiAgICAgY2FzZSBTVEFURV9GTFVTSEVEOgogICAgICAgICByZXR1cm4gZmFsc2U7ICAvLyB3ZSdyZSBub3QgYWN0aXZlCiAgICAgZGVmYXVsdDoKLSAgICAgICAgTE9HX0FMV0FZU19GQVRBTCgiSW52YWxpZCBtU3RhdGUgaW4gaGFzU3RhcnRlZCgpOiAlZCIsIG1TdGF0ZSk7CisgICAgICAgIExPR19BTFdBWVNfRkFUQUwoIiVzKCVkKTogSW52YWxpZCBtU3RhdGUgaW4gaGFzU3RhcnRlZCgpOiAlZCIsIF9fZnVuY19fLCBtSWQsIG1TdGF0ZSk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KIApAQCAtMjk5MCw3ICszMDY3LDggQEAKICAgICAgICAgfSBlbHNlIGlmIChzdGF0dXMgPT0gT0spIHsKICAgICAgICAgICAgIHdhaXQgPSAodHMubVBvc2l0aW9uID09IDAgfHwgdHMubVBvc2l0aW9uID09IG1TdGFydFRzLm1Qb3NpdGlvbik7CiAgICAgICAgIH0KLSAgICAgICAgQUxPR1YoImhhc1N0YXJ0ZWQgd2FpdDolZCAgdHM6JXUgIHN0YXJ0IHBvc2l0aW9uOiVsbGQiLAorICAgICAgICBBTE9HVigiJXMoJWQpOiBoYXNTdGFydGVkIHdhaXQ6JWQgIHRzOiV1ICBzdGFydCBwb3NpdGlvbjolbGxkIiwKKyAgICAgICAgICAgICAgICBfX2Z1bmNfXywgbUlkLAogICAgICAgICAgICAgICAgIChpbnQpd2FpdCwKICAgICAgICAgICAgICAgICB0cy5tUG9zaXRpb24sCiAgICAgICAgICAgICAgICAgKGxvbmcgbG9uZyltU3RhcnRUcy5tUG9zaXRpb24pOwpAQCAtMzAxMSw3ICszMDg5LDggQEAKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0KICAgICAgICAgfQotICAgICAgICBBTE9HVigiaGFzU3RhcnRlZCB3YWl0OiVkICBldHM6JWxsZCAgc3RhcnQgcG9zaXRpb246JWxsZCIsCisgICAgICAgIEFMT0dWKCIlcyglZCk6IGhhc1N0YXJ0ZWQgd2FpdDolZCAgZXRzOiVsbGQgIHN0YXJ0IHBvc2l0aW9uOiVsbGQiLAorICAgICAgICAgICAgICAgIF9fZnVuY19fLCBtSWQsCiAgICAgICAgICAgICAgICAgKGludCl3YWl0LAogICAgICAgICAgICAgICAgIChsb25nIGxvbmcpZXRzLm1Qb3NpdGlvbltsb2NhdGlvbl0sCiAgICAgICAgICAgICAgICAgKGxvbmcgbG9uZyltU3RhcnRFdHMubVBvc2l0aW9uW2xvY2F0aW9uXSk7CkBAIC0zMDg2LDcgKzMxNjUsOCBAQAogICAgICAgICBucyA9IElOVDY0X01BWDsKICAgICAgICAgRkFMTFRIUk9VR0hfSU5URU5ERUQ7CiAgICAgZGVmYXVsdDoKLSAgICAgICAgTE9HX0FMV0FZU19GQVRBTF9JRihucyA8IDAsICJwcm9jZXNzQXVkaW9CdWZmZXIoKSByZXR1cm5lZCAlIiBQUklkNjQsIG5zKTsKKyAgICAgICAgTE9HX0FMV0FZU19GQVRBTF9JRihucyA8IDAsICIlcyglZCk6IHByb2Nlc3NBdWRpb0J1ZmZlcigpIHJldHVybmVkICVsbGQiLAorICAgICAgICAgICAgICAgIF9fZnVuY19fLCBtUmVjZWl2ZXIubUlkLCAobG9uZyBsb25nKW5zKTsKICAgICAgICAgcGF1c2VJbnRlcm5hbChucyk7CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KZGlmZiAtLWdpdCBhL21lZGlhL2xpYmF1ZGlvY2xpZW50L0F1ZGlvVHJhY2tTaGFyZWQuY3BwIGIvbWVkaWEvbGliYXVkaW9jbGllbnQvQXVkaW9UcmFja1NoYXJlZC5jcHAKaW5kZXggMDFmNDAwZC4uYzk5N2NmYSAxMDA2NDQKLS0tIGEvbWVkaWEvbGliYXVkaW9jbGllbnQvQXVkaW9UcmFja1NoYXJlZC5jcHAKKysrIGIvbWVkaWEvbGliYXVkaW9jbGllbnQvQXVkaW9UcmFja1NoYXJlZC5jcHAKQEAgLTI2LDYgKzI2LDI0IEBACiAKIG5hbWVzcGFjZSBhbmRyb2lkIHsKIAorLy8gVE9ETzogY29uc2lkZXIgcHVsbGluZyB0aGlzIGludG8gYSBzaGFyZWQgaGVhZGVyLgorLy8gc2FmZV9zdWJfb3ZlcmZsb3cgaXMgdXNlZCBlbnN1cmUgdGhhdCBzdWJ0cmFjdGlvbiBvY2N1cnMgaW4gdGhlIHNhbWUgbmF0aXZlIHR5cGUKKy8vIHdpdGggcHJvcGVyIDIncyBjb21wbGVtZW50IG92ZXJmbG93LiAgV2l0aG91dCBjYWxsaW5nIHRoaXMgZnVuY3Rpb24sIGl0IGlzIHBvc3NpYmxlLAorLy8gZm9yIGV4YW1wbGUsIHRoYXQgb3B0aW1pemluZyBjb21waWxlcnMgbWF5IGVsZWN0IHRvIHRyZWF0IDMyIGJpdCBzdWJ0cmFjdGlvbgorLy8gYXMgNjQgYml0IHN1YnRyYWN0aW9uIHdoZW4gc3RvcmluZyBpbnRvIGEgNjQgYml0IGRlc3RpbmF0aW9uIGFzIGludGVnZXIgb3ZlcmZsb3cgaXMKKy8vIHRlY2huaWNhbGx5IHVuZGVmaW5lZC4KK3RlbXBsYXRlPHR5cGVuYW1lIFQsCisgICAgICAgICB0eXBlbmFtZSBVLAorICAgICAgICAgdHlwZW5hbWUgPSBzdGQ6OmVuYWJsZV9pZl90PHN0ZDo6aXNfc2FtZTxzdGQ6OmRlY2F5X3Q8VD4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGQ6OmRlY2F5X3Q8VT4+e30+PgorICAgICAgICAgLy8gZW5zdXJlIGFyZ3VtZW50cyBhcmUgc2FtZSB0eXBlIChpZ25vcmluZyB2b2xhdGlsZSwgd2hpY2ggaXMgdXNlZCBpbiBjYmxrIHZhcmlhYmxlcykuCithdXRvIHNhZmVfc3ViX292ZXJmbG93KGNvbnN0IFQmIGEsIGNvbnN0IFUmIGIpIHsKKyAgICBzdGQ6OmRlY2F5X3Q8VD4gcmVzdWx0OworICAgICh2b2lkKV9fYnVpbHRpbl9zdWJfb3ZlcmZsb3coYSwgYiwgJnJlc3VsdCk7CisgICAgLy8gbm90ZSBpZiBfX2J1aWx0aW5fc3ViX292ZXJmbG93IHJldHVybnMgdHJ1ZSwgYW4gb3ZlcmZsb3cgb2NjdXJyZWQuCisgICAgcmV0dXJuIHJlc3VsdDsKK30KKwogLy8gdXNlZCB0byBjbGFtcCBhIHZhbHVlIHRvIHNpemVfdC4gIFRPRE86IG1vdmUgdG8gYW5vdGhlciBmaWxlLgogdGVtcGxhdGUgPHR5cGVuYW1lIFQ+CiBzaXplX3QgY2xhbXBUb1NpemUoVCB4KSB7CkBAIC0xODYsNyArMjA0LDcgQEAKICAgICAgICAgICAgIGZyb250ID0gY2Jsay0+dS5tU3RyZWFtaW5nLm1Gcm9udDsKICAgICAgICAgfQogICAgICAgICAvLyB3cml0ZSB0byByZWFyLCByZWFkIGZyb20gZnJvbnQKLSAgICAgICAgc3NpemVfdCBmaWxsZWQgPSByZWFyIC0gZnJvbnQ7CisgICAgICAgIHNzaXplX3QgZmlsbGVkID0gc2FmZV9zdWJfb3ZlcmZsb3cocmVhciwgZnJvbnQpOwogICAgICAgICAvLyBwaXBlIHNob3VsZCBub3QgYmUgb3ZlcmZ1bGwKICAgICAgICAgaWYgKCEoMCA8PSBmaWxsZWQgJiYgKHNpemVfdCkgZmlsbGVkIDw9IG1GcmFtZUNvdW50KSkgewogICAgICAgICAgICAgaWYgKG1Jc091dCkgewpAQCAtNjg0LDcgKzcwMiw3IEBACiAgICAgICAgIGNvbnN0IHNpemVfdCBvdmVyZmxvd0JpdCA9IG1GcmFtZUNvdW50UDIgPDwgMTsKICAgICAgICAgY29uc3Qgc2l6ZV90IG1hc2sgPSBvdmVyZmxvd0JpdCAtIDE7CiAgICAgICAgIGludDMyX3QgbmV3RnJvbnQgPSAoZnJvbnQgJiB+bWFzaykgfCAoZmx1c2ggJiBtYXNrKTsKLSAgICAgICAgc3NpemVfdCBmaWxsZWQgPSByZWFyIC0gbmV3RnJvbnQ7CisgICAgICAgIHNzaXplX3QgZmlsbGVkID0gc2FmZV9zdWJfb3ZlcmZsb3cocmVhciwgbmV3RnJvbnQpOwogICAgICAgICBpZiAoZmlsbGVkID49IChzc2l6ZV90KW92ZXJmbG93Qml0KSB7CiAgICAgICAgICAgICAvLyBmcm9udCBhbmQgcmVhciBvZmZzZXRzIHNwYW4gdGhlIG92ZXJmbG93IGJpdCBvZiB0aGUgcDIgbWFzawogICAgICAgICAgICAgLy8gc28gcmViYXNpbmcgbmV3RnJvbnQgb24gdGhlIGZyb250IG9mZnNldCBpcyBvZmYgYnkgdGhlIG92ZXJmbG93IGJpdC4KQEAgLTcyNiw3ICs3NDQsNyBAQAogICAgICAgICBjb25zdCBzaXplX3Qgb3ZlcmZsb3dCaXQgPSBtRnJhbWVDb3VudFAyIDw8IDE7CiAgICAgICAgIGNvbnN0IHNpemVfdCBtYXNrID0gb3ZlcmZsb3dCaXQgLSAxOwogICAgICAgICBpbnQzMl90IG5ld1JlYXIgPSAocmVhciAmIH5tYXNrKSB8IChzdG9wICYgbWFzayk7Ci0gICAgICAgIHNzaXplX3QgZmlsbGVkID0gbmV3UmVhciAtIGZyb250OworICAgICAgICBzc2l6ZV90IGZpbGxlZCA9IHNhZmVfc3ViX292ZXJmbG93KG5ld1JlYXIsIGZyb250KTsKICAgICAgICAgLy8gb3ZlcmZsb3dCaXQgaXMgdW5zaWduZWQsIHNvIGNhc3QgdG8gc2lnbmVkIGZvciBjb21wYXJpc29uLgogICAgICAgICBpZiAoZmlsbGVkID49IChzc2l6ZV90KW92ZXJmbG93Qml0KSB7CiAgICAgICAgICAgICAvLyBmcm9udCBhbmQgcmVhciBvZmZzZXRzIHNwYW4gdGhlIG92ZXJmbG93IGJpdCBvZiB0aGUgcDIgbWFzawpAQCAtNzc4LDcgKzc5Niw3IEBACiAgICAgICAgIGZyb250ID0gYW5kcm9pZF9hdG9taWNfYWNxdWlyZV9sb2FkKCZjYmxrLT51Lm1TdHJlYW1pbmcubUZyb250KTsKICAgICAgICAgcmVhciA9IGNibGstPnUubVN0cmVhbWluZy5tUmVhcjsKICAgICB9Ci0gICAgc3NpemVfdCBmaWxsZWQgPSByZWFyIC0gZnJvbnQ7CisgICAgc3NpemVfdCBmaWxsZWQgPSBzYWZlX3N1Yl9vdmVyZmxvdyhyZWFyLCBmcm9udCk7CiAgICAgLy8gcGlwZSBzaG91bGQgbm90IGFscmVhZHkgYmUgb3ZlcmZ1bGwKICAgICBpZiAoISgwIDw9IGZpbGxlZCAmJiAoc2l6ZV90KSBmaWxsZWQgPD0gbUZyYW1lQ291bnQpKSB7CiAgICAgICAgIEFMT0dFKCJTaGFyZWQgbWVtb3J5IGNvbnRyb2wgYmxvY2sgaXMgY29ycnVwdCAoZmlsbGVkPSV6ZCwgbUZyYW1lQ291bnQ9JXp1KTsgc2h1dHRpbmcgZG93biIsCkBAIC05MDUsNyArOTIzLDcgQEAKICAgICAgICAgcmV0dXJuIG1GcmFtZUNvdW50OwogICAgIH0KICAgICBjb25zdCBpbnQzMl90IHJlYXIgPSBnZXRSZWFyKCk7Ci0gICAgc3NpemVfdCBmaWxsZWQgPSByZWFyIC0gY2Jsay0+dS5tU3RyZWFtaW5nLm1Gcm9udDsKKyAgICBzc2l6ZV90IGZpbGxlZCA9IHNhZmVfc3ViX292ZXJmbG93KHJlYXIsIGNibGstPnUubVN0cmVhbWluZy5tRnJvbnQpOwogICAgIC8vIHBpcGUgc2hvdWxkIG5vdCBhbHJlYWR5IGJlIG92ZXJmdWxsCiAgICAgaWYgKCEoMCA8PSBmaWxsZWQgJiYgKHNpemVfdCkgZmlsbGVkIDw9IG1GcmFtZUNvdW50KSkgewogICAgICAgICBBTE9HRSgiU2hhcmVkIG1lbW9yeSBjb250cm9sIGJsb2NrIGlzIGNvcnJ1cHQgKGZpbGxlZD0lemQsIG1GcmFtZUNvdW50PSV6dSk7IHNodXR0aW5nIGRvd24iLApAQCAtOTMxLDcgKzk0OSw3IEBACiAgICAgICAgIHJldHVybiBtRnJhbWVDb3VudDsKICAgICB9CiAgICAgY29uc3QgaW50MzJfdCByZWFyID0gZ2V0UmVhcigpOwotICAgIGNvbnN0IHNzaXplX3QgZmlsbGVkID0gcmVhciAtIGNibGstPnUubVN0cmVhbWluZy5tRnJvbnQ7CisgICAgY29uc3Qgc3NpemVfdCBmaWxsZWQgPSBzYWZlX3N1Yl9vdmVyZmxvdyhyZWFyLCBjYmxrLT51Lm1TdHJlYW1pbmcubUZyb250KTsKICAgICBpZiAoISgwIDw9IGZpbGxlZCAmJiAoc2l6ZV90KSBmaWxsZWQgPD0gbUZyYW1lQ291bnQpKSB7CiAgICAgICAgIHJldHVybiAwOyAvLyBlcnJvciBjb25kaXRpb24sIHNpbGVudGx5IHJldHVybiAwLgogICAgIH0KQEAgLTEyMzMsNiArMTI1MSwyMSBAQAogICAgIHJldHVybiAwOwogfQogCitfX2F0dHJpYnV0ZV9fKChub19zYW5pdGl6ZSgiaW50ZWdlciIpKSkKK3NpemVfdCBBdWRpb1JlY29yZFNlcnZlclByb3h5OjpmcmFtZXNSZWFkeVNhZmUoKSBjb25zdAoreworICAgIGlmIChtSXNTaHV0ZG93bikgeworICAgICAgICByZXR1cm4gMDsKKyAgICB9CisgICAgY29uc3QgaW50MzJfdCBmcm9udCA9IGFuZHJvaWRfYXRvbWljX2FjcXVpcmVfbG9hZCgmbUNibGstPnUubVN0cmVhbWluZy5tRnJvbnQpOworICAgIGNvbnN0IGludDMyX3QgcmVhciA9IG1DYmxrLT51Lm1TdHJlYW1pbmcubVJlYXI7CisgICAgY29uc3Qgc3NpemVfdCBmaWxsZWQgPSBzYWZlX3N1Yl9vdmVyZmxvdyhyZWFyLCBmcm9udCk7CisgICAgaWYgKCEoMCA8PSBmaWxsZWQgJiYgKHNpemVfdCkgZmlsbGVkIDw9IG1GcmFtZUNvdW50KSkgeworICAgICAgICByZXR1cm4gMDsgLy8gZXJyb3IgY29uZGl0aW9uLCBzaWxlbnRseSByZXR1cm4gMC4KKyAgICB9CisgICAgcmV0dXJuIGZpbGxlZDsKK30KKwogLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKIH0gICAvLyBuYW1lc3BhY2UgYW5kcm9pZApkaWZmIC0tZ2l0IGEvbWVkaWEvbGliYXVkaW9jbGllbnQvSUF1ZGlvRmxpbmdlci5jcHAgYi9tZWRpYS9saWJhdWRpb2NsaWVudC9JQXVkaW9GbGluZ2VyLmNwcAppbmRleCA5ZjNiNzQyLi4wMDY3OGMyIDEwMDY0NAotLS0gYS9tZWRpYS9saWJhdWRpb2NsaWVudC9JQXVkaW9GbGluZ2VyLmNwcAorKysgYi9tZWRpYS9saWJhdWRpb2NsaWVudC9JQXVkaW9GbGluZ2VyLmNwcApAQCAtMjQsMTAgKzI0LDggQEAKIAogI2luY2x1ZGUgPGJpbmRlci9JUENUaHJlYWRTdGF0ZS5oPgogI2luY2x1ZGUgPGJpbmRlci9QYXJjZWwuaD4KLSNpbmNsdWRlIDxjdXRpbHMvbXVsdGl1c2VyLmg+CiAjaW5jbHVkZSA8bWVkaWEvVGltZUNoZWNrLmg+Ci0jaW5jbHVkZSA8cHJpdmF0ZS9hbmRyb2lkX2ZpbGVzeXN0ZW1fY29uZmlnLmg+Ci0KKyNpbmNsdWRlIDxtZWRpYXV0aWxzL1NlcnZpY2VVdGlsaXRpZXMuaD4KICNpbmNsdWRlICJJQXVkaW9GbGluZ2VyLmgiCiAKIG5hbWVzcGFjZSBhbmRyb2lkIHsKQEAgLTYwMCwxNCArNTk4LDE4IEBACiAgICAgfQogCiAgICAgdmlydHVhbCBzdGF0dXNfdCBnZXRFZmZlY3REZXNjcmlwdG9yKGNvbnN0IGVmZmVjdF91dWlkX3QgKnBVdWlkLAotICAgICAgICAgICAgZWZmZWN0X2Rlc2NyaXB0b3JfdCAqcERlc2NyaXB0b3IpIGNvbnN0CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGVmZmVjdF91dWlkX3QgKnBUeXBlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCBwcmVmZXJyZWRUeXBlRmxhZywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWZmZWN0X2Rlc2NyaXB0b3JfdCAqcERlc2NyaXB0b3IpIGNvbnN0CiAgICAgewotICAgICAgICBpZiAocFV1aWQgPT0gTlVMTCB8fCBwRGVzY3JpcHRvciA9PSBOVUxMKSB7CisgICAgICAgIGlmIChwVXVpZCA9PSBOVUxMIHx8IHBUeXBlID09IE5VTEwgfHwgcERlc2NyaXB0b3IgPT0gTlVMTCkgewogICAgICAgICAgICAgcmV0dXJuIEJBRF9WQUxVRTsKICAgICAgICAgfQogICAgICAgICBQYXJjZWwgZGF0YSwgcmVwbHk7CiAgICAgICAgIGRhdGEud3JpdGVJbnRlcmZhY2VUb2tlbihJQXVkaW9GbGluZ2VyOjpnZXRJbnRlcmZhY2VEZXNjcmlwdG9yKCkpOwogICAgICAgICBkYXRhLndyaXRlKHBVdWlkLCBzaXplb2YoZWZmZWN0X3V1aWRfdCkpOworICAgICAgICBkYXRhLndyaXRlKHBUeXBlLCBzaXplb2YoZWZmZWN0X3V1aWRfdCkpOworICAgICAgICBkYXRhLndyaXRlVWludDMyKHByZWZlcnJlZFR5cGVGbGFnKTsKICAgICAgICAgc3RhdHVzX3Qgc3RhdHVzID0gcmVtb3RlKCktPnRyYW5zYWN0KEdFVF9FRkZFQ1RfREVTQ1JJUFRPUiwgZGF0YSwgJnJlcGx5KTsKICAgICAgICAgaWYgKHN0YXR1cyAhPSBOT19FUlJPUikgewogICAgICAgICAgICAgcmV0dXJuIHN0YXR1czsKQEAgLTYzNiwxMCArNjM4LDEwIEBACiAgICAgICAgIHNwPElFZmZlY3Q+IGVmZmVjdDsKIAogICAgICAgICBpZiAocERlc2MgPT0gTlVMTCkgewotICAgICAgICAgICAgcmV0dXJuIGVmZmVjdDsKICAgICAgICAgICAgIGlmIChzdGF0dXMgIT0gTlVMTCkgewogICAgICAgICAgICAgICAgICpzdGF0dXMgPSBCQURfVkFMVUU7CiAgICAgICAgICAgICB9CisgICAgICAgICAgICByZXR1cm4gZWZmZWN0OwogICAgICAgICB9CiAKICAgICAgICAgZGF0YS53cml0ZUludGVyZmFjZVRva2VuKElBdWRpb0ZsaW5nZXI6OmdldEludGVyZmFjZURlc2NyaXB0b3IoKSk7CkBAIC05MTIsNyArOTE0LDcgQEAKICAgICAgICAgY2FzZSBTRVRfTUlDX01VVEU6CiAgICAgICAgIGNhc2UgU0VUX0xPV19SQU1fREVWSUNFOgogICAgICAgICBjYXNlIFNZU1RFTV9SRUFEWTogewotICAgICAgICAgICAgaWYgKG11bHRpdXNlcl9nZXRfYXBwX2lkKElQQ1RocmVhZFN0YXRlOjpzZWxmKCktPmdldENhbGxpbmdVaWQoKSkgPj0gQUlEX0FQUF9TVEFSVCkgeworICAgICAgICAgICAgaWYgKCFpc1NlcnZpY2VVaWQoSVBDVGhyZWFkU3RhdGU6OnNlbGYoKS0+Z2V0Q2FsbGluZ1VpZCgpKSkgewogICAgICAgICAgICAgICAgIEFMT0dXKCIlczogdHJhbnNhY3Rpb24gJWQgcmVjZWl2ZWQgZnJvbSBQSUQgJWQgdW5hdXRob3JpemVkIFVJRCAlZCIsCiAgICAgICAgICAgICAgICAgICAgICAgX19mdW5jX18sIGNvZGUsIElQQ1RocmVhZFN0YXRlOjpzZWxmKCktPmdldENhbGxpbmdQaWQoKSwKICAgICAgICAgICAgICAgICAgICAgICBJUENUaHJlYWRTdGF0ZTo6c2VsZigpLT5nZXRDYWxsaW5nVWlkKCkpOwpAQCAtOTUxLDkgKzk1Myw4IEBACiAgICAgICAgICAgICBicmVhazsKICAgICB9CiAKLSAgICBjaGFyIHRpbWVDaGVja1N0cmluZ1s2NF07Ci0gICAgc25wcmludGYodGltZUNoZWNrU3RyaW5nLCBzaXplb2YodGltZUNoZWNrU3RyaW5nKSwgIklBdWRpb0ZsaW5nZXI6ICVkIiwgY29kZSk7Ci0gICAgVGltZUNoZWNrIGNoZWNrKHRpbWVDaGVja1N0cmluZyk7CisgICAgc3RkOjpzdHJpbmcgdGFnKCJJQXVkaW9GbGluZ2VyIGNvbW1hbmQgIiArIHN0ZDo6dG9fc3RyaW5nKGNvZGUpKTsKKyAgICBUaW1lQ2hlY2sgY2hlY2sodGFnLmNfc3RyKCkpOwogCiAgICAgc3dpdGNoIChjb2RlKSB7CiAgICAgICAgIGNhc2UgQ1JFQVRFX1RSQUNLOiB7CkBAIC0xMjgwLDggKzEyODEsMTEgQEAKICAgICAgICAgICAgIENIRUNLX0lOVEVSRkFDRShJQXVkaW9GbGluZ2VyLCBkYXRhLCByZXBseSk7CiAgICAgICAgICAgICBlZmZlY3RfdXVpZF90IHV1aWQ7CiAgICAgICAgICAgICBkYXRhLnJlYWQoJnV1aWQsIHNpemVvZihlZmZlY3RfdXVpZF90KSk7CisgICAgICAgICAgICBlZmZlY3RfdXVpZF90IHR5cGU7CisgICAgICAgICAgICBkYXRhLnJlYWQoJnR5cGUsIHNpemVvZihlZmZlY3RfdXVpZF90KSk7CisgICAgICAgICAgICB1aW50MzJfdCBwcmVmZXJyZWRUeXBlRmxhZyA9IGRhdGEucmVhZFVpbnQzMigpOwogICAgICAgICAgICAgZWZmZWN0X2Rlc2NyaXB0b3JfdCBkZXNjID0ge307Ci0gICAgICAgICAgICBzdGF0dXNfdCBzdGF0dXMgPSBnZXRFZmZlY3REZXNjcmlwdG9yKCZ1dWlkLCAmZGVzYyk7CisgICAgICAgICAgICBzdGF0dXNfdCBzdGF0dXMgPSBnZXRFZmZlY3REZXNjcmlwdG9yKCZ1dWlkLCAmdHlwZSwgcHJlZmVycmVkVHlwZUZsYWcsICZkZXNjKTsKICAgICAgICAgICAgIHJlcGx5LT53cml0ZUludDMyKHN0YXR1cyk7CiAgICAgICAgICAgICBpZiAoc3RhdHVzID09IE5PX0VSUk9SKSB7CiAgICAgICAgICAgICAgICAgcmVwbHktPndyaXRlKCZkZXNjLCBzaXplb2YoZWZmZWN0X2Rlc2NyaXB0b3JfdCkpOwpkaWZmIC0tZ2l0IGEvbWVkaWEvbGliYXVkaW9jbGllbnQvSUF1ZGlvUG9saWN5U2VydmljZS5jcHAgYi9tZWRpYS9saWJhdWRpb2NsaWVudC9JQXVkaW9Qb2xpY3lTZXJ2aWNlLmNwcAppbmRleCA4Y2Q0YTg1Li5hNDA2NjU4IDEwMDY0NAotLS0gYS9tZWRpYS9saWJhdWRpb2NsaWVudC9JQXVkaW9Qb2xpY3lTZXJ2aWNlLmNwcAorKysgYi9tZWRpYS9saWJhdWRpb2NsaWVudC9JQXVkaW9Qb2xpY3lTZXJ2aWNlLmNwcApAQCAtMjQsMTEgKzI0LDEwIEBACiAKICNpbmNsdWRlIDxiaW5kZXIvSVBDVGhyZWFkU3RhdGUuaD4KICNpbmNsdWRlIDxiaW5kZXIvUGFyY2VsLmg+Ci0jaW5jbHVkZSA8Y3V0aWxzL211bHRpdXNlci5oPgogI2luY2x1ZGUgPG1lZGlhL0F1ZGlvRWZmZWN0Lmg+CiAjaW5jbHVkZSA8bWVkaWEvSUF1ZGlvUG9saWN5U2VydmljZS5oPgogI2luY2x1ZGUgPG1lZGlhL1RpbWVDaGVjay5oPgotI2luY2x1ZGUgPHByaXZhdGUvYW5kcm9pZF9maWxlc3lzdGVtX2NvbmZpZy5oPgorI2luY2x1ZGUgPG1lZGlhdXRpbHMvU2VydmljZVV0aWxpdGllcy5oPgogI2luY2x1ZGUgPHN5c3RlbS9hdWRpby5oPgogCiBuYW1lc3BhY2UgYW5kcm9pZCB7CkBAIC04Miw3ICs4MSwxMyBAQAogICAgIEdFVF9NQVNURVJfTU9OTywKICAgICBHRVRfU1RSRUFNX1ZPTFVNRV9EQiwKICAgICBHRVRfU1VSUk9VTkRfRk9STUFUUywKLSAgICBTRVRfU1VSUk9VTkRfRk9STUFUX0VOQUJMRUQKKyAgICBTRVRfU1VSUk9VTkRfRk9STUFUX0VOQUJMRUQsCisgICAgQUREX1NUUkVBTV9ERUZBVUxUX0VGRkVDVCwKKyAgICBSRU1PVkVfU1RSRUFNX0RFRkFVTFRfRUZGRUNULAorICAgIEFERF9TT1VSQ0VfREVGQVVMVF9FRkZFQ1QsCisgICAgUkVNT1ZFX1NPVVJDRV9ERUZBVUxUX0VGRkVDVCwKKyAgICBTRVRfQVNTSVNUQU5UX1VJRCwKKyAgICBTRVRfQTExWV9TRVJWSUNFU19VSURTLAogfTsKIAogI2RlZmluZSBNQVhfSVRFTVNfUEVSX0xJU1QgMTAyNApAQCAtMjQ1LDQxICsyNTAsMjkgQEAKICAgICAgICAgICAgIHJldHVybiBzdGF0dXM7CiAgICAgICAgIH0KIAotICAgIHZpcnR1YWwgc3RhdHVzX3Qgc3RhcnRPdXRwdXQoYXVkaW9faW9faGFuZGxlX3Qgb3V0cHV0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXVkaW9fc3RyZWFtX3R5cGVfdCBzdHJlYW0sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdWRpb19zZXNzaW9uX3Qgc2Vzc2lvbikKKyAgICB2aXJ0dWFsIHN0YXR1c190IHN0YXJ0T3V0cHV0KGF1ZGlvX3BvcnRfaGFuZGxlX3QgcG9ydElkKQogICAgIHsKICAgICAgICAgUGFyY2VsIGRhdGEsIHJlcGx5OwogICAgICAgICBkYXRhLndyaXRlSW50ZXJmYWNlVG9rZW4oSUF1ZGlvUG9saWN5U2VydmljZTo6Z2V0SW50ZXJmYWNlRGVzY3JpcHRvcigpKTsKLSAgICAgICAgZGF0YS53cml0ZUludDMyKG91dHB1dCk7Ci0gICAgICAgIGRhdGEud3JpdGVJbnQzMigoaW50MzJfdCkgc3RyZWFtKTsKLSAgICAgICAgZGF0YS53cml0ZUludDMyKChpbnQzMl90KSBzZXNzaW9uKTsKKyAgICAgICAgZGF0YS53cml0ZUludDMyKChpbnQzMl90KXBvcnRJZCk7CiAgICAgICAgIHJlbW90ZSgpLT50cmFuc2FjdChTVEFSVF9PVVRQVVQsIGRhdGEsICZyZXBseSk7CiAgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdCA8c3RhdHVzX3Q+IChyZXBseS5yZWFkSW50MzIoKSk7CiAgICAgfQogCi0gICAgdmlydHVhbCBzdGF0dXNfdCBzdG9wT3V0cHV0KGF1ZGlvX2lvX2hhbmRsZV90IG91dHB1dCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXVkaW9fc3RyZWFtX3R5cGVfdCBzdHJlYW0sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF1ZGlvX3Nlc3Npb25fdCBzZXNzaW9uKQorICAgIHZpcnR1YWwgc3RhdHVzX3Qgc3RvcE91dHB1dChhdWRpb19wb3J0X2hhbmRsZV90IHBvcnRJZCkKICAgICB7CiAgICAgICAgIFBhcmNlbCBkYXRhLCByZXBseTsKICAgICAgICAgZGF0YS53cml0ZUludGVyZmFjZVRva2VuKElBdWRpb1BvbGljeVNlcnZpY2U6OmdldEludGVyZmFjZURlc2NyaXB0b3IoKSk7Ci0gICAgICAgIGRhdGEud3JpdGVJbnQzMihvdXRwdXQpOwotICAgICAgICBkYXRhLndyaXRlSW50MzIoKGludDMyX3QpIHN0cmVhbSk7Ci0gICAgICAgIGRhdGEud3JpdGVJbnQzMigoaW50MzJfdCkgc2Vzc2lvbik7CisgICAgICAgIGRhdGEud3JpdGVJbnQzMigoaW50MzJfdClwb3J0SWQpOwogICAgICAgICByZW1vdGUoKS0+dHJhbnNhY3QoU1RPUF9PVVRQVVQsIGRhdGEsICZyZXBseSk7CiAgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdCA8c3RhdHVzX3Q+IChyZXBseS5yZWFkSW50MzIoKSk7CiAgICAgfQogCi0gICAgdmlydHVhbCB2b2lkIHJlbGVhc2VPdXRwdXQoYXVkaW9faW9faGFuZGxlX3Qgb3V0cHV0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF1ZGlvX3N0cmVhbV90eXBlX3Qgc3RyZWFtLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF1ZGlvX3Nlc3Npb25fdCBzZXNzaW9uKQorICAgIHZpcnR1YWwgdm9pZCByZWxlYXNlT3V0cHV0KGF1ZGlvX3BvcnRfaGFuZGxlX3QgcG9ydElkKQogICAgIHsKICAgICAgICAgUGFyY2VsIGRhdGEsIHJlcGx5OwogICAgICAgICBkYXRhLndyaXRlSW50ZXJmYWNlVG9rZW4oSUF1ZGlvUG9saWN5U2VydmljZTo6Z2V0SW50ZXJmYWNlRGVzY3JpcHRvcigpKTsKLSAgICAgICAgZGF0YS53cml0ZUludDMyKG91dHB1dCk7Ci0gICAgICAgIGRhdGEud3JpdGVJbnQzMigoaW50MzJfdClzdHJlYW0pOwotICAgICAgICBkYXRhLndyaXRlSW50MzIoKGludDMyX3Qpc2Vzc2lvbik7CisgICAgICAgIGRhdGEud3JpdGVJbnQzMigoaW50MzJfdClwb3J0SWQpOwogICAgICAgICByZW1vdGUoKS0+dHJhbnNhY3QoUkVMRUFTRV9PVVRQVVQsIGRhdGEsICZyZXBseSk7CiAgICAgfQogCkBAIC03NTMsMTEgKzc0NiwxMSBAQAogCiAgICAgdmlydHVhbCBzdGF0dXNfdCBzdGFydEF1ZGlvU291cmNlKGNvbnN0IHN0cnVjdCBhdWRpb19wb3J0X2NvbmZpZyAqc291cmNlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBhdWRpb19hdHRyaWJ1dGVzX3QgKmF0dHJpYnV0ZXMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF1ZGlvX3BhdGNoX2hhbmRsZV90ICpoYW5kbGUpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF1ZGlvX3BvcnRfaGFuZGxlX3QgKnBvcnRJZCkKICAgICB7CiAgICAgICAgIFBhcmNlbCBkYXRhLCByZXBseTsKICAgICAgICAgZGF0YS53cml0ZUludGVyZmFjZVRva2VuKElBdWRpb1BvbGljeVNlcnZpY2U6OmdldEludGVyZmFjZURlc2NyaXB0b3IoKSk7Ci0gICAgICAgIGlmIChzb3VyY2UgPT0gTlVMTCB8fCBhdHRyaWJ1dGVzID09IE5VTEwgfHwgaGFuZGxlID09IE5VTEwpIHsKKyAgICAgICAgaWYgKHNvdXJjZSA9PSBOVUxMIHx8IGF0dHJpYnV0ZXMgPT0gTlVMTCB8fCBwb3J0SWQgPT0gTlVMTCkgewogICAgICAgICAgICAgcmV0dXJuIEJBRF9WQUxVRTsKICAgICAgICAgfQogICAgICAgICBkYXRhLndyaXRlKHNvdXJjZSwgc2l6ZW9mKHN0cnVjdCBhdWRpb19wb3J0X2NvbmZpZykpOwpAQCAtNzcwLDE1ICs3NjMsMTUgQEAKICAgICAgICAgaWYgKHN0YXR1cyAhPSBOT19FUlJPUikgewogICAgICAgICAgICAgcmV0dXJuIHN0YXR1czsKICAgICAgICAgfQotICAgICAgICAqaGFuZGxlID0gKGF1ZGlvX3BhdGNoX2hhbmRsZV90KXJlcGx5LnJlYWRJbnQzMigpOworICAgICAgICAqcG9ydElkID0gKGF1ZGlvX3BvcnRfaGFuZGxlX3QpcmVwbHkucmVhZEludDMyKCk7CiAgICAgICAgIHJldHVybiBzdGF0dXM7CiAgICAgfQogCi0gICAgdmlydHVhbCBzdGF0dXNfdCBzdG9wQXVkaW9Tb3VyY2UoYXVkaW9fcGF0Y2hfaGFuZGxlX3QgaGFuZGxlKQorICAgIHZpcnR1YWwgc3RhdHVzX3Qgc3RvcEF1ZGlvU291cmNlKGF1ZGlvX3BvcnRfaGFuZGxlX3QgcG9ydElkKQogICAgIHsKICAgICAgICAgUGFyY2VsIGRhdGEsIHJlcGx5OwogICAgICAgICBkYXRhLndyaXRlSW50ZXJmYWNlVG9rZW4oSUF1ZGlvUG9saWN5U2VydmljZTo6Z2V0SW50ZXJmYWNlRGVzY3JpcHRvcigpKTsKLSAgICAgICAgZGF0YS53cml0ZUludDMyKGhhbmRsZSk7CisgICAgICAgIGRhdGEud3JpdGVJbnQzMihwb3J0SWQpOwogICAgICAgICBzdGF0dXNfdCBzdGF0dXMgPSByZW1vdGUoKS0+dHJhbnNhY3QoU1RPUF9BVURJT19TT1VSQ0UsIGRhdGEsICZyZXBseSk7CiAgICAgICAgIGlmIChzdGF0dXMgIT0gTk9fRVJST1IpIHsKICAgICAgICAgICAgIHJldHVybiBzdGF0dXM7CkBAIC04NzksNiArODcyLDEwNCBAQAogICAgICAgICB9CiAgICAgICAgIHJldHVybiByZXBseS5yZWFkSW50MzIoKTsKICAgICB9CisKKyAgICB2aXJ0dWFsIHN0YXR1c190IGFkZFN0cmVhbURlZmF1bHRFZmZlY3QoY29uc3QgZWZmZWN0X3V1aWRfdCAqdHlwZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgU3RyaW5nMTYmIG9wUGFja2FnZU5hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGVmZmVjdF91dWlkX3QgKnV1aWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludDMyX3QgcHJpb3JpdHksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF1ZGlvX3VzYWdlX3QgdXNhZ2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF1ZGlvX3VuaXF1ZV9pZF90KiBpZCkKKyAgICB7CisgICAgICAgIFBhcmNlbCBkYXRhLCByZXBseTsKKyAgICAgICAgZGF0YS53cml0ZUludGVyZmFjZVRva2VuKElBdWRpb1BvbGljeVNlcnZpY2U6OmdldEludGVyZmFjZURlc2NyaXB0b3IoKSk7CisgICAgICAgIGRhdGEud3JpdGUodHlwZSwgc2l6ZW9mKGVmZmVjdF91dWlkX3QpKTsKKyAgICAgICAgZGF0YS53cml0ZVN0cmluZzE2KG9wUGFja2FnZU5hbWUpOworICAgICAgICBkYXRhLndyaXRlKHV1aWQsIHNpemVvZihlZmZlY3RfdXVpZF90KSk7CisgICAgICAgIGRhdGEud3JpdGVJbnQzMihwcmlvcml0eSk7CisgICAgICAgIGRhdGEud3JpdGVJbnQzMigoaW50MzJfdCkgdXNhZ2UpOworICAgICAgICBzdGF0dXNfdCBzdGF0dXMgPSByZW1vdGUoKS0+dHJhbnNhY3QoQUREX1NUUkVBTV9ERUZBVUxUX0VGRkVDVCwgZGF0YSwgJnJlcGx5KTsKKyAgICAgICAgaWYgKHN0YXR1cyAhPSBOT19FUlJPUikgeworICAgICAgICAgICAgcmV0dXJuIHN0YXR1czsKKyAgICAgICAgfQorICAgICAgICBzdGF0dXMgPSBzdGF0aWNfY2FzdCA8c3RhdHVzX3Q+IChyZXBseS5yZWFkSW50MzIoKSk7CisgICAgICAgICppZCA9IHJlcGx5LnJlYWRJbnQzMigpOworICAgICAgICByZXR1cm4gc3RhdHVzOworICAgIH0KKworICAgIHZpcnR1YWwgc3RhdHVzX3QgcmVtb3ZlU3RyZWFtRGVmYXVsdEVmZmVjdChhdWRpb191bmlxdWVfaWRfdCBpZCkKKyAgICB7CisgICAgICAgIFBhcmNlbCBkYXRhLCByZXBseTsKKyAgICAgICAgZGF0YS53cml0ZUludGVyZmFjZVRva2VuKElBdWRpb1BvbGljeVNlcnZpY2U6OmdldEludGVyZmFjZURlc2NyaXB0b3IoKSk7CisgICAgICAgIGRhdGEud3JpdGVJbnQzMihpZCk7CisgICAgICAgIHN0YXR1c190IHN0YXR1cyA9IHJlbW90ZSgpLT50cmFuc2FjdChSRU1PVkVfU1RSRUFNX0RFRkFVTFRfRUZGRUNULCBkYXRhLCAmcmVwbHkpOworICAgICAgICBpZiAoc3RhdHVzICE9IE5PX0VSUk9SKSB7CisgICAgICAgICAgICByZXR1cm4gc3RhdHVzOworICAgICAgICB9CisgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdCA8c3RhdHVzX3Q+IChyZXBseS5yZWFkSW50MzIoKSk7CisgICAgfQorCisgICAgdmlydHVhbCBzdGF0dXNfdCBhZGRTb3VyY2VEZWZhdWx0RWZmZWN0KGNvbnN0IGVmZmVjdF91dWlkX3QgKnR5cGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFN0cmluZzE2JiBvcFBhY2thZ2VOYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBlZmZlY3RfdXVpZF90ICp1dWlkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQzMl90IHByaW9yaXR5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdWRpb19zb3VyY2VfdCBzb3VyY2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF1ZGlvX3VuaXF1ZV9pZF90KiBpZCkKKyAgICB7CisgICAgICAgIFBhcmNlbCBkYXRhLCByZXBseTsKKyAgICAgICAgZGF0YS53cml0ZUludGVyZmFjZVRva2VuKElBdWRpb1BvbGljeVNlcnZpY2U6OmdldEludGVyZmFjZURlc2NyaXB0b3IoKSk7CisgICAgICAgIGRhdGEud3JpdGUodHlwZSwgc2l6ZW9mKGVmZmVjdF91dWlkX3QpKTsKKyAgICAgICAgZGF0YS53cml0ZVN0cmluZzE2KG9wUGFja2FnZU5hbWUpOworICAgICAgICBkYXRhLndyaXRlKHV1aWQsIHNpemVvZihlZmZlY3RfdXVpZF90KSk7CisgICAgICAgIGRhdGEud3JpdGVJbnQzMihwcmlvcml0eSk7CisgICAgICAgIGRhdGEud3JpdGVJbnQzMigoaW50MzJfdCkgc291cmNlKTsKKyAgICAgICAgc3RhdHVzX3Qgc3RhdHVzID0gcmVtb3RlKCktPnRyYW5zYWN0KEFERF9TT1VSQ0VfREVGQVVMVF9FRkZFQ1QsIGRhdGEsICZyZXBseSk7CisgICAgICAgIGlmIChzdGF0dXMgIT0gTk9fRVJST1IpIHsKKyAgICAgICAgICAgIHJldHVybiBzdGF0dXM7CisgICAgICAgIH0KKyAgICAgICAgc3RhdHVzID0gc3RhdGljX2Nhc3QgPHN0YXR1c190PiAocmVwbHkucmVhZEludDMyKCkpOworICAgICAgICAqaWQgPSByZXBseS5yZWFkSW50MzIoKTsKKyAgICAgICAgcmV0dXJuIHN0YXR1czsKKyAgICB9CisKKyAgICB2aXJ0dWFsIHN0YXR1c190IHJlbW92ZVNvdXJjZURlZmF1bHRFZmZlY3QoYXVkaW9fdW5pcXVlX2lkX3QgaWQpCisgICAgeworICAgICAgICBQYXJjZWwgZGF0YSwgcmVwbHk7CisgICAgICAgIGRhdGEud3JpdGVJbnRlcmZhY2VUb2tlbihJQXVkaW9Qb2xpY3lTZXJ2aWNlOjpnZXRJbnRlcmZhY2VEZXNjcmlwdG9yKCkpOworICAgICAgICBkYXRhLndyaXRlSW50MzIoaWQpOworICAgICAgICBzdGF0dXNfdCBzdGF0dXMgPSByZW1vdGUoKS0+dHJhbnNhY3QoUkVNT1ZFX1NPVVJDRV9ERUZBVUxUX0VGRkVDVCwgZGF0YSwgJnJlcGx5KTsKKyAgICAgICAgaWYgKHN0YXR1cyAhPSBOT19FUlJPUikgeworICAgICAgICAgICAgcmV0dXJuIHN0YXR1czsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3QgPHN0YXR1c190PiAocmVwbHkucmVhZEludDMyKCkpOworICAgIH0KKworICAgIHZpcnR1YWwgc3RhdHVzX3Qgc2V0QXNzaXN0YW50VWlkKHVpZF90IHVpZCkKKyAgICB7CisgICAgICAgIFBhcmNlbCBkYXRhLCByZXBseTsKKyAgICAgICAgZGF0YS53cml0ZUludGVyZmFjZVRva2VuKElBdWRpb1BvbGljeVNlcnZpY2U6OmdldEludGVyZmFjZURlc2NyaXB0b3IoKSk7CisgICAgICAgIGRhdGEud3JpdGVJbnQzMih1aWQpOworICAgICAgICBzdGF0dXNfdCBzdGF0dXMgPSByZW1vdGUoKS0+dHJhbnNhY3QoU0VUX0FTU0lTVEFOVF9VSUQsIGRhdGEsICZyZXBseSk7CisgICAgICAgIGlmIChzdGF0dXMgIT0gTk9fRVJST1IpIHsKKyAgICAgICAgICAgIHJldHVybiBzdGF0dXM7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0IDxzdGF0dXNfdD4gKHJlcGx5LnJlYWRJbnQzMigpKTsKKyAgICB9CisKKyAgICB2aXJ0dWFsIHN0YXR1c190IHNldEExMXlTZXJ2aWNlc1VpZHMoY29uc3Qgc3RkOjp2ZWN0b3I8dWlkX3Q+JiB1aWRzKQorICAgIHsKKyAgICAgICAgUGFyY2VsIGRhdGEsIHJlcGx5OworICAgICAgICBkYXRhLndyaXRlSW50ZXJmYWNlVG9rZW4oSUF1ZGlvUG9saWN5U2VydmljZTo6Z2V0SW50ZXJmYWNlRGVzY3JpcHRvcigpKTsKKyAgICAgICAgZGF0YS53cml0ZUludDMyKHVpZHMuc2l6ZSgpKTsKKyAgICAgICAgZm9yIChhdXRvIHVpZCA6IHVpZHMpIHsKKyAgICAgICAgICAgIGRhdGEud3JpdGVJbnQzMih1aWQpOworICAgICAgICB9CisgICAgICAgIHN0YXR1c190IHN0YXR1cyA9IHJlbW90ZSgpLT50cmFuc2FjdChTRVRfQTExWV9TRVJWSUNFU19VSURTLCBkYXRhLCAmcmVwbHkpOworICAgICAgICBpZiAoc3RhdHVzICE9IE5PX0VSUk9SKSB7CisgICAgICAgICAgICByZXR1cm4gc3RhdHVzOworICAgICAgICB9CisgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdCA8c3RhdHVzX3Q+IChyZXBseS5yZWFkSW50MzIoKSk7CisgICAgfQorCiB9OwogCiBJTVBMRU1FTlRfTUVUQV9JTlRFUkZBQ0UoQXVkaW9Qb2xpY3lTZXJ2aWNlLCAiYW5kcm9pZC5tZWRpYS5JQXVkaW9Qb2xpY3lTZXJ2aWNlIik7CkBAIC05MzUsOCArMTAyNiwxMCBAQAogICAgICAgICBjYXNlIFNUQVJUX0FVRElPX1NPVVJDRToKICAgICAgICAgY2FzZSBTVE9QX0FVRElPX1NPVVJDRToKICAgICAgICAgY2FzZSBHRVRfU1VSUk9VTkRfRk9STUFUUzoKLSAgICAgICAgY2FzZSBTRVRfU1VSUk9VTkRfRk9STUFUX0VOQUJMRUQ6IHsKLSAgICAgICAgICAgIGlmIChtdWx0aXVzZXJfZ2V0X2FwcF9pZChJUENUaHJlYWRTdGF0ZTo6c2VsZigpLT5nZXRDYWxsaW5nVWlkKCkpID49IEFJRF9BUFBfU1RBUlQpIHsKKyAgICAgICAgY2FzZSBTRVRfU1VSUk9VTkRfRk9STUFUX0VOQUJMRUQ6CisgICAgICAgIGNhc2UgU0VUX0FTU0lTVEFOVF9VSUQ6CisgICAgICAgIGNhc2UgU0VUX0ExMVlfU0VSVklDRVNfVUlEUzogeworICAgICAgICAgICAgaWYgKCFpc1NlcnZpY2VVaWQoSVBDVGhyZWFkU3RhdGU6OnNlbGYoKS0+Z2V0Q2FsbGluZ1VpZCgpKSkgewogICAgICAgICAgICAgICAgIEFMT0dXKCIlczogdHJhbnNhY3Rpb24gJWQgcmVjZWl2ZWQgZnJvbSBQSUQgJWQgdW5hdXRob3JpemVkIFVJRCAlZCIsCiAgICAgICAgICAgICAgICAgICAgICAgX19mdW5jX18sIGNvZGUsIElQQ1RocmVhZFN0YXRlOjpzZWxmKCktPmdldENhbGxpbmdQaWQoKSwKICAgICAgICAgICAgICAgICAgICAgICBJUENUaHJlYWRTdGF0ZTo6c2VsZigpLT5nZXRDYWxsaW5nVWlkKCkpOwpAQCAtOTQ4LDkgKzEwNDEsOCBAQAogICAgICAgICAgICAgYnJlYWs7CiAgICAgfQogCi0gICAgY2hhciB0aW1lQ2hlY2tTdHJpbmdbNjRdOwotICAgIHNucHJpbnRmKHRpbWVDaGVja1N0cmluZywgc2l6ZW9mKHRpbWVDaGVja1N0cmluZyksICJJQXVkaW9Qb2xpY3lTZXJ2aWNlOiAlZCIsIGNvZGUpOwotICAgIFRpbWVDaGVjayBjaGVjayh0aW1lQ2hlY2tTdHJpbmcpOworICAgIHN0ZDo6c3RyaW5nIHRhZygiSUF1ZGlvUG9saWN5U2VydmljZSBjb21tYW5kICIgKyBzdGQ6OnRvX3N0cmluZyhjb2RlKSk7CisgICAgVGltZUNoZWNrIGNoZWNrKHRhZy5jX3N0cigpKTsKIAogICAgIHN3aXRjaCAoY29kZSkgewogICAgICAgICBjYXNlIFNFVF9ERVZJQ0VfQ09OTkVDVElPTl9TVEFURTogewpAQCAtMTA3NywzNCArMTE2OSwyMiBAQAogCiAgICAgICAgIGNhc2UgU1RBUlRfT1VUUFVUOiB7CiAgICAgICAgICAgICBDSEVDS19JTlRFUkZBQ0UoSUF1ZGlvUG9saWN5U2VydmljZSwgZGF0YSwgcmVwbHkpOwotICAgICAgICAgICAgYXVkaW9faW9faGFuZGxlX3Qgb3V0cHV0ID0gc3RhdGljX2Nhc3QgPGF1ZGlvX2lvX2hhbmRsZV90PihkYXRhLnJlYWRJbnQzMigpKTsKLSAgICAgICAgICAgIGF1ZGlvX3N0cmVhbV90eXBlX3Qgc3RyZWFtID0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGljX2Nhc3QgPGF1ZGlvX3N0cmVhbV90eXBlX3Q+KGRhdGEucmVhZEludDMyKCkpOwotICAgICAgICAgICAgYXVkaW9fc2Vzc2lvbl90IHNlc3Npb24gPSAoYXVkaW9fc2Vzc2lvbl90KWRhdGEucmVhZEludDMyKCk7Ci0gICAgICAgICAgICByZXBseS0+d3JpdGVJbnQzMihzdGF0aWNfY2FzdCA8dWludDMyX3Q+KHN0YXJ0T3V0cHV0KG91dHB1dCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RyZWFtLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXNzaW9uKSkpOworICAgICAgICAgICAgY29uc3QgYXVkaW9fcG9ydF9oYW5kbGVfdCBwb3J0SWQgPSBzdGF0aWNfY2FzdCA8YXVkaW9fcG9ydF9oYW5kbGVfdD4oZGF0YS5yZWFkSW50MzIoKSk7CisgICAgICAgICAgICByZXBseS0+d3JpdGVJbnQzMihzdGF0aWNfY2FzdCA8dWludDMyX3Q+KHN0YXJ0T3V0cHV0KHBvcnRJZCkpKTsKICAgICAgICAgICAgIHJldHVybiBOT19FUlJPUjsKICAgICAgICAgfSBicmVhazsKIAogICAgICAgICBjYXNlIFNUT1BfT1VUUFVUOiB7CiAgICAgICAgICAgICBDSEVDS19JTlRFUkZBQ0UoSUF1ZGlvUG9saWN5U2VydmljZSwgZGF0YSwgcmVwbHkpOwotICAgICAgICAgICAgYXVkaW9faW9faGFuZGxlX3Qgb3V0cHV0ID0gc3RhdGljX2Nhc3QgPGF1ZGlvX2lvX2hhbmRsZV90PihkYXRhLnJlYWRJbnQzMigpKTsKLSAgICAgICAgICAgIGF1ZGlvX3N0cmVhbV90eXBlX3Qgc3RyZWFtID0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGljX2Nhc3QgPGF1ZGlvX3N0cmVhbV90eXBlX3Q+KGRhdGEucmVhZEludDMyKCkpOwotICAgICAgICAgICAgYXVkaW9fc2Vzc2lvbl90IHNlc3Npb24gPSAoYXVkaW9fc2Vzc2lvbl90KWRhdGEucmVhZEludDMyKCk7Ci0gICAgICAgICAgICByZXBseS0+d3JpdGVJbnQzMihzdGF0aWNfY2FzdCA8dWludDMyX3Q+KHN0b3BPdXRwdXQob3V0cHV0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cmVhbSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXNzaW9uKSkpOworICAgICAgICAgICAgY29uc3QgYXVkaW9fcG9ydF9oYW5kbGVfdCBwb3J0SWQgPSBzdGF0aWNfY2FzdCA8YXVkaW9fcG9ydF9oYW5kbGVfdD4oZGF0YS5yZWFkSW50MzIoKSk7CisgICAgICAgICAgICByZXBseS0+d3JpdGVJbnQzMihzdGF0aWNfY2FzdCA8dWludDMyX3Q+KHN0b3BPdXRwdXQocG9ydElkKSkpOwogICAgICAgICAgICAgcmV0dXJuIE5PX0VSUk9SOwogICAgICAgICB9IGJyZWFrOwogCiAgICAgICAgIGNhc2UgUkVMRUFTRV9PVVRQVVQ6IHsKICAgICAgICAgICAgIENIRUNLX0lOVEVSRkFDRShJQXVkaW9Qb2xpY3lTZXJ2aWNlLCBkYXRhLCByZXBseSk7Ci0gICAgICAgICAgICBhdWRpb19pb19oYW5kbGVfdCBvdXRwdXQgPSBzdGF0aWNfY2FzdCA8YXVkaW9faW9faGFuZGxlX3Q+KGRhdGEucmVhZEludDMyKCkpOwotICAgICAgICAgICAgYXVkaW9fc3RyZWFtX3R5cGVfdCBzdHJlYW0gPSAoYXVkaW9fc3RyZWFtX3R5cGVfdClkYXRhLnJlYWRJbnQzMigpOwotICAgICAgICAgICAgYXVkaW9fc2Vzc2lvbl90IHNlc3Npb24gPSAoYXVkaW9fc2Vzc2lvbl90KWRhdGEucmVhZEludDMyKCk7Ci0gICAgICAgICAgICByZWxlYXNlT3V0cHV0KG91dHB1dCwgc3RyZWFtLCBzZXNzaW9uKTsKKyAgICAgICAgICAgIGNvbnN0IGF1ZGlvX3BvcnRfaGFuZGxlX3QgcG9ydElkID0gc3RhdGljX2Nhc3QgPGF1ZGlvX3BvcnRfaGFuZGxlX3Q+KGRhdGEucmVhZEludDMyKCkpOworICAgICAgICAgICAgcmVsZWFzZU91dHB1dChwb3J0SWQpOwogICAgICAgICAgICAgcmV0dXJuIE5PX0VSUk9SOwogICAgICAgICB9IGJyZWFrOwogCkBAIC0xNDk4LDE3ICsxNTc4LDE3IEBACiAgICAgICAgICAgICBhdWRpb19hdHRyaWJ1dGVzX3QgYXR0cmlidXRlcyA9IHt9OwogICAgICAgICAgICAgZGF0YS5yZWFkKCZhdHRyaWJ1dGVzLCBzaXplb2YoYXVkaW9fYXR0cmlidXRlc190KSk7CiAgICAgICAgICAgICBzYW5ldGl6ZUF1ZGlvQXR0cmlidXRlcygmYXR0cmlidXRlcyk7Ci0gICAgICAgICAgICBhdWRpb19wYXRjaF9oYW5kbGVfdCBoYW5kbGUgPSBBVURJT19QQVRDSF9IQU5ETEVfTk9ORTsKLSAgICAgICAgICAgIHN0YXR1c190IHN0YXR1cyA9IHN0YXJ0QXVkaW9Tb3VyY2UoJnNvdXJjZSwgJmF0dHJpYnV0ZXMsICZoYW5kbGUpOworICAgICAgICAgICAgYXVkaW9fcG9ydF9oYW5kbGVfdCBwb3J0SWQgPSBBVURJT19QT1JUX0hBTkRMRV9OT05FOworICAgICAgICAgICAgc3RhdHVzX3Qgc3RhdHVzID0gc3RhcnRBdWRpb1NvdXJjZSgmc291cmNlLCAmYXR0cmlidXRlcywgJnBvcnRJZCk7CiAgICAgICAgICAgICByZXBseS0+d3JpdGVJbnQzMihzdGF0dXMpOwotICAgICAgICAgICAgcmVwbHktPndyaXRlSW50MzIoaGFuZGxlKTsKKyAgICAgICAgICAgIHJlcGx5LT53cml0ZUludDMyKHBvcnRJZCk7CiAgICAgICAgICAgICByZXR1cm4gTk9fRVJST1I7CiAgICAgICAgIH0gYnJlYWs7CiAKICAgICAgICAgY2FzZSBTVE9QX0FVRElPX1NPVVJDRTogewogICAgICAgICAgICAgQ0hFQ0tfSU5URVJGQUNFKElBdWRpb1BvbGljeVNlcnZpY2UsIGRhdGEsIHJlcGx5KTsKLSAgICAgICAgICAgIGF1ZGlvX3BhdGNoX2hhbmRsZV90IGhhbmRsZSA9IChhdWRpb19wYXRjaF9oYW5kbGVfdCkgZGF0YS5yZWFkSW50MzIoKTsKLSAgICAgICAgICAgIHN0YXR1c190IHN0YXR1cyA9IHN0b3BBdWRpb1NvdXJjZShoYW5kbGUpOworICAgICAgICAgICAgYXVkaW9fcG9ydF9oYW5kbGVfdCBwb3J0SWQgPSAoYXVkaW9fcG9ydF9oYW5kbGVfdCkgZGF0YS5yZWFkSW50MzIoKTsKKyAgICAgICAgICAgIHN0YXR1c190IHN0YXR1cyA9IHN0b3BBdWRpb1NvdXJjZShwb3J0SWQpOwogICAgICAgICAgICAgcmVwbHktPndyaXRlSW50MzIoc3RhdHVzKTsKICAgICAgICAgICAgIHJldHVybiBOT19FUlJPUjsKICAgICAgICAgfSBicmVhazsKQEAgLTE1ODcsNiArMTY2NywxMTYgQEAKICAgICAgICAgICAgIHJldHVybiBOT19FUlJPUjsKICAgICAgICAgfQogCisgICAgICAgIGNhc2UgQUREX1NUUkVBTV9ERUZBVUxUX0VGRkVDVDogeworICAgICAgICAgICAgQ0hFQ0tfSU5URVJGQUNFKElBdWRpb1BvbGljeVNlcnZpY2UsIGRhdGEsIHJlcGx5KTsKKyAgICAgICAgICAgIGVmZmVjdF91dWlkX3QgdHlwZTsKKyAgICAgICAgICAgIHN0YXR1c190IHN0YXR1cyA9IGRhdGEucmVhZCgmdHlwZSwgc2l6ZW9mKGVmZmVjdF91dWlkX3QpKTsKKyAgICAgICAgICAgIGlmIChzdGF0dXMgIT0gTk9fRVJST1IpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gc3RhdHVzOworICAgICAgICAgICAgfQorICAgICAgICAgICAgU3RyaW5nMTYgb3BQYWNrYWdlTmFtZTsKKyAgICAgICAgICAgIHN0YXR1cyA9IGRhdGEucmVhZFN0cmluZzE2KCZvcFBhY2thZ2VOYW1lKTsKKyAgICAgICAgICAgIGlmIChzdGF0dXMgIT0gTk9fRVJST1IpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gc3RhdHVzOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWZmZWN0X3V1aWRfdCB1dWlkOworICAgICAgICAgICAgc3RhdHVzID0gZGF0YS5yZWFkKCZ1dWlkLCBzaXplb2YoZWZmZWN0X3V1aWRfdCkpOworICAgICAgICAgICAgaWYgKHN0YXR1cyAhPSBOT19FUlJPUikgeworICAgICAgICAgICAgICAgIHJldHVybiBzdGF0dXM7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpbnQzMl90IHByaW9yaXR5ID0gZGF0YS5yZWFkSW50MzIoKTsKKyAgICAgICAgICAgIGF1ZGlvX3VzYWdlX3QgdXNhZ2UgPSAoYXVkaW9fdXNhZ2VfdCkgZGF0YS5yZWFkSW50MzIoKTsKKyAgICAgICAgICAgIGF1ZGlvX3VuaXF1ZV9pZF90IGlkID0gMDsKKyAgICAgICAgICAgIHJlcGx5LT53cml0ZUludDMyKHN0YXRpY19jYXN0IDxpbnQzMl90PihhZGRTdHJlYW1EZWZhdWx0RWZmZWN0KCZ0eXBlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3BQYWNrYWdlTmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZ1dWlkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJpb3JpdHksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1c2FnZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZpZCkpKTsKKyAgICAgICAgICAgIHJlcGx5LT53cml0ZUludDMyKGlkKTsKKyAgICAgICAgICAgIHJldHVybiBOT19FUlJPUjsKKyAgICAgICAgfQorCisgICAgICAgIGNhc2UgUkVNT1ZFX1NUUkVBTV9ERUZBVUxUX0VGRkVDVDogeworICAgICAgICAgICAgQ0hFQ0tfSU5URVJGQUNFKElBdWRpb1BvbGljeVNlcnZpY2UsIGRhdGEsIHJlcGx5KTsKKyAgICAgICAgICAgIGF1ZGlvX3VuaXF1ZV9pZF90IGlkID0gc3RhdGljX2Nhc3Q8YXVkaW9fdW5pcXVlX2lkX3Q+KGRhdGEucmVhZEludDMyKCkpOworICAgICAgICAgICAgcmVwbHktPndyaXRlSW50MzIoc3RhdGljX2Nhc3QgPGludDMyX3Q+KHJlbW92ZVN0cmVhbURlZmF1bHRFZmZlY3QoaWQpKSk7CisgICAgICAgICAgICByZXR1cm4gTk9fRVJST1I7CisgICAgICAgIH0KKworICAgICAgICBjYXNlIEFERF9TT1VSQ0VfREVGQVVMVF9FRkZFQ1Q6IHsKKyAgICAgICAgICAgIENIRUNLX0lOVEVSRkFDRShJQXVkaW9Qb2xpY3lTZXJ2aWNlLCBkYXRhLCByZXBseSk7CisgICAgICAgICAgICBlZmZlY3RfdXVpZF90IHR5cGU7CisgICAgICAgICAgICBzdGF0dXNfdCBzdGF0dXMgPSBkYXRhLnJlYWQoJnR5cGUsIHNpemVvZihlZmZlY3RfdXVpZF90KSk7CisgICAgICAgICAgICBpZiAoc3RhdHVzICE9IE5PX0VSUk9SKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIHN0YXR1czsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIFN0cmluZzE2IG9wUGFja2FnZU5hbWU7CisgICAgICAgICAgICBzdGF0dXMgPSBkYXRhLnJlYWRTdHJpbmcxNigmb3BQYWNrYWdlTmFtZSk7CisgICAgICAgICAgICBpZiAoc3RhdHVzICE9IE5PX0VSUk9SKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIHN0YXR1czsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVmZmVjdF91dWlkX3QgdXVpZDsKKyAgICAgICAgICAgIHN0YXR1cyA9IGRhdGEucmVhZCgmdXVpZCwgc2l6ZW9mKGVmZmVjdF91dWlkX3QpKTsKKyAgICAgICAgICAgIGlmIChzdGF0dXMgIT0gTk9fRVJST1IpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gc3RhdHVzOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaW50MzJfdCBwcmlvcml0eSA9IGRhdGEucmVhZEludDMyKCk7CisgICAgICAgICAgICBhdWRpb19zb3VyY2VfdCBzb3VyY2UgPSAoYXVkaW9fc291cmNlX3QpIGRhdGEucmVhZEludDMyKCk7CisgICAgICAgICAgICBhdWRpb191bmlxdWVfaWRfdCBpZCA9IDA7CisgICAgICAgICAgICByZXBseS0+d3JpdGVJbnQzMihzdGF0aWNfY2FzdCA8aW50MzJfdD4oYWRkU291cmNlRGVmYXVsdEVmZmVjdCgmdHlwZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wUGFja2FnZU5hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmdXVpZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByaW9yaXR5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc291cmNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmlkKSkpOworICAgICAgICAgICAgcmVwbHktPndyaXRlSW50MzIoaWQpOworICAgICAgICAgICAgcmV0dXJuIE5PX0VSUk9SOworICAgICAgICB9CisKKyAgICAgICAgY2FzZSBSRU1PVkVfU09VUkNFX0RFRkFVTFRfRUZGRUNUOiB7CisgICAgICAgICAgICBDSEVDS19JTlRFUkZBQ0UoSUF1ZGlvUG9saWN5U2VydmljZSwgZGF0YSwgcmVwbHkpOworICAgICAgICAgICAgYXVkaW9fdW5pcXVlX2lkX3QgaWQgPSBzdGF0aWNfY2FzdDxhdWRpb191bmlxdWVfaWRfdD4oZGF0YS5yZWFkSW50MzIoKSk7CisgICAgICAgICAgICByZXBseS0+d3JpdGVJbnQzMihzdGF0aWNfY2FzdCA8aW50MzJfdD4ocmVtb3ZlU291cmNlRGVmYXVsdEVmZmVjdChpZCkpKTsKKyAgICAgICAgICAgIHJldHVybiBOT19FUlJPUjsKKyAgICAgICAgfQorCisgICAgICAgIGNhc2UgU0VUX0FTU0lTVEFOVF9VSUQ6IHsKKyAgICAgICAgICAgIENIRUNLX0lOVEVSRkFDRShJQXVkaW9Qb2xpY3lTZXJ2aWNlLCBkYXRhLCByZXBseSk7CisgICAgICAgICAgICBpbnQzMl90IHVpZDsKKyAgICAgICAgICAgIHN0YXR1c190IHN0YXR1cyA9IGRhdGEucmVhZEludDMyKCZ1aWQpOworICAgICAgICAgICAgaWYgKHN0YXR1cyAhPSBOT19FUlJPUikgeworICAgICAgICAgICAgICAgIHJldHVybiBzdGF0dXM7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBzdGF0dXMgPSBzZXRBc3Npc3RhbnRVaWQodWlkKTsKKyAgICAgICAgICAgIHJlcGx5LT53cml0ZUludDMyKHN0YXRpY19jYXN0IDxpbnQzMl90PihzdGF0dXMpKTsKKyAgICAgICAgICAgIHJldHVybiBOT19FUlJPUjsKKyAgICAgICAgfQorCisgICAgICAgIGNhc2UgU0VUX0ExMVlfU0VSVklDRVNfVUlEUzogeworICAgICAgICAgICAgQ0hFQ0tfSU5URVJGQUNFKElBdWRpb1BvbGljeVNlcnZpY2UsIGRhdGEsIHJlcGx5KTsKKyAgICAgICAgICAgIHN0ZDo6dmVjdG9yPHVpZF90PiB1aWRzOworICAgICAgICAgICAgaW50MzJfdCBzaXplOworICAgICAgICAgICAgc3RhdHVzX3Qgc3RhdHVzID0gZGF0YS5yZWFkSW50MzIoJnNpemUpOworICAgICAgICAgICAgaWYgKHN0YXR1cyAhPSBOT19FUlJPUikgeworICAgICAgICAgICAgICAgIHJldHVybiBzdGF0dXM7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoc2l6ZSA+IE1BWF9JVEVNU19QRVJfTElTVCkgeworICAgICAgICAgICAgICAgIHNpemUgPSBNQVhfSVRFTVNfUEVSX0xJU1Q7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBmb3IgKGludDMyX3QgaSA9IDA7IGkgPCBzaXplOyBpKyspIHsKKyAgICAgICAgICAgICAgICBpbnQzMl90IHVpZDsKKyAgICAgICAgICAgICAgICBzdGF0dXMgPSAgZGF0YS5yZWFkSW50MzIoJnVpZCk7CisgICAgICAgICAgICAgICAgaWYgKHN0YXR1cyAhPSBOT19FUlJPUikgeworICAgICAgICAgICAgICAgICAgICByZXR1cm4gc3RhdHVzOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB1aWRzLnB1c2hfYmFjayh1aWQpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgc3RhdHVzID0gc2V0QTExeVNlcnZpY2VzVWlkcyh1aWRzKTsKKyAgICAgICAgICAgIHJlcGx5LT53cml0ZUludDMyKHN0YXRpY19jYXN0IDxpbnQzMl90PihzdGF0dXMpKTsKKyAgICAgICAgICAgIHJldHVybiBOT19FUlJPUjsKKyAgICAgICAgfQorCiAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICByZXR1cm4gQkJpbmRlcjo6b25UcmFuc2FjdChjb2RlLCBkYXRhLCByZXBseSwgZmxhZ3MpOwogICAgIH0KZGlmZiAtLWdpdCBhL21lZGlhL2xpYmF1ZGlvY2xpZW50L2luY2x1ZGUvbWVkaWEvQXVkaW9FZmZlY3QuaCBiL21lZGlhL2xpYmF1ZGlvY2xpZW50L2luY2x1ZGUvbWVkaWEvQXVkaW9FZmZlY3QuaAppbmRleCAzMjRiY2I5Li42YmQ0MTM3IDEwMDY0NAotLS0gYS9tZWRpYS9saWJhdWRpb2NsaWVudC9pbmNsdWRlL21lZGlhL0F1ZGlvRWZmZWN0LmgKKysrIGIvbWVkaWEvbGliYXVkaW9jbGllbnQvaW5jbHVkZS9tZWRpYS9BdWRpb0VmZmVjdC5oCkBAIC05MCwyNyArOTAsMzQgQEAKICAgICAgKi8KICAgICBzdGF0aWMgc3RhdHVzX3QgcXVlcnlFZmZlY3QodWludDMyX3QgaW5kZXgsIGVmZmVjdF9kZXNjcmlwdG9yX3QgKmRlc2NyaXB0b3IpOwogCi0KICAgICAvKgotICAgICAqIFJldHVybnMgdGhlIGRlc2NyaXB0b3IgZm9yIHRoZSBzcGVjaWZpZWQgZWZmZWN0IHV1aWQuCisgICAgICogUmV0dXJucyBhIGRlc2NyaXB0b3IgZm9yIHRoZSBzcGVjaWZpZWQgZWZmZWN0IHV1aWQgb3IgdHlwZS4KKyAgICAgKgorICAgICAqIExvb2t1cCBhbiBlZmZlY3QgYnkgdXVpZCwgb3IgaWYgdGhhdCdzIHVuc3BlY2lmaWVkIChFRkZFQ1RfVVVJRF9OVUxMKSwKKyAgICAgKiBkbyBzbyBieSB0eXBlIGFuZCBwcmVmZXJyZWQgZmxhZ3MgaW5zdGVhZC4KICAgICAgKgogICAgICAqIFBhcmFtZXRlcnM6CiAgICAgICogICAgICB1dWlkOiAgICAgICBwb2ludGVyIHRvIGVmZmVjdCB1dWlkLgorICAgICAqICAgICAgdHlwZTogICAgICAgcG9pbnRlciB0byBlZmZlY3QgdHlwZSB1dWlkLgorICAgICAqICAgICAgcHJlZmVycmVkVHlwZUZsYWdzOiBpZiBtdWx0aXBsZSBlZmZlY3RzIG9mIHRoZSBnaXZlbiB0eXBlIGV4aXN0LAorICAgICAqICAgICAgICAgICAgICAgICAgb25lIHdpdGggYSBtYXRjaGluZyB0eXBlIGZsYWcgd2lsbCBiZSBjaG9zZW4gb3ZlciBvbmUgd2l0aG91dC4KKyAgICAgKiAgICAgICAgICAgICAgICAgIFVzZSBFRkZFQ1RfRkxBR19UWVBFX01BU0sgdG8gaW5kaWNhdGUgbm8gcHJlZmVyZW5jZS4KICAgICAgKiAgICAgIGRlc2NyaXB0b3I6IGFkZHJlc3Mgd2hlcmUgdGhlIGVmZmVjdCBkZXNjcmlwdG9yIHNob3VsZCBiZSByZXR1cm5lZC4KICAgICAgKgogICAgICAqIFJldHVybmVkIHN0YXR1cyAoZnJvbSB1dGlscy9FcnJvcnMuaCkgY2FuIGJlOgogICAgICAqICAgICAgTk9fRVJST1IgICAgICAgIHN1Y2Nlc3NmdWwgb3BlcmF0aW9uLgogICAgICAqICAgICAgUEVSTUlTU0lPTl9ERU5JRUQgY291bGQgbm90IGdldCBBdWRpb0ZsaW5nZXIgaW50ZXJmYWNlCiAgICAgICogICAgICBOT19JTklUICAgICAgICAgZWZmZWN0IGxpYnJhcnkgZmFpbGVkIHRvIGluaXRpYWxpemUKLSAgICAgKiAgICAgIEJBRF9WQUxVRSAgICAgICBpbnZhbGlkIHV1aWQgb3IgZGVzY3JpcHRvciBwb2ludGVycworICAgICAqICAgICAgQkFEX1ZBTFVFICAgICAgIGludmFsaWQgdHlwZSBvciBkZXNjcmlwdG9yIHBvaW50ZXJzCiAgICAgICogICAgICBOQU1FX05PVF9GT1VORCAgbm8gZWZmZWN0IHdpdGggdGhpcyB1dWlkIGZvdW5kCiAgICAgICoKICAgICAgKiBSZXR1cm5lZCB2YWx1ZQogICAgICAqICAgKmRlc2NyaXB0b3IgdXBkYXRlZCB3aXRoIGVmZmVjdCBkZXNjcmlwdG9yCiAgICAgICovCiAgICAgc3RhdGljIHN0YXR1c190IGdldEVmZmVjdERlc2NyaXB0b3IoY29uc3QgZWZmZWN0X3V1aWRfdCAqdXVpZCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlZmZlY3RfZGVzY3JpcHRvcl90ICpkZXNjcmlwdG9yKSAvKmNvbnN0Ki87Ci0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBlZmZlY3RfdXVpZF90ICp0eXBlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90IHByZWZlcnJlZFR5cGVGbGFnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVmZmVjdF9kZXNjcmlwdG9yX3QgKmRlc2NyaXB0b3IpOwogCiAgICAgLyoKICAgICAgKiBSZXR1cm5zIGEgbGlzdCBvZiBkZXNjcmlwdG9ycyBjb3JyZXNwb25kaW5nIHRvIHRoZSBwcmUgcHJvY2Vzc2luZ3MgZW5hYmxlZCBieSBkZWZhdWx0CkBAIC0xNDQsNiArMTUxLDEzMiBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90ICpjb3VudCk7CiAKICAgICAvKgorICAgICAqIEdldHMgYSBuZXcgc3lzdGVtLXdpZGUgdW5pcXVlIGVmZmVjdCBpZC4KKyAgICAgKgorICAgICAqIFBhcmFtZXRlcnM6CisgICAgICogICAgICBpZDogVGhlIGFkZHJlc3MgdG8gcmV0dXJuIHRoZSBnZW5lcmF0ZWQgaWQuCisgICAgICoKKyAgICAgKiBSZXR1cm5lZCBzdGF0dXMgKGZyb20gdXRpbHMvRXJyb3JzLmgpIGNhbiBiZToKKyAgICAgKiAgICAgIE5PX0VSUk9SICAgICAgICBzdWNjZXNzZnVsIG9wZXJhdGlvbi4KKyAgICAgKiAgICAgIFBFUk1JU1NJT05fREVOSUVEIGNvdWxkIG5vdCBnZXQgQXVkaW9GbGluZ2VyIGludGVyZmFjZQorICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgb3IgY2FsbGVyIGxhY2tzIHJlcXVpcmVkIHBlcm1pc3Npb25zLgorICAgICAqIFJldHVybmVkIHZhbHVlCisgICAgICogICAqaWQ6ICBUaGUgbmV3IHVuaXF1ZSBzeXN0ZW0td2lkZSBlZmZlY3QgaWQuCisgICAgICovCisgICAgc3RhdGljIHN0YXR1c190IG5ld0VmZmVjdFVuaXF1ZUlkKGF1ZGlvX3VuaXF1ZV9pZF90KiBpZCk7CisKKyAgICAvKgorICAgICAqIFN0YXRpYyBtZXRob2RzIGZvciBhZGRpbmcvcmVtb3Zpbmcgc3lzdGVtLXdpZGUgZWZmZWN0cy4KKyAgICAgKi8KKworICAgIC8qCisgICAgICogQWRkcyBhbiBlZmZlY3QgdG8gdGhlIGxpc3Qgb2YgZGVmYXVsdCBvdXRwdXQgZWZmZWN0cyBmb3IgYSBnaXZlbiBzb3VyY2UgdHlwZS4KKyAgICAgKgorICAgICAqIElmIHRoZSBlZmZlY3QgaXMgbm8gbG9uZ2VyIGF2YWlsYWJsZSB3aGVuIGEgc291cmNlIG9mIHRoZSBnaXZlbiB0eXBlCisgICAgICogaXMgY3JlYXRlZCwgdGhlIHN5c3RlbSB3aWxsIGNvbnRpbnVlIHdpdGhvdXQgYWRkaW5nIGl0LgorICAgICAqCisgICAgICogUGFyYW1ldGVyczoKKyAgICAgKiAgIHR5cGVTdHI6ICBUeXBlIHV1aWQgb2YgZWZmZWN0IHRvIGJlIGEgZGVmYXVsdDogY2FuIGJlIG51bGwgaWYgdXVpZFN0ciBpcyBzcGVjaWZpZWQuCisgICAgICogICAgICAgICAgICAgVGhpcyBtYXkgY29ycmVzcG9uZCB0byB0aGUgT3BlblNMIEVTIGludGVyZmFjZSBpbXBsZW1lbnRlZCBieSB0aGlzIGVmZmVjdCwKKyAgICAgKiAgICAgICAgICAgICBvciBjb3VsZCBiZSBzb21lIHZlbmRvci1kZWZpbmVkIHR5cGUuCisgICAgICogICBvcFBhY2thZ2VOYW1lOiBUaGUgcGFja2FnZSBuYW1lIHVzZWQgZm9yIGFwcCBvcCBjaGVja3MuCisgICAgICogICB1dWlkU3RyOiAgVXVpZCBvZiBlZmZlY3QgdG8gYmUgYSBkZWZhdWx0OiBjYW4gYmUgbnVsbCBpZiB0eXBlIGlzIHNwZWNpZmllZC4KKyAgICAgKiAgICAgICAgICAgICBUaGlzIHV1aWQgY29ycmVzcG9uZHMgdG8gYSBwYXJ0aWN1bGFyIGltcGxlbWVudGF0aW9uIG9mIGFuIGVmZmVjdCB0eXBlLgorICAgICAqICAgICAgICAgICAgIE5vdGUgaWYgYm90aCB1dWlkU3RyIGFuZCB0eXBlU3RyIGFyZSBzcGVjaWZpZWQsIHR5cGVTdHIgaXMgaWdub3JlZC4KKyAgICAgKiAgIHByaW9yaXR5OiBSZXF1ZXN0ZWQgcHJpb3JpdHkgZm9yIGVmZmVjdCBjb250cm9sOiB0aGUgcHJpb3JpdHkgbGV2ZWwgY29ycmVzcG9uZHMgdG8gdGhlCisgICAgICogICAgICAgICAgICAgdmFsdWUgb2YgcHJpb3JpdHkgcGFyYW1ldGVyOiBuZWdhdGl2ZSB2YWx1ZXMgaW5kaWNhdGUgbG93ZXIgcHJpb3JpdGllcywgcG9zaXRpdmUKKyAgICAgKiAgICAgICAgICAgICB2YWx1ZXMgaGlnaGVyIHByaW9yaXRpZXMsIDAgYmVpbmcgdGhlIG5vcm1hbCBwcmlvcml0eS4KKyAgICAgKiAgIHNvdXJjZTogICBUaGUgc291cmNlIHRoaXMgZWZmZWN0IHNob3VsZCBiZSBhIGRlZmF1bHQgZm9yLgorICAgICAqICAgaWQ6ICAgICAgIEFkZHJlc3Mgd2hlcmUgdGhlIHN5c3RlbS13aWRlIHVuaXF1ZSBpZCBvZiB0aGUgZGVmYXVsdCBlZmZlY3Qgc2hvdWxkIGJlIHJldHVybmVkLgorICAgICAqCisgICAgICogUmV0dXJuZWQgc3RhdHVzIChmcm9tIHV0aWxzL0Vycm9ycy5oKSBjYW4gYmU6CisgICAgICogICAgICBOT19FUlJPUiAgICAgICAgc3VjY2Vzc2Z1bCBvcGVyYXRpb24uCisgICAgICogICAgICBQRVJNSVNTSU9OX0RFTklFRCBjb3VsZCBub3QgZ2V0IEF1ZGlvRmxpbmdlciBpbnRlcmZhY2UKKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgIG9yIGNhbGxlciBsYWNrcyByZXF1aXJlZCBwZXJtaXNzaW9ucy4KKyAgICAgKiAgICAgIE5PX0lOSVQgICAgICAgICBlZmZlY3QgbGlicmFyeSBmYWlsZWQgdG8gaW5pdGlhbGl6ZS4KKyAgICAgKiAgICAgIEJBRF9WQUxVRSAgICAgICBpbnZhbGlkIHNvdXJjZSwgdHlwZSB1dWlkIG9yIGltcGxlbWVudGF0aW9uIHV1aWQuCisgICAgICogICAgICBOQU1FX05PVF9GT1VORCAgbm8gZWZmZWN0IHdpdGggdGhpcyB1dWlkIG9yIHR5cGUgZm91bmQuCisgICAgICoKKyAgICAgKiBSZXR1cm5lZCB2YWx1ZQorICAgICAqICAgKmlkOiAgVGhlIHN5c3RlbS13aWRlIHVuaXF1ZSBpZCBvZiB0aGUgYWRkZWQgZGVmYXVsdCBlZmZlY3QuCisgICAgICovCisgICAgc3RhdGljIHN0YXR1c190IGFkZFNvdXJjZURlZmF1bHRFZmZlY3QoY29uc3QgY2hhciogdHlwZVN0ciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBTdHJpbmcxNiYgb3BQYWNrYWdlTmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyKiB1dWlkU3RyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludDMyX3QgcHJpb3JpdHksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXVkaW9fc291cmNlX3Qgc291cmNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF1ZGlvX3VuaXF1ZV9pZF90KiBpZCk7CisKKyAgICAvKgorICAgICAqIEFkZHMgYW4gZWZmZWN0IHRvIHRoZSBsaXN0IG9mIGRlZmF1bHQgb3V0cHV0IGVmZmVjdHMgZm9yIGEgZ2l2ZW4gc3RyZWFtIHR5cGUuCisgICAgICoKKyAgICAgKiBJZiB0aGUgZWZmZWN0IGlzIG5vIGxvbmdlciBhdmFpbGFibGUgd2hlbiBhIHN0cmVhbSBvZiB0aGUgZ2l2ZW4gdHlwZQorICAgICAqIGlzIGNyZWF0ZWQsIHRoZSBzeXN0ZW0gd2lsbCBjb250aW51ZSB3aXRob3V0IGFkZGluZyBpdC4KKyAgICAgKgorICAgICAqIFBhcmFtZXRlcnM6CisgICAgICogICB0eXBlU3RyOiAgVHlwZSB1dWlkIG9mIGVmZmVjdCB0byBiZSBhIGRlZmF1bHQ6IGNhbiBiZSBudWxsIGlmIHV1aWRTdHIgaXMgc3BlY2lmaWVkLgorICAgICAqICAgICAgICAgICAgIFRoaXMgbWF5IGNvcnJlc3BvbmQgdG8gdGhlIE9wZW5TTCBFUyBpbnRlcmZhY2UgaW1wbGVtZW50ZWQgYnkgdGhpcyBlZmZlY3QsCisgICAgICogICAgICAgICAgICAgb3IgY291bGQgYmUgc29tZSB2ZW5kb3ItZGVmaW5lZCB0eXBlLgorICAgICAqICAgb3BQYWNrYWdlTmFtZTogVGhlIHBhY2thZ2UgbmFtZSB1c2VkIGZvciBhcHAgb3AgY2hlY2tzLgorICAgICAqICAgdXVpZFN0cjogIFV1aWQgb2YgZWZmZWN0IHRvIGJlIGEgZGVmYXVsdDogY2FuIGJlIG51bGwgaWYgdHlwZSBpcyBzcGVjaWZpZWQuCisgICAgICogICAgICAgICAgICAgVGhpcyB1dWlkIGNvcnJlc3BvbmRzIHRvIGEgcGFydGljdWxhciBpbXBsZW1lbnRhdGlvbiBvZiBhbiBlZmZlY3QgdHlwZS4KKyAgICAgKiAgICAgICAgICAgICBOb3RlIGlmIGJvdGggdXVpZFN0ciBhbmQgdHlwZVN0ciBhcmUgc3BlY2lmaWVkLCB0eXBlU3RyIGlzIGlnbm9yZWQuCisgICAgICogICBwcmlvcml0eTogUmVxdWVzdGVkIHByaW9yaXR5IGZvciBlZmZlY3QgY29udHJvbDogdGhlIHByaW9yaXR5IGxldmVsIGNvcnJlc3BvbmRzIHRvIHRoZQorICAgICAqICAgICAgICAgICAgIHZhbHVlIG9mIHByaW9yaXR5IHBhcmFtZXRlcjogbmVnYXRpdmUgdmFsdWVzIGluZGljYXRlIGxvd2VyIHByaW9yaXRpZXMsIHBvc2l0aXZlCisgICAgICogICAgICAgICAgICAgdmFsdWVzIGhpZ2hlciBwcmlvcml0aWVzLCAwIGJlaW5nIHRoZSBub3JtYWwgcHJpb3JpdHkuCisgICAgICogICB1c2FnZTogICAgVGhlIHVzYWdlIHRoaXMgZWZmZWN0IHNob3VsZCBiZSBhIGRlZmF1bHQgZm9yLiBVbnJlY29nbml6ZWQgdmFsdWVzIHdpbGwgYmUKKyAgICAgKiAgICAgICAgICAgICB0cmVhdGVkIGFzIEFVRElPX1VTQUdFX1VOS05PV04uCisgICAgICogICBpZDogICAgICAgQWRkcmVzcyB3aGVyZSB0aGUgc3lzdGVtLXdpZGUgdW5pcXVlIGlkIG9mIHRoZSBkZWZhdWx0IGVmZmVjdCBzaG91bGQgYmUgcmV0dXJuZWQuCisgICAgICoKKyAgICAgKiBSZXR1cm5lZCBzdGF0dXMgKGZyb20gdXRpbHMvRXJyb3JzLmgpIGNhbiBiZToKKyAgICAgKiAgICAgIE5PX0VSUk9SICAgICAgICBzdWNjZXNzZnVsIG9wZXJhdGlvbi4KKyAgICAgKiAgICAgIFBFUk1JU1NJT05fREVOSUVEIGNvdWxkIG5vdCBnZXQgQXVkaW9GbGluZ2VyIGludGVyZmFjZQorICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgb3IgY2FsbGVyIGxhY2tzIHJlcXVpcmVkIHBlcm1pc3Npb25zLgorICAgICAqICAgICAgTk9fSU5JVCAgICAgICAgIGVmZmVjdCBsaWJyYXJ5IGZhaWxlZCB0byBpbml0aWFsaXplLgorICAgICAqICAgICAgQkFEX1ZBTFVFICAgICAgIGludmFsaWQgdHlwZSB1dWlkIG9yIGltcGxlbWVudGF0aW9uIHV1aWQuCisgICAgICogICAgICBOQU1FX05PVF9GT1VORCAgbm8gZWZmZWN0IHdpdGggdGhpcyB1dWlkIG9yIHR5cGUgZm91bmQuCisgICAgICoKKyAgICAgKiBSZXR1cm5lZCB2YWx1ZQorICAgICAqICAgKmlkOiAgVGhlIHN5c3RlbS13aWRlIHVuaXF1ZSBpZCBvZiB0aGUgYWRkZWQgZGVmYXVsdCBlZmZlY3QuCisgICAgICovCisgICAgc3RhdGljIHN0YXR1c190IGFkZFN0cmVhbURlZmF1bHRFZmZlY3QoY29uc3QgY2hhciogdHlwZVN0ciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBTdHJpbmcxNiYgb3BQYWNrYWdlTmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyKiB1dWlkU3RyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludDMyX3QgcHJpb3JpdHksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXVkaW9fdXNhZ2VfdCB1c2FnZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdWRpb191bmlxdWVfaWRfdCogaWQpOworCisgICAgLyoKKyAgICAgKiBSZW1vdmVzIGFuIGVmZmVjdCBmcm9tIHRoZSBsaXN0IG9mIGRlZmF1bHQgb3V0cHV0IGVmZmVjdHMgZm9yIGEgZ2l2ZW4gc291cmNlIHR5cGUuCisgICAgICoKKyAgICAgKiBQYXJhbWV0ZXJzOgorICAgICAqICAgICAgaWQ6IFRoZSBzeXN0ZW0td2lkZSB1bmlxdWUgaWQgb2YgdGhlIGVmZmVjdCB0aGF0IHNob3VsZCBubyBsb25nZXIgYmUgYSBkZWZhdWx0LgorICAgICAqCisgICAgICogUmV0dXJuZWQgc3RhdHVzIChmcm9tIHV0aWxzL0Vycm9ycy5oKSBjYW4gYmU6CisgICAgICogICAgICBOT19FUlJPUiAgICAgICAgc3VjY2Vzc2Z1bCBvcGVyYXRpb24uCisgICAgICogICAgICBQRVJNSVNTSU9OX0RFTklFRCBjb3VsZCBub3QgZ2V0IEF1ZGlvRmxpbmdlciBpbnRlcmZhY2UKKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgIG9yIGNhbGxlciBsYWNrcyByZXF1aXJlZCBwZXJtaXNzaW9ucy4KKyAgICAgKiAgICAgIE5PX0lOSVQgICAgICAgICBlZmZlY3QgbGlicmFyeSBmYWlsZWQgdG8gaW5pdGlhbGl6ZS4KKyAgICAgKiAgICAgIEJBRF9WQUxVRSAgICAgICBpbnZhbGlkIGlkLgorICAgICAqLworICAgIHN0YXRpYyBzdGF0dXNfdCByZW1vdmVTb3VyY2VEZWZhdWx0RWZmZWN0KGF1ZGlvX3VuaXF1ZV9pZF90IGlkKTsKKworICAgIC8qCisgICAgICogUmVtb3ZlcyBhbiBlZmZlY3QgZnJvbSB0aGUgbGlzdCBvZiBkZWZhdWx0IG91dHB1dCBlZmZlY3RzIGZvciBhIGdpdmVuIHN0cmVhbSB0eXBlLgorICAgICAqCisgICAgICogUGFyYW1ldGVyczoKKyAgICAgKiAgICAgIGlkOiBUaGUgc3lzdGVtLXdpZGUgdW5pcXVlIGlkIG9mIHRoZSBlZmZlY3QgdGhhdCBzaG91bGQgbm8gbG9uZ2VyIGJlIGEgZGVmYXVsdC4KKyAgICAgKgorICAgICAqIFJldHVybmVkIHN0YXR1cyAoZnJvbSB1dGlscy9FcnJvcnMuaCkgY2FuIGJlOgorICAgICAqICAgICAgTk9fRVJST1IgICAgICAgIHN1Y2Nlc3NmdWwgb3BlcmF0aW9uLgorICAgICAqICAgICAgUEVSTUlTU0lPTl9ERU5JRUQgY291bGQgbm90IGdldCBBdWRpb0ZsaW5nZXIgaW50ZXJmYWNlCisgICAgICogICAgICAgICAgICAgICAgICAgICAgICBvciBjYWxsZXIgbGFja3MgcmVxdWlyZWQgcGVybWlzc2lvbnMuCisgICAgICogICAgICBOT19JTklUICAgICAgICAgZWZmZWN0IGxpYnJhcnkgZmFpbGVkIHRvIGluaXRpYWxpemUuCisgICAgICogICAgICBCQURfVkFMVUUgICAgICAgaW52YWxpZCBpZC4KKyAgICAgKi8KKyAgICBzdGF0aWMgc3RhdHVzX3QgcmVtb3ZlU3RyZWFtRGVmYXVsdEVmZmVjdChhdWRpb191bmlxdWVfaWRfdCBpZCk7CisKKyAgICAvKgogICAgICAqIEV2ZW50cyB1c2VkIGJ5IGNhbGxiYWNrIGZ1bmN0aW9uIChlZmZlY3RfY2FsbGJhY2tfdCkuCiAgICAgICovCiAgICAgZW51bSBldmVudF90eXBlIHsKZGlmZiAtLWdpdCBhL21lZGlhL2xpYmF1ZGlvY2xpZW50L2luY2x1ZGUvbWVkaWEvQXVkaW9NaXhlci5oIGIvbWVkaWEvbGliYXVkaW9jbGllbnQvaW5jbHVkZS9tZWRpYS9BdWRpb01peGVyLmgKaW5kZXggY2Y3ZDkwZi4uYWEwMzZhOCAxMDA2NDQKLS0tIGEvbWVkaWEvbGliYXVkaW9jbGllbnQvaW5jbHVkZS9tZWRpYS9BdWRpb01peGVyLmgKKysrIGIvbWVkaWEvbGliYXVkaW9jbGllbnQvaW5jbHVkZS9tZWRpYS9BdWRpb01peGVyLmgKQEAgLTE4LDE3ICsxOCwxOCBAQAogI2lmbmRlZiBBTkRST0lEX0FVRElPX01JWEVSX0gKICNkZWZpbmUgQU5EUk9JRF9BVURJT19NSVhFUl9ICiAKKyNpbmNsdWRlIDxtYXA+CiAjaW5jbHVkZSA8cHRocmVhZC5oPgogI2luY2x1ZGUgPHNzdHJlYW0+CiAjaW5jbHVkZSA8c3RkaW50Lmg+CiAjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CiAjaW5jbHVkZSA8dW5vcmRlcmVkX21hcD4KKyNpbmNsdWRlIDx2ZWN0b3I+CiAKICNpbmNsdWRlIDxtZWRpYS9BdWRpb0J1ZmZlclByb3ZpZGVyLmg+CiAjaW5jbHVkZSA8bWVkaWEvQXVkaW9SZXNhbXBsZXIuaD4KICNpbmNsdWRlIDxtZWRpYS9BdWRpb1Jlc2FtcGxlclB1YmxpYy5oPgogI2luY2x1ZGUgPG1lZGlhL0J1ZmZlclByb3ZpZGVycy5oPgotI2luY2x1ZGUgPG1lZGlhL25ibG9nL05CTG9nLmg+CiAjaW5jbHVkZSA8c3lzdGVtL2F1ZGlvLmg+CiAjaW5jbHVkZSA8dXRpbHMvQ29tcGF0Lmg+CiAjaW5jbHVkZSA8dXRpbHMvdGhyZWFkcy5oPgpAQCAtNDEsNiArNDIsMTAgQEAKIAogbmFtZXNwYWNlIGFuZHJvaWQgewogCituYW1lc3BhY2UgTkJMb2cgeworY2xhc3MgV3JpdGVyOworfSAgIC8vIG5hbWVzcGFjZSBOQkxvZworCiAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKIGNsYXNzIEF1ZGlvTWl4ZXIKZGlmZiAtLWdpdCBhL21lZGlhL2xpYmF1ZGlvY2xpZW50L2luY2x1ZGUvbWVkaWEvQXVkaW9QYXJhbWV0ZXIuaCBiL21lZGlhL2xpYmF1ZGlvY2xpZW50L2luY2x1ZGUvbWVkaWEvQXVkaW9QYXJhbWV0ZXIuaAppbmRleCA5NjdkODk1Li4yNDgzN2UzIDEwMDY0NAotLS0gYS9tZWRpYS9saWJhdWRpb2NsaWVudC9pbmNsdWRlL21lZGlhL0F1ZGlvUGFyYW1ldGVyLmgKKysrIGIvbWVkaWEvbGliYXVkaW9jbGllbnQvaW5jbHVkZS9tZWRpYS9BdWRpb1BhcmFtZXRlci5oCkBAIC02NCw2ICs2NCw5IEBACiAgICAgc3RhdGljIGNvbnN0IGNoYXIgKiBjb25zdCBrZXlQcmVzZW50YXRpb25JZDsKICAgICBzdGF0aWMgY29uc3QgY2hhciAqIGNvbnN0IGtleVByb2dyYW1JZDsKIAorICAgIC8vICBrZXlBdWRpb0xhbmd1YWdlUHJlZmVycmVkOiBQcmVmZXJyZWQgYXVkaW8gbGFuZ3VhZ2UKKyAgICBzdGF0aWMgY29uc3QgY2hhciAqIGNvbnN0IGtleUF1ZGlvTGFuZ3VhZ2VQcmVmZXJyZWQ7CisKICAgICAvLyAga2V5U3RyZWFtQ29ubmVjdCAvIERpc2Nvbm5lY3Q6IHZhbHVlIGlzIGFuIGludCBpbiBhdWRpb19kZXZpY2VzX3QKICAgICBzdGF0aWMgY29uc3QgY2hhciAqIGNvbnN0IGtleVN0cmVhbUNvbm5lY3Q7CiAgICAgc3RhdGljIGNvbnN0IGNoYXIgKiBjb25zdCBrZXlTdHJlYW1EaXNjb25uZWN0OwpkaWZmIC0tZ2l0IGEvbWVkaWEvbGliYXVkaW9jbGllbnQvaW5jbHVkZS9tZWRpYS9BdWRpb1BvbGljeUhlbHBlci5oIGIvbWVkaWEvbGliYXVkaW9jbGllbnQvaW5jbHVkZS9tZWRpYS9BdWRpb1BvbGljeUhlbHBlci5oCmluZGV4IGZiZTk1NDYuLjQ5NDMyYjcgMTAwNjQ0Ci0tLSBhL21lZGlhL2xpYmF1ZGlvY2xpZW50L2luY2x1ZGUvbWVkaWEvQXVkaW9Qb2xpY3lIZWxwZXIuaAorKysgYi9tZWRpYS9saWJhdWRpb2NsaWVudC9pbmNsdWRlL21lZGlhL0F1ZGlvUG9saWN5SGVscGVyLmgKQEAgLTIwLDYgKzIwLDQzIEBACiAjaW5jbHVkZSA8c3lzdGVtL2F1ZGlvLmg+CiAKIHN0YXRpYyBpbmxpbmUKK2F1ZGlvX3N0cmVhbV90eXBlX3QgYXVkaW9fdXNhZ2VfdG9fc3RyZWFtX3R5cGUoY29uc3QgYXVkaW9fdXNhZ2VfdCB1c2FnZSkKK3sKKyAgICBzd2l0Y2godXNhZ2UpIHsKKyAgICAgICAgY2FzZSBBVURJT19VU0FHRV9NRURJQToKKyAgICAgICAgY2FzZSBBVURJT19VU0FHRV9HQU1FOgorICAgICAgICBjYXNlIEFVRElPX1VTQUdFX0FTU0lTVEFOQ0VfTkFWSUdBVElPTl9HVUlEQU5DRToKKyAgICAgICAgY2FzZSBBVURJT19VU0FHRV9BU1NJU1RBTlQ6CisgICAgICAgICAgICByZXR1cm4gQVVESU9fU1RSRUFNX01VU0lDOworICAgICAgICBjYXNlIEFVRElPX1VTQUdFX0FTU0lTVEFOQ0VfQUNDRVNTSUJJTElUWToKKyAgICAgICAgICAgIHJldHVybiBBVURJT19TVFJFQU1fQUNDRVNTSUJJTElUWTsKKyAgICAgICAgY2FzZSBBVURJT19VU0FHRV9BU1NJU1RBTkNFX1NPTklGSUNBVElPTjoKKyAgICAgICAgICAgIHJldHVybiBBVURJT19TVFJFQU1fU1lTVEVNOworICAgICAgICBjYXNlIEFVRElPX1VTQUdFX1ZPSUNFX0NPTU1VTklDQVRJT046CisgICAgICAgICAgICByZXR1cm4gQVVESU9fU1RSRUFNX1ZPSUNFX0NBTEw7CisKKyAgICAgICAgY2FzZSBBVURJT19VU0FHRV9WT0lDRV9DT01NVU5JQ0FUSU9OX1NJR05BTExJTkc6CisgICAgICAgICAgICByZXR1cm4gQVVESU9fU1RSRUFNX0RUTUY7CisKKyAgICAgICAgY2FzZSBBVURJT19VU0FHRV9BTEFSTToKKyAgICAgICAgICAgIHJldHVybiBBVURJT19TVFJFQU1fQUxBUk07CisgICAgICAgIGNhc2UgQVVESU9fVVNBR0VfTk9USUZJQ0FUSU9OX1RFTEVQSE9OWV9SSU5HVE9ORToKKyAgICAgICAgICAgIHJldHVybiBBVURJT19TVFJFQU1fUklORzsKKworICAgICAgICBjYXNlIEFVRElPX1VTQUdFX05PVElGSUNBVElPTjoKKyAgICAgICAgY2FzZSBBVURJT19VU0FHRV9OT1RJRklDQVRJT05fQ09NTVVOSUNBVElPTl9SRVFVRVNUOgorICAgICAgICBjYXNlIEFVRElPX1VTQUdFX05PVElGSUNBVElPTl9DT01NVU5JQ0FUSU9OX0lOU1RBTlQ6CisgICAgICAgIGNhc2UgQVVESU9fVVNBR0VfTk9USUZJQ0FUSU9OX0NPTU1VTklDQVRJT05fREVMQVlFRDoKKyAgICAgICAgY2FzZSBBVURJT19VU0FHRV9OT1RJRklDQVRJT05fRVZFTlQ6CisgICAgICAgICAgICByZXR1cm4gQVVESU9fU1RSRUFNX05PVElGSUNBVElPTjsKKworICAgICAgICBjYXNlIEFVRElPX1VTQUdFX1VOS05PV046CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICByZXR1cm4gQVVESU9fU1RSRUFNX01VU0lDOworICAgIH0KK30KKworc3RhdGljIGlubGluZQogYXVkaW9fc3RyZWFtX3R5cGVfdCBhdWRpb19hdHRyaWJ1dGVzX3RvX3N0cmVhbV90eXBlKGNvbnN0IGF1ZGlvX2F0dHJpYnV0ZXNfdCAqYXR0cikKIHsKICAgICAvLyBmbGFncyB0byBzdHJlYW0gdHlwZSBtYXBwaW5nCkBAIC0zMSwzOCArNjgsNyBAQAogICAgIH0KIAogICAgIC8vIHVzYWdlIHRvIHN0cmVhbSB0eXBlIG1hcHBpbmcKLSAgICBzd2l0Y2ggKGF0dHItPnVzYWdlKSB7Ci0gICAgY2FzZSBBVURJT19VU0FHRV9NRURJQToKLSAgICBjYXNlIEFVRElPX1VTQUdFX0dBTUU6Ci0gICAgY2FzZSBBVURJT19VU0FHRV9BU1NJU1RBTkNFX05BVklHQVRJT05fR1VJREFOQ0U6Ci0gICAgY2FzZSBBVURJT19VU0FHRV9BU1NJU1RBTlQ6Ci0gICAgICAgIHJldHVybiBBVURJT19TVFJFQU1fTVVTSUM7Ci0gICAgY2FzZSBBVURJT19VU0FHRV9BU1NJU1RBTkNFX0FDQ0VTU0lCSUxJVFk6Ci0gICAgICAgIHJldHVybiBBVURJT19TVFJFQU1fQUNDRVNTSUJJTElUWTsKLSAgICBjYXNlIEFVRElPX1VTQUdFX0FTU0lTVEFOQ0VfU09OSUZJQ0FUSU9OOgotICAgICAgICByZXR1cm4gQVVESU9fU1RSRUFNX1NZU1RFTTsKLSAgICBjYXNlIEFVRElPX1VTQUdFX1ZPSUNFX0NPTU1VTklDQVRJT046Ci0gICAgICAgIHJldHVybiBBVURJT19TVFJFQU1fVk9JQ0VfQ0FMTDsKLQotICAgIGNhc2UgQVVESU9fVVNBR0VfVk9JQ0VfQ09NTVVOSUNBVElPTl9TSUdOQUxMSU5HOgotICAgICAgICByZXR1cm4gQVVESU9fU1RSRUFNX0RUTUY7Ci0KLSAgICBjYXNlIEFVRElPX1VTQUdFX0FMQVJNOgotICAgICAgICByZXR1cm4gQVVESU9fU1RSRUFNX0FMQVJNOwotICAgIGNhc2UgQVVESU9fVVNBR0VfTk9USUZJQ0FUSU9OX1RFTEVQSE9OWV9SSU5HVE9ORToKLSAgICAgICAgcmV0dXJuIEFVRElPX1NUUkVBTV9SSU5HOwotCi0gICAgY2FzZSBBVURJT19VU0FHRV9OT1RJRklDQVRJT046Ci0gICAgY2FzZSBBVURJT19VU0FHRV9OT1RJRklDQVRJT05fQ09NTVVOSUNBVElPTl9SRVFVRVNUOgotICAgIGNhc2UgQVVESU9fVVNBR0VfTk9USUZJQ0FUSU9OX0NPTU1VTklDQVRJT05fSU5TVEFOVDoKLSAgICBjYXNlIEFVRElPX1VTQUdFX05PVElGSUNBVElPTl9DT01NVU5JQ0FUSU9OX0RFTEFZRUQ6Ci0gICAgY2FzZSBBVURJT19VU0FHRV9OT1RJRklDQVRJT05fRVZFTlQ6Ci0gICAgICAgIHJldHVybiBBVURJT19TVFJFQU1fTk9USUZJQ0FUSU9OOwotCi0gICAgY2FzZSBBVURJT19VU0FHRV9VTktOT1dOOgotICAgIGRlZmF1bHQ6Ci0gICAgICAgIHJldHVybiBBVURJT19TVFJFQU1fTVVTSUM7Ci0gICAgfQorICAgIHJldHVybiBhdWRpb191c2FnZV90b19zdHJlYW1fdHlwZShhdHRyLT51c2FnZSk7CiB9CiAKIHN0YXRpYyBpbmxpbmUKZGlmZiAtLWdpdCBhL21lZGlhL2xpYmF1ZGlvY2xpZW50L2luY2x1ZGUvbWVkaWEvQXVkaW9SZWNvcmQuaCBiL21lZGlhL2xpYmF1ZGlvY2xpZW50L2luY2x1ZGUvbWVkaWEvQXVkaW9SZWNvcmQuaAppbmRleCA4MDYyODBhLi5jMjI2NTU3IDEwMDY0NAotLS0gYS9tZWRpYS9saWJhdWRpb2NsaWVudC9pbmNsdWRlL21lZGlhL0F1ZGlvUmVjb3JkLmgKKysrIGIvbWVkaWEvbGliYXVkaW9jbGllbnQvaW5jbHVkZS9tZWRpYS9BdWRpb1JlY29yZC5oCkBAIC02NTQsNiArNjU0LDcgQEAKICAgICBhdWRpb19pbnB1dF9mbGFnc190ICAgICBtT3JpZ0ZsYWdzOyAgICAgICAgICAgICAvLyBhcyBzcGVjaWZpZWQgaW4gY29uc3RydWN0b3Igb3Igc2V0KCksIGNvbnN0CiAKICAgICBhdWRpb19zZXNzaW9uX3QgICAgICAgICBtU2Vzc2lvbklkOworICAgIGludCAgICAgICAgICAgICAgICAgICAgIG1JZDsgICAgICAgICAgICAgICAgICAgIC8vIElkIGZyb20gQXVkaW9GbGluZ2VyCiAgICAgdHJhbnNmZXJfdHlwZSAgICAgICAgICAgbVRyYW5zZmVyOwogCiAgICAgLy8gTmV4dCA1IGZpZWxkcyBtYXkgYmUgY2hhbmdlZCBpZiBJQXVkaW9SZWNvcmQgaXMgcmUtY3JlYXRlZCwgYnV0IGFsd2F5cyAhPSAwCmRpZmYgLS1naXQgYS9tZWRpYS9saWJhdWRpb2NsaWVudC9pbmNsdWRlL21lZGlhL0F1ZGlvU3lzdGVtLmggYi9tZWRpYS9saWJhdWRpb2NsaWVudC9pbmNsdWRlL21lZGlhL0F1ZGlvU3lzdGVtLmgKaW5kZXggNGMwZjc5Ni4uNzZhNzljOSAxMDA2NDQKLS0tIGEvbWVkaWEvbGliYXVkaW9jbGllbnQvaW5jbHVkZS9tZWRpYS9BdWRpb1N5c3RlbS5oCisrKyBiL21lZGlhL2xpYmF1ZGlvY2xpZW50L2luY2x1ZGUvbWVkaWEvQXVkaW9TeXN0ZW0uaApAQCAtMjI0LDE1ICsyMjQsOSBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF1ZGlvX291dHB1dF9mbGFnc190IGZsYWdzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF1ZGlvX3BvcnRfaGFuZGxlX3QgKnNlbGVjdGVkRGV2aWNlSWQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXVkaW9fcG9ydF9oYW5kbGVfdCAqcG9ydElkKTsKLSAgICBzdGF0aWMgc3RhdHVzX3Qgc3RhcnRPdXRwdXQoYXVkaW9faW9faGFuZGxlX3Qgb3V0cHV0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdWRpb19zdHJlYW1fdHlwZV90IHN0cmVhbSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXVkaW9fc2Vzc2lvbl90IHNlc3Npb24pOwotICAgIHN0YXRpYyBzdGF0dXNfdCBzdG9wT3V0cHV0KGF1ZGlvX2lvX2hhbmRsZV90IG91dHB1dCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdWRpb19zdHJlYW1fdHlwZV90IHN0cmVhbSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdWRpb19zZXNzaW9uX3Qgc2Vzc2lvbik7Ci0gICAgc3RhdGljIHZvaWQgcmVsZWFzZU91dHB1dChhdWRpb19pb19oYW5kbGVfdCBvdXRwdXQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdWRpb19zdHJlYW1fdHlwZV90IHN0cmVhbSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF1ZGlvX3Nlc3Npb25fdCBzZXNzaW9uKTsKKyAgICBzdGF0aWMgc3RhdHVzX3Qgc3RhcnRPdXRwdXQoYXVkaW9fcG9ydF9oYW5kbGVfdCBwb3J0SWQpOworICAgIHN0YXRpYyBzdGF0dXNfdCBzdG9wT3V0cHV0KGF1ZGlvX3BvcnRfaGFuZGxlX3QgcG9ydElkKTsKKyAgICBzdGF0aWMgdm9pZCByZWxlYXNlT3V0cHV0KGF1ZGlvX3BvcnRfaGFuZGxlX3QgcG9ydElkKTsKIAogICAgIC8vIENsaWVudCBtdXN0IHN1Y2Nlc3NmdWxseSBoYW5kIG9mZiB0aGUgaGFuZGxlIHJlZmVyZW5jZSB0byBBdWRpb0ZsaW5nZXIgdmlhIGNyZWF0ZVJlY29yZCgpLAogICAgIC8vIG9yIHJlbGVhc2UgaXQgd2l0aCByZWxlYXNlSW5wdXQoKS4KQEAgLTMyOCw5ICszMjIsOSBAQAogICAgIHN0YXRpYyBzdGF0dXNfdCByZWdpc3RlclBvbGljeU1peGVzKGNvbnN0IFZlY3RvcjxBdWRpb01peD4mIG1peGVzLCBib29sIHJlZ2lzdHJhdGlvbik7CiAKICAgICBzdGF0aWMgc3RhdHVzX3Qgc3RhcnRBdWRpb1NvdXJjZShjb25zdCBzdHJ1Y3QgYXVkaW9fcG9ydF9jb25maWcgKnNvdXJjZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgYXVkaW9fYXR0cmlidXRlc190ICphdHRyaWJ1dGVzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdWRpb19wYXRjaF9oYW5kbGVfdCAqaGFuZGxlKTsKLSAgICBzdGF0aWMgc3RhdHVzX3Qgc3RvcEF1ZGlvU291cmNlKGF1ZGlvX3BhdGNoX2hhbmRsZV90IGhhbmRsZSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgYXVkaW9fYXR0cmlidXRlc190ICphdHRyaWJ1dGVzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF1ZGlvX3BvcnRfaGFuZGxlX3QgKnBvcnRJZCk7CisgICAgc3RhdGljIHN0YXR1c190IHN0b3BBdWRpb1NvdXJjZShhdWRpb19wb3J0X2hhbmRsZV90IHBvcnRJZCk7CiAKICAgICBzdGF0aWMgc3RhdHVzX3Qgc2V0TWFzdGVyTW9ubyhib29sIG1vbm8pOwogICAgIHN0YXRpYyBzdGF0dXNfdCBnZXRNYXN0ZXJNb25vKGJvb2wgKm1vbm8pOwpAQCAtMzQ5LDYgKzM0Myw5IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIHJlcG9ydGVkKTsKICAgICBzdGF0aWMgc3RhdHVzX3Qgc2V0U3Vycm91bmRGb3JtYXRFbmFibGVkKGF1ZGlvX2Zvcm1hdF90IGF1ZGlvRm9ybWF0LCBib29sIGVuYWJsZWQpOwogCisgICAgc3RhdGljIHN0YXR1c190IHNldEFzc2lzdGFudFVpZCh1aWRfdCB1aWQpOworICAgIHN0YXRpYyBzdGF0dXNfdCBzZXRBMTF5U2VydmljZXNVaWRzKGNvbnN0IHN0ZDo6dmVjdG9yPHVpZF90PiYgdWlkcyk7CisKICAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKICAgICBjbGFzcyBBdWRpb1BvcnRDYWxsYmFjayA6IHB1YmxpYyBSZWZCYXNlCmRpZmYgLS1naXQgYS9tZWRpYS9saWJhdWRpb2NsaWVudC9pbmNsdWRlL21lZGlhL0F1ZGlvVGltZXN0YW1wLmggYi9tZWRpYS9saWJhdWRpb2NsaWVudC9pbmNsdWRlL21lZGlhL0F1ZGlvVGltZXN0YW1wLmgKaW5kZXggNDk4ZGU4ZS4uZTU5MjVkZCAxMDA2NDQKLS0tIGEvbWVkaWEvbGliYXVkaW9jbGllbnQvaW5jbHVkZS9tZWRpYS9BdWRpb1RpbWVzdGFtcC5oCisrKyBiL21lZGlhL2xpYmF1ZGlvY2xpZW50L2luY2x1ZGUvbWVkaWEvQXVkaW9UaW1lc3RhbXAuaApAQCAtMTM1LDggKzEzNSwyMyBAQAogICAgICAgICByZXR1cm4gSU5WQUxJRF9PUEVSQVRJT047CiAgICAgfQogCisgICAgZG91YmxlIGdldE91dHB1dFNlcnZlckxhdGVuY3lNcyh1aW50MzJfdCBzYW1wbGVSYXRlKSBjb25zdCB7CisgICAgICAgIHJldHVybiBnZXRMYXRlbmN5TXMoc2FtcGxlUmF0ZSwgTE9DQVRJT05fU0VSVkVSLCBMT0NBVElPTl9LRVJORUwpOworICAgIH0KKworICAgIGRvdWJsZSBnZXRMYXRlbmN5TXModWludDMyX3Qgc2FtcGxlUmF0ZSwgTG9jYXRpb24gbG9jYXRpb24xLCBMb2NhdGlvbiBsb2NhdGlvbjIpIGNvbnN0IHsKKyAgICAgICAgaWYgKHNhbXBsZVJhdGUgPiAwICYmIG1UaW1lTnNbbG9jYXRpb24xXSA+IDAgJiYgbVRpbWVOc1tsb2NhdGlvbjJdID4gMCkgeworICAgICAgICAgICAgY29uc3QgaW50NjRfdCBmcmFtZURpZmZlcmVuY2UgPQorICAgICAgICAgICAgICAgICAgICBtUG9zaXRpb25bbG9jYXRpb24xXSAtIG1Qb3NpdGlvbltsb2NhdGlvbjJdOworICAgICAgICAgICAgY29uc3QgaW50NjRfdCB0aW1lRGlmZmVyZW5jZU5zID0KKyAgICAgICAgICAgICAgICAgICAgbVRpbWVOc1tsb2NhdGlvbjFdIC0gbVRpbWVOc1tsb2NhdGlvbjJdOworICAgICAgICAgICAgcmV0dXJuICgoZG91YmxlKWZyYW1lRGlmZmVyZW5jZSAqIDFlOSAvIHNhbXBsZVJhdGUgLSB0aW1lRGlmZmVyZW5jZU5zKSAqIDFlLTY7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIDAuOworICAgIH0KKwogICAgIC8vIGNvbnZlcnQgZmllbGRzIHRvIGEgcHJpbnRhYmxlIHN0cmluZwotICAgIHN0ZDo6c3RyaW5nIHRvU3RyaW5nKCkgeworICAgIHN0ZDo6c3RyaW5nIHRvU3RyaW5nKCkgY29uc3QgewogICAgICAgICBzdGQ6OnN0cmluZ3N0cmVhbSBzczsKIAogICAgICAgICBzcyA8PCAiQk9PVFRJTUUgb2Zmc2V0ICIgPDwgbVRpbWViYXNlT2Zmc2V0W1RJTUVCQVNFX0JPT1RUSU1FXSA8PCAiXG4iOwpkaWZmIC0tZ2l0IGEvbWVkaWEvbGliYXVkaW9jbGllbnQvaW5jbHVkZS9tZWRpYS9BdWRpb1RyYWNrLmggYi9tZWRpYS9saWJhdWRpb2NsaWVudC9pbmNsdWRlL21lZGlhL0F1ZGlvVHJhY2suaAppbmRleCA1OWM2ZjRjLi40Yjg0ZmQxIDEwMDY0NAotLS0gYS9tZWRpYS9saWJhdWRpb2NsaWVudC9pbmNsdWRlL21lZGlhL0F1ZGlvVHJhY2suaAorKysgYi9tZWRpYS9saWJhdWRpb2NsaWVudC9pbmNsdWRlL21lZGlhL0F1ZGlvVHJhY2suaApAQCAtNzQsNiArNzQsOCBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gaW4gdGhlIG1hcHBpbmcgZnJvbSBmcmFtZSBwb3NpdGlvbiB0byBwcmVzZW50YXRpb24gdGltZS4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFNlZSBBdWRpb1RpbWVzdGFtcCBmb3IgdGhlIGluZm9ybWF0aW9uIGluY2x1ZGVkIHdpdGggZXZlbnQuCiAjZW5kaWYKKyAgICAgICAgRVZFTlRfQ0FOX1dSSVRFX01PUkVfREFUQSA9IDksLy8gTm90aWZpY2F0aW9uIHRoYXQgbW9yZSBkYXRhIGNhbiBiZSBnaXZlbiBieSB3cml0ZSgpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBUaGlzIGV2ZW50IG9ubHkgb2NjdXJzIGZvciBUUkFOU0ZFUl9TWU5DX05PVElGX0NBTExCQUNLLgogICAgIH07CiAKICAgICAvKiBDbGllbnQgc2hvdWxkIGRlY2xhcmUgYSBCdWZmZXIgYW5kIHBhc3MgdGhlIGFkZHJlc3MgdG8gb2J0YWluQnVmZmVyKCkKQEAgLTE1Myw2ICsxNTUsNyBAQAogICAgICAgICBUUkFOU0ZFUl9PQlRBSU4sICAgIC8vIGNhbGwgb2J0YWluQnVmZmVyKCkgYW5kIHJlbGVhc2VCdWZmZXIoKQogICAgICAgICBUUkFOU0ZFUl9TWU5DLCAgICAgIC8vIHN5bmNocm9ub3VzIHdyaXRlKCkKICAgICAgICAgVFJBTlNGRVJfU0hBUkVELCAgICAvLyBzaGFyZWQgbWVtb3J5CisgICAgICAgIFRSQU5TRkVSX1NZTkNfTk9USUZfQ0FMTEJBQ0ssIC8vIHN5bmNocm9ub3VzIHdyaXRlKCksIG5vdGlmIEVWRU5UX0NBTl9XUklURV9NT1JFX0RBVEEKICAgICB9OwogCiAgICAgLyogQ29uc3RydWN0cyBhbiB1bmluaXRpYWxpemVkIEF1ZGlvVHJhY2suIE5vIGNvbm5lY3Rpb24gd2l0aApAQCAtMjk1LDYgKzI5OCw4IEBACiAgICAgICogUGFyYW1ldGVycyBub3QgbGlzdGVkIGluIHRoZSBBdWRpb1RyYWNrIGNvbnN0cnVjdG9ycyBhYm92ZToKICAgICAgKgogICAgICAqIHRocmVhZENhbkNhbGxKYXZhOiAgV2hldGhlciBjYWxsYmFja3MgYXJlIG1hZGUgZnJvbSBhbiBhdHRhY2hlZCB0aHJlYWQgYW5kIHRodXMgY2FuIGNhbGwgSk5JLgorICAgICAqICAgICAgT25seSBzZXQgdG8gdHJ1ZSB3aGVuIEF1ZGlvVHJhY2sgb2JqZWN0IGlzIHVzZWQgZm9yIGEgamF2YSBhbmRyb2lkLm1lZGlhLkF1ZGlvVHJhY2sKKyAgICAgKiAgICAgIGluIGl0cyBKTkkgY29kZS4KICAgICAgKgogICAgICAqIEludGVybmFsIHN0YXRlIHBvc3QgY29uZGl0aW9uOgogICAgICAqICAgICAgKG1TdHJlYW1UeXBlID09IEFVRElPX1NUUkVBTV9ERUZBVUxUKSBpbXBsaWVzIHRoaXMgQXVkaW9UcmFjayBoYXMgdmFsaWQgYXR0cmlidXRlcwpAQCAtMTA1OCw2ICsxMDYzLDE5IEBACiAgICAgICAgIFNUQVRFX1NUT1BQSU5HLAogICAgIH0gICAgICAgICAgICAgICAgICAgICAgIG1TdGF0ZTsKIAorICAgIHN0YXRpYyBjb25zdGV4cHIgY29uc3QgY2hhciAqc3RhdGVUb1N0cmluZyhTdGF0ZSBzdGF0ZSkKKyAgICB7CisgICAgICAgIHN3aXRjaCAoc3RhdGUpIHsKKyAgICAgICAgY2FzZSBTVEFURV9BQ1RJVkU6ICAgICAgICAgIHJldHVybiAiU1RBVEVfQUNUSVZFIjsKKyAgICAgICAgY2FzZSBTVEFURV9TVE9QUEVEOiAgICAgICAgIHJldHVybiAiU1RBVEVfU1RPUFBFRCI7CisgICAgICAgIGNhc2UgU1RBVEVfUEFVU0VEOiAgICAgICAgICByZXR1cm4gIlNUQVRFX1BBVVNFRCI7CisgICAgICAgIGNhc2UgU1RBVEVfUEFVU0VEX1NUT1BQSU5HOiByZXR1cm4gIlNUQVRFX1BBVVNFRF9TVE9QUElORyI7CisgICAgICAgIGNhc2UgU1RBVEVfRkxVU0hFRDogICAgICAgICByZXR1cm4gIlNUQVRFX0ZMVVNIRUQiOworICAgICAgICBjYXNlIFNUQVRFX1NUT1BQSU5HOiAgICAgICAgcmV0dXJuICJTVEFURV9TVE9QUElORyI7CisgICAgICAgIGRlZmF1bHQ6ICAgICAgICAgICAgICAgICAgICByZXR1cm4gIlVOS05PV04iOworICAgICAgICB9CisgICAgfQorCiAgICAgLy8gZm9yIGNsaWVudCBjYWxsYmFjayBoYW5kbGVyCiAgICAgY2FsbGJhY2tfdCAgICAgICAgICAgICAgbUNiZjsgICAgICAgICAgICAgICAgICAgLy8gY2FsbGJhY2sgaGFuZGxlciBmb3IgZXZlbnRzLCBvciBOVUxMCiAgICAgdm9pZCogICAgICAgICAgICAgICAgICAgbVVzZXJEYXRhOwpAQCAtMTE0OCw2ICsxMTY2LDcgQEAKIAogICAgIGF1ZGlvX3Nlc3Npb25fdCAgICAgICAgIG1TZXNzaW9uSWQ7CiAgICAgaW50ICAgICAgICAgICAgICAgICAgICAgbUF1eEVmZmVjdElkOworICAgIGludCAgICAgICAgICAgICAgICAgICAgIG1JZDsgICAgICAgICAgICAgICAgICAgIC8vIElkIGZyb20gQXVkaW9GbGluZ2VyLgogCiAgICAgbXV0YWJsZSBNdXRleCAgICAgICAgICAgbUxvY2s7CiAKZGlmZiAtLWdpdCBhL21lZGlhL2xpYmF1ZGlvY2xpZW50L2luY2x1ZGUvbWVkaWEvSUF1ZGlvRmxpbmdlci5oIGIvbWVkaWEvbGliYXVkaW9jbGllbnQvaW5jbHVkZS9tZWRpYS9JQXVkaW9GbGluZ2VyLmgKaW5kZXggZTZiZjcyZi4uNTJjYzg2MCAxMDA2NDQKLS0tIGEvbWVkaWEvbGliYXVkaW9jbGllbnQvaW5jbHVkZS9tZWRpYS9JQXVkaW9GbGluZ2VyLmgKKysrIGIvbWVkaWEvbGliYXVkaW9jbGllbnQvaW5jbHVkZS9tZWRpYS9JQXVkaW9GbGluZ2VyLmgKQEAgLTE0Niw2ICsxNDYsNyBAQAogICAgICAgICAgICAgYWZTYW1wbGVSYXRlID0gcGFyY2VsLT5yZWFkSW50NjQoKTsKICAgICAgICAgICAgIGFmTGF0ZW5jeU1zID0gcGFyY2VsLT5yZWFkSW50MzIoKTsKICAgICAgICAgICAgICh2b2lkKXBhcmNlbC0+cmVhZCgmb3V0cHV0SWQsIHNpemVvZihhdWRpb19pb19oYW5kbGVfdCkpOworICAgICAgICAgICAgKHZvaWQpcGFyY2VsLT5yZWFkSW50MzIoJnRyYWNrSWQpOwogICAgICAgICAgICAgcmV0dXJuIE5PX0VSUk9SOwogICAgICAgICB9CiAKQEAgLTE2Myw2ICsxNjQsNyBAQAogICAgICAgICAgICAgKHZvaWQpcGFyY2VsLT53cml0ZUludDY0KGFmU2FtcGxlUmF0ZSk7CiAgICAgICAgICAgICAodm9pZClwYXJjZWwtPndyaXRlSW50MzIoYWZMYXRlbmN5TXMpOwogICAgICAgICAgICAgKHZvaWQpcGFyY2VsLT53cml0ZSgmb3V0cHV0SWQsIHNpemVvZihhdWRpb19pb19oYW5kbGVfdCkpOworICAgICAgICAgICAgKHZvaWQpcGFyY2VsLT53cml0ZUludDMyKHRyYWNrSWQpOwogICAgICAgICAgICAgcmV0dXJuIE5PX0VSUk9SOwogICAgICAgICB9CiAKQEAgLTE3OSw2ICsxODEsNyBAQAogICAgICAgICB1aW50MzJfdCBhZlNhbXBsZVJhdGU7CiAgICAgICAgIHVpbnQzMl90IGFmTGF0ZW5jeU1zOwogICAgICAgICBhdWRpb19pb19oYW5kbGVfdCBvdXRwdXRJZDsKKyAgICAgICAgaW50MzJfdCB0cmFja0lkOwogICAgIH07CiAKICAgICAvKiBDcmVhdGVSZWNvcmRJbnB1dCBjb250YWlucyBhbGwgaW5wdXQgYXJndW1lbnRzIHNlbnQgYnkgQXVkaW9SZWNvcmQgdG8gQXVkaW9GbGluZ2VyCkBAIC0yNzEsNiArMjc0LDcgQEAKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEJBRF9WQUxVRTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9CisgICAgICAgICAgICAodm9pZClwYXJjZWwtPnJlYWRJbnQzMigmdHJhY2tJZCk7CiAgICAgICAgICAgICByZXR1cm4gTk9fRVJST1I7CiAgICAgICAgIH0KIApAQCAtMjk3LDYgKzMwMSw3IEBACiAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICh2b2lkKXBhcmNlbC0+d3JpdGVJbnQzMigwKTsKICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICh2b2lkKXBhcmNlbC0+d3JpdGVJbnQzMih0cmFja0lkKTsKIAogICAgICAgICAgICAgcmV0dXJuIE5PX0VSUk9SOwogICAgICAgICB9CkBAIC0zMTMsNiArMzE4LDcgQEAKICAgICAgICAgYXVkaW9faW9faGFuZGxlX3QgaW5wdXRJZDsKICAgICAgICAgc3A8SU1lbW9yeT4gY2JsazsKICAgICAgICAgc3A8SU1lbW9yeT4gYnVmZmVyczsKKyAgICAgICAgaW50MzJfdCB0cmFja0lkOwogICAgIH07CiAKICAgICAvLyBpbnZhcmlhbnQgb24gZXhpdCBmb3IgYWxsIEFQSXMgdGhhdCByZXR1cm4gYW4gc3A8PjoKQEAgLTQyOCw3ICs0MzQsOSBAQAogICAgIHZpcnR1YWwgc3RhdHVzX3QgcXVlcnlFZmZlY3QodWludDMyX3QgaW5kZXgsIGVmZmVjdF9kZXNjcmlwdG9yX3QgKnBEZXNjcmlwdG9yKSBjb25zdCA9IDA7CiAKICAgICB2aXJ0dWFsIHN0YXR1c190IGdldEVmZmVjdERlc2NyaXB0b3IoY29uc3QgZWZmZWN0X3V1aWRfdCAqcEVmZmVjdFVVSUQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWZmZWN0X2Rlc2NyaXB0b3JfdCAqcERlc2NyaXB0b3IpIGNvbnN0ID0gMDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZWZmZWN0X3V1aWRfdCAqcFR5cGVVVUlELAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCBwcmVmZXJyZWRUeXBlRmxhZywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWZmZWN0X2Rlc2NyaXB0b3JfdCAqcERlc2NyaXB0b3IpIGNvbnN0ID0gMDsKIAogICAgIHZpcnR1YWwgc3A8SUVmZmVjdD4gY3JlYXRlRWZmZWN0KAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWZmZWN0X2Rlc2NyaXB0b3JfdCAqcERlc2MsCmRpZmYgLS1naXQgYS9tZWRpYS9saWJhdWRpb2NsaWVudC9pbmNsdWRlL21lZGlhL0lBdWRpb1BvbGljeVNlcnZpY2UuaCBiL21lZGlhL2xpYmF1ZGlvY2xpZW50L2luY2x1ZGUvbWVkaWEvSUF1ZGlvUG9saWN5U2VydmljZS5oCmluZGV4IGMzODc2YWYuLmEyNDZkZjYgMTAwNjQ0Ci0tLSBhL21lZGlhL2xpYmF1ZGlvY2xpZW50L2luY2x1ZGUvbWVkaWEvSUF1ZGlvUG9saWN5U2VydmljZS5oCisrKyBiL21lZGlhL2xpYmF1ZGlvY2xpZW50L2luY2x1ZGUvbWVkaWEvSUF1ZGlvUG9saWN5U2VydmljZS5oCkBAIC0yMCwxNSArMjAsMTQgQEAKICNpbmNsdWRlIDxzdGRpbnQuaD4KICNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KICNpbmNsdWRlIDx1bmlzdGQuaD4KLQogI2luY2x1ZGUgPHV0aWxzL1JlZkJhc2UuaD4KICNpbmNsdWRlIDx1dGlscy9FcnJvcnMuaD4KICNpbmNsdWRlIDxiaW5kZXIvSUludGVyZmFjZS5oPgogI2luY2x1ZGUgPG1lZGlhL0F1ZGlvU3lzdGVtLmg+CiAjaW5jbHVkZSA8bWVkaWEvQXVkaW9Qb2xpY3kuaD4KICNpbmNsdWRlIDxtZWRpYS9JQXVkaW9Qb2xpY3lTZXJ2aWNlQ2xpZW50Lmg+Ci0KICNpbmNsdWRlIDxzeXN0ZW0vYXVkaW9fcG9saWN5Lmg+CisjaW5jbHVkZSA8dmVjdG9yPgogCiBuYW1lc3BhY2UgYW5kcm9pZCB7CiAKQEAgLTY2LDE1ICs2NSw5IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF1ZGlvX291dHB1dF9mbGFnc190IGZsYWdzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdWRpb19wb3J0X2hhbmRsZV90ICpzZWxlY3RlZERldmljZUlkLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdWRpb19wb3J0X2hhbmRsZV90ICpwb3J0SWQpID0gMDsKLSAgICB2aXJ0dWFsIHN0YXR1c190IHN0YXJ0T3V0cHV0KGF1ZGlvX2lvX2hhbmRsZV90IG91dHB1dCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF1ZGlvX3N0cmVhbV90eXBlX3Qgc3RyZWFtLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXVkaW9fc2Vzc2lvbl90IHNlc3Npb24pID0gMDsKLSAgICB2aXJ0dWFsIHN0YXR1c190IHN0b3BPdXRwdXQoYXVkaW9faW9faGFuZGxlX3Qgb3V0cHV0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdWRpb19zdHJlYW1fdHlwZV90IHN0cmVhbSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXVkaW9fc2Vzc2lvbl90IHNlc3Npb24pID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgcmVsZWFzZU91dHB1dChhdWRpb19pb19oYW5kbGVfdCBvdXRwdXQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXVkaW9fc3RyZWFtX3R5cGVfdCBzdHJlYW0sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXVkaW9fc2Vzc2lvbl90IHNlc3Npb24pID0gMDsKKyAgICB2aXJ0dWFsIHN0YXR1c190IHN0YXJ0T3V0cHV0KGF1ZGlvX3BvcnRfaGFuZGxlX3QgcG9ydElkKSA9IDA7CisgICAgdmlydHVhbCBzdGF0dXNfdCBzdG9wT3V0cHV0KGF1ZGlvX3BvcnRfaGFuZGxlX3QgcG9ydElkKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIHJlbGVhc2VPdXRwdXQoYXVkaW9fcG9ydF9oYW5kbGVfdCBwb3J0SWQpID0gMDsKICAgICB2aXJ0dWFsIHN0YXR1c190ICBnZXRJbnB1dEZvckF0dHIoY29uc3QgYXVkaW9fYXR0cmlidXRlc190ICphdHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXVkaW9faW9faGFuZGxlX3QgKmlucHV0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXVkaW9fc2Vzc2lvbl90IHNlc3Npb24sCkBAIC0xMTUsNiArMTA4LDIwIEBACiAgICAgdmlydHVhbCBzdGF0dXNfdCBxdWVyeURlZmF1bHRQcmVQcm9jZXNzaW5nKGF1ZGlvX3Nlc3Npb25fdCBhdWRpb1Nlc3Npb24sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWZmZWN0X2Rlc2NyaXB0b3JfdCAqZGVzY3JpcHRvcnMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3QgKmNvdW50KSA9IDA7CisgICAgdmlydHVhbCBzdGF0dXNfdCBhZGRTb3VyY2VEZWZhdWx0RWZmZWN0KGNvbnN0IGVmZmVjdF91dWlkX3QgKnR5cGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFN0cmluZzE2JiBvcFBhY2thZ2VOYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBlZmZlY3RfdXVpZF90ICp1dWlkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQzMl90IHByaW9yaXR5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdWRpb19zb3VyY2VfdCBzb3VyY2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF1ZGlvX3VuaXF1ZV9pZF90KiBpZCkgPSAwOworICAgIHZpcnR1YWwgc3RhdHVzX3QgYWRkU3RyZWFtRGVmYXVsdEVmZmVjdChjb25zdCBlZmZlY3RfdXVpZF90ICp0eXBlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBTdHJpbmcxNiYgb3BQYWNrYWdlTmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZWZmZWN0X3V1aWRfdCAqdXVpZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50MzJfdCBwcmlvcml0eSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXVkaW9fdXNhZ2VfdCB1c2FnZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXVkaW9fdW5pcXVlX2lkX3QqIGlkKSA9IDA7CisgICAgdmlydHVhbCBzdGF0dXNfdCByZW1vdmVTb3VyY2VEZWZhdWx0RWZmZWN0KGF1ZGlvX3VuaXF1ZV9pZF90IGlkKSA9IDA7CisgICAgdmlydHVhbCBzdGF0dXNfdCByZW1vdmVTdHJlYW1EZWZhdWx0RWZmZWN0KGF1ZGlvX3VuaXF1ZV9pZF90IGlkKSA9IDA7CiAgICAvLyBDaGVjayBpZiBvZmZsb2FkIGlzIHBvc3NpYmxlIGZvciBnaXZlbiBmb3JtYXQsIHN0cmVhbSB0eXBlLCBzYW1wbGUgcmF0ZSwKICAgICAvLyBiaXQgcmF0ZSwgZHVyYXRpb24sIHZpZGVvIGFuZCBzdHJlYW1pbmcgb3Igb2ZmbG9hZCBwcm9wZXJ0eSBpcyBlbmFibGVkCiAgICAgdmlydHVhbCBib29sIGlzT2ZmbG9hZFN1cHBvcnRlZChjb25zdCBhdWRpb19vZmZsb2FkX2luZm9fdCYgaW5mbykgPSAwOwpAQCAtMTU5LDggKzE2Niw4IEBACiAKICAgICB2aXJ0dWFsIHN0YXR1c190IHN0YXJ0QXVkaW9Tb3VyY2UoY29uc3Qgc3RydWN0IGF1ZGlvX3BvcnRfY29uZmlnICpzb3VyY2UsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGF1ZGlvX2F0dHJpYnV0ZXNfdCAqYXR0cmlidXRlcywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXVkaW9fcGF0Y2hfaGFuZGxlX3QgKmhhbmRsZSkgPSAwOwotICAgIHZpcnR1YWwgc3RhdHVzX3Qgc3RvcEF1ZGlvU291cmNlKGF1ZGlvX3BhdGNoX2hhbmRsZV90IGhhbmRsZSkgPSAwOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdWRpb19wb3J0X2hhbmRsZV90ICpwb3J0SWQpID0gMDsKKyAgICB2aXJ0dWFsIHN0YXR1c190IHN0b3BBdWRpb1NvdXJjZShhdWRpb19wb3J0X2hhbmRsZV90IHBvcnRJZCkgPSAwOwogCiAgICAgdmlydHVhbCBzdGF0dXNfdCBzZXRNYXN0ZXJNb25vKGJvb2wgbW9ubykgPSAwOwogICAgIHZpcnR1YWwgc3RhdHVzX3QgZ2V0TWFzdGVyTW9ubyhib29sICptb25vKSA9IDA7CkBAIC0xNzIsNiArMTc5LDkgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sICpzdXJyb3VuZEZvcm1hdHNFbmFibGVkLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgcmVwb3J0ZWQpID0gMDsKICAgICB2aXJ0dWFsIHN0YXR1c190IHNldFN1cnJvdW5kRm9ybWF0RW5hYmxlZChhdWRpb19mb3JtYXRfdCBhdWRpb0Zvcm1hdCwgYm9vbCBlbmFibGVkKSA9IDA7CisKKyAgICB2aXJ0dWFsIHN0YXR1c190IHNldEFzc2lzdGFudFVpZCh1aWRfdCB1aWQpID0gMDsKKyAgICB2aXJ0dWFsIHN0YXR1c190IHNldEExMXlTZXJ2aWNlc1VpZHMoY29uc3Qgc3RkOjp2ZWN0b3I8dWlkX3Q+JiB1aWRzKSA9IDA7CiB9OwogCiAKZGlmZiAtLWdpdCBhL21lZGlhL2xpYmF1ZGlvaGFsLzIuMC9BbmRyb2lkLmJwIGIvbWVkaWEvbGliYXVkaW9oYWwvMi4wL0FuZHJvaWQuYnAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDU3NGI0MzUuLjAwMDAwMDAKLS0tIGEvbWVkaWEvbGliYXVkaW9oYWwvMi4wL0FuZHJvaWQuYnAKKysrIC9kZXYvbnVsbApAQCAtMSw1NCArMCwwIEBACi1jY19saWJyYXJ5X3NoYXJlZCB7Ci0gICAgbmFtZTogImxpYmF1ZGlvaGFsQDIuMCIsCi0KLSAgICBzcmNzOiBbCi0gICAgICAgICJEZXZpY2VIYWxMb2NhbC5jcHAiLAotICAgICAgICAiRGV2aWNlc0ZhY3RvcnlIYWxIeWJyaWQuY3BwIiwKLSAgICAgICAgIkRldmljZXNGYWN0b3J5SGFsTG9jYWwuY3BwIiwKLSAgICAgICAgIlN0cmVhbUhhbExvY2FsLmNwcCIsCi0KLSAgICAgICAgIkNvbnZlcnNpb25IZWxwZXJIaWRsLmNwcCIsCi0gICAgICAgICJEZXZpY2VIYWxIaWRsLmNwcCIsCi0gICAgICAgICJEZXZpY2VzRmFjdG9yeUhhbEhpZGwuY3BwIiwKLSAgICAgICAgIkVmZmVjdEJ1ZmZlckhhbEhpZGwuY3BwIiwKLSAgICAgICAgIkVmZmVjdEhhbEhpZGwuY3BwIiwKLSAgICAgICAgIkVmZmVjdHNGYWN0b3J5SGFsSGlkbC5jcHAiLAotICAgICAgICAiU3RyZWFtSGFsSGlkbC5jcHAiLAotICAgIF0sCi0KLSAgICBleHBvcnRfaW5jbHVkZV9kaXJzOiBbIi4iXSwKLQotICAgIGNmbGFnczogWwotICAgICAgICAiLVdhbGwiLAotICAgICAgICAiLVdlcnJvciIsCi0gICAgXSwKLSAgICBzaGFyZWRfbGliczogWwotICAgICAgICAibGliYXVkaW9oYWxfZGVhdGhoYW5kbGVyIiwKLSAgICAgICAgImxpYmF1ZGlvdXRpbHMiLAotICAgICAgICAibGliY3V0aWxzIiwKLSAgICAgICAgImxpYmxvZyIsCi0gICAgICAgICJsaWJ1dGlscyIsCi0gICAgICAgICJsaWJoYXJkd2FyZSIsCi0gICAgICAgICJsaWJiYXNlIiwKLSAgICAgICAgImxpYmZtcSIsCi0gICAgICAgICJsaWJod2JpbmRlciIsCi0gICAgICAgICJsaWJoaWRsYmFzZSIsCi0gICAgICAgICJsaWJoaWRsbWVtb3J5IiwKLSAgICAgICAgImxpYmhpZGx0cmFuc3BvcnQiLAotICAgICAgICAiYW5kcm9pZC5oYXJkd2FyZS5hdWRpb0AyLjAiLAotICAgICAgICAiYW5kcm9pZC5oYXJkd2FyZS5hdWRpby5jb21tb25AMi4wIiwKLSAgICAgICAgImFuZHJvaWQuaGFyZHdhcmUuYXVkaW8uY29tbW9uQDIuMC11dGlsIiwKLSAgICAgICAgImFuZHJvaWQuaGFyZHdhcmUuYXVkaW8uZWZmZWN0QDIuMCIsCi0gICAgICAgICJhbmRyb2lkLmhpZGwuYWxsb2NhdG9yQDEuMCIsCi0gICAgICAgICJhbmRyb2lkLmhpZGwubWVtb3J5QDEuMCIsCi0gICAgICAgICJsaWJtZWRpYV9oZWxwZXIiLAotICAgICAgICAibGlibWVkaWF1dGlscyIsCi0gICAgXSwKLSAgICBoZWFkZXJfbGliczogWwotICAgICAgICAibGliYXVkaW9oYWxfaGVhZGVycyIKLSAgICBdLAotCi0gICAgZXhwb3J0X3NoYXJlZF9saWJfaGVhZGVyczogWwotICAgICAgICAibGliZm1xIiwKLSAgICBdLAotfQpkaWZmIC0tZ2l0IGEvbWVkaWEvbGliYXVkaW9oYWwvMi4wL0NvbnZlcnNpb25IZWxwZXJIaWRsLmNwcCBiL21lZGlhL2xpYmF1ZGlvaGFsLzIuMC9Db252ZXJzaW9uSGVscGVySGlkbC5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGY2MGJmOGIuLjAwMDAwMDAKLS0tIGEvbWVkaWEvbGliYXVkaW9oYWwvMi4wL0NvbnZlcnNpb25IZWxwZXJIaWRsLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDEwMyArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDE2IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKLSAqCi0gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKLSAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KLSAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotICoKLSAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0gKgotICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQotICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKLSAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgotICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAotICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCi0gKi8KLQotI2luY2x1ZGUgPHN0cmluZy5oPgotCi0jZGVmaW5lIExPR19UQUcgIkhhbEhpZGwiCi0jaW5jbHVkZSA8bWVkaWEvQXVkaW9QYXJhbWV0ZXIuaD4KLSNpbmNsdWRlIDx1dGlscy9Mb2cuaD4KLQotI2luY2x1ZGUgIkNvbnZlcnNpb25IZWxwZXJIaWRsLmgiCi0KLXVzaW5nIDo6YW5kcm9pZDo6aGFyZHdhcmU6OmF1ZGlvOjpWMl8wOjpSZXN1bHQ7Ci0KLW5hbWVzcGFjZSBhbmRyb2lkIHsKLQotLy8gc3RhdGljCi1zdGF0dXNfdCBDb252ZXJzaW9uSGVscGVySGlkbDo6a2V5c0Zyb21IYWwoY29uc3QgU3RyaW5nOCYga2V5cywgaGlkbF92ZWM8aGlkbF9zdHJpbmc+ICpoaWRsS2V5cykgewotICAgIEF1ZGlvUGFyYW1ldGVyIGhhbEtleXMoa2V5cyk7Ci0gICAgaWYgKGhhbEtleXMuc2l6ZSgpID09IDApIHJldHVybiBCQURfVkFMVUU7Ci0gICAgaGlkbEtleXMtPnJlc2l6ZShoYWxLZXlzLnNpemUoKSk7Ci0gICAgLy9GSVhNRTogIGtleVN0cmVhbVN1cHBvcnRlZENoYW5uZWxzIGFuZCBrZXlTdHJlYW1TdXBwb3J0ZWRTYW1wbGluZ1JhdGVzIGNvbWUgd2l0aCBhCi0gICAgLy8gImtleUZvcm1hdD08dmFsdWU+IiBwYWlyLiBXZSBuZWVkIHRvIHRyYW5zZm9ybSBpdCBpbnRvIGEgc2luZ2xlIGtleSBzdHJpbmcgc28gdGhhdCBpdCBpcwotICAgIC8vIGNhcnJpZWQgb3ZlciB0byB0aGUgbGVnYWN5IEhBTCB2aWEgSElETC4KLSAgICBTdHJpbmc4IHZhbHVlOwotICAgIGJvb2wga2VlcEZvcm1hdFZhbHVlID0gaGFsS2V5cy5zaXplKCkgPT0gMiAmJgotICAgICAgICAgKGhhbEtleXMuZ2V0KFN0cmluZzgoQXVkaW9QYXJhbWV0ZXI6OmtleVN0cmVhbVN1cHBvcnRlZENoYW5uZWxzKSwgdmFsdWUpID09IE5PX0VSUk9SIHx8Ci0gICAgICAgICBoYWxLZXlzLmdldChTdHJpbmc4KEF1ZGlvUGFyYW1ldGVyOjprZXlTdHJlYW1TdXBwb3J0ZWRTYW1wbGluZ1JhdGVzKSwgdmFsdWUpID09IE5PX0VSUk9SKTsKLQotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgaGFsS2V5cy5zaXplKCk7ICsraSkgewotICAgICAgICBTdHJpbmc4IGtleTsKLSAgICAgICAgc3RhdHVzX3Qgc3RhdHVzID0gaGFsS2V5cy5nZXRBdChpLCBrZXkpOwotICAgICAgICBpZiAoc3RhdHVzICE9IE9LKSByZXR1cm4gc3RhdHVzOwotICAgICAgICBpZiAoa2VlcEZvcm1hdFZhbHVlICYmIGtleSA9PSBBdWRpb1BhcmFtZXRlcjo6a2V5Rm9ybWF0KSB7Ci0gICAgICAgICAgICBBdWRpb1BhcmFtZXRlciBmb3JtYXRQYXJhbTsKLSAgICAgICAgICAgIGhhbEtleXMuZ2V0QXQoaSwga2V5LCB2YWx1ZSk7Ci0gICAgICAgICAgICBmb3JtYXRQYXJhbS5hZGQoa2V5LCB2YWx1ZSk7Ci0gICAgICAgICAgICBrZXkgPSBmb3JtYXRQYXJhbS50b1N0cmluZygpOwotICAgICAgICB9Ci0gICAgICAgICgqaGlkbEtleXMpW2ldID0ga2V5LnN0cmluZygpOwotICAgIH0KLSAgICByZXR1cm4gT0s7Ci19Ci0KLS8vIHN0YXRpYwotc3RhdHVzX3QgQ29udmVyc2lvbkhlbHBlckhpZGw6OnBhcmFtZXRlcnNGcm9tSGFsKAotICAgICAgICBjb25zdCBTdHJpbmc4JiBrdlBhaXJzLCBoaWRsX3ZlYzxQYXJhbWV0ZXJWYWx1ZT4gKmhpZGxQYXJhbXMpIHsKLSAgICBBdWRpb1BhcmFtZXRlciBwYXJhbXMoa3ZQYWlycyk7Ci0gICAgaWYgKHBhcmFtcy5zaXplKCkgPT0gMCkgcmV0dXJuIEJBRF9WQUxVRTsKLSAgICBoaWRsUGFyYW1zLT5yZXNpemUocGFyYW1zLnNpemUoKSk7Ci0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBwYXJhbXMuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgU3RyaW5nOCBrZXksIHZhbHVlOwotICAgICAgICBzdGF0dXNfdCBzdGF0dXMgPSBwYXJhbXMuZ2V0QXQoaSwga2V5LCB2YWx1ZSk7Ci0gICAgICAgIGlmIChzdGF0dXMgIT0gT0spIHJldHVybiBzdGF0dXM7Ci0gICAgICAgICgqaGlkbFBhcmFtcylbaV0ua2V5ID0ga2V5LnN0cmluZygpOwotICAgICAgICAoKmhpZGxQYXJhbXMpW2ldLnZhbHVlID0gdmFsdWUuc3RyaW5nKCk7Ci0gICAgfQotICAgIHJldHVybiBPSzsKLX0KLQotLy8gc3RhdGljCi12b2lkIENvbnZlcnNpb25IZWxwZXJIaWRsOjpwYXJhbWV0ZXJzVG9IYWwoCi0gICAgICAgIGNvbnN0IGhpZGxfdmVjPFBhcmFtZXRlclZhbHVlPiYgcGFyYW1ldGVycywgU3RyaW5nOCAqdmFsdWVzKSB7Ci0gICAgQXVkaW9QYXJhbWV0ZXIgcGFyYW1zOwotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgcGFyYW1ldGVycy5zaXplKCk7ICsraSkgewotICAgICAgICBwYXJhbXMuYWRkKFN0cmluZzgocGFyYW1ldGVyc1tpXS5rZXkuY19zdHIoKSksIFN0cmluZzgocGFyYW1ldGVyc1tpXS52YWx1ZS5jX3N0cigpKSk7Ci0gICAgfQotICAgIHZhbHVlcy0+c2V0VG8ocGFyYW1zLnRvU3RyaW5nKCkpOwotfQotCi1Db252ZXJzaW9uSGVscGVySGlkbDo6Q29udmVyc2lvbkhlbHBlckhpZGwoY29uc3QgY2hhciogY2xhc3NOYW1lKQotICAgICAgICA6IG1DbGFzc05hbWUoY2xhc3NOYW1lKSB7Ci19Ci0KLS8vIHN0YXRpYwotc3RhdHVzX3QgQ29udmVyc2lvbkhlbHBlckhpZGw6OmFuYWx5emVSZXN1bHQoY29uc3QgUmVzdWx0JiByZXN1bHQpIHsKLSAgICBzd2l0Y2ggKHJlc3VsdCkgewotICAgICAgICBjYXNlIFJlc3VsdDo6T0s6IHJldHVybiBPSzsKLSAgICAgICAgY2FzZSBSZXN1bHQ6OklOVkFMSURfQVJHVU1FTlRTOiByZXR1cm4gQkFEX1ZBTFVFOwotICAgICAgICBjYXNlIFJlc3VsdDo6SU5WQUxJRF9TVEFURTogcmV0dXJuIE5PVF9FTk9VR0hfREFUQTsKLSAgICAgICAgY2FzZSBSZXN1bHQ6Ok5PVF9JTklUSUFMSVpFRDogcmV0dXJuIE5PX0lOSVQ7Ci0gICAgICAgIGNhc2UgUmVzdWx0OjpOT1RfU1VQUE9SVEVEOiByZXR1cm4gSU5WQUxJRF9PUEVSQVRJT047Ci0gICAgICAgIGRlZmF1bHQ6IHJldHVybiBOT19JTklUOwotICAgIH0KLX0KLQotdm9pZCBDb252ZXJzaW9uSGVscGVySGlkbDo6ZW1pdEVycm9yKGNvbnN0IGNoYXIqIGZ1bmNOYW1lLCBjb25zdCBjaGFyKiBkZXNjcmlwdGlvbikgewotICAgIEFMT0dFKCIlcyAlcCAlczogJXMgKGZyb20gcnBjKSIsIG1DbGFzc05hbWUsIHRoaXMsIGZ1bmNOYW1lLCBkZXNjcmlwdGlvbik7Ci19Ci0KLX0gIC8vIG5hbWVzcGFjZSBhbmRyb2lkCmRpZmYgLS1naXQgYS9tZWRpYS9saWJhdWRpb2hhbC8yLjAvQ29udmVyc2lvbkhlbHBlckhpZGwuaCBiL21lZGlhL2xpYmF1ZGlvaGFsLzIuMC9Db252ZXJzaW9uSGVscGVySGlkbC5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjMzU2ZjM3Li4wMDAwMDAwCi0tLSBhL21lZGlhL2xpYmF1ZGlvaGFsLzIuMC9Db252ZXJzaW9uSGVscGVySGlkbC5oCisrKyAvZGV2L251bGwKQEAgLTEsODMgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNiBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0Ci0gKgotICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7Ci0gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCi0gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLSAqCi0gKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotICoKLSAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKLSAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCi0gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KLSAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKLSAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgotICovCi0KLSNpZm5kZWYgQU5EUk9JRF9IQVJEV0FSRV9DT05WRVJTSU9OX0hFTFBFUl9ISURMX0gKLSNkZWZpbmUgQU5EUk9JRF9IQVJEV0FSRV9DT05WRVJTSU9OX0hFTFBFUl9ISURMX0gKLQotI2luY2x1ZGUgPGFuZHJvaWQvaGFyZHdhcmUvYXVkaW8vMi4wL3R5cGVzLmg+Ci0jaW5jbHVkZSA8aGlkbC9IaWRsU3VwcG9ydC5oPgotI2luY2x1ZGUgPHV0aWxzL1N0cmluZzguaD4KLQotdXNpbmcgOjphbmRyb2lkOjpoYXJkd2FyZTo6YXVkaW86OlYyXzA6OlBhcmFtZXRlclZhbHVlOwotdXNpbmcgOjphbmRyb2lkOjpoYXJkd2FyZTo6UmV0dXJuOwotdXNpbmcgOjphbmRyb2lkOjpoYXJkd2FyZTo6aGlkbF9zdHJpbmc7Ci11c2luZyA6OmFuZHJvaWQ6OmhhcmR3YXJlOjpoaWRsX3ZlYzsKLQotbmFtZXNwYWNlIGFuZHJvaWQgewotCi1jbGFzcyBDb252ZXJzaW9uSGVscGVySGlkbCB7Ci0gIHByb3RlY3RlZDoKLSAgICBzdGF0aWMgc3RhdHVzX3Qga2V5c0Zyb21IYWwoY29uc3QgU3RyaW5nOCYga2V5cywgaGlkbF92ZWM8aGlkbF9zdHJpbmc+ICpoaWRsS2V5cyk7Ci0gICAgc3RhdGljIHN0YXR1c190IHBhcmFtZXRlcnNGcm9tSGFsKGNvbnN0IFN0cmluZzgmIGt2UGFpcnMsIGhpZGxfdmVjPFBhcmFtZXRlclZhbHVlPiAqaGlkbFBhcmFtcyk7Ci0gICAgc3RhdGljIHZvaWQgcGFyYW1ldGVyc1RvSGFsKGNvbnN0IGhpZGxfdmVjPFBhcmFtZXRlclZhbHVlPiYgcGFyYW1ldGVycywgU3RyaW5nOCAqdmFsdWVzKTsKLQotICAgIENvbnZlcnNpb25IZWxwZXJIaWRsKGNvbnN0IGNoYXIqIGNsYXNzTmFtZSk7Ci0KLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBSLCB0eXBlbmFtZSBUPgotICAgIHN0YXR1c190IHByb2Nlc3NSZXR1cm4oY29uc3QgY2hhciogZnVuY05hbWUsIGNvbnN0IFJldHVybjxSPiYgcmV0LCBUICpyZXR2YWwpIHsKLSAgICAgICAgaWYgKHJldC5pc09rKCkpIHsKLSAgICAgICAgICAgIC8vIFRoaXMgd2F5IGl0IGFsc28gd29ya3MgZm9yIGVudW0gY2xhc3MgdG8gdW5zY29wZWQgZW51bSBjb252ZXJzaW9uLgotICAgICAgICAgICAgKnJldHZhbCA9IHN0YXRpY19jYXN0PFQ+KHN0YXRpY19jYXN0PFI+KHJldCkpOwotICAgICAgICAgICAgcmV0dXJuIE9LOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiBwcm9jZXNzUmV0dXJuKGZ1bmNOYW1lLCByZXQpOwotICAgIH0KLQotICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+Ci0gICAgc3RhdHVzX3QgcHJvY2Vzc1JldHVybihjb25zdCBjaGFyKiBmdW5jTmFtZSwgY29uc3QgUmV0dXJuPFQ+JiByZXQpIHsKLSAgICAgICAgaWYgKCFyZXQuaXNPaygpKSB7Ci0gICAgICAgICAgICBlbWl0RXJyb3IoZnVuY05hbWUsIHJldC5kZXNjcmlwdGlvbigpLmNfc3RyKCkpOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiByZXQuaXNPaygpID8gT0sgOiBGQUlMRURfVFJBTlNBQ1RJT047Ci0gICAgfQotCi0gICAgc3RhdHVzX3QgcHJvY2Vzc1JldHVybihjb25zdCBjaGFyKiBmdW5jTmFtZSwgY29uc3QgUmV0dXJuPGhhcmR3YXJlOjphdWRpbzo6VjJfMDo6UmVzdWx0PiYgcmV0KSB7Ci0gICAgICAgIGlmICghcmV0LmlzT2soKSkgewotICAgICAgICAgICAgZW1pdEVycm9yKGZ1bmNOYW1lLCByZXQuZGVzY3JpcHRpb24oKS5jX3N0cigpKTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gcmV0LmlzT2soKSA/IGFuYWx5emVSZXN1bHQocmV0KSA6IEZBSUxFRF9UUkFOU0FDVElPTjsKLSAgICB9Ci0KLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgotICAgIHN0YXR1c190IHByb2Nlc3NSZXR1cm4oCi0gICAgICAgICAgICBjb25zdCBjaGFyKiBmdW5jTmFtZSwgY29uc3QgUmV0dXJuPFQ+JiByZXQsIGhhcmR3YXJlOjphdWRpbzo6VjJfMDo6UmVzdWx0IHJldHZhbCkgewotICAgICAgICBpZiAoIXJldC5pc09rKCkpIHsKLSAgICAgICAgICAgIGVtaXRFcnJvcihmdW5jTmFtZSwgcmV0LmRlc2NyaXB0aW9uKCkuY19zdHIoKSk7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIHJldC5pc09rKCkgPyBhbmFseXplUmVzdWx0KHJldHZhbCkgOiBGQUlMRURfVFJBTlNBQ1RJT047Ci0gICAgfQotCi0gIHByaXZhdGU6Ci0gICAgY29uc3QgY2hhciogbUNsYXNzTmFtZTsKLQotICAgIHN0YXRpYyBzdGF0dXNfdCBhbmFseXplUmVzdWx0KGNvbnN0IGhhcmR3YXJlOjphdWRpbzo6VjJfMDo6UmVzdWx0JiByZXN1bHQpOwotCi0gICAgdm9pZCBlbWl0RXJyb3IoY29uc3QgY2hhciogZnVuY05hbWUsIGNvbnN0IGNoYXIqIGRlc2NyaXB0aW9uKTsKLX07Ci0KLX0gIC8vIG5hbWVzcGFjZSBhbmRyb2lkCi0KLSNlbmRpZiAvLyBBTkRST0lEX0hBUkRXQVJFX0NPTlZFUlNJT05fSEVMUEVSX0hJRExfSApkaWZmIC0tZ2l0IGEvbWVkaWEvbGliYXVkaW9oYWwvMi4wL0RldmljZUhhbEhpZGwuY3BwIGIvbWVkaWEvbGliYXVkaW9oYWwvMi4wL0RldmljZUhhbEhpZGwuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1Yjk5ZDcwLi4wMDAwMDAwCi0tLSBhL21lZGlhL2xpYmF1ZGlvaGFsLzIuMC9EZXZpY2VIYWxIaWRsLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDM2NCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDE2IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKLSAqCi0gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKLSAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KLSAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotICoKLSAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0gKgotICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQotICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKLSAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgotICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAotICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCi0gKi8KLQotI2luY2x1ZGUgPHN0ZGlvLmg+Ci0KLSNkZWZpbmUgTE9HX1RBRyAiRGV2aWNlSGFsSGlkbCIKLS8vI2RlZmluZSBMT0dfTkRFQlVHIDAKLQotI2luY2x1ZGUgPGFuZHJvaWQvaGFyZHdhcmUvYXVkaW8vMi4wL0lQcmltYXJ5RGV2aWNlLmg+Ci0jaW5jbHVkZSA8Y3V0aWxzL25hdGl2ZV9oYW5kbGUuaD4KLSNpbmNsdWRlIDxod2JpbmRlci9JUENUaHJlYWRTdGF0ZS5oPgotI2luY2x1ZGUgPHV0aWxzL0xvZy5oPgotCi0jaW5jbHVkZSAiRGV2aWNlSGFsSGlkbC5oIgotI2luY2x1ZGUgIkhpZGxVdGlscy5oIgotI2luY2x1ZGUgIlN0cmVhbUhhbEhpZGwuaCIKLQotdXNpbmcgOjphbmRyb2lkOjpoYXJkd2FyZTo6YXVkaW86OmNvbW1vbjo6VjJfMDo6QXVkaW9Db25maWc7Ci11c2luZyA6OmFuZHJvaWQ6OmhhcmR3YXJlOjphdWRpbzo6Y29tbW9uOjpWMl8wOjpBdWRpb0RldmljZTsKLXVzaW5nIDo6YW5kcm9pZDo6aGFyZHdhcmU6OmF1ZGlvOjpjb21tb246OlYyXzA6OkF1ZGlvSW5wdXRGbGFnOwotdXNpbmcgOjphbmRyb2lkOjpoYXJkd2FyZTo6YXVkaW86OmNvbW1vbjo6VjJfMDo6QXVkaW9PdXRwdXRGbGFnOwotdXNpbmcgOjphbmRyb2lkOjpoYXJkd2FyZTo6YXVkaW86OmNvbW1vbjo6VjJfMDo6QXVkaW9QYXRjaEhhbmRsZTsKLXVzaW5nIDo6YW5kcm9pZDo6aGFyZHdhcmU6OmF1ZGlvOjpjb21tb246OlYyXzA6OkF1ZGlvUG9ydDsKLXVzaW5nIDo6YW5kcm9pZDo6aGFyZHdhcmU6OmF1ZGlvOjpjb21tb246OlYyXzA6OkF1ZGlvUG9ydENvbmZpZzsKLXVzaW5nIDo6YW5kcm9pZDo6aGFyZHdhcmU6OmF1ZGlvOjpjb21tb246OlYyXzA6OkF1ZGlvTW9kZTsKLXVzaW5nIDo6YW5kcm9pZDo6aGFyZHdhcmU6OmF1ZGlvOjpjb21tb246OlYyXzA6OkF1ZGlvU291cmNlOwotdXNpbmcgOjphbmRyb2lkOjpoYXJkd2FyZTo6YXVkaW86OmNvbW1vbjo6VjJfMDo6SGlkbFV0aWxzOwotdXNpbmcgOjphbmRyb2lkOjpoYXJkd2FyZTo6YXVkaW86OlYyXzA6OkRldmljZUFkZHJlc3M7Ci11c2luZyA6OmFuZHJvaWQ6OmhhcmR3YXJlOjphdWRpbzo6VjJfMDo6SVByaW1hcnlEZXZpY2U7Ci11c2luZyA6OmFuZHJvaWQ6OmhhcmR3YXJlOjphdWRpbzo6VjJfMDo6UGFyYW1ldGVyVmFsdWU7Ci11c2luZyA6OmFuZHJvaWQ6OmhhcmR3YXJlOjphdWRpbzo6VjJfMDo6UmVzdWx0OwotdXNpbmcgOjphbmRyb2lkOjpoYXJkd2FyZTo6aGlkbF9zdHJpbmc7Ci11c2luZyA6OmFuZHJvaWQ6OmhhcmR3YXJlOjpoaWRsX3ZlYzsKLQotbmFtZXNwYWNlIGFuZHJvaWQgewotCi1uYW1lc3BhY2UgewotCi1zdGF0dXNfdCBkZXZpY2VBZGRyZXNzRnJvbUhhbCgKLSAgICAgICAgYXVkaW9fZGV2aWNlc190IGRldmljZSwgY29uc3QgY2hhciogaGFsQWRkcmVzcywgRGV2aWNlQWRkcmVzcyogYWRkcmVzcykgewotICAgIGFkZHJlc3MtPmRldmljZSA9IEF1ZGlvRGV2aWNlKGRldmljZSk7Ci0KLSAgICBpZiAoaGFsQWRkcmVzcyA9PSBudWxscHRyIHx8IHN0cm5sZW4oaGFsQWRkcmVzcywgQVVESU9fREVWSUNFX01BWF9BRERSRVNTX0xFTikgPT0gMCkgewotICAgICAgICByZXR1cm4gT0s7Ci0gICAgfQotICAgIGNvbnN0IGJvb2wgaXNJbnB1dCA9IChkZXZpY2UgJiBBVURJT19ERVZJQ0VfQklUX0lOKSAhPSAwOwotICAgIGlmIChpc0lucHV0KSBkZXZpY2UgJj0gfkFVRElPX0RFVklDRV9CSVRfSU47Ci0gICAgaWYgKCghaXNJbnB1dCAmJiAoZGV2aWNlICYgQVVESU9fREVWSUNFX09VVF9BTExfQTJEUCkgIT0gMCkKLSAgICAgICAgICAgIHx8IChpc0lucHV0ICYmIChkZXZpY2UgJiBBVURJT19ERVZJQ0VfSU5fQkxVRVRPT1RIX0EyRFApICE9IDApKSB7Ci0gICAgICAgIGludCBzdGF0dXMgPSBzc2NhbmYoaGFsQWRkcmVzcywKLSAgICAgICAgICAgICAgICAiJWhoWDolaGhYOiVoaFg6JWhoWDolaGhYOiVoaFgiLAotICAgICAgICAgICAgICAgICZhZGRyZXNzLT5hZGRyZXNzLm1hY1swXSwgJmFkZHJlc3MtPmFkZHJlc3MubWFjWzFdLCAmYWRkcmVzcy0+YWRkcmVzcy5tYWNbMl0sCi0gICAgICAgICAgICAgICAgJmFkZHJlc3MtPmFkZHJlc3MubWFjWzNdLCAmYWRkcmVzcy0+YWRkcmVzcy5tYWNbNF0sICZhZGRyZXNzLT5hZGRyZXNzLm1hY1s1XSk7Ci0gICAgICAgIHJldHVybiBzdGF0dXMgPT0gNiA/IE9LIDogQkFEX1ZBTFVFOwotICAgIH0gZWxzZSBpZiAoKCFpc0lucHV0ICYmIChkZXZpY2UgJiBBVURJT19ERVZJQ0VfT1VUX0lQKSAhPSAwKQotICAgICAgICAgICAgfHwgKGlzSW5wdXQgJiYgKGRldmljZSAmIEFVRElPX0RFVklDRV9JTl9JUCkgIT0gMCkpIHsKLSAgICAgICAgaW50IHN0YXR1cyA9IHNzY2FuZihoYWxBZGRyZXNzLAotICAgICAgICAgICAgICAgICIlaGh1LiVoaHUuJWhodS4laGh1IiwKLSAgICAgICAgICAgICAgICAmYWRkcmVzcy0+YWRkcmVzcy5pcHY0WzBdLCAmYWRkcmVzcy0+YWRkcmVzcy5pcHY0WzFdLAotICAgICAgICAgICAgICAgICZhZGRyZXNzLT5hZGRyZXNzLmlwdjRbMl0sICZhZGRyZXNzLT5hZGRyZXNzLmlwdjRbM10pOwotICAgICAgICByZXR1cm4gc3RhdHVzID09IDQgPyBPSyA6IEJBRF9WQUxVRTsKLSAgICB9IGVsc2UgaWYgKCghaXNJbnB1dCAmJiAoZGV2aWNlICYgQVVESU9fREVWSUNFX09VVF9BTExfVVNCKSkgIT0gMAotICAgICAgICAgICAgfHwgKGlzSW5wdXQgJiYgKGRldmljZSAmIEFVRElPX0RFVklDRV9JTl9BTExfVVNCKSkgIT0gMCkgewotICAgICAgICBpbnQgc3RhdHVzID0gc3NjYW5mKGhhbEFkZHJlc3MsCi0gICAgICAgICAgICAgICAgImNhcmQ9JWQ7ZGV2aWNlPSVkIiwKLSAgICAgICAgICAgICAgICAmYWRkcmVzcy0+YWRkcmVzcy5hbHNhLmNhcmQsICZhZGRyZXNzLT5hZGRyZXNzLmFsc2EuZGV2aWNlKTsKLSAgICAgICAgcmV0dXJuIHN0YXR1cyA9PSAyID8gT0sgOiBCQURfVkFMVUU7Ci0gICAgfSBlbHNlIGlmICgoIWlzSW5wdXQgJiYgKGRldmljZSAmIEFVRElPX0RFVklDRV9PVVRfQlVTKSAhPSAwKQotICAgICAgICAgICAgfHwgKGlzSW5wdXQgJiYgKGRldmljZSAmIEFVRElPX0RFVklDRV9JTl9CVVMpICE9IDApKSB7Ci0gICAgICAgIGlmIChoYWxBZGRyZXNzICE9IE5VTEwpIHsKLSAgICAgICAgICAgIGFkZHJlc3MtPmJ1c0FkZHJlc3MgPSBoYWxBZGRyZXNzOwotICAgICAgICAgICAgcmV0dXJuIE9LOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiBCQURfVkFMVUU7Ci0gICAgfSBlbHNlIGlmICgoIWlzSW5wdXQgJiYgKGRldmljZSAmIEFVRElPX0RFVklDRV9PVVRfUkVNT1RFX1NVQk1JWCkpICE9IDAKLSAgICAgICAgICAgIHx8IChpc0lucHV0ICYmIChkZXZpY2UgJiBBVURJT19ERVZJQ0VfSU5fUkVNT1RFX1NVQk1JWCkgIT0gMCkpIHsKLSAgICAgICAgaWYgKGhhbEFkZHJlc3MgIT0gTlVMTCkgewotICAgICAgICAgICAgYWRkcmVzcy0+clN1Ym1peEFkZHJlc3MgPSBoYWxBZGRyZXNzOwotICAgICAgICAgICAgcmV0dXJuIE9LOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiBCQURfVkFMVUU7Ci0gICAgfQotICAgIHJldHVybiBPSzsKLX0KLQotfSAgLy8gbmFtZXNwYWNlCi0KLURldmljZUhhbEhpZGw6OkRldmljZUhhbEhpZGwoY29uc3Qgc3A8SURldmljZT4mIGRldmljZSkKLSAgICAgICAgOiBDb252ZXJzaW9uSGVscGVySGlkbCgiRGV2aWNlIiksIG1EZXZpY2UoZGV2aWNlKSwKLSAgICAgICAgICBtUHJpbWFyeURldmljZShJUHJpbWFyeURldmljZTo6Y2FzdEZyb20oZGV2aWNlKSkgewotfQotCi1EZXZpY2VIYWxIaWRsOjp+RGV2aWNlSGFsSGlkbCgpIHsKLSAgICBpZiAobURldmljZSAhPSAwKSB7Ci0gICAgICAgIG1EZXZpY2UuY2xlYXIoKTsKLSAgICAgICAgaGFyZHdhcmU6OklQQ1RocmVhZFN0YXRlOjpzZWxmKCktPmZsdXNoQ29tbWFuZHMoKTsKLSAgICB9Ci19Ci0KLXN0YXR1c190IERldmljZUhhbEhpZGw6OmdldFN1cHBvcnRlZERldmljZXModWludDMyX3QqKSB7Ci0gICAgLy8gT2Jzb2xldGUuCi0gICAgcmV0dXJuIElOVkFMSURfT1BFUkFUSU9OOwotfQotCi1zdGF0dXNfdCBEZXZpY2VIYWxIaWRsOjppbml0Q2hlY2soKSB7Ci0gICAgaWYgKG1EZXZpY2UgPT0gMCkgcmV0dXJuIE5PX0lOSVQ7Ci0gICAgcmV0dXJuIHByb2Nlc3NSZXR1cm4oImluaXRDaGVjayIsIG1EZXZpY2UtPmluaXRDaGVjaygpKTsKLX0KLQotc3RhdHVzX3QgRGV2aWNlSGFsSGlkbDo6c2V0Vm9pY2VWb2x1bWUoZmxvYXQgdm9sdW1lKSB7Ci0gICAgaWYgKG1EZXZpY2UgPT0gMCkgcmV0dXJuIE5PX0lOSVQ7Ci0gICAgaWYgKG1QcmltYXJ5RGV2aWNlID09IDApIHJldHVybiBJTlZBTElEX09QRVJBVElPTjsKLSAgICByZXR1cm4gcHJvY2Vzc1JldHVybigic2V0Vm9pY2VWb2x1bWUiLCBtUHJpbWFyeURldmljZS0+c2V0Vm9pY2VWb2x1bWUodm9sdW1lKSk7Ci19Ci0KLXN0YXR1c190IERldmljZUhhbEhpZGw6OnNldE1hc3RlclZvbHVtZShmbG9hdCB2b2x1bWUpIHsKLSAgICBpZiAobURldmljZSA9PSAwKSByZXR1cm4gTk9fSU5JVDsKLSAgICBpZiAobVByaW1hcnlEZXZpY2UgPT0gMCkgcmV0dXJuIElOVkFMSURfT1BFUkFUSU9OOwotICAgIHJldHVybiBwcm9jZXNzUmV0dXJuKCJzZXRNYXN0ZXJWb2x1bWUiLCBtUHJpbWFyeURldmljZS0+c2V0TWFzdGVyVm9sdW1lKHZvbHVtZSkpOwotfQotCi1zdGF0dXNfdCBEZXZpY2VIYWxIaWRsOjpnZXRNYXN0ZXJWb2x1bWUoZmxvYXQgKnZvbHVtZSkgewotICAgIGlmIChtRGV2aWNlID09IDApIHJldHVybiBOT19JTklUOwotICAgIGlmIChtUHJpbWFyeURldmljZSA9PSAwKSByZXR1cm4gSU5WQUxJRF9PUEVSQVRJT047Ci0gICAgUmVzdWx0IHJldHZhbDsKLSAgICBSZXR1cm48dm9pZD4gcmV0ID0gbVByaW1hcnlEZXZpY2UtPmdldE1hc3RlclZvbHVtZSgKLSAgICAgICAgICAgIFsmXShSZXN1bHQgciwgZmxvYXQgdikgewotICAgICAgICAgICAgICAgIHJldHZhbCA9IHI7Ci0gICAgICAgICAgICAgICAgaWYgKHJldHZhbCA9PSBSZXN1bHQ6Ok9LKSB7Ci0gICAgICAgICAgICAgICAgICAgICp2b2x1bWUgPSB2OwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0pOwotICAgIHJldHVybiBwcm9jZXNzUmV0dXJuKCJnZXRNYXN0ZXJWb2x1bWUiLCByZXQsIHJldHZhbCk7Ci19Ci0KLXN0YXR1c190IERldmljZUhhbEhpZGw6OnNldE1vZGUoYXVkaW9fbW9kZV90IG1vZGUpIHsKLSAgICBpZiAobURldmljZSA9PSAwKSByZXR1cm4gTk9fSU5JVDsKLSAgICBpZiAobVByaW1hcnlEZXZpY2UgPT0gMCkgcmV0dXJuIElOVkFMSURfT1BFUkFUSU9OOwotICAgIHJldHVybiBwcm9jZXNzUmV0dXJuKCJzZXRNb2RlIiwgbVByaW1hcnlEZXZpY2UtPnNldE1vZGUoQXVkaW9Nb2RlKG1vZGUpKSk7Ci19Ci0KLXN0YXR1c190IERldmljZUhhbEhpZGw6OnNldE1pY011dGUoYm9vbCBzdGF0ZSkgewotICAgIGlmIChtRGV2aWNlID09IDApIHJldHVybiBOT19JTklUOwotICAgIHJldHVybiBwcm9jZXNzUmV0dXJuKCJzZXRNaWNNdXRlIiwgbURldmljZS0+c2V0TWljTXV0ZShzdGF0ZSkpOwotfQotCi1zdGF0dXNfdCBEZXZpY2VIYWxIaWRsOjpnZXRNaWNNdXRlKGJvb2wgKnN0YXRlKSB7Ci0gICAgaWYgKG1EZXZpY2UgPT0gMCkgcmV0dXJuIE5PX0lOSVQ7Ci0gICAgUmVzdWx0IHJldHZhbDsKLSAgICBSZXR1cm48dm9pZD4gcmV0ID0gbURldmljZS0+Z2V0TWljTXV0ZSgKLSAgICAgICAgICAgIFsmXShSZXN1bHQgciwgYm9vbCBtdXRlKSB7Ci0gICAgICAgICAgICAgICAgcmV0dmFsID0gcjsKLSAgICAgICAgICAgICAgICBpZiAocmV0dmFsID09IFJlc3VsdDo6T0spIHsKLSAgICAgICAgICAgICAgICAgICAgKnN0YXRlID0gbXV0ZTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9KTsKLSAgICByZXR1cm4gcHJvY2Vzc1JldHVybigiZ2V0TWljTXV0ZSIsIHJldCwgcmV0dmFsKTsKLX0KLQotc3RhdHVzX3QgRGV2aWNlSGFsSGlkbDo6c2V0TWFzdGVyTXV0ZShib29sIHN0YXRlKSB7Ci0gICAgaWYgKG1EZXZpY2UgPT0gMCkgcmV0dXJuIE5PX0lOSVQ7Ci0gICAgcmV0dXJuIHByb2Nlc3NSZXR1cm4oInNldE1hc3Rlck11dGUiLCBtRGV2aWNlLT5zZXRNYXN0ZXJNdXRlKHN0YXRlKSk7Ci19Ci0KLXN0YXR1c190IERldmljZUhhbEhpZGw6OmdldE1hc3Rlck11dGUoYm9vbCAqc3RhdGUpIHsKLSAgICBpZiAobURldmljZSA9PSAwKSByZXR1cm4gTk9fSU5JVDsKLSAgICBSZXN1bHQgcmV0dmFsOwotICAgIFJldHVybjx2b2lkPiByZXQgPSBtRGV2aWNlLT5nZXRNYXN0ZXJNdXRlKAotICAgICAgICAgICAgWyZdKFJlc3VsdCByLCBib29sIG11dGUpIHsKLSAgICAgICAgICAgICAgICByZXR2YWwgPSByOwotICAgICAgICAgICAgICAgIGlmIChyZXR2YWwgPT0gUmVzdWx0OjpPSykgewotICAgICAgICAgICAgICAgICAgICAqc3RhdGUgPSBtdXRlOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0pOwotICAgIHJldHVybiBwcm9jZXNzUmV0dXJuKCJnZXRNYXN0ZXJNdXRlIiwgcmV0LCByZXR2YWwpOwotfQotCi1zdGF0dXNfdCBEZXZpY2VIYWxIaWRsOjpzZXRQYXJhbWV0ZXJzKGNvbnN0IFN0cmluZzgmIGt2UGFpcnMpIHsKLSAgICBpZiAobURldmljZSA9PSAwKSByZXR1cm4gTk9fSU5JVDsKLSAgICBoaWRsX3ZlYzxQYXJhbWV0ZXJWYWx1ZT4gaGlkbFBhcmFtczsKLSAgICBzdGF0dXNfdCBzdGF0dXMgPSBwYXJhbWV0ZXJzRnJvbUhhbChrdlBhaXJzLCAmaGlkbFBhcmFtcyk7Ci0gICAgaWYgKHN0YXR1cyAhPSBPSykgcmV0dXJuIHN0YXR1czsKLSAgICByZXR1cm4gcHJvY2Vzc1JldHVybigic2V0UGFyYW1ldGVycyIsIG1EZXZpY2UtPnNldFBhcmFtZXRlcnMoaGlkbFBhcmFtcykpOwotfQotCi1zdGF0dXNfdCBEZXZpY2VIYWxIaWRsOjpnZXRQYXJhbWV0ZXJzKGNvbnN0IFN0cmluZzgmIGtleXMsIFN0cmluZzggKnZhbHVlcykgewotICAgIHZhbHVlcy0+Y2xlYXIoKTsKLSAgICBpZiAobURldmljZSA9PSAwKSByZXR1cm4gTk9fSU5JVDsKLSAgICBoaWRsX3ZlYzxoaWRsX3N0cmluZz4gaGlkbEtleXM7Ci0gICAgc3RhdHVzX3Qgc3RhdHVzID0ga2V5c0Zyb21IYWwoa2V5cywgJmhpZGxLZXlzKTsKLSAgICBpZiAoc3RhdHVzICE9IE9LKSByZXR1cm4gc3RhdHVzOwotICAgIFJlc3VsdCByZXR2YWw7Ci0gICAgUmV0dXJuPHZvaWQ+IHJldCA9IG1EZXZpY2UtPmdldFBhcmFtZXRlcnMoCi0gICAgICAgICAgICBoaWRsS2V5cywKLSAgICAgICAgICAgIFsmXShSZXN1bHQgciwgY29uc3QgaGlkbF92ZWM8UGFyYW1ldGVyVmFsdWU+JiBwYXJhbWV0ZXJzKSB7Ci0gICAgICAgICAgICAgICAgcmV0dmFsID0gcjsKLSAgICAgICAgICAgICAgICBpZiAocmV0dmFsID09IFJlc3VsdDo6T0spIHsKLSAgICAgICAgICAgICAgICAgICAgcGFyYW1ldGVyc1RvSGFsKHBhcmFtZXRlcnMsIHZhbHVlcyk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfSk7Ci0gICAgcmV0dXJuIHByb2Nlc3NSZXR1cm4oImdldFBhcmFtZXRlcnMiLCByZXQsIHJldHZhbCk7Ci19Ci0KLXN0YXR1c190IERldmljZUhhbEhpZGw6OmdldElucHV0QnVmZmVyU2l6ZSgKLSAgICAgICAgY29uc3Qgc3RydWN0IGF1ZGlvX2NvbmZpZyAqY29uZmlnLCBzaXplX3QgKnNpemUpIHsKLSAgICBpZiAobURldmljZSA9PSAwKSByZXR1cm4gTk9fSU5JVDsKLSAgICBBdWRpb0NvbmZpZyBoaWRsQ29uZmlnOwotICAgIEhpZGxVdGlsczo6YXVkaW9Db25maWdGcm9tSGFsKCpjb25maWcsICZoaWRsQ29uZmlnKTsKLSAgICBSZXN1bHQgcmV0dmFsOwotICAgIFJldHVybjx2b2lkPiByZXQgPSBtRGV2aWNlLT5nZXRJbnB1dEJ1ZmZlclNpemUoCi0gICAgICAgICAgICBoaWRsQ29uZmlnLAotICAgICAgICAgICAgWyZdKFJlc3VsdCByLCB1aW50NjRfdCBidWZmZXJTaXplKSB7Ci0gICAgICAgICAgICAgICAgcmV0dmFsID0gcjsKLSAgICAgICAgICAgICAgICBpZiAocmV0dmFsID09IFJlc3VsdDo6T0spIHsKLSAgICAgICAgICAgICAgICAgICAgKnNpemUgPSBzdGF0aWNfY2FzdDxzaXplX3Q+KGJ1ZmZlclNpemUpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0pOwotICAgIHJldHVybiBwcm9jZXNzUmV0dXJuKCJnZXRJbnB1dEJ1ZmZlclNpemUiLCByZXQsIHJldHZhbCk7Ci19Ci0KLXN0YXR1c190IERldmljZUhhbEhpZGw6Om9wZW5PdXRwdXRTdHJlYW0oCi0gICAgICAgIGF1ZGlvX2lvX2hhbmRsZV90IGhhbmRsZSwKLSAgICAgICAgYXVkaW9fZGV2aWNlc190IGRldmljZXMsCi0gICAgICAgIGF1ZGlvX291dHB1dF9mbGFnc190IGZsYWdzLAotICAgICAgICBzdHJ1Y3QgYXVkaW9fY29uZmlnICpjb25maWcsCi0gICAgICAgIGNvbnN0IGNoYXIgKmFkZHJlc3MsCi0gICAgICAgIHNwPFN0cmVhbU91dEhhbEludGVyZmFjZT4gKm91dFN0cmVhbSkgewotICAgIGlmIChtRGV2aWNlID09IDApIHJldHVybiBOT19JTklUOwotICAgIERldmljZUFkZHJlc3MgaGlkbERldmljZTsKLSAgICBzdGF0dXNfdCBzdGF0dXMgPSBkZXZpY2VBZGRyZXNzRnJvbUhhbChkZXZpY2VzLCBhZGRyZXNzLCAmaGlkbERldmljZSk7Ci0gICAgaWYgKHN0YXR1cyAhPSBPSykgcmV0dXJuIHN0YXR1czsKLSAgICBBdWRpb0NvbmZpZyBoaWRsQ29uZmlnOwotICAgIEhpZGxVdGlsczo6YXVkaW9Db25maWdGcm9tSGFsKCpjb25maWcsICZoaWRsQ29uZmlnKTsKLSAgICBSZXN1bHQgcmV0dmFsID0gUmVzdWx0OjpOT1RfSU5JVElBTElaRUQ7Ci0gICAgUmV0dXJuPHZvaWQ+IHJldCA9IG1EZXZpY2UtPm9wZW5PdXRwdXRTdHJlYW0oCi0gICAgICAgICAgICBoYW5kbGUsCi0gICAgICAgICAgICBoaWRsRGV2aWNlLAotICAgICAgICAgICAgaGlkbENvbmZpZywKLSAgICAgICAgICAgIEF1ZGlvT3V0cHV0RmxhZyhmbGFncyksCi0gICAgICAgICAgICBbJl0oUmVzdWx0IHIsIGNvbnN0IHNwPElTdHJlYW1PdXQ+JiByZXN1bHQsIGNvbnN0IEF1ZGlvQ29uZmlnJiBzdWdnZXN0ZWRDb25maWcpIHsKLSAgICAgICAgICAgICAgICByZXR2YWwgPSByOwotICAgICAgICAgICAgICAgIGlmIChyZXR2YWwgPT0gUmVzdWx0OjpPSykgewotICAgICAgICAgICAgICAgICAgICAqb3V0U3RyZWFtID0gbmV3IFN0cmVhbU91dEhhbEhpZGwocmVzdWx0KTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgSGlkbFV0aWxzOjphdWRpb0NvbmZpZ1RvSGFsKHN1Z2dlc3RlZENvbmZpZywgY29uZmlnKTsKLSAgICAgICAgICAgIH0pOwotICAgIHJldHVybiBwcm9jZXNzUmV0dXJuKCJvcGVuT3V0cHV0U3RyZWFtIiwgcmV0LCByZXR2YWwpOwotfQotCi1zdGF0dXNfdCBEZXZpY2VIYWxIaWRsOjpvcGVuSW5wdXRTdHJlYW0oCi0gICAgICAgIGF1ZGlvX2lvX2hhbmRsZV90IGhhbmRsZSwKLSAgICAgICAgYXVkaW9fZGV2aWNlc190IGRldmljZXMsCi0gICAgICAgIHN0cnVjdCBhdWRpb19jb25maWcgKmNvbmZpZywKLSAgICAgICAgYXVkaW9faW5wdXRfZmxhZ3NfdCBmbGFncywKLSAgICAgICAgY29uc3QgY2hhciAqYWRkcmVzcywKLSAgICAgICAgYXVkaW9fc291cmNlX3Qgc291cmNlLAotICAgICAgICBzcDxTdHJlYW1JbkhhbEludGVyZmFjZT4gKmluU3RyZWFtKSB7Ci0gICAgaWYgKG1EZXZpY2UgPT0gMCkgcmV0dXJuIE5PX0lOSVQ7Ci0gICAgRGV2aWNlQWRkcmVzcyBoaWRsRGV2aWNlOwotICAgIHN0YXR1c190IHN0YXR1cyA9IGRldmljZUFkZHJlc3NGcm9tSGFsKGRldmljZXMsIGFkZHJlc3MsICZoaWRsRGV2aWNlKTsKLSAgICBpZiAoc3RhdHVzICE9IE9LKSByZXR1cm4gc3RhdHVzOwotICAgIEF1ZGlvQ29uZmlnIGhpZGxDb25maWc7Ci0gICAgSGlkbFV0aWxzOjphdWRpb0NvbmZpZ0Zyb21IYWwoKmNvbmZpZywgJmhpZGxDb25maWcpOwotICAgIFJlc3VsdCByZXR2YWwgPSBSZXN1bHQ6Ok5PVF9JTklUSUFMSVpFRDsKLSAgICBSZXR1cm48dm9pZD4gcmV0ID0gbURldmljZS0+b3BlbklucHV0U3RyZWFtKAotICAgICAgICAgICAgaGFuZGxlLAotICAgICAgICAgICAgaGlkbERldmljZSwKLSAgICAgICAgICAgIGhpZGxDb25maWcsCi0gICAgICAgICAgICBBdWRpb0lucHV0RmxhZyhmbGFncyksCi0gICAgICAgICAgICBBdWRpb1NvdXJjZShzb3VyY2UpLAotICAgICAgICAgICAgWyZdKFJlc3VsdCByLCBjb25zdCBzcDxJU3RyZWFtSW4+JiByZXN1bHQsIGNvbnN0IEF1ZGlvQ29uZmlnJiBzdWdnZXN0ZWRDb25maWcpIHsKLSAgICAgICAgICAgICAgICByZXR2YWwgPSByOwotICAgICAgICAgICAgICAgIGlmIChyZXR2YWwgPT0gUmVzdWx0OjpPSykgewotICAgICAgICAgICAgICAgICAgICAqaW5TdHJlYW0gPSBuZXcgU3RyZWFtSW5IYWxIaWRsKHJlc3VsdCk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIEhpZGxVdGlsczo6YXVkaW9Db25maWdUb0hhbChzdWdnZXN0ZWRDb25maWcsIGNvbmZpZyk7Ci0gICAgICAgICAgICB9KTsKLSAgICByZXR1cm4gcHJvY2Vzc1JldHVybigib3BlbklucHV0U3RyZWFtIiwgcmV0LCByZXR2YWwpOwotfQotCi1zdGF0dXNfdCBEZXZpY2VIYWxIaWRsOjpzdXBwb3J0c0F1ZGlvUGF0Y2hlcyhib29sICpzdXBwb3J0c1BhdGNoZXMpIHsKLSAgICBpZiAobURldmljZSA9PSAwKSByZXR1cm4gTk9fSU5JVDsKLSAgICByZXR1cm4gcHJvY2Vzc1JldHVybigic3VwcG9ydHNBdWRpb1BhdGNoZXMiLCBtRGV2aWNlLT5zdXBwb3J0c0F1ZGlvUGF0Y2hlcygpLCBzdXBwb3J0c1BhdGNoZXMpOwotfQotCi1zdGF0dXNfdCBEZXZpY2VIYWxIaWRsOjpjcmVhdGVBdWRpb1BhdGNoKAotICAgICAgICB1bnNpZ25lZCBpbnQgbnVtX3NvdXJjZXMsCi0gICAgICAgIGNvbnN0IHN0cnVjdCBhdWRpb19wb3J0X2NvbmZpZyAqc291cmNlcywKLSAgICAgICAgdW5zaWduZWQgaW50IG51bV9zaW5rcywKLSAgICAgICAgY29uc3Qgc3RydWN0IGF1ZGlvX3BvcnRfY29uZmlnICpzaW5rcywKLSAgICAgICAgYXVkaW9fcGF0Y2hfaGFuZGxlX3QgKnBhdGNoKSB7Ci0gICAgaWYgKG1EZXZpY2UgPT0gMCkgcmV0dXJuIE5PX0lOSVQ7Ci0gICAgaGlkbF92ZWM8QXVkaW9Qb3J0Q29uZmlnPiBoaWRsU291cmNlcywgaGlkbFNpbmtzOwotICAgIEhpZGxVdGlsczo6YXVkaW9Qb3J0Q29uZmlnc0Zyb21IYWwobnVtX3NvdXJjZXMsIHNvdXJjZXMsICZoaWRsU291cmNlcyk7Ci0gICAgSGlkbFV0aWxzOjphdWRpb1BvcnRDb25maWdzRnJvbUhhbChudW1fc2lua3MsIHNpbmtzLCAmaGlkbFNpbmtzKTsKLSAgICBSZXN1bHQgcmV0dmFsOwotICAgIFJldHVybjx2b2lkPiByZXQgPSBtRGV2aWNlLT5jcmVhdGVBdWRpb1BhdGNoKAotICAgICAgICAgICAgaGlkbFNvdXJjZXMsIGhpZGxTaW5rcywKLSAgICAgICAgICAgIFsmXShSZXN1bHQgciwgQXVkaW9QYXRjaEhhbmRsZSBoaWRsUGF0Y2gpIHsKLSAgICAgICAgICAgICAgICByZXR2YWwgPSByOwotICAgICAgICAgICAgICAgIGlmIChyZXR2YWwgPT0gUmVzdWx0OjpPSykgewotICAgICAgICAgICAgICAgICAgICAqcGF0Y2ggPSBzdGF0aWNfY2FzdDxhdWRpb19wYXRjaF9oYW5kbGVfdD4oaGlkbFBhdGNoKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9KTsKLSAgICByZXR1cm4gcHJvY2Vzc1JldHVybigiY3JlYXRlQXVkaW9QYXRjaCIsIHJldCwgcmV0dmFsKTsKLX0KLQotc3RhdHVzX3QgRGV2aWNlSGFsSGlkbDo6cmVsZWFzZUF1ZGlvUGF0Y2goYXVkaW9fcGF0Y2hfaGFuZGxlX3QgcGF0Y2gpIHsKLSAgICBpZiAobURldmljZSA9PSAwKSByZXR1cm4gTk9fSU5JVDsKLSAgICByZXR1cm4gcHJvY2Vzc1JldHVybigicmVsZWFzZUF1ZGlvUGF0Y2giLCBtRGV2aWNlLT5yZWxlYXNlQXVkaW9QYXRjaChwYXRjaCkpOwotfQotCi1zdGF0dXNfdCBEZXZpY2VIYWxIaWRsOjpnZXRBdWRpb1BvcnQoc3RydWN0IGF1ZGlvX3BvcnQgKnBvcnQpIHsKLSAgICBpZiAobURldmljZSA9PSAwKSByZXR1cm4gTk9fSU5JVDsKLSAgICBBdWRpb1BvcnQgaGlkbFBvcnQ7Ci0gICAgSGlkbFV0aWxzOjphdWRpb1BvcnRGcm9tSGFsKCpwb3J0LCAmaGlkbFBvcnQpOwotICAgIFJlc3VsdCByZXR2YWw7Ci0gICAgUmV0dXJuPHZvaWQ+IHJldCA9IG1EZXZpY2UtPmdldEF1ZGlvUG9ydCgKLSAgICAgICAgICAgIGhpZGxQb3J0LAotICAgICAgICAgICAgWyZdKFJlc3VsdCByLCBjb25zdCBBdWRpb1BvcnQmIHApIHsKLSAgICAgICAgICAgICAgICByZXR2YWwgPSByOwotICAgICAgICAgICAgICAgIGlmIChyZXR2YWwgPT0gUmVzdWx0OjpPSykgewotICAgICAgICAgICAgICAgICAgICBIaWRsVXRpbHM6OmF1ZGlvUG9ydFRvSGFsKHAsIHBvcnQpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0pOwotICAgIHJldHVybiBwcm9jZXNzUmV0dXJuKCJnZXRBdWRpb1BvcnQiLCByZXQsIHJldHZhbCk7Ci19Ci0KLXN0YXR1c190IERldmljZUhhbEhpZGw6OnNldEF1ZGlvUG9ydENvbmZpZyhjb25zdCBzdHJ1Y3QgYXVkaW9fcG9ydF9jb25maWcgKmNvbmZpZykgewotICAgIGlmIChtRGV2aWNlID09IDApIHJldHVybiBOT19JTklUOwotICAgIEF1ZGlvUG9ydENvbmZpZyBoaWRsQ29uZmlnOwotICAgIEhpZGxVdGlsczo6YXVkaW9Qb3J0Q29uZmlnRnJvbUhhbCgqY29uZmlnLCAmaGlkbENvbmZpZyk7Ci0gICAgcmV0dXJuIHByb2Nlc3NSZXR1cm4oInNldEF1ZGlvUG9ydENvbmZpZyIsIG1EZXZpY2UtPnNldEF1ZGlvUG9ydENvbmZpZyhoaWRsQ29uZmlnKSk7Ci19Ci0KLXN0YXR1c190IERldmljZUhhbEhpZGw6OmdldE1pY3JvcGhvbmVzKAotICAgICAgICBzdGQ6OnZlY3RvcjxtZWRpYTo6TWljcm9waG9uZUluZm8+ICptaWNyb3Bob25lc0luZm8gX191bnVzZWQpIHsKLSAgICBpZiAobURldmljZSA9PSAwKSByZXR1cm4gTk9fSU5JVDsKLSAgICByZXR1cm4gSU5WQUxJRF9PUEVSQVRJT047Ci19Ci0KLXN0YXR1c190IERldmljZUhhbEhpZGw6OmR1bXAoaW50IGZkKSB7Ci0gICAgaWYgKG1EZXZpY2UgPT0gMCkgcmV0dXJuIE5PX0lOSVQ7Ci0gICAgbmF0aXZlX2hhbmRsZV90KiBoaWRsSGFuZGxlID0gbmF0aXZlX2hhbmRsZV9jcmVhdGUoMSwgMCk7Ci0gICAgaGlkbEhhbmRsZS0+ZGF0YVswXSA9IGZkOwotICAgIFJldHVybjx2b2lkPiByZXQgPSBtRGV2aWNlLT5kZWJ1Z0R1bXAoaGlkbEhhbmRsZSk7Ci0gICAgbmF0aXZlX2hhbmRsZV9kZWxldGUoaGlkbEhhbmRsZSk7Ci0gICAgcmV0dXJuIHByb2Nlc3NSZXR1cm4oImR1bXAiLCByZXQpOwotfQotCi19IC8vIG5hbWVzcGFjZSBhbmRyb2lkCmRpZmYgLS1naXQgYS9tZWRpYS9saWJhdWRpb2hhbC8yLjAvRGV2aWNlSGFsSGlkbC5oIGIvbWVkaWEvbGliYXVkaW9oYWwvMi4wL0RldmljZUhhbEhpZGwuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggM2MxY2I1OS4uMDAwMDAwMAotLS0gYS9tZWRpYS9saWJhdWRpb2hhbC8yLjAvRGV2aWNlSGFsSGlkbC5oCisrKyAvZGV2L251bGwKQEAgLTEsMTI5ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTYgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAotICoKLSAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwotICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgotICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0gKgotICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLSAqCi0gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCi0gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAotICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCi0gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCi0gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KLSAqLwotCi0jaWZuZGVmIEFORFJPSURfSEFSRFdBUkVfREVWSUNFX0hBTF9ISURMX0gKLSNkZWZpbmUgQU5EUk9JRF9IQVJEV0FSRV9ERVZJQ0VfSEFMX0hJRExfSAotCi0jaW5jbHVkZSA8YW5kcm9pZC9oYXJkd2FyZS9hdWRpby8yLjAvSURldmljZS5oPgotI2luY2x1ZGUgPGFuZHJvaWQvaGFyZHdhcmUvYXVkaW8vMi4wL0lQcmltYXJ5RGV2aWNlLmg+Ci0jaW5jbHVkZSA8bWVkaWEvYXVkaW9oYWwvRGV2aWNlSGFsSW50ZXJmYWNlLmg+Ci0KLSNpbmNsdWRlICJDb252ZXJzaW9uSGVscGVySGlkbC5oIgotCi11c2luZyA6OmFuZHJvaWQ6OmhhcmR3YXJlOjphdWRpbzo6VjJfMDo6SURldmljZTsKLXVzaW5nIDo6YW5kcm9pZDo6aGFyZHdhcmU6OmF1ZGlvOjpWMl8wOjpJUHJpbWFyeURldmljZTsKLXVzaW5nIDo6YW5kcm9pZDo6aGFyZHdhcmU6OlJldHVybjsKLQotbmFtZXNwYWNlIGFuZHJvaWQgewotCi1jbGFzcyBEZXZpY2VIYWxIaWRsIDogcHVibGljIERldmljZUhhbEludGVyZmFjZSwgcHVibGljIENvbnZlcnNpb25IZWxwZXJIaWRsCi17Ci0gIHB1YmxpYzoKLSAgICAvLyBTZXRzIHRoZSB2YWx1ZSBvZiAnZGV2aWNlcycgdG8gYSBiaXRtYXNrIG9mIDEgb3IgbW9yZSB2YWx1ZXMgb2YgYXVkaW9fZGV2aWNlc190LgotICAgIHZpcnR1YWwgc3RhdHVzX3QgZ2V0U3VwcG9ydGVkRGV2aWNlcyh1aW50MzJfdCAqZGV2aWNlcyk7Ci0KLSAgICAvLyBDaGVjayB0byBzZWUgaWYgdGhlIGF1ZGlvIGhhcmR3YXJlIGludGVyZmFjZSBoYXMgYmVlbiBpbml0aWFsaXplZC4KLSAgICB2aXJ0dWFsIHN0YXR1c190IGluaXRDaGVjaygpOwotCi0gICAgLy8gU2V0IHRoZSBhdWRpbyB2b2x1bWUgb2YgYSB2b2ljZSBjYWxsLiBSYW5nZSBpcyBiZXR3ZWVuIDAuMCBhbmQgMS4wLgotICAgIHZpcnR1YWwgc3RhdHVzX3Qgc2V0Vm9pY2VWb2x1bWUoZmxvYXQgdm9sdW1lKTsKLQotICAgIC8vIFNldCB0aGUgYXVkaW8gdm9sdW1lIGZvciBhbGwgYXVkaW8gYWN0aXZpdGllcyBvdGhlciB0aGFuIHZvaWNlIGNhbGwuCi0gICAgdmlydHVhbCBzdGF0dXNfdCBzZXRNYXN0ZXJWb2x1bWUoZmxvYXQgdm9sdW1lKTsKLQotICAgIC8vIEdldCB0aGUgY3VycmVudCBtYXN0ZXIgdm9sdW1lIHZhbHVlIGZvciB0aGUgSEFMLgotICAgIHZpcnR1YWwgc3RhdHVzX3QgZ2V0TWFzdGVyVm9sdW1lKGZsb2F0ICp2b2x1bWUpOwotCi0gICAgLy8gQ2FsbGVkIHdoZW4gdGhlIGF1ZGlvIG1vZGUgY2hhbmdlcy4KLSAgICB2aXJ0dWFsIHN0YXR1c190IHNldE1vZGUoYXVkaW9fbW9kZV90IG1vZGUpOwotCi0gICAgLy8gTXV0aW5nIGNvbnRyb2wuCi0gICAgdmlydHVhbCBzdGF0dXNfdCBzZXRNaWNNdXRlKGJvb2wgc3RhdGUpOwotICAgIHZpcnR1YWwgc3RhdHVzX3QgZ2V0TWljTXV0ZShib29sICpzdGF0ZSk7Ci0gICAgdmlydHVhbCBzdGF0dXNfdCBzZXRNYXN0ZXJNdXRlKGJvb2wgc3RhdGUpOwotICAgIHZpcnR1YWwgc3RhdHVzX3QgZ2V0TWFzdGVyTXV0ZShib29sICpzdGF0ZSk7Ci0KLSAgICAvLyBTZXQgZ2xvYmFsIGF1ZGlvIHBhcmFtZXRlcnMuCi0gICAgdmlydHVhbCBzdGF0dXNfdCBzZXRQYXJhbWV0ZXJzKGNvbnN0IFN0cmluZzgmIGt2UGFpcnMpOwotCi0gICAgLy8gR2V0IGdsb2JhbCBhdWRpbyBwYXJhbWV0ZXJzLgotICAgIHZpcnR1YWwgc3RhdHVzX3QgZ2V0UGFyYW1ldGVycyhjb25zdCBTdHJpbmc4JiBrZXlzLCBTdHJpbmc4ICp2YWx1ZXMpOwotCi0gICAgLy8gUmV0dXJucyBhdWRpbyBpbnB1dCBidWZmZXIgc2l6ZSBhY2NvcmRpbmcgdG8gcGFyYW1ldGVycyBwYXNzZWQuCi0gICAgdmlydHVhbCBzdGF0dXNfdCBnZXRJbnB1dEJ1ZmZlclNpemUoY29uc3Qgc3RydWN0IGF1ZGlvX2NvbmZpZyAqY29uZmlnLAotICAgICAgICAgICAgc2l6ZV90ICpzaXplKTsKLQotICAgIC8vIENyZWF0ZXMgYW5kIG9wZW5zIHRoZSBhdWRpbyBoYXJkd2FyZSBvdXRwdXQgc3RyZWFtLiBUaGUgc3RyZWFtIGlzIGNsb3NlZAotICAgIC8vIGJ5IHJlbGVhc2luZyBhbGwgcmVmZXJlbmNlcyB0byB0aGUgcmV0dXJuZWQgb2JqZWN0LgotICAgIHZpcnR1YWwgc3RhdHVzX3Qgb3Blbk91dHB1dFN0cmVhbSgKLSAgICAgICAgICAgIGF1ZGlvX2lvX2hhbmRsZV90IGhhbmRsZSwKLSAgICAgICAgICAgIGF1ZGlvX2RldmljZXNfdCBkZXZpY2VzLAotICAgICAgICAgICAgYXVkaW9fb3V0cHV0X2ZsYWdzX3QgZmxhZ3MsCi0gICAgICAgICAgICBzdHJ1Y3QgYXVkaW9fY29uZmlnICpjb25maWcsCi0gICAgICAgICAgICBjb25zdCBjaGFyICphZGRyZXNzLAotICAgICAgICAgICAgc3A8U3RyZWFtT3V0SGFsSW50ZXJmYWNlPiAqb3V0U3RyZWFtKTsKLQotICAgIC8vIENyZWF0ZXMgYW5kIG9wZW5zIHRoZSBhdWRpbyBoYXJkd2FyZSBpbnB1dCBzdHJlYW0uIFRoZSBzdHJlYW0gaXMgY2xvc2VkCi0gICAgLy8gYnkgcmVsZWFzaW5nIGFsbCByZWZlcmVuY2VzIHRvIHRoZSByZXR1cm5lZCBvYmplY3QuCi0gICAgdmlydHVhbCBzdGF0dXNfdCBvcGVuSW5wdXRTdHJlYW0oCi0gICAgICAgICAgICBhdWRpb19pb19oYW5kbGVfdCBoYW5kbGUsCi0gICAgICAgICAgICBhdWRpb19kZXZpY2VzX3QgZGV2aWNlcywKLSAgICAgICAgICAgIHN0cnVjdCBhdWRpb19jb25maWcgKmNvbmZpZywKLSAgICAgICAgICAgIGF1ZGlvX2lucHV0X2ZsYWdzX3QgZmxhZ3MsCi0gICAgICAgICAgICBjb25zdCBjaGFyICphZGRyZXNzLAotICAgICAgICAgICAgYXVkaW9fc291cmNlX3Qgc291cmNlLAotICAgICAgICAgICAgc3A8U3RyZWFtSW5IYWxJbnRlcmZhY2U+ICppblN0cmVhbSk7Ci0KLSAgICAvLyBSZXR1cm5zIHdoZXRoZXIgY3JlYXRlQXVkaW9QYXRjaCBhbmQgcmVsZWFzZUF1ZGlvUGF0Y2ggb3BlcmF0aW9ucyBhcmUgc3VwcG9ydGVkLgotICAgIHZpcnR1YWwgc3RhdHVzX3Qgc3VwcG9ydHNBdWRpb1BhdGNoZXMoYm9vbCAqc3VwcG9ydHNQYXRjaGVzKTsKLQotICAgIC8vIENyZWF0ZXMgYW4gYXVkaW8gcGF0Y2ggYmV0d2VlbiBzZXZlcmFsIHNvdXJjZSBhbmQgc2luayBwb3J0cy4KLSAgICB2aXJ0dWFsIHN0YXR1c190IGNyZWF0ZUF1ZGlvUGF0Y2goCi0gICAgICAgICAgICB1bnNpZ25lZCBpbnQgbnVtX3NvdXJjZXMsCi0gICAgICAgICAgICBjb25zdCBzdHJ1Y3QgYXVkaW9fcG9ydF9jb25maWcgKnNvdXJjZXMsCi0gICAgICAgICAgICB1bnNpZ25lZCBpbnQgbnVtX3NpbmtzLAotICAgICAgICAgICAgY29uc3Qgc3RydWN0IGF1ZGlvX3BvcnRfY29uZmlnICpzaW5rcywKLSAgICAgICAgICAgIGF1ZGlvX3BhdGNoX2hhbmRsZV90ICpwYXRjaCk7Ci0KLSAgICAvLyBSZWxlYXNlcyBhbiBhdWRpbyBwYXRjaC4KLSAgICB2aXJ0dWFsIHN0YXR1c190IHJlbGVhc2VBdWRpb1BhdGNoKGF1ZGlvX3BhdGNoX2hhbmRsZV90IHBhdGNoKTsKLQotICAgIC8vIEZpbGxzIHRoZSBsaXN0IG9mIHN1cHBvcnRlZCBhdHRyaWJ1dGVzIGZvciBhIGdpdmVuIGF1ZGlvIHBvcnQuCi0gICAgdmlydHVhbCBzdGF0dXNfdCBnZXRBdWRpb1BvcnQoc3RydWN0IGF1ZGlvX3BvcnQgKnBvcnQpOwotCi0gICAgLy8gU2V0IGF1ZGlvIHBvcnQgY29uZmlndXJhdGlvbi4KLSAgICB2aXJ0dWFsIHN0YXR1c190IHNldEF1ZGlvUG9ydENvbmZpZyhjb25zdCBzdHJ1Y3QgYXVkaW9fcG9ydF9jb25maWcgKmNvbmZpZyk7Ci0KLSAgICAvLyBMaXN0IG1pY3JvcGhvbmVzCi0gICAgdmlydHVhbCBzdGF0dXNfdCBnZXRNaWNyb3Bob25lcyhzdGQ6OnZlY3RvcjxtZWRpYTo6TWljcm9waG9uZUluZm8+ICptaWNyb3Bob25lcyk7Ci0KLSAgICB2aXJ0dWFsIHN0YXR1c190IGR1bXAoaW50IGZkKTsKLQotICBwcml2YXRlOgotICAgIGZyaWVuZCBjbGFzcyBEZXZpY2VzRmFjdG9yeUhhbEhpZGw7Ci0gICAgc3A8SURldmljZT4gbURldmljZTsKLSAgICBzcDxJUHJpbWFyeURldmljZT4gbVByaW1hcnlEZXZpY2U7ICAvLyBOdWxsIGlmIGl0J3Mgbm90IGEgcHJpbWFyeSBkZXZpY2UuCi0KLSAgICAvLyBDYW4gbm90IGJlIGNvbnN0cnVjdGVkIGRpcmVjdGx5IGJ5IGNsaWVudHMuCi0gICAgZXhwbGljaXQgRGV2aWNlSGFsSGlkbChjb25zdCBzcDxJRGV2aWNlPiYgZGV2aWNlKTsKLQotICAgIC8vIFRoZSBkZXN0cnVjdG9yIGF1dG9tYXRpY2FsbHkgY2xvc2VzIHRoZSBkZXZpY2UuCi0gICAgdmlydHVhbCB+RGV2aWNlSGFsSGlkbCgpOwotfTsKLQotfSAvLyBuYW1lc3BhY2UgYW5kcm9pZAotCi0jZW5kaWYgLy8gQU5EUk9JRF9IQVJEV0FSRV9ERVZJQ0VfSEFMX0hJRExfSApkaWZmIC0tZ2l0IGEvbWVkaWEvbGliYXVkaW9oYWwvMi4wL0RldmljZUhhbExvY2FsLmNwcCBiL21lZGlhL2xpYmF1ZGlvaGFsLzIuMC9EZXZpY2VIYWxMb2NhbC5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGVjM2JmNzguLjAwMDAwMDAKLS0tIGEvbWVkaWEvbGliYXVkaW9oYWwvMi4wL0RldmljZUhhbExvY2FsLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDIwNCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDE2IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKLSAqCi0gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKLSAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KLSAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotICoKLSAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0gKgotICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQotICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKLSAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgotICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAotICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCi0gKi8KLQotI2RlZmluZSBMT0dfVEFHICJEZXZpY2VIYWxMb2NhbCIKLS8vI2RlZmluZSBMT0dfTkRFQlVHIDAKLQotI2luY2x1ZGUgPHV0aWxzL0xvZy5oPgotCi0jaW5jbHVkZSAiRGV2aWNlSGFsTG9jYWwuaCIKLSNpbmNsdWRlICJTdHJlYW1IYWxMb2NhbC5oIgotCi1uYW1lc3BhY2UgYW5kcm9pZCB7Ci0KLURldmljZUhhbExvY2FsOjpEZXZpY2VIYWxMb2NhbChhdWRpb19od19kZXZpY2VfdCAqZGV2KQotICAgICAgICA6IG1EZXYoZGV2KSB7Ci19Ci0KLURldmljZUhhbExvY2FsOjp+RGV2aWNlSGFsTG9jYWwoKSB7Ci0gICAgaW50IHN0YXR1cyA9IGF1ZGlvX2h3X2RldmljZV9jbG9zZShtRGV2KTsKLSAgICBBTE9HV19JRihzdGF0dXMsICJFcnJvciBjbG9zaW5nIGF1ZGlvIGh3IGRldmljZSAlcDogJXMiLCBtRGV2LCBzdHJlcnJvcigtc3RhdHVzKSk7Ci0gICAgbURldiA9IDA7Ci19Ci0KLXN0YXR1c190IERldmljZUhhbExvY2FsOjpnZXRTdXBwb3J0ZWREZXZpY2VzKHVpbnQzMl90ICpkZXZpY2VzKSB7Ci0gICAgaWYgKG1EZXYtPmdldF9zdXBwb3J0ZWRfZGV2aWNlcyA9PSBOVUxMKSByZXR1cm4gSU5WQUxJRF9PUEVSQVRJT047Ci0gICAgKmRldmljZXMgPSBtRGV2LT5nZXRfc3VwcG9ydGVkX2RldmljZXMobURldik7Ci0gICAgcmV0dXJuIE9LOwotfQotCi1zdGF0dXNfdCBEZXZpY2VIYWxMb2NhbDo6aW5pdENoZWNrKCkgewotICAgIHJldHVybiBtRGV2LT5pbml0X2NoZWNrKG1EZXYpOwotfQotCi1zdGF0dXNfdCBEZXZpY2VIYWxMb2NhbDo6c2V0Vm9pY2VWb2x1bWUoZmxvYXQgdm9sdW1lKSB7Ci0gICAgcmV0dXJuIG1EZXYtPnNldF92b2ljZV92b2x1bWUobURldiwgdm9sdW1lKTsKLX0KLQotc3RhdHVzX3QgRGV2aWNlSGFsTG9jYWw6OnNldE1hc3RlclZvbHVtZShmbG9hdCB2b2x1bWUpIHsKLSAgICBpZiAobURldi0+c2V0X21hc3Rlcl92b2x1bWUgPT0gTlVMTCkgcmV0dXJuIElOVkFMSURfT1BFUkFUSU9OOwotICAgIHJldHVybiBtRGV2LT5zZXRfbWFzdGVyX3ZvbHVtZShtRGV2LCB2b2x1bWUpOwotfQotCi1zdGF0dXNfdCBEZXZpY2VIYWxMb2NhbDo6Z2V0TWFzdGVyVm9sdW1lKGZsb2F0ICp2b2x1bWUpIHsKLSAgICBpZiAobURldi0+Z2V0X21hc3Rlcl92b2x1bWUgPT0gTlVMTCkgcmV0dXJuIElOVkFMSURfT1BFUkFUSU9OOwotICAgIHJldHVybiBtRGV2LT5nZXRfbWFzdGVyX3ZvbHVtZShtRGV2LCB2b2x1bWUpOwotfQotCi1zdGF0dXNfdCBEZXZpY2VIYWxMb2NhbDo6c2V0TW9kZShhdWRpb19tb2RlX3QgbW9kZSkgewotICAgIHJldHVybiBtRGV2LT5zZXRfbW9kZShtRGV2LCBtb2RlKTsKLX0KLQotc3RhdHVzX3QgRGV2aWNlSGFsTG9jYWw6OnNldE1pY011dGUoYm9vbCBzdGF0ZSkgewotICAgIHJldHVybiBtRGV2LT5zZXRfbWljX211dGUobURldiwgc3RhdGUpOwotfQotCi1zdGF0dXNfdCBEZXZpY2VIYWxMb2NhbDo6Z2V0TWljTXV0ZShib29sICpzdGF0ZSkgewotICAgIHJldHVybiBtRGV2LT5nZXRfbWljX211dGUobURldiwgc3RhdGUpOwotfQotCi1zdGF0dXNfdCBEZXZpY2VIYWxMb2NhbDo6c2V0TWFzdGVyTXV0ZShib29sIHN0YXRlKSB7Ci0gICAgaWYgKG1EZXYtPnNldF9tYXN0ZXJfbXV0ZSA9PSBOVUxMKSByZXR1cm4gSU5WQUxJRF9PUEVSQVRJT047Ci0gICAgcmV0dXJuIG1EZXYtPnNldF9tYXN0ZXJfbXV0ZShtRGV2LCBzdGF0ZSk7Ci19Ci0KLXN0YXR1c190IERldmljZUhhbExvY2FsOjpnZXRNYXN0ZXJNdXRlKGJvb2wgKnN0YXRlKSB7Ci0gICAgaWYgKG1EZXYtPmdldF9tYXN0ZXJfbXV0ZSA9PSBOVUxMKSByZXR1cm4gSU5WQUxJRF9PUEVSQVRJT047Ci0gICAgcmV0dXJuIG1EZXYtPmdldF9tYXN0ZXJfbXV0ZShtRGV2LCBzdGF0ZSk7Ci19Ci0KLXN0YXR1c190IERldmljZUhhbExvY2FsOjpzZXRQYXJhbWV0ZXJzKGNvbnN0IFN0cmluZzgmIGt2UGFpcnMpIHsKLSAgICByZXR1cm4gbURldi0+c2V0X3BhcmFtZXRlcnMobURldiwga3ZQYWlycy5zdHJpbmcoKSk7Ci19Ci0KLXN0YXR1c190IERldmljZUhhbExvY2FsOjpnZXRQYXJhbWV0ZXJzKGNvbnN0IFN0cmluZzgmIGtleXMsIFN0cmluZzggKnZhbHVlcykgewotICAgIGNoYXIgKmhhbFZhbHVlcyA9IG1EZXYtPmdldF9wYXJhbWV0ZXJzKG1EZXYsIGtleXMuc3RyaW5nKCkpOwotICAgIGlmIChoYWxWYWx1ZXMgIT0gTlVMTCkgewotICAgICAgICB2YWx1ZXMtPnNldFRvKGhhbFZhbHVlcyk7Ci0gICAgICAgIGZyZWUoaGFsVmFsdWVzKTsKLSAgICB9IGVsc2UgewotICAgICAgICB2YWx1ZXMtPmNsZWFyKCk7Ci0gICAgfQotICAgIHJldHVybiBPSzsKLX0KLQotc3RhdHVzX3QgRGV2aWNlSGFsTG9jYWw6OmdldElucHV0QnVmZmVyU2l6ZSgKLSAgICAgICAgY29uc3Qgc3RydWN0IGF1ZGlvX2NvbmZpZyAqY29uZmlnLCBzaXplX3QgKnNpemUpIHsKLSAgICAqc2l6ZSA9IG1EZXYtPmdldF9pbnB1dF9idWZmZXJfc2l6ZShtRGV2LCBjb25maWcpOwotICAgIHJldHVybiBPSzsKLX0KLQotc3RhdHVzX3QgRGV2aWNlSGFsTG9jYWw6Om9wZW5PdXRwdXRTdHJlYW0oCi0gICAgICAgIGF1ZGlvX2lvX2hhbmRsZV90IGhhbmRsZSwKLSAgICAgICAgYXVkaW9fZGV2aWNlc190IGRldmljZXMsCi0gICAgICAgIGF1ZGlvX291dHB1dF9mbGFnc190IGZsYWdzLAotICAgICAgICBzdHJ1Y3QgYXVkaW9fY29uZmlnICpjb25maWcsCi0gICAgICAgIGNvbnN0IGNoYXIgKmFkZHJlc3MsCi0gICAgICAgIHNwPFN0cmVhbU91dEhhbEludGVyZmFjZT4gKm91dFN0cmVhbSkgewotICAgIGF1ZGlvX3N0cmVhbV9vdXRfdCAqaGFsU3RyZWFtOwotICAgIEFMT0dWKCJvcGVuX291dHB1dF9zdHJlYW0gaGFuZGxlOiAlZCBkZXZpY2VzOiAleCBmbGFnczogJSN4IgotICAgICAgICAgICAgInNyYXRlOiAlZCBmb3JtYXQgJSN4IGNoYW5uZWxzICV4IGFkZHJlc3MgJXMiLAotICAgICAgICAgICAgaGFuZGxlLCBkZXZpY2VzLCBmbGFncywKLSAgICAgICAgICAgIGNvbmZpZy0+c2FtcGxlX3JhdGUsIGNvbmZpZy0+Zm9ybWF0LCBjb25maWctPmNoYW5uZWxfbWFzaywKLSAgICAgICAgICAgIGFkZHJlc3MpOwotICAgIGludCBvcGVuUmVzdXQgPSBtRGV2LT5vcGVuX291dHB1dF9zdHJlYW0oCi0gICAgICAgICAgICBtRGV2LCBoYW5kbGUsIGRldmljZXMsIGZsYWdzLCBjb25maWcsICZoYWxTdHJlYW0sIGFkZHJlc3MpOwotICAgIGlmIChvcGVuUmVzdXQgPT0gT0spIHsKLSAgICAgICAgKm91dFN0cmVhbSA9IG5ldyBTdHJlYW1PdXRIYWxMb2NhbChoYWxTdHJlYW0sIHRoaXMpOwotICAgIH0KLSAgICBBTE9HVigib3Blbl9vdXRwdXRfc3RyZWFtIHN0YXR1cyAlZCBzdHJlYW0gJXAiLCBvcGVuUmVzdXQsIGhhbFN0cmVhbSk7Ci0gICAgcmV0dXJuIG9wZW5SZXN1dDsKLX0KLQotc3RhdHVzX3QgRGV2aWNlSGFsTG9jYWw6Om9wZW5JbnB1dFN0cmVhbSgKLSAgICAgICAgYXVkaW9faW9faGFuZGxlX3QgaGFuZGxlLAotICAgICAgICBhdWRpb19kZXZpY2VzX3QgZGV2aWNlcywKLSAgICAgICAgc3RydWN0IGF1ZGlvX2NvbmZpZyAqY29uZmlnLAotICAgICAgICBhdWRpb19pbnB1dF9mbGFnc190IGZsYWdzLAotICAgICAgICBjb25zdCBjaGFyICphZGRyZXNzLAotICAgICAgICBhdWRpb19zb3VyY2VfdCBzb3VyY2UsCi0gICAgICAgIHNwPFN0cmVhbUluSGFsSW50ZXJmYWNlPiAqaW5TdHJlYW0pIHsKLSAgICBhdWRpb19zdHJlYW1faW5fdCAqaGFsU3RyZWFtOwotICAgIEFMT0dWKCJvcGVuX2lucHV0X3N0cmVhbSBoYW5kbGU6ICVkIGRldmljZXM6ICV4IGZsYWdzOiAlI3ggIgotICAgICAgICAgICAgInNyYXRlOiAlZCBmb3JtYXQgJSN4IGNoYW5uZWxzICV4IGFkZHJlc3MgJXMgc291cmNlICVkIiwKLSAgICAgICAgICAgIGhhbmRsZSwgZGV2aWNlcywgZmxhZ3MsCi0gICAgICAgICAgICBjb25maWctPnNhbXBsZV9yYXRlLCBjb25maWctPmZvcm1hdCwgY29uZmlnLT5jaGFubmVsX21hc2ssCi0gICAgICAgICAgICBhZGRyZXNzLCBzb3VyY2UpOwotICAgIGludCBvcGVuUmVzdWx0ID0gbURldi0+b3Blbl9pbnB1dF9zdHJlYW0oCi0gICAgICAgICAgICBtRGV2LCBoYW5kbGUsIGRldmljZXMsIGNvbmZpZywgJmhhbFN0cmVhbSwgZmxhZ3MsIGFkZHJlc3MsIHNvdXJjZSk7Ci0gICAgaWYgKG9wZW5SZXN1bHQgPT0gT0spIHsKLSAgICAgICAgKmluU3RyZWFtID0gbmV3IFN0cmVhbUluSGFsTG9jYWwoaGFsU3RyZWFtLCB0aGlzKTsKLSAgICB9Ci0gICAgQUxPR1YoIm9wZW5faW5wdXRfc3RyZWFtIHN0YXR1cyAlZCBzdHJlYW0gJXAiLCBvcGVuUmVzdWx0LCBpblN0cmVhbSk7Ci0gICAgcmV0dXJuIG9wZW5SZXN1bHQ7Ci19Ci0KLXN0YXR1c190IERldmljZUhhbExvY2FsOjpzdXBwb3J0c0F1ZGlvUGF0Y2hlcyhib29sICpzdXBwb3J0c1BhdGNoZXMpIHsKLSAgICAqc3VwcG9ydHNQYXRjaGVzID0gdmVyc2lvbigpID49IEFVRElPX0RFVklDRV9BUElfVkVSU0lPTl8zXzA7Ci0gICAgcmV0dXJuIE9LOwotfQotCi1zdGF0dXNfdCBEZXZpY2VIYWxMb2NhbDo6Y3JlYXRlQXVkaW9QYXRjaCgKLSAgICAgICAgdW5zaWduZWQgaW50IG51bV9zb3VyY2VzLAotICAgICAgICBjb25zdCBzdHJ1Y3QgYXVkaW9fcG9ydF9jb25maWcgKnNvdXJjZXMsCi0gICAgICAgIHVuc2lnbmVkIGludCBudW1fc2lua3MsCi0gICAgICAgIGNvbnN0IHN0cnVjdCBhdWRpb19wb3J0X2NvbmZpZyAqc2lua3MsCi0gICAgICAgIGF1ZGlvX3BhdGNoX2hhbmRsZV90ICpwYXRjaCkgewotICAgIGlmICh2ZXJzaW9uKCkgPj0gQVVESU9fREVWSUNFX0FQSV9WRVJTSU9OXzNfMCkgewotICAgICAgICByZXR1cm4gbURldi0+Y3JlYXRlX2F1ZGlvX3BhdGNoKAotICAgICAgICAgICAgICAgIG1EZXYsIG51bV9zb3VyY2VzLCBzb3VyY2VzLCBudW1fc2lua3MsIHNpbmtzLCBwYXRjaCk7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgcmV0dXJuIElOVkFMSURfT1BFUkFUSU9OOwotICAgIH0KLX0KLQotc3RhdHVzX3QgRGV2aWNlSGFsTG9jYWw6OnJlbGVhc2VBdWRpb1BhdGNoKGF1ZGlvX3BhdGNoX2hhbmRsZV90IHBhdGNoKSB7Ci0gICAgaWYgKHZlcnNpb24oKSA+PSBBVURJT19ERVZJQ0VfQVBJX1ZFUlNJT05fM18wKSB7Ci0gICAgICAgIHJldHVybiBtRGV2LT5yZWxlYXNlX2F1ZGlvX3BhdGNoKG1EZXYsIHBhdGNoKTsKLSAgICB9IGVsc2UgewotICAgICAgICByZXR1cm4gSU5WQUxJRF9PUEVSQVRJT047Ci0gICAgfQotfQotCi1zdGF0dXNfdCBEZXZpY2VIYWxMb2NhbDo6Z2V0QXVkaW9Qb3J0KHN0cnVjdCBhdWRpb19wb3J0ICpwb3J0KSB7Ci0gICAgcmV0dXJuIG1EZXYtPmdldF9hdWRpb19wb3J0KG1EZXYsIHBvcnQpOwotfQotCi1zdGF0dXNfdCBEZXZpY2VIYWxMb2NhbDo6c2V0QXVkaW9Qb3J0Q29uZmlnKGNvbnN0IHN0cnVjdCBhdWRpb19wb3J0X2NvbmZpZyAqY29uZmlnKSB7Ci0gICAgaWYgKHZlcnNpb24oKSA+PSBBVURJT19ERVZJQ0VfQVBJX1ZFUlNJT05fM18wKQotICAgICAgICByZXR1cm4gbURldi0+c2V0X2F1ZGlvX3BvcnRfY29uZmlnKG1EZXYsIGNvbmZpZyk7Ci0gICAgZWxzZQotICAgICAgICByZXR1cm4gSU5WQUxJRF9PUEVSQVRJT047Ci19Ci0KLXN0YXR1c190IERldmljZUhhbExvY2FsOjpnZXRNaWNyb3Bob25lcygKLSAgICAgICAgc3RkOjp2ZWN0b3I8bWVkaWE6Ok1pY3JvcGhvbmVJbmZvPiAqbWljcm9waG9uZXMgX191bnVzZWQpIHsKLSAgICByZXR1cm4gSU5WQUxJRF9PUEVSQVRJT047Ci19Ci0KLXN0YXR1c190IERldmljZUhhbExvY2FsOjpkdW1wKGludCBmZCkgewotICAgIHJldHVybiBtRGV2LT5kdW1wKG1EZXYsIGZkKTsKLX0KLQotdm9pZCBEZXZpY2VIYWxMb2NhbDo6Y2xvc2VPdXRwdXRTdHJlYW0oc3RydWN0IGF1ZGlvX3N0cmVhbV9vdXQgKnN0cmVhbV9vdXQpIHsKLSAgICBtRGV2LT5jbG9zZV9vdXRwdXRfc3RyZWFtKG1EZXYsIHN0cmVhbV9vdXQpOwotfQotCi12b2lkIERldmljZUhhbExvY2FsOjpjbG9zZUlucHV0U3RyZWFtKHN0cnVjdCBhdWRpb19zdHJlYW1faW4gKnN0cmVhbV9pbikgewotICAgIG1EZXYtPmNsb3NlX2lucHV0X3N0cmVhbShtRGV2LCBzdHJlYW1faW4pOwotfQotCi19IC8vIG5hbWVzcGFjZSBhbmRyb2lkCmRpZmYgLS1naXQgYS9tZWRpYS9saWJhdWRpb2hhbC8yLjAvRGV2aWNlSGFsTG9jYWwuaCBiL21lZGlhL2xpYmF1ZGlvaGFsLzIuMC9EZXZpY2VIYWxMb2NhbC5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhZWMyMDFhLi4wMDAwMDAwCi0tLSBhL21lZGlhL2xpYmF1ZGlvaGFsLzIuMC9EZXZpY2VIYWxMb2NhbC5oCisrKyAvZGV2L251bGwKQEAgLTEsMTI3ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTYgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAotICoKLSAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwotICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgotICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0gKgotICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLSAqCi0gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCi0gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAotICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCi0gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCi0gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KLSAqLwotCi0jaWZuZGVmIEFORFJPSURfSEFSRFdBUkVfREVWSUNFX0hBTF9MT0NBTF9ICi0jZGVmaW5lIEFORFJPSURfSEFSRFdBUkVfREVWSUNFX0hBTF9MT0NBTF9ICi0KLSNpbmNsdWRlIDxoYXJkd2FyZS9hdWRpby5oPgotI2luY2x1ZGUgPG1lZGlhL2F1ZGlvaGFsL0RldmljZUhhbEludGVyZmFjZS5oPgotCi1uYW1lc3BhY2UgYW5kcm9pZCB7Ci0KLWNsYXNzIERldmljZUhhbExvY2FsIDogcHVibGljIERldmljZUhhbEludGVyZmFjZQotewotICBwdWJsaWM6Ci0gICAgLy8gU2V0cyB0aGUgdmFsdWUgb2YgJ2RldmljZXMnIHRvIGEgYml0bWFzayBvZiAxIG9yIG1vcmUgdmFsdWVzIG9mIGF1ZGlvX2RldmljZXNfdC4KLSAgICB2aXJ0dWFsIHN0YXR1c190IGdldFN1cHBvcnRlZERldmljZXModWludDMyX3QgKmRldmljZXMpOwotCi0gICAgLy8gQ2hlY2sgdG8gc2VlIGlmIHRoZSBhdWRpbyBoYXJkd2FyZSBpbnRlcmZhY2UgaGFzIGJlZW4gaW5pdGlhbGl6ZWQuCi0gICAgdmlydHVhbCBzdGF0dXNfdCBpbml0Q2hlY2soKTsKLQotICAgIC8vIFNldCB0aGUgYXVkaW8gdm9sdW1lIG9mIGEgdm9pY2UgY2FsbC4gUmFuZ2UgaXMgYmV0d2VlbiAwLjAgYW5kIDEuMC4KLSAgICB2aXJ0dWFsIHN0YXR1c190IHNldFZvaWNlVm9sdW1lKGZsb2F0IHZvbHVtZSk7Ci0KLSAgICAvLyBTZXQgdGhlIGF1ZGlvIHZvbHVtZSBmb3IgYWxsIGF1ZGlvIGFjdGl2aXRpZXMgb3RoZXIgdGhhbiB2b2ljZSBjYWxsLgotICAgIHZpcnR1YWwgc3RhdHVzX3Qgc2V0TWFzdGVyVm9sdW1lKGZsb2F0IHZvbHVtZSk7Ci0KLSAgICAvLyBHZXQgdGhlIGN1cnJlbnQgbWFzdGVyIHZvbHVtZSB2YWx1ZSBmb3IgdGhlIEhBTC4KLSAgICB2aXJ0dWFsIHN0YXR1c190IGdldE1hc3RlclZvbHVtZShmbG9hdCAqdm9sdW1lKTsKLQotICAgIC8vIENhbGxlZCB3aGVuIHRoZSBhdWRpbyBtb2RlIGNoYW5nZXMuCi0gICAgdmlydHVhbCBzdGF0dXNfdCBzZXRNb2RlKGF1ZGlvX21vZGVfdCBtb2RlKTsKLQotICAgIC8vIE11dGluZyBjb250cm9sLgotICAgIHZpcnR1YWwgc3RhdHVzX3Qgc2V0TWljTXV0ZShib29sIHN0YXRlKTsKLSAgICB2aXJ0dWFsIHN0YXR1c190IGdldE1pY011dGUoYm9vbCAqc3RhdGUpOwotICAgIHZpcnR1YWwgc3RhdHVzX3Qgc2V0TWFzdGVyTXV0ZShib29sIHN0YXRlKTsKLSAgICB2aXJ0dWFsIHN0YXR1c190IGdldE1hc3Rlck11dGUoYm9vbCAqc3RhdGUpOwotCi0gICAgLy8gU2V0IGdsb2JhbCBhdWRpbyBwYXJhbWV0ZXJzLgotICAgIHZpcnR1YWwgc3RhdHVzX3Qgc2V0UGFyYW1ldGVycyhjb25zdCBTdHJpbmc4JiBrdlBhaXJzKTsKLQotICAgIC8vIEdldCBnbG9iYWwgYXVkaW8gcGFyYW1ldGVycy4KLSAgICB2aXJ0dWFsIHN0YXR1c190IGdldFBhcmFtZXRlcnMoY29uc3QgU3RyaW5nOCYga2V5cywgU3RyaW5nOCAqdmFsdWVzKTsKLQotICAgIC8vIFJldHVybnMgYXVkaW8gaW5wdXQgYnVmZmVyIHNpemUgYWNjb3JkaW5nIHRvIHBhcmFtZXRlcnMgcGFzc2VkLgotICAgIHZpcnR1YWwgc3RhdHVzX3QgZ2V0SW5wdXRCdWZmZXJTaXplKGNvbnN0IHN0cnVjdCBhdWRpb19jb25maWcgKmNvbmZpZywKLSAgICAgICAgICAgIHNpemVfdCAqc2l6ZSk7Ci0KLSAgICAvLyBDcmVhdGVzIGFuZCBvcGVucyB0aGUgYXVkaW8gaGFyZHdhcmUgb3V0cHV0IHN0cmVhbS4gVGhlIHN0cmVhbSBpcyBjbG9zZWQKLSAgICAvLyBieSByZWxlYXNpbmcgYWxsIHJlZmVyZW5jZXMgdG8gdGhlIHJldHVybmVkIG9iamVjdC4KLSAgICB2aXJ0dWFsIHN0YXR1c190IG9wZW5PdXRwdXRTdHJlYW0oCi0gICAgICAgICAgICBhdWRpb19pb19oYW5kbGVfdCBoYW5kbGUsCi0gICAgICAgICAgICBhdWRpb19kZXZpY2VzX3QgZGV2aWNlcywKLSAgICAgICAgICAgIGF1ZGlvX291dHB1dF9mbGFnc190IGZsYWdzLAotICAgICAgICAgICAgc3RydWN0IGF1ZGlvX2NvbmZpZyAqY29uZmlnLAotICAgICAgICAgICAgY29uc3QgY2hhciAqYWRkcmVzcywKLSAgICAgICAgICAgIHNwPFN0cmVhbU91dEhhbEludGVyZmFjZT4gKm91dFN0cmVhbSk7Ci0KLSAgICAvLyBDcmVhdGVzIGFuZCBvcGVucyB0aGUgYXVkaW8gaGFyZHdhcmUgaW5wdXQgc3RyZWFtLiBUaGUgc3RyZWFtIGlzIGNsb3NlZAotICAgIC8vIGJ5IHJlbGVhc2luZyBhbGwgcmVmZXJlbmNlcyB0byB0aGUgcmV0dXJuZWQgb2JqZWN0LgotICAgIHZpcnR1YWwgc3RhdHVzX3Qgb3BlbklucHV0U3RyZWFtKAotICAgICAgICAgICAgYXVkaW9faW9faGFuZGxlX3QgaGFuZGxlLAotICAgICAgICAgICAgYXVkaW9fZGV2aWNlc190IGRldmljZXMsCi0gICAgICAgICAgICBzdHJ1Y3QgYXVkaW9fY29uZmlnICpjb25maWcsCi0gICAgICAgICAgICBhdWRpb19pbnB1dF9mbGFnc190IGZsYWdzLAotICAgICAgICAgICAgY29uc3QgY2hhciAqYWRkcmVzcywKLSAgICAgICAgICAgIGF1ZGlvX3NvdXJjZV90IHNvdXJjZSwKLSAgICAgICAgICAgIHNwPFN0cmVhbUluSGFsSW50ZXJmYWNlPiAqaW5TdHJlYW0pOwotCi0gICAgLy8gUmV0dXJucyB3aGV0aGVyIGNyZWF0ZUF1ZGlvUGF0Y2ggYW5kIHJlbGVhc2VBdWRpb1BhdGNoIG9wZXJhdGlvbnMgYXJlIHN1cHBvcnRlZC4KLSAgICB2aXJ0dWFsIHN0YXR1c190IHN1cHBvcnRzQXVkaW9QYXRjaGVzKGJvb2wgKnN1cHBvcnRzUGF0Y2hlcyk7Ci0KLSAgICAvLyBDcmVhdGVzIGFuIGF1ZGlvIHBhdGNoIGJldHdlZW4gc2V2ZXJhbCBzb3VyY2UgYW5kIHNpbmsgcG9ydHMuCi0gICAgdmlydHVhbCBzdGF0dXNfdCBjcmVhdGVBdWRpb1BhdGNoKAotICAgICAgICAgICAgdW5zaWduZWQgaW50IG51bV9zb3VyY2VzLAotICAgICAgICAgICAgY29uc3Qgc3RydWN0IGF1ZGlvX3BvcnRfY29uZmlnICpzb3VyY2VzLAotICAgICAgICAgICAgdW5zaWduZWQgaW50IG51bV9zaW5rcywKLSAgICAgICAgICAgIGNvbnN0IHN0cnVjdCBhdWRpb19wb3J0X2NvbmZpZyAqc2lua3MsCi0gICAgICAgICAgICBhdWRpb19wYXRjaF9oYW5kbGVfdCAqcGF0Y2gpOwotCi0gICAgLy8gUmVsZWFzZXMgYW4gYXVkaW8gcGF0Y2guCi0gICAgdmlydHVhbCBzdGF0dXNfdCByZWxlYXNlQXVkaW9QYXRjaChhdWRpb19wYXRjaF9oYW5kbGVfdCBwYXRjaCk7Ci0KLSAgICAvLyBGaWxscyB0aGUgbGlzdCBvZiBzdXBwb3J0ZWQgYXR0cmlidXRlcyBmb3IgYSBnaXZlbiBhdWRpbyBwb3J0LgotICAgIHZpcnR1YWwgc3RhdHVzX3QgZ2V0QXVkaW9Qb3J0KHN0cnVjdCBhdWRpb19wb3J0ICpwb3J0KTsKLQotICAgIC8vIFNldCBhdWRpbyBwb3J0IGNvbmZpZ3VyYXRpb24uCi0gICAgdmlydHVhbCBzdGF0dXNfdCBzZXRBdWRpb1BvcnRDb25maWcoY29uc3Qgc3RydWN0IGF1ZGlvX3BvcnRfY29uZmlnICpjb25maWcpOwotCi0gICAgLy8gTGlzdCBtaWNyb3Bob25lcwotICAgIHZpcnR1YWwgc3RhdHVzX3QgZ2V0TWljcm9waG9uZXMoc3RkOjp2ZWN0b3I8bWVkaWE6Ok1pY3JvcGhvbmVJbmZvPiAqbWljcm9waG9uZXMpOwotCi0gICAgdmlydHVhbCBzdGF0dXNfdCBkdW1wKGludCBmZCk7Ci0KLSAgICB2b2lkIGNsb3NlT3V0cHV0U3RyZWFtKHN0cnVjdCBhdWRpb19zdHJlYW1fb3V0ICpzdHJlYW1fb3V0KTsKLSAgICB2b2lkIGNsb3NlSW5wdXRTdHJlYW0oc3RydWN0IGF1ZGlvX3N0cmVhbV9pbiAqc3RyZWFtX2luKTsKLQotICBwcml2YXRlOgotICAgIGF1ZGlvX2h3X2RldmljZV90ICptRGV2OwotCi0gICAgZnJpZW5kIGNsYXNzIERldmljZXNGYWN0b3J5SGFsTG9jYWw7Ci0KLSAgICAvLyBDYW4gbm90IGJlIGNvbnN0cnVjdGVkIGRpcmVjdGx5IGJ5IGNsaWVudHMuCi0gICAgZXhwbGljaXQgRGV2aWNlSGFsTG9jYWwoYXVkaW9faHdfZGV2aWNlX3QgKmRldik7Ci0KLSAgICAvLyBUaGUgZGVzdHJ1Y3RvciBhdXRvbWF0aWNhbGx5IGNsb3NlcyB0aGUgZGV2aWNlLgotICAgIHZpcnR1YWwgfkRldmljZUhhbExvY2FsKCk7Ci0KLSAgICB1aW50MzJfdCB2ZXJzaW9uKCkgY29uc3QgeyByZXR1cm4gbURldi0+Y29tbW9uLnZlcnNpb247IH0KLX07Ci0KLX0gLy8gbmFtZXNwYWNlIGFuZHJvaWQKLQotI2VuZGlmIC8vIEFORFJPSURfSEFSRFdBUkVfREVWSUNFX0hBTF9MT0NBTF9ICmRpZmYgLS1naXQgYS9tZWRpYS9saWJhdWRpb2hhbC8yLjAvRGV2aWNlc0ZhY3RvcnlIYWxIaWRsLmNwcCBiL21lZGlhL2xpYmF1ZGlvaGFsLzIuMC9EZXZpY2VzRmFjdG9yeUhhbEhpZGwuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1YjMzNTkyLi4wMDAwMDAwCi0tLSBhL21lZGlhL2xpYmF1ZGlvaGFsLzIuMC9EZXZpY2VzRmFjdG9yeUhhbEhpZGwuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsOTggKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNiBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0Ci0gKgotICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7Ci0gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCi0gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLSAqCi0gKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotICoKLSAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKLSAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCi0gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KLSAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKLSAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgotICovCi0KLSNpbmNsdWRlIDxzdHJpbmcuaD4KLQotI2RlZmluZSBMT0dfVEFHICJEZXZpY2VzRmFjdG9yeUhhbEhpZGwiCi0vLyNkZWZpbmUgTE9HX05ERUJVRyAwCi0KLSNpbmNsdWRlIDxhbmRyb2lkL2hhcmR3YXJlL2F1ZGlvLzIuMC9JRGV2aWNlLmg+Ci0jaW5jbHVkZSA8bWVkaWEvYXVkaW9oYWwvaGlkbC9IYWxEZWF0aEhhbmRsZXIuaD4KLSNpbmNsdWRlIDx1dGlscy9Mb2cuaD4KLQotI2luY2x1ZGUgIkNvbnZlcnNpb25IZWxwZXJIaWRsLmgiCi0jaW5jbHVkZSAiRGV2aWNlSGFsSGlkbC5oIgotI2luY2x1ZGUgIkRldmljZXNGYWN0b3J5SGFsSGlkbC5oIgotCi11c2luZyA6OmFuZHJvaWQ6OmhhcmR3YXJlOjphdWRpbzo6VjJfMDo6SURldmljZTsKLXVzaW5nIDo6YW5kcm9pZDo6aGFyZHdhcmU6OmF1ZGlvOjpWMl8wOjpSZXN1bHQ7Ci11c2luZyA6OmFuZHJvaWQ6OmhhcmR3YXJlOjpSZXR1cm47Ci0KLW5hbWVzcGFjZSBhbmRyb2lkIHsKLQotRGV2aWNlc0ZhY3RvcnlIYWxIaWRsOjpEZXZpY2VzRmFjdG9yeUhhbEhpZGwoKSB7Ci0gICAgbURldmljZXNGYWN0b3J5ID0gSURldmljZXNGYWN0b3J5OjpnZXRTZXJ2aWNlKCk7Ci0gICAgaWYgKG1EZXZpY2VzRmFjdG9yeSAhPSAwKSB7Ci0gICAgICAgIC8vIEl0IGlzIGFzc3VtZWQgdGhhdCBEZXZpY2VzRmFjdG9yeSBpcyBvd25lZCBieSBBdWRpb0ZsaW5nZXIKLSAgICAgICAgLy8gYW5kIHRodXMgaGF2ZSB0aGUgc2FtZSBsaWZlc3Bhbi4KLSAgICAgICAgbURldmljZXNGYWN0b3J5LT5saW5rVG9EZWF0aChIYWxEZWF0aEhhbmRsZXI6OmdldEluc3RhbmNlKCksIDAgLypjb29raWUqLyk7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgQUxPR0UoIkZhaWxlZCB0byBvYnRhaW4gSURldmljZXNGYWN0b3J5IHNlcnZpY2UsIHRlcm1pbmF0aW5nIHByb2Nlc3MuIik7Ci0gICAgICAgIGV4aXQoMSk7Ci0gICAgfQotICAgIC8vIFRoZSBNU0QgZmFjdG9yeSBpcyBvcHRpb25hbAotICAgIG1EZXZpY2VzRmFjdG9yeU1zZCA9IElEZXZpY2VzRmFjdG9yeTo6Z2V0U2VydmljZShBVURJT19IQUxfU0VSVklDRV9OQU1FX01TRCk7Ci0gICAgLy8gVE9ETzogUmVnaXN0ZXIgZGVhdGggaGFuZGxlciwgYW5kIGFkZCAncmVzdGFydCcgZGlyZWN0aXZlIHRvIGF1ZGlvc2VydmVyLnJjCi19Ci0KLURldmljZXNGYWN0b3J5SGFsSGlkbDo6fkRldmljZXNGYWN0b3J5SGFsSGlkbCgpIHsKLX0KLQotLy8gc3RhdGljCi1zdGF0dXNfdCBEZXZpY2VzRmFjdG9yeUhhbEhpZGw6Om5hbWVGcm9tSGFsKGNvbnN0IGNoYXIgKm5hbWUsIElEZXZpY2VzRmFjdG9yeTo6RGV2aWNlICpkZXZpY2UpIHsKLSAgICBpZiAoc3RyY21wKG5hbWUsIEFVRElPX0hBUkRXQVJFX01PRFVMRV9JRF9QUklNQVJZKSA9PSAwKSB7Ci0gICAgICAgICpkZXZpY2UgPSBJRGV2aWNlc0ZhY3Rvcnk6OkRldmljZTo6UFJJTUFSWTsKLSAgICAgICAgcmV0dXJuIE9LOwotICAgIH0gZWxzZSBpZihzdHJjbXAobmFtZSwgQVVESU9fSEFSRFdBUkVfTU9EVUxFX0lEX0EyRFApID09IDApIHsKLSAgICAgICAgKmRldmljZSA9IElEZXZpY2VzRmFjdG9yeTo6RGV2aWNlOjpBMkRQOwotICAgICAgICByZXR1cm4gT0s7Ci0gICAgfSBlbHNlIGlmKHN0cmNtcChuYW1lLCBBVURJT19IQVJEV0FSRV9NT0RVTEVfSURfVVNCKSA9PSAwKSB7Ci0gICAgICAgICpkZXZpY2UgPSBJRGV2aWNlc0ZhY3Rvcnk6OkRldmljZTo6VVNCOwotICAgICAgICByZXR1cm4gT0s7Ci0gICAgfSBlbHNlIGlmKHN0cmNtcChuYW1lLCBBVURJT19IQVJEV0FSRV9NT0RVTEVfSURfUkVNT1RFX1NVQk1JWCkgPT0gMCkgewotICAgICAgICAqZGV2aWNlID0gSURldmljZXNGYWN0b3J5OjpEZXZpY2U6OlJfU1VCTUlYOwotICAgICAgICByZXR1cm4gT0s7Ci0gICAgfSBlbHNlIGlmKHN0cmNtcChuYW1lLCBBVURJT19IQVJEV0FSRV9NT0RVTEVfSURfU1RVQikgPT0gMCkgewotICAgICAgICAqZGV2aWNlID0gSURldmljZXNGYWN0b3J5OjpEZXZpY2U6OlNUVUI7Ci0gICAgICAgIHJldHVybiBPSzsKLSAgICB9Ci0gICAgQUxPR0UoIkludmFsaWQgZGV2aWNlIG5hbWUgJXMiLCBuYW1lKTsKLSAgICByZXR1cm4gQkFEX1ZBTFVFOwotfQotCi1zdGF0dXNfdCBEZXZpY2VzRmFjdG9yeUhhbEhpZGw6Om9wZW5EZXZpY2UoY29uc3QgY2hhciAqbmFtZSwgc3A8RGV2aWNlSGFsSW50ZXJmYWNlPiAqZGV2aWNlKSB7Ci0gICAgaWYgKG1EZXZpY2VzRmFjdG9yeSA9PSAwKSByZXR1cm4gTk9fSU5JVDsKLSAgICBJRGV2aWNlc0ZhY3Rvcnk6OkRldmljZSBoaWRsRGV2aWNlOwotICAgIHN0YXR1c190IHN0YXR1cyA9IG5hbWVGcm9tSGFsKG5hbWUsICZoaWRsRGV2aWNlKTsKLSAgICBpZiAoc3RhdHVzICE9IE9LKSByZXR1cm4gc3RhdHVzOwotICAgIFJlc3VsdCByZXR2YWwgPSBSZXN1bHQ6Ok5PVF9JTklUSUFMSVpFRDsKLSAgICBSZXR1cm48dm9pZD4gcmV0ID0gbURldmljZXNGYWN0b3J5LT5vcGVuRGV2aWNlKAotICAgICAgICAgICAgaGlkbERldmljZSwKLSAgICAgICAgICAgIFsmXShSZXN1bHQgciwgY29uc3Qgc3A8SURldmljZT4mIHJlc3VsdCkgewotICAgICAgICAgICAgICAgIHJldHZhbCA9IHI7Ci0gICAgICAgICAgICAgICAgaWYgKHJldHZhbCA9PSBSZXN1bHQ6Ok9LKSB7Ci0gICAgICAgICAgICAgICAgICAgICpkZXZpY2UgPSBuZXcgRGV2aWNlSGFsSGlkbChyZXN1bHQpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0pOwotICAgIGlmIChyZXQuaXNPaygpKSB7Ci0gICAgICAgIGlmIChyZXR2YWwgPT0gUmVzdWx0OjpPSykgcmV0dXJuIE9LOwotICAgICAgICBlbHNlIGlmIChyZXR2YWwgPT0gUmVzdWx0OjpJTlZBTElEX0FSR1VNRU5UUykgcmV0dXJuIEJBRF9WQUxVRTsKLSAgICAgICAgZWxzZSByZXR1cm4gTk9fSU5JVDsKLSAgICB9Ci0gICAgcmV0dXJuIEZBSUxFRF9UUkFOU0FDVElPTjsKLX0KLQotfSAvLyBuYW1lc3BhY2UgYW5kcm9pZApkaWZmIC0tZ2l0IGEvbWVkaWEvbGliYXVkaW9oYWwvMi4wL0RldmljZXNGYWN0b3J5SGFsSGlkbC5oIGIvbWVkaWEvbGliYXVkaW9oYWwvMi4wL0RldmljZXNGYWN0b3J5SGFsSGlkbC5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwNzQ4ODQ5Li4wMDAwMDAwCi0tLSBhL21lZGlhL2xpYmF1ZGlvaGFsLzIuMC9EZXZpY2VzRmFjdG9yeUhhbEhpZGwuaAorKysgL2Rldi9udWxsCkBAIC0xLDU0ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTYgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAotICoKLSAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwotICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgotICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0gKgotICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLSAqCi0gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCi0gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAotICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCi0gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCi0gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KLSAqLwotCi0jaWZuZGVmIEFORFJPSURfSEFSRFdBUkVfREVWSUNFU19GQUNUT1JZX0hBTF9ISURMX0gKLSNkZWZpbmUgQU5EUk9JRF9IQVJEV0FSRV9ERVZJQ0VTX0ZBQ1RPUllfSEFMX0hJRExfSAotCi0jaW5jbHVkZSA8YW5kcm9pZC9oYXJkd2FyZS9hdWRpby8yLjAvSURldmljZXNGYWN0b3J5Lmg+Ci0jaW5jbHVkZSA8bWVkaWEvYXVkaW9oYWwvRGV2aWNlc0ZhY3RvcnlIYWxJbnRlcmZhY2UuaD4KLSNpbmNsdWRlIDx1dGlscy9FcnJvcnMuaD4KLSNpbmNsdWRlIDx1dGlscy9SZWZCYXNlLmg+Ci0KLSNpbmNsdWRlICJEZXZpY2VIYWxIaWRsLmgiCi0KLXVzaW5nIDo6YW5kcm9pZDo6aGFyZHdhcmU6OmF1ZGlvOjpWMl8wOjpJRGV2aWNlc0ZhY3Rvcnk7Ci0KLW5hbWVzcGFjZSBhbmRyb2lkIHsKLQotY2xhc3MgRGV2aWNlc0ZhY3RvcnlIYWxIaWRsIDogcHVibGljIERldmljZXNGYWN0b3J5SGFsSW50ZXJmYWNlCi17Ci0gIHB1YmxpYzoKLSAgICAvLyBPcGVucyBhIGRldmljZSB3aXRoIHRoZSBzcGVjaWZpZWQgbmFtZS4gVG8gY2xvc2UgdGhlIGRldmljZSwgaXQgaXMKLSAgICAvLyBuZWNlc3NhcnkgdG8gcmVsZWFzZSByZWZlcmVuY2VzIHRvIHRoZSByZXR1cm5lZCBvYmplY3QuCi0gICAgdmlydHVhbCBzdGF0dXNfdCBvcGVuRGV2aWNlKGNvbnN0IGNoYXIgKm5hbWUsIHNwPERldmljZUhhbEludGVyZmFjZT4gKmRldmljZSk7Ci0KLSAgcHJpdmF0ZToKLSAgICBmcmllbmQgY2xhc3MgRGV2aWNlc0ZhY3RvcnlIYWxIeWJyaWQ7Ci0KLSAgICBzcDxJRGV2aWNlc0ZhY3Rvcnk+IG1EZXZpY2VzRmFjdG9yeTsKLSAgICBzcDxJRGV2aWNlc0ZhY3Rvcnk+IG1EZXZpY2VzRmFjdG9yeU1zZDsKLQotICAgIHN0YXRpYyBzdGF0dXNfdCBuYW1lRnJvbUhhbChjb25zdCBjaGFyICpuYW1lLCBJRGV2aWNlc0ZhY3Rvcnk6OkRldmljZSAqZGV2aWNlKTsKLQotICAgIC8vIENhbiBub3QgYmUgY29uc3RydWN0ZWQgZGlyZWN0bHkgYnkgY2xpZW50cy4KLSAgICBEZXZpY2VzRmFjdG9yeUhhbEhpZGwoKTsKLQotICAgIHZpcnR1YWwgfkRldmljZXNGYWN0b3J5SGFsSGlkbCgpOwotfTsKLQotfSAvLyBuYW1lc3BhY2UgYW5kcm9pZAotCi0jZW5kaWYgLy8gQU5EUk9JRF9IQVJEV0FSRV9ERVZJQ0VTX0ZBQ1RPUllfSEFMX0hJRExfSApkaWZmIC0tZ2l0IGEvbWVkaWEvbGliYXVkaW9oYWwvMi4wL0RldmljZXNGYWN0b3J5SGFsSHlicmlkLmNwcCBiL21lZGlhL2xpYmF1ZGlvaGFsLzIuMC9EZXZpY2VzRmFjdG9yeUhhbEh5YnJpZC5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDFjNGJlNzQuLjAwMDAwMDAKLS0tIGEvbWVkaWEvbGliYXVkaW9oYWwvMi4wL0RldmljZXNGYWN0b3J5SGFsSHlicmlkLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDQyICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTcgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAotICoKLSAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwotICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgotICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0gKgotICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLSAqCi0gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCi0gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAotICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCi0gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCi0gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KLSAqLwotCi0jZGVmaW5lIExPR19UQUcgIkRldmljZXNGYWN0b3J5SGFsSHlicmlkIgotLy8jZGVmaW5lIExPR19OREVCVUcgMAotCi0jaW5jbHVkZSAiRGV2aWNlc0ZhY3RvcnlIYWxIeWJyaWQuaCIKLSNpbmNsdWRlICJEZXZpY2VzRmFjdG9yeUhhbExvY2FsLmgiCi0jaW5jbHVkZSAiRGV2aWNlc0ZhY3RvcnlIYWxIaWRsLmgiCi0KLW5hbWVzcGFjZSBhbmRyb2lkIHsKLQotRGV2aWNlc0ZhY3RvcnlIYWxIeWJyaWQ6OkRldmljZXNGYWN0b3J5SGFsSHlicmlkKCkKLSAgICAgICAgOiBtTG9jYWxGYWN0b3J5KG5ldyBEZXZpY2VzRmFjdG9yeUhhbExvY2FsKCkpLAotICAgICAgICAgIG1IaWRsRmFjdG9yeShuZXcgRGV2aWNlc0ZhY3RvcnlIYWxIaWRsKCkpIHsKLX0KLQotRGV2aWNlc0ZhY3RvcnlIYWxIeWJyaWQ6On5EZXZpY2VzRmFjdG9yeUhhbEh5YnJpZCgpIHsKLX0KLQotc3RhdHVzX3QgRGV2aWNlc0ZhY3RvcnlIYWxIeWJyaWQ6Om9wZW5EZXZpY2UoY29uc3QgY2hhciAqbmFtZSwgc3A8RGV2aWNlSGFsSW50ZXJmYWNlPiAqZGV2aWNlKSB7Ci0gICAgaWYgKG1IaWRsRmFjdG9yeSAhPSAwICYmIHN0cmNtcChBVURJT19IQVJEV0FSRV9NT0RVTEVfSURfQTJEUCwgbmFtZSkgIT0gMCAmJgotICAgICAgICBzdHJjbXAoQVVESU9fSEFSRFdBUkVfTU9EVUxFX0lEX0hFQVJJTkdfQUlELCBuYW1lKSAhPSAwKSB7Ci0gICAgICAgIHJldHVybiBtSGlkbEZhY3RvcnktPm9wZW5EZXZpY2UobmFtZSwgZGV2aWNlKTsKLSAgICB9Ci0gICAgcmV0dXJuIG1Mb2NhbEZhY3RvcnktPm9wZW5EZXZpY2UobmFtZSwgZGV2aWNlKTsKLX0KLQotfSAvLyBuYW1lc3BhY2UgYW5kcm9pZApkaWZmIC0tZ2l0IGEvbWVkaWEvbGliYXVkaW9oYWwvMi4wL0RldmljZXNGYWN0b3J5SGFsSHlicmlkLmggYi9tZWRpYS9saWJhdWRpb2hhbC8yLjAvRGV2aWNlc0ZhY3RvcnlIYWxIeWJyaWQuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYWJkNTdkNi4uMDAwMDAwMAotLS0gYS9tZWRpYS9saWJhdWRpb2hhbC8yLjAvRGV2aWNlc0ZhY3RvcnlIYWxIeWJyaWQuaAorKysgL2Rldi9udWxsCkBAIC0xLDQ3ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTcgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAotICoKLSAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwotICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgotICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0gKgotICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLSAqCi0gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCi0gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAotICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCi0gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCi0gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KLSAqLwotCi0jaWZuZGVmIEFORFJPSURfSEFSRFdBUkVfREVWSUNFU19GQUNUT1JZX0hBTF9IWUJSSURfSAotI2RlZmluZSBBTkRST0lEX0hBUkRXQVJFX0RFVklDRVNfRkFDVE9SWV9IQUxfSFlCUklEX0gKLQotI2luY2x1ZGUgPG1lZGlhL2F1ZGlvaGFsL0RldmljZXNGYWN0b3J5SGFsSW50ZXJmYWNlLmg+Ci0jaW5jbHVkZSA8dXRpbHMvRXJyb3JzLmg+Ci0jaW5jbHVkZSA8dXRpbHMvUmVmQmFzZS5oPgotCi1uYW1lc3BhY2UgYW5kcm9pZCB7Ci0KLWNsYXNzIERldmljZXNGYWN0b3J5SGFsSHlicmlkIDogcHVibGljIERldmljZXNGYWN0b3J5SGFsSW50ZXJmYWNlCi17Ci0gIHB1YmxpYzoKLSAgICAvLyBPcGVucyBhIGRldmljZSB3aXRoIHRoZSBzcGVjaWZpZWQgbmFtZS4gVG8gY2xvc2UgdGhlIGRldmljZSwgaXQgaXMKLSAgICAvLyBuZWNlc3NhcnkgdG8gcmVsZWFzZSByZWZlcmVuY2VzIHRvIHRoZSByZXR1cm5lZCBvYmplY3QuCi0gICAgdmlydHVhbCBzdGF0dXNfdCBvcGVuRGV2aWNlKGNvbnN0IGNoYXIgKm5hbWUsIHNwPERldmljZUhhbEludGVyZmFjZT4gKmRldmljZSk7Ci0KLSAgcHJpdmF0ZToKLSAgICBmcmllbmQgY2xhc3MgRGV2aWNlc0ZhY3RvcnlIYWxJbnRlcmZhY2U7Ci0KLSAgICAvLyBDYW4gbm90IGJlIGNvbnN0cnVjdGVkIGRpcmVjdGx5IGJ5IGNsaWVudHMuCi0gICAgRGV2aWNlc0ZhY3RvcnlIYWxIeWJyaWQoKTsKLQotICAgIHZpcnR1YWwgfkRldmljZXNGYWN0b3J5SGFsSHlicmlkKCk7Ci0KLSAgICBzcDxEZXZpY2VzRmFjdG9yeUhhbEludGVyZmFjZT4gbUxvY2FsRmFjdG9yeTsKLSAgICBzcDxEZXZpY2VzRmFjdG9yeUhhbEludGVyZmFjZT4gbUhpZGxGYWN0b3J5OwotfTsKLQotfSAvLyBuYW1lc3BhY2UgYW5kcm9pZAotCi0jZW5kaWYgLy8gQU5EUk9JRF9IQVJEV0FSRV9ERVZJQ0VTX0ZBQ1RPUllfSEFMX0hZQlJJRF9ICmRpZmYgLS1naXQgYS9tZWRpYS9saWJhdWRpb2hhbC8yLjAvRGV2aWNlc0ZhY3RvcnlIYWxMb2NhbC5jcHAgYi9tZWRpYS9saWJhdWRpb2hhbC8yLjAvRGV2aWNlc0ZhY3RvcnlIYWxMb2NhbC5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDEzYTlhY2QuLjAwMDAwMDAKLS0tIGEvbWVkaWEvbGliYXVkaW9oYWwvMi4wL0RldmljZXNGYWN0b3J5SGFsTG9jYWwuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsNjkgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNiBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0Ci0gKgotICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7Ci0gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCi0gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLSAqCi0gKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotICoKLSAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKLSAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCi0gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KLSAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKLSAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgotICovCi0KLSNkZWZpbmUgTE9HX1RBRyAiRGV2aWNlc0ZhY3RvcnlIYWxMb2NhbCIKLS8vI2RlZmluZSBMT0dfTkRFQlVHIDAKLQotI2luY2x1ZGUgPHN0cmluZy5oPgotCi0jaW5jbHVkZSA8aGFyZHdhcmUvYXVkaW8uaD4KLSNpbmNsdWRlIDx1dGlscy9Mb2cuaD4KLQotI2luY2x1ZGUgIkRldmljZUhhbExvY2FsLmgiCi0jaW5jbHVkZSAiRGV2aWNlc0ZhY3RvcnlIYWxMb2NhbC5oIgotCi1uYW1lc3BhY2UgYW5kcm9pZCB7Ci0KLXN0YXRpYyBzdGF0dXNfdCBsb2FkX2F1ZGlvX2ludGVyZmFjZShjb25zdCBjaGFyICppZl9uYW1lLCBhdWRpb19od19kZXZpY2VfdCAqKmRldikKLXsKLSAgICBjb25zdCBod19tb2R1bGVfdCAqbW9kOwotICAgIGludCByYzsKLQotICAgIHJjID0gaHdfZ2V0X21vZHVsZV9ieV9jbGFzcyhBVURJT19IQVJEV0FSRV9NT0RVTEVfSUQsIGlmX25hbWUsICZtb2QpOwotICAgIGlmIChyYykgewotICAgICAgICBBTE9HRSgiJXMgY291bGRuJ3QgbG9hZCBhdWRpbyBodyBtb2R1bGUgJXMuJXMgKCVzKSIsIF9fZnVuY19fLAotICAgICAgICAgICAgICAgIEFVRElPX0hBUkRXQVJFX01PRFVMRV9JRCwgaWZfbmFtZSwgc3RyZXJyb3IoLXJjKSk7Ci0gICAgICAgIGdvdG8gb3V0OwotICAgIH0KLSAgICByYyA9IGF1ZGlvX2h3X2RldmljZV9vcGVuKG1vZCwgZGV2KTsKLSAgICBpZiAocmMpIHsKLSAgICAgICAgQUxPR0UoIiVzIGNvdWxkbid0IG9wZW4gYXVkaW8gaHcgZGV2aWNlIGluICVzLiVzICglcykiLCBfX2Z1bmNfXywKLSAgICAgICAgICAgICAgICBBVURJT19IQVJEV0FSRV9NT0RVTEVfSUQsIGlmX25hbWUsIHN0cmVycm9yKC1yYykpOwotICAgICAgICBnb3RvIG91dDsKLSAgICB9Ci0gICAgaWYgKCgqZGV2KS0+Y29tbW9uLnZlcnNpb24gPCBBVURJT19ERVZJQ0VfQVBJX1ZFUlNJT05fTUlOKSB7Ci0gICAgICAgIEFMT0dFKCIlcyB3cm9uZyBhdWRpbyBodyBkZXZpY2UgdmVyc2lvbiAlMDR4IiwgX19mdW5jX18sICgqZGV2KS0+Y29tbW9uLnZlcnNpb24pOwotICAgICAgICByYyA9IEJBRF9WQUxVRTsKLSAgICAgICAgYXVkaW9faHdfZGV2aWNlX2Nsb3NlKCpkZXYpOwotICAgICAgICBnb3RvIG91dDsKLSAgICB9Ci0gICAgcmV0dXJuIE9LOwotCi1vdXQ6Ci0gICAgKmRldiA9IE5VTEw7Ci0gICAgcmV0dXJuIHJjOwotfQotCi1zdGF0dXNfdCBEZXZpY2VzRmFjdG9yeUhhbExvY2FsOjpvcGVuRGV2aWNlKGNvbnN0IGNoYXIgKm5hbWUsIHNwPERldmljZUhhbEludGVyZmFjZT4gKmRldmljZSkgewotICAgIGF1ZGlvX2h3X2RldmljZV90ICpkZXY7Ci0gICAgc3RhdHVzX3QgcmMgPSBsb2FkX2F1ZGlvX2ludGVyZmFjZShuYW1lLCAmZGV2KTsKLSAgICBpZiAocmMgPT0gT0spIHsKLSAgICAgICAgKmRldmljZSA9IG5ldyBEZXZpY2VIYWxMb2NhbChkZXYpOwotICAgIH0KLSAgICByZXR1cm4gcmM7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIGFuZHJvaWQKZGlmZiAtLWdpdCBhL21lZGlhL2xpYmF1ZGlvaGFsLzIuMC9EZXZpY2VzRmFjdG9yeUhhbExvY2FsLmggYi9tZWRpYS9saWJhdWRpb2hhbC8yLjAvRGV2aWNlc0ZhY3RvcnlIYWxMb2NhbC5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiOWQxOGFiLi4wMDAwMDAwCi0tLSBhL21lZGlhL2xpYmF1ZGlvaGFsLzIuMC9EZXZpY2VzRmFjdG9yeUhhbExvY2FsLmgKKysrIC9kZXYvbnVsbApAQCAtMSw0NiArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDE2IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKLSAqCi0gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKLSAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KLSAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotICoKLSAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0gKgotICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQotICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKLSAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgotICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAotICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCi0gKi8KLQotI2lmbmRlZiBBTkRST0lEX0hBUkRXQVJFX0RFVklDRVNfRkFDVE9SWV9IQUxfTE9DQUxfSAotI2RlZmluZSBBTkRST0lEX0hBUkRXQVJFX0RFVklDRVNfRkFDVE9SWV9IQUxfTE9DQUxfSAotCi0jaW5jbHVkZSA8bWVkaWEvYXVkaW9oYWwvRGV2aWNlc0ZhY3RvcnlIYWxJbnRlcmZhY2UuaD4KLSNpbmNsdWRlIDx1dGlscy9FcnJvcnMuaD4KLSNpbmNsdWRlIDx1dGlscy9SZWZCYXNlLmg+Ci0KLSNpbmNsdWRlICJEZXZpY2VIYWxMb2NhbC5oIgotCi1uYW1lc3BhY2UgYW5kcm9pZCB7Ci0KLWNsYXNzIERldmljZXNGYWN0b3J5SGFsTG9jYWwgOiBwdWJsaWMgRGV2aWNlc0ZhY3RvcnlIYWxJbnRlcmZhY2UKLXsKLSAgcHVibGljOgotICAgIC8vIE9wZW5zIGEgZGV2aWNlIHdpdGggdGhlIHNwZWNpZmllZCBuYW1lLiBUbyBjbG9zZSB0aGUgZGV2aWNlLCBpdCBpcwotICAgIC8vIG5lY2Vzc2FyeSB0byByZWxlYXNlIHJlZmVyZW5jZXMgdG8gdGhlIHJldHVybmVkIG9iamVjdC4KLSAgICB2aXJ0dWFsIHN0YXR1c190IG9wZW5EZXZpY2UoY29uc3QgY2hhciAqbmFtZSwgc3A8RGV2aWNlSGFsSW50ZXJmYWNlPiAqZGV2aWNlKTsKLQotICBwcml2YXRlOgotICAgIGZyaWVuZCBjbGFzcyBEZXZpY2VzRmFjdG9yeUhhbEh5YnJpZDsKLQotICAgIC8vIENhbiBub3QgYmUgY29uc3RydWN0ZWQgZGlyZWN0bHkgYnkgY2xpZW50cy4KLSAgICBEZXZpY2VzRmFjdG9yeUhhbExvY2FsKCkge30KLQotICAgIHZpcnR1YWwgfkRldmljZXNGYWN0b3J5SGFsTG9jYWwoKSB7fQotfTsKLQotfSAvLyBuYW1lc3BhY2UgYW5kcm9pZAotCi0jZW5kaWYgLy8gQU5EUk9JRF9IQVJEV0FSRV9ERVZJQ0VTX0ZBQ1RPUllfSEFMX0xPQ0FMX0gKZGlmZiAtLWdpdCBhL21lZGlhL2xpYmF1ZGlvaGFsLzIuMC9FZmZlY3RCdWZmZXJIYWxIaWRsLmNwcCBiL21lZGlhL2xpYmF1ZGlvaGFsLzIuMC9FZmZlY3RCdWZmZXJIYWxIaWRsLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjI2YTUwMC4uMDAwMDAwMAotLS0gYS9tZWRpYS9saWJhdWRpb2hhbC8yLjAvRWZmZWN0QnVmZmVySGFsSGlkbC5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSwxNDQgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNyBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0Ci0gKgotICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7Ci0gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCi0gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLSAqCi0gKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotICoKLSAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKLSAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCi0gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KLSAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKLSAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgotICovCi0KLSNpbmNsdWRlIDxhdG9taWM+Ci0KLSNkZWZpbmUgTE9HX1RBRyAiRWZmZWN0QnVmZmVySGFsSGlkbCIKLS8vI2RlZmluZSBMT0dfTkRFQlVHIDAKLQotI2luY2x1ZGUgPGFuZHJvaWQvaGlkbC9hbGxvY2F0b3IvMS4wL0lBbGxvY2F0b3IuaD4KLSNpbmNsdWRlIDxoaWRsbWVtb3J5L21hcHBpbmcuaD4KLSNpbmNsdWRlIDx1dGlscy9Mb2cuaD4KLQotI2luY2x1ZGUgIkNvbnZlcnNpb25IZWxwZXJIaWRsLmgiCi0jaW5jbHVkZSAiRWZmZWN0QnVmZmVySGFsSGlkbC5oIgotCi11c2luZyA6OmFuZHJvaWQ6OmhhcmR3YXJlOjpSZXR1cm47Ci11c2luZyA6OmFuZHJvaWQ6OmhpZGw6OmFsbG9jYXRvcjo6VjFfMDo6SUFsbG9jYXRvcjsKLQotbmFtZXNwYWNlIGFuZHJvaWQgewotCi0vLyBzdGF0aWMKLXVpbnQ2NF90IEVmZmVjdEJ1ZmZlckhhbEhpZGw6Om1ha2VVbmlxdWVJZCgpIHsKLSAgICBzdGF0aWMgc3RkOjphdG9taWM8dWludDY0X3Q+IGNvdW50ZXJ7MX07Ci0gICAgcmV0dXJuIGNvdW50ZXIrKzsKLX0KLQotc3RhdHVzX3QgRWZmZWN0QnVmZmVySGFsSGlkbDo6YWxsb2NhdGUoCi0gICAgICAgIHNpemVfdCBzaXplLCBzcDxFZmZlY3RCdWZmZXJIYWxJbnRlcmZhY2U+KiBidWZmZXIpIHsKLSAgICByZXR1cm4gbWlycm9yKG51bGxwdHIsIHNpemUsIGJ1ZmZlcik7Ci19Ci0KLXN0YXR1c190IEVmZmVjdEJ1ZmZlckhhbEhpZGw6Om1pcnJvcigKLSAgICAgICAgdm9pZCogZXh0ZXJuYWwsIHNpemVfdCBzaXplLCBzcDxFZmZlY3RCdWZmZXJIYWxJbnRlcmZhY2U+KiBidWZmZXIpIHsKLSAgICBzcDxFZmZlY3RCdWZmZXJIYWxJbnRlcmZhY2U+IHRlbXBCdWZmZXIgPSBuZXcgRWZmZWN0QnVmZmVySGFsSGlkbChzaXplKTsKLSAgICBzdGF0dXNfdCByZXN1bHQgPSBzdGF0aWNfY2FzdDxFZmZlY3RCdWZmZXJIYWxIaWRsKj4odGVtcEJ1ZmZlci5nZXQoKSktPmluaXQoKTsKLSAgICBpZiAocmVzdWx0ID09IE9LKSB7Ci0gICAgICAgIHRlbXBCdWZmZXItPnNldEV4dGVybmFsRGF0YShleHRlcm5hbCk7Ci0gICAgICAgICpidWZmZXIgPSB0ZW1wQnVmZmVyOwotICAgIH0KLSAgICByZXR1cm4gcmVzdWx0OwotfQotCi1FZmZlY3RCdWZmZXJIYWxIaWRsOjpFZmZlY3RCdWZmZXJIYWxIaWRsKHNpemVfdCBzaXplKQotICAgICAgICA6IG1CdWZmZXJTaXplKHNpemUpLCBtRnJhbWVDb3VudENoYW5nZWQoZmFsc2UpLAotICAgICAgICAgIG1FeHRlcm5hbERhdGEobnVsbHB0ciksIG1BdWRpb0J1ZmZlcnswLCB7bnVsbHB0cn19IHsKLSAgICBtSGlkbEJ1ZmZlci5pZCA9IG1ha2VVbmlxdWVJZCgpOwotICAgIG1IaWRsQnVmZmVyLmZyYW1lQ291bnQgPSAwOwotfQotCi1FZmZlY3RCdWZmZXJIYWxIaWRsOjp+RWZmZWN0QnVmZmVySGFsSGlkbCgpIHsKLX0KLQotc3RhdHVzX3QgRWZmZWN0QnVmZmVySGFsSGlkbDo6aW5pdCgpIHsKLSAgICBzcDxJQWxsb2NhdG9yPiBhc2htZW0gPSBJQWxsb2NhdG9yOjpnZXRTZXJ2aWNlKCJhc2htZW0iKTsKLSAgICBpZiAoYXNobWVtID09IDApIHsKLSAgICAgICAgQUxPR0UoIkZhaWxlZCB0byByZXRyaWV2ZSBhc2htZW0gYWxsb2NhdG9yIHNlcnZpY2UiKTsKLSAgICAgICAgcmV0dXJuIE5PX0lOSVQ7Ci0gICAgfQotICAgIHN0YXR1c190IHJldHZhbCA9IE5PX01FTU9SWTsKLSAgICBSZXR1cm48dm9pZD4gcmVzdWx0ID0gYXNobWVtLT5hbGxvY2F0ZSgKLSAgICAgICAgICAgIG1CdWZmZXJTaXplLAotICAgICAgICAgICAgWyZdKGJvb2wgc3VjY2VzcywgY29uc3QgaGlkbF9tZW1vcnkmIG1lbW9yeSkgewotICAgICAgICAgICAgICAgIGlmIChzdWNjZXNzKSB7Ci0gICAgICAgICAgICAgICAgICAgIG1IaWRsQnVmZmVyLmRhdGEgPSBtZW1vcnk7Ci0gICAgICAgICAgICAgICAgICAgIHJldHZhbCA9IE9LOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0pOwotICAgIGlmIChyZXN1bHQuaXNPaygpICYmIHJldHZhbCA9PSBPSykgewotICAgICAgICBtTWVtb3J5ID0gaGFyZHdhcmU6Om1hcE1lbW9yeShtSGlkbEJ1ZmZlci5kYXRhKTsKLSAgICAgICAgaWYgKG1NZW1vcnkgIT0gMCkgewotICAgICAgICAgICAgbU1lbW9yeS0+dXBkYXRlKCk7Ci0gICAgICAgICAgICBtQXVkaW9CdWZmZXIucmF3ID0gc3RhdGljX2Nhc3Q8dm9pZCo+KG1NZW1vcnktPmdldFBvaW50ZXIoKSk7Ci0gICAgICAgICAgICBtZW1zZXQobUF1ZGlvQnVmZmVyLnJhdywgMCwgbU1lbW9yeS0+Z2V0U2l6ZSgpKTsKLSAgICAgICAgICAgIG1NZW1vcnktPmNvbW1pdCgpOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgQUxPR0UoIkZhaWxlZCB0byBtYXAgYWxsb2NhdGVkIGFzaG1lbSIpOwotICAgICAgICAgICAgcmV0dmFsID0gTk9fTUVNT1JZOwotICAgICAgICB9Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgQUxPR0UoIkZhaWxlZCB0byBhbGxvY2F0ZSAlZCBieXRlcyBmcm9tIGFzaG1lbSIsIChpbnQpbUJ1ZmZlclNpemUpOwotICAgIH0KLSAgICByZXR1cm4gcmVzdWx0LmlzT2soKSA/IHJldHZhbCA6IEZBSUxFRF9UUkFOU0FDVElPTjsKLX0KLQotYXVkaW9fYnVmZmVyX3QqIEVmZmVjdEJ1ZmZlckhhbEhpZGw6OmF1ZGlvQnVmZmVyKCkgewotICAgIHJldHVybiAmbUF1ZGlvQnVmZmVyOwotfQotCi12b2lkKiBFZmZlY3RCdWZmZXJIYWxIaWRsOjpleHRlcm5hbERhdGEoKSBjb25zdCB7Ci0gICAgcmV0dXJuIG1FeHRlcm5hbERhdGE7Ci19Ci0KLXZvaWQgRWZmZWN0QnVmZmVySGFsSGlkbDo6c2V0RnJhbWVDb3VudChzaXplX3QgZnJhbWVDb3VudCkgewotICAgIG1IaWRsQnVmZmVyLmZyYW1lQ291bnQgPSBmcmFtZUNvdW50OwotICAgIG1BdWRpb0J1ZmZlci5mcmFtZUNvdW50ID0gZnJhbWVDb3VudDsKLSAgICBtRnJhbWVDb3VudENoYW5nZWQgPSB0cnVlOwotfQotCi1ib29sIEVmZmVjdEJ1ZmZlckhhbEhpZGw6OmNoZWNrRnJhbWVDb3VudENoYW5nZSgpIHsKLSAgICBib29sIHJlc3VsdCA9IG1GcmFtZUNvdW50Q2hhbmdlZDsKLSAgICBtRnJhbWVDb3VudENoYW5nZWQgPSBmYWxzZTsKLSAgICByZXR1cm4gcmVzdWx0OwotfQotCi12b2lkIEVmZmVjdEJ1ZmZlckhhbEhpZGw6OnNldEV4dGVybmFsRGF0YSh2b2lkKiBleHRlcm5hbCkgewotICAgIG1FeHRlcm5hbERhdGEgPSBleHRlcm5hbDsKLX0KLQotdm9pZCBFZmZlY3RCdWZmZXJIYWxIaWRsOjp1cGRhdGUoKSB7Ci0gICAgdXBkYXRlKG1CdWZmZXJTaXplKTsKLX0KLQotdm9pZCBFZmZlY3RCdWZmZXJIYWxIaWRsOjpjb21taXQoKSB7Ci0gICAgY29tbWl0KG1CdWZmZXJTaXplKTsKLX0KLQotdm9pZCBFZmZlY3RCdWZmZXJIYWxIaWRsOjp1cGRhdGUoc2l6ZV90IHNpemUpIHsKLSAgICBpZiAobUV4dGVybmFsRGF0YSA9PSBudWxscHRyKSByZXR1cm47Ci0gICAgbU1lbW9yeS0+dXBkYXRlKCk7Ci0gICAgaWYgKHNpemUgPiBtQnVmZmVyU2l6ZSkgc2l6ZSA9IG1CdWZmZXJTaXplOwotICAgIG1lbWNweShtQXVkaW9CdWZmZXIucmF3LCBtRXh0ZXJuYWxEYXRhLCBzaXplKTsKLSAgICBtTWVtb3J5LT5jb21taXQoKTsKLX0KLQotdm9pZCBFZmZlY3RCdWZmZXJIYWxIaWRsOjpjb21taXQoc2l6ZV90IHNpemUpIHsKLSAgICBpZiAobUV4dGVybmFsRGF0YSA9PSBudWxscHRyKSByZXR1cm47Ci0gICAgaWYgKHNpemUgPiBtQnVmZmVyU2l6ZSkgc2l6ZSA9IG1CdWZmZXJTaXplOwotICAgIG1lbWNweShtRXh0ZXJuYWxEYXRhLCBtQXVkaW9CdWZmZXIucmF3LCBzaXplKTsKLX0KLQotfSAvLyBuYW1lc3BhY2UgYW5kcm9pZApkaWZmIC0tZ2l0IGEvbWVkaWEvbGliYXVkaW9oYWwvMi4wL0VmZmVjdEJ1ZmZlckhhbEhpZGwuaCBiL21lZGlhL2xpYmF1ZGlvaGFsLzIuMC9FZmZlY3RCdWZmZXJIYWxIaWRsLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDMxZTAwODcuLjAwMDAwMDAKLS0tIGEvbWVkaWEvbGliYXVkaW9oYWwvMi4wL0VmZmVjdEJ1ZmZlckhhbEhpZGwuaAorKysgL2Rldi9udWxsCkBAIC0xLDc2ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTcgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAotICoKLSAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwotICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgotICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0gKgotICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLSAqCi0gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCi0gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAotICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCi0gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCi0gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KLSAqLwotCi0jaWZuZGVmIEFORFJPSURfSEFSRFdBUkVfRUZGRUNUX0JVRkZFUl9IQUxfSElETF9ICi0jZGVmaW5lIEFORFJPSURfSEFSRFdBUkVfRUZGRUNUX0JVRkZFUl9IQUxfSElETF9ICi0KLSNpbmNsdWRlIDxhbmRyb2lkL2hhcmR3YXJlL2F1ZGlvL2VmZmVjdC8yLjAvdHlwZXMuaD4KLSNpbmNsdWRlIDxhbmRyb2lkL2hpZGwvbWVtb3J5LzEuMC9JTWVtb3J5Lmg+Ci0jaW5jbHVkZSA8aGlkbC9IaWRsU3VwcG9ydC5oPgotI2luY2x1ZGUgPG1lZGlhL2F1ZGlvaGFsL0VmZmVjdEJ1ZmZlckhhbEludGVyZmFjZS5oPgotI2luY2x1ZGUgPHN5c3RlbS9hdWRpb19lZmZlY3QuaD4KLQotdXNpbmcgYW5kcm9pZDo6aGFyZHdhcmU6OmF1ZGlvOjplZmZlY3Q6OlYyXzA6OkF1ZGlvQnVmZmVyOwotdXNpbmcgYW5kcm9pZDo6aGFyZHdhcmU6OmhpZGxfbWVtb3J5OwotdXNpbmcgYW5kcm9pZDo6aGlkbDo6bWVtb3J5OjpWMV8wOjpJTWVtb3J5OwotCi1uYW1lc3BhY2UgYW5kcm9pZCB7Ci0KLWNsYXNzIEVmZmVjdEJ1ZmZlckhhbEhpZGwgOiBwdWJsaWMgRWZmZWN0QnVmZmVySGFsSW50ZXJmYWNlCi17Ci0gIHB1YmxpYzoKLSAgICBzdGF0aWMgc3RhdHVzX3QgYWxsb2NhdGUoc2l6ZV90IHNpemUsIHNwPEVmZmVjdEJ1ZmZlckhhbEludGVyZmFjZT4qIGJ1ZmZlcik7Ci0gICAgc3RhdGljIHN0YXR1c190IG1pcnJvcih2b2lkKiBleHRlcm5hbCwgc2l6ZV90IHNpemUsIHNwPEVmZmVjdEJ1ZmZlckhhbEludGVyZmFjZT4qIGJ1ZmZlcik7Ci0KLSAgICB2aXJ0dWFsIGF1ZGlvX2J1ZmZlcl90KiBhdWRpb0J1ZmZlcigpOwotICAgIHZpcnR1YWwgdm9pZCogZXh0ZXJuYWxEYXRhKCkgY29uc3Q7Ci0KLSAgICB2aXJ0dWFsIHNpemVfdCBnZXRTaXplKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gbUJ1ZmZlclNpemU7IH0KLQotICAgIHZpcnR1YWwgdm9pZCBzZXRFeHRlcm5hbERhdGEodm9pZCogZXh0ZXJuYWwpOwotICAgIHZpcnR1YWwgdm9pZCBzZXRGcmFtZUNvdW50KHNpemVfdCBmcmFtZUNvdW50KTsKLSAgICB2aXJ0dWFsIGJvb2wgY2hlY2tGcmFtZUNvdW50Q2hhbmdlKCk7Ci0KLSAgICB2aXJ0dWFsIHZvaWQgdXBkYXRlKCk7Ci0gICAgdmlydHVhbCB2b2lkIGNvbW1pdCgpOwotICAgIHZpcnR1YWwgdm9pZCB1cGRhdGUoc2l6ZV90IHNpemUpOwotICAgIHZpcnR1YWwgdm9pZCBjb21taXQoc2l6ZV90IHNpemUpOwotCi0gICAgY29uc3QgQXVkaW9CdWZmZXImIGhpZGxCdWZmZXIoKSBjb25zdCB7IHJldHVybiBtSGlkbEJ1ZmZlcjsgfQotCi0gIHByaXZhdGU6Ci0gICAgZnJpZW5kIGNsYXNzIEVmZmVjdEJ1ZmZlckhhbEludGVyZmFjZTsKLQotICAgIHN0YXRpYyB1aW50NjRfdCBtYWtlVW5pcXVlSWQoKTsKLQotICAgIGNvbnN0IHNpemVfdCBtQnVmZmVyU2l6ZTsKLSAgICBib29sIG1GcmFtZUNvdW50Q2hhbmdlZDsKLSAgICB2b2lkKiBtRXh0ZXJuYWxEYXRhOwotICAgIEF1ZGlvQnVmZmVyIG1IaWRsQnVmZmVyOwotICAgIHNwPElNZW1vcnk+IG1NZW1vcnk7Ci0gICAgYXVkaW9fYnVmZmVyX3QgbUF1ZGlvQnVmZmVyOwotCi0gICAgLy8gQ2FuIG5vdCBiZSBjb25zdHJ1Y3RlZCBkaXJlY3RseSBieSBjbGllbnRzLgotICAgIGV4cGxpY2l0IEVmZmVjdEJ1ZmZlckhhbEhpZGwoc2l6ZV90IHNpemUpOwotCi0gICAgdmlydHVhbCB+RWZmZWN0QnVmZmVySGFsSGlkbCgpOwotCi0gICAgc3RhdHVzX3QgaW5pdCgpOwotfTsKLQotfSAvLyBuYW1lc3BhY2UgYW5kcm9pZAotCi0jZW5kaWYgLy8gQU5EUk9JRF9IQVJEV0FSRV9FRkZFQ1RfQlVGRkVSX0hBTF9ISURMX0gKZGlmZiAtLWdpdCBhL21lZGlhL2xpYmF1ZGlvaGFsLzIuMC9FZmZlY3RIYWxIaWRsLmNwcCBiL21lZGlhL2xpYmF1ZGlvaGFsLzIuMC9FZmZlY3RIYWxIaWRsLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNGZiMDMyYy4uMDAwMDAwMAotLS0gYS9tZWRpYS9saWJhdWRpb2hhbC8yLjAvRWZmZWN0SGFsSGlkbC5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSwzMzggKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNiBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0Ci0gKgotICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7Ci0gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCi0gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLSAqCi0gKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotICoKLSAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKLSAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCi0gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KLSAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKLSAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgotICovCi0KLSNkZWZpbmUgTE9HX1RBRyAiRWZmZWN0SGFsSGlkbCIKLS8vI2RlZmluZSBMT0dfTkRFQlVHIDAKLQotI2luY2x1ZGUgPGh3YmluZGVyL0lQQ1RocmVhZFN0YXRlLmg+Ci0jaW5jbHVkZSA8bWVkaWEvRWZmZWN0c0ZhY3RvcnlBcGkuaD4KLSNpbmNsdWRlIDx1dGlscy9Mb2cuaD4KLQotI2luY2x1ZGUgIkNvbnZlcnNpb25IZWxwZXJIaWRsLmgiCi0jaW5jbHVkZSAiRWZmZWN0QnVmZmVySGFsSGlkbC5oIgotI2luY2x1ZGUgIkVmZmVjdEhhbEhpZGwuaCIKLSNpbmNsdWRlICJIaWRsVXRpbHMuaCIKLQotdXNpbmcgOjphbmRyb2lkOjpoYXJkd2FyZTo6YXVkaW86OmVmZmVjdDo6VjJfMDo6QXVkaW9CdWZmZXI7Ci11c2luZyA6OmFuZHJvaWQ6OmhhcmR3YXJlOjphdWRpbzo6ZWZmZWN0OjpWMl8wOjpFZmZlY3RCdWZmZXJBY2Nlc3M7Ci11c2luZyA6OmFuZHJvaWQ6OmhhcmR3YXJlOjphdWRpbzo6ZWZmZWN0OjpWMl8wOjpFZmZlY3RDb25maWdQYXJhbWV0ZXJzOwotdXNpbmcgOjphbmRyb2lkOjpoYXJkd2FyZTo6YXVkaW86OmVmZmVjdDo6VjJfMDo6TWVzc2FnZVF1ZXVlRmxhZ0JpdHM7Ci11c2luZyA6OmFuZHJvaWQ6OmhhcmR3YXJlOjphdWRpbzo6ZWZmZWN0OjpWMl8wOjpSZXN1bHQ7Ci11c2luZyA6OmFuZHJvaWQ6OmhhcmR3YXJlOjphdWRpbzo6Y29tbW9uOjpWMl8wOjpIaWRsVXRpbHM7Ci11c2luZyA6OmFuZHJvaWQ6OmhhcmR3YXJlOjphdWRpbzo6Y29tbW9uOjpWMl8wOjpBdWRpb0NoYW5uZWxNYXNrOwotdXNpbmcgOjphbmRyb2lkOjpoYXJkd2FyZTo6YXVkaW86OmNvbW1vbjo6VjJfMDo6QXVkaW9Gb3JtYXQ7Ci11c2luZyA6OmFuZHJvaWQ6OmhhcmR3YXJlOjpoaWRsX3ZlYzsKLXVzaW5nIDo6YW5kcm9pZDo6aGFyZHdhcmU6Ok1RRGVzY3JpcHRvclN5bmM7Ci11c2luZyA6OmFuZHJvaWQ6OmhhcmR3YXJlOjpSZXR1cm47Ci0KLW5hbWVzcGFjZSBhbmRyb2lkIHsKLQotRWZmZWN0SGFsSGlkbDo6RWZmZWN0SGFsSGlkbChjb25zdCBzcDxJRWZmZWN0PiYgZWZmZWN0LCB1aW50NjRfdCBlZmZlY3RJZCkKLSAgICAgICAgOiBtRWZmZWN0KGVmZmVjdCksIG1FZmZlY3RJZChlZmZlY3RJZCksIG1CdWZmZXJzQ2hhbmdlZCh0cnVlKSwgbUVmR3JvdXAobnVsbHB0cikgewotfQotCi1FZmZlY3RIYWxIaWRsOjp+RWZmZWN0SGFsSGlkbCgpIHsKLSAgICBpZiAobUVmZmVjdCAhPSAwKSB7Ci0gICAgICAgIGNsb3NlKCk7Ci0gICAgICAgIG1FZmZlY3QuY2xlYXIoKTsKLSAgICAgICAgaGFyZHdhcmU6OklQQ1RocmVhZFN0YXRlOjpzZWxmKCktPmZsdXNoQ29tbWFuZHMoKTsKLSAgICB9Ci0gICAgaWYgKG1FZkdyb3VwKSB7Ci0gICAgICAgIEV2ZW50RmxhZzo6ZGVsZXRlRXZlbnRGbGFnKCZtRWZHcm91cCk7Ci0gICAgfQotfQotCi0vLyBzdGF0aWMKLXZvaWQgRWZmZWN0SGFsSGlkbDo6ZWZmZWN0RGVzY3JpcHRvclRvSGFsKAotICAgICAgICBjb25zdCBFZmZlY3REZXNjcmlwdG9yJiBkZXNjcmlwdG9yLCBlZmZlY3RfZGVzY3JpcHRvcl90KiBoYWxEZXNjcmlwdG9yKSB7Ci0gICAgSGlkbFV0aWxzOjp1dWlkVG9IYWwoZGVzY3JpcHRvci50eXBlLCAmaGFsRGVzY3JpcHRvci0+dHlwZSk7Ci0gICAgSGlkbFV0aWxzOjp1dWlkVG9IYWwoZGVzY3JpcHRvci51dWlkLCAmaGFsRGVzY3JpcHRvci0+dXVpZCk7Ci0gICAgaGFsRGVzY3JpcHRvci0+ZmxhZ3MgPSBzdGF0aWNfY2FzdDx1aW50MzJfdD4oZGVzY3JpcHRvci5mbGFncyk7Ci0gICAgaGFsRGVzY3JpcHRvci0+Y3B1TG9hZCA9IGRlc2NyaXB0b3IuY3B1TG9hZDsKLSAgICBoYWxEZXNjcmlwdG9yLT5tZW1vcnlVc2FnZSA9IGRlc2NyaXB0b3IubWVtb3J5VXNhZ2U7Ci0gICAgbWVtY3B5KGhhbERlc2NyaXB0b3ItPm5hbWUsIGRlc2NyaXB0b3IubmFtZS5kYXRhKCksIGRlc2NyaXB0b3IubmFtZS5zaXplKCkpOwotICAgIG1lbWNweShoYWxEZXNjcmlwdG9yLT5pbXBsZW1lbnRvciwKLSAgICAgICAgICAgIGRlc2NyaXB0b3IuaW1wbGVtZW50b3IuZGF0YSgpLCBkZXNjcmlwdG9yLmltcGxlbWVudG9yLnNpemUoKSk7Ci19Ci0KLS8vIFRPRE8obW5hZ2Fub3YpOiBUaGVzZSBidWZmZXIgY29udmVyc2lvbiBmdW5jdGlvbnMgc2hvdWxkIGJlIHNoYXJlZCB3aXRoIEVmZmVjdCB3cmFwcGVyCi0vLyB2aWEgSGlkbFV0aWxzLiBNb3ZlIHRoZW0gdGhlcmUgd2hlbiBoYXJkd2FyZS9pbnRlcmZhY2VzIHdpbGwgZ2V0IHVuLWZyb3plbiBhZ2Fpbi4KLQotLy8gc3RhdGljCi12b2lkIEVmZmVjdEhhbEhpZGw6OmVmZmVjdEJ1ZmZlckNvbmZpZ0Zyb21IYWwoCi0gICAgICAgIGNvbnN0IGJ1ZmZlcl9jb25maWdfdCYgaGFsQ29uZmlnLCBFZmZlY3RCdWZmZXJDb25maWcqIGNvbmZpZykgewotICAgIGNvbmZpZy0+c2FtcGxpbmdSYXRlSHogPSBoYWxDb25maWcuc2FtcGxpbmdSYXRlOwotICAgIGNvbmZpZy0+Y2hhbm5lbHMgPSBBdWRpb0NoYW5uZWxNYXNrKGhhbENvbmZpZy5jaGFubmVscyk7Ci0gICAgY29uZmlnLT5mb3JtYXQgPSBBdWRpb0Zvcm1hdChoYWxDb25maWcuZm9ybWF0KTsKLSAgICBjb25maWctPmFjY2Vzc01vZGUgPSBFZmZlY3RCdWZmZXJBY2Nlc3MoaGFsQ29uZmlnLmFjY2Vzc01vZGUpOwotICAgIGNvbmZpZy0+bWFzayA9IEVmZmVjdENvbmZpZ1BhcmFtZXRlcnMoaGFsQ29uZmlnLm1hc2spOwotfQotCi0vLyBzdGF0aWMKLXZvaWQgRWZmZWN0SGFsSGlkbDo6ZWZmZWN0QnVmZmVyQ29uZmlnVG9IYWwoCi0gICAgICAgIGNvbnN0IEVmZmVjdEJ1ZmZlckNvbmZpZyYgY29uZmlnLCBidWZmZXJfY29uZmlnX3QqIGhhbENvbmZpZykgewotICAgIGhhbENvbmZpZy0+YnVmZmVyLmZyYW1lQ291bnQgPSAwOwotICAgIGhhbENvbmZpZy0+YnVmZmVyLnJhdyA9IE5VTEw7Ci0gICAgaGFsQ29uZmlnLT5zYW1wbGluZ1JhdGUgPSBjb25maWcuc2FtcGxpbmdSYXRlSHo7Ci0gICAgaGFsQ29uZmlnLT5jaGFubmVscyA9IHN0YXRpY19jYXN0PHVpbnQzMl90Pihjb25maWcuY2hhbm5lbHMpOwotICAgIGhhbENvbmZpZy0+YnVmZmVyUHJvdmlkZXIuY29va2llID0gTlVMTDsKLSAgICBoYWxDb25maWctPmJ1ZmZlclByb3ZpZGVyLmdldEJ1ZmZlciA9IE5VTEw7Ci0gICAgaGFsQ29uZmlnLT5idWZmZXJQcm92aWRlci5yZWxlYXNlQnVmZmVyID0gTlVMTDsKLSAgICBoYWxDb25maWctPmZvcm1hdCA9IHN0YXRpY19jYXN0PHVpbnQ4X3Q+KGNvbmZpZy5mb3JtYXQpOwotICAgIGhhbENvbmZpZy0+YWNjZXNzTW9kZSA9IHN0YXRpY19jYXN0PHVpbnQ4X3Q+KGNvbmZpZy5hY2Nlc3NNb2RlKTsKLSAgICBoYWxDb25maWctPm1hc2sgPSBzdGF0aWNfY2FzdDx1aW50OF90Pihjb25maWcubWFzayk7Ci19Ci0KLS8vIHN0YXRpYwotdm9pZCBFZmZlY3RIYWxIaWRsOjplZmZlY3RDb25maWdGcm9tSGFsKGNvbnN0IGVmZmVjdF9jb25maWdfdCYgaGFsQ29uZmlnLCBFZmZlY3RDb25maWcqIGNvbmZpZykgewotICAgIGVmZmVjdEJ1ZmZlckNvbmZpZ0Zyb21IYWwoaGFsQ29uZmlnLmlucHV0Q2ZnLCAmY29uZmlnLT5pbnB1dENmZyk7Ci0gICAgZWZmZWN0QnVmZmVyQ29uZmlnRnJvbUhhbChoYWxDb25maWcub3V0cHV0Q2ZnLCAmY29uZmlnLT5vdXRwdXRDZmcpOwotfQotCi0vLyBzdGF0aWMKLXZvaWQgRWZmZWN0SGFsSGlkbDo6ZWZmZWN0Q29uZmlnVG9IYWwoY29uc3QgRWZmZWN0Q29uZmlnJiBjb25maWcsIGVmZmVjdF9jb25maWdfdCogaGFsQ29uZmlnKSB7Ci0gICAgZWZmZWN0QnVmZmVyQ29uZmlnVG9IYWwoY29uZmlnLmlucHV0Q2ZnLCAmaGFsQ29uZmlnLT5pbnB1dENmZyk7Ci0gICAgZWZmZWN0QnVmZmVyQ29uZmlnVG9IYWwoY29uZmlnLm91dHB1dENmZywgJmhhbENvbmZpZy0+b3V0cHV0Q2ZnKTsKLX0KLQotLy8gc3RhdGljCi1zdGF0dXNfdCBFZmZlY3RIYWxIaWRsOjphbmFseXplUmVzdWx0KGNvbnN0IFJlc3VsdCYgcmVzdWx0KSB7Ci0gICAgc3dpdGNoIChyZXN1bHQpIHsKLSAgICAgICAgY2FzZSBSZXN1bHQ6Ok9LOiByZXR1cm4gT0s7Ci0gICAgICAgIGNhc2UgUmVzdWx0OjpJTlZBTElEX0FSR1VNRU5UUzogcmV0dXJuIEJBRF9WQUxVRTsKLSAgICAgICAgY2FzZSBSZXN1bHQ6OklOVkFMSURfU1RBVEU6IHJldHVybiBOT1RfRU5PVUdIX0RBVEE7Ci0gICAgICAgIGNhc2UgUmVzdWx0OjpOT1RfSU5JVElBTElaRUQ6IHJldHVybiBOT19JTklUOwotICAgICAgICBjYXNlIFJlc3VsdDo6Tk9UX1NVUFBPUlRFRDogcmV0dXJuIElOVkFMSURfT1BFUkFUSU9OOwotICAgICAgICBjYXNlIFJlc3VsdDo6UkVTVUxUX1RPT19CSUc6IHJldHVybiBOT19NRU1PUlk7Ci0gICAgICAgIGRlZmF1bHQ6IHJldHVybiBOT19JTklUOwotICAgIH0KLX0KLQotc3RhdHVzX3QgRWZmZWN0SGFsSGlkbDo6c2V0SW5CdWZmZXIoY29uc3Qgc3A8RWZmZWN0QnVmZmVySGFsSW50ZXJmYWNlPiYgYnVmZmVyKSB7Ci0gICAgaWYgKCFtQnVmZmVyc0NoYW5nZWQpIHsKLSAgICAgICAgaWYgKGJ1ZmZlci5nZXQoKSA9PSBudWxscHRyIHx8IG1JbkJ1ZmZlci5nZXQoKSA9PSBudWxscHRyKSB7Ci0gICAgICAgICAgICBtQnVmZmVyc0NoYW5nZWQgPSBidWZmZXIuZ2V0KCkgIT0gbUluQnVmZmVyLmdldCgpOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgbUJ1ZmZlcnNDaGFuZ2VkID0gYnVmZmVyLT5hdWRpb0J1ZmZlcigpICE9IG1JbkJ1ZmZlci0+YXVkaW9CdWZmZXIoKTsKLSAgICAgICAgfQotICAgIH0KLSAgICBtSW5CdWZmZXIgPSBidWZmZXI7Ci0gICAgcmV0dXJuIE9LOwotfQotCi1zdGF0dXNfdCBFZmZlY3RIYWxIaWRsOjpzZXRPdXRCdWZmZXIoY29uc3Qgc3A8RWZmZWN0QnVmZmVySGFsSW50ZXJmYWNlPiYgYnVmZmVyKSB7Ci0gICAgaWYgKCFtQnVmZmVyc0NoYW5nZWQpIHsKLSAgICAgICAgaWYgKGJ1ZmZlci5nZXQoKSA9PSBudWxscHRyIHx8IG1PdXRCdWZmZXIuZ2V0KCkgPT0gbnVsbHB0cikgewotICAgICAgICAgICAgbUJ1ZmZlcnNDaGFuZ2VkID0gYnVmZmVyLmdldCgpICE9IG1PdXRCdWZmZXIuZ2V0KCk7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBtQnVmZmVyc0NoYW5nZWQgPSBidWZmZXItPmF1ZGlvQnVmZmVyKCkgIT0gbU91dEJ1ZmZlci0+YXVkaW9CdWZmZXIoKTsKLSAgICAgICAgfQotICAgIH0KLSAgICBtT3V0QnVmZmVyID0gYnVmZmVyOwotICAgIHJldHVybiBPSzsKLX0KLQotc3RhdHVzX3QgRWZmZWN0SGFsSGlkbDo6cHJvY2VzcygpIHsKLSAgICByZXR1cm4gcHJvY2Vzc0ltcGwoc3RhdGljX2Nhc3Q8dWludDMyX3Q+KE1lc3NhZ2VRdWV1ZUZsYWdCaXRzOjpSRVFVRVNUX1BST0NFU1MpKTsKLX0KLQotc3RhdHVzX3QgRWZmZWN0SGFsSGlkbDo6cHJvY2Vzc1JldmVyc2UoKSB7Ci0gICAgcmV0dXJuIHByb2Nlc3NJbXBsKHN0YXRpY19jYXN0PHVpbnQzMl90PihNZXNzYWdlUXVldWVGbGFnQml0czo6UkVRVUVTVF9QUk9DRVNTX1JFVkVSU0UpKTsKLX0KLQotc3RhdHVzX3QgRWZmZWN0SGFsSGlkbDo6cHJlcGFyZUZvclByb2Nlc3NpbmcoKSB7Ci0gICAgc3RkOjp1bmlxdWVfcHRyPFN0YXR1c01RPiB0ZW1wU3RhdHVzTVE7Ci0gICAgUmVzdWx0IHJldHZhbDsKLSAgICBSZXR1cm48dm9pZD4gcmV0ID0gbUVmZmVjdC0+cHJlcGFyZUZvclByb2Nlc3NpbmcoCi0gICAgICAgICAgICBbJl0oUmVzdWx0IHIsIGNvbnN0IE1RRGVzY3JpcHRvclN5bmM8UmVzdWx0PiYgc3RhdHVzTVEpIHsKLSAgICAgICAgICAgICAgICByZXR2YWwgPSByOwotICAgICAgICAgICAgICAgIGlmIChyZXR2YWwgPT0gUmVzdWx0OjpPSykgewotICAgICAgICAgICAgICAgICAgICB0ZW1wU3RhdHVzTVEucmVzZXQobmV3IFN0YXR1c01RKHN0YXR1c01RKSk7Ci0gICAgICAgICAgICAgICAgICAgIGlmICh0ZW1wU3RhdHVzTVEtPmlzVmFsaWQoKSAmJiB0ZW1wU3RhdHVzTVEtPmdldEV2ZW50RmxhZ1dvcmQoKSkgewotICAgICAgICAgICAgICAgICAgICAgICAgRXZlbnRGbGFnOjpjcmVhdGVFdmVudEZsYWcodGVtcFN0YXR1c01RLT5nZXRFdmVudEZsYWdXb3JkKCksICZtRWZHcm91cCk7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9KTsKLSAgICBpZiAoIXJldC5pc09rKCkgfHwgcmV0dmFsICE9IFJlc3VsdDo6T0spIHsKLSAgICAgICAgcmV0dXJuIHJldC5pc09rKCkgPyBhbmFseXplUmVzdWx0KHJldHZhbCkgOiBGQUlMRURfVFJBTlNBQ1RJT047Ci0gICAgfQotICAgIGlmICghdGVtcFN0YXR1c01RIHx8ICF0ZW1wU3RhdHVzTVEtPmlzVmFsaWQoKSB8fCAhbUVmR3JvdXApIHsKLSAgICAgICAgQUxPR0VfSUYoIXRlbXBTdGF0dXNNUSwgIkZhaWxlZCB0byBvYnRhaW4gc3RhdHVzIG1lc3NhZ2UgcXVldWUgZm9yIGVmZmVjdHMiKTsKLSAgICAgICAgQUxPR0VfSUYodGVtcFN0YXR1c01RICYmICF0ZW1wU3RhdHVzTVEtPmlzVmFsaWQoKSwKLSAgICAgICAgICAgICAgICAiU3RhdHVzIG1lc3NhZ2UgcXVldWUgZm9yIGVmZmVjdHMgaXMgaW52YWxpZCIpOwotICAgICAgICBBTE9HRV9JRighbUVmR3JvdXAsICJFdmVudCBmbGFnIGNyZWF0aW9uIGZvciBlZmZlY3RzIGZhaWxlZCIpOwotICAgICAgICByZXR1cm4gTk9fSU5JVDsKLSAgICB9Ci0gICAgbVN0YXR1c01RID0gc3RkOjptb3ZlKHRlbXBTdGF0dXNNUSk7Ci0gICAgcmV0dXJuIE9LOwotfQotCi1ib29sIEVmZmVjdEhhbEhpZGw6Om5lZWRUb1Jlc2V0QnVmZmVycygpIHsKLSAgICBpZiAobUJ1ZmZlcnNDaGFuZ2VkKSByZXR1cm4gdHJ1ZTsKLSAgICBib29sIGluQnVmZmVyRnJhbWVDb3VudFVwZGF0ZWQgPSBtSW5CdWZmZXItPmNoZWNrRnJhbWVDb3VudENoYW5nZSgpOwotICAgIGJvb2wgb3V0QnVmZmVyRnJhbWVDb3VudFVwZGF0ZWQgPSBtT3V0QnVmZmVyLT5jaGVja0ZyYW1lQ291bnRDaGFuZ2UoKTsKLSAgICByZXR1cm4gaW5CdWZmZXJGcmFtZUNvdW50VXBkYXRlZCB8fCBvdXRCdWZmZXJGcmFtZUNvdW50VXBkYXRlZDsKLX0KLQotc3RhdHVzX3QgRWZmZWN0SGFsSGlkbDo6cHJvY2Vzc0ltcGwodWludDMyX3QgbXFGbGFnKSB7Ci0gICAgaWYgKG1FZmZlY3QgPT0gMCB8fCBtSW5CdWZmZXIgPT0gMCB8fCBtT3V0QnVmZmVyID09IDApIHJldHVybiBOT19JTklUOwotICAgIHN0YXR1c190IHN0YXR1czsKLSAgICBpZiAoIW1TdGF0dXNNUSAmJiAoc3RhdHVzID0gcHJlcGFyZUZvclByb2Nlc3NpbmcoKSkgIT0gT0spIHsKLSAgICAgICAgcmV0dXJuIHN0YXR1czsKLSAgICB9Ci0gICAgaWYgKG5lZWRUb1Jlc2V0QnVmZmVycygpICYmIChzdGF0dXMgPSBzZXRQcm9jZXNzQnVmZmVycygpKSAhPSBPSykgewotICAgICAgICByZXR1cm4gc3RhdHVzOwotICAgIH0KLSAgICAvLyBUaGUgZGF0YSBpcyBhbHJlYWR5IGluIHRoZSBidWZmZXJzLCBqdXN0IG5lZWQgdG8gZmx1c2ggaXQgYW5kIHdha2UgdXAgdGhlIHNlcnZlciBzaWRlLgotICAgIHN0ZDo6YXRvbWljX3RocmVhZF9mZW5jZShzdGQ6Om1lbW9yeV9vcmRlcl9yZWxlYXNlKTsKLSAgICBtRWZHcm91cC0+d2FrZShtcUZsYWcpOwotICAgIHVpbnQzMl90IGVmU3RhdGUgPSAwOwotcmV0cnk6Ci0gICAgc3RhdHVzX3QgcmV0ID0gbUVmR3JvdXAtPndhaXQoCi0gICAgICAgICAgICBzdGF0aWNfY2FzdDx1aW50MzJfdD4oTWVzc2FnZVF1ZXVlRmxhZ0JpdHM6OkRPTkVfUFJPQ0VTU0lORyksICZlZlN0YXRlKTsKLSAgICBpZiAoZWZTdGF0ZSAmIHN0YXRpY19jYXN0PHVpbnQzMl90PihNZXNzYWdlUXVldWVGbGFnQml0czo6RE9ORV9QUk9DRVNTSU5HKSkgewotICAgICAgICBSZXN1bHQgcmV0dmFsID0gUmVzdWx0OjpOT1RfSU5JVElBTElaRUQ7Ci0gICAgICAgIG1TdGF0dXNNUS0+cmVhZCgmcmV0dmFsKTsKLSAgICAgICAgaWYgKHJldHZhbCA9PSBSZXN1bHQ6Ok9LIHx8IHJldHZhbCA9PSBSZXN1bHQ6OklOVkFMSURfU1RBVEUpIHsKLSAgICAgICAgICAgIC8vIFN5bmMgYmFjayB0aGUgY2hhbmdlZCBjb250ZW50cyBvZiB0aGUgYnVmZmVyLgotICAgICAgICAgICAgc3RkOjphdG9taWNfdGhyZWFkX2ZlbmNlKHN0ZDo6bWVtb3J5X29yZGVyX2FjcXVpcmUpOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiBhbmFseXplUmVzdWx0KHJldHZhbCk7Ci0gICAgfQotICAgIGlmIChyZXQgPT0gLUVBR0FJTiB8fCByZXQgPT0gLUVJTlRSKSB7Ci0gICAgICAgIC8vIFNwdXJpb3VzIHdha2V1cC4gVGhpcyBub3JtYWxseSByZXRyaWVzIG5vIG1vcmUgdGhhbiBvbmNlLgotICAgICAgICBnb3RvIHJldHJ5OwotICAgIH0KLSAgICByZXR1cm4gcmV0OwotfQotCi1zdGF0dXNfdCBFZmZlY3RIYWxIaWRsOjpzZXRQcm9jZXNzQnVmZmVycygpIHsKLSAgICBSZXR1cm48UmVzdWx0PiByZXQgPSBtRWZmZWN0LT5zZXRQcm9jZXNzQnVmZmVycygKLSAgICAgICAgICAgIHN0YXRpY19jYXN0PEVmZmVjdEJ1ZmZlckhhbEhpZGwqPihtSW5CdWZmZXIuZ2V0KCkpLT5oaWRsQnVmZmVyKCksCi0gICAgICAgICAgICBzdGF0aWNfY2FzdDxFZmZlY3RCdWZmZXJIYWxIaWRsKj4obU91dEJ1ZmZlci5nZXQoKSktPmhpZGxCdWZmZXIoKSk7Ci0gICAgaWYgKHJldC5pc09rKCkgJiYgcmV0ID09IFJlc3VsdDo6T0spIHsKLSAgICAgICAgbUJ1ZmZlcnNDaGFuZ2VkID0gZmFsc2U7Ci0gICAgICAgIHJldHVybiBPSzsKLSAgICB9Ci0gICAgcmV0dXJuIHJldC5pc09rKCkgPyBhbmFseXplUmVzdWx0KHJldCkgOiBGQUlMRURfVFJBTlNBQ1RJT047Ci19Ci0KLXN0YXR1c190IEVmZmVjdEhhbEhpZGw6OmNvbW1hbmQodWludDMyX3QgY21kQ29kZSwgdWludDMyX3QgY21kU2l6ZSwgdm9pZCAqcENtZERhdGEsCi0gICAgICAgIHVpbnQzMl90ICpyZXBseVNpemUsIHZvaWQgKnBSZXBseURhdGEpIHsKLSAgICBpZiAobUVmZmVjdCA9PSAwKSByZXR1cm4gTk9fSU5JVDsKLQotICAgIC8vIFNwZWNpYWwgY2FzZXMuCi0gICAgaWYgKGNtZENvZGUgPT0gRUZGRUNUX0NNRF9TRVRfQ09ORklHIHx8IGNtZENvZGUgPT0gRUZGRUNUX0NNRF9TRVRfQ09ORklHX1JFVkVSU0UpIHsKLSAgICAgICAgcmV0dXJuIHNldENvbmZpZ0ltcGwoY21kQ29kZSwgY21kU2l6ZSwgcENtZERhdGEsIHJlcGx5U2l6ZSwgcFJlcGx5RGF0YSk7Ci0gICAgfSBlbHNlIGlmIChjbWRDb2RlID09IEVGRkVDVF9DTURfR0VUX0NPTkZJRyB8fCBjbWRDb2RlID09IEVGRkVDVF9DTURfR0VUX0NPTkZJR19SRVZFUlNFKSB7Ci0gICAgICAgIHJldHVybiBnZXRDb25maWdJbXBsKGNtZENvZGUsIHJlcGx5U2l6ZSwgcFJlcGx5RGF0YSk7Ci0gICAgfQotCi0gICAgLy8gQ29tbW9uIGNhc2UuCi0gICAgaGlkbF92ZWM8dWludDhfdD4gaGlkbERhdGE7Ci0gICAgaWYgKHBDbWREYXRhICE9IG51bGxwdHIgJiYgY21kU2l6ZSA+IDApIHsKLSAgICAgICAgaGlkbERhdGEuc2V0VG9FeHRlcm5hbChyZWludGVycHJldF9jYXN0PHVpbnQ4X3QqPihwQ21kRGF0YSksIGNtZFNpemUpOwotICAgIH0KLSAgICBzdGF0dXNfdCBzdGF0dXM7Ci0gICAgdWludDMyX3QgcmVwbHlTaXplU3R1YiA9IDA7Ci0gICAgaWYgKHJlcGx5U2l6ZSA9PSBudWxscHRyIHx8IHBSZXBseURhdGEgPT0gbnVsbHB0cikgcmVwbHlTaXplID0gJnJlcGx5U2l6ZVN0dWI7Ci0gICAgUmV0dXJuPHZvaWQ+IHJldCA9IG1FZmZlY3QtPmNvbW1hbmQoY21kQ29kZSwgaGlkbERhdGEsICpyZXBseVNpemUsCi0gICAgICAgICAgICBbJl0oaW50MzJfdCBzLCBjb25zdCBoaWRsX3ZlYzx1aW50OF90PiYgcmVzdWx0KSB7Ci0gICAgICAgICAgICAgICAgc3RhdHVzID0gczsKLSAgICAgICAgICAgICAgICBpZiAoc3RhdHVzID09IDApIHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKCpyZXBseVNpemUgPiByZXN1bHQuc2l6ZSgpKSAqcmVwbHlTaXplID0gcmVzdWx0LnNpemUoKTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKHBSZXBseURhdGEgIT0gbnVsbHB0ciAmJiAqcmVwbHlTaXplID4gMCkgewotICAgICAgICAgICAgICAgICAgICAgICAgbWVtY3B5KHBSZXBseURhdGEsICZyZXN1bHRbMF0sICpyZXBseVNpemUpOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfSk7Ci0gICAgcmV0dXJuIHJldC5pc09rKCkgPyBzdGF0dXMgOiBGQUlMRURfVFJBTlNBQ1RJT047Ci19Ci0KLXN0YXR1c190IEVmZmVjdEhhbEhpZGw6OmdldERlc2NyaXB0b3IoZWZmZWN0X2Rlc2NyaXB0b3JfdCAqcERlc2NyaXB0b3IpIHsKLSAgICBpZiAobUVmZmVjdCA9PSAwKSByZXR1cm4gTk9fSU5JVDsKLSAgICBSZXN1bHQgcmV0dmFsID0gUmVzdWx0OjpOT1RfSU5JVElBTElaRUQ7Ci0gICAgUmV0dXJuPHZvaWQ+IHJldCA9IG1FZmZlY3QtPmdldERlc2NyaXB0b3IoCi0gICAgICAgICAgICBbJl0oUmVzdWx0IHIsIGNvbnN0IEVmZmVjdERlc2NyaXB0b3ImIHJlc3VsdCkgewotICAgICAgICAgICAgICAgIHJldHZhbCA9IHI7Ci0gICAgICAgICAgICAgICAgaWYgKHJldHZhbCA9PSBSZXN1bHQ6Ok9LKSB7Ci0gICAgICAgICAgICAgICAgICAgIGVmZmVjdERlc2NyaXB0b3JUb0hhbChyZXN1bHQsIHBEZXNjcmlwdG9yKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9KTsKLSAgICByZXR1cm4gcmV0LmlzT2soKSA/IGFuYWx5emVSZXN1bHQocmV0dmFsKSA6IEZBSUxFRF9UUkFOU0FDVElPTjsKLX0KLQotc3RhdHVzX3QgRWZmZWN0SGFsSGlkbDo6Y2xvc2UoKSB7Ci0gICAgaWYgKG1FZmZlY3QgPT0gMCkgcmV0dXJuIE5PX0lOSVQ7Ci0gICAgUmV0dXJuPFJlc3VsdD4gcmV0ID0gbUVmZmVjdC0+Y2xvc2UoKTsKLSAgICByZXR1cm4gcmV0LmlzT2soKSA/IGFuYWx5emVSZXN1bHQocmV0KSA6IEZBSUxFRF9UUkFOU0FDVElPTjsKLX0KLQotc3RhdHVzX3QgRWZmZWN0SGFsSGlkbDo6Z2V0Q29uZmlnSW1wbCgKLSAgICAgICAgdWludDMyX3QgY21kQ29kZSwgdWludDMyX3QgKnJlcGx5U2l6ZSwgdm9pZCAqcFJlcGx5RGF0YSkgewotICAgIGlmIChyZXBseVNpemUgPT0gTlVMTCB8fCAqcmVwbHlTaXplICE9IHNpemVvZihlZmZlY3RfY29uZmlnX3QpIHx8IHBSZXBseURhdGEgPT0gTlVMTCkgewotICAgICAgICByZXR1cm4gQkFEX1ZBTFVFOwotICAgIH0KLSAgICBzdGF0dXNfdCByZXN1bHQgPSBGQUlMRURfVFJBTlNBQ1RJT047Ci0gICAgUmV0dXJuPHZvaWQ+IHJldDsKLSAgICBpZiAoY21kQ29kZSA9PSBFRkZFQ1RfQ01EX0dFVF9DT05GSUcpIHsKLSAgICAgICAgcmV0ID0gbUVmZmVjdC0+Z2V0Q29uZmlnKFsmXSAoUmVzdWx0IHIsIGNvbnN0IEVmZmVjdENvbmZpZyAmaGlkbENvbmZpZykgewotICAgICAgICAgICAgcmVzdWx0ID0gYW5hbHl6ZVJlc3VsdChyKTsKLSAgICAgICAgICAgIGlmIChyID09IFJlc3VsdDo6T0spIHsKLSAgICAgICAgICAgICAgICBlZmZlY3RDb25maWdUb0hhbChoaWRsQ29uZmlnLCBzdGF0aWNfY2FzdDxlZmZlY3RfY29uZmlnX3QqPihwUmVwbHlEYXRhKSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0pOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIHJldCA9IG1FZmZlY3QtPmdldENvbmZpZ1JldmVyc2UoWyZdIChSZXN1bHQgciwgY29uc3QgRWZmZWN0Q29uZmlnICZoaWRsQ29uZmlnKSB7Ci0gICAgICAgICAgICByZXN1bHQgPSBhbmFseXplUmVzdWx0KHIpOwotICAgICAgICAgICAgaWYgKHIgPT0gUmVzdWx0OjpPSykgewotICAgICAgICAgICAgICAgIGVmZmVjdENvbmZpZ1RvSGFsKGhpZGxDb25maWcsIHN0YXRpY19jYXN0PGVmZmVjdF9jb25maWdfdCo+KHBSZXBseURhdGEpKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfSk7Ci0gICAgfQotICAgIGlmICghcmV0LmlzT2soKSkgewotICAgICAgICByZXN1bHQgPSBGQUlMRURfVFJBTlNBQ1RJT047Ci0gICAgfQotICAgIHJldHVybiByZXN1bHQ7Ci19Ci0KLXN0YXR1c190IEVmZmVjdEhhbEhpZGw6OnNldENvbmZpZ0ltcGwoCi0gICAgICAgIHVpbnQzMl90IGNtZENvZGUsIHVpbnQzMl90IGNtZFNpemUsIHZvaWQgKnBDbWREYXRhLCB1aW50MzJfdCAqcmVwbHlTaXplLCB2b2lkICpwUmVwbHlEYXRhKSB7Ci0gICAgaWYgKHBDbWREYXRhID09IE5VTEwgfHwgY21kU2l6ZSAhPSBzaXplb2YoZWZmZWN0X2NvbmZpZ190KSB8fAotICAgICAgICAgICAgcmVwbHlTaXplID09IE5VTEwgfHwgKnJlcGx5U2l6ZSAhPSBzaXplb2YoaW50MzJfdCkgfHwgcFJlcGx5RGF0YSA9PSBOVUxMKSB7Ci0gICAgICAgIHJldHVybiBCQURfVkFMVUU7Ci0gICAgfQotICAgIGNvbnN0IGVmZmVjdF9jb25maWdfdCAqaGFsQ29uZmlnID0gc3RhdGljX2Nhc3Q8ZWZmZWN0X2NvbmZpZ190Kj4ocENtZERhdGEpOwotICAgIGlmIChoYWxDb25maWctPmlucHV0Q2ZnLmJ1ZmZlclByb3ZpZGVyLmdldEJ1ZmZlciAhPSBOVUxMIHx8Ci0gICAgICAgICAgICBoYWxDb25maWctPmlucHV0Q2ZnLmJ1ZmZlclByb3ZpZGVyLnJlbGVhc2VCdWZmZXIgIT0gTlVMTCB8fAotICAgICAgICAgICAgaGFsQ29uZmlnLT5vdXRwdXRDZmcuYnVmZmVyUHJvdmlkZXIuZ2V0QnVmZmVyICE9IE5VTEwgfHwKLSAgICAgICAgICAgIGhhbENvbmZpZy0+b3V0cHV0Q2ZnLmJ1ZmZlclByb3ZpZGVyLnJlbGVhc2VCdWZmZXIgIT0gTlVMTCkgewotICAgICAgICBBTE9HRSgiQnVmZmVyIHByb3ZpZGVyIGNhbGxiYWNrcyBhcmUgbm90IHN1cHBvcnRlZCIpOwotICAgIH0KLSAgICBFZmZlY3RDb25maWcgaGlkbENvbmZpZzsKLSAgICBlZmZlY3RDb25maWdGcm9tSGFsKCpoYWxDb25maWcsICZoaWRsQ29uZmlnKTsKLSAgICBSZXR1cm48UmVzdWx0PiByZXQgPSBjbWRDb2RlID09IEVGRkVDVF9DTURfU0VUX0NPTkZJRyA/Ci0gICAgICAgICAgICBtRWZmZWN0LT5zZXRDb25maWcoaGlkbENvbmZpZywgbnVsbHB0ciwgbnVsbHB0cikgOgotICAgICAgICAgICAgbUVmZmVjdC0+c2V0Q29uZmlnUmV2ZXJzZShoaWRsQ29uZmlnLCBudWxscHRyLCBudWxscHRyKTsKLSAgICBzdGF0dXNfdCByZXN1bHQgPSBGQUlMRURfVFJBTlNBQ1RJT047Ci0gICAgaWYgKHJldC5pc09rKCkpIHsKLSAgICAgICAgcmVzdWx0ID0gYW5hbHl6ZVJlc3VsdChyZXQpOwotICAgICAgICAqc3RhdGljX2Nhc3Q8aW50MzJfdCo+KHBSZXBseURhdGEpID0gcmVzdWx0OwotICAgIH0KLSAgICByZXR1cm4gcmVzdWx0OwotfQotCi19IC8vIG5hbWVzcGFjZSBhbmRyb2lkCmRpZmYgLS1naXQgYS9tZWRpYS9saWJhdWRpb2hhbC8yLjAvRWZmZWN0SGFsSGlkbC5oIGIvbWVkaWEvbGliYXVkaW9oYWwvMi4wL0VmZmVjdEhhbEhpZGwuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNmZmZGFmMS4uMDAwMDAwMAotLS0gYS9tZWRpYS9saWJhdWRpb2hhbC8yLjAvRWZmZWN0SGFsSGlkbC5oCisrKyAvZGV2L251bGwKQEAgLTEsMTA4ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTYgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAotICoKLSAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwotICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgotICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0gKgotICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLSAqCi0gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCi0gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAotICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCi0gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCi0gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KLSAqLwotCi0jaWZuZGVmIEFORFJPSURfSEFSRFdBUkVfRUZGRUNUX0hBTF9ISURMX0gKLSNkZWZpbmUgQU5EUk9JRF9IQVJEV0FSRV9FRkZFQ1RfSEFMX0hJRExfSAotCi0jaW5jbHVkZSA8YW5kcm9pZC9oYXJkd2FyZS9hdWRpby9lZmZlY3QvMi4wL0lFZmZlY3QuaD4KLSNpbmNsdWRlIDxtZWRpYS9hdWRpb2hhbC9FZmZlY3RIYWxJbnRlcmZhY2UuaD4KLSNpbmNsdWRlIDxmbXEvRXZlbnRGbGFnLmg+Ci0jaW5jbHVkZSA8Zm1xL01lc3NhZ2VRdWV1ZS5oPgotI2luY2x1ZGUgPHN5c3RlbS9hdWRpb19lZmZlY3QuaD4KLQotdXNpbmcgOjphbmRyb2lkOjpoYXJkd2FyZTo6YXVkaW86OmVmZmVjdDo6VjJfMDo6RWZmZWN0QnVmZmVyQ29uZmlnOwotdXNpbmcgOjphbmRyb2lkOjpoYXJkd2FyZTo6YXVkaW86OmVmZmVjdDo6VjJfMDo6RWZmZWN0Q29uZmlnOwotdXNpbmcgOjphbmRyb2lkOjpoYXJkd2FyZTo6YXVkaW86OmVmZmVjdDo6VjJfMDo6RWZmZWN0RGVzY3JpcHRvcjsKLXVzaW5nIDo6YW5kcm9pZDo6aGFyZHdhcmU6OmF1ZGlvOjplZmZlY3Q6OlYyXzA6OklFZmZlY3Q7Ci11c2luZyA6OmFuZHJvaWQ6OmhhcmR3YXJlOjpFdmVudEZsYWc7Ci11c2luZyA6OmFuZHJvaWQ6OmhhcmR3YXJlOjpNZXNzYWdlUXVldWU7Ci0KLW5hbWVzcGFjZSBhbmRyb2lkIHsKLQotY2xhc3MgRWZmZWN0SGFsSGlkbCA6IHB1YmxpYyBFZmZlY3RIYWxJbnRlcmZhY2UKLXsKLSAgcHVibGljOgotICAgIC8vIFNldCB0aGUgaW5wdXQgYnVmZmVyLgotICAgIHZpcnR1YWwgc3RhdHVzX3Qgc2V0SW5CdWZmZXIoY29uc3Qgc3A8RWZmZWN0QnVmZmVySGFsSW50ZXJmYWNlPiYgYnVmZmVyKTsKLQotICAgIC8vIFNldCB0aGUgb3V0cHV0IGJ1ZmZlci4KLSAgICB2aXJ0dWFsIHN0YXR1c190IHNldE91dEJ1ZmZlcihjb25zdCBzcDxFZmZlY3RCdWZmZXJIYWxJbnRlcmZhY2U+JiBidWZmZXIpOwotCi0gICAgLy8gRWZmZWN0IHByb2Nlc3MgZnVuY3Rpb24uCi0gICAgdmlydHVhbCBzdGF0dXNfdCBwcm9jZXNzKCk7Ci0KLSAgICAvLyBQcm9jZXNzIHJldmVyc2Ugc3RyZWFtIGZ1bmN0aW9uLiBUaGlzIGZ1bmN0aW9uIGlzIHVzZWQgdG8gcGFzcwotICAgIC8vIGEgcmVmZXJlbmNlIHN0cmVhbSB0byB0aGUgZWZmZWN0IGVuZ2luZS4KLSAgICB2aXJ0dWFsIHN0YXR1c190IHByb2Nlc3NSZXZlcnNlKCk7Ci0KLSAgICAvLyBTZW5kIGEgY29tbWFuZCBhbmQgcmVjZWl2ZSBhIHJlc3BvbnNlIHRvL2Zyb20gZWZmZWN0IGVuZ2luZS4KLSAgICB2aXJ0dWFsIHN0YXR1c190IGNvbW1hbmQodWludDMyX3QgY21kQ29kZSwgdWludDMyX3QgY21kU2l6ZSwgdm9pZCAqcENtZERhdGEsCi0gICAgICAgICAgICB1aW50MzJfdCAqcmVwbHlTaXplLCB2b2lkICpwUmVwbHlEYXRhKTsKLQotICAgIC8vIFJldHVybnMgdGhlIGVmZmVjdCBkZXNjcmlwdG9yLgotICAgIHZpcnR1YWwgc3RhdHVzX3QgZ2V0RGVzY3JpcHRvcihlZmZlY3RfZGVzY3JpcHRvcl90ICpwRGVzY3JpcHRvcik7Ci0KLSAgICAvLyBGcmVlIHJlc291cmNlcyBvbiB0aGUgcmVtb3RlIHNpZGUuCi0gICAgdmlydHVhbCBzdGF0dXNfdCBjbG9zZSgpOwotCi0gICAgLy8gV2hldGhlciBpdCdzIGEgbG9jYWwgaW1wbGVtZW50YXRpb24uCi0gICAgdmlydHVhbCBib29sIGlzTG9jYWwoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQotCi0gICAgdWludDY0X3QgZWZmZWN0SWQoKSBjb25zdCB7IHJldHVybiBtRWZmZWN0SWQ7IH0KLQotICAgIHN0YXRpYyB2b2lkIGVmZmVjdERlc2NyaXB0b3JUb0hhbCgKLSAgICAgICAgICAgIGNvbnN0IEVmZmVjdERlc2NyaXB0b3ImIGRlc2NyaXB0b3IsIGVmZmVjdF9kZXNjcmlwdG9yX3QqIGhhbERlc2NyaXB0b3IpOwotCi0gIHByaXZhdGU6Ci0gICAgZnJpZW5kIGNsYXNzIEVmZmVjdHNGYWN0b3J5SGFsSGlkbDsKLSAgICB0eXBlZGVmIE1lc3NhZ2VRdWV1ZTwKLSAgICAgICAgaGFyZHdhcmU6OmF1ZGlvOjplZmZlY3Q6OlYyXzA6OlJlc3VsdCwgaGFyZHdhcmU6OmtTeW5jaHJvbml6ZWRSZWFkV3JpdGU+IFN0YXR1c01ROwotCi0gICAgc3A8SUVmZmVjdD4gbUVmZmVjdDsKLSAgICBjb25zdCB1aW50NjRfdCBtRWZmZWN0SWQ7Ci0gICAgc3A8RWZmZWN0QnVmZmVySGFsSW50ZXJmYWNlPiBtSW5CdWZmZXI7Ci0gICAgc3A8RWZmZWN0QnVmZmVySGFsSW50ZXJmYWNlPiBtT3V0QnVmZmVyOwotICAgIGJvb2wgbUJ1ZmZlcnNDaGFuZ2VkOwotICAgIHN0ZDo6dW5pcXVlX3B0cjxTdGF0dXNNUT4gbVN0YXR1c01ROwotICAgIEV2ZW50RmxhZyogbUVmR3JvdXA7Ci0KLSAgICBzdGF0aWMgc3RhdHVzX3QgYW5hbHl6ZVJlc3VsdChjb25zdCBoYXJkd2FyZTo6YXVkaW86OmVmZmVjdDo6VjJfMDo6UmVzdWx0JiByZXN1bHQpOwotICAgIHN0YXRpYyB2b2lkIGVmZmVjdEJ1ZmZlckNvbmZpZ0Zyb21IYWwoCi0gICAgICAgICAgICBjb25zdCBidWZmZXJfY29uZmlnX3QmIGhhbENvbmZpZywgRWZmZWN0QnVmZmVyQ29uZmlnKiBjb25maWcpOwotICAgIHN0YXRpYyB2b2lkIGVmZmVjdEJ1ZmZlckNvbmZpZ1RvSGFsKAotICAgICAgICAgICAgY29uc3QgRWZmZWN0QnVmZmVyQ29uZmlnJiBjb25maWcsIGJ1ZmZlcl9jb25maWdfdCogaGFsQ29uZmlnKTsKLSAgICBzdGF0aWMgdm9pZCBlZmZlY3RDb25maWdGcm9tSGFsKGNvbnN0IGVmZmVjdF9jb25maWdfdCYgaGFsQ29uZmlnLCBFZmZlY3RDb25maWcqIGNvbmZpZyk7Ci0gICAgc3RhdGljIHZvaWQgZWZmZWN0Q29uZmlnVG9IYWwoY29uc3QgRWZmZWN0Q29uZmlnJiBjb25maWcsIGVmZmVjdF9jb25maWdfdCogaGFsQ29uZmlnKTsKLQotICAgIC8vIENhbiBub3QgYmUgY29uc3RydWN0ZWQgZGlyZWN0bHkgYnkgY2xpZW50cy4KLSAgICBFZmZlY3RIYWxIaWRsKGNvbnN0IHNwPElFZmZlY3Q+JiBlZmZlY3QsIHVpbnQ2NF90IGVmZmVjdElkKTsKLQotICAgIC8vIFRoZSBkZXN0cnVjdG9yIGF1dG9tYXRpY2FsbHkgcmVsZWFzZXMgdGhlIGVmZmVjdC4KLSAgICB2aXJ0dWFsIH5FZmZlY3RIYWxIaWRsKCk7Ci0KLSAgICBzdGF0dXNfdCBnZXRDb25maWdJbXBsKHVpbnQzMl90IGNtZENvZGUsIHVpbnQzMl90ICpyZXBseVNpemUsIHZvaWQgKnBSZXBseURhdGEpOwotICAgIHN0YXR1c190IHByZXBhcmVGb3JQcm9jZXNzaW5nKCk7Ci0gICAgYm9vbCBuZWVkVG9SZXNldEJ1ZmZlcnMoKTsKLSAgICBzdGF0dXNfdCBwcm9jZXNzSW1wbCh1aW50MzJfdCBtcUZsYWcpOwotICAgIHN0YXR1c190IHNldENvbmZpZ0ltcGwoCi0gICAgICAgICAgICB1aW50MzJfdCBjbWRDb2RlLCB1aW50MzJfdCBjbWRTaXplLCB2b2lkICpwQ21kRGF0YSwKLSAgICAgICAgICAgIHVpbnQzMl90ICpyZXBseVNpemUsIHZvaWQgKnBSZXBseURhdGEpOwotICAgIHN0YXR1c190IHNldFByb2Nlc3NCdWZmZXJzKCk7Ci19OwotCi19IC8vIG5hbWVzcGFjZSBhbmRyb2lkCi0KLSNlbmRpZiAvLyBBTkRST0lEX0hBUkRXQVJFX0VGRkVDVF9IQUxfSElETF9ICmRpZmYgLS1naXQgYS9tZWRpYS9saWJhdWRpb2hhbC8yLjAvRWZmZWN0c0ZhY3RvcnlIYWxIaWRsLmNwcCBiL21lZGlhL2xpYmF1ZGlvaGFsLzIuMC9FZmZlY3RzRmFjdG9yeUhhbEhpZGwuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwZDQwZTZkLi4wMDAwMDAwCi0tLSBhL21lZGlhL2xpYmF1ZGlvaGFsLzIuMC9FZmZlY3RzRmFjdG9yeUhhbEhpZGwuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsMTUwICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTYgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAotICoKLSAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwotICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgotICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0gKgotICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLSAqCi0gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCi0gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAotICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCi0gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCi0gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KLSAqLwotCi0jZGVmaW5lIExPR19UQUcgIkVmZmVjdHNGYWN0b3J5SGFsSGlkbCIKLS8vI2RlZmluZSBMT0dfTkRFQlVHIDAKLQotI2luY2x1ZGUgPGN1dGlscy9uYXRpdmVfaGFuZGxlLmg+Ci0KLSNpbmNsdWRlICJDb252ZXJzaW9uSGVscGVySGlkbC5oIgotI2luY2x1ZGUgIkVmZmVjdEJ1ZmZlckhhbEhpZGwuaCIKLSNpbmNsdWRlICJFZmZlY3RIYWxIaWRsLmgiCi0jaW5jbHVkZSAiRWZmZWN0c0ZhY3RvcnlIYWxIaWRsLmgiCi0jaW5jbHVkZSAiSGlkbFV0aWxzLmgiCi0KLXVzaW5nIDo6YW5kcm9pZDo6aGFyZHdhcmU6OmF1ZGlvOjpjb21tb246OlYyXzA6OkhpZGxVdGlsczsKLXVzaW5nIDo6YW5kcm9pZDo6aGFyZHdhcmU6OmF1ZGlvOjpjb21tb246OlYyXzA6OlV1aWQ7Ci11c2luZyA6OmFuZHJvaWQ6OmhhcmR3YXJlOjphdWRpbzo6ZWZmZWN0OjpWMl8wOjpJRWZmZWN0OwotdXNpbmcgOjphbmRyb2lkOjpoYXJkd2FyZTo6YXVkaW86OmVmZmVjdDo6VjJfMDo6UmVzdWx0OwotdXNpbmcgOjphbmRyb2lkOjpoYXJkd2FyZTo6UmV0dXJuOwotCi1uYW1lc3BhY2UgYW5kcm9pZCB7Ci0KLUVmZmVjdHNGYWN0b3J5SGFsSGlkbDo6RWZmZWN0c0ZhY3RvcnlIYWxIaWRsKCkgOiBDb252ZXJzaW9uSGVscGVySGlkbCgiRWZmZWN0c0ZhY3RvcnkiKSB7Ci0gICAgbUVmZmVjdHNGYWN0b3J5ID0gSUVmZmVjdHNGYWN0b3J5OjpnZXRTZXJ2aWNlKCk7Ci0gICAgaWYgKG1FZmZlY3RzRmFjdG9yeSA9PSAwKSB7Ci0gICAgICAgIEFMT0dFKCJGYWlsZWQgdG8gb2J0YWluIElFZmZlY3RzRmFjdG9yeSBzZXJ2aWNlLCB0ZXJtaW5hdGluZyBwcm9jZXNzLiIpOwotICAgICAgICBleGl0KDEpOwotICAgIH0KLX0KLQotRWZmZWN0c0ZhY3RvcnlIYWxIaWRsOjp+RWZmZWN0c0ZhY3RvcnlIYWxIaWRsKCkgewotfQotCi1zdGF0dXNfdCBFZmZlY3RzRmFjdG9yeUhhbEhpZGw6OnF1ZXJ5QWxsRGVzY3JpcHRvcnMoKSB7Ci0gICAgaWYgKG1FZmZlY3RzRmFjdG9yeSA9PSAwKSByZXR1cm4gTk9fSU5JVDsKLSAgICBSZXN1bHQgcmV0dmFsID0gUmVzdWx0OjpOT1RfSU5JVElBTElaRUQ7Ci0gICAgUmV0dXJuPHZvaWQ+IHJldCA9IG1FZmZlY3RzRmFjdG9yeS0+Z2V0QWxsRGVzY3JpcHRvcnMoCi0gICAgICAgICAgICBbJl0oUmVzdWx0IHIsIGNvbnN0IGhpZGxfdmVjPEVmZmVjdERlc2NyaXB0b3I+JiByZXN1bHQpIHsKLSAgICAgICAgICAgICAgICByZXR2YWwgPSByOwotICAgICAgICAgICAgICAgIGlmIChyZXR2YWwgPT0gUmVzdWx0OjpPSykgewotICAgICAgICAgICAgICAgICAgICBtTGFzdERlc2NyaXB0b3JzID0gcmVzdWx0OwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0pOwotICAgIGlmIChyZXQuaXNPaygpKSB7Ci0gICAgICAgIHJldHVybiByZXR2YWwgPT0gUmVzdWx0OjpPSyA/IE9LIDogTk9fSU5JVDsKLSAgICB9Ci0gICAgbUxhc3REZXNjcmlwdG9ycy5yZXNpemUoMCk7Ci0gICAgcmV0dXJuIHByb2Nlc3NSZXR1cm4oX19GVU5DVElPTl9fLCByZXQpOwotfQotCi1zdGF0dXNfdCBFZmZlY3RzRmFjdG9yeUhhbEhpZGw6OnF1ZXJ5TnVtYmVyRWZmZWN0cyh1aW50MzJfdCAqcE51bUVmZmVjdHMpIHsKLSAgICBzdGF0dXNfdCBxdWVyeVJlc3VsdCA9IHF1ZXJ5QWxsRGVzY3JpcHRvcnMoKTsKLSAgICBpZiAocXVlcnlSZXN1bHQgPT0gT0spIHsKLSAgICAgICAgKnBOdW1FZmZlY3RzID0gbUxhc3REZXNjcmlwdG9ycy5zaXplKCk7Ci0gICAgfQotICAgIHJldHVybiBxdWVyeVJlc3VsdDsKLX0KLQotc3RhdHVzX3QgRWZmZWN0c0ZhY3RvcnlIYWxIaWRsOjpnZXREZXNjcmlwdG9yKAotICAgICAgICB1aW50MzJfdCBpbmRleCwgZWZmZWN0X2Rlc2NyaXB0b3JfdCAqcERlc2NyaXB0b3IpIHsKLSAgICAvLyBUT0RPOiBXZSBuZWVkIHNvbWVob3cgdG8gdHJhY2sgdGhlIGNoYW5nZXMgb24gdGhlIHNlcnZlciBzaWRlCi0gICAgLy8gb3IgZmlndXJlIG91dCBob3cgdG8gY29udmVydCBldmVyeWJvZHkgdG8gcXVlcnkgYWxsIHRoZSBkZXNjcmlwdG9ycyBhdCBvbmNlLgotICAgIC8vIFRPRE86IGNoZWNrIGZvciBudWxscHRyCi0gICAgaWYgKG1MYXN0RGVzY3JpcHRvcnMuc2l6ZSgpID09IDApIHsKLSAgICAgICAgc3RhdHVzX3QgcXVlcnlSZXN1bHQgPSBxdWVyeUFsbERlc2NyaXB0b3JzKCk7Ci0gICAgICAgIGlmIChxdWVyeVJlc3VsdCAhPSBPSykgcmV0dXJuIHF1ZXJ5UmVzdWx0OwotICAgIH0KLSAgICBpZiAoaW5kZXggPj0gbUxhc3REZXNjcmlwdG9ycy5zaXplKCkpIHJldHVybiBOQU1FX05PVF9GT1VORDsKLSAgICBFZmZlY3RIYWxIaWRsOjplZmZlY3REZXNjcmlwdG9yVG9IYWwobUxhc3REZXNjcmlwdG9yc1tpbmRleF0sIHBEZXNjcmlwdG9yKTsKLSAgICByZXR1cm4gT0s7Ci19Ci0KLXN0YXR1c190IEVmZmVjdHNGYWN0b3J5SGFsSGlkbDo6Z2V0RGVzY3JpcHRvcigKLSAgICAgICAgY29uc3QgZWZmZWN0X3V1aWRfdCAqcEVmZmVjdFV1aWQsIGVmZmVjdF9kZXNjcmlwdG9yX3QgKnBEZXNjcmlwdG9yKSB7Ci0gICAgLy8gVE9ETzogY2hlY2sgZm9yIG51bGxwdHIKLSAgICBpZiAobUVmZmVjdHNGYWN0b3J5ID09IDApIHJldHVybiBOT19JTklUOwotICAgIFV1aWQgaGlkbFV1aWQ7Ci0gICAgSGlkbFV0aWxzOjp1dWlkRnJvbUhhbCgqcEVmZmVjdFV1aWQsICZoaWRsVXVpZCk7Ci0gICAgUmVzdWx0IHJldHZhbCA9IFJlc3VsdDo6Tk9UX0lOSVRJQUxJWkVEOwotICAgIFJldHVybjx2b2lkPiByZXQgPSBtRWZmZWN0c0ZhY3RvcnktPmdldERlc2NyaXB0b3IoaGlkbFV1aWQsCi0gICAgICAgICAgICBbJl0oUmVzdWx0IHIsIGNvbnN0IEVmZmVjdERlc2NyaXB0b3ImIHJlc3VsdCkgewotICAgICAgICAgICAgICAgIHJldHZhbCA9IHI7Ci0gICAgICAgICAgICAgICAgaWYgKHJldHZhbCA9PSBSZXN1bHQ6Ok9LKSB7Ci0gICAgICAgICAgICAgICAgICAgIEVmZmVjdEhhbEhpZGw6OmVmZmVjdERlc2NyaXB0b3JUb0hhbChyZXN1bHQsIHBEZXNjcmlwdG9yKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9KTsKLSAgICBpZiAocmV0LmlzT2soKSkgewotICAgICAgICBpZiAocmV0dmFsID09IFJlc3VsdDo6T0spIHJldHVybiBPSzsKLSAgICAgICAgZWxzZSBpZiAocmV0dmFsID09IFJlc3VsdDo6SU5WQUxJRF9BUkdVTUVOVFMpIHJldHVybiBOQU1FX05PVF9GT1VORDsKLSAgICAgICAgZWxzZSByZXR1cm4gTk9fSU5JVDsKLSAgICB9Ci0gICAgcmV0dXJuIHByb2Nlc3NSZXR1cm4oX19GVU5DVElPTl9fLCByZXQpOwotfQotCi1zdGF0dXNfdCBFZmZlY3RzRmFjdG9yeUhhbEhpZGw6OmNyZWF0ZUVmZmVjdCgKLSAgICAgICAgY29uc3QgZWZmZWN0X3V1aWRfdCAqcEVmZmVjdFV1aWQsIGludDMyX3Qgc2Vzc2lvbklkLCBpbnQzMl90IGlvSWQsCi0gICAgICAgIHNwPEVmZmVjdEhhbEludGVyZmFjZT4gKmVmZmVjdCkgewotICAgIGlmIChtRWZmZWN0c0ZhY3RvcnkgPT0gMCkgcmV0dXJuIE5PX0lOSVQ7Ci0gICAgVXVpZCBoaWRsVXVpZDsKLSAgICBIaWRsVXRpbHM6OnV1aWRGcm9tSGFsKCpwRWZmZWN0VXVpZCwgJmhpZGxVdWlkKTsKLSAgICBSZXN1bHQgcmV0dmFsID0gUmVzdWx0OjpOT1RfSU5JVElBTElaRUQ7Ci0gICAgUmV0dXJuPHZvaWQ+IHJldCA9IG1FZmZlY3RzRmFjdG9yeS0+Y3JlYXRlRWZmZWN0KAotICAgICAgICAgICAgaGlkbFV1aWQsIHNlc3Npb25JZCwgaW9JZCwKLSAgICAgICAgICAgIFsmXShSZXN1bHQgciwgY29uc3Qgc3A8SUVmZmVjdD4mIHJlc3VsdCwgdWludDY0X3QgZWZmZWN0SWQpIHsKLSAgICAgICAgICAgICAgICByZXR2YWwgPSByOwotICAgICAgICAgICAgICAgIGlmIChyZXR2YWwgPT0gUmVzdWx0OjpPSykgewotICAgICAgICAgICAgICAgICAgICAqZWZmZWN0ID0gbmV3IEVmZmVjdEhhbEhpZGwocmVzdWx0LCBlZmZlY3RJZCk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfSk7Ci0gICAgaWYgKHJldC5pc09rKCkpIHsKLSAgICAgICAgaWYgKHJldHZhbCA9PSBSZXN1bHQ6Ok9LKSByZXR1cm4gT0s7Ci0gICAgICAgIGVsc2UgaWYgKHJldHZhbCA9PSBSZXN1bHQ6OklOVkFMSURfQVJHVU1FTlRTKSByZXR1cm4gTkFNRV9OT1RfRk9VTkQ7Ci0gICAgICAgIGVsc2UgcmV0dXJuIE5PX0lOSVQ7Ci0gICAgfQotICAgIHJldHVybiBwcm9jZXNzUmV0dXJuKF9fRlVOQ1RJT05fXywgcmV0KTsKLX0KLQotc3RhdHVzX3QgRWZmZWN0c0ZhY3RvcnlIYWxIaWRsOjpkdW1wRWZmZWN0cyhpbnQgZmQpIHsKLSAgICBpZiAobUVmZmVjdHNGYWN0b3J5ID09IDApIHJldHVybiBOT19JTklUOwotICAgIG5hdGl2ZV9oYW5kbGVfdCogaGlkbEhhbmRsZSA9IG5hdGl2ZV9oYW5kbGVfY3JlYXRlKDEsIDApOwotICAgIGhpZGxIYW5kbGUtPmRhdGFbMF0gPSBmZDsKLSAgICBSZXR1cm48dm9pZD4gcmV0ID0gbUVmZmVjdHNGYWN0b3J5LT5kZWJ1Z0R1bXAoaGlkbEhhbmRsZSk7Ci0gICAgbmF0aXZlX2hhbmRsZV9kZWxldGUoaGlkbEhhbmRsZSk7Ci0gICAgcmV0dXJuIHByb2Nlc3NSZXR1cm4oX19GVU5DVElPTl9fLCByZXQpOwotfQotCi1zdGF0dXNfdCBFZmZlY3RzRmFjdG9yeUhhbEhpZGw6OmFsbG9jYXRlQnVmZmVyKHNpemVfdCBzaXplLCBzcDxFZmZlY3RCdWZmZXJIYWxJbnRlcmZhY2U+KiBidWZmZXIpIHsKLSAgICByZXR1cm4gRWZmZWN0QnVmZmVySGFsSGlkbDo6YWxsb2NhdGUoc2l6ZSwgYnVmZmVyKTsKLX0KLQotc3RhdHVzX3QgRWZmZWN0c0ZhY3RvcnlIYWxIaWRsOjptaXJyb3JCdWZmZXIodm9pZCogZXh0ZXJuYWwsIHNpemVfdCBzaXplLAotICAgICAgICAgICAgICAgICAgICAgICAgICBzcDxFZmZlY3RCdWZmZXJIYWxJbnRlcmZhY2U+KiBidWZmZXIpIHsKLSAgICByZXR1cm4gRWZmZWN0QnVmZmVySGFsSGlkbDo6bWlycm9yKGV4dGVybmFsLCBzaXplLCBidWZmZXIpOwotfQotCi0KLX0gLy8gbmFtZXNwYWNlIGFuZHJvaWQKZGlmZiAtLWdpdCBhL21lZGlhL2xpYmF1ZGlvaGFsLzIuMC9FZmZlY3RzRmFjdG9yeUhhbEhpZGwuaCBiL21lZGlhL2xpYmF1ZGlvaGFsLzIuMC9FZmZlY3RzRmFjdG9yeUhhbEhpZGwuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODJiNTQ4MS4uMDAwMDAwMAotLS0gYS9tZWRpYS9saWJhdWRpb2hhbC8yLjAvRWZmZWN0c0ZhY3RvcnlIYWxIaWRsLmgKKysrIC9kZXYvbnVsbApAQCAtMSw3MyArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDE2IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKLSAqCi0gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKLSAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KLSAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotICoKLSAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0gKgotICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQotICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKLSAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgotICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAotICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCi0gKi8KLQotI2lmbmRlZiBBTkRST0lEX0hBUkRXQVJFX0VGRkVDVFNfRkFDVE9SWV9IQUxfSElETF9ICi0jZGVmaW5lIEFORFJPSURfSEFSRFdBUkVfRUZGRUNUU19GQUNUT1JZX0hBTF9ISURMX0gKLQotI2luY2x1ZGUgPGFuZHJvaWQvaGFyZHdhcmUvYXVkaW8vZWZmZWN0LzIuMC9JRWZmZWN0c0ZhY3RvcnkuaD4KLSNpbmNsdWRlIDxhbmRyb2lkL2hhcmR3YXJlL2F1ZGlvL2VmZmVjdC8yLjAvdHlwZXMuaD4KLSNpbmNsdWRlIDxtZWRpYS9hdWRpb2hhbC9FZmZlY3RzRmFjdG9yeUhhbEludGVyZmFjZS5oPgotCi0jaW5jbHVkZSAiQ29udmVyc2lvbkhlbHBlckhpZGwuaCIKLQotbmFtZXNwYWNlIGFuZHJvaWQgewotCi11c2luZyA6OmFuZHJvaWQ6OmhhcmR3YXJlOjphdWRpbzo6ZWZmZWN0OjpWMl8wOjpFZmZlY3REZXNjcmlwdG9yOwotdXNpbmcgOjphbmRyb2lkOjpoYXJkd2FyZTo6YXVkaW86OmVmZmVjdDo6VjJfMDo6SUVmZmVjdHNGYWN0b3J5OwotdXNpbmcgOjphbmRyb2lkOjpoYXJkd2FyZTo6aGlkbF92ZWM7Ci0KLWNsYXNzIEVmZmVjdHNGYWN0b3J5SGFsSGlkbCA6IHB1YmxpYyBFZmZlY3RzRmFjdG9yeUhhbEludGVyZmFjZSwgcHVibGljIENvbnZlcnNpb25IZWxwZXJIaWRsCi17Ci0gIHB1YmxpYzoKLSAgICAvLyBSZXR1cm5zIHRoZSBudW1iZXIgb2YgZGlmZmVyZW50IGVmZmVjdHMgaW4gYWxsIGxvYWRlZCBsaWJyYXJpZXMuCi0gICAgdmlydHVhbCBzdGF0dXNfdCBxdWVyeU51bWJlckVmZmVjdHModWludDMyX3QgKnBOdW1FZmZlY3RzKTsKLQotICAgIC8vIFJldHVybnMgYSBkZXNjcmlwdG9yIG9mIHRoZSBuZXh0IGF2YWlsYWJsZSBlZmZlY3QuCi0gICAgdmlydHVhbCBzdGF0dXNfdCBnZXREZXNjcmlwdG9yKHVpbnQzMl90IGluZGV4LAotICAgICAgICAgICAgZWZmZWN0X2Rlc2NyaXB0b3JfdCAqcERlc2NyaXB0b3IpOwotCi0gICAgdmlydHVhbCBzdGF0dXNfdCBnZXREZXNjcmlwdG9yKGNvbnN0IGVmZmVjdF91dWlkX3QgKnBFZmZlY3RVdWlkLAotICAgICAgICAgICAgZWZmZWN0X2Rlc2NyaXB0b3JfdCAqcERlc2NyaXB0b3IpOwotCi0gICAgLy8gQ3JlYXRlcyBhbiBlZmZlY3QgZW5naW5lIG9mIHRoZSBzcGVjaWZpZWQgdHlwZS4KLSAgICAvLyBUbyByZWxlYXNlIHRoZSBlZmZlY3QgZW5naW5lLCBpdCBpcyBuZWNlc3NhcnkgdG8gcmVsZWFzZSByZWZlcmVuY2VzCi0gICAgLy8gdG8gdGhlIHJldHVybmVkIGVmZmVjdCBvYmplY3QuCi0gICAgdmlydHVhbCBzdGF0dXNfdCBjcmVhdGVFZmZlY3QoY29uc3QgZWZmZWN0X3V1aWRfdCAqcEVmZmVjdFV1aWQsCi0gICAgICAgICAgICBpbnQzMl90IHNlc3Npb25JZCwgaW50MzJfdCBpb0lkLAotICAgICAgICAgICAgc3A8RWZmZWN0SGFsSW50ZXJmYWNlPiAqZWZmZWN0KTsKLQotICAgIHZpcnR1YWwgc3RhdHVzX3QgZHVtcEVmZmVjdHMoaW50IGZkKTsKLQotICAgIHN0YXR1c190IGFsbG9jYXRlQnVmZmVyKHNpemVfdCBzaXplLCBzcDxFZmZlY3RCdWZmZXJIYWxJbnRlcmZhY2U+KiBidWZmZXIpIG92ZXJyaWRlOwotICAgIHN0YXR1c190IG1pcnJvckJ1ZmZlcih2b2lkKiBleHRlcm5hbCwgc2l6ZV90IHNpemUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgIHNwPEVmZmVjdEJ1ZmZlckhhbEludGVyZmFjZT4qIGJ1ZmZlcikgb3ZlcnJpZGU7Ci0KLSAgcHJpdmF0ZToKLSAgICBmcmllbmQgY2xhc3MgRWZmZWN0c0ZhY3RvcnlIYWxJbnRlcmZhY2U7Ci0KLSAgICBzcDxJRWZmZWN0c0ZhY3Rvcnk+IG1FZmZlY3RzRmFjdG9yeTsKLSAgICBoaWRsX3ZlYzxFZmZlY3REZXNjcmlwdG9yPiBtTGFzdERlc2NyaXB0b3JzOwotCi0gICAgLy8gQ2FuIG5vdCBiZSBjb25zdHJ1Y3RlZCBkaXJlY3RseSBieSBjbGllbnRzLgotICAgIEVmZmVjdHNGYWN0b3J5SGFsSGlkbCgpOwotICAgIHZpcnR1YWwgfkVmZmVjdHNGYWN0b3J5SGFsSGlkbCgpOwotCi0gICAgc3RhdHVzX3QgcXVlcnlBbGxEZXNjcmlwdG9ycygpOwotfTsKLQotfSAvLyBuYW1lc3BhY2UgYW5kcm9pZAotCi0jZW5kaWYgLy8gQU5EUk9JRF9IQVJEV0FSRV9FRkZFQ1RTX0ZBQ1RPUllfSEFMX0hJRExfSApkaWZmIC0tZ2l0IGEvbWVkaWEvbGliYXVkaW9oYWwvMi4wL1N0cmVhbUhhbEhpZGwuY3BwIGIvbWVkaWEvbGliYXVkaW9oYWwvMi4wL1N0cmVhbUhhbEhpZGwuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyMmNiZDQ1Li4wMDAwMDAwCi0tLSBhL21lZGlhL2xpYmF1ZGlvaGFsLzIuMC9TdHJlYW1IYWxIaWRsLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDc3NSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDE2IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKLSAqCi0gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKLSAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KLSAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotICoKLSAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0gKgotICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQotICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKLSAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgotICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAotICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCi0gKi8KLQotI2RlZmluZSBMT0dfVEFHICJTdHJlYW1IYWxIaWRsIgotLy8jZGVmaW5lIExPR19OREVCVUcgMAotCi0jaW5jbHVkZSA8YW5kcm9pZC9oYXJkd2FyZS9hdWRpby8yLjAvSVN0cmVhbU91dENhbGxiYWNrLmg+Ci0jaW5jbHVkZSA8aHdiaW5kZXIvSVBDVGhyZWFkU3RhdGUuaD4KLSNpbmNsdWRlIDxtZWRpYXV0aWxzL1NjaGVkdWxpbmdQb2xpY3lTZXJ2aWNlLmg+Ci0jaW5jbHVkZSA8dXRpbHMvTG9nLmg+Ci0KLSNpbmNsdWRlICJEZXZpY2VIYWxIaWRsLmgiCi0jaW5jbHVkZSAiRWZmZWN0SGFsSGlkbC5oIgotI2luY2x1ZGUgIlN0cmVhbUhhbEhpZGwuaCIKLQotdXNpbmcgOjphbmRyb2lkOjpoYXJkd2FyZTo6YXVkaW86OmNvbW1vbjo6VjJfMDo6QXVkaW9DaGFubmVsTWFzazsKLXVzaW5nIDo6YW5kcm9pZDo6aGFyZHdhcmU6OmF1ZGlvOjpjb21tb246OlYyXzA6OkF1ZGlvRm9ybWF0OwotdXNpbmcgOjphbmRyb2lkOjpoYXJkd2FyZTo6YXVkaW86OmNvbW1vbjo6VjJfMDo6VGhyZWFkSW5mbzsKLXVzaW5nIDo6YW5kcm9pZDo6aGFyZHdhcmU6OmF1ZGlvOjpWMl8wOjpBdWRpb0RyYWluOwotdXNpbmcgOjphbmRyb2lkOjpoYXJkd2FyZTo6YXVkaW86OlYyXzA6OklTdHJlYW1PdXRDYWxsYmFjazsKLXVzaW5nIDo6YW5kcm9pZDo6aGFyZHdhcmU6OmF1ZGlvOjpWMl8wOjpNZXNzYWdlUXVldWVGbGFnQml0czsKLXVzaW5nIDo6YW5kcm9pZDo6aGFyZHdhcmU6OmF1ZGlvOjpWMl8wOjpNbWFwQnVmZmVySW5mbzsKLXVzaW5nIDo6YW5kcm9pZDo6aGFyZHdhcmU6OmF1ZGlvOjpWMl8wOjpNbWFwUG9zaXRpb247Ci11c2luZyA6OmFuZHJvaWQ6OmhhcmR3YXJlOjphdWRpbzo6VjJfMDo6UGFyYW1ldGVyVmFsdWU7Ci11c2luZyA6OmFuZHJvaWQ6OmhhcmR3YXJlOjphdWRpbzo6VjJfMDo6UmVzdWx0OwotdXNpbmcgOjphbmRyb2lkOjpoYXJkd2FyZTo6YXVkaW86OlYyXzA6OlRpbWVTcGVjOwotdXNpbmcgOjphbmRyb2lkOjpoYXJkd2FyZTo6TVFEZXNjcmlwdG9yU3luYzsKLXVzaW5nIDo6YW5kcm9pZDo6aGFyZHdhcmU6OlJldHVybjsKLXVzaW5nIDo6YW5kcm9pZDo6aGFyZHdhcmU6OlZvaWQ7Ci11c2luZyBSZWFkQ29tbWFuZCA9IDo6YW5kcm9pZDo6aGFyZHdhcmU6OmF1ZGlvOjpWMl8wOjpJU3RyZWFtSW46OlJlYWRDb21tYW5kOwotCi1uYW1lc3BhY2UgYW5kcm9pZCB7Ci0KLVN0cmVhbUhhbEhpZGw6OlN0cmVhbUhhbEhpZGwoSVN0cmVhbSAqc3RyZWFtKQotICAgICAgICA6IENvbnZlcnNpb25IZWxwZXJIaWRsKCJTdHJlYW0iKSwKLSAgICAgICAgICBtU3RyZWFtKHN0cmVhbSksCi0gICAgICAgICAgbUhhbFRocmVhZFByaW9yaXR5KEhBTF9USFJFQURfUFJJT1JJVFlfREVGQVVMVCksCi0gICAgICAgICAgbUNhY2hlZEJ1ZmZlclNpemUoMCl7Ci0KLSAgICAvLyBJbnN0cnVtZW50IGF1ZGlvIHNpZ25hbCBwb3dlciBsb2dnaW5nLgotICAgIC8vIE5vdGU6IFRoaXMgYXNzdW1lcyBjaGFubmVsIG1hc2ssIGZvcm1hdCwgYW5kIHNhbXBsZSByYXRlIGRvIG5vdCBjaGFuZ2UgYWZ0ZXIgY3JlYXRpb24uCi0gICAgaWYgKG1TdHJlYW0gIT0gbnVsbHB0ciAmJiBtU3RyZWFtUG93ZXJMb2cuaXNVc2VyRGVidWdPckVuZ0J1aWxkKCkpIHsKLSAgICAgICAgLy8gT2J0YWluIGF1ZGlvIHByb3BlcnRpZXMgKHNlZSBTdHJlYW1IYWxIaWRsOjpnZXRBdWRpb1Byb3BlcnRpZXMoKSBiZWxvdykuCi0gICAgICAgIFJldHVybjx2b2lkPiByZXQgPSBtU3RyZWFtLT5nZXRBdWRpb1Byb3BlcnRpZXMoCi0gICAgICAgICAgICAgICAgWyZdKHVpbnQzMl90IHNyLCBBdWRpb0NoYW5uZWxNYXNrIG0sIEF1ZGlvRm9ybWF0IGYpIHsKLSAgICAgICAgICAgICAgICBtU3RyZWFtUG93ZXJMb2cuaW5pdChzciwKLSAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRpY19jYXN0PGF1ZGlvX2NoYW5uZWxfbWFza190PihtKSwKLSAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRpY19jYXN0PGF1ZGlvX2Zvcm1hdF90PihmKSk7Ci0gICAgICAgICAgICB9KTsKLSAgICB9Ci19Ci0KLVN0cmVhbUhhbEhpZGw6On5TdHJlYW1IYWxIaWRsKCkgewotICAgIG1TdHJlYW0gPSBudWxscHRyOwotfQotCi1zdGF0dXNfdCBTdHJlYW1IYWxIaWRsOjpnZXRTYW1wbGVSYXRlKHVpbnQzMl90ICpyYXRlKSB7Ci0gICAgaWYgKCFtU3RyZWFtKSByZXR1cm4gTk9fSU5JVDsKLSAgICByZXR1cm4gcHJvY2Vzc1JldHVybigiZ2V0U2FtcGxlUmF0ZSIsIG1TdHJlYW0tPmdldFNhbXBsZVJhdGUoKSwgcmF0ZSk7Ci19Ci0KLXN0YXR1c190IFN0cmVhbUhhbEhpZGw6OmdldEJ1ZmZlclNpemUoc2l6ZV90ICpzaXplKSB7Ci0gICAgaWYgKCFtU3RyZWFtKSByZXR1cm4gTk9fSU5JVDsKLSAgICBzdGF0dXNfdCBzdGF0dXMgPSBwcm9jZXNzUmV0dXJuKCJnZXRCdWZmZXJTaXplIiwgbVN0cmVhbS0+Z2V0QnVmZmVyU2l6ZSgpLCBzaXplKTsKLSAgICBpZiAoc3RhdHVzID09IE9LKSB7Ci0gICAgICAgIG1DYWNoZWRCdWZmZXJTaXplID0gKnNpemU7Ci0gICAgfQotICAgIHJldHVybiBzdGF0dXM7Ci19Ci0KLXN0YXR1c190IFN0cmVhbUhhbEhpZGw6OmdldENoYW5uZWxNYXNrKGF1ZGlvX2NoYW5uZWxfbWFza190ICptYXNrKSB7Ci0gICAgaWYgKCFtU3RyZWFtKSByZXR1cm4gTk9fSU5JVDsKLSAgICByZXR1cm4gcHJvY2Vzc1JldHVybigiZ2V0Q2hhbm5lbE1hc2siLCBtU3RyZWFtLT5nZXRDaGFubmVsTWFzaygpLCBtYXNrKTsKLX0KLQotc3RhdHVzX3QgU3RyZWFtSGFsSGlkbDo6Z2V0Rm9ybWF0KGF1ZGlvX2Zvcm1hdF90ICpmb3JtYXQpIHsKLSAgICBpZiAoIW1TdHJlYW0pIHJldHVybiBOT19JTklUOwotICAgIHJldHVybiBwcm9jZXNzUmV0dXJuKCJnZXRGb3JtYXQiLCBtU3RyZWFtLT5nZXRGb3JtYXQoKSwgZm9ybWF0KTsKLX0KLQotc3RhdHVzX3QgU3RyZWFtSGFsSGlkbDo6Z2V0QXVkaW9Qcm9wZXJ0aWVzKAotICAgICAgICB1aW50MzJfdCAqc2FtcGxlUmF0ZSwgYXVkaW9fY2hhbm5lbF9tYXNrX3QgKm1hc2ssIGF1ZGlvX2Zvcm1hdF90ICpmb3JtYXQpIHsKLSAgICBpZiAoIW1TdHJlYW0pIHJldHVybiBOT19JTklUOwotICAgIFJldHVybjx2b2lkPiByZXQgPSBtU3RyZWFtLT5nZXRBdWRpb1Byb3BlcnRpZXMoCi0gICAgICAgICAgICBbJl0odWludDMyX3Qgc3IsIEF1ZGlvQ2hhbm5lbE1hc2sgbSwgQXVkaW9Gb3JtYXQgZikgewotICAgICAgICAgICAgICAgICpzYW1wbGVSYXRlID0gc3I7Ci0gICAgICAgICAgICAgICAgKm1hc2sgPSBzdGF0aWNfY2FzdDxhdWRpb19jaGFubmVsX21hc2tfdD4obSk7Ci0gICAgICAgICAgICAgICAgKmZvcm1hdCA9IHN0YXRpY19jYXN0PGF1ZGlvX2Zvcm1hdF90PihmKTsKLSAgICAgICAgICAgIH0pOwotICAgIHJldHVybiBwcm9jZXNzUmV0dXJuKCJnZXRBdWRpb1Byb3BlcnRpZXMiLCByZXQpOwotfQotCi1zdGF0dXNfdCBTdHJlYW1IYWxIaWRsOjpzZXRQYXJhbWV0ZXJzKGNvbnN0IFN0cmluZzgmIGt2UGFpcnMpIHsKLSAgICBpZiAoIW1TdHJlYW0pIHJldHVybiBOT19JTklUOwotICAgIGhpZGxfdmVjPFBhcmFtZXRlclZhbHVlPiBoaWRsUGFyYW1zOwotICAgIHN0YXR1c190IHN0YXR1cyA9IHBhcmFtZXRlcnNGcm9tSGFsKGt2UGFpcnMsICZoaWRsUGFyYW1zKTsKLSAgICBpZiAoc3RhdHVzICE9IE9LKSByZXR1cm4gc3RhdHVzOwotICAgIHJldHVybiBwcm9jZXNzUmV0dXJuKCJzZXRQYXJhbWV0ZXJzIiwgbVN0cmVhbS0+c2V0UGFyYW1ldGVycyhoaWRsUGFyYW1zKSk7Ci19Ci0KLXN0YXR1c190IFN0cmVhbUhhbEhpZGw6OmdldFBhcmFtZXRlcnMoY29uc3QgU3RyaW5nOCYga2V5cywgU3RyaW5nOCAqdmFsdWVzKSB7Ci0gICAgdmFsdWVzLT5jbGVhcigpOwotICAgIGlmICghbVN0cmVhbSkgcmV0dXJuIE5PX0lOSVQ7Ci0gICAgaGlkbF92ZWM8aGlkbF9zdHJpbmc+IGhpZGxLZXlzOwotICAgIHN0YXR1c190IHN0YXR1cyA9IGtleXNGcm9tSGFsKGtleXMsICZoaWRsS2V5cyk7Ci0gICAgaWYgKHN0YXR1cyAhPSBPSykgcmV0dXJuIHN0YXR1czsKLSAgICBSZXN1bHQgcmV0dmFsOwotICAgIFJldHVybjx2b2lkPiByZXQgPSBtU3RyZWFtLT5nZXRQYXJhbWV0ZXJzKAotICAgICAgICAgICAgaGlkbEtleXMsCi0gICAgICAgICAgICBbJl0oUmVzdWx0IHIsIGNvbnN0IGhpZGxfdmVjPFBhcmFtZXRlclZhbHVlPiYgcGFyYW1ldGVycykgewotICAgICAgICAgICAgICAgIHJldHZhbCA9IHI7Ci0gICAgICAgICAgICAgICAgaWYgKHJldHZhbCA9PSBSZXN1bHQ6Ok9LKSB7Ci0gICAgICAgICAgICAgICAgICAgIHBhcmFtZXRlcnNUb0hhbChwYXJhbWV0ZXJzLCB2YWx1ZXMpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0pOwotICAgIHJldHVybiBwcm9jZXNzUmV0dXJuKCJnZXRQYXJhbWV0ZXJzIiwgcmV0LCByZXR2YWwpOwotfQotCi1zdGF0dXNfdCBTdHJlYW1IYWxIaWRsOjphZGRFZmZlY3Qoc3A8RWZmZWN0SGFsSW50ZXJmYWNlPiBlZmZlY3QpIHsKLSAgICBpZiAoIW1TdHJlYW0pIHJldHVybiBOT19JTklUOwotICAgIHJldHVybiBwcm9jZXNzUmV0dXJuKCJhZGRFZmZlY3QiLCBtU3RyZWFtLT5hZGRFZmZlY3QoCi0gICAgICAgICAgICAgICAgICAgIHN0YXRpY19jYXN0PEVmZmVjdEhhbEhpZGwqPihlZmZlY3QuZ2V0KCkpLT5lZmZlY3RJZCgpKSk7Ci19Ci0KLXN0YXR1c190IFN0cmVhbUhhbEhpZGw6OnJlbW92ZUVmZmVjdChzcDxFZmZlY3RIYWxJbnRlcmZhY2U+IGVmZmVjdCkgewotICAgIGlmICghbVN0cmVhbSkgcmV0dXJuIE5PX0lOSVQ7Ci0gICAgcmV0dXJuIHByb2Nlc3NSZXR1cm4oInJlbW92ZUVmZmVjdCIsIG1TdHJlYW0tPnJlbW92ZUVmZmVjdCgKLSAgICAgICAgICAgICAgICAgICAgc3RhdGljX2Nhc3Q8RWZmZWN0SGFsSGlkbCo+KGVmZmVjdC5nZXQoKSktPmVmZmVjdElkKCkpKTsKLX0KLQotc3RhdHVzX3QgU3RyZWFtSGFsSGlkbDo6c3RhbmRieSgpIHsKLSAgICBpZiAoIW1TdHJlYW0pIHJldHVybiBOT19JTklUOwotICAgIHJldHVybiBwcm9jZXNzUmV0dXJuKCJzdGFuZGJ5IiwgbVN0cmVhbS0+c3RhbmRieSgpKTsKLX0KLQotc3RhdHVzX3QgU3RyZWFtSGFsSGlkbDo6ZHVtcChpbnQgZmQpIHsKLSAgICBpZiAoIW1TdHJlYW0pIHJldHVybiBOT19JTklUOwotICAgIG5hdGl2ZV9oYW5kbGVfdCogaGlkbEhhbmRsZSA9IG5hdGl2ZV9oYW5kbGVfY3JlYXRlKDEsIDApOwotICAgIGhpZGxIYW5kbGUtPmRhdGFbMF0gPSBmZDsKLSAgICBSZXR1cm48dm9pZD4gcmV0ID0gbVN0cmVhbS0+ZGVidWdEdW1wKGhpZGxIYW5kbGUpOwotICAgIG5hdGl2ZV9oYW5kbGVfZGVsZXRlKGhpZGxIYW5kbGUpOwotICAgIG1TdHJlYW1Qb3dlckxvZy5kdW1wKGZkKTsKLSAgICByZXR1cm4gcHJvY2Vzc1JldHVybigiZHVtcCIsIHJldCk7Ci19Ci0KLXN0YXR1c190IFN0cmVhbUhhbEhpZGw6OnN0YXJ0KCkgewotICAgIGlmICghbVN0cmVhbSkgcmV0dXJuIE5PX0lOSVQ7Ci0gICAgcmV0dXJuIHByb2Nlc3NSZXR1cm4oInN0YXJ0IiwgbVN0cmVhbS0+c3RhcnQoKSk7Ci19Ci0KLXN0YXR1c190IFN0cmVhbUhhbEhpZGw6OnN0b3AoKSB7Ci0gICAgaWYgKCFtU3RyZWFtKSByZXR1cm4gTk9fSU5JVDsKLSAgICByZXR1cm4gcHJvY2Vzc1JldHVybigic3RvcCIsIG1TdHJlYW0tPnN0b3AoKSk7Ci19Ci0KLXN0YXR1c190IFN0cmVhbUhhbEhpZGw6OmNyZWF0ZU1tYXBCdWZmZXIoaW50MzJfdCBtaW5TaXplRnJhbWVzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBhdWRpb19tbWFwX2J1ZmZlcl9pbmZvICppbmZvKSB7Ci0gICAgUmVzdWx0IHJldHZhbDsKLSAgICBSZXR1cm48dm9pZD4gcmV0ID0gbVN0cmVhbS0+Y3JlYXRlTW1hcEJ1ZmZlcigKLSAgICAgICAgICAgIG1pblNpemVGcmFtZXMsCi0gICAgICAgICAgICBbJl0oUmVzdWx0IHIsIGNvbnN0IE1tYXBCdWZmZXJJbmZvJiBoaWRsSW5mbykgewotICAgICAgICAgICAgICAgIHJldHZhbCA9IHI7Ci0gICAgICAgICAgICAgICAgaWYgKHJldHZhbCA9PSBSZXN1bHQ6Ok9LKSB7Ci0gICAgICAgICAgICAgICAgICAgIGNvbnN0IG5hdGl2ZV9oYW5kbGUgKmhhbmRsZSA9IGhpZGxJbmZvLnNoYXJlZE1lbW9yeS5oYW5kbGUoKTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKGhhbmRsZS0+bnVtRmRzID4gMCkgewotICAgICAgICAgICAgICAgICAgICAgICAgaW5mby0+c2hhcmVkX21lbW9yeV9mZCA9IGhhbmRsZS0+ZGF0YVswXTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGluZm8tPmJ1ZmZlcl9zaXplX2ZyYW1lcyA9IGhpZGxJbmZvLmJ1ZmZlclNpemVGcmFtZXM7Ci0gICAgICAgICAgICAgICAgICAgICAgICAvLyBOZWdhdGl2ZSBidWZmZXIgc2l6ZSBmcmFtZSB3YXMgYSBoYWNrIGluIE8gYW5kIFAgdG8KLSAgICAgICAgICAgICAgICAgICAgICAgIC8vIGluZGljYXRlIHRoYXQgdGhlIGJ1ZmZlciBpcyBzaGFyZWFibGUgdG8gYXBwbGljYXRpb25zCi0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoaW5mby0+YnVmZmVyX3NpemVfZnJhbWVzIDwgMCkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluZm8tPmJ1ZmZlcl9zaXplX2ZyYW1lcyAqPSAtMTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbmZvLT5mbGFncyA9IGF1ZGlvX21tYXBfYnVmZmVyX2ZsYWcoCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbmZvLT5mbGFncyB8IEFVRElPX01NQVBfQVBQTElDQVRJT05fU0hBUkVBQkxFKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgIGluZm8tPmJ1cnN0X3NpemVfZnJhbWVzID0gaGlkbEluZm8uYnVyc3RTaXplRnJhbWVzOwotICAgICAgICAgICAgICAgICAgICAgICAgLy8gaW5mby0+c2hhcmVkX21lbW9yeV9hZGRyZXNzIGlzIG5vdCBuZWVkZWQgaW4gSElETCBjb250ZXh0Ci0gICAgICAgICAgICAgICAgICAgICAgICBpbmZvLT5zaGFyZWRfbWVtb3J5X2FkZHJlc3MgPSBOVUxMOwotICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICAgICAgcmV0dmFsID0gUmVzdWx0OjpOT1RfSU5JVElBTElaRUQ7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9KTsKLSAgICByZXR1cm4gcHJvY2Vzc1JldHVybigiY3JlYXRlTW1hcEJ1ZmZlciIsIHJldCwgcmV0dmFsKTsKLX0KLQotc3RhdHVzX3QgU3RyZWFtSGFsSGlkbDo6Z2V0TW1hcFBvc2l0aW9uKHN0cnVjdCBhdWRpb19tbWFwX3Bvc2l0aW9uICpwb3NpdGlvbikgewotICAgIFJlc3VsdCByZXR2YWw7Ci0gICAgUmV0dXJuPHZvaWQ+IHJldCA9IG1TdHJlYW0tPmdldE1tYXBQb3NpdGlvbigKLSAgICAgICAgICAgIFsmXShSZXN1bHQgciwgY29uc3QgTW1hcFBvc2l0aW9uJiBoaWRsUG9zaXRpb24pIHsKLSAgICAgICAgICAgICAgICByZXR2YWwgPSByOwotICAgICAgICAgICAgICAgIGlmIChyZXR2YWwgPT0gUmVzdWx0OjpPSykgewotICAgICAgICAgICAgICAgICAgICBwb3NpdGlvbi0+dGltZV9uYW5vc2Vjb25kcyA9IGhpZGxQb3NpdGlvbi50aW1lTmFub3NlY29uZHM7Ci0gICAgICAgICAgICAgICAgICAgIHBvc2l0aW9uLT5wb3NpdGlvbl9mcmFtZXMgPSBoaWRsUG9zaXRpb24ucG9zaXRpb25GcmFtZXM7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfSk7Ci0gICAgcmV0dXJuIHByb2Nlc3NSZXR1cm4oImdldE1tYXBQb3NpdGlvbiIsIHJldCwgcmV0dmFsKTsKLX0KLQotc3RhdHVzX3QgU3RyZWFtSGFsSGlkbDo6c2V0SGFsVGhyZWFkUHJpb3JpdHkoaW50IHByaW9yaXR5KSB7Ci0gICAgbUhhbFRocmVhZFByaW9yaXR5ID0gcHJpb3JpdHk7Ci0gICAgcmV0dXJuIE9LOwotfQotCi1zdGF0dXNfdCBTdHJlYW1IYWxIaWRsOjpnZXRDYWNoZWRCdWZmZXJTaXplKHNpemVfdCAqc2l6ZSkgewotICAgIGlmIChtQ2FjaGVkQnVmZmVyU2l6ZSAhPSAwKSB7Ci0gICAgICAgICpzaXplID0gbUNhY2hlZEJ1ZmZlclNpemU7Ci0gICAgICAgIHJldHVybiBPSzsKLSAgICB9Ci0gICAgcmV0dXJuIGdldEJ1ZmZlclNpemUoc2l6ZSk7Ci19Ci0KLWJvb2wgU3RyZWFtSGFsSGlkbDo6cmVxdWVzdEhhbFRocmVhZFByaW9yaXR5KHBpZF90IHRocmVhZFBpZCwgcGlkX3QgdGhyZWFkSWQpIHsKLSAgICBpZiAobUhhbFRocmVhZFByaW9yaXR5ID09IEhBTF9USFJFQURfUFJJT1JJVFlfREVGQVVMVCkgewotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0gICAgaW50IGVyciA9IHJlcXVlc3RQcmlvcml0eSgKLSAgICAgICAgICAgIHRocmVhZFBpZCwgdGhyZWFkSWQsCi0gICAgICAgICAgICBtSGFsVGhyZWFkUHJpb3JpdHksIGZhbHNlIC8qaXNGb3JBcHAqLywgdHJ1ZSAvKmFzeW5jaHJvbm91cyovKTsKLSAgICBBTE9HRV9JRihlcnIsICJmYWlsZWQgdG8gc2V0IHByaW9yaXR5ICVkIGZvciBwaWQgJWQgdGlkICVkOyBlcnJvciAlZCIsCi0gICAgICAgICAgICBtSGFsVGhyZWFkUHJpb3JpdHksIHRocmVhZFBpZCwgdGhyZWFkSWQsIGVycik7Ci0gICAgLy8gQXVkaW8gd2lsbCBzdGlsbCB3b3JrLCBidXQgbGF0ZW5jeSB3aWxsIGJlIGhpZ2hlciBhbmQgc29tZXRpbWVzIHVuYWNjZXB0YWJsZS4KLSAgICByZXR1cm4gZXJyID09IDA7Ci19Ci0KLW5hbWVzcGFjZSB7Ci0KLS8qIE5vdGVzIG9uIGNhbGxiYWNrIG93bmVyc2hpcC4KLQotVGhpcyBpcyBob3cgKEh3KUJpbmRlciBvd25lcnNoaXAgbW9kZWwgbG9va3MgbGlrZS4gVGhlIHNlcnZlciBpbXBsZW1lbnRhdGlvbgotaXMgb3duZWQgYnkgQmluZGVyIGZyYW1ld29yayAodmlhIHNwPD4pLiBQcm94aWVzIGFyZSBvd25lZCBieSBjbGllbnRzLgotV2hlbiB0aGUgbGFzdCBwcm94eSBkaXNhcHBlYXJzLCBCaW5kZXIgZnJhbWV3b3JrIHJlbGVhc2VzIHRoZSBzZXJ2ZXIgaW1wbC4KLQotVGh1cywgaXQgaXMgbm90IG5lZWRlZCB0byBrZWVwIGFueSByZWZlcmVuY2VzIHRvIFN0cmVhbU91dENhbGxiYWNrICh0aGlzIGlzCi10aGUgc2VydmVyIGltcGwpIC0tIGl0IHdpbGwgbGl2ZSBhcyBsb25nIGFzIEhBTCBzZXJ2ZXIgaG9sZHMgYSBzdHJvbmcgcmVmIHRvCi1JU3RyZWFtT3V0Q2FsbGJhY2sgcHJveHkuIFdlIGNsZWFyIHRoYXQgcmVmZXJlbmNlIGJ5IGNhbGxpbmcgJ2NsZWFyQ2FsbGJhY2snCi1mcm9tIHRoZSBkZXN0cnVjdG9yIG9mIFN0cmVhbU91dEhhbEhpZGwuCi0KLVRoZSBjYWxsYmFjayBvbmx5IGtlZXBzIGEgd2VhayByZWZlcmVuY2UgdG8gdGhlIHN0cmVhbS4gVGhlIHN0cmVhbSBpcyBvd25lZAotYnkgQXVkaW9GbGluZ2VyLgotCi0qLwotCi1zdHJ1Y3QgU3RyZWFtT3V0Q2FsbGJhY2sgOiBwdWJsaWMgSVN0cmVhbU91dENhbGxiYWNrIHsKLSAgICBTdHJlYW1PdXRDYWxsYmFjayhjb25zdCB3cDxTdHJlYW1PdXRIYWxIaWRsPiYgc3RyZWFtKSA6IG1TdHJlYW0oc3RyZWFtKSB7fQotCi0gICAgLy8gSVN0cmVhbU91dENhbGxiYWNrIGltcGxlbWVudGF0aW9uCi0gICAgUmV0dXJuPHZvaWQ+IG9uV3JpdGVSZWFkeSgpICBvdmVycmlkZSB7Ci0gICAgICAgIHNwPFN0cmVhbU91dEhhbEhpZGw+IHN0cmVhbSA9IG1TdHJlYW0ucHJvbW90ZSgpOwotICAgICAgICBpZiAoc3RyZWFtICE9IDApIHsKLSAgICAgICAgICAgIHN0cmVhbS0+b25Xcml0ZVJlYWR5KCk7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIFZvaWQoKTsKLSAgICB9Ci0KLSAgICBSZXR1cm48dm9pZD4gb25EcmFpblJlYWR5KCkgIG92ZXJyaWRlIHsKLSAgICAgICAgc3A8U3RyZWFtT3V0SGFsSGlkbD4gc3RyZWFtID0gbVN0cmVhbS5wcm9tb3RlKCk7Ci0gICAgICAgIGlmIChzdHJlYW0gIT0gMCkgewotICAgICAgICAgICAgc3RyZWFtLT5vbkRyYWluUmVhZHkoKTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gVm9pZCgpOwotICAgIH0KLQotICAgIFJldHVybjx2b2lkPiBvbkVycm9yKCkgIG92ZXJyaWRlIHsKLSAgICAgICAgc3A8U3RyZWFtT3V0SGFsSGlkbD4gc3RyZWFtID0gbVN0cmVhbS5wcm9tb3RlKCk7Ci0gICAgICAgIGlmIChzdHJlYW0gIT0gMCkgewotICAgICAgICAgICAgc3RyZWFtLT5vbkVycm9yKCk7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIFZvaWQoKTsKLSAgICB9Ci0KLSAgcHJpdmF0ZToKLSAgICB3cDxTdHJlYW1PdXRIYWxIaWRsPiBtU3RyZWFtOwotfTsKLQotfSAgLy8gbmFtZXNwYWNlCi0KLVN0cmVhbU91dEhhbEhpZGw6OlN0cmVhbU91dEhhbEhpZGwoY29uc3Qgc3A8SVN0cmVhbU91dD4mIHN0cmVhbSkKLSAgICAgICAgOiBTdHJlYW1IYWxIaWRsKHN0cmVhbS5nZXQoKSksIG1TdHJlYW0oc3RyZWFtKSwgbVdyaXRlckNsaWVudCgwKSwgbUVmR3JvdXAobnVsbHB0cikgewotfQotCi1TdHJlYW1PdXRIYWxIaWRsOjp+U3RyZWFtT3V0SGFsSGlkbCgpIHsKLSAgICBpZiAobVN0cmVhbSAhPSAwKSB7Ci0gICAgICAgIGlmIChtQ2FsbGJhY2sudW5zYWZlX2dldCgpKSB7Ci0gICAgICAgICAgICBwcm9jZXNzUmV0dXJuKCJjbGVhckNhbGxiYWNrIiwgbVN0cmVhbS0+Y2xlYXJDYWxsYmFjaygpKTsKLSAgICAgICAgfQotICAgICAgICBwcm9jZXNzUmV0dXJuKCJjbG9zZSIsIG1TdHJlYW0tPmNsb3NlKCkpOwotICAgICAgICBtU3RyZWFtLmNsZWFyKCk7Ci0gICAgfQotICAgIG1DYWxsYmFjay5jbGVhcigpOwotICAgIGhhcmR3YXJlOjpJUENUaHJlYWRTdGF0ZTo6c2VsZigpLT5mbHVzaENvbW1hbmRzKCk7Ci0gICAgaWYgKG1FZkdyb3VwKSB7Ci0gICAgICAgIEV2ZW50RmxhZzo6ZGVsZXRlRXZlbnRGbGFnKCZtRWZHcm91cCk7Ci0gICAgfQotfQotCi1zdGF0dXNfdCBTdHJlYW1PdXRIYWxIaWRsOjpnZXRGcmFtZVNpemUoc2l6ZV90ICpzaXplKSB7Ci0gICAgaWYgKG1TdHJlYW0gPT0gMCkgcmV0dXJuIE5PX0lOSVQ7Ci0gICAgcmV0dXJuIHByb2Nlc3NSZXR1cm4oImdldEZyYW1lU2l6ZSIsIG1TdHJlYW0tPmdldEZyYW1lU2l6ZSgpLCBzaXplKTsKLX0KLQotc3RhdHVzX3QgU3RyZWFtT3V0SGFsSGlkbDo6Z2V0TGF0ZW5jeSh1aW50MzJfdCAqbGF0ZW5jeSkgewotICAgIGlmIChtU3RyZWFtID09IDApIHJldHVybiBOT19JTklUOwotICAgIGlmIChtV3JpdGVyQ2xpZW50ID09IGdldHRpZCgpICYmIG1Db21tYW5kTVEpIHsKLSAgICAgICAgcmV0dXJuIGNhbGxXcml0ZXJUaHJlYWQoCi0gICAgICAgICAgICAgICAgV3JpdGVDb21tYW5kOjpHRVRfTEFURU5DWSwgImdldExhdGVuY3kiLCBudWxscHRyLCAwLAotICAgICAgICAgICAgICAgIFsmXShjb25zdCBXcml0ZVN0YXR1cyYgd3JpdGVTdGF0dXMpIHsKLSAgICAgICAgICAgICAgICAgICAgKmxhdGVuY3kgPSB3cml0ZVN0YXR1cy5yZXBseS5sYXRlbmN5TXM7Ci0gICAgICAgICAgICAgICAgfSk7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgcmV0dXJuIHByb2Nlc3NSZXR1cm4oImdldExhdGVuY3kiLCBtU3RyZWFtLT5nZXRMYXRlbmN5KCksIGxhdGVuY3kpOwotICAgIH0KLX0KLQotc3RhdHVzX3QgU3RyZWFtT3V0SGFsSGlkbDo6c2V0Vm9sdW1lKGZsb2F0IGxlZnQsIGZsb2F0IHJpZ2h0KSB7Ci0gICAgaWYgKG1TdHJlYW0gPT0gMCkgcmV0dXJuIE5PX0lOSVQ7Ci0gICAgcmV0dXJuIHByb2Nlc3NSZXR1cm4oInNldFZvbHVtZSIsIG1TdHJlYW0tPnNldFZvbHVtZShsZWZ0LCByaWdodCkpOwotfQotCi1zdGF0dXNfdCBTdHJlYW1PdXRIYWxIaWRsOjp3cml0ZShjb25zdCB2b2lkICpidWZmZXIsIHNpemVfdCBieXRlcywgc2l6ZV90ICp3cml0dGVuKSB7Ci0gICAgaWYgKG1TdHJlYW0gPT0gMCkgcmV0dXJuIE5PX0lOSVQ7Ci0gICAgKndyaXR0ZW4gPSAwOwotCi0gICAgaWYgKGJ5dGVzID09IDAgJiYgIW1EYXRhTVEpIHsKLSAgICAgICAgLy8gQ2FuJ3QgZGV0ZXJtaW5lIHRoZSBzaXplIGZvciB0aGUgTVEgYnVmZmVyLiBXYWl0IGZvciBhIG5vbi1lbXB0eSB3cml0ZSByZXF1ZXN0LgotICAgICAgICBBTE9HV19JRihtQ2FsbGJhY2sudW5zYWZlX2dldCgpLCAiRmlyc3QgY2FsbCB0byBhc3luYyB3cml0ZSB3aXRoIDAgYnl0ZXMiKTsKLSAgICAgICAgcmV0dXJuIE9LOwotICAgIH0KLQotICAgIHN0YXR1c190IHN0YXR1czsKLSAgICBpZiAoIW1EYXRhTVEpIHsKLSAgICAgICAgLy8gSW4gY2FzZSBpZiBwbGF5YmFjayBzdGFydHMgY2xvc2UgdG8gdGhlIGVuZCBvZiBhIGNvbXByZXNzZWQgdHJhY2ssIHRoZSBieXRlcwotICAgICAgICAvLyB0aGF0IG5lZWQgdG8gYmUgd3JpdHRlbiBpcyBsZXNzIHRoYW4gdGhlIGFjdHVhbCBidWZmZXIgc2l6ZS4gTmVlZCB0byB1c2UKLSAgICAgICAgLy8gZnVsbCBidWZmZXIgc2l6ZSBmb3IgdGhlIE1RIHNpbmNlIG90aGVyd2lzZSBhZnRlciBzZWVraW5nIGJhY2sgdG8gdGhlIG1pZGRsZQotICAgICAgICAvLyBkYXRhIHdpbGwgYmUgdHJ1bmNhdGVkLgotICAgICAgICBzaXplX3QgYnVmZmVyU2l6ZTsKLSAgICAgICAgaWYgKChzdGF0dXMgPSBnZXRDYWNoZWRCdWZmZXJTaXplKCZidWZmZXJTaXplKSkgIT0gT0spIHsKLSAgICAgICAgICAgIHJldHVybiBzdGF0dXM7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKGJ5dGVzID4gYnVmZmVyU2l6ZSkgYnVmZmVyU2l6ZSA9IGJ5dGVzOwotICAgICAgICBpZiAoKHN0YXR1cyA9IHByZXBhcmVGb3JXcml0aW5nKGJ1ZmZlclNpemUpKSAhPSBPSykgewotICAgICAgICAgICAgcmV0dXJuIHN0YXR1czsKLSAgICAgICAgfQotICAgIH0KLQotICAgIHN0YXR1cyA9IGNhbGxXcml0ZXJUaHJlYWQoCi0gICAgICAgICAgICBXcml0ZUNvbW1hbmQ6OldSSVRFLCAid3JpdGUiLCBzdGF0aWNfY2FzdDxjb25zdCB1aW50OF90Kj4oYnVmZmVyKSwgYnl0ZXMsCi0gICAgICAgICAgICBbJl0gKGNvbnN0IFdyaXRlU3RhdHVzJiB3cml0ZVN0YXR1cykgewotICAgICAgICAgICAgICAgICp3cml0dGVuID0gd3JpdGVTdGF0dXMucmVwbHkud3JpdHRlbjsKLSAgICAgICAgICAgICAgICAvLyBEaWFnbm9zdGljcyBvZiB0aGUgY2F1c2Ugb2YgYi8zNTgxMzExMy4KLSAgICAgICAgICAgICAgICBBTE9HRV9JRigqd3JpdHRlbiA+IGJ5dGVzLAotICAgICAgICAgICAgICAgICAgICAgICAgImhhbCByZXBvcnRzIG1vcmUgYnl0ZXMgd3JpdHRlbiB0aGFuIGFza2VkIGZvcjogJWxsZCA+ICVsbGQiLAotICAgICAgICAgICAgICAgICAgICAgICAgKGxvbmcgbG9uZykqd3JpdHRlbiwgKGxvbmcgbG9uZylieXRlcyk7Ci0gICAgICAgICAgICB9KTsKLSAgICBtU3RyZWFtUG93ZXJMb2cubG9nKGJ1ZmZlciwgKndyaXR0ZW4pOwotICAgIHJldHVybiBzdGF0dXM7Ci19Ci0KLXN0YXR1c190IFN0cmVhbU91dEhhbEhpZGw6OmNhbGxXcml0ZXJUaHJlYWQoCi0gICAgICAgIFdyaXRlQ29tbWFuZCBjbWQsIGNvbnN0IGNoYXIqIGNtZE5hbWUsCi0gICAgICAgIGNvbnN0IHVpbnQ4X3QqIGRhdGEsIHNpemVfdCBkYXRhU2l6ZSwgU3RyZWFtT3V0SGFsSGlkbDo6V3JpdGVyQ2FsbGJhY2sgY2FsbGJhY2spIHsKLSAgICBpZiAoIW1Db21tYW5kTVEtPndyaXRlKCZjbWQpKSB7Ci0gICAgICAgIEFMT0dFKCJjb21tYW5kIG1lc3NhZ2UgcXVldWUgd3JpdGUgZmFpbGVkIGZvciBcIiVzXCIiLCBjbWROYW1lKTsKLSAgICAgICAgcmV0dXJuIC1FQUdBSU47Ci0gICAgfQotICAgIGlmIChkYXRhICE9IG51bGxwdHIpIHsKLSAgICAgICAgc2l6ZV90IGF2YWlsYWJsZVRvV3JpdGUgPSBtRGF0YU1RLT5hdmFpbGFibGVUb1dyaXRlKCk7Ci0gICAgICAgIGlmIChkYXRhU2l6ZSA+IGF2YWlsYWJsZVRvV3JpdGUpIHsKLSAgICAgICAgICAgIEFMT0dXKCJ0cnVuY2F0aW5nIHdyaXRlIGRhdGEgZnJvbSAlbGxkIHRvICVsbGQgZHVlIHRvIGluc3VmZmljaWVudCBkYXRhIHF1ZXVlIHNwYWNlIiwKLSAgICAgICAgICAgICAgICAgICAgKGxvbmcgbG9uZylkYXRhU2l6ZSwgKGxvbmcgbG9uZylhdmFpbGFibGVUb1dyaXRlKTsKLSAgICAgICAgICAgIGRhdGFTaXplID0gYXZhaWxhYmxlVG9Xcml0ZTsKLSAgICAgICAgfQotICAgICAgICBpZiAoIW1EYXRhTVEtPndyaXRlKGRhdGEsIGRhdGFTaXplKSkgewotICAgICAgICAgICAgQUxPR0UoImRhdGEgbWVzc2FnZSBxdWV1ZSB3cml0ZSBmYWlsZWQgZm9yIFwiJXNcIiIsIGNtZE5hbWUpOwotICAgICAgICB9Ci0gICAgfQotICAgIG1FZkdyb3VwLT53YWtlKHN0YXRpY19jYXN0PHVpbnQzMl90PihNZXNzYWdlUXVldWVGbGFnQml0czo6Tk9UX0VNUFRZKSk7Ci0KLSAgICAvLyBUT0RPOiBSZW1vdmUgbWFudWFsIGV2ZW50IGZsYWcgaGFuZGxpbmcgb25jZSBibG9ja2luZyBNUSBpcyBpbXBsZW1lbnRlZC4gYi8zMzgxNTQyMgotICAgIHVpbnQzMl90IGVmU3RhdGUgPSAwOwotcmV0cnk6Ci0gICAgc3RhdHVzX3QgcmV0ID0gbUVmR3JvdXAtPndhaXQoc3RhdGljX2Nhc3Q8dWludDMyX3Q+KE1lc3NhZ2VRdWV1ZUZsYWdCaXRzOjpOT1RfRlVMTCksICZlZlN0YXRlKTsKLSAgICBpZiAoZWZTdGF0ZSAmIHN0YXRpY19jYXN0PHVpbnQzMl90PihNZXNzYWdlUXVldWVGbGFnQml0czo6Tk9UX0ZVTEwpKSB7Ci0gICAgICAgIFdyaXRlU3RhdHVzIHdyaXRlU3RhdHVzOwotICAgICAgICB3cml0ZVN0YXR1cy5yZXR2YWwgPSBSZXN1bHQ6Ok5PVF9JTklUSUFMSVpFRDsKLSAgICAgICAgaWYgKCFtU3RhdHVzTVEtPnJlYWQoJndyaXRlU3RhdHVzKSkgewotICAgICAgICAgICAgQUxPR0UoInN0YXR1cyBtZXNzYWdlIHJlYWQgZmFpbGVkIGZvciBcIiVzXCIiLCBjbWROYW1lKTsKLSAgICAgICAgfQotICAgICAgICBpZiAod3JpdGVTdGF0dXMucmV0dmFsID09IFJlc3VsdDo6T0spIHsKLSAgICAgICAgICAgIHJldCA9IE9LOwotICAgICAgICAgICAgY2FsbGJhY2sod3JpdGVTdGF0dXMpOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgcmV0ID0gcHJvY2Vzc1JldHVybihjbWROYW1lLCB3cml0ZVN0YXR1cy5yZXR2YWwpOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiByZXQ7Ci0gICAgfQotICAgIGlmIChyZXQgPT0gLUVBR0FJTiB8fCByZXQgPT0gLUVJTlRSKSB7Ci0gICAgICAgIC8vIFNwdXJpb3VzIHdha2V1cC4gVGhpcyBub3JtYWxseSByZXRyaWVzIG5vIG1vcmUgdGhhbiBvbmNlLgotICAgICAgICBnb3RvIHJldHJ5OwotICAgIH0KLSAgICByZXR1cm4gcmV0OwotfQotCi1zdGF0dXNfdCBTdHJlYW1PdXRIYWxIaWRsOjpwcmVwYXJlRm9yV3JpdGluZyhzaXplX3QgYnVmZmVyU2l6ZSkgewotICAgIHN0ZDo6dW5pcXVlX3B0cjxDb21tYW5kTVE+IHRlbXBDb21tYW5kTVE7Ci0gICAgc3RkOjp1bmlxdWVfcHRyPERhdGFNUT4gdGVtcERhdGFNUTsKLSAgICBzdGQ6OnVuaXF1ZV9wdHI8U3RhdHVzTVE+IHRlbXBTdGF0dXNNUTsKLSAgICBSZXN1bHQgcmV0dmFsOwotICAgIHBpZF90IGhhbFRocmVhZFBpZCwgaGFsVGhyZWFkVGlkOwotICAgIFJldHVybjx2b2lkPiByZXQgPSBtU3RyZWFtLT5wcmVwYXJlRm9yV3JpdGluZygKLSAgICAgICAgICAgIDEsIGJ1ZmZlclNpemUsCi0gICAgICAgICAgICBbJl0oUmVzdWx0IHIsCi0gICAgICAgICAgICAgICAgICAgIGNvbnN0IENvbW1hbmRNUTo6RGVzY3JpcHRvciYgY29tbWFuZE1RLAotICAgICAgICAgICAgICAgICAgICBjb25zdCBEYXRhTVE6OkRlc2NyaXB0b3ImIGRhdGFNUSwKLSAgICAgICAgICAgICAgICAgICAgY29uc3QgU3RhdHVzTVE6OkRlc2NyaXB0b3ImIHN0YXR1c01RLAotICAgICAgICAgICAgICAgICAgICBjb25zdCBUaHJlYWRJbmZvJiBoYWxUaHJlYWRJbmZvKSB7Ci0gICAgICAgICAgICAgICAgcmV0dmFsID0gcjsKLSAgICAgICAgICAgICAgICBpZiAocmV0dmFsID09IFJlc3VsdDo6T0spIHsKLSAgICAgICAgICAgICAgICAgICAgdGVtcENvbW1hbmRNUS5yZXNldChuZXcgQ29tbWFuZE1RKGNvbW1hbmRNUSkpOwotICAgICAgICAgICAgICAgICAgICB0ZW1wRGF0YU1RLnJlc2V0KG5ldyBEYXRhTVEoZGF0YU1RKSk7Ci0gICAgICAgICAgICAgICAgICAgIHRlbXBTdGF0dXNNUS5yZXNldChuZXcgU3RhdHVzTVEoc3RhdHVzTVEpKTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKHRlbXBEYXRhTVEtPmlzVmFsaWQoKSAmJiB0ZW1wRGF0YU1RLT5nZXRFdmVudEZsYWdXb3JkKCkpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIEV2ZW50RmxhZzo6Y3JlYXRlRXZlbnRGbGFnKHRlbXBEYXRhTVEtPmdldEV2ZW50RmxhZ1dvcmQoKSwgJm1FZkdyb3VwKTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICBoYWxUaHJlYWRQaWQgPSBoYWxUaHJlYWRJbmZvLnBpZDsKLSAgICAgICAgICAgICAgICAgICAgaGFsVGhyZWFkVGlkID0gaGFsVGhyZWFkSW5mby50aWQ7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfSk7Ci0gICAgaWYgKCFyZXQuaXNPaygpIHx8IHJldHZhbCAhPSBSZXN1bHQ6Ok9LKSB7Ci0gICAgICAgIHJldHVybiBwcm9jZXNzUmV0dXJuKCJwcmVwYXJlRm9yV3JpdGluZyIsIHJldCwgcmV0dmFsKTsKLSAgICB9Ci0gICAgaWYgKCF0ZW1wQ29tbWFuZE1RIHx8ICF0ZW1wQ29tbWFuZE1RLT5pc1ZhbGlkKCkgfHwKLSAgICAgICAgICAgICF0ZW1wRGF0YU1RIHx8ICF0ZW1wRGF0YU1RLT5pc1ZhbGlkKCkgfHwKLSAgICAgICAgICAgICF0ZW1wU3RhdHVzTVEgfHwgIXRlbXBTdGF0dXNNUS0+aXNWYWxpZCgpIHx8Ci0gICAgICAgICAgICAhbUVmR3JvdXApIHsKLSAgICAgICAgQUxPR0VfSUYoIXRlbXBDb21tYW5kTVEsICJGYWlsZWQgdG8gb2J0YWluIGNvbW1hbmQgbWVzc2FnZSBxdWV1ZSBmb3Igd3JpdGluZyIpOwotICAgICAgICBBTE9HRV9JRih0ZW1wQ29tbWFuZE1RICYmICF0ZW1wQ29tbWFuZE1RLT5pc1ZhbGlkKCksCi0gICAgICAgICAgICAgICAgIkNvbW1hbmQgbWVzc2FnZSBxdWV1ZSBmb3Igd3JpdGluZyBpcyBpbnZhbGlkIik7Ci0gICAgICAgIEFMT0dFX0lGKCF0ZW1wRGF0YU1RLCAiRmFpbGVkIHRvIG9idGFpbiBkYXRhIG1lc3NhZ2UgcXVldWUgZm9yIHdyaXRpbmciKTsKLSAgICAgICAgQUxPR0VfSUYodGVtcERhdGFNUSAmJiAhdGVtcERhdGFNUS0+aXNWYWxpZCgpLCAiRGF0YSBtZXNzYWdlIHF1ZXVlIGZvciB3cml0aW5nIGlzIGludmFsaWQiKTsKLSAgICAgICAgQUxPR0VfSUYoIXRlbXBTdGF0dXNNUSwgIkZhaWxlZCB0byBvYnRhaW4gc3RhdHVzIG1lc3NhZ2UgcXVldWUgZm9yIHdyaXRpbmciKTsKLSAgICAgICAgQUxPR0VfSUYodGVtcFN0YXR1c01RICYmICF0ZW1wU3RhdHVzTVEtPmlzVmFsaWQoKSwKLSAgICAgICAgICAgICAgICAiU3RhdHVzIG1lc3NhZ2UgcXVldWUgZm9yIHdyaXRpbmcgaXMgaW52YWxpZCIpOwotICAgICAgICBBTE9HRV9JRighbUVmR3JvdXAsICJFdmVudCBmbGFnIGNyZWF0aW9uIGZvciB3cml0aW5nIGZhaWxlZCIpOwotICAgICAgICByZXR1cm4gTk9fSU5JVDsKLSAgICB9Ci0gICAgcmVxdWVzdEhhbFRocmVhZFByaW9yaXR5KGhhbFRocmVhZFBpZCwgaGFsVGhyZWFkVGlkKTsKLQotICAgIG1Db21tYW5kTVEgPSBzdGQ6Om1vdmUodGVtcENvbW1hbmRNUSk7Ci0gICAgbURhdGFNUSA9IHN0ZDo6bW92ZSh0ZW1wRGF0YU1RKTsKLSAgICBtU3RhdHVzTVEgPSBzdGQ6Om1vdmUodGVtcFN0YXR1c01RKTsKLSAgICBtV3JpdGVyQ2xpZW50ID0gZ2V0dGlkKCk7Ci0gICAgcmV0dXJuIE9LOwotfQotCi1zdGF0dXNfdCBTdHJlYW1PdXRIYWxIaWRsOjpnZXRSZW5kZXJQb3NpdGlvbih1aW50MzJfdCAqZHNwRnJhbWVzKSB7Ci0gICAgaWYgKG1TdHJlYW0gPT0gMCkgcmV0dXJuIE5PX0lOSVQ7Ci0gICAgUmVzdWx0IHJldHZhbDsKLSAgICBSZXR1cm48dm9pZD4gcmV0ID0gbVN0cmVhbS0+Z2V0UmVuZGVyUG9zaXRpb24oCi0gICAgICAgICAgICBbJl0oUmVzdWx0IHIsIHVpbnQzMl90IGQpIHsKLSAgICAgICAgICAgICAgICByZXR2YWwgPSByOwotICAgICAgICAgICAgICAgIGlmIChyZXR2YWwgPT0gUmVzdWx0OjpPSykgewotICAgICAgICAgICAgICAgICAgICAqZHNwRnJhbWVzID0gZDsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9KTsKLSAgICByZXR1cm4gcHJvY2Vzc1JldHVybigiZ2V0UmVuZGVyUG9zaXRpb24iLCByZXQsIHJldHZhbCk7Ci19Ci0KLXN0YXR1c190IFN0cmVhbU91dEhhbEhpZGw6OmdldE5leHRXcml0ZVRpbWVzdGFtcChpbnQ2NF90ICp0aW1lc3RhbXApIHsKLSAgICBpZiAobVN0cmVhbSA9PSAwKSByZXR1cm4gTk9fSU5JVDsKLSAgICBSZXN1bHQgcmV0dmFsOwotICAgIFJldHVybjx2b2lkPiByZXQgPSBtU3RyZWFtLT5nZXROZXh0V3JpdGVUaW1lc3RhbXAoCi0gICAgICAgICAgICBbJl0oUmVzdWx0IHIsIGludDY0X3QgdCkgewotICAgICAgICAgICAgICAgIHJldHZhbCA9IHI7Ci0gICAgICAgICAgICAgICAgaWYgKHJldHZhbCA9PSBSZXN1bHQ6Ok9LKSB7Ci0gICAgICAgICAgICAgICAgICAgICp0aW1lc3RhbXAgPSB0OwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0pOwotICAgIHJldHVybiBwcm9jZXNzUmV0dXJuKCJnZXRSZW5kZXJQb3NpdGlvbiIsIHJldCwgcmV0dmFsKTsKLX0KLQotc3RhdHVzX3QgU3RyZWFtT3V0SGFsSGlkbDo6c2V0Q2FsbGJhY2sod3A8U3RyZWFtT3V0SGFsSW50ZXJmYWNlQ2FsbGJhY2s+IGNhbGxiYWNrKSB7Ci0gICAgaWYgKG1TdHJlYW0gPT0gMCkgcmV0dXJuIE5PX0lOSVQ7Ci0gICAgc3RhdHVzX3Qgc3RhdHVzID0gcHJvY2Vzc1JldHVybigKLSAgICAgICAgICAgICJzZXRDYWxsYmFjayIsIG1TdHJlYW0tPnNldENhbGxiYWNrKG5ldyBTdHJlYW1PdXRDYWxsYmFjayh0aGlzKSkpOwotICAgIGlmIChzdGF0dXMgPT0gT0spIHsKLSAgICAgICAgbUNhbGxiYWNrID0gY2FsbGJhY2s7Ci0gICAgfQotICAgIHJldHVybiBzdGF0dXM7Ci19Ci0KLXN0YXR1c190IFN0cmVhbU91dEhhbEhpZGw6OnN1cHBvcnRzUGF1c2VBbmRSZXN1bWUoYm9vbCAqc3VwcG9ydHNQYXVzZSwgYm9vbCAqc3VwcG9ydHNSZXN1bWUpIHsKLSAgICBpZiAobVN0cmVhbSA9PSAwKSByZXR1cm4gTk9fSU5JVDsKLSAgICBSZXR1cm48dm9pZD4gcmV0ID0gbVN0cmVhbS0+c3VwcG9ydHNQYXVzZUFuZFJlc3VtZSgKLSAgICAgICAgICAgIFsmXShib29sIHAsIGJvb2wgcikgewotICAgICAgICAgICAgICAgICpzdXBwb3J0c1BhdXNlID0gcDsKLSAgICAgICAgICAgICAgICAqc3VwcG9ydHNSZXN1bWUgPSByOwotICAgICAgICAgICAgfSk7Ci0gICAgcmV0dXJuIHByb2Nlc3NSZXR1cm4oInN1cHBvcnRzUGF1c2VBbmRSZXN1bWUiLCByZXQpOwotfQotCi1zdGF0dXNfdCBTdHJlYW1PdXRIYWxIaWRsOjpwYXVzZSgpIHsKLSAgICBpZiAobVN0cmVhbSA9PSAwKSByZXR1cm4gTk9fSU5JVDsKLSAgICByZXR1cm4gcHJvY2Vzc1JldHVybigicGF1c2UiLCBtU3RyZWFtLT5wYXVzZSgpKTsKLX0KLQotc3RhdHVzX3QgU3RyZWFtT3V0SGFsSGlkbDo6cmVzdW1lKCkgewotICAgIGlmIChtU3RyZWFtID09IDApIHJldHVybiBOT19JTklUOwotICAgIHJldHVybiBwcm9jZXNzUmV0dXJuKCJwYXVzZSIsIG1TdHJlYW0tPnJlc3VtZSgpKTsKLX0KLQotc3RhdHVzX3QgU3RyZWFtT3V0SGFsSGlkbDo6c3VwcG9ydHNEcmFpbihib29sICpzdXBwb3J0c0RyYWluKSB7Ci0gICAgaWYgKG1TdHJlYW0gPT0gMCkgcmV0dXJuIE5PX0lOSVQ7Ci0gICAgcmV0dXJuIHByb2Nlc3NSZXR1cm4oInN1cHBvcnRzRHJhaW4iLCBtU3RyZWFtLT5zdXBwb3J0c0RyYWluKCksIHN1cHBvcnRzRHJhaW4pOwotfQotCi1zdGF0dXNfdCBTdHJlYW1PdXRIYWxIaWRsOjpkcmFpbihib29sIGVhcmx5Tm90aWZ5KSB7Ci0gICAgaWYgKG1TdHJlYW0gPT0gMCkgcmV0dXJuIE5PX0lOSVQ7Ci0gICAgcmV0dXJuIHByb2Nlc3NSZXR1cm4oCi0gICAgICAgICAgICAiZHJhaW4iLCBtU3RyZWFtLT5kcmFpbihlYXJseU5vdGlmeSA/IEF1ZGlvRHJhaW46OkVBUkxZX05PVElGWSA6IEF1ZGlvRHJhaW46OkFMTCkpOwotfQotCi1zdGF0dXNfdCBTdHJlYW1PdXRIYWxIaWRsOjpmbHVzaCgpIHsKLSAgICBpZiAobVN0cmVhbSA9PSAwKSByZXR1cm4gTk9fSU5JVDsKLSAgICByZXR1cm4gcHJvY2Vzc1JldHVybigicGF1c2UiLCBtU3RyZWFtLT5mbHVzaCgpKTsKLX0KLQotc3RhdHVzX3QgU3RyZWFtT3V0SGFsSGlkbDo6Z2V0UHJlc2VudGF0aW9uUG9zaXRpb24odWludDY0X3QgKmZyYW1lcywgc3RydWN0IHRpbWVzcGVjICp0aW1lc3RhbXApIHsKLSAgICBpZiAobVN0cmVhbSA9PSAwKSByZXR1cm4gTk9fSU5JVDsKLSAgICBpZiAobVdyaXRlckNsaWVudCA9PSBnZXR0aWQoKSAmJiBtQ29tbWFuZE1RKSB7Ci0gICAgICAgIHJldHVybiBjYWxsV3JpdGVyVGhyZWFkKAotICAgICAgICAgICAgICAgIFdyaXRlQ29tbWFuZDo6R0VUX1BSRVNFTlRBVElPTl9QT1NJVElPTiwgImdldFByZXNlbnRhdGlvblBvc2l0aW9uIiwgbnVsbHB0ciwgMCwKLSAgICAgICAgICAgICAgICBbJl0oY29uc3QgV3JpdGVTdGF0dXMmIHdyaXRlU3RhdHVzKSB7Ci0gICAgICAgICAgICAgICAgICAgICpmcmFtZXMgPSB3cml0ZVN0YXR1cy5yZXBseS5wcmVzZW50YXRpb25Qb3NpdGlvbi5mcmFtZXM7Ci0gICAgICAgICAgICAgICAgICAgIHRpbWVzdGFtcC0+dHZfc2VjID0gd3JpdGVTdGF0dXMucmVwbHkucHJlc2VudGF0aW9uUG9zaXRpb24udGltZVN0YW1wLnR2U2VjOwotICAgICAgICAgICAgICAgICAgICB0aW1lc3RhbXAtPnR2X25zZWMgPSB3cml0ZVN0YXR1cy5yZXBseS5wcmVzZW50YXRpb25Qb3NpdGlvbi50aW1lU3RhbXAudHZOU2VjOwotICAgICAgICAgICAgICAgIH0pOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIFJlc3VsdCByZXR2YWw7Ci0gICAgICAgIFJldHVybjx2b2lkPiByZXQgPSBtU3RyZWFtLT5nZXRQcmVzZW50YXRpb25Qb3NpdGlvbigKLSAgICAgICAgICAgICAgICBbJl0oUmVzdWx0IHIsIHVpbnQ2NF90IGhpZGxGcmFtZXMsIGNvbnN0IFRpbWVTcGVjJiBoaWRsVGltZVN0YW1wKSB7Ci0gICAgICAgICAgICAgICAgICAgIHJldHZhbCA9IHI7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChyZXR2YWwgPT0gUmVzdWx0OjpPSykgewotICAgICAgICAgICAgICAgICAgICAgICAgKmZyYW1lcyA9IGhpZGxGcmFtZXM7Ci0gICAgICAgICAgICAgICAgICAgICAgICB0aW1lc3RhbXAtPnR2X3NlYyA9IGhpZGxUaW1lU3RhbXAudHZTZWM7Ci0gICAgICAgICAgICAgICAgICAgICAgICB0aW1lc3RhbXAtPnR2X25zZWMgPSBoaWRsVGltZVN0YW1wLnR2TlNlYzsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0pOwotICAgICAgICByZXR1cm4gcHJvY2Vzc1JldHVybigiZ2V0UHJlc2VudGF0aW9uUG9zaXRpb24iLCByZXQsIHJldHZhbCk7Ci0gICAgfQotfQotCi1zdGF0dXNfdCBTdHJlYW1PdXRIYWxIaWRsOjp1cGRhdGVTb3VyY2VNZXRhZGF0YShjb25zdCBTb3VyY2VNZXRhZGF0YSYgLyogc291cmNlTWV0YWRhdGEgKi8pIHsKLSAgICAvLyBBdWRpbyBIQUwgVjIuMCBkb2VzIG5vdCBzdXBwb3J0IHByb3BhZ2F0aW5nIHNvdXJjZSBtZXRhZGF0YQotICAgIHJldHVybiBJTlZBTElEX09QRVJBVElPTjsKLX0KLQotdm9pZCBTdHJlYW1PdXRIYWxIaWRsOjpvbldyaXRlUmVhZHkoKSB7Ci0gICAgc3A8U3RyZWFtT3V0SGFsSW50ZXJmYWNlQ2FsbGJhY2s+IGNhbGxiYWNrID0gbUNhbGxiYWNrLnByb21vdGUoKTsKLSAgICBpZiAoY2FsbGJhY2sgPT0gMCkgcmV0dXJuOwotICAgIEFMT0dWKCJhc3luY0NhbGxiYWNrIG9uV3JpdGVSZWFkeSIpOwotICAgIGNhbGxiYWNrLT5vbldyaXRlUmVhZHkoKTsKLX0KLQotdm9pZCBTdHJlYW1PdXRIYWxIaWRsOjpvbkRyYWluUmVhZHkoKSB7Ci0gICAgc3A8U3RyZWFtT3V0SGFsSW50ZXJmYWNlQ2FsbGJhY2s+IGNhbGxiYWNrID0gbUNhbGxiYWNrLnByb21vdGUoKTsKLSAgICBpZiAoY2FsbGJhY2sgPT0gMCkgcmV0dXJuOwotICAgIEFMT0dWKCJhc3luY0NhbGxiYWNrIG9uRHJhaW5SZWFkeSIpOwotICAgIGNhbGxiYWNrLT5vbkRyYWluUmVhZHkoKTsKLX0KLQotdm9pZCBTdHJlYW1PdXRIYWxIaWRsOjpvbkVycm9yKCkgewotICAgIHNwPFN0cmVhbU91dEhhbEludGVyZmFjZUNhbGxiYWNrPiBjYWxsYmFjayA9IG1DYWxsYmFjay5wcm9tb3RlKCk7Ci0gICAgaWYgKGNhbGxiYWNrID09IDApIHJldHVybjsKLSAgICBBTE9HVigiYXN5bmNDYWxsYmFjayBvbkVycm9yIik7Ci0gICAgY2FsbGJhY2stPm9uRXJyb3IoKTsKLX0KLQotCi1TdHJlYW1JbkhhbEhpZGw6OlN0cmVhbUluSGFsSGlkbChjb25zdCBzcDxJU3RyZWFtSW4+JiBzdHJlYW0pCi0gICAgICAgIDogU3RyZWFtSGFsSGlkbChzdHJlYW0uZ2V0KCkpLCBtU3RyZWFtKHN0cmVhbSksIG1SZWFkZXJDbGllbnQoMCksIG1FZkdyb3VwKG51bGxwdHIpIHsKLX0KLQotU3RyZWFtSW5IYWxIaWRsOjp+U3RyZWFtSW5IYWxIaWRsKCkgewotICAgIGlmIChtU3RyZWFtICE9IDApIHsKLSAgICAgICAgcHJvY2Vzc1JldHVybigiY2xvc2UiLCBtU3RyZWFtLT5jbG9zZSgpKTsKLSAgICAgICAgbVN0cmVhbS5jbGVhcigpOwotICAgICAgICBoYXJkd2FyZTo6SVBDVGhyZWFkU3RhdGU6OnNlbGYoKS0+Zmx1c2hDb21tYW5kcygpOwotICAgIH0KLSAgICBpZiAobUVmR3JvdXApIHsKLSAgICAgICAgRXZlbnRGbGFnOjpkZWxldGVFdmVudEZsYWcoJm1FZkdyb3VwKTsKLSAgICB9Ci19Ci0KLXN0YXR1c190IFN0cmVhbUluSGFsSGlkbDo6Z2V0RnJhbWVTaXplKHNpemVfdCAqc2l6ZSkgewotICAgIGlmIChtU3RyZWFtID09IDApIHJldHVybiBOT19JTklUOwotICAgIHJldHVybiBwcm9jZXNzUmV0dXJuKCJnZXRGcmFtZVNpemUiLCBtU3RyZWFtLT5nZXRGcmFtZVNpemUoKSwgc2l6ZSk7Ci19Ci0KLXN0YXR1c190IFN0cmVhbUluSGFsSGlkbDo6c2V0R2FpbihmbG9hdCBnYWluKSB7Ci0gICAgaWYgKG1TdHJlYW0gPT0gMCkgcmV0dXJuIE5PX0lOSVQ7Ci0gICAgcmV0dXJuIHByb2Nlc3NSZXR1cm4oInNldEdhaW4iLCBtU3RyZWFtLT5zZXRHYWluKGdhaW4pKTsKLX0KLQotc3RhdHVzX3QgU3RyZWFtSW5IYWxIaWRsOjpyZWFkKHZvaWQgKmJ1ZmZlciwgc2l6ZV90IGJ5dGVzLCBzaXplX3QgKnJlYWQpIHsKLSAgICBpZiAobVN0cmVhbSA9PSAwKSByZXR1cm4gTk9fSU5JVDsKLSAgICAqcmVhZCA9IDA7Ci0KLSAgICBpZiAoYnl0ZXMgPT0gMCAmJiAhbURhdGFNUSkgewotICAgICAgICAvLyBDYW4ndCBkZXRlcm1pbmUgdGhlIHNpemUgZm9yIHRoZSBNUSBidWZmZXIuIFdhaXQgZm9yIGEgbm9uLWVtcHR5IHJlYWQgcmVxdWVzdC4KLSAgICAgICAgcmV0dXJuIE9LOwotICAgIH0KLQotICAgIHN0YXR1c190IHN0YXR1czsKLSAgICBpZiAoIW1EYXRhTVEgJiYgKHN0YXR1cyA9IHByZXBhcmVGb3JSZWFkaW5nKGJ5dGVzKSkgIT0gT0spIHsKLSAgICAgICAgcmV0dXJuIHN0YXR1czsKLSAgICB9Ci0KLSAgICBSZWFkUGFyYW1ldGVycyBwYXJhbXM7Ci0gICAgcGFyYW1zLmNvbW1hbmQgPSBSZWFkQ29tbWFuZDo6UkVBRDsKLSAgICBwYXJhbXMucGFyYW1zLnJlYWQgPSBieXRlczsKLSAgICBzdGF0dXMgPSBjYWxsUmVhZGVyVGhyZWFkKHBhcmFtcywgInJlYWQiLAotICAgICAgICAgICAgWyZdKGNvbnN0IFJlYWRTdGF0dXMmIHJlYWRTdGF0dXMpIHsKLSAgICAgICAgICAgICAgICBjb25zdCBzaXplX3QgYXZhaWxUb1JlYWQgPSBtRGF0YU1RLT5hdmFpbGFibGVUb1JlYWQoKTsKLSAgICAgICAgICAgICAgICBpZiAoIW1EYXRhTVEtPnJlYWQoc3RhdGljX2Nhc3Q8dWludDhfdCo+KGJ1ZmZlciksIHN0ZDo6bWluKGJ5dGVzLCBhdmFpbFRvUmVhZCkpKSB7Ci0gICAgICAgICAgICAgICAgICAgIEFMT0dFKCJkYXRhIG1lc3NhZ2UgcXVldWUgcmVhZCBmYWlsZWQgZm9yIFwicmVhZFwiIik7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIEFMT0dXX0lGKGF2YWlsVG9SZWFkICE9IHJlYWRTdGF0dXMucmVwbHkucmVhZCwKLSAgICAgICAgICAgICAgICAgICAgICAgICJIQUwgcmVhZCByZXBvcnQgaW5jb25zaXN0ZW50OiBtcSA9ICVkLCBzdGF0dXMgPSAlZCIsCi0gICAgICAgICAgICAgICAgICAgICAgICAoaW50MzJfdClhdmFpbFRvUmVhZCwgKGludDMyX3QpcmVhZFN0YXR1cy5yZXBseS5yZWFkKTsKLSAgICAgICAgICAgICAgICAqcmVhZCA9IHJlYWRTdGF0dXMucmVwbHkucmVhZDsKLSAgICAgICAgICAgIH0pOwotICAgIG1TdHJlYW1Qb3dlckxvZy5sb2coYnVmZmVyLCAqcmVhZCk7Ci0gICAgcmV0dXJuIHN0YXR1czsKLX0KLQotc3RhdHVzX3QgU3RyZWFtSW5IYWxIaWRsOjpjYWxsUmVhZGVyVGhyZWFkKAotICAgICAgICBjb25zdCBSZWFkUGFyYW1ldGVycyYgcGFyYW1zLCBjb25zdCBjaGFyKiBjbWROYW1lLAotICAgICAgICBTdHJlYW1JbkhhbEhpZGw6OlJlYWRlckNhbGxiYWNrIGNhbGxiYWNrKSB7Ci0gICAgaWYgKCFtQ29tbWFuZE1RLT53cml0ZSgmcGFyYW1zKSkgewotICAgICAgICBBTE9HVygiY29tbWFuZCBtZXNzYWdlIHF1ZXVlIHdyaXRlIGZhaWxlZCIpOwotICAgICAgICByZXR1cm4gLUVBR0FJTjsKLSAgICB9Ci0gICAgbUVmR3JvdXAtPndha2Uoc3RhdGljX2Nhc3Q8dWludDMyX3Q+KE1lc3NhZ2VRdWV1ZUZsYWdCaXRzOjpOT1RfRlVMTCkpOwotCi0gICAgLy8gVE9ETzogUmVtb3ZlIG1hbnVhbCBldmVudCBmbGFnIGhhbmRsaW5nIG9uY2UgYmxvY2tpbmcgTVEgaXMgaW1wbGVtZW50ZWQuIGIvMzM4MTU0MjIKLSAgICB1aW50MzJfdCBlZlN0YXRlID0gMDsKLXJldHJ5OgotICAgIHN0YXR1c190IHJldCA9IG1FZkdyb3VwLT53YWl0KHN0YXRpY19jYXN0PHVpbnQzMl90PihNZXNzYWdlUXVldWVGbGFnQml0czo6Tk9UX0VNUFRZKSwgJmVmU3RhdGUpOwotICAgIGlmIChlZlN0YXRlICYgc3RhdGljX2Nhc3Q8dWludDMyX3Q+KE1lc3NhZ2VRdWV1ZUZsYWdCaXRzOjpOT1RfRU1QVFkpKSB7Ci0gICAgICAgIFJlYWRTdGF0dXMgcmVhZFN0YXR1czsKLSAgICAgICAgcmVhZFN0YXR1cy5yZXR2YWwgPSBSZXN1bHQ6Ok5PVF9JTklUSUFMSVpFRDsKLSAgICAgICAgaWYgKCFtU3RhdHVzTVEtPnJlYWQoJnJlYWRTdGF0dXMpKSB7Ci0gICAgICAgICAgICBBTE9HRSgic3RhdHVzIG1lc3NhZ2UgcmVhZCBmYWlsZWQgZm9yIFwiJXNcIiIsIGNtZE5hbWUpOwotICAgICAgICB9Ci0gICAgICAgICBpZiAocmVhZFN0YXR1cy5yZXR2YWwgPT0gUmVzdWx0OjpPSykgewotICAgICAgICAgICAgcmV0ID0gT0s7Ci0gICAgICAgICAgICBjYWxsYmFjayhyZWFkU3RhdHVzKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIHJldCA9IHByb2Nlc3NSZXR1cm4oY21kTmFtZSwgcmVhZFN0YXR1cy5yZXR2YWwpOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiByZXQ7Ci0gICAgfQotICAgIGlmIChyZXQgPT0gLUVBR0FJTiB8fCByZXQgPT0gLUVJTlRSKSB7Ci0gICAgICAgIC8vIFNwdXJpb3VzIHdha2V1cC4gVGhpcyBub3JtYWxseSByZXRyaWVzIG5vIG1vcmUgdGhhbiBvbmNlLgotICAgICAgICBnb3RvIHJldHJ5OwotICAgIH0KLSAgICByZXR1cm4gcmV0OwotfQotCi1zdGF0dXNfdCBTdHJlYW1JbkhhbEhpZGw6OnByZXBhcmVGb3JSZWFkaW5nKHNpemVfdCBidWZmZXJTaXplKSB7Ci0gICAgc3RkOjp1bmlxdWVfcHRyPENvbW1hbmRNUT4gdGVtcENvbW1hbmRNUTsKLSAgICBzdGQ6OnVuaXF1ZV9wdHI8RGF0YU1RPiB0ZW1wRGF0YU1ROwotICAgIHN0ZDo6dW5pcXVlX3B0cjxTdGF0dXNNUT4gdGVtcFN0YXR1c01ROwotICAgIFJlc3VsdCByZXR2YWw7Ci0gICAgcGlkX3QgaGFsVGhyZWFkUGlkLCBoYWxUaHJlYWRUaWQ7Ci0gICAgUmV0dXJuPHZvaWQ+IHJldCA9IG1TdHJlYW0tPnByZXBhcmVGb3JSZWFkaW5nKAotICAgICAgICAgICAgMSwgYnVmZmVyU2l6ZSwKLSAgICAgICAgICAgIFsmXShSZXN1bHQgciwKLSAgICAgICAgICAgICAgICAgICAgY29uc3QgQ29tbWFuZE1ROjpEZXNjcmlwdG9yJiBjb21tYW5kTVEsCi0gICAgICAgICAgICAgICAgICAgIGNvbnN0IERhdGFNUTo6RGVzY3JpcHRvciYgZGF0YU1RLAotICAgICAgICAgICAgICAgICAgICBjb25zdCBTdGF0dXNNUTo6RGVzY3JpcHRvciYgc3RhdHVzTVEsCi0gICAgICAgICAgICAgICAgICAgIGNvbnN0IFRocmVhZEluZm8mIGhhbFRocmVhZEluZm8pIHsKLSAgICAgICAgICAgICAgICByZXR2YWwgPSByOwotICAgICAgICAgICAgICAgIGlmIChyZXR2YWwgPT0gUmVzdWx0OjpPSykgewotICAgICAgICAgICAgICAgICAgICB0ZW1wQ29tbWFuZE1RLnJlc2V0KG5ldyBDb21tYW5kTVEoY29tbWFuZE1RKSk7Ci0gICAgICAgICAgICAgICAgICAgIHRlbXBEYXRhTVEucmVzZXQobmV3IERhdGFNUShkYXRhTVEpKTsKLSAgICAgICAgICAgICAgICAgICAgdGVtcFN0YXR1c01RLnJlc2V0KG5ldyBTdGF0dXNNUShzdGF0dXNNUSkpOwotICAgICAgICAgICAgICAgICAgICBpZiAodGVtcERhdGFNUS0+aXNWYWxpZCgpICYmIHRlbXBEYXRhTVEtPmdldEV2ZW50RmxhZ1dvcmQoKSkgewotICAgICAgICAgICAgICAgICAgICAgICAgRXZlbnRGbGFnOjpjcmVhdGVFdmVudEZsYWcodGVtcERhdGFNUS0+Z2V0RXZlbnRGbGFnV29yZCgpLCAmbUVmR3JvdXApOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIGhhbFRocmVhZFBpZCA9IGhhbFRocmVhZEluZm8ucGlkOwotICAgICAgICAgICAgICAgICAgICBoYWxUaHJlYWRUaWQgPSBoYWxUaHJlYWRJbmZvLnRpZDsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9KTsKLSAgICBpZiAoIXJldC5pc09rKCkgfHwgcmV0dmFsICE9IFJlc3VsdDo6T0spIHsKLSAgICAgICAgcmV0dXJuIHByb2Nlc3NSZXR1cm4oInByZXBhcmVGb3JSZWFkaW5nIiwgcmV0LCByZXR2YWwpOwotICAgIH0KLSAgICBpZiAoIXRlbXBDb21tYW5kTVEgfHwgIXRlbXBDb21tYW5kTVEtPmlzVmFsaWQoKSB8fAotICAgICAgICAgICAgIXRlbXBEYXRhTVEgfHwgIXRlbXBEYXRhTVEtPmlzVmFsaWQoKSB8fAotICAgICAgICAgICAgIXRlbXBTdGF0dXNNUSB8fCAhdGVtcFN0YXR1c01RLT5pc1ZhbGlkKCkgfHwKLSAgICAgICAgICAgICFtRWZHcm91cCkgewotICAgICAgICBBTE9HRV9JRighdGVtcENvbW1hbmRNUSwgIkZhaWxlZCB0byBvYnRhaW4gY29tbWFuZCBtZXNzYWdlIHF1ZXVlIGZvciB3cml0aW5nIik7Ci0gICAgICAgIEFMT0dFX0lGKHRlbXBDb21tYW5kTVEgJiYgIXRlbXBDb21tYW5kTVEtPmlzVmFsaWQoKSwKLSAgICAgICAgICAgICAgICAiQ29tbWFuZCBtZXNzYWdlIHF1ZXVlIGZvciB3cml0aW5nIGlzIGludmFsaWQiKTsKLSAgICAgICAgQUxPR0VfSUYoIXRlbXBEYXRhTVEsICJGYWlsZWQgdG8gb2J0YWluIGRhdGEgbWVzc2FnZSBxdWV1ZSBmb3IgcmVhZGluZyIpOwotICAgICAgICBBTE9HRV9JRih0ZW1wRGF0YU1RICYmICF0ZW1wRGF0YU1RLT5pc1ZhbGlkKCksICJEYXRhIG1lc3NhZ2UgcXVldWUgZm9yIHJlYWRpbmcgaXMgaW52YWxpZCIpOwotICAgICAgICBBTE9HRV9JRighdGVtcFN0YXR1c01RLCAiRmFpbGVkIHRvIG9idGFpbiBzdGF0dXMgbWVzc2FnZSBxdWV1ZSBmb3IgcmVhZGluZyIpOwotICAgICAgICBBTE9HRV9JRih0ZW1wU3RhdHVzTVEgJiYgIXRlbXBTdGF0dXNNUS0+aXNWYWxpZCgpLAotICAgICAgICAgICAgICAgICJTdGF0dXMgbWVzc2FnZSBxdWV1ZSBmb3IgcmVhZGluZyBpcyBpbnZhbGlkIik7Ci0gICAgICAgIEFMT0dFX0lGKCFtRWZHcm91cCwgIkV2ZW50IGZsYWcgY3JlYXRpb24gZm9yIHJlYWRpbmcgZmFpbGVkIik7Ci0gICAgICAgIHJldHVybiBOT19JTklUOwotICAgIH0KLSAgICByZXF1ZXN0SGFsVGhyZWFkUHJpb3JpdHkoaGFsVGhyZWFkUGlkLCBoYWxUaHJlYWRUaWQpOwotCi0gICAgbUNvbW1hbmRNUSA9IHN0ZDo6bW92ZSh0ZW1wQ29tbWFuZE1RKTsKLSAgICBtRGF0YU1RID0gc3RkOjptb3ZlKHRlbXBEYXRhTVEpOwotICAgIG1TdGF0dXNNUSA9IHN0ZDo6bW92ZSh0ZW1wU3RhdHVzTVEpOwotICAgIG1SZWFkZXJDbGllbnQgPSBnZXR0aWQoKTsKLSAgICByZXR1cm4gT0s7Ci19Ci0KLXN0YXR1c190IFN0cmVhbUluSGFsSGlkbDo6Z2V0SW5wdXRGcmFtZXNMb3N0KHVpbnQzMl90ICpmcmFtZXNMb3N0KSB7Ci0gICAgaWYgKG1TdHJlYW0gPT0gMCkgcmV0dXJuIE5PX0lOSVQ7Ci0gICAgcmV0dXJuIHByb2Nlc3NSZXR1cm4oImdldElucHV0RnJhbWVzTG9zdCIsIG1TdHJlYW0tPmdldElucHV0RnJhbWVzTG9zdCgpLCBmcmFtZXNMb3N0KTsKLX0KLQotc3RhdHVzX3QgU3RyZWFtSW5IYWxIaWRsOjpnZXRDYXB0dXJlUG9zaXRpb24oaW50NjRfdCAqZnJhbWVzLCBpbnQ2NF90ICp0aW1lKSB7Ci0gICAgaWYgKG1TdHJlYW0gPT0gMCkgcmV0dXJuIE5PX0lOSVQ7Ci0gICAgaWYgKG1SZWFkZXJDbGllbnQgPT0gZ2V0dGlkKCkgJiYgbUNvbW1hbmRNUSkgewotICAgICAgICBSZWFkUGFyYW1ldGVycyBwYXJhbXM7Ci0gICAgICAgIHBhcmFtcy5jb21tYW5kID0gUmVhZENvbW1hbmQ6OkdFVF9DQVBUVVJFX1BPU0lUSU9OOwotICAgICAgICByZXR1cm4gY2FsbFJlYWRlclRocmVhZChwYXJhbXMsICJnZXRDYXB0dXJlUG9zaXRpb24iLAotICAgICAgICAgICAgICAgIFsmXShjb25zdCBSZWFkU3RhdHVzJiByZWFkU3RhdHVzKSB7Ci0gICAgICAgICAgICAgICAgICAgICpmcmFtZXMgPSByZWFkU3RhdHVzLnJlcGx5LmNhcHR1cmVQb3NpdGlvbi5mcmFtZXM7Ci0gICAgICAgICAgICAgICAgICAgICp0aW1lID0gcmVhZFN0YXR1cy5yZXBseS5jYXB0dXJlUG9zaXRpb24udGltZTsKLSAgICAgICAgICAgICAgICB9KTsKLSAgICB9IGVsc2UgewotICAgICAgICBSZXN1bHQgcmV0dmFsOwotICAgICAgICBSZXR1cm48dm9pZD4gcmV0ID0gbVN0cmVhbS0+Z2V0Q2FwdHVyZVBvc2l0aW9uKAotICAgICAgICAgICAgICAgIFsmXShSZXN1bHQgciwgdWludDY0X3QgaGlkbEZyYW1lcywgdWludDY0X3QgaGlkbFRpbWUpIHsKLSAgICAgICAgICAgICAgICAgICAgcmV0dmFsID0gcjsKLSAgICAgICAgICAgICAgICAgICAgaWYgKHJldHZhbCA9PSBSZXN1bHQ6Ok9LKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAqZnJhbWVzID0gaGlkbEZyYW1lczsKLSAgICAgICAgICAgICAgICAgICAgICAgICp0aW1lID0gaGlkbFRpbWU7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9KTsKLSAgICAgICAgcmV0dXJuIHByb2Nlc3NSZXR1cm4oImdldENhcHR1cmVQb3NpdGlvbiIsIHJldCwgcmV0dmFsKTsKLSAgICB9Ci19Ci0KLXN0YXR1c190IFN0cmVhbUluSGFsSGlkbDo6Z2V0QWN0aXZlTWljcm9waG9uZXMoCi0gICAgICAgIHN0ZDo6dmVjdG9yPG1lZGlhOjpNaWNyb3Bob25lSW5mbz4gKm1pY3JvcGhvbmVzIF9fdW51c2VkKSB7Ci0gICAgaWYgKG1TdHJlYW0gPT0gMCkgcmV0dXJuIE5PX0lOSVQ7Ci0gICAgcmV0dXJuIElOVkFMSURfT1BFUkFUSU9OOwotfQotCi1zdGF0dXNfdCBTdHJlYW1JbkhhbEhpZGw6OnVwZGF0ZVNpbmtNZXRhZGF0YShjb25zdCBTaW5rTWV0YWRhdGEmIC8qIHNpbmtNZXRhZGF0YSAqLykgewotICAgIC8vIEF1ZGlvIEhBTCBWMi4wIGRvZXMgbm90IHN1cHBvcnQgcHJvcGFnYXRpbmcgc2luayBtZXRhZGF0YQotICAgIHJldHVybiBJTlZBTElEX09QRVJBVElPTjsKLX0KLQotfSAvLyBuYW1lc3BhY2UgYW5kcm9pZApkaWZmIC0tZ2l0IGEvbWVkaWEvbGliYXVkaW9oYWwvMi4wL1N0cmVhbUhhbEhpZGwuaCBiL21lZGlhL2xpYmF1ZGlvaGFsLzIuMC9TdHJlYW1IYWxIaWRsLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGViYWQ4YWUuLjAwMDAwMDAKLS0tIGEvbWVkaWEvbGliYXVkaW9oYWwvMi4wL1N0cmVhbUhhbEhpZGwuaAorKysgL2Rldi9udWxsCkBAIC0xLDI0OCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDE2IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKLSAqCi0gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKLSAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KLSAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotICoKLSAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0gKgotICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQotICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKLSAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgotICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAotICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCi0gKi8KLQotI2lmbmRlZiBBTkRST0lEX0hBUkRXQVJFX1NUUkVBTV9IQUxfSElETF9ICi0jZGVmaW5lIEFORFJPSURfSEFSRFdBUkVfU1RSRUFNX0hBTF9ISURMX0gKLQotI2luY2x1ZGUgPGF0b21pYz4KLQotI2luY2x1ZGUgPGFuZHJvaWQvaGFyZHdhcmUvYXVkaW8vMi4wL0lTdHJlYW0uaD4KLSNpbmNsdWRlIDxhbmRyb2lkL2hhcmR3YXJlL2F1ZGlvLzIuMC9JU3RyZWFtSW4uaD4KLSNpbmNsdWRlIDxhbmRyb2lkL2hhcmR3YXJlL2F1ZGlvLzIuMC9JU3RyZWFtT3V0Lmg+Ci0jaW5jbHVkZSA8Zm1xL0V2ZW50RmxhZy5oPgotI2luY2x1ZGUgPGZtcS9NZXNzYWdlUXVldWUuaD4KLSNpbmNsdWRlIDxtZWRpYS9hdWRpb2hhbC9TdHJlYW1IYWxJbnRlcmZhY2UuaD4KLQotI2luY2x1ZGUgIkNvbnZlcnNpb25IZWxwZXJIaWRsLmgiCi0jaW5jbHVkZSAiU3RyZWFtUG93ZXJMb2cuaCIKLQotdXNpbmcgOjphbmRyb2lkOjpoYXJkd2FyZTo6YXVkaW86OlYyXzA6OklTdHJlYW07Ci11c2luZyA6OmFuZHJvaWQ6OmhhcmR3YXJlOjphdWRpbzo6VjJfMDo6SVN0cmVhbUluOwotdXNpbmcgOjphbmRyb2lkOjpoYXJkd2FyZTo6YXVkaW86OlYyXzA6OklTdHJlYW1PdXQ7Ci11c2luZyA6OmFuZHJvaWQ6OmhhcmR3YXJlOjpFdmVudEZsYWc7Ci11c2luZyA6OmFuZHJvaWQ6OmhhcmR3YXJlOjpNZXNzYWdlUXVldWU7Ci11c2luZyA6OmFuZHJvaWQ6OmhhcmR3YXJlOjpSZXR1cm47Ci11c2luZyBSZWFkUGFyYW1ldGVycyA9IDo6YW5kcm9pZDo6aGFyZHdhcmU6OmF1ZGlvOjpWMl8wOjpJU3RyZWFtSW46OlJlYWRQYXJhbWV0ZXJzOwotdXNpbmcgUmVhZFN0YXR1cyA9IDo6YW5kcm9pZDo6aGFyZHdhcmU6OmF1ZGlvOjpWMl8wOjpJU3RyZWFtSW46OlJlYWRTdGF0dXM7Ci11c2luZyBXcml0ZUNvbW1hbmQgPSA6OmFuZHJvaWQ6OmhhcmR3YXJlOjphdWRpbzo6VjJfMDo6SVN0cmVhbU91dDo6V3JpdGVDb21tYW5kOwotdXNpbmcgV3JpdGVTdGF0dXMgPSA6OmFuZHJvaWQ6OmhhcmR3YXJlOjphdWRpbzo6VjJfMDo6SVN0cmVhbU91dDo6V3JpdGVTdGF0dXM7Ci0KLW5hbWVzcGFjZSBhbmRyb2lkIHsKLQotY2xhc3MgRGV2aWNlSGFsSGlkbDsKLQotY2xhc3MgU3RyZWFtSGFsSGlkbCA6IHB1YmxpYyB2aXJ0dWFsIFN0cmVhbUhhbEludGVyZmFjZSwgcHVibGljIENvbnZlcnNpb25IZWxwZXJIaWRsCi17Ci0gIHB1YmxpYzoKLSAgICAvLyBSZXR1cm4gdGhlIHNhbXBsaW5nIHJhdGUgaW4gSHogLSBlZy4gNDQxMDAuCi0gICAgdmlydHVhbCBzdGF0dXNfdCBnZXRTYW1wbGVSYXRlKHVpbnQzMl90ICpyYXRlKTsKLQotICAgIC8vIFJldHVybiBzaXplIG9mIGlucHV0L291dHB1dCBidWZmZXIgaW4gYnl0ZXMgZm9yIHRoaXMgc3RyZWFtIC0gZWcuIDQ4MDAuCi0gICAgdmlydHVhbCBzdGF0dXNfdCBnZXRCdWZmZXJTaXplKHNpemVfdCAqc2l6ZSk7Ci0KLSAgICAvLyBSZXR1cm4gdGhlIGNoYW5uZWwgbWFzay4KLSAgICB2aXJ0dWFsIHN0YXR1c190IGdldENoYW5uZWxNYXNrKGF1ZGlvX2NoYW5uZWxfbWFza190ICptYXNrKTsKLQotICAgIC8vIFJldHVybiB0aGUgYXVkaW8gZm9ybWF0IC0gZS5nLiBBVURJT19GT1JNQVRfUENNXzE2X0JJVC4KLSAgICB2aXJ0dWFsIHN0YXR1c190IGdldEZvcm1hdChhdWRpb19mb3JtYXRfdCAqZm9ybWF0KTsKLQotICAgIC8vIENvbnZlbmllbmNlIG1ldGhvZC4KLSAgICB2aXJ0dWFsIHN0YXR1c190IGdldEF1ZGlvUHJvcGVydGllcygKLSAgICAgICAgICAgIHVpbnQzMl90ICpzYW1wbGVSYXRlLCBhdWRpb19jaGFubmVsX21hc2tfdCAqbWFzaywgYXVkaW9fZm9ybWF0X3QgKmZvcm1hdCk7Ci0KLSAgICAvLyBTZXQgYXVkaW8gc3RyZWFtIHBhcmFtZXRlcnMuCi0gICAgdmlydHVhbCBzdGF0dXNfdCBzZXRQYXJhbWV0ZXJzKGNvbnN0IFN0cmluZzgmIGt2UGFpcnMpOwotCi0gICAgLy8gR2V0IGF1ZGlvIHN0cmVhbSBwYXJhbWV0ZXJzLgotICAgIHZpcnR1YWwgc3RhdHVzX3QgZ2V0UGFyYW1ldGVycyhjb25zdCBTdHJpbmc4JiBrZXlzLCBTdHJpbmc4ICp2YWx1ZXMpOwotCi0gICAgLy8gQWRkIG9yIHJlbW92ZSB0aGUgZWZmZWN0IG9uIHRoZSBzdHJlYW0uCi0gICAgdmlydHVhbCBzdGF0dXNfdCBhZGRFZmZlY3Qoc3A8RWZmZWN0SGFsSW50ZXJmYWNlPiBlZmZlY3QpOwotICAgIHZpcnR1YWwgc3RhdHVzX3QgcmVtb3ZlRWZmZWN0KHNwPEVmZmVjdEhhbEludGVyZmFjZT4gZWZmZWN0KTsKLQotICAgIC8vIFB1dCB0aGUgYXVkaW8gaGFyZHdhcmUgaW5wdXQvb3V0cHV0IGludG8gc3RhbmRieSBtb2RlLgotICAgIHZpcnR1YWwgc3RhdHVzX3Qgc3RhbmRieSgpOwotCi0gICAgdmlydHVhbCBzdGF0dXNfdCBkdW1wKGludCBmZCk7Ci0KLSAgICAvLyBTdGFydCBhIHN0cmVhbSBvcGVyYXRpbmcgaW4gbW1hcCBtb2RlLgotICAgIHZpcnR1YWwgc3RhdHVzX3Qgc3RhcnQoKTsKLQotICAgIC8vIFN0b3AgYSBzdHJlYW0gb3BlcmF0aW5nIGluIG1tYXAgbW9kZS4KLSAgICB2aXJ0dWFsIHN0YXR1c190IHN0b3AoKTsKLQotICAgIC8vIFJldHJpZXZlIGluZm9ybWF0aW9uIG9uIHRoZSBkYXRhIGJ1ZmZlciBpbiBtbWFwIG1vZGUuCi0gICAgdmlydHVhbCBzdGF0dXNfdCBjcmVhdGVNbWFwQnVmZmVyKGludDMyX3QgbWluU2l6ZUZyYW1lcywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGF1ZGlvX21tYXBfYnVmZmVyX2luZm8gKmluZm8pOwotCi0gICAgLy8gR2V0IGN1cnJlbnQgcmVhZC93cml0ZSBwb3NpdGlvbiBpbiB0aGUgbW1hcCBidWZmZXIKLSAgICB2aXJ0dWFsIHN0YXR1c190IGdldE1tYXBQb3NpdGlvbihzdHJ1Y3QgYXVkaW9fbW1hcF9wb3NpdGlvbiAqcG9zaXRpb24pOwotCi0gICAgLy8gU2V0IHRoZSBwcmlvcml0eSBvZiB0aGUgdGhyZWFkIHRoYXQgaW50ZXJhY3RzIHdpdGggdGhlIEhBTAotICAgIC8vIChtdXN0IG1hdGNoIHRoZSBwcmlvcml0eSBvZiB0aGUgYXVkaW9mbGluZ2VyJ3MgdGhyZWFkIHRoYXQgY2FsbHMgJ3JlYWQnIC8gJ3dyaXRlJykKLSAgICB2aXJ0dWFsIHN0YXR1c190IHNldEhhbFRocmVhZFByaW9yaXR5KGludCBwcmlvcml0eSk7Ci0KLSAgcHJvdGVjdGVkOgotICAgIC8vIFN1YmNsYXNzZXMgY2FuIG5vdCBiZSBjb25zdHJ1Y3RlZCBkaXJlY3RseSBieSBjbGllbnRzLgotICAgIGV4cGxpY2l0IFN0cmVhbUhhbEhpZGwoSVN0cmVhbSAqc3RyZWFtKTsKLQotICAgIC8vIFRoZSBkZXN0cnVjdG9yIGF1dG9tYXRpY2FsbHkgY2xvc2VzIHRoZSBzdHJlYW0uCi0gICAgdmlydHVhbCB+U3RyZWFtSGFsSGlkbCgpOwotCi0gICAgc3RhdHVzX3QgZ2V0Q2FjaGVkQnVmZmVyU2l6ZShzaXplX3QgKnNpemUpOwotCi0gICAgYm9vbCByZXF1ZXN0SGFsVGhyZWFkUHJpb3JpdHkocGlkX3QgdGhyZWFkUGlkLCBwaWRfdCB0aHJlYWRJZCk7Ci0KLSAgICAvLyBtU3RyZWFtUG93ZXJMb2cgaXMgdXNlZCBmb3IgYXVkaW8gc2lnbmFsIHBvd2VyIGxvZ2dpbmcuCi0gICAgU3RyZWFtUG93ZXJMb2cgbVN0cmVhbVBvd2VyTG9nOwotCi0gIHByaXZhdGU6Ci0gICAgY29uc3QgaW50IEhBTF9USFJFQURfUFJJT1JJVFlfREVGQVVMVCA9IC0xOwotICAgIElTdHJlYW0gKm1TdHJlYW07Ci0gICAgaW50IG1IYWxUaHJlYWRQcmlvcml0eTsKLSAgICBzaXplX3QgbUNhY2hlZEJ1ZmZlclNpemU7Ci19OwotCi1jbGFzcyBTdHJlYW1PdXRIYWxIaWRsIDogcHVibGljIFN0cmVhbU91dEhhbEludGVyZmFjZSwgcHVibGljIFN0cmVhbUhhbEhpZGwgewotICBwdWJsaWM6Ci0gICAgLy8gUmV0dXJuIHRoZSBmcmFtZSBzaXplIChudW1iZXIgb2YgYnl0ZXMgcGVyIHNhbXBsZSkgb2YgYSBzdHJlYW0uCi0gICAgdmlydHVhbCBzdGF0dXNfdCBnZXRGcmFtZVNpemUoc2l6ZV90ICpzaXplKTsKLQotICAgIC8vIFJldHVybiB0aGUgYXVkaW8gaGFyZHdhcmUgZHJpdmVyIGVzdGltYXRlZCBsYXRlbmN5IGluIG1pbGxpc2Vjb25kcy4KLSAgICB2aXJ0dWFsIHN0YXR1c190IGdldExhdGVuY3kodWludDMyX3QgKmxhdGVuY3kpOwotCi0gICAgLy8gVXNlIHRoaXMgbWV0aG9kIGluIHNpdHVhdGlvbnMgd2hlcmUgYXVkaW8gbWl4aW5nIGlzIGRvbmUgaW4gdGhlIGhhcmR3YXJlLgotICAgIHZpcnR1YWwgc3RhdHVzX3Qgc2V0Vm9sdW1lKGZsb2F0IGxlZnQsIGZsb2F0IHJpZ2h0KTsKLQotICAgIC8vIFdyaXRlIGF1ZGlvIGJ1ZmZlciB0byBkcml2ZXIuCi0gICAgdmlydHVhbCBzdGF0dXNfdCB3cml0ZShjb25zdCB2b2lkICpidWZmZXIsIHNpemVfdCBieXRlcywgc2l6ZV90ICp3cml0dGVuKTsKLQotICAgIC8vIFJldHVybiB0aGUgbnVtYmVyIG9mIGF1ZGlvIGZyYW1lcyB3cml0dGVuIGJ5IHRoZSBhdWRpbyBkc3AgdG8gREFDIHNpbmNlCi0gICAgLy8gdGhlIG91dHB1dCBoYXMgZXhpdGVkIHN0YW5kYnkuCi0gICAgdmlydHVhbCBzdGF0dXNfdCBnZXRSZW5kZXJQb3NpdGlvbih1aW50MzJfdCAqZHNwRnJhbWVzKTsKLQotICAgIC8vIEdldCB0aGUgbG9jYWwgdGltZSBhdCB3aGljaCB0aGUgbmV4dCB3cml0ZSB0byB0aGUgYXVkaW8gZHJpdmVyIHdpbGwgYmUgcHJlc2VudGVkLgotICAgIHZpcnR1YWwgc3RhdHVzX3QgZ2V0TmV4dFdyaXRlVGltZXN0YW1wKGludDY0X3QgKnRpbWVzdGFtcCk7Ci0KLSAgICAvLyBTZXQgdGhlIGNhbGxiYWNrIGZvciBub3RpZnlpbmcgY29tcGxldGlvbiBvZiBub24tYmxvY2tpbmcgd3JpdGUgYW5kIGRyYWluLgotICAgIHZpcnR1YWwgc3RhdHVzX3Qgc2V0Q2FsbGJhY2sod3A8U3RyZWFtT3V0SGFsSW50ZXJmYWNlQ2FsbGJhY2s+IGNhbGxiYWNrKTsKLQotICAgIC8vIFJldHVybnMgd2hldGhlciBwYXVzZSBhbmQgcmVzdW1lIG9wZXJhdGlvbnMgYXJlIHN1cHBvcnRlZC4KLSAgICB2aXJ0dWFsIHN0YXR1c190IHN1cHBvcnRzUGF1c2VBbmRSZXN1bWUoYm9vbCAqc3VwcG9ydHNQYXVzZSwgYm9vbCAqc3VwcG9ydHNSZXN1bWUpOwotCi0gICAgLy8gTm90aWZpZXMgdG8gdGhlIGF1ZGlvIGRyaXZlciB0byByZXN1bWUgcGxheWJhY2sgZm9sbG93aW5nIGEgcGF1c2UuCi0gICAgdmlydHVhbCBzdGF0dXNfdCBwYXVzZSgpOwotCi0gICAgLy8gTm90aWZpZXMgdG8gdGhlIGF1ZGlvIGRyaXZlciB0byByZXN1bWUgcGxheWJhY2sgZm9sbG93aW5nIGEgcGF1c2UuCi0gICAgdmlydHVhbCBzdGF0dXNfdCByZXN1bWUoKTsKLQotICAgIC8vIFJldHVybnMgd2hldGhlciBkcmFpbiBvcGVyYXRpb24gaXMgc3VwcG9ydGVkLgotICAgIHZpcnR1YWwgc3RhdHVzX3Qgc3VwcG9ydHNEcmFpbihib29sICpzdXBwb3J0c0RyYWluKTsKLQotICAgIC8vIFJlcXVlc3RzIG5vdGlmaWNhdGlvbiB3aGVuIGRhdGEgYnVmZmVyZWQgYnkgdGhlIGRyaXZlci9oYXJkd2FyZSBoYXMgYmVlbiBwbGF5ZWQuCi0gICAgdmlydHVhbCBzdGF0dXNfdCBkcmFpbihib29sIGVhcmx5Tm90aWZ5KTsKLQotICAgIC8vIE5vdGlmaWVzIHRvIHRoZSBhdWRpbyBkcml2ZXIgdG8gZmx1c2ggdGhlIHF1ZXVlZCBkYXRhLgotICAgIHZpcnR1YWwgc3RhdHVzX3QgZmx1c2goKTsKLQotICAgIC8vIFJldHVybiBhIHJlY2VudCBjb3VudCBvZiB0aGUgbnVtYmVyIG9mIGF1ZGlvIGZyYW1lcyBwcmVzZW50ZWQgdG8gYW4gZXh0ZXJuYWwgb2JzZXJ2ZXIuCi0gICAgdmlydHVhbCBzdGF0dXNfdCBnZXRQcmVzZW50YXRpb25Qb3NpdGlvbih1aW50NjRfdCAqZnJhbWVzLCBzdHJ1Y3QgdGltZXNwZWMgKnRpbWVzdGFtcCk7Ci0KLSAgICAvLyBDYWxsZWQgd2hlbiB0aGUgbWV0YWRhdGEgb2YgdGhlIHN0cmVhbSdzIHNvdXJjZSBoYXMgYmVlbiBjaGFuZ2VkLgotICAgIHN0YXR1c190IHVwZGF0ZVNvdXJjZU1ldGFkYXRhKGNvbnN0IFNvdXJjZU1ldGFkYXRhJiBzb3VyY2VNZXRhZGF0YSkgb3ZlcnJpZGU7Ci0KLSAgICAvLyBNZXRob2RzIHVzZWQgYnkgU3RyZWFtT3V0Q2FsbGJhY2sgKEhJREwpLgotICAgIHZvaWQgb25Xcml0ZVJlYWR5KCk7Ci0gICAgdm9pZCBvbkRyYWluUmVhZHkoKTsKLSAgICB2b2lkIG9uRXJyb3IoKTsKLQotICBwcml2YXRlOgotICAgIGZyaWVuZCBjbGFzcyBEZXZpY2VIYWxIaWRsOwotICAgIHR5cGVkZWYgTWVzc2FnZVF1ZXVlPFdyaXRlQ29tbWFuZCwgaGFyZHdhcmU6OmtTeW5jaHJvbml6ZWRSZWFkV3JpdGU+IENvbW1hbmRNUTsKLSAgICB0eXBlZGVmIE1lc3NhZ2VRdWV1ZTx1aW50OF90LCBoYXJkd2FyZTo6a1N5bmNocm9uaXplZFJlYWRXcml0ZT4gRGF0YU1ROwotICAgIHR5cGVkZWYgTWVzc2FnZVF1ZXVlPFdyaXRlU3RhdHVzLCBoYXJkd2FyZTo6a1N5bmNocm9uaXplZFJlYWRXcml0ZT4gU3RhdHVzTVE7Ci0KLSAgICB3cDxTdHJlYW1PdXRIYWxJbnRlcmZhY2VDYWxsYmFjaz4gbUNhbGxiYWNrOwotICAgIHNwPElTdHJlYW1PdXQ+IG1TdHJlYW07Ci0gICAgc3RkOjp1bmlxdWVfcHRyPENvbW1hbmRNUT4gbUNvbW1hbmRNUTsKLSAgICBzdGQ6OnVuaXF1ZV9wdHI8RGF0YU1RPiBtRGF0YU1ROwotICAgIHN0ZDo6dW5pcXVlX3B0cjxTdGF0dXNNUT4gbVN0YXR1c01ROwotICAgIHN0ZDo6YXRvbWljPHBpZF90PiBtV3JpdGVyQ2xpZW50OwotICAgIEV2ZW50RmxhZyogbUVmR3JvdXA7Ci0KLSAgICAvLyBDYW4gbm90IGJlIGNvbnN0cnVjdGVkIGRpcmVjdGx5IGJ5IGNsaWVudHMuCi0gICAgU3RyZWFtT3V0SGFsSGlkbChjb25zdCBzcDxJU3RyZWFtT3V0PiYgc3RyZWFtKTsKLQotICAgIHZpcnR1YWwgflN0cmVhbU91dEhhbEhpZGwoKTsKLQotICAgIHVzaW5nIFdyaXRlckNhbGxiYWNrID0gc3RkOjpmdW5jdGlvbjx2b2lkKGNvbnN0IFdyaXRlU3RhdHVzJiB3cml0ZVN0YXR1cyk+OwotICAgIHN0YXR1c190IGNhbGxXcml0ZXJUaHJlYWQoCi0gICAgICAgICAgICBXcml0ZUNvbW1hbmQgY21kLCBjb25zdCBjaGFyKiBjbWROYW1lLAotICAgICAgICAgICAgY29uc3QgdWludDhfdCogZGF0YSwgc2l6ZV90IGRhdGFTaXplLCBXcml0ZXJDYWxsYmFjayBjYWxsYmFjayk7Ci0gICAgc3RhdHVzX3QgcHJlcGFyZUZvcldyaXRpbmcoc2l6ZV90IGJ1ZmZlclNpemUpOwotfTsKLQotY2xhc3MgU3RyZWFtSW5IYWxIaWRsIDogcHVibGljIFN0cmVhbUluSGFsSW50ZXJmYWNlLCBwdWJsaWMgU3RyZWFtSGFsSGlkbCB7Ci0gIHB1YmxpYzoKLSAgICAvLyBSZXR1cm4gdGhlIGZyYW1lIHNpemUgKG51bWJlciBvZiBieXRlcyBwZXIgc2FtcGxlKSBvZiBhIHN0cmVhbS4KLSAgICB2aXJ0dWFsIHN0YXR1c190IGdldEZyYW1lU2l6ZShzaXplX3QgKnNpemUpOwotCi0gICAgLy8gU2V0IHRoZSBpbnB1dCBnYWluIGZvciB0aGUgYXVkaW8gZHJpdmVyLgotICAgIHZpcnR1YWwgc3RhdHVzX3Qgc2V0R2FpbihmbG9hdCBnYWluKTsKLQotICAgIC8vIFJlYWQgYXVkaW8gYnVmZmVyIGluIGZyb20gZHJpdmVyLgotICAgIHZpcnR1YWwgc3RhdHVzX3QgcmVhZCh2b2lkICpidWZmZXIsIHNpemVfdCBieXRlcywgc2l6ZV90ICpyZWFkKTsKLQotICAgIC8vIFJldHVybiB0aGUgYW1vdW50IG9mIGlucHV0IGZyYW1lcyBsb3N0IGluIHRoZSBhdWRpbyBkcml2ZXIuCi0gICAgdmlydHVhbCBzdGF0dXNfdCBnZXRJbnB1dEZyYW1lc0xvc3QodWludDMyX3QgKmZyYW1lc0xvc3QpOwotCi0gICAgLy8gUmV0dXJuIGEgcmVjZW50IGNvdW50IG9mIHRoZSBudW1iZXIgb2YgYXVkaW8gZnJhbWVzIHJlY2VpdmVkIGFuZAotICAgIC8vIHRoZSBjbG9jayB0aW1lIGFzc29jaWF0ZWQgd2l0aCB0aGF0IGZyYW1lIGNvdW50LgotICAgIHZpcnR1YWwgc3RhdHVzX3QgZ2V0Q2FwdHVyZVBvc2l0aW9uKGludDY0X3QgKmZyYW1lcywgaW50NjRfdCAqdGltZSk7Ci0KLSAgICAvLyBHZXQgYWN0aXZlIG1pY3JvcGhvbmVzCi0gICAgdmlydHVhbCBzdGF0dXNfdCBnZXRBY3RpdmVNaWNyb3Bob25lcyhzdGQ6OnZlY3RvcjxtZWRpYTo6TWljcm9waG9uZUluZm8+ICptaWNyb3Bob25lcyk7Ci0KLSAgICAvLyBDYWxsZWQgd2hlbiB0aGUgbWV0YWRhdGEgb2YgdGhlIHN0cmVhbSdzIHNpbmsgaGFzIGJlZW4gY2hhbmdlZC4KLSAgICBzdGF0dXNfdCB1cGRhdGVTaW5rTWV0YWRhdGEoY29uc3QgU2lua01ldGFkYXRhJiBzaW5rTWV0YWRhdGEpIG92ZXJyaWRlOwotCi0gIHByaXZhdGU6Ci0gICAgZnJpZW5kIGNsYXNzIERldmljZUhhbEhpZGw7Ci0gICAgdHlwZWRlZiBNZXNzYWdlUXVldWU8UmVhZFBhcmFtZXRlcnMsIGhhcmR3YXJlOjprU3luY2hyb25pemVkUmVhZFdyaXRlPiBDb21tYW5kTVE7Ci0gICAgdHlwZWRlZiBNZXNzYWdlUXVldWU8dWludDhfdCwgaGFyZHdhcmU6OmtTeW5jaHJvbml6ZWRSZWFkV3JpdGU+IERhdGFNUTsKLSAgICB0eXBlZGVmIE1lc3NhZ2VRdWV1ZTxSZWFkU3RhdHVzLCBoYXJkd2FyZTo6a1N5bmNocm9uaXplZFJlYWRXcml0ZT4gU3RhdHVzTVE7Ci0KLSAgICBzcDxJU3RyZWFtSW4+IG1TdHJlYW07Ci0gICAgc3RkOjp1bmlxdWVfcHRyPENvbW1hbmRNUT4gbUNvbW1hbmRNUTsKLSAgICBzdGQ6OnVuaXF1ZV9wdHI8RGF0YU1RPiBtRGF0YU1ROwotICAgIHN0ZDo6dW5pcXVlX3B0cjxTdGF0dXNNUT4gbVN0YXR1c01ROwotICAgIHN0ZDo6YXRvbWljPHBpZF90PiBtUmVhZGVyQ2xpZW50OwotICAgIEV2ZW50RmxhZyogbUVmR3JvdXA7Ci0KLSAgICAvLyBDYW4gbm90IGJlIGNvbnN0cnVjdGVkIGRpcmVjdGx5IGJ5IGNsaWVudHMuCi0gICAgU3RyZWFtSW5IYWxIaWRsKGNvbnN0IHNwPElTdHJlYW1Jbj4mIHN0cmVhbSk7Ci0KLSAgICB2aXJ0dWFsIH5TdHJlYW1JbkhhbEhpZGwoKTsKLQotICAgIHVzaW5nIFJlYWRlckNhbGxiYWNrID0gc3RkOjpmdW5jdGlvbjx2b2lkKGNvbnN0IFJlYWRTdGF0dXMmIHJlYWRTdGF0dXMpPjsKLSAgICBzdGF0dXNfdCBjYWxsUmVhZGVyVGhyZWFkKAotICAgICAgICAgICAgY29uc3QgUmVhZFBhcmFtZXRlcnMmIHBhcmFtcywgY29uc3QgY2hhciogY21kTmFtZSwgUmVhZGVyQ2FsbGJhY2sgY2FsbGJhY2spOwotICAgIHN0YXR1c190IHByZXBhcmVGb3JSZWFkaW5nKHNpemVfdCBidWZmZXJTaXplKTsKLX07Ci0KLX0gLy8gbmFtZXNwYWNlIGFuZHJvaWQKLQotI2VuZGlmIC8vIEFORFJPSURfSEFSRFdBUkVfU1RSRUFNX0hBTF9ISURMX0gKZGlmZiAtLWdpdCBhL21lZGlhL2xpYmF1ZGlvaGFsLzIuMC9TdHJlYW1IYWxMb2NhbC5jcHAgYi9tZWRpYS9saWJhdWRpb2hhbC8yLjAvU3RyZWFtSGFsTG9jYWwuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5ODEwN2U1Li4wMDAwMDAwCi0tLSBhL21lZGlhL2xpYmF1ZGlvaGFsLzIuMC9TdHJlYW1IYWxMb2NhbC5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSwzNDcgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNiBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0Ci0gKgotICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7Ci0gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCi0gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLSAqCi0gKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotICoKLSAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKLSAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCi0gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KLSAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKLSAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgotICovCi0KLSNkZWZpbmUgTE9HX1RBRyAiU3RyZWFtSGFsTG9jYWwiCi0vLyNkZWZpbmUgTE9HX05ERUJVRyAwCi0KLSNpbmNsdWRlIDxoYXJkd2FyZS9hdWRpby5oPgotI2luY2x1ZGUgPHV0aWxzL0xvZy5oPgotCi0jaW5jbHVkZSAiRGV2aWNlSGFsTG9jYWwuaCIKLSNpbmNsdWRlICJTdHJlYW1IYWxMb2NhbC5oIgotCi1uYW1lc3BhY2UgYW5kcm9pZCB7Ci0KLVN0cmVhbUhhbExvY2FsOjpTdHJlYW1IYWxMb2NhbChhdWRpb19zdHJlYW1fdCAqc3RyZWFtLCBzcDxEZXZpY2VIYWxMb2NhbD4gZGV2aWNlKQotICAgICAgICA6IG1EZXZpY2UoZGV2aWNlKSwKLSAgICAgICAgICBtU3RyZWFtKHN0cmVhbSkgewotICAgIC8vIEluc3RydW1lbnQgYXVkaW8gc2lnbmFsIHBvd2VyIGxvZ2dpbmcuCi0gICAgLy8gTm90ZTogVGhpcyBhc3N1bWVzIGNoYW5uZWwgbWFzaywgZm9ybWF0LCBhbmQgc2FtcGxlIHJhdGUgZG8gbm90IGNoYW5nZSBhZnRlciBjcmVhdGlvbi4KLSAgICBpZiAobVN0cmVhbSAhPSBudWxscHRyICYmIG1TdHJlYW1Qb3dlckxvZy5pc1VzZXJEZWJ1Z09yRW5nQnVpbGQoKSkgewotICAgICAgICBtU3RyZWFtUG93ZXJMb2cuaW5pdChtU3RyZWFtLT5nZXRfc2FtcGxlX3JhdGUobVN0cmVhbSksCi0gICAgICAgICAgICAgICAgbVN0cmVhbS0+Z2V0X2NoYW5uZWxzKG1TdHJlYW0pLAotICAgICAgICAgICAgICAgIG1TdHJlYW0tPmdldF9mb3JtYXQobVN0cmVhbSkpOwotICAgIH0KLX0KLQotU3RyZWFtSGFsTG9jYWw6On5TdHJlYW1IYWxMb2NhbCgpIHsKLSAgICBtU3RyZWFtID0gMDsKLSAgICBtRGV2aWNlLmNsZWFyKCk7Ci19Ci0KLXN0YXR1c190IFN0cmVhbUhhbExvY2FsOjpnZXRTYW1wbGVSYXRlKHVpbnQzMl90ICpyYXRlKSB7Ci0gICAgKnJhdGUgPSBtU3RyZWFtLT5nZXRfc2FtcGxlX3JhdGUobVN0cmVhbSk7Ci0gICAgcmV0dXJuIE9LOwotfQotCi1zdGF0dXNfdCBTdHJlYW1IYWxMb2NhbDo6Z2V0QnVmZmVyU2l6ZShzaXplX3QgKnNpemUpIHsKLSAgICAqc2l6ZSA9IG1TdHJlYW0tPmdldF9idWZmZXJfc2l6ZShtU3RyZWFtKTsKLSAgICByZXR1cm4gT0s7Ci19Ci0KLXN0YXR1c190IFN0cmVhbUhhbExvY2FsOjpnZXRDaGFubmVsTWFzayhhdWRpb19jaGFubmVsX21hc2tfdCAqbWFzaykgewotICAgICptYXNrID0gbVN0cmVhbS0+Z2V0X2NoYW5uZWxzKG1TdHJlYW0pOwotICAgIHJldHVybiBPSzsKLX0KLQotc3RhdHVzX3QgU3RyZWFtSGFsTG9jYWw6OmdldEZvcm1hdChhdWRpb19mb3JtYXRfdCAqZm9ybWF0KSB7Ci0gICAgKmZvcm1hdCA9IG1TdHJlYW0tPmdldF9mb3JtYXQobVN0cmVhbSk7Ci0gICAgcmV0dXJuIE9LOwotfQotCi1zdGF0dXNfdCBTdHJlYW1IYWxMb2NhbDo6Z2V0QXVkaW9Qcm9wZXJ0aWVzKAotICAgICAgICB1aW50MzJfdCAqc2FtcGxlUmF0ZSwgYXVkaW9fY2hhbm5lbF9tYXNrX3QgKm1hc2ssIGF1ZGlvX2Zvcm1hdF90ICpmb3JtYXQpIHsKLSAgICAqc2FtcGxlUmF0ZSA9IG1TdHJlYW0tPmdldF9zYW1wbGVfcmF0ZShtU3RyZWFtKTsKLSAgICAqbWFzayA9IG1TdHJlYW0tPmdldF9jaGFubmVscyhtU3RyZWFtKTsKLSAgICAqZm9ybWF0ID0gbVN0cmVhbS0+Z2V0X2Zvcm1hdChtU3RyZWFtKTsKLSAgICByZXR1cm4gT0s7Ci19Ci0KLXN0YXR1c190IFN0cmVhbUhhbExvY2FsOjpzZXRQYXJhbWV0ZXJzKGNvbnN0IFN0cmluZzgmIGt2UGFpcnMpIHsKLSAgICByZXR1cm4gbVN0cmVhbS0+c2V0X3BhcmFtZXRlcnMobVN0cmVhbSwga3ZQYWlycy5zdHJpbmcoKSk7Ci19Ci0KLXN0YXR1c190IFN0cmVhbUhhbExvY2FsOjpnZXRQYXJhbWV0ZXJzKGNvbnN0IFN0cmluZzgmIGtleXMsIFN0cmluZzggKnZhbHVlcykgewotICAgIGNoYXIgKmhhbFZhbHVlcyA9IG1TdHJlYW0tPmdldF9wYXJhbWV0ZXJzKG1TdHJlYW0sIGtleXMuc3RyaW5nKCkpOwotICAgIGlmIChoYWxWYWx1ZXMgIT0gTlVMTCkgewotICAgICAgICB2YWx1ZXMtPnNldFRvKGhhbFZhbHVlcyk7Ci0gICAgICAgIGZyZWUoaGFsVmFsdWVzKTsKLSAgICB9IGVsc2UgewotICAgICAgICB2YWx1ZXMtPmNsZWFyKCk7Ci0gICAgfQotICAgIHJldHVybiBPSzsKLX0KLQotc3RhdHVzX3QgU3RyZWFtSGFsTG9jYWw6OmFkZEVmZmVjdChzcDxFZmZlY3RIYWxJbnRlcmZhY2U+KSB7Ci0gICAgTE9HX0FMV0FZU19GQVRBTCgiTG9jYWwgc3RyZWFtcyBjYW4gbm90IGhhdmUgZWZmZWN0cyIpOwotICAgIHJldHVybiBJTlZBTElEX09QRVJBVElPTjsKLX0KLQotc3RhdHVzX3QgU3RyZWFtSGFsTG9jYWw6OnJlbW92ZUVmZmVjdChzcDxFZmZlY3RIYWxJbnRlcmZhY2U+KSB7Ci0gICAgTE9HX0FMV0FZU19GQVRBTCgiTG9jYWwgc3RyZWFtcyBjYW4gbm90IGhhdmUgZWZmZWN0cyIpOwotICAgIHJldHVybiBJTlZBTElEX09QRVJBVElPTjsKLX0KLQotc3RhdHVzX3QgU3RyZWFtSGFsTG9jYWw6OnN0YW5kYnkoKSB7Ci0gICAgcmV0dXJuIG1TdHJlYW0tPnN0YW5kYnkobVN0cmVhbSk7Ci19Ci0KLXN0YXR1c190IFN0cmVhbUhhbExvY2FsOjpkdW1wKGludCBmZCkgewotICAgIHN0YXR1c190IHN0YXR1cyA9IG1TdHJlYW0tPmR1bXAobVN0cmVhbSwgZmQpOwotICAgIG1TdHJlYW1Qb3dlckxvZy5kdW1wKGZkKTsKLSAgICByZXR1cm4gc3RhdHVzOwotfQotCi1zdGF0dXNfdCBTdHJlYW1IYWxMb2NhbDo6c2V0SGFsVGhyZWFkUHJpb3JpdHkoaW50KSB7Ci0gICAgLy8gRG9uJ3QgbmVlZCB0byBkbyBhbnl0aGluZyBhcyBsb2NhbCBoYWwgaXMgZXhlY3V0ZWQgYnkgYXVkaW9mbGluZ2VyIGRpcmVjdGx5Ci0gICAgLy8gb24gdGhlIHNhbWUgdGhyZWFkLgotICAgIHJldHVybiBPSzsKLX0KLQotU3RyZWFtT3V0SGFsTG9jYWw6OlN0cmVhbU91dEhhbExvY2FsKGF1ZGlvX3N0cmVhbV9vdXRfdCAqc3RyZWFtLCBzcDxEZXZpY2VIYWxMb2NhbD4gZGV2aWNlKQotICAgICAgICA6IFN0cmVhbUhhbExvY2FsKCZzdHJlYW0tPmNvbW1vbiwgZGV2aWNlKSwgbVN0cmVhbShzdHJlYW0pIHsKLX0KLQotU3RyZWFtT3V0SGFsTG9jYWw6On5TdHJlYW1PdXRIYWxMb2NhbCgpIHsKLSAgICBtQ2FsbGJhY2suY2xlYXIoKTsKLSAgICBtRGV2aWNlLT5jbG9zZU91dHB1dFN0cmVhbShtU3RyZWFtKTsKLSAgICBtU3RyZWFtID0gMDsKLX0KLQotc3RhdHVzX3QgU3RyZWFtT3V0SGFsTG9jYWw6OmdldEZyYW1lU2l6ZShzaXplX3QgKnNpemUpIHsKLSAgICAqc2l6ZSA9IGF1ZGlvX3N0cmVhbV9vdXRfZnJhbWVfc2l6ZShtU3RyZWFtKTsKLSAgICByZXR1cm4gT0s7Ci19Ci0KLXN0YXR1c190IFN0cmVhbU91dEhhbExvY2FsOjpnZXRMYXRlbmN5KHVpbnQzMl90ICpsYXRlbmN5KSB7Ci0gICAgKmxhdGVuY3kgPSBtU3RyZWFtLT5nZXRfbGF0ZW5jeShtU3RyZWFtKTsKLSAgICByZXR1cm4gT0s7Ci19Ci0KLXN0YXR1c190IFN0cmVhbU91dEhhbExvY2FsOjpzZXRWb2x1bWUoZmxvYXQgbGVmdCwgZmxvYXQgcmlnaHQpIHsKLSAgICBpZiAobVN0cmVhbS0+c2V0X3ZvbHVtZSA9PSBOVUxMKSByZXR1cm4gSU5WQUxJRF9PUEVSQVRJT047Ci0gICAgcmV0dXJuIG1TdHJlYW0tPnNldF92b2x1bWUobVN0cmVhbSwgbGVmdCwgcmlnaHQpOwotfQotCi1zdGF0dXNfdCBTdHJlYW1PdXRIYWxMb2NhbDo6d3JpdGUoY29uc3Qgdm9pZCAqYnVmZmVyLCBzaXplX3QgYnl0ZXMsIHNpemVfdCAqd3JpdHRlbikgewotICAgIHNzaXplX3Qgd3JpdGVSZXN1bHQgPSBtU3RyZWFtLT53cml0ZShtU3RyZWFtLCBidWZmZXIsIGJ5dGVzKTsKLSAgICBpZiAod3JpdGVSZXN1bHQgPiAwKSB7Ci0gICAgICAgICp3cml0dGVuID0gd3JpdGVSZXN1bHQ7Ci0gICAgICAgIG1TdHJlYW1Qb3dlckxvZy5sb2coYnVmZmVyLCAqd3JpdHRlbik7Ci0gICAgICAgIHJldHVybiBPSzsKLSAgICB9IGVsc2UgewotICAgICAgICAqd3JpdHRlbiA9IDA7Ci0gICAgICAgIHJldHVybiB3cml0ZVJlc3VsdDsKLSAgICB9Ci19Ci0KLXN0YXR1c190IFN0cmVhbU91dEhhbExvY2FsOjpnZXRSZW5kZXJQb3NpdGlvbih1aW50MzJfdCAqZHNwRnJhbWVzKSB7Ci0gICAgcmV0dXJuIG1TdHJlYW0tPmdldF9yZW5kZXJfcG9zaXRpb24obVN0cmVhbSwgZHNwRnJhbWVzKTsKLX0KLQotc3RhdHVzX3QgU3RyZWFtT3V0SGFsTG9jYWw6OmdldE5leHRXcml0ZVRpbWVzdGFtcChpbnQ2NF90ICp0aW1lc3RhbXApIHsKLSAgICBpZiAobVN0cmVhbS0+Z2V0X25leHRfd3JpdGVfdGltZXN0YW1wID09IE5VTEwpIHJldHVybiBJTlZBTElEX09QRVJBVElPTjsKLSAgICByZXR1cm4gbVN0cmVhbS0+Z2V0X25leHRfd3JpdGVfdGltZXN0YW1wKG1TdHJlYW0sIHRpbWVzdGFtcCk7Ci19Ci0KLXN0YXR1c190IFN0cmVhbU91dEhhbExvY2FsOjpzZXRDYWxsYmFjayh3cDxTdHJlYW1PdXRIYWxJbnRlcmZhY2VDYWxsYmFjaz4gY2FsbGJhY2spIHsKLSAgICBpZiAobVN0cmVhbS0+c2V0X2NhbGxiYWNrID09IE5VTEwpIHJldHVybiBJTlZBTElEX09QRVJBVElPTjsKLSAgICBzdGF0dXNfdCByZXN1bHQgPSBtU3RyZWFtLT5zZXRfY2FsbGJhY2sobVN0cmVhbSwgU3RyZWFtT3V0SGFsTG9jYWw6OmFzeW5jQ2FsbGJhY2ssIHRoaXMpOwotICAgIGlmIChyZXN1bHQgPT0gT0spIHsKLSAgICAgICAgbUNhbGxiYWNrID0gY2FsbGJhY2s7Ci0gICAgfQotICAgIHJldHVybiByZXN1bHQ7Ci19Ci0KLS8vIHN0YXRpYwotaW50IFN0cmVhbU91dEhhbExvY2FsOjphc3luY0NhbGxiYWNrKHN0cmVhbV9jYWxsYmFja19ldmVudF90IGV2ZW50LCB2b2lkKiwgdm9pZCAqY29va2llKSB7Ci0gICAgLy8gV2UgYWN0IGFzIGlmIHdlIGdhdmUgYSB3cDxTdHJlYW1PdXRIYWxMb2NhbD4gdG8gSEFMLiBUaGlzIHdheSB3ZSBzaG91bGQgaGFuZGxlCi0gICAgLy8gY29ycmVjdGx5IHRoZSBjYXNlIHdoZW4gdGhlIGNhbGxiYWNrIGlzIGludm9rZWQgd2hpbGUgU3RyZWFtT3V0SGFsTG9jYWwncyBkZXN0cnVjdG9yIGlzCi0gICAgLy8gYWxyZWFkeSBydW5uaW5nLCBiZWNhdXNlIHRoZSBkZXN0cnVjdG9yIGlzIGludm9rZWQgYWZ0ZXIgdGhlIHJlZmNvdW50IGhhcyBiZWVuIGF0b21pY2FsbHkKLSAgICAvLyBkZWNyZW1lbnRlZC4KLSAgICB3cDxTdHJlYW1PdXRIYWxMb2NhbD4gd2Vha1NlbGYoc3RhdGljX2Nhc3Q8U3RyZWFtT3V0SGFsTG9jYWwqPihjb29raWUpKTsKLSAgICBzcDxTdHJlYW1PdXRIYWxMb2NhbD4gc2VsZiA9IHdlYWtTZWxmLnByb21vdGUoKTsKLSAgICBpZiAoc2VsZiA9PSAwKSByZXR1cm4gMDsKLSAgICBzcDxTdHJlYW1PdXRIYWxJbnRlcmZhY2VDYWxsYmFjaz4gY2FsbGJhY2sgPSBzZWxmLT5tQ2FsbGJhY2sucHJvbW90ZSgpOwotICAgIGlmIChjYWxsYmFjayA9PSAwKSByZXR1cm4gMDsKLSAgICBBTE9HVigiYXN5bmNDYWxsYmFjaygpIGV2ZW50ICVkIiwgZXZlbnQpOwotICAgIHN3aXRjaCAoZXZlbnQpIHsKLSAgICAgICAgY2FzZSBTVFJFQU1fQ0JLX0VWRU5UX1dSSVRFX1JFQURZOgotICAgICAgICAgICAgY2FsbGJhY2stPm9uV3JpdGVSZWFkeSgpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgU1RSRUFNX0NCS19FVkVOVF9EUkFJTl9SRUFEWToKLSAgICAgICAgICAgIGNhbGxiYWNrLT5vbkRyYWluUmVhZHkoKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIFNUUkVBTV9DQktfRVZFTlRfRVJST1I6Ci0gICAgICAgICAgICBjYWxsYmFjay0+b25FcnJvcigpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICBBTE9HVygiYXN5bmNDYWxsYmFjaygpIHVua25vd24gZXZlbnQgJWQiLCBldmVudCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICB9Ci0gICAgcmV0dXJuIDA7Ci19Ci0KLXN0YXR1c190IFN0cmVhbU91dEhhbExvY2FsOjpzdXBwb3J0c1BhdXNlQW5kUmVzdW1lKGJvb2wgKnN1cHBvcnRzUGF1c2UsIGJvb2wgKnN1cHBvcnRzUmVzdW1lKSB7Ci0gICAgKnN1cHBvcnRzUGF1c2UgPSBtU3RyZWFtLT5wYXVzZSAhPSBOVUxMOwotICAgICpzdXBwb3J0c1Jlc3VtZSA9IG1TdHJlYW0tPnJlc3VtZSAhPSBOVUxMOwotICAgIHJldHVybiBPSzsKLX0KLQotc3RhdHVzX3QgU3RyZWFtT3V0SGFsTG9jYWw6OnBhdXNlKCkgewotICAgIGlmIChtU3RyZWFtLT5wYXVzZSA9PSBOVUxMKSByZXR1cm4gSU5WQUxJRF9PUEVSQVRJT047Ci0gICAgcmV0dXJuIG1TdHJlYW0tPnBhdXNlKG1TdHJlYW0pOwotfQotCi1zdGF0dXNfdCBTdHJlYW1PdXRIYWxMb2NhbDo6cmVzdW1lKCkgewotICAgIGlmIChtU3RyZWFtLT5yZXN1bWUgPT0gTlVMTCkgcmV0dXJuIElOVkFMSURfT1BFUkFUSU9OOwotICAgIHJldHVybiBtU3RyZWFtLT5yZXN1bWUobVN0cmVhbSk7Ci19Ci0KLXN0YXR1c190IFN0cmVhbU91dEhhbExvY2FsOjpzdXBwb3J0c0RyYWluKGJvb2wgKnN1cHBvcnRzRHJhaW4pIHsKLSAgICAqc3VwcG9ydHNEcmFpbiA9IG1TdHJlYW0tPmRyYWluICE9IE5VTEw7Ci0gICAgcmV0dXJuIE9LOwotfQotCi1zdGF0dXNfdCBTdHJlYW1PdXRIYWxMb2NhbDo6ZHJhaW4oYm9vbCBlYXJseU5vdGlmeSkgewotICAgIGlmIChtU3RyZWFtLT5kcmFpbiA9PSBOVUxMKSByZXR1cm4gSU5WQUxJRF9PUEVSQVRJT047Ci0gICAgcmV0dXJuIG1TdHJlYW0tPmRyYWluKG1TdHJlYW0sIGVhcmx5Tm90aWZ5ID8gQVVESU9fRFJBSU5fRUFSTFlfTk9USUZZIDogQVVESU9fRFJBSU5fQUxMKTsKLX0KLQotc3RhdHVzX3QgU3RyZWFtT3V0SGFsTG9jYWw6OmZsdXNoKCkgewotICAgIGlmIChtU3RyZWFtLT5mbHVzaCA9PSBOVUxMKSByZXR1cm4gSU5WQUxJRF9PUEVSQVRJT047Ci0gICAgcmV0dXJuIG1TdHJlYW0tPmZsdXNoKG1TdHJlYW0pOwotfQotCi1zdGF0dXNfdCBTdHJlYW1PdXRIYWxMb2NhbDo6Z2V0UHJlc2VudGF0aW9uUG9zaXRpb24odWludDY0X3QgKmZyYW1lcywgc3RydWN0IHRpbWVzcGVjICp0aW1lc3RhbXApIHsKLSAgICBpZiAobVN0cmVhbS0+Z2V0X3ByZXNlbnRhdGlvbl9wb3NpdGlvbiA9PSBOVUxMKSByZXR1cm4gSU5WQUxJRF9PUEVSQVRJT047Ci0gICAgcmV0dXJuIG1TdHJlYW0tPmdldF9wcmVzZW50YXRpb25fcG9zaXRpb24obVN0cmVhbSwgZnJhbWVzLCB0aW1lc3RhbXApOwotfQotCi1zdGF0dXNfdCBTdHJlYW1PdXRIYWxMb2NhbDo6dXBkYXRlU291cmNlTWV0YWRhdGEoY29uc3QgU291cmNlTWV0YWRhdGEmIHNvdXJjZU1ldGFkYXRhKSB7Ci0gICAgaWYgKG1TdHJlYW0tPnVwZGF0ZV9zb3VyY2VfbWV0YWRhdGEgPT0gbnVsbHB0cikgewotICAgICAgICByZXR1cm4gSU5WQUxJRF9PUEVSQVRJT047Ci0gICAgfQotICAgIGNvbnN0IHNvdXJjZV9tZXRhZGF0YV90IG1ldGFkYXRhIHsKLSAgICAgICAgLnRyYWNrX2NvdW50ID0gc291cmNlTWV0YWRhdGEudHJhY2tzLnNpemUoKSwKLSAgICAgICAgLy8gY29uc3QgY2FzdCBpcyBmaW5lIGFzIGl0IGlzIGluIGEgY29uc3Qgc3RydWN0dXJlCi0gICAgICAgIC50cmFja3MgPSBjb25zdF9jYXN0PHBsYXliYWNrX3RyYWNrX21ldGFkYXRhKj4oc291cmNlTWV0YWRhdGEudHJhY2tzLmRhdGEoKSksCi0gICAgfTsKLSAgICBtU3RyZWFtLT51cGRhdGVfc291cmNlX21ldGFkYXRhKG1TdHJlYW0sICZtZXRhZGF0YSk7Ci0gICAgcmV0dXJuIE9LOwotfQotCi1zdGF0dXNfdCBTdHJlYW1PdXRIYWxMb2NhbDo6c3RhcnQoKSB7Ci0gICAgaWYgKG1TdHJlYW0tPnN0YXJ0ID09IE5VTEwpIHJldHVybiBJTlZBTElEX09QRVJBVElPTjsKLSAgICByZXR1cm4gbVN0cmVhbS0+c3RhcnQobVN0cmVhbSk7Ci19Ci0KLXN0YXR1c190IFN0cmVhbU91dEhhbExvY2FsOjpzdG9wKCkgewotICAgIGlmIChtU3RyZWFtLT5zdG9wID09IE5VTEwpIHJldHVybiBJTlZBTElEX09QRVJBVElPTjsKLSAgICByZXR1cm4gbVN0cmVhbS0+c3RvcChtU3RyZWFtKTsKLX0KLQotc3RhdHVzX3QgU3RyZWFtT3V0SGFsTG9jYWw6OmNyZWF0ZU1tYXBCdWZmZXIoaW50MzJfdCBtaW5TaXplRnJhbWVzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBhdWRpb19tbWFwX2J1ZmZlcl9pbmZvICppbmZvKSB7Ci0gICAgaWYgKG1TdHJlYW0tPmNyZWF0ZV9tbWFwX2J1ZmZlciA9PSBOVUxMKSByZXR1cm4gSU5WQUxJRF9PUEVSQVRJT047Ci0gICAgcmV0dXJuIG1TdHJlYW0tPmNyZWF0ZV9tbWFwX2J1ZmZlcihtU3RyZWFtLCBtaW5TaXplRnJhbWVzLCBpbmZvKTsKLX0KLQotc3RhdHVzX3QgU3RyZWFtT3V0SGFsTG9jYWw6OmdldE1tYXBQb3NpdGlvbihzdHJ1Y3QgYXVkaW9fbW1hcF9wb3NpdGlvbiAqcG9zaXRpb24pIHsKLSAgICBpZiAobVN0cmVhbS0+Z2V0X21tYXBfcG9zaXRpb24gPT0gTlVMTCkgcmV0dXJuIElOVkFMSURfT1BFUkFUSU9OOwotICAgIHJldHVybiBtU3RyZWFtLT5nZXRfbW1hcF9wb3NpdGlvbihtU3RyZWFtLCBwb3NpdGlvbik7Ci19Ci0KLVN0cmVhbUluSGFsTG9jYWw6OlN0cmVhbUluSGFsTG9jYWwoYXVkaW9fc3RyZWFtX2luX3QgKnN0cmVhbSwgc3A8RGV2aWNlSGFsTG9jYWw+IGRldmljZSkKLSAgICAgICAgOiBTdHJlYW1IYWxMb2NhbCgmc3RyZWFtLT5jb21tb24sIGRldmljZSksIG1TdHJlYW0oc3RyZWFtKSB7Ci19Ci0KLVN0cmVhbUluSGFsTG9jYWw6On5TdHJlYW1JbkhhbExvY2FsKCkgewotICAgIG1EZXZpY2UtPmNsb3NlSW5wdXRTdHJlYW0obVN0cmVhbSk7Ci0gICAgbVN0cmVhbSA9IDA7Ci19Ci0KLXN0YXR1c190IFN0cmVhbUluSGFsTG9jYWw6OmdldEZyYW1lU2l6ZShzaXplX3QgKnNpemUpIHsKLSAgICAqc2l6ZSA9IGF1ZGlvX3N0cmVhbV9pbl9mcmFtZV9zaXplKG1TdHJlYW0pOwotICAgIHJldHVybiBPSzsKLX0KLQotc3RhdHVzX3QgU3RyZWFtSW5IYWxMb2NhbDo6c2V0R2FpbihmbG9hdCBnYWluKSB7Ci0gICAgcmV0dXJuIG1TdHJlYW0tPnNldF9nYWluKG1TdHJlYW0sIGdhaW4pOwotfQotCi1zdGF0dXNfdCBTdHJlYW1JbkhhbExvY2FsOjpyZWFkKHZvaWQgKmJ1ZmZlciwgc2l6ZV90IGJ5dGVzLCBzaXplX3QgKnJlYWQpIHsKLSAgICBzc2l6ZV90IHJlYWRSZXN1bHQgPSBtU3RyZWFtLT5yZWFkKG1TdHJlYW0sIGJ1ZmZlciwgYnl0ZXMpOwotICAgIGlmIChyZWFkUmVzdWx0ID4gMCkgewotICAgICAgICAqcmVhZCA9IHJlYWRSZXN1bHQ7Ci0gICAgICAgIG1TdHJlYW1Qb3dlckxvZy5sb2coIGJ1ZmZlciwgKnJlYWQpOwotICAgICAgICByZXR1cm4gT0s7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgKnJlYWQgPSAwOwotICAgICAgICByZXR1cm4gcmVhZFJlc3VsdDsKLSAgICB9Ci19Ci0KLXN0YXR1c190IFN0cmVhbUluSGFsTG9jYWw6OmdldElucHV0RnJhbWVzTG9zdCh1aW50MzJfdCAqZnJhbWVzTG9zdCkgewotICAgICpmcmFtZXNMb3N0ID0gbVN0cmVhbS0+Z2V0X2lucHV0X2ZyYW1lc19sb3N0KG1TdHJlYW0pOwotICAgIHJldHVybiBPSzsKLX0KLQotc3RhdHVzX3QgU3RyZWFtSW5IYWxMb2NhbDo6Z2V0Q2FwdHVyZVBvc2l0aW9uKGludDY0X3QgKmZyYW1lcywgaW50NjRfdCAqdGltZSkgewotICAgIGlmIChtU3RyZWFtLT5nZXRfY2FwdHVyZV9wb3NpdGlvbiA9PSBOVUxMKSByZXR1cm4gSU5WQUxJRF9PUEVSQVRJT047Ci0gICAgcmV0dXJuIG1TdHJlYW0tPmdldF9jYXB0dXJlX3Bvc2l0aW9uKG1TdHJlYW0sIGZyYW1lcywgdGltZSk7Ci19Ci0KLXN0YXR1c190IFN0cmVhbUluSGFsTG9jYWw6OnVwZGF0ZVNpbmtNZXRhZGF0YShjb25zdCBTaW5rTWV0YWRhdGEmIHNpbmtNZXRhZGF0YSkgewotICAgIGlmIChtU3RyZWFtLT51cGRhdGVfc2lua19tZXRhZGF0YSA9PSBudWxscHRyKSB7Ci0gICAgICAgIHJldHVybiBJTlZBTElEX09QRVJBVElPTjsKLSAgICB9Ci0gICAgY29uc3Qgc2lua19tZXRhZGF0YV90IG1ldGFkYXRhIHsKLSAgICAgICAgLnRyYWNrX2NvdW50ID0gc2lua01ldGFkYXRhLnRyYWNrcy5zaXplKCksCi0gICAgICAgIC8vIGNvbnN0IGNhc3QgaXMgZmluZSBhcyBpdCBpcyBpbiBhIGNvbnN0IHN0cnVjdHVyZQotICAgICAgICAudHJhY2tzID0gY29uc3RfY2FzdDxyZWNvcmRfdHJhY2tfbWV0YWRhdGEqPihzaW5rTWV0YWRhdGEudHJhY2tzLmRhdGEoKSksCi0gICAgfTsKLSAgICBtU3RyZWFtLT51cGRhdGVfc2lua19tZXRhZGF0YShtU3RyZWFtLCAmbWV0YWRhdGEpOwotICAgIHJldHVybiBPSzsKLX0KLQotc3RhdHVzX3QgU3RyZWFtSW5IYWxMb2NhbDo6c3RhcnQoKSB7Ci0gICAgaWYgKG1TdHJlYW0tPnN0YXJ0ID09IE5VTEwpIHJldHVybiBJTlZBTElEX09QRVJBVElPTjsKLSAgICByZXR1cm4gbVN0cmVhbS0+c3RhcnQobVN0cmVhbSk7Ci19Ci0KLXN0YXR1c190IFN0cmVhbUluSGFsTG9jYWw6OnN0b3AoKSB7Ci0gICAgaWYgKG1TdHJlYW0tPnN0b3AgPT0gTlVMTCkgcmV0dXJuIElOVkFMSURfT1BFUkFUSU9OOwotICAgIHJldHVybiBtU3RyZWFtLT5zdG9wKG1TdHJlYW0pOwotfQotCi1zdGF0dXNfdCBTdHJlYW1JbkhhbExvY2FsOjpjcmVhdGVNbWFwQnVmZmVyKGludDMyX3QgbWluU2l6ZUZyYW1lcywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgYXVkaW9fbW1hcF9idWZmZXJfaW5mbyAqaW5mbykgewotICAgIGlmIChtU3RyZWFtLT5jcmVhdGVfbW1hcF9idWZmZXIgPT0gTlVMTCkgcmV0dXJuIElOVkFMSURfT1BFUkFUSU9OOwotICAgIHJldHVybiBtU3RyZWFtLT5jcmVhdGVfbW1hcF9idWZmZXIobVN0cmVhbSwgbWluU2l6ZUZyYW1lcywgaW5mbyk7Ci19Ci0KLXN0YXR1c190IFN0cmVhbUluSGFsTG9jYWw6OmdldE1tYXBQb3NpdGlvbihzdHJ1Y3QgYXVkaW9fbW1hcF9wb3NpdGlvbiAqcG9zaXRpb24pIHsKLSAgICBpZiAobVN0cmVhbS0+Z2V0X21tYXBfcG9zaXRpb24gPT0gTlVMTCkgcmV0dXJuIElOVkFMSURfT1BFUkFUSU9OOwotICAgIHJldHVybiBtU3RyZWFtLT5nZXRfbW1hcF9wb3NpdGlvbihtU3RyZWFtLCBwb3NpdGlvbik7Ci19Ci0KLXN0YXR1c190IFN0cmVhbUluSGFsTG9jYWw6OmdldEFjdGl2ZU1pY3JvcGhvbmVzKAotICAgICAgICBzdGQ6OnZlY3RvcjxtZWRpYTo6TWljcm9waG9uZUluZm8+ICptaWNyb3Bob25lcyBfX3VudXNlZCkgewotICAgIHJldHVybiBJTlZBTElEX09QRVJBVElPTjsKLX0KLQotfSAvLyBuYW1lc3BhY2UgYW5kcm9pZApkaWZmIC0tZ2l0IGEvbWVkaWEvbGliYXVkaW9oYWwvMi4wL1N0cmVhbUhhbExvY2FsLmggYi9tZWRpYS9saWJhdWRpb2hhbC8yLjAvU3RyZWFtSGFsTG9jYWwuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggY2RhOGQwYy4uMDAwMDAwMAotLS0gYS9tZWRpYS9saWJhdWRpb2hhbC8yLjAvU3RyZWFtSGFsTG9jYWwuaAorKysgL2Rldi9udWxsCkBAIC0xLDIxOSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDE2IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKLSAqCi0gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKLSAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KLSAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotICoKLSAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0gKgotICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQotICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKLSAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgotICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAotICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCi0gKi8KLQotI2lmbmRlZiBBTkRST0lEX0hBUkRXQVJFX1NUUkVBTV9IQUxfTE9DQUxfSAotI2RlZmluZSBBTkRST0lEX0hBUkRXQVJFX1NUUkVBTV9IQUxfTE9DQUxfSAotCi0jaW5jbHVkZSA8bWVkaWEvYXVkaW9oYWwvU3RyZWFtSGFsSW50ZXJmYWNlLmg+Ci0jaW5jbHVkZSAiU3RyZWFtUG93ZXJMb2cuaCIKLQotbmFtZXNwYWNlIGFuZHJvaWQgewotCi1jbGFzcyBEZXZpY2VIYWxMb2NhbDsKLQotY2xhc3MgU3RyZWFtSGFsTG9jYWwgOiBwdWJsaWMgdmlydHVhbCBTdHJlYW1IYWxJbnRlcmZhY2UKLXsKLSAgcHVibGljOgotICAgIC8vIFJldHVybiB0aGUgc2FtcGxpbmcgcmF0ZSBpbiBIeiAtIGVnLiA0NDEwMC4KLSAgICB2aXJ0dWFsIHN0YXR1c190IGdldFNhbXBsZVJhdGUodWludDMyX3QgKnJhdGUpOwotCi0gICAgLy8gUmV0dXJuIHNpemUgb2YgaW5wdXQvb3V0cHV0IGJ1ZmZlciBpbiBieXRlcyBmb3IgdGhpcyBzdHJlYW0gLSBlZy4gNDgwMC4KLSAgICB2aXJ0dWFsIHN0YXR1c190IGdldEJ1ZmZlclNpemUoc2l6ZV90ICpzaXplKTsKLQotICAgIC8vIFJldHVybiB0aGUgY2hhbm5lbCBtYXNrLgotICAgIHZpcnR1YWwgc3RhdHVzX3QgZ2V0Q2hhbm5lbE1hc2soYXVkaW9fY2hhbm5lbF9tYXNrX3QgKm1hc2spOwotCi0gICAgLy8gUmV0dXJuIHRoZSBhdWRpbyBmb3JtYXQgLSBlLmcuIEFVRElPX0ZPUk1BVF9QQ01fMTZfQklULgotICAgIHZpcnR1YWwgc3RhdHVzX3QgZ2V0Rm9ybWF0KGF1ZGlvX2Zvcm1hdF90ICpmb3JtYXQpOwotCi0gICAgLy8gQ29udmVuaWVuY2UgbWV0aG9kLgotICAgIHZpcnR1YWwgc3RhdHVzX3QgZ2V0QXVkaW9Qcm9wZXJ0aWVzKAotICAgICAgICAgICAgdWludDMyX3QgKnNhbXBsZVJhdGUsIGF1ZGlvX2NoYW5uZWxfbWFza190ICptYXNrLCBhdWRpb19mb3JtYXRfdCAqZm9ybWF0KTsKLQotICAgIC8vIFNldCBhdWRpbyBzdHJlYW0gcGFyYW1ldGVycy4KLSAgICB2aXJ0dWFsIHN0YXR1c190IHNldFBhcmFtZXRlcnMoY29uc3QgU3RyaW5nOCYga3ZQYWlycyk7Ci0KLSAgICAvLyBHZXQgYXVkaW8gc3RyZWFtIHBhcmFtZXRlcnMuCi0gICAgdmlydHVhbCBzdGF0dXNfdCBnZXRQYXJhbWV0ZXJzKGNvbnN0IFN0cmluZzgmIGtleXMsIFN0cmluZzggKnZhbHVlcyk7Ci0KLSAgICAvLyBBZGQgb3IgcmVtb3ZlIHRoZSBlZmZlY3Qgb24gdGhlIHN0cmVhbS4KLSAgICB2aXJ0dWFsIHN0YXR1c190IGFkZEVmZmVjdChzcDxFZmZlY3RIYWxJbnRlcmZhY2U+IGVmZmVjdCk7Ci0gICAgdmlydHVhbCBzdGF0dXNfdCByZW1vdmVFZmZlY3Qoc3A8RWZmZWN0SGFsSW50ZXJmYWNlPiBlZmZlY3QpOwotCi0gICAgLy8gUHV0IHRoZSBhdWRpbyBoYXJkd2FyZSBpbnB1dC9vdXRwdXQgaW50byBzdGFuZGJ5IG1vZGUuCi0gICAgdmlydHVhbCBzdGF0dXNfdCBzdGFuZGJ5KCk7Ci0KLSAgICB2aXJ0dWFsIHN0YXR1c190IGR1bXAoaW50IGZkKTsKLQotICAgIC8vIFN0YXJ0IGEgc3RyZWFtIG9wZXJhdGluZyBpbiBtbWFwIG1vZGUuCi0gICAgdmlydHVhbCBzdGF0dXNfdCBzdGFydCgpID0gMDsKLQotICAgIC8vIFN0b3AgYSBzdHJlYW0gb3BlcmF0aW5nIGluIG1tYXAgbW9kZS4KLSAgICB2aXJ0dWFsIHN0YXR1c190IHN0b3AoKSA9IDA7Ci0KLSAgICAvLyBSZXRyaWV2ZSBpbmZvcm1hdGlvbiBvbiB0aGUgZGF0YSBidWZmZXIgaW4gbW1hcCBtb2RlLgotICAgIHZpcnR1YWwgc3RhdHVzX3QgY3JlYXRlTW1hcEJ1ZmZlcihpbnQzMl90IG1pblNpemVGcmFtZXMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBhdWRpb19tbWFwX2J1ZmZlcl9pbmZvICppbmZvKSA9IDA7Ci0KLSAgICAvLyBHZXQgY3VycmVudCByZWFkL3dyaXRlIHBvc2l0aW9uIGluIHRoZSBtbWFwIGJ1ZmZlcgotICAgIHZpcnR1YWwgc3RhdHVzX3QgZ2V0TW1hcFBvc2l0aW9uKHN0cnVjdCBhdWRpb19tbWFwX3Bvc2l0aW9uICpwb3NpdGlvbikgPSAwOwotCi0gICAgLy8gU2V0IHRoZSBwcmlvcml0eSBvZiB0aGUgdGhyZWFkIHRoYXQgaW50ZXJhY3RzIHdpdGggdGhlIEhBTAotICAgIC8vIChtdXN0IG1hdGNoIHRoZSBwcmlvcml0eSBvZiB0aGUgYXVkaW9mbGluZ2VyJ3MgdGhyZWFkIHRoYXQgY2FsbHMgJ3JlYWQnIC8gJ3dyaXRlJykKLSAgICB2aXJ0dWFsIHN0YXR1c190IHNldEhhbFRocmVhZFByaW9yaXR5KGludCBwcmlvcml0eSk7Ci0KLSAgcHJvdGVjdGVkOgotICAgIC8vIFN1YmNsYXNzZXMgY2FuIG5vdCBiZSBjb25zdHJ1Y3RlZCBkaXJlY3RseSBieSBjbGllbnRzLgotICAgIFN0cmVhbUhhbExvY2FsKGF1ZGlvX3N0cmVhbV90ICpzdHJlYW0sIHNwPERldmljZUhhbExvY2FsPiBkZXZpY2UpOwotCi0gICAgLy8gVGhlIGRlc3RydWN0b3IgYXV0b21hdGljYWxseSBjbG9zZXMgdGhlIHN0cmVhbS4KLSAgICB2aXJ0dWFsIH5TdHJlYW1IYWxMb2NhbCgpOwotCi0gICAgc3A8RGV2aWNlSGFsTG9jYWw+IG1EZXZpY2U7Ci0KLSAgICAvLyBtU3RyZWFtUG93ZXJMb2cgaXMgdXNlZCBmb3IgYXVkaW8gc2lnbmFsIHBvd2VyIGxvZ2dpbmcuCi0gICAgU3RyZWFtUG93ZXJMb2cgbVN0cmVhbVBvd2VyTG9nOwotCi0gIHByaXZhdGU6Ci0gICAgYXVkaW9fc3RyZWFtX3QgKm1TdHJlYW07Ci19OwotCi1jbGFzcyBTdHJlYW1PdXRIYWxMb2NhbCA6IHB1YmxpYyBTdHJlYW1PdXRIYWxJbnRlcmZhY2UsIHB1YmxpYyBTdHJlYW1IYWxMb2NhbCB7Ci0gIHB1YmxpYzoKLSAgICAvLyBSZXR1cm4gdGhlIGZyYW1lIHNpemUgKG51bWJlciBvZiBieXRlcyBwZXIgc2FtcGxlKSBvZiBhIHN0cmVhbS4KLSAgICB2aXJ0dWFsIHN0YXR1c190IGdldEZyYW1lU2l6ZShzaXplX3QgKnNpemUpOwotCi0gICAgLy8gUmV0dXJuIHRoZSBhdWRpbyBoYXJkd2FyZSBkcml2ZXIgZXN0aW1hdGVkIGxhdGVuY3kgaW4gbWlsbGlzZWNvbmRzLgotICAgIHZpcnR1YWwgc3RhdHVzX3QgZ2V0TGF0ZW5jeSh1aW50MzJfdCAqbGF0ZW5jeSk7Ci0KLSAgICAvLyBVc2UgdGhpcyBtZXRob2QgaW4gc2l0dWF0aW9ucyB3aGVyZSBhdWRpbyBtaXhpbmcgaXMgZG9uZSBpbiB0aGUgaGFyZHdhcmUuCi0gICAgdmlydHVhbCBzdGF0dXNfdCBzZXRWb2x1bWUoZmxvYXQgbGVmdCwgZmxvYXQgcmlnaHQpOwotCi0gICAgLy8gV3JpdGUgYXVkaW8gYnVmZmVyIHRvIGRyaXZlci4KLSAgICB2aXJ0dWFsIHN0YXR1c190IHdyaXRlKGNvbnN0IHZvaWQgKmJ1ZmZlciwgc2l6ZV90IGJ5dGVzLCBzaXplX3QgKndyaXR0ZW4pOwotCi0gICAgLy8gUmV0dXJuIHRoZSBudW1iZXIgb2YgYXVkaW8gZnJhbWVzIHdyaXR0ZW4gYnkgdGhlIGF1ZGlvIGRzcCB0byBEQUMgc2luY2UKLSAgICAvLyB0aGUgb3V0cHV0IGhhcyBleGl0ZWQgc3RhbmRieS4KLSAgICB2aXJ0dWFsIHN0YXR1c190IGdldFJlbmRlclBvc2l0aW9uKHVpbnQzMl90ICpkc3BGcmFtZXMpOwotCi0gICAgLy8gR2V0IHRoZSBsb2NhbCB0aW1lIGF0IHdoaWNoIHRoZSBuZXh0IHdyaXRlIHRvIHRoZSBhdWRpbyBkcml2ZXIgd2lsbCBiZSBwcmVzZW50ZWQuCi0gICAgdmlydHVhbCBzdGF0dXNfdCBnZXROZXh0V3JpdGVUaW1lc3RhbXAoaW50NjRfdCAqdGltZXN0YW1wKTsKLQotICAgIC8vIFNldCB0aGUgY2FsbGJhY2sgZm9yIG5vdGlmeWluZyBjb21wbGV0aW9uIG9mIG5vbi1ibG9ja2luZyB3cml0ZSBhbmQgZHJhaW4uCi0gICAgdmlydHVhbCBzdGF0dXNfdCBzZXRDYWxsYmFjayh3cDxTdHJlYW1PdXRIYWxJbnRlcmZhY2VDYWxsYmFjaz4gY2FsbGJhY2spOwotCi0gICAgLy8gUmV0dXJucyB3aGV0aGVyIHBhdXNlIGFuZCByZXN1bWUgb3BlcmF0aW9ucyBhcmUgc3VwcG9ydGVkLgotICAgIHZpcnR1YWwgc3RhdHVzX3Qgc3VwcG9ydHNQYXVzZUFuZFJlc3VtZShib29sICpzdXBwb3J0c1BhdXNlLCBib29sICpzdXBwb3J0c1Jlc3VtZSk7Ci0KLSAgICAvLyBOb3RpZmllcyB0byB0aGUgYXVkaW8gZHJpdmVyIHRvIHJlc3VtZSBwbGF5YmFjayBmb2xsb3dpbmcgYSBwYXVzZS4KLSAgICB2aXJ0dWFsIHN0YXR1c190IHBhdXNlKCk7Ci0KLSAgICAvLyBOb3RpZmllcyB0byB0aGUgYXVkaW8gZHJpdmVyIHRvIHJlc3VtZSBwbGF5YmFjayBmb2xsb3dpbmcgYSBwYXVzZS4KLSAgICB2aXJ0dWFsIHN0YXR1c190IHJlc3VtZSgpOwotCi0gICAgLy8gUmV0dXJucyB3aGV0aGVyIGRyYWluIG9wZXJhdGlvbiBpcyBzdXBwb3J0ZWQuCi0gICAgdmlydHVhbCBzdGF0dXNfdCBzdXBwb3J0c0RyYWluKGJvb2wgKnN1cHBvcnRzRHJhaW4pOwotCi0gICAgLy8gUmVxdWVzdHMgbm90aWZpY2F0aW9uIHdoZW4gZGF0YSBidWZmZXJlZCBieSB0aGUgZHJpdmVyL2hhcmR3YXJlIGhhcyBiZWVuIHBsYXllZC4KLSAgICB2aXJ0dWFsIHN0YXR1c190IGRyYWluKGJvb2wgZWFybHlOb3RpZnkpOwotCi0gICAgLy8gTm90aWZpZXMgdG8gdGhlIGF1ZGlvIGRyaXZlciB0byBmbHVzaCB0aGUgcXVldWVkIGRhdGEuCi0gICAgdmlydHVhbCBzdGF0dXNfdCBmbHVzaCgpOwotCi0gICAgLy8gUmV0dXJuIGEgcmVjZW50IGNvdW50IG9mIHRoZSBudW1iZXIgb2YgYXVkaW8gZnJhbWVzIHByZXNlbnRlZCB0byBhbiBleHRlcm5hbCBvYnNlcnZlci4KLSAgICB2aXJ0dWFsIHN0YXR1c190IGdldFByZXNlbnRhdGlvblBvc2l0aW9uKHVpbnQ2NF90ICpmcmFtZXMsIHN0cnVjdCB0aW1lc3BlYyAqdGltZXN0YW1wKTsKLQotICAgIC8vIFN0YXJ0IGEgc3RyZWFtIG9wZXJhdGluZyBpbiBtbWFwIG1vZGUuCi0gICAgdmlydHVhbCBzdGF0dXNfdCBzdGFydCgpOwotCi0gICAgLy8gU3RvcCBhIHN0cmVhbSBvcGVyYXRpbmcgaW4gbW1hcCBtb2RlLgotICAgIHZpcnR1YWwgc3RhdHVzX3Qgc3RvcCgpOwotCi0gICAgLy8gUmV0cmlldmUgaW5mb3JtYXRpb24gb24gdGhlIGRhdGEgYnVmZmVyIGluIG1tYXAgbW9kZS4KLSAgICB2aXJ0dWFsIHN0YXR1c190IGNyZWF0ZU1tYXBCdWZmZXIoaW50MzJfdCBtaW5TaXplRnJhbWVzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgYXVkaW9fbW1hcF9idWZmZXJfaW5mbyAqaW5mbyk7Ci0KLSAgICAvLyBHZXQgY3VycmVudCByZWFkL3dyaXRlIHBvc2l0aW9uIGluIHRoZSBtbWFwIGJ1ZmZlcgotICAgIHZpcnR1YWwgc3RhdHVzX3QgZ2V0TW1hcFBvc2l0aW9uKHN0cnVjdCBhdWRpb19tbWFwX3Bvc2l0aW9uICpwb3NpdGlvbik7Ci0KLSAgICAvLyBDYWxsZWQgd2hlbiB0aGUgbWV0YWRhdGEgb2YgdGhlIHN0cmVhbSdzIHNvdXJjZSBoYXMgYmVlbiBjaGFuZ2VkLgotICAgIHN0YXR1c190IHVwZGF0ZVNvdXJjZU1ldGFkYXRhKGNvbnN0IFNvdXJjZU1ldGFkYXRhJiBzb3VyY2VNZXRhZGF0YSkgb3ZlcnJpZGU7Ci0KLSAgcHJpdmF0ZToKLSAgICBhdWRpb19zdHJlYW1fb3V0X3QgKm1TdHJlYW07Ci0gICAgd3A8U3RyZWFtT3V0SGFsSW50ZXJmYWNlQ2FsbGJhY2s+IG1DYWxsYmFjazsKLQotICAgIGZyaWVuZCBjbGFzcyBEZXZpY2VIYWxMb2NhbDsKLQotICAgIC8vIENhbiBub3QgYmUgY29uc3RydWN0ZWQgZGlyZWN0bHkgYnkgY2xpZW50cy4KLSAgICBTdHJlYW1PdXRIYWxMb2NhbChhdWRpb19zdHJlYW1fb3V0X3QgKnN0cmVhbSwgc3A8RGV2aWNlSGFsTG9jYWw+IGRldmljZSk7Ci0KLSAgICB2aXJ0dWFsIH5TdHJlYW1PdXRIYWxMb2NhbCgpOwotCi0gICAgc3RhdGljIGludCBhc3luY0NhbGxiYWNrKHN0cmVhbV9jYWxsYmFja19ldmVudF90IGV2ZW50LCB2b2lkICpwYXJhbSwgdm9pZCAqY29va2llKTsKLX07Ci0KLWNsYXNzIFN0cmVhbUluSGFsTG9jYWwgOiBwdWJsaWMgU3RyZWFtSW5IYWxJbnRlcmZhY2UsIHB1YmxpYyBTdHJlYW1IYWxMb2NhbCB7Ci0gIHB1YmxpYzoKLSAgICAvLyBSZXR1cm4gdGhlIGZyYW1lIHNpemUgKG51bWJlciBvZiBieXRlcyBwZXIgc2FtcGxlKSBvZiBhIHN0cmVhbS4KLSAgICB2aXJ0dWFsIHN0YXR1c190IGdldEZyYW1lU2l6ZShzaXplX3QgKnNpemUpOwotCi0gICAgLy8gU2V0IHRoZSBpbnB1dCBnYWluIGZvciB0aGUgYXVkaW8gZHJpdmVyLgotICAgIHZpcnR1YWwgc3RhdHVzX3Qgc2V0R2FpbihmbG9hdCBnYWluKTsKLQotICAgIC8vIFJlYWQgYXVkaW8gYnVmZmVyIGluIGZyb20gZHJpdmVyLgotICAgIHZpcnR1YWwgc3RhdHVzX3QgcmVhZCh2b2lkICpidWZmZXIsIHNpemVfdCBieXRlcywgc2l6ZV90ICpyZWFkKTsKLQotICAgIC8vIFJldHVybiB0aGUgYW1vdW50IG9mIGlucHV0IGZyYW1lcyBsb3N0IGluIHRoZSBhdWRpbyBkcml2ZXIuCi0gICAgdmlydHVhbCBzdGF0dXNfdCBnZXRJbnB1dEZyYW1lc0xvc3QodWludDMyX3QgKmZyYW1lc0xvc3QpOwotCi0gICAgLy8gUmV0dXJuIGEgcmVjZW50IGNvdW50IG9mIHRoZSBudW1iZXIgb2YgYXVkaW8gZnJhbWVzIHJlY2VpdmVkIGFuZAotICAgIC8vIHRoZSBjbG9jayB0aW1lIGFzc29jaWF0ZWQgd2l0aCB0aGF0IGZyYW1lIGNvdW50LgotICAgIHZpcnR1YWwgc3RhdHVzX3QgZ2V0Q2FwdHVyZVBvc2l0aW9uKGludDY0X3QgKmZyYW1lcywgaW50NjRfdCAqdGltZSk7Ci0KLSAgICAvLyBTdGFydCBhIHN0cmVhbSBvcGVyYXRpbmcgaW4gbW1hcCBtb2RlLgotICAgIHZpcnR1YWwgc3RhdHVzX3Qgc3RhcnQoKTsKLQotICAgIC8vIFN0b3AgYSBzdHJlYW0gb3BlcmF0aW5nIGluIG1tYXAgbW9kZS4KLSAgICB2aXJ0dWFsIHN0YXR1c190IHN0b3AoKTsKLQotICAgIC8vIFJldHJpZXZlIGluZm9ybWF0aW9uIG9uIHRoZSBkYXRhIGJ1ZmZlciBpbiBtbWFwIG1vZGUuCi0gICAgdmlydHVhbCBzdGF0dXNfdCBjcmVhdGVNbWFwQnVmZmVyKGludDMyX3QgbWluU2l6ZUZyYW1lcywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGF1ZGlvX21tYXBfYnVmZmVyX2luZm8gKmluZm8pOwotCi0gICAgLy8gR2V0IGN1cnJlbnQgcmVhZC93cml0ZSBwb3NpdGlvbiBpbiB0aGUgbW1hcCBidWZmZXIKLSAgICB2aXJ0dWFsIHN0YXR1c190IGdldE1tYXBQb3NpdGlvbihzdHJ1Y3QgYXVkaW9fbW1hcF9wb3NpdGlvbiAqcG9zaXRpb24pOwotCi0gICAgLy8gR2V0IGFjdGl2ZSBtaWNyb3Bob25lcwotICAgIHZpcnR1YWwgc3RhdHVzX3QgZ2V0QWN0aXZlTWljcm9waG9uZXMoc3RkOjp2ZWN0b3I8bWVkaWE6Ok1pY3JvcGhvbmVJbmZvPiAqbWljcm9waG9uZXMpOwotCi0gICAgLy8gQ2FsbGVkIHdoZW4gdGhlIG1ldGFkYXRhIG9mIHRoZSBzdHJlYW0ncyBzaW5rIGhhcyBiZWVuIGNoYW5nZWQuCi0gICAgc3RhdHVzX3QgdXBkYXRlU2lua01ldGFkYXRhKGNvbnN0IFNpbmtNZXRhZGF0YSYgc2lua01ldGFkYXRhKSBvdmVycmlkZTsKLQotICBwcml2YXRlOgotICAgIGF1ZGlvX3N0cmVhbV9pbl90ICptU3RyZWFtOwotCi0gICAgZnJpZW5kIGNsYXNzIERldmljZUhhbExvY2FsOwotCi0gICAgLy8gQ2FuIG5vdCBiZSBjb25zdHJ1Y3RlZCBkaXJlY3RseSBieSBjbGllbnRzLgotICAgIFN0cmVhbUluSGFsTG9jYWwoYXVkaW9fc3RyZWFtX2luX3QgKnN0cmVhbSwgc3A8RGV2aWNlSGFsTG9jYWw+IGRldmljZSk7Ci0KLSAgICB2aXJ0dWFsIH5TdHJlYW1JbkhhbExvY2FsKCk7Ci19OwotCi19IC8vIG5hbWVzcGFjZSBhbmRyb2lkCi0KLSNlbmRpZiAvLyBBTkRST0lEX0hBUkRXQVJFX1NUUkVBTV9IQUxfTE9DQUxfSApkaWZmIC0tZ2l0IGEvbWVkaWEvbGliYXVkaW9oYWwvMi4wL1N0cmVhbVBvd2VyTG9nLmggYi9tZWRpYS9saWJhdWRpb2hhbC8yLjAvU3RyZWFtUG93ZXJMb2cuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTc4YjFhYS4uMDAwMDAwMAotLS0gYS9tZWRpYS9saWJhdWRpb2hhbC8yLjAvU3RyZWFtUG93ZXJMb2cuaAorKysgL2Rldi9udWxsCkBAIC0xLDEwMiArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDE3IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKLSAqCi0gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKLSAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KLSAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotICoKLSAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0gKgotICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQotICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKLSAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgotICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAotICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCi0gKi8KLQotI2lmbmRlZiBBTkRST0lEX0hBUkRXQVJFX1NUUkVBTV9QT1dFUl9MT0dfSAotI2RlZmluZSBBTkRST0lEX0hBUkRXQVJFX1NUUkVBTV9QT1dFUl9MT0dfSAotCi0jaW5jbHVkZSA8YXVkaW9fdXRpbHMvY2xvY2suaD4KLSNpbmNsdWRlIDxhdWRpb191dGlscy9Qb3dlckxvZy5oPgotI2luY2x1ZGUgPGN1dGlscy9wcm9wZXJ0aWVzLmg+Ci0jaW5jbHVkZSA8c3lzdGVtL2F1ZGlvLmg+Ci0KLW5hbWVzcGFjZSBhbmRyb2lkIHsKLQotY2xhc3MgU3RyZWFtUG93ZXJMb2cgewotcHVibGljOgotICAgIFN0cmVhbVBvd2VyTG9nKCkgOgotICAgICAgICBtSXNVc2VyRGVidWdPckVuZ0J1aWxkKGlzX3VzZXJkZWJ1Z19vcl9lbmdfYnVpbGQoKSksCi0gICAgICAgIG1Qb3dlckxvZyhudWxscHRyKSwKLSAgICAgICAgbUZyYW1lU2l6ZSgwKSB7Ci0gICAgICAgIC8vIHVzZSBpbml0KCkgdG8gc2V0IHVwIHRoZSBwb3dlciBsb2cuCi0gICAgfQotCi0gICAgflN0cmVhbVBvd2VyTG9nKCkgewotICAgICAgICBwb3dlcl9sb2dfZGVzdHJveShtUG93ZXJMb2cpOyAvLyBPSyBmb3IgbnVsbCBtUG93ZXJMb2cKLSAgICAgICAgbVBvd2VyTG9nID0gbnVsbHB0cjsKLSAgICB9Ci0KLSAgICAvLyBBIG9uZS10aW1lIGluaXRpYWxpemF0aW9uIChkbyBub3QgY2FsbCB0d2ljZSkgYmVmb3JlIHVzaW5nIFN0cmVhbVBvd2VyTG9nLgotICAgIHZvaWQgaW5pdCh1aW50MzJfdCBzYW1wbGVSYXRlLCBhdWRpb19jaGFubmVsX21hc2tfdCBjaGFubmVsTWFzaywgYXVkaW9fZm9ybWF0X3QgZm9ybWF0KSB7Ci0gICAgICAgIGlmIChtUG93ZXJMb2cgPT0gbnVsbHB0cikgewotICAgICAgICAgICAgLy8gTm90ZTogQSB3YXkgdG8gZ2V0IGNoYW5uZWwgY291bnQgZm9yIGJvdGggaW5wdXQgYW5kIG91dHB1dCBjaGFubmVsIG1hc2tzCi0gICAgICAgICAgICAvLyBidXQgZG9lcyBub3QgY2hlY2sgdmFsaWRpdHkgb2YgdGhlIGNoYW5uZWwgbWFzay4KLSAgICAgICAgICAgIGNvbnN0IHVpbnQzMl90IGNoYW5uZWxDb3VudCA9IHBvcGNvdW50KGF1ZGlvX2NoYW5uZWxfbWFza19nZXRfYml0cyhjaGFubmVsTWFzaykpOwotICAgICAgICAgICAgbUZyYW1lU2l6ZSA9IGNoYW5uZWxDb3VudCAqIGF1ZGlvX2J5dGVzX3Blcl9zYW1wbGUoZm9ybWF0KTsKLSAgICAgICAgICAgIGlmIChtRnJhbWVTaXplID4gMCkgewotICAgICAgICAgICAgICAgIGNvbnN0IHNpemVfdCBrUG93ZXJMb2dGcmFtZXNQZXJFbnRyeSA9Ci0gICAgICAgICAgICAgICAgICAgICAgICAobG9uZyBsb25nKXNhbXBsZVJhdGUgKiBrUG93ZXJMb2dTYW1wbGluZ0ludGVydmFsTXMgLyAxMDAwOwotICAgICAgICAgICAgICAgIG1Qb3dlckxvZyA9IHBvd2VyX2xvZ19jcmVhdGUoCi0gICAgICAgICAgICAgICAgICAgICAgICBzYW1wbGVSYXRlLAotICAgICAgICAgICAgICAgICAgICAgICAgY2hhbm5lbENvdW50LAotICAgICAgICAgICAgICAgICAgICAgICAgZm9ybWF0LAotICAgICAgICAgICAgICAgICAgICAgICAga1Bvd2VyTG9nRW50cmllcywKLSAgICAgICAgICAgICAgICAgICAgICAgIGtQb3dlckxvZ0ZyYW1lc1BlckVudHJ5KTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICAvLyBtUG93ZXJMb2cgbWF5IGJlIE5VTEwgKG5vdCB0aGUgcmlnaHQgYnVpbGQsIGZvcm1hdCBub3QgYWNjZXB0ZWQsIGV0Yy4pLgotICAgIH0KLQotICAgIC8vIER1bXAgdGhlIHBvd2VyIGxvZyB0byBmZC4KLSAgICB2b2lkIGR1bXAoaW50IGZkKSBjb25zdCB7Ci0gICAgICAgIC8vIE9LIGZvciBudWxsIG1Qb3dlckxvZwotICAgICAgICAodm9pZClwb3dlcl9sb2dfZHVtcCgKLSAgICAgICAgICAgICAgICBtUG93ZXJMb2csIGZkLCAiICAgICAgIiAvKiBwcmVmaXggKi8sIGtQb3dlckxvZ0xpbmVzLCAwIC8qIGxpbWl0X25zICovKTsKLSAgICB9Ci0KLSAgICAvLyBMb2cgdGhlIGF1ZGlvIGRhdGEgY29udGFpbmVkIGluIGJ1ZmZlci4KLSAgICB2b2lkIGxvZyhjb25zdCB2b2lkICpidWZmZXIsIHNpemVfdCBzaXplSW5CeXRlcykgY29uc3QgewotICAgICAgICBpZiAobVBvd2VyTG9nICE9IG51bGxwdHIpIHsgLy8gbUZyYW1lU2l6ZSBpcyBhbHdheXMgbm9uemVybyBpZiBtUG93ZXJMb2cgZXhpc3RzLgotICAgICAgICAgICAgcG93ZXJfbG9nX2xvZygKLSAgICAgICAgICAgICAgICAgICAgbVBvd2VyTG9nLCBidWZmZXIsIHNpemVJbkJ5dGVzIC8gbUZyYW1lU2l6ZSwgYXVkaW9fdXRpbHNfZ2V0X3JlYWxfdGltZV9ucygpKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIGJvb2wgaXNVc2VyRGVidWdPckVuZ0J1aWxkKCkgY29uc3QgewotICAgICAgICByZXR1cm4gbUlzVXNlckRlYnVnT3JFbmdCdWlsZDsKLSAgICB9Ci0KLXByaXZhdGU6Ci0KLSAgICBzdGF0aWMgaW5saW5lIGJvb2wgaXNfdXNlcmRlYnVnX29yX2VuZ19idWlsZCgpIHsKLSAgICAgICAgY2hhciB2YWx1ZVtQUk9QRVJUWV9WQUxVRV9NQVhdOwotICAgICAgICAodm9pZClwcm9wZXJ0eV9nZXQoInJvLmJ1aWxkLnR5cGUiLCB2YWx1ZSwgInVua25vd24iKTsgLy8gaWdub3JlIGFjdHVhbCBsZW5ndGgKLSAgICAgICAgcmV0dXJuIHN0cmNtcCh2YWx1ZSwgInVzZXJkZWJ1ZyIpID09IDAgfHwgc3RyY21wKHZhbHVlLCAiZW5nIikgPT0gMDsKLSAgICB9Ci0KLSAgICAvLyBBdWRpbyBzaWduYWwgcG93ZXIgbG9nIGNvbmZpZ3VyYXRpb24uCi0gICAgc3RhdGljIGNvbnN0IHNpemVfdCBrUG93ZXJMb2dMaW5lcyA9IDQwOwotICAgIHN0YXRpYyBjb25zdCBzaXplX3Qga1Bvd2VyTG9nU2FtcGxpbmdJbnRlcnZhbE1zID0gNTA7Ci0gICAgc3RhdGljIGNvbnN0IHNpemVfdCBrUG93ZXJMb2dFbnRyaWVzID0gKDEgLyogbWludXRlcyAqLyAqIDYwIC8qIHNlY29uZHMgKi8gKiAxMDAwIC8qIG1zZWMgKi8KLSAgICAgICAgICAgIC8ga1Bvd2VyTG9nU2FtcGxpbmdJbnRlcnZhbE1zKTsKLQotICAgIGNvbnN0IGJvb2wgbUlzVXNlckRlYnVnT3JFbmdCdWlsZDsKLSAgICBwb3dlcl9sb2dfdCAqbVBvd2VyTG9nOwotICAgIHNpemVfdCBtRnJhbWVTaXplOwotfTsKLQotfSAvLyBuYW1lc3BhY2UgYW5kcm9pZAotCi0jZW5kaWYgLy8gQU5EUk9JRF9IQVJEV0FSRV9TVFJFQU1fUE9XRVJfTE9HX0gKZGlmZiAtLWdpdCBhL21lZGlhL2xpYmF1ZGlvaGFsLzQuMC9BbmRyb2lkLmJwIGIvbWVkaWEvbGliYXVkaW9oYWwvNC4wL0FuZHJvaWQuYnAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDgzM2RlZmEuLjAwMDAwMDAKLS0tIGEvbWVkaWEvbGliYXVkaW9oYWwvNC4wL0FuZHJvaWQuYnAKKysrIC9kZXYvbnVsbApAQCAtMSw1OCArMCwwIEBACi1jY19saWJyYXJ5X3NoYXJlZCB7Ci0gICAgbmFtZTogImxpYmF1ZGlvaGFsQDQuMCIsCi0KLSAgICBzcmNzOiBbCi0gICAgICAgICJEZXZpY2VIYWxMb2NhbC5jcHAiLAotICAgICAgICAiRGV2aWNlc0ZhY3RvcnlIYWxIeWJyaWQuY3BwIiwKLSAgICAgICAgIkRldmljZXNGYWN0b3J5SGFsTG9jYWwuY3BwIiwKLSAgICAgICAgIlN0cmVhbUhhbExvY2FsLmNwcCIsCi0KLSAgICAgICAgIkNvbnZlcnNpb25IZWxwZXJIaWRsLmNwcCIsCi0gICAgICAgICJEZXZpY2VIYWxIaWRsLmNwcCIsCi0gICAgICAgICJEZXZpY2VzRmFjdG9yeUhhbEhpZGwuY3BwIiwKLSAgICAgICAgIkVmZmVjdEJ1ZmZlckhhbEhpZGwuY3BwIiwKLSAgICAgICAgIkVmZmVjdEhhbEhpZGwuY3BwIiwKLSAgICAgICAgIkVmZmVjdHNGYWN0b3J5SGFsSGlkbC5jcHAiLAotICAgICAgICAiU3RyZWFtSGFsSGlkbC5jcHAiLAotICAgIF0sCi0KLSAgICBleHBvcnRfaW5jbHVkZV9kaXJzOiBbImluY2x1ZGUiXSwKLQotICAgIGNmbGFnczogWwotICAgICAgICAiLVdhbGwiLAotICAgICAgICAiLVdleHRyYSIsCi0gICAgICAgICItV2Vycm9yIiwKLSAgICBdLAotICAgIHNoYXJlZF9saWJzOiBbCi0gICAgICAgICJsaWJhdWRpb2hhbF9kZWF0aGhhbmRsZXIiLAotICAgICAgICAibGliYXVkaW91dGlscyIsCi0gICAgICAgICJsaWJiaW5kZXIiLAotICAgICAgICAibGliY3V0aWxzIiwKLSAgICAgICAgImxpYmxvZyIsCi0gICAgICAgICJsaWJ1dGlscyIsCi0gICAgICAgICJsaWJoYXJkd2FyZSIsCi0gICAgICAgICJsaWJiYXNlIiwKLSAgICAgICAgImxpYmZtcSIsCi0gICAgICAgICJsaWJod2JpbmRlciIsCi0gICAgICAgICJsaWJoaWRsYmFzZSIsCi0gICAgICAgICJsaWJoaWRsbWVtb3J5IiwKLSAgICAgICAgImxpYmhpZGx0cmFuc3BvcnQiLAotICAgICAgICAiYW5kcm9pZC5oYXJkd2FyZS5hdWRpb0A0LjAiLAotICAgICAgICAiYW5kcm9pZC5oYXJkd2FyZS5hdWRpby5jb21tb24tdXRpbCIsCi0gICAgICAgICJhbmRyb2lkLmhhcmR3YXJlLmF1ZGlvLmNvbW1vbkA0LjAiLAotICAgICAgICAiYW5kcm9pZC5oYXJkd2FyZS5hdWRpby5jb21tb25ANC4wLXV0aWwiLAotICAgICAgICAiYW5kcm9pZC5oYXJkd2FyZS5hdWRpby5lZmZlY3RANC4wIiwKLSAgICAgICAgImFuZHJvaWQuaGlkbC5hbGxvY2F0b3JAMS4wIiwKLSAgICAgICAgImFuZHJvaWQuaGlkbC5tZW1vcnlAMS4wIiwKLSAgICAgICAgImxpYm1lZGlhX2hlbHBlciIsCi0gICAgICAgICJsaWJtZWRpYXV0aWxzIiwKLSAgICBdLAotICAgIGhlYWRlcl9saWJzOiBbCi0gICAgICAgICJhbmRyb2lkLmhhcmR3YXJlLmF1ZGlvLmNvbW1vbi51dGlsQGFsbC12ZXJzaW9ucyIsCi0gICAgICAgICJsaWJhdWRpb2hhbF9oZWFkZXJzIgotICAgIF0sCi0KLSAgICBleHBvcnRfc2hhcmVkX2xpYl9oZWFkZXJzOiBbCi0gICAgICAgICJsaWJmbXEiLAotICAgIF0sCi19CmRpZmYgLS1naXQgYS9tZWRpYS9saWJhdWRpb2hhbC80LjAvQ29udmVyc2lvbkhlbHBlckhpZGwuY3BwIGIvbWVkaWEvbGliYXVkaW9oYWwvNC4wL0NvbnZlcnNpb25IZWxwZXJIaWRsLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZmUyNzUwNC4uMDAwMDAwMAotLS0gYS9tZWRpYS9saWJhdWRpb2hhbC80LjAvQ29udmVyc2lvbkhlbHBlckhpZGwuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsMjM3ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTYgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAotICoKLSAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwotICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgotICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0gKgotICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLSAqCi0gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCi0gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAotICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCi0gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCi0gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KLSAqLwotCi0jaW5jbHVkZSA8c3RyaW5nLmg+Ci0KLSNkZWZpbmUgTE9HX1RBRyAiSGFsSGlkbCIKLSNpbmNsdWRlIDxtZWRpYS9BdWRpb1BhcmFtZXRlci5oPgotI2luY2x1ZGUgPHV0aWxzL0xvZy5oPgotCi0jaW5jbHVkZSAiQ29udmVyc2lvbkhlbHBlckhpZGwuaCIKLQotdXNpbmcgOjphbmRyb2lkOjpoYXJkd2FyZTo6YXVkaW86OlY0XzA6OkF1ZGlvTWljcm9waG9uZUNoYW5uZWxNYXBwaW5nOwotdXNpbmcgOjphbmRyb2lkOjpoYXJkd2FyZTo6YXVkaW86OlY0XzA6OkF1ZGlvTWljcm9waG9uZURpcmVjdGlvbmFsaXR5OwotdXNpbmcgOjphbmRyb2lkOjpoYXJkd2FyZTo6YXVkaW86OlY0XzA6OkF1ZGlvTWljcm9waG9uZUxvY2F0aW9uOwotdXNpbmcgOjphbmRyb2lkOjpoYXJkd2FyZTo6YXVkaW86OlY0XzA6OkRldmljZUFkZHJlc3M7Ci11c2luZyA6OmFuZHJvaWQ6OmhhcmR3YXJlOjphdWRpbzo6VjRfMDo6TWljcm9waG9uZUluZm87Ci11c2luZyA6OmFuZHJvaWQ6OmhhcmR3YXJlOjphdWRpbzo6VjRfMDo6UmVzdWx0OwotCi1uYW1lc3BhY2UgYW5kcm9pZCB7Ci1uYW1lc3BhY2UgVjRfMCB7Ci0KLS8vIHN0YXRpYwotc3RhdHVzX3QgQ29udmVyc2lvbkhlbHBlckhpZGw6OmtleXNGcm9tSGFsKGNvbnN0IFN0cmluZzgmIGtleXMsIGhpZGxfdmVjPGhpZGxfc3RyaW5nPiAqaGlkbEtleXMpIHsKLSAgICBBdWRpb1BhcmFtZXRlciBoYWxLZXlzKGtleXMpOwotICAgIGlmIChoYWxLZXlzLnNpemUoKSA9PSAwKSByZXR1cm4gQkFEX1ZBTFVFOwotICAgIGhpZGxLZXlzLT5yZXNpemUoaGFsS2V5cy5zaXplKCkpOwotICAgIC8vRklYTUU6ICBrZXlTdHJlYW1TdXBwb3J0ZWRDaGFubmVscyBhbmQga2V5U3RyZWFtU3VwcG9ydGVkU2FtcGxpbmdSYXRlcyBjb21lIHdpdGggYQotICAgIC8vICJrZXlGb3JtYXQ9PHZhbHVlPiIgcGFpci4gV2UgbmVlZCB0byB0cmFuc2Zvcm0gaXQgaW50byBhIHNpbmdsZSBrZXkgc3RyaW5nIHNvIHRoYXQgaXQgaXMKLSAgICAvLyBjYXJyaWVkIG92ZXIgdG8gdGhlIGxlZ2FjeSBIQUwgdmlhIEhJREwuCi0gICAgU3RyaW5nOCB2YWx1ZTsKLSAgICBib29sIGtlZXBGb3JtYXRWYWx1ZSA9IGhhbEtleXMuc2l6ZSgpID09IDIgJiYKLSAgICAgICAgIChoYWxLZXlzLmdldChTdHJpbmc4KEF1ZGlvUGFyYW1ldGVyOjprZXlTdHJlYW1TdXBwb3J0ZWRDaGFubmVscyksIHZhbHVlKSA9PSBOT19FUlJPUiB8fAotICAgICAgICAgaGFsS2V5cy5nZXQoU3RyaW5nOChBdWRpb1BhcmFtZXRlcjo6a2V5U3RyZWFtU3VwcG9ydGVkU2FtcGxpbmdSYXRlcyksIHZhbHVlKSA9PSBOT19FUlJPUik7Ci0KLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGhhbEtleXMuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgU3RyaW5nOCBrZXk7Ci0gICAgICAgIHN0YXR1c190IHN0YXR1cyA9IGhhbEtleXMuZ2V0QXQoaSwga2V5KTsKLSAgICAgICAgaWYgKHN0YXR1cyAhPSBPSykgcmV0dXJuIHN0YXR1czsKLSAgICAgICAgaWYgKGtlZXBGb3JtYXRWYWx1ZSAmJiBrZXkgPT0gQXVkaW9QYXJhbWV0ZXI6OmtleUZvcm1hdCkgewotICAgICAgICAgICAgQXVkaW9QYXJhbWV0ZXIgZm9ybWF0UGFyYW07Ci0gICAgICAgICAgICBoYWxLZXlzLmdldEF0KGksIGtleSwgdmFsdWUpOwotICAgICAgICAgICAgZm9ybWF0UGFyYW0uYWRkKGtleSwgdmFsdWUpOwotICAgICAgICAgICAga2V5ID0gZm9ybWF0UGFyYW0udG9TdHJpbmcoKTsKLSAgICAgICAgfQotICAgICAgICAoKmhpZGxLZXlzKVtpXSA9IGtleS5zdHJpbmcoKTsKLSAgICB9Ci0gICAgcmV0dXJuIE9LOwotfQotCi0vLyBzdGF0aWMKLXN0YXR1c190IENvbnZlcnNpb25IZWxwZXJIaWRsOjpwYXJhbWV0ZXJzRnJvbUhhbCgKLSAgICAgICAgY29uc3QgU3RyaW5nOCYga3ZQYWlycywgaGlkbF92ZWM8UGFyYW1ldGVyVmFsdWU+ICpoaWRsUGFyYW1zKSB7Ci0gICAgQXVkaW9QYXJhbWV0ZXIgcGFyYW1zKGt2UGFpcnMpOwotICAgIGlmIChwYXJhbXMuc2l6ZSgpID09IDApIHJldHVybiBCQURfVkFMVUU7Ci0gICAgaGlkbFBhcmFtcy0+cmVzaXplKHBhcmFtcy5zaXplKCkpOwotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgcGFyYW1zLnNpemUoKTsgKytpKSB7Ci0gICAgICAgIFN0cmluZzgga2V5LCB2YWx1ZTsKLSAgICAgICAgc3RhdHVzX3Qgc3RhdHVzID0gcGFyYW1zLmdldEF0KGksIGtleSwgdmFsdWUpOwotICAgICAgICBpZiAoc3RhdHVzICE9IE9LKSByZXR1cm4gc3RhdHVzOwotICAgICAgICAoKmhpZGxQYXJhbXMpW2ldLmtleSA9IGtleS5zdHJpbmcoKTsKLSAgICAgICAgKCpoaWRsUGFyYW1zKVtpXS52YWx1ZSA9IHZhbHVlLnN0cmluZygpOwotICAgIH0KLSAgICByZXR1cm4gT0s7Ci19Ci0KLS8vIHN0YXRpYwotdm9pZCBDb252ZXJzaW9uSGVscGVySGlkbDo6cGFyYW1ldGVyc1RvSGFsKAotICAgICAgICBjb25zdCBoaWRsX3ZlYzxQYXJhbWV0ZXJWYWx1ZT4mIHBhcmFtZXRlcnMsIFN0cmluZzggKnZhbHVlcykgewotICAgIEF1ZGlvUGFyYW1ldGVyIHBhcmFtczsKLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHBhcmFtZXRlcnMuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgcGFyYW1zLmFkZChTdHJpbmc4KHBhcmFtZXRlcnNbaV0ua2V5LmNfc3RyKCkpLCBTdHJpbmc4KHBhcmFtZXRlcnNbaV0udmFsdWUuY19zdHIoKSkpOwotICAgIH0KLSAgICB2YWx1ZXMtPnNldFRvKHBhcmFtcy50b1N0cmluZygpKTsKLX0KLQotQ29udmVyc2lvbkhlbHBlckhpZGw6OkNvbnZlcnNpb25IZWxwZXJIaWRsKGNvbnN0IGNoYXIqIGNsYXNzTmFtZSkKLSAgICAgICAgOiBtQ2xhc3NOYW1lKGNsYXNzTmFtZSkgewotfQotCi0vLyBzdGF0aWMKLXN0YXR1c190IENvbnZlcnNpb25IZWxwZXJIaWRsOjphbmFseXplUmVzdWx0KGNvbnN0IFJlc3VsdCYgcmVzdWx0KSB7Ci0gICAgc3dpdGNoIChyZXN1bHQpIHsKLSAgICAgICAgY2FzZSBSZXN1bHQ6Ok9LOiByZXR1cm4gT0s7Ci0gICAgICAgIGNhc2UgUmVzdWx0OjpJTlZBTElEX0FSR1VNRU5UUzogcmV0dXJuIEJBRF9WQUxVRTsKLSAgICAgICAgY2FzZSBSZXN1bHQ6OklOVkFMSURfU1RBVEU6IHJldHVybiBOT1RfRU5PVUdIX0RBVEE7Ci0gICAgICAgIGNhc2UgUmVzdWx0OjpOT1RfSU5JVElBTElaRUQ6IHJldHVybiBOT19JTklUOwotICAgICAgICBjYXNlIFJlc3VsdDo6Tk9UX1NVUFBPUlRFRDogcmV0dXJuIElOVkFMSURfT1BFUkFUSU9OOwotICAgICAgICBkZWZhdWx0OiByZXR1cm4gTk9fSU5JVDsKLSAgICB9Ci19Ci0KLXZvaWQgQ29udmVyc2lvbkhlbHBlckhpZGw6OmVtaXRFcnJvcihjb25zdCBjaGFyKiBmdW5jTmFtZSwgY29uc3QgY2hhciogZGVzY3JpcHRpb24pIHsKLSAgICBBTE9HRSgiJXMgJXAgJXM6ICVzIChmcm9tIHJwYykiLCBtQ2xhc3NOYW1lLCB0aGlzLCBmdW5jTmFtZSwgZGVzY3JpcHRpb24pOwotfQotCi0vLyBUT0RPOiBVc2UgdGhlIHNhbWUgaW1wbGVtZW50YXRpb24gaW4gdGhlIGhhbCB3aGVuIGl0IG1vdmVzIHRvIGEgdXRpbCBsaWJyYXJ5Lgotc3RkOjpzdHJpbmcgZGV2aWNlQWRkcmVzc1RvSGFsKGNvbnN0IERldmljZUFkZHJlc3MmIGFkZHJlc3MpIHsKLSAgICAvLyBIQUwgYXNzdW1lcyB0aGF0IHRoZSBhZGRyZXNzIGlzIE5VTC10ZXJtaW5hdGVkLgotICAgIGNoYXIgaGFsQWRkcmVzc1tBVURJT19ERVZJQ0VfTUFYX0FERFJFU1NfTEVOXTsKLSAgICBtZW1zZXQoaGFsQWRkcmVzcywgMCwgc2l6ZW9mKGhhbEFkZHJlc3MpKTsKLSAgICBhdWRpb19kZXZpY2VzX3QgaGFsRGV2aWNlID0gc3RhdGljX2Nhc3Q8YXVkaW9fZGV2aWNlc190PihhZGRyZXNzLmRldmljZSk7Ci0gICAgY29uc3QgYm9vbCBpc0lucHV0ID0gKGhhbERldmljZSAmIEFVRElPX0RFVklDRV9CSVRfSU4pICE9IDA7Ci0gICAgaWYgKGlzSW5wdXQpIGhhbERldmljZSAmPSB+QVVESU9fREVWSUNFX0JJVF9JTjsKLSAgICBpZiAoKCFpc0lucHV0ICYmIChoYWxEZXZpY2UgJiBBVURJT19ERVZJQ0VfT1VUX0FMTF9BMkRQKSAhPSAwKSB8fAotICAgICAgICAoaXNJbnB1dCAmJiAoaGFsRGV2aWNlICYgQVVESU9fREVWSUNFX0lOX0JMVUVUT09USF9BMkRQKSAhPSAwKSkgewotICAgICAgICBzbnByaW50ZihoYWxBZGRyZXNzLCBzaXplb2YoaGFsQWRkcmVzcyksICIlMDJYOiUwMlg6JTAyWDolMDJYOiUwMlg6JTAyWCIsCi0gICAgICAgICAgICAgICAgIGFkZHJlc3MuYWRkcmVzcy5tYWNbMF0sIGFkZHJlc3MuYWRkcmVzcy5tYWNbMV0sIGFkZHJlc3MuYWRkcmVzcy5tYWNbMl0sCi0gICAgICAgICAgICAgICAgIGFkZHJlc3MuYWRkcmVzcy5tYWNbM10sIGFkZHJlc3MuYWRkcmVzcy5tYWNbNF0sIGFkZHJlc3MuYWRkcmVzcy5tYWNbNV0pOwotICAgIH0gZWxzZSBpZiAoKCFpc0lucHV0ICYmIChoYWxEZXZpY2UgJiBBVURJT19ERVZJQ0VfT1VUX0lQKSAhPSAwKSB8fAotICAgICAgICAgICAgICAgKGlzSW5wdXQgJiYgKGhhbERldmljZSAmIEFVRElPX0RFVklDRV9JTl9JUCkgIT0gMCkpIHsKLSAgICAgICAgc25wcmludGYoaGFsQWRkcmVzcywgc2l6ZW9mKGhhbEFkZHJlc3MpLCAiJWQuJWQuJWQuJWQiLCBhZGRyZXNzLmFkZHJlc3MuaXB2NFswXSwKLSAgICAgICAgICAgICAgICAgYWRkcmVzcy5hZGRyZXNzLmlwdjRbMV0sIGFkZHJlc3MuYWRkcmVzcy5pcHY0WzJdLCBhZGRyZXNzLmFkZHJlc3MuaXB2NFszXSk7Ci0gICAgfSBlbHNlIGlmICgoIWlzSW5wdXQgJiYgKGhhbERldmljZSAmIEFVRElPX0RFVklDRV9PVVRfQUxMX1VTQikgIT0gMCkgfHwKLSAgICAgICAgICAgICAgIChpc0lucHV0ICYmIChoYWxEZXZpY2UgJiBBVURJT19ERVZJQ0VfSU5fQUxMX1VTQikgIT0gMCkpIHsKLSAgICAgICAgc25wcmludGYoaGFsQWRkcmVzcywgc2l6ZW9mKGhhbEFkZHJlc3MpLCAiY2FyZD0lZDtkZXZpY2U9JWQiLCBhZGRyZXNzLmFkZHJlc3MuYWxzYS5jYXJkLAotICAgICAgICAgICAgICAgICBhZGRyZXNzLmFkZHJlc3MuYWxzYS5kZXZpY2UpOwotICAgIH0gZWxzZSBpZiAoKCFpc0lucHV0ICYmIChoYWxEZXZpY2UgJiBBVURJT19ERVZJQ0VfT1VUX0JVUykgIT0gMCkgfHwKLSAgICAgICAgICAgICAgIChpc0lucHV0ICYmIChoYWxEZXZpY2UgJiBBVURJT19ERVZJQ0VfSU5fQlVTKSAhPSAwKSkgewotICAgICAgICBzbnByaW50ZihoYWxBZGRyZXNzLCBzaXplb2YoaGFsQWRkcmVzcyksICIlcyIsIGFkZHJlc3MuYnVzQWRkcmVzcy5jX3N0cigpKTsKLSAgICB9IGVsc2UgaWYgKCghaXNJbnB1dCAmJiAoaGFsRGV2aWNlICYgQVVESU9fREVWSUNFX09VVF9SRU1PVEVfU1VCTUlYKSkgIT0gMCB8fAotICAgICAgICAgICAgICAgKGlzSW5wdXQgJiYgKGhhbERldmljZSAmIEFVRElPX0RFVklDRV9JTl9SRU1PVEVfU1VCTUlYKSAhPSAwKSkgewotICAgICAgICBzbnByaW50ZihoYWxBZGRyZXNzLCBzaXplb2YoaGFsQWRkcmVzcyksICIlcyIsIGFkZHJlc3MuclN1Ym1peEFkZHJlc3MuY19zdHIoKSk7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgc25wcmludGYoaGFsQWRkcmVzcywgc2l6ZW9mKGhhbEFkZHJlc3MpLCAiJXMiLCBhZGRyZXNzLmJ1c0FkZHJlc3MuY19zdHIoKSk7Ci0gICAgfQotICAgIHJldHVybiBoYWxBZGRyZXNzOwotfQotCi0vL2xvY2FsIGNvbnZlcnNpb24gaGVscGVycwotCi1hdWRpb19taWNyb3Bob25lX2NoYW5uZWxfbWFwcGluZ190ICBjaGFubmVsTWFwcGluZ1RvSGFsKEF1ZGlvTWljcm9waG9uZUNoYW5uZWxNYXBwaW5nIG1hcHBpbmcpIHsKLSAgICBzd2l0Y2ggKG1hcHBpbmcpIHsKLSAgICAgICAgY2FzZSBBdWRpb01pY3JvcGhvbmVDaGFubmVsTWFwcGluZzo6VU5VU0VEOgotICAgICAgICAgICAgcmV0dXJuIEFVRElPX01JQ1JPUEhPTkVfQ0hBTk5FTF9NQVBQSU5HX1VOVVNFRDsKLSAgICAgICAgY2FzZSBBdWRpb01pY3JvcGhvbmVDaGFubmVsTWFwcGluZzo6RElSRUNUOgotICAgICAgICAgICAgcmV0dXJuIEFVRElPX01JQ1JPUEhPTkVfQ0hBTk5FTF9NQVBQSU5HX0RJUkVDVDsKLSAgICAgICAgY2FzZSBBdWRpb01pY3JvcGhvbmVDaGFubmVsTWFwcGluZzo6UFJPQ0VTU0VEOgotICAgICAgICAgICAgcmV0dXJuIEFVRElPX01JQ1JPUEhPTkVfQ0hBTk5FTF9NQVBQSU5HX1BST0NFU1NFRDsKLSAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIExPR19BTFdBWVNfRkFUQUwoIlVua25vd24gY2hhbm5lbE1hcHBpbmdUb0hhbCBjb252ZXJzaW9uICVkIiwgbWFwcGluZyk7Ci0gICAgfQotfQotCi1hdWRpb19taWNyb3Bob25lX2xvY2F0aW9uX3QgbG9jYXRpb25Ub0hhbChBdWRpb01pY3JvcGhvbmVMb2NhdGlvbiBsb2NhdGlvbikgewotICAgIHN3aXRjaCAobG9jYXRpb24pIHsKLSAgICAgICAgY2FzZSBBdWRpb01pY3JvcGhvbmVMb2NhdGlvbjo6VU5LTk9XTjoKLSAgICAgICAgICAgIHJldHVybiBBVURJT19NSUNST1BIT05FX0xPQ0FUSU9OX1VOS05PV047Ci0gICAgICAgIGNhc2UgQXVkaW9NaWNyb3Bob25lTG9jYXRpb246Ok1BSU5CT0RZOgotICAgICAgICAgICAgcmV0dXJuIEFVRElPX01JQ1JPUEhPTkVfTE9DQVRJT05fTUFJTkJPRFk7Ci0gICAgICAgIGNhc2UgQXVkaW9NaWNyb3Bob25lTG9jYXRpb246Ok1BSU5CT0RZX01PVkFCTEU6Ci0gICAgICAgICAgICByZXR1cm4gQVVESU9fTUlDUk9QSE9ORV9MT0NBVElPTl9NQUlOQk9EWV9NT1ZBQkxFOwotICAgICAgICBjYXNlIEF1ZGlvTWljcm9waG9uZUxvY2F0aW9uOjpQRVJJUEhFUkFMOgotICAgICAgICAgICAgcmV0dXJuIEFVRElPX01JQ1JPUEhPTkVfTE9DQVRJT05fUEVSSVBIRVJBTDsKLSAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIExPR19BTFdBWVNfRkFUQUwoIlVua25vd24gbG9jYXRpb25Ub0hhbCBjb252ZXJzaW9uICVkIiwgbG9jYXRpb24pOwotICAgIH0KLX0KLWF1ZGlvX21pY3JvcGhvbmVfZGlyZWN0aW9uYWxpdHlfdCBkaXJlY3Rpb25hbGl0eVRvSGFsKEF1ZGlvTWljcm9waG9uZURpcmVjdGlvbmFsaXR5IGRpcikgewotICAgIHN3aXRjaCAoZGlyKSB7Ci0gICAgICAgIGNhc2UgQXVkaW9NaWNyb3Bob25lRGlyZWN0aW9uYWxpdHk6OlVOS05PV046Ci0gICAgICAgICAgICByZXR1cm4gQVVESU9fTUlDUk9QSE9ORV9ESVJFQ1RJT05BTElUWV9VTktOT1dOOwotICAgICAgICBjYXNlIEF1ZGlvTWljcm9waG9uZURpcmVjdGlvbmFsaXR5OjpPTU5JOgotICAgICAgICAgICAgcmV0dXJuIEFVRElPX01JQ1JPUEhPTkVfRElSRUNUSU9OQUxJVFlfT01OSTsKLSAgICAgICAgY2FzZSBBdWRpb01pY3JvcGhvbmVEaXJlY3Rpb25hbGl0eTo6QklfRElSRUNUSU9OQUw6Ci0gICAgICAgICAgICByZXR1cm4gQVVESU9fTUlDUk9QSE9ORV9ESVJFQ1RJT05BTElUWV9CSV9ESVJFQ1RJT05BTDsKLSAgICAgICAgY2FzZSBBdWRpb01pY3JvcGhvbmVEaXJlY3Rpb25hbGl0eTo6Q0FSRElPSUQ6Ci0gICAgICAgICAgICByZXR1cm4gQVVESU9fTUlDUk9QSE9ORV9ESVJFQ1RJT05BTElUWV9DQVJESU9JRDsKLSAgICAgICAgY2FzZSBBdWRpb01pY3JvcGhvbmVEaXJlY3Rpb25hbGl0eTo6SFlQRVJfQ0FSRElPSUQ6Ci0gICAgICAgICAgICByZXR1cm4gQVVESU9fTUlDUk9QSE9ORV9ESVJFQ1RJT05BTElUWV9IWVBFUl9DQVJESU9JRDsKLSAgICAgICAgY2FzZSBBdWRpb01pY3JvcGhvbmVEaXJlY3Rpb25hbGl0eTo6U1VQRVJfQ0FSRElPSUQ6Ci0gICAgICAgICAgICByZXR1cm4gQVVESU9fTUlDUk9QSE9ORV9ESVJFQ1RJT05BTElUWV9TVVBFUl9DQVJESU9JRDsKLSAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIExPR19BTFdBWVNfRkFUQUwoIlVua25vd24gZGlyZWN0aW9uYWxpdHlUb0hhbCBjb252ZXJzaW9uICVkIiwgZGlyKTsKLSAgICB9Ci19Ci0KLS8vIHN0YXRpYwotdm9pZCBDb252ZXJzaW9uSGVscGVySGlkbDo6bWljcm9waG9uZUluZm9Ub0hhbChjb25zdCBNaWNyb3Bob25lSW5mbyYgc3JjLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdWRpb19taWNyb3Bob25lX2NoYXJhY3RlcmlzdGljX3QgKnBEc3QpIHsKLSAgICBpZiAocERzdCAhPSBOVUxMKSB7Ci0gICAgICAgIHNucHJpbnRmKHBEc3QtPmRldmljZV9pZCwgc2l6ZW9mKHBEc3QtPmRldmljZV9pZCksCi0gICAgICAgICAgICAgICAgICIlcyIsIHNyYy5kZXZpY2VJZC5jX3N0cigpKTsKLSAgICAgICAgcERzdC0+ZGV2aWNlID0gc3RhdGljX2Nhc3Q8YXVkaW9fZGV2aWNlc190PihzcmMuZGV2aWNlQWRkcmVzcy5kZXZpY2UpOwotICAgICAgICBzbnByaW50ZihwRHN0LT5hZGRyZXNzLCBzaXplb2YocERzdC0+YWRkcmVzcyksCi0gICAgICAgICAgICAgICAgICIlcyIsIGRldmljZUFkZHJlc3NUb0hhbChzcmMuZGV2aWNlQWRkcmVzcykuY19zdHIoKSk7Ci0gICAgICAgIGlmIChzcmMuY2hhbm5lbE1hcHBpbmcuc2l6ZSgpID4gQVVESU9fQ0hBTk5FTF9DT1VOVF9NQVgpIHsKLSAgICAgICAgICAgIEFMT0dXKCJtaWNyb3Bob25lSW5mb1RvU3RydWN0IGZvdW5kICV6dSBjaGFubmVsTWFwcGluZyBlbGVtZW50cy4gTWF4IGV4cGVjdGVkIGlzICVkIiwKLSAgICAgICAgICAgICAgICAgIHNyYy5jaGFubmVsTWFwcGluZy5zaXplKCksIEFVRElPX0NIQU5ORUxfQ09VTlRfTUFYKTsKLSAgICAgICAgfQotICAgICAgICBzaXplX3QgY2g7Ci0gICAgICAgIGZvciAoY2ggPSAwOyBjaCA8IHNyYy5jaGFubmVsTWFwcGluZy5zaXplKCkgJiYgY2ggPCBBVURJT19DSEFOTkVMX0NPVU5UX01BWDsgY2grKykgewotICAgICAgICAgICAgcERzdC0+Y2hhbm5lbF9tYXBwaW5nW2NoXSA9IGNoYW5uZWxNYXBwaW5nVG9IYWwoc3JjLmNoYW5uZWxNYXBwaW5nW2NoXSk7Ci0gICAgICAgIH0KLSAgICAgICAgZm9yICg7IGNoIDwgQVVESU9fQ0hBTk5FTF9DT1VOVF9NQVg7IGNoKyspIHsKLSAgICAgICAgICAgIHBEc3QtPmNoYW5uZWxfbWFwcGluZ1tjaF0gPSBBVURJT19NSUNST1BIT05FX0NIQU5ORUxfTUFQUElOR19VTlVTRUQ7Ci0gICAgICAgIH0KLSAgICAgICAgcERzdC0+bG9jYXRpb24gPSBsb2NhdGlvblRvSGFsKHNyYy5sb2NhdGlvbik7Ci0gICAgICAgIHBEc3QtPmdyb3VwID0gKGF1ZGlvX21pY3JvcGhvbmVfZ3JvdXBfdClzcmMuZ3JvdXA7Ci0gICAgICAgIHBEc3QtPmluZGV4X2luX3RoZV9ncm91cCA9ICh1bnNpZ25lZCBpbnQpc3JjLmluZGV4SW5UaGVHcm91cDsKLSAgICAgICAgcERzdC0+c2Vuc2l0aXZpdHkgPSBzcmMuc2Vuc2l0aXZpdHk7Ci0gICAgICAgIHBEc3QtPm1heF9zcGwgPSBzcmMubWF4U3BsOwotICAgICAgICBwRHN0LT5taW5fc3BsID0gc3JjLm1pblNwbDsKLSAgICAgICAgcERzdC0+ZGlyZWN0aW9uYWxpdHkgPSBkaXJlY3Rpb25hbGl0eVRvSGFsKHNyYy5kaXJlY3Rpb25hbGl0eSk7Ci0gICAgICAgIHBEc3QtPm51bV9mcmVxdWVuY3lfcmVzcG9uc2VzID0gKHVuc2lnbmVkIGludClzcmMuZnJlcXVlbmN5UmVzcG9uc2Uuc2l6ZSgpOwotICAgICAgICBpZiAocERzdC0+bnVtX2ZyZXF1ZW5jeV9yZXNwb25zZXMgPiBBVURJT19NSUNST1BIT05FX01BWF9GUkVRVUVOQ1lfUkVTUE9OU0VTKSB7Ci0gICAgICAgICAgICBBTE9HVygibWljcm9waG9uZUluZm9Ub1N0cnVjdCBmb3VuZCAlZCBmcmVxdWVuY3kgcmVzcG9uc2VzLiBNYXggZXhwZWN0ZWQgaXMgJWQiLAotICAgICAgICAgICAgICAgICAgcERzdC0+bnVtX2ZyZXF1ZW5jeV9yZXNwb25zZXMsIEFVRElPX01JQ1JPUEhPTkVfTUFYX0ZSRVFVRU5DWV9SRVNQT05TRVMpOwotICAgICAgICAgICAgcERzdC0+bnVtX2ZyZXF1ZW5jeV9yZXNwb25zZXMgPSBBVURJT19NSUNST1BIT05FX01BWF9GUkVRVUVOQ1lfUkVTUE9OU0VTOwotICAgICAgICB9Ci0gICAgICAgIGZvciAoc2l6ZV90IGsgPSAwOyBrIDwgcERzdC0+bnVtX2ZyZXF1ZW5jeV9yZXNwb25zZXM7IGsrKykgewotICAgICAgICAgICAgcERzdC0+ZnJlcXVlbmN5X3Jlc3BvbnNlc1swXVtrXSA9IHNyYy5mcmVxdWVuY3lSZXNwb25zZVtrXS5mcmVxdWVuY3k7Ci0gICAgICAgICAgICBwRHN0LT5mcmVxdWVuY3lfcmVzcG9uc2VzWzFdW2tdID0gc3JjLmZyZXF1ZW5jeVJlc3BvbnNlW2tdLmxldmVsOwotICAgICAgICB9Ci0gICAgICAgIHBEc3QtPmdlb21ldHJpY19sb2NhdGlvbi54ID0gc3JjLnBvc2l0aW9uLng7Ci0gICAgICAgIHBEc3QtPmdlb21ldHJpY19sb2NhdGlvbi55ID0gc3JjLnBvc2l0aW9uLnk7Ci0gICAgICAgIHBEc3QtPmdlb21ldHJpY19sb2NhdGlvbi56ID0gc3JjLnBvc2l0aW9uLno7Ci0gICAgICAgIHBEc3QtPm9yaWVudGF0aW9uLnggPSBzcmMub3JpZW50YXRpb24ueDsKLSAgICAgICAgcERzdC0+b3JpZW50YXRpb24ueSA9IHNyYy5vcmllbnRhdGlvbi55OwotICAgICAgICBwRHN0LT5vcmllbnRhdGlvbi56ID0gc3JjLm9yaWVudGF0aW9uLno7Ci0gICAgfQotfQotCi19ICAvLyBuYW1lc3BhY2UgVjRfMAotfSAgLy8gbmFtZXNwYWNlIGFuZHJvaWQKZGlmZiAtLWdpdCBhL21lZGlhL2xpYmF1ZGlvaGFsLzQuMC9Db252ZXJzaW9uSGVscGVySGlkbC5oIGIvbWVkaWEvbGliYXVkaW9oYWwvNC4wL0NvbnZlcnNpb25IZWxwZXJIaWRsLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDg4MjNhOGQuLjAwMDAwMDAKLS0tIGEvbWVkaWEvbGliYXVkaW9oYWwvNC4wL0NvbnZlcnNpb25IZWxwZXJIaWRsLmgKKysrIC9kZXYvbnVsbApAQCAtMSw4OSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDE2IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKLSAqCi0gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKLSAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KLSAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotICoKLSAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0gKgotICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQotICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKLSAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgotICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAotICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCi0gKi8KLQotI2lmbmRlZiBBTkRST0lEX0hBUkRXQVJFX0NPTlZFUlNJT05fSEVMUEVSX0hJRExfNF8wX0gKLSNkZWZpbmUgQU5EUk9JRF9IQVJEV0FSRV9DT05WRVJTSU9OX0hFTFBFUl9ISURMXzRfMF9ICi0KLSNpbmNsdWRlIDxhbmRyb2lkL2hhcmR3YXJlL2F1ZGlvLzQuMC90eXBlcy5oPgotI2luY2x1ZGUgPGhpZGwvSGlkbFN1cHBvcnQuaD4KLSNpbmNsdWRlIDxzeXN0ZW0vYXVkaW8uaD4KLSNpbmNsdWRlIDx1dGlscy9TdHJpbmc4Lmg+Ci0KLXVzaW5nIDo6YW5kcm9pZDo6aGFyZHdhcmU6OmF1ZGlvOjpWNF8wOjpQYXJhbWV0ZXJWYWx1ZTsKLXVzaW5nIDo6YW5kcm9pZDo6aGFyZHdhcmU6OmF1ZGlvOjpWNF8wOjpNaWNyb3Bob25lSW5mbzsKLXVzaW5nIDo6YW5kcm9pZDo6aGFyZHdhcmU6OlJldHVybjsKLXVzaW5nIDo6YW5kcm9pZDo6aGFyZHdhcmU6OmhpZGxfc3RyaW5nOwotdXNpbmcgOjphbmRyb2lkOjpoYXJkd2FyZTo6aGlkbF92ZWM7Ci0KLW5hbWVzcGFjZSBhbmRyb2lkIHsKLW5hbWVzcGFjZSBWNF8wIHsKLQotY2xhc3MgQ29udmVyc2lvbkhlbHBlckhpZGwgewotICBwcm90ZWN0ZWQ6Ci0gICAgc3RhdGljIHN0YXR1c190IGtleXNGcm9tSGFsKGNvbnN0IFN0cmluZzgmIGtleXMsIGhpZGxfdmVjPGhpZGxfc3RyaW5nPiAqaGlkbEtleXMpOwotICAgIHN0YXRpYyBzdGF0dXNfdCBwYXJhbWV0ZXJzRnJvbUhhbChjb25zdCBTdHJpbmc4JiBrdlBhaXJzLCBoaWRsX3ZlYzxQYXJhbWV0ZXJWYWx1ZT4gKmhpZGxQYXJhbXMpOwotICAgIHN0YXRpYyB2b2lkIHBhcmFtZXRlcnNUb0hhbChjb25zdCBoaWRsX3ZlYzxQYXJhbWV0ZXJWYWx1ZT4mIHBhcmFtZXRlcnMsIFN0cmluZzggKnZhbHVlcyk7Ci0gICAgc3RhdGljIHZvaWQgbWljcm9waG9uZUluZm9Ub0hhbChjb25zdCBNaWNyb3Bob25lSW5mbyYgc3JjLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXVkaW9fbWljcm9waG9uZV9jaGFyYWN0ZXJpc3RpY190ICpwRHN0KTsKLQotICAgIENvbnZlcnNpb25IZWxwZXJIaWRsKGNvbnN0IGNoYXIqIGNsYXNzTmFtZSk7Ci0KLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBSLCB0eXBlbmFtZSBUPgotICAgIHN0YXR1c190IHByb2Nlc3NSZXR1cm4oY29uc3QgY2hhciogZnVuY05hbWUsIGNvbnN0IFJldHVybjxSPiYgcmV0LCBUICpyZXR2YWwpIHsKLSAgICAgICAgaWYgKHJldC5pc09rKCkpIHsKLSAgICAgICAgICAgIC8vIFRoaXMgd2F5IGl0IGFsc28gd29ya3MgZm9yIGVudW0gY2xhc3MgdG8gdW5zY29wZWQgZW51bSBjb252ZXJzaW9uLgotICAgICAgICAgICAgKnJldHZhbCA9IHN0YXRpY19jYXN0PFQ+KHN0YXRpY19jYXN0PFI+KHJldCkpOwotICAgICAgICAgICAgcmV0dXJuIE9LOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiBwcm9jZXNzUmV0dXJuKGZ1bmNOYW1lLCByZXQpOwotICAgIH0KLQotICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+Ci0gICAgc3RhdHVzX3QgcHJvY2Vzc1JldHVybihjb25zdCBjaGFyKiBmdW5jTmFtZSwgY29uc3QgUmV0dXJuPFQ+JiByZXQpIHsKLSAgICAgICAgaWYgKCFyZXQuaXNPaygpKSB7Ci0gICAgICAgICAgICBlbWl0RXJyb3IoZnVuY05hbWUsIHJldC5kZXNjcmlwdGlvbigpLmNfc3RyKCkpOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiByZXQuaXNPaygpID8gT0sgOiBGQUlMRURfVFJBTlNBQ1RJT047Ci0gICAgfQotCi0gICAgc3RhdHVzX3QgcHJvY2Vzc1JldHVybihjb25zdCBjaGFyKiBmdW5jTmFtZSwgY29uc3QgUmV0dXJuPGhhcmR3YXJlOjphdWRpbzo6VjRfMDo6UmVzdWx0PiYgcmV0KSB7Ci0gICAgICAgIGlmICghcmV0LmlzT2soKSkgewotICAgICAgICAgICAgZW1pdEVycm9yKGZ1bmNOYW1lLCByZXQuZGVzY3JpcHRpb24oKS5jX3N0cigpKTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gcmV0LmlzT2soKSA/IGFuYWx5emVSZXN1bHQocmV0KSA6IEZBSUxFRF9UUkFOU0FDVElPTjsKLSAgICB9Ci0KLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgotICAgIHN0YXR1c190IHByb2Nlc3NSZXR1cm4oCi0gICAgICAgICAgICBjb25zdCBjaGFyKiBmdW5jTmFtZSwgY29uc3QgUmV0dXJuPFQ+JiByZXQsIGhhcmR3YXJlOjphdWRpbzo6VjRfMDo6UmVzdWx0IHJldHZhbCkgewotICAgICAgICBpZiAoIXJldC5pc09rKCkpIHsKLSAgICAgICAgICAgIGVtaXRFcnJvcihmdW5jTmFtZSwgcmV0LmRlc2NyaXB0aW9uKCkuY19zdHIoKSk7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIHJldC5pc09rKCkgPyBhbmFseXplUmVzdWx0KHJldHZhbCkgOiBGQUlMRURfVFJBTlNBQ1RJT047Ci0gICAgfQotCi0gIHByaXZhdGU6Ci0gICAgY29uc3QgY2hhciogbUNsYXNzTmFtZTsKLQotICAgIHN0YXRpYyBzdGF0dXNfdCBhbmFseXplUmVzdWx0KGNvbnN0IGhhcmR3YXJlOjphdWRpbzo6VjRfMDo6UmVzdWx0JiByZXN1bHQpOwotCi0gICAgdm9pZCBlbWl0RXJyb3IoY29uc3QgY2hhciogZnVuY05hbWUsIGNvbnN0IGNoYXIqIGRlc2NyaXB0aW9uKTsKLX07Ci0KLX0gIC8vIG5hbWVzcGFjZSBWNF8wCi19ICAvLyBuYW1lc3BhY2UgYW5kcm9pZAotCi0jZW5kaWYgLy8gQU5EUk9JRF9IQVJEV0FSRV9DT05WRVJTSU9OX0hFTFBFUl9ISURMXzRfMF9ICmRpZmYgLS1naXQgYS9tZWRpYS9saWJhdWRpb2hhbC80LjAvRGV2aWNlSGFsSGlkbC5jcHAgYi9tZWRpYS9saWJhdWRpb2hhbC80LjAvRGV2aWNlSGFsSGlkbC5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDZmYWNjYTkuLjAwMDAwMDAKLS0tIGEvbWVkaWEvbGliYXVkaW9oYWwvNC4wL0RldmljZUhhbEhpZGwuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsMzg5ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTYgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAotICoKLSAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwotICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgotICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0gKgotICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLSAqCi0gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCi0gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAotICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCi0gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCi0gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KLSAqLwotCi0jaW5jbHVkZSA8c3RkaW8uaD4KLQotI2RlZmluZSBMT0dfVEFHICJEZXZpY2VIYWxIaWRsIgotLy8jZGVmaW5lIExPR19OREVCVUcgMAotCi0jaW5jbHVkZSA8YW5kcm9pZC9oYXJkd2FyZS9hdWRpby80LjAvSVByaW1hcnlEZXZpY2UuaD4KLSNpbmNsdWRlIDxjdXRpbHMvbmF0aXZlX2hhbmRsZS5oPgotI2luY2x1ZGUgPGh3YmluZGVyL0lQQ1RocmVhZFN0YXRlLmg+Ci0jaW5jbHVkZSA8dXRpbHMvTG9nLmg+Ci0KLSNpbmNsdWRlIDxjb21tb24vYWxsLXZlcnNpb25zL1ZlcnNpb25VdGlscy5oPgotCi0jaW5jbHVkZSAiRGV2aWNlSGFsSGlkbC5oIgotI2luY2x1ZGUgIkhpZGxVdGlscy5oIgotI2luY2x1ZGUgIlN0cmVhbUhhbEhpZGwuaCIKLSNpbmNsdWRlICJWZXJzaW9uVXRpbHMuaCIKLQotdXNpbmcgOjphbmRyb2lkOjpoYXJkd2FyZTo6YXVkaW86OmNvbW1vbjo6VjRfMDo6QXVkaW9Db25maWc7Ci11c2luZyA6OmFuZHJvaWQ6OmhhcmR3YXJlOjphdWRpbzo6Y29tbW9uOjpWNF8wOjpBdWRpb0RldmljZTsKLXVzaW5nIDo6YW5kcm9pZDo6aGFyZHdhcmU6OmF1ZGlvOjpjb21tb246OlY0XzA6OkF1ZGlvSW5wdXRGbGFnOwotdXNpbmcgOjphbmRyb2lkOjpoYXJkd2FyZTo6YXVkaW86OmNvbW1vbjo6VjRfMDo6QXVkaW9PdXRwdXRGbGFnOwotdXNpbmcgOjphbmRyb2lkOjpoYXJkd2FyZTo6YXVkaW86OmNvbW1vbjo6VjRfMDo6QXVkaW9QYXRjaEhhbmRsZTsKLXVzaW5nIDo6YW5kcm9pZDo6aGFyZHdhcmU6OmF1ZGlvOjpjb21tb246OlY0XzA6OkF1ZGlvUG9ydDsKLXVzaW5nIDo6YW5kcm9pZDo6aGFyZHdhcmU6OmF1ZGlvOjpjb21tb246OlY0XzA6OkF1ZGlvUG9ydENvbmZpZzsKLXVzaW5nIDo6YW5kcm9pZDo6aGFyZHdhcmU6OmF1ZGlvOjpjb21tb246OlY0XzA6OkF1ZGlvTW9kZTsKLXVzaW5nIDo6YW5kcm9pZDo6aGFyZHdhcmU6OmF1ZGlvOjpjb21tb246OlY0XzA6OkF1ZGlvU291cmNlOwotdXNpbmcgOjphbmRyb2lkOjpoYXJkd2FyZTo6YXVkaW86OmNvbW1vbjo6VjRfMDo6SGlkbFV0aWxzOwotdXNpbmcgOjphbmRyb2lkOjpoYXJkd2FyZTo6YXVkaW86OmNvbW1vbjo6dXRpbHM6Om1rRW51bUNvbnZlcnRlcjsKLXVzaW5nIDo6YW5kcm9pZDo6aGFyZHdhcmU6OmF1ZGlvOjpWNF8wOjpEZXZpY2VBZGRyZXNzOwotdXNpbmcgOjphbmRyb2lkOjpoYXJkd2FyZTo6YXVkaW86OlY0XzA6OklQcmltYXJ5RGV2aWNlOwotdXNpbmcgOjphbmRyb2lkOjpoYXJkd2FyZTo6YXVkaW86OlY0XzA6OlBhcmFtZXRlclZhbHVlOwotdXNpbmcgOjphbmRyb2lkOjpoYXJkd2FyZTo6YXVkaW86OlY0XzA6OlJlc3VsdDsKLXVzaW5nIDo6YW5kcm9pZDo6aGFyZHdhcmU6OmF1ZGlvOjpWNF8wOjpTaW5rTWV0YWRhdGE7Ci11c2luZyA6OmFuZHJvaWQ6OmhhcmR3YXJlOjpoaWRsX3N0cmluZzsKLXVzaW5nIDo6YW5kcm9pZDo6aGFyZHdhcmU6OmhpZGxfdmVjOwotCi1uYW1lc3BhY2UgYW5kcm9pZCB7Ci1uYW1lc3BhY2UgVjRfMCB7Ci0KLW5hbWVzcGFjZSB7Ci0KLXN0YXR1c190IGRldmljZUFkZHJlc3NGcm9tSGFsKAotICAgICAgICBhdWRpb19kZXZpY2VzX3QgZGV2aWNlLCBjb25zdCBjaGFyKiBoYWxBZGRyZXNzLCBEZXZpY2VBZGRyZXNzKiBhZGRyZXNzKSB7Ci0gICAgYWRkcmVzcy0+ZGV2aWNlID0gQXVkaW9EZXZpY2UoZGV2aWNlKTsKLQotICAgIGlmIChoYWxBZGRyZXNzID09IG51bGxwdHIgfHwgc3RybmxlbihoYWxBZGRyZXNzLCBBVURJT19ERVZJQ0VfTUFYX0FERFJFU1NfTEVOKSA9PSAwKSB7Ci0gICAgICAgIHJldHVybiBPSzsKLSAgICB9Ci0gICAgY29uc3QgYm9vbCBpc0lucHV0ID0gKGRldmljZSAmIEFVRElPX0RFVklDRV9CSVRfSU4pICE9IDA7Ci0gICAgaWYgKGlzSW5wdXQpIGRldmljZSAmPSB+QVVESU9fREVWSUNFX0JJVF9JTjsKLSAgICBpZiAoKCFpc0lucHV0ICYmIChkZXZpY2UgJiBBVURJT19ERVZJQ0VfT1VUX0FMTF9BMkRQKSAhPSAwKQotICAgICAgICAgICAgfHwgKGlzSW5wdXQgJiYgKGRldmljZSAmIEFVRElPX0RFVklDRV9JTl9CTFVFVE9PVEhfQTJEUCkgIT0gMCkpIHsKLSAgICAgICAgaW50IHN0YXR1cyA9IHNzY2FuZihoYWxBZGRyZXNzLAotICAgICAgICAgICAgICAgICIlaGhYOiVoaFg6JWhoWDolaGhYOiVoaFg6JWhoWCIsCi0gICAgICAgICAgICAgICAgJmFkZHJlc3MtPmFkZHJlc3MubWFjWzBdLCAmYWRkcmVzcy0+YWRkcmVzcy5tYWNbMV0sICZhZGRyZXNzLT5hZGRyZXNzLm1hY1syXSwKLSAgICAgICAgICAgICAgICAmYWRkcmVzcy0+YWRkcmVzcy5tYWNbM10sICZhZGRyZXNzLT5hZGRyZXNzLm1hY1s0XSwgJmFkZHJlc3MtPmFkZHJlc3MubWFjWzVdKTsKLSAgICAgICAgcmV0dXJuIHN0YXR1cyA9PSA2ID8gT0sgOiBCQURfVkFMVUU7Ci0gICAgfSBlbHNlIGlmICgoIWlzSW5wdXQgJiYgKGRldmljZSAmIEFVRElPX0RFVklDRV9PVVRfSVApICE9IDApCi0gICAgICAgICAgICB8fCAoaXNJbnB1dCAmJiAoZGV2aWNlICYgQVVESU9fREVWSUNFX0lOX0lQKSAhPSAwKSkgewotICAgICAgICBpbnQgc3RhdHVzID0gc3NjYW5mKGhhbEFkZHJlc3MsCi0gICAgICAgICAgICAgICAgIiVoaHUuJWhodS4laGh1LiVoaHUiLAotICAgICAgICAgICAgICAgICZhZGRyZXNzLT5hZGRyZXNzLmlwdjRbMF0sICZhZGRyZXNzLT5hZGRyZXNzLmlwdjRbMV0sCi0gICAgICAgICAgICAgICAgJmFkZHJlc3MtPmFkZHJlc3MuaXB2NFsyXSwgJmFkZHJlc3MtPmFkZHJlc3MuaXB2NFszXSk7Ci0gICAgICAgIHJldHVybiBzdGF0dXMgPT0gNCA/IE9LIDogQkFEX1ZBTFVFOwotICAgIH0gZWxzZSBpZiAoKCFpc0lucHV0ICYmIChkZXZpY2UgJiBBVURJT19ERVZJQ0VfT1VUX0FMTF9VU0IpKSAhPSAwCi0gICAgICAgICAgICB8fCAoaXNJbnB1dCAmJiAoZGV2aWNlICYgQVVESU9fREVWSUNFX0lOX0FMTF9VU0IpKSAhPSAwKSB7Ci0gICAgICAgIGludCBzdGF0dXMgPSBzc2NhbmYoaGFsQWRkcmVzcywKLSAgICAgICAgICAgICAgICAiY2FyZD0lZDtkZXZpY2U9JWQiLAotICAgICAgICAgICAgICAgICZhZGRyZXNzLT5hZGRyZXNzLmFsc2EuY2FyZCwgJmFkZHJlc3MtPmFkZHJlc3MuYWxzYS5kZXZpY2UpOwotICAgICAgICByZXR1cm4gc3RhdHVzID09IDIgPyBPSyA6IEJBRF9WQUxVRTsKLSAgICB9IGVsc2UgaWYgKCghaXNJbnB1dCAmJiAoZGV2aWNlICYgQVVESU9fREVWSUNFX09VVF9CVVMpICE9IDApCi0gICAgICAgICAgICB8fCAoaXNJbnB1dCAmJiAoZGV2aWNlICYgQVVESU9fREVWSUNFX0lOX0JVUykgIT0gMCkpIHsKLSAgICAgICAgaWYgKGhhbEFkZHJlc3MgIT0gTlVMTCkgewotICAgICAgICAgICAgYWRkcmVzcy0+YnVzQWRkcmVzcyA9IGhhbEFkZHJlc3M7Ci0gICAgICAgICAgICByZXR1cm4gT0s7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIEJBRF9WQUxVRTsKLSAgICB9IGVsc2UgaWYgKCghaXNJbnB1dCAmJiAoZGV2aWNlICYgQVVESU9fREVWSUNFX09VVF9SRU1PVEVfU1VCTUlYKSkgIT0gMAotICAgICAgICAgICAgfHwgKGlzSW5wdXQgJiYgKGRldmljZSAmIEFVRElPX0RFVklDRV9JTl9SRU1PVEVfU1VCTUlYKSAhPSAwKSkgewotICAgICAgICBpZiAoaGFsQWRkcmVzcyAhPSBOVUxMKSB7Ci0gICAgICAgICAgICBhZGRyZXNzLT5yU3VibWl4QWRkcmVzcyA9IGhhbEFkZHJlc3M7Ci0gICAgICAgICAgICByZXR1cm4gT0s7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIEJBRF9WQUxVRTsKLSAgICB9Ci0gICAgcmV0dXJuIE9LOwotfQotCi19ICAvLyBuYW1lc3BhY2UKLQotRGV2aWNlSGFsSGlkbDo6RGV2aWNlSGFsSGlkbChjb25zdCBzcDxJRGV2aWNlPiYgZGV2aWNlKQotICAgICAgICA6IENvbnZlcnNpb25IZWxwZXJIaWRsKCJEZXZpY2UiKSwgbURldmljZShkZXZpY2UpLAotICAgICAgICAgIG1QcmltYXJ5RGV2aWNlKElQcmltYXJ5RGV2aWNlOjpjYXN0RnJvbShkZXZpY2UpKSB7Ci19Ci0KLURldmljZUhhbEhpZGw6On5EZXZpY2VIYWxIaWRsKCkgewotICAgIGlmIChtRGV2aWNlICE9IDApIHsKLSAgICAgICAgbURldmljZS5jbGVhcigpOwotICAgICAgICBoYXJkd2FyZTo6SVBDVGhyZWFkU3RhdGU6OnNlbGYoKS0+Zmx1c2hDb21tYW5kcygpOwotICAgIH0KLX0KLQotc3RhdHVzX3QgRGV2aWNlSGFsSGlkbDo6Z2V0U3VwcG9ydGVkRGV2aWNlcyh1aW50MzJfdCopIHsKLSAgICAvLyBPYnNvbGV0ZS4KLSAgICByZXR1cm4gSU5WQUxJRF9PUEVSQVRJT047Ci19Ci0KLXN0YXR1c190IERldmljZUhhbEhpZGw6OmluaXRDaGVjaygpIHsKLSAgICBpZiAobURldmljZSA9PSAwKSByZXR1cm4gTk9fSU5JVDsKLSAgICByZXR1cm4gcHJvY2Vzc1JldHVybigiaW5pdENoZWNrIiwgbURldmljZS0+aW5pdENoZWNrKCkpOwotfQotCi1zdGF0dXNfdCBEZXZpY2VIYWxIaWRsOjpzZXRWb2ljZVZvbHVtZShmbG9hdCB2b2x1bWUpIHsKLSAgICBpZiAobURldmljZSA9PSAwKSByZXR1cm4gTk9fSU5JVDsKLSAgICBpZiAobVByaW1hcnlEZXZpY2UgPT0gMCkgcmV0dXJuIElOVkFMSURfT1BFUkFUSU9OOwotICAgIHJldHVybiBwcm9jZXNzUmV0dXJuKCJzZXRWb2ljZVZvbHVtZSIsIG1QcmltYXJ5RGV2aWNlLT5zZXRWb2ljZVZvbHVtZSh2b2x1bWUpKTsKLX0KLQotc3RhdHVzX3QgRGV2aWNlSGFsSGlkbDo6c2V0TWFzdGVyVm9sdW1lKGZsb2F0IHZvbHVtZSkgewotICAgIGlmIChtRGV2aWNlID09IDApIHJldHVybiBOT19JTklUOwotICAgIGlmIChtUHJpbWFyeURldmljZSA9PSAwKSByZXR1cm4gSU5WQUxJRF9PUEVSQVRJT047Ci0gICAgcmV0dXJuIHByb2Nlc3NSZXR1cm4oInNldE1hc3RlclZvbHVtZSIsIG1QcmltYXJ5RGV2aWNlLT5zZXRNYXN0ZXJWb2x1bWUodm9sdW1lKSk7Ci19Ci0KLXN0YXR1c190IERldmljZUhhbEhpZGw6OmdldE1hc3RlclZvbHVtZShmbG9hdCAqdm9sdW1lKSB7Ci0gICAgaWYgKG1EZXZpY2UgPT0gMCkgcmV0dXJuIE5PX0lOSVQ7Ci0gICAgaWYgKG1QcmltYXJ5RGV2aWNlID09IDApIHJldHVybiBJTlZBTElEX09QRVJBVElPTjsKLSAgICBSZXN1bHQgcmV0dmFsOwotICAgIFJldHVybjx2b2lkPiByZXQgPSBtUHJpbWFyeURldmljZS0+Z2V0TWFzdGVyVm9sdW1lKAotICAgICAgICAgICAgWyZdKFJlc3VsdCByLCBmbG9hdCB2KSB7Ci0gICAgICAgICAgICAgICAgcmV0dmFsID0gcjsKLSAgICAgICAgICAgICAgICBpZiAocmV0dmFsID09IFJlc3VsdDo6T0spIHsKLSAgICAgICAgICAgICAgICAgICAgKnZvbHVtZSA9IHY7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfSk7Ci0gICAgcmV0dXJuIHByb2Nlc3NSZXR1cm4oImdldE1hc3RlclZvbHVtZSIsIHJldCwgcmV0dmFsKTsKLX0KLQotc3RhdHVzX3QgRGV2aWNlSGFsSGlkbDo6c2V0TW9kZShhdWRpb19tb2RlX3QgbW9kZSkgewotICAgIGlmIChtRGV2aWNlID09IDApIHJldHVybiBOT19JTklUOwotICAgIGlmIChtUHJpbWFyeURldmljZSA9PSAwKSByZXR1cm4gSU5WQUxJRF9PUEVSQVRJT047Ci0gICAgcmV0dXJuIHByb2Nlc3NSZXR1cm4oInNldE1vZGUiLCBtUHJpbWFyeURldmljZS0+c2V0TW9kZShBdWRpb01vZGUobW9kZSkpKTsKLX0KLQotc3RhdHVzX3QgRGV2aWNlSGFsSGlkbDo6c2V0TWljTXV0ZShib29sIHN0YXRlKSB7Ci0gICAgaWYgKG1EZXZpY2UgPT0gMCkgcmV0dXJuIE5PX0lOSVQ7Ci0gICAgcmV0dXJuIHByb2Nlc3NSZXR1cm4oInNldE1pY011dGUiLCBtRGV2aWNlLT5zZXRNaWNNdXRlKHN0YXRlKSk7Ci19Ci0KLXN0YXR1c190IERldmljZUhhbEhpZGw6OmdldE1pY011dGUoYm9vbCAqc3RhdGUpIHsKLSAgICBpZiAobURldmljZSA9PSAwKSByZXR1cm4gTk9fSU5JVDsKLSAgICBSZXN1bHQgcmV0dmFsOwotICAgIFJldHVybjx2b2lkPiByZXQgPSBtRGV2aWNlLT5nZXRNaWNNdXRlKAotICAgICAgICAgICAgWyZdKFJlc3VsdCByLCBib29sIG11dGUpIHsKLSAgICAgICAgICAgICAgICByZXR2YWwgPSByOwotICAgICAgICAgICAgICAgIGlmIChyZXR2YWwgPT0gUmVzdWx0OjpPSykgewotICAgICAgICAgICAgICAgICAgICAqc3RhdGUgPSBtdXRlOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0pOwotICAgIHJldHVybiBwcm9jZXNzUmV0dXJuKCJnZXRNaWNNdXRlIiwgcmV0LCByZXR2YWwpOwotfQotCi1zdGF0dXNfdCBEZXZpY2VIYWxIaWRsOjpzZXRNYXN0ZXJNdXRlKGJvb2wgc3RhdGUpIHsKLSAgICBpZiAobURldmljZSA9PSAwKSByZXR1cm4gTk9fSU5JVDsKLSAgICByZXR1cm4gcHJvY2Vzc1JldHVybigic2V0TWFzdGVyTXV0ZSIsIG1EZXZpY2UtPnNldE1hc3Rlck11dGUoc3RhdGUpKTsKLX0KLQotc3RhdHVzX3QgRGV2aWNlSGFsSGlkbDo6Z2V0TWFzdGVyTXV0ZShib29sICpzdGF0ZSkgewotICAgIGlmIChtRGV2aWNlID09IDApIHJldHVybiBOT19JTklUOwotICAgIFJlc3VsdCByZXR2YWw7Ci0gICAgUmV0dXJuPHZvaWQ+IHJldCA9IG1EZXZpY2UtPmdldE1hc3Rlck11dGUoCi0gICAgICAgICAgICBbJl0oUmVzdWx0IHIsIGJvb2wgbXV0ZSkgewotICAgICAgICAgICAgICAgIHJldHZhbCA9IHI7Ci0gICAgICAgICAgICAgICAgaWYgKHJldHZhbCA9PSBSZXN1bHQ6Ok9LKSB7Ci0gICAgICAgICAgICAgICAgICAgICpzdGF0ZSA9IG11dGU7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfSk7Ci0gICAgcmV0dXJuIHByb2Nlc3NSZXR1cm4oImdldE1hc3Rlck11dGUiLCByZXQsIHJldHZhbCk7Ci19Ci0KLXN0YXR1c190IERldmljZUhhbEhpZGw6OnNldFBhcmFtZXRlcnMoY29uc3QgU3RyaW5nOCYga3ZQYWlycykgewotICAgIGlmIChtRGV2aWNlID09IDApIHJldHVybiBOT19JTklUOwotICAgIGhpZGxfdmVjPFBhcmFtZXRlclZhbHVlPiBoaWRsUGFyYW1zOwotICAgIHN0YXR1c190IHN0YXR1cyA9IHBhcmFtZXRlcnNGcm9tSGFsKGt2UGFpcnMsICZoaWRsUGFyYW1zKTsKLSAgICBpZiAoc3RhdHVzICE9IE9LKSByZXR1cm4gc3RhdHVzOwotICAgIC8vIFRPRE86IGNoYW5nZSB0aGUgQVBJIHNvIHRoYXQgY29udGV4dCBhbmQga3ZQYWlycyBhcmUgc2VwYXJhdGVkCi0gICAgcmV0dXJuIHByb2Nlc3NSZXR1cm4oInNldFBhcmFtZXRlcnMiLAotICAgICAgICAgICAgICAgICAgICAgICAgIHV0aWxzOjpzZXRQYXJhbWV0ZXJzKG1EZXZpY2UsIHt9IC8qIGNvbnRleHQgKi8sIGhpZGxQYXJhbXMpKTsKLX0KLQotc3RhdHVzX3QgRGV2aWNlSGFsSGlkbDo6Z2V0UGFyYW1ldGVycyhjb25zdCBTdHJpbmc4JiBrZXlzLCBTdHJpbmc4ICp2YWx1ZXMpIHsKLSAgICB2YWx1ZXMtPmNsZWFyKCk7Ci0gICAgaWYgKG1EZXZpY2UgPT0gMCkgcmV0dXJuIE5PX0lOSVQ7Ci0gICAgaGlkbF92ZWM8aGlkbF9zdHJpbmc+IGhpZGxLZXlzOwotICAgIHN0YXR1c190IHN0YXR1cyA9IGtleXNGcm9tSGFsKGtleXMsICZoaWRsS2V5cyk7Ci0gICAgaWYgKHN0YXR1cyAhPSBPSykgcmV0dXJuIHN0YXR1czsKLSAgICBSZXN1bHQgcmV0dmFsOwotICAgIFJldHVybjx2b2lkPiByZXQgPSB1dGlsczo6Z2V0UGFyYW1ldGVycyhtRGV2aWNlLAotICAgICAgICAgICAge30gLyogY29udGV4dCAqLywKLSAgICAgICAgICAgIGhpZGxLZXlzLAotICAgICAgICAgICAgWyZdKFJlc3VsdCByLCBjb25zdCBoaWRsX3ZlYzxQYXJhbWV0ZXJWYWx1ZT4mIHBhcmFtZXRlcnMpIHsKLSAgICAgICAgICAgICAgICByZXR2YWwgPSByOwotICAgICAgICAgICAgICAgIGlmIChyZXR2YWwgPT0gUmVzdWx0OjpPSykgewotICAgICAgICAgICAgICAgICAgICBwYXJhbWV0ZXJzVG9IYWwocGFyYW1ldGVycywgdmFsdWVzKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9KTsKLSAgICByZXR1cm4gcHJvY2Vzc1JldHVybigiZ2V0UGFyYW1ldGVycyIsIHJldCwgcmV0dmFsKTsKLX0KLQotc3RhdHVzX3QgRGV2aWNlSGFsSGlkbDo6Z2V0SW5wdXRCdWZmZXJTaXplKAotICAgICAgICBjb25zdCBzdHJ1Y3QgYXVkaW9fY29uZmlnICpjb25maWcsIHNpemVfdCAqc2l6ZSkgewotICAgIGlmIChtRGV2aWNlID09IDApIHJldHVybiBOT19JTklUOwotICAgIEF1ZGlvQ29uZmlnIGhpZGxDb25maWc7Ci0gICAgSGlkbFV0aWxzOjphdWRpb0NvbmZpZ0Zyb21IYWwoKmNvbmZpZywgJmhpZGxDb25maWcpOwotICAgIFJlc3VsdCByZXR2YWw7Ci0gICAgUmV0dXJuPHZvaWQ+IHJldCA9IG1EZXZpY2UtPmdldElucHV0QnVmZmVyU2l6ZSgKLSAgICAgICAgICAgIGhpZGxDb25maWcsCi0gICAgICAgICAgICBbJl0oUmVzdWx0IHIsIHVpbnQ2NF90IGJ1ZmZlclNpemUpIHsKLSAgICAgICAgICAgICAgICByZXR2YWwgPSByOwotICAgICAgICAgICAgICAgIGlmIChyZXR2YWwgPT0gUmVzdWx0OjpPSykgewotICAgICAgICAgICAgICAgICAgICAqc2l6ZSA9IHN0YXRpY19jYXN0PHNpemVfdD4oYnVmZmVyU2l6ZSk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfSk7Ci0gICAgcmV0dXJuIHByb2Nlc3NSZXR1cm4oImdldElucHV0QnVmZmVyU2l6ZSIsIHJldCwgcmV0dmFsKTsKLX0KLQotc3RhdHVzX3QgRGV2aWNlSGFsSGlkbDo6b3Blbk91dHB1dFN0cmVhbSgKLSAgICAgICAgYXVkaW9faW9faGFuZGxlX3QgaGFuZGxlLAotICAgICAgICBhdWRpb19kZXZpY2VzX3QgZGV2aWNlcywKLSAgICAgICAgYXVkaW9fb3V0cHV0X2ZsYWdzX3QgZmxhZ3MsCi0gICAgICAgIHN0cnVjdCBhdWRpb19jb25maWcgKmNvbmZpZywKLSAgICAgICAgY29uc3QgY2hhciAqYWRkcmVzcywKLSAgICAgICAgc3A8U3RyZWFtT3V0SGFsSW50ZXJmYWNlPiAqb3V0U3RyZWFtKSB7Ci0gICAgaWYgKG1EZXZpY2UgPT0gMCkgcmV0dXJuIE5PX0lOSVQ7Ci0gICAgRGV2aWNlQWRkcmVzcyBoaWRsRGV2aWNlOwotICAgIHN0YXR1c190IHN0YXR1cyA9IGRldmljZUFkZHJlc3NGcm9tSGFsKGRldmljZXMsIGFkZHJlc3MsICZoaWRsRGV2aWNlKTsKLSAgICBpZiAoc3RhdHVzICE9IE9LKSByZXR1cm4gc3RhdHVzOwotICAgIEF1ZGlvQ29uZmlnIGhpZGxDb25maWc7Ci0gICAgSGlkbFV0aWxzOjphdWRpb0NvbmZpZ0Zyb21IYWwoKmNvbmZpZywgJmhpZGxDb25maWcpOwotICAgIFJlc3VsdCByZXR2YWwgPSBSZXN1bHQ6Ok5PVF9JTklUSUFMSVpFRDsKLSAgICBSZXR1cm48dm9pZD4gcmV0ID0gbURldmljZS0+b3Blbk91dHB1dFN0cmVhbSgKLSAgICAgICAgICAgIGhhbmRsZSwKLSAgICAgICAgICAgIGhpZGxEZXZpY2UsCi0gICAgICAgICAgICBoaWRsQ29uZmlnLAotICAgICAgICAgICAgbWtFbnVtQ29udmVydGVyPEF1ZGlvT3V0cHV0RmxhZz4oZmxhZ3MpLAotICAgICAgICAgICAge30gLyogbWV0YWRhdGEgKi8sCi0gICAgICAgICAgICBbJl0oUmVzdWx0IHIsIGNvbnN0IHNwPElTdHJlYW1PdXQ+JiByZXN1bHQsIGNvbnN0IEF1ZGlvQ29uZmlnJiBzdWdnZXN0ZWRDb25maWcpIHsKLSAgICAgICAgICAgICAgICByZXR2YWwgPSByOwotICAgICAgICAgICAgICAgIGlmIChyZXR2YWwgPT0gUmVzdWx0OjpPSykgewotICAgICAgICAgICAgICAgICAgICAqb3V0U3RyZWFtID0gbmV3IFN0cmVhbU91dEhhbEhpZGwocmVzdWx0KTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgSGlkbFV0aWxzOjphdWRpb0NvbmZpZ1RvSGFsKHN1Z2dlc3RlZENvbmZpZywgY29uZmlnKTsKLSAgICAgICAgICAgIH0pOwotICAgIHJldHVybiBwcm9jZXNzUmV0dXJuKCJvcGVuT3V0cHV0U3RyZWFtIiwgcmV0LCByZXR2YWwpOwotfQotCi1zdGF0dXNfdCBEZXZpY2VIYWxIaWRsOjpvcGVuSW5wdXRTdHJlYW0oCi0gICAgICAgIGF1ZGlvX2lvX2hhbmRsZV90IGhhbmRsZSwKLSAgICAgICAgYXVkaW9fZGV2aWNlc190IGRldmljZXMsCi0gICAgICAgIHN0cnVjdCBhdWRpb19jb25maWcgKmNvbmZpZywKLSAgICAgICAgYXVkaW9faW5wdXRfZmxhZ3NfdCBmbGFncywKLSAgICAgICAgY29uc3QgY2hhciAqYWRkcmVzcywKLSAgICAgICAgYXVkaW9fc291cmNlX3Qgc291cmNlLAotICAgICAgICBzcDxTdHJlYW1JbkhhbEludGVyZmFjZT4gKmluU3RyZWFtKSB7Ci0gICAgaWYgKG1EZXZpY2UgPT0gMCkgcmV0dXJuIE5PX0lOSVQ7Ci0gICAgRGV2aWNlQWRkcmVzcyBoaWRsRGV2aWNlOwotICAgIHN0YXR1c190IHN0YXR1cyA9IGRldmljZUFkZHJlc3NGcm9tSGFsKGRldmljZXMsIGFkZHJlc3MsICZoaWRsRGV2aWNlKTsKLSAgICBpZiAoc3RhdHVzICE9IE9LKSByZXR1cm4gc3RhdHVzOwotICAgIEF1ZGlvQ29uZmlnIGhpZGxDb25maWc7Ci0gICAgSGlkbFV0aWxzOjphdWRpb0NvbmZpZ0Zyb21IYWwoKmNvbmZpZywgJmhpZGxDb25maWcpOwotICAgIFJlc3VsdCByZXR2YWwgPSBSZXN1bHQ6Ok5PVF9JTklUSUFMSVpFRDsKLSAgICAvLyBUT0RPOiBjb3JyZWN0bHkgcHJvcGFnYXRlIHRoZSB0cmFja3Mgc291cmNlcyBhbmQgdm9sdW1lCi0gICAgLy8gICAgICAgZm9yIG5vdywgb25seSBzZW5kIHRoZSBtYWluIHNvdXJjZSBhdCAxZGJmcwotICAgIFNpbmtNZXRhZGF0YSBtZXRhZGF0YSA9IHt7e0F1ZGlvU291cmNlKHNvdXJjZSksIDF9fX07Ci0gICAgUmV0dXJuPHZvaWQ+IHJldCA9IG1EZXZpY2UtPm9wZW5JbnB1dFN0cmVhbSgKLSAgICAgICAgICAgIGhhbmRsZSwKLSAgICAgICAgICAgIGhpZGxEZXZpY2UsCi0gICAgICAgICAgICBoaWRsQ29uZmlnLAotICAgICAgICAgICAgZmxhZ3MsCi0gICAgICAgICAgICBtZXRhZGF0YSwKLSAgICAgICAgICAgIFsmXShSZXN1bHQgciwgY29uc3Qgc3A8SVN0cmVhbUluPiYgcmVzdWx0LCBjb25zdCBBdWRpb0NvbmZpZyYgc3VnZ2VzdGVkQ29uZmlnKSB7Ci0gICAgICAgICAgICAgICAgcmV0dmFsID0gcjsKLSAgICAgICAgICAgICAgICBpZiAocmV0dmFsID09IFJlc3VsdDo6T0spIHsKLSAgICAgICAgICAgICAgICAgICAgKmluU3RyZWFtID0gbmV3IFN0cmVhbUluSGFsSGlkbChyZXN1bHQpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBIaWRsVXRpbHM6OmF1ZGlvQ29uZmlnVG9IYWwoc3VnZ2VzdGVkQ29uZmlnLCBjb25maWcpOwotICAgICAgICAgICAgfSk7Ci0gICAgcmV0dXJuIHByb2Nlc3NSZXR1cm4oIm9wZW5JbnB1dFN0cmVhbSIsIHJldCwgcmV0dmFsKTsKLX0KLQotc3RhdHVzX3QgRGV2aWNlSGFsSGlkbDo6c3VwcG9ydHNBdWRpb1BhdGNoZXMoYm9vbCAqc3VwcG9ydHNQYXRjaGVzKSB7Ci0gICAgaWYgKG1EZXZpY2UgPT0gMCkgcmV0dXJuIE5PX0lOSVQ7Ci0gICAgcmV0dXJuIHByb2Nlc3NSZXR1cm4oInN1cHBvcnRzQXVkaW9QYXRjaGVzIiwgbURldmljZS0+c3VwcG9ydHNBdWRpb1BhdGNoZXMoKSwgc3VwcG9ydHNQYXRjaGVzKTsKLX0KLQotc3RhdHVzX3QgRGV2aWNlSGFsSGlkbDo6Y3JlYXRlQXVkaW9QYXRjaCgKLSAgICAgICAgdW5zaWduZWQgaW50IG51bV9zb3VyY2VzLAotICAgICAgICBjb25zdCBzdHJ1Y3QgYXVkaW9fcG9ydF9jb25maWcgKnNvdXJjZXMsCi0gICAgICAgIHVuc2lnbmVkIGludCBudW1fc2lua3MsCi0gICAgICAgIGNvbnN0IHN0cnVjdCBhdWRpb19wb3J0X2NvbmZpZyAqc2lua3MsCi0gICAgICAgIGF1ZGlvX3BhdGNoX2hhbmRsZV90ICpwYXRjaCkgewotICAgIGlmIChtRGV2aWNlID09IDApIHJldHVybiBOT19JTklUOwotICAgIGhpZGxfdmVjPEF1ZGlvUG9ydENvbmZpZz4gaGlkbFNvdXJjZXMsIGhpZGxTaW5rczsKLSAgICBIaWRsVXRpbHM6OmF1ZGlvUG9ydENvbmZpZ3NGcm9tSGFsKG51bV9zb3VyY2VzLCBzb3VyY2VzLCAmaGlkbFNvdXJjZXMpOwotICAgIEhpZGxVdGlsczo6YXVkaW9Qb3J0Q29uZmlnc0Zyb21IYWwobnVtX3NpbmtzLCBzaW5rcywgJmhpZGxTaW5rcyk7Ci0gICAgUmVzdWx0IHJldHZhbDsKLSAgICBSZXR1cm48dm9pZD4gcmV0ID0gbURldmljZS0+Y3JlYXRlQXVkaW9QYXRjaCgKLSAgICAgICAgICAgIGhpZGxTb3VyY2VzLCBoaWRsU2lua3MsCi0gICAgICAgICAgICBbJl0oUmVzdWx0IHIsIEF1ZGlvUGF0Y2hIYW5kbGUgaGlkbFBhdGNoKSB7Ci0gICAgICAgICAgICAgICAgcmV0dmFsID0gcjsKLSAgICAgICAgICAgICAgICBpZiAocmV0dmFsID09IFJlc3VsdDo6T0spIHsKLSAgICAgICAgICAgICAgICAgICAgKnBhdGNoID0gc3RhdGljX2Nhc3Q8YXVkaW9fcGF0Y2hfaGFuZGxlX3Q+KGhpZGxQYXRjaCk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfSk7Ci0gICAgcmV0dXJuIHByb2Nlc3NSZXR1cm4oImNyZWF0ZUF1ZGlvUGF0Y2giLCByZXQsIHJldHZhbCk7Ci19Ci0KLXN0YXR1c190IERldmljZUhhbEhpZGw6OnJlbGVhc2VBdWRpb1BhdGNoKGF1ZGlvX3BhdGNoX2hhbmRsZV90IHBhdGNoKSB7Ci0gICAgaWYgKG1EZXZpY2UgPT0gMCkgcmV0dXJuIE5PX0lOSVQ7Ci0gICAgcmV0dXJuIHByb2Nlc3NSZXR1cm4oInJlbGVhc2VBdWRpb1BhdGNoIiwgbURldmljZS0+cmVsZWFzZUF1ZGlvUGF0Y2gocGF0Y2gpKTsKLX0KLQotc3RhdHVzX3QgRGV2aWNlSGFsSGlkbDo6Z2V0QXVkaW9Qb3J0KHN0cnVjdCBhdWRpb19wb3J0ICpwb3J0KSB7Ci0gICAgaWYgKG1EZXZpY2UgPT0gMCkgcmV0dXJuIE5PX0lOSVQ7Ci0gICAgQXVkaW9Qb3J0IGhpZGxQb3J0OwotICAgIEhpZGxVdGlsczo6YXVkaW9Qb3J0RnJvbUhhbCgqcG9ydCwgJmhpZGxQb3J0KTsKLSAgICBSZXN1bHQgcmV0dmFsOwotICAgIFJldHVybjx2b2lkPiByZXQgPSBtRGV2aWNlLT5nZXRBdWRpb1BvcnQoCi0gICAgICAgICAgICBoaWRsUG9ydCwKLSAgICAgICAgICAgIFsmXShSZXN1bHQgciwgY29uc3QgQXVkaW9Qb3J0JiBwKSB7Ci0gICAgICAgICAgICAgICAgcmV0dmFsID0gcjsKLSAgICAgICAgICAgICAgICBpZiAocmV0dmFsID09IFJlc3VsdDo6T0spIHsKLSAgICAgICAgICAgICAgICAgICAgSGlkbFV0aWxzOjphdWRpb1BvcnRUb0hhbChwLCBwb3J0KTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9KTsKLSAgICByZXR1cm4gcHJvY2Vzc1JldHVybigiZ2V0QXVkaW9Qb3J0IiwgcmV0LCByZXR2YWwpOwotfQotCi1zdGF0dXNfdCBEZXZpY2VIYWxIaWRsOjpzZXRBdWRpb1BvcnRDb25maWcoY29uc3Qgc3RydWN0IGF1ZGlvX3BvcnRfY29uZmlnICpjb25maWcpIHsKLSAgICBpZiAobURldmljZSA9PSAwKSByZXR1cm4gTk9fSU5JVDsKLSAgICBBdWRpb1BvcnRDb25maWcgaGlkbENvbmZpZzsKLSAgICBIaWRsVXRpbHM6OmF1ZGlvUG9ydENvbmZpZ0Zyb21IYWwoKmNvbmZpZywgJmhpZGxDb25maWcpOwotICAgIHJldHVybiBwcm9jZXNzUmV0dXJuKCJzZXRBdWRpb1BvcnRDb25maWciLCBtRGV2aWNlLT5zZXRBdWRpb1BvcnRDb25maWcoaGlkbENvbmZpZykpOwotfQotCi1zdGF0dXNfdCBEZXZpY2VIYWxIaWRsOjpnZXRNaWNyb3Bob25lcyhzdGQ6OnZlY3RvcjxtZWRpYTo6TWljcm9waG9uZUluZm8+ICptaWNyb3Bob25lc0luZm8pIHsKLSAgICBpZiAobURldmljZSA9PSAwKSByZXR1cm4gTk9fSU5JVDsKLSAgICBSZXN1bHQgcmV0dmFsOwotICAgIFJldHVybjx2b2lkPiByZXQgPSBtRGV2aWNlLT5nZXRNaWNyb3Bob25lcygKLSAgICAgICAgICAgIFsmXShSZXN1bHQgciwgaGlkbF92ZWM8TWljcm9waG9uZUluZm8+IG1pY0FycmF5SGFsKSB7Ci0gICAgICAgIHJldHZhbCA9IHI7Ci0gICAgICAgIGZvciAoc2l6ZV90IGsgPSAwOyBrIDwgbWljQXJyYXlIYWwuc2l6ZSgpOyBrKyspIHsKLSAgICAgICAgICAgIGF1ZGlvX21pY3JvcGhvbmVfY2hhcmFjdGVyaXN0aWNfdCBkc3Q7Ci0gICAgICAgICAgICAvL2NvbnZlcnQKLSAgICAgICAgICAgIG1pY3JvcGhvbmVJbmZvVG9IYWwobWljQXJyYXlIYWxba10sICZkc3QpOwotICAgICAgICAgICAgbWVkaWE6Ok1pY3JvcGhvbmVJbmZvIG1pY3JvcGhvbmUgPSBtZWRpYTo6TWljcm9waG9uZUluZm8oZHN0KTsKLSAgICAgICAgICAgIG1pY3JvcGhvbmVzSW5mby0+cHVzaF9iYWNrKG1pY3JvcGhvbmUpOwotICAgICAgICB9Ci0gICAgfSk7Ci0gICAgcmV0dXJuIHByb2Nlc3NSZXR1cm4oImdldE1pY3JvcGhvbmVzIiwgcmV0LCByZXR2YWwpOwotfQotCi1zdGF0dXNfdCBEZXZpY2VIYWxIaWRsOjpkdW1wKGludCBmZCkgewotICAgIGlmIChtRGV2aWNlID09IDApIHJldHVybiBOT19JTklUOwotICAgIG5hdGl2ZV9oYW5kbGVfdCogaGlkbEhhbmRsZSA9IG5hdGl2ZV9oYW5kbGVfY3JlYXRlKDEsIDApOwotICAgIGhpZGxIYW5kbGUtPmRhdGFbMF0gPSBmZDsKLSAgICBSZXR1cm48dm9pZD4gcmV0ID0gbURldmljZS0+ZGVidWcoaGlkbEhhbmRsZSwge30gLyogb3B0aW9ucyAqLyk7Ci0gICAgbmF0aXZlX2hhbmRsZV9kZWxldGUoaGlkbEhhbmRsZSk7Ci0gICAgcmV0dXJuIHByb2Nlc3NSZXR1cm4oImR1bXAiLCByZXQpOwotfQotCi19IC8vIG5hbWVzcGFjZSBWNF8wCi19IC8vIG5hbWVzcGFjZSBhbmRyb2lkCmRpZmYgLS1naXQgYS9tZWRpYS9saWJhdWRpb2hhbC80LjAvRGV2aWNlSGFsSGlkbC5oIGIvbWVkaWEvbGliYXVkaW9oYWwvNC4wL0RldmljZUhhbEhpZGwuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMGJkMjE3NS4uMDAwMDAwMAotLS0gYS9tZWRpYS9saWJhdWRpb2hhbC80LjAvRGV2aWNlSGFsSGlkbC5oCisrKyAvZGV2L251bGwKQEAgLTEsMTMxICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTYgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAotICoKLSAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwotICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgotICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0gKgotICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLSAqCi0gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCi0gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAotICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCi0gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCi0gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KLSAqLwotCi0jaWZuZGVmIEFORFJPSURfSEFSRFdBUkVfREVWSUNFX0hBTF9ISURMXzRfMF9ICi0jZGVmaW5lIEFORFJPSURfSEFSRFdBUkVfREVWSUNFX0hBTF9ISURMXzRfMF9ICi0KLSNpbmNsdWRlIDxhbmRyb2lkL2hhcmR3YXJlL2F1ZGlvLzQuMC9JRGV2aWNlLmg+Ci0jaW5jbHVkZSA8YW5kcm9pZC9oYXJkd2FyZS9hdWRpby80LjAvSVByaW1hcnlEZXZpY2UuaD4KLSNpbmNsdWRlIDxtZWRpYS9hdWRpb2hhbC9EZXZpY2VIYWxJbnRlcmZhY2UuaD4KLQotI2luY2x1ZGUgIkNvbnZlcnNpb25IZWxwZXJIaWRsLmgiCi0KLXVzaW5nIDo6YW5kcm9pZDo6aGFyZHdhcmU6OmF1ZGlvOjpWNF8wOjpJRGV2aWNlOwotdXNpbmcgOjphbmRyb2lkOjpoYXJkd2FyZTo6YXVkaW86OlY0XzA6OklQcmltYXJ5RGV2aWNlOwotdXNpbmcgOjphbmRyb2lkOjpoYXJkd2FyZTo6UmV0dXJuOwotCi1uYW1lc3BhY2UgYW5kcm9pZCB7Ci1uYW1lc3BhY2UgVjRfMCB7Ci0KLWNsYXNzIERldmljZUhhbEhpZGwgOiBwdWJsaWMgRGV2aWNlSGFsSW50ZXJmYWNlLCBwdWJsaWMgQ29udmVyc2lvbkhlbHBlckhpZGwKLXsKLSAgcHVibGljOgotICAgIC8vIFNldHMgdGhlIHZhbHVlIG9mICdkZXZpY2VzJyB0byBhIGJpdG1hc2sgb2YgMSBvciBtb3JlIHZhbHVlcyBvZiBhdWRpb19kZXZpY2VzX3QuCi0gICAgdmlydHVhbCBzdGF0dXNfdCBnZXRTdXBwb3J0ZWREZXZpY2VzKHVpbnQzMl90ICpkZXZpY2VzKTsKLQotICAgIC8vIENoZWNrIHRvIHNlZSBpZiB0aGUgYXVkaW8gaGFyZHdhcmUgaW50ZXJmYWNlIGhhcyBiZWVuIGluaXRpYWxpemVkLgotICAgIHZpcnR1YWwgc3RhdHVzX3QgaW5pdENoZWNrKCk7Ci0KLSAgICAvLyBTZXQgdGhlIGF1ZGlvIHZvbHVtZSBvZiBhIHZvaWNlIGNhbGwuIFJhbmdlIGlzIGJldHdlZW4gMC4wIGFuZCAxLjAuCi0gICAgdmlydHVhbCBzdGF0dXNfdCBzZXRWb2ljZVZvbHVtZShmbG9hdCB2b2x1bWUpOwotCi0gICAgLy8gU2V0IHRoZSBhdWRpbyB2b2x1bWUgZm9yIGFsbCBhdWRpbyBhY3Rpdml0aWVzIG90aGVyIHRoYW4gdm9pY2UgY2FsbC4KLSAgICB2aXJ0dWFsIHN0YXR1c190IHNldE1hc3RlclZvbHVtZShmbG9hdCB2b2x1bWUpOwotCi0gICAgLy8gR2V0IHRoZSBjdXJyZW50IG1hc3RlciB2b2x1bWUgdmFsdWUgZm9yIHRoZSBIQUwuCi0gICAgdmlydHVhbCBzdGF0dXNfdCBnZXRNYXN0ZXJWb2x1bWUoZmxvYXQgKnZvbHVtZSk7Ci0KLSAgICAvLyBDYWxsZWQgd2hlbiB0aGUgYXVkaW8gbW9kZSBjaGFuZ2VzLgotICAgIHZpcnR1YWwgc3RhdHVzX3Qgc2V0TW9kZShhdWRpb19tb2RlX3QgbW9kZSk7Ci0KLSAgICAvLyBNdXRpbmcgY29udHJvbC4KLSAgICB2aXJ0dWFsIHN0YXR1c190IHNldE1pY011dGUoYm9vbCBzdGF0ZSk7Ci0gICAgdmlydHVhbCBzdGF0dXNfdCBnZXRNaWNNdXRlKGJvb2wgKnN0YXRlKTsKLSAgICB2aXJ0dWFsIHN0YXR1c190IHNldE1hc3Rlck11dGUoYm9vbCBzdGF0ZSk7Ci0gICAgdmlydHVhbCBzdGF0dXNfdCBnZXRNYXN0ZXJNdXRlKGJvb2wgKnN0YXRlKTsKLQotICAgIC8vIFNldCBnbG9iYWwgYXVkaW8gcGFyYW1ldGVycy4KLSAgICB2aXJ0dWFsIHN0YXR1c190IHNldFBhcmFtZXRlcnMoY29uc3QgU3RyaW5nOCYga3ZQYWlycyk7Ci0KLSAgICAvLyBHZXQgZ2xvYmFsIGF1ZGlvIHBhcmFtZXRlcnMuCi0gICAgdmlydHVhbCBzdGF0dXNfdCBnZXRQYXJhbWV0ZXJzKGNvbnN0IFN0cmluZzgmIGtleXMsIFN0cmluZzggKnZhbHVlcyk7Ci0KLSAgICAvLyBSZXR1cm5zIGF1ZGlvIGlucHV0IGJ1ZmZlciBzaXplIGFjY29yZGluZyB0byBwYXJhbWV0ZXJzIHBhc3NlZC4KLSAgICB2aXJ0dWFsIHN0YXR1c190IGdldElucHV0QnVmZmVyU2l6ZShjb25zdCBzdHJ1Y3QgYXVkaW9fY29uZmlnICpjb25maWcsCi0gICAgICAgICAgICBzaXplX3QgKnNpemUpOwotCi0gICAgLy8gQ3JlYXRlcyBhbmQgb3BlbnMgdGhlIGF1ZGlvIGhhcmR3YXJlIG91dHB1dCBzdHJlYW0uIFRoZSBzdHJlYW0gaXMgY2xvc2VkCi0gICAgLy8gYnkgcmVsZWFzaW5nIGFsbCByZWZlcmVuY2VzIHRvIHRoZSByZXR1cm5lZCBvYmplY3QuCi0gICAgdmlydHVhbCBzdGF0dXNfdCBvcGVuT3V0cHV0U3RyZWFtKAotICAgICAgICAgICAgYXVkaW9faW9faGFuZGxlX3QgaGFuZGxlLAotICAgICAgICAgICAgYXVkaW9fZGV2aWNlc190IGRldmljZXMsCi0gICAgICAgICAgICBhdWRpb19vdXRwdXRfZmxhZ3NfdCBmbGFncywKLSAgICAgICAgICAgIHN0cnVjdCBhdWRpb19jb25maWcgKmNvbmZpZywKLSAgICAgICAgICAgIGNvbnN0IGNoYXIgKmFkZHJlc3MsCi0gICAgICAgICAgICBzcDxTdHJlYW1PdXRIYWxJbnRlcmZhY2U+ICpvdXRTdHJlYW0pOwotCi0gICAgLy8gQ3JlYXRlcyBhbmQgb3BlbnMgdGhlIGF1ZGlvIGhhcmR3YXJlIGlucHV0IHN0cmVhbS4gVGhlIHN0cmVhbSBpcyBjbG9zZWQKLSAgICAvLyBieSByZWxlYXNpbmcgYWxsIHJlZmVyZW5jZXMgdG8gdGhlIHJldHVybmVkIG9iamVjdC4KLSAgICB2aXJ0dWFsIHN0YXR1c190IG9wZW5JbnB1dFN0cmVhbSgKLSAgICAgICAgICAgIGF1ZGlvX2lvX2hhbmRsZV90IGhhbmRsZSwKLSAgICAgICAgICAgIGF1ZGlvX2RldmljZXNfdCBkZXZpY2VzLAotICAgICAgICAgICAgc3RydWN0IGF1ZGlvX2NvbmZpZyAqY29uZmlnLAotICAgICAgICAgICAgYXVkaW9faW5wdXRfZmxhZ3NfdCBmbGFncywKLSAgICAgICAgICAgIGNvbnN0IGNoYXIgKmFkZHJlc3MsCi0gICAgICAgICAgICBhdWRpb19zb3VyY2VfdCBzb3VyY2UsCi0gICAgICAgICAgICBzcDxTdHJlYW1JbkhhbEludGVyZmFjZT4gKmluU3RyZWFtKTsKLQotICAgIC8vIFJldHVybnMgd2hldGhlciBjcmVhdGVBdWRpb1BhdGNoIGFuZCByZWxlYXNlQXVkaW9QYXRjaCBvcGVyYXRpb25zIGFyZSBzdXBwb3J0ZWQuCi0gICAgdmlydHVhbCBzdGF0dXNfdCBzdXBwb3J0c0F1ZGlvUGF0Y2hlcyhib29sICpzdXBwb3J0c1BhdGNoZXMpOwotCi0gICAgLy8gQ3JlYXRlcyBhbiBhdWRpbyBwYXRjaCBiZXR3ZWVuIHNldmVyYWwgc291cmNlIGFuZCBzaW5rIHBvcnRzLgotICAgIHZpcnR1YWwgc3RhdHVzX3QgY3JlYXRlQXVkaW9QYXRjaCgKLSAgICAgICAgICAgIHVuc2lnbmVkIGludCBudW1fc291cmNlcywKLSAgICAgICAgICAgIGNvbnN0IHN0cnVjdCBhdWRpb19wb3J0X2NvbmZpZyAqc291cmNlcywKLSAgICAgICAgICAgIHVuc2lnbmVkIGludCBudW1fc2lua3MsCi0gICAgICAgICAgICBjb25zdCBzdHJ1Y3QgYXVkaW9fcG9ydF9jb25maWcgKnNpbmtzLAotICAgICAgICAgICAgYXVkaW9fcGF0Y2hfaGFuZGxlX3QgKnBhdGNoKTsKLQotICAgIC8vIFJlbGVhc2VzIGFuIGF1ZGlvIHBhdGNoLgotICAgIHZpcnR1YWwgc3RhdHVzX3QgcmVsZWFzZUF1ZGlvUGF0Y2goYXVkaW9fcGF0Y2hfaGFuZGxlX3QgcGF0Y2gpOwotCi0gICAgLy8gRmlsbHMgdGhlIGxpc3Qgb2Ygc3VwcG9ydGVkIGF0dHJpYnV0ZXMgZm9yIGEgZ2l2ZW4gYXVkaW8gcG9ydC4KLSAgICB2aXJ0dWFsIHN0YXR1c190IGdldEF1ZGlvUG9ydChzdHJ1Y3QgYXVkaW9fcG9ydCAqcG9ydCk7Ci0KLSAgICAvLyBTZXQgYXVkaW8gcG9ydCBjb25maWd1cmF0aW9uLgotICAgIHZpcnR1YWwgc3RhdHVzX3Qgc2V0QXVkaW9Qb3J0Q29uZmlnKGNvbnN0IHN0cnVjdCBhdWRpb19wb3J0X2NvbmZpZyAqY29uZmlnKTsKLQotICAgIC8vIExpc3QgbWljcm9waG9uZXMKLSAgICB2aXJ0dWFsIHN0YXR1c190IGdldE1pY3JvcGhvbmVzKHN0ZDo6dmVjdG9yPG1lZGlhOjpNaWNyb3Bob25lSW5mbz4gKm1pY3JvcGhvbmVzKTsKLQotICAgIHZpcnR1YWwgc3RhdHVzX3QgZHVtcChpbnQgZmQpOwotCi0gIHByaXZhdGU6Ci0gICAgZnJpZW5kIGNsYXNzIERldmljZXNGYWN0b3J5SGFsSGlkbDsKLSAgICBzcDxJRGV2aWNlPiBtRGV2aWNlOwotICAgIHNwPElQcmltYXJ5RGV2aWNlPiBtUHJpbWFyeURldmljZTsgIC8vIE51bGwgaWYgaXQncyBub3QgYSBwcmltYXJ5IGRldmljZS4KLQotICAgIC8vIENhbiBub3QgYmUgY29uc3RydWN0ZWQgZGlyZWN0bHkgYnkgY2xpZW50cy4KLSAgICBleHBsaWNpdCBEZXZpY2VIYWxIaWRsKGNvbnN0IHNwPElEZXZpY2U+JiBkZXZpY2UpOwotCi0gICAgLy8gVGhlIGRlc3RydWN0b3IgYXV0b21hdGljYWxseSBjbG9zZXMgdGhlIGRldmljZS4KLSAgICB2aXJ0dWFsIH5EZXZpY2VIYWxIaWRsKCk7Ci19OwotCi19IC8vIG5hbWVzcGFjZSBWNF8wCi19IC8vIG5hbWVzcGFjZSBhbmRyb2lkCi0KLSNlbmRpZiAvLyBBTkRST0lEX0hBUkRXQVJFX0RFVklDRV9IQUxfSElETF80XzBfSApkaWZmIC0tZ2l0IGEvbWVkaWEvbGliYXVkaW9oYWwvNC4wL0RldmljZUhhbExvY2FsLmNwcCBiL21lZGlhL2xpYmF1ZGlvaGFsLzQuMC9EZXZpY2VIYWxMb2NhbC5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGEyNDVkZDkuLjAwMDAwMDAKLS0tIGEvbWVkaWEvbGliYXVkaW9oYWwvNC4wL0RldmljZUhhbExvY2FsLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDIxMyArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDE2IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKLSAqCi0gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKLSAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KLSAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotICoKLSAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0gKgotICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQotICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKLSAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgotICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAotICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCi0gKi8KLQotI2RlZmluZSBMT0dfVEFHICJEZXZpY2VIYWxMb2NhbCIKLS8vI2RlZmluZSBMT0dfTkRFQlVHIDAKLQotI2luY2x1ZGUgPHV0aWxzL0xvZy5oPgotCi0jaW5jbHVkZSAiRGV2aWNlSGFsTG9jYWwuaCIKLSNpbmNsdWRlICJTdHJlYW1IYWxMb2NhbC5oIgotCi1uYW1lc3BhY2UgYW5kcm9pZCB7Ci1uYW1lc3BhY2UgVjRfMCB7Ci0KLURldmljZUhhbExvY2FsOjpEZXZpY2VIYWxMb2NhbChhdWRpb19od19kZXZpY2VfdCAqZGV2KQotICAgICAgICA6IG1EZXYoZGV2KSB7Ci19Ci0KLURldmljZUhhbExvY2FsOjp+RGV2aWNlSGFsTG9jYWwoKSB7Ci0gICAgaW50IHN0YXR1cyA9IGF1ZGlvX2h3X2RldmljZV9jbG9zZShtRGV2KTsKLSAgICBBTE9HV19JRihzdGF0dXMsICJFcnJvciBjbG9zaW5nIGF1ZGlvIGh3IGRldmljZSAlcDogJXMiLCBtRGV2LCBzdHJlcnJvcigtc3RhdHVzKSk7Ci0gICAgbURldiA9IDA7Ci19Ci0KLXN0YXR1c190IERldmljZUhhbExvY2FsOjpnZXRTdXBwb3J0ZWREZXZpY2VzKHVpbnQzMl90ICpkZXZpY2VzKSB7Ci0gICAgaWYgKG1EZXYtPmdldF9zdXBwb3J0ZWRfZGV2aWNlcyA9PSBOVUxMKSByZXR1cm4gSU5WQUxJRF9PUEVSQVRJT047Ci0gICAgKmRldmljZXMgPSBtRGV2LT5nZXRfc3VwcG9ydGVkX2RldmljZXMobURldik7Ci0gICAgcmV0dXJuIE9LOwotfQotCi1zdGF0dXNfdCBEZXZpY2VIYWxMb2NhbDo6aW5pdENoZWNrKCkgewotICAgIHJldHVybiBtRGV2LT5pbml0X2NoZWNrKG1EZXYpOwotfQotCi1zdGF0dXNfdCBEZXZpY2VIYWxMb2NhbDo6c2V0Vm9pY2VWb2x1bWUoZmxvYXQgdm9sdW1lKSB7Ci0gICAgcmV0dXJuIG1EZXYtPnNldF92b2ljZV92b2x1bWUobURldiwgdm9sdW1lKTsKLX0KLQotc3RhdHVzX3QgRGV2aWNlSGFsTG9jYWw6OnNldE1hc3RlclZvbHVtZShmbG9hdCB2b2x1bWUpIHsKLSAgICBpZiAobURldi0+c2V0X21hc3Rlcl92b2x1bWUgPT0gTlVMTCkgcmV0dXJuIElOVkFMSURfT1BFUkFUSU9OOwotICAgIHJldHVybiBtRGV2LT5zZXRfbWFzdGVyX3ZvbHVtZShtRGV2LCB2b2x1bWUpOwotfQotCi1zdGF0dXNfdCBEZXZpY2VIYWxMb2NhbDo6Z2V0TWFzdGVyVm9sdW1lKGZsb2F0ICp2b2x1bWUpIHsKLSAgICBpZiAobURldi0+Z2V0X21hc3Rlcl92b2x1bWUgPT0gTlVMTCkgcmV0dXJuIElOVkFMSURfT1BFUkFUSU9OOwotICAgIHJldHVybiBtRGV2LT5nZXRfbWFzdGVyX3ZvbHVtZShtRGV2LCB2b2x1bWUpOwotfQotCi1zdGF0dXNfdCBEZXZpY2VIYWxMb2NhbDo6c2V0TW9kZShhdWRpb19tb2RlX3QgbW9kZSkgewotICAgIHJldHVybiBtRGV2LT5zZXRfbW9kZShtRGV2LCBtb2RlKTsKLX0KLQotc3RhdHVzX3QgRGV2aWNlSGFsTG9jYWw6OnNldE1pY011dGUoYm9vbCBzdGF0ZSkgewotICAgIHJldHVybiBtRGV2LT5zZXRfbWljX211dGUobURldiwgc3RhdGUpOwotfQotCi1zdGF0dXNfdCBEZXZpY2VIYWxMb2NhbDo6Z2V0TWljTXV0ZShib29sICpzdGF0ZSkgewotICAgIHJldHVybiBtRGV2LT5nZXRfbWljX211dGUobURldiwgc3RhdGUpOwotfQotCi1zdGF0dXNfdCBEZXZpY2VIYWxMb2NhbDo6c2V0TWFzdGVyTXV0ZShib29sIHN0YXRlKSB7Ci0gICAgaWYgKG1EZXYtPnNldF9tYXN0ZXJfbXV0ZSA9PSBOVUxMKSByZXR1cm4gSU5WQUxJRF9PUEVSQVRJT047Ci0gICAgcmV0dXJuIG1EZXYtPnNldF9tYXN0ZXJfbXV0ZShtRGV2LCBzdGF0ZSk7Ci19Ci0KLXN0YXR1c190IERldmljZUhhbExvY2FsOjpnZXRNYXN0ZXJNdXRlKGJvb2wgKnN0YXRlKSB7Ci0gICAgaWYgKG1EZXYtPmdldF9tYXN0ZXJfbXV0ZSA9PSBOVUxMKSByZXR1cm4gSU5WQUxJRF9PUEVSQVRJT047Ci0gICAgcmV0dXJuIG1EZXYtPmdldF9tYXN0ZXJfbXV0ZShtRGV2LCBzdGF0ZSk7Ci19Ci0KLXN0YXR1c190IERldmljZUhhbExvY2FsOjpzZXRQYXJhbWV0ZXJzKGNvbnN0IFN0cmluZzgmIGt2UGFpcnMpIHsKLSAgICByZXR1cm4gbURldi0+c2V0X3BhcmFtZXRlcnMobURldiwga3ZQYWlycy5zdHJpbmcoKSk7Ci19Ci0KLXN0YXR1c190IERldmljZUhhbExvY2FsOjpnZXRQYXJhbWV0ZXJzKGNvbnN0IFN0cmluZzgmIGtleXMsIFN0cmluZzggKnZhbHVlcykgewotICAgIGNoYXIgKmhhbFZhbHVlcyA9IG1EZXYtPmdldF9wYXJhbWV0ZXJzKG1EZXYsIGtleXMuc3RyaW5nKCkpOwotICAgIGlmIChoYWxWYWx1ZXMgIT0gTlVMTCkgewotICAgICAgICB2YWx1ZXMtPnNldFRvKGhhbFZhbHVlcyk7Ci0gICAgICAgIGZyZWUoaGFsVmFsdWVzKTsKLSAgICB9IGVsc2UgewotICAgICAgICB2YWx1ZXMtPmNsZWFyKCk7Ci0gICAgfQotICAgIHJldHVybiBPSzsKLX0KLQotc3RhdHVzX3QgRGV2aWNlSGFsTG9jYWw6OmdldElucHV0QnVmZmVyU2l6ZSgKLSAgICAgICAgY29uc3Qgc3RydWN0IGF1ZGlvX2NvbmZpZyAqY29uZmlnLCBzaXplX3QgKnNpemUpIHsKLSAgICAqc2l6ZSA9IG1EZXYtPmdldF9pbnB1dF9idWZmZXJfc2l6ZShtRGV2LCBjb25maWcpOwotICAgIHJldHVybiBPSzsKLX0KLQotc3RhdHVzX3QgRGV2aWNlSGFsTG9jYWw6Om9wZW5PdXRwdXRTdHJlYW0oCi0gICAgICAgIGF1ZGlvX2lvX2hhbmRsZV90IGhhbmRsZSwKLSAgICAgICAgYXVkaW9fZGV2aWNlc190IGRldmljZXMsCi0gICAgICAgIGF1ZGlvX291dHB1dF9mbGFnc190IGZsYWdzLAotICAgICAgICBzdHJ1Y3QgYXVkaW9fY29uZmlnICpjb25maWcsCi0gICAgICAgIGNvbnN0IGNoYXIgKmFkZHJlc3MsCi0gICAgICAgIHNwPFN0cmVhbU91dEhhbEludGVyZmFjZT4gKm91dFN0cmVhbSkgewotICAgIGF1ZGlvX3N0cmVhbV9vdXRfdCAqaGFsU3RyZWFtOwotICAgIEFMT0dWKCJvcGVuX291dHB1dF9zdHJlYW0gaGFuZGxlOiAlZCBkZXZpY2VzOiAleCBmbGFnczogJSN4IgotICAgICAgICAgICAgInNyYXRlOiAlZCBmb3JtYXQgJSN4IGNoYW5uZWxzICV4IGFkZHJlc3MgJXMiLAotICAgICAgICAgICAgaGFuZGxlLCBkZXZpY2VzLCBmbGFncywKLSAgICAgICAgICAgIGNvbmZpZy0+c2FtcGxlX3JhdGUsIGNvbmZpZy0+Zm9ybWF0LCBjb25maWctPmNoYW5uZWxfbWFzaywKLSAgICAgICAgICAgIGFkZHJlc3MpOwotICAgIGludCBvcGVuUmVzdXQgPSBtRGV2LT5vcGVuX291dHB1dF9zdHJlYW0oCi0gICAgICAgICAgICBtRGV2LCBoYW5kbGUsIGRldmljZXMsIGZsYWdzLCBjb25maWcsICZoYWxTdHJlYW0sIGFkZHJlc3MpOwotICAgIGlmIChvcGVuUmVzdXQgPT0gT0spIHsKLSAgICAgICAgKm91dFN0cmVhbSA9IG5ldyBTdHJlYW1PdXRIYWxMb2NhbChoYWxTdHJlYW0sIHRoaXMpOwotICAgIH0KLSAgICBBTE9HVigib3Blbl9vdXRwdXRfc3RyZWFtIHN0YXR1cyAlZCBzdHJlYW0gJXAiLCBvcGVuUmVzdXQsIGhhbFN0cmVhbSk7Ci0gICAgcmV0dXJuIG9wZW5SZXN1dDsKLX0KLQotc3RhdHVzX3QgRGV2aWNlSGFsTG9jYWw6Om9wZW5JbnB1dFN0cmVhbSgKLSAgICAgICAgYXVkaW9faW9faGFuZGxlX3QgaGFuZGxlLAotICAgICAgICBhdWRpb19kZXZpY2VzX3QgZGV2aWNlcywKLSAgICAgICAgc3RydWN0IGF1ZGlvX2NvbmZpZyAqY29uZmlnLAotICAgICAgICBhdWRpb19pbnB1dF9mbGFnc190IGZsYWdzLAotICAgICAgICBjb25zdCBjaGFyICphZGRyZXNzLAotICAgICAgICBhdWRpb19zb3VyY2VfdCBzb3VyY2UsCi0gICAgICAgIHNwPFN0cmVhbUluSGFsSW50ZXJmYWNlPiAqaW5TdHJlYW0pIHsKLSAgICBhdWRpb19zdHJlYW1faW5fdCAqaGFsU3RyZWFtOwotICAgIEFMT0dWKCJvcGVuX2lucHV0X3N0cmVhbSBoYW5kbGU6ICVkIGRldmljZXM6ICV4IGZsYWdzOiAlI3ggIgotICAgICAgICAgICAgInNyYXRlOiAlZCBmb3JtYXQgJSN4IGNoYW5uZWxzICV4IGFkZHJlc3MgJXMgc291cmNlICVkIiwKLSAgICAgICAgICAgIGhhbmRsZSwgZGV2aWNlcywgZmxhZ3MsCi0gICAgICAgICAgICBjb25maWctPnNhbXBsZV9yYXRlLCBjb25maWctPmZvcm1hdCwgY29uZmlnLT5jaGFubmVsX21hc2ssCi0gICAgICAgICAgICBhZGRyZXNzLCBzb3VyY2UpOwotICAgIGludCBvcGVuUmVzdWx0ID0gbURldi0+b3Blbl9pbnB1dF9zdHJlYW0oCi0gICAgICAgICAgICBtRGV2LCBoYW5kbGUsIGRldmljZXMsIGNvbmZpZywgJmhhbFN0cmVhbSwgZmxhZ3MsIGFkZHJlc3MsIHNvdXJjZSk7Ci0gICAgaWYgKG9wZW5SZXN1bHQgPT0gT0spIHsKLSAgICAgICAgKmluU3RyZWFtID0gbmV3IFN0cmVhbUluSGFsTG9jYWwoaGFsU3RyZWFtLCB0aGlzKTsKLSAgICB9Ci0gICAgQUxPR1YoIm9wZW5faW5wdXRfc3RyZWFtIHN0YXR1cyAlZCBzdHJlYW0gJXAiLCBvcGVuUmVzdWx0LCBpblN0cmVhbSk7Ci0gICAgcmV0dXJuIG9wZW5SZXN1bHQ7Ci19Ci0KLXN0YXR1c190IERldmljZUhhbExvY2FsOjpzdXBwb3J0c0F1ZGlvUGF0Y2hlcyhib29sICpzdXBwb3J0c1BhdGNoZXMpIHsKLSAgICAqc3VwcG9ydHNQYXRjaGVzID0gdmVyc2lvbigpID49IEFVRElPX0RFVklDRV9BUElfVkVSU0lPTl8zXzA7Ci0gICAgcmV0dXJuIE9LOwotfQotCi1zdGF0dXNfdCBEZXZpY2VIYWxMb2NhbDo6Y3JlYXRlQXVkaW9QYXRjaCgKLSAgICAgICAgdW5zaWduZWQgaW50IG51bV9zb3VyY2VzLAotICAgICAgICBjb25zdCBzdHJ1Y3QgYXVkaW9fcG9ydF9jb25maWcgKnNvdXJjZXMsCi0gICAgICAgIHVuc2lnbmVkIGludCBudW1fc2lua3MsCi0gICAgICAgIGNvbnN0IHN0cnVjdCBhdWRpb19wb3J0X2NvbmZpZyAqc2lua3MsCi0gICAgICAgIGF1ZGlvX3BhdGNoX2hhbmRsZV90ICpwYXRjaCkgewotICAgIGlmICh2ZXJzaW9uKCkgPj0gQVVESU9fREVWSUNFX0FQSV9WRVJTSU9OXzNfMCkgewotICAgICAgICByZXR1cm4gbURldi0+Y3JlYXRlX2F1ZGlvX3BhdGNoKAotICAgICAgICAgICAgICAgIG1EZXYsIG51bV9zb3VyY2VzLCBzb3VyY2VzLCBudW1fc2lua3MsIHNpbmtzLCBwYXRjaCk7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgcmV0dXJuIElOVkFMSURfT1BFUkFUSU9OOwotICAgIH0KLX0KLQotc3RhdHVzX3QgRGV2aWNlSGFsTG9jYWw6OnJlbGVhc2VBdWRpb1BhdGNoKGF1ZGlvX3BhdGNoX2hhbmRsZV90IHBhdGNoKSB7Ci0gICAgaWYgKHZlcnNpb24oKSA+PSBBVURJT19ERVZJQ0VfQVBJX1ZFUlNJT05fM18wKSB7Ci0gICAgICAgIHJldHVybiBtRGV2LT5yZWxlYXNlX2F1ZGlvX3BhdGNoKG1EZXYsIHBhdGNoKTsKLSAgICB9IGVsc2UgewotICAgICAgICByZXR1cm4gSU5WQUxJRF9PUEVSQVRJT047Ci0gICAgfQotfQotCi1zdGF0dXNfdCBEZXZpY2VIYWxMb2NhbDo6Z2V0QXVkaW9Qb3J0KHN0cnVjdCBhdWRpb19wb3J0ICpwb3J0KSB7Ci0gICAgcmV0dXJuIG1EZXYtPmdldF9hdWRpb19wb3J0KG1EZXYsIHBvcnQpOwotfQotCi1zdGF0dXNfdCBEZXZpY2VIYWxMb2NhbDo6c2V0QXVkaW9Qb3J0Q29uZmlnKGNvbnN0IHN0cnVjdCBhdWRpb19wb3J0X2NvbmZpZyAqY29uZmlnKSB7Ci0gICAgaWYgKHZlcnNpb24oKSA+PSBBVURJT19ERVZJQ0VfQVBJX1ZFUlNJT05fM18wKQotICAgICAgICByZXR1cm4gbURldi0+c2V0X2F1ZGlvX3BvcnRfY29uZmlnKG1EZXYsIGNvbmZpZyk7Ci0gICAgZWxzZQotICAgICAgICByZXR1cm4gSU5WQUxJRF9PUEVSQVRJT047Ci19Ci0KLXN0YXR1c190IERldmljZUhhbExvY2FsOjpnZXRNaWNyb3Bob25lcyhzdGQ6OnZlY3RvcjxtZWRpYTo6TWljcm9waG9uZUluZm8+ICptaWNyb3Bob25lcykgewotICAgIGlmIChtRGV2LT5nZXRfbWljcm9waG9uZXMgPT0gTlVMTCkgcmV0dXJuIElOVkFMSURfT1BFUkFUSU9OOwotICAgIHNpemVfdCBhY3R1YWxfbWljcyA9IEFVRElPX01JQ1JPUEhPTkVfTUFYX0NPVU5UOwotICAgIGF1ZGlvX21pY3JvcGhvbmVfY2hhcmFjdGVyaXN0aWNfdCBtaWNfYXJyYXlbQVVESU9fTUlDUk9QSE9ORV9NQVhfQ09VTlRdOwotICAgIHN0YXR1c190IHN0YXR1cyA9IG1EZXYtPmdldF9taWNyb3Bob25lcyhtRGV2LCAmbWljX2FycmF5WzBdLCAmYWN0dWFsX21pY3MpOwotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgYWN0dWFsX21pY3M7IGkrKykgewotICAgICAgICBtZWRpYTo6TWljcm9waG9uZUluZm8gbWljcm9waG9uZUluZm8gPSBtZWRpYTo6TWljcm9waG9uZUluZm8obWljX2FycmF5W2ldKTsKLSAgICAgICAgbWljcm9waG9uZXMtPnB1c2hfYmFjayhtaWNyb3Bob25lSW5mbyk7Ci0gICAgfQotICAgIHJldHVybiBzdGF0dXM7Ci19Ci0KLXN0YXR1c190IERldmljZUhhbExvY2FsOjpkdW1wKGludCBmZCkgewotICAgIHJldHVybiBtRGV2LT5kdW1wKG1EZXYsIGZkKTsKLX0KLQotdm9pZCBEZXZpY2VIYWxMb2NhbDo6Y2xvc2VPdXRwdXRTdHJlYW0oc3RydWN0IGF1ZGlvX3N0cmVhbV9vdXQgKnN0cmVhbV9vdXQpIHsKLSAgICBtRGV2LT5jbG9zZV9vdXRwdXRfc3RyZWFtKG1EZXYsIHN0cmVhbV9vdXQpOwotfQotCi12b2lkIERldmljZUhhbExvY2FsOjpjbG9zZUlucHV0U3RyZWFtKHN0cnVjdCBhdWRpb19zdHJlYW1faW4gKnN0cmVhbV9pbikgewotICAgIG1EZXYtPmNsb3NlX2lucHV0X3N0cmVhbShtRGV2LCBzdHJlYW1faW4pOwotfQotCi19IC8vIG5hbWVzcGFjZSBWNF8wCi19IC8vIG5hbWVzcGFjZSBhbmRyb2lkCmRpZmYgLS1naXQgYS9tZWRpYS9saWJhdWRpb2hhbC80LjAvRGV2aWNlSGFsTG9jYWwuaCBiL21lZGlhL2xpYmF1ZGlvaGFsLzQuMC9EZXZpY2VIYWxMb2NhbC5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwODM0MWE0Li4wMDAwMDAwCi0tLSBhL21lZGlhL2xpYmF1ZGlvaGFsLzQuMC9EZXZpY2VIYWxMb2NhbC5oCisrKyAvZGV2L251bGwKQEAgLTEsMTI5ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTYgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAotICoKLSAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwotICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgotICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0gKgotICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLSAqCi0gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCi0gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAotICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCi0gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCi0gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KLSAqLwotCi0jaWZuZGVmIEFORFJPSURfSEFSRFdBUkVfREVWSUNFX0hBTF9MT0NBTF80XzBfSAotI2RlZmluZSBBTkRST0lEX0hBUkRXQVJFX0RFVklDRV9IQUxfTE9DQUxfNF8wX0gKLQotI2luY2x1ZGUgPGhhcmR3YXJlL2F1ZGlvLmg+Ci0jaW5jbHVkZSA8bWVkaWEvYXVkaW9oYWwvRGV2aWNlSGFsSW50ZXJmYWNlLmg+Ci0KLW5hbWVzcGFjZSBhbmRyb2lkIHsKLW5hbWVzcGFjZSBWNF8wIHsKLQotY2xhc3MgRGV2aWNlSGFsTG9jYWwgOiBwdWJsaWMgRGV2aWNlSGFsSW50ZXJmYWNlCi17Ci0gIHB1YmxpYzoKLSAgICAvLyBTZXRzIHRoZSB2YWx1ZSBvZiAnZGV2aWNlcycgdG8gYSBiaXRtYXNrIG9mIDEgb3IgbW9yZSB2YWx1ZXMgb2YgYXVkaW9fZGV2aWNlc190LgotICAgIHZpcnR1YWwgc3RhdHVzX3QgZ2V0U3VwcG9ydGVkRGV2aWNlcyh1aW50MzJfdCAqZGV2aWNlcyk7Ci0KLSAgICAvLyBDaGVjayB0byBzZWUgaWYgdGhlIGF1ZGlvIGhhcmR3YXJlIGludGVyZmFjZSBoYXMgYmVlbiBpbml0aWFsaXplZC4KLSAgICB2aXJ0dWFsIHN0YXR1c190IGluaXRDaGVjaygpOwotCi0gICAgLy8gU2V0IHRoZSBhdWRpbyB2b2x1bWUgb2YgYSB2b2ljZSBjYWxsLiBSYW5nZSBpcyBiZXR3ZWVuIDAuMCBhbmQgMS4wLgotICAgIHZpcnR1YWwgc3RhdHVzX3Qgc2V0Vm9pY2VWb2x1bWUoZmxvYXQgdm9sdW1lKTsKLQotICAgIC8vIFNldCB0aGUgYXVkaW8gdm9sdW1lIGZvciBhbGwgYXVkaW8gYWN0aXZpdGllcyBvdGhlciB0aGFuIHZvaWNlIGNhbGwuCi0gICAgdmlydHVhbCBzdGF0dXNfdCBzZXRNYXN0ZXJWb2x1bWUoZmxvYXQgdm9sdW1lKTsKLQotICAgIC8vIEdldCB0aGUgY3VycmVudCBtYXN0ZXIgdm9sdW1lIHZhbHVlIGZvciB0aGUgSEFMLgotICAgIHZpcnR1YWwgc3RhdHVzX3QgZ2V0TWFzdGVyVm9sdW1lKGZsb2F0ICp2b2x1bWUpOwotCi0gICAgLy8gQ2FsbGVkIHdoZW4gdGhlIGF1ZGlvIG1vZGUgY2hhbmdlcy4KLSAgICB2aXJ0dWFsIHN0YXR1c190IHNldE1vZGUoYXVkaW9fbW9kZV90IG1vZGUpOwotCi0gICAgLy8gTXV0aW5nIGNvbnRyb2wuCi0gICAgdmlydHVhbCBzdGF0dXNfdCBzZXRNaWNNdXRlKGJvb2wgc3RhdGUpOwotICAgIHZpcnR1YWwgc3RhdHVzX3QgZ2V0TWljTXV0ZShib29sICpzdGF0ZSk7Ci0gICAgdmlydHVhbCBzdGF0dXNfdCBzZXRNYXN0ZXJNdXRlKGJvb2wgc3RhdGUpOwotICAgIHZpcnR1YWwgc3RhdHVzX3QgZ2V0TWFzdGVyTXV0ZShib29sICpzdGF0ZSk7Ci0KLSAgICAvLyBTZXQgZ2xvYmFsIGF1ZGlvIHBhcmFtZXRlcnMuCi0gICAgdmlydHVhbCBzdGF0dXNfdCBzZXRQYXJhbWV0ZXJzKGNvbnN0IFN0cmluZzgmIGt2UGFpcnMpOwotCi0gICAgLy8gR2V0IGdsb2JhbCBhdWRpbyBwYXJhbWV0ZXJzLgotICAgIHZpcnR1YWwgc3RhdHVzX3QgZ2V0UGFyYW1ldGVycyhjb25zdCBTdHJpbmc4JiBrZXlzLCBTdHJpbmc4ICp2YWx1ZXMpOwotCi0gICAgLy8gUmV0dXJucyBhdWRpbyBpbnB1dCBidWZmZXIgc2l6ZSBhY2NvcmRpbmcgdG8gcGFyYW1ldGVycyBwYXNzZWQuCi0gICAgdmlydHVhbCBzdGF0dXNfdCBnZXRJbnB1dEJ1ZmZlclNpemUoY29uc3Qgc3RydWN0IGF1ZGlvX2NvbmZpZyAqY29uZmlnLAotICAgICAgICAgICAgc2l6ZV90ICpzaXplKTsKLQotICAgIC8vIENyZWF0ZXMgYW5kIG9wZW5zIHRoZSBhdWRpbyBoYXJkd2FyZSBvdXRwdXQgc3RyZWFtLiBUaGUgc3RyZWFtIGlzIGNsb3NlZAotICAgIC8vIGJ5IHJlbGVhc2luZyBhbGwgcmVmZXJlbmNlcyB0byB0aGUgcmV0dXJuZWQgb2JqZWN0LgotICAgIHZpcnR1YWwgc3RhdHVzX3Qgb3Blbk91dHB1dFN0cmVhbSgKLSAgICAgICAgICAgIGF1ZGlvX2lvX2hhbmRsZV90IGhhbmRsZSwKLSAgICAgICAgICAgIGF1ZGlvX2RldmljZXNfdCBkZXZpY2VzLAotICAgICAgICAgICAgYXVkaW9fb3V0cHV0X2ZsYWdzX3QgZmxhZ3MsCi0gICAgICAgICAgICBzdHJ1Y3QgYXVkaW9fY29uZmlnICpjb25maWcsCi0gICAgICAgICAgICBjb25zdCBjaGFyICphZGRyZXNzLAotICAgICAgICAgICAgc3A8U3RyZWFtT3V0SGFsSW50ZXJmYWNlPiAqb3V0U3RyZWFtKTsKLQotICAgIC8vIENyZWF0ZXMgYW5kIG9wZW5zIHRoZSBhdWRpbyBoYXJkd2FyZSBpbnB1dCBzdHJlYW0uIFRoZSBzdHJlYW0gaXMgY2xvc2VkCi0gICAgLy8gYnkgcmVsZWFzaW5nIGFsbCByZWZlcmVuY2VzIHRvIHRoZSByZXR1cm5lZCBvYmplY3QuCi0gICAgdmlydHVhbCBzdGF0dXNfdCBvcGVuSW5wdXRTdHJlYW0oCi0gICAgICAgICAgICBhdWRpb19pb19oYW5kbGVfdCBoYW5kbGUsCi0gICAgICAgICAgICBhdWRpb19kZXZpY2VzX3QgZGV2aWNlcywKLSAgICAgICAgICAgIHN0cnVjdCBhdWRpb19jb25maWcgKmNvbmZpZywKLSAgICAgICAgICAgIGF1ZGlvX2lucHV0X2ZsYWdzX3QgZmxhZ3MsCi0gICAgICAgICAgICBjb25zdCBjaGFyICphZGRyZXNzLAotICAgICAgICAgICAgYXVkaW9fc291cmNlX3Qgc291cmNlLAotICAgICAgICAgICAgc3A8U3RyZWFtSW5IYWxJbnRlcmZhY2U+ICppblN0cmVhbSk7Ci0KLSAgICAvLyBSZXR1cm5zIHdoZXRoZXIgY3JlYXRlQXVkaW9QYXRjaCBhbmQgcmVsZWFzZUF1ZGlvUGF0Y2ggb3BlcmF0aW9ucyBhcmUgc3VwcG9ydGVkLgotICAgIHZpcnR1YWwgc3RhdHVzX3Qgc3VwcG9ydHNBdWRpb1BhdGNoZXMoYm9vbCAqc3VwcG9ydHNQYXRjaGVzKTsKLQotICAgIC8vIENyZWF0ZXMgYW4gYXVkaW8gcGF0Y2ggYmV0d2VlbiBzZXZlcmFsIHNvdXJjZSBhbmQgc2luayBwb3J0cy4KLSAgICB2aXJ0dWFsIHN0YXR1c190IGNyZWF0ZUF1ZGlvUGF0Y2goCi0gICAgICAgICAgICB1bnNpZ25lZCBpbnQgbnVtX3NvdXJjZXMsCi0gICAgICAgICAgICBjb25zdCBzdHJ1Y3QgYXVkaW9fcG9ydF9jb25maWcgKnNvdXJjZXMsCi0gICAgICAgICAgICB1bnNpZ25lZCBpbnQgbnVtX3NpbmtzLAotICAgICAgICAgICAgY29uc3Qgc3RydWN0IGF1ZGlvX3BvcnRfY29uZmlnICpzaW5rcywKLSAgICAgICAgICAgIGF1ZGlvX3BhdGNoX2hhbmRsZV90ICpwYXRjaCk7Ci0KLSAgICAvLyBSZWxlYXNlcyBhbiBhdWRpbyBwYXRjaC4KLSAgICB2aXJ0dWFsIHN0YXR1c190IHJlbGVhc2VBdWRpb1BhdGNoKGF1ZGlvX3BhdGNoX2hhbmRsZV90IHBhdGNoKTsKLQotICAgIC8vIEZpbGxzIHRoZSBsaXN0IG9mIHN1cHBvcnRlZCBhdHRyaWJ1dGVzIGZvciBhIGdpdmVuIGF1ZGlvIHBvcnQuCi0gICAgdmlydHVhbCBzdGF0dXNfdCBnZXRBdWRpb1BvcnQoc3RydWN0IGF1ZGlvX3BvcnQgKnBvcnQpOwotCi0gICAgLy8gU2V0IGF1ZGlvIHBvcnQgY29uZmlndXJhdGlvbi4KLSAgICB2aXJ0dWFsIHN0YXR1c190IHNldEF1ZGlvUG9ydENvbmZpZyhjb25zdCBzdHJ1Y3QgYXVkaW9fcG9ydF9jb25maWcgKmNvbmZpZyk7Ci0KLSAgICAvLyBMaXN0IG1pY3JvcGhvbmVzCi0gICAgdmlydHVhbCBzdGF0dXNfdCBnZXRNaWNyb3Bob25lcyhzdGQ6OnZlY3RvcjxtZWRpYTo6TWljcm9waG9uZUluZm8+ICptaWNyb3Bob25lcyk7Ci0KLSAgICB2aXJ0dWFsIHN0YXR1c190IGR1bXAoaW50IGZkKTsKLQotICAgIHZvaWQgY2xvc2VPdXRwdXRTdHJlYW0oc3RydWN0IGF1ZGlvX3N0cmVhbV9vdXQgKnN0cmVhbV9vdXQpOwotICAgIHZvaWQgY2xvc2VJbnB1dFN0cmVhbShzdHJ1Y3QgYXVkaW9fc3RyZWFtX2luICpzdHJlYW1faW4pOwotCi0gIHByaXZhdGU6Ci0gICAgYXVkaW9faHdfZGV2aWNlX3QgKm1EZXY7Ci0KLSAgICBmcmllbmQgY2xhc3MgRGV2aWNlc0ZhY3RvcnlIYWxMb2NhbDsKLQotICAgIC8vIENhbiBub3QgYmUgY29uc3RydWN0ZWQgZGlyZWN0bHkgYnkgY2xpZW50cy4KLSAgICBleHBsaWNpdCBEZXZpY2VIYWxMb2NhbChhdWRpb19od19kZXZpY2VfdCAqZGV2KTsKLQotICAgIC8vIFRoZSBkZXN0cnVjdG9yIGF1dG9tYXRpY2FsbHkgY2xvc2VzIHRoZSBkZXZpY2UuCi0gICAgdmlydHVhbCB+RGV2aWNlSGFsTG9jYWwoKTsKLQotICAgIHVpbnQzMl90IHZlcnNpb24oKSBjb25zdCB7IHJldHVybiBtRGV2LT5jb21tb24udmVyc2lvbjsgfQotfTsKLQotfSAvLyBuYW1lc3BhY2UgVjRfMAotfSAvLyBuYW1lc3BhY2UgYW5kcm9pZAotCi0jZW5kaWYgLy8gQU5EUk9JRF9IQVJEV0FSRV9ERVZJQ0VfSEFMX0xPQ0FMXzRfMF9ICmRpZmYgLS1naXQgYS9tZWRpYS9saWJhdWRpb2hhbC80LjAvRGV2aWNlc0ZhY3RvcnlIYWxIaWRsLmNwcCBiL21lZGlhL2xpYmF1ZGlvaGFsLzQuMC9EZXZpY2VzRmFjdG9yeUhhbEhpZGwuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjODMxOTRlLi4wMDAwMDAwCi0tLSBhL21lZGlhL2xpYmF1ZGlvaGFsLzQuMC9EZXZpY2VzRmFjdG9yeUhhbEhpZGwuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsNzUgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNiBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0Ci0gKgotICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7Ci0gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCi0gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLSAqCi0gKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotICoKLSAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKLSAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCi0gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KLSAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKLSAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgotICovCi0KLSNpbmNsdWRlIDxzdHJpbmcuaD4KLQotI2RlZmluZSBMT0dfVEFHICJEZXZpY2VzRmFjdG9yeUhhbEhpZGwiCi0vLyNkZWZpbmUgTE9HX05ERUJVRyAwCi0KLSNpbmNsdWRlIDxhbmRyb2lkL2hhcmR3YXJlL2F1ZGlvLzQuMC9JRGV2aWNlLmg+Ci0jaW5jbHVkZSA8bWVkaWEvYXVkaW9oYWwvaGlkbC9IYWxEZWF0aEhhbmRsZXIuaD4KLSNpbmNsdWRlIDx1dGlscy9Mb2cuaD4KLQotI2luY2x1ZGUgIkNvbnZlcnNpb25IZWxwZXJIaWRsLmgiCi0jaW5jbHVkZSAiRGV2aWNlSGFsSGlkbC5oIgotI2luY2x1ZGUgIkRldmljZXNGYWN0b3J5SGFsSGlkbC5oIgotCi11c2luZyA6OmFuZHJvaWQ6OmhhcmR3YXJlOjphdWRpbzo6VjRfMDo6SURldmljZTsKLXVzaW5nIDo6YW5kcm9pZDo6aGFyZHdhcmU6OmF1ZGlvOjpWNF8wOjpSZXN1bHQ7Ci11c2luZyA6OmFuZHJvaWQ6OmhhcmR3YXJlOjpSZXR1cm47Ci0KLW5hbWVzcGFjZSBhbmRyb2lkIHsKLW5hbWVzcGFjZSBWNF8wIHsKLQotRGV2aWNlc0ZhY3RvcnlIYWxIaWRsOjpEZXZpY2VzRmFjdG9yeUhhbEhpZGwoKSB7Ci0gICAgbURldmljZXNGYWN0b3J5ID0gSURldmljZXNGYWN0b3J5OjpnZXRTZXJ2aWNlKCk7Ci0gICAgaWYgKG1EZXZpY2VzRmFjdG9yeSAhPSAwKSB7Ci0gICAgICAgIC8vIEl0IGlzIGFzc3VtZWQgdGhhdCBEZXZpY2VzRmFjdG9yeSBpcyBvd25lZCBieSBBdWRpb0ZsaW5nZXIKLSAgICAgICAgLy8gYW5kIHRodXMgaGF2ZSB0aGUgc2FtZSBsaWZlc3Bhbi4KLSAgICAgICAgbURldmljZXNGYWN0b3J5LT5saW5rVG9EZWF0aChIYWxEZWF0aEhhbmRsZXI6OmdldEluc3RhbmNlKCksIDAgLypjb29raWUqLyk7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgQUxPR0UoIkZhaWxlZCB0byBvYnRhaW4gSURldmljZXNGYWN0b3J5IHNlcnZpY2UsIHRlcm1pbmF0aW5nIHByb2Nlc3MuIik7Ci0gICAgICAgIGV4aXQoMSk7Ci0gICAgfQotICAgIC8vIFRoZSBNU0QgZmFjdG9yeSBpcyBvcHRpb25hbAotICAgIG1EZXZpY2VzRmFjdG9yeU1zZCA9IElEZXZpY2VzRmFjdG9yeTo6Z2V0U2VydmljZShBVURJT19IQUxfU0VSVklDRV9OQU1FX01TRCk7Ci0gICAgLy8gVE9ETzogUmVnaXN0ZXIgZGVhdGggaGFuZGxlciwgYW5kIGFkZCAncmVzdGFydCcgZGlyZWN0aXZlIHRvIGF1ZGlvc2VydmVyLnJjCi19Ci0KLURldmljZXNGYWN0b3J5SGFsSGlkbDo6fkRldmljZXNGYWN0b3J5SGFsSGlkbCgpIHsKLX0KLQotc3RhdHVzX3QgRGV2aWNlc0ZhY3RvcnlIYWxIaWRsOjpvcGVuRGV2aWNlKGNvbnN0IGNoYXIgKm5hbWUsIHNwPERldmljZUhhbEludGVyZmFjZT4gKmRldmljZSkgewotICAgIGlmIChtRGV2aWNlc0ZhY3RvcnkgPT0gMCkgcmV0dXJuIE5PX0lOSVQ7Ci0gICAgUmVzdWx0IHJldHZhbCA9IFJlc3VsdDo6Tk9UX0lOSVRJQUxJWkVEOwotICAgIFJldHVybjx2b2lkPiByZXQgPSBtRGV2aWNlc0ZhY3RvcnktPm9wZW5EZXZpY2UoCi0gICAgICAgICAgICBuYW1lLAotICAgICAgICAgICAgWyZdKFJlc3VsdCByLCBjb25zdCBzcDxJRGV2aWNlPiYgcmVzdWx0KSB7Ci0gICAgICAgICAgICAgICAgcmV0dmFsID0gcjsKLSAgICAgICAgICAgICAgICBpZiAocmV0dmFsID09IFJlc3VsdDo6T0spIHsKLSAgICAgICAgICAgICAgICAgICAgKmRldmljZSA9IG5ldyBEZXZpY2VIYWxIaWRsKHJlc3VsdCk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfSk7Ci0gICAgaWYgKHJldC5pc09rKCkpIHsKLSAgICAgICAgaWYgKHJldHZhbCA9PSBSZXN1bHQ6Ok9LKSByZXR1cm4gT0s7Ci0gICAgICAgIGVsc2UgaWYgKHJldHZhbCA9PSBSZXN1bHQ6OklOVkFMSURfQVJHVU1FTlRTKSByZXR1cm4gQkFEX1ZBTFVFOwotICAgICAgICBlbHNlIHJldHVybiBOT19JTklUOwotICAgIH0KLSAgICByZXR1cm4gRkFJTEVEX1RSQU5TQUNUSU9OOwotfQotCi19IC8vIG5hbWVzcGFjZSBWNF8wCi19IC8vIG5hbWVzcGFjZSBhbmRyb2lkCmRpZmYgLS1naXQgYS9tZWRpYS9saWJhdWRpb2hhbC80LjAvRGV2aWNlc0ZhY3RvcnlIYWxIaWRsLmggYi9tZWRpYS9saWJhdWRpb2hhbC80LjAvRGV2aWNlc0ZhY3RvcnlIYWxIaWRsLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDExNDg4OWIuLjAwMDAwMDAKLS0tIGEvbWVkaWEvbGliYXVkaW9oYWwvNC4wL0RldmljZXNGYWN0b3J5SGFsSGlkbC5oCisrKyAvZGV2L251bGwKQEAgLTEsNTQgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNiBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0Ci0gKgotICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7Ci0gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCi0gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLSAqCi0gKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotICoKLSAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKLSAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCi0gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KLSAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKLSAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgotICovCi0KLSNpZm5kZWYgQU5EUk9JRF9IQVJEV0FSRV9ERVZJQ0VTX0ZBQ1RPUllfSEFMX0hJRExfNF8wX0gKLSNkZWZpbmUgQU5EUk9JRF9IQVJEV0FSRV9ERVZJQ0VTX0ZBQ1RPUllfSEFMX0hJRExfNF8wX0gKLQotI2luY2x1ZGUgPGFuZHJvaWQvaGFyZHdhcmUvYXVkaW8vNC4wL0lEZXZpY2VzRmFjdG9yeS5oPgotI2luY2x1ZGUgPG1lZGlhL2F1ZGlvaGFsL0RldmljZXNGYWN0b3J5SGFsSW50ZXJmYWNlLmg+Ci0jaW5jbHVkZSA8dXRpbHMvRXJyb3JzLmg+Ci0jaW5jbHVkZSA8dXRpbHMvUmVmQmFzZS5oPgotCi0jaW5jbHVkZSAiRGV2aWNlSGFsSGlkbC5oIgotCi11c2luZyA6OmFuZHJvaWQ6OmhhcmR3YXJlOjphdWRpbzo6VjRfMDo6SURldmljZXNGYWN0b3J5OwotCi1uYW1lc3BhY2UgYW5kcm9pZCB7Ci1uYW1lc3BhY2UgVjRfMCB7Ci0KLWNsYXNzIERldmljZXNGYWN0b3J5SGFsSGlkbCA6IHB1YmxpYyBEZXZpY2VzRmFjdG9yeUhhbEludGVyZmFjZQotewotICBwdWJsaWM6Ci0gICAgLy8gT3BlbnMgYSBkZXZpY2Ugd2l0aCB0aGUgc3BlY2lmaWVkIG5hbWUuIFRvIGNsb3NlIHRoZSBkZXZpY2UsIGl0IGlzCi0gICAgLy8gbmVjZXNzYXJ5IHRvIHJlbGVhc2UgcmVmZXJlbmNlcyB0byB0aGUgcmV0dXJuZWQgb2JqZWN0LgotICAgIHZpcnR1YWwgc3RhdHVzX3Qgb3BlbkRldmljZShjb25zdCBjaGFyICpuYW1lLCBzcDxEZXZpY2VIYWxJbnRlcmZhY2U+ICpkZXZpY2UpOwotCi0gIHByaXZhdGU6Ci0gICAgZnJpZW5kIGNsYXNzIERldmljZXNGYWN0b3J5SGFsSHlicmlkOwotCi0gICAgc3A8SURldmljZXNGYWN0b3J5PiBtRGV2aWNlc0ZhY3Rvcnk7Ci0gICAgc3A8SURldmljZXNGYWN0b3J5PiBtRGV2aWNlc0ZhY3RvcnlNc2Q7Ci0KLSAgICAvLyBDYW4gbm90IGJlIGNvbnN0cnVjdGVkIGRpcmVjdGx5IGJ5IGNsaWVudHMuCi0gICAgRGV2aWNlc0ZhY3RvcnlIYWxIaWRsKCk7Ci0KLSAgICB2aXJ0dWFsIH5EZXZpY2VzRmFjdG9yeUhhbEhpZGwoKTsKLX07Ci0KLX0gLy8gbmFtZXNwYWNlIFY0XzAKLX0gLy8gbmFtZXNwYWNlIGFuZHJvaWQKLQotI2VuZGlmIC8vIEFORFJPSURfSEFSRFdBUkVfREVWSUNFU19GQUNUT1JZX0hBTF9ISURMXzRfMF9ICmRpZmYgLS1naXQgYS9tZWRpYS9saWJhdWRpb2hhbC80LjAvRGV2aWNlc0ZhY3RvcnlIYWxIeWJyaWQuY3BwIGIvbWVkaWEvbGliYXVkaW9oYWwvNC4wL0RldmljZXNGYWN0b3J5SGFsSHlicmlkLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggN2ZmMWVjN2QuLjAwMDAwMDAKLS0tIGEvbWVkaWEvbGliYXVkaW9oYWwvNC4wL0RldmljZXNGYWN0b3J5SGFsSHlicmlkLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDQ0ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTcgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAotICoKLSAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwotICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgotICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0gKgotICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLSAqCi0gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCi0gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAotICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCi0gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCi0gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KLSAqLwotCi0jZGVmaW5lIExPR19UQUcgIkRldmljZXNGYWN0b3J5SGFsSHlicmlkIgotLy8jZGVmaW5lIExPR19OREVCVUcgMAotCi0jaW5jbHVkZSA8bGliYXVkaW9oYWwvNC4wL0RldmljZXNGYWN0b3J5SGFsSHlicmlkLmg+Ci0jaW5jbHVkZSAiRGV2aWNlc0ZhY3RvcnlIYWxMb2NhbC5oIgotI2luY2x1ZGUgIkRldmljZXNGYWN0b3J5SGFsSGlkbC5oIgotCi1uYW1lc3BhY2UgYW5kcm9pZCB7Ci1uYW1lc3BhY2UgVjRfMCB7Ci0KLURldmljZXNGYWN0b3J5SGFsSHlicmlkOjpEZXZpY2VzRmFjdG9yeUhhbEh5YnJpZCgpCi0gICAgICAgIDogbUxvY2FsRmFjdG9yeShuZXcgRGV2aWNlc0ZhY3RvcnlIYWxMb2NhbCgpKSwKLSAgICAgICAgICBtSGlkbEZhY3RvcnkobmV3IERldmljZXNGYWN0b3J5SGFsSGlkbCgpKSB7Ci19Ci0KLURldmljZXNGYWN0b3J5SGFsSHlicmlkOjp+RGV2aWNlc0ZhY3RvcnlIYWxIeWJyaWQoKSB7Ci19Ci0KLXN0YXR1c190IERldmljZXNGYWN0b3J5SGFsSHlicmlkOjpvcGVuRGV2aWNlKGNvbnN0IGNoYXIgKm5hbWUsIHNwPERldmljZUhhbEludGVyZmFjZT4gKmRldmljZSkgewotICAgIGlmIChtSGlkbEZhY3RvcnkgIT0gMCAmJiBzdHJjbXAoQVVESU9fSEFSRFdBUkVfTU9EVUxFX0lEX0EyRFAsIG5hbWUpICE9IDAgJiYKLSAgICAgICAgc3RyY21wKEFVRElPX0hBUkRXQVJFX01PRFVMRV9JRF9IRUFSSU5HX0FJRCwgbmFtZSkgIT0gMCkgewotICAgICAgICByZXR1cm4gbUhpZGxGYWN0b3J5LT5vcGVuRGV2aWNlKG5hbWUsIGRldmljZSk7Ci0gICAgfQotICAgIHJldHVybiBtTG9jYWxGYWN0b3J5LT5vcGVuRGV2aWNlKG5hbWUsIGRldmljZSk7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFY0XzAKLX0gLy8gbmFtZXNwYWNlIGFuZHJvaWQKZGlmZiAtLWdpdCBhL21lZGlhL2xpYmF1ZGlvaGFsLzQuMC9EZXZpY2VzRmFjdG9yeUhhbExvY2FsLmNwcCBiL21lZGlhL2xpYmF1ZGlvaGFsLzQuMC9EZXZpY2VzRmFjdG9yeUhhbExvY2FsLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTU0ZWRkNC4uMDAwMDAwMAotLS0gYS9tZWRpYS9saWJhdWRpb2hhbC80LjAvRGV2aWNlc0ZhY3RvcnlIYWxMb2NhbC5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSw3MSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDE2IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKLSAqCi0gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKLSAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KLSAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotICoKLSAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0gKgotICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQotICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKLSAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgotICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAotICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCi0gKi8KLQotI2RlZmluZSBMT0dfVEFHICJEZXZpY2VzRmFjdG9yeUhhbExvY2FsIgotLy8jZGVmaW5lIExPR19OREVCVUcgMAotCi0jaW5jbHVkZSA8c3RyaW5nLmg+Ci0KLSNpbmNsdWRlIDxoYXJkd2FyZS9hdWRpby5oPgotI2luY2x1ZGUgPHV0aWxzL0xvZy5oPgotCi0jaW5jbHVkZSAiRGV2aWNlSGFsTG9jYWwuaCIKLSNpbmNsdWRlICJEZXZpY2VzRmFjdG9yeUhhbExvY2FsLmgiCi0KLW5hbWVzcGFjZSBhbmRyb2lkIHsKLW5hbWVzcGFjZSBWNF8wIHsKLQotc3RhdGljIHN0YXR1c190IGxvYWRfYXVkaW9faW50ZXJmYWNlKGNvbnN0IGNoYXIgKmlmX25hbWUsIGF1ZGlvX2h3X2RldmljZV90ICoqZGV2KQotewotICAgIGNvbnN0IGh3X21vZHVsZV90ICptb2Q7Ci0gICAgaW50IHJjOwotCi0gICAgcmMgPSBod19nZXRfbW9kdWxlX2J5X2NsYXNzKEFVRElPX0hBUkRXQVJFX01PRFVMRV9JRCwgaWZfbmFtZSwgJm1vZCk7Ci0gICAgaWYgKHJjKSB7Ci0gICAgICAgIEFMT0dFKCIlcyBjb3VsZG4ndCBsb2FkIGF1ZGlvIGh3IG1vZHVsZSAlcy4lcyAoJXMpIiwgX19mdW5jX18sCi0gICAgICAgICAgICAgICAgQVVESU9fSEFSRFdBUkVfTU9EVUxFX0lELCBpZl9uYW1lLCBzdHJlcnJvcigtcmMpKTsKLSAgICAgICAgZ290byBvdXQ7Ci0gICAgfQotICAgIHJjID0gYXVkaW9faHdfZGV2aWNlX29wZW4obW9kLCBkZXYpOwotICAgIGlmIChyYykgewotICAgICAgICBBTE9HRSgiJXMgY291bGRuJ3Qgb3BlbiBhdWRpbyBodyBkZXZpY2UgaW4gJXMuJXMgKCVzKSIsIF9fZnVuY19fLAotICAgICAgICAgICAgICAgIEFVRElPX0hBUkRXQVJFX01PRFVMRV9JRCwgaWZfbmFtZSwgc3RyZXJyb3IoLXJjKSk7Ci0gICAgICAgIGdvdG8gb3V0OwotICAgIH0KLSAgICBpZiAoKCpkZXYpLT5jb21tb24udmVyc2lvbiA8IEFVRElPX0RFVklDRV9BUElfVkVSU0lPTl9NSU4pIHsKLSAgICAgICAgQUxPR0UoIiVzIHdyb25nIGF1ZGlvIGh3IGRldmljZSB2ZXJzaW9uICUwNHgiLCBfX2Z1bmNfXywgKCpkZXYpLT5jb21tb24udmVyc2lvbik7Ci0gICAgICAgIHJjID0gQkFEX1ZBTFVFOwotICAgICAgICBhdWRpb19od19kZXZpY2VfY2xvc2UoKmRldik7Ci0gICAgICAgIGdvdG8gb3V0OwotICAgIH0KLSAgICByZXR1cm4gT0s7Ci0KLW91dDoKLSAgICAqZGV2ID0gTlVMTDsKLSAgICByZXR1cm4gcmM7Ci19Ci0KLXN0YXR1c190IERldmljZXNGYWN0b3J5SGFsTG9jYWw6Om9wZW5EZXZpY2UoY29uc3QgY2hhciAqbmFtZSwgc3A8RGV2aWNlSGFsSW50ZXJmYWNlPiAqZGV2aWNlKSB7Ci0gICAgYXVkaW9faHdfZGV2aWNlX3QgKmRldjsKLSAgICBzdGF0dXNfdCByYyA9IGxvYWRfYXVkaW9faW50ZXJmYWNlKG5hbWUsICZkZXYpOwotICAgIGlmIChyYyA9PSBPSykgewotICAgICAgICAqZGV2aWNlID0gbmV3IERldmljZUhhbExvY2FsKGRldik7Ci0gICAgfQotICAgIHJldHVybiByYzsKLX0KLQotfSAvLyBuYW1lc3BhY2UgVjRfMAotfSAvLyBuYW1lc3BhY2UgYW5kcm9pZApkaWZmIC0tZ2l0IGEvbWVkaWEvbGliYXVkaW9oYWwvNC4wL0RldmljZXNGYWN0b3J5SGFsTG9jYWwuaCBiL21lZGlhL2xpYmF1ZGlvaGFsLzQuMC9EZXZpY2VzRmFjdG9yeUhhbExvY2FsLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGJjMWM1MjEuLjAwMDAwMDAKLS0tIGEvbWVkaWEvbGliYXVkaW9oYWwvNC4wL0RldmljZXNGYWN0b3J5SGFsTG9jYWwuaAorKysgL2Rldi9udWxsCkBAIC0xLDQ4ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTYgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAotICoKLSAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwotICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgotICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0gKgotICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLSAqCi0gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCi0gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAotICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCi0gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCi0gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KLSAqLwotCi0jaWZuZGVmIEFORFJPSURfSEFSRFdBUkVfREVWSUNFU19GQUNUT1JZX0hBTF9MT0NBTF80XzBfSAotI2RlZmluZSBBTkRST0lEX0hBUkRXQVJFX0RFVklDRVNfRkFDVE9SWV9IQUxfTE9DQUxfNF8wX0gKLQotI2luY2x1ZGUgPG1lZGlhL2F1ZGlvaGFsL0RldmljZXNGYWN0b3J5SGFsSW50ZXJmYWNlLmg+Ci0jaW5jbHVkZSA8dXRpbHMvRXJyb3JzLmg+Ci0jaW5jbHVkZSA8dXRpbHMvUmVmQmFzZS5oPgotCi0jaW5jbHVkZSAiRGV2aWNlSGFsTG9jYWwuaCIKLQotbmFtZXNwYWNlIGFuZHJvaWQgewotbmFtZXNwYWNlIFY0XzAgewotCi1jbGFzcyBEZXZpY2VzRmFjdG9yeUhhbExvY2FsIDogcHVibGljIERldmljZXNGYWN0b3J5SGFsSW50ZXJmYWNlCi17Ci0gIHB1YmxpYzoKLSAgICAvLyBPcGVucyBhIGRldmljZSB3aXRoIHRoZSBzcGVjaWZpZWQgbmFtZS4gVG8gY2xvc2UgdGhlIGRldmljZSwgaXQgaXMKLSAgICAvLyBuZWNlc3NhcnkgdG8gcmVsZWFzZSByZWZlcmVuY2VzIHRvIHRoZSByZXR1cm5lZCBvYmplY3QuCi0gICAgdmlydHVhbCBzdGF0dXNfdCBvcGVuRGV2aWNlKGNvbnN0IGNoYXIgKm5hbWUsIHNwPERldmljZUhhbEludGVyZmFjZT4gKmRldmljZSk7Ci0KLSAgcHJpdmF0ZToKLSAgICBmcmllbmQgY2xhc3MgRGV2aWNlc0ZhY3RvcnlIYWxIeWJyaWQ7Ci0KLSAgICAvLyBDYW4gbm90IGJlIGNvbnN0cnVjdGVkIGRpcmVjdGx5IGJ5IGNsaWVudHMuCi0gICAgRGV2aWNlc0ZhY3RvcnlIYWxMb2NhbCgpIHt9Ci0KLSAgICB2aXJ0dWFsIH5EZXZpY2VzRmFjdG9yeUhhbExvY2FsKCkge30KLX07Ci0KLX0gLy8gbmFtZXNwYWNlIFY0XzAKLX0gLy8gbmFtZXNwYWNlIGFuZHJvaWQKLQotI2VuZGlmIC8vIEFORFJPSURfSEFSRFdBUkVfREVWSUNFU19GQUNUT1JZX0hBTF9MT0NBTF80XzBfSApkaWZmIC0tZ2l0IGEvbWVkaWEvbGliYXVkaW9oYWwvNC4wL0VmZmVjdEJ1ZmZlckhhbEhpZGwuY3BwIGIvbWVkaWEvbGliYXVkaW9oYWwvNC4wL0VmZmVjdEJ1ZmZlckhhbEhpZGwuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5NTdjODlmLi4wMDAwMDAwCi0tLSBhL21lZGlhL2xpYmF1ZGlvaGFsLzQuMC9FZmZlY3RCdWZmZXJIYWxIaWRsLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDE0NiArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDE3IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKLSAqCi0gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKLSAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KLSAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotICoKLSAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0gKgotICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQotICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKLSAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgotICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAotICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCi0gKi8KLQotI2luY2x1ZGUgPGF0b21pYz4KLQotI2RlZmluZSBMT0dfVEFHICJFZmZlY3RCdWZmZXJIYWxIaWRsIgotLy8jZGVmaW5lIExPR19OREVCVUcgMAotCi0jaW5jbHVkZSA8YW5kcm9pZC9oaWRsL2FsbG9jYXRvci8xLjAvSUFsbG9jYXRvci5oPgotI2luY2x1ZGUgPGhpZGxtZW1vcnkvbWFwcGluZy5oPgotI2luY2x1ZGUgPHV0aWxzL0xvZy5oPgotCi0jaW5jbHVkZSAiQ29udmVyc2lvbkhlbHBlckhpZGwuaCIKLSNpbmNsdWRlICJFZmZlY3RCdWZmZXJIYWxIaWRsLmgiCi0KLXVzaW5nIDo6YW5kcm9pZDo6aGFyZHdhcmU6OlJldHVybjsKLXVzaW5nIDo6YW5kcm9pZDo6aGlkbDo6YWxsb2NhdG9yOjpWMV8wOjpJQWxsb2NhdG9yOwotCi1uYW1lc3BhY2UgYW5kcm9pZCB7Ci1uYW1lc3BhY2UgVjRfMCB7Ci0KLS8vIHN0YXRpYwotdWludDY0X3QgRWZmZWN0QnVmZmVySGFsSGlkbDo6bWFrZVVuaXF1ZUlkKCkgewotICAgIHN0YXRpYyBzdGQ6OmF0b21pYzx1aW50NjRfdD4gY291bnRlcnsxfTsKLSAgICByZXR1cm4gY291bnRlcisrOwotfQotCi1zdGF0dXNfdCBFZmZlY3RCdWZmZXJIYWxIaWRsOjphbGxvY2F0ZSgKLSAgICAgICAgc2l6ZV90IHNpemUsIHNwPEVmZmVjdEJ1ZmZlckhhbEludGVyZmFjZT4qIGJ1ZmZlcikgewotICAgIHJldHVybiBtaXJyb3IobnVsbHB0ciwgc2l6ZSwgYnVmZmVyKTsKLX0KLQotc3RhdHVzX3QgRWZmZWN0QnVmZmVySGFsSGlkbDo6bWlycm9yKAotICAgICAgICB2b2lkKiBleHRlcm5hbCwgc2l6ZV90IHNpemUsIHNwPEVmZmVjdEJ1ZmZlckhhbEludGVyZmFjZT4qIGJ1ZmZlcikgewotICAgIHNwPEVmZmVjdEJ1ZmZlckhhbEludGVyZmFjZT4gdGVtcEJ1ZmZlciA9IG5ldyBFZmZlY3RCdWZmZXJIYWxIaWRsKHNpemUpOwotICAgIHN0YXR1c190IHJlc3VsdCA9IHN0YXRpY19jYXN0PEVmZmVjdEJ1ZmZlckhhbEhpZGwqPih0ZW1wQnVmZmVyLmdldCgpKS0+aW5pdCgpOwotICAgIGlmIChyZXN1bHQgPT0gT0spIHsKLSAgICAgICAgdGVtcEJ1ZmZlci0+c2V0RXh0ZXJuYWxEYXRhKGV4dGVybmFsKTsKLSAgICAgICAgKmJ1ZmZlciA9IHRlbXBCdWZmZXI7Ci0gICAgfQotICAgIHJldHVybiByZXN1bHQ7Ci19Ci0KLUVmZmVjdEJ1ZmZlckhhbEhpZGw6OkVmZmVjdEJ1ZmZlckhhbEhpZGwoc2l6ZV90IHNpemUpCi0gICAgICAgIDogbUJ1ZmZlclNpemUoc2l6ZSksIG1GcmFtZUNvdW50Q2hhbmdlZChmYWxzZSksCi0gICAgICAgICAgbUV4dGVybmFsRGF0YShudWxscHRyKSwgbUF1ZGlvQnVmZmVyezAsIHtudWxscHRyfX0gewotICAgIG1IaWRsQnVmZmVyLmlkID0gbWFrZVVuaXF1ZUlkKCk7Ci0gICAgbUhpZGxCdWZmZXIuZnJhbWVDb3VudCA9IDA7Ci19Ci0KLUVmZmVjdEJ1ZmZlckhhbEhpZGw6On5FZmZlY3RCdWZmZXJIYWxIaWRsKCkgewotfQotCi1zdGF0dXNfdCBFZmZlY3RCdWZmZXJIYWxIaWRsOjppbml0KCkgewotICAgIHNwPElBbGxvY2F0b3I+IGFzaG1lbSA9IElBbGxvY2F0b3I6OmdldFNlcnZpY2UoImFzaG1lbSIpOwotICAgIGlmIChhc2htZW0gPT0gMCkgewotICAgICAgICBBTE9HRSgiRmFpbGVkIHRvIHJldHJpZXZlIGFzaG1lbSBhbGxvY2F0b3Igc2VydmljZSIpOwotICAgICAgICByZXR1cm4gTk9fSU5JVDsKLSAgICB9Ci0gICAgc3RhdHVzX3QgcmV0dmFsID0gTk9fTUVNT1JZOwotICAgIFJldHVybjx2b2lkPiByZXN1bHQgPSBhc2htZW0tPmFsbG9jYXRlKAotICAgICAgICAgICAgbUJ1ZmZlclNpemUsCi0gICAgICAgICAgICBbJl0oYm9vbCBzdWNjZXNzLCBjb25zdCBoaWRsX21lbW9yeSYgbWVtb3J5KSB7Ci0gICAgICAgICAgICAgICAgaWYgKHN1Y2Nlc3MpIHsKLSAgICAgICAgICAgICAgICAgICAgbUhpZGxCdWZmZXIuZGF0YSA9IG1lbW9yeTsKLSAgICAgICAgICAgICAgICAgICAgcmV0dmFsID0gT0s7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfSk7Ci0gICAgaWYgKHJlc3VsdC5pc09rKCkgJiYgcmV0dmFsID09IE9LKSB7Ci0gICAgICAgIG1NZW1vcnkgPSBoYXJkd2FyZTo6bWFwTWVtb3J5KG1IaWRsQnVmZmVyLmRhdGEpOwotICAgICAgICBpZiAobU1lbW9yeSAhPSAwKSB7Ci0gICAgICAgICAgICBtTWVtb3J5LT51cGRhdGUoKTsKLSAgICAgICAgICAgIG1BdWRpb0J1ZmZlci5yYXcgPSBzdGF0aWNfY2FzdDx2b2lkKj4obU1lbW9yeS0+Z2V0UG9pbnRlcigpKTsKLSAgICAgICAgICAgIG1lbXNldChtQXVkaW9CdWZmZXIucmF3LCAwLCBtTWVtb3J5LT5nZXRTaXplKCkpOwotICAgICAgICAgICAgbU1lbW9yeS0+Y29tbWl0KCk7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBBTE9HRSgiRmFpbGVkIHRvIG1hcCBhbGxvY2F0ZWQgYXNobWVtIik7Ci0gICAgICAgICAgICByZXR2YWwgPSBOT19NRU1PUlk7Ci0gICAgICAgIH0KLSAgICB9IGVsc2UgewotICAgICAgICBBTE9HRSgiRmFpbGVkIHRvIGFsbG9jYXRlICVkIGJ5dGVzIGZyb20gYXNobWVtIiwgKGludCltQnVmZmVyU2l6ZSk7Ci0gICAgfQotICAgIHJldHVybiByZXN1bHQuaXNPaygpID8gcmV0dmFsIDogRkFJTEVEX1RSQU5TQUNUSU9OOwotfQotCi1hdWRpb19idWZmZXJfdCogRWZmZWN0QnVmZmVySGFsSGlkbDo6YXVkaW9CdWZmZXIoKSB7Ci0gICAgcmV0dXJuICZtQXVkaW9CdWZmZXI7Ci19Ci0KLXZvaWQqIEVmZmVjdEJ1ZmZlckhhbEhpZGw6OmV4dGVybmFsRGF0YSgpIGNvbnN0IHsKLSAgICByZXR1cm4gbUV4dGVybmFsRGF0YTsKLX0KLQotdm9pZCBFZmZlY3RCdWZmZXJIYWxIaWRsOjpzZXRGcmFtZUNvdW50KHNpemVfdCBmcmFtZUNvdW50KSB7Ci0gICAgbUhpZGxCdWZmZXIuZnJhbWVDb3VudCA9IGZyYW1lQ291bnQ7Ci0gICAgbUF1ZGlvQnVmZmVyLmZyYW1lQ291bnQgPSBmcmFtZUNvdW50OwotICAgIG1GcmFtZUNvdW50Q2hhbmdlZCA9IHRydWU7Ci19Ci0KLWJvb2wgRWZmZWN0QnVmZmVySGFsSGlkbDo6Y2hlY2tGcmFtZUNvdW50Q2hhbmdlKCkgewotICAgIGJvb2wgcmVzdWx0ID0gbUZyYW1lQ291bnRDaGFuZ2VkOwotICAgIG1GcmFtZUNvdW50Q2hhbmdlZCA9IGZhbHNlOwotICAgIHJldHVybiByZXN1bHQ7Ci19Ci0KLXZvaWQgRWZmZWN0QnVmZmVySGFsSGlkbDo6c2V0RXh0ZXJuYWxEYXRhKHZvaWQqIGV4dGVybmFsKSB7Ci0gICAgbUV4dGVybmFsRGF0YSA9IGV4dGVybmFsOwotfQotCi12b2lkIEVmZmVjdEJ1ZmZlckhhbEhpZGw6OnVwZGF0ZSgpIHsKLSAgICB1cGRhdGUobUJ1ZmZlclNpemUpOwotfQotCi12b2lkIEVmZmVjdEJ1ZmZlckhhbEhpZGw6OmNvbW1pdCgpIHsKLSAgICBjb21taXQobUJ1ZmZlclNpemUpOwotfQotCi12b2lkIEVmZmVjdEJ1ZmZlckhhbEhpZGw6OnVwZGF0ZShzaXplX3Qgc2l6ZSkgewotICAgIGlmIChtRXh0ZXJuYWxEYXRhID09IG51bGxwdHIpIHJldHVybjsKLSAgICBtTWVtb3J5LT51cGRhdGUoKTsKLSAgICBpZiAoc2l6ZSA+IG1CdWZmZXJTaXplKSBzaXplID0gbUJ1ZmZlclNpemU7Ci0gICAgbWVtY3B5KG1BdWRpb0J1ZmZlci5yYXcsIG1FeHRlcm5hbERhdGEsIHNpemUpOwotICAgIG1NZW1vcnktPmNvbW1pdCgpOwotfQotCi12b2lkIEVmZmVjdEJ1ZmZlckhhbEhpZGw6OmNvbW1pdChzaXplX3Qgc2l6ZSkgewotICAgIGlmIChtRXh0ZXJuYWxEYXRhID09IG51bGxwdHIpIHJldHVybjsKLSAgICBpZiAoc2l6ZSA+IG1CdWZmZXJTaXplKSBzaXplID0gbUJ1ZmZlclNpemU7Ci0gICAgbWVtY3B5KG1FeHRlcm5hbERhdGEsIG1BdWRpb0J1ZmZlci5yYXcsIHNpemUpOwotfQotCi19IC8vIG5hbWVzcGFjZSBWNF8wCi19IC8vIG5hbWVzcGFjZSBhbmRyb2lkCmRpZmYgLS1naXQgYS9tZWRpYS9saWJhdWRpb2hhbC80LjAvRWZmZWN0QnVmZmVySGFsSGlkbC5oIGIvbWVkaWEvbGliYXVkaW9oYWwvNC4wL0VmZmVjdEJ1ZmZlckhhbEhpZGwuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNmQ1NzhjNi4uMDAwMDAwMAotLS0gYS9tZWRpYS9saWJhdWRpb2hhbC80LjAvRWZmZWN0QnVmZmVySGFsSGlkbC5oCisrKyAvZGV2L251bGwKQEAgLTEsNzggKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNyBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0Ci0gKgotICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7Ci0gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCi0gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLSAqCi0gKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotICoKLSAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKLSAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCi0gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KLSAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKLSAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgotICovCi0KLSNpZm5kZWYgQU5EUk9JRF9IQVJEV0FSRV9FRkZFQ1RfQlVGRkVSX0hBTF9ISURMXzRfMF9ICi0jZGVmaW5lIEFORFJPSURfSEFSRFdBUkVfRUZGRUNUX0JVRkZFUl9IQUxfSElETF80XzBfSAotCi0jaW5jbHVkZSA8YW5kcm9pZC9oYXJkd2FyZS9hdWRpby9lZmZlY3QvNC4wL3R5cGVzLmg+Ci0jaW5jbHVkZSA8YW5kcm9pZC9oaWRsL21lbW9yeS8xLjAvSU1lbW9yeS5oPgotI2luY2x1ZGUgPGhpZGwvSGlkbFN1cHBvcnQuaD4KLSNpbmNsdWRlIDxtZWRpYS9hdWRpb2hhbC9FZmZlY3RCdWZmZXJIYWxJbnRlcmZhY2UuaD4KLSNpbmNsdWRlIDxzeXN0ZW0vYXVkaW9fZWZmZWN0Lmg+Ci0KLXVzaW5nIGFuZHJvaWQ6OmhhcmR3YXJlOjphdWRpbzo6ZWZmZWN0OjpWNF8wOjpBdWRpb0J1ZmZlcjsKLXVzaW5nIGFuZHJvaWQ6OmhhcmR3YXJlOjpoaWRsX21lbW9yeTsKLXVzaW5nIGFuZHJvaWQ6OmhpZGw6Om1lbW9yeTo6VjFfMDo6SU1lbW9yeTsKLQotbmFtZXNwYWNlIGFuZHJvaWQgewotbmFtZXNwYWNlIFY0XzAgewotCi1jbGFzcyBFZmZlY3RCdWZmZXJIYWxIaWRsIDogcHVibGljIEVmZmVjdEJ1ZmZlckhhbEludGVyZmFjZQotewotICBwdWJsaWM6Ci0gICAgc3RhdGljIHN0YXR1c190IGFsbG9jYXRlKHNpemVfdCBzaXplLCBzcDxFZmZlY3RCdWZmZXJIYWxJbnRlcmZhY2U+KiBidWZmZXIpOwotICAgIHN0YXRpYyBzdGF0dXNfdCBtaXJyb3Iodm9pZCogZXh0ZXJuYWwsIHNpemVfdCBzaXplLCBzcDxFZmZlY3RCdWZmZXJIYWxJbnRlcmZhY2U+KiBidWZmZXIpOwotCi0gICAgdmlydHVhbCBhdWRpb19idWZmZXJfdCogYXVkaW9CdWZmZXIoKTsKLSAgICB2aXJ0dWFsIHZvaWQqIGV4dGVybmFsRGF0YSgpIGNvbnN0OwotCi0gICAgdmlydHVhbCBzaXplX3QgZ2V0U2l6ZSgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIG1CdWZmZXJTaXplOyB9Ci0KLSAgICB2aXJ0dWFsIHZvaWQgc2V0RXh0ZXJuYWxEYXRhKHZvaWQqIGV4dGVybmFsKTsKLSAgICB2aXJ0dWFsIHZvaWQgc2V0RnJhbWVDb3VudChzaXplX3QgZnJhbWVDb3VudCk7Ci0gICAgdmlydHVhbCBib29sIGNoZWNrRnJhbWVDb3VudENoYW5nZSgpOwotCi0gICAgdmlydHVhbCB2b2lkIHVwZGF0ZSgpOwotICAgIHZpcnR1YWwgdm9pZCBjb21taXQoKTsKLSAgICB2aXJ0dWFsIHZvaWQgdXBkYXRlKHNpemVfdCBzaXplKTsKLSAgICB2aXJ0dWFsIHZvaWQgY29tbWl0KHNpemVfdCBzaXplKTsKLQotICAgIGNvbnN0IEF1ZGlvQnVmZmVyJiBoaWRsQnVmZmVyKCkgY29uc3QgeyByZXR1cm4gbUhpZGxCdWZmZXI7IH0KLQotICBwcml2YXRlOgotICAgIGZyaWVuZCBjbGFzcyBFZmZlY3RCdWZmZXJIYWxJbnRlcmZhY2U7Ci0KLSAgICBzdGF0aWMgdWludDY0X3QgbWFrZVVuaXF1ZUlkKCk7Ci0KLSAgICBjb25zdCBzaXplX3QgbUJ1ZmZlclNpemU7Ci0gICAgYm9vbCBtRnJhbWVDb3VudENoYW5nZWQ7Ci0gICAgdm9pZCogbUV4dGVybmFsRGF0YTsKLSAgICBBdWRpb0J1ZmZlciBtSGlkbEJ1ZmZlcjsKLSAgICBzcDxJTWVtb3J5PiBtTWVtb3J5OwotICAgIGF1ZGlvX2J1ZmZlcl90IG1BdWRpb0J1ZmZlcjsKLQotICAgIC8vIENhbiBub3QgYmUgY29uc3RydWN0ZWQgZGlyZWN0bHkgYnkgY2xpZW50cy4KLSAgICBleHBsaWNpdCBFZmZlY3RCdWZmZXJIYWxIaWRsKHNpemVfdCBzaXplKTsKLQotICAgIHZpcnR1YWwgfkVmZmVjdEJ1ZmZlckhhbEhpZGwoKTsKLQotICAgIHN0YXR1c190IGluaXQoKTsKLX07Ci0KLX0gLy8gbmFtZXNwYWNlIFY0XzAKLX0gLy8gbmFtZXNwYWNlIGFuZHJvaWQKLQotI2VuZGlmIC8vIEFORFJPSURfSEFSRFdBUkVfRUZGRUNUX0JVRkZFUl9IQUxfSElETF80XzBfSApkaWZmIC0tZ2l0IGEvbWVkaWEvbGliYXVkaW9oYWwvNC4wL0VmZmVjdEhhbEhpZGwuY3BwIGIvbWVkaWEvbGliYXVkaW9oYWwvNC4wL0VmZmVjdEhhbEhpZGwuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjOTljNGM4Li4wMDAwMDAwCi0tLSBhL21lZGlhL2xpYmF1ZGlvaGFsLzQuMC9FZmZlY3RIYWxIaWRsLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDM0MiArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDE2IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKLSAqCi0gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKLSAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KLSAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotICoKLSAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0gKgotICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQotICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKLSAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgotICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAotICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCi0gKi8KLQotI2RlZmluZSBMT0dfVEFHICJFZmZlY3RIYWxIaWRsIgotLy8jZGVmaW5lIExPR19OREVCVUcgMAotCi0jaW5jbHVkZSA8Y29tbW9uL2FsbC12ZXJzaW9ucy9WZXJzaW9uVXRpbHMuaD4KLSNpbmNsdWRlIDxod2JpbmRlci9JUENUaHJlYWRTdGF0ZS5oPgotI2luY2x1ZGUgPG1lZGlhL0VmZmVjdHNGYWN0b3J5QXBpLmg+Ci0jaW5jbHVkZSA8dXRpbHMvTG9nLmg+Ci0KLSNpbmNsdWRlICJDb252ZXJzaW9uSGVscGVySGlkbC5oIgotI2luY2x1ZGUgIkVmZmVjdEJ1ZmZlckhhbEhpZGwuaCIKLSNpbmNsdWRlICJFZmZlY3RIYWxIaWRsLmgiCi0jaW5jbHVkZSAiSGlkbFV0aWxzLmgiCi0KLXVzaW5nIDo6YW5kcm9pZDo6aGFyZHdhcmU6OmF1ZGlvOjplZmZlY3Q6OlY0XzA6OkF1ZGlvQnVmZmVyOwotdXNpbmcgOjphbmRyb2lkOjpoYXJkd2FyZTo6YXVkaW86OmVmZmVjdDo6VjRfMDo6RWZmZWN0QnVmZmVyQWNjZXNzOwotdXNpbmcgOjphbmRyb2lkOjpoYXJkd2FyZTo6YXVkaW86OmVmZmVjdDo6VjRfMDo6RWZmZWN0Q29uZmlnUGFyYW1ldGVyczsKLXVzaW5nIDo6YW5kcm9pZDo6aGFyZHdhcmU6OmF1ZGlvOjplZmZlY3Q6OlY0XzA6Ok1lc3NhZ2VRdWV1ZUZsYWdCaXRzOwotdXNpbmcgOjphbmRyb2lkOjpoYXJkd2FyZTo6YXVkaW86OmVmZmVjdDo6VjRfMDo6UmVzdWx0OwotdXNpbmcgOjphbmRyb2lkOjpoYXJkd2FyZTo6YXVkaW86OmNvbW1vbjo6VjRfMDo6SGlkbFV0aWxzOwotdXNpbmcgOjphbmRyb2lkOjpoYXJkd2FyZTo6YXVkaW86OmNvbW1vbjo6VjRfMDo6QXVkaW9DaGFubmVsTWFzazsKLXVzaW5nIDo6YW5kcm9pZDo6aGFyZHdhcmU6OmF1ZGlvOjpjb21tb246OlY0XzA6OkF1ZGlvRm9ybWF0OwotdXNpbmcgOjphbmRyb2lkOjpoYXJkd2FyZTo6YXVkaW86OmNvbW1vbjo6dXRpbHM6Om1rRW51bUNvbnZlcnRlcjsKLXVzaW5nIDo6YW5kcm9pZDo6aGFyZHdhcmU6OmhpZGxfdmVjOwotdXNpbmcgOjphbmRyb2lkOjpoYXJkd2FyZTo6TVFEZXNjcmlwdG9yU3luYzsKLXVzaW5nIDo6YW5kcm9pZDo6aGFyZHdhcmU6OlJldHVybjsKLQotbmFtZXNwYWNlIGFuZHJvaWQgewotbmFtZXNwYWNlIFY0XzAgewotCi1FZmZlY3RIYWxIaWRsOjpFZmZlY3RIYWxIaWRsKGNvbnN0IHNwPElFZmZlY3Q+JiBlZmZlY3QsIHVpbnQ2NF90IGVmZmVjdElkKQotICAgICAgICA6IG1FZmZlY3QoZWZmZWN0KSwgbUVmZmVjdElkKGVmZmVjdElkKSwgbUJ1ZmZlcnNDaGFuZ2VkKHRydWUpLCBtRWZHcm91cChudWxscHRyKSB7Ci19Ci0KLUVmZmVjdEhhbEhpZGw6On5FZmZlY3RIYWxIaWRsKCkgewotICAgIGlmIChtRWZmZWN0ICE9IDApIHsKLSAgICAgICAgY2xvc2UoKTsKLSAgICAgICAgbUVmZmVjdC5jbGVhcigpOwotICAgICAgICBoYXJkd2FyZTo6SVBDVGhyZWFkU3RhdGU6OnNlbGYoKS0+Zmx1c2hDb21tYW5kcygpOwotICAgIH0KLSAgICBpZiAobUVmR3JvdXApIHsKLSAgICAgICAgRXZlbnRGbGFnOjpkZWxldGVFdmVudEZsYWcoJm1FZkdyb3VwKTsKLSAgICB9Ci19Ci0KLS8vIHN0YXRpYwotdm9pZCBFZmZlY3RIYWxIaWRsOjplZmZlY3REZXNjcmlwdG9yVG9IYWwoCi0gICAgICAgIGNvbnN0IEVmZmVjdERlc2NyaXB0b3ImIGRlc2NyaXB0b3IsIGVmZmVjdF9kZXNjcmlwdG9yX3QqIGhhbERlc2NyaXB0b3IpIHsKLSAgICBIaWRsVXRpbHM6OnV1aWRUb0hhbChkZXNjcmlwdG9yLnR5cGUsICZoYWxEZXNjcmlwdG9yLT50eXBlKTsKLSAgICBIaWRsVXRpbHM6OnV1aWRUb0hhbChkZXNjcmlwdG9yLnV1aWQsICZoYWxEZXNjcmlwdG9yLT51dWlkKTsKLSAgICBoYWxEZXNjcmlwdG9yLT5mbGFncyA9IHN0YXRpY19jYXN0PHVpbnQzMl90PihkZXNjcmlwdG9yLmZsYWdzKTsKLSAgICBoYWxEZXNjcmlwdG9yLT5jcHVMb2FkID0gZGVzY3JpcHRvci5jcHVMb2FkOwotICAgIGhhbERlc2NyaXB0b3ItPm1lbW9yeVVzYWdlID0gZGVzY3JpcHRvci5tZW1vcnlVc2FnZTsKLSAgICBtZW1jcHkoaGFsRGVzY3JpcHRvci0+bmFtZSwgZGVzY3JpcHRvci5uYW1lLmRhdGEoKSwgZGVzY3JpcHRvci5uYW1lLnNpemUoKSk7Ci0gICAgbWVtY3B5KGhhbERlc2NyaXB0b3ItPmltcGxlbWVudG9yLAotICAgICAgICAgICAgZGVzY3JpcHRvci5pbXBsZW1lbnRvci5kYXRhKCksIGRlc2NyaXB0b3IuaW1wbGVtZW50b3Iuc2l6ZSgpKTsKLX0KLQotLy8gVE9ETyhtbmFnYW5vdik6IFRoZXNlIGJ1ZmZlciBjb252ZXJzaW9uIGZ1bmN0aW9ucyBzaG91bGQgYmUgc2hhcmVkIHdpdGggRWZmZWN0IHdyYXBwZXIKLS8vIHZpYSBIaWRsVXRpbHMuIE1vdmUgdGhlbSB0aGVyZSB3aGVuIGhhcmR3YXJlL2ludGVyZmFjZXMgd2lsbCBnZXQgdW4tZnJvemVuIGFnYWluLgotCi0vLyBzdGF0aWMKLXZvaWQgRWZmZWN0SGFsSGlkbDo6ZWZmZWN0QnVmZmVyQ29uZmlnRnJvbUhhbCgKLSAgICAgICAgY29uc3QgYnVmZmVyX2NvbmZpZ190JiBoYWxDb25maWcsIEVmZmVjdEJ1ZmZlckNvbmZpZyogY29uZmlnKSB7Ci0gICAgY29uZmlnLT5zYW1wbGluZ1JhdGVIeiA9IGhhbENvbmZpZy5zYW1wbGluZ1JhdGU7Ci0gICAgY29uZmlnLT5jaGFubmVscyA9IG1rRW51bUNvbnZlcnRlcjxBdWRpb0NoYW5uZWxNYXNrPihoYWxDb25maWcuY2hhbm5lbHMpOwotICAgIGNvbmZpZy0+Zm9ybWF0ID0gQXVkaW9Gb3JtYXQoaGFsQ29uZmlnLmZvcm1hdCk7Ci0gICAgY29uZmlnLT5hY2Nlc3NNb2RlID0gRWZmZWN0QnVmZmVyQWNjZXNzKGhhbENvbmZpZy5hY2Nlc3NNb2RlKTsKLSAgICBjb25maWctPm1hc2sgPSBta0VudW1Db252ZXJ0ZXI8RWZmZWN0Q29uZmlnUGFyYW1ldGVycz4oaGFsQ29uZmlnLm1hc2spOwotfQotCi0vLyBzdGF0aWMKLXZvaWQgRWZmZWN0SGFsSGlkbDo6ZWZmZWN0QnVmZmVyQ29uZmlnVG9IYWwoCi0gICAgICAgIGNvbnN0IEVmZmVjdEJ1ZmZlckNvbmZpZyYgY29uZmlnLCBidWZmZXJfY29uZmlnX3QqIGhhbENvbmZpZykgewotICAgIGhhbENvbmZpZy0+YnVmZmVyLmZyYW1lQ291bnQgPSAwOwotICAgIGhhbENvbmZpZy0+YnVmZmVyLnJhdyA9IE5VTEw7Ci0gICAgaGFsQ29uZmlnLT5zYW1wbGluZ1JhdGUgPSBjb25maWcuc2FtcGxpbmdSYXRlSHo7Ci0gICAgaGFsQ29uZmlnLT5jaGFubmVscyA9IHN0YXRpY19jYXN0PHVpbnQzMl90Pihjb25maWcuY2hhbm5lbHMpOwotICAgIGhhbENvbmZpZy0+YnVmZmVyUHJvdmlkZXIuY29va2llID0gTlVMTDsKLSAgICBoYWxDb25maWctPmJ1ZmZlclByb3ZpZGVyLmdldEJ1ZmZlciA9IE5VTEw7Ci0gICAgaGFsQ29uZmlnLT5idWZmZXJQcm92aWRlci5yZWxlYXNlQnVmZmVyID0gTlVMTDsKLSAgICBoYWxDb25maWctPmZvcm1hdCA9IHN0YXRpY19jYXN0PHVpbnQ4X3Q+KGNvbmZpZy5mb3JtYXQpOwotICAgIGhhbENvbmZpZy0+YWNjZXNzTW9kZSA9IHN0YXRpY19jYXN0PHVpbnQ4X3Q+KGNvbmZpZy5hY2Nlc3NNb2RlKTsKLSAgICBoYWxDb25maWctPm1hc2sgPSBzdGF0aWNfY2FzdDx1aW50OF90Pihjb25maWcubWFzayk7Ci19Ci0KLS8vIHN0YXRpYwotdm9pZCBFZmZlY3RIYWxIaWRsOjplZmZlY3RDb25maWdGcm9tSGFsKGNvbnN0IGVmZmVjdF9jb25maWdfdCYgaGFsQ29uZmlnLCBFZmZlY3RDb25maWcqIGNvbmZpZykgewotICAgIGVmZmVjdEJ1ZmZlckNvbmZpZ0Zyb21IYWwoaGFsQ29uZmlnLmlucHV0Q2ZnLCAmY29uZmlnLT5pbnB1dENmZyk7Ci0gICAgZWZmZWN0QnVmZmVyQ29uZmlnRnJvbUhhbChoYWxDb25maWcub3V0cHV0Q2ZnLCAmY29uZmlnLT5vdXRwdXRDZmcpOwotfQotCi0vLyBzdGF0aWMKLXZvaWQgRWZmZWN0SGFsSGlkbDo6ZWZmZWN0Q29uZmlnVG9IYWwoY29uc3QgRWZmZWN0Q29uZmlnJiBjb25maWcsIGVmZmVjdF9jb25maWdfdCogaGFsQ29uZmlnKSB7Ci0gICAgZWZmZWN0QnVmZmVyQ29uZmlnVG9IYWwoY29uZmlnLmlucHV0Q2ZnLCAmaGFsQ29uZmlnLT5pbnB1dENmZyk7Ci0gICAgZWZmZWN0QnVmZmVyQ29uZmlnVG9IYWwoY29uZmlnLm91dHB1dENmZywgJmhhbENvbmZpZy0+b3V0cHV0Q2ZnKTsKLX0KLQotLy8gc3RhdGljCi1zdGF0dXNfdCBFZmZlY3RIYWxIaWRsOjphbmFseXplUmVzdWx0KGNvbnN0IFJlc3VsdCYgcmVzdWx0KSB7Ci0gICAgc3dpdGNoIChyZXN1bHQpIHsKLSAgICAgICAgY2FzZSBSZXN1bHQ6Ok9LOiByZXR1cm4gT0s7Ci0gICAgICAgIGNhc2UgUmVzdWx0OjpJTlZBTElEX0FSR1VNRU5UUzogcmV0dXJuIEJBRF9WQUxVRTsKLSAgICAgICAgY2FzZSBSZXN1bHQ6OklOVkFMSURfU1RBVEU6IHJldHVybiBOT1RfRU5PVUdIX0RBVEE7Ci0gICAgICAgIGNhc2UgUmVzdWx0OjpOT1RfSU5JVElBTElaRUQ6IHJldHVybiBOT19JTklUOwotICAgICAgICBjYXNlIFJlc3VsdDo6Tk9UX1NVUFBPUlRFRDogcmV0dXJuIElOVkFMSURfT1BFUkFUSU9OOwotICAgICAgICBjYXNlIFJlc3VsdDo6UkVTVUxUX1RPT19CSUc6IHJldHVybiBOT19NRU1PUlk7Ci0gICAgICAgIGRlZmF1bHQ6IHJldHVybiBOT19JTklUOwotICAgIH0KLX0KLQotc3RhdHVzX3QgRWZmZWN0SGFsSGlkbDo6c2V0SW5CdWZmZXIoY29uc3Qgc3A8RWZmZWN0QnVmZmVySGFsSW50ZXJmYWNlPiYgYnVmZmVyKSB7Ci0gICAgaWYgKCFtQnVmZmVyc0NoYW5nZWQpIHsKLSAgICAgICAgaWYgKGJ1ZmZlci5nZXQoKSA9PSBudWxscHRyIHx8IG1JbkJ1ZmZlci5nZXQoKSA9PSBudWxscHRyKSB7Ci0gICAgICAgICAgICBtQnVmZmVyc0NoYW5nZWQgPSBidWZmZXIuZ2V0KCkgIT0gbUluQnVmZmVyLmdldCgpOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgbUJ1ZmZlcnNDaGFuZ2VkID0gYnVmZmVyLT5hdWRpb0J1ZmZlcigpICE9IG1JbkJ1ZmZlci0+YXVkaW9CdWZmZXIoKTsKLSAgICAgICAgfQotICAgIH0KLSAgICBtSW5CdWZmZXIgPSBidWZmZXI7Ci0gICAgcmV0dXJuIE9LOwotfQotCi1zdGF0dXNfdCBFZmZlY3RIYWxIaWRsOjpzZXRPdXRCdWZmZXIoY29uc3Qgc3A8RWZmZWN0QnVmZmVySGFsSW50ZXJmYWNlPiYgYnVmZmVyKSB7Ci0gICAgaWYgKCFtQnVmZmVyc0NoYW5nZWQpIHsKLSAgICAgICAgaWYgKGJ1ZmZlci5nZXQoKSA9PSBudWxscHRyIHx8IG1PdXRCdWZmZXIuZ2V0KCkgPT0gbnVsbHB0cikgewotICAgICAgICAgICAgbUJ1ZmZlcnNDaGFuZ2VkID0gYnVmZmVyLmdldCgpICE9IG1PdXRCdWZmZXIuZ2V0KCk7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBtQnVmZmVyc0NoYW5nZWQgPSBidWZmZXItPmF1ZGlvQnVmZmVyKCkgIT0gbU91dEJ1ZmZlci0+YXVkaW9CdWZmZXIoKTsKLSAgICAgICAgfQotICAgIH0KLSAgICBtT3V0QnVmZmVyID0gYnVmZmVyOwotICAgIHJldHVybiBPSzsKLX0KLQotc3RhdHVzX3QgRWZmZWN0SGFsSGlkbDo6cHJvY2VzcygpIHsKLSAgICByZXR1cm4gcHJvY2Vzc0ltcGwoc3RhdGljX2Nhc3Q8dWludDMyX3Q+KE1lc3NhZ2VRdWV1ZUZsYWdCaXRzOjpSRVFVRVNUX1BST0NFU1MpKTsKLX0KLQotc3RhdHVzX3QgRWZmZWN0SGFsSGlkbDo6cHJvY2Vzc1JldmVyc2UoKSB7Ci0gICAgcmV0dXJuIHByb2Nlc3NJbXBsKHN0YXRpY19jYXN0PHVpbnQzMl90PihNZXNzYWdlUXVldWVGbGFnQml0czo6UkVRVUVTVF9QUk9DRVNTX1JFVkVSU0UpKTsKLX0KLQotc3RhdHVzX3QgRWZmZWN0SGFsSGlkbDo6cHJlcGFyZUZvclByb2Nlc3NpbmcoKSB7Ci0gICAgc3RkOjp1bmlxdWVfcHRyPFN0YXR1c01RPiB0ZW1wU3RhdHVzTVE7Ci0gICAgUmVzdWx0IHJldHZhbDsKLSAgICBSZXR1cm48dm9pZD4gcmV0ID0gbUVmZmVjdC0+cHJlcGFyZUZvclByb2Nlc3NpbmcoCi0gICAgICAgICAgICBbJl0oUmVzdWx0IHIsIGNvbnN0IE1RRGVzY3JpcHRvclN5bmM8UmVzdWx0PiYgc3RhdHVzTVEpIHsKLSAgICAgICAgICAgICAgICByZXR2YWwgPSByOwotICAgICAgICAgICAgICAgIGlmIChyZXR2YWwgPT0gUmVzdWx0OjpPSykgewotICAgICAgICAgICAgICAgICAgICB0ZW1wU3RhdHVzTVEucmVzZXQobmV3IFN0YXR1c01RKHN0YXR1c01RKSk7Ci0gICAgICAgICAgICAgICAgICAgIGlmICh0ZW1wU3RhdHVzTVEtPmlzVmFsaWQoKSAmJiB0ZW1wU3RhdHVzTVEtPmdldEV2ZW50RmxhZ1dvcmQoKSkgewotICAgICAgICAgICAgICAgICAgICAgICAgRXZlbnRGbGFnOjpjcmVhdGVFdmVudEZsYWcodGVtcFN0YXR1c01RLT5nZXRFdmVudEZsYWdXb3JkKCksICZtRWZHcm91cCk7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9KTsKLSAgICBpZiAoIXJldC5pc09rKCkgfHwgcmV0dmFsICE9IFJlc3VsdDo6T0spIHsKLSAgICAgICAgcmV0dXJuIHJldC5pc09rKCkgPyBhbmFseXplUmVzdWx0KHJldHZhbCkgOiBGQUlMRURfVFJBTlNBQ1RJT047Ci0gICAgfQotICAgIGlmICghdGVtcFN0YXR1c01RIHx8ICF0ZW1wU3RhdHVzTVEtPmlzVmFsaWQoKSB8fCAhbUVmR3JvdXApIHsKLSAgICAgICAgQUxPR0VfSUYoIXRlbXBTdGF0dXNNUSwgIkZhaWxlZCB0byBvYnRhaW4gc3RhdHVzIG1lc3NhZ2UgcXVldWUgZm9yIGVmZmVjdHMiKTsKLSAgICAgICAgQUxPR0VfSUYodGVtcFN0YXR1c01RICYmICF0ZW1wU3RhdHVzTVEtPmlzVmFsaWQoKSwKLSAgICAgICAgICAgICAgICAiU3RhdHVzIG1lc3NhZ2UgcXVldWUgZm9yIGVmZmVjdHMgaXMgaW52YWxpZCIpOwotICAgICAgICBBTE9HRV9JRighbUVmR3JvdXAsICJFdmVudCBmbGFnIGNyZWF0aW9uIGZvciBlZmZlY3RzIGZhaWxlZCIpOwotICAgICAgICByZXR1cm4gTk9fSU5JVDsKLSAgICB9Ci0gICAgbVN0YXR1c01RID0gc3RkOjptb3ZlKHRlbXBTdGF0dXNNUSk7Ci0gICAgcmV0dXJuIE9LOwotfQotCi1ib29sIEVmZmVjdEhhbEhpZGw6Om5lZWRUb1Jlc2V0QnVmZmVycygpIHsKLSAgICBpZiAobUJ1ZmZlcnNDaGFuZ2VkKSByZXR1cm4gdHJ1ZTsKLSAgICBib29sIGluQnVmZmVyRnJhbWVDb3VudFVwZGF0ZWQgPSBtSW5CdWZmZXItPmNoZWNrRnJhbWVDb3VudENoYW5nZSgpOwotICAgIGJvb2wgb3V0QnVmZmVyRnJhbWVDb3VudFVwZGF0ZWQgPSBtT3V0QnVmZmVyLT5jaGVja0ZyYW1lQ291bnRDaGFuZ2UoKTsKLSAgICByZXR1cm4gaW5CdWZmZXJGcmFtZUNvdW50VXBkYXRlZCB8fCBvdXRCdWZmZXJGcmFtZUNvdW50VXBkYXRlZDsKLX0KLQotc3RhdHVzX3QgRWZmZWN0SGFsSGlkbDo6cHJvY2Vzc0ltcGwodWludDMyX3QgbXFGbGFnKSB7Ci0gICAgaWYgKG1FZmZlY3QgPT0gMCB8fCBtSW5CdWZmZXIgPT0gMCB8fCBtT3V0QnVmZmVyID09IDApIHJldHVybiBOT19JTklUOwotICAgIHN0YXR1c190IHN0YXR1czsKLSAgICBpZiAoIW1TdGF0dXNNUSAmJiAoc3RhdHVzID0gcHJlcGFyZUZvclByb2Nlc3NpbmcoKSkgIT0gT0spIHsKLSAgICAgICAgcmV0dXJuIHN0YXR1czsKLSAgICB9Ci0gICAgaWYgKG5lZWRUb1Jlc2V0QnVmZmVycygpICYmIChzdGF0dXMgPSBzZXRQcm9jZXNzQnVmZmVycygpKSAhPSBPSykgewotICAgICAgICByZXR1cm4gc3RhdHVzOwotICAgIH0KLSAgICAvLyBUaGUgZGF0YSBpcyBhbHJlYWR5IGluIHRoZSBidWZmZXJzLCBqdXN0IG5lZWQgdG8gZmx1c2ggaXQgYW5kIHdha2UgdXAgdGhlIHNlcnZlciBzaWRlLgotICAgIHN0ZDo6YXRvbWljX3RocmVhZF9mZW5jZShzdGQ6Om1lbW9yeV9vcmRlcl9yZWxlYXNlKTsKLSAgICBtRWZHcm91cC0+d2FrZShtcUZsYWcpOwotICAgIHVpbnQzMl90IGVmU3RhdGUgPSAwOwotcmV0cnk6Ci0gICAgc3RhdHVzX3QgcmV0ID0gbUVmR3JvdXAtPndhaXQoCi0gICAgICAgICAgICBzdGF0aWNfY2FzdDx1aW50MzJfdD4oTWVzc2FnZVF1ZXVlRmxhZ0JpdHM6OkRPTkVfUFJPQ0VTU0lORyksICZlZlN0YXRlKTsKLSAgICBpZiAoZWZTdGF0ZSAmIHN0YXRpY19jYXN0PHVpbnQzMl90PihNZXNzYWdlUXVldWVGbGFnQml0czo6RE9ORV9QUk9DRVNTSU5HKSkgewotICAgICAgICBSZXN1bHQgcmV0dmFsID0gUmVzdWx0OjpOT1RfSU5JVElBTElaRUQ7Ci0gICAgICAgIG1TdGF0dXNNUS0+cmVhZCgmcmV0dmFsKTsKLSAgICAgICAgaWYgKHJldHZhbCA9PSBSZXN1bHQ6Ok9LIHx8IHJldHZhbCA9PSBSZXN1bHQ6OklOVkFMSURfU1RBVEUpIHsKLSAgICAgICAgICAgIC8vIFN5bmMgYmFjayB0aGUgY2hhbmdlZCBjb250ZW50cyBvZiB0aGUgYnVmZmVyLgotICAgICAgICAgICAgc3RkOjphdG9taWNfdGhyZWFkX2ZlbmNlKHN0ZDo6bWVtb3J5X29yZGVyX2FjcXVpcmUpOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiBhbmFseXplUmVzdWx0KHJldHZhbCk7Ci0gICAgfQotICAgIGlmIChyZXQgPT0gLUVBR0FJTiB8fCByZXQgPT0gLUVJTlRSKSB7Ci0gICAgICAgIC8vIFNwdXJpb3VzIHdha2V1cC4gVGhpcyBub3JtYWxseSByZXRyaWVzIG5vIG1vcmUgdGhhbiBvbmNlLgotICAgICAgICBnb3RvIHJldHJ5OwotICAgIH0KLSAgICByZXR1cm4gcmV0OwotfQotCi1zdGF0dXNfdCBFZmZlY3RIYWxIaWRsOjpzZXRQcm9jZXNzQnVmZmVycygpIHsKLSAgICBSZXR1cm48UmVzdWx0PiByZXQgPSBtRWZmZWN0LT5zZXRQcm9jZXNzQnVmZmVycygKLSAgICAgICAgICAgIHN0YXRpY19jYXN0PEVmZmVjdEJ1ZmZlckhhbEhpZGwqPihtSW5CdWZmZXIuZ2V0KCkpLT5oaWRsQnVmZmVyKCksCi0gICAgICAgICAgICBzdGF0aWNfY2FzdDxFZmZlY3RCdWZmZXJIYWxIaWRsKj4obU91dEJ1ZmZlci5nZXQoKSktPmhpZGxCdWZmZXIoKSk7Ci0gICAgaWYgKHJldC5pc09rKCkgJiYgcmV0ID09IFJlc3VsdDo6T0spIHsKLSAgICAgICAgbUJ1ZmZlcnNDaGFuZ2VkID0gZmFsc2U7Ci0gICAgICAgIHJldHVybiBPSzsKLSAgICB9Ci0gICAgcmV0dXJuIHJldC5pc09rKCkgPyBhbmFseXplUmVzdWx0KHJldCkgOiBGQUlMRURfVFJBTlNBQ1RJT047Ci19Ci0KLXN0YXR1c190IEVmZmVjdEhhbEhpZGw6OmNvbW1hbmQodWludDMyX3QgY21kQ29kZSwgdWludDMyX3QgY21kU2l6ZSwgdm9pZCAqcENtZERhdGEsCi0gICAgICAgIHVpbnQzMl90ICpyZXBseVNpemUsIHZvaWQgKnBSZXBseURhdGEpIHsKLSAgICBpZiAobUVmZmVjdCA9PSAwKSByZXR1cm4gTk9fSU5JVDsKLQotICAgIC8vIFNwZWNpYWwgY2FzZXMuCi0gICAgaWYgKGNtZENvZGUgPT0gRUZGRUNUX0NNRF9TRVRfQ09ORklHIHx8IGNtZENvZGUgPT0gRUZGRUNUX0NNRF9TRVRfQ09ORklHX1JFVkVSU0UpIHsKLSAgICAgICAgcmV0dXJuIHNldENvbmZpZ0ltcGwoY21kQ29kZSwgY21kU2l6ZSwgcENtZERhdGEsIHJlcGx5U2l6ZSwgcFJlcGx5RGF0YSk7Ci0gICAgfSBlbHNlIGlmIChjbWRDb2RlID09IEVGRkVDVF9DTURfR0VUX0NPTkZJRyB8fCBjbWRDb2RlID09IEVGRkVDVF9DTURfR0VUX0NPTkZJR19SRVZFUlNFKSB7Ci0gICAgICAgIHJldHVybiBnZXRDb25maWdJbXBsKGNtZENvZGUsIHJlcGx5U2l6ZSwgcFJlcGx5RGF0YSk7Ci0gICAgfQotCi0gICAgLy8gQ29tbW9uIGNhc2UuCi0gICAgaGlkbF92ZWM8dWludDhfdD4gaGlkbERhdGE7Ci0gICAgaWYgKHBDbWREYXRhICE9IG51bGxwdHIgJiYgY21kU2l6ZSA+IDApIHsKLSAgICAgICAgaGlkbERhdGEuc2V0VG9FeHRlcm5hbChyZWludGVycHJldF9jYXN0PHVpbnQ4X3QqPihwQ21kRGF0YSksIGNtZFNpemUpOwotICAgIH0KLSAgICBzdGF0dXNfdCBzdGF0dXM7Ci0gICAgdWludDMyX3QgcmVwbHlTaXplU3R1YiA9IDA7Ci0gICAgaWYgKHJlcGx5U2l6ZSA9PSBudWxscHRyIHx8IHBSZXBseURhdGEgPT0gbnVsbHB0cikgcmVwbHlTaXplID0gJnJlcGx5U2l6ZVN0dWI7Ci0gICAgUmV0dXJuPHZvaWQ+IHJldCA9IG1FZmZlY3QtPmNvbW1hbmQoY21kQ29kZSwgaGlkbERhdGEsICpyZXBseVNpemUsCi0gICAgICAgICAgICBbJl0oaW50MzJfdCBzLCBjb25zdCBoaWRsX3ZlYzx1aW50OF90PiYgcmVzdWx0KSB7Ci0gICAgICAgICAgICAgICAgc3RhdHVzID0gczsKLSAgICAgICAgICAgICAgICBpZiAoc3RhdHVzID09IDApIHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKCpyZXBseVNpemUgPiByZXN1bHQuc2l6ZSgpKSAqcmVwbHlTaXplID0gcmVzdWx0LnNpemUoKTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKHBSZXBseURhdGEgIT0gbnVsbHB0ciAmJiAqcmVwbHlTaXplID4gMCkgewotICAgICAgICAgICAgICAgICAgICAgICAgbWVtY3B5KHBSZXBseURhdGEsICZyZXN1bHRbMF0sICpyZXBseVNpemUpOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfSk7Ci0gICAgcmV0dXJuIHJldC5pc09rKCkgPyBzdGF0dXMgOiBGQUlMRURfVFJBTlNBQ1RJT047Ci19Ci0KLXN0YXR1c190IEVmZmVjdEhhbEhpZGw6OmdldERlc2NyaXB0b3IoZWZmZWN0X2Rlc2NyaXB0b3JfdCAqcERlc2NyaXB0b3IpIHsKLSAgICBpZiAobUVmZmVjdCA9PSAwKSByZXR1cm4gTk9fSU5JVDsKLSAgICBSZXN1bHQgcmV0dmFsID0gUmVzdWx0OjpOT1RfSU5JVElBTElaRUQ7Ci0gICAgUmV0dXJuPHZvaWQ+IHJldCA9IG1FZmZlY3QtPmdldERlc2NyaXB0b3IoCi0gICAgICAgICAgICBbJl0oUmVzdWx0IHIsIGNvbnN0IEVmZmVjdERlc2NyaXB0b3ImIHJlc3VsdCkgewotICAgICAgICAgICAgICAgIHJldHZhbCA9IHI7Ci0gICAgICAgICAgICAgICAgaWYgKHJldHZhbCA9PSBSZXN1bHQ6Ok9LKSB7Ci0gICAgICAgICAgICAgICAgICAgIGVmZmVjdERlc2NyaXB0b3JUb0hhbChyZXN1bHQsIHBEZXNjcmlwdG9yKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9KTsKLSAgICByZXR1cm4gcmV0LmlzT2soKSA/IGFuYWx5emVSZXN1bHQocmV0dmFsKSA6IEZBSUxFRF9UUkFOU0FDVElPTjsKLX0KLQotc3RhdHVzX3QgRWZmZWN0SGFsSGlkbDo6Y2xvc2UoKSB7Ci0gICAgaWYgKG1FZmZlY3QgPT0gMCkgcmV0dXJuIE5PX0lOSVQ7Ci0gICAgUmV0dXJuPFJlc3VsdD4gcmV0ID0gbUVmZmVjdC0+Y2xvc2UoKTsKLSAgICByZXR1cm4gcmV0LmlzT2soKSA/IGFuYWx5emVSZXN1bHQocmV0KSA6IEZBSUxFRF9UUkFOU0FDVElPTjsKLX0KLQotc3RhdHVzX3QgRWZmZWN0SGFsSGlkbDo6Z2V0Q29uZmlnSW1wbCgKLSAgICAgICAgdWludDMyX3QgY21kQ29kZSwgdWludDMyX3QgKnJlcGx5U2l6ZSwgdm9pZCAqcFJlcGx5RGF0YSkgewotICAgIGlmIChyZXBseVNpemUgPT0gTlVMTCB8fCAqcmVwbHlTaXplICE9IHNpemVvZihlZmZlY3RfY29uZmlnX3QpIHx8IHBSZXBseURhdGEgPT0gTlVMTCkgewotICAgICAgICByZXR1cm4gQkFEX1ZBTFVFOwotICAgIH0KLSAgICBzdGF0dXNfdCByZXN1bHQgPSBGQUlMRURfVFJBTlNBQ1RJT047Ci0gICAgUmV0dXJuPHZvaWQ+IHJldDsKLSAgICBpZiAoY21kQ29kZSA9PSBFRkZFQ1RfQ01EX0dFVF9DT05GSUcpIHsKLSAgICAgICAgcmV0ID0gbUVmZmVjdC0+Z2V0Q29uZmlnKFsmXSAoUmVzdWx0IHIsIGNvbnN0IEVmZmVjdENvbmZpZyAmaGlkbENvbmZpZykgewotICAgICAgICAgICAgcmVzdWx0ID0gYW5hbHl6ZVJlc3VsdChyKTsKLSAgICAgICAgICAgIGlmIChyID09IFJlc3VsdDo6T0spIHsKLSAgICAgICAgICAgICAgICBlZmZlY3RDb25maWdUb0hhbChoaWRsQ29uZmlnLCBzdGF0aWNfY2FzdDxlZmZlY3RfY29uZmlnX3QqPihwUmVwbHlEYXRhKSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0pOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIHJldCA9IG1FZmZlY3QtPmdldENvbmZpZ1JldmVyc2UoWyZdIChSZXN1bHQgciwgY29uc3QgRWZmZWN0Q29uZmlnICZoaWRsQ29uZmlnKSB7Ci0gICAgICAgICAgICByZXN1bHQgPSBhbmFseXplUmVzdWx0KHIpOwotICAgICAgICAgICAgaWYgKHIgPT0gUmVzdWx0OjpPSykgewotICAgICAgICAgICAgICAgIGVmZmVjdENvbmZpZ1RvSGFsKGhpZGxDb25maWcsIHN0YXRpY19jYXN0PGVmZmVjdF9jb25maWdfdCo+KHBSZXBseURhdGEpKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfSk7Ci0gICAgfQotICAgIGlmICghcmV0LmlzT2soKSkgewotICAgICAgICByZXN1bHQgPSBGQUlMRURfVFJBTlNBQ1RJT047Ci0gICAgfQotICAgIHJldHVybiByZXN1bHQ7Ci19Ci0KLXN0YXR1c190IEVmZmVjdEhhbEhpZGw6OnNldENvbmZpZ0ltcGwoCi0gICAgICAgIHVpbnQzMl90IGNtZENvZGUsIHVpbnQzMl90IGNtZFNpemUsIHZvaWQgKnBDbWREYXRhLCB1aW50MzJfdCAqcmVwbHlTaXplLCB2b2lkICpwUmVwbHlEYXRhKSB7Ci0gICAgaWYgKHBDbWREYXRhID09IE5VTEwgfHwgY21kU2l6ZSAhPSBzaXplb2YoZWZmZWN0X2NvbmZpZ190KSB8fAotICAgICAgICAgICAgcmVwbHlTaXplID09IE5VTEwgfHwgKnJlcGx5U2l6ZSAhPSBzaXplb2YoaW50MzJfdCkgfHwgcFJlcGx5RGF0YSA9PSBOVUxMKSB7Ci0gICAgICAgIHJldHVybiBCQURfVkFMVUU7Ci0gICAgfQotICAgIGNvbnN0IGVmZmVjdF9jb25maWdfdCAqaGFsQ29uZmlnID0gc3RhdGljX2Nhc3Q8ZWZmZWN0X2NvbmZpZ190Kj4ocENtZERhdGEpOwotICAgIGlmIChoYWxDb25maWctPmlucHV0Q2ZnLmJ1ZmZlclByb3ZpZGVyLmdldEJ1ZmZlciAhPSBOVUxMIHx8Ci0gICAgICAgICAgICBoYWxDb25maWctPmlucHV0Q2ZnLmJ1ZmZlclByb3ZpZGVyLnJlbGVhc2VCdWZmZXIgIT0gTlVMTCB8fAotICAgICAgICAgICAgaGFsQ29uZmlnLT5vdXRwdXRDZmcuYnVmZmVyUHJvdmlkZXIuZ2V0QnVmZmVyICE9IE5VTEwgfHwKLSAgICAgICAgICAgIGhhbENvbmZpZy0+b3V0cHV0Q2ZnLmJ1ZmZlclByb3ZpZGVyLnJlbGVhc2VCdWZmZXIgIT0gTlVMTCkgewotICAgICAgICBBTE9HRSgiQnVmZmVyIHByb3ZpZGVyIGNhbGxiYWNrcyBhcmUgbm90IHN1cHBvcnRlZCIpOwotICAgIH0KLSAgICBFZmZlY3RDb25maWcgaGlkbENvbmZpZzsKLSAgICBlZmZlY3RDb25maWdGcm9tSGFsKCpoYWxDb25maWcsICZoaWRsQ29uZmlnKTsKLSAgICBSZXR1cm48UmVzdWx0PiByZXQgPSBjbWRDb2RlID09IEVGRkVDVF9DTURfU0VUX0NPTkZJRyA/Ci0gICAgICAgICAgICBtRWZmZWN0LT5zZXRDb25maWcoaGlkbENvbmZpZywgbnVsbHB0ciwgbnVsbHB0cikgOgotICAgICAgICAgICAgbUVmZmVjdC0+c2V0Q29uZmlnUmV2ZXJzZShoaWRsQ29uZmlnLCBudWxscHRyLCBudWxscHRyKTsKLSAgICBzdGF0dXNfdCByZXN1bHQgPSBGQUlMRURfVFJBTlNBQ1RJT047Ci0gICAgaWYgKHJldC5pc09rKCkpIHsKLSAgICAgICAgcmVzdWx0ID0gYW5hbHl6ZVJlc3VsdChyZXQpOwotICAgICAgICAqc3RhdGljX2Nhc3Q8aW50MzJfdCo+KHBSZXBseURhdGEpID0gcmVzdWx0OwotICAgIH0KLSAgICByZXR1cm4gcmVzdWx0OwotfQotCi19IC8vIG5hbWVzcGFjZSBWNF8wCi19IC8vIG5hbWVzcGFjZSBhbmRyb2lkCmRpZmYgLS1naXQgYS9tZWRpYS9saWJhdWRpb2hhbC80LjAvRWZmZWN0SGFsSGlkbC5oIGIvbWVkaWEvbGliYXVkaW9oYWwvNC4wL0VmZmVjdEhhbEhpZGwuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNWE0ZGFiMS4uMDAwMDAwMAotLS0gYS9tZWRpYS9saWJhdWRpb2hhbC80LjAvRWZmZWN0SGFsSGlkbC5oCisrKyAvZGV2L251bGwKQEAgLTEsMTEwICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTYgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAotICoKLSAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwotICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgotICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0gKgotICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLSAqCi0gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCi0gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAotICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCi0gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCi0gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KLSAqLwotCi0jaWZuZGVmIEFORFJPSURfSEFSRFdBUkVfRUZGRUNUX0hBTF9ISURMXzRfMF9ICi0jZGVmaW5lIEFORFJPSURfSEFSRFdBUkVfRUZGRUNUX0hBTF9ISURMXzRfMF9ICi0KLSNpbmNsdWRlIDxhbmRyb2lkL2hhcmR3YXJlL2F1ZGlvL2VmZmVjdC80LjAvSUVmZmVjdC5oPgotI2luY2x1ZGUgPG1lZGlhL2F1ZGlvaGFsL0VmZmVjdEhhbEludGVyZmFjZS5oPgotI2luY2x1ZGUgPGZtcS9FdmVudEZsYWcuaD4KLSNpbmNsdWRlIDxmbXEvTWVzc2FnZVF1ZXVlLmg+Ci0jaW5jbHVkZSA8c3lzdGVtL2F1ZGlvX2VmZmVjdC5oPgotCi11c2luZyA6OmFuZHJvaWQ6OmhhcmR3YXJlOjphdWRpbzo6ZWZmZWN0OjpWNF8wOjpFZmZlY3RCdWZmZXJDb25maWc7Ci11c2luZyA6OmFuZHJvaWQ6OmhhcmR3YXJlOjphdWRpbzo6ZWZmZWN0OjpWNF8wOjpFZmZlY3RDb25maWc7Ci11c2luZyA6OmFuZHJvaWQ6OmhhcmR3YXJlOjphdWRpbzo6ZWZmZWN0OjpWNF8wOjpFZmZlY3REZXNjcmlwdG9yOwotdXNpbmcgOjphbmRyb2lkOjpoYXJkd2FyZTo6YXVkaW86OmVmZmVjdDo6VjRfMDo6SUVmZmVjdDsKLXVzaW5nIDo6YW5kcm9pZDo6aGFyZHdhcmU6OkV2ZW50RmxhZzsKLXVzaW5nIDo6YW5kcm9pZDo6aGFyZHdhcmU6Ok1lc3NhZ2VRdWV1ZTsKLQotbmFtZXNwYWNlIGFuZHJvaWQgewotbmFtZXNwYWNlIFY0XzAgewotCi1jbGFzcyBFZmZlY3RIYWxIaWRsIDogcHVibGljIEVmZmVjdEhhbEludGVyZmFjZQotewotICBwdWJsaWM6Ci0gICAgLy8gU2V0IHRoZSBpbnB1dCBidWZmZXIuCi0gICAgdmlydHVhbCBzdGF0dXNfdCBzZXRJbkJ1ZmZlcihjb25zdCBzcDxFZmZlY3RCdWZmZXJIYWxJbnRlcmZhY2U+JiBidWZmZXIpOwotCi0gICAgLy8gU2V0IHRoZSBvdXRwdXQgYnVmZmVyLgotICAgIHZpcnR1YWwgc3RhdHVzX3Qgc2V0T3V0QnVmZmVyKGNvbnN0IHNwPEVmZmVjdEJ1ZmZlckhhbEludGVyZmFjZT4mIGJ1ZmZlcik7Ci0KLSAgICAvLyBFZmZlY3QgcHJvY2VzcyBmdW5jdGlvbi4KLSAgICB2aXJ0dWFsIHN0YXR1c190IHByb2Nlc3MoKTsKLQotICAgIC8vIFByb2Nlc3MgcmV2ZXJzZSBzdHJlYW0gZnVuY3Rpb24uIFRoaXMgZnVuY3Rpb24gaXMgdXNlZCB0byBwYXNzCi0gICAgLy8gYSByZWZlcmVuY2Ugc3RyZWFtIHRvIHRoZSBlZmZlY3QgZW5naW5lLgotICAgIHZpcnR1YWwgc3RhdHVzX3QgcHJvY2Vzc1JldmVyc2UoKTsKLQotICAgIC8vIFNlbmQgYSBjb21tYW5kIGFuZCByZWNlaXZlIGEgcmVzcG9uc2UgdG8vZnJvbSBlZmZlY3QgZW5naW5lLgotICAgIHZpcnR1YWwgc3RhdHVzX3QgY29tbWFuZCh1aW50MzJfdCBjbWRDb2RlLCB1aW50MzJfdCBjbWRTaXplLCB2b2lkICpwQ21kRGF0YSwKLSAgICAgICAgICAgIHVpbnQzMl90ICpyZXBseVNpemUsIHZvaWQgKnBSZXBseURhdGEpOwotCi0gICAgLy8gUmV0dXJucyB0aGUgZWZmZWN0IGRlc2NyaXB0b3IuCi0gICAgdmlydHVhbCBzdGF0dXNfdCBnZXREZXNjcmlwdG9yKGVmZmVjdF9kZXNjcmlwdG9yX3QgKnBEZXNjcmlwdG9yKTsKLQotICAgIC8vIEZyZWUgcmVzb3VyY2VzIG9uIHRoZSByZW1vdGUgc2lkZS4KLSAgICB2aXJ0dWFsIHN0YXR1c190IGNsb3NlKCk7Ci0KLSAgICAvLyBXaGV0aGVyIGl0J3MgYSBsb2NhbCBpbXBsZW1lbnRhdGlvbi4KLSAgICB2aXJ0dWFsIGJvb2wgaXNMb2NhbCgpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9Ci0KLSAgICB1aW50NjRfdCBlZmZlY3RJZCgpIGNvbnN0IHsgcmV0dXJuIG1FZmZlY3RJZDsgfQotCi0gICAgc3RhdGljIHZvaWQgZWZmZWN0RGVzY3JpcHRvclRvSGFsKAotICAgICAgICAgICAgY29uc3QgRWZmZWN0RGVzY3JpcHRvciYgZGVzY3JpcHRvciwgZWZmZWN0X2Rlc2NyaXB0b3JfdCogaGFsRGVzY3JpcHRvcik7Ci0KLSAgcHJpdmF0ZToKLSAgICBmcmllbmQgY2xhc3MgRWZmZWN0c0ZhY3RvcnlIYWxIaWRsOwotICAgIHR5cGVkZWYgTWVzc2FnZVF1ZXVlPAotICAgICAgICBoYXJkd2FyZTo6YXVkaW86OmVmZmVjdDo6VjRfMDo6UmVzdWx0LCBoYXJkd2FyZTo6a1N5bmNocm9uaXplZFJlYWRXcml0ZT4gU3RhdHVzTVE7Ci0KLSAgICBzcDxJRWZmZWN0PiBtRWZmZWN0OwotICAgIGNvbnN0IHVpbnQ2NF90IG1FZmZlY3RJZDsKLSAgICBzcDxFZmZlY3RCdWZmZXJIYWxJbnRlcmZhY2U+IG1JbkJ1ZmZlcjsKLSAgICBzcDxFZmZlY3RCdWZmZXJIYWxJbnRlcmZhY2U+IG1PdXRCdWZmZXI7Ci0gICAgYm9vbCBtQnVmZmVyc0NoYW5nZWQ7Ci0gICAgc3RkOjp1bmlxdWVfcHRyPFN0YXR1c01RPiBtU3RhdHVzTVE7Ci0gICAgRXZlbnRGbGFnKiBtRWZHcm91cDsKLQotICAgIHN0YXRpYyBzdGF0dXNfdCBhbmFseXplUmVzdWx0KGNvbnN0IGhhcmR3YXJlOjphdWRpbzo6ZWZmZWN0OjpWNF8wOjpSZXN1bHQmIHJlc3VsdCk7Ci0gICAgc3RhdGljIHZvaWQgZWZmZWN0QnVmZmVyQ29uZmlnRnJvbUhhbCgKLSAgICAgICAgICAgIGNvbnN0IGJ1ZmZlcl9jb25maWdfdCYgaGFsQ29uZmlnLCBFZmZlY3RCdWZmZXJDb25maWcqIGNvbmZpZyk7Ci0gICAgc3RhdGljIHZvaWQgZWZmZWN0QnVmZmVyQ29uZmlnVG9IYWwoCi0gICAgICAgICAgICBjb25zdCBFZmZlY3RCdWZmZXJDb25maWcmIGNvbmZpZywgYnVmZmVyX2NvbmZpZ190KiBoYWxDb25maWcpOwotICAgIHN0YXRpYyB2b2lkIGVmZmVjdENvbmZpZ0Zyb21IYWwoY29uc3QgZWZmZWN0X2NvbmZpZ190JiBoYWxDb25maWcsIEVmZmVjdENvbmZpZyogY29uZmlnKTsKLSAgICBzdGF0aWMgdm9pZCBlZmZlY3RDb25maWdUb0hhbChjb25zdCBFZmZlY3RDb25maWcmIGNvbmZpZywgZWZmZWN0X2NvbmZpZ190KiBoYWxDb25maWcpOwotCi0gICAgLy8gQ2FuIG5vdCBiZSBjb25zdHJ1Y3RlZCBkaXJlY3RseSBieSBjbGllbnRzLgotICAgIEVmZmVjdEhhbEhpZGwoY29uc3Qgc3A8SUVmZmVjdD4mIGVmZmVjdCwgdWludDY0X3QgZWZmZWN0SWQpOwotCi0gICAgLy8gVGhlIGRlc3RydWN0b3IgYXV0b21hdGljYWxseSByZWxlYXNlcyB0aGUgZWZmZWN0LgotICAgIHZpcnR1YWwgfkVmZmVjdEhhbEhpZGwoKTsKLQotICAgIHN0YXR1c190IGdldENvbmZpZ0ltcGwodWludDMyX3QgY21kQ29kZSwgdWludDMyX3QgKnJlcGx5U2l6ZSwgdm9pZCAqcFJlcGx5RGF0YSk7Ci0gICAgc3RhdHVzX3QgcHJlcGFyZUZvclByb2Nlc3NpbmcoKTsKLSAgICBib29sIG5lZWRUb1Jlc2V0QnVmZmVycygpOwotICAgIHN0YXR1c190IHByb2Nlc3NJbXBsKHVpbnQzMl90IG1xRmxhZyk7Ci0gICAgc3RhdHVzX3Qgc2V0Q29uZmlnSW1wbCgKLSAgICAgICAgICAgIHVpbnQzMl90IGNtZENvZGUsIHVpbnQzMl90IGNtZFNpemUsIHZvaWQgKnBDbWREYXRhLAotICAgICAgICAgICAgdWludDMyX3QgKnJlcGx5U2l6ZSwgdm9pZCAqcFJlcGx5RGF0YSk7Ci0gICAgc3RhdHVzX3Qgc2V0UHJvY2Vzc0J1ZmZlcnMoKTsKLX07Ci0KLX0gLy8gbmFtZXNwYWNlIFY0XzAKLX0gLy8gbmFtZXNwYWNlIGFuZHJvaWQKLQotI2VuZGlmIC8vIEFORFJPSURfSEFSRFdBUkVfRUZGRUNUX0hBTF9ISURMXzRfMF9ICmRpZmYgLS1naXQgYS9tZWRpYS9saWJhdWRpb2hhbC80LjAvRWZmZWN0c0ZhY3RvcnlIYWxIaWRsLmNwcCBiL21lZGlhL2xpYmF1ZGlvaGFsLzQuMC9FZmZlY3RzRmFjdG9yeUhhbEhpZGwuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkZmVkNzg0Li4wMDAwMDAwCi0tLSBhL21lZGlhL2xpYmF1ZGlvaGFsLzQuMC9FZmZlY3RzRmFjdG9yeUhhbEhpZGwuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsMTUyICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTYgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAotICoKLSAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwotICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgotICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0gKgotICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLSAqCi0gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCi0gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAotICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCi0gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCi0gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KLSAqLwotCi0jZGVmaW5lIExPR19UQUcgIkVmZmVjdHNGYWN0b3J5SGFsSGlkbCIKLS8vI2RlZmluZSBMT0dfTkRFQlVHIDAKLQotI2luY2x1ZGUgPGN1dGlscy9uYXRpdmVfaGFuZGxlLmg+Ci0jaW5jbHVkZSA8bGliYXVkaW9oYWwvNC4wL0VmZmVjdHNGYWN0b3J5SGFsSGlkbC5oPgotCi0jaW5jbHVkZSAiQ29udmVyc2lvbkhlbHBlckhpZGwuaCIKLSNpbmNsdWRlICJFZmZlY3RCdWZmZXJIYWxIaWRsLmgiCi0jaW5jbHVkZSAiRWZmZWN0SGFsSGlkbC5oIgotI2luY2x1ZGUgIkhpZGxVdGlscy5oIgotCi11c2luZyA6OmFuZHJvaWQ6OmhhcmR3YXJlOjphdWRpbzo6Y29tbW9uOjpWNF8wOjpIaWRsVXRpbHM7Ci11c2luZyA6OmFuZHJvaWQ6OmhhcmR3YXJlOjphdWRpbzo6Y29tbW9uOjpWNF8wOjpVdWlkOwotdXNpbmcgOjphbmRyb2lkOjpoYXJkd2FyZTo6YXVkaW86OmVmZmVjdDo6VjRfMDo6SUVmZmVjdDsKLXVzaW5nIDo6YW5kcm9pZDo6aGFyZHdhcmU6OmF1ZGlvOjplZmZlY3Q6OlY0XzA6OlJlc3VsdDsKLXVzaW5nIDo6YW5kcm9pZDo6aGFyZHdhcmU6OlJldHVybjsKLQotbmFtZXNwYWNlIGFuZHJvaWQgewotbmFtZXNwYWNlIFY0XzAgewotCi1FZmZlY3RzRmFjdG9yeUhhbEhpZGw6OkVmZmVjdHNGYWN0b3J5SGFsSGlkbCgpIDogQ29udmVyc2lvbkhlbHBlckhpZGwoIkVmZmVjdHNGYWN0b3J5IikgewotICAgIG1FZmZlY3RzRmFjdG9yeSA9IElFZmZlY3RzRmFjdG9yeTo6Z2V0U2VydmljZSgpOwotICAgIGlmIChtRWZmZWN0c0ZhY3RvcnkgPT0gMCkgewotICAgICAgICBBTE9HRSgiRmFpbGVkIHRvIG9idGFpbiBJRWZmZWN0c0ZhY3Rvcnkgc2VydmljZSwgdGVybWluYXRpbmcgcHJvY2Vzcy4iKTsKLSAgICAgICAgZXhpdCgxKTsKLSAgICB9Ci19Ci0KLUVmZmVjdHNGYWN0b3J5SGFsSGlkbDo6fkVmZmVjdHNGYWN0b3J5SGFsSGlkbCgpIHsKLX0KLQotc3RhdHVzX3QgRWZmZWN0c0ZhY3RvcnlIYWxIaWRsOjpxdWVyeUFsbERlc2NyaXB0b3JzKCkgewotICAgIGlmIChtRWZmZWN0c0ZhY3RvcnkgPT0gMCkgcmV0dXJuIE5PX0lOSVQ7Ci0gICAgUmVzdWx0IHJldHZhbCA9IFJlc3VsdDo6Tk9UX0lOSVRJQUxJWkVEOwotICAgIFJldHVybjx2b2lkPiByZXQgPSBtRWZmZWN0c0ZhY3RvcnktPmdldEFsbERlc2NyaXB0b3JzKAotICAgICAgICAgICAgWyZdKFJlc3VsdCByLCBjb25zdCBoaWRsX3ZlYzxFZmZlY3REZXNjcmlwdG9yPiYgcmVzdWx0KSB7Ci0gICAgICAgICAgICAgICAgcmV0dmFsID0gcjsKLSAgICAgICAgICAgICAgICBpZiAocmV0dmFsID09IFJlc3VsdDo6T0spIHsKLSAgICAgICAgICAgICAgICAgICAgbUxhc3REZXNjcmlwdG9ycyA9IHJlc3VsdDsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9KTsKLSAgICBpZiAocmV0LmlzT2soKSkgewotICAgICAgICByZXR1cm4gcmV0dmFsID09IFJlc3VsdDo6T0sgPyBPSyA6IE5PX0lOSVQ7Ci0gICAgfQotICAgIG1MYXN0RGVzY3JpcHRvcnMucmVzaXplKDApOwotICAgIHJldHVybiBwcm9jZXNzUmV0dXJuKF9fRlVOQ1RJT05fXywgcmV0KTsKLX0KLQotc3RhdHVzX3QgRWZmZWN0c0ZhY3RvcnlIYWxIaWRsOjpxdWVyeU51bWJlckVmZmVjdHModWludDMyX3QgKnBOdW1FZmZlY3RzKSB7Ci0gICAgc3RhdHVzX3QgcXVlcnlSZXN1bHQgPSBxdWVyeUFsbERlc2NyaXB0b3JzKCk7Ci0gICAgaWYgKHF1ZXJ5UmVzdWx0ID09IE9LKSB7Ci0gICAgICAgICpwTnVtRWZmZWN0cyA9IG1MYXN0RGVzY3JpcHRvcnMuc2l6ZSgpOwotICAgIH0KLSAgICByZXR1cm4gcXVlcnlSZXN1bHQ7Ci19Ci0KLXN0YXR1c190IEVmZmVjdHNGYWN0b3J5SGFsSGlkbDo6Z2V0RGVzY3JpcHRvcigKLSAgICAgICAgdWludDMyX3QgaW5kZXgsIGVmZmVjdF9kZXNjcmlwdG9yX3QgKnBEZXNjcmlwdG9yKSB7Ci0gICAgLy8gVE9ETzogV2UgbmVlZCBzb21laG93IHRvIHRyYWNrIHRoZSBjaGFuZ2VzIG9uIHRoZSBzZXJ2ZXIgc2lkZQotICAgIC8vIG9yIGZpZ3VyZSBvdXQgaG93IHRvIGNvbnZlcnQgZXZlcnlib2R5IHRvIHF1ZXJ5IGFsbCB0aGUgZGVzY3JpcHRvcnMgYXQgb25jZS4KLSAgICAvLyBUT0RPOiBjaGVjayBmb3IgbnVsbHB0cgotICAgIGlmIChtTGFzdERlc2NyaXB0b3JzLnNpemUoKSA9PSAwKSB7Ci0gICAgICAgIHN0YXR1c190IHF1ZXJ5UmVzdWx0ID0gcXVlcnlBbGxEZXNjcmlwdG9ycygpOwotICAgICAgICBpZiAocXVlcnlSZXN1bHQgIT0gT0spIHJldHVybiBxdWVyeVJlc3VsdDsKLSAgICB9Ci0gICAgaWYgKGluZGV4ID49IG1MYXN0RGVzY3JpcHRvcnMuc2l6ZSgpKSByZXR1cm4gTkFNRV9OT1RfRk9VTkQ7Ci0gICAgRWZmZWN0SGFsSGlkbDo6ZWZmZWN0RGVzY3JpcHRvclRvSGFsKG1MYXN0RGVzY3JpcHRvcnNbaW5kZXhdLCBwRGVzY3JpcHRvcik7Ci0gICAgcmV0dXJuIE9LOwotfQotCi1zdGF0dXNfdCBFZmZlY3RzRmFjdG9yeUhhbEhpZGw6OmdldERlc2NyaXB0b3IoCi0gICAgICAgIGNvbnN0IGVmZmVjdF91dWlkX3QgKnBFZmZlY3RVdWlkLCBlZmZlY3RfZGVzY3JpcHRvcl90ICpwRGVzY3JpcHRvcikgewotICAgIC8vIFRPRE86IGNoZWNrIGZvciBudWxscHRyCi0gICAgaWYgKG1FZmZlY3RzRmFjdG9yeSA9PSAwKSByZXR1cm4gTk9fSU5JVDsKLSAgICBVdWlkIGhpZGxVdWlkOwotICAgIEhpZGxVdGlsczo6dXVpZEZyb21IYWwoKnBFZmZlY3RVdWlkLCAmaGlkbFV1aWQpOwotICAgIFJlc3VsdCByZXR2YWwgPSBSZXN1bHQ6Ok5PVF9JTklUSUFMSVpFRDsKLSAgICBSZXR1cm48dm9pZD4gcmV0ID0gbUVmZmVjdHNGYWN0b3J5LT5nZXREZXNjcmlwdG9yKGhpZGxVdWlkLAotICAgICAgICAgICAgWyZdKFJlc3VsdCByLCBjb25zdCBFZmZlY3REZXNjcmlwdG9yJiByZXN1bHQpIHsKLSAgICAgICAgICAgICAgICByZXR2YWwgPSByOwotICAgICAgICAgICAgICAgIGlmIChyZXR2YWwgPT0gUmVzdWx0OjpPSykgewotICAgICAgICAgICAgICAgICAgICBFZmZlY3RIYWxIaWRsOjplZmZlY3REZXNjcmlwdG9yVG9IYWwocmVzdWx0LCBwRGVzY3JpcHRvcik7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfSk7Ci0gICAgaWYgKHJldC5pc09rKCkpIHsKLSAgICAgICAgaWYgKHJldHZhbCA9PSBSZXN1bHQ6Ok9LKSByZXR1cm4gT0s7Ci0gICAgICAgIGVsc2UgaWYgKHJldHZhbCA9PSBSZXN1bHQ6OklOVkFMSURfQVJHVU1FTlRTKSByZXR1cm4gTkFNRV9OT1RfRk9VTkQ7Ci0gICAgICAgIGVsc2UgcmV0dXJuIE5PX0lOSVQ7Ci0gICAgfQotICAgIHJldHVybiBwcm9jZXNzUmV0dXJuKF9fRlVOQ1RJT05fXywgcmV0KTsKLX0KLQotc3RhdHVzX3QgRWZmZWN0c0ZhY3RvcnlIYWxIaWRsOjpjcmVhdGVFZmZlY3QoCi0gICAgICAgIGNvbnN0IGVmZmVjdF91dWlkX3QgKnBFZmZlY3RVdWlkLCBpbnQzMl90IHNlc3Npb25JZCwgaW50MzJfdCBpb0lkLAotICAgICAgICBzcDxFZmZlY3RIYWxJbnRlcmZhY2U+ICplZmZlY3QpIHsKLSAgICBpZiAobUVmZmVjdHNGYWN0b3J5ID09IDApIHJldHVybiBOT19JTklUOwotICAgIFV1aWQgaGlkbFV1aWQ7Ci0gICAgSGlkbFV0aWxzOjp1dWlkRnJvbUhhbCgqcEVmZmVjdFV1aWQsICZoaWRsVXVpZCk7Ci0gICAgUmVzdWx0IHJldHZhbCA9IFJlc3VsdDo6Tk9UX0lOSVRJQUxJWkVEOwotICAgIFJldHVybjx2b2lkPiByZXQgPSBtRWZmZWN0c0ZhY3RvcnktPmNyZWF0ZUVmZmVjdCgKLSAgICAgICAgICAgIGhpZGxVdWlkLCBzZXNzaW9uSWQsIGlvSWQsCi0gICAgICAgICAgICBbJl0oUmVzdWx0IHIsIGNvbnN0IHNwPElFZmZlY3Q+JiByZXN1bHQsIHVpbnQ2NF90IGVmZmVjdElkKSB7Ci0gICAgICAgICAgICAgICAgcmV0dmFsID0gcjsKLSAgICAgICAgICAgICAgICBpZiAocmV0dmFsID09IFJlc3VsdDo6T0spIHsKLSAgICAgICAgICAgICAgICAgICAgKmVmZmVjdCA9IG5ldyBFZmZlY3RIYWxIaWRsKHJlc3VsdCwgZWZmZWN0SWQpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0pOwotICAgIGlmIChyZXQuaXNPaygpKSB7Ci0gICAgICAgIGlmIChyZXR2YWwgPT0gUmVzdWx0OjpPSykgcmV0dXJuIE9LOwotICAgICAgICBlbHNlIGlmIChyZXR2YWwgPT0gUmVzdWx0OjpJTlZBTElEX0FSR1VNRU5UUykgcmV0dXJuIE5BTUVfTk9UX0ZPVU5EOwotICAgICAgICBlbHNlIHJldHVybiBOT19JTklUOwotICAgIH0KLSAgICByZXR1cm4gcHJvY2Vzc1JldHVybihfX0ZVTkNUSU9OX18sIHJldCk7Ci19Ci0KLXN0YXR1c190IEVmZmVjdHNGYWN0b3J5SGFsSGlkbDo6ZHVtcEVmZmVjdHMoaW50IGZkKSB7Ci0gICAgaWYgKG1FZmZlY3RzRmFjdG9yeSA9PSAwKSByZXR1cm4gTk9fSU5JVDsKLSAgICBuYXRpdmVfaGFuZGxlX3QqIGhpZGxIYW5kbGUgPSBuYXRpdmVfaGFuZGxlX2NyZWF0ZSgxLCAwKTsKLSAgICBoaWRsSGFuZGxlLT5kYXRhWzBdID0gZmQ7Ci0gICAgUmV0dXJuPHZvaWQ+IHJldCA9IG1FZmZlY3RzRmFjdG9yeS0+ZGVidWcoaGlkbEhhbmRsZSwge30gLyogb3B0aW9ucyAqLyk7Ci0gICAgbmF0aXZlX2hhbmRsZV9kZWxldGUoaGlkbEhhbmRsZSk7Ci0gICAgcmV0dXJuIHByb2Nlc3NSZXR1cm4oX19GVU5DVElPTl9fLCByZXQpOwotfQotCi1zdGF0dXNfdCBFZmZlY3RzRmFjdG9yeUhhbEhpZGw6OmFsbG9jYXRlQnVmZmVyKHNpemVfdCBzaXplLCBzcDxFZmZlY3RCdWZmZXJIYWxJbnRlcmZhY2U+KiBidWZmZXIpIHsKLSAgICByZXR1cm4gRWZmZWN0QnVmZmVySGFsSGlkbDo6YWxsb2NhdGUoc2l6ZSwgYnVmZmVyKTsKLX0KLQotc3RhdHVzX3QgRWZmZWN0c0ZhY3RvcnlIYWxIaWRsOjptaXJyb3JCdWZmZXIodm9pZCogZXh0ZXJuYWwsIHNpemVfdCBzaXplLAotICAgICAgICAgICAgICAgICAgICAgICAgICBzcDxFZmZlY3RCdWZmZXJIYWxJbnRlcmZhY2U+KiBidWZmZXIpIHsKLSAgICByZXR1cm4gRWZmZWN0QnVmZmVySGFsSGlkbDo6bWlycm9yKGV4dGVybmFsLCBzaXplLCBidWZmZXIpOwotfQotCi0KLX0gLy8gbmFtZXNwYWNlIFY0XzAKLX0gLy8gbmFtZXNwYWNlIGFuZHJvaWQKZGlmZiAtLWdpdCBhL21lZGlhL2xpYmF1ZGlvaGFsLzQuMC9TdHJlYW1IYWxIaWRsLmNwcCBiL21lZGlhL2xpYmF1ZGlvaGFsLzQuMC9TdHJlYW1IYWxIaWRsLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZGEyZjVmNi4uMDAwMDAwMAotLS0gYS9tZWRpYS9saWJhdWRpb2hhbC80LjAvU3RyZWFtSGFsSGlkbC5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSw4MjUgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNiBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0Ci0gKgotICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7Ci0gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCi0gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLSAqCi0gKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotICoKLSAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKLSAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCi0gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KLSAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKLSAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgotICovCi0KLSNkZWZpbmUgTE9HX1RBRyAiU3RyZWFtSGFsSGlkbCIKLS8vI2RlZmluZSBMT0dfTkRFQlVHIDAKLQotI2luY2x1ZGUgPGFuZHJvaWQvaGFyZHdhcmUvYXVkaW8vNC4wL0lTdHJlYW1PdXRDYWxsYmFjay5oPgotI2luY2x1ZGUgPGh3YmluZGVyL0lQQ1RocmVhZFN0YXRlLmg+Ci0jaW5jbHVkZSA8bWVkaWF1dGlscy9TY2hlZHVsaW5nUG9saWN5U2VydmljZS5oPgotI2luY2x1ZGUgPHV0aWxzL0xvZy5oPgotCi0jaW5jbHVkZSAiRGV2aWNlSGFsSGlkbC5oIgotI2luY2x1ZGUgIkVmZmVjdEhhbEhpZGwuaCIKLSNpbmNsdWRlICJTdHJlYW1IYWxIaWRsLmgiCi0jaW5jbHVkZSAiVmVyc2lvblV0aWxzLmgiCi0KLXVzaW5nIDo6YW5kcm9pZDo6aGFyZHdhcmU6OmF1ZGlvOjpjb21tb246OlY0XzA6OkF1ZGlvQ2hhbm5lbE1hc2s7Ci11c2luZyA6OmFuZHJvaWQ6OmhhcmR3YXJlOjphdWRpbzo6Y29tbW9uOjpWNF8wOjpBdWRpb0NvbnRlbnRUeXBlOwotdXNpbmcgOjphbmRyb2lkOjpoYXJkd2FyZTo6YXVkaW86OmNvbW1vbjo6VjRfMDo6QXVkaW9Gb3JtYXQ7Ci11c2luZyA6OmFuZHJvaWQ6OmhhcmR3YXJlOjphdWRpbzo6Y29tbW9uOjpWNF8wOjpBdWRpb1NvdXJjZTsKLXVzaW5nIDo6YW5kcm9pZDo6aGFyZHdhcmU6OmF1ZGlvOjpjb21tb246OlY0XzA6OkF1ZGlvVXNhZ2U7Ci11c2luZyA6OmFuZHJvaWQ6OmhhcmR3YXJlOjphdWRpbzo6Y29tbW9uOjpWNF8wOjpUaHJlYWRJbmZvOwotdXNpbmcgOjphbmRyb2lkOjpoYXJkd2FyZTo6YXVkaW86OlY0XzA6OkF1ZGlvRHJhaW47Ci11c2luZyA6OmFuZHJvaWQ6OmhhcmR3YXJlOjphdWRpbzo6VjRfMDo6SVN0cmVhbU91dENhbGxiYWNrOwotdXNpbmcgOjphbmRyb2lkOjpoYXJkd2FyZTo6YXVkaW86OlY0XzA6Ok1lc3NhZ2VRdWV1ZUZsYWdCaXRzOwotdXNpbmcgOjphbmRyb2lkOjpoYXJkd2FyZTo6YXVkaW86OlY0XzA6Ok1pY3JvcGhvbmVJbmZvOwotdXNpbmcgOjphbmRyb2lkOjpoYXJkd2FyZTo6YXVkaW86OlY0XzA6Ok1tYXBCdWZmZXJJbmZvOwotdXNpbmcgOjphbmRyb2lkOjpoYXJkd2FyZTo6YXVkaW86OlY0XzA6Ok1tYXBQb3NpdGlvbjsKLXVzaW5nIDo6YW5kcm9pZDo6aGFyZHdhcmU6OmF1ZGlvOjpWNF8wOjpQYXJhbWV0ZXJWYWx1ZTsKLXVzaW5nIDo6YW5kcm9pZDo6aGFyZHdhcmU6OmF1ZGlvOjpWNF8wOjpQbGF5YmFja1RyYWNrTWV0YWRhdGE7Ci11c2luZyA6OmFuZHJvaWQ6OmhhcmR3YXJlOjphdWRpbzo6VjRfMDo6UmVjb3JkVHJhY2tNZXRhZGF0YTsKLXVzaW5nIDo6YW5kcm9pZDo6aGFyZHdhcmU6OmF1ZGlvOjpWNF8wOjpSZXN1bHQ7Ci11c2luZyA6OmFuZHJvaWQ6OmhhcmR3YXJlOjphdWRpbzo6VjRfMDo6VGltZVNwZWM7Ci11c2luZyA6OmFuZHJvaWQ6OmhhcmR3YXJlOjpNUURlc2NyaXB0b3JTeW5jOwotdXNpbmcgOjphbmRyb2lkOjpoYXJkd2FyZTo6UmV0dXJuOwotdXNpbmcgOjphbmRyb2lkOjpoYXJkd2FyZTo6Vm9pZDsKLXVzaW5nIFJlYWRDb21tYW5kID0gOjphbmRyb2lkOjpoYXJkd2FyZTo6YXVkaW86OlY0XzA6OklTdHJlYW1Jbjo6UmVhZENvbW1hbmQ7Ci0KLW5hbWVzcGFjZSBhbmRyb2lkIHsKLW5hbWVzcGFjZSBWNF8wIHsKLQotU3RyZWFtSGFsSGlkbDo6U3RyZWFtSGFsSGlkbChJU3RyZWFtICpzdHJlYW0pCi0gICAgICAgIDogQ29udmVyc2lvbkhlbHBlckhpZGwoIlN0cmVhbSIpLAotICAgICAgICAgIG1TdHJlYW0oc3RyZWFtKSwKLSAgICAgICAgICBtSGFsVGhyZWFkUHJpb3JpdHkoSEFMX1RIUkVBRF9QUklPUklUWV9ERUZBVUxUKSwKLSAgICAgICAgICBtQ2FjaGVkQnVmZmVyU2l6ZSgwKXsKLQotICAgIC8vIEluc3RydW1lbnQgYXVkaW8gc2lnbmFsIHBvd2VyIGxvZ2dpbmcuCi0gICAgLy8gTm90ZTogVGhpcyBhc3N1bWVzIGNoYW5uZWwgbWFzaywgZm9ybWF0LCBhbmQgc2FtcGxlIHJhdGUgZG8gbm90IGNoYW5nZSBhZnRlciBjcmVhdGlvbi4KLSAgICBpZiAobVN0cmVhbSAhPSBudWxscHRyICYmIG1TdHJlYW1Qb3dlckxvZy5pc1VzZXJEZWJ1Z09yRW5nQnVpbGQoKSkgewotICAgICAgICAvLyBPYnRhaW4gYXVkaW8gcHJvcGVydGllcyAoc2VlIFN0cmVhbUhhbEhpZGw6OmdldEF1ZGlvUHJvcGVydGllcygpIGJlbG93KS4KLSAgICAgICAgUmV0dXJuPHZvaWQ+IHJldCA9IG1TdHJlYW0tPmdldEF1ZGlvUHJvcGVydGllcygKLSAgICAgICAgICAgICAgICBbJl0oYXV0byBzciwgYXV0byBtLCBhdXRvIGYpIHsKLSAgICAgICAgICAgICAgICBtU3RyZWFtUG93ZXJMb2cuaW5pdChzciwKLSAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRpY19jYXN0PGF1ZGlvX2NoYW5uZWxfbWFza190PihtKSwKLSAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRpY19jYXN0PGF1ZGlvX2Zvcm1hdF90PihmKSk7Ci0gICAgICAgICAgICB9KTsKLSAgICB9Ci19Ci0KLVN0cmVhbUhhbEhpZGw6On5TdHJlYW1IYWxIaWRsKCkgewotICAgIG1TdHJlYW0gPSBudWxscHRyOwotfQotCi1zdGF0dXNfdCBTdHJlYW1IYWxIaWRsOjpnZXRTYW1wbGVSYXRlKHVpbnQzMl90ICpyYXRlKSB7Ci0gICAgaWYgKCFtU3RyZWFtKSByZXR1cm4gTk9fSU5JVDsKLSAgICByZXR1cm4gcHJvY2Vzc1JldHVybigiZ2V0U2FtcGxlUmF0ZSIsIG1TdHJlYW0tPmdldFNhbXBsZVJhdGUoKSwgcmF0ZSk7Ci19Ci0KLXN0YXR1c190IFN0cmVhbUhhbEhpZGw6OmdldEJ1ZmZlclNpemUoc2l6ZV90ICpzaXplKSB7Ci0gICAgaWYgKCFtU3RyZWFtKSByZXR1cm4gTk9fSU5JVDsKLSAgICBzdGF0dXNfdCBzdGF0dXMgPSBwcm9jZXNzUmV0dXJuKCJnZXRCdWZmZXJTaXplIiwgbVN0cmVhbS0+Z2V0QnVmZmVyU2l6ZSgpLCBzaXplKTsKLSAgICBpZiAoc3RhdHVzID09IE9LKSB7Ci0gICAgICAgIG1DYWNoZWRCdWZmZXJTaXplID0gKnNpemU7Ci0gICAgfQotICAgIHJldHVybiBzdGF0dXM7Ci19Ci0KLXN0YXR1c190IFN0cmVhbUhhbEhpZGw6OmdldENoYW5uZWxNYXNrKGF1ZGlvX2NoYW5uZWxfbWFza190ICptYXNrKSB7Ci0gICAgaWYgKCFtU3RyZWFtKSByZXR1cm4gTk9fSU5JVDsKLSAgICByZXR1cm4gcHJvY2Vzc1JldHVybigiZ2V0Q2hhbm5lbE1hc2siLCBtU3RyZWFtLT5nZXRDaGFubmVsTWFzaygpLCBtYXNrKTsKLX0KLQotc3RhdHVzX3QgU3RyZWFtSGFsSGlkbDo6Z2V0Rm9ybWF0KGF1ZGlvX2Zvcm1hdF90ICpmb3JtYXQpIHsKLSAgICBpZiAoIW1TdHJlYW0pIHJldHVybiBOT19JTklUOwotICAgIHJldHVybiBwcm9jZXNzUmV0dXJuKCJnZXRGb3JtYXQiLCBtU3RyZWFtLT5nZXRGb3JtYXQoKSwgZm9ybWF0KTsKLX0KLQotc3RhdHVzX3QgU3RyZWFtSGFsSGlkbDo6Z2V0QXVkaW9Qcm9wZXJ0aWVzKAotICAgICAgICB1aW50MzJfdCAqc2FtcGxlUmF0ZSwgYXVkaW9fY2hhbm5lbF9tYXNrX3QgKm1hc2ssIGF1ZGlvX2Zvcm1hdF90ICpmb3JtYXQpIHsKLSAgICBpZiAoIW1TdHJlYW0pIHJldHVybiBOT19JTklUOwotICAgIFJldHVybjx2b2lkPiByZXQgPSBtU3RyZWFtLT5nZXRBdWRpb1Byb3BlcnRpZXMoCi0gICAgICAgICAgICBbJl0odWludDMyX3Qgc3IsIGF1dG8gbSwgYXV0byBmKSB7Ci0gICAgICAgICAgICAgICAgKnNhbXBsZVJhdGUgPSBzcjsKLSAgICAgICAgICAgICAgICAqbWFzayA9IHN0YXRpY19jYXN0PGF1ZGlvX2NoYW5uZWxfbWFza190PihtKTsKLSAgICAgICAgICAgICAgICAqZm9ybWF0ID0gc3RhdGljX2Nhc3Q8YXVkaW9fZm9ybWF0X3Q+KGYpOwotICAgICAgICAgICAgfSk7Ci0gICAgcmV0dXJuIHByb2Nlc3NSZXR1cm4oImdldEF1ZGlvUHJvcGVydGllcyIsIHJldCk7Ci19Ci0KLXN0YXR1c190IFN0cmVhbUhhbEhpZGw6OnNldFBhcmFtZXRlcnMoY29uc3QgU3RyaW5nOCYga3ZQYWlycykgewotICAgIGlmICghbVN0cmVhbSkgcmV0dXJuIE5PX0lOSVQ7Ci0gICAgaGlkbF92ZWM8UGFyYW1ldGVyVmFsdWU+IGhpZGxQYXJhbXM7Ci0gICAgc3RhdHVzX3Qgc3RhdHVzID0gcGFyYW1ldGVyc0Zyb21IYWwoa3ZQYWlycywgJmhpZGxQYXJhbXMpOwotICAgIGlmIChzdGF0dXMgIT0gT0spIHJldHVybiBzdGF0dXM7Ci0gICAgcmV0dXJuIHByb2Nlc3NSZXR1cm4oInNldFBhcmFtZXRlcnMiLAotICAgICAgICAgICAgICAgICAgICAgICAgIHV0aWxzOjpzZXRQYXJhbWV0ZXJzKG1TdHJlYW0sIGhpZGxQYXJhbXMsIHt9IC8qIG9wdGlvbnMgKi8pKTsKLX0KLQotc3RhdHVzX3QgU3RyZWFtSGFsSGlkbDo6Z2V0UGFyYW1ldGVycyhjb25zdCBTdHJpbmc4JiBrZXlzLCBTdHJpbmc4ICp2YWx1ZXMpIHsKLSAgICB2YWx1ZXMtPmNsZWFyKCk7Ci0gICAgaWYgKCFtU3RyZWFtKSByZXR1cm4gTk9fSU5JVDsKLSAgICBoaWRsX3ZlYzxoaWRsX3N0cmluZz4gaGlkbEtleXM7Ci0gICAgc3RhdHVzX3Qgc3RhdHVzID0ga2V5c0Zyb21IYWwoa2V5cywgJmhpZGxLZXlzKTsKLSAgICBpZiAoc3RhdHVzICE9IE9LKSByZXR1cm4gc3RhdHVzOwotICAgIFJlc3VsdCByZXR2YWw7Ci0gICAgUmV0dXJuPHZvaWQ+IHJldCA9IHV0aWxzOjpnZXRQYXJhbWV0ZXJzKAotICAgICAgICAgICAgbVN0cmVhbSwKLSAgICAgICAgICAgIHt9IC8qIGNvbnRleHQgKi8sCi0gICAgICAgICAgICBoaWRsS2V5cywKLSAgICAgICAgICAgIFsmXShSZXN1bHQgciwgY29uc3QgaGlkbF92ZWM8UGFyYW1ldGVyVmFsdWU+JiBwYXJhbWV0ZXJzKSB7Ci0gICAgICAgICAgICAgICAgcmV0dmFsID0gcjsKLSAgICAgICAgICAgICAgICBpZiAocmV0dmFsID09IFJlc3VsdDo6T0spIHsKLSAgICAgICAgICAgICAgICAgICAgcGFyYW1ldGVyc1RvSGFsKHBhcmFtZXRlcnMsIHZhbHVlcyk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfSk7Ci0gICAgcmV0dXJuIHByb2Nlc3NSZXR1cm4oImdldFBhcmFtZXRlcnMiLCByZXQsIHJldHZhbCk7Ci19Ci0KLXN0YXR1c190IFN0cmVhbUhhbEhpZGw6OmFkZEVmZmVjdChzcDxFZmZlY3RIYWxJbnRlcmZhY2U+IGVmZmVjdCkgewotICAgIGlmICghbVN0cmVhbSkgcmV0dXJuIE5PX0lOSVQ7Ci0gICAgcmV0dXJuIHByb2Nlc3NSZXR1cm4oImFkZEVmZmVjdCIsIG1TdHJlYW0tPmFkZEVmZmVjdCgKLSAgICAgICAgICAgICAgICAgICAgc3RhdGljX2Nhc3Q8RWZmZWN0SGFsSGlkbCo+KGVmZmVjdC5nZXQoKSktPmVmZmVjdElkKCkpKTsKLX0KLQotc3RhdHVzX3QgU3RyZWFtSGFsSGlkbDo6cmVtb3ZlRWZmZWN0KHNwPEVmZmVjdEhhbEludGVyZmFjZT4gZWZmZWN0KSB7Ci0gICAgaWYgKCFtU3RyZWFtKSByZXR1cm4gTk9fSU5JVDsKLSAgICByZXR1cm4gcHJvY2Vzc1JldHVybigicmVtb3ZlRWZmZWN0IiwgbVN0cmVhbS0+cmVtb3ZlRWZmZWN0KAotICAgICAgICAgICAgICAgICAgICBzdGF0aWNfY2FzdDxFZmZlY3RIYWxIaWRsKj4oZWZmZWN0LmdldCgpKS0+ZWZmZWN0SWQoKSkpOwotfQotCi1zdGF0dXNfdCBTdHJlYW1IYWxIaWRsOjpzdGFuZGJ5KCkgewotICAgIGlmICghbVN0cmVhbSkgcmV0dXJuIE5PX0lOSVQ7Ci0gICAgcmV0dXJuIHByb2Nlc3NSZXR1cm4oInN0YW5kYnkiLCBtU3RyZWFtLT5zdGFuZGJ5KCkpOwotfQotCi1zdGF0dXNfdCBTdHJlYW1IYWxIaWRsOjpkdW1wKGludCBmZCkgewotICAgIGlmICghbVN0cmVhbSkgcmV0dXJuIE5PX0lOSVQ7Ci0gICAgbmF0aXZlX2hhbmRsZV90KiBoaWRsSGFuZGxlID0gbmF0aXZlX2hhbmRsZV9jcmVhdGUoMSwgMCk7Ci0gICAgaGlkbEhhbmRsZS0+ZGF0YVswXSA9IGZkOwotICAgIFJldHVybjx2b2lkPiByZXQgPSBtU3RyZWFtLT5kZWJ1ZyhoaWRsSGFuZGxlLCB7fSAvKiBvcHRpb25zICovKTsKLSAgICBuYXRpdmVfaGFuZGxlX2RlbGV0ZShoaWRsSGFuZGxlKTsKLSAgICBtU3RyZWFtUG93ZXJMb2cuZHVtcChmZCk7Ci0gICAgcmV0dXJuIHByb2Nlc3NSZXR1cm4oImR1bXAiLCByZXQpOwotfQotCi1zdGF0dXNfdCBTdHJlYW1IYWxIaWRsOjpzdGFydCgpIHsKLSAgICBpZiAoIW1TdHJlYW0pIHJldHVybiBOT19JTklUOwotICAgIHJldHVybiBwcm9jZXNzUmV0dXJuKCJzdGFydCIsIG1TdHJlYW0tPnN0YXJ0KCkpOwotfQotCi1zdGF0dXNfdCBTdHJlYW1IYWxIaWRsOjpzdG9wKCkgewotICAgIGlmICghbVN0cmVhbSkgcmV0dXJuIE5PX0lOSVQ7Ci0gICAgcmV0dXJuIHByb2Nlc3NSZXR1cm4oInN0b3AiLCBtU3RyZWFtLT5zdG9wKCkpOwotfQotCi1zdGF0dXNfdCBTdHJlYW1IYWxIaWRsOjpjcmVhdGVNbWFwQnVmZmVyKGludDMyX3QgbWluU2l6ZUZyYW1lcywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgYXVkaW9fbW1hcF9idWZmZXJfaW5mbyAqaW5mbykgewotICAgIFJlc3VsdCByZXR2YWw7Ci0gICAgUmV0dXJuPHZvaWQ+IHJldCA9IG1TdHJlYW0tPmNyZWF0ZU1tYXBCdWZmZXIoCi0gICAgICAgICAgICBtaW5TaXplRnJhbWVzLAotICAgICAgICAgICAgWyZdKFJlc3VsdCByLCBjb25zdCBNbWFwQnVmZmVySW5mbyYgaGlkbEluZm8pIHsKLSAgICAgICAgICAgICAgICByZXR2YWwgPSByOwotICAgICAgICAgICAgICAgIGlmIChyZXR2YWwgPT0gUmVzdWx0OjpPSykgewotICAgICAgICAgICAgICAgICAgICBjb25zdCBuYXRpdmVfaGFuZGxlICpoYW5kbGUgPSBoaWRsSW5mby5zaGFyZWRNZW1vcnkuaGFuZGxlKCk7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChoYW5kbGUtPm51bUZkcyA+IDApIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGluZm8tPnNoYXJlZF9tZW1vcnlfZmQgPSBoYW5kbGUtPmRhdGFbMF07Ci0gICAgICAgICAgICAgICAgICAgICAgICBpbmZvLT5mbGFncyA9IGF1ZGlvX21tYXBfYnVmZmVyX2ZsYWcoaGlkbEluZm8uZmxhZ3MpOwotICAgICAgICAgICAgICAgICAgICAgICAgaW5mby0+YnVmZmVyX3NpemVfZnJhbWVzID0gaGlkbEluZm8uYnVmZmVyU2l6ZUZyYW1lczsKLSAgICAgICAgICAgICAgICAgICAgICAgIC8vIE5lZ2F0aXZlIGJ1ZmZlciBzaXplIGZyYW1lIHdhcyBhIGhhY2sgaW4gTyBhbmQgUCB0bwotICAgICAgICAgICAgICAgICAgICAgICAgLy8gaW5kaWNhdGUgdGhhdCB0aGUgYnVmZmVyIGlzIHNoYXJlYWJsZSB0byBhcHBsaWNhdGlvbnMKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpbmZvLT5idWZmZXJfc2l6ZV9mcmFtZXMgPCAwKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5mby0+YnVmZmVyX3NpemVfZnJhbWVzICo9IC0xOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluZm8tPmZsYWdzID0gYXVkaW9fbW1hcF9idWZmZXJfZmxhZygKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluZm8tPmZsYWdzIHwgQVVESU9fTU1BUF9BUFBMSUNBVElPTl9TSEFSRUFCTEUpOwotICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgaW5mby0+YnVyc3Rfc2l6ZV9mcmFtZXMgPSBoaWRsSW5mby5idXJzdFNpemVGcmFtZXM7Ci0gICAgICAgICAgICAgICAgICAgICAgICAvLyBpbmZvLT5zaGFyZWRfbWVtb3J5X2FkZHJlc3MgaXMgbm90IG5lZWRlZCBpbiBISURMIGNvbnRleHQKLSAgICAgICAgICAgICAgICAgICAgICAgIGluZm8tPnNoYXJlZF9tZW1vcnlfYWRkcmVzcyA9IE5VTEw7Ci0gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICByZXR2YWwgPSBSZXN1bHQ6Ok5PVF9JTklUSUFMSVpFRDsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0pOwotICAgIHJldHVybiBwcm9jZXNzUmV0dXJuKCJjcmVhdGVNbWFwQnVmZmVyIiwgcmV0LCByZXR2YWwpOwotfQotCi1zdGF0dXNfdCBTdHJlYW1IYWxIaWRsOjpnZXRNbWFwUG9zaXRpb24oc3RydWN0IGF1ZGlvX21tYXBfcG9zaXRpb24gKnBvc2l0aW9uKSB7Ci0gICAgUmVzdWx0IHJldHZhbDsKLSAgICBSZXR1cm48dm9pZD4gcmV0ID0gbVN0cmVhbS0+Z2V0TW1hcFBvc2l0aW9uKAotICAgICAgICAgICAgWyZdKFJlc3VsdCByLCBjb25zdCBNbWFwUG9zaXRpb24mIGhpZGxQb3NpdGlvbikgewotICAgICAgICAgICAgICAgIHJldHZhbCA9IHI7Ci0gICAgICAgICAgICAgICAgaWYgKHJldHZhbCA9PSBSZXN1bHQ6Ok9LKSB7Ci0gICAgICAgICAgICAgICAgICAgIHBvc2l0aW9uLT50aW1lX25hbm9zZWNvbmRzID0gaGlkbFBvc2l0aW9uLnRpbWVOYW5vc2Vjb25kczsKLSAgICAgICAgICAgICAgICAgICAgcG9zaXRpb24tPnBvc2l0aW9uX2ZyYW1lcyA9IGhpZGxQb3NpdGlvbi5wb3NpdGlvbkZyYW1lczsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9KTsKLSAgICByZXR1cm4gcHJvY2Vzc1JldHVybigiZ2V0TW1hcFBvc2l0aW9uIiwgcmV0LCByZXR2YWwpOwotfQotCi1zdGF0dXNfdCBTdHJlYW1IYWxIaWRsOjpzZXRIYWxUaHJlYWRQcmlvcml0eShpbnQgcHJpb3JpdHkpIHsKLSAgICBtSGFsVGhyZWFkUHJpb3JpdHkgPSBwcmlvcml0eTsKLSAgICByZXR1cm4gT0s7Ci19Ci0KLXN0YXR1c190IFN0cmVhbUhhbEhpZGw6OmdldENhY2hlZEJ1ZmZlclNpemUoc2l6ZV90ICpzaXplKSB7Ci0gICAgaWYgKG1DYWNoZWRCdWZmZXJTaXplICE9IDApIHsKLSAgICAgICAgKnNpemUgPSBtQ2FjaGVkQnVmZmVyU2l6ZTsKLSAgICAgICAgcmV0dXJuIE9LOwotICAgIH0KLSAgICByZXR1cm4gZ2V0QnVmZmVyU2l6ZShzaXplKTsKLX0KLQotYm9vbCBTdHJlYW1IYWxIaWRsOjpyZXF1ZXN0SGFsVGhyZWFkUHJpb3JpdHkocGlkX3QgdGhyZWFkUGlkLCBwaWRfdCB0aHJlYWRJZCkgewotICAgIGlmIChtSGFsVGhyZWFkUHJpb3JpdHkgPT0gSEFMX1RIUkVBRF9QUklPUklUWV9ERUZBVUxUKSB7Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLSAgICBpbnQgZXJyID0gcmVxdWVzdFByaW9yaXR5KAotICAgICAgICAgICAgdGhyZWFkUGlkLCB0aHJlYWRJZCwKLSAgICAgICAgICAgIG1IYWxUaHJlYWRQcmlvcml0eSwgZmFsc2UgLyppc0ZvckFwcCovLCB0cnVlIC8qYXN5bmNocm9ub3VzKi8pOwotICAgIEFMT0dFX0lGKGVyciwgImZhaWxlZCB0byBzZXQgcHJpb3JpdHkgJWQgZm9yIHBpZCAlZCB0aWQgJWQ7IGVycm9yICVkIiwKLSAgICAgICAgICAgIG1IYWxUaHJlYWRQcmlvcml0eSwgdGhyZWFkUGlkLCB0aHJlYWRJZCwgZXJyKTsKLSAgICAvLyBBdWRpbyB3aWxsIHN0aWxsIHdvcmssIGJ1dCBsYXRlbmN5IHdpbGwgYmUgaGlnaGVyIGFuZCBzb21ldGltZXMgdW5hY2NlcHRhYmxlLgotICAgIHJldHVybiBlcnIgPT0gMDsKLX0KLQotbmFtZXNwYWNlIHsKLQotLyogTm90ZXMgb24gY2FsbGJhY2sgb3duZXJzaGlwLgotCi1UaGlzIGlzIGhvdyAoSHcpQmluZGVyIG93bmVyc2hpcCBtb2RlbCBsb29rcyBsaWtlLiBUaGUgc2VydmVyIGltcGxlbWVudGF0aW9uCi1pcyBvd25lZCBieSBCaW5kZXIgZnJhbWV3b3JrICh2aWEgc3A8PikuIFByb3hpZXMgYXJlIG93bmVkIGJ5IGNsaWVudHMuCi1XaGVuIHRoZSBsYXN0IHByb3h5IGRpc2FwcGVhcnMsIEJpbmRlciBmcmFtZXdvcmsgcmVsZWFzZXMgdGhlIHNlcnZlciBpbXBsLgotCi1UaHVzLCBpdCBpcyBub3QgbmVlZGVkIHRvIGtlZXAgYW55IHJlZmVyZW5jZXMgdG8gU3RyZWFtT3V0Q2FsbGJhY2sgKHRoaXMgaXMKLXRoZSBzZXJ2ZXIgaW1wbCkgLS0gaXQgd2lsbCBsaXZlIGFzIGxvbmcgYXMgSEFMIHNlcnZlciBob2xkcyBhIHN0cm9uZyByZWYgdG8KLUlTdHJlYW1PdXRDYWxsYmFjayBwcm94eS4gV2UgY2xlYXIgdGhhdCByZWZlcmVuY2UgYnkgY2FsbGluZyAnY2xlYXJDYWxsYmFjaycKLWZyb20gdGhlIGRlc3RydWN0b3Igb2YgU3RyZWFtT3V0SGFsSGlkbC4KLQotVGhlIGNhbGxiYWNrIG9ubHkga2VlcHMgYSB3ZWFrIHJlZmVyZW5jZSB0byB0aGUgc3RyZWFtLiBUaGUgc3RyZWFtIGlzIG93bmVkCi1ieSBBdWRpb0ZsaW5nZXIuCi0KLSovCi0KLXN0cnVjdCBTdHJlYW1PdXRDYWxsYmFjayA6IHB1YmxpYyBJU3RyZWFtT3V0Q2FsbGJhY2sgewotICAgIFN0cmVhbU91dENhbGxiYWNrKGNvbnN0IHdwPFN0cmVhbU91dEhhbEhpZGw+JiBzdHJlYW0pIDogbVN0cmVhbShzdHJlYW0pIHt9Ci0KLSAgICAvLyBJU3RyZWFtT3V0Q2FsbGJhY2sgaW1wbGVtZW50YXRpb24KLSAgICBSZXR1cm48dm9pZD4gb25Xcml0ZVJlYWR5KCkgIG92ZXJyaWRlIHsKLSAgICAgICAgc3A8U3RyZWFtT3V0SGFsSGlkbD4gc3RyZWFtID0gbVN0cmVhbS5wcm9tb3RlKCk7Ci0gICAgICAgIGlmIChzdHJlYW0gIT0gMCkgewotICAgICAgICAgICAgc3RyZWFtLT5vbldyaXRlUmVhZHkoKTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gVm9pZCgpOwotICAgIH0KLQotICAgIFJldHVybjx2b2lkPiBvbkRyYWluUmVhZHkoKSAgb3ZlcnJpZGUgewotICAgICAgICBzcDxTdHJlYW1PdXRIYWxIaWRsPiBzdHJlYW0gPSBtU3RyZWFtLnByb21vdGUoKTsKLSAgICAgICAgaWYgKHN0cmVhbSAhPSAwKSB7Ci0gICAgICAgICAgICBzdHJlYW0tPm9uRHJhaW5SZWFkeSgpOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiBWb2lkKCk7Ci0gICAgfQotCi0gICAgUmV0dXJuPHZvaWQ+IG9uRXJyb3IoKSAgb3ZlcnJpZGUgewotICAgICAgICBzcDxTdHJlYW1PdXRIYWxIaWRsPiBzdHJlYW0gPSBtU3RyZWFtLnByb21vdGUoKTsKLSAgICAgICAgaWYgKHN0cmVhbSAhPSAwKSB7Ci0gICAgICAgICAgICBzdHJlYW0tPm9uRXJyb3IoKTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gVm9pZCgpOwotICAgIH0KLQotICBwcml2YXRlOgotICAgIHdwPFN0cmVhbU91dEhhbEhpZGw+IG1TdHJlYW07Ci19OwotCi19ICAvLyBuYW1lc3BhY2UKLQotU3RyZWFtT3V0SGFsSGlkbDo6U3RyZWFtT3V0SGFsSGlkbChjb25zdCBzcDxJU3RyZWFtT3V0PiYgc3RyZWFtKQotICAgICAgICA6IFN0cmVhbUhhbEhpZGwoc3RyZWFtLmdldCgpKSwgbVN0cmVhbShzdHJlYW0pLCBtV3JpdGVyQ2xpZW50KDApLCBtRWZHcm91cChudWxscHRyKSB7Ci19Ci0KLVN0cmVhbU91dEhhbEhpZGw6On5TdHJlYW1PdXRIYWxIaWRsKCkgewotICAgIGlmIChtU3RyZWFtICE9IDApIHsKLSAgICAgICAgaWYgKG1DYWxsYmFjay51bnNhZmVfZ2V0KCkpIHsKLSAgICAgICAgICAgIHByb2Nlc3NSZXR1cm4oImNsZWFyQ2FsbGJhY2siLCBtU3RyZWFtLT5jbGVhckNhbGxiYWNrKCkpOwotICAgICAgICB9Ci0gICAgICAgIHByb2Nlc3NSZXR1cm4oImNsb3NlIiwgbVN0cmVhbS0+Y2xvc2UoKSk7Ci0gICAgICAgIG1TdHJlYW0uY2xlYXIoKTsKLSAgICB9Ci0gICAgbUNhbGxiYWNrLmNsZWFyKCk7Ci0gICAgaGFyZHdhcmU6OklQQ1RocmVhZFN0YXRlOjpzZWxmKCktPmZsdXNoQ29tbWFuZHMoKTsKLSAgICBpZiAobUVmR3JvdXApIHsKLSAgICAgICAgRXZlbnRGbGFnOjpkZWxldGVFdmVudEZsYWcoJm1FZkdyb3VwKTsKLSAgICB9Ci19Ci0KLXN0YXR1c190IFN0cmVhbU91dEhhbEhpZGw6OmdldEZyYW1lU2l6ZShzaXplX3QgKnNpemUpIHsKLSAgICBpZiAobVN0cmVhbSA9PSAwKSByZXR1cm4gTk9fSU5JVDsKLSAgICByZXR1cm4gcHJvY2Vzc1JldHVybigiZ2V0RnJhbWVTaXplIiwgbVN0cmVhbS0+Z2V0RnJhbWVTaXplKCksIHNpemUpOwotfQotCi1zdGF0dXNfdCBTdHJlYW1PdXRIYWxIaWRsOjpnZXRMYXRlbmN5KHVpbnQzMl90ICpsYXRlbmN5KSB7Ci0gICAgaWYgKG1TdHJlYW0gPT0gMCkgcmV0dXJuIE5PX0lOSVQ7Ci0gICAgaWYgKG1Xcml0ZXJDbGllbnQgPT0gZ2V0dGlkKCkgJiYgbUNvbW1hbmRNUSkgewotICAgICAgICByZXR1cm4gY2FsbFdyaXRlclRocmVhZCgKLSAgICAgICAgICAgICAgICBXcml0ZUNvbW1hbmQ6OkdFVF9MQVRFTkNZLCAiZ2V0TGF0ZW5jeSIsIG51bGxwdHIsIDAsCi0gICAgICAgICAgICAgICAgWyZdKGNvbnN0IFdyaXRlU3RhdHVzJiB3cml0ZVN0YXR1cykgewotICAgICAgICAgICAgICAgICAgICAqbGF0ZW5jeSA9IHdyaXRlU3RhdHVzLnJlcGx5LmxhdGVuY3lNczsKLSAgICAgICAgICAgICAgICB9KTsKLSAgICB9IGVsc2UgewotICAgICAgICByZXR1cm4gcHJvY2Vzc1JldHVybigiZ2V0TGF0ZW5jeSIsIG1TdHJlYW0tPmdldExhdGVuY3koKSwgbGF0ZW5jeSk7Ci0gICAgfQotfQotCi1zdGF0dXNfdCBTdHJlYW1PdXRIYWxIaWRsOjpzZXRWb2x1bWUoZmxvYXQgbGVmdCwgZmxvYXQgcmlnaHQpIHsKLSAgICBpZiAobVN0cmVhbSA9PSAwKSByZXR1cm4gTk9fSU5JVDsKLSAgICByZXR1cm4gcHJvY2Vzc1JldHVybigic2V0Vm9sdW1lIiwgbVN0cmVhbS0+c2V0Vm9sdW1lKGxlZnQsIHJpZ2h0KSk7Ci19Ci0KLXN0YXR1c190IFN0cmVhbU91dEhhbEhpZGw6OndyaXRlKGNvbnN0IHZvaWQgKmJ1ZmZlciwgc2l6ZV90IGJ5dGVzLCBzaXplX3QgKndyaXR0ZW4pIHsKLSAgICBpZiAobVN0cmVhbSA9PSAwKSByZXR1cm4gTk9fSU5JVDsKLSAgICAqd3JpdHRlbiA9IDA7Ci0KLSAgICBpZiAoYnl0ZXMgPT0gMCAmJiAhbURhdGFNUSkgewotICAgICAgICAvLyBDYW4ndCBkZXRlcm1pbmUgdGhlIHNpemUgZm9yIHRoZSBNUSBidWZmZXIuIFdhaXQgZm9yIGEgbm9uLWVtcHR5IHdyaXRlIHJlcXVlc3QuCi0gICAgICAgIEFMT0dXX0lGKG1DYWxsYmFjay51bnNhZmVfZ2V0KCksICJGaXJzdCBjYWxsIHRvIGFzeW5jIHdyaXRlIHdpdGggMCBieXRlcyIpOwotICAgICAgICByZXR1cm4gT0s7Ci0gICAgfQotCi0gICAgc3RhdHVzX3Qgc3RhdHVzOwotICAgIGlmICghbURhdGFNUSkgewotICAgICAgICAvLyBJbiBjYXNlIGlmIHBsYXliYWNrIHN0YXJ0cyBjbG9zZSB0byB0aGUgZW5kIG9mIGEgY29tcHJlc3NlZCB0cmFjaywgdGhlIGJ5dGVzCi0gICAgICAgIC8vIHRoYXQgbmVlZCB0byBiZSB3cml0dGVuIGlzIGxlc3MgdGhhbiB0aGUgYWN0dWFsIGJ1ZmZlciBzaXplLiBOZWVkIHRvIHVzZQotICAgICAgICAvLyBmdWxsIGJ1ZmZlciBzaXplIGZvciB0aGUgTVEgc2luY2Ugb3RoZXJ3aXNlIGFmdGVyIHNlZWtpbmcgYmFjayB0byB0aGUgbWlkZGxlCi0gICAgICAgIC8vIGRhdGEgd2lsbCBiZSB0cnVuY2F0ZWQuCi0gICAgICAgIHNpemVfdCBidWZmZXJTaXplOwotICAgICAgICBpZiAoKHN0YXR1cyA9IGdldENhY2hlZEJ1ZmZlclNpemUoJmJ1ZmZlclNpemUpKSAhPSBPSykgewotICAgICAgICAgICAgcmV0dXJuIHN0YXR1czsKLSAgICAgICAgfQotICAgICAgICBpZiAoYnl0ZXMgPiBidWZmZXJTaXplKSBidWZmZXJTaXplID0gYnl0ZXM7Ci0gICAgICAgIGlmICgoc3RhdHVzID0gcHJlcGFyZUZvcldyaXRpbmcoYnVmZmVyU2l6ZSkpICE9IE9LKSB7Ci0gICAgICAgICAgICByZXR1cm4gc3RhdHVzOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgc3RhdHVzID0gY2FsbFdyaXRlclRocmVhZCgKLSAgICAgICAgICAgIFdyaXRlQ29tbWFuZDo6V1JJVEUsICJ3cml0ZSIsIHN0YXRpY19jYXN0PGNvbnN0IHVpbnQ4X3QqPihidWZmZXIpLCBieXRlcywKLSAgICAgICAgICAgIFsmXSAoY29uc3QgV3JpdGVTdGF0dXMmIHdyaXRlU3RhdHVzKSB7Ci0gICAgICAgICAgICAgICAgKndyaXR0ZW4gPSB3cml0ZVN0YXR1cy5yZXBseS53cml0dGVuOwotICAgICAgICAgICAgICAgIC8vIERpYWdub3N0aWNzIG9mIHRoZSBjYXVzZSBvZiBiLzM1ODEzMTEzLgotICAgICAgICAgICAgICAgIEFMT0dFX0lGKCp3cml0dGVuID4gYnl0ZXMsCi0gICAgICAgICAgICAgICAgICAgICAgICAiaGFsIHJlcG9ydHMgbW9yZSBieXRlcyB3cml0dGVuIHRoYW4gYXNrZWQgZm9yOiAlbGxkID4gJWxsZCIsCi0gICAgICAgICAgICAgICAgICAgICAgICAobG9uZyBsb25nKSp3cml0dGVuLCAobG9uZyBsb25nKWJ5dGVzKTsKLSAgICAgICAgICAgIH0pOwotICAgIG1TdHJlYW1Qb3dlckxvZy5sb2coYnVmZmVyLCAqd3JpdHRlbik7Ci0gICAgcmV0dXJuIHN0YXR1czsKLX0KLQotc3RhdHVzX3QgU3RyZWFtT3V0SGFsSGlkbDo6Y2FsbFdyaXRlclRocmVhZCgKLSAgICAgICAgV3JpdGVDb21tYW5kIGNtZCwgY29uc3QgY2hhciogY21kTmFtZSwKLSAgICAgICAgY29uc3QgdWludDhfdCogZGF0YSwgc2l6ZV90IGRhdGFTaXplLCBTdHJlYW1PdXRIYWxIaWRsOjpXcml0ZXJDYWxsYmFjayBjYWxsYmFjaykgewotICAgIGlmICghbUNvbW1hbmRNUS0+d3JpdGUoJmNtZCkpIHsKLSAgICAgICAgQUxPR0UoImNvbW1hbmQgbWVzc2FnZSBxdWV1ZSB3cml0ZSBmYWlsZWQgZm9yIFwiJXNcIiIsIGNtZE5hbWUpOwotICAgICAgICByZXR1cm4gLUVBR0FJTjsKLSAgICB9Ci0gICAgaWYgKGRhdGEgIT0gbnVsbHB0cikgewotICAgICAgICBzaXplX3QgYXZhaWxhYmxlVG9Xcml0ZSA9IG1EYXRhTVEtPmF2YWlsYWJsZVRvV3JpdGUoKTsKLSAgICAgICAgaWYgKGRhdGFTaXplID4gYXZhaWxhYmxlVG9Xcml0ZSkgewotICAgICAgICAgICAgQUxPR1coInRydW5jYXRpbmcgd3JpdGUgZGF0YSBmcm9tICVsbGQgdG8gJWxsZCBkdWUgdG8gaW5zdWZmaWNpZW50IGRhdGEgcXVldWUgc3BhY2UiLAotICAgICAgICAgICAgICAgICAgICAobG9uZyBsb25nKWRhdGFTaXplLCAobG9uZyBsb25nKWF2YWlsYWJsZVRvV3JpdGUpOwotICAgICAgICAgICAgZGF0YVNpemUgPSBhdmFpbGFibGVUb1dyaXRlOwotICAgICAgICB9Ci0gICAgICAgIGlmICghbURhdGFNUS0+d3JpdGUoZGF0YSwgZGF0YVNpemUpKSB7Ci0gICAgICAgICAgICBBTE9HRSgiZGF0YSBtZXNzYWdlIHF1ZXVlIHdyaXRlIGZhaWxlZCBmb3IgXCIlc1wiIiwgY21kTmFtZSk7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgbUVmR3JvdXAtPndha2Uoc3RhdGljX2Nhc3Q8dWludDMyX3Q+KE1lc3NhZ2VRdWV1ZUZsYWdCaXRzOjpOT1RfRU1QVFkpKTsKLQotICAgIC8vIFRPRE86IFJlbW92ZSBtYW51YWwgZXZlbnQgZmxhZyBoYW5kbGluZyBvbmNlIGJsb2NraW5nIE1RIGlzIGltcGxlbWVudGVkLiBiLzMzODE1NDIyCi0gICAgdWludDMyX3QgZWZTdGF0ZSA9IDA7Ci1yZXRyeToKLSAgICBzdGF0dXNfdCByZXQgPSBtRWZHcm91cC0+d2FpdChzdGF0aWNfY2FzdDx1aW50MzJfdD4oTWVzc2FnZVF1ZXVlRmxhZ0JpdHM6Ok5PVF9GVUxMKSwgJmVmU3RhdGUpOwotICAgIGlmIChlZlN0YXRlICYgc3RhdGljX2Nhc3Q8dWludDMyX3Q+KE1lc3NhZ2VRdWV1ZUZsYWdCaXRzOjpOT1RfRlVMTCkpIHsKLSAgICAgICAgV3JpdGVTdGF0dXMgd3JpdGVTdGF0dXM7Ci0gICAgICAgIHdyaXRlU3RhdHVzLnJldHZhbCA9IFJlc3VsdDo6Tk9UX0lOSVRJQUxJWkVEOwotICAgICAgICBpZiAoIW1TdGF0dXNNUS0+cmVhZCgmd3JpdGVTdGF0dXMpKSB7Ci0gICAgICAgICAgICBBTE9HRSgic3RhdHVzIG1lc3NhZ2UgcmVhZCBmYWlsZWQgZm9yIFwiJXNcIiIsIGNtZE5hbWUpOwotICAgICAgICB9Ci0gICAgICAgIGlmICh3cml0ZVN0YXR1cy5yZXR2YWwgPT0gUmVzdWx0OjpPSykgewotICAgICAgICAgICAgcmV0ID0gT0s7Ci0gICAgICAgICAgICBjYWxsYmFjayh3cml0ZVN0YXR1cyk7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICByZXQgPSBwcm9jZXNzUmV0dXJuKGNtZE5hbWUsIHdyaXRlU3RhdHVzLnJldHZhbCk7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIHJldDsKLSAgICB9Ci0gICAgaWYgKHJldCA9PSAtRUFHQUlOIHx8IHJldCA9PSAtRUlOVFIpIHsKLSAgICAgICAgLy8gU3B1cmlvdXMgd2FrZXVwLiBUaGlzIG5vcm1hbGx5IHJldHJpZXMgbm8gbW9yZSB0aGFuIG9uY2UuCi0gICAgICAgIGdvdG8gcmV0cnk7Ci0gICAgfQotICAgIHJldHVybiByZXQ7Ci19Ci0KLXN0YXR1c190IFN0cmVhbU91dEhhbEhpZGw6OnByZXBhcmVGb3JXcml0aW5nKHNpemVfdCBidWZmZXJTaXplKSB7Ci0gICAgc3RkOjp1bmlxdWVfcHRyPENvbW1hbmRNUT4gdGVtcENvbW1hbmRNUTsKLSAgICBzdGQ6OnVuaXF1ZV9wdHI8RGF0YU1RPiB0ZW1wRGF0YU1ROwotICAgIHN0ZDo6dW5pcXVlX3B0cjxTdGF0dXNNUT4gdGVtcFN0YXR1c01ROwotICAgIFJlc3VsdCByZXR2YWw7Ci0gICAgcGlkX3QgaGFsVGhyZWFkUGlkLCBoYWxUaHJlYWRUaWQ7Ci0gICAgUmV0dXJuPHZvaWQ+IHJldCA9IG1TdHJlYW0tPnByZXBhcmVGb3JXcml0aW5nKAotICAgICAgICAgICAgMSwgYnVmZmVyU2l6ZSwKLSAgICAgICAgICAgIFsmXShSZXN1bHQgciwKLSAgICAgICAgICAgICAgICAgICAgY29uc3QgQ29tbWFuZE1ROjpEZXNjcmlwdG9yJiBjb21tYW5kTVEsCi0gICAgICAgICAgICAgICAgICAgIGNvbnN0IERhdGFNUTo6RGVzY3JpcHRvciYgZGF0YU1RLAotICAgICAgICAgICAgICAgICAgICBjb25zdCBTdGF0dXNNUTo6RGVzY3JpcHRvciYgc3RhdHVzTVEsCi0gICAgICAgICAgICAgICAgICAgIGNvbnN0IFRocmVhZEluZm8mIGhhbFRocmVhZEluZm8pIHsKLSAgICAgICAgICAgICAgICByZXR2YWwgPSByOwotICAgICAgICAgICAgICAgIGlmIChyZXR2YWwgPT0gUmVzdWx0OjpPSykgewotICAgICAgICAgICAgICAgICAgICB0ZW1wQ29tbWFuZE1RLnJlc2V0KG5ldyBDb21tYW5kTVEoY29tbWFuZE1RKSk7Ci0gICAgICAgICAgICAgICAgICAgIHRlbXBEYXRhTVEucmVzZXQobmV3IERhdGFNUShkYXRhTVEpKTsKLSAgICAgICAgICAgICAgICAgICAgdGVtcFN0YXR1c01RLnJlc2V0KG5ldyBTdGF0dXNNUShzdGF0dXNNUSkpOwotICAgICAgICAgICAgICAgICAgICBpZiAodGVtcERhdGFNUS0+aXNWYWxpZCgpICYmIHRlbXBEYXRhTVEtPmdldEV2ZW50RmxhZ1dvcmQoKSkgewotICAgICAgICAgICAgICAgICAgICAgICAgRXZlbnRGbGFnOjpjcmVhdGVFdmVudEZsYWcodGVtcERhdGFNUS0+Z2V0RXZlbnRGbGFnV29yZCgpLCAmbUVmR3JvdXApOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIGhhbFRocmVhZFBpZCA9IGhhbFRocmVhZEluZm8ucGlkOwotICAgICAgICAgICAgICAgICAgICBoYWxUaHJlYWRUaWQgPSBoYWxUaHJlYWRJbmZvLnRpZDsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9KTsKLSAgICBpZiAoIXJldC5pc09rKCkgfHwgcmV0dmFsICE9IFJlc3VsdDo6T0spIHsKLSAgICAgICAgcmV0dXJuIHByb2Nlc3NSZXR1cm4oInByZXBhcmVGb3JXcml0aW5nIiwgcmV0LCByZXR2YWwpOwotICAgIH0KLSAgICBpZiAoIXRlbXBDb21tYW5kTVEgfHwgIXRlbXBDb21tYW5kTVEtPmlzVmFsaWQoKSB8fAotICAgICAgICAgICAgIXRlbXBEYXRhTVEgfHwgIXRlbXBEYXRhTVEtPmlzVmFsaWQoKSB8fAotICAgICAgICAgICAgIXRlbXBTdGF0dXNNUSB8fCAhdGVtcFN0YXR1c01RLT5pc1ZhbGlkKCkgfHwKLSAgICAgICAgICAgICFtRWZHcm91cCkgewotICAgICAgICBBTE9HRV9JRighdGVtcENvbW1hbmRNUSwgIkZhaWxlZCB0byBvYnRhaW4gY29tbWFuZCBtZXNzYWdlIHF1ZXVlIGZvciB3cml0aW5nIik7Ci0gICAgICAgIEFMT0dFX0lGKHRlbXBDb21tYW5kTVEgJiYgIXRlbXBDb21tYW5kTVEtPmlzVmFsaWQoKSwKLSAgICAgICAgICAgICAgICAiQ29tbWFuZCBtZXNzYWdlIHF1ZXVlIGZvciB3cml0aW5nIGlzIGludmFsaWQiKTsKLSAgICAgICAgQUxPR0VfSUYoIXRlbXBEYXRhTVEsICJGYWlsZWQgdG8gb2J0YWluIGRhdGEgbWVzc2FnZSBxdWV1ZSBmb3Igd3JpdGluZyIpOwotICAgICAgICBBTE9HRV9JRih0ZW1wRGF0YU1RICYmICF0ZW1wRGF0YU1RLT5pc1ZhbGlkKCksICJEYXRhIG1lc3NhZ2UgcXVldWUgZm9yIHdyaXRpbmcgaXMgaW52YWxpZCIpOwotICAgICAgICBBTE9HRV9JRighdGVtcFN0YXR1c01RLCAiRmFpbGVkIHRvIG9idGFpbiBzdGF0dXMgbWVzc2FnZSBxdWV1ZSBmb3Igd3JpdGluZyIpOwotICAgICAgICBBTE9HRV9JRih0ZW1wU3RhdHVzTVEgJiYgIXRlbXBTdGF0dXNNUS0+aXNWYWxpZCgpLAotICAgICAgICAgICAgICAgICJTdGF0dXMgbWVzc2FnZSBxdWV1ZSBmb3Igd3JpdGluZyBpcyBpbnZhbGlkIik7Ci0gICAgICAgIEFMT0dFX0lGKCFtRWZHcm91cCwgIkV2ZW50IGZsYWcgY3JlYXRpb24gZm9yIHdyaXRpbmcgZmFpbGVkIik7Ci0gICAgICAgIHJldHVybiBOT19JTklUOwotICAgIH0KLSAgICByZXF1ZXN0SGFsVGhyZWFkUHJpb3JpdHkoaGFsVGhyZWFkUGlkLCBoYWxUaHJlYWRUaWQpOwotCi0gICAgbUNvbW1hbmRNUSA9IHN0ZDo6bW92ZSh0ZW1wQ29tbWFuZE1RKTsKLSAgICBtRGF0YU1RID0gc3RkOjptb3ZlKHRlbXBEYXRhTVEpOwotICAgIG1TdGF0dXNNUSA9IHN0ZDo6bW92ZSh0ZW1wU3RhdHVzTVEpOwotICAgIG1Xcml0ZXJDbGllbnQgPSBnZXR0aWQoKTsKLSAgICByZXR1cm4gT0s7Ci19Ci0KLXN0YXR1c190IFN0cmVhbU91dEhhbEhpZGw6OmdldFJlbmRlclBvc2l0aW9uKHVpbnQzMl90ICpkc3BGcmFtZXMpIHsKLSAgICBpZiAobVN0cmVhbSA9PSAwKSByZXR1cm4gTk9fSU5JVDsKLSAgICBSZXN1bHQgcmV0dmFsOwotICAgIFJldHVybjx2b2lkPiByZXQgPSBtU3RyZWFtLT5nZXRSZW5kZXJQb3NpdGlvbigKLSAgICAgICAgICAgIFsmXShSZXN1bHQgciwgdWludDMyX3QgZCkgewotICAgICAgICAgICAgICAgIHJldHZhbCA9IHI7Ci0gICAgICAgICAgICAgICAgaWYgKHJldHZhbCA9PSBSZXN1bHQ6Ok9LKSB7Ci0gICAgICAgICAgICAgICAgICAgICpkc3BGcmFtZXMgPSBkOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0pOwotICAgIHJldHVybiBwcm9jZXNzUmV0dXJuKCJnZXRSZW5kZXJQb3NpdGlvbiIsIHJldCwgcmV0dmFsKTsKLX0KLQotc3RhdHVzX3QgU3RyZWFtT3V0SGFsSGlkbDo6Z2V0TmV4dFdyaXRlVGltZXN0YW1wKGludDY0X3QgKnRpbWVzdGFtcCkgewotICAgIGlmIChtU3RyZWFtID09IDApIHJldHVybiBOT19JTklUOwotICAgIFJlc3VsdCByZXR2YWw7Ci0gICAgUmV0dXJuPHZvaWQ+IHJldCA9IG1TdHJlYW0tPmdldE5leHRXcml0ZVRpbWVzdGFtcCgKLSAgICAgICAgICAgIFsmXShSZXN1bHQgciwgaW50NjRfdCB0KSB7Ci0gICAgICAgICAgICAgICAgcmV0dmFsID0gcjsKLSAgICAgICAgICAgICAgICBpZiAocmV0dmFsID09IFJlc3VsdDo6T0spIHsKLSAgICAgICAgICAgICAgICAgICAgKnRpbWVzdGFtcCA9IHQ7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfSk7Ci0gICAgcmV0dXJuIHByb2Nlc3NSZXR1cm4oImdldFJlbmRlclBvc2l0aW9uIiwgcmV0LCByZXR2YWwpOwotfQotCi1zdGF0dXNfdCBTdHJlYW1PdXRIYWxIaWRsOjpzZXRDYWxsYmFjayh3cDxTdHJlYW1PdXRIYWxJbnRlcmZhY2VDYWxsYmFjaz4gY2FsbGJhY2spIHsKLSAgICBpZiAobVN0cmVhbSA9PSAwKSByZXR1cm4gTk9fSU5JVDsKLSAgICBzdGF0dXNfdCBzdGF0dXMgPSBwcm9jZXNzUmV0dXJuKAotICAgICAgICAgICAgInNldENhbGxiYWNrIiwgbVN0cmVhbS0+c2V0Q2FsbGJhY2sobmV3IFN0cmVhbU91dENhbGxiYWNrKHRoaXMpKSk7Ci0gICAgaWYgKHN0YXR1cyA9PSBPSykgewotICAgICAgICBtQ2FsbGJhY2sgPSBjYWxsYmFjazsKLSAgICB9Ci0gICAgcmV0dXJuIHN0YXR1czsKLX0KLQotc3RhdHVzX3QgU3RyZWFtT3V0SGFsSGlkbDo6c3VwcG9ydHNQYXVzZUFuZFJlc3VtZShib29sICpzdXBwb3J0c1BhdXNlLCBib29sICpzdXBwb3J0c1Jlc3VtZSkgewotICAgIGlmIChtU3RyZWFtID09IDApIHJldHVybiBOT19JTklUOwotICAgIFJldHVybjx2b2lkPiByZXQgPSBtU3RyZWFtLT5zdXBwb3J0c1BhdXNlQW5kUmVzdW1lKAotICAgICAgICAgICAgWyZdKGJvb2wgcCwgYm9vbCByKSB7Ci0gICAgICAgICAgICAgICAgKnN1cHBvcnRzUGF1c2UgPSBwOwotICAgICAgICAgICAgICAgICpzdXBwb3J0c1Jlc3VtZSA9IHI7Ci0gICAgICAgICAgICB9KTsKLSAgICByZXR1cm4gcHJvY2Vzc1JldHVybigic3VwcG9ydHNQYXVzZUFuZFJlc3VtZSIsIHJldCk7Ci19Ci0KLXN0YXR1c190IFN0cmVhbU91dEhhbEhpZGw6OnBhdXNlKCkgewotICAgIGlmIChtU3RyZWFtID09IDApIHJldHVybiBOT19JTklUOwotICAgIHJldHVybiBwcm9jZXNzUmV0dXJuKCJwYXVzZSIsIG1TdHJlYW0tPnBhdXNlKCkpOwotfQotCi1zdGF0dXNfdCBTdHJlYW1PdXRIYWxIaWRsOjpyZXN1bWUoKSB7Ci0gICAgaWYgKG1TdHJlYW0gPT0gMCkgcmV0dXJuIE5PX0lOSVQ7Ci0gICAgcmV0dXJuIHByb2Nlc3NSZXR1cm4oInBhdXNlIiwgbVN0cmVhbS0+cmVzdW1lKCkpOwotfQotCi1zdGF0dXNfdCBTdHJlYW1PdXRIYWxIaWRsOjpzdXBwb3J0c0RyYWluKGJvb2wgKnN1cHBvcnRzRHJhaW4pIHsKLSAgICBpZiAobVN0cmVhbSA9PSAwKSByZXR1cm4gTk9fSU5JVDsKLSAgICByZXR1cm4gcHJvY2Vzc1JldHVybigic3VwcG9ydHNEcmFpbiIsIG1TdHJlYW0tPnN1cHBvcnRzRHJhaW4oKSwgc3VwcG9ydHNEcmFpbik7Ci19Ci0KLXN0YXR1c190IFN0cmVhbU91dEhhbEhpZGw6OmRyYWluKGJvb2wgZWFybHlOb3RpZnkpIHsKLSAgICBpZiAobVN0cmVhbSA9PSAwKSByZXR1cm4gTk9fSU5JVDsKLSAgICByZXR1cm4gcHJvY2Vzc1JldHVybigKLSAgICAgICAgICAgICJkcmFpbiIsIG1TdHJlYW0tPmRyYWluKGVhcmx5Tm90aWZ5ID8gQXVkaW9EcmFpbjo6RUFSTFlfTk9USUZZIDogQXVkaW9EcmFpbjo6QUxMKSk7Ci19Ci0KLXN0YXR1c190IFN0cmVhbU91dEhhbEhpZGw6OmZsdXNoKCkgewotICAgIGlmIChtU3RyZWFtID09IDApIHJldHVybiBOT19JTklUOwotICAgIHJldHVybiBwcm9jZXNzUmV0dXJuKCJwYXVzZSIsIG1TdHJlYW0tPmZsdXNoKCkpOwotfQotCi1zdGF0dXNfdCBTdHJlYW1PdXRIYWxIaWRsOjpnZXRQcmVzZW50YXRpb25Qb3NpdGlvbih1aW50NjRfdCAqZnJhbWVzLCBzdHJ1Y3QgdGltZXNwZWMgKnRpbWVzdGFtcCkgewotICAgIGlmIChtU3RyZWFtID09IDApIHJldHVybiBOT19JTklUOwotICAgIGlmIChtV3JpdGVyQ2xpZW50ID09IGdldHRpZCgpICYmIG1Db21tYW5kTVEpIHsKLSAgICAgICAgcmV0dXJuIGNhbGxXcml0ZXJUaHJlYWQoCi0gICAgICAgICAgICAgICAgV3JpdGVDb21tYW5kOjpHRVRfUFJFU0VOVEFUSU9OX1BPU0lUSU9OLCAiZ2V0UHJlc2VudGF0aW9uUG9zaXRpb24iLCBudWxscHRyLCAwLAotICAgICAgICAgICAgICAgIFsmXShjb25zdCBXcml0ZVN0YXR1cyYgd3JpdGVTdGF0dXMpIHsKLSAgICAgICAgICAgICAgICAgICAgKmZyYW1lcyA9IHdyaXRlU3RhdHVzLnJlcGx5LnByZXNlbnRhdGlvblBvc2l0aW9uLmZyYW1lczsKLSAgICAgICAgICAgICAgICAgICAgdGltZXN0YW1wLT50dl9zZWMgPSB3cml0ZVN0YXR1cy5yZXBseS5wcmVzZW50YXRpb25Qb3NpdGlvbi50aW1lU3RhbXAudHZTZWM7Ci0gICAgICAgICAgICAgICAgICAgIHRpbWVzdGFtcC0+dHZfbnNlYyA9IHdyaXRlU3RhdHVzLnJlcGx5LnByZXNlbnRhdGlvblBvc2l0aW9uLnRpbWVTdGFtcC50dk5TZWM7Ci0gICAgICAgICAgICAgICAgfSk7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgUmVzdWx0IHJldHZhbDsKLSAgICAgICAgUmV0dXJuPHZvaWQ+IHJldCA9IG1TdHJlYW0tPmdldFByZXNlbnRhdGlvblBvc2l0aW9uKAotICAgICAgICAgICAgICAgIFsmXShSZXN1bHQgciwgdWludDY0X3QgaGlkbEZyYW1lcywgY29uc3QgVGltZVNwZWMmIGhpZGxUaW1lU3RhbXApIHsKLSAgICAgICAgICAgICAgICAgICAgcmV0dmFsID0gcjsKLSAgICAgICAgICAgICAgICAgICAgaWYgKHJldHZhbCA9PSBSZXN1bHQ6Ok9LKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAqZnJhbWVzID0gaGlkbEZyYW1lczsKLSAgICAgICAgICAgICAgICAgICAgICAgIHRpbWVzdGFtcC0+dHZfc2VjID0gaGlkbFRpbWVTdGFtcC50dlNlYzsKLSAgICAgICAgICAgICAgICAgICAgICAgIHRpbWVzdGFtcC0+dHZfbnNlYyA9IGhpZGxUaW1lU3RhbXAudHZOU2VjOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfSk7Ci0gICAgICAgIHJldHVybiBwcm9jZXNzUmV0dXJuKCJnZXRQcmVzZW50YXRpb25Qb3NpdGlvbiIsIHJldCwgcmV0dmFsKTsKLSAgICB9Ci19Ci0KLS8qKiBUcmFuc2Zvcm0gYSBzdGFuZGFyZCBjb2xsZWN0aW9uIHRvIGFuIEhJREwgdmVjdG9yLiAqLwotdGVtcGxhdGUgPGNsYXNzIFZhbHVlcywgY2xhc3MgRWxlbWVudENvbnZlcnRlcj4KLXN0YXRpYyBhdXRvIHRyYW5zZm9ybVRvSGlkbFZlYyhjb25zdCBWYWx1ZXMmIHZhbHVlcywgRWxlbWVudENvbnZlcnRlciBjb252ZXJ0ZXIpIHsKLSAgICBoaWRsX3ZlYzxkZWNsdHlwZShjb252ZXJ0ZXIoKnZhbHVlcy5iZWdpbigpKSk+IHJlc3VsdHt2YWx1ZXMuc2l6ZSgpfTsKLSAgICB1c2luZyBuYW1lc3BhY2Ugc3RkOwotICAgIHRyYW5zZm9ybShiZWdpbih2YWx1ZXMpLCBlbmQodmFsdWVzKSwgYmVnaW4ocmVzdWx0KSwgY29udmVydGVyKTsKLSAgICByZXR1cm4gcmVzdWx0OwotfQotCi1zdGF0dXNfdCBTdHJlYW1PdXRIYWxIaWRsOjp1cGRhdGVTb3VyY2VNZXRhZGF0YShjb25zdCBTb3VyY2VNZXRhZGF0YSYgc291cmNlTWV0YWRhdGEpIHsKLSAgICBoYXJkd2FyZTo6YXVkaW86OlY0XzA6OlNvdXJjZU1ldGFkYXRhIGhhbE1ldGFkYXRhID0gewotICAgICAgICAudHJhY2tzID0gdHJhbnNmb3JtVG9IaWRsVmVjKHNvdXJjZU1ldGFkYXRhLnRyYWNrcywKLSAgICAgICAgICAgICAgW10oY29uc3QgcGxheWJhY2tfdHJhY2tfbWV0YWRhdGEmIG1ldGFkYXRhKSAtPiBQbGF5YmFja1RyYWNrTWV0YWRhdGEgewotICAgICAgICAgICAgICAgICAgcmV0dXJuIHsKLSAgICAgICAgICAgICAgICAgICAgLnVzYWdlPXN0YXRpY19jYXN0PEF1ZGlvVXNhZ2U+KG1ldGFkYXRhLnVzYWdlKSwKLSAgICAgICAgICAgICAgICAgICAgLmNvbnRlbnRUeXBlPXN0YXRpY19jYXN0PEF1ZGlvQ29udGVudFR5cGU+KG1ldGFkYXRhLmNvbnRlbnRfdHlwZSksCi0gICAgICAgICAgICAgICAgICAgIC5nYWluPW1ldGFkYXRhLmdhaW4sCi0gICAgICAgICAgICAgICAgICB9OwotICAgICAgICAgICAgICB9KX07Ci0gICAgcmV0dXJuIHByb2Nlc3NSZXR1cm4oInVwZGF0ZVNvdXJjZU1ldGFkYXRhIiwgbVN0cmVhbS0+dXBkYXRlU291cmNlTWV0YWRhdGEoaGFsTWV0YWRhdGEpKTsKLX0KLQotdm9pZCBTdHJlYW1PdXRIYWxIaWRsOjpvbldyaXRlUmVhZHkoKSB7Ci0gICAgc3A8U3RyZWFtT3V0SGFsSW50ZXJmYWNlQ2FsbGJhY2s+IGNhbGxiYWNrID0gbUNhbGxiYWNrLnByb21vdGUoKTsKLSAgICBpZiAoY2FsbGJhY2sgPT0gMCkgcmV0dXJuOwotICAgIEFMT0dWKCJhc3luY0NhbGxiYWNrIG9uV3JpdGVSZWFkeSIpOwotICAgIGNhbGxiYWNrLT5vbldyaXRlUmVhZHkoKTsKLX0KLQotdm9pZCBTdHJlYW1PdXRIYWxIaWRsOjpvbkRyYWluUmVhZHkoKSB7Ci0gICAgc3A8U3RyZWFtT3V0SGFsSW50ZXJmYWNlQ2FsbGJhY2s+IGNhbGxiYWNrID0gbUNhbGxiYWNrLnByb21vdGUoKTsKLSAgICBpZiAoY2FsbGJhY2sgPT0gMCkgcmV0dXJuOwotICAgIEFMT0dWKCJhc3luY0NhbGxiYWNrIG9uRHJhaW5SZWFkeSIpOwotICAgIGNhbGxiYWNrLT5vbkRyYWluUmVhZHkoKTsKLX0KLQotdm9pZCBTdHJlYW1PdXRIYWxIaWRsOjpvbkVycm9yKCkgewotICAgIHNwPFN0cmVhbU91dEhhbEludGVyZmFjZUNhbGxiYWNrPiBjYWxsYmFjayA9IG1DYWxsYmFjay5wcm9tb3RlKCk7Ci0gICAgaWYgKGNhbGxiYWNrID09IDApIHJldHVybjsKLSAgICBBTE9HVigiYXN5bmNDYWxsYmFjayBvbkVycm9yIik7Ci0gICAgY2FsbGJhY2stPm9uRXJyb3IoKTsKLX0KLQotCi1TdHJlYW1JbkhhbEhpZGw6OlN0cmVhbUluSGFsSGlkbChjb25zdCBzcDxJU3RyZWFtSW4+JiBzdHJlYW0pCi0gICAgICAgIDogU3RyZWFtSGFsSGlkbChzdHJlYW0uZ2V0KCkpLCBtU3RyZWFtKHN0cmVhbSksIG1SZWFkZXJDbGllbnQoMCksIG1FZkdyb3VwKG51bGxwdHIpIHsKLX0KLQotU3RyZWFtSW5IYWxIaWRsOjp+U3RyZWFtSW5IYWxIaWRsKCkgewotICAgIGlmIChtU3RyZWFtICE9IDApIHsKLSAgICAgICAgcHJvY2Vzc1JldHVybigiY2xvc2UiLCBtU3RyZWFtLT5jbG9zZSgpKTsKLSAgICAgICAgbVN0cmVhbS5jbGVhcigpOwotICAgICAgICBoYXJkd2FyZTo6SVBDVGhyZWFkU3RhdGU6OnNlbGYoKS0+Zmx1c2hDb21tYW5kcygpOwotICAgIH0KLSAgICBpZiAobUVmR3JvdXApIHsKLSAgICAgICAgRXZlbnRGbGFnOjpkZWxldGVFdmVudEZsYWcoJm1FZkdyb3VwKTsKLSAgICB9Ci19Ci0KLXN0YXR1c190IFN0cmVhbUluSGFsSGlkbDo6Z2V0RnJhbWVTaXplKHNpemVfdCAqc2l6ZSkgewotICAgIGlmIChtU3RyZWFtID09IDApIHJldHVybiBOT19JTklUOwotICAgIHJldHVybiBwcm9jZXNzUmV0dXJuKCJnZXRGcmFtZVNpemUiLCBtU3RyZWFtLT5nZXRGcmFtZVNpemUoKSwgc2l6ZSk7Ci19Ci0KLXN0YXR1c190IFN0cmVhbUluSGFsSGlkbDo6c2V0R2FpbihmbG9hdCBnYWluKSB7Ci0gICAgaWYgKG1TdHJlYW0gPT0gMCkgcmV0dXJuIE5PX0lOSVQ7Ci0gICAgcmV0dXJuIHByb2Nlc3NSZXR1cm4oInNldEdhaW4iLCBtU3RyZWFtLT5zZXRHYWluKGdhaW4pKTsKLX0KLQotc3RhdHVzX3QgU3RyZWFtSW5IYWxIaWRsOjpyZWFkKHZvaWQgKmJ1ZmZlciwgc2l6ZV90IGJ5dGVzLCBzaXplX3QgKnJlYWQpIHsKLSAgICBpZiAobVN0cmVhbSA9PSAwKSByZXR1cm4gTk9fSU5JVDsKLSAgICAqcmVhZCA9IDA7Ci0KLSAgICBpZiAoYnl0ZXMgPT0gMCAmJiAhbURhdGFNUSkgewotICAgICAgICAvLyBDYW4ndCBkZXRlcm1pbmUgdGhlIHNpemUgZm9yIHRoZSBNUSBidWZmZXIuIFdhaXQgZm9yIGEgbm9uLWVtcHR5IHJlYWQgcmVxdWVzdC4KLSAgICAgICAgcmV0dXJuIE9LOwotICAgIH0KLQotICAgIHN0YXR1c190IHN0YXR1czsKLSAgICBpZiAoIW1EYXRhTVEgJiYgKHN0YXR1cyA9IHByZXBhcmVGb3JSZWFkaW5nKGJ5dGVzKSkgIT0gT0spIHsKLSAgICAgICAgcmV0dXJuIHN0YXR1czsKLSAgICB9Ci0KLSAgICBSZWFkUGFyYW1ldGVycyBwYXJhbXM7Ci0gICAgcGFyYW1zLmNvbW1hbmQgPSBSZWFkQ29tbWFuZDo6UkVBRDsKLSAgICBwYXJhbXMucGFyYW1zLnJlYWQgPSBieXRlczsKLSAgICBzdGF0dXMgPSBjYWxsUmVhZGVyVGhyZWFkKHBhcmFtcywgInJlYWQiLAotICAgICAgICAgICAgWyZdKGNvbnN0IFJlYWRTdGF0dXMmIHJlYWRTdGF0dXMpIHsKLSAgICAgICAgICAgICAgICBjb25zdCBzaXplX3QgYXZhaWxUb1JlYWQgPSBtRGF0YU1RLT5hdmFpbGFibGVUb1JlYWQoKTsKLSAgICAgICAgICAgICAgICBpZiAoIW1EYXRhTVEtPnJlYWQoc3RhdGljX2Nhc3Q8dWludDhfdCo+KGJ1ZmZlciksIHN0ZDo6bWluKGJ5dGVzLCBhdmFpbFRvUmVhZCkpKSB7Ci0gICAgICAgICAgICAgICAgICAgIEFMT0dFKCJkYXRhIG1lc3NhZ2UgcXVldWUgcmVhZCBmYWlsZWQgZm9yIFwicmVhZFwiIik7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIEFMT0dXX0lGKGF2YWlsVG9SZWFkICE9IHJlYWRTdGF0dXMucmVwbHkucmVhZCwKLSAgICAgICAgICAgICAgICAgICAgICAgICJIQUwgcmVhZCByZXBvcnQgaW5jb25zaXN0ZW50OiBtcSA9ICVkLCBzdGF0dXMgPSAlZCIsCi0gICAgICAgICAgICAgICAgICAgICAgICAoaW50MzJfdClhdmFpbFRvUmVhZCwgKGludDMyX3QpcmVhZFN0YXR1cy5yZXBseS5yZWFkKTsKLSAgICAgICAgICAgICAgICAqcmVhZCA9IHJlYWRTdGF0dXMucmVwbHkucmVhZDsKLSAgICAgICAgICAgIH0pOwotICAgIG1TdHJlYW1Qb3dlckxvZy5sb2coYnVmZmVyLCAqcmVhZCk7Ci0gICAgcmV0dXJuIHN0YXR1czsKLX0KLQotc3RhdHVzX3QgU3RyZWFtSW5IYWxIaWRsOjpjYWxsUmVhZGVyVGhyZWFkKAotICAgICAgICBjb25zdCBSZWFkUGFyYW1ldGVycyYgcGFyYW1zLCBjb25zdCBjaGFyKiBjbWROYW1lLAotICAgICAgICBTdHJlYW1JbkhhbEhpZGw6OlJlYWRlckNhbGxiYWNrIGNhbGxiYWNrKSB7Ci0gICAgaWYgKCFtQ29tbWFuZE1RLT53cml0ZSgmcGFyYW1zKSkgewotICAgICAgICBBTE9HVygiY29tbWFuZCBtZXNzYWdlIHF1ZXVlIHdyaXRlIGZhaWxlZCIpOwotICAgICAgICByZXR1cm4gLUVBR0FJTjsKLSAgICB9Ci0gICAgbUVmR3JvdXAtPndha2Uoc3RhdGljX2Nhc3Q8dWludDMyX3Q+KE1lc3NhZ2VRdWV1ZUZsYWdCaXRzOjpOT1RfRlVMTCkpOwotCi0gICAgLy8gVE9ETzogUmVtb3ZlIG1hbnVhbCBldmVudCBmbGFnIGhhbmRsaW5nIG9uY2UgYmxvY2tpbmcgTVEgaXMgaW1wbGVtZW50ZWQuIGIvMzM4MTU0MjIKLSAgICB1aW50MzJfdCBlZlN0YXRlID0gMDsKLXJldHJ5OgotICAgIHN0YXR1c190IHJldCA9IG1FZkdyb3VwLT53YWl0KHN0YXRpY19jYXN0PHVpbnQzMl90PihNZXNzYWdlUXVldWVGbGFnQml0czo6Tk9UX0VNUFRZKSwgJmVmU3RhdGUpOwotICAgIGlmIChlZlN0YXRlICYgc3RhdGljX2Nhc3Q8dWludDMyX3Q+KE1lc3NhZ2VRdWV1ZUZsYWdCaXRzOjpOT1RfRU1QVFkpKSB7Ci0gICAgICAgIFJlYWRTdGF0dXMgcmVhZFN0YXR1czsKLSAgICAgICAgcmVhZFN0YXR1cy5yZXR2YWwgPSBSZXN1bHQ6Ok5PVF9JTklUSUFMSVpFRDsKLSAgICAgICAgaWYgKCFtU3RhdHVzTVEtPnJlYWQoJnJlYWRTdGF0dXMpKSB7Ci0gICAgICAgICAgICBBTE9HRSgic3RhdHVzIG1lc3NhZ2UgcmVhZCBmYWlsZWQgZm9yIFwiJXNcIiIsIGNtZE5hbWUpOwotICAgICAgICB9Ci0gICAgICAgICBpZiAocmVhZFN0YXR1cy5yZXR2YWwgPT0gUmVzdWx0OjpPSykgewotICAgICAgICAgICAgcmV0ID0gT0s7Ci0gICAgICAgICAgICBjYWxsYmFjayhyZWFkU3RhdHVzKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIHJldCA9IHByb2Nlc3NSZXR1cm4oY21kTmFtZSwgcmVhZFN0YXR1cy5yZXR2YWwpOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiByZXQ7Ci0gICAgfQotICAgIGlmIChyZXQgPT0gLUVBR0FJTiB8fCByZXQgPT0gLUVJTlRSKSB7Ci0gICAgICAgIC8vIFNwdXJpb3VzIHdha2V1cC4gVGhpcyBub3JtYWxseSByZXRyaWVzIG5vIG1vcmUgdGhhbiBvbmNlLgotICAgICAgICBnb3RvIHJldHJ5OwotICAgIH0KLSAgICByZXR1cm4gcmV0OwotfQotCi1zdGF0dXNfdCBTdHJlYW1JbkhhbEhpZGw6OnByZXBhcmVGb3JSZWFkaW5nKHNpemVfdCBidWZmZXJTaXplKSB7Ci0gICAgc3RkOjp1bmlxdWVfcHRyPENvbW1hbmRNUT4gdGVtcENvbW1hbmRNUTsKLSAgICBzdGQ6OnVuaXF1ZV9wdHI8RGF0YU1RPiB0ZW1wRGF0YU1ROwotICAgIHN0ZDo6dW5pcXVlX3B0cjxTdGF0dXNNUT4gdGVtcFN0YXR1c01ROwotICAgIFJlc3VsdCByZXR2YWw7Ci0gICAgcGlkX3QgaGFsVGhyZWFkUGlkLCBoYWxUaHJlYWRUaWQ7Ci0gICAgUmV0dXJuPHZvaWQ+IHJldCA9IG1TdHJlYW0tPnByZXBhcmVGb3JSZWFkaW5nKAotICAgICAgICAgICAgMSwgYnVmZmVyU2l6ZSwKLSAgICAgICAgICAgIFsmXShSZXN1bHQgciwKLSAgICAgICAgICAgICAgICAgICAgY29uc3QgQ29tbWFuZE1ROjpEZXNjcmlwdG9yJiBjb21tYW5kTVEsCi0gICAgICAgICAgICAgICAgICAgIGNvbnN0IERhdGFNUTo6RGVzY3JpcHRvciYgZGF0YU1RLAotICAgICAgICAgICAgICAgICAgICBjb25zdCBTdGF0dXNNUTo6RGVzY3JpcHRvciYgc3RhdHVzTVEsCi0gICAgICAgICAgICAgICAgICAgIGNvbnN0IFRocmVhZEluZm8mIGhhbFRocmVhZEluZm8pIHsKLSAgICAgICAgICAgICAgICByZXR2YWwgPSByOwotICAgICAgICAgICAgICAgIGlmIChyZXR2YWwgPT0gUmVzdWx0OjpPSykgewotICAgICAgICAgICAgICAgICAgICB0ZW1wQ29tbWFuZE1RLnJlc2V0KG5ldyBDb21tYW5kTVEoY29tbWFuZE1RKSk7Ci0gICAgICAgICAgICAgICAgICAgIHRlbXBEYXRhTVEucmVzZXQobmV3IERhdGFNUShkYXRhTVEpKTsKLSAgICAgICAgICAgICAgICAgICAgdGVtcFN0YXR1c01RLnJlc2V0KG5ldyBTdGF0dXNNUShzdGF0dXNNUSkpOwotICAgICAgICAgICAgICAgICAgICBpZiAodGVtcERhdGFNUS0+aXNWYWxpZCgpICYmIHRlbXBEYXRhTVEtPmdldEV2ZW50RmxhZ1dvcmQoKSkgewotICAgICAgICAgICAgICAgICAgICAgICAgRXZlbnRGbGFnOjpjcmVhdGVFdmVudEZsYWcodGVtcERhdGFNUS0+Z2V0RXZlbnRGbGFnV29yZCgpLCAmbUVmR3JvdXApOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIGhhbFRocmVhZFBpZCA9IGhhbFRocmVhZEluZm8ucGlkOwotICAgICAgICAgICAgICAgICAgICBoYWxUaHJlYWRUaWQgPSBoYWxUaHJlYWRJbmZvLnRpZDsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9KTsKLSAgICBpZiAoIXJldC5pc09rKCkgfHwgcmV0dmFsICE9IFJlc3VsdDo6T0spIHsKLSAgICAgICAgcmV0dXJuIHByb2Nlc3NSZXR1cm4oInByZXBhcmVGb3JSZWFkaW5nIiwgcmV0LCByZXR2YWwpOwotICAgIH0KLSAgICBpZiAoIXRlbXBDb21tYW5kTVEgfHwgIXRlbXBDb21tYW5kTVEtPmlzVmFsaWQoKSB8fAotICAgICAgICAgICAgIXRlbXBEYXRhTVEgfHwgIXRlbXBEYXRhTVEtPmlzVmFsaWQoKSB8fAotICAgICAgICAgICAgIXRlbXBTdGF0dXNNUSB8fCAhdGVtcFN0YXR1c01RLT5pc1ZhbGlkKCkgfHwKLSAgICAgICAgICAgICFtRWZHcm91cCkgewotICAgICAgICBBTE9HRV9JRighdGVtcENvbW1hbmRNUSwgIkZhaWxlZCB0byBvYnRhaW4gY29tbWFuZCBtZXNzYWdlIHF1ZXVlIGZvciB3cml0aW5nIik7Ci0gICAgICAgIEFMT0dFX0lGKHRlbXBDb21tYW5kTVEgJiYgIXRlbXBDb21tYW5kTVEtPmlzVmFsaWQoKSwKLSAgICAgICAgICAgICAgICAiQ29tbWFuZCBtZXNzYWdlIHF1ZXVlIGZvciB3cml0aW5nIGlzIGludmFsaWQiKTsKLSAgICAgICAgQUxPR0VfSUYoIXRlbXBEYXRhTVEsICJGYWlsZWQgdG8gb2J0YWluIGRhdGEgbWVzc2FnZSBxdWV1ZSBmb3IgcmVhZGluZyIpOwotICAgICAgICBBTE9HRV9JRih0ZW1wRGF0YU1RICYmICF0ZW1wRGF0YU1RLT5pc1ZhbGlkKCksICJEYXRhIG1lc3NhZ2UgcXVldWUgZm9yIHJlYWRpbmcgaXMgaW52YWxpZCIpOwotICAgICAgICBBTE9HRV9JRighdGVtcFN0YXR1c01RLCAiRmFpbGVkIHRvIG9idGFpbiBzdGF0dXMgbWVzc2FnZSBxdWV1ZSBmb3IgcmVhZGluZyIpOwotICAgICAgICBBTE9HRV9JRih0ZW1wU3RhdHVzTVEgJiYgIXRlbXBTdGF0dXNNUS0+aXNWYWxpZCgpLAotICAgICAgICAgICAgICAgICJTdGF0dXMgbWVzc2FnZSBxdWV1ZSBmb3IgcmVhZGluZyBpcyBpbnZhbGlkIik7Ci0gICAgICAgIEFMT0dFX0lGKCFtRWZHcm91cCwgIkV2ZW50IGZsYWcgY3JlYXRpb24gZm9yIHJlYWRpbmcgZmFpbGVkIik7Ci0gICAgICAgIHJldHVybiBOT19JTklUOwotICAgIH0KLSAgICByZXF1ZXN0SGFsVGhyZWFkUHJpb3JpdHkoaGFsVGhyZWFkUGlkLCBoYWxUaHJlYWRUaWQpOwotCi0gICAgbUNvbW1hbmRNUSA9IHN0ZDo6bW92ZSh0ZW1wQ29tbWFuZE1RKTsKLSAgICBtRGF0YU1RID0gc3RkOjptb3ZlKHRlbXBEYXRhTVEpOwotICAgIG1TdGF0dXNNUSA9IHN0ZDo6bW92ZSh0ZW1wU3RhdHVzTVEpOwotICAgIG1SZWFkZXJDbGllbnQgPSBnZXR0aWQoKTsKLSAgICByZXR1cm4gT0s7Ci19Ci0KLXN0YXR1c190IFN0cmVhbUluSGFsSGlkbDo6Z2V0SW5wdXRGcmFtZXNMb3N0KHVpbnQzMl90ICpmcmFtZXNMb3N0KSB7Ci0gICAgaWYgKG1TdHJlYW0gPT0gMCkgcmV0dXJuIE5PX0lOSVQ7Ci0gICAgcmV0dXJuIHByb2Nlc3NSZXR1cm4oImdldElucHV0RnJhbWVzTG9zdCIsIG1TdHJlYW0tPmdldElucHV0RnJhbWVzTG9zdCgpLCBmcmFtZXNMb3N0KTsKLX0KLQotc3RhdHVzX3QgU3RyZWFtSW5IYWxIaWRsOjpnZXRDYXB0dXJlUG9zaXRpb24oaW50NjRfdCAqZnJhbWVzLCBpbnQ2NF90ICp0aW1lKSB7Ci0gICAgaWYgKG1TdHJlYW0gPT0gMCkgcmV0dXJuIE5PX0lOSVQ7Ci0gICAgaWYgKG1SZWFkZXJDbGllbnQgPT0gZ2V0dGlkKCkgJiYgbUNvbW1hbmRNUSkgewotICAgICAgICBSZWFkUGFyYW1ldGVycyBwYXJhbXM7Ci0gICAgICAgIHBhcmFtcy5jb21tYW5kID0gUmVhZENvbW1hbmQ6OkdFVF9DQVBUVVJFX1BPU0lUSU9OOwotICAgICAgICByZXR1cm4gY2FsbFJlYWRlclRocmVhZChwYXJhbXMsICJnZXRDYXB0dXJlUG9zaXRpb24iLAotICAgICAgICAgICAgICAgIFsmXShjb25zdCBSZWFkU3RhdHVzJiByZWFkU3RhdHVzKSB7Ci0gICAgICAgICAgICAgICAgICAgICpmcmFtZXMgPSByZWFkU3RhdHVzLnJlcGx5LmNhcHR1cmVQb3NpdGlvbi5mcmFtZXM7Ci0gICAgICAgICAgICAgICAgICAgICp0aW1lID0gcmVhZFN0YXR1cy5yZXBseS5jYXB0dXJlUG9zaXRpb24udGltZTsKLSAgICAgICAgICAgICAgICB9KTsKLSAgICB9IGVsc2UgewotICAgICAgICBSZXN1bHQgcmV0dmFsOwotICAgICAgICBSZXR1cm48dm9pZD4gcmV0ID0gbVN0cmVhbS0+Z2V0Q2FwdHVyZVBvc2l0aW9uKAotICAgICAgICAgICAgICAgIFsmXShSZXN1bHQgciwgdWludDY0X3QgaGlkbEZyYW1lcywgdWludDY0X3QgaGlkbFRpbWUpIHsKLSAgICAgICAgICAgICAgICAgICAgcmV0dmFsID0gcjsKLSAgICAgICAgICAgICAgICAgICAgaWYgKHJldHZhbCA9PSBSZXN1bHQ6Ok9LKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAqZnJhbWVzID0gaGlkbEZyYW1lczsKLSAgICAgICAgICAgICAgICAgICAgICAgICp0aW1lID0gaGlkbFRpbWU7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9KTsKLSAgICAgICAgcmV0dXJuIHByb2Nlc3NSZXR1cm4oImdldENhcHR1cmVQb3NpdGlvbiIsIHJldCwgcmV0dmFsKTsKLSAgICB9Ci19Ci0KLQotc3RhdHVzX3QgU3RyZWFtSW5IYWxIaWRsOjpnZXRBY3RpdmVNaWNyb3Bob25lcygKLSAgICAgICAgc3RkOjp2ZWN0b3I8bWVkaWE6Ok1pY3JvcGhvbmVJbmZvPiAqbWljcm9waG9uZXNJbmZvKSB7Ci0gICAgaWYgKCFtU3RyZWFtKSByZXR1cm4gTk9fSU5JVDsKLSAgICBSZXN1bHQgcmV0dmFsOwotICAgIFJldHVybjx2b2lkPiByZXQgPSBtU3RyZWFtLT5nZXRBY3RpdmVNaWNyb3Bob25lcygKLSAgICAgICAgICAgIFsmXShSZXN1bHQgciwgaGlkbF92ZWM8TWljcm9waG9uZUluZm8+IG1pY0FycmF5SGFsKSB7Ci0gICAgICAgIHJldHZhbCA9IHI7Ci0gICAgICAgIGZvciAoc2l6ZV90IGsgPSAwOyBrIDwgbWljQXJyYXlIYWwuc2l6ZSgpOyBrKyspIHsKLSAgICAgICAgICAgIGF1ZGlvX21pY3JvcGhvbmVfY2hhcmFjdGVyaXN0aWNfdCBkc3Q7Ci0gICAgICAgICAgICAvLyBjb252ZXJ0Ci0gICAgICAgICAgICBtaWNyb3Bob25lSW5mb1RvSGFsKG1pY0FycmF5SGFsW2tdLCAmZHN0KTsKLSAgICAgICAgICAgIG1lZGlhOjpNaWNyb3Bob25lSW5mbyBtaWNyb3Bob25lID0gbWVkaWE6Ok1pY3JvcGhvbmVJbmZvKGRzdCk7Ci0gICAgICAgICAgICBtaWNyb3Bob25lc0luZm8tPnB1c2hfYmFjayhtaWNyb3Bob25lKTsKLSAgICAgICAgfQotICAgIH0pOwotICAgIHJldHVybiBwcm9jZXNzUmV0dXJuKCJnZXRBY3RpdmVNaWNyb3Bob25lcyIsIHJldCwgcmV0dmFsKTsKLX0KLQotc3RhdHVzX3QgU3RyZWFtSW5IYWxIaWRsOjp1cGRhdGVTaW5rTWV0YWRhdGEoY29uc3QgU2lua01ldGFkYXRhJiBzaW5rTWV0YWRhdGEpIHsKLSAgICBoYXJkd2FyZTo6YXVkaW86OlY0XzA6OlNpbmtNZXRhZGF0YSBoYWxNZXRhZGF0YSA9IHsKLSAgICAgICAgLnRyYWNrcyA9IHRyYW5zZm9ybVRvSGlkbFZlYyhzaW5rTWV0YWRhdGEudHJhY2tzLAotICAgICAgICAgICAgICBbXShjb25zdCByZWNvcmRfdHJhY2tfbWV0YWRhdGEmIG1ldGFkYXRhKSAtPiBSZWNvcmRUcmFja01ldGFkYXRhIHsKLSAgICAgICAgICAgICAgICAgIHJldHVybiB7Ci0gICAgICAgICAgICAgICAgICAgIC5zb3VyY2U9c3RhdGljX2Nhc3Q8QXVkaW9Tb3VyY2U+KG1ldGFkYXRhLnNvdXJjZSksCi0gICAgICAgICAgICAgICAgICAgIC5nYWluPW1ldGFkYXRhLmdhaW4sCi0gICAgICAgICAgICAgICAgICB9OwotICAgICAgICAgICAgICB9KX07Ci0gICAgcmV0dXJuIHByb2Nlc3NSZXR1cm4oInVwZGF0ZVNpbmtNZXRhZGF0YSIsIG1TdHJlYW0tPnVwZGF0ZVNpbmtNZXRhZGF0YShoYWxNZXRhZGF0YSkpOwotfQotCi19IC8vIG5hbWVzcGFjZSBWNF8wCi19IC8vIG5hbWVzcGFjZSBhbmRyb2lkCmRpZmYgLS1naXQgYS9tZWRpYS9saWJhdWRpb2hhbC80LjAvU3RyZWFtSGFsSGlkbC5oIGIvbWVkaWEvbGliYXVkaW9oYWwvNC4wL1N0cmVhbUhhbEhpZGwuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMmRkYTBmOC4uMDAwMDAwMAotLS0gYS9tZWRpYS9saWJhdWRpb2hhbC80LjAvU3RyZWFtSGFsSGlkbC5oCisrKyAvZGV2L251bGwKQEAgLTEsMjUwICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTYgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAotICoKLSAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwotICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgotICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0gKgotICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLSAqCi0gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCi0gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAotICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCi0gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCi0gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KLSAqLwotCi0jaWZuZGVmIEFORFJPSURfSEFSRFdBUkVfU1RSRUFNX0hBTF9ISURMXzRfMF9ICi0jZGVmaW5lIEFORFJPSURfSEFSRFdBUkVfU1RSRUFNX0hBTF9ISURMXzRfMF9ICi0KLSNpbmNsdWRlIDxhdG9taWM+Ci0KLSNpbmNsdWRlIDxhbmRyb2lkL2hhcmR3YXJlL2F1ZGlvLzQuMC9JU3RyZWFtLmg+Ci0jaW5jbHVkZSA8YW5kcm9pZC9oYXJkd2FyZS9hdWRpby80LjAvSVN0cmVhbUluLmg+Ci0jaW5jbHVkZSA8YW5kcm9pZC9oYXJkd2FyZS9hdWRpby80LjAvSVN0cmVhbU91dC5oPgotI2luY2x1ZGUgPGZtcS9FdmVudEZsYWcuaD4KLSNpbmNsdWRlIDxmbXEvTWVzc2FnZVF1ZXVlLmg+Ci0jaW5jbHVkZSA8bWVkaWEvYXVkaW9oYWwvU3RyZWFtSGFsSW50ZXJmYWNlLmg+Ci0KLSNpbmNsdWRlICJDb252ZXJzaW9uSGVscGVySGlkbC5oIgotI2luY2x1ZGUgIlN0cmVhbVBvd2VyTG9nLmgiCi0KLXVzaW5nIDo6YW5kcm9pZDo6aGFyZHdhcmU6OmF1ZGlvOjpWNF8wOjpJU3RyZWFtOwotdXNpbmcgOjphbmRyb2lkOjpoYXJkd2FyZTo6YXVkaW86OlY0XzA6OklTdHJlYW1JbjsKLXVzaW5nIDo6YW5kcm9pZDo6aGFyZHdhcmU6OmF1ZGlvOjpWNF8wOjpJU3RyZWFtT3V0OwotdXNpbmcgOjphbmRyb2lkOjpoYXJkd2FyZTo6RXZlbnRGbGFnOwotdXNpbmcgOjphbmRyb2lkOjpoYXJkd2FyZTo6TWVzc2FnZVF1ZXVlOwotdXNpbmcgOjphbmRyb2lkOjpoYXJkd2FyZTo6UmV0dXJuOwotdXNpbmcgUmVhZFBhcmFtZXRlcnMgPSA6OmFuZHJvaWQ6OmhhcmR3YXJlOjphdWRpbzo6VjRfMDo6SVN0cmVhbUluOjpSZWFkUGFyYW1ldGVyczsKLXVzaW5nIFJlYWRTdGF0dXMgPSA6OmFuZHJvaWQ6OmhhcmR3YXJlOjphdWRpbzo6VjRfMDo6SVN0cmVhbUluOjpSZWFkU3RhdHVzOwotdXNpbmcgV3JpdGVDb21tYW5kID0gOjphbmRyb2lkOjpoYXJkd2FyZTo6YXVkaW86OlY0XzA6OklTdHJlYW1PdXQ6OldyaXRlQ29tbWFuZDsKLXVzaW5nIFdyaXRlU3RhdHVzID0gOjphbmRyb2lkOjpoYXJkd2FyZTo6YXVkaW86OlY0XzA6OklTdHJlYW1PdXQ6OldyaXRlU3RhdHVzOwotCi1uYW1lc3BhY2UgYW5kcm9pZCB7Ci1uYW1lc3BhY2UgVjRfMCB7Ci0KLWNsYXNzIERldmljZUhhbEhpZGw7Ci0KLWNsYXNzIFN0cmVhbUhhbEhpZGwgOiBwdWJsaWMgdmlydHVhbCBTdHJlYW1IYWxJbnRlcmZhY2UsIHB1YmxpYyBDb252ZXJzaW9uSGVscGVySGlkbAotewotICBwdWJsaWM6Ci0gICAgLy8gUmV0dXJuIHRoZSBzYW1wbGluZyByYXRlIGluIEh6IC0gZWcuIDQ0MTAwLgotICAgIHZpcnR1YWwgc3RhdHVzX3QgZ2V0U2FtcGxlUmF0ZSh1aW50MzJfdCAqcmF0ZSk7Ci0KLSAgICAvLyBSZXR1cm4gc2l6ZSBvZiBpbnB1dC9vdXRwdXQgYnVmZmVyIGluIGJ5dGVzIGZvciB0aGlzIHN0cmVhbSAtIGVnLiA0ODAwLgotICAgIHZpcnR1YWwgc3RhdHVzX3QgZ2V0QnVmZmVyU2l6ZShzaXplX3QgKnNpemUpOwotCi0gICAgLy8gUmV0dXJuIHRoZSBjaGFubmVsIG1hc2suCi0gICAgdmlydHVhbCBzdGF0dXNfdCBnZXRDaGFubmVsTWFzayhhdWRpb19jaGFubmVsX21hc2tfdCAqbWFzayk7Ci0KLSAgICAvLyBSZXR1cm4gdGhlIGF1ZGlvIGZvcm1hdCAtIGUuZy4gQVVESU9fRk9STUFUX1BDTV8xNl9CSVQuCi0gICAgdmlydHVhbCBzdGF0dXNfdCBnZXRGb3JtYXQoYXVkaW9fZm9ybWF0X3QgKmZvcm1hdCk7Ci0KLSAgICAvLyBDb252ZW5pZW5jZSBtZXRob2QuCi0gICAgdmlydHVhbCBzdGF0dXNfdCBnZXRBdWRpb1Byb3BlcnRpZXMoCi0gICAgICAgICAgICB1aW50MzJfdCAqc2FtcGxlUmF0ZSwgYXVkaW9fY2hhbm5lbF9tYXNrX3QgKm1hc2ssIGF1ZGlvX2Zvcm1hdF90ICpmb3JtYXQpOwotCi0gICAgLy8gU2V0IGF1ZGlvIHN0cmVhbSBwYXJhbWV0ZXJzLgotICAgIHZpcnR1YWwgc3RhdHVzX3Qgc2V0UGFyYW1ldGVycyhjb25zdCBTdHJpbmc4JiBrdlBhaXJzKTsKLQotICAgIC8vIEdldCBhdWRpbyBzdHJlYW0gcGFyYW1ldGVycy4KLSAgICB2aXJ0dWFsIHN0YXR1c190IGdldFBhcmFtZXRlcnMoY29uc3QgU3RyaW5nOCYga2V5cywgU3RyaW5nOCAqdmFsdWVzKTsKLQotICAgIC8vIEFkZCBvciByZW1vdmUgdGhlIGVmZmVjdCBvbiB0aGUgc3RyZWFtLgotICAgIHZpcnR1YWwgc3RhdHVzX3QgYWRkRWZmZWN0KHNwPEVmZmVjdEhhbEludGVyZmFjZT4gZWZmZWN0KTsKLSAgICB2aXJ0dWFsIHN0YXR1c190IHJlbW92ZUVmZmVjdChzcDxFZmZlY3RIYWxJbnRlcmZhY2U+IGVmZmVjdCk7Ci0KLSAgICAvLyBQdXQgdGhlIGF1ZGlvIGhhcmR3YXJlIGlucHV0L291dHB1dCBpbnRvIHN0YW5kYnkgbW9kZS4KLSAgICB2aXJ0dWFsIHN0YXR1c190IHN0YW5kYnkoKTsKLQotICAgIHZpcnR1YWwgc3RhdHVzX3QgZHVtcChpbnQgZmQpOwotCi0gICAgLy8gU3RhcnQgYSBzdHJlYW0gb3BlcmF0aW5nIGluIG1tYXAgbW9kZS4KLSAgICB2aXJ0dWFsIHN0YXR1c190IHN0YXJ0KCk7Ci0KLSAgICAvLyBTdG9wIGEgc3RyZWFtIG9wZXJhdGluZyBpbiBtbWFwIG1vZGUuCi0gICAgdmlydHVhbCBzdGF0dXNfdCBzdG9wKCk7Ci0KLSAgICAvLyBSZXRyaWV2ZSBpbmZvcm1hdGlvbiBvbiB0aGUgZGF0YSBidWZmZXIgaW4gbW1hcCBtb2RlLgotICAgIHZpcnR1YWwgc3RhdHVzX3QgY3JlYXRlTW1hcEJ1ZmZlcihpbnQzMl90IG1pblNpemVGcmFtZXMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBhdWRpb19tbWFwX2J1ZmZlcl9pbmZvICppbmZvKTsKLQotICAgIC8vIEdldCBjdXJyZW50IHJlYWQvd3JpdGUgcG9zaXRpb24gaW4gdGhlIG1tYXAgYnVmZmVyCi0gICAgdmlydHVhbCBzdGF0dXNfdCBnZXRNbWFwUG9zaXRpb24oc3RydWN0IGF1ZGlvX21tYXBfcG9zaXRpb24gKnBvc2l0aW9uKTsKLQotICAgIC8vIFNldCB0aGUgcHJpb3JpdHkgb2YgdGhlIHRocmVhZCB0aGF0IGludGVyYWN0cyB3aXRoIHRoZSBIQUwKLSAgICAvLyAobXVzdCBtYXRjaCB0aGUgcHJpb3JpdHkgb2YgdGhlIGF1ZGlvZmxpbmdlcidzIHRocmVhZCB0aGF0IGNhbGxzICdyZWFkJyAvICd3cml0ZScpCi0gICAgdmlydHVhbCBzdGF0dXNfdCBzZXRIYWxUaHJlYWRQcmlvcml0eShpbnQgcHJpb3JpdHkpOwotCi0gIHByb3RlY3RlZDoKLSAgICAvLyBTdWJjbGFzc2VzIGNhbiBub3QgYmUgY29uc3RydWN0ZWQgZGlyZWN0bHkgYnkgY2xpZW50cy4KLSAgICBleHBsaWNpdCBTdHJlYW1IYWxIaWRsKElTdHJlYW0gKnN0cmVhbSk7Ci0KLSAgICAvLyBUaGUgZGVzdHJ1Y3RvciBhdXRvbWF0aWNhbGx5IGNsb3NlcyB0aGUgc3RyZWFtLgotICAgIHZpcnR1YWwgflN0cmVhbUhhbEhpZGwoKTsKLQotICAgIHN0YXR1c190IGdldENhY2hlZEJ1ZmZlclNpemUoc2l6ZV90ICpzaXplKTsKLQotICAgIGJvb2wgcmVxdWVzdEhhbFRocmVhZFByaW9yaXR5KHBpZF90IHRocmVhZFBpZCwgcGlkX3QgdGhyZWFkSWQpOwotCi0gICAgLy8gbVN0cmVhbVBvd2VyTG9nIGlzIHVzZWQgZm9yIGF1ZGlvIHNpZ25hbCBwb3dlciBsb2dnaW5nLgotICAgIFN0cmVhbVBvd2VyTG9nIG1TdHJlYW1Qb3dlckxvZzsKLQotICBwcml2YXRlOgotICAgIGNvbnN0IGludCBIQUxfVEhSRUFEX1BSSU9SSVRZX0RFRkFVTFQgPSAtMTsKLSAgICBJU3RyZWFtICptU3RyZWFtOwotICAgIGludCBtSGFsVGhyZWFkUHJpb3JpdHk7Ci0gICAgc2l6ZV90IG1DYWNoZWRCdWZmZXJTaXplOwotfTsKLQotY2xhc3MgU3RyZWFtT3V0SGFsSGlkbCA6IHB1YmxpYyBTdHJlYW1PdXRIYWxJbnRlcmZhY2UsIHB1YmxpYyBTdHJlYW1IYWxIaWRsIHsKLSAgcHVibGljOgotICAgIC8vIFJldHVybiB0aGUgZnJhbWUgc2l6ZSAobnVtYmVyIG9mIGJ5dGVzIHBlciBzYW1wbGUpIG9mIGEgc3RyZWFtLgotICAgIHZpcnR1YWwgc3RhdHVzX3QgZ2V0RnJhbWVTaXplKHNpemVfdCAqc2l6ZSk7Ci0KLSAgICAvLyBSZXR1cm4gdGhlIGF1ZGlvIGhhcmR3YXJlIGRyaXZlciBlc3RpbWF0ZWQgbGF0ZW5jeSBpbiBtaWxsaXNlY29uZHMuCi0gICAgdmlydHVhbCBzdGF0dXNfdCBnZXRMYXRlbmN5KHVpbnQzMl90ICpsYXRlbmN5KTsKLQotICAgIC8vIFVzZSB0aGlzIG1ldGhvZCBpbiBzaXR1YXRpb25zIHdoZXJlIGF1ZGlvIG1peGluZyBpcyBkb25lIGluIHRoZSBoYXJkd2FyZS4KLSAgICB2aXJ0dWFsIHN0YXR1c190IHNldFZvbHVtZShmbG9hdCBsZWZ0LCBmbG9hdCByaWdodCk7Ci0KLSAgICAvLyBXcml0ZSBhdWRpbyBidWZmZXIgdG8gZHJpdmVyLgotICAgIHZpcnR1YWwgc3RhdHVzX3Qgd3JpdGUoY29uc3Qgdm9pZCAqYnVmZmVyLCBzaXplX3QgYnl0ZXMsIHNpemVfdCAqd3JpdHRlbik7Ci0KLSAgICAvLyBSZXR1cm4gdGhlIG51bWJlciBvZiBhdWRpbyBmcmFtZXMgd3JpdHRlbiBieSB0aGUgYXVkaW8gZHNwIHRvIERBQyBzaW5jZQotICAgIC8vIHRoZSBvdXRwdXQgaGFzIGV4aXRlZCBzdGFuZGJ5LgotICAgIHZpcnR1YWwgc3RhdHVzX3QgZ2V0UmVuZGVyUG9zaXRpb24odWludDMyX3QgKmRzcEZyYW1lcyk7Ci0KLSAgICAvLyBHZXQgdGhlIGxvY2FsIHRpbWUgYXQgd2hpY2ggdGhlIG5leHQgd3JpdGUgdG8gdGhlIGF1ZGlvIGRyaXZlciB3aWxsIGJlIHByZXNlbnRlZC4KLSAgICB2aXJ0dWFsIHN0YXR1c190IGdldE5leHRXcml0ZVRpbWVzdGFtcChpbnQ2NF90ICp0aW1lc3RhbXApOwotCi0gICAgLy8gU2V0IHRoZSBjYWxsYmFjayBmb3Igbm90aWZ5aW5nIGNvbXBsZXRpb24gb2Ygbm9uLWJsb2NraW5nIHdyaXRlIGFuZCBkcmFpbi4KLSAgICB2aXJ0dWFsIHN0YXR1c190IHNldENhbGxiYWNrKHdwPFN0cmVhbU91dEhhbEludGVyZmFjZUNhbGxiYWNrPiBjYWxsYmFjayk7Ci0KLSAgICAvLyBSZXR1cm5zIHdoZXRoZXIgcGF1c2UgYW5kIHJlc3VtZSBvcGVyYXRpb25zIGFyZSBzdXBwb3J0ZWQuCi0gICAgdmlydHVhbCBzdGF0dXNfdCBzdXBwb3J0c1BhdXNlQW5kUmVzdW1lKGJvb2wgKnN1cHBvcnRzUGF1c2UsIGJvb2wgKnN1cHBvcnRzUmVzdW1lKTsKLQotICAgIC8vIE5vdGlmaWVzIHRvIHRoZSBhdWRpbyBkcml2ZXIgdG8gcmVzdW1lIHBsYXliYWNrIGZvbGxvd2luZyBhIHBhdXNlLgotICAgIHZpcnR1YWwgc3RhdHVzX3QgcGF1c2UoKTsKLQotICAgIC8vIE5vdGlmaWVzIHRvIHRoZSBhdWRpbyBkcml2ZXIgdG8gcmVzdW1lIHBsYXliYWNrIGZvbGxvd2luZyBhIHBhdXNlLgotICAgIHZpcnR1YWwgc3RhdHVzX3QgcmVzdW1lKCk7Ci0KLSAgICAvLyBSZXR1cm5zIHdoZXRoZXIgZHJhaW4gb3BlcmF0aW9uIGlzIHN1cHBvcnRlZC4KLSAgICB2aXJ0dWFsIHN0YXR1c190IHN1cHBvcnRzRHJhaW4oYm9vbCAqc3VwcG9ydHNEcmFpbik7Ci0KLSAgICAvLyBSZXF1ZXN0cyBub3RpZmljYXRpb24gd2hlbiBkYXRhIGJ1ZmZlcmVkIGJ5IHRoZSBkcml2ZXIvaGFyZHdhcmUgaGFzIGJlZW4gcGxheWVkLgotICAgIHZpcnR1YWwgc3RhdHVzX3QgZHJhaW4oYm9vbCBlYXJseU5vdGlmeSk7Ci0KLSAgICAvLyBOb3RpZmllcyB0byB0aGUgYXVkaW8gZHJpdmVyIHRvIGZsdXNoIHRoZSBxdWV1ZWQgZGF0YS4KLSAgICB2aXJ0dWFsIHN0YXR1c190IGZsdXNoKCk7Ci0KLSAgICAvLyBSZXR1cm4gYSByZWNlbnQgY291bnQgb2YgdGhlIG51bWJlciBvZiBhdWRpbyBmcmFtZXMgcHJlc2VudGVkIHRvIGFuIGV4dGVybmFsIG9ic2VydmVyLgotICAgIHZpcnR1YWwgc3RhdHVzX3QgZ2V0UHJlc2VudGF0aW9uUG9zaXRpb24odWludDY0X3QgKmZyYW1lcywgc3RydWN0IHRpbWVzcGVjICp0aW1lc3RhbXApOwotCi0gICAgLy8gQ2FsbGVkIHdoZW4gdGhlIG1ldGFkYXRhIG9mIHRoZSBzdHJlYW0ncyBzb3VyY2UgaGFzIGJlZW4gY2hhbmdlZC4KLSAgICBzdGF0dXNfdCB1cGRhdGVTb3VyY2VNZXRhZGF0YShjb25zdCBTb3VyY2VNZXRhZGF0YSYgc291cmNlTWV0YWRhdGEpIG92ZXJyaWRlOwotCi0gICAgLy8gTWV0aG9kcyB1c2VkIGJ5IFN0cmVhbU91dENhbGxiYWNrIChISURMKS4KLSAgICB2b2lkIG9uV3JpdGVSZWFkeSgpOwotICAgIHZvaWQgb25EcmFpblJlYWR5KCk7Ci0gICAgdm9pZCBvbkVycm9yKCk7Ci0KLSAgcHJpdmF0ZToKLSAgICBmcmllbmQgY2xhc3MgRGV2aWNlSGFsSGlkbDsKLSAgICB0eXBlZGVmIE1lc3NhZ2VRdWV1ZTxXcml0ZUNvbW1hbmQsIGhhcmR3YXJlOjprU3luY2hyb25pemVkUmVhZFdyaXRlPiBDb21tYW5kTVE7Ci0gICAgdHlwZWRlZiBNZXNzYWdlUXVldWU8dWludDhfdCwgaGFyZHdhcmU6OmtTeW5jaHJvbml6ZWRSZWFkV3JpdGU+IERhdGFNUTsKLSAgICB0eXBlZGVmIE1lc3NhZ2VRdWV1ZTxXcml0ZVN0YXR1cywgaGFyZHdhcmU6OmtTeW5jaHJvbml6ZWRSZWFkV3JpdGU+IFN0YXR1c01ROwotCi0gICAgd3A8U3RyZWFtT3V0SGFsSW50ZXJmYWNlQ2FsbGJhY2s+IG1DYWxsYmFjazsKLSAgICBzcDxJU3RyZWFtT3V0PiBtU3RyZWFtOwotICAgIHN0ZDo6dW5pcXVlX3B0cjxDb21tYW5kTVE+IG1Db21tYW5kTVE7Ci0gICAgc3RkOjp1bmlxdWVfcHRyPERhdGFNUT4gbURhdGFNUTsKLSAgICBzdGQ6OnVuaXF1ZV9wdHI8U3RhdHVzTVE+IG1TdGF0dXNNUTsKLSAgICBzdGQ6OmF0b21pYzxwaWRfdD4gbVdyaXRlckNsaWVudDsKLSAgICBFdmVudEZsYWcqIG1FZkdyb3VwOwotCi0gICAgLy8gQ2FuIG5vdCBiZSBjb25zdHJ1Y3RlZCBkaXJlY3RseSBieSBjbGllbnRzLgotICAgIFN0cmVhbU91dEhhbEhpZGwoY29uc3Qgc3A8SVN0cmVhbU91dD4mIHN0cmVhbSk7Ci0KLSAgICB2aXJ0dWFsIH5TdHJlYW1PdXRIYWxIaWRsKCk7Ci0KLSAgICB1c2luZyBXcml0ZXJDYWxsYmFjayA9IHN0ZDo6ZnVuY3Rpb248dm9pZChjb25zdCBXcml0ZVN0YXR1cyYgd3JpdGVTdGF0dXMpPjsKLSAgICBzdGF0dXNfdCBjYWxsV3JpdGVyVGhyZWFkKAotICAgICAgICAgICAgV3JpdGVDb21tYW5kIGNtZCwgY29uc3QgY2hhciogY21kTmFtZSwKLSAgICAgICAgICAgIGNvbnN0IHVpbnQ4X3QqIGRhdGEsIHNpemVfdCBkYXRhU2l6ZSwgV3JpdGVyQ2FsbGJhY2sgY2FsbGJhY2spOwotICAgIHN0YXR1c190IHByZXBhcmVGb3JXcml0aW5nKHNpemVfdCBidWZmZXJTaXplKTsKLX07Ci0KLWNsYXNzIFN0cmVhbUluSGFsSGlkbCA6IHB1YmxpYyBTdHJlYW1JbkhhbEludGVyZmFjZSwgcHVibGljIFN0cmVhbUhhbEhpZGwgewotICBwdWJsaWM6Ci0gICAgLy8gUmV0dXJuIHRoZSBmcmFtZSBzaXplIChudW1iZXIgb2YgYnl0ZXMgcGVyIHNhbXBsZSkgb2YgYSBzdHJlYW0uCi0gICAgdmlydHVhbCBzdGF0dXNfdCBnZXRGcmFtZVNpemUoc2l6ZV90ICpzaXplKTsKLQotICAgIC8vIFNldCB0aGUgaW5wdXQgZ2FpbiBmb3IgdGhlIGF1ZGlvIGRyaXZlci4KLSAgICB2aXJ0dWFsIHN0YXR1c190IHNldEdhaW4oZmxvYXQgZ2Fpbik7Ci0KLSAgICAvLyBSZWFkIGF1ZGlvIGJ1ZmZlciBpbiBmcm9tIGRyaXZlci4KLSAgICB2aXJ0dWFsIHN0YXR1c190IHJlYWQodm9pZCAqYnVmZmVyLCBzaXplX3QgYnl0ZXMsIHNpemVfdCAqcmVhZCk7Ci0KLSAgICAvLyBSZXR1cm4gdGhlIGFtb3VudCBvZiBpbnB1dCBmcmFtZXMgbG9zdCBpbiB0aGUgYXVkaW8gZHJpdmVyLgotICAgIHZpcnR1YWwgc3RhdHVzX3QgZ2V0SW5wdXRGcmFtZXNMb3N0KHVpbnQzMl90ICpmcmFtZXNMb3N0KTsKLQotICAgIC8vIFJldHVybiBhIHJlY2VudCBjb3VudCBvZiB0aGUgbnVtYmVyIG9mIGF1ZGlvIGZyYW1lcyByZWNlaXZlZCBhbmQKLSAgICAvLyB0aGUgY2xvY2sgdGltZSBhc3NvY2lhdGVkIHdpdGggdGhhdCBmcmFtZSBjb3VudC4KLSAgICB2aXJ0dWFsIHN0YXR1c190IGdldENhcHR1cmVQb3NpdGlvbihpbnQ2NF90ICpmcmFtZXMsIGludDY0X3QgKnRpbWUpOwotCi0gICAgLy8gR2V0IGFjdGl2ZSBtaWNyb3Bob25lcwotICAgIHZpcnR1YWwgc3RhdHVzX3QgZ2V0QWN0aXZlTWljcm9waG9uZXMoc3RkOjp2ZWN0b3I8bWVkaWE6Ok1pY3JvcGhvbmVJbmZvPiAqbWljcm9waG9uZXMpOwotCi0gICAgLy8gQ2FsbGVkIHdoZW4gdGhlIG1ldGFkYXRhIG9mIHRoZSBzdHJlYW0ncyBzaW5rIGhhcyBiZWVuIGNoYW5nZWQuCi0gICAgc3RhdHVzX3QgdXBkYXRlU2lua01ldGFkYXRhKGNvbnN0IFNpbmtNZXRhZGF0YSYgc2lua01ldGFkYXRhKSBvdmVycmlkZTsKLQotICBwcml2YXRlOgotICAgIGZyaWVuZCBjbGFzcyBEZXZpY2VIYWxIaWRsOwotICAgIHR5cGVkZWYgTWVzc2FnZVF1ZXVlPFJlYWRQYXJhbWV0ZXJzLCBoYXJkd2FyZTo6a1N5bmNocm9uaXplZFJlYWRXcml0ZT4gQ29tbWFuZE1ROwotICAgIHR5cGVkZWYgTWVzc2FnZVF1ZXVlPHVpbnQ4X3QsIGhhcmR3YXJlOjprU3luY2hyb25pemVkUmVhZFdyaXRlPiBEYXRhTVE7Ci0gICAgdHlwZWRlZiBNZXNzYWdlUXVldWU8UmVhZFN0YXR1cywgaGFyZHdhcmU6OmtTeW5jaHJvbml6ZWRSZWFkV3JpdGU+IFN0YXR1c01ROwotCi0gICAgc3A8SVN0cmVhbUluPiBtU3RyZWFtOwotICAgIHN0ZDo6dW5pcXVlX3B0cjxDb21tYW5kTVE+IG1Db21tYW5kTVE7Ci0gICAgc3RkOjp1bmlxdWVfcHRyPERhdGFNUT4gbURhdGFNUTsKLSAgICBzdGQ6OnVuaXF1ZV9wdHI8U3RhdHVzTVE+IG1TdGF0dXNNUTsKLSAgICBzdGQ6OmF0b21pYzxwaWRfdD4gbVJlYWRlckNsaWVudDsKLSAgICBFdmVudEZsYWcqIG1FZkdyb3VwOwotCi0gICAgLy8gQ2FuIG5vdCBiZSBjb25zdHJ1Y3RlZCBkaXJlY3RseSBieSBjbGllbnRzLgotICAgIFN0cmVhbUluSGFsSGlkbChjb25zdCBzcDxJU3RyZWFtSW4+JiBzdHJlYW0pOwotCi0gICAgdmlydHVhbCB+U3RyZWFtSW5IYWxIaWRsKCk7Ci0KLSAgICB1c2luZyBSZWFkZXJDYWxsYmFjayA9IHN0ZDo6ZnVuY3Rpb248dm9pZChjb25zdCBSZWFkU3RhdHVzJiByZWFkU3RhdHVzKT47Ci0gICAgc3RhdHVzX3QgY2FsbFJlYWRlclRocmVhZCgKLSAgICAgICAgICAgIGNvbnN0IFJlYWRQYXJhbWV0ZXJzJiBwYXJhbXMsIGNvbnN0IGNoYXIqIGNtZE5hbWUsIFJlYWRlckNhbGxiYWNrIGNhbGxiYWNrKTsKLSAgICBzdGF0dXNfdCBwcmVwYXJlRm9yUmVhZGluZyhzaXplX3QgYnVmZmVyU2l6ZSk7Ci19OwotCi19IC8vIG5hbWVzcGFjZSBWNF8wCi19IC8vIG5hbWVzcGFjZSBhbmRyb2lkCi0KLSNlbmRpZiAvLyBBTkRST0lEX0hBUkRXQVJFX1NUUkVBTV9IQUxfSElETF80XzBfSApkaWZmIC0tZ2l0IGEvbWVkaWEvbGliYXVkaW9oYWwvNC4wL1N0cmVhbUhhbExvY2FsLmNwcCBiL21lZGlhL2xpYmF1ZGlvaGFsLzQuMC9TdHJlYW1IYWxMb2NhbC5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGU5ZDk2YmYuLjAwMDAwMDAKLS0tIGEvbWVkaWEvbGliYXVkaW9oYWwvNC4wL1N0cmVhbUhhbExvY2FsLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDM1NyArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDE2IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKLSAqCi0gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKLSAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KLSAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotICoKLSAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0gKgotICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQotICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKLSAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgotICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAotICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCi0gKi8KLQotI2RlZmluZSBMT0dfVEFHICJTdHJlYW1IYWxMb2NhbCIKLS8vI2RlZmluZSBMT0dfTkRFQlVHIDAKLQotI2luY2x1ZGUgPGhhcmR3YXJlL2F1ZGlvLmg+Ci0jaW5jbHVkZSA8dXRpbHMvTG9nLmg+Ci0KLSNpbmNsdWRlICJEZXZpY2VIYWxMb2NhbC5oIgotI2luY2x1ZGUgIlN0cmVhbUhhbExvY2FsLmgiCi0jaW5jbHVkZSAiVmVyc2lvblV0aWxzLmgiCi0KLW5hbWVzcGFjZSBhbmRyb2lkIHsKLW5hbWVzcGFjZSBWNF8wIHsKLQotU3RyZWFtSGFsTG9jYWw6OlN0cmVhbUhhbExvY2FsKGF1ZGlvX3N0cmVhbV90ICpzdHJlYW0sIHNwPERldmljZUhhbExvY2FsPiBkZXZpY2UpCi0gICAgICAgIDogbURldmljZShkZXZpY2UpLAotICAgICAgICAgIG1TdHJlYW0oc3RyZWFtKSB7Ci0gICAgLy8gSW5zdHJ1bWVudCBhdWRpbyBzaWduYWwgcG93ZXIgbG9nZ2luZy4KLSAgICAvLyBOb3RlOiBUaGlzIGFzc3VtZXMgY2hhbm5lbCBtYXNrLCBmb3JtYXQsIGFuZCBzYW1wbGUgcmF0ZSBkbyBub3QgY2hhbmdlIGFmdGVyIGNyZWF0aW9uLgotICAgIGlmIChtU3RyZWFtICE9IG51bGxwdHIgJiYgbVN0cmVhbVBvd2VyTG9nLmlzVXNlckRlYnVnT3JFbmdCdWlsZCgpKSB7Ci0gICAgICAgIG1TdHJlYW1Qb3dlckxvZy5pbml0KG1TdHJlYW0tPmdldF9zYW1wbGVfcmF0ZShtU3RyZWFtKSwKLSAgICAgICAgICAgICAgICBtU3RyZWFtLT5nZXRfY2hhbm5lbHMobVN0cmVhbSksCi0gICAgICAgICAgICAgICAgbVN0cmVhbS0+Z2V0X2Zvcm1hdChtU3RyZWFtKSk7Ci0gICAgfQotfQotCi1TdHJlYW1IYWxMb2NhbDo6flN0cmVhbUhhbExvY2FsKCkgewotICAgIG1TdHJlYW0gPSAwOwotICAgIG1EZXZpY2UuY2xlYXIoKTsKLX0KLQotc3RhdHVzX3QgU3RyZWFtSGFsTG9jYWw6OmdldFNhbXBsZVJhdGUodWludDMyX3QgKnJhdGUpIHsKLSAgICAqcmF0ZSA9IG1TdHJlYW0tPmdldF9zYW1wbGVfcmF0ZShtU3RyZWFtKTsKLSAgICByZXR1cm4gT0s7Ci19Ci0KLXN0YXR1c190IFN0cmVhbUhhbExvY2FsOjpnZXRCdWZmZXJTaXplKHNpemVfdCAqc2l6ZSkgewotICAgICpzaXplID0gbVN0cmVhbS0+Z2V0X2J1ZmZlcl9zaXplKG1TdHJlYW0pOwotICAgIHJldHVybiBPSzsKLX0KLQotc3RhdHVzX3QgU3RyZWFtSGFsTG9jYWw6OmdldENoYW5uZWxNYXNrKGF1ZGlvX2NoYW5uZWxfbWFza190ICptYXNrKSB7Ci0gICAgKm1hc2sgPSBtU3RyZWFtLT5nZXRfY2hhbm5lbHMobVN0cmVhbSk7Ci0gICAgcmV0dXJuIE9LOwotfQotCi1zdGF0dXNfdCBTdHJlYW1IYWxMb2NhbDo6Z2V0Rm9ybWF0KGF1ZGlvX2Zvcm1hdF90ICpmb3JtYXQpIHsKLSAgICAqZm9ybWF0ID0gbVN0cmVhbS0+Z2V0X2Zvcm1hdChtU3RyZWFtKTsKLSAgICByZXR1cm4gT0s7Ci19Ci0KLXN0YXR1c190IFN0cmVhbUhhbExvY2FsOjpnZXRBdWRpb1Byb3BlcnRpZXMoCi0gICAgICAgIHVpbnQzMl90ICpzYW1wbGVSYXRlLCBhdWRpb19jaGFubmVsX21hc2tfdCAqbWFzaywgYXVkaW9fZm9ybWF0X3QgKmZvcm1hdCkgewotICAgICpzYW1wbGVSYXRlID0gbVN0cmVhbS0+Z2V0X3NhbXBsZV9yYXRlKG1TdHJlYW0pOwotICAgICptYXNrID0gbVN0cmVhbS0+Z2V0X2NoYW5uZWxzKG1TdHJlYW0pOwotICAgICpmb3JtYXQgPSBtU3RyZWFtLT5nZXRfZm9ybWF0KG1TdHJlYW0pOwotICAgIHJldHVybiBPSzsKLX0KLQotc3RhdHVzX3QgU3RyZWFtSGFsTG9jYWw6OnNldFBhcmFtZXRlcnMoY29uc3QgU3RyaW5nOCYga3ZQYWlycykgewotICAgIHJldHVybiBtU3RyZWFtLT5zZXRfcGFyYW1ldGVycyhtU3RyZWFtLCBrdlBhaXJzLnN0cmluZygpKTsKLX0KLQotc3RhdHVzX3QgU3RyZWFtSGFsTG9jYWw6OmdldFBhcmFtZXRlcnMoY29uc3QgU3RyaW5nOCYga2V5cywgU3RyaW5nOCAqdmFsdWVzKSB7Ci0gICAgY2hhciAqaGFsVmFsdWVzID0gbVN0cmVhbS0+Z2V0X3BhcmFtZXRlcnMobVN0cmVhbSwga2V5cy5zdHJpbmcoKSk7Ci0gICAgaWYgKGhhbFZhbHVlcyAhPSBOVUxMKSB7Ci0gICAgICAgIHZhbHVlcy0+c2V0VG8oaGFsVmFsdWVzKTsKLSAgICAgICAgZnJlZShoYWxWYWx1ZXMpOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIHZhbHVlcy0+Y2xlYXIoKTsKLSAgICB9Ci0gICAgcmV0dXJuIE9LOwotfQotCi1zdGF0dXNfdCBTdHJlYW1IYWxMb2NhbDo6YWRkRWZmZWN0KHNwPEVmZmVjdEhhbEludGVyZmFjZT4pIHsKLSAgICBMT0dfQUxXQVlTX0ZBVEFMKCJMb2NhbCBzdHJlYW1zIGNhbiBub3QgaGF2ZSBlZmZlY3RzIik7Ci0gICAgcmV0dXJuIElOVkFMSURfT1BFUkFUSU9OOwotfQotCi1zdGF0dXNfdCBTdHJlYW1IYWxMb2NhbDo6cmVtb3ZlRWZmZWN0KHNwPEVmZmVjdEhhbEludGVyZmFjZT4pIHsKLSAgICBMT0dfQUxXQVlTX0ZBVEFMKCJMb2NhbCBzdHJlYW1zIGNhbiBub3QgaGF2ZSBlZmZlY3RzIik7Ci0gICAgcmV0dXJuIElOVkFMSURfT1BFUkFUSU9OOwotfQotCi1zdGF0dXNfdCBTdHJlYW1IYWxMb2NhbDo6c3RhbmRieSgpIHsKLSAgICByZXR1cm4gbVN0cmVhbS0+c3RhbmRieShtU3RyZWFtKTsKLX0KLQotc3RhdHVzX3QgU3RyZWFtSGFsTG9jYWw6OmR1bXAoaW50IGZkKSB7Ci0gICAgc3RhdHVzX3Qgc3RhdHVzID0gbVN0cmVhbS0+ZHVtcChtU3RyZWFtLCBmZCk7Ci0gICAgbVN0cmVhbVBvd2VyTG9nLmR1bXAoZmQpOwotICAgIHJldHVybiBzdGF0dXM7Ci19Ci0KLXN0YXR1c190IFN0cmVhbUhhbExvY2FsOjpzZXRIYWxUaHJlYWRQcmlvcml0eShpbnQpIHsKLSAgICAvLyBEb24ndCBuZWVkIHRvIGRvIGFueXRoaW5nIGFzIGxvY2FsIGhhbCBpcyBleGVjdXRlZCBieSBhdWRpb2ZsaW5nZXIgZGlyZWN0bHkKLSAgICAvLyBvbiB0aGUgc2FtZSB0aHJlYWQuCi0gICAgcmV0dXJuIE9LOwotfQotCi1TdHJlYW1PdXRIYWxMb2NhbDo6U3RyZWFtT3V0SGFsTG9jYWwoYXVkaW9fc3RyZWFtX291dF90ICpzdHJlYW0sIHNwPERldmljZUhhbExvY2FsPiBkZXZpY2UpCi0gICAgICAgIDogU3RyZWFtSGFsTG9jYWwoJnN0cmVhbS0+Y29tbW9uLCBkZXZpY2UpLCBtU3RyZWFtKHN0cmVhbSkgewotfQotCi1TdHJlYW1PdXRIYWxMb2NhbDo6flN0cmVhbU91dEhhbExvY2FsKCkgewotICAgIG1DYWxsYmFjay5jbGVhcigpOwotICAgIG1EZXZpY2UtPmNsb3NlT3V0cHV0U3RyZWFtKG1TdHJlYW0pOwotICAgIG1TdHJlYW0gPSAwOwotfQotCi1zdGF0dXNfdCBTdHJlYW1PdXRIYWxMb2NhbDo6Z2V0RnJhbWVTaXplKHNpemVfdCAqc2l6ZSkgewotICAgICpzaXplID0gYXVkaW9fc3RyZWFtX291dF9mcmFtZV9zaXplKG1TdHJlYW0pOwotICAgIHJldHVybiBPSzsKLX0KLQotc3RhdHVzX3QgU3RyZWFtT3V0SGFsTG9jYWw6OmdldExhdGVuY3kodWludDMyX3QgKmxhdGVuY3kpIHsKLSAgICAqbGF0ZW5jeSA9IG1TdHJlYW0tPmdldF9sYXRlbmN5KG1TdHJlYW0pOwotICAgIHJldHVybiBPSzsKLX0KLQotc3RhdHVzX3QgU3RyZWFtT3V0SGFsTG9jYWw6OnNldFZvbHVtZShmbG9hdCBsZWZ0LCBmbG9hdCByaWdodCkgewotICAgIGlmIChtU3RyZWFtLT5zZXRfdm9sdW1lID09IE5VTEwpIHJldHVybiBJTlZBTElEX09QRVJBVElPTjsKLSAgICByZXR1cm4gbVN0cmVhbS0+c2V0X3ZvbHVtZShtU3RyZWFtLCBsZWZ0LCByaWdodCk7Ci19Ci0KLXN0YXR1c190IFN0cmVhbU91dEhhbExvY2FsOjp3cml0ZShjb25zdCB2b2lkICpidWZmZXIsIHNpemVfdCBieXRlcywgc2l6ZV90ICp3cml0dGVuKSB7Ci0gICAgc3NpemVfdCB3cml0ZVJlc3VsdCA9IG1TdHJlYW0tPndyaXRlKG1TdHJlYW0sIGJ1ZmZlciwgYnl0ZXMpOwotICAgIGlmICh3cml0ZVJlc3VsdCA+IDApIHsKLSAgICAgICAgKndyaXR0ZW4gPSB3cml0ZVJlc3VsdDsKLSAgICAgICAgbVN0cmVhbVBvd2VyTG9nLmxvZyhidWZmZXIsICp3cml0dGVuKTsKLSAgICAgICAgcmV0dXJuIE9LOwotICAgIH0gZWxzZSB7Ci0gICAgICAgICp3cml0dGVuID0gMDsKLSAgICAgICAgcmV0dXJuIHdyaXRlUmVzdWx0OwotICAgIH0KLX0KLQotc3RhdHVzX3QgU3RyZWFtT3V0SGFsTG9jYWw6OmdldFJlbmRlclBvc2l0aW9uKHVpbnQzMl90ICpkc3BGcmFtZXMpIHsKLSAgICByZXR1cm4gbVN0cmVhbS0+Z2V0X3JlbmRlcl9wb3NpdGlvbihtU3RyZWFtLCBkc3BGcmFtZXMpOwotfQotCi1zdGF0dXNfdCBTdHJlYW1PdXRIYWxMb2NhbDo6Z2V0TmV4dFdyaXRlVGltZXN0YW1wKGludDY0X3QgKnRpbWVzdGFtcCkgewotICAgIGlmIChtU3RyZWFtLT5nZXRfbmV4dF93cml0ZV90aW1lc3RhbXAgPT0gTlVMTCkgcmV0dXJuIElOVkFMSURfT1BFUkFUSU9OOwotICAgIHJldHVybiBtU3RyZWFtLT5nZXRfbmV4dF93cml0ZV90aW1lc3RhbXAobVN0cmVhbSwgdGltZXN0YW1wKTsKLX0KLQotc3RhdHVzX3QgU3RyZWFtT3V0SGFsTG9jYWw6OnNldENhbGxiYWNrKHdwPFN0cmVhbU91dEhhbEludGVyZmFjZUNhbGxiYWNrPiBjYWxsYmFjaykgewotICAgIGlmIChtU3RyZWFtLT5zZXRfY2FsbGJhY2sgPT0gTlVMTCkgcmV0dXJuIElOVkFMSURfT1BFUkFUSU9OOwotICAgIHN0YXR1c190IHJlc3VsdCA9IG1TdHJlYW0tPnNldF9jYWxsYmFjayhtU3RyZWFtLCBTdHJlYW1PdXRIYWxMb2NhbDo6YXN5bmNDYWxsYmFjaywgdGhpcyk7Ci0gICAgaWYgKHJlc3VsdCA9PSBPSykgewotICAgICAgICBtQ2FsbGJhY2sgPSBjYWxsYmFjazsKLSAgICB9Ci0gICAgcmV0dXJuIHJlc3VsdDsKLX0KLQotLy8gc3RhdGljCi1pbnQgU3RyZWFtT3V0SGFsTG9jYWw6OmFzeW5jQ2FsbGJhY2soc3RyZWFtX2NhbGxiYWNrX2V2ZW50X3QgZXZlbnQsIHZvaWQqLCB2b2lkICpjb29raWUpIHsKLSAgICAvLyBXZSBhY3QgYXMgaWYgd2UgZ2F2ZSBhIHdwPFN0cmVhbU91dEhhbExvY2FsPiB0byBIQUwuIFRoaXMgd2F5IHdlIHNob3VsZCBoYW5kbGUKLSAgICAvLyBjb3JyZWN0bHkgdGhlIGNhc2Ugd2hlbiB0aGUgY2FsbGJhY2sgaXMgaW52b2tlZCB3aGlsZSBTdHJlYW1PdXRIYWxMb2NhbCdzIGRlc3RydWN0b3IgaXMKLSAgICAvLyBhbHJlYWR5IHJ1bm5pbmcsIGJlY2F1c2UgdGhlIGRlc3RydWN0b3IgaXMgaW52b2tlZCBhZnRlciB0aGUgcmVmY291bnQgaGFzIGJlZW4gYXRvbWljYWxseQotICAgIC8vIGRlY3JlbWVudGVkLgotICAgIHdwPFN0cmVhbU91dEhhbExvY2FsPiB3ZWFrU2VsZihzdGF0aWNfY2FzdDxTdHJlYW1PdXRIYWxMb2NhbCo+KGNvb2tpZSkpOwotICAgIHNwPFN0cmVhbU91dEhhbExvY2FsPiBzZWxmID0gd2Vha1NlbGYucHJvbW90ZSgpOwotICAgIGlmIChzZWxmID09IDApIHJldHVybiAwOwotICAgIHNwPFN0cmVhbU91dEhhbEludGVyZmFjZUNhbGxiYWNrPiBjYWxsYmFjayA9IHNlbGYtPm1DYWxsYmFjay5wcm9tb3RlKCk7Ci0gICAgaWYgKGNhbGxiYWNrID09IDApIHJldHVybiAwOwotICAgIEFMT0dWKCJhc3luY0NhbGxiYWNrKCkgZXZlbnQgJWQiLCBldmVudCk7Ci0gICAgc3dpdGNoIChldmVudCkgewotICAgICAgICBjYXNlIFNUUkVBTV9DQktfRVZFTlRfV1JJVEVfUkVBRFk6Ci0gICAgICAgICAgICBjYWxsYmFjay0+b25Xcml0ZVJlYWR5KCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBTVFJFQU1fQ0JLX0VWRU5UX0RSQUlOX1JFQURZOgotICAgICAgICAgICAgY2FsbGJhY2stPm9uRHJhaW5SZWFkeSgpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgU1RSRUFNX0NCS19FVkVOVF9FUlJPUjoKLSAgICAgICAgICAgIGNhbGxiYWNrLT5vbkVycm9yKCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIEFMT0dXKCJhc3luY0NhbGxiYWNrKCkgdW5rbm93biBldmVudCAlZCIsIGV2ZW50KTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgIH0KLSAgICByZXR1cm4gMDsKLX0KLQotc3RhdHVzX3QgU3RyZWFtT3V0SGFsTG9jYWw6OnN1cHBvcnRzUGF1c2VBbmRSZXN1bWUoYm9vbCAqc3VwcG9ydHNQYXVzZSwgYm9vbCAqc3VwcG9ydHNSZXN1bWUpIHsKLSAgICAqc3VwcG9ydHNQYXVzZSA9IG1TdHJlYW0tPnBhdXNlICE9IE5VTEw7Ci0gICAgKnN1cHBvcnRzUmVzdW1lID0gbVN0cmVhbS0+cmVzdW1lICE9IE5VTEw7Ci0gICAgcmV0dXJuIE9LOwotfQotCi1zdGF0dXNfdCBTdHJlYW1PdXRIYWxMb2NhbDo6cGF1c2UoKSB7Ci0gICAgaWYgKG1TdHJlYW0tPnBhdXNlID09IE5VTEwpIHJldHVybiBJTlZBTElEX09QRVJBVElPTjsKLSAgICByZXR1cm4gbVN0cmVhbS0+cGF1c2UobVN0cmVhbSk7Ci19Ci0KLXN0YXR1c190IFN0cmVhbU91dEhhbExvY2FsOjpyZXN1bWUoKSB7Ci0gICAgaWYgKG1TdHJlYW0tPnJlc3VtZSA9PSBOVUxMKSByZXR1cm4gSU5WQUxJRF9PUEVSQVRJT047Ci0gICAgcmV0dXJuIG1TdHJlYW0tPnJlc3VtZShtU3RyZWFtKTsKLX0KLQotc3RhdHVzX3QgU3RyZWFtT3V0SGFsTG9jYWw6OnN1cHBvcnRzRHJhaW4oYm9vbCAqc3VwcG9ydHNEcmFpbikgewotICAgICpzdXBwb3J0c0RyYWluID0gbVN0cmVhbS0+ZHJhaW4gIT0gTlVMTDsKLSAgICByZXR1cm4gT0s7Ci19Ci0KLXN0YXR1c190IFN0cmVhbU91dEhhbExvY2FsOjpkcmFpbihib29sIGVhcmx5Tm90aWZ5KSB7Ci0gICAgaWYgKG1TdHJlYW0tPmRyYWluID09IE5VTEwpIHJldHVybiBJTlZBTElEX09QRVJBVElPTjsKLSAgICByZXR1cm4gbVN0cmVhbS0+ZHJhaW4obVN0cmVhbSwgZWFybHlOb3RpZnkgPyBBVURJT19EUkFJTl9FQVJMWV9OT1RJRlkgOiBBVURJT19EUkFJTl9BTEwpOwotfQotCi1zdGF0dXNfdCBTdHJlYW1PdXRIYWxMb2NhbDo6Zmx1c2goKSB7Ci0gICAgaWYgKG1TdHJlYW0tPmZsdXNoID09IE5VTEwpIHJldHVybiBJTlZBTElEX09QRVJBVElPTjsKLSAgICByZXR1cm4gbVN0cmVhbS0+Zmx1c2gobVN0cmVhbSk7Ci19Ci0KLXN0YXR1c190IFN0cmVhbU91dEhhbExvY2FsOjpnZXRQcmVzZW50YXRpb25Qb3NpdGlvbih1aW50NjRfdCAqZnJhbWVzLCBzdHJ1Y3QgdGltZXNwZWMgKnRpbWVzdGFtcCkgewotICAgIGlmIChtU3RyZWFtLT5nZXRfcHJlc2VudGF0aW9uX3Bvc2l0aW9uID09IE5VTEwpIHJldHVybiBJTlZBTElEX09QRVJBVElPTjsKLSAgICByZXR1cm4gbVN0cmVhbS0+Z2V0X3ByZXNlbnRhdGlvbl9wb3NpdGlvbihtU3RyZWFtLCBmcmFtZXMsIHRpbWVzdGFtcCk7Ci19Ci0KLXN0YXR1c190IFN0cmVhbU91dEhhbExvY2FsOjp1cGRhdGVTb3VyY2VNZXRhZGF0YShjb25zdCBTb3VyY2VNZXRhZGF0YSYgc291cmNlTWV0YWRhdGEpIHsKLSAgICBpZiAobVN0cmVhbS0+dXBkYXRlX3NvdXJjZV9tZXRhZGF0YSA9PSBudWxscHRyKSB7Ci0gICAgICAgIHJldHVybiBJTlZBTElEX09QRVJBVElPTjsKLSAgICB9Ci0gICAgY29uc3Qgc291cmNlX21ldGFkYXRhX3QgbWV0YWRhdGEgewotICAgICAgICAudHJhY2tfY291bnQgPSBzb3VyY2VNZXRhZGF0YS50cmFja3Muc2l6ZSgpLAotICAgICAgICAvLyBjb25zdCBjYXN0IGlzIGZpbmUgYXMgaXQgaXMgaW4gYSBjb25zdCBzdHJ1Y3R1cmUKLSAgICAgICAgLnRyYWNrcyA9IGNvbnN0X2Nhc3Q8cGxheWJhY2tfdHJhY2tfbWV0YWRhdGEqPihzb3VyY2VNZXRhZGF0YS50cmFja3MuZGF0YSgpKSwKLSAgICB9OwotICAgIG1TdHJlYW0tPnVwZGF0ZV9zb3VyY2VfbWV0YWRhdGEobVN0cmVhbSwgJm1ldGFkYXRhKTsKLSAgICByZXR1cm4gT0s7Ci19Ci0KLXN0YXR1c190IFN0cmVhbU91dEhhbExvY2FsOjpzdGFydCgpIHsKLSAgICBpZiAobVN0cmVhbS0+c3RhcnQgPT0gTlVMTCkgcmV0dXJuIElOVkFMSURfT1BFUkFUSU9OOwotICAgIHJldHVybiBtU3RyZWFtLT5zdGFydChtU3RyZWFtKTsKLX0KLQotc3RhdHVzX3QgU3RyZWFtT3V0SGFsTG9jYWw6OnN0b3AoKSB7Ci0gICAgaWYgKG1TdHJlYW0tPnN0b3AgPT0gTlVMTCkgcmV0dXJuIElOVkFMSURfT1BFUkFUSU9OOwotICAgIHJldHVybiBtU3RyZWFtLT5zdG9wKG1TdHJlYW0pOwotfQotCi1zdGF0dXNfdCBTdHJlYW1PdXRIYWxMb2NhbDo6Y3JlYXRlTW1hcEJ1ZmZlcihpbnQzMl90IG1pblNpemVGcmFtZXMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGF1ZGlvX21tYXBfYnVmZmVyX2luZm8gKmluZm8pIHsKLSAgICBpZiAobVN0cmVhbS0+Y3JlYXRlX21tYXBfYnVmZmVyID09IE5VTEwpIHJldHVybiBJTlZBTElEX09QRVJBVElPTjsKLSAgICByZXR1cm4gbVN0cmVhbS0+Y3JlYXRlX21tYXBfYnVmZmVyKG1TdHJlYW0sIG1pblNpemVGcmFtZXMsIGluZm8pOwotfQotCi1zdGF0dXNfdCBTdHJlYW1PdXRIYWxMb2NhbDo6Z2V0TW1hcFBvc2l0aW9uKHN0cnVjdCBhdWRpb19tbWFwX3Bvc2l0aW9uICpwb3NpdGlvbikgewotICAgIGlmIChtU3RyZWFtLT5nZXRfbW1hcF9wb3NpdGlvbiA9PSBOVUxMKSByZXR1cm4gSU5WQUxJRF9PUEVSQVRJT047Ci0gICAgcmV0dXJuIG1TdHJlYW0tPmdldF9tbWFwX3Bvc2l0aW9uKG1TdHJlYW0sIHBvc2l0aW9uKTsKLX0KLQotU3RyZWFtSW5IYWxMb2NhbDo6U3RyZWFtSW5IYWxMb2NhbChhdWRpb19zdHJlYW1faW5fdCAqc3RyZWFtLCBzcDxEZXZpY2VIYWxMb2NhbD4gZGV2aWNlKQotICAgICAgICA6IFN0cmVhbUhhbExvY2FsKCZzdHJlYW0tPmNvbW1vbiwgZGV2aWNlKSwgbVN0cmVhbShzdHJlYW0pIHsKLX0KLQotU3RyZWFtSW5IYWxMb2NhbDo6flN0cmVhbUluSGFsTG9jYWwoKSB7Ci0gICAgbURldmljZS0+Y2xvc2VJbnB1dFN0cmVhbShtU3RyZWFtKTsKLSAgICBtU3RyZWFtID0gMDsKLX0KLQotc3RhdHVzX3QgU3RyZWFtSW5IYWxMb2NhbDo6Z2V0RnJhbWVTaXplKHNpemVfdCAqc2l6ZSkgewotICAgICpzaXplID0gYXVkaW9fc3RyZWFtX2luX2ZyYW1lX3NpemUobVN0cmVhbSk7Ci0gICAgcmV0dXJuIE9LOwotfQotCi1zdGF0dXNfdCBTdHJlYW1JbkhhbExvY2FsOjpzZXRHYWluKGZsb2F0IGdhaW4pIHsKLSAgICByZXR1cm4gbVN0cmVhbS0+c2V0X2dhaW4obVN0cmVhbSwgZ2Fpbik7Ci19Ci0KLXN0YXR1c190IFN0cmVhbUluSGFsTG9jYWw6OnJlYWQodm9pZCAqYnVmZmVyLCBzaXplX3QgYnl0ZXMsIHNpemVfdCAqcmVhZCkgewotICAgIHNzaXplX3QgcmVhZFJlc3VsdCA9IG1TdHJlYW0tPnJlYWQobVN0cmVhbSwgYnVmZmVyLCBieXRlcyk7Ci0gICAgaWYgKHJlYWRSZXN1bHQgPiAwKSB7Ci0gICAgICAgICpyZWFkID0gcmVhZFJlc3VsdDsKLSAgICAgICAgbVN0cmVhbVBvd2VyTG9nLmxvZyggYnVmZmVyLCAqcmVhZCk7Ci0gICAgICAgIHJldHVybiBPSzsKLSAgICB9IGVsc2UgewotICAgICAgICAqcmVhZCA9IDA7Ci0gICAgICAgIHJldHVybiByZWFkUmVzdWx0OwotICAgIH0KLX0KLQotc3RhdHVzX3QgU3RyZWFtSW5IYWxMb2NhbDo6Z2V0SW5wdXRGcmFtZXNMb3N0KHVpbnQzMl90ICpmcmFtZXNMb3N0KSB7Ci0gICAgKmZyYW1lc0xvc3QgPSBtU3RyZWFtLT5nZXRfaW5wdXRfZnJhbWVzX2xvc3QobVN0cmVhbSk7Ci0gICAgcmV0dXJuIE9LOwotfQotCi1zdGF0dXNfdCBTdHJlYW1JbkhhbExvY2FsOjpnZXRDYXB0dXJlUG9zaXRpb24oaW50NjRfdCAqZnJhbWVzLCBpbnQ2NF90ICp0aW1lKSB7Ci0gICAgaWYgKG1TdHJlYW0tPmdldF9jYXB0dXJlX3Bvc2l0aW9uID09IE5VTEwpIHJldHVybiBJTlZBTElEX09QRVJBVElPTjsKLSAgICByZXR1cm4gbVN0cmVhbS0+Z2V0X2NhcHR1cmVfcG9zaXRpb24obVN0cmVhbSwgZnJhbWVzLCB0aW1lKTsKLX0KLQotc3RhdHVzX3QgU3RyZWFtSW5IYWxMb2NhbDo6dXBkYXRlU2lua01ldGFkYXRhKGNvbnN0IFNpbmtNZXRhZGF0YSYgc2lua01ldGFkYXRhKSB7Ci0gICAgaWYgKG1TdHJlYW0tPnVwZGF0ZV9zaW5rX21ldGFkYXRhID09IG51bGxwdHIpIHsKLSAgICAgICAgcmV0dXJuIElOVkFMSURfT1BFUkFUSU9OOwotICAgIH0KLSAgICBjb25zdCBzaW5rX21ldGFkYXRhX3QgbWV0YWRhdGEgewotICAgICAgICAudHJhY2tfY291bnQgPSBzaW5rTWV0YWRhdGEudHJhY2tzLnNpemUoKSwKLSAgICAgICAgLy8gY29uc3QgY2FzdCBpcyBmaW5lIGFzIGl0IGlzIGluIGEgY29uc3Qgc3RydWN0dXJlCi0gICAgICAgIC50cmFja3MgPSBjb25zdF9jYXN0PHJlY29yZF90cmFja19tZXRhZGF0YSo+KHNpbmtNZXRhZGF0YS50cmFja3MuZGF0YSgpKSwKLSAgICB9OwotICAgIG1TdHJlYW0tPnVwZGF0ZV9zaW5rX21ldGFkYXRhKG1TdHJlYW0sICZtZXRhZGF0YSk7Ci0gICAgcmV0dXJuIE9LOwotfQotCi1zdGF0dXNfdCBTdHJlYW1JbkhhbExvY2FsOjpzdGFydCgpIHsKLSAgICBpZiAobVN0cmVhbS0+c3RhcnQgPT0gTlVMTCkgcmV0dXJuIElOVkFMSURfT1BFUkFUSU9OOwotICAgIHJldHVybiBtU3RyZWFtLT5zdGFydChtU3RyZWFtKTsKLX0KLQotc3RhdHVzX3QgU3RyZWFtSW5IYWxMb2NhbDo6c3RvcCgpIHsKLSAgICBpZiAobVN0cmVhbS0+c3RvcCA9PSBOVUxMKSByZXR1cm4gSU5WQUxJRF9PUEVSQVRJT047Ci0gICAgcmV0dXJuIG1TdHJlYW0tPnN0b3AobVN0cmVhbSk7Ci19Ci0KLXN0YXR1c190IFN0cmVhbUluSGFsTG9jYWw6OmNyZWF0ZU1tYXBCdWZmZXIoaW50MzJfdCBtaW5TaXplRnJhbWVzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBhdWRpb19tbWFwX2J1ZmZlcl9pbmZvICppbmZvKSB7Ci0gICAgaWYgKG1TdHJlYW0tPmNyZWF0ZV9tbWFwX2J1ZmZlciA9PSBOVUxMKSByZXR1cm4gSU5WQUxJRF9PUEVSQVRJT047Ci0gICAgcmV0dXJuIG1TdHJlYW0tPmNyZWF0ZV9tbWFwX2J1ZmZlcihtU3RyZWFtLCBtaW5TaXplRnJhbWVzLCBpbmZvKTsKLX0KLQotc3RhdHVzX3QgU3RyZWFtSW5IYWxMb2NhbDo6Z2V0TW1hcFBvc2l0aW9uKHN0cnVjdCBhdWRpb19tbWFwX3Bvc2l0aW9uICpwb3NpdGlvbikgewotICAgIGlmIChtU3RyZWFtLT5nZXRfbW1hcF9wb3NpdGlvbiA9PSBOVUxMKSByZXR1cm4gSU5WQUxJRF9PUEVSQVRJT047Ci0gICAgcmV0dXJuIG1TdHJlYW0tPmdldF9tbWFwX3Bvc2l0aW9uKG1TdHJlYW0sIHBvc2l0aW9uKTsKLX0KLQotc3RhdHVzX3QgU3RyZWFtSW5IYWxMb2NhbDo6Z2V0QWN0aXZlTWljcm9waG9uZXMoc3RkOjp2ZWN0b3I8bWVkaWE6Ok1pY3JvcGhvbmVJbmZvPiAqbWljcm9waG9uZXMpIHsKLSAgICBpZiAobVN0cmVhbS0+Z2V0X2FjdGl2ZV9taWNyb3Bob25lcyA9PSBOVUxMKSByZXR1cm4gSU5WQUxJRF9PUEVSQVRJT047Ci0gICAgc2l6ZV90IGFjdHVhbF9taWNzID0gQVVESU9fTUlDUk9QSE9ORV9NQVhfQ09VTlQ7Ci0gICAgYXVkaW9fbWljcm9waG9uZV9jaGFyYWN0ZXJpc3RpY190IG1pY19hcnJheVtBVURJT19NSUNST1BIT05FX01BWF9DT1VOVF07Ci0gICAgc3RhdHVzX3Qgc3RhdHVzID0gbVN0cmVhbS0+Z2V0X2FjdGl2ZV9taWNyb3Bob25lcyhtU3RyZWFtLCAmbWljX2FycmF5WzBdLCAmYWN0dWFsX21pY3MpOwotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgYWN0dWFsX21pY3M7IGkrKykgewotICAgICAgICBtZWRpYTo6TWljcm9waG9uZUluZm8gbWljcm9waG9uZUluZm8gPSBtZWRpYTo6TWljcm9waG9uZUluZm8obWljX2FycmF5W2ldKTsKLSAgICAgICAgbWljcm9waG9uZXMtPnB1c2hfYmFjayhtaWNyb3Bob25lSW5mbyk7Ci0gICAgfQotICAgIHJldHVybiBzdGF0dXM7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFY0XzAKLX0gLy8gbmFtZXNwYWNlIGFuZHJvaWQKZGlmZiAtLWdpdCBhL21lZGlhL2xpYmF1ZGlvaGFsLzQuMC9TdHJlYW1IYWxMb2NhbC5oIGIvbWVkaWEvbGliYXVkaW9oYWwvNC4wL1N0cmVhbUhhbExvY2FsLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDcyMzc1MDkuLjAwMDAwMDAKLS0tIGEvbWVkaWEvbGliYXVkaW9oYWwvNC4wL1N0cmVhbUhhbExvY2FsLmgKKysrIC9kZXYvbnVsbApAQCAtMSwyMjEgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNiBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0Ci0gKgotICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7Ci0gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCi0gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLSAqCi0gKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotICoKLSAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKLSAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCi0gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KLSAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKLSAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgotICovCi0KLSNpZm5kZWYgQU5EUk9JRF9IQVJEV0FSRV9TVFJFQU1fSEFMX0xPQ0FMXzRfMF9ICi0jZGVmaW5lIEFORFJPSURfSEFSRFdBUkVfU1RSRUFNX0hBTF9MT0NBTF80XzBfSAotCi0jaW5jbHVkZSA8bWVkaWEvYXVkaW9oYWwvU3RyZWFtSGFsSW50ZXJmYWNlLmg+Ci0jaW5jbHVkZSAiU3RyZWFtUG93ZXJMb2cuaCIKLQotbmFtZXNwYWNlIGFuZHJvaWQgewotbmFtZXNwYWNlIFY0XzAgewotCi1jbGFzcyBEZXZpY2VIYWxMb2NhbDsKLQotY2xhc3MgU3RyZWFtSGFsTG9jYWwgOiBwdWJsaWMgdmlydHVhbCBTdHJlYW1IYWxJbnRlcmZhY2UKLXsKLSAgcHVibGljOgotICAgIC8vIFJldHVybiB0aGUgc2FtcGxpbmcgcmF0ZSBpbiBIeiAtIGVnLiA0NDEwMC4KLSAgICB2aXJ0dWFsIHN0YXR1c190IGdldFNhbXBsZVJhdGUodWludDMyX3QgKnJhdGUpOwotCi0gICAgLy8gUmV0dXJuIHNpemUgb2YgaW5wdXQvb3V0cHV0IGJ1ZmZlciBpbiBieXRlcyBmb3IgdGhpcyBzdHJlYW0gLSBlZy4gNDgwMC4KLSAgICB2aXJ0dWFsIHN0YXR1c190IGdldEJ1ZmZlclNpemUoc2l6ZV90ICpzaXplKTsKLQotICAgIC8vIFJldHVybiB0aGUgY2hhbm5lbCBtYXNrLgotICAgIHZpcnR1YWwgc3RhdHVzX3QgZ2V0Q2hhbm5lbE1hc2soYXVkaW9fY2hhbm5lbF9tYXNrX3QgKm1hc2spOwotCi0gICAgLy8gUmV0dXJuIHRoZSBhdWRpbyBmb3JtYXQgLSBlLmcuIEFVRElPX0ZPUk1BVF9QQ01fMTZfQklULgotICAgIHZpcnR1YWwgc3RhdHVzX3QgZ2V0Rm9ybWF0KGF1ZGlvX2Zvcm1hdF90ICpmb3JtYXQpOwotCi0gICAgLy8gQ29udmVuaWVuY2UgbWV0aG9kLgotICAgIHZpcnR1YWwgc3RhdHVzX3QgZ2V0QXVkaW9Qcm9wZXJ0aWVzKAotICAgICAgICAgICAgdWludDMyX3QgKnNhbXBsZVJhdGUsIGF1ZGlvX2NoYW5uZWxfbWFza190ICptYXNrLCBhdWRpb19mb3JtYXRfdCAqZm9ybWF0KTsKLQotICAgIC8vIFNldCBhdWRpbyBzdHJlYW0gcGFyYW1ldGVycy4KLSAgICB2aXJ0dWFsIHN0YXR1c190IHNldFBhcmFtZXRlcnMoY29uc3QgU3RyaW5nOCYga3ZQYWlycyk7Ci0KLSAgICAvLyBHZXQgYXVkaW8gc3RyZWFtIHBhcmFtZXRlcnMuCi0gICAgdmlydHVhbCBzdGF0dXNfdCBnZXRQYXJhbWV0ZXJzKGNvbnN0IFN0cmluZzgmIGtleXMsIFN0cmluZzggKnZhbHVlcyk7Ci0KLSAgICAvLyBBZGQgb3IgcmVtb3ZlIHRoZSBlZmZlY3Qgb24gdGhlIHN0cmVhbS4KLSAgICB2aXJ0dWFsIHN0YXR1c190IGFkZEVmZmVjdChzcDxFZmZlY3RIYWxJbnRlcmZhY2U+IGVmZmVjdCk7Ci0gICAgdmlydHVhbCBzdGF0dXNfdCByZW1vdmVFZmZlY3Qoc3A8RWZmZWN0SGFsSW50ZXJmYWNlPiBlZmZlY3QpOwotCi0gICAgLy8gUHV0IHRoZSBhdWRpbyBoYXJkd2FyZSBpbnB1dC9vdXRwdXQgaW50byBzdGFuZGJ5IG1vZGUuCi0gICAgdmlydHVhbCBzdGF0dXNfdCBzdGFuZGJ5KCk7Ci0KLSAgICB2aXJ0dWFsIHN0YXR1c190IGR1bXAoaW50IGZkKTsKLQotICAgIC8vIFN0YXJ0IGEgc3RyZWFtIG9wZXJhdGluZyBpbiBtbWFwIG1vZGUuCi0gICAgdmlydHVhbCBzdGF0dXNfdCBzdGFydCgpID0gMDsKLQotICAgIC8vIFN0b3AgYSBzdHJlYW0gb3BlcmF0aW5nIGluIG1tYXAgbW9kZS4KLSAgICB2aXJ0dWFsIHN0YXR1c190IHN0b3AoKSA9IDA7Ci0KLSAgICAvLyBSZXRyaWV2ZSBpbmZvcm1hdGlvbiBvbiB0aGUgZGF0YSBidWZmZXIgaW4gbW1hcCBtb2RlLgotICAgIHZpcnR1YWwgc3RhdHVzX3QgY3JlYXRlTW1hcEJ1ZmZlcihpbnQzMl90IG1pblNpemVGcmFtZXMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBhdWRpb19tbWFwX2J1ZmZlcl9pbmZvICppbmZvKSA9IDA7Ci0KLSAgICAvLyBHZXQgY3VycmVudCByZWFkL3dyaXRlIHBvc2l0aW9uIGluIHRoZSBtbWFwIGJ1ZmZlcgotICAgIHZpcnR1YWwgc3RhdHVzX3QgZ2V0TW1hcFBvc2l0aW9uKHN0cnVjdCBhdWRpb19tbWFwX3Bvc2l0aW9uICpwb3NpdGlvbikgPSAwOwotCi0gICAgLy8gU2V0IHRoZSBwcmlvcml0eSBvZiB0aGUgdGhyZWFkIHRoYXQgaW50ZXJhY3RzIHdpdGggdGhlIEhBTAotICAgIC8vIChtdXN0IG1hdGNoIHRoZSBwcmlvcml0eSBvZiB0aGUgYXVkaW9mbGluZ2VyJ3MgdGhyZWFkIHRoYXQgY2FsbHMgJ3JlYWQnIC8gJ3dyaXRlJykKLSAgICB2aXJ0dWFsIHN0YXR1c190IHNldEhhbFRocmVhZFByaW9yaXR5KGludCBwcmlvcml0eSk7Ci0KLSAgcHJvdGVjdGVkOgotICAgIC8vIFN1YmNsYXNzZXMgY2FuIG5vdCBiZSBjb25zdHJ1Y3RlZCBkaXJlY3RseSBieSBjbGllbnRzLgotICAgIFN0cmVhbUhhbExvY2FsKGF1ZGlvX3N0cmVhbV90ICpzdHJlYW0sIHNwPERldmljZUhhbExvY2FsPiBkZXZpY2UpOwotCi0gICAgLy8gVGhlIGRlc3RydWN0b3IgYXV0b21hdGljYWxseSBjbG9zZXMgdGhlIHN0cmVhbS4KLSAgICB2aXJ0dWFsIH5TdHJlYW1IYWxMb2NhbCgpOwotCi0gICAgc3A8RGV2aWNlSGFsTG9jYWw+IG1EZXZpY2U7Ci0KLSAgICAvLyBtU3RyZWFtUG93ZXJMb2cgaXMgdXNlZCBmb3IgYXVkaW8gc2lnbmFsIHBvd2VyIGxvZ2dpbmcuCi0gICAgU3RyZWFtUG93ZXJMb2cgbVN0cmVhbVBvd2VyTG9nOwotCi0gIHByaXZhdGU6Ci0gICAgYXVkaW9fc3RyZWFtX3QgKm1TdHJlYW07Ci19OwotCi1jbGFzcyBTdHJlYW1PdXRIYWxMb2NhbCA6IHB1YmxpYyBTdHJlYW1PdXRIYWxJbnRlcmZhY2UsIHB1YmxpYyBTdHJlYW1IYWxMb2NhbCB7Ci0gIHB1YmxpYzoKLSAgICAvLyBSZXR1cm4gdGhlIGZyYW1lIHNpemUgKG51bWJlciBvZiBieXRlcyBwZXIgc2FtcGxlKSBvZiBhIHN0cmVhbS4KLSAgICB2aXJ0dWFsIHN0YXR1c190IGdldEZyYW1lU2l6ZShzaXplX3QgKnNpemUpOwotCi0gICAgLy8gUmV0dXJuIHRoZSBhdWRpbyBoYXJkd2FyZSBkcml2ZXIgZXN0aW1hdGVkIGxhdGVuY3kgaW4gbWlsbGlzZWNvbmRzLgotICAgIHZpcnR1YWwgc3RhdHVzX3QgZ2V0TGF0ZW5jeSh1aW50MzJfdCAqbGF0ZW5jeSk7Ci0KLSAgICAvLyBVc2UgdGhpcyBtZXRob2QgaW4gc2l0dWF0aW9ucyB3aGVyZSBhdWRpbyBtaXhpbmcgaXMgZG9uZSBpbiB0aGUgaGFyZHdhcmUuCi0gICAgdmlydHVhbCBzdGF0dXNfdCBzZXRWb2x1bWUoZmxvYXQgbGVmdCwgZmxvYXQgcmlnaHQpOwotCi0gICAgLy8gV3JpdGUgYXVkaW8gYnVmZmVyIHRvIGRyaXZlci4KLSAgICB2aXJ0dWFsIHN0YXR1c190IHdyaXRlKGNvbnN0IHZvaWQgKmJ1ZmZlciwgc2l6ZV90IGJ5dGVzLCBzaXplX3QgKndyaXR0ZW4pOwotCi0gICAgLy8gUmV0dXJuIHRoZSBudW1iZXIgb2YgYXVkaW8gZnJhbWVzIHdyaXR0ZW4gYnkgdGhlIGF1ZGlvIGRzcCB0byBEQUMgc2luY2UKLSAgICAvLyB0aGUgb3V0cHV0IGhhcyBleGl0ZWQgc3RhbmRieS4KLSAgICB2aXJ0dWFsIHN0YXR1c190IGdldFJlbmRlclBvc2l0aW9uKHVpbnQzMl90ICpkc3BGcmFtZXMpOwotCi0gICAgLy8gR2V0IHRoZSBsb2NhbCB0aW1lIGF0IHdoaWNoIHRoZSBuZXh0IHdyaXRlIHRvIHRoZSBhdWRpbyBkcml2ZXIgd2lsbCBiZSBwcmVzZW50ZWQuCi0gICAgdmlydHVhbCBzdGF0dXNfdCBnZXROZXh0V3JpdGVUaW1lc3RhbXAoaW50NjRfdCAqdGltZXN0YW1wKTsKLQotICAgIC8vIFNldCB0aGUgY2FsbGJhY2sgZm9yIG5vdGlmeWluZyBjb21wbGV0aW9uIG9mIG5vbi1ibG9ja2luZyB3cml0ZSBhbmQgZHJhaW4uCi0gICAgdmlydHVhbCBzdGF0dXNfdCBzZXRDYWxsYmFjayh3cDxTdHJlYW1PdXRIYWxJbnRlcmZhY2VDYWxsYmFjaz4gY2FsbGJhY2spOwotCi0gICAgLy8gUmV0dXJucyB3aGV0aGVyIHBhdXNlIGFuZCByZXN1bWUgb3BlcmF0aW9ucyBhcmUgc3VwcG9ydGVkLgotICAgIHZpcnR1YWwgc3RhdHVzX3Qgc3VwcG9ydHNQYXVzZUFuZFJlc3VtZShib29sICpzdXBwb3J0c1BhdXNlLCBib29sICpzdXBwb3J0c1Jlc3VtZSk7Ci0KLSAgICAvLyBOb3RpZmllcyB0byB0aGUgYXVkaW8gZHJpdmVyIHRvIHJlc3VtZSBwbGF5YmFjayBmb2xsb3dpbmcgYSBwYXVzZS4KLSAgICB2aXJ0dWFsIHN0YXR1c190IHBhdXNlKCk7Ci0KLSAgICAvLyBOb3RpZmllcyB0byB0aGUgYXVkaW8gZHJpdmVyIHRvIHJlc3VtZSBwbGF5YmFjayBmb2xsb3dpbmcgYSBwYXVzZS4KLSAgICB2aXJ0dWFsIHN0YXR1c190IHJlc3VtZSgpOwotCi0gICAgLy8gUmV0dXJucyB3aGV0aGVyIGRyYWluIG9wZXJhdGlvbiBpcyBzdXBwb3J0ZWQuCi0gICAgdmlydHVhbCBzdGF0dXNfdCBzdXBwb3J0c0RyYWluKGJvb2wgKnN1cHBvcnRzRHJhaW4pOwotCi0gICAgLy8gUmVxdWVzdHMgbm90aWZpY2F0aW9uIHdoZW4gZGF0YSBidWZmZXJlZCBieSB0aGUgZHJpdmVyL2hhcmR3YXJlIGhhcyBiZWVuIHBsYXllZC4KLSAgICB2aXJ0dWFsIHN0YXR1c190IGRyYWluKGJvb2wgZWFybHlOb3RpZnkpOwotCi0gICAgLy8gTm90aWZpZXMgdG8gdGhlIGF1ZGlvIGRyaXZlciB0byBmbHVzaCB0aGUgcXVldWVkIGRhdGEuCi0gICAgdmlydHVhbCBzdGF0dXNfdCBmbHVzaCgpOwotCi0gICAgLy8gUmV0dXJuIGEgcmVjZW50IGNvdW50IG9mIHRoZSBudW1iZXIgb2YgYXVkaW8gZnJhbWVzIHByZXNlbnRlZCB0byBhbiBleHRlcm5hbCBvYnNlcnZlci4KLSAgICB2aXJ0dWFsIHN0YXR1c190IGdldFByZXNlbnRhdGlvblBvc2l0aW9uKHVpbnQ2NF90ICpmcmFtZXMsIHN0cnVjdCB0aW1lc3BlYyAqdGltZXN0YW1wKTsKLQotICAgIC8vIFN0YXJ0IGEgc3RyZWFtIG9wZXJhdGluZyBpbiBtbWFwIG1vZGUuCi0gICAgdmlydHVhbCBzdGF0dXNfdCBzdGFydCgpOwotCi0gICAgLy8gU3RvcCBhIHN0cmVhbSBvcGVyYXRpbmcgaW4gbW1hcCBtb2RlLgotICAgIHZpcnR1YWwgc3RhdHVzX3Qgc3RvcCgpOwotCi0gICAgLy8gUmV0cmlldmUgaW5mb3JtYXRpb24gb24gdGhlIGRhdGEgYnVmZmVyIGluIG1tYXAgbW9kZS4KLSAgICB2aXJ0dWFsIHN0YXR1c190IGNyZWF0ZU1tYXBCdWZmZXIoaW50MzJfdCBtaW5TaXplRnJhbWVzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgYXVkaW9fbW1hcF9idWZmZXJfaW5mbyAqaW5mbyk7Ci0KLSAgICAvLyBHZXQgY3VycmVudCByZWFkL3dyaXRlIHBvc2l0aW9uIGluIHRoZSBtbWFwIGJ1ZmZlcgotICAgIHZpcnR1YWwgc3RhdHVzX3QgZ2V0TW1hcFBvc2l0aW9uKHN0cnVjdCBhdWRpb19tbWFwX3Bvc2l0aW9uICpwb3NpdGlvbik7Ci0KLSAgICAvLyBDYWxsZWQgd2hlbiB0aGUgbWV0YWRhdGEgb2YgdGhlIHN0cmVhbSdzIHNvdXJjZSBoYXMgYmVlbiBjaGFuZ2VkLgotICAgIHN0YXR1c190IHVwZGF0ZVNvdXJjZU1ldGFkYXRhKGNvbnN0IFNvdXJjZU1ldGFkYXRhJiBzb3VyY2VNZXRhZGF0YSkgb3ZlcnJpZGU7Ci0KLSAgcHJpdmF0ZToKLSAgICBhdWRpb19zdHJlYW1fb3V0X3QgKm1TdHJlYW07Ci0gICAgd3A8U3RyZWFtT3V0SGFsSW50ZXJmYWNlQ2FsbGJhY2s+IG1DYWxsYmFjazsKLQotICAgIGZyaWVuZCBjbGFzcyBEZXZpY2VIYWxMb2NhbDsKLQotICAgIC8vIENhbiBub3QgYmUgY29uc3RydWN0ZWQgZGlyZWN0bHkgYnkgY2xpZW50cy4KLSAgICBTdHJlYW1PdXRIYWxMb2NhbChhdWRpb19zdHJlYW1fb3V0X3QgKnN0cmVhbSwgc3A8RGV2aWNlSGFsTG9jYWw+IGRldmljZSk7Ci0KLSAgICB2aXJ0dWFsIH5TdHJlYW1PdXRIYWxMb2NhbCgpOwotCi0gICAgc3RhdGljIGludCBhc3luY0NhbGxiYWNrKHN0cmVhbV9jYWxsYmFja19ldmVudF90IGV2ZW50LCB2b2lkICpwYXJhbSwgdm9pZCAqY29va2llKTsKLX07Ci0KLWNsYXNzIFN0cmVhbUluSGFsTG9jYWwgOiBwdWJsaWMgU3RyZWFtSW5IYWxJbnRlcmZhY2UsIHB1YmxpYyBTdHJlYW1IYWxMb2NhbCB7Ci0gIHB1YmxpYzoKLSAgICAvLyBSZXR1cm4gdGhlIGZyYW1lIHNpemUgKG51bWJlciBvZiBieXRlcyBwZXIgc2FtcGxlKSBvZiBhIHN0cmVhbS4KLSAgICB2aXJ0dWFsIHN0YXR1c190IGdldEZyYW1lU2l6ZShzaXplX3QgKnNpemUpOwotCi0gICAgLy8gU2V0IHRoZSBpbnB1dCBnYWluIGZvciB0aGUgYXVkaW8gZHJpdmVyLgotICAgIHZpcnR1YWwgc3RhdHVzX3Qgc2V0R2FpbihmbG9hdCBnYWluKTsKLQotICAgIC8vIFJlYWQgYXVkaW8gYnVmZmVyIGluIGZyb20gZHJpdmVyLgotICAgIHZpcnR1YWwgc3RhdHVzX3QgcmVhZCh2b2lkICpidWZmZXIsIHNpemVfdCBieXRlcywgc2l6ZV90ICpyZWFkKTsKLQotICAgIC8vIFJldHVybiB0aGUgYW1vdW50IG9mIGlucHV0IGZyYW1lcyBsb3N0IGluIHRoZSBhdWRpbyBkcml2ZXIuCi0gICAgdmlydHVhbCBzdGF0dXNfdCBnZXRJbnB1dEZyYW1lc0xvc3QodWludDMyX3QgKmZyYW1lc0xvc3QpOwotCi0gICAgLy8gUmV0dXJuIGEgcmVjZW50IGNvdW50IG9mIHRoZSBudW1iZXIgb2YgYXVkaW8gZnJhbWVzIHJlY2VpdmVkIGFuZAotICAgIC8vIHRoZSBjbG9jayB0aW1lIGFzc29jaWF0ZWQgd2l0aCB0aGF0IGZyYW1lIGNvdW50LgotICAgIHZpcnR1YWwgc3RhdHVzX3QgZ2V0Q2FwdHVyZVBvc2l0aW9uKGludDY0X3QgKmZyYW1lcywgaW50NjRfdCAqdGltZSk7Ci0KLSAgICAvLyBTdGFydCBhIHN0cmVhbSBvcGVyYXRpbmcgaW4gbW1hcCBtb2RlLgotICAgIHZpcnR1YWwgc3RhdHVzX3Qgc3RhcnQoKTsKLQotICAgIC8vIFN0b3AgYSBzdHJlYW0gb3BlcmF0aW5nIGluIG1tYXAgbW9kZS4KLSAgICB2aXJ0dWFsIHN0YXR1c190IHN0b3AoKTsKLQotICAgIC8vIFJldHJpZXZlIGluZm9ybWF0aW9uIG9uIHRoZSBkYXRhIGJ1ZmZlciBpbiBtbWFwIG1vZGUuCi0gICAgdmlydHVhbCBzdGF0dXNfdCBjcmVhdGVNbWFwQnVmZmVyKGludDMyX3QgbWluU2l6ZUZyYW1lcywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGF1ZGlvX21tYXBfYnVmZmVyX2luZm8gKmluZm8pOwotCi0gICAgLy8gR2V0IGN1cnJlbnQgcmVhZC93cml0ZSBwb3NpdGlvbiBpbiB0aGUgbW1hcCBidWZmZXIKLSAgICB2aXJ0dWFsIHN0YXR1c190IGdldE1tYXBQb3NpdGlvbihzdHJ1Y3QgYXVkaW9fbW1hcF9wb3NpdGlvbiAqcG9zaXRpb24pOwotCi0gICAgLy8gR2V0IGFjdGl2ZSBtaWNyb3Bob25lcwotICAgIHZpcnR1YWwgc3RhdHVzX3QgZ2V0QWN0aXZlTWljcm9waG9uZXMoc3RkOjp2ZWN0b3I8bWVkaWE6Ok1pY3JvcGhvbmVJbmZvPiAqbWljcm9waG9uZXMpOwotCi0gICAgLy8gQ2FsbGVkIHdoZW4gdGhlIG1ldGFkYXRhIG9mIHRoZSBzdHJlYW0ncyBzaW5rIGhhcyBiZWVuIGNoYW5nZWQuCi0gICAgc3RhdHVzX3QgdXBkYXRlU2lua01ldGFkYXRhKGNvbnN0IFNpbmtNZXRhZGF0YSYgc2lua01ldGFkYXRhKSBvdmVycmlkZTsKLQotICBwcml2YXRlOgotICAgIGF1ZGlvX3N0cmVhbV9pbl90ICptU3RyZWFtOwotCi0gICAgZnJpZW5kIGNsYXNzIERldmljZUhhbExvY2FsOwotCi0gICAgLy8gQ2FuIG5vdCBiZSBjb25zdHJ1Y3RlZCBkaXJlY3RseSBieSBjbGllbnRzLgotICAgIFN0cmVhbUluSGFsTG9jYWwoYXVkaW9fc3RyZWFtX2luX3QgKnN0cmVhbSwgc3A8RGV2aWNlSGFsTG9jYWw+IGRldmljZSk7Ci0KLSAgICB2aXJ0dWFsIH5TdHJlYW1JbkhhbExvY2FsKCk7Ci19OwotCi19IC8vIG5hbWVzcGFjZSBWNF8wCi19IC8vIG5hbWVzcGFjZSBhbmRyb2lkCi0KLSNlbmRpZiAvLyBBTkRST0lEX0hBUkRXQVJFX1NUUkVBTV9IQUxfTE9DQUxfNF8wX0gKZGlmZiAtLWdpdCBhL21lZGlhL2xpYmF1ZGlvaGFsLzQuMC9TdHJlYW1Qb3dlckxvZy5oIGIvbWVkaWEvbGliYXVkaW9oYWwvNC4wL1N0cmVhbVBvd2VyTG9nLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDU3YjcyMDEuLjAwMDAwMDAKLS0tIGEvbWVkaWEvbGliYXVkaW9oYWwvNC4wL1N0cmVhbVBvd2VyTG9nLmgKKysrIC9kZXYvbnVsbApAQCAtMSwxMDQgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNyBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0Ci0gKgotICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7Ci0gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCi0gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLSAqCi0gKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotICoKLSAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKLSAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCi0gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KLSAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKLSAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgotICovCi0KLSNpZm5kZWYgQU5EUk9JRF9IQVJEV0FSRV9TVFJFQU1fUE9XRVJfTE9HXzRfMF9ICi0jZGVmaW5lIEFORFJPSURfSEFSRFdBUkVfU1RSRUFNX1BPV0VSX0xPR180XzBfSAotCi0jaW5jbHVkZSA8YXVkaW9fdXRpbHMvY2xvY2suaD4KLSNpbmNsdWRlIDxhdWRpb191dGlscy9Qb3dlckxvZy5oPgotI2luY2x1ZGUgPGN1dGlscy9wcm9wZXJ0aWVzLmg+Ci0jaW5jbHVkZSA8c3lzdGVtL2F1ZGlvLmg+Ci0KLW5hbWVzcGFjZSBhbmRyb2lkIHsKLW5hbWVzcGFjZSBWNF8wIHsKLQotY2xhc3MgU3RyZWFtUG93ZXJMb2cgewotcHVibGljOgotICAgIFN0cmVhbVBvd2VyTG9nKCkgOgotICAgICAgICBtSXNVc2VyRGVidWdPckVuZ0J1aWxkKGlzX3VzZXJkZWJ1Z19vcl9lbmdfYnVpbGQoKSksCi0gICAgICAgIG1Qb3dlckxvZyhudWxscHRyKSwKLSAgICAgICAgbUZyYW1lU2l6ZSgwKSB7Ci0gICAgICAgIC8vIHVzZSBpbml0KCkgdG8gc2V0IHVwIHRoZSBwb3dlciBsb2cuCi0gICAgfQotCi0gICAgflN0cmVhbVBvd2VyTG9nKCkgewotICAgICAgICBwb3dlcl9sb2dfZGVzdHJveShtUG93ZXJMb2cpOyAvLyBPSyBmb3IgbnVsbCBtUG93ZXJMb2cKLSAgICAgICAgbVBvd2VyTG9nID0gbnVsbHB0cjsKLSAgICB9Ci0KLSAgICAvLyBBIG9uZS10aW1lIGluaXRpYWxpemF0aW9uIChkbyBub3QgY2FsbCB0d2ljZSkgYmVmb3JlIHVzaW5nIFN0cmVhbVBvd2VyTG9nLgotICAgIHZvaWQgaW5pdCh1aW50MzJfdCBzYW1wbGVSYXRlLCBhdWRpb19jaGFubmVsX21hc2tfdCBjaGFubmVsTWFzaywgYXVkaW9fZm9ybWF0X3QgZm9ybWF0KSB7Ci0gICAgICAgIGlmIChtUG93ZXJMb2cgPT0gbnVsbHB0cikgewotICAgICAgICAgICAgLy8gTm90ZTogQSB3YXkgdG8gZ2V0IGNoYW5uZWwgY291bnQgZm9yIGJvdGggaW5wdXQgYW5kIG91dHB1dCBjaGFubmVsIG1hc2tzCi0gICAgICAgICAgICAvLyBidXQgZG9lcyBub3QgY2hlY2sgdmFsaWRpdHkgb2YgdGhlIGNoYW5uZWwgbWFzay4KLSAgICAgICAgICAgIGNvbnN0IHVpbnQzMl90IGNoYW5uZWxDb3VudCA9IHBvcGNvdW50KGF1ZGlvX2NoYW5uZWxfbWFza19nZXRfYml0cyhjaGFubmVsTWFzaykpOwotICAgICAgICAgICAgbUZyYW1lU2l6ZSA9IGNoYW5uZWxDb3VudCAqIGF1ZGlvX2J5dGVzX3Blcl9zYW1wbGUoZm9ybWF0KTsKLSAgICAgICAgICAgIGlmIChtRnJhbWVTaXplID4gMCkgewotICAgICAgICAgICAgICAgIGNvbnN0IHNpemVfdCBrUG93ZXJMb2dGcmFtZXNQZXJFbnRyeSA9Ci0gICAgICAgICAgICAgICAgICAgICAgICAobG9uZyBsb25nKXNhbXBsZVJhdGUgKiBrUG93ZXJMb2dTYW1wbGluZ0ludGVydmFsTXMgLyAxMDAwOwotICAgICAgICAgICAgICAgIG1Qb3dlckxvZyA9IHBvd2VyX2xvZ19jcmVhdGUoCi0gICAgICAgICAgICAgICAgICAgICAgICBzYW1wbGVSYXRlLAotICAgICAgICAgICAgICAgICAgICAgICAgY2hhbm5lbENvdW50LAotICAgICAgICAgICAgICAgICAgICAgICAgZm9ybWF0LAotICAgICAgICAgICAgICAgICAgICAgICAga1Bvd2VyTG9nRW50cmllcywKLSAgICAgICAgICAgICAgICAgICAgICAgIGtQb3dlckxvZ0ZyYW1lc1BlckVudHJ5KTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICAvLyBtUG93ZXJMb2cgbWF5IGJlIE5VTEwgKG5vdCB0aGUgcmlnaHQgYnVpbGQsIGZvcm1hdCBub3QgYWNjZXB0ZWQsIGV0Yy4pLgotICAgIH0KLQotICAgIC8vIER1bXAgdGhlIHBvd2VyIGxvZyB0byBmZC4KLSAgICB2b2lkIGR1bXAoaW50IGZkKSBjb25zdCB7Ci0gICAgICAgIC8vIE9LIGZvciBudWxsIG1Qb3dlckxvZwotICAgICAgICAodm9pZClwb3dlcl9sb2dfZHVtcCgKLSAgICAgICAgICAgICAgICBtUG93ZXJMb2csIGZkLCAiICAgICAgIiAvKiBwcmVmaXggKi8sIGtQb3dlckxvZ0xpbmVzLCAwIC8qIGxpbWl0X25zICovKTsKLSAgICB9Ci0KLSAgICAvLyBMb2cgdGhlIGF1ZGlvIGRhdGEgY29udGFpbmVkIGluIGJ1ZmZlci4KLSAgICB2b2lkIGxvZyhjb25zdCB2b2lkICpidWZmZXIsIHNpemVfdCBzaXplSW5CeXRlcykgY29uc3QgewotICAgICAgICBpZiAobVBvd2VyTG9nICE9IG51bGxwdHIpIHsgLy8gbUZyYW1lU2l6ZSBpcyBhbHdheXMgbm9uemVybyBpZiBtUG93ZXJMb2cgZXhpc3RzLgotICAgICAgICAgICAgcG93ZXJfbG9nX2xvZygKLSAgICAgICAgICAgICAgICAgICAgbVBvd2VyTG9nLCBidWZmZXIsIHNpemVJbkJ5dGVzIC8gbUZyYW1lU2l6ZSwgYXVkaW9fdXRpbHNfZ2V0X3JlYWxfdGltZV9ucygpKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIGJvb2wgaXNVc2VyRGVidWdPckVuZ0J1aWxkKCkgY29uc3QgewotICAgICAgICByZXR1cm4gbUlzVXNlckRlYnVnT3JFbmdCdWlsZDsKLSAgICB9Ci0KLXByaXZhdGU6Ci0KLSAgICBzdGF0aWMgaW5saW5lIGJvb2wgaXNfdXNlcmRlYnVnX29yX2VuZ19idWlsZCgpIHsKLSAgICAgICAgY2hhciB2YWx1ZVtQUk9QRVJUWV9WQUxVRV9NQVhdOwotICAgICAgICAodm9pZClwcm9wZXJ0eV9nZXQoInJvLmJ1aWxkLnR5cGUiLCB2YWx1ZSwgInVua25vd24iKTsgLy8gaWdub3JlIGFjdHVhbCBsZW5ndGgKLSAgICAgICAgcmV0dXJuIHN0cmNtcCh2YWx1ZSwgInVzZXJkZWJ1ZyIpID09IDAgfHwgc3RyY21wKHZhbHVlLCAiZW5nIikgPT0gMDsKLSAgICB9Ci0KLSAgICAvLyBBdWRpbyBzaWduYWwgcG93ZXIgbG9nIGNvbmZpZ3VyYXRpb24uCi0gICAgc3RhdGljIGNvbnN0IHNpemVfdCBrUG93ZXJMb2dMaW5lcyA9IDQwOwotICAgIHN0YXRpYyBjb25zdCBzaXplX3Qga1Bvd2VyTG9nU2FtcGxpbmdJbnRlcnZhbE1zID0gNTA7Ci0gICAgc3RhdGljIGNvbnN0IHNpemVfdCBrUG93ZXJMb2dFbnRyaWVzID0gKDEgLyogbWludXRlcyAqLyAqIDYwIC8qIHNlY29uZHMgKi8gKiAxMDAwIC8qIG1zZWMgKi8KLSAgICAgICAgICAgIC8ga1Bvd2VyTG9nU2FtcGxpbmdJbnRlcnZhbE1zKTsKLQotICAgIGNvbnN0IGJvb2wgbUlzVXNlckRlYnVnT3JFbmdCdWlsZDsKLSAgICBwb3dlcl9sb2dfdCAqbVBvd2VyTG9nOwotICAgIHNpemVfdCBtRnJhbWVTaXplOwotfTsKLQotfSAvLyBuYW1lc3BhY2UgVjRfMAotfSAvLyBuYW1lc3BhY2UgYW5kcm9pZAotCi0jZW5kaWYgLy8gQU5EUk9JRF9IQVJEV0FSRV9TVFJFQU1fUE9XRVJfTE9HXzRfMF9ICmRpZmYgLS1naXQgYS9tZWRpYS9saWJhdWRpb2hhbC80LjAvVmVyc2lvblV0aWxzLmggYi9tZWRpYS9saWJhdWRpb2hhbC80LjAvVmVyc2lvblV0aWxzLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDEyNDZjMmUuLjAwMDAwMDAKLS0tIGEvbWVkaWEvbGliYXVkaW9oYWwvNC4wL1ZlcnNpb25VdGlscy5oCisrKyAvZGV2L251bGwKQEAgLTEsNDkgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxOCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0Ci0gKgotICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7Ci0gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCi0gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLSAqCi0gKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotICoKLSAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKLSAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCi0gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KLSAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKLSAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgotICovCi0KLSNpZm5kZWYgQU5EUk9JRF9IQVJEV0FSRV9WRVJTSU9OX1VUSUxTXzRfMF9ICi0jZGVmaW5lIEFORFJPSURfSEFSRFdBUkVfVkVSU0lPTl9VVElMU180XzBfSAotCi0jaW5jbHVkZSA8YW5kcm9pZC9oYXJkd2FyZS9hdWRpby80LjAvdHlwZXMuaD4KLSNpbmNsdWRlIDxoaWRsL0hpZGxTdXBwb3J0Lmg+Ci0KLXVzaW5nIDo6YW5kcm9pZDo6aGFyZHdhcmU6OmF1ZGlvOjpWNF8wOjpQYXJhbWV0ZXJWYWx1ZTsKLXVzaW5nIDo6YW5kcm9pZDo6aGFyZHdhcmU6OmF1ZGlvOjpWNF8wOjpSZXN1bHQ7Ci11c2luZyA6OmFuZHJvaWQ6OmhhcmR3YXJlOjpSZXR1cm47Ci11c2luZyA6OmFuZHJvaWQ6OmhhcmR3YXJlOjpoaWRsX3ZlYzsKLXVzaW5nIDo6YW5kcm9pZDo6aGFyZHdhcmU6OmhpZGxfc3RyaW5nOwotCi1uYW1lc3BhY2UgYW5kcm9pZCB7Ci1uYW1lc3BhY2UgVjRfMCB7Ci1uYW1lc3BhY2UgdXRpbHMgewotCi10ZW1wbGF0ZSA8Y2xhc3MgVCwgY2xhc3MgQ2FsbGJhY2s+Ci1SZXR1cm48dm9pZD4gZ2V0UGFyYW1ldGVycyhUJiBvYmplY3QsIGhpZGxfdmVjPFBhcmFtZXRlclZhbHVlPiBjb250ZXh0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgaGlkbF92ZWM8aGlkbF9zdHJpbmc+IGtleXMsIENhbGxiYWNrIGNhbGxiYWNrKSB7Ci0gICAgcmV0dXJuIG9iamVjdC0+Z2V0UGFyYW1ldGVycyhjb250ZXh0LCBrZXlzLCBjYWxsYmFjayk7Ci19Ci0KLXRlbXBsYXRlIDxjbGFzcyBUPgotUmV0dXJuPFJlc3VsdD4gc2V0UGFyYW1ldGVycyhUJiBvYmplY3QsIGhpZGxfdmVjPFBhcmFtZXRlclZhbHVlPiBjb250ZXh0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoaWRsX3ZlYzxQYXJhbWV0ZXJWYWx1ZT4ga2V5cykgewotICAgIHJldHVybiBvYmplY3QtPnNldFBhcmFtZXRlcnMoY29udGV4dCwga2V5cyk7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIHV0aWxzCi19IC8vIG5hbWVzcGFjZSBWNF8wCi19IC8vIG5hbWVzcGFjZSBhbmRyb2lkCi0KLSNlbmRpZiAvLyBBTkRST0lEX0hBUkRXQVJFX1ZFUlNJT05fVVRJTFNfNF8wX0gKZGlmZiAtLWdpdCBhL21lZGlhL2xpYmF1ZGlvaGFsLzQuMC9pbmNsdWRlL2xpYmF1ZGlvaGFsLzQuMC9EZXZpY2VzRmFjdG9yeUhhbEh5YnJpZC5oIGIvbWVkaWEvbGliYXVkaW9oYWwvNC4wL2luY2x1ZGUvbGliYXVkaW9oYWwvNC4wL0RldmljZXNGYWN0b3J5SGFsSHlicmlkLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGFiZjZkZTAuLjAwMDAwMDAKLS0tIGEvbWVkaWEvbGliYXVkaW9oYWwvNC4wL2luY2x1ZGUvbGliYXVkaW9oYWwvNC4wL0RldmljZXNGYWN0b3J5SGFsSHlicmlkLmgKKysrIC9kZXYvbnVsbApAQCAtMSw0OSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDE3IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKLSAqCi0gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKLSAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KLSAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotICoKLSAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0gKgotICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQotICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKLSAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgotICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAotICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCi0gKi8KLQotI2lmbmRlZiBBTkRST0lEX0hBUkRXQVJFX0RFVklDRVNfRkFDVE9SWV9IQUxfSFlCUklEXzRfMF9ICi0jZGVmaW5lIEFORFJPSURfSEFSRFdBUkVfREVWSUNFU19GQUNUT1JZX0hBTF9IWUJSSURfNF8wX0gKLQotI2luY2x1ZGUgPG1lZGlhL2F1ZGlvaGFsL0RldmljZXNGYWN0b3J5SGFsSW50ZXJmYWNlLmg+Ci0jaW5jbHVkZSA8dXRpbHMvRXJyb3JzLmg+Ci0jaW5jbHVkZSA8dXRpbHMvUmVmQmFzZS5oPgotCi1uYW1lc3BhY2UgYW5kcm9pZCB7Ci1uYW1lc3BhY2UgVjRfMCB7Ci0KLWNsYXNzIERldmljZXNGYWN0b3J5SGFsSHlicmlkIDogcHVibGljIERldmljZXNGYWN0b3J5SGFsSW50ZXJmYWNlCi17Ci0gIHB1YmxpYzoKLSAgICAvLyBPcGVucyBhIGRldmljZSB3aXRoIHRoZSBzcGVjaWZpZWQgbmFtZS4gVG8gY2xvc2UgdGhlIGRldmljZSwgaXQgaXMKLSAgICAvLyBuZWNlc3NhcnkgdG8gcmVsZWFzZSByZWZlcmVuY2VzIHRvIHRoZSByZXR1cm5lZCBvYmplY3QuCi0gICAgdmlydHVhbCBzdGF0dXNfdCBvcGVuRGV2aWNlKGNvbnN0IGNoYXIgKm5hbWUsIHNwPERldmljZUhhbEludGVyZmFjZT4gKmRldmljZSk7Ci0KLSAgcHJpdmF0ZToKLSAgICBmcmllbmQgY2xhc3MgRGV2aWNlc0ZhY3RvcnlIYWxJbnRlcmZhY2U7Ci0KLSAgICAvLyBDYW4gbm90IGJlIGNvbnN0cnVjdGVkIGRpcmVjdGx5IGJ5IGNsaWVudHMuCi0gICAgRGV2aWNlc0ZhY3RvcnlIYWxIeWJyaWQoKTsKLQotICAgIHZpcnR1YWwgfkRldmljZXNGYWN0b3J5SGFsSHlicmlkKCk7Ci0KLSAgICBzcDxEZXZpY2VzRmFjdG9yeUhhbEludGVyZmFjZT4gbUxvY2FsRmFjdG9yeTsKLSAgICBzcDxEZXZpY2VzRmFjdG9yeUhhbEludGVyZmFjZT4gbUhpZGxGYWN0b3J5OwotfTsKLQotfSAvLyBuYW1lc3BhY2UgVjRfMAotfSAvLyBuYW1lc3BhY2UgYW5kcm9pZAotCi0jZW5kaWYgLy8gQU5EUk9JRF9IQVJEV0FSRV9ERVZJQ0VTX0ZBQ1RPUllfSEFMX0hZQlJJRF80XzBfSApkaWZmIC0tZ2l0IGEvbWVkaWEvbGliYXVkaW9oYWwvNC4wL2luY2x1ZGUvbGliYXVkaW9oYWwvNC4wL0VmZmVjdHNGYWN0b3J5SGFsSGlkbC5oIGIvbWVkaWEvbGliYXVkaW9oYWwvNC4wL2luY2x1ZGUvbGliYXVkaW9oYWwvNC4wL0VmZmVjdHNGYWN0b3J5SGFsSGlkbC5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2ODBiN2ExLi4wMDAwMDAwCi0tLSBhL21lZGlhL2xpYmF1ZGlvaGFsLzQuMC9pbmNsdWRlL2xpYmF1ZGlvaGFsLzQuMC9FZmZlY3RzRmFjdG9yeUhhbEhpZGwuaAorKysgL2Rldi9udWxsCkBAIC0xLDc1ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTYgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAotICoKLSAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwotICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgotICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0gKgotICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLSAqCi0gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCi0gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAotICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCi0gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCi0gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KLSAqLwotCi0jaWZuZGVmIEFORFJPSURfSEFSRFdBUkVfRUZGRUNUU19GQUNUT1JZX0hBTF9ISURMXzRfMF9ICi0jZGVmaW5lIEFORFJPSURfSEFSRFdBUkVfRUZGRUNUU19GQUNUT1JZX0hBTF9ISURMXzRfMF9ICi0KLSNpbmNsdWRlIDxhbmRyb2lkL2hhcmR3YXJlL2F1ZGlvL2VmZmVjdC80LjAvSUVmZmVjdHNGYWN0b3J5Lmg+Ci0jaW5jbHVkZSA8YW5kcm9pZC9oYXJkd2FyZS9hdWRpby9lZmZlY3QvNC4wL3R5cGVzLmg+Ci0jaW5jbHVkZSA8bWVkaWEvYXVkaW9oYWwvRWZmZWN0c0ZhY3RvcnlIYWxJbnRlcmZhY2UuaD4KLQotI2luY2x1ZGUgIkNvbnZlcnNpb25IZWxwZXJIaWRsLmgiCi0KLW5hbWVzcGFjZSBhbmRyb2lkIHsKLW5hbWVzcGFjZSBWNF8wIHsKLQotdXNpbmcgOjphbmRyb2lkOjpoYXJkd2FyZTo6YXVkaW86OmVmZmVjdDo6VjRfMDo6RWZmZWN0RGVzY3JpcHRvcjsKLXVzaW5nIDo6YW5kcm9pZDo6aGFyZHdhcmU6OmF1ZGlvOjplZmZlY3Q6OlY0XzA6OklFZmZlY3RzRmFjdG9yeTsKLXVzaW5nIDo6YW5kcm9pZDo6aGFyZHdhcmU6OmhpZGxfdmVjOwotCi1jbGFzcyBFZmZlY3RzRmFjdG9yeUhhbEhpZGwgOiBwdWJsaWMgRWZmZWN0c0ZhY3RvcnlIYWxJbnRlcmZhY2UsIHB1YmxpYyBDb252ZXJzaW9uSGVscGVySGlkbAotewotICBwdWJsaWM6Ci0gICAgLy8gUmV0dXJucyB0aGUgbnVtYmVyIG9mIGRpZmZlcmVudCBlZmZlY3RzIGluIGFsbCBsb2FkZWQgbGlicmFyaWVzLgotICAgIHZpcnR1YWwgc3RhdHVzX3QgcXVlcnlOdW1iZXJFZmZlY3RzKHVpbnQzMl90ICpwTnVtRWZmZWN0cyk7Ci0KLSAgICAvLyBSZXR1cm5zIGEgZGVzY3JpcHRvciBvZiB0aGUgbmV4dCBhdmFpbGFibGUgZWZmZWN0LgotICAgIHZpcnR1YWwgc3RhdHVzX3QgZ2V0RGVzY3JpcHRvcih1aW50MzJfdCBpbmRleCwKLSAgICAgICAgICAgIGVmZmVjdF9kZXNjcmlwdG9yX3QgKnBEZXNjcmlwdG9yKTsKLQotICAgIHZpcnR1YWwgc3RhdHVzX3QgZ2V0RGVzY3JpcHRvcihjb25zdCBlZmZlY3RfdXVpZF90ICpwRWZmZWN0VXVpZCwKLSAgICAgICAgICAgIGVmZmVjdF9kZXNjcmlwdG9yX3QgKnBEZXNjcmlwdG9yKTsKLQotICAgIC8vIENyZWF0ZXMgYW4gZWZmZWN0IGVuZ2luZSBvZiB0aGUgc3BlY2lmaWVkIHR5cGUuCi0gICAgLy8gVG8gcmVsZWFzZSB0aGUgZWZmZWN0IGVuZ2luZSwgaXQgaXMgbmVjZXNzYXJ5IHRvIHJlbGVhc2UgcmVmZXJlbmNlcwotICAgIC8vIHRvIHRoZSByZXR1cm5lZCBlZmZlY3Qgb2JqZWN0LgotICAgIHZpcnR1YWwgc3RhdHVzX3QgY3JlYXRlRWZmZWN0KGNvbnN0IGVmZmVjdF91dWlkX3QgKnBFZmZlY3RVdWlkLAotICAgICAgICAgICAgaW50MzJfdCBzZXNzaW9uSWQsIGludDMyX3QgaW9JZCwKLSAgICAgICAgICAgIHNwPEVmZmVjdEhhbEludGVyZmFjZT4gKmVmZmVjdCk7Ci0KLSAgICB2aXJ0dWFsIHN0YXR1c190IGR1bXBFZmZlY3RzKGludCBmZCk7Ci0KLSAgICBzdGF0dXNfdCBhbGxvY2F0ZUJ1ZmZlcihzaXplX3Qgc2l6ZSwgc3A8RWZmZWN0QnVmZmVySGFsSW50ZXJmYWNlPiogYnVmZmVyKSBvdmVycmlkZTsKLSAgICBzdGF0dXNfdCBtaXJyb3JCdWZmZXIodm9pZCogZXh0ZXJuYWwsIHNpemVfdCBzaXplLAotICAgICAgICAgICAgICAgICAgICAgICAgICBzcDxFZmZlY3RCdWZmZXJIYWxJbnRlcmZhY2U+KiBidWZmZXIpIG92ZXJyaWRlOwotCi0gIHByaXZhdGU6Ci0gICAgZnJpZW5kIGNsYXNzIEVmZmVjdHNGYWN0b3J5SGFsSW50ZXJmYWNlOwotCi0gICAgc3A8SUVmZmVjdHNGYWN0b3J5PiBtRWZmZWN0c0ZhY3Rvcnk7Ci0gICAgaGlkbF92ZWM8RWZmZWN0RGVzY3JpcHRvcj4gbUxhc3REZXNjcmlwdG9yczsKLQotICAgIC8vIENhbiBub3QgYmUgY29uc3RydWN0ZWQgZGlyZWN0bHkgYnkgY2xpZW50cy4KLSAgICBFZmZlY3RzRmFjdG9yeUhhbEhpZGwoKTsKLSAgICB2aXJ0dWFsIH5FZmZlY3RzRmFjdG9yeUhhbEhpZGwoKTsKLQotICAgIHN0YXR1c190IHF1ZXJ5QWxsRGVzY3JpcHRvcnMoKTsKLX07Ci0KLX0gLy8gbmFtZXNwYWNlIFY0XzAKLX0gLy8gbmFtZXNwYWNlIGFuZHJvaWQKLQotI2VuZGlmIC8vIEFORFJPSURfSEFSRFdBUkVfRUZGRUNUU19GQUNUT1JZX0hBTF9ISURMXzRfMF9ICmRpZmYgLS1naXQgYS9tZWRpYS9saWJhdWRpb2hhbC9BbmRyb2lkLmJwIGIvbWVkaWEvbGliYXVkaW9oYWwvQW5kcm9pZC5icAppbmRleCAzYTVkZjI3Li4wZmYwZDRhIDEwMDY0NAotLS0gYS9tZWRpYS9saWJhdWRpb2hhbC9BbmRyb2lkLmJwCisrKyBiL21lZGlhL2xpYmF1ZGlvaGFsL0FuZHJvaWQuYnAKQEAgLTgsNiArOCw3IEBACiAKICAgICBjZmxhZ3M6IFsKICAgICAgICAgIi1XYWxsIiwKKyAgICAgICAgIi1XZXh0cmEiLAogICAgICAgICAiLVdlcnJvciIsCiAgICAgXSwKIApkaWZmIC0tZ2l0IGEvbWVkaWEvbGliYXVkaW9oYWwvRGV2aWNlc0ZhY3RvcnlIYWxJbnRlcmZhY2UuY3BwIGIvbWVkaWEvbGliYXVkaW9oYWwvRGV2aWNlc0ZhY3RvcnlIYWxJbnRlcmZhY2UuY3BwCmluZGV4IDRjOGVhZjYuLmU2MzFhY2UgMTAwNjQ0Ci0tLSBhL21lZGlhL2xpYmF1ZGlvaGFsL0RldmljZXNGYWN0b3J5SGFsSW50ZXJmYWNlLmNwcAorKysgYi9tZWRpYS9saWJhdWRpb2hhbC9EZXZpY2VzRmFjdG9yeUhhbEludGVyZmFjZS5jcHAKQEAgLTE3LDE4ICsxNywxNyBAQAogI2luY2x1ZGUgPGFuZHJvaWQvaGFyZHdhcmUvYXVkaW8vMi4wL0lEZXZpY2VzRmFjdG9yeS5oPgogI2luY2x1ZGUgPGFuZHJvaWQvaGFyZHdhcmUvYXVkaW8vNC4wL0lEZXZpY2VzRmFjdG9yeS5oPgogCi0jaW5jbHVkZSA8RGV2aWNlc0ZhY3RvcnlIYWxIeWJyaWQuaD4KLSNpbmNsdWRlIDxsaWJhdWRpb2hhbC80LjAvRGV2aWNlc0ZhY3RvcnlIYWxIeWJyaWQuaD4KKyNpbmNsdWRlIDxsaWJhdWRpb2hhbC9GYWN0b3J5SGFsSGlkbC5oPgogCiBuYW1lc3BhY2UgYW5kcm9pZCB7CiAKIC8vIHN0YXRpYwogc3A8RGV2aWNlc0ZhY3RvcnlIYWxJbnRlcmZhY2U+IERldmljZXNGYWN0b3J5SGFsSW50ZXJmYWNlOjpjcmVhdGUoKSB7CiAgICAgaWYgKGhhcmR3YXJlOjphdWRpbzo6VjRfMDo6SURldmljZXNGYWN0b3J5OjpnZXRTZXJ2aWNlKCkgIT0gbnVsbHB0cikgewotICAgICAgICByZXR1cm4gbmV3IFY0XzA6OkRldmljZXNGYWN0b3J5SGFsSHlicmlkKCk7CisgICAgICAgIHJldHVybiBWNF8wOjpjcmVhdGVEZXZpY2VzRmFjdG9yeUhhbCgpOwogICAgIH0KICAgICBpZiAoaGFyZHdhcmU6OmF1ZGlvOjpWMl8wOjpJRGV2aWNlc0ZhY3Rvcnk6OmdldFNlcnZpY2UoKSAhPSBudWxscHRyKSB7Ci0gICAgICAgIHJldHVybiBuZXcgRGV2aWNlc0ZhY3RvcnlIYWxIeWJyaWQoKTsKKyAgICAgICAgcmV0dXJuIFYyXzA6OmNyZWF0ZURldmljZXNGYWN0b3J5SGFsKCk7CiAgICAgfQogICAgIHJldHVybiBudWxscHRyOwogfQpkaWZmIC0tZ2l0IGEvbWVkaWEvbGliYXVkaW9oYWwvRWZmZWN0c0ZhY3RvcnlIYWxJbnRlcmZhY2UuY3BwIGIvbWVkaWEvbGliYXVkaW9oYWwvRWZmZWN0c0ZhY3RvcnlIYWxJbnRlcmZhY2UuY3BwCmluZGV4IGVhZDFmYTIuLmY3NzM0YTggMTAwNjQ0Ci0tLSBhL21lZGlhL2xpYmF1ZGlvaGFsL0VmZmVjdHNGYWN0b3J5SGFsSW50ZXJmYWNlLmNwcAorKysgYi9tZWRpYS9saWJhdWRpb2hhbC9FZmZlY3RzRmFjdG9yeUhhbEludGVyZmFjZS5jcHAKQEAgLTE3LDE5ICsxNywxNyBAQAogI2luY2x1ZGUgPGFuZHJvaWQvaGFyZHdhcmUvYXVkaW8vZWZmZWN0LzIuMC9JRWZmZWN0c0ZhY3RvcnkuaD4KICNpbmNsdWRlIDxhbmRyb2lkL2hhcmR3YXJlL2F1ZGlvL2VmZmVjdC80LjAvSUVmZmVjdHNGYWN0b3J5Lmg+CiAKLSNpbmNsdWRlIDxFZmZlY3RzRmFjdG9yeUhhbEhpZGwuaD4KLSNpbmNsdWRlIDxsaWJhdWRpb2hhbC80LjAvRWZmZWN0c0ZhY3RvcnlIYWxIaWRsLmg+Ci0KKyNpbmNsdWRlIDxsaWJhdWRpb2hhbC9GYWN0b3J5SGFsSGlkbC5oPgogCiBuYW1lc3BhY2UgYW5kcm9pZCB7CiAKIC8vIHN0YXRpYwogc3A8RWZmZWN0c0ZhY3RvcnlIYWxJbnRlcmZhY2U+IEVmZmVjdHNGYWN0b3J5SGFsSW50ZXJmYWNlOjpjcmVhdGUoKSB7CiAgICAgaWYgKGhhcmR3YXJlOjphdWRpbzo6ZWZmZWN0OjpWNF8wOjpJRWZmZWN0c0ZhY3Rvcnk6OmdldFNlcnZpY2UoKSAhPSBudWxscHRyKSB7Ci0gICAgICAgIHJldHVybiBuZXcgVjRfMDo6RWZmZWN0c0ZhY3RvcnlIYWxIaWRsKCk7CisgICAgICAgIHJldHVybiBWNF8wOjpjcmVhdGVFZmZlY3RzRmFjdG9yeUhhbCgpOwogICAgIH0KICAgICBpZiAoaGFyZHdhcmU6OmF1ZGlvOjplZmZlY3Q6OlYyXzA6OklFZmZlY3RzRmFjdG9yeTo6Z2V0U2VydmljZSgpICE9IG51bGxwdHIpIHsKLSAgICAgICAgcmV0dXJuIG5ldyBFZmZlY3RzRmFjdG9yeUhhbEhpZGwoKTsKKyAgICAgICAgcmV0dXJuIFYyXzA6OmNyZWF0ZUVmZmVjdHNGYWN0b3J5SGFsKCk7CiAgICAgfQogICAgIHJldHVybiBudWxscHRyOwogfQpkaWZmIC0tZ2l0IGEvbWVkaWEvbGliYXVkaW9oYWwvaW1wbC9BbmRyb2lkLmJwIGIvbWVkaWEvbGliYXVkaW9oYWwvaW1wbC9BbmRyb2lkLmJwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM4MjczMzYKLS0tIC9kZXYvbnVsbAorKysgYi9tZWRpYS9saWJhdWRpb2hhbC9pbXBsL0FuZHJvaWQuYnAKQEAgLTAsMCArMSw4NiBAQAorY2NfZGVmYXVsdHMgeworICAgIG5hbWU6ICJsaWJhdWRpb2hhbF9kZWZhdWx0IiwKKworICAgIHNyY3M6IFsKKyAgICAgICAgIkRldmljZUhhbExvY2FsLmNwcCIsCisgICAgICAgICJEZXZpY2VzRmFjdG9yeUhhbEh5YnJpZC5jcHAiLAorICAgICAgICAiRGV2aWNlc0ZhY3RvcnlIYWxMb2NhbC5jcHAiLAorICAgICAgICAiU3RyZWFtSGFsTG9jYWwuY3BwIiwKKworICAgICAgICAiQ29udmVyc2lvbkhlbHBlckhpZGwuY3BwIiwKKyAgICAgICAgIkRldmljZUhhbEhpZGwuY3BwIiwKKyAgICAgICAgIkRldmljZXNGYWN0b3J5SGFsSGlkbC5jcHAiLAorICAgICAgICAiRWZmZWN0QnVmZmVySGFsSGlkbC5jcHAiLAorICAgICAgICAiRWZmZWN0SGFsSGlkbC5jcHAiLAorICAgICAgICAiRWZmZWN0c0ZhY3RvcnlIYWxIaWRsLmNwcCIsCisgICAgICAgICJTdHJlYW1IYWxIaWRsLmNwcCIsCisgICAgXSwKKworICAgIGV4cG9ydF9pbmNsdWRlX2RpcnM6IFsiaW5jbHVkZSJdLAorCisgICAgY2ZsYWdzOiBbCisgICAgICAgICItV2FsbCIsCisgICAgICAgICItV2V4dHJhIiwKKyAgICAgICAgIi1XZXJyb3IiLAorICAgIF0sCisgICAgc2hhcmVkX2xpYnM6IFsKKyAgICAgICAgImFuZHJvaWQuaGFyZHdhcmUuYXVkaW8uY29tbW9uLXV0aWwiLAorICAgICAgICAiYW5kcm9pZC5oYXJkd2FyZS5hdWRpby5jb21tb25AMi4wIiwKKyAgICAgICAgImFuZHJvaWQuaGFyZHdhcmUuYXVkaW8uY29tbW9uQDQuMCIsCisgICAgICAgICJhbmRyb2lkLmhhcmR3YXJlLmF1ZGlvLmVmZmVjdEAyLjAiLAorICAgICAgICAiYW5kcm9pZC5oYXJkd2FyZS5hdWRpby5lZmZlY3RANC4wIiwKKyAgICAgICAgImFuZHJvaWQuaGFyZHdhcmUuYXVkaW9AMi4wIiwKKyAgICAgICAgImFuZHJvaWQuaGFyZHdhcmUuYXVkaW9ANC4wIiwKKyAgICAgICAgImFuZHJvaWQuaGlkbC5hbGxvY2F0b3JAMS4wIiwKKyAgICAgICAgImFuZHJvaWQuaGlkbC5tZW1vcnlAMS4wIiwKKyAgICAgICAgImxpYmF1ZGlvaGFsX2RlYXRoaGFuZGxlciIsCisgICAgICAgICJsaWJhdWRpb3V0aWxzIiwKKyAgICAgICAgImxpYmJhc2UiLAorICAgICAgICAibGliYmluZGVyIiwKKyAgICAgICAgImxpYmN1dGlscyIsCisgICAgICAgICJsaWJmbXEiLAorICAgICAgICAibGliaGFyZHdhcmUiLAorICAgICAgICAibGliaGlkbGJhc2UiLAorICAgICAgICAibGliaGlkbG1lbW9yeSIsCisgICAgICAgICJsaWJoaWRsdHJhbnNwb3J0IiwKKyAgICAgICAgImxpYmh3YmluZGVyIiwKKyAgICAgICAgImxpYmxvZyIsCisgICAgICAgICJsaWJtZWRpYV9oZWxwZXIiLAorICAgICAgICAibGlibWVkaWF1dGlscyIsCisgICAgICAgICJsaWJ1dGlscyIsCisgICAgXSwKKyAgICBoZWFkZXJfbGliczogWworICAgICAgICAiYW5kcm9pZC5oYXJkd2FyZS5hdWRpby5jb21tb24udXRpbEBhbGwtdmVyc2lvbnMiLAorICAgICAgICAibGliYXVkaW9oYWxfaGVhZGVycyIKKyAgICBdLAorCisgICAgZXhwb3J0X3NoYXJlZF9saWJfaGVhZGVyczogWworICAgICAgICAibGliZm1xIiwKKyAgICBdLAorfQorCitjY19saWJyYXJ5X3NoYXJlZCB7CisgICAgbmFtZTogImxpYmF1ZGlvaGFsQDIuMCIsCisgICAgZGVmYXVsdHM6IFsibGliYXVkaW9oYWxfZGVmYXVsdCJdLAorICAgIHNoYXJlZF9saWJzOiBbCisgICAgICAgICJhbmRyb2lkLmhhcmR3YXJlLmF1ZGlvLmNvbW1vbkAyLjAtdXRpbCIsCisgICAgXSwKKyAgICBjZmxhZ3M6IFsKKyAgICAgICAgIi1ETUFKT1JfVkVSU0lPTj0yIiwKKyAgICAgICAgIi1ETUlOT1JfVkVSU0lPTj0wIiwKKyAgICAgICAgIi1pbmNsdWRlIFZlcnNpb25NYWNyby5oIiwKKyAgICBdCit9CisKK2NjX2xpYnJhcnlfc2hhcmVkIHsKKyAgICBuYW1lOiAibGliYXVkaW9oYWxANC4wIiwKKyAgICBkZWZhdWx0czogWyJsaWJhdWRpb2hhbF9kZWZhdWx0Il0sCisgICAgc2hhcmVkX2xpYnM6IFsKKyAgICAgICAgImFuZHJvaWQuaGFyZHdhcmUuYXVkaW8uY29tbW9uQDQuMC11dGlsIiwKKyAgICBdLAorICAgIGNmbGFnczogWworICAgICAgICAiLURNQUpPUl9WRVJTSU9OPTQiLAorICAgICAgICAiLURNSU5PUl9WRVJTSU9OPTAiLAorICAgICAgICAiLWluY2x1ZGUgVmVyc2lvbk1hY3JvLmgiLAorICAgIF0KK30KZGlmZiAtLWdpdCBhL21lZGlhL2xpYmF1ZGlvaGFsL2ltcGwvQ29udmVyc2lvbkhlbHBlckhpZGwuY3BwIGIvbWVkaWEvbGliYXVkaW9oYWwvaW1wbC9Db252ZXJzaW9uSGVscGVySGlkbC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWQxMmZhZAotLS0gL2Rldi9udWxsCisrKyBiL21lZGlhL2xpYmF1ZGlvaGFsL2ltcGwvQ29udmVyc2lvbkhlbHBlckhpZGwuY3BwCkBAIC0wLDAgKzEsMjQxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE2IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KKworI2luY2x1ZGUgPHN0cmluZy5oPgorCisjZGVmaW5lIExPR19UQUcgIkhhbEhpZGwiCisjaW5jbHVkZSA8bWVkaWEvQXVkaW9QYXJhbWV0ZXIuaD4KKyNpbmNsdWRlIDx1dGlscy9Mb2cuaD4KKworI2luY2x1ZGUgIkNvbnZlcnNpb25IZWxwZXJIaWRsLmgiCisKK3VzaW5nIDo6YW5kcm9pZDo6aGFyZHdhcmU6OmF1ZGlvOjpDUFBfVkVSU0lPTjo6UmVzdWx0OworCisjaWYgTUFKT1JfVkVSU0lPTiA9PSA0Cit1c2luZyA6OmFuZHJvaWQ6OmhhcmR3YXJlOjphdWRpbzo6Q1BQX1ZFUlNJT046OkF1ZGlvTWljcm9waG9uZUNoYW5uZWxNYXBwaW5nOwordXNpbmcgOjphbmRyb2lkOjpoYXJkd2FyZTo6YXVkaW86OkNQUF9WRVJTSU9OOjpBdWRpb01pY3JvcGhvbmVEaXJlY3Rpb25hbGl0eTsKK3VzaW5nIDo6YW5kcm9pZDo6aGFyZHdhcmU6OmF1ZGlvOjpDUFBfVkVSU0lPTjo6QXVkaW9NaWNyb3Bob25lTG9jYXRpb247Cit1c2luZyA6OmFuZHJvaWQ6OmhhcmR3YXJlOjphdWRpbzo6Q1BQX1ZFUlNJT046OkRldmljZUFkZHJlc3M7Cit1c2luZyA6OmFuZHJvaWQ6OmhhcmR3YXJlOjphdWRpbzo6Q1BQX1ZFUlNJT046Ok1pY3JvcGhvbmVJbmZvOworI2VuZGlmCisKK25hbWVzcGFjZSBhbmRyb2lkIHsKK25hbWVzcGFjZSBDUFBfVkVSU0lPTiB7CisKKy8vIHN0YXRpYworc3RhdHVzX3QgQ29udmVyc2lvbkhlbHBlckhpZGw6OmtleXNGcm9tSGFsKGNvbnN0IFN0cmluZzgmIGtleXMsIGhpZGxfdmVjPGhpZGxfc3RyaW5nPiAqaGlkbEtleXMpIHsKKyAgICBBdWRpb1BhcmFtZXRlciBoYWxLZXlzKGtleXMpOworICAgIGlmIChoYWxLZXlzLnNpemUoKSA9PSAwKSByZXR1cm4gQkFEX1ZBTFVFOworICAgIGhpZGxLZXlzLT5yZXNpemUoaGFsS2V5cy5zaXplKCkpOworICAgIC8vRklYTUU6ICBrZXlTdHJlYW1TdXBwb3J0ZWRDaGFubmVscyBhbmQga2V5U3RyZWFtU3VwcG9ydGVkU2FtcGxpbmdSYXRlcyBjb21lIHdpdGggYQorICAgIC8vICJrZXlGb3JtYXQ9PHZhbHVlPiIgcGFpci4gV2UgbmVlZCB0byB0cmFuc2Zvcm0gaXQgaW50byBhIHNpbmdsZSBrZXkgc3RyaW5nIHNvIHRoYXQgaXQgaXMKKyAgICAvLyBjYXJyaWVkIG92ZXIgdG8gdGhlIGxlZ2FjeSBIQUwgdmlhIEhJREwuCisgICAgU3RyaW5nOCB2YWx1ZTsKKyAgICBib29sIGtlZXBGb3JtYXRWYWx1ZSA9IGhhbEtleXMuc2l6ZSgpID09IDIgJiYKKyAgICAgICAgIChoYWxLZXlzLmdldChTdHJpbmc4KEF1ZGlvUGFyYW1ldGVyOjprZXlTdHJlYW1TdXBwb3J0ZWRDaGFubmVscyksIHZhbHVlKSA9PSBOT19FUlJPUiB8fAorICAgICAgICAgaGFsS2V5cy5nZXQoU3RyaW5nOChBdWRpb1BhcmFtZXRlcjo6a2V5U3RyZWFtU3VwcG9ydGVkU2FtcGxpbmdSYXRlcyksIHZhbHVlKSA9PSBOT19FUlJPUik7CisKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGhhbEtleXMuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgU3RyaW5nOCBrZXk7CisgICAgICAgIHN0YXR1c190IHN0YXR1cyA9IGhhbEtleXMuZ2V0QXQoaSwga2V5KTsKKyAgICAgICAgaWYgKHN0YXR1cyAhPSBPSykgcmV0dXJuIHN0YXR1czsKKyAgICAgICAgaWYgKGtlZXBGb3JtYXRWYWx1ZSAmJiBrZXkgPT0gQXVkaW9QYXJhbWV0ZXI6OmtleUZvcm1hdCkgeworICAgICAgICAgICAgQXVkaW9QYXJhbWV0ZXIgZm9ybWF0UGFyYW07CisgICAgICAgICAgICBoYWxLZXlzLmdldEF0KGksIGtleSwgdmFsdWUpOworICAgICAgICAgICAgZm9ybWF0UGFyYW0uYWRkKGtleSwgdmFsdWUpOworICAgICAgICAgICAga2V5ID0gZm9ybWF0UGFyYW0udG9TdHJpbmcoKTsKKyAgICAgICAgfQorICAgICAgICAoKmhpZGxLZXlzKVtpXSA9IGtleS5zdHJpbmcoKTsKKyAgICB9CisgICAgcmV0dXJuIE9LOworfQorCisvLyBzdGF0aWMKK3N0YXR1c190IENvbnZlcnNpb25IZWxwZXJIaWRsOjpwYXJhbWV0ZXJzRnJvbUhhbCgKKyAgICAgICAgY29uc3QgU3RyaW5nOCYga3ZQYWlycywgaGlkbF92ZWM8UGFyYW1ldGVyVmFsdWU+ICpoaWRsUGFyYW1zKSB7CisgICAgQXVkaW9QYXJhbWV0ZXIgcGFyYW1zKGt2UGFpcnMpOworICAgIGlmIChwYXJhbXMuc2l6ZSgpID09IDApIHJldHVybiBCQURfVkFMVUU7CisgICAgaGlkbFBhcmFtcy0+cmVzaXplKHBhcmFtcy5zaXplKCkpOworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgcGFyYW1zLnNpemUoKTsgKytpKSB7CisgICAgICAgIFN0cmluZzgga2V5LCB2YWx1ZTsKKyAgICAgICAgc3RhdHVzX3Qgc3RhdHVzID0gcGFyYW1zLmdldEF0KGksIGtleSwgdmFsdWUpOworICAgICAgICBpZiAoc3RhdHVzICE9IE9LKSByZXR1cm4gc3RhdHVzOworICAgICAgICAoKmhpZGxQYXJhbXMpW2ldLmtleSA9IGtleS5zdHJpbmcoKTsKKyAgICAgICAgKCpoaWRsUGFyYW1zKVtpXS52YWx1ZSA9IHZhbHVlLnN0cmluZygpOworICAgIH0KKyAgICByZXR1cm4gT0s7Cit9CisKKy8vIHN0YXRpYwordm9pZCBDb252ZXJzaW9uSGVscGVySGlkbDo6cGFyYW1ldGVyc1RvSGFsKAorICAgICAgICBjb25zdCBoaWRsX3ZlYzxQYXJhbWV0ZXJWYWx1ZT4mIHBhcmFtZXRlcnMsIFN0cmluZzggKnZhbHVlcykgeworICAgIEF1ZGlvUGFyYW1ldGVyIHBhcmFtczsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHBhcmFtZXRlcnMuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgcGFyYW1zLmFkZChTdHJpbmc4KHBhcmFtZXRlcnNbaV0ua2V5LmNfc3RyKCkpLCBTdHJpbmc4KHBhcmFtZXRlcnNbaV0udmFsdWUuY19zdHIoKSkpOworICAgIH0KKyAgICB2YWx1ZXMtPnNldFRvKHBhcmFtcy50b1N0cmluZygpKTsKK30KKworQ29udmVyc2lvbkhlbHBlckhpZGw6OkNvbnZlcnNpb25IZWxwZXJIaWRsKGNvbnN0IGNoYXIqIGNsYXNzTmFtZSkKKyAgICAgICAgOiBtQ2xhc3NOYW1lKGNsYXNzTmFtZSkgeworfQorCisvLyBzdGF0aWMKK3N0YXR1c190IENvbnZlcnNpb25IZWxwZXJIaWRsOjphbmFseXplUmVzdWx0KGNvbnN0IFJlc3VsdCYgcmVzdWx0KSB7CisgICAgc3dpdGNoIChyZXN1bHQpIHsKKyAgICAgICAgY2FzZSBSZXN1bHQ6Ok9LOiByZXR1cm4gT0s7CisgICAgICAgIGNhc2UgUmVzdWx0OjpJTlZBTElEX0FSR1VNRU5UUzogcmV0dXJuIEJBRF9WQUxVRTsKKyAgICAgICAgY2FzZSBSZXN1bHQ6OklOVkFMSURfU1RBVEU6IHJldHVybiBOT1RfRU5PVUdIX0RBVEE7CisgICAgICAgIGNhc2UgUmVzdWx0OjpOT1RfSU5JVElBTElaRUQ6IHJldHVybiBOT19JTklUOworICAgICAgICBjYXNlIFJlc3VsdDo6Tk9UX1NVUFBPUlRFRDogcmV0dXJuIElOVkFMSURfT1BFUkFUSU9OOworICAgICAgICBkZWZhdWx0OiByZXR1cm4gTk9fSU5JVDsKKyAgICB9Cit9CisKK3ZvaWQgQ29udmVyc2lvbkhlbHBlckhpZGw6OmVtaXRFcnJvcihjb25zdCBjaGFyKiBmdW5jTmFtZSwgY29uc3QgY2hhciogZGVzY3JpcHRpb24pIHsKKyAgICBBTE9HRSgiJXMgJXAgJXM6ICVzIChmcm9tIHJwYykiLCBtQ2xhc3NOYW1lLCB0aGlzLCBmdW5jTmFtZSwgZGVzY3JpcHRpb24pOworfQorCisjaWYgTUFKT1JfVkVSU0lPTiA9PSA0CisvLyBUT0RPOiBVc2UgdGhlIHNhbWUgaW1wbGVtZW50YXRpb24gaW4gdGhlIGhhbCB3aGVuIGl0IG1vdmVzIHRvIGEgdXRpbCBsaWJyYXJ5Lgorc3RhdGljIHN0ZDo6c3RyaW5nIGRldmljZUFkZHJlc3NUb0hhbChjb25zdCBEZXZpY2VBZGRyZXNzJiBhZGRyZXNzKSB7CisgICAgLy8gSEFMIGFzc3VtZXMgdGhhdCB0aGUgYWRkcmVzcyBpcyBOVUwtdGVybWluYXRlZC4KKyAgICBjaGFyIGhhbEFkZHJlc3NbQVVESU9fREVWSUNFX01BWF9BRERSRVNTX0xFTl07CisgICAgbWVtc2V0KGhhbEFkZHJlc3MsIDAsIHNpemVvZihoYWxBZGRyZXNzKSk7CisgICAgYXVkaW9fZGV2aWNlc190IGhhbERldmljZSA9IHN0YXRpY19jYXN0PGF1ZGlvX2RldmljZXNfdD4oYWRkcmVzcy5kZXZpY2UpOworICAgIGNvbnN0IGJvb2wgaXNJbnB1dCA9IChoYWxEZXZpY2UgJiBBVURJT19ERVZJQ0VfQklUX0lOKSAhPSAwOworICAgIGlmIChpc0lucHV0KSBoYWxEZXZpY2UgJj0gfkFVRElPX0RFVklDRV9CSVRfSU47CisgICAgaWYgKCghaXNJbnB1dCAmJiAoaGFsRGV2aWNlICYgQVVESU9fREVWSUNFX09VVF9BTExfQTJEUCkgIT0gMCkgfHwKKyAgICAgICAgKGlzSW5wdXQgJiYgKGhhbERldmljZSAmIEFVRElPX0RFVklDRV9JTl9CTFVFVE9PVEhfQTJEUCkgIT0gMCkpIHsKKyAgICAgICAgc25wcmludGYoaGFsQWRkcmVzcywgc2l6ZW9mKGhhbEFkZHJlc3MpLCAiJTAyWDolMDJYOiUwMlg6JTAyWDolMDJYOiUwMlgiLAorICAgICAgICAgICAgICAgICBhZGRyZXNzLmFkZHJlc3MubWFjWzBdLCBhZGRyZXNzLmFkZHJlc3MubWFjWzFdLCBhZGRyZXNzLmFkZHJlc3MubWFjWzJdLAorICAgICAgICAgICAgICAgICBhZGRyZXNzLmFkZHJlc3MubWFjWzNdLCBhZGRyZXNzLmFkZHJlc3MubWFjWzRdLCBhZGRyZXNzLmFkZHJlc3MubWFjWzVdKTsKKyAgICB9IGVsc2UgaWYgKCghaXNJbnB1dCAmJiAoaGFsRGV2aWNlICYgQVVESU9fREVWSUNFX09VVF9JUCkgIT0gMCkgfHwKKyAgICAgICAgICAgICAgIChpc0lucHV0ICYmIChoYWxEZXZpY2UgJiBBVURJT19ERVZJQ0VfSU5fSVApICE9IDApKSB7CisgICAgICAgIHNucHJpbnRmKGhhbEFkZHJlc3MsIHNpemVvZihoYWxBZGRyZXNzKSwgIiVkLiVkLiVkLiVkIiwgYWRkcmVzcy5hZGRyZXNzLmlwdjRbMF0sCisgICAgICAgICAgICAgICAgIGFkZHJlc3MuYWRkcmVzcy5pcHY0WzFdLCBhZGRyZXNzLmFkZHJlc3MuaXB2NFsyXSwgYWRkcmVzcy5hZGRyZXNzLmlwdjRbM10pOworICAgIH0gZWxzZSBpZiAoKCFpc0lucHV0ICYmIChoYWxEZXZpY2UgJiBBVURJT19ERVZJQ0VfT1VUX0FMTF9VU0IpICE9IDApIHx8CisgICAgICAgICAgICAgICAoaXNJbnB1dCAmJiAoaGFsRGV2aWNlICYgQVVESU9fREVWSUNFX0lOX0FMTF9VU0IpICE9IDApKSB7CisgICAgICAgIHNucHJpbnRmKGhhbEFkZHJlc3MsIHNpemVvZihoYWxBZGRyZXNzKSwgImNhcmQ9JWQ7ZGV2aWNlPSVkIiwgYWRkcmVzcy5hZGRyZXNzLmFsc2EuY2FyZCwKKyAgICAgICAgICAgICAgICAgYWRkcmVzcy5hZGRyZXNzLmFsc2EuZGV2aWNlKTsKKyAgICB9IGVsc2UgaWYgKCghaXNJbnB1dCAmJiAoaGFsRGV2aWNlICYgQVVESU9fREVWSUNFX09VVF9CVVMpICE9IDApIHx8CisgICAgICAgICAgICAgICAoaXNJbnB1dCAmJiAoaGFsRGV2aWNlICYgQVVESU9fREVWSUNFX0lOX0JVUykgIT0gMCkpIHsKKyAgICAgICAgc25wcmludGYoaGFsQWRkcmVzcywgc2l6ZW9mKGhhbEFkZHJlc3MpLCAiJXMiLCBhZGRyZXNzLmJ1c0FkZHJlc3MuY19zdHIoKSk7CisgICAgfSBlbHNlIGlmICgoIWlzSW5wdXQgJiYgKGhhbERldmljZSAmIEFVRElPX0RFVklDRV9PVVRfUkVNT1RFX1NVQk1JWCkpICE9IDAgfHwKKyAgICAgICAgICAgICAgIChpc0lucHV0ICYmIChoYWxEZXZpY2UgJiBBVURJT19ERVZJQ0VfSU5fUkVNT1RFX1NVQk1JWCkgIT0gMCkpIHsKKyAgICAgICAgc25wcmludGYoaGFsQWRkcmVzcywgc2l6ZW9mKGhhbEFkZHJlc3MpLCAiJXMiLCBhZGRyZXNzLnJTdWJtaXhBZGRyZXNzLmNfc3RyKCkpOworICAgIH0gZWxzZSB7CisgICAgICAgIHNucHJpbnRmKGhhbEFkZHJlc3MsIHNpemVvZihoYWxBZGRyZXNzKSwgIiVzIiwgYWRkcmVzcy5idXNBZGRyZXNzLmNfc3RyKCkpOworICAgIH0KKyAgICByZXR1cm4gaGFsQWRkcmVzczsKK30KKworLy9sb2NhbCBjb252ZXJzaW9uIGhlbHBlcnMKKworc3RhdGljIGF1ZGlvX21pY3JvcGhvbmVfY2hhbm5lbF9tYXBwaW5nX3QgIGNoYW5uZWxNYXBwaW5nVG9IYWwoQXVkaW9NaWNyb3Bob25lQ2hhbm5lbE1hcHBpbmcgbWFwcGluZykgeworICAgIHN3aXRjaCAobWFwcGluZykgeworICAgICAgICBjYXNlIEF1ZGlvTWljcm9waG9uZUNoYW5uZWxNYXBwaW5nOjpVTlVTRUQ6CisgICAgICAgICAgICByZXR1cm4gQVVESU9fTUlDUk9QSE9ORV9DSEFOTkVMX01BUFBJTkdfVU5VU0VEOworICAgICAgICBjYXNlIEF1ZGlvTWljcm9waG9uZUNoYW5uZWxNYXBwaW5nOjpESVJFQ1Q6CisgICAgICAgICAgICByZXR1cm4gQVVESU9fTUlDUk9QSE9ORV9DSEFOTkVMX01BUFBJTkdfRElSRUNUOworICAgICAgICBjYXNlIEF1ZGlvTWljcm9waG9uZUNoYW5uZWxNYXBwaW5nOjpQUk9DRVNTRUQ6CisgICAgICAgICAgICByZXR1cm4gQVVESU9fTUlDUk9QSE9ORV9DSEFOTkVMX01BUFBJTkdfUFJPQ0VTU0VEOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgTE9HX0FMV0FZU19GQVRBTCgiVW5rbm93biBjaGFubmVsTWFwcGluZ1RvSGFsIGNvbnZlcnNpb24gJWQiLCBtYXBwaW5nKTsKKyAgICB9Cit9CisKK3N0YXRpYyBhdWRpb19taWNyb3Bob25lX2xvY2F0aW9uX3QgbG9jYXRpb25Ub0hhbChBdWRpb01pY3JvcGhvbmVMb2NhdGlvbiBsb2NhdGlvbikgeworICAgIHN3aXRjaCAobG9jYXRpb24pIHsKKyAgICAgICAgY2FzZSBBdWRpb01pY3JvcGhvbmVMb2NhdGlvbjo6VU5LTk9XTjoKKyAgICAgICAgICAgIHJldHVybiBBVURJT19NSUNST1BIT05FX0xPQ0FUSU9OX1VOS05PV047CisgICAgICAgIGNhc2UgQXVkaW9NaWNyb3Bob25lTG9jYXRpb246Ok1BSU5CT0RZOgorICAgICAgICAgICAgcmV0dXJuIEFVRElPX01JQ1JPUEhPTkVfTE9DQVRJT05fTUFJTkJPRFk7CisgICAgICAgIGNhc2UgQXVkaW9NaWNyb3Bob25lTG9jYXRpb246Ok1BSU5CT0RZX01PVkFCTEU6CisgICAgICAgICAgICByZXR1cm4gQVVESU9fTUlDUk9QSE9ORV9MT0NBVElPTl9NQUlOQk9EWV9NT1ZBQkxFOworICAgICAgICBjYXNlIEF1ZGlvTWljcm9waG9uZUxvY2F0aW9uOjpQRVJJUEhFUkFMOgorICAgICAgICAgICAgcmV0dXJuIEFVRElPX01JQ1JPUEhPTkVfTE9DQVRJT05fUEVSSVBIRVJBTDsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIExPR19BTFdBWVNfRkFUQUwoIlVua25vd24gbG9jYXRpb25Ub0hhbCBjb252ZXJzaW9uICVkIiwgbG9jYXRpb24pOworICAgIH0KK30KK3N0YXRpYyBhdWRpb19taWNyb3Bob25lX2RpcmVjdGlvbmFsaXR5X3QgZGlyZWN0aW9uYWxpdHlUb0hhbChBdWRpb01pY3JvcGhvbmVEaXJlY3Rpb25hbGl0eSBkaXIpIHsKKyAgICBzd2l0Y2ggKGRpcikgeworICAgICAgICBjYXNlIEF1ZGlvTWljcm9waG9uZURpcmVjdGlvbmFsaXR5OjpVTktOT1dOOgorICAgICAgICAgICAgcmV0dXJuIEFVRElPX01JQ1JPUEhPTkVfRElSRUNUSU9OQUxJVFlfVU5LTk9XTjsKKyAgICAgICAgY2FzZSBBdWRpb01pY3JvcGhvbmVEaXJlY3Rpb25hbGl0eTo6T01OSToKKyAgICAgICAgICAgIHJldHVybiBBVURJT19NSUNST1BIT05FX0RJUkVDVElPTkFMSVRZX09NTkk7CisgICAgICAgIGNhc2UgQXVkaW9NaWNyb3Bob25lRGlyZWN0aW9uYWxpdHk6OkJJX0RJUkVDVElPTkFMOgorICAgICAgICAgICAgcmV0dXJuIEFVRElPX01JQ1JPUEhPTkVfRElSRUNUSU9OQUxJVFlfQklfRElSRUNUSU9OQUw7CisgICAgICAgIGNhc2UgQXVkaW9NaWNyb3Bob25lRGlyZWN0aW9uYWxpdHk6OkNBUkRJT0lEOgorICAgICAgICAgICAgcmV0dXJuIEFVRElPX01JQ1JPUEhPTkVfRElSRUNUSU9OQUxJVFlfQ0FSRElPSUQ7CisgICAgICAgIGNhc2UgQXVkaW9NaWNyb3Bob25lRGlyZWN0aW9uYWxpdHk6OkhZUEVSX0NBUkRJT0lEOgorICAgICAgICAgICAgcmV0dXJuIEFVRElPX01JQ1JPUEhPTkVfRElSRUNUSU9OQUxJVFlfSFlQRVJfQ0FSRElPSUQ7CisgICAgICAgIGNhc2UgQXVkaW9NaWNyb3Bob25lRGlyZWN0aW9uYWxpdHk6OlNVUEVSX0NBUkRJT0lEOgorICAgICAgICAgICAgcmV0dXJuIEFVRElPX01JQ1JPUEhPTkVfRElSRUNUSU9OQUxJVFlfU1VQRVJfQ0FSRElPSUQ7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBMT0dfQUxXQVlTX0ZBVEFMKCJVbmtub3duIGRpcmVjdGlvbmFsaXR5VG9IYWwgY29udmVyc2lvbiAlZCIsIGRpcik7CisgICAgfQorfQorCit2b2lkIG1pY3JvcGhvbmVJbmZvVG9IYWwoY29uc3QgTWljcm9waG9uZUluZm8mIHNyYywKKyAgICAgICAgICAgICAgICAgICAgICAgICBhdWRpb19taWNyb3Bob25lX2NoYXJhY3RlcmlzdGljX3QgKnBEc3QpIHsKKyAgICBpZiAocERzdCAhPSBOVUxMKSB7CisgICAgICAgIHNucHJpbnRmKHBEc3QtPmRldmljZV9pZCwgc2l6ZW9mKHBEc3QtPmRldmljZV9pZCksCisgICAgICAgICAgICAgICAgICIlcyIsIHNyYy5kZXZpY2VJZC5jX3N0cigpKTsKKyAgICAgICAgcERzdC0+ZGV2aWNlID0gc3RhdGljX2Nhc3Q8YXVkaW9fZGV2aWNlc190PihzcmMuZGV2aWNlQWRkcmVzcy5kZXZpY2UpOworICAgICAgICBzbnByaW50ZihwRHN0LT5hZGRyZXNzLCBzaXplb2YocERzdC0+YWRkcmVzcyksCisgICAgICAgICAgICAgICAgICIlcyIsIGRldmljZUFkZHJlc3NUb0hhbChzcmMuZGV2aWNlQWRkcmVzcykuY19zdHIoKSk7CisgICAgICAgIGlmIChzcmMuY2hhbm5lbE1hcHBpbmcuc2l6ZSgpID4gQVVESU9fQ0hBTk5FTF9DT1VOVF9NQVgpIHsKKyAgICAgICAgICAgIEFMT0dXKCJtaWNyb3Bob25lSW5mb1RvU3RydWN0IGZvdW5kICV6dSBjaGFubmVsTWFwcGluZyBlbGVtZW50cy4gTWF4IGV4cGVjdGVkIGlzICVkIiwKKyAgICAgICAgICAgICAgICAgIHNyYy5jaGFubmVsTWFwcGluZy5zaXplKCksIEFVRElPX0NIQU5ORUxfQ09VTlRfTUFYKTsKKyAgICAgICAgfQorICAgICAgICBzaXplX3QgY2g7CisgICAgICAgIGZvciAoY2ggPSAwOyBjaCA8IHNyYy5jaGFubmVsTWFwcGluZy5zaXplKCkgJiYgY2ggPCBBVURJT19DSEFOTkVMX0NPVU5UX01BWDsgY2grKykgeworICAgICAgICAgICAgcERzdC0+Y2hhbm5lbF9tYXBwaW5nW2NoXSA9IGNoYW5uZWxNYXBwaW5nVG9IYWwoc3JjLmNoYW5uZWxNYXBwaW5nW2NoXSk7CisgICAgICAgIH0KKyAgICAgICAgZm9yICg7IGNoIDwgQVVESU9fQ0hBTk5FTF9DT1VOVF9NQVg7IGNoKyspIHsKKyAgICAgICAgICAgIHBEc3QtPmNoYW5uZWxfbWFwcGluZ1tjaF0gPSBBVURJT19NSUNST1BIT05FX0NIQU5ORUxfTUFQUElOR19VTlVTRUQ7CisgICAgICAgIH0KKyAgICAgICAgcERzdC0+bG9jYXRpb24gPSBsb2NhdGlvblRvSGFsKHNyYy5sb2NhdGlvbik7CisgICAgICAgIHBEc3QtPmdyb3VwID0gKGF1ZGlvX21pY3JvcGhvbmVfZ3JvdXBfdClzcmMuZ3JvdXA7CisgICAgICAgIHBEc3QtPmluZGV4X2luX3RoZV9ncm91cCA9ICh1bnNpZ25lZCBpbnQpc3JjLmluZGV4SW5UaGVHcm91cDsKKyAgICAgICAgcERzdC0+c2Vuc2l0aXZpdHkgPSBzcmMuc2Vuc2l0aXZpdHk7CisgICAgICAgIHBEc3QtPm1heF9zcGwgPSBzcmMubWF4U3BsOworICAgICAgICBwRHN0LT5taW5fc3BsID0gc3JjLm1pblNwbDsKKyAgICAgICAgcERzdC0+ZGlyZWN0aW9uYWxpdHkgPSBkaXJlY3Rpb25hbGl0eVRvSGFsKHNyYy5kaXJlY3Rpb25hbGl0eSk7CisgICAgICAgIHBEc3QtPm51bV9mcmVxdWVuY3lfcmVzcG9uc2VzID0gKHVuc2lnbmVkIGludClzcmMuZnJlcXVlbmN5UmVzcG9uc2Uuc2l6ZSgpOworICAgICAgICBpZiAocERzdC0+bnVtX2ZyZXF1ZW5jeV9yZXNwb25zZXMgPiBBVURJT19NSUNST1BIT05FX01BWF9GUkVRVUVOQ1lfUkVTUE9OU0VTKSB7CisgICAgICAgICAgICBBTE9HVygibWljcm9waG9uZUluZm9Ub1N0cnVjdCBmb3VuZCAlZCBmcmVxdWVuY3kgcmVzcG9uc2VzLiBNYXggZXhwZWN0ZWQgaXMgJWQiLAorICAgICAgICAgICAgICAgICAgcERzdC0+bnVtX2ZyZXF1ZW5jeV9yZXNwb25zZXMsIEFVRElPX01JQ1JPUEhPTkVfTUFYX0ZSRVFVRU5DWV9SRVNQT05TRVMpOworICAgICAgICAgICAgcERzdC0+bnVtX2ZyZXF1ZW5jeV9yZXNwb25zZXMgPSBBVURJT19NSUNST1BIT05FX01BWF9GUkVRVUVOQ1lfUkVTUE9OU0VTOworICAgICAgICB9CisgICAgICAgIGZvciAoc2l6ZV90IGsgPSAwOyBrIDwgcERzdC0+bnVtX2ZyZXF1ZW5jeV9yZXNwb25zZXM7IGsrKykgeworICAgICAgICAgICAgcERzdC0+ZnJlcXVlbmN5X3Jlc3BvbnNlc1swXVtrXSA9IHNyYy5mcmVxdWVuY3lSZXNwb25zZVtrXS5mcmVxdWVuY3k7CisgICAgICAgICAgICBwRHN0LT5mcmVxdWVuY3lfcmVzcG9uc2VzWzFdW2tdID0gc3JjLmZyZXF1ZW5jeVJlc3BvbnNlW2tdLmxldmVsOworICAgICAgICB9CisgICAgICAgIHBEc3QtPmdlb21ldHJpY19sb2NhdGlvbi54ID0gc3JjLnBvc2l0aW9uLng7CisgICAgICAgIHBEc3QtPmdlb21ldHJpY19sb2NhdGlvbi55ID0gc3JjLnBvc2l0aW9uLnk7CisgICAgICAgIHBEc3QtPmdlb21ldHJpY19sb2NhdGlvbi56ID0gc3JjLnBvc2l0aW9uLno7CisgICAgICAgIHBEc3QtPm9yaWVudGF0aW9uLnggPSBzcmMub3JpZW50YXRpb24ueDsKKyAgICAgICAgcERzdC0+b3JpZW50YXRpb24ueSA9IHNyYy5vcmllbnRhdGlvbi55OworICAgICAgICBwRHN0LT5vcmllbnRhdGlvbi56ID0gc3JjLm9yaWVudGF0aW9uLno7CisgICAgfQorfQorI2VuZGlmCisKK30gIC8vIG5hbWVzcGFjZSBDUFBfVkVSU0lPTgorfSAgLy8gbmFtZXNwYWNlIGFuZHJvaWQKZGlmZiAtLWdpdCBhL21lZGlhL2xpYmF1ZGlvaGFsL2ltcGwvQ29udmVyc2lvbkhlbHBlckhpZGwuaCBiL21lZGlhL2xpYmF1ZGlvaGFsL2ltcGwvQ29udmVyc2lvbkhlbHBlckhpZGwuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xYTkzMTlmCi0tLSAvZGV2L251bGwKKysrIGIvbWVkaWEvbGliYXVkaW9oYWwvaW1wbC9Db252ZXJzaW9uSGVscGVySGlkbC5oCkBAIC0wLDAgKzEsOTUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworCisjaWZuZGVmIEFORFJPSURfSEFSRFdBUkVfQ09OVkVSU0lPTl9IRUxQRVJfSElETF9ICisjZGVmaW5lIEFORFJPSURfSEFSRFdBUkVfQ09OVkVSU0lPTl9IRUxQRVJfSElETF9ICisKKyNpbmNsdWRlIDxhbmRyb2lkL2hhcmR3YXJlL2F1ZGlvLzIuMC90eXBlcy5oPgorI2luY2x1ZGUgPGFuZHJvaWQvaGFyZHdhcmUvYXVkaW8vNC4wL3R5cGVzLmg+CisjaW5jbHVkZSA8aGlkbC9IaWRsU3VwcG9ydC5oPgorI2luY2x1ZGUgPHN5c3RlbS9hdWRpby5oPgorI2luY2x1ZGUgPHV0aWxzL1N0cmluZzguaD4KKwordXNpbmcgOjphbmRyb2lkOjpoYXJkd2FyZTo6YXVkaW86OkNQUF9WRVJTSU9OOjpQYXJhbWV0ZXJWYWx1ZTsKK3VzaW5nIENvcmVSZXN1bHQgPSA6OmFuZHJvaWQ6OmhhcmR3YXJlOjphdWRpbzo6Q1BQX1ZFUlNJT046OlJlc3VsdDsKKwordXNpbmcgOjphbmRyb2lkOjpoYXJkd2FyZTo6UmV0dXJuOwordXNpbmcgOjphbmRyb2lkOjpoYXJkd2FyZTo6aGlkbF9zdHJpbmc7Cit1c2luZyA6OmFuZHJvaWQ6OmhhcmR3YXJlOjpoaWRsX3ZlYzsKKworbmFtZXNwYWNlIGFuZHJvaWQgeworbmFtZXNwYWNlIENQUF9WRVJTSU9OIHsKKworY2xhc3MgQ29udmVyc2lvbkhlbHBlckhpZGwgeworICBwcm90ZWN0ZWQ6CisgICAgc3RhdGljIHN0YXR1c190IGtleXNGcm9tSGFsKGNvbnN0IFN0cmluZzgmIGtleXMsIGhpZGxfdmVjPGhpZGxfc3RyaW5nPiAqaGlkbEtleXMpOworICAgIHN0YXRpYyBzdGF0dXNfdCBwYXJhbWV0ZXJzRnJvbUhhbChjb25zdCBTdHJpbmc4JiBrdlBhaXJzLCBoaWRsX3ZlYzxQYXJhbWV0ZXJWYWx1ZT4gKmhpZGxQYXJhbXMpOworICAgIHN0YXRpYyB2b2lkIHBhcmFtZXRlcnNUb0hhbChjb25zdCBoaWRsX3ZlYzxQYXJhbWV0ZXJWYWx1ZT4mIHBhcmFtZXRlcnMsIFN0cmluZzggKnZhbHVlcyk7CisKKyAgICBDb252ZXJzaW9uSGVscGVySGlkbChjb25zdCBjaGFyKiBjbGFzc05hbWUpOworCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgUiwgdHlwZW5hbWUgVD4KKyAgICBzdGF0dXNfdCBwcm9jZXNzUmV0dXJuKGNvbnN0IGNoYXIqIGZ1bmNOYW1lLCBjb25zdCBSZXR1cm48Uj4mIHJldCwgVCAqcmV0dmFsKSB7CisgICAgICAgIGlmIChyZXQuaXNPaygpKSB7CisgICAgICAgICAgICAvLyBUaGlzIHdheSBpdCBhbHNvIHdvcmtzIGZvciBlbnVtIGNsYXNzIHRvIHVuc2NvcGVkIGVudW0gY29udmVyc2lvbi4KKyAgICAgICAgICAgICpyZXR2YWwgPSBzdGF0aWNfY2FzdDxUPihzdGF0aWNfY2FzdDxSPihyZXQpKTsKKyAgICAgICAgICAgIHJldHVybiBPSzsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gcHJvY2Vzc1JldHVybihmdW5jTmFtZSwgcmV0KTsKKyAgICB9CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgorICAgIHN0YXR1c190IHByb2Nlc3NSZXR1cm4oY29uc3QgY2hhciogZnVuY05hbWUsIGNvbnN0IFJldHVybjxUPiYgcmV0KSB7CisgICAgICAgIGlmICghcmV0LmlzT2soKSkgeworICAgICAgICAgICAgZW1pdEVycm9yKGZ1bmNOYW1lLCByZXQuZGVzY3JpcHRpb24oKS5jX3N0cigpKTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gcmV0LmlzT2soKSA/IE9LIDogRkFJTEVEX1RSQU5TQUNUSU9OOworICAgIH0KKworICAgIHN0YXR1c190IHByb2Nlc3NSZXR1cm4oY29uc3QgY2hhciogZnVuY05hbWUsIGNvbnN0IFJldHVybjxDb3JlUmVzdWx0PiYgcmV0KSB7CisgICAgICAgIGlmICghcmV0LmlzT2soKSkgeworICAgICAgICAgICAgZW1pdEVycm9yKGZ1bmNOYW1lLCByZXQuZGVzY3JpcHRpb24oKS5jX3N0cigpKTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gcmV0LmlzT2soKSA/IGFuYWx5emVSZXN1bHQocmV0KSA6IEZBSUxFRF9UUkFOU0FDVElPTjsKKyAgICB9CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgorICAgIHN0YXR1c190IHByb2Nlc3NSZXR1cm4oCisgICAgICAgICAgICBjb25zdCBjaGFyKiBmdW5jTmFtZSwgY29uc3QgUmV0dXJuPFQ+JiByZXQsIENvcmVSZXN1bHQgcmV0dmFsKSB7CisgICAgICAgIGlmICghcmV0LmlzT2soKSkgeworICAgICAgICAgICAgZW1pdEVycm9yKGZ1bmNOYW1lLCByZXQuZGVzY3JpcHRpb24oKS5jX3N0cigpKTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gcmV0LmlzT2soKSA/IGFuYWx5emVSZXN1bHQocmV0dmFsKSA6IEZBSUxFRF9UUkFOU0FDVElPTjsKKyAgICB9CisKKyAgcHJpdmF0ZToKKyAgICBjb25zdCBjaGFyKiBtQ2xhc3NOYW1lOworCisgICAgc3RhdGljIHN0YXR1c190IGFuYWx5emVSZXN1bHQoY29uc3QgQ29yZVJlc3VsdCYgcmVzdWx0KTsKKworICAgIHZvaWQgZW1pdEVycm9yKGNvbnN0IGNoYXIqIGZ1bmNOYW1lLCBjb25zdCBjaGFyKiBkZXNjcmlwdGlvbik7Cit9OworCisjaWYgTUFKT1JfVkVSU0lPTiA9PSA0Cit1c2luZyA6OmFuZHJvaWQ6OmhhcmR3YXJlOjphdWRpbzo6Q1BQX1ZFUlNJT046Ok1pY3JvcGhvbmVJbmZvOwordm9pZCBtaWNyb3Bob25lSW5mb1RvSGFsKGNvbnN0IE1pY3JvcGhvbmVJbmZvJiBzcmMsCisgICAgICAgICAgICAgICAgICAgICAgICAgYXVkaW9fbWljcm9waG9uZV9jaGFyYWN0ZXJpc3RpY190ICpwRHN0KTsKKyNlbmRpZgorCit9ICAvLyBuYW1lc3BhY2UgQ1BQX1ZFUlNJT04KK30gIC8vIG5hbWVzcGFjZSBhbmRyb2lkCisKKyNlbmRpZiAvLyBBTkRST0lEX0hBUkRXQVJFX0NPTlZFUlNJT05fSEVMUEVSX0hJRExfSApkaWZmIC0tZ2l0IGEvbWVkaWEvbGliYXVkaW9oYWwvaW1wbC9EZXZpY2VIYWxIaWRsLmNwcCBiL21lZGlhL2xpYmF1ZGlvaGFsL2ltcGwvRGV2aWNlSGFsSGlkbC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzIzZTJlYgotLS0gL2Rldi9udWxsCisrKyBiL21lZGlhL2xpYmF1ZGlvaGFsL2ltcGwvRGV2aWNlSGFsSGlkbC5jcHAKQEAgLTAsMCArMSw0MDcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworCisjaW5jbHVkZSA8c3RkaW8uaD4KKworI2RlZmluZSBMT0dfVEFHICJEZXZpY2VIYWxIaWRsIgorLy8jZGVmaW5lIExPR19OREVCVUcgMAorCisjaW5jbHVkZSA8YW5kcm9pZC9oYXJkd2FyZS9hdWRpby8yLjAvSVByaW1hcnlEZXZpY2UuaD4KKyNpbmNsdWRlIDxhbmRyb2lkL2hhcmR3YXJlL2F1ZGlvLzQuMC9JUHJpbWFyeURldmljZS5oPgorI2luY2x1ZGUgPGN1dGlscy9uYXRpdmVfaGFuZGxlLmg+CisjaW5jbHVkZSA8aHdiaW5kZXIvSVBDVGhyZWFkU3RhdGUuaD4KKyNpbmNsdWRlIDx1dGlscy9Mb2cuaD4KKworI2luY2x1ZGUgPGNvbW1vbi9hbGwtdmVyc2lvbnMvVmVyc2lvblV0aWxzLmg+CisKKyNpbmNsdWRlICJEZXZpY2VIYWxIaWRsLmgiCisjaW5jbHVkZSAiSGlkbFV0aWxzLmgiCisjaW5jbHVkZSAiU3RyZWFtSGFsSGlkbC5oIgorI2luY2x1ZGUgIlZlcnNpb25VdGlscy5oIgorCit1c2luZyA6OmFuZHJvaWQ6OmhhcmR3YXJlOjphdWRpbzo6Y29tbW9uOjpDUFBfVkVSU0lPTjo6QXVkaW9Db25maWc7Cit1c2luZyA6OmFuZHJvaWQ6OmhhcmR3YXJlOjphdWRpbzo6Y29tbW9uOjpDUFBfVkVSU0lPTjo6QXVkaW9EZXZpY2U7Cit1c2luZyA6OmFuZHJvaWQ6OmhhcmR3YXJlOjphdWRpbzo6Y29tbW9uOjpDUFBfVkVSU0lPTjo6QXVkaW9JbnB1dEZsYWc7Cit1c2luZyA6OmFuZHJvaWQ6OmhhcmR3YXJlOjphdWRpbzo6Y29tbW9uOjpDUFBfVkVSU0lPTjo6QXVkaW9PdXRwdXRGbGFnOwordXNpbmcgOjphbmRyb2lkOjpoYXJkd2FyZTo6YXVkaW86OmNvbW1vbjo6Q1BQX1ZFUlNJT046OkF1ZGlvUGF0Y2hIYW5kbGU7Cit1c2luZyA6OmFuZHJvaWQ6OmhhcmR3YXJlOjphdWRpbzo6Y29tbW9uOjpDUFBfVkVSU0lPTjo6QXVkaW9Qb3J0OwordXNpbmcgOjphbmRyb2lkOjpoYXJkd2FyZTo6YXVkaW86OmNvbW1vbjo6Q1BQX1ZFUlNJT046OkF1ZGlvUG9ydENvbmZpZzsKK3VzaW5nIDo6YW5kcm9pZDo6aGFyZHdhcmU6OmF1ZGlvOjpjb21tb246OkNQUF9WRVJTSU9OOjpBdWRpb01vZGU7Cit1c2luZyA6OmFuZHJvaWQ6OmhhcmR3YXJlOjphdWRpbzo6Y29tbW9uOjpDUFBfVkVSU0lPTjo6QXVkaW9Tb3VyY2U7Cit1c2luZyA6OmFuZHJvaWQ6OmhhcmR3YXJlOjphdWRpbzo6Y29tbW9uOjpDUFBfVkVSU0lPTjo6SGlkbFV0aWxzOwordXNpbmcgOjphbmRyb2lkOjpoYXJkd2FyZTo6YXVkaW86OmNvbW1vbjo6dXRpbHM6Om1rRW51bUNvbnZlcnRlcjsKK3VzaW5nIDo6YW5kcm9pZDo6aGFyZHdhcmU6OmF1ZGlvOjpDUFBfVkVSU0lPTjo6RGV2aWNlQWRkcmVzczsKK3VzaW5nIDo6YW5kcm9pZDo6aGFyZHdhcmU6OmF1ZGlvOjpDUFBfVkVSU0lPTjo6SVByaW1hcnlEZXZpY2U7Cit1c2luZyA6OmFuZHJvaWQ6OmhhcmR3YXJlOjphdWRpbzo6Q1BQX1ZFUlNJT046OlBhcmFtZXRlclZhbHVlOwordXNpbmcgOjphbmRyb2lkOjpoYXJkd2FyZTo6YXVkaW86OkNQUF9WRVJTSU9OOjpSZXN1bHQ7Cit1c2luZyA6OmFuZHJvaWQ6OmhhcmR3YXJlOjpoaWRsX3N0cmluZzsKK3VzaW5nIDo6YW5kcm9pZDo6aGFyZHdhcmU6OmhpZGxfdmVjOworCisjaWYgTUFKT1JfVkVSU0lPTiA9PSA0Cit1c2luZyA6OmFuZHJvaWQ6OmhhcmR3YXJlOjphdWRpbzo6Q1BQX1ZFUlNJT046OlNpbmtNZXRhZGF0YTsKKyNlbmRpZgorCituYW1lc3BhY2UgYW5kcm9pZCB7CituYW1lc3BhY2UgQ1BQX1ZFUlNJT04geworCituYW1lc3BhY2UgeworCitzdGF0dXNfdCBkZXZpY2VBZGRyZXNzRnJvbUhhbCgKKyAgICAgICAgYXVkaW9fZGV2aWNlc190IGRldmljZSwgY29uc3QgY2hhciogaGFsQWRkcmVzcywgRGV2aWNlQWRkcmVzcyogYWRkcmVzcykgeworICAgIGFkZHJlc3MtPmRldmljZSA9IEF1ZGlvRGV2aWNlKGRldmljZSk7CisKKyAgICBpZiAoaGFsQWRkcmVzcyA9PSBudWxscHRyIHx8IHN0cm5sZW4oaGFsQWRkcmVzcywgQVVESU9fREVWSUNFX01BWF9BRERSRVNTX0xFTikgPT0gMCkgeworICAgICAgICByZXR1cm4gT0s7CisgICAgfQorICAgIGNvbnN0IGJvb2wgaXNJbnB1dCA9IChkZXZpY2UgJiBBVURJT19ERVZJQ0VfQklUX0lOKSAhPSAwOworICAgIGlmIChpc0lucHV0KSBkZXZpY2UgJj0gfkFVRElPX0RFVklDRV9CSVRfSU47CisgICAgaWYgKCghaXNJbnB1dCAmJiAoZGV2aWNlICYgQVVESU9fREVWSUNFX09VVF9BTExfQTJEUCkgIT0gMCkKKyAgICAgICAgICAgIHx8IChpc0lucHV0ICYmIChkZXZpY2UgJiBBVURJT19ERVZJQ0VfSU5fQkxVRVRPT1RIX0EyRFApICE9IDApKSB7CisgICAgICAgIGludCBzdGF0dXMgPSBzc2NhbmYoaGFsQWRkcmVzcywKKyAgICAgICAgICAgICAgICAiJWhoWDolaGhYOiVoaFg6JWhoWDolaGhYOiVoaFgiLAorICAgICAgICAgICAgICAgICZhZGRyZXNzLT5hZGRyZXNzLm1hY1swXSwgJmFkZHJlc3MtPmFkZHJlc3MubWFjWzFdLCAmYWRkcmVzcy0+YWRkcmVzcy5tYWNbMl0sCisgICAgICAgICAgICAgICAgJmFkZHJlc3MtPmFkZHJlc3MubWFjWzNdLCAmYWRkcmVzcy0+YWRkcmVzcy5tYWNbNF0sICZhZGRyZXNzLT5hZGRyZXNzLm1hY1s1XSk7CisgICAgICAgIHJldHVybiBzdGF0dXMgPT0gNiA/IE9LIDogQkFEX1ZBTFVFOworICAgIH0gZWxzZSBpZiAoKCFpc0lucHV0ICYmIChkZXZpY2UgJiBBVURJT19ERVZJQ0VfT1VUX0lQKSAhPSAwKQorICAgICAgICAgICAgfHwgKGlzSW5wdXQgJiYgKGRldmljZSAmIEFVRElPX0RFVklDRV9JTl9JUCkgIT0gMCkpIHsKKyAgICAgICAgaW50IHN0YXR1cyA9IHNzY2FuZihoYWxBZGRyZXNzLAorICAgICAgICAgICAgICAgICIlaGh1LiVoaHUuJWhodS4laGh1IiwKKyAgICAgICAgICAgICAgICAmYWRkcmVzcy0+YWRkcmVzcy5pcHY0WzBdLCAmYWRkcmVzcy0+YWRkcmVzcy5pcHY0WzFdLAorICAgICAgICAgICAgICAgICZhZGRyZXNzLT5hZGRyZXNzLmlwdjRbMl0sICZhZGRyZXNzLT5hZGRyZXNzLmlwdjRbM10pOworICAgICAgICByZXR1cm4gc3RhdHVzID09IDQgPyBPSyA6IEJBRF9WQUxVRTsKKyAgICB9IGVsc2UgaWYgKCghaXNJbnB1dCAmJiAoZGV2aWNlICYgQVVESU9fREVWSUNFX09VVF9BTExfVVNCKSkgIT0gMAorICAgICAgICAgICAgfHwgKGlzSW5wdXQgJiYgKGRldmljZSAmIEFVRElPX0RFVklDRV9JTl9BTExfVVNCKSkgIT0gMCkgeworICAgICAgICBpbnQgc3RhdHVzID0gc3NjYW5mKGhhbEFkZHJlc3MsCisgICAgICAgICAgICAgICAgImNhcmQ9JWQ7ZGV2aWNlPSVkIiwKKyAgICAgICAgICAgICAgICAmYWRkcmVzcy0+YWRkcmVzcy5hbHNhLmNhcmQsICZhZGRyZXNzLT5hZGRyZXNzLmFsc2EuZGV2aWNlKTsKKyAgICAgICAgcmV0dXJuIHN0YXR1cyA9PSAyID8gT0sgOiBCQURfVkFMVUU7CisgICAgfSBlbHNlIGlmICgoIWlzSW5wdXQgJiYgKGRldmljZSAmIEFVRElPX0RFVklDRV9PVVRfQlVTKSAhPSAwKQorICAgICAgICAgICAgfHwgKGlzSW5wdXQgJiYgKGRldmljZSAmIEFVRElPX0RFVklDRV9JTl9CVVMpICE9IDApKSB7CisgICAgICAgIGlmIChoYWxBZGRyZXNzICE9IE5VTEwpIHsKKyAgICAgICAgICAgIGFkZHJlc3MtPmJ1c0FkZHJlc3MgPSBoYWxBZGRyZXNzOworICAgICAgICAgICAgcmV0dXJuIE9LOworICAgICAgICB9CisgICAgICAgIHJldHVybiBCQURfVkFMVUU7CisgICAgfSBlbHNlIGlmICgoIWlzSW5wdXQgJiYgKGRldmljZSAmIEFVRElPX0RFVklDRV9PVVRfUkVNT1RFX1NVQk1JWCkpICE9IDAKKyAgICAgICAgICAgIHx8IChpc0lucHV0ICYmIChkZXZpY2UgJiBBVURJT19ERVZJQ0VfSU5fUkVNT1RFX1NVQk1JWCkgIT0gMCkpIHsKKyAgICAgICAgaWYgKGhhbEFkZHJlc3MgIT0gTlVMTCkgeworICAgICAgICAgICAgYWRkcmVzcy0+clN1Ym1peEFkZHJlc3MgPSBoYWxBZGRyZXNzOworICAgICAgICAgICAgcmV0dXJuIE9LOworICAgICAgICB9CisgICAgICAgIHJldHVybiBCQURfVkFMVUU7CisgICAgfQorICAgIHJldHVybiBPSzsKK30KKworfSAgLy8gbmFtZXNwYWNlCisKK0RldmljZUhhbEhpZGw6OkRldmljZUhhbEhpZGwoY29uc3Qgc3A8SURldmljZT4mIGRldmljZSkKKyAgICAgICAgOiBDb252ZXJzaW9uSGVscGVySGlkbCgiRGV2aWNlIiksIG1EZXZpY2UoZGV2aWNlKSwKKyAgICAgICAgICBtUHJpbWFyeURldmljZShJUHJpbWFyeURldmljZTo6Y2FzdEZyb20oZGV2aWNlKSkgeworfQorCitEZXZpY2VIYWxIaWRsOjp+RGV2aWNlSGFsSGlkbCgpIHsKKyAgICBpZiAobURldmljZSAhPSAwKSB7CisgICAgICAgIG1EZXZpY2UuY2xlYXIoKTsKKyAgICAgICAgaGFyZHdhcmU6OklQQ1RocmVhZFN0YXRlOjpzZWxmKCktPmZsdXNoQ29tbWFuZHMoKTsKKyAgICB9Cit9CisKK3N0YXR1c190IERldmljZUhhbEhpZGw6OmdldFN1cHBvcnRlZERldmljZXModWludDMyX3QqKSB7CisgICAgLy8gT2Jzb2xldGUuCisgICAgcmV0dXJuIElOVkFMSURfT1BFUkFUSU9OOworfQorCitzdGF0dXNfdCBEZXZpY2VIYWxIaWRsOjppbml0Q2hlY2soKSB7CisgICAgaWYgKG1EZXZpY2UgPT0gMCkgcmV0dXJuIE5PX0lOSVQ7CisgICAgcmV0dXJuIHByb2Nlc3NSZXR1cm4oImluaXRDaGVjayIsIG1EZXZpY2UtPmluaXRDaGVjaygpKTsKK30KKworc3RhdHVzX3QgRGV2aWNlSGFsSGlkbDo6c2V0Vm9pY2VWb2x1bWUoZmxvYXQgdm9sdW1lKSB7CisgICAgaWYgKG1EZXZpY2UgPT0gMCkgcmV0dXJuIE5PX0lOSVQ7CisgICAgaWYgKG1QcmltYXJ5RGV2aWNlID09IDApIHJldHVybiBJTlZBTElEX09QRVJBVElPTjsKKyAgICByZXR1cm4gcHJvY2Vzc1JldHVybigic2V0Vm9pY2VWb2x1bWUiLCBtUHJpbWFyeURldmljZS0+c2V0Vm9pY2VWb2x1bWUodm9sdW1lKSk7Cit9CisKK3N0YXR1c190IERldmljZUhhbEhpZGw6OnNldE1hc3RlclZvbHVtZShmbG9hdCB2b2x1bWUpIHsKKyAgICBpZiAobURldmljZSA9PSAwKSByZXR1cm4gTk9fSU5JVDsKKyAgICBpZiAobVByaW1hcnlEZXZpY2UgPT0gMCkgcmV0dXJuIElOVkFMSURfT1BFUkFUSU9OOworICAgIHJldHVybiBwcm9jZXNzUmV0dXJuKCJzZXRNYXN0ZXJWb2x1bWUiLCBtUHJpbWFyeURldmljZS0+c2V0TWFzdGVyVm9sdW1lKHZvbHVtZSkpOworfQorCitzdGF0dXNfdCBEZXZpY2VIYWxIaWRsOjpnZXRNYXN0ZXJWb2x1bWUoZmxvYXQgKnZvbHVtZSkgeworICAgIGlmIChtRGV2aWNlID09IDApIHJldHVybiBOT19JTklUOworICAgIGlmIChtUHJpbWFyeURldmljZSA9PSAwKSByZXR1cm4gSU5WQUxJRF9PUEVSQVRJT047CisgICAgUmVzdWx0IHJldHZhbDsKKyAgICBSZXR1cm48dm9pZD4gcmV0ID0gbVByaW1hcnlEZXZpY2UtPmdldE1hc3RlclZvbHVtZSgKKyAgICAgICAgICAgIFsmXShSZXN1bHQgciwgZmxvYXQgdikgeworICAgICAgICAgICAgICAgIHJldHZhbCA9IHI7CisgICAgICAgICAgICAgICAgaWYgKHJldHZhbCA9PSBSZXN1bHQ6Ok9LKSB7CisgICAgICAgICAgICAgICAgICAgICp2b2x1bWUgPSB2OworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0pOworICAgIHJldHVybiBwcm9jZXNzUmV0dXJuKCJnZXRNYXN0ZXJWb2x1bWUiLCByZXQsIHJldHZhbCk7Cit9CisKK3N0YXR1c190IERldmljZUhhbEhpZGw6OnNldE1vZGUoYXVkaW9fbW9kZV90IG1vZGUpIHsKKyAgICBpZiAobURldmljZSA9PSAwKSByZXR1cm4gTk9fSU5JVDsKKyAgICBpZiAobVByaW1hcnlEZXZpY2UgPT0gMCkgcmV0dXJuIElOVkFMSURfT1BFUkFUSU9OOworICAgIHJldHVybiBwcm9jZXNzUmV0dXJuKCJzZXRNb2RlIiwgbVByaW1hcnlEZXZpY2UtPnNldE1vZGUoQXVkaW9Nb2RlKG1vZGUpKSk7Cit9CisKK3N0YXR1c190IERldmljZUhhbEhpZGw6OnNldE1pY011dGUoYm9vbCBzdGF0ZSkgeworICAgIGlmIChtRGV2aWNlID09IDApIHJldHVybiBOT19JTklUOworICAgIHJldHVybiBwcm9jZXNzUmV0dXJuKCJzZXRNaWNNdXRlIiwgbURldmljZS0+c2V0TWljTXV0ZShzdGF0ZSkpOworfQorCitzdGF0dXNfdCBEZXZpY2VIYWxIaWRsOjpnZXRNaWNNdXRlKGJvb2wgKnN0YXRlKSB7CisgICAgaWYgKG1EZXZpY2UgPT0gMCkgcmV0dXJuIE5PX0lOSVQ7CisgICAgUmVzdWx0IHJldHZhbDsKKyAgICBSZXR1cm48dm9pZD4gcmV0ID0gbURldmljZS0+Z2V0TWljTXV0ZSgKKyAgICAgICAgICAgIFsmXShSZXN1bHQgciwgYm9vbCBtdXRlKSB7CisgICAgICAgICAgICAgICAgcmV0dmFsID0gcjsKKyAgICAgICAgICAgICAgICBpZiAocmV0dmFsID09IFJlc3VsdDo6T0spIHsKKyAgICAgICAgICAgICAgICAgICAgKnN0YXRlID0gbXV0ZTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9KTsKKyAgICByZXR1cm4gcHJvY2Vzc1JldHVybigiZ2V0TWljTXV0ZSIsIHJldCwgcmV0dmFsKTsKK30KKworc3RhdHVzX3QgRGV2aWNlSGFsSGlkbDo6c2V0TWFzdGVyTXV0ZShib29sIHN0YXRlKSB7CisgICAgaWYgKG1EZXZpY2UgPT0gMCkgcmV0dXJuIE5PX0lOSVQ7CisgICAgcmV0dXJuIHByb2Nlc3NSZXR1cm4oInNldE1hc3Rlck11dGUiLCBtRGV2aWNlLT5zZXRNYXN0ZXJNdXRlKHN0YXRlKSk7Cit9CisKK3N0YXR1c190IERldmljZUhhbEhpZGw6OmdldE1hc3Rlck11dGUoYm9vbCAqc3RhdGUpIHsKKyAgICBpZiAobURldmljZSA9PSAwKSByZXR1cm4gTk9fSU5JVDsKKyAgICBSZXN1bHQgcmV0dmFsOworICAgIFJldHVybjx2b2lkPiByZXQgPSBtRGV2aWNlLT5nZXRNYXN0ZXJNdXRlKAorICAgICAgICAgICAgWyZdKFJlc3VsdCByLCBib29sIG11dGUpIHsKKyAgICAgICAgICAgICAgICByZXR2YWwgPSByOworICAgICAgICAgICAgICAgIGlmIChyZXR2YWwgPT0gUmVzdWx0OjpPSykgeworICAgICAgICAgICAgICAgICAgICAqc3RhdGUgPSBtdXRlOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0pOworICAgIHJldHVybiBwcm9jZXNzUmV0dXJuKCJnZXRNYXN0ZXJNdXRlIiwgcmV0LCByZXR2YWwpOworfQorCitzdGF0dXNfdCBEZXZpY2VIYWxIaWRsOjpzZXRQYXJhbWV0ZXJzKGNvbnN0IFN0cmluZzgmIGt2UGFpcnMpIHsKKyAgICBpZiAobURldmljZSA9PSAwKSByZXR1cm4gTk9fSU5JVDsKKyAgICBoaWRsX3ZlYzxQYXJhbWV0ZXJWYWx1ZT4gaGlkbFBhcmFtczsKKyAgICBzdGF0dXNfdCBzdGF0dXMgPSBwYXJhbWV0ZXJzRnJvbUhhbChrdlBhaXJzLCAmaGlkbFBhcmFtcyk7CisgICAgaWYgKHN0YXR1cyAhPSBPSykgcmV0dXJuIHN0YXR1czsKKyAgICAvLyBUT0RPOiBjaGFuZ2UgdGhlIEFQSSBzbyB0aGF0IGNvbnRleHQgYW5kIGt2UGFpcnMgYXJlIHNlcGFyYXRlZAorICAgIHJldHVybiBwcm9jZXNzUmV0dXJuKCJzZXRQYXJhbWV0ZXJzIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICB1dGlsczo6c2V0UGFyYW1ldGVycyhtRGV2aWNlLCB7fSAvKiBjb250ZXh0ICovLCBoaWRsUGFyYW1zKSk7Cit9CisKK3N0YXR1c190IERldmljZUhhbEhpZGw6OmdldFBhcmFtZXRlcnMoY29uc3QgU3RyaW5nOCYga2V5cywgU3RyaW5nOCAqdmFsdWVzKSB7CisgICAgdmFsdWVzLT5jbGVhcigpOworICAgIGlmIChtRGV2aWNlID09IDApIHJldHVybiBOT19JTklUOworICAgIGhpZGxfdmVjPGhpZGxfc3RyaW5nPiBoaWRsS2V5czsKKyAgICBzdGF0dXNfdCBzdGF0dXMgPSBrZXlzRnJvbUhhbChrZXlzLCAmaGlkbEtleXMpOworICAgIGlmIChzdGF0dXMgIT0gT0spIHJldHVybiBzdGF0dXM7CisgICAgUmVzdWx0IHJldHZhbDsKKyAgICBSZXR1cm48dm9pZD4gcmV0ID0gdXRpbHM6OmdldFBhcmFtZXRlcnMobURldmljZSwKKyAgICAgICAgICAgIHt9IC8qIGNvbnRleHQgKi8sCisgICAgICAgICAgICBoaWRsS2V5cywKKyAgICAgICAgICAgIFsmXShSZXN1bHQgciwgY29uc3QgaGlkbF92ZWM8UGFyYW1ldGVyVmFsdWU+JiBwYXJhbWV0ZXJzKSB7CisgICAgICAgICAgICAgICAgcmV0dmFsID0gcjsKKyAgICAgICAgICAgICAgICBpZiAocmV0dmFsID09IFJlc3VsdDo6T0spIHsKKyAgICAgICAgICAgICAgICAgICAgcGFyYW1ldGVyc1RvSGFsKHBhcmFtZXRlcnMsIHZhbHVlcyk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfSk7CisgICAgcmV0dXJuIHByb2Nlc3NSZXR1cm4oImdldFBhcmFtZXRlcnMiLCByZXQsIHJldHZhbCk7Cit9CisKK3N0YXR1c190IERldmljZUhhbEhpZGw6OmdldElucHV0QnVmZmVyU2l6ZSgKKyAgICAgICAgY29uc3Qgc3RydWN0IGF1ZGlvX2NvbmZpZyAqY29uZmlnLCBzaXplX3QgKnNpemUpIHsKKyAgICBpZiAobURldmljZSA9PSAwKSByZXR1cm4gTk9fSU5JVDsKKyAgICBBdWRpb0NvbmZpZyBoaWRsQ29uZmlnOworICAgIEhpZGxVdGlsczo6YXVkaW9Db25maWdGcm9tSGFsKCpjb25maWcsICZoaWRsQ29uZmlnKTsKKyAgICBSZXN1bHQgcmV0dmFsOworICAgIFJldHVybjx2b2lkPiByZXQgPSBtRGV2aWNlLT5nZXRJbnB1dEJ1ZmZlclNpemUoCisgICAgICAgICAgICBoaWRsQ29uZmlnLAorICAgICAgICAgICAgWyZdKFJlc3VsdCByLCB1aW50NjRfdCBidWZmZXJTaXplKSB7CisgICAgICAgICAgICAgICAgcmV0dmFsID0gcjsKKyAgICAgICAgICAgICAgICBpZiAocmV0dmFsID09IFJlc3VsdDo6T0spIHsKKyAgICAgICAgICAgICAgICAgICAgKnNpemUgPSBzdGF0aWNfY2FzdDxzaXplX3Q+KGJ1ZmZlclNpemUpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0pOworICAgIHJldHVybiBwcm9jZXNzUmV0dXJuKCJnZXRJbnB1dEJ1ZmZlclNpemUiLCByZXQsIHJldHZhbCk7Cit9CisKK3N0YXR1c190IERldmljZUhhbEhpZGw6Om9wZW5PdXRwdXRTdHJlYW0oCisgICAgICAgIGF1ZGlvX2lvX2hhbmRsZV90IGhhbmRsZSwKKyAgICAgICAgYXVkaW9fZGV2aWNlc190IGRldmljZXMsCisgICAgICAgIGF1ZGlvX291dHB1dF9mbGFnc190IGZsYWdzLAorICAgICAgICBzdHJ1Y3QgYXVkaW9fY29uZmlnICpjb25maWcsCisgICAgICAgIGNvbnN0IGNoYXIgKmFkZHJlc3MsCisgICAgICAgIHNwPFN0cmVhbU91dEhhbEludGVyZmFjZT4gKm91dFN0cmVhbSkgeworICAgIGlmIChtRGV2aWNlID09IDApIHJldHVybiBOT19JTklUOworICAgIERldmljZUFkZHJlc3MgaGlkbERldmljZTsKKyAgICBzdGF0dXNfdCBzdGF0dXMgPSBkZXZpY2VBZGRyZXNzRnJvbUhhbChkZXZpY2VzLCBhZGRyZXNzLCAmaGlkbERldmljZSk7CisgICAgaWYgKHN0YXR1cyAhPSBPSykgcmV0dXJuIHN0YXR1czsKKyAgICBBdWRpb0NvbmZpZyBoaWRsQ29uZmlnOworICAgIEhpZGxVdGlsczo6YXVkaW9Db25maWdGcm9tSGFsKCpjb25maWcsICZoaWRsQ29uZmlnKTsKKyAgICBSZXN1bHQgcmV0dmFsID0gUmVzdWx0OjpOT1RfSU5JVElBTElaRUQ7CisgICAgUmV0dXJuPHZvaWQ+IHJldCA9IG1EZXZpY2UtPm9wZW5PdXRwdXRTdHJlYW0oCisgICAgICAgICAgICBoYW5kbGUsCisgICAgICAgICAgICBoaWRsRGV2aWNlLAorICAgICAgICAgICAgaGlkbENvbmZpZywKKyAgICAgICAgICAgIG1rRW51bUNvbnZlcnRlcjxBdWRpb091dHB1dEZsYWc+KGZsYWdzKSwKKyNpZiBNQUpPUl9WRVJTSU9OID09IDQKKyAgICAgICAgICAgIHt9IC8qIG1ldGFkYXRhICovLAorI2VuZGlmCisgICAgICAgICAgICBbJl0oUmVzdWx0IHIsIGNvbnN0IHNwPElTdHJlYW1PdXQ+JiByZXN1bHQsIGNvbnN0IEF1ZGlvQ29uZmlnJiBzdWdnZXN0ZWRDb25maWcpIHsKKyAgICAgICAgICAgICAgICByZXR2YWwgPSByOworICAgICAgICAgICAgICAgIGlmIChyZXR2YWwgPT0gUmVzdWx0OjpPSykgeworICAgICAgICAgICAgICAgICAgICAqb3V0U3RyZWFtID0gbmV3IFN0cmVhbU91dEhhbEhpZGwocmVzdWx0KTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgSGlkbFV0aWxzOjphdWRpb0NvbmZpZ1RvSGFsKHN1Z2dlc3RlZENvbmZpZywgY29uZmlnKTsKKyAgICAgICAgICAgIH0pOworICAgIHJldHVybiBwcm9jZXNzUmV0dXJuKCJvcGVuT3V0cHV0U3RyZWFtIiwgcmV0LCByZXR2YWwpOworfQorCitzdGF0dXNfdCBEZXZpY2VIYWxIaWRsOjpvcGVuSW5wdXRTdHJlYW0oCisgICAgICAgIGF1ZGlvX2lvX2hhbmRsZV90IGhhbmRsZSwKKyAgICAgICAgYXVkaW9fZGV2aWNlc190IGRldmljZXMsCisgICAgICAgIHN0cnVjdCBhdWRpb19jb25maWcgKmNvbmZpZywKKyAgICAgICAgYXVkaW9faW5wdXRfZmxhZ3NfdCBmbGFncywKKyAgICAgICAgY29uc3QgY2hhciAqYWRkcmVzcywKKyAgICAgICAgYXVkaW9fc291cmNlX3Qgc291cmNlLAorICAgICAgICBzcDxTdHJlYW1JbkhhbEludGVyZmFjZT4gKmluU3RyZWFtKSB7CisgICAgaWYgKG1EZXZpY2UgPT0gMCkgcmV0dXJuIE5PX0lOSVQ7CisgICAgRGV2aWNlQWRkcmVzcyBoaWRsRGV2aWNlOworICAgIHN0YXR1c190IHN0YXR1cyA9IGRldmljZUFkZHJlc3NGcm9tSGFsKGRldmljZXMsIGFkZHJlc3MsICZoaWRsRGV2aWNlKTsKKyAgICBpZiAoc3RhdHVzICE9IE9LKSByZXR1cm4gc3RhdHVzOworICAgIEF1ZGlvQ29uZmlnIGhpZGxDb25maWc7CisgICAgSGlkbFV0aWxzOjphdWRpb0NvbmZpZ0Zyb21IYWwoKmNvbmZpZywgJmhpZGxDb25maWcpOworICAgIFJlc3VsdCByZXR2YWwgPSBSZXN1bHQ6Ok5PVF9JTklUSUFMSVpFRDsKKyNpZiBNQUpPUl9WRVJTSU9OID09IDIKKyAgICBhdXRvIHNvdXJjZU1ldGFkYXRhID0gQXVkaW9Tb3VyY2Uoc291cmNlKTsKKyNlbGlmIE1BSk9SX1ZFUlNJT04gPT0gNAorICAgIC8vIFRPRE86IGNvcnJlY3RseSBwcm9wYWdhdGUgdGhlIHRyYWNrcyBzb3VyY2VzIGFuZCB2b2x1bWUKKyAgICAvLyAgICAgICBmb3Igbm93LCBvbmx5IHNlbmQgdGhlIG1haW4gc291cmNlIGF0IDFkYmZzCisgICAgU2lua01ldGFkYXRhIHNvdXJjZU1ldGFkYXRhID0ge3t7QXVkaW9Tb3VyY2Uoc291cmNlKSwgMX19fTsKKyNlbmRpZgorICAgIFJldHVybjx2b2lkPiByZXQgPSBtRGV2aWNlLT5vcGVuSW5wdXRTdHJlYW0oCisgICAgICAgICAgICBoYW5kbGUsCisgICAgICAgICAgICBoaWRsRGV2aWNlLAorICAgICAgICAgICAgaGlkbENvbmZpZywKKyAgICAgICAgICAgIG1rRW51bUNvbnZlcnRlcjxBdWRpb0lucHV0RmxhZz4oZmxhZ3MpLAorICAgICAgICAgICAgc291cmNlTWV0YWRhdGEsCisgICAgICAgICAgICBbJl0oUmVzdWx0IHIsIGNvbnN0IHNwPElTdHJlYW1Jbj4mIHJlc3VsdCwgY29uc3QgQXVkaW9Db25maWcmIHN1Z2dlc3RlZENvbmZpZykgeworICAgICAgICAgICAgICAgIHJldHZhbCA9IHI7CisgICAgICAgICAgICAgICAgaWYgKHJldHZhbCA9PSBSZXN1bHQ6Ok9LKSB7CisgICAgICAgICAgICAgICAgICAgICppblN0cmVhbSA9IG5ldyBTdHJlYW1JbkhhbEhpZGwocmVzdWx0KTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgSGlkbFV0aWxzOjphdWRpb0NvbmZpZ1RvSGFsKHN1Z2dlc3RlZENvbmZpZywgY29uZmlnKTsKKyAgICAgICAgICAgIH0pOworICAgIHJldHVybiBwcm9jZXNzUmV0dXJuKCJvcGVuSW5wdXRTdHJlYW0iLCByZXQsIHJldHZhbCk7Cit9CisKK3N0YXR1c190IERldmljZUhhbEhpZGw6OnN1cHBvcnRzQXVkaW9QYXRjaGVzKGJvb2wgKnN1cHBvcnRzUGF0Y2hlcykgeworICAgIGlmIChtRGV2aWNlID09IDApIHJldHVybiBOT19JTklUOworICAgIHJldHVybiBwcm9jZXNzUmV0dXJuKCJzdXBwb3J0c0F1ZGlvUGF0Y2hlcyIsIG1EZXZpY2UtPnN1cHBvcnRzQXVkaW9QYXRjaGVzKCksIHN1cHBvcnRzUGF0Y2hlcyk7Cit9CisKK3N0YXR1c190IERldmljZUhhbEhpZGw6OmNyZWF0ZUF1ZGlvUGF0Y2goCisgICAgICAgIHVuc2lnbmVkIGludCBudW1fc291cmNlcywKKyAgICAgICAgY29uc3Qgc3RydWN0IGF1ZGlvX3BvcnRfY29uZmlnICpzb3VyY2VzLAorICAgICAgICB1bnNpZ25lZCBpbnQgbnVtX3NpbmtzLAorICAgICAgICBjb25zdCBzdHJ1Y3QgYXVkaW9fcG9ydF9jb25maWcgKnNpbmtzLAorICAgICAgICBhdWRpb19wYXRjaF9oYW5kbGVfdCAqcGF0Y2gpIHsKKyAgICBpZiAobURldmljZSA9PSAwKSByZXR1cm4gTk9fSU5JVDsKKyAgICBoaWRsX3ZlYzxBdWRpb1BvcnRDb25maWc+IGhpZGxTb3VyY2VzLCBoaWRsU2lua3M7CisgICAgSGlkbFV0aWxzOjphdWRpb1BvcnRDb25maWdzRnJvbUhhbChudW1fc291cmNlcywgc291cmNlcywgJmhpZGxTb3VyY2VzKTsKKyAgICBIaWRsVXRpbHM6OmF1ZGlvUG9ydENvbmZpZ3NGcm9tSGFsKG51bV9zaW5rcywgc2lua3MsICZoaWRsU2lua3MpOworICAgIFJlc3VsdCByZXR2YWw7CisgICAgUmV0dXJuPHZvaWQ+IHJldCA9IG1EZXZpY2UtPmNyZWF0ZUF1ZGlvUGF0Y2goCisgICAgICAgICAgICBoaWRsU291cmNlcywgaGlkbFNpbmtzLAorICAgICAgICAgICAgWyZdKFJlc3VsdCByLCBBdWRpb1BhdGNoSGFuZGxlIGhpZGxQYXRjaCkgeworICAgICAgICAgICAgICAgIHJldHZhbCA9IHI7CisgICAgICAgICAgICAgICAgaWYgKHJldHZhbCA9PSBSZXN1bHQ6Ok9LKSB7CisgICAgICAgICAgICAgICAgICAgICpwYXRjaCA9IHN0YXRpY19jYXN0PGF1ZGlvX3BhdGNoX2hhbmRsZV90PihoaWRsUGF0Y2gpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0pOworICAgIHJldHVybiBwcm9jZXNzUmV0dXJuKCJjcmVhdGVBdWRpb1BhdGNoIiwgcmV0LCByZXR2YWwpOworfQorCitzdGF0dXNfdCBEZXZpY2VIYWxIaWRsOjpyZWxlYXNlQXVkaW9QYXRjaChhdWRpb19wYXRjaF9oYW5kbGVfdCBwYXRjaCkgeworICAgIGlmIChtRGV2aWNlID09IDApIHJldHVybiBOT19JTklUOworICAgIHJldHVybiBwcm9jZXNzUmV0dXJuKCJyZWxlYXNlQXVkaW9QYXRjaCIsIG1EZXZpY2UtPnJlbGVhc2VBdWRpb1BhdGNoKHBhdGNoKSk7Cit9CisKK3N0YXR1c190IERldmljZUhhbEhpZGw6OmdldEF1ZGlvUG9ydChzdHJ1Y3QgYXVkaW9fcG9ydCAqcG9ydCkgeworICAgIGlmIChtRGV2aWNlID09IDApIHJldHVybiBOT19JTklUOworICAgIEF1ZGlvUG9ydCBoaWRsUG9ydDsKKyAgICBIaWRsVXRpbHM6OmF1ZGlvUG9ydEZyb21IYWwoKnBvcnQsICZoaWRsUG9ydCk7CisgICAgUmVzdWx0IHJldHZhbDsKKyAgICBSZXR1cm48dm9pZD4gcmV0ID0gbURldmljZS0+Z2V0QXVkaW9Qb3J0KAorICAgICAgICAgICAgaGlkbFBvcnQsCisgICAgICAgICAgICBbJl0oUmVzdWx0IHIsIGNvbnN0IEF1ZGlvUG9ydCYgcCkgeworICAgICAgICAgICAgICAgIHJldHZhbCA9IHI7CisgICAgICAgICAgICAgICAgaWYgKHJldHZhbCA9PSBSZXN1bHQ6Ok9LKSB7CisgICAgICAgICAgICAgICAgICAgIEhpZGxVdGlsczo6YXVkaW9Qb3J0VG9IYWwocCwgcG9ydCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfSk7CisgICAgcmV0dXJuIHByb2Nlc3NSZXR1cm4oImdldEF1ZGlvUG9ydCIsIHJldCwgcmV0dmFsKTsKK30KKworc3RhdHVzX3QgRGV2aWNlSGFsSGlkbDo6c2V0QXVkaW9Qb3J0Q29uZmlnKGNvbnN0IHN0cnVjdCBhdWRpb19wb3J0X2NvbmZpZyAqY29uZmlnKSB7CisgICAgaWYgKG1EZXZpY2UgPT0gMCkgcmV0dXJuIE5PX0lOSVQ7CisgICAgQXVkaW9Qb3J0Q29uZmlnIGhpZGxDb25maWc7CisgICAgSGlkbFV0aWxzOjphdWRpb1BvcnRDb25maWdGcm9tSGFsKCpjb25maWcsICZoaWRsQ29uZmlnKTsKKyAgICByZXR1cm4gcHJvY2Vzc1JldHVybigic2V0QXVkaW9Qb3J0Q29uZmlnIiwgbURldmljZS0+c2V0QXVkaW9Qb3J0Q29uZmlnKGhpZGxDb25maWcpKTsKK30KKworI2lmIE1BSk9SX1ZFUlNJT04gPT0gMgorc3RhdHVzX3QgRGV2aWNlSGFsSGlkbDo6Z2V0TWljcm9waG9uZXMoCisgICAgICAgIHN0ZDo6dmVjdG9yPG1lZGlhOjpNaWNyb3Bob25lSW5mbz4gKm1pY3JvcGhvbmVzSW5mbyBfX3VudXNlZCkgeworICAgIGlmIChtRGV2aWNlID09IDApIHJldHVybiBOT19JTklUOworICAgIHJldHVybiBJTlZBTElEX09QRVJBVElPTjsKK30KKyNlbGlmIE1BSk9SX1ZFUlNJT04gPT0gNAorc3RhdHVzX3QgRGV2aWNlSGFsSGlkbDo6Z2V0TWljcm9waG9uZXMoc3RkOjp2ZWN0b3I8bWVkaWE6Ok1pY3JvcGhvbmVJbmZvPiAqbWljcm9waG9uZXNJbmZvKSB7CisgICAgaWYgKG1EZXZpY2UgPT0gMCkgcmV0dXJuIE5PX0lOSVQ7CisgICAgUmVzdWx0IHJldHZhbDsKKyAgICBSZXR1cm48dm9pZD4gcmV0ID0gbURldmljZS0+Z2V0TWljcm9waG9uZXMoCisgICAgICAgICAgICBbJl0oUmVzdWx0IHIsIGhpZGxfdmVjPE1pY3JvcGhvbmVJbmZvPiBtaWNBcnJheUhhbCkgeworICAgICAgICByZXR2YWwgPSByOworICAgICAgICBmb3IgKHNpemVfdCBrID0gMDsgayA8IG1pY0FycmF5SGFsLnNpemUoKTsgaysrKSB7CisgICAgICAgICAgICBhdWRpb19taWNyb3Bob25lX2NoYXJhY3RlcmlzdGljX3QgZHN0OworICAgICAgICAgICAgLy9jb252ZXJ0CisgICAgICAgICAgICBtaWNyb3Bob25lSW5mb1RvSGFsKG1pY0FycmF5SGFsW2tdLCAmZHN0KTsKKyAgICAgICAgICAgIG1lZGlhOjpNaWNyb3Bob25lSW5mbyBtaWNyb3Bob25lID0gbWVkaWE6Ok1pY3JvcGhvbmVJbmZvKGRzdCk7CisgICAgICAgICAgICBtaWNyb3Bob25lc0luZm8tPnB1c2hfYmFjayhtaWNyb3Bob25lKTsKKyAgICAgICAgfQorICAgIH0pOworICAgIHJldHVybiBwcm9jZXNzUmV0dXJuKCJnZXRNaWNyb3Bob25lcyIsIHJldCwgcmV0dmFsKTsKK30KKyNlbmRpZgorCitzdGF0dXNfdCBEZXZpY2VIYWxIaWRsOjpkdW1wKGludCBmZCkgeworICAgIGlmIChtRGV2aWNlID09IDApIHJldHVybiBOT19JTklUOworICAgIG5hdGl2ZV9oYW5kbGVfdCogaGlkbEhhbmRsZSA9IG5hdGl2ZV9oYW5kbGVfY3JlYXRlKDEsIDApOworICAgIGhpZGxIYW5kbGUtPmRhdGFbMF0gPSBmZDsKKyAgICBSZXR1cm48dm9pZD4gcmV0ID0gbURldmljZS0+ZGVidWcoaGlkbEhhbmRsZSwge30gLyogb3B0aW9ucyAqLyk7CisgICAgbmF0aXZlX2hhbmRsZV9kZWxldGUoaGlkbEhhbmRsZSk7CisgICAgcmV0dXJuIHByb2Nlc3NSZXR1cm4oImR1bXAiLCByZXQpOworfQorCit9IC8vIG5hbWVzcGFjZSBDUFBfVkVSU0lPTgorfSAvLyBuYW1lc3BhY2UgYW5kcm9pZApkaWZmIC0tZ2l0IGEvbWVkaWEvbGliYXVkaW9oYWwvaW1wbC9EZXZpY2VIYWxIaWRsLmggYi9tZWRpYS9saWJhdWRpb2hhbC9pbXBsL0RldmljZUhhbEhpZGwuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mYjVlN2U3Ci0tLSAvZGV2L251bGwKKysrIGIvbWVkaWEvbGliYXVkaW9oYWwvaW1wbC9EZXZpY2VIYWxIaWRsLmgKQEAgLTAsMCArMSwxMzMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworCisjaWZuZGVmIEFORFJPSURfSEFSRFdBUkVfREVWSUNFX0hBTF9ISURMX0gKKyNkZWZpbmUgQU5EUk9JRF9IQVJEV0FSRV9ERVZJQ0VfSEFMX0hJRExfSAorCisjaW5jbHVkZSA8YW5kcm9pZC9oYXJkd2FyZS9hdWRpby8yLjAvSURldmljZS5oPgorI2luY2x1ZGUgPGFuZHJvaWQvaGFyZHdhcmUvYXVkaW8vNC4wL0lEZXZpY2UuaD4KKyNpbmNsdWRlIDxhbmRyb2lkL2hhcmR3YXJlL2F1ZGlvLzIuMC9JUHJpbWFyeURldmljZS5oPgorI2luY2x1ZGUgPGFuZHJvaWQvaGFyZHdhcmUvYXVkaW8vNC4wL0lQcmltYXJ5RGV2aWNlLmg+CisjaW5jbHVkZSA8bWVkaWEvYXVkaW9oYWwvRGV2aWNlSGFsSW50ZXJmYWNlLmg+CisKKyNpbmNsdWRlICJDb252ZXJzaW9uSGVscGVySGlkbC5oIgorCit1c2luZyA6OmFuZHJvaWQ6OmhhcmR3YXJlOjphdWRpbzo6Q1BQX1ZFUlNJT046OklEZXZpY2U7Cit1c2luZyA6OmFuZHJvaWQ6OmhhcmR3YXJlOjphdWRpbzo6Q1BQX1ZFUlNJT046OklQcmltYXJ5RGV2aWNlOwordXNpbmcgOjphbmRyb2lkOjpoYXJkd2FyZTo6UmV0dXJuOworCituYW1lc3BhY2UgYW5kcm9pZCB7CituYW1lc3BhY2UgQ1BQX1ZFUlNJT04geworCitjbGFzcyBEZXZpY2VIYWxIaWRsIDogcHVibGljIERldmljZUhhbEludGVyZmFjZSwgcHVibGljIENvbnZlcnNpb25IZWxwZXJIaWRsCit7CisgIHB1YmxpYzoKKyAgICAvLyBTZXRzIHRoZSB2YWx1ZSBvZiAnZGV2aWNlcycgdG8gYSBiaXRtYXNrIG9mIDEgb3IgbW9yZSB2YWx1ZXMgb2YgYXVkaW9fZGV2aWNlc190LgorICAgIHZpcnR1YWwgc3RhdHVzX3QgZ2V0U3VwcG9ydGVkRGV2aWNlcyh1aW50MzJfdCAqZGV2aWNlcyk7CisKKyAgICAvLyBDaGVjayB0byBzZWUgaWYgdGhlIGF1ZGlvIGhhcmR3YXJlIGludGVyZmFjZSBoYXMgYmVlbiBpbml0aWFsaXplZC4KKyAgICB2aXJ0dWFsIHN0YXR1c190IGluaXRDaGVjaygpOworCisgICAgLy8gU2V0IHRoZSBhdWRpbyB2b2x1bWUgb2YgYSB2b2ljZSBjYWxsLiBSYW5nZSBpcyBiZXR3ZWVuIDAuMCBhbmQgMS4wLgorICAgIHZpcnR1YWwgc3RhdHVzX3Qgc2V0Vm9pY2VWb2x1bWUoZmxvYXQgdm9sdW1lKTsKKworICAgIC8vIFNldCB0aGUgYXVkaW8gdm9sdW1lIGZvciBhbGwgYXVkaW8gYWN0aXZpdGllcyBvdGhlciB0aGFuIHZvaWNlIGNhbGwuCisgICAgdmlydHVhbCBzdGF0dXNfdCBzZXRNYXN0ZXJWb2x1bWUoZmxvYXQgdm9sdW1lKTsKKworICAgIC8vIEdldCB0aGUgY3VycmVudCBtYXN0ZXIgdm9sdW1lIHZhbHVlIGZvciB0aGUgSEFMLgorICAgIHZpcnR1YWwgc3RhdHVzX3QgZ2V0TWFzdGVyVm9sdW1lKGZsb2F0ICp2b2x1bWUpOworCisgICAgLy8gQ2FsbGVkIHdoZW4gdGhlIGF1ZGlvIG1vZGUgY2hhbmdlcy4KKyAgICB2aXJ0dWFsIHN0YXR1c190IHNldE1vZGUoYXVkaW9fbW9kZV90IG1vZGUpOworCisgICAgLy8gTXV0aW5nIGNvbnRyb2wuCisgICAgdmlydHVhbCBzdGF0dXNfdCBzZXRNaWNNdXRlKGJvb2wgc3RhdGUpOworICAgIHZpcnR1YWwgc3RhdHVzX3QgZ2V0TWljTXV0ZShib29sICpzdGF0ZSk7CisgICAgdmlydHVhbCBzdGF0dXNfdCBzZXRNYXN0ZXJNdXRlKGJvb2wgc3RhdGUpOworICAgIHZpcnR1YWwgc3RhdHVzX3QgZ2V0TWFzdGVyTXV0ZShib29sICpzdGF0ZSk7CisKKyAgICAvLyBTZXQgZ2xvYmFsIGF1ZGlvIHBhcmFtZXRlcnMuCisgICAgdmlydHVhbCBzdGF0dXNfdCBzZXRQYXJhbWV0ZXJzKGNvbnN0IFN0cmluZzgmIGt2UGFpcnMpOworCisgICAgLy8gR2V0IGdsb2JhbCBhdWRpbyBwYXJhbWV0ZXJzLgorICAgIHZpcnR1YWwgc3RhdHVzX3QgZ2V0UGFyYW1ldGVycyhjb25zdCBTdHJpbmc4JiBrZXlzLCBTdHJpbmc4ICp2YWx1ZXMpOworCisgICAgLy8gUmV0dXJucyBhdWRpbyBpbnB1dCBidWZmZXIgc2l6ZSBhY2NvcmRpbmcgdG8gcGFyYW1ldGVycyBwYXNzZWQuCisgICAgdmlydHVhbCBzdGF0dXNfdCBnZXRJbnB1dEJ1ZmZlclNpemUoY29uc3Qgc3RydWN0IGF1ZGlvX2NvbmZpZyAqY29uZmlnLAorICAgICAgICAgICAgc2l6ZV90ICpzaXplKTsKKworICAgIC8vIENyZWF0ZXMgYW5kIG9wZW5zIHRoZSBhdWRpbyBoYXJkd2FyZSBvdXRwdXQgc3RyZWFtLiBUaGUgc3RyZWFtIGlzIGNsb3NlZAorICAgIC8vIGJ5IHJlbGVhc2luZyBhbGwgcmVmZXJlbmNlcyB0byB0aGUgcmV0dXJuZWQgb2JqZWN0LgorICAgIHZpcnR1YWwgc3RhdHVzX3Qgb3Blbk91dHB1dFN0cmVhbSgKKyAgICAgICAgICAgIGF1ZGlvX2lvX2hhbmRsZV90IGhhbmRsZSwKKyAgICAgICAgICAgIGF1ZGlvX2RldmljZXNfdCBkZXZpY2VzLAorICAgICAgICAgICAgYXVkaW9fb3V0cHV0X2ZsYWdzX3QgZmxhZ3MsCisgICAgICAgICAgICBzdHJ1Y3QgYXVkaW9fY29uZmlnICpjb25maWcsCisgICAgICAgICAgICBjb25zdCBjaGFyICphZGRyZXNzLAorICAgICAgICAgICAgc3A8U3RyZWFtT3V0SGFsSW50ZXJmYWNlPiAqb3V0U3RyZWFtKTsKKworICAgIC8vIENyZWF0ZXMgYW5kIG9wZW5zIHRoZSBhdWRpbyBoYXJkd2FyZSBpbnB1dCBzdHJlYW0uIFRoZSBzdHJlYW0gaXMgY2xvc2VkCisgICAgLy8gYnkgcmVsZWFzaW5nIGFsbCByZWZlcmVuY2VzIHRvIHRoZSByZXR1cm5lZCBvYmplY3QuCisgICAgdmlydHVhbCBzdGF0dXNfdCBvcGVuSW5wdXRTdHJlYW0oCisgICAgICAgICAgICBhdWRpb19pb19oYW5kbGVfdCBoYW5kbGUsCisgICAgICAgICAgICBhdWRpb19kZXZpY2VzX3QgZGV2aWNlcywKKyAgICAgICAgICAgIHN0cnVjdCBhdWRpb19jb25maWcgKmNvbmZpZywKKyAgICAgICAgICAgIGF1ZGlvX2lucHV0X2ZsYWdzX3QgZmxhZ3MsCisgICAgICAgICAgICBjb25zdCBjaGFyICphZGRyZXNzLAorICAgICAgICAgICAgYXVkaW9fc291cmNlX3Qgc291cmNlLAorICAgICAgICAgICAgc3A8U3RyZWFtSW5IYWxJbnRlcmZhY2U+ICppblN0cmVhbSk7CisKKyAgICAvLyBSZXR1cm5zIHdoZXRoZXIgY3JlYXRlQXVkaW9QYXRjaCBhbmQgcmVsZWFzZUF1ZGlvUGF0Y2ggb3BlcmF0aW9ucyBhcmUgc3VwcG9ydGVkLgorICAgIHZpcnR1YWwgc3RhdHVzX3Qgc3VwcG9ydHNBdWRpb1BhdGNoZXMoYm9vbCAqc3VwcG9ydHNQYXRjaGVzKTsKKworICAgIC8vIENyZWF0ZXMgYW4gYXVkaW8gcGF0Y2ggYmV0d2VlbiBzZXZlcmFsIHNvdXJjZSBhbmQgc2luayBwb3J0cy4KKyAgICB2aXJ0dWFsIHN0YXR1c190IGNyZWF0ZUF1ZGlvUGF0Y2goCisgICAgICAgICAgICB1bnNpZ25lZCBpbnQgbnVtX3NvdXJjZXMsCisgICAgICAgICAgICBjb25zdCBzdHJ1Y3QgYXVkaW9fcG9ydF9jb25maWcgKnNvdXJjZXMsCisgICAgICAgICAgICB1bnNpZ25lZCBpbnQgbnVtX3NpbmtzLAorICAgICAgICAgICAgY29uc3Qgc3RydWN0IGF1ZGlvX3BvcnRfY29uZmlnICpzaW5rcywKKyAgICAgICAgICAgIGF1ZGlvX3BhdGNoX2hhbmRsZV90ICpwYXRjaCk7CisKKyAgICAvLyBSZWxlYXNlcyBhbiBhdWRpbyBwYXRjaC4KKyAgICB2aXJ0dWFsIHN0YXR1c190IHJlbGVhc2VBdWRpb1BhdGNoKGF1ZGlvX3BhdGNoX2hhbmRsZV90IHBhdGNoKTsKKworICAgIC8vIEZpbGxzIHRoZSBsaXN0IG9mIHN1cHBvcnRlZCBhdHRyaWJ1dGVzIGZvciBhIGdpdmVuIGF1ZGlvIHBvcnQuCisgICAgdmlydHVhbCBzdGF0dXNfdCBnZXRBdWRpb1BvcnQoc3RydWN0IGF1ZGlvX3BvcnQgKnBvcnQpOworCisgICAgLy8gU2V0IGF1ZGlvIHBvcnQgY29uZmlndXJhdGlvbi4KKyAgICB2aXJ0dWFsIHN0YXR1c190IHNldEF1ZGlvUG9ydENvbmZpZyhjb25zdCBzdHJ1Y3QgYXVkaW9fcG9ydF9jb25maWcgKmNvbmZpZyk7CisKKyAgICAvLyBMaXN0IG1pY3JvcGhvbmVzCisgICAgdmlydHVhbCBzdGF0dXNfdCBnZXRNaWNyb3Bob25lcyhzdGQ6OnZlY3RvcjxtZWRpYTo6TWljcm9waG9uZUluZm8+ICptaWNyb3Bob25lcyk7CisKKyAgICB2aXJ0dWFsIHN0YXR1c190IGR1bXAoaW50IGZkKTsKKworICBwcml2YXRlOgorICAgIGZyaWVuZCBjbGFzcyBEZXZpY2VzRmFjdG9yeUhhbEhpZGw7CisgICAgc3A8SURldmljZT4gbURldmljZTsKKyAgICBzcDxJUHJpbWFyeURldmljZT4gbVByaW1hcnlEZXZpY2U7ICAvLyBOdWxsIGlmIGl0J3Mgbm90IGEgcHJpbWFyeSBkZXZpY2UuCisKKyAgICAvLyBDYW4gbm90IGJlIGNvbnN0cnVjdGVkIGRpcmVjdGx5IGJ5IGNsaWVudHMuCisgICAgZXhwbGljaXQgRGV2aWNlSGFsSGlkbChjb25zdCBzcDxJRGV2aWNlPiYgZGV2aWNlKTsKKworICAgIC8vIFRoZSBkZXN0cnVjdG9yIGF1dG9tYXRpY2FsbHkgY2xvc2VzIHRoZSBkZXZpY2UuCisgICAgdmlydHVhbCB+RGV2aWNlSGFsSGlkbCgpOworfTsKKworfSAvLyBuYW1lc3BhY2UgQ1BQX1ZFUlNJT04KK30gLy8gbmFtZXNwYWNlIGFuZHJvaWQKKworI2VuZGlmIC8vIEFORFJPSURfSEFSRFdBUkVfREVWSUNFX0hBTF9ISURMX0gKZGlmZiAtLWdpdCBhL21lZGlhL2xpYmF1ZGlvaGFsL2ltcGwvRGV2aWNlSGFsTG9jYWwuY3BwIGIvbWVkaWEvbGliYXVkaW9oYWwvaW1wbC9EZXZpY2VIYWxMb2NhbC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTRlMjZmNQotLS0gL2Rldi9udWxsCisrKyBiL21lZGlhL2xpYmF1ZGlvaGFsL2ltcGwvRGV2aWNlSGFsTG9jYWwuY3BwCkBAIC0wLDAgKzEsMjIwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE2IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KKworI2RlZmluZSBMT0dfVEFHICJEZXZpY2VIYWxMb2NhbCIKKy8vI2RlZmluZSBMT0dfTkRFQlVHIDAKKworI2luY2x1ZGUgPHV0aWxzL0xvZy5oPgorCisjaW5jbHVkZSAiRGV2aWNlSGFsTG9jYWwuaCIKKyNpbmNsdWRlICJTdHJlYW1IYWxMb2NhbC5oIgorCituYW1lc3BhY2UgYW5kcm9pZCB7CituYW1lc3BhY2UgQ1BQX1ZFUlNJT04geworCitEZXZpY2VIYWxMb2NhbDo6RGV2aWNlSGFsTG9jYWwoYXVkaW9faHdfZGV2aWNlX3QgKmRldikKKyAgICAgICAgOiBtRGV2KGRldikgeworfQorCitEZXZpY2VIYWxMb2NhbDo6fkRldmljZUhhbExvY2FsKCkgeworICAgIGludCBzdGF0dXMgPSBhdWRpb19od19kZXZpY2VfY2xvc2UobURldik7CisgICAgQUxPR1dfSUYoc3RhdHVzLCAiRXJyb3IgY2xvc2luZyBhdWRpbyBodyBkZXZpY2UgJXA6ICVzIiwgbURldiwgc3RyZXJyb3IoLXN0YXR1cykpOworICAgIG1EZXYgPSAwOworfQorCitzdGF0dXNfdCBEZXZpY2VIYWxMb2NhbDo6Z2V0U3VwcG9ydGVkRGV2aWNlcyh1aW50MzJfdCAqZGV2aWNlcykgeworICAgIGlmIChtRGV2LT5nZXRfc3VwcG9ydGVkX2RldmljZXMgPT0gTlVMTCkgcmV0dXJuIElOVkFMSURfT1BFUkFUSU9OOworICAgICpkZXZpY2VzID0gbURldi0+Z2V0X3N1cHBvcnRlZF9kZXZpY2VzKG1EZXYpOworICAgIHJldHVybiBPSzsKK30KKworc3RhdHVzX3QgRGV2aWNlSGFsTG9jYWw6OmluaXRDaGVjaygpIHsKKyAgICByZXR1cm4gbURldi0+aW5pdF9jaGVjayhtRGV2KTsKK30KKworc3RhdHVzX3QgRGV2aWNlSGFsTG9jYWw6OnNldFZvaWNlVm9sdW1lKGZsb2F0IHZvbHVtZSkgeworICAgIHJldHVybiBtRGV2LT5zZXRfdm9pY2Vfdm9sdW1lKG1EZXYsIHZvbHVtZSk7Cit9CisKK3N0YXR1c190IERldmljZUhhbExvY2FsOjpzZXRNYXN0ZXJWb2x1bWUoZmxvYXQgdm9sdW1lKSB7CisgICAgaWYgKG1EZXYtPnNldF9tYXN0ZXJfdm9sdW1lID09IE5VTEwpIHJldHVybiBJTlZBTElEX09QRVJBVElPTjsKKyAgICByZXR1cm4gbURldi0+c2V0X21hc3Rlcl92b2x1bWUobURldiwgdm9sdW1lKTsKK30KKworc3RhdHVzX3QgRGV2aWNlSGFsTG9jYWw6OmdldE1hc3RlclZvbHVtZShmbG9hdCAqdm9sdW1lKSB7CisgICAgaWYgKG1EZXYtPmdldF9tYXN0ZXJfdm9sdW1lID09IE5VTEwpIHJldHVybiBJTlZBTElEX09QRVJBVElPTjsKKyAgICByZXR1cm4gbURldi0+Z2V0X21hc3Rlcl92b2x1bWUobURldiwgdm9sdW1lKTsKK30KKworc3RhdHVzX3QgRGV2aWNlSGFsTG9jYWw6OnNldE1vZGUoYXVkaW9fbW9kZV90IG1vZGUpIHsKKyAgICByZXR1cm4gbURldi0+c2V0X21vZGUobURldiwgbW9kZSk7Cit9CisKK3N0YXR1c190IERldmljZUhhbExvY2FsOjpzZXRNaWNNdXRlKGJvb2wgc3RhdGUpIHsKKyAgICByZXR1cm4gbURldi0+c2V0X21pY19tdXRlKG1EZXYsIHN0YXRlKTsKK30KKworc3RhdHVzX3QgRGV2aWNlSGFsTG9jYWw6OmdldE1pY011dGUoYm9vbCAqc3RhdGUpIHsKKyAgICByZXR1cm4gbURldi0+Z2V0X21pY19tdXRlKG1EZXYsIHN0YXRlKTsKK30KKworc3RhdHVzX3QgRGV2aWNlSGFsTG9jYWw6OnNldE1hc3Rlck11dGUoYm9vbCBzdGF0ZSkgeworICAgIGlmIChtRGV2LT5zZXRfbWFzdGVyX211dGUgPT0gTlVMTCkgcmV0dXJuIElOVkFMSURfT1BFUkFUSU9OOworICAgIHJldHVybiBtRGV2LT5zZXRfbWFzdGVyX211dGUobURldiwgc3RhdGUpOworfQorCitzdGF0dXNfdCBEZXZpY2VIYWxMb2NhbDo6Z2V0TWFzdGVyTXV0ZShib29sICpzdGF0ZSkgeworICAgIGlmIChtRGV2LT5nZXRfbWFzdGVyX211dGUgPT0gTlVMTCkgcmV0dXJuIElOVkFMSURfT1BFUkFUSU9OOworICAgIHJldHVybiBtRGV2LT5nZXRfbWFzdGVyX211dGUobURldiwgc3RhdGUpOworfQorCitzdGF0dXNfdCBEZXZpY2VIYWxMb2NhbDo6c2V0UGFyYW1ldGVycyhjb25zdCBTdHJpbmc4JiBrdlBhaXJzKSB7CisgICAgcmV0dXJuIG1EZXYtPnNldF9wYXJhbWV0ZXJzKG1EZXYsIGt2UGFpcnMuc3RyaW5nKCkpOworfQorCitzdGF0dXNfdCBEZXZpY2VIYWxMb2NhbDo6Z2V0UGFyYW1ldGVycyhjb25zdCBTdHJpbmc4JiBrZXlzLCBTdHJpbmc4ICp2YWx1ZXMpIHsKKyAgICBjaGFyICpoYWxWYWx1ZXMgPSBtRGV2LT5nZXRfcGFyYW1ldGVycyhtRGV2LCBrZXlzLnN0cmluZygpKTsKKyAgICBpZiAoaGFsVmFsdWVzICE9IE5VTEwpIHsKKyAgICAgICAgdmFsdWVzLT5zZXRUbyhoYWxWYWx1ZXMpOworICAgICAgICBmcmVlKGhhbFZhbHVlcyk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgdmFsdWVzLT5jbGVhcigpOworICAgIH0KKyAgICByZXR1cm4gT0s7Cit9CisKK3N0YXR1c190IERldmljZUhhbExvY2FsOjpnZXRJbnB1dEJ1ZmZlclNpemUoCisgICAgICAgIGNvbnN0IHN0cnVjdCBhdWRpb19jb25maWcgKmNvbmZpZywgc2l6ZV90ICpzaXplKSB7CisgICAgKnNpemUgPSBtRGV2LT5nZXRfaW5wdXRfYnVmZmVyX3NpemUobURldiwgY29uZmlnKTsKKyAgICByZXR1cm4gT0s7Cit9CisKK3N0YXR1c190IERldmljZUhhbExvY2FsOjpvcGVuT3V0cHV0U3RyZWFtKAorICAgICAgICBhdWRpb19pb19oYW5kbGVfdCBoYW5kbGUsCisgICAgICAgIGF1ZGlvX2RldmljZXNfdCBkZXZpY2VzLAorICAgICAgICBhdWRpb19vdXRwdXRfZmxhZ3NfdCBmbGFncywKKyAgICAgICAgc3RydWN0IGF1ZGlvX2NvbmZpZyAqY29uZmlnLAorICAgICAgICBjb25zdCBjaGFyICphZGRyZXNzLAorICAgICAgICBzcDxTdHJlYW1PdXRIYWxJbnRlcmZhY2U+ICpvdXRTdHJlYW0pIHsKKyAgICBhdWRpb19zdHJlYW1fb3V0X3QgKmhhbFN0cmVhbTsKKyAgICBBTE9HVigib3Blbl9vdXRwdXRfc3RyZWFtIGhhbmRsZTogJWQgZGV2aWNlczogJXggZmxhZ3M6ICUjeCIKKyAgICAgICAgICAgICJzcmF0ZTogJWQgZm9ybWF0ICUjeCBjaGFubmVscyAleCBhZGRyZXNzICVzIiwKKyAgICAgICAgICAgIGhhbmRsZSwgZGV2aWNlcywgZmxhZ3MsCisgICAgICAgICAgICBjb25maWctPnNhbXBsZV9yYXRlLCBjb25maWctPmZvcm1hdCwgY29uZmlnLT5jaGFubmVsX21hc2ssCisgICAgICAgICAgICBhZGRyZXNzKTsKKyAgICBpbnQgb3BlblJlc3V0ID0gbURldi0+b3Blbl9vdXRwdXRfc3RyZWFtKAorICAgICAgICAgICAgbURldiwgaGFuZGxlLCBkZXZpY2VzLCBmbGFncywgY29uZmlnLCAmaGFsU3RyZWFtLCBhZGRyZXNzKTsKKyAgICBpZiAob3BlblJlc3V0ID09IE9LKSB7CisgICAgICAgICpvdXRTdHJlYW0gPSBuZXcgU3RyZWFtT3V0SGFsTG9jYWwoaGFsU3RyZWFtLCB0aGlzKTsKKyAgICB9CisgICAgQUxPR1YoIm9wZW5fb3V0cHV0X3N0cmVhbSBzdGF0dXMgJWQgc3RyZWFtICVwIiwgb3BlblJlc3V0LCBoYWxTdHJlYW0pOworICAgIHJldHVybiBvcGVuUmVzdXQ7Cit9CisKK3N0YXR1c190IERldmljZUhhbExvY2FsOjpvcGVuSW5wdXRTdHJlYW0oCisgICAgICAgIGF1ZGlvX2lvX2hhbmRsZV90IGhhbmRsZSwKKyAgICAgICAgYXVkaW9fZGV2aWNlc190IGRldmljZXMsCisgICAgICAgIHN0cnVjdCBhdWRpb19jb25maWcgKmNvbmZpZywKKyAgICAgICAgYXVkaW9faW5wdXRfZmxhZ3NfdCBmbGFncywKKyAgICAgICAgY29uc3QgY2hhciAqYWRkcmVzcywKKyAgICAgICAgYXVkaW9fc291cmNlX3Qgc291cmNlLAorICAgICAgICBzcDxTdHJlYW1JbkhhbEludGVyZmFjZT4gKmluU3RyZWFtKSB7CisgICAgYXVkaW9fc3RyZWFtX2luX3QgKmhhbFN0cmVhbTsKKyAgICBBTE9HVigib3Blbl9pbnB1dF9zdHJlYW0gaGFuZGxlOiAlZCBkZXZpY2VzOiAleCBmbGFnczogJSN4ICIKKyAgICAgICAgICAgICJzcmF0ZTogJWQgZm9ybWF0ICUjeCBjaGFubmVscyAleCBhZGRyZXNzICVzIHNvdXJjZSAlZCIsCisgICAgICAgICAgICBoYW5kbGUsIGRldmljZXMsIGZsYWdzLAorICAgICAgICAgICAgY29uZmlnLT5zYW1wbGVfcmF0ZSwgY29uZmlnLT5mb3JtYXQsIGNvbmZpZy0+Y2hhbm5lbF9tYXNrLAorICAgICAgICAgICAgYWRkcmVzcywgc291cmNlKTsKKyAgICBpbnQgb3BlblJlc3VsdCA9IG1EZXYtPm9wZW5faW5wdXRfc3RyZWFtKAorICAgICAgICAgICAgbURldiwgaGFuZGxlLCBkZXZpY2VzLCBjb25maWcsICZoYWxTdHJlYW0sIGZsYWdzLCBhZGRyZXNzLCBzb3VyY2UpOworICAgIGlmIChvcGVuUmVzdWx0ID09IE9LKSB7CisgICAgICAgICppblN0cmVhbSA9IG5ldyBTdHJlYW1JbkhhbExvY2FsKGhhbFN0cmVhbSwgdGhpcyk7CisgICAgfQorICAgIEFMT0dWKCJvcGVuX2lucHV0X3N0cmVhbSBzdGF0dXMgJWQgc3RyZWFtICVwIiwgb3BlblJlc3VsdCwgaW5TdHJlYW0pOworICAgIHJldHVybiBvcGVuUmVzdWx0OworfQorCitzdGF0dXNfdCBEZXZpY2VIYWxMb2NhbDo6c3VwcG9ydHNBdWRpb1BhdGNoZXMoYm9vbCAqc3VwcG9ydHNQYXRjaGVzKSB7CisgICAgKnN1cHBvcnRzUGF0Y2hlcyA9IHZlcnNpb24oKSA+PSBBVURJT19ERVZJQ0VfQVBJX1ZFUlNJT05fM18wOworICAgIHJldHVybiBPSzsKK30KKworc3RhdHVzX3QgRGV2aWNlSGFsTG9jYWw6OmNyZWF0ZUF1ZGlvUGF0Y2goCisgICAgICAgIHVuc2lnbmVkIGludCBudW1fc291cmNlcywKKyAgICAgICAgY29uc3Qgc3RydWN0IGF1ZGlvX3BvcnRfY29uZmlnICpzb3VyY2VzLAorICAgICAgICB1bnNpZ25lZCBpbnQgbnVtX3NpbmtzLAorICAgICAgICBjb25zdCBzdHJ1Y3QgYXVkaW9fcG9ydF9jb25maWcgKnNpbmtzLAorICAgICAgICBhdWRpb19wYXRjaF9oYW5kbGVfdCAqcGF0Y2gpIHsKKyAgICBpZiAodmVyc2lvbigpID49IEFVRElPX0RFVklDRV9BUElfVkVSU0lPTl8zXzApIHsKKyAgICAgICAgcmV0dXJuIG1EZXYtPmNyZWF0ZV9hdWRpb19wYXRjaCgKKyAgICAgICAgICAgICAgICBtRGV2LCBudW1fc291cmNlcywgc291cmNlcywgbnVtX3NpbmtzLCBzaW5rcywgcGF0Y2gpOworICAgIH0gZWxzZSB7CisgICAgICAgIHJldHVybiBJTlZBTElEX09QRVJBVElPTjsKKyAgICB9Cit9CisKK3N0YXR1c190IERldmljZUhhbExvY2FsOjpyZWxlYXNlQXVkaW9QYXRjaChhdWRpb19wYXRjaF9oYW5kbGVfdCBwYXRjaCkgeworICAgIGlmICh2ZXJzaW9uKCkgPj0gQVVESU9fREVWSUNFX0FQSV9WRVJTSU9OXzNfMCkgeworICAgICAgICByZXR1cm4gbURldi0+cmVsZWFzZV9hdWRpb19wYXRjaChtRGV2LCBwYXRjaCk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgcmV0dXJuIElOVkFMSURfT1BFUkFUSU9OOworICAgIH0KK30KKworc3RhdHVzX3QgRGV2aWNlSGFsTG9jYWw6OmdldEF1ZGlvUG9ydChzdHJ1Y3QgYXVkaW9fcG9ydCAqcG9ydCkgeworICAgIHJldHVybiBtRGV2LT5nZXRfYXVkaW9fcG9ydChtRGV2LCBwb3J0KTsKK30KKworc3RhdHVzX3QgRGV2aWNlSGFsTG9jYWw6OnNldEF1ZGlvUG9ydENvbmZpZyhjb25zdCBzdHJ1Y3QgYXVkaW9fcG9ydF9jb25maWcgKmNvbmZpZykgeworICAgIGlmICh2ZXJzaW9uKCkgPj0gQVVESU9fREVWSUNFX0FQSV9WRVJTSU9OXzNfMCkKKyAgICAgICAgcmV0dXJuIG1EZXYtPnNldF9hdWRpb19wb3J0X2NvbmZpZyhtRGV2LCBjb25maWcpOworICAgIGVsc2UKKyAgICAgICAgcmV0dXJuIElOVkFMSURfT1BFUkFUSU9OOworfQorCisjaWYgTUFKT1JfVkVSU0lPTiA9PSAyCitzdGF0dXNfdCBEZXZpY2VIYWxMb2NhbDo6Z2V0TWljcm9waG9uZXMoCisgICAgICAgIHN0ZDo6dmVjdG9yPG1lZGlhOjpNaWNyb3Bob25lSW5mbz4gKm1pY3JvcGhvbmVzIF9fdW51c2VkKSB7CisgICAgcmV0dXJuIElOVkFMSURfT1BFUkFUSU9OOworfQorI2VsaWYgTUFKT1JfVkVSU0lPTiA9PSA0CitzdGF0dXNfdCBEZXZpY2VIYWxMb2NhbDo6Z2V0TWljcm9waG9uZXMoc3RkOjp2ZWN0b3I8bWVkaWE6Ok1pY3JvcGhvbmVJbmZvPiAqbWljcm9waG9uZXMpIHsKKyAgICBpZiAobURldi0+Z2V0X21pY3JvcGhvbmVzID09IE5VTEwpIHJldHVybiBJTlZBTElEX09QRVJBVElPTjsKKyAgICBzaXplX3QgYWN0dWFsX21pY3MgPSBBVURJT19NSUNST1BIT05FX01BWF9DT1VOVDsKKyAgICBhdWRpb19taWNyb3Bob25lX2NoYXJhY3RlcmlzdGljX3QgbWljX2FycmF5W0FVRElPX01JQ1JPUEhPTkVfTUFYX0NPVU5UXTsKKyAgICBzdGF0dXNfdCBzdGF0dXMgPSBtRGV2LT5nZXRfbWljcm9waG9uZXMobURldiwgJm1pY19hcnJheVswXSwgJmFjdHVhbF9taWNzKTsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGFjdHVhbF9taWNzOyBpKyspIHsKKyAgICAgICAgbWVkaWE6Ok1pY3JvcGhvbmVJbmZvIG1pY3JvcGhvbmVJbmZvID0gbWVkaWE6Ok1pY3JvcGhvbmVJbmZvKG1pY19hcnJheVtpXSk7CisgICAgICAgIG1pY3JvcGhvbmVzLT5wdXNoX2JhY2sobWljcm9waG9uZUluZm8pOworICAgIH0KKyAgICByZXR1cm4gc3RhdHVzOworfQorI2VuZGlmCisKK3N0YXR1c190IERldmljZUhhbExvY2FsOjpkdW1wKGludCBmZCkgeworICAgIHJldHVybiBtRGV2LT5kdW1wKG1EZXYsIGZkKTsKK30KKwordm9pZCBEZXZpY2VIYWxMb2NhbDo6Y2xvc2VPdXRwdXRTdHJlYW0oc3RydWN0IGF1ZGlvX3N0cmVhbV9vdXQgKnN0cmVhbV9vdXQpIHsKKyAgICBtRGV2LT5jbG9zZV9vdXRwdXRfc3RyZWFtKG1EZXYsIHN0cmVhbV9vdXQpOworfQorCit2b2lkIERldmljZUhhbExvY2FsOjpjbG9zZUlucHV0U3RyZWFtKHN0cnVjdCBhdWRpb19zdHJlYW1faW4gKnN0cmVhbV9pbikgeworICAgIG1EZXYtPmNsb3NlX2lucHV0X3N0cmVhbShtRGV2LCBzdHJlYW1faW4pOworfQorCit9IC8vIG5hbWVzcGFjZSBDUFBfVkVSU0lPTgorfSAvLyBuYW1lc3BhY2UgYW5kcm9pZApkaWZmIC0tZ2l0IGEvbWVkaWEvbGliYXVkaW9oYWwvaW1wbC9EZXZpY2VIYWxMb2NhbC5oIGIvbWVkaWEvbGliYXVkaW9oYWwvaW1wbC9EZXZpY2VIYWxMb2NhbC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE4YmQ4NzkKLS0tIC9kZXYvbnVsbAorKysgYi9tZWRpYS9saWJhdWRpb2hhbC9pbXBsL0RldmljZUhhbExvY2FsLmgKQEAgLTAsMCArMSwxMjkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworCisjaWZuZGVmIEFORFJPSURfSEFSRFdBUkVfREVWSUNFX0hBTF9MT0NBTF9ICisjZGVmaW5lIEFORFJPSURfSEFSRFdBUkVfREVWSUNFX0hBTF9MT0NBTF9ICisKKyNpbmNsdWRlIDxoYXJkd2FyZS9hdWRpby5oPgorI2luY2x1ZGUgPG1lZGlhL2F1ZGlvaGFsL0RldmljZUhhbEludGVyZmFjZS5oPgorCituYW1lc3BhY2UgYW5kcm9pZCB7CituYW1lc3BhY2UgQ1BQX1ZFUlNJT04geworCitjbGFzcyBEZXZpY2VIYWxMb2NhbCA6IHB1YmxpYyBEZXZpY2VIYWxJbnRlcmZhY2UKK3sKKyAgcHVibGljOgorICAgIC8vIFNldHMgdGhlIHZhbHVlIG9mICdkZXZpY2VzJyB0byBhIGJpdG1hc2sgb2YgMSBvciBtb3JlIHZhbHVlcyBvZiBhdWRpb19kZXZpY2VzX3QuCisgICAgdmlydHVhbCBzdGF0dXNfdCBnZXRTdXBwb3J0ZWREZXZpY2VzKHVpbnQzMl90ICpkZXZpY2VzKTsKKworICAgIC8vIENoZWNrIHRvIHNlZSBpZiB0aGUgYXVkaW8gaGFyZHdhcmUgaW50ZXJmYWNlIGhhcyBiZWVuIGluaXRpYWxpemVkLgorICAgIHZpcnR1YWwgc3RhdHVzX3QgaW5pdENoZWNrKCk7CisKKyAgICAvLyBTZXQgdGhlIGF1ZGlvIHZvbHVtZSBvZiBhIHZvaWNlIGNhbGwuIFJhbmdlIGlzIGJldHdlZW4gMC4wIGFuZCAxLjAuCisgICAgdmlydHVhbCBzdGF0dXNfdCBzZXRWb2ljZVZvbHVtZShmbG9hdCB2b2x1bWUpOworCisgICAgLy8gU2V0IHRoZSBhdWRpbyB2b2x1bWUgZm9yIGFsbCBhdWRpbyBhY3Rpdml0aWVzIG90aGVyIHRoYW4gdm9pY2UgY2FsbC4KKyAgICB2aXJ0dWFsIHN0YXR1c190IHNldE1hc3RlclZvbHVtZShmbG9hdCB2b2x1bWUpOworCisgICAgLy8gR2V0IHRoZSBjdXJyZW50IG1hc3RlciB2b2x1bWUgdmFsdWUgZm9yIHRoZSBIQUwuCisgICAgdmlydHVhbCBzdGF0dXNfdCBnZXRNYXN0ZXJWb2x1bWUoZmxvYXQgKnZvbHVtZSk7CisKKyAgICAvLyBDYWxsZWQgd2hlbiB0aGUgYXVkaW8gbW9kZSBjaGFuZ2VzLgorICAgIHZpcnR1YWwgc3RhdHVzX3Qgc2V0TW9kZShhdWRpb19tb2RlX3QgbW9kZSk7CisKKyAgICAvLyBNdXRpbmcgY29udHJvbC4KKyAgICB2aXJ0dWFsIHN0YXR1c190IHNldE1pY011dGUoYm9vbCBzdGF0ZSk7CisgICAgdmlydHVhbCBzdGF0dXNfdCBnZXRNaWNNdXRlKGJvb2wgKnN0YXRlKTsKKyAgICB2aXJ0dWFsIHN0YXR1c190IHNldE1hc3Rlck11dGUoYm9vbCBzdGF0ZSk7CisgICAgdmlydHVhbCBzdGF0dXNfdCBnZXRNYXN0ZXJNdXRlKGJvb2wgKnN0YXRlKTsKKworICAgIC8vIFNldCBnbG9iYWwgYXVkaW8gcGFyYW1ldGVycy4KKyAgICB2aXJ0dWFsIHN0YXR1c190IHNldFBhcmFtZXRlcnMoY29uc3QgU3RyaW5nOCYga3ZQYWlycyk7CisKKyAgICAvLyBHZXQgZ2xvYmFsIGF1ZGlvIHBhcmFtZXRlcnMuCisgICAgdmlydHVhbCBzdGF0dXNfdCBnZXRQYXJhbWV0ZXJzKGNvbnN0IFN0cmluZzgmIGtleXMsIFN0cmluZzggKnZhbHVlcyk7CisKKyAgICAvLyBSZXR1cm5zIGF1ZGlvIGlucHV0IGJ1ZmZlciBzaXplIGFjY29yZGluZyB0byBwYXJhbWV0ZXJzIHBhc3NlZC4KKyAgICB2aXJ0dWFsIHN0YXR1c190IGdldElucHV0QnVmZmVyU2l6ZShjb25zdCBzdHJ1Y3QgYXVkaW9fY29uZmlnICpjb25maWcsCisgICAgICAgICAgICBzaXplX3QgKnNpemUpOworCisgICAgLy8gQ3JlYXRlcyBhbmQgb3BlbnMgdGhlIGF1ZGlvIGhhcmR3YXJlIG91dHB1dCBzdHJlYW0uIFRoZSBzdHJlYW0gaXMgY2xvc2VkCisgICAgLy8gYnkgcmVsZWFzaW5nIGFsbCByZWZlcmVuY2VzIHRvIHRoZSByZXR1cm5lZCBvYmplY3QuCisgICAgdmlydHVhbCBzdGF0dXNfdCBvcGVuT3V0cHV0U3RyZWFtKAorICAgICAgICAgICAgYXVkaW9faW9faGFuZGxlX3QgaGFuZGxlLAorICAgICAgICAgICAgYXVkaW9fZGV2aWNlc190IGRldmljZXMsCisgICAgICAgICAgICBhdWRpb19vdXRwdXRfZmxhZ3NfdCBmbGFncywKKyAgICAgICAgICAgIHN0cnVjdCBhdWRpb19jb25maWcgKmNvbmZpZywKKyAgICAgICAgICAgIGNvbnN0IGNoYXIgKmFkZHJlc3MsCisgICAgICAgICAgICBzcDxTdHJlYW1PdXRIYWxJbnRlcmZhY2U+ICpvdXRTdHJlYW0pOworCisgICAgLy8gQ3JlYXRlcyBhbmQgb3BlbnMgdGhlIGF1ZGlvIGhhcmR3YXJlIGlucHV0IHN0cmVhbS4gVGhlIHN0cmVhbSBpcyBjbG9zZWQKKyAgICAvLyBieSByZWxlYXNpbmcgYWxsIHJlZmVyZW5jZXMgdG8gdGhlIHJldHVybmVkIG9iamVjdC4KKyAgICB2aXJ0dWFsIHN0YXR1c190IG9wZW5JbnB1dFN0cmVhbSgKKyAgICAgICAgICAgIGF1ZGlvX2lvX2hhbmRsZV90IGhhbmRsZSwKKyAgICAgICAgICAgIGF1ZGlvX2RldmljZXNfdCBkZXZpY2VzLAorICAgICAgICAgICAgc3RydWN0IGF1ZGlvX2NvbmZpZyAqY29uZmlnLAorICAgICAgICAgICAgYXVkaW9faW5wdXRfZmxhZ3NfdCBmbGFncywKKyAgICAgICAgICAgIGNvbnN0IGNoYXIgKmFkZHJlc3MsCisgICAgICAgICAgICBhdWRpb19zb3VyY2VfdCBzb3VyY2UsCisgICAgICAgICAgICBzcDxTdHJlYW1JbkhhbEludGVyZmFjZT4gKmluU3RyZWFtKTsKKworICAgIC8vIFJldHVybnMgd2hldGhlciBjcmVhdGVBdWRpb1BhdGNoIGFuZCByZWxlYXNlQXVkaW9QYXRjaCBvcGVyYXRpb25zIGFyZSBzdXBwb3J0ZWQuCisgICAgdmlydHVhbCBzdGF0dXNfdCBzdXBwb3J0c0F1ZGlvUGF0Y2hlcyhib29sICpzdXBwb3J0c1BhdGNoZXMpOworCisgICAgLy8gQ3JlYXRlcyBhbiBhdWRpbyBwYXRjaCBiZXR3ZWVuIHNldmVyYWwgc291cmNlIGFuZCBzaW5rIHBvcnRzLgorICAgIHZpcnR1YWwgc3RhdHVzX3QgY3JlYXRlQXVkaW9QYXRjaCgKKyAgICAgICAgICAgIHVuc2lnbmVkIGludCBudW1fc291cmNlcywKKyAgICAgICAgICAgIGNvbnN0IHN0cnVjdCBhdWRpb19wb3J0X2NvbmZpZyAqc291cmNlcywKKyAgICAgICAgICAgIHVuc2lnbmVkIGludCBudW1fc2lua3MsCisgICAgICAgICAgICBjb25zdCBzdHJ1Y3QgYXVkaW9fcG9ydF9jb25maWcgKnNpbmtzLAorICAgICAgICAgICAgYXVkaW9fcGF0Y2hfaGFuZGxlX3QgKnBhdGNoKTsKKworICAgIC8vIFJlbGVhc2VzIGFuIGF1ZGlvIHBhdGNoLgorICAgIHZpcnR1YWwgc3RhdHVzX3QgcmVsZWFzZUF1ZGlvUGF0Y2goYXVkaW9fcGF0Y2hfaGFuZGxlX3QgcGF0Y2gpOworCisgICAgLy8gRmlsbHMgdGhlIGxpc3Qgb2Ygc3VwcG9ydGVkIGF0dHJpYnV0ZXMgZm9yIGEgZ2l2ZW4gYXVkaW8gcG9ydC4KKyAgICB2aXJ0dWFsIHN0YXR1c190IGdldEF1ZGlvUG9ydChzdHJ1Y3QgYXVkaW9fcG9ydCAqcG9ydCk7CisKKyAgICAvLyBTZXQgYXVkaW8gcG9ydCBjb25maWd1cmF0aW9uLgorICAgIHZpcnR1YWwgc3RhdHVzX3Qgc2V0QXVkaW9Qb3J0Q29uZmlnKGNvbnN0IHN0cnVjdCBhdWRpb19wb3J0X2NvbmZpZyAqY29uZmlnKTsKKworICAgIC8vIExpc3QgbWljcm9waG9uZXMKKyAgICB2aXJ0dWFsIHN0YXR1c190IGdldE1pY3JvcGhvbmVzKHN0ZDo6dmVjdG9yPG1lZGlhOjpNaWNyb3Bob25lSW5mbz4gKm1pY3JvcGhvbmVzKTsKKworICAgIHZpcnR1YWwgc3RhdHVzX3QgZHVtcChpbnQgZmQpOworCisgICAgdm9pZCBjbG9zZU91dHB1dFN0cmVhbShzdHJ1Y3QgYXVkaW9fc3RyZWFtX291dCAqc3RyZWFtX291dCk7CisgICAgdm9pZCBjbG9zZUlucHV0U3RyZWFtKHN0cnVjdCBhdWRpb19zdHJlYW1faW4gKnN0cmVhbV9pbik7CisKKyAgcHJpdmF0ZToKKyAgICBhdWRpb19od19kZXZpY2VfdCAqbURldjsKKworICAgIGZyaWVuZCBjbGFzcyBEZXZpY2VzRmFjdG9yeUhhbExvY2FsOworCisgICAgLy8gQ2FuIG5vdCBiZSBjb25zdHJ1Y3RlZCBkaXJlY3RseSBieSBjbGllbnRzLgorICAgIGV4cGxpY2l0IERldmljZUhhbExvY2FsKGF1ZGlvX2h3X2RldmljZV90ICpkZXYpOworCisgICAgLy8gVGhlIGRlc3RydWN0b3IgYXV0b21hdGljYWxseSBjbG9zZXMgdGhlIGRldmljZS4KKyAgICB2aXJ0dWFsIH5EZXZpY2VIYWxMb2NhbCgpOworCisgICAgdWludDMyX3QgdmVyc2lvbigpIGNvbnN0IHsgcmV0dXJuIG1EZXYtPmNvbW1vbi52ZXJzaW9uOyB9Cit9OworCit9IC8vIG5hbWVzcGFjZSBDUFBfVkVSU0lPTgorfSAvLyBuYW1lc3BhY2UgYW5kcm9pZAorCisjZW5kaWYgLy8gQU5EUk9JRF9IQVJEV0FSRV9ERVZJQ0VfSEFMX0xPQ0FMX0gKZGlmZiAtLWdpdCBhL21lZGlhL2xpYmF1ZGlvaGFsL2ltcGwvRGV2aWNlc0ZhY3RvcnlIYWxIaWRsLmNwcCBiL21lZGlhL2xpYmF1ZGlvaGFsL2ltcGwvRGV2aWNlc0ZhY3RvcnlIYWxIaWRsLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yODAwMWRhCi0tLSAvZGV2L251bGwKKysrIGIvbWVkaWEvbGliYXVkaW9oYWwvaW1wbC9EZXZpY2VzRmFjdG9yeUhhbEhpZGwuY3BwCkBAIC0wLDAgKzEsMTE2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE2IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KKworI2luY2x1ZGUgPHN0cmluZy5oPgorI2luY2x1ZGUgPHZlY3Rvcj4KKworI2RlZmluZSBMT0dfVEFHICJEZXZpY2VzRmFjdG9yeUhhbEhpZGwiCisvLyNkZWZpbmUgTE9HX05ERUJVRyAwCisKKyNpbmNsdWRlIDxhbmRyb2lkL2hhcmR3YXJlL2F1ZGlvLzIuMC9JRGV2aWNlLmg+CisjaW5jbHVkZSA8YW5kcm9pZC9oYXJkd2FyZS9hdWRpby80LjAvSURldmljZS5oPgorI2luY2x1ZGUgPG1lZGlhL2F1ZGlvaGFsL2hpZGwvSGFsRGVhdGhIYW5kbGVyLmg+CisjaW5jbHVkZSA8dXRpbHMvTG9nLmg+CisKKyNpbmNsdWRlICJDb252ZXJzaW9uSGVscGVySGlkbC5oIgorI2luY2x1ZGUgIkRldmljZUhhbEhpZGwuaCIKKyNpbmNsdWRlICJEZXZpY2VzRmFjdG9yeUhhbEhpZGwuaCIKKwordXNpbmcgOjphbmRyb2lkOjpoYXJkd2FyZTo6YXVkaW86OkNQUF9WRVJTSU9OOjpJRGV2aWNlOwordXNpbmcgOjphbmRyb2lkOjpoYXJkd2FyZTo6YXVkaW86OkNQUF9WRVJTSU9OOjpSZXN1bHQ7Cit1c2luZyA6OmFuZHJvaWQ6OmhhcmR3YXJlOjpSZXR1cm47CisKK25hbWVzcGFjZSBhbmRyb2lkIHsKK25hbWVzcGFjZSBDUFBfVkVSU0lPTiB7CisKK0RldmljZXNGYWN0b3J5SGFsSGlkbDo6RGV2aWNlc0ZhY3RvcnlIYWxIaWRsKCkgeworICAgIHNwPElEZXZpY2VzRmFjdG9yeT4gZGVmYXVsdEZhY3Rvcnl7SURldmljZXNGYWN0b3J5OjpnZXRTZXJ2aWNlKCl9OworICAgIGlmICghZGVmYXVsdEZhY3RvcnkpIHsKKyAgICAgICAgQUxPR0UoIkZhaWxlZCB0byBvYnRhaW4gSURldmljZXNGYWN0b3J5L2RlZmF1bHQgc2VydmljZSwgdGVybWluYXRpbmcgcHJvY2Vzcy4iKTsKKyAgICAgICAgZXhpdCgxKTsKKyAgICB9CisgICAgbURldmljZUZhY3Rvcmllcy5wdXNoX2JhY2soZGVmYXVsdEZhY3RvcnkpOworICAgIGlmIChNQUpPUl9WRVJTSU9OID49IDQpIHsKKyAgICAgICAgLy8gVGhlIE1TRCBmYWN0b3J5IGlzIG9wdGlvbmFsIGFuZCBvbmx5IGF2YWlsYWJsZSBzdGFydGluZyBhdCBIQUwgNC4wCisgICAgICAgIHNwPElEZXZpY2VzRmFjdG9yeT4gbXNkRmFjdG9yeXtJRGV2aWNlc0ZhY3Rvcnk6OmdldFNlcnZpY2UoQVVESU9fSEFMX1NFUlZJQ0VfTkFNRV9NU0QpfTsKKyAgICAgICAgaWYgKG1zZEZhY3RvcnkpIHsKKyAgICAgICAgICAgIG1EZXZpY2VGYWN0b3JpZXMucHVzaF9iYWNrKG1zZEZhY3RvcnkpOworICAgICAgICB9CisgICAgfQorICAgIGZvciAoY29uc3QgYXV0byYgZmFjdG9yeSA6IG1EZXZpY2VGYWN0b3JpZXMpIHsKKyAgICAgICAgLy8gSXQgaXMgYXNzdW1lZCB0aGF0IHRoZSBEZXZpY2VzRmFjdG9yeUhhbEludGVyZmFjZSBpbnN0YW5jZSBpcyBvd25lZAorICAgICAgICAvLyBieSBBdWRpb0ZsaW5nZXIgYW5kIHRodXMgaGF2ZSB0aGUgc2FtZSBsaWZlc3Bhbi4KKyAgICAgICAgZmFjdG9yeS0+bGlua1RvRGVhdGgoSGFsRGVhdGhIYW5kbGVyOjpnZXRJbnN0YW5jZSgpLCAwIC8qY29va2llKi8pOworICAgIH0KK30KKworCisjaWYgTUFKT1JfVkVSU0lPTiA9PSAyCitzdGF0aWMgSURldmljZXNGYWN0b3J5OjpEZXZpY2UgaWRGcm9tSGFsKGNvbnN0IGNoYXIgKm5hbWUsIHN0YXR1c190KiBzdGF0dXMpIHsKKyAgICAqc3RhdHVzID0gT0s7CisgICAgaWYgKHN0cmNtcChuYW1lLCBBVURJT19IQVJEV0FSRV9NT0RVTEVfSURfUFJJTUFSWSkgPT0gMCkgeworICAgICAgICByZXR1cm4gSURldmljZXNGYWN0b3J5OjpEZXZpY2U6OlBSSU1BUlk7CisgICAgfSBlbHNlIGlmKHN0cmNtcChuYW1lLCBBVURJT19IQVJEV0FSRV9NT0RVTEVfSURfQTJEUCkgPT0gMCkgeworICAgICAgICByZXR1cm4gSURldmljZXNGYWN0b3J5OjpEZXZpY2U6OkEyRFA7CisgICAgfSBlbHNlIGlmKHN0cmNtcChuYW1lLCBBVURJT19IQVJEV0FSRV9NT0RVTEVfSURfVVNCKSA9PSAwKSB7CisgICAgICAgIHJldHVybiBJRGV2aWNlc0ZhY3Rvcnk6OkRldmljZTo6VVNCOworICAgIH0gZWxzZSBpZihzdHJjbXAobmFtZSwgQVVESU9fSEFSRFdBUkVfTU9EVUxFX0lEX1JFTU9URV9TVUJNSVgpID09IDApIHsKKyAgICAgICAgcmV0dXJuIElEZXZpY2VzRmFjdG9yeTo6RGV2aWNlOjpSX1NVQk1JWDsKKyAgICB9IGVsc2UgaWYoc3RyY21wKG5hbWUsIEFVRElPX0hBUkRXQVJFX01PRFVMRV9JRF9TVFVCKSA9PSAwKSB7CisgICAgICAgIHJldHVybiBJRGV2aWNlc0ZhY3Rvcnk6OkRldmljZTo6U1RVQjsKKyAgICB9CisgICAgQUxPR0UoIkludmFsaWQgZGV2aWNlIG5hbWUgJXMiLCBuYW1lKTsKKyAgICAqc3RhdHVzID0gQkFEX1ZBTFVFOworICAgIHJldHVybiB7fTsKK30KKyNlbGlmIE1BSk9SX1ZFUlNJT04gPT0gNAorc3RhdGljIGNvbnN0IGNoYXIqIGlkRnJvbUhhbChjb25zdCBjaGFyICpuYW1lLCBzdGF0dXNfdCogc3RhdHVzKSB7CisgICAgKnN0YXR1cyA9IE9LOworICAgIHJldHVybiBuYW1lOworfQorI2VuZGlmCisKK3N0YXR1c190IERldmljZXNGYWN0b3J5SGFsSGlkbDo6b3BlbkRldmljZShjb25zdCBjaGFyICpuYW1lLCBzcDxEZXZpY2VIYWxJbnRlcmZhY2U+ICpkZXZpY2UpIHsKKyAgICBpZiAobURldmljZUZhY3Rvcmllcy5lbXB0eSgpKSByZXR1cm4gTk9fSU5JVDsKKyAgICBzdGF0dXNfdCBzdGF0dXM7CisgICAgYXV0byBoaWRsSWQgPSBpZEZyb21IYWwobmFtZSwgJnN0YXR1cyk7CisgICAgaWYgKHN0YXR1cyAhPSBPSykgcmV0dXJuIHN0YXR1czsKKyAgICBSZXN1bHQgcmV0dmFsID0gUmVzdWx0OjpOT1RfSU5JVElBTElaRUQ7CisgICAgZm9yIChjb25zdCBhdXRvJiBmYWN0b3J5IDogbURldmljZUZhY3RvcmllcykgeworICAgICAgICBSZXR1cm48dm9pZD4gcmV0ID0gZmFjdG9yeS0+b3BlbkRldmljZSgKKyAgICAgICAgICAgICAgICBoaWRsSWQsCisgICAgICAgICAgICAgICAgWyZdKFJlc3VsdCByLCBjb25zdCBzcDxJRGV2aWNlPiYgcmVzdWx0KSB7CisgICAgICAgICAgICAgICAgICAgIHJldHZhbCA9IHI7CisgICAgICAgICAgICAgICAgICAgIGlmIChyZXR2YWwgPT0gUmVzdWx0OjpPSykgeworICAgICAgICAgICAgICAgICAgICAgICAgKmRldmljZSA9IG5ldyBEZXZpY2VIYWxIaWRsKHJlc3VsdCk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9KTsKKyAgICAgICAgaWYgKCFyZXQuaXNPaygpKSByZXR1cm4gRkFJTEVEX1RSQU5TQUNUSU9OOworICAgICAgICBzd2l0Y2ggKHJldHZhbCkgeworICAgICAgICAgICAgLy8gRGV2aWNlIHdhcyBmb3VuZCBhbmQgd2FzIGluaXRpYWxpemVkIHN1Y2Nlc3NmdWxseS4KKyAgICAgICAgICAgIGNhc2UgUmVzdWx0OjpPSzogcmV0dXJuIE9LOworICAgICAgICAgICAgLy8gRGV2aWNlIHdhcyBmb3VuZCBidXQgZmFpbGVkIHRvIGluaXRhbGl6ZS4KKyAgICAgICAgICAgIGNhc2UgUmVzdWx0OjpOT1RfSU5JVElBTElaRUQ6IHJldHVybiBOT19JTklUOworICAgICAgICAgICAgLy8gT3RoZXJ3aXNlIGNvbnRpbnVlIGl0ZXJhdGluZy4KKyAgICAgICAgICAgIGRlZmF1bHQ6IDsKKyAgICAgICAgfQorICAgIH0KKyAgICBBTE9HVygiVGhlIHNwZWNpZmllZCBkZXZpY2UgbmFtZSBpcyBub3QgcmVjb2duaXplZDogXCIlc1wiIiwgbmFtZSk7CisgICAgcmV0dXJuIEJBRF9WQUxVRTsKK30KKworfSAvLyBuYW1lc3BhY2UgQ1BQX1ZFUlNJT04KK30gLy8gbmFtZXNwYWNlIGFuZHJvaWQKZGlmZiAtLWdpdCBhL21lZGlhL2xpYmF1ZGlvaGFsL2ltcGwvRGV2aWNlc0ZhY3RvcnlIYWxIaWRsLmggYi9tZWRpYS9saWJhdWRpb2hhbC9pbXBsL0RldmljZXNGYWN0b3J5SGFsSGlkbC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE0MjgyYjAKLS0tIC9kZXYvbnVsbAorKysgYi9tZWRpYS9saWJhdWRpb2hhbC9pbXBsL0RldmljZXNGYWN0b3J5SGFsSGlkbC5oCkBAIC0wLDAgKzEsNTQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworCisjaWZuZGVmIEFORFJPSURfSEFSRFdBUkVfREVWSUNFU19GQUNUT1JZX0hBTF9ISURMX0gKKyNkZWZpbmUgQU5EUk9JRF9IQVJEV0FSRV9ERVZJQ0VTX0ZBQ1RPUllfSEFMX0hJRExfSAorCisjaW5jbHVkZSA8YW5kcm9pZC9oYXJkd2FyZS9hdWRpby8yLjAvSURldmljZXNGYWN0b3J5Lmg+CisjaW5jbHVkZSA8YW5kcm9pZC9oYXJkd2FyZS9hdWRpby80LjAvSURldmljZXNGYWN0b3J5Lmg+CisjaW5jbHVkZSA8bWVkaWEvYXVkaW9oYWwvRGV2aWNlc0ZhY3RvcnlIYWxJbnRlcmZhY2UuaD4KKyNpbmNsdWRlIDx1dGlscy9FcnJvcnMuaD4KKyNpbmNsdWRlIDx1dGlscy9SZWZCYXNlLmg+CisKKyNpbmNsdWRlICJEZXZpY2VIYWxIaWRsLmgiCisKK3VzaW5nIDo6YW5kcm9pZDo6aGFyZHdhcmU6OmF1ZGlvOjpDUFBfVkVSU0lPTjo6SURldmljZXNGYWN0b3J5OworCituYW1lc3BhY2UgYW5kcm9pZCB7CituYW1lc3BhY2UgQ1BQX1ZFUlNJT04geworCitjbGFzcyBEZXZpY2VzRmFjdG9yeUhhbEhpZGwgOiBwdWJsaWMgRGV2aWNlc0ZhY3RvcnlIYWxJbnRlcmZhY2UKK3sKKyAgcHVibGljOgorICAgIC8vIE9wZW5zIGEgZGV2aWNlIHdpdGggdGhlIHNwZWNpZmllZCBuYW1lLiBUbyBjbG9zZSB0aGUgZGV2aWNlLCBpdCBpcworICAgIC8vIG5lY2Vzc2FyeSB0byByZWxlYXNlIHJlZmVyZW5jZXMgdG8gdGhlIHJldHVybmVkIG9iamVjdC4KKyAgICB2aXJ0dWFsIHN0YXR1c190IG9wZW5EZXZpY2UoY29uc3QgY2hhciAqbmFtZSwgc3A8RGV2aWNlSGFsSW50ZXJmYWNlPiAqZGV2aWNlKTsKKworICBwcml2YXRlOgorICAgIGZyaWVuZCBjbGFzcyBEZXZpY2VzRmFjdG9yeUhhbEh5YnJpZDsKKworICAgIHN0ZDo6dmVjdG9yPHNwPElEZXZpY2VzRmFjdG9yeT4+IG1EZXZpY2VGYWN0b3JpZXM7CisKKyAgICAvLyBDYW4gbm90IGJlIGNvbnN0cnVjdGVkIGRpcmVjdGx5IGJ5IGNsaWVudHMuCisgICAgRGV2aWNlc0ZhY3RvcnlIYWxIaWRsKCk7CisKKyAgICB2aXJ0dWFsIH5EZXZpY2VzRmFjdG9yeUhhbEhpZGwoKSA9IGRlZmF1bHQ7Cit9OworCit9IC8vIG5hbWVzcGFjZSBDUFBfVkVSU0lPTgorfSAvLyBuYW1lc3BhY2UgYW5kcm9pZAorCisjZW5kaWYgLy8gQU5EUk9JRF9IQVJEV0FSRV9ERVZJQ0VTX0ZBQ1RPUllfSEFMX0hJRExfSApkaWZmIC0tZ2l0IGEvbWVkaWEvbGliYXVkaW9oYWwvaW1wbC9EZXZpY2VzRmFjdG9yeUhhbEh5YnJpZC5jcHAgYi9tZWRpYS9saWJhdWRpb2hhbC9pbXBsL0RldmljZXNGYWN0b3J5SGFsSHlicmlkLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mMzM3YThiCi0tLSAvZGV2L251bGwKKysrIGIvbWVkaWEvbGliYXVkaW9oYWwvaW1wbC9EZXZpY2VzRmFjdG9yeUhhbEh5YnJpZC5jcHAKQEAgLTAsMCArMSw0MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNyBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCisKKyNkZWZpbmUgTE9HX1RBRyAiRGV2aWNlc0ZhY3RvcnlIYWxIeWJyaWQiCisvLyNkZWZpbmUgTE9HX05ERUJVRyAwCisKKyNpbmNsdWRlICJEZXZpY2VzRmFjdG9yeUhhbEh5YnJpZC5oIgorI2luY2x1ZGUgIkRldmljZXNGYWN0b3J5SGFsTG9jYWwuaCIKKyNpbmNsdWRlICJEZXZpY2VzRmFjdG9yeUhhbEhpZGwuaCIKKworbmFtZXNwYWNlIGFuZHJvaWQgeworbmFtZXNwYWNlIENQUF9WRVJTSU9OIHsKKworRGV2aWNlc0ZhY3RvcnlIYWxIeWJyaWQ6OkRldmljZXNGYWN0b3J5SGFsSHlicmlkKCkKKyAgICAgICAgOiBtTG9jYWxGYWN0b3J5KG5ldyBEZXZpY2VzRmFjdG9yeUhhbExvY2FsKCkpLAorICAgICAgICAgIG1IaWRsRmFjdG9yeShuZXcgRGV2aWNlc0ZhY3RvcnlIYWxIaWRsKCkpIHsKK30KKworc3RhdHVzX3QgRGV2aWNlc0ZhY3RvcnlIYWxIeWJyaWQ6Om9wZW5EZXZpY2UoY29uc3QgY2hhciAqbmFtZSwgc3A8RGV2aWNlSGFsSW50ZXJmYWNlPiAqZGV2aWNlKSB7CisgICAgaWYgKG1IaWRsRmFjdG9yeSAhPSAwICYmIHN0cmNtcChBVURJT19IQVJEV0FSRV9NT0RVTEVfSURfQTJEUCwgbmFtZSkgIT0gMCAmJgorICAgICAgICBzdHJjbXAoQVVESU9fSEFSRFdBUkVfTU9EVUxFX0lEX0hFQVJJTkdfQUlELCBuYW1lKSAhPSAwKSB7CisgICAgICAgIHJldHVybiBtSGlkbEZhY3RvcnktPm9wZW5EZXZpY2UobmFtZSwgZGV2aWNlKTsKKyAgICB9CisgICAgcmV0dXJuIG1Mb2NhbEZhY3RvcnktPm9wZW5EZXZpY2UobmFtZSwgZGV2aWNlKTsKK30KKworfSAvLyBuYW1lc3BhY2UgQ1BQX1ZFUlNJT04KK30gLy8gbmFtZXNwYWNlIGFuZHJvaWQKZGlmZiAtLWdpdCBhL21lZGlhL2xpYmF1ZGlvaGFsL2ltcGwvRGV2aWNlc0ZhY3RvcnlIYWxIeWJyaWQuaCBiL21lZGlhL2xpYmF1ZGlvaGFsL2ltcGwvRGV2aWNlc0ZhY3RvcnlIYWxIeWJyaWQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41YWMwZDBkCi0tLSAvZGV2L251bGwKKysrIGIvbWVkaWEvbGliYXVkaW9oYWwvaW1wbC9EZXZpY2VzRmFjdG9yeUhhbEh5YnJpZC5oCkBAIC0wLDAgKzEsNDggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTcgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworCisjaWZuZGVmIEFORFJPSURfSEFSRFdBUkVfREVWSUNFU19GQUNUT1JZX0hBTF9IWUJSSURfSAorI2RlZmluZSBBTkRST0lEX0hBUkRXQVJFX0RFVklDRVNfRkFDVE9SWV9IQUxfSFlCUklEX0gKKworI2luY2x1ZGUgPG1lZGlhL2F1ZGlvaGFsL0RldmljZXNGYWN0b3J5SGFsSW50ZXJmYWNlLmg+CisjaW5jbHVkZSA8dXRpbHMvRXJyb3JzLmg+CisjaW5jbHVkZSA8dXRpbHMvUmVmQmFzZS5oPgorCituYW1lc3BhY2UgYW5kcm9pZCB7CituYW1lc3BhY2UgQ1BQX1ZFUlNJT04geworCitjbGFzcyBEZXZpY2VzRmFjdG9yeUhhbEh5YnJpZCA6IHB1YmxpYyBEZXZpY2VzRmFjdG9yeUhhbEludGVyZmFjZQoreworICBwdWJsaWM6CisgICAgRGV2aWNlc0ZhY3RvcnlIYWxIeWJyaWQoKTsKKworICAgIC8vIE9wZW5zIGEgZGV2aWNlIHdpdGggdGhlIHNwZWNpZmllZCBuYW1lLiBUbyBjbG9zZSB0aGUgZGV2aWNlLCBpdCBpcworICAgIC8vIG5lY2Vzc2FyeSB0byByZWxlYXNlIHJlZmVyZW5jZXMgdG8gdGhlIHJldHVybmVkIG9iamVjdC4KKyAgICB2aXJ0dWFsIHN0YXR1c190IG9wZW5EZXZpY2UoY29uc3QgY2hhciAqbmFtZSwgc3A8RGV2aWNlSGFsSW50ZXJmYWNlPiAqZGV2aWNlKTsKKworICBwcml2YXRlOgorICAgIHNwPERldmljZXNGYWN0b3J5SGFsSW50ZXJmYWNlPiBtTG9jYWxGYWN0b3J5OworICAgIHNwPERldmljZXNGYWN0b3J5SGFsSW50ZXJmYWNlPiBtSGlkbEZhY3Rvcnk7Cit9OworCitzcDxEZXZpY2VzRmFjdG9yeUhhbEludGVyZmFjZT4gY3JlYXRlRGV2aWNlc0ZhY3RvcnlIYWwoKSB7CisgICAgcmV0dXJuIG5ldyBEZXZpY2VzRmFjdG9yeUhhbEh5YnJpZCgpOworfQorCit9IC8vIG5hbWVzcGFjZSBDUFBfVkVSU0lPTgorfSAvLyBuYW1lc3BhY2UgYW5kcm9pZAorCisjZW5kaWYgLy8gQU5EUk9JRF9IQVJEV0FSRV9ERVZJQ0VTX0ZBQ1RPUllfSEFMX0hZQlJJRF9ICmRpZmYgLS1naXQgYS9tZWRpYS9saWJhdWRpb2hhbC9pbXBsL0RldmljZXNGYWN0b3J5SGFsTG9jYWwuY3BwIGIvbWVkaWEvbGliYXVkaW9oYWwvaW1wbC9EZXZpY2VzRmFjdG9yeUhhbExvY2FsLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hZjY3ZmY1Ci0tLSAvZGV2L251bGwKKysrIGIvbWVkaWEvbGliYXVkaW9oYWwvaW1wbC9EZXZpY2VzRmFjdG9yeUhhbExvY2FsLmNwcApAQCAtMCwwICsxLDcxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE2IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KKworI2RlZmluZSBMT0dfVEFHICJEZXZpY2VzRmFjdG9yeUhhbExvY2FsIgorLy8jZGVmaW5lIExPR19OREVCVUcgMAorCisjaW5jbHVkZSA8c3RyaW5nLmg+CisKKyNpbmNsdWRlIDxoYXJkd2FyZS9hdWRpby5oPgorI2luY2x1ZGUgPHV0aWxzL0xvZy5oPgorCisjaW5jbHVkZSAiRGV2aWNlSGFsTG9jYWwuaCIKKyNpbmNsdWRlICJEZXZpY2VzRmFjdG9yeUhhbExvY2FsLmgiCisKK25hbWVzcGFjZSBhbmRyb2lkIHsKK25hbWVzcGFjZSBDUFBfVkVSU0lPTiB7CisKK3N0YXRpYyBzdGF0dXNfdCBsb2FkX2F1ZGlvX2ludGVyZmFjZShjb25zdCBjaGFyICppZl9uYW1lLCBhdWRpb19od19kZXZpY2VfdCAqKmRldikKK3sKKyAgICBjb25zdCBod19tb2R1bGVfdCAqbW9kOworICAgIGludCByYzsKKworICAgIHJjID0gaHdfZ2V0X21vZHVsZV9ieV9jbGFzcyhBVURJT19IQVJEV0FSRV9NT0RVTEVfSUQsIGlmX25hbWUsICZtb2QpOworICAgIGlmIChyYykgeworICAgICAgICBBTE9HRSgiJXMgY291bGRuJ3QgbG9hZCBhdWRpbyBodyBtb2R1bGUgJXMuJXMgKCVzKSIsIF9fZnVuY19fLAorICAgICAgICAgICAgICAgIEFVRElPX0hBUkRXQVJFX01PRFVMRV9JRCwgaWZfbmFtZSwgc3RyZXJyb3IoLXJjKSk7CisgICAgICAgIGdvdG8gb3V0OworICAgIH0KKyAgICByYyA9IGF1ZGlvX2h3X2RldmljZV9vcGVuKG1vZCwgZGV2KTsKKyAgICBpZiAocmMpIHsKKyAgICAgICAgQUxPR0UoIiVzIGNvdWxkbid0IG9wZW4gYXVkaW8gaHcgZGV2aWNlIGluICVzLiVzICglcykiLCBfX2Z1bmNfXywKKyAgICAgICAgICAgICAgICBBVURJT19IQVJEV0FSRV9NT0RVTEVfSUQsIGlmX25hbWUsIHN0cmVycm9yKC1yYykpOworICAgICAgICBnb3RvIG91dDsKKyAgICB9CisgICAgaWYgKCgqZGV2KS0+Y29tbW9uLnZlcnNpb24gPCBBVURJT19ERVZJQ0VfQVBJX1ZFUlNJT05fTUlOKSB7CisgICAgICAgIEFMT0dFKCIlcyB3cm9uZyBhdWRpbyBodyBkZXZpY2UgdmVyc2lvbiAlMDR4IiwgX19mdW5jX18sICgqZGV2KS0+Y29tbW9uLnZlcnNpb24pOworICAgICAgICByYyA9IEJBRF9WQUxVRTsKKyAgICAgICAgYXVkaW9faHdfZGV2aWNlX2Nsb3NlKCpkZXYpOworICAgICAgICBnb3RvIG91dDsKKyAgICB9CisgICAgcmV0dXJuIE9LOworCitvdXQ6CisgICAgKmRldiA9IE5VTEw7CisgICAgcmV0dXJuIHJjOworfQorCitzdGF0dXNfdCBEZXZpY2VzRmFjdG9yeUhhbExvY2FsOjpvcGVuRGV2aWNlKGNvbnN0IGNoYXIgKm5hbWUsIHNwPERldmljZUhhbEludGVyZmFjZT4gKmRldmljZSkgeworICAgIGF1ZGlvX2h3X2RldmljZV90ICpkZXY7CisgICAgc3RhdHVzX3QgcmMgPSBsb2FkX2F1ZGlvX2ludGVyZmFjZShuYW1lLCAmZGV2KTsKKyAgICBpZiAocmMgPT0gT0spIHsKKyAgICAgICAgKmRldmljZSA9IG5ldyBEZXZpY2VIYWxMb2NhbChkZXYpOworICAgIH0KKyAgICByZXR1cm4gcmM7Cit9CisKK30gLy8gbmFtZXNwYWNlIENQUF9WRVJTSU9OCit9IC8vIG5hbWVzcGFjZSBhbmRyb2lkCmRpZmYgLS1naXQgYS9tZWRpYS9saWJhdWRpb2hhbC9pbXBsL0RldmljZXNGYWN0b3J5SGFsTG9jYWwuaCBiL21lZGlhL2xpYmF1ZGlvaGFsL2ltcGwvRGV2aWNlc0ZhY3RvcnlIYWxMb2NhbC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVkMTA4ZGQKLS0tIC9kZXYvbnVsbAorKysgYi9tZWRpYS9saWJhdWRpb2hhbC9pbXBsL0RldmljZXNGYWN0b3J5SGFsTG9jYWwuaApAQCAtMCwwICsxLDQ4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE2IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KKworI2lmbmRlZiBBTkRST0lEX0hBUkRXQVJFX0RFVklDRVNfRkFDVE9SWV9IQUxfTE9DQUxfSAorI2RlZmluZSBBTkRST0lEX0hBUkRXQVJFX0RFVklDRVNfRkFDVE9SWV9IQUxfTE9DQUxfSAorCisjaW5jbHVkZSA8bWVkaWEvYXVkaW9oYWwvRGV2aWNlc0ZhY3RvcnlIYWxJbnRlcmZhY2UuaD4KKyNpbmNsdWRlIDx1dGlscy9FcnJvcnMuaD4KKyNpbmNsdWRlIDx1dGlscy9SZWZCYXNlLmg+CisKKyNpbmNsdWRlICJEZXZpY2VIYWxMb2NhbC5oIgorCituYW1lc3BhY2UgYW5kcm9pZCB7CituYW1lc3BhY2UgQ1BQX1ZFUlNJT04geworCitjbGFzcyBEZXZpY2VzRmFjdG9yeUhhbExvY2FsIDogcHVibGljIERldmljZXNGYWN0b3J5SGFsSW50ZXJmYWNlCit7CisgIHB1YmxpYzoKKyAgICAvLyBPcGVucyBhIGRldmljZSB3aXRoIHRoZSBzcGVjaWZpZWQgbmFtZS4gVG8gY2xvc2UgdGhlIGRldmljZSwgaXQgaXMKKyAgICAvLyBuZWNlc3NhcnkgdG8gcmVsZWFzZSByZWZlcmVuY2VzIHRvIHRoZSByZXR1cm5lZCBvYmplY3QuCisgICAgdmlydHVhbCBzdGF0dXNfdCBvcGVuRGV2aWNlKGNvbnN0IGNoYXIgKm5hbWUsIHNwPERldmljZUhhbEludGVyZmFjZT4gKmRldmljZSk7CisKKyAgcHJpdmF0ZToKKyAgICBmcmllbmQgY2xhc3MgRGV2aWNlc0ZhY3RvcnlIYWxIeWJyaWQ7CisKKyAgICAvLyBDYW4gbm90IGJlIGNvbnN0cnVjdGVkIGRpcmVjdGx5IGJ5IGNsaWVudHMuCisgICAgRGV2aWNlc0ZhY3RvcnlIYWxMb2NhbCgpIHt9CisKKyAgICB2aXJ0dWFsIH5EZXZpY2VzRmFjdG9yeUhhbExvY2FsKCkge30KK307CisKK30gLy8gbmFtZXNwYWNlIENQUF9WRVJTSU9OCit9IC8vIG5hbWVzcGFjZSBhbmRyb2lkCisKKyNlbmRpZiAvLyBBTkRST0lEX0hBUkRXQVJFX0RFVklDRVNfRkFDVE9SWV9IQUxfTE9DQUxfSApkaWZmIC0tZ2l0IGEvbWVkaWEvbGliYXVkaW9oYWwvaW1wbC9FZmZlY3RCdWZmZXJIYWxIaWRsLmNwcCBiL21lZGlhL2xpYmF1ZGlvaGFsL2ltcGwvRWZmZWN0QnVmZmVySGFsSGlkbC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmVmNGU4YQotLS0gL2Rldi9udWxsCisrKyBiL21lZGlhL2xpYmF1ZGlvaGFsL2ltcGwvRWZmZWN0QnVmZmVySGFsSGlkbC5jcHAKQEAgLTAsMCArMSwxNDYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTcgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworCisjaW5jbHVkZSA8YXRvbWljPgorCisjZGVmaW5lIExPR19UQUcgIkVmZmVjdEJ1ZmZlckhhbEhpZGwiCisvLyNkZWZpbmUgTE9HX05ERUJVRyAwCisKKyNpbmNsdWRlIDxhbmRyb2lkL2hpZGwvYWxsb2NhdG9yLzEuMC9JQWxsb2NhdG9yLmg+CisjaW5jbHVkZSA8aGlkbG1lbW9yeS9tYXBwaW5nLmg+CisjaW5jbHVkZSA8dXRpbHMvTG9nLmg+CisKKyNpbmNsdWRlICJDb252ZXJzaW9uSGVscGVySGlkbC5oIgorI2luY2x1ZGUgIkVmZmVjdEJ1ZmZlckhhbEhpZGwuaCIKKwordXNpbmcgOjphbmRyb2lkOjpoYXJkd2FyZTo6UmV0dXJuOwordXNpbmcgOjphbmRyb2lkOjpoaWRsOjphbGxvY2F0b3I6OlYxXzA6OklBbGxvY2F0b3I7CisKK25hbWVzcGFjZSBhbmRyb2lkIHsKK25hbWVzcGFjZSBDUFBfVkVSU0lPTiB7CisKKy8vIHN0YXRpYwordWludDY0X3QgRWZmZWN0QnVmZmVySGFsSGlkbDo6bWFrZVVuaXF1ZUlkKCkgeworICAgIHN0YXRpYyBzdGQ6OmF0b21pYzx1aW50NjRfdD4gY291bnRlcnsxfTsKKyAgICByZXR1cm4gY291bnRlcisrOworfQorCitzdGF0dXNfdCBFZmZlY3RCdWZmZXJIYWxIaWRsOjphbGxvY2F0ZSgKKyAgICAgICAgc2l6ZV90IHNpemUsIHNwPEVmZmVjdEJ1ZmZlckhhbEludGVyZmFjZT4qIGJ1ZmZlcikgeworICAgIHJldHVybiBtaXJyb3IobnVsbHB0ciwgc2l6ZSwgYnVmZmVyKTsKK30KKworc3RhdHVzX3QgRWZmZWN0QnVmZmVySGFsSGlkbDo6bWlycm9yKAorICAgICAgICB2b2lkKiBleHRlcm5hbCwgc2l6ZV90IHNpemUsIHNwPEVmZmVjdEJ1ZmZlckhhbEludGVyZmFjZT4qIGJ1ZmZlcikgeworICAgIHNwPEVmZmVjdEJ1ZmZlckhhbEludGVyZmFjZT4gdGVtcEJ1ZmZlciA9IG5ldyBFZmZlY3RCdWZmZXJIYWxIaWRsKHNpemUpOworICAgIHN0YXR1c190IHJlc3VsdCA9IHN0YXRpY19jYXN0PEVmZmVjdEJ1ZmZlckhhbEhpZGwqPih0ZW1wQnVmZmVyLmdldCgpKS0+aW5pdCgpOworICAgIGlmIChyZXN1bHQgPT0gT0spIHsKKyAgICAgICAgdGVtcEJ1ZmZlci0+c2V0RXh0ZXJuYWxEYXRhKGV4dGVybmFsKTsKKyAgICAgICAgKmJ1ZmZlciA9IHRlbXBCdWZmZXI7CisgICAgfQorICAgIHJldHVybiByZXN1bHQ7Cit9CisKK0VmZmVjdEJ1ZmZlckhhbEhpZGw6OkVmZmVjdEJ1ZmZlckhhbEhpZGwoc2l6ZV90IHNpemUpCisgICAgICAgIDogbUJ1ZmZlclNpemUoc2l6ZSksIG1GcmFtZUNvdW50Q2hhbmdlZChmYWxzZSksCisgICAgICAgICAgbUV4dGVybmFsRGF0YShudWxscHRyKSwgbUF1ZGlvQnVmZmVyezAsIHtudWxscHRyfX0geworICAgIG1IaWRsQnVmZmVyLmlkID0gbWFrZVVuaXF1ZUlkKCk7CisgICAgbUhpZGxCdWZmZXIuZnJhbWVDb3VudCA9IDA7Cit9CisKK0VmZmVjdEJ1ZmZlckhhbEhpZGw6On5FZmZlY3RCdWZmZXJIYWxIaWRsKCkgeworfQorCitzdGF0dXNfdCBFZmZlY3RCdWZmZXJIYWxIaWRsOjppbml0KCkgeworICAgIHNwPElBbGxvY2F0b3I+IGFzaG1lbSA9IElBbGxvY2F0b3I6OmdldFNlcnZpY2UoImFzaG1lbSIpOworICAgIGlmIChhc2htZW0gPT0gMCkgeworICAgICAgICBBTE9HRSgiRmFpbGVkIHRvIHJldHJpZXZlIGFzaG1lbSBhbGxvY2F0b3Igc2VydmljZSIpOworICAgICAgICByZXR1cm4gTk9fSU5JVDsKKyAgICB9CisgICAgc3RhdHVzX3QgcmV0dmFsID0gTk9fTUVNT1JZOworICAgIFJldHVybjx2b2lkPiByZXN1bHQgPSBhc2htZW0tPmFsbG9jYXRlKAorICAgICAgICAgICAgbUJ1ZmZlclNpemUsCisgICAgICAgICAgICBbJl0oYm9vbCBzdWNjZXNzLCBjb25zdCBoaWRsX21lbW9yeSYgbWVtb3J5KSB7CisgICAgICAgICAgICAgICAgaWYgKHN1Y2Nlc3MpIHsKKyAgICAgICAgICAgICAgICAgICAgbUhpZGxCdWZmZXIuZGF0YSA9IG1lbW9yeTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dmFsID0gT0s7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfSk7CisgICAgaWYgKHJlc3VsdC5pc09rKCkgJiYgcmV0dmFsID09IE9LKSB7CisgICAgICAgIG1NZW1vcnkgPSBoYXJkd2FyZTo6bWFwTWVtb3J5KG1IaWRsQnVmZmVyLmRhdGEpOworICAgICAgICBpZiAobU1lbW9yeSAhPSAwKSB7CisgICAgICAgICAgICBtTWVtb3J5LT51cGRhdGUoKTsKKyAgICAgICAgICAgIG1BdWRpb0J1ZmZlci5yYXcgPSBzdGF0aWNfY2FzdDx2b2lkKj4obU1lbW9yeS0+Z2V0UG9pbnRlcigpKTsKKyAgICAgICAgICAgIG1lbXNldChtQXVkaW9CdWZmZXIucmF3LCAwLCBtTWVtb3J5LT5nZXRTaXplKCkpOworICAgICAgICAgICAgbU1lbW9yeS0+Y29tbWl0KCk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBBTE9HRSgiRmFpbGVkIHRvIG1hcCBhbGxvY2F0ZWQgYXNobWVtIik7CisgICAgICAgICAgICByZXR2YWwgPSBOT19NRU1PUlk7CisgICAgICAgIH0KKyAgICB9IGVsc2UgeworICAgICAgICBBTE9HRSgiRmFpbGVkIHRvIGFsbG9jYXRlICVkIGJ5dGVzIGZyb20gYXNobWVtIiwgKGludCltQnVmZmVyU2l6ZSk7CisgICAgfQorICAgIHJldHVybiByZXN1bHQuaXNPaygpID8gcmV0dmFsIDogRkFJTEVEX1RSQU5TQUNUSU9OOworfQorCithdWRpb19idWZmZXJfdCogRWZmZWN0QnVmZmVySGFsSGlkbDo6YXVkaW9CdWZmZXIoKSB7CisgICAgcmV0dXJuICZtQXVkaW9CdWZmZXI7Cit9CisKK3ZvaWQqIEVmZmVjdEJ1ZmZlckhhbEhpZGw6OmV4dGVybmFsRGF0YSgpIGNvbnN0IHsKKyAgICByZXR1cm4gbUV4dGVybmFsRGF0YTsKK30KKwordm9pZCBFZmZlY3RCdWZmZXJIYWxIaWRsOjpzZXRGcmFtZUNvdW50KHNpemVfdCBmcmFtZUNvdW50KSB7CisgICAgbUhpZGxCdWZmZXIuZnJhbWVDb3VudCA9IGZyYW1lQ291bnQ7CisgICAgbUF1ZGlvQnVmZmVyLmZyYW1lQ291bnQgPSBmcmFtZUNvdW50OworICAgIG1GcmFtZUNvdW50Q2hhbmdlZCA9IHRydWU7Cit9CisKK2Jvb2wgRWZmZWN0QnVmZmVySGFsSGlkbDo6Y2hlY2tGcmFtZUNvdW50Q2hhbmdlKCkgeworICAgIGJvb2wgcmVzdWx0ID0gbUZyYW1lQ291bnRDaGFuZ2VkOworICAgIG1GcmFtZUNvdW50Q2hhbmdlZCA9IGZhbHNlOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK3ZvaWQgRWZmZWN0QnVmZmVySGFsSGlkbDo6c2V0RXh0ZXJuYWxEYXRhKHZvaWQqIGV4dGVybmFsKSB7CisgICAgbUV4dGVybmFsRGF0YSA9IGV4dGVybmFsOworfQorCit2b2lkIEVmZmVjdEJ1ZmZlckhhbEhpZGw6OnVwZGF0ZSgpIHsKKyAgICB1cGRhdGUobUJ1ZmZlclNpemUpOworfQorCit2b2lkIEVmZmVjdEJ1ZmZlckhhbEhpZGw6OmNvbW1pdCgpIHsKKyAgICBjb21taXQobUJ1ZmZlclNpemUpOworfQorCit2b2lkIEVmZmVjdEJ1ZmZlckhhbEhpZGw6OnVwZGF0ZShzaXplX3Qgc2l6ZSkgeworICAgIGlmIChtRXh0ZXJuYWxEYXRhID09IG51bGxwdHIpIHJldHVybjsKKyAgICBtTWVtb3J5LT51cGRhdGUoKTsKKyAgICBpZiAoc2l6ZSA+IG1CdWZmZXJTaXplKSBzaXplID0gbUJ1ZmZlclNpemU7CisgICAgbWVtY3B5KG1BdWRpb0J1ZmZlci5yYXcsIG1FeHRlcm5hbERhdGEsIHNpemUpOworICAgIG1NZW1vcnktPmNvbW1pdCgpOworfQorCit2b2lkIEVmZmVjdEJ1ZmZlckhhbEhpZGw6OmNvbW1pdChzaXplX3Qgc2l6ZSkgeworICAgIGlmIChtRXh0ZXJuYWxEYXRhID09IG51bGxwdHIpIHJldHVybjsKKyAgICBpZiAoc2l6ZSA+IG1CdWZmZXJTaXplKSBzaXplID0gbUJ1ZmZlclNpemU7CisgICAgbWVtY3B5KG1FeHRlcm5hbERhdGEsIG1BdWRpb0J1ZmZlci5yYXcsIHNpemUpOworfQorCit9IC8vIG5hbWVzcGFjZSBDUFBfVkVSU0lPTgorfSAvLyBuYW1lc3BhY2UgYW5kcm9pZApkaWZmIC0tZ2l0IGEvbWVkaWEvbGliYXVkaW9oYWwvaW1wbC9FZmZlY3RCdWZmZXJIYWxIaWRsLmggYi9tZWRpYS9saWJhdWRpb2hhbC9pbXBsL0VmZmVjdEJ1ZmZlckhhbEhpZGwuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMjlkNzFhCi0tLSAvZGV2L251bGwKKysrIGIvbWVkaWEvbGliYXVkaW9oYWwvaW1wbC9FZmZlY3RCdWZmZXJIYWxIaWRsLmgKQEAgLTAsMCArMSw3OSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNyBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCisKKyNpZm5kZWYgQU5EUk9JRF9IQVJEV0FSRV9FRkZFQ1RfQlVGRkVSX0hBTF9ISURMX0gKKyNkZWZpbmUgQU5EUk9JRF9IQVJEV0FSRV9FRkZFQ1RfQlVGRkVSX0hBTF9ISURMX0gKKworI2luY2x1ZGUgPGFuZHJvaWQvaGFyZHdhcmUvYXVkaW8vZWZmZWN0LzIuMC90eXBlcy5oPgorI2luY2x1ZGUgPGFuZHJvaWQvaGFyZHdhcmUvYXVkaW8vZWZmZWN0LzQuMC90eXBlcy5oPgorI2luY2x1ZGUgPGFuZHJvaWQvaGlkbC9tZW1vcnkvMS4wL0lNZW1vcnkuaD4KKyNpbmNsdWRlIDxoaWRsL0hpZGxTdXBwb3J0Lmg+CisjaW5jbHVkZSA8bWVkaWEvYXVkaW9oYWwvRWZmZWN0QnVmZmVySGFsSW50ZXJmYWNlLmg+CisjaW5jbHVkZSA8c3lzdGVtL2F1ZGlvX2VmZmVjdC5oPgorCit1c2luZyBhbmRyb2lkOjpoYXJkd2FyZTo6YXVkaW86OmVmZmVjdDo6Q1BQX1ZFUlNJT046OkF1ZGlvQnVmZmVyOwordXNpbmcgYW5kcm9pZDo6aGFyZHdhcmU6OmhpZGxfbWVtb3J5OwordXNpbmcgYW5kcm9pZDo6aGlkbDo6bWVtb3J5OjpWMV8wOjpJTWVtb3J5OworCituYW1lc3BhY2UgYW5kcm9pZCB7CituYW1lc3BhY2UgQ1BQX1ZFUlNJT04geworCitjbGFzcyBFZmZlY3RCdWZmZXJIYWxIaWRsIDogcHVibGljIEVmZmVjdEJ1ZmZlckhhbEludGVyZmFjZQoreworICBwdWJsaWM6CisgICAgc3RhdGljIHN0YXR1c190IGFsbG9jYXRlKHNpemVfdCBzaXplLCBzcDxFZmZlY3RCdWZmZXJIYWxJbnRlcmZhY2U+KiBidWZmZXIpOworICAgIHN0YXRpYyBzdGF0dXNfdCBtaXJyb3Iodm9pZCogZXh0ZXJuYWwsIHNpemVfdCBzaXplLCBzcDxFZmZlY3RCdWZmZXJIYWxJbnRlcmZhY2U+KiBidWZmZXIpOworCisgICAgdmlydHVhbCBhdWRpb19idWZmZXJfdCogYXVkaW9CdWZmZXIoKTsKKyAgICB2aXJ0dWFsIHZvaWQqIGV4dGVybmFsRGF0YSgpIGNvbnN0OworCisgICAgdmlydHVhbCBzaXplX3QgZ2V0U2l6ZSgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIG1CdWZmZXJTaXplOyB9CisKKyAgICB2aXJ0dWFsIHZvaWQgc2V0RXh0ZXJuYWxEYXRhKHZvaWQqIGV4dGVybmFsKTsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0RnJhbWVDb3VudChzaXplX3QgZnJhbWVDb3VudCk7CisgICAgdmlydHVhbCBib29sIGNoZWNrRnJhbWVDb3VudENoYW5nZSgpOworCisgICAgdmlydHVhbCB2b2lkIHVwZGF0ZSgpOworICAgIHZpcnR1YWwgdm9pZCBjb21taXQoKTsKKyAgICB2aXJ0dWFsIHZvaWQgdXBkYXRlKHNpemVfdCBzaXplKTsKKyAgICB2aXJ0dWFsIHZvaWQgY29tbWl0KHNpemVfdCBzaXplKTsKKworICAgIGNvbnN0IEF1ZGlvQnVmZmVyJiBoaWRsQnVmZmVyKCkgY29uc3QgeyByZXR1cm4gbUhpZGxCdWZmZXI7IH0KKworICBwcml2YXRlOgorICAgIGZyaWVuZCBjbGFzcyBFZmZlY3RCdWZmZXJIYWxJbnRlcmZhY2U7CisKKyAgICBzdGF0aWMgdWludDY0X3QgbWFrZVVuaXF1ZUlkKCk7CisKKyAgICBjb25zdCBzaXplX3QgbUJ1ZmZlclNpemU7CisgICAgYm9vbCBtRnJhbWVDb3VudENoYW5nZWQ7CisgICAgdm9pZCogbUV4dGVybmFsRGF0YTsKKyAgICBBdWRpb0J1ZmZlciBtSGlkbEJ1ZmZlcjsKKyAgICBzcDxJTWVtb3J5PiBtTWVtb3J5OworICAgIGF1ZGlvX2J1ZmZlcl90IG1BdWRpb0J1ZmZlcjsKKworICAgIC8vIENhbiBub3QgYmUgY29uc3RydWN0ZWQgZGlyZWN0bHkgYnkgY2xpZW50cy4KKyAgICBleHBsaWNpdCBFZmZlY3RCdWZmZXJIYWxIaWRsKHNpemVfdCBzaXplKTsKKworICAgIHZpcnR1YWwgfkVmZmVjdEJ1ZmZlckhhbEhpZGwoKTsKKworICAgIHN0YXR1c190IGluaXQoKTsKK307CisKK30gLy8gbmFtZXNwYWNlIENQUF9WRVJTSU9OCit9IC8vIG5hbWVzcGFjZSBhbmRyb2lkCisKKyNlbmRpZiAvLyBBTkRST0lEX0hBUkRXQVJFX0VGRkVDVF9CVUZGRVJfSEFMX0hJRExfSApkaWZmIC0tZ2l0IGEvbWVkaWEvbGliYXVkaW9oYWwvaW1wbC9FZmZlY3RIYWxIaWRsLmNwcCBiL21lZGlhL2xpYmF1ZGlvaGFsL2ltcGwvRWZmZWN0SGFsSGlkbC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTI2NDlhMQotLS0gL2Rldi9udWxsCisrKyBiL21lZGlhL2xpYmF1ZGlvaGFsL2ltcGwvRWZmZWN0SGFsSGlkbC5jcHAKQEAgLTAsMCArMSwzNDEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworCisjZGVmaW5lIExPR19UQUcgIkVmZmVjdEhhbEhpZGwiCisvLyNkZWZpbmUgTE9HX05ERUJVRyAwCisKKyNpbmNsdWRlIDxjb21tb24vYWxsLXZlcnNpb25zL1ZlcnNpb25VdGlscy5oPgorI2luY2x1ZGUgPGh3YmluZGVyL0lQQ1RocmVhZFN0YXRlLmg+CisjaW5jbHVkZSA8bWVkaWEvRWZmZWN0c0ZhY3RvcnlBcGkuaD4KKyNpbmNsdWRlIDx1dGlscy9Mb2cuaD4KKworI2luY2x1ZGUgIkVmZmVjdEJ1ZmZlckhhbEhpZGwuaCIKKyNpbmNsdWRlICJFZmZlY3RIYWxIaWRsLmgiCisjaW5jbHVkZSAiSGlkbFV0aWxzLmgiCisKK3VzaW5nIDo6YW5kcm9pZDo6aGFyZHdhcmU6OmF1ZGlvOjplZmZlY3Q6OkNQUF9WRVJTSU9OOjpBdWRpb0J1ZmZlcjsKK3VzaW5nIDo6YW5kcm9pZDo6aGFyZHdhcmU6OmF1ZGlvOjplZmZlY3Q6OkNQUF9WRVJTSU9OOjpFZmZlY3RCdWZmZXJBY2Nlc3M7Cit1c2luZyA6OmFuZHJvaWQ6OmhhcmR3YXJlOjphdWRpbzo6ZWZmZWN0OjpDUFBfVkVSU0lPTjo6RWZmZWN0Q29uZmlnUGFyYW1ldGVyczsKK3VzaW5nIDo6YW5kcm9pZDo6aGFyZHdhcmU6OmF1ZGlvOjplZmZlY3Q6OkNQUF9WRVJTSU9OOjpNZXNzYWdlUXVldWVGbGFnQml0czsKK3VzaW5nIDo6YW5kcm9pZDo6aGFyZHdhcmU6OmF1ZGlvOjplZmZlY3Q6OkNQUF9WRVJTSU9OOjpSZXN1bHQ7Cit1c2luZyA6OmFuZHJvaWQ6OmhhcmR3YXJlOjphdWRpbzo6Y29tbW9uOjpDUFBfVkVSU0lPTjo6SGlkbFV0aWxzOwordXNpbmcgOjphbmRyb2lkOjpoYXJkd2FyZTo6YXVkaW86OmNvbW1vbjo6Q1BQX1ZFUlNJT046OkF1ZGlvQ2hhbm5lbE1hc2s7Cit1c2luZyA6OmFuZHJvaWQ6OmhhcmR3YXJlOjphdWRpbzo6Y29tbW9uOjpDUFBfVkVSU0lPTjo6QXVkaW9Gb3JtYXQ7Cit1c2luZyA6OmFuZHJvaWQ6OmhhcmR3YXJlOjphdWRpbzo6Y29tbW9uOjp1dGlsczo6bWtFbnVtQ29udmVydGVyOwordXNpbmcgOjphbmRyb2lkOjpoYXJkd2FyZTo6aGlkbF92ZWM7Cit1c2luZyA6OmFuZHJvaWQ6OmhhcmR3YXJlOjpNUURlc2NyaXB0b3JTeW5jOwordXNpbmcgOjphbmRyb2lkOjpoYXJkd2FyZTo6UmV0dXJuOworCituYW1lc3BhY2UgYW5kcm9pZCB7CituYW1lc3BhY2UgQ1BQX1ZFUlNJT04geworCitFZmZlY3RIYWxIaWRsOjpFZmZlY3RIYWxIaWRsKGNvbnN0IHNwPElFZmZlY3Q+JiBlZmZlY3QsIHVpbnQ2NF90IGVmZmVjdElkKQorICAgICAgICA6IG1FZmZlY3QoZWZmZWN0KSwgbUVmZmVjdElkKGVmZmVjdElkKSwgbUJ1ZmZlcnNDaGFuZ2VkKHRydWUpLCBtRWZHcm91cChudWxscHRyKSB7Cit9CisKK0VmZmVjdEhhbEhpZGw6On5FZmZlY3RIYWxIaWRsKCkgeworICAgIGlmIChtRWZmZWN0ICE9IDApIHsKKyAgICAgICAgY2xvc2UoKTsKKyAgICAgICAgbUVmZmVjdC5jbGVhcigpOworICAgICAgICBoYXJkd2FyZTo6SVBDVGhyZWFkU3RhdGU6OnNlbGYoKS0+Zmx1c2hDb21tYW5kcygpOworICAgIH0KKyAgICBpZiAobUVmR3JvdXApIHsKKyAgICAgICAgRXZlbnRGbGFnOjpkZWxldGVFdmVudEZsYWcoJm1FZkdyb3VwKTsKKyAgICB9Cit9CisKKy8vIHN0YXRpYwordm9pZCBFZmZlY3RIYWxIaWRsOjplZmZlY3REZXNjcmlwdG9yVG9IYWwoCisgICAgICAgIGNvbnN0IEVmZmVjdERlc2NyaXB0b3ImIGRlc2NyaXB0b3IsIGVmZmVjdF9kZXNjcmlwdG9yX3QqIGhhbERlc2NyaXB0b3IpIHsKKyAgICBIaWRsVXRpbHM6OnV1aWRUb0hhbChkZXNjcmlwdG9yLnR5cGUsICZoYWxEZXNjcmlwdG9yLT50eXBlKTsKKyAgICBIaWRsVXRpbHM6OnV1aWRUb0hhbChkZXNjcmlwdG9yLnV1aWQsICZoYWxEZXNjcmlwdG9yLT51dWlkKTsKKyAgICBoYWxEZXNjcmlwdG9yLT5mbGFncyA9IHN0YXRpY19jYXN0PHVpbnQzMl90PihkZXNjcmlwdG9yLmZsYWdzKTsKKyAgICBoYWxEZXNjcmlwdG9yLT5jcHVMb2FkID0gZGVzY3JpcHRvci5jcHVMb2FkOworICAgIGhhbERlc2NyaXB0b3ItPm1lbW9yeVVzYWdlID0gZGVzY3JpcHRvci5tZW1vcnlVc2FnZTsKKyAgICBtZW1jcHkoaGFsRGVzY3JpcHRvci0+bmFtZSwgZGVzY3JpcHRvci5uYW1lLmRhdGEoKSwgZGVzY3JpcHRvci5uYW1lLnNpemUoKSk7CisgICAgbWVtY3B5KGhhbERlc2NyaXB0b3ItPmltcGxlbWVudG9yLAorICAgICAgICAgICAgZGVzY3JpcHRvci5pbXBsZW1lbnRvci5kYXRhKCksIGRlc2NyaXB0b3IuaW1wbGVtZW50b3Iuc2l6ZSgpKTsKK30KKworLy8gVE9ETyhtbmFnYW5vdik6IFRoZXNlIGJ1ZmZlciBjb252ZXJzaW9uIGZ1bmN0aW9ucyBzaG91bGQgYmUgc2hhcmVkIHdpdGggRWZmZWN0IHdyYXBwZXIKKy8vIHZpYSBIaWRsVXRpbHMuIE1vdmUgdGhlbSB0aGVyZSB3aGVuIGhhcmR3YXJlL2ludGVyZmFjZXMgd2lsbCBnZXQgdW4tZnJvemVuIGFnYWluLgorCisvLyBzdGF0aWMKK3ZvaWQgRWZmZWN0SGFsSGlkbDo6ZWZmZWN0QnVmZmVyQ29uZmlnRnJvbUhhbCgKKyAgICAgICAgY29uc3QgYnVmZmVyX2NvbmZpZ190JiBoYWxDb25maWcsIEVmZmVjdEJ1ZmZlckNvbmZpZyogY29uZmlnKSB7CisgICAgY29uZmlnLT5zYW1wbGluZ1JhdGVIeiA9IGhhbENvbmZpZy5zYW1wbGluZ1JhdGU7CisgICAgY29uZmlnLT5jaGFubmVscyA9IG1rRW51bUNvbnZlcnRlcjxBdWRpb0NoYW5uZWxNYXNrPihoYWxDb25maWcuY2hhbm5lbHMpOworICAgIGNvbmZpZy0+Zm9ybWF0ID0gQXVkaW9Gb3JtYXQoaGFsQ29uZmlnLmZvcm1hdCk7CisgICAgY29uZmlnLT5hY2Nlc3NNb2RlID0gRWZmZWN0QnVmZmVyQWNjZXNzKGhhbENvbmZpZy5hY2Nlc3NNb2RlKTsKKyAgICBjb25maWctPm1hc2sgPSBta0VudW1Db252ZXJ0ZXI8RWZmZWN0Q29uZmlnUGFyYW1ldGVycz4oaGFsQ29uZmlnLm1hc2spOworfQorCisvLyBzdGF0aWMKK3ZvaWQgRWZmZWN0SGFsSGlkbDo6ZWZmZWN0QnVmZmVyQ29uZmlnVG9IYWwoCisgICAgICAgIGNvbnN0IEVmZmVjdEJ1ZmZlckNvbmZpZyYgY29uZmlnLCBidWZmZXJfY29uZmlnX3QqIGhhbENvbmZpZykgeworICAgIGhhbENvbmZpZy0+YnVmZmVyLmZyYW1lQ291bnQgPSAwOworICAgIGhhbENvbmZpZy0+YnVmZmVyLnJhdyA9IE5VTEw7CisgICAgaGFsQ29uZmlnLT5zYW1wbGluZ1JhdGUgPSBjb25maWcuc2FtcGxpbmdSYXRlSHo7CisgICAgaGFsQ29uZmlnLT5jaGFubmVscyA9IHN0YXRpY19jYXN0PHVpbnQzMl90Pihjb25maWcuY2hhbm5lbHMpOworICAgIGhhbENvbmZpZy0+YnVmZmVyUHJvdmlkZXIuY29va2llID0gTlVMTDsKKyAgICBoYWxDb25maWctPmJ1ZmZlclByb3ZpZGVyLmdldEJ1ZmZlciA9IE5VTEw7CisgICAgaGFsQ29uZmlnLT5idWZmZXJQcm92aWRlci5yZWxlYXNlQnVmZmVyID0gTlVMTDsKKyAgICBoYWxDb25maWctPmZvcm1hdCA9IHN0YXRpY19jYXN0PHVpbnQ4X3Q+KGNvbmZpZy5mb3JtYXQpOworICAgIGhhbENvbmZpZy0+YWNjZXNzTW9kZSA9IHN0YXRpY19jYXN0PHVpbnQ4X3Q+KGNvbmZpZy5hY2Nlc3NNb2RlKTsKKyAgICBoYWxDb25maWctPm1hc2sgPSBzdGF0aWNfY2FzdDx1aW50OF90Pihjb25maWcubWFzayk7Cit9CisKKy8vIHN0YXRpYwordm9pZCBFZmZlY3RIYWxIaWRsOjplZmZlY3RDb25maWdGcm9tSGFsKGNvbnN0IGVmZmVjdF9jb25maWdfdCYgaGFsQ29uZmlnLCBFZmZlY3RDb25maWcqIGNvbmZpZykgeworICAgIGVmZmVjdEJ1ZmZlckNvbmZpZ0Zyb21IYWwoaGFsQ29uZmlnLmlucHV0Q2ZnLCAmY29uZmlnLT5pbnB1dENmZyk7CisgICAgZWZmZWN0QnVmZmVyQ29uZmlnRnJvbUhhbChoYWxDb25maWcub3V0cHV0Q2ZnLCAmY29uZmlnLT5vdXRwdXRDZmcpOworfQorCisvLyBzdGF0aWMKK3ZvaWQgRWZmZWN0SGFsSGlkbDo6ZWZmZWN0Q29uZmlnVG9IYWwoY29uc3QgRWZmZWN0Q29uZmlnJiBjb25maWcsIGVmZmVjdF9jb25maWdfdCogaGFsQ29uZmlnKSB7CisgICAgZWZmZWN0QnVmZmVyQ29uZmlnVG9IYWwoY29uZmlnLmlucHV0Q2ZnLCAmaGFsQ29uZmlnLT5pbnB1dENmZyk7CisgICAgZWZmZWN0QnVmZmVyQ29uZmlnVG9IYWwoY29uZmlnLm91dHB1dENmZywgJmhhbENvbmZpZy0+b3V0cHV0Q2ZnKTsKK30KKworLy8gc3RhdGljCitzdGF0dXNfdCBFZmZlY3RIYWxIaWRsOjphbmFseXplUmVzdWx0KGNvbnN0IFJlc3VsdCYgcmVzdWx0KSB7CisgICAgc3dpdGNoIChyZXN1bHQpIHsKKyAgICAgICAgY2FzZSBSZXN1bHQ6Ok9LOiByZXR1cm4gT0s7CisgICAgICAgIGNhc2UgUmVzdWx0OjpJTlZBTElEX0FSR1VNRU5UUzogcmV0dXJuIEJBRF9WQUxVRTsKKyAgICAgICAgY2FzZSBSZXN1bHQ6OklOVkFMSURfU1RBVEU6IHJldHVybiBOT1RfRU5PVUdIX0RBVEE7CisgICAgICAgIGNhc2UgUmVzdWx0OjpOT1RfSU5JVElBTElaRUQ6IHJldHVybiBOT19JTklUOworICAgICAgICBjYXNlIFJlc3VsdDo6Tk9UX1NVUFBPUlRFRDogcmV0dXJuIElOVkFMSURfT1BFUkFUSU9OOworICAgICAgICBjYXNlIFJlc3VsdDo6UkVTVUxUX1RPT19CSUc6IHJldHVybiBOT19NRU1PUlk7CisgICAgICAgIGRlZmF1bHQ6IHJldHVybiBOT19JTklUOworICAgIH0KK30KKworc3RhdHVzX3QgRWZmZWN0SGFsSGlkbDo6c2V0SW5CdWZmZXIoY29uc3Qgc3A8RWZmZWN0QnVmZmVySGFsSW50ZXJmYWNlPiYgYnVmZmVyKSB7CisgICAgaWYgKCFtQnVmZmVyc0NoYW5nZWQpIHsKKyAgICAgICAgaWYgKGJ1ZmZlci5nZXQoKSA9PSBudWxscHRyIHx8IG1JbkJ1ZmZlci5nZXQoKSA9PSBudWxscHRyKSB7CisgICAgICAgICAgICBtQnVmZmVyc0NoYW5nZWQgPSBidWZmZXIuZ2V0KCkgIT0gbUluQnVmZmVyLmdldCgpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgbUJ1ZmZlcnNDaGFuZ2VkID0gYnVmZmVyLT5hdWRpb0J1ZmZlcigpICE9IG1JbkJ1ZmZlci0+YXVkaW9CdWZmZXIoKTsKKyAgICAgICAgfQorICAgIH0KKyAgICBtSW5CdWZmZXIgPSBidWZmZXI7CisgICAgcmV0dXJuIE9LOworfQorCitzdGF0dXNfdCBFZmZlY3RIYWxIaWRsOjpzZXRPdXRCdWZmZXIoY29uc3Qgc3A8RWZmZWN0QnVmZmVySGFsSW50ZXJmYWNlPiYgYnVmZmVyKSB7CisgICAgaWYgKCFtQnVmZmVyc0NoYW5nZWQpIHsKKyAgICAgICAgaWYgKGJ1ZmZlci5nZXQoKSA9PSBudWxscHRyIHx8IG1PdXRCdWZmZXIuZ2V0KCkgPT0gbnVsbHB0cikgeworICAgICAgICAgICAgbUJ1ZmZlcnNDaGFuZ2VkID0gYnVmZmVyLmdldCgpICE9IG1PdXRCdWZmZXIuZ2V0KCk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBtQnVmZmVyc0NoYW5nZWQgPSBidWZmZXItPmF1ZGlvQnVmZmVyKCkgIT0gbU91dEJ1ZmZlci0+YXVkaW9CdWZmZXIoKTsKKyAgICAgICAgfQorICAgIH0KKyAgICBtT3V0QnVmZmVyID0gYnVmZmVyOworICAgIHJldHVybiBPSzsKK30KKworc3RhdHVzX3QgRWZmZWN0SGFsSGlkbDo6cHJvY2VzcygpIHsKKyAgICByZXR1cm4gcHJvY2Vzc0ltcGwoc3RhdGljX2Nhc3Q8dWludDMyX3Q+KE1lc3NhZ2VRdWV1ZUZsYWdCaXRzOjpSRVFVRVNUX1BST0NFU1MpKTsKK30KKworc3RhdHVzX3QgRWZmZWN0SGFsSGlkbDo6cHJvY2Vzc1JldmVyc2UoKSB7CisgICAgcmV0dXJuIHByb2Nlc3NJbXBsKHN0YXRpY19jYXN0PHVpbnQzMl90PihNZXNzYWdlUXVldWVGbGFnQml0czo6UkVRVUVTVF9QUk9DRVNTX1JFVkVSU0UpKTsKK30KKworc3RhdHVzX3QgRWZmZWN0SGFsSGlkbDo6cHJlcGFyZUZvclByb2Nlc3NpbmcoKSB7CisgICAgc3RkOjp1bmlxdWVfcHRyPFN0YXR1c01RPiB0ZW1wU3RhdHVzTVE7CisgICAgUmVzdWx0IHJldHZhbDsKKyAgICBSZXR1cm48dm9pZD4gcmV0ID0gbUVmZmVjdC0+cHJlcGFyZUZvclByb2Nlc3NpbmcoCisgICAgICAgICAgICBbJl0oUmVzdWx0IHIsIGNvbnN0IE1RRGVzY3JpcHRvclN5bmM8UmVzdWx0PiYgc3RhdHVzTVEpIHsKKyAgICAgICAgICAgICAgICByZXR2YWwgPSByOworICAgICAgICAgICAgICAgIGlmIChyZXR2YWwgPT0gUmVzdWx0OjpPSykgeworICAgICAgICAgICAgICAgICAgICB0ZW1wU3RhdHVzTVEucmVzZXQobmV3IFN0YXR1c01RKHN0YXR1c01RKSk7CisgICAgICAgICAgICAgICAgICAgIGlmICh0ZW1wU3RhdHVzTVEtPmlzVmFsaWQoKSAmJiB0ZW1wU3RhdHVzTVEtPmdldEV2ZW50RmxhZ1dvcmQoKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgRXZlbnRGbGFnOjpjcmVhdGVFdmVudEZsYWcodGVtcFN0YXR1c01RLT5nZXRFdmVudEZsYWdXb3JkKCksICZtRWZHcm91cCk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9KTsKKyAgICBpZiAoIXJldC5pc09rKCkgfHwgcmV0dmFsICE9IFJlc3VsdDo6T0spIHsKKyAgICAgICAgcmV0dXJuIHJldC5pc09rKCkgPyBhbmFseXplUmVzdWx0KHJldHZhbCkgOiBGQUlMRURfVFJBTlNBQ1RJT047CisgICAgfQorICAgIGlmICghdGVtcFN0YXR1c01RIHx8ICF0ZW1wU3RhdHVzTVEtPmlzVmFsaWQoKSB8fCAhbUVmR3JvdXApIHsKKyAgICAgICAgQUxPR0VfSUYoIXRlbXBTdGF0dXNNUSwgIkZhaWxlZCB0byBvYnRhaW4gc3RhdHVzIG1lc3NhZ2UgcXVldWUgZm9yIGVmZmVjdHMiKTsKKyAgICAgICAgQUxPR0VfSUYodGVtcFN0YXR1c01RICYmICF0ZW1wU3RhdHVzTVEtPmlzVmFsaWQoKSwKKyAgICAgICAgICAgICAgICAiU3RhdHVzIG1lc3NhZ2UgcXVldWUgZm9yIGVmZmVjdHMgaXMgaW52YWxpZCIpOworICAgICAgICBBTE9HRV9JRighbUVmR3JvdXAsICJFdmVudCBmbGFnIGNyZWF0aW9uIGZvciBlZmZlY3RzIGZhaWxlZCIpOworICAgICAgICByZXR1cm4gTk9fSU5JVDsKKyAgICB9CisgICAgbVN0YXR1c01RID0gc3RkOjptb3ZlKHRlbXBTdGF0dXNNUSk7CisgICAgcmV0dXJuIE9LOworfQorCitib29sIEVmZmVjdEhhbEhpZGw6Om5lZWRUb1Jlc2V0QnVmZmVycygpIHsKKyAgICBpZiAobUJ1ZmZlcnNDaGFuZ2VkKSByZXR1cm4gdHJ1ZTsKKyAgICBib29sIGluQnVmZmVyRnJhbWVDb3VudFVwZGF0ZWQgPSBtSW5CdWZmZXItPmNoZWNrRnJhbWVDb3VudENoYW5nZSgpOworICAgIGJvb2wgb3V0QnVmZmVyRnJhbWVDb3VudFVwZGF0ZWQgPSBtT3V0QnVmZmVyLT5jaGVja0ZyYW1lQ291bnRDaGFuZ2UoKTsKKyAgICByZXR1cm4gaW5CdWZmZXJGcmFtZUNvdW50VXBkYXRlZCB8fCBvdXRCdWZmZXJGcmFtZUNvdW50VXBkYXRlZDsKK30KKworc3RhdHVzX3QgRWZmZWN0SGFsSGlkbDo6cHJvY2Vzc0ltcGwodWludDMyX3QgbXFGbGFnKSB7CisgICAgaWYgKG1FZmZlY3QgPT0gMCB8fCBtSW5CdWZmZXIgPT0gMCB8fCBtT3V0QnVmZmVyID09IDApIHJldHVybiBOT19JTklUOworICAgIHN0YXR1c190IHN0YXR1czsKKyAgICBpZiAoIW1TdGF0dXNNUSAmJiAoc3RhdHVzID0gcHJlcGFyZUZvclByb2Nlc3NpbmcoKSkgIT0gT0spIHsKKyAgICAgICAgcmV0dXJuIHN0YXR1czsKKyAgICB9CisgICAgaWYgKG5lZWRUb1Jlc2V0QnVmZmVycygpICYmIChzdGF0dXMgPSBzZXRQcm9jZXNzQnVmZmVycygpKSAhPSBPSykgeworICAgICAgICByZXR1cm4gc3RhdHVzOworICAgIH0KKyAgICAvLyBUaGUgZGF0YSBpcyBhbHJlYWR5IGluIHRoZSBidWZmZXJzLCBqdXN0IG5lZWQgdG8gZmx1c2ggaXQgYW5kIHdha2UgdXAgdGhlIHNlcnZlciBzaWRlLgorICAgIHN0ZDo6YXRvbWljX3RocmVhZF9mZW5jZShzdGQ6Om1lbW9yeV9vcmRlcl9yZWxlYXNlKTsKKyAgICBtRWZHcm91cC0+d2FrZShtcUZsYWcpOworICAgIHVpbnQzMl90IGVmU3RhdGUgPSAwOworcmV0cnk6CisgICAgc3RhdHVzX3QgcmV0ID0gbUVmR3JvdXAtPndhaXQoCisgICAgICAgICAgICBzdGF0aWNfY2FzdDx1aW50MzJfdD4oTWVzc2FnZVF1ZXVlRmxhZ0JpdHM6OkRPTkVfUFJPQ0VTU0lORyksICZlZlN0YXRlKTsKKyAgICBpZiAoZWZTdGF0ZSAmIHN0YXRpY19jYXN0PHVpbnQzMl90PihNZXNzYWdlUXVldWVGbGFnQml0czo6RE9ORV9QUk9DRVNTSU5HKSkgeworICAgICAgICBSZXN1bHQgcmV0dmFsID0gUmVzdWx0OjpOT1RfSU5JVElBTElaRUQ7CisgICAgICAgIG1TdGF0dXNNUS0+cmVhZCgmcmV0dmFsKTsKKyAgICAgICAgaWYgKHJldHZhbCA9PSBSZXN1bHQ6Ok9LIHx8IHJldHZhbCA9PSBSZXN1bHQ6OklOVkFMSURfU1RBVEUpIHsKKyAgICAgICAgICAgIC8vIFN5bmMgYmFjayB0aGUgY2hhbmdlZCBjb250ZW50cyBvZiB0aGUgYnVmZmVyLgorICAgICAgICAgICAgc3RkOjphdG9taWNfdGhyZWFkX2ZlbmNlKHN0ZDo6bWVtb3J5X29yZGVyX2FjcXVpcmUpOworICAgICAgICB9CisgICAgICAgIHJldHVybiBhbmFseXplUmVzdWx0KHJldHZhbCk7CisgICAgfQorICAgIGlmIChyZXQgPT0gLUVBR0FJTiB8fCByZXQgPT0gLUVJTlRSKSB7CisgICAgICAgIC8vIFNwdXJpb3VzIHdha2V1cC4gVGhpcyBub3JtYWxseSByZXRyaWVzIG5vIG1vcmUgdGhhbiBvbmNlLgorICAgICAgICBnb3RvIHJldHJ5OworICAgIH0KKyAgICByZXR1cm4gcmV0OworfQorCitzdGF0dXNfdCBFZmZlY3RIYWxIaWRsOjpzZXRQcm9jZXNzQnVmZmVycygpIHsKKyAgICBSZXR1cm48UmVzdWx0PiByZXQgPSBtRWZmZWN0LT5zZXRQcm9jZXNzQnVmZmVycygKKyAgICAgICAgICAgIHN0YXRpY19jYXN0PEVmZmVjdEJ1ZmZlckhhbEhpZGwqPihtSW5CdWZmZXIuZ2V0KCkpLT5oaWRsQnVmZmVyKCksCisgICAgICAgICAgICBzdGF0aWNfY2FzdDxFZmZlY3RCdWZmZXJIYWxIaWRsKj4obU91dEJ1ZmZlci5nZXQoKSktPmhpZGxCdWZmZXIoKSk7CisgICAgaWYgKHJldC5pc09rKCkgJiYgcmV0ID09IFJlc3VsdDo6T0spIHsKKyAgICAgICAgbUJ1ZmZlcnNDaGFuZ2VkID0gZmFsc2U7CisgICAgICAgIHJldHVybiBPSzsKKyAgICB9CisgICAgcmV0dXJuIHJldC5pc09rKCkgPyBhbmFseXplUmVzdWx0KHJldCkgOiBGQUlMRURfVFJBTlNBQ1RJT047Cit9CisKK3N0YXR1c190IEVmZmVjdEhhbEhpZGw6OmNvbW1hbmQodWludDMyX3QgY21kQ29kZSwgdWludDMyX3QgY21kU2l6ZSwgdm9pZCAqcENtZERhdGEsCisgICAgICAgIHVpbnQzMl90ICpyZXBseVNpemUsIHZvaWQgKnBSZXBseURhdGEpIHsKKyAgICBpZiAobUVmZmVjdCA9PSAwKSByZXR1cm4gTk9fSU5JVDsKKworICAgIC8vIFNwZWNpYWwgY2FzZXMuCisgICAgaWYgKGNtZENvZGUgPT0gRUZGRUNUX0NNRF9TRVRfQ09ORklHIHx8IGNtZENvZGUgPT0gRUZGRUNUX0NNRF9TRVRfQ09ORklHX1JFVkVSU0UpIHsKKyAgICAgICAgcmV0dXJuIHNldENvbmZpZ0ltcGwoY21kQ29kZSwgY21kU2l6ZSwgcENtZERhdGEsIHJlcGx5U2l6ZSwgcFJlcGx5RGF0YSk7CisgICAgfSBlbHNlIGlmIChjbWRDb2RlID09IEVGRkVDVF9DTURfR0VUX0NPTkZJRyB8fCBjbWRDb2RlID09IEVGRkVDVF9DTURfR0VUX0NPTkZJR19SRVZFUlNFKSB7CisgICAgICAgIHJldHVybiBnZXRDb25maWdJbXBsKGNtZENvZGUsIHJlcGx5U2l6ZSwgcFJlcGx5RGF0YSk7CisgICAgfQorCisgICAgLy8gQ29tbW9uIGNhc2UuCisgICAgaGlkbF92ZWM8dWludDhfdD4gaGlkbERhdGE7CisgICAgaWYgKHBDbWREYXRhICE9IG51bGxwdHIgJiYgY21kU2l6ZSA+IDApIHsKKyAgICAgICAgaGlkbERhdGEuc2V0VG9FeHRlcm5hbChyZWludGVycHJldF9jYXN0PHVpbnQ4X3QqPihwQ21kRGF0YSksIGNtZFNpemUpOworICAgIH0KKyAgICBzdGF0dXNfdCBzdGF0dXM7CisgICAgdWludDMyX3QgcmVwbHlTaXplU3R1YiA9IDA7CisgICAgaWYgKHJlcGx5U2l6ZSA9PSBudWxscHRyIHx8IHBSZXBseURhdGEgPT0gbnVsbHB0cikgcmVwbHlTaXplID0gJnJlcGx5U2l6ZVN0dWI7CisgICAgUmV0dXJuPHZvaWQ+IHJldCA9IG1FZmZlY3QtPmNvbW1hbmQoY21kQ29kZSwgaGlkbERhdGEsICpyZXBseVNpemUsCisgICAgICAgICAgICBbJl0oaW50MzJfdCBzLCBjb25zdCBoaWRsX3ZlYzx1aW50OF90PiYgcmVzdWx0KSB7CisgICAgICAgICAgICAgICAgc3RhdHVzID0gczsKKyAgICAgICAgICAgICAgICBpZiAoc3RhdHVzID09IDApIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKCpyZXBseVNpemUgPiByZXN1bHQuc2l6ZSgpKSAqcmVwbHlTaXplID0gcmVzdWx0LnNpemUoKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKHBSZXBseURhdGEgIT0gbnVsbHB0ciAmJiAqcmVwbHlTaXplID4gMCkgeworICAgICAgICAgICAgICAgICAgICAgICAgbWVtY3B5KHBSZXBseURhdGEsICZyZXN1bHRbMF0sICpyZXBseVNpemUpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfSk7CisgICAgcmV0dXJuIHJldC5pc09rKCkgPyBzdGF0dXMgOiBGQUlMRURfVFJBTlNBQ1RJT047Cit9CisKK3N0YXR1c190IEVmZmVjdEhhbEhpZGw6OmdldERlc2NyaXB0b3IoZWZmZWN0X2Rlc2NyaXB0b3JfdCAqcERlc2NyaXB0b3IpIHsKKyAgICBpZiAobUVmZmVjdCA9PSAwKSByZXR1cm4gTk9fSU5JVDsKKyAgICBSZXN1bHQgcmV0dmFsID0gUmVzdWx0OjpOT1RfSU5JVElBTElaRUQ7CisgICAgUmV0dXJuPHZvaWQ+IHJldCA9IG1FZmZlY3QtPmdldERlc2NyaXB0b3IoCisgICAgICAgICAgICBbJl0oUmVzdWx0IHIsIGNvbnN0IEVmZmVjdERlc2NyaXB0b3ImIHJlc3VsdCkgeworICAgICAgICAgICAgICAgIHJldHZhbCA9IHI7CisgICAgICAgICAgICAgICAgaWYgKHJldHZhbCA9PSBSZXN1bHQ6Ok9LKSB7CisgICAgICAgICAgICAgICAgICAgIGVmZmVjdERlc2NyaXB0b3JUb0hhbChyZXN1bHQsIHBEZXNjcmlwdG9yKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9KTsKKyAgICByZXR1cm4gcmV0LmlzT2soKSA/IGFuYWx5emVSZXN1bHQocmV0dmFsKSA6IEZBSUxFRF9UUkFOU0FDVElPTjsKK30KKworc3RhdHVzX3QgRWZmZWN0SGFsSGlkbDo6Y2xvc2UoKSB7CisgICAgaWYgKG1FZmZlY3QgPT0gMCkgcmV0dXJuIE5PX0lOSVQ7CisgICAgUmV0dXJuPFJlc3VsdD4gcmV0ID0gbUVmZmVjdC0+Y2xvc2UoKTsKKyAgICByZXR1cm4gcmV0LmlzT2soKSA/IGFuYWx5emVSZXN1bHQocmV0KSA6IEZBSUxFRF9UUkFOU0FDVElPTjsKK30KKworc3RhdHVzX3QgRWZmZWN0SGFsSGlkbDo6Z2V0Q29uZmlnSW1wbCgKKyAgICAgICAgdWludDMyX3QgY21kQ29kZSwgdWludDMyX3QgKnJlcGx5U2l6ZSwgdm9pZCAqcFJlcGx5RGF0YSkgeworICAgIGlmIChyZXBseVNpemUgPT0gTlVMTCB8fCAqcmVwbHlTaXplICE9IHNpemVvZihlZmZlY3RfY29uZmlnX3QpIHx8IHBSZXBseURhdGEgPT0gTlVMTCkgeworICAgICAgICByZXR1cm4gQkFEX1ZBTFVFOworICAgIH0KKyAgICBzdGF0dXNfdCByZXN1bHQgPSBGQUlMRURfVFJBTlNBQ1RJT047CisgICAgUmV0dXJuPHZvaWQ+IHJldDsKKyAgICBpZiAoY21kQ29kZSA9PSBFRkZFQ1RfQ01EX0dFVF9DT05GSUcpIHsKKyAgICAgICAgcmV0ID0gbUVmZmVjdC0+Z2V0Q29uZmlnKFsmXSAoUmVzdWx0IHIsIGNvbnN0IEVmZmVjdENvbmZpZyAmaGlkbENvbmZpZykgeworICAgICAgICAgICAgcmVzdWx0ID0gYW5hbHl6ZVJlc3VsdChyKTsKKyAgICAgICAgICAgIGlmIChyID09IFJlc3VsdDo6T0spIHsKKyAgICAgICAgICAgICAgICBlZmZlY3RDb25maWdUb0hhbChoaWRsQ29uZmlnLCBzdGF0aWNfY2FzdDxlZmZlY3RfY29uZmlnX3QqPihwUmVwbHlEYXRhKSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0pOworICAgIH0gZWxzZSB7CisgICAgICAgIHJldCA9IG1FZmZlY3QtPmdldENvbmZpZ1JldmVyc2UoWyZdIChSZXN1bHQgciwgY29uc3QgRWZmZWN0Q29uZmlnICZoaWRsQ29uZmlnKSB7CisgICAgICAgICAgICByZXN1bHQgPSBhbmFseXplUmVzdWx0KHIpOworICAgICAgICAgICAgaWYgKHIgPT0gUmVzdWx0OjpPSykgeworICAgICAgICAgICAgICAgIGVmZmVjdENvbmZpZ1RvSGFsKGhpZGxDb25maWcsIHN0YXRpY19jYXN0PGVmZmVjdF9jb25maWdfdCo+KHBSZXBseURhdGEpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSk7CisgICAgfQorICAgIGlmICghcmV0LmlzT2soKSkgeworICAgICAgICByZXN1bHQgPSBGQUlMRURfVFJBTlNBQ1RJT047CisgICAgfQorICAgIHJldHVybiByZXN1bHQ7Cit9CisKK3N0YXR1c190IEVmZmVjdEhhbEhpZGw6OnNldENvbmZpZ0ltcGwoCisgICAgICAgIHVpbnQzMl90IGNtZENvZGUsIHVpbnQzMl90IGNtZFNpemUsIHZvaWQgKnBDbWREYXRhLCB1aW50MzJfdCAqcmVwbHlTaXplLCB2b2lkICpwUmVwbHlEYXRhKSB7CisgICAgaWYgKHBDbWREYXRhID09IE5VTEwgfHwgY21kU2l6ZSAhPSBzaXplb2YoZWZmZWN0X2NvbmZpZ190KSB8fAorICAgICAgICAgICAgcmVwbHlTaXplID09IE5VTEwgfHwgKnJlcGx5U2l6ZSAhPSBzaXplb2YoaW50MzJfdCkgfHwgcFJlcGx5RGF0YSA9PSBOVUxMKSB7CisgICAgICAgIHJldHVybiBCQURfVkFMVUU7CisgICAgfQorICAgIGNvbnN0IGVmZmVjdF9jb25maWdfdCAqaGFsQ29uZmlnID0gc3RhdGljX2Nhc3Q8ZWZmZWN0X2NvbmZpZ190Kj4ocENtZERhdGEpOworICAgIGlmIChoYWxDb25maWctPmlucHV0Q2ZnLmJ1ZmZlclByb3ZpZGVyLmdldEJ1ZmZlciAhPSBOVUxMIHx8CisgICAgICAgICAgICBoYWxDb25maWctPmlucHV0Q2ZnLmJ1ZmZlclByb3ZpZGVyLnJlbGVhc2VCdWZmZXIgIT0gTlVMTCB8fAorICAgICAgICAgICAgaGFsQ29uZmlnLT5vdXRwdXRDZmcuYnVmZmVyUHJvdmlkZXIuZ2V0QnVmZmVyICE9IE5VTEwgfHwKKyAgICAgICAgICAgIGhhbENvbmZpZy0+b3V0cHV0Q2ZnLmJ1ZmZlclByb3ZpZGVyLnJlbGVhc2VCdWZmZXIgIT0gTlVMTCkgeworICAgICAgICBBTE9HRSgiQnVmZmVyIHByb3ZpZGVyIGNhbGxiYWNrcyBhcmUgbm90IHN1cHBvcnRlZCIpOworICAgIH0KKyAgICBFZmZlY3RDb25maWcgaGlkbENvbmZpZzsKKyAgICBlZmZlY3RDb25maWdGcm9tSGFsKCpoYWxDb25maWcsICZoaWRsQ29uZmlnKTsKKyAgICBSZXR1cm48UmVzdWx0PiByZXQgPSBjbWRDb2RlID09IEVGRkVDVF9DTURfU0VUX0NPTkZJRyA/CisgICAgICAgICAgICBtRWZmZWN0LT5zZXRDb25maWcoaGlkbENvbmZpZywgbnVsbHB0ciwgbnVsbHB0cikgOgorICAgICAgICAgICAgbUVmZmVjdC0+c2V0Q29uZmlnUmV2ZXJzZShoaWRsQ29uZmlnLCBudWxscHRyLCBudWxscHRyKTsKKyAgICBzdGF0dXNfdCByZXN1bHQgPSBGQUlMRURfVFJBTlNBQ1RJT047CisgICAgaWYgKHJldC5pc09rKCkpIHsKKyAgICAgICAgcmVzdWx0ID0gYW5hbHl6ZVJlc3VsdChyZXQpOworICAgICAgICAqc3RhdGljX2Nhc3Q8aW50MzJfdCo+KHBSZXBseURhdGEpID0gcmVzdWx0OworICAgIH0KKyAgICByZXR1cm4gcmVzdWx0OworfQorCit9IC8vIG5hbWVzcGFjZSBDUFBfVkVSU0lPTgorfSAvLyBuYW1lc3BhY2UgYW5kcm9pZApkaWZmIC0tZ2l0IGEvbWVkaWEvbGliYXVkaW9oYWwvaW1wbC9FZmZlY3RIYWxIaWRsLmggYi9tZWRpYS9saWJhdWRpb2hhbC9pbXBsL0VmZmVjdEhhbEhpZGwuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNGY0MGQzCi0tLSAvZGV2L251bGwKKysrIGIvbWVkaWEvbGliYXVkaW9oYWwvaW1wbC9FZmZlY3RIYWxIaWRsLmgKQEAgLTAsMCArMSwxMTEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworCisjaWZuZGVmIEFORFJPSURfSEFSRFdBUkVfRUZGRUNUX0hBTF9ISURMX0gKKyNkZWZpbmUgQU5EUk9JRF9IQVJEV0FSRV9FRkZFQ1RfSEFMX0hJRExfSAorCisjaW5jbHVkZSA8YW5kcm9pZC9oYXJkd2FyZS9hdWRpby9lZmZlY3QvMi4wL0lFZmZlY3QuaD4KKyNpbmNsdWRlIDxhbmRyb2lkL2hhcmR3YXJlL2F1ZGlvL2VmZmVjdC80LjAvSUVmZmVjdC5oPgorI2luY2x1ZGUgPG1lZGlhL2F1ZGlvaGFsL0VmZmVjdEhhbEludGVyZmFjZS5oPgorI2luY2x1ZGUgPGZtcS9FdmVudEZsYWcuaD4KKyNpbmNsdWRlIDxmbXEvTWVzc2FnZVF1ZXVlLmg+CisjaW5jbHVkZSA8c3lzdGVtL2F1ZGlvX2VmZmVjdC5oPgorCit1c2luZyA6OmFuZHJvaWQ6OmhhcmR3YXJlOjphdWRpbzo6ZWZmZWN0OjpDUFBfVkVSU0lPTjo6RWZmZWN0QnVmZmVyQ29uZmlnOwordXNpbmcgOjphbmRyb2lkOjpoYXJkd2FyZTo6YXVkaW86OmVmZmVjdDo6Q1BQX1ZFUlNJT046OkVmZmVjdENvbmZpZzsKK3VzaW5nIDo6YW5kcm9pZDo6aGFyZHdhcmU6OmF1ZGlvOjplZmZlY3Q6OkNQUF9WRVJTSU9OOjpFZmZlY3REZXNjcmlwdG9yOwordXNpbmcgOjphbmRyb2lkOjpoYXJkd2FyZTo6YXVkaW86OmVmZmVjdDo6Q1BQX1ZFUlNJT046OklFZmZlY3Q7Cit1c2luZyBFZmZlY3RSZXN1bHQgPSA6OmFuZHJvaWQ6OmhhcmR3YXJlOjphdWRpbzo6ZWZmZWN0OjpDUFBfVkVSU0lPTjo6UmVzdWx0OwordXNpbmcgOjphbmRyb2lkOjpoYXJkd2FyZTo6RXZlbnRGbGFnOwordXNpbmcgOjphbmRyb2lkOjpoYXJkd2FyZTo6TWVzc2FnZVF1ZXVlOworCituYW1lc3BhY2UgYW5kcm9pZCB7CituYW1lc3BhY2UgQ1BQX1ZFUlNJT04geworCitjbGFzcyBFZmZlY3RIYWxIaWRsIDogcHVibGljIEVmZmVjdEhhbEludGVyZmFjZQoreworICBwdWJsaWM6CisgICAgLy8gU2V0IHRoZSBpbnB1dCBidWZmZXIuCisgICAgdmlydHVhbCBzdGF0dXNfdCBzZXRJbkJ1ZmZlcihjb25zdCBzcDxFZmZlY3RCdWZmZXJIYWxJbnRlcmZhY2U+JiBidWZmZXIpOworCisgICAgLy8gU2V0IHRoZSBvdXRwdXQgYnVmZmVyLgorICAgIHZpcnR1YWwgc3RhdHVzX3Qgc2V0T3V0QnVmZmVyKGNvbnN0IHNwPEVmZmVjdEJ1ZmZlckhhbEludGVyZmFjZT4mIGJ1ZmZlcik7CisKKyAgICAvLyBFZmZlY3QgcHJvY2VzcyBmdW5jdGlvbi4KKyAgICB2aXJ0dWFsIHN0YXR1c190IHByb2Nlc3MoKTsKKworICAgIC8vIFByb2Nlc3MgcmV2ZXJzZSBzdHJlYW0gZnVuY3Rpb24uIFRoaXMgZnVuY3Rpb24gaXMgdXNlZCB0byBwYXNzCisgICAgLy8gYSByZWZlcmVuY2Ugc3RyZWFtIHRvIHRoZSBlZmZlY3QgZW5naW5lLgorICAgIHZpcnR1YWwgc3RhdHVzX3QgcHJvY2Vzc1JldmVyc2UoKTsKKworICAgIC8vIFNlbmQgYSBjb21tYW5kIGFuZCByZWNlaXZlIGEgcmVzcG9uc2UgdG8vZnJvbSBlZmZlY3QgZW5naW5lLgorICAgIHZpcnR1YWwgc3RhdHVzX3QgY29tbWFuZCh1aW50MzJfdCBjbWRDb2RlLCB1aW50MzJfdCBjbWRTaXplLCB2b2lkICpwQ21kRGF0YSwKKyAgICAgICAgICAgIHVpbnQzMl90ICpyZXBseVNpemUsIHZvaWQgKnBSZXBseURhdGEpOworCisgICAgLy8gUmV0dXJucyB0aGUgZWZmZWN0IGRlc2NyaXB0b3IuCisgICAgdmlydHVhbCBzdGF0dXNfdCBnZXREZXNjcmlwdG9yKGVmZmVjdF9kZXNjcmlwdG9yX3QgKnBEZXNjcmlwdG9yKTsKKworICAgIC8vIEZyZWUgcmVzb3VyY2VzIG9uIHRoZSByZW1vdGUgc2lkZS4KKyAgICB2aXJ0dWFsIHN0YXR1c190IGNsb3NlKCk7CisKKyAgICAvLyBXaGV0aGVyIGl0J3MgYSBsb2NhbCBpbXBsZW1lbnRhdGlvbi4KKyAgICB2aXJ0dWFsIGJvb2wgaXNMb2NhbCgpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CisKKyAgICB1aW50NjRfdCBlZmZlY3RJZCgpIGNvbnN0IHsgcmV0dXJuIG1FZmZlY3RJZDsgfQorCisgICAgc3RhdGljIHZvaWQgZWZmZWN0RGVzY3JpcHRvclRvSGFsKAorICAgICAgICAgICAgY29uc3QgRWZmZWN0RGVzY3JpcHRvciYgZGVzY3JpcHRvciwgZWZmZWN0X2Rlc2NyaXB0b3JfdCogaGFsRGVzY3JpcHRvcik7CisKKyAgcHJpdmF0ZToKKyAgICBmcmllbmQgY2xhc3MgRWZmZWN0c0ZhY3RvcnlIYWxIaWRsOworICAgIHR5cGVkZWYgTWVzc2FnZVF1ZXVlPEVmZmVjdFJlc3VsdCwgaGFyZHdhcmU6OmtTeW5jaHJvbml6ZWRSZWFkV3JpdGU+IFN0YXR1c01ROworCisgICAgc3A8SUVmZmVjdD4gbUVmZmVjdDsKKyAgICBjb25zdCB1aW50NjRfdCBtRWZmZWN0SWQ7CisgICAgc3A8RWZmZWN0QnVmZmVySGFsSW50ZXJmYWNlPiBtSW5CdWZmZXI7CisgICAgc3A8RWZmZWN0QnVmZmVySGFsSW50ZXJmYWNlPiBtT3V0QnVmZmVyOworICAgIGJvb2wgbUJ1ZmZlcnNDaGFuZ2VkOworICAgIHN0ZDo6dW5pcXVlX3B0cjxTdGF0dXNNUT4gbVN0YXR1c01ROworICAgIEV2ZW50RmxhZyogbUVmR3JvdXA7CisKKyAgICBzdGF0aWMgc3RhdHVzX3QgYW5hbHl6ZVJlc3VsdChjb25zdCBFZmZlY3RSZXN1bHQmIHJlc3VsdCk7CisgICAgc3RhdGljIHZvaWQgZWZmZWN0QnVmZmVyQ29uZmlnRnJvbUhhbCgKKyAgICAgICAgICAgIGNvbnN0IGJ1ZmZlcl9jb25maWdfdCYgaGFsQ29uZmlnLCBFZmZlY3RCdWZmZXJDb25maWcqIGNvbmZpZyk7CisgICAgc3RhdGljIHZvaWQgZWZmZWN0QnVmZmVyQ29uZmlnVG9IYWwoCisgICAgICAgICAgICBjb25zdCBFZmZlY3RCdWZmZXJDb25maWcmIGNvbmZpZywgYnVmZmVyX2NvbmZpZ190KiBoYWxDb25maWcpOworICAgIHN0YXRpYyB2b2lkIGVmZmVjdENvbmZpZ0Zyb21IYWwoY29uc3QgZWZmZWN0X2NvbmZpZ190JiBoYWxDb25maWcsIEVmZmVjdENvbmZpZyogY29uZmlnKTsKKyAgICBzdGF0aWMgdm9pZCBlZmZlY3RDb25maWdUb0hhbChjb25zdCBFZmZlY3RDb25maWcmIGNvbmZpZywgZWZmZWN0X2NvbmZpZ190KiBoYWxDb25maWcpOworCisgICAgLy8gQ2FuIG5vdCBiZSBjb25zdHJ1Y3RlZCBkaXJlY3RseSBieSBjbGllbnRzLgorICAgIEVmZmVjdEhhbEhpZGwoY29uc3Qgc3A8SUVmZmVjdD4mIGVmZmVjdCwgdWludDY0X3QgZWZmZWN0SWQpOworCisgICAgLy8gVGhlIGRlc3RydWN0b3IgYXV0b21hdGljYWxseSByZWxlYXNlcyB0aGUgZWZmZWN0LgorICAgIHZpcnR1YWwgfkVmZmVjdEhhbEhpZGwoKTsKKworICAgIHN0YXR1c190IGdldENvbmZpZ0ltcGwodWludDMyX3QgY21kQ29kZSwgdWludDMyX3QgKnJlcGx5U2l6ZSwgdm9pZCAqcFJlcGx5RGF0YSk7CisgICAgc3RhdHVzX3QgcHJlcGFyZUZvclByb2Nlc3NpbmcoKTsKKyAgICBib29sIG5lZWRUb1Jlc2V0QnVmZmVycygpOworICAgIHN0YXR1c190IHByb2Nlc3NJbXBsKHVpbnQzMl90IG1xRmxhZyk7CisgICAgc3RhdHVzX3Qgc2V0Q29uZmlnSW1wbCgKKyAgICAgICAgICAgIHVpbnQzMl90IGNtZENvZGUsIHVpbnQzMl90IGNtZFNpemUsIHZvaWQgKnBDbWREYXRhLAorICAgICAgICAgICAgdWludDMyX3QgKnJlcGx5U2l6ZSwgdm9pZCAqcFJlcGx5RGF0YSk7CisgICAgc3RhdHVzX3Qgc2V0UHJvY2Vzc0J1ZmZlcnMoKTsKK307CisKK30gLy8gbmFtZXNwYWNlIENQUF9WRVJTSU9OCit9IC8vIG5hbWVzcGFjZSBhbmRyb2lkCisKKyNlbmRpZiAvLyBBTkRST0lEX0hBUkRXQVJFX0VGRkVDVF9IQUxfSElETF9ICmRpZmYgLS1naXQgYS9tZWRpYS9saWJhdWRpb2hhbC9pbXBsL0VmZmVjdHNGYWN0b3J5SGFsSGlkbC5jcHAgYi9tZWRpYS9saWJhdWRpb2hhbC9pbXBsL0VmZmVjdHNGYWN0b3J5SGFsSGlkbC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjg4MDQzMwotLS0gL2Rldi9udWxsCisrKyBiL21lZGlhL2xpYmF1ZGlvaGFsL2ltcGwvRWZmZWN0c0ZhY3RvcnlIYWxIaWRsLmNwcApAQCAtMCwwICsxLDE0OSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNiBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCisKKyNkZWZpbmUgTE9HX1RBRyAiRWZmZWN0c0ZhY3RvcnlIYWxIaWRsIgorLy8jZGVmaW5lIExPR19OREVCVUcgMAorCisjaW5jbHVkZSA8Y3V0aWxzL25hdGl2ZV9oYW5kbGUuaD4KKworI2luY2x1ZGUgIkVmZmVjdHNGYWN0b3J5SGFsSGlkbC5oIgorI2luY2x1ZGUgIkNvbnZlcnNpb25IZWxwZXJIaWRsLmgiCisjaW5jbHVkZSAiRWZmZWN0QnVmZmVySGFsSGlkbC5oIgorI2luY2x1ZGUgIkVmZmVjdEhhbEhpZGwuaCIKKyNpbmNsdWRlICJIaWRsVXRpbHMuaCIKKwordXNpbmcgOjphbmRyb2lkOjpoYXJkd2FyZTo6YXVkaW86OmNvbW1vbjo6Q1BQX1ZFUlNJT046OkhpZGxVdGlsczsKK3VzaW5nIDo6YW5kcm9pZDo6aGFyZHdhcmU6OmF1ZGlvOjpjb21tb246OkNQUF9WRVJTSU9OOjpVdWlkOwordXNpbmcgOjphbmRyb2lkOjpoYXJkd2FyZTo6YXVkaW86OmVmZmVjdDo6Q1BQX1ZFUlNJT046OklFZmZlY3Q7Cit1c2luZyA6OmFuZHJvaWQ6OmhhcmR3YXJlOjphdWRpbzo6ZWZmZWN0OjpDUFBfVkVSU0lPTjo6UmVzdWx0OwordXNpbmcgOjphbmRyb2lkOjpoYXJkd2FyZTo6UmV0dXJuOworCituYW1lc3BhY2UgYW5kcm9pZCB7CituYW1lc3BhY2UgQ1BQX1ZFUlNJT04geworCitFZmZlY3RzRmFjdG9yeUhhbEhpZGw6OkVmZmVjdHNGYWN0b3J5SGFsSGlkbCgpIDogQ29udmVyc2lvbkhlbHBlckhpZGwoIkVmZmVjdHNGYWN0b3J5IikgeworICAgIG1FZmZlY3RzRmFjdG9yeSA9IElFZmZlY3RzRmFjdG9yeTo6Z2V0U2VydmljZSgpOworICAgIGlmIChtRWZmZWN0c0ZhY3RvcnkgPT0gMCkgeworICAgICAgICBBTE9HRSgiRmFpbGVkIHRvIG9idGFpbiBJRWZmZWN0c0ZhY3Rvcnkgc2VydmljZSwgdGVybWluYXRpbmcgcHJvY2Vzcy4iKTsKKyAgICAgICAgZXhpdCgxKTsKKyAgICB9Cit9CisKK3N0YXR1c190IEVmZmVjdHNGYWN0b3J5SGFsSGlkbDo6cXVlcnlBbGxEZXNjcmlwdG9ycygpIHsKKyAgICBpZiAobUVmZmVjdHNGYWN0b3J5ID09IDApIHJldHVybiBOT19JTklUOworICAgIFJlc3VsdCByZXR2YWwgPSBSZXN1bHQ6Ok5PVF9JTklUSUFMSVpFRDsKKyAgICBSZXR1cm48dm9pZD4gcmV0ID0gbUVmZmVjdHNGYWN0b3J5LT5nZXRBbGxEZXNjcmlwdG9ycygKKyAgICAgICAgICAgIFsmXShSZXN1bHQgciwgY29uc3QgaGlkbF92ZWM8RWZmZWN0RGVzY3JpcHRvcj4mIHJlc3VsdCkgeworICAgICAgICAgICAgICAgIHJldHZhbCA9IHI7CisgICAgICAgICAgICAgICAgaWYgKHJldHZhbCA9PSBSZXN1bHQ6Ok9LKSB7CisgICAgICAgICAgICAgICAgICAgIG1MYXN0RGVzY3JpcHRvcnMgPSByZXN1bHQ7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfSk7CisgICAgaWYgKHJldC5pc09rKCkpIHsKKyAgICAgICAgcmV0dXJuIHJldHZhbCA9PSBSZXN1bHQ6Ok9LID8gT0sgOiBOT19JTklUOworICAgIH0KKyAgICBtTGFzdERlc2NyaXB0b3JzLnJlc2l6ZSgwKTsKKyAgICByZXR1cm4gcHJvY2Vzc1JldHVybihfX0ZVTkNUSU9OX18sIHJldCk7Cit9CisKK3N0YXR1c190IEVmZmVjdHNGYWN0b3J5SGFsSGlkbDo6cXVlcnlOdW1iZXJFZmZlY3RzKHVpbnQzMl90ICpwTnVtRWZmZWN0cykgeworICAgIHN0YXR1c190IHF1ZXJ5UmVzdWx0ID0gcXVlcnlBbGxEZXNjcmlwdG9ycygpOworICAgIGlmIChxdWVyeVJlc3VsdCA9PSBPSykgeworICAgICAgICAqcE51bUVmZmVjdHMgPSBtTGFzdERlc2NyaXB0b3JzLnNpemUoKTsKKyAgICB9CisgICAgcmV0dXJuIHF1ZXJ5UmVzdWx0OworfQorCitzdGF0dXNfdCBFZmZlY3RzRmFjdG9yeUhhbEhpZGw6OmdldERlc2NyaXB0b3IoCisgICAgICAgIHVpbnQzMl90IGluZGV4LCBlZmZlY3RfZGVzY3JpcHRvcl90ICpwRGVzY3JpcHRvcikgeworICAgIC8vIFRPRE86IFdlIG5lZWQgc29tZWhvdyB0byB0cmFjayB0aGUgY2hhbmdlcyBvbiB0aGUgc2VydmVyIHNpZGUKKyAgICAvLyBvciBmaWd1cmUgb3V0IGhvdyB0byBjb252ZXJ0IGV2ZXJ5Ym9keSB0byBxdWVyeSBhbGwgdGhlIGRlc2NyaXB0b3JzIGF0IG9uY2UuCisgICAgLy8gVE9ETzogY2hlY2sgZm9yIG51bGxwdHIKKyAgICBpZiAobUxhc3REZXNjcmlwdG9ycy5zaXplKCkgPT0gMCkgeworICAgICAgICBzdGF0dXNfdCBxdWVyeVJlc3VsdCA9IHF1ZXJ5QWxsRGVzY3JpcHRvcnMoKTsKKyAgICAgICAgaWYgKHF1ZXJ5UmVzdWx0ICE9IE9LKSByZXR1cm4gcXVlcnlSZXN1bHQ7CisgICAgfQorICAgIGlmIChpbmRleCA+PSBtTGFzdERlc2NyaXB0b3JzLnNpemUoKSkgcmV0dXJuIE5BTUVfTk9UX0ZPVU5EOworICAgIEVmZmVjdEhhbEhpZGw6OmVmZmVjdERlc2NyaXB0b3JUb0hhbChtTGFzdERlc2NyaXB0b3JzW2luZGV4XSwgcERlc2NyaXB0b3IpOworICAgIHJldHVybiBPSzsKK30KKworc3RhdHVzX3QgRWZmZWN0c0ZhY3RvcnlIYWxIaWRsOjpnZXREZXNjcmlwdG9yKAorICAgICAgICBjb25zdCBlZmZlY3RfdXVpZF90ICpwRWZmZWN0VXVpZCwgZWZmZWN0X2Rlc2NyaXB0b3JfdCAqcERlc2NyaXB0b3IpIHsKKyAgICAvLyBUT0RPOiBjaGVjayBmb3IgbnVsbHB0cgorICAgIGlmIChtRWZmZWN0c0ZhY3RvcnkgPT0gMCkgcmV0dXJuIE5PX0lOSVQ7CisgICAgVXVpZCBoaWRsVXVpZDsKKyAgICBIaWRsVXRpbHM6OnV1aWRGcm9tSGFsKCpwRWZmZWN0VXVpZCwgJmhpZGxVdWlkKTsKKyAgICBSZXN1bHQgcmV0dmFsID0gUmVzdWx0OjpOT1RfSU5JVElBTElaRUQ7CisgICAgUmV0dXJuPHZvaWQ+IHJldCA9IG1FZmZlY3RzRmFjdG9yeS0+Z2V0RGVzY3JpcHRvcihoaWRsVXVpZCwKKyAgICAgICAgICAgIFsmXShSZXN1bHQgciwgY29uc3QgRWZmZWN0RGVzY3JpcHRvciYgcmVzdWx0KSB7CisgICAgICAgICAgICAgICAgcmV0dmFsID0gcjsKKyAgICAgICAgICAgICAgICBpZiAocmV0dmFsID09IFJlc3VsdDo6T0spIHsKKyAgICAgICAgICAgICAgICAgICAgRWZmZWN0SGFsSGlkbDo6ZWZmZWN0RGVzY3JpcHRvclRvSGFsKHJlc3VsdCwgcERlc2NyaXB0b3IpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0pOworICAgIGlmIChyZXQuaXNPaygpKSB7CisgICAgICAgIGlmIChyZXR2YWwgPT0gUmVzdWx0OjpPSykgcmV0dXJuIE9LOworICAgICAgICBlbHNlIGlmIChyZXR2YWwgPT0gUmVzdWx0OjpJTlZBTElEX0FSR1VNRU5UUykgcmV0dXJuIE5BTUVfTk9UX0ZPVU5EOworICAgICAgICBlbHNlIHJldHVybiBOT19JTklUOworICAgIH0KKyAgICByZXR1cm4gcHJvY2Vzc1JldHVybihfX0ZVTkNUSU9OX18sIHJldCk7Cit9CisKK3N0YXR1c190IEVmZmVjdHNGYWN0b3J5SGFsSGlkbDo6Y3JlYXRlRWZmZWN0KAorICAgICAgICBjb25zdCBlZmZlY3RfdXVpZF90ICpwRWZmZWN0VXVpZCwgaW50MzJfdCBzZXNzaW9uSWQsIGludDMyX3QgaW9JZCwKKyAgICAgICAgc3A8RWZmZWN0SGFsSW50ZXJmYWNlPiAqZWZmZWN0KSB7CisgICAgaWYgKG1FZmZlY3RzRmFjdG9yeSA9PSAwKSByZXR1cm4gTk9fSU5JVDsKKyAgICBVdWlkIGhpZGxVdWlkOworICAgIEhpZGxVdGlsczo6dXVpZEZyb21IYWwoKnBFZmZlY3RVdWlkLCAmaGlkbFV1aWQpOworICAgIFJlc3VsdCByZXR2YWwgPSBSZXN1bHQ6Ok5PVF9JTklUSUFMSVpFRDsKKyAgICBSZXR1cm48dm9pZD4gcmV0ID0gbUVmZmVjdHNGYWN0b3J5LT5jcmVhdGVFZmZlY3QoCisgICAgICAgICAgICBoaWRsVXVpZCwgc2Vzc2lvbklkLCBpb0lkLAorICAgICAgICAgICAgWyZdKFJlc3VsdCByLCBjb25zdCBzcDxJRWZmZWN0PiYgcmVzdWx0LCB1aW50NjRfdCBlZmZlY3RJZCkgeworICAgICAgICAgICAgICAgIHJldHZhbCA9IHI7CisgICAgICAgICAgICAgICAgaWYgKHJldHZhbCA9PSBSZXN1bHQ6Ok9LKSB7CisgICAgICAgICAgICAgICAgICAgICplZmZlY3QgPSBuZXcgRWZmZWN0SGFsSGlkbChyZXN1bHQsIGVmZmVjdElkKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9KTsKKyAgICBpZiAocmV0LmlzT2soKSkgeworICAgICAgICBpZiAocmV0dmFsID09IFJlc3VsdDo6T0spIHJldHVybiBPSzsKKyAgICAgICAgZWxzZSBpZiAocmV0dmFsID09IFJlc3VsdDo6SU5WQUxJRF9BUkdVTUVOVFMpIHJldHVybiBOQU1FX05PVF9GT1VORDsKKyAgICAgICAgZWxzZSByZXR1cm4gTk9fSU5JVDsKKyAgICB9CisgICAgcmV0dXJuIHByb2Nlc3NSZXR1cm4oX19GVU5DVElPTl9fLCByZXQpOworfQorCitzdGF0dXNfdCBFZmZlY3RzRmFjdG9yeUhhbEhpZGw6OmR1bXBFZmZlY3RzKGludCBmZCkgeworICAgIGlmIChtRWZmZWN0c0ZhY3RvcnkgPT0gMCkgcmV0dXJuIE5PX0lOSVQ7CisgICAgbmF0aXZlX2hhbmRsZV90KiBoaWRsSGFuZGxlID0gbmF0aXZlX2hhbmRsZV9jcmVhdGUoMSwgMCk7CisgICAgaGlkbEhhbmRsZS0+ZGF0YVswXSA9IGZkOworICAgIFJldHVybjx2b2lkPiByZXQgPSBtRWZmZWN0c0ZhY3RvcnktPmRlYnVnKGhpZGxIYW5kbGUsIHt9IC8qIG9wdGlvbnMgKi8pOworICAgIG5hdGl2ZV9oYW5kbGVfZGVsZXRlKGhpZGxIYW5kbGUpOworICAgIHJldHVybiBwcm9jZXNzUmV0dXJuKF9fRlVOQ1RJT05fXywgcmV0KTsKK30KKworc3RhdHVzX3QgRWZmZWN0c0ZhY3RvcnlIYWxIaWRsOjphbGxvY2F0ZUJ1ZmZlcihzaXplX3Qgc2l6ZSwgc3A8RWZmZWN0QnVmZmVySGFsSW50ZXJmYWNlPiogYnVmZmVyKSB7CisgICAgcmV0dXJuIEVmZmVjdEJ1ZmZlckhhbEhpZGw6OmFsbG9jYXRlKHNpemUsIGJ1ZmZlcik7Cit9CisKK3N0YXR1c190IEVmZmVjdHNGYWN0b3J5SGFsSGlkbDo6bWlycm9yQnVmZmVyKHZvaWQqIGV4dGVybmFsLCBzaXplX3Qgc2l6ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgc3A8RWZmZWN0QnVmZmVySGFsSW50ZXJmYWNlPiogYnVmZmVyKSB7CisgICAgcmV0dXJuIEVmZmVjdEJ1ZmZlckhhbEhpZGw6Om1pcnJvcihleHRlcm5hbCwgc2l6ZSwgYnVmZmVyKTsKK30KKworCit9IC8vIG5hbWVzcGFjZSBDUFBfVkVSU0lPTgorfSAvLyBuYW1lc3BhY2UgYW5kcm9pZApkaWZmIC0tZ2l0IGEvbWVkaWEvbGliYXVkaW9oYWwvaW1wbC9FZmZlY3RzRmFjdG9yeUhhbEhpZGwuaCBiL21lZGlhL2xpYmF1ZGlvaGFsL2ltcGwvRWZmZWN0c0ZhY3RvcnlIYWxIaWRsLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzZmY2VkNwotLS0gL2Rldi9udWxsCisrKyBiL21lZGlhL2xpYmF1ZGlvaGFsL2ltcGwvRWZmZWN0c0ZhY3RvcnlIYWxIaWRsLmgKQEAgLTAsMCArMSw3NyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNiBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCisKKyNpZm5kZWYgQU5EUk9JRF9IQVJEV0FSRV9FRkZFQ1RTX0ZBQ1RPUllfSEFMX0hJRExfSAorI2RlZmluZSBBTkRST0lEX0hBUkRXQVJFX0VGRkVDVFNfRkFDVE9SWV9IQUxfSElETF9ICisKKyNpbmNsdWRlIDxhbmRyb2lkL2hhcmR3YXJlL2F1ZGlvL2VmZmVjdC8yLjAvSUVmZmVjdHNGYWN0b3J5Lmg+CisjaW5jbHVkZSA8YW5kcm9pZC9oYXJkd2FyZS9hdWRpby9lZmZlY3QvNC4wL0lFZmZlY3RzRmFjdG9yeS5oPgorI2luY2x1ZGUgPGFuZHJvaWQvaGFyZHdhcmUvYXVkaW8vZWZmZWN0LzIuMC90eXBlcy5oPgorI2luY2x1ZGUgPGFuZHJvaWQvaGFyZHdhcmUvYXVkaW8vZWZmZWN0LzQuMC90eXBlcy5oPgorI2luY2x1ZGUgPG1lZGlhL2F1ZGlvaGFsL0VmZmVjdHNGYWN0b3J5SGFsSW50ZXJmYWNlLmg+CisKKyNpbmNsdWRlICJDb252ZXJzaW9uSGVscGVySGlkbC5oIgorCituYW1lc3BhY2UgYW5kcm9pZCB7CituYW1lc3BhY2UgQ1BQX1ZFUlNJT04geworCit1c2luZyA6OmFuZHJvaWQ6OmhhcmR3YXJlOjphdWRpbzo6ZWZmZWN0OjpDUFBfVkVSU0lPTjo6RWZmZWN0RGVzY3JpcHRvcjsKK3VzaW5nIDo6YW5kcm9pZDo6aGFyZHdhcmU6OmF1ZGlvOjplZmZlY3Q6OkNQUF9WRVJTSU9OOjpJRWZmZWN0c0ZhY3Rvcnk7Cit1c2luZyA6OmFuZHJvaWQ6OmhhcmR3YXJlOjpoaWRsX3ZlYzsKKworY2xhc3MgRWZmZWN0c0ZhY3RvcnlIYWxIaWRsIDogcHVibGljIEVmZmVjdHNGYWN0b3J5SGFsSW50ZXJmYWNlLCBwdWJsaWMgQ29udmVyc2lvbkhlbHBlckhpZGwKK3sKKyAgcHVibGljOgorICAgIEVmZmVjdHNGYWN0b3J5SGFsSGlkbCgpOworCisgICAgLy8gUmV0dXJucyB0aGUgbnVtYmVyIG9mIGRpZmZlcmVudCBlZmZlY3RzIGluIGFsbCBsb2FkZWQgbGlicmFyaWVzLgorICAgIHZpcnR1YWwgc3RhdHVzX3QgcXVlcnlOdW1iZXJFZmZlY3RzKHVpbnQzMl90ICpwTnVtRWZmZWN0cyk7CisKKyAgICAvLyBSZXR1cm5zIGEgZGVzY3JpcHRvciBvZiB0aGUgbmV4dCBhdmFpbGFibGUgZWZmZWN0LgorICAgIHZpcnR1YWwgc3RhdHVzX3QgZ2V0RGVzY3JpcHRvcih1aW50MzJfdCBpbmRleCwKKyAgICAgICAgICAgIGVmZmVjdF9kZXNjcmlwdG9yX3QgKnBEZXNjcmlwdG9yKTsKKworICAgIHZpcnR1YWwgc3RhdHVzX3QgZ2V0RGVzY3JpcHRvcihjb25zdCBlZmZlY3RfdXVpZF90ICpwRWZmZWN0VXVpZCwKKyAgICAgICAgICAgIGVmZmVjdF9kZXNjcmlwdG9yX3QgKnBEZXNjcmlwdG9yKTsKKworICAgIC8vIENyZWF0ZXMgYW4gZWZmZWN0IGVuZ2luZSBvZiB0aGUgc3BlY2lmaWVkIHR5cGUuCisgICAgLy8gVG8gcmVsZWFzZSB0aGUgZWZmZWN0IGVuZ2luZSwgaXQgaXMgbmVjZXNzYXJ5IHRvIHJlbGVhc2UgcmVmZXJlbmNlcworICAgIC8vIHRvIHRoZSByZXR1cm5lZCBlZmZlY3Qgb2JqZWN0LgorICAgIHZpcnR1YWwgc3RhdHVzX3QgY3JlYXRlRWZmZWN0KGNvbnN0IGVmZmVjdF91dWlkX3QgKnBFZmZlY3RVdWlkLAorICAgICAgICAgICAgaW50MzJfdCBzZXNzaW9uSWQsIGludDMyX3QgaW9JZCwKKyAgICAgICAgICAgIHNwPEVmZmVjdEhhbEludGVyZmFjZT4gKmVmZmVjdCk7CisKKyAgICB2aXJ0dWFsIHN0YXR1c190IGR1bXBFZmZlY3RzKGludCBmZCk7CisKKyAgICBzdGF0dXNfdCBhbGxvY2F0ZUJ1ZmZlcihzaXplX3Qgc2l6ZSwgc3A8RWZmZWN0QnVmZmVySGFsSW50ZXJmYWNlPiogYnVmZmVyKSBvdmVycmlkZTsKKyAgICBzdGF0dXNfdCBtaXJyb3JCdWZmZXIodm9pZCogZXh0ZXJuYWwsIHNpemVfdCBzaXplLAorICAgICAgICAgICAgICAgICAgICAgICAgICBzcDxFZmZlY3RCdWZmZXJIYWxJbnRlcmZhY2U+KiBidWZmZXIpIG92ZXJyaWRlOworCisgIHByaXZhdGU6CisgICAgc3A8SUVmZmVjdHNGYWN0b3J5PiBtRWZmZWN0c0ZhY3Rvcnk7CisgICAgaGlkbF92ZWM8RWZmZWN0RGVzY3JpcHRvcj4gbUxhc3REZXNjcmlwdG9yczsKKworICAgIHN0YXR1c190IHF1ZXJ5QWxsRGVzY3JpcHRvcnMoKTsKK307CisKK3NwPEVmZmVjdHNGYWN0b3J5SGFsSW50ZXJmYWNlPiBjcmVhdGVFZmZlY3RzRmFjdG9yeUhhbCgpIHsKKyAgICByZXR1cm4gbmV3IEVmZmVjdHNGYWN0b3J5SGFsSGlkbCgpOworfQorCit9IC8vIG5hbWVzcGFjZSBDUFBfVkVSU0lPTgorfSAvLyBuYW1lc3BhY2UgYW5kcm9pZAorCisjZW5kaWYgLy8gQU5EUk9JRF9IQVJEV0FSRV9FRkZFQ1RTX0ZBQ1RPUllfSEFMX0hJRExfSApkaWZmIC0tZ2l0IGEvbWVkaWEvbGliYXVkaW9oYWwvaW1wbC9TdHJlYW1IYWxIaWRsLmNwcCBiL21lZGlhL2xpYmF1ZGlvaGFsL2ltcGwvU3RyZWFtSGFsSGlkbC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmZhODBlOAotLS0gL2Rldi9udWxsCisrKyBiL21lZGlhL2xpYmF1ZGlvaGFsL2ltcGwvU3RyZWFtSGFsSGlkbC5jcHAKQEAgLTAsMCArMSw4NTEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworCisjZGVmaW5lIExPR19UQUcgIlN0cmVhbUhhbEhpZGwiCisvLyNkZWZpbmUgTE9HX05ERUJVRyAwCisKKyNpbmNsdWRlIDxhbmRyb2lkL2hhcmR3YXJlL2F1ZGlvLzIuMC9JU3RyZWFtT3V0Q2FsbGJhY2suaD4KKyNpbmNsdWRlIDxhbmRyb2lkL2hhcmR3YXJlL2F1ZGlvLzQuMC9JU3RyZWFtT3V0Q2FsbGJhY2suaD4KKyNpbmNsdWRlIDxod2JpbmRlci9JUENUaHJlYWRTdGF0ZS5oPgorI2luY2x1ZGUgPG1lZGlhdXRpbHMvU2NoZWR1bGluZ1BvbGljeVNlcnZpY2UuaD4KKyNpbmNsdWRlIDx1dGlscy9Mb2cuaD4KKworI2luY2x1ZGUgIkRldmljZUhhbEhpZGwuaCIKKyNpbmNsdWRlICJFZmZlY3RIYWxIaWRsLmgiCisjaW5jbHVkZSAiU3RyZWFtSGFsSGlkbC5oIgorI2luY2x1ZGUgIlZlcnNpb25VdGlscy5oIgorCit1c2luZyA6OmFuZHJvaWQ6OmhhcmR3YXJlOjphdWRpbzo6Y29tbW9uOjpDUFBfVkVSU0lPTjo6QXVkaW9DaGFubmVsTWFzazsKK3VzaW5nIDo6YW5kcm9pZDo6aGFyZHdhcmU6OmF1ZGlvOjpjb21tb246OkNQUF9WRVJTSU9OOjpBdWRpb0Zvcm1hdDsKK3VzaW5nIDo6YW5kcm9pZDo6aGFyZHdhcmU6OmF1ZGlvOjpjb21tb246OkNQUF9WRVJTSU9OOjpUaHJlYWRJbmZvOwordXNpbmcgOjphbmRyb2lkOjpoYXJkd2FyZTo6YXVkaW86OkNQUF9WRVJTSU9OOjpBdWRpb0RyYWluOwordXNpbmcgOjphbmRyb2lkOjpoYXJkd2FyZTo6YXVkaW86OkNQUF9WRVJTSU9OOjpJU3RyZWFtT3V0Q2FsbGJhY2s7Cit1c2luZyA6OmFuZHJvaWQ6OmhhcmR3YXJlOjphdWRpbzo6Q1BQX1ZFUlNJT046Ok1lc3NhZ2VRdWV1ZUZsYWdCaXRzOwordXNpbmcgOjphbmRyb2lkOjpoYXJkd2FyZTo6YXVkaW86OkNQUF9WRVJTSU9OOjpNbWFwQnVmZmVySW5mbzsKK3VzaW5nIDo6YW5kcm9pZDo6aGFyZHdhcmU6OmF1ZGlvOjpDUFBfVkVSU0lPTjo6TW1hcFBvc2l0aW9uOwordXNpbmcgOjphbmRyb2lkOjpoYXJkd2FyZTo6YXVkaW86OkNQUF9WRVJTSU9OOjpQYXJhbWV0ZXJWYWx1ZTsKK3VzaW5nIDo6YW5kcm9pZDo6aGFyZHdhcmU6OmF1ZGlvOjpDUFBfVkVSU0lPTjo6UmVzdWx0OwordXNpbmcgOjphbmRyb2lkOjpoYXJkd2FyZTo6YXVkaW86OkNQUF9WRVJTSU9OOjpUaW1lU3BlYzsKK3VzaW5nIDo6YW5kcm9pZDo6aGFyZHdhcmU6Ok1RRGVzY3JpcHRvclN5bmM7Cit1c2luZyA6OmFuZHJvaWQ6OmhhcmR3YXJlOjpSZXR1cm47Cit1c2luZyA6OmFuZHJvaWQ6OmhhcmR3YXJlOjpWb2lkOwordXNpbmcgUmVhZENvbW1hbmQgPSA6OmFuZHJvaWQ6OmhhcmR3YXJlOjphdWRpbzo6Q1BQX1ZFUlNJT046OklTdHJlYW1Jbjo6UmVhZENvbW1hbmQ7CisKKyNpZiBNQUpPUl9WRVJTSU9OID09IDQKK3VzaW5nIDo6YW5kcm9pZDo6aGFyZHdhcmU6OmF1ZGlvOjpjb21tb246OkNQUF9WRVJTSU9OOjpBdWRpb0NvbnRlbnRUeXBlOwordXNpbmcgOjphbmRyb2lkOjpoYXJkd2FyZTo6YXVkaW86OmNvbW1vbjo6Q1BQX1ZFUlNJT046OkF1ZGlvU291cmNlOwordXNpbmcgOjphbmRyb2lkOjpoYXJkd2FyZTo6YXVkaW86OmNvbW1vbjo6Q1BQX1ZFUlNJT046OkF1ZGlvVXNhZ2U7Cit1c2luZyA6OmFuZHJvaWQ6OmhhcmR3YXJlOjphdWRpbzo6Q1BQX1ZFUlNJT046Ok1pY3JvcGhvbmVJbmZvOwordXNpbmcgOjphbmRyb2lkOjpoYXJkd2FyZTo6YXVkaW86OkNQUF9WRVJTSU9OOjpQbGF5YmFja1RyYWNrTWV0YWRhdGE7Cit1c2luZyA6OmFuZHJvaWQ6OmhhcmR3YXJlOjphdWRpbzo6Q1BQX1ZFUlNJT046OlJlY29yZFRyYWNrTWV0YWRhdGE7CisjZW5kaWYKKworbmFtZXNwYWNlIGFuZHJvaWQgeworbmFtZXNwYWNlIENQUF9WRVJTSU9OIHsKKworU3RyZWFtSGFsSGlkbDo6U3RyZWFtSGFsSGlkbChJU3RyZWFtICpzdHJlYW0pCisgICAgICAgIDogQ29udmVyc2lvbkhlbHBlckhpZGwoIlN0cmVhbSIpLAorICAgICAgICAgIG1TdHJlYW0oc3RyZWFtKSwKKyAgICAgICAgICBtSGFsVGhyZWFkUHJpb3JpdHkoSEFMX1RIUkVBRF9QUklPUklUWV9ERUZBVUxUKSwKKyAgICAgICAgICBtQ2FjaGVkQnVmZmVyU2l6ZSgwKXsKKworICAgIC8vIEluc3RydW1lbnQgYXVkaW8gc2lnbmFsIHBvd2VyIGxvZ2dpbmcuCisgICAgLy8gTm90ZTogVGhpcyBhc3N1bWVzIGNoYW5uZWwgbWFzaywgZm9ybWF0LCBhbmQgc2FtcGxlIHJhdGUgZG8gbm90IGNoYW5nZSBhZnRlciBjcmVhdGlvbi4KKyAgICBpZiAobVN0cmVhbSAhPSBudWxscHRyICYmIG1TdHJlYW1Qb3dlckxvZy5pc1VzZXJEZWJ1Z09yRW5nQnVpbGQoKSkgeworICAgICAgICAvLyBPYnRhaW4gYXVkaW8gcHJvcGVydGllcyAoc2VlIFN0cmVhbUhhbEhpZGw6OmdldEF1ZGlvUHJvcGVydGllcygpIGJlbG93KS4KKyAgICAgICAgUmV0dXJuPHZvaWQ+IHJldCA9IG1TdHJlYW0tPmdldEF1ZGlvUHJvcGVydGllcygKKyAgICAgICAgICAgICAgICBbJl0oYXV0byBzciwgYXV0byBtLCBhdXRvIGYpIHsKKyAgICAgICAgICAgICAgICBtU3RyZWFtUG93ZXJMb2cuaW5pdChzciwKKyAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRpY19jYXN0PGF1ZGlvX2NoYW5uZWxfbWFza190PihtKSwKKyAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRpY19jYXN0PGF1ZGlvX2Zvcm1hdF90PihmKSk7CisgICAgICAgICAgICB9KTsKKyAgICB9Cit9CisKK1N0cmVhbUhhbEhpZGw6On5TdHJlYW1IYWxIaWRsKCkgeworICAgIG1TdHJlYW0gPSBudWxscHRyOworfQorCitzdGF0dXNfdCBTdHJlYW1IYWxIaWRsOjpnZXRTYW1wbGVSYXRlKHVpbnQzMl90ICpyYXRlKSB7CisgICAgaWYgKCFtU3RyZWFtKSByZXR1cm4gTk9fSU5JVDsKKyAgICByZXR1cm4gcHJvY2Vzc1JldHVybigiZ2V0U2FtcGxlUmF0ZSIsIG1TdHJlYW0tPmdldFNhbXBsZVJhdGUoKSwgcmF0ZSk7Cit9CisKK3N0YXR1c190IFN0cmVhbUhhbEhpZGw6OmdldEJ1ZmZlclNpemUoc2l6ZV90ICpzaXplKSB7CisgICAgaWYgKCFtU3RyZWFtKSByZXR1cm4gTk9fSU5JVDsKKyAgICBzdGF0dXNfdCBzdGF0dXMgPSBwcm9jZXNzUmV0dXJuKCJnZXRCdWZmZXJTaXplIiwgbVN0cmVhbS0+Z2V0QnVmZmVyU2l6ZSgpLCBzaXplKTsKKyAgICBpZiAoc3RhdHVzID09IE9LKSB7CisgICAgICAgIG1DYWNoZWRCdWZmZXJTaXplID0gKnNpemU7CisgICAgfQorICAgIHJldHVybiBzdGF0dXM7Cit9CisKK3N0YXR1c190IFN0cmVhbUhhbEhpZGw6OmdldENoYW5uZWxNYXNrKGF1ZGlvX2NoYW5uZWxfbWFza190ICptYXNrKSB7CisgICAgaWYgKCFtU3RyZWFtKSByZXR1cm4gTk9fSU5JVDsKKyAgICByZXR1cm4gcHJvY2Vzc1JldHVybigiZ2V0Q2hhbm5lbE1hc2siLCBtU3RyZWFtLT5nZXRDaGFubmVsTWFzaygpLCBtYXNrKTsKK30KKworc3RhdHVzX3QgU3RyZWFtSGFsSGlkbDo6Z2V0Rm9ybWF0KGF1ZGlvX2Zvcm1hdF90ICpmb3JtYXQpIHsKKyAgICBpZiAoIW1TdHJlYW0pIHJldHVybiBOT19JTklUOworICAgIHJldHVybiBwcm9jZXNzUmV0dXJuKCJnZXRGb3JtYXQiLCBtU3RyZWFtLT5nZXRGb3JtYXQoKSwgZm9ybWF0KTsKK30KKworc3RhdHVzX3QgU3RyZWFtSGFsSGlkbDo6Z2V0QXVkaW9Qcm9wZXJ0aWVzKAorICAgICAgICB1aW50MzJfdCAqc2FtcGxlUmF0ZSwgYXVkaW9fY2hhbm5lbF9tYXNrX3QgKm1hc2ssIGF1ZGlvX2Zvcm1hdF90ICpmb3JtYXQpIHsKKyAgICBpZiAoIW1TdHJlYW0pIHJldHVybiBOT19JTklUOworICAgIFJldHVybjx2b2lkPiByZXQgPSBtU3RyZWFtLT5nZXRBdWRpb1Byb3BlcnRpZXMoCisgICAgICAgICAgICBbJl0odWludDMyX3Qgc3IsIGF1dG8gbSwgYXV0byBmKSB7CisgICAgICAgICAgICAgICAgKnNhbXBsZVJhdGUgPSBzcjsKKyAgICAgICAgICAgICAgICAqbWFzayA9IHN0YXRpY19jYXN0PGF1ZGlvX2NoYW5uZWxfbWFza190PihtKTsKKyAgICAgICAgICAgICAgICAqZm9ybWF0ID0gc3RhdGljX2Nhc3Q8YXVkaW9fZm9ybWF0X3Q+KGYpOworICAgICAgICAgICAgfSk7CisgICAgcmV0dXJuIHByb2Nlc3NSZXR1cm4oImdldEF1ZGlvUHJvcGVydGllcyIsIHJldCk7Cit9CisKK3N0YXR1c190IFN0cmVhbUhhbEhpZGw6OnNldFBhcmFtZXRlcnMoY29uc3QgU3RyaW5nOCYga3ZQYWlycykgeworICAgIGlmICghbVN0cmVhbSkgcmV0dXJuIE5PX0lOSVQ7CisgICAgaGlkbF92ZWM8UGFyYW1ldGVyVmFsdWU+IGhpZGxQYXJhbXM7CisgICAgc3RhdHVzX3Qgc3RhdHVzID0gcGFyYW1ldGVyc0Zyb21IYWwoa3ZQYWlycywgJmhpZGxQYXJhbXMpOworICAgIGlmIChzdGF0dXMgIT0gT0spIHJldHVybiBzdGF0dXM7CisgICAgcmV0dXJuIHByb2Nlc3NSZXR1cm4oInNldFBhcmFtZXRlcnMiLAorICAgICAgICAgICAgICAgICAgICAgICAgIHV0aWxzOjpzZXRQYXJhbWV0ZXJzKG1TdHJlYW0sIGhpZGxQYXJhbXMsIHt9IC8qIG9wdGlvbnMgKi8pKTsKK30KKworc3RhdHVzX3QgU3RyZWFtSGFsSGlkbDo6Z2V0UGFyYW1ldGVycyhjb25zdCBTdHJpbmc4JiBrZXlzLCBTdHJpbmc4ICp2YWx1ZXMpIHsKKyAgICB2YWx1ZXMtPmNsZWFyKCk7CisgICAgaWYgKCFtU3RyZWFtKSByZXR1cm4gTk9fSU5JVDsKKyAgICBoaWRsX3ZlYzxoaWRsX3N0cmluZz4gaGlkbEtleXM7CisgICAgc3RhdHVzX3Qgc3RhdHVzID0ga2V5c0Zyb21IYWwoa2V5cywgJmhpZGxLZXlzKTsKKyAgICBpZiAoc3RhdHVzICE9IE9LKSByZXR1cm4gc3RhdHVzOworICAgIFJlc3VsdCByZXR2YWw7CisgICAgUmV0dXJuPHZvaWQ+IHJldCA9IHV0aWxzOjpnZXRQYXJhbWV0ZXJzKAorICAgICAgICAgICAgbVN0cmVhbSwKKyAgICAgICAgICAgIHt9IC8qIGNvbnRleHQgKi8sCisgICAgICAgICAgICBoaWRsS2V5cywKKyAgICAgICAgICAgIFsmXShSZXN1bHQgciwgY29uc3QgaGlkbF92ZWM8UGFyYW1ldGVyVmFsdWU+JiBwYXJhbWV0ZXJzKSB7CisgICAgICAgICAgICAgICAgcmV0dmFsID0gcjsKKyAgICAgICAgICAgICAgICBpZiAocmV0dmFsID09IFJlc3VsdDo6T0spIHsKKyAgICAgICAgICAgICAgICAgICAgcGFyYW1ldGVyc1RvSGFsKHBhcmFtZXRlcnMsIHZhbHVlcyk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfSk7CisgICAgcmV0dXJuIHByb2Nlc3NSZXR1cm4oImdldFBhcmFtZXRlcnMiLCByZXQsIHJldHZhbCk7Cit9CisKK3N0YXR1c190IFN0cmVhbUhhbEhpZGw6OmFkZEVmZmVjdChzcDxFZmZlY3RIYWxJbnRlcmZhY2U+IGVmZmVjdCkgeworICAgIGlmICghbVN0cmVhbSkgcmV0dXJuIE5PX0lOSVQ7CisgICAgcmV0dXJuIHByb2Nlc3NSZXR1cm4oImFkZEVmZmVjdCIsIG1TdHJlYW0tPmFkZEVmZmVjdCgKKyAgICAgICAgICAgICAgICAgICAgc3RhdGljX2Nhc3Q8RWZmZWN0SGFsSGlkbCo+KGVmZmVjdC5nZXQoKSktPmVmZmVjdElkKCkpKTsKK30KKworc3RhdHVzX3QgU3RyZWFtSGFsSGlkbDo6cmVtb3ZlRWZmZWN0KHNwPEVmZmVjdEhhbEludGVyZmFjZT4gZWZmZWN0KSB7CisgICAgaWYgKCFtU3RyZWFtKSByZXR1cm4gTk9fSU5JVDsKKyAgICByZXR1cm4gcHJvY2Vzc1JldHVybigicmVtb3ZlRWZmZWN0IiwgbVN0cmVhbS0+cmVtb3ZlRWZmZWN0KAorICAgICAgICAgICAgICAgICAgICBzdGF0aWNfY2FzdDxFZmZlY3RIYWxIaWRsKj4oZWZmZWN0LmdldCgpKS0+ZWZmZWN0SWQoKSkpOworfQorCitzdGF0dXNfdCBTdHJlYW1IYWxIaWRsOjpzdGFuZGJ5KCkgeworICAgIGlmICghbVN0cmVhbSkgcmV0dXJuIE5PX0lOSVQ7CisgICAgcmV0dXJuIHByb2Nlc3NSZXR1cm4oInN0YW5kYnkiLCBtU3RyZWFtLT5zdGFuZGJ5KCkpOworfQorCitzdGF0dXNfdCBTdHJlYW1IYWxIaWRsOjpkdW1wKGludCBmZCkgeworICAgIGlmICghbVN0cmVhbSkgcmV0dXJuIE5PX0lOSVQ7CisgICAgbmF0aXZlX2hhbmRsZV90KiBoaWRsSGFuZGxlID0gbmF0aXZlX2hhbmRsZV9jcmVhdGUoMSwgMCk7CisgICAgaGlkbEhhbmRsZS0+ZGF0YVswXSA9IGZkOworICAgIFJldHVybjx2b2lkPiByZXQgPSBtU3RyZWFtLT5kZWJ1ZyhoaWRsSGFuZGxlLCB7fSAvKiBvcHRpb25zICovKTsKKyAgICBuYXRpdmVfaGFuZGxlX2RlbGV0ZShoaWRsSGFuZGxlKTsKKyAgICBtU3RyZWFtUG93ZXJMb2cuZHVtcChmZCk7CisgICAgcmV0dXJuIHByb2Nlc3NSZXR1cm4oImR1bXAiLCByZXQpOworfQorCitzdGF0dXNfdCBTdHJlYW1IYWxIaWRsOjpzdGFydCgpIHsKKyAgICBpZiAoIW1TdHJlYW0pIHJldHVybiBOT19JTklUOworICAgIHJldHVybiBwcm9jZXNzUmV0dXJuKCJzdGFydCIsIG1TdHJlYW0tPnN0YXJ0KCkpOworfQorCitzdGF0dXNfdCBTdHJlYW1IYWxIaWRsOjpzdG9wKCkgeworICAgIGlmICghbVN0cmVhbSkgcmV0dXJuIE5PX0lOSVQ7CisgICAgcmV0dXJuIHByb2Nlc3NSZXR1cm4oInN0b3AiLCBtU3RyZWFtLT5zdG9wKCkpOworfQorCitzdGF0dXNfdCBTdHJlYW1IYWxIaWRsOjpjcmVhdGVNbWFwQnVmZmVyKGludDMyX3QgbWluU2l6ZUZyYW1lcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgYXVkaW9fbW1hcF9idWZmZXJfaW5mbyAqaW5mbykgeworICAgIFJlc3VsdCByZXR2YWw7CisgICAgUmV0dXJuPHZvaWQ+IHJldCA9IG1TdHJlYW0tPmNyZWF0ZU1tYXBCdWZmZXIoCisgICAgICAgICAgICBtaW5TaXplRnJhbWVzLAorICAgICAgICAgICAgWyZdKFJlc3VsdCByLCBjb25zdCBNbWFwQnVmZmVySW5mbyYgaGlkbEluZm8pIHsKKyAgICAgICAgICAgICAgICByZXR2YWwgPSByOworICAgICAgICAgICAgICAgIGlmIChyZXR2YWwgPT0gUmVzdWx0OjpPSykgeworICAgICAgICAgICAgICAgICAgICBjb25zdCBuYXRpdmVfaGFuZGxlICpoYW5kbGUgPSBoaWRsSW5mby5zaGFyZWRNZW1vcnkuaGFuZGxlKCk7CisgICAgICAgICAgICAgICAgICAgIGlmIChoYW5kbGUtPm51bUZkcyA+IDApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGluZm8tPnNoYXJlZF9tZW1vcnlfZmQgPSBoYW5kbGUtPmRhdGFbMF07CisjaWYgTUFKT1JfVkVSU0lPTiA9PSA0CisgICAgICAgICAgICAgICAgICAgICAgICBpbmZvLT5mbGFncyA9IGF1ZGlvX21tYXBfYnVmZmVyX2ZsYWcoaGlkbEluZm8uZmxhZ3MpOworI2VuZGlmCisgICAgICAgICAgICAgICAgICAgICAgICBpbmZvLT5idWZmZXJfc2l6ZV9mcmFtZXMgPSBoaWRsSW5mby5idWZmZXJTaXplRnJhbWVzOworICAgICAgICAgICAgICAgICAgICAgICAgLy8gTmVnYXRpdmUgYnVmZmVyIHNpemUgZnJhbWUgd2FzIGEgaGFjayBpbiBPIGFuZCBQIHRvCisgICAgICAgICAgICAgICAgICAgICAgICAvLyBpbmRpY2F0ZSB0aGF0IHRoZSBidWZmZXIgaXMgc2hhcmVhYmxlIHRvIGFwcGxpY2F0aW9ucworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGluZm8tPmJ1ZmZlcl9zaXplX2ZyYW1lcyA8IDApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbmZvLT5idWZmZXJfc2l6ZV9mcmFtZXMgKj0gLTE7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5mby0+ZmxhZ3MgPSBhdWRpb19tbWFwX2J1ZmZlcl9mbGFnKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5mby0+ZmxhZ3MgfCBBVURJT19NTUFQX0FQUExJQ0FUSU9OX1NIQVJFQUJMRSk7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICBpbmZvLT5idXJzdF9zaXplX2ZyYW1lcyA9IGhpZGxJbmZvLmJ1cnN0U2l6ZUZyYW1lczsKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIGluZm8tPnNoYXJlZF9tZW1vcnlfYWRkcmVzcyBpcyBub3QgbmVlZGVkIGluIEhJREwgY29udGV4dAorICAgICAgICAgICAgICAgICAgICAgICAgaW5mby0+c2hhcmVkX21lbW9yeV9hZGRyZXNzID0gTlVMTDsKKyAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHZhbCA9IFJlc3VsdDo6Tk9UX0lOSVRJQUxJWkVEOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfSk7CisgICAgcmV0dXJuIHByb2Nlc3NSZXR1cm4oImNyZWF0ZU1tYXBCdWZmZXIiLCByZXQsIHJldHZhbCk7Cit9CisKK3N0YXR1c190IFN0cmVhbUhhbEhpZGw6OmdldE1tYXBQb3NpdGlvbihzdHJ1Y3QgYXVkaW9fbW1hcF9wb3NpdGlvbiAqcG9zaXRpb24pIHsKKyAgICBSZXN1bHQgcmV0dmFsOworICAgIFJldHVybjx2b2lkPiByZXQgPSBtU3RyZWFtLT5nZXRNbWFwUG9zaXRpb24oCisgICAgICAgICAgICBbJl0oUmVzdWx0IHIsIGNvbnN0IE1tYXBQb3NpdGlvbiYgaGlkbFBvc2l0aW9uKSB7CisgICAgICAgICAgICAgICAgcmV0dmFsID0gcjsKKyAgICAgICAgICAgICAgICBpZiAocmV0dmFsID09IFJlc3VsdDo6T0spIHsKKyAgICAgICAgICAgICAgICAgICAgcG9zaXRpb24tPnRpbWVfbmFub3NlY29uZHMgPSBoaWRsUG9zaXRpb24udGltZU5hbm9zZWNvbmRzOworICAgICAgICAgICAgICAgICAgICBwb3NpdGlvbi0+cG9zaXRpb25fZnJhbWVzID0gaGlkbFBvc2l0aW9uLnBvc2l0aW9uRnJhbWVzOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0pOworICAgIHJldHVybiBwcm9jZXNzUmV0dXJuKCJnZXRNbWFwUG9zaXRpb24iLCByZXQsIHJldHZhbCk7Cit9CisKK3N0YXR1c190IFN0cmVhbUhhbEhpZGw6OnNldEhhbFRocmVhZFByaW9yaXR5KGludCBwcmlvcml0eSkgeworICAgIG1IYWxUaHJlYWRQcmlvcml0eSA9IHByaW9yaXR5OworICAgIHJldHVybiBPSzsKK30KKworc3RhdHVzX3QgU3RyZWFtSGFsSGlkbDo6Z2V0Q2FjaGVkQnVmZmVyU2l6ZShzaXplX3QgKnNpemUpIHsKKyAgICBpZiAobUNhY2hlZEJ1ZmZlclNpemUgIT0gMCkgeworICAgICAgICAqc2l6ZSA9IG1DYWNoZWRCdWZmZXJTaXplOworICAgICAgICByZXR1cm4gT0s7CisgICAgfQorICAgIHJldHVybiBnZXRCdWZmZXJTaXplKHNpemUpOworfQorCitib29sIFN0cmVhbUhhbEhpZGw6OnJlcXVlc3RIYWxUaHJlYWRQcmlvcml0eShwaWRfdCB0aHJlYWRQaWQsIHBpZF90IHRocmVhZElkKSB7CisgICAgaWYgKG1IYWxUaHJlYWRQcmlvcml0eSA9PSBIQUxfVEhSRUFEX1BSSU9SSVRZX0RFRkFVTFQpIHsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorICAgIGludCBlcnIgPSByZXF1ZXN0UHJpb3JpdHkoCisgICAgICAgICAgICB0aHJlYWRQaWQsIHRocmVhZElkLAorICAgICAgICAgICAgbUhhbFRocmVhZFByaW9yaXR5LCBmYWxzZSAvKmlzRm9yQXBwKi8sIHRydWUgLyphc3luY2hyb25vdXMqLyk7CisgICAgQUxPR0VfSUYoZXJyLCAiZmFpbGVkIHRvIHNldCBwcmlvcml0eSAlZCBmb3IgcGlkICVkIHRpZCAlZDsgZXJyb3IgJWQiLAorICAgICAgICAgICAgbUhhbFRocmVhZFByaW9yaXR5LCB0aHJlYWRQaWQsIHRocmVhZElkLCBlcnIpOworICAgIC8vIEF1ZGlvIHdpbGwgc3RpbGwgd29yaywgYnV0IGxhdGVuY3kgd2lsbCBiZSBoaWdoZXIgYW5kIHNvbWV0aW1lcyB1bmFjY2VwdGFibGUuCisgICAgcmV0dXJuIGVyciA9PSAwOworfQorCituYW1lc3BhY2UgeworCisvKiBOb3RlcyBvbiBjYWxsYmFjayBvd25lcnNoaXAuCisKK1RoaXMgaXMgaG93IChIdylCaW5kZXIgb3duZXJzaGlwIG1vZGVsIGxvb2tzIGxpa2UuIFRoZSBzZXJ2ZXIgaW1wbGVtZW50YXRpb24KK2lzIG93bmVkIGJ5IEJpbmRlciBmcmFtZXdvcmsgKHZpYSBzcDw+KS4gUHJveGllcyBhcmUgb3duZWQgYnkgY2xpZW50cy4KK1doZW4gdGhlIGxhc3QgcHJveHkgZGlzYXBwZWFycywgQmluZGVyIGZyYW1ld29yayByZWxlYXNlcyB0aGUgc2VydmVyIGltcGwuCisKK1RodXMsIGl0IGlzIG5vdCBuZWVkZWQgdG8ga2VlcCBhbnkgcmVmZXJlbmNlcyB0byBTdHJlYW1PdXRDYWxsYmFjayAodGhpcyBpcwordGhlIHNlcnZlciBpbXBsKSAtLSBpdCB3aWxsIGxpdmUgYXMgbG9uZyBhcyBIQUwgc2VydmVyIGhvbGRzIGEgc3Ryb25nIHJlZiB0bworSVN0cmVhbU91dENhbGxiYWNrIHByb3h5LiBXZSBjbGVhciB0aGF0IHJlZmVyZW5jZSBieSBjYWxsaW5nICdjbGVhckNhbGxiYWNrJworZnJvbSB0aGUgZGVzdHJ1Y3RvciBvZiBTdHJlYW1PdXRIYWxIaWRsLgorCitUaGUgY2FsbGJhY2sgb25seSBrZWVwcyBhIHdlYWsgcmVmZXJlbmNlIHRvIHRoZSBzdHJlYW0uIFRoZSBzdHJlYW0gaXMgb3duZWQKK2J5IEF1ZGlvRmxpbmdlci4KKworKi8KKworc3RydWN0IFN0cmVhbU91dENhbGxiYWNrIDogcHVibGljIElTdHJlYW1PdXRDYWxsYmFjayB7CisgICAgU3RyZWFtT3V0Q2FsbGJhY2soY29uc3Qgd3A8U3RyZWFtT3V0SGFsSGlkbD4mIHN0cmVhbSkgOiBtU3RyZWFtKHN0cmVhbSkge30KKworICAgIC8vIElTdHJlYW1PdXRDYWxsYmFjayBpbXBsZW1lbnRhdGlvbgorICAgIFJldHVybjx2b2lkPiBvbldyaXRlUmVhZHkoKSAgb3ZlcnJpZGUgeworICAgICAgICBzcDxTdHJlYW1PdXRIYWxIaWRsPiBzdHJlYW0gPSBtU3RyZWFtLnByb21vdGUoKTsKKyAgICAgICAgaWYgKHN0cmVhbSAhPSAwKSB7CisgICAgICAgICAgICBzdHJlYW0tPm9uV3JpdGVSZWFkeSgpOworICAgICAgICB9CisgICAgICAgIHJldHVybiBWb2lkKCk7CisgICAgfQorCisgICAgUmV0dXJuPHZvaWQ+IG9uRHJhaW5SZWFkeSgpICBvdmVycmlkZSB7CisgICAgICAgIHNwPFN0cmVhbU91dEhhbEhpZGw+IHN0cmVhbSA9IG1TdHJlYW0ucHJvbW90ZSgpOworICAgICAgICBpZiAoc3RyZWFtICE9IDApIHsKKyAgICAgICAgICAgIHN0cmVhbS0+b25EcmFpblJlYWR5KCk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIFZvaWQoKTsKKyAgICB9CisKKyAgICBSZXR1cm48dm9pZD4gb25FcnJvcigpICBvdmVycmlkZSB7CisgICAgICAgIHNwPFN0cmVhbU91dEhhbEhpZGw+IHN0cmVhbSA9IG1TdHJlYW0ucHJvbW90ZSgpOworICAgICAgICBpZiAoc3RyZWFtICE9IDApIHsKKyAgICAgICAgICAgIHN0cmVhbS0+b25FcnJvcigpOworICAgICAgICB9CisgICAgICAgIHJldHVybiBWb2lkKCk7CisgICAgfQorCisgIHByaXZhdGU6CisgICAgd3A8U3RyZWFtT3V0SGFsSGlkbD4gbVN0cmVhbTsKK307CisKK30gIC8vIG5hbWVzcGFjZQorCitTdHJlYW1PdXRIYWxIaWRsOjpTdHJlYW1PdXRIYWxIaWRsKGNvbnN0IHNwPElTdHJlYW1PdXQ+JiBzdHJlYW0pCisgICAgICAgIDogU3RyZWFtSGFsSGlkbChzdHJlYW0uZ2V0KCkpLCBtU3RyZWFtKHN0cmVhbSksIG1Xcml0ZXJDbGllbnQoMCksIG1FZkdyb3VwKG51bGxwdHIpIHsKK30KKworU3RyZWFtT3V0SGFsSGlkbDo6flN0cmVhbU91dEhhbEhpZGwoKSB7CisgICAgaWYgKG1TdHJlYW0gIT0gMCkgeworICAgICAgICBpZiAobUNhbGxiYWNrLnVuc2FmZV9nZXQoKSkgeworICAgICAgICAgICAgcHJvY2Vzc1JldHVybigiY2xlYXJDYWxsYmFjayIsIG1TdHJlYW0tPmNsZWFyQ2FsbGJhY2soKSk7CisgICAgICAgIH0KKyAgICAgICAgcHJvY2Vzc1JldHVybigiY2xvc2UiLCBtU3RyZWFtLT5jbG9zZSgpKTsKKyAgICAgICAgbVN0cmVhbS5jbGVhcigpOworICAgIH0KKyAgICBtQ2FsbGJhY2suY2xlYXIoKTsKKyAgICBoYXJkd2FyZTo6SVBDVGhyZWFkU3RhdGU6OnNlbGYoKS0+Zmx1c2hDb21tYW5kcygpOworICAgIGlmIChtRWZHcm91cCkgeworICAgICAgICBFdmVudEZsYWc6OmRlbGV0ZUV2ZW50RmxhZygmbUVmR3JvdXApOworICAgIH0KK30KKworc3RhdHVzX3QgU3RyZWFtT3V0SGFsSGlkbDo6Z2V0RnJhbWVTaXplKHNpemVfdCAqc2l6ZSkgeworICAgIGlmIChtU3RyZWFtID09IDApIHJldHVybiBOT19JTklUOworICAgIHJldHVybiBwcm9jZXNzUmV0dXJuKCJnZXRGcmFtZVNpemUiLCBtU3RyZWFtLT5nZXRGcmFtZVNpemUoKSwgc2l6ZSk7Cit9CisKK3N0YXR1c190IFN0cmVhbU91dEhhbEhpZGw6OmdldExhdGVuY3kodWludDMyX3QgKmxhdGVuY3kpIHsKKyAgICBpZiAobVN0cmVhbSA9PSAwKSByZXR1cm4gTk9fSU5JVDsKKyAgICBpZiAobVdyaXRlckNsaWVudCA9PSBnZXR0aWQoKSAmJiBtQ29tbWFuZE1RKSB7CisgICAgICAgIHJldHVybiBjYWxsV3JpdGVyVGhyZWFkKAorICAgICAgICAgICAgICAgIFdyaXRlQ29tbWFuZDo6R0VUX0xBVEVOQ1ksICJnZXRMYXRlbmN5IiwgbnVsbHB0ciwgMCwKKyAgICAgICAgICAgICAgICBbJl0oY29uc3QgV3JpdGVTdGF0dXMmIHdyaXRlU3RhdHVzKSB7CisgICAgICAgICAgICAgICAgICAgICpsYXRlbmN5ID0gd3JpdGVTdGF0dXMucmVwbHkubGF0ZW5jeU1zOworICAgICAgICAgICAgICAgIH0pOworICAgIH0gZWxzZSB7CisgICAgICAgIHJldHVybiBwcm9jZXNzUmV0dXJuKCJnZXRMYXRlbmN5IiwgbVN0cmVhbS0+Z2V0TGF0ZW5jeSgpLCBsYXRlbmN5KTsKKyAgICB9Cit9CisKK3N0YXR1c190IFN0cmVhbU91dEhhbEhpZGw6OnNldFZvbHVtZShmbG9hdCBsZWZ0LCBmbG9hdCByaWdodCkgeworICAgIGlmIChtU3RyZWFtID09IDApIHJldHVybiBOT19JTklUOworICAgIHJldHVybiBwcm9jZXNzUmV0dXJuKCJzZXRWb2x1bWUiLCBtU3RyZWFtLT5zZXRWb2x1bWUobGVmdCwgcmlnaHQpKTsKK30KKworc3RhdHVzX3QgU3RyZWFtT3V0SGFsSGlkbDo6d3JpdGUoY29uc3Qgdm9pZCAqYnVmZmVyLCBzaXplX3QgYnl0ZXMsIHNpemVfdCAqd3JpdHRlbikgeworICAgIGlmIChtU3RyZWFtID09IDApIHJldHVybiBOT19JTklUOworICAgICp3cml0dGVuID0gMDsKKworICAgIGlmIChieXRlcyA9PSAwICYmICFtRGF0YU1RKSB7CisgICAgICAgIC8vIENhbid0IGRldGVybWluZSB0aGUgc2l6ZSBmb3IgdGhlIE1RIGJ1ZmZlci4gV2FpdCBmb3IgYSBub24tZW1wdHkgd3JpdGUgcmVxdWVzdC4KKyAgICAgICAgQUxPR1dfSUYobUNhbGxiYWNrLnVuc2FmZV9nZXQoKSwgIkZpcnN0IGNhbGwgdG8gYXN5bmMgd3JpdGUgd2l0aCAwIGJ5dGVzIik7CisgICAgICAgIHJldHVybiBPSzsKKyAgICB9CisKKyAgICBzdGF0dXNfdCBzdGF0dXM7CisgICAgaWYgKCFtRGF0YU1RKSB7CisgICAgICAgIC8vIEluIGNhc2UgaWYgcGxheWJhY2sgc3RhcnRzIGNsb3NlIHRvIHRoZSBlbmQgb2YgYSBjb21wcmVzc2VkIHRyYWNrLCB0aGUgYnl0ZXMKKyAgICAgICAgLy8gdGhhdCBuZWVkIHRvIGJlIHdyaXR0ZW4gaXMgbGVzcyB0aGFuIHRoZSBhY3R1YWwgYnVmZmVyIHNpemUuIE5lZWQgdG8gdXNlCisgICAgICAgIC8vIGZ1bGwgYnVmZmVyIHNpemUgZm9yIHRoZSBNUSBzaW5jZSBvdGhlcndpc2UgYWZ0ZXIgc2Vla2luZyBiYWNrIHRvIHRoZSBtaWRkbGUKKyAgICAgICAgLy8gZGF0YSB3aWxsIGJlIHRydW5jYXRlZC4KKyAgICAgICAgc2l6ZV90IGJ1ZmZlclNpemU7CisgICAgICAgIGlmICgoc3RhdHVzID0gZ2V0Q2FjaGVkQnVmZmVyU2l6ZSgmYnVmZmVyU2l6ZSkpICE9IE9LKSB7CisgICAgICAgICAgICByZXR1cm4gc3RhdHVzOworICAgICAgICB9CisgICAgICAgIGlmIChieXRlcyA+IGJ1ZmZlclNpemUpIGJ1ZmZlclNpemUgPSBieXRlczsKKyAgICAgICAgaWYgKChzdGF0dXMgPSBwcmVwYXJlRm9yV3JpdGluZyhidWZmZXJTaXplKSkgIT0gT0spIHsKKyAgICAgICAgICAgIHJldHVybiBzdGF0dXM7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBzdGF0dXMgPSBjYWxsV3JpdGVyVGhyZWFkKAorICAgICAgICAgICAgV3JpdGVDb21tYW5kOjpXUklURSwgIndyaXRlIiwgc3RhdGljX2Nhc3Q8Y29uc3QgdWludDhfdCo+KGJ1ZmZlciksIGJ5dGVzLAorICAgICAgICAgICAgWyZdIChjb25zdCBXcml0ZVN0YXR1cyYgd3JpdGVTdGF0dXMpIHsKKyAgICAgICAgICAgICAgICAqd3JpdHRlbiA9IHdyaXRlU3RhdHVzLnJlcGx5LndyaXR0ZW47CisgICAgICAgICAgICAgICAgLy8gRGlhZ25vc3RpY3Mgb2YgdGhlIGNhdXNlIG9mIGIvMzU4MTMxMTMuCisgICAgICAgICAgICAgICAgQUxPR0VfSUYoKndyaXR0ZW4gPiBieXRlcywKKyAgICAgICAgICAgICAgICAgICAgICAgICJoYWwgcmVwb3J0cyBtb3JlIGJ5dGVzIHdyaXR0ZW4gdGhhbiBhc2tlZCBmb3I6ICVsbGQgPiAlbGxkIiwKKyAgICAgICAgICAgICAgICAgICAgICAgIChsb25nIGxvbmcpKndyaXR0ZW4sIChsb25nIGxvbmcpYnl0ZXMpOworICAgICAgICAgICAgfSk7CisgICAgbVN0cmVhbVBvd2VyTG9nLmxvZyhidWZmZXIsICp3cml0dGVuKTsKKyAgICByZXR1cm4gc3RhdHVzOworfQorCitzdGF0dXNfdCBTdHJlYW1PdXRIYWxIaWRsOjpjYWxsV3JpdGVyVGhyZWFkKAorICAgICAgICBXcml0ZUNvbW1hbmQgY21kLCBjb25zdCBjaGFyKiBjbWROYW1lLAorICAgICAgICBjb25zdCB1aW50OF90KiBkYXRhLCBzaXplX3QgZGF0YVNpemUsIFN0cmVhbU91dEhhbEhpZGw6OldyaXRlckNhbGxiYWNrIGNhbGxiYWNrKSB7CisgICAgaWYgKCFtQ29tbWFuZE1RLT53cml0ZSgmY21kKSkgeworICAgICAgICBBTE9HRSgiY29tbWFuZCBtZXNzYWdlIHF1ZXVlIHdyaXRlIGZhaWxlZCBmb3IgXCIlc1wiIiwgY21kTmFtZSk7CisgICAgICAgIHJldHVybiAtRUFHQUlOOworICAgIH0KKyAgICBpZiAoZGF0YSAhPSBudWxscHRyKSB7CisgICAgICAgIHNpemVfdCBhdmFpbGFibGVUb1dyaXRlID0gbURhdGFNUS0+YXZhaWxhYmxlVG9Xcml0ZSgpOworICAgICAgICBpZiAoZGF0YVNpemUgPiBhdmFpbGFibGVUb1dyaXRlKSB7CisgICAgICAgICAgICBBTE9HVygidHJ1bmNhdGluZyB3cml0ZSBkYXRhIGZyb20gJWxsZCB0byAlbGxkIGR1ZSB0byBpbnN1ZmZpY2llbnQgZGF0YSBxdWV1ZSBzcGFjZSIsCisgICAgICAgICAgICAgICAgICAgIChsb25nIGxvbmcpZGF0YVNpemUsIChsb25nIGxvbmcpYXZhaWxhYmxlVG9Xcml0ZSk7CisgICAgICAgICAgICBkYXRhU2l6ZSA9IGF2YWlsYWJsZVRvV3JpdGU7CisgICAgICAgIH0KKyAgICAgICAgaWYgKCFtRGF0YU1RLT53cml0ZShkYXRhLCBkYXRhU2l6ZSkpIHsKKyAgICAgICAgICAgIEFMT0dFKCJkYXRhIG1lc3NhZ2UgcXVldWUgd3JpdGUgZmFpbGVkIGZvciBcIiVzXCIiLCBjbWROYW1lKTsKKyAgICAgICAgfQorICAgIH0KKyAgICBtRWZHcm91cC0+d2FrZShzdGF0aWNfY2FzdDx1aW50MzJfdD4oTWVzc2FnZVF1ZXVlRmxhZ0JpdHM6Ok5PVF9FTVBUWSkpOworCisgICAgLy8gVE9ETzogUmVtb3ZlIG1hbnVhbCBldmVudCBmbGFnIGhhbmRsaW5nIG9uY2UgYmxvY2tpbmcgTVEgaXMgaW1wbGVtZW50ZWQuIGIvMzM4MTU0MjIKKyAgICB1aW50MzJfdCBlZlN0YXRlID0gMDsKK3JldHJ5OgorICAgIHN0YXR1c190IHJldCA9IG1FZkdyb3VwLT53YWl0KHN0YXRpY19jYXN0PHVpbnQzMl90PihNZXNzYWdlUXVldWVGbGFnQml0czo6Tk9UX0ZVTEwpLCAmZWZTdGF0ZSk7CisgICAgaWYgKGVmU3RhdGUgJiBzdGF0aWNfY2FzdDx1aW50MzJfdD4oTWVzc2FnZVF1ZXVlRmxhZ0JpdHM6Ok5PVF9GVUxMKSkgeworICAgICAgICBXcml0ZVN0YXR1cyB3cml0ZVN0YXR1czsKKyAgICAgICAgd3JpdGVTdGF0dXMucmV0dmFsID0gUmVzdWx0OjpOT1RfSU5JVElBTElaRUQ7CisgICAgICAgIGlmICghbVN0YXR1c01RLT5yZWFkKCZ3cml0ZVN0YXR1cykpIHsKKyAgICAgICAgICAgIEFMT0dFKCJzdGF0dXMgbWVzc2FnZSByZWFkIGZhaWxlZCBmb3IgXCIlc1wiIiwgY21kTmFtZSk7CisgICAgICAgIH0KKyAgICAgICAgaWYgKHdyaXRlU3RhdHVzLnJldHZhbCA9PSBSZXN1bHQ6Ok9LKSB7CisgICAgICAgICAgICByZXQgPSBPSzsKKyAgICAgICAgICAgIGNhbGxiYWNrKHdyaXRlU3RhdHVzKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHJldCA9IHByb2Nlc3NSZXR1cm4oY21kTmFtZSwgd3JpdGVTdGF0dXMucmV0dmFsKTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gcmV0OworICAgIH0KKyAgICBpZiAocmV0ID09IC1FQUdBSU4gfHwgcmV0ID09IC1FSU5UUikgeworICAgICAgICAvLyBTcHVyaW91cyB3YWtldXAuIFRoaXMgbm9ybWFsbHkgcmV0cmllcyBubyBtb3JlIHRoYW4gb25jZS4KKyAgICAgICAgZ290byByZXRyeTsKKyAgICB9CisgICAgcmV0dXJuIHJldDsKK30KKworc3RhdHVzX3QgU3RyZWFtT3V0SGFsSGlkbDo6cHJlcGFyZUZvcldyaXRpbmcoc2l6ZV90IGJ1ZmZlclNpemUpIHsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8Q29tbWFuZE1RPiB0ZW1wQ29tbWFuZE1ROworICAgIHN0ZDo6dW5pcXVlX3B0cjxEYXRhTVE+IHRlbXBEYXRhTVE7CisgICAgc3RkOjp1bmlxdWVfcHRyPFN0YXR1c01RPiB0ZW1wU3RhdHVzTVE7CisgICAgUmVzdWx0IHJldHZhbDsKKyAgICBwaWRfdCBoYWxUaHJlYWRQaWQsIGhhbFRocmVhZFRpZDsKKyAgICBSZXR1cm48dm9pZD4gcmV0ID0gbVN0cmVhbS0+cHJlcGFyZUZvcldyaXRpbmcoCisgICAgICAgICAgICAxLCBidWZmZXJTaXplLAorICAgICAgICAgICAgWyZdKFJlc3VsdCByLAorICAgICAgICAgICAgICAgICAgICBjb25zdCBDb21tYW5kTVE6OkRlc2NyaXB0b3ImIGNvbW1hbmRNUSwKKyAgICAgICAgICAgICAgICAgICAgY29uc3QgRGF0YU1ROjpEZXNjcmlwdG9yJiBkYXRhTVEsCisgICAgICAgICAgICAgICAgICAgIGNvbnN0IFN0YXR1c01ROjpEZXNjcmlwdG9yJiBzdGF0dXNNUSwKKyAgICAgICAgICAgICAgICAgICAgY29uc3QgVGhyZWFkSW5mbyYgaGFsVGhyZWFkSW5mbykgeworICAgICAgICAgICAgICAgIHJldHZhbCA9IHI7CisgICAgICAgICAgICAgICAgaWYgKHJldHZhbCA9PSBSZXN1bHQ6Ok9LKSB7CisgICAgICAgICAgICAgICAgICAgIHRlbXBDb21tYW5kTVEucmVzZXQobmV3IENvbW1hbmRNUShjb21tYW5kTVEpKTsKKyAgICAgICAgICAgICAgICAgICAgdGVtcERhdGFNUS5yZXNldChuZXcgRGF0YU1RKGRhdGFNUSkpOworICAgICAgICAgICAgICAgICAgICB0ZW1wU3RhdHVzTVEucmVzZXQobmV3IFN0YXR1c01RKHN0YXR1c01RKSk7CisgICAgICAgICAgICAgICAgICAgIGlmICh0ZW1wRGF0YU1RLT5pc1ZhbGlkKCkgJiYgdGVtcERhdGFNUS0+Z2V0RXZlbnRGbGFnV29yZCgpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBFdmVudEZsYWc6OmNyZWF0ZUV2ZW50RmxhZyh0ZW1wRGF0YU1RLT5nZXRFdmVudEZsYWdXb3JkKCksICZtRWZHcm91cCk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgaGFsVGhyZWFkUGlkID0gaGFsVGhyZWFkSW5mby5waWQ7CisgICAgICAgICAgICAgICAgICAgIGhhbFRocmVhZFRpZCA9IGhhbFRocmVhZEluZm8udGlkOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0pOworICAgIGlmICghcmV0LmlzT2soKSB8fCByZXR2YWwgIT0gUmVzdWx0OjpPSykgeworICAgICAgICByZXR1cm4gcHJvY2Vzc1JldHVybigicHJlcGFyZUZvcldyaXRpbmciLCByZXQsIHJldHZhbCk7CisgICAgfQorICAgIGlmICghdGVtcENvbW1hbmRNUSB8fCAhdGVtcENvbW1hbmRNUS0+aXNWYWxpZCgpIHx8CisgICAgICAgICAgICAhdGVtcERhdGFNUSB8fCAhdGVtcERhdGFNUS0+aXNWYWxpZCgpIHx8CisgICAgICAgICAgICAhdGVtcFN0YXR1c01RIHx8ICF0ZW1wU3RhdHVzTVEtPmlzVmFsaWQoKSB8fAorICAgICAgICAgICAgIW1FZkdyb3VwKSB7CisgICAgICAgIEFMT0dFX0lGKCF0ZW1wQ29tbWFuZE1RLCAiRmFpbGVkIHRvIG9idGFpbiBjb21tYW5kIG1lc3NhZ2UgcXVldWUgZm9yIHdyaXRpbmciKTsKKyAgICAgICAgQUxPR0VfSUYodGVtcENvbW1hbmRNUSAmJiAhdGVtcENvbW1hbmRNUS0+aXNWYWxpZCgpLAorICAgICAgICAgICAgICAgICJDb21tYW5kIG1lc3NhZ2UgcXVldWUgZm9yIHdyaXRpbmcgaXMgaW52YWxpZCIpOworICAgICAgICBBTE9HRV9JRighdGVtcERhdGFNUSwgIkZhaWxlZCB0byBvYnRhaW4gZGF0YSBtZXNzYWdlIHF1ZXVlIGZvciB3cml0aW5nIik7CisgICAgICAgIEFMT0dFX0lGKHRlbXBEYXRhTVEgJiYgIXRlbXBEYXRhTVEtPmlzVmFsaWQoKSwgIkRhdGEgbWVzc2FnZSBxdWV1ZSBmb3Igd3JpdGluZyBpcyBpbnZhbGlkIik7CisgICAgICAgIEFMT0dFX0lGKCF0ZW1wU3RhdHVzTVEsICJGYWlsZWQgdG8gb2J0YWluIHN0YXR1cyBtZXNzYWdlIHF1ZXVlIGZvciB3cml0aW5nIik7CisgICAgICAgIEFMT0dFX0lGKHRlbXBTdGF0dXNNUSAmJiAhdGVtcFN0YXR1c01RLT5pc1ZhbGlkKCksCisgICAgICAgICAgICAgICAgIlN0YXR1cyBtZXNzYWdlIHF1ZXVlIGZvciB3cml0aW5nIGlzIGludmFsaWQiKTsKKyAgICAgICAgQUxPR0VfSUYoIW1FZkdyb3VwLCAiRXZlbnQgZmxhZyBjcmVhdGlvbiBmb3Igd3JpdGluZyBmYWlsZWQiKTsKKyAgICAgICAgcmV0dXJuIE5PX0lOSVQ7CisgICAgfQorICAgIHJlcXVlc3RIYWxUaHJlYWRQcmlvcml0eShoYWxUaHJlYWRQaWQsIGhhbFRocmVhZFRpZCk7CisKKyAgICBtQ29tbWFuZE1RID0gc3RkOjptb3ZlKHRlbXBDb21tYW5kTVEpOworICAgIG1EYXRhTVEgPSBzdGQ6Om1vdmUodGVtcERhdGFNUSk7CisgICAgbVN0YXR1c01RID0gc3RkOjptb3ZlKHRlbXBTdGF0dXNNUSk7CisgICAgbVdyaXRlckNsaWVudCA9IGdldHRpZCgpOworICAgIHJldHVybiBPSzsKK30KKworc3RhdHVzX3QgU3RyZWFtT3V0SGFsSGlkbDo6Z2V0UmVuZGVyUG9zaXRpb24odWludDMyX3QgKmRzcEZyYW1lcykgeworICAgIGlmIChtU3RyZWFtID09IDApIHJldHVybiBOT19JTklUOworICAgIFJlc3VsdCByZXR2YWw7CisgICAgUmV0dXJuPHZvaWQ+IHJldCA9IG1TdHJlYW0tPmdldFJlbmRlclBvc2l0aW9uKAorICAgICAgICAgICAgWyZdKFJlc3VsdCByLCB1aW50MzJfdCBkKSB7CisgICAgICAgICAgICAgICAgcmV0dmFsID0gcjsKKyAgICAgICAgICAgICAgICBpZiAocmV0dmFsID09IFJlc3VsdDo6T0spIHsKKyAgICAgICAgICAgICAgICAgICAgKmRzcEZyYW1lcyA9IGQ7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfSk7CisgICAgcmV0dXJuIHByb2Nlc3NSZXR1cm4oImdldFJlbmRlclBvc2l0aW9uIiwgcmV0LCByZXR2YWwpOworfQorCitzdGF0dXNfdCBTdHJlYW1PdXRIYWxIaWRsOjpnZXROZXh0V3JpdGVUaW1lc3RhbXAoaW50NjRfdCAqdGltZXN0YW1wKSB7CisgICAgaWYgKG1TdHJlYW0gPT0gMCkgcmV0dXJuIE5PX0lOSVQ7CisgICAgUmVzdWx0IHJldHZhbDsKKyAgICBSZXR1cm48dm9pZD4gcmV0ID0gbVN0cmVhbS0+Z2V0TmV4dFdyaXRlVGltZXN0YW1wKAorICAgICAgICAgICAgWyZdKFJlc3VsdCByLCBpbnQ2NF90IHQpIHsKKyAgICAgICAgICAgICAgICByZXR2YWwgPSByOworICAgICAgICAgICAgICAgIGlmIChyZXR2YWwgPT0gUmVzdWx0OjpPSykgeworICAgICAgICAgICAgICAgICAgICAqdGltZXN0YW1wID0gdDsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9KTsKKyAgICByZXR1cm4gcHJvY2Vzc1JldHVybigiZ2V0UmVuZGVyUG9zaXRpb24iLCByZXQsIHJldHZhbCk7Cit9CisKK3N0YXR1c190IFN0cmVhbU91dEhhbEhpZGw6OnNldENhbGxiYWNrKHdwPFN0cmVhbU91dEhhbEludGVyZmFjZUNhbGxiYWNrPiBjYWxsYmFjaykgeworICAgIGlmIChtU3RyZWFtID09IDApIHJldHVybiBOT19JTklUOworICAgIHN0YXR1c190IHN0YXR1cyA9IHByb2Nlc3NSZXR1cm4oCisgICAgICAgICAgICAic2V0Q2FsbGJhY2siLCBtU3RyZWFtLT5zZXRDYWxsYmFjayhuZXcgU3RyZWFtT3V0Q2FsbGJhY2sodGhpcykpKTsKKyAgICBpZiAoc3RhdHVzID09IE9LKSB7CisgICAgICAgIG1DYWxsYmFjayA9IGNhbGxiYWNrOworICAgIH0KKyAgICByZXR1cm4gc3RhdHVzOworfQorCitzdGF0dXNfdCBTdHJlYW1PdXRIYWxIaWRsOjpzdXBwb3J0c1BhdXNlQW5kUmVzdW1lKGJvb2wgKnN1cHBvcnRzUGF1c2UsIGJvb2wgKnN1cHBvcnRzUmVzdW1lKSB7CisgICAgaWYgKG1TdHJlYW0gPT0gMCkgcmV0dXJuIE5PX0lOSVQ7CisgICAgUmV0dXJuPHZvaWQ+IHJldCA9IG1TdHJlYW0tPnN1cHBvcnRzUGF1c2VBbmRSZXN1bWUoCisgICAgICAgICAgICBbJl0oYm9vbCBwLCBib29sIHIpIHsKKyAgICAgICAgICAgICAgICAqc3VwcG9ydHNQYXVzZSA9IHA7CisgICAgICAgICAgICAgICAgKnN1cHBvcnRzUmVzdW1lID0gcjsKKyAgICAgICAgICAgIH0pOworICAgIHJldHVybiBwcm9jZXNzUmV0dXJuKCJzdXBwb3J0c1BhdXNlQW5kUmVzdW1lIiwgcmV0KTsKK30KKworc3RhdHVzX3QgU3RyZWFtT3V0SGFsSGlkbDo6cGF1c2UoKSB7CisgICAgaWYgKG1TdHJlYW0gPT0gMCkgcmV0dXJuIE5PX0lOSVQ7CisgICAgcmV0dXJuIHByb2Nlc3NSZXR1cm4oInBhdXNlIiwgbVN0cmVhbS0+cGF1c2UoKSk7Cit9CisKK3N0YXR1c190IFN0cmVhbU91dEhhbEhpZGw6OnJlc3VtZSgpIHsKKyAgICBpZiAobVN0cmVhbSA9PSAwKSByZXR1cm4gTk9fSU5JVDsKKyAgICByZXR1cm4gcHJvY2Vzc1JldHVybigicGF1c2UiLCBtU3RyZWFtLT5yZXN1bWUoKSk7Cit9CisKK3N0YXR1c190IFN0cmVhbU91dEhhbEhpZGw6OnN1cHBvcnRzRHJhaW4oYm9vbCAqc3VwcG9ydHNEcmFpbikgeworICAgIGlmIChtU3RyZWFtID09IDApIHJldHVybiBOT19JTklUOworICAgIHJldHVybiBwcm9jZXNzUmV0dXJuKCJzdXBwb3J0c0RyYWluIiwgbVN0cmVhbS0+c3VwcG9ydHNEcmFpbigpLCBzdXBwb3J0c0RyYWluKTsKK30KKworc3RhdHVzX3QgU3RyZWFtT3V0SGFsSGlkbDo6ZHJhaW4oYm9vbCBlYXJseU5vdGlmeSkgeworICAgIGlmIChtU3RyZWFtID09IDApIHJldHVybiBOT19JTklUOworICAgIHJldHVybiBwcm9jZXNzUmV0dXJuKAorICAgICAgICAgICAgImRyYWluIiwgbVN0cmVhbS0+ZHJhaW4oZWFybHlOb3RpZnkgPyBBdWRpb0RyYWluOjpFQVJMWV9OT1RJRlkgOiBBdWRpb0RyYWluOjpBTEwpKTsKK30KKworc3RhdHVzX3QgU3RyZWFtT3V0SGFsSGlkbDo6Zmx1c2goKSB7CisgICAgaWYgKG1TdHJlYW0gPT0gMCkgcmV0dXJuIE5PX0lOSVQ7CisgICAgcmV0dXJuIHByb2Nlc3NSZXR1cm4oInBhdXNlIiwgbVN0cmVhbS0+Zmx1c2goKSk7Cit9CisKK3N0YXR1c190IFN0cmVhbU91dEhhbEhpZGw6OmdldFByZXNlbnRhdGlvblBvc2l0aW9uKHVpbnQ2NF90ICpmcmFtZXMsIHN0cnVjdCB0aW1lc3BlYyAqdGltZXN0YW1wKSB7CisgICAgaWYgKG1TdHJlYW0gPT0gMCkgcmV0dXJuIE5PX0lOSVQ7CisgICAgaWYgKG1Xcml0ZXJDbGllbnQgPT0gZ2V0dGlkKCkgJiYgbUNvbW1hbmRNUSkgeworICAgICAgICByZXR1cm4gY2FsbFdyaXRlclRocmVhZCgKKyAgICAgICAgICAgICAgICBXcml0ZUNvbW1hbmQ6OkdFVF9QUkVTRU5UQVRJT05fUE9TSVRJT04sICJnZXRQcmVzZW50YXRpb25Qb3NpdGlvbiIsIG51bGxwdHIsIDAsCisgICAgICAgICAgICAgICAgWyZdKGNvbnN0IFdyaXRlU3RhdHVzJiB3cml0ZVN0YXR1cykgeworICAgICAgICAgICAgICAgICAgICAqZnJhbWVzID0gd3JpdGVTdGF0dXMucmVwbHkucHJlc2VudGF0aW9uUG9zaXRpb24uZnJhbWVzOworICAgICAgICAgICAgICAgICAgICB0aW1lc3RhbXAtPnR2X3NlYyA9IHdyaXRlU3RhdHVzLnJlcGx5LnByZXNlbnRhdGlvblBvc2l0aW9uLnRpbWVTdGFtcC50dlNlYzsKKyAgICAgICAgICAgICAgICAgICAgdGltZXN0YW1wLT50dl9uc2VjID0gd3JpdGVTdGF0dXMucmVwbHkucHJlc2VudGF0aW9uUG9zaXRpb24udGltZVN0YW1wLnR2TlNlYzsKKyAgICAgICAgICAgICAgICB9KTsKKyAgICB9IGVsc2UgeworICAgICAgICBSZXN1bHQgcmV0dmFsOworICAgICAgICBSZXR1cm48dm9pZD4gcmV0ID0gbVN0cmVhbS0+Z2V0UHJlc2VudGF0aW9uUG9zaXRpb24oCisgICAgICAgICAgICAgICAgWyZdKFJlc3VsdCByLCB1aW50NjRfdCBoaWRsRnJhbWVzLCBjb25zdCBUaW1lU3BlYyYgaGlkbFRpbWVTdGFtcCkgeworICAgICAgICAgICAgICAgICAgICByZXR2YWwgPSByOworICAgICAgICAgICAgICAgICAgICBpZiAocmV0dmFsID09IFJlc3VsdDo6T0spIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICpmcmFtZXMgPSBoaWRsRnJhbWVzOworICAgICAgICAgICAgICAgICAgICAgICAgdGltZXN0YW1wLT50dl9zZWMgPSBoaWRsVGltZVN0YW1wLnR2U2VjOworICAgICAgICAgICAgICAgICAgICAgICAgdGltZXN0YW1wLT50dl9uc2VjID0gaGlkbFRpbWVTdGFtcC50dk5TZWM7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9KTsKKyAgICAgICAgcmV0dXJuIHByb2Nlc3NSZXR1cm4oImdldFByZXNlbnRhdGlvblBvc2l0aW9uIiwgcmV0LCByZXR2YWwpOworICAgIH0KK30KKworI2lmIE1BSk9SX1ZFUlNJT04gPT0gMgorc3RhdHVzX3QgU3RyZWFtT3V0SGFsSGlkbDo6dXBkYXRlU291cmNlTWV0YWRhdGEoY29uc3QgU291cmNlTWV0YWRhdGEmIC8qIHNvdXJjZU1ldGFkYXRhICovKSB7CisgICAgLy8gQXVkaW8gSEFMIFYyLjAgZG9lcyBub3Qgc3VwcG9ydCBwcm9wYWdhdGluZyBzb3VyY2UgbWV0YWRhdGEKKyAgICByZXR1cm4gSU5WQUxJRF9PUEVSQVRJT047Cit9CisjZWxpZiBNQUpPUl9WRVJTSU9OID09IDQKKy8qKiBUcmFuc2Zvcm0gYSBzdGFuZGFyZCBjb2xsZWN0aW9uIHRvIGFuIEhJREwgdmVjdG9yLiAqLwordGVtcGxhdGUgPGNsYXNzIFZhbHVlcywgY2xhc3MgRWxlbWVudENvbnZlcnRlcj4KK3N0YXRpYyBhdXRvIHRyYW5zZm9ybVRvSGlkbFZlYyhjb25zdCBWYWx1ZXMmIHZhbHVlcywgRWxlbWVudENvbnZlcnRlciBjb252ZXJ0ZXIpIHsKKyAgICBoaWRsX3ZlYzxkZWNsdHlwZShjb252ZXJ0ZXIoKnZhbHVlcy5iZWdpbigpKSk+IHJlc3VsdHt2YWx1ZXMuc2l6ZSgpfTsKKyAgICB1c2luZyBuYW1lc3BhY2Ugc3RkOworICAgIHRyYW5zZm9ybShiZWdpbih2YWx1ZXMpLCBlbmQodmFsdWVzKSwgYmVnaW4ocmVzdWx0KSwgY29udmVydGVyKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCitzdGF0dXNfdCBTdHJlYW1PdXRIYWxIaWRsOjp1cGRhdGVTb3VyY2VNZXRhZGF0YShjb25zdCBTb3VyY2VNZXRhZGF0YSYgc291cmNlTWV0YWRhdGEpIHsKKyAgICBoYXJkd2FyZTo6YXVkaW86OkNQUF9WRVJTSU9OOjpTb3VyY2VNZXRhZGF0YSBoYWxNZXRhZGF0YSA9IHsKKyAgICAgICAgLnRyYWNrcyA9IHRyYW5zZm9ybVRvSGlkbFZlYyhzb3VyY2VNZXRhZGF0YS50cmFja3MsCisgICAgICAgICAgICAgIFtdKGNvbnN0IHBsYXliYWNrX3RyYWNrX21ldGFkYXRhJiBtZXRhZGF0YSkgLT4gUGxheWJhY2tUcmFja01ldGFkYXRhIHsKKyAgICAgICAgICAgICAgICAgIHJldHVybiB7CisgICAgICAgICAgICAgICAgICAgIC51c2FnZT1zdGF0aWNfY2FzdDxBdWRpb1VzYWdlPihtZXRhZGF0YS51c2FnZSksCisgICAgICAgICAgICAgICAgICAgIC5jb250ZW50VHlwZT1zdGF0aWNfY2FzdDxBdWRpb0NvbnRlbnRUeXBlPihtZXRhZGF0YS5jb250ZW50X3R5cGUpLAorICAgICAgICAgICAgICAgICAgICAuZ2Fpbj1tZXRhZGF0YS5nYWluLAorICAgICAgICAgICAgICAgICAgfTsKKyAgICAgICAgICAgICAgfSl9OworICAgIHJldHVybiBwcm9jZXNzUmV0dXJuKCJ1cGRhdGVTb3VyY2VNZXRhZGF0YSIsIG1TdHJlYW0tPnVwZGF0ZVNvdXJjZU1ldGFkYXRhKGhhbE1ldGFkYXRhKSk7Cit9CisjZW5kaWYKKwordm9pZCBTdHJlYW1PdXRIYWxIaWRsOjpvbldyaXRlUmVhZHkoKSB7CisgICAgc3A8U3RyZWFtT3V0SGFsSW50ZXJmYWNlQ2FsbGJhY2s+IGNhbGxiYWNrID0gbUNhbGxiYWNrLnByb21vdGUoKTsKKyAgICBpZiAoY2FsbGJhY2sgPT0gMCkgcmV0dXJuOworICAgIEFMT0dWKCJhc3luY0NhbGxiYWNrIG9uV3JpdGVSZWFkeSIpOworICAgIGNhbGxiYWNrLT5vbldyaXRlUmVhZHkoKTsKK30KKwordm9pZCBTdHJlYW1PdXRIYWxIaWRsOjpvbkRyYWluUmVhZHkoKSB7CisgICAgc3A8U3RyZWFtT3V0SGFsSW50ZXJmYWNlQ2FsbGJhY2s+IGNhbGxiYWNrID0gbUNhbGxiYWNrLnByb21vdGUoKTsKKyAgICBpZiAoY2FsbGJhY2sgPT0gMCkgcmV0dXJuOworICAgIEFMT0dWKCJhc3luY0NhbGxiYWNrIG9uRHJhaW5SZWFkeSIpOworICAgIGNhbGxiYWNrLT5vbkRyYWluUmVhZHkoKTsKK30KKwordm9pZCBTdHJlYW1PdXRIYWxIaWRsOjpvbkVycm9yKCkgeworICAgIHNwPFN0cmVhbU91dEhhbEludGVyZmFjZUNhbGxiYWNrPiBjYWxsYmFjayA9IG1DYWxsYmFjay5wcm9tb3RlKCk7CisgICAgaWYgKGNhbGxiYWNrID09IDApIHJldHVybjsKKyAgICBBTE9HVigiYXN5bmNDYWxsYmFjayBvbkVycm9yIik7CisgICAgY2FsbGJhY2stPm9uRXJyb3IoKTsKK30KKworCitTdHJlYW1JbkhhbEhpZGw6OlN0cmVhbUluSGFsSGlkbChjb25zdCBzcDxJU3RyZWFtSW4+JiBzdHJlYW0pCisgICAgICAgIDogU3RyZWFtSGFsSGlkbChzdHJlYW0uZ2V0KCkpLCBtU3RyZWFtKHN0cmVhbSksIG1SZWFkZXJDbGllbnQoMCksIG1FZkdyb3VwKG51bGxwdHIpIHsKK30KKworU3RyZWFtSW5IYWxIaWRsOjp+U3RyZWFtSW5IYWxIaWRsKCkgeworICAgIGlmIChtU3RyZWFtICE9IDApIHsKKyAgICAgICAgcHJvY2Vzc1JldHVybigiY2xvc2UiLCBtU3RyZWFtLT5jbG9zZSgpKTsKKyAgICAgICAgbVN0cmVhbS5jbGVhcigpOworICAgICAgICBoYXJkd2FyZTo6SVBDVGhyZWFkU3RhdGU6OnNlbGYoKS0+Zmx1c2hDb21tYW5kcygpOworICAgIH0KKyAgICBpZiAobUVmR3JvdXApIHsKKyAgICAgICAgRXZlbnRGbGFnOjpkZWxldGVFdmVudEZsYWcoJm1FZkdyb3VwKTsKKyAgICB9Cit9CisKK3N0YXR1c190IFN0cmVhbUluSGFsSGlkbDo6Z2V0RnJhbWVTaXplKHNpemVfdCAqc2l6ZSkgeworICAgIGlmIChtU3RyZWFtID09IDApIHJldHVybiBOT19JTklUOworICAgIHJldHVybiBwcm9jZXNzUmV0dXJuKCJnZXRGcmFtZVNpemUiLCBtU3RyZWFtLT5nZXRGcmFtZVNpemUoKSwgc2l6ZSk7Cit9CisKK3N0YXR1c190IFN0cmVhbUluSGFsSGlkbDo6c2V0R2FpbihmbG9hdCBnYWluKSB7CisgICAgaWYgKG1TdHJlYW0gPT0gMCkgcmV0dXJuIE5PX0lOSVQ7CisgICAgcmV0dXJuIHByb2Nlc3NSZXR1cm4oInNldEdhaW4iLCBtU3RyZWFtLT5zZXRHYWluKGdhaW4pKTsKK30KKworc3RhdHVzX3QgU3RyZWFtSW5IYWxIaWRsOjpyZWFkKHZvaWQgKmJ1ZmZlciwgc2l6ZV90IGJ5dGVzLCBzaXplX3QgKnJlYWQpIHsKKyAgICBpZiAobVN0cmVhbSA9PSAwKSByZXR1cm4gTk9fSU5JVDsKKyAgICAqcmVhZCA9IDA7CisKKyAgICBpZiAoYnl0ZXMgPT0gMCAmJiAhbURhdGFNUSkgeworICAgICAgICAvLyBDYW4ndCBkZXRlcm1pbmUgdGhlIHNpemUgZm9yIHRoZSBNUSBidWZmZXIuIFdhaXQgZm9yIGEgbm9uLWVtcHR5IHJlYWQgcmVxdWVzdC4KKyAgICAgICAgcmV0dXJuIE9LOworICAgIH0KKworICAgIHN0YXR1c190IHN0YXR1czsKKyAgICBpZiAoIW1EYXRhTVEgJiYgKHN0YXR1cyA9IHByZXBhcmVGb3JSZWFkaW5nKGJ5dGVzKSkgIT0gT0spIHsKKyAgICAgICAgcmV0dXJuIHN0YXR1czsKKyAgICB9CisKKyAgICBSZWFkUGFyYW1ldGVycyBwYXJhbXM7CisgICAgcGFyYW1zLmNvbW1hbmQgPSBSZWFkQ29tbWFuZDo6UkVBRDsKKyAgICBwYXJhbXMucGFyYW1zLnJlYWQgPSBieXRlczsKKyAgICBzdGF0dXMgPSBjYWxsUmVhZGVyVGhyZWFkKHBhcmFtcywgInJlYWQiLAorICAgICAgICAgICAgWyZdKGNvbnN0IFJlYWRTdGF0dXMmIHJlYWRTdGF0dXMpIHsKKyAgICAgICAgICAgICAgICBjb25zdCBzaXplX3QgYXZhaWxUb1JlYWQgPSBtRGF0YU1RLT5hdmFpbGFibGVUb1JlYWQoKTsKKyAgICAgICAgICAgICAgICBpZiAoIW1EYXRhTVEtPnJlYWQoc3RhdGljX2Nhc3Q8dWludDhfdCo+KGJ1ZmZlciksIHN0ZDo6bWluKGJ5dGVzLCBhdmFpbFRvUmVhZCkpKSB7CisgICAgICAgICAgICAgICAgICAgIEFMT0dFKCJkYXRhIG1lc3NhZ2UgcXVldWUgcmVhZCBmYWlsZWQgZm9yIFwicmVhZFwiIik7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIEFMT0dXX0lGKGF2YWlsVG9SZWFkICE9IHJlYWRTdGF0dXMucmVwbHkucmVhZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICJIQUwgcmVhZCByZXBvcnQgaW5jb25zaXN0ZW50OiBtcSA9ICVkLCBzdGF0dXMgPSAlZCIsCisgICAgICAgICAgICAgICAgICAgICAgICAoaW50MzJfdClhdmFpbFRvUmVhZCwgKGludDMyX3QpcmVhZFN0YXR1cy5yZXBseS5yZWFkKTsKKyAgICAgICAgICAgICAgICAqcmVhZCA9IHJlYWRTdGF0dXMucmVwbHkucmVhZDsKKyAgICAgICAgICAgIH0pOworICAgIG1TdHJlYW1Qb3dlckxvZy5sb2coYnVmZmVyLCAqcmVhZCk7CisgICAgcmV0dXJuIHN0YXR1czsKK30KKworc3RhdHVzX3QgU3RyZWFtSW5IYWxIaWRsOjpjYWxsUmVhZGVyVGhyZWFkKAorICAgICAgICBjb25zdCBSZWFkUGFyYW1ldGVycyYgcGFyYW1zLCBjb25zdCBjaGFyKiBjbWROYW1lLAorICAgICAgICBTdHJlYW1JbkhhbEhpZGw6OlJlYWRlckNhbGxiYWNrIGNhbGxiYWNrKSB7CisgICAgaWYgKCFtQ29tbWFuZE1RLT53cml0ZSgmcGFyYW1zKSkgeworICAgICAgICBBTE9HVygiY29tbWFuZCBtZXNzYWdlIHF1ZXVlIHdyaXRlIGZhaWxlZCIpOworICAgICAgICByZXR1cm4gLUVBR0FJTjsKKyAgICB9CisgICAgbUVmR3JvdXAtPndha2Uoc3RhdGljX2Nhc3Q8dWludDMyX3Q+KE1lc3NhZ2VRdWV1ZUZsYWdCaXRzOjpOT1RfRlVMTCkpOworCisgICAgLy8gVE9ETzogUmVtb3ZlIG1hbnVhbCBldmVudCBmbGFnIGhhbmRsaW5nIG9uY2UgYmxvY2tpbmcgTVEgaXMgaW1wbGVtZW50ZWQuIGIvMzM4MTU0MjIKKyAgICB1aW50MzJfdCBlZlN0YXRlID0gMDsKK3JldHJ5OgorICAgIHN0YXR1c190IHJldCA9IG1FZkdyb3VwLT53YWl0KHN0YXRpY19jYXN0PHVpbnQzMl90PihNZXNzYWdlUXVldWVGbGFnQml0czo6Tk9UX0VNUFRZKSwgJmVmU3RhdGUpOworICAgIGlmIChlZlN0YXRlICYgc3RhdGljX2Nhc3Q8dWludDMyX3Q+KE1lc3NhZ2VRdWV1ZUZsYWdCaXRzOjpOT1RfRU1QVFkpKSB7CisgICAgICAgIFJlYWRTdGF0dXMgcmVhZFN0YXR1czsKKyAgICAgICAgcmVhZFN0YXR1cy5yZXR2YWwgPSBSZXN1bHQ6Ok5PVF9JTklUSUFMSVpFRDsKKyAgICAgICAgaWYgKCFtU3RhdHVzTVEtPnJlYWQoJnJlYWRTdGF0dXMpKSB7CisgICAgICAgICAgICBBTE9HRSgic3RhdHVzIG1lc3NhZ2UgcmVhZCBmYWlsZWQgZm9yIFwiJXNcIiIsIGNtZE5hbWUpOworICAgICAgICB9CisgICAgICAgICBpZiAocmVhZFN0YXR1cy5yZXR2YWwgPT0gUmVzdWx0OjpPSykgeworICAgICAgICAgICAgcmV0ID0gT0s7CisgICAgICAgICAgICBjYWxsYmFjayhyZWFkU3RhdHVzKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHJldCA9IHByb2Nlc3NSZXR1cm4oY21kTmFtZSwgcmVhZFN0YXR1cy5yZXR2YWwpOworICAgICAgICB9CisgICAgICAgIHJldHVybiByZXQ7CisgICAgfQorICAgIGlmIChyZXQgPT0gLUVBR0FJTiB8fCByZXQgPT0gLUVJTlRSKSB7CisgICAgICAgIC8vIFNwdXJpb3VzIHdha2V1cC4gVGhpcyBub3JtYWxseSByZXRyaWVzIG5vIG1vcmUgdGhhbiBvbmNlLgorICAgICAgICBnb3RvIHJldHJ5OworICAgIH0KKyAgICByZXR1cm4gcmV0OworfQorCitzdGF0dXNfdCBTdHJlYW1JbkhhbEhpZGw6OnByZXBhcmVGb3JSZWFkaW5nKHNpemVfdCBidWZmZXJTaXplKSB7CisgICAgc3RkOjp1bmlxdWVfcHRyPENvbW1hbmRNUT4gdGVtcENvbW1hbmRNUTsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8RGF0YU1RPiB0ZW1wRGF0YU1ROworICAgIHN0ZDo6dW5pcXVlX3B0cjxTdGF0dXNNUT4gdGVtcFN0YXR1c01ROworICAgIFJlc3VsdCByZXR2YWw7CisgICAgcGlkX3QgaGFsVGhyZWFkUGlkLCBoYWxUaHJlYWRUaWQ7CisgICAgUmV0dXJuPHZvaWQ+IHJldCA9IG1TdHJlYW0tPnByZXBhcmVGb3JSZWFkaW5nKAorICAgICAgICAgICAgMSwgYnVmZmVyU2l6ZSwKKyAgICAgICAgICAgIFsmXShSZXN1bHQgciwKKyAgICAgICAgICAgICAgICAgICAgY29uc3QgQ29tbWFuZE1ROjpEZXNjcmlwdG9yJiBjb21tYW5kTVEsCisgICAgICAgICAgICAgICAgICAgIGNvbnN0IERhdGFNUTo6RGVzY3JpcHRvciYgZGF0YU1RLAorICAgICAgICAgICAgICAgICAgICBjb25zdCBTdGF0dXNNUTo6RGVzY3JpcHRvciYgc3RhdHVzTVEsCisgICAgICAgICAgICAgICAgICAgIGNvbnN0IFRocmVhZEluZm8mIGhhbFRocmVhZEluZm8pIHsKKyAgICAgICAgICAgICAgICByZXR2YWwgPSByOworICAgICAgICAgICAgICAgIGlmIChyZXR2YWwgPT0gUmVzdWx0OjpPSykgeworICAgICAgICAgICAgICAgICAgICB0ZW1wQ29tbWFuZE1RLnJlc2V0KG5ldyBDb21tYW5kTVEoY29tbWFuZE1RKSk7CisgICAgICAgICAgICAgICAgICAgIHRlbXBEYXRhTVEucmVzZXQobmV3IERhdGFNUShkYXRhTVEpKTsKKyAgICAgICAgICAgICAgICAgICAgdGVtcFN0YXR1c01RLnJlc2V0KG5ldyBTdGF0dXNNUShzdGF0dXNNUSkpOworICAgICAgICAgICAgICAgICAgICBpZiAodGVtcERhdGFNUS0+aXNWYWxpZCgpICYmIHRlbXBEYXRhTVEtPmdldEV2ZW50RmxhZ1dvcmQoKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgRXZlbnRGbGFnOjpjcmVhdGVFdmVudEZsYWcodGVtcERhdGFNUS0+Z2V0RXZlbnRGbGFnV29yZCgpLCAmbUVmR3JvdXApOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGhhbFRocmVhZFBpZCA9IGhhbFRocmVhZEluZm8ucGlkOworICAgICAgICAgICAgICAgICAgICBoYWxUaHJlYWRUaWQgPSBoYWxUaHJlYWRJbmZvLnRpZDsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9KTsKKyAgICBpZiAoIXJldC5pc09rKCkgfHwgcmV0dmFsICE9IFJlc3VsdDo6T0spIHsKKyAgICAgICAgcmV0dXJuIHByb2Nlc3NSZXR1cm4oInByZXBhcmVGb3JSZWFkaW5nIiwgcmV0LCByZXR2YWwpOworICAgIH0KKyAgICBpZiAoIXRlbXBDb21tYW5kTVEgfHwgIXRlbXBDb21tYW5kTVEtPmlzVmFsaWQoKSB8fAorICAgICAgICAgICAgIXRlbXBEYXRhTVEgfHwgIXRlbXBEYXRhTVEtPmlzVmFsaWQoKSB8fAorICAgICAgICAgICAgIXRlbXBTdGF0dXNNUSB8fCAhdGVtcFN0YXR1c01RLT5pc1ZhbGlkKCkgfHwKKyAgICAgICAgICAgICFtRWZHcm91cCkgeworICAgICAgICBBTE9HRV9JRighdGVtcENvbW1hbmRNUSwgIkZhaWxlZCB0byBvYnRhaW4gY29tbWFuZCBtZXNzYWdlIHF1ZXVlIGZvciB3cml0aW5nIik7CisgICAgICAgIEFMT0dFX0lGKHRlbXBDb21tYW5kTVEgJiYgIXRlbXBDb21tYW5kTVEtPmlzVmFsaWQoKSwKKyAgICAgICAgICAgICAgICAiQ29tbWFuZCBtZXNzYWdlIHF1ZXVlIGZvciB3cml0aW5nIGlzIGludmFsaWQiKTsKKyAgICAgICAgQUxPR0VfSUYoIXRlbXBEYXRhTVEsICJGYWlsZWQgdG8gb2J0YWluIGRhdGEgbWVzc2FnZSBxdWV1ZSBmb3IgcmVhZGluZyIpOworICAgICAgICBBTE9HRV9JRih0ZW1wRGF0YU1RICYmICF0ZW1wRGF0YU1RLT5pc1ZhbGlkKCksICJEYXRhIG1lc3NhZ2UgcXVldWUgZm9yIHJlYWRpbmcgaXMgaW52YWxpZCIpOworICAgICAgICBBTE9HRV9JRighdGVtcFN0YXR1c01RLCAiRmFpbGVkIHRvIG9idGFpbiBzdGF0dXMgbWVzc2FnZSBxdWV1ZSBmb3IgcmVhZGluZyIpOworICAgICAgICBBTE9HRV9JRih0ZW1wU3RhdHVzTVEgJiYgIXRlbXBTdGF0dXNNUS0+aXNWYWxpZCgpLAorICAgICAgICAgICAgICAgICJTdGF0dXMgbWVzc2FnZSBxdWV1ZSBmb3IgcmVhZGluZyBpcyBpbnZhbGlkIik7CisgICAgICAgIEFMT0dFX0lGKCFtRWZHcm91cCwgIkV2ZW50IGZsYWcgY3JlYXRpb24gZm9yIHJlYWRpbmcgZmFpbGVkIik7CisgICAgICAgIHJldHVybiBOT19JTklUOworICAgIH0KKyAgICByZXF1ZXN0SGFsVGhyZWFkUHJpb3JpdHkoaGFsVGhyZWFkUGlkLCBoYWxUaHJlYWRUaWQpOworCisgICAgbUNvbW1hbmRNUSA9IHN0ZDo6bW92ZSh0ZW1wQ29tbWFuZE1RKTsKKyAgICBtRGF0YU1RID0gc3RkOjptb3ZlKHRlbXBEYXRhTVEpOworICAgIG1TdGF0dXNNUSA9IHN0ZDo6bW92ZSh0ZW1wU3RhdHVzTVEpOworICAgIG1SZWFkZXJDbGllbnQgPSBnZXR0aWQoKTsKKyAgICByZXR1cm4gT0s7Cit9CisKK3N0YXR1c190IFN0cmVhbUluSGFsSGlkbDo6Z2V0SW5wdXRGcmFtZXNMb3N0KHVpbnQzMl90ICpmcmFtZXNMb3N0KSB7CisgICAgaWYgKG1TdHJlYW0gPT0gMCkgcmV0dXJuIE5PX0lOSVQ7CisgICAgcmV0dXJuIHByb2Nlc3NSZXR1cm4oImdldElucHV0RnJhbWVzTG9zdCIsIG1TdHJlYW0tPmdldElucHV0RnJhbWVzTG9zdCgpLCBmcmFtZXNMb3N0KTsKK30KKworc3RhdHVzX3QgU3RyZWFtSW5IYWxIaWRsOjpnZXRDYXB0dXJlUG9zaXRpb24oaW50NjRfdCAqZnJhbWVzLCBpbnQ2NF90ICp0aW1lKSB7CisgICAgaWYgKG1TdHJlYW0gPT0gMCkgcmV0dXJuIE5PX0lOSVQ7CisgICAgaWYgKG1SZWFkZXJDbGllbnQgPT0gZ2V0dGlkKCkgJiYgbUNvbW1hbmRNUSkgeworICAgICAgICBSZWFkUGFyYW1ldGVycyBwYXJhbXM7CisgICAgICAgIHBhcmFtcy5jb21tYW5kID0gUmVhZENvbW1hbmQ6OkdFVF9DQVBUVVJFX1BPU0lUSU9OOworICAgICAgICByZXR1cm4gY2FsbFJlYWRlclRocmVhZChwYXJhbXMsICJnZXRDYXB0dXJlUG9zaXRpb24iLAorICAgICAgICAgICAgICAgIFsmXShjb25zdCBSZWFkU3RhdHVzJiByZWFkU3RhdHVzKSB7CisgICAgICAgICAgICAgICAgICAgICpmcmFtZXMgPSByZWFkU3RhdHVzLnJlcGx5LmNhcHR1cmVQb3NpdGlvbi5mcmFtZXM7CisgICAgICAgICAgICAgICAgICAgICp0aW1lID0gcmVhZFN0YXR1cy5yZXBseS5jYXB0dXJlUG9zaXRpb24udGltZTsKKyAgICAgICAgICAgICAgICB9KTsKKyAgICB9IGVsc2UgeworICAgICAgICBSZXN1bHQgcmV0dmFsOworICAgICAgICBSZXR1cm48dm9pZD4gcmV0ID0gbVN0cmVhbS0+Z2V0Q2FwdHVyZVBvc2l0aW9uKAorICAgICAgICAgICAgICAgIFsmXShSZXN1bHQgciwgdWludDY0X3QgaGlkbEZyYW1lcywgdWludDY0X3QgaGlkbFRpbWUpIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dmFsID0gcjsKKyAgICAgICAgICAgICAgICAgICAgaWYgKHJldHZhbCA9PSBSZXN1bHQ6Ok9LKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAqZnJhbWVzID0gaGlkbEZyYW1lczsKKyAgICAgICAgICAgICAgICAgICAgICAgICp0aW1lID0gaGlkbFRpbWU7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9KTsKKyAgICAgICAgcmV0dXJuIHByb2Nlc3NSZXR1cm4oImdldENhcHR1cmVQb3NpdGlvbiIsIHJldCwgcmV0dmFsKTsKKyAgICB9Cit9CisKKyNpZiBNQUpPUl9WRVJTSU9OID09IDIKK3N0YXR1c190IFN0cmVhbUluSGFsSGlkbDo6Z2V0QWN0aXZlTWljcm9waG9uZXMoCisgICAgICAgIHN0ZDo6dmVjdG9yPG1lZGlhOjpNaWNyb3Bob25lSW5mbz4gKm1pY3JvcGhvbmVzIF9fdW51c2VkKSB7CisgICAgaWYgKG1TdHJlYW0gPT0gMCkgcmV0dXJuIE5PX0lOSVQ7CisgICAgcmV0dXJuIElOVkFMSURfT1BFUkFUSU9OOworfQorCitzdGF0dXNfdCBTdHJlYW1JbkhhbEhpZGw6OnVwZGF0ZVNpbmtNZXRhZGF0YShjb25zdCBTaW5rTWV0YWRhdGEmIC8qIHNpbmtNZXRhZGF0YSAqLykgeworICAgIC8vIEF1ZGlvIEhBTCBWMi4wIGRvZXMgbm90IHN1cHBvcnQgcHJvcGFnYXRpbmcgc2luayBtZXRhZGF0YQorICAgIHJldHVybiBJTlZBTElEX09QRVJBVElPTjsKK30KKworI2VsaWYgTUFKT1JfVkVSU0lPTiA9PSA0CitzdGF0dXNfdCBTdHJlYW1JbkhhbEhpZGw6OmdldEFjdGl2ZU1pY3JvcGhvbmVzKAorICAgICAgICBzdGQ6OnZlY3RvcjxtZWRpYTo6TWljcm9waG9uZUluZm8+ICptaWNyb3Bob25lc0luZm8pIHsKKyAgICBpZiAoIW1TdHJlYW0pIHJldHVybiBOT19JTklUOworICAgIFJlc3VsdCByZXR2YWw7CisgICAgUmV0dXJuPHZvaWQ+IHJldCA9IG1TdHJlYW0tPmdldEFjdGl2ZU1pY3JvcGhvbmVzKAorICAgICAgICAgICAgWyZdKFJlc3VsdCByLCBoaWRsX3ZlYzxNaWNyb3Bob25lSW5mbz4gbWljQXJyYXlIYWwpIHsKKyAgICAgICAgcmV0dmFsID0gcjsKKyAgICAgICAgZm9yIChzaXplX3QgayA9IDA7IGsgPCBtaWNBcnJheUhhbC5zaXplKCk7IGsrKykgeworICAgICAgICAgICAgYXVkaW9fbWljcm9waG9uZV9jaGFyYWN0ZXJpc3RpY190IGRzdDsKKyAgICAgICAgICAgIC8vIGNvbnZlcnQKKyAgICAgICAgICAgIG1pY3JvcGhvbmVJbmZvVG9IYWwobWljQXJyYXlIYWxba10sICZkc3QpOworICAgICAgICAgICAgbWVkaWE6Ok1pY3JvcGhvbmVJbmZvIG1pY3JvcGhvbmUgPSBtZWRpYTo6TWljcm9waG9uZUluZm8oZHN0KTsKKyAgICAgICAgICAgIG1pY3JvcGhvbmVzSW5mby0+cHVzaF9iYWNrKG1pY3JvcGhvbmUpOworICAgICAgICB9CisgICAgfSk7CisgICAgcmV0dXJuIHByb2Nlc3NSZXR1cm4oImdldEFjdGl2ZU1pY3JvcGhvbmVzIiwgcmV0LCByZXR2YWwpOworfQorCitzdGF0dXNfdCBTdHJlYW1JbkhhbEhpZGw6OnVwZGF0ZVNpbmtNZXRhZGF0YShjb25zdCBTaW5rTWV0YWRhdGEmIHNpbmtNZXRhZGF0YSkgeworICAgIGhhcmR3YXJlOjphdWRpbzo6Q1BQX1ZFUlNJT046OlNpbmtNZXRhZGF0YSBoYWxNZXRhZGF0YSA9IHsKKyAgICAgICAgLnRyYWNrcyA9IHRyYW5zZm9ybVRvSGlkbFZlYyhzaW5rTWV0YWRhdGEudHJhY2tzLAorICAgICAgICAgICAgICBbXShjb25zdCByZWNvcmRfdHJhY2tfbWV0YWRhdGEmIG1ldGFkYXRhKSAtPiBSZWNvcmRUcmFja01ldGFkYXRhIHsKKyAgICAgICAgICAgICAgICAgIHJldHVybiB7CisgICAgICAgICAgICAgICAgICAgIC5zb3VyY2U9c3RhdGljX2Nhc3Q8QXVkaW9Tb3VyY2U+KG1ldGFkYXRhLnNvdXJjZSksCisgICAgICAgICAgICAgICAgICAgIC5nYWluPW1ldGFkYXRhLmdhaW4sCisgICAgICAgICAgICAgICAgICB9OworICAgICAgICAgICAgICB9KX07CisgICAgcmV0dXJuIHByb2Nlc3NSZXR1cm4oInVwZGF0ZVNpbmtNZXRhZGF0YSIsIG1TdHJlYW0tPnVwZGF0ZVNpbmtNZXRhZGF0YShoYWxNZXRhZGF0YSkpOworfQorI2VuZGlmCisKK30gLy8gbmFtZXNwYWNlIENQUF9WRVJTSU9OCit9IC8vIG5hbWVzcGFjZSBhbmRyb2lkCmRpZmYgLS1naXQgYS9tZWRpYS9saWJhdWRpb2hhbC9pbXBsL1N0cmVhbUhhbEhpZGwuaCBiL21lZGlhL2xpYmF1ZGlvaGFsL2ltcGwvU3RyZWFtSGFsSGlkbC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk1ZWM3ZjEKLS0tIC9kZXYvbnVsbAorKysgYi9tZWRpYS9saWJhdWRpb2hhbC9pbXBsL1N0cmVhbUhhbEhpZGwuaApAQCAtMCwwICsxLDI1MyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNiBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCisKKyNpZm5kZWYgQU5EUk9JRF9IQVJEV0FSRV9TVFJFQU1fSEFMX0hJRExfSAorI2RlZmluZSBBTkRST0lEX0hBUkRXQVJFX1NUUkVBTV9IQUxfSElETF9ICisKKyNpbmNsdWRlIDxhdG9taWM+CisKKyNpbmNsdWRlIDxhbmRyb2lkL2hhcmR3YXJlL2F1ZGlvLzIuMC9JU3RyZWFtLmg+CisjaW5jbHVkZSA8YW5kcm9pZC9oYXJkd2FyZS9hdWRpby80LjAvSVN0cmVhbS5oPgorI2luY2x1ZGUgPGFuZHJvaWQvaGFyZHdhcmUvYXVkaW8vMi4wL0lTdHJlYW1Jbi5oPgorI2luY2x1ZGUgPGFuZHJvaWQvaGFyZHdhcmUvYXVkaW8vNC4wL0lTdHJlYW1Jbi5oPgorI2luY2x1ZGUgPGFuZHJvaWQvaGFyZHdhcmUvYXVkaW8vMi4wL0lTdHJlYW1PdXQuaD4KKyNpbmNsdWRlIDxhbmRyb2lkL2hhcmR3YXJlL2F1ZGlvLzQuMC9JU3RyZWFtT3V0Lmg+CisjaW5jbHVkZSA8Zm1xL0V2ZW50RmxhZy5oPgorI2luY2x1ZGUgPGZtcS9NZXNzYWdlUXVldWUuaD4KKyNpbmNsdWRlIDxtZWRpYS9hdWRpb2hhbC9TdHJlYW1IYWxJbnRlcmZhY2UuaD4KKworI2luY2x1ZGUgIkNvbnZlcnNpb25IZWxwZXJIaWRsLmgiCisjaW5jbHVkZSAiU3RyZWFtUG93ZXJMb2cuaCIKKwordXNpbmcgOjphbmRyb2lkOjpoYXJkd2FyZTo6YXVkaW86OkNQUF9WRVJTSU9OOjpJU3RyZWFtOwordXNpbmcgOjphbmRyb2lkOjpoYXJkd2FyZTo6YXVkaW86OkNQUF9WRVJTSU9OOjpJU3RyZWFtSW47Cit1c2luZyA6OmFuZHJvaWQ6OmhhcmR3YXJlOjphdWRpbzo6Q1BQX1ZFUlNJT046OklTdHJlYW1PdXQ7Cit1c2luZyA6OmFuZHJvaWQ6OmhhcmR3YXJlOjpFdmVudEZsYWc7Cit1c2luZyA6OmFuZHJvaWQ6OmhhcmR3YXJlOjpNZXNzYWdlUXVldWU7Cit1c2luZyA6OmFuZHJvaWQ6OmhhcmR3YXJlOjpSZXR1cm47Cit1c2luZyBSZWFkUGFyYW1ldGVycyA9IDo6YW5kcm9pZDo6aGFyZHdhcmU6OmF1ZGlvOjpDUFBfVkVSU0lPTjo6SVN0cmVhbUluOjpSZWFkUGFyYW1ldGVyczsKK3VzaW5nIFJlYWRTdGF0dXMgPSA6OmFuZHJvaWQ6OmhhcmR3YXJlOjphdWRpbzo6Q1BQX1ZFUlNJT046OklTdHJlYW1Jbjo6UmVhZFN0YXR1czsKK3VzaW5nIFdyaXRlQ29tbWFuZCA9IDo6YW5kcm9pZDo6aGFyZHdhcmU6OmF1ZGlvOjpDUFBfVkVSU0lPTjo6SVN0cmVhbU91dDo6V3JpdGVDb21tYW5kOwordXNpbmcgV3JpdGVTdGF0dXMgPSA6OmFuZHJvaWQ6OmhhcmR3YXJlOjphdWRpbzo6Q1BQX1ZFUlNJT046OklTdHJlYW1PdXQ6OldyaXRlU3RhdHVzOworCituYW1lc3BhY2UgYW5kcm9pZCB7CituYW1lc3BhY2UgQ1BQX1ZFUlNJT04geworCitjbGFzcyBEZXZpY2VIYWxIaWRsOworCitjbGFzcyBTdHJlYW1IYWxIaWRsIDogcHVibGljIHZpcnR1YWwgU3RyZWFtSGFsSW50ZXJmYWNlLCBwdWJsaWMgQ29udmVyc2lvbkhlbHBlckhpZGwKK3sKKyAgcHVibGljOgorICAgIC8vIFJldHVybiB0aGUgc2FtcGxpbmcgcmF0ZSBpbiBIeiAtIGVnLiA0NDEwMC4KKyAgICB2aXJ0dWFsIHN0YXR1c190IGdldFNhbXBsZVJhdGUodWludDMyX3QgKnJhdGUpOworCisgICAgLy8gUmV0dXJuIHNpemUgb2YgaW5wdXQvb3V0cHV0IGJ1ZmZlciBpbiBieXRlcyBmb3IgdGhpcyBzdHJlYW0gLSBlZy4gNDgwMC4KKyAgICB2aXJ0dWFsIHN0YXR1c190IGdldEJ1ZmZlclNpemUoc2l6ZV90ICpzaXplKTsKKworICAgIC8vIFJldHVybiB0aGUgY2hhbm5lbCBtYXNrLgorICAgIHZpcnR1YWwgc3RhdHVzX3QgZ2V0Q2hhbm5lbE1hc2soYXVkaW9fY2hhbm5lbF9tYXNrX3QgKm1hc2spOworCisgICAgLy8gUmV0dXJuIHRoZSBhdWRpbyBmb3JtYXQgLSBlLmcuIEFVRElPX0ZPUk1BVF9QQ01fMTZfQklULgorICAgIHZpcnR1YWwgc3RhdHVzX3QgZ2V0Rm9ybWF0KGF1ZGlvX2Zvcm1hdF90ICpmb3JtYXQpOworCisgICAgLy8gQ29udmVuaWVuY2UgbWV0aG9kLgorICAgIHZpcnR1YWwgc3RhdHVzX3QgZ2V0QXVkaW9Qcm9wZXJ0aWVzKAorICAgICAgICAgICAgdWludDMyX3QgKnNhbXBsZVJhdGUsIGF1ZGlvX2NoYW5uZWxfbWFza190ICptYXNrLCBhdWRpb19mb3JtYXRfdCAqZm9ybWF0KTsKKworICAgIC8vIFNldCBhdWRpbyBzdHJlYW0gcGFyYW1ldGVycy4KKyAgICB2aXJ0dWFsIHN0YXR1c190IHNldFBhcmFtZXRlcnMoY29uc3QgU3RyaW5nOCYga3ZQYWlycyk7CisKKyAgICAvLyBHZXQgYXVkaW8gc3RyZWFtIHBhcmFtZXRlcnMuCisgICAgdmlydHVhbCBzdGF0dXNfdCBnZXRQYXJhbWV0ZXJzKGNvbnN0IFN0cmluZzgmIGtleXMsIFN0cmluZzggKnZhbHVlcyk7CisKKyAgICAvLyBBZGQgb3IgcmVtb3ZlIHRoZSBlZmZlY3Qgb24gdGhlIHN0cmVhbS4KKyAgICB2aXJ0dWFsIHN0YXR1c190IGFkZEVmZmVjdChzcDxFZmZlY3RIYWxJbnRlcmZhY2U+IGVmZmVjdCk7CisgICAgdmlydHVhbCBzdGF0dXNfdCByZW1vdmVFZmZlY3Qoc3A8RWZmZWN0SGFsSW50ZXJmYWNlPiBlZmZlY3QpOworCisgICAgLy8gUHV0IHRoZSBhdWRpbyBoYXJkd2FyZSBpbnB1dC9vdXRwdXQgaW50byBzdGFuZGJ5IG1vZGUuCisgICAgdmlydHVhbCBzdGF0dXNfdCBzdGFuZGJ5KCk7CisKKyAgICB2aXJ0dWFsIHN0YXR1c190IGR1bXAoaW50IGZkKTsKKworICAgIC8vIFN0YXJ0IGEgc3RyZWFtIG9wZXJhdGluZyBpbiBtbWFwIG1vZGUuCisgICAgdmlydHVhbCBzdGF0dXNfdCBzdGFydCgpOworCisgICAgLy8gU3RvcCBhIHN0cmVhbSBvcGVyYXRpbmcgaW4gbW1hcCBtb2RlLgorICAgIHZpcnR1YWwgc3RhdHVzX3Qgc3RvcCgpOworCisgICAgLy8gUmV0cmlldmUgaW5mb3JtYXRpb24gb24gdGhlIGRhdGEgYnVmZmVyIGluIG1tYXAgbW9kZS4KKyAgICB2aXJ0dWFsIHN0YXR1c190IGNyZWF0ZU1tYXBCdWZmZXIoaW50MzJfdCBtaW5TaXplRnJhbWVzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgYXVkaW9fbW1hcF9idWZmZXJfaW5mbyAqaW5mbyk7CisKKyAgICAvLyBHZXQgY3VycmVudCByZWFkL3dyaXRlIHBvc2l0aW9uIGluIHRoZSBtbWFwIGJ1ZmZlcgorICAgIHZpcnR1YWwgc3RhdHVzX3QgZ2V0TW1hcFBvc2l0aW9uKHN0cnVjdCBhdWRpb19tbWFwX3Bvc2l0aW9uICpwb3NpdGlvbik7CisKKyAgICAvLyBTZXQgdGhlIHByaW9yaXR5IG9mIHRoZSB0aHJlYWQgdGhhdCBpbnRlcmFjdHMgd2l0aCB0aGUgSEFMCisgICAgLy8gKG11c3QgbWF0Y2ggdGhlIHByaW9yaXR5IG9mIHRoZSBhdWRpb2ZsaW5nZXIncyB0aHJlYWQgdGhhdCBjYWxscyAncmVhZCcgLyAnd3JpdGUnKQorICAgIHZpcnR1YWwgc3RhdHVzX3Qgc2V0SGFsVGhyZWFkUHJpb3JpdHkoaW50IHByaW9yaXR5KTsKKworICBwcm90ZWN0ZWQ6CisgICAgLy8gU3ViY2xhc3NlcyBjYW4gbm90IGJlIGNvbnN0cnVjdGVkIGRpcmVjdGx5IGJ5IGNsaWVudHMuCisgICAgZXhwbGljaXQgU3RyZWFtSGFsSGlkbChJU3RyZWFtICpzdHJlYW0pOworCisgICAgLy8gVGhlIGRlc3RydWN0b3IgYXV0b21hdGljYWxseSBjbG9zZXMgdGhlIHN0cmVhbS4KKyAgICB2aXJ0dWFsIH5TdHJlYW1IYWxIaWRsKCk7CisKKyAgICBzdGF0dXNfdCBnZXRDYWNoZWRCdWZmZXJTaXplKHNpemVfdCAqc2l6ZSk7CisKKyAgICBib29sIHJlcXVlc3RIYWxUaHJlYWRQcmlvcml0eShwaWRfdCB0aHJlYWRQaWQsIHBpZF90IHRocmVhZElkKTsKKworICAgIC8vIG1TdHJlYW1Qb3dlckxvZyBpcyB1c2VkIGZvciBhdWRpbyBzaWduYWwgcG93ZXIgbG9nZ2luZy4KKyAgICBTdHJlYW1Qb3dlckxvZyBtU3RyZWFtUG93ZXJMb2c7CisKKyAgcHJpdmF0ZToKKyAgICBjb25zdCBpbnQgSEFMX1RIUkVBRF9QUklPUklUWV9ERUZBVUxUID0gLTE7CisgICAgSVN0cmVhbSAqbVN0cmVhbTsKKyAgICBpbnQgbUhhbFRocmVhZFByaW9yaXR5OworICAgIHNpemVfdCBtQ2FjaGVkQnVmZmVyU2l6ZTsKK307CisKK2NsYXNzIFN0cmVhbU91dEhhbEhpZGwgOiBwdWJsaWMgU3RyZWFtT3V0SGFsSW50ZXJmYWNlLCBwdWJsaWMgU3RyZWFtSGFsSGlkbCB7CisgIHB1YmxpYzoKKyAgICAvLyBSZXR1cm4gdGhlIGZyYW1lIHNpemUgKG51bWJlciBvZiBieXRlcyBwZXIgc2FtcGxlKSBvZiBhIHN0cmVhbS4KKyAgICB2aXJ0dWFsIHN0YXR1c190IGdldEZyYW1lU2l6ZShzaXplX3QgKnNpemUpOworCisgICAgLy8gUmV0dXJuIHRoZSBhdWRpbyBoYXJkd2FyZSBkcml2ZXIgZXN0aW1hdGVkIGxhdGVuY3kgaW4gbWlsbGlzZWNvbmRzLgorICAgIHZpcnR1YWwgc3RhdHVzX3QgZ2V0TGF0ZW5jeSh1aW50MzJfdCAqbGF0ZW5jeSk7CisKKyAgICAvLyBVc2UgdGhpcyBtZXRob2QgaW4gc2l0dWF0aW9ucyB3aGVyZSBhdWRpbyBtaXhpbmcgaXMgZG9uZSBpbiB0aGUgaGFyZHdhcmUuCisgICAgdmlydHVhbCBzdGF0dXNfdCBzZXRWb2x1bWUoZmxvYXQgbGVmdCwgZmxvYXQgcmlnaHQpOworCisgICAgLy8gV3JpdGUgYXVkaW8gYnVmZmVyIHRvIGRyaXZlci4KKyAgICB2aXJ0dWFsIHN0YXR1c190IHdyaXRlKGNvbnN0IHZvaWQgKmJ1ZmZlciwgc2l6ZV90IGJ5dGVzLCBzaXplX3QgKndyaXR0ZW4pOworCisgICAgLy8gUmV0dXJuIHRoZSBudW1iZXIgb2YgYXVkaW8gZnJhbWVzIHdyaXR0ZW4gYnkgdGhlIGF1ZGlvIGRzcCB0byBEQUMgc2luY2UKKyAgICAvLyB0aGUgb3V0cHV0IGhhcyBleGl0ZWQgc3RhbmRieS4KKyAgICB2aXJ0dWFsIHN0YXR1c190IGdldFJlbmRlclBvc2l0aW9uKHVpbnQzMl90ICpkc3BGcmFtZXMpOworCisgICAgLy8gR2V0IHRoZSBsb2NhbCB0aW1lIGF0IHdoaWNoIHRoZSBuZXh0IHdyaXRlIHRvIHRoZSBhdWRpbyBkcml2ZXIgd2lsbCBiZSBwcmVzZW50ZWQuCisgICAgdmlydHVhbCBzdGF0dXNfdCBnZXROZXh0V3JpdGVUaW1lc3RhbXAoaW50NjRfdCAqdGltZXN0YW1wKTsKKworICAgIC8vIFNldCB0aGUgY2FsbGJhY2sgZm9yIG5vdGlmeWluZyBjb21wbGV0aW9uIG9mIG5vbi1ibG9ja2luZyB3cml0ZSBhbmQgZHJhaW4uCisgICAgdmlydHVhbCBzdGF0dXNfdCBzZXRDYWxsYmFjayh3cDxTdHJlYW1PdXRIYWxJbnRlcmZhY2VDYWxsYmFjaz4gY2FsbGJhY2spOworCisgICAgLy8gUmV0dXJucyB3aGV0aGVyIHBhdXNlIGFuZCByZXN1bWUgb3BlcmF0aW9ucyBhcmUgc3VwcG9ydGVkLgorICAgIHZpcnR1YWwgc3RhdHVzX3Qgc3VwcG9ydHNQYXVzZUFuZFJlc3VtZShib29sICpzdXBwb3J0c1BhdXNlLCBib29sICpzdXBwb3J0c1Jlc3VtZSk7CisKKyAgICAvLyBOb3RpZmllcyB0byB0aGUgYXVkaW8gZHJpdmVyIHRvIHJlc3VtZSBwbGF5YmFjayBmb2xsb3dpbmcgYSBwYXVzZS4KKyAgICB2aXJ0dWFsIHN0YXR1c190IHBhdXNlKCk7CisKKyAgICAvLyBOb3RpZmllcyB0byB0aGUgYXVkaW8gZHJpdmVyIHRvIHJlc3VtZSBwbGF5YmFjayBmb2xsb3dpbmcgYSBwYXVzZS4KKyAgICB2aXJ0dWFsIHN0YXR1c190IHJlc3VtZSgpOworCisgICAgLy8gUmV0dXJucyB3aGV0aGVyIGRyYWluIG9wZXJhdGlvbiBpcyBzdXBwb3J0ZWQuCisgICAgdmlydHVhbCBzdGF0dXNfdCBzdXBwb3J0c0RyYWluKGJvb2wgKnN1cHBvcnRzRHJhaW4pOworCisgICAgLy8gUmVxdWVzdHMgbm90aWZpY2F0aW9uIHdoZW4gZGF0YSBidWZmZXJlZCBieSB0aGUgZHJpdmVyL2hhcmR3YXJlIGhhcyBiZWVuIHBsYXllZC4KKyAgICB2aXJ0dWFsIHN0YXR1c190IGRyYWluKGJvb2wgZWFybHlOb3RpZnkpOworCisgICAgLy8gTm90aWZpZXMgdG8gdGhlIGF1ZGlvIGRyaXZlciB0byBmbHVzaCB0aGUgcXVldWVkIGRhdGEuCisgICAgdmlydHVhbCBzdGF0dXNfdCBmbHVzaCgpOworCisgICAgLy8gUmV0dXJuIGEgcmVjZW50IGNvdW50IG9mIHRoZSBudW1iZXIgb2YgYXVkaW8gZnJhbWVzIHByZXNlbnRlZCB0byBhbiBleHRlcm5hbCBvYnNlcnZlci4KKyAgICB2aXJ0dWFsIHN0YXR1c190IGdldFByZXNlbnRhdGlvblBvc2l0aW9uKHVpbnQ2NF90ICpmcmFtZXMsIHN0cnVjdCB0aW1lc3BlYyAqdGltZXN0YW1wKTsKKworICAgIC8vIENhbGxlZCB3aGVuIHRoZSBtZXRhZGF0YSBvZiB0aGUgc3RyZWFtJ3Mgc291cmNlIGhhcyBiZWVuIGNoYW5nZWQuCisgICAgc3RhdHVzX3QgdXBkYXRlU291cmNlTWV0YWRhdGEoY29uc3QgU291cmNlTWV0YWRhdGEmIHNvdXJjZU1ldGFkYXRhKSBvdmVycmlkZTsKKworICAgIC8vIE1ldGhvZHMgdXNlZCBieSBTdHJlYW1PdXRDYWxsYmFjayAoSElETCkuCisgICAgdm9pZCBvbldyaXRlUmVhZHkoKTsKKyAgICB2b2lkIG9uRHJhaW5SZWFkeSgpOworICAgIHZvaWQgb25FcnJvcigpOworCisgIHByaXZhdGU6CisgICAgZnJpZW5kIGNsYXNzIERldmljZUhhbEhpZGw7CisgICAgdHlwZWRlZiBNZXNzYWdlUXVldWU8V3JpdGVDb21tYW5kLCBoYXJkd2FyZTo6a1N5bmNocm9uaXplZFJlYWRXcml0ZT4gQ29tbWFuZE1ROworICAgIHR5cGVkZWYgTWVzc2FnZVF1ZXVlPHVpbnQ4X3QsIGhhcmR3YXJlOjprU3luY2hyb25pemVkUmVhZFdyaXRlPiBEYXRhTVE7CisgICAgdHlwZWRlZiBNZXNzYWdlUXVldWU8V3JpdGVTdGF0dXMsIGhhcmR3YXJlOjprU3luY2hyb25pemVkUmVhZFdyaXRlPiBTdGF0dXNNUTsKKworICAgIHdwPFN0cmVhbU91dEhhbEludGVyZmFjZUNhbGxiYWNrPiBtQ2FsbGJhY2s7CisgICAgc3A8SVN0cmVhbU91dD4gbVN0cmVhbTsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8Q29tbWFuZE1RPiBtQ29tbWFuZE1ROworICAgIHN0ZDo6dW5pcXVlX3B0cjxEYXRhTVE+IG1EYXRhTVE7CisgICAgc3RkOjp1bmlxdWVfcHRyPFN0YXR1c01RPiBtU3RhdHVzTVE7CisgICAgc3RkOjphdG9taWM8cGlkX3Q+IG1Xcml0ZXJDbGllbnQ7CisgICAgRXZlbnRGbGFnKiBtRWZHcm91cDsKKworICAgIC8vIENhbiBub3QgYmUgY29uc3RydWN0ZWQgZGlyZWN0bHkgYnkgY2xpZW50cy4KKyAgICBTdHJlYW1PdXRIYWxIaWRsKGNvbnN0IHNwPElTdHJlYW1PdXQ+JiBzdHJlYW0pOworCisgICAgdmlydHVhbCB+U3RyZWFtT3V0SGFsSGlkbCgpOworCisgICAgdXNpbmcgV3JpdGVyQ2FsbGJhY2sgPSBzdGQ6OmZ1bmN0aW9uPHZvaWQoY29uc3QgV3JpdGVTdGF0dXMmIHdyaXRlU3RhdHVzKT47CisgICAgc3RhdHVzX3QgY2FsbFdyaXRlclRocmVhZCgKKyAgICAgICAgICAgIFdyaXRlQ29tbWFuZCBjbWQsIGNvbnN0IGNoYXIqIGNtZE5hbWUsCisgICAgICAgICAgICBjb25zdCB1aW50OF90KiBkYXRhLCBzaXplX3QgZGF0YVNpemUsIFdyaXRlckNhbGxiYWNrIGNhbGxiYWNrKTsKKyAgICBzdGF0dXNfdCBwcmVwYXJlRm9yV3JpdGluZyhzaXplX3QgYnVmZmVyU2l6ZSk7Cit9OworCitjbGFzcyBTdHJlYW1JbkhhbEhpZGwgOiBwdWJsaWMgU3RyZWFtSW5IYWxJbnRlcmZhY2UsIHB1YmxpYyBTdHJlYW1IYWxIaWRsIHsKKyAgcHVibGljOgorICAgIC8vIFJldHVybiB0aGUgZnJhbWUgc2l6ZSAobnVtYmVyIG9mIGJ5dGVzIHBlciBzYW1wbGUpIG9mIGEgc3RyZWFtLgorICAgIHZpcnR1YWwgc3RhdHVzX3QgZ2V0RnJhbWVTaXplKHNpemVfdCAqc2l6ZSk7CisKKyAgICAvLyBTZXQgdGhlIGlucHV0IGdhaW4gZm9yIHRoZSBhdWRpbyBkcml2ZXIuCisgICAgdmlydHVhbCBzdGF0dXNfdCBzZXRHYWluKGZsb2F0IGdhaW4pOworCisgICAgLy8gUmVhZCBhdWRpbyBidWZmZXIgaW4gZnJvbSBkcml2ZXIuCisgICAgdmlydHVhbCBzdGF0dXNfdCByZWFkKHZvaWQgKmJ1ZmZlciwgc2l6ZV90IGJ5dGVzLCBzaXplX3QgKnJlYWQpOworCisgICAgLy8gUmV0dXJuIHRoZSBhbW91bnQgb2YgaW5wdXQgZnJhbWVzIGxvc3QgaW4gdGhlIGF1ZGlvIGRyaXZlci4KKyAgICB2aXJ0dWFsIHN0YXR1c190IGdldElucHV0RnJhbWVzTG9zdCh1aW50MzJfdCAqZnJhbWVzTG9zdCk7CisKKyAgICAvLyBSZXR1cm4gYSByZWNlbnQgY291bnQgb2YgdGhlIG51bWJlciBvZiBhdWRpbyBmcmFtZXMgcmVjZWl2ZWQgYW5kCisgICAgLy8gdGhlIGNsb2NrIHRpbWUgYXNzb2NpYXRlZCB3aXRoIHRoYXQgZnJhbWUgY291bnQuCisgICAgdmlydHVhbCBzdGF0dXNfdCBnZXRDYXB0dXJlUG9zaXRpb24oaW50NjRfdCAqZnJhbWVzLCBpbnQ2NF90ICp0aW1lKTsKKworICAgIC8vIEdldCBhY3RpdmUgbWljcm9waG9uZXMKKyAgICB2aXJ0dWFsIHN0YXR1c190IGdldEFjdGl2ZU1pY3JvcGhvbmVzKHN0ZDo6dmVjdG9yPG1lZGlhOjpNaWNyb3Bob25lSW5mbz4gKm1pY3JvcGhvbmVzKTsKKworICAgIC8vIENhbGxlZCB3aGVuIHRoZSBtZXRhZGF0YSBvZiB0aGUgc3RyZWFtJ3Mgc2luayBoYXMgYmVlbiBjaGFuZ2VkLgorICAgIHN0YXR1c190IHVwZGF0ZVNpbmtNZXRhZGF0YShjb25zdCBTaW5rTWV0YWRhdGEmIHNpbmtNZXRhZGF0YSkgb3ZlcnJpZGU7CisKKyAgcHJpdmF0ZToKKyAgICBmcmllbmQgY2xhc3MgRGV2aWNlSGFsSGlkbDsKKyAgICB0eXBlZGVmIE1lc3NhZ2VRdWV1ZTxSZWFkUGFyYW1ldGVycywgaGFyZHdhcmU6OmtTeW5jaHJvbml6ZWRSZWFkV3JpdGU+IENvbW1hbmRNUTsKKyAgICB0eXBlZGVmIE1lc3NhZ2VRdWV1ZTx1aW50OF90LCBoYXJkd2FyZTo6a1N5bmNocm9uaXplZFJlYWRXcml0ZT4gRGF0YU1ROworICAgIHR5cGVkZWYgTWVzc2FnZVF1ZXVlPFJlYWRTdGF0dXMsIGhhcmR3YXJlOjprU3luY2hyb25pemVkUmVhZFdyaXRlPiBTdGF0dXNNUTsKKworICAgIHNwPElTdHJlYW1Jbj4gbVN0cmVhbTsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8Q29tbWFuZE1RPiBtQ29tbWFuZE1ROworICAgIHN0ZDo6dW5pcXVlX3B0cjxEYXRhTVE+IG1EYXRhTVE7CisgICAgc3RkOjp1bmlxdWVfcHRyPFN0YXR1c01RPiBtU3RhdHVzTVE7CisgICAgc3RkOjphdG9taWM8cGlkX3Q+IG1SZWFkZXJDbGllbnQ7CisgICAgRXZlbnRGbGFnKiBtRWZHcm91cDsKKworICAgIC8vIENhbiBub3QgYmUgY29uc3RydWN0ZWQgZGlyZWN0bHkgYnkgY2xpZW50cy4KKyAgICBTdHJlYW1JbkhhbEhpZGwoY29uc3Qgc3A8SVN0cmVhbUluPiYgc3RyZWFtKTsKKworICAgIHZpcnR1YWwgflN0cmVhbUluSGFsSGlkbCgpOworCisgICAgdXNpbmcgUmVhZGVyQ2FsbGJhY2sgPSBzdGQ6OmZ1bmN0aW9uPHZvaWQoY29uc3QgUmVhZFN0YXR1cyYgcmVhZFN0YXR1cyk+OworICAgIHN0YXR1c190IGNhbGxSZWFkZXJUaHJlYWQoCisgICAgICAgICAgICBjb25zdCBSZWFkUGFyYW1ldGVycyYgcGFyYW1zLCBjb25zdCBjaGFyKiBjbWROYW1lLCBSZWFkZXJDYWxsYmFjayBjYWxsYmFjayk7CisgICAgc3RhdHVzX3QgcHJlcGFyZUZvclJlYWRpbmcoc2l6ZV90IGJ1ZmZlclNpemUpOworfTsKKworfSAvLyBuYW1lc3BhY2UgQ1BQX1ZFUlNJT04KK30gLy8gbmFtZXNwYWNlIGFuZHJvaWQKKworI2VuZGlmIC8vIEFORFJPSURfSEFSRFdBUkVfU1RSRUFNX0hBTF9ISURMX0gKZGlmZiAtLWdpdCBhL21lZGlhL2xpYmF1ZGlvaGFsL2ltcGwvU3RyZWFtSGFsTG9jYWwuY3BwIGIvbWVkaWEvbGliYXVkaW9oYWwvaW1wbC9TdHJlYW1IYWxMb2NhbC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjEzNGY1NwotLS0gL2Rldi9udWxsCisrKyBiL21lZGlhL2xpYmF1ZGlvaGFsL2ltcGwvU3RyZWFtSGFsTG9jYWwuY3BwCkBAIC0wLDAgKzEsMzY0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE2IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KKworI2RlZmluZSBMT0dfVEFHICJTdHJlYW1IYWxMb2NhbCIKKy8vI2RlZmluZSBMT0dfTkRFQlVHIDAKKworI2luY2x1ZGUgPGhhcmR3YXJlL2F1ZGlvLmg+CisjaW5jbHVkZSA8dXRpbHMvTG9nLmg+CisKKyNpbmNsdWRlICJEZXZpY2VIYWxMb2NhbC5oIgorI2luY2x1ZGUgIlN0cmVhbUhhbExvY2FsLmgiCisjaW5jbHVkZSAiVmVyc2lvblV0aWxzLmgiCisKK25hbWVzcGFjZSBhbmRyb2lkIHsKK25hbWVzcGFjZSBDUFBfVkVSU0lPTiB7CisKK1N0cmVhbUhhbExvY2FsOjpTdHJlYW1IYWxMb2NhbChhdWRpb19zdHJlYW1fdCAqc3RyZWFtLCBzcDxEZXZpY2VIYWxMb2NhbD4gZGV2aWNlKQorICAgICAgICA6IG1EZXZpY2UoZGV2aWNlKSwKKyAgICAgICAgICBtU3RyZWFtKHN0cmVhbSkgeworICAgIC8vIEluc3RydW1lbnQgYXVkaW8gc2lnbmFsIHBvd2VyIGxvZ2dpbmcuCisgICAgLy8gTm90ZTogVGhpcyBhc3N1bWVzIGNoYW5uZWwgbWFzaywgZm9ybWF0LCBhbmQgc2FtcGxlIHJhdGUgZG8gbm90IGNoYW5nZSBhZnRlciBjcmVhdGlvbi4KKyAgICBpZiAobVN0cmVhbSAhPSBudWxscHRyICYmIG1TdHJlYW1Qb3dlckxvZy5pc1VzZXJEZWJ1Z09yRW5nQnVpbGQoKSkgeworICAgICAgICBtU3RyZWFtUG93ZXJMb2cuaW5pdChtU3RyZWFtLT5nZXRfc2FtcGxlX3JhdGUobVN0cmVhbSksCisgICAgICAgICAgICAgICAgbVN0cmVhbS0+Z2V0X2NoYW5uZWxzKG1TdHJlYW0pLAorICAgICAgICAgICAgICAgIG1TdHJlYW0tPmdldF9mb3JtYXQobVN0cmVhbSkpOworICAgIH0KK30KKworU3RyZWFtSGFsTG9jYWw6On5TdHJlYW1IYWxMb2NhbCgpIHsKKyAgICBtU3RyZWFtID0gMDsKKyAgICBtRGV2aWNlLmNsZWFyKCk7Cit9CisKK3N0YXR1c190IFN0cmVhbUhhbExvY2FsOjpnZXRTYW1wbGVSYXRlKHVpbnQzMl90ICpyYXRlKSB7CisgICAgKnJhdGUgPSBtU3RyZWFtLT5nZXRfc2FtcGxlX3JhdGUobVN0cmVhbSk7CisgICAgcmV0dXJuIE9LOworfQorCitzdGF0dXNfdCBTdHJlYW1IYWxMb2NhbDo6Z2V0QnVmZmVyU2l6ZShzaXplX3QgKnNpemUpIHsKKyAgICAqc2l6ZSA9IG1TdHJlYW0tPmdldF9idWZmZXJfc2l6ZShtU3RyZWFtKTsKKyAgICByZXR1cm4gT0s7Cit9CisKK3N0YXR1c190IFN0cmVhbUhhbExvY2FsOjpnZXRDaGFubmVsTWFzayhhdWRpb19jaGFubmVsX21hc2tfdCAqbWFzaykgeworICAgICptYXNrID0gbVN0cmVhbS0+Z2V0X2NoYW5uZWxzKG1TdHJlYW0pOworICAgIHJldHVybiBPSzsKK30KKworc3RhdHVzX3QgU3RyZWFtSGFsTG9jYWw6OmdldEZvcm1hdChhdWRpb19mb3JtYXRfdCAqZm9ybWF0KSB7CisgICAgKmZvcm1hdCA9IG1TdHJlYW0tPmdldF9mb3JtYXQobVN0cmVhbSk7CisgICAgcmV0dXJuIE9LOworfQorCitzdGF0dXNfdCBTdHJlYW1IYWxMb2NhbDo6Z2V0QXVkaW9Qcm9wZXJ0aWVzKAorICAgICAgICB1aW50MzJfdCAqc2FtcGxlUmF0ZSwgYXVkaW9fY2hhbm5lbF9tYXNrX3QgKm1hc2ssIGF1ZGlvX2Zvcm1hdF90ICpmb3JtYXQpIHsKKyAgICAqc2FtcGxlUmF0ZSA9IG1TdHJlYW0tPmdldF9zYW1wbGVfcmF0ZShtU3RyZWFtKTsKKyAgICAqbWFzayA9IG1TdHJlYW0tPmdldF9jaGFubmVscyhtU3RyZWFtKTsKKyAgICAqZm9ybWF0ID0gbVN0cmVhbS0+Z2V0X2Zvcm1hdChtU3RyZWFtKTsKKyAgICByZXR1cm4gT0s7Cit9CisKK3N0YXR1c190IFN0cmVhbUhhbExvY2FsOjpzZXRQYXJhbWV0ZXJzKGNvbnN0IFN0cmluZzgmIGt2UGFpcnMpIHsKKyAgICByZXR1cm4gbVN0cmVhbS0+c2V0X3BhcmFtZXRlcnMobVN0cmVhbSwga3ZQYWlycy5zdHJpbmcoKSk7Cit9CisKK3N0YXR1c190IFN0cmVhbUhhbExvY2FsOjpnZXRQYXJhbWV0ZXJzKGNvbnN0IFN0cmluZzgmIGtleXMsIFN0cmluZzggKnZhbHVlcykgeworICAgIGNoYXIgKmhhbFZhbHVlcyA9IG1TdHJlYW0tPmdldF9wYXJhbWV0ZXJzKG1TdHJlYW0sIGtleXMuc3RyaW5nKCkpOworICAgIGlmIChoYWxWYWx1ZXMgIT0gTlVMTCkgeworICAgICAgICB2YWx1ZXMtPnNldFRvKGhhbFZhbHVlcyk7CisgICAgICAgIGZyZWUoaGFsVmFsdWVzKTsKKyAgICB9IGVsc2UgeworICAgICAgICB2YWx1ZXMtPmNsZWFyKCk7CisgICAgfQorICAgIHJldHVybiBPSzsKK30KKworc3RhdHVzX3QgU3RyZWFtSGFsTG9jYWw6OmFkZEVmZmVjdChzcDxFZmZlY3RIYWxJbnRlcmZhY2U+KSB7CisgICAgTE9HX0FMV0FZU19GQVRBTCgiTG9jYWwgc3RyZWFtcyBjYW4gbm90IGhhdmUgZWZmZWN0cyIpOworICAgIHJldHVybiBJTlZBTElEX09QRVJBVElPTjsKK30KKworc3RhdHVzX3QgU3RyZWFtSGFsTG9jYWw6OnJlbW92ZUVmZmVjdChzcDxFZmZlY3RIYWxJbnRlcmZhY2U+KSB7CisgICAgTE9HX0FMV0FZU19GQVRBTCgiTG9jYWwgc3RyZWFtcyBjYW4gbm90IGhhdmUgZWZmZWN0cyIpOworICAgIHJldHVybiBJTlZBTElEX09QRVJBVElPTjsKK30KKworc3RhdHVzX3QgU3RyZWFtSGFsTG9jYWw6OnN0YW5kYnkoKSB7CisgICAgcmV0dXJuIG1TdHJlYW0tPnN0YW5kYnkobVN0cmVhbSk7Cit9CisKK3N0YXR1c190IFN0cmVhbUhhbExvY2FsOjpkdW1wKGludCBmZCkgeworICAgIHN0YXR1c190IHN0YXR1cyA9IG1TdHJlYW0tPmR1bXAobVN0cmVhbSwgZmQpOworICAgIG1TdHJlYW1Qb3dlckxvZy5kdW1wKGZkKTsKKyAgICByZXR1cm4gc3RhdHVzOworfQorCitzdGF0dXNfdCBTdHJlYW1IYWxMb2NhbDo6c2V0SGFsVGhyZWFkUHJpb3JpdHkoaW50KSB7CisgICAgLy8gRG9uJ3QgbmVlZCB0byBkbyBhbnl0aGluZyBhcyBsb2NhbCBoYWwgaXMgZXhlY3V0ZWQgYnkgYXVkaW9mbGluZ2VyIGRpcmVjdGx5CisgICAgLy8gb24gdGhlIHNhbWUgdGhyZWFkLgorICAgIHJldHVybiBPSzsKK30KKworU3RyZWFtT3V0SGFsTG9jYWw6OlN0cmVhbU91dEhhbExvY2FsKGF1ZGlvX3N0cmVhbV9vdXRfdCAqc3RyZWFtLCBzcDxEZXZpY2VIYWxMb2NhbD4gZGV2aWNlKQorICAgICAgICA6IFN0cmVhbUhhbExvY2FsKCZzdHJlYW0tPmNvbW1vbiwgZGV2aWNlKSwgbVN0cmVhbShzdHJlYW0pIHsKK30KKworU3RyZWFtT3V0SGFsTG9jYWw6On5TdHJlYW1PdXRIYWxMb2NhbCgpIHsKKyAgICBtQ2FsbGJhY2suY2xlYXIoKTsKKyAgICBtRGV2aWNlLT5jbG9zZU91dHB1dFN0cmVhbShtU3RyZWFtKTsKKyAgICBtU3RyZWFtID0gMDsKK30KKworc3RhdHVzX3QgU3RyZWFtT3V0SGFsTG9jYWw6OmdldEZyYW1lU2l6ZShzaXplX3QgKnNpemUpIHsKKyAgICAqc2l6ZSA9IGF1ZGlvX3N0cmVhbV9vdXRfZnJhbWVfc2l6ZShtU3RyZWFtKTsKKyAgICByZXR1cm4gT0s7Cit9CisKK3N0YXR1c190IFN0cmVhbU91dEhhbExvY2FsOjpnZXRMYXRlbmN5KHVpbnQzMl90ICpsYXRlbmN5KSB7CisgICAgKmxhdGVuY3kgPSBtU3RyZWFtLT5nZXRfbGF0ZW5jeShtU3RyZWFtKTsKKyAgICByZXR1cm4gT0s7Cit9CisKK3N0YXR1c190IFN0cmVhbU91dEhhbExvY2FsOjpzZXRWb2x1bWUoZmxvYXQgbGVmdCwgZmxvYXQgcmlnaHQpIHsKKyAgICBpZiAobVN0cmVhbS0+c2V0X3ZvbHVtZSA9PSBOVUxMKSByZXR1cm4gSU5WQUxJRF9PUEVSQVRJT047CisgICAgcmV0dXJuIG1TdHJlYW0tPnNldF92b2x1bWUobVN0cmVhbSwgbGVmdCwgcmlnaHQpOworfQorCitzdGF0dXNfdCBTdHJlYW1PdXRIYWxMb2NhbDo6d3JpdGUoY29uc3Qgdm9pZCAqYnVmZmVyLCBzaXplX3QgYnl0ZXMsIHNpemVfdCAqd3JpdHRlbikgeworICAgIHNzaXplX3Qgd3JpdGVSZXN1bHQgPSBtU3RyZWFtLT53cml0ZShtU3RyZWFtLCBidWZmZXIsIGJ5dGVzKTsKKyAgICBpZiAod3JpdGVSZXN1bHQgPiAwKSB7CisgICAgICAgICp3cml0dGVuID0gd3JpdGVSZXN1bHQ7CisgICAgICAgIG1TdHJlYW1Qb3dlckxvZy5sb2coYnVmZmVyLCAqd3JpdHRlbik7CisgICAgICAgIHJldHVybiBPSzsKKyAgICB9IGVsc2UgeworICAgICAgICAqd3JpdHRlbiA9IDA7CisgICAgICAgIHJldHVybiB3cml0ZVJlc3VsdDsKKyAgICB9Cit9CisKK3N0YXR1c190IFN0cmVhbU91dEhhbExvY2FsOjpnZXRSZW5kZXJQb3NpdGlvbih1aW50MzJfdCAqZHNwRnJhbWVzKSB7CisgICAgcmV0dXJuIG1TdHJlYW0tPmdldF9yZW5kZXJfcG9zaXRpb24obVN0cmVhbSwgZHNwRnJhbWVzKTsKK30KKworc3RhdHVzX3QgU3RyZWFtT3V0SGFsTG9jYWw6OmdldE5leHRXcml0ZVRpbWVzdGFtcChpbnQ2NF90ICp0aW1lc3RhbXApIHsKKyAgICBpZiAobVN0cmVhbS0+Z2V0X25leHRfd3JpdGVfdGltZXN0YW1wID09IE5VTEwpIHJldHVybiBJTlZBTElEX09QRVJBVElPTjsKKyAgICByZXR1cm4gbVN0cmVhbS0+Z2V0X25leHRfd3JpdGVfdGltZXN0YW1wKG1TdHJlYW0sIHRpbWVzdGFtcCk7Cit9CisKK3N0YXR1c190IFN0cmVhbU91dEhhbExvY2FsOjpzZXRDYWxsYmFjayh3cDxTdHJlYW1PdXRIYWxJbnRlcmZhY2VDYWxsYmFjaz4gY2FsbGJhY2spIHsKKyAgICBpZiAobVN0cmVhbS0+c2V0X2NhbGxiYWNrID09IE5VTEwpIHJldHVybiBJTlZBTElEX09QRVJBVElPTjsKKyAgICBzdGF0dXNfdCByZXN1bHQgPSBtU3RyZWFtLT5zZXRfY2FsbGJhY2sobVN0cmVhbSwgU3RyZWFtT3V0SGFsTG9jYWw6OmFzeW5jQ2FsbGJhY2ssIHRoaXMpOworICAgIGlmIChyZXN1bHQgPT0gT0spIHsKKyAgICAgICAgbUNhbGxiYWNrID0gY2FsbGJhY2s7CisgICAgfQorICAgIHJldHVybiByZXN1bHQ7Cit9CisKKy8vIHN0YXRpYworaW50IFN0cmVhbU91dEhhbExvY2FsOjphc3luY0NhbGxiYWNrKHN0cmVhbV9jYWxsYmFja19ldmVudF90IGV2ZW50LCB2b2lkKiwgdm9pZCAqY29va2llKSB7CisgICAgLy8gV2UgYWN0IGFzIGlmIHdlIGdhdmUgYSB3cDxTdHJlYW1PdXRIYWxMb2NhbD4gdG8gSEFMLiBUaGlzIHdheSB3ZSBzaG91bGQgaGFuZGxlCisgICAgLy8gY29ycmVjdGx5IHRoZSBjYXNlIHdoZW4gdGhlIGNhbGxiYWNrIGlzIGludm9rZWQgd2hpbGUgU3RyZWFtT3V0SGFsTG9jYWwncyBkZXN0cnVjdG9yIGlzCisgICAgLy8gYWxyZWFkeSBydW5uaW5nLCBiZWNhdXNlIHRoZSBkZXN0cnVjdG9yIGlzIGludm9rZWQgYWZ0ZXIgdGhlIHJlZmNvdW50IGhhcyBiZWVuIGF0b21pY2FsbHkKKyAgICAvLyBkZWNyZW1lbnRlZC4KKyAgICB3cDxTdHJlYW1PdXRIYWxMb2NhbD4gd2Vha1NlbGYoc3RhdGljX2Nhc3Q8U3RyZWFtT3V0SGFsTG9jYWwqPihjb29raWUpKTsKKyAgICBzcDxTdHJlYW1PdXRIYWxMb2NhbD4gc2VsZiA9IHdlYWtTZWxmLnByb21vdGUoKTsKKyAgICBpZiAoc2VsZiA9PSAwKSByZXR1cm4gMDsKKyAgICBzcDxTdHJlYW1PdXRIYWxJbnRlcmZhY2VDYWxsYmFjaz4gY2FsbGJhY2sgPSBzZWxmLT5tQ2FsbGJhY2sucHJvbW90ZSgpOworICAgIGlmIChjYWxsYmFjayA9PSAwKSByZXR1cm4gMDsKKyAgICBBTE9HVigiYXN5bmNDYWxsYmFjaygpIGV2ZW50ICVkIiwgZXZlbnQpOworICAgIHN3aXRjaCAoZXZlbnQpIHsKKyAgICAgICAgY2FzZSBTVFJFQU1fQ0JLX0VWRU5UX1dSSVRFX1JFQURZOgorICAgICAgICAgICAgY2FsbGJhY2stPm9uV3JpdGVSZWFkeSgpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgU1RSRUFNX0NCS19FVkVOVF9EUkFJTl9SRUFEWToKKyAgICAgICAgICAgIGNhbGxiYWNrLT5vbkRyYWluUmVhZHkoKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFNUUkVBTV9DQktfRVZFTlRfRVJST1I6CisgICAgICAgICAgICBjYWxsYmFjay0+b25FcnJvcigpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBBTE9HVygiYXN5bmNDYWxsYmFjaygpIHVua25vd24gZXZlbnQgJWQiLCBldmVudCk7CisgICAgICAgICAgICBicmVhazsKKyAgICB9CisgICAgcmV0dXJuIDA7Cit9CisKK3N0YXR1c190IFN0cmVhbU91dEhhbExvY2FsOjpzdXBwb3J0c1BhdXNlQW5kUmVzdW1lKGJvb2wgKnN1cHBvcnRzUGF1c2UsIGJvb2wgKnN1cHBvcnRzUmVzdW1lKSB7CisgICAgKnN1cHBvcnRzUGF1c2UgPSBtU3RyZWFtLT5wYXVzZSAhPSBOVUxMOworICAgICpzdXBwb3J0c1Jlc3VtZSA9IG1TdHJlYW0tPnJlc3VtZSAhPSBOVUxMOworICAgIHJldHVybiBPSzsKK30KKworc3RhdHVzX3QgU3RyZWFtT3V0SGFsTG9jYWw6OnBhdXNlKCkgeworICAgIGlmIChtU3RyZWFtLT5wYXVzZSA9PSBOVUxMKSByZXR1cm4gSU5WQUxJRF9PUEVSQVRJT047CisgICAgcmV0dXJuIG1TdHJlYW0tPnBhdXNlKG1TdHJlYW0pOworfQorCitzdGF0dXNfdCBTdHJlYW1PdXRIYWxMb2NhbDo6cmVzdW1lKCkgeworICAgIGlmIChtU3RyZWFtLT5yZXN1bWUgPT0gTlVMTCkgcmV0dXJuIElOVkFMSURfT1BFUkFUSU9OOworICAgIHJldHVybiBtU3RyZWFtLT5yZXN1bWUobVN0cmVhbSk7Cit9CisKK3N0YXR1c190IFN0cmVhbU91dEhhbExvY2FsOjpzdXBwb3J0c0RyYWluKGJvb2wgKnN1cHBvcnRzRHJhaW4pIHsKKyAgICAqc3VwcG9ydHNEcmFpbiA9IG1TdHJlYW0tPmRyYWluICE9IE5VTEw7CisgICAgcmV0dXJuIE9LOworfQorCitzdGF0dXNfdCBTdHJlYW1PdXRIYWxMb2NhbDo6ZHJhaW4oYm9vbCBlYXJseU5vdGlmeSkgeworICAgIGlmIChtU3RyZWFtLT5kcmFpbiA9PSBOVUxMKSByZXR1cm4gSU5WQUxJRF9PUEVSQVRJT047CisgICAgcmV0dXJuIG1TdHJlYW0tPmRyYWluKG1TdHJlYW0sIGVhcmx5Tm90aWZ5ID8gQVVESU9fRFJBSU5fRUFSTFlfTk9USUZZIDogQVVESU9fRFJBSU5fQUxMKTsKK30KKworc3RhdHVzX3QgU3RyZWFtT3V0SGFsTG9jYWw6OmZsdXNoKCkgeworICAgIGlmIChtU3RyZWFtLT5mbHVzaCA9PSBOVUxMKSByZXR1cm4gSU5WQUxJRF9PUEVSQVRJT047CisgICAgcmV0dXJuIG1TdHJlYW0tPmZsdXNoKG1TdHJlYW0pOworfQorCitzdGF0dXNfdCBTdHJlYW1PdXRIYWxMb2NhbDo6Z2V0UHJlc2VudGF0aW9uUG9zaXRpb24odWludDY0X3QgKmZyYW1lcywgc3RydWN0IHRpbWVzcGVjICp0aW1lc3RhbXApIHsKKyAgICBpZiAobVN0cmVhbS0+Z2V0X3ByZXNlbnRhdGlvbl9wb3NpdGlvbiA9PSBOVUxMKSByZXR1cm4gSU5WQUxJRF9PUEVSQVRJT047CisgICAgcmV0dXJuIG1TdHJlYW0tPmdldF9wcmVzZW50YXRpb25fcG9zaXRpb24obVN0cmVhbSwgZnJhbWVzLCB0aW1lc3RhbXApOworfQorCitzdGF0dXNfdCBTdHJlYW1PdXRIYWxMb2NhbDo6dXBkYXRlU291cmNlTWV0YWRhdGEoY29uc3QgU291cmNlTWV0YWRhdGEmIHNvdXJjZU1ldGFkYXRhKSB7CisgICAgaWYgKG1TdHJlYW0tPnVwZGF0ZV9zb3VyY2VfbWV0YWRhdGEgPT0gbnVsbHB0cikgeworICAgICAgICByZXR1cm4gSU5WQUxJRF9PUEVSQVRJT047CisgICAgfQorICAgIGNvbnN0IHNvdXJjZV9tZXRhZGF0YV90IG1ldGFkYXRhIHsKKyAgICAgICAgLnRyYWNrX2NvdW50ID0gc291cmNlTWV0YWRhdGEudHJhY2tzLnNpemUoKSwKKyAgICAgICAgLy8gY29uc3QgY2FzdCBpcyBmaW5lIGFzIGl0IGlzIGluIGEgY29uc3Qgc3RydWN0dXJlCisgICAgICAgIC50cmFja3MgPSBjb25zdF9jYXN0PHBsYXliYWNrX3RyYWNrX21ldGFkYXRhKj4oc291cmNlTWV0YWRhdGEudHJhY2tzLmRhdGEoKSksCisgICAgfTsKKyAgICBtU3RyZWFtLT51cGRhdGVfc291cmNlX21ldGFkYXRhKG1TdHJlYW0sICZtZXRhZGF0YSk7CisgICAgcmV0dXJuIE9LOworfQorCitzdGF0dXNfdCBTdHJlYW1PdXRIYWxMb2NhbDo6c3RhcnQoKSB7CisgICAgaWYgKG1TdHJlYW0tPnN0YXJ0ID09IE5VTEwpIHJldHVybiBJTlZBTElEX09QRVJBVElPTjsKKyAgICByZXR1cm4gbVN0cmVhbS0+c3RhcnQobVN0cmVhbSk7Cit9CisKK3N0YXR1c190IFN0cmVhbU91dEhhbExvY2FsOjpzdG9wKCkgeworICAgIGlmIChtU3RyZWFtLT5zdG9wID09IE5VTEwpIHJldHVybiBJTlZBTElEX09QRVJBVElPTjsKKyAgICByZXR1cm4gbVN0cmVhbS0+c3RvcChtU3RyZWFtKTsKK30KKworc3RhdHVzX3QgU3RyZWFtT3V0SGFsTG9jYWw6OmNyZWF0ZU1tYXBCdWZmZXIoaW50MzJfdCBtaW5TaXplRnJhbWVzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBhdWRpb19tbWFwX2J1ZmZlcl9pbmZvICppbmZvKSB7CisgICAgaWYgKG1TdHJlYW0tPmNyZWF0ZV9tbWFwX2J1ZmZlciA9PSBOVUxMKSByZXR1cm4gSU5WQUxJRF9PUEVSQVRJT047CisgICAgcmV0dXJuIG1TdHJlYW0tPmNyZWF0ZV9tbWFwX2J1ZmZlcihtU3RyZWFtLCBtaW5TaXplRnJhbWVzLCBpbmZvKTsKK30KKworc3RhdHVzX3QgU3RyZWFtT3V0SGFsTG9jYWw6OmdldE1tYXBQb3NpdGlvbihzdHJ1Y3QgYXVkaW9fbW1hcF9wb3NpdGlvbiAqcG9zaXRpb24pIHsKKyAgICBpZiAobVN0cmVhbS0+Z2V0X21tYXBfcG9zaXRpb24gPT0gTlVMTCkgcmV0dXJuIElOVkFMSURfT1BFUkFUSU9OOworICAgIHJldHVybiBtU3RyZWFtLT5nZXRfbW1hcF9wb3NpdGlvbihtU3RyZWFtLCBwb3NpdGlvbik7Cit9CisKK1N0cmVhbUluSGFsTG9jYWw6OlN0cmVhbUluSGFsTG9jYWwoYXVkaW9fc3RyZWFtX2luX3QgKnN0cmVhbSwgc3A8RGV2aWNlSGFsTG9jYWw+IGRldmljZSkKKyAgICAgICAgOiBTdHJlYW1IYWxMb2NhbCgmc3RyZWFtLT5jb21tb24sIGRldmljZSksIG1TdHJlYW0oc3RyZWFtKSB7Cit9CisKK1N0cmVhbUluSGFsTG9jYWw6On5TdHJlYW1JbkhhbExvY2FsKCkgeworICAgIG1EZXZpY2UtPmNsb3NlSW5wdXRTdHJlYW0obVN0cmVhbSk7CisgICAgbVN0cmVhbSA9IDA7Cit9CisKK3N0YXR1c190IFN0cmVhbUluSGFsTG9jYWw6OmdldEZyYW1lU2l6ZShzaXplX3QgKnNpemUpIHsKKyAgICAqc2l6ZSA9IGF1ZGlvX3N0cmVhbV9pbl9mcmFtZV9zaXplKG1TdHJlYW0pOworICAgIHJldHVybiBPSzsKK30KKworc3RhdHVzX3QgU3RyZWFtSW5IYWxMb2NhbDo6c2V0R2FpbihmbG9hdCBnYWluKSB7CisgICAgcmV0dXJuIG1TdHJlYW0tPnNldF9nYWluKG1TdHJlYW0sIGdhaW4pOworfQorCitzdGF0dXNfdCBTdHJlYW1JbkhhbExvY2FsOjpyZWFkKHZvaWQgKmJ1ZmZlciwgc2l6ZV90IGJ5dGVzLCBzaXplX3QgKnJlYWQpIHsKKyAgICBzc2l6ZV90IHJlYWRSZXN1bHQgPSBtU3RyZWFtLT5yZWFkKG1TdHJlYW0sIGJ1ZmZlciwgYnl0ZXMpOworICAgIGlmIChyZWFkUmVzdWx0ID4gMCkgeworICAgICAgICAqcmVhZCA9IHJlYWRSZXN1bHQ7CisgICAgICAgIG1TdHJlYW1Qb3dlckxvZy5sb2coIGJ1ZmZlciwgKnJlYWQpOworICAgICAgICByZXR1cm4gT0s7CisgICAgfSBlbHNlIHsKKyAgICAgICAgKnJlYWQgPSAwOworICAgICAgICByZXR1cm4gcmVhZFJlc3VsdDsKKyAgICB9Cit9CisKK3N0YXR1c190IFN0cmVhbUluSGFsTG9jYWw6OmdldElucHV0RnJhbWVzTG9zdCh1aW50MzJfdCAqZnJhbWVzTG9zdCkgeworICAgICpmcmFtZXNMb3N0ID0gbVN0cmVhbS0+Z2V0X2lucHV0X2ZyYW1lc19sb3N0KG1TdHJlYW0pOworICAgIHJldHVybiBPSzsKK30KKworc3RhdHVzX3QgU3RyZWFtSW5IYWxMb2NhbDo6Z2V0Q2FwdHVyZVBvc2l0aW9uKGludDY0X3QgKmZyYW1lcywgaW50NjRfdCAqdGltZSkgeworICAgIGlmIChtU3RyZWFtLT5nZXRfY2FwdHVyZV9wb3NpdGlvbiA9PSBOVUxMKSByZXR1cm4gSU5WQUxJRF9PUEVSQVRJT047CisgICAgcmV0dXJuIG1TdHJlYW0tPmdldF9jYXB0dXJlX3Bvc2l0aW9uKG1TdHJlYW0sIGZyYW1lcywgdGltZSk7Cit9CisKK3N0YXR1c190IFN0cmVhbUluSGFsTG9jYWw6OnVwZGF0ZVNpbmtNZXRhZGF0YShjb25zdCBTaW5rTWV0YWRhdGEmIHNpbmtNZXRhZGF0YSkgeworICAgIGlmIChtU3RyZWFtLT51cGRhdGVfc2lua19tZXRhZGF0YSA9PSBudWxscHRyKSB7CisgICAgICAgIHJldHVybiBJTlZBTElEX09QRVJBVElPTjsKKyAgICB9CisgICAgY29uc3Qgc2lua19tZXRhZGF0YV90IG1ldGFkYXRhIHsKKyAgICAgICAgLnRyYWNrX2NvdW50ID0gc2lua01ldGFkYXRhLnRyYWNrcy5zaXplKCksCisgICAgICAgIC8vIGNvbnN0IGNhc3QgaXMgZmluZSBhcyBpdCBpcyBpbiBhIGNvbnN0IHN0cnVjdHVyZQorICAgICAgICAudHJhY2tzID0gY29uc3RfY2FzdDxyZWNvcmRfdHJhY2tfbWV0YWRhdGEqPihzaW5rTWV0YWRhdGEudHJhY2tzLmRhdGEoKSksCisgICAgfTsKKyAgICBtU3RyZWFtLT51cGRhdGVfc2lua19tZXRhZGF0YShtU3RyZWFtLCAmbWV0YWRhdGEpOworICAgIHJldHVybiBPSzsKK30KKworc3RhdHVzX3QgU3RyZWFtSW5IYWxMb2NhbDo6c3RhcnQoKSB7CisgICAgaWYgKG1TdHJlYW0tPnN0YXJ0ID09IE5VTEwpIHJldHVybiBJTlZBTElEX09QRVJBVElPTjsKKyAgICByZXR1cm4gbVN0cmVhbS0+c3RhcnQobVN0cmVhbSk7Cit9CisKK3N0YXR1c190IFN0cmVhbUluSGFsTG9jYWw6OnN0b3AoKSB7CisgICAgaWYgKG1TdHJlYW0tPnN0b3AgPT0gTlVMTCkgcmV0dXJuIElOVkFMSURfT1BFUkFUSU9OOworICAgIHJldHVybiBtU3RyZWFtLT5zdG9wKG1TdHJlYW0pOworfQorCitzdGF0dXNfdCBTdHJlYW1JbkhhbExvY2FsOjpjcmVhdGVNbWFwQnVmZmVyKGludDMyX3QgbWluU2l6ZUZyYW1lcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgYXVkaW9fbW1hcF9idWZmZXJfaW5mbyAqaW5mbykgeworICAgIGlmIChtU3RyZWFtLT5jcmVhdGVfbW1hcF9idWZmZXIgPT0gTlVMTCkgcmV0dXJuIElOVkFMSURfT1BFUkFUSU9OOworICAgIHJldHVybiBtU3RyZWFtLT5jcmVhdGVfbW1hcF9idWZmZXIobVN0cmVhbSwgbWluU2l6ZUZyYW1lcywgaW5mbyk7Cit9CisKK3N0YXR1c190IFN0cmVhbUluSGFsTG9jYWw6OmdldE1tYXBQb3NpdGlvbihzdHJ1Y3QgYXVkaW9fbW1hcF9wb3NpdGlvbiAqcG9zaXRpb24pIHsKKyAgICBpZiAobVN0cmVhbS0+Z2V0X21tYXBfcG9zaXRpb24gPT0gTlVMTCkgcmV0dXJuIElOVkFMSURfT1BFUkFUSU9OOworICAgIHJldHVybiBtU3RyZWFtLT5nZXRfbW1hcF9wb3NpdGlvbihtU3RyZWFtLCBwb3NpdGlvbik7Cit9CisKKyNpZiBNQUpPUl9WRVJTSU9OID09IDIKK3N0YXR1c190IFN0cmVhbUluSGFsTG9jYWw6OmdldEFjdGl2ZU1pY3JvcGhvbmVzKAorICAgICAgICBzdGQ6OnZlY3RvcjxtZWRpYTo6TWljcm9waG9uZUluZm8+ICptaWNyb3Bob25lcyBfX3VudXNlZCkgeworICAgIHJldHVybiBJTlZBTElEX09QRVJBVElPTjsKK30KKyNlbGlmIE1BSk9SX1ZFUlNJT04gPT0gNAorc3RhdHVzX3QgU3RyZWFtSW5IYWxMb2NhbDo6Z2V0QWN0aXZlTWljcm9waG9uZXMoc3RkOjp2ZWN0b3I8bWVkaWE6Ok1pY3JvcGhvbmVJbmZvPiAqbWljcm9waG9uZXMpIHsKKyAgICBpZiAobVN0cmVhbS0+Z2V0X2FjdGl2ZV9taWNyb3Bob25lcyA9PSBOVUxMKSByZXR1cm4gSU5WQUxJRF9PUEVSQVRJT047CisgICAgc2l6ZV90IGFjdHVhbF9taWNzID0gQVVESU9fTUlDUk9QSE9ORV9NQVhfQ09VTlQ7CisgICAgYXVkaW9fbWljcm9waG9uZV9jaGFyYWN0ZXJpc3RpY190IG1pY19hcnJheVtBVURJT19NSUNST1BIT05FX01BWF9DT1VOVF07CisgICAgc3RhdHVzX3Qgc3RhdHVzID0gbVN0cmVhbS0+Z2V0X2FjdGl2ZV9taWNyb3Bob25lcyhtU3RyZWFtLCAmbWljX2FycmF5WzBdLCAmYWN0dWFsX21pY3MpOworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgYWN0dWFsX21pY3M7IGkrKykgeworICAgICAgICBtZWRpYTo6TWljcm9waG9uZUluZm8gbWljcm9waG9uZUluZm8gPSBtZWRpYTo6TWljcm9waG9uZUluZm8obWljX2FycmF5W2ldKTsKKyAgICAgICAgbWljcm9waG9uZXMtPnB1c2hfYmFjayhtaWNyb3Bob25lSW5mbyk7CisgICAgfQorICAgIHJldHVybiBzdGF0dXM7Cit9CisjZW5kaWYKKworfSAvLyBuYW1lc3BhY2UgQ1BQX1ZFUlNJT04KK30gLy8gbmFtZXNwYWNlIGFuZHJvaWQKZGlmZiAtLWdpdCBhL21lZGlhL2xpYmF1ZGlvaGFsL2ltcGwvU3RyZWFtSGFsTG9jYWwuaCBiL21lZGlhL2xpYmF1ZGlvaGFsL2ltcGwvU3RyZWFtSGFsTG9jYWwuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jZWE0MjI5Ci0tLSAvZGV2L251bGwKKysrIGIvbWVkaWEvbGliYXVkaW9oYWwvaW1wbC9TdHJlYW1IYWxMb2NhbC5oCkBAIC0wLDAgKzEsMjIxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE2IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KKworI2lmbmRlZiBBTkRST0lEX0hBUkRXQVJFX1NUUkVBTV9IQUxfTE9DQUxfSAorI2RlZmluZSBBTkRST0lEX0hBUkRXQVJFX1NUUkVBTV9IQUxfTE9DQUxfSAorCisjaW5jbHVkZSA8bWVkaWEvYXVkaW9oYWwvU3RyZWFtSGFsSW50ZXJmYWNlLmg+CisjaW5jbHVkZSAiU3RyZWFtUG93ZXJMb2cuaCIKKworbmFtZXNwYWNlIGFuZHJvaWQgeworbmFtZXNwYWNlIENQUF9WRVJTSU9OIHsKKworY2xhc3MgRGV2aWNlSGFsTG9jYWw7CisKK2NsYXNzIFN0cmVhbUhhbExvY2FsIDogcHVibGljIHZpcnR1YWwgU3RyZWFtSGFsSW50ZXJmYWNlCit7CisgIHB1YmxpYzoKKyAgICAvLyBSZXR1cm4gdGhlIHNhbXBsaW5nIHJhdGUgaW4gSHogLSBlZy4gNDQxMDAuCisgICAgdmlydHVhbCBzdGF0dXNfdCBnZXRTYW1wbGVSYXRlKHVpbnQzMl90ICpyYXRlKTsKKworICAgIC8vIFJldHVybiBzaXplIG9mIGlucHV0L291dHB1dCBidWZmZXIgaW4gYnl0ZXMgZm9yIHRoaXMgc3RyZWFtIC0gZWcuIDQ4MDAuCisgICAgdmlydHVhbCBzdGF0dXNfdCBnZXRCdWZmZXJTaXplKHNpemVfdCAqc2l6ZSk7CisKKyAgICAvLyBSZXR1cm4gdGhlIGNoYW5uZWwgbWFzay4KKyAgICB2aXJ0dWFsIHN0YXR1c190IGdldENoYW5uZWxNYXNrKGF1ZGlvX2NoYW5uZWxfbWFza190ICptYXNrKTsKKworICAgIC8vIFJldHVybiB0aGUgYXVkaW8gZm9ybWF0IC0gZS5nLiBBVURJT19GT1JNQVRfUENNXzE2X0JJVC4KKyAgICB2aXJ0dWFsIHN0YXR1c190IGdldEZvcm1hdChhdWRpb19mb3JtYXRfdCAqZm9ybWF0KTsKKworICAgIC8vIENvbnZlbmllbmNlIG1ldGhvZC4KKyAgICB2aXJ0dWFsIHN0YXR1c190IGdldEF1ZGlvUHJvcGVydGllcygKKyAgICAgICAgICAgIHVpbnQzMl90ICpzYW1wbGVSYXRlLCBhdWRpb19jaGFubmVsX21hc2tfdCAqbWFzaywgYXVkaW9fZm9ybWF0X3QgKmZvcm1hdCk7CisKKyAgICAvLyBTZXQgYXVkaW8gc3RyZWFtIHBhcmFtZXRlcnMuCisgICAgdmlydHVhbCBzdGF0dXNfdCBzZXRQYXJhbWV0ZXJzKGNvbnN0IFN0cmluZzgmIGt2UGFpcnMpOworCisgICAgLy8gR2V0IGF1ZGlvIHN0cmVhbSBwYXJhbWV0ZXJzLgorICAgIHZpcnR1YWwgc3RhdHVzX3QgZ2V0UGFyYW1ldGVycyhjb25zdCBTdHJpbmc4JiBrZXlzLCBTdHJpbmc4ICp2YWx1ZXMpOworCisgICAgLy8gQWRkIG9yIHJlbW92ZSB0aGUgZWZmZWN0IG9uIHRoZSBzdHJlYW0uCisgICAgdmlydHVhbCBzdGF0dXNfdCBhZGRFZmZlY3Qoc3A8RWZmZWN0SGFsSW50ZXJmYWNlPiBlZmZlY3QpOworICAgIHZpcnR1YWwgc3RhdHVzX3QgcmVtb3ZlRWZmZWN0KHNwPEVmZmVjdEhhbEludGVyZmFjZT4gZWZmZWN0KTsKKworICAgIC8vIFB1dCB0aGUgYXVkaW8gaGFyZHdhcmUgaW5wdXQvb3V0cHV0IGludG8gc3RhbmRieSBtb2RlLgorICAgIHZpcnR1YWwgc3RhdHVzX3Qgc3RhbmRieSgpOworCisgICAgdmlydHVhbCBzdGF0dXNfdCBkdW1wKGludCBmZCk7CisKKyAgICAvLyBTdGFydCBhIHN0cmVhbSBvcGVyYXRpbmcgaW4gbW1hcCBtb2RlLgorICAgIHZpcnR1YWwgc3RhdHVzX3Qgc3RhcnQoKSA9IDA7CisKKyAgICAvLyBTdG9wIGEgc3RyZWFtIG9wZXJhdGluZyBpbiBtbWFwIG1vZGUuCisgICAgdmlydHVhbCBzdGF0dXNfdCBzdG9wKCkgPSAwOworCisgICAgLy8gUmV0cmlldmUgaW5mb3JtYXRpb24gb24gdGhlIGRhdGEgYnVmZmVyIGluIG1tYXAgbW9kZS4KKyAgICB2aXJ0dWFsIHN0YXR1c190IGNyZWF0ZU1tYXBCdWZmZXIoaW50MzJfdCBtaW5TaXplRnJhbWVzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgYXVkaW9fbW1hcF9idWZmZXJfaW5mbyAqaW5mbykgPSAwOworCisgICAgLy8gR2V0IGN1cnJlbnQgcmVhZC93cml0ZSBwb3NpdGlvbiBpbiB0aGUgbW1hcCBidWZmZXIKKyAgICB2aXJ0dWFsIHN0YXR1c190IGdldE1tYXBQb3NpdGlvbihzdHJ1Y3QgYXVkaW9fbW1hcF9wb3NpdGlvbiAqcG9zaXRpb24pID0gMDsKKworICAgIC8vIFNldCB0aGUgcHJpb3JpdHkgb2YgdGhlIHRocmVhZCB0aGF0IGludGVyYWN0cyB3aXRoIHRoZSBIQUwKKyAgICAvLyAobXVzdCBtYXRjaCB0aGUgcHJpb3JpdHkgb2YgdGhlIGF1ZGlvZmxpbmdlcidzIHRocmVhZCB0aGF0IGNhbGxzICdyZWFkJyAvICd3cml0ZScpCisgICAgdmlydHVhbCBzdGF0dXNfdCBzZXRIYWxUaHJlYWRQcmlvcml0eShpbnQgcHJpb3JpdHkpOworCisgIHByb3RlY3RlZDoKKyAgICAvLyBTdWJjbGFzc2VzIGNhbiBub3QgYmUgY29uc3RydWN0ZWQgZGlyZWN0bHkgYnkgY2xpZW50cy4KKyAgICBTdHJlYW1IYWxMb2NhbChhdWRpb19zdHJlYW1fdCAqc3RyZWFtLCBzcDxEZXZpY2VIYWxMb2NhbD4gZGV2aWNlKTsKKworICAgIC8vIFRoZSBkZXN0cnVjdG9yIGF1dG9tYXRpY2FsbHkgY2xvc2VzIHRoZSBzdHJlYW0uCisgICAgdmlydHVhbCB+U3RyZWFtSGFsTG9jYWwoKTsKKworICAgIHNwPERldmljZUhhbExvY2FsPiBtRGV2aWNlOworCisgICAgLy8gbVN0cmVhbVBvd2VyTG9nIGlzIHVzZWQgZm9yIGF1ZGlvIHNpZ25hbCBwb3dlciBsb2dnaW5nLgorICAgIFN0cmVhbVBvd2VyTG9nIG1TdHJlYW1Qb3dlckxvZzsKKworICBwcml2YXRlOgorICAgIGF1ZGlvX3N0cmVhbV90ICptU3RyZWFtOworfTsKKworY2xhc3MgU3RyZWFtT3V0SGFsTG9jYWwgOiBwdWJsaWMgU3RyZWFtT3V0SGFsSW50ZXJmYWNlLCBwdWJsaWMgU3RyZWFtSGFsTG9jYWwgeworICBwdWJsaWM6CisgICAgLy8gUmV0dXJuIHRoZSBmcmFtZSBzaXplIChudW1iZXIgb2YgYnl0ZXMgcGVyIHNhbXBsZSkgb2YgYSBzdHJlYW0uCisgICAgdmlydHVhbCBzdGF0dXNfdCBnZXRGcmFtZVNpemUoc2l6ZV90ICpzaXplKTsKKworICAgIC8vIFJldHVybiB0aGUgYXVkaW8gaGFyZHdhcmUgZHJpdmVyIGVzdGltYXRlZCBsYXRlbmN5IGluIG1pbGxpc2Vjb25kcy4KKyAgICB2aXJ0dWFsIHN0YXR1c190IGdldExhdGVuY3kodWludDMyX3QgKmxhdGVuY3kpOworCisgICAgLy8gVXNlIHRoaXMgbWV0aG9kIGluIHNpdHVhdGlvbnMgd2hlcmUgYXVkaW8gbWl4aW5nIGlzIGRvbmUgaW4gdGhlIGhhcmR3YXJlLgorICAgIHZpcnR1YWwgc3RhdHVzX3Qgc2V0Vm9sdW1lKGZsb2F0IGxlZnQsIGZsb2F0IHJpZ2h0KTsKKworICAgIC8vIFdyaXRlIGF1ZGlvIGJ1ZmZlciB0byBkcml2ZXIuCisgICAgdmlydHVhbCBzdGF0dXNfdCB3cml0ZShjb25zdCB2b2lkICpidWZmZXIsIHNpemVfdCBieXRlcywgc2l6ZV90ICp3cml0dGVuKTsKKworICAgIC8vIFJldHVybiB0aGUgbnVtYmVyIG9mIGF1ZGlvIGZyYW1lcyB3cml0dGVuIGJ5IHRoZSBhdWRpbyBkc3AgdG8gREFDIHNpbmNlCisgICAgLy8gdGhlIG91dHB1dCBoYXMgZXhpdGVkIHN0YW5kYnkuCisgICAgdmlydHVhbCBzdGF0dXNfdCBnZXRSZW5kZXJQb3NpdGlvbih1aW50MzJfdCAqZHNwRnJhbWVzKTsKKworICAgIC8vIEdldCB0aGUgbG9jYWwgdGltZSBhdCB3aGljaCB0aGUgbmV4dCB3cml0ZSB0byB0aGUgYXVkaW8gZHJpdmVyIHdpbGwgYmUgcHJlc2VudGVkLgorICAgIHZpcnR1YWwgc3RhdHVzX3QgZ2V0TmV4dFdyaXRlVGltZXN0YW1wKGludDY0X3QgKnRpbWVzdGFtcCk7CisKKyAgICAvLyBTZXQgdGhlIGNhbGxiYWNrIGZvciBub3RpZnlpbmcgY29tcGxldGlvbiBvZiBub24tYmxvY2tpbmcgd3JpdGUgYW5kIGRyYWluLgorICAgIHZpcnR1YWwgc3RhdHVzX3Qgc2V0Q2FsbGJhY2sod3A8U3RyZWFtT3V0SGFsSW50ZXJmYWNlQ2FsbGJhY2s+IGNhbGxiYWNrKTsKKworICAgIC8vIFJldHVybnMgd2hldGhlciBwYXVzZSBhbmQgcmVzdW1lIG9wZXJhdGlvbnMgYXJlIHN1cHBvcnRlZC4KKyAgICB2aXJ0dWFsIHN0YXR1c190IHN1cHBvcnRzUGF1c2VBbmRSZXN1bWUoYm9vbCAqc3VwcG9ydHNQYXVzZSwgYm9vbCAqc3VwcG9ydHNSZXN1bWUpOworCisgICAgLy8gTm90aWZpZXMgdG8gdGhlIGF1ZGlvIGRyaXZlciB0byByZXN1bWUgcGxheWJhY2sgZm9sbG93aW5nIGEgcGF1c2UuCisgICAgdmlydHVhbCBzdGF0dXNfdCBwYXVzZSgpOworCisgICAgLy8gTm90aWZpZXMgdG8gdGhlIGF1ZGlvIGRyaXZlciB0byByZXN1bWUgcGxheWJhY2sgZm9sbG93aW5nIGEgcGF1c2UuCisgICAgdmlydHVhbCBzdGF0dXNfdCByZXN1bWUoKTsKKworICAgIC8vIFJldHVybnMgd2hldGhlciBkcmFpbiBvcGVyYXRpb24gaXMgc3VwcG9ydGVkLgorICAgIHZpcnR1YWwgc3RhdHVzX3Qgc3VwcG9ydHNEcmFpbihib29sICpzdXBwb3J0c0RyYWluKTsKKworICAgIC8vIFJlcXVlc3RzIG5vdGlmaWNhdGlvbiB3aGVuIGRhdGEgYnVmZmVyZWQgYnkgdGhlIGRyaXZlci9oYXJkd2FyZSBoYXMgYmVlbiBwbGF5ZWQuCisgICAgdmlydHVhbCBzdGF0dXNfdCBkcmFpbihib29sIGVhcmx5Tm90aWZ5KTsKKworICAgIC8vIE5vdGlmaWVzIHRvIHRoZSBhdWRpbyBkcml2ZXIgdG8gZmx1c2ggdGhlIHF1ZXVlZCBkYXRhLgorICAgIHZpcnR1YWwgc3RhdHVzX3QgZmx1c2goKTsKKworICAgIC8vIFJldHVybiBhIHJlY2VudCBjb3VudCBvZiB0aGUgbnVtYmVyIG9mIGF1ZGlvIGZyYW1lcyBwcmVzZW50ZWQgdG8gYW4gZXh0ZXJuYWwgb2JzZXJ2ZXIuCisgICAgdmlydHVhbCBzdGF0dXNfdCBnZXRQcmVzZW50YXRpb25Qb3NpdGlvbih1aW50NjRfdCAqZnJhbWVzLCBzdHJ1Y3QgdGltZXNwZWMgKnRpbWVzdGFtcCk7CisKKyAgICAvLyBTdGFydCBhIHN0cmVhbSBvcGVyYXRpbmcgaW4gbW1hcCBtb2RlLgorICAgIHZpcnR1YWwgc3RhdHVzX3Qgc3RhcnQoKTsKKworICAgIC8vIFN0b3AgYSBzdHJlYW0gb3BlcmF0aW5nIGluIG1tYXAgbW9kZS4KKyAgICB2aXJ0dWFsIHN0YXR1c190IHN0b3AoKTsKKworICAgIC8vIFJldHJpZXZlIGluZm9ybWF0aW9uIG9uIHRoZSBkYXRhIGJ1ZmZlciBpbiBtbWFwIG1vZGUuCisgICAgdmlydHVhbCBzdGF0dXNfdCBjcmVhdGVNbWFwQnVmZmVyKGludDMyX3QgbWluU2l6ZUZyYW1lcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGF1ZGlvX21tYXBfYnVmZmVyX2luZm8gKmluZm8pOworCisgICAgLy8gR2V0IGN1cnJlbnQgcmVhZC93cml0ZSBwb3NpdGlvbiBpbiB0aGUgbW1hcCBidWZmZXIKKyAgICB2aXJ0dWFsIHN0YXR1c190IGdldE1tYXBQb3NpdGlvbihzdHJ1Y3QgYXVkaW9fbW1hcF9wb3NpdGlvbiAqcG9zaXRpb24pOworCisgICAgLy8gQ2FsbGVkIHdoZW4gdGhlIG1ldGFkYXRhIG9mIHRoZSBzdHJlYW0ncyBzb3VyY2UgaGFzIGJlZW4gY2hhbmdlZC4KKyAgICBzdGF0dXNfdCB1cGRhdGVTb3VyY2VNZXRhZGF0YShjb25zdCBTb3VyY2VNZXRhZGF0YSYgc291cmNlTWV0YWRhdGEpIG92ZXJyaWRlOworCisgIHByaXZhdGU6CisgICAgYXVkaW9fc3RyZWFtX291dF90ICptU3RyZWFtOworICAgIHdwPFN0cmVhbU91dEhhbEludGVyZmFjZUNhbGxiYWNrPiBtQ2FsbGJhY2s7CisKKyAgICBmcmllbmQgY2xhc3MgRGV2aWNlSGFsTG9jYWw7CisKKyAgICAvLyBDYW4gbm90IGJlIGNvbnN0cnVjdGVkIGRpcmVjdGx5IGJ5IGNsaWVudHMuCisgICAgU3RyZWFtT3V0SGFsTG9jYWwoYXVkaW9fc3RyZWFtX291dF90ICpzdHJlYW0sIHNwPERldmljZUhhbExvY2FsPiBkZXZpY2UpOworCisgICAgdmlydHVhbCB+U3RyZWFtT3V0SGFsTG9jYWwoKTsKKworICAgIHN0YXRpYyBpbnQgYXN5bmNDYWxsYmFjayhzdHJlYW1fY2FsbGJhY2tfZXZlbnRfdCBldmVudCwgdm9pZCAqcGFyYW0sIHZvaWQgKmNvb2tpZSk7Cit9OworCitjbGFzcyBTdHJlYW1JbkhhbExvY2FsIDogcHVibGljIFN0cmVhbUluSGFsSW50ZXJmYWNlLCBwdWJsaWMgU3RyZWFtSGFsTG9jYWwgeworICBwdWJsaWM6CisgICAgLy8gUmV0dXJuIHRoZSBmcmFtZSBzaXplIChudW1iZXIgb2YgYnl0ZXMgcGVyIHNhbXBsZSkgb2YgYSBzdHJlYW0uCisgICAgdmlydHVhbCBzdGF0dXNfdCBnZXRGcmFtZVNpemUoc2l6ZV90ICpzaXplKTsKKworICAgIC8vIFNldCB0aGUgaW5wdXQgZ2FpbiBmb3IgdGhlIGF1ZGlvIGRyaXZlci4KKyAgICB2aXJ0dWFsIHN0YXR1c190IHNldEdhaW4oZmxvYXQgZ2Fpbik7CisKKyAgICAvLyBSZWFkIGF1ZGlvIGJ1ZmZlciBpbiBmcm9tIGRyaXZlci4KKyAgICB2aXJ0dWFsIHN0YXR1c190IHJlYWQodm9pZCAqYnVmZmVyLCBzaXplX3QgYnl0ZXMsIHNpemVfdCAqcmVhZCk7CisKKyAgICAvLyBSZXR1cm4gdGhlIGFtb3VudCBvZiBpbnB1dCBmcmFtZXMgbG9zdCBpbiB0aGUgYXVkaW8gZHJpdmVyLgorICAgIHZpcnR1YWwgc3RhdHVzX3QgZ2V0SW5wdXRGcmFtZXNMb3N0KHVpbnQzMl90ICpmcmFtZXNMb3N0KTsKKworICAgIC8vIFJldHVybiBhIHJlY2VudCBjb3VudCBvZiB0aGUgbnVtYmVyIG9mIGF1ZGlvIGZyYW1lcyByZWNlaXZlZCBhbmQKKyAgICAvLyB0aGUgY2xvY2sgdGltZSBhc3NvY2lhdGVkIHdpdGggdGhhdCBmcmFtZSBjb3VudC4KKyAgICB2aXJ0dWFsIHN0YXR1c190IGdldENhcHR1cmVQb3NpdGlvbihpbnQ2NF90ICpmcmFtZXMsIGludDY0X3QgKnRpbWUpOworCisgICAgLy8gU3RhcnQgYSBzdHJlYW0gb3BlcmF0aW5nIGluIG1tYXAgbW9kZS4KKyAgICB2aXJ0dWFsIHN0YXR1c190IHN0YXJ0KCk7CisKKyAgICAvLyBTdG9wIGEgc3RyZWFtIG9wZXJhdGluZyBpbiBtbWFwIG1vZGUuCisgICAgdmlydHVhbCBzdGF0dXNfdCBzdG9wKCk7CisKKyAgICAvLyBSZXRyaWV2ZSBpbmZvcm1hdGlvbiBvbiB0aGUgZGF0YSBidWZmZXIgaW4gbW1hcCBtb2RlLgorICAgIHZpcnR1YWwgc3RhdHVzX3QgY3JlYXRlTW1hcEJ1ZmZlcihpbnQzMl90IG1pblNpemVGcmFtZXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBhdWRpb19tbWFwX2J1ZmZlcl9pbmZvICppbmZvKTsKKworICAgIC8vIEdldCBjdXJyZW50IHJlYWQvd3JpdGUgcG9zaXRpb24gaW4gdGhlIG1tYXAgYnVmZmVyCisgICAgdmlydHVhbCBzdGF0dXNfdCBnZXRNbWFwUG9zaXRpb24oc3RydWN0IGF1ZGlvX21tYXBfcG9zaXRpb24gKnBvc2l0aW9uKTsKKworICAgIC8vIEdldCBhY3RpdmUgbWljcm9waG9uZXMKKyAgICB2aXJ0dWFsIHN0YXR1c190IGdldEFjdGl2ZU1pY3JvcGhvbmVzKHN0ZDo6dmVjdG9yPG1lZGlhOjpNaWNyb3Bob25lSW5mbz4gKm1pY3JvcGhvbmVzKTsKKworICAgIC8vIENhbGxlZCB3aGVuIHRoZSBtZXRhZGF0YSBvZiB0aGUgc3RyZWFtJ3Mgc2luayBoYXMgYmVlbiBjaGFuZ2VkLgorICAgIHN0YXR1c190IHVwZGF0ZVNpbmtNZXRhZGF0YShjb25zdCBTaW5rTWV0YWRhdGEmIHNpbmtNZXRhZGF0YSkgb3ZlcnJpZGU7CisKKyAgcHJpdmF0ZToKKyAgICBhdWRpb19zdHJlYW1faW5fdCAqbVN0cmVhbTsKKworICAgIGZyaWVuZCBjbGFzcyBEZXZpY2VIYWxMb2NhbDsKKworICAgIC8vIENhbiBub3QgYmUgY29uc3RydWN0ZWQgZGlyZWN0bHkgYnkgY2xpZW50cy4KKyAgICBTdHJlYW1JbkhhbExvY2FsKGF1ZGlvX3N0cmVhbV9pbl90ICpzdHJlYW0sIHNwPERldmljZUhhbExvY2FsPiBkZXZpY2UpOworCisgICAgdmlydHVhbCB+U3RyZWFtSW5IYWxMb2NhbCgpOworfTsKKworfSAvLyBuYW1lc3BhY2UgQ1BQX1ZFUlNJT04KK30gLy8gbmFtZXNwYWNlIGFuZHJvaWQKKworI2VuZGlmIC8vIEFORFJPSURfSEFSRFdBUkVfU1RSRUFNX0hBTF9MT0NBTF9ICmRpZmYgLS1naXQgYS9tZWRpYS9saWJhdWRpb2hhbC9pbXBsL1N0cmVhbVBvd2VyTG9nLmggYi9tZWRpYS9saWJhdWRpb2hhbC9pbXBsL1N0cmVhbVBvd2VyTG9nLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWZkMzkxMgotLS0gL2Rldi9udWxsCisrKyBiL21lZGlhL2xpYmF1ZGlvaGFsL2ltcGwvU3RyZWFtUG93ZXJMb2cuaApAQCAtMCwwICsxLDEwNCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNyBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCisKKyNpZm5kZWYgQU5EUk9JRF9IQVJEV0FSRV9TVFJFQU1fUE9XRVJfTE9HX0gKKyNkZWZpbmUgQU5EUk9JRF9IQVJEV0FSRV9TVFJFQU1fUE9XRVJfTE9HX0gKKworI2luY2x1ZGUgPGF1ZGlvX3V0aWxzL2Nsb2NrLmg+CisjaW5jbHVkZSA8YXVkaW9fdXRpbHMvUG93ZXJMb2cuaD4KKyNpbmNsdWRlIDxjdXRpbHMvcHJvcGVydGllcy5oPgorI2luY2x1ZGUgPHN5c3RlbS9hdWRpby5oPgorCituYW1lc3BhY2UgYW5kcm9pZCB7CituYW1lc3BhY2UgQ1BQX1ZFUlNJT04geworCitjbGFzcyBTdHJlYW1Qb3dlckxvZyB7CitwdWJsaWM6CisgICAgU3RyZWFtUG93ZXJMb2coKSA6CisgICAgICAgIG1Jc1VzZXJEZWJ1Z09yRW5nQnVpbGQoaXNfdXNlcmRlYnVnX29yX2VuZ19idWlsZCgpKSwKKyAgICAgICAgbVBvd2VyTG9nKG51bGxwdHIpLAorICAgICAgICBtRnJhbWVTaXplKDApIHsKKyAgICAgICAgLy8gdXNlIGluaXQoKSB0byBzZXQgdXAgdGhlIHBvd2VyIGxvZy4KKyAgICB9CisKKyAgICB+U3RyZWFtUG93ZXJMb2coKSB7CisgICAgICAgIHBvd2VyX2xvZ19kZXN0cm95KG1Qb3dlckxvZyk7IC8vIE9LIGZvciBudWxsIG1Qb3dlckxvZworICAgICAgICBtUG93ZXJMb2cgPSBudWxscHRyOworICAgIH0KKworICAgIC8vIEEgb25lLXRpbWUgaW5pdGlhbGl6YXRpb24gKGRvIG5vdCBjYWxsIHR3aWNlKSBiZWZvcmUgdXNpbmcgU3RyZWFtUG93ZXJMb2cuCisgICAgdm9pZCBpbml0KHVpbnQzMl90IHNhbXBsZVJhdGUsIGF1ZGlvX2NoYW5uZWxfbWFza190IGNoYW5uZWxNYXNrLCBhdWRpb19mb3JtYXRfdCBmb3JtYXQpIHsKKyAgICAgICAgaWYgKG1Qb3dlckxvZyA9PSBudWxscHRyKSB7CisgICAgICAgICAgICAvLyBOb3RlOiBBIHdheSB0byBnZXQgY2hhbm5lbCBjb3VudCBmb3IgYm90aCBpbnB1dCBhbmQgb3V0cHV0IGNoYW5uZWwgbWFza3MKKyAgICAgICAgICAgIC8vIGJ1dCBkb2VzIG5vdCBjaGVjayB2YWxpZGl0eSBvZiB0aGUgY2hhbm5lbCBtYXNrLgorICAgICAgICAgICAgY29uc3QgdWludDMyX3QgY2hhbm5lbENvdW50ID0gcG9wY291bnQoYXVkaW9fY2hhbm5lbF9tYXNrX2dldF9iaXRzKGNoYW5uZWxNYXNrKSk7CisgICAgICAgICAgICBtRnJhbWVTaXplID0gY2hhbm5lbENvdW50ICogYXVkaW9fYnl0ZXNfcGVyX3NhbXBsZShmb3JtYXQpOworICAgICAgICAgICAgaWYgKG1GcmFtZVNpemUgPiAwKSB7CisgICAgICAgICAgICAgICAgY29uc3Qgc2l6ZV90IGtQb3dlckxvZ0ZyYW1lc1BlckVudHJ5ID0KKyAgICAgICAgICAgICAgICAgICAgICAgIChsb25nIGxvbmcpc2FtcGxlUmF0ZSAqIGtQb3dlckxvZ1NhbXBsaW5nSW50ZXJ2YWxNcyAvIDEwMDA7CisgICAgICAgICAgICAgICAgbVBvd2VyTG9nID0gcG93ZXJfbG9nX2NyZWF0ZSgKKyAgICAgICAgICAgICAgICAgICAgICAgIHNhbXBsZVJhdGUsCisgICAgICAgICAgICAgICAgICAgICAgICBjaGFubmVsQ291bnQsCisgICAgICAgICAgICAgICAgICAgICAgICBmb3JtYXQsCisgICAgICAgICAgICAgICAgICAgICAgICBrUG93ZXJMb2dFbnRyaWVzLAorICAgICAgICAgICAgICAgICAgICAgICAga1Bvd2VyTG9nRnJhbWVzUGVyRW50cnkpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIC8vIG1Qb3dlckxvZyBtYXkgYmUgTlVMTCAobm90IHRoZSByaWdodCBidWlsZCwgZm9ybWF0IG5vdCBhY2NlcHRlZCwgZXRjLikuCisgICAgfQorCisgICAgLy8gRHVtcCB0aGUgcG93ZXIgbG9nIHRvIGZkLgorICAgIHZvaWQgZHVtcChpbnQgZmQpIGNvbnN0IHsKKyAgICAgICAgLy8gT0sgZm9yIG51bGwgbVBvd2VyTG9nCisgICAgICAgICh2b2lkKXBvd2VyX2xvZ19kdW1wKAorICAgICAgICAgICAgICAgIG1Qb3dlckxvZywgZmQsICIgICAgICAiIC8qIHByZWZpeCAqLywga1Bvd2VyTG9nTGluZXMsIDAgLyogbGltaXRfbnMgKi8pOworICAgIH0KKworICAgIC8vIExvZyB0aGUgYXVkaW8gZGF0YSBjb250YWluZWQgaW4gYnVmZmVyLgorICAgIHZvaWQgbG9nKGNvbnN0IHZvaWQgKmJ1ZmZlciwgc2l6ZV90IHNpemVJbkJ5dGVzKSBjb25zdCB7CisgICAgICAgIGlmIChtUG93ZXJMb2cgIT0gbnVsbHB0cikgeyAvLyBtRnJhbWVTaXplIGlzIGFsd2F5cyBub256ZXJvIGlmIG1Qb3dlckxvZyBleGlzdHMuCisgICAgICAgICAgICBwb3dlcl9sb2dfbG9nKAorICAgICAgICAgICAgICAgICAgICBtUG93ZXJMb2csIGJ1ZmZlciwgc2l6ZUluQnl0ZXMgLyBtRnJhbWVTaXplLCBhdWRpb191dGlsc19nZXRfcmVhbF90aW1lX25zKCkpOworICAgICAgICB9CisgICAgfQorCisgICAgYm9vbCBpc1VzZXJEZWJ1Z09yRW5nQnVpbGQoKSBjb25zdCB7CisgICAgICAgIHJldHVybiBtSXNVc2VyRGVidWdPckVuZ0J1aWxkOworICAgIH0KKworcHJpdmF0ZToKKworICAgIHN0YXRpYyBpbmxpbmUgYm9vbCBpc191c2VyZGVidWdfb3JfZW5nX2J1aWxkKCkgeworICAgICAgICBjaGFyIHZhbHVlW1BST1BFUlRZX1ZBTFVFX01BWF07CisgICAgICAgICh2b2lkKXByb3BlcnR5X2dldCgicm8uYnVpbGQudHlwZSIsIHZhbHVlLCAidW5rbm93biIpOyAvLyBpZ25vcmUgYWN0dWFsIGxlbmd0aAorICAgICAgICByZXR1cm4gc3RyY21wKHZhbHVlLCAidXNlcmRlYnVnIikgPT0gMCB8fCBzdHJjbXAodmFsdWUsICJlbmciKSA9PSAwOworICAgIH0KKworICAgIC8vIEF1ZGlvIHNpZ25hbCBwb3dlciBsb2cgY29uZmlndXJhdGlvbi4KKyAgICBzdGF0aWMgY29uc3Qgc2l6ZV90IGtQb3dlckxvZ0xpbmVzID0gNDA7CisgICAgc3RhdGljIGNvbnN0IHNpemVfdCBrUG93ZXJMb2dTYW1wbGluZ0ludGVydmFsTXMgPSA1MDsKKyAgICBzdGF0aWMgY29uc3Qgc2l6ZV90IGtQb3dlckxvZ0VudHJpZXMgPSAoMSAvKiBtaW51dGVzICovICogNjAgLyogc2Vjb25kcyAqLyAqIDEwMDAgLyogbXNlYyAqLworICAgICAgICAgICAgLyBrUG93ZXJMb2dTYW1wbGluZ0ludGVydmFsTXMpOworCisgICAgY29uc3QgYm9vbCBtSXNVc2VyRGVidWdPckVuZ0J1aWxkOworICAgIHBvd2VyX2xvZ190ICptUG93ZXJMb2c7CisgICAgc2l6ZV90IG1GcmFtZVNpemU7Cit9OworCit9IC8vIG5hbWVzcGFjZSBDUFBfVkVSU0lPTgorfSAvLyBuYW1lc3BhY2UgYW5kcm9pZAorCisjZW5kaWYgLy8gQU5EUk9JRF9IQVJEV0FSRV9TVFJFQU1fUE9XRVJfTE9HX0gKZGlmZiAtLWdpdCBhL21lZGlhL2xpYmF1ZGlvaGFsL2ltcGwvVmVyc2lvbk1hY3JvLmggYi9tZWRpYS9saWJhdWRpb2hhbC9pbXBsL1ZlcnNpb25NYWNyby5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk4ZTljMDcKLS0tIC9kZXYvbnVsbAorKysgYi9tZWRpYS9saWJhdWRpb2hhbC9pbXBsL1ZlcnNpb25NYWNyby5oCkBAIC0wLDAgKzEsMzQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTggVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworCisjaWZuZGVmIEFORFJPSURfSEFSRFdBUkVfVkVSU0lPTl9NQUNST19ICisjZGVmaW5lIEFORFJPSURfSEFSRFdBUkVfVkVSU0lPTl9NQUNST19ICisKKyNpZiAhZGVmaW5lZChNQUpPUl9WRVJTSU9OKSB8fCAhZGVmaW5lZChNSU5PUl9WRVJTSU9OKQorI2Vycm9yICJNQUpPUl9WRVJTSU9OIGFuZCBNSU5PUl9WRVJTSU9OIG11c3QgYmUgZGVmaW5lZCIKKyNlbmRpZgorCisjZGVmaW5lIENPTkNBVF8zKGEsYixjKSBhIyNiIyNjCisjZGVmaW5lIEVYUEFORF9DT05DQVRfMyhhLGIsYykgQ09OQ0FUXzMoYSxiLGMpCisvKiogVGhlIGRpcmVjdG9yeSBuYW1lIG9mIHRoZSB2ZXJzaW9uOiA8bWFqb3I+LjxtaW5vcj4gKi8KKyNkZWZpbmUgRklMRV9WRVJTSU9OIEVYUEFORF9DT05DQVRfMyhNQUpPUl9WRVJTSU9OLC4sTUlOT1JfVkVSU0lPTikKKworI2RlZmluZSBDT05DQVRfNChhLGIsYyxkKSBhIyNiIyNjIyNkCisjZGVmaW5lIEVYUEFORF9DT05DQVRfNChhLGIsYyxkKSBDT05DQVRfNChhLGIsYyxkKQorLyoqIFRoZSBjKysgbmFtZXNwYWNlIG9mIHRoZSB2ZXJzaW9uOiBWPG1ham9yPl88bWlub3I+ICovCisjZGVmaW5lIENQUF9WRVJTSU9OIEVYUEFORF9DT05DQVRfNChWLE1BSk9SX1ZFUlNJT04sXyxNSU5PUl9WRVJTSU9OKQorCisjZW5kaWYgLy8gQU5EUk9JRF9IQVJEV0FSRV9WRVJTSU9OX01BQ1JPX0gKZGlmZiAtLWdpdCBhL21lZGlhL2xpYmF1ZGlvaGFsL2ltcGwvVmVyc2lvblV0aWxzLmggYi9tZWRpYS9saWJhdWRpb2hhbC9pbXBsL1ZlcnNpb25VdGlscy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUwMDQ4OTUKLS0tIC9kZXYvbnVsbAorKysgYi9tZWRpYS9saWJhdWRpb2hhbC9pbXBsL1ZlcnNpb25VdGlscy5oCkBAIC0wLDAgKzEsNjQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTggVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworCisjaWZuZGVmIEFORFJPSURfSEFSRFdBUkVfVkVSU0lPTl9VVElMU19ICisjZGVmaW5lIEFORFJPSURfSEFSRFdBUkVfVkVSU0lPTl9VVElMU19ICisKKyNpbmNsdWRlIDxhbmRyb2lkL2hhcmR3YXJlL2F1ZGlvLzIuMC90eXBlcy5oPgorI2luY2x1ZGUgPGFuZHJvaWQvaGFyZHdhcmUvYXVkaW8vNC4wL3R5cGVzLmg+CisjaW5jbHVkZSA8aGlkbC9IaWRsU3VwcG9ydC5oPgorCit1c2luZyA6OmFuZHJvaWQ6OmhhcmR3YXJlOjphdWRpbzo6Q1BQX1ZFUlNJT046OlBhcmFtZXRlclZhbHVlOwordXNpbmcgOjphbmRyb2lkOjpoYXJkd2FyZTo6YXVkaW86OkNQUF9WRVJTSU9OOjpSZXN1bHQ7Cit1c2luZyA6OmFuZHJvaWQ6OmhhcmR3YXJlOjpSZXR1cm47Cit1c2luZyA6OmFuZHJvaWQ6OmhhcmR3YXJlOjpoaWRsX3ZlYzsKK3VzaW5nIDo6YW5kcm9pZDo6aGFyZHdhcmU6OmhpZGxfc3RyaW5nOworCituYW1lc3BhY2UgYW5kcm9pZCB7CituYW1lc3BhY2UgQ1BQX1ZFUlNJT04geworbmFtZXNwYWNlIHV0aWxzIHsKKworI2lmIE1BSk9SX1ZFUlNJT04gPT0gMgordGVtcGxhdGUgPGNsYXNzIFQsIGNsYXNzIENhbGxiYWNrPgorUmV0dXJuPHZvaWQ+IGdldFBhcmFtZXRlcnMoVCYgb2JqZWN0LCBoaWRsX3ZlYzxQYXJhbWV0ZXJWYWx1ZT4gLypjb250ZXh0Ki8sCisgICAgICAgICAgICAgICAgICAgICAgICAgICBoaWRsX3ZlYzxoaWRsX3N0cmluZz4ga2V5cywgQ2FsbGJhY2sgY2FsbGJhY2spIHsKKyAgICByZXR1cm4gb2JqZWN0LT5nZXRQYXJhbWV0ZXJzKGtleXMsIGNhbGxiYWNrKTsKK30KKwordGVtcGxhdGUgPGNsYXNzIFQ+CitSZXR1cm48UmVzdWx0PiBzZXRQYXJhbWV0ZXJzKFQmIG9iamVjdCwgaGlkbF92ZWM8UGFyYW1ldGVyVmFsdWU+IC8qY29udGV4dCovLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoaWRsX3ZlYzxQYXJhbWV0ZXJWYWx1ZT4ga2V5cykgeworICAgIHJldHVybiBvYmplY3QtPnNldFBhcmFtZXRlcnMoa2V5cyk7Cit9CisjZWxpZiBNQUpPUl9WRVJTSU9OID09IDQKK3RlbXBsYXRlIDxjbGFzcyBULCBjbGFzcyBDYWxsYmFjaz4KK1JldHVybjx2b2lkPiBnZXRQYXJhbWV0ZXJzKFQmIG9iamVjdCwgaGlkbF92ZWM8UGFyYW1ldGVyVmFsdWU+IGNvbnRleHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBoaWRsX3ZlYzxoaWRsX3N0cmluZz4ga2V5cywgQ2FsbGJhY2sgY2FsbGJhY2spIHsKKyAgICByZXR1cm4gb2JqZWN0LT5nZXRQYXJhbWV0ZXJzKGNvbnRleHQsIGtleXMsIGNhbGxiYWNrKTsKK30KKwordGVtcGxhdGUgPGNsYXNzIFQ+CitSZXR1cm48UmVzdWx0PiBzZXRQYXJhbWV0ZXJzKFQmIG9iamVjdCwgaGlkbF92ZWM8UGFyYW1ldGVyVmFsdWU+IGNvbnRleHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhpZGxfdmVjPFBhcmFtZXRlclZhbHVlPiBrZXlzKSB7CisgICAgcmV0dXJuIG9iamVjdC0+c2V0UGFyYW1ldGVycyhjb250ZXh0LCBrZXlzKTsKK30KKyNlbmRpZgorCit9IC8vIG5hbWVzcGFjZSB1dGlscworfSAvLyBuYW1lc3BhY2UgQ1BQX1ZFUlNJT04KK30gLy8gbmFtZXNwYWNlIGFuZHJvaWQKKworI2VuZGlmIC8vIEFORFJPSURfSEFSRFdBUkVfVkVSU0lPTl9VVElMU19ICmRpZmYgLS1naXQgYS9tZWRpYS9saWJhdWRpb2hhbC9pbXBsL2luY2x1ZGUvbGliYXVkaW9oYWwvRmFjdG9yeUhhbEhpZGwuaCBiL21lZGlhL2xpYmF1ZGlvaGFsL2ltcGwvaW5jbHVkZS9saWJhdWRpb2hhbC9GYWN0b3J5SGFsSGlkbC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZhMGVmZmMKLS0tIC9kZXYvbnVsbAorKysgYi9tZWRpYS9saWJhdWRpb2hhbC9pbXBsL2luY2x1ZGUvbGliYXVkaW9oYWwvRmFjdG9yeUhhbEhpZGwuaApAQCAtMCwwICsxLDQwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE4IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KKworI2lmbmRlZiBBTkRST0lEX0hBUkRXQVJFX0ZBQ1RPUllfSEFMX0hJRExfSAorI2RlZmluZSBBTkRST0lEX0hBUkRXQVJFX0ZBQ1RPUllfSEFMX0hJRExfSAorCisvKiogQGZpbGUgTGlicmFyeSBlbnRyeSBwb2ludHMgdG8gY3JlYXRlIHRoZSBIQUwgZmFjdG9yaWVzLiAqLworCisjaW5jbHVkZSA8bWVkaWEvYXVkaW9oYWwvRGV2aWNlc0ZhY3RvcnlIYWxJbnRlcmZhY2UuaD4KKyNpbmNsdWRlIDxtZWRpYS9hdWRpb2hhbC9FZmZlY3RzRmFjdG9yeUhhbEludGVyZmFjZS5oPgorI2luY2x1ZGUgPHV0aWxzL1N0cm9uZ1BvaW50ZXIuaD4KKworbmFtZXNwYWNlIGFuZHJvaWQgeworCituYW1lc3BhY2UgVjJfMCB7CitzcDxFZmZlY3RzRmFjdG9yeUhhbEludGVyZmFjZT4gY3JlYXRlRWZmZWN0c0ZhY3RvcnlIYWwoKTsKK3NwPERldmljZXNGYWN0b3J5SGFsSW50ZXJmYWNlPiBjcmVhdGVEZXZpY2VzRmFjdG9yeUhhbCgpOworfSAvLyBuYW1lc3BhY2UgVjJfMAorCituYW1lc3BhY2UgVjRfMCB7CitzcDxFZmZlY3RzRmFjdG9yeUhhbEludGVyZmFjZT4gY3JlYXRlRWZmZWN0c0ZhY3RvcnlIYWwoKTsKK3NwPERldmljZXNGYWN0b3J5SGFsSW50ZXJmYWNlPiBjcmVhdGVEZXZpY2VzRmFjdG9yeUhhbCgpOworfSAvLyBuYW1lc3BhY2UgVjRfMAorCit9IC8vIG5hbWVzcGFjZSBhbmRyb2lkCisKKyNlbmRpZiAvLyBBTkRST0lEX0hBUkRXQVJFX0ZBQ1RPUllfSEFMX0hJRExfSApkaWZmIC0tZ2l0IGEvbWVkaWEvbGliYXVkaW9wcm9jZXNzaW5nL0F1ZGlvTWl4ZXIuY3BwIGIvbWVkaWEvbGliYXVkaW9wcm9jZXNzaW5nL0F1ZGlvTWl4ZXIuY3BwCmluZGV4IGYzZWE4MjYuLmFmNTRiMjEgMTAwNjQ0Ci0tLSBhL21lZGlhL2xpYmF1ZGlvcHJvY2Vzc2luZy9BdWRpb01peGVyLmNwcAorKysgYi9tZWRpYS9saWJhdWRpb3Byb2Nlc3NpbmcvQXVkaW9NaXhlci5jcHAKQEAgLTMzNyw2ICszMzcsNyBAQAogCiB2b2lkIEF1ZGlvTWl4ZXI6OlRyYWNrOjpyZWNvbmZpZ3VyZUJ1ZmZlclByb3ZpZGVycygpCiB7CisgICAgLy8gY29uZmlndXJlIGZyb20gdXBzdHJlYW0gdG8gZG93bnN0cmVhbSBidWZmZXIgcHJvdmlkZXJzLgogICAgIGJ1ZmZlclByb3ZpZGVyID0gbUlucHV0QnVmZmVyUHJvdmlkZXI7CiAgICAgaWYgKG1SZWZvcm1hdEJ1ZmZlclByb3ZpZGVyLmdldCgpICE9IG51bGxwdHIpIHsKICAgICAgICAgbVJlZm9ybWF0QnVmZmVyUHJvdmlkZXItPnNldEJ1ZmZlclByb3ZpZGVyKGJ1ZmZlclByb3ZpZGVyKTsKQEAgLTgxMywxNCArODE0LDE1IEBACiAgICAgaWYgKHRyYWNrLT5tSW5wdXRCdWZmZXJQcm92aWRlciA9PSBidWZmZXJQcm92aWRlcikgewogICAgICAgICByZXR1cm47IC8vIGRvbid0IHJlc2V0IGFueSBidWZmZXIgcHJvdmlkZXJzIGlmIGlkZW50aWNhbC4KICAgICB9Ci0gICAgaWYgKHRyYWNrLT5tUmVmb3JtYXRCdWZmZXJQcm92aWRlci5nZXQoKSAhPSBudWxscHRyKSB7Ci0gICAgICAgIHRyYWNrLT5tUmVmb3JtYXRCdWZmZXJQcm92aWRlci0+cmVzZXQoKTsKLSAgICB9IGVsc2UgaWYgKHRyYWNrLT5tRG93bm1peGVyQnVmZmVyUHJvdmlkZXIgIT0gbnVsbHB0cikgewotICAgICAgICB0cmFjay0+bURvd25taXhlckJ1ZmZlclByb3ZpZGVyLT5yZXNldCgpOworICAgIC8vIHJlc2V0IG9yZGVyIGZyb20gZG93bnN0cmVhbSB0byB1cHN0cmVhbSBidWZmZXIgcHJvdmlkZXJzLgorICAgIGlmICh0cmFjay0+bVRpbWVzdHJldGNoQnVmZmVyUHJvdmlkZXIuZ2V0KCkgIT0gbnVsbHB0cikgeworICAgICAgICB0cmFjay0+bVRpbWVzdHJldGNoQnVmZmVyUHJvdmlkZXItPnJlc2V0KCk7CiAgICAgfSBlbHNlIGlmICh0cmFjay0+bVBvc3REb3dubWl4UmVmb3JtYXRCdWZmZXJQcm92aWRlci5nZXQoKSAhPSBudWxscHRyKSB7CiAgICAgICAgIHRyYWNrLT5tUG9zdERvd25taXhSZWZvcm1hdEJ1ZmZlclByb3ZpZGVyLT5yZXNldCgpOwotICAgIH0gZWxzZSBpZiAodHJhY2stPm1UaW1lc3RyZXRjaEJ1ZmZlclByb3ZpZGVyLmdldCgpICE9IG51bGxwdHIpIHsKLSAgICAgICAgdHJhY2stPm1UaW1lc3RyZXRjaEJ1ZmZlclByb3ZpZGVyLT5yZXNldCgpOworICAgIH0gZWxzZSBpZiAodHJhY2stPm1Eb3dubWl4ZXJCdWZmZXJQcm92aWRlciAhPSBudWxscHRyKSB7CisgICAgICAgIHRyYWNrLT5tRG93bm1peGVyQnVmZmVyUHJvdmlkZXItPnJlc2V0KCk7CisgICAgfSBlbHNlIGlmICh0cmFjay0+bVJlZm9ybWF0QnVmZmVyUHJvdmlkZXIuZ2V0KCkgIT0gbnVsbHB0cikgeworICAgICAgICB0cmFjay0+bVJlZm9ybWF0QnVmZmVyUHJvdmlkZXItPnJlc2V0KCk7CiAgICAgfQogCiAgICAgdHJhY2stPm1JbnB1dEJ1ZmZlclByb3ZpZGVyID0gYnVmZmVyUHJvdmlkZXI7CmRpZmYgLS1naXQgYS9tZWRpYS9saWJhdWRpb3Byb2Nlc3NpbmcvQXVkaW9SZXNhbXBsZXJEeW4uaCBiL21lZGlhL2xpYmF1ZGlvcHJvY2Vzc2luZy9BdWRpb1Jlc2FtcGxlckR5bi5oCmluZGV4IDkyMTQ0ZDAuLjQ3OTE0MmUgMTAwNjQ0Ci0tLSBhL21lZGlhL2xpYmF1ZGlvcHJvY2Vzc2luZy9BdWRpb1Jlc2FtcGxlckR5bi5oCisrKyBiL21lZGlhL2xpYmF1ZGlvcHJvY2Vzc2luZy9BdWRpb1Jlc2FtcGxlckR5bi5oCkBAIC01NSw2ICs1NSwxMSBAQAogICAgIHZpcnR1YWwgc2l6ZV90IHJlc2FtcGxlKGludDMyX3QqIG91dCwgc2l6ZV90IG91dEZyYW1lQ291bnQsCiAgICAgICAgICAgICBBdWRpb0J1ZmZlclByb3ZpZGVyKiBwcm92aWRlcik7CiAKKyAgICB2b2lkIHJlc2V0KCkgb3ZlcnJpZGUgeworICAgICAgICBBdWRpb1Jlc2FtcGxlcjo6cmVzZXQoKTsKKyAgICAgICAgbUluQnVmZmVyLnJlc2V0KCk7CisgICAgfQorCiAgICAgLy8gTWFrZSBhdmFpbGFibGUga2V5IGRlc2lnbiBjcml0ZXJpYSBmb3IgdGVzdGluZwogICAgIGludCBnZXRIYWxmTGVuZ3RoKCkgY29uc3QgewogICAgICAgICByZXR1cm4gbUNvbnN0YW50cy5tSGFsZk51bUNvZWZzOwpkaWZmIC0tZ2l0IGEvbWVkaWEvbGliYXVkaW9wcm9jZXNzaW5nL0F1ZGlvUmVzYW1wbGVyRmlyUHJvY2Vzcy5oIGIvbWVkaWEvbGliYXVkaW9wcm9jZXNzaW5nL0F1ZGlvUmVzYW1wbGVyRmlyUHJvY2Vzcy5oCmluZGV4IGE3NDE2NzcuLjliNzBhMWMgMTAwNjQ0Ci0tLSBhL21lZGlhL2xpYmF1ZGlvcHJvY2Vzc2luZy9BdWRpb1Jlc2FtcGxlckZpclByb2Nlc3MuaAorKysgYi9tZWRpYS9saWJhdWRpb3Byb2Nlc3NpbmcvQXVkaW9SZXNhbXBsZXJGaXJQcm9jZXNzLmgKQEAgLTkwLDcgKzkwLDcgQEAKICAgICAgICAgQWNjdW11bGF0b3I8Q0hBTk5FTFMtMSwgVE8+OjphY2MoY29lZiwgZGF0YSk7CiAgICAgfQogICAgIGlubGluZSB2b2lkIHZvbHVtZShUTyomIG91dCwgVE8gZ2FpbikgewotICAgICAgICAqb3V0KysgPSB2b2x1bWVBZGp1c3QodmFsdWUsIGdhaW4pOworICAgICAgICAqb3V0KysgKz0gdm9sdW1lQWRqdXN0KHZhbHVlLCBnYWluKTsKICAgICAgICAgQWNjdW11bGF0b3I8Q0hBTk5FTFMtMSwgVE8+Ojp2b2x1bWUob3V0LCBnYWluKTsKICAgICB9CiAKZGlmZiAtLWdpdCBhL21lZGlhL2xpYmF1ZGlvcHJvY2Vzc2luZy9BdWRpb1Jlc2FtcGxlclNpbmMuY3BwIGIvbWVkaWEvbGliYXVkaW9wcm9jZXNzaW5nL0F1ZGlvUmVzYW1wbGVyU2luYy5jcHAKaW5kZXggMzIwYjhjZi4uNWEwM2EwZCAxMDA2NDQKLS0tIGEvbWVkaWEvbGliYXVkaW9wcm9jZXNzaW5nL0F1ZGlvUmVzYW1wbGVyU2luYy5jcHAKKysrIGIvbWVkaWEvbGliYXVkaW9wcm9jZXNzaW5nL0F1ZGlvUmVzYW1wbGVyU2luYy5jcHAKQEAgLTE5LDYgKzE5LDcgQEAKIAogI2RlZmluZSBfX1NURENfQ09OU1RBTlRfTUFDUk9TCiAjaW5jbHVkZSA8bWFsbG9jLmg+CisjaW5jbHVkZSA8cHRocmVhZC5oPgogI2luY2x1ZGUgPHN0cmluZy5oPgogI2luY2x1ZGUgPHN0ZGxpYi5oPgogI2luY2x1ZGUgPGRsZmNuLmg+CmRpZmYgLS1naXQgYS9tZWRpYS9saWJhdWRpb3Byb2Nlc3NpbmcvaW5jbHVkZS9tZWRpYS9BdWRpb1Jlc2FtcGxlclB1YmxpYy5oIGIvbWVkaWEvbGliYXVkaW9wcm9jZXNzaW5nL2luY2x1ZGUvbWVkaWEvQXVkaW9SZXNhbXBsZXJQdWJsaWMuaAppbmRleCAwNTVmNzI0Li41MGNhMzNkIDEwMDY0NAotLS0gYS9tZWRpYS9saWJhdWRpb3Byb2Nlc3NpbmcvaW5jbHVkZS9tZWRpYS9BdWRpb1Jlc2FtcGxlclB1YmxpYy5oCisrKyBiL21lZGlhL2xpYmF1ZGlvcHJvY2Vzc2luZy9pbmNsdWRlL21lZGlhL0F1ZGlvUmVzYW1wbGVyUHVibGljLmgKQEAgLTEwNCw4ICsxMDQsOCBAQAogICAgICAgICBjb25zdCBBdWRpb1BsYXliYWNrUmF0ZSAmcHIyKSB7CiAgICAgcmV0dXJuIGZhYnMocHIxLm1TcGVlZCAtIHByMi5tU3BlZWQpIDwgQVVESU9fVElNRVNUUkVUQ0hfU1BFRURfTUlOX0RFTFRBICYmCiAgICAgICAgICAgIGZhYnMocHIxLm1QaXRjaCAtIHByMi5tUGl0Y2gpIDwgQVVESU9fVElNRVNUUkVUQ0hfUElUQ0hfTUlOX0RFTFRBICYmCi0gICAgICAgICAgIHByMi5tU3RyZXRjaE1vZGUgPT0gcHIyLm1TdHJldGNoTW9kZSAmJgotICAgICAgICAgICBwcjIubUZhbGxiYWNrTW9kZSA9PSBwcjIubUZhbGxiYWNrTW9kZTsKKyAgICAgICAgICAgcHIxLm1TdHJldGNoTW9kZSA9PSBwcjIubVN0cmV0Y2hNb2RlICYmCisgICAgICAgICAgIHByMS5tRmFsbGJhY2tNb2RlID09IHByMi5tRmFsbGJhY2tNb2RlOwogfQogCiBzdGF0aWMgaW5saW5lIGJvb2wgaXNBdWRpb1BsYXliYWNrUmF0ZVZhbGlkKGNvbnN0IEF1ZGlvUGxheWJhY2tSYXRlICZwbGF5YmFja1JhdGUpIHsKZGlmZiAtLWdpdCBhL21lZGlhL2xpYmVmZmVjdHMvbG91ZG5lc3MvRWZmZWN0TG91ZG5lc3NFbmhhbmNlci5jcHAgYi9tZWRpYS9saWJlZmZlY3RzL2xvdWRuZXNzL0VmZmVjdExvdWRuZXNzRW5oYW5jZXIuY3BwCmluZGV4IDlkMjljZjEuLmQ2MWVmZDMgMTAwNjQ0Ci0tLSBhL21lZGlhL2xpYmVmZmVjdHMvbG91ZG5lc3MvRWZmZWN0TG91ZG5lc3NFbmhhbmNlci5jcHAKKysrIGIvbWVkaWEvbGliZWZmZWN0cy9sb3VkbmVzcy9FZmZlY3RMb3VkbmVzc0VuaGFuY2VyLmNwcApAQCAtMzAsNiArMzAsMjYgQEAKICNpbmNsdWRlIDxhdWRpb19lZmZlY3RzL2VmZmVjdF9sb3VkbmVzc2VuaGFuY2VyLmg+CiAjaW5jbHVkZSAiZHNwL2NvcmUvZHluYW1pY19yYW5nZV9jb21wcmVzc2lvbi5oIgogCisvLyBCVUlMRF9GTE9BVCB0YXJnZXRzIGJ1aWxkaW5nIGEgZmxvYXQgZWZmZWN0IGluc3RlYWQgb2YgdGhlIGxlZ2FjeSBpbnQxNl90IGVmZmVjdC4KKyNkZWZpbmUgQlVJTERfRkxPQVQKKworI2lmZGVmIEJVSUxEX0ZMT0FUCisKK3N0YXRpYyBjb25zdGV4cHIgYXVkaW9fZm9ybWF0X3Qga1Byb2Nlc3NGb3JtYXQgPSBBVURJT19GT1JNQVRfUENNX0ZMT0FUOworCisjZWxzZQorCitzdGF0aWMgY29uc3RleHByIGF1ZGlvX2Zvcm1hdF90IGtQcm9jZXNzRm9ybWF0ID0gQVVESU9fRk9STUFUX1BDTV8xNl9CSVQ7CisKK3N0YXRpYyBpbmxpbmUgaW50MTZfdCBjbGFtcDE2KGludDMyX3Qgc2FtcGxlKQoreworICAgIGlmICgoc2FtcGxlPj4xNSkgXiAoc2FtcGxlPj4zMSkpCisgICAgICAgIHNhbXBsZSA9IDB4N0ZGRiBeIChzYW1wbGU+PjMxKTsKKyAgICByZXR1cm4gc2FtcGxlOworfQorCisjZW5kaWYgLy8gQlVJTERfRkxPQVQKKwogZXh0ZXJuICJDIiB7CiAKIC8vIGVmZmVjdF9oYW5kbGVfdCBpbnRlcmZhY2UgaW1wbGVtZW50YXRpb24gZm9yIExFIGVmZmVjdApAQCAtODAsMTMgKzEwMCw2IEBACiAgICAgfQogfQogCi1zdGF0aWMgaW5saW5lIGludDE2X3QgY2xhbXAxNihpbnQzMl90IHNhbXBsZSkKLXsKLSAgICBpZiAoKHNhbXBsZT4+MTUpIF4gKHNhbXBsZT4+MzEpKQotICAgICAgICBzYW1wbGUgPSAweDdGRkYgXiAoc2FtcGxlPj4zMSk7Ci0gICAgcmV0dXJuIHNhbXBsZTsKLX0KLQogLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAvLyBMRV9zZXRDb25maWcoKQogLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCkBAIC0xMTEsNyArMTI0LDcgQEAKICAgICBpZiAocENvbmZpZy0+aW5wdXRDZmcuY2hhbm5lbHMgIT0gQVVESU9fQ0hBTk5FTF9PVVRfU1RFUkVPKSByZXR1cm4gLUVJTlZBTDsKICAgICBpZiAocENvbmZpZy0+b3V0cHV0Q2ZnLmFjY2Vzc01vZGUgIT0gRUZGRUNUX0JVRkZFUl9BQ0NFU1NfV1JJVEUgJiYKICAgICAgICAgICAgIHBDb25maWctPm91dHB1dENmZy5hY2Nlc3NNb2RlICE9IEVGRkVDVF9CVUZGRVJfQUNDRVNTX0FDQ1VNVUxBVEUpIHJldHVybiAtRUlOVkFMOwotICAgIGlmIChwQ29uZmlnLT5pbnB1dENmZy5mb3JtYXQgIT0gQVVESU9fRk9STUFUX1BDTV8xNl9CSVQpIHJldHVybiAtRUlOVkFMOworICAgIGlmIChwQ29uZmlnLT5pbnB1dENmZy5mb3JtYXQgIT0ga1Byb2Nlc3NGb3JtYXQpIHJldHVybiAtRUlOVkFMOwogCiAgICAgcENvbnRleHQtPm1Db25maWcgPSAqcENvbmZpZzsKIApAQCAtMTU5LDcgKzE3Miw3IEBACiAKICAgICBwQ29udGV4dC0+bUNvbmZpZy5pbnB1dENmZy5hY2Nlc3NNb2RlID0gRUZGRUNUX0JVRkZFUl9BQ0NFU1NfUkVBRDsKICAgICBwQ29udGV4dC0+bUNvbmZpZy5pbnB1dENmZy5jaGFubmVscyA9IEFVRElPX0NIQU5ORUxfT1VUX1NURVJFTzsKLSAgICBwQ29udGV4dC0+bUNvbmZpZy5pbnB1dENmZy5mb3JtYXQgPSBBVURJT19GT1JNQVRfUENNXzE2X0JJVDsKKyAgICBwQ29udGV4dC0+bUNvbmZpZy5pbnB1dENmZy5mb3JtYXQgPSBrUHJvY2Vzc0Zvcm1hdDsKICAgICBwQ29udGV4dC0+bUNvbmZpZy5pbnB1dENmZy5zYW1wbGluZ1JhdGUgPSA0NDEwMDsKICAgICBwQ29udGV4dC0+bUNvbmZpZy5pbnB1dENmZy5idWZmZXJQcm92aWRlci5nZXRCdWZmZXIgPSBOVUxMOwogICAgIHBDb250ZXh0LT5tQ29uZmlnLmlucHV0Q2ZnLmJ1ZmZlclByb3ZpZGVyLnJlbGVhc2VCdWZmZXIgPSBOVUxMOwpAQCAtMTY3LDcgKzE4MCw3IEBACiAgICAgcENvbnRleHQtPm1Db25maWcuaW5wdXRDZmcubWFzayA9IEVGRkVDVF9DT05GSUdfQUxMOwogICAgIHBDb250ZXh0LT5tQ29uZmlnLm91dHB1dENmZy5hY2Nlc3NNb2RlID0gRUZGRUNUX0JVRkZFUl9BQ0NFU1NfQUNDVU1VTEFURTsKICAgICBwQ29udGV4dC0+bUNvbmZpZy5vdXRwdXRDZmcuY2hhbm5lbHMgPSBBVURJT19DSEFOTkVMX09VVF9TVEVSRU87Ci0gICAgcENvbnRleHQtPm1Db25maWcub3V0cHV0Q2ZnLmZvcm1hdCA9IEFVRElPX0ZPUk1BVF9QQ01fMTZfQklUOworICAgIHBDb250ZXh0LT5tQ29uZmlnLm91dHB1dENmZy5mb3JtYXQgPSBrUHJvY2Vzc0Zvcm1hdDsKICAgICBwQ29udGV4dC0+bUNvbmZpZy5vdXRwdXRDZmcuc2FtcGxpbmdSYXRlID0gNDQxMDA7CiAgICAgcENvbnRleHQtPm1Db25maWcub3V0cHV0Q2ZnLmJ1ZmZlclByb3ZpZGVyLmdldEJ1ZmZlciA9IE5VTEw7CiAgICAgcENvbnRleHQtPm1Db25maWcub3V0cHV0Q2ZnLmJ1ZmZlclByb3ZpZGVyLnJlbGVhc2VCdWZmZXIgPSBOVUxMOwpAQCAtMjg0LDE4ICsyOTcsNDEgQEAKIAogICAgIC8vQUxPR1YoIkxFIGFib3V0IHRvIHByb2Nlc3MgJWQgc2FtcGxlcyIsIGluQnVmZmVyLT5mcmFtZUNvdW50KTsKICAgICB1aW50MTZfdCBpbklkeDsKKyNpZmRlZiBCVUlMRF9GTE9BVAorICAgIGNvbnN0ZXhwciBmbG9hdCBzY2FsZSA9IDEgPDwgMTU7IC8vIHBvd2VyIG9mIDIgaXMgbG9zc2xlc3MgY29udmVyc2lvbiB0byBpbnQxNl90IHJhbmdlCisgICAgY29uc3RleHByIGZsb2F0IGludmVyc2VTY2FsZSA9IDEuZiAvIHNjYWxlOworICAgIGNvbnN0IGZsb2F0IGlucHV0QW1wID0gcG93KDEwLCBwQ29udGV4dC0+bVRhcmdldEdhaW5tQi8yMDAwLjBmKSAqIHNjYWxlOworI2Vsc2UKICAgICBmbG9hdCBpbnB1dEFtcCA9IHBvdygxMCwgcENvbnRleHQtPm1UYXJnZXRHYWlubUIvMjAwMC4wZik7CisjZW5kaWYKICAgICBmbG9hdCBsZWZ0U2FtcGxlLCByaWdodFNhbXBsZTsKICAgICBmb3IgKGluSWR4ID0gMCA7IGluSWR4IDwgaW5CdWZmZXItPmZyYW1lQ291bnQgOyBpbklkeCsrKSB7CiAgICAgICAgIC8vIG1ha2V1cCBnYWluIGlzIGFwcGxpZWQgb24gdGhlIGlucHV0IG9mIHRoZSBjb21wcmVzc29yCisjaWZkZWYgQlVJTERfRkxPQVQKKyAgICAgICAgbGVmdFNhbXBsZSAgPSBpbnB1dEFtcCAqIGluQnVmZmVyLT5mMzJbMippbklkeF07CisgICAgICAgIHJpZ2h0U2FtcGxlID0gaW5wdXRBbXAgKiBpbkJ1ZmZlci0+ZjMyWzIqaW5JZHggKzFdOworICAgICAgICBwQ29udGV4dC0+bUNvbXByZXNzb3ItPkNvbXByZXNzKCZsZWZ0U2FtcGxlLCAmcmlnaHRTYW1wbGUpOworICAgICAgICBpbkJ1ZmZlci0+ZjMyWzIqaW5JZHhdICAgID0gbGVmdFNhbXBsZSAqIGludmVyc2VTY2FsZTsKKyAgICAgICAgaW5CdWZmZXItPmYzMlsyKmluSWR4ICsxXSA9IHJpZ2h0U2FtcGxlICogaW52ZXJzZVNjYWxlOworI2Vsc2UKICAgICAgICAgbGVmdFNhbXBsZSAgPSBpbnB1dEFtcCAqIChmbG9hdClpbkJ1ZmZlci0+czE2WzIqaW5JZHhdOwogICAgICAgICByaWdodFNhbXBsZSA9IGlucHV0QW1wICogKGZsb2F0KWluQnVmZmVyLT5zMTZbMippbklkeCArMV07CiAgICAgICAgIHBDb250ZXh0LT5tQ29tcHJlc3Nvci0+Q29tcHJlc3MoJmxlZnRTYW1wbGUsICZyaWdodFNhbXBsZSk7CiAgICAgICAgIGluQnVmZmVyLT5zMTZbMippbklkeF0gICAgPSAoaW50MTZfdCkgbGVmdFNhbXBsZTsKICAgICAgICAgaW5CdWZmZXItPnMxNlsyKmluSWR4ICsxXSA9IChpbnQxNl90KSByaWdodFNhbXBsZTsKKyNlbmRpZiAvLyBCVUlMRF9GTE9BVAogICAgIH0KIAogICAgIGlmIChpbkJ1ZmZlci0+cmF3ICE9IG91dEJ1ZmZlci0+cmF3KSB7CisjaWZkZWYgQlVJTERfRkxPQVQKKyAgICAgICAgaWYgKHBDb250ZXh0LT5tQ29uZmlnLm91dHB1dENmZy5hY2Nlc3NNb2RlID09IEVGRkVDVF9CVUZGRVJfQUNDRVNTX0FDQ1VNVUxBVEUpIHsKKyAgICAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgb3V0QnVmZmVyLT5mcmFtZUNvdW50KjI7IGkrKykgeworICAgICAgICAgICAgICAgIG91dEJ1ZmZlci0+ZjMyW2ldICs9IGluQnVmZmVyLT5mMzJbaV07CisgICAgICAgICAgICB9CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBtZW1jcHkob3V0QnVmZmVyLT5yYXcsIGluQnVmZmVyLT5yYXcsIG91dEJ1ZmZlci0+ZnJhbWVDb3VudCAqIDIgKiBzaXplb2YoZmxvYXQpKTsKKyAgICAgICAgfQorI2Vsc2UKICAgICAgICAgaWYgKHBDb250ZXh0LT5tQ29uZmlnLm91dHB1dENmZy5hY2Nlc3NNb2RlID09IEVGRkVDVF9CVUZGRVJfQUNDRVNTX0FDQ1VNVUxBVEUpIHsKICAgICAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgb3V0QnVmZmVyLT5mcmFtZUNvdW50KjI7IGkrKykgewogICAgICAgICAgICAgICAgIG91dEJ1ZmZlci0+czE2W2ldID0gY2xhbXAxNihvdXRCdWZmZXItPnMxNltpXSArIGluQnVmZmVyLT5zMTZbaV0pOwpAQCAtMzAzLDYgKzMzOSw3IEBACiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICBtZW1jcHkob3V0QnVmZmVyLT5yYXcsIGluQnVmZmVyLT5yYXcsIG91dEJ1ZmZlci0+ZnJhbWVDb3VudCAqIDIgKiBzaXplb2YoaW50MTZfdCkpOwogICAgICAgICB9CisjZW5kaWYgLy8gQlVJTERfRkxPQVQKICAgICB9CiAgICAgaWYgKHBDb250ZXh0LT5tU3RhdGUgIT0gTE9VRE5FU1NfRU5IQU5DRVJfU1RBVEVfQUNUSVZFKSB7CiAgICAgICAgIHJldHVybiAtRU5PREFUQTsKZGlmZiAtLWdpdCBhL21lZGlhL2xpYmVmZmVjdHMvdmlzdWFsaXplci9BbmRyb2lkLm1rIGIvbWVkaWEvbGliZWZmZWN0cy92aXN1YWxpemVyL0FuZHJvaWQubWsKaW5kZXggNzA0MDlkZS4uMzVlMmYzZCAxMDA2NDQKLS0tIGEvbWVkaWEvbGliZWZmZWN0cy92aXN1YWxpemVyL0FuZHJvaWQubWsKKysrIGIvbWVkaWEvbGliZWZmZWN0cy92aXN1YWxpemVyL0FuZHJvaWQubWsKQEAgLTksNiArOSw3IEBACiAKIExPQ0FMX0NGTEFHUys9IC1PMiAtZnZpc2liaWxpdHk9aGlkZGVuCiBMT0NBTF9DRkxBR1MgKz0gLVdhbGwgLVdlcnJvcgorTE9DQUxfQ0ZMQUdTICs9IC1EQlVJTERfRkxPQVQgLURTVVBQT1JUX01DCiAKIExPQ0FMX1NIQVJFRF9MSUJSQVJJRVMgOj0gXAogCWxpYmN1dGlscyBcCkBAIC0xOSw3ICsyMCw4IEBACiBMT0NBTF9NT0RVTEU6PSBsaWJ2aXN1YWxpemVyCiAKIExPQ0FMX0NfSU5DTFVERVMgOj0gXAotCSQoY2FsbCBpbmNsdWRlLXBhdGgtZm9yLCBhdWRpby1lZmZlY3RzKQorCSQoY2FsbCBpbmNsdWRlLXBhdGgtZm9yLCBhdWRpby1lZmZlY3RzKSBcCisJJChjYWxsIGluY2x1ZGUtcGF0aC1mb3IsIGF1ZGlvLXV0aWxzKQogCiAKIExPQ0FMX0hFQURFUl9MSUJSQVJJRVMgKz0gbGliaGFyZHdhcmVfaGVhZGVycwpkaWZmIC0tZ2l0IGEvbWVkaWEvbGliZWZmZWN0cy92aXN1YWxpemVyL0VmZmVjdFZpc3VhbGl6ZXIuY3BwIGIvbWVkaWEvbGliZWZmZWN0cy92aXN1YWxpemVyL0VmZmVjdFZpc3VhbGl6ZXIuY3BwCmluZGV4IDgwN2YyNGQuLjAwYmMzNzEgMTAwNjQ0Ci0tLSBhL21lZGlhL2xpYmVmZmVjdHMvdmlzdWFsaXplci9FZmZlY3RWaXN1YWxpemVyLmNwcAorKysgYi9tZWRpYS9saWJlZmZlY3RzL3Zpc3VhbGl6ZXIvRWZmZWN0VmlzdWFsaXplci5jcHAKQEAgLTI0LDExICsyNCwyMyBAQAogI2luY2x1ZGUgPHN0cmluZy5oPgogI2luY2x1ZGUgPHRpbWUuaD4KIAorI2luY2x1ZGUgPGFsZ29yaXRobT4gLy8gbWF4CiAjaW5jbHVkZSA8bmV3PgogCiAjaW5jbHVkZSA8bG9nL2xvZy5oPgogCiAjaW5jbHVkZSA8YXVkaW9fZWZmZWN0cy9lZmZlY3RfdmlzdWFsaXplci5oPgorI2luY2x1ZGUgPGF1ZGlvX3V0aWxzL3ByaW1pdGl2ZXMuaD4KKworI2lmZGVmIEJVSUxEX0ZMT0FUCisKK3N0YXRpYyBjb25zdGV4cHIgYXVkaW9fZm9ybWF0X3Qga1Byb2Nlc3NGb3JtYXQgPSBBVURJT19GT1JNQVRfUENNX0ZMT0FUOworCisjZWxzZQorCitzdGF0aWMgY29uc3RleHByIGF1ZGlvX2Zvcm1hdF90IGtQcm9jZXNzRm9ybWF0ID0gQVVESU9fRk9STUFUX1BDTV8xNl9CSVQ7CisKKyNlbmRpZiAvLyBCVUlMRF9GTE9BVAogCiBleHRlcm4gIkMiIHsKIApAQCAtMTQzLDEwICsxNTUsMTUgQEAKICAgICBpZiAocENvbmZpZy0+aW5wdXRDZmcuc2FtcGxpbmdSYXRlICE9IHBDb25maWctPm91dHB1dENmZy5zYW1wbGluZ1JhdGUpIHJldHVybiAtRUlOVkFMOwogICAgIGlmIChwQ29uZmlnLT5pbnB1dENmZy5jaGFubmVscyAhPSBwQ29uZmlnLT5vdXRwdXRDZmcuY2hhbm5lbHMpIHJldHVybiAtRUlOVkFMOwogICAgIGlmIChwQ29uZmlnLT5pbnB1dENmZy5mb3JtYXQgIT0gcENvbmZpZy0+b3V0cHV0Q2ZnLmZvcm1hdCkgcmV0dXJuIC1FSU5WQUw7Ci0gICAgaWYgKHBDb25maWctPmlucHV0Q2ZnLmNoYW5uZWxzICE9IEFVRElPX0NIQU5ORUxfT1VUX1NURVJFTykgcmV0dXJuIC1FSU5WQUw7CisgICAgY29uc3QgdWludDMyX3QgY2hhbm5lbENvdW50ID0gYXVkaW9fY2hhbm5lbF9jb3VudF9mcm9tX291dF9tYXNrKHBDb25maWctPmlucHV0Q2ZnLmNoYW5uZWxzKTsKKyNpZmRlZiBTVVBQT1JUX01DCisgICAgaWYgKGNoYW5uZWxDb3VudCA8IDEgfHwgY2hhbm5lbENvdW50ID4gRkNDXzgpIHJldHVybiAtRUlOVkFMOworI2Vsc2UKKyAgICBpZiAoY2hhbm5lbENvdW50ICE9IEZDQ18yKSByZXR1cm4gLUVJTlZBTDsKKyNlbmRpZgogICAgIGlmIChwQ29uZmlnLT5vdXRwdXRDZmcuYWNjZXNzTW9kZSAhPSBFRkZFQ1RfQlVGRkVSX0FDQ0VTU19XUklURSAmJgogICAgICAgICAgICAgcENvbmZpZy0+b3V0cHV0Q2ZnLmFjY2Vzc01vZGUgIT0gRUZGRUNUX0JVRkZFUl9BQ0NFU1NfQUNDVU1VTEFURSkgcmV0dXJuIC1FSU5WQUw7Ci0gICAgaWYgKHBDb25maWctPmlucHV0Q2ZnLmZvcm1hdCAhPSBBVURJT19GT1JNQVRfUENNXzE2X0JJVCkgcmV0dXJuIC1FSU5WQUw7CisgICAgaWYgKHBDb25maWctPmlucHV0Q2ZnLmZvcm1hdCAhPSBrUHJvY2Vzc0Zvcm1hdCkgcmV0dXJuIC1FSU5WQUw7CiAKICAgICBwQ29udGV4dC0+bUNvbmZpZyA9ICpwQ29uZmlnOwogCkBAIC0xOTIsNyArMjA5LDcgQEAKIHsKICAgICBwQ29udGV4dC0+bUNvbmZpZy5pbnB1dENmZy5hY2Nlc3NNb2RlID0gRUZGRUNUX0JVRkZFUl9BQ0NFU1NfUkVBRDsKICAgICBwQ29udGV4dC0+bUNvbmZpZy5pbnB1dENmZy5jaGFubmVscyA9IEFVRElPX0NIQU5ORUxfT1VUX1NURVJFTzsKLSAgICBwQ29udGV4dC0+bUNvbmZpZy5pbnB1dENmZy5mb3JtYXQgPSBBVURJT19GT1JNQVRfUENNXzE2X0JJVDsKKyAgICBwQ29udGV4dC0+bUNvbmZpZy5pbnB1dENmZy5mb3JtYXQgPSBrUHJvY2Vzc0Zvcm1hdDsKICAgICBwQ29udGV4dC0+bUNvbmZpZy5pbnB1dENmZy5zYW1wbGluZ1JhdGUgPSA0NDEwMDsKICAgICBwQ29udGV4dC0+bUNvbmZpZy5pbnB1dENmZy5idWZmZXJQcm92aWRlci5nZXRCdWZmZXIgPSBOVUxMOwogICAgIHBDb250ZXh0LT5tQ29uZmlnLmlucHV0Q2ZnLmJ1ZmZlclByb3ZpZGVyLnJlbGVhc2VCdWZmZXIgPSBOVUxMOwpAQCAtMjAwLDcgKzIxNyw3IEBACiAgICAgcENvbnRleHQtPm1Db25maWcuaW5wdXRDZmcubWFzayA9IEVGRkVDVF9DT05GSUdfQUxMOwogICAgIHBDb250ZXh0LT5tQ29uZmlnLm91dHB1dENmZy5hY2Nlc3NNb2RlID0gRUZGRUNUX0JVRkZFUl9BQ0NFU1NfQUNDVU1VTEFURTsKICAgICBwQ29udGV4dC0+bUNvbmZpZy5vdXRwdXRDZmcuY2hhbm5lbHMgPSBBVURJT19DSEFOTkVMX09VVF9TVEVSRU87Ci0gICAgcENvbnRleHQtPm1Db25maWcub3V0cHV0Q2ZnLmZvcm1hdCA9IEFVRElPX0ZPUk1BVF9QQ01fMTZfQklUOworICAgIHBDb250ZXh0LT5tQ29uZmlnLm91dHB1dENmZy5mb3JtYXQgPSBrUHJvY2Vzc0Zvcm1hdDsKICAgICBwQ29udGV4dC0+bUNvbmZpZy5vdXRwdXRDZmcuc2FtcGxpbmdSYXRlID0gNDQxMDA7CiAgICAgcENvbnRleHQtPm1Db25maWcub3V0cHV0Q2ZnLmJ1ZmZlclByb3ZpZGVyLmdldEJ1ZmZlciA9IE5VTEw7CiAgICAgcENvbnRleHQtPm1Db25maWcub3V0cHV0Q2ZnLmJ1ZmZlclByb3ZpZGVyLnJlbGVhc2VCdWZmZXIgPSBOVUxMOwpAQCAtMzAxLDE1ICszMTgsOCBAQAogLy8tLS0gRWZmZWN0IENvbnRyb2wgSW50ZXJmYWNlIEltcGxlbWVudGF0aW9uCiAvLwogCi1zdGF0aWMgaW5saW5lIGludDE2X3QgY2xhbXAxNihpbnQzMl90IHNhbXBsZSkKLXsKLSAgICBpZiAoKHNhbXBsZT4+MTUpIF4gKHNhbXBsZT4+MzEpKQotICAgICAgICBzYW1wbGUgPSAweDdGRkYgXiAoc2FtcGxlPj4zMSk7Ci0gICAgcmV0dXJuIHNhbXBsZTsKLX0KLQogaW50IFZpc3VhbGl6ZXJfcHJvY2VzcygKLSAgICAgICAgZWZmZWN0X2hhbmRsZV90IHNlbGYsYXVkaW9fYnVmZmVyX3QgKmluQnVmZmVyLCBhdWRpb19idWZmZXJfdCAqb3V0QnVmZmVyKQorICAgICAgICBlZmZlY3RfaGFuZGxlX3Qgc2VsZiwgYXVkaW9fYnVmZmVyX3QgKmluQnVmZmVyLCBhdWRpb19idWZmZXJfdCAqb3V0QnVmZmVyKQogewogICAgIFZpc3VhbGl6ZXJDb250ZXh0ICogcENvbnRleHQgPSAoVmlzdWFsaXplckNvbnRleHQgKilzZWxmOwogCkBAIC0zMjQsNzEgKzMzNCwxMTggQEAKICAgICAgICAgcmV0dXJuIC1FSU5WQUw7CiAgICAgfQogCisgICAgY29uc3Qgc2l6ZV90IHNhbXBsZUxlbiA9IGluQnVmZmVyLT5mcmFtZUNvdW50ICogcENvbnRleHQtPm1DaGFubmVsQ291bnQ7CisKICAgICAvLyBwZXJmb3JtIG1lYXN1cmVtZW50cyBpZiBuZWVkZWQKICAgICBpZiAocENvbnRleHQtPm1NZWFzdXJlbWVudE1vZGUgJiBNRUFTVVJFTUVOVF9NT0RFX1BFQUtfUk1TKSB7CiAgICAgICAgIC8vIGZpbmQgdGhlIHBlYWsgYW5kIFJNUyBzcXVhcmVkIGZvciB0aGUgbmV3IGJ1ZmZlcgotICAgICAgICB1aW50MzJfdCBpbklkeDsKLSAgICAgICAgaW50MTZfdCBtYXhTYW1wbGUgPSAwOwogICAgICAgICBmbG9hdCBybXNTcUFjYyA9IDA7Ci0gICAgICAgIGZvciAoaW5JZHggPSAwIDsgaW5JZHggPCBpbkJ1ZmZlci0+ZnJhbWVDb3VudCAqIHBDb250ZXh0LT5tQ2hhbm5lbENvdW50IDsgaW5JZHgrKykgewotICAgICAgICAgICAgaWYgKGluQnVmZmVyLT5zMTZbaW5JZHhdID4gbWF4U2FtcGxlKSB7Ci0gICAgICAgICAgICAgICAgbWF4U2FtcGxlID0gaW5CdWZmZXItPnMxNltpbklkeF07Ci0gICAgICAgICAgICB9IGVsc2UgaWYgKC1pbkJ1ZmZlci0+czE2W2luSWR4XSA+IG1heFNhbXBsZSkgewotICAgICAgICAgICAgICAgIG1heFNhbXBsZSA9IC1pbkJ1ZmZlci0+czE2W2luSWR4XTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHJtc1NxQWNjICs9IChpbkJ1ZmZlci0+czE2W2luSWR4XSAqIGluQnVmZmVyLT5zMTZbaW5JZHhdKTsKKworI2lmZGVmIEJVSUxEX0ZMT0FUCisgICAgICAgIGZsb2F0IG1heFNhbXBsZSA9IDAuZjsKKyAgICAgICAgZm9yIChzaXplX3QgaW5JZHggPSAwOyBpbklkeCA8IHNhbXBsZUxlbjsgKytpbklkeCkgeworICAgICAgICAgICAgbWF4U2FtcGxlID0gZm1heChtYXhTYW1wbGUsIGZhYnMoaW5CdWZmZXItPmYzMltpbklkeF0pKTsKKyAgICAgICAgICAgIHJtc1NxQWNjICs9IGluQnVmZmVyLT5mMzJbaW5JZHhdICogaW5CdWZmZXItPmYzMltpbklkeF07CiAgICAgICAgIH0KKyAgICAgICAgbWF4U2FtcGxlICo9IDEgPDwgMTU7IC8vIHNjYWxlIHRvIGludDE2X3QsIHdpdGggZXhhY3RseSAxIDw8IDE1IHJlcHJlc2VudGluZyBwb3NpdGl2ZSBudW0uCisgICAgICAgIHJtc1NxQWNjICo9IDEgPDwgMzA7IC8vIHNjYWxlIHRvIGludDE2X3QgKiAyCisjZWxzZQorICAgICAgICBpbnQgbWF4U2FtcGxlID0gMDsKKyAgICAgICAgZm9yIChzaXplX3QgaW5JZHggPSAwOyBpbklkeCA8IHNhbXBsZUxlbjsgKytpbklkeCkgeworICAgICAgICAgICAgbWF4U2FtcGxlID0gc3RkOjptYXgobWF4U2FtcGxlLCBzdGQ6OmFicyhpbnQzMl90KGluQnVmZmVyLT5zMTZbaW5JZHhdKSkpOworICAgICAgICAgICAgcm1zU3FBY2MgKz0gaW5CdWZmZXItPnMxNltpbklkeF0gKiBpbkJ1ZmZlci0+czE2W2luSWR4XTsKKyAgICAgICAgfQorI2VuZGlmCiAgICAgICAgIC8vIHN0b3JlIHRoZSBtZWFzdXJlbWVudAogICAgICAgICBwQ29udGV4dC0+bVBhc3RNZWFzdXJlbWVudHNbcENvbnRleHQtPm1NZWFzdXJlbWVudEJ1ZmZlcklkeF0ubVBlYWtVMTYgPSAodWludDE2X3QpbWF4U2FtcGxlOwogICAgICAgICBwQ29udGV4dC0+bVBhc3RNZWFzdXJlbWVudHNbcENvbnRleHQtPm1NZWFzdXJlbWVudEJ1ZmZlcklkeF0ubVJtc1NxdWFyZWQgPQotICAgICAgICAgICAgICAgIHJtc1NxQWNjIC8gKGluQnVmZmVyLT5mcmFtZUNvdW50ICogcENvbnRleHQtPm1DaGFubmVsQ291bnQpOworICAgICAgICAgICAgICAgIHJtc1NxQWNjIC8gc2FtcGxlTGVuOwogICAgICAgICBwQ29udGV4dC0+bVBhc3RNZWFzdXJlbWVudHNbcENvbnRleHQtPm1NZWFzdXJlbWVudEJ1ZmZlcklkeF0ubUlzVmFsaWQgPSB0cnVlOwogICAgICAgICBpZiAoKytwQ29udGV4dC0+bU1lYXN1cmVtZW50QnVmZmVySWR4ID49IHBDb250ZXh0LT5tTWVhc3VyZW1lbnRXaW5kb3dTaXplSW5CdWZmZXJzKSB7CiAgICAgICAgICAgICBwQ29udGV4dC0+bU1lYXN1cmVtZW50QnVmZmVySWR4ID0gMDsKICAgICAgICAgfQogICAgIH0KIAotICAgIC8vIGFsbCBjb2RlIGJlbG93IGFzc3VtZXMgc3RlcmVvIDE2IGJpdCBQQ00gb3V0cHV0IGFuZCBpbnB1dAorI2lmZGVmIEJVSUxEX0ZMT0FUCisgICAgZmxvYXQgZnNjYWxlOyAvLyBtdWx0aXBsaWNhdGl2ZSBzY2FsZQorI2Vsc2UKICAgICBpbnQzMl90IHNoaWZ0OworI2VuZGlmIC8vIEJVSUxEX0ZMT0FUCiAKICAgICBpZiAocENvbnRleHQtPm1TY2FsaW5nTW9kZSA9PSBWSVNVQUxJWkVSX1NDQUxJTkdfTU9ERV9OT1JNQUxJWkVEKSB7CiAgICAgICAgIC8vIGRlcml2ZSBjYXB0dXJlIHNjYWxpbmcgZmFjdG9yIGZyb20gcGVhayB2YWx1ZSBpbiBjdXJyZW50IGJ1ZmZlcgogICAgICAgICAvLyB0aGlzIGdpdmVzIG1vcmUgaW50ZXJlc3RpbmcgY2FwdHVyZXMgZm9yIGRpc3BsYXkuCi0gICAgICAgIHNoaWZ0ID0gMzI7Ci0gICAgICAgIGludCBsZW4gPSBpbkJ1ZmZlci0+ZnJhbWVDb3VudCAqIDI7Ci0gICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbGVuOyBpKyspIHsKKworI2lmZGVmIEJVSUxEX0ZMT0FUCisgICAgICAgIGZsb2F0IG1heFNhbXBsZSA9IDAuZjsKKyAgICAgICAgZm9yIChzaXplX3QgaW5JZHggPSAwOyBpbklkeCA8IHNhbXBsZUxlbjsgKSB7CisgICAgICAgICAgICAvLyB3ZSByZWNvbnN0cnVjdCB0aGUgYWN0dWFsIHN1bW1lZCB2YWx1ZSB0byBlbnN1cmUgcHJvcGVyIG5vcm1hbGl6YXRpb24KKyAgICAgICAgICAgIC8vIGZvciBtdWx0aWNoYW5uZWwgb3V0cHV0cyAoY2hhbm5lbHMgPiAyIG1heSBvZnRlbiBiZSAwKS4KKyAgICAgICAgICAgIGZsb2F0IHNtcCA9IDAuZjsKKyAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgcENvbnRleHQtPm1DaGFubmVsQ291bnQ7ICsraSkgeworICAgICAgICAgICAgICAgIHNtcCArPSBpbkJ1ZmZlci0+ZjMyW2luSWR4KytdOworICAgICAgICAgICAgfQorICAgICAgICAgICAgbWF4U2FtcGxlID0gZm1heChtYXhTYW1wbGUsIGZhYnMoc21wKSk7CisgICAgICAgIH0KKyAgICAgICAgaWYgKG1heFNhbXBsZSA+IDAuZikgeworICAgICAgICAgICAgZnNjYWxlID0gMTI3LmYgLyBtYXhTYW1wbGU7CisgICAgICAgICAgICBpbnQgZXhwOyAvLyB1bnVzZWQKKyAgICAgICAgICAgIGNvbnN0IGZsb2F0IHNpZ25pZmljYW5kID0gZnJleHAoZnNjYWxlLCAmZXhwKTsKKyAgICAgICAgICAgIGlmIChzaWduaWZpY2FuZCA9PSAwLjVmKSB7CisgICAgICAgICAgICAgICAgZnNjYWxlICo9IDI1NS5mIC8gMjU2LmY7IC8vIGF2b2lkIHJldHVybmluZyB1bmFsdGVyZWQgUENNIHNpZ25hbAorICAgICAgICAgICAgfQorICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgLy8gc2NhbGUgZG9lc24ndCBtYXR0ZXIsIHRoZSB2YWx1ZXMgYXJlIGFsbCAwLgorICAgICAgICAgICAgZnNjYWxlID0gMS5mOworICAgICAgICB9CisjZWxzZQorICAgICAgICBpbnQzMl90IG9yQWNjdW0gPSAwOworICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHNhbXBsZUxlbjsgKytpKSB7CiAgICAgICAgICAgICBpbnQzMl90IHNtcCA9IGluQnVmZmVyLT5zMTZbaV07CiAgICAgICAgICAgICBpZiAoc21wIDwgMCkgc21wID0gLXNtcCAtIDE7IC8vIHRha2UgY2FyZSB0byBrZWVwIHRoZSBtYXggbmVnYXRpdmUgaW4gcmFuZ2UKLSAgICAgICAgICAgIGludDMyX3QgY2x6ID0gX19idWlsdGluX2NseihzbXApOwotICAgICAgICAgICAgaWYgKHNoaWZ0ID4gY2x6KSBzaGlmdCA9IGNsejsKKyAgICAgICAgICAgIG9yQWNjdW0gfD0gc21wOwogICAgICAgICB9CisKICAgICAgICAgLy8gQSBtYXhpbXVtIGFtcGxpdHVkZSBzaWduYWwgd2lsbCBoYXZlIDE3IGxlYWRpbmcgemVyb3MsIHdoaWNoIHdlIHdhbnQgdG8KICAgICAgICAgLy8gdHJhbnNsYXRlIHRvIGEgc2hpZnQgb2YgOCAoZm9yIGNvbnZlcnRpbmcgMTYgYml0IHRvIDggYml0KQotICAgICAgICBzaGlmdCA9IDI1IC0gc2hpZnQ7CisgICAgICAgIHNoaWZ0ID0gMjUgLSBfX2J1aWx0aW5fY2x6KG9yQWNjdW0pOworCiAgICAgICAgIC8vIE5ldmVyIHNjYWxlIGJ5IGxlc3MgdGhhbiA4IHRvIGF2b2lkIHJldHVybmluZyB1bmFsdGVyZWQgUENNIHNpZ25hbC4KICAgICAgICAgaWYgKHNoaWZ0IDwgMykgewogICAgICAgICAgICAgc2hpZnQgPSAzOwogICAgICAgICB9CiAgICAgICAgIC8vIGFkZCBvbmUgdG8gY29tYmluZSB0aGUgZGl2aXNpb24gYnkgMiBuZWVkZWQgYWZ0ZXIgc3VtbWluZyBsZWZ0IGFuZCByaWdodCBjaGFubmVscyBiZWxvdwogICAgICAgICBzaGlmdCsrOworI2VuZGlmIC8vIEJVSUxEX0ZMT0FUCiAgICAgfSBlbHNlIHsKICAgICAgICAgYXNzZXJ0KHBDb250ZXh0LT5tU2NhbGluZ01vZGUgPT0gVklTVUFMSVpFUl9TQ0FMSU5HX01PREVfQVNfUExBWUVEKTsKKyNpZmRlZiBCVUlMRF9GTE9BVAorICAgICAgICAvLyBOb3RlOiBpZiBjaGFubmVscyBhcmUgdW5jb3JyZWxhdGVkLCAxL3NxcnQoTikgY291bGQgYmUgdXNlZCBhdCB0aGUgcmlzayBvZiBjbGlwcGluZy4KKyAgICAgICAgZnNjYWxlID0gMS5mIC8gcENvbnRleHQtPm1DaGFubmVsQ291bnQ7ICAvLyBhY2NvdW50IGZvciBzdW1taW5nIGFsbCB0aGUgY2hhbm5lbHMgdG9nZXRoZXIuCisjZWxzZQogICAgICAgICBzaGlmdCA9IDk7CisjZW5kaWYgLy8gQlVJTERfRkxPQVQKICAgICB9CiAKICAgICB1aW50MzJfdCBjYXB0SWR4OwogICAgIHVpbnQzMl90IGluSWR4OwogICAgIHVpbnQ4X3QgKmJ1ZiA9IHBDb250ZXh0LT5tQ2FwdHVyZUJ1ZjsKICAgICBmb3IgKGluSWR4ID0gMCwgY2FwdElkeCA9IHBDb250ZXh0LT5tQ2FwdHVyZUlkeDsKLSAgICAgICAgIGluSWR4IDwgaW5CdWZmZXItPmZyYW1lQ291bnQ7Ci0gICAgICAgICBpbklkeCsrLCBjYXB0SWR4KyspIHsKLSAgICAgICAgaWYgKGNhcHRJZHggPj0gQ0FQVFVSRV9CVUZfU0laRSkgewotICAgICAgICAgICAgLy8gd3JhcCBhcm91bmQKLSAgICAgICAgICAgIGNhcHRJZHggPSAwOworICAgICAgICAgaW5JZHggPCBzYW1wbGVMZW47CisgICAgICAgICBjYXB0SWR4KyspIHsKKyAgICAgICAgaWYgKGNhcHRJZHggPj0gQ0FQVFVSRV9CVUZfU0laRSkgY2FwdElkeCA9IDA7IC8vIHdyYXAKKworI2lmZGVmIEJVSUxEX0ZMT0FUCisgICAgICAgIGZsb2F0IHNtcCA9IDAuZjsKKyAgICAgICAgZm9yICh1aW50MzJfdCBpID0gMDsgaSA8IHBDb250ZXh0LT5tQ2hhbm5lbENvdW50OyArK2kpIHsKKyAgICAgICAgICAgIHNtcCArPSBpbkJ1ZmZlci0+ZjMyW2luSWR4KytdOwogICAgICAgICB9Ci0gICAgICAgIGludDMyX3Qgc21wID0gaW5CdWZmZXItPnMxNlsyICogaW5JZHhdICsgaW5CdWZmZXItPnMxNlsyICogaW5JZHggKyAxXTsKLSAgICAgICAgc21wID0gc21wID4+IHNoaWZ0OworICAgICAgICBidWZbY2FwdElkeF0gPSBjbGFtcDhfZnJvbV9mbG9hdChzbXAgKiBmc2NhbGUpOworI2Vsc2UKKyAgICAgICAgY29uc3QgaW50MzJfdCBzbXAgPSAoaW5CdWZmZXItPnMxNltpbklkeF0gKyBpbkJ1ZmZlci0+czE2W2luSWR4ICsgMV0pID4+IHNoaWZ0OworICAgICAgICBpbklkeCArPSBGQ0NfMjsgIC8vIGludGVnZXIgc3VwcG9ydHMgc3RlcmVvIG9ubHkuCiAgICAgICAgIGJ1ZltjYXB0SWR4XSA9ICgodWludDhfdClzbXApXjB4ODA7CisjZW5kaWYgLy8gQlVJTERfRkxPQVQKICAgICB9CiAKICAgICAvLyBYWFggdGhlIGZvbGxvd2luZyB0d28gc2hvdWxkIHJlYWxseSBiZSBhdG9taWMsIHRob3VnaCBpdCBwcm9iYWJseSBkb2Vzbid0CkBAIC00MDAsNiArNDU3LDE1IEBACiAgICAgfQogCiAgICAgaWYgKGluQnVmZmVyLT5yYXcgIT0gb3V0QnVmZmVyLT5yYXcpIHsKKyNpZmRlZiBCVUlMRF9GTE9BVAorICAgICAgICBpZiAocENvbnRleHQtPm1Db25maWcub3V0cHV0Q2ZnLmFjY2Vzc01vZGUgPT0gRUZGRUNUX0JVRkZFUl9BQ0NFU1NfQUNDVU1VTEFURSkgeworICAgICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBzYW1wbGVMZW47ICsraSkgeworICAgICAgICAgICAgICAgIG91dEJ1ZmZlci0+ZjMyW2ldICs9IGluQnVmZmVyLT5mMzJbaV07CisgICAgICAgICAgICB9CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBtZW1jcHkob3V0QnVmZmVyLT5yYXcsIGluQnVmZmVyLT5yYXcsIHNhbXBsZUxlbiAqIHNpemVvZihmbG9hdCkpOworICAgICAgICB9CisjZWxzZQogICAgICAgICBpZiAocENvbnRleHQtPm1Db25maWcub3V0cHV0Q2ZnLmFjY2Vzc01vZGUgPT0gRUZGRUNUX0JVRkZFUl9BQ0NFU1NfQUNDVU1VTEFURSkgewogICAgICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBvdXRCdWZmZXItPmZyYW1lQ291bnQqMjsgaSsrKSB7CiAgICAgICAgICAgICAgICAgb3V0QnVmZmVyLT5zMTZbaV0gPSBjbGFtcDE2KG91dEJ1ZmZlci0+czE2W2ldICsgaW5CdWZmZXItPnMxNltpXSk7CkBAIC00MDcsNiArNDczLDcgQEAKICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIG1lbWNweShvdXRCdWZmZXItPnJhdywgaW5CdWZmZXItPnJhdywgb3V0QnVmZmVyLT5mcmFtZUNvdW50ICogMiAqIHNpemVvZihpbnQxNl90KSk7CiAgICAgICAgIH0KKyNlbmRpZiAvLyBCVUlMRF9GTE9BVAogICAgIH0KICAgICBpZiAocENvbnRleHQtPm1TdGF0ZSAhPSBWSVNVQUxJWkVSX1NUQVRFX0FDVElWRSkgewogICAgICAgICByZXR1cm4gLUVOT0RBVEE7CmRpZmYgLS1naXQgYS9tZWRpYS9saWJoZWlmL0hlaWZEZWNvZGVySW1wbC5jcHAgYi9tZWRpYS9saWJoZWlmL0hlaWZEZWNvZGVySW1wbC5jcHAKaW5kZXggMDFmMDE0Zi4uYTk3NzMwMCAxMDA2NDQKLS0tIGEvbWVkaWEvbGliaGVpZi9IZWlmRGVjb2RlckltcGwuY3BwCisrKyBiL21lZGlhL2xpYmhlaWYvSGVpZkRlY29kZXJJbXBsLmNwcApAQCAtODYsNyArODYsNyBAQAogICAgIHNwPElNZW1vcnk+IG1NZW1vcnk7CiAgICAgc3RkOjp1bmlxdWVfcHRyPEhlaWZTdHJlYW0+IG1TdHJlYW07CiAgICAgYm9vbCBtRU9TOwotICAgIHN0ZDo6dW5pcXVlX3B0cjx1aW50OF90PiBtQ2FjaGU7CisgICAgc3RkOjp1bmlxdWVfcHRyPHVpbnQ4X3RbXT4gbUNhY2hlOwogICAgIG9mZjY0X3QgbUNhY2hlZE9mZnNldDsKICAgICBzaXplX3QgbUNhY2hlZFNpemU7CiAgICAgc2l6ZV90IG1DYWNoZUJ1ZmZlclNpemU7CkBAIC0xNjUsNyArMTY1LDcgQEAKICAgICAgICAgLy8gaXQncyByZWFjaGluZyBtYXggY2FjaGUgYnVmZmVyIHNpemUsIG5lZWQgdG8gcm9sbCB3aW5kb3csIGFuZCBwb3NzaWJseQogICAgICAgICAvLyBleHBhbmQgdGhlIGNhY2hlIGJ1ZmZlci4KICAgICAgICAgc2l6ZV90IG5ld0NhY2hlQnVmZmVyU2l6ZSA9IG1DYWNoZUJ1ZmZlclNpemU7Ci0gICAgICAgIHN0ZDo6dW5pcXVlX3B0cjx1aW50OF90PiBuZXdDYWNoZTsKKyAgICAgICAgc3RkOjp1bmlxdWVfcHRyPHVpbnQ4X3RbXT4gbmV3Q2FjaGU7CiAgICAgICAgIHVpbnQ4X3QqIGRzdCA9IG1DYWNoZS5nZXQoKTsKICAgICAgICAgaWYgKG5ld0NhY2hlQnVmZmVyU2l6ZSA8IGtNYXhDYWNoZUJ1ZmZlclNpemUpIHsKICAgICAgICAgICAgIG5ld0NhY2hlQnVmZmVyU2l6ZSA9IGtNYXhDYWNoZUJ1ZmZlclNpemU7CmRpZmYgLS1naXQgYS9tZWRpYS9saWJoZWlmL2luY2x1ZGUvSGVpZkRlY29kZXJBUEkuaCBiL21lZGlhL2xpYmhlaWYvaW5jbHVkZS9IZWlmRGVjb2RlckFQSS5oCmluZGV4IDUxODNjMzkuLmFhMTBmMzMgMTAwNjQ0Ci0tLSBhL21lZGlhL2xpYmhlaWYvaW5jbHVkZS9IZWlmRGVjb2RlckFQSS5oCisrKyBiL21lZGlhL2xpYmhlaWYvaW5jbHVkZS9IZWlmRGVjb2RlckFQSS5oCkBAIC03NCw3ICs3NCw3IEBACiAgICAgaW50MzJfdCAgbVJvdGF0aW9uQW5nbGU7ICAgICAgICAgICAvLyBSb3RhdGlvbiBhbmdsZSwgY2xvY2t3aXNlLCBzaG91bGQgYmUgbXVsdGlwbGUgb2YgOTAKICAgICB1aW50MzJfdCBtQnl0ZXNQZXJQaXhlbDsgICAgICAgICAgIC8vIE51bWJlciBvZiBieXRlcyBmb3Igb25lIHBpeGVsCiAgICAgdWludDMyX3QgbUljY1NpemU7ICAgICAgICAgICAgICAgICAvLyBOdW1iZXIgb2YgYnl0ZXMgaW4gbUljY0RhdGEKLSAgICBzdGQ6OnVuaXF1ZV9wdHI8dWludDhfdD4gbUljY0RhdGE7IC8vIEFjdHVhbCBJQ0MgZGF0YSwgbWVtb3J5IGlzIG93bmVkIGJ5IHRoaXMgc3RydWN0dXJlCisgICAgc3RkOjp1bmlxdWVfcHRyPHVpbnQ4X3RbXT4gbUljY0RhdGE7IC8vIEFjdHVhbCBJQ0MgZGF0YSwgbWVtb3J5IGlzIG93bmVkIGJ5IHRoaXMgc3RydWN0dXJlCiB9OwogCiAvKgpkaWZmIC0tZ2l0IGEvbWVkaWEvbGlibWVkaWEvQW5kcm9pZC5icCBiL21lZGlhL2xpYm1lZGlhL0FuZHJvaWQuYnAKaW5kZXggODkyMWIyMi4uM2Q5ZTYyZSAxMDA2NDQKLS0tIGEvbWVkaWEvbGlibWVkaWEvQW5kcm9pZC5icAorKysgYi9tZWRpYS9saWJtZWRpYS9BbmRyb2lkLmJwCkBAIC0yMSw3ICsyMSw3IEBACiAgICAgdm5kazogewogICAgICAgICBlbmFibGVkOiB0cnVlLAogICAgIH0sCi0gICAgc3JjczogWyJBdWRpb1BhcmFtZXRlci5jcHAiLCAiVHlwZUNvbnZlcnRlci5jcHAiLCAiVGltZUNoZWNrLmNwcCJdLAorICAgIHNyY3M6IFsiQXVkaW9QYXJhbWV0ZXIuY3BwIiwgIlR5cGVDb252ZXJ0ZXIuY3BwIl0sCiAgICAgY2ZsYWdzOiBbCiAgICAgICAgICItV2Vycm9yIiwKICAgICAgICAgIi1Xbm8tZXJyb3I9ZGVwcmVjYXRlZC1kZWNsYXJhdGlvbnMiLApAQCAtMzMsNiArMzMsOSBAQAogICAgICAgICAibGliYXVkaW9jbGllbnRfaGVhZGVycyIsCiAgICAgICAgICJsaWJhdWRpb19zeXN0ZW1faGVhZGVycyIsCiAgICAgXSwKKyAgICBleHBvcnRfaGVhZGVyX2xpYl9oZWFkZXJzOiBbCisgICAgICAgICJsaWJtZWRpYV9oZWFkZXJzIiwKKyAgICBdLAogICAgIGNsYW5nOiB0cnVlLAogfQogCkBAIC0xMjUsNiArMTI4LDEwIEBACiAgICAgICAgICJsaWJzb25pdm94IiwKICAgICBdLAogCisgICAgaGVhZGVyX2xpYnM6IFsKKyAgICAgICAgIm1lZGlhX25ka19oZWFkZXJzIiwKKyAgICBdLAorCiAgICAgY2ZsYWdzOiBbCiAgICAgICAgICItV2Vycm9yIiwKICAgICAgICAgIi1Xbm8tZXJyb3I9ZGVwcmVjYXRlZC1kZWNsYXJhdGlvbnMiLApAQCAtMTQ2LDcgKzE1Myw3IEBACiBmaWxlZ3JvdXAgewogICAgIG5hbWU6ICJtZWRpYXVwZGF0ZXNlcnZpY2VfYWlkbCIsCiAgICAgc3JjczogWwotICAgICAgICAiYWlkbC9hbmRyb2lkL21lZGlhL0lNZWRpYUV4dHJhY3RvclVwZGF0ZVNlcnZpY2UuYWlkbCIsCisgICAgICAgICJhaWRsL2FuZHJvaWQvbWVkaWEvSU1lZGlhVXBkYXRlU2VydmljZS5haWRsIiwKICAgICBdLAogfQogCkBAIC0xODksNiArMTk2LDggQEAKICAgICAgICAgIk1lZGlhUmVzb3VyY2VQb2xpY3kuY3BwIiwKICAgICAgICAgIlZpc3VhbGl6ZXIuY3BwIiwKICAgICAgICAgIlN0cmluZ0FycmF5LmNwcCIsCisgICAgICAgICJOZGtNZWRpYUZvcm1hdFByaXYuY3BwIiwKKyAgICAgICAgIk5ka01lZGlhRXJyb3JQcml2LmNwcCIsCiAgICAgXSwKIAogICAgIGFpZGw6IHsKQEAgLTE5OCwxMCArMjA3LDEyIEBACiAKICAgICBoZWFkZXJfbGliczogWwogICAgICAgICAibGlic3RhZ2VmcmlnaHRfaGVhZGVycyIsCisgICAgICAgICJtZWRpYV9uZGtfaGVhZGVycyIsCiAgICAgXSwKIAogICAgIGV4cG9ydF9oZWFkZXJfbGliX2hlYWRlcnM6IFsKICAgICAgICAgImxpYnN0YWdlZnJpZ2h0X2hlYWRlcnMiLAorICAgICAgICAibWVkaWFfbmRrX2hlYWRlcnMiLAogICAgIF0sCiAKICAgICBzaGFyZWRfbGliczogWwpAQCAtMjYyLDE4ICsyNzMsMTMgQEAKICAgICB9LAogfQogCi1jY19saWJyYXJ5IHsKK2NjX2xpYnJhcnlfc3RhdGljIHsKICAgICBuYW1lOiAibGlibWVkaWFfcGxheWVyMl91dGlsIiwKIAogICAgIHNyY3M6IFsKICAgICAgICAgIkJ1ZmZlcmluZ1NldHRpbmdzLmNwcCIsCiAgICAgICAgICJEYXRhU291cmNlRGVzYy5jcHAiLAotICAgICAgICAiSURhdGFTb3VyY2UuY3BwIiwKLSAgICAgICAgIklNZWRpYUV4dHJhY3Rvci5jcHAiLAotICAgICAgICAiSU1lZGlhRXh0cmFjdG9yU2VydmljZS5jcHAiLAotICAgICAgICAiSU1lZGlhU291cmNlLmNwcCIsCiAgICAgICAgICJNZWRpYUNvZGVjQnVmZmVyLmNwcCIsCi0gICAgICAgICJNZWRpYVV0aWxzLmNwcCIsCiAgICAgICAgICJNZXRhZGF0YS5jcHAiLAogICAgICAgICAiTmRrV3JhcHBlci5jcHAiLAogICAgIF0sCkBAIC0yODUsNiArMjkxLDcgQEAKICAgICAgICAgImxpYm1lZGlhZXh0cmFjdG9yIiwKICAgICAgICAgImxpYm1lZGlhbmRrIiwKICAgICAgICAgImxpYm5hdGl2ZXdpbmRvdyIsCisgICAgICAgICJsaWJtZWRpYW5ka191dGlscyIsCiAgICAgICAgICJsaWJzdGFnZWZyaWdodF9mb3VuZGF0aW9uIiwKICAgICAgICAgImxpYnVpIiwKICAgICAgICAgImxpYnV0aWxzIiwKQEAgLTI5OSw2ICszMDYsMTAgQEAKICAgICAgICAgIm1lZGlhX3BsdWdpbl9oZWFkZXJzIiwKICAgICBdLAogCisgICAgaW5jbHVkZV9kaXJzOiBbCisgICAgICAgICJmcmFtZXdvcmtzL2F2L21lZGlhL25kayIsCisgICAgXSwKKwogICAgIHN0YXRpY19saWJzOiBbCiAgICAgICAgICJsaWJzdGFnZWZyaWdodF9ydHNwIiwKICAgICAgICAgImxpYnN0YWdlZnJpZ2h0X3RpbWVkdGV4dCIsCmRpZmYgLS1naXQgYS9tZWRpYS9saWJtZWRpYS9BdWRpb1BhcmFtZXRlci5jcHAgYi9tZWRpYS9saWJtZWRpYS9BdWRpb1BhcmFtZXRlci5jcHAKaW5kZXggMDM0ZjdjMi4uMWM5NWUyNyAxMDA2NDQKLS0tIGEvbWVkaWEvbGlibWVkaWEvQXVkaW9QYXJhbWV0ZXIuY3BwCisrKyBiL21lZGlhL2xpYm1lZGlhL0F1ZGlvUGFyYW1ldGVyLmNwcApAQCAtMzYsNiArMzYsOCBAQAogY29uc3QgY2hhciAqIGNvbnN0IEF1ZGlvUGFyYW1ldGVyOjprZXlId0F2U3luYyA9IEFVRElPX1BBUkFNRVRFUl9IV19BVl9TWU5DOwogY29uc3QgY2hhciAqIGNvbnN0IEF1ZGlvUGFyYW1ldGVyOjprZXlQcmVzZW50YXRpb25JZCA9IEFVRElPX1BBUkFNRVRFUl9TVFJFQU1fUFJFU0VOVEFUSU9OX0lEOwogY29uc3QgY2hhciAqIGNvbnN0IEF1ZGlvUGFyYW1ldGVyOjprZXlQcm9ncmFtSWQgPSBBVURJT19QQVJBTUVURVJfU1RSRUFNX1BST0dSQU1fSUQ7Citjb25zdCBjaGFyICogY29uc3QgQXVkaW9QYXJhbWV0ZXI6OmtleUF1ZGlvTGFuZ3VhZ2VQcmVmZXJyZWQgPQorICAgICAgICBBVURJT19QQVJBTUVURVJfS0VZX0FVRElPX0xBTkdVQUdFX1BSRUZFUlJFRDsKIGNvbnN0IGNoYXIgKiBjb25zdCBBdWRpb1BhcmFtZXRlcjo6a2V5TW9ub091dHB1dCA9IEFVRElPX1BBUkFNRVRFUl9NT05PX09VVFBVVDsKIGNvbnN0IGNoYXIgKiBjb25zdCBBdWRpb1BhcmFtZXRlcjo6a2V5U3RyZWFtSHdBdlN5bmMgPSBBVURJT19QQVJBTUVURVJfU1RSRUFNX0hXX0FWX1NZTkM7CiBjb25zdCBjaGFyICogY29uc3QgQXVkaW9QYXJhbWV0ZXI6OmtleVN0cmVhbUNvbm5lY3QgPSBBVURJT19QQVJBTUVURVJfREVWSUNFX0NPTk5FQ1Q7CmRpZmYgLS1naXQgYS9tZWRpYS9saWJtZWRpYS9JTWVkaWFFeHRyYWN0b3JTZXJ2aWNlLmNwcCBiL21lZGlhL2xpYm1lZGlhL0lNZWRpYUV4dHJhY3RvclNlcnZpY2UuY3BwCmluZGV4IGQ3NTMzY2EuLjAyOTVhYmMgMTAwNjQ0Ci0tLSBhL21lZGlhL2xpYm1lZGlhL0lNZWRpYUV4dHJhY3RvclNlcnZpY2UuY3BwCisrKyBiL21lZGlhL2xpYm1lZGlhL0lNZWRpYUV4dHJhY3RvclNlcnZpY2UuY3BwCkBAIC0yMyw3ICsyMyw2IEBACiAjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CiAjaW5jbHVkZSA8YmluZGVyL1BhcmNlbC5oPgogI2luY2x1ZGUgPG1lZGlhL0lNZWRpYUV4dHJhY3RvclNlcnZpY2UuaD4KLSNpbmNsdWRlIDxtZWRpYS9NZWRpYUV4dHJhY3Rvci5oPgogCiBuYW1lc3BhY2UgYW5kcm9pZCB7CiAKZGlmZiAtLWdpdCBhL21lZGlhL2xpYm1lZGlhL0lNZWRpYVBsYXllclNlcnZpY2UuY3BwIGIvbWVkaWEvbGlibWVkaWEvSU1lZGlhUGxheWVyU2VydmljZS5jcHAKaW5kZXggYWNhN2FkOS4uYmQxOGE0MCAxMDA2NDQKLS0tIGEvbWVkaWEvbGlibWVkaWEvSU1lZGlhUGxheWVyU2VydmljZS5jcHAKKysrIGIvbWVkaWEvbGlibWVkaWEvSU1lZGlhUGxheWVyU2VydmljZS5jcHAKQEAgLTIzLDYgKzIzLDcgQEAKICNpbmNsdWRlIDxtZWRpYS9JTWVkaWFDb2RlY0xpc3QuaD4KICNpbmNsdWRlIDxtZWRpYS9JTWVkaWFIVFRQU2VydmljZS5oPgogI2luY2x1ZGUgPG1lZGlhL0lNZWRpYVBsYXllclNlcnZpY2UuaD4KKyNpbmNsdWRlIDxtZWRpYS9JTWVkaWFQbGF5ZXIuaD4KICNpbmNsdWRlIDxtZWRpYS9JTWVkaWFSZWNvcmRlci5oPgogI2luY2x1ZGUgPG1lZGlhL0lPTVguaD4KICNpbmNsdWRlIDxtZWRpYS9JUmVtb3RlRGlzcGxheS5oPgpkaWZmIC0tZ2l0IGEvbWVkaWEvbGlibWVkaWEvSU1lZGlhU291cmNlLmNwcCBiL21lZGlhL2xpYm1lZGlhL0lNZWRpYVNvdXJjZS5jcHAKaW5kZXggZjE4NWZkNC4uZTdkYTQ4OCAxMDA2NDQKLS0tIGEvbWVkaWEvbGlibWVkaWEvSU1lZGlhU291cmNlLmNwcAorKysgYi9tZWRpYS9saWJtZWRpYS9JTWVkaWFTb3VyY2UuY3BwCkBAIC0xODYsNiArMTg2LDkgQEAKICAgICAgICAgcmV0ID0gcmVwbHkucmVhZEludDMyKCk7CiAgICAgICAgIEFMT0dWKCJyZWFkTXVsdGlwbGUgc3RhdHVzICVkLCBidWZmZXJDb3VudCAldSwgc2luY2VTdG9wICV1IiwKICAgICAgICAgICAgICAgICByZXQsIGJ1ZmZlckNvdW50LCBtQnVmZmVyc1NpbmNlU3RvcCk7CisgICAgICAgIGlmIChidWZmZXJDb3VudCAmJiByZXQgPT0gV09VTERfQkxPQ0spIHsKKyAgICAgICAgICAgIHJldCA9IE9LOworICAgICAgICB9CiAgICAgICAgIHJldHVybiByZXQ7CiAgICAgfQogCmRpZmYgLS1naXQgYS9tZWRpYS9saWJtZWRpYS9NaWRpSW9XcmFwcGVyLmNwcCBiL21lZGlhL2xpYm1lZGlhL01pZGlJb1dyYXBwZXIuY3BwCmluZGV4IDVjYTNiNDguLjExNTBkNjEgMTAwNjQ0Ci0tLSBhL21lZGlhL2xpYm1lZGlhL01pZGlJb1dyYXBwZXIuY3BwCisrKyBiL21lZGlhL2xpYm1lZGlhL01pZGlJb1dyYXBwZXIuY3BwCkBAIC0yMyw2ICsyMyw3IEBACiAjaW5jbHVkZSA8ZmNudGwuaD4KIAogI2luY2x1ZGUgPG1lZGlhL01pZGlJb1dyYXBwZXIuaD4KKyNpbmNsdWRlIDxtZWRpYS9NZWRpYUV4dHJhY3RvclBsdWdpbkFwaS5oPgogCiBzdGF0aWMgaW50IHJlYWRBdCh2b2lkICpoYW5kbGUsIHZvaWQgKmJ1ZmZlciwgaW50IHBvcywgaW50IHNpemUpIHsKICAgICByZXR1cm4gKChhbmRyb2lkOjpNaWRpSW9XcmFwcGVyKiloYW5kbGUpLT5yZWFkQXQoYnVmZmVyLCBwb3MsIHNpemUpOwpAQCAtNjEsNiArNjIsNTEgQEAKICAgICB9CiB9CiAKK2NsYXNzIERhdGFTb3VyY2VVbndyYXBwZXIgOiBwdWJsaWMgRGF0YVNvdXJjZUJhc2UgeworCitwdWJsaWM6CisgICAgZXhwbGljaXQgRGF0YVNvdXJjZVVud3JhcHBlcihDRGF0YVNvdXJjZSAqY3NvdXJjZSkgeworICAgICAgICBtU291cmNlID0gY3NvdXJjZTsKKyAgICB9CisgICAgdmlydHVhbCBzdGF0dXNfdCBpbml0Q2hlY2soKSBjb25zdCB7IHJldHVybiBPSzsgfQorCisgICAgLy8gUmV0dXJucyB0aGUgbnVtYmVyIG9mIGJ5dGVzIHJlYWQsIG9yIC0xIG9uIGZhaWx1cmUuIEl0J3Mgbm90IGFuIGVycm9yIGlmCisgICAgLy8gdGhpcyByZXR1cm5zIHplcm87IGl0IGp1c3QgbWVhbnMgdGhlIGdpdmVuIG9mZnNldCBpcyBlcXVhbCB0bywgb3IKKyAgICAvLyBiZXlvbmQsIHRoZSBlbmQgb2YgdGhlIHNvdXJjZS4KKyAgICB2aXJ0dWFsIHNzaXplX3QgcmVhZEF0KG9mZjY0X3Qgb2Zmc2V0LCB2b2lkICpkYXRhLCBzaXplX3Qgc2l6ZSkgeworICAgICAgICByZXR1cm4gbVNvdXJjZS0+cmVhZEF0KG1Tb3VyY2UtPmhhbmRsZSwgb2Zmc2V0LCBkYXRhLCBzaXplKTsKKyAgICB9CisKKyAgICAvLyBNYXkgcmV0dXJuIEVSUk9SX1VOU1VQUE9SVEVELgorICAgIHZpcnR1YWwgc3RhdHVzX3QgZ2V0U2l6ZShvZmY2NF90ICpzaXplKSB7CisgICAgICAgIHJldHVybiBtU291cmNlLT5nZXRTaXplKG1Tb3VyY2UtPmhhbmRsZSwgc2l6ZSk7CisgICAgfQorCisgICAgdmlydHVhbCBib29sIGdldFVyaShjaGFyICogLyp1cmlTdHJpbmcqLywgc2l6ZV90IC8qYnVmZmVyU2l6ZSovKSB7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICB2aXJ0dWFsIHVpbnQzMl90IGZsYWdzKCkgeworICAgICAgICByZXR1cm4gMDsKKyAgICB9CisKKyAgICB2aXJ0dWFsIHZvaWQgY2xvc2UoKSB7fTsKK3ByaXZhdGU6CisgICAgQ0RhdGFTb3VyY2UgKm1Tb3VyY2U7Cit9OworCitNaWRpSW9XcmFwcGVyOjpNaWRpSW9XcmFwcGVyKENEYXRhU291cmNlICpjc291cmNlKSB7CisgICAgQUxPR1YoIk1pZGlJb1dyYXBwZXIoQ0RhdGFTb3VyY2UpIik7CisgICAgbUZkID0gLTE7CisgICAgbURhdGFTb3VyY2UgPSBuZXcgRGF0YVNvdXJjZVVud3JhcHBlcihjc291cmNlKTsKKyAgICBvZmY2NF90IGw7CisgICAgaWYgKG1EYXRhU291cmNlLT5nZXRTaXplKCZsKSA9PSBPSykgeworICAgICAgICBtTGVuZ3RoID0gbDsKKyAgICB9IGVsc2UgeworICAgICAgICBtTGVuZ3RoID0gMDsKKyAgICB9Cit9CisKIE1pZGlJb1dyYXBwZXI6On5NaWRpSW9XcmFwcGVyKCkgewogICAgIEFMT0dWKCJ+TWlkaUlvV3JhcHBlciIpOwogICAgIGlmIChtRmQgPj0gMCkgewpkaWZmIC0tZ2l0IGEvbWVkaWEvbGlibWVkaWEvTmRrTWVkaWFFcnJvclByaXYuY3BwIGIvbWVkaWEvbGlibWVkaWEvTmRrTWVkaWFFcnJvclByaXYuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJhM2I5MTkKLS0tIC9kZXYvbnVsbAorKysgYi9tZWRpYS9saWJtZWRpYS9OZGtNZWRpYUVycm9yUHJpdi5jcHAKQEAgLTAsMCArMSw2NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxOCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCisKKyNpbmNsdWRlIDxtZWRpYS9OZGtNZWRpYUVycm9yLmg+CisjaW5jbHVkZSA8bWVkaWEvc3RhZ2VmcmlnaHQvTWVkaWFFcnJvcnMuaD4KKyNpbmNsdWRlIDx1dGlscy9FcnJvcnMuaD4KKyNpbmNsdWRlIDx1dGlscy9Mb2cuaD4KKwordXNpbmcgbmFtZXNwYWNlIGFuZHJvaWQ7CisKK21lZGlhX3N0YXR1c190IHRyYW5zbGF0ZV9lcnJvcihzdGF0dXNfdCBlcnIpIHsKKworICAgIGlmIChlcnIgPT0gT0spIHsKKyAgICAgICAgcmV0dXJuIEFNRURJQV9PSzsKKyAgICB9IGVsc2UgaWYgKGVyciA9PSBFUlJPUl9FTkRfT0ZfU1RSRUFNKSB7CisgICAgICAgIHJldHVybiBBTUVESUFfRVJST1JfRU5EX09GX1NUUkVBTTsKKyAgICB9IGVsc2UgaWYgKGVyciA9PSBFUlJPUl9JTykgeworICAgICAgICByZXR1cm4gQU1FRElBX0VSUk9SX0lPOworICAgIH0gZWxzZSBpZiAoZXJyID09IEVSUk9SX01BTEZPUk1FRCkgeworICAgICAgICByZXR1cm4gQU1FRElBX0VSUk9SX01BTEZPUk1FRDsKKyAgICB9IGVsc2UgaWYgKGVyciA9PSBJTlZBTElEX09QRVJBVElPTikgeworICAgICAgICByZXR1cm4gQU1FRElBX0VSUk9SX0lOVkFMSURfT1BFUkFUSU9OOworICAgIH0gZWxzZSBpZiAoZXJyID09IFVOS05PV05fRVJST1IpIHsKKyAgICAgICAgcmV0dXJuIEFNRURJQV9FUlJPUl9VTktOT1dOOworICAgIH0KKworICAgIEFMT0dFKCJzZiBlcnJvciBjb2RlOiAlZCIsIGVycik7CisgICAgcmV0dXJuIEFNRURJQV9FUlJPUl9VTktOT1dOOworfQorCitzdGF0dXNfdCByZXZlcnNlX3RyYW5zbGF0ZV9lcnJvcihtZWRpYV9zdGF0dXNfdCBlcnIpIHsKKworICAgIGlmIChlcnIgPT0gQU1FRElBX09LKSB7CisgICAgICAgIHJldHVybiBPSzsKKyAgICB9IGVsc2UgaWYgKGVyciA9PSBBTUVESUFfRVJST1JfRU5EX09GX1NUUkVBTSkgeworICAgICAgICByZXR1cm4gRVJST1JfRU5EX09GX1NUUkVBTTsKKyAgICB9IGVsc2UgaWYgKGVyciA9PSBBTUVESUFfRVJST1JfSU8pIHsKKyAgICAgICAgcmV0dXJuIEVSUk9SX0lPOworICAgIH0gZWxzZSBpZiAoZXJyID09IEFNRURJQV9FUlJPUl9XT1VMRF9CTE9DSykgeworICAgICAgICByZXR1cm4gV09VTERfQkxPQ0s7CisgICAgfSBlbHNlIGlmIChlcnIgPT0gQU1FRElBX0VSUk9SX01BTEZPUk1FRCkgeworICAgICAgICByZXR1cm4gRVJST1JfTUFMRk9STUVEOworICAgIH0gZWxzZSBpZiAoZXJyID09IEFNRURJQV9FUlJPUl9JTlZBTElEX09QRVJBVElPTikgeworICAgICAgICByZXR1cm4gSU5WQUxJRF9PUEVSQVRJT047CisgICAgfSBlbHNlIGlmIChlcnIgPT0gQU1FRElBX0VSUk9SX1VOS05PV04pIHsKKyAgICAgICAgcmV0dXJuIFVOS05PV05fRVJST1I7CisgICAgfQorCisgICAgQUxPR0UoIm5kayBlcnJvciBjb2RlOiAlZCIsIGVycik7CisgICAgcmV0dXJuIFVOS05PV05fRVJST1I7Cit9CmRpZmYgLS1naXQgYS9tZWRpYS9saWJtZWRpYS9OZGtNZWRpYUZvcm1hdFByaXYuY3BwIGIvbWVkaWEvbGlibWVkaWEvTmRrTWVkaWFGb3JtYXRQcml2LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zYzg0ZDZhCi0tLSAvZGV2L251bGwKKysrIGIvbWVkaWEvbGlibWVkaWEvTmRrTWVkaWFGb3JtYXRQcml2LmNwcApAQCAtMCwwICsxLDU2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE4IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KKworLy8jZGVmaW5lIExPR19OREVCVUcgMAorI2RlZmluZSBMT0dfVEFHICJOZGtNZWRpYUZvcm1hdCIKKworI2luY2x1ZGUgPGludHR5cGVzLmg+CisKKy8vI2luY2x1ZGUgPG5kay9pbmNsdWRlL21lZGlhL05ka01lZGlhRm9ybWF0Lmg+CisKKyNpbmNsdWRlIDx1dGlscy9Mb2cuaD4KKyNpbmNsdWRlIDx1dGlscy9TdHJvbmdQb2ludGVyLmg+CisjaW5jbHVkZSA8bWVkaWEvTmRrTWVkaWFGb3JtYXRQcml2Lmg+CisjaW5jbHVkZSA8bWVkaWEvc3RhZ2VmcmlnaHQvZm91bmRhdGlvbi9BQnVmZmVyLmg+CisjaW5jbHVkZSA8bWVkaWEvc3RhZ2VmcmlnaHQvZm91bmRhdGlvbi9BTWVzc2FnZS5oPgorLy8jaW5jbHVkZSA8YW5kcm9pZF9ydW50aW1lL0FuZHJvaWRSdW50aW1lLmg+CisvLyNpbmNsdWRlIDxhbmRyb2lkX3V0aWxfQmluZGVyLmg+CisKKyNpbmNsdWRlIDxqbmkuaD4KKwordXNpbmcgbmFtZXNwYWNlIGFuZHJvaWQ7CisKK2V4dGVybiAiQyIgeworCisvLyBwcml2YXRlIGZ1bmN0aW9ucyBmb3IgY29udmVyc2lvbiB0by9mcm9tIEFNZXNzYWdlCitBTWVkaWFGb3JtYXQqIEFNZWRpYUZvcm1hdF9mcm9tTXNnKGNvbnN0IHZvaWQqIGRhdGEpIHsKKyAgICBBTE9HVigicHJpdmF0ZSBjdG9yIik7CisgICAgQU1lZGlhRm9ybWF0KiBtRGF0YSA9IG5ldyBBTWVkaWFGb3JtYXQoKTsKKyAgICBtRGF0YS0+bUZvcm1hdCA9ICooKHNwPEFNZXNzYWdlPiopZGF0YSk7CisgICAgaWYgKG1EYXRhLT5tRm9ybWF0ID09IE5VTEwpIHsKKyAgICAgICAgQUxPR1coImdvdCBOVUxMIGZvcm1hdCIpOworICAgICAgICBtRGF0YS0+bUZvcm1hdCA9IG5ldyBBTWVzc2FnZTsKKyAgICB9CisgICAgcmV0dXJuIG1EYXRhOworfQorCit2b2lkIEFNZWRpYUZvcm1hdF9nZXRGb3JtYXQoY29uc3QgQU1lZGlhRm9ybWF0KiBtRGF0YSwgdm9pZCogZGVzdCkgeworICAgICooKHNwPEFNZXNzYWdlPiopZGVzdCkgPSBtRGF0YS0+bUZvcm1hdDsKK30KKworfSAvLyBleHRlcm4gIkMiCisKKwpkaWZmIC0tZ2l0IGEvbWVkaWEvbGlibWVkaWEvTmRrV3JhcHBlci5jcHAgYi9tZWRpYS9saWJtZWRpYS9OZGtXcmFwcGVyLmNwcAppbmRleCAyNzJiYzMwLi5lZWQ5NmU3IDEwMDY0NAotLS0gYS9tZWRpYS9saWJtZWRpYS9OZGtXcmFwcGVyLmNwcAorKysgYi9tZWRpYS9saWJtZWRpYS9OZGtXcmFwcGVyLmNwcApAQCAtMzEsMTcgKzMxLDcgQEAKICNpbmNsdWRlIDxtZWRpYS9zdGFnZWZyaWdodC9mb3VuZGF0aW9uL0FNZXNzYWdlLmg+CiAjaW5jbHVkZSA8dXRpbHMvRXJyb3JzLmg+CiAKLS8vIFRPRE86IHJlbW92ZSBmb3J3YXJkIGRlY2xhcmF0aW9uIHdoZW4gQU1lZGlhRXh0cmFjdG9yX2Rpc2Nvbm5lY3QgaXMgb2ZmY2lhbGx5IGFkZGVkIHRvIE5ESwotCi0jaWZkZWYgX19jcGx1c3BsdXMKLWV4dGVybiAiQyIgewotI2VuZGlmCi0KLW1lZGlhX3N0YXR1c190IEFNZWRpYUV4dHJhY3Rvcl9kaXNjb25uZWN0KEFNZWRpYUV4dHJhY3RvciAqKTsKLQotI2lmZGVmIF9fY3BsdXNwbHVzCi19IC8vIGV4dGVybiAiQyIKLSNlbmRpZgorI2luY2x1ZGUgIk5ka01lZGlhRGF0YVNvdXJjZUNhbGxiYWNrc1ByaXYuaCIKIAogbmFtZXNwYWNlIGFuZHJvaWQgewogCkBAIC0xMDgwLDE0ICsxMDcwLDYgQEAKICAgICByZXR1cm4gT0s7CiB9CiAKLXN0YXR1c190IEFNZWRpYUV4dHJhY3RvcldyYXBwZXI6OmRpc2Nvbm5lY3QoKSB7Ci0gICAgaWYgKG1BTWVkaWFFeHRyYWN0b3IgIT0gTlVMTCkgewotICAgICAgICBtZWRpYV9zdGF0dXNfdCBlcnIgPSBBTWVkaWFFeHRyYWN0b3JfZGlzY29ubmVjdChtQU1lZGlhRXh0cmFjdG9yKTsKLSAgICAgICAgcmV0dXJuIHRyYW5zbGF0ZUVycm9yQ29kZShlcnIpOwotICAgIH0KLSAgICByZXR1cm4gREVBRF9PQkpFQ1Q7Ci19Ci0KIEFNZWRpYUV4dHJhY3RvciAqQU1lZGlhRXh0cmFjdG9yV3JhcHBlcjo6Z2V0QU1lZGlhRXh0cmFjdG9yKCkgY29uc3QgewogICAgIHJldHVybiBtQU1lZGlhRXh0cmFjdG9yOwogfQpAQCAtMTI2NCwzNyArMTI0NiwyMSBAQAogICAgIHJldHVybiBuZXcgQU1lZGlhQ29kZWNDcnlwdG9JbmZvV3JhcHBlcihBTWVkaWFFeHRyYWN0b3JfZ2V0U2FtcGxlQ3J5cHRvSW5mbyhtQU1lZGlhRXh0cmFjdG9yKSk7CiB9CiAKLXNzaXplX3QgQU1lZGlhRGF0YVNvdXJjZVdyYXBwZXI6OkFNZWRpYURhdGFTb3VyY2VXcmFwcGVyX2dldFNpemUodm9pZCAqdXNlcmRhdGEpIHsKLSAgICBEYXRhU291cmNlICpzb3VyY2UgPSBzdGF0aWNfY2FzdDxEYXRhU291cmNlICo+KHVzZXJkYXRhKTsKLSAgICBvZmY2NF90IHNpemUgPSAtMTsKLSAgICBzb3VyY2UtPmdldFNpemUoJnNpemUpOwotICAgIHJldHVybiBzaXplOwotfQotCi1zc2l6ZV90IEFNZWRpYURhdGFTb3VyY2VXcmFwcGVyOjpBTWVkaWFEYXRhU291cmNlV3JhcHBlcl9yZWFkQXQodm9pZCAqdXNlcmRhdGEsIG9mZjY0X3Qgb2Zmc2V0LCB2b2lkICogYnVmLCBzaXplX3Qgc2l6ZSkgewotICAgIERhdGFTb3VyY2UgKnNvdXJjZSA9IHN0YXRpY19jYXN0PERhdGFTb3VyY2UgKj4odXNlcmRhdGEpOwotICAgIHJldHVybiBzb3VyY2UtPnJlYWRBdChvZmZzZXQsIGJ1Ziwgc2l6ZSk7Ci19Ci0KLXZvaWQgQU1lZGlhRGF0YVNvdXJjZVdyYXBwZXI6OkFNZWRpYURhdGFTb3VyY2VXcmFwcGVyX2Nsb3NlKHZvaWQgKnVzZXJkYXRhKSB7Ci0gICAgRGF0YVNvdXJjZSAqc291cmNlID0gc3RhdGljX2Nhc3Q8RGF0YVNvdXJjZSAqPih1c2VyZGF0YSk7Ci0gICAgc291cmNlLT5jbG9zZSgpOwotfQotCiBBTWVkaWFEYXRhU291cmNlV3JhcHBlcjo6QU1lZGlhRGF0YVNvdXJjZVdyYXBwZXIoY29uc3Qgc3A8RGF0YVNvdXJjZT4gJmRhdGFTb3VyY2UpCiAgICAgOiBtRGF0YVNvdXJjZShkYXRhU291cmNlKSwKLSAgICAgIG1BTWVkaWFEYXRhU291cmNlKEFNZWRpYURhdGFTb3VyY2VfbmV3KCkpIHsKLSAgICBBTE9HVigic2V0RGF0YVNvdXJjZSAoc291cmNlOiAlcCkiLCBkYXRhU291cmNlLmdldCgpKTsKLSAgICBBTWVkaWFEYXRhU291cmNlX3NldFVzZXJkYXRhKG1BTWVkaWFEYXRhU291cmNlLCBkYXRhU291cmNlLmdldCgpKTsKLSAgICBBTWVkaWFEYXRhU291cmNlX3NldFJlYWRBdChtQU1lZGlhRGF0YVNvdXJjZSwgQU1lZGlhRGF0YVNvdXJjZVdyYXBwZXJfcmVhZEF0KTsKLSAgICBBTWVkaWFEYXRhU291cmNlX3NldEdldFNpemUobUFNZWRpYURhdGFTb3VyY2UsIEFNZWRpYURhdGFTb3VyY2VXcmFwcGVyX2dldFNpemUpOwotICAgIEFNZWRpYURhdGFTb3VyY2Vfc2V0Q2xvc2UobUFNZWRpYURhdGFTb3VyY2UsIEFNZWRpYURhdGFTb3VyY2VXcmFwcGVyX2Nsb3NlKTsKKyAgICAgIG1BTWVkaWFEYXRhU291cmNlKGNvbnZlcnREYXRhU291cmNlVG9BTWVkaWFEYXRhU291cmNlKGRhdGFTb3VyY2UpKSB7Cit9CisKK0FNZWRpYURhdGFTb3VyY2VXcmFwcGVyOjpBTWVkaWFEYXRhU291cmNlV3JhcHBlcihBTWVkaWFEYXRhU291cmNlICphRGF0YVNvdXJjZSkKKyAgICA6IG1EYXRhU291cmNlKE5VTEwpLAorICAgICAgbUFNZWRpYURhdGFTb3VyY2UoYURhdGFTb3VyY2UpIHsKIH0KIAogQU1lZGlhRGF0YVNvdXJjZVdyYXBwZXI6On5BTWVkaWFEYXRhU291cmNlV3JhcHBlcigpIHsKICAgICBpZiAobUFNZWRpYURhdGFTb3VyY2UgPT0gTlVMTCkgewogICAgICAgICByZXR1cm47CiAgICAgfQorICAgIEFNZWRpYURhdGFTb3VyY2VfY2xvc2UobUFNZWRpYURhdGFTb3VyY2UpOwogICAgIEFNZWRpYURhdGFTb3VyY2VfZGVsZXRlKG1BTWVkaWFEYXRhU291cmNlKTsKICAgICBtQU1lZGlhRGF0YVNvdXJjZSA9IE5VTEw7CiB9CkBAIC0xMzAzLDQgKzEyNjksOCBAQAogICAgIHJldHVybiBtQU1lZGlhRGF0YVNvdXJjZTsKIH0KIAordm9pZCBBTWVkaWFEYXRhU291cmNlV3JhcHBlcjo6Y2xvc2UoKSB7CisgICAgQU1lZGlhRGF0YVNvdXJjZV9jbG9zZShtQU1lZGlhRGF0YVNvdXJjZSk7Cit9CisKIH0gIC8vIG5hbWVzcGFjZSBhbmRyb2lkCmRpZmYgLS1naXQgYS9tZWRpYS9saWJtZWRpYS9UaW1lQ2hlY2suY3BwIGIvbWVkaWEvbGlibWVkaWEvVGltZUNoZWNrLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZGFiNWQ0Zi4uMDAwMDAwMAotLS0gYS9tZWRpYS9saWJtZWRpYS9UaW1lQ2hlY2suY3BwCisrKyAvZGV2L251bGwKQEAgLTEsODggKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxOCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0Ci0gKgotICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7Ci0gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCi0gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLSAqCi0gKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotICoKLSAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKLSAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCi0gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KLSAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKLSAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgotICovCi0KLQotI2luY2x1ZGUgPG1lZGlhL1RpbWVDaGVjay5oPgotCi1uYW1lc3BhY2UgYW5kcm9pZCB7Ci0KLS8qIHN0YXRpYyAqLwotc3A8VGltZUNoZWNrOjpUaW1lQ2hlY2tUaHJlYWQ+IFRpbWVDaGVjazo6Z2V0VGltZUNoZWNrVGhyZWFkKCkKLXsKLSAgICBzdGF0aWMgc3A8VGltZUNoZWNrOjpUaW1lQ2hlY2tUaHJlYWQ+IHNUaW1lQ2hlY2tUaHJlYWQgPSBuZXcgVGltZUNoZWNrOjpUaW1lQ2hlY2tUaHJlYWQoKTsKLSAgICByZXR1cm4gc1RpbWVDaGVja1RocmVhZDsKLX0KLQotVGltZUNoZWNrOjpUaW1lQ2hlY2soY29uc3QgY2hhciAqdGFnLCB1aW50MzJfdCB0aW1lb3V0TXMpCi0gICAgOiBtRW5kVGltZU5zKGdldFRpbWVDaGVja1RocmVhZCgpLT5zdGFydE1vbml0b3JpbmcodGFnLCB0aW1lb3V0TXMpKQotewotfQotCi1UaW1lQ2hlY2s6On5UaW1lQ2hlY2soKSB7Ci0gICAgZ2V0VGltZUNoZWNrVGhyZWFkKCktPnN0b3BNb25pdG9yaW5nKG1FbmRUaW1lTnMpOwotfQotCi1UaW1lQ2hlY2s6OlRpbWVDaGVja1RocmVhZDo6flRpbWVDaGVja1RocmVhZCgpCi17Ci0gICAgQXV0b011dGV4IF9sKG1NdXRleCk7Ci0gICAgcmVxdWVzdEV4aXQoKTsKLSAgICBtTW9uaXRvclJlcXVlc3RzLmNsZWFyKCk7Ci0gICAgbUNvbmQuc2lnbmFsKCk7Ci19Ci0KLW5zZWNzX3QgVGltZUNoZWNrOjpUaW1lQ2hlY2tUaHJlYWQ6OnN0YXJ0TW9uaXRvcmluZyhjb25zdCBjaGFyICp0YWcsIHVpbnQzMl90IHRpbWVvdXRNcykgewotICAgIE11dGV4OjpBdXRvbG9jayBfbChtTXV0ZXgpOwotICAgIG5zZWNzX3QgZW5kVGltZU5zID0gc3lzdGVtVGltZSgpICsgbWlsbGlzZWNvbmRzKHRpbWVvdXRNcyk7Ci0gICAgZm9yICg7IG1Nb25pdG9yUmVxdWVzdHMuaW5kZXhPZktleShlbmRUaW1lTnMpID49IDA7ICsrZW5kVGltZU5zKTsKLSAgICBtTW9uaXRvclJlcXVlc3RzLmFkZChlbmRUaW1lTnMsIHRhZyk7Ci0gICAgbUNvbmQuc2lnbmFsKCk7Ci0gICAgcmV0dXJuIGVuZFRpbWVOczsKLX0KLQotdm9pZCBUaW1lQ2hlY2s6OlRpbWVDaGVja1RocmVhZDo6c3RvcE1vbml0b3JpbmcobnNlY3NfdCBlbmRUaW1lTnMpIHsKLSAgICBNdXRleDo6QXV0b2xvY2sgX2wobU11dGV4KTsKLSAgICBtTW9uaXRvclJlcXVlc3RzLnJlbW92ZUl0ZW0oZW5kVGltZU5zKTsKLSAgICBtQ29uZC5zaWduYWwoKTsKLX0KLQotYm9vbCBUaW1lQ2hlY2s6OlRpbWVDaGVja1RocmVhZDo6dGhyZWFkTG9vcCgpCi17Ci0gICAgc3RhdHVzX3Qgc3RhdHVzID0gVElNRURfT1VUOwotICAgIGNvbnN0IGNoYXIgKnRhZzsKLSAgICB7Ci0gICAgICAgIEF1dG9NdXRleCBfbChtTXV0ZXgpOwotCi0gICAgICAgIGlmIChleGl0UGVuZGluZygpKSB7Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0KLQotICAgICAgICBuc2Vjc190IGVuZFRpbWVOcyA9IElOVDY0X01BWDsKLSAgICAgICAgLy8gS2V5ZWRWZWN0b3IgbU1vbml0b3JSZXF1ZXN0cyBpcyBvcmRlcmVkIHNvIHRha2UgZmlyc3QgZW50cnkgYXMgbmV4dCB0aW1lb3V0Ci0gICAgICAgIGlmIChtTW9uaXRvclJlcXVlc3RzLnNpemUoKSAhPSAwKSB7Ci0gICAgICAgICAgICBlbmRUaW1lTnMgPSBtTW9uaXRvclJlcXVlc3RzLmtleUF0KDApOwotICAgICAgICAgICAgdGFnID0gbU1vbml0b3JSZXF1ZXN0cy52YWx1ZUF0KDApOwotICAgICAgICB9Ci0KLSAgICAgICAgY29uc3QgbnNlY3NfdCB3YWl0VGltZU5zID0gZW5kVGltZU5zIC0gc3lzdGVtVGltZSgpOwotICAgICAgICBpZiAod2FpdFRpbWVOcyA+IDApIHsKLSAgICAgICAgICAgIHN0YXR1cyA9IG1Db25kLndhaXRSZWxhdGl2ZShtTXV0ZXgsIHdhaXRUaW1lTnMpOwotICAgICAgICB9Ci0gICAgfQotICAgIExPR19BTFdBWVNfRkFUQUxfSUYoc3RhdHVzICE9IE5PX0VSUk9SLCAiVGltZUNoZWNrIHRpbWVvdXQgZm9yICVzIiwgdGFnKTsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotfTsgLy8gbmFtZXNwYWNlIGFuZHJvaWQKZGlmZiAtLWdpdCBhL21lZGlhL2xpYm1lZGlhL1R5cGVDb252ZXJ0ZXIuY3BwIGIvbWVkaWEvbGlibWVkaWEvVHlwZUNvbnZlcnRlci5jcHAKaW5kZXggYTNkYjc1NC4uNTE0Yzc5NSAxMDA2NDQKLS0tIGEvbWVkaWEvbGlibWVkaWEvVHlwZUNvbnZlcnRlci5jcHAKKysrIGIvbWVkaWEvbGlibWVkaWEvVHlwZUNvbnZlcnRlci5jcHAKQEAgLTEzMiw2ICsxMzIsNyBAQAogICAgIE1BS0VfU1RSSU5HX0ZST01fRU5VTShBVURJT19JTlBVVF9GTEFHX01NQVBfTk9JUlEpLAogICAgIE1BS0VfU1RSSU5HX0ZST01fRU5VTShBVURJT19JTlBVVF9GTEFHX1ZPSVBfVFgpLAogICAgIE1BS0VfU1RSSU5HX0ZST01fRU5VTShBVURJT19JTlBVVF9GTEFHX0hXX0FWX1NZTkMpLAorICAgIE1BS0VfU1RSSU5HX0ZST01fRU5VTShBVURJT19JTlBVVF9GTEFHX0RJUkVDVCksCiAgICAgVEVSTUlOQVRPUgogfTsKIApkaWZmIC0tZ2l0IGEvbWVkaWEvbGlibWVkaWEvYWlkbC9hbmRyb2lkL21lZGlhL0lNZWRpYUV4dHJhY3RvclVwZGF0ZVNlcnZpY2UuYWlkbCBiL21lZGlhL2xpYm1lZGlhL2FpZGwvYW5kcm9pZC9tZWRpYS9JTWVkaWFFeHRyYWN0b3JVcGRhdGVTZXJ2aWNlLmFpZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDU3YjFiYzkuLjAwMDAwMDAKLS0tIGEvbWVkaWEvbGlibWVkaWEvYWlkbC9hbmRyb2lkL21lZGlhL0lNZWRpYUV4dHJhY3RvclVwZGF0ZVNlcnZpY2UuYWlkbAorKysgL2Rldi9udWxsCkBAIC0xLDI1ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgMjAxOCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0Ci0gKgotICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7Ci0gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCi0gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLSAqCi0gKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotICoKLSAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKLSAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCi0gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KLSAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKLSAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgotICovCi0KLXBhY2thZ2UgYW5kcm9pZC5tZWRpYTsKLQotLyoqCi0gKiBTZXJ2aWNlIHRvIHJlbG9hZCBleHRyYWN0b3IgcGx1Z2lucyB3aGVuIHVwZGF0ZSBwYWNrYWdlIGlzIGluc3RhbGxlZC91bmluc3RhbGxlZC4KLSAqIEBoaWRlCi0gKi8KLWludGVyZmFjZSBJTWVkaWFFeHRyYWN0b3JVcGRhdGVTZXJ2aWNlIHsKLSAgICB2b2lkIGxvYWRQbHVnaW5zKEB1dGY4SW5DcHAgU3RyaW5nIGFwa1BhdGgpOwotfQpkaWZmIC0tZ2l0IGEvbWVkaWEvbGlibWVkaWEvYWlkbC9hbmRyb2lkL21lZGlhL0lNZWRpYVVwZGF0ZVNlcnZpY2UuYWlkbCBiL21lZGlhL2xpYm1lZGlhL2FpZGwvYW5kcm9pZC9tZWRpYS9JTWVkaWFVcGRhdGVTZXJ2aWNlLmFpZGwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDc3Nzk2OQotLS0gL2Rldi9udWxsCisrKyBiL21lZGlhL2xpYm1lZGlhL2FpZGwvYW5kcm9pZC9tZWRpYS9JTWVkaWFVcGRhdGVTZXJ2aWNlLmFpZGwKQEAgLTAsMCArMSwyNSBAQAorLyoKKyAqIENvcHlyaWdodCAyMDE4IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KKworcGFja2FnZSBhbmRyb2lkLm1lZGlhOworCisvKioKKyAqIFNlcnZpY2UgdG8gcmVsb2FkIG1lZGlhIGNvbXBvbmVudCBwbHVnaW5zIHdoZW4gdXBkYXRlIHBhY2thZ2UgaXMgaW5zdGFsbGVkL3VuaW5zdGFsbGVkLgorICogQGhpZGUKKyAqLworaW50ZXJmYWNlIElNZWRpYVVwZGF0ZVNlcnZpY2UgeworICAgIHZvaWQgbG9hZFBsdWdpbnMoQHV0ZjhJbkNwcCBTdHJpbmcgYXBrUGF0aCk7Cit9CmRpZmYgLS1naXQgYS9tZWRpYS9saWJtZWRpYS9pbmNsdWRlL21lZGlhL0RhdGFTb3VyY2VEZXNjLmggYi9tZWRpYS9saWJtZWRpYS9pbmNsdWRlL21lZGlhL0RhdGFTb3VyY2VEZXNjLmgKaW5kZXggYzE5MDI2MS4uNDMzNjc2NyAxMDA2NDQKLS0tIGEvbWVkaWEvbGlibWVkaWEvaW5jbHVkZS9tZWRpYS9EYXRhU291cmNlRGVzYy5oCisrKyBiL21lZGlhL2xpYm1lZGlhL2luY2x1ZGUvbWVkaWEvRGF0YVNvdXJjZURlc2MuaApAQCAtMzAsNiArMzAsMTEgQEAKIC8vIEEgYmluZGVyIGludGVyZmFjZSBmb3IgaW1wbGVtZW50aW5nIGEgc3RhZ2VmcmlnaHQgRGF0YVNvdXJjZSByZW1vdGVseS4KIHN0cnVjdCBEYXRhU291cmNlRGVzYyA6IHB1YmxpYyBSZWZCYXNlIHsKIHB1YmxpYzoKKyAgICAvLyBpbnRlbnRpb25hbGx5IGxlc3MgdGhhbiBJTlQ2NF9NQVgKKyAgICAvLyBrZWVwIGNvbnNpc3RlbnQgd2l0aCBKQVZBIGNvZGUKKyAgICBzdGF0aWMgY29uc3QgaW50NjRfdCBrTWF4VGltZU1zID0gMHg3ZmZmZmZmZmZmZmZmZmZsbCAvIDEwMDA7CisgICAgc3RhdGljIGNvbnN0IGludDY0X3Qga01heFRpbWVVcyA9IGtNYXhUaW1lTXMgKiAxMDAwOworCiAgICAgZW51bSB7CiAgICAgICAgIC8qIE5vIGRhdGEgc291cmNlIGhhcyBiZWVuIHNldCB5ZXQgKi8KICAgICAgICAgVFlQRV9OT05FICAgICA9IDAsCmRpZmYgLS1naXQgYS9tZWRpYS9saWJtZWRpYS9pbmNsdWRlL21lZGlhL0RybUhhbC5oIGIvbWVkaWEvbGlibWVkaWEvaW5jbHVkZS9tZWRpYS9Ecm1IYWwuaAppbmRleCBmMjY3Zjc2Li4zMzAyOTgyIDEwMDY0NAotLS0gYS9tZWRpYS9saWJtZWRpYS9pbmNsdWRlL21lZGlhL0RybUhhbC5oCisrKyBiL21lZGlhL2xpYm1lZGlhL2luY2x1ZGUvbWVkaWEvRHJtSGFsLmgKQEAgLTIzLDYgKzIzLDggQEAKICNpbmNsdWRlIDxhbmRyb2lkL2hhcmR3YXJlL2RybS8xLjAvSURybVBsdWdpbkxpc3RlbmVyLmg+CiAjaW5jbHVkZSA8YW5kcm9pZC9oYXJkd2FyZS9kcm0vMS4xL0lEcm1GYWN0b3J5Lmg+CiAjaW5jbHVkZSA8YW5kcm9pZC9oYXJkd2FyZS9kcm0vMS4xL0lEcm1QbHVnaW4uaD4KKyNpbmNsdWRlIDxhbmRyb2lkL2hhcmR3YXJlL2RybS8xLjIvSURybUZhY3RvcnkuaD4KKyNpbmNsdWRlIDxhbmRyb2lkL2hhcmR3YXJlL2RybS8xLjIvSURybVBsdWdpbi5oPgogCiAjaW5jbHVkZSA8bWVkaWEvTWVkaWFBbmFseXRpY3NJdGVtLmg+CiAjaW5jbHVkZSA8bWVkaWFkcm0vRHJtTWV0cmljcy5oPgpAQCAtMzYsNiArMzgsNyBAQAogdXNpbmcgZHJtOjpWMV8wOjpJRHJtUGx1Z2luOwogdXNpbmcgZHJtOjpWMV8wOjpJRHJtUGx1Z2luTGlzdGVuZXI7CiB1c2luZyBkcm06OlYxXzA6OktleVN0YXR1czsKK3VzaW5nIGRybTo6VjFfMjo6T2ZmbGluZUxpY2Vuc2VTdGF0ZTsKIHVzaW5nIDo6YW5kcm9pZDo6aGFyZHdhcmU6OmhpZGxfdmVjOwogdXNpbmcgOjphbmRyb2lkOjpoYXJkd2FyZTo6UmV0dXJuOwogdXNpbmcgOjphbmRyb2lkOjpoYXJkd2FyZTo6Vm9pZDsKQEAgLTExMyw2ICsxMTYsMTEgQEAKICAgICB2aXJ0dWFsIHN0YXR1c190IGdldFNlY3VyaXR5TGV2ZWwoVmVjdG9yPHVpbnQ4X3Q+IGNvbnN0ICZzZXNzaW9uSWQsCiAgICAgICAgICAgICBEcm1QbHVnaW46OlNlY3VyaXR5TGV2ZWwgKmxldmVsKSBjb25zdDsKIAorICAgIHZpcnR1YWwgc3RhdHVzX3QgZ2V0T2ZmbGluZUxpY2Vuc2VLZXlTZXRJZHMoTGlzdDxWZWN0b3I8dWludDhfdD4+ICZrZXlTZXRJZHMpIGNvbnN0OworICAgIHZpcnR1YWwgc3RhdHVzX3QgcmVtb3ZlT2ZmbGluZUxpY2Vuc2UoVmVjdG9yPHVpbnQ4X3Q+IGNvbnN0ICZrZXlTZXRJZCk7CisgICAgdmlydHVhbCBzdGF0dXNfdCBnZXRPZmZsaW5lTGljZW5zZVN0YXRlKFZlY3Rvcjx1aW50OF90PiBjb25zdCAma2V5U2V0SWQsCisgICAgICAgICAgICBEcm1QbHVnaW46Ok9mZmxpbmVMaWNlbnNlU3RhdGUgKmxpY2Vuc2VTdGF0ZSkgY29uc3Q7CisKICAgICB2aXJ0dWFsIHN0YXR1c190IGdldFByb3BlcnR5U3RyaW5nKFN0cmluZzggY29uc3QgJm5hbWUsIFN0cmluZzggJnZhbHVlICkgY29uc3Q7CiAgICAgdmlydHVhbCBzdGF0dXNfdCBnZXRQcm9wZXJ0eUJ5dGVBcnJheShTdHJpbmc4IGNvbnN0ICZuYW1lLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVmVjdG9yPHVpbnQ4X3Q+ICZ2YWx1ZSApIGNvbnN0OwpAQCAtMTgyLDYgKzE5MCw3IEBACiAgICAgY29uc3QgVmVjdG9yPHNwPElEcm1GYWN0b3J5Pj4gbUZhY3RvcmllczsKICAgICBzcDxJRHJtUGx1Z2luPiBtUGx1Z2luOwogICAgIHNwPGRybTo6VjFfMTo6SURybVBsdWdpbj4gbVBsdWdpblYxXzE7CisgICAgc3A8ZHJtOjpWMV8yOjpJRHJtUGx1Z2luPiBtUGx1Z2luVjFfMjsKICAgICBTdHJpbmc4IG1BcHBQYWNrYWdlTmFtZTsKIAogICAgIC8vIE11dGFibGUgdG8gYWxsb3cgbW9kaWZpY2F0aW9uIHdpdGhpbiBHZXRQcm9wZXJ0eUJ5dGVBcnJheS4KZGlmZiAtLWdpdCBhL21lZGlhL2xpYm1lZGlhL2luY2x1ZGUvbWVkaWEvSURybS5oIGIvbWVkaWEvbGlibWVkaWEvaW5jbHVkZS9tZWRpYS9JRHJtLmgKaW5kZXggOGU5ZWIzYS4uNDkxNjZjNiAxMDA2NDQKLS0tIGEvbWVkaWEvbGlibWVkaWEvaW5jbHVkZS9tZWRpYS9JRHJtLmgKKysrIGIvbWVkaWEvbGlibWVkaWEvaW5jbHVkZS9tZWRpYS9JRHJtLmgKQEAgLTc1LDggKzc1LDggQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBWZWN0b3I8dWludDhfdD4gJmNlcnRpZmljYXRlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFZlY3Rvcjx1aW50OF90PiAmd3JhcHBlZEtleSkgPSAwOwogCi0gICAgdmlydHVhbCBzdGF0dXNfdCBnZXRTZWN1cmVTdG9wcyhMaXN0PFZlY3Rvcjx1aW50OF90PiA+ICZzZWN1cmVTdG9wcykgPSAwOwotICAgIHZpcnR1YWwgc3RhdHVzX3QgZ2V0U2VjdXJlU3RvcElkcyhMaXN0PFZlY3Rvcjx1aW50OF90PiA+ICZzZWN1cmVTdG9wSWRzKSA9IDA7CisgICAgdmlydHVhbCBzdGF0dXNfdCBnZXRTZWN1cmVTdG9wcyhMaXN0PFZlY3Rvcjx1aW50OF90Pj4gJnNlY3VyZVN0b3BzKSA9IDA7CisgICAgdmlydHVhbCBzdGF0dXNfdCBnZXRTZWN1cmVTdG9wSWRzKExpc3Q8VmVjdG9yPHVpbnQ4X3Q+PiAmc2VjdXJlU3RvcElkcykgPSAwOwogICAgIHZpcnR1YWwgc3RhdHVzX3QgZ2V0U2VjdXJlU3RvcChWZWN0b3I8dWludDhfdD4gY29uc3QgJnNzaWQsIFZlY3Rvcjx1aW50OF90PiAmc2VjdXJlU3RvcCkgPSAwOwogCiAgICAgdmlydHVhbCBzdGF0dXNfdCByZWxlYXNlU2VjdXJlU3RvcHMoVmVjdG9yPHVpbnQ4X3Q+IGNvbnN0ICZzc1JlbGVhc2UpID0gMDsKQEAgLTkxLDYgKzkxLDExIEBACiAgICAgdmlydHVhbCBzdGF0dXNfdCBnZXRTZWN1cml0eUxldmVsKFZlY3Rvcjx1aW50OF90PiBjb25zdCAmc2Vzc2lvbklkLAogICAgICAgICAgICAgRHJtUGx1Z2luOjpTZWN1cml0eUxldmVsICpsZXZlbCkgY29uc3QgPSAwOwogCisgICAgdmlydHVhbCBzdGF0dXNfdCBnZXRPZmZsaW5lTGljZW5zZUtleVNldElkcyhMaXN0PFZlY3Rvcjx1aW50OF90Pj4gJmtleVNldElkcykgY29uc3QgPSAwOworICAgIHZpcnR1YWwgc3RhdHVzX3QgcmVtb3ZlT2ZmbGluZUxpY2Vuc2UoVmVjdG9yPHVpbnQ4X3Q+IGNvbnN0ICZrZXlTZXRJZCkgPSAwOworICAgIHZpcnR1YWwgc3RhdHVzX3QgZ2V0T2ZmbGluZUxpY2Vuc2VTdGF0ZShWZWN0b3I8dWludDhfdD4gY29uc3QgJmtleVNldElkLAorICAgICAgICAgICAgRHJtUGx1Z2luOjpPZmZsaW5lTGljZW5zZVN0YXRlICpsaWNlbnNlU3RhdGUpIGNvbnN0ID0gMDsKKwogICAgIHZpcnR1YWwgc3RhdHVzX3QgZ2V0UHJvcGVydHlTdHJpbmcoU3RyaW5nOCBjb25zdCAmbmFtZSwgU3RyaW5nOCAmdmFsdWUpIGNvbnN0ID0gMDsKICAgICB2aXJ0dWFsIHN0YXR1c190IGdldFByb3BlcnR5Qnl0ZUFycmF5KFN0cmluZzggY29uc3QgJm5hbWUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBWZWN0b3I8dWludDhfdD4gJnZhbHVlKSBjb25zdCA9IDA7CmRpZmYgLS1naXQgYS9tZWRpYS9saWJtZWRpYS9pbmNsdWRlL21lZGlhL0lNZWRpYVBsYXllclNlcnZpY2UuaCBiL21lZGlhL2xpYm1lZGlhL2luY2x1ZGUvbWVkaWEvSU1lZGlhUGxheWVyU2VydmljZS5oCmluZGV4IDIxN2RlMTQuLmYyZTIwNjAgMTAwNjQ0Ci0tLSBhL21lZGlhL2xpYm1lZGlhL2luY2x1ZGUvbWVkaWEvSU1lZGlhUGxheWVyU2VydmljZS5oCisrKyBiL21lZGlhL2xpYm1lZGlhL2luY2x1ZGUvbWVkaWEvSU1lZGlhUGxheWVyU2VydmljZS5oCkBAIC0yNiwxMSArMjYsMTEgQEAKICNpbmNsdWRlIDxzeXN0ZW0vYXVkaW8uaD4KIAogI2luY2x1ZGUgPG1lZGlhL0lNZWRpYVBsYXllckNsaWVudC5oPgotI2luY2x1ZGUgPG1lZGlhL0lNZWRpYVBsYXllci5oPgogI2luY2x1ZGUgPG1lZGlhL0lNZWRpYU1ldGFkYXRhUmV0cmlldmVyLmg+CiAKIG5hbWVzcGFjZSBhbmRyb2lkIHsKIAorY2xhc3MgSU1lZGlhUGxheWVyOwogY2xhc3MgSU1lZGlhQ29kZWNMaXN0Owogc3RydWN0IElNZWRpYUhUVFBTZXJ2aWNlOwogY2xhc3MgSU1lZGlhUmVjb3JkZXI7CmRpZmYgLS1naXQgYS9tZWRpYS9saWJtZWRpYS9pbmNsdWRlL21lZGlhL0pBdWRpb0F0dHJpYnV0ZXMuaCBiL21lZGlhL2xpYm1lZGlhL2luY2x1ZGUvbWVkaWEvSkF1ZGlvQXR0cmlidXRlcy5oCmluZGV4IGZiMTE0MzUuLmVhMGFhYTMgMTAwNjQ0Ci0tLSBhL21lZGlhL2xpYm1lZGlhL2luY2x1ZGUvbWVkaWEvSkF1ZGlvQXR0cmlidXRlcy5oCisrKyBiL21lZGlhL2xpYm1lZGlhL2luY2x1ZGUvbWVkaWEvSkF1ZGlvQXR0cmlidXRlcy5oCkBAIC0yNiw4ICsyNiw3IEBACiBwdWJsaWM6CiAgICAgLyogQ3JlYXRlcyBhIEphdmEgQXVkaW9BdHRyaWJ1dGVzIG9iamVjdC4gKi8KICAgICBzdGF0aWMgam9iamVjdCBjcmVhdGVBdWRpb0F0dHJpYnV0ZXNPYmooSk5JRW52ICplbnYsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGF1ZGlvX2F0dHJpYnV0ZXNfdCogcEF0dHJpYnV0ZXMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF1ZGlvX3N0cmVhbV90eXBlX3Qgc3RyZWFtVHlwZSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBhdWRpb19hdHRyaWJ1dGVzX3QqIHBBdHRyaWJ1dGVzKSB7CiAKICAgICAgICAgamNsYXNzIGpCdWlsZGVyQ2xzID0gZW52LT5GaW5kQ2xhc3MoImFuZHJvaWQvbWVkaWEvQXVkaW9BdHRyaWJ1dGVzJEJ1aWxkZXIiKTsKICAgICAgICAgam1ldGhvZElEIGpCdWlsZGVyQ3RvciA9IGVudi0+R2V0TWV0aG9kSUQoakJ1aWxkZXJDbHMsICI8aW5pdD4iLCAiKClWIik7CkBAIC01OCwxMSArNTcsNiBAQAogICAgICAgICAgICAgLy8gVE9ETzogSGFuZGxlIHRoZSAndGFncycgKGNoYXJbXSB0byBIYXNoU2V0PFN0cmluZz4pLgogICAgICAgICAgICAgLy8gSG93IHRvIHBhcnNlIHRoZSBjaGFyW10/IElzIHRoZXJlIGFueSBleGFtcGxlIG9mIGl0PwogICAgICAgICAgICAgLy8gQWxzbywgdGhlIGFkZFRhZ3MoKSBtZXRob2QgaXMgaGlkZGVuLgotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgLy8gQ2FsbCBBdWRpb0F0dHJpYnV0ZXMuQnVpbGRlci5zZXRMZWdhY3lTdHJlYW1UeXBlKCkuYnVpbGQoKQotICAgICAgICAgICAgam1ldGhvZElEIGpTZXRMZWdhY3lTdHJlYW1UeXBlID0gZW52LT5HZXRNZXRob2RJRChqQnVpbGRlckNscywgInNldExlZ2FjeVN0cmVhbVR5cGUiLAotICAgICAgICAgICAgICAgICAgICAiKEkpTGFuZHJvaWQvbWVkaWEvQXVkaW9BdHRyaWJ1dGVzJEJ1aWxkZXI7Iik7Ci0gICAgICAgICAgICBqQnVpbGRlck9iaiA9IGVudi0+Q2FsbE9iamVjdE1ldGhvZChqQnVpbGRlck9iaiwgalNldExlZ2FjeVN0cmVhbVR5cGUsIHN0cmVhbVR5cGUpOwogICAgICAgICB9CiAKICAgICAgICAgam1ldGhvZElEIGpCdWlsZCA9IGVudi0+R2V0TWV0aG9kSUQoakJ1aWxkZXJDbHMsICJidWlsZCIsCmRpZmYgLS1naXQgYS9tZWRpYS9saWJtZWRpYS9pbmNsdWRlL21lZGlhL01pZGlJb1dyYXBwZXIuaCBiL21lZGlhL2xpYm1lZGlhL2luY2x1ZGUvbWVkaWEvTWlkaUlvV3JhcHBlci5oCmluZGV4IGI1ZTU2NWUuLjYzMDlkZGEgMTAwNjQ0Ci0tLSBhL21lZGlhL2xpYm1lZGlhL2luY2x1ZGUvbWVkaWEvTWlkaUlvV3JhcHBlci5oCisrKyBiL21lZGlhL2xpYm1lZGlhL2luY2x1ZGUvbWVkaWEvTWlkaUlvV3JhcHBlci5oCkBAIC0yMywxMSArMjMsMTQgQEAKIAogbmFtZXNwYWNlIGFuZHJvaWQgewogCitzdHJ1Y3QgQ0RhdGFTb3VyY2U7CisKIGNsYXNzIE1pZGlJb1dyYXBwZXIgewogcHVibGljOgogICAgIGV4cGxpY2l0IE1pZGlJb1dyYXBwZXIoY29uc3QgY2hhciAqcGF0aCk7CiAgICAgZXhwbGljaXQgTWlkaUlvV3JhcHBlcihpbnQgZmQsIG9mZjY0X3Qgb2Zmc2V0LCBpbnQ2NF90IHNpemUpOwogICAgIGV4cGxpY2l0IE1pZGlJb1dyYXBwZXIoRGF0YVNvdXJjZUJhc2UgKnNvdXJjZSk7CisgICAgZXhwbGljaXQgTWlkaUlvV3JhcHBlcihDRGF0YVNvdXJjZSAqY3NvdXJjZSk7CiAKICAgICB+TWlkaUlvV3JhcHBlcigpOwogCmRpZmYgLS1naXQgYS9tZWRpYS9saWJtZWRpYS9pbmNsdWRlL21lZGlhL05ka1dyYXBwZXIuaCBiL21lZGlhL2xpYm1lZGlhL2luY2x1ZGUvbWVkaWEvTmRrV3JhcHBlci5oCmluZGV4IGM5N2QxNzEuLjhhNDE3ZjYgMTAwNjQ0Ci0tLSBhL21lZGlhL2xpYm1lZGlhL2luY2x1ZGUvbWVkaWEvTmRrV3JhcHBlci5oCisrKyBiL21lZGlhL2xpYm1lZGlhL2luY2x1ZGUvbWVkaWEvTmRrV3JhcHBlci5oCkBAIC0yNzgsNiArMjc4LDI1IEBACiAgICAgRElTQUxMT1dfRVZJTF9DT05TVFJVQ1RPUlMoQU1lZGlhQ29kZWNXcmFwcGVyKTsKIH07CiAKK3N0cnVjdCBBTWVkaWFEYXRhU291cmNlV3JhcHBlciA6IHB1YmxpYyBSZWZCYXNlIHsKKworICAgIEFNZWRpYURhdGFTb3VyY2VXcmFwcGVyKGNvbnN0IHNwPERhdGFTb3VyY2U+Jik7CisgICAgQU1lZGlhRGF0YVNvdXJjZVdyYXBwZXIoQU1lZGlhRGF0YVNvdXJjZSopOworCisgICAgQU1lZGlhRGF0YVNvdXJjZSAqZ2V0QU1lZGlhRGF0YVNvdXJjZSgpOworCisgICAgdm9pZCBjbG9zZSgpOworCitwcm90ZWN0ZWQ6CisgICAgdmlydHVhbCB+QU1lZGlhRGF0YVNvdXJjZVdyYXBwZXIoKTsKKworcHJpdmF0ZToKKyAgICBzcDxEYXRhU291cmNlPiBtRGF0YVNvdXJjZTsKKyAgICBBTWVkaWFEYXRhU291cmNlICptQU1lZGlhRGF0YVNvdXJjZTsKKworICAgIERJU0FMTE9XX0VWSUxfQ09OU1RSVUNUT1JTKEFNZWRpYURhdGFTb3VyY2VXcmFwcGVyKTsKK307CisKIHN0cnVjdCBBTWVkaWFFeHRyYWN0b3JXcmFwcGVyIDogcHVibGljIFJlZkJhc2UgewogCiAgICAgQU1lZGlhRXh0cmFjdG9yV3JhcHBlcihBTWVkaWFFeHRyYWN0b3IgKmFNZWRpYUV4dHJhY3Rvcik7CkBAIC0yODcsOCArMzA2LDYgQEAKIAogICAgIHN0YXR1c190IHJlbGVhc2UoKTsKIAotICAgIHN0YXR1c190IGRpc2Nvbm5lY3QoKTsKLQogICAgIHN0YXR1c190IHNldERhdGFTb3VyY2UoaW50IGZkLCBvZmY2NF90IG9mZnNldCwgb2ZmNjRfdCBsZW5ndGgpOwogCiAgICAgc3RhdHVzX3Qgc2V0RGF0YVNvdXJjZShjb25zdCBjaGFyICpsb2NhdGlvbik7CkBAIC0zMzksMzEgKzM1Niw2IEBACiAgICAgRElTQUxMT1dfRVZJTF9DT05TVFJVQ1RPUlMoQU1lZGlhRXh0cmFjdG9yV3JhcHBlcik7CiB9OwogCi1zdHJ1Y3QgQU1lZGlhRGF0YVNvdXJjZVdyYXBwZXIgOiBwdWJsaWMgUmVmQmFzZSB7Ci0KLSAgICBzdGF0aWMgc3RhdHVzX3QgdHJhbnNsYXRlX2Vycm9yKG1lZGlhX3N0YXR1c190IGVycik7Ci0KLSAgICBzdGF0aWMgc3NpemVfdCBBTWVkaWFEYXRhU291cmNlV3JhcHBlcl9nZXRTaXplKHZvaWQgKnVzZXJkYXRhKTsKLQotICAgIHN0YXRpYyBzc2l6ZV90IEFNZWRpYURhdGFTb3VyY2VXcmFwcGVyX3JlYWRBdCh2b2lkICp1c2VyZGF0YSwgb2ZmNjRfdCBvZmZzZXQsIHZvaWQgKiBidWYsIHNpemVfdCBzaXplKTsKLQotICAgIHN0YXRpYyB2b2lkIEFNZWRpYURhdGFTb3VyY2VXcmFwcGVyX2Nsb3NlKHZvaWQgKnVzZXJkYXRhKTsKLQotICAgIEFNZWRpYURhdGFTb3VyY2VXcmFwcGVyKGNvbnN0IHNwPERhdGFTb3VyY2U+ICZkYXRhU291cmNlKTsKLQotICAgIEFNZWRpYURhdGFTb3VyY2UgKmdldEFNZWRpYURhdGFTb3VyY2UoKTsKLQotcHJvdGVjdGVkOgotICAgIHZpcnR1YWwgfkFNZWRpYURhdGFTb3VyY2VXcmFwcGVyKCk7Ci0KLXByaXZhdGU6Ci0gICAgc3A8RGF0YVNvdXJjZT4gbURhdGFTb3VyY2U7Ci0KLSAgICBBTWVkaWFEYXRhU291cmNlICptQU1lZGlhRGF0YVNvdXJjZTsKLQotICAgIERJU0FMTE9XX0VWSUxfQ09OU1RSVUNUT1JTKEFNZWRpYURhdGFTb3VyY2VXcmFwcGVyKTsKLX07Ci0KIH0gIC8vIG5hbWVzcGFjZSBhbmRyb2lkCiAKICNlbmRpZiAgLy8gTkRLX1dSQVBQRVJfSF8KZGlmZiAtLWdpdCBhL21lZGlhL2xpYm1lZGlhL2luY2x1ZGUvbWVkaWEvUGF0Y2hCdWlsZGVyLmggYi9tZWRpYS9saWJtZWRpYS9pbmNsdWRlL21lZGlhL1BhdGNoQnVpbGRlci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYyNzIyYTYKLS0tIC9kZXYvbnVsbAorKysgYi9tZWRpYS9saWJtZWRpYS9pbmNsdWRlL21lZGlhL1BhdGNoQnVpbGRlci5oCkBAIC0wLDAgKzEsMTAzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE4IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KKworI2lmbmRlZiBBTkRST0lEX1BBVENIX0JVSUxERVJfSAorI2RlZmluZSBBTkRST0lEX1BBVENIX0JVSUxERVJfSAorCisjaW5jbHVkZSA8ZnVuY3Rpb25hbD4KKyNpbmNsdWRlIDx1dGlsaXR5PgorCisjaW5jbHVkZSA8c3lzdGVtL2F1ZGlvLmg+CisjaW5jbHVkZSA8dXRpbHMvU3Ryb25nUG9pbnRlci5oPgorCisvLyBUaGlzIGlzIGEgaGVhZGVyLW9ubHkgdXRpbGl0eS4KKworbmFtZXNwYWNlIGFuZHJvaWQgeworCitjbGFzcyBQYXRjaEJ1aWxkZXIgeworICBwdWJsaWM6CisgICAgdXNpbmcgbWl4X3VzZWNhc2VfdCA9IGRlY2x0eXBlKGF1ZGlvX3BvcnRfY29uZmlnX21peF9leHQ6OnVzZWNhc2UpOworCisgICAgUGF0Y2hCdWlsZGVyKCkgPSBkZWZhdWx0OworCisgICAgLy8gQWxsIGV4aXN0aW5nIG1ldGhvZHMgb3BlcmF0aW5nIG9uIGF1ZGlvIHBhdGNoZXMgdGFrZSBhIHBvaW50ZXIgdG8gY29uc3QuCisgICAgLy8gSXQncyBPSyB0byBjb25zdHJ1Y3QgYSB0ZW1wb3JhcnkgUGF0Y2hCdWlsZGVyIHdoaWxlIHByZXBhcmluZyBhIHBhcmFtZXRlcgorICAgIC8vIHRvIHN1Y2ggYSBmdW5jdGlvbiBiZWNhdXNlIHRoZSBCdWlsZGVyIHdpbGwgYmUga2VwdCBhbGl2ZSB1bnRpbCB0aGUgY29kZQorICAgIC8vIGV4ZWN1dGlvbiByZWFjaGVzIHRoZSBmdW5jdGlvbiBjYWxsIHN0YXRlbWVudCBzZW1pY29sb24uCisgICAgY29uc3Qgc3RydWN0IGF1ZGlvX3BhdGNoKiBwYXRjaCgpIGNvbnN0IHsgcmV0dXJuICZtUGF0Y2g7IH0KKworICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lLi4uIFM+CisgICAgUGF0Y2hCdWlsZGVyJiBhZGRTaW5rKFQmJiB0LCBTJiYuLi4gcykgeworICAgICAgICBzaW5rcygpLmFkZChzdGQ6OmZvcndhcmQ8VD4odCksIHN0ZDo6Zm9yd2FyZDxTPihzKS4uLik7CisgICAgICAgIHJldHVybiAqdGhpczsKKyAgICB9CisgICAgLy8gRXhwbGljaXQgdHlwZSBvZiB0aGUgc2Vjb25kIHBhcmFtZXRlciBhbGxvd3MgY2xpZW50cyB0byBwcm92aWRlIHRoZSBzdHJ1Y3QgaW5saW5lLgorICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+CisgICAgUGF0Y2hCdWlsZGVyJiBhZGRTaW5rKFQmJiB0LCBjb25zdCBtaXhfdXNlY2FzZV90JiB1cGRhdGUpIHsKKyAgICAgICAgc2lua3MoKS5hZGQoc3RkOjpmb3J3YXJkPFQ+KHQpLCB1cGRhdGUpOworICAgICAgICByZXR1cm4gKnRoaXM7CisgICAgfQorICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lLi4uIFM+CisgICAgUGF0Y2hCdWlsZGVyJiBhZGRTb3VyY2UoVCYmIHQsIFMmJi4uLiBzKSB7CisgICAgICAgIHNvdXJjZXMoKS5hZGQoc3RkOjpmb3J3YXJkPFQ+KHQpLCBzdGQ6OmZvcndhcmQ8Uz4ocykuLi4pOworICAgICAgICByZXR1cm4gKnRoaXM7CisgICAgfQorICAgIC8vIEV4cGxpY2l0IHR5cGUgb2YgdGhlIHNlY29uZCBwYXJhbWV0ZXIgYWxsb3dzIGNsaWVudHMgdG8gcHJvdmlkZSB0aGUgc3RydWN0IGlubGluZS4KKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgorICAgIFBhdGNoQnVpbGRlciYgYWRkU291cmNlKFQmJiB0LCBjb25zdCBtaXhfdXNlY2FzZV90JiB1cGRhdGUpIHsKKyAgICAgICAgc291cmNlcygpLmFkZChzdGQ6OmZvcndhcmQ8VD4odCksIHVwZGF0ZSk7CisgICAgICAgIHJldHVybiAqdGhpczsKKyAgICB9CisKKyAgcHJpdmF0ZToKKyAgICBzdHJ1Y3QgUG9ydENmZ3MgeworICAgICAgICBQb3J0Q2Zncyh1bnNpZ25lZCBpbnQgKmNvdW50UHRyLCBzdHJ1Y3QgYXVkaW9fcG9ydF9jb25maWcgKnBvcnRDZmdzKQorICAgICAgICAgICAgICAgIDogbUNvdW50UHRyKGNvdW50UHRyKSwgbVBvcnRDZmdzKHBvcnRDZmdzKSB7fQorICAgICAgICBhdWRpb19wb3J0X2NvbmZpZyYgYWRkKGNvbnN0IGF1ZGlvX3BvcnRfY29uZmlnJiBwb3J0Q2ZnKSB7CisgICAgICAgICAgICByZXR1cm4gKmFkdmFuY2UoKSA9IHBvcnRDZmc7CisgICAgICAgIH0KKyAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4KKyAgICAgICAgYXVkaW9fcG9ydF9jb25maWcmIGFkZChjb25zdCBzcDxUPiYgZW50aXR5KSB7CisgICAgICAgICAgICBhdWRpb19wb3J0X2NvbmZpZyogYWRkZWQgPSBhZHZhbmNlKCk7CisgICAgICAgICAgICBlbnRpdHktPnRvQXVkaW9Qb3J0Q29uZmlnKGFkZGVkKTsKKyAgICAgICAgICAgIHJldHVybiAqYWRkZWQ7CisgICAgICAgIH0KKyAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4KKyAgICAgICAgdm9pZCBhZGQoY29uc3Qgc3A8VD4mIGVudGl0eSwgY29uc3QgbWl4X3VzZWNhc2VfdCYgdXNlY2FzZVVwZGF0ZSkgeworICAgICAgICAgICAgYWRkKGVudGl0eSkuZXh0Lm1peC51c2VjYXNlID0gdXNlY2FzZVVwZGF0ZTsKKyAgICAgICAgfQorICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgorICAgICAgICB2b2lkIGFkZChjb25zdCBzcDxUPiYgZW50aXR5LAorICAgICAgICAgICAgICAgIHN0ZDo6ZnVuY3Rpb248bWl4X3VzZWNhc2VfdChjb25zdCBtaXhfdXNlY2FzZV90Jik+IHVzZWNhc2VVcGRhdGVyKSB7CisgICAgICAgICAgICBtaXhfdXNlY2FzZV90KiB1c2VjYXNlID0gJmFkZChlbnRpdHkpLmV4dC5taXgudXNlY2FzZTsKKyAgICAgICAgICAgICp1c2VjYXNlID0gdXNlY2FzZVVwZGF0ZXIoKnVzZWNhc2UpOworICAgICAgICB9CisgICAgICAgIHN0cnVjdCBhdWRpb19wb3J0X2NvbmZpZyogYWR2YW5jZSgpIHsKKyAgICAgICAgICAgIHJldHVybiAmbVBvcnRDZmdzWygqbUNvdW50UHRyKSsrXTsKKyAgICAgICAgfQorICAgICAgICB1bnNpZ25lZCBpbnQgKm1Db3VudFB0cjsKKyAgICAgICAgc3RydWN0IGF1ZGlvX3BvcnRfY29uZmlnICptUG9ydENmZ3M7CisgICAgfTsKKworICAgIFBvcnRDZmdzIHNpbmtzKCkgeyByZXR1cm4gUG9ydENmZ3MoJm1QYXRjaC5udW1fc2lua3MsIG1QYXRjaC5zaW5rcyk7IH0KKyAgICBQb3J0Q2ZncyBzb3VyY2VzKCkgeyByZXR1cm4gUG9ydENmZ3MoJm1QYXRjaC5udW1fc291cmNlcywgbVBhdGNoLnNvdXJjZXMpOyB9CisKKyAgICBzdHJ1Y3QgYXVkaW9fcGF0Y2ggbVBhdGNoID0ge307Cit9OworCit9ICAvLyBuYW1lc3BhY2UgYW5kcm9pZAorCisjZW5kaWYgIC8vIEFORFJPSURfUEFUQ0hfQlVJTERFUl9ICmRpZmYgLS1naXQgYS9tZWRpYS9saWJtZWRpYS9pbmNsdWRlL21lZGlhL1NpbmdsZVN0YXRlUXVldWUuaCBiL21lZGlhL2xpYm1lZGlhL2luY2x1ZGUvbWVkaWEvU2luZ2xlU3RhdGVRdWV1ZS5oCmluZGV4IGQ0MjM5NjIuLmMyNzYxY2IgMTAwNjQ0Ci0tLSBhL21lZGlhL2xpYm1lZGlhL2luY2x1ZGUvbWVkaWEvU2luZ2xlU3RhdGVRdWV1ZS5oCisrKyBiL21lZGlhL2xpYm1lZGlhL2luY2x1ZGUvbWVkaWEvU2luZ2xlU3RhdGVRdWV1ZS5oCkBAIC05OSw2ICs5OSwxMyBAQAogICAgICAgICAgICAgcmV0dXJuIG1TaGFyZWQtPm1BY2sgLSBzZXF1ZW5jZSA+PSAwOwogICAgICAgICB9CiAKKyAgICAgICAgLy8gcmV0dXJucyB0aGUgbGFzdCB2YWx1ZSB3cml0dGVuIChvciB0aGUgY29udGVudHMgb2YgdGhlIHNoYXJlZCBidWZmZXIgYWZ0ZXIgaW5pdGlhbGl6YXRpb24KKyAgICAgICAgLy8gaWYgbm8gdmFsdWUgd2FzIHdyaXR0ZW4pLgorICAgICAgICBUIGxhc3QoKSBjb25zdAorICAgICAgICB7ICAgLy8gYXNzdW1lIG5vIHNlcXVlbmNlIGNoZWNrIHJlcXVpcmVkIC0gd2UgYXJlIHRoZSB3cml0ZXIuCisgICAgICAgICAgICByZXR1cm4gbVNoYXJlZC0+bVZhbHVlOworICAgICAgICB9CisKICAgICBwcml2YXRlOgogICAgICAgICBpbnQzMl90ICAgICBtU2VxdWVuY2U7CiAgICAgICAgIFNoYXJlZCAqIGNvbnN0IG1TaGFyZWQ7CmRpZmYgLS1naXQgYS9tZWRpYS9saWJtZWRpYWV4dHJhY3Rvci9BbmRyb2lkLmJwIGIvbWVkaWEvbGlibWVkaWFleHRyYWN0b3IvQW5kcm9pZC5icAppbmRleCBiOWI0N2NkLi4wODcxZDYwIDEwMDY0NAotLS0gYS9tZWRpYS9saWJtZWRpYWV4dHJhY3Rvci9BbmRyb2lkLmJwCisrKyBiL21lZGlhL2xpYm1lZGlhZXh0cmFjdG9yL0FuZHJvaWQuYnAKQEAgLTIyLDE3ICsyMiwyMiBAQAogICAgICAgICAibGlibG9nIiwKICAgICBdLAogCisgICAgaGVhZGVyX2xpYnM6IFsKKyAgICAgICAgIm1lZGlhX25ka19oZWFkZXJzIiwKKyAgICBdLAorCisgICAgZXhwb3J0X2hlYWRlcl9saWJfaGVhZGVyczogWworICAgICAgICAibWVkaWFfbmRrX2hlYWRlcnMiLAorICAgIF0sCisKICAgICBzcmNzOiBbCiAgICAgICAgICJEYXRhU291cmNlQmFzZS5jcHAiLAogICAgICAgICAiTWVkaWFCdWZmZXIuY3BwIiwKICAgICAgICAgIk1lZGlhQnVmZmVyQmFzZS5jcHAiLAogICAgICAgICAiTWVkaWFCdWZmZXJHcm91cC5jcHAiLAogICAgICAgICAiTWVkaWFTb3VyY2UuY3BwIiwKLSAgICAgICAgIk1lZGlhVHJhY2suY3BwIiwKLSAgICAgICAgIk1lZGlhRXh0cmFjdG9yLmNwcCIsCiAgICAgICAgICJNZXRhRGF0YS5jcHAiLAogICAgICAgICAiTWV0YURhdGFCYXNlLmNwcCIsCi0gICAgICAgICJWb3JiaXNDb21tZW50LmNwcCIsCiAgICAgXSwKIAogICAgIGNsYW5nOiB0cnVlLApkaWZmIC0tZ2l0IGEvbWVkaWEvbGlibWVkaWFleHRyYWN0b3IvTWVkaWFCdWZmZXJHcm91cC5jcHAgYi9tZWRpYS9saWJtZWRpYWV4dHJhY3Rvci9NZWRpYUJ1ZmZlckdyb3VwLmNwcAppbmRleCAyYThkZDQxLi42MmI4M2NjIDEwMDY0NAotLS0gYS9tZWRpYS9saWJtZWRpYWV4dHJhY3Rvci9NZWRpYUJ1ZmZlckdyb3VwLmNwcAorKysgYi9tZWRpYS9saWJtZWRpYWV4dHJhY3Rvci9NZWRpYUJ1ZmZlckdyb3VwLmNwcApAQCAtMTU3LDExICsxNTcsMTUgQEAKICAgICBNdXRleDo6QXV0b2xvY2sgYXV0b0xvY2sobUludGVybmFsLT5tTG9jayk7CiAgICAgZm9yICg7OykgewogICAgICAgICBzaXplX3Qgc21hbGxlc3QgPSByZXF1ZXN0ZWRTaXplOworICAgICAgICBzaXplX3QgYmlnZ2VzdCA9IHJlcXVlc3RlZFNpemU7CiAgICAgICAgIE1lZGlhQnVmZmVyQmFzZSAqYnVmZmVyID0gbnVsbHB0cjsKICAgICAgICAgYXV0byBmcmVlID0gbUludGVybmFsLT5tQnVmZmVycy5lbmQoKTsKICAgICAgICAgZm9yIChhdXRvIGl0ID0gbUludGVybmFsLT5tQnVmZmVycy5iZWdpbigpOyBpdCAhPSBtSW50ZXJuYWwtPm1CdWZmZXJzLmVuZCgpOyArK2l0KSB7CisgICAgICAgICAgICBjb25zdCBzaXplX3Qgc2l6ZSA9ICgqaXQpLT5zaXplKCk7CisgICAgICAgICAgICBpZiAoc2l6ZSA+IGJpZ2dlc3QpIHsKKyAgICAgICAgICAgICAgICBiaWdnZXN0ID0gc2l6ZTsKKyAgICAgICAgICAgIH0KICAgICAgICAgICAgIGlmICgoKml0KS0+cmVmY291bnQoKSA9PSAwKSB7Ci0gICAgICAgICAgICAgICAgY29uc3Qgc2l6ZV90IHNpemUgPSAoKml0KS0+c2l6ZSgpOwogICAgICAgICAgICAgICAgIGlmIChzaXplID49IHJlcXVlc3RlZFNpemUpIHsKICAgICAgICAgICAgICAgICAgICAgYnVmZmVyID0gKml0OwogICAgICAgICAgICAgICAgICAgICBicmVhazsKQEAgLTE3Niw3ICsxODAsOCBAQAogICAgICAgICAgICAgICAgICYmIChmcmVlICE9IG1JbnRlcm5hbC0+bUJ1ZmZlcnMuZW5kKCkKICAgICAgICAgICAgICAgICAgICAgfHwgbUludGVybmFsLT5tQnVmZmVycy5zaXplKCkgPCBtSW50ZXJuYWwtPm1Hcm93dGhMaW1pdCkpIHsKICAgICAgICAgICAgIC8vIFdlIGFsbG9jIGJlZm9yZSB3ZSBmcmVlIHNvIGZhaWx1cmUgbGVhdmVzIGdyb3VwIHVuY2hhbmdlZC4KLSAgICAgICAgICAgIGNvbnN0IHNpemVfdCBhbGxvY2F0ZVNpemUgPSByZXF1ZXN0ZWRTaXplIDwgU0laRV9NQVggLyAzICogMiAvKiBOQjogb3JkZXJpbmcgKi8gPworICAgICAgICAgICAgY29uc3Qgc2l6ZV90IGFsbG9jYXRlU2l6ZSA9IHJlcXVlc3RlZFNpemUgPT0gMCA/IGJpZ2dlc3QgOgorICAgICAgICAgICAgICAgICAgICByZXF1ZXN0ZWRTaXplIDwgU0laRV9NQVggLyAzICogMiAvKiBOQjogb3JkZXJpbmcgKi8gPwogICAgICAgICAgICAgICAgICAgICByZXF1ZXN0ZWRTaXplICogMyAvIDIgOiByZXF1ZXN0ZWRTaXplOwogICAgICAgICAgICAgYnVmZmVyID0gbmV3IE1lZGlhQnVmZmVyKGFsbG9jYXRlU2l6ZSk7CiAgICAgICAgICAgICBpZiAoYnVmZmVyLT5kYXRhKCkgPT0gbnVsbHB0cikgewpkaWZmIC0tZ2l0IGEvbWVkaWEvbGlibWVkaWFleHRyYWN0b3IvTWVkaWFFeHRyYWN0b3IuY3BwIGIvbWVkaWEvbGlibWVkaWFleHRyYWN0b3IvTWVkaWFFeHRyYWN0b3IuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhNmIzZGM5Li4wMDAwMDAwCi0tLSBhL21lZGlhL2xpYm1lZGlhZXh0cmFjdG9yL01lZGlhRXh0cmFjdG9yLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDQyICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDkgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAotICoKLSAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwotICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgotICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0gKgotICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLSAqCi0gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCi0gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAotICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCi0gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCi0gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KLSAqLwotCi0vLyNkZWZpbmUgTE9HX05ERUJVRyAwCi0jZGVmaW5lIExPR19UQUcgIk1lZGlhRXh0cmFjdG9yIgotI2luY2x1ZGUgPHV0aWxzL0xvZy5oPgotI2luY2x1ZGUgPHB3ZC5oPgotCi0jaW5jbHVkZSA8bWVkaWEvTWVkaWFFeHRyYWN0b3IuaD4KLSNpbmNsdWRlIDxtZWRpYS9zdGFnZWZyaWdodC9mb3VuZGF0aW9uL0FEZWJ1Zy5oPgotI2luY2x1ZGUgPG1lZGlhL3N0YWdlZnJpZ2h0L01ldGFEYXRhLmg+Ci0KLW5hbWVzcGFjZSBhbmRyb2lkIHsKLQotTWVkaWFFeHRyYWN0b3I6Ok1lZGlhRXh0cmFjdG9yKCkgewotICAgIGlmICghTE9HX05ERUJVRykgewotICAgICAgICB1aWRfdCB1aWQgPSBnZXR1aWQoKTsKLSAgICAgICAgc3RydWN0IHBhc3N3ZCAqcHcgPSBnZXRwd3VpZCh1aWQpOwotICAgICAgICBBTE9HVigiZXh0cmFjdG9yIGNyZWF0ZWQgaW4gdWlkOiAlZCAoJXMpIiwgZ2V0dWlkKCksIHB3LT5wd19uYW1lKTsKLSAgICB9Ci19Ci0KLU1lZGlhRXh0cmFjdG9yOjp+TWVkaWFFeHRyYWN0b3IoKSB7fQotCi11aW50MzJfdCBNZWRpYUV4dHJhY3Rvcjo6ZmxhZ3MoKSBjb25zdCB7Ci0gICAgcmV0dXJuIENBTl9TRUVLX0JBQ0tXQVJEIHwgQ0FOX1NFRUtfRk9SV0FSRCB8IENBTl9QQVVTRSB8IENBTl9TRUVLOwotfQotCi19ICAvLyBuYW1lc3BhY2UgYW5kcm9pZApkaWZmIC0tZ2l0IGEvbWVkaWEvbGlibWVkaWFleHRyYWN0b3IvTWVkaWFUcmFjay5jcHAgYi9tZWRpYS9saWJtZWRpYWV4dHJhY3Rvci9NZWRpYVRyYWNrLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDk2M2Y1OC4uMDAwMDAwMAotLS0gYS9tZWRpYS9saWJtZWRpYWV4dHJhY3Rvci9NZWRpYVRyYWNrLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDY4ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDkgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAotICoKLSAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwotICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgotICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0gKgotICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLSAqCi0gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCi0gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAotICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCi0gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCi0gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KLSAqLwotCi0jaW5jbHVkZSA8bWVkaWEvTWVkaWFUcmFjay5oPgotCi1uYW1lc3BhY2UgYW5kcm9pZCB7Ci0KLU1lZGlhVHJhY2s6Ok1lZGlhVHJhY2soKSB7fQotCi1NZWRpYVRyYWNrOjp+TWVkaWFUcmFjaygpIHt9Ci0KLS8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCi0KLU1lZGlhVHJhY2s6OlJlYWRPcHRpb25zOjpSZWFkT3B0aW9ucygpIHsKLSAgICByZXNldCgpOwotfQotCi12b2lkIE1lZGlhVHJhY2s6OlJlYWRPcHRpb25zOjpyZXNldCgpIHsKLSAgICBtT3B0aW9ucyA9IDA7Ci0gICAgbVNlZWtUaW1lVXMgPSAwOwotICAgIG1Ob25CbG9ja2luZyA9IGZhbHNlOwotfQotCi12b2lkIE1lZGlhVHJhY2s6OlJlYWRPcHRpb25zOjpzZXROb25CbG9ja2luZygpIHsKLSAgICBtTm9uQmxvY2tpbmcgPSB0cnVlOwotfQotCi12b2lkIE1lZGlhVHJhY2s6OlJlYWRPcHRpb25zOjpjbGVhck5vbkJsb2NraW5nKCkgewotICAgIG1Ob25CbG9ja2luZyA9IGZhbHNlOwotfQotCi1ib29sIE1lZGlhVHJhY2s6OlJlYWRPcHRpb25zOjpnZXROb25CbG9ja2luZygpIGNvbnN0IHsKLSAgICByZXR1cm4gbU5vbkJsb2NraW5nOwotfQotCi12b2lkIE1lZGlhVHJhY2s6OlJlYWRPcHRpb25zOjpzZXRTZWVrVG8oaW50NjRfdCB0aW1lX3VzLCBTZWVrTW9kZSBtb2RlKSB7Ci0gICAgbU9wdGlvbnMgfD0ga1NlZWtUb19PcHRpb247Ci0gICAgbVNlZWtUaW1lVXMgPSB0aW1lX3VzOwotICAgIG1TZWVrTW9kZSA9IG1vZGU7Ci19Ci0KLXZvaWQgTWVkaWFUcmFjazo6UmVhZE9wdGlvbnM6OmNsZWFyU2Vla1RvKCkgewotICAgIG1PcHRpb25zICY9IH5rU2Vla1RvX09wdGlvbjsKLSAgICBtU2Vla1RpbWVVcyA9IDA7Ci0gICAgbVNlZWtNb2RlID0gU0VFS19DTE9TRVNUX1NZTkM7Ci19Ci0KLWJvb2wgTWVkaWFUcmFjazo6UmVhZE9wdGlvbnM6OmdldFNlZWtUbygKLSAgICAgICAgaW50NjRfdCAqdGltZV91cywgU2Vla01vZGUgKm1vZGUpIGNvbnN0IHsKLSAgICAqdGltZV91cyA9IG1TZWVrVGltZVVzOwotICAgICptb2RlID0gbVNlZWtNb2RlOwotICAgIHJldHVybiAobU9wdGlvbnMgJiBrU2Vla1RvX09wdGlvbikgIT0gMDsKLX0KLQotfSAgLy8gbmFtZXNwYWNlIGFuZHJvaWQKZGlmZiAtLWdpdCBhL21lZGlhL2xpYm1lZGlhZXh0cmFjdG9yL1ZvcmJpc0NvbW1lbnQuY3BwIGIvbWVkaWEvbGlibWVkaWFleHRyYWN0b3IvVm9yYmlzQ29tbWVudC5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGZhYmFmNTEuLjAwMDAwMDAKLS0tIGEvbWVkaWEvbGlibWVkaWFleHRyYWN0b3IvVm9yYmlzQ29tbWVudC5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSwxNTMgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxOCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0Ci0gKgotICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7Ci0gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCi0gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLSAqCi0gKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotICoKLSAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKLSAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCi0gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KLSAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKLSAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgotICovCi0KLS8vI2RlZmluZSBMT0dfTkRFQlVHIDAKLSNkZWZpbmUgTE9HX1RBRyAiVm9yYmlzQ29tbWVudCIKLSNpbmNsdWRlIDx1dGlscy9Mb2cuaD4KLQotI2luY2x1ZGUgIm1lZGlhL1ZvcmJpc0NvbW1lbnQuaCIKLQotI2luY2x1ZGUgPG1lZGlhL3N0YWdlZnJpZ2h0L2ZvdW5kYXRpb24vYmFzZTY0Lmg+Ci0jaW5jbHVkZSA8bWVkaWEvc3RhZ2VmcmlnaHQvZm91bmRhdGlvbi9BQnVmZmVyLmg+Ci0jaW5jbHVkZSA8bWVkaWEvc3RhZ2VmcmlnaHQvZm91bmRhdGlvbi9BU3RyaW5nLmg+Ci0jaW5jbHVkZSA8bWVkaWEvc3RhZ2VmcmlnaHQvZm91bmRhdGlvbi9CeXRlVXRpbHMuaD4KLSNpbmNsdWRlIDxtZWRpYS9zdGFnZWZyaWdodC9NZXRhRGF0YUJhc2UuaD4KLQotbmFtZXNwYWNlIGFuZHJvaWQgewotCi1zdGF0aWMgdm9pZCBleHRyYWN0QWxidW1BcnQoCi0gICAgICAgIE1ldGFEYXRhQmFzZSAqZmlsZU1ldGEsIGNvbnN0IHZvaWQgKmRhdGEsIHNpemVfdCBzaXplKSB7Ci0gICAgQUxPR1YoImV4dHJhY3RBbGJ1bUFydCBmcm9tICclcyciLCAoY29uc3QgY2hhciAqKWRhdGEpOwotCi0gICAgc3A8QUJ1ZmZlcj4gZmxhY0J1ZmZlciA9IGRlY29kZUJhc2U2NChBU3RyaW5nKChjb25zdCBjaGFyICopZGF0YSwgc2l6ZSkpOwotICAgIGlmIChmbGFjQnVmZmVyID09IE5VTEwpIHsKLSAgICAgICAgQUxPR0UoIm1hbGZvcm1lZCBiYXNlNjQgZW5jb2RlZCBkYXRhLiIpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgc2l6ZV90IGZsYWNTaXplID0gZmxhY0J1ZmZlci0+c2l6ZSgpOwotICAgIHVpbnQ4X3QgKmZsYWMgPSBmbGFjQnVmZmVyLT5kYXRhKCk7Ci0gICAgQUxPR1YoImdvdCBmbGFjIG9mIHNpemUgJXp1IiwgZmxhY1NpemUpOwotCi0gICAgdWludDMyX3QgcGljVHlwZTsKLSAgICB1aW50MzJfdCB0eXBlTGVuOwotICAgIHVpbnQzMl90IGRlc2NMZW47Ci0gICAgdWludDMyX3QgZGF0YUxlbjsKLSAgICBjaGFyIHR5cGVbMTI4XTsKLQotICAgIGlmIChmbGFjU2l6ZSA8IDgpIHsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIHBpY1R5cGUgPSBVMzJfQVQoZmxhYyk7Ci0KLSAgICBpZiAocGljVHlwZSAhPSAzKSB7Ci0gICAgICAgIC8vIFRoaXMgaXMgbm90IGEgZnJvbnQgY292ZXIuCi0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICB0eXBlTGVuID0gVTMyX0FUKCZmbGFjWzRdKTsKLSAgICBpZiAodHlwZUxlbiA+IHNpemVvZih0eXBlKSAtIDEpIHsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIC8vIHdlJ3ZlIGFscmVhZHkgY2hlY2tlZCBhYm92ZSB0aGF0IGZsYWNTaXplID49IDgKLSAgICBpZiAoZmxhY1NpemUgLSA4IDwgdHlwZUxlbikgewotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgbWVtY3B5KHR5cGUsICZmbGFjWzhdLCB0eXBlTGVuKTsKLSAgICB0eXBlW3R5cGVMZW5dID0gJ1wwJzsKLQotICAgIEFMT0dWKCJwaWNUeXBlID0gJWQsIHR5cGUgPSAnJXMnIiwgcGljVHlwZSwgdHlwZSk7Ci0KLSAgICBpZiAoIXN0cmNtcCh0eXBlLCAiLS0+IikpIHsKLSAgICAgICAgLy8gVGhpcyBpcyBub3QgaW5saW5lIGNvdmVyIGFydCwgYnV0IGFuIGV4dGVybmFsIHVybCBpbnN0ZWFkLgotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgaWYgKGZsYWNTaXplIDwgMzIgfHwgZmxhY1NpemUgLSAzMiA8IHR5cGVMZW4pIHsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGRlc2NMZW4gPSBVMzJfQVQoJmZsYWNbOCArIHR5cGVMZW5dKTsKLSAgICBpZiAoZmxhY1NpemUgLSAzMiAtIHR5cGVMZW4gPCBkZXNjTGVuKSB7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBkYXRhTGVuID0gVTMyX0FUKCZmbGFjWzggKyB0eXBlTGVuICsgNCArIGRlc2NMZW4gKyAxNl0pOwotCi0gICAgLy8gd2UndmUgYWxyZWFkeSBjaGVja2VkIGFib3ZlIHRoYXQgKGZsYWNTaXplIC0gMzIgLSB0eXBlTGVuIC0gZGVzY0xlbikgPj0gMAotICAgIGlmIChmbGFjU2l6ZSAtIDMyIC0gdHlwZUxlbiAtIGRlc2NMZW4gPCBkYXRhTGVuKSB7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBBTE9HVigiZ290IGltYWdlIGRhdGEsICV6dSB0cmFpbGluZyBieXRlcyIsCi0gICAgICAgICBmbGFjU2l6ZSAtIDMyIC0gdHlwZUxlbiAtIGRlc2NMZW4gLSBkYXRhTGVuKTsKLQotICAgIGZpbGVNZXRhLT5zZXREYXRhKAotICAgICAgICAgICAga0tleUFsYnVtQXJ0LCAwLCAmZmxhY1s4ICsgdHlwZUxlbiArIDQgKyBkZXNjTGVuICsgMjBdLCBkYXRhTGVuKTsKLQotICAgIGZpbGVNZXRhLT5zZXRDU3RyaW5nKGtLZXlBbGJ1bUFydE1JTUUsIHR5cGUpOwotfQotCi12b2lkIHBhcnNlVm9yYmlzQ29tbWVudCgKLSAgICAgICAgTWV0YURhdGFCYXNlICpmaWxlTWV0YSwgY29uc3QgY2hhciAqY29tbWVudCwgc2l6ZV90IGNvbW1lbnRMZW5ndGgpCi17Ci0gICAgc3RydWN0IHsKLSAgICAgICAgY29uc3QgY2hhciAqY29uc3QgbVRhZzsKLSAgICAgICAgdWludDMyX3QgbUtleTsKLSAgICB9IGtNYXBbXSA9IHsKLSAgICAgICAgeyAiVElUTEUiLCBrS2V5VGl0bGUgfSwKLSAgICAgICAgeyAiQVJUSVNUIiwga0tleUFydGlzdCB9LAotICAgICAgICB7ICJBTEJVTUFSVElTVCIsIGtLZXlBbGJ1bUFydGlzdCB9LAotICAgICAgICB7ICJBTEJVTSBBUlRJU1QiLCBrS2V5QWxidW1BcnRpc3QgfSwKLSAgICAgICAgeyAiQ09NUElMQVRJT04iLCBrS2V5Q29tcGlsYXRpb24gfSwKLSAgICAgICAgeyAiQUxCVU0iLCBrS2V5QWxidW0gfSwKLSAgICAgICAgeyAiQ09NUE9TRVIiLCBrS2V5Q29tcG9zZXIgfSwKLSAgICAgICAgeyAiR0VOUkUiLCBrS2V5R2VucmUgfSwKLSAgICAgICAgeyAiQVVUSE9SIiwga0tleUF1dGhvciB9LAotICAgICAgICB7ICJUUkFDS05VTUJFUiIsIGtLZXlDRFRyYWNrTnVtYmVyIH0sCi0gICAgICAgIHsgIkRJU0NOVU1CRVIiLCBrS2V5RGlzY051bWJlciB9LAotICAgICAgICB7ICJEQVRFIiwga0tleURhdGUgfSwKLSAgICAgICAgeyAiWUVBUiIsIGtLZXlZZWFyIH0sCi0gICAgICAgIHsgIkxZUklDSVNUIiwga0tleVdyaXRlciB9LAotICAgICAgICB7ICJNRVRBREFUQV9CTE9DS19QSUNUVVJFIiwga0tleUFsYnVtQXJ0IH0sCi0gICAgICAgIHsgIkFORFJPSURfTE9PUCIsIGtLZXlBdXRvTG9vcCB9LAotICAgIH07Ci0KLSAgICAgICAgZm9yIChzaXplX3QgaiA9IDA7IGogPCBzaXplb2Yoa01hcCkgLyBzaXplb2Yoa01hcFswXSk7ICsraikgewotICAgICAgICAgICAgc2l6ZV90IHRhZ0xlbiA9IHN0cmxlbihrTWFwW2pdLm1UYWcpOwotICAgICAgICAgICAgaWYgKCFzdHJuY2FzZWNtcChrTWFwW2pdLm1UYWcsIGNvbW1lbnQsIHRhZ0xlbikKLSAgICAgICAgICAgICAgICAgICAgJiYgY29tbWVudFt0YWdMZW5dID09ICc9JykgewotICAgICAgICAgICAgICAgIGlmIChrTWFwW2pdLm1LZXkgPT0ga0tleUFsYnVtQXJ0KSB7Ci0gICAgICAgICAgICAgICAgICAgIGV4dHJhY3RBbGJ1bUFydCgKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWxlTWV0YSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAmY29tbWVudFt0YWdMZW4gKyAxXSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb21tZW50TGVuZ3RoIC0gdGFnTGVuIC0gMSk7Ci0gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChrTWFwW2pdLm1LZXkgPT0ga0tleUF1dG9Mb29wKSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmICghc3RyY2FzZWNtcCgmY29tbWVudFt0YWdMZW4gKyAxXSwgInRydWUiKSkgewotICAgICAgICAgICAgICAgICAgICAgICAgZmlsZU1ldGEtPnNldEludDMyKGtLZXlBdXRvTG9vcCwgdHJ1ZSk7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICBmaWxlTWV0YS0+c2V0Q1N0cmluZyhrTWFwW2pdLm1LZXksICZjb21tZW50W3RhZ0xlbiArIDFdKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotfQotCi19ICAvLyBuYW1lc3BhY2UgYW5kcm9pZApkaWZmIC0tZ2l0IGEvbWVkaWEvbGlibWVkaWFleHRyYWN0b3IvaW5jbHVkZS9tZWRpYS9EYXRhU291cmNlLmggYi9tZWRpYS9saWJtZWRpYWV4dHJhY3Rvci9pbmNsdWRlL21lZGlhL0RhdGFTb3VyY2UuaAppbmRleCAwZTU5ZjM5Li5jYjk2ZmY1IDEwMDY0NAotLS0gYS9tZWRpYS9saWJtZWRpYWV4dHJhY3Rvci9pbmNsdWRlL21lZGlhL0RhdGFTb3VyY2UuaAorKysgYi9tZWRpYS9saWJtZWRpYWV4dHJhY3Rvci9pbmNsdWRlL21lZGlhL0RhdGFTb3VyY2UuaApAQCAtMjIsNiArMjIsNyBAQAogI2luY2x1ZGUgPG1lZGlhL3N0YWdlZnJpZ2h0L01lZGlhRXJyb3JzLmg+CiAjaW5jbHVkZSA8bWVkaWEvRGF0YVNvdXJjZUJhc2UuaD4KICNpbmNsdWRlIDxtZWRpYS9JRGF0YVNvdXJjZS5oPgorI2luY2x1ZGUgPG1lZGlhL01lZGlhRXh0cmFjdG9yUGx1Z2luSGVscGVyLmg+CiAjaW5jbHVkZSA8dXRpbHMvRXJyb3JzLmg+CiAjaW5jbHVkZSA8dXRpbHMvUmVmQmFzZS5oPgogI2luY2x1ZGUgPHV0aWxzL3RocmVhZHMuaD4KQEAgLTM0LDcgKzM1LDcgQEAKIAogY2xhc3MgRGF0YVNvdXJjZSA6IHB1YmxpYyBEYXRhU291cmNlQmFzZSwgcHVibGljIHZpcnR1YWwgUmVmQmFzZSB7CiBwdWJsaWM6Ci0gICAgRGF0YVNvdXJjZSgpIHt9CisgICAgRGF0YVNvdXJjZSgpIDogbVdyYXBwZXIoTlVMTCkge30KIAogICAgIC8vIHJldHVybnMgYSBwb2ludGVyIHRvIElEYXRhU291cmNlIGlmIGl0IGlzIHdyYXBwZWQuCiAgICAgdmlydHVhbCBzcDxJRGF0YVNvdXJjZT4gZ2V0SURhdGFTb3VyY2UoKSBjb25zdCB7CkBAIC02OSwxMCArNzAsMzUgQEAKICAgICAgICAgcmV0dXJuIFN0cmluZzgoImFwcGxpY2F0aW9uL29jdGV0LXN0cmVhbSIpOwogICAgIH0KIAorICAgIENEYXRhU291cmNlICp3cmFwKCkgeworICAgICAgICBpZiAobVdyYXBwZXIpIHsKKyAgICAgICAgICAgIHJldHVybiBtV3JhcHBlcjsKKyAgICAgICAgfQorICAgICAgICBtV3JhcHBlciA9IG5ldyBDRGF0YVNvdXJjZSgpOworICAgICAgICBtV3JhcHBlci0+aGFuZGxlID0gdGhpczsKKworICAgICAgICBtV3JhcHBlci0+cmVhZEF0ID0gW10odm9pZCAqaGFuZGxlLCBvZmY2NF90IG9mZnNldCwgdm9pZCAqZGF0YSwgc2l6ZV90IHNpemUpIC0+IHNzaXplX3QgeworICAgICAgICAgICAgcmV0dXJuICgoRGF0YVNvdXJjZSopaGFuZGxlKS0+cmVhZEF0KG9mZnNldCwgZGF0YSwgc2l6ZSk7CisgICAgICAgIH07CisgICAgICAgIG1XcmFwcGVyLT5nZXRTaXplID0gW10odm9pZCAqaGFuZGxlLCBvZmY2NF90ICpzaXplKSAtPiBzdGF0dXNfdCB7CisgICAgICAgICAgICByZXR1cm4gKChEYXRhU291cmNlKiloYW5kbGUpLT5nZXRTaXplKHNpemUpOworICAgICAgICB9OworICAgICAgICBtV3JhcHBlci0+ZmxhZ3MgPSBbXSh2b2lkICpoYW5kbGUpIC0+IHVpbnQzMl90IHsKKyAgICAgICAgICAgIHJldHVybiAoKERhdGFTb3VyY2UqKWhhbmRsZSktPmZsYWdzKCk7CisgICAgICAgIH07CisgICAgICAgIG1XcmFwcGVyLT5nZXRVcmkgPSBbXSh2b2lkICpoYW5kbGUsIGNoYXIgKnVyaVN0cmluZywgc2l6ZV90IGJ1ZmZlclNpemUpIC0+IGJvb2wgeworICAgICAgICAgICAgcmV0dXJuICgoRGF0YVNvdXJjZSopaGFuZGxlKS0+Z2V0VXJpKHVyaVN0cmluZywgYnVmZmVyU2l6ZSk7CisgICAgICAgIH07CisgICAgICAgIHJldHVybiBtV3JhcHBlcjsKKyAgICB9CisKIHByb3RlY3RlZDoKLSAgICB2aXJ0dWFsIH5EYXRhU291cmNlKCkge30KKyAgICB2aXJ0dWFsIH5EYXRhU291cmNlKCkgeworICAgICAgICBkZWxldGUgbVdyYXBwZXI7CisgICAgfQogCiBwcml2YXRlOgorICAgIENEYXRhU291cmNlICptV3JhcHBlcjsKICAgICBEYXRhU291cmNlKGNvbnN0IERhdGFTb3VyY2UgJik7CiAgICAgRGF0YVNvdXJjZSAmb3BlcmF0b3I9KGNvbnN0IERhdGFTb3VyY2UgJik7CiB9OwpkaWZmIC0tZ2l0IGEvbWVkaWEvbGlibWVkaWFleHRyYWN0b3IvaW5jbHVkZS9tZWRpYS9EYXRhU291cmNlQmFzZS5oIGIvbWVkaWEvbGlibWVkaWFleHRyYWN0b3IvaW5jbHVkZS9tZWRpYS9EYXRhU291cmNlQmFzZS5oCmluZGV4IDUxOTkzZGEuLmFmNWI4M2QgMTAwNjQ0Ci0tLSBhL21lZGlhL2xpYm1lZGlhZXh0cmFjdG9yL2luY2x1ZGUvbWVkaWEvRGF0YVNvdXJjZUJhc2UuaAorKysgYi9tZWRpYS9saWJtZWRpYWV4dHJhY3Rvci9pbmNsdWRlL21lZGlhL0RhdGFTb3VyY2VCYXNlLmgKQEAgLTY2LDYgKzY2LDEwIEBACiAKICAgICB2aXJ0dWFsIHZvaWQgY2xvc2UoKSB7fTsKIAorICAgIHZpcnR1YWwgc3RhdHVzX3QgZ2V0QXZhaWxhYmxlU2l6ZShvZmY2NF90IC8qb2Zmc2V0Ki8sIG9mZjY0X3QgKiAvKnNpemUqLykgeworICAgICAgICByZXR1cm4gLTE7CisgICAgfQorCiBwcm90ZWN0ZWQ6CiAgICAgdmlydHVhbCB+RGF0YVNvdXJjZUJhc2UoKSB7fQogCmRpZmYgLS1naXQgYS9tZWRpYS9saWJtZWRpYWV4dHJhY3Rvci9pbmNsdWRlL21lZGlhL01lZGlhRXh0cmFjdG9yLmggYi9tZWRpYS9saWJtZWRpYWV4dHJhY3Rvci9pbmNsdWRlL21lZGlhL01lZGlhRXh0cmFjdG9yLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDRiYTk4ZGEuLjAwMDAwMDAKLS0tIGEvbWVkaWEvbGlibWVkaWFleHRyYWN0b3IvaW5jbHVkZS9tZWRpYS9NZWRpYUV4dHJhY3Rvci5oCisrKyAvZGV2L251bGwKQEAgLTEsMTk0ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDkgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAotICoKLSAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwotICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgotICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0gKgotICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLSAqCi0gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCi0gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAotICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCi0gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCi0gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KLSAqLwotCi0jaWZuZGVmIE1FRElBX0VYVFJBQ1RPUl9IXwotCi0jZGVmaW5lIE1FRElBX0VYVFJBQ1RPUl9IXwotCi0jaW5jbHVkZSA8c3RkaW8uaD4KLSNpbmNsdWRlIDx2ZWN0b3I+Ci0KLSNpbmNsdWRlIDx1dGlscy9FcnJvcnMuaD4KLSNpbmNsdWRlIDx1dGlscy9Mb2cuaD4KLSNpbmNsdWRlIDx1dGlscy9SZWZCYXNlLmg+Ci0KLW5hbWVzcGFjZSBhbmRyb2lkIHsKLQotY2xhc3MgRGF0YVNvdXJjZUJhc2U7Ci1jbGFzcyBNZXRhRGF0YUJhc2U7Ci1zdHJ1Y3QgTWVkaWFUcmFjazsKLQotCi1jbGFzcyBFeHRyYWN0b3JBbGxvY1RyYWNrZXIgewotcHVibGljOgotICAgIEV4dHJhY3RvckFsbG9jVHJhY2tlcigpIHsKLSAgICAgICAgQUxPR0QoImV4dHJhY3RvciBhbGxvY2F0ZWQ6ICVwIiwgdGhpcyk7Ci0gICAgfQotICAgIHZpcnR1YWwgfkV4dHJhY3RvckFsbG9jVHJhY2tlcigpIHsKLSAgICAgICAgQUxPR0QoImV4dHJhY3RvciBmcmVlZDogJXAiLCB0aGlzKTsKLSAgICB9Ci19OwotCi0KLWNsYXNzIE1lZGlhRXh0cmFjdG9yCi0vLyA6IHB1YmxpYyBFeHRyYWN0b3JBbGxvY1RyYWNrZXIKLXsKLXB1YmxpYzoKLSAgICB2aXJ0dWFsIH5NZWRpYUV4dHJhY3RvcigpOwotICAgIHZpcnR1YWwgc2l6ZV90IGNvdW50VHJhY2tzKCkgPSAwOwotICAgIHZpcnR1YWwgTWVkaWFUcmFjayAqZ2V0VHJhY2soc2l6ZV90IGluZGV4KSA9IDA7Ci0KLSAgICBlbnVtIEdldFRyYWNrTWV0YURhdGFGbGFncyB7Ci0gICAgICAgIGtJbmNsdWRlRXh0ZW5zaXZlTWV0YURhdGEgPSAxCi0gICAgfTsKLSAgICB2aXJ0dWFsIHN0YXR1c190IGdldFRyYWNrTWV0YURhdGEoCi0gICAgICAgICAgICBNZXRhRGF0YUJhc2UmIG1ldGEsCi0gICAgICAgICAgICBzaXplX3QgaW5kZXgsIHVpbnQzMl90IGZsYWdzID0gMCkgPSAwOwotCi0gICAgLy8gUmV0dXJuIGNvbnRhaW5lciBzcGVjaWZpYyBtZXRhLWRhdGEuIFRoZSBkZWZhdWx0IGltcGxlbWVudGF0aW9uCi0gICAgLy8gcmV0dXJucyBhbiBlbXB0eSBtZXRhZGF0YSBvYmplY3QuCi0gICAgdmlydHVhbCBzdGF0dXNfdCBnZXRNZXRhRGF0YShNZXRhRGF0YUJhc2UmIG1ldGEpID0gMDsKLQotICAgIGVudW0gRmxhZ3MgewotICAgICAgICBDQU5fU0VFS19CQUNLV0FSRCAgPSAxLCAgLy8gdGhlICJzZWVrIDEwc2VjcyBiYWNrIGJ1dHRvbiIKLSAgICAgICAgQ0FOX1NFRUtfRk9SV0FSRCAgID0gMiwgIC8vIHRoZSAic2VlayAxMHNlY3MgZm9yd2FyZCBidXR0b24iCi0gICAgICAgIENBTl9QQVVTRSAgICAgICAgICA9IDQsCi0gICAgICAgIENBTl9TRUVLICAgICAgICAgICA9IDgsICAvLyB0aGUgInNlZWsgYmFyIgotICAgIH07Ci0KLSAgICAvLyBJZiBzdWJjbGFzc2VzIGRvIF9ub3RfIG92ZXJyaWRlIHRoaXMsIHRoZSBkZWZhdWx0IGlzCi0gICAgLy8gQ0FOX1NFRUtfQkFDS1dBUkQgfCBDQU5fU0VFS19GT1JXQVJEIHwgQ0FOX1NFRUsgfCBDQU5fUEFVU0UKLSAgICB2aXJ0dWFsIHVpbnQzMl90IGZsYWdzKCkgY29uc3Q7Ci0KLSAgICB2aXJ0dWFsIHN0YXR1c190IHNldE1lZGlhQ2FzKGNvbnN0IHVpbnQ4X3QqIC8qY2FzVG9rZW4qLywgc2l6ZV90IC8qc2l6ZSovKSB7Ci0gICAgICAgIHJldHVybiBJTlZBTElEX09QRVJBVElPTjsKLSAgICB9Ci0KLSAgICB2aXJ0dWFsIGNvbnN0IGNoYXIgKiBuYW1lKCkgeyByZXR1cm4gIjx1bnNwZWNpZmllZD4iOyB9Ci0KLSAgICB0eXBlZGVmIE1lZGlhRXh0cmFjdG9yKiAoKkNyZWF0b3JGdW5jKSgKLSAgICAgICAgICAgIERhdGFTb3VyY2VCYXNlICpzb3VyY2UsIHZvaWQgKm1ldGEpOwotICAgIHR5cGVkZWYgdm9pZCAoKkZyZWVNZXRhRnVuYykodm9pZCAqbWV0YSk7Ci0KLSAgICAvLyBUaGUgc25pZmZlciBjYW4gb3B0aW9uYWxseSBmaWxsIGluIGFuIG9wYXF1ZSBvYmplY3QsICJtZXRhIiwgdGhhdCBoZWxwcwotICAgIC8vIHRoZSBjb3JyZXNwb25kaW5nIGV4dHJhY3RvciBpbml0aWFsaXplIGl0cyBzdGF0ZSB3aXRob3V0IGR1cGxpY2F0aW5nCi0gICAgLy8gZWZmb3J0IGFscmVhZHkgZXhlcnRlZCBieSB0aGUgc25pZmZlci4gSWYgImZyZWVNZXRhIiBpcyBnaXZlbiwgaXQgd2lsbCBiZQotICAgIC8vIGNhbGxlZCBhZ2FpbnN0IHRoZSBvcGFxdWUgb2JqZWN0IHdoZW4gaXQgaXMgbm8gbG9uZ2VyIHVzZWQuCi0gICAgdHlwZWRlZiBDcmVhdG9yRnVuYyAoKlNuaWZmZXJGdW5jKSgKLSAgICAgICAgICAgIERhdGFTb3VyY2VCYXNlICpzb3VyY2UsIGZsb2F0ICpjb25maWRlbmNlLAotICAgICAgICAgICAgdm9pZCAqKm1ldGEsIEZyZWVNZXRhRnVuYyAqZnJlZU1ldGEpOwotCi0gICAgdHlwZWRlZiBzdHJ1Y3QgewotICAgICAgICBjb25zdCB1aW50OF90IGJbMTZdOwotICAgIH0gdXVpZF90OwotCi0gICAgdHlwZWRlZiBzdHJ1Y3QgewotICAgICAgICAvLyB2ZXJzaW9uIG51bWJlciBvZiB0aGlzIHN0cnVjdHVyZQotICAgICAgICBjb25zdCB1aW50MzJfdCBkZWZfdmVyc2lvbjsKLQotICAgICAgICAvLyBBIHVuaXF1ZSBpZGVudGlmaWVyIGZvciB0aGlzIGV4dHJhY3Rvci4KLSAgICAgICAgLy8gU2VlIGJlbG93IGZvciBhIGNvbnZlbmllbmNlIG1hY3JvIHRvIGNyZWF0ZSB0aGlzIGZyb20gYSBzdHJpbmcuCi0gICAgICAgIHV1aWRfdCBleHRyYWN0b3JfdXVpZDsKLQotICAgICAgICAvLyBWZXJzaW9uIG51bWJlciBvZiB0aGlzIGV4dHJhY3Rvci4gV2hlbiB0d28gZXh0cmFjdG9ycyB3aXRoIHRoZSBzYW1lCi0gICAgICAgIC8vIHV1aWQgYXJlIGVuY291bnRlcmVkLCB0aGUgb25lIHdpdGggdGhlIGxhcmdlc3QgdmVyc2lvbiBudW1iZXIgd2lsbAotICAgICAgICAvLyBiZSB1c2VkLgotICAgICAgICBjb25zdCB1aW50MzJfdCBleHRyYWN0b3JfdmVyc2lvbjsKLQotICAgICAgICAvLyBhIGh1bWFuIHJlYWRhYmxlIG5hbWUKLSAgICAgICAgY29uc3QgY2hhciAqZXh0cmFjdG9yX25hbWU7Ci0KLSAgICAgICAgLy8gdGhlIHNuaWZmZXIgZnVuY3Rpb24KLSAgICAgICAgY29uc3QgU25pZmZlckZ1bmMgc25pZmY7Ci0gICAgfSBFeHRyYWN0b3JEZWY7Ci0KLSAgICBzdGF0aWMgY29uc3QgdWludDMyX3QgRVhUUkFDVE9SREVGX1ZFUlNJT04gPSAxOwotCi0gICAgdHlwZWRlZiBFeHRyYWN0b3JEZWYgKCpHZXRFeHRyYWN0b3JEZWYpKCk7Ci0KLXByb3RlY3RlZDoKLSAgICBNZWRpYUV4dHJhY3RvcigpOwotCi1wcml2YXRlOgotICAgIE1lZGlhRXh0cmFjdG9yKGNvbnN0IE1lZGlhRXh0cmFjdG9yICYpOwotICAgIE1lZGlhRXh0cmFjdG9yICZvcGVyYXRvcj0oY29uc3QgTWVkaWFFeHRyYWN0b3IgJik7Ci19OwotCi0vLyBwdXJwb3NlbHkgbm90IGRlZmluZWQgYW55d2hlcmUgc28gdGhhdCB0aGlzIHdpbGwgZmFpbCB0byBsaW5rIGlmCi0vLyBleHByZXNzaW9ucyBiZWxvdyBhcmUgbm90IGV2YWx1YXRlZCBhdCBjb21waWxlIHRpbWUKLWludCBpbnZhbGlkX3V1aWRfc3RyaW5nKGNvbnN0IGNoYXIgKik7Ci0KLXRlbXBsYXRlIDx0eXBlbmFtZSBULCBzaXplX3QgTj4KLWNvbnN0ZXhwciB1aW50OF90IF9kaWdpdEF0Xyhjb25zdCBUICgmcylbTl0sIGNvbnN0IHNpemVfdCBuKSB7Ci0gICAgcmV0dXJuIHNbbl0gPj0gJzAnICYmIHNbbl0gPD0gJzknID8gc1tuXSAtICcwJwotICAgICAgICAgICAgOiBzW25dID49ICdhJyAmJiBzW25dIDw9ICdmJyA/IHNbbl0gLSAnYScgKyAxMAotICAgICAgICAgICAgICAgICAgICA6IHNbbl0gPj0gJ0EnICYmIHNbbl0gPD0gJ0YnID8gc1tuXSAtICdBJyArIDEwCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBpbnZhbGlkX3V1aWRfc3RyaW5nKCJ1dWlkOiBiYWQgZGlnaXRzIik7Ci19Ci0KLXRlbXBsYXRlIDx0eXBlbmFtZSBULCBzaXplX3QgTj4KLWNvbnN0ZXhwciB1aW50OF90IF9oZXhCeXRlQXRfKGNvbnN0IFQgKCZzKVtOXSwgc2l6ZV90IG4pIHsKLSAgICByZXR1cm4gKF9kaWdpdEF0XyhzLCBuKSA8PCA0KSArIF9kaWdpdEF0XyhzLCBuICsgMSk7Ci19Ci0KLWNvbnN0ZXhwciBib29sIF9hc3NlcnRJc0Rhc2hfKGNoYXIgYykgewotICAgIHJldHVybiBjID09ICctJyA/IHRydWUgOiBpbnZhbGlkX3V1aWRfc3RyaW5nKCJXcm9uZyBmb3JtYXQiKTsKLX0KLQotdGVtcGxhdGUgPHNpemVfdCBOPgotY29uc3RleHByIE1lZGlhRXh0cmFjdG9yOjp1dWlkX3QgY29uc3RVVUlEKGNvbnN0IGNoYXIgKCZzKSBbTl0pIHsKLSAgICBzdGF0aWNfYXNzZXJ0KE4gPT0gMzcsICJ1dWlkOiB3cm9uZyBsZW5ndGgiKTsKLSAgICByZXR1cm4KLSAgICAgICAgICAgIF9hc3NlcnRJc0Rhc2hfKHNbOF0pLAotICAgICAgICAgICAgX2Fzc2VydElzRGFzaF8oc1sxM10pLAotICAgICAgICAgICAgX2Fzc2VydElzRGFzaF8oc1sxOF0pLAotICAgICAgICAgICAgX2Fzc2VydElzRGFzaF8oc1syM10pLAotICAgICAgICAgICAgTWVkaWFFeHRyYWN0b3I6OnV1aWRfdCB7ewotICAgICAgICAgICAgICAgIF9oZXhCeXRlQXRfKHMsIDApLAotICAgICAgICAgICAgICAgIF9oZXhCeXRlQXRfKHMsIDIpLAotICAgICAgICAgICAgICAgIF9oZXhCeXRlQXRfKHMsIDQpLAotICAgICAgICAgICAgICAgIF9oZXhCeXRlQXRfKHMsIDYpLAotICAgICAgICAgICAgICAgIF9oZXhCeXRlQXRfKHMsIDkpLAotICAgICAgICAgICAgICAgIF9oZXhCeXRlQXRfKHMsIDExKSwKLSAgICAgICAgICAgICAgICBfaGV4Qnl0ZUF0XyhzLCAxNCksCi0gICAgICAgICAgICAgICAgX2hleEJ5dGVBdF8ocywgMTYpLAotICAgICAgICAgICAgICAgIF9oZXhCeXRlQXRfKHMsIDE5KSwKLSAgICAgICAgICAgICAgICBfaGV4Qnl0ZUF0XyhzLCAyMSksCi0gICAgICAgICAgICAgICAgX2hleEJ5dGVBdF8ocywgMjQpLAotICAgICAgICAgICAgICAgIF9oZXhCeXRlQXRfKHMsIDI2KSwKLSAgICAgICAgICAgICAgICBfaGV4Qnl0ZUF0XyhzLCAyOCksCi0gICAgICAgICAgICAgICAgX2hleEJ5dGVBdF8ocywgMzApLAotICAgICAgICAgICAgICAgIF9oZXhCeXRlQXRfKHMsIDMyKSwKLSAgICAgICAgICAgICAgICBfaGV4Qnl0ZUF0XyhzLCAzNCksCi0gICAgICAgICAgICB9fTsKLX0KLS8vIENvbnZlbmllbmNlIG1hY3JvIHRvIGNyZWF0ZSBhIHV1aWRfdCBmcm9tIGEgc3RyaW5nIGxpdGVyYWwsIHdoaWNoIHNob3VsZAotLy8gYmUgZm9ybWF0dGVkIGFzICIxMjM0NTY3OC0xMjM0LTEyMzQtMTIzNC0xMjM0NTY3ODlhYmMiLCBhcyBnZW5lcmF0ZWQgYnkKLS8vIGUuZy4gaHR0cHM6Ly93d3cudXVpZGdlbmVyYXRvci5uZXQvIG9yIHRoZSAndXVpZGdlbicgbGludXggY29tbWFuZC4KLS8vIEhleCBkaWdpdHMgbWF5IGJlIHVwcGVyIG9yIGxvd2VyIGNhc2UuCi0vLwotLy8gVGhlIG1hY3JvIGNhbGwgaXMgb3RoZXJ3aXNlIGVxdWl2YWxlbnQgdG8gc3BlY2lmeWluZyB0aGUgc3RydWN0dXJlIGRpcmVjdGx5Ci0vLyAoZS5nLiBVVUlEKCI3ZDYxMzg1OC01ODM3LTRhMzgtODRjNS0zMzJkMWNkZGVlMjciKSBpcyB0aGUgc2FtZSBhcwotLy8gICAgICAge3sweDdkLCAweDYxLCAweDM4LCAweDU4LCAweDU4LCAweDM3LCAweDRhLCAweDM4LAotLy8gICAgICAgICAweDg0LCAweGM1LCAweDMzLCAweDJkLCAweDFjLCAweGRkLCAweGVlLCAweDI3fX0pCi0KLSNkZWZpbmUgVVVJRChzdHIpIFtdeyBjb25zdGV4cHIgTWVkaWFFeHRyYWN0b3I6OnV1aWRfdCB1dWlkID0gY29uc3RVVUlEKHN0cik7IHJldHVybiB1dWlkOyB9KCkKLQotCi0KLX0gIC8vIG5hbWVzcGFjZSBhbmRyb2lkCi0KLSNlbmRpZiAgLy8gTUVESUFfRVhUUkFDVE9SX0hfCmRpZmYgLS1naXQgYS9tZWRpYS9saWJtZWRpYWV4dHJhY3Rvci9pbmNsdWRlL21lZGlhL01lZGlhVHJhY2suaCBiL21lZGlhL2xpYm1lZGlhZXh0cmFjdG9yL2luY2x1ZGUvbWVkaWEvTWVkaWFUcmFjay5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhZGVhNjFhLi4wMDAwMDAwCi0tLSBhL21lZGlhL2xpYm1lZGlhZXh0cmFjdG9yL2luY2x1ZGUvbWVkaWEvTWVkaWFUcmFjay5oCisrKyAvZGV2L251bGwKQEAgLTEsMTI1ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTggVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAotICoKLSAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwotICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgotICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0gKgotICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLSAqCi0gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCi0gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAotICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCi0gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCi0gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KLSAqLwotCi0jaWZuZGVmIE1FRElBX1NPVVJDRV9CQVNFX0hfCi0KLSNkZWZpbmUgTUVESUFfU09VUkNFX0JBU0VfSF8KLQotI2luY2x1ZGUgPHN5cy90eXBlcy5oPgotCi0jaW5jbHVkZSA8YmluZGVyL0lNZW1vcnkuaD4KLSNpbmNsdWRlIDxiaW5kZXIvTWVtb3J5RGVhbGVyLmg+Ci0jaW5jbHVkZSA8bWVkaWEvc3RhZ2VmcmlnaHQvTWVkaWFFcnJvcnMuaD4KLSNpbmNsdWRlIDxtZWRpYS9zdGFnZWZyaWdodC9NZXRhRGF0YS5oPgotI2luY2x1ZGUgPHV0aWxzL0xvZy5oPgotI2luY2x1ZGUgPHV0aWxzL1JlZkJhc2UuaD4KLSNpbmNsdWRlIDx1dGlscy9WZWN0b3IuaD4KLQotbmFtZXNwYWNlIGFuZHJvaWQgewotCi1jbGFzcyBNZWRpYUJ1ZmZlckJhc2U7Ci0KLWNsYXNzIFNvdXJjZUJhc2VBbGxvY1RyYWNrZXIgewotcHVibGljOgotICAgIFNvdXJjZUJhc2VBbGxvY1RyYWNrZXIoKSB7Ci0gICAgICAgIEFMT0dEKCJzb3VyY2ViYXNlIGFsbG9jYXRlZDogJXAiLCB0aGlzKTsKLSAgICB9Ci0gICAgdmlydHVhbCB+U291cmNlQmFzZUFsbG9jVHJhY2tlcigpIHsKLSAgICAgICAgQUxPR0QoInNvdXJjZWJhc2UgZnJlZWQ6ICVwIiwgdGhpcyk7Ci0gICAgfQotfTsKLQotc3RydWN0IE1lZGlhVHJhY2sKLS8vICAgIDogcHVibGljIFNvdXJjZUJhc2VBbGxvY1RyYWNrZXIKLXsKLSAgICBNZWRpYVRyYWNrKCk7Ci0KLSAgICAvLyBUbyBiZSBjYWxsZWQgYmVmb3JlIGFueSBvdGhlciBtZXRob2RzIG9uIHRoaXMgb2JqZWN0LCBleGNlcHQKLSAgICAvLyBnZXRGb3JtYXQoKS4KLSAgICB2aXJ0dWFsIHN0YXR1c190IHN0YXJ0KE1ldGFEYXRhQmFzZSAqcGFyYW1zID0gTlVMTCkgPSAwOwotCi0gICAgLy8gQW55IGJsb2NraW5nIHJlYWQgY2FsbCByZXR1cm5zIGltbWVkaWF0ZWx5IHdpdGggYSByZXN1bHQgb2YgTk9fSU5JVC4KLSAgICAvLyBJdCBpcyBhbiBlcnJvciB0byBjYWxsIGFueSBtZXRob2RzIG90aGVyIHRoYW4gc3RhcnQgYWZ0ZXIgdGhpcyBjYWxsCi0gICAgLy8gcmV0dXJucy4gQW55IGJ1ZmZlcnMgdGhlIG9iamVjdCBtYXkgYmUgaG9sZGluZyBvbnRvIGF0IHRoZSB0aW1lIG9mCi0gICAgLy8gdGhlIHN0b3AoKSBjYWxsIGFyZSByZWxlYXNlZC4KLSAgICAvLyBBbHNvLCBpdCBpcyBpbXBlcmF0aXZlIHRoYXQgYW55IGJ1ZmZlcnMgb3V0cHV0IGJ5IHRoaXMgb2JqZWN0IGFuZAotICAgIC8vIGhlbGQgb250byBieSBjYWxsZXJzIGJlIHJlbGVhc2VkIGJlZm9yZSBhIGNhbGwgdG8gc3RvcCgpICEhIQotICAgIHZpcnR1YWwgc3RhdHVzX3Qgc3RvcCgpID0gMDsKLQotICAgIC8vIFJldHVybnMgdGhlIGZvcm1hdCBvZiB0aGUgZGF0YSBvdXRwdXQgYnkgdGhpcyBtZWRpYSB0cmFjay4KLSAgICB2aXJ0dWFsIHN0YXR1c190IGdldEZvcm1hdChNZXRhRGF0YUJhc2UmIGZvcm1hdCkgPSAwOwotCi0gICAgLy8gT3B0aW9ucyB0aGF0IG1vZGlmeSByZWFkKCkgYmVoYXZpb3VyLiBUaGUgZGVmYXVsdCBpcyB0bwotICAgIC8vIGEpIG5vdCByZXF1ZXN0IGEgc2VlawotICAgIC8vIGIpIG5vdCBiZSBsYXRlLCBpLmUuIGxhdGVuZXNzX3VzID0gMAotICAgIHN0cnVjdCBSZWFkT3B0aW9ucyB7Ci0gICAgICAgIGVudW0gU2Vla01vZGUgOiBpbnQzMl90IHsKLSAgICAgICAgICAgIFNFRUtfUFJFVklPVVNfU1lOQywKLSAgICAgICAgICAgIFNFRUtfTkVYVF9TWU5DLAotICAgICAgICAgICAgU0VFS19DTE9TRVNUX1NZTkMsCi0gICAgICAgICAgICBTRUVLX0NMT1NFU1QsCi0gICAgICAgICAgICBTRUVLX0ZSQU1FX0lOREVYLAotICAgICAgICB9OwotCi0gICAgICAgIFJlYWRPcHRpb25zKCk7Ci0KLSAgICAgICAgLy8gUmVzZXQgZXZlcnl0aGluZyBiYWNrIHRvIGRlZmF1bHRzLgotICAgICAgICB2b2lkIHJlc2V0KCk7Ci0KLSAgICAgICAgdm9pZCBzZXRTZWVrVG8oaW50NjRfdCB0aW1lX3VzLCBTZWVrTW9kZSBtb2RlID0gU0VFS19DTE9TRVNUX1NZTkMpOwotICAgICAgICB2b2lkIGNsZWFyU2Vla1RvKCk7Ci0gICAgICAgIGJvb2wgZ2V0U2Vla1RvKGludDY0X3QgKnRpbWVfdXMsIFNlZWtNb2RlICptb2RlKSBjb25zdDsKLQotICAgICAgICB2b2lkIHNldE5vbkJsb2NraW5nKCk7Ci0gICAgICAgIHZvaWQgY2xlYXJOb25CbG9ja2luZygpOwotICAgICAgICBib29sIGdldE5vbkJsb2NraW5nKCkgY29uc3Q7Ci0KLSAgICAgICAgLy8gVXNlZCB0byBjbGVhciBhbGwgbm9uLXBlcnNpc3RlbnQgb3B0aW9ucyBmb3IgbXVsdGlwbGUgYnVmZmVyIHJlYWRzLgotICAgICAgICB2b2lkIGNsZWFyTm9uUGVyc2lzdGVudCgpIHsKLSAgICAgICAgICAgIGNsZWFyU2Vla1RvKCk7Ci0gICAgICAgIH0KLQotICAgIHByaXZhdGU6Ci0gICAgICAgIGVudW0gT3B0aW9ucyB7Ci0gICAgICAgICAgICBrU2Vla1RvX09wdGlvbiAgICAgID0gMSwKLSAgICAgICAgfTsKLQotICAgICAgICB1aW50MzJfdCBtT3B0aW9uczsKLSAgICAgICAgaW50NjRfdCBtU2Vla1RpbWVVczsKLSAgICAgICAgU2Vla01vZGUgbVNlZWtNb2RlOwotICAgICAgICBib29sIG1Ob25CbG9ja2luZzsKLSAgICB9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOyAvLyBzZW50IHRocm91Z2ggQmluZGVyCi0KLSAgICAvLyBSZXR1cm5zIGEgbmV3IGJ1ZmZlciBvZiBkYXRhLiBDYWxsIGJsb2NrcyB1bnRpbCBhCi0gICAgLy8gYnVmZmVyIGlzIGF2YWlsYWJsZSwgYW4gZXJyb3IgaXMgZW5jb3VudGVyZWQgb2YgdGhlIGVuZCBvZiB0aGUgc3RyZWFtCi0gICAgLy8gaXMgcmVhY2hlZC4KLSAgICAvLyBFbmQgb2Ygc3RyZWFtIGlzIHNpZ25hbGxlZCBieSBhIHJlc3VsdCBvZiBFUlJPUl9FTkRfT0ZfU1RSRUFNLgotICAgIC8vIEEgcmVzdWx0IG9mIElORk9fRk9STUFUX0NIQU5HRUQgaW5kaWNhdGVzIHRoYXQgdGhlIGZvcm1hdCBvZiB0aGlzCi0gICAgLy8gTWVkaWFTb3VyY2UgaGFzIGNoYW5nZWQgbWlkLXN0cmVhbSwgdGhlIGNsaWVudCBjYW4gY29udGludWUgcmVhZGluZwotICAgIC8vIGJ1dCBzaG91bGQgYmUgcHJlcGFyZWQgZm9yIGJ1ZmZlcnMgb2YgdGhlIG5ldyBjb25maWd1cmF0aW9uLgotICAgIHZpcnR1YWwgc3RhdHVzX3QgcmVhZCgKLSAgICAgICAgICAgIE1lZGlhQnVmZmVyQmFzZSAqKmJ1ZmZlciwgY29uc3QgUmVhZE9wdGlvbnMgKm9wdGlvbnMgPSBOVUxMKSA9IDA7Ci0KLSAgICB2aXJ0dWFsIH5NZWRpYVRyYWNrKCk7Ci0KLXByaXZhdGU6Ci0gICAgTWVkaWFUcmFjayhjb25zdCBNZWRpYVRyYWNrICYpOwotICAgIE1lZGlhVHJhY2sgJm9wZXJhdG9yPShjb25zdCBNZWRpYVRyYWNrICYpOwotfTsKLQotfSAgLy8gbmFtZXNwYWNlIGFuZHJvaWQKLQotI2VuZGlmICAvLyBNRURJQV9TT1VSQ0VfQkFTRV9IXwpkaWZmIC0tZ2l0IGEvbWVkaWEvbGlibWVkaWFleHRyYWN0b3IvaW5jbHVkZS9tZWRpYS9Wb3JiaXNDb21tZW50LmggYi9tZWRpYS9saWJtZWRpYWV4dHJhY3Rvci9pbmNsdWRlL21lZGlhL1ZvcmJpc0NvbW1lbnQuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOGJhMzI5NS4uMDAwMDAwMAotLS0gYS9tZWRpYS9saWJtZWRpYWV4dHJhY3Rvci9pbmNsdWRlL21lZGlhL1ZvcmJpc0NvbW1lbnQuaAorKysgL2Rldi9udWxsCkBAIC0xLDMwICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTggVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAotICoKLSAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwotICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgotICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0gKgotICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLSAqCi0gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCi0gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAotICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCi0gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCi0gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KLSAqLwotCi0KLSNpZm5kZWYgVk9SQklTX0NPTU1FTlRfSF8KLSNkZWZpbmUgVk9SQklTX0NPTU1FTlRfSF8KLQotbmFtZXNwYWNlIGFuZHJvaWQgewotCi1jbGFzcyBNZXRhRGF0YUJhc2U7Ci0KLXZvaWQgcGFyc2VWb3JiaXNDb21tZW50KAotICAgICAgICBNZXRhRGF0YUJhc2UgKmZpbGVNZXRhLCBjb25zdCBjaGFyICpjb21tZW50LCBzaXplX3QgY29tbWVudExlbmd0aCk7Ci0KLX0gIC8vIG5hbWVzcGFjZSBhbmRyb2lkCi0KLSNlbmRpZiAvLyBWT1JCSVNfQ09NTUVOVF9IXwpkaWZmIC0tZ2l0IGEvbWVkaWEvbGlibWVkaWFleHRyYWN0b3IvaW5jbHVkZS9tZWRpYS9zdGFnZWZyaWdodC9NZXRhRGF0YUJhc2UuaCBiL21lZGlhL2xpYm1lZGlhZXh0cmFjdG9yL2luY2x1ZGUvbWVkaWEvc3RhZ2VmcmlnaHQvTWV0YURhdGFCYXNlLmgKaW5kZXggM2U0ZTg2Yy4uOWYyZGVkYSAxMDA2NDQKLS0tIGEvbWVkaWEvbGlibWVkaWFleHRyYWN0b3IvaW5jbHVkZS9tZWRpYS9zdGFnZWZyaWdodC9NZXRhRGF0YUJhc2UuaAorKysgYi9tZWRpYS9saWJtZWRpYWV4dHJhY3Rvci9pbmNsdWRlL21lZGlhL3N0YWdlZnJpZ2h0L01ldGFEYXRhQmFzZS5oCkBAIC02OCw3ICs2OCw2IEBACiAgICAga0tleU9wdXNTZWVrUHJlUm9sbCAgID0gJ29zcHInLCAgLy8gdWludDY0X3QgKHNlZWsgcHJlcm9sbCBpbiBucykKICAgICBrS2V5RmxhY01ldGFkYXRhICAgICAgPSAnZmxNZCcsICAvLyByYXcgZGF0YQogICAgIGtLZXlWcDlDb2RlY1ByaXZhdGUgICA9ICd2cDlwJywgIC8vIHJhdyBkYXRhICh2cDkgY3NkIGluZm9ybWF0aW9uKQotICAgIGtLZXlXYW50c05BTEZyYWdtZW50cyA9ICdOQUxmJywKICAgICBrS2V5SXNTeW5jRnJhbWUgICAgICAgPSAnc3luYycsICAvLyBpbnQzMl90IChib29sKQogICAgIGtLZXlJc0NvZGVjQ29uZmlnICAgICA9ICdjb25mJywgIC8vIGludDMyX3QgKGJvb2wpCiAgICAga0tleUlzTXV4ZXJEYXRhICAgICAgID0gJ211eGQnLCAgLy8gaW50MzJfdCAoYm9vbCkKQEAgLTkwLDcgKzg5LDYgQEAKICAgICBrS2V5TWF4SGVpZ2h0ICAgICAgICAgPSAnbWF4SCcsCiAgICAga0tleVRodW1ibmFpbFRpbWUgICAgID0gJ3RoYlQnLCAgLy8gaW50NjRfdCAodXNlY3MpCiAgICAga0tleVRyYWNrSUQgICAgICAgICAgID0gJ3RySUQnLAotICAgIGtLZXlJc0RSTSAgICAgICAgICAgICA9ICdpZHJtJywgIC8vIGludDMyX3QgKGJvb2wpCiAgICAga0tleUVuY29kZXJEZWxheSAgICAgID0gJ2VuY2QnLCAgLy8gaW50MzJfdCAoZnJhbWVzKQogICAgIGtLZXlFbmNvZGVyUGFkZGluZyAgICA9ICdlbmNwJywgIC8vIGludDMyX3QgKGZyYW1lcykKIApAQCAtMTAyLDcgKzEwMCw2IEBACiAgICAga0tleVRpdGxlICAgICAgICAgICAgID0gJ3RpdGwnLCAgLy8gY3N0cmluZwogICAgIGtLZXlZZWFyICAgICAgICAgICAgICA9ICd5ZWFyJywgIC8vIGNzdHJpbmcKICAgICBrS2V5QWxidW1BcnQgICAgICAgICAgPSAnYWxiQScsICAvLyBjb21wcmVzc2VkIGltYWdlIGRhdGEKLSAgICBrS2V5QWxidW1BcnRNSU1FICAgICAgPSAnYWxBTScsICAvLyBjc3RyaW5nCiAgICAga0tleUF1dGhvciAgICAgICAgICAgID0gJ2F1dGgnLCAgLy8gY3N0cmluZwogICAgIGtLZXlDRFRyYWNrTnVtYmVyICAgICA9ICdjZHRyJywgIC8vIGNzdHJpbmcKICAgICBrS2V5RGlzY051bWJlciAgICAgICAgPSAnZG51bScsICAvLyBjc3RyaW5nCkBAIC0xODIsNiArMTc5LDcgQEAKICAgICBrS2V5UHNzaCAgICAgICAgICAgICAgPSAncHNzaCcsICAvLyByYXcgZGF0YQogICAgIGtLZXlDQVN5c3RlbUlEICAgICAgICA9ICdjYWlkJywgIC8vIGludDMyX3QKICAgICBrS2V5Q0FTZXNzaW9uSUQgICAgICAgPSAnc2VpZCcsICAvLyByYXcgZGF0YQorICAgIGtLZXlDQVByaXZhdGVEYXRhICAgICA9ICdjYWRjJywgIC8vIHJhdyBkYXRhCiAKICAgICBrS2V5RW5jcnlwdGVkQnl0ZUJsb2NrID0gJ2NibGsnLCAgLy8gdWludDhfdAogICAgIGtLZXlTa2lwQnl0ZUJsb2NrICAgICA9ICdzYmxrJywgIC8vIHVpbnQ4X3QKQEAgLTE5OSw5ICsxOTcsNiBAQAogICAgIC8vIE1QRUcgdXNlciBkYXRhIG9mZnNldHMKICAgICBrS2V5TXBlZ1VzZXJEYXRhICAgICAgPSAnbXB1ZCcsIC8vIHNpemVfdFtdCiAKLSAgICAvLyBTaXplIG9mIE5BTFUgbGVuZ3RoIGluIG1rdi9tcDQKLSAgICBrS2V5TmFsTGVuZ3RoU2l6ZSAgICAgPSAnbmFscycsIC8vIGludDMyX3QKLQogICAgIC8vIEhEUiByZWxhdGVkCiAgICAga0tleUhkclN0YXRpY0luZm8gICAgPSAnaGRyUycsIC8vIEhEUlN0YXRpY0luZm8KIApAQCAtMjI2LDExICsyMjEsMTMgQEAKICAgICBrS2V5RXhpZk9mZnNldCAgICAgICA9ICdleG9mJywgLy8gaW50NjRfdCwgRXhpZiBkYXRhIG9mZnNldAogICAgIGtLZXlFeGlmU2l6ZSAgICAgICAgID0gJ2V4c3onLCAvLyBpbnQ2NF90LCBFeGlmIGRhdGEgc2l6ZQogICAgIGtLZXlJc0V4aWYgICAgICAgICAgID0gJ2V4aWYnLCAvLyBib29sIChpbnQzMl90KSBidWZmZXIgY29udGFpbnMgZXhpZiBkYXRhIGJsb2NrCi0KICAgICBrS2V5UGNtQmlnRW5kaWFuICAgICA9ICdwY21iJywgLy8gYm9vbCAoaW50MzJfdCkKIAogICAgIC8vIEtleSBmb3IgQUxBQyBNYWdpYyBDb29raWUKICAgICBrS2V5QWxhY01hZ2ljQ29va2llICA9ICdhbG1jJywgLy8gcmF3IGRhdGEKKworICAgIC8vIEFDLTQgQXVkaW9QcmVzZW50YXRpb25JbmZvCisgICAga0tleUF1ZGlvUHJlc2VudGF0aW9uSW5mbyA9ICdhdWRQJywgIC8vIHJhdyBkYXRhCiB9OwogCiBlbnVtIHsKZGlmZiAtLWdpdCBhL21lZGlhL2xpYm1lZGlhbWV0cmljcy9NZWRpYUFuYWx5dGljc0l0ZW0uY3BwIGIvbWVkaWEvbGlibWVkaWFtZXRyaWNzL01lZGlhQW5hbHl0aWNzSXRlbS5jcHAKaW5kZXggMTM1YzliNi4uZDNkZTAxZSAxMDA2NDQKLS0tIGEvbWVkaWEvbGlibWVkaWFtZXRyaWNzL01lZGlhQW5hbHl0aWNzSXRlbS5jcHAKKysrIGIvbWVkaWEvbGlibWVkaWFtZXRyaWNzL01lZGlhQW5hbHl0aWNzSXRlbS5jcHAKQEAgLTQ3OCw3ICs0NzgsNyBAQAogLy8gY2FsbGVyIHJlc3BvbnNpYmxlIGZvciB0aGUgcmV0dXJuZWQgc3RyaW5nCiBib29sIE1lZGlhQW5hbHl0aWNzSXRlbTo6Z2V0Q1N0cmluZyhNZWRpYUFuYWx5dGljc0l0ZW06OkF0dHIgbmFtZSwgY2hhciAqKnZhbHVlKSB7CiAgICAgUHJvcCAqcHJvcCA9IGZpbmRQcm9wKG5hbWUpOwotICAgIGlmIChwcm9wID09IE5VTEwgfHwgcHJvcC0+bVR5cGUgIT0ga1R5cGVEb3VibGUpIHsKKyAgICBpZiAocHJvcCA9PSBOVUxMIHx8IHByb3AtPm1UeXBlICE9IGtUeXBlQ1N0cmluZykgewogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogICAgIGlmICh2YWx1ZSAhPSBOVUxMKSB7CmRpZmYgLS1naXQgYS9tZWRpYS9saWJtZWRpYXBsYXllcjIvQW5kcm9pZC5icCBiL21lZGlhL2xpYm1lZGlhcGxheWVyMi9BbmRyb2lkLmJwCmluZGV4IDFmYTg3ODkuLjIxMDlhZDEgMTAwNjQ0Ci0tLSBhL21lZGlhL2xpYm1lZGlhcGxheWVyMi9BbmRyb2lkLmJwCisrKyBiL21lZGlhL2xpYm1lZGlhcGxheWVyMi9BbmRyb2lkLmJwCkBAIC00LDExICs0LDEwIEBACiAgICAgZXhwb3J0X2luY2x1ZGVfZGlyczogWyJpbmNsdWRlIl0sCiB9CiAKLWNjX2xpYnJhcnkgeworY2NfbGlicmFyeV9zdGF0aWMgewogICAgIG5hbWU6ICJsaWJtZWRpYXBsYXllcjIiLAogCiAgICAgc3JjczogWwotICAgICAgICAiSkF1ZGlvVHJhY2suY3BwIiwKICAgICAgICAgIk1lZGlhUGxheWVyMkF1ZGlvT3V0cHV0LmNwcCIsCiAgICAgICAgICJtZWRpYXBsYXllcjIuY3BwIiwKICAgICBdLApAQCAtMjEsMjIgKzIwLDIwIEBACiAgICAgICAgICJsaWJndWkiLAogICAgICAgICAibGlibG9nIiwKICAgICAgICAgImxpYm1lZGlhX29teCIsCi0gICAgICAgICJsaWJtZWRpYV9wbGF5ZXIyX3V0aWwiLAogICAgICAgICAibGlibWVkaWFleHRyYWN0b3IiLAogICAgICAgICAibGlic3RhZ2VmcmlnaHRfZm91bmRhdGlvbiIsCiAgICAgICAgICJsaWJ1aSIsCiAgICAgICAgICJsaWJ1dGlscyIsCiAKICAgICAgICAgImxpYmNyeXB0byIsCi0gICAgICAgICJsaWJtZWRpYWRybSIsCiAgICAgICAgICJsaWJtZWRpYW1ldHJpY3MiLAogICAgICAgICAibGlibWVkaWFuZGsiLAorICAgICAgICAibGlibWVkaWFuZGtfdXRpbHMiLAogICAgICAgICAibGlibWVkaWF1dGlscyIsCiAgICAgICAgICJsaWJtZW11bnJlYWNoYWJsZSIsCiAgICAgICAgICJsaWJuYXRpdmV3aW5kb3ciLAogICAgICAgICAibGlicG93ZXJtYW5hZ2VyIiwKICAgICAgICAgImxpYnN0YWdlZnJpZ2h0X2h0dHBsaXZlIiwKLSAgICAgICAgImxpYnN0YWdlZnJpZ2h0X3BsYXllcjIiLAogICAgIF0sCiAKICAgICBleHBvcnRfc2hhcmVkX2xpYl9oZWFkZXJzOiBbCkBAIC00OSwxMSArNDYsMjAgQEAKICAgICAgICAgIm1lZGlhX3BsdWdpbl9oZWFkZXJzIiwKICAgICBdLAogCisgICAgaW5jbHVkZV9kaXJzOiBbCisgICAgICAgICJmcmFtZXdvcmtzL2Jhc2UvY29yZS9qbmkiLAorICAgIF0sCisKICAgICBzdGF0aWNfbGliczogWwogICAgICAgICAibGlibWVkaWFfaGVscGVyIiwKKyAgICAgICAgImxpYm1lZGlhcGxheWVyMi1wcm90b3MiLAorICAgICAgICAibGlibWVkaWFfcGxheWVyMl91dGlsIiwKKyAgICAgICAgImxpYnByb3RvYnVmLWNwcC1saXRlIiwKICAgICAgICAgImxpYnN0YWdlZnJpZ2h0X251cGxheWVyMiIsCisgICAgICAgICJsaWJzdGFnZWZyaWdodF9wbGF5ZXIyIiwKICAgICAgICAgImxpYnN0YWdlZnJpZ2h0X3J0c3AiLAotICAgICAgICAibGlic3RhZ2VmcmlnaHRfdGltZWR0ZXh0IiwKKyAgICAgICAgImxpYnN0YWdlZnJpZ2h0X3RpbWVkdGV4dDIiLAorICAgICAgICAibGlibWVkaWEyX2puaV9jb3JlIiwKICAgICBdLAogCiAgICAgZXhwb3J0X2luY2x1ZGVfZGlyczogWwpAQCAtNzcsMyArODMsNTUgQEAKICAgICAgICAgfSwKICAgICB9LAogfQorCitjY19saWJyYXJ5IHsKKyAgICBuYW1lOiAibGlibWVkaWEyX2puaV9jb3JlIiwKKworICAgIHNyY3M6IFsKKyAgICAgICAgIkphdmFWTUhlbHBlci5jcHAiLAorICAgICAgICAiSkF1ZGlvVHJhY2suY3BwIiwKKyAgICAgICAgIkpNZWRpYTJIVFRQU2VydmljZS5jcHAiLAorICAgICAgICAiSk1lZGlhMkhUVFBDb25uZWN0aW9uLmNwcCIsCisgICAgXSwKKworICAgIHNoYXJlZF9saWJzOiBbCisgICAgICAgICJhbmRyb2lkLmhpZGwudG9rZW5AMS4wLXV0aWxzIiwKKyAgICAgICAgImxpYmxvZyIsCisgICAgICAgICJsaWJjdXRpbHMiLAorICAgICAgICAibGlidXRpbHMiLAorICAgICAgICAibGliYmluZGVyIiwKKyAgICAgICAgImxpYnN0YWdlZnJpZ2h0X2ZvdW5kYXRpb24iLAorICAgICAgICAibGlibWVkaWFleHRyYWN0b3IiLAorICAgICAgICAibGliZGwiLAorICAgICAgICAibGliYXVkaW91dGlscyIsCisgICAgICAgICJsaWJhdWRpb2NsaWVudCIsCisgICAgICAgICJsaWJuYXRpdmVoZWxwZXIiLAorICAgIF0sCisKKyAgICBpbmNsdWRlX2RpcnM6IFsKKyAgICAgICAgImZyYW1ld29ya3MvYXYvbWVkaWEvbGlibWVkaWEvaW5jbHVkZSIsCisgICAgICAgICJmcmFtZXdvcmtzL2Jhc2UvY29yZS9qbmkiLAorICAgIF0sCisKKyAgICBleHBvcnRfaW5jbHVkZV9kaXJzOiBbCisgICAgICAgICJpbmNsdWRlIiwKKyAgICBdLAorCisgICAgY2ZsYWdzOiBbCisgICAgICAgICItV2Vycm9yIiwKKyAgICAgICAgIi1Xbm8tZXJyb3I9ZGVwcmVjYXRlZC1kZWNsYXJhdGlvbnMiLAorICAgICAgICAiLVdhbGwiLAorICAgIF0sCisKKyAgICBzYW5pdGl6ZTogeworICAgICAgICBtaXNjX3VuZGVmaW5lZDogWworICAgICAgICAgICAgInVuc2lnbmVkLWludGVnZXItb3ZlcmZsb3ciLAorICAgICAgICAgICAgInNpZ25lZC1pbnRlZ2VyLW92ZXJmbG93IiwKKyAgICAgICAgXSwKKyAgICAgICAgY2ZpOiB0cnVlLAorICAgICAgICBkaWFnOiB7CisgICAgICAgICAgICBjZmk6IHRydWUsCisgICAgICAgIH0sCisgICAgfSwKKworfQpkaWZmIC0tZ2l0IGEvbWVkaWEvbGlibWVkaWFwbGF5ZXIyL0pBdWRpb1RyYWNrLmNwcCBiL21lZGlhL2xpYm1lZGlhcGxheWVyMi9KQXVkaW9UcmFjay5jcHAKaW5kZXggYWMwY2M1Ny4uN2MyMTkxYiAxMDA2NDQKLS0tIGEvbWVkaWEvbGlibWVkaWFwbGF5ZXIyL0pBdWRpb1RyYWNrLmNwcAorKysgYi9tZWRpYS9saWJtZWRpYXBsYXllcjIvSkF1ZGlvVHJhY2suY3BwCkBAIC0yMSwyNyArMjEsMjggQEAKICNpbmNsdWRlICJtZWRpYXBsYXllcjIvSkF1ZGlvVHJhY2suaCIKIAogI2luY2x1ZGUgPGFuZHJvaWRfbWVkaWFfQXVkaW9FcnJvcnMuaD4KLSNpbmNsdWRlIDxhbmRyb2lkX3J1bnRpbWUvQW5kcm9pZFJ1bnRpbWUuaD4KKyNpbmNsdWRlIDxtZWRpYXBsYXllcjIvSmF2YVZNSGVscGVyLmg+CiAKIG5hbWVzcGFjZSBhbmRyb2lkIHsKIAogLy8gVE9ETzogU3RvcmUgSmF2YSBjbGFzcy9tZXRob2RJRCBhcyBhIG1lbWJlciB2YXJpYWJsZSBpbiB0aGUgY2xhc3MuCiAvLyBUT0RPOiBBZGQgTlVMTCAmJiBFeGNlcHRpb24gY2hlY2tzIGFmdGVyIGV2ZXJ5IEpOSSBjYWxsLgogSkF1ZGlvVHJhY2s6OkpBdWRpb1RyYWNrKCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gPCBVc2FnZXMgb2YgdGhlIGFyZ3VtZW50cyBhcmUgYmVsb3cgPgotICAgICAgICBhdWRpb19zdHJlYW1fdHlwZV90IHN0cmVhbVR5cGUsICAgICAgICAgICAgICAgLy8gQXVkaW9BdWRpb0F0dHJpYnV0ZXMKICAgICAgICAgdWludDMyX3Qgc2FtcGxlUmF0ZSwgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIEF1ZGlvRm9ybWF0ICYmIGJ1ZmZlclNpemVJbkJ5dGVzCiAgICAgICAgIGF1ZGlvX2Zvcm1hdF90IGZvcm1hdCwgICAgICAgICAgICAgICAgICAgICAgICAvLyBBdWRpb0Zvcm1hdCAmJiBidWZmZXJTaXplSW5CeXRlcwogICAgICAgICBhdWRpb19jaGFubmVsX21hc2tfdCBjaGFubmVsTWFzaywgICAgICAgICAgICAgLy8gQXVkaW9Gb3JtYXQgJiYgYnVmZmVyU2l6ZUluQnl0ZXMKICAgICAgICAgY2FsbGJhY2tfdCBjYmYsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIE9mZmxvYWQKICAgICAgICAgdm9pZCogdXNlciwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIE9mZmxvYWQKICAgICAgICAgc2l6ZV90IGZyYW1lQ291bnQsICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGJ1ZmZlclNpemVJbkJ5dGVzCi0gICAgICAgIGF1ZGlvX3Nlc3Npb25fdCBzZXNzaW9uSWQsICAgICAgICAgICAgICAgICAgICAvLyBBdWRpb1RyYWNrCi0gICAgICAgIGNvbnN0IGF1ZGlvX2F0dHJpYnV0ZXNfdCogcEF0dHJpYnV0ZXMsICAgICAgICAvLyBBdWRpb0F0dHJpYnV0ZXMKKyAgICAgICAgaW50MzJfdCBzZXNzaW9uSWQsICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIEF1ZGlvVHJhY2sKKyAgICAgICAgY29uc3Qgam9iamVjdCBhdHRyaWJ1dGVzLCAgICAgICAgICAgICAgICAgICAgIC8vIEF1ZGlvQXR0cmlidXRlcwogICAgICAgICBmbG9hdCBtYXhSZXF1aXJlZFNwZWVkKSB7ICAgICAgICAgICAgICAgICAgICAgLy8gYnVmZmVyU2l6ZUluQnl0ZXMKIAotICAgIEpOSUVudiAqZW52ID0gQW5kcm9pZFJ1bnRpbWU6OmdldEpOSUVudigpOworICAgIEpOSUVudiAqZW52ID0gSmF2YVZNSGVscGVyOjpnZXRKTklFbnYoKTsKKwogICAgIGpjbGFzcyBqQXVkaW9UcmFja0NscyA9IGVudi0+RmluZENsYXNzKCJhbmRyb2lkL21lZGlhL0F1ZGlvVHJhY2siKTsKLSAgICBtQXVkaW9UcmFja0NscyA9IChqY2xhc3MpIGVudi0+TmV3R2xvYmFsUmVmKGpBdWRpb1RyYWNrQ2xzKTsKKyAgICBtQXVkaW9UcmFja0NscyA9IHJlaW50ZXJwcmV0X2Nhc3Q8amNsYXNzPihlbnYtPk5ld0dsb2JhbFJlZihqQXVkaW9UcmFja0NscykpOworICAgIGVudi0+RGVsZXRlTG9jYWxSZWYoakF1ZGlvVHJhY2tDbHMpOwogCiAgICAgbWF4UmVxdWlyZWRTcGVlZCA9IHN0ZDo6bWluKHN0ZDo6bWF4KG1heFJlcXVpcmVkU3BlZWQsIDEuMGYpLCBBVURJT19USU1FU1RSRVRDSF9TUEVFRF9NQVgpOwogCkBAIC02NCwxMCArNjUsMTkgQEAKICAgICBqbWV0aG9kSUQgakJ1aWxkZXJDdG9yID0gZW52LT5HZXRNZXRob2RJRChqQnVpbGRlckNscywgIjxpbml0PiIsICIoKVYiKTsKICAgICBqb2JqZWN0IGpCdWlsZGVyT2JqID0gZW52LT5OZXdPYmplY3QoakJ1aWxkZXJDbHMsIGpCdWlsZGVyQ3Rvcik7CiAKLSAgICBqbWV0aG9kSUQgalNldEF1ZGlvQXR0cmlidXRlcyA9IGVudi0+R2V0TWV0aG9kSUQoakJ1aWxkZXJDbHMsICJzZXRBdWRpb0F0dHJpYnV0ZXMiLAotICAgICAgICAgICAgIihMYW5kcm9pZC9tZWRpYS9BdWRpb0F0dHJpYnV0ZXM7KUxhbmRyb2lkL21lZGlhL0F1ZGlvVHJhY2skQnVpbGRlcjsiKTsKLSAgICBqQnVpbGRlck9iaiA9IGVudi0+Q2FsbE9iamVjdE1ldGhvZChqQnVpbGRlck9iaiwgalNldEF1ZGlvQXR0cmlidXRlcywKLSAgICAgICAgICAgIEpBdWRpb0F0dHJpYnV0ZXM6OmNyZWF0ZUF1ZGlvQXR0cmlidXRlc09iaihlbnYsIHBBdHRyaWJ1dGVzLCBzdHJlYW1UeXBlKSk7CisgICAgeworICAgICAgICBzcDxKT2JqZWN0SG9sZGVyPiBhdWRpb0F0dHJpYnV0ZXNPYmo7CisgICAgICAgIGlmIChhdHRyaWJ1dGVzICE9IE5VTEwpIHsKKyAgICAgICAgICAgIGF1ZGlvQXR0cmlidXRlc09iaiA9IG5ldyBKT2JqZWN0SG9sZGVyKGF0dHJpYnV0ZXMpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgYXVkaW9BdHRyaWJ1dGVzT2JqID0gbmV3IEpPYmplY3RIb2xkZXIoCisgICAgICAgICAgICAgICAgICAgIEpBdWRpb0F0dHJpYnV0ZXM6OmNyZWF0ZUF1ZGlvQXR0cmlidXRlc09iaihlbnYsIE5VTEwpKTsKKyAgICAgICAgfQorICAgICAgICBqbWV0aG9kSUQgalNldEF1ZGlvQXR0cmlidXRlcyA9IGVudi0+R2V0TWV0aG9kSUQoakJ1aWxkZXJDbHMsICJzZXRBdWRpb0F0dHJpYnV0ZXMiLAorICAgICAgICAgICAgICAgICIoTGFuZHJvaWQvbWVkaWEvQXVkaW9BdHRyaWJ1dGVzOylMYW5kcm9pZC9tZWRpYS9BdWRpb1RyYWNrJEJ1aWxkZXI7Iik7CisgICAgICAgIGpCdWlsZGVyT2JqID0gZW52LT5DYWxsT2JqZWN0TWV0aG9kKGpCdWlsZGVyT2JqLAorICAgICAgICAgICAgICAgIGpTZXRBdWRpb0F0dHJpYnV0ZXMsIGF1ZGlvQXR0cmlidXRlc09iai0+Z2V0Sk9iamVjdCgpKTsKKyAgICB9CiAKICAgICBqbWV0aG9kSUQgalNldEF1ZGlvRm9ybWF0ID0gZW52LT5HZXRNZXRob2RJRChqQnVpbGRlckNscywgInNldEF1ZGlvRm9ybWF0IiwKICAgICAgICAgICAgICIoTGFuZHJvaWQvbWVkaWEvQXVkaW9Gb3JtYXQ7KUxhbmRyb2lkL21lZGlhL0F1ZGlvVHJhY2skQnVpbGRlcjsiKTsKQEAgLTkyLDYgKzEwMiw3IEBACiAgICAgICAgIGpCdWlsZGVyT2JqID0gZW52LT5DYWxsT2JqZWN0TWV0aG9kKGpCdWlsZGVyT2JqLCBqU2V0U2Vzc2lvbklkLCBzZXNzaW9uSWQpOwogICAgIH0KIAorICAgIG1GbGFncyA9IEFVRElPX09VVFBVVF9GTEFHX05PTkU7CiAgICAgaWYgKGNiZiAhPSBOVUxMKSB7CiAgICAgICAgIGptZXRob2RJRCBqU2V0T2ZmbG9hZGVkUGxheWJhY2sgPSBlbnYtPkdldE1ldGhvZElEKGpCdWlsZGVyQ2xzLCAic2V0T2ZmbG9hZGVkUGxheWJhY2siLAogICAgICAgICAgICAgICAgICIoWilMYW5kcm9pZC9tZWRpYS9BdWRpb1RyYWNrJEJ1aWxkZXI7Iik7CkBAIC0xMDAsNyArMTExLDkgQEAKICAgICB9CiAKICAgICBqbWV0aG9kSUQgakJ1aWxkID0gZW52LT5HZXRNZXRob2RJRChqQnVpbGRlckNscywgImJ1aWxkIiwgIigpTGFuZHJvaWQvbWVkaWEvQXVkaW9UcmFjazsiKTsKLSAgICBtQXVkaW9UcmFja09iaiA9IGVudi0+Q2FsbE9iamVjdE1ldGhvZChqQnVpbGRlck9iaiwgakJ1aWxkKTsKKyAgICBqb2JqZWN0IGpBdWRpb1RyYWNrT2JqID0gZW52LT5DYWxsT2JqZWN0TWV0aG9kKGpCdWlsZGVyT2JqLCBqQnVpbGQpOworICAgIG1BdWRpb1RyYWNrT2JqID0gcmVpbnRlcnByZXRfY2FzdDxqb2JqZWN0PihlbnYtPk5ld0dsb2JhbFJlZihqQXVkaW9UcmFja09iaikpOworICAgIGVudi0+RGVsZXRlTG9jYWxSZWYoakJ1aWxkZXJPYmopOwogCiAgICAgaWYgKGNiZiAhPSBOVUxMKSB7CiAgICAgICAgIC8vIFNldCBvZmZsb2FkIG1vZGUgY2FsbGJhY2sKQEAgLTExNiwxOSArMTI5LDIwIEBACiB9CiAKIEpBdWRpb1RyYWNrOjp+SkF1ZGlvVHJhY2soKSB7Ci0gICAgSk5JRW52ICplbnYgPSBBbmRyb2lkUnVudGltZTo6Z2V0Sk5JRW52KCk7CisgICAgSk5JRW52ICplbnYgPSBKYXZhVk1IZWxwZXI6OmdldEpOSUVudigpOwogICAgIGVudi0+RGVsZXRlR2xvYmFsUmVmKG1BdWRpb1RyYWNrQ2xzKTsKKyAgICBlbnYtPkRlbGV0ZUdsb2JhbFJlZihtQXVkaW9UcmFja09iaik7CiB9CiAKIHNpemVfdCBKQXVkaW9UcmFjazo6ZnJhbWVDb3VudCgpIHsKLSAgICBKTklFbnYgKmVudiA9IEFuZHJvaWRSdW50aW1lOjpnZXRKTklFbnYoKTsKKyAgICBKTklFbnYgKmVudiA9IEphdmFWTUhlbHBlcjo6Z2V0Sk5JRW52KCk7CiAgICAgam1ldGhvZElEIGpHZXRCdWZmZXJTaXplSW5GcmFtZXMgPSBlbnYtPkdldE1ldGhvZElEKAogICAgICAgICAgICAgbUF1ZGlvVHJhY2tDbHMsICJnZXRCdWZmZXJTaXplSW5GcmFtZXMiLCAiKClJIik7CiAgICAgcmV0dXJuIGVudi0+Q2FsbEludE1ldGhvZChtQXVkaW9UcmFja09iaiwgakdldEJ1ZmZlclNpemVJbkZyYW1lcyk7CiB9CiAKIHNpemVfdCBKQXVkaW9UcmFjazo6Y2hhbm5lbENvdW50KCkgewotICAgIEpOSUVudiAqZW52ID0gQW5kcm9pZFJ1bnRpbWU6OmdldEpOSUVudigpOworICAgIEpOSUVudiAqZW52ID0gSmF2YVZNSGVscGVyOjpnZXRKTklFbnYoKTsKICAgICBqbWV0aG9kSUQgakdldENoYW5uZWxDb3VudCA9IGVudi0+R2V0TWV0aG9kSUQobUF1ZGlvVHJhY2tDbHMsICJnZXRDaGFubmVsQ291bnQiLCAiKClJIik7CiAgICAgcmV0dXJuIGVudi0+Q2FsbEludE1ldGhvZChtQXVkaW9UcmFja09iaiwgakdldENoYW5uZWxDb3VudCk7CiB9CkBAIC0xNDMsNyArMTU3LDcgQEAKICAgICAgICAgcmV0dXJuIEJBRF9WQUxVRTsKICAgICB9CiAKLSAgICBKTklFbnYgKmVudiA9IEFuZHJvaWRSdW50aW1lOjpnZXRKTklFbnYoKTsKKyAgICBKTklFbnYgKmVudiA9IEphdmFWTUhlbHBlcjo6Z2V0Sk5JRW52KCk7CiAgICAgam1ldGhvZElEIGpHZXRQbGF5YmFja0hlYWRQb3NpdGlvbiA9IGVudi0+R2V0TWV0aG9kSUQoCiAgICAgICAgICAgICBtQXVkaW9UcmFja0NscywgImdldFBsYXliYWNrSGVhZFBvc2l0aW9uIiwgIigpSSIpOwogICAgICpwb3NpdGlvbiA9IGVudi0+Q2FsbEludE1ldGhvZChtQXVkaW9UcmFja09iaiwgakdldFBsYXliYWNrSGVhZFBvc2l0aW9uKTsKQEAgLTE1MSwyMSArMTY1LDIxIEBACiAgICAgcmV0dXJuIE5PX0VSUk9SOwogfQogCi1ib29sIEpBdWRpb1RyYWNrOjpnZXRUaW1lc3RhbXAoQXVkaW9UaW1lc3RhbXAmIHRpbWVzdGFtcCkgewotICAgIEpOSUVudiAqZW52ID0gQW5kcm9pZFJ1bnRpbWU6OmdldEpOSUVudigpOworc3RhdHVzX3QgSkF1ZGlvVHJhY2s6OmdldFRpbWVzdGFtcChBdWRpb1RpbWVzdGFtcCYgdGltZXN0YW1wKSB7CisgICAgSk5JRW52ICplbnYgPSBKYXZhVk1IZWxwZXI6OmdldEpOSUVudigpOwogCiAgICAgamNsYXNzIGpBdWRpb1RpbWVTdGFtcENscyA9IGVudi0+RmluZENsYXNzKCJhbmRyb2lkL21lZGlhL0F1ZGlvVGltZXN0YW1wIik7CiAgICAgam9iamVjdCBqQXVkaW9UaW1lU3RhbXBPYmogPSBlbnYtPkFsbG9jT2JqZWN0KGpBdWRpb1RpbWVTdGFtcENscyk7CiAKLSAgICBqZmllbGRJRCBqRnJhbWVQb3NpdGlvbiA9IGVudi0+R2V0RmllbGRJRChqQXVkaW9UaW1lU3RhbXBDbHMsICJmcmFtZVBvc2l0aW9uIiwgIkwiKTsKLSAgICBqZmllbGRJRCBqTmFub1RpbWUgPSBlbnYtPkdldEZpZWxkSUQoakF1ZGlvVGltZVN0YW1wQ2xzLCAibmFub1RpbWUiLCAiTCIpOworICAgIGpmaWVsZElEIGpGcmFtZVBvc2l0aW9uID0gZW52LT5HZXRGaWVsZElEKGpBdWRpb1RpbWVTdGFtcENscywgImZyYW1lUG9zaXRpb24iLCAiSiIpOworICAgIGpmaWVsZElEIGpOYW5vVGltZSA9IGVudi0+R2V0RmllbGRJRChqQXVkaW9UaW1lU3RhbXBDbHMsICJuYW5vVGltZSIsICJKIik7CiAKICAgICBqbWV0aG9kSUQgakdldFRpbWVzdGFtcCA9IGVudi0+R2V0TWV0aG9kSUQobUF1ZGlvVHJhY2tDbHMsCi0gICAgICAgICAgICAiZ2V0VGltZXN0YW1wIiwgIihMYW5kcm9pZC9tZWRpYS9BdWRpb1RpbWVzdGFtcClCIik7CisgICAgICAgICAgICAiZ2V0VGltZXN0YW1wIiwgIihMYW5kcm9pZC9tZWRpYS9BdWRpb1RpbWVzdGFtcDspWiIpOwogICAgIGJvb2wgc3VjY2VzcyA9IGVudi0+Q2FsbEJvb2xlYW5NZXRob2QobUF1ZGlvVHJhY2tPYmosIGpHZXRUaW1lc3RhbXAsIGpBdWRpb1RpbWVTdGFtcE9iaik7CiAKICAgICBpZiAoIXN1Y2Nlc3MpIHsKLSAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICByZXR1cm4gTk9fSU5JVDsKICAgICB9CiAKICAgICBsb25nIGxvbmcgZnJhbWVQb3NpdGlvbiA9IGVudi0+R2V0TG9uZ0ZpZWxkKGpBdWRpb1RpbWVTdGFtcE9iaiwgakZyYW1lUG9zaXRpb24pOwpAQCAtMTc4LDcgKzE5Miw3IEBACiAgICAgdGltZXN0YW1wLm1UaW1lID0gdHM7CiAgICAgdGltZXN0YW1wLm1Qb3NpdGlvbiA9ICh1aW50MzJfdCkgZnJhbWVQb3NpdGlvbjsKIAotICAgIHJldHVybiB0cnVlOworICAgIHJldHVybiBOT19FUlJPUjsKIH0KIAogc3RhdHVzX3QgSkF1ZGlvVHJhY2s6OmdldFRpbWVzdGFtcChFeHRlbmRlZFRpbWVzdGFtcCAqdGltZXN0YW1wIF9fdW51c2VkKSB7CkBAIC0xODksNyArMjAzLDcgQEAKIHN0YXR1c190IEpBdWRpb1RyYWNrOjpzZXRQbGF5YmFja1JhdGUoY29uc3QgQXVkaW9QbGF5YmFja1JhdGUgJnBsYXliYWNrUmF0ZSkgewogICAgIC8vIFRPRE86IGV4aXN0aW5nIG5hdGl2ZSBBdWRpb1RyYWNrIHJldHVybnMgSU5WQUxJRF9PUEVSQVRJT04gb24gb2ZmbG9hZC9kaXJlY3QvZmFzdCB0cmFja3MuCiAgICAgLy8gU2hvdWxkIHdlIGRvIHRoZSBzYW1lIHRoaW5nPwotICAgIEpOSUVudiAqZW52ID0gQW5kcm9pZFJ1bnRpbWU6OmdldEpOSUVudigpOworICAgIEpOSUVudiAqZW52ID0gSmF2YVZNSGVscGVyOjpnZXRKTklFbnYoKTsKIAogICAgIGpjbGFzcyBqUGxheWJhY2tQYXJhbXNDbHMgPSBlbnYtPkZpbmRDbGFzcygiYW5kcm9pZC9tZWRpYS9QbGF5YmFja1BhcmFtcyIpOwogICAgIGptZXRob2RJRCBqUGxheWJhY2tQYXJhbXNDdG9yID0gZW52LT5HZXRNZXRob2RJRChqUGxheWJhY2tQYXJhbXNDbHMsICI8aW5pdD4iLCAiKClWIik7CkBAIC0yMjQsNyArMjM4LDcgQEAKIH0KIAogY29uc3QgQXVkaW9QbGF5YmFja1JhdGUgSkF1ZGlvVHJhY2s6OmdldFBsYXliYWNrUmF0ZSgpIHsKLSAgICBKTklFbnYgKmVudiA9IEFuZHJvaWRSdW50aW1lOjpnZXRKTklFbnYoKTsKKyAgICBKTklFbnYgKmVudiA9IEphdmFWTUhlbHBlcjo6Z2V0Sk5JRW52KCk7CiAKICAgICBqbWV0aG9kSUQgakdldFBsYXliYWNrUGFyYW1zID0gZW52LT5HZXRNZXRob2RJRCgKICAgICAgICAgICAgIG1BdWRpb1RyYWNrQ2xzLCAiZ2V0UGxheWJhY2tQYXJhbXMiLCAiKClMYW5kcm9pZC9tZWRpYS9QbGF5YmFja1BhcmFtczsiKTsKQEAgLTI2Niw3ICsyODAsNyBAQAogICAgICAgICByZXR1cm4gbWVkaWE6OlZvbHVtZVNoYXBlcjo6U3RhdHVzKEJBRF9WQUxVRSk7CiAgICAgfQogCi0gICAgSk5JRW52ICplbnYgPSBBbmRyb2lkUnVudGltZTo6Z2V0Sk5JRW52KCk7CisgICAgSk5JRW52ICplbnYgPSBKYXZhVk1IZWxwZXI6OmdldEpOSUVudigpOwogCiAgICAgam1ldGhvZElEIGpDcmVhdGVWb2x1bWVTaGFwZXIgPSBlbnYtPkdldE1ldGhvZElEKG1BdWRpb1RyYWNrQ2xzLCAiY3JlYXRlVm9sdW1lU2hhcGVyIiwKICAgICAgICAgICAgICIoTGFuZHJvaWQvbWVkaWEvVm9sdW1lU2hhcGVyJENvbmZpZ3VyYXRpb247KUxhbmRyb2lkL21lZGlhL1ZvbHVtZVNoYXBlcjsiKTsKQEAgLTI4Miw3ICsyOTYsNyBAQAogfQogCiBzdGF0dXNfdCBKQXVkaW9UcmFjazo6c2V0QXV4RWZmZWN0U2VuZExldmVsKGZsb2F0IGxldmVsKSB7Ci0gICAgSk5JRW52ICplbnYgPSBBbmRyb2lkUnVudGltZTo6Z2V0Sk5JRW52KCk7CisgICAgSk5JRW52ICplbnYgPSBKYXZhVk1IZWxwZXI6OmdldEpOSUVudigpOwogICAgIGptZXRob2RJRCBqU2V0QXV4RWZmZWN0U2VuZExldmVsID0gZW52LT5HZXRNZXRob2RJRCgKICAgICAgICAgICAgIG1BdWRpb1RyYWNrQ2xzLCAic2V0QXV4RWZmZWN0U2VuZExldmVsIiwgIihGKUkiKTsKICAgICBpbnQgcmVzdWx0ID0gZW52LT5DYWxsSW50TWV0aG9kKG1BdWRpb1RyYWNrT2JqLCBqU2V0QXV4RWZmZWN0U2VuZExldmVsLCBsZXZlbCk7CkBAIC0yOTAsMTQgKzMwNCwxNCBAQAogfQogCiBzdGF0dXNfdCBKQXVkaW9UcmFjazo6YXR0YWNoQXV4RWZmZWN0KGludCBlZmZlY3RJZCkgewotICAgIEpOSUVudiAqZW52ID0gQW5kcm9pZFJ1bnRpbWU6OmdldEpOSUVudigpOworICAgIEpOSUVudiAqZW52ID0gSmF2YVZNSGVscGVyOjpnZXRKTklFbnYoKTsKICAgICBqbWV0aG9kSUQgakF0dGFjaEF1eEVmZmVjdCA9IGVudi0+R2V0TWV0aG9kSUQobUF1ZGlvVHJhY2tDbHMsICJhdHRhY2hBdXhFZmZlY3QiLCAiKEkpSSIpOwogICAgIGludCByZXN1bHQgPSBlbnYtPkNhbGxJbnRNZXRob2QobUF1ZGlvVHJhY2tPYmosIGpBdHRhY2hBdXhFZmZlY3QsIGVmZmVjdElkKTsKICAgICByZXR1cm4gamF2YVRvTmF0aXZlU3RhdHVzKHJlc3VsdCk7CiB9CiAKIHN0YXR1c190IEpBdWRpb1RyYWNrOjpzZXRWb2x1bWUoZmxvYXQgbGVmdCwgZmxvYXQgcmlnaHQpIHsKLSAgICBKTklFbnYgKmVudiA9IEFuZHJvaWRSdW50aW1lOjpnZXRKTklFbnYoKTsKKyAgICBKTklFbnYgKmVudiA9IEphdmFWTUhlbHBlcjo6Z2V0Sk5JRW52KCk7CiAgICAgLy8gVE9ETzogSmF2YSBzZXRTdGVyZW9Wb2x1bWUgaXMgZGVwcmVjYXRlZC4gRG8gd2UgcmVhbGx5IG5lZWQgdGhpcyBtZXRob2Q/CiAgICAgam1ldGhvZElEIGpTZXRTdGVyZW9Wb2x1bWUgPSBlbnYtPkdldE1ldGhvZElEKG1BdWRpb1RyYWNrQ2xzLCAic2V0U3RlcmVvVm9sdW1lIiwgIihGRilJIik7CiAgICAgaW50IHJlc3VsdCA9IGVudi0+Q2FsbEludE1ldGhvZChtQXVkaW9UcmFja09iaiwgalNldFN0ZXJlb1ZvbHVtZSwgbGVmdCwgcmlnaHQpOwpAQCAtMzA1LDE0ICszMTksMTQgQEAKIH0KIAogc3RhdHVzX3QgSkF1ZGlvVHJhY2s6OnNldFZvbHVtZShmbG9hdCB2b2x1bWUpIHsKLSAgICBKTklFbnYgKmVudiA9IEFuZHJvaWRSdW50aW1lOjpnZXRKTklFbnYoKTsKKyAgICBKTklFbnYgKmVudiA9IEphdmFWTUhlbHBlcjo6Z2V0Sk5JRW52KCk7CiAgICAgam1ldGhvZElEIGpTZXRWb2x1bWUgPSBlbnYtPkdldE1ldGhvZElEKG1BdWRpb1RyYWNrQ2xzLCAic2V0Vm9sdW1lIiwgIihGKUkiKTsKICAgICBpbnQgcmVzdWx0ID0gZW52LT5DYWxsSW50TWV0aG9kKG1BdWRpb1RyYWNrT2JqLCBqU2V0Vm9sdW1lLCB2b2x1bWUpOwogICAgIHJldHVybiBqYXZhVG9OYXRpdmVTdGF0dXMocmVzdWx0KTsKIH0KIAogc3RhdHVzX3QgSkF1ZGlvVHJhY2s6OnN0YXJ0KCkgewotICAgIEpOSUVudiAqZW52ID0gQW5kcm9pZFJ1bnRpbWU6OmdldEpOSUVudigpOworICAgIEpOSUVudiAqZW52ID0gSmF2YVZNSGVscGVyOjpnZXRKTklFbnYoKTsKICAgICBqbWV0aG9kSUQgalBsYXkgPSBlbnYtPkdldE1ldGhvZElEKG1BdWRpb1RyYWNrQ2xzLCAicGxheSIsICIoKVYiKTsKICAgICAvLyBUT0RPOiBTaG91bGQgd2UgY2F0Y2ggdGhlIEphdmEgSWxsZWdhbFN0YXRlRXhjZXB0aW9uIGZyb20gcGxheSgpPwogICAgIGVudi0+Q2FsbFZvaWRNZXRob2QobUF1ZGlvVHJhY2tPYmosIGpQbGF5KTsKQEAgLTMyNCw3ICszMzgsNyBAQAogICAgICAgICByZXR1cm4gQkFEX1ZBTFVFOwogICAgIH0KIAotICAgIEpOSUVudiAqZW52ID0gQW5kcm9pZFJ1bnRpbWU6OmdldEpOSUVudigpOworICAgIEpOSUVudiAqZW52ID0gSmF2YVZNSGVscGVyOjpnZXRKTklFbnYoKTsKICAgICBqYnl0ZUFycmF5IGpBdWRpb0RhdGEgPSBlbnYtPk5ld0J5dGVBcnJheShzaXplKTsKICAgICBlbnYtPlNldEJ5dGVBcnJheVJlZ2lvbihqQXVkaW9EYXRhLCAwLCBzaXplLCAoamJ5dGUgKikgYnVmZmVyKTsKIApAQCAtMzUzLDcgKzM2Nyw3IEBACiB9CiAKIHZvaWQgSkF1ZGlvVHJhY2s6OnN0b3AoKSB7Ci0gICAgSk5JRW52ICplbnYgPSBBbmRyb2lkUnVudGltZTo6Z2V0Sk5JRW52KCk7CisgICAgSk5JRW52ICplbnYgPSBKYXZhVk1IZWxwZXI6OmdldEpOSUVudigpOwogICAgIGptZXRob2RJRCBqU3RvcCA9IGVudi0+R2V0TWV0aG9kSUQobUF1ZGlvVHJhY2tDbHMsICJzdG9wIiwgIigpViIpOwogICAgIGVudi0+Q2FsbFZvaWRNZXRob2QobUF1ZGlvVHJhY2tPYmosIGpTdG9wKTsKICAgICAvLyBUT0RPOiBTaG91bGQgd2UgY2F0Y2ggSWxsZWdhbFN0YXRlRXhjZXB0aW9uPwpAQCAtMzY1LDIwICszNzksMjAgQEAKIH0KIAogdm9pZCBKQXVkaW9UcmFjazo6Zmx1c2goKSB7Ci0gICAgSk5JRW52ICplbnYgPSBBbmRyb2lkUnVudGltZTo6Z2V0Sk5JRW52KCk7CisgICAgSk5JRW52ICplbnYgPSBKYXZhVk1IZWxwZXI6OmdldEpOSUVudigpOwogICAgIGptZXRob2RJRCBqRmx1c2ggPSBlbnYtPkdldE1ldGhvZElEKG1BdWRpb1RyYWNrQ2xzLCAiZmx1c2giLCAiKClWIik7CiAgICAgZW52LT5DYWxsVm9pZE1ldGhvZChtQXVkaW9UcmFja09iaiwgakZsdXNoKTsKIH0KIAogdm9pZCBKQXVkaW9UcmFjazo6cGF1c2UoKSB7Ci0gICAgSk5JRW52ICplbnYgPSBBbmRyb2lkUnVudGltZTo6Z2V0Sk5JRW52KCk7CisgICAgSk5JRW52ICplbnYgPSBKYXZhVk1IZWxwZXI6OmdldEpOSUVudigpOwogICAgIGptZXRob2RJRCBqUGF1c2UgPSBlbnYtPkdldE1ldGhvZElEKG1BdWRpb1RyYWNrQ2xzLCAicGF1c2UiLCAiKClWIik7CiAgICAgZW52LT5DYWxsVm9pZE1ldGhvZChtQXVkaW9UcmFja09iaiwgalBhdXNlKTsKICAgICAvLyBUT0RPOiBTaG91bGQgd2UgY2F0Y2ggSWxsZWdhbFN0YXRlRXhjZXB0aW9uPwogfQogCiBib29sIEpBdWRpb1RyYWNrOjppc1BsYXlpbmcoKSBjb25zdCB7Ci0gICAgSk5JRW52ICplbnYgPSBBbmRyb2lkUnVudGltZTo6Z2V0Sk5JRW52KCk7CisgICAgSk5JRW52ICplbnYgPSBKYXZhVk1IZWxwZXI6OmdldEpOSUVudigpOwogICAgIGptZXRob2RJRCBqR2V0UGxheVN0YXRlID0gZW52LT5HZXRNZXRob2RJRChtQXVkaW9UcmFja0NscywgImdldFBsYXlTdGF0ZSIsICIoKUkiKTsKICAgICBpbnQgY3VycmVudFBsYXlTdGF0ZSA9IGVudi0+Q2FsbEludE1ldGhvZChtQXVkaW9UcmFja09iaiwgakdldFBsYXlTdGF0ZSk7CiAKQEAgLTM5Myw3ICs0MDcsNyBAQAogfQogCiB1aW50MzJfdCBKQXVkaW9UcmFjazo6Z2V0U2FtcGxlUmF0ZSgpIHsKLSAgICBKTklFbnYgKmVudiA9IEFuZHJvaWRSdW50aW1lOjpnZXRKTklFbnYoKTsKKyAgICBKTklFbnYgKmVudiA9IEphdmFWTUhlbHBlcjo6Z2V0Sk5JRW52KCk7CiAgICAgam1ldGhvZElEIGpHZXRTYW1wbGVSYXRlID0gZW52LT5HZXRNZXRob2RJRChtQXVkaW9UcmFja0NscywgImdldFNhbXBsZVJhdGUiLCAiKClJIik7CiAgICAgcmV0dXJuIGVudi0+Q2FsbEludE1ldGhvZChtQXVkaW9UcmFja09iaiwgakdldFNhbXBsZVJhdGUpOwogfQpAQCAtNDAzLDcgKzQxNyw3IEBACiAgICAgICAgIHJldHVybiBCQURfVkFMVUU7CiAgICAgfQogCi0gICAgSk5JRW52ICplbnYgPSBBbmRyb2lkUnVudGltZTo6Z2V0Sk5JRW52KCk7CisgICAgSk5JRW52ICplbnYgPSBKYXZhVk1IZWxwZXI6OmdldEpOSUVudigpOwogICAgIGptZXRob2RJRCBqR2V0QnVmZmVyU2l6ZUluRnJhbWVzID0gZW52LT5HZXRNZXRob2RJRCgKICAgICAgICAgICAgIG1BdWRpb1RyYWNrQ2xzLCAiZ2V0QnVmZmVyU2l6ZUluRnJhbWVzIiwgIigpSSIpOwogICAgIGludCBidWZmZXJTaXplSW5GcmFtZXMgPSBlbnYtPkNhbGxJbnRNZXRob2QobUF1ZGlvVHJhY2tPYmosIGpHZXRCdWZmZXJTaXplSW5GcmFtZXMpOwpAQCAtNDE3LDEyICs0MzEsNDEgQEAKIH0KIAogYXVkaW9fZm9ybWF0X3QgSkF1ZGlvVHJhY2s6OmZvcm1hdCgpIHsKLSAgICBKTklFbnYgKmVudiA9IEFuZHJvaWRSdW50aW1lOjpnZXRKTklFbnYoKTsKKyAgICBKTklFbnYgKmVudiA9IEphdmFWTUhlbHBlcjo6Z2V0Sk5JRW52KCk7CiAgICAgam1ldGhvZElEIGpHZXRBdWRpb0Zvcm1hdCA9IGVudi0+R2V0TWV0aG9kSUQobUF1ZGlvVHJhY2tDbHMsICJnZXRBdWRpb0Zvcm1hdCIsICIoKUkiKTsKICAgICBpbnQgamF2YUZvcm1hdCA9IGVudi0+Q2FsbEludE1ldGhvZChtQXVkaW9UcmFja09iaiwgakdldEF1ZGlvRm9ybWF0KTsKICAgICByZXR1cm4gYXVkaW9Gb3JtYXRUb05hdGl2ZShqYXZhRm9ybWF0KTsKIH0KIAorc2l6ZV90IEpBdWRpb1RyYWNrOjpmcmFtZVNpemUoKSB7CisgICAgSk5JRW52ICplbnYgPSBKYXZhVk1IZWxwZXI6OmdldEpOSUVudigpOworCisgICAgLy8gVE9ETzogQ2FsY3VsYXRlZCBoZXJlIGltcGxlbWVudGluZyB0aGUgbG9naWMgaW4gQXVkaW9UcmFjay5qYXZhCisgICAgLy8gd2FpdCBmb3IgQXVkaW9UcmFjay5qYXZhIGV4cG9zaW5nIHRoaXMgcGFyYW1ldGVyIChpLmUuIGdldEZyYW1lU2l6ZUluQnR5dGVzKCkpCisgICAgam1ldGhvZElEIGpHZXRBdWRpb0Zvcm1hdCA9IGVudi0+R2V0TWV0aG9kSUQobUF1ZGlvVHJhY2tDbHMsICJnZXRBdWRpb0Zvcm1hdCIsICIoKUkiKTsKKyAgICBpbnQgamF2YUZvcm1hdCA9IGVudi0+Q2FsbEludE1ldGhvZChtQXVkaW9UcmFja09iaiwgakdldEF1ZGlvRm9ybWF0KTsKKworICAgIGpjbGFzcyBqQXVkaW9Gb3JtYXRDbHMgPSBlbnYtPkZpbmRDbGFzcygiYW5kcm9pZC9tZWRpYS9BdWRpb0Zvcm1hdCIpOworICAgIGptZXRob2RJRCBqSXNFbmNvZGluZ0xpbmVhckZyYW1lcyA9IGVudi0+R2V0U3RhdGljTWV0aG9kSUQoCisgICAgICAgICAgICBqQXVkaW9Gb3JtYXRDbHMsICJpc0VuY29kaW5nTGluZWFyRnJhbWVzIiwgIihJKVoiKTsKKyAgICBqYm9vbGVhbiBqYXZhSXNFbmNvZGluZ0xpbmVhckZyYW1lcyA9IGVudi0+Q2FsbFN0YXRpY0Jvb2xlYW5NZXRob2QoCisgICAgICAgICAgICBqQXVkaW9Gb3JtYXRDbHMsIGpJc0VuY29kaW5nTGluZWFyRnJhbWVzLCBqYXZhRm9ybWF0KTsKKworICAgIGlmIChqYXZhSXNFbmNvZGluZ0xpbmVhckZyYW1lcyA9PSBmYWxzZSkgeworICAgICAgICByZXR1cm4gMTsKKyAgICB9CisKKyAgICBqbWV0aG9kSUQgakdldEJ5dGVzUGVyU2FtcGxlID0gZW52LT5HZXRTdGF0aWNNZXRob2RJRChqQXVkaW9Gb3JtYXRDbHMsCisgICAgICAgICAgICAiZ2V0Qnl0ZXNQZXJTYW1wbGUiLCAiKEkpSSIpOworICAgIGludCBqYXZhQnl0ZXNQZXJTYW1wbGUgPSBlbnYtPkNhbGxTdGF0aWNJbnRNZXRob2QoakF1ZGlvRm9ybWF0Q2xzLAorICAgICAgICAgICAgakdldEJ5dGVzUGVyU2FtcGxlLCBqYXZhRm9ybWF0KTsKKworICAgIGptZXRob2RJRCBqR2V0Q2hhbm5lbENvdW50ID0gZW52LT5HZXRNZXRob2RJRChtQXVkaW9UcmFja0NscywgImdldENoYW5uZWxDb3VudCIsICIoKUkiKTsKKyAgICBpbnQgamF2YUNoYW5uZWxDb3VudCA9IGVudi0+Q2FsbEludE1ldGhvZChtQXVkaW9UcmFja09iaiwgakdldENoYW5uZWxDb3VudCk7CisKKyAgICByZXR1cm4gamF2YUNoYW5uZWxDb3VudCAqIGphdmFCeXRlc1BlclNhbXBsZTsKK30KKwogc3RhdHVzX3QgSkF1ZGlvVHJhY2s6OmR1bXAoaW50IGZkLCBjb25zdCBWZWN0b3I8U3RyaW5nMTY+JiBhcmdzIF9fdW51c2VkKSBjb25zdAogewogICAgIFN0cmluZzggcmVzdWx0OwpAQCAtNDMyLDEwICs0NzUsNiBAQAogICAgIC8vIFRPRE86IFJlbW92ZSBsb2dzIHRoYXQgaW5jbHVkZXMgdW5hdmFpbGFibGUgaW5mb3JtYXRpb24gZnJvbSBiZWxvdy4KIC8vICAgIHJlc3VsdC5hcHBlbmRGb3JtYXQoIiAgc3RhdHVzKCVkKSwgc3RhdGUoJWQpLCBzZXNzaW9uIElkKCVkKSwgZmxhZ3MoJSN4KVxuIiwKIC8vICAgICAgICAgICAgICAgICAgICAgICAgbVN0YXR1cywgbVN0YXRlLCBtU2Vzc2lvbklkLCBtRmxhZ3MpOwotLy8gICAgcmVzdWx0LmFwcGVuZEZvcm1hdCgiICBzdHJlYW0gdHlwZSglZCksIGxlZnQgLSByaWdodCB2b2x1bWUoJWYsICVmKVxuIiwKLS8vICAgICAgICAgICAgICAgICAgICAgICAgKG1TdHJlYW1UeXBlID09IEFVRElPX1NUUkVBTV9ERUZBVUxUKSA/Ci0vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXVkaW9fYXR0cmlidXRlc190b19zdHJlYW1fdHlwZSgmbUF0dHJpYnV0ZXMpIDogbVN0cmVhbVR5cGUsCi0vLyAgICAgICAgICAgICAgICAgICAgICAgIG1Wb2x1bWVbQVVESU9fSU5URVJMRUFWRV9MRUZUXSwgbVZvbHVtZVtBVURJT19JTlRFUkxFQVZFX1JJR0hUXSk7CiAvLyAgICByZXN1bHQuYXBwZW5kRm9ybWF0KCIgIGZvcm1hdCglI3gpLCBjaGFubmVsIG1hc2soJSN4KSwgY2hhbm5lbCBjb3VudCgldSlcbiIsCiAvLyAgICAgICAgICAgICAgICAgIGZvcm1hdCgpLCBtQ2hhbm5lbE1hc2ssIGNoYW5uZWxDb3VudCgpKTsKIC8vICAgIHJlc3VsdC5hcHBlbmRGb3JtYXQoIiAgc2FtcGxlIHJhdGUoJXUpLCBvcmlnaW5hbCBzYW1wbGUgcmF0ZSgldSksIHNwZWVkKCVmKVxuIiwKQEAgLTQ1MywzOCArNDkyLDQwIEBACiAgICAgcmV0dXJuIE5PX0VSUk9SOwogfQogCi1hdWRpb19wb3J0X2hhbmRsZV90IEpBdWRpb1RyYWNrOjpnZXRSb3V0ZWREZXZpY2VJZCgpIHsKLSAgICBKTklFbnYgKmVudiA9IEFuZHJvaWRSdW50aW1lOjpnZXRKTklFbnYoKTsKK2pvYmplY3QgSkF1ZGlvVHJhY2s6OmdldFJvdXRlZERldmljZSgpIHsKKyAgICBKTklFbnYgKmVudiA9IEphdmFWTUhlbHBlcjo6Z2V0Sk5JRW52KCk7CiAgICAgam1ldGhvZElEIGpHZXRSb3V0ZWREZXZpY2UgPSBlbnYtPkdldE1ldGhvZElEKG1BdWRpb1RyYWNrQ2xzLCAiZ2V0Um91dGVkRGV2aWNlIiwKICAgICAgICAgICAgICIoKUxhbmRyb2lkL21lZGlhL0F1ZGlvRGV2aWNlSW5mbzsiKTsKLSAgICBqb2JqZWN0IGpBdWRpb0RldmljZUluZm9PYmogPSBlbnYtPkNhbGxPYmplY3RNZXRob2QobUF1ZGlvVHJhY2tPYmosIGpHZXRSb3V0ZWREZXZpY2UpOwotICAgIGlmIChlbnYtPklzU2FtZU9iamVjdChqQXVkaW9EZXZpY2VJbmZvT2JqLCBOVUxMKSkgewotICAgICAgICByZXR1cm4gQVVESU9fUE9SVF9IQU5ETEVfTk9ORTsKLSAgICB9Ci0KLSAgICBqY2xhc3MgakF1ZGlvRGV2aWNlSW5mb0NscyA9IGVudi0+RmluZENsYXNzKCJMYW5kcm9pZC9tZWRpYS9BdWRpb0RldmljZUluZm8iKTsKLSAgICBqbWV0aG9kSUQgakdldElkID0gZW52LT5HZXRNZXRob2RJRChqQXVkaW9EZXZpY2VJbmZvQ2xzLCAiZ2V0SWQiLCAiKClJIik7Ci0gICAgamludCByb3V0ZWREZXZpY2VJZCA9IGVudi0+Q2FsbEludE1ldGhvZChqQXVkaW9EZXZpY2VJbmZvT2JqLCBqR2V0SWQpOwotICAgIHJldHVybiByb3V0ZWREZXZpY2VJZDsKKyAgICByZXR1cm4gZW52LT5DYWxsT2JqZWN0TWV0aG9kKG1BdWRpb1RyYWNrT2JqLCBqR2V0Um91dGVkRGV2aWNlKTsKIH0KIAotYXVkaW9fc2Vzc2lvbl90IEpBdWRpb1RyYWNrOjpnZXRBdWRpb1Nlc3Npb25JZCgpIHsKLSAgICBKTklFbnYgKmVudiA9IEFuZHJvaWRSdW50aW1lOjpnZXRKTklFbnYoKTsKK2ludDMyX3QgSkF1ZGlvVHJhY2s6OmdldEF1ZGlvU2Vzc2lvbklkKCkgeworICAgIEpOSUVudiAqZW52ID0gSmF2YVZNSGVscGVyOjpnZXRKTklFbnYoKTsKICAgICBqbWV0aG9kSUQgakdldEF1ZGlvU2Vzc2lvbklkID0gZW52LT5HZXRNZXRob2RJRChtQXVkaW9UcmFja0NscywgImdldEF1ZGlvU2Vzc2lvbklkIiwgIigpSSIpOwogICAgIGppbnQgc2Vzc2lvbklkID0gZW52LT5DYWxsSW50TWV0aG9kKG1BdWRpb1RyYWNrT2JqLCBqR2V0QXVkaW9TZXNzaW9uSWQpOwotICAgIHJldHVybiAoYXVkaW9fc2Vzc2lvbl90KSBzZXNzaW9uSWQ7CisgICAgcmV0dXJuIHNlc3Npb25JZDsKIH0KIAotc3RhdHVzX3QgSkF1ZGlvVHJhY2s6OnNldE91dHB1dERldmljZShhdWRpb19wb3J0X2hhbmRsZV90IGRldmljZUlkKSB7Ci0gICAgSk5JRW52ICplbnYgPSBBbmRyb2lkUnVudGltZTo6Z2V0Sk5JRW52KCk7Ci0gICAgamNsYXNzIGpNUDJJbXBsQ2xzID0gZW52LT5GaW5kQ2xhc3MoImFuZHJvaWQvbWVkaWEvTWVkaWFQbGF5ZXIySW1wbCIpOwotICAgIGptZXRob2RJRCBqU2V0QXVkaW9PdXRwdXREZXZpY2VCeUlkID0gZW52LT5HZXRNZXRob2RJRCgKLSAgICAgICAgICAgIGpNUDJJbXBsQ2xzLCAic2V0QXVkaW9PdXRwdXREZXZpY2VCeUlkIiwgIihMYW5kcm9pZC9tZWRpYS9BdWRpb1RyYWNrO0kpWiIpOwotICAgIGpib29sZWFuIHJlc3VsdCA9IGVudi0+Q2FsbFN0YXRpY0Jvb2xlYW5NZXRob2QoCi0gICAgICAgICAgICBqTVAySW1wbENscywgalNldEF1ZGlvT3V0cHV0RGV2aWNlQnlJZCwgbUF1ZGlvVHJhY2tPYmosIGRldmljZUlkKTsKK3N0YXR1c190IEpBdWRpb1RyYWNrOjpzZXRQcmVmZXJyZWREZXZpY2Uoam9iamVjdCBkZXZpY2UpIHsKKyAgICBKTklFbnYgKmVudiA9IEphdmFWTUhlbHBlcjo6Z2V0Sk5JRW52KCk7CisgICAgam1ldGhvZElEIGpTZXRQcmVmZXJyZWREZXZpY2VJZCA9IGVudi0+R2V0TWV0aG9kSUQobUF1ZGlvVHJhY2tDbHMsICJzZXRQcmVmZXJyZWREZXZpY2UiLAorICAgICAgICAgICAgIihMYW5kcm9pZC9tZWRpYS9BdWRpb0RldmljZUluZm87KVoiKTsKKyAgICBqYm9vbGVhbiByZXN1bHQgPSBlbnYtPkNhbGxCb29sZWFuTWV0aG9kKG1BdWRpb1RyYWNrT2JqLCBqU2V0UHJlZmVycmVkRGV2aWNlSWQsIGRldmljZSk7CiAgICAgcmV0dXJuIHJlc3VsdCA9PSB0cnVlID8gTk9fRVJST1IgOiBCQURfVkFMVUU7CiB9CiAKK2F1ZGlvX3N0cmVhbV90eXBlX3QgSkF1ZGlvVHJhY2s6OmdldEF1ZGlvU3RyZWFtVHlwZSgpIHsKKyAgICBKTklFbnYgKmVudiA9IEphdmFWTUhlbHBlcjo6Z2V0Sk5JRW52KCk7CisgICAgam1ldGhvZElEIGpHZXRBdWRpb0F0dHJpYnV0ZXMgPSBlbnYtPkdldE1ldGhvZElEKG1BdWRpb1RyYWNrQ2xzLCAiZ2V0QXVkaW9BdHRyaWJ1dGVzIiwKKyAgICAgICAgICAgICIoKUxhbmRyb2lkL21lZGlhL0F1ZGlvQXR0cmlidXRlczsiKTsKKyAgICBqb2JqZWN0IGpBdWRpb0F0dHJpYnV0ZXMgPSBlbnYtPkNhbGxPYmplY3RNZXRob2QobUF1ZGlvVHJhY2tPYmosIGpHZXRBdWRpb0F0dHJpYnV0ZXMpOworICAgIGpjbGFzcyBqQXVkaW9BdHRyaWJ1dGVzQ2xzID0gZW52LT5GaW5kQ2xhc3MoImFuZHJvaWQvbWVkaWEvQXVkaW9BdHRyaWJ1dGVzIik7CisgICAgam1ldGhvZElEIGpHZXRWb2x1bWVDb250cm9sU3RyZWFtID0gZW52LT5HZXRNZXRob2RJRChqQXVkaW9BdHRyaWJ1dGVzQ2xzLAorICAgICAgICAgICAgImdldFZvbHVtZUNvbnRyb2xTdHJlYW0iLCAiKClJIik7CisgICAgaW50IGphdmFBdWRpb1N0cmVhbVR5cGUgPSBlbnYtPkNhbGxJbnRNZXRob2QoakF1ZGlvQXR0cmlidXRlcywgakdldFZvbHVtZUNvbnRyb2xTdHJlYW0pOworICAgIHJldHVybiAoYXVkaW9fc3RyZWFtX3R5cGVfdClqYXZhQXVkaW9TdHJlYW1UeXBlOworfQorCiBzdGF0dXNfdCBKQXVkaW9UcmFjazo6cGVuZGluZ0R1cmF0aW9uKGludDMyX3QgKm1zZWMpIHsKICAgICBpZiAobXNlYyA9PSBudWxscHRyKSB7CiAgICAgICAgIHJldHVybiBCQURfVkFMVUU7CkBAIC01MjYsMTggKzU2Nyw4NSBAQAogICAgIHJldHVybiBOT19FUlJPUjsKIH0KIAotc3RhdHVzX3QgSkF1ZGlvVHJhY2s6OmFkZEF1ZGlvRGV2aWNlQ2FsbGJhY2soCi0gICAgICAgIGNvbnN0IHNwPEF1ZGlvU3lzdGVtOjpBdWRpb0RldmljZUNhbGxiYWNrPiYgY2FsbGJhY2sgX191bnVzZWQpIHsKLSAgICAvLyBUT0RPOiBJbXBsZW1lbnQgdGhpcyBhZnRlciBhcHByb3ByaWF0ZSBKYXZhIEF1ZGlvVHJhY2sgbWV0aG9kIGlzIGF2YWlsYWJsZS4KK3N0YXR1c190IEpBdWRpb1RyYWNrOjphZGRBdWRpb0RldmljZUNhbGxiYWNrKGpvYmplY3QgbGlzdGVuZXIsIGpvYmplY3QgaGFuZGxlcikgeworICAgIEpOSUVudiAqZW52ID0gSmF2YVZNSGVscGVyOjpnZXRKTklFbnYoKTsKKyAgICBqbWV0aG9kSUQgakFkZE9uUm91dGluZ0NoYW5nZWRMaXN0ZW5lciA9IGVudi0+R2V0TWV0aG9kSUQobUF1ZGlvVHJhY2tDbHMsCisgICAgICAgICAgICAiYWRkT25Sb3V0aW5nQ2hhbmdlZExpc3RlbmVyIiwKKyAgICAgICAgICAgICIoTGFuZHJvaWQvbWVkaWEvQXVkaW9Sb3V0aW5nJE9uUm91dGluZ0NoYW5nZWRMaXN0ZW5lcjtMYW5kcm9pZC9vcy9IYW5kbGVyOylWIik7CisgICAgZW52LT5DYWxsVm9pZE1ldGhvZChtQXVkaW9UcmFja09iaiwgakFkZE9uUm91dGluZ0NoYW5nZWRMaXN0ZW5lciwgbGlzdGVuZXIsIGhhbmRsZXIpOwogICAgIHJldHVybiBOT19FUlJPUjsKIH0KIAotc3RhdHVzX3QgSkF1ZGlvVHJhY2s6OnJlbW92ZUF1ZGlvRGV2aWNlQ2FsbGJhY2soCi0gICAgICAgIGNvbnN0IHNwPEF1ZGlvU3lzdGVtOjpBdWRpb0RldmljZUNhbGxiYWNrPiYgY2FsbGJhY2sgX191bnVzZWQpIHsKLSAgICAvLyBUT0RPOiBJbXBsZW1lbnQgdGhpcyBhZnRlciBhcHByb3ByaWF0ZSBKYXZhIEF1ZGlvVHJhY2sgbWV0aG9kIGlzIGF2YWlsYWJsZS4KK3N0YXR1c190IEpBdWRpb1RyYWNrOjpyZW1vdmVBdWRpb0RldmljZUNhbGxiYWNrKGpvYmplY3QgbGlzdGVuZXIpIHsKKyAgICBKTklFbnYgKmVudiA9IEphdmFWTUhlbHBlcjo6Z2V0Sk5JRW52KCk7CisgICAgam1ldGhvZElEIGpSZW1vdmVPblJvdXRpbmdDaGFuZ2VkTGlzdGVuZXIgPSBlbnYtPkdldE1ldGhvZElEKG1BdWRpb1RyYWNrQ2xzLAorICAgICAgICAgICAgInJlbW92ZU9uUm91dGluZ0NoYW5nZWRMaXN0ZW5lciIsCisgICAgICAgICAgICAiKExhbmRyb2lkL21lZGlhL0F1ZGlvUm91dGluZyRPblJvdXRpbmdDaGFuZ2VkTGlzdGVuZXI7KVYiKTsKKyAgICBlbnYtPkNhbGxWb2lkTWV0aG9kKG1BdWRpb1RyYWNrT2JqLCBqUmVtb3ZlT25Sb3V0aW5nQ2hhbmdlZExpc3RlbmVyLCBsaXN0ZW5lcik7CiAgICAgcmV0dXJuIE5PX0VSUk9SOwogfQogCit2b2lkIEpBdWRpb1RyYWNrOjpyZWdpc3RlclJvdXRpbmdEZWxlZ2F0ZXMoCisgICAgICAgIHN0ZDo6dmVjdG9yPHN0ZDo6cGFpcjxqb2JqZWN0LCBqb2JqZWN0Pj4mIHJvdXRpbmdEZWxlZ2F0ZXMpIHsKKyAgICBmb3IgKHN0ZDo6dmVjdG9yPHN0ZDo6cGFpcjxqb2JqZWN0LCBqb2JqZWN0Pj46Oml0ZXJhdG9yIGl0ID0gcm91dGluZ0RlbGVnYXRlcy5iZWdpbigpOworICAgICAgICAgICAgaXQgIT0gcm91dGluZ0RlbGVnYXRlcy5lbmQoKTsgaXQrKykgeworICAgICAgICBhZGRBdWRpb0RldmljZUNhbGxiYWNrKGl0LT5zZWNvbmQsIGdldEhhbmRsZXIoaXQtPnNlY29uZCkpOworICAgIH0KK30KKworLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworLy8vICAgICAgICAgICAgICAgIFN0YXRpYyBtZXRob2RzIGJlZ2luICAgICAgICAgICAgICAgICAgIC8vLworLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworam9iamVjdCBKQXVkaW9UcmFjazo6Z2V0TGlzdGVuZXIoY29uc3Qgam9iamVjdCByb3V0aW5nRGVsZWdhdGVPYmopIHsKKyAgICBKTklFbnYgKmVudiA9IEphdmFWTUhlbHBlcjo6Z2V0Sk5JRW52KCk7CisgICAgamNsYXNzIGpSb3V0aW5nRGVsZWdhdGVDbHMgPSBlbnYtPkZpbmRDbGFzcygiYW5kcm9pZC9tZWRpYS9Sb3V0aW5nRGVsZWdhdGUiKTsKKyAgICBqbWV0aG9kSUQgakdldExpc3RlbmVyID0gZW52LT5HZXRNZXRob2RJRChqUm91dGluZ0RlbGVnYXRlQ2xzLAorICAgICAgICAgICAgImdldExpc3RlbmVyIiwgIigpTGFuZHJvaWQvbWVkaWEvQXVkaW9Sb3V0aW5nJE9uUm91dGluZ0NoYW5nZWRMaXN0ZW5lcjsiKTsKKyAgICByZXR1cm4gZW52LT5DYWxsT2JqZWN0TWV0aG9kKHJvdXRpbmdEZWxlZ2F0ZU9iaiwgakdldExpc3RlbmVyKTsKK30KKworam9iamVjdCBKQXVkaW9UcmFjazo6Z2V0SGFuZGxlcihjb25zdCBqb2JqZWN0IHJvdXRpbmdEZWxlZ2F0ZU9iaikgeworICAgIEpOSUVudiAqZW52ID0gSmF2YVZNSGVscGVyOjpnZXRKTklFbnYoKTsKKyAgICBqY2xhc3MgalJvdXRpbmdEZWxlZ2F0ZUNscyA9IGVudi0+RmluZENsYXNzKCJhbmRyb2lkL21lZGlhL1JvdXRpbmdEZWxlZ2F0ZSIpOworICAgIGptZXRob2RJRCBqR2V0SGFuZGxlciA9IGVudi0+R2V0TWV0aG9kSUQoalJvdXRpbmdEZWxlZ2F0ZUNscywKKyAgICAgICAgImdldEhhbmRsZXIiLCAiKClMYW5kcm9pZC9vcy9IYW5kbGVyOyIpOworICAgIHJldHVybiBlbnYtPkNhbGxPYmplY3RNZXRob2Qocm91dGluZ0RlbGVnYXRlT2JqLCBqR2V0SGFuZGxlcik7Cit9CisKK2pvYmplY3QgSkF1ZGlvVHJhY2s6OmFkZEdsb2JhbFJlZihjb25zdCBqb2JqZWN0IG9iaikgeworICAgIEpOSUVudiAqZW52ID0gSmF2YVZNSGVscGVyOjpnZXRKTklFbnYoKTsKKyAgICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxqb2JqZWN0PihlbnYtPk5ld0dsb2JhbFJlZihvYmopKTsKK30KKworc3RhdHVzX3QgSkF1ZGlvVHJhY2s6OnJlbW92ZUdsb2JhbFJlZihjb25zdCBqb2JqZWN0IG9iaikgeworICAgIGlmIChvYmogPT0gTlVMTCkgeworICAgICAgICByZXR1cm4gQkFEX1ZBTFVFOworICAgIH0KKyAgICBKTklFbnYgKmVudiA9IEphdmFWTUhlbHBlcjo6Z2V0Sk5JRW52KCk7CisgICAgZW52LT5EZWxldGVHbG9iYWxSZWYob2JqKTsKKyAgICByZXR1cm4gTk9fRVJST1I7Cit9CisKK2pvYmplY3QgSkF1ZGlvVHJhY2s6OmZpbmRCeUtleShzdGQ6OnZlY3RvcjxzdGQ6OnBhaXI8am9iamVjdCwgam9iamVjdD4+JiBtcCwgY29uc3Qgam9iamVjdCBrZXkpIHsKKyAgICBKTklFbnYgKmVudiA9IEphdmFWTUhlbHBlcjo6Z2V0Sk5JRW52KCk7CisgICAgZm9yIChzdGQ6OnZlY3RvcjxzdGQ6OnBhaXI8am9iamVjdCwgam9iamVjdD4+OjppdGVyYXRvciBpdCA9IG1wLmJlZ2luKCk7IGl0ICE9IG1wLmVuZCgpOyBpdCsrKSB7CisgICAgICAgIGlmIChlbnYtPklzU2FtZU9iamVjdChpdC0+Zmlyc3QsIGtleSkpIHsKKyAgICAgICAgICAgIHJldHVybiBpdC0+c2Vjb25kOworICAgICAgICB9CisgICAgfQorICAgIHJldHVybiBudWxscHRyOworfQorCit2b2lkIEpBdWRpb1RyYWNrOjplcmFzZUJ5S2V5KHN0ZDo6dmVjdG9yPHN0ZDo6cGFpcjxqb2JqZWN0LCBqb2JqZWN0Pj4mIG1wLCBjb25zdCBqb2JqZWN0IGtleSkgeworICAgIEpOSUVudiAqZW52ID0gSmF2YVZNSGVscGVyOjpnZXRKTklFbnYoKTsKKyAgICBmb3IgKHN0ZDo6dmVjdG9yPHN0ZDo6cGFpcjxqb2JqZWN0LCBqb2JqZWN0Pj46Oml0ZXJhdG9yIGl0ID0gbXAuYmVnaW4oKTsgaXQgIT0gbXAuZW5kKCk7IGl0KyspIHsKKyAgICAgICAgaWYgKGVudi0+SXNTYW1lT2JqZWN0KGl0LT5maXJzdCwga2V5KSkgeworICAgICAgICAgICAgbXAuZXJhc2UoaXQpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgfQorfQorCiAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCiAvLy8gICAgICAgICAgICAgICAgUHJpdmF0ZSBtZXRob2QgYmVnaW5zICAgICAgICAgICAgICAgICAgLy8vCiAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCkBAIC01NTAsNyArNjU4LDcgQEAKICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgfQogCi0gICAgSk5JRW52ICplbnYgPSBBbmRyb2lkUnVudGltZTo6Z2V0Sk5JRW52KCk7CisgICAgSk5JRW52ICplbnYgPSBKYXZhVk1IZWxwZXI6OmdldEpOSUVudigpOwogCiAgICAgLy8gUmVmZXJlbmNlZCAiYW5kcm9pZF9tZWRpYV9Wb2x1bWVTaGFwZXIuaCIuCiAgICAgamZsb2F0QXJyYXkgeGFycmF5ID0gbnVsbHB0cjsKQEAgLTU5NSw3ICs3MDMsNyBAQAogam9iamVjdCBKQXVkaW9UcmFjazo6Y3JlYXRlVm9sdW1lU2hhcGVyT3BlcmF0aW9uT2JqKAogICAgICAgICBjb25zdCBzcDxtZWRpYTo6Vm9sdW1lU2hhcGVyOjpPcGVyYXRpb24+JiBvcGVyYXRpb24pIHsKIAotICAgIEpOSUVudiAqZW52ID0gQW5kcm9pZFJ1bnRpbWU6OmdldEpOSUVudigpOworICAgIEpOSUVudiAqZW52ID0gSmF2YVZNSGVscGVyOjpnZXRKTklFbnYoKTsKIAogICAgIGpjbGFzcyBqQnVpbGRlckNscyA9IGVudi0+RmluZENsYXNzKCJhbmRyb2lkL21lZGlhL1ZvbHVtZVNoYXBlciRPcGVyYXRpb24kQnVpbGRlciIpOwogICAgIGptZXRob2RJRCBqQnVpbGRlckN0b3IgPSBlbnYtPkdldE1ldGhvZElEKGpCdWlsZGVyQ2xzLCAiPGluaXQ+IiwgIigpViIpOwpAQCAtNjQ3LDE1ICs3NTUsMTUgQEAKIH0KIAogam9iamVjdCBKQXVkaW9UcmFjazo6Y3JlYXRlU3RyZWFtRXZlbnRDYWxsYmFjayhjYWxsYmFja190IGNiZiwgdm9pZCogdXNlcikgewotICAgIEpOSUVudiAqZW52ID0gQW5kcm9pZFJ1bnRpbWU6OmdldEpOSUVudigpOwotICAgIGpjbGFzcyBqQ2FsbGJhY2tDbHMgPSBlbnYtPkZpbmRDbGFzcygiYW5kcm9pZC9tZWRpYS9NZWRpYVBsYXllcjJJbXBsJFN0cmVhbUV2ZW50Q2FsbGJhY2siKTsKKyAgICBKTklFbnYgKmVudiA9IEphdmFWTUhlbHBlcjo6Z2V0Sk5JRW52KCk7CisgICAgamNsYXNzIGpDYWxsYmFja0NscyA9IGVudi0+RmluZENsYXNzKCJhbmRyb2lkL21lZGlhL01lZGlhUGxheWVyMiRTdHJlYW1FdmVudENhbGxiYWNrIik7CiAgICAgam1ldGhvZElEIGpDYWxsYmFja0N0b3IgPSBlbnYtPkdldE1ldGhvZElEKGpDYWxsYmFja0NscywgIjxpbml0PiIsICIoSkpKKVYiKTsKICAgICBqb2JqZWN0IGpDYWxsYmFja09iaiA9IGVudi0+TmV3T2JqZWN0KGpDYWxsYmFja0NscywgakNhbGxiYWNrQ3RvciwgdGhpcywgY2JmLCB1c2VyKTsKICAgICByZXR1cm4gakNhbGxiYWNrT2JqOwogfQogCiBqb2JqZWN0IEpBdWRpb1RyYWNrOjpjcmVhdGVDYWxsYmFja0V4ZWN1dG9yKCkgewotICAgIEpOSUVudiAqZW52ID0gQW5kcm9pZFJ1bnRpbWU6OmdldEpOSUVudigpOworICAgIEpOSUVudiAqZW52ID0gSmF2YVZNSGVscGVyOjpnZXRKTklFbnYoKTsKICAgICBqY2xhc3MgakV4ZWN1dG9yc0NscyA9IGVudi0+RmluZENsYXNzKCJqYXZhL3V0aWwvY29uY3VycmVudC9FeGVjdXRvcnMiKTsKICAgICBqbWV0aG9kSUQgak5ld1NpbmdsZVRocmVhZEV4ZWN1dG9yID0gZW52LT5HZXRTdGF0aWNNZXRob2RJRChqRXhlY3V0b3JzQ2xzLAogICAgICAgICAgICAgIm5ld1NpbmdsZVRocmVhZEV4ZWN1dG9yIiwgIigpTGphdmEvdXRpbC9jb25jdXJyZW50L0V4ZWN1dG9yU2VydmljZTsiKTsKZGlmZiAtLWdpdCBhL21lZGlhL2xpYm1lZGlhcGxheWVyMi9KTWVkaWEySFRUUENvbm5lY3Rpb24uY3BwIGIvbWVkaWEvbGlibWVkaWFwbGF5ZXIyL0pNZWRpYTJIVFRQQ29ubmVjdGlvbi5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDI2NGE3ZgotLS0gL2Rldi9udWxsCisrKyBiL21lZGlhL2xpYm1lZGlhcGxheWVyMi9KTWVkaWEySFRUUENvbm5lY3Rpb24uY3BwCkBAIC0wLDAgKzEsMTgwIEBACisvKgorICogQ29weXJpZ2h0IDIwMTcsIFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworCisvLyNkZWZpbmUgTE9HX05ERUJVRyAwCisjZGVmaW5lIExPR19UQUcgIkpNZWRpYTJIVFRQQ29ubmVjdGlvbiIKKyNpbmNsdWRlIDx1dGlscy9Mb2cuaD4KKworI2luY2x1ZGUgPG1lZGlhcGxheWVyMi9KYXZhVk1IZWxwZXIuaD4KKyNpbmNsdWRlIDxtZWRpYXBsYXllcjIvSk1lZGlhMkhUVFBDb25uZWN0aW9uLmg+CisjaW5jbHVkZSA8bWVkaWEvc3RhZ2VmcmlnaHQvZm91bmRhdGlvbi9BRGVidWcuaD4KKyNpbmNsdWRlIDxuYXRpdmVoZWxwZXIvU2NvcGVkTG9jYWxSZWYuaD4KKworI2luY2x1ZGUgImxvZy9sb2cuaCIKKyNpbmNsdWRlICJqbmkuaCIKKyNpbmNsdWRlIDxuYXRpdmVoZWxwZXIvSk5JSGVscC5oPgorCituYW1lc3BhY2UgYW5kcm9pZCB7CisKK3N0YXRpYyBjb25zdCBzaXplX3Qga0J1ZmZlclNpemUgPSAzMjc2ODsKKworSk1lZGlhMkhUVFBDb25uZWN0aW9uOjpKTWVkaWEySFRUUENvbm5lY3Rpb24oSk5JRW52ICplbnYsIGpvYmplY3QgdGhpeikgeworICAgIG1NZWRpYTJIVFRQQ29ubmVjdGlvbk9iaiA9IGVudi0+TmV3R2xvYmFsUmVmKHRoaXopOworICAgIENIRUNLKG1NZWRpYTJIVFRQQ29ubmVjdGlvbk9iaiAhPSBOVUxMKTsKKworICAgIFNjb3BlZExvY2FsUmVmPGpjbGFzcz4gbWVkaWEySFRUUENvbm5lY3Rpb25DbGFzcygKKyAgICAgICAgICAgIGVudiwgZW52LT5HZXRPYmplY3RDbGFzcyhtTWVkaWEySFRUUENvbm5lY3Rpb25PYmopKTsKKyAgICBDSEVDSyhtZWRpYTJIVFRQQ29ubmVjdGlvbkNsYXNzLmdldCgpICE9IE5VTEwpOworCisgICAgbUNvbm5lY3RNZXRob2QgPSBlbnYtPkdldE1ldGhvZElEKAorICAgICAgICAgICAgbWVkaWEySFRUUENvbm5lY3Rpb25DbGFzcy5nZXQoKSwKKyAgICAgICAgICAgICJjb25uZWN0IiwKKyAgICAgICAgICAgICIoTGphdmEvbGFuZy9TdHJpbmc7TGphdmEvbGFuZy9TdHJpbmc7KVoiKTsKKyAgICBDSEVDSyhtQ29ubmVjdE1ldGhvZCAhPSBOVUxMKTsKKworICAgIG1EaXNjb25uZWN0TWV0aG9kID0gZW52LT5HZXRNZXRob2RJRCgKKyAgICAgICAgICAgIG1lZGlhMkhUVFBDb25uZWN0aW9uQ2xhc3MuZ2V0KCksCisgICAgICAgICAgICAiZGlzY29ubmVjdCIsCisgICAgICAgICAgICAiKClWIik7CisgICAgQ0hFQ0sobURpc2Nvbm5lY3RNZXRob2QgIT0gTlVMTCk7CisKKyAgICBtUmVhZEF0TWV0aG9kID0gZW52LT5HZXRNZXRob2RJRCgKKyAgICAgICAgICAgIG1lZGlhMkhUVFBDb25uZWN0aW9uQ2xhc3MuZ2V0KCksCisgICAgICAgICAgICAicmVhZEF0IiwKKyAgICAgICAgICAgICIoSltCSSlJIik7CisgICAgQ0hFQ0sobVJlYWRBdE1ldGhvZCAhPSBOVUxMKTsKKworICAgIG1HZXRTaXplTWV0aG9kID0gZW52LT5HZXRNZXRob2RJRCgKKyAgICAgICAgICAgIG1lZGlhMkhUVFBDb25uZWN0aW9uQ2xhc3MuZ2V0KCksCisgICAgICAgICAgICAiZ2V0U2l6ZSIsCisgICAgICAgICAgICAiKClKIik7CisgICAgQ0hFQ0sobUdldFNpemVNZXRob2QgIT0gTlVMTCk7CisKKyAgICBtR2V0TUlNRVR5cGVNZXRob2QgPSBlbnYtPkdldE1ldGhvZElEKAorICAgICAgICAgICAgbWVkaWEySFRUUENvbm5lY3Rpb25DbGFzcy5nZXQoKSwKKyAgICAgICAgICAgICJnZXRNSU1FVHlwZSIsCisgICAgICAgICAgICAiKClMamF2YS9sYW5nL1N0cmluZzsiKTsKKyAgICBDSEVDSyhtR2V0TUlNRVR5cGVNZXRob2QgIT0gTlVMTCk7CisKKyAgICBtR2V0VXJpTWV0aG9kID0gZW52LT5HZXRNZXRob2RJRCgKKyAgICAgICAgICAgIG1lZGlhMkhUVFBDb25uZWN0aW9uQ2xhc3MuZ2V0KCksCisgICAgICAgICAgICAiZ2V0VXJpIiwKKyAgICAgICAgICAgICIoKUxqYXZhL2xhbmcvU3RyaW5nOyIpOworICAgIENIRUNLKG1HZXRVcmlNZXRob2QgIT0gTlVMTCk7CisKKyAgICBTY29wZWRMb2NhbFJlZjxqYnl0ZUFycmF5PiB0bXAoCisgICAgICAgIGVudiwgZW52LT5OZXdCeXRlQXJyYXkoa0J1ZmZlclNpemUpKTsKKyAgICBtQnl0ZUFycmF5T2JqID0gKGpieXRlQXJyYXkpZW52LT5OZXdHbG9iYWxSZWYodG1wLmdldCgpKTsKKyAgICBDSEVDSyhtQnl0ZUFycmF5T2JqICE9IE5VTEwpOworfQorCitKTWVkaWEySFRUUENvbm5lY3Rpb246On5KTWVkaWEySFRUUENvbm5lY3Rpb24oKSB7CisgICAgSk5JRW52ICplbnYgPSBKYXZhVk1IZWxwZXI6OmdldEpOSUVudigpOworICAgIGVudi0+RGVsZXRlR2xvYmFsUmVmKG1NZWRpYTJIVFRQQ29ubmVjdGlvbk9iaik7CisgICAgZW52LT5EZWxldGVHbG9iYWxSZWYobUJ5dGVBcnJheU9iaik7Cit9CisKK2Jvb2wgSk1lZGlhMkhUVFBDb25uZWN0aW9uOjpjb25uZWN0KAorICAgICAgICBjb25zdCBjaGFyICp1cmksIGNvbnN0IEtleWVkVmVjdG9yPFN0cmluZzgsIFN0cmluZzg+ICpoZWFkZXJzKSB7CisgICAgU3RyaW5nOCB0bXAoIiIpOworICAgIGlmIChoZWFkZXJzICE9IE5VTEwpIHsKKyAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBoZWFkZXJzLT5zaXplKCk7ICsraSkgeworICAgICAgICAgICAgdG1wLmFwcGVuZChoZWFkZXJzLT5rZXlBdChpKSk7CisgICAgICAgICAgICB0bXAuYXBwZW5kKFN0cmluZzgoIjogIikpOworICAgICAgICAgICAgdG1wLmFwcGVuZChoZWFkZXJzLT52YWx1ZUF0KGkpKTsKKyAgICAgICAgICAgIHRtcC5hcHBlbmQoU3RyaW5nOCgiXHJcbiIpKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIEpOSUVudiogZW52ID0gSmF2YVZNSGVscGVyOjpnZXRKTklFbnYoKTsKKyAgICBqc3RyaW5nIGp1cmkgPSBlbnYtPk5ld1N0cmluZ1VURih1cmkpOworICAgIGpzdHJpbmcgamhlYWRlcnMgPSBlbnYtPk5ld1N0cmluZ1VURih0bXAuc3RyaW5nKCkpOworCisgICAgamJvb2xlYW4gcmV0ID0KKyAgICAgICAgZW52LT5DYWxsQm9vbGVhbk1ldGhvZChtTWVkaWEySFRUUENvbm5lY3Rpb25PYmosIG1Db25uZWN0TWV0aG9kLCBqdXJpLCBqaGVhZGVycyk7CisKKyAgICBlbnYtPkRlbGV0ZUxvY2FsUmVmKGp1cmkpOworICAgIGVudi0+RGVsZXRlTG9jYWxSZWYoamhlYWRlcnMpOworCisgICAgcmV0dXJuIChib29sKXJldDsKK30KKwordm9pZCBKTWVkaWEySFRUUENvbm5lY3Rpb246OmRpc2Nvbm5lY3QoKSB7CisgICAgSk5JRW52KiBlbnYgPSBKYXZhVk1IZWxwZXI6OmdldEpOSUVudigpOworICAgIGVudi0+Q2FsbFZvaWRNZXRob2QobU1lZGlhMkhUVFBDb25uZWN0aW9uT2JqLCBtRGlzY29ubmVjdE1ldGhvZCk7Cit9CisKK3NzaXplX3QgSk1lZGlhMkhUVFBDb25uZWN0aW9uOjpyZWFkQXQob2ZmNjRfdCBvZmZzZXQsIHZvaWQgKmRhdGEsIHNpemVfdCBzaXplKSB7CisgICAgSk5JRW52KiBlbnYgPSBKYXZhVk1IZWxwZXI6OmdldEpOSUVudigpOworCisgICAgaWYgKHNpemUgPiBrQnVmZmVyU2l6ZSkgeworICAgICAgICBzaXplID0ga0J1ZmZlclNpemU7CisgICAgfQorCisgICAgamludCBuID0gZW52LT5DYWxsSW50TWV0aG9kKAorICAgICAgICAgICAgbU1lZGlhMkhUVFBDb25uZWN0aW9uT2JqLCBtUmVhZEF0TWV0aG9kLCAoamxvbmcpb2Zmc2V0LCBtQnl0ZUFycmF5T2JqLCAoamludClzaXplKTsKKworICAgIGlmIChuID4gMCkgeworICAgICAgICBlbnYtPkdldEJ5dGVBcnJheVJlZ2lvbigKKyAgICAgICAgICAgICAgICBtQnl0ZUFycmF5T2JqLAorICAgICAgICAgICAgICAgIDAsCisgICAgICAgICAgICAgICAgbiwKKyAgICAgICAgICAgICAgICAoamJ5dGUgKilkYXRhKTsKKyAgICB9CisKKyAgICByZXR1cm4gbjsKK30KKworb2ZmNjRfdCBKTWVkaWEySFRUUENvbm5lY3Rpb246OmdldFNpemUoKSB7CisgICAgSk5JRW52KiBlbnYgPSBKYXZhVk1IZWxwZXI6OmdldEpOSUVudigpOworICAgIHJldHVybiAob2ZmNjRfdCkoZW52LT5DYWxsTG9uZ01ldGhvZChtTWVkaWEySFRUUENvbm5lY3Rpb25PYmosIG1HZXRTaXplTWV0aG9kKSk7Cit9CisKK3N0YXR1c190IEpNZWRpYTJIVFRQQ29ubmVjdGlvbjo6Z2V0TUlNRVR5cGUoU3RyaW5nOCAqbWltZVR5cGUpIHsKKyAgICBKTklFbnYqIGVudiA9IEphdmFWTUhlbHBlcjo6Z2V0Sk5JRW52KCk7CisgICAganN0cmluZyBqbWltZSA9IChqc3RyaW5nKWVudi0+Q2FsbE9iamVjdE1ldGhvZChtTWVkaWEySFRUUENvbm5lY3Rpb25PYmosIG1HZXRNSU1FVHlwZU1ldGhvZCk7CisgICAgamJvb2xlYW4gZmxhZyA9IGVudi0+RXhjZXB0aW9uQ2hlY2soKTsKKyAgICBpZiAoZmxhZykgeworICAgICAgICBlbnYtPkV4Y2VwdGlvbkNsZWFyKCk7CisgICAgICAgIHJldHVybiBVTktOT1dOX0VSUk9SOworICAgIH0KKworICAgIGNvbnN0IGNoYXIgKnN0ciA9IGVudi0+R2V0U3RyaW5nVVRGQ2hhcnMoam1pbWUsIDApOworICAgIGlmIChzdHIgIT0gTlVMTCkgeworICAgICAgICAqbWltZVR5cGUgPSBTdHJpbmc4KHN0cik7CisgICAgfSBlbHNlIHsKKyAgICAgICAgKm1pbWVUeXBlID0gImFwcGxpY2F0aW9uL29jdGV0LXN0cmVhbSI7CisgICAgfQorICAgIGVudi0+UmVsZWFzZVN0cmluZ1VURkNoYXJzKGptaW1lLCBzdHIpOworICAgIHJldHVybiBPSzsKK30KKworc3RhdHVzX3QgSk1lZGlhMkhUVFBDb25uZWN0aW9uOjpnZXRVcmkoU3RyaW5nOCAqdXJpKSB7CisgICAgSk5JRW52KiBlbnYgPSBKYXZhVk1IZWxwZXI6OmdldEpOSUVudigpOworICAgIGpzdHJpbmcganVyaSA9IChqc3RyaW5nKWVudi0+Q2FsbE9iamVjdE1ldGhvZChtTWVkaWEySFRUUENvbm5lY3Rpb25PYmosIG1HZXRVcmlNZXRob2QpOworICAgIGpib29sZWFuIGZsYWcgPSBlbnYtPkV4Y2VwdGlvbkNoZWNrKCk7CisgICAgaWYgKGZsYWcpIHsKKyAgICAgICAgZW52LT5FeGNlcHRpb25DbGVhcigpOworICAgICAgICByZXR1cm4gVU5LTk9XTl9FUlJPUjsKKyAgICB9CisKKyAgICBjb25zdCBjaGFyICpzdHIgPSBlbnYtPkdldFN0cmluZ1VURkNoYXJzKGp1cmksIDApOworICAgICp1cmkgPSBTdHJpbmc4KHN0cik7CisgICAgZW52LT5SZWxlYXNlU3RyaW5nVVRGQ2hhcnMoanVyaSwgc3RyKTsKKyAgICByZXR1cm4gT0s7Cit9CisKK30gIC8vIG5hbWVzcGFjZSBhbmRyb2lkCmRpZmYgLS1naXQgYS9tZWRpYS9saWJtZWRpYXBsYXllcjIvSk1lZGlhMkhUVFBTZXJ2aWNlLmNwcCBiL21lZGlhL2xpYm1lZGlhcGxheWVyMi9KTWVkaWEySFRUUFNlcnZpY2UuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI2NGMxNWQKLS0tIC9kZXYvbnVsbAorKysgYi9tZWRpYS9saWJtZWRpYXBsYXllcjIvSk1lZGlhMkhUVFBTZXJ2aWNlLmNwcApAQCAtMCwwICsxLDYwIEBACisvKgorICogQ29weXJpZ2h0IDIwMTcsIFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworCisvLyNkZWZpbmUgTE9HX05ERUJVRyAwCisjZGVmaW5lIExPR19UQUcgIkpNZWRpYTJIVFRQU2VydmljZSIKKyNpbmNsdWRlIDx1dGlscy9Mb2cuaD4KKworI2luY2x1ZGUgPGpuaS5oPgorCisjaW5jbHVkZSA8bWVkaWFwbGF5ZXIyL0phdmFWTUhlbHBlci5oPgorI2luY2x1ZGUgPG1lZGlhcGxheWVyMi9KTWVkaWEySFRUUFNlcnZpY2UuaD4KKyNpbmNsdWRlIDxtZWRpYXBsYXllcjIvSk1lZGlhMkhUVFBDb25uZWN0aW9uLmg+CisjaW5jbHVkZSA8bWVkaWEvc3RhZ2VmcmlnaHQvZm91bmRhdGlvbi9BRGVidWcuaD4KKworI2luY2x1ZGUgPG5hdGl2ZWhlbHBlci9KTklIZWxwLmg+CisjaW5jbHVkZSA8bmF0aXZlaGVscGVyL1Njb3BlZExvY2FsUmVmLmg+CisKK25hbWVzcGFjZSBhbmRyb2lkIHsKKworSk1lZGlhMkhUVFBTZXJ2aWNlOjpKTWVkaWEySFRUUFNlcnZpY2UoSk5JRW52ICplbnYsIGpvYmplY3QgdGhpeikgeworICAgIG1NZWRpYTJIVFRQU2VydmljZU9iaiA9IGVudi0+TmV3R2xvYmFsUmVmKHRoaXopOworICAgIENIRUNLKG1NZWRpYTJIVFRQU2VydmljZU9iaiAhPSBOVUxMKTsKKworICAgIFNjb3BlZExvY2FsUmVmPGpjbGFzcz4gbWVkaWEySFRUUFNlcnZpY2VDbGFzcyhlbnYsIGVudi0+R2V0T2JqZWN0Q2xhc3MobU1lZGlhMkhUVFBTZXJ2aWNlT2JqKSk7CisgICAgQ0hFQ0sobWVkaWEySFRUUFNlcnZpY2VDbGFzcy5nZXQoKSAhPSBOVUxMKTsKKworICAgIG1NYWtlSFRUUENvbm5lY3Rpb25NZXRob2QgPSBlbnYtPkdldE1ldGhvZElEKAorICAgICAgICAgICAgbWVkaWEySFRUUFNlcnZpY2VDbGFzcy5nZXQoKSwKKyAgICAgICAgICAgICJtYWtlSFRUUENvbm5lY3Rpb24iLAorICAgICAgICAgICAgIigpTGFuZHJvaWQvbWVkaWEvTWVkaWEySFRUUENvbm5lY3Rpb247Iik7CisgICAgQ0hFQ0sobU1ha2VIVFRQQ29ubmVjdGlvbk1ldGhvZCAhPSBOVUxMKTsKK30KKworSk1lZGlhMkhUVFBTZXJ2aWNlOjp+Sk1lZGlhMkhUVFBTZXJ2aWNlKCkgeworICAgIEpOSUVudiAqZW52ID0gSmF2YVZNSGVscGVyOjpnZXRKTklFbnYoKTsKKyAgICBlbnYtPkRlbGV0ZUdsb2JhbFJlZihtTWVkaWEySFRUUFNlcnZpY2VPYmopOworfQorCitzcDxNZWRpYUhUVFBDb25uZWN0aW9uPiBKTWVkaWEySFRUUFNlcnZpY2U6Om1ha2VIVFRQQ29ubmVjdGlvbigpIHsKKyAgICBKTklFbnYqIGVudiA9IEphdmFWTUhlbHBlcjo6Z2V0Sk5JRW52KCk7CisgICAgam9iamVjdCBtZWRpYTJIVFRQQ29ubmVjdGlvbk9iaiA9CisgICAgICAgIGVudi0+Q2FsbE9iamVjdE1ldGhvZChtTWVkaWEySFRUUFNlcnZpY2VPYmosIG1NYWtlSFRUUENvbm5lY3Rpb25NZXRob2QpOworCisgICAgcmV0dXJuIG5ldyBKTWVkaWEySFRUUENvbm5lY3Rpb24oZW52LCBtZWRpYTJIVFRQQ29ubmVjdGlvbk9iaik7Cit9CisKK30gIC8vIG5hbWVzcGFjZSBhbmRyb2lkCmRpZmYgLS1naXQgYS9tZWRpYS9saWJtZWRpYXBsYXllcjIvSmF2YVZNSGVscGVyLmNwcCBiL21lZGlhL2xpYm1lZGlhcGxheWVyMi9KYXZhVk1IZWxwZXIuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkwYWFhN2YKLS0tIC9kZXYvbnVsbAorKysgYi9tZWRpYS9saWJtZWRpYXBsYXllcjIvSmF2YVZNSGVscGVyLmNwcApAQCAtMCwwICsxLDQ4IEBACisvKgorICogQ29weXJpZ2h0IDIwMTggVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworCisjZGVmaW5lIExPR19UQUcgIkphdmFWTUhlbHBlciIKKworI2luY2x1ZGUgIm1lZGlhcGxheWVyMi9KYXZhVk1IZWxwZXIuaCIKKworI2luY2x1ZGUgPG1lZGlhL3N0YWdlZnJpZ2h0L2ZvdW5kYXRpb24vQURlYnVnLmg+CisKKyNpbmNsdWRlIDxzdGRsaWIuaD4KKworbmFtZXNwYWNlIGFuZHJvaWQgeworCisvLyBzdGF0aWMKK3N0ZDo6YXRvbWljPEphdmFWTSAqPiBKYXZhVk1IZWxwZXI6OnNKYXZhVk0oTlVMTCk7CisKKy8vIHN0YXRpYworSk5JRW52ICpKYXZhVk1IZWxwZXI6OmdldEpOSUVudigpIHsKKyAgICBKTklFbnYgKmVudjsKKyAgICBKYXZhVk0gKnZtID0gc0phdmFWTS5sb2FkKCk7CisgICAgQ0hFQ0sodm0gIT0gTlVMTCk7CisKKyAgICBpZiAodm0tPkdldEVudigodm9pZCAqKikmZW52LCBKTklfVkVSU0lPTl8xXzQpICE9IEpOSV9PSykgeworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisKKyAgICByZXR1cm4gZW52OworfQorCisvLyBzdGF0aWMKK3ZvaWQgSmF2YVZNSGVscGVyOjpzZXRKYXZhVk0oSmF2YVZNICp2bSkgeworICAgIHNKYXZhVk0uc3RvcmUodm0pOworfQorCit9ICAvLyBuYW1lc3BhY2UgYW5kcm9pZApkaWZmIC0tZ2l0IGEvbWVkaWEvbGlibWVkaWFwbGF5ZXIyL01lZGlhUGxheWVyMkF1ZGlvT3V0cHV0LmNwcCBiL21lZGlhL2xpYm1lZGlhcGxheWVyMi9NZWRpYVBsYXllcjJBdWRpb091dHB1dC5jcHAKaW5kZXggYThlMWQxZi4uOThhM2U3NSAxMDA2NDQKLS0tIGEvbWVkaWEvbGlibWVkaWFwbGF5ZXIyL01lZGlhUGxheWVyMkF1ZGlvT3V0cHV0LmNwcAorKysgYi9tZWRpYS9saWJtZWRpYXBsYXllcjIvTWVkaWFQbGF5ZXIyQXVkaW9PdXRwdXQuY3BwCkBAIC0yMyw3ICsyMyw2IEBACiAjaW5jbHVkZSA8dXRpbHMvTG9nLmg+CiAKICNpbmNsdWRlIDxtZWRpYS9BdWRpb1BvbGljeUhlbHBlci5oPgotI2luY2x1ZGUgPG1lZGlhL0F1ZGlvVHJhY2suaD4KICNpbmNsdWRlIDxtZWRpYS9zdGFnZWZyaWdodC9mb3VuZGF0aW9uL0FEZWJ1Zy5oPgogCiBuYW1lc3BhY2UgewpAQCAtNDQsMzEgKzQzLDI4IEBACiAgICAgU3RyaW5nOCByZXN1bHQ7CiAKICAgICByZXN1bHQuYXBwZW5kKCIgTWVkaWFQbGF5ZXIyQXVkaW9PdXRwdXRcbiIpOwotICAgIHNucHJpbnRmKGJ1ZmZlciwgMjU1LCAiICBzdHJlYW0gdHlwZSglZCksIGxlZnQgLSByaWdodCB2b2x1bWUoJWYsICVmKVxuIiwKLSAgICAgICAgICAgIG1TdHJlYW1UeXBlLCBtTGVmdFZvbHVtZSwgbVJpZ2h0Vm9sdW1lKTsKKyAgICBzbnByaW50ZihidWZmZXIsIDI1NSwgIiAgdm9sdW1lKCVmKVxuIiwgbVZvbHVtZSk7CiAgICAgcmVzdWx0LmFwcGVuZChidWZmZXIpOwogICAgIHNucHJpbnRmKGJ1ZmZlciwgMjU1LCAiICBtc2VjIHBlciBmcmFtZSglZiksIGxhdGVuY3kgKCVkKVxuIiwKLSAgICAgICAgICAgIG1Nc2Vjc1BlckZyYW1lLCAobVRyYWNrICE9IDApID8gbVRyYWNrLT5sYXRlbmN5KCkgOiAtMSk7CisgICAgICAgICAgICBtTXNlY3NQZXJGcmFtZSwgKG1KQXVkaW9UcmFjayAhPSBudWxscHRyKSA/IG1KQXVkaW9UcmFjay0+bGF0ZW5jeSgpIDogLTEpOwogICAgIHJlc3VsdC5hcHBlbmQoYnVmZmVyKTsKICAgICBzbnByaW50ZihidWZmZXIsIDI1NSwgIiAgYXV4IGVmZmVjdCBpZCglZCksIHNlbmQgbGV2ZWwgKCVmKVxuIiwKICAgICAgICAgICAgIG1BdXhFZmZlY3RJZCwgbVNlbmRMZXZlbCk7CiAgICAgcmVzdWx0LmFwcGVuZChidWZmZXIpOwogCiAgICAgOjp3cml0ZShmZCwgcmVzdWx0LnN0cmluZygpLCByZXN1bHQuc2l6ZSgpKTsKLSAgICBpZiAobVRyYWNrICE9IDApIHsKLSAgICAgICAgbVRyYWNrLT5kdW1wKGZkLCBhcmdzKTsKKyAgICBpZiAobUpBdWRpb1RyYWNrICE9IG51bGxwdHIpIHsKKyAgICAgICAgbUpBdWRpb1RyYWNrLT5kdW1wKGZkLCBhcmdzKTsKICAgICB9CiAgICAgcmV0dXJuIE5PX0VSUk9SOwogfQogCi1NZWRpYVBsYXllcjJBdWRpb091dHB1dDo6TWVkaWFQbGF5ZXIyQXVkaW9PdXRwdXQoYXVkaW9fc2Vzc2lvbl90IHNlc3Npb25JZCwgdWlkX3QgdWlkLCBpbnQgcGlkLAotICAgICAgICBjb25zdCBhdWRpb19hdHRyaWJ1dGVzX3QqIGF0dHIsIGNvbnN0IHNwPEF1ZGlvU3lzdGVtOjpBdWRpb0RldmljZUNhbGxiYWNrPiYgZGV2aWNlQ2FsbGJhY2spCi0gICAgOiBtQ2FsbGJhY2soTlVMTCksCi0gICAgICBtQ2FsbGJhY2tDb29raWUoTlVMTCksCi0gICAgICBtQ2FsbGJhY2tEYXRhKE5VTEwpLAotICAgICAgbVN0cmVhbVR5cGUoQVVESU9fU1RSRUFNX01VU0lDKSwKLSAgICAgIG1MZWZ0Vm9sdW1lKDEuMCksCi0gICAgICBtUmlnaHRWb2x1bWUoMS4wKSwKK01lZGlhUGxheWVyMkF1ZGlvT3V0cHV0OjpNZWRpYVBsYXllcjJBdWRpb091dHB1dChpbnQzMl90IHNlc3Npb25JZCwgdWlkX3QgdWlkLCBpbnQgcGlkLAorICAgICAgICBjb25zdCBqb2JqZWN0IGF0dHJpYnV0ZXMpCisgICAgOiBtQ2FsbGJhY2sobnVsbHB0ciksCisgICAgICBtQ2FsbGJhY2tDb29raWUobnVsbHB0ciksCisgICAgICBtQ2FsbGJhY2tEYXRhKG51bGxwdHIpLAorICAgICAgbVZvbHVtZSgxLjApLAogICAgICAgbVBsYXliYWNrUmF0ZShBVURJT19QTEFZQkFDS19SQVRFX0RFRkFVTFQpLAogICAgICAgbVNhbXBsZVJhdGVIeigwKSwKICAgICAgIG1Nc2Vjc1BlckZyYW1lKDApLApAQCAtNzgsMjggKzc0LDIyIEBACiAgICAgICBtUGlkKHBpZCksCiAgICAgICBtU2VuZExldmVsKDAuMCksCiAgICAgICBtQXV4RWZmZWN0SWQoMCksCi0gICAgICBtRmxhZ3MoQVVESU9fT1VUUFVUX0ZMQUdfTk9ORSksCi0gICAgICBtU2VsZWN0ZWREZXZpY2VJZChBVURJT19QT1JUX0hBTkRMRV9OT05FKSwKLSAgICAgIG1Sb3V0ZWREZXZpY2VJZChBVURJT19QT1JUX0hBTkRMRV9OT05FKSwKLSAgICAgIG1EZXZpY2VDYWxsYmFja0VuYWJsZWQoZmFsc2UpLAotICAgICAgbURldmljZUNhbGxiYWNrKGRldmljZUNhbGxiYWNrKSB7CisgICAgICBtRmxhZ3MoQVVESU9fT1VUUFVUX0ZMQUdfTk9ORSkgewogICAgIEFMT0dWKCJNZWRpYVBsYXllcjJBdWRpb091dHB1dCglZCkiLCBzZXNzaW9uSWQpOwotICAgIGlmIChhdHRyICE9IE5VTEwpIHsKLSAgICAgICAgbUF0dHJpYnV0ZXMgPSAoYXVkaW9fYXR0cmlidXRlc190ICopIGNhbGxvYygxLCBzaXplb2YoYXVkaW9fYXR0cmlidXRlc190KSk7Ci0gICAgICAgIGlmIChtQXR0cmlidXRlcyAhPSBOVUxMKSB7Ci0gICAgICAgICAgICBtZW1jcHkobUF0dHJpYnV0ZXMsIGF0dHIsIHNpemVvZihhdWRpb19hdHRyaWJ1dGVzX3QpKTsKLSAgICAgICAgICAgIG1TdHJlYW1UeXBlID0gYXVkaW9fYXR0cmlidXRlc190b19zdHJlYW1fdHlwZShhdHRyKTsKLSAgICAgICAgfQotICAgIH0gZWxzZSB7Ci0gICAgICAgIG1BdHRyaWJ1dGVzID0gTlVMTDsKKworICAgIGlmIChhdHRyaWJ1dGVzICE9IG51bGxwdHIpIHsKKyAgICAgICAgbUF0dHJpYnV0ZXMgPSBuZXcgSk9iamVjdEhvbGRlcihhdHRyaWJ1dGVzKTsKICAgICB9CiAKICAgICBzZXRNaW5CdWZmZXJDb3VudCgpOworICAgIG1Sb3V0aW5nRGVsZWdhdGVzLmNsZWFyKCk7CiB9CiAKIE1lZGlhUGxheWVyMkF1ZGlvT3V0cHV0Ojp+TWVkaWFQbGF5ZXIyQXVkaW9PdXRwdXQoKSB7CisgICAgZm9yIChhdXRvIHJvdXRpbmdEZWxlZ2F0ZSA6IG1Sb3V0aW5nRGVsZWdhdGVzKSB7CisgICAgICAgIEpBdWRpb1RyYWNrOjpyZW1vdmVHbG9iYWxSZWYocm91dGluZ0RlbGVnYXRlLnNlY29uZCk7CisgICAgfQogICAgIGNsb3NlKCk7Ci0gICAgZnJlZShtQXR0cmlidXRlcyk7CiAgICAgZGVsZXRlIG1DYWxsYmFja0RhdGE7CiB9CiAKQEAgLTEyNiwzMSArMTE2LDMxIEBACiAKIHNzaXplX3QgTWVkaWFQbGF5ZXIyQXVkaW9PdXRwdXQ6OmJ1ZmZlclNpemUoKSBjb25zdCB7CiAgICAgTXV0ZXg6OkF1dG9sb2NrIGxvY2sobUxvY2spOwotICAgIGlmIChtVHJhY2sgPT0gMCkgeworICAgIGlmIChtSkF1ZGlvVHJhY2sgPT0gbnVsbHB0cikgewogICAgICAgICByZXR1cm4gTk9fSU5JVDsKICAgICB9Ci0gICAgcmV0dXJuIG1UcmFjay0+ZnJhbWVDb3VudCgpICogbUZyYW1lU2l6ZTsKKyAgICByZXR1cm4gbUpBdWRpb1RyYWNrLT5mcmFtZUNvdW50KCkgKiBtRnJhbWVTaXplOwogfQogCiBzc2l6ZV90IE1lZGlhUGxheWVyMkF1ZGlvT3V0cHV0OjpmcmFtZUNvdW50KCkgY29uc3QgewogICAgIE11dGV4OjpBdXRvbG9jayBsb2NrKG1Mb2NrKTsKLSAgICBpZiAobVRyYWNrID09IDApIHsKKyAgICBpZiAobUpBdWRpb1RyYWNrID09IG51bGxwdHIpIHsKICAgICAgICAgcmV0dXJuIE5PX0lOSVQ7CiAgICAgfQotICAgIHJldHVybiBtVHJhY2stPmZyYW1lQ291bnQoKTsKKyAgICByZXR1cm4gbUpBdWRpb1RyYWNrLT5mcmFtZUNvdW50KCk7CiB9CiAKIHNzaXplX3QgTWVkaWFQbGF5ZXIyQXVkaW9PdXRwdXQ6OmNoYW5uZWxDb3VudCgpIGNvbnN0IHsKICAgICBNdXRleDo6QXV0b2xvY2sgbG9jayhtTG9jayk7Ci0gICAgaWYgKG1UcmFjayA9PSAwKSB7CisgICAgaWYgKG1KQXVkaW9UcmFjayA9PSBudWxscHRyKSB7CiAgICAgICAgIHJldHVybiBOT19JTklUOwogICAgIH0KLSAgICByZXR1cm4gbVRyYWNrLT5jaGFubmVsQ291bnQoKTsKKyAgICByZXR1cm4gbUpBdWRpb1RyYWNrLT5jaGFubmVsQ291bnQoKTsKIH0KIAogc3NpemVfdCBNZWRpYVBsYXllcjJBdWRpb091dHB1dDo6ZnJhbWVTaXplKCkgY29uc3QgewogICAgIE11dGV4OjpBdXRvbG9jayBsb2NrKG1Mb2NrKTsKLSAgICBpZiAobVRyYWNrID09IDApIHsKKyAgICBpZiAobUpBdWRpb1RyYWNrID09IG51bGxwdHIpIHsKICAgICAgICAgcmV0dXJuIE5PX0lOSVQ7CiAgICAgfQogICAgIHJldHVybiBtRnJhbWVTaXplOwpAQCAtMTU4LDEwICsxNDgsMTAgQEAKIAogdWludDMyX3QgTWVkaWFQbGF5ZXIyQXVkaW9PdXRwdXQ6OmxhdGVuY3kgKCkgY29uc3QgewogICAgIE11dGV4OjpBdXRvbG9jayBsb2NrKG1Mb2NrKTsKLSAgICBpZiAobVRyYWNrID09IDApIHsKKyAgICBpZiAobUpBdWRpb1RyYWNrID09IG51bGxwdHIpIHsKICAgICAgICAgcmV0dXJuIDA7CiAgICAgfQotICAgIHJldHVybiBtVHJhY2stPmxhdGVuY3koKTsKKyAgICByZXR1cm4gbUpBdWRpb1RyYWNrLT5sYXRlbmN5KCk7CiB9CiAKIGZsb2F0IE1lZGlhUGxheWVyMkF1ZGlvT3V0cHV0Ojptc2Vjc1BlckZyYW1lKCkgY29uc3QgewpAQCAtMTcxLDE4ICsxNjEsMTggQEAKIAogc3RhdHVzX3QgTWVkaWFQbGF5ZXIyQXVkaW9PdXRwdXQ6OmdldFBvc2l0aW9uKHVpbnQzMl90ICpwb3NpdGlvbikgY29uc3QgewogICAgIE11dGV4OjpBdXRvbG9jayBsb2NrKG1Mb2NrKTsKLSAgICBpZiAobVRyYWNrID09IDApIHsKKyAgICBpZiAobUpBdWRpb1RyYWNrID09IG51bGxwdHIpIHsKICAgICAgICAgcmV0dXJuIE5PX0lOSVQ7CiAgICAgfQotICAgIHJldHVybiBtVHJhY2stPmdldFBvc2l0aW9uKHBvc2l0aW9uKTsKKyAgICByZXR1cm4gbUpBdWRpb1RyYWNrLT5nZXRQb3NpdGlvbihwb3NpdGlvbik7CiB9CiAKIHN0YXR1c190IE1lZGlhUGxheWVyMkF1ZGlvT3V0cHV0OjpnZXRUaW1lc3RhbXAoQXVkaW9UaW1lc3RhbXAgJnRzKSBjb25zdCB7CiAgICAgTXV0ZXg6OkF1dG9sb2NrIGxvY2sobUxvY2spOwotICAgIGlmIChtVHJhY2sgPT0gMCkgeworICAgIGlmIChtSkF1ZGlvVHJhY2sgPT0gbnVsbHB0cikgewogICAgICAgICByZXR1cm4gTk9fSU5JVDsKICAgICB9Ci0gICAgcmV0dXJuIG1UcmFjay0+Z2V0VGltZXN0YW1wKHRzKTsKKyAgICByZXR1cm4gbUpBdWRpb1RyYWNrLT5nZXRUaW1lc3RhbXAodHMpOwogfQogCiAvLyBUT0RPOiBSZW1vdmUgdW5uZWNlc3NhcnkgY2FsbHMgdG8gZ2V0UGxheWVkT3V0RHVyYXRpb25VcygpCkBAIC0xOTUsNyArMTg1LDcgQEAKIC8vIENhbGN1bGF0ZSBkdXJhdGlvbiBvZiBwbGF5ZWQgc2FtcGxlcyBpZiBwbGF5ZWQgYXQgbm9ybWFsIHJhdGUgKGkuZS4sIDEuMCkuCiBpbnQ2NF90IE1lZGlhUGxheWVyMkF1ZGlvT3V0cHV0OjpnZXRQbGF5ZWRPdXREdXJhdGlvblVzKGludDY0X3Qgbm93VXMpIGNvbnN0IHsKICAgICBNdXRleDo6QXV0b2xvY2sgbG9jayhtTG9jayk7Ci0gICAgaWYgKG1UcmFjayA9PSAwIHx8IG1TYW1wbGVSYXRlSHogPT0gMCkgeworICAgIGlmIChtSkF1ZGlvVHJhY2sgPT0gbnVsbHB0ciB8fCBtU2FtcGxlUmF0ZUh6ID09IDApIHsKICAgICAgICAgcmV0dXJuIDA7CiAgICAgfQogCkBAIC0yMDMsMjIgKzE5MywxOCBAQAogICAgIGludDY0X3QgbnVtRnJhbWVzUGxheWVkQXRVczsKICAgICBBdWRpb1RpbWVzdGFtcCB0czsKIAotICAgIHN0YXR1c190IHJlcyA9IG1UcmFjay0+Z2V0VGltZXN0YW1wKHRzKTsKKyAgICBzdGF0dXNfdCByZXMgPSBtSkF1ZGlvVHJhY2stPmdldFRpbWVzdGFtcCh0cyk7CisKICAgICBpZiAocmVzID09IE9LKSB7ICAgICAgICAgICAgICAgICAvLyBjYXNlIDE6IG1peGluZyBhdWRpbyB0cmFja3MgYW5kIG9mZmxvYWRlZCB0cmFja3MuCiAgICAgICAgIG51bUZyYW1lc1BsYXllZCA9IHRzLm1Qb3NpdGlvbjsKICAgICAgICAgbnVtRnJhbWVzUGxheWVkQXRVcyA9IHRzLm1UaW1lLnR2X3NlYyAqIDEwMDAwMDBMTCArIHRzLm1UaW1lLnR2X25zZWMgLyAxMDAwOwogICAgICAgICAvL0FMT0dEKCJnZXRUaW1lc3RhbXA6IE9LICVkICVsbGQiLCBudW1GcmFtZXNQbGF5ZWQsIChsb25nIGxvbmcpbnVtRnJhbWVzUGxheWVkQXRVcyk7Ci0gICAgfSBlbHNlIGlmIChyZXMgPT0gV09VTERfQkxPQ0spIHsgLy8gY2FzZSAyOiB0cmFuc2l0b3J5IHN0YXRlIG9uIHN0YXJ0IG9mIGEgbmV3IHRyYWNrCisgICAgfSBlbHNlIHsgICAgICAgICAgICAgICAgICAgICAgICAgLy8gY2FzZSAyOiB0cmFuc2l0b3J5IHN0YXRlIG9uIHN0YXJ0IG9mIGEgbmV3IHRyYWNrCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gY2FzZSAzOiB0cmFuc2l0b3J5IGF0IG5ldyB0cmFjayBvciBhdWRpbyBmYXN0IHRyYWNrcy4KICAgICAgICAgbnVtRnJhbWVzUGxheWVkID0gMDsKICAgICAgICAgbnVtRnJhbWVzUGxheWVkQXRVcyA9IG5vd1VzOwogICAgICAgICAvL0FMT0dEKCJnZXRUaW1lc3RhbXA6IFdPVUxEX0JMT0NLICVkICVsbGQiLAogICAgICAgICAvLyAgICAgICAgbnVtRnJhbWVzUGxheWVkLCAobG9uZyBsb25nKW51bUZyYW1lc1BsYXllZEF0VXMpOwotICAgIH0gZWxzZSB7ICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGNhc2UgMzogdHJhbnNpdG9yeSBhdCBuZXcgdHJhY2sgb3IgYXVkaW8gZmFzdCB0cmFja3MuCi0gICAgICAgIHJlcyA9IG1UcmFjay0+Z2V0UG9zaXRpb24oJm51bUZyYW1lc1BsYXllZCk7Ci0gICAgICAgIENIRUNLX0VRKHJlcywgKHN0YXR1c190KU9LKTsKLSAgICAgICAgbnVtRnJhbWVzUGxheWVkQXRVcyA9IG5vd1VzOwotICAgICAgICBudW1GcmFtZXNQbGF5ZWRBdFVzICs9IDEwMDBMTCAqIG1UcmFjay0+bGF0ZW5jeSgpIC8gMjsgLyogWFhYICovCi0gICAgICAgIC8vQUxPR0QoImdldFBvc2l0aW9uOiAldSAlbGxkIiwgbnVtRnJhbWVzUGxheWVkLCAobG9uZyBsb25nKW51bUZyYW1lc1BsYXllZEF0VXMpOwogICAgIH0KIAogICAgIC8vIENIRUNLX0VRKG51bUZyYW1lc1BsYXllZCAmICgxIDw8IDMxKSwgMCk7ICAvLyBjYW4ndCBiZSBuZWdhdGl2ZSB1bnRpbCAxMi40IGhycywgdGVzdApAQCAtMjQ0LDEwOCArMjMwLDU1IEBACiAKIHN0YXR1c190IE1lZGlhUGxheWVyMkF1ZGlvT3V0cHV0OjpnZXRGcmFtZXNXcml0dGVuKHVpbnQzMl90ICpmcmFtZXN3cml0dGVuKSBjb25zdCB7CiAgICAgTXV0ZXg6OkF1dG9sb2NrIGxvY2sobUxvY2spOwotICAgIGlmIChtVHJhY2sgPT0gMCkgeworICAgIGlmIChtSkF1ZGlvVHJhY2sgPT0gbnVsbHB0cikgewogICAgICAgICByZXR1cm4gTk9fSU5JVDsKICAgICB9CiAgICAgRXh0ZW5kZWRUaW1lc3RhbXAgZXRzOwotICAgIHN0YXR1c190IHN0YXR1cyA9IG1UcmFjay0+Z2V0VGltZXN0YW1wKCZldHMpOworICAgIHN0YXR1c190IHN0YXR1cyA9IG1KQXVkaW9UcmFjay0+Z2V0VGltZXN0YW1wKCZldHMpOwogICAgIGlmIChzdGF0dXMgPT0gT0sgfHwgc3RhdHVzID09IFdPVUxEX0JMT0NLKSB7CiAgICAgICAgICpmcmFtZXN3cml0dGVuID0gKHVpbnQzMl90KWV0cy5tUG9zaXRpb25bRXh0ZW5kZWRUaW1lc3RhbXA6OkxPQ0FUSU9OX0NMSUVOVF07CiAgICAgfQogICAgIHJldHVybiBzdGF0dXM7CiB9CiAKLXN0YXR1c190IE1lZGlhUGxheWVyMkF1ZGlvT3V0cHV0OjpzZXRQYXJhbWV0ZXJzKGNvbnN0IFN0cmluZzgmIGtleVZhbHVlUGFpcnMpIHsKK3ZvaWQgTWVkaWFQbGF5ZXIyQXVkaW9PdXRwdXQ6OnNldEF1ZGlvQXR0cmlidXRlcyhjb25zdCBqb2JqZWN0IGF0dHJpYnV0ZXMpIHsKICAgICBNdXRleDo6QXV0b2xvY2sgbG9jayhtTG9jayk7Ci0gICAgaWYgKG1UcmFjayA9PSAwKSB7Ci0gICAgICAgIHJldHVybiBOT19JTklUOwotICAgIH0KLSAgICByZXR1cm4gbVRyYWNrLT5zZXRQYXJhbWV0ZXJzKGtleVZhbHVlUGFpcnMpOworICAgIG1BdHRyaWJ1dGVzID0gKGF0dHJpYnV0ZXMgPT0gbnVsbHB0cikgPyBudWxscHRyIDogbmV3IEpPYmplY3RIb2xkZXIoYXR0cmlidXRlcyk7CiB9CiAKLVN0cmluZzggIE1lZGlhUGxheWVyMkF1ZGlvT3V0cHV0OjpnZXRQYXJhbWV0ZXJzKGNvbnN0IFN0cmluZzgmIGtleXMpIHsKK2F1ZGlvX3N0cmVhbV90eXBlX3QgTWVkaWFQbGF5ZXIyQXVkaW9PdXRwdXQ6OmdldEF1ZGlvU3RyZWFtVHlwZSgpIGNvbnN0IHsKKyAgICBBTE9HVigiZ2V0QXVkaW9TdHJlYW1UeXBlIik7CiAgICAgTXV0ZXg6OkF1dG9sb2NrIGxvY2sobUxvY2spOwotICAgIGlmIChtVHJhY2sgPT0gMCkgewotICAgICAgICByZXR1cm4gU3RyaW5nODo6ZW1wdHkoKTsKKyAgICBpZiAobUpBdWRpb1RyYWNrID09IG51bGxwdHIpIHsKKyAgICAgICAgcmV0dXJuIEFVRElPX1NUUkVBTV9ERUZBVUxUOwogICAgIH0KLSAgICByZXR1cm4gbVRyYWNrLT5nZXRQYXJhbWV0ZXJzKGtleXMpOwotfQotCi12b2lkIE1lZGlhUGxheWVyMkF1ZGlvT3V0cHV0OjpzZXRBdWRpb0F0dHJpYnV0ZXMoY29uc3QgYXVkaW9fYXR0cmlidXRlc190ICogYXR0cmlidXRlcykgewotICAgIE11dGV4OjpBdXRvbG9jayBsb2NrKG1Mb2NrKTsKLSAgICBpZiAoYXR0cmlidXRlcyA9PSBOVUxMKSB7Ci0gICAgICAgIGZyZWUobUF0dHJpYnV0ZXMpOwotICAgICAgICBtQXR0cmlidXRlcyA9IE5VTEw7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgaWYgKG1BdHRyaWJ1dGVzID09IE5VTEwpIHsKLSAgICAgICAgICAgIG1BdHRyaWJ1dGVzID0gKGF1ZGlvX2F0dHJpYnV0ZXNfdCAqKSBjYWxsb2MoMSwgc2l6ZW9mKGF1ZGlvX2F0dHJpYnV0ZXNfdCkpOwotICAgICAgICB9Ci0gICAgICAgIG1lbWNweShtQXR0cmlidXRlcywgYXR0cmlidXRlcywgc2l6ZW9mKGF1ZGlvX2F0dHJpYnV0ZXNfdCkpOwotICAgICAgICBtU3RyZWFtVHlwZSA9IGF1ZGlvX2F0dHJpYnV0ZXNfdG9fc3RyZWFtX3R5cGUoYXR0cmlidXRlcyk7Ci0gICAgfQotfQotCi12b2lkIE1lZGlhUGxheWVyMkF1ZGlvT3V0cHV0OjpzZXRBdWRpb1N0cmVhbVR5cGUoYXVkaW9fc3RyZWFtX3R5cGVfdCBzdHJlYW1UeXBlKSB7Ci0gICAgTXV0ZXg6OkF1dG9sb2NrIGxvY2sobUxvY2spOwotICAgIC8vIGRvIG5vdCBhbGxvdyBkaXJlY3Qgc3RyZWFtIHR5cGUgbW9kaWZpY2F0aW9uIGlmIGF0dHJpYnV0ZXMgaGF2ZSBiZWVuIHNldAotICAgIGlmIChtQXR0cmlidXRlcyA9PSBOVUxMKSB7Ci0gICAgICAgIG1TdHJlYW1UeXBlID0gc3RyZWFtVHlwZTsKLSAgICB9CisgICAgcmV0dXJuIG1KQXVkaW9UcmFjay0+Z2V0QXVkaW9TdHJlYW1UeXBlKCk7CiB9CiAKIHZvaWQgTWVkaWFQbGF5ZXIyQXVkaW9PdXRwdXQ6OmNsb3NlX2woKSB7Ci0gICAgbVRyYWNrLmNsZWFyKCk7CisgICAgbUpBdWRpb1RyYWNrLmNsZWFyKCk7CiB9CiAKIHN0YXR1c190IE1lZGlhUGxheWVyMkF1ZGlvT3V0cHV0OjpvcGVuKAogICAgICAgICB1aW50MzJfdCBzYW1wbGVSYXRlLCBpbnQgY2hhbm5lbENvdW50LCBhdWRpb19jaGFubmVsX21hc2tfdCBjaGFubmVsTWFzaywKLSAgICAgICAgYXVkaW9fZm9ybWF0X3QgZm9ybWF0LCBpbnQgYnVmZmVyQ291bnQsCisgICAgICAgIGF1ZGlvX2Zvcm1hdF90IGZvcm1hdCwKICAgICAgICAgQXVkaW9DYWxsYmFjayBjYiwgdm9pZCAqY29va2llLAogICAgICAgICBhdWRpb19vdXRwdXRfZmxhZ3NfdCBmbGFncywKICAgICAgICAgY29uc3QgYXVkaW9fb2ZmbG9hZF9pbmZvX3QgKm9mZmxvYWRJbmZvLAotICAgICAgICBib29sIGRvTm90UmVjb25uZWN0LAogICAgICAgICB1aW50MzJfdCBzdWdnZXN0ZWRGcmFtZUNvdW50KSB7Ci0gICAgQUxPR1YoIm9wZW4oJXUsICVkLCAweCV4LCAweCV4LCAlZCwgJWQgMHgleCkiLCBzYW1wbGVSYXRlLCBjaGFubmVsQ291bnQsIGNoYW5uZWxNYXNrLAotICAgICAgICAgICAgICAgIGZvcm1hdCwgYnVmZmVyQ291bnQsIG1TZXNzaW9uSWQsIGZsYWdzKTsKKyAgICBBTE9HVigib3BlbigldSwgJWQsIDB4JXgsIDB4JXgsICVkIDB4JXgpIiwgc2FtcGxlUmF0ZSwgY2hhbm5lbENvdW50LCBjaGFubmVsTWFzaywKKyAgICAgICAgICAgICAgICBmb3JtYXQsIG1TZXNzaW9uSWQsIGZsYWdzKTsKIAogICAgIC8vIG9mZmxvYWRpbmcgaXMgb25seSBzdXBwb3J0ZWQgaW4gY2FsbGJhY2sgbW9kZSBmb3Igbm93LgogICAgIC8vIG9mZmxvYWRJbmZvIG11c3QgYmUgcHJlc2VudCBpZiBvZmZsb2FkIGZsYWcgaXMgc2V0CiAgICAgaWYgKCgoZmxhZ3MgJiBBVURJT19PVVRQVVRfRkxBR19DT01QUkVTU19PRkZMT0FEKSAhPSAwKSAmJgotICAgICAgICAgICAgKChjYiA9PSBOVUxMKSB8fCAob2ZmbG9hZEluZm8gPT0gTlVMTCkpKSB7CisgICAgICAgICAgICAoKGNiID09IG51bGxwdHIpIHx8IChvZmZsb2FkSW5mbyA9PSBudWxscHRyKSkpIHsKICAgICAgICAgcmV0dXJuIEJBRF9WQUxVRTsKICAgICB9CiAKICAgICAvLyBjb21wdXRlIGZyYW1lIGNvdW50IGZvciB0aGUgQXVkaW9UcmFjayBpbnRlcm5hbCBidWZmZXIKLSAgICBzaXplX3QgZnJhbWVDb3VudDsKLSAgICBpZiAoKGZsYWdzICYgQVVESU9fT1VUUFVUX0ZMQUdfQ09NUFJFU1NfT0ZGTE9BRCkgIT0gMCkgewotICAgICAgICBmcmFtZUNvdW50ID0gMDsgLy8gQXVkaW9UcmFjayB3aWxsIGdldCBmcmFtZSBjb3VudCBmcm9tIEF1ZGlvRmxpbmdlcgotICAgIH0gZWxzZSB7Ci0gICAgICAgIC8vIHRyeSB0byBlc3RpbWF0ZSB0aGUgYnVmZmVyIHByb2Nlc3NpbmcgZmV0Y2ggc2l6ZSBmcm9tIEF1ZGlvRmxpbmdlci4KLSAgICAgICAgLy8gZnJhbWVzUGVyQnVmZmVyIGlzIGFwcHJveGltYXRlIGFuZCBnZW5lcmFsbHkgY29ycmVjdCwgZXhjZXB0IHdoZW4gaXQncyBub3QgOi0pLgotICAgICAgICB1aW50MzJfdCBhZlNhbXBsZVJhdGU7Ci0gICAgICAgIHNpemVfdCBhZkZyYW1lQ291bnQ7Ci0gICAgICAgIGlmIChBdWRpb1N5c3RlbTo6Z2V0T3V0cHV0RnJhbWVDb3VudCgmYWZGcmFtZUNvdW50LCBtU3RyZWFtVHlwZSkgIT0gTk9fRVJST1IpIHsKLSAgICAgICAgICAgIHJldHVybiBOT19JTklUOwotICAgICAgICB9Ci0gICAgICAgIGlmIChBdWRpb1N5c3RlbTo6Z2V0T3V0cHV0U2FtcGxpbmdSYXRlKCZhZlNhbXBsZVJhdGUsIG1TdHJlYW1UeXBlKSAhPSBOT19FUlJPUikgewotICAgICAgICAgICAgcmV0dXJuIE5PX0lOSVQ7Ci0gICAgICAgIH0KLSAgICAgICAgY29uc3Qgc2l6ZV90IGZyYW1lc1BlckJ1ZmZlciA9Ci0gICAgICAgICAgICAgICAgKHVuc2lnbmVkIGxvbmcgbG9uZylzYW1wbGVSYXRlICogYWZGcmFtZUNvdW50IC8gYWZTYW1wbGVSYXRlOwotCi0gICAgICAgIGlmIChidWZmZXJDb3VudCA9PSAwKSB7Ci0gICAgICAgICAgICAvLyB1c2Ugc3VnZ2VzdGVkRnJhbWVDb3VudAotICAgICAgICAgICAgYnVmZmVyQ291bnQgPSAoc3VnZ2VzdGVkRnJhbWVDb3VudCArIGZyYW1lc1BlckJ1ZmZlciAtIDEpIC8gZnJhbWVzUGVyQnVmZmVyOwotICAgICAgICB9Ci0gICAgICAgIC8vIENoZWNrIGFyZ3VtZW50IGJ1ZmZlckNvdW50IGFnYWluc3QgdGhlIG1pbmludW0gYnVmZmVyIGNvdW50Ci0gICAgICAgIGlmIChidWZmZXJDb3VudCAhPSAwICYmIGJ1ZmZlckNvdW50IDwgbU1pbkJ1ZmZlckNvdW50KSB7Ci0gICAgICAgICAgICBBTE9HVigiYnVmZmVyQ291bnQgKCVkKSBpbmNyZWFzZWQgdG8gJWQiLCBidWZmZXJDb3VudCwgbU1pbkJ1ZmZlckNvdW50KTsKLSAgICAgICAgICAgIGJ1ZmZlckNvdW50ID0gbU1pbkJ1ZmZlckNvdW50OwotICAgICAgICB9Ci0gICAgICAgIC8vIGlmIGZyYW1lQ291bnQgaXMgMCwgdGhlbiBBdWRpb1RyYWNrIHdpbGwgZ2V0IGZyYW1lIGNvdW50IGZyb20gQXVkaW9GbGluZ2VyCi0gICAgICAgIC8vIHdoaWNoIHdpbGwgYmUgdGhlIG1pbmltdW0gc2l6ZSBwZXJtaXR0ZWQuCi0gICAgICAgIGZyYW1lQ291bnQgPSBidWZmZXJDb3VudCAqIGZyYW1lc1BlckJ1ZmZlcjsKLSAgICB9CisgICAgY29uc3Qgc2l6ZV90IGZyYW1lQ291bnQgPQorICAgICAgICAgICAoKGZsYWdzICYgQVVESU9fT1VUUFVUX0ZMQUdfQ09NUFJFU1NfT0ZGTE9BRCkgIT0gMCkgPyAwIDogc3VnZ2VzdGVkRnJhbWVDb3VudDsKIAogICAgIGlmIChjaGFubmVsTWFzayA9PSBDSEFOTkVMX01BU0tfVVNFX0NIQU5ORUxfT1JERVIpIHsKICAgICAgICAgY2hhbm5lbE1hc2sgPSBhdWRpb19jaGFubmVsX291dF9tYXNrX2Zyb21fY291bnQoY2hhbm5lbENvdW50KTsKQEAgLTM1OSwzMiArMjkyLDIzIEBACiAgICAgbUNhbGxiYWNrID0gY2I7CiAgICAgbUNhbGxiYWNrQ29va2llID0gY29va2llOwogCi0gICAgc3A8QXVkaW9UcmFjaz4gdDsKLSAgICBDYWxsYmFja0RhdGEgKm5ld2NiZCA9IE5VTEw7CisgICAgc3A8SkF1ZGlvVHJhY2s+IGpUOworICAgIENhbGxiYWNrRGF0YSAqbmV3Y2JkID0gbnVsbHB0cjsKIAotICAgIEFMT0dWKCJjcmVhdGluZyBuZXcgQXVkaW9UcmFjayIpOworICAgIEFMT0dWKCJjcmVhdGluZyBuZXcgSkF1ZGlvVHJhY2siKTsKIAotICAgIGlmIChtQ2FsbGJhY2sgIT0gTlVMTCkgeworICAgIGlmIChtQ2FsbGJhY2sgIT0gbnVsbHB0cikgewogICAgICAgICBuZXdjYmQgPSBuZXcgQ2FsbGJhY2tEYXRhKHRoaXMpOwotICAgICAgICB0ID0gbmV3IEF1ZGlvVHJhY2soCi0gICAgICAgICAgICAgICAgbVN0cmVhbVR5cGUsCi0gICAgICAgICAgICAgICAgc2FtcGxlUmF0ZSwKLSAgICAgICAgICAgICAgICBmb3JtYXQsCi0gICAgICAgICAgICAgICAgY2hhbm5lbE1hc2ssCi0gICAgICAgICAgICAgICAgZnJhbWVDb3VudCwKLSAgICAgICAgICAgICAgICBmbGFncywKLSAgICAgICAgICAgICAgICBDYWxsYmFja1dyYXBwZXIsCi0gICAgICAgICAgICAgICAgbmV3Y2JkLAotICAgICAgICAgICAgICAgIDAsICAvLyBub3RpZmljYXRpb24gZnJhbWVzCi0gICAgICAgICAgICAgICAgbVNlc3Npb25JZCwKLSAgICAgICAgICAgICAgICBBdWRpb1RyYWNrOjpUUkFOU0ZFUl9DQUxMQkFDSywKLSAgICAgICAgICAgICAgICBvZmZsb2FkSW5mbywKLSAgICAgICAgICAgICAgICBtVWlkLAotICAgICAgICAgICAgICAgIG1QaWQsCi0gICAgICAgICAgICAgICAgbUF0dHJpYnV0ZXMsCi0gICAgICAgICAgICAgICAgZG9Ob3RSZWNvbm5lY3QsCi0gICAgICAgICAgICAgICAgMS4wZiwgIC8vIGRlZmF1bHQgdmFsdWUgZm9yIG1heFJlcXVpcmVkU3BlZWQKLSAgICAgICAgICAgICAgICBtU2VsZWN0ZWREZXZpY2VJZCk7CisgICAgICAgIGpUID0gbmV3IEpBdWRpb1RyYWNrKAorICAgICAgICAgICAgICAgICBzYW1wbGVSYXRlLAorICAgICAgICAgICAgICAgICBmb3JtYXQsCisgICAgICAgICAgICAgICAgIGNoYW5uZWxNYXNrLAorICAgICAgICAgICAgICAgICBDYWxsYmFja1dyYXBwZXIsCisgICAgICAgICAgICAgICAgIG5ld2NiZCwKKyAgICAgICAgICAgICAgICAgZnJhbWVDb3VudCwKKyAgICAgICAgICAgICAgICAgbVNlc3Npb25JZCwKKyAgICAgICAgICAgICAgICAgbUF0dHJpYnV0ZXMgIT0gbnVsbHB0ciA/IG1BdHRyaWJ1dGVzLT5nZXRKT2JqZWN0KCkgOiBudWxscHRyLAorICAgICAgICAgICAgICAgICAxLjBmKTsgIC8vIGRlZmF1bHQgdmFsdWUgZm9yIG1heFJlcXVpcmVkU3BlZWQKICAgICB9IGVsc2UgewogICAgICAgICAvLyBUT0RPOiBEdWUgdG8gYnVmZmVyIG1lbW9yeSBjb25jZXJucywgd2UgdXNlIGEgbWF4IHRhcmdldCBwbGF5YmFjayBzcGVlZAogICAgICAgICAvLyBiYXNlZCBvbiBtUGxheWJhY2tSYXRlIGF0IHRoZSB0aW1lIG9mIG9wZW4gKGluc3RlYWQgb2Yga01heFJlcXVpcmVkU3BlZWQpLApAQCAtMzk0LDczICszMTgsNjIgQEAKICAgICAgICAgQUxPR1dfSUYodGFyZ2V0U3BlZWQgIT0gbVBsYXliYWNrUmF0ZS5tU3BlZWQsCiAgICAgICAgICAgICAgICAgInRyYWNrIHRhcmdldCBzcGVlZDolZiBjbGFtcGVkIGZyb20gcGxheWJhY2sgc3BlZWQ6JWYiLAogICAgICAgICAgICAgICAgIHRhcmdldFNwZWVkLCBtUGxheWJhY2tSYXRlLm1TcGVlZCk7Ci0gICAgICAgIHQgPSBuZXcgQXVkaW9UcmFjaygKLSAgICAgICAgICAgICAgICBtU3RyZWFtVHlwZSwKLSAgICAgICAgICAgICAgICBzYW1wbGVSYXRlLAotICAgICAgICAgICAgICAgIGZvcm1hdCwKLSAgICAgICAgICAgICAgICBjaGFubmVsTWFzaywKLSAgICAgICAgICAgICAgICBmcmFtZUNvdW50LAotICAgICAgICAgICAgICAgIGZsYWdzLAotICAgICAgICAgICAgICAgIE5VTEwsIC8vIGNhbGxiYWNrCi0gICAgICAgICAgICAgICAgTlVMTCwgLy8gdXNlciBkYXRhCi0gICAgICAgICAgICAgICAgMCwgLy8gbm90aWZpY2F0aW9uIGZyYW1lcwotICAgICAgICAgICAgICAgIG1TZXNzaW9uSWQsCi0gICAgICAgICAgICAgICAgQXVkaW9UcmFjazo6VFJBTlNGRVJfREVGQVVMVCwKLSAgICAgICAgICAgICAgICBOVUxMLCAvLyBvZmZsb2FkIGluZm8KLSAgICAgICAgICAgICAgICBtVWlkLAotICAgICAgICAgICAgICAgIG1QaWQsCi0gICAgICAgICAgICAgICAgbUF0dHJpYnV0ZXMsCi0gICAgICAgICAgICAgICAgZG9Ob3RSZWNvbm5lY3QsCi0gICAgICAgICAgICAgICAgdGFyZ2V0U3BlZWQsCi0gICAgICAgICAgICAgICAgbVNlbGVjdGVkRGV2aWNlSWQpOworICAgICAgICBqVCA9IG5ldyBKQXVkaW9UcmFjaygKKyAgICAgICAgICAgICAgICAgc2FtcGxlUmF0ZSwKKyAgICAgICAgICAgICAgICAgZm9ybWF0LAorICAgICAgICAgICAgICAgICBjaGFubmVsTWFzaywKKyAgICAgICAgICAgICAgICAgbnVsbHB0ciwKKyAgICAgICAgICAgICAgICAgbnVsbHB0ciwKKyAgICAgICAgICAgICAgICAgZnJhbWVDb3VudCwKKyAgICAgICAgICAgICAgICAgbVNlc3Npb25JZCwKKyAgICAgICAgICAgICAgICAgbUF0dHJpYnV0ZXMgIT0gbnVsbHB0ciA/IG1BdHRyaWJ1dGVzLT5nZXRKT2JqZWN0KCkgOiBudWxscHRyLAorICAgICAgICAgICAgICAgICB0YXJnZXRTcGVlZCk7CiAgICAgfQogCi0gICAgaWYgKCh0ID09IDApIHx8ICh0LT5pbml0Q2hlY2soKSAhPSBOT19FUlJPUikpIHsKKyAgICBpZiAoalQgPT0gMCkgewogICAgICAgICBBTE9HRSgiVW5hYmxlIHRvIGNyZWF0ZSBhdWRpbyB0cmFjayIpOwogICAgICAgICBkZWxldGUgbmV3Y2JkOwogICAgICAgICAvLyB0IGdvZXMgb3V0IG9mIHNjb3BlLCBzbyByZWZlcmVuY2UgY291bnQgZHJvcHMgdG8gemVybwogICAgICAgICByZXR1cm4gTk9fSU5JVDsKLSAgICB9IGVsc2UgewotICAgICAgICAvLyBzdWNjZXNzZnVsIEF1ZGlvVHJhY2sgaW5pdGlhbGl6YXRpb24gaW1wbGllcyBhIGxlZ2FjeSBzdHJlYW0gdHlwZSB3YXMgZ2VuZXJhdGVkCi0gICAgICAgIC8vIGZyb20gdGhlIGF1ZGlvIGF0dHJpYnV0ZXMKLSAgICAgICAgbVN0cmVhbVR5cGUgPSB0LT5zdHJlYW1UeXBlKCk7CiAgICAgfQogCi0gICAgQ0hFQ0soKHQgIT0gTlVMTCkgJiYgKChtQ2FsbGJhY2sgPT0gTlVMTCkgfHwgKG5ld2NiZCAhPSBOVUxMKSkpOworICAgIENIRUNLKChqVCAhPSBudWxscHRyKSAmJiAoKG1DYWxsYmFjayA9PSBudWxscHRyKSB8fCAobmV3Y2JkICE9IG51bGxwdHIpKSk7CiAKICAgICBtQ2FsbGJhY2tEYXRhID0gbmV3Y2JkOwogICAgIEFMT0dWKCJzZXRWb2x1bWUiKTsKLSAgICB0LT5zZXRWb2x1bWUobUxlZnRWb2x1bWUsIG1SaWdodFZvbHVtZSk7CisgICAgalQtPnNldFZvbHVtZShtVm9sdW1lKTsKIAogICAgIG1TYW1wbGVSYXRlSHogPSBzYW1wbGVSYXRlOwogICAgIG1GbGFncyA9IGZsYWdzOwogICAgIG1Nc2Vjc1BlckZyYW1lID0gMUUzZiAvIChtUGxheWJhY2tSYXRlLm1TcGVlZCAqIHNhbXBsZVJhdGUpOwotICAgIG1GcmFtZVNpemUgPSB0LT5mcmFtZVNpemUoKTsKLSAgICBtVHJhY2sgPSB0OworICAgIG1GcmFtZVNpemUgPSBqVC0+ZnJhbWVTaXplKCk7CisgICAgbUpBdWRpb1RyYWNrID0galQ7CiAKICAgICByZXR1cm4gdXBkYXRlVHJhY2tfbCgpOwogfQogCiBzdGF0dXNfdCBNZWRpYVBsYXllcjJBdWRpb091dHB1dDo6dXBkYXRlVHJhY2tfbCgpIHsKLSAgICBpZiAobVRyYWNrID09IE5VTEwpIHsKKyAgICBpZiAobUpBdWRpb1RyYWNrID09IG51bGxwdHIpIHsKICAgICAgICAgcmV0dXJuIE5PX0VSUk9SOwogICAgIH0KIAogICAgIHN0YXR1c190IHJlcyA9IE5PX0VSUk9SOwogICAgIC8vIE5vdGUgc29tZSBvdXRwdXQgZGV2aWNlcyBtYXkgZ2l2ZSB1cyBhIGRpcmVjdCB0cmFjayBldmVuIHRob3VnaCB3ZSBkb24ndCBzcGVjaWZ5IGl0LgogICAgIC8vIEV4YW1wbGU6IExpbmUgYXBwbGljYXRpb24gYi8xNzQ1OTk4Mi4KLSAgICBpZiAoKG1UcmFjay0+Z2V0RmxhZ3MoKQorICAgIGlmICgobUpBdWRpb1RyYWNrLT5nZXRGbGFncygpCiAgICAgICAgICAgICAmIChBVURJT19PVVRQVVRfRkxBR19DT01QUkVTU19PRkZMT0FEIHwgQVVESU9fT1VUUFVUX0ZMQUdfRElSRUNUKSkgPT0gMCkgewotICAgICAgICByZXMgPSBtVHJhY2stPnNldFBsYXliYWNrUmF0ZShtUGxheWJhY2tSYXRlKTsKKyAgICAgICAgcmVzID0gbUpBdWRpb1RyYWNrLT5zZXRQbGF5YmFja1JhdGUobVBsYXliYWNrUmF0ZSk7CiAgICAgICAgIGlmIChyZXMgPT0gTk9fRVJST1IpIHsKLSAgICAgICAgICAgIG1UcmFjay0+c2V0QXV4RWZmZWN0U2VuZExldmVsKG1TZW5kTGV2ZWwpOwotICAgICAgICAgICAgcmVzID0gbVRyYWNrLT5hdHRhY2hBdXhFZmZlY3QobUF1eEVmZmVjdElkKTsKKyAgICAgICAgICAgIG1KQXVkaW9UcmFjay0+c2V0QXV4RWZmZWN0U2VuZExldmVsKG1TZW5kTGV2ZWwpOworICAgICAgICAgICAgcmVzID0gbUpBdWRpb1RyYWNrLT5hdHRhY2hBdXhFZmZlY3QobUF1eEVmZmVjdElkKTsKICAgICAgICAgfQogICAgIH0KLSAgICBtVHJhY2stPnNldE91dHB1dERldmljZShtU2VsZWN0ZWREZXZpY2VJZCk7Ci0gICAgaWYgKG1EZXZpY2VDYWxsYmFja0VuYWJsZWQpIHsKLSAgICAgICAgbVRyYWNrLT5hZGRBdWRpb0RldmljZUNhbGxiYWNrKG1EZXZpY2VDYWxsYmFjay5wcm9tb3RlKCkpOworICAgIGlmIChtUHJlZmVycmVkRGV2aWNlICE9IG51bGxwdHIpIHsKKyAgICAgICAgbUpBdWRpb1RyYWNrLT5zZXRQcmVmZXJyZWREZXZpY2UobVByZWZlcnJlZERldmljZS0+Z2V0Sk9iamVjdCgpKTsKICAgICB9CisKKyAgICBtSkF1ZGlvVHJhY2stPnJlZ2lzdGVyUm91dGluZ0RlbGVnYXRlcyhtUm91dGluZ0RlbGVnYXRlcyk7CisKICAgICBBTE9HVigidXBkYXRlVHJhY2tfbCgpIERPTkUgc3RhdHVzICVkIiwgcmVzKTsKICAgICByZXR1cm4gcmVzOwogfQpAQCAtNDY4LDEzICszODEsMTMgQEAKIHN0YXR1c190IE1lZGlhUGxheWVyMkF1ZGlvT3V0cHV0OjpzdGFydCgpIHsKICAgICBBTE9HVigic3RhcnQiKTsKICAgICBNdXRleDo6QXV0b2xvY2sgbG9jayhtTG9jayk7Ci0gICAgaWYgKG1DYWxsYmFja0RhdGEgIT0gTlVMTCkgeworICAgIGlmIChtQ2FsbGJhY2tEYXRhICE9IG51bGxwdHIpIHsKICAgICAgICAgbUNhbGxiYWNrRGF0YS0+ZW5kVHJhY2tTd2l0Y2goKTsKICAgICB9Ci0gICAgaWYgKG1UcmFjayAhPSAwKSB7Ci0gICAgICAgIG1UcmFjay0+c2V0Vm9sdW1lKG1MZWZ0Vm9sdW1lLCBtUmlnaHRWb2x1bWUpOwotICAgICAgICBtVHJhY2stPnNldEF1eEVmZmVjdFNlbmRMZXZlbChtU2VuZExldmVsKTsKLSAgICAgICAgc3RhdHVzX3Qgc3RhdHVzID0gbVRyYWNrLT5zdGFydCgpOworICAgIGlmIChtSkF1ZGlvVHJhY2sgIT0gbnVsbHB0cikgeworICAgICAgICBtSkF1ZGlvVHJhY2stPnNldFZvbHVtZShtVm9sdW1lKTsKKyAgICAgICAgbUpBdWRpb1RyYWNrLT5zZXRBdXhFZmZlY3RTZW5kTGV2ZWwobVNlbmRMZXZlbCk7CisgICAgICAgIHN0YXR1c190IHN0YXR1cyA9IG1KQXVkaW9UcmFjay0+c3RhcnQoKTsKICAgICAgICAgcmV0dXJuIHN0YXR1czsKICAgICB9CiAgICAgcmV0dXJuIE5PX0lOSVQ7CkBAIC00ODIsMTEgKzM5NSwxMSBAQAogCiBzc2l6ZV90IE1lZGlhUGxheWVyMkF1ZGlvT3V0cHV0Ojp3cml0ZShjb25zdCB2b2lkKiBidWZmZXIsIHNpemVfdCBzaXplLCBib29sIGJsb2NraW5nKSB7CiAgICAgTXV0ZXg6OkF1dG9sb2NrIGxvY2sobUxvY2spOwotICAgIExPR19BTFdBWVNfRkFUQUxfSUYobUNhbGxiYWNrICE9IE5VTEwsICJEb24ndCBjYWxsIHdyaXRlIGlmIHN1cHBseWluZyBhIGNhbGxiYWNrLiIpOworICAgIExPR19BTFdBWVNfRkFUQUxfSUYobUNhbGxiYWNrICE9IG51bGxwdHIsICJEb24ndCBjYWxsIHdyaXRlIGlmIHN1cHBseWluZyBhIGNhbGxiYWNrLiIpOwogCiAgICAgLy9BTE9HVigid3JpdGUoJXAsICV1KSIsIGJ1ZmZlciwgc2l6ZSk7Ci0gICAgaWYgKG1UcmFjayAhPSAwKSB7Ci0gICAgICAgIHJldHVybiBtVHJhY2stPndyaXRlKGJ1ZmZlciwgc2l6ZSwgYmxvY2tpbmcpOworICAgIGlmIChtSkF1ZGlvVHJhY2sgIT0gbnVsbHB0cikgeworICAgICAgICByZXR1cm4gbUpBdWRpb1RyYWNrLT53cml0ZShidWZmZXIsIHNpemUsIGJsb2NraW5nKTsKICAgICB9CiAgICAgcmV0dXJuIE5PX0lOSVQ7CiB9CkBAIC00OTQsNDUgKzQwNyw0NCBAQAogdm9pZCBNZWRpYVBsYXllcjJBdWRpb091dHB1dDo6c3RvcCgpIHsKICAgICBBTE9HVigic3RvcCIpOwogICAgIE11dGV4OjpBdXRvbG9jayBsb2NrKG1Mb2NrKTsKLSAgICBpZiAobVRyYWNrICE9IDApIHsKLSAgICAgICAgbVRyYWNrLT5zdG9wKCk7CisgICAgaWYgKG1KQXVkaW9UcmFjayAhPSBudWxscHRyKSB7CisgICAgICAgIG1KQXVkaW9UcmFjay0+c3RvcCgpOwogICAgIH0KIH0KIAogdm9pZCBNZWRpYVBsYXllcjJBdWRpb091dHB1dDo6Zmx1c2goKSB7CiAgICAgQUxPR1YoImZsdXNoIik7CiAgICAgTXV0ZXg6OkF1dG9sb2NrIGxvY2sobUxvY2spOwotICAgIGlmIChtVHJhY2sgIT0gMCkgewotICAgICAgICBtVHJhY2stPmZsdXNoKCk7CisgICAgaWYgKG1KQXVkaW9UcmFjayAhPSBudWxscHRyKSB7CisgICAgICAgIG1KQXVkaW9UcmFjay0+Zmx1c2goKTsKICAgICB9CiB9CiAKIHZvaWQgTWVkaWFQbGF5ZXIyQXVkaW9PdXRwdXQ6OnBhdXNlKCkgewogICAgIEFMT0dWKCJwYXVzZSIpOwogICAgIE11dGV4OjpBdXRvbG9jayBsb2NrKG1Mb2NrKTsKLSAgICBpZiAobVRyYWNrICE9IDApIHsKLSAgICAgICAgbVRyYWNrLT5wYXVzZSgpOworICAgIGlmIChtSkF1ZGlvVHJhY2sgIT0gbnVsbHB0cikgeworICAgICAgICBtSkF1ZGlvVHJhY2stPnBhdXNlKCk7CiAgICAgfQogfQogCiB2b2lkIE1lZGlhUGxheWVyMkF1ZGlvT3V0cHV0OjpjbG9zZSgpIHsKICAgICBBTE9HVigiY2xvc2UiKTsKLSAgICBzcDxBdWRpb1RyYWNrPiB0cmFjazsKKyAgICBzcDxKQXVkaW9UcmFjaz4gdHJhY2s7CiAgICAgewogICAgICAgICBNdXRleDo6QXV0b2xvY2sgbG9jayhtTG9jayk7Ci0gICAgICAgIHRyYWNrID0gbVRyYWNrOwotICAgICAgICBjbG9zZV9sKCk7IC8vIGNsZWFycyBtVHJhY2sKKyAgICAgICAgdHJhY2sgPSBtSkF1ZGlvVHJhY2s7CisgICAgICAgIGNsb3NlX2woKTsgLy8gY2xlYXJzIG1KQXVkaW9UcmFjawogICAgIH0KICAgICAvLyBkZXN0cnVjdGlvbiBvZiB0aGUgdHJhY2sgb2NjdXJzIG91dHNpZGUgb2YgbXV0ZXguCiB9CiAKLXZvaWQgTWVkaWFQbGF5ZXIyQXVkaW9PdXRwdXQ6OnNldFZvbHVtZShmbG9hdCBsZWZ0LCBmbG9hdCByaWdodCkgewotICAgIEFMT0dWKCJzZXRWb2x1bWUoJWYsICVmKSIsIGxlZnQsIHJpZ2h0KTsKK3ZvaWQgTWVkaWFQbGF5ZXIyQXVkaW9PdXRwdXQ6OnNldFZvbHVtZShmbG9hdCB2b2x1bWUpIHsKKyAgICBBTE9HVigic2V0Vm9sdW1lKCVmKSIsIHZvbHVtZSk7CiAgICAgTXV0ZXg6OkF1dG9sb2NrIGxvY2sobUxvY2spOwotICAgIG1MZWZ0Vm9sdW1lID0gbGVmdDsKLSAgICBtUmlnaHRWb2x1bWUgPSByaWdodDsKLSAgICBpZiAobVRyYWNrICE9IDApIHsKLSAgICAgICAgbVRyYWNrLT5zZXRWb2x1bWUobGVmdCwgcmlnaHQpOworICAgIG1Wb2x1bWUgPSB2b2x1bWU7CisgICAgaWYgKG1KQXVkaW9UcmFjayAhPSBudWxscHRyKSB7CisgICAgICAgIG1KQXVkaW9UcmFjay0+c2V0Vm9sdW1lKHZvbHVtZSk7CiAgICAgfQogfQogCkBAIC01NDAsMTIgKzQ1MiwxMiBAQAogICAgIEFMT0dWKCJzZXRQbGF5YmFja1JhdGUoJWYgJWYgJWQgJWQpIiwKICAgICAgICAgICAgICAgICByYXRlLm1TcGVlZCwgcmF0ZS5tUGl0Y2gsIHJhdGUubUZhbGxiYWNrTW9kZSwgcmF0ZS5tU3RyZXRjaE1vZGUpOwogICAgIE11dGV4OjpBdXRvbG9jayBsb2NrKG1Mb2NrKTsKLSAgICBpZiAobVRyYWNrID09IDApIHsKKyAgICBpZiAobUpBdWRpb1RyYWNrID09IDApIHsKICAgICAgICAgLy8gcmVtZW1iZXIgcmF0ZSBzbyB0aGF0IHdlIGNhbiBzZXQgaXQgd2hlbiB0aGUgdHJhY2sgaXMgb3BlbmVkCiAgICAgICAgIG1QbGF5YmFja1JhdGUgPSByYXRlOwogICAgICAgICByZXR1cm4gT0s7CiAgICAgfQotICAgIHN0YXR1c190IHJlcyA9IG1UcmFjay0+c2V0UGxheWJhY2tSYXRlKHJhdGUpOworICAgIHN0YXR1c190IHJlcyA9IG1KQXVkaW9UcmFjay0+c2V0UGxheWJhY2tSYXRlKHJhdGUpOwogICAgIGlmIChyZXMgIT0gTk9fRVJST1IpIHsKICAgICAgICAgcmV0dXJuIHJlczsKICAgICB9CkBAIC01NTksMTIgKzQ3MSwxMiBAQAogfQogCiBzdGF0dXNfdCBNZWRpYVBsYXllcjJBdWRpb091dHB1dDo6Z2V0UGxheWJhY2tSYXRlKEF1ZGlvUGxheWJhY2tSYXRlICpyYXRlKSB7Ci0gICAgQUxPR1YoInNldFBsYXliYWNrUmF0ZSIpOworICAgIEFMT0dWKCJnZXRQbGF5YmFja1JhdGUiKTsKICAgICBNdXRleDo6QXV0b2xvY2sgbG9jayhtTG9jayk7Ci0gICAgaWYgKG1UcmFjayA9PSAwKSB7CisgICAgaWYgKG1KQXVkaW9UcmFjayA9PSAwKSB7CiAgICAgICAgIHJldHVybiBOT19JTklUOwogICAgIH0KLSAgICAqcmF0ZSA9IG1UcmFjay0+Z2V0UGxheWJhY2tSYXRlKCk7CisgICAgKnJhdGUgPSBtSkF1ZGlvVHJhY2stPmdldFBsYXliYWNrUmF0ZSgpOwogICAgIHJldHVybiBOT19FUlJPUjsKIH0KIApAQCAtNTcyLDggKzQ4NCw4IEBACiAgICAgQUxPR1YoInNldEF1eEVmZmVjdFNlbmRMZXZlbCglZikiLCBsZXZlbCk7CiAgICAgTXV0ZXg6OkF1dG9sb2NrIGxvY2sobUxvY2spOwogICAgIG1TZW5kTGV2ZWwgPSBsZXZlbDsKLSAgICBpZiAobVRyYWNrICE9IDApIHsKLSAgICAgICAgcmV0dXJuIG1UcmFjay0+c2V0QXV4RWZmZWN0U2VuZExldmVsKGxldmVsKTsKKyAgICBpZiAobUpBdWRpb1RyYWNrICE9IG51bGxwdHIpIHsKKyAgICAgICAgcmV0dXJuIG1KQXVkaW9UcmFjay0+c2V0QXV4RWZmZWN0U2VuZExldmVsKGxldmVsKTsKICAgICB9CiAgICAgcmV0dXJuIE5PX0VSUk9SOwogfQpAQCAtNTgyLDQ0ICs0OTQsNTkgQEAKICAgICBBTE9HVigiYXR0YWNoQXV4RWZmZWN0KCVkKSIsIGVmZmVjdElkKTsKICAgICBNdXRleDo6QXV0b2xvY2sgbG9jayhtTG9jayk7CiAgICAgbUF1eEVmZmVjdElkID0gZWZmZWN0SWQ7Ci0gICAgaWYgKG1UcmFjayAhPSAwKSB7Ci0gICAgICAgIHJldHVybiBtVHJhY2stPmF0dGFjaEF1eEVmZmVjdChlZmZlY3RJZCk7CisgICAgaWYgKG1KQXVkaW9UcmFjayAhPSBudWxscHRyKSB7CisgICAgICAgIHJldHVybiBtSkF1ZGlvVHJhY2stPmF0dGFjaEF1eEVmZmVjdChlZmZlY3RJZCk7CiAgICAgfQogICAgIHJldHVybiBOT19FUlJPUjsKIH0KIAotc3RhdHVzX3QgTWVkaWFQbGF5ZXIyQXVkaW9PdXRwdXQ6OnNldE91dHB1dERldmljZShhdWRpb19wb3J0X2hhbmRsZV90IGRldmljZUlkKSB7Ci0gICAgQUxPR1YoInNldE91dHB1dERldmljZSglZCkiLCBkZXZpY2VJZCk7CitzdGF0dXNfdCBNZWRpYVBsYXllcjJBdWRpb091dHB1dDo6c2V0UHJlZmVycmVkRGV2aWNlKGpvYmplY3QgZGV2aWNlKSB7CisgICAgQUxPR1YoInNldFByZWZlcnJlZERldmljZSIpOwogICAgIE11dGV4OjpBdXRvbG9jayBsb2NrKG1Mb2NrKTsKLSAgICBtU2VsZWN0ZWREZXZpY2VJZCA9IGRldmljZUlkOwotICAgIGlmIChtVHJhY2sgIT0gMCkgewotICAgICAgICByZXR1cm4gbVRyYWNrLT5zZXRPdXRwdXREZXZpY2UoZGV2aWNlSWQpOworICAgIHN0YXR1c190IHJldCA9IE5PX0VSUk9SOworICAgIGlmIChtSkF1ZGlvVHJhY2sgIT0gbnVsbHB0cikgeworICAgICAgICByZXQgPSBtSkF1ZGlvVHJhY2stPnNldFByZWZlcnJlZERldmljZShkZXZpY2UpOworICAgIH0KKyAgICBpZiAocmV0ID09IE5PX0VSUk9SKSB7CisgICAgICAgIG1QcmVmZXJyZWREZXZpY2UgPSBuZXcgSk9iamVjdEhvbGRlcihkZXZpY2UpOworICAgIH0KKyAgICByZXR1cm4gcmV0OworfQorCitqb2JqZWN0IE1lZGlhUGxheWVyMkF1ZGlvT3V0cHV0OjpnZXRSb3V0ZWREZXZpY2UoKSB7CisgICAgQUxPR1YoImdldFJvdXRlZERldmljZSIpOworICAgIE11dGV4OjpBdXRvbG9jayBsb2NrKG1Mb2NrKTsKKyAgICBpZiAobUpBdWRpb1RyYWNrICE9IG51bGxwdHIpIHsKKyAgICAgICAgcmV0dXJuIG1KQXVkaW9UcmFjay0+Z2V0Um91dGVkRGV2aWNlKCk7CisgICAgfQorICAgIHJldHVybiBudWxscHRyOworfQorCitzdGF0dXNfdCBNZWRpYVBsYXllcjJBdWRpb091dHB1dDo6YWRkQXVkaW9EZXZpY2VDYWxsYmFjayhqb2JqZWN0IGpSb3V0aW5nRGVsZWdhdGUpIHsKKyAgICBBTE9HVigiYWRkQXVkaW9EZXZpY2VDYWxsYmFjayIpOworICAgIE11dGV4OjpBdXRvbG9jayBsb2NrKG1Mb2NrKTsKKyAgICBqb2JqZWN0IGxpc3RlbmVyID0gSkF1ZGlvVHJhY2s6OmdldExpc3RlbmVyKGpSb3V0aW5nRGVsZWdhdGUpOworICAgIGlmIChtSkF1ZGlvVHJhY2sgIT0gbnVsbHB0ciAmJgorICAgICAgICBKQXVkaW9UcmFjazo6ZmluZEJ5S2V5KG1Sb3V0aW5nRGVsZWdhdGVzLCBsaXN0ZW5lcikgPT0gbnVsbHB0cikgeworICAgICAgICBqb2JqZWN0IGhhbmRsZXIgPSBKQXVkaW9UcmFjazo6Z2V0SGFuZGxlcihqUm91dGluZ0RlbGVnYXRlKTsKKyAgICAgICAgam9iamVjdCByb3V0aW5nRGVsZWdhdGUgPSBKQXVkaW9UcmFjazo6YWRkR2xvYmFsUmVmKGpSb3V0aW5nRGVsZWdhdGUpOworICAgICAgICBtUm91dGluZ0RlbGVnYXRlcy5wdXNoX2JhY2soc3RkOjpwYWlyPGpvYmplY3QsIGpvYmplY3Q+KGxpc3RlbmVyLCByb3V0aW5nRGVsZWdhdGUpKTsKKyAgICAgICAgcmV0dXJuIG1KQXVkaW9UcmFjay0+YWRkQXVkaW9EZXZpY2VDYWxsYmFjayhyb3V0aW5nRGVsZWdhdGUsIGhhbmRsZXIpOwogICAgIH0KICAgICByZXR1cm4gTk9fRVJST1I7CiB9CiAKLXN0YXR1c190IE1lZGlhUGxheWVyMkF1ZGlvT3V0cHV0OjpnZXRSb3V0ZWREZXZpY2VJZChhdWRpb19wb3J0X2hhbmRsZV90KiBkZXZpY2VJZCkgewotICAgIEFMT0dWKCJnZXRSb3V0ZWREZXZpY2VJZCIpOworc3RhdHVzX3QgTWVkaWFQbGF5ZXIyQXVkaW9PdXRwdXQ6OnJlbW92ZUF1ZGlvRGV2aWNlQ2FsbGJhY2soam9iamVjdCBsaXN0ZW5lcikgeworICAgIEFMT0dWKCJyZW1vdmVBdWRpb0RldmljZUNhbGxiYWNrIik7CiAgICAgTXV0ZXg6OkF1dG9sb2NrIGxvY2sobUxvY2spOwotICAgIGlmIChtVHJhY2sgIT0gMCkgewotICAgICAgICBtUm91dGVkRGV2aWNlSWQgPSBtVHJhY2stPmdldFJvdXRlZERldmljZUlkKCk7Ci0gICAgfQotICAgICpkZXZpY2VJZCA9IG1Sb3V0ZWREZXZpY2VJZDsKLSAgICByZXR1cm4gTk9fRVJST1I7Ci19Ci0KLXN0YXR1c190IE1lZGlhUGxheWVyMkF1ZGlvT3V0cHV0OjplbmFibGVBdWRpb0RldmljZUNhbGxiYWNrKGJvb2wgZW5hYmxlZCkgewotICAgIEFMT0dWKCJlbmFibGVBdWRpb0RldmljZUNhbGxiYWNrLCAlZCIsIGVuYWJsZWQpOwotICAgIE11dGV4OjpBdXRvbG9jayBsb2NrKG1Mb2NrKTsKLSAgICBtRGV2aWNlQ2FsbGJhY2tFbmFibGVkID0gZW5hYmxlZDsKLSAgICBpZiAobVRyYWNrICE9IDApIHsKLSAgICAgICAgc3RhdHVzX3Qgc3RhdHVzOwotICAgICAgICBpZiAoZW5hYmxlZCkgewotICAgICAgICAgICAgc3RhdHVzID0gbVRyYWNrLT5hZGRBdWRpb0RldmljZUNhbGxiYWNrKG1EZXZpY2VDYWxsYmFjay5wcm9tb3RlKCkpOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgc3RhdHVzID0gbVRyYWNrLT5yZW1vdmVBdWRpb0RldmljZUNhbGxiYWNrKG1EZXZpY2VDYWxsYmFjay5wcm9tb3RlKCkpOworICAgIGpvYmplY3Qgcm91dGluZ0RlbGVnYXRlID0gbnVsbHB0cjsKKyAgICBpZiAobUpBdWRpb1RyYWNrICE9IG51bGxwdHIgJiYKKyAgICAgICAgKHJvdXRpbmdEZWxlZ2F0ZSA9IEpBdWRpb1RyYWNrOjpmaW5kQnlLZXkobVJvdXRpbmdEZWxlZ2F0ZXMsIGxpc3RlbmVyKSkgIT0gbnVsbHB0cikgeworICAgICAgICBtSkF1ZGlvVHJhY2stPnJlbW92ZUF1ZGlvRGV2aWNlQ2FsbGJhY2socm91dGluZ0RlbGVnYXRlKTsKKyAgICAgICAgSkF1ZGlvVHJhY2s6OmVyYXNlQnlLZXkobVJvdXRpbmdEZWxlZ2F0ZXMsIGxpc3RlbmVyKTsKKyAgICAgICAgaWYgKEpBdWRpb1RyYWNrOjpyZW1vdmVHbG9iYWxSZWYocm91dGluZ0RlbGVnYXRlKSAhPSBOT19FUlJPUikgeworICAgICAgICAgICAgcmV0dXJuIEJBRF9WQUxVRTsKICAgICAgICAgfQotICAgICAgICByZXR1cm4gc3RhdHVzOwogICAgIH0KICAgICByZXR1cm4gTk9fRVJST1I7CiB9CkBAIC02MzIsMjEgKzU1OSwyMSBAQAogICAgIC8vIGxvY2sgdG8gZW5zdXJlIHdlIGFyZW4ndCBjYXVnaHQgaW4gdGhlIG1pZGRsZSBvZiBhIHRyYWNrIHN3aXRjaC4KICAgICBkYXRhLT5sb2NrKCk7CiAgICAgTWVkaWFQbGF5ZXIyQXVkaW9PdXRwdXQgKm1lID0gZGF0YS0+Z2V0T3V0cHV0KCk7Ci0gICAgQXVkaW9UcmFjazo6QnVmZmVyICpidWZmZXIgPSAoQXVkaW9UcmFjazo6QnVmZmVyICopaW5mbzsKLSAgICBpZiAobWUgPT0gTlVMTCkgeworICAgIEpBdWRpb1RyYWNrOjpCdWZmZXIgKmJ1ZmZlciA9IChKQXVkaW9UcmFjazo6QnVmZmVyICopaW5mbzsKKyAgICBpZiAobWUgPT0gbnVsbHB0cikgewogICAgICAgICAvLyBubyBvdXRwdXQgc2V0LCBsaWtlbHkgYmVjYXVzZSB0aGUgdHJhY2sgd2FzIHNjaGVkdWxlZCB0byBiZSByZXVzZWQKICAgICAgICAgLy8gYnkgYW5vdGhlciBwbGF5ZXIsIGJ1dCB0aGUgZm9ybWF0IHR1cm5lZCBvdXQgdG8gYmUgaW5jb21wYXRpYmxlLgogICAgICAgICBkYXRhLT51bmxvY2soKTsKLSAgICAgICAgaWYgKGJ1ZmZlciAhPSBOVUxMKSB7Ci0gICAgICAgICAgICBidWZmZXItPnNpemUgPSAwOworICAgICAgICBpZiAoYnVmZmVyICE9IG51bGxwdHIpIHsKKyAgICAgICAgICAgIGJ1ZmZlci0+bVNpemUgPSAwOwogICAgICAgICB9CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKICAgICBzd2l0Y2goZXZlbnQpIHsKLSAgICBjYXNlIEF1ZGlvVHJhY2s6OkVWRU5UX01PUkVfREFUQTogeworICAgIGNhc2UgSkF1ZGlvVHJhY2s6OkVWRU5UX01PUkVfREFUQTogewogICAgICAgICBzaXplX3QgYWN0dWFsU2l6ZSA9ICgqbWUtPm1DYWxsYmFjaykoCi0gICAgICAgICAgICAgICAgbWUsIGJ1ZmZlci0+cmF3LCBidWZmZXItPnNpemUsIG1lLT5tQ2FsbGJhY2tDb29raWUsCisgICAgICAgICAgICAgICAgbWUsIGJ1ZmZlci0+bURhdGEsIGJ1ZmZlci0+bVNpemUsIG1lLT5tQ2FsbGJhY2tDb29raWUsCiAgICAgICAgICAgICAgICAgQ0JfRVZFTlRfRklMTF9CVUZGRVIpOwogCiAgICAgICAgIC8vIExvZyB3aGVuIG5vIGRhdGEgaXMgcmV0dXJuZWQgZnJvbSB0aGUgY2FsbGJhY2suCkBAIC02NTgsMjUgKzU4NSwyNSBAQAogICAgICAgICAvLyBUaGlzIGlzIGEgYmVuaWduIGJ1c3ktd2FpdCwgd2l0aCB0aGUgbmV4dCBkYXRhIHJlcXVlc3QgZ2VuZXJhdGVkIDEwIG1zIG9yIG1vcmUgbGF0ZXI7CiAgICAgICAgIC8vIG5ldmVydGhlbGVzcyBmb3IgcG93ZXIgcmVhc29ucywgd2UgZG9uJ3Qgd2FudCB0byBzZWUgdG9vIG1hbnkgb2YgdGhlc2UuCiAKLSAgICAgICAgQUxPR1ZfSUYoYWN0dWFsU2l6ZSA9PSAwICYmIGJ1ZmZlci0+c2l6ZSA+IDAsICJjYWxsYmFja3dyYXBwZXI6IGVtcHR5IGJ1ZmZlciByZXR1cm5lZCIpOworICAgICAgICBBTE9HVl9JRihhY3R1YWxTaXplID09IDAgJiYgYnVmZmVyLT5tU2l6ZSA+IDAsICJjYWxsYmFja3dyYXBwZXI6IGVtcHR5IGJ1ZmZlciByZXR1cm5lZCIpOwogCi0gICAgICAgIGJ1ZmZlci0+c2l6ZSA9IGFjdHVhbFNpemU7CisgICAgICAgIGJ1ZmZlci0+bVNpemUgPSBhY3R1YWxTaXplOwogICAgICAgICB9IGJyZWFrOwogCi0gICAgY2FzZSBBdWRpb1RyYWNrOjpFVkVOVF9TVFJFQU1fRU5EOgorICAgIGNhc2UgSkF1ZGlvVHJhY2s6OkVWRU5UX1NUUkVBTV9FTkQ6CiAgICAgICAgIC8vIGN1cnJlbnRseSBvbmx5IG9jY3VycyBmb3Igb2ZmbG9hZGVkIGNhbGxiYWNrcwogICAgICAgICBBTE9HVigiY2FsbGJhY2t3cmFwcGVyOiBkZWxpdmVyIEVWRU5UX1NUUkVBTV9FTkQiKTsKLSAgICAgICAgKCptZS0+bUNhbGxiYWNrKShtZSwgTlVMTCAvKiBidWZmZXIgKi8sIDAgLyogc2l6ZSAqLywKKyAgICAgICAgKCptZS0+bUNhbGxiYWNrKShtZSwgbnVsbHB0ciAvKiBidWZmZXIgKi8sIDAgLyogc2l6ZSAqLywKICAgICAgICAgICAgICAgICBtZS0+bUNhbGxiYWNrQ29va2llLCBDQl9FVkVOVF9TVFJFQU1fRU5EKTsKICAgICAgICAgYnJlYWs7CiAKLSAgICBjYXNlIEF1ZGlvVHJhY2s6OkVWRU5UX05FV19JQVVESU9UUkFDSyA6CisgICAgY2FzZSBKQXVkaW9UcmFjazo6RVZFTlRfTkVXX0lBVURJT1RSQUNLIDoKICAgICAgICAgQUxPR1YoImNhbGxiYWNrd3JhcHBlcjogZGVsaXZlciBFVkVOVF9URUFSX0RPV04iKTsKLSAgICAgICAgKCptZS0+bUNhbGxiYWNrKShtZSwgIE5VTEwgLyogYnVmZmVyICovLCAwIC8qIHNpemUgKi8sCisgICAgICAgICgqbWUtPm1DYWxsYmFjaykobWUsICBudWxscHRyIC8qIGJ1ZmZlciAqLywgMCAvKiBzaXplICovLAogICAgICAgICAgICAgICAgIG1lLT5tQ2FsbGJhY2tDb29raWUsIENCX0VWRU5UX1RFQVJfRE9XTik7CiAgICAgICAgIGJyZWFrOwogCi0gICAgY2FzZSBBdWRpb1RyYWNrOjpFVkVOVF9VTkRFUlJVTjoKKyAgICBjYXNlIEpBdWRpb1RyYWNrOjpFVkVOVF9VTkRFUlJVTjoKICAgICAgICAgLy8gVGhpcyBvY2N1cnMgd2hlbiB0aGVyZSBpcyBubyBkYXRhIGF2YWlsYWJsZSwgdHlwaWNhbGx5CiAgICAgICAgIC8vIHdoZW4gdGhlcmUgaXMgYSBmYWlsdXJlIHRvIHN1cHBseSBkYXRhIHRvIHRoZSBBdWRpb1RyYWNrLiAgSXQgY2FuIGFsc28KICAgICAgICAgLy8gb2NjdXIgaW4gbm9uLW9mZmxvYWRlZCBtb2RlIHdoZW4gdGhlIGF1ZGlvIGRldmljZSBjb21lcyBvdXQgb2Ygc3RhbmRieS4KQEAgLTY5NiwyOSArNjIzLDMxIEBACiAgICAgZGF0YS0+dW5sb2NrKCk7CiB9CiAKLWF1ZGlvX3Nlc3Npb25fdCBNZWRpYVBsYXllcjJBdWRpb091dHB1dDo6Z2V0U2Vzc2lvbklkKCkgY29uc3QKLXsKK2ludDMyX3QgTWVkaWFQbGF5ZXIyQXVkaW9PdXRwdXQ6OmdldFNlc3Npb25JZCgpIGNvbnN0IHsKICAgICBNdXRleDo6QXV0b2xvY2sgbG9jayhtTG9jayk7CiAgICAgcmV0dXJuIG1TZXNzaW9uSWQ7CiB9CiAKLXVpbnQzMl90IE1lZGlhUGxheWVyMkF1ZGlvT3V0cHV0OjpnZXRTYW1wbGVSYXRlKCkgY29uc3QKLXsKK3ZvaWQgTWVkaWFQbGF5ZXIyQXVkaW9PdXRwdXQ6OnNldFNlc3Npb25JZChjb25zdCBpbnQzMl90IHNlc3Npb25JZCkgewogICAgIE11dGV4OjpBdXRvbG9jayBsb2NrKG1Mb2NrKTsKLSAgICBpZiAobVRyYWNrID09IDApIHsKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgfQotICAgIHJldHVybiBtVHJhY2stPmdldFNhbXBsZVJhdGUoKTsKKyAgICBtU2Vzc2lvbklkID0gc2Vzc2lvbklkOwogfQogCi1pbnQ2NF90IE1lZGlhUGxheWVyMkF1ZGlvT3V0cHV0OjpnZXRCdWZmZXJEdXJhdGlvbkluVXMoKSBjb25zdAotewordWludDMyX3QgTWVkaWFQbGF5ZXIyQXVkaW9PdXRwdXQ6OmdldFNhbXBsZVJhdGUoKSBjb25zdCB7CiAgICAgTXV0ZXg6OkF1dG9sb2NrIGxvY2sobUxvY2spOwotICAgIGlmIChtVHJhY2sgPT0gMCkgeworICAgIGlmIChtSkF1ZGlvVHJhY2sgPT0gMCkgeworICAgICAgICByZXR1cm4gMDsKKyAgICB9CisgICAgcmV0dXJuIG1KQXVkaW9UcmFjay0+Z2V0U2FtcGxlUmF0ZSgpOworfQorCitpbnQ2NF90IE1lZGlhUGxheWVyMkF1ZGlvT3V0cHV0OjpnZXRCdWZmZXJEdXJhdGlvbkluVXMoKSBjb25zdCB7CisgICAgTXV0ZXg6OkF1dG9sb2NrIGxvY2sobUxvY2spOworICAgIGlmIChtSkF1ZGlvVHJhY2sgPT0gMCkgewogICAgICAgICByZXR1cm4gMDsKICAgICB9CiAgICAgaW50NjRfdCBkdXJhdGlvbjsKLSAgICBpZiAobVRyYWNrLT5nZXRCdWZmZXJEdXJhdGlvbkluVXMoJmR1cmF0aW9uKSAhPSBPSykgeworICAgIGlmIChtSkF1ZGlvVHJhY2stPmdldEJ1ZmZlckR1cmF0aW9uSW5VcygmZHVyYXRpb24pICE9IE9LKSB7CiAgICAgICAgIHJldHVybiAwOwogICAgIH0KICAgICByZXR1cm4gZHVyYXRpb247CmRpZmYgLS1naXQgYS9tZWRpYS9saWJtZWRpYXBsYXllcjIvaW5jbHVkZS9tZWRpYXBsYXllcjIvSkF1ZGlvVHJhY2suaCBiL21lZGlhL2xpYm1lZGlhcGxheWVyMi9pbmNsdWRlL21lZGlhcGxheWVyMi9KQXVkaW9UcmFjay5oCmluZGV4IDMwMTgyNWIuLjg3ZGM4ODkgMTAwNjQ0Ci0tLSBhL21lZGlhL2xpYm1lZGlhcGxheWVyMi9pbmNsdWRlL21lZGlhcGxheWVyMi9KQXVkaW9UcmFjay5oCisrKyBiL21lZGlhL2xpYm1lZGlhcGxheWVyMi9pbmNsdWRlL21lZGlhcGxheWVyMi9KQXVkaW9UcmFjay5oCkBAIC0xNywxOSArMTcsMjEgQEAKICNpZm5kZWYgQU5EUk9JRF9KQVVESU9UUkFDS19ICiAjZGVmaW5lIEFORFJPSURfSkFVRElPVFJBQ0tfSAogCisjaW5jbHVkZSA8dmVjdG9yPgorI2luY2x1ZGUgPHV0aWxpdHk+CiAjaW5jbHVkZSA8am5pLmg+CiAjaW5jbHVkZSA8bWVkaWEvQXVkaW9SZXNhbXBsZXJQdWJsaWMuaD4KICNpbmNsdWRlIDxtZWRpYS9BdWRpb1N5c3RlbS5oPgogI2luY2x1ZGUgPG1lZGlhL1ZvbHVtZVNoYXBlci5oPgogI2luY2x1ZGUgPHN5c3RlbS9hdWRpby5oPgogI2luY2x1ZGUgPHV0aWxzL0Vycm9ycy5oPgotCisjaW5jbHVkZSA8bWVkaWFwbGF5ZXIyL0pPYmplY3RIb2xkZXIuaD4KICNpbmNsdWRlIDxtZWRpYS9BdWRpb1RpbWVzdGFtcC5oPiAgIC8vIEl0IGhhcyBkZXBlbmRlbmN5IG9uIGF1ZGlvLmgvRXJyb3JzLmgsIGJ1dCBkb2Vzbid0CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBpbmNsdWRlIHRoZW0gaW4gaXQuIFRoZXJlZm9yZSBpdCBpcyBpbmNsdWRlZCBoZXJlIGF0IGxhc3QuCiAKIG5hbWVzcGFjZSBhbmRyb2lkIHsKIAotY2xhc3MgSkF1ZGlvVHJhY2sgeworY2xhc3MgSkF1ZGlvVHJhY2sgOiBwdWJsaWMgUmVmQmFzZSB7CiBwdWJsaWM6CiAKICAgICAvKiBFdmVudHMgdXNlZCBieSBBdWRpb1RyYWNrIGNhbGxiYWNrIGZ1bmN0aW9uIChjYWxsYmFja190KS4KQEAgLTM3LDYgKzM5LDggQEAKICAgICAgKi8KICAgICBlbnVtIGV2ZW50X3R5cGUgewogICAgICAgICBFVkVOVF9NT1JFX0RBVEEgPSAwLCAgICAgICAgLy8gUmVxdWVzdCB0byB3cml0ZSBtb3JlIGRhdGEgdG8gYnVmZmVyLgorICAgICAgICBFVkVOVF9VTkRFUlJVTiA9IDEsICAgICAgICAgLy8gQnVmZmVyIHVuZGVycnVuIG9jY3VycmVkLiBUaGlzIHdpbGwgbm90IG9jY3VyIGZvcgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gc3RhdGljIHRyYWNrcy4KICAgICAgICAgRVZFTlRfTkVXX0lBVURJT1RSQUNLID0gNiwgIC8vIElBdWRpb1RyYWNrIHdhcyByZS1jcmVhdGVkLCBlaXRoZXIgZHVlIHRvIHJlLXJvdXRpbmcgYW5kCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyB2b2x1bnRhcnkgaW52YWxpZGF0aW9uIGJ5IG1lZGlhc2VydmVyLCBvciBtZWRpYXNlcnZlciBjcmFzaC4KICAgICAgICAgRVZFTlRfU1RSRUFNX0VORCA9IDcsICAgICAgIC8vIFNlbnQgYWZ0ZXIgYWxsIHRoZSBidWZmZXJzIHF1ZXVlZCBpbiBBRiBhbmQgSFcgYXJlIHBsYXllZApAQCAtMTA0LDE1ICsxMDgsMTQgQEAKICAgICAgKgogICAgICAqIFRPRE86IFJldml2ZSByZW1vdmVkIGFyZ3VtZW50cyBhZnRlciBvZmZsb2FkIG1vZGUgaXMgc3VwcG9ydGVkLgogICAgICAqLwotICAgIEpBdWRpb1RyYWNrKGF1ZGlvX3N0cmVhbV90eXBlX3Qgc3RyZWFtVHlwZSwKLSAgICAgICAgICAgICAgICB1aW50MzJfdCBzYW1wbGVSYXRlLAorICAgIEpBdWRpb1RyYWNrKHVpbnQzMl90IHNhbXBsZVJhdGUsCiAgICAgICAgICAgICAgICAgYXVkaW9fZm9ybWF0X3QgZm9ybWF0LAogICAgICAgICAgICAgICAgIGF1ZGlvX2NoYW5uZWxfbWFza190IGNoYW5uZWxNYXNrLAogICAgICAgICAgICAgICAgIGNhbGxiYWNrX3QgY2JmLAogICAgICAgICAgICAgICAgIHZvaWQqIHVzZXIsCiAgICAgICAgICAgICAgICAgc2l6ZV90IGZyYW1lQ291bnQgPSAwLAotICAgICAgICAgICAgICAgIGF1ZGlvX3Nlc3Npb25fdCBzZXNzaW9uSWQgID0gQVVESU9fU0VTU0lPTl9BTExPQ0FURSwKLSAgICAgICAgICAgICAgICBjb25zdCBhdWRpb19hdHRyaWJ1dGVzX3QqIHBBdHRyaWJ1dGVzID0gTlVMTCwKKyAgICAgICAgICAgICAgICBpbnQzMl90IHNlc3Npb25JZCAgPSBBVURJT19TRVNTSU9OX0FMTE9DQVRFLAorICAgICAgICAgICAgICAgIGNvbnN0IGpvYmplY3QgcEF0dHJpYnV0ZXMgPSBOVUxMLAogICAgICAgICAgICAgICAgIGZsb2F0IG1heFJlcXVpcmVkU3BlZWQgPSAxLjBmKTsKIAogICAgIC8qCkBAIC0xNTgsMTAgKzE2MSwxMCBAQAogICAgICAqIENhdXRpb246IGNhbGxpbmcgdGhpcyBtZXRob2QgdG9vIG9mdGVuIG1heSBiZSBpbmVmZmljaWVudDsKICAgICAgKiBpZiB5b3UgbmVlZCBhIGhpZ2ggcmVzb2x1dGlvbiBtYXBwaW5nIGJldHdlZW4gZnJhbWUgcG9zaXRpb24gYW5kIHByZXNlbnRhdGlvbiB0aW1lLAogICAgICAqIGNvbnNpZGVyIGltcGxlbWVudGluZyB0aGF0IGF0IGFwcGxpY2F0aW9uIGxldmVsLCBiYXNlZCBvbiB0aGUgbG93IHJlc29sdXRpb24gdGltZXN0YW1wcy4KLSAgICAgKiBSZXR1cm5zIHRydWUgaWYgdGltZXN0YW1wIGlzIHZhbGlkLgotICAgICAqIFRoZSB0aW1lc3RhbXAgcGFyYW1ldGVyIGlzIHVuZGVmaW5lZCBvbiByZXR1cm4sIGlmIGZhbHNlIGlzIHJldHVybmVkLgorICAgICAqIFJldHVybnMgTk9fRVJST1IgaWYgdGltZXN0YW1wIGlzIHZhbGlkLgorICAgICAqICAgICAgICAgTk9fSU5JVCBpZiBmaW5kcyBlcnJvciwgYW5kIHRpbWVzdGFtcCBwYXJhbWV0ZXIgd2lsbCBiZSB1bmRlZmluZWQgb24gcmV0dXJuLgogICAgICAqLwotICAgIGJvb2wgZ2V0VGltZXN0YW1wKEF1ZGlvVGltZXN0YW1wJiB0aW1lc3RhbXApOworICAgIHN0YXR1c190IGdldFRpbWVzdGFtcChBdWRpb1RpbWVzdGFtcCYgdGltZXN0YW1wKTsKIAogICAgIC8vIFRPRE86IFRoaXMgZG9jIGlzIGp1c3QgY29waWVkIGZyb20gQXVkaW9UcmFjay5oLiBSZXZpc2UgaXQgYWZ0ZXIgaW1wbGVtZW5hdGlvbi4KICAgICAvKiBSZXR1cm4gdGhlIGV4dGVuZGVkIHRpbWVzdGFtcCwgd2l0aCBhZGRpdGlvbmFsIHRpbWViYXNlIGluZm8gYW5kIGltcHJvdmVkIGRyYWluIGJlaGF2aW9yLgpAQCAtMzI0LDM3ICszMjcsNDMgQEAKIAogICAgIGF1ZGlvX2Zvcm1hdF90IGZvcm1hdCgpOwogCisgICAgc2l6ZV90IGZyYW1lU2l6ZSgpOworCiAgICAgLyoKICAgICAgKiBEdW1wcyB0aGUgc3RhdGUgb2YgYW4gYXVkaW8gdHJhY2suCiAgICAgICogTm90IGEgZ2VuZXJhbC1wdXJwb3NlIEFQSTsgaW50ZW5kZWQgb25seSBmb3IgdXNlIGJ5IG1lZGlhIHBsYXllciBzZXJ2aWNlIHRvIGR1bXAgaXRzIHRyYWNrcy4KICAgICAgKi8KICAgICBzdGF0dXNfdCBkdW1wKGludCBmZCwgY29uc3QgVmVjdG9yPFN0cmluZzE2PiYgYXJncykgY29uc3Q7CiAKLSAgICAvKiBSZXR1cm5zIHRoZSBJRCBvZiB0aGUgYXVkaW8gZGV2aWNlIGFjdHVhbGx5IHVzZWQgYnkgdGhlIG91dHB1dCB0byB3aGljaCB0aGlzIEF1ZGlvVHJhY2sgaXMKLSAgICAgKiBhdHRhY2hlZC4gV2hlbiB0aGUgQXVkaW9UcmFjayBpcyBpbmFjdGl2ZSwgaXQgd2lsbCByZXR1cm4gQVVESU9fUE9SVF9IQU5ETEVfTk9ORS4KKyAgICAvKiBSZXR1cm5zIHRoZSBBdWRpb0RldmljZUluZm8gdXNlZCBieSB0aGUgb3V0cHV0IHRvIHdoaWNoIHRoaXMgQXVkaW9UcmFjayBpcworICAgICAqIGF0dGFjaGVkLgogICAgICAqLwotICAgIGF1ZGlvX3BvcnRfaGFuZGxlX3QgZ2V0Um91dGVkRGV2aWNlSWQoKTsKKyAgICBqb2JqZWN0IGdldFJvdXRlZERldmljZSgpOwogCiAgICAgLyogUmV0dXJucyB0aGUgSUQgb2YgdGhlIGF1ZGlvIHNlc3Npb24gdGhpcyBBdWRpb1RyYWNrIGJlbG9uZ3MgdG8uICovCi0gICAgYXVkaW9fc2Vzc2lvbl90IGdldEF1ZGlvU2Vzc2lvbklkKCk7CisgICAgaW50MzJfdCBnZXRBdWRpb1Nlc3Npb25JZCgpOwogCi0gICAgLyogU2VsZWN0cyB0aGUgYXVkaW8gZGV2aWNlIHRvIHVzZSBmb3Igb3V0cHV0IG9mIHRoaXMgQXVkaW9UcmFjay4gQSB2YWx1ZSBvZgotICAgICAqIEFVRElPX1BPUlRfSEFORExFX05PTkUgaW5kaWNhdGVzIGRlZmF1bHQgcm91dGluZy4KKyAgICAvKiBTZXRzIHRoZSBwcmVmZXJyZWQgYXVkaW8gZGV2aWNlIHRvIHVzZSBmb3Igb3V0cHV0IG9mIHRoaXMgQXVkaW9UcmFjay4KICAgICAgKgogICAgICAqIFBhcmFtZXRlcnM6Ci0gICAgICogIFRoZSBkZXZpY2UgSUQgb2YgdGhlIHNlbGVjdGVkIGRldmljZSAoYXMgcmV0dXJuZWQgYnkgdGhlIEF1ZGlvRGV2aWNlc01hbmFnZXIgQVBJKS4KKyAgICAgKiBEZXZpY2U6IGFuIEF1ZGlvRGV2aWNlSW5mbyBvYmplY3QuCiAgICAgICoKICAgICAgKiBSZXR1cm5lZCB2YWx1ZToKICAgICAgKiAgLSBOT19FUlJPUjogc3VjY2Vzc2Z1bCBvcGVyYXRpb24KLSAgICAgKiAgLSBCQURfVkFMVUU6IGZhaWxlZCB0byBmaW5kIHRoZSB2YWxpZCBvdXRwdXQgZGV2aWNlIHdpdGggZ2l2ZW4gZGV2aWNlIElkLgorICAgICAqICAtIEJBRF9WQUxVRTogZmFpbGVkIHRvIHNldCB0aGUgZGV2aWNlCiAgICAgICovCi0gICAgc3RhdHVzX3Qgc2V0T3V0cHV0RGV2aWNlKGF1ZGlvX3BvcnRfaGFuZGxlX3QgZGV2aWNlSWQpOworICAgIHN0YXR1c190IHNldFByZWZlcnJlZERldmljZShqb2JqZWN0IGRldmljZSk7CiAKICAgICAvLyBUT0RPOiBBZGQgQVVESU9fT1VUUFVUX0ZMQUdfRElSRUNUIHdoZW4gaXQgaXMgcG9zc2libGUgdG8gY2hlY2suCiAgICAgLy8gVE9ETzogQWRkIEFVRElPX0ZMQUdfSFdfQVZfU1lOQyB3aGVuIGl0IGlzIHBvc3NpYmxlIHRvIGNoZWNrLgogICAgIC8qIFJldHVybnMgdGhlIGZsYWdzICovCiAgICAgYXVkaW9fb3V0cHV0X2ZsYWdzX3QgZ2V0RmxhZ3MoKSBjb25zdCB7IHJldHVybiBtRmxhZ3M7IH0KIAorICAgIC8qIFdlIGRvbid0IGtlZXAgc3RyZWFtIHR5cGUgaGVyZSwKKyAgICAgKiBpbnN0ZWFkLCB3ZSBrZWVwIGF0dHJpYnV0ZXMgYW5kIGNhbGwgZ2V0Vm9sdW1lQ29udHJvbFN0cmVhbSgpIHRvIGdldCBzdHJlYW0gdHlwZQorICAgICAqLworICAgIGF1ZGlvX3N0cmVhbV90eXBlX3QgZ2V0QXVkaW9TdHJlYW1UeXBlKCk7CisKICAgICAvKiBPYnRhaW4gdGhlIHBlbmRpbmcgZHVyYXRpb24gaW4gbWlsbGlzZWNvbmRzIGZvciBwbGF5YmFjayBvZiBwdXJlIFBDTSBkYXRhIHJlbWFpbmluZyBpbgogICAgICAqIEF1ZGlvVHJhY2suCiAgICAgICoKQEAgLTM2OSwyNyArMzc4LDY4IEBACiAgICAgICogUmVwbGFjZXMgYW55IHByZXZpb3VzbHkgaW5zdGFsbGVkIGNhbGxiYWNrLgogICAgICAqCiAgICAgICogUGFyYW1ldGVyczoKLSAgICAgKgotICAgICAqIGNhbGxiYWNrOiBUaGUgY2FsbGJhY2sgaW50ZXJmYWNlCisgICAgICogTGlzdGVuZXI6IHRoZSBsaXN0ZW5lciB0byByZWNlaXZlIG5vdGlmaWNhdGlvbiBvZiByZXJvdXRpbmcgZXZlbnRzLgorICAgICAqIEhhbmRsZXI6IHRoZSBoYW5kbGVyIHRvIGhhbmRsZXIgdGhlIHJlcm91dGluZyBldmVudHMuCiAgICAgICoKICAgICAgKiBSZXR1cm5zIE5PX0VSUk9SIGlmIHN1Y2Nlc3NmdWwuCi0gICAgICogICAgICAgICBJTlZBTElEX09QRVJBVElPTiBpZiB0aGUgc2FtZSBjYWxsYmFjayBpcyBhbHJlYWR5IGluc3RhbGxlZC4KLSAgICAgKiAgICAgICAgIE5PX0lOSVQgb3IgUFJFTUlTU0lPTl9ERU5JRUQgaWYgQXVkaW9GbGluZ2VyIHNlcnZpY2UgaXMgbm90IHJlYWNoYWJsZQotICAgICAqICAgICAgICAgQkFEX1ZBTFVFIGlmIHRoZSBjYWxsYmFjayBpcyBOVUxMCisgICAgICogICAgICAgICAoVE9ETykgSU5WQUxJRF9PUEVSQVRJT04gaWYgdGhlIHNhbWUgY2FsbGJhY2sgaXMgYWxyZWFkeSBpbnN0YWxsZWQuCisgICAgICogICAgICAgICAoVE9ETykgTk9fSU5JVCBvciBQUkVNSVNTSU9OX0RFTklFRCBpZiBBdWRpb0ZsaW5nZXIgc2VydmljZSBpcyBub3QgcmVhY2hhYmxlCisgICAgICogICAgICAgICAoVE9ETykgQkFEX1ZBTFVFIGlmIHRoZSBjYWxsYmFjayBpcyBOVUxMCiAgICAgICovCi0gICAgc3RhdHVzX3QgYWRkQXVkaW9EZXZpY2VDYWxsYmFjayhjb25zdCBzcDxBdWRpb1N5c3RlbTo6QXVkaW9EZXZpY2VDYWxsYmFjaz4mIGNhbGxiYWNrKTsKKyAgICBzdGF0dXNfdCBhZGRBdWRpb0RldmljZUNhbGxiYWNrKGpvYmplY3QgbGlzdGVuZXIsIGpvYmplY3QgcmQpOwogCiAgICAgLyogUmVtb3ZlcyBhbiBBdWRpb0RldmljZUNhbGxiYWNrLgogICAgICAqCiAgICAgICogUGFyYW1ldGVyczoKLSAgICAgKgotICAgICAqIGNhbGxiYWNrOiBUaGUgY2FsbGJhY2sgaW50ZXJmYWNlCisgICAgICogTGlzdGVuZXI6IHRoZSBsaXN0ZW5lciB0byByZWNlaXZlIG5vdGlmaWNhdGlvbiBvZiByZXJvdXRpbmcgZXZlbnRzLgogICAgICAqCiAgICAgICogUmV0dXJucyBOT19FUlJPUiBpZiBzdWNjZXNzZnVsLgotICAgICAqICAgICAgICAgSU5WQUxJRF9PUEVSQVRJT04gaWYgdGhlIGNhbGxiYWNrIGlzIG5vdCBpbnN0YWxsZWQKLSAgICAgKiAgICAgICAgIEJBRF9WQUxVRSBpZiB0aGUgY2FsbGJhY2sgaXMgTlVMTAorICAgICAqICAgICAgICAgKFRPRE8pIElOVkFMSURfT1BFUkFUSU9OIGlmIHRoZSBjYWxsYmFjayBpcyBub3QgaW5zdGFsbGVkCisgICAgICogICAgICAgICAoVE9ETykgQkFEX1ZBTFVFIGlmIHRoZSBjYWxsYmFjayBpcyBOVUxMCiAgICAgICovCi0gICAgc3RhdHVzX3QgcmVtb3ZlQXVkaW9EZXZpY2VDYWxsYmFjayhjb25zdCBzcDxBdWRpb1N5c3RlbTo6QXVkaW9EZXZpY2VDYWxsYmFjaz4mIGNhbGxiYWNrKTsKKyAgICBzdGF0dXNfdCByZW1vdmVBdWRpb0RldmljZUNhbGxiYWNrKGpvYmplY3QgbGlzdGVuZXIpOworCisgICAgLyogUmVnaXN0ZXIgYWxsIGJhY2tlZC11cCByb3V0aW5nIGRlbGVnYXRlcy4KKyAgICAgKgorICAgICAqIFBhcmFtZXRlcnM6CisgICAgICogcm91dGluZ0RlbGVnYXRlczogYmFja2VkLXVwIHJvdXRpbmcgZGVsZWdhdGVzCisgICAgICoKKyAgICAgKi8KKyAgICB2b2lkIHJlZ2lzdGVyUm91dGluZ0RlbGVnYXRlcyhzdGQ6OnZlY3RvcjxzdGQ6OnBhaXI8am9iamVjdCwgam9iamVjdD4+JiByb3V0aW5nRGVsZWdhdGVzKTsKKworICAgIC8qIGdldCBsaXN0ZW5lciBmcm9tIFJvdXRpbmdEZWxlZ2F0ZSBvYmplY3QKKyAgICAgKi8KKyAgICBzdGF0aWMgam9iamVjdCBnZXRMaXN0ZW5lcihjb25zdCBqb2JqZWN0IHJvdXRpbmdEZWxlZ2F0ZU9iaik7CisKKyAgICAvKiBnZXQgaGFuZGxlciBmcm9tIFJvdXRpbmdEZWxlZ2F0ZSBvYmplY3QKKyAgICAgKi8KKyAgICBzdGF0aWMgam9iamVjdCBnZXRIYW5kbGVyKGNvbnN0IGpvYmplY3Qgcm91dGluZ0RlbGVnYXRlT2JqKTsKKworICAgIC8qIGNvbnZlcnQgbG9jYWwgcmVmZXJlbmNlIHRvIGdsb2JhbCByZWZlcmVuY2UuCisgICAgICovCisgICAgc3RhdGljIGpvYmplY3QgYWRkR2xvYmFsUmVmKGNvbnN0IGpvYmplY3Qgb2JqKTsKKworICAgIC8qIGVyYXNlIGdsb2JhbCByZWZlcmVuY2UuCisgICAgICoKKyAgICAgKiBSZXR1cm5zIE5PX0VSUk9SIGlmIHN1Y2NlZWRzCisgICAgICogICAgICAgICBCQURfVkFMVUUgaWYgb2JqIGlzIE5VTEwKKyAgICAgKi8KKyAgICBzdGF0aWMgc3RhdHVzX3QgcmVtb3ZlR2xvYmFsUmVmKGNvbnN0IGpvYmplY3Qgb2JqKTsKKworICAgIC8qCisgICAgICogUGFyYW1ldGVyczoKKyAgICAgKiBtYXAgYW5kIGtleQorICAgICAqCisgICAgICogUmV0dXJucyB2YWx1ZSBpZiBrZXkgaXMgaW4gdGhlIG1hcAorICAgICAqICAgICAgICAgbnVsbHB0ciBpZiBrZXkgaXMgbm90IGluIHRoZSBtYXAKKyAgICAgKi8KKyAgICBzdGF0aWMgam9iamVjdCBmaW5kQnlLZXkoc3RkOjp2ZWN0b3I8c3RkOjpwYWlyPGpvYmplY3QsIGpvYmplY3Q+PiYgbXAsIGNvbnN0IGpvYmplY3Qga2V5KTsKKworICAgIC8qCisgICAgICogUGFyYW1ldGVyczoKKyAgICAgKiBtYXAgYW5kIGtleQorICAgICAqLworICAgIHN0YXRpYyB2b2lkIGVyYXNlQnlLZXkoc3RkOjp2ZWN0b3I8c3RkOjpwYWlyPGpvYmplY3QsIGpvYmplY3Q+PiYgbXAsIGNvbnN0IGpvYmplY3Qga2V5KTsKIAogcHJpdmF0ZToKICAgICBhdWRpb19vdXRwdXRfZmxhZ3NfdCBtRmxhZ3M7CmRpZmYgLS1naXQgYS9tZWRpYS9saWJtZWRpYXBsYXllcjIvaW5jbHVkZS9tZWRpYXBsYXllcjIvSk1lZGlhMkhUVFBDb25uZWN0aW9uLmggYi9tZWRpYS9saWJtZWRpYXBsYXllcjIvaW5jbHVkZS9tZWRpYXBsYXllcjIvSk1lZGlhMkhUVFBDb25uZWN0aW9uLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTVmN2Y4MwotLS0gL2Rldi9udWxsCisrKyBiL21lZGlhL2xpYm1lZGlhcGxheWVyMi9pbmNsdWRlL21lZGlhcGxheWVyMi9KTWVkaWEySFRUUENvbm5lY3Rpb24uaApAQCAtMCwwICsxLDU4IEBACisvKgorICogQ29weXJpZ2h0IDIwMTcsIFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworCisjaWZuZGVmIF9KX01FRElBMl9IVFRQX0NPTk5FQ1RJT05fSF8KKyNkZWZpbmUgX0pfTUVESUEyX0hUVFBfQ09OTkVDVElPTl9IXworCisjaW5jbHVkZSAiam5pLmgiCisKKyNpbmNsdWRlIDxtZWRpYS9NZWRpYUhUVFBDb25uZWN0aW9uLmg+CisjaW5jbHVkZSA8bWVkaWEvc3RhZ2VmcmlnaHQvZm91bmRhdGlvbi9BQmFzZS5oPgorCituYW1lc3BhY2UgYW5kcm9pZCB7CisKK3N0cnVjdCBKTWVkaWEySFRUUENvbm5lY3Rpb24gOiBwdWJsaWMgTWVkaWFIVFRQQ29ubmVjdGlvbiB7CisgICAgSk1lZGlhMkhUVFBDb25uZWN0aW9uKEpOSUVudiAqZW52LCBqb2JqZWN0IHRoaXopOworCisgICAgdmlydHVhbCBib29sIGNvbm5lY3QoCisgICAgICAgICAgICBjb25zdCBjaGFyICp1cmksIGNvbnN0IEtleWVkVmVjdG9yPFN0cmluZzgsIFN0cmluZzg+ICpoZWFkZXJzKSBvdmVycmlkZTsKKworICAgIHZpcnR1YWwgdm9pZCBkaXNjb25uZWN0KCkgb3ZlcnJpZGU7CisgICAgdmlydHVhbCBzc2l6ZV90IHJlYWRBdChvZmY2NF90IG9mZnNldCwgdm9pZCAqZGF0YSwgc2l6ZV90IHNpemUpIG92ZXJyaWRlOworICAgIHZpcnR1YWwgb2ZmNjRfdCBnZXRTaXplKCkgb3ZlcnJpZGU7CisgICAgdmlydHVhbCBzdGF0dXNfdCBnZXRNSU1FVHlwZShTdHJpbmc4ICptaW1lVHlwZSkgb3ZlcnJpZGU7CisgICAgdmlydHVhbCBzdGF0dXNfdCBnZXRVcmkoU3RyaW5nOCAqdXJpKSBvdmVycmlkZTsKKworcHJvdGVjdGVkOgorICAgIHZpcnR1YWwgfkpNZWRpYTJIVFRQQ29ubmVjdGlvbigpOworCitwcml2YXRlOgorICAgIGpvYmplY3QgbU1lZGlhMkhUVFBDb25uZWN0aW9uT2JqOworICAgIGptZXRob2RJRCBtQ29ubmVjdE1ldGhvZDsKKyAgICBqbWV0aG9kSUQgbURpc2Nvbm5lY3RNZXRob2Q7CisgICAgam1ldGhvZElEIG1SZWFkQXRNZXRob2Q7CisgICAgam1ldGhvZElEIG1HZXRTaXplTWV0aG9kOworICAgIGptZXRob2RJRCBtR2V0TUlNRVR5cGVNZXRob2Q7CisgICAgam1ldGhvZElEIG1HZXRVcmlNZXRob2Q7CisKKyAgICBqYnl0ZUFycmF5IG1CeXRlQXJyYXlPYmo7CisKKyAgICBESVNBTExPV19FVklMX0NPTlNUUlVDVE9SUyhKTWVkaWEySFRUUENvbm5lY3Rpb24pOworfTsKKworfSAgLy8gbmFtZXNwYWNlIGFuZHJvaWQKKworI2VuZGlmICAvLyBfSl9NRURJQTJfSFRUUF9DT05ORUNUSU9OX0hfCmRpZmYgLS1naXQgYS9tZWRpYS9saWJtZWRpYXBsYXllcjIvaW5jbHVkZS9tZWRpYXBsYXllcjIvSk1lZGlhMkhUVFBTZXJ2aWNlLmggYi9tZWRpYS9saWJtZWRpYXBsYXllcjIvaW5jbHVkZS9tZWRpYXBsYXllcjIvSk1lZGlhMkhUVFBTZXJ2aWNlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmY2MWE3ZgotLS0gL2Rldi9udWxsCisrKyBiL21lZGlhL2xpYm1lZGlhcGxheWVyMi9pbmNsdWRlL21lZGlhcGxheWVyMi9KTWVkaWEySFRUUFNlcnZpY2UuaApAQCAtMCwwICsxLDQ3IEBACisvKgorICogQ29weXJpZ2h0IDIwMTcsIFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworCisjaWZuZGVmIF9KX01FRElBMl9IVFRQX1NFUlZJQ0VfSF8KKyNkZWZpbmUgX0pfTUVESUEyX0hUVFBfU0VSVklDRV9IXworCisjaW5jbHVkZSA8am5pLmg+CisjaW5jbHVkZSA8dXRpbHMvUmVmQmFzZS5oPgorCisjaW5jbHVkZSA8bWVkaWEvTWVkaWFIVFRQU2VydmljZS5oPgorI2luY2x1ZGUgPG1lZGlhL01lZGlhSFRUUENvbm5lY3Rpb24uaD4KKyNpbmNsdWRlIDxtZWRpYS9zdGFnZWZyaWdodC9mb3VuZGF0aW9uL0FCYXNlLmg+CisKK25hbWVzcGFjZSBhbmRyb2lkIHsKKworc3RydWN0IEpNZWRpYTJIVFRQU2VydmljZSA6IHB1YmxpYyBNZWRpYUhUVFBTZXJ2aWNlIHsKKyAgICBKTWVkaWEySFRUUFNlcnZpY2UoSk5JRW52ICplbnYsIGpvYmplY3QgdGhpeik7CisKKyAgICB2aXJ0dWFsIHNwPE1lZGlhSFRUUENvbm5lY3Rpb24+IG1ha2VIVFRQQ29ubmVjdGlvbigpIG92ZXJyaWRlOworCitwcm90ZWN0ZWQ6CisgICAgdmlydHVhbCB+Sk1lZGlhMkhUVFBTZXJ2aWNlKCk7CisKK3ByaXZhdGU6CisgICAgam9iamVjdCBtTWVkaWEySFRUUFNlcnZpY2VPYmo7CisKKyAgICBqbWV0aG9kSUQgbU1ha2VIVFRQQ29ubmVjdGlvbk1ldGhvZDsKKworICAgIERJU0FMTE9XX0VWSUxfQ09OU1RSVUNUT1JTKEpNZWRpYTJIVFRQU2VydmljZSk7Cit9OworCit9ICAvLyBuYW1lc3BhY2UgYW5kcm9pZAorCisjZW5kaWYgIC8vIF9KX01FRElBMl9IVFRQX1NFUlZJQ0VfSF8KZGlmZiAtLWdpdCBhL21lZGlhL2xpYm1lZGlhcGxheWVyMi9pbmNsdWRlL21lZGlhcGxheWVyMi9KT2JqZWN0SG9sZGVyLmggYi9tZWRpYS9saWJtZWRpYXBsYXllcjIvaW5jbHVkZS9tZWRpYXBsYXllcjIvSk9iamVjdEhvbGRlci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkzZDhiNDAKLS0tIC9kZXYvbnVsbAorKysgYi9tZWRpYS9saWJtZWRpYXBsYXllcjIvaW5jbHVkZS9tZWRpYXBsYXllcjIvSk9iamVjdEhvbGRlci5oCkBAIC0wLDAgKzEsNDcgQEAKKy8qCisgKiBDb3B5cmlnaHQgMjAxOCwgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCisKKyNpZm5kZWYgSk9CSkVDVF9IT0xERVJfSF8KKworI2RlZmluZSBKT0JKRUNUX0hPTERFUl9IXworCisjaW5jbHVkZSAiam5pLmgiCisjaW5jbHVkZSA8bWVkaWFwbGF5ZXIyL0phdmFWTUhlbHBlci5oPgorI2luY2x1ZGUgPHV0aWxzL1JlZkJhc2UuaD4KKworbmFtZXNwYWNlIGFuZHJvaWQgeworCisvLyBIZWxwZXIgY2xhc3MgZm9yIG1hbmFnaW5nIGdsb2JhbCByZWZlcmVuY2Ugb2Ygam9iamVjdC4KK3N0cnVjdCBKT2JqZWN0SG9sZGVyIDogcHVibGljIFJlZkJhc2UgeworICAgIEpPYmplY3RIb2xkZXIoam9iamVjdCBvYmopIHsKKyAgICAgICAgSk5JRW52ICplbnYgPSBKYXZhVk1IZWxwZXI6OmdldEpOSUVudigpOworICAgICAgICBtSk9iamVjdCA9IHJlaW50ZXJwcmV0X2Nhc3Q8am9iamVjdD4oZW52LT5OZXdHbG9iYWxSZWYob2JqKSk7CisgICAgfQorCisgICAgdmlydHVhbCB+Sk9iamVjdEhvbGRlcigpIHsKKyAgICAgICAgSk5JRW52ICplbnYgPSBKYXZhVk1IZWxwZXI6OmdldEpOSUVudigpOworICAgICAgICBlbnYtPkRlbGV0ZUdsb2JhbFJlZihtSk9iamVjdCk7CisgICAgfQorCisgICAgam9iamVjdCBnZXRKT2JqZWN0KCkgeyByZXR1cm4gbUpPYmplY3Q7IH0KKworcHJpdmF0ZToKKyAgICBqb2JqZWN0IG1KT2JqZWN0OworfTsKKworfSAgLy8iIGFuZHJvaWQKKworI2VuZGlmICAvLyBKT0JKRUNUX0hPTERFUl9IXwpkaWZmIC0tZ2l0IGEvbWVkaWEvbGlibWVkaWFwbGF5ZXIyL2luY2x1ZGUvbWVkaWFwbGF5ZXIyL0phdmFWTUhlbHBlci5oIGIvbWVkaWEvbGlibWVkaWFwbGF5ZXIyL2luY2x1ZGUvbWVkaWFwbGF5ZXIyL0phdmFWTUhlbHBlci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM1MDkxYjcKLS0tIC9kZXYvbnVsbAorKysgYi9tZWRpYS9saWJtZWRpYXBsYXllcjIvaW5jbHVkZS9tZWRpYXBsYXllcjIvSmF2YVZNSGVscGVyLmgKQEAgLTAsMCArMSw0MCBAQAorLyoKKyAqIENvcHlyaWdodCAyMDE4IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KKworI2lmbmRlZiBKQVZBX1ZNX0hFTFBFUl9IXworCisjZGVmaW5lIEpBVkFfVk1fSEVMUEVSX0hfCisKKyNpbmNsdWRlICJqbmkuaCIKKworI2luY2x1ZGUgPGF0b21pYz4KKworbmFtZXNwYWNlIGFuZHJvaWQgeworCitzdHJ1Y3QgSmF2YVZNSGVscGVyIHsKKyAgICBzdGF0aWMgSk5JRW52ICpnZXRKTklFbnYoKTsKKyAgICBzdGF0aWMgdm9pZCBzZXRKYXZhVk0oSmF2YVZNICp2bSk7CisKK3ByaXZhdGU6CisgICAgLy8gT25jZSBhIHZhbGlkIEphdmFWTSBoYXMgYmVlbiBzZXQsIGl0IHNob3VsZCBuZXZlciBiZSByZXNldCBvciBjaGFuZ2VkLgorICAgIC8vIEhvd2V2ZXIsIGFzIGl0IG1heSBiZSBhY2Nlc3NlZCBmcm9tIG11bHRpcGxlIHRocmVhZHMsIGFjY2VzcyBuZWVkcyB0byBiZQorICAgIC8vIHN5bmNocm9uaXplZC4KKyAgICBzdGF0aWMgc3RkOjphdG9taWM8SmF2YVZNICo+IHNKYXZhVk07Cit9OworCit9ICAvLyBuYW1lc3BhY2UgYW5kcm9pZAorCisjZW5kaWYgIC8vIEpBVkFfVk1fSEVMUEVSX0hfCmRpZmYgLS1naXQgYS9tZWRpYS9saWJtZWRpYXBsYXllcjIvaW5jbHVkZS9tZWRpYXBsYXllcjIvTWVkaWFQbGF5ZXIyQXVkaW9PdXRwdXQuaCBiL21lZGlhL2xpYm1lZGlhcGxheWVyMi9pbmNsdWRlL21lZGlhcGxheWVyMi9NZWRpYVBsYXllcjJBdWRpb091dHB1dC5oCmluZGV4IDVkNWI4ZTQuLmJkYTRmNjEgMTAwNjQ0Ci0tLSBhL21lZGlhL2xpYm1lZGlhcGxheWVyMi9pbmNsdWRlL21lZGlhcGxheWVyMi9NZWRpYVBsYXllcjJBdWRpb091dHB1dC5oCisrKyBiL21lZGlhL2xpYm1lZGlhcGxheWVyMi9pbmNsdWRlL21lZGlhcGxheWVyMi9NZWRpYVBsYXllcjJBdWRpb091dHB1dC5oCkBAIC0xOSwxMCArMTksMTYgQEAKICNkZWZpbmUgQU5EUk9JRF9NRURJQVBMQVlFUjJBVURJT09VVFBVVF9ICiAKICNpbmNsdWRlIDxtZWRpYXBsYXllcjIvTWVkaWFQbGF5ZXIySW50ZXJmYWNlLmg+CisjaW5jbHVkZSA8bWVkaWFwbGF5ZXIyL0pBdWRpb1RyYWNrLmg+CisjaW5jbHVkZSA8bWVkaWFwbGF5ZXIyL0pPYmplY3RIb2xkZXIuaD4KIAorI2luY2x1ZGUgPHZlY3Rvcj4KKyNpbmNsdWRlIDx1dGlsaXR5PgogI2luY2x1ZGUgPHV0aWxzL1N0cmluZzE2Lmg+CiAjaW5jbHVkZSA8dXRpbHMvVmVjdG9yLmg+CiAKKyNpbmNsdWRlICJqbmkuaCIKKwogbmFtZXNwYWNlIGFuZHJvaWQgewogCiBjbGFzcyBBdWRpb1RyYWNrOwpAQCAtMzIsMTUgKzM4LDE0IEBACiAgICAgY2xhc3MgQ2FsbGJhY2tEYXRhOwogCiBwdWJsaWM6Ci0gICAgTWVkaWFQbGF5ZXIyQXVkaW9PdXRwdXQoYXVkaW9fc2Vzc2lvbl90IHNlc3Npb25JZCwKKyAgICBNZWRpYVBsYXllcjJBdWRpb091dHB1dChpbnQzMl90IHNlc3Npb25JZCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aWRfdCB1aWQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHBpZCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBhdWRpb19hdHRyaWJ1dGVzX3QgKiBhdHRyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHNwPEF1ZGlvU3lzdGVtOjpBdWRpb0RldmljZUNhbGxiYWNrPiYgZGV2aWNlQ2FsbGJhY2spOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGpvYmplY3QgYXR0cmlidXRlcyk7CiAgICAgdmlydHVhbCB+TWVkaWFQbGF5ZXIyQXVkaW9PdXRwdXQoKTsKIAogICAgIHZpcnR1YWwgYm9vbCByZWFkeSgpIGNvbnN0IHsKLSAgICAgICAgcmV0dXJuIG1UcmFjayAhPSAwOworICAgICAgICByZXR1cm4gbUpBdWRpb1RyYWNrICE9IG51bGxwdHI7CiAgICAgfQogICAgIHZpcnR1YWwgc3NpemVfdCBidWZmZXJTaXplKCkgY29uc3Q7CiAgICAgdmlydHVhbCBzc2l6ZV90IGZyYW1lQ291bnQoKSBjb25zdDsKQEAgLTUyLDE3ICs1NywxNyBAQAogICAgIHZpcnR1YWwgc3RhdHVzX3QgZ2V0VGltZXN0YW1wKEF1ZGlvVGltZXN0YW1wICZ0cykgY29uc3Q7CiAgICAgdmlydHVhbCBpbnQ2NF90IGdldFBsYXllZE91dER1cmF0aW9uVXMoaW50NjRfdCBub3dVcykgY29uc3Q7CiAgICAgdmlydHVhbCBzdGF0dXNfdCBnZXRGcmFtZXNXcml0dGVuKHVpbnQzMl90ICpmcmFtZXN3cml0dGVuKSBjb25zdDsKLSAgICB2aXJ0dWFsIGF1ZGlvX3Nlc3Npb25fdCBnZXRTZXNzaW9uSWQoKSBjb25zdDsKKyAgICB2aXJ0dWFsIGludDMyX3QgZ2V0U2Vzc2lvbklkKCkgY29uc3Q7CisgICAgdmlydHVhbCB2b2lkIHNldFNlc3Npb25JZChjb25zdCBpbnQzMl90IGlkKTsKICAgICB2aXJ0dWFsIHVpbnQzMl90IGdldFNhbXBsZVJhdGUoKSBjb25zdDsKICAgICB2aXJ0dWFsIGludDY0X3QgZ2V0QnVmZmVyRHVyYXRpb25JblVzKCkgY29uc3Q7CiAKICAgICB2aXJ0dWFsIHN0YXR1c190IG9wZW4oCiAgICAgICAgICAgICB1aW50MzJfdCBzYW1wbGVSYXRlLCBpbnQgY2hhbm5lbENvdW50LCBhdWRpb19jaGFubmVsX21hc2tfdCBjaGFubmVsTWFzaywKLSAgICAgICAgICAgIGF1ZGlvX2Zvcm1hdF90IGZvcm1hdCwgaW50IGJ1ZmZlckNvdW50LAorICAgICAgICAgICAgYXVkaW9fZm9ybWF0X3QgZm9ybWF0LAogICAgICAgICAgICAgQXVkaW9DYWxsYmFjayBjYiwgdm9pZCAqY29va2llLAogICAgICAgICAgICAgYXVkaW9fb3V0cHV0X2ZsYWdzX3QgZmxhZ3MgPSBBVURJT19PVVRQVVRfRkxBR19OT05FLAogICAgICAgICAgICAgY29uc3QgYXVkaW9fb2ZmbG9hZF9pbmZvX3QgKm9mZmxvYWRJbmZvID0gTlVMTCwKLSAgICAgICAgICAgIGJvb2wgZG9Ob3RSZWNvbm5lY3QgPSBmYWxzZSwKICAgICAgICAgICAgIHVpbnQzMl90IHN1Z2dlc3RlZEZyYW1lQ291bnQgPSAwKTsKIAogICAgIHZpcnR1YWwgc3RhdHVzX3Qgc3RhcnQoKTsKQEAgLTcxLDEzICs3NiwxMCBAQAogICAgIHZpcnR1YWwgdm9pZCBmbHVzaCgpOwogICAgIHZpcnR1YWwgdm9pZCBwYXVzZSgpOwogICAgIHZpcnR1YWwgdm9pZCBjbG9zZSgpOwotICAgIHZvaWQgc2V0QXVkaW9TdHJlYW1UeXBlKGF1ZGlvX3N0cmVhbV90eXBlX3Qgc3RyZWFtVHlwZSk7Ci0gICAgdmlydHVhbCBhdWRpb19zdHJlYW1fdHlwZV90IGdldEF1ZGlvU3RyZWFtVHlwZSgpIGNvbnN0IHsKLSAgICAgICAgcmV0dXJuIG1TdHJlYW1UeXBlOwotICAgIH0KLSAgICB2b2lkIHNldEF1ZGlvQXR0cmlidXRlcyhjb25zdCBhdWRpb19hdHRyaWJ1dGVzX3QgKiBhdHRyaWJ1dGVzKTsKKyAgICB2b2lkIHNldEF1ZGlvQXR0cmlidXRlcyhjb25zdCBqb2JqZWN0IGF0dHJpYnV0ZXMpOworICAgIHZpcnR1YWwgYXVkaW9fc3RyZWFtX3R5cGVfdCBnZXRBdWRpb1N0cmVhbVR5cGUoKSBjb25zdDsKIAotICAgIHZvaWQgc2V0Vm9sdW1lKGZsb2F0IGxlZnQsIGZsb2F0IHJpZ2h0KTsKKyAgICB2b2lkIHNldFZvbHVtZShmbG9hdCB2b2x1bWUpOwogICAgIHZpcnR1YWwgc3RhdHVzX3Qgc2V0UGxheWJhY2tSYXRlKGNvbnN0IEF1ZGlvUGxheWJhY2tSYXRlJiByYXRlKTsKICAgICB2aXJ0dWFsIHN0YXR1c190IGdldFBsYXliYWNrUmF0ZShBdWRpb1BsYXliYWNrUmF0ZSogcmF0ZSAvKiBub25udWxsICovKTsKIApAQCAtOTIsMTMgKzk0LDExIEBACiAgICAgICAgIC8vIFRPRE86IHJldHVybiBjb3JyZWN0IHZhbHVlLgogICAgICAgICAvL3JldHVybiBtTmV4dE91dHB1dCA9PSBOVUxMOwogICAgIH0KLSAgICB2aXJ0dWFsIHN0YXR1c190IHNldFBhcmFtZXRlcnMoY29uc3QgU3RyaW5nOCYga2V5VmFsdWVQYWlycyk7Ci0gICAgdmlydHVhbCBTdHJpbmc4IGdldFBhcmFtZXRlcnMoY29uc3QgU3RyaW5nOCYga2V5cyk7Ci0KICAgICAvLyBBdWRpb1JvdXRpbmcKLSAgICB2aXJ0dWFsIHN0YXR1c190IHNldE91dHB1dERldmljZShhdWRpb19wb3J0X2hhbmRsZV90IGRldmljZUlkKTsKLSAgICB2aXJ0dWFsIHN0YXR1c190IGdldFJvdXRlZERldmljZUlkKGF1ZGlvX3BvcnRfaGFuZGxlX3QqIGRldmljZUlkKTsKLSAgICB2aXJ0dWFsIHN0YXR1c190IGVuYWJsZUF1ZGlvRGV2aWNlQ2FsbGJhY2soYm9vbCBlbmFibGVkKTsKKyAgICB2aXJ0dWFsIHN0YXR1c190IHNldFByZWZlcnJlZERldmljZShqb2JqZWN0IGRldmljZSk7CisgICAgdmlydHVhbCBqb2JqZWN0IGdldFJvdXRlZERldmljZSgpOworICAgIHZpcnR1YWwgc3RhdHVzX3QgYWRkQXVkaW9EZXZpY2VDYWxsYmFjayhqb2JqZWN0IHJvdXRpbmdEZWxlZ2F0ZSk7CisgICAgdmlydHVhbCBzdGF0dXNfdCByZW1vdmVBdWRpb0RldmljZUNhbGxiYWNrKGpvYmplY3QgbGlzdGVuZXIpOwogCiBwcml2YXRlOgogICAgIHN0YXRpYyB2b2lkIHNldE1pbkJ1ZmZlckNvdW50KCk7CkBAIC0xMDcsMjkgKzEwNywyNSBAQAogICAgIHZvaWQgY2xvc2VfbCgpOwogICAgIHN0YXR1c190IHVwZGF0ZVRyYWNrX2woKTsKIAotICAgIHNwPEF1ZGlvVHJhY2s+ICAgICAgICAgIG1UcmFjazsKKyAgICBzcDxKQXVkaW9UcmFjaz4gICAgICAgICBtSkF1ZGlvVHJhY2s7CiAgICAgQXVkaW9DYWxsYmFjayAgICAgICAgICAgbUNhbGxiYWNrOwogICAgIHZvaWQgKiAgICAgICAgICAgICAgICAgIG1DYWxsYmFja0Nvb2tpZTsKICAgICBDYWxsYmFja0RhdGEgKiAgICAgICAgICBtQ2FsbGJhY2tEYXRhOwotICAgIGF1ZGlvX3N0cmVhbV90eXBlX3QgICAgIG1TdHJlYW1UeXBlOwotICAgIGF1ZGlvX2F0dHJpYnV0ZXNfdCAqICAgIG1BdHRyaWJ1dGVzOwotICAgIGZsb2F0ICAgICAgICAgICAgICAgICAgIG1MZWZ0Vm9sdW1lOwotICAgIGZsb2F0ICAgICAgICAgICAgICAgICAgIG1SaWdodFZvbHVtZTsKKyAgICBzcDxKT2JqZWN0SG9sZGVyPiAgICAgICBtQXR0cmlidXRlczsKKyAgICBmbG9hdCAgICAgICAgICAgICAgICAgICBtVm9sdW1lOwogICAgIEF1ZGlvUGxheWJhY2tSYXRlICAgICAgIG1QbGF5YmFja1JhdGU7CiAgICAgdWludDMyX3QgICAgICAgICAgICAgICAgbVNhbXBsZVJhdGVIejsgLy8gc2FtcGxlIHJhdGUgb2YgdGhlIGNvbnRlbnQsIGFzIHNldCBpbiBvcGVuKCkKICAgICBmbG9hdCAgICAgICAgICAgICAgICAgICBtTXNlY3NQZXJGcmFtZTsKICAgICBzaXplX3QgICAgICAgICAgICAgICAgICBtRnJhbWVTaXplOwotICAgIGF1ZGlvX3Nlc3Npb25fdCAgICAgICAgIG1TZXNzaW9uSWQ7CisgICAgaW50MzJfdCAgICAgICAgICAgICAgICAgbVNlc3Npb25JZDsKICAgICB1aWRfdCAgICAgICAgICAgICAgICAgICBtVWlkOwogICAgIGludCAgICAgICAgICAgICAgICAgICAgIG1QaWQ7CiAgICAgZmxvYXQgICAgICAgICAgICAgICAgICAgbVNlbmRMZXZlbDsKICAgICBpbnQgICAgICAgICAgICAgICAgICAgICBtQXV4RWZmZWN0SWQ7CiAgICAgYXVkaW9fb3V0cHV0X2ZsYWdzX3QgICAgbUZsYWdzOwotICAgIGF1ZGlvX3BvcnRfaGFuZGxlX3QgICAgIG1TZWxlY3RlZERldmljZUlkOwotICAgIGF1ZGlvX3BvcnRfaGFuZGxlX3QgICAgIG1Sb3V0ZWREZXZpY2VJZDsKLSAgICBib29sICAgICAgICAgICAgICAgICAgICBtRGV2aWNlQ2FsbGJhY2tFbmFibGVkOwotICAgIHdwPEF1ZGlvU3lzdGVtOjpBdWRpb0RldmljZUNhbGxiYWNrPiAgICAgICAgbURldmljZUNhbGxiYWNrOworICAgIHNwPEpPYmplY3RIb2xkZXI+ICAgICAgIG1QcmVmZXJyZWREZXZpY2U7CiAgICAgbXV0YWJsZSBNdXRleCAgICAgICAgICAgbUxvY2s7CisgICAgc3RkOjp2ZWN0b3I8c3RkOjpwYWlyPGpvYmplY3QsIGpvYmplY3Q+PiBtUm91dGluZ0RlbGVnYXRlczsgLy8gPGxpc3RlbmVyLCByb3V0aW5nRGVsZWdhdGU+CiAKICAgICAvLyBzdGF0aWMgdmFyaWFibGVzIGJlbG93IG5vdCBwcm90ZWN0ZWQgYnkgbXV0ZXgKICAgICBzdGF0aWMgYm9vbCAgICAgICAgICAgICBtSXNPbkVtdWxhdG9yOwpkaWZmIC0tZ2l0IGEvbWVkaWEvbGlibWVkaWFwbGF5ZXIyL2luY2x1ZGUvbWVkaWFwbGF5ZXIyL01lZGlhUGxheWVyMkludGVyZmFjZS5oIGIvbWVkaWEvbGlibWVkaWFwbGF5ZXIyL2luY2x1ZGUvbWVkaWFwbGF5ZXIyL01lZGlhUGxheWVyMkludGVyZmFjZS5oCmluZGV4IDAyYmY4OTEuLjRiMTllMzggMTAwNjQ0Ci0tLSBhL21lZGlhL2xpYm1lZGlhcGxheWVyMi9pbmNsdWRlL21lZGlhcGxheWVyMi9NZWRpYVBsYXllcjJJbnRlcmZhY2UuaAorKysgYi9tZWRpYS9saWJtZWRpYXBsYXllcjIvaW5jbHVkZS9tZWRpYXBsYXllcjIvTWVkaWFQbGF5ZXIySW50ZXJmYWNlLmgKQEAgLTIzLDYgKzIzLDcgQEAKICNpbmNsdWRlIDx1dGlscy9FcnJvcnMuaD4KICNpbmNsdWRlIDx1dGlscy9TdHJpbmc4Lmg+CiAjaW5jbHVkZSA8dXRpbHMvUmVmQmFzZS5oPgorI2luY2x1ZGUgPGpuaS5oPgogCiAjaW5jbHVkZSA8bWVkaWEvQVZTeW5jU2V0dGluZ3MuaD4KICNpbmNsdWRlIDxtZWRpYS9BdWRpb1Jlc2FtcGxlclB1YmxpYy5oPgpAQCAtMzMsNiArMzQsMTEgQEAKICNpbmNsdWRlIDxtZWRpYS9zdGFnZWZyaWdodC9mb3VuZGF0aW9uL0FIYW5kbGVyLmg+CiAjaW5jbHVkZSA8bWVkaWFwbGF5ZXIyL01lZGlhUGxheWVyMlR5cGVzLmg+CiAKKyNpbmNsdWRlICJqbmkuaCIKKyNpbmNsdWRlICJtZWRpYXBsYXllcjIucGIuaCIKKwordXNpbmcgYW5kcm9pZDo6bWVkaWE6Ok1lZGlhUGxheWVyMlByb3RvOjpQbGF5ZXJNZXNzYWdlOworCiAvLyBGd2QgZGVjbCB0byBtYWtlIHN1cmUgZXZlcnlvbmUgYWdyZWVzIHRoYXQgdGhlIHNjb3BlIG9mIHN0cnVjdCBzb2NrYWRkcl9pbiBpcwogLy8gZ2xvYmFsLCBhbmQgbm90IGluIGFuZHJvaWQ6Ogogc3RydWN0IHNvY2thZGRyX2luOwpAQCAtNDMsNyArNDksNiBAQAogY2xhc3MgUGFyY2VsOwogc3RydWN0IEFOYXRpdmVXaW5kb3dXcmFwcGVyOwogCi0jZGVmaW5lIERFRkFVTFRfQVVESU9TSU5LX0JVRkZFUkNPVU5UIDQKICNkZWZpbmUgREVGQVVMVF9BVURJT1NJTktfQlVGRkVSU0laRSAxMjAwCiAjZGVmaW5lIERFRkFVTFRfQVVESU9TSU5LX1NBTVBMRVJBVEUgNDQxMDAKIApAQCAtNTYsNyArNjEsOCBAQAogY2xhc3MgTWVkaWFQbGF5ZXIySW50ZXJmYWNlTGlzdGVuZXI6IHB1YmxpYyBSZWZCYXNlCiB7CiBwdWJsaWM6Ci0gICAgdmlydHVhbCB2b2lkIG5vdGlmeShpbnQ2NF90IHNyY0lkLCBpbnQgbXNnLCBpbnQgZXh0MSwgaW50IGV4dDIsIGNvbnN0IFBhcmNlbCAqb2JqKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIG5vdGlmeShpbnQ2NF90IHNyY0lkLCBpbnQgbXNnLCBpbnQgZXh0MSwgaW50IGV4dDIsCisgICAgICAgICAgIGNvbnN0IFBsYXllck1lc3NhZ2UgKm9iaikgPSAwOwogfTsKIAogY2xhc3MgTWVkaWFQbGF5ZXIySW50ZXJmYWNlIDogcHVibGljIEFIYW5kbGVyIHsKQEAgLTg4LDcgKzk0LDcgQEAKICAgICAgICAgdmlydHVhbCBzdGF0dXNfdCBnZXRUaW1lc3RhbXAoQXVkaW9UaW1lc3RhbXAgJnRzKSBjb25zdCA9IDA7CiAgICAgICAgIHZpcnR1YWwgaW50NjRfdCBnZXRQbGF5ZWRPdXREdXJhdGlvblVzKGludDY0X3Qgbm93VXMpIGNvbnN0ID0gMDsKICAgICAgICAgdmlydHVhbCBzdGF0dXNfdCBnZXRGcmFtZXNXcml0dGVuKHVpbnQzMl90ICpmcmFtZXN3cml0dGVuKSBjb25zdCA9IDA7Ci0gICAgICAgIHZpcnR1YWwgYXVkaW9fc2Vzc2lvbl90IGdldFNlc3Npb25JZCgpIGNvbnN0ID0gMDsKKyAgICAgICAgdmlydHVhbCBpbnQzMl90IGdldFNlc3Npb25JZCgpIGNvbnN0ID0gMDsKICAgICAgICAgdmlydHVhbCBhdWRpb19zdHJlYW1fdHlwZV90IGdldEF1ZGlvU3RyZWFtVHlwZSgpIGNvbnN0ID0gMDsKICAgICAgICAgdmlydHVhbCB1aW50MzJfdCBnZXRTYW1wbGVSYXRlKCkgY29uc3QgPSAwOwogICAgICAgICB2aXJ0dWFsIGludDY0X3QgZ2V0QnVmZmVyRHVyYXRpb25JblVzKCkgY29uc3QgPSAwOwpAQCAtOTgsMTIgKzEwNCwxMCBAQAogICAgICAgICB2aXJ0dWFsIHN0YXR1c190IG9wZW4oCiAgICAgICAgICAgICAgICAgdWludDMyX3Qgc2FtcGxlUmF0ZSwgaW50IGNoYW5uZWxDb3VudCwgYXVkaW9fY2hhbm5lbF9tYXNrX3QgY2hhbm5lbE1hc2ssCiAgICAgICAgICAgICAgICAgYXVkaW9fZm9ybWF0X3QgZm9ybWF0PUFVRElPX0ZPUk1BVF9QQ01fMTZfQklULAotICAgICAgICAgICAgICAgIGludCBidWZmZXJDb3VudD1ERUZBVUxUX0FVRElPU0lOS19CVUZGRVJDT1VOVCwKICAgICAgICAgICAgICAgICBBdWRpb0NhbGxiYWNrIGNiID0gTlVMTCwKICAgICAgICAgICAgICAgICB2b2lkICpjb29raWUgPSBOVUxMLAogICAgICAgICAgICAgICAgIGF1ZGlvX291dHB1dF9mbGFnc190IGZsYWdzID0gQVVESU9fT1VUUFVUX0ZMQUdfTk9ORSwKICAgICAgICAgICAgICAgICBjb25zdCBhdWRpb19vZmZsb2FkX2luZm9fdCAqb2ZmbG9hZEluZm8gPSBOVUxMLAotICAgICAgICAgICAgICAgIGJvb2wgZG9Ob3RSZWNvbm5lY3QgPSBmYWxzZSwKICAgICAgICAgICAgICAgICB1aW50MzJfdCBzdWdnZXN0ZWRGcmFtZUNvdW50ID0gMCkgPSAwOwogCiAgICAgICAgIHZpcnR1YWwgc3RhdHVzX3Qgc3RhcnQoKSA9IDA7CkBAIC0xMzksOSArMTQzLDEwIEBACiAgICAgICAgIH0KIAogICAgICAgICAvLyBBdWRpb1JvdXRpbmcKLSAgICAgICAgdmlydHVhbCBzdGF0dXNfdCAgICBzZXRPdXRwdXREZXZpY2UoYXVkaW9fcG9ydF9oYW5kbGVfdCBkZXZpY2VJZCk7Ci0gICAgICAgIHZpcnR1YWwgc3RhdHVzX3QgICAgZ2V0Um91dGVkRGV2aWNlSWQoYXVkaW9fcG9ydF9oYW5kbGVfdCogZGV2aWNlSWQpOwotICAgICAgICB2aXJ0dWFsIHN0YXR1c190ICAgIGVuYWJsZUF1ZGlvRGV2aWNlQ2FsbGJhY2soYm9vbCBlbmFibGVkKTsKKyAgICAgICAgdmlydHVhbCBzdGF0dXNfdCAgICBzZXRQcmVmZXJyZWREZXZpY2Uoam9iamVjdCBkZXZpY2UpOworICAgICAgICB2aXJ0dWFsIGpvYmplY3QgICAgIGdldFJvdXRlZERldmljZSgpOworICAgICAgICB2aXJ0dWFsIHN0YXR1c190ICAgIGFkZEF1ZGlvRGV2aWNlQ2FsbGJhY2soam9iamVjdCByb3V0aW5nRGVsZWdhdGUpOworICAgICAgICB2aXJ0dWFsIHN0YXR1c190ICAgIHJlbW92ZUF1ZGlvRGV2aWNlQ2FsbGJhY2soam9iamVjdCBsaXN0ZW5lcik7CiAgICAgfTsKIAogICAgIE1lZGlhUGxheWVyMkludGVyZmFjZSgpIDogbUxpc3RlbmVyKE5VTEwpIHsgfQpAQCAtMTcxLDcgKzE3Niw2IEBACiAKICAgICB2aXJ0dWFsIHN0YXR1c190IHByZXBhcmVBc3luYygpID0gMDsKICAgICB2aXJ0dWFsIHN0YXR1c190IHN0YXJ0KCkgPSAwOwotICAgIHZpcnR1YWwgc3RhdHVzX3Qgc3RvcCgpID0gMDsKICAgICB2aXJ0dWFsIHN0YXR1c190IHBhdXNlKCkgPSAwOwogICAgIHZpcnR1YWwgYm9vbCBpc1BsYXlpbmcoKSA9IDA7CiAgICAgdmlydHVhbCBzdGF0dXNfdCBzZXRQbGF5YmFja1NldHRpbmdzKGNvbnN0IEF1ZGlvUGxheWJhY2tSYXRlJiByYXRlKSB7CkBAIC0yMTgsNyArMjIyLDcgQEAKICAgICAvLyAgICAgICAgICAgICAgICBkYXRhIHNlbnQgYnkgdGhlIGphdmEgbGF5ZXIuCiAgICAgLy8gQHBhcmFtW291dF0gcmVwbHkgUGFyY2VsIHRvIGhvbGQgdGhlIHJlcGx5IGRhdGEuIENhbm5vdCBiZSBudWxsLgogICAgIC8vIEByZXR1cm4gT0sgaWYgdGhlIGNhbGwgd2FzIHN1Y2Nlc3NmdWwuCi0gICAgdmlydHVhbCBzdGF0dXNfdCBpbnZva2UoY29uc3QgUGFyY2VsJiByZXF1ZXN0LCBQYXJjZWwgKnJlcGx5KSA9IDA7CisgICAgdmlydHVhbCBzdGF0dXNfdCBpbnZva2UoY29uc3QgUGxheWVyTWVzc2FnZSAmcmVxdWVzdCwgUGxheWVyTWVzc2FnZSAqcmVwbHkpID0gMDsKIAogICAgIC8vIFRoZSBDbGllbnQgaW4gdGhlIE1ldGFkYXRhUGxheWVyU2VydmljZSBjYWxscyB0aGlzIG1ldGhvZCBvbgogICAgIC8vIHRoZSBuYXRpdmUgcGxheWVyIHRvIHJldHJpZXZlIGFsbCBvciBhIHN1YnNldCBvZiBtZXRhZGF0YS4KQEAgLTIzNyw3ICsyNDEsNyBAQAogICAgICAgICBtTGlzdGVuZXIgPSBsaXN0ZW5lcjsKICAgICB9CiAKLSAgICB2b2lkIHNlbmRFdmVudChpbnQ2NF90IHNyY0lkLCBpbnQgbXNnLCBpbnQgZXh0MT0wLCBpbnQgZXh0Mj0wLCBjb25zdCBQYXJjZWwgKm9iaj1OVUxMKSB7CisgICAgdm9pZCBzZW5kRXZlbnQoaW50NjRfdCBzcmNJZCwgaW50IG1zZywgaW50IGV4dDE9MCwgaW50IGV4dDI9MCwgY29uc3QgUGxheWVyTWVzc2FnZSAqb2JqPU5VTEwpIHsKICAgICAgICAgc3A8TWVkaWFQbGF5ZXIySW50ZXJmYWNlTGlzdGVuZXI+IGxpc3RlbmVyOwogICAgICAgICB7CiAgICAgICAgICAgICBNdXRleDo6QXV0b2xvY2sgYXV0b0xvY2sobUxpc3RlbmVyTG9jayk7CmRpZmYgLS1naXQgYS9tZWRpYS9saWJtZWRpYXBsYXllcjIvaW5jbHVkZS9tZWRpYXBsYXllcjIvTWVkaWFQbGF5ZXIyVHlwZXMuaCBiL21lZGlhL2xpYm1lZGlhcGxheWVyMi9pbmNsdWRlL21lZGlhcGxheWVyMi9NZWRpYVBsYXllcjJUeXBlcy5oCmluZGV4IDM5MDViNTUuLjI0MzAyODkgMTAwNjQ0Ci0tLSBhL21lZGlhL2xpYm1lZGlhcGxheWVyMi9pbmNsdWRlL21lZGlhcGxheWVyMi9NZWRpYVBsYXllcjJUeXBlcy5oCisrKyBiL21lZGlhL2xpYm1lZGlhcGxheWVyMi9pbmNsdWRlL21lZGlhcGxheWVyMi9NZWRpYVBsYXllcjJUeXBlcy5oCkBAIC0zNCw4ICszNCw3IEBACiAgICAgTUVESUEyX1NFVF9WSURFT19TSVpFICAgID0gNSwKICAgICBNRURJQTJfU1RBUlRFRCAgICAgICAgICAgPSA2LAogICAgIE1FRElBMl9QQVVTRUQgICAgICAgICAgICA9IDcsCi0gICAgTUVESUEyX1NUT1BQRUQgICAgICAgICAgID0gOCwKLSAgICBNRURJQTJfU0tJUFBFRCAgICAgICAgICAgPSA5LAorICAgIE1FRElBMl9TS0lQUEVEICAgICAgICAgICA9IDgsCiAgICAgTUVESUEyX05PVElGWV9USU1FICAgICAgID0gOTgsCiAgICAgTUVESUEyX1RJTUVEX1RFWFQgICAgICAgID0gOTksCiAgICAgTUVESUEyX0VSUk9SICAgICAgICAgICAgID0gMTAwLApAQCAtNDMsNyArNDIsNiBAQAogICAgIE1FRElBMl9TVUJUSVRMRV9EQVRBICAgICA9IDIwMSwKICAgICBNRURJQTJfTUVUQV9EQVRBICAgICAgICAgPSAyMDIsCiAgICAgTUVESUEyX0RSTV9JTkZPICAgICAgICAgID0gMjEwLAotICAgIE1FRElBMl9BVURJT19ST1VUSU5HX0NIQU5HRUQgPSAxMDAwMCwKIH07CiAKIC8vIEdlbmVyaWMgZXJyb3IgY29kZXMgZm9yIHRoZSBtZWRpYSBwbGF5ZXIgZnJhbWV3b3JrLiAgRXJyb3JzIGFyZSBmYXRhbCwgdGhlCkBAIC05NiwxNyArOTQsMjAgQEAKIGVudW0gbWVkaWEyX2luZm9fdHlwZSB7CiAgICAgLy8gMHh4CiAgICAgTUVESUEyX0lORk9fVU5LTk9XTiA9IDEsCi0gICAgLy8gVGhlIHBsYXllciB3YXMgc3RhcnRlZCBiZWNhdXNlIGl0IHdhcyB1c2VkIGFzIHRoZSBuZXh0IHBsYXllciBmb3IgYW5vdGhlcgotICAgIC8vIHBsYXllciwgd2hpY2gganVzdCBjb21wbGV0ZWQgcGxheWJhY2sKLSAgICBNRURJQTJfSU5GT19TVEFSVEVEX0FTX05FWFQgPSAyLAorICAgIC8vIFRoZSBwbGF5ZXIganVzdCBzdGFydGVkIHRoZSBwbGF5YmFjayBvZiB0aGlzIGRhdGEgc291cmNlLgorICAgIE1FRElBMl9JTkZPX0RBVEFfU09VUkNFX1NUQVJUID0gMiwKICAgICAvLyBUaGUgcGxheWVyIGp1c3QgcHVzaGVkIHRoZSB2ZXJ5IGZpcnN0IHZpZGVvIGZyYW1lIGZvciByZW5kZXJpbmcKICAgICBNRURJQTJfSU5GT19WSURFT19SRU5ERVJJTkdfU1RBUlQgPSAzLAogICAgIC8vIFRoZSBwbGF5ZXIganVzdCBwdXNoZWQgdGhlIHZlcnkgZmlyc3QgYXVkaW8gZnJhbWUgZm9yIHJlbmRlcmluZwogICAgIE1FRElBMl9JTkZPX0FVRElPX1JFTkRFUklOR19TVEFSVCA9IDQsCiAgICAgLy8gVGhlIHBsYXllciBqdXN0IGNvbXBsZXRlZCB0aGUgcGxheWJhY2sgb2YgdGhpcyBkYXRhIHNvdXJjZQotICAgIE1FRElBMl9JTkZPX1BMQVlCQUNLX0NPTVBMRVRFID0gNSwKLSAgICAvLyBUaGUgcGxheWVyIGp1c3QgY29tcGxldGVkIHRoZSBwbGF5YmFjayBvZiB0aGUgZnVsbCBwbGF5IGxpc3QKLSAgICBNRURJQTJfSU5GT19QTEFZTElTVF9FTkQgPSA2LAorICAgIE1FRElBMl9JTkZPX0RBVEFfU09VUkNFX0VORCA9IDUsCisgICAgLy8gVGhlIHBsYXllciBqdXN0IGNvbXBsZXRlZCB0aGUgcGxheWJhY2sgb2YgYWxsIGRhdGEgc291cmNlcy4KKyAgICAvLyBCdXQgdGhpcyBpcyBub3QgdmlzaWJsZSBpbiBuYXRpdmUgY29kZS4gSnVzdCBrZWVwIHRoaXMgZW50cnkgZm9yIGNvbXBsZXRlbmVzcy4KKyAgICBNRURJQTJfSU5GT19EQVRBX1NPVVJDRV9MSVNUX0VORCA9IDYsCisgICAgLy8gVGhlIHBsYXllciBqdXN0IGNvbXBsZXRlZCBhbiBpdGVyYXRpb24gb2YgcGxheWJhY2sgbG9vcC4gVGhpcyBldmVudCBpcyBzZW50IG9ubHkgd2hlbgorICAgIC8vIGxvb3BpbmcgaXMgZW5hYmxlZC4KKyAgICBNRURJQTJfSU5GT19EQVRBX1NPVVJDRV9SRVBFQVQgPSA3LAogCiAgICAgLy8xeHgKICAgICAvLyBUaGUgcGxheWVyIGp1c3QgcHJlcGFyZWQgYSBkYXRhIHNvdXJjZS4KQEAgLTE1MCwxMSArMTUxLDExIEBACiAKIC8vIERvIG5vdCBjaGFuZ2UgdGhlc2UgdmFsdWVzIHdpdGhvdXQgdXBkYXRpbmcgdGhlaXIgY291bnRlcnBhcnRzIGluIE1lZGlhUGxheWVyMi5qYXZhCiBlbnVtIG1lZGlhcGxheWVyMl9zdGF0ZXMgewotICAgIE1FRElBUExBWUVSMl9TVEFURV9JRExFICAgICAgICAgPSAxLAotICAgIE1FRElBUExBWUVSMl9TVEFURV9QUkVQQVJFRCAgICAgPSAyLAotICAgIE1FRElBUExBWUVSMl9TVEFURV9QTEFZSU5HICAgICAgPSAzLAotICAgIE1FRElBUExBWUVSMl9TVEFURV9QQVVTRUQgICAgICAgPSA0LAotICAgIE1FRElBUExBWUVSMl9TVEFURV9FUlJPUiAgICAgICAgPSA1LAorICAgIE1FRElBUExBWUVSMl9TVEFURV9JRExFICAgICAgICAgPSAxMDAxLAorICAgIE1FRElBUExBWUVSMl9TVEFURV9QUkVQQVJFRCAgICAgPSAxMDAyLAorICAgIE1FRElBUExBWUVSMl9TVEFURV9QQVVTRUQgICAgICAgPSAxMDAzLAorICAgIE1FRElBUExBWUVSMl9TVEFURV9QTEFZSU5HICAgICAgPSAxMDA0LAorICAgIE1FRElBUExBWUVSMl9TVEFURV9FUlJPUiAgICAgICAgPSAxMDA1LAogfTsKIAogZW51bSBtZWRpYV9wbGF5ZXIyX2ludGVybmFsX3N0YXRlcyB7CkBAIC0xNjUsOCArMTY2LDcgQEAKICAgICBNRURJQV9QTEFZRVIyX1BSRVBBUkVEICAgICAgICAgICA9IDEgPDwgMywKICAgICBNRURJQV9QTEFZRVIyX1NUQVJURUQgICAgICAgICAgICA9IDEgPDwgNCwKICAgICBNRURJQV9QTEFZRVIyX1BBVVNFRCAgICAgICAgICAgICA9IDEgPDwgNSwKLSAgICBNRURJQV9QTEFZRVIyX1NUT1BQRUQgICAgICAgICAgICA9IDEgPDwgNiwKLSAgICBNRURJQV9QTEFZRVIyX1BMQVlCQUNLX0NPTVBMRVRFICA9IDEgPDwgNworICAgIE1FRElBX1BMQVlFUjJfUExBWUJBQ0tfQ09NUExFVEUgID0gMSA8PCA2CiB9OwogCiAvLyBLZWVwIEtFWV9QQVJBTUVURVJfKiBpbiBzeW5jIHdpdGggTWVkaWFQbGF5ZXIyLmphdmEuCmRpZmYgLS1naXQgYS9tZWRpYS9saWJtZWRpYXBsYXllcjIvaW5jbHVkZS9tZWRpYXBsYXllcjIvbWVkaWFwbGF5ZXIyLmggYi9tZWRpYS9saWJtZWRpYXBsYXllcjIvaW5jbHVkZS9tZWRpYXBsYXllcjIvbWVkaWFwbGF5ZXIyLmgKaW5kZXggZDU4NjE5Mi4uNGJjMWE0YSAxMDA2NDQKLS0tIGEvbWVkaWEvbGlibWVkaWFwbGF5ZXIyL2luY2x1ZGUvbWVkaWFwbGF5ZXIyL21lZGlhcGxheWVyMi5oCisrKyBiL21lZGlhL2xpYm1lZGlhcGxheWVyMi9pbmNsdWRlL21lZGlhcGxheWVyMi9tZWRpYXBsYXllcjIuaApAQCAtMjQsNyArMjQsOSBAQAogI2luY2x1ZGUgPG1lZGlhL21lZGlhcGxheWVyX2NvbW1vbi5oPgogI2luY2x1ZGUgPG1lZGlhcGxheWVyMi9NZWRpYVBsYXllcjJJbnRlcmZhY2UuaD4KICNpbmNsdWRlIDxtZWRpYXBsYXllcjIvTWVkaWFQbGF5ZXIyVHlwZXMuaD4KKyNpbmNsdWRlIDxtZWRpYXBsYXllcjIvSk9iamVjdEhvbGRlci5oPgogCisjaW5jbHVkZSA8am5pLmg+CiAjaW5jbHVkZSA8dXRpbHMvRXJyb3JzLmg+CiAjaW5jbHVkZSA8dXRpbHMvTXV0ZXguaD4KICNpbmNsdWRlIDx1dGlscy9SZWZCYXNlLmg+CkBAIC0zMiw2ICszNCw4IEBACiAjaW5jbHVkZSA8dXRpbHMvVmVjdG9yLmg+CiAjaW5jbHVkZSA8c3lzdGVtL2F1ZGlvLWJhc2UuaD4KIAorI2luY2x1ZGUgImpuaS5oIgorCiBuYW1lc3BhY2UgYW5kcm9pZCB7CiAKIHN0cnVjdCBBTmF0aXZlV2luZG93V3JhcHBlcjsKQEAgLTQyLDcgKzQ2LDggQEAKIGNsYXNzIE1lZGlhUGxheWVyMkxpc3RlbmVyOiB2aXJ0dWFsIHB1YmxpYyBSZWZCYXNlCiB7CiBwdWJsaWM6Ci0gICAgdmlydHVhbCB2b2lkIG5vdGlmeShpbnQ2NF90IHNyY0lkLCBpbnQgbXNnLCBpbnQgZXh0MSwgaW50IGV4dDIsIGNvbnN0IFBhcmNlbCAqb2JqKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIG5vdGlmeShpbnQ2NF90IHNyY0lkLCBpbnQgbXNnLCBpbnQgZXh0MSwgaW50IGV4dDIsCisgICAgICAgICAgICBjb25zdCBQbGF5ZXJNZXNzYWdlICpvYmogPSBOVUxMKSA9IDA7CiB9OwogCiBjbGFzcyBNZWRpYVBsYXllcjIgOiBwdWJsaWMgTWVkaWFQbGF5ZXIySW50ZXJmYWNlTGlzdGVuZXIKQEAgLTUwLDcgKzU1LDcgQEAKIHB1YmxpYzoKICAgICB+TWVkaWFQbGF5ZXIyKCk7CiAKLSAgICBzdGF0aWMgc3A8TWVkaWFQbGF5ZXIyPiBDcmVhdGUoKTsKKyAgICBzdGF0aWMgc3A8TWVkaWFQbGF5ZXIyPiBDcmVhdGUoaW50MzJfdCBzZXNzaW9uSWQpOwogICAgIHN0YXRpYyBzdGF0dXNfdCBEdW1wQWxsKGludCBmZCwgY29uc3QgVmVjdG9yPFN0cmluZzE2PiYgYXJncyk7CiAKICAgICAgICAgICAgIHZvaWQgICAgICAgICAgICBkaXNjb25uZWN0KCk7CkBAIC02NSwxMCArNzAsOSBAQAogICAgICAgICAgICAgc3RhdHVzX3QgICAgICAgIHNldEJ1ZmZlcmluZ1NldHRpbmdzKGNvbnN0IEJ1ZmZlcmluZ1NldHRpbmdzJiBidWZmZXJpbmcpOwogICAgICAgICAgICAgc3RhdHVzX3QgICAgICAgIHByZXBhcmVBc3luYygpOwogICAgICAgICAgICAgc3RhdHVzX3QgICAgICAgIHN0YXJ0KCk7Ci0gICAgICAgICAgICBzdGF0dXNfdCAgICAgICAgc3RvcCgpOwogICAgICAgICAgICAgc3RhdHVzX3QgICAgICAgIHBhdXNlKCk7CiAgICAgICAgICAgICBib29sICAgICAgICAgICAgaXNQbGF5aW5nKCk7Ci0gICAgICAgICAgICBtZWRpYXBsYXllcjJfc3RhdGVzIGdldE1lZGlhUGxheWVyMlN0YXRlKCk7CisgICAgICAgICAgICBtZWRpYXBsYXllcjJfc3RhdGVzIGdldFN0YXRlKCk7CiAgICAgICAgICAgICBzdGF0dXNfdCAgICAgICAgc2V0UGxheWJhY2tTZXR0aW5ncyhjb25zdCBBdWRpb1BsYXliYWNrUmF0ZSYgcmF0ZSk7CiAgICAgICAgICAgICBzdGF0dXNfdCAgICAgICAgZ2V0UGxheWJhY2tTZXR0aW5ncyhBdWRpb1BsYXliYWNrUmF0ZSogcmF0ZSAvKiBub25udWxsICovKTsKICAgICAgICAgICAgIHN0YXR1c190ICAgICAgICBzZXRTeW5jU2V0dGluZ3MoY29uc3QgQVZTeW5jU2V0dGluZ3MmIHN5bmMsIGZsb2F0IHZpZGVvRnBzSGludCk7CkBAIC04OCw1NCArOTIsNDQgQEAKICAgICAgICAgICAgIHN0YXR1c190ICAgICAgICBnZXRBdWRpb1N0cmVhbVR5cGUoYXVkaW9fc3RyZWFtX3R5cGVfdCAqdHlwZSk7CiAgICAgICAgICAgICBzdGF0dXNfdCAgICAgICAgc2V0TG9vcGluZyhpbnQgbG9vcCk7CiAgICAgICAgICAgICBib29sICAgICAgICAgICAgaXNMb29waW5nKCk7Ci0gICAgICAgICAgICBzdGF0dXNfdCAgICAgICAgc2V0Vm9sdW1lKGZsb2F0IGxlZnRWb2x1bWUsIGZsb2F0IHJpZ2h0Vm9sdW1lKTsKKyAgICAgICAgICAgIHN0YXR1c190ICAgICAgICBzZXRWb2x1bWUoZmxvYXQgdm9sdW1lKTsKICAgICAgICAgICAgIHZvaWQgICAgICAgICAgICBub3RpZnkoaW50NjRfdCBzcmNJZCwgaW50IG1zZywgaW50IGV4dDEsIGludCBleHQyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBQYXJjZWwgKm9iaiA9IE5VTEwpOwotICAgICAgICAgICAgc3RhdHVzX3QgICAgICAgIGludm9rZShjb25zdCBQYXJjZWwmIHJlcXVlc3QsIFBhcmNlbCAqcmVwbHkpOwotICAgICAgICAgICAgc3RhdHVzX3QgICAgICAgIHNldE1ldGFkYXRhRmlsdGVyKGNvbnN0IFBhcmNlbCYgZmlsdGVyKTsKLSAgICAgICAgICAgIHN0YXR1c190ICAgICAgICBnZXRNZXRhZGF0YShib29sIHVwZGF0ZV9vbmx5LCBib29sIGFwcGx5X2ZpbHRlciwgUGFyY2VsICptZXRhZGF0YSk7Ci0gICAgICAgICAgICBzdGF0dXNfdCAgICAgICAgc2V0QXVkaW9TZXNzaW9uSWQoYXVkaW9fc2Vzc2lvbl90IHNlc3Npb25JZCk7Ci0gICAgICAgICAgICBhdWRpb19zZXNzaW9uX3QgZ2V0QXVkaW9TZXNzaW9uSWQoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgUGxheWVyTWVzc2FnZSAqb2JqID0gTlVMTCk7CisgICAgICAgICAgICBzdGF0dXNfdCAgICAgICAgaW52b2tlKGNvbnN0IFBsYXllck1lc3NhZ2UgJnJlcXVlc3QsIFBsYXllck1lc3NhZ2UgKnJlcGx5KTsKKyAgICAgICAgICAgIHN0YXR1c190ICAgICAgICBzZXRBdWRpb1Nlc3Npb25JZChpbnQzMl90IHNlc3Npb25JZCk7CisgICAgICAgICAgICBpbnQzMl90ICAgICAgICAgZ2V0QXVkaW9TZXNzaW9uSWQoKTsKICAgICAgICAgICAgIHN0YXR1c190ICAgICAgICBzZXRBdXhFZmZlY3RTZW5kTGV2ZWwoZmxvYXQgbGV2ZWwpOwogICAgICAgICAgICAgc3RhdHVzX3QgICAgICAgIGF0dGFjaEF1eEVmZmVjdChpbnQgZWZmZWN0SWQpOwotICAgICAgICAgICAgc3RhdHVzX3QgICAgICAgIHNldFBhcmFtZXRlcihpbnQga2V5LCBjb25zdCBQYXJjZWwmIHJlcXVlc3QpOworICAgICAgICAgICAgc3RhdHVzX3QgICAgICAgIHNldEF1ZGlvQXR0cmlidXRlcyhjb25zdCBqb2JqZWN0IGF0dHJpYnV0ZXMpOworICAgICAgICAgICAgam9iamVjdCAgICAgICAgIGdldEF1ZGlvQXR0cmlidXRlcygpOwogICAgICAgICAgICAgc3RhdHVzX3QgICAgICAgIGdldFBhcmFtZXRlcihpbnQga2V5LCBQYXJjZWwqIHJlcGx5KTsKIAogICAgICAgICAgICAgLy8gTW9kdWxhciBEUk0KICAgICAgICAgICAgIHN0YXR1c190ICAgICAgICBwcmVwYXJlRHJtKGNvbnN0IHVpbnQ4X3QgdXVpZFsxNl0sIGNvbnN0IFZlY3Rvcjx1aW50OF90PiYgZHJtU2Vzc2lvbklkKTsKICAgICAgICAgICAgIHN0YXR1c190ICAgICAgICByZWxlYXNlRHJtKCk7CiAgICAgICAgICAgICAvLyBBdWRpb1JvdXRpbmcKLSAgICAgICAgICAgIHN0YXR1c190ICAgICAgICBzZXRPdXRwdXREZXZpY2UoYXVkaW9fcG9ydF9oYW5kbGVfdCBkZXZpY2VJZCk7Ci0gICAgICAgICAgICBhdWRpb19wb3J0X2hhbmRsZV90IGdldFJvdXRlZERldmljZUlkKCk7Ci0gICAgICAgICAgICBzdGF0dXNfdCAgICAgICAgZW5hYmxlQXVkaW9EZXZpY2VDYWxsYmFjayhib29sIGVuYWJsZWQpOworICAgICAgICAgICAgc3RhdHVzX3QgICAgICAgIHNldFByZWZlcnJlZERldmljZShqb2JqZWN0IGRldmljZSk7CisgICAgICAgICAgICBqb2JqZWN0ICAgICAgICAgZ2V0Um91dGVkRGV2aWNlKCk7CisgICAgICAgICAgICBzdGF0dXNfdCAgICAgICAgYWRkQXVkaW9EZXZpY2VDYWxsYmFjayhqb2JqZWN0IHJvdXRpbmdEZWxlZ2F0ZSk7CisgICAgICAgICAgICBzdGF0dXNfdCAgICAgICAgcmVtb3ZlQXVkaW9EZXZpY2VDYWxsYmFjayhqb2JqZWN0IGxpc3RlbmVyKTsKIAogICAgICAgICAgICAgc3RhdHVzX3QgICAgICAgIGR1bXAoaW50IGZkLCBjb25zdCBWZWN0b3I8U3RyaW5nMTY+JiBhcmdzKTsKIAogcHJpdmF0ZToKLSAgICBNZWRpYVBsYXllcjIoKTsKKyAgICBNZWRpYVBsYXllcjIoaW50MzJfdCBzZXNzaW9uSWQpOwogICAgIGJvb2wgaW5pdCgpOwogCi0gICAgLy8gQHBhcmFtIHR5cGUgT2YgdGhlIG1ldGFkYXRhIHRvIGJlIHRlc3RlZC4KLSAgICAvLyBAcmV0dXJuIHRydWUgaWYgdGhlIG1ldGFkYXRhIHNob3VsZCBiZSBkcm9wcGVkIGFjY29yZGluZyB0bwotICAgIC8vICAgICAgICAgICAgICB0aGUgZmlsdGVycy4KLSAgICBib29sIHNob3VsZERyb3BNZXRhZGF0YShtZWRpYTo6TWV0YWRhdGE6OlR5cGUgdHlwZSkgY29uc3Q7Ci0KLSAgICAvLyBBZGQgYSBuZXcgZWxlbWVudCB0byB0aGUgc2V0IG9mIG1ldGFkYXRhIHVwZGF0ZWQuIE5vb3AgaWYKLSAgICAvLyB0aGUgZWxlbWVudCBleGlzdHMgYWxyZWFkeS4KLSAgICAvLyBAcGFyYW0gdHlwZSBPZiB0aGUgbWV0YWRhdGEgdG8gYmUgcmVjb3JkZWQuCi0gICAgdm9pZCBhZGROZXdNZXRhZGF0YVVwZGF0ZShtZWRpYTo6TWV0YWRhdGE6OlR5cGUgdHlwZSk7Ci0KICAgICAvLyBEaXNjb25uZWN0IGZyb20gdGhlIGN1cnJlbnRseSBjb25uZWN0ZWQgQU5hdGl2ZVdpbmRvdy4KICAgICB2b2lkIGRpc2Nvbm5lY3ROYXRpdmVXaW5kb3dfbCgpOwogCi0gICAgc3RhdHVzX3Qgc2V0QXVkaW9BdHRyaWJ1dGVzX2woY29uc3QgUGFyY2VsICZyZXF1ZXN0KTsKKyAgICBzdGF0dXNfdCBzZXRBdWRpb0F0dHJpYnV0ZXNfbChjb25zdCBqb2JqZWN0IGF0dHJpYnV0ZXMpOwogCiAgICAgdm9pZCBjbGVhcl9sKCk7CiAgICAgc3RhdHVzX3Qgc2Vla1RvX2woaW50NjRfdCBtc2VjLCBNZWRpYVBsYXllcjJTZWVrTW9kZSBtb2RlKTsKICAgICBzdGF0dXNfdCBwcmVwYXJlQXN5bmNfbCgpOwogICAgIHN0YXR1c190IGdldER1cmF0aW9uX2woaW50NjRfdCAqbXNlYyk7CiAgICAgc3RhdHVzX3QgcmVzZXRfbCgpOwotICAgIHN0YXR1c190IGNoZWNrU3RhdGVGb3JLZXlTZXRfbChpbnQga2V5KTsKKyAgICBzdGF0dXNfdCBjaGVja1N0YXRlX2woKTsKIAogICAgIHBpZF90ICAgICAgICAgICAgICAgICAgICAgICBtUGlkOwogICAgIHVpZF90ICAgICAgICAgICAgICAgICAgICAgICBtVWlkOwpAQCAtMTUyLDI3ICsxNDYsMTQgQEAKICAgICBpbnQ2NF90ICAgICAgICAgICAgICAgICAgICAgbVNlZWtQb3NpdGlvbjsKICAgICBNZWRpYVBsYXllcjJTZWVrTW9kZSAgICAgICAgbVNlZWtNb2RlOwogICAgIGF1ZGlvX3N0cmVhbV90eXBlX3QgICAgICAgICBtU3RyZWFtVHlwZTsKLSAgICBQYXJjZWwqICAgICAgICAgICAgICAgICAgICAgbUF1ZGlvQXR0cmlidXRlc1BhcmNlbDsKICAgICBib29sICAgICAgICAgICAgICAgICAgICAgICAgbUxvb3A7Ci0gICAgZmxvYXQgICAgICAgICAgICAgICAgICAgICAgIG1MZWZ0Vm9sdW1lOwotICAgIGZsb2F0ICAgICAgICAgICAgICAgICAgICAgICBtUmlnaHRWb2x1bWU7CisgICAgZmxvYXQgICAgICAgICAgICAgICAgICAgICAgIG1Wb2x1bWU7CiAgICAgaW50ICAgICAgICAgICAgICAgICAgICAgICAgIG1WaWRlb1dpZHRoOwogICAgIGludCAgICAgICAgICAgICAgICAgICAgICAgICBtVmlkZW9IZWlnaHQ7Ci0gICAgYXVkaW9fc2Vzc2lvbl90ICAgICAgICAgICAgIG1BdWRpb1Nlc3Npb25JZDsKLSAgICBhdWRpb19hdHRyaWJ1dGVzX3QgKiAgICAgICAgbUF1ZGlvQXR0cmlidXRlczsKKyAgICBpbnQzMl90ICAgICAgICAgICAgICAgICAgICAgbUF1ZGlvU2Vzc2lvbklkOworICAgIHNwPEpPYmplY3RIb2xkZXI+ICAgICAgICAgICBtQXVkaW9BdHRyaWJ1dGVzOwogICAgIGZsb2F0ICAgICAgICAgICAgICAgICAgICAgICBtU2VuZExldmVsOwotCiAgICAgc3A8QU5hdGl2ZVdpbmRvd1dyYXBwZXI+ICAgIG1Db25uZWN0ZWRXaW5kb3c7Ci0KLSAgICAvLyBNZXRhZGF0YSBmaWx0ZXJzLgotICAgIG1lZGlhOjpNZXRhZGF0YTo6RmlsdGVyIG1NZXRhZGF0YUFsbG93OyAgLy8gcHJvdGVjdGVkIGJ5IG1Mb2NrCi0gICAgbWVkaWE6Ok1ldGFkYXRhOjpGaWx0ZXIgbU1ldGFkYXRhRHJvcDsgIC8vIHByb3RlY3RlZCBieSBtTG9jawotCi0gICAgLy8gTWV0YWRhdGEgdXBkYXRlZC4gRm9yIGVhY2ggTUVESUFfSU5GT19NRVRBREFUQV9VUERBVEUKLSAgICAvLyBub3RpZmljYXRpb24gd2UgdHJ5IHRvIHVwZGF0ZSBtTWV0YWRhdGFVcGRhdGVkIHdoaWNoIGlzIGEKLSAgICAvLyBzZXQ6IG5vIGR1cGxpY2F0ZS4KLSAgICAvLyBnZXRNZXRhZGF0YSBjbGVhcnMgdGhpcyBzZXQuCi0gICAgbWVkaWE6Ok1ldGFkYXRhOjpGaWx0ZXIgbU1ldGFkYXRhVXBkYXRlZDsgIC8vIHByb3RlY3RlZCBieSBtTG9jawogfTsKIAogfTsgLy8gbmFtZXNwYWNlIGFuZHJvaWQKZGlmZiAtLWdpdCBhL21lZGlhL2xpYm1lZGlhcGxheWVyMi9tZWRpYXBsYXllcjIuY3BwIGIvbWVkaWEvbGlibWVkaWFwbGF5ZXIyL21lZGlhcGxheWVyMi5jcHAKaW5kZXggZTU1NjdkYy4uOTIxYTViNyAxMDA2NDQKLS0tIGEvbWVkaWEvbGlibWVkaWFwbGF5ZXIyL21lZGlhcGxheWVyMi5jcHAKKysrIGIvbWVkaWEvbGlibWVkaWFwbGF5ZXIyL21lZGlhcGxheWVyMi5jcHAKQEAgLTUzLDE2OSArNTMsNiBAQAogY29uc3QgaW50IGtEdW1wTG9ja1JldHJpZXMgPSA1MDsKIGNvbnN0IGludCBrRHVtcExvY2tTbGVlcFVzID0gMjAwMDA7CiAKLS8vIE1heCBudW1iZXIgb2YgZW50cmllcyBpbiB0aGUgZmlsdGVyLgotY29uc3QgaW50IGtNYXhGaWx0ZXJTaXplID0gNjQ7ICAvLyBJIHB1bGxlZCB0aGF0IG91dCBvZiB0aGluIGFpci4KLQotLy8gRklYTUU6IE1vdmUgYWxsIHRoZSBtZXRhZGF0YSByZWxhdGVkIGZ1bmN0aW9uIGluIHRoZSBNZXRhZGF0YS5jcHAKLQotLy8gVW5tYXJzaGFsbCBhIGZpbHRlciBmcm9tIGEgUGFyY2VsLgotLy8gRmlsdGVyIGZvcm1hdCBpbiBhIHBhcmNlbDoKLS8vCi0vLyAgMCAxIDIgMyA0IDUgNiA3IDggOSAwIDEgMiAzIDQgNSA2IDcgOCA5IDAgMSAyIDMgNCA1IDYgNyA4IDkgMCAxCi0vLyArLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKwotLy8gfCAgICAgICAgICAgICAgICAgICAgICAgbnVtYmVyIG9mIGVudHJpZXMgKG4pICAgICAgICAgICAgICAgICAgIHwKLS8vICstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rCi0vLyB8ICAgICAgICAgICAgICAgICAgICAgICBtZXRhZGF0YSB0eXBlIDEgICAgICAgICAgICAgICAgICAgICAgICAgfAotLy8gKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSsKLS8vIHwgICAgICAgICAgICAgICAgICAgICAgIG1ldGFkYXRhIHR5cGUgMiAgICAgICAgICAgICAgICAgICAgICAgICB8Ci0vLyArLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKwotLy8gIC4uLi4KLS8vICstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rCi0vLyB8ICAgICAgICAgICAgICAgICAgICAgICBtZXRhZGF0YSB0eXBlIG4gICAgICAgICAgICAgICAgICAgICAgICAgfAotLy8gKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSsKLS8vCi0vLyBAcGFyYW0gcCBQYXJjZWwgdGhhdCBzaG91bGQgc3RhcnQgd2l0aCBhIGZpbHRlci4KLS8vIEBwYXJhbVtvdXRdIGZpbHRlciBPbiBleGl0IGNvbnRhaW5zIHRoZSBsaXN0IG9mIG1ldGFkYXRhIHR5cGUgdG8gYmUKLS8vICAgICAgICAgICAgICAgICAgICBmaWx0ZXJlZC4KLS8vIEBwYXJhbVtvdXRdIHN0YXR1cyBPbiBleGl0IGNvbnRhaW5zIHRoZSBzdGF0dXMgY29kZSB0byBiZSByZXR1cm5lZC4KLS8vIEByZXR1cm4gdHJ1ZSBpZiB0aGUgcGFyY2VsIHN0YXJ0cyB3aXRoIGEgdmFsaWQgZmlsdGVyLgotYm9vbCB1bm1hcnNoYWxsRmlsdGVyKGNvbnN0IFBhcmNlbCYgcCwKLSAgICAgICAgICAgICAgICAgICAgICBtZWRpYTo6TWV0YWRhdGE6OkZpbHRlciAqZmlsdGVyLAotICAgICAgICAgICAgICAgICAgICAgIHN0YXR1c190ICpzdGF0dXMpIHsKLSAgICBpbnQzMl90IHZhbDsKLSAgICBpZiAocC5yZWFkSW50MzIoJnZhbCkgIT0gT0spIHsKLSAgICAgICAgQUxPR0UoIkZhaWxlZCB0byByZWFkIGZpbHRlcidzIGxlbmd0aCIpOwotICAgICAgICAqc3RhdHVzID0gTk9UX0VOT1VHSF9EQVRBOwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgaWYgKHZhbCA+IGtNYXhGaWx0ZXJTaXplIHx8IHZhbCA8IDApIHsKLSAgICAgICAgQUxPR0UoIkludmFsaWQgZmlsdGVyIGxlbiAlZCIsIHZhbCk7Ci0gICAgICAgICpzdGF0dXMgPSBCQURfVkFMVUU7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICBjb25zdCBzaXplX3QgbnVtID0gdmFsOwotCi0gICAgZmlsdGVyLT5jbGVhcigpOwotICAgIGZpbHRlci0+c2V0Q2FwYWNpdHkobnVtKTsKLQotICAgIHNpemVfdCBzaXplID0gbnVtICogc2l6ZW9mKG1lZGlhOjpNZXRhZGF0YTo6VHlwZSk7Ci0KLQotICAgIGlmIChwLmRhdGFBdmFpbCgpIDwgc2l6ZSkgewotICAgICAgICBBTE9HRSgiRmlsdGVyIHRvbyBzaG9ydCBleHBlY3RlZCAlenUgYnV0IGdvdCAlenUiLCBzaXplLCBwLmRhdGFBdmFpbCgpKTsKLSAgICAgICAgKnN0YXR1cyA9IE5PVF9FTk9VR0hfREFUQTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIGNvbnN0IG1lZGlhOjpNZXRhZGF0YTo6VHlwZSAqZGF0YSA9Ci0gICAgICAgIHN0YXRpY19jYXN0PGNvbnN0IG1lZGlhOjpNZXRhZGF0YTo6VHlwZSo+KHAucmVhZElucGxhY2Uoc2l6ZSkpOwotCi0gICAgaWYgKE5VTEwgPT0gZGF0YSkgewotICAgICAgICBBTE9HRSgiRmlsdGVyIGhhZCBubyBkYXRhIik7Ci0gICAgICAgICpzdGF0dXMgPSBCQURfVkFMVUU7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICAvLyBUT0RPOiBUaGUgc3RsIGltcGwgb2YgdmVjdG9yIHdvdWxkIGJlIG1vcmUgZWZmaWNpZW50IGhlcmUKLSAgICAvLyBiZWNhdXNlIGl0IGRlZ2VuZXJhdGVzIGludG8gYSBtZW1jcHkgb24gcG9kIHR5cGVzLiBUcnkgdG8KLSAgICAvLyByZXBsYWNlIGxhdGVyIG9yIHVzZSBzdGw6OnNldC4KLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG51bTsgKytpKSB7Ci0gICAgICAgIGZpbHRlci0+YWRkKCpkYXRhKTsKLSAgICAgICAgKytkYXRhOwotICAgIH0KLSAgICAqc3RhdHVzID0gT0s7Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLS8vIEBwYXJhbSBmaWx0ZXIgT2YgbWV0YWRhdGEgdHlwZS4KLS8vIEBwYXJhbSB2YWwgVG8gYmUgc2VhcmNoZWQuCi0vLyBAcmV0dXJuIHRydWUgaWYgYSBtYXRjaCB3YXMgZm91bmQuCi1ib29sIGZpbmRNZXRhZGF0YShjb25zdCBtZWRpYTo6TWV0YWRhdGE6OkZpbHRlciYgZmlsdGVyLCBjb25zdCBpbnQzMl90IHZhbCkgewotICAgIC8vIERlYWwgd2l0aCBlbXB0eSBhbmQgQU5ZIHJpZ2h0IGF3YXkKLSAgICBpZiAoZmlsdGVyLmlzRW1wdHkoKSkgewotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotICAgIGlmIChmaWx0ZXJbMF0gPT0gbWVkaWE6Ok1ldGFkYXRhOjprQW55KSB7Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLQotICAgIHJldHVybiBmaWx0ZXIuaW5kZXhPZih2YWwpID49IDA7Ci19Ci0KLS8vIG1hcnNoYWxsaW5nIHRhZyBpbmRpY2F0aW5nIGZsYXR0ZW5lZCB1dGYxNiB0YWdzCi0vLyBrZWVwIGluIHN5bmMgd2l0aCBmcmFtZXdvcmtzL2Jhc2UvbWVkaWEvamF2YS9hbmRyb2lkL21lZGlhL0F1ZGlvQXR0cmlidXRlcy5qYXZhCi1jb25zdCBpbnQzMl90IGtBdWRpb0F0dHJpYnV0ZXNNYXJzaGFsbFRhZ0ZsYXR0ZW5UYWdzID0gMTsKLQotLy8gQXVkaW8gYXR0cmlidXRlcyBmb3JtYXQgaW4gYSBwYXJjZWw6Ci0vLwotLy8gIDAgMSAyIDMgNCA1IDYgNyA4IDkgMCAxIDIgMyA0IDUgNiA3IDggOSAwIDEgMiAzIDQgNSA2IDcgOCA5IDAgMQotLy8gKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSsKLS8vIHwgICAgICAgICAgICAgICAgICAgICAgIHVzYWdlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Ci0vLyArLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKwotLy8gfCAgICAgICAgICAgICAgICAgICAgICAgY29udGVudF90eXBlICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKLS8vICstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rCi0vLyB8ICAgICAgICAgICAgICAgICAgICAgICBzb3VyY2UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAotLy8gKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSsKLS8vIHwgICAgICAgICAgICAgICAgICAgICAgIGZsYWdzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Ci0vLyArLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKwotLy8gfCAgICAgICAgICAgICAgICAgICAgICAga0F1ZGlvQXR0cmlidXRlc01hcnNoYWxsVGFnRmxhdHRlblRhZ3MgIHwgLy8gaWdub3JlIHRhZ3MgaWYgbm90IGZvdW5kCi0vLyArLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKwotLy8gfCAgICAgICAgICAgICAgICAgICAgICAgZmxhdHRlbmVkIHRhZ3MgaW4gVVRGMTYgICAgICAgICAgICAgICAgIHwKLS8vIHwgICAgICAgICAgICAgICAgICAgICAgICAgLi4uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Ci0vLyArLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKwotLy8KLS8vIEBwYXJhbSBwIFBhcmNlbCB0aGF0IGNvbnRhaW5zIGF1ZGlvIGF0dHJpYnV0ZXMuCi0vLyBAcGFyYW1bb3V0XSBhdHRyaWJ1dGVzIE9uIGV4aXQgcG9pbnRzIHRvIGFuIGluaXRpYWxpemVkIGF1ZGlvX2F0dHJpYnV0ZXNfdCBzdHJ1Y3R1cmUKLS8vIEBwYXJhbVtvdXRdIHN0YXR1cyBPbiBleGl0IGNvbnRhaW5zIHRoZSBzdGF0dXMgY29kZSB0byBiZSByZXR1cm5lZC4KLXZvaWQgdW5tYXJzaGFsbEF1ZGlvQXR0cmlidXRlcyhjb25zdCBQYXJjZWwmIHBhcmNlbCwgYXVkaW9fYXR0cmlidXRlc190ICphdHRyaWJ1dGVzKSB7Ci0gICAgYXR0cmlidXRlcy0+dXNhZ2UgPSAoYXVkaW9fdXNhZ2VfdCkgcGFyY2VsLnJlYWRJbnQzMigpOwotICAgIGF0dHJpYnV0ZXMtPmNvbnRlbnRfdHlwZSA9IChhdWRpb19jb250ZW50X3R5cGVfdCkgcGFyY2VsLnJlYWRJbnQzMigpOwotICAgIGF0dHJpYnV0ZXMtPnNvdXJjZSA9IChhdWRpb19zb3VyY2VfdCkgcGFyY2VsLnJlYWRJbnQzMigpOwotICAgIGF0dHJpYnV0ZXMtPmZsYWdzID0gKGF1ZGlvX2ZsYWdzX21hc2tfdCkgcGFyY2VsLnJlYWRJbnQzMigpOwotICAgIGNvbnN0IGJvb2wgaGFzRmxhdHRlbmVkVGFnID0gKHBhcmNlbC5yZWFkSW50MzIoKSA9PSBrQXVkaW9BdHRyaWJ1dGVzTWFyc2hhbGxUYWdGbGF0dGVuVGFncyk7Ci0gICAgaWYgKGhhc0ZsYXR0ZW5lZFRhZykgewotICAgICAgICAvLyB0aGUgdGFncyBhcmUgVVRGMTYsIGNvbnZlcnQgdG8gVVRGOAotICAgICAgICBTdHJpbmcxNiB0YWdzID0gcGFyY2VsLnJlYWRTdHJpbmcxNigpOwotICAgICAgICBzc2l6ZV90IHJlYWxUYWdTaXplID0gdXRmMTZfdG9fdXRmOF9sZW5ndGgodGFncy5zdHJpbmcoKSwgdGFncy5zaXplKCkpOwotICAgICAgICBpZiAocmVhbFRhZ1NpemUgPD0gMCkgewotICAgICAgICAgICAgc3RyY3B5KGF0dHJpYnV0ZXMtPnRhZ3MsICIiKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIC8vIGNvcHkgdGhlIGZsYXR0ZW5lZCBzdHJpbmcgaW50byB0aGUgYXR0cmlidXRlcyBhcyB0aGUgZGVzdGluYXRpb24gZm9yIHRoZSBjb252ZXJzaW9uOgotICAgICAgICAgICAgLy8gY29weWluZyBhcnJheSBzaXplIC0xLCBhcnJheSBmb3IgdGFncyB3YXMgY2FsbG9jJ2QsIG5vIG5lZWQgdG8gTlVMTC10ZXJtaW5hdGUgaXQKLSAgICAgICAgICAgIHNpemVfdCB0YWdTaXplID0gcmVhbFRhZ1NpemUgPiBBVURJT19BVFRSSUJVVEVTX1RBR1NfTUFYX1NJWkUgLSAxID8KLSAgICAgICAgICAgICAgICAgICAgQVVESU9fQVRUUklCVVRFU19UQUdTX01BWF9TSVpFIC0gMSA6IHJlYWxUYWdTaXplOwotICAgICAgICAgICAgdXRmMTZfdG9fdXRmOCh0YWdzLnN0cmluZygpLCB0YWdTaXplLCBhdHRyaWJ1dGVzLT50YWdzLAotICAgICAgICAgICAgICAgICAgICBzaXplb2YoYXR0cmlidXRlcy0+dGFncykgLyBzaXplb2YoYXR0cmlidXRlcy0+dGFnc1swXSkpOwotICAgICAgICB9Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgQUxPR0UoInVubWFyc2hhbGxBdWRpb0F0dHJpYnV0ZXMoKSByZWNlaXZlZCB1bmZsYXR0ZW5lZCB0YWdzLCBpZ25vcmluZyB0YWcgdmFsdWVzIik7Ci0gICAgICAgIHN0cmNweShhdHRyaWJ1dGVzLT50YWdzLCAiIik7Ci0gICAgfQotfQotCi1jbGFzcyBBdWRpb0RldmljZVVwZGF0ZWROb3RpZmllcjogcHVibGljIEF1ZGlvU3lzdGVtOjpBdWRpb0RldmljZUNhbGxiYWNrIHsKLXB1YmxpYzoKLSAgICBBdWRpb0RldmljZVVwZGF0ZWROb3RpZmllcihjb25zdCBzcDxNZWRpYVBsYXllcjJJbnRlcmZhY2U+JiBsaXN0ZW5lcikKLSAgICAgICAgOiBtTGlzdGVuZXIobGlzdGVuZXIpIHsgfQotCi0gICAgfkF1ZGlvRGV2aWNlVXBkYXRlZE5vdGlmaWVyKCkgeyB9Ci0KLSAgICB2aXJ0dWFsIHZvaWQgb25BdWRpb0RldmljZVVwZGF0ZShhdWRpb19pb19oYW5kbGVfdCBhdWRpb0lvLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF1ZGlvX3BvcnRfaGFuZGxlX3QgZGV2aWNlSWQpIG92ZXJyaWRlIHsKLSAgICAgICAgc3A8TWVkaWFQbGF5ZXIySW50ZXJmYWNlPiBsaXN0ZW5lciA9IG1MaXN0ZW5lci5wcm9tb3RlKCk7Ci0gICAgICAgIGlmIChsaXN0ZW5lciAhPSBOVUxMKSB7Ci0gICAgICAgICAgICBsaXN0ZW5lci0+c2VuZEV2ZW50KDAsIE1FRElBMl9BVURJT19ST1VUSU5HX0NIQU5HRUQsIGF1ZGlvSW8sIGRldmljZUlkKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIEFMT0dXKCJsaXN0ZW5lciBmb3IgcHJvY2VzcyAlZCBkZWF0aCBpcyBnb25lIiwgTUVESUEyX0FVRElPX1JPVVRJTkdfQ0hBTkdFRCk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLXByaXZhdGU6Ci0gICAgd3A8TWVkaWFQbGF5ZXIySW50ZXJmYWNlPiBtTGlzdGVuZXI7Ci19OwotCiBjbGFzcyBwcm94eUxpc3RlbmVyIDogcHVibGljIE1lZGlhUGxheWVyMkludGVyZmFjZUxpc3RlbmVyIHsKIHB1YmxpYzoKICAgICBwcm94eUxpc3RlbmVyKGNvbnN0IHdwPE1lZGlhUGxheWVyMj4gJnBsYXllcikKQEAgLTIyMyw3ICs2MCw4IEBACiAKICAgICB+cHJveHlMaXN0ZW5lcigpIHsgfTsKIAotICAgIHZpcnR1YWwgdm9pZCBub3RpZnkoaW50NjRfdCBzcmNJZCwgaW50IG1zZywgaW50IGV4dDEsIGludCBleHQyLCBjb25zdCBQYXJjZWwgKm9iaikgb3ZlcnJpZGUgeworICAgIHZpcnR1YWwgdm9pZCBub3RpZnkoaW50NjRfdCBzcmNJZCwgaW50IG1zZywgaW50IGV4dDEsIGludCBleHQyLAorICAgICAgICAgICAgY29uc3QgUGxheWVyTWVzc2FnZSAqb2JqKSBvdmVycmlkZSB7CiAgICAgICAgIHNwPE1lZGlhUGxheWVyMj4gcGxheWVyID0gbVBsYXllci5wcm9tb3RlKCk7CiAgICAgICAgIGlmIChwbGF5ZXIgIT0gTlVMTCkgewogICAgICAgICAgICAgcGxheWVyLT5ub3RpZnkoc3JjSWQsIG1zZywgZXh0MSwgZXh0Miwgb2JqKTsKQEAgLTM4MCw4ICsyMTgsOCBAQAogfSAgLy8gYW5vbnltb3VzIG5hbWVzcGFjZQogCiAvL3N0YXRpYwotc3A8TWVkaWFQbGF5ZXIyPiBNZWRpYVBsYXllcjI6OkNyZWF0ZSgpIHsKLSAgICBzcDxNZWRpYVBsYXllcjI+IHBsYXllciA9IG5ldyBNZWRpYVBsYXllcjIoKTsKK3NwPE1lZGlhUGxheWVyMj4gTWVkaWFQbGF5ZXIyOjpDcmVhdGUoaW50MzJfdCBzZXNzaW9uSWQpIHsKKyAgICBzcDxNZWRpYVBsYXllcjI+IHBsYXllciA9IG5ldyBNZWRpYVBsYXllcjIoc2Vzc2lvbklkKTsKIAogICAgIGlmICghcGxheWVyLT5pbml0KCkpIHsKICAgICAgICAgcmV0dXJuIE5VTEw7CkBAIC0zOTgsNDQgKzIzNiwzNCBAQAogICAgIHJldHVybiBkdW1wUGxheWVycyhmZCwgYXJncyk7CiB9CiAKLU1lZGlhUGxheWVyMjo6TWVkaWFQbGF5ZXIyKCkgeworTWVkaWFQbGF5ZXIyOjpNZWRpYVBsYXllcjIoaW50MzJfdCBzZXNzaW9uSWQpIHsKICAgICBBTE9HVigiY29uc3RydWN0b3IiKTsKICAgICBtU3JjSWQgPSAwOwogICAgIG1Mb2NrVGhyZWFkSWQgPSAwOwogICAgIG1MaXN0ZW5lciA9IE5VTEw7CiAgICAgbVN0cmVhbVR5cGUgPSBBVURJT19TVFJFQU1fTVVTSUM7Ci0gICAgbUF1ZGlvQXR0cmlidXRlc1BhcmNlbCA9IE5VTEw7CisgICAgbUF1ZGlvQXR0cmlidXRlcyA9IE5VTEw7CiAgICAgbUN1cnJlbnRQb3NpdGlvbiA9IC0xOwogICAgIG1DdXJyZW50U2Vla01vZGUgPSBNZWRpYVBsYXllcjJTZWVrTW9kZTo6U0VFS19QUkVWSU9VU19TWU5DOwogICAgIG1TZWVrUG9zaXRpb24gPSAtMTsKICAgICBtU2Vla01vZGUgPSBNZWRpYVBsYXllcjJTZWVrTW9kZTo6U0VFS19QUkVWSU9VU19TWU5DOwogICAgIG1DdXJyZW50U3RhdGUgPSBNRURJQV9QTEFZRVIyX0lETEU7CiAgICAgbUxvb3AgPSBmYWxzZTsKLSAgICBtTGVmdFZvbHVtZSA9IG1SaWdodFZvbHVtZSA9IDEuMDsKKyAgICBtVm9sdW1lID0gMS4wOwogICAgIG1WaWRlb1dpZHRoID0gbVZpZGVvSGVpZ2h0ID0gMDsKLSAgICBtQXVkaW9TZXNzaW9uSWQgPSAoYXVkaW9fc2Vzc2lvbl90KSBBdWRpb1N5c3RlbTo6bmV3QXVkaW9VbmlxdWVJZChBVURJT19VTklRVUVfSURfVVNFX1NFU1NJT04pOwotICAgIEF1ZGlvU3lzdGVtOjphY3F1aXJlQXVkaW9TZXNzaW9uSWQobUF1ZGlvU2Vzc2lvbklkLCAtMSk7CiAgICAgbVNlbmRMZXZlbCA9IDA7CiAKICAgICAvLyBUT0RPOiBnZXQgcGlkIGFuZCB1aWQgZnJvbSBKQVZBCiAgICAgbVBpZCA9IElQQ1RocmVhZFN0YXRlOjpzZWxmKCktPmdldENhbGxpbmdQaWQoKTsKICAgICBtVWlkID0gSVBDVGhyZWFkU3RhdGU6OnNlbGYoKS0+Z2V0Q2FsbGluZ1VpZCgpOwogCi0gICAgbUF1ZGlvQXR0cmlidXRlcyA9IE5VTEw7CisgICAgbUF1ZGlvT3V0cHV0ID0gbmV3IE1lZGlhUGxheWVyMkF1ZGlvT3V0cHV0KHNlc3Npb25JZCwgbVVpZCwgbVBpZCwgTlVMTCAvKmF0dHJpYnV0ZXMqLyk7CiB9CiAKIE1lZGlhUGxheWVyMjo6fk1lZGlhUGxheWVyMigpIHsKICAgICBBTE9HVigiZGVzdHJ1Y3RvciIpOwotICAgIGlmIChtQXVkaW9BdHRyaWJ1dGVzUGFyY2VsICE9IE5VTEwpIHsKLSAgICAgICAgZGVsZXRlIG1BdWRpb0F0dHJpYnV0ZXNQYXJjZWw7Ci0gICAgICAgIG1BdWRpb0F0dHJpYnV0ZXNQYXJjZWwgPSBOVUxMOwotICAgIH0KLSAgICBBdWRpb1N5c3RlbTo6cmVsZWFzZUF1ZGlvU2Vzc2lvbklkKG1BdWRpb1Nlc3Npb25JZCwgLTEpOwogICAgIGRpc2Nvbm5lY3QoKTsKICAgICByZW1vdmVQbGF5ZXIodGhpcyk7Ci0gICAgaWYgKG1BdWRpb0F0dHJpYnV0ZXMgIT0gTlVMTCkgewotICAgICAgICBmcmVlKG1BdWRpb0F0dHJpYnV0ZXMpOwotICAgIH0KIH0KIAogYm9vbCBNZWRpYVBsYXllcjI6OmluaXQoKSB7CkBAIC00OTMsNiArMzIxLDE1IEBACiAgICAgaWYgKGRzZCA9PSBOVUxMKSB7CiAgICAgICAgIHJldHVybiBCQURfVkFMVUU7CiAgICAgfQorICAgIC8vIE1pY3Jvc2Vjb25kIGlzIHVzZWQgaW4gTnVQbGF5ZXIyLgorICAgIGlmIChkc2QtPm1TdGFydFBvc2l0aW9uTXMgPiBEYXRhU291cmNlRGVzYzo6a01heFRpbWVNcykgeworICAgICAgICBkc2QtPm1TdGFydFBvc2l0aW9uTXMgPSBEYXRhU291cmNlRGVzYzo6a01heFRpbWVNczsKKyAgICAgICAgQUxPR1coInNldERhdGFTb3VyY2UsIHN0YXJ0IHBvaXN0aW9uIGNsYW1wZWQgdG8gJWxsZCBtcyIsIChsb25nIGxvbmcpZHNkLT5tU3RhcnRQb3NpdGlvbk1zKTsKKyAgICB9CisgICAgaWYgKGRzZC0+bUVuZFBvc2l0aW9uTXMgPiBEYXRhU291cmNlRGVzYzo6a01heFRpbWVNcykgeworICAgICAgICBkc2QtPm1FbmRQb3NpdGlvbk1zID0gRGF0YVNvdXJjZURlc2M6OmtNYXhUaW1lTXM7CisgICAgICAgIEFMT0dXKCJzZXREYXRhU291cmNlLCBlbmQgcG9pc3Rpb24gY2xhbXBlZCB0byAlbGxkIG1zIiwgKGxvbmcgbG9uZylkc2QtPm1TdGFydFBvc2l0aW9uTXMpOworICAgIH0KICAgICBBTE9HVigic2V0RGF0YVNvdXJjZSB0eXBlKCVkKSwgc3JjSWQoJWxsZCkiLCBkc2QtPm1UeXBlLCAobG9uZyBsb25nKWRzZC0+bUlkKTsKIAogICAgIHNwPE1lZGlhUGxheWVyMkludGVyZmFjZT4gb2xkUGxheWVyOwpAQCAtNTE1LDggKzM1Miw2IEBACiAgICAgICAgIGNsZWFyX2woKTsKIAogICAgICAgICBwbGF5ZXItPnNldExpc3RlbmVyKG5ldyBwcm94eUxpc3RlbmVyKHRoaXMpKTsKLSAgICAgICAgbUF1ZGlvT3V0cHV0ID0gbmV3IE1lZGlhUGxheWVyMkF1ZGlvT3V0cHV0KG1BdWRpb1Nlc3Npb25JZCwgbVVpZCwKLSAgICAgICAgICAgICAgICBtUGlkLCBtQXVkaW9BdHRyaWJ1dGVzLCBuZXcgQXVkaW9EZXZpY2VVcGRhdGVkTm90aWZpZXIocGxheWVyKSk7CiAgICAgICAgIHBsYXllci0+c2V0QXVkaW9TaW5rKG1BdWRpb091dHB1dCk7CiAKICAgICAgICAgZXJyID0gcGxheWVyLT5zZXREYXRhU291cmNlKGRzZCk7CkBAIC01NjUsNzkgKzQwMCwxOCBAQAogICAgIHJldHVybiBtUGxheWVyLT5wbGF5TmV4dERhdGFTb3VyY2Uoc3JjSWQpOwogfQogCi1zdGF0dXNfdCBNZWRpYVBsYXllcjI6Omludm9rZShjb25zdCBQYXJjZWwmIHJlcXVlc3QsIFBhcmNlbCAqcmVwbHkpIHsKK3N0YXR1c190IE1lZGlhUGxheWVyMjo6aW52b2tlKGNvbnN0IFBsYXllck1lc3NhZ2UgJnJlcXVlc3QsIFBsYXllck1lc3NhZ2UgKnJlcGx5KSB7CiAgICAgTXV0ZXg6OkF1dG9sb2NrIF9sKG1Mb2NrKTsKICAgICBjb25zdCBib29sIGhhc0JlZW5Jbml0aWFsaXplZCA9CiAgICAgICAgICAgICAobUN1cnJlbnRTdGF0ZSAhPSBNRURJQV9QTEFZRVIyX1NUQVRFX0VSUk9SKSAmJgogICAgICAgICAgICAgKChtQ3VycmVudFN0YXRlICYgTUVESUFfUExBWUVSMl9JRExFKSAhPSBNRURJQV9QTEFZRVIyX0lETEUpOwogICAgIGlmICgobVBsYXllciA9PSBOVUxMKSB8fCAhaGFzQmVlbkluaXRpYWxpemVkKSB7Ci0gICAgICAgIEFMT0dFKCJpbnZva2UgZmFpbGVkOiB3cm9uZyBzdGF0ZSAlWCwgbVBsYXllciglcCkiLCBtQ3VycmVudFN0YXRlLCBtUGxheWVyLmdldCgpKTsKKyAgICAgICAgQUxPR0UoImludm9rZSgpIGZhaWxlZDogd3Jvbmcgc3RhdGUgJVgsIG1QbGF5ZXIoJXApIiwgbUN1cnJlbnRTdGF0ZSwgbVBsYXllci5nZXQoKSk7CiAgICAgICAgIHJldHVybiBJTlZBTElEX09QRVJBVElPTjsKICAgICB9Ci0gICAgQUxPR1YoImludm9rZSAlenUiLCByZXF1ZXN0LmRhdGFTaXplKCkpOwogICAgIHJldHVybiBtUGxheWVyLT5pbnZva2UocmVxdWVzdCwgcmVwbHkpOwogfQogCi0vLyBUaGlzIGNhbGwgZG9lc24ndCBuZWVkIHRvIGFjY2VzcyB0aGUgbmF0aXZlIHBsYXllci4KLXN0YXR1c190IE1lZGlhUGxheWVyMjo6c2V0TWV0YWRhdGFGaWx0ZXIoY29uc3QgUGFyY2VsJiBmaWx0ZXIpIHsKLSAgICBBTE9HRCgic2V0TWV0YWRhdGFGaWx0ZXIiKTsKLQotICAgIHN0YXR1c190IHN0YXR1czsKLSAgICBtZWRpYTo6TWV0YWRhdGE6OkZpbHRlciBhbGxvdywgZHJvcDsKLQotICAgIGlmICh1bm1hcnNoYWxsRmlsdGVyKGZpbHRlciwgJmFsbG93LCAmc3RhdHVzKSAmJgotICAgICAgICB1bm1hcnNoYWxsRmlsdGVyKGZpbHRlciwgJmRyb3AsICZzdGF0dXMpKSB7Ci0gICAgICAgIE11dGV4OjpBdXRvbG9jayBsb2NrKG1Mb2NrKTsKLQotICAgICAgICBtTWV0YWRhdGFBbGxvdyA9IGFsbG93OwotICAgICAgICBtTWV0YWRhdGFEcm9wID0gZHJvcDsKLSAgICB9Ci0gICAgcmV0dXJuIHN0YXR1czsKLX0KLQotc3RhdHVzX3QgTWVkaWFQbGF5ZXIyOjpnZXRNZXRhZGF0YShib29sIHVwZGF0ZV9vbmx5LCBib29sIC8qIGFwcGx5X2ZpbHRlciAqLywgUGFyY2VsICpyZXBseSkgewotICAgIEFMT0dEKCJnZXRNZXRhZGF0YSIpOwotICAgIHNwPE1lZGlhUGxheWVyMkludGVyZmFjZT4gcGxheWVyOwotICAgIG1lZGlhOjpNZXRhZGF0YTo6RmlsdGVyIGlkczsKLSAgICBNdXRleDo6QXV0b2xvY2sgbG9jayhtTG9jayk7Ci0gICAgewotICAgICAgICBpZiAobVBsYXllciA9PSBOVUxMKSB7Ci0gICAgICAgICAgICByZXR1cm4gTk9fSU5JVDsKLSAgICAgICAgfQotCi0gICAgICAgIHBsYXllciA9IG1QbGF5ZXI7Ci0gICAgICAgIC8vIFBsYWNlaG9sZGVyIGZvciB0aGUgcmV0dXJuIGNvZGUsIHVwZGF0ZWQgYnkgdGhlIGNhbGxlci4KLSAgICAgICAgcmVwbHktPndyaXRlSW50MzIoLTEpOwotCi0gICAgICAgIC8vIFdlIGRvbid0IGJsb2NrIG5vdGlmaWNhdGlvbnMgd2hpbGUgd2UgZmV0Y2ggdGhlIGRhdGEuIFdlIGNsZWFyCi0gICAgICAgIC8vIG1NZXRhZGF0YVVwZGF0ZWQgZmlyc3Qgc28gd2UgZG9uJ3QgbG9zZSBub3RpZmljYXRpb25zIGhhcHBlbmluZwotICAgICAgICAvLyBkdXJpbmcgdGhlIHJlc3Qgb2YgdGhpcyBjYWxsLgotICAgICAgICBpZiAodXBkYXRlX29ubHkpIHsKLSAgICAgICAgICAgIGlkcyA9IG1NZXRhZGF0YVVwZGF0ZWQ7Ci0gICAgICAgIH0KLSAgICAgICAgbU1ldGFkYXRhVXBkYXRlZC5jbGVhcigpOwotICAgIH0KLQotICAgIG1lZGlhOjpNZXRhZGF0YSBtZXRhZGF0YShyZXBseSk7Ci0KLSAgICBtZXRhZGF0YS5hcHBlbmRIZWFkZXIoKTsKLSAgICBzdGF0dXNfdCBzdGF0dXMgPSBwbGF5ZXItPmdldE1ldGFkYXRhKGlkcywgcmVwbHkpOwotCi0gICAgaWYgKHN0YXR1cyAhPSBPSykgewotICAgICAgICBtZXRhZGF0YS5yZXNldFBhcmNlbCgpOwotICAgICAgICBBTE9HRSgiZ2V0TWV0YWRhdGEgZmFpbGVkICVkIiwgc3RhdHVzKTsKLSAgICAgICAgcmV0dXJuIHN0YXR1czsKLSAgICB9Ci0KLSAgICAvLyBGSVhNRTogZW1lbnQgZmlsdGVyaW5nIG9uIHRoZSByZXN1bHQuIE5vdCBjcml0aWNhbCBzaW5jZQotICAgIC8vIGZpbHRlcmluZyB0YWtlcyBwbGFjZSBvbiB0aGUgdXBkYXRlIG5vdGlmaWNhdGlvbnMgYWxyZWFkeS4gVGhpcwotICAgIC8vIHdvdWxkIGJlIHdoZW4gYWxsIHRoZSBtZXRhZGF0YSBhcmUgZmV0Y2ggYW5kIGEgZmlsdGVyIGlzIHNldC4KLQotICAgIC8vIEV2ZXJ5dGhpbmcgaXMgZmluZSwgdXBkYXRlIHRoZSBtZXRhZGF0YSBsZW5ndGguCi0gICAgbWV0YWRhdGEudXBkYXRlTGVuZ3RoKCk7Ci0gICAgcmV0dXJuIE9LOwotfQotCiB2b2lkIE1lZGlhUGxheWVyMjo6ZGlzY29ubmVjdE5hdGl2ZVdpbmRvd19sKCkgewogICAgIGlmIChtQ29ubmVjdGVkV2luZG93ICE9IE5VTEwgJiYgbUNvbm5lY3RlZFdpbmRvdy0+Z2V0QU5hdGl2ZVdpbmRvdygpICE9IE5VTEwpIHsKICAgICAgICAgc3RhdHVzX3QgZXJyID0gbmF0aXZlX3dpbmRvd19hcGlfZGlzY29ubmVjdCgKQEAgLTcyNywyMiArNTAxLDkgQEAKICAgICByZXR1cm4gbVBsYXllci0+c2V0QnVmZmVyaW5nU2V0dGluZ3MoYnVmZmVyaW5nKTsKIH0KIAotc3RhdHVzX3QgTWVkaWFQbGF5ZXIyOjpzZXRBdWRpb0F0dHJpYnV0ZXNfbChjb25zdCBQYXJjZWwgJnBhcmNlbCkgewotICAgIGlmIChtQXVkaW9BdHRyaWJ1dGVzICE9IE5VTEwpIHsKLSAgICAgICAgZnJlZShtQXVkaW9BdHRyaWJ1dGVzKTsKLSAgICB9Ci0gICAgbUF1ZGlvQXR0cmlidXRlcyA9IChhdWRpb19hdHRyaWJ1dGVzX3QgKikgY2FsbG9jKDEsIHNpemVvZihhdWRpb19hdHRyaWJ1dGVzX3QpKTsKLSAgICBpZiAobUF1ZGlvQXR0cmlidXRlcyA9PSBOVUxMKSB7Ci0gICAgICAgIHJldHVybiBOT19NRU1PUlk7Ci0gICAgfQotICAgIHVubWFyc2hhbGxBdWRpb0F0dHJpYnV0ZXMocGFyY2VsLCBtQXVkaW9BdHRyaWJ1dGVzKTsKLQotICAgIEFMT0dWKCJzZXRBdWRpb0F0dHJpYnV0ZXNfbCgpIHVzYWdlPSVkIGNvbnRlbnQ9JWQgZmxhZ3M9MHgleCB0YWdzPSVzIiwKLSAgICAgICAgICAgIG1BdWRpb0F0dHJpYnV0ZXMtPnVzYWdlLCBtQXVkaW9BdHRyaWJ1dGVzLT5jb250ZW50X3R5cGUsIG1BdWRpb0F0dHJpYnV0ZXMtPmZsYWdzLAotICAgICAgICAgICAgbUF1ZGlvQXR0cmlidXRlcy0+dGFncyk7Ci0KLSAgICBpZiAobUF1ZGlvT3V0cHV0ICE9IDApIHsKLSAgICAgICAgbUF1ZGlvT3V0cHV0LT5zZXRBdWRpb0F0dHJpYnV0ZXMobUF1ZGlvQXR0cmlidXRlcyk7CitzdGF0dXNfdCBNZWRpYVBsYXllcjI6OnNldEF1ZGlvQXR0cmlidXRlc19sKGNvbnN0IGpvYmplY3QgYXR0cmlidXRlcykgeworICAgIGlmIChtQXVkaW9PdXRwdXQgIT0gTlVMTCkgeworICAgICAgICBtQXVkaW9PdXRwdXQtPnNldEF1ZGlvQXR0cmlidXRlcyhhdHRyaWJ1dGVzKTsKICAgICB9CiAgICAgcmV0dXJuIE5PX0VSUk9SOwogfQpAQCAtNzUwLDE0ICs1MTEsMTIgQEAKIHN0YXR1c190IE1lZGlhUGxheWVyMjo6cHJlcGFyZUFzeW5jKCkgewogICAgIEFMT0dWKCJwcmVwYXJlQXN5bmMiKTsKICAgICBNdXRleDo6QXV0b2xvY2sgX2wobUxvY2spOwotICAgIGlmICgobVBsYXllciAhPSAwKSAmJiAobUN1cnJlbnRTdGF0ZSAmIChNRURJQV9QTEFZRVIyX0lOSVRJQUxJWkVEIHwgTUVESUFfUExBWUVSMl9TVE9QUEVEKSkpIHsKLSAgICAgICAgaWYgKG1BdWRpb0F0dHJpYnV0ZXNQYXJjZWwgIT0gTlVMTCkgewotICAgICAgICAgICAgc3RhdHVzX3QgZXJyID0gc2V0QXVkaW9BdHRyaWJ1dGVzX2woKm1BdWRpb0F0dHJpYnV0ZXNQYXJjZWwpOworICAgIGlmICgobVBsYXllciAhPSAwKSAmJiAobUN1cnJlbnRTdGF0ZSAmIE1FRElBX1BMQVlFUjJfSU5JVElBTElaRUQpKSB7CisgICAgICAgIGlmIChtQXVkaW9BdHRyaWJ1dGVzICE9IE5VTEwpIHsKKyAgICAgICAgICAgIHN0YXR1c190IGVyciA9IHNldEF1ZGlvQXR0cmlidXRlc19sKG1BdWRpb0F0dHJpYnV0ZXMtPmdldEpPYmplY3QoKSk7CiAgICAgICAgICAgICBpZiAoZXJyICE9IE9LKSB7CiAgICAgICAgICAgICAgICAgcmV0dXJuIGVycjsKICAgICAgICAgICAgIH0KLSAgICAgICAgfSBlbHNlIGlmIChtQXVkaW9PdXRwdXQgIT0gMCkgewotICAgICAgICAgICAgbUF1ZGlvT3V0cHV0LT5zZXRBdWRpb1N0cmVhbVR5cGUobVN0cmVhbVR5cGUpOwogICAgICAgICB9CiAgICAgICAgIG1DdXJyZW50U3RhdGUgPSBNRURJQV9QTEFZRVIyX1BSRVBBUklORzsKICAgICAgICAgcmV0dXJuIG1QbGF5ZXItPnByZXBhcmVBc3luYygpOwpAQCAtNzgxLDcgKzU0MCw3IEBACiAgICAgICAgIG1QbGF5ZXItPnNldExvb3BpbmcobUxvb3ApOwogCiAgICAgICAgIGlmIChtQXVkaW9PdXRwdXQgIT0gMCkgewotICAgICAgICAgICAgbUF1ZGlvT3V0cHV0LT5zZXRWb2x1bWUobUxlZnRWb2x1bWUsIG1SaWdodFZvbHVtZSk7CisgICAgICAgICAgICBtQXVkaW9PdXRwdXQtPnNldFZvbHVtZShtVm9sdW1lKTsKICAgICAgICAgfQogCiAgICAgICAgIGlmIChtQXVkaW9PdXRwdXQgIT0gMCkgewpAQCAtODA2LDMwICs1NjUsMTIgQEAKICAgICByZXR1cm4gcmV0OwogfQogCi1zdGF0dXNfdCBNZWRpYVBsYXllcjI6OnN0b3AoKSB7Ci0gICAgQUxPR1YoInN0b3AiKTsKLSAgICBNdXRleDo6QXV0b2xvY2sgX2wobUxvY2spOwotICAgIGlmIChtQ3VycmVudFN0YXRlICYgTUVESUFfUExBWUVSMl9TVE9QUEVEKSByZXR1cm4gTk9fRVJST1I7Ci0gICAgaWYgKCAobVBsYXllciAhPSAwKSAmJiAoIG1DdXJyZW50U3RhdGUgJiAoIE1FRElBX1BMQVlFUjJfU1RBUlRFRCB8IE1FRElBX1BMQVlFUjJfUFJFUEFSRUQgfAotICAgICAgICAgICAgICAgICAgICBNRURJQV9QTEFZRVIyX1BBVVNFRCB8IE1FRElBX1BMQVlFUjJfUExBWUJBQ0tfQ09NUExFVEUgKSApICkgewotICAgICAgICBzdGF0dXNfdCByZXQgPSBtUGxheWVyLT5zdG9wKCk7Ci0gICAgICAgIGlmIChyZXQgIT0gTk9fRVJST1IpIHsKLSAgICAgICAgICAgIG1DdXJyZW50U3RhdGUgPSBNRURJQV9QTEFZRVIyX1NUQVRFX0VSUk9SOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgbUN1cnJlbnRTdGF0ZSA9IE1FRElBX1BMQVlFUjJfU1RPUFBFRDsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gcmV0OwotICAgIH0KLSAgICBBTE9HRSgic3RvcCBjYWxsZWQgaW4gc3RhdGUgJWQsIG1QbGF5ZXIoJXApIiwgbUN1cnJlbnRTdGF0ZSwgbVBsYXllci5nZXQoKSk7Ci0gICAgcmV0dXJuIElOVkFMSURfT1BFUkFUSU9OOwotfQotCiBzdGF0dXNfdCBNZWRpYVBsYXllcjI6OnBhdXNlKCkgewogICAgIEFMT0dWKCJwYXVzZSIpOwogICAgIE11dGV4OjpBdXRvbG9jayBfbChtTG9jayk7CiAgICAgaWYgKG1DdXJyZW50U3RhdGUgJiAoTUVESUFfUExBWUVSMl9QQVVTRUR8TUVESUFfUExBWUVSMl9QTEFZQkFDS19DT01QTEVURSkpCiAgICAgICAgIHJldHVybiBOT19FUlJPUjsKLSAgICBpZiAoKG1QbGF5ZXIgIT0gMCkgJiYgKG1DdXJyZW50U3RhdGUgJiBNRURJQV9QTEFZRVIyX1NUQVJURUQpKSB7CisgICAgaWYgKChtUGxheWVyICE9IDApICYmIChtQ3VycmVudFN0YXRlICYgKE1FRElBX1BMQVlFUjJfU1RBUlRFRCB8IE1FRElBX1BMQVlFUjJfUFJFUEFSRUQpKSkgewogICAgICAgICBzdGF0dXNfdCByZXQgPSBtUGxheWVyLT5wYXVzZSgpOwogICAgICAgICBpZiAocmV0ICE9IE5PX0VSUk9SKSB7CiAgICAgICAgICAgICBtQ3VycmVudFN0YXRlID0gTUVESUFfUExBWUVSMl9TVEFURV9FUlJPUjsKQEAgLTg2MCw3ICs2MDEsNyBAQAogICAgIHJldHVybiBmYWxzZTsKIH0KIAotbWVkaWFwbGF5ZXIyX3N0YXRlcyBNZWRpYVBsYXllcjI6OmdldE1lZGlhUGxheWVyMlN0YXRlKCkgeworbWVkaWFwbGF5ZXIyX3N0YXRlcyBNZWRpYVBsYXllcjI6OmdldFN0YXRlKCkgewogICAgIE11dGV4OjpBdXRvbG9jayBfbChtTG9jayk7CiAgICAgaWYgKG1DdXJyZW50U3RhdGUgJiBNRURJQV9QTEFZRVIyX1NUQVRFX0VSUk9SKSB7CiAgICAgICAgIHJldHVybiBNRURJQVBMQVlFUjJfU1RBVEVfRVJST1I7CkBAIC04NzMsOCArNjE0LDcgQEAKICAgICBpZiAobUN1cnJlbnRTdGF0ZSAmIE1FRElBX1BMQVlFUjJfU1RBUlRFRCkgewogICAgICAgICByZXR1cm4gTUVESUFQTEFZRVIyX1NUQVRFX1BMQVlJTkc7CiAgICAgfQotICAgIGlmIChtQ3VycmVudFN0YXRlCi0gICAgICAgICYgKE1FRElBX1BMQVlFUjJfUEFVU0VEIHwgTUVESUFfUExBWUVSMl9TVE9QUEVEIHwgTUVESUFfUExBWUVSMl9QTEFZQkFDS19DT01QTEVURSkpIHsKKyAgICBpZiAobUN1cnJlbnRTdGF0ZSAmIChNRURJQV9QTEFZRVIyX1BBVVNFRCB8IE1FRElBX1BMQVlFUjJfUExBWUJBQ0tfQ09NUExFVEUpKSB7CiAgICAgICAgIHJldHVybiBNRURJQVBMQVlFUjJfU1RBVEVfUEFVU0VEOwogICAgIH0KICAgICAvLyBub3cgb25seSBtQ3VycmVudFN0YXRlICYgTUVESUFfUExBWUVSMl9QUkVQQVJFRCBpcyB0cnVlCkBAIC04OTAsNyArNjMwLDcgQEAKICAgICAgICAgcmV0dXJuIEJBRF9WQUxVRTsKICAgICB9CiAgICAgTXV0ZXg6OkF1dG9sb2NrIF9sKG1Mb2NrKTsKLSAgICBpZiAobVBsYXllciA9PSAwIHx8IChtQ3VycmVudFN0YXRlICYgTUVESUFfUExBWUVSMl9TVE9QUEVEKSkgeworICAgIGlmIChtUGxheWVyID09IDApIHsKICAgICAgICAgcmV0dXJuIElOVkFMSURfT1BFUkFUSU9OOwogICAgIH0KIApAQCAtOTgyLDcgKzcyMiw3IEBACiAgICAgTXV0ZXg6OkF1dG9sb2NrIF9sKG1Mb2NrKTsKICAgICBBTE9HVigiZ2V0RHVyYXRpb25fbCIpOwogICAgIGJvb2wgaXNWYWxpZFN0YXRlID0gKG1DdXJyZW50U3RhdGUgJiAoTUVESUFfUExBWUVSMl9QUkVQQVJFRCB8IE1FRElBX1BMQVlFUjJfU1RBUlRFRCB8Ci0gICAgICAgICAgICBNRURJQV9QTEFZRVIyX1BBVVNFRCB8IE1FRElBX1BMQVlFUjJfU1RPUFBFRCB8IE1FRElBX1BMQVlFUjJfUExBWUJBQ0tfQ09NUExFVEUpKTsKKyAgICAgICAgICAgIE1FRElBX1BMQVlFUjJfUEFVU0VEIHwgTUVESUFfUExBWUVSMl9QTEFZQkFDS19DT01QTEVURSkpOwogICAgIGlmIChtUGxheWVyID09IDAgfHwgIWlzVmFsaWRTdGF0ZSkgewogICAgICAgICBBTE9HRSgiQXR0ZW1wdCB0byBjYWxsIGdldER1cmF0aW9uIGluIHdyb25nIHN0YXRlOiBtUGxheWVyPSVwLCBtQ3VycmVudFN0YXRlPSV1IiwKICAgICAgICAgICAgICAgICBtUGxheWVyLmdldCgpLCBtQ3VycmVudFN0YXRlKTsKQEAgLTExMzgsMTggKzg3OCwxNyBAQAogICAgIHJldHVybiBmYWxzZTsKIH0KIAotc3RhdHVzX3QgTWVkaWFQbGF5ZXIyOjpzZXRWb2x1bWUoZmxvYXQgbGVmdFZvbHVtZSwgZmxvYXQgcmlnaHRWb2x1bWUpIHsKLSAgICBBTE9HVigiTWVkaWFQbGF5ZXIyOjpzZXRWb2x1bWUoJWYsICVmKSIsIGxlZnRWb2x1bWUsIHJpZ2h0Vm9sdW1lKTsKK3N0YXR1c190IE1lZGlhUGxheWVyMjo6c2V0Vm9sdW1lKGZsb2F0IHZvbHVtZSkgeworICAgIEFMT0dWKCJNZWRpYVBsYXllcjI6OnNldFZvbHVtZSglZikiLCB2b2x1bWUpOwogICAgIE11dGV4OjpBdXRvbG9jayBfbChtTG9jayk7Ci0gICAgbUxlZnRWb2x1bWUgPSBsZWZ0Vm9sdW1lOwotICAgIG1SaWdodFZvbHVtZSA9IHJpZ2h0Vm9sdW1lOworICAgIG1Wb2x1bWUgPSB2b2x1bWU7CiAgICAgaWYgKG1BdWRpb091dHB1dCAhPSAwKSB7Ci0gICAgICAgIG1BdWRpb091dHB1dC0+c2V0Vm9sdW1lKGxlZnRWb2x1bWUsIHJpZ2h0Vm9sdW1lKTsKKyAgICAgICAgbUF1ZGlvT3V0cHV0LT5zZXRWb2x1bWUodm9sdW1lKTsKICAgICB9CiAgICAgcmV0dXJuIE9LOwogfQogCi1zdGF0dXNfdCBNZWRpYVBsYXllcjI6OnNldEF1ZGlvU2Vzc2lvbklkKGF1ZGlvX3Nlc3Npb25fdCBzZXNzaW9uSWQpIHsKK3N0YXR1c190IE1lZGlhUGxheWVyMjo6c2V0QXVkaW9TZXNzaW9uSWQoaW50MzJfdCBzZXNzaW9uSWQpIHsKICAgICBBTE9HVigiTWVkaWFQbGF5ZXIyOjpzZXRBdWRpb1Nlc3Npb25JZCglZCkiLCBzZXNzaW9uSWQpOwogICAgIE11dGV4OjpBdXRvbG9jayBfbChtTG9jayk7CiAgICAgaWYgKCEobUN1cnJlbnRTdGF0ZSAmIE1FRElBX1BMQVlFUjJfSURMRSkpIHsKQEAgLTExNTksMTcgKzg5OCwxOCBAQAogICAgIGlmIChzZXNzaW9uSWQgPCAwKSB7CiAgICAgICAgIHJldHVybiBCQURfVkFMVUU7CiAgICAgfQotICAgIGlmIChzZXNzaW9uSWQgIT0gbUF1ZGlvU2Vzc2lvbklkKSB7Ci0gICAgICAgIEF1ZGlvU3lzdGVtOjphY3F1aXJlQXVkaW9TZXNzaW9uSWQoc2Vzc2lvbklkLCAtMSk7Ci0gICAgICAgIEF1ZGlvU3lzdGVtOjpyZWxlYXNlQXVkaW9TZXNzaW9uSWQobUF1ZGlvU2Vzc2lvbklkLCAtMSk7Ci0gICAgICAgIG1BdWRpb1Nlc3Npb25JZCA9IHNlc3Npb25JZDsKKyAgICBpZiAobUF1ZGlvT3V0cHV0ICE9IE5VTEwgJiYgc2Vzc2lvbklkICE9IG1BdWRpb091dHB1dC0+Z2V0U2Vzc2lvbklkKCkpIHsKKyAgICAgICAgbUF1ZGlvT3V0cHV0LT5zZXRTZXNzaW9uSWQoc2Vzc2lvbklkKTsKICAgICB9CiAgICAgcmV0dXJuIE5PX0VSUk9SOwogfQogCi1hdWRpb19zZXNzaW9uX3QgTWVkaWFQbGF5ZXIyOjpnZXRBdWRpb1Nlc3Npb25JZCgpIHsKK2ludDMyX3QgTWVkaWFQbGF5ZXIyOjpnZXRBdWRpb1Nlc3Npb25JZCgpIHsKICAgICBNdXRleDo6QXV0b2xvY2sgX2wobUxvY2spOwotICAgIHJldHVybiBtQXVkaW9TZXNzaW9uSWQ7CisgICAgaWYgKG1BdWRpb091dHB1dCAhPSBOVUxMKSB7CisgICAgICAgIHJldHVybiBtQXVkaW9PdXRwdXQtPmdldFNlc3Npb25JZCgpOworICAgIH0KKyAgICByZXR1cm4gMDsKIH0KIAogc3RhdHVzX3QgTWVkaWFQbGF5ZXIyOjpzZXRBdXhFZmZlY3RTZW5kTGV2ZWwoZmxvYXQgbGV2ZWwpIHsKQEAgLTExOTYsNjcgKzkzNiwzNyBAQAogfQogCiAvLyBhbHdheXMgY2FsbCB3aXRoIGxvY2sgaGVsZAotc3RhdHVzX3QgTWVkaWFQbGF5ZXIyOjpjaGVja1N0YXRlRm9yS2V5U2V0X2woaW50IGtleSkgewotICAgIHN3aXRjaChrZXkpIHsKLSAgICBjYXNlIE1FRElBMl9LRVlfUEFSQU1FVEVSX0FVRElPX0FUVFJJQlVURVM6Ci0gICAgICAgIGlmIChtQ3VycmVudFN0YXRlICYgKCBNRURJQV9QTEFZRVIyX1BSRVBBUkVEIHwgTUVESUFfUExBWUVSMl9TVEFSVEVEIHwKLSAgICAgICAgICAgICAgICBNRURJQV9QTEFZRVIyX1BBVVNFRCB8IE1FRElBX1BMQVlFUjJfUExBWUJBQ0tfQ09NUExFVEUpICkgewotICAgICAgICAgICAgLy8gQ2FuJ3QgY2hhbmdlIHRoZSBhdWRpbyBhdHRyaWJ1dGVzIGFmdGVyIHByZXBhcmUKLSAgICAgICAgICAgIEFMT0dFKCJ0cnlpbmcgdG8gc2V0IGF1ZGlvIGF0dHJpYnV0ZXMgY2FsbGVkIGluIHN0YXRlICVkIiwgbUN1cnJlbnRTdGF0ZSk7Ci0gICAgICAgICAgICByZXR1cm4gSU5WQUxJRF9PUEVSQVRJT047Ci0gICAgICAgIH0KLSAgICAgICAgYnJlYWs7Ci0gICAgZGVmYXVsdDoKLSAgICAgICAgLy8gcGFyYW1ldGVyIGRvZXNuJ3QgcmVxdWlyZSBwbGF5ZXIgc3RhdGUgY2hlY2sKLSAgICAgICAgYnJlYWs7CitzdGF0dXNfdCBNZWRpYVBsYXllcjI6OmNoZWNrU3RhdGVfbCgpIHsKKyAgICBpZiAobUN1cnJlbnRTdGF0ZSAmICggTUVESUFfUExBWUVSMl9QUkVQQVJFRCB8IE1FRElBX1BMQVlFUjJfU1RBUlRFRCB8CisgICAgICAgICAgICBNRURJQV9QTEFZRVIyX1BBVVNFRCB8IE1FRElBX1BMQVlFUjJfUExBWUJBQ0tfQ09NUExFVEUpICkgeworICAgICAgICAvLyBDYW4ndCBjaGFuZ2UgdGhlIGF1ZGlvIGF0dHJpYnV0ZXMgYWZ0ZXIgcHJlcGFyZQorICAgICAgICBBTE9HRSgidHJ5aW5nIHRvIHNldCBhdWRpbyBhdHRyaWJ1dGVzIGNhbGxlZCBpbiBzdGF0ZSAlZCIsIG1DdXJyZW50U3RhdGUpOworICAgICAgICByZXR1cm4gSU5WQUxJRF9PUEVSQVRJT047CiAgICAgfQogICAgIHJldHVybiBPSzsKIH0KIAotc3RhdHVzX3QgTWVkaWFQbGF5ZXIyOjpzZXRQYXJhbWV0ZXIoaW50IGtleSwgY29uc3QgUGFyY2VsJiByZXF1ZXN0KSB7Ci0gICAgQUxPR1YoIk1lZGlhUGxheWVyMjo6c2V0UGFyYW1ldGVyKCVkKSIsIGtleSk7CitzdGF0dXNfdCBNZWRpYVBsYXllcjI6OnNldEF1ZGlvQXR0cmlidXRlcyhjb25zdCBqb2JqZWN0IGF0dHJpYnV0ZXMpIHsKKyAgICBBTE9HVigiTWVkaWFQbGF5ZXIyOjpzZXRBdWRpb0F0dHJpYnV0ZXMiKTsKICAgICBzdGF0dXNfdCBzdGF0dXMgPSBJTlZBTElEX09QRVJBVElPTjsKICAgICBNdXRleDo6QXV0b2xvY2sgX2wobUxvY2spOwotICAgIGlmIChjaGVja1N0YXRlRm9yS2V5U2V0X2woa2V5KSAhPSBPSykgeworICAgIGlmIChjaGVja1N0YXRlX2woKSAhPSBPSykgewogICAgICAgICByZXR1cm4gc3RhdHVzOwogICAgIH0KLSAgICBzd2l0Y2ggKGtleSkgewotICAgIGNhc2UgTUVESUEyX0tFWV9QQVJBTUVURVJfQVVESU9fQVRUUklCVVRFUzoKLSAgICAgICAgLy8gc2F2ZSB0aGUgbWFyc2hhbGxlZCBhdWRpbyBhdHRyaWJ1dGVzCi0gICAgICAgIGlmIChtQXVkaW9BdHRyaWJ1dGVzUGFyY2VsICE9IE5VTEwpIHsKLSAgICAgICAgICAgIGRlbGV0ZSBtQXVkaW9BdHRyaWJ1dGVzUGFyY2VsOwotICAgICAgICB9Ci0gICAgICAgIG1BdWRpb0F0dHJpYnV0ZXNQYXJjZWwgPSBuZXcgUGFyY2VsKCk7Ci0gICAgICAgIG1BdWRpb0F0dHJpYnV0ZXNQYXJjZWwtPmFwcGVuZEZyb20oJnJlcXVlc3QsIDAsIHJlcXVlc3QuZGF0YVNpemUoKSk7Ci0gICAgICAgIHN0YXR1cyA9IHNldEF1ZGlvQXR0cmlidXRlc19sKHJlcXVlc3QpOwotICAgICAgICBpZiAoc3RhdHVzICE9IE9LKSB7Ci0gICAgICAgICAgICByZXR1cm4gc3RhdHVzOwotICAgICAgICB9Ci0gICAgICAgIGJyZWFrOwotICAgIGRlZmF1bHQ6Ci0gICAgICAgIEFMT0dWX0lGKG1QbGF5ZXIgPT0gTlVMTCwgInNldFBhcmFtZXRlcjogbm8gYWN0aXZlIHBsYXllciIpOwotICAgICAgICBicmVhazsKLSAgICB9Ci0KLSAgICBpZiAobVBsYXllciAhPSBOVUxMKSB7Ci0gICAgICAgIHN0YXR1cyA9IG1QbGF5ZXItPnNldFBhcmFtZXRlcihrZXksIHJlcXVlc3QpOwotICAgIH0KKyAgICBtQXVkaW9BdHRyaWJ1dGVzID0gbmV3IEpPYmplY3RIb2xkZXIoYXR0cmlidXRlcyk7CisgICAgc3RhdHVzID0gc2V0QXVkaW9BdHRyaWJ1dGVzX2woYXR0cmlidXRlcyk7CiAgICAgcmV0dXJuIHN0YXR1czsKIH0KIAoram9iamVjdCBNZWRpYVBsYXllcjI6OmdldEF1ZGlvQXR0cmlidXRlcygpIHsKKyAgICBBTE9HVigiTWVkaWFQbGF5ZXIyOjpnZXRBdWRpb0F0dHJpYnV0ZXMpIik7CisgICAgTXV0ZXg6OkF1dG9sb2NrIF9sKG1Mb2NrKTsKKyAgICByZXR1cm4gbUF1ZGlvQXR0cmlidXRlcyAhPSBOVUxMID8gbUF1ZGlvQXR0cmlidXRlcy0+Z2V0Sk9iamVjdCgpIDogTlVMTDsKK30KKwogc3RhdHVzX3QgTWVkaWFQbGF5ZXIyOjpnZXRQYXJhbWV0ZXIoaW50IGtleSwgUGFyY2VsICpyZXBseSkgewogICAgIEFMT0dWKCJNZWRpYVBsYXllcjI6OmdldFBhcmFtZXRlciglZCkiLCBrZXkpOwogICAgIE11dGV4OjpBdXRvbG9jayBfbChtTG9jayk7Ci0gICAgaWYgKGtleSA9PSBNRURJQTJfS0VZX1BBUkFNRVRFUl9BVURJT19BVFRSSUJVVEVTKSB7Ci0gICAgICAgIGlmIChyZXBseSA9PSBOVUxMKSB7Ci0gICAgICAgICAgICByZXR1cm4gQkFEX1ZBTFVFOwotICAgICAgICB9Ci0gICAgICAgIGlmIChtQXVkaW9BdHRyaWJ1dGVzUGFyY2VsICE9IE5VTEwpIHsKLSAgICAgICAgICAgIHJlcGx5LT5hcHBlbmRGcm9tKG1BdWRpb0F0dHJpYnV0ZXNQYXJjZWwsIDAsIG1BdWRpb0F0dHJpYnV0ZXNQYXJjZWwtPmRhdGFTaXplKCkpOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiBPSzsKLSAgICB9Ci0KICAgICBpZiAobVBsYXllciA9PSBOVUxMKSB7CiAgICAgICAgIEFMT0dWKCJnZXRQYXJhbWV0ZXI6IG5vIGFjdGl2ZSBwbGF5ZXIiKTsKICAgICAgICAgcmV0dXJuIElOVkFMSURfT1BFUkFUSU9OOwpAQCAtMTI2OSw0NCArOTc5LDEwIEBACiAgICAgcmV0dXJuIHN0YXR1czsKIH0KIAotYm9vbCBNZWRpYVBsYXllcjI6OnNob3VsZERyb3BNZXRhZGF0YShtZWRpYTo6TWV0YWRhdGE6OlR5cGUgY29kZSkgY29uc3QgewotICAgIE11dGV4OjpBdXRvbG9jayBsb2NrKG1Mb2NrKTsKLQotICAgIGlmIChmaW5kTWV0YWRhdGEobU1ldGFkYXRhRHJvcCwgY29kZSkpIHsKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotCi0gICAgaWYgKG1NZXRhZGF0YUFsbG93LmlzRW1wdHkoKSB8fCBmaW5kTWV0YWRhdGEobU1ldGFkYXRhQWxsb3csIGNvZGUpKSB7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9IGVsc2UgewotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci19Ci0KLQotdm9pZCBNZWRpYVBsYXllcjI6OmFkZE5ld01ldGFkYXRhVXBkYXRlKG1lZGlhOjpNZXRhZGF0YTo6VHlwZSBtZXRhZGF0YV90eXBlKSB7Ci0gICAgTXV0ZXg6OkF1dG9sb2NrIGxvY2sobUxvY2spOwotICAgIGlmIChtTWV0YWRhdGFVcGRhdGVkLmluZGV4T2YobWV0YWRhdGFfdHlwZSkgPCAwKSB7Ci0gICAgICAgIG1NZXRhZGF0YVVwZGF0ZWQuYWRkKG1ldGFkYXRhX3R5cGUpOwotICAgIH0KLX0KLQotdm9pZCBNZWRpYVBsYXllcjI6Om5vdGlmeShpbnQ2NF90IHNyY0lkLCBpbnQgbXNnLCBpbnQgZXh0MSwgaW50IGV4dDIsIGNvbnN0IFBhcmNlbCAqb2JqKSB7Cit2b2lkIE1lZGlhUGxheWVyMjo6bm90aWZ5KGludDY0X3Qgc3JjSWQsIGludCBtc2csIGludCBleHQxLCBpbnQgZXh0MiwgY29uc3QgUGxheWVyTWVzc2FnZSAqb2JqKSB7CiAgICAgQUxPR1YoIm1lc3NhZ2UgcmVjZWl2ZWQgc3JjSWQ9JWxsZCwgbXNnPSVkLCBleHQxPSVkLCBleHQyPSVkIiwKICAgICAgICAgICAobG9uZyBsb25nKXNyY0lkLCBtc2csIGV4dDEsIGV4dDIpOwogCi0gICAgaWYgKE1FRElBMl9JTkZPID09IG1zZyAmJiBNRURJQTJfSU5GT19NRVRBREFUQV9VUERBVEUgPT0gZXh0MSkgewotICAgICAgICBjb25zdCBtZWRpYTo6TWV0YWRhdGE6OlR5cGUgbWV0YWRhdGFfdHlwZSA9IGV4dDI7Ci0KLSAgICAgICAgaWYoc2hvdWxkRHJvcE1ldGFkYXRhKG1ldGFkYXRhX3R5cGUpKSB7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLQotICAgICAgICAvLyBVcGRhdGUgdGhlIGxpc3Qgb2YgbWV0YWRhdGEgdGhhdCBoYXZlIGNoYW5nZWQuIGdldE1ldGFkYXRhCi0gICAgICAgIC8vIGFsc28gYWNjZXNzIG1NZXRhZGF0YVVwZGF0ZWQgYW5kIGNsZWFycyBpdC4KLSAgICAgICAgYWRkTmV3TWV0YWRhdGFVcGRhdGUobWV0YWRhdGFfdHlwZSk7Ci0gICAgfQotCiAgICAgYm9vbCBzZW5kID0gdHJ1ZTsKICAgICBib29sIGxvY2tlZCA9IGZhbHNlOwogCkBAIC0xNDc5LDM2ICsxMTU1LDQwIEBACiAgICAgcmV0dXJuIHN0YXR1czsKIH0KIAotc3RhdHVzX3QgTWVkaWFQbGF5ZXIyOjpzZXRPdXRwdXREZXZpY2UoYXVkaW9fcG9ydF9oYW5kbGVfdCBkZXZpY2VJZCkgeworc3RhdHVzX3QgTWVkaWFQbGF5ZXIyOjpzZXRQcmVmZXJyZWREZXZpY2Uoam9iamVjdCBkZXZpY2UpIHsKICAgICBNdXRleDo6QXV0b2xvY2sgX2wobUxvY2spOwogICAgIGlmIChtQXVkaW9PdXRwdXQgPT0gTlVMTCkgewotICAgICAgICBBTE9HVigic2V0T3V0cHV0RGV2aWNlOiBhdWRpbyBzaW5rIG5vdCBpbml0Iik7CisgICAgICAgIEFMT0dWKCJzZXRQcmVmZXJyZWREZXZpY2U6IGF1ZGlvIHNpbmsgbm90IGluaXQiKTsKICAgICAgICAgcmV0dXJuIE5PX0lOSVQ7CiAgICAgfQotICAgIHJldHVybiBtQXVkaW9PdXRwdXQtPnNldE91dHB1dERldmljZShkZXZpY2VJZCk7CisgICAgcmV0dXJuIG1BdWRpb091dHB1dC0+c2V0UHJlZmVycmVkRGV2aWNlKGRldmljZSk7CiB9CiAKLWF1ZGlvX3BvcnRfaGFuZGxlX3QgTWVkaWFQbGF5ZXIyOjpnZXRSb3V0ZWREZXZpY2VJZCgpIHsKK2pvYmplY3QgTWVkaWFQbGF5ZXIyOjpnZXRSb3V0ZWREZXZpY2UoKSB7CiAgICAgTXV0ZXg6OkF1dG9sb2NrIF9sKG1Mb2NrKTsKICAgICBpZiAobUF1ZGlvT3V0cHV0ID09IE5VTEwpIHsKLSAgICAgICAgQUxPR1YoImdldFJvdXRlZERldmljZUlkOiBhdWRpbyBzaW5rIG5vdCBpbml0Iik7Ci0gICAgICAgIHJldHVybiBBVURJT19QT1JUX0hBTkRMRV9OT05FOworICAgICAgICBBTE9HVigiZ2V0Um91dGVkRGV2aWNlOiBhdWRpbyBzaW5rIG5vdCBpbml0Iik7CisgICAgICAgIHJldHVybiBudWxscHRyOwogICAgIH0KLSAgICBhdWRpb19wb3J0X2hhbmRsZV90IGRldmljZUlkOwotICAgIHN0YXR1c190IHN0YXR1cyA9IG1BdWRpb091dHB1dC0+Z2V0Um91dGVkRGV2aWNlSWQoJmRldmljZUlkKTsKLSAgICBpZiAoc3RhdHVzICE9IE5PX0VSUk9SKSB7Ci0gICAgICAgIHJldHVybiBBVURJT19QT1JUX0hBTkRMRV9OT05FOwotICAgIH0KLSAgICByZXR1cm4gZGV2aWNlSWQ7CisgICAgcmV0dXJuIG1BdWRpb091dHB1dC0+Z2V0Um91dGVkRGV2aWNlKCk7CiB9CiAKLXN0YXR1c190IE1lZGlhUGxheWVyMjo6ZW5hYmxlQXVkaW9EZXZpY2VDYWxsYmFjayhib29sIGVuYWJsZWQpIHsKK3N0YXR1c190IE1lZGlhUGxheWVyMjo6YWRkQXVkaW9EZXZpY2VDYWxsYmFjayhqb2JqZWN0IHJvdXRpbmdEZWxlZ2F0ZSkgewogICAgIE11dGV4OjpBdXRvbG9jayBfbChtTG9jayk7CiAgICAgaWYgKG1BdWRpb091dHB1dCA9PSBOVUxMKSB7CiAgICAgICAgIEFMT0dWKCJhZGRBdWRpb0RldmljZUNhbGxiYWNrOiBwbGF5ZXIgbm90IGluaXQiKTsKICAgICAgICAgcmV0dXJuIE5PX0lOSVQ7CiAgICAgfQotICAgIHJldHVybiBtQXVkaW9PdXRwdXQtPmVuYWJsZUF1ZGlvRGV2aWNlQ2FsbGJhY2soZW5hYmxlZCk7CisgICAgcmV0dXJuIG1BdWRpb091dHB1dC0+YWRkQXVkaW9EZXZpY2VDYWxsYmFjayhyb3V0aW5nRGVsZWdhdGUpOworfQorCitzdGF0dXNfdCBNZWRpYVBsYXllcjI6OnJlbW92ZUF1ZGlvRGV2aWNlQ2FsbGJhY2soam9iamVjdCBsaXN0ZW5lcikgeworICAgIE11dGV4OjpBdXRvbG9jayBfbChtTG9jayk7CisgICAgaWYgKG1BdWRpb091dHB1dCA9PSBOVUxMKSB7CisgICAgICAgIEFMT0dWKCJhZGRBdWRpb0RldmljZUNhbGxiYWNrOiBwbGF5ZXIgbm90IGluaXQiKTsKKyAgICAgICAgcmV0dXJuIE5PX0lOSVQ7CisgICAgfQorICAgIHJldHVybiBtQXVkaW9PdXRwdXQtPnJlbW92ZUF1ZGlvRGV2aWNlQ2FsbGJhY2sobGlzdGVuZXIpOwogfQogCiBzdGF0dXNfdCBNZWRpYVBsYXllcjI6OmR1bXAoaW50IGZkLCBjb25zdCBWZWN0b3I8U3RyaW5nMTY+JiBhcmdzKSB7CmRpZmYgLS1naXQgYS9tZWRpYS9saWJtZWRpYXBsYXllcjIvbnVwbGF5ZXIyL0FuZHJvaWQuYnAgYi9tZWRpYS9saWJtZWRpYXBsYXllcjIvbnVwbGF5ZXIyL0FuZHJvaWQuYnAKaW5kZXggYzhkZGMxMS4uOTNjMjE4ZSAxMDA2NDQKLS0tIGEvbWVkaWEvbGlibWVkaWFwbGF5ZXIyL251cGxheWVyMi9BbmRyb2lkLmJwCisrKyBiL21lZGlhL2xpYm1lZGlhcGxheWVyMi9udXBsYXllcjIvQW5kcm9pZC5icApAQCAtMSw2ICsxLDcgQEAKIGNjX2xpYnJhcnlfc3RhdGljIHsKIAogICAgIHNyY3M6IFsKKyAgICAgICAgIkpNZWRpYVBsYXllcjJVdGlscy5jcHAiLAogICAgICAgICAiSldha2VMb2NrLmNwcCIsCiAgICAgICAgICJHZW5lcmljU291cmNlMi5jcHAiLAogICAgICAgICAiSFRUUExpdmVTb3VyY2UyLmNwcCIsCkBAIC0yOCw2ICsyOSw4IEBACiAgICAgICAgICJmcmFtZXdvcmtzL2F2L21lZGlhL2xpYnN0YWdlZnJpZ2h0L21wZWcydHMiLAogICAgICAgICAiZnJhbWV3b3Jrcy9hdi9tZWRpYS9saWJzdGFnZWZyaWdodC9ydHNwIiwKICAgICAgICAgImZyYW1ld29ya3MvYXYvbWVkaWEvbGlic3RhZ2VmcmlnaHQvdGltZWR0ZXh0IiwKKyAgICAgICAgImZyYW1ld29ya3MvYXYvbWVkaWEvbmRrIiwKKyAgICAgICAgImZyYW1ld29ya3MvYmFzZS9jb3JlL2puaSIsCiAgICAgXSwKIAogICAgIGNmbGFnczogWwpAQCAtNDgsMTMgKzUxLDE1IEBACiAgICAgICAgICJsaWJ1aSIsCiAgICAgICAgICJsaWJndWkiLAogICAgICAgICAibGlibWVkaWEiLAotICAgICAgICAibGlibWVkaWFkcm0iLAogICAgICAgICAibGlibWVkaWFuZGsiLAorICAgICAgICAibGlibWVkaWFuZGtfdXRpbHMiLAogICAgICAgICAibGlicG93ZXJtYW5hZ2VyIiwKICAgICBdLAogCiAgICAgc3RhdGljX2xpYnM6IFsKICAgICAgICAgImxpYm1lZGlhX2hlbHBlciIsCisgICAgICAgICJsaWJtZWRpYXBsYXllcjItcHJvdG9zIiwKKyAgICAgICAgImxpYm1lZGlhMl9qbmlfY29yZSIsCiAgICAgXSwKIAogICAgIG5hbWU6ICJsaWJzdGFnZWZyaWdodF9udXBsYXllcjIiLApkaWZmIC0tZ2l0IGEvbWVkaWEvbGlibWVkaWFwbGF5ZXIyL251cGxheWVyMi9HZW5lcmljU291cmNlMi5jcHAgYi9tZWRpYS9saWJtZWRpYXBsYXllcjIvbnVwbGF5ZXIyL0dlbmVyaWNTb3VyY2UyLmNwcAppbmRleCAxOTZiMTAzLi4xODYwYjBjIDEwMDY0NAotLS0gYS9tZWRpYS9saWJtZWRpYXBsYXllcjIvbnVwbGF5ZXIyL0dlbmVyaWNTb3VyY2UyLmNwcAorKysgYi9tZWRpYS9saWJtZWRpYXBsYXllcjIvbnVwbGF5ZXIyL0dlbmVyaWNTb3VyY2UyLmNwcApAQCAtMjEsMzAgKzIxLDE5IEBACiAjaW5jbHVkZSAiTnVQbGF5ZXIyRHJtLmgiCiAKICNpbmNsdWRlICJBbm90aGVyUGFja2V0U291cmNlLmgiCi0jaW5jbHVkZSA8YmluZGVyL0lTZXJ2aWNlTWFuYWdlci5oPgogI2luY2x1ZGUgPGN1dGlscy9wcm9wZXJ0aWVzLmg+CiAjaW5jbHVkZSA8bWVkaWEvRGF0YVNvdXJjZS5oPgogI2luY2x1ZGUgPG1lZGlhL01lZGlhQnVmZmVySG9sZGVyLmg+Ci0jaW5jbHVkZSA8bWVkaWEvSU1lZGlhRXh0cmFjdG9yU2VydmljZS5oPgotI2luY2x1ZGUgPG1lZGlhL0lNZWRpYVNvdXJjZS5oPgotI2luY2x1ZGUgPG1lZGlhL01lZGlhSFRUUFNlcnZpY2UuaD4KLSNpbmNsdWRlIDxtZWRpYS9NZWRpYUV4dHJhY3Rvci5oPgotI2luY2x1ZGUgPG1lZGlhL01lZGlhU291cmNlLmg+CiAjaW5jbHVkZSA8bWVkaWEvTmRrV3JhcHBlci5oPgogI2luY2x1ZGUgPG1lZGlhL3N0YWdlZnJpZ2h0L2ZvdW5kYXRpb24vQUJ1ZmZlci5oPgogI2luY2x1ZGUgPG1lZGlhL3N0YWdlZnJpZ2h0L2ZvdW5kYXRpb24vQURlYnVnLmg+CiAjaW5jbHVkZSA8bWVkaWEvc3RhZ2VmcmlnaHQvZm91bmRhdGlvbi9BTWVzc2FnZS5oPgotI2luY2x1ZGUgPG1lZGlhL3N0YWdlZnJpZ2h0L0RhdGFTb3VyY2VGYWN0b3J5Lmg+Ci0jaW5jbHVkZSA8bWVkaWEvc3RhZ2VmcmlnaHQvSW50ZXJmYWNlVXRpbHMuaD4KICNpbmNsdWRlIDxtZWRpYS9zdGFnZWZyaWdodC9NZWRpYUJ1ZmZlci5oPgogI2luY2x1ZGUgPG1lZGlhL3N0YWdlZnJpZ2h0L01lZGlhQ2xvY2suaD4KICNpbmNsdWRlIDxtZWRpYS9zdGFnZWZyaWdodC9NZWRpYURlZnMuaD4KLSNpbmNsdWRlIDxtZWRpYS9zdGFnZWZyaWdodC9NZWRpYUV4dHJhY3RvckZhY3RvcnkuaD4KICNpbmNsdWRlIDxtZWRpYS9zdGFnZWZyaWdodC9NZXRhRGF0YS5oPgogI2luY2x1ZGUgPG1lZGlhL3N0YWdlZnJpZ2h0L05ka1V0aWxzLmg+CiAjaW5jbHVkZSA8bWVkaWEvc3RhZ2VmcmlnaHQvVXRpbHMuaD4KLSNpbmNsdWRlICIuLi8uLi9saWJzdGFnZWZyaWdodC9pbmNsdWRlL051Q2FjaGVkU291cmNlMi5oIgotI2luY2x1ZGUgIi4uLy4uL2xpYnN0YWdlZnJpZ2h0L2luY2x1ZGUvSFRUUEJhc2UuaCIKIAogbmFtZXNwYWNlIGFuZHJvaWQgewogCkBAIC04OSw4ICs3OCw2IEBACiB2b2lkIE51UGxheWVyMjo6R2VuZXJpY1NvdXJjZTI6OnJlc2V0RGF0YVNvdXJjZSgpIHsKICAgICBBTE9HVigicmVzZXREYXRhU291cmNlIik7CiAKLSAgICBtSFRUUFNlcnZpY2UuY2xlYXIoKTsKLSAgICBtSHR0cFNvdXJjZS5jbGVhcigpOwogICAgIG1EaXNjb25uZWN0ZWQgPSBmYWxzZTsKICAgICBtVXJpLmNsZWFyKCk7CiAgICAgbVVyaUhlYWRlcnMuY2xlYXIoKTsKQEAgLTExMCw3ICs5Nyw2IEBACiB9CiAKIHN0YXR1c190IE51UGxheWVyMjo6R2VuZXJpY1NvdXJjZTI6OnNldERhdGFTb3VyY2UoCi0gICAgICAgIGNvbnN0IHNwPE1lZGlhSFRUUFNlcnZpY2U+ICZodHRwU2VydmljZSwKICAgICAgICAgY29uc3QgY2hhciAqdXJsLAogICAgICAgICBjb25zdCBLZXllZFZlY3RvcjxTdHJpbmc4LCBTdHJpbmc4PiAqaGVhZGVycykgewogICAgIE11dGV4OjpBdXRvbG9jayBfbChtTG9jayk7CkBAIC0xMTgsNyArMTA0LDYgQEAKIAogICAgIHJlc2V0RGF0YVNvdXJjZSgpOwogCi0gICAgbUhUVFBTZXJ2aWNlID0gaHR0cFNlcnZpY2U7CiAgICAgbVVyaSA9IHVybDsKIAogICAgIGlmIChoZWFkZXJzKSB7CkBAIC0xNTEsNyArMTM2LDcgQEAKICAgICBBTE9HVigic2V0RGF0YVNvdXJjZSAoc291cmNlOiAlcCkiLCBzb3VyY2UuZ2V0KCkpOwogCiAgICAgcmVzZXREYXRhU291cmNlKCk7Ci0gICAgbURhdGFTb3VyY2UgPSBzb3VyY2U7CisgICAgbURhdGFTb3VyY2VXcmFwcGVyID0gbmV3IEFNZWRpYURhdGFTb3VyY2VXcmFwcGVyKHNvdXJjZSk7CiAgICAgcmV0dXJuIE9LOwogfQogCkBAIC0xNjIsMjQgKzE0NywyMSBAQAogCiBzdGF0dXNfdCBOdVBsYXllcjI6OkdlbmVyaWNTb3VyY2UyOjppbml0RnJvbURhdGFTb3VyY2UoKSB7CiAgICAgbUV4dHJhY3RvciA9IG5ldyBBTWVkaWFFeHRyYWN0b3JXcmFwcGVyKEFNZWRpYUV4dHJhY3Rvcl9uZXcoKSk7Ci0gICAgQ0hFQ0sobURhdGFTb3VyY2UgIT0gTlVMTCB8fCBtRmQgIT0gLTEpOwotICAgIHNwPERhdGFTb3VyY2U+IGRhdGFTb3VyY2UgPSBtRGF0YVNvdXJjZTsKKyAgICBDSEVDSyhtRmQgPj0wIHx8IG1EYXRhU291cmNlV3JhcHBlciAhPSBOVUxMKTsKKyAgICBzcDxBTWVkaWFEYXRhU291cmNlV3JhcHBlcj4gYVNvdXJjZVdyYXBwZXIgPSBtRGF0YVNvdXJjZVdyYXBwZXI7CiAgICAgY29uc3QgaW50IGZkID0gbUZkOwotICAgIGNvbnN0IGludDY0X3Qgb2Zmc2V0ID0gbU9mZnNldDsKLSAgICBjb25zdCBpbnQ2NF90IGxlbmd0aCA9IG1MZW5ndGg7CiAKICAgICBtTG9jay51bmxvY2soKTsKICAgICAvLyBUaGlzIG1pZ2h0IHRha2UgbG9uZyB0aW1lIGlmIGRhdGEgc291cmNlIGlzIG5vdCByZWxpYWJsZS4KICAgICBzdGF0dXNfdCBlcnI7Ci0gICAgaWYgKGRhdGFTb3VyY2UgIT0gbnVsbHB0cikgewotICAgICAgICBtRGF0YVNvdXJjZVdyYXBwZXIgPSBuZXcgQU1lZGlhRGF0YVNvdXJjZVdyYXBwZXIoZGF0YVNvdXJjZSk7Ci0gICAgICAgIGVyciA9IG1FeHRyYWN0b3ItPnNldERhdGFTb3VyY2UobURhdGFTb3VyY2VXcmFwcGVyLT5nZXRBTWVkaWFEYXRhU291cmNlKCkpOworICAgIGlmIChhU291cmNlV3JhcHBlciAhPSBOVUxMKSB7CisgICAgICAgIGVyciA9IG1FeHRyYWN0b3ItPnNldERhdGFTb3VyY2UoYVNvdXJjZVdyYXBwZXItPmdldEFNZWRpYURhdGFTb3VyY2UoKSk7CiAgICAgfSBlbHNlIHsKLSAgICAgICAgZXJyID0gbUV4dHJhY3Rvci0+c2V0RGF0YVNvdXJjZShmZCwgb2Zmc2V0LCBsZW5ndGgpOworICAgICAgICBlcnIgPSBtRXh0cmFjdG9yLT5zZXREYXRhU291cmNlKGZkLCBtT2Zmc2V0LCBtTGVuZ3RoKTsKICAgICB9CiAKICAgICBpZiAoZXJyICE9IE9LKSB7Ci0gICAgICAgIEFMT0dFKCJpbml0RnJvbURhdGFTb3VyY2UsIGZhaWxlZCB0byBjcmVhdGUgZGF0YSBzb3VyY2UhIik7CisgICAgICAgIEFMT0dFKCJpbml0RnJvbURhdGFTb3VyY2UsIGZhaWxlZCB0byBzZXQgZXh0cmFjdG9yIGRhdGEgc291cmNlISIpOwogICAgICAgICBtTG9jay5sb2NrKCk7CiAgICAgICAgIHJldHVybiBVTktOT1dOX0VSUk9SOwogICAgIH0KQEAgLTE5MSwxMCArMTczLDggQEAKICAgICAgICAgcmV0dXJuIFVOS05PV05fRVJST1I7CiAgICAgfQogCi0gICAgbUxvY2subG9jaygpOwotICAgIG1GZCA9IC0xOwotICAgIG1EYXRhU291cmNlID0gZGF0YVNvdXJjZTsKICAgICBtRmlsZU1ldGEgPSBjb252ZXJ0TWVkaWFGb3JtYXRXcmFwcGVyVG9NZXRhRGF0YShtRXh0cmFjdG9yLT5nZXRGb3JtYXQoKSk7CisgICAgbUxvY2subG9jaygpOwogICAgIGlmIChtRmlsZU1ldGEgIT0gTlVMTCkgewogICAgICAgICBpbnQ2NF90IGR1cmF0aW9uOwogICAgICAgICBpZiAobUZpbGVNZXRhLT5maW5kSW50NjQoa0tleUR1cmF0aW9uLCAmZHVyYXRpb24pKSB7CkBAIC0yMTUsMTAgKzE5NSwxMCBAQAogICAgICAgICB9CiAKICAgICAgICAgc3A8QU1lZGlhRXh0cmFjdG9yV3JhcHBlcj4gdHJhY2tFeHRyYWN0b3IgPSBuZXcgQU1lZGlhRXh0cmFjdG9yV3JhcHBlcihBTWVkaWFFeHRyYWN0b3JfbmV3KCkpOwotICAgICAgICBpZiAobURhdGFTb3VyY2VXcmFwcGVyICE9IG51bGxwdHIpIHsKLSAgICAgICAgICAgIGVyciA9IHRyYWNrRXh0cmFjdG9yLT5zZXREYXRhU291cmNlKG1EYXRhU291cmNlV3JhcHBlci0+Z2V0QU1lZGlhRGF0YVNvdXJjZSgpKTsKKyAgICAgICAgaWYgKGFTb3VyY2VXcmFwcGVyICE9IE5VTEwpIHsKKyAgICAgICAgICAgIHRyYWNrRXh0cmFjdG9yLT5zZXREYXRhU291cmNlKGFTb3VyY2VXcmFwcGVyLT5nZXRBTWVkaWFEYXRhU291cmNlKCkpOwogICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgZXJyID0gdHJhY2tFeHRyYWN0b3ItPnNldERhdGFTb3VyY2UoZmQsIG9mZnNldCwgbGVuZ3RoKTsKKyAgICAgICAgICAgIHRyYWNrRXh0cmFjdG9yLT5zZXREYXRhU291cmNlKGZkLCBtT2Zmc2V0LCBtTGVuZ3RoKTsKICAgICAgICAgfQogCiAgICAgICAgIGNvbnN0IGNoYXIgKm1pbWU7CkBAIC0zMzAsMTMgKzMxMCwxMyBAQAogICAgICAgICBtTG9vcGVyLT51bnJlZ2lzdGVySGFuZGxlcihpZCgpKTsKICAgICAgICAgbUxvb3Blci0+c3RvcCgpOwogICAgIH0KLSAgICBpZiAobURhdGFTb3VyY2UgIT0gTlVMTCkgewotICAgICAgICBtRGF0YVNvdXJjZS0+Y2xvc2UoKTsKKyAgICBpZiAobURhdGFTb3VyY2VXcmFwcGVyICE9IE5VTEwpIHsKKyAgICAgICAgbURhdGFTb3VyY2VXcmFwcGVyLT5jbG9zZSgpOwogICAgIH0KICAgICByZXNldERhdGFTb3VyY2UoKTsKIH0KIAotdm9pZCBOdVBsYXllcjI6OkdlbmVyaWNTb3VyY2UyOjpwcmVwYXJlQXN5bmMoKSB7Cit2b2lkIE51UGxheWVyMjo6R2VuZXJpY1NvdXJjZTI6OnByZXBhcmVBc3luYyhpbnQ2NF90IHN0YXJ0VGltZVVzKSB7CiAgICAgTXV0ZXg6OkF1dG9sb2NrIF9sKG1Mb2NrKTsKICAgICBBTE9HVigicHJlcGFyZUFzeW5jOiAobG9vcGVyOiAlZCkiLCAobUxvb3BlciAhPSBOVUxMKSk7CiAKQEAgLTM1MSw1OSArMzMxLDQ1IEBACiAgICAgfQogCiAgICAgc3A8QU1lc3NhZ2U+IG1zZyA9IG5ldyBBTWVzc2FnZShrV2hhdFByZXBhcmVBc3luYywgdGhpcyk7CisgICAgbXNnLT5zZXRJbnQ2NCgic3RhcnRUaW1lVXMiLCBzdGFydFRpbWVVcyk7CisKICAgICBtc2ctPnBvc3QoKTsKIH0KIAotdm9pZCBOdVBsYXllcjI6OkdlbmVyaWNTb3VyY2UyOjpvblByZXBhcmVBc3luYygpIHsKLSAgICBBTE9HVigib25QcmVwYXJlQXN5bmM6IG1EYXRhU291cmNlOiAlZCIsIChtRGF0YVNvdXJjZSAhPSBOVUxMKSk7Cit2b2lkIE51UGxheWVyMjo6R2VuZXJpY1NvdXJjZTI6Om9uUHJlcGFyZUFzeW5jKGludDY0X3Qgc3RhcnRUaW1lVXMpIHsKKyAgICBBTE9HVigib25QcmVwYXJlQXN5bmM6IG1GZCAlZCBtVXJpICVzIG1EYXRhU291cmNlV3JhcHBlcjogJXAiLAorICAgICAgICAgICAgbUZkLCBtVXJpLmNfc3RyKCksIG1EYXRhU291cmNlV3JhcHBlci5nZXQoKSk7CiAKLSAgICAvLyBkZWxheWVkIGRhdGEgc291cmNlIGNyZWF0aW9uCi0gICAgaWYgKG1EYXRhU291cmNlID09IE5VTEwpIHsKLSAgICAgICAgLy8gc2V0IHRvIGZhbHNlIGZpcnN0LCBpZiB0aGUgZXh0cmFjdG9yCi0gICAgICAgIC8vIGNvbWVzIGJhY2sgYXMgc2VjdXJlLCBzZXQgaXQgdG8gdHJ1ZSB0aGVuLgotICAgICAgICBtSXNTZWN1cmUgPSBmYWxzZTsKLQotICAgICAgICBpZiAoIW1VcmkuZW1wdHkoKSkgewotICAgICAgICAgICAgY29uc3QgY2hhciogdXJpID0gbVVyaS5jX3N0cigpOwotICAgICAgICAgICAgU3RyaW5nOCBjb250ZW50VHlwZTsKLQotICAgICAgICAgICAgaWYgKCFzdHJuY2FzZWNtcCgiaHR0cDovLyIsIHVyaSwgNykgfHwgIXN0cm5jYXNlY21wKCJodHRwczovLyIsIHVyaSwgOCkpIHsKLSAgICAgICAgICAgICAgICBtSHR0cFNvdXJjZSA9IERhdGFTb3VyY2VGYWN0b3J5OjpDcmVhdGVNZWRpYUhUVFAobUhUVFBTZXJ2aWNlKTsKLSAgICAgICAgICAgICAgICBpZiAobUh0dHBTb3VyY2UgPT0gTlVMTCkgewotICAgICAgICAgICAgICAgICAgICBBTE9HRSgiRmFpbGVkIHRvIGNyZWF0ZSBodHRwIHNvdXJjZSEiKTsKLSAgICAgICAgICAgICAgICAgICAgbm90aWZ5UHJlcGFyZWRBbmRDbGVhbnVwKFVOS05PV05fRVJST1IpOwotICAgICAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBtTG9jay51bmxvY2soKTsKLSAgICAgICAgICAgIC8vIFRoaXMgbWlnaHQgdGFrZSBsb25nIHRpbWUgaWYgY29ubmVjdGlvbiBoYXMgc29tZSBpc3N1ZS4KLSAgICAgICAgICAgIHNwPERhdGFTb3VyY2U+IGRhdGFTb3VyY2UgPSBEYXRhU291cmNlRmFjdG9yeTo6Q3JlYXRlRnJvbVVSSSgKLSAgICAgICAgICAgICAgICAgICBtSFRUUFNlcnZpY2UsIHVyaSwgJm1VcmlIZWFkZXJzLCAmY29udGVudFR5cGUsCi0gICAgICAgICAgICAgICAgICAgc3RhdGljX2Nhc3Q8SFRUUEJhc2UgKj4obUh0dHBTb3VyY2UuZ2V0KCkpKTsKLSAgICAgICAgICAgIG1Mb2NrLmxvY2soKTsKLSAgICAgICAgICAgIGlmICghbURpc2Nvbm5lY3RlZCkgewotICAgICAgICAgICAgICAgIG1EYXRhU291cmNlID0gZGF0YVNvdXJjZTsKLSAgICAgICAgICAgIH0KKyAgICBpZiAoIW1VcmkuZW1wdHkoKSkgeworICAgICAgICBjb25zdCBjaGFyKiB1cmkgPSBtVXJpLmNfc3RyKCk7CisgICAgICAgIHNpemVfdCBudW1oZWFkZXJzID0gbVVyaUhlYWRlcnMuc2l6ZSgpOworICAgICAgICBjb25zdCBjaGFyICoqa2V5X3ZhbHVlcyA9IG51bWhlYWRlcnMgPyBuZXcgY29uc3QgY2hhciAqW251bWhlYWRlcnMgKiAyXSA6IE5VTEw7CisgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbnVtaGVhZGVyczsgKytpKSB7CisgICAgICAgICAgICBrZXlfdmFsdWVzW2kgKiAyXSA9IG1VcmlIZWFkZXJzLmtleUF0KGkpLmNfc3RyKCk7CisgICAgICAgICAgICBrZXlfdmFsdWVzW2kgKiAyICsgMV0gPSAgbVVyaUhlYWRlcnMudmFsdWVBdChpKS5jX3N0cigpOwogICAgICAgICB9Ci0KLSAgICAgICAgaWYgKG1GZCA9PSAtMSAmJiBtRGF0YVNvdXJjZSA9PSBOVUxMKSB7Ci0gICAgICAgICAgICBBTE9HRSgiRmFpbGVkIHRvIGNyZWF0ZSBkYXRhIHNvdXJjZSEiKTsKLSAgICAgICAgICAgIG5vdGlmeVByZXBhcmVkQW5kQ2xlYW51cChVTktOT1dOX0VSUk9SKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQorICAgICAgICBtTG9jay51bmxvY2soKTsKKyAgICAgICAgQU1lZGlhRGF0YVNvdXJjZSAqYVNvdXJjZSA9IEFNZWRpYURhdGFTb3VyY2VfbmV3VXJpKHVyaSwgbnVtaGVhZGVycywga2V5X3ZhbHVlcyk7CisgICAgICAgIG1Mb2NrLmxvY2soKTsKKyAgICAgICAgbURhdGFTb3VyY2VXcmFwcGVyID0gYVNvdXJjZSA/IG5ldyBBTWVkaWFEYXRhU291cmNlV3JhcHBlcihhU291cmNlKSA6IE5VTEw7CisgICAgICAgIGRlbGV0ZVtdIGtleV92YWx1ZXM7CisgICAgICAgIC8vIEZvciBjYWNoZWQgc3RyZWFtaW5nIGNhc2VzLCB3ZSBuZWVkIHRvIHdhaXQgZm9yIGVub3VnaAorICAgICAgICAvLyBidWZmZXJpbmcgYmVmb3JlIHJlcG9ydGluZyBwcmVwYXJlZC4KKyAgICAgICAgbUlzU3RyZWFtaW5nID0gIXN0cm5jYXNlY21wKCJodHRwOi8vIiwgdXJpLCA3KSB8fCAhc3RybmNhc2VjbXAoImh0dHBzOi8vIiwgdXJpLCA4KTsKICAgICB9CiAKLSAgICBpZiAobURhdGFTb3VyY2UgIT0gbnVsbHB0ciAmJiBtRGF0YVNvdXJjZS0+ZmxhZ3MoKSAmIERhdGFTb3VyY2U6OmtJc0NhY2hpbmdEYXRhU291cmNlKSB7Ci0gICAgICAgIG1DYWNoZWRTb3VyY2UgPSBzdGF0aWNfY2FzdDxOdUNhY2hlZFNvdXJjZTIgKj4obURhdGFTb3VyY2UuZ2V0KCkpOworICAgIGlmIChtRGlzY29ubmVjdGVkIHx8IChtRmQgPCAwICYmIG1EYXRhU291cmNlV3JhcHBlciA9PSBOVUxMKSkgeworICAgICAgICBBTE9HRSgibURpc2Nvbm5lY3RlZCglZCkgb3IgRmFpbGVkIHRvIGNyZWF0ZSBkYXRhIHNvdXJjZSEiLCBtRGlzY29ubmVjdGVkKTsKKyAgICAgICAgbm90aWZ5UHJlcGFyZWRBbmRDbGVhbnVwKFVOS05PV05fRVJST1IpOworICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgLy8gRm9yIGNhY2hlZCBzdHJlYW1pbmcgY2FzZXMsIHdlIG5lZWQgdG8gd2FpdCBmb3IgZW5vdWdoCi0gICAgLy8gYnVmZmVyaW5nIGJlZm9yZSByZXBvcnRpbmcgcHJlcGFyZWQuCi0gICAgbUlzU3RyZWFtaW5nID0gKG1DYWNoZWRTb3VyY2UgIT0gTlVMTCk7Ci0KICAgICAvLyBpbml0IGV4dHJhY3RvciBmcm9tIGRhdGEgc291cmNlCiAgICAgc3RhdHVzX3QgZXJyID0gaW5pdEZyb21EYXRhU291cmNlKCk7CisgICAgaWYgKG1GZCA+PSAwKSB7CisgICAgICAgIGNsb3NlKG1GZCk7CisgICAgICAgIG1GZCA9IC0xOworICAgIH0KIAogICAgIGlmIChlcnIgIT0gT0spIHsKICAgICAgICAgQUxPR0UoIkZhaWxlZCB0byBpbml0IGZyb20gZGF0YSBzb3VyY2UhIik7CkBAIC00MzAsNiArMzk2LDcgQEAKICAgICAgICAgICAgIEZMQUdfQ0FOX1NFRUtfRk9SV0FSRCB8CiAgICAgICAgICAgICBGTEFHX0NBTl9TRUVLKTsKIAorICAgIGRvU2VlayhzdGFydFRpbWVVcywgTWVkaWFQbGF5ZXIyU2Vla01vZGU6OlNFRUtfQ0xPU0VTVCk7CiAgICAgZmluaXNoUHJlcGFyZUFzeW5jKCk7CiAKICAgICBBTE9HVigib25QcmVwYXJlQXN5bmM6IERvbmUiKTsKQEAgLTQzOSw4ICs0MDYsOCBAQAogICAgIEFMT0dWKCJmaW5pc2hQcmVwYXJlQXN5bmMiKTsKIAogICAgIGlmIChtSXNTdHJlYW1pbmcpIHsKLSAgICAgICAgbUNhY2hlZFNvdXJjZS0+cmVzdW1lRmV0Y2hpbmdJZk5lY2Vzc2FyeSgpOwogICAgICAgICBtUHJlcGFyaW5nID0gdHJ1ZTsKKyAgICAgICAgKyttUG9sbEJ1ZmZlcmluZ0dlbmVyYXRpb247CiAgICAgICAgIHNjaGVkdWxlUG9sbEJ1ZmZlcmluZygpOwogICAgIH0gZWxzZSB7CiAgICAgICAgIG5vdGlmeVByZXBhcmVkKCk7CkBAIC00NTcsOSArNDI0LDcgQEAKIAogdm9pZCBOdVBsYXllcjI6OkdlbmVyaWNTb3VyY2UyOjpub3RpZnlQcmVwYXJlZEFuZENsZWFudXAoc3RhdHVzX3QgZXJyKSB7CiAgICAgaWYgKGVyciAhPSBPSykgewotICAgICAgICBtRGF0YVNvdXJjZS5jbGVhcigpOwotICAgICAgICBtQ2FjaGVkU291cmNlLmNsZWFyKCk7Ci0gICAgICAgIG1IdHRwU291cmNlLmNsZWFyKCk7CisgICAgICAgIG1EYXRhU291cmNlV3JhcHBlci5jbGVhcigpOwogCiAgICAgICAgIG1CaXRyYXRlID0gLTE7CiAgICAgICAgIG1QcmV2QnVmZmVyUGVyY2VudGFnZSA9IC0xOwpAQCAtNDk5LDUzICs0NjQsMjcgQEAKIH0KIAogdm9pZCBOdVBsYXllcjI6OkdlbmVyaWNTb3VyY2UyOjpkaXNjb25uZWN0KCkgewotICAgIHNwPERhdGFTb3VyY2U+IGRhdGFTb3VyY2UsIGh0dHBTb3VyY2U7CiAgICAgewogICAgICAgICBNdXRleDo6QXV0b2xvY2sgX2wobUxvY2spOwotICAgICAgICBkYXRhU291cmNlID0gbURhdGFTb3VyY2U7Ci0gICAgICAgIGh0dHBTb3VyY2UgPSBtSHR0cFNvdXJjZTsKICAgICAgICAgbURpc2Nvbm5lY3RlZCA9IHRydWU7CiAgICAgfQotCi0gICAgaWYgKGRhdGFTb3VyY2UgIT0gTlVMTCkgewotICAgICAgICAvLyBkaXNjb25uZWN0IGRhdGEgc291cmNlCi0gICAgICAgIGlmIChkYXRhU291cmNlLT5mbGFncygpICYgRGF0YVNvdXJjZTo6a0lzQ2FjaGluZ0RhdGFTb3VyY2UpIHsKLSAgICAgICAgICAgIHN0YXRpY19jYXN0PE51Q2FjaGVkU291cmNlMiAqPihkYXRhU291cmNlLmdldCgpKS0+ZGlzY29ubmVjdCgpOwotICAgICAgICB9Ci0gICAgfSBlbHNlIGlmIChodHRwU291cmNlICE9IE5VTEwpIHsKLSAgICAgICAgc3RhdGljX2Nhc3Q8SFRUUEJhc2UgKj4oaHR0cFNvdXJjZS5nZXQoKSktPmRpc2Nvbm5lY3QoKTsKKyAgICBpZiAobURhdGFTb3VyY2VXcmFwcGVyICE9IE5VTEwpIHsKKyAgICAgICAgbURhdGFTb3VyY2VXcmFwcGVyLT5jbG9zZSgpOwogICAgIH0KLQotICAgIG1EYXRhU291cmNlV3JhcHBlciA9IE5VTEw7Ci0KIH0KIAogc3RhdHVzX3QgTnVQbGF5ZXIyOjpHZW5lcmljU291cmNlMjo6ZmVlZE1vcmVUU0RhdGEoKSB7CiAgICAgcmV0dXJuIE9LOwogfQogCi12b2lkIE51UGxheWVyMjo6R2VuZXJpY1NvdXJjZTI6OnNlbmRDYWNoZVN0YXRzKCkgewotICAgIGludDMyX3Qga2JwcyA9IDA7Ci0gICAgc3RhdHVzX3QgZXJyID0gVU5LTk9XTl9FUlJPUjsKLQotICAgIGlmIChtQ2FjaGVkU291cmNlICE9IE5VTEwpIHsKLSAgICAgICAgZXJyID0gbUNhY2hlZFNvdXJjZS0+Z2V0RXN0aW1hdGVkQmFuZHdpZHRoS2Jwcygma2Jwcyk7Ci0gICAgfQotCi0gICAgaWYgKGVyciA9PSBPSykgewotICAgICAgICBzcDxBTWVzc2FnZT4gbm90aWZ5ID0gZHVwTm90aWZ5KCk7Ci0gICAgICAgIG5vdGlmeS0+c2V0SW50MzIoIndoYXQiLCBrV2hhdENhY2hlU3RhdHMpOwotICAgICAgICBub3RpZnktPnNldEludDMyKCJiYW5kd2lkdGgiLCBrYnBzKTsKLSAgICAgICAgbm90aWZ5LT5wb3N0KCk7Ci0gICAgfQotfQotCiB2b2lkIE51UGxheWVyMjo6R2VuZXJpY1NvdXJjZTI6Om9uTWVzc2FnZVJlY2VpdmVkKGNvbnN0IHNwPEFNZXNzYWdlPiAmbXNnKSB7CiAgICAgTXV0ZXg6OkF1dG9sb2NrIF9sKG1Mb2NrKTsKICAgICBzd2l0Y2ggKG1zZy0+d2hhdCgpKSB7CiAgICAgICBjYXNlIGtXaGF0UHJlcGFyZUFzeW5jOgogICAgICAgewotICAgICAgICAgIG9uUHJlcGFyZUFzeW5jKCk7CisgICAgICAgICAgaW50NjRfdCBzdGFydFRpbWVVczsKKyAgICAgICAgICBDSEVDSyhtc2ctPmZpbmRJbnQ2NCgic3RhcnRUaW1lVXMiLCAmc3RhcnRUaW1lVXMpKTsKKyAgICAgICAgICBvblByZXBhcmVBc3luYyhzdGFydFRpbWVVcyk7CiAgICAgICAgICAgYnJlYWs7CiAgICAgICB9CiAgICAgICBjYXNlIGtXaGF0RmV0Y2hTdWJ0aXRsZURhdGE6CkBAIC04MzUsOCArNzc0LDYgQEAKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGlmICh0cmFjay0+bVBhY2tldHMtPmdldEF2YWlsYWJsZUJ1ZmZlckNvdW50KCZmaW5hbFJlc3VsdCkgPCAyCiAgICAgICAgICAgICAgICAgJiYgIW1TZW50UGF1c2VPbkJ1ZmZlcmluZyAmJiAhbVByZXBhcmluZykgewotICAgICAgICAgICAgICAgIG1DYWNoZWRTb3VyY2UtPnJlc3VtZUZldGNoaW5nSWZOZWNlc3NhcnkoKTsKLSAgICAgICAgICAgICAgICBzZW5kQ2FjaGVTdGF0cygpOwogICAgICAgICAgICAgICAgIG1TZW50UGF1c2VPbkJ1ZmZlcmluZyA9IHRydWU7CiAgICAgICAgICAgICAgICAgc3A8QU1lc3NhZ2U+IG5vdGlmeSA9IGR1cE5vdGlmeSgpOwogICAgICAgICAgICAgICAgIG5vdGlmeS0+c2V0SW50MzIoIndoYXQiLCBrV2hhdFBhdXNlT25CdWZmZXJpbmdTdGFydCk7CkBAIC0xMzkyLDcgKzEzMjksNiBAQAogICAgICAgICAgICAgICAgICAgICAgICAgbm90aWZ5UHJlcGFyZWQoKTsKICAgICAgICAgICAgICAgICAgICAgICAgIG1QcmVwYXJpbmcgPSBmYWxzZTsKICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHNlbmRDYWNoZVN0YXRzKCk7CiAgICAgICAgICAgICAgICAgICAgICAgICBtU2VudFBhdXNlT25CdWZmZXJpbmcgPSBmYWxzZTsKICAgICAgICAgICAgICAgICAgICAgICAgIHNwPEFNZXNzYWdlPiBub3RpZnkgPSBkdXBOb3RpZnkoKTsKICAgICAgICAgICAgICAgICAgICAgICAgIG5vdGlmeS0+c2V0SW50MzIoIndoYXQiLCBrV2hhdFJlc3VtZU9uQnVmZmVyaW5nRW5kKTsKQEAgLTE0NDQsNDcgKzEzODAsMzEgQEAKIH0KIAogdm9pZCBOdVBsYXllcjI6OkdlbmVyaWNTb3VyY2UyOjpzY2hlZHVsZVBvbGxCdWZmZXJpbmcoKSB7Ci0gICAgc3A8QU1lc3NhZ2U+IG1zZyA9IG5ldyBBTWVzc2FnZShrV2hhdFBvbGxCdWZmZXJpbmcsIHRoaXMpOwotICAgIG1zZy0+c2V0SW50MzIoImdlbmVyYXRpb24iLCBtUG9sbEJ1ZmZlcmluZ0dlbmVyYXRpb24pOwotICAgIC8vIEVucXVpcmVzIGJ1ZmZlcmluZyBzdGF0dXMgZXZlcnkgc2Vjb25kLgotICAgIG1zZy0+cG9zdCgxMDAwMDAwbGwpOworICAgIGlmIChtSXNTdHJlYW1pbmcpIHsKKyAgICAgICAgc3A8QU1lc3NhZ2U+IG1zZyA9IG5ldyBBTWVzc2FnZShrV2hhdFBvbGxCdWZmZXJpbmcsIHRoaXMpOworICAgICAgICBtc2ctPnNldEludDMyKCJnZW5lcmF0aW9uIiwgbVBvbGxCdWZmZXJpbmdHZW5lcmF0aW9uKTsKKyAgICAgICAgLy8gRW5xdWlyZXMgYnVmZmVyaW5nIHN0YXR1cyBldmVyeSBzZWNvbmQuCisgICAgICAgIG1zZy0+cG9zdCgxMDAwMDAwbGwpOworICAgIH0KIH0KIAogdm9pZCBOdVBsYXllcjI6OkdlbmVyaWNTb3VyY2UyOjpvblBvbGxCdWZmZXJpbmcoKSB7Ci0gICAgc3RhdHVzX3QgZmluYWxTdGF0dXMgPSBVTktOT1dOX0VSUk9SOwogICAgIGludDY0X3QgY2FjaGVkRHVyYXRpb25VcyA9IC0xbGw7Ci0gICAgc3NpemVfdCBjYWNoZWREYXRhUmVtYWluaW5nID0gLTE7CiAKLSAgICBpZiAobUNhY2hlZFNvdXJjZSAhPSBOVUxMKSB7Ci0gICAgICAgIGNhY2hlZERhdGFSZW1haW5pbmcgPSBtQ2FjaGVkU291cmNlLT5hcHByb3hEYXRhUmVtYWluaW5nKCZmaW5hbFN0YXR1cyk7Ci0KLSAgICAgICAgaWYgKGZpbmFsU3RhdHVzID09IE9LKSB7Ci0gICAgICAgICAgICBvZmY2NF90IHNpemU7Ci0gICAgICAgICAgICBpbnQ2NF90IGJpdHJhdGUgPSAwbGw7Ci0gICAgICAgICAgICBpZiAobUR1cmF0aW9uVXMgPiAwICYmIG1DYWNoZWRTb3VyY2UtPmdldFNpemUoJnNpemUpID09IE9LKSB7Ci0gICAgICAgICAgICAgICAgLy8gfGJpdHJhdGV8IHVzZXMgYml0cy9zZWNvbmQgdW5pdCwgd2hpbGUgc2l6ZSBpcyBudW1iZXIgb2YgYnl0ZXMuCi0gICAgICAgICAgICAgICAgYml0cmF0ZSA9IHNpemUgKiA4MDAwMDAwbGwgLyBtRHVyYXRpb25VczsKLSAgICAgICAgICAgIH0gZWxzZSBpZiAobUJpdHJhdGUgPiAwKSB7Ci0gICAgICAgICAgICAgICAgYml0cmF0ZSA9IG1CaXRyYXRlOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYgKGJpdHJhdGUgPiAwKSB7Ci0gICAgICAgICAgICAgICAgY2FjaGVkRHVyYXRpb25VcyA9IGNhY2hlZERhdGFSZW1haW5pbmcgKiA4MDAwMDAwbGwgLyBiaXRyYXRlOwotICAgICAgICAgICAgfQotICAgICAgICB9CisgICAgc3A8QU1lZGlhRXh0cmFjdG9yV3JhcHBlcj4gZXh0cmFjdG9yOworICAgIGlmIChtVmlkZW9UcmFjay5tRXh0cmFjdG9yICE9IE5VTEwpIHsKKyAgICAgICAgZXh0cmFjdG9yID0gbVZpZGVvVHJhY2subUV4dHJhY3RvcjsKKyAgICB9IGVsc2UgaWYgKG1BdWRpb1RyYWNrLm1FeHRyYWN0b3IgIT0gTlVMTCkgeworICAgICAgICBleHRyYWN0b3IgPSBtQXVkaW9UcmFjay5tRXh0cmFjdG9yOwogICAgIH0KIAotICAgIGlmIChmaW5hbFN0YXR1cyAhPSBPSykgewotICAgICAgICBBTE9HVigib25Qb2xsQnVmZmVyaW5nOiBFT1MgKGZpbmFsU3RhdHVzID0gJWQpIiwgZmluYWxTdGF0dXMpOwotCi0gICAgICAgIGlmIChmaW5hbFN0YXR1cyA9PSBFUlJPUl9FTkRfT0ZfU1RSRUFNKSB7Ci0gICAgICAgICAgICBub3RpZnlCdWZmZXJpbmdVcGRhdGUoMTAwKTsKLSAgICAgICAgfQotCi0gICAgICAgIHJldHVybjsKKyAgICBpZiAoZXh0cmFjdG9yICE9IE5VTEwpIHsKKyAgICAgICAgY2FjaGVkRHVyYXRpb25VcyA9IGV4dHJhY3Rvci0+Z2V0Q2FjaGVkRHVyYXRpb24oKTsKICAgICB9CiAKICAgICBpZiAoY2FjaGVkRHVyYXRpb25VcyA+PSAwbGwpIHsKLSAgICAgICAgaWYgKG1EdXJhdGlvblVzID4gMGxsKSB7CisgICAgICAgIHNzaXplX3Qgc2FtcGxlU2l6ZSA9IGV4dHJhY3Rvci0+Z2V0U2FtcGxlU2l6ZSgpOworICAgICAgICBpZiAoc2FtcGxlU2l6ZSA+PSAwbGwpIHsKICAgICAgICAgICAgIGludDY0X3QgY2FjaGVkUG9zVXMgPSBnZXRMYXN0UmVhZFBvc2l0aW9uKCkgKyBjYWNoZWREdXJhdGlvblVzOwogICAgICAgICAgICAgaW50IHBlcmNlbnRhZ2UgPSAxMDAuMCAqIGNhY2hlZFBvc1VzIC8gbUR1cmF0aW9uVXM7CiAgICAgICAgICAgICBpZiAocGVyY2VudGFnZSA+IDEwMCkgewpAQCAtMTQ5Miw5ICsxNDEyLDExIEBACiAgICAgICAgICAgICB9CiAKICAgICAgICAgICAgIG5vdGlmeUJ1ZmZlcmluZ1VwZGF0ZShwZXJjZW50YWdlKTsKKyAgICAgICAgICAgIEFMT0dWKCJvblBvbGxCdWZmZXJpbmc6IGNhY2hlZER1cmF0aW9uVXMgJS4xZiBzZWMiLCBjYWNoZWREdXJhdGlvblVzIC8gMTAwMDAwMC4wZik7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBub3RpZnlCdWZmZXJpbmdVcGRhdGUoMTAwKTsKKyAgICAgICAgICAgIEFMT0dWKCJvblBvbGxCdWZmZXJpbmc6IEVPUyIpOwogICAgICAgICB9Ci0KLSAgICAgICAgQUxPR1YoIm9uUG9sbEJ1ZmZlcmluZzogY2FjaGVkRHVyYXRpb25VcyAlLjFmIHNlYyIsIGNhY2hlZER1cmF0aW9uVXMgLyAxMDAwMDAwLjBmKTsKICAgICB9CiAKICAgICBzY2hlZHVsZVBvbGxCdWZmZXJpbmcoKTsKQEAgLTE1OTEsMTUgKzE1MTMsMjAgQEAKICAgICAgICAgcmV0dXJuIE9LOyAvLyBzb3VyY2Ugd2l0aG91dCBEUk0gaW5mbwogICAgIH0KIAotICAgIHNwPEFCdWZmZXI+IGRybUluZm9CdWZmZXIgPSBOdVBsYXllcjJEcm06OnJldHJpZXZlRHJtSW5mbyhwc3NoSW5mbyk7Ci0gICAgQUxPR1YoImNoZWNrRHJtSW5mbzogTUVESUFfRFJNX0lORk8gUFNTSCBkcm0gaW5mbyBzaXplOiAlZCIsIChpbnQpZHJtSW5mb0J1ZmZlci0+c2l6ZSgpKTsKKyAgICBQbGF5ZXJNZXNzYWdlIHBsYXllck1zZzsKKyAgICBzdGF0dXNfdCByZXQgPSBOdVBsYXllcjJEcm06OnJldHJpZXZlRHJtSW5mbyhwc3NoSW5mbywgJnBsYXllck1zZyk7CisgICAgQUxPR1YoImNoZWNrRHJtSW5mbzogTUVESUFfRFJNX0lORk8gUFNTSCBkcm0gaW5mbyBzaXplOiAlZCIsIChpbnQpcGxheWVyTXNnLkJ5dGVTaXplKCkpOwogCi0gICAgaWYgKGRybUluZm9CdWZmZXItPnNpemUoKSA9PSAwKSB7Ci0gICAgICAgIEFMT0dFKCJjaGVja0RybUluZm86IFVuZXhwZWN0ZWQgcGFyY2VsIHNpemU6IDAiKTsKKyAgICBpZiAocmV0ICE9IE9LKSB7CisgICAgICAgIEFMT0dFKCJjaGVja0RybUluZm86IGZhaWxlZCB0byByZXRyaXZlIERybUluZm8gJWQiLCByZXQpOwogICAgICAgICByZXR1cm4gVU5LTk9XTl9FUlJPUjsKICAgICB9CiAKLSAgICBub3RpZnlEcm1JbmZvKGRybUluZm9CdWZmZXIpOworICAgIGludCBzaXplID0gcGxheWVyTXNnLkJ5dGVTaXplKCk7CisgICAgc3A8QUJ1ZmZlcj4gZHJtSW5mb0J1ZiA9IG5ldyBBQnVmZmVyKHNpemUpOworICAgIHBsYXllck1zZy5TZXJpYWxpemVUb0FycmF5KGRybUluZm9CdWYtPmRhdGEoKSwgc2l6ZSk7CisgICAgZHJtSW5mb0J1Zi0+c2V0UmFuZ2UoMCwgc2l6ZSk7CisgICAgbm90aWZ5RHJtSW5mbyhkcm1JbmZvQnVmKTsKIAogICAgIHJldHVybiBPSzsKIH0KZGlmZiAtLWdpdCBhL21lZGlhL2xpYm1lZGlhcGxheWVyMi9udXBsYXllcjIvR2VuZXJpY1NvdXJjZTIuaCBiL21lZGlhL2xpYm1lZGlhcGxheWVyMi9udXBsYXllcjIvR2VuZXJpY1NvdXJjZTIuaAppbmRleCA5YmM1MTgyLi5hZGUxYWEzIDEwMDY0NAotLS0gYS9tZWRpYS9saWJtZWRpYXBsYXllcjIvbnVwbGF5ZXIyL0dlbmVyaWNTb3VyY2UyLmgKKysrIGIvbWVkaWEvbGlibWVkaWFwbGF5ZXIyL251cGxheWVyMi9HZW5lcmljU291cmNlMi5oCkBAIC0zNywxMSArMzcsOSBAQAogY2xhc3MgRGF0YVNvdXJjZTsKIGNsYXNzIElEYXRhU291cmNlOwogY2xhc3MgSU1lZGlhU291cmNlOwotc3RydWN0IE1lZGlhSFRUUFNlcnZpY2U7CiBzdHJ1Y3QgTWVkaWFTb3VyY2U7CiBjbGFzcyBNZWRpYUJ1ZmZlcjsKIHN0cnVjdCBNZWRpYUNsb2NrOwotc3RydWN0IE51Q2FjaGVkU291cmNlMjsKIAogc3RydWN0IE51UGxheWVyMjo6R2VuZXJpY1NvdXJjZTIgOiBwdWJsaWMgTnVQbGF5ZXIyOjpTb3VyY2UsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHB1YmxpYyBNZWRpYUJ1ZmZlck9ic2VydmVyIC8vIE1vZHVsYXIgRFJNCkBAIC01MCw3ICs0OCw2IEBACiAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3A8TWVkaWFDbG9jaz4gJm1lZGlhQ2xvY2spOwogCiAgICAgc3RhdHVzX3Qgc2V0RGF0YVNvdXJjZSgKLSAgICAgICAgICAgIGNvbnN0IHNwPE1lZGlhSFRUUFNlcnZpY2U+ICZodHRwU2VydmljZSwKICAgICAgICAgICAgIGNvbnN0IGNoYXIgKnVybCwKICAgICAgICAgICAgIGNvbnN0IEtleWVkVmVjdG9yPFN0cmluZzgsIFN0cmluZzg+ICpoZWFkZXJzKTsKIApAQCAtNjIsNyArNTksNyBAQAogICAgICAgICAgICAgQnVmZmVyaW5nU2V0dGluZ3MqIGJ1ZmZlcmluZyAvKiBub25udWxsICovKSBvdmVycmlkZTsKICAgICB2aXJ0dWFsIHN0YXR1c190IHNldEJ1ZmZlcmluZ1NldHRpbmdzKGNvbnN0IEJ1ZmZlcmluZ1NldHRpbmdzJiBidWZmZXJpbmcpIG92ZXJyaWRlOwogCi0gICAgdmlydHVhbCB2b2lkIHByZXBhcmVBc3luYygpOworICAgIHZpcnR1YWwgdm9pZCBwcmVwYXJlQXN5bmMoaW50NjRfdCBzdGFydFRpbWVVcyk7CiAKICAgICB2aXJ0dWFsIHZvaWQgc3RhcnQoKTsKICAgICB2aXJ0dWFsIHZvaWQgc3RvcCgpOwpAQCAtMTUxLDcgKzE0OCw2IEBACiAgICAgYm9vbCBtSXNTdHJlYW1pbmc7CiAgICAgdWlkX3QgbVVJRDsKICAgICBjb25zdCBzcDxNZWRpYUNsb2NrPiBtTWVkaWFDbG9jazsKLSAgICBzcDxNZWRpYUhUVFBTZXJ2aWNlPiBtSFRUUFNlcnZpY2U7CiAgICAgQVN0cmluZyBtVXJpOwogICAgIEtleWVkVmVjdG9yPFN0cmluZzgsIFN0cmluZzg+IG1VcmlIZWFkZXJzOwogICAgIGludCBtRmQ7CkBAIC0xNTksOSArMTU1LDYgQEAKICAgICBpbnQ2NF90IG1MZW5ndGg7CiAKICAgICBib29sIG1EaXNjb25uZWN0ZWQ7Ci0gICAgc3A8RGF0YVNvdXJjZT4gbURhdGFTb3VyY2U7Ci0gICAgc3A8TnVDYWNoZWRTb3VyY2UyPiBtQ2FjaGVkU291cmNlOwotICAgIHNwPERhdGFTb3VyY2U+IG1IdHRwU291cmNlOwogICAgIHNwPE1ldGFEYXRhPiBtRmlsZU1ldGE7CiAgICAgc3A8QU1lZGlhRGF0YVNvdXJjZVdyYXBwZXI+IG1EYXRhU291cmNlV3JhcHBlcjsKICAgICBzcDxBTWVkaWFFeHRyYWN0b3JXcmFwcGVyPiBtRXh0cmFjdG9yOwpAQCAtMTk0LDcgKzE4Nyw3IEBACiAgICAgdm9pZCBvblNlZWsoY29uc3Qgc3A8QU1lc3NhZ2U+JiBtc2cpOwogICAgIHN0YXR1c190IGRvU2VlayhpbnQ2NF90IHNlZWtUaW1lVXMsIE1lZGlhUGxheWVyMlNlZWtNb2RlIG1vZGUpOwogCi0gICAgdm9pZCBvblByZXBhcmVBc3luYygpOworICAgIHZvaWQgb25QcmVwYXJlQXN5bmMoaW50NjRfdCBzdGFydFRpbWVVcyk7CiAKICAgICB2b2lkIGZldGNoVGV4dERhdGEoCiAgICAgICAgICAgICB1aW50MzJfdCB3aGF0LCBtZWRpYV90cmFja190eXBlIHR5cGUsCkBAIC0yMzIsOCArMjI1LDYgQEAKICAgICB2b2lkIG9uUG9sbEJ1ZmZlcmluZygpOwogICAgIHZvaWQgbm90aWZ5QnVmZmVyaW5nVXBkYXRlKGludDMyX3QgcGVyY2VudGFnZSk7CiAKLSAgICB2b2lkIHNlbmRDYWNoZVN0YXRzKCk7Ci0KICAgICBzcDxBTWVzc2FnZT4gZ2V0Rm9ybWF0X2woYm9vbCBhdWRpbyk7CiAgICAgc3A8TWV0YURhdGE+IGdldEZvcm1hdE1ldGFfbChib29sIGF1ZGlvKTsKICAgICBpbnQzMl90IGdldERhdGFHZW5lcmF0aW9uKG1lZGlhX3RyYWNrX3R5cGUgdHlwZSkgY29uc3Q7CmRpZmYgLS1naXQgYS9tZWRpYS9saWJtZWRpYXBsYXllcjIvbnVwbGF5ZXIyL0hUVFBMaXZlU291cmNlMi5jcHAgYi9tZWRpYS9saWJtZWRpYXBsYXllcjIvbnVwbGF5ZXIyL0hUVFBMaXZlU291cmNlMi5jcHAKaW5kZXggYTYxY2FjZC4uMTc1YmU1MyAxMDA2NDQKLS0tIGEvbWVkaWEvbGlibWVkaWFwbGF5ZXIyL251cGxheWVyMi9IVFRQTGl2ZVNvdXJjZTIuY3BwCisrKyBiL21lZGlhL2xpYm1lZGlhcGxheWVyMi9udXBsYXllcjIvSFRUUExpdmVTb3VyY2UyLmNwcApAQCAtOTksNyArOTksOCBAQAogICAgIHJldHVybiBPSzsKIH0KIAotdm9pZCBOdVBsYXllcjI6OkhUVFBMaXZlU291cmNlMjo6cHJlcGFyZUFzeW5jKCkgeworLy8gVE9ETzogZmV0Y2ggZGF0YSBzdGFydGluZyBmcm9tIHxzdGFydFRpbWVVc3wKK3ZvaWQgTnVQbGF5ZXIyOjpIVFRQTGl2ZVNvdXJjZTI6OnByZXBhcmVBc3luYyhpbnQ2NF90IC8qIHN0YXJ0VGltZVVzICovKSB7CiAgICAgaWYgKG1MaXZlTG9vcGVyID09IE5VTEwpIHsKICAgICAgICAgbUxpdmVMb29wZXIgPSBuZXcgQUxvb3BlcjsKICAgICAgICAgbUxpdmVMb29wZXItPnNldE5hbWUoImh0dHAgbGl2ZSIpOwpkaWZmIC0tZ2l0IGEvbWVkaWEvbGlibWVkaWFwbGF5ZXIyL251cGxheWVyMi9IVFRQTGl2ZVNvdXJjZTIuaCBiL21lZGlhL2xpYm1lZGlhcGxheWVyMi9udXBsYXllcjIvSFRUUExpdmVTb3VyY2UyLmgKaW5kZXggOTdkMzY1My4uOGZjNzFlMiAxMDA2NDQKLS0tIGEvbWVkaWEvbGlibWVkaWFwbGF5ZXIyL251cGxheWVyMi9IVFRQTGl2ZVNvdXJjZTIuaAorKysgYi9tZWRpYS9saWJtZWRpYXBsYXllcjIvbnVwbGF5ZXIyL0hUVFBMaXZlU291cmNlMi5oCkBAIC0zOCw3ICszOCw3IEBACiAgICAgICAgICAgICBCdWZmZXJpbmdTZXR0aW5ncyogYnVmZmVyaW5nIC8qIG5vbm51bGwgKi8pIG92ZXJyaWRlOwogICAgIHZpcnR1YWwgc3RhdHVzX3Qgc2V0QnVmZmVyaW5nU2V0dGluZ3MoY29uc3QgQnVmZmVyaW5nU2V0dGluZ3MmIGJ1ZmZlcmluZykgb3ZlcnJpZGU7CiAKLSAgICB2aXJ0dWFsIHZvaWQgcHJlcGFyZUFzeW5jKCk7CisgICAgdmlydHVhbCB2b2lkIHByZXBhcmVBc3luYyhpbnQ2NF90IHN0YXJ0VGltZVVzKTsKICAgICB2aXJ0dWFsIHZvaWQgc3RhcnQoKTsKIAogICAgIHZpcnR1YWwgc3RhdHVzX3QgZGVxdWV1ZUFjY2Vzc1VuaXQoYm9vbCBhdWRpbywgc3A8QUJ1ZmZlcj4gKmFjY2Vzc1VuaXQpOwpkaWZmIC0tZ2l0IGEvbWVkaWEvbGlibWVkaWFwbGF5ZXIyL251cGxheWVyMi9KTWVkaWFQbGF5ZXIyVXRpbHMuY3BwIGIvbWVkaWEvbGlibWVkaWFwbGF5ZXIyL251cGxheWVyMi9KTWVkaWFQbGF5ZXIyVXRpbHMuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJiZDIyYmMKLS0tIC9kZXYvbnVsbAorKysgYi9tZWRpYS9saWJtZWRpYXBsYXllcjIvbnVwbGF5ZXIyL0pNZWRpYVBsYXllcjJVdGlscy5jcHAKQEAgLTAsMCArMSw2NiBAQAorLyoKKyAqIENvcHlyaWdodCAyMDE4LCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KKworLy8jZGVmaW5lIExPR19OREVCVUcgMAorI2RlZmluZSBMT0dfVEFHICJKTWVkaWFQbGF5ZXIyVXRpbHMiCisKKyNpbmNsdWRlICJKTWVkaWFQbGF5ZXIyVXRpbHMuaCIKKyNpbmNsdWRlIDxtZWRpYXBsYXllcjIvSmF2YVZNSGVscGVyLmg+CisKKyNpbmNsdWRlIDxtZWRpYS9zdGFnZWZyaWdodC9NZWRpYURlZnMuaD4KKyNpbmNsdWRlIDxtZWRpYS9zdGFnZWZyaWdodC9VdGlscy5oPgorI2luY2x1ZGUgPG5hdGl2ZWhlbHBlci9KTklIZWxwLmg+CisjaW5jbHVkZSA8dXRpbHMvTG9nLmg+CisKKyNpbmNsdWRlICJsb2cvbG9nLmgiCisKK25hbWVzcGFjZSBhbmRyb2lkIHsKKworc3RhdGljIGNvbnN0IGludDY0X3Qga09mZmxvYWRNaW5EdXJhdGlvblNlYyA9IDYwOworCisvLyBzdGF0aWMKK2Jvb2wgSk1lZGlhUGxheWVyMlV0aWxzOjppc09mZmxvYWRlZEF1ZGlvUGxheWJhY2tTdXBwb3J0ZWQoCisgICAgICAgIGNvbnN0IHNwPE1ldGFEYXRhPiYgbWV0YSwgYm9vbCBoYXNWaWRlbywgYm9vbCBpc1N0cmVhbWluZywgYXVkaW9fc3RyZWFtX3R5cGVfdCBzdHJlYW1UeXBlKQoreworICAgIGlmIChoYXNWaWRlbyB8fCBzdHJlYW1UeXBlICE9IEFVRElPX1NUUkVBTV9NVVNJQykgeworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgYXVkaW9fb2ZmbG9hZF9pbmZvX3QgaW5mbyA9IEFVRElPX0lORk9fSU5JVElBTElaRVI7CisgICAgaWYgKE9LICE9IGdldEF1ZGlvT2ZmbG9hZEluZm8obWV0YSwgaGFzVmlkZW8sIGlzU3RyZWFtaW5nLCBzdHJlYW1UeXBlLCAmaW5mbykpIHsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIGlmIChpbmZvLmR1cmF0aW9uX3VzIDwga09mZmxvYWRNaW5EdXJhdGlvblNlYyAqIDEwMDAwMDApIHsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIGludDMyX3QgYXVkaW9Gb3JtYXQgPSBhdWRpb0Zvcm1hdEZyb21OYXRpdmUoaW5mby5mb3JtYXQpOworICAgIGludDMyX3QgY2hhbm5lbE1hc2sgPSBvdXRDaGFubmVsTWFza0Zyb21OYXRpdmUoaW5mby5jaGFubmVsX21hc2spOworICAgIGlmIChhdWRpb0Zvcm1hdCA9PSBFTkNPRElOR19JTlZBTElEIHx8IGNoYW5uZWxNYXNrID09IENIQU5ORUxfSU5WQUxJRCkgeworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgSk5JRW52KiBlbnYgPSBKYXZhVk1IZWxwZXI6OmdldEpOSUVudigpOworICAgIGpjbGFzcyBqTVAyVXRpbHNDbHMgPSBlbnYtPkZpbmRDbGFzcygiYW5kcm9pZC9tZWRpYS9NZWRpYVBsYXllcjJVdGlscyIpOworICAgIGptZXRob2RJRCBqU2V0QXVkaW9PdXRwdXREZXZpY2VCeUlkID0gZW52LT5HZXRTdGF0aWNNZXRob2RJRCgKKyAgICAgICAgICAgIGpNUDJVdGlsc0NscywgImlzT2ZmbG9hZGVkQXVkaW9QbGF5YmFja1N1cHBvcnRlZCIsICIoSUlJKVoiKTsKKyAgICBqYm9vbGVhbiByZXN1bHQgPSBlbnYtPkNhbGxTdGF0aWNCb29sZWFuTWV0aG9kKAorICAgICAgICAgICAgak1QMlV0aWxzQ2xzLCBqU2V0QXVkaW9PdXRwdXREZXZpY2VCeUlkLCBhdWRpb0Zvcm1hdCwgaW5mby5zYW1wbGVfcmF0ZSwgY2hhbm5lbE1hc2spOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK30gIC8vIG5hbWVzcGFjZSBhbmRyb2lkCmRpZmYgLS1naXQgYS9tZWRpYS9saWJtZWRpYXBsYXllcjIvbnVwbGF5ZXIyL0pNZWRpYVBsYXllcjJVdGlscy5oIGIvbWVkaWEvbGlibWVkaWFwbGF5ZXIyL251cGxheWVyMi9KTWVkaWFQbGF5ZXIyVXRpbHMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mY2JkNDNjCi0tLSAvZGV2L251bGwKKysrIGIvbWVkaWEvbGlibWVkaWFwbGF5ZXIyL251cGxheWVyMi9KTWVkaWFQbGF5ZXIyVXRpbHMuaApAQCAtMCwwICsxLDM1IEBACisvKgorICogQ29weXJpZ2h0IDIwMTgsIFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworCisjaWZuZGVmIF9KX01FRElBUExBWUVSMl9VVElMUzJfSF8KKyNkZWZpbmUgX0pfTUVESUFQTEFZRVIyX1VUSUxTMl9IXworCisjaW5jbHVkZSA8bWVkaWEvc3RhZ2VmcmlnaHQvTWV0YURhdGEuaD4KKworI2luY2x1ZGUgImpuaS5oIgorI2luY2x1ZGUgImFuZHJvaWRfbWVkaWFfQXVkaW9Gb3JtYXQuaCIKKworbmFtZXNwYWNlIGFuZHJvaWQgeworCitzdHJ1Y3QgSk1lZGlhUGxheWVyMlV0aWxzIHsKKyAgICBzdGF0aWMgYm9vbCBpc09mZmxvYWRlZEF1ZGlvUGxheWJhY2tTdXBwb3J0ZWQoCisgICAgICAgICAgICBjb25zdCBzcDxNZXRhRGF0YT4mIG1ldGEsIGJvb2wgaGFzVmlkZW8sIGJvb2wgaXNTdHJlYW1pbmcsCisgICAgICAgICAgICBhdWRpb19zdHJlYW1fdHlwZV90IHN0cmVhbVR5cGUpOworfTsKKworfSAgLy8gbmFtZXNwYWNlIGFuZHJvaWQKKworI2VuZGlmICAvLyBfSl9NRURJQVBMQVlFUjJfVVRJTFMyX0hfCmRpZmYgLS1naXQgYS9tZWRpYS9saWJtZWRpYXBsYXllcjIvbnVwbGF5ZXIyL051UGxheWVyMi5jcHAgYi9tZWRpYS9saWJtZWRpYXBsYXllcjIvbnVwbGF5ZXIyL051UGxheWVyMi5jcHAKaW5kZXggMDYwYjY5OC4uNWVhNjAwZiAxMDA2NDQKLS0tIGEvbWVkaWEvbGlibWVkaWFwbGF5ZXIyL251cGxheWVyMi9OdVBsYXllcjIuY3BwCisrKyBiL21lZGlhL2xpYm1lZGlhcGxheWVyMi9udXBsYXllcjIvTnVQbGF5ZXIyLmNwcApAQCAtMjQsNiArMjQsNyBAQAogI2luY2x1ZGUgIk51UGxheWVyMi5oIgogCiAjaW5jbHVkZSAiSFRUUExpdmVTb3VyY2UyLmgiCisjaW5jbHVkZSAiSk1lZGlhUGxheWVyMlV0aWxzLmgiCiAjaW5jbHVkZSAiTnVQbGF5ZXIyQ0NEZWNvZGVyLmgiCiAjaW5jbHVkZSAiTnVQbGF5ZXIyRGVjb2Rlci5oIgogI2luY2x1ZGUgIk51UGxheWVyMkRlY29kZXJCYXNlLmgiCkBAIC0zMyw3ICszNCw3IEBACiAjaW5jbHVkZSAiTnVQbGF5ZXIyU291cmNlLmgiCiAjaW5jbHVkZSAiUlRTUFNvdXJjZTIuaCIKICNpbmNsdWRlICJHZW5lcmljU291cmNlMi5oIgotI2luY2x1ZGUgIlRleHREZXNjcmlwdGlvbnMuaCIKKyNpbmNsdWRlICJUZXh0RGVzY3JpcHRpb25zMi5oIgogCiAjaW5jbHVkZSAiQVRTUGFyc2VyLmgiCiAKQEAgLTIxMiwxMSArMjEzLDExIEBACiAgICAgOiBtUElEKHBpZCksCiAgICAgICBtVUlEKHVpZCksCiAgICAgICBtTWVkaWFDbG9jayhtZWRpYUNsb2NrKSwKLSAgICAgIG1Tb3VyY2VGbGFncygwKSwKICAgICAgIG1PZmZsb2FkQXVkaW8oZmFsc2UpLAogICAgICAgbUF1ZGlvRGVjb2RlckdlbmVyYXRpb24oMCksCiAgICAgICBtVmlkZW9EZWNvZGVyR2VuZXJhdGlvbigwKSwKICAgICAgIG1SZW5kZXJlckdlbmVyYXRpb24oMCksCisgICAgICBtRU9TTW9uaXRvckdlbmVyYXRpb24oMCksCiAgICAgICBtTGFzdFN0YXJ0ZWRQbGF5aW5nVGltZU5zKDApLAogICAgICAgbVByZXZpb3VzU2Vla1RpbWVVcygwKSwKICAgICAgIG1BdWRpb0VPUyhmYWxzZSksCkBAIC0yNDAsOCArMjQxLDcgQEAKICAgICAgIG1QYXVzZWQoZmFsc2UpLAogICAgICAgbVBhdXNlZEJ5Q2xpZW50KHRydWUpLAogICAgICAgbVBhdXNlZEZvckJ1ZmZlcmluZyhmYWxzZSksCi0gICAgICBtSXNEcm1Qcm90ZWN0ZWQoZmFsc2UpLAotICAgICAgbURhdGFTb3VyY2VUeXBlKERBVEFfU09VUkNFX1RZUEVfTk9ORSkgeworICAgICAgbUlzRHJtUHJvdGVjdGVkKGZhbHNlKSB7CiAgICAgQ0hFQ0sobWVkaWFDbG9jayAhPSBOVUxMKTsKICAgICBjbGVhckZsdXNoQ29tcGxldGUoKTsKIH0KQEAgLTMwOSw3ICszMDksNyBAQAogICAgICAgICAgICAgICAgIHNwPEdlbmVyaWNTb3VyY2UyPiBnZW5lcmljU291cmNlID0KICAgICAgICAgICAgICAgICAgICAgICAgIG5ldyBHZW5lcmljU291cmNlMihub3RpZnksIG1VSUQsIG1NZWRpYUNsb2NrKTsKIAotICAgICAgICAgICAgICAgIGVyciA9IGdlbmVyaWNTb3VyY2UtPnNldERhdGFTb3VyY2UoaHR0cFNlcnZpY2UsIHVybCwgaGVhZGVycyk7CisgICAgICAgICAgICAgICAgZXJyID0gZ2VuZXJpY1NvdXJjZS0+c2V0RGF0YVNvdXJjZSh1cmwsIGhlYWRlcnMpOwogCiAgICAgICAgICAgICAgICAgaWYgKGVyciA9PSBPSykgewogICAgICAgICAgICAgICAgICAgICAqc291cmNlID0gZ2VuZXJpY1NvdXJjZTsKQEAgLTM5MywxMSArMzkzLDEzIEBACiAgICAgLy8gTm93LCBzb3VyY2UgIT0gTlVMTC4KICAgICAqLwogCi0gICAgbURhdGFTb3VyY2VUeXBlID0gZGF0YVNvdXJjZVR5cGU7CisgICAgbUN1cnJlbnRTb3VyY2VJbmZvLm1EYXRhU291cmNlVHlwZSA9IGRhdGFTb3VyY2VUeXBlOwogCiAgICAgc3A8QU1lc3NhZ2U+IG1zZyA9IG5ldyBBTWVzc2FnZShrV2hhdFNldERhdGFTb3VyY2UsIHRoaXMpOwogICAgIG1zZy0+c2V0T2JqZWN0KCJzb3VyY2UiLCBzb3VyY2UpOwogICAgIG1zZy0+c2V0SW50NjQoInNyY0lkIiwgZHNkLT5tSWQpOworICAgIG1zZy0+c2V0SW50NjQoInN0YXJ0VGltZVVzIiwgZHNkLT5tU3RhcnRQb3NpdGlvbk1zICogMTAwMCk7CisgICAgbXNnLT5zZXRJbnQ2NCgiZW5kVGltZVVzIiwgZHNkLT5tRW5kUG9zaXRpb25NcyAqIDEwMDApOwogICAgIG1zZy0+cG9zdCgpOwogfQogCkBAIC00MTUsMTEgKzQxNywxMyBAQAogICAgIC8vIE5vdywgc291cmNlICE9IE5VTEwuCiAgICAgKi8KIAotICAgIG1OZXh0RGF0YVNvdXJjZVR5cGUgPSBkYXRhU291cmNlVHlwZTsKKyAgICBtTmV4dFNvdXJjZUluZm8ubURhdGFTb3VyY2VUeXBlID0gZGF0YVNvdXJjZVR5cGU7CiAKICAgICBzcDxBTWVzc2FnZT4gbXNnID0gbmV3IEFNZXNzYWdlKGtXaGF0UHJlcGFyZU5leHREYXRhU291cmNlLCB0aGlzKTsKICAgICBtc2ctPnNldE9iamVjdCgic291cmNlIiwgc291cmNlKTsKICAgICBtc2ctPnNldEludDY0KCJzcmNJZCIsIGRzZC0+bUlkKTsKKyAgICBtc2ctPnNldEludDY0KCJzdGFydFRpbWVVcyIsIGRzZC0+bVN0YXJ0UG9zaXRpb25NcyAqIDEwMDApOworICAgIG1zZy0+c2V0SW50NjQoImVuZFRpbWVVcyIsIGRzZC0+bUVuZFBvc2l0aW9uTXMgKiAxMDAwKTsKICAgICBtc2ctPnBvc3QoKTsKIH0KIApAQCAtNDg3LDcgKzQ5MSw3IEBACiBzdGF0dXNfdCBOdVBsYXllcjI6OnNldFBsYXliYWNrU2V0dGluZ3MoY29uc3QgQXVkaW9QbGF5YmFja1JhdGUgJnJhdGUpIHsKICAgICAvLyBkbyBzb21lIGN1cnNvcnkgdmFsaWRhdGlvbiBvZiB0aGUgc2V0dGluZ3MgaGVyZS4gYXVkaW8gbW9kZXMgYXJlCiAgICAgLy8gb25seSB2YWxpZGF0ZWQgd2hlbiBzZXQgb24gdGhlIGF1ZGlvc2luay4KLSAgICAgaWYgKChyYXRlLm1TcGVlZCAhPSAwLmYgJiYgcmF0ZS5tU3BlZWQgPCBBVURJT19USU1FU1RSRVRDSF9TUEVFRF9NSU4pCisgICAgIGlmIChyYXRlLm1TcGVlZCA8IEFVRElPX1RJTUVTVFJFVENIX1NQRUVEX01JTgogICAgICAgICAgICAgfHwgcmF0ZS5tU3BlZWQgPiBBVURJT19USU1FU1RSRVRDSF9TUEVFRF9NQVgKICAgICAgICAgICAgIHx8IHJhdGUubVBpdGNoIDwgQVVESU9fVElNRVNUUkVUQ0hfU1BFRURfTUlOCiAgICAgICAgICAgICB8fCByYXRlLm1QaXRjaCA+IEFVRElPX1RJTUVTVFJFVENIX1NQRUVEX01BWCkgewpAQCAtNTU0LDcgKzU1OCw3IEBACiAgICAgc3A8U291cmNlPiBzb3VyY2U7CiAgICAgewogICAgICAgICBNdXRleDo6QXV0b2xvY2sgYXV0b0xvY2sobVNvdXJjZUxvY2spOwotICAgICAgICBzb3VyY2UgPSBtU291cmNlOworICAgICAgICBzb3VyY2UgPSBtQ3VycmVudFNvdXJjZUluZm8ubVNvdXJjZTsKICAgICB9CiAKICAgICBpZiAoc291cmNlICE9IE5VTEwpIHsKQEAgLTU4NCw5ICs1ODgsMTMgQEAKICAgICBtc2ctPnBvc3QoKTsKIH0KIAordm9pZCBOdVBsYXllcjI6OnJld2luZCgpIHsKKyAgICBzcDxBTWVzc2FnZT4gbXNnID0gbmV3IEFNZXNzYWdlKGtXaGF0UmV3aW5kLCB0aGlzKTsKKyAgICBtc2ctPnBvc3QoKTsKK30KIAogdm9pZCBOdVBsYXllcjI6OndyaXRlVHJhY2tJbmZvKAotICAgICAgICBQYXJjZWwqIHJlcGx5LCBjb25zdCBzcDxBTWVzc2FnZT4mIGZvcm1hdCkgY29uc3QgeworICAgICAgICBQbGF5ZXJNZXNzYWdlKiByZXBseSwgY29uc3Qgc3A8QU1lc3NhZ2U+JiBmb3JtYXQpIGNvbnN0IHsKICAgICBpZiAoZm9ybWF0ID09IE5VTEwpIHsKICAgICAgICAgQUxPR0UoIk5VTEwgZm9ybWF0Iik7CiAgICAgICAgIHJldHVybjsKQEAgLTYxOSwxMCArNjI3LDkgQEAKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIHJlcGx5LT53cml0ZUludDMyKDIpOyAvLyB3cml0ZSBzb21ldGhpbmcgbm9uLXplcm8KLSAgICByZXBseS0+d3JpdGVJbnQzMih0cmFja1R5cGUpOwotICAgIHJlcGx5LT53cml0ZVN0cmluZzE2KFN0cmluZzE2KG1pbWUuY19zdHIoKSkpOwotICAgIHJlcGx5LT53cml0ZVN0cmluZzE2KFN0cmluZzE2KGxhbmcuY19zdHIoKSkpOworICAgIHJlcGx5LT5hZGRfdmFsdWVzKCktPnNldF9pbnQzMl92YWx1ZSh0cmFja1R5cGUpOworICAgIHJlcGx5LT5hZGRfdmFsdWVzKCktPnNldF9zdHJpbmdfdmFsdWUobWltZS5jX3N0cigpKTsKKyAgICByZXBseS0+YWRkX3ZhbHVlcygpLT5zZXRfc3RyaW5nX3ZhbHVlKGxhbmcuY19zdHIoKSk7CiAKICAgICBpZiAodHJhY2tUeXBlID09IE1FRElBX1RSQUNLX1RZUEVfU1VCVElUTEUpIHsKICAgICAgICAgaW50MzJfdCBpc0F1dG8sIGlzRGVmYXVsdCwgaXNGb3JjZWQ7CkBAIC02MzAsMjcgKzYzNywzMCBAQAogICAgICAgICBDSEVDSyhmb3JtYXQtPmZpbmRJbnQzMigiZGVmYXVsdCIsICZpc0RlZmF1bHQpKTsKICAgICAgICAgQ0hFQ0soZm9ybWF0LT5maW5kSW50MzIoImZvcmNlZCIsICZpc0ZvcmNlZCkpOwogCi0gICAgICAgIHJlcGx5LT53cml0ZUludDMyKGlzQXV0byk7Ci0gICAgICAgIHJlcGx5LT53cml0ZUludDMyKGlzRGVmYXVsdCk7Ci0gICAgICAgIHJlcGx5LT53cml0ZUludDMyKGlzRm9yY2VkKTsKKyAgICAgICAgcmVwbHktPmFkZF92YWx1ZXMoKS0+c2V0X2ludDMyX3ZhbHVlKGlzQXV0byk7CisgICAgICAgIHJlcGx5LT5hZGRfdmFsdWVzKCktPnNldF9pbnQzMl92YWx1ZShpc0RlZmF1bHQpOworICAgICAgICByZXBseS0+YWRkX3ZhbHVlcygpLT5zZXRfaW50MzJfdmFsdWUoaXNGb3JjZWQpOwogICAgIH0KIH0KIAogdm9pZCBOdVBsYXllcjI6Om9uTWVzc2FnZVJlY2VpdmVkKGNvbnN0IHNwPEFNZXNzYWdlPiAmbXNnKSB7CisKICAgICBzd2l0Y2ggKG1zZy0+d2hhdCgpKSB7CiAgICAgICAgIGNhc2Uga1doYXRTZXREYXRhU291cmNlOgogICAgICAgICB7CiAgICAgICAgICAgICBBTE9HVigia1doYXRTZXREYXRhU291cmNlIik7CiAKLSAgICAgICAgICAgIENIRUNLKG1Tb3VyY2UgPT0gTlVMTCk7CisgICAgICAgICAgICBDSEVDSyhtQ3VycmVudFNvdXJjZUluZm8ubVNvdXJjZSA9PSBOVUxMKTsKIAogICAgICAgICAgICAgc3RhdHVzX3QgZXJyID0gT0s7CiAgICAgICAgICAgICBzcDxSZWZCYXNlPiBvYmo7CiAgICAgICAgICAgICBDSEVDSyhtc2ctPmZpbmRPYmplY3QoInNvdXJjZSIsICZvYmopKTsKICAgICAgICAgICAgIGlmIChvYmogIT0gTlVMTCkgewogICAgICAgICAgICAgICAgIE11dGV4OjpBdXRvbG9jayBhdXRvTG9jayhtU291cmNlTG9jayk7Ci0gICAgICAgICAgICAgICAgQ0hFQ0sobXNnLT5maW5kSW50NjQoInNyY0lkIiwgJm1TcmNJZCkpOwotICAgICAgICAgICAgICAgIG1Tb3VyY2UgPSBzdGF0aWNfY2FzdDxTb3VyY2UgKj4ob2JqLmdldCgpKTsKKyAgICAgICAgICAgICAgICBDSEVDSyhtc2ctPmZpbmRJbnQ2NCgic3JjSWQiLCAmbUN1cnJlbnRTb3VyY2VJbmZvLm1TcmNJZCkpOworICAgICAgICAgICAgICAgIENIRUNLKG1zZy0+ZmluZEludDY0KCJzdGFydFRpbWVVcyIsICZtQ3VycmVudFNvdXJjZUluZm8ubVN0YXJ0VGltZVVzKSk7CisgICAgICAgICAgICAgICAgQ0hFQ0sobXNnLT5maW5kSW50NjQoImVuZFRpbWVVcyIsICZtQ3VycmVudFNvdXJjZUluZm8ubUVuZFRpbWVVcykpOworICAgICAgICAgICAgICAgIG1DdXJyZW50U291cmNlSW5mby5tU291cmNlID0gc3RhdGljX2Nhc3Q8U291cmNlICo+KG9iai5nZXQoKSk7CiAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgIGVyciA9IFVOS05PV05fRVJST1I7CiAgICAgICAgICAgICAgICAgQUxPR0UoImtXaGF0U2V0RGF0YVNvdXJjZSwgc291cmNlIHNob3VsZCBub3QgYmUgTlVMTCIpOwpAQCAtNjU5LDcgKzY2OSw3IEBACiAgICAgICAgICAgICBDSEVDSyhtRHJpdmVyICE9IE5VTEwpOwogICAgICAgICAgICAgc3A8TnVQbGF5ZXIyRHJpdmVyPiBkcml2ZXIgPSBtRHJpdmVyLnByb21vdGUoKTsKICAgICAgICAgICAgIGlmIChkcml2ZXIgIT0gTlVMTCkgewotICAgICAgICAgICAgICAgIGRyaXZlci0+bm90aWZ5U2V0RGF0YVNvdXJjZUNvbXBsZXRlZChtU3JjSWQsIGVycik7CisgICAgICAgICAgICAgICAgZHJpdmVyLT5ub3RpZnlTZXREYXRhU291cmNlQ29tcGxldGVkKG1DdXJyZW50U291cmNlSW5mby5tU3JjSWQsIGVycik7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQpAQCAtNjczLDkgKzY4MywxMSBAQAogICAgICAgICAgICAgQ0hFQ0sobXNnLT5maW5kT2JqZWN0KCJzb3VyY2UiLCAmb2JqKSk7CiAgICAgICAgICAgICBpZiAob2JqICE9IE5VTEwpIHsKICAgICAgICAgICAgICAgICBNdXRleDo6QXV0b2xvY2sgYXV0b0xvY2sobVNvdXJjZUxvY2spOwotICAgICAgICAgICAgICAgIENIRUNLKG1zZy0+ZmluZEludDY0KCJzcmNJZCIsICZtTmV4dFNyY0lkKSk7Ci0gICAgICAgICAgICAgICAgbU5leHRTb3VyY2UgPSBzdGF0aWNfY2FzdDxTb3VyY2UgKj4ob2JqLmdldCgpKTsKLSAgICAgICAgICAgICAgICBtTmV4dFNvdXJjZS0+cHJlcGFyZUFzeW5jKCk7CisgICAgICAgICAgICAgICAgQ0hFQ0sobXNnLT5maW5kSW50NjQoInNyY0lkIiwgJm1OZXh0U291cmNlSW5mby5tU3JjSWQpKTsKKyAgICAgICAgICAgICAgICBDSEVDSyhtc2ctPmZpbmRJbnQ2NCgic3RhcnRUaW1lVXMiLCAmbU5leHRTb3VyY2VJbmZvLm1TdGFydFRpbWVVcykpOworICAgICAgICAgICAgICAgIENIRUNLKG1zZy0+ZmluZEludDY0KCJlbmRUaW1lVXMiLCAmbU5leHRTb3VyY2VJbmZvLm1FbmRUaW1lVXMpKTsKKyAgICAgICAgICAgICAgICBtTmV4dFNvdXJjZUluZm8ubVNvdXJjZSA9IHN0YXRpY19jYXN0PFNvdXJjZSAqPihvYmouZ2V0KCkpOworICAgICAgICAgICAgICAgIG1OZXh0U291cmNlSW5mby5tU291cmNlLT5wcmVwYXJlQXN5bmMobU5leHRTb3VyY2VJbmZvLm1TdGFydFRpbWVVcyk7CiAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgIGVyciA9IFVOS05PV05fRVJST1I7CiAgICAgICAgICAgICB9CkBAIC02ODgsNyArNzAwLDcgQEAKICAgICAgICAgICAgIEFMT0dWKCJrV2hhdFBsYXlOZXh0RGF0YVNvdXJjZSIpOwogICAgICAgICAgICAgaW50NjRfdCBzcmNJZDsKICAgICAgICAgICAgIENIRUNLKG1zZy0+ZmluZEludDY0KCJzcmNJZCIsICZzcmNJZCkpOwotICAgICAgICAgICAgaWYgKHNyY0lkICE9IG1OZXh0U3JjSWQpIHsKKyAgICAgICAgICAgIGlmIChzcmNJZCAhPSBtTmV4dFNvdXJjZUluZm8ubVNyY0lkKSB7CiAgICAgICAgICAgICAgICAgbm90aWZ5TGlzdGVuZXIoc3JjSWQsIE1FRElBMl9FUlJPUiwgTUVESUEyX0VSUk9SX1VOS05PV04sIDApOwogICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgIH0KQEAgLTcwOSw2ICs3MjEsMjIgQEAKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAKKyAgICAgICAgY2FzZSBrV2hhdEVPU01vbml0b3I6CisgICAgICAgIHsKKyAgICAgICAgICAgIGludDMyX3QgZ2VuZXJhdGlvbjsKKyAgICAgICAgICAgIENIRUNLKG1zZy0+ZmluZEludDMyKCJnZW5lcmF0aW9uIiwgJmdlbmVyYXRpb24pKTsKKyAgICAgICAgICAgIGludDMyX3QgcmVhc29uOworICAgICAgICAgICAgQ0hFQ0sobXNnLT5maW5kSW50MzIoInJlYXNvbiIsICZyZWFzb24pKTsKKworICAgICAgICAgICAgaWYgKGdlbmVyYXRpb24gIT0gbUVPU01vbml0b3JHZW5lcmF0aW9uIHx8IHJlYXNvbiAhPSBNZWRpYUNsb2NrOjpUSU1FUl9SRUFTT05fUkVBQ0hFRCkgeworICAgICAgICAgICAgICAgIGJyZWFrOyAgLy8gc3RhbGUgb3IgcmVzZXQKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgQUxPR1YoImtXaGF0RU9TTW9uaXRvciIpOworICAgICAgICAgICAgbm90aWZ5TGlzdGVuZXIobUN1cnJlbnRTb3VyY2VJbmZvLm1TcmNJZCwgTUVESUEyX1BMQVlCQUNLX0NPTVBMRVRFLCAwLCAwKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKICAgICAgICAgY2FzZSBrV2hhdEdldEJ1ZmZlcmluZ1NldHRpbmdzOgogICAgICAgICB7CiAgICAgICAgICAgICBzcDxBUmVwbHlUb2tlbj4gcmVwbHlJRDsKQEAgLTcxNyw4ICs3NDUsOCBAQAogICAgICAgICAgICAgQUxPR1YoImtXaGF0R2V0QnVmZmVyaW5nU2V0dGluZ3MiKTsKICAgICAgICAgICAgIEJ1ZmZlcmluZ1NldHRpbmdzIGJ1ZmZlcmluZzsKICAgICAgICAgICAgIHN0YXR1c190IGVyciA9IE9LOwotICAgICAgICAgICAgaWYgKG1Tb3VyY2UgIT0gTlVMTCkgewotICAgICAgICAgICAgICAgIGVyciA9IG1Tb3VyY2UtPmdldEJ1ZmZlcmluZ1NldHRpbmdzKCZidWZmZXJpbmcpOworICAgICAgICAgICAgaWYgKG1DdXJyZW50U291cmNlSW5mby5tU291cmNlICE9IE5VTEwpIHsKKyAgICAgICAgICAgICAgICBlcnIgPSBtQ3VycmVudFNvdXJjZUluZm8ubVNvdXJjZS0+Z2V0QnVmZmVyaW5nU2V0dGluZ3MoJmJ1ZmZlcmluZyk7CiAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgIGVyciA9IElOVkFMSURfT1BFUkFUSU9OOwogICAgICAgICAgICAgfQpAQCAtNzQwLDggKzc2OCw4IEBACiAgICAgICAgICAgICBCdWZmZXJpbmdTZXR0aW5ncyBidWZmZXJpbmc7CiAgICAgICAgICAgICByZWFkRnJvbUFNZXNzYWdlKG1zZywgJmJ1ZmZlcmluZyk7CiAgICAgICAgICAgICBzdGF0dXNfdCBlcnIgPSBPSzsKLSAgICAgICAgICAgIGlmIChtU291cmNlICE9IE5VTEwpIHsKLSAgICAgICAgICAgICAgICBlcnIgPSBtU291cmNlLT5zZXRCdWZmZXJpbmdTZXR0aW5ncyhidWZmZXJpbmcpOworICAgICAgICAgICAgaWYgKG1DdXJyZW50U291cmNlSW5mby5tU291cmNlICE9IE5VTEwpIHsKKyAgICAgICAgICAgICAgICBlcnIgPSBtQ3VycmVudFNvdXJjZUluZm8ubVNvdXJjZS0+c2V0QnVmZmVyaW5nU2V0dGluZ3MoYnVmZmVyaW5nKTsKICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgZXJyID0gSU5WQUxJRF9PUEVSQVRJT047CiAgICAgICAgICAgICB9CkBAIC03NTUsNyArNzgzLDcgQEAKICAgICAgICAgewogICAgICAgICAgICAgQUxPR1YoIm9uTWVzc2FnZVJlY2VpdmVkIGtXaGF0UHJlcGFyZSIpOwogCi0gICAgICAgICAgICBtU291cmNlLT5wcmVwYXJlQXN5bmMoKTsKKyAgICAgICAgICAgIG1DdXJyZW50U291cmNlSW5mby5tU291cmNlLT5wcmVwYXJlQXN5bmMobUN1cnJlbnRTb3VyY2VJbmZvLm1TdGFydFRpbWVVcyk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogCkBAIC03NjQsMTIgKzc5MiwxMiBAQAogICAgICAgICAgICAgc3A8QVJlcGx5VG9rZW4+IHJlcGx5SUQ7CiAgICAgICAgICAgICBDSEVDSyhtc2ctPnNlbmRlckF3YWl0c1Jlc3BvbnNlKCZyZXBseUlEKSk7CiAKLSAgICAgICAgICAgIFBhcmNlbCogcmVwbHk7CisgICAgICAgICAgICBQbGF5ZXJNZXNzYWdlKiByZXBseTsKICAgICAgICAgICAgIENIRUNLKG1zZy0+ZmluZFBvaW50ZXIoInJlcGx5IiwgKHZvaWQqKikmcmVwbHkpKTsKIAogICAgICAgICAgICAgc2l6ZV90IGluYmFuZFRyYWNrcyA9IDA7Ci0gICAgICAgICAgICBpZiAobVNvdXJjZSAhPSBOVUxMKSB7Ci0gICAgICAgICAgICAgICAgaW5iYW5kVHJhY2tzID0gbVNvdXJjZS0+Z2V0VHJhY2tDb3VudCgpOworICAgICAgICAgICAgaWYgKG1DdXJyZW50U291cmNlSW5mby5tU291cmNlICE9IE5VTEwpIHsKKyAgICAgICAgICAgICAgICBpbmJhbmRUcmFja3MgPSBtQ3VycmVudFNvdXJjZUluZm8ubVNvdXJjZS0+Z2V0VHJhY2tDb3VudCgpOwogICAgICAgICAgICAgfQogCiAgICAgICAgICAgICBzaXplX3QgY2NUcmFja3MgPSAwOwpAQCAtNzc4LDExICs4MDYsMTEgQEAKICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgLy8gdG90YWwgdHJhY2sgY291bnQKLSAgICAgICAgICAgIHJlcGx5LT53cml0ZUludDMyKGluYmFuZFRyYWNrcyArIGNjVHJhY2tzKTsKKyAgICAgICAgICAgIHJlcGx5LT5hZGRfdmFsdWVzKCktPnNldF9pbnQzMl92YWx1ZShpbmJhbmRUcmFja3MgKyBjY1RyYWNrcyk7CiAKICAgICAgICAgICAgIC8vIHdyaXRlIGluYmFuZCB0cmFja3MKICAgICAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgaW5iYW5kVHJhY2tzOyArK2kpIHsKLSAgICAgICAgICAgICAgICB3cml0ZVRyYWNrSW5mbyhyZXBseSwgbVNvdXJjZS0+Z2V0VHJhY2tJbmZvKGkpKTsKKyAgICAgICAgICAgICAgICB3cml0ZVRyYWNrSW5mbyhyZXBseSwgbUN1cnJlbnRTb3VyY2VJbmZvLm1Tb3VyY2UtPmdldFRyYWNrSW5mbyhpKSk7CiAgICAgICAgICAgICB9CiAKICAgICAgICAgICAgIC8vIHdyaXRlIENDIHRyYWNrCkBAIC03OTgsMTcgKzgyNiwxNyBAQAogICAgICAgICBjYXNlIGtXaGF0R2V0U2VsZWN0ZWRUcmFjazoKICAgICAgICAgewogICAgICAgICAgICAgc3RhdHVzX3QgZXJyID0gSU5WQUxJRF9PUEVSQVRJT047Ci0gICAgICAgICAgICBpZiAobVNvdXJjZSAhPSBOVUxMKSB7CisgICAgICAgICAgICBpZiAobUN1cnJlbnRTb3VyY2VJbmZvLm1Tb3VyY2UgIT0gTlVMTCkgewogICAgICAgICAgICAgICAgIGVyciA9IE9LOwogCiAgICAgICAgICAgICAgICAgaW50MzJfdCB0eXBlMzI7CiAgICAgICAgICAgICAgICAgQ0hFQ0sobXNnLT5maW5kSW50MzIoInR5cGUiLCAoaW50MzJfdCopJnR5cGUzMikpOwogICAgICAgICAgICAgICAgIG1lZGlhX3RyYWNrX3R5cGUgdHlwZSA9IChtZWRpYV90cmFja190eXBlKXR5cGUzMjsKLSAgICAgICAgICAgICAgICBzc2l6ZV90IHNlbGVjdGVkVHJhY2sgPSBtU291cmNlLT5nZXRTZWxlY3RlZFRyYWNrKHR5cGUpOworICAgICAgICAgICAgICAgIHNzaXplX3Qgc2VsZWN0ZWRUcmFjayA9IG1DdXJyZW50U291cmNlSW5mby5tU291cmNlLT5nZXRTZWxlY3RlZFRyYWNrKHR5cGUpOwogCi0gICAgICAgICAgICAgICAgUGFyY2VsKiByZXBseTsKKyAgICAgICAgICAgICAgICBQbGF5ZXJNZXNzYWdlKiByZXBseTsKICAgICAgICAgICAgICAgICBDSEVDSyhtc2ctPmZpbmRQb2ludGVyKCJyZXBseSIsICh2b2lkKiopJnJlcGx5KSk7Ci0gICAgICAgICAgICAgICAgcmVwbHktPndyaXRlSW50MzIoc2VsZWN0ZWRUcmFjayk7CisgICAgICAgICAgICAgICAgcmVwbHktPmFkZF92YWx1ZXMoKS0+c2V0X2ludDMyX3ZhbHVlKHNlbGVjdGVkVHJhY2spOwogICAgICAgICAgICAgfQogCiAgICAgICAgICAgICBzcDxBTWVzc2FnZT4gcmVzcG9uc2UgPSBuZXcgQU1lc3NhZ2U7CkBAIC04MzUsOCArODYzLDggQEAKICAgICAgICAgICAgIHN0YXR1c190IGVyciA9IElOVkFMSURfT1BFUkFUSU9OOwogCiAgICAgICAgICAgICBzaXplX3QgaW5iYW5kVHJhY2tzID0gMDsKLSAgICAgICAgICAgIGlmIChtU291cmNlICE9IE5VTEwpIHsKLSAgICAgICAgICAgICAgICBpbmJhbmRUcmFja3MgPSBtU291cmNlLT5nZXRUcmFja0NvdW50KCk7CisgICAgICAgICAgICBpZiAobUN1cnJlbnRTb3VyY2VJbmZvLm1Tb3VyY2UgIT0gTlVMTCkgeworICAgICAgICAgICAgICAgIGluYmFuZFRyYWNrcyA9IG1DdXJyZW50U291cmNlSW5mby5tU291cmNlLT5nZXRUcmFja0NvdW50KCk7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBzaXplX3QgY2NUcmFja3MgPSAwOwogICAgICAgICAgICAgaWYgKG1DQ0RlY29kZXIgIT0gTlVMTCkgewpAQCAtODQ0LDExICs4NzIsMTEgQEAKICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgaWYgKHRyYWNrSW5kZXggPCBpbmJhbmRUcmFja3MpIHsKLSAgICAgICAgICAgICAgICBlcnIgPSBtU291cmNlLT5zZWxlY3RUcmFjayh0cmFja0luZGV4LCBzZWxlY3QsIHRpbWVVcyk7CisgICAgICAgICAgICAgICAgZXJyID0gbUN1cnJlbnRTb3VyY2VJbmZvLm1Tb3VyY2UtPnNlbGVjdFRyYWNrKHRyYWNrSW5kZXgsIHNlbGVjdCwgdGltZVVzKTsKIAogICAgICAgICAgICAgICAgIGlmICghc2VsZWN0ICYmIGVyciA9PSBPSykgewogICAgICAgICAgICAgICAgICAgICBpbnQzMl90IHR5cGU7Ci0gICAgICAgICAgICAgICAgICAgIHNwPEFNZXNzYWdlPiBpbmZvID0gbVNvdXJjZS0+Z2V0VHJhY2tJbmZvKHRyYWNrSW5kZXgpOworICAgICAgICAgICAgICAgICAgICBzcDxBTWVzc2FnZT4gaW5mbyA9IG1DdXJyZW50U291cmNlSW5mby5tU291cmNlLT5nZXRUcmFja0luZm8odHJhY2tJbmRleCk7CiAgICAgICAgICAgICAgICAgICAgIGlmIChpbmZvICE9IE5VTEwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmJiBpbmZvLT5maW5kSW50MzIoInR5cGUiLCAmdHlwZSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmJiB0eXBlID09IE1FRElBX1RSQUNLX1RZUEVfVElNRURURVhUKSB7CkBAIC04ODEsMTAgKzkwOSwxMCBAQAogICAgICAgICAgICAgfQogCiAgICAgICAgICAgICBpbnQ2NF90IGR1cmF0aW9uVXM7Ci0gICAgICAgICAgICBpZiAobURyaXZlciAhPSBOVUxMICYmIG1Tb3VyY2UtPmdldER1cmF0aW9uKCZkdXJhdGlvblVzKSA9PSBPSykgeworICAgICAgICAgICAgaWYgKG1Ecml2ZXIgIT0gTlVMTCAmJiBtQ3VycmVudFNvdXJjZUluZm8ubVNvdXJjZS0+Z2V0RHVyYXRpb24oJmR1cmF0aW9uVXMpID09IE9LKSB7CiAgICAgICAgICAgICAgICAgc3A8TnVQbGF5ZXIyRHJpdmVyPiBkcml2ZXIgPSBtRHJpdmVyLnByb21vdGUoKTsKICAgICAgICAgICAgICAgICBpZiAoZHJpdmVyICE9IE5VTEwpIHsKLSAgICAgICAgICAgICAgICAgICAgZHJpdmVyLT5ub3RpZnlEdXJhdGlvbihtU3JjSWQsIGR1cmF0aW9uVXMpOworICAgICAgICAgICAgICAgICAgICBkcml2ZXItPm5vdGlmeUR1cmF0aW9uKG1DdXJyZW50U291cmNlSW5mby5tU3JjSWQsIGR1cmF0aW9uVXMpOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KIApAQCAtOTAxLDEzICs5MjksMTUgQEAKIAogICAgICAgICAgICAgQUxPR0QoIm9uU2V0VmlkZW9TdXJmYWNlKCVwLCAlcyB2aWRlbyBkZWNvZGVyKSIsCiAgICAgICAgICAgICAgICAgICAgIChud3cgPT0gTlVMTCA/IE5VTEwgOiBud3ctPmdldEFOYXRpdmVXaW5kb3coKSksCi0gICAgICAgICAgICAgICAgICAgIChtU291cmNlICE9IE5VTEwgJiYgbVN0YXJ0ZWQgJiYgbVNvdXJjZS0+Z2V0Rm9ybWF0KGZhbHNlIC8qIGF1ZGlvICovKSAhPSBOVUxMCisgICAgICAgICAgICAgICAgICAgIChtQ3VycmVudFNvdXJjZUluZm8ubVNvdXJjZSAhPSBOVUxMICYmIG1TdGFydGVkCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgJiYgbUN1cnJlbnRTb3VyY2VJbmZvLm1Tb3VyY2UtPmdldEZvcm1hdChmYWxzZSAvKiBhdWRpbyAqLykgIT0gTlVMTAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICYmIG1WaWRlb0RlY29kZXIgIT0gTlVMTCkgPyAiaGF2ZSIgOiAibm8iKTsKIAotICAgICAgICAgICAgLy8gTmVlZCB0byBjaGVjayBtU3RhcnRlZCBiZWZvcmUgY2FsbGluZyBtU291cmNlLT5nZXRGb3JtYXQgYmVjYXVzZSBOdVBsYXllcjIgbWlnaHQKLSAgICAgICAgICAgIC8vIGJlIGluIHByZXBhcmluZyBzdGF0ZSBhbmQgaXQgY291bGQgdGFrZSBsb25nIHRpbWUuCi0gICAgICAgICAgICAvLyBXaGVuIG1TdGFydGVkIGlzIHRydWUsIG1Tb3VyY2UgbXVzdCBoYXZlIGJlZW4gc2V0LgotICAgICAgICAgICAgaWYgKG1Tb3VyY2UgPT0gTlVMTCB8fCAhbVN0YXJ0ZWQgfHwgbVNvdXJjZS0+Z2V0Rm9ybWF0KGZhbHNlIC8qIGF1ZGlvICovKSA9PSBOVUxMCisgICAgICAgICAgICAvLyBOZWVkIHRvIGNoZWNrIG1TdGFydGVkIGJlZm9yZSBjYWxsaW5nIG1DdXJyZW50U291cmNlSW5mby5tU291cmNlLT5nZXRGb3JtYXQKKyAgICAgICAgICAgIC8vIGJlY2F1c2UgTnVQbGF5ZXIyIG1pZ2h0IGJlIGluIHByZXBhcmluZyBzdGF0ZSBhbmQgaXQgY291bGQgdGFrZSBsb25nIHRpbWUuCisgICAgICAgICAgICAvLyBXaGVuIG1TdGFydGVkIGlzIHRydWUsIG1DdXJyZW50U291cmNlSW5mby5tU291cmNlIG11c3QgaGF2ZSBiZWVuIHNldC4KKyAgICAgICAgICAgIGlmIChtQ3VycmVudFNvdXJjZUluZm8ubVNvdXJjZSA9PSBOVUxMIHx8ICFtU3RhcnRlZAorICAgICAgICAgICAgICAgICAgICB8fCBtQ3VycmVudFNvdXJjZUluZm8ubVNvdXJjZS0+Z2V0Rm9ybWF0KGZhbHNlIC8qIGF1ZGlvICovKSA9PSBOVUxMCiAgICAgICAgICAgICAgICAgICAgIC8vIE5PVEU6IG1WaWRlb0RlY29kZXIncyBtTmF0aXZlV2luZG93IGlzIGFsd2F5cyBub24tbnVsbAogICAgICAgICAgICAgICAgICAgICB8fCAobVZpZGVvRGVjb2RlciAhPSBOVUxMICYmIG1WaWRlb0RlY29kZXItPnNldFZpZGVvU3VyZmFjZShud3cpID09IE9LKSkgewogICAgICAgICAgICAgICAgIHBlcmZvcm1TZXRTdXJmYWNlKG53dyk7CkBAIC05NzEsMTAgKzEwMDEsMTAgQEAKICAgICAgICAgICAgICAgICAgICAgb25SZXN1bWUoKTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIG9uU3RhcnQoKTsKKyAgICAgICAgICAgICAgICBvblN0YXJ0KHRydWUgLyogcGxheSAqLyk7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBtUGF1c2VkQnlDbGllbnQgPSBmYWxzZTsKLSAgICAgICAgICAgIG5vdGlmeUxpc3RlbmVyKG1TcmNJZCwgTUVESUEyX1NUQVJURUQsIDAsIDApOworICAgICAgICAgICAgbm90aWZ5TGlzdGVuZXIobUN1cnJlbnRTb3VyY2VJbmZvLm1TcmNJZCwgTUVESUEyX1NUQVJURUQsIDAsIDApOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KIApAQCAtOTg4LDggKzEwMTgsNyBAQAogICAgICAgICAgICAgaWYgKG1SZW5kZXJlciAhPSBOVUxMKSB7CiAgICAgICAgICAgICAgICAgLy8gQXVkaW9TaW5rIGFsbG93cyBvbmx5IDEuZiBhbmQgMC5mIGZvciBvZmZsb2FkIG1vZGUuCiAgICAgICAgICAgICAgICAgLy8gRm9yIG90aGVyIHNwZWVkLCBzd2l0Y2ggdG8gbm9uLW9mZmxvYWQgbW9kZS4KLSAgICAgICAgICAgICAgICBpZiAobU9mZmxvYWRBdWRpbyAmJiAoKHJhdGUubVNwZWVkICE9IDAuZiAmJiByYXRlLm1TcGVlZCAhPSAxLmYpCi0gICAgICAgICAgICAgICAgICAgICAgICB8fCByYXRlLm1QaXRjaCAhPSAxLmYpKSB7CisgICAgICAgICAgICAgICAgaWYgKG1PZmZsb2FkQXVkaW8gJiYgKHJhdGUubVNwZWVkICE9IDEuZiB8fCByYXRlLm1QaXRjaCAhPSAxLmYpKSB7CiAgICAgICAgICAgICAgICAgICAgIGludDY0X3QgY3VycmVudFBvc2l0aW9uVXM7CiAgICAgICAgICAgICAgICAgICAgIGlmIChnZXRDdXJyZW50UG9zaXRpb24oJmN1cnJlbnRQb3NpdGlvblVzKSAhPSBPSykgewogICAgICAgICAgICAgICAgICAgICAgICAgY3VycmVudFBvc2l0aW9uVXMgPSBtUHJldmlvdXNTZWVrVGltZVVzOwpAQCAtMTAxMiwzNiArMTA0MSwxNSBAQAogICAgICAgICAgICAgICAgIGVyciA9IG1SZW5kZXJlci0+c2V0UGxheWJhY2tTZXR0aW5ncyhyYXRlKTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGlmIChlcnIgPT0gT0spIHsKLSAgICAgICAgICAgICAgICBpZiAocmF0ZS5tU3BlZWQgPT0gMC5mKSB7Ci0gICAgICAgICAgICAgICAgICAgIG9uUGF1c2UoKTsKLSAgICAgICAgICAgICAgICAgICAgbm90aWZ5TGlzdGVuZXIobVNyY0lkLCBNRURJQTJfUEFVU0VELCAwLCAwKTsKLSAgICAgICAgICAgICAgICAgICAgbVBhdXNlZEJ5Q2xpZW50ID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICAgICAgLy8gc2F2ZSBhbGwgb3RoZXIgc2V0dGluZ3MgKHVzaW5nIG5vbi1wYXVzZWQgc3BlZWQpCi0gICAgICAgICAgICAgICAgICAgIC8vIHNvIHdlIGNhbiByZXN0b3JlIHRoZW0gb24gc3RhcnQKLSAgICAgICAgICAgICAgICAgICAgQXVkaW9QbGF5YmFja1JhdGUgbmV3UmF0ZSA9IHJhdGU7Ci0gICAgICAgICAgICAgICAgICAgIG5ld1JhdGUubVNwZWVkID0gbVBsYXliYWNrU2V0dGluZ3MubVNwZWVkOwotICAgICAgICAgICAgICAgICAgICBtUGxheWJhY2tTZXR0aW5ncyA9IG5ld1JhdGU7Ci0gICAgICAgICAgICAgICAgfSBlbHNlIHsgLyogcmF0ZS5tU3BlZWQgIT0gMC5mICovCi0gICAgICAgICAgICAgICAgICAgIG1QbGF5YmFja1NldHRpbmdzID0gcmF0ZTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKG1TdGFydGVkKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAvLyBkbyBub3QgcmVzdW1lIHlldCBpZiB0aGUgc291cmNlIGlzIHN0aWxsIGJ1ZmZlcmluZwotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFtUGF1c2VkRm9yQnVmZmVyaW5nKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgb25SZXN1bWUoKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChtUHJlcGFyZWQpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIG9uU3RhcnQoKTsKLSAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIG1QbGF5YmFja1NldHRpbmdzID0gcmF0ZTsKIAotICAgICAgICAgICAgICAgICAgICBtUGF1c2VkQnlDbGllbnQgPSBmYWxzZTsKKyAgICAgICAgICAgICAgICBpZiAobVZpZGVvRGVjb2RlciAhPSBOVUxMKSB7CisgICAgICAgICAgICAgICAgICAgIHNwPEFNZXNzYWdlPiBwYXJhbXMgPSBuZXcgQU1lc3NhZ2UoKTsKKyAgICAgICAgICAgICAgICAgICAgcGFyYW1zLT5zZXRGbG9hdCgicGxheWJhY2stc3BlZWQiLCBtUGxheWJhY2tTZXR0aW5ncy5tU3BlZWQpOworICAgICAgICAgICAgICAgICAgICBtVmlkZW9EZWNvZGVyLT5zZXRQYXJhbWV0ZXJzKHBhcmFtcyk7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQogCi0gICAgICAgICAgICBpZiAobVZpZGVvRGVjb2RlciAhPSBOVUxMKSB7Ci0gICAgICAgICAgICAgICAgc3A8QU1lc3NhZ2U+IHBhcmFtcyA9IG5ldyBBTWVzc2FnZSgpOwotICAgICAgICAgICAgICAgIHBhcmFtcy0+c2V0RmxvYXQoInBsYXliYWNrLXNwZWVkIiwgbVBsYXliYWNrU2V0dGluZ3MubVNwZWVkKTsKLSAgICAgICAgICAgICAgICBtVmlkZW9EZWNvZGVyLT5zZXRQYXJhbWV0ZXJzKHBhcmFtcyk7Ci0gICAgICAgICAgICB9Ci0KICAgICAgICAgICAgIHNwPEFNZXNzYWdlPiByZXNwb25zZSA9IG5ldyBBTWVzc2FnZTsKICAgICAgICAgICAgIHJlc3BvbnNlLT5zZXRJbnQzMigiZXJyIiwgZXJyKTsKICAgICAgICAgICAgIHJlc3BvbnNlLT5wb3N0UmVwbHkocmVwbHlJRCk7CkBAIC0xMDYxLDkgKzEwNjksNiBAQAogICAgICAgICAgICAgICAgIC8vIGdldCBwbGF5YmFjayBzZXR0aW5ncyB1c2VkIGJ5IHJlbmRlcmVyLCBhcyBpdCBtYXkgYmUKICAgICAgICAgICAgICAgICAvLyBzbGlnaHRseSBvZmYgZHVlIHRvIGF1ZGlvc2luayBub3QgdGFraW5nIHNtYWxsIGNoYW5nZXMuCiAgICAgICAgICAgICAgICAgbVBsYXliYWNrU2V0dGluZ3MgPSByYXRlOwotICAgICAgICAgICAgICAgIGlmIChtUGF1c2VkKSB7Ci0gICAgICAgICAgICAgICAgICAgIHJhdGUubVNwZWVkID0gMC5mOwotICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KICAgICAgICAgICAgIHNwPEFNZXNzYWdlPiByZXNwb25zZSA9IG5ldyBBTWVzc2FnZTsKICAgICAgICAgICAgIGlmIChlcnIgPT0gT0spIHsKQEAgLTExNTcsMjEgKzExNjIsMjIgQEAKICAgICAgICAgICAgICAgICAgICAgJiYgKG1BdWRpb0RlY29kZXIgIT0gTlVMTCB8fCBtVmlkZW9EZWNvZGVyICE9IE5VTEwpKSB7CiAgICAgICAgICAgICAgICAgLy8gVGhpcyBpcyB0aGUgZmlyc3QgdGltZSB3ZSd2ZSBmb3VuZCBhbnl0aGluZyBwbGF5YWJsZS4KIAotICAgICAgICAgICAgICAgIGlmIChtU291cmNlRmxhZ3MgJiBTb3VyY2U6OkZMQUdfRFlOQU1JQ19EVVJBVElPTikgeworICAgICAgICAgICAgICAgIGlmIChtQ3VycmVudFNvdXJjZUluZm8ubVNvdXJjZUZsYWdzICYgU291cmNlOjpGTEFHX0RZTkFNSUNfRFVSQVRJT04pIHsKICAgICAgICAgICAgICAgICAgICAgc2NoZWR1bGVQb2xsRHVyYXRpb24oKTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9CiAKICAgICAgICAgICAgIHN0YXR1c190IGVycjsKLSAgICAgICAgICAgIGlmICgoZXJyID0gbVNvdXJjZS0+ZmVlZE1vcmVUU0RhdGEoKSkgIT0gT0spIHsKKyAgICAgICAgICAgIGlmICgoZXJyID0gbUN1cnJlbnRTb3VyY2VJbmZvLm1Tb3VyY2UtPmZlZWRNb3JlVFNEYXRhKCkpICE9IE9LKSB7CiAgICAgICAgICAgICAgICAgaWYgKG1BdWRpb0RlY29kZXIgPT0gTlVMTCAmJiBtVmlkZW9EZWNvZGVyID09IE5VTEwpIHsKICAgICAgICAgICAgICAgICAgICAgLy8gV2UncmUgbm90IGN1cnJlbnRseSBkZWNvZGluZyBhbnl0aGluZyAobm8gYXVkaW8gb3IKICAgICAgICAgICAgICAgICAgICAgLy8gdmlkZW8gdHJhY2tzIGZvdW5kKSBhbmQgd2UganVzdCByYW4gb3V0IG9mIGlucHV0IGRhdGEuCiAKICAgICAgICAgICAgICAgICAgICAgaWYgKGVyciA9PSBFUlJPUl9FTkRfT0ZfU1RSRUFNKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBub3RpZnlMaXN0ZW5lcihtU3JjSWQsIE1FRElBMl9QTEFZQkFDS19DT01QTEVURSwgMCwgMCk7CisgICAgICAgICAgICAgICAgICAgICAgICBub3RpZnlMaXN0ZW5lcihtQ3VycmVudFNvdXJjZUluZm8ubVNyY0lkLCBNRURJQTJfUExBWUJBQ0tfQ09NUExFVEUsIDAsIDApOwogICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICAgICAgbm90aWZ5TGlzdGVuZXIobVNyY0lkLCBNRURJQTJfRVJST1IsIE1FRElBMl9FUlJPUl9VTktOT1dOLCBlcnIpOworICAgICAgICAgICAgICAgICAgICAgICAgbm90aWZ5TGlzdGVuZXIoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1DdXJyZW50U291cmNlSW5mby5tU3JjSWQsIE1FRElBMl9FUlJPUiwgTUVESUEyX0VSUk9SX1VOS05PV04sIGVycik7CiAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgYnJlYWs7CkBAIC0xMjUzLDEwICsxMjU5LDEwIEBACiAgICAgICAgICAgICAgICAgQ0hFQ0sobXNnLT5maW5kTWVzc2FnZSgiZm9ybWF0IiwgJmZvcm1hdCkpOwogCiAgICAgICAgICAgICAgICAgc3A8QU1lc3NhZ2U+IGlucHV0Rm9ybWF0ID0KLSAgICAgICAgICAgICAgICAgICAgICAgIG1Tb3VyY2UtPmdldEZvcm1hdChmYWxzZSAvKiBhdWRpbyAqLyk7CisgICAgICAgICAgICAgICAgICAgICAgICBtQ3VycmVudFNvdXJjZUluZm8ubVNvdXJjZS0+Z2V0Rm9ybWF0KGZhbHNlIC8qIGF1ZGlvICovKTsKIAogICAgICAgICAgICAgICAgIHNldFZpZGVvU2NhbGluZ01vZGUobVZpZGVvU2NhbGluZ01vZGUpOwotICAgICAgICAgICAgICAgIHVwZGF0ZVZpZGVvU2l6ZShtU3JjSWQsIGlucHV0Rm9ybWF0LCBmb3JtYXQpOworICAgICAgICAgICAgICAgIHVwZGF0ZVZpZGVvU2l6ZShtQ3VycmVudFNvdXJjZUluZm8ubVNyY0lkLCBpbnB1dEZvcm1hdCwgZm9ybWF0KTsKICAgICAgICAgICAgIH0gZWxzZSBpZiAod2hhdCA9PSBEZWNvZGVyQmFzZTo6a1doYXRTaHV0ZG93bkNvbXBsZXRlZCkgewogICAgICAgICAgICAgICAgIEFMT0dWKCIlcyBzaHV0ZG93biBjb21wbGV0ZWQiLCBhdWRpbyA/ICJhdWRpbyIgOiAidmlkZW8iKTsKICAgICAgICAgICAgICAgICBpZiAoYXVkaW8pIHsKQEAgLTEzMjMsMjggKzEzMjksMzkgQEAKICAgICAgICAgICAgICAgICAgICAgICAgIGZpbmlzaEZsdXNoSWZQb3NzaWJsZSgpOyAgLy8gU2hvdWxkIG5vdCBvY2N1ci4KICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOyAgICAgICAgICAgICAgICAgICAgLy8gRmluaXNoIGFueXdheXMuCiAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGlmIChtU291cmNlICE9IG51bGxwdHIpIHsKKyAgICAgICAgICAgICAgICBpZiAobUN1cnJlbnRTb3VyY2VJbmZvLm1Tb3VyY2UgIT0gbnVsbHB0cikgewogICAgICAgICAgICAgICAgICAgICBpZiAoYXVkaW8pIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtVmlkZW9EZWNvZGVyRXJyb3IgfHwgbVNvdXJjZS0+Z2V0Rm9ybWF0KGZhbHNlIC8qIGF1ZGlvICovKSA9PSBOVUxMCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHx8IG1OYXRpdmVXaW5kb3cgPT0gTlVMTCB8fCBtTmF0aXZlV2luZG93LT5nZXRBTmF0aXZlV2luZG93KCkgPT0gTlVMTAorICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1WaWRlb0RlY29kZXJFcnJvcgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8fCBtQ3VycmVudFNvdXJjZUluZm8ubVNvdXJjZS0+Z2V0Rm9ybWF0KGZhbHNlIC8qIGF1ZGlvICovKSA9PSBOVUxMCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHx8IG1OYXRpdmVXaW5kb3cgPT0gTlVMTAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8fCBtTmF0aXZlV2luZG93LT5nZXRBTmF0aXZlV2luZG93KCkgPT0gTlVMTAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8fCBtVmlkZW9EZWNvZGVyID09IE5VTEwpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBXaGVuIGJvdGggYXVkaW8gYW5kIHZpZGVvIGhhdmUgZXJyb3IsIG9yIHRoaXMgc3RyZWFtIGhhcyBvbmx5IGF1ZGlvCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gd2hpY2ggaGFzIGVycm9yLCBub3RpZnkgY2xpZW50IG9mIGVycm9yLgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5vdGlmeUxpc3RlbmVyKG1TcmNJZCwgTUVESUEyX0VSUk9SLCBNRURJQTJfRVJST1JfVU5LTk9XTiwgZXJyKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBub3RpZnlMaXN0ZW5lcigKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1DdXJyZW50U291cmNlSW5mby5tU3JjSWQsIE1FRElBMl9FUlJPUiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1FRElBMl9FUlJPUl9VTktOT1dOLCBlcnIpOwogICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBPbmx5IGF1ZGlvIHRyYWNrIGhhcyBlcnJvci4gVmlkZW8gdHJhY2sgY291bGQgYmUgc3RpbGwgZ29vZCB0byBwbGF5LgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5vdGlmeUxpc3RlbmVyKG1TcmNJZCwgTUVESUEyX0lORk8sIE1FRElBMl9JTkZPX1BMQVlfQVVESU9fRVJST1IsIGVycik7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbm90aWZ5TGlzdGVuZXIoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtQ3VycmVudFNvdXJjZUluZm8ubVNyY0lkLCBNRURJQTJfSU5GTywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1FRElBMl9JTkZPX1BMQVlfQVVESU9fRVJST1IsIGVycik7CiAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICBtQXVkaW9EZWNvZGVyRXJyb3IgPSB0cnVlOwogICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1BdWRpb0RlY29kZXJFcnJvciB8fCBtU291cmNlLT5nZXRGb3JtYXQodHJ1ZSAvKiBhdWRpbyAqLykgPT0gTlVMTAorICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1BdWRpb0RlY29kZXJFcnJvcgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8fCBtQ3VycmVudFNvdXJjZUluZm8ubVNvdXJjZS0+Z2V0Rm9ybWF0KHRydWUgLyogYXVkaW8gKi8pID09IE5VTEwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfHwgbUF1ZGlvU2luayA9PSBOVUxMIHx8IG1BdWRpb0RlY29kZXIgPT0gTlVMTCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFdoZW4gYm90aCBhdWRpbyBhbmQgdmlkZW8gaGF2ZSBlcnJvciwgb3IgdGhpcyBzdHJlYW0gaGFzIG9ubHkgdmlkZW8KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyB3aGljaCBoYXMgZXJyb3IsIG5vdGlmeSBjbGllbnQgb2YgZXJyb3IuCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgbm90aWZ5TGlzdGVuZXIobVNyY0lkLCBNRURJQTJfRVJST1IsIE1FRElBMl9FUlJPUl9VTktOT1dOLCBlcnIpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5vdGlmeUxpc3RlbmVyKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbUN1cnJlbnRTb3VyY2VJbmZvLm1TcmNJZCwgTUVESUEyX0VSUk9SLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTUVESUEyX0VSUk9SX1VOS05PV04sIGVycik7CiAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIE9ubHkgdmlkZW8gdHJhY2sgaGFzIGVycm9yLiBBdWRpbyB0cmFjayBjb3VsZCBiZSBzdGlsbCBnb29kIHRvIHBsYXkuCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgbm90aWZ5TGlzdGVuZXIobVNyY0lkLCBNRURJQTJfSU5GTywgTUVESUEyX0lORk9fUExBWV9WSURFT19FUlJPUiwgZXJyKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBub3RpZnlMaXN0ZW5lcigKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1DdXJyZW50U291cmNlSW5mby5tU3JjSWQsIE1FRElBMl9JTkZPLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTUVESUEyX0lORk9fUExBWV9WSURFT19FUlJPUiwgZXJyKTsKICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgIG1WaWRlb0RlY29kZXJFcnJvciA9IHRydWU7CiAgICAgICAgICAgICAgICAgICAgIH0KQEAgLTEzOTQsMTIgKzE0MTEsMTMgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICBhdWRpbyA/ICJhdWRpbyIgOiAidmlkZW8iLCBmaW5hbFJlc3VsdCk7CiAKICAgICAgICAgICAgICAgICAgICAgbm90aWZ5TGlzdGVuZXIoCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgbVNyY0lkLCBNRURJQTJfRVJST1IsIE1FRElBMl9FUlJPUl9VTktOT1dOLCBmaW5hbFJlc3VsdCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbUN1cnJlbnRTb3VyY2VJbmZvLm1TcmNJZCwgTUVESUEyX0VSUk9SLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1FRElBMl9FUlJPUl9VTktOT1dOLCBmaW5hbFJlc3VsdCk7CiAgICAgICAgICAgICAgICAgfQogCiAgICAgICAgICAgICAgICAgaWYgKChtQXVkaW9FT1MgfHwgbUF1ZGlvRGVjb2RlciA9PSBOVUxMKQogICAgICAgICAgICAgICAgICAgICAgICAgJiYgKG1WaWRlb0VPUyB8fCBtVmlkZW9EZWNvZGVyID09IE5VTEwpKSB7Ci0gICAgICAgICAgICAgICAgICAgIG5vdGlmeUxpc3RlbmVyKG1TcmNJZCwgTUVESUEyX1BMQVlCQUNLX0NPTVBMRVRFLCAwLCAwKTsKKyAgICAgICAgICAgICAgICAgICAgbm90aWZ5TGlzdGVuZXIobUN1cnJlbnRTb3VyY2VJbmZvLm1TcmNJZCwgTUVESUEyX1BMQVlCQUNLX0NPTVBMRVRFLCAwLCAwKTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9IGVsc2UgaWYgKHdoYXQgPT0gUmVuZGVyZXI6OmtXaGF0Rmx1c2hDb21wbGV0ZSkgewogICAgICAgICAgICAgICAgIGludDMyX3QgYXVkaW87CkBAIC0xNDIwLDEwICsxNDM4LDExIEBACiAgICAgICAgICAgICAgICAgaGFuZGxlRmx1c2hDb21wbGV0ZShhdWRpbywgZmFsc2UgLyogaXNEZWNvZGVyICovKTsKICAgICAgICAgICAgICAgICBmaW5pc2hGbHVzaElmUG9zc2libGUoKTsKICAgICAgICAgICAgIH0gZWxzZSBpZiAod2hhdCA9PSBSZW5kZXJlcjo6a1doYXRWaWRlb1JlbmRlcmluZ1N0YXJ0KSB7Ci0gICAgICAgICAgICAgICAgbm90aWZ5TGlzdGVuZXIobVNyY0lkLCBNRURJQTJfSU5GTywgTUVESUEyX0lORk9fVklERU9fUkVOREVSSU5HX1NUQVJULCAwKTsKKyAgICAgICAgICAgICAgICBub3RpZnlMaXN0ZW5lcihtQ3VycmVudFNvdXJjZUluZm8ubVNyY0lkLCBNRURJQTJfSU5GTywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNRURJQTJfSU5GT19WSURFT19SRU5ERVJJTkdfU1RBUlQsIDApOwogICAgICAgICAgICAgfSBlbHNlIGlmICh3aGF0ID09IFJlbmRlcmVyOjprV2hhdE1lZGlhUmVuZGVyaW5nU3RhcnQpIHsKICAgICAgICAgICAgICAgICBBTE9HVigibWVkaWEgcmVuZGVyaW5nIHN0YXJ0ZWQiKTsKLSAgICAgICAgICAgICAgICBub3RpZnlMaXN0ZW5lcihtU3JjSWQsIE1FRElBMl9TVEFSVEVELCAwLCAwKTsKKyAgICAgICAgICAgICAgICBub3RpZnlMaXN0ZW5lcihtQ3VycmVudFNvdXJjZUluZm8ubVNyY0lkLCBNRURJQTJfU1RBUlRFRCwgMCwgMCk7CiAgICAgICAgICAgICB9IGVsc2UgaWYgKHdoYXQgPT0gUmVuZGVyZXI6OmtXaGF0QXVkaW9UZWFyRG93bikgewogICAgICAgICAgICAgICAgIGludDMyX3QgcmVhc29uOwogICAgICAgICAgICAgICAgIENIRUNLKG1zZy0+ZmluZEludDMyKCJyZWFzb24iLCAmcmVhc29uKSk7CkBAIC0xNDc2LDcgKzE0OTUsNyBAQAogICAgICAgICAgICAgaW50NjRfdCB0aW1lclVzOwogICAgICAgICAgICAgQ0hFQ0sobXNnLT5maW5kSW50NjQoInRpbWVyVXMiLCAmdGltZXJVcykpOwogCi0gICAgICAgICAgICBub3RpZnlMaXN0ZW5lcihtU3JjSWQsIE1FRElBMl9OT1RJRllfVElNRSwgdGltZXJVcywgMCk7CisgICAgICAgICAgICBub3RpZnlMaXN0ZW5lcihtQ3VycmVudFNvdXJjZUluZm8ubVNyY0lkLCBNRURJQTJfTk9USUZZX1RJTUUsIHRpbWVyVXMsIDApOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KIApAQCAtMTQ5NSwyMCArMTUxNCwyMCBAQAogICAgICAgICAgICAgaWYgKCFtU3RhcnRlZCkgewogICAgICAgICAgICAgICAgIGlmICghbVNvdXJjZVN0YXJ0ZWQpIHsKICAgICAgICAgICAgICAgICAgICAgbVNvdXJjZVN0YXJ0ZWQgPSB0cnVlOwotICAgICAgICAgICAgICAgICAgICBtU291cmNlLT5zdGFydCgpOworICAgICAgICAgICAgICAgICAgICBtQ3VycmVudFNvdXJjZUluZm8ubVNvdXJjZS0+c3RhcnQoKTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgaWYgKHNlZWtUaW1lVXMgPiAwKSB7CiAgICAgICAgICAgICAgICAgICAgIHBlcmZvcm1TZWVrKHNlZWtUaW1lVXMsIChNZWRpYVBsYXllcjJTZWVrTW9kZSltb2RlKTsKICAgICAgICAgICAgICAgICB9CiAKICAgICAgICAgICAgICAgICBpZiAobmVlZE5vdGlmeSkgewotICAgICAgICAgICAgICAgICAgICBub3RpZnlEcml2ZXJTZWVrQ29tcGxldGUobVNyY0lkKTsKKyAgICAgICAgICAgICAgICAgICAgbm90aWZ5RHJpdmVyU2Vla0NvbXBsZXRlKG1DdXJyZW50U291cmNlSW5mby5tU3JjSWQpOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgLy8gc2Vla3MgY2FuIHRha2UgYSB3aGlsZSwgc28gd2UgZXNzZW50aWFsbHkgcGF1c2VkCi0gICAgICAgICAgICBub3RpZnlMaXN0ZW5lcihtU3JjSWQsIE1FRElBMl9QQVVTRUQsIDAsIDApOworICAgICAgICAgICAgbm90aWZ5TGlzdGVuZXIobUN1cnJlbnRTb3VyY2VJbmZvLm1TcmNJZCwgTUVESUEyX1BBVVNFRCwgMCwgMCk7CiAKICAgICAgICAgICAgIG1EZWZlcnJlZEFjdGlvbnMucHVzaF9iYWNrKAogICAgICAgICAgICAgICAgICAgICBuZXcgRmx1c2hEZWNvZGVyQWN0aW9uKEZMVVNIX0NNRF9GTFVTSCAvKiBhdWRpbyAqLywKQEAgLTE1MjcsMTAgKzE1NDYsNDkgQEAKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAKKyAgICAgICAgY2FzZSBrV2hhdFJld2luZDoKKyAgICAgICAgeworICAgICAgICAgICAgQUxPR1YoImtXaGF0UmV3aW5kIik7CisKKyAgICAgICAgICAgIGludDY0X3Qgc2Vla1RpbWVVcyA9IG1DdXJyZW50U291cmNlSW5mby5tU3RhcnRUaW1lVXM7CisgICAgICAgICAgICBpbnQzMl90IG1vZGUgPSBNZWRpYVBsYXllcjJTZWVrTW9kZTo6U0VFS19DTE9TRVNUOworCisgICAgICAgICAgICBpZiAoIW1TdGFydGVkKSB7CisgICAgICAgICAgICAgICAgaWYgKCFtU291cmNlU3RhcnRlZCkgeworICAgICAgICAgICAgICAgICAgICBtU291cmNlU3RhcnRlZCA9IHRydWU7CisgICAgICAgICAgICAgICAgICAgIG1DdXJyZW50U291cmNlSW5mby5tU291cmNlLT5zdGFydCgpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBwZXJmb3JtU2VlayhzZWVrVGltZVVzLCAoTWVkaWFQbGF5ZXIyU2Vla01vZGUpbW9kZSk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIC8vIHNlZWtzIGNhbiB0YWtlIGEgd2hpbGUsIHNvIHdlIGVzc2VudGlhbGx5IHBhdXNlZAorICAgICAgICAgICAgbm90aWZ5TGlzdGVuZXIobUN1cnJlbnRTb3VyY2VJbmZvLm1TcmNJZCwgTUVESUEyX1BBVVNFRCwgMCwgMCk7CisKKyAgICAgICAgICAgIG1EZWZlcnJlZEFjdGlvbnMucHVzaF9iYWNrKAorICAgICAgICAgICAgICAgICAgICBuZXcgRmx1c2hEZWNvZGVyQWN0aW9uKEZMVVNIX0NNRF9GTFVTSCAvKiBhdWRpbyAqLywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGTFVTSF9DTURfRkxVU0ggLyogdmlkZW8gKi8pKTsKKworICAgICAgICAgICAgbURlZmVycmVkQWN0aW9ucy5wdXNoX2JhY2soCisgICAgICAgICAgICAgICAgICAgIG5ldyBTZWVrQWN0aW9uKHNlZWtUaW1lVXMsIChNZWRpYVBsYXllcjJTZWVrTW9kZSltb2RlKSk7CisKKyAgICAgICAgICAgIC8vIEFmdGVyIGEgZmx1c2ggd2l0aG91dCBzaHV0ZG93biwgZGVjb2RlciBpcyBwYXVzZWQuCisgICAgICAgICAgICAvLyBEb24ndCByZXN1bWUgaXQgdW50aWwgc291cmNlIHNlZWsgaXMgZG9uZSwgb3RoZXJ3aXNlIGl0IGNvdWxkCisgICAgICAgICAgICAvLyBzdGFydCBwdWxsaW5nIHN0YWxlIGRhdGEgdG9vIHNvb24uCisgICAgICAgICAgICBtRGVmZXJyZWRBY3Rpb25zLnB1c2hfYmFjaygKKyAgICAgICAgICAgICAgICAgICAgbmV3IFJlc3VtZURlY29kZXJBY3Rpb24oZmFsc2UgLyogbmVlZE5vdGlmeSAqLykpOworCisgICAgICAgICAgICBwcm9jZXNzRGVmZXJyZWRBY3Rpb25zKCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCiAgICAgICAgIGNhc2Uga1doYXRQYXVzZToKICAgICAgICAgeworICAgICAgICAgICAgaWYgKCFtU3RhcnRlZCkgeworICAgICAgICAgICAgICAgIG9uU3RhcnQoZmFsc2UgLyogcGxheSAqLyk7CisgICAgICAgICAgICB9CiAgICAgICAgICAgICBvblBhdXNlKCk7Ci0gICAgICAgICAgICBub3RpZnlMaXN0ZW5lcihtU3JjSWQsIE1FRElBMl9QQVVTRUQsIDAsIDApOworICAgICAgICAgICAgbm90aWZ5TGlzdGVuZXIobUN1cnJlbnRTb3VyY2VJbmZvLm1TcmNJZCwgTUVESUEyX1BBVVNFRCwgMCwgMCk7CiAgICAgICAgICAgICBtUGF1c2VkQnlDbGllbnQgPSB0cnVlOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KQEAgLTE1ODMsOCArMTY0MSw4IEBACiAgICAgICAgIHJldHVybjsKICAgICB9CiAgICAgbVBhdXNlZCA9IGZhbHNlOwotICAgIGlmIChtU291cmNlICE9IE5VTEwpIHsKLSAgICAgICAgbVNvdXJjZS0+cmVzdW1lKCk7CisgICAgaWYgKG1DdXJyZW50U291cmNlSW5mby5tU291cmNlICE9IE5VTEwpIHsKKyAgICAgICAgbUN1cnJlbnRTb3VyY2VJbmZvLm1Tb3VyY2UtPnJlc3VtZSgpOwogICAgIH0gZWxzZSB7CiAgICAgICAgIEFMT0dXKCJyZXN1bWUgY2FsbGVkIHdoZW4gc291cmNlIGlzIGdvbmUgb3Igbm90IHNldCIpOwogICAgIH0KQEAgLTE2MDIsMTIgKzE2NjAsMTIgQEAKICAgICBzdGFydFBsYXliYWNrVGltZXIoIm9ucmVzdW1lIik7CiB9CiAKLXZvaWQgTnVQbGF5ZXIyOjpvblN0YXJ0KCkgewordm9pZCBOdVBsYXllcjI6Om9uU3RhcnQoYm9vbCBwbGF5KSB7CiAgICAgQUxPR1YoIm9uU3RhcnQ6IG1DcnlwdG86ICVwIiwgbUNyeXB0by5nZXQoKSk7CiAKICAgICBpZiAoIW1Tb3VyY2VTdGFydGVkKSB7CiAgICAgICAgIG1Tb3VyY2VTdGFydGVkID0gdHJ1ZTsKLSAgICAgICAgbVNvdXJjZS0+c3RhcnQoKTsKKyAgICAgICAgbUN1cnJlbnRTb3VyY2VJbmZvLm1Tb3VyY2UtPnN0YXJ0KCk7CiAgICAgfQogCiAgICAgbU9mZmxvYWRBdWRpbyA9IGZhbHNlOwpAQCAtMTYxOCwyMiArMTY3NiwyMyBAQAogCiAgICAgdWludDMyX3QgZmxhZ3MgPSAwOwogCi0gICAgaWYgKG1Tb3VyY2UtPmlzUmVhbFRpbWUoKSkgeworICAgIGlmIChtQ3VycmVudFNvdXJjZUluZm8ubVNvdXJjZS0+aXNSZWFsVGltZSgpKSB7CiAgICAgICAgIGZsYWdzIHw9IFJlbmRlcmVyOjpGTEFHX1JFQUxfVElNRTsKICAgICB9CiAKLSAgICBib29sIGhhc0F1ZGlvID0gKG1Tb3VyY2UtPmdldEZvcm1hdCh0cnVlIC8qIGF1ZGlvICovKSAhPSBOVUxMKTsKLSAgICBib29sIGhhc1ZpZGVvID0gKG1Tb3VyY2UtPmdldEZvcm1hdChmYWxzZSAvKiBhdWRpbyAqLykgIT0gTlVMTCk7CisgICAgYm9vbCBoYXNBdWRpbyA9IChtQ3VycmVudFNvdXJjZUluZm8ubVNvdXJjZS0+Z2V0Rm9ybWF0KHRydWUgLyogYXVkaW8gKi8pICE9IE5VTEwpOworICAgIGJvb2wgaGFzVmlkZW8gPSAobUN1cnJlbnRTb3VyY2VJbmZvLm1Tb3VyY2UtPmdldEZvcm1hdChmYWxzZSAvKiBhdWRpbyAqLykgIT0gTlVMTCk7CiAgICAgaWYgKCFoYXNBdWRpbyAmJiAhaGFzVmlkZW8pIHsKICAgICAgICAgQUxPR0UoIm5vIG1ldGFkYXRhIGZvciBlaXRoZXIgYXVkaW8gb3IgdmlkZW8gc291cmNlIik7Ci0gICAgICAgIG1Tb3VyY2UtPnN0b3AoKTsKKyAgICAgICAgbUN1cnJlbnRTb3VyY2VJbmZvLm1Tb3VyY2UtPnN0b3AoKTsKICAgICAgICAgbVNvdXJjZVN0YXJ0ZWQgPSBmYWxzZTsKLSAgICAgICAgbm90aWZ5TGlzdGVuZXIobVNyY0lkLCBNRURJQTJfRVJST1IsIE1FRElBMl9FUlJPUl9VTktOT1dOLCBFUlJPUl9NQUxGT1JNRUQpOworICAgICAgICBub3RpZnlMaXN0ZW5lcihtQ3VycmVudFNvdXJjZUluZm8ubVNyY0lkLCBNRURJQTJfRVJST1IsCisgICAgICAgICAgICAgICAgICAgICAgIE1FRElBMl9FUlJPUl9VTktOT1dOLCBFUlJPUl9NQUxGT1JNRUQpOwogICAgICAgICByZXR1cm47CiAgICAgfQogICAgIEFMT0dWX0lGKCFoYXNBdWRpbywgIm5vIG1ldGFkYXRhIGZvciBhdWRpbyBzb3VyY2UiKTsgIC8vIHZpZGVvIG9ubHkgc3RyZWFtCiAKLSAgICBzcDxNZXRhRGF0YT4gYXVkaW9NZXRhID0gbVNvdXJjZS0+Z2V0Rm9ybWF0TWV0YSh0cnVlIC8qIGF1ZGlvICovKTsKKyAgICBzcDxNZXRhRGF0YT4gYXVkaW9NZXRhID0gbUN1cnJlbnRTb3VyY2VJbmZvLm1Tb3VyY2UtPmdldEZvcm1hdE1ldGEodHJ1ZSAvKiBhdWRpbyAqLyk7CiAKICAgICBhdWRpb19zdHJlYW1fdHlwZV90IHN0cmVhbVR5cGUgPSBBVURJT19TVFJFQU1fTVVTSUM7CiAgICAgaWYgKG1BdWRpb1NpbmsgIT0gTlVMTCkgewpAQCAtMTY0MSw3ICsxNzAwLDggQEAKICAgICB9CiAKICAgICBtT2ZmbG9hZEF1ZGlvID0KLSAgICAgICAgY2FuT2ZmbG9hZFN0cmVhbShhdWRpb01ldGEsIGhhc1ZpZGVvLCBtU291cmNlLT5pc1N0cmVhbWluZygpLCBzdHJlYW1UeXBlKQorICAgICAgICBKTWVkaWFQbGF5ZXIyVXRpbHM6OmlzT2ZmbG9hZGVkQXVkaW9QbGF5YmFja1N1cHBvcnRlZCgKKyAgICAgICAgICAgICAgICBhdWRpb01ldGEsIGhhc1ZpZGVvLCBtQ3VycmVudFNvdXJjZUluZm8ubVNvdXJjZS0+aXNTdHJlYW1pbmcoKSwgc3RyZWFtVHlwZSkKICAgICAgICAgICAgICAgICAmJiAobVBsYXliYWNrU2V0dGluZ3MubVNwZWVkID09IDEuZiAmJiBtUGxheWJhY2tTZXR0aW5ncy5tUGl0Y2ggPT0gMS5mKTsKIAogICAgIC8vIE1vZHVsYXIgRFJNOiBEaXNhYmxpbmcgYXVkaW8gb2ZmbG9hZCBpZiB0aGUgc291cmNlIGlzIHByb3RlY3RlZApAQCAtMTY2MCwxNCArMTcyMCwxNCBAQAogICAgIG1SZW5kZXJlciA9IG5ldyBSZW5kZXJlcihtQXVkaW9TaW5rLCBtTWVkaWFDbG9jaywgbm90aWZ5LCBmbGFncyk7CiAgICAgbVJlbmRlcmVyTG9vcGVyID0gbmV3IEFMb29wZXI7CiAgICAgbVJlbmRlcmVyTG9vcGVyLT5zZXROYW1lKCJOdVBsYXllclJlbmRlcmVyIik7Ci0gICAgbVJlbmRlcmVyTG9vcGVyLT5zdGFydChmYWxzZSwgZmFsc2UsIEFORFJPSURfUFJJT1JJVFlfQVVESU8pOworICAgIG1SZW5kZXJlckxvb3Blci0+c3RhcnQoZmFsc2UsIHRydWUsIEFORFJPSURfUFJJT1JJVFlfQVVESU8pOwogICAgIG1SZW5kZXJlckxvb3Blci0+cmVnaXN0ZXJIYW5kbGVyKG1SZW5kZXJlcik7CiAKICAgICBzdGF0dXNfdCBlcnIgPSBtUmVuZGVyZXItPnNldFBsYXliYWNrU2V0dGluZ3MobVBsYXliYWNrU2V0dGluZ3MpOwogICAgIGlmIChlcnIgIT0gT0spIHsKLSAgICAgICAgbVNvdXJjZS0+c3RvcCgpOworICAgICAgICBtQ3VycmVudFNvdXJjZUluZm8ubVNvdXJjZS0+c3RvcCgpOwogICAgICAgICBtU291cmNlU3RhcnRlZCA9IGZhbHNlOwotICAgICAgICBub3RpZnlMaXN0ZW5lcihtU3JjSWQsIE1FRElBMl9FUlJPUiwgTUVESUEyX0VSUk9SX1VOS05PV04sIGVycik7CisgICAgICAgIG5vdGlmeUxpc3RlbmVyKG1DdXJyZW50U291cmNlSW5mby5tU3JjSWQsIE1FRElBMl9FUlJPUiwgTUVESUEyX0VSUk9SX1VOS05PV04sIGVycik7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKQEAgLTE2NzYsNiArMTczNiwxMiBAQAogICAgICAgICBtUmVuZGVyZXItPnNldFZpZGVvRnJhbWVSYXRlKHJhdGUpOwogICAgIH0KIAorICAgIGFkZEVuZFRpbWVNb25pdG9yKCk7CisgICAgLy8gUmVuZGVyZXIgaXMgY3JlYXRlZCBpbiBwYXVzZWQgc3RhdGUuCisgICAgaWYgKHBsYXkpIHsKKyAgICAgICAgbVJlbmRlcmVyLT5yZXN1bWUoKTsKKyAgICB9CisKICAgICBpZiAobVZpZGVvRGVjb2RlciAhPSBOVUxMKSB7CiAgICAgICAgIG1WaWRlb0RlY29kZXItPnNldFJlbmRlcmVyKG1SZW5kZXJlcik7CiAgICAgfQpAQCAtMTY4NCwxMCArMTc1MCwyMyBAQAogICAgIH0KIAogICAgIHN0YXJ0UGxheWJhY2tUaW1lcigib25zdGFydCIpOworICAgIG5vdGlmeUxpc3RlbmVyKG1DdXJyZW50U291cmNlSW5mby5tU3JjSWQsIE1FRElBMl9JTkZPLCBNRURJQTJfSU5GT19EQVRBX1NPVVJDRV9TVEFSVCwgMCk7CiAKICAgICBwb3N0U2NhblNvdXJjZXMoKTsKIH0KIAordm9pZCBOdVBsYXllcjI6OmFkZEVuZFRpbWVNb25pdG9yKCkgeworICAgICsrbUVPU01vbml0b3JHZW5lcmF0aW9uOworCisgICAgaWYgKG1DdXJyZW50U291cmNlSW5mby5tRW5kVGltZVVzID09IERhdGFTb3VyY2VEZXNjOjprTWF4VGltZVVzKSB7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBzcDxBTWVzc2FnZT4gbXNnID0gbmV3IEFNZXNzYWdlKGtXaGF0RU9TTW9uaXRvciwgdGhpcyk7CisgICAgbXNnLT5zZXRJbnQzMigiZ2VuZXJhdGlvbiIsIG1FT1NNb25pdG9yR2VuZXJhdGlvbik7CisgICAgbU1lZGlhQ2xvY2stPmFkZFRpbWVyKG1zZywgbUN1cnJlbnRTb3VyY2VJbmZvLm1FbmRUaW1lVXMpOworfQorCiB2b2lkIE51UGxheWVyMjo6c3RhcnRQbGF5YmFja1RpbWVyKGNvbnN0IGNoYXIgKndoZXJlKSB7CiAgICAgTXV0ZXg6OkF1dG9sb2NrIGF1dG9Mb2NrKG1QbGF5aW5nVGltZUxvY2spOwogICAgIGlmIChtTGFzdFN0YXJ0ZWRQbGF5aW5nVGltZU5zID09IDApIHsKQEAgLTE3MDksNyArMTc4OCw3IEBACiAgICAgICAgICAgICBBTE9HVigic3RvcFBsYXliYWNrVGltZXIoKSAgbG9nICAlMjAiIFBSSWQ2NCAiIiwgcGxheWVkKTsKIAogICAgICAgICAgICAgaWYgKHBsYXllZCA+IDApIHsKLSAgICAgICAgICAgICAgICBkcml2ZXItPm5vdGlmeU1vcmVQbGF5aW5nVGltZVVzKG1TcmNJZCwgKHBsYXllZCs1MDApLzEwMDApOworICAgICAgICAgICAgICAgIGRyaXZlci0+bm90aWZ5TW9yZVBsYXlpbmdUaW1lVXMobUN1cnJlbnRTb3VyY2VJbmZvLm1TcmNJZCwgKHBsYXllZCs1MDApLzEwMDApOwogICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgICAgIG1MYXN0U3RhcnRlZFBsYXlpbmdUaW1lTnMgPSAwOwpAQCAtMTcyNyw3ICsxODA2LDggQEAKIHZvaWQgTnVQbGF5ZXIyOjpzdG9wUmVidWZmZXJpbmdUaW1lcihib29sIGV4aXRpbmdQbGF5YmFjaykgewogICAgIE11dGV4OjpBdXRvbG9jayBhdXRvTG9jayhtUGxheWluZ1RpbWVMb2NrKTsKIAotICAgIEFMT0dWKCJzdG9wUmVidWZmZXJUaW1lcigpICB0aW1lICUyMCIgUFJJZDY0ICIgKGV4aXRpbmcgJWQpIiwgbUxhc3RTdGFydGVkUmVidWZmZXJpbmdUaW1lTnMsIGV4aXRpbmdQbGF5YmFjayk7CisgICAgQUxPR1YoInN0b3BSZWJ1ZmZlclRpbWVyKCkgIHRpbWUgJTIwIiBQUklkNjQgIiAoZXhpdGluZyAlZCkiLAorICAgICAgICAgIG1MYXN0U3RhcnRlZFJlYnVmZmVyaW5nVGltZU5zLCBleGl0aW5nUGxheWJhY2spOwogCiAgICAgaWYgKG1MYXN0U3RhcnRlZFJlYnVmZmVyaW5nVGltZU5zICE9IDApIHsKICAgICAgICAgc3A8TnVQbGF5ZXIyRHJpdmVyPiBkcml2ZXIgPSBtRHJpdmVyLnByb21vdGUoKTsKQEAgLTE3MzcsOSArMTgxNywxMCBAQAogICAgICAgICAgICAgQUxPR1YoInN0b3BSZWJ1ZmZlcmluZ1RpbWVyKCkgIGxvZyAgJTIwIiBQUklkNjQgIiIsIHJlYnVmZmVyZWQpOwogCiAgICAgICAgICAgICBpZiAocmVidWZmZXJlZCA+IDApIHsKLSAgICAgICAgICAgICAgICBkcml2ZXItPm5vdGlmeU1vcmVSZWJ1ZmZlcmluZ1RpbWVVcyhtU3JjSWQsIChyZWJ1ZmZlcmVkKzUwMCkvMTAwMCk7CisgICAgICAgICAgICAgICAgZHJpdmVyLT5ub3RpZnlNb3JlUmVidWZmZXJpbmdUaW1lVXMoCisgICAgICAgICAgICAgICAgICAgICAgICBtQ3VycmVudFNvdXJjZUluZm8ubVNyY0lkLCAocmVidWZmZXJlZCs1MDApLzEwMDApOwogICAgICAgICAgICAgICAgIGlmIChleGl0aW5nUGxheWJhY2spIHsKLSAgICAgICAgICAgICAgICAgICAgZHJpdmVyLT5ub3RpZnlSZWJ1ZmZlcmluZ1doZW5FeGl0KG1TcmNJZCwgdHJ1ZSk7CisgICAgICAgICAgICAgICAgICAgIGRyaXZlci0+bm90aWZ5UmVidWZmZXJpbmdXaGVuRXhpdChtQ3VycmVudFNvdXJjZUluZm8ubVNyY0lkLCB0cnVlKTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KQEAgLTE3NTUsOCArMTgzNiw4IEBACiAgICAgICAgIHJldHVybjsKICAgICB9CiAgICAgbVBhdXNlZCA9IHRydWU7Ci0gICAgaWYgKG1Tb3VyY2UgIT0gTlVMTCkgewotICAgICAgICBtU291cmNlLT5wYXVzZSgpOworICAgIGlmIChtQ3VycmVudFNvdXJjZUluZm8ubVNvdXJjZSAhPSBOVUxMKSB7CisgICAgICAgIG1DdXJyZW50U291cmNlSW5mby5tU291cmNlLT5wYXVzZSgpOwogICAgIH0gZWxzZSB7CiAgICAgICAgIEFMT0dXKCJwYXVzZSBjYWxsZWQgd2hlbiBzb3VyY2UgaXMgZ29uZSBvciBub3Qgc2V0Iik7CiAgICAgfQpAQCAtMTg0Niw3ICsxOTI3LDcgQEAKIAogICAgIHN0YXR1c190IGVyciA9IG1SZW5kZXJlci0+b3BlbkF1ZGlvU2luaygKICAgICAgICAgICAgIGZvcm1hdCwgdHJ1ZSAvKiBvZmZsb2FkT25seSAqLywgaGFzVmlkZW8sCi0gICAgICAgICAgICBBVURJT19PVVRQVVRfRkxBR19OT05FLCAmbU9mZmxvYWRBdWRpbywgbVNvdXJjZS0+aXNTdHJlYW1pbmcoKSk7CisgICAgICAgICAgICBBVURJT19PVVRQVVRfRkxBR19OT05FLCAmbU9mZmxvYWRBdWRpbywgbUN1cnJlbnRTb3VyY2VJbmZvLm1Tb3VyY2UtPmlzU3RyZWFtaW5nKCkpOwogICAgIGlmIChlcnIgIT0gT0spIHsKICAgICAgICAgLy8gQW55IGZhaWx1cmUgd2UgdHVybiBvZmYgbU9mZmxvYWRBdWRpby4KICAgICAgICAgbU9mZmxvYWRBdWRpbyA9IGZhbHNlOwpAQCAtMTg5OSw3ICsxOTgwLDcgQEAKIH0KIAogdm9pZCBOdVBsYXllcjI6OmRldGVybWluZUF1ZGlvTW9kZUNoYW5nZShjb25zdCBzcDxBTWVzc2FnZT4gJmF1ZGlvRm9ybWF0KSB7Ci0gICAgaWYgKG1Tb3VyY2UgPT0gTlVMTCB8fCBtQXVkaW9TaW5rID09IE5VTEwpIHsKKyAgICBpZiAobUN1cnJlbnRTb3VyY2VJbmZvLm1Tb3VyY2UgPT0gTlVMTCB8fCBtQXVkaW9TaW5rID09IE5VTEwpIHsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIApAQCAtMTkwOSwxMiArMTk5MCwxMiBAQAogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgc3A8TWV0YURhdGE+IGF1ZGlvTWV0YSA9IG1Tb3VyY2UtPmdldEZvcm1hdE1ldGEodHJ1ZSAvKiBhdWRpbyAqLyk7Ci0gICAgc3A8QU1lc3NhZ2U+IHZpZGVvRm9ybWF0ID0gbVNvdXJjZS0+Z2V0Rm9ybWF0KGZhbHNlIC8qIGF1ZGlvICovKTsKKyAgICBzcDxNZXRhRGF0YT4gYXVkaW9NZXRhID0gbUN1cnJlbnRTb3VyY2VJbmZvLm1Tb3VyY2UtPmdldEZvcm1hdE1ldGEodHJ1ZSAvKiBhdWRpbyAqLyk7CisgICAgc3A8QU1lc3NhZ2U+IHZpZGVvRm9ybWF0ID0gbUN1cnJlbnRTb3VyY2VJbmZvLm1Tb3VyY2UtPmdldEZvcm1hdChmYWxzZSAvKiBhdWRpbyAqLyk7CiAgICAgYXVkaW9fc3RyZWFtX3R5cGVfdCBzdHJlYW1UeXBlID0gbUF1ZGlvU2luay0+Z2V0QXVkaW9TdHJlYW1UeXBlKCk7CiAgICAgY29uc3QgYm9vbCBoYXNWaWRlbyA9ICh2aWRlb0Zvcm1hdCAhPSBOVUxMKTsKLSAgICBib29sIGNhbk9mZmxvYWQgPSBjYW5PZmZsb2FkU3RyZWFtKAotICAgICAgICAgICAgYXVkaW9NZXRhLCBoYXNWaWRlbywgbVNvdXJjZS0+aXNTdHJlYW1pbmcoKSwgc3RyZWFtVHlwZSkKKyAgICBib29sIGNhbk9mZmxvYWQgPSBKTWVkaWFQbGF5ZXIyVXRpbHM6OmlzT2ZmbG9hZGVkQXVkaW9QbGF5YmFja1N1cHBvcnRlZCgKKyAgICAgICAgICAgIGF1ZGlvTWV0YSwgaGFzVmlkZW8sIG1DdXJyZW50U291cmNlSW5mby5tU291cmNlLT5pc1N0cmVhbWluZygpLCBzdHJlYW1UeXBlKQogICAgICAgICAgICAgICAgICAgICAmJiAobVBsYXliYWNrU2V0dGluZ3MubVNwZWVkID09IDEuZiAmJiBtUGxheWJhY2tTZXR0aW5ncy5tUGl0Y2ggPT0gMS5mKTsKIAogICAgIC8vIE1vZHVsYXIgRFJNOiBEaXNhYmxpbmcgYXVkaW8gb2ZmbG9hZCBpZiB0aGUgc291cmNlIGlzIHByb3RlY3RlZApAQCAtMTk0NSw3ICsyMDI2LDcgQEAKICAgICAgICAgcmV0dXJuIE9LOwogICAgIH0KIAotICAgIHNwPEFNZXNzYWdlPiBmb3JtYXQgPSBtU291cmNlLT5nZXRGb3JtYXQoYXVkaW8pOworICAgIHNwPEFNZXNzYWdlPiBmb3JtYXQgPSBtQ3VycmVudFNvdXJjZUluZm8ubVNvdXJjZS0+Z2V0Rm9ybWF0KGF1ZGlvKTsKIAogICAgIGlmIChmb3JtYXQgPT0gTlVMTCkgewogICAgICAgICByZXR1cm4gVU5LTk9XTl9FUlJPUjsKQEAgLTE5NjcsMTEgKzIwNDgsMTEgQEAKICAgICAgICAgICAgIG1DQ0RlY29kZXIgPSBuZXcgQ0NEZWNvZGVyKGNjTm90aWZ5KTsKICAgICAgICAgfQogCi0gICAgICAgIGlmIChtU291cmNlRmxhZ3MgJiBTb3VyY2U6OkZMQUdfU0VDVVJFKSB7CisgICAgICAgIGlmIChtQ3VycmVudFNvdXJjZUluZm8ubVNvdXJjZUZsYWdzICYgU291cmNlOjpGTEFHX1NFQ1VSRSkgewogICAgICAgICAgICAgZm9ybWF0LT5zZXRJbnQzMigic2VjdXJlIiwgdHJ1ZSk7CiAgICAgICAgIH0KIAotICAgICAgICBpZiAobVNvdXJjZUZsYWdzICYgU291cmNlOjpGTEFHX1BST1RFQ1RFRCkgeworICAgICAgICBpZiAobUN1cnJlbnRTb3VyY2VJbmZvLm1Tb3VyY2VGbGFncyAmIFNvdXJjZTo6RkxBR19QUk9URUNURUQpIHsKICAgICAgICAgICAgIGZvcm1hdC0+c2V0SW50MzIoInByb3RlY3RlZCIsIHRydWUpOwogICAgICAgICB9CiAKQEAgLTE5OTAsMTYgKzIwNzEsMTYgQEAKICAgICAgICAgICAgIGRldGVybWluZUF1ZGlvTW9kZUNoYW5nZShmb3JtYXQpOwogICAgICAgICB9CiAgICAgICAgIGlmIChtT2ZmbG9hZEF1ZGlvKSB7Ci0gICAgICAgICAgICBtU291cmNlLT5zZXRPZmZsb2FkQXVkaW8odHJ1ZSAvKiBvZmZsb2FkICovKTsKKyAgICAgICAgICAgIG1DdXJyZW50U291cmNlSW5mby5tU291cmNlLT5zZXRPZmZsb2FkQXVkaW8odHJ1ZSAvKiBvZmZsb2FkICovKTsKIAotICAgICAgICAgICAgY29uc3QgYm9vbCBoYXNWaWRlbyA9IChtU291cmNlLT5nZXRGb3JtYXQoZmFsc2UgLyphdWRpbyAqLykgIT0gTlVMTCk7CisgICAgICAgICAgICBjb25zdCBib29sIGhhc1ZpZGVvID0gKG1DdXJyZW50U291cmNlSW5mby5tU291cmNlLT5nZXRGb3JtYXQoZmFsc2UgLyphdWRpbyAqLykgIT0gTlVMTCk7CiAgICAgICAgICAgICBmb3JtYXQtPnNldEludDMyKCJoYXMtdmlkZW8iLCBoYXNWaWRlbyk7Ci0gICAgICAgICAgICAqZGVjb2RlciA9IG5ldyBEZWNvZGVyUGFzc1Rocm91Z2gobm90aWZ5LCBtU291cmNlLCBtUmVuZGVyZXIpOworICAgICAgICAgICAgKmRlY29kZXIgPSBuZXcgRGVjb2RlclBhc3NUaHJvdWdoKG5vdGlmeSwgbUN1cnJlbnRTb3VyY2VJbmZvLm1Tb3VyY2UsIG1SZW5kZXJlcik7CiAgICAgICAgICAgICBBTE9HVigiaW5zdGFudGlhdGVEZWNvZGVyIGF1ZGlvIERlY29kZXJQYXNzVGhyb3VnaCAgaGFzVmlkZW86ICVkIiwgaGFzVmlkZW8pOwogICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgbVNvdXJjZS0+c2V0T2ZmbG9hZEF1ZGlvKGZhbHNlIC8qIG9mZmxvYWQgKi8pOworICAgICAgICAgICAgbUN1cnJlbnRTb3VyY2VJbmZvLm1Tb3VyY2UtPnNldE9mZmxvYWRBdWRpbyhmYWxzZSAvKiBvZmZsb2FkICovKTsKIAotICAgICAgICAgICAgKmRlY29kZXIgPSBuZXcgRGVjb2Rlcihub3RpZnksIG1Tb3VyY2UsIG1QSUQsIG1VSUQsIG1SZW5kZXJlcik7CisgICAgICAgICAgICAqZGVjb2RlciA9IG5ldyBEZWNvZGVyKG5vdGlmeSwgbUN1cnJlbnRTb3VyY2VJbmZvLm1Tb3VyY2UsIG1QSUQsIG1VSUQsIG1SZW5kZXJlcik7CiAgICAgICAgICAgICBBTE9HVigiaW5zdGFudGlhdGVEZWNvZGVyIGF1ZGlvIERlY29kZXIiKTsKICAgICAgICAgfQogICAgICAgICBtQXVkaW9EZWNvZGVyRXJyb3IgPSBmYWxzZTsKQEAgLTIwMDksNyArMjA5MCw4IEBACiAgICAgICAgIG5vdGlmeS0+c2V0SW50MzIoImdlbmVyYXRpb24iLCBtVmlkZW9EZWNvZGVyR2VuZXJhdGlvbik7CiAKICAgICAgICAgKmRlY29kZXIgPSBuZXcgRGVjb2RlcigKLSAgICAgICAgICAgICAgICBub3RpZnksIG1Tb3VyY2UsIG1QSUQsIG1VSUQsIG1SZW5kZXJlciwgbU5hdGl2ZVdpbmRvdywgbUNDRGVjb2Rlcik7CisgICAgICAgICAgICAgICAgbm90aWZ5LCBtQ3VycmVudFNvdXJjZUluZm8ubVNvdXJjZSwgbVBJRCwgbVVJRCwgbVJlbmRlcmVyLCBtTmF0aXZlV2luZG93LAorICAgICAgICAgICAgICAgIG1DQ0RlY29kZXIpOwogICAgICAgICBtVmlkZW9EZWNvZGVyRXJyb3IgPSBmYWxzZTsKIAogICAgICAgICAvLyBlbmFibGUgRlJDIGlmIGhpZ2gtcXVhbGl0eSBBViBzeW5jIGlzIHJlcXVlc3RlZCwgZXZlbiBpZiBub3QKQEAgLTIwMjYsOCArMjEwOCw4IEBACiAgICAgLy8gTW9kdWxhciBEUk0KICAgICBpZiAobUlzRHJtUHJvdGVjdGVkKSB7CiAgICAgICAgIGZvcm1hdC0+c2V0T2JqZWN0KCJjcnlwdG8iLCBtQ3J5cHRvKTsKLSAgICAgICAgQUxPR1YoImluc3RhbnRpYXRlRGVjb2RlcjogbUNyeXB0bzogJXAgaXNTZWN1cmU6ICVkIiwgbUNyeXB0by5nZXQoKSwKLSAgICAgICAgICAgICAgICAobVNvdXJjZUZsYWdzICYgU291cmNlOjpGTEFHX1NFQ1VSRSkgIT0gMCk7CisgICAgICAgIEFMT0dWKCJpbnN0YW50aWF0ZURlY29kZXI6IG1DcnlwdG86ICVwIGlzU2VjdXJlOiAlZCIsCisgICAgICAgICAgICAgICAgbUNyeXB0by5nZXQoKSwgKG1DdXJyZW50U291cmNlSW5mby5tU291cmNlRmxhZ3MgJiBTb3VyY2U6OkZMQUdfU0VDVVJFKSAhPSAwKTsKICAgICB9CiAKICAgICAoKmRlY29kZXIpLT5jb25maWd1cmUoZm9ybWF0KTsKQEAgLTIxNDYsNyArMjIyOCw4IEBACiAgICAgICAgICAgICBkaXNwbGF5SGVpZ2h0KTsKIH0KIAotdm9pZCBOdVBsYXllcjI6Om5vdGlmeUxpc3RlbmVyKGludDY0X3Qgc3JjSWQsIGludCBtc2csIGludCBleHQxLCBpbnQgZXh0MiwgY29uc3QgUGFyY2VsICppbikgewordm9pZCBOdVBsYXllcjI6Om5vdGlmeUxpc3RlbmVyKAorICAgICAgICBpbnQ2NF90IHNyY0lkLCBpbnQgbXNnLCBpbnQgZXh0MSwgaW50IGV4dDIsIGNvbnN0IFBsYXllck1lc3NhZ2UgKmluKSB7CiAgICAgaWYgKG1Ecml2ZXIgPT0gTlVMTCkgewogICAgICAgICByZXR1cm47CiAgICAgfQpAQCAtMjIzMCw3ICsyMzEzLDcgQEAKICAgICByZXR1cm4gT0s7CiB9CiAKLXN0YXR1c190IE51UGxheWVyMjo6Z2V0VHJhY2tJbmZvKFBhcmNlbCogcmVwbHkpIGNvbnN0IHsKK3N0YXR1c190IE51UGxheWVyMjo6Z2V0VHJhY2tJbmZvKFBsYXllck1lc3NhZ2UqIHJlcGx5KSBjb25zdCB7CiAgICAgc3A8QU1lc3NhZ2U+IG1zZyA9IG5ldyBBTWVzc2FnZShrV2hhdEdldFRyYWNrSW5mbywgdGhpcyk7CiAgICAgbXNnLT5zZXRQb2ludGVyKCJyZXBseSIsIHJlcGx5KTsKIApAQCAtMjIzOSw3ICsyMzIyLDcgQEAKICAgICByZXR1cm4gZXJyOwogfQogCi1zdGF0dXNfdCBOdVBsYXllcjI6OmdldFNlbGVjdGVkVHJhY2soaW50MzJfdCB0eXBlLCBQYXJjZWwqIHJlcGx5KSBjb25zdCB7CitzdGF0dXNfdCBOdVBsYXllcjI6OmdldFNlbGVjdGVkVHJhY2soaW50MzJfdCB0eXBlLCBQbGF5ZXJNZXNzYWdlKiByZXBseSkgY29uc3QgewogICAgIHNwPEFNZXNzYWdlPiBtc2cgPSBuZXcgQU1lc3NhZ2Uoa1doYXRHZXRTZWxlY3RlZFRyYWNrLCB0aGlzKTsKICAgICBtc2ctPnNldFBvaW50ZXIoInJlcGx5IiwgcmVwbHkpOwogICAgIG1zZy0+c2V0SW50MzIoInR5cGUiLCB0eXBlKTsKQEAgLTIyOTQsMTEgKzIzNzcsMTEgQEAKIH0KIAogc3A8TWV0YURhdGE+IE51UGxheWVyMjo6Z2V0RmlsZU1ldGEoKSB7Ci0gICAgcmV0dXJuIG1Tb3VyY2UtPmdldEZpbGVGb3JtYXRNZXRhKCk7CisgICAgcmV0dXJuIG1DdXJyZW50U291cmNlSW5mby5tU291cmNlLT5nZXRGaWxlRm9ybWF0TWV0YSgpOwogfQogCiBmbG9hdCBOdVBsYXllcjI6OmdldEZyYW1lUmF0ZSgpIHsKLSAgICBzcDxNZXRhRGF0YT4gbWV0YSA9IG1Tb3VyY2UtPmdldEZvcm1hdE1ldGEoZmFsc2UgLyogYXVkaW8gKi8pOworICAgIHNwPE1ldGFEYXRhPiBtZXRhID0gbUN1cnJlbnRTb3VyY2VJbmZvLm1Tb3VyY2UtPmdldEZvcm1hdE1ldGEoZmFsc2UgLyogYXVkaW8gKi8pOwogICAgIGlmIChtZXRhID09IE5VTEwpIHsKICAgICAgICAgcmV0dXJuIDA7CiAgICAgfQpAQCAtMjM1NiwxNiArMjQzOSwxNiBAQAogICAgIEFMT0dWKCJwZXJmb3JtU2VlayBzZWVrVGltZVVzPSVsbGQgdXMgKCUuMmYgc2VjcyksIG1vZGU9JWQiLAogICAgICAgICAgIChsb25nIGxvbmcpc2Vla1RpbWVVcywgc2Vla1RpbWVVcyAvIDFFNiwgbW9kZSk7CiAKLSAgICBpZiAobVNvdXJjZSA9PSBOVUxMKSB7CisgICAgaWYgKG1DdXJyZW50U291cmNlSW5mby5tU291cmNlID09IE5VTEwpIHsKICAgICAgICAgLy8gVGhpcyBoYXBwZW5zIHdoZW4gcmVzZXQgb2NjdXJzIHJpZ2h0IGJlZm9yZSB0aGUgbG9vcCBtb2RlCiAgICAgICAgIC8vIGFzeW5jaHJvbm91c2x5IHNlZWtzIHRvIHRoZSBzdGFydCBvZiB0aGUgc3RyZWFtLgogICAgICAgICBMT0dfQUxXQVlTX0ZBVEFMX0lGKG1BdWRpb0RlY29kZXIgIT0gTlVMTCB8fCBtVmlkZW9EZWNvZGVyICE9IE5VTEwsCi0gICAgICAgICAgICAgICAgIm1Tb3VyY2UgaXMgTlVMTCBhbmQgZGVjb2RlcnMgbm90IE5VTEwgYXVkaW8oJXApIHZpZGVvKCVwKSIsCisgICAgICAgICAgICAgICAgIm1DdXJyZW50U291cmNlSW5mby5tU291cmNlIGlzIE5VTEwgYW5kIGRlY29kZXJzIG5vdCBOVUxMIGF1ZGlvKCVwKSB2aWRlbyglcCkiLAogICAgICAgICAgICAgICAgIG1BdWRpb0RlY29kZXIuZ2V0KCksIG1WaWRlb0RlY29kZXIuZ2V0KCkpOwogICAgICAgICByZXR1cm47CiAgICAgfQogICAgIG1QcmV2aW91c1NlZWtUaW1lVXMgPSBzZWVrVGltZVVzOwotICAgIG1Tb3VyY2UtPnNlZWtUbyhzZWVrVGltZVVzLCBtb2RlKTsKKyAgICBtQ3VycmVudFNvdXJjZUluZm8ubVNvdXJjZS0+c2Vla1RvKHNlZWtUaW1lVXMsIG1vZGUpOwogICAgICsrbVRpbWVkVGV4dEdlbmVyYXRpb247CiAKICAgICAvLyBldmVyeXRoaW5nJ3MgZmx1c2hlZCwgY29udGludWUgcGxheWJhY2suCkBAIC0yNDEyLDE3ICsyNDk1LDE3IEBACiAgICAgbVJlbmRlcmVyLmNsZWFyKCk7CiAgICAgKyttUmVuZGVyZXJHZW5lcmF0aW9uOwogCi0gICAgaWYgKG1Tb3VyY2UgIT0gTlVMTCkgewotICAgICAgICBtU291cmNlLT5zdG9wKCk7CisgICAgaWYgKG1DdXJyZW50U291cmNlSW5mby5tU291cmNlICE9IE5VTEwpIHsKKyAgICAgICAgbUN1cnJlbnRTb3VyY2VJbmZvLm1Tb3VyY2UtPnN0b3AoKTsKIAogICAgICAgICBNdXRleDo6QXV0b2xvY2sgYXV0b0xvY2sobVNvdXJjZUxvY2spOwotICAgICAgICBtU291cmNlLmNsZWFyKCk7CisgICAgICAgIG1DdXJyZW50U291cmNlSW5mby5tU291cmNlLmNsZWFyKCk7CiAgICAgfQogCiAgICAgaWYgKG1Ecml2ZXIgIT0gTlVMTCkgewogICAgICAgICBzcDxOdVBsYXllcjJEcml2ZXI+IGRyaXZlciA9IG1Ecml2ZXIucHJvbW90ZSgpOwogICAgICAgICBpZiAoZHJpdmVyICE9IE5VTEwpIHsKLSAgICAgICAgICAgIGRyaXZlci0+bm90aWZ5UmVzZXRDb21wbGV0ZShtU3JjSWQpOworICAgICAgICAgICAgZHJpdmVyLT5ub3RpZnlSZXNldENvbXBsZXRlKG1DdXJyZW50U291cmNlSW5mby5tU3JjSWQpOwogICAgICAgICB9CiAgICAgfQogCkBAIC0yNDU3LDI1ICsyNTQwLDMxIEBACiAKICAgICArK21SZW5kZXJlckdlbmVyYXRpb247CiAKLSAgICBpZiAobVNvdXJjZSAhPSBOVUxMKSB7Ci0gICAgICAgIG1Tb3VyY2UtPnN0b3AoKTsKKyAgICBpZiAobUN1cnJlbnRTb3VyY2VJbmZvLm1Tb3VyY2UgIT0gTlVMTCkgeworICAgICAgICBtQ3VycmVudFNvdXJjZUluZm8ubVNvdXJjZS0+c3RvcCgpOwogICAgIH0KIAogICAgIGxvbmcgcHJldmlvdXNTcmNJZDsKICAgICB7CiAgICAgICAgIE11dGV4OjpBdXRvbG9jayBhdXRvTG9jayhtU291cmNlTG9jayk7Ci0gICAgICAgIG1Tb3VyY2UgPSBtTmV4dFNvdXJjZTsKLSAgICAgICAgbU5leHRTb3VyY2UgPSBOVUxMOwotICAgICAgICBwcmV2aW91c1NyY0lkID0gbVNyY0lkOwotICAgICAgICBtU3JjSWQgPSBtTmV4dFNyY0lkOwotICAgICAgICArK21OZXh0U3JjSWQ7ICAvLyB0byBkaXN0aW5ndWlzaCB0aGUgdHdvIHNvdXJjZXMuCisgICAgICAgIHByZXZpb3VzU3JjSWQgPSBtQ3VycmVudFNvdXJjZUluZm8ubVNyY0lkOworCisgICAgICAgIG1DdXJyZW50U291cmNlSW5mbyA9IG1OZXh0U291cmNlSW5mbzsKKyAgICAgICAgbU5leHRTb3VyY2VJbmZvID0gU291cmNlSW5mbygpOworICAgICAgICBtTmV4dFNvdXJjZUluZm8ubVNyY0lkID0gfm1DdXJyZW50U291cmNlSW5mby5tU3JjSWQ7ICAvLyB0byBkaXN0aW5ndWlzaCB0aGUgdHdvIHNvdXJjZXMuCiAgICAgfQogCiAgICAgaWYgKG1Ecml2ZXIgIT0gTlVMTCkgewogICAgICAgICBzcDxOdVBsYXllcjJEcml2ZXI+IGRyaXZlciA9IG1Ecml2ZXIucHJvbW90ZSgpOwogICAgICAgICBpZiAoZHJpdmVyICE9IE5VTEwpIHsKLSAgICAgICAgICAgIG5vdGlmeUxpc3RlbmVyKHByZXZpb3VzU3JjSWQsIE1FRElBMl9JTkZPLCBNRURJQTJfSU5GT19QTEFZQkFDS19DT01QTEVURSwgMCk7Ci0gICAgICAgICAgICBub3RpZnlMaXN0ZW5lcihtU3JjSWQsIE1FRElBMl9JTkZPLCBNRURJQTJfSU5GT19TVEFSVEVEX0FTX05FWFQsIDApOworICAgICAgICAgICAgbm90aWZ5TGlzdGVuZXIocHJldmlvdXNTcmNJZCwgTUVESUEyX0lORk8sIE1FRElBMl9JTkZPX0RBVEFfU09VUkNFX0VORCwgMCk7CisKKyAgICAgICAgICAgIGludDY0X3QgZHVyYXRpb25VczsKKyAgICAgICAgICAgIGlmIChtQ3VycmVudFNvdXJjZUluZm8ubVNvdXJjZS0+Z2V0RHVyYXRpb24oJmR1cmF0aW9uVXMpID09IE9LKSB7CisgICAgICAgICAgICAgICAgZHJpdmVyLT5ub3RpZnlEdXJhdGlvbihtQ3VycmVudFNvdXJjZUluZm8ubVNyY0lkLCBkdXJhdGlvblVzKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIG5vdGlmeUxpc3RlbmVyKAorICAgICAgICAgICAgICAgICAgICBtQ3VycmVudFNvdXJjZUluZm8ubVNyY0lkLCBNRURJQTJfSU5GTywgTUVESUEyX0lORk9fREFUQV9TT1VSQ0VfU1RBUlQsIDApOwogICAgICAgICB9CiAgICAgfQogCkBAIC0yNDg0LDYgKzI1NzMsOCBAQAogICAgIG1SZXNldHRpbmcgPSBmYWxzZTsKICAgICBtU291cmNlU3RhcnRlZCA9IGZhbHNlOwogCisgICAgYWRkRW5kVGltZU1vbml0b3IoKTsKKwogICAgIC8vIE1vZHVsYXIgRFJNCiAgICAgaWYgKG1DcnlwdG8gIT0gTlVMTCkgewogICAgICAgICAvLyBkZWNvZGVycyB3aWxsIGJlIGZsdXNoZWQgYmVmb3JlIHRoaXMgc28gdGhlaXIgbUNyeXB0byB3b3VsZCBnbyBhd2F5IG9uIHRoZWlyIG93bgpAQCAtMjQ5Nyw5ICsyNTg4LDkgQEAKICAgICAgICAgbVJlbmRlcmVyLT5yZXN1bWUoKTsKICAgICB9CiAKLSAgICBvblN0YXJ0KCk7CisgICAgb25TdGFydCh0cnVlIC8qIHBsYXkgKi8pOwogICAgIG1QYXVzZWRCeUNsaWVudCA9IGZhbHNlOwotICAgIG5vdGlmeUxpc3RlbmVyKG1TcmNJZCwgTUVESUEyX1NUQVJURUQsIDAsIDApOworICAgIG5vdGlmeUxpc3RlbmVyKG1DdXJyZW50U291cmNlSW5mby5tU3JjSWQsIE1FRElBMl9TVEFSVEVELCAwLCAwKTsKIH0KIAogdm9pZCBOdVBsYXllcjI6OnBlcmZvcm1TY2FuU291cmNlcygpIHsKQEAgLTI1MjUsNyArMjYxNiw3IEBACiAgICAgaWYgKG1Ecml2ZXIgIT0gTlVMTCkgewogICAgICAgICBzcDxOdVBsYXllcjJEcml2ZXI+IGRyaXZlciA9IG1Ecml2ZXIucHJvbW90ZSgpOwogICAgICAgICBpZiAoZHJpdmVyICE9IE5VTEwpIHsKLSAgICAgICAgICAgIGRyaXZlci0+bm90aWZ5U2V0U3VyZmFjZUNvbXBsZXRlKG1TcmNJZCk7CisgICAgICAgICAgICBkcml2ZXItPm5vdGlmeVNldFN1cmZhY2VDb21wbGV0ZShtQ3VycmVudFNvdXJjZUluZm8ubVNyY0lkKTsKICAgICAgICAgfQogICAgIH0KIH0KQEAgLTI1NTcsNyArMjY0OCw3IEBACiB2b2lkIE51UGxheWVyMjo6ZmluaXNoUmVzdW1lKCkgewogICAgIGlmIChtUmVzdW1lUGVuZGluZykgewogICAgICAgICBtUmVzdW1lUGVuZGluZyA9IGZhbHNlOwotICAgICAgICBub3RpZnlEcml2ZXJTZWVrQ29tcGxldGUobVNyY0lkKTsKKyAgICAgICAgbm90aWZ5RHJpdmVyU2Vla0NvbXBsZXRlKG1DdXJyZW50U291cmNlSW5mby5tU3JjSWQpOwogICAgIH0KIH0KIApAQCAtMjU3OSwzNiArMjY3MCw1MCBAQAogICAgIHN3aXRjaCAod2hhdCkgewogICAgICAgICBjYXNlIFNvdXJjZTo6a1doYXRQcmVwYXJlZDoKICAgICAgICAgewotICAgICAgICAgICAgQUxPR1YoIk51UGxheWVyMjo6b25Tb3VyY2VOb3RpZnkgU291cmNlOjprV2hhdFByZXBhcmVkIHNvdXJjZTogJXAiLCBtU291cmNlLmdldCgpKTsKLSAgICAgICAgICAgIGlmIChtU291cmNlID09IE5VTEwpIHsKLSAgICAgICAgICAgICAgICAvLyBUaGlzIGlzIGEgc3RhbGUgbm90aWZpY2F0aW9uIGZyb20gYSBzb3VyY2UgdGhhdCB3YXMKLSAgICAgICAgICAgICAgICAvLyBhc3luY2hyb25vdXNseSBwcmVwYXJpbmcgd2hlbiB0aGUgY2xpZW50IGNhbGxlZCByZXNldCgpLgotICAgICAgICAgICAgICAgIC8vIFdlIGhhbmRsZWQgdGhlIHJlc2V0LCB0aGUgc291cmNlIGlzIGdvbmUuCi0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGludDMyX3QgZXJyOwotICAgICAgICAgICAgQ0hFQ0sobXNnLT5maW5kSW50MzIoImVyciIsICZlcnIpKTsKLQotICAgICAgICAgICAgaWYgKGVyciAhPSBPSykgewotICAgICAgICAgICAgICAgIC8vIHNodXQgZG93biBwb3RlbnRpYWwgc2VjdXJlIGNvZGVjcyBpbiBjYXNlIGNsaWVudCBuZXZlciBjYWxscyByZXNldAotICAgICAgICAgICAgICAgIG1EZWZlcnJlZEFjdGlvbnMucHVzaF9iYWNrKAotICAgICAgICAgICAgICAgICAgICAgICAgbmV3IEZsdXNoRGVjb2RlckFjdGlvbihGTFVTSF9DTURfU0hVVERPV04gLyogYXVkaW8gKi8sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZMVVNIX0NNRF9TSFVURE9XTiAvKiB2aWRlbyAqLykpOwotICAgICAgICAgICAgICAgIHByb2Nlc3NEZWZlcnJlZEFjdGlvbnMoKTsKLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgbVByZXBhcmVkID0gdHJ1ZTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgc3A8TnVQbGF5ZXIyRHJpdmVyPiBkcml2ZXIgPSBtRHJpdmVyLnByb21vdGUoKTsKLSAgICAgICAgICAgIGlmIChkcml2ZXIgIT0gTlVMTCkgewotICAgICAgICAgICAgICAgIC8vIG5vdGlmeSBkdXJhdGlvbiBmaXJzdCwgc28gdGhhdCBpdCdzIGRlZmluaXRlbHkgc2V0IHdoZW4KLSAgICAgICAgICAgICAgICAvLyB0aGUgYXBwIHJlY2VpdmVkIHRoZSAicHJlcGFyZSBjb21wbGV0ZSIgY2FsbGJhY2suCi0gICAgICAgICAgICAgICAgaW50NjRfdCBkdXJhdGlvblVzOwotICAgICAgICAgICAgICAgIGlmIChtU291cmNlLT5nZXREdXJhdGlvbigmZHVyYXRpb25VcykgPT0gT0spIHsKLSAgICAgICAgICAgICAgICAgICAgZHJpdmVyLT5ub3RpZnlEdXJhdGlvbihzcmNJZCwgZHVyYXRpb25Vcyk7CisgICAgICAgICAgICBBTE9HVigiTnVQbGF5ZXIyOjpvblNvdXJjZU5vdGlmeSBTb3VyY2U6OmtXaGF0UHJlcGFyZWQgc291cmNlOiVwLCBJZCglbGxkKSIsCisgICAgICAgICAgICAgICAgICBtQ3VycmVudFNvdXJjZUluZm8ubVNvdXJjZS5nZXQoKSwgKGxvbmcgbG9uZylzcmNJZCk7CisgICAgICAgICAgICBpZiAoc3JjSWQgPT0gbUN1cnJlbnRTb3VyY2VJbmZvLm1TcmNJZCkgeworICAgICAgICAgICAgICAgIGlmIChtQ3VycmVudFNvdXJjZUluZm8ubVNvdXJjZSA9PSBOVUxMKSB7CisgICAgICAgICAgICAgICAgICAgIC8vIFRoaXMgaXMgYSBzdGFsZSBub3RpZmljYXRpb24gZnJvbSBhIHNvdXJjZSB0aGF0IHdhcworICAgICAgICAgICAgICAgICAgICAvLyBhc3luY2hyb25vdXNseSBwcmVwYXJpbmcgd2hlbiB0aGUgY2xpZW50IGNhbGxlZCByZXNldCgpLgorICAgICAgICAgICAgICAgICAgICAvLyBXZSBoYW5kbGVkIHRoZSByZXNldCwgdGhlIHNvdXJjZSBpcyBnb25lLgorICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgZHJpdmVyLT5ub3RpZnlQcmVwYXJlQ29tcGxldGVkKHNyY0lkLCBlcnIpOworCisgICAgICAgICAgICAgICAgaW50MzJfdCBlcnI7CisgICAgICAgICAgICAgICAgQ0hFQ0sobXNnLT5maW5kSW50MzIoImVyciIsICZlcnIpKTsKKworICAgICAgICAgICAgICAgIGlmIChlcnIgIT0gT0spIHsKKyAgICAgICAgICAgICAgICAgICAgLy8gc2h1dCBkb3duIHBvdGVudGlhbCBzZWN1cmUgY29kZWNzIGluIGNhc2UgY2xpZW50IG5ldmVyIGNhbGxzIHJlc2V0CisgICAgICAgICAgICAgICAgICAgIG1EZWZlcnJlZEFjdGlvbnMucHVzaF9iYWNrKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldyBGbHVzaERlY29kZXJBY3Rpb24oRkxVU0hfQ01EX1NIVVRET1dOIC8qIGF1ZGlvICovLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRkxVU0hfQ01EX1NIVVRET1dOIC8qIHZpZGVvICovKSk7CisgICAgICAgICAgICAgICAgICAgIHByb2Nlc3NEZWZlcnJlZEFjdGlvbnMoKTsKKyAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICBtUHJlcGFyZWQgPSB0cnVlOworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIHNwPE51UGxheWVyMkRyaXZlcj4gZHJpdmVyID0gbURyaXZlci5wcm9tb3RlKCk7CisgICAgICAgICAgICAgICAgaWYgKGRyaXZlciAhPSBOVUxMKSB7CisgICAgICAgICAgICAgICAgICAgIC8vIG5vdGlmeSBkdXJhdGlvbiBmaXJzdCwgc28gdGhhdCBpdCdzIGRlZmluaXRlbHkgc2V0IHdoZW4KKyAgICAgICAgICAgICAgICAgICAgLy8gdGhlIGFwcCByZWNlaXZlZCB0aGUgInByZXBhcmUgY29tcGxldGUiIGNhbGxiYWNrLgorICAgICAgICAgICAgICAgICAgICBpbnQ2NF90IGR1cmF0aW9uVXM7CisgICAgICAgICAgICAgICAgICAgIGlmIChtQ3VycmVudFNvdXJjZUluZm8ubVNvdXJjZS0+Z2V0RHVyYXRpb24oJmR1cmF0aW9uVXMpID09IE9LKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBkcml2ZXItPm5vdGlmeUR1cmF0aW9uKHNyY0lkLCBkdXJhdGlvblVzKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBkcml2ZXItPm5vdGlmeVByZXBhcmVDb21wbGV0ZWQoc3JjSWQsIGVycik7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfSBlbHNlIGlmIChzcmNJZCA9PSBtTmV4dFNvdXJjZUluZm8ubVNyY0lkKSB7CisgICAgICAgICAgICAgICAgaWYgKG1OZXh0U291cmNlSW5mby5tU291cmNlID09IE5VTEwpIHsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7ICAvLyBzdGFsZQorICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIHNwPE51UGxheWVyMkRyaXZlcj4gZHJpdmVyID0gbURyaXZlci5wcm9tb3RlKCk7CisgICAgICAgICAgICAgICAgaWYgKGRyaXZlciAhPSBOVUxMKSB7CisgICAgICAgICAgICAgICAgICAgIGludDMyX3QgZXJyOworICAgICAgICAgICAgICAgICAgICBDSEVDSyhtc2ctPmZpbmRJbnQzMigiZXJyIiwgJmVycikpOworICAgICAgICAgICAgICAgICAgICBkcml2ZXItPm5vdGlmeVByZXBhcmVDb21wbGV0ZWQoc3JjSWQsIGVycik7CisgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQogCiAgICAgICAgICAgICBicmVhazsKQEAgLTI2MTcsMTUgKzI3MjIsMTUgQEAKICAgICAgICAgLy8gTW9kdWxhciBEUk0KICAgICAgICAgY2FzZSBTb3VyY2U6OmtXaGF0RHJtSW5mbzoKICAgICAgICAgewotICAgICAgICAgICAgUGFyY2VsIHBhcmNlbDsKKyAgICAgICAgICAgIFBsYXllck1lc3NhZ2UgcGxheWVyTXNnOwogICAgICAgICAgICAgc3A8QUJ1ZmZlcj4gZHJtSW5mbzsKICAgICAgICAgICAgIENIRUNLKG1zZy0+ZmluZEJ1ZmZlcigiZHJtSW5mbyIsICZkcm1JbmZvKSk7Ci0gICAgICAgICAgICBwYXJjZWwuc2V0RGF0YShkcm1JbmZvLT5kYXRhKCksIGRybUluZm8tPnNpemUoKSk7CisgICAgICAgICAgICBwbGF5ZXJNc2cuUGFyc2VGcm9tQXJyYXkoZHJtSW5mby0+ZGF0YSgpLCBkcm1JbmZvLT5zaXplKCkpOwogCi0gICAgICAgICAgICBBTE9HVigib25Tb3VyY2VOb3RpZnkoKSBrV2hhdERybUluZm8gTUVESUEyX0RSTV9JTkZPIGRybUluZm86ICVwICBwYXJjZWwgc2l6ZTogJXp1IiwKLSAgICAgICAgICAgICAgICAgICAgZHJtSW5mby5nZXQoKSwgcGFyY2VsLmRhdGFTaXplKCkpOworICAgICAgICAgICAgQUxPR1YoIm9uU291cmNlTm90aWZ5KCkga1doYXREcm1JbmZvIE1FRElBMl9EUk1fSU5GTyBkcm1JbmZvOiAlcCAgcGxheWVyTXNnIHNpemU6ICVkIiwKKyAgICAgICAgICAgICAgICAgICAgZHJtSW5mby5nZXQoKSwgcGxheWVyTXNnLkJ5dGVTaXplKCkpOwogCi0gICAgICAgICAgICBub3RpZnlMaXN0ZW5lcihzcmNJZCwgTUVESUEyX0RSTV9JTkZPLCAwIC8qIGV4dDEgKi8sIDAgLyogZXh0MiAqLywgJnBhcmNlbCk7CisgICAgICAgICAgICBub3RpZnlMaXN0ZW5lcihzcmNJZCwgTUVESUEyX0RSTV9JTkZPLCAwIC8qIGV4dDEgKi8sIDAgLyogZXh0MiAqLywgJnBsYXllck1zZyk7CiAKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CkBAIC0yNjU0LDE5ICsyNzU5LDI2IEBACiAgICAgICAgICAgICAgICAgICAgIGRyaXZlci0+bm90aWZ5TGlzdGVuZXIoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3JjSWQsIE1FRElBMl9JTkZPLCBNRURJQTJfSU5GT19OT1RfU0VFS0FCTEUsIDApOwogICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBkcml2ZXItPm5vdGlmeUZsYWdzQ2hhbmdlZChzcmNJZCwgZmxhZ3MpOworICAgICAgICAgICAgICAgIGlmIChzcmNJZCA9PSBtQ3VycmVudFNvdXJjZUluZm8ubVNyY0lkKSB7CisgICAgICAgICAgICAgICAgICAgIGRyaXZlci0+bm90aWZ5RmxhZ3NDaGFuZ2VkKHNyY0lkLCBmbGFncyk7CisgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQogCi0gICAgICAgICAgICBpZiAoKG1Tb3VyY2VGbGFncyAmIFNvdXJjZTo6RkxBR19EWU5BTUlDX0RVUkFUSU9OKQotICAgICAgICAgICAgICAgICAgICAmJiAoIShmbGFncyAmIFNvdXJjZTo6RkxBR19EWU5BTUlDX0RVUkFUSU9OKSkpIHsKLSAgICAgICAgICAgICAgICBjYW5jZWxQb2xsRHVyYXRpb24oKTsKLSAgICAgICAgICAgIH0gZWxzZSBpZiAoIShtU291cmNlRmxhZ3MgJiBTb3VyY2U6OkZMQUdfRFlOQU1JQ19EVVJBVElPTikKLSAgICAgICAgICAgICAgICAgICAgJiYgKGZsYWdzICYgU291cmNlOjpGTEFHX0RZTkFNSUNfRFVSQVRJT04pCi0gICAgICAgICAgICAgICAgICAgICYmIChtQXVkaW9EZWNvZGVyICE9IE5VTEwgfHwgbVZpZGVvRGVjb2RlciAhPSBOVUxMKSkgewotICAgICAgICAgICAgICAgIHNjaGVkdWxlUG9sbER1cmF0aW9uKCk7Ci0gICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoc3JjSWQgPT0gbUN1cnJlbnRTb3VyY2VJbmZvLm1TcmNJZCkgeworICAgICAgICAgICAgICAgIGlmICgobUN1cnJlbnRTb3VyY2VJbmZvLm1Tb3VyY2VGbGFncyAmIFNvdXJjZTo6RkxBR19EWU5BTUlDX0RVUkFUSU9OKQorICAgICAgICAgICAgICAgICAgICAgICAgJiYgKCEoZmxhZ3MgJiBTb3VyY2U6OkZMQUdfRFlOQU1JQ19EVVJBVElPTikpKSB7CisgICAgICAgICAgICAgICAgICAgIGNhbmNlbFBvbGxEdXJhdGlvbigpOworICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoIShtQ3VycmVudFNvdXJjZUluZm8ubVNvdXJjZUZsYWdzICYgU291cmNlOjpGTEFHX0RZTkFNSUNfRFVSQVRJT04pCisgICAgICAgICAgICAgICAgICAgICAgICAmJiAoZmxhZ3MgJiBTb3VyY2U6OkZMQUdfRFlOQU1JQ19EVVJBVElPTikKKyAgICAgICAgICAgICAgICAgICAgICAgICYmIChtQXVkaW9EZWNvZGVyICE9IE5VTEwgfHwgbVZpZGVvRGVjb2RlciAhPSBOVUxMKSkgeworICAgICAgICAgICAgICAgICAgICBzY2hlZHVsZVBvbGxEdXJhdGlvbigpOworICAgICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgbVNvdXJjZUZsYWdzID0gZmxhZ3M7CisgICAgICAgICAgICAgICAgbUN1cnJlbnRTb3VyY2VJbmZvLm1Tb3VyY2VGbGFncyA9IGZsYWdzOworICAgICAgICAgICAgfSBlbHNlIGlmIChzcmNJZCA9PSBtTmV4dFNvdXJjZUluZm8ubVNyY0lkKSB7CisgICAgICAgICAgICAgICAgLy8gVE9ETzogaGFuZGxlIGR1cmF0aW9uIHBvbGxpbmcgZm9yIG5leHQgc291cmNlLgorICAgICAgICAgICAgICAgIG1OZXh0U291cmNlSW5mby5tU291cmNlRmxhZ3MgPSBmbGFnczsKKyAgICAgICAgICAgIH0KICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAKQEAgLTI4MTcsOCArMjkyOSw4IEBACiAgICAgICAgICAgICBDSEVDSyhtc2ctPmZpbmRCdWZmZXIoImJ1ZmZlciIsICZidWZmZXIpKTsKIAogICAgICAgICAgICAgc2l6ZV90IGluYmFuZFRyYWNrcyA9IDA7Ci0gICAgICAgICAgICBpZiAobVNvdXJjZSAhPSBOVUxMKSB7Ci0gICAgICAgICAgICAgICAgaW5iYW5kVHJhY2tzID0gbVNvdXJjZS0+Z2V0VHJhY2tDb3VudCgpOworICAgICAgICAgICAgaWYgKG1DdXJyZW50U291cmNlSW5mby5tU291cmNlICE9IE5VTEwpIHsKKyAgICAgICAgICAgICAgICBpbmJhbmRUcmFja3MgPSBtQ3VycmVudFNvdXJjZUluZm8ubVNvdXJjZS0+Z2V0VHJhY2tDb3VudCgpOwogICAgICAgICAgICAgfQogCiAgICAgICAgICAgICBzZW5kU3VidGl0bGVEYXRhKGJ1ZmZlciwgaW5iYW5kVHJhY2tzKTsKQEAgLTI4MjcsNyArMjkzOSw3IEBACiAKICAgICAgICAgY2FzZSBOdVBsYXllcjI6OkNDRGVjb2Rlcjo6a1doYXRUcmFja0FkZGVkOgogICAgICAgICB7Ci0gICAgICAgICAgICBub3RpZnlMaXN0ZW5lcihtU3JjSWQsIE1FRElBMl9JTkZPLCBNRURJQTJfSU5GT19NRVRBREFUQV9VUERBVEUsIDApOworICAgICAgICAgICAgbm90aWZ5TGlzdGVuZXIobUN1cnJlbnRTb3VyY2VJbmZvLm1TcmNJZCwgTUVESUEyX0lORk8sIE1FRElBMl9JTkZPX01FVEFEQVRBX1VQREFURSwgMCk7CiAKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CkBAIC0yODQ2LDM1ICsyOTU4LDMxIEBACiAgICAgQ0hFQ0soYnVmZmVyLT5tZXRhKCktPmZpbmRJbnQ2NCgidGltZVVzIiwgJnRpbWVVcykpOwogICAgIENIRUNLKGJ1ZmZlci0+bWV0YSgpLT5maW5kSW50NjQoImR1cmF0aW9uVXMiLCAmZHVyYXRpb25VcykpOwogCi0gICAgUGFyY2VsIGluOwotICAgIGluLndyaXRlSW50MzIodHJhY2tJbmRleCArIGJhc2VJbmRleCk7Ci0gICAgaW4ud3JpdGVJbnQ2NCh0aW1lVXMpOwotICAgIGluLndyaXRlSW50NjQoZHVyYXRpb25Vcyk7Ci0gICAgaW4ud3JpdGVJbnQzMihidWZmZXItPnNpemUoKSk7Ci0gICAgaW4ud3JpdGVJbnQzMihidWZmZXItPnNpemUoKSk7Ci0gICAgaW4ud3JpdGUoYnVmZmVyLT5kYXRhKCksIGJ1ZmZlci0+c2l6ZSgpKTsKKyAgICBQbGF5ZXJNZXNzYWdlIHBsYXllck1zZzsKKyAgICBwbGF5ZXJNc2cuYWRkX3ZhbHVlcygpLT5zZXRfaW50MzJfdmFsdWUodHJhY2tJbmRleCArIGJhc2VJbmRleCk7CisgICAgcGxheWVyTXNnLmFkZF92YWx1ZXMoKS0+c2V0X2ludDY0X3ZhbHVlKHRpbWVVcyk7CisgICAgcGxheWVyTXNnLmFkZF92YWx1ZXMoKS0+c2V0X2ludDY0X3ZhbHVlKGR1cmF0aW9uVXMpOworICAgIHBsYXllck1zZy5hZGRfdmFsdWVzKCktPnNldF9ieXRlc192YWx1ZShidWZmZXItPmRhdGEoKSwgYnVmZmVyLT5zaXplKCkpOwogCi0gICAgbm90aWZ5TGlzdGVuZXIobVNyY0lkLCBNRURJQTJfU1VCVElUTEVfREFUQSwgMCwgMCwgJmluKTsKKyAgICBub3RpZnlMaXN0ZW5lcihtQ3VycmVudFNvdXJjZUluZm8ubVNyY0lkLCBNRURJQTJfU1VCVElUTEVfREFUQSwgMCwgMCwgJnBsYXllck1zZyk7CiB9CiAKIHZvaWQgTnVQbGF5ZXIyOjpzZW5kVGltZWRNZXRhRGF0YShjb25zdCBzcDxBQnVmZmVyPiAmYnVmZmVyKSB7CiAgICAgaW50NjRfdCB0aW1lVXM7CiAgICAgQ0hFQ0soYnVmZmVyLT5tZXRhKCktPmZpbmRJbnQ2NCgidGltZVVzIiwgJnRpbWVVcykpOwogCi0gICAgUGFyY2VsIGluOwotICAgIGluLndyaXRlSW50NjQodGltZVVzKTsKLSAgICBpbi53cml0ZUludDMyKGJ1ZmZlci0+c2l6ZSgpKTsKLSAgICBpbi53cml0ZUludDMyKGJ1ZmZlci0+c2l6ZSgpKTsKLSAgICBpbi53cml0ZShidWZmZXItPmRhdGEoKSwgYnVmZmVyLT5zaXplKCkpOworICAgIFBsYXllck1lc3NhZ2UgcGxheWVyTXNnOworICAgIHBsYXllck1zZy5hZGRfdmFsdWVzKCktPnNldF9pbnQ2NF92YWx1ZSh0aW1lVXMpOworICAgIHBsYXllck1zZy5hZGRfdmFsdWVzKCktPnNldF9ieXRlc192YWx1ZShidWZmZXItPmRhdGEoKSwgYnVmZmVyLT5zaXplKCkpOwogCi0gICAgbm90aWZ5TGlzdGVuZXIobVNyY0lkLCBNRURJQTJfTUVUQV9EQVRBLCAwLCAwLCAmaW4pOworICAgIG5vdGlmeUxpc3RlbmVyKG1DdXJyZW50U291cmNlSW5mby5tU3JjSWQsIE1FRElBMl9NRVRBX0RBVEEsIDAsIDAsICZwbGF5ZXJNc2cpOwogfQogCiB2b2lkIE51UGxheWVyMjo6c2VuZFRpbWVkVGV4dERhdGEoY29uc3Qgc3A8QUJ1ZmZlcj4gJmJ1ZmZlcikgewogICAgIGNvbnN0IHZvaWQgKmRhdGE7CiAgICAgc2l6ZV90IHNpemUgPSAwOwogICAgIGludDY0X3QgdGltZVVzOwotICAgIGludDMyX3QgZmxhZyA9IFRleHREZXNjcmlwdGlvbnM6OklOX0JBTkRfVEVYVF8zR1BQOworICAgIGludDMyX3QgZmxhZyA9IFRleHREZXNjcmlwdGlvbnMyOjpJTl9CQU5EX1RFWFRfM0dQUDsKIAogICAgIEFTdHJpbmcgbWltZTsKICAgICBDSEVDSyhidWZmZXItPm1ldGEoKS0+ZmluZFN0cmluZygibWltZSIsICZtaW1lKSk7CkBAIC0yODgzLDI4ICsyOTkxLDI4IEBACiAgICAgZGF0YSA9IGJ1ZmZlci0+ZGF0YSgpOwogICAgIHNpemUgPSBidWZmZXItPnNpemUoKTsKIAotICAgIFBhcmNlbCBwYXJjZWw7CisgICAgUGxheWVyTWVzc2FnZSBwbGF5ZXJNc2c7CiAgICAgaWYgKHNpemUgPiAwKSB7CiAgICAgICAgIENIRUNLKGJ1ZmZlci0+bWV0YSgpLT5maW5kSW50NjQoInRpbWVVcyIsICZ0aW1lVXMpKTsKICAgICAgICAgaW50MzJfdCBnbG9iYWwgPSAwOwogICAgICAgICBpZiAoYnVmZmVyLT5tZXRhKCktPmZpbmRJbnQzMigiZ2xvYmFsIiwgJmdsb2JhbCkgJiYgZ2xvYmFsKSB7Ci0gICAgICAgICAgICBmbGFnIHw9IFRleHREZXNjcmlwdGlvbnM6OkdMT0JBTF9ERVNDUklQVElPTlM7CisgICAgICAgICAgICBmbGFnIHw9IFRleHREZXNjcmlwdGlvbnMyOjpHTE9CQUxfREVTQ1JJUFRJT05TOwogICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgZmxhZyB8PSBUZXh0RGVzY3JpcHRpb25zOjpMT0NBTF9ERVNDUklQVElPTlM7CisgICAgICAgICAgICBmbGFnIHw9IFRleHREZXNjcmlwdGlvbnMyOjpMT0NBTF9ERVNDUklQVElPTlM7CiAgICAgICAgIH0KLSAgICAgICAgVGV4dERlc2NyaXB0aW9uczo6Z2V0UGFyY2VsT2ZEZXNjcmlwdGlvbnMoCi0gICAgICAgICAgICAgICAgKGNvbnN0IHVpbnQ4X3QgKilkYXRhLCBzaXplLCBmbGFnLCB0aW1lVXMgLyAxMDAwLCAmcGFyY2VsKTsKKyAgICAgICAgVGV4dERlc2NyaXB0aW9uczI6OmdldFBsYXllck1lc3NhZ2VPZkRlc2NyaXB0aW9ucygKKyAgICAgICAgICAgICAgICAoY29uc3QgdWludDhfdCAqKWRhdGEsIHNpemUsIGZsYWcsIHRpbWVVcyAvIDEwMDAsICZwbGF5ZXJNc2cpOwogICAgIH0KIAotICAgIGlmICgocGFyY2VsLmRhdGFTaXplKCkgPiAwKSkgewotICAgICAgICBub3RpZnlMaXN0ZW5lcihtU3JjSWQsIE1FRElBMl9USU1FRF9URVhULCAwLCAwLCAmcGFyY2VsKTsKKyAgICBpZiAocGxheWVyTXNnLnZhbHVlc19zaXplKCkgPiAwKSB7CisgICAgICAgIG5vdGlmeUxpc3RlbmVyKG1DdXJyZW50U291cmNlSW5mby5tU3JjSWQsIE1FRElBMl9USU1FRF9URVhULCAwLCAwLCAmcGxheWVyTXNnKTsKICAgICB9IGVsc2UgeyAgLy8gc2VuZCBhbiBlbXB0eSB0aW1lZCB0ZXh0Ci0gICAgICAgIG5vdGlmeUxpc3RlbmVyKG1TcmNJZCwgTUVESUEyX1RJTUVEX1RFWFQsIDAsIDApOworICAgICAgICBub3RpZnlMaXN0ZW5lcihtQ3VycmVudFNvdXJjZUluZm8ubVNyY0lkLCBNRURJQTJfVElNRURfVEVYVCwgMCwgMCk7CiAgICAgfQogfQogCiBjb25zdCBjaGFyICpOdVBsYXllcjI6OmdldERhdGFTb3VyY2VUeXBlKCkgewotICAgIHN3aXRjaCAobURhdGFTb3VyY2VUeXBlKSB7CisgICAgc3dpdGNoIChtQ3VycmVudFNvdXJjZUluZm8ubURhdGFTb3VyY2VUeXBlKSB7CiAgICAgICAgIGNhc2UgREFUQV9TT1VSQ0VfVFlQRV9IVFRQX0xJVkU6CiAgICAgICAgICAgICByZXR1cm4gIkhUVFBMaXZlIjsKIApAQCAtMjk3OCw3ICszMDg2LDcgQEAKICAgICBBTE9HRCgib25QcmVwYXJlRHJtICIpOwogCiAgICAgc3RhdHVzX3Qgc3RhdHVzID0gSU5WQUxJRF9PUEVSQVRJT047Ci0gICAgaWYgKG1Tb3VyY2UgPT0gTlVMTCkgeworICAgIGlmIChtQ3VycmVudFNvdXJjZUluZm8ubVNvdXJjZSA9PSBOVUxMKSB7CiAgICAgICAgIEFMT0dFKCJvblByZXBhcmVEcm06IE5vIHNvdXJjZS4gb25QcmVwYXJlRHJtIGZhaWxlZCB3aXRoICVkLiIsIHN0YXR1cyk7CiAgICAgICAgIHJldHVybiBzdGF0dXM7CiAgICAgfQpAQCAtMjk5MSwxMiArMzA5OSwxMiBAQAogICAgIHN0YXR1cyA9IE9LOwogICAgIHNwPEFNZWRpYUNyeXB0b1dyYXBwZXI+IGNyeXB0byA9IE5VTEw7CiAKLSAgICBzdGF0dXMgPSBtU291cmNlLT5wcmVwYXJlRHJtKHV1aWQsICpkcm1TZXNzaW9uSWQsICZjcnlwdG8pOworICAgIHN0YXR1cyA9IG1DdXJyZW50U291cmNlSW5mby5tU291cmNlLT5wcmVwYXJlRHJtKHV1aWQsICpkcm1TZXNzaW9uSWQsICZjcnlwdG8pOwogICAgIGlmIChjcnlwdG8gPT0gTlVMTCkgewotICAgICAgICBBTE9HRSgib25QcmVwYXJlRHJtOiBtU291cmNlLT5wcmVwYXJlRHJtIGZhaWxlZC4gc3RhdHVzOiAlZCIsIHN0YXR1cyk7CisgICAgICAgIEFMT0dFKCJvblByZXBhcmVEcm06IG1DdXJyZW50U291cmNlSW5mby5tU291cmNlLT5wcmVwYXJlRHJtIGZhaWxlZC4gc3RhdHVzOiAlZCIsIHN0YXR1cyk7CiAgICAgICAgIHJldHVybiBzdGF0dXM7CiAgICAgfQotICAgIEFMT0dWKCJvblByZXBhcmVEcm06IG1Tb3VyY2UtPnByZXBhcmVEcm0gc3VjY2VlZGVkIik7CisgICAgQUxPR1YoIm9uUHJlcGFyZURybTogbUN1cnJlbnRTb3VyY2VJbmZvLm1Tb3VyY2UtPnByZXBhcmVEcm0gc3VjY2VlZGVkIik7CiAKICAgICBpZiAobUNyeXB0byAhPSBOVUxMKSB7CiAgICAgICAgIEFMT0dFKCJvblByZXBhcmVEcm06IFVuZXhwZWN0ZWQuIEFscmVhZHkgaGF2aW5nIG1DcnlwdG86ICVwIiwgbUNyeXB0by5nZXQoKSk7CkBAIC0zMDI1LDggKzMxMzMsOCBAQAogICAgIHN0YXR1c190IHN0YXR1czsKICAgICBpZiAobUNyeXB0byAhPSBOVUxMKSB7CiAgICAgICAgIC8vIG5vdGlmeWluZyB0aGUgc291cmNlIGZpcnN0IGJlZm9yZSByZW1vdmluZyBjcnlwdG8gZnJvbSBjb2RlYwotICAgICAgICBpZiAobVNvdXJjZSAhPSBOVUxMKSB7Ci0gICAgICAgICAgICBtU291cmNlLT5yZWxlYXNlRHJtKCk7CisgICAgICAgIGlmIChtQ3VycmVudFNvdXJjZUluZm8ubVNvdXJjZSAhPSBOVUxMKSB7CisgICAgICAgICAgICBtQ3VycmVudFNvdXJjZUluZm8ubVNvdXJjZS0+cmVsZWFzZURybSgpOwogICAgICAgICB9CiAKICAgICAgICAgc3RhdHVzPU9LOwpAQCAtMzExMSw0ICszMjE5LDIyIEBACiAgICAgVFJFU1BBU1MoKTsKIH0KIAorTnVQbGF5ZXIyOjpTb3VyY2VJbmZvOjpTb3VyY2VJbmZvKCkKKyAgICA6IG1EYXRhU291cmNlVHlwZShEQVRBX1NPVVJDRV9UWVBFX05PTkUpLAorICAgICAgbVNyY0lkKDApLAorICAgICAgbVNvdXJjZUZsYWdzKDApLAorICAgICAgbVN0YXJ0VGltZVVzKDApLAorICAgICAgbUVuZFRpbWVVcyhEYXRhU291cmNlRGVzYzo6a01heFRpbWVVcykgeworfQorCitOdVBsYXllcjI6OlNvdXJjZUluZm8gJiBOdVBsYXllcjI6OlNvdXJjZUluZm86Om9wZXJhdG9yPShjb25zdCBOdVBsYXllcjI6OlNvdXJjZUluZm8gJm90aGVyKSB7CisgICAgbVNvdXJjZSA9IG90aGVyLm1Tb3VyY2U7CisgICAgbURhdGFTb3VyY2VUeXBlID0gKERBVEFfU09VUkNFX1RZUEUpb3RoZXIubURhdGFTb3VyY2VUeXBlOworICAgIG1TcmNJZCA9IG90aGVyLm1TcmNJZDsKKyAgICBtU291cmNlRmxhZ3MgPSBvdGhlci5tU291cmNlRmxhZ3M7CisgICAgbVN0YXJ0VGltZVVzID0gb3RoZXIubVN0YXJ0VGltZVVzOworICAgIG1FbmRUaW1lVXMgPSBvdGhlci5tRW5kVGltZVVzOworICAgIHJldHVybiAqdGhpczsKK30KKwogfSAgLy8gbmFtZXNwYWNlIGFuZHJvaWQKZGlmZiAtLWdpdCBhL21lZGlhL2xpYm1lZGlhcGxheWVyMi9udXBsYXllcjIvTnVQbGF5ZXIyLmggYi9tZWRpYS9saWJtZWRpYXBsYXllcjIvbnVwbGF5ZXIyL051UGxheWVyMi5oCmluZGV4IDk2Zjg1ZjkuLjNlY2RiMDEgMTAwNjQ0Ci0tLSBhL21lZGlhL2xpYm1lZGlhcGxheWVyMi9udXBsYXllcjIvTnVQbGF5ZXIyLmgKKysrIGIvbWVkaWEvbGlibWVkaWFwbGF5ZXIyL251cGxheWVyMi9OdVBsYXllcjIuaApAQCAtMjMsNiArMjMsMTAgQEAKIAogI2luY2x1ZGUgPG1lZGlhcGxheWVyMi9NZWRpYVBsYXllcjJJbnRlcmZhY2UuaD4KIAorI2luY2x1ZGUgIm1lZGlhcGxheWVyMi5wYi5oIgorCit1c2luZyBhbmRyb2lkOjptZWRpYTo6TWVkaWFQbGF5ZXIyUHJvdG86OlBsYXllck1lc3NhZ2U7CisKIG5hbWVzcGFjZSBhbmRyb2lkIHsKIAogc3RydWN0IEFCdWZmZXI7CkBAIC03NSwxMCArNzksMTEgQEAKICAgICAgICAgICAgIGludDY0X3Qgc2Vla1RpbWVVcywKICAgICAgICAgICAgIE1lZGlhUGxheWVyMlNlZWtNb2RlIG1vZGUgPSBNZWRpYVBsYXllcjJTZWVrTW9kZTo6U0VFS19QUkVWSU9VU19TWU5DLAogICAgICAgICAgICAgYm9vbCBuZWVkTm90aWZ5ID0gZmFsc2UpOworICAgIHZvaWQgcmV3aW5kKCk7CiAKICAgICBzdGF0dXNfdCBzZXRWaWRlb1NjYWxpbmdNb2RlKGludDMyX3QgbW9kZSk7Ci0gICAgc3RhdHVzX3QgZ2V0VHJhY2tJbmZvKFBhcmNlbCogcmVwbHkpIGNvbnN0OwotICAgIHN0YXR1c190IGdldFNlbGVjdGVkVHJhY2soaW50MzJfdCB0eXBlLCBQYXJjZWwqIHJlcGx5KSBjb25zdDsKKyAgICBzdGF0dXNfdCBnZXRUcmFja0luZm8oUGxheWVyTWVzc2FnZSogcmVwbHkpIGNvbnN0OworICAgIHN0YXR1c190IGdldFNlbGVjdGVkVHJhY2soaW50MzJfdCB0eXBlLCBQbGF5ZXJNZXNzYWdlKiByZXBseSkgY29uc3Q7CiAgICAgc3RhdHVzX3Qgc2VsZWN0VHJhY2soc2l6ZV90IHRyYWNrSW5kZXgsIGJvb2wgc2VsZWN0LCBpbnQ2NF90IHRpbWVVcyk7CiAgICAgc3RhdHVzX3QgZ2V0Q3VycmVudFBvc2l0aW9uKGludDY0X3QgKm1lZGlhVXMpOwogICAgIHZvaWQgZ2V0U3RhdHMoVmVjdG9yPHNwPEFNZXNzYWdlPiA+ICptVHJhY2tTdGF0cyk7CkBAIC0xNTAsNiArMTU1LDI5IEBACiAgICAgICAgIGtXaGF0U2V0QnVmZmVyaW5nU2V0dGluZ3MgICAgICAgPSAnc0J1UycsCiAgICAgICAgIGtXaGF0UHJlcGFyZURybSAgICAgICAgICAgICAgICAgPSAncERybScsCiAgICAgICAgIGtXaGF0UmVsZWFzZURybSAgICAgICAgICAgICAgICAgPSAnckRybScsCisgICAgICAgIGtXaGF0UmV3aW5kICAgICAgICAgICAgICAgICAgICAgPSAncmVXZCcsCisgICAgICAgIGtXaGF0RU9TTW9uaXRvciAgICAgICAgICAgICAgICAgPSAnZW9zTScsCisgICAgfTsKKworICAgIHR5cGVkZWYgZW51bSB7CisgICAgICAgIERBVEFfU09VUkNFX1RZUEVfTk9ORSwKKyAgICAgICAgREFUQV9TT1VSQ0VfVFlQRV9IVFRQX0xJVkUsCisgICAgICAgIERBVEFfU09VUkNFX1RZUEVfUlRTUCwKKyAgICAgICAgREFUQV9TT1VSQ0VfVFlQRV9HRU5FUklDX1VSTCwKKyAgICAgICAgREFUQV9TT1VSQ0VfVFlQRV9HRU5FUklDX0ZELAorICAgICAgICBEQVRBX1NPVVJDRV9UWVBFX01FRElBLAorICAgIH0gREFUQV9TT1VSQ0VfVFlQRTsKKworICAgIHN0cnVjdCBTb3VyY2VJbmZvIHsKKyAgICAgICAgU291cmNlSW5mbygpOworICAgICAgICBTb3VyY2VJbmZvICZvcGVyYXRvcj0oY29uc3QgU291cmNlSW5mbyAmKTsKKworICAgICAgICBzcDxTb3VyY2U+IG1Tb3VyY2U7CisgICAgICAgIHN0ZDo6YXRvbWljPERBVEFfU09VUkNFX1RZUEU+IG1EYXRhU291cmNlVHlwZTsKKyAgICAgICAgaW50NjRfdCBtU3JjSWQ7CisgICAgICAgIHVpbnQzMl90IG1Tb3VyY2VGbGFnczsKKyAgICAgICAgaW50NjRfdCBtU3RhcnRUaW1lVXM7CisgICAgICAgIGludDY0X3QgbUVuZFRpbWVVczsKICAgICB9OwogCiAgICAgd3A8TnVQbGF5ZXIyRHJpdmVyPiBtRHJpdmVyOwpAQCAtMTU3LDEyICsxODUsOCBAQAogICAgIHVpZF90IG1VSUQ7CiAgICAgY29uc3Qgc3A8TWVkaWFDbG9jaz4gbU1lZGlhQ2xvY2s7CiAgICAgTXV0ZXggbVNvdXJjZUxvY2s7ICAvLyBndWFyZCB8bVNvdXJjZXwuCi0gICAgc3A8U291cmNlPiBtU291cmNlOwotICAgIGludDY0X3QgbVNyY0lkOwotICAgIHVpbnQzMl90IG1Tb3VyY2VGbGFnczsKLSAgICBzcDxTb3VyY2U+IG1OZXh0U291cmNlOwotICAgIGludDY0X3QgbU5leHRTcmNJZDsKLSAgICB1aW50MzJfdCBtTmV4dFNvdXJjZUZsYWdzOworICAgIFNvdXJjZUluZm8gbUN1cnJlbnRTb3VyY2VJbmZvOworICAgIFNvdXJjZUluZm8gbU5leHRTb3VyY2VJbmZvOwogICAgIHNwPEFOYXRpdmVXaW5kb3dXcmFwcGVyPiBtTmF0aXZlV2luZG93OwogICAgIHNwPE1lZGlhUGxheWVyMkludGVyZmFjZTo6QXVkaW9TaW5rPiBtQXVkaW9TaW5rOwogICAgIHNwPERlY29kZXJCYXNlPiBtVmlkZW9EZWNvZGVyOwpAQCAtMTc0LDYgKzE5OCw3IEBACiAgICAgaW50MzJfdCBtQXVkaW9EZWNvZGVyR2VuZXJhdGlvbjsKICAgICBpbnQzMl90IG1WaWRlb0RlY29kZXJHZW5lcmF0aW9uOwogICAgIGludDMyX3QgbVJlbmRlcmVyR2VuZXJhdGlvbjsKKyAgICBpbnQzMl90IG1FT1NNb25pdG9yR2VuZXJhdGlvbjsKIAogICAgIE11dGV4IG1QbGF5aW5nVGltZUxvY2s7CiAgICAgaW50NjRfdCBtTGFzdFN0YXJ0ZWRQbGF5aW5nVGltZU5zOwpAQCAtMjQ4LDE4ICsyNzMsNiBAQAogICAgIHNwPEFNZWRpYUNyeXB0b1dyYXBwZXI+IG1DcnlwdG87CiAgICAgYm9vbCBtSXNEcm1Qcm90ZWN0ZWQ7CiAKLSAgICB0eXBlZGVmIGVudW0gewotICAgICAgICBEQVRBX1NPVVJDRV9UWVBFX05PTkUsCi0gICAgICAgIERBVEFfU09VUkNFX1RZUEVfSFRUUF9MSVZFLAotICAgICAgICBEQVRBX1NPVVJDRV9UWVBFX1JUU1AsCi0gICAgICAgIERBVEFfU09VUkNFX1RZUEVfR0VORVJJQ19VUkwsCi0gICAgICAgIERBVEFfU09VUkNFX1RZUEVfR0VORVJJQ19GRCwKLSAgICAgICAgREFUQV9TT1VSQ0VfVFlQRV9NRURJQSwKLSAgICB9IERBVEFfU09VUkNFX1RZUEU7Ci0KLSAgICBzdGQ6OmF0b21pYzxEQVRBX1NPVVJDRV9UWVBFPiBtRGF0YVNvdXJjZVR5cGU7Ci0gICAgc3RkOjphdG9taWM8REFUQV9TT1VSQ0VfVFlQRT4gbU5leHREYXRhU291cmNlVHlwZTsKLQogICAgIGlubGluZSBjb25zdCBzcDxEZWNvZGVyQmFzZT4gJmdldERlY29kZXIoYm9vbCBhdWRpbykgewogICAgICAgICByZXR1cm4gYXVkaW8gPyBtQXVkaW9EZWNvZGVyIDogbVZpZGVvRGVjb2RlcjsKICAgICB9CkBAIC0yOTIsMTIgKzMwNSwxNCBAQAogICAgICAgICAgICAgY29uc3Qgc3A8QU1lc3NhZ2U+ICZpbnB1dEZvcm1hdCwKICAgICAgICAgICAgIGNvbnN0IHNwPEFNZXNzYWdlPiAmb3V0cHV0Rm9ybWF0ID0gTlVMTCk7CiAKLSAgICB2b2lkIG5vdGlmeUxpc3RlbmVyKGludDY0X3Qgc3JjSWQsIGludCBtc2csIGludCBleHQxLCBpbnQgZXh0MiwgY29uc3QgUGFyY2VsICppbiA9IE5VTEwpOworICAgIHZvaWQgbm90aWZ5TGlzdGVuZXIoaW50NjRfdCBzcmNJZCwgaW50IG1zZywgaW50IGV4dDEsIGludCBleHQyLCBjb25zdCBQbGF5ZXJNZXNzYWdlICppbiA9IE5VTEwpOworCisgICAgdm9pZCBhZGRFbmRUaW1lTW9uaXRvcigpOwogCiAgICAgdm9pZCBoYW5kbGVGbHVzaENvbXBsZXRlKGJvb2wgYXVkaW8sIGJvb2wgaXNEZWNvZGVyKTsKICAgICB2b2lkIGZpbmlzaEZsdXNoSWZQb3NzaWJsZSgpOwogCi0gICAgdm9pZCBvblN0YXJ0KCk7CisgICAgdm9pZCBvblN0YXJ0KGJvb2wgcGxheSk7CiAgICAgdm9pZCBvblJlc3VtZSgpOwogICAgIHZvaWQgb25QYXVzZSgpOwogCkBAIC0zMzMsNyArMzQ4LDcgQEAKICAgICB2b2lkIHNlbmRUaW1lZE1ldGFEYXRhKGNvbnN0IHNwPEFCdWZmZXI+ICZidWZmZXIpOwogICAgIHZvaWQgc2VuZFRpbWVkVGV4dERhdGEoY29uc3Qgc3A8QUJ1ZmZlcj4gJmJ1ZmZlcik7CiAKLSAgICB2b2lkIHdyaXRlVHJhY2tJbmZvKFBhcmNlbCogcmVwbHksIGNvbnN0IHNwPEFNZXNzYWdlPiYgZm9ybWF0KSBjb25zdDsKKyAgICB2b2lkIHdyaXRlVHJhY2tJbmZvKFBsYXllck1lc3NhZ2UqIHJlcGx5LCBjb25zdCBzcDxBTWVzc2FnZT4mIGZvcm1hdCkgY29uc3Q7CiAKICAgICBzdGF0dXNfdCBvblByZXBhcmVEcm0oY29uc3Qgc3A8QU1lc3NhZ2U+ICZtc2cpOwogICAgIHN0YXR1c190IG9uUmVsZWFzZURybSgpOwpkaWZmIC0tZ2l0IGEvbWVkaWEvbGlibWVkaWFwbGF5ZXIyL251cGxheWVyMi9OdVBsYXllcjJEZWNvZGVyLmNwcCBiL21lZGlhL2xpYm1lZGlhcGxheWVyMi9udXBsYXllcjIvTnVQbGF5ZXIyRGVjb2Rlci5jcHAKaW5kZXggNjQ1MTM4YS4uOTMxYjg2ZSAxMDA2NDQKLS0tIGEvbWVkaWEvbGlibWVkaWFwbGF5ZXIyL251cGxheWVyMi9OdVBsYXllcjJEZWNvZGVyLmNwcAorKysgYi9tZWRpYS9saWJtZWRpYXBsYXllcjIvbnVwbGF5ZXIyL051UGxheWVyMkRlY29kZXIuY3BwCkBAIC0xMDg4LDYgKzEwODgsMTIgQEAKICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRpY19jYXN0PE1lZGlhQnVmZmVySG9sZGVyKj4oaG9sZGVyLmdldCgpKS0+bWVkaWFCdWZmZXIoKSA6IG51bGxwdHI7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIGlmIChtZWRpYUJ1ZiAhPSBOVUxMKSB7CisgICAgICAgICAgICAgICAgICAgIGlmIChtZWRpYUJ1Zi0+c2l6ZSgpID4gY29kZWNCdWZmZXItPmNhcGFjaXR5KCkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGhhbmRsZUVycm9yKEVSUk9SX0JVRkZFUl9UT09fU01BTEwpOworICAgICAgICAgICAgICAgICAgICAgICAgbURlcXVldWVkSW5wdXRCdWZmZXJzLnB1c2hfYmFjayhidWZmZXJJeCk7CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICAgICAgICAgIH0KKwogICAgICAgICAgICAgICAgICAgICBjb2RlY0J1ZmZlci0+c2V0UmFuZ2UoMCwgbWVkaWFCdWYtPnNpemUoKSk7CiAgICAgICAgICAgICAgICAgICAgIG1lbWNweShjb2RlY0J1ZmZlci0+ZGF0YSgpLCBtZWRpYUJ1Zi0+ZGF0YSgpLCBtZWRpYUJ1Zi0+c2l6ZSgpKTsKIApkaWZmIC0tZ2l0IGEvbWVkaWEvbGlibWVkaWFwbGF5ZXIyL251cGxheWVyMi9OdVBsYXllcjJEcml2ZXIuY3BwIGIvbWVkaWEvbGlibWVkaWFwbGF5ZXIyL251cGxheWVyMi9OdVBsYXllcjJEcml2ZXIuY3BwCmluZGV4IGJhZmE2NTMuLjgyMWRjOWYgMTAwNjQ0Ci0tLSBhL21lZGlhL2xpYm1lZGlhcGxheWVyMi9udXBsYXllcjIvTnVQbGF5ZXIyRHJpdmVyLmNwcAorKysgYi9tZWRpYS9saWJtZWRpYXBsYXllcjIvbnVwbGF5ZXIyL051UGxheWVyMkRyaXZlci5jcHAKQEAgLTM3LDQ1ICszNyw0NyBAQAogCiAjaW5jbHVkZSA8bWVkaWEvSU1lZGlhQW5hbHl0aWNzU2VydmljZS5oPgogCit1c2luZyBnb29nbGU6OnByb3RvYnVmOjpSZXBlYXRlZFB0ckZpZWxkOwordXNpbmcgYW5kcm9pZDo6bWVkaWE6Ok1lZGlhUGxheWVyMlByb3RvOjpWYWx1ZTsKKwogc3RhdGljIGNvbnN0IGludCBrRHVtcExvY2tSZXRyaWVzID0gNTA7CiBzdGF0aWMgY29uc3QgaW50IGtEdW1wTG9ja1NsZWVwVXMgPSAyMDAwMDsKIAogbmFtZXNwYWNlIGFuZHJvaWQgewogCi1zdHJ1Y3QgUGFyY2VsV3JhcHBlciA6IHB1YmxpYyBSZWZCYXNlIHsKLSAgICBzdGF0aWMgc3A8UGFyY2VsV3JhcHBlcj4gQ3JlYXRlKGNvbnN0IFBhcmNlbCAqcCkgeworc3RydWN0IFBsYXllck1lc3NhZ2VXcmFwcGVyIDogcHVibGljIFJlZkJhc2UgeworICAgIHN0YXRpYyBzcDxQbGF5ZXJNZXNzYWdlV3JhcHBlcj4gQ3JlYXRlKGNvbnN0IFBsYXllck1lc3NhZ2UgKnApIHsKICAgICAgICAgaWYgKHAgIT0gTlVMTCkgewotICAgICAgICAgICAgc3A8UGFyY2VsV3JhcHBlcj4gcHcgPSBuZXcgUGFyY2VsV3JhcHBlcigpOwotICAgICAgICAgICAgaWYgKHB3LT5hcHBlbmRGcm9tKHApID09IE9LKSB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHB3OwotICAgICAgICAgICAgfQorICAgICAgICAgICAgc3A8UGxheWVyTWVzc2FnZVdyYXBwZXI+IHB3ID0gbmV3IFBsYXllck1lc3NhZ2VXcmFwcGVyKCk7CisgICAgICAgICAgICBwdy0+Y29weUZyb20ocCk7CisgICAgICAgICAgICByZXR1cm4gcHc7CiAgICAgICAgIH0KICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgfQogCi0gICAgY29uc3QgUGFyY2VsICpnZXRQYXJjZWwoKSB7Ci0gICAgICAgIHJldHVybiBtUGFyY2VsOworICAgIGNvbnN0IFBsYXllck1lc3NhZ2UgKmdldFBsYXllck1lc3NhZ2UoKSB7CisgICAgICAgIHJldHVybiBtUGxheWVyTWVzc2FnZTsKICAgICB9CiAKIHByb3RlY3RlZDoKLSAgICB2aXJ0dWFsIH5QYXJjZWxXcmFwcGVyKCkgewotICAgICAgICBpZiAobVBhcmNlbCAhPSBOVUxMKSB7Ci0gICAgICAgICAgICBkZWxldGUgbVBhcmNlbDsKKyAgICB2aXJ0dWFsIH5QbGF5ZXJNZXNzYWdlV3JhcHBlcigpIHsKKyAgICAgICAgaWYgKG1QbGF5ZXJNZXNzYWdlICE9IE5VTEwpIHsKKyAgICAgICAgICAgIGRlbGV0ZSBtUGxheWVyTWVzc2FnZTsKICAgICAgICAgfQogICAgIH0KIAogcHJpdmF0ZToKLSAgICBQYXJjZWxXcmFwcGVyKCkKLSAgICAgICAgOiBtUGFyY2VsKE5VTEwpIHsgfQorICAgIFBsYXllck1lc3NhZ2VXcmFwcGVyKCkKKyAgICAgICAgOiBtUGxheWVyTWVzc2FnZShOVUxMKSB7IH0KIAotICAgIHN0YXR1c190IGFwcGVuZEZyb20oY29uc3QgUGFyY2VsICpwKSB7Ci0gICAgICAgIGlmIChtUGFyY2VsID09IE5VTEwpIHsKLSAgICAgICAgICAgIG1QYXJjZWwgPSBuZXcgUGFyY2VsOworICAgIHZvaWQgY29weUZyb20oY29uc3QgUGxheWVyTWVzc2FnZSAqcCkgeworICAgICAgICBpZiAobVBsYXllck1lc3NhZ2UgPT0gTlVMTCkgeworICAgICAgICAgICAgbVBsYXllck1lc3NhZ2UgPSBuZXcgUGxheWVyTWVzc2FnZTsKICAgICAgICAgfQotICAgICAgICByZXR1cm4gbVBhcmNlbC0+YXBwZW5kRnJvbShwLCAwIC8qIHN0YXJ0ICovLCBwLT5kYXRhU2l6ZSgpKTsKKyAgICAgICAgbVBsYXllck1lc3NhZ2UtPkNvcHlGcm9tKCpwKTsKICAgICB9CiAKLSAgICBQYXJjZWwgKm1QYXJjZWw7CisgICAgUGxheWVyTWVzc2FnZSAqbVBsYXllck1lc3NhZ2U7CiB9OwogCiAvLyBrZXkgZm9yIG1lZGlhIHN0YXRpc3RpY3MKQEAgLTI3MywxMyArMjc1LDYgQEAKICAgICAgICAgICAgIG1TdGF0ZSA9IFNUQVRFX1BSRVBBUklORzsKICAgICAgICAgICAgIG1QbGF5ZXItPnByZXBhcmVBc3luYygpOwogICAgICAgICAgICAgcmV0dXJuIE9LOwotICAgICAgICBjYXNlIFNUQVRFX1NUT1BQRUQ6Ci0gICAgICAgICAgICAvLyB0aGlzIGlzIHJlYWxseSBqdXN0IHBhdXNlZC4gaGFuZGxlIGFzIHNlZWsgdG8gc3RhcnQKLSAgICAgICAgICAgIG1BdEVPUyA9IGZhbHNlOwotICAgICAgICAgICAgbVN0YXRlID0gU1RBVEVfU1RPUFBFRF9BTkRfUFJFUEFSSU5HOwotICAgICAgICAgICAgbVBsYXllci0+c2Vla1RvQXN5bmMoMCwgTWVkaWFQbGF5ZXIyU2Vla01vZGU6OlNFRUtfUFJFVklPVVNfU1lOQyAvKiBtb2RlICovLAotICAgICAgICAgICAgICAgICAgICB0cnVlIC8qIG5lZWROb3RpZnkgKi8pOwotICAgICAgICAgICAgcmV0dXJuIE9LOwogICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgcmV0dXJuIElOVkFMSURfT1BFUkFUSU9OOwogICAgIH07CkBAIC0yOTQsNyArMjg5LDYgQEAKIHN0YXR1c190IE51UGxheWVyMkRyaXZlcjo6c3RhcnRfbCgpIHsKICAgICBzd2l0Y2ggKG1TdGF0ZSkgewogICAgICAgICBjYXNlIFNUQVRFX1BBVVNFRDoKLSAgICAgICAgY2FzZSBTVEFURV9TVE9QUEVEX0FORF9QUkVQQVJFRDoKICAgICAgICAgY2FzZSBTVEFURV9QUkVQQVJFRDoKICAgICAgICAgewogICAgICAgICAgICAgbVBsYXllci0+c3RhcnQoKTsKQEAgLTMwNCw3ICsyOTgsNyBAQAogICAgICAgICBjYXNlIFNUQVRFX1JVTk5JTkc6CiAgICAgICAgIHsKICAgICAgICAgICAgIGlmIChtQXRFT1MpIHsKLSAgICAgICAgICAgICAgICBtUGxheWVyLT5zZWVrVG9Bc3luYygwKTsKKyAgICAgICAgICAgICAgICBtUGxheWVyLT5yZXdpbmQoKTsKICAgICAgICAgICAgICAgICBtQXRFT1MgPSBmYWxzZTsKICAgICAgICAgICAgICAgICBtUG9zaXRpb25VcyA9IC0xOwogICAgICAgICAgICAgfQpAQCAtMzIwLDM0ICszMTQsNiBAQAogICAgIHJldHVybiBPSzsKIH0KIAotc3RhdHVzX3QgTnVQbGF5ZXIyRHJpdmVyOjpzdG9wKCkgewotICAgIEFMT0dEKCJzdG9wKCVwKSIsIHRoaXMpOwotICAgIE11dGV4OjpBdXRvbG9jayBhdXRvTG9jayhtTG9jayk7Ci0KLSAgICBzd2l0Y2ggKG1TdGF0ZSkgewotICAgICAgICBjYXNlIFNUQVRFX1JVTk5JTkc6Ci0gICAgICAgICAgICBtUGxheWVyLT5wYXVzZSgpOwotICAgICAgICAgICAgLy8gZmFsbCB0aHJvdWdoCi0KLSAgICAgICAgY2FzZSBTVEFURV9QQVVTRUQ6Ci0gICAgICAgICAgICBtU3RhdGUgPSBTVEFURV9TVE9QUEVEOwotICAgICAgICAgICAgLy9ub3RpZnlMaXN0ZW5lcl9sKE1FRElBMl9TVE9QUEVEKTsKLSAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgIGNhc2UgU1RBVEVfUFJFUEFSRUQ6Ci0gICAgICAgIGNhc2UgU1RBVEVfU1RPUFBFRDoKLSAgICAgICAgY2FzZSBTVEFURV9TVE9QUEVEX0FORF9QUkVQQVJJTkc6Ci0gICAgICAgIGNhc2UgU1RBVEVfU1RPUFBFRF9BTkRfUFJFUEFSRUQ6Ci0gICAgICAgICAgICBtU3RhdGUgPSBTVEFURV9TVE9QUEVEOwotICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIHJldHVybiBJTlZBTElEX09QRVJBVElPTjsKLSAgICB9Ci0KLSAgICByZXR1cm4gT0s7Ci19Ci0KIHN0YXR1c190IE51UGxheWVyMkRyaXZlcjo6cGF1c2UoKSB7CiAgICAgQUxPR0QoInBhdXNlKCVwKSIsIHRoaXMpOwogICAgIC8vIFRoZSBOdVBsYXllclJlbmRlcmVyIG1heSBnZXQgZmx1c2hlZCBpZiBwYXVzZSBmb3IgbG9uZyBlbm91Z2gsIGUuZy4gdGhlIHBhdXNlIHRpbWVvdXQgdGVhcgpAQCAtMzYxLDkgKzMyNyw5IEBACiAKICAgICBzd2l0Y2ggKG1TdGF0ZSkgewogICAgICAgICBjYXNlIFNUQVRFX1BBVVNFRDoKLSAgICAgICAgY2FzZSBTVEFURV9QUkVQQVJFRDoKICAgICAgICAgICAgIHJldHVybiBPSzsKIAorICAgICAgICBjYXNlIFNUQVRFX1BSRVBBUkVEOgogICAgICAgICBjYXNlIFNUQVRFX1JVTk5JTkc6CiAgICAgICAgICAgICBtU3RhdGUgPSBTVEFURV9QQVVTRUQ7CiAgICAgICAgICAgICBtUGxheWVyLT5wYXVzZSgpOwpAQCAtMzg2LDE1ICszNTIsNiBAQAogICAgICAgICAvLyB0cnkgdG8gdXBkYXRlIHBvc2l0aW9uCiAgICAgICAgIGludDY0X3QgdW51c2VkOwogICAgICAgICBnZXRDdXJyZW50UG9zaXRpb24oJnVudXNlZCk7Ci0gICAgICAgIE11dGV4OjpBdXRvbG9jayBhdXRvTG9jayhtTG9jayk7Ci0gICAgICAgIGlmIChyYXRlLm1TcGVlZCA9PSAwLmYgJiYgbVN0YXRlID09IFNUQVRFX1JVTk5JTkcpIHsKLSAgICAgICAgICAgIG1TdGF0ZSA9IFNUQVRFX1BBVVNFRDsKLSAgICAgICAgfSBlbHNlIGlmIChyYXRlLm1TcGVlZCAhPSAwLmYKLSAgICAgICAgICAgICAgICAmJiAobVN0YXRlID09IFNUQVRFX1BBVVNFRAotICAgICAgICAgICAgICAgICAgICB8fCBtU3RhdGUgPT0gU1RBVEVfU1RPUFBFRF9BTkRfUFJFUEFSRUQKLSAgICAgICAgICAgICAgICAgICAgfHwgbVN0YXRlID09IFNUQVRFX1BSRVBBUkVEKSkgewotICAgICAgICAgICAgZXJyID0gc3RhcnRfbCgpOwotICAgICAgICB9CiAgICAgfQogICAgIHJldHVybiBlcnI7CiB9CkBAIC00MTksNyArMzc2LDYgQEAKIAogICAgIHN3aXRjaCAobVN0YXRlKSB7CiAgICAgICAgIGNhc2UgU1RBVEVfUFJFUEFSRUQ6Ci0gICAgICAgIGNhc2UgU1RBVEVfU1RPUFBFRF9BTkRfUFJFUEFSRUQ6CiAgICAgICAgIGNhc2UgU1RBVEVfUEFVU0VEOgogICAgICAgICBjYXNlIFNUQVRFX1JVTk5JTkc6CiAgICAgICAgIHsKQEAgLTYwMSwxMCArNTU3LDYgQEAKICAgICAgICAgICAgIGJyZWFrOwogICAgIH0KIAotICAgIGlmIChtU3RhdGUgIT0gU1RBVEVfU1RPUFBFRCkgewotICAgICAgICAvLyBub3RpZnlMaXN0ZW5lcl9sKE1FRElBMl9TVE9QUEVEKTsKLSAgICB9Ci0KICAgICBtU3RhdGUgPSBTVEFURV9SRVNFVF9JTl9QUk9HUkVTUzsKICAgICBtUGxheWVyLT5yZXNldEFzeW5jKCk7CiAKQEAgLTYzMywzNCArNTg1LDMwIEBACiAgICAgcmV0dXJuIE9LOwogfQogCi1zdGF0dXNfdCBOdVBsYXllcjJEcml2ZXI6Omludm9rZShjb25zdCBQYXJjZWwgJnJlcXVlc3QsIFBhcmNlbCAqcmVwbHkpIHsKLSAgICBpZiAocmVwbHkgPT0gTlVMTCkgeworc3RhdHVzX3QgTnVQbGF5ZXIyRHJpdmVyOjppbnZva2UoY29uc3QgUGxheWVyTWVzc2FnZSAmcmVxdWVzdCwgUGxheWVyTWVzc2FnZSAqcmVzcG9uc2UpIHsKKyAgICBpZiAocmVzcG9uc2UgPT0gTlVMTCkgewogICAgICAgICBBTE9HRSgicmVwbHkgaXMgYSBOVUxMIHBvaW50ZXIiKTsKICAgICAgICAgcmV0dXJuIEJBRF9WQUxVRTsKICAgICB9CiAKLSAgICBpbnQzMl90IG1ldGhvZElkOwotICAgIHN0YXR1c190IHJldCA9IHJlcXVlc3QucmVhZEludDMyKCZtZXRob2RJZCk7Ci0gICAgaWYgKHJldCAhPSBPSykgewotICAgICAgICBBTE9HRSgiRmFpbGVkIHRvIHJldHJpZXZlIHRoZSByZXF1ZXN0ZWQgbWV0aG9kIHRvIGludm9rZSwgZXJyKCVkKSIsIHJldCk7Ci0gICAgICAgIHJldHVybiByZXQ7Ci0gICAgfQorICAgIFJlcGVhdGVkUHRyRmllbGQ8Y29uc3QgVmFsdWU+Ojpjb25zdF9pdGVyYXRvciBpdCA9IHJlcXVlc3QudmFsdWVzKCkuY2JlZ2luKCk7CisgICAgaW50MzJfdCBtZXRob2RJZCA9IChpdCsrKS0+aW50MzJfdmFsdWUoKTsKIAogICAgIHN3aXRjaCAobWV0aG9kSWQpIHsKICAgICAgICAgY2FzZSBNRURJQV9QTEFZRVIyX0lOVk9LRV9JRF9TRVRfVklERU9fU0NBTElOR19NT0RFOgogICAgICAgICB7Ci0gICAgICAgICAgICBpbnQgbW9kZSA9IHJlcXVlc3QucmVhZEludDMyKCk7CisgICAgICAgICAgICBpbnQgbW9kZSA9IChpdCsrKS0+aW50MzJfdmFsdWUoKTsKICAgICAgICAgICAgIHJldHVybiBtUGxheWVyLT5zZXRWaWRlb1NjYWxpbmdNb2RlKG1vZGUpOwogICAgICAgICB9CiAKICAgICAgICAgY2FzZSBNRURJQV9QTEFZRVIyX0lOVk9LRV9JRF9HRVRfVFJBQ0tfSU5GTzoKICAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIG1QbGF5ZXItPmdldFRyYWNrSW5mbyhyZXBseSk7CisgICAgICAgICAgICByZXR1cm4gbVBsYXllci0+Z2V0VHJhY2tJbmZvKHJlc3BvbnNlKTsKICAgICAgICAgfQogCiAgICAgICAgIGNhc2UgTUVESUFfUExBWUVSMl9JTlZPS0VfSURfU0VMRUNUX1RSQUNLOgogICAgICAgICB7Ci0gICAgICAgICAgICBpbnQgdHJhY2tJbmRleCA9IHJlcXVlc3QucmVhZEludDMyKCk7CisgICAgICAgICAgICBpbnQgdHJhY2tJbmRleCA9IChpdCsrKS0+aW50MzJfdmFsdWUoKTsKICAgICAgICAgICAgIGludDY0X3QgbXNlYyA9IDA7CiAgICAgICAgICAgICAvLyBnZXRDdXJyZW50UG9zaXRpb24gc2hvdWxkIGFsd2F5cyByZXR1cm4gT0sKICAgICAgICAgICAgIGdldEN1cnJlbnRQb3NpdGlvbigmbXNlYyk7CkBAIC02NjksMTQgKzYxNywxNCBAQAogCiAgICAgICAgIGNhc2UgTUVESUFfUExBWUVSMl9JTlZPS0VfSURfVU5TRUxFQ1RfVFJBQ0s6CiAgICAgICAgIHsKLSAgICAgICAgICAgIGludCB0cmFja0luZGV4ID0gcmVxdWVzdC5yZWFkSW50MzIoKTsKKyAgICAgICAgICAgIGludCB0cmFja0luZGV4ID0gKGl0KyspLT5pbnQzMl92YWx1ZSgpOwogICAgICAgICAgICAgcmV0dXJuIG1QbGF5ZXItPnNlbGVjdFRyYWNrKHRyYWNrSW5kZXgsIGZhbHNlIC8qIHNlbGVjdCAqLywgMHhkZWFkYmVlZiAvKiBub3QgdXNlZCAqLyk7CiAgICAgICAgIH0KIAogICAgICAgICBjYXNlIE1FRElBX1BMQVlFUjJfSU5WT0tFX0lEX0dFVF9TRUxFQ1RFRF9UUkFDSzoKICAgICAgICAgewotICAgICAgICAgICAgaW50MzJfdCB0eXBlID0gcmVxdWVzdC5yZWFkSW50MzIoKTsKLSAgICAgICAgICAgIHJldHVybiBtUGxheWVyLT5nZXRTZWxlY3RlZFRyYWNrKHR5cGUsIHJlcGx5KTsKKyAgICAgICAgICAgIGludDMyX3QgdHlwZSA9IChpdCsrKS0+aW50MzJfdmFsdWUoKTsKKyAgICAgICAgICAgIHJldHVybiBtUGxheWVyLT5nZXRTZWxlY3RlZFRyYWNrKHR5cGUsIHJlc3BvbnNlKTsKICAgICAgICAgfQogCiAgICAgICAgIGRlZmF1bHQ6CkBAIC03ODAsMjAgKzcyOCw3IEBACiAgICAgQUxPR1YoIm5vdGlmeVNlZWtDb21wbGV0ZSglcCkiLCB0aGlzKTsKICAgICBNdXRleDo6QXV0b2xvY2sgYXV0b0xvY2sobUxvY2spOwogICAgIG1TZWVrSW5Qcm9ncmVzcyA9IGZhbHNlOwotICAgIG5vdGlmeVNlZWtDb21wbGV0ZV9sKHNyY0lkKTsKLX0KLQotdm9pZCBOdVBsYXllcjJEcml2ZXI6Om5vdGlmeVNlZWtDb21wbGV0ZV9sKGludDY0X3Qgc3JjSWQpIHsKLSAgICBib29sIHdhc1NlZWtpbmcgPSB0cnVlOwotICAgIGlmIChtU3RhdGUgPT0gU1RBVEVfU1RPUFBFRF9BTkRfUFJFUEFSSU5HKSB7Ci0gICAgICAgIHdhc1NlZWtpbmcgPSBmYWxzZTsKLSAgICAgICAgbVN0YXRlID0gU1RBVEVfU1RPUFBFRF9BTkRfUFJFUEFSRUQ7Ci0gICAgICAgIG1Db25kaXRpb24uYnJvYWRjYXN0KCk7Ci0gICAgfSBlbHNlIGlmIChtU3RhdGUgPT0gU1RBVEVfU1RPUFBFRCkgewotICAgICAgICAvLyBubyBuZWVkIHRvIG5vdGlmeSBsaXN0ZW5lcgotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIG5vdGlmeUxpc3RlbmVyX2woc3JjSWQsIHdhc1NlZWtpbmcgPyBNRURJQTJfU0VFS19DT01QTEVURSA6IE1FRElBMl9QUkVQQVJFRCk7CisgICAgbm90aWZ5TGlzdGVuZXJfbChzcmNJZCwgTUVESUEyX1NFRUtfQ09NUExFVEUpOwogfQogCiBzdGF0dXNfdCBOdVBsYXllcjJEcml2ZXI6OmR1bXAoCkBAIC04ODQsMTIgKzgxOSwxMiBAQAogICAgICAgICAgICAgQ0hFQ0sobXNnLT5maW5kSW50MzIoIm1lc3NhZ2VJZCIsICZtc2dJZCkpOwogICAgICAgICAgICAgbXNnLT5maW5kSW50MzIoImV4dDEiLCAmZXh0MSk7CiAgICAgICAgICAgICBtc2ctPmZpbmRJbnQzMigiZXh0MiIsICZleHQyKTsKLSAgICAgICAgICAgIHNwPFBhcmNlbFdyYXBwZXI+IGluOworICAgICAgICAgICAgc3A8UGxheWVyTWVzc2FnZVdyYXBwZXI+IGluOwogICAgICAgICAgICAgc3A8UmVmQmFzZT4gb2JqOwotICAgICAgICAgICAgaWYgKG1zZy0+ZmluZE9iamVjdCgicGFyY2VsIiwgJm9iaikgJiYgb2JqICE9IE5VTEwpIHsKLSAgICAgICAgICAgICAgICBpbiA9IHN0YXRpY19jYXN0PFBhcmNlbFdyYXBwZXIgKj4ob2JqLmdldCgpKTsKKyAgICAgICAgICAgIGlmIChtc2ctPmZpbmRPYmplY3QoIm9iaiIsICZvYmopICYmIG9iaiAhPSBOVUxMKSB7CisgICAgICAgICAgICAgICAgaW4gPSBzdGF0aWNfY2FzdDxQbGF5ZXJNZXNzYWdlV3JhcHBlciAqPihvYmouZ2V0KCkpOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgc2VuZEV2ZW50KHNyY0lkLCBtc2dJZCwgZXh0MSwgZXh0MiwgKGluID09IE5VTEwgPyBOVUxMIDogaW4tPmdldFBhcmNlbCgpKSk7CisgICAgICAgICAgICBzZW5kRXZlbnQoc3JjSWQsIG1zZ0lkLCBleHQxLCBleHQyLCAoaW4gPT0gTlVMTCA/IE5VTEwgOiBpbi0+Z2V0UGxheWVyTWVzc2FnZSgpKSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICBkZWZhdWx0OgpAQCAtODk4LDE2ICs4MzMsMTYgQEAKIH0KIAogdm9pZCBOdVBsYXllcjJEcml2ZXI6Om5vdGlmeUxpc3RlbmVyKAotICAgICAgICBpbnQ2NF90IHNyY0lkLCBpbnQgbXNnLCBpbnQgZXh0MSwgaW50IGV4dDIsIGNvbnN0IFBhcmNlbCAqaW4pIHsKKyAgICAgICAgaW50NjRfdCBzcmNJZCwgaW50IG1zZywgaW50IGV4dDEsIGludCBleHQyLCBjb25zdCBQbGF5ZXJNZXNzYWdlICppbikgewogICAgIE11dGV4OjpBdXRvbG9jayBhdXRvTG9jayhtTG9jayk7CiAgICAgbm90aWZ5TGlzdGVuZXJfbChzcmNJZCwgbXNnLCBleHQxLCBleHQyLCBpbik7CiB9CiAKIHZvaWQgTnVQbGF5ZXIyRHJpdmVyOjpub3RpZnlMaXN0ZW5lcl9sKAotICAgICAgICBpbnQ2NF90IHNyY0lkLCBpbnQgbXNnLCBpbnQgZXh0MSwgaW50IGV4dDIsIGNvbnN0IFBhcmNlbCAqaW4pIHsKKyAgICAgICAgaW50NjRfdCBzcmNJZCwgaW50IG1zZywgaW50IGV4dDEsIGludCBleHQyLCBjb25zdCBQbGF5ZXJNZXNzYWdlICppbikgewogICAgIEFMT0dEKCJub3RpZnlMaXN0ZW5lcl9sKCVwKSwgKCVsbGQsICVkLCAlZCwgJWQsICVkKSwgbG9vcCBzZXR0aW5nKCVkLCAlZCkiLAogICAgICAgICAgICAgdGhpcywgKGxvbmcgbG9uZylzcmNJZCwgbXNnLCBleHQxLCBleHQyLAotICAgICAgICAgICAgKGluID09IE5VTEwgPyAtMSA6IChpbnQpaW4tPmRhdGFTaXplKCkpLCBtQXV0b0xvb3AsIG1Mb29waW5nKTsKKyAgICAgICAgICAgIChpbiA9PSBOVUxMID8gLTEgOiAoaW50KWluLT5CeXRlU2l6ZSgpKSwgbUF1dG9Mb29wLCBtTG9vcGluZyk7CiAgICAgaWYgKHNyY0lkID09IG1TcmNJZCkgewogICAgICAgICBzd2l0Y2ggKG1zZykgewogICAgICAgICAgICAgY2FzZSBNRURJQTJfUExBWUJBQ0tfQ09NUExFVEU6CkBAIC05MjQsMTMgKzg1OSwxOCBAQAogICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgIGlmIChtTG9vcGluZyB8fCBtQXV0b0xvb3ApIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIG1QbGF5ZXItPnNlZWtUb0FzeW5jKDApOworICAgICAgICAgICAgICAgICAgICAgICAgbVBsYXllci0+cmV3aW5kKCk7CiAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobUF1ZGlvU2luayAhPSBOVUxMKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gVGhlIHJlbmRlcmVyIGhhcyBzdG9wcGVkIHRoZSBzaW5rIGF0IHRoZSBlbmQgaW4gb3JkZXIgdG8gcGxheSBvdXQKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyB0aGUgbGFzdCBsaXR0bGUgYml0IG9mIGF1ZGlvLiBJbiBsb29waW5nIG1vZGUsIHdlIG5lZWQgdG8gcmVzdGFydCBpdC4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtQXVkaW9TaW5rLT5zdGFydCgpOwogICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgLy8gZG9uJ3Qgc2VuZCBjb21wbGV0aW9uIGV2ZW50IHdoZW4gbG9vcGluZworCisgICAgICAgICAgICAgICAgICAgICAgICBzcDxBTWVzc2FnZT4gbm90aWZ5ID0gbmV3IEFNZXNzYWdlKGtXaGF0Tm90aWZ5TGlzdGVuZXIsIHRoaXMpOworICAgICAgICAgICAgICAgICAgICAgICAgbm90aWZ5LT5zZXRJbnQ2NCgic3JjSWQiLCBzcmNJZCk7CisgICAgICAgICAgICAgICAgICAgICAgICBub3RpZnktPnNldEludDMyKCJtZXNzYWdlSWQiLCBNRURJQTJfSU5GTyk7CisgICAgICAgICAgICAgICAgICAgICAgICBub3RpZnktPnNldEludDMyKCJleHQxIiwgTUVESUEyX0lORk9fREFUQV9TT1VSQ0VfUkVQRUFUKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIG5vdGlmeS0+cG9zdCgpOwogICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgIGlmIChwcm9wZXJ0eV9nZXRfYm9vbCgicGVyc2lzdC5kZWJ1Zy5zZi5zdGF0cyIsIGZhbHNlKSkgewpAQCAtOTY5LDcgKzkwOSw3IEBACiAgICAgbm90aWZ5LT5zZXRJbnQzMigibWVzc2FnZUlkIiwgbXNnKTsKICAgICBub3RpZnktPnNldEludDMyKCJleHQxIiwgZXh0MSk7CiAgICAgbm90aWZ5LT5zZXRJbnQzMigiZXh0MiIsIGV4dDIpOwotICAgIG5vdGlmeS0+c2V0T2JqZWN0KCJwYXJjZWwiLCBQYXJjZWxXcmFwcGVyOjpDcmVhdGUoaW4pKTsKKyAgICBub3RpZnktPnNldE9iamVjdCgib2JqIiwgUGxheWVyTWVzc2FnZVdyYXBwZXI6OkNyZWF0ZSgoUGxheWVyTWVzc2FnZSopaW4pKTsKICAgICBub3RpZnktPnBvc3QoKTsKIH0KIApAQCAtMTA3Myw5ICsxMDEzLDYgQEAKICAgICAgICAgY2FzZSBTVEFURV9SVU5OSU5HOiBydmFsID0gIlJVTk5JTkciOyBicmVhazsKICAgICAgICAgY2FzZSBTVEFURV9QQVVTRUQ6IHJ2YWwgPSAiUEFVU0VEIjsgYnJlYWs7CiAgICAgICAgIGNhc2UgU1RBVEVfUkVTRVRfSU5fUFJPR1JFU1M6IHJ2YWwgPSAiUkVTRVRfSU5fUFJPR1JFU1MiOyBicmVhazsKLSAgICAgICAgY2FzZSBTVEFURV9TVE9QUEVEOiBydmFsID0gIlNUT1BQRUQiOyBicmVhazsKLSAgICAgICAgY2FzZSBTVEFURV9TVE9QUEVEX0FORF9QUkVQQVJJTkc6IHJ2YWwgPSAiU1RPUFBFRF9BTkRfUFJFUEFSSU5HIjsgYnJlYWs7Ci0gICAgICAgIGNhc2UgU1RBVEVfU1RPUFBFRF9BTkRfUFJFUEFSRUQ6IHJ2YWwgPSAiU1RPUFBFRF9BTkRfUFJFUEFSRUQiOyBicmVhazsKICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgIC8vIHllcywgdGhpcyBidWZmZXIgaXMgc2hhcmVkIGFuZCB2dWxuZXJhYmxlIHRvIHJhY2VzCiAgICAgICAgICAgICBzbnByaW50ZihyYXdidWZmZXIsIHNpemVvZihyYXdidWZmZXIpLCAiJWQiLCBzdGF0ZSk7CmRpZmYgLS1naXQgYS9tZWRpYS9saWJtZWRpYXBsYXllcjIvbnVwbGF5ZXIyL051UGxheWVyMkRyaXZlci5oIGIvbWVkaWEvbGlibWVkaWFwbGF5ZXIyL251cGxheWVyMi9OdVBsYXllcjJEcml2ZXIuaAppbmRleCA0ZGEyNTY2Li41MGVlMTczIDEwMDY0NAotLS0gYS9tZWRpYS9saWJtZWRpYXBsYXllcjIvbnVwbGF5ZXIyL051UGxheWVyMkRyaXZlci5oCisrKyBiL21lZGlhL2xpYm1lZGlhcGxheWVyMi9udXBsYXllcjIvTnVQbGF5ZXIyRHJpdmVyLmgKQEAgLTQwLDMxICs0MCwzMSBAQAogICAgICAgICAgICAgQnVmZmVyaW5nU2V0dGluZ3MqIGJ1ZmZlcmluZyAvKiBub25udWxsICovKSBvdmVycmlkZTsKICAgICB2aXJ0dWFsIHN0YXR1c190IHNldEJ1ZmZlcmluZ1NldHRpbmdzKGNvbnN0IEJ1ZmZlcmluZ1NldHRpbmdzJiBidWZmZXJpbmcpIG92ZXJyaWRlOwogCi0gICAgdmlydHVhbCBzdGF0dXNfdCBwcmVwYXJlQXN5bmMoKTsKLSAgICB2aXJ0dWFsIHN0YXR1c190IHN0YXJ0KCk7Ci0gICAgdmlydHVhbCBzdGF0dXNfdCBzdG9wKCk7Ci0gICAgdmlydHVhbCBzdGF0dXNfdCBwYXVzZSgpOwotICAgIHZpcnR1YWwgYm9vbCBpc1BsYXlpbmcoKTsKLSAgICB2aXJ0dWFsIHN0YXR1c190IHNldFBsYXliYWNrU2V0dGluZ3MoY29uc3QgQXVkaW9QbGF5YmFja1JhdGUgJnJhdGUpOwotICAgIHZpcnR1YWwgc3RhdHVzX3QgZ2V0UGxheWJhY2tTZXR0aW5ncyhBdWRpb1BsYXliYWNrUmF0ZSAqcmF0ZSk7Ci0gICAgdmlydHVhbCBzdGF0dXNfdCBzZXRTeW5jU2V0dGluZ3MoY29uc3QgQVZTeW5jU2V0dGluZ3MgJnN5bmMsIGZsb2F0IHZpZGVvRnBzSGludCk7Ci0gICAgdmlydHVhbCBzdGF0dXNfdCBnZXRTeW5jU2V0dGluZ3MoQVZTeW5jU2V0dGluZ3MgKnN5bmMsIGZsb2F0ICp2aWRlb0Zwcyk7CisgICAgdmlydHVhbCBzdGF0dXNfdCBwcmVwYXJlQXN5bmMoKSBvdmVycmlkZTsKKyAgICB2aXJ0dWFsIHN0YXR1c190IHN0YXJ0KCkgb3ZlcnJpZGU7CisgICAgdmlydHVhbCBzdGF0dXNfdCBwYXVzZSgpIG92ZXJyaWRlOworICAgIHZpcnR1YWwgYm9vbCBpc1BsYXlpbmcoKSBvdmVycmlkZTsKKyAgICB2aXJ0dWFsIHN0YXR1c190IHNldFBsYXliYWNrU2V0dGluZ3MoY29uc3QgQXVkaW9QbGF5YmFja1JhdGUgJnJhdGUpIG92ZXJyaWRlOworICAgIHZpcnR1YWwgc3RhdHVzX3QgZ2V0UGxheWJhY2tTZXR0aW5ncyhBdWRpb1BsYXliYWNrUmF0ZSAqcmF0ZSkgb3ZlcnJpZGU7CisgICAgdmlydHVhbCBzdGF0dXNfdCBzZXRTeW5jU2V0dGluZ3MoY29uc3QgQVZTeW5jU2V0dGluZ3MgJnN5bmMsIGZsb2F0IHZpZGVvRnBzSGludCkgb3ZlcnJpZGU7CisgICAgdmlydHVhbCBzdGF0dXNfdCBnZXRTeW5jU2V0dGluZ3MoQVZTeW5jU2V0dGluZ3MgKnN5bmMsIGZsb2F0ICp2aWRlb0Zwcykgb3ZlcnJpZGU7CiAgICAgdmlydHVhbCBzdGF0dXNfdCBzZWVrVG8oCi0gICAgICAgICAgICBpbnQ2NF90IG1zZWMsIE1lZGlhUGxheWVyMlNlZWtNb2RlIG1vZGUgPSBNZWRpYVBsYXllcjJTZWVrTW9kZTo6U0VFS19QUkVWSU9VU19TWU5DKTsKLSAgICB2aXJ0dWFsIHN0YXR1c190IGdldEN1cnJlbnRQb3NpdGlvbihpbnQ2NF90ICptc2VjKTsKLSAgICB2aXJ0dWFsIHN0YXR1c190IGdldER1cmF0aW9uKGludDY0X3QgKm1zZWMpOwotICAgIHZpcnR1YWwgc3RhdHVzX3QgcmVzZXQoKTsKKyAgICAgICAgICAgIGludDY0X3QgbXNlYywKKyAgICAgICAgICAgIE1lZGlhUGxheWVyMlNlZWtNb2RlIG1vZGUgPSBNZWRpYVBsYXllcjJTZWVrTW9kZTo6U0VFS19QUkVWSU9VU19TWU5DKSBvdmVycmlkZTsKKyAgICB2aXJ0dWFsIHN0YXR1c190IGdldEN1cnJlbnRQb3NpdGlvbihpbnQ2NF90ICptc2VjKSBvdmVycmlkZTsKKyAgICB2aXJ0dWFsIHN0YXR1c190IGdldER1cmF0aW9uKGludDY0X3QgKm1zZWMpIG92ZXJyaWRlOworICAgIHZpcnR1YWwgc3RhdHVzX3QgcmVzZXQoKSBvdmVycmlkZTsKICAgICB2aXJ0dWFsIHN0YXR1c190IG5vdGlmeUF0KGludDY0X3QgbWVkaWFUaW1lVXMpIG92ZXJyaWRlOwotICAgIHZpcnR1YWwgc3RhdHVzX3Qgc2V0TG9vcGluZyhpbnQgbG9vcCk7Ci0gICAgdmlydHVhbCBzdGF0dXNfdCBpbnZva2UoY29uc3QgUGFyY2VsICZyZXF1ZXN0LCBQYXJjZWwgKnJlcGx5KTsKLSAgICB2aXJ0dWFsIHZvaWQgc2V0QXVkaW9TaW5rKGNvbnN0IHNwPEF1ZGlvU2luaz4gJmF1ZGlvU2luayk7Ci0gICAgdmlydHVhbCBzdGF0dXNfdCBzZXRQYXJhbWV0ZXIoaW50IGtleSwgY29uc3QgUGFyY2VsICZyZXF1ZXN0KTsKLSAgICB2aXJ0dWFsIHN0YXR1c190IGdldFBhcmFtZXRlcihpbnQga2V5LCBQYXJjZWwgKnJlcGx5KTsKKyAgICB2aXJ0dWFsIHN0YXR1c190IHNldExvb3BpbmcoaW50IGxvb3ApIG92ZXJyaWRlOworICAgIHZpcnR1YWwgc3RhdHVzX3QgaW52b2tlKGNvbnN0IFBsYXllck1lc3NhZ2UgJnJlcXVlc3QsIFBsYXllck1lc3NhZ2UgKnJlc3BvbnNlKSBvdmVycmlkZTsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0QXVkaW9TaW5rKGNvbnN0IHNwPEF1ZGlvU2luaz4gJmF1ZGlvU2luaykgb3ZlcnJpZGU7CisgICAgdmlydHVhbCBzdGF0dXNfdCBzZXRQYXJhbWV0ZXIoaW50IGtleSwgY29uc3QgUGFyY2VsICZyZXF1ZXN0KSBvdmVycmlkZTsKKyAgICB2aXJ0dWFsIHN0YXR1c190IGdldFBhcmFtZXRlcihpbnQga2V5LCBQYXJjZWwgKnJlcGx5KSBvdmVycmlkZTsKIAogICAgIHZpcnR1YWwgc3RhdHVzX3QgZ2V0TWV0YWRhdGEoCi0gICAgICAgICAgICBjb25zdCBtZWRpYTo6TWV0YWRhdGE6OkZpbHRlciYgaWRzLCBQYXJjZWwgKnJlY29yZHMpOworICAgICAgICAgICAgY29uc3QgbWVkaWE6Ok1ldGFkYXRhOjpGaWx0ZXImIGlkcywgUGFyY2VsICpyZWNvcmRzKSBvdmVycmlkZTsKIAotICAgIHZpcnR1YWwgc3RhdHVzX3QgZHVtcChpbnQgZmQsIGNvbnN0IFZlY3RvcjxTdHJpbmcxNj4gJmFyZ3MpIGNvbnN0OworICAgIHZpcnR1YWwgc3RhdHVzX3QgZHVtcChpbnQgZmQsIGNvbnN0IFZlY3RvcjxTdHJpbmcxNj4gJmFyZ3MpIGNvbnN0IG92ZXJyaWRlOwogCiAgICAgdmlydHVhbCB2b2lkIG9uTWVzc2FnZVJlY2VpdmVkKGNvbnN0IHNwPEFNZXNzYWdlPiAmbXNnKSBvdmVycmlkZTsKIApAQCAtNzcsOSArNzcsOCBAQAogICAgIHZvaWQgbm90aWZ5TW9yZVJlYnVmZmVyaW5nVGltZVVzKGludDY0X3Qgc3JjSWQsIGludDY0X3QgdGltZVVzKTsKICAgICB2b2lkIG5vdGlmeVJlYnVmZmVyaW5nV2hlbkV4aXQoaW50NjRfdCBzcmNJZCwgYm9vbCBzdGF0dXMpOwogICAgIHZvaWQgbm90aWZ5U2Vla0NvbXBsZXRlKGludDY0X3Qgc3JjSWQpOwotICAgIHZvaWQgbm90aWZ5U2Vla0NvbXBsZXRlX2woaW50NjRfdCBzcmNJZCk7CiAgICAgdm9pZCBub3RpZnlMaXN0ZW5lcihpbnQ2NF90IHNyY0lkLCBpbnQgbXNnLCBpbnQgZXh0MSA9IDAsIGludCBleHQyID0gMCwKLSAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFBhcmNlbCAqaW4gPSBOVUxMKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFBsYXllck1lc3NhZ2UgKmluID0gTlVMTCk7CiAgICAgdm9pZCBub3RpZnlGbGFnc0NoYW5nZWQoaW50NjRfdCBzcmNJZCwgdWludDMyX3QgZmxhZ3MpOwogCiAgICAgLy8gTW9kdWxhciBEUk0KQEAgLTk5LDkgKzk4LDYgQEAKICAgICAgICAgU1RBVEVfUlVOTklORywKICAgICAgICAgU1RBVEVfUEFVU0VELAogICAgICAgICBTVEFURV9SRVNFVF9JTl9QUk9HUkVTUywKLSAgICAgICAgU1RBVEVfU1RPUFBFRCwgICAgICAgICAgICAgICAgICAvLyBlcXVpdmFsZW50IHRvIFBBVVNFRAotICAgICAgICBTVEFURV9TVE9QUEVEX0FORF9QUkVQQVJJTkcsICAgIC8vIGVxdWl2YWxlbnQgdG8gUEFVU0VELCBidXQgc2Vla2luZwotICAgICAgICBTVEFURV9TVE9QUEVEX0FORF9QUkVQQVJFRCwgICAgIC8vIGVxdWl2YWxlbnQgdG8gUEFVU0VELCBidXQgc2VlayBjb21wbGV0ZQogICAgIH07CiAKICAgICBzdGQ6OnN0cmluZyBzdGF0ZVN0cmluZyhTdGF0ZSBzdGF0ZSk7CkBAIC0xNDksNyArMTQ1LDcgQEAKIAogICAgIHN0YXR1c190IHN0YXJ0X2woKTsKICAgICB2b2lkIG5vdGlmeUxpc3RlbmVyX2woaW50NjRfdCBzcmNJZCwgaW50IG1zZywgaW50IGV4dDEgPSAwLCBpbnQgZXh0MiA9IDAsCi0gICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFBhcmNlbCAqaW4gPSBOVUxMKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgUGxheWVyTWVzc2FnZSAqaW4gPSBOVUxMKTsKIAogICAgIERJU0FMTE9XX0VWSUxfQ09OU1RSVUNUT1JTKE51UGxheWVyMkRyaXZlcik7CiB9OwpkaWZmIC0tZ2l0IGEvbWVkaWEvbGlibWVkaWFwbGF5ZXIyL251cGxheWVyMi9OdVBsYXllcjJEcm0uY3BwIGIvbWVkaWEvbGlibWVkaWFwbGF5ZXIyL251cGxheWVyMi9OdVBsYXllcjJEcm0uY3BwCmluZGV4IDBlMDk2YjAuLmY0MWE0MzEgMTAwNjQ0Ci0tLSBhL21lZGlhL2xpYm1lZGlhcGxheWVyMi9udXBsYXllcjIvTnVQbGF5ZXIyRHJtLmNwcAorKysgYi9tZWRpYS9saWJtZWRpYXBsYXllcjIvbnVwbGF5ZXIyL051UGxheWVyMkRybS5jcHAKQEAgLTEzMyw5ICsxMzMsOCBAQAogICAgIHJldHVybiBkcm1JbmZvQnVmZmVyOwogfQogCi1zcDxBQnVmZmVyPiBOdVBsYXllcjJEcm06OnJldHJpZXZlRHJtSW5mbyhQc3NoSW5mbyAqcHNzaEluZm8pCitzdGF0dXNfdCBOdVBsYXllcjJEcm06OnJldHJpZXZlRHJtSW5mbyhQc3NoSW5mbyAqcHNzaEluZm8sIFBsYXllck1lc3NhZ2UgKnBsYXllck1zZykKIHsKLQogICAgIHN0ZDo6b3N0cmluZ3N0cmVhbSBwc3NoLCBkcm1JbmZvOwogCiAgICAgLy8gMCkgR2VuZXJhdGUgUFNTSCBieXRlcwpAQCAtMTU0LDIyICsxNTMsMjAgQEAKICAgICAgICAgICAgIERybVVVSUQ6OmFycmF5VG9IZXgocHNzaFB0ciwgcHNzaFNpemUpLnN0cmluZygpKTsKIAogICAgIC8vIDEpIFdyaXRlIFBTU0ggYnl0ZXMKLSAgICBkcm1JbmZvLndyaXRlKHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgY2hhciAqPigmcHNzaFNpemUpLCBzaXplb2YocHNzaFNpemUpKTsKLSAgICBkcm1JbmZvLndyaXRlKHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgY2hhciAqPihwc3NoLnN0cigpLmNfc3RyKCkpLCBwc3NoU2l6ZSk7CisgICAgcGxheWVyTXNnLT5hZGRfdmFsdWVzKCktPnNldF9ieXRlc192YWx1ZSgKKyAgICAgICAgICAgIHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgY2hhciAqPihwc3NoLnN0cigpLmNfc3RyKCkpLCBwc3NoU2l6ZSk7CiAKICAgICAvLyAyKSBXcml0ZSBzdXBwb3J0ZWREUk1zCiAgICAgdWludDMyX3QgbnVtZW50cmllcyA9IHBzc2hJbmZvLT5udW1lbnRyaWVzOwotICAgIGRybUluZm8ud3JpdGUocmVpbnRlcnByZXRfY2FzdDxjb25zdCBjaGFyICo+KCZudW1lbnRyaWVzKSwgc2l6ZW9mKG51bWVudHJpZXMpKTsKKyAgICBwbGF5ZXJNc2ctPmFkZF92YWx1ZXMoKS0+c2V0X2ludDMyX3ZhbHVlKG51bWVudHJpZXMpOwogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbnVtZW50cmllczsgaSsrKSB7CiAgICAgICAgIFBzc2hFbnRyeSAqZW50cnkgPSAmcHNzaEluZm8tPmVudHJpZXNbaV07Ci0gICAgICAgIGRybUluZm8ud3JpdGUocmVpbnRlcnByZXRfY2FzdDxjb25zdCBjaGFyICo+KCZlbnRyeS0+dXVpZCksIHNpemVvZihlbnRyeS0+dXVpZCkpOworICAgICAgICBwbGF5ZXJNc2ctPmFkZF92YWx1ZXMoKS0+c2V0X2J5dGVzX3ZhbHVlKAorICAgICAgICAgICAgICAgIHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgY2hhciAqPigmZW50cnktPnV1aWQpLCBzaXplb2YoZW50cnktPnV1aWQpKTsKICAgICAgICAgQUxPR1YoInJldHJpZXZlRHJtSW5mbzogTUVESUFfRFJNX0lORk8gIHN1cHBvcnRlZFNjaGVtZVslenVdICVzIiwgaSwKICAgICAgICAgICAgICAgICBEcm1VVUlEOjphcnJheVRvSGV4KChjb25zdCB1aW50OF90KikmZW50cnktPnV1aWQsIHNpemVvZihBTWVkaWFVVUlEKSkuc3RyaW5nKCkpOwogICAgIH0KLQotICAgIHNwPEFCdWZmZXI+IGRybUluZm9CdWYgPSBBQnVmZmVyOjpDcmVhdGVBc0NvcHkoZHJtSW5mby5zdHIoKS5jX3N0cigpLCBkcm1JbmZvLnRlbGxwKCkpOwotICAgIGRybUluZm9CdWYtPnNldFJhbmdlKDAsIGRybUluZm8udGVsbHAoKSk7Ci0gICAgcmV0dXJuIGRybUluZm9CdWY7CisgICAgcmV0dXJuIE9LOwogfQogCiB9ICAgLy8gbmFtZXNwYWNlIGFuZHJvaWQKZGlmZiAtLWdpdCBhL21lZGlhL2xpYm1lZGlhcGxheWVyMi9udXBsYXllcjIvTnVQbGF5ZXIyRHJtLmggYi9tZWRpYS9saWJtZWRpYXBsYXllcjIvbnVwbGF5ZXIyL051UGxheWVyMkRybS5oCmluZGV4IDk5ZDI0MTUuLjk2OGQxYmUgMTAwNjQ0Ci0tLSBhL21lZGlhL2xpYm1lZGlhcGxheWVyMi9udXBsYXllcjIvTnVQbGF5ZXIyRHJtLmgKKysrIGIvbWVkaWEvbGlibWVkaWFwbGF5ZXIyL251cGxheWVyMi9OdVBsYXllcjJEcm0uaApAQCAtMjMsNiArMjMsMTAgQEAKICNpbmNsdWRlIDx1dGlscy9TdHJpbmc4Lmg+CiAjaW5jbHVkZSA8dXRpbHMvVmVjdG9yLmg+CiAKKyNpbmNsdWRlICJtZWRpYXBsYXllcjIucGIuaCIKKwordXNpbmcgYW5kcm9pZDo6bWVkaWE6Ok1lZGlhUGxheWVyMlByb3RvOjpQbGF5ZXJNZXNzYWdlOworCiBuYW1lc3BhY2UgYW5kcm9pZCB7CiAKICAgICBzdHJ1Y3QgRHJtVVVJRCB7CkBAIC04MCw3ICs4NCw3IEBACiAKICAgICBwdWJsaWM6CiAgICAgICAgIHN0YXRpYyBzcDxBQnVmZmVyPiByZXRyaWV2ZURybUluZm8oY29uc3Qgdm9pZCAqcHNzaCwgdWludDMyX3QgcHNzaHNpemUpOwotICAgICAgICBzdGF0aWMgc3A8QUJ1ZmZlcj4gcmV0cmlldmVEcm1JbmZvKFBzc2hJbmZvICopOworICAgICAgICBzdGF0aWMgc3RhdHVzX3QgcmV0cmlldmVEcm1JbmZvKFBzc2hJbmZvICosIFBsYXllck1lc3NhZ2UgKik7CiAKICAgICB9OyAgLy8gTnVQbGF5ZXIyRHJtCiAKZGlmZiAtLWdpdCBhL21lZGlhL2xpYm1lZGlhcGxheWVyMi9udXBsYXllcjIvTnVQbGF5ZXIyUmVuZGVyZXIuY3BwIGIvbWVkaWEvbGlibWVkaWFwbGF5ZXIyL251cGxheWVyMi9OdVBsYXllcjJSZW5kZXJlci5jcHAKaW5kZXggYTBiZDkwMC4uZDgwMDQxMiAxMDA2NDQKLS0tIGEvbWVkaWEvbGlibWVkaWFwbGF5ZXIyL251cGxheWVyMi9OdVBsYXllcjJSZW5kZXJlci5jcHAKKysrIGIvbWVkaWEvbGlibWVkaWFwbGF5ZXIyL251cGxheWVyMi9OdVBsYXllcjJSZW5kZXJlci5jcHAKQEAgLTExNSw3ICsxMTUsNyBAQAogICAgICAgbU5vdGlmeUNvbXBsZXRlQXVkaW8oZmFsc2UpLAogICAgICAgbU5vdGlmeUNvbXBsZXRlVmlkZW8oZmFsc2UpLAogICAgICAgbVN5bmNRdWV1ZXMoZmFsc2UpLAotICAgICAgbVBhdXNlZChmYWxzZSksCisgICAgICBtUGF1c2VkKHRydWUpLAogICAgICAgbVBhdXNlRHJhaW5BdWRpb0FsbG93ZWRVcygwKSwKICAgICAgIG1WaWRlb1NhbXBsZVJlY2VpdmVkKGZhbHNlKSwKICAgICAgIG1WaWRlb1JlbmRlcmluZ1N0YXJ0ZWQoZmFsc2UpLApAQCAtMTMzLDggKzEzMyw3IEBACiAgICAgICBtVXNlQXVkaW9DYWxsYmFjayhmYWxzZSksCiAgICAgICBtV2FrZUxvY2sobmV3IEpXYWtlTG9jaygpKSB7CiAgICAgQ0hFQ0sobWVkaWFDbG9jayAhPSBOVUxMKTsKLSAgICBtUGxheWJhY2tSYXRlID0gbVBsYXliYWNrU2V0dGluZ3MubVNwZWVkOwotICAgIG1NZWRpYUNsb2NrLT5zZXRQbGF5YmFja1JhdGUobVBsYXliYWNrUmF0ZSk7CisgICAgbU1lZGlhQ2xvY2stPnNldFBsYXliYWNrUmF0ZShtUGxheWJhY2tTZXR0aW5ncy5tU3BlZWQpOwogfQogCiBOdVBsYXllcjI6OlJlbmRlcmVyOjp+UmVuZGVyZXIoKSB7CkBAIC0xOTAsMjYgKzE4OSwyMCBAQAogfQogCiBzdGF0dXNfdCBOdVBsYXllcjI6OlJlbmRlcmVyOjpvbkNvbmZpZ1BsYXliYWNrKGNvbnN0IEF1ZGlvUGxheWJhY2tSYXRlICZyYXRlIC8qIHNhbml0aXplZCAqLykgewotICAgIGlmIChyYXRlLm1TcGVlZCA9PSAwLmYpIHsKLSAgICAgICAgb25QYXVzZSgpOwotICAgICAgICAvLyBkb24ndCBjYWxsIGF1ZGlvc2luaydzIHNldFBsYXliYWNrUmF0ZSBpZiBwYXVzaW5nLCBhcyBwaXRjaCBkb2VzIG5vdAotICAgICAgICAvLyBoYXZlIHRvIGNvcnJlc3BvbmQgdG8gdGhlIGFueSBub24tMCBzcGVlZCAoZS5nIG9sZCBzcGVlZCkuIEtlZXAKLSAgICAgICAgLy8gc2V0dGluZ3Mgbm9uZXRoZWxlc3MsIHVzaW5nIHRoZSBvbGQgc3BlZWQsIGluIGNhc2UgYXVkaW9zaW5rIGNoYW5nZXMuCi0gICAgICAgIEF1ZGlvUGxheWJhY2tSYXRlIG5ld1JhdGUgPSByYXRlOwotICAgICAgICBuZXdSYXRlLm1TcGVlZCA9IG1QbGF5YmFja1NldHRpbmdzLm1TcGVlZDsKLSAgICAgICAgbVBsYXliYWNrU2V0dGluZ3MgPSBuZXdSYXRlOwotICAgICAgICByZXR1cm4gT0s7CisgICAgaWYgKHJhdGUubVNwZWVkIDw9IDAuZikgeworICAgICAgICBBTE9HVygicGxheWJhY2sgcmF0ZSBjYW5ub3QgYmUgJWYiLCByYXRlLm1TcGVlZCk7CisgICAgICAgIHJldHVybiBCQURfVkFMVUU7CiAgICAgfQogCiAgICAgaWYgKG1BdWRpb1NpbmsgIT0gTlVMTCAmJiBtQXVkaW9TaW5rLT5yZWFkeSgpKSB7CiAgICAgICAgIHN0YXR1c190IGVyciA9IG1BdWRpb1NpbmstPnNldFBsYXliYWNrUmF0ZShyYXRlKTsKICAgICAgICAgaWYgKGVyciAhPSBPSykgeworICAgICAgICAgICAgQUxPR1coImZhaWxlZCB0byBnZXQgcGxheWJhY2sgcmF0ZSBmcm9tIGF1ZGlvIHNpbmssIGVyciglZCkiLCBlcnIpOwogICAgICAgICAgICAgcmV0dXJuIGVycjsKICAgICAgICAgfQogICAgIH0KICAgICBtUGxheWJhY2tTZXR0aW5ncyA9IHJhdGU7Ci0gICAgbVBsYXliYWNrUmF0ZSA9IHJhdGUubVNwZWVkOwotICAgIG1NZWRpYUNsb2NrLT5zZXRQbGF5YmFja1JhdGUobVBsYXliYWNrUmF0ZSk7CisgICAgbU1lZGlhQ2xvY2stPnNldFBsYXliYWNrUmF0ZShtUGxheWJhY2tTZXR0aW5ncy5tU3BlZWQpOwogICAgIHJldHVybiBPSzsKIH0KIApAQCAtMjMxLDE0ICsyMjQsMTIgQEAKICAgICAgICAgc3RhdHVzX3QgZXJyID0gbUF1ZGlvU2luay0+Z2V0UGxheWJhY2tSYXRlKHJhdGUpOwogICAgICAgICBpZiAoZXJyID09IE9LKSB7CiAgICAgICAgICAgICBpZiAoIWlzQXVkaW9QbGF5YmFja1JhdGVFcXVhbCgqcmF0ZSwgbVBsYXliYWNrU2V0dGluZ3MpKSB7Ci0gICAgICAgICAgICAgICAgQUxPR1coImNvcnJlY3RpbmcgbWlzbWF0Y2ggaW4gaW50ZXJuYWwvZXh0ZXJuYWwgcGxheWJhY2sgcmF0ZSIpOworICAgICAgICAgICAgICAgIEFMT0dXKCJjb3JyZWN0aW5nIG1pc21hdGNoIGluIGludGVybmFsL2V4dGVybmFsIHBsYXliYWNrIHJhdGUsICVmIHZzICVmIiwKKyAgICAgICAgICAgICAgICAgICAgICByYXRlLT5tU3BlZWQsIG1QbGF5YmFja1NldHRpbmdzLm1TcGVlZCk7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICAvLyBnZXQgcGxheWJhY2sgc2V0dGluZ3MgdXNlZCBieSBhdWRpb3NpbmssIGFzIGl0IG1heSBiZQogICAgICAgICAgICAgLy8gc2xpZ2h0bHkgb2ZmIGR1ZSB0byBhdWRpb3Npbmsgbm90IHRha2luZyBzbWFsbCBjaGFuZ2VzLgogICAgICAgICAgICAgbVBsYXliYWNrU2V0dGluZ3MgPSAqcmF0ZTsKLSAgICAgICAgICAgIGlmIChtUGF1c2VkKSB7Ci0gICAgICAgICAgICAgICAgcmF0ZS0+bVNwZWVkID0gMC5mOwotICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgICAgIHJldHVybiBlcnI7CiAgICAgfQpAQCAtNTYwLDggKzU1MSw4IEBACiAgICAgICAgICAgICAgICAgaW50NjRfdCBkZWxheVVzID0KICAgICAgICAgICAgICAgICAgICAgbUF1ZGlvU2luay0+bXNlY3NQZXJGcmFtZSgpCiAgICAgICAgICAgICAgICAgICAgICAgICAqIG51bUZyYW1lc1BlbmRpbmdQbGF5b3V0ICogMTAwMGxsOwotICAgICAgICAgICAgICAgIGlmIChtUGxheWJhY2tSYXRlID4gMS4wZikgewotICAgICAgICAgICAgICAgICAgICBkZWxheVVzIC89IG1QbGF5YmFja1JhdGU7CisgICAgICAgICAgICAgICAgaWYgKG1QbGF5YmFja1NldHRpbmdzLm1TcGVlZCA+IDEuMGYpIHsKKyAgICAgICAgICAgICAgICAgICAgZGVsYXlVcyAvPSBtUGxheWJhY2tTZXR0aW5ncy5tU3BlZWQ7CiAgICAgICAgICAgICAgICAgfQogCiAgICAgICAgICAgICAgICAgLy8gTGV0J3MgZ2l2ZSBpdCBtb3JlIGRhdGEgYWZ0ZXIgYWJvdXQgaGFsZiB0aGF0IHRpbWUKQEAgLTE1NzMsNiArMTU2NCw3IEBACiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICBub3RpZnlDb21wbGV0ZSA9IG1Ob3RpZnlDb21wbGV0ZVZpZGVvOwogICAgICAgICAgICAgbU5vdGlmeUNvbXBsZXRlVmlkZW8gPSBmYWxzZTsKKyAgICAgICAgICAgIG1WaWRlb1JlbmRlcmluZ1N0YXJ0ZWQgPSBmYWxzZTsKICAgICAgICAgfQogCiAgICAgICAgIC8vIElmIHdlJ3JlIGN1cnJlbnRseSBzeW5jaW5nIHRoZSBxdWV1ZXMsIGkuZS4gZHJvcHBpbmcgYXVkaW8gd2hpbGUKQEAgLTE3NzMsNyArMTc2NSw3IEBACiAgICAgICAgICAgICBtQXVkaW9TaW5rLT5zZXRQbGF5YmFja1JhdGUobVBsYXliYWNrU2V0dGluZ3MpOwogICAgICAgICB9CiAKLSAgICAgICAgbU1lZGlhQ2xvY2stPnNldFBsYXliYWNrUmF0ZShtUGxheWJhY2tSYXRlKTsKKyAgICAgICAgbU1lZGlhQ2xvY2stPnNldFBsYXliYWNrUmF0ZShtUGxheWJhY2tTZXR0aW5ncy5tU3BlZWQpOwogCiAgICAgICAgIGlmICghbUF1ZGlvUXVldWUuZW1wdHkoKSkgewogICAgICAgICAgICAgcG9zdERyYWluQXVkaW9RdWV1ZV9sKCk7CkBAIC0xODU3LDYgKzE4NDksNyBAQAogICAgICAgICBib29sIGlzU3RyZWFtaW5nKSB7CiAgICAgQUxPR1YoIm9wZW5BdWRpb1Npbms6IG9mZmxvYWRPbmx5KCVkKSBvZmZsb2FkaW5nQXVkaW8oJWQpIiwKICAgICAgICAgICAgIG9mZmxvYWRPbmx5LCBvZmZsb2FkaW5nQXVkaW8oKSk7CisKICAgICBib29sIGF1ZGlvU2lua0NoYW5nZWQgPSBmYWxzZTsKIAogICAgIGludDMyX3QgbnVtQ2hhbm5lbHM7CkBAIC0xOTI4LDcgKzE5MjEsNiBAQAogICAgICAgICAgICAgICAgICAgICBudW1DaGFubmVscywKICAgICAgICAgICAgICAgICAgICAgKGF1ZGlvX2NoYW5uZWxfbWFza190KWNoYW5uZWxNYXNrLAogICAgICAgICAgICAgICAgICAgICBhdWRpb0Zvcm1hdCwKLSAgICAgICAgICAgICAgICAgICAgMCAvKiBidWZmZXJDb3VudCAtIHVudXNlZCAqLywKICAgICAgICAgICAgICAgICAgICAgJk51UGxheWVyMjo6UmVuZGVyZXI6OkF1ZGlvU2lua0NhbGxiYWNrLAogICAgICAgICAgICAgICAgICAgICB0aGlzLAogICAgICAgICAgICAgICAgICAgICAoYXVkaW9fb3V0cHV0X2ZsYWdzX3Qpb2ZmbG9hZEZsYWdzLApAQCAtMTk5OSwxMyArMTk5MSw2IEBACiAgICAgICAgIGNvbnN0IHVpbnQzMl90IGZyYW1lQ291bnQgPQogICAgICAgICAgICAgICAgICh1bnNpZ25lZCBsb25nIGxvbmcpc2FtcGxlUmF0ZSAqIGdldEF1ZGlvU2lua1BjbU1zU2V0dGluZygpIC8gMTAwMDsKIAotICAgICAgICAvLyBUaGUgZG9Ob3RSZWNvbm5lY3QgbWVhbnMgQXVkaW9TaW5rIHdpbGwgc2lnbmFsIGJhY2sgYW5kIGxldCBOdVBsYXllcjIgdG8gcmUtY29uc3RydWN0Ci0gICAgICAgIC8vIEF1ZGlvU2luay4gV2UgZG9uJ3Qgd2FudCB0aGlzIHdoZW4gdGhlcmUncyB2aWRlbyBiZWNhdXNlIGl0IHdpbGwgY2F1c2UgYSB2aWRlbyBzZWVrIHRvCi0gICAgICAgIC8vIHRoZSBwcmV2aW91cyBJIGZyYW1lLiBCdXQgd2UgZG8gd2FudCB0aGlzIHdoZW4gdGhlcmUncyBvbmx5IGF1ZGlvIGJlY2F1c2UgaXQgd2lsbCBnaXZlCi0gICAgICAgIC8vIE51UGxheWVyMiBhIGNoYW5jZSB0byBzd2l0Y2ggZnJvbSBub24tb2ZmbG9hZCBtb2RlIHRvIG9mZmxvYWQgbW9kZS4KLSAgICAgICAgLy8gU28gd2Ugb25seSBzZXQgZG9Ob3RSZWNvbm5lY3Qgd2hlbiB0aGVyZSdzIG5vIHZpZGVvLgotICAgICAgICBjb25zdCBib29sIGRvTm90UmVjb25uZWN0ID0gIWhhc1ZpZGVvOwotCiAgICAgICAgIC8vIFdlIHNob3VsZCBhbHdheXMgYmUgYWJsZSB0byBzZXQgb3VyIHBsYXliYWNrIHNldHRpbmdzIGlmIHRoZSBzaW5rIGlzIGNsb3NlZC4KICAgICAgICAgTE9HX0FMV0FZU19GQVRBTF9JRihtQXVkaW9TaW5rLT5zZXRQbGF5YmFja1JhdGUobVBsYXliYWNrU2V0dGluZ3MpICE9IE9LLAogICAgICAgICAgICAgICAgICJvbk9wZW5BdWRpb1Npbms6IGNhbid0IHNldCBwbGF5YmFjayByYXRlIG9uIGNsb3NlZCBzaW5rIik7CkBAIC0yMDE0LDEyICsxOTk5LDEwIEBACiAgICAgICAgICAgICAgICAgICAgIG51bUNoYW5uZWxzLAogICAgICAgICAgICAgICAgICAgICAoYXVkaW9fY2hhbm5lbF9tYXNrX3QpY2hhbm5lbE1hc2ssCiAgICAgICAgICAgICAgICAgICAgIEFVRElPX0ZPUk1BVF9QQ01fMTZfQklULAotICAgICAgICAgICAgICAgICAgICAwIC8qIGJ1ZmZlckNvdW50IC0gdW51c2VkICovLAogICAgICAgICAgICAgICAgICAgICBtVXNlQXVkaW9DYWxsYmFjayA/ICZOdVBsYXllcjI6OlJlbmRlcmVyOjpBdWRpb1NpbmtDYWxsYmFjayA6IE5VTEwsCiAgICAgICAgICAgICAgICAgICAgIG1Vc2VBdWRpb0NhbGxiYWNrID8gdGhpcyA6IE5VTEwsCiAgICAgICAgICAgICAgICAgICAgIChhdWRpb19vdXRwdXRfZmxhZ3NfdClwY21GbGFncywKICAgICAgICAgICAgICAgICAgICAgTlVMTCwKLSAgICAgICAgICAgICAgICAgICAgZG9Ob3RSZWNvbm5lY3QsCiAgICAgICAgICAgICAgICAgICAgIGZyYW1lQ291bnQpOwogICAgICAgICBpZiAoZXJyICE9IE9LKSB7CiAgICAgICAgICAgICBBTE9HVygib3BlbkF1ZGlvU2luazogbm9uIG9mZmxvYWRlZCBvcGVuIGZhaWxlZCBzdGF0dXM6ICVkIiwgZXJyKTsKZGlmZiAtLWdpdCBhL21lZGlhL2xpYm1lZGlhcGxheWVyMi9udXBsYXllcjIvTnVQbGF5ZXIyUmVuZGVyZXIuaCBiL21lZGlhL2xpYm1lZGlhcGxheWVyMi9udXBsYXllcjIvTnVQbGF5ZXIyUmVuZGVyZXIuaAppbmRleCA2MmNmMGQ4Li4zMDVhZjY4IDEwMDY0NAotLS0gYS9tZWRpYS9saWJtZWRpYXBsYXllcjIvbnVwbGF5ZXIyL051UGxheWVyMlJlbmRlcmVyLmgKKysrIGIvbWVkaWEvbGlibWVkaWFwbGF5ZXIyL251cGxheWVyMi9OdVBsYXllcjJSZW5kZXJlci5oCkBAIC0xNjcsNyArMTY3LDYgQEAKICAgICBpbnQzMl90IG1BdWRpb0VPU0dlbmVyYXRpb247CiAKICAgICBjb25zdCBzcDxNZWRpYUNsb2NrPiBtTWVkaWFDbG9jazsKLSAgICBmbG9hdCBtUGxheWJhY2tSYXRlOyAvLyBhdWRpbyB0cmFjayByYXRlCiAKICAgICBBdWRpb1BsYXliYWNrUmF0ZSBtUGxheWJhY2tTZXR0aW5nczsKICAgICBBVlN5bmNTZXR0aW5ncyBtU3luY1NldHRpbmdzOwpkaWZmIC0tZ2l0IGEvbWVkaWEvbGlibWVkaWFwbGF5ZXIyL251cGxheWVyMi9OdVBsYXllcjJTb3VyY2UuaCBiL21lZGlhL2xpYm1lZGlhcGxheWVyMi9udXBsYXllcjIvTnVQbGF5ZXIyU291cmNlLmgKaW5kZXggNjYyMjM1Zi4uOTI5OGE5OSAxMDA2NDQKLS0tIGEvbWVkaWEvbGlibWVkaWFwbGF5ZXIyL251cGxheWVyMi9OdVBsYXllcjJTb3VyY2UuaAorKysgYi9tZWRpYS9saWJtZWRpYXBsYXllcjIvbnVwbGF5ZXIyL051UGxheWVyMlNvdXJjZS5oCkBAIC02OSw3ICs2OSw3IEBACiAgICAgICAgICAgICBCdWZmZXJpbmdTZXR0aW5ncyogYnVmZmVyaW5nIC8qIG5vbm51bGwgKi8pID0gMDsKICAgICB2aXJ0dWFsIHN0YXR1c190IHNldEJ1ZmZlcmluZ1NldHRpbmdzKGNvbnN0IEJ1ZmZlcmluZ1NldHRpbmdzJiBidWZmZXJpbmcpID0gMDsKIAotICAgIHZpcnR1YWwgdm9pZCBwcmVwYXJlQXN5bmMoKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIHByZXBhcmVBc3luYyhpbnQ2NF90IHN0YXJ0VGltZVVzKSA9IDA7CiAKICAgICB2aXJ0dWFsIHZvaWQgc3RhcnQoKSA9IDA7CiAgICAgdmlydHVhbCB2b2lkIHN0b3AoKSB7fQpkaWZmIC0tZ2l0IGEvbWVkaWEvbGlibWVkaWFwbGF5ZXIyL251cGxheWVyMi9SVFNQU291cmNlMi5jcHAgYi9tZWRpYS9saWJtZWRpYXBsYXllcjIvbnVwbGF5ZXIyL1JUU1BTb3VyY2UyLmNwcAppbmRleCAxZGZlMzgzLi41M2M2NmMwIDEwMDY0NAotLS0gYS9tZWRpYS9saWJtZWRpYXBsYXllcjIvbnVwbGF5ZXIyL1JUU1BTb3VyY2UyLmNwcAorKysgYi9tZWRpYS9saWJtZWRpYXBsYXllcjIvbnVwbGF5ZXIyL1JUU1BTb3VyY2UyLmNwcApAQCAtOTYsNyArOTYsOCBAQAogICAgIHJldHVybiBPSzsKIH0KIAotdm9pZCBOdVBsYXllcjI6OlJUU1BTb3VyY2UyOjpwcmVwYXJlQXN5bmMoKSB7CisvLyBUT0RPOiBmZXRjaCBkYXRhIHN0YXJ0aW5nIGZyb20gfHN0YXJ0VGltZVVzfAordm9pZCBOdVBsYXllcjI6OlJUU1BTb3VyY2UyOjpwcmVwYXJlQXN5bmMoaW50NjRfdCAvKiBzdGFydFRpbWVVcyAqLykgewogICAgIGlmIChtSXNTRFAgJiYgbUhUVFBTZXJ2aWNlID09IE5VTEwpIHsKICAgICAgICAgbm90aWZ5UHJlcGFyZWQoQkFEX1ZBTFVFKTsKICAgICAgICAgcmV0dXJuOwpkaWZmIC0tZ2l0IGEvbWVkaWEvbGlibWVkaWFwbGF5ZXIyL251cGxheWVyMi9SVFNQU291cmNlMi5oIGIvbWVkaWEvbGlibWVkaWFwbGF5ZXIyL251cGxheWVyMi9SVFNQU291cmNlMi5oCmluZGV4IDcxMmMzZTUuLmU1ZjE3MTYgMTAwNjQ0Ci0tLSBhL21lZGlhL2xpYm1lZGlhcGxheWVyMi9udXBsYXllcjIvUlRTUFNvdXJjZTIuaAorKysgYi9tZWRpYS9saWJtZWRpYXBsYXllcjIvbnVwbGF5ZXIyL1JUU1BTb3VyY2UyLmgKQEAgLTQzLDcgKzQzLDcgQEAKICAgICAgICAgICAgIEJ1ZmZlcmluZ1NldHRpbmdzKiBidWZmZXJpbmcgLyogbm9ubnVsbCAqLykgb3ZlcnJpZGU7CiAgICAgdmlydHVhbCBzdGF0dXNfdCBzZXRCdWZmZXJpbmdTZXR0aW5ncyhjb25zdCBCdWZmZXJpbmdTZXR0aW5ncyYgYnVmZmVyaW5nKSBvdmVycmlkZTsKIAotICAgIHZpcnR1YWwgdm9pZCBwcmVwYXJlQXN5bmMoKTsKKyAgICB2aXJ0dWFsIHZvaWQgcHJlcGFyZUFzeW5jKGludDY0X3Qgc3RhcnRUaW1lVXMpOwogICAgIHZpcnR1YWwgdm9pZCBzdGFydCgpOwogICAgIHZpcnR1YWwgdm9pZCBzdG9wKCk7CiAKZGlmZiAtLWdpdCBhL21lZGlhL2xpYm1lZGlhcGxheWVyc2VydmljZS9BbmRyb2lkLmJwIGIvbWVkaWEvbGlibWVkaWFwbGF5ZXJzZXJ2aWNlL0FuZHJvaWQuYnAKaW5kZXggYTM3OTczYi4uMDliMTlkNyAxMDA2NDQKLS0tIGEvbWVkaWEvbGlibWVkaWFwbGF5ZXJzZXJ2aWNlL0FuZHJvaWQuYnAKKysrIGIvbWVkaWEvbGlibWVkaWFwbGF5ZXJzZXJ2aWNlL0FuZHJvaWQuYnAKQEAgLTI5LDYgKzI5LDcgQEAKICAgICAgICAgImxpYm1lZGlhbWV0cmljcyIsCiAgICAgICAgICJsaWJtZWRpYXV0aWxzIiwKICAgICAgICAgImxpYm1lbXVucmVhY2hhYmxlIiwKKyAgICAgICAgImxpYm5ldGRfY2xpZW50IiwKICAgICAgICAgImxpYnBvd2VybWFuYWdlciIsCiAgICAgICAgICJsaWJzdGFnZWZyaWdodCIsCiAgICAgICAgICJsaWJzdGFnZWZyaWdodF9mb3VuZGF0aW9uIiwKZGlmZiAtLWdpdCBhL21lZGlhL2xpYm1lZGlhcGxheWVyc2VydmljZS9udXBsYXllci9HZW5lcmljU291cmNlLmNwcCBiL21lZGlhL2xpYm1lZGlhcGxheWVyc2VydmljZS9udXBsYXllci9HZW5lcmljU291cmNlLmNwcAppbmRleCAyM2Q2NmJiLi5mM2I2OWQ2IDEwMDY0NAotLS0gYS9tZWRpYS9saWJtZWRpYXBsYXllcnNlcnZpY2UvbnVwbGF5ZXIvR2VuZXJpY1NvdXJjZS5jcHAKKysrIGIvbWVkaWEvbGlibWVkaWFwbGF5ZXJzZXJ2aWNlL251cGxheWVyL0dlbmVyaWNTb3VyY2UuY3BwCkBAIC0yNSw3ICsyNSw2IEBACiAjaW5jbHVkZSA8Y3V0aWxzL3Byb3BlcnRpZXMuaD4KICNpbmNsdWRlIDxtZWRpYS9EYXRhU291cmNlLmg+CiAjaW5jbHVkZSA8bWVkaWEvTWVkaWFCdWZmZXJIb2xkZXIuaD4KLSNpbmNsdWRlIDxtZWRpYS9NZWRpYUV4dHJhY3Rvci5oPgogI2luY2x1ZGUgPG1lZGlhL01lZGlhU291cmNlLmg+CiAjaW5jbHVkZSA8bWVkaWEvSU1lZGlhRXh0cmFjdG9yU2VydmljZS5oPgogI2luY2x1ZGUgPG1lZGlhL0lNZWRpYUhUVFBTZXJ2aWNlLmg+CkBAIC0zOCw2ICszNyw3IEBACiAjaW5jbHVkZSA8bWVkaWEvc3RhZ2VmcmlnaHQvTWVkaWFCdWZmZXIuaD4KICNpbmNsdWRlIDxtZWRpYS9zdGFnZWZyaWdodC9NZWRpYUNsb2NrLmg+CiAjaW5jbHVkZSA8bWVkaWEvc3RhZ2VmcmlnaHQvTWVkaWFEZWZzLmg+CisjaW5jbHVkZSA8bWVkaWEvc3RhZ2VmcmlnaHQvTWVkaWFFeHRyYWN0b3IuaD4KICNpbmNsdWRlIDxtZWRpYS9zdGFnZWZyaWdodC9NZWRpYUV4dHJhY3RvckZhY3RvcnkuaD4KICNpbmNsdWRlIDxtZWRpYS9zdGFnZWZyaWdodC9NZXRhRGF0YS5oPgogI2luY2x1ZGUgPG1lZGlhL3N0YWdlZnJpZ2h0L1V0aWxzLmg+CkBAIC0xNTQ3LDYgKzE1NDcsMTYgQEAKICAgICAgICAgICAgIG5vdGlmeUJ1ZmZlcmluZ1VwZGF0ZSgxMDApOwogICAgICAgICB9CiAKKyAgICAgICAgaWYgKG1QcmVwYXJpbmcpIHsKKyAgICAgICAgICAgIG5vdGlmeVByZXBhcmVkQW5kQ2xlYW51cChmaW5hbFN0YXR1cyk7CisgICAgICAgICAgICBtUHJlcGFyaW5nID0gZmFsc2U7CisgICAgICAgIH0gZWxzZSBpZiAobVNlbnRQYXVzZU9uQnVmZmVyaW5nKSB7CisgICAgICAgICAgICBzZW5kQ2FjaGVTdGF0cygpOworICAgICAgICAgICAgbVNlbnRQYXVzZU9uQnVmZmVyaW5nID0gZmFsc2U7CisgICAgICAgICAgICBzcDxBTWVzc2FnZT4gbm90aWZ5ID0gZHVwTm90aWZ5KCk7CisgICAgICAgICAgICBub3RpZnktPnNldEludDMyKCJ3aGF0Iiwga1doYXRSZXN1bWVPbkJ1ZmZlcmluZ0VuZCk7CisgICAgICAgICAgICBub3RpZnktPnBvc3QoKTsKKyAgICAgICAgfQogICAgICAgICByZXR1cm47CiAgICAgfQogCmRpZmYgLS1naXQgYS9tZWRpYS9saWJtZWRpYXBsYXllcnNlcnZpY2UvbnVwbGF5ZXIvTnVQbGF5ZXJEZWNvZGVyLmNwcCBiL21lZGlhL2xpYm1lZGlhcGxheWVyc2VydmljZS9udXBsYXllci9OdVBsYXllckRlY29kZXIuY3BwCmluZGV4IDY5Y2Q4MmUuLmEyZWM2OTkgMTAwNjQ0Ci0tLSBhL21lZGlhL2xpYm1lZGlhcGxheWVyc2VydmljZS9udXBsYXllci9OdVBsYXllckRlY29kZXIuY3BwCisrKyBiL21lZGlhL2xpYm1lZGlhcGxheWVyc2VydmljZS9udXBsYXllci9OdVBsYXllckRlY29kZXIuY3BwCkBAIC0xMTAsNiArMTEwLDcgQEAKICAgICBtU3RhdHMtPnNldEludDY0KCJmcmFtZXMtdG90YWwiLCBtTnVtRnJhbWVzVG90YWwpOwogICAgIG1TdGF0cy0+c2V0SW50NjQoImZyYW1lcy1kcm9wcGVkLWlucHV0IiwgbU51bUlucHV0RnJhbWVzRHJvcHBlZCk7CiAgICAgbVN0YXRzLT5zZXRJbnQ2NCgiZnJhbWVzLWRyb3BwZWQtb3V0cHV0IiwgbU51bU91dHB1dEZyYW1lc0Ryb3BwZWQpOworICAgIG1TdGF0cy0+c2V0RmxvYXQoImZyYW1lLXJhdGUtdG90YWwiLCBtRnJhbWVSYXRlVG90YWwpOwogICAgIHJldHVybiBtU3RhdHM7CiB9CiAKQEAgLTEwNjksNiArMTA3MCwxMiBAQAogICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGljX2Nhc3Q8TWVkaWFCdWZmZXJIb2xkZXIqPihob2xkZXIuZ2V0KCkpLT5tZWRpYUJ1ZmZlcigpIDogbnVsbHB0cjsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgaWYgKG1lZGlhQnVmICE9IE5VTEwpIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKG1lZGlhQnVmLT5zaXplKCkgPiBjb2RlY0J1ZmZlci0+Y2FwYWNpdHkoKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgaGFuZGxlRXJyb3IoRVJST1JfQlVGRkVSX1RPT19TTUFMTCk7CisgICAgICAgICAgICAgICAgICAgICAgICBtRGVxdWV1ZWRJbnB1dEJ1ZmZlcnMucHVzaF9iYWNrKGJ1ZmZlckl4KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgICAgICAgICAgfQorCiAgICAgICAgICAgICAgICAgICAgIGNvZGVjQnVmZmVyLT5zZXRSYW5nZSgwLCBtZWRpYUJ1Zi0+c2l6ZSgpKTsKICAgICAgICAgICAgICAgICAgICAgbWVtY3B5KGNvZGVjQnVmZmVyLT5kYXRhKCksIG1lZGlhQnVmLT5kYXRhKCksIG1lZGlhQnVmLT5zaXplKCkpOwogCmRpZmYgLS1naXQgYS9tZWRpYS9saWJtZWRpYXBsYXllcnNlcnZpY2UvbnVwbGF5ZXIvTnVQbGF5ZXJEcml2ZXIuY3BwIGIvbWVkaWEvbGlibWVkaWFwbGF5ZXJzZXJ2aWNlL251cGxheWVyL051UGxheWVyRHJpdmVyLmNwcAppbmRleCBmMmM4ZjY0Li40NGYyMjNkIDEwMDY0NAotLS0gYS9tZWRpYS9saWJtZWRpYXBsYXllcnNlcnZpY2UvbnVwbGF5ZXIvTnVQbGF5ZXJEcml2ZXIuY3BwCisrKyBiL21lZGlhL2xpYm1lZGlhcGxheWVyc2VydmljZS9udXBsYXllci9OdVBsYXllckRyaXZlci5jcHAKQEAgLTUzLDYgKzUzLDcgQEAKIHN0YXRpYyBjb25zdCBjaGFyICprUGxheWVySGVpZ2h0ID0gImFuZHJvaWQubWVkaWEubWVkaWFwbGF5ZXIuaGVpZ2h0IjsKIHN0YXRpYyBjb25zdCBjaGFyICprUGxheWVyRnJhbWVzID0gImFuZHJvaWQubWVkaWEubWVkaWFwbGF5ZXIuZnJhbWVzIjsKIHN0YXRpYyBjb25zdCBjaGFyICprUGxheWVyRnJhbWVzRHJvcHBlZCA9ICJhbmRyb2lkLm1lZGlhLm1lZGlhcGxheWVyLmRyb3BwZWQiOworc3RhdGljIGNvbnN0IGNoYXIgKmtQbGF5ZXJGcmFtZVJhdGUgPSAiYW5kcm9pZC5tZWRpYS5tZWRpYXBsYXllci5mcHMiOwogc3RhdGljIGNvbnN0IGNoYXIgKmtQbGF5ZXJBTWltZSA9ICJhbmRyb2lkLm1lZGlhLm1lZGlhcGxheWVyLmF1ZGlvLm1pbWUiOwogc3RhdGljIGNvbnN0IGNoYXIgKmtQbGF5ZXJBQ29kZWMgPSAiYW5kcm9pZC5tZWRpYS5tZWRpYXBsYXllci5hdWRpby5jb2RlYyI7CiBzdGF0aWMgY29uc3QgY2hhciAqa1BsYXllckR1cmF0aW9uID0gImFuZHJvaWQubWVkaWEubWVkaWFwbGF5ZXIuZHVyYXRpb25NcyI7CkBAIC01NzcsNiArNTc4LDEwIEBACiAgICAgICAgICAgICAgICAgbUFuYWx5dGljc0l0ZW0tPnNldEludDY0KGtQbGF5ZXJGcmFtZXMsIG51bUZyYW1lc1RvdGFsKTsKICAgICAgICAgICAgICAgICBtQW5hbHl0aWNzSXRlbS0+c2V0SW50NjQoa1BsYXllckZyYW1lc0Ryb3BwZWQsIG51bUZyYW1lc0Ryb3BwZWQpOwogCisgICAgICAgICAgICAgICAgZmxvYXQgZnJhbWVSYXRlID0gMDsKKyAgICAgICAgICAgICAgICBpZiAoc3RhdHMtPmZpbmRGbG9hdCgiZnJhbWUtcmF0ZS10b3RhbCIsICZmcmFtZVJhdGUpKSB7CisgICAgICAgICAgICAgICAgICAgIG1BbmFseXRpY3NJdGVtLT5zZXREb3VibGUoa1BsYXllckZyYW1lUmF0ZSwgKGRvdWJsZSkgZnJhbWVSYXRlKTsKKyAgICAgICAgICAgICAgICB9CiAKICAgICAgICAgICAgIH0gZWxzZSBpZiAobWltZS5zdGFydHNXaXRoKCJhdWRpby8iKSkgewogICAgICAgICAgICAgICAgIG1BbmFseXRpY3NJdGVtLT5zZXRDU3RyaW5nKGtQbGF5ZXJBTWltZSwgbWltZS5jX3N0cigpKTsKQEAgLTYwMiw2ICs2MDcsNyBAQAogICAgICAgICBtQW5hbHl0aWNzSXRlbS0+c2V0SW50NjQoa1BsYXllclJlYnVmZmVyaW5nLCAobVJlYnVmZmVyaW5nVGltZVVzKzUwMCkvMTAwMCApOwogICAgICAgICBtQW5hbHl0aWNzSXRlbS0+c2V0SW50MzIoa1BsYXllclJlYnVmZmVyaW5nQ291bnQsIG1SZWJ1ZmZlcmluZ0V2ZW50cyk7CiAgICAgICAgIG1BbmFseXRpY3NJdGVtLT5zZXRJbnQzMihrUGxheWVyUmVidWZmZXJpbmdBdEV4aXQsIG1SZWJ1ZmZlcmluZ0F0RXhpdCk7CisKICAgICB9CiAKICAgICBtQW5hbHl0aWNzSXRlbS0+c2V0Q1N0cmluZyhrUGxheWVyRGF0YVNvdXJjZVR5cGUsIG1QbGF5ZXItPmdldERhdGFTb3VyY2VUeXBlKCkpOwpkaWZmIC0tZ2l0IGEvbWVkaWEvbGlibWVkaWFwbGF5ZXJzZXJ2aWNlL251cGxheWVyL051UGxheWVyRHJtLmNwcCBiL21lZGlhL2xpYm1lZGlhcGxheWVyc2VydmljZS9udXBsYXllci9OdVBsYXllckRybS5jcHAKaW5kZXggYmRlMDg2Mi4uOGQ4NzZkYSAxMDA2NDQKLS0tIGEvbWVkaWEvbGlibWVkaWFwbGF5ZXJzZXJ2aWNlL251cGxheWVyL051UGxheWVyRHJtLmNwcAorKysgYi9tZWRpYS9saWJtZWRpYXBsYXllcnNlcnZpY2UvbnVwbGF5ZXIvTnVQbGF5ZXJEcm0uY3BwCkBAIC0yMzksOCArMjM5LDE0IEBACiAgICAgICAgIHNpemVfdCAqZW5jcnlwdGVkYnl0ZXMpCiB7CiAgICAgLy8gc2l6ZSBuZWVkZWQgdG8gc3RvcmUgYWxsIHRoZSBjcnlwdG8gZGF0YQotICAgIHNpemVfdCBjcnlwdG9zaXplID0gc2l6ZW9mKENyeXB0b0luZm8pICsKLSAgICAgICAgICAgICAgICAgICAgICAgIHNpemVvZihDcnlwdG9QbHVnaW46OlN1YlNhbXBsZSkgKiBudW1TdWJTYW1wbGVzOworICAgIHNpemVfdCBjcnlwdG9zaXplOworICAgIC8vIHNpemVvZihDcnlwdG9JbmZvKSArIHNpemVvZihDcnlwdG9QbHVnaW46OlN1YlNhbXBsZSkgKiBudW1TdWJTYW1wbGVzOworICAgIGlmIChfX2J1aWx0aW5fbXVsX292ZXJmbG93KHNpemVvZihDcnlwdG9QbHVnaW46OlN1YlNhbXBsZSksIG51bVN1YlNhbXBsZXMsICZjcnlwdG9zaXplKSB8fAorICAgICAgICAgICAgX19idWlsdGluX2FkZF9vdmVyZmxvdyhjcnlwdG9zaXplLCBzaXplb2YoQ3J5cHRvSW5mbyksICZjcnlwdG9zaXplKSkgeworICAgICAgICBBTE9HRSgiY3J5cHRvIHNpemUgb3ZlcmZsb3ciKTsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorCiAgICAgQ3J5cHRvSW5mbyAqcmV0ID0gKENyeXB0b0luZm8qKSBtYWxsb2MoY3J5cHRvc2l6ZSk7CiAgICAgaWYgKHJldCA9PSBOVUxMKSB7CiAgICAgICAgIEFMT0dFKCJjb3VsZG4ndCBhbGxvY2F0ZSAlenUgYnl0ZXMiLCBjcnlwdG9zaXplKTsKZGlmZiAtLWdpdCBhL21lZGlhL2xpYm1lZGlhcGxheWVyc2VydmljZS9udXBsYXllci9OdVBsYXllclJlbmRlcmVyLmNwcCBiL21lZGlhL2xpYm1lZGlhcGxheWVyc2VydmljZS9udXBsYXllci9OdVBsYXllclJlbmRlcmVyLmNwcAppbmRleCA1N2EwMTk4Li5iMjU4MzMyIDEwMDY0NAotLS0gYS9tZWRpYS9saWJtZWRpYXBsYXllcnNlcnZpY2UvbnVwbGF5ZXIvTnVQbGF5ZXJSZW5kZXJlci5jcHAKKysrIGIvbWVkaWEvbGlibWVkaWFwbGF5ZXJzZXJ2aWNlL251cGxheWVyL051UGxheWVyUmVuZGVyZXIuY3BwCkBAIC0yNiw2ICsyNiw4IEBACiAjaW5jbHVkZSA8bWVkaWEvc3RhZ2VmcmlnaHQvZm91bmRhdGlvbi9BTWVzc2FnZS5oPgogI2luY2x1ZGUgPG1lZGlhL3N0YWdlZnJpZ2h0L2ZvdW5kYXRpb24vQVV0aWxzLmg+CiAjaW5jbHVkZSA8bWVkaWEvc3RhZ2VmcmlnaHQvTWVkaWFDbG9jay5oPgorI2luY2x1ZGUgPG1lZGlhL3N0YWdlZnJpZ2h0L01lZGlhQ29kZWNDb25zdGFudHMuaD4KKyNpbmNsdWRlIDxtZWRpYS9zdGFnZWZyaWdodC9NZWRpYURlZnMuaD4KICNpbmNsdWRlIDxtZWRpYS9zdGFnZWZyaWdodC9NZWRpYUVycm9ycy5oPgogI2luY2x1ZGUgPG1lZGlhL3N0YWdlZnJpZ2h0L01ldGFEYXRhLmg+CiAjaW5jbHVkZSA8bWVkaWEvc3RhZ2VmcmlnaHQvVXRpbHMuaD4KQEAgLTg3LDYgKzg5LDIwIEBACiAvLyBzdGF0aWMKIGNvbnN0IGludDY0X3QgTnVQbGF5ZXI6OlJlbmRlcmVyOjprTWluUG9zaXRpb25VcGRhdGVEZWxheVVzID0gMTAwMDAwbGw7CiAKK3N0YXRpYyBhdWRpb19mb3JtYXRfdCBjb25zdGV4cHIgYXVkaW9Gb3JtYXRGcm9tRW5jb2RpbmcoaW50MzJfdCBwY21FbmNvZGluZykgeworICAgIHN3aXRjaCAocGNtRW5jb2RpbmcpIHsKKyAgICBjYXNlIGtBdWRpb0VuY29kaW5nUGNtRmxvYXQ6CisgICAgICAgIHJldHVybiBBVURJT19GT1JNQVRfUENNX0ZMT0FUOworICAgIGNhc2Uga0F1ZGlvRW5jb2RpbmdQY20xNmJpdDoKKyAgICAgICAgcmV0dXJuIEFVRElPX0ZPUk1BVF9QQ01fMTZfQklUOworICAgIGNhc2Uga0F1ZGlvRW5jb2RpbmdQY204Yml0OgorICAgICAgICByZXR1cm4gQVVESU9fRk9STUFUX1BDTV84X0JJVDsgLy8gVE9ETzogZG8gd2Ugd2FudCB0byBzdXBwb3J0IHRoaXM/CisgICAgZGVmYXVsdDoKKyAgICAgICAgQUxPR0UoIiVzOiBJbnZhbGlkIGVuY29kaW5nOiAlZCIsIF9fZnVuY19fLCBwY21FbmNvZGluZyk7CisgICAgICAgIHJldHVybiBBVURJT19GT1JNQVRfSU5WQUxJRDsKKyAgICB9Cit9CisKIE51UGxheWVyOjpSZW5kZXJlcjo6UmVuZGVyZXIoCiAgICAgICAgIGNvbnN0IHNwPE1lZGlhUGxheWVyQmFzZTo6QXVkaW9TaW5rPiAmc2luaywKICAgICAgICAgY29uc3Qgc3A8TWVkaWFDbG9jaz4gJm1lZGlhQ2xvY2ssCkBAIC0xODc3LDggKzE4OTMsMTMgQEAKICAgICBpbnQzMl90IHNhbXBsZVJhdGU7CiAgICAgQ0hFQ0soZm9ybWF0LT5maW5kSW50MzIoInNhbXBsZS1yYXRlIiwgJnNhbXBsZVJhdGUpKTsKIAorICAgIC8vIHJlYWQgcGNtIGVuY29kaW5nIGZyb20gTWVkaWFDb2RlYyBvdXRwdXQgZm9ybWF0LCBpZiBhdmFpbGFibGUKKyAgICBpbnQzMl90IHBjbUVuY29kaW5nOworICAgIGF1ZGlvX2Zvcm1hdF90IGF1ZGlvRm9ybWF0ID0KKyAgICAgICAgICAgIGZvcm1hdC0+ZmluZEludDMyKEtFWV9QQ01fRU5DT0RJTkcsICZwY21FbmNvZGluZykgPworICAgICAgICAgICAgICAgICAgICBhdWRpb0Zvcm1hdEZyb21FbmNvZGluZyhwY21FbmNvZGluZykgOiBBVURJT19GT1JNQVRfUENNXzE2X0JJVDsKKwogICAgIGlmIChvZmZsb2FkaW5nQXVkaW8oKSkgewotICAgICAgICBhdWRpb19mb3JtYXRfdCBhdWRpb0Zvcm1hdCA9IEFVRElPX0ZPUk1BVF9QQ01fMTZfQklUOwogICAgICAgICBBU3RyaW5nIG1pbWU7CiAgICAgICAgIENIRUNLKGZvcm1hdC0+ZmluZFN0cmluZygibWltZSIsICZtaW1lKSk7CiAgICAgICAgIHN0YXR1c190IGVyciA9IG1hcE1pbWVUb0F1ZGlvRm9ybWF0KGF1ZGlvRm9ybWF0LCBtaW1lLmNfc3RyKCkpOwpAQCAtMTk4MCw3ICsyMDAxLDcgQEAKICAgICAgICAgY29uc3QgUGNtSW5mbyBpbmZvID0gewogICAgICAgICAgICAgICAgIChhdWRpb19jaGFubmVsX21hc2tfdCljaGFubmVsTWFzaywKICAgICAgICAgICAgICAgICAoYXVkaW9fb3V0cHV0X2ZsYWdzX3QpcGNtRmxhZ3MsCi0gICAgICAgICAgICAgICAgQVVESU9fRk9STUFUX1BDTV8xNl9CSVQsIC8vIFRPRE86IGNoYW5nZSB0byBhdWRpb0Zvcm1hdAorICAgICAgICAgICAgICAgIGF1ZGlvRm9ybWF0LAogICAgICAgICAgICAgICAgIG51bUNoYW5uZWxzLAogICAgICAgICAgICAgICAgIHNhbXBsZVJhdGUKICAgICAgICAgfTsKQEAgLTIwMTksNyArMjA0MCw3IEBACiAgICAgICAgICAgICAgICAgICAgIHNhbXBsZVJhdGUsCiAgICAgICAgICAgICAgICAgICAgIG51bUNoYW5uZWxzLAogICAgICAgICAgICAgICAgICAgICAoYXVkaW9fY2hhbm5lbF9tYXNrX3QpY2hhbm5lbE1hc2ssCi0gICAgICAgICAgICAgICAgICAgIEFVRElPX0ZPUk1BVF9QQ01fMTZfQklULAorICAgICAgICAgICAgICAgICAgICBhdWRpb0Zvcm1hdCwKICAgICAgICAgICAgICAgICAgICAgMCAvKiBidWZmZXJDb3VudCAtIHVudXNlZCAqLywKICAgICAgICAgICAgICAgICAgICAgbVVzZUF1ZGlvQ2FsbGJhY2sgPyAmTnVQbGF5ZXI6OlJlbmRlcmVyOjpBdWRpb1NpbmtDYWxsYmFjayA6IE5VTEwsCiAgICAgICAgICAgICAgICAgICAgIG1Vc2VBdWRpb0NhbGxiYWNrID8gdGhpcyA6IE5VTEwsCkBAIC0yMDc3LDQgKzIwOTgsMyBAQAogfQogCiB9ICAvLyBuYW1lc3BhY2UgYW5kcm9pZAotCmRpZmYgLS1naXQgYS9tZWRpYS9saWJtZWRpYXBsYXllcnNlcnZpY2UvdGVzdHMvQW5kcm9pZC5icCBiL21lZGlhL2xpYm1lZGlhcGxheWVyc2VydmljZS90ZXN0cy9BbmRyb2lkLmJwCmluZGV4IGU4NmI2OGEuLjQ3NDlhOGIgMTAwNjQ0Ci0tLSBhL21lZGlhL2xpYm1lZGlhcGxheWVyc2VydmljZS90ZXN0cy9BbmRyb2lkLmJwCisrKyBiL21lZGlhL2xpYm1lZGlhcGxheWVyc2VydmljZS90ZXN0cy9BbmRyb2lkLmJwCkBAIC0xMSw2ICsxMSw3IEBACiAgICAgICAgICJsaWJ1dGlscyIsCiAgICAgICAgICJhbmRyb2lkLmhhcmR3YXJlLmRybUAxLjAiLAogICAgICAgICAiYW5kcm9pZC5oYXJkd2FyZS5kcm1AMS4xIiwKKyAgICAgICAgImFuZHJvaWQuaGFyZHdhcmUuZHJtQDEuMiIsCiAgICAgXSwKIAogICAgIGNvbXBpbGVfbXVsdGlsaWI6ICIzMiIsCmRpZmYgLS1naXQgYS9tZWRpYS9saWJuYmxvZy9BbmRyb2lkLmJwIGIvbWVkaWEvbGlibmJsb2cvQW5kcm9pZC5icAppbmRleCA3NGFhZjc3Li4xMTg4MzIwIDEwMDY0NAotLS0gYS9tZWRpYS9saWJuYmxvZy9BbmRyb2lkLmJwCisrKyBiL21lZGlhL2xpYm5ibG9nL0FuZHJvaWQuYnAKQEAgLTMsOSArMywxMyBAQAogICAgIG5hbWU6ICJsaWJuYmxvZyIsCiAKICAgICBzcmNzOiBbCi0gICAgICAgICJOQkxvZy5jcHAiLAorICAgICAgICAiRW50cnkuY3BwIiwKKyAgICAgICAgIk1lcmdlci5jcHAiLAogICAgICAgICAiUGVyZm9ybWFuY2VBbmFseXNpcy5jcHAiLAorICAgICAgICAiUmVhZGVyLmNwcCIsCiAgICAgICAgICJSZXBvcnRQZXJmb3JtYW5jZS5jcHAiLAorICAgICAgICAiVGltZWxpbmUuY3BwIiwKKyAgICAgICAgIldyaXRlci5jcHAiLAogICAgIF0sCiAKICAgICBzaGFyZWRfbGliczogWwpAQCAtMTMsOSArMTcsMTQgQEAKICAgICAgICAgImxpYmJpbmRlciIsCiAgICAgICAgICJsaWJjdXRpbHMiLAogICAgICAgICAibGlibG9nIiwKKyAgICAgICAgImxpYm1lZGlhbWV0cmljcyIsCiAgICAgICAgICJsaWJ1dGlscyIsCiAgICAgXSwKIAorICAgIHN0YXRpY19saWJzOiBbCisgICAgICAgICJsaWJqc29uY3BwIiwKKyAgICBdLAorCiAgICAgY2ZsYWdzOiBbCiAgICAgICAgICItV2Vycm9yIiwKICAgICAgICAgIi1XYWxsIiwKZGlmZiAtLWdpdCBhL21lZGlhL2xpYm5ibG9nL0VudHJ5LmNwcCBiL21lZGlhL2xpYm5ibG9nL0VudHJ5LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lODc1NjM5Ci0tLSAvZGV2L251bGwKKysrIGIvbWVkaWEvbGlibmJsb2cvRW50cnkuY3BwCkBAIC0wLDAgKzEsMjYyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE4IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KKworI2RlZmluZSBMT0dfVEFHICJOQkxvZyIKKy8vI2RlZmluZSBMT0dfTkRFQlVHIDAKKworI2luY2x1ZGUgPG1lbW9yeT4KKyNpbmNsdWRlIDxzdGRkZWYuaD4KKyNpbmNsdWRlIDxzdGRpbnQuaD4KKworI2luY2x1ZGUgPGF1ZGlvX3V0aWxzL2ZpZm8uaD4KKyNpbmNsdWRlIDxtZWRpYS9uYmxvZy9FbnRyeS5oPgorI2luY2x1ZGUgPG1lZGlhL25ibG9nL0V2ZW50cy5oPgorI2luY2x1ZGUgPHV0aWxzL0xvZy5oPgorCituYW1lc3BhY2UgYW5kcm9pZCB7CituYW1lc3BhY2UgTkJMb2cgeworCitpbnQgRW50cnk6OmNvcHlFbnRyeURhdGFBdChzaXplX3Qgb2Zmc2V0KSBjb25zdAoreworICAgIC8vIEZJWE1FIFRoaXMgaXMgdG9vIHNsb3cKKyAgICBpZiAob2Zmc2V0ID09IDApIHsKKyAgICAgICAgcmV0dXJuIG1FdmVudDsKKyAgICB9IGVsc2UgaWYgKG9mZnNldCA9PSAxKSB7CisgICAgICAgIHJldHVybiBtTGVuZ3RoOworICAgIH0gZWxzZSBpZiAob2Zmc2V0IDwgKHNpemVfdCkgKG1MZW5ndGggKyAyKSkgeworICAgICAgICByZXR1cm4gKGludCkgKChjaGFyICopIG1EYXRhKVtvZmZzZXQgLSAyXTsKKyAgICB9IGVsc2UgaWYgKG9mZnNldCA9PSAoc2l6ZV90KSAobUxlbmd0aCArIDIpKSB7CisgICAgICAgIHJldHVybiBtTGVuZ3RoOworICAgIH0gZWxzZSB7CisgICAgICAgIHJldHVybiAwOyAgIC8vIEZJWE1FIGlzIHRoaXMgYW4gZXJyb3I/CisgICAgfQorfQorCitFbnRyeUl0ZXJhdG9yOjpFbnRyeUl0ZXJhdG9yKCkgICAvLyBEdW1teSBpbml0aWFsaXphdGlvbi4KKyAgICA6IG1QdHIobnVsbHB0cikKK3sKK30KKworRW50cnlJdGVyYXRvcjo6RW50cnlJdGVyYXRvcihjb25zdCB1aW50OF90ICplbnRyeSkKKyAgICA6IG1QdHIoZW50cnkpCit7Cit9CisKK0VudHJ5SXRlcmF0b3I6OkVudHJ5SXRlcmF0b3IoY29uc3QgRW50cnlJdGVyYXRvciAmb3RoZXIpCisgICAgOiBtUHRyKG90aGVyLm1QdHIpCit7Cit9CisKK2NvbnN0IGVudHJ5JiBFbnRyeUl0ZXJhdG9yOjpvcGVyYXRvciooKSBjb25zdAoreworICAgIHJldHVybiAqKGVudHJ5KikgbVB0cjsKK30KKworY29uc3QgZW50cnkqIEVudHJ5SXRlcmF0b3I6Om9wZXJhdG9yLT4oKSBjb25zdAoreworICAgIHJldHVybiAoZW50cnkqKSBtUHRyOworfQorCitFbnRyeUl0ZXJhdG9yJiBFbnRyeUl0ZXJhdG9yOjpvcGVyYXRvcisrKCkKK3sKKyAgICBtUHRyICs9IG1QdHJbb2Zmc2V0b2YoZW50cnksIGxlbmd0aCldICsgRW50cnk6OmtPdmVyaGVhZDsKKyAgICByZXR1cm4gKnRoaXM7Cit9CisKK0VudHJ5SXRlcmF0b3ImIEVudHJ5SXRlcmF0b3I6Om9wZXJhdG9yLS0oKQoreworICAgIG1QdHIgLT0gbVB0cltFbnRyeTo6a1ByZXZpb3VzTGVuZ3RoT2Zmc2V0XSArIEVudHJ5OjprT3ZlcmhlYWQ7CisgICAgcmV0dXJuICp0aGlzOworfQorCitFbnRyeUl0ZXJhdG9yIEVudHJ5SXRlcmF0b3I6Om5leHQoKSBjb25zdAoreworICAgIEVudHJ5SXRlcmF0b3IgYXV4KCp0aGlzKTsKKyAgICByZXR1cm4gKythdXg7Cit9CisKK0VudHJ5SXRlcmF0b3IgRW50cnlJdGVyYXRvcjo6cHJldigpIGNvbnN0Cit7CisgICAgRW50cnlJdGVyYXRvciBhdXgoKnRoaXMpOworICAgIHJldHVybiAtLWF1eDsKK30KKworYm9vbCBFbnRyeUl0ZXJhdG9yOjpvcGVyYXRvciE9KGNvbnN0IEVudHJ5SXRlcmF0b3IgJm90aGVyKSBjb25zdAoreworICAgIHJldHVybiBtUHRyICE9IG90aGVyLm1QdHI7Cit9CisKK2ludCBFbnRyeUl0ZXJhdG9yOjpvcGVyYXRvci0oY29uc3QgRW50cnlJdGVyYXRvciAmb3RoZXIpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1QdHIgLSBvdGhlci5tUHRyOworfQorCitib29sIEVudHJ5SXRlcmF0b3I6Omhhc0NvbnNpc3RlbnRMZW5ndGgoKSBjb25zdAoreworICAgIHJldHVybiBtUHRyW29mZnNldG9mKGVudHJ5LCBsZW5ndGgpXSA9PSBtUHRyW21QdHJbb2Zmc2V0b2YoZW50cnksIGxlbmd0aCldICsKKyAgICAgICAgRW50cnk6OmtPdmVyaGVhZCArIEVudHJ5OjprUHJldmlvdXNMZW5ndGhPZmZzZXRdOworfQorCit2b2lkIEVudHJ5SXRlcmF0b3I6OmNvcHlUbyhzdGQ6OnVuaXF1ZV9wdHI8YXVkaW9fdXRpbHNfZmlmb193cml0ZXI+ICZkc3QpIGNvbnN0Cit7CisgICAgc2l6ZV90IGxlbmd0aCA9IG1QdHJbb2Zmc2V0b2YoZW50cnksIGxlbmd0aCldICsgRW50cnk6OmtPdmVyaGVhZDsKKyAgICBkc3QtPndyaXRlKG1QdHIsIGxlbmd0aCk7Cit9CisKK3ZvaWQgRW50cnlJdGVyYXRvcjo6Y29weURhdGEodWludDhfdCAqZHN0KSBjb25zdAoreworICAgIG1lbWNweSgodm9pZCopIGRzdCwgbVB0ciArIG9mZnNldG9mKGVudHJ5LCBkYXRhKSwgbVB0cltvZmZzZXRvZihlbnRyeSwgbGVuZ3RoKV0pOworfQorCisvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworc3RkOjp1bmlxdWVfcHRyPEFic3RyYWN0RW50cnk+IEFic3RyYWN0RW50cnk6OmJ1aWxkRW50cnkoY29uc3QgdWludDhfdCAqcHRyKQoreworICAgIGlmIChwdHIgPT0gbnVsbHB0cikgeworICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICB9CisgICAgY29uc3QgdWludDhfdCB0eXBlID0gRW50cnlJdGVyYXRvcihwdHIpLT50eXBlOworICAgIHN3aXRjaCAodHlwZSkgeworICAgIGNhc2UgRVZFTlRfRk1UX1NUQVJUOgorICAgICAgICByZXR1cm4gc3RkOjptYWtlX3VuaXF1ZTxGb3JtYXRFbnRyeT4oRm9ybWF0RW50cnkocHRyKSk7CisgICAgY2FzZSBFVkVOVF9BVURJT19TVEFURToKKyAgICBjYXNlIEVWRU5UX0hJU1RPR1JBTV9FTlRSWV9UUzoKKyAgICAgICAgcmV0dXJuIHN0ZDo6bWFrZV91bmlxdWU8SGlzdG9ncmFtRW50cnk+KEhpc3RvZ3JhbUVudHJ5KHB0cikpOworICAgIGRlZmF1bHQ6CisgICAgICAgIEFMT0dXKCJUcmllZCB0byBjcmVhdGUgQWJzdHJhY3RFbnRyeSBvZiB0eXBlICVkIiwgdHlwZSk7CisgICAgICAgIHJldHVybiBudWxscHRyOworICAgIH0KK30KKworRW50cnlJdGVyYXRvciBGb3JtYXRFbnRyeTo6YmVnaW4oKSBjb25zdAoreworICAgIHJldHVybiBFbnRyeUl0ZXJhdG9yKG1FbnRyeSk7Cit9CisKK2NvbnN0IGNoYXIgKkZvcm1hdEVudHJ5Ojpmb3JtYXRTdHJpbmcoKSBjb25zdAoreworICAgIHJldHVybiAoY29uc3QgY2hhciopIG1FbnRyeSArIG9mZnNldG9mKGVudHJ5LCBkYXRhKTsKK30KKworc2l6ZV90IEZvcm1hdEVudHJ5Ojpmb3JtYXRTdHJpbmdMZW5ndGgoKSBjb25zdAoreworICAgIHJldHVybiBtRW50cnlbb2Zmc2V0b2YoZW50cnksIGxlbmd0aCldOworfQorCitFbnRyeUl0ZXJhdG9yIEZvcm1hdEVudHJ5OjphcmdzKCkgY29uc3QKK3sKKyAgICBhdXRvIGl0ID0gYmVnaW4oKTsKKyAgICArK2l0OyAvLyBza2lwIHN0YXJ0IGZtdAorICAgICsraXQ7IC8vIHNraXAgdGltZXN0YW1wCisgICAgKytpdDsgLy8gc2tpcCBoYXNoCisgICAgLy8gU2tpcCBhdXRob3IgaWYgcHJlc2VudAorICAgIGlmIChpdC0+dHlwZSA9PSBFVkVOVF9GTVRfQVVUSE9SKSB7CisgICAgICAgICsraXQ7CisgICAgfQorICAgIHJldHVybiBpdDsKK30KKworaW50NjRfdCBGb3JtYXRFbnRyeTo6dGltZXN0YW1wKCkgY29uc3QKK3sKKyAgICBhdXRvIGl0ID0gYmVnaW4oKTsKKyAgICArK2l0OyAvLyBza2lwIHN0YXJ0IGZtdAorICAgIHJldHVybiBpdC5wYXlsb2FkPGludDY0X3Q+KCk7Cit9CisKK2xvZ19oYXNoX3QgRm9ybWF0RW50cnk6Omhhc2goKSBjb25zdAoreworICAgIGF1dG8gaXQgPSBiZWdpbigpOworICAgICsraXQ7IC8vIHNraXAgc3RhcnQgZm10CisgICAgKytpdDsgLy8gc2tpcCB0aW1lc3RhbXAKKyAgICAvLyB1bmFsaWduZWQgNjQtYml0IHJlYWQgbm90IHN1cHBvcnRlZAorICAgIGxvZ19oYXNoX3QgaGFzaDsKKyAgICBtZW1jcHkoJmhhc2gsIGl0LT5kYXRhLCBzaXplb2YoaGFzaCkpOworICAgIHJldHVybiBoYXNoOworfQorCitpbnQgRm9ybWF0RW50cnk6OmF1dGhvcigpIGNvbnN0Cit7CisgICAgYXV0byBpdCA9IGJlZ2luKCk7CisgICAgKytpdDsgLy8gc2tpcCBzdGFydCBmbXQKKyAgICArK2l0OyAvLyBza2lwIHRpbWVzdGFtcAorICAgICsraXQ7IC8vIHNraXAgaGFzaAorICAgIC8vIGlmIHRoZXJlIGlzIGFuIGF1dGhvciBlbnRyeSwgcmV0dXJuIGl0LCByZXR1cm4gLTEgb3RoZXJ3aXNlCisgICAgcmV0dXJuIGl0LT50eXBlID09IEVWRU5UX0ZNVF9BVVRIT1IgPyBpdC5wYXlsb2FkPGludD4oKSA6IC0xOworfQorCitFbnRyeUl0ZXJhdG9yIEZvcm1hdEVudHJ5Ojpjb3B5V2l0aEF1dGhvcigKKyAgICAgICAgc3RkOjp1bmlxdWVfcHRyPGF1ZGlvX3V0aWxzX2ZpZm9fd3JpdGVyPiAmZHN0LCBpbnQgYXV0aG9yKSBjb25zdAoreworICAgIGF1dG8gaXQgPSBiZWdpbigpOworICAgIGl0LmNvcHlUbyhkc3QpOyAgICAgLy8gY29weSBmbXQgc3RhcnQgZW50cnkKKyAgICAoKytpdCkuY29weVRvKGRzdCk7IC8vIGNvcHkgdGltZXN0YW1wCisgICAgKCsraXQpLmNvcHlUbyhkc3QpOyAvLyBjb3B5IGhhc2gKKyAgICAvLyBpbnNlcnQgYXV0aG9yIGVudHJ5CisgICAgc2l6ZV90IGF1dGhvckVudHJ5U2l6ZSA9IEVudHJ5OjprT3ZlcmhlYWQgKyBzaXplb2YoYXV0aG9yKTsKKyAgICB1aW50OF90IGF1dGhvckVudHJ5W2F1dGhvckVudHJ5U2l6ZV07CisgICAgYXV0aG9yRW50cnlbb2Zmc2V0b2YoZW50cnksIHR5cGUpXSA9IEVWRU5UX0ZNVF9BVVRIT1I7CisgICAgYXV0aG9yRW50cnlbb2Zmc2V0b2YoZW50cnksIGxlbmd0aCldID0KKyAgICAgICAgYXV0aG9yRW50cnlbYXV0aG9yRW50cnlTaXplICsgRW50cnk6OmtQcmV2aW91c0xlbmd0aE9mZnNldF0gPQorICAgICAgICBzaXplb2YoYXV0aG9yKTsKKyAgICAqKGludCopICgmYXV0aG9yRW50cnlbb2Zmc2V0b2YoZW50cnksIGRhdGEpXSkgPSBhdXRob3I7CisgICAgZHN0LT53cml0ZShhdXRob3JFbnRyeSwgYXV0aG9yRW50cnlTaXplKTsKKyAgICAvLyBjb3B5IHJlc3Qgb2YgZW50cmllcworICAgIHdoaWxlICgoKytpdCktPnR5cGUgIT0gRVZFTlRfRk1UX0VORCkgeworICAgICAgICBpdC5jb3B5VG8oZHN0KTsKKyAgICB9CisgICAgaXQuY29weVRvKGRzdCk7CisgICAgKytpdDsKKyAgICByZXR1cm4gaXQ7Cit9CisKK2ludDY0X3QgSGlzdG9ncmFtRW50cnk6OnRpbWVzdGFtcCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIEVudHJ5SXRlcmF0b3IobUVudHJ5KS5wYXlsb2FkPEhpc3RUc0VudHJ5PigpLnRzOworfQorCitsb2dfaGFzaF90IEhpc3RvZ3JhbUVudHJ5OjpoYXNoKCkgY29uc3QKK3sKKyAgICByZXR1cm4gRW50cnlJdGVyYXRvcihtRW50cnkpLnBheWxvYWQ8SGlzdFRzRW50cnk+KCkuaGFzaDsKK30KKworaW50IEhpc3RvZ3JhbUVudHJ5OjphdXRob3IoKSBjb25zdAoreworICAgIEVudHJ5SXRlcmF0b3IgaXQobUVudHJ5KTsKKyAgICByZXR1cm4gaXQtPmxlbmd0aCA9PSBzaXplb2YoSGlzdFRzRW50cnlXaXRoQXV0aG9yKQorICAgICAgICAgICAgPyBpdC5wYXlsb2FkPEhpc3RUc0VudHJ5V2l0aEF1dGhvcj4oKS5hdXRob3IgOiAtMTsKK30KKworRW50cnlJdGVyYXRvciBIaXN0b2dyYW1FbnRyeTo6Y29weVdpdGhBdXRob3IoCisgICAgICAgIHN0ZDo6dW5pcXVlX3B0cjxhdWRpb191dGlsc19maWZvX3dyaXRlcj4gJmRzdCwgaW50IGF1dGhvcikgY29uc3QKK3sKKyAgICAvLyBDdXJyZW50IGhpc3RvZ3JhbSBlbnRyeSBoYXMge3R5cGUsIGxlbmd0aCwgc3RydWN0IEhpc3RUc0VudHJ5LCBsZW5ndGh9LgorICAgIC8vIFdlIG5vdyB3YW50IHt0eXBlLCBsZW5ndGgsIHN0cnVjdCBIaXN0VHNFbnRyeVdpdGhBdXRob3IsIGxlbmd0aH0KKyAgICB1aW50OF90IGJ1ZmZlcltFbnRyeTo6a092ZXJoZWFkICsgc2l6ZW9mKEhpc3RUc0VudHJ5V2l0aEF1dGhvcildOworICAgIC8vIENvcHkgY29udGVudCB1bnRpbCB0aGUgcG9pbnQgd2Ugd2FudCB0byBhZGQgdGhlIGF1dGhvcgorICAgIG1lbWNweShidWZmZXIsIG1FbnRyeSwgc2l6ZW9mKGVudHJ5KSArIHNpemVvZihIaXN0VHNFbnRyeSkpOworICAgIC8vIENvcHkgdGhlIGF1dGhvcgorICAgICooaW50KikgKGJ1ZmZlciArIHNpemVvZihlbnRyeSkgKyBzaXplb2YoSGlzdFRzRW50cnkpKSA9IGF1dGhvcjsKKyAgICAvLyBVcGRhdGUgbGVuZ3RocworICAgIGJ1ZmZlcltvZmZzZXRvZihlbnRyeSwgbGVuZ3RoKV0gPSBzaXplb2YoSGlzdFRzRW50cnlXaXRoQXV0aG9yKTsKKyAgICBidWZmZXJbb2Zmc2V0b2YoZW50cnksIGRhdGEpICsgc2l6ZW9mKEhpc3RUc0VudHJ5V2l0aEF1dGhvcikgKyBvZmZzZXRvZihlbmRpbmcsIGxlbmd0aCldCisgICAgICAgID0gc2l6ZW9mKEhpc3RUc0VudHJ5V2l0aEF1dGhvcik7CisgICAgLy8gV3JpdGUgbmV3IGJ1ZmZlciBpbnRvIEZJRk8KKyAgICBkc3QtPndyaXRlKGJ1ZmZlciwgc2l6ZW9mKGJ1ZmZlcikpOworICAgIHJldHVybiBFbnRyeUl0ZXJhdG9yKG1FbnRyeSkubmV4dCgpOworfQorCit9ICAgLy8gbmFtZXNwYWNlIE5CTG9nCit9ICAgLy8gbmFtZXNwYWNlIGFuZHJvaWQKZGlmZiAtLWdpdCBhL21lZGlhL2xpYm5ibG9nL01lcmdlci5jcHAgYi9tZWRpYS9saWJuYmxvZy9NZXJnZXIuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNhZDZkNmIKLS0tIC9kZXYvbnVsbAorKysgYi9tZWRpYS9saWJuYmxvZy9NZXJnZXIuY3BwCkBAIC0wLDAgKzEsMzIyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE4IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KKworI2RlZmluZSBMT0dfVEFHICJOQkxvZyIKKy8vI2RlZmluZSBMT0dfTkRFQlVHIDAKKworI2luY2x1ZGUgPG1lbW9yeT4KKyNpbmNsdWRlIDxxdWV1ZT4KKyNpbmNsdWRlIDxzdGRkZWYuaD4KKyNpbmNsdWRlIDxzdGRpbnQuaD4KKyNpbmNsdWRlIDx2ZWN0b3I+CisKKyNpbmNsdWRlIDxhdWRpb191dGlscy9maWZvLmg+CisjaW5jbHVkZSA8anNvbi9qc29uLmg+CisjaW5jbHVkZSA8bWVkaWEvbmJsb2cvTWVyZ2VyLmg+CisjaW5jbHVkZSA8bWVkaWEvbmJsb2cvUGVyZm9ybWFuY2VBbmFseXNpcy5oPgorI2luY2x1ZGUgPG1lZGlhL25ibG9nL1JlcG9ydFBlcmZvcm1hbmNlLmg+CisjaW5jbHVkZSA8bWVkaWEvbmJsb2cvUmVhZGVyLmg+CisjaW5jbHVkZSA8bWVkaWEvbmJsb2cvVGltZWxpbmUuaD4KKyNpbmNsdWRlIDx1dGlscy9Db25kaXRpb24uaD4KKyNpbmNsdWRlIDx1dGlscy9Mb2cuaD4KKyNpbmNsdWRlIDx1dGlscy9NdXRleC5oPgorI2luY2x1ZGUgPHV0aWxzL1JlZkJhc2UuaD4KKyNpbmNsdWRlIDx1dGlscy9TdHJpbmcxNi5oPgorI2luY2x1ZGUgPHV0aWxzL1N0cmluZzguaD4KKyNpbmNsdWRlIDx1dGlscy9UaHJlYWQuaD4KKyNpbmNsdWRlIDx1dGlscy9UaW1lcnMuaD4KKyNpbmNsdWRlIDx1dGlscy9WZWN0b3IuaD4KKworbmFtZXNwYWNlIGFuZHJvaWQgeworbmFtZXNwYWNlIE5CTG9nIHsKKworTWVyZ2VyOjpNZXJnZXIoY29uc3Qgdm9pZCAqc2hhcmVkLCBzaXplX3Qgc2l6ZSk6CisgICAgICBtU2hhcmVkKChTaGFyZWQgKikgc2hhcmVkKSwKKyAgICAgIG1GaWZvKG1TaGFyZWQgIT0gTlVMTCA/CisgICAgICAgIG5ldyBhdWRpb191dGlsc19maWZvKHNpemUsIHNpemVvZih1aW50OF90KSwKKyAgICAgICAgICAgIG1TaGFyZWQtPm1CdWZmZXIsIG1TaGFyZWQtPm1SZWFyLCBOVUxMIC8qdGhyb3R0bGVzRnJvbnQqLykgOiBOVUxMKSwKKyAgICAgIG1GaWZvV3JpdGVyKG1GaWZvICE9IE5VTEwgPyBuZXcgYXVkaW9fdXRpbHNfZmlmb193cml0ZXIoKm1GaWZvKSA6IE5VTEwpCit7Cit9CisKK3ZvaWQgTWVyZ2VyOjphZGRSZWFkZXIoY29uc3Qgc3A8UmVhZGVyPiAmcmVhZGVyKQoreworICAgIC8vIEZJWE1FIFRoaXMgaXMgY2FsbGVkIGJ5IGJpbmRlciB0aHJlYWQgaW4gTWVkaWFMb2dTZXJ2aWNlOjpyZWdpc3RlcldyaXRlcgorICAgIC8vICAgICAgIGJ1dCB0aGUgYWNjZXNzIHRvIHNoYXJlZCB2YXJpYWJsZSBtUmVhZGVycyBpcyBub3QgeWV0IHByb3RlY3RlZCBieSBhIGxvY2suCisgICAgbVJlYWRlcnMucHVzaF9iYWNrKHJlYWRlcik7Cit9CisKKy8vIGl0ZW1zIHBsYWNlZCBpbiBwcmlvcml0eSBxdWV1ZSBkdXJpbmcgbWVyZ2UKKy8vIGNvbXBvc2VkIGJ5IGEgdGltZXN0YW1wIGFuZCB0aGUgaW5kZXggb2YgdGhlIHNuYXBzaG90IHdoZXJlIHRoZSB0aW1lc3RhbXAgY2FtZSBmcm9tCitzdHJ1Y3QgTWVyZ2VJdGVtCit7CisgICAgaW50NjRfdCB0czsKKyAgICBpbnQgaW5kZXg7CisgICAgTWVyZ2VJdGVtKGludDY0X3QgdHMsIGludCBpbmRleCk6IHRzKHRzKSwgaW5kZXgoaW5kZXgpIHt9Cit9OworCitib29sIG9wZXJhdG9yPihjb25zdCBzdHJ1Y3QgTWVyZ2VJdGVtICZpMSwgY29uc3Qgc3RydWN0IE1lcmdlSXRlbSAmaTIpCit7CisgICAgcmV0dXJuIGkxLnRzID4gaTIudHMgfHwgKGkxLnRzID09IGkyLnRzICYmIGkxLmluZGV4ID4gaTIuaW5kZXgpOworfQorCisvLyBNZXJnZSByZWdpc3RlcmVkIHJlYWRlcnMsIHNvcnRlZCBieSB0aW1lc3RhbXAsIGFuZCB3cml0ZSBkYXRhIHRvIGEgc2luZ2xlIEZJRk8gaW4gbG9jYWwgbWVtb3J5Cit2b2lkIE1lcmdlcjo6bWVyZ2UoKQoreworICAgIGlmICh0cnVlKSByZXR1cm47IC8vIE1lcmdpbmcgaXMgbm90IG5lY2Vzc2FyeSBhdCB0aGUgbW9tZW50LCBzbyB0aGlzIGlzIHRvIGRpc2FibGUgaXQKKyAgICAgICAgICAgICAgICAgICAgICAvLyBhbmQgYnlwYXNzIGNvbXBpbGVyIHdhcm5pbmdzIGFib3V0IG1lbWJlciB2YXJpYWJsZXMgbm90IGJlaW5nIHVzZWQuCisgICAgY29uc3QgaW50IG5Mb2dzID0gbVJlYWRlcnMuc2l6ZSgpOworICAgIHN0ZDo6dmVjdG9yPHN0ZDo6dW5pcXVlX3B0cjxTbmFwc2hvdD4+IHNuYXBzaG90cyhuTG9ncyk7CisgICAgc3RkOjp2ZWN0b3I8RW50cnlJdGVyYXRvcj4gb2Zmc2V0czsKKyAgICBvZmZzZXRzLnJlc2VydmUobkxvZ3MpOworICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbkxvZ3M7ICsraSkgeworICAgICAgICBzbmFwc2hvdHNbaV0gPSBtUmVhZGVyc1tpXS0+Z2V0U25hcHNob3QoKTsKKyAgICAgICAgb2Zmc2V0cy5wdXNoX2JhY2soc25hcHNob3RzW2ldLT5iZWdpbigpKTsKKyAgICB9CisgICAgLy8gaW5pdGlhbGl6ZSBvZmZzZXRzCisgICAgLy8gVE9ETyBjdXN0b20gaGVhcCBpbXBsZW1lbnRhdGlvbiBjb3VsZCBhbGxvdyB0byB1cGRhdGUgdG9wLCBpbXByb3ZpbmcgcGVyZm9ybWFuY2UKKyAgICAvLyBmb3IgYnVyc3R5IGJ1ZmZlcnMKKyAgICBzdGQ6OnByaW9yaXR5X3F1ZXVlPE1lcmdlSXRlbSwgc3RkOjp2ZWN0b3I8TWVyZ2VJdGVtPiwgc3RkOjpncmVhdGVyPE1lcmdlSXRlbT4+IHRpbWVzdGFtcHM7CisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBuTG9nczsgKytpKQorICAgIHsKKyAgICAgICAgaWYgKG9mZnNldHNbaV0gIT0gc25hcHNob3RzW2ldLT5lbmQoKSkgeworICAgICAgICAgICAgc3RkOjp1bmlxdWVfcHRyPEFic3RyYWN0RW50cnk+IGFic3RyYWN0RW50cnkgPSBBYnN0cmFjdEVudHJ5OjpidWlsZEVudHJ5KG9mZnNldHNbaV0pOworICAgICAgICAgICAgaWYgKGFic3RyYWN0RW50cnkgPT0gbnVsbHB0cikgeworICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgfQorICAgICAgICAgICAgdGltZXN0YW1wcy5lbXBsYWNlKGFic3RyYWN0RW50cnktPnRpbWVzdGFtcCgpLCBpKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHdoaWxlICghdGltZXN0YW1wcy5lbXB0eSgpKSB7CisgICAgICAgIGludCBpbmRleCA9IHRpbWVzdGFtcHMudG9wKCkuaW5kZXg7ICAgICAvLyBmaW5kIG1pbmltdW0gdGltZXN0YW1wCisgICAgICAgIC8vIGNvcHkgaXQgdG8gdGhlIGxvZywgaW5jcmVhc2luZyBvZmZzZXQKKyAgICAgICAgb2Zmc2V0c1tpbmRleF0gPSBBYnN0cmFjdEVudHJ5OjpidWlsZEVudHJ5KG9mZnNldHNbaW5kZXhdKS0+CisgICAgICAgICAgICBjb3B5V2l0aEF1dGhvcihtRmlmb1dyaXRlciwgaW5kZXgpOworICAgICAgICAvLyB1cGRhdGUgZGF0YSBzdHJ1Y3R1cmVzCisgICAgICAgIHRpbWVzdGFtcHMucG9wKCk7CisgICAgICAgIGlmIChvZmZzZXRzW2luZGV4XSAhPSBzbmFwc2hvdHNbaW5kZXhdLT5lbmQoKSkgeworICAgICAgICAgICAgaW50NjRfdCB0cyA9IEFic3RyYWN0RW50cnk6OmJ1aWxkRW50cnkob2Zmc2V0c1tpbmRleF0pLT50aW1lc3RhbXAoKTsKKyAgICAgICAgICAgIHRpbWVzdGFtcHMuZW1wbGFjZSh0cywgaW5kZXgpOworICAgICAgICB9CisgICAgfQorfQorCitjb25zdCBzdGQ6OnZlY3RvcjxzcDxSZWFkZXI+PiYgTWVyZ2VyOjpnZXRSZWFkZXJzKCkgY29uc3QKK3sKKyAgICAvL0F1dG9NdXRleCBfbChtTG9jayk7CisgICAgcmV0dXJuIG1SZWFkZXJzOworfQorCisvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworTWVyZ2VSZWFkZXI6Ok1lcmdlUmVhZGVyKGNvbnN0IHZvaWQgKnNoYXJlZCwgc2l6ZV90IHNpemUsIE1lcmdlciAmbWVyZ2VyKQorICAgIDogUmVhZGVyKHNoYXJlZCwgc2l6ZSwgIk1lcmdlUmVhZGVyIiksIG1SZWFkZXJzKG1lcmdlci5nZXRSZWFkZXJzKCkpCit7Cit9CisKKy8vIFRha2VzIHJhdyBjb250ZW50IG9mIHRoZSBsb2NhbCBtZXJnZXIgRklGTywgcHJvY2Vzc2VzIGxvZyBlbnRyaWVzLCBhbmQKKy8vIHdyaXRlcyB0aGUgZGF0YSB0byBhIG1hcCBvZiBjbGFzcyBQZXJmb3JtYW5jZUFuYWx5c2lzLCBiYXNlZCBvbiB0aGVpciB0aHJlYWQgSUQuCit2b2lkIE1lcmdlUmVhZGVyOjpwcm9jZXNzU25hcHNob3QoU25hcHNob3QgJnNuYXBzaG90LCBpbnQgYXV0aG9yKQoreworICAgIFJlcG9ydFBlcmZvcm1hbmNlOjpQZXJmb3JtYW5jZURhdGEmIGRhdGEgPSBtVGhyZWFkUGVyZm9ybWFuY2VEYXRhW2F1dGhvcl07CisgICAgLy8gV2UgZG9uJ3QgZG8gImF1dG8gaXQiIGJlY2F1c2UgaXQgcmVkdWNlcyByZWFkYWJpbGl0eSBpbiB0aGlzIGNhc2UuCisgICAgZm9yIChFbnRyeUl0ZXJhdG9yIGl0ID0gc25hcHNob3QuYmVnaW4oKTsgaXQgIT0gc25hcHNob3QuZW5kKCk7ICsraXQpIHsKKyAgICAgICAgc3dpdGNoIChpdC0+dHlwZSkgeworICAgICAgICBjYXNlIEVWRU5UX0hJU1RPR1JBTV9FTlRSWV9UUzogeworICAgICAgICAgICAgY29uc3QgSGlzdFRzRW50cnkgcGF5bG9hZCA9IGl0LnBheWxvYWQ8SGlzdFRzRW50cnk+KCk7CisgICAgICAgICAgICAvLyBUT0RPOiBoYXNoIGZvciBoaXN0b2dyYW0gdHMgYW5kIGF1ZGlvIHN0YXRlIG5lZWQgdG8gbWF0Y2gKKyAgICAgICAgICAgIC8vIGFuZCBjb3JyZXNwb25kIHRvIGF1ZGlvIHByb2R1Y3Rpb24gc291cmNlIGZpbGUgbG9jYXRpb24KKyAgICAgICAgICAgIG1UaHJlYWRQZXJmb3JtYW5jZUFuYWx5c2lzW2F1dGhvcl1bMCAvKmhhc2gqL10ubG9nVHNFbnRyeShwYXlsb2FkLnRzKTsKKyAgICAgICAgfSBicmVhazsKKyAgICAgICAgY2FzZSBFVkVOVF9BVURJT19TVEFURTogeworICAgICAgICAgICAgbVRocmVhZFBlcmZvcm1hbmNlQW5hbHlzaXNbYXV0aG9yXVswIC8qaGFzaCovXS5oYW5kbGVTdGF0ZUNoYW5nZSgpOworICAgICAgICB9IGJyZWFrOworICAgICAgICBjYXNlIEVWRU5UX1RIUkVBRF9JTkZPOiB7CisgICAgICAgICAgICBjb25zdCB0aHJlYWRfaW5mb190IGluZm8gPSBpdC5wYXlsb2FkPHRocmVhZF9pbmZvX3Q+KCk7CisgICAgICAgICAgICBkYXRhLnRocmVhZEluZm8gPSBpbmZvOworICAgICAgICB9IGJyZWFrOworICAgICAgICBjYXNlIEVWRU5UX1RIUkVBRF9QQVJBTVM6IHsKKyAgICAgICAgICAgIGNvbnN0IHRocmVhZF9wYXJhbXNfdCBwYXJhbXMgPSBpdC5wYXlsb2FkPHRocmVhZF9wYXJhbXNfdD4oKTsKKyAgICAgICAgICAgIGRhdGEudGhyZWFkUGFyYW1zID0gcGFyYW1zOworICAgICAgICB9IGJyZWFrOworICAgICAgICBjYXNlIEVWRU5UX0xBVEVOQ1k6IHsKKyAgICAgICAgICAgIGNvbnN0IGRvdWJsZSBsYXRlbmN5TXMgPSBpdC5wYXlsb2FkPGRvdWJsZT4oKTsKKyAgICAgICAgICAgIGRhdGEubGF0ZW5jeUhpc3QuYWRkKGxhdGVuY3lNcyk7CisgICAgICAgIH0gYnJlYWs7CisgICAgICAgIGNhc2UgRVZFTlRfV09SS19USU1FOiB7CisgICAgICAgICAgICBjb25zdCBpbnQ2NF90IG1vbm90b25pY05zID0gaXQucGF5bG9hZDxpbnQ2NF90PigpOworICAgICAgICAgICAgY29uc3QgZG91YmxlIG1vbm90b25pY01zID0gbW9ub3RvbmljTnMgKiAxZS02OworICAgICAgICAgICAgZGF0YS53b3JrSGlzdC5hZGQobW9ub3RvbmljTXMpOworICAgICAgICAgICAgZGF0YS5hY3RpdmUgKz0gbW9ub3RvbmljTnM7CisgICAgICAgIH0gYnJlYWs7CisgICAgICAgIGNhc2UgRVZFTlRfV0FSTVVQX1RJTUU6IHsKKyAgICAgICAgICAgIGNvbnN0IGRvdWJsZSB0aW1lTXMgPSBpdC5wYXlsb2FkPGRvdWJsZT4oKTsKKyAgICAgICAgICAgIGRhdGEud2FybXVwSGlzdC5hZGQodGltZU1zKTsKKyAgICAgICAgfSBicmVhazsKKyAgICAgICAgY2FzZSBFVkVOVF9VTkRFUlJVTjogeworICAgICAgICAgICAgY29uc3QgaW50NjRfdCB0cyA9IGl0LnBheWxvYWQ8aW50NjRfdD4oKTsKKyAgICAgICAgICAgIGRhdGEudW5kZXJydW5zKys7CisgICAgICAgICAgICBkYXRhLnNuYXBzaG90cy5lbXBsYWNlX2Zyb250KEVWRU5UX1VOREVSUlVOLCB0cyk7CisgICAgICAgICAgICAvLyBUT0RPIGhhdmUgYSBkYXRhIHN0cnVjdHVyZSB0byBhdXRvbWF0aWNhbGx5IGhhbmRsZSByZXNpemluZworICAgICAgICAgICAgaWYgKGRhdGEuc25hcHNob3RzLnNpemUoKSA+IFJlcG9ydFBlcmZvcm1hbmNlOjpQZXJmb3JtYW5jZURhdGE6OmtNYXhTbmFwc2hvdHNUb1N0b3JlKSB7CisgICAgICAgICAgICAgICAgZGF0YS5zbmFwc2hvdHMucG9wX2JhY2soKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSBicmVhazsKKyAgICAgICAgY2FzZSBFVkVOVF9PVkVSUlVOOiB7CisgICAgICAgICAgICBjb25zdCBpbnQ2NF90IHRzID0gaXQucGF5bG9hZDxpbnQ2NF90PigpOworICAgICAgICAgICAgZGF0YS5vdmVycnVucysrOworICAgICAgICAgICAgZGF0YS5zbmFwc2hvdHMuZW1wbGFjZV9mcm9udChFVkVOVF9VTkRFUlJVTiwgdHMpOworICAgICAgICAgICAgLy8gVE9ETyBoYXZlIGEgZGF0YSBzdHJ1Y3R1cmUgdG8gYXV0b21hdGljYWxseSBoYW5kbGUgcmVzaXppbmcKKyAgICAgICAgICAgIGlmIChkYXRhLnNuYXBzaG90cy5zaXplKCkgPiBSZXBvcnRQZXJmb3JtYW5jZTo6UGVyZm9ybWFuY2VEYXRhOjprTWF4U25hcHNob3RzVG9TdG9yZSkgeworICAgICAgICAgICAgICAgIGRhdGEuc25hcHNob3RzLnBvcF9iYWNrKCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0gYnJlYWs7CisgICAgICAgIGNhc2UgRVZFTlRfUkVTRVJWRUQ6CisgICAgICAgIGNhc2UgRVZFTlRfVVBQRVJfQk9VTkQ6CisgICAgICAgICAgICBBTE9HVygid2FybmluZzogdW5leHBlY3RlZCBldmVudCAlZCIsIGl0LT50eXBlKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICB9Cit9CisKK3ZvaWQgTWVyZ2VSZWFkZXI6OmdldEFuZFByb2Nlc3NTbmFwc2hvdCgpCit7CisgICAgLy8gZ2V0IGEgc25hcHNob3Qgb2YgZWFjaCByZWFkZXIgYW5kIHByb2Nlc3MgdGhlbQorICAgIC8vIFRPRE8gaW5zZXJ0IGxvY2sgaGVyZQorICAgIGNvbnN0IHNpemVfdCBuTG9ncyA9IG1SZWFkZXJzLnNpemUoKTsKKyAgICBzdGQ6OnZlY3RvcjxzdGQ6OnVuaXF1ZV9wdHI8U25hcHNob3Q+PiBzbmFwc2hvdHMobkxvZ3MpOworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbkxvZ3M7IGkrKykgeworICAgICAgICBzbmFwc2hvdHNbaV0gPSBtUmVhZGVyc1tpXS0+Z2V0U25hcHNob3QoKTsKKyAgICB9CisgICAgLy8gVE9ETyB1bmxvY2sgbG9jayBoZXJlCisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBuTG9nczsgaSsrKSB7CisgICAgICAgIGlmIChzbmFwc2hvdHNbaV0gIT0gbnVsbHB0cikgeworICAgICAgICAgICAgcHJvY2Vzc1NuYXBzaG90KCooc25hcHNob3RzW2ldKSwgaSk7CisgICAgICAgIH0KKyAgICB9CisgICAgY2hlY2tQdXNoVG9NZWRpYU1ldHJpY3MoKTsKK30KKwordm9pZCBNZXJnZVJlYWRlcjo6Y2hlY2tQdXNoVG9NZWRpYU1ldHJpY3MoKQoreworICAgIGNvbnN0IG5zZWNzX3Qgbm93ID0gc3lzdGVtVGltZSgpOworICAgIGZvciAoYXV0byYgaXRlbSA6IG1UaHJlYWRQZXJmb3JtYW5jZURhdGEpIHsKKyAgICAgICAgUmVwb3J0UGVyZm9ybWFuY2U6OlBlcmZvcm1hbmNlRGF0YSYgZGF0YSA9IGl0ZW0uc2Vjb25kOworICAgICAgICBpZiAobm93IC0gZGF0YS5zdGFydCA+PSBrUGVyaW9kaWNNZWRpYU1ldHJpY3NQdXNoKSB7CisgICAgICAgICAgICAodm9pZClSZXBvcnRQZXJmb3JtYW5jZTo6c2VuZFRvTWVkaWFNZXRyaWNzKGRhdGEpOworICAgICAgICAgICAgZGF0YS5yZXNldCgpOyAgIC8vIGRhdGEgaXMgcGVyc2lzdGVudCBwZXIgdGhyZWFkCisgICAgICAgIH0KKyAgICB9Cit9CisKK3ZvaWQgTWVyZ2VSZWFkZXI6OmR1bXAoaW50IGZkLCBjb25zdCBWZWN0b3I8U3RyaW5nMTY+JiBhcmdzKQoreworICAgIC8vIFRPRE86IGFkZCBhIG11dGV4IGFyb3VuZCBtZWRpYS5sb2cgZHVtcAorICAgIC8vIE9wdGlvbnMgZm9yIGR1bXBzeXMKKyAgICBib29sIHBhID0gZmFsc2UsIGpzb24gPSBmYWxzZSwgcGxvdHMgPSBmYWxzZSwgcmV0cm8gPSBmYWxzZTsKKyAgICBmb3IgKGNvbnN0IGF1dG8gJmFyZyA6IGFyZ3MpIHsKKyAgICAgICAgaWYgKGFyZyA9PSBTdHJpbmcxNigiLS1wYSIpKSB7CisgICAgICAgICAgICBwYSA9IHRydWU7CisgICAgICAgIH0gZWxzZSBpZiAoYXJnID09IFN0cmluZzE2KCItLWpzb24iKSkgeworICAgICAgICAgICAganNvbiA9IHRydWU7CisgICAgICAgIH0gZWxzZSBpZiAoYXJnID09IFN0cmluZzE2KCItLXBsb3RzIikpIHsKKyAgICAgICAgICAgIHBsb3RzID0gdHJ1ZTsKKyAgICAgICAgfSBlbHNlIGlmIChhcmcgPT0gU3RyaW5nMTYoIi0tcmV0cm8iKSkgeworICAgICAgICAgICAgcmV0cm8gPSB0cnVlOworICAgICAgICB9CisgICAgfQorICAgIGlmIChwYSkgeworICAgICAgICBSZXBvcnRQZXJmb3JtYW5jZTo6ZHVtcChmZCwgMCAvKmluZGVudCovLCBtVGhyZWFkUGVyZm9ybWFuY2VBbmFseXNpcyk7CisgICAgfQorICAgIGlmIChqc29uKSB7CisgICAgICAgIFJlcG9ydFBlcmZvcm1hbmNlOjpkdW1wSnNvbihmZCwgbVRocmVhZFBlcmZvcm1hbmNlRGF0YSk7CisgICAgfQorICAgIGlmIChwbG90cykgeworICAgICAgICBSZXBvcnRQZXJmb3JtYW5jZTo6ZHVtcFBsb3RzKGZkLCBtVGhyZWFkUGVyZm9ybWFuY2VEYXRhKTsKKyAgICB9CisgICAgaWYgKHJldHJvKSB7CisgICAgICAgIFJlcG9ydFBlcmZvcm1hbmNlOjpkdW1wUmV0cm8oZmQsIG1UaHJlYWRQZXJmb3JtYW5jZURhdGEpOworICAgIH0KK30KKwordm9pZCBNZXJnZVJlYWRlcjo6aGFuZGxlQXV0aG9yKGNvbnN0IEFic3RyYWN0RW50cnkgJmVudHJ5LCBTdHJpbmc4ICpib2R5KQoreworICAgIGludCBhdXRob3IgPSBlbnRyeS5hdXRob3IoKTsKKyAgICBpZiAoYXV0aG9yID09IC0xKSB7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgLy8gRklYTUUgTmVlZHMgYSBsb2NrCisgICAgY29uc3QgY2hhciogbmFtZSA9IG1SZWFkZXJzW2F1dGhvcl0tPm5hbWUoKS5jX3N0cigpOworICAgIGJvZHktPmFwcGVuZEZvcm1hdCgiJXM6ICIsIG5hbWUpOworfQorCisvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworTWVyZ2VUaHJlYWQ6Ok1lcmdlVGhyZWFkKE1lcmdlciAmbWVyZ2VyLCBNZXJnZVJlYWRlciAmbWVyZ2VSZWFkZXIpCisgICAgOiBtTWVyZ2VyKG1lcmdlciksCisgICAgICBtTWVyZ2VSZWFkZXIobWVyZ2VSZWFkZXIpLAorICAgICAgbVRpbWVvdXRVcygwKQoreworfQorCitNZXJnZVRocmVhZDo6fk1lcmdlVGhyZWFkKCkKK3sKKyAgICAvLyBzZXQgZXhpdCBmbGFnLCBzZXQgdGltZW91dCB0byAwIHRvIGZvcmNlIHRocmVhZExvb3AgdG8gZXhpdCBhbmQgd2FpdCBmb3IgdGhlIHRocmVhZCB0byBqb2luCisgICAgcmVxdWVzdEV4aXQoKTsKKyAgICBzZXRUaW1lb3V0VXMoMCk7CisgICAgam9pbigpOworfQorCitib29sIE1lcmdlVGhyZWFkOjp0aHJlYWRMb29wKCkKK3sKKyAgICBib29sIGRvTWVyZ2U7CisgICAgeworICAgICAgICBBdXRvTXV0ZXggX2wobU11dGV4KTsKKyAgICAgICAgLy8gSWYgbVRpbWVvdXRVcyBpcyBuZWdhdGl2ZSwgd2FpdCBvbiB0aGUgY29uZGl0aW9uIHZhcmlhYmxlIHVudGlsIGl0J3MgcG9zaXRpdmUuCisgICAgICAgIC8vIElmIGl0J3MgcG9zaXRpdmUsIG1lcmdlLiBUaGUgbWluaW11bSBwZXJpb2QgYmV0d2VlbiB3YWtpbmcgdGhlIGNvbmRpdGlvbiB2YXJpYWJsZQorICAgICAgICAvLyBpcyBoYW5kbGVkIGluIEF1ZGlvRmxpbmdlcjo6TWVkaWFMb2dOb3RpZmllcjo6dGhyZWFkTG9vcCgpLgorICAgICAgICBtQ29uZC53YWl0KG1NdXRleCk7CisgICAgICAgIGRvTWVyZ2UgPSBtVGltZW91dFVzID4gMDsKKyAgICAgICAgbVRpbWVvdXRVcyAtPSBrVGhyZWFkU2xlZXBQZXJpb2RVczsKKyAgICB9CisgICAgaWYgKGRvTWVyZ2UpIHsKKyAgICAgICAgLy8gTWVyZ2UgZGF0YSBmcm9tIGFsbCB0aGUgcmVhZGVycworICAgICAgICBtTWVyZ2VyLm1lcmdlKCk7CisgICAgICAgIC8vIFByb2Nlc3MgdGhlIGRhdGEgY29sbGVjdGVkIGJ5IG1NZXJnZXIgYW5kIHdyaXRlIGl0IHRvIFBlcmZvcm1hbmNlQW5hbHlzaXMKKyAgICAgICAgLy8gRklYTUU6IGRlY2lkZSB3aGV0aGVyIHRvIGNhbGwgZ2V0QW5kUHJvY2Vzc1NuYXBzaG90IGV2ZXJ5IHRpbWUKKyAgICAgICAgLy8gb3Igd2hldGhlciB0byBoYXZlIGEgc2VwYXJhdGUgdGhyZWFkIHRoYXQgY2FsbHMgaXQgd2l0aCBhIGxvd2VyIGZyZXF1ZW5jeQorICAgICAgICBtTWVyZ2VSZWFkZXIuZ2V0QW5kUHJvY2Vzc1NuYXBzaG90KCk7CisgICAgfQorICAgIHJldHVybiB0cnVlOworfQorCit2b2lkIE1lcmdlVGhyZWFkOjp3YWtldXAoKQoreworICAgIHNldFRpbWVvdXRVcyhrVGhyZWFkV2FrZXVwUGVyaW9kVXMpOworfQorCit2b2lkIE1lcmdlVGhyZWFkOjpzZXRUaW1lb3V0VXMoaW50IHRpbWUpCit7CisgICAgQXV0b011dGV4IF9sKG1NdXRleCk7CisgICAgbVRpbWVvdXRVcyA9IHRpbWU7CisgICAgbUNvbmQuc2lnbmFsKCk7Cit9CisKK30gICAvLyBuYW1lc3BhY2UgTkJMb2cKK30gICAvLyBuYW1lc3BhY2UgYW5kcm9pZApkaWZmIC0tZ2l0IGEvbWVkaWEvbGlibmJsb2cvTkJMb2cuY3BwIGIvbWVkaWEvbGlibmJsb2cvTkJMb2cuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkNmZhM2UzLi4wMDAwMDAwCi0tLSBhL21lZGlhL2xpYm5ibG9nL05CTG9nLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDExNTcgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0Ci0gKgotICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7Ci0gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCi0gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLSAqCi0gKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotICoKLSAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKLSAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCi0gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KLSAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKLSAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgotICoKLSAqCi0gKi8KLQotI2RlZmluZSBMT0dfVEFHICJOQkxvZyIKLQotI2luY2x1ZGUgPGFsZ29yaXRobT4KLSNpbmNsdWRlIDxjbGltaXRzPgotI2luY2x1ZGUgPGRlcXVlPgotI2luY2x1ZGUgPGZzdHJlYW0+Ci0jaW5jbHVkZSA8aW9zdHJlYW0+Ci0jaW5jbHVkZSA8bWF0aC5oPgotI2luY2x1ZGUgPG51bWVyaWM+Ci0jaW5jbHVkZSA8dmVjdG9yPgotI2luY2x1ZGUgPHN0ZGFyZy5oPgotI2luY2x1ZGUgPHN0ZGludC5oPgotI2luY2x1ZGUgPHN0ZGlvLmg+Ci0jaW5jbHVkZSA8c3RyaW5nLmg+Ci0jaW5jbHVkZSA8c3lzL3ByY3RsLmg+Ci0jaW5jbHVkZSA8dGltZS5oPgotI2luY2x1ZGUgPG5ldz4KLSNpbmNsdWRlIDxhdWRpb191dGlscy9yb3VuZHVwLmg+Ci0jaW5jbHVkZSA8bWVkaWEvbmJsb2cvTkJMb2cuaD4KLSNpbmNsdWRlIDxtZWRpYS9uYmxvZy9QZXJmb3JtYW5jZUFuYWx5c2lzLmg+Ci0jaW5jbHVkZSA8bWVkaWEvbmJsb2cvUmVwb3J0UGVyZm9ybWFuY2UuaD4KLSNpbmNsdWRlIDx1dGlscy9DYWxsU3RhY2suaD4KLSNpbmNsdWRlIDx1dGlscy9Mb2cuaD4KLSNpbmNsdWRlIDx1dGlscy9TdHJpbmc4Lmg+Ci0KLSNpbmNsdWRlIDxxdWV1ZT4KLSNpbmNsdWRlIDx1dGlsaXR5PgotCi1uYW1lc3BhY2UgYW5kcm9pZCB7Ci0KLWludCBOQkxvZzo6RW50cnk6OmNvcHlFbnRyeURhdGFBdChzaXplX3Qgb2Zmc2V0KSBjb25zdAotewotICAgIC8vIEZJWE1FIFRoaXMgaXMgdG9vIHNsb3cKLSAgICBpZiAob2Zmc2V0ID09IDApCi0gICAgICAgIHJldHVybiBtRXZlbnQ7Ci0gICAgZWxzZSBpZiAob2Zmc2V0ID09IDEpCi0gICAgICAgIHJldHVybiBtTGVuZ3RoOwotICAgIGVsc2UgaWYgKG9mZnNldCA8IChzaXplX3QpIChtTGVuZ3RoICsgMikpCi0gICAgICAgIHJldHVybiAoKGNoYXIgKikgbURhdGEpW29mZnNldCAtIDJdOwotICAgIGVsc2UgaWYgKG9mZnNldCA9PSAoc2l6ZV90KSAobUxlbmd0aCArIDIpKQotICAgICAgICByZXR1cm4gbUxlbmd0aDsKLSAgICBlbHNlCi0gICAgICAgIHJldHVybiAwOwotfQotCi0vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotLypzdGF0aWMqLwotc3RkOjp1bmlxdWVfcHRyPE5CTG9nOjpBYnN0cmFjdEVudHJ5PiBOQkxvZzo6QWJzdHJhY3RFbnRyeTo6YnVpbGRFbnRyeShjb25zdCB1aW50OF90ICpwdHIpIHsKLSAgICBjb25zdCB1aW50OF90IHR5cGUgPSBFbnRyeUl0ZXJhdG9yKHB0ciktPnR5cGU7Ci0gICAgc3dpdGNoICh0eXBlKSB7Ci0gICAgY2FzZSBFVkVOVF9TVEFSVF9GTVQ6Ci0gICAgICAgIHJldHVybiBzdGQ6Om1ha2VfdW5pcXVlPEZvcm1hdEVudHJ5PihGb3JtYXRFbnRyeShwdHIpKTsKLSAgICBjYXNlIEVWRU5UX0FVRElPX1NUQVRFOgotICAgIGNhc2UgRVZFTlRfSElTVE9HUkFNX0VOVFJZX1RTOgotICAgICAgICByZXR1cm4gc3RkOjptYWtlX3VuaXF1ZTxIaXN0b2dyYW1FbnRyeT4oSGlzdG9ncmFtRW50cnkocHRyKSk7Ci0gICAgZGVmYXVsdDoKLSAgICAgICAgQUxPR1coIlRyaWVkIHRvIGNyZWF0ZSBBYnN0cmFjdEVudHJ5IG9mIHR5cGUgJWQiLCB0eXBlKTsKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgfQotfQotCi1OQkxvZzo6QWJzdHJhY3RFbnRyeTo6QWJzdHJhY3RFbnRyeShjb25zdCB1aW50OF90ICplbnRyeSkgOiBtRW50cnkoZW50cnkpIHsKLX0KLQotLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLU5CTG9nOjpFbnRyeUl0ZXJhdG9yIE5CTG9nOjpGb3JtYXRFbnRyeTo6YmVnaW4oKSBjb25zdCB7Ci0gICAgcmV0dXJuIEVudHJ5SXRlcmF0b3IobUVudHJ5KTsKLX0KLQotY29uc3QgY2hhciAqTkJMb2c6OkZvcm1hdEVudHJ5Ojpmb3JtYXRTdHJpbmcoKSBjb25zdCB7Ci0gICAgcmV0dXJuIChjb25zdCBjaGFyKikgbUVudHJ5ICsgb2Zmc2V0b2YoZW50cnksIGRhdGEpOwotfQotCi1zaXplX3QgTkJMb2c6OkZvcm1hdEVudHJ5Ojpmb3JtYXRTdHJpbmdMZW5ndGgoKSBjb25zdCB7Ci0gICAgcmV0dXJuIG1FbnRyeVtvZmZzZXRvZihlbnRyeSwgbGVuZ3RoKV07Ci19Ci0KLU5CTG9nOjpFbnRyeUl0ZXJhdG9yIE5CTG9nOjpGb3JtYXRFbnRyeTo6YXJncygpIGNvbnN0IHsKLSAgICBhdXRvIGl0ID0gYmVnaW4oKTsKLSAgICAvLyBza2lwIHN0YXJ0IGZtdAotICAgICsraXQ7Ci0gICAgLy8gc2tpcCB0aW1lc3RhbXAKLSAgICArK2l0OwotICAgIC8vIHNraXAgaGFzaAotICAgICsraXQ7Ci0gICAgLy8gU2tpcCBhdXRob3IgaWYgcHJlc2VudAotICAgIGlmIChpdC0+dHlwZSA9PSBFVkVOVF9BVVRIT1IpIHsKLSAgICAgICAgKytpdDsKLSAgICB9Ci0gICAgcmV0dXJuIGl0OwotfQotCi1pbnQ2NF90IE5CTG9nOjpGb3JtYXRFbnRyeTo6dGltZXN0YW1wKCkgY29uc3QgewotICAgIGF1dG8gaXQgPSBiZWdpbigpOwotICAgIC8vIHNraXAgc3RhcnQgZm10Ci0gICAgKytpdDsKLSAgICByZXR1cm4gaXQucGF5bG9hZDxpbnQ2NF90PigpOwotfQotCi1OQkxvZzo6bG9nX2hhc2hfdCBOQkxvZzo6Rm9ybWF0RW50cnk6Omhhc2goKSBjb25zdCB7Ci0gICAgYXV0byBpdCA9IGJlZ2luKCk7Ci0gICAgLy8gc2tpcCBzdGFydCBmbXQKLSAgICArK2l0OwotICAgIC8vIHNraXAgdGltZXN0YW1wCi0gICAgKytpdDsKLSAgICAvLyB1bmFsaWduZWQgNjQtYml0IHJlYWQgbm90IHN1cHBvcnRlZAotICAgIGxvZ19oYXNoX3QgaGFzaDsKLSAgICBtZW1jcHkoJmhhc2gsIGl0LT5kYXRhLCBzaXplb2YoaGFzaCkpOwotICAgIHJldHVybiBoYXNoOwotfQotCi1pbnQgTkJMb2c6OkZvcm1hdEVudHJ5OjphdXRob3IoKSBjb25zdCB7Ci0gICAgYXV0byBpdCA9IGJlZ2luKCk7Ci0gICAgLy8gc2tpcCBzdGFydCBmbXQKLSAgICArK2l0OwotICAgIC8vIHNraXAgdGltZXN0YW1wCi0gICAgKytpdDsKLSAgICAvLyBza2lwIGhhc2gKLSAgICArK2l0OwotICAgIC8vIGlmIHRoZXJlIGlzIGFuIGF1dGhvciBlbnRyeSwgcmV0dXJuIGl0LCByZXR1cm4gLTEgb3RoZXJ3aXNlCi0gICAgaWYgKGl0LT50eXBlID09IEVWRU5UX0FVVEhPUikgewotICAgICAgICByZXR1cm4gaXQucGF5bG9hZDxpbnQ+KCk7Ci0gICAgfQotICAgIHJldHVybiAtMTsKLX0KLQotTkJMb2c6OkVudHJ5SXRlcmF0b3IgTkJMb2c6OkZvcm1hdEVudHJ5Ojpjb3B5V2l0aEF1dGhvcigKLSAgICAgICAgc3RkOjp1bmlxdWVfcHRyPGF1ZGlvX3V0aWxzX2ZpZm9fd3JpdGVyPiAmZHN0LCBpbnQgYXV0aG9yKSBjb25zdCB7Ci0gICAgYXV0byBpdCA9IGJlZ2luKCk7Ci0gICAgLy8gY29weSBmbXQgc3RhcnQgZW50cnkKLSAgICBpdC5jb3B5VG8oZHN0KTsKLSAgICAvLyBjb3B5IHRpbWVzdGFtcAotICAgICgrK2l0KS5jb3B5VG8oZHN0KTsgICAgLy8gY29weSBoYXNoCi0gICAgKCsraXQpLmNvcHlUbyhkc3QpOwotICAgIC8vIGluc2VydCBhdXRob3IgZW50cnkKLSAgICBzaXplX3QgYXV0aG9yRW50cnlTaXplID0gTkJMb2c6OkVudHJ5OjprT3ZlcmhlYWQgKyBzaXplb2YoYXV0aG9yKTsKLSAgICB1aW50OF90IGF1dGhvckVudHJ5W2F1dGhvckVudHJ5U2l6ZV07Ci0gICAgYXV0aG9yRW50cnlbb2Zmc2V0b2YoZW50cnksIHR5cGUpXSA9IEVWRU5UX0FVVEhPUjsKLSAgICBhdXRob3JFbnRyeVtvZmZzZXRvZihlbnRyeSwgbGVuZ3RoKV0gPQotICAgICAgICBhdXRob3JFbnRyeVthdXRob3JFbnRyeVNpemUgKyBOQkxvZzo6RW50cnk6OmtQcmV2aW91c0xlbmd0aE9mZnNldF0gPQotICAgICAgICBzaXplb2YoYXV0aG9yKTsKLSAgICAqKGludCopICgmYXV0aG9yRW50cnlbb2Zmc2V0b2YoZW50cnksIGRhdGEpXSkgPSBhdXRob3I7Ci0gICAgZHN0LT53cml0ZShhdXRob3JFbnRyeSwgYXV0aG9yRW50cnlTaXplKTsKLSAgICAvLyBjb3B5IHJlc3Qgb2YgZW50cmllcwotICAgIHdoaWxlICgoKytpdCktPnR5cGUgIT0gRVZFTlRfRU5EX0ZNVCkgewotICAgICAgICBpdC5jb3B5VG8oZHN0KTsKLSAgICB9Ci0gICAgaXQuY29weVRvKGRzdCk7Ci0gICAgKytpdDsKLSAgICByZXR1cm4gaXQ7Ci19Ci0KLXZvaWQgTkJMb2c6OkVudHJ5SXRlcmF0b3I6OmNvcHlUbyhzdGQ6OnVuaXF1ZV9wdHI8YXVkaW9fdXRpbHNfZmlmb193cml0ZXI+ICZkc3QpIGNvbnN0IHsKLSAgICBzaXplX3QgbGVuZ3RoID0gcHRyW29mZnNldG9mKGVudHJ5LCBsZW5ndGgpXSArIE5CTG9nOjpFbnRyeTo6a092ZXJoZWFkOwotICAgIGRzdC0+d3JpdGUocHRyLCBsZW5ndGgpOwotfQotCi12b2lkIE5CTG9nOjpFbnRyeUl0ZXJhdG9yOjpjb3B5RGF0YSh1aW50OF90ICpkc3QpIGNvbnN0IHsKLSAgICBtZW1jcHkoKHZvaWQqKSBkc3QsIHB0ciArIG9mZnNldG9mKGVudHJ5LCBkYXRhKSwgcHRyW29mZnNldG9mKGVudHJ5LCBsZW5ndGgpXSk7Ci19Ci0KLU5CTG9nOjpFbnRyeUl0ZXJhdG9yOjpFbnRyeUl0ZXJhdG9yKCkKLSAgICA6IHB0cihudWxscHRyKSB7fQotCi1OQkxvZzo6RW50cnlJdGVyYXRvcjo6RW50cnlJdGVyYXRvcihjb25zdCB1aW50OF90ICplbnRyeSkKLSAgICA6IHB0cihlbnRyeSkge30KLQotTkJMb2c6OkVudHJ5SXRlcmF0b3I6OkVudHJ5SXRlcmF0b3IoY29uc3QgTkJMb2c6OkVudHJ5SXRlcmF0b3IgJm90aGVyKQotICAgIDogcHRyKG90aGVyLnB0cikge30KLQotY29uc3QgTkJMb2c6OmVudHJ5JiBOQkxvZzo6RW50cnlJdGVyYXRvcjo6b3BlcmF0b3IqKCkgY29uc3QgewotICAgIHJldHVybiAqKGVudHJ5KikgcHRyOwotfQotCi1jb25zdCBOQkxvZzo6ZW50cnkqIE5CTG9nOjpFbnRyeUl0ZXJhdG9yOjpvcGVyYXRvci0+KCkgY29uc3QgewotICAgIHJldHVybiAoZW50cnkqKSBwdHI7Ci19Ci0KLU5CTG9nOjpFbnRyeUl0ZXJhdG9yJiBOQkxvZzo6RW50cnlJdGVyYXRvcjo6b3BlcmF0b3IrKygpIHsKLSAgICBwdHIgKz0gcHRyW29mZnNldG9mKGVudHJ5LCBsZW5ndGgpXSArIE5CTG9nOjpFbnRyeTo6a092ZXJoZWFkOwotICAgIHJldHVybiAqdGhpczsKLX0KLQotTkJMb2c6OkVudHJ5SXRlcmF0b3ImIE5CTG9nOjpFbnRyeUl0ZXJhdG9yOjpvcGVyYXRvci0tKCkgewotICAgIHB0ciAtPSBwdHJbTkJMb2c6OkVudHJ5OjprUHJldmlvdXNMZW5ndGhPZmZzZXRdICsgTkJMb2c6OkVudHJ5OjprT3ZlcmhlYWQ7Ci0gICAgcmV0dXJuICp0aGlzOwotfQotCi1OQkxvZzo6RW50cnlJdGVyYXRvciBOQkxvZzo6RW50cnlJdGVyYXRvcjo6bmV4dCgpIGNvbnN0IHsKLSAgICBFbnRyeUl0ZXJhdG9yIGF1eCgqdGhpcyk7Ci0gICAgcmV0dXJuICsrYXV4OwotfQotCi1OQkxvZzo6RW50cnlJdGVyYXRvciBOQkxvZzo6RW50cnlJdGVyYXRvcjo6cHJldigpIGNvbnN0IHsKLSAgICBFbnRyeUl0ZXJhdG9yIGF1eCgqdGhpcyk7Ci0gICAgcmV0dXJuIC0tYXV4OwotfQotCi1pbnQgTkJMb2c6OkVudHJ5SXRlcmF0b3I6Om9wZXJhdG9yLShjb25zdCBOQkxvZzo6RW50cnlJdGVyYXRvciAmb3RoZXIpIGNvbnN0IHsKLSAgICByZXR1cm4gcHRyIC0gb3RoZXIucHRyOwotfQotCi1ib29sIE5CTG9nOjpFbnRyeUl0ZXJhdG9yOjpvcGVyYXRvciE9KGNvbnN0IEVudHJ5SXRlcmF0b3IgJm90aGVyKSBjb25zdCB7Ci0gICAgcmV0dXJuIHB0ciAhPSBvdGhlci5wdHI7Ci19Ci0KLWJvb2wgTkJMb2c6OkVudHJ5SXRlcmF0b3I6Omhhc0NvbnNpc3RlbnRMZW5ndGgoKSBjb25zdCB7Ci0gICAgcmV0dXJuIHB0cltvZmZzZXRvZihlbnRyeSwgbGVuZ3RoKV0gPT0gcHRyW3B0cltvZmZzZXRvZihlbnRyeSwgbGVuZ3RoKV0gKwotICAgICAgICBOQkxvZzo6RW50cnk6OmtPdmVyaGVhZCArIE5CTG9nOjpFbnRyeTo6a1ByZXZpb3VzTGVuZ3RoT2Zmc2V0XTsKLX0KLQotLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLWludDY0X3QgTkJMb2c6Okhpc3RvZ3JhbUVudHJ5Ojp0aW1lc3RhbXAoKSBjb25zdCB7Ci0gICAgcmV0dXJuIEVudHJ5SXRlcmF0b3IobUVudHJ5KS5wYXlsb2FkPEhpc3RUc0VudHJ5PigpLnRzOwotfQotCi1OQkxvZzo6bG9nX2hhc2hfdCBOQkxvZzo6SGlzdG9ncmFtRW50cnk6Omhhc2goKSBjb25zdCB7Ci0gICAgcmV0dXJuIEVudHJ5SXRlcmF0b3IobUVudHJ5KS5wYXlsb2FkPEhpc3RUc0VudHJ5PigpLmhhc2g7Ci19Ci0KLWludCBOQkxvZzo6SGlzdG9ncmFtRW50cnk6OmF1dGhvcigpIGNvbnN0IHsKLSAgICBFbnRyeUl0ZXJhdG9yIGl0KG1FbnRyeSk7Ci0gICAgaWYgKGl0LT5sZW5ndGggPT0gc2l6ZW9mKEhpc3RUc0VudHJ5V2l0aEF1dGhvcikpIHsKLSAgICAgICAgcmV0dXJuIGl0LnBheWxvYWQ8SGlzdFRzRW50cnlXaXRoQXV0aG9yPigpLmF1dGhvcjsKLSAgICB9IGVsc2UgewotICAgICAgICByZXR1cm4gLTE7Ci0gICAgfQotfQotCi1OQkxvZzo6RW50cnlJdGVyYXRvciBOQkxvZzo6SGlzdG9ncmFtRW50cnk6OmNvcHlXaXRoQXV0aG9yKAotICAgICAgICBzdGQ6OnVuaXF1ZV9wdHI8YXVkaW9fdXRpbHNfZmlmb193cml0ZXI+ICZkc3QsIGludCBhdXRob3IpIGNvbnN0IHsKLSAgICAvLyBDdXJyZW50IGhpc3RvZ3JhbSBlbnRyeSBoYXMge3R5cGUsIGxlbmd0aCwgc3RydWN0IEhpc3RUc0VudHJ5LCBsZW5ndGh9LgotICAgIC8vIFdlIG5vdyB3YW50IHt0eXBlLCBsZW5ndGgsIHN0cnVjdCBIaXN0VHNFbnRyeVdpdGhBdXRob3IsIGxlbmd0aH0KLSAgICB1aW50OF90IGJ1ZmZlcltFbnRyeTo6a092ZXJoZWFkICsgc2l6ZW9mKEhpc3RUc0VudHJ5V2l0aEF1dGhvcildOwotICAgIC8vIENvcHkgY29udGVudCB1bnRpbCB0aGUgcG9pbnQgd2Ugd2FudCB0byBhZGQgdGhlIGF1dGhvcgotICAgIG1lbWNweShidWZmZXIsIG1FbnRyeSwgc2l6ZW9mKGVudHJ5KSArIHNpemVvZihIaXN0VHNFbnRyeSkpOwotICAgIC8vIENvcHkgdGhlIGF1dGhvcgotICAgICooaW50KikgKGJ1ZmZlciArIHNpemVvZihlbnRyeSkgKyBzaXplb2YoSGlzdFRzRW50cnkpKSA9IGF1dGhvcjsKLSAgICAvLyBVcGRhdGUgbGVuZ3RocwotICAgIGJ1ZmZlcltvZmZzZXRvZihlbnRyeSwgbGVuZ3RoKV0gPSBzaXplb2YoSGlzdFRzRW50cnlXaXRoQXV0aG9yKTsKLSAgICBidWZmZXJbb2Zmc2V0b2YoZW50cnksIGRhdGEpICsgc2l6ZW9mKEhpc3RUc0VudHJ5V2l0aEF1dGhvcikgKyBvZmZzZXRvZihlbmRpbmcsIGxlbmd0aCldCi0gICAgICAgID0gc2l6ZW9mKEhpc3RUc0VudHJ5V2l0aEF1dGhvcik7Ci0gICAgLy8gV3JpdGUgbmV3IGJ1ZmZlciBpbnRvIEZJRk8KLSAgICBkc3QtPndyaXRlKGJ1ZmZlciwgc2l6ZW9mKGJ1ZmZlcikpOwotICAgIHJldHVybiBFbnRyeUl0ZXJhdG9yKG1FbnRyeSkubmV4dCgpOwotfQotCi0vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotI2lmIDAgICAvLyBGSVhNRSBzZWUgbm90ZSBpbiBOQkxvZy5oCi1OQkxvZzo6VGltZWxpbmU6OlRpbWVsaW5lKHNpemVfdCBzaXplLCB2b2lkICpzaGFyZWQpCi0gICAgOiBtU2l6ZShyb3VuZHVwKHNpemUpKSwgbU93bihzaGFyZWQgPT0gTlVMTCksCi0gICAgICBtU2hhcmVkKChTaGFyZWQgKikgKG1Pd24gPyBuZXcgY2hhcltzaGFyZWRTaXplKHNpemUpXSA6IHNoYXJlZCkpCi17Ci0gICAgbmV3IChtU2hhcmVkKSBTaGFyZWQ7Ci19Ci0KLU5CTG9nOjpUaW1lbGluZTo6flRpbWVsaW5lKCkKLXsKLSAgICBtU2hhcmVkLT5+U2hhcmVkKCk7Ci0gICAgaWYgKG1Pd24pIHsKLSAgICAgICAgZGVsZXRlW10gKGNoYXIgKikgbVNoYXJlZDsKLSAgICB9Ci19Ci0jZW5kaWYKLQotLypzdGF0aWMqLwotc2l6ZV90IE5CTG9nOjpUaW1lbGluZTo6c2hhcmVkU2l6ZShzaXplX3Qgc2l6ZSkKLXsKLSAgICAvLyBUT0RPIGZpZm8gbm93IHN1cHBvcnRzIG5vbi1wb3dlci1vZi0yIGJ1ZmZlciBzaXplcywgc28gY291bGQgcmVtb3ZlIHRoZSByb3VuZHVwCi0gICAgcmV0dXJuIHNpemVvZihTaGFyZWQpICsgcm91bmR1cChzaXplKTsKLX0KLQotLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLU5CTG9nOjpXcml0ZXI6OldyaXRlcigpCi0gICAgOiBtU2hhcmVkKE5VTEwpLCBtRmlmbyhOVUxMKSwgbUZpZm9Xcml0ZXIoTlVMTCksIG1FbmFibGVkKGZhbHNlKSwgbVBpZFRhZyhOVUxMKSwgbVBpZFRhZ1NpemUoMCkKLXsKLX0KLQotTkJMb2c6OldyaXRlcjo6V3JpdGVyKHZvaWQgKnNoYXJlZCwgc2l6ZV90IHNpemUpCi0gICAgOiBtU2hhcmVkKChTaGFyZWQgKikgc2hhcmVkKSwKLSAgICAgIG1GaWZvKG1TaGFyZWQgIT0gTlVMTCA/Ci0gICAgICAgIG5ldyBhdWRpb191dGlsc19maWZvKHNpemUsIHNpemVvZih1aW50OF90KSwKLSAgICAgICAgICAgIG1TaGFyZWQtPm1CdWZmZXIsIG1TaGFyZWQtPm1SZWFyLCBOVUxMIC8qdGhyb3R0bGVzRnJvbnQqLykgOiBOVUxMKSwKLSAgICAgIG1GaWZvV3JpdGVyKG1GaWZvICE9IE5VTEwgPyBuZXcgYXVkaW9fdXRpbHNfZmlmb193cml0ZXIoKm1GaWZvKSA6IE5VTEwpLAotICAgICAgbUVuYWJsZWQobUZpZm9Xcml0ZXIgIT0gTlVMTCkKLXsKLSAgICAvLyBjYWNoaW5nIHBpZCBhbmQgcHJvY2VzcyBuYW1lCi0gICAgcGlkX3QgaWQgPSA6OmdldHBpZCgpOwotICAgIGNoYXIgcHJvY05hbWVbMTZdOwotICAgIGludCBzdGF0dXMgPSBwcmN0bChQUl9HRVRfTkFNRSwgcHJvY05hbWUpOwotICAgIGlmIChzdGF0dXMpIHsgIC8vIGVycm9yIGdldHRpbmcgcHJvY2VzcyBuYW1lCi0gICAgICAgIHByb2NOYW1lWzBdID0gJ1wwJzsKLSAgICB9Ci0gICAgc2l6ZV90IGxlbmd0aCA9IHN0cmxlbihwcm9jTmFtZSk7Ci0gICAgbVBpZFRhZ1NpemUgPSBsZW5ndGggKyBzaXplb2YocGlkX3QpOwotICAgIG1QaWRUYWcgPSBuZXcgY2hhclttUGlkVGFnU2l6ZV07Ci0gICAgbWVtY3B5KG1QaWRUYWcsICZpZCwgc2l6ZW9mKHBpZF90KSk7Ci0gICAgbWVtY3B5KG1QaWRUYWcgKyBzaXplb2YocGlkX3QpLCBwcm9jTmFtZSwgbGVuZ3RoKTsKLX0KLQotTkJMb2c6OldyaXRlcjo6V3JpdGVyKGNvbnN0IHNwPElNZW1vcnk+JiBpTWVtb3J5LCBzaXplX3Qgc2l6ZSkKLSAgICA6IFdyaXRlcihpTWVtb3J5ICE9IDAgPyAoU2hhcmVkICopIGlNZW1vcnktPnBvaW50ZXIoKSA6IE5VTEwsIHNpemUpCi17Ci0gICAgbUlNZW1vcnkgPSBpTWVtb3J5OwotfQotCi1OQkxvZzo6V3JpdGVyOjp+V3JpdGVyKCkKLXsKLSAgICBkZWxldGUgbUZpZm9Xcml0ZXI7Ci0gICAgZGVsZXRlIG1GaWZvOwotICAgIGRlbGV0ZVtdIG1QaWRUYWc7Ci19Ci0KLXZvaWQgTkJMb2c6OldyaXRlcjo6bG9nKGNvbnN0IGNoYXIgKnN0cmluZykKLXsKLSAgICBpZiAoIW1FbmFibGVkKSB7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgTE9HX0FMV0FZU19GQVRBTF9JRihzdHJpbmcgPT0gTlVMTCwgIkF0dGVtcHRlZCB0byBsb2cgTlVMTCBzdHJpbmciKTsKLSAgICBzaXplX3QgbGVuZ3RoID0gc3RybGVuKHN0cmluZyk7Ci0gICAgaWYgKGxlbmd0aCA+IEVudHJ5OjprTWF4TGVuZ3RoKSB7Ci0gICAgICAgIGxlbmd0aCA9IEVudHJ5OjprTWF4TGVuZ3RoOwotICAgIH0KLSAgICBsb2coRVZFTlRfU1RSSU5HLCBzdHJpbmcsIGxlbmd0aCk7Ci19Ci0KLXZvaWQgTkJMb2c6OldyaXRlcjo6bG9nZihjb25zdCBjaGFyICpmbXQsIC4uLikKLXsKLSAgICBpZiAoIW1FbmFibGVkKSB7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgdmFfbGlzdCBhcDsKLSAgICB2YV9zdGFydChhcCwgZm10KTsKLSAgICBXcml0ZXI6OmxvZ3ZmKGZtdCwgYXApOyAgICAgLy8gdGhlIFdyaXRlcjo6IGlzIG5lZWRlZCB0byBhdm9pZCB2aXJ0dWFsIGRpc3BhdGNoIGZvciBMb2NrZWRXcml0ZXIKLSAgICB2YV9lbmQoYXApOwotfQotCi12b2lkIE5CTG9nOjpXcml0ZXI6OmxvZ3ZmKGNvbnN0IGNoYXIgKmZtdCwgdmFfbGlzdCBhcCkKLXsKLSAgICBpZiAoIW1FbmFibGVkKSB7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgY2hhciBidWZmZXJbRW50cnk6OmtNYXhMZW5ndGggKyAxIC8qTlVMKi9dOwotICAgIGludCBsZW5ndGggPSB2c25wcmludGYoYnVmZmVyLCBzaXplb2YoYnVmZmVyKSwgZm10LCBhcCk7Ci0gICAgaWYgKGxlbmd0aCA+PSAoaW50KSBzaXplb2YoYnVmZmVyKSkgewotICAgICAgICBsZW5ndGggPSBzaXplb2YoYnVmZmVyKSAtIDE7Ci0gICAgICAgIC8vIE5VTCB0ZXJtaW5hdGlvbiBpcyBub3QgcmVxdWlyZWQKLSAgICAgICAgLy8gYnVmZmVyW2xlbmd0aF0gPSAnXDAnOwotICAgIH0KLSAgICBpZiAobGVuZ3RoID49IDApIHsKLSAgICAgICAgbG9nKEVWRU5UX1NUUklORywgYnVmZmVyLCBsZW5ndGgpOwotICAgIH0KLX0KLQotdm9pZCBOQkxvZzo6V3JpdGVyOjpsb2dUaW1lc3RhbXAoKQotewotICAgIGlmICghbUVuYWJsZWQpIHsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBpbnQ2NF90IHRzID0gZ2V0X21vbm90b25pY19ucygpOwotICAgIGlmICh0cyA+IDApIHsKLSAgICAgICAgbG9nKEVWRU5UX1RJTUVTVEFNUCwgJnRzLCBzaXplb2YodHMpKTsKLSAgICB9IGVsc2UgewotICAgICAgICBBTE9HRSgiRmFpbGVkIHRvIGdldCB0aW1lc3RhbXAiKTsKLSAgICB9Ci19Ci0KLXZvaWQgTkJMb2c6OldyaXRlcjo6bG9nVGltZXN0YW1wKGNvbnN0IGludDY0X3QgdHMpCi17Ci0gICAgaWYgKCFtRW5hYmxlZCkgewotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIGxvZyhFVkVOVF9USU1FU1RBTVAsICZ0cywgc2l6ZW9mKHRzKSk7Ci19Ci0KLXZvaWQgTkJMb2c6OldyaXRlcjo6bG9nSW50ZWdlcihjb25zdCBpbnQgeCkKLXsKLSAgICBpZiAoIW1FbmFibGVkKSB7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgbG9nKEVWRU5UX0lOVEVHRVIsICZ4LCBzaXplb2YoeCkpOwotfQotCi12b2lkIE5CTG9nOjpXcml0ZXI6OmxvZ0Zsb2F0KGNvbnN0IGZsb2F0IHgpCi17Ci0gICAgaWYgKCFtRW5hYmxlZCkgewotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIGxvZyhFVkVOVF9GTE9BVCwgJngsIHNpemVvZih4KSk7Ci19Ci0KLXZvaWQgTkJMb2c6OldyaXRlcjo6bG9nUElEKCkKLXsKLSAgICBpZiAoIW1FbmFibGVkKSB7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgbG9nKEVWRU5UX1BJRCwgbVBpZFRhZywgbVBpZFRhZ1NpemUpOwotfQotCi12b2lkIE5CTG9nOjpXcml0ZXI6OmxvZ1N0YXJ0KGNvbnN0IGNoYXIgKmZtdCkKLXsKLSAgICBpZiAoIW1FbmFibGVkKSB7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgc2l6ZV90IGxlbmd0aCA9IHN0cmxlbihmbXQpOwotICAgIGlmIChsZW5ndGggPiBFbnRyeTo6a01heExlbmd0aCkgewotICAgICAgICBsZW5ndGggPSBFbnRyeTo6a01heExlbmd0aDsKLSAgICB9Ci0gICAgbG9nKEVWRU5UX1NUQVJUX0ZNVCwgZm10LCBsZW5ndGgpOwotfQotCi12b2lkIE5CTG9nOjpXcml0ZXI6OmxvZ0VuZCgpCi17Ci0gICAgaWYgKCFtRW5hYmxlZCkgewotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIEVudHJ5IGVudHJ5ID0gRW50cnkoRVZFTlRfRU5EX0ZNVCwgTlVMTCwgMCk7Ci0gICAgbG9nKCZlbnRyeSwgdHJ1ZSk7Ci19Ci0KLXZvaWQgTkJMb2c6OldyaXRlcjo6bG9nSGFzaChsb2dfaGFzaF90IGhhc2gpCi17Ci0gICAgaWYgKCFtRW5hYmxlZCkgewotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIGxvZyhFVkVOVF9IQVNILCAmaGFzaCwgc2l6ZW9mKGhhc2gpKTsKLX0KLQotdm9pZCBOQkxvZzo6V3JpdGVyOjpsb2dFdmVudEhpc3RUcyhFdmVudCBldmVudCwgbG9nX2hhc2hfdCBoYXNoKQotewotICAgIGlmICghbUVuYWJsZWQpIHsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBIaXN0VHNFbnRyeSBkYXRhOwotICAgIGRhdGEuaGFzaCA9IGhhc2g7Ci0gICAgZGF0YS50cyA9IGdldF9tb25vdG9uaWNfbnMoKTsKLSAgICBpZiAoZGF0YS50cyA+IDApIHsKLSAgICAgICAgbG9nKGV2ZW50LCAmZGF0YSwgc2l6ZW9mKGRhdGEpKTsKLSAgICB9IGVsc2UgewotICAgICAgICBBTE9HRSgiRmFpbGVkIHRvIGdldCB0aW1lc3RhbXAiKTsKLSAgICB9Ci19Ci0KLXZvaWQgTkJMb2c6OldyaXRlcjo6bG9nRm9ybWF0KGNvbnN0IGNoYXIgKmZtdCwgbG9nX2hhc2hfdCBoYXNoLCAuLi4pCi17Ci0gICAgaWYgKCFtRW5hYmxlZCkgewotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgdmFfbGlzdCBhcDsKLSAgICB2YV9zdGFydChhcCwgaGFzaCk7Ci0gICAgV3JpdGVyOjpsb2dWRm9ybWF0KGZtdCwgaGFzaCwgYXApOwotICAgIHZhX2VuZChhcCk7Ci19Ci0KLXZvaWQgTkJMb2c6OldyaXRlcjo6bG9nVkZvcm1hdChjb25zdCBjaGFyICpmbXQsIGxvZ19oYXNoX3QgaGFzaCwgdmFfbGlzdCBhcmdwKQotewotICAgIGlmICghbUVuYWJsZWQpIHsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBXcml0ZXI6OmxvZ1N0YXJ0KGZtdCk7Ci0gICAgaW50IGk7Ci0gICAgZG91YmxlIGY7Ci0gICAgY2hhciogczsKLSAgICBpbnQ2NF90IHQ7Ci0gICAgV3JpdGVyOjpsb2dUaW1lc3RhbXAoKTsKLSAgICBXcml0ZXI6OmxvZ0hhc2goaGFzaCk7Ci0gICAgZm9yIChjb25zdCBjaGFyICpwID0gZm10OyAqcCAhPSAnXDAnOyBwKyspIHsKLSAgICAgICAgLy8gVE9ETzogaW1wbGVtZW50IG1vcmUgY29tcGxleCBmb3JtYXR0aW5nIHN1Y2ggYXMgJS4zZgotICAgICAgICBpZiAoKnAgIT0gJyUnKSB7Ci0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgfQotICAgICAgICBzd2l0Y2goKisrcCkgewotICAgICAgICBjYXNlICdzJzogLy8gc3RyaW5nCi0gICAgICAgICAgICBzID0gdmFfYXJnKGFyZ3AsIGNoYXIgKik7Ci0gICAgICAgICAgICBXcml0ZXI6OmxvZyhzKTsKLSAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgIGNhc2UgJ3QnOiAvLyB0aW1lc3RhbXAKLSAgICAgICAgICAgIHQgPSB2YV9hcmcoYXJncCwgaW50NjRfdCk7Ci0gICAgICAgICAgICBXcml0ZXI6OmxvZ1RpbWVzdGFtcCh0KTsKLSAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgIGNhc2UgJ2QnOiAvLyBpbnRlZ2VyCi0gICAgICAgICAgICBpID0gdmFfYXJnKGFyZ3AsIGludCk7Ci0gICAgICAgICAgICBXcml0ZXI6OmxvZ0ludGVnZXIoaSk7Ci0gICAgICAgICAgICBicmVhazsKLQotICAgICAgICBjYXNlICdmJzogLy8gZmxvYXQKLSAgICAgICAgICAgIGYgPSB2YV9hcmcoYXJncCwgZG91YmxlKTsgLy8gZmxvYXQgYXJndW1lbnRzIGFyZSBwcm9tb3RlZCB0byBkb3VibGUgaW4gdmFyYXJnIGxpc3RzCi0gICAgICAgICAgICBXcml0ZXI6OmxvZ0Zsb2F0KChmbG9hdClmKTsKLSAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgIGNhc2UgJ3AnOiAvLyBwaWQKLSAgICAgICAgICAgIFdyaXRlcjo6bG9nUElEKCk7Ci0gICAgICAgICAgICBicmVhazsKLQotICAgICAgICAvLyB0aGUgIiVcMCIgY2FzZSBmaW5pc2hlcyBwYXJzaW5nCi0gICAgICAgIGNhc2UgJ1wwJzoKLSAgICAgICAgICAgIC0tcDsKLSAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgIGNhc2UgJyUnOgotICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIEFMT0dXKCJOQkxvZyBXcml0ZXIgcGFyc2VkIGludmFsaWQgZm9ybWF0IHNwZWNpZmllcjogJWMiLCAqcCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgIH0KLSAgICBXcml0ZXI6OmxvZ0VuZCgpOwotfQotCi12b2lkIE5CTG9nOjpXcml0ZXI6OmxvZyhFdmVudCBldmVudCwgY29uc3Qgdm9pZCAqZGF0YSwgc2l6ZV90IGxlbmd0aCkKLXsKLSAgICBpZiAoIW1FbmFibGVkKSB7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgaWYgKGRhdGEgPT0gTlVMTCB8fCBsZW5ndGggPiBFbnRyeTo6a01heExlbmd0aCkgewotICAgICAgICAvLyBUT0RPIFBlcmhhcHMgaXQgbWFrZXMgc2Vuc2UgdG8gZGlzcGxheSB0cnVuY2F0ZWQgZGF0YSBvciBhdCBsZWFzdCBhCi0gICAgICAgIC8vICAgICAgbWVzc2FnZSB0aGF0IHRoZSBkYXRhIGlzIHRvbyBsb25nPyAgVGhlIGN1cnJlbnQgYmVoYXZpb3IgY2FuIGNyZWF0ZQotICAgICAgICAvLyAgICAgIGEgY29uZnVzaW9uIGZvciBhIHByb2dyYW1tZXIgZGVidWdnaW5nIHRoZWlyIGNvZGUuCi0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgLy8gSWdub3JlIGlmIGludmFsaWQgZXZlbnQKLSAgICBpZiAoZXZlbnQgPT0gRVZFTlRfUkVTRVJWRUQgfHwgZXZlbnQgPj0gRVZFTlRfVVBQRVJfQk9VTkQpIHsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBFbnRyeSBldHIoZXZlbnQsIGRhdGEsIGxlbmd0aCk7Ci0gICAgbG9nKCZldHIsIHRydWUgLyp0cnVzdGVkKi8pOwotfQotCi12b2lkIE5CTG9nOjpXcml0ZXI6OmxvZyhjb25zdCBOQkxvZzo6RW50cnkgKmV0ciwgYm9vbCB0cnVzdGVkKQotewotICAgIGlmICghbUVuYWJsZWQpIHsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBpZiAoIXRydXN0ZWQpIHsKLSAgICAgICAgbG9nKGV0ci0+bUV2ZW50LCBldHItPm1EYXRhLCBldHItPm1MZW5ndGgpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIHNpemVfdCBuZWVkID0gZXRyLT5tTGVuZ3RoICsgRW50cnk6OmtPdmVyaGVhZDsgICAgLy8gbUV2ZW50LCBtTGVuZ3RoLCBkYXRhW21MZW5ndGhdLCBtTGVuZ3RoCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBuZWVkID0gbnVtYmVyIG9mIGJ5dGVzIHdyaXR0ZW4gdG8gRklGTwotCi0gICAgLy8gRklYTUUgb3B0aW1pemUgdGhpcyB1c2luZyBtZW1jcHkgZm9yIHRoZSBkYXRhIHBhcnQgb2YgdGhlIEVudHJ5LgotICAgIC8vIFRoZSBFbnRyeSBjb3VsZCBoYXZlIGEgbWV0aG9kIGNvcHlUbyhwdHIsIG9mZnNldCwgc2l6ZSkgdG8gb3B0aW1pemUgdGhlIGNvcHkuCi0gICAgLy8gY2hlY2tzIHNpemUgb2YgYSBzaW5nbGUgbG9nIEVudHJ5OiB0eXBlLCBsZW5ndGgsIGRhdGEgcG9pbnRlciBhbmQgZW5kaW5nCi0gICAgdWludDhfdCB0ZW1wW0VudHJ5OjprTWF4TGVuZ3RoICsgRW50cnk6OmtPdmVyaGVhZF07Ci0gICAgLy8gd3JpdGUgdGhpcyBkYXRhIHRvIHRlbXAgYXJyYXkKLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG5lZWQ7IGkrKykgewotICAgICAgICB0ZW1wW2ldID0gZXRyLT5jb3B5RW50cnlEYXRhQXQoaSk7Ci0gICAgfQotICAgIC8vIHdyaXRlIHRvIGNpcmN1bGFyIGJ1ZmZlcgotICAgIG1GaWZvV3JpdGVyLT53cml0ZSh0ZW1wLCBuZWVkKTsKLX0KLQotYm9vbCBOQkxvZzo6V3JpdGVyOjppc0VuYWJsZWQoKSBjb25zdAotewotICAgIHJldHVybiBtRW5hYmxlZDsKLX0KLQotYm9vbCBOQkxvZzo6V3JpdGVyOjpzZXRFbmFibGVkKGJvb2wgZW5hYmxlZCkKLXsKLSAgICBib29sIG9sZCA9IG1FbmFibGVkOwotICAgIG1FbmFibGVkID0gZW5hYmxlZCAmJiBtU2hhcmVkICE9IE5VTEw7Ci0gICAgcmV0dXJuIG9sZDsKLX0KLQotLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLU5CTG9nOjpMb2NrZWRXcml0ZXI6OkxvY2tlZFdyaXRlcigpCi0gICAgOiBXcml0ZXIoKQotewotfQotCi1OQkxvZzo6TG9ja2VkV3JpdGVyOjpMb2NrZWRXcml0ZXIodm9pZCAqc2hhcmVkLCBzaXplX3Qgc2l6ZSkKLSAgICA6IFdyaXRlcihzaGFyZWQsIHNpemUpCi17Ci19Ci0KLXZvaWQgTkJMb2c6OkxvY2tlZFdyaXRlcjo6bG9nKGNvbnN0IGNoYXIgKnN0cmluZykKLXsKLSAgICBNdXRleDo6QXV0b2xvY2sgX2wobUxvY2spOwotICAgIFdyaXRlcjo6bG9nKHN0cmluZyk7Ci19Ci0KLXZvaWQgTkJMb2c6OkxvY2tlZFdyaXRlcjo6bG9nZihjb25zdCBjaGFyICpmbXQsIC4uLikKLXsKLSAgICAvLyBGSVhNRSBzaG91bGQgbm90IHRha2UgdGhlIGxvY2sgdW50aWwgYWZ0ZXIgZm9ybWF0dGluZyBpcyBkb25lCi0gICAgTXV0ZXg6OkF1dG9sb2NrIF9sKG1Mb2NrKTsKLSAgICB2YV9saXN0IGFwOwotICAgIHZhX3N0YXJ0KGFwLCBmbXQpOwotICAgIFdyaXRlcjo6bG9ndmYoZm10LCBhcCk7Ci0gICAgdmFfZW5kKGFwKTsKLX0KLQotdm9pZCBOQkxvZzo6TG9ja2VkV3JpdGVyOjpsb2d2Zihjb25zdCBjaGFyICpmbXQsIHZhX2xpc3QgYXApCi17Ci0gICAgLy8gRklYTUUgc2hvdWxkIG5vdCB0YWtlIHRoZSBsb2NrIHVudGlsIGFmdGVyIGZvcm1hdHRpbmcgaXMgZG9uZQotICAgIE11dGV4OjpBdXRvbG9jayBfbChtTG9jayk7Ci0gICAgV3JpdGVyOjpsb2d2ZihmbXQsIGFwKTsKLX0KLQotdm9pZCBOQkxvZzo6TG9ja2VkV3JpdGVyOjpsb2dUaW1lc3RhbXAoKQotewotICAgIC8vIEZJWE1FIHNob3VsZCBub3QgdGFrZSB0aGUgbG9jayB1bnRpbCBhZnRlciB0aGUgY2xvY2tfZ2V0dGltZSgpIHN5c2NhbGwKLSAgICBNdXRleDo6QXV0b2xvY2sgX2wobUxvY2spOwotICAgIFdyaXRlcjo6bG9nVGltZXN0YW1wKCk7Ci19Ci0KLXZvaWQgTkJMb2c6OkxvY2tlZFdyaXRlcjo6bG9nVGltZXN0YW1wKGNvbnN0IGludDY0X3QgdHMpCi17Ci0gICAgTXV0ZXg6OkF1dG9sb2NrIF9sKG1Mb2NrKTsKLSAgICBXcml0ZXI6OmxvZ1RpbWVzdGFtcCh0cyk7Ci19Ci0KLXZvaWQgTkJMb2c6OkxvY2tlZFdyaXRlcjo6bG9nSW50ZWdlcihjb25zdCBpbnQgeCkKLXsKLSAgICBNdXRleDo6QXV0b2xvY2sgX2wobUxvY2spOwotICAgIFdyaXRlcjo6bG9nSW50ZWdlcih4KTsKLX0KLQotdm9pZCBOQkxvZzo6TG9ja2VkV3JpdGVyOjpsb2dGbG9hdChjb25zdCBmbG9hdCB4KQotewotICAgIE11dGV4OjpBdXRvbG9jayBfbChtTG9jayk7Ci0gICAgV3JpdGVyOjpsb2dGbG9hdCh4KTsKLX0KLQotdm9pZCBOQkxvZzo6TG9ja2VkV3JpdGVyOjpsb2dQSUQoKQotewotICAgIE11dGV4OjpBdXRvbG9jayBfbChtTG9jayk7Ci0gICAgV3JpdGVyOjpsb2dQSUQoKTsKLX0KLQotdm9pZCBOQkxvZzo6TG9ja2VkV3JpdGVyOjpsb2dTdGFydChjb25zdCBjaGFyICpmbXQpCi17Ci0gICAgTXV0ZXg6OkF1dG9sb2NrIF9sKG1Mb2NrKTsKLSAgICBXcml0ZXI6OmxvZ1N0YXJ0KGZtdCk7Ci19Ci0KLQotdm9pZCBOQkxvZzo6TG9ja2VkV3JpdGVyOjpsb2dFbmQoKQotewotICAgIE11dGV4OjpBdXRvbG9jayBfbChtTG9jayk7Ci0gICAgV3JpdGVyOjpsb2dFbmQoKTsKLX0KLQotdm9pZCBOQkxvZzo6TG9ja2VkV3JpdGVyOjpsb2dIYXNoKGxvZ19oYXNoX3QgaGFzaCkKLXsKLSAgICBNdXRleDo6QXV0b2xvY2sgX2wobUxvY2spOwotICAgIFdyaXRlcjo6bG9nSGFzaChoYXNoKTsKLX0KLQotYm9vbCBOQkxvZzo6TG9ja2VkV3JpdGVyOjppc0VuYWJsZWQoKSBjb25zdAotewotICAgIE11dGV4OjpBdXRvbG9jayBfbChtTG9jayk7Ci0gICAgcmV0dXJuIFdyaXRlcjo6aXNFbmFibGVkKCk7Ci19Ci0KLWJvb2wgTkJMb2c6OkxvY2tlZFdyaXRlcjo6c2V0RW5hYmxlZChib29sIGVuYWJsZWQpCi17Ci0gICAgTXV0ZXg6OkF1dG9sb2NrIF9sKG1Mb2NrKTsKLSAgICByZXR1cm4gV3JpdGVyOjpzZXRFbmFibGVkKGVuYWJsZWQpOwotfQotCi0vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotY29uc3Qgc3RkOjpzZXQ8TkJMb2c6OkV2ZW50PiBOQkxvZzo6UmVhZGVyOjpzdGFydGluZ1R5cGVzIHtOQkxvZzo6RXZlbnQ6OkVWRU5UX1NUQVJUX0ZNVCwKLSAgICAgICAgTkJMb2c6OkV2ZW50OjpFVkVOVF9ISVNUT0dSQU1fRU5UUllfVFMsCi0gICAgICAgIE5CTG9nOjpFdmVudDo6RVZFTlRfQVVESU9fU1RBVEV9OwotY29uc3Qgc3RkOjpzZXQ8TkJMb2c6OkV2ZW50PiBOQkxvZzo6UmVhZGVyOjplbmRpbmdUeXBlcyAgIHtOQkxvZzo6RXZlbnQ6OkVWRU5UX0VORF9GTVQsCi0gICAgICAgIE5CTG9nOjpFdmVudDo6RVZFTlRfSElTVE9HUkFNX0VOVFJZX1RTLAotICAgICAgICBOQkxvZzo6RXZlbnQ6OkVWRU5UX0FVRElPX1NUQVRFfTsKLQotTkJMb2c6OlJlYWRlcjo6UmVhZGVyKGNvbnN0IHZvaWQgKnNoYXJlZCwgc2l6ZV90IHNpemUpCi0gICAgOiBtRmQoLTEpLCBtSW5kZW50KDApLCBtTG9zdCgwKSwKLSAgICAgIG1TaGFyZWQoKC8qY29uc3QqLyBTaGFyZWQgKikgc2hhcmVkKSwgLyptSU1lbW9yeSovCi0gICAgICBtRmlmbyhtU2hhcmVkICE9IE5VTEwgPwotICAgICAgICBuZXcgYXVkaW9fdXRpbHNfZmlmbyhzaXplLCBzaXplb2YodWludDhfdCksCi0gICAgICAgICAgICBtU2hhcmVkLT5tQnVmZmVyLCBtU2hhcmVkLT5tUmVhciwgTlVMTCAvKnRocm90dGxlc0Zyb250Ki8pIDogTlVMTCksCi0gICAgICBtRmlmb1JlYWRlcihtRmlmbyAhPSBOVUxMID8gbmV3IGF1ZGlvX3V0aWxzX2ZpZm9fcmVhZGVyKCptRmlmbykgOiBOVUxMKQotewotfQotCi1OQkxvZzo6UmVhZGVyOjpSZWFkZXIoY29uc3Qgc3A8SU1lbW9yeT4mIGlNZW1vcnksIHNpemVfdCBzaXplKQotICAgIDogUmVhZGVyKGlNZW1vcnkgIT0gMCA/IChTaGFyZWQgKikgaU1lbW9yeS0+cG9pbnRlcigpIDogTlVMTCwgc2l6ZSkKLXsKLSAgICBtSU1lbW9yeSA9IGlNZW1vcnk7Ci19Ci0KLU5CTG9nOjpSZWFkZXI6On5SZWFkZXIoKQotewotICAgIGRlbGV0ZSBtRmlmb1JlYWRlcjsKLSAgICBkZWxldGUgbUZpZm87Ci19Ci0KLWNvbnN0IHVpbnQ4X3QgKk5CTG9nOjpSZWFkZXI6OmZpbmRMYXN0RW50cnlPZlR5cGVzKGNvbnN0IHVpbnQ4X3QgKmZyb250LCBjb25zdCB1aW50OF90ICpiYWNrLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdGQ6OnNldDxFdmVudD4gJnR5cGVzKSB7Ci0gICAgd2hpbGUgKGJhY2sgKyBFbnRyeTo6a1ByZXZpb3VzTGVuZ3RoT2Zmc2V0ID49IGZyb250KSB7Ci0gICAgICAgIGNvbnN0IHVpbnQ4X3QgKnByZXYgPSBiYWNrIC0gYmFja1tFbnRyeTo6a1ByZXZpb3VzTGVuZ3RoT2Zmc2V0XSAtIEVudHJ5OjprT3ZlcmhlYWQ7Ci0gICAgICAgIGlmIChwcmV2IDwgZnJvbnQgfHwgcHJldiArIHByZXZbb2Zmc2V0b2YoZW50cnksIGxlbmd0aCldICsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBFbnRyeTo6a092ZXJoZWFkICE9IGJhY2spIHsKLQotICAgICAgICAgICAgLy8gcHJldiBwb2ludHMgdG8gYW4gb3V0IG9mIGxpbWl0cyBvciBpbmNvbnNpc3RlbnQgZW50cnkKLSAgICAgICAgICAgIHJldHVybiBudWxscHRyOwotICAgICAgICB9Ci0gICAgICAgIGlmICh0eXBlcy5maW5kKChjb25zdCBFdmVudCkgcHJldltvZmZzZXRvZihlbnRyeSwgdHlwZSldKSAhPSB0eXBlcy5lbmQoKSkgewotICAgICAgICAgICAgcmV0dXJuIHByZXY7Ci0gICAgICAgIH0KLSAgICAgICAgYmFjayA9IHByZXY7Ci0gICAgfQotICAgIHJldHVybiBudWxscHRyOyAvLyBubyBlbnRyeSBmb3VuZAotfQotCi0vLyBDb3BpZXMgY29udGVudCBvZiBhIFJlYWRlciBGSUZPIGludG8gaXRzIFNuYXBzaG90Ci0vLyBUaGUgU25hcHNob3QgaGFzIHRoZSBzYW1lIHJhdyBkYXRhLCBidXQgcmVwcmVzZW50ZWQgYXMgYSBzZXF1ZW5jZSBvZiBlbnRyaWVzCi0vLyBhbmQgYW4gRW50cnlJdGVyYXRvciBtYWtpbmcgaXQgcG9zc2libGUgdG8gcHJvY2VzcyB0aGUgZGF0YS4KLXN0ZDo6dW5pcXVlX3B0cjxOQkxvZzo6UmVhZGVyOjpTbmFwc2hvdD4gTkJMb2c6OlJlYWRlcjo6Z2V0U25hcHNob3QoKQotewotICAgIGlmIChtRmlmb1JlYWRlciA9PSBOVUxMKSB7Ci0gICAgICAgIHJldHVybiBzdGQ6OnVuaXF1ZV9wdHI8TkJMb2c6OlJlYWRlcjo6U25hcHNob3Q+KG5ldyBTbmFwc2hvdCgpKTsKLSAgICB9Ci0gICAgLy8gbWFrZSBhIGNvcHkgdG8gYXZvaWQgcmFjZSBjb25kaXRpb24gd2l0aCB3cml0ZXIKLSAgICBzaXplX3QgY2FwYWNpdHkgPSBtRmlmby0+Y2FwYWNpdHkoKTsKLQotICAgIC8vIFRoaXMgZW11bGF0ZXMgdGhlIGJlaGF2aW91ciBvZiBhdWRpb191dGlsc19maWZvX3JlYWRlcjo6cmVhZCwgYnV0IHdpdGhvdXQgaW5jcmVtZW50aW5nIHRoZQotICAgIC8vIHJlYWRlciBpbmRleC4gVGhlIGluZGV4IGlzIGluY3JlbWVudGVkIGFmdGVyIGhhbmRsaW5nIGNvcnJ1cHRpb24sIHRvIGFmdGVyIHRoZSBsYXN0IGNvbXBsZXRlCi0gICAgLy8gZW50cnkgb2YgdGhlIGJ1ZmZlcgotICAgIHNpemVfdCBsb3N0OwotICAgIGF1ZGlvX3V0aWxzX2lvdmVjIGlvdmVjWzJdOwotICAgIHNzaXplX3QgYXZhaWxUb1JlYWQgPSBtRmlmb1JlYWRlci0+b2J0YWluKGlvdmVjLCBjYXBhY2l0eSwgTlVMTCAvKnRpbWVvdXQqLywgJmxvc3QpOwotICAgIGlmIChhdmFpbFRvUmVhZCA8PSAwKSB7Ci0gICAgICAgIHJldHVybiBzdGQ6OnVuaXF1ZV9wdHI8TkJMb2c6OlJlYWRlcjo6U25hcHNob3Q+KG5ldyBTbmFwc2hvdCgpKTsKLSAgICB9Ci0KLSAgICBzdGQ6OnVuaXF1ZV9wdHI8U25hcHNob3Q+IHNuYXBzaG90KG5ldyBTbmFwc2hvdChhdmFpbFRvUmVhZCkpOwotICAgIG1lbWNweShzbmFwc2hvdC0+bURhdGEsIChjb25zdCBjaGFyICopIG1GaWZvLT5idWZmZXIoKSArIGlvdmVjWzBdLm1PZmZzZXQsIGlvdmVjWzBdLm1MZW5ndGgpOwotICAgIGlmIChpb3ZlY1sxXS5tTGVuZ3RoID4gMCkgewotICAgICAgICBtZW1jcHkoc25hcHNob3QtPm1EYXRhICsgKGlvdmVjWzBdLm1MZW5ndGgpLAotICAgICAgICAgICAgKGNvbnN0IGNoYXIgKikgbUZpZm8tPmJ1ZmZlcigpICsgaW92ZWNbMV0ubU9mZnNldCwgaW92ZWNbMV0ubUxlbmd0aCk7Ci0gICAgfQotCi0gICAgLy8gSGFuZGxlIGNvcnJ1cHRlZCBidWZmZXIKLSAgICAvLyBQb3RlbnRpYWxseSwgYSBidWZmZXIgaGFzIGNvcnJ1cHRlZCBkYXRhIG9uIGJvdGggYmVnaW5uaW5nIChkdWUgdG8gb3ZlcmZsb3cpIGFuZCBlbmQKLSAgICAvLyAoZHVlIHRvIGluY29tcGxldGUgZm9ybWF0IGVudHJ5KS4gQnV0IGV2ZW4gaWYgdGhlIGVuZCBmb3JtYXQgZW50cnkgaXMgaW5jb21wbGV0ZSwKLSAgICAvLyBpdCBlbmRzIGluIGEgY29tcGxldGUgZW50cnkgKHdoaWNoIGlzIG5vdCBhbiBFTkRfRk1UKS4gU28gaXMgc2FmZSB0byB0cmF2ZXJzZSBiYWNrd2FyZHMuCi0gICAgLy8gVE9ETzogaGFuZGxlIGNsaWVudCBjb3JydXB0aW9uIChpbiB0aGUgbWlkZGxlIG9mIGEgYnVmZmVyKQotCi0gICAgY29uc3QgdWludDhfdCAqYmFjayA9IHNuYXBzaG90LT5tRGF0YSArIGF2YWlsVG9SZWFkOwotICAgIGNvbnN0IHVpbnQ4X3QgKmZyb250ID0gc25hcHNob3QtPm1EYXRhOwotCi0gICAgLy8gRmluZCBsYXN0IEVORF9GTVQuIDxiYWNrPiBpcyBzaXR0aW5nIG9uIGFuIGVudHJ5IHdoaWNoIG1pZ2h0IGJlIHRoZSBtaWRkbGUgb2YgYSBGb3JtYXRFbnRyeS4KLSAgICAvLyBXZSBnbyBiYWNrd2FyZHMgdW50aWwgd2UgZmluZCBhbiBFVkVOVF9FTkRfRk1ULgotICAgIGNvbnN0IHVpbnQ4X3QgKmxhc3RFbmQgPSBmaW5kTGFzdEVudHJ5T2ZUeXBlcyhmcm9udCwgYmFjaywgZW5kaW5nVHlwZXMpOwotICAgIGlmIChsYXN0RW5kID09IG51bGxwdHIpIHsKLSAgICAgICAgc25hcHNob3QtPm1FbmQgPSBzbmFwc2hvdC0+bUJlZ2luID0gRW50cnlJdGVyYXRvcihmcm9udCk7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgLy8gZW5kIG9mIHNuYXBzaG90IHBvaW50cyB0byBhZnRlciBsYXN0IEVORF9GTVQgZW50cnkKLSAgICAgICAgc25hcHNob3QtPm1FbmQgPSBFbnRyeUl0ZXJhdG9yKGxhc3RFbmQpLm5leHQoKTsKLSAgICAgICAgLy8gZmluZCBmaXJzdCBTVEFSVF9GTVQKLSAgICAgICAgY29uc3QgdWludDhfdCAqZmlyc3RTdGFydCA9IG51bGxwdHI7Ci0gICAgICAgIGNvbnN0IHVpbnQ4X3QgKmZpcnN0U3RhcnRUbXAgPSBzbmFwc2hvdC0+bUVuZDsKLSAgICAgICAgd2hpbGUgKChmaXJzdFN0YXJ0VG1wID0gZmluZExhc3RFbnRyeU9mVHlwZXMoZnJvbnQsIGZpcnN0U3RhcnRUbXAsIHN0YXJ0aW5nVHlwZXMpKQotICAgICAgICAgICAgICAgICE9IG51bGxwdHIpIHsKLSAgICAgICAgICAgIGZpcnN0U3RhcnQgPSBmaXJzdFN0YXJ0VG1wOwotICAgICAgICB9Ci0gICAgICAgIC8vIGZpcnN0U3RhcnQgaXMgbnVsbCBpZiBubyBTVEFSVF9GTVQgZW50cnkgd2FzIGZvdW5kIGJlZm9yZSBsYXN0RW5kCi0gICAgICAgIGlmIChmaXJzdFN0YXJ0ID09IG51bGxwdHIpIHsKLSAgICAgICAgICAgIHNuYXBzaG90LT5tQmVnaW4gPSBzbmFwc2hvdC0+bUVuZDsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIHNuYXBzaG90LT5tQmVnaW4gPSBFbnRyeUl0ZXJhdG9yKGZpcnN0U3RhcnQpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgLy8gYWR2YW5jZSBmaWZvIHJlYWRlciBpbmRleCB0byBhZnRlciBsYXN0IGVudHJ5IHJlYWQuCi0gICAgbUZpZm9SZWFkZXItPnJlbGVhc2Uoc25hcHNob3QtPm1FbmQgLSBmcm9udCk7Ci0KLSAgICBzbmFwc2hvdC0+bUxvc3QgPSBsb3N0OwotICAgIHJldHVybiBzbmFwc2hvdDsKLQotfQotCi0vLyBUYWtlcyByYXcgY29udGVudCBvZiB0aGUgbG9jYWwgbWVyZ2VyIEZJRk8sIHByb2Nlc3NlcyBsb2cgZW50cmllcywgYW5kCi0vLyB3cml0ZXMgdGhlIGRhdGEgdG8gYSBtYXAgb2YgY2xhc3MgUGVyZm9ybWFuY2VBbmFseXNpcywgYmFzZWQgb24gdGhlaXIgdGhyZWFkIElELgotdm9pZCBOQkxvZzo6TWVyZ2VSZWFkZXI6OmdldEFuZFByb2Nlc3NTbmFwc2hvdChOQkxvZzo6UmVhZGVyOjpTbmFwc2hvdCAmc25hcHNob3QpCi17Ci0gICAgU3RyaW5nOCB0aW1lc3RhbXAsIGJvZHk7Ci0KLSAgICBmb3IgKGF1dG8gZW50cnkgPSBzbmFwc2hvdC5iZWdpbigpOyBlbnRyeSAhPSBzbmFwc2hvdC5lbmQoKTspIHsKLSAgICAgICAgc3dpdGNoIChlbnRyeS0+dHlwZSkgewotICAgICAgICBjYXNlIEVWRU5UX1NUQVJUX0ZNVDoKLSAgICAgICAgICAgIGVudHJ5ID0gaGFuZGxlRm9ybWF0KEZvcm1hdEVudHJ5KGVudHJ5KSwgJnRpbWVzdGFtcCwgJmJvZHkpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgRVZFTlRfSElTVE9HUkFNX0VOVFJZX1RTOiB7Ci0gICAgICAgICAgICBIaXN0VHNFbnRyeVdpdGhBdXRob3IgKmRhdGEgPSAoSGlzdFRzRW50cnlXaXRoQXV0aG9yICopIChlbnRyeS0+ZGF0YSk7Ci0gICAgICAgICAgICAvLyBUT0RPIFRoaXMgbWVtY3BpZXMgYXJlIGhlcmUgdG8gYXZvaWQgdW5hbGlnbmVkIG1lbW9yeSBhY2Nlc3MgY3Jhc2guCi0gICAgICAgICAgICAvLyBUaGVyZSdzIHByb2JhYmx5IGEgbW9yZSBlZmZpY2llbnQgd2F5IHRvIGRvIGl0Ci0gICAgICAgICAgICBsb2dfaGFzaF90IGhhc2g7Ci0gICAgICAgICAgICBtZW1jcHkoJmhhc2gsICYoZGF0YS0+aGFzaCksIHNpemVvZihoYXNoKSk7Ci0gICAgICAgICAgICBpbnQ2NF90IHRzOwotICAgICAgICAgICAgbWVtY3B5KCZ0cywgJmRhdGEtPnRzLCBzaXplb2YodHMpKTsKLSAgICAgICAgICAgIC8vIFRPRE86IGhhc2ggZm9yIGhpc3RvZ3JhbSB0cyBhbmQgYXVkaW8gc3RhdGUgbmVlZCB0byBtYXRjaAotICAgICAgICAgICAgLy8gYW5kIGNvcnJlc3BvbmQgdG8gYXVkaW8gcHJvZHVjdGlvbiBzb3VyY2UgZmlsZSBsb2NhdGlvbgotICAgICAgICAgICAgbVRocmVhZFBlcmZvcm1hbmNlQW5hbHlzaXNbZGF0YS0+YXV0aG9yXVswIC8qaGFzaCovXS5sb2dUc0VudHJ5KHRzKTsKLSAgICAgICAgICAgICsrZW50cnk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBjYXNlIEVWRU5UX0FVRElPX1NUQVRFOiB7Ci0gICAgICAgICAgICBIaXN0VHNFbnRyeVdpdGhBdXRob3IgKmRhdGEgPSAoSGlzdFRzRW50cnlXaXRoQXV0aG9yICopIChlbnRyeS0+ZGF0YSk7Ci0gICAgICAgICAgICAvLyBUT0RPIFRoaXMgbWVtY3BpZXMgYXJlIGhlcmUgdG8gYXZvaWQgdW5hbGlnbmVkIG1lbW9yeSBhY2Nlc3MgY3Jhc2guCi0gICAgICAgICAgICAvLyBUaGVyZSdzIHByb2JhYmx5IGEgbW9yZSBlZmZpY2llbnQgd2F5IHRvIGRvIGl0Ci0gICAgICAgICAgICBsb2dfaGFzaF90IGhhc2g7Ci0gICAgICAgICAgICBtZW1jcHkoJmhhc2gsICYoZGF0YS0+aGFzaCksIHNpemVvZihoYXNoKSk7Ci0gICAgICAgICAgICAvLyBUT0RPOiByZW1vdmUgdHMgaWYgdW51c2VkCi0gICAgICAgICAgICBpbnQ2NF90IHRzOwotICAgICAgICAgICAgbWVtY3B5KCZ0cywgJmRhdGEtPnRzLCBzaXplb2YodHMpKTsKLSAgICAgICAgICAgIG1UaHJlYWRQZXJmb3JtYW5jZUFuYWx5c2lzW2RhdGEtPmF1dGhvcl1bMCAvKmhhc2gqL10uaGFuZGxlU3RhdGVDaGFuZ2UoKTsKLSAgICAgICAgICAgICsrZW50cnk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBjYXNlIEVWRU5UX0VORF9GTVQ6Ci0gICAgICAgICAgICBib2R5LmFwcGVuZEZvcm1hdCgid2FybmluZzogZ290IHRvIGVuZCBmb3JtYXQgZXZlbnQiKTsKLSAgICAgICAgICAgICsrZW50cnk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBFVkVOVF9SRVNFUlZFRDoKLSAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIGJvZHkuYXBwZW5kRm9ybWF0KCJ3YXJuaW5nOiB1bmV4cGVjdGVkIGV2ZW50ICVkIiwgZW50cnktPnR5cGUpOwotICAgICAgICAgICAgKytlbnRyeTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgfQotICAgIC8vIEZJWE1FOiBkZWNpZGUgd2hldGhlciB0byBwcmludCB0aGUgd2FybmluZ3MgaGVyZSBvciBlbHNld2hlcmUKLSAgICBpZiAoIWJvZHkuaXNFbXB0eSgpKSB7Ci0gICAgICAgIGR1bXBMaW5lKHRpbWVzdGFtcCwgYm9keSk7Ci0gICAgfQotfQotCi12b2lkIE5CTG9nOjpNZXJnZVJlYWRlcjo6Z2V0QW5kUHJvY2Vzc1NuYXBzaG90KCkKLXsKLSAgICAvLyBnZXQgYSBzbmFwc2hvdCwgcHJvY2VzcyBpdAotICAgIHN0ZDo6dW5pcXVlX3B0cjxTbmFwc2hvdD4gc25hcCA9IGdldFNuYXBzaG90KCk7Ci0gICAgZ2V0QW5kUHJvY2Vzc1NuYXBzaG90KCpzbmFwKTsKLX0KLQotdm9pZCBOQkxvZzo6TWVyZ2VSZWFkZXI6OmR1bXAoaW50IGZkLCBpbnQgaW5kZW50KSB7Ci0gICAgLy8gVE9ETzogYWRkIGEgbXV0ZXggYXJvdW5kIG1lZGlhLmxvZyBkdW1wCi0gICAgUmVwb3J0UGVyZm9ybWFuY2U6OmR1bXAoZmQsIGluZGVudCwgbVRocmVhZFBlcmZvcm1hbmNlQW5hbHlzaXMpOwotfQotCi0vLyBXcml0ZXMgYSBzdHJpbmcgdG8gdGhlIGNvbnNvbGUKLXZvaWQgTkJMb2c6OlJlYWRlcjo6ZHVtcExpbmUoY29uc3QgU3RyaW5nOCAmdGltZXN0YW1wLCBTdHJpbmc4ICZib2R5KQotewotICAgIGlmIChtRmQgPj0gMCkgewotICAgICAgICBkcHJpbnRmKG1GZCwgIiUuKnMlcyAlc1xuIiwgbUluZGVudCwgIiIsIHRpbWVzdGFtcC5zdHJpbmcoKSwgYm9keS5zdHJpbmcoKSk7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgQUxPR0koIiUuKnMlcyAlcyIsIG1JbmRlbnQsICIiLCB0aW1lc3RhbXAuc3RyaW5nKCksIGJvZHkuc3RyaW5nKCkpOwotICAgIH0KLSAgICBib2R5LmNsZWFyKCk7Ci19Ci0KLWJvb2wgTkJMb2c6OlJlYWRlcjo6aXNJTWVtb3J5KGNvbnN0IHNwPElNZW1vcnk+JiBpTWVtb3J5KSBjb25zdAotewotICAgIHJldHVybiBpTWVtb3J5ICE9IDAgJiYgbUlNZW1vcnkgIT0gMCAmJiBpTWVtb3J5LT5wb2ludGVyKCkgPT0gbUlNZW1vcnktPnBvaW50ZXIoKTsKLX0KLQotLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLXZvaWQgTkJMb2c6OmFwcGVuZFRpbWVzdGFtcChTdHJpbmc4ICpib2R5LCBjb25zdCB2b2lkICpkYXRhKSB7Ci0gICAgaW50NjRfdCB0czsKLSAgICBtZW1jcHkoJnRzLCBkYXRhLCBzaXplb2YodHMpKTsKLSAgICBib2R5LT5hcHBlbmRGb3JtYXQoIlslZC4lMDNkXSIsIChpbnQpICh0cyAvICgxMDAwICogMTAwMCAqIDEwMDApKSwKLSAgICAgICAgICAgICAgICAgICAgKGludCkgKCh0cyAvICgxMDAwICogMTAwMCkpICUgMTAwMCkpOwotfQotCi12b2lkIE5CTG9nOjphcHBlbmRJbnQoU3RyaW5nOCAqYm9keSwgY29uc3Qgdm9pZCAqZGF0YSkgewotICAgIGludCB4ID0gKigoaW50KikgZGF0YSk7Ci0gICAgYm9keS0+YXBwZW5kRm9ybWF0KCI8JWQ+IiwgeCk7Ci19Ci0KLXZvaWQgTkJMb2c6OmFwcGVuZEZsb2F0KFN0cmluZzggKmJvZHksIGNvbnN0IHZvaWQgKmRhdGEpIHsKLSAgICBmbG9hdCBmOwotICAgIG1lbWNweSgmZiwgZGF0YSwgc2l6ZW9mKGZsb2F0KSk7Ci0gICAgYm9keS0+YXBwZW5kRm9ybWF0KCI8JWY+IiwgZik7Ci19Ci0KLXZvaWQgTkJMb2c6OmFwcGVuZFBJRChTdHJpbmc4ICpib2R5LCBjb25zdCB2b2lkKiBkYXRhLCBzaXplX3QgbGVuZ3RoKSB7Ci0gICAgcGlkX3QgaWQgPSAqKChwaWRfdCopIGRhdGEpOwotICAgIGNoYXIgKiBuYW1lID0gJigoY2hhciopIGRhdGEpW3NpemVvZihwaWRfdCldOwotICAgIGJvZHktPmFwcGVuZEZvcm1hdCgiPFBJRDogJWQsIG5hbWU6ICUuKnM+IiwgaWQsIChpbnQpIChsZW5ndGggLSBzaXplb2YocGlkX3QpKSwgbmFtZSk7Ci19Ci0KLVN0cmluZzggTkJMb2c6OmJ1ZmZlckR1bXAoY29uc3QgdWludDhfdCAqYnVmZmVyLCBzaXplX3Qgc2l6ZSkKLXsKLSAgICBTdHJpbmc4IHN0cjsKLSAgICBzdHIuYXBwZW5kKCJbICIpOwotICAgIGZvcihzaXplX3QgaSA9IDA7IGkgPCBzaXplOyBpKyspCi0gICAgewotICAgICAgICBzdHIuYXBwZW5kRm9ybWF0KCIlZCAiLCBidWZmZXJbaV0pOwotICAgIH0KLSAgICBzdHIuYXBwZW5kKCJdIik7Ci0gICAgcmV0dXJuIHN0cjsKLX0KLQotU3RyaW5nOCBOQkxvZzo6YnVmZmVyRHVtcChjb25zdCBFbnRyeUl0ZXJhdG9yICZpdCkKLXsKLSAgICByZXR1cm4gYnVmZmVyRHVtcChpdCwgaXQtPmxlbmd0aCArIEVudHJ5OjprT3ZlcmhlYWQpOwotfQotCi1OQkxvZzo6RW50cnlJdGVyYXRvciBOQkxvZzo6UmVhZGVyOjpoYW5kbGVGb3JtYXQoY29uc3QgRm9ybWF0RW50cnkgJmZtdEVudHJ5LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3RyaW5nOCAqdGltZXN0YW1wLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3RyaW5nOCAqYm9keSkgewotICAgIC8vIGxvZyB0aW1lc3RhbXAKLSAgICBpbnQ2NF90IHRzID0gZm10RW50cnkudGltZXN0YW1wKCk7Ci0gICAgdGltZXN0YW1wLT5jbGVhcigpOwotICAgIHRpbWVzdGFtcC0+YXBwZW5kRm9ybWF0KCJbJWQuJTAzZF0iLCAoaW50KSAodHMgLyAoMTAwMCAqIDEwMDAgKiAxMDAwKSksCi0gICAgICAgICAgICAgICAgICAgIChpbnQpICgodHMgLyAoMTAwMCAqIDEwMDApKSAlIDEwMDApKTsKLQotICAgIC8vIGxvZyB1bmlxdWUgaGFzaAotICAgIGxvZ19oYXNoX3QgaGFzaCA9IGZtdEVudHJ5Lmhhc2goKTsKLSAgICAvLyBwcmludCBvbmx5IGxvd2VyIDE2Yml0IG9mIGhhc2ggYXMgaGV4IGFuZCBsaW5lIGFzIGludCB0byByZWR1Y2Ugc3BhbSBpbiB0aGUgbG9nCi0gICAgYm9keS0+YXBwZW5kRm9ybWF0KCIlLjRYLSVkICIsIChpbnQpKGhhc2ggPj4gMTYpICYgMHhGRkZGLCAoaW50KSBoYXNoICYgMHhGRkZGKTsKLQotICAgIC8vIGxvZyBhdXRob3IgKGlmIHByZXNlbnQpCi0gICAgaGFuZGxlQXV0aG9yKGZtdEVudHJ5LCBib2R5KTsKLQotICAgIC8vIGxvZyBzdHJpbmcKLSAgICBOQkxvZzo6RW50cnlJdGVyYXRvciBhcmcgPSBmbXRFbnRyeS5hcmdzKCk7Ci0KLSAgICBjb25zdCBjaGFyKiBmbXQgPSBmbXRFbnRyeS5mb3JtYXRTdHJpbmcoKTsKLSAgICBzaXplX3QgZm10X2xlbmd0aCA9IGZtdEVudHJ5LmZvcm1hdFN0cmluZ0xlbmd0aCgpOwotCi0gICAgZm9yIChzaXplX3QgZm10X29mZnNldCA9IDA7IGZtdF9vZmZzZXQgPCBmbXRfbGVuZ3RoOyArK2ZtdF9vZmZzZXQpIHsKLSAgICAgICAgaWYgKGZtdFtmbXRfb2Zmc2V0XSAhPSAnJScpIHsKLSAgICAgICAgICAgIGJvZHktPmFwcGVuZCgmZm10W2ZtdF9vZmZzZXRdLCAxKTsgLy8gVE9ETyBvcHRpbWl6ZSB0byB3cml0ZSBjb25zZWN1dGl2ZSBzdHJpbmdzIGF0IG9uY2UKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICB9Ci0gICAgICAgIC8vIGNhc2UgIiUlIiIKLSAgICAgICAgaWYgKGZtdFsrK2ZtdF9vZmZzZXRdID09ICclJykgewotICAgICAgICAgICAgYm9keS0+YXBwZW5kKCIlIik7Ci0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgfQotICAgICAgICAvLyBjYXNlICIlXDAiCi0gICAgICAgIGlmIChmbXRfb2Zmc2V0ID09IGZtdF9sZW5ndGgpIHsKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICB9Ci0KLSAgICAgICAgTkJMb2c6OkV2ZW50IGV2ZW50ID0gKE5CTG9nOjpFdmVudCkgYXJnLT50eXBlOwotICAgICAgICBzaXplX3QgbGVuZ3RoID0gYXJnLT5sZW5ndGg7Ci0KLSAgICAgICAgLy8gVE9ETyBjaGVjayBsZW5ndGggZm9yIGV2ZW50IHR5cGUgaXMgY29ycmVjdAotCi0gICAgICAgIGlmIChldmVudCA9PSBFVkVOVF9FTkRfRk1UKSB7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotCi0gICAgICAgIC8vIFRPRE86IGltcGxlbWVudCBtb3JlIGNvbXBsZXggZm9ybWF0dGluZyBzdWNoIGFzICUuM2YKLSAgICAgICAgY29uc3QgdWludDhfdCAqZGF0dW0gPSBhcmctPmRhdGE7IC8vIHBvaW50ZXIgdG8gdGhlIGN1cnJlbnQgZXZlbnQgYXJncwotICAgICAgICBzd2l0Y2goZm10W2ZtdF9vZmZzZXRdKQotICAgICAgICB7Ci0gICAgICAgIGNhc2UgJ3MnOiAvLyBzdHJpbmcKLSAgICAgICAgICAgIEFMT0dXX0lGKGV2ZW50ICE9IEVWRU5UX1NUUklORywKLSAgICAgICAgICAgICAgICAiTkJMb2cgUmVhZGVyIGluY29tcGF0aWJsZSBldmVudCBmb3Igc3RyaW5nIHNwZWNpZmllcjogJWQiLCBldmVudCk7Ci0gICAgICAgICAgICBib2R5LT5hcHBlbmQoKGNvbnN0IGNoYXIqKSBkYXR1bSwgbGVuZ3RoKTsKLSAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgIGNhc2UgJ3QnOiAvLyB0aW1lc3RhbXAKLSAgICAgICAgICAgIEFMT0dXX0lGKGV2ZW50ICE9IEVWRU5UX1RJTUVTVEFNUCwKLSAgICAgICAgICAgICAgICAiTkJMb2cgUmVhZGVyIGluY29tcGF0aWJsZSBldmVudCBmb3IgdGltZXN0YW1wIHNwZWNpZmllcjogJWQiLCBldmVudCk7Ci0gICAgICAgICAgICBhcHBlbmRUaW1lc3RhbXAoYm9keSwgZGF0dW0pOwotICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgY2FzZSAnZCc6IC8vIGludGVnZXIKLSAgICAgICAgICAgIEFMT0dXX0lGKGV2ZW50ICE9IEVWRU5UX0lOVEVHRVIsCi0gICAgICAgICAgICAgICAgIk5CTG9nIFJlYWRlciBpbmNvbXBhdGlibGUgZXZlbnQgZm9yIGludGVnZXIgc3BlY2lmaWVyOiAlZCIsIGV2ZW50KTsKLSAgICAgICAgICAgIGFwcGVuZEludChib2R5LCBkYXR1bSk7Ci0gICAgICAgICAgICBicmVhazsKLQotICAgICAgICBjYXNlICdmJzogLy8gZmxvYXQKLSAgICAgICAgICAgIEFMT0dXX0lGKGV2ZW50ICE9IEVWRU5UX0ZMT0FULAotICAgICAgICAgICAgICAgICJOQkxvZyBSZWFkZXIgaW5jb21wYXRpYmxlIGV2ZW50IGZvciBmbG9hdCBzcGVjaWZpZXI6ICVkIiwgZXZlbnQpOwotICAgICAgICAgICAgYXBwZW5kRmxvYXQoYm9keSwgZGF0dW0pOwotICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgY2FzZSAncCc6IC8vIHBpZAotICAgICAgICAgICAgQUxPR1dfSUYoZXZlbnQgIT0gRVZFTlRfUElELAotICAgICAgICAgICAgICAgICJOQkxvZyBSZWFkZXIgaW5jb21wYXRpYmxlIGV2ZW50IGZvciBwaWQgc3BlY2lmaWVyOiAlZCIsIGV2ZW50KTsKLSAgICAgICAgICAgIGFwcGVuZFBJRChib2R5LCBkYXR1bSwgbGVuZ3RoKTsKLSAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICBBTE9HVygiTkJMb2cgUmVhZGVyIGVuY291bnRlcmVkIHVua25vd24gY2hhcmFjdGVyICVjIiwgZm10W2ZtdF9vZmZzZXRdKTsKLSAgICAgICAgfQotICAgICAgICArK2FyZzsKLSAgICB9Ci0gICAgQUxPR1dfSUYoYXJnLT50eXBlICE9IEVWRU5UX0VORF9GTVQsICJFeHBlY3RlZCBlbmQgb2YgZm9ybWF0LCBnb3QgJWQiLCBhcmctPnR5cGUpOwotICAgICsrYXJnOwotICAgIHJldHVybiBhcmc7Ci19Ci0KLU5CTG9nOjpNZXJnZXI6Ok1lcmdlcihjb25zdCB2b2lkICpzaGFyZWQsIHNpemVfdCBzaXplKToKLSAgICAgIG1TaGFyZWQoKFNoYXJlZCAqKSBzaGFyZWQpLAotICAgICAgbUZpZm8obVNoYXJlZCAhPSBOVUxMID8KLSAgICAgICAgbmV3IGF1ZGlvX3V0aWxzX2ZpZm8oc2l6ZSwgc2l6ZW9mKHVpbnQ4X3QpLAotICAgICAgICAgICAgbVNoYXJlZC0+bUJ1ZmZlciwgbVNoYXJlZC0+bVJlYXIsIE5VTEwgLyp0aHJvdHRsZXNGcm9udCovKSA6IE5VTEwpLAotICAgICAgbUZpZm9Xcml0ZXIobUZpZm8gIT0gTlVMTCA/IG5ldyBhdWRpb191dGlsc19maWZvX3dyaXRlcigqbUZpZm8pIDogTlVMTCkKLSAgICAgIHt9Ci0KLXZvaWQgTkJMb2c6Ok1lcmdlcjo6YWRkUmVhZGVyKGNvbnN0IE5CTG9nOjpOYW1lZFJlYWRlciAmcmVhZGVyKSB7Ci0KLSAgICAvLyBGSVhNRSBUaGlzIGlzIGNhbGxlZCBieSBiaW5kZXIgdGhyZWFkIGluIE1lZGlhTG9nU2VydmljZTo6cmVnaXN0ZXJXcml0ZXIKLSAgICAvLyAgICAgICBidXQgdGhlIGFjY2VzcyB0byBzaGFyZWQgdmFyaWFibGUgbU5hbWVkUmVhZGVycyBpcyBub3QgeWV0IHByb3RlY3RlZCBieSBhIGxvY2suCi0gICAgbU5hbWVkUmVhZGVycy5wdXNoX2JhY2socmVhZGVyKTsKLX0KLQotLy8gaXRlbXMgcGxhY2VkIGluIHByaW9yaXR5IHF1ZXVlIGR1cmluZyBtZXJnZQotLy8gY29tcG9zZWQgYnkgYSB0aW1lc3RhbXAgYW5kIHRoZSBpbmRleCBvZiB0aGUgc25hcHNob3Qgd2hlcmUgdGhlIHRpbWVzdGFtcCBjYW1lIGZyb20KLXN0cnVjdCBNZXJnZUl0ZW0KLXsKLSAgICBpbnQ2NF90IHRzOwotICAgIGludCBpbmRleDsKLSAgICBNZXJnZUl0ZW0oaW50NjRfdCB0cywgaW50IGluZGV4KTogdHModHMpLCBpbmRleChpbmRleCkge30KLX07Ci0KLS8vIG9wZXJhdG9ycyBuZWVkZWQgZm9yIHByaW9yaXR5IHF1ZXVlIGluIG1lcmdlCi0vLyBib29sIG9wZXJhdG9yPihjb25zdCBpbnQ2NF90ICZ0MSwgY29uc3QgaW50NjRfdCAmdDIpIHsKLS8vICAgICByZXR1cm4gdDEudHZfc2VjID4gdDIudHZfc2VjIHx8ICh0MS50dl9zZWMgPT0gdDIudHZfc2VjICYmIHQxLnR2X25zZWMgPiB0Mi50dl9uc2VjKTsKLS8vIH0KLQotYm9vbCBvcGVyYXRvcj4oY29uc3Qgc3RydWN0IE1lcmdlSXRlbSAmaTEsIGNvbnN0IHN0cnVjdCBNZXJnZUl0ZW0gJmkyKSB7Ci0gICAgcmV0dXJuIGkxLnRzID4gaTIudHMgfHwgKGkxLnRzID09IGkyLnRzICYmIGkxLmluZGV4ID4gaTIuaW5kZXgpOwotfQotCi0vLyBNZXJnZSByZWdpc3RlcmVkIHJlYWRlcnMsIHNvcnRlZCBieSB0aW1lc3RhbXAsIGFuZCB3cml0ZSBkYXRhIHRvIGEgc2luZ2xlIEZJRk8gaW4gbG9jYWwgbWVtb3J5Ci12b2lkIE5CTG9nOjpNZXJnZXI6Om1lcmdlKCkgewotICAgIC8vIEZJWE1FIFRoaXMgaXMgY2FsbGVkIGJ5IG1lcmdlIHRocmVhZAotICAgIC8vICAgICAgIGJ1dCB0aGUgYWNjZXNzIHRvIHNoYXJlZCB2YXJpYWJsZSBtTmFtZWRSZWFkZXJzIGlzIG5vdCB5ZXQgcHJvdGVjdGVkIGJ5IGEgbG9jay4KLSAgICBpbnQgbkxvZ3MgPSBtTmFtZWRSZWFkZXJzLnNpemUoKTsKLSAgICBzdGQ6OnZlY3RvcjxzdGQ6OnVuaXF1ZV9wdHI8TkJMb2c6OlJlYWRlcjo6U25hcHNob3Q+PiBzbmFwc2hvdHMobkxvZ3MpOwotICAgIHN0ZDo6dmVjdG9yPE5CTG9nOjpFbnRyeUl0ZXJhdG9yPiBvZmZzZXRzKG5Mb2dzKTsKLSAgICBmb3IgKGludCBpID0gMDsgaSA8IG5Mb2dzOyArK2kpIHsKLSAgICAgICAgc25hcHNob3RzW2ldID0gbU5hbWVkUmVhZGVyc1tpXS5yZWFkZXIoKS0+Z2V0U25hcHNob3QoKTsKLSAgICAgICAgb2Zmc2V0c1tpXSA9IHNuYXBzaG90c1tpXS0+YmVnaW4oKTsKLSAgICB9Ci0gICAgLy8gaW5pdGlhbGl6ZSBvZmZzZXRzCi0gICAgLy8gVE9ETyBjdXN0b20gaGVhcCBpbXBsZW1lbnRhdGlvbiBjb3VsZCBhbGxvdyB0byB1cGRhdGUgdG9wLCBpbXByb3ZpbmcgcGVyZm9ybWFuY2UKLSAgICAvLyBmb3IgYnVyc3R5IGJ1ZmZlcnMKLSAgICBzdGQ6OnByaW9yaXR5X3F1ZXVlPE1lcmdlSXRlbSwgc3RkOjp2ZWN0b3I8TWVyZ2VJdGVtPiwgc3RkOjpncmVhdGVyPE1lcmdlSXRlbT4+IHRpbWVzdGFtcHM7Ci0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBuTG9nczsgKytpKQotICAgIHsKLSAgICAgICAgaWYgKG9mZnNldHNbaV0gIT0gc25hcHNob3RzW2ldLT5lbmQoKSkgewotICAgICAgICAgICAgaW50NjRfdCB0cyA9IEFic3RyYWN0RW50cnk6OmJ1aWxkRW50cnkob2Zmc2V0c1tpXSktPnRpbWVzdGFtcCgpOwotICAgICAgICAgICAgdGltZXN0YW1wcy5lbXBsYWNlKHRzLCBpKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIHdoaWxlICghdGltZXN0YW1wcy5lbXB0eSgpKSB7Ci0gICAgICAgIC8vIGZpbmQgbWluaW11bSB0aW1lc3RhbXAKLSAgICAgICAgaW50IGluZGV4ID0gdGltZXN0YW1wcy50b3AoKS5pbmRleDsKLSAgICAgICAgLy8gY29weSBpdCB0byB0aGUgbG9nLCBpbmNyZWFzaW5nIG9mZnNldAotICAgICAgICBvZmZzZXRzW2luZGV4XSA9IEFic3RyYWN0RW50cnk6OmJ1aWxkRW50cnkob2Zmc2V0c1tpbmRleF0pLT5jb3B5V2l0aEF1dGhvcihtRmlmb1dyaXRlciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5kZXgpOwotICAgICAgICAvLyB1cGRhdGUgZGF0YSBzdHJ1Y3R1cmVzCi0gICAgICAgIHRpbWVzdGFtcHMucG9wKCk7Ci0gICAgICAgIGlmIChvZmZzZXRzW2luZGV4XSAhPSBzbmFwc2hvdHNbaW5kZXhdLT5lbmQoKSkgewotICAgICAgICAgICAgaW50NjRfdCB0cyA9IEFic3RyYWN0RW50cnk6OmJ1aWxkRW50cnkob2Zmc2V0c1tpbmRleF0pLT50aW1lc3RhbXAoKTsKLSAgICAgICAgICAgIHRpbWVzdGFtcHMuZW1wbGFjZSh0cywgaW5kZXgpOwotICAgICAgICB9Ci0gICAgfQotfQotCi1jb25zdCBzdGQ6OnZlY3RvcjxOQkxvZzo6TmFtZWRSZWFkZXI+JiBOQkxvZzo6TWVyZ2VyOjpnZXROYW1lZFJlYWRlcnMoKSBjb25zdCB7Ci0gICAgLy8gRklYTUUgVGhpcyBpcyByZXR1cm5pbmcgYSByZWZlcmVuY2UgdG8gYSBzaGFyZWQgdmFyaWFibGUgdGhhdCBuZWVkcyBhIGxvY2sKLSAgICByZXR1cm4gbU5hbWVkUmVhZGVyczsKLX0KLQotLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLU5CTG9nOjpNZXJnZVJlYWRlcjo6TWVyZ2VSZWFkZXIoY29uc3Qgdm9pZCAqc2hhcmVkLCBzaXplX3Qgc2l6ZSwgTWVyZ2VyICZtZXJnZXIpCi0gICAgOiBSZWFkZXIoc2hhcmVkLCBzaXplKSwgbU5hbWVkUmVhZGVycyhtZXJnZXIuZ2V0TmFtZWRSZWFkZXJzKCkpIHt9Ci0KLXZvaWQgTkJMb2c6Ok1lcmdlUmVhZGVyOjpoYW5kbGVBdXRob3IoY29uc3QgTkJMb2c6OkFic3RyYWN0RW50cnkgJmVudHJ5LCBTdHJpbmc4ICpib2R5KSB7Ci0gICAgaW50IGF1dGhvciA9IGVudHJ5LmF1dGhvcigpOwotICAgIC8vIEZJWE1FIE5lZWRzIGEgbG9jawotICAgIGNvbnN0IGNoYXIqIG5hbWUgPSBtTmFtZWRSZWFkZXJzW2F1dGhvcl0ubmFtZSgpOwotICAgIGJvZHktPmFwcGVuZEZvcm1hdCgiJXM6ICIsIG5hbWUpOwotfQotCi0vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotTkJMb2c6Ok1lcmdlVGhyZWFkOjpNZXJnZVRocmVhZChOQkxvZzo6TWVyZ2VyICZtZXJnZXIsIE5CTG9nOjpNZXJnZVJlYWRlciAmbWVyZ2VSZWFkZXIpCi0gICAgOiBtTWVyZ2VyKG1lcmdlciksCi0gICAgICBtTWVyZ2VSZWFkZXIobWVyZ2VSZWFkZXIpLAotICAgICAgbVRpbWVvdXRVcygwKSB7fQotCi1OQkxvZzo6TWVyZ2VUaHJlYWQ6On5NZXJnZVRocmVhZCgpIHsKLSAgICAvLyBzZXQgZXhpdCBmbGFnLCBzZXQgdGltZW91dCB0byAwIHRvIGZvcmNlIHRocmVhZExvb3AgdG8gZXhpdCBhbmQgd2FpdCBmb3IgdGhlIHRocmVhZCB0byBqb2luCi0gICAgcmVxdWVzdEV4aXQoKTsKLSAgICBzZXRUaW1lb3V0VXMoMCk7Ci0gICAgam9pbigpOwotfQotCi1ib29sIE5CTG9nOjpNZXJnZVRocmVhZDo6dGhyZWFkTG9vcCgpIHsKLSAgICBib29sIGRvTWVyZ2U7Ci0gICAgewotICAgICAgICBBdXRvTXV0ZXggX2wobU11dGV4KTsKLSAgICAgICAgLy8gSWYgbVRpbWVvdXRVcyBpcyBuZWdhdGl2ZSwgd2FpdCBvbiB0aGUgY29uZGl0aW9uIHZhcmlhYmxlIHVudGlsIGl0J3MgcG9zaXRpdmUuCi0gICAgICAgIC8vIElmIGl0J3MgcG9zaXRpdmUsIHdhaXQga1RocmVhZFNsZWVwUGVyaW9kVXMgYW5kIHRoZW4gbWVyZ2UKLSAgICAgICAgbnNlY3NfdCB3YWl0VGltZSA9IG1UaW1lb3V0VXMgPiAwID8ga1RocmVhZFNsZWVwUGVyaW9kVXMgKiAxMDAwIDogTExPTkdfTUFYOwotICAgICAgICBtQ29uZC53YWl0UmVsYXRpdmUobU11dGV4LCB3YWl0VGltZSk7Ci0gICAgICAgIGRvTWVyZ2UgPSBtVGltZW91dFVzID4gMDsKLSAgICAgICAgbVRpbWVvdXRVcyAtPSBrVGhyZWFkU2xlZXBQZXJpb2RVczsKLSAgICB9Ci0gICAgaWYgKGRvTWVyZ2UpIHsKLSAgICAgICAgLy8gTWVyZ2UgZGF0YSBmcm9tIGFsbCB0aGUgcmVhZGVycwotICAgICAgICBtTWVyZ2VyLm1lcmdlKCk7Ci0gICAgICAgIC8vIFByb2Nlc3MgdGhlIGRhdGEgY29sbGVjdGVkIGJ5IG1NZXJnZXIgYW5kIHdyaXRlIGl0IHRvIFBlcmZvcm1hbmNlQW5hbHlzaXMKLSAgICAgICAgLy8gRklYTUU6IGRlY2lkZSB3aGV0aGVyIHRvIGNhbGwgZ2V0QW5kUHJvY2Vzc1NuYXBzaG90IGV2ZXJ5IHRpbWUKLSAgICAgICAgLy8gb3Igd2hldGhlciB0byBoYXZlIGEgc2VwYXJhdGUgdGhyZWFkIHRoYXQgY2FsbHMgaXQgd2l0aCBhIGxvd2VyIGZyZXF1ZW5jeQotICAgICAgICBtTWVyZ2VSZWFkZXIuZ2V0QW5kUHJvY2Vzc1NuYXBzaG90KCk7Ci0gICAgfQotICAgIHJldHVybiB0cnVlOwotfQotCi12b2lkIE5CTG9nOjpNZXJnZVRocmVhZDo6d2FrZXVwKCkgewotICAgIHNldFRpbWVvdXRVcyhrVGhyZWFkV2FrZXVwUGVyaW9kVXMpOwotfQotCi12b2lkIE5CTG9nOjpNZXJnZVRocmVhZDo6c2V0VGltZW91dFVzKGludCB0aW1lKSB7Ci0gICAgQXV0b011dGV4IF9sKG1NdXRleCk7Ci0gICAgbVRpbWVvdXRVcyA9IHRpbWU7Ci0gICAgbUNvbmQuc2lnbmFsKCk7Ci19Ci0KLX0gICAvLyBuYW1lc3BhY2UgYW5kcm9pZApkaWZmIC0tZ2l0IGEvbWVkaWEvbGlibmJsb2cvUGVyZm9ybWFuY2VBbmFseXNpcy5jcHAgYi9tZWRpYS9saWJuYmxvZy9QZXJmb3JtYW5jZUFuYWx5c2lzLmNwcAppbmRleCBmMDllOTNkLi5lOTFhNTExIDEwMDY0NAotLS0gYS9tZWRpYS9saWJuYmxvZy9QZXJmb3JtYW5jZUFuYWx5c2lzLmNwcAorKysgYi9tZWRpYS9saWJuYmxvZy9QZXJmb3JtYW5jZUFuYWx5c2lzLmNwcApAQCAtMTcsMTMgKzE3LDE2IEBACiAKICNkZWZpbmUgTE9HX1RBRyAiUGVyZm9ybWFuY2VBbmFseXNpcyIKIC8vICNkZWZpbmUgTE9HX05ERUJVRyAwCisvLyAjZGVmaW5lIFdSSVRFX1RPX0ZJTEUKIAogI2luY2x1ZGUgPGFsZ29yaXRobT4KICNpbmNsdWRlIDxjbGltaXRzPgogI2luY2x1ZGUgPGRlcXVlPgotI2luY2x1ZGUgPGlvc3RyZWFtPgorI2luY2x1ZGUgPGlvbWFuaXA+CiAjaW5jbHVkZSA8bWF0aC5oPgogI2luY2x1ZGUgPG51bWVyaWM+CisjaW5jbHVkZSA8c3N0cmVhbT4KKyNpbmNsdWRlIDxzdHJpbmc+CiAjaW5jbHVkZSA8dmVjdG9yPgogI2luY2x1ZGUgPHN0ZGFyZy5oPgogI2luY2x1ZGUgPHN0ZGludC5oPgpAQCAtMzIsMjAgKzM1LDEyNiBAQAogI2luY2x1ZGUgPHN5cy9wcmN0bC5oPgogI2luY2x1ZGUgPHRpbWUuaD4KICNpbmNsdWRlIDxuZXc+CisjaW5jbHVkZSA8YXVkaW9fdXRpbHMvTG9nUGxvdC5oPgogI2luY2x1ZGUgPGF1ZGlvX3V0aWxzL3JvdW5kdXAuaD4KICNpbmNsdWRlIDxtZWRpYS9uYmxvZy9OQkxvZy5oPgogI2luY2x1ZGUgPG1lZGlhL25ibG9nL1BlcmZvcm1hbmNlQW5hbHlzaXMuaD4KICNpbmNsdWRlIDxtZWRpYS9uYmxvZy9SZXBvcnRQZXJmb3JtYW5jZS5oPgogI2luY2x1ZGUgPHV0aWxzL0xvZy5oPgogI2luY2x1ZGUgPHV0aWxzL1N0cmluZzguaD4KKyNpbmNsdWRlIDx1dGlscy9UaW1lcnMuaD4KIAogI2luY2x1ZGUgPHF1ZXVlPgogI2luY2x1ZGUgPHV0aWxpdHk+CiAKIG5hbWVzcGFjZSBhbmRyb2lkIHsKLQogbmFtZXNwYWNlIFJlcG9ydFBlcmZvcm1hbmNlIHsKIAordm9pZCBIaXN0b2dyYW06OmFkZChkb3VibGUgdmFsdWUpCit7CisgICAgaWYgKG1CaW5TaXplIDw9IDAgfHwgbUJpbnMuc2l6ZSgpIDwgMikgeworICAgICAgICByZXR1cm47CisgICAgfQorICAgIC8vIFRPRE8gSGFuZGxlIGRvbWFpbiBhbmQgcmFuZ2UgZXJyb3IgZXhjZXB0aW9ucz8KKyAgICBjb25zdCBpbnQgdW5ib3VuZGVkSW5kZXggPSBscm91bmQoKHZhbHVlIC0gbUxvdykgLyBtQmluU2l6ZSkgKyAxOworICAgIC8vIHN0ZDo6Y2xhbXAgaXMgaW50cm9kdWNlZCBpbiBDKysxNworICAgIC8vY29uc3QgaW50IGluZGV4ID0gc3RkOjpjbGFtcCh1bmJvdW5kZWRJbmRleCwgMCwgKGludCkobUJpbnMuc2l6ZSgpIC0gMSkpOworICAgIGNvbnN0IGludCBpbmRleCA9IHN0ZDo6bWF4KDAsIHN0ZDo6bWluKChpbnQpKG1CaW5zLnNpemUoKSAtIDEpLCB1bmJvdW5kZWRJbmRleCkpOworICAgIG1CaW5zW2luZGV4XSsrOworICAgIG1Ub3RhbENvdW50Kys7Cit9CisKK3ZvaWQgSGlzdG9ncmFtOjpjbGVhcigpCit7CisgICAgc3RkOjpmaWxsKG1CaW5zLmJlZ2luKCksIG1CaW5zLmVuZCgpLCAwKTsKKyAgICBtVG90YWxDb3VudCA9IDA7Cit9CisKK3VpbnQ2NF90IEhpc3RvZ3JhbTo6dG90YWxDb3VudCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1Ub3RhbENvdW50OworfQorCitzdGQ6OnN0cmluZyBIaXN0b2dyYW06OnRvU3RyaW5nKCkgY29uc3QgeworICAgIHN0ZDo6c3RyaW5nc3RyZWFtIHNzOworICAgIHN0YXRpYyBjb25zdGV4cHIgY2hhciBrRGl2aWRlciA9ICd8JzsKKyAgICBzcyA8PCBrVmVyc2lvbiA8PCAiLCIgPDwgbUJpblNpemUgPDwgIiwiIDw8IG1OdW1CaW5zIDw8ICIsIiA8PCBtTG93IDw8ICIseyI7CisgICAgYm9vbCBmaXJzdCA9IHRydWU7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtQmlucy5zaXplKCk7IGkrKykgeworICAgICAgICBpZiAobUJpbnNbaV0gIT0gMCkgeworICAgICAgICAgICAgaWYgKCFmaXJzdCkgeworICAgICAgICAgICAgICAgIHNzIDw8ICIsIjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHNzIDw8IHN0YXRpY19jYXN0PGludD4oaSkgLSAxIDw8IGtEaXZpZGVyIDw8IG1CaW5zW2ldOworICAgICAgICAgICAgZmlyc3QgPSBmYWxzZTsKKyAgICAgICAgfQorICAgIH0KKyAgICBzcyA8PCAifSI7CisKKyAgICByZXR1cm4gc3Muc3RyKCk7Cit9CisKK3N0ZDo6c3RyaW5nIEhpc3RvZ3JhbTo6YXNjaWlBcnRTdHJpbmcoc2l6ZV90IGluZGVudCkgY29uc3QgeworICAgIGlmICh0b3RhbENvdW50KCkgPT0gMCB8fCBtQmluU2l6ZSA8PSAwIHx8IG1CaW5zLnNpemUoKSA8IDIpIHsKKyAgICAgICAgcmV0dXJuICIiOworICAgIH0KKworICAgIHN0YXRpYyBjb25zdGV4cHIgY2hhciBrTWFya2VyID0gJy0nOworICAgIC8vIE9uZSBpbmNyZW1lbnQgaXMgY29uc2lkZXJlZCBvbmUgc3RlcCBvZiBhIGJpbidzIGhlaWdodC4KKyAgICBzdGF0aWMgY29uc3RleHByIHNpemVfdCBrTWFya2Vyc1BlckluY3JlbWVudCA9IDI7CisgICAgc3RhdGljIGNvbnN0ZXhwciBzaXplX3Qga01heEluY3JlbWVudHMgPSA2NCArIDE7CisgICAgc3RhdGljIGNvbnN0ZXhwciBzaXplX3Qga01heE51bWJlcldpZHRoID0gNzsKKyAgICBzdGF0aWMgY29uc3Qgc3RkOjpzdHJpbmcga01hcmtlcnMoa01hcmtlcnNQZXJJbmNyZW1lbnQgKiBrTWF4SW5jcmVtZW50cywga01hcmtlcik7CisgICAgc3RhdGljIGNvbnN0IHN0ZDo6c3RyaW5nIGtTcGFjZXMoa01hcmtlcnNQZXJJbmNyZW1lbnQgKiBrTWF4SW5jcmVtZW50cywgJyAnKTsKKyAgICAvLyBnZXQgdGhlIGxhc3QgbiBjaGFyYWN0ZXJzIG9mIHMsIG9yIHRoZSB3aG9sZSBzdHJpbmcgaWYgaXQgaXMgc2hvcnRlcgorICAgIGF1dG8gZ2V0VGFpbCA9IFtdKGNvbnN0IHNpemVfdCBuLCBjb25zdCBzdGQ6OnN0cmluZyAmcykgeworICAgICAgICByZXR1cm4gcy5jX3N0cigpICsgcy5zaXplKCkgLSBzdGQ6Om1pbihuLCBzLnNpemUoKSk7CisgICAgfTsKKworICAgIC8vIFNpbmNlIHRvdGFsQ291bnQoKSA+IDAsIG1CaW5zIGlzIG5vdCBlbXB0eSBhbmQgbWF4Q291bnQgPiAwLgorICAgIGNvbnN0IHVuc2lnbmVkIG1heENvdW50ID0gKnN0ZDo6bWF4X2VsZW1lbnQobUJpbnMuYmVnaW4oKSwgbUJpbnMuZW5kKCkpOworICAgIGNvbnN0IHNpemVfdCBtYXhJbmNyZW1lbnRzID0gbG9nMihtYXhDb3VudCkgKyAxOworCisgICAgc3RkOjpzdHJpbmdzdHJlYW0gc3M7CisKKyAgICAvLyBOb24temVybyBiaW5zIG11c3QgZXhpc3QgYXQgdGhpcyBwb2ludCBiZWNhdXNlIHRvdGFsQ291bnQoKSA+IDAuCisgICAgc2l6ZV90IGZpcnN0Tm9uWmVyb0JpbiA9IDA7CisgICAgLy8gSWYgZmlyc3ROb25aZXJvQmluIHJlYWNoZXMgbUJpbnMuc2l6ZSgpIC0gMSwgdGhlbiBpdCBtdXN0IGJlIGEgbm9uemVybyBiaW4uCisgICAgZm9yICg7IGZpcnN0Tm9uWmVyb0JpbiA8IG1CaW5zLnNpemUoKSAtIDEgJiYgbUJpbnNbZmlyc3ROb25aZXJvQmluXSA9PSAwOyBmaXJzdE5vblplcm9CaW4rKykge30KKyAgICBjb25zdCBzaXplX3QgZmlyc3RCaW5Ub1ByaW50ID0gZmlyc3ROb25aZXJvQmluID09IDAgPyAwIDogZmlyc3ROb25aZXJvQmluIC0gMTsKKworICAgIHNpemVfdCBsYXN0Tm9uWmVyb0JpbiA9IG1CaW5zLnNpemUoKSAtIDE7CisgICAgLy8gSWYgbGFzdE5vblplcm9CaW4gcmVhY2hlcyAwLCB0aGVuIGl0IG11c3QgYmUgYSBub256ZXJvIGJpbi4KKyAgICBmb3IgKDsgbGFzdE5vblplcm9CaW4gPiAwICYmIG1CaW5zW2xhc3ROb25aZXJvQmluXSA9PSAwOyBsYXN0Tm9uWmVyb0Jpbi0tKSB7fQorICAgIGNvbnN0IHNpemVfdCBsYXN0QmluVG9QcmludCA9IGxhc3ROb25aZXJvQmluID09IG1CaW5zLnNpemUoKSAtIDEgPyBsYXN0Tm9uWmVyb0JpbgorICAgICAgICAgICAgOiBsYXN0Tm9uWmVyb0JpbiArIDE7CisKKyAgICBmb3IgKHNpemVfdCBiaW4gPSBmaXJzdEJpblRvUHJpbnQ7IGJpbiA8PSBsYXN0QmluVG9QcmludDsgYmluKyspIHsKKyAgICAgICAgc3MgPDwgc3RkOjpzZXR3KGluZGVudCArIGtNYXhOdW1iZXJXaWR0aCk7CisgICAgICAgIGlmIChiaW4gPT0gMCkgeworICAgICAgICAgICAgc3MgPDwgIjwiOworICAgICAgICB9IGVsc2UgaWYgKGJpbiA9PSBtQmlucy5zaXplKCkgLSAxKSB7CisgICAgICAgICAgICBzcyA8PCAiPiI7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBzcyA8PCBtTG93ICsgKGJpbiAtIDEpICogbUJpblNpemU7CisgICAgICAgIH0KKyAgICAgICAgc3MgPDwgIiB8IjsKKyAgICAgICAgc2l6ZV90IGluY3JlbWVudHMgPSAwOworICAgICAgICBjb25zdCB1aW50NjRfdCBiaW5Db3VudCA9IG1CaW5zW2Jpbl07CisgICAgICAgIGlmIChiaW5Db3VudCA+IDApIHsKKyAgICAgICAgICAgIGluY3JlbWVudHMgPSBsb2cyKGJpbkNvdW50KSArIDE7CisgICAgICAgICAgICBzcyA8PCBnZXRUYWlsKGluY3JlbWVudHMgKiBrTWFya2Vyc1BlckluY3JlbWVudCwga01hcmtlcnMpOworICAgICAgICB9CisgICAgICAgIHNzIDw8IGdldFRhaWwoKG1heEluY3JlbWVudHMgLSBpbmNyZW1lbnRzICsgMSkgKiBrTWFya2Vyc1BlckluY3JlbWVudCwga1NwYWNlcykKKyAgICAgICAgICAgICAgICA8PCBiaW5Db3VudCA8PCAiXG4iOworICAgIH0KKyAgICBzcyA8PCAiXG4iOworCisgICAgcmV0dXJuIHNzLnN0cigpOworfQorCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCiAvLyBHaXZlbiBhbiBhdWRpbyBwcm9jZXNzaW5nIHdha2V1cCB0aW1lc3RhbXAsIGJ1Y2tldHMgdGhlIHRpbWUgaW50ZXJ2YWwKIC8vIHNpbmNlIHRoZSBwcmV2aW91cyB0aW1lc3RhbXAgaW50byBhIGhpc3RvZ3JhbSwgc2VhcmNoZXMgZm9yCiAvLyBvdXRsaWVycywgYW5hbHl6ZXMgdGhlIG91dGxpZXIgc2VyaWVzIGZvciB1bmV4cGVjdGVkbHkKQEAgLTIwOCwyNyArMzE3LDYgQEAKICAgICByZXR1cm4gaXNPdXRsaWVyOwogfQogCi1zdGF0aWMgaW50IHdpZHRoT2YoaW50IHgpIHsKLSAgICBpbnQgd2lkdGggPSAwOwotICAgIGlmICh4IDwgMCkgewotICAgICAgICB3aWR0aCsrOwotICAgICAgICB4ID0geCA9PSBJTlRfTUlOID8gSU5UX01BWCA6IC14OwotICAgIH0KLSAgICAvLyBhc3NlcnQgKHggPj0gMCkKLSAgICBkbyB7Ci0gICAgICAgICsrd2lkdGg7Ci0gICAgICAgIHggLz0gMTA7Ci0gICAgfSB3aGlsZSAoeCA+IDApOwotICAgIHJldHVybiB3aWR0aDsKLX0KLQotLy8gY29tcHV0ZXMgdGhlIGNvbHVtbiB3aWR0aCByZXF1aXJlZCBmb3IgYSBzcGVjaWZpYyBoaXN0b2dyYW0gdmFsdWUKLWlubGluZSBpbnQgbnVtYmVyV2lkdGgoZG91YmxlIG51bWJlciwgaW50IGxlZnRQYWRkaW5nKSB7Ci0gICAgLy8gQWRkZWQgdmFsdWVzIGFjY291bnQgZm9yIHdoaXRlc3BhY2VzIG5lZWRlZCBhcm91bmQgbnVtYmVycywgYW5kIGZvciB0aGUKLSAgICAvLyBkb3QgYW5kIGRlY2ltYWwgZGlnaXQgbm90IGFjY291bnRlZCBmb3IgYnkgd2lkdGhPZgotICAgIHJldHVybiBzdGQ6Om1heChzdGQ6Om1heCh3aWR0aE9mKHN0YXRpY19jYXN0PGludD4obnVtYmVyKSkgKyAzLCAyKSwgbGVmdFBhZGRpbmcgKyAxKTsKLX0KLQogLy8gcm91bmRzIHZhbHVlIHRvIHByZWNpc2lvbiBiYXNlZCBvbiBsb2ctZGlzdGFuY2UgZnJvbSBtZWFuCiBfX2F0dHJpYnV0ZV9fKChub19zYW5pdGl6ZSgic2lnbmVkLWludGVnZXItb3ZlcmZsb3ciKSkpCiBpbmxpbmUgZG91YmxlIGxvZ1JvdW5kKGRvdWJsZSB4LCBkb3VibGUgbWVhbikgewpAQCAtMjU0LDcgKzM0Miw3IEBACiAvLyBvZiBQZXJmb3JtYW5jZUFuYWx5c2lzCiB2b2lkIFBlcmZvcm1hbmNlQW5hbHlzaXM6OnJlcG9ydFBlcmZvcm1hbmNlKFN0cmluZzggKmJvZHksIGludCBhdXRob3IsIGxvZ19oYXNoX3QgaGFzaCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IG1heEhlaWdodCkgewotICAgIGlmIChtSGlzdHMuZW1wdHkoKSkgeworICAgIGlmIChtSGlzdHMuZW1wdHkoKSB8fCBib2R5ID09IG51bGxwdHIpIHsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIApAQCAtMjczLDY5ICszNjEsMTYgQEAKICAgICAgICAgfQogICAgIH0KIAotICAgIC8vIHVuZGVyc2NvcmVzIGFuZCBzcGFjZXMgbGVuZ3RoIGNvcnJlc3BvbmRzIHRvIG1heGltdW0gd2lkdGggb2YgaGlzdG9ncmFtCi0gICAgc3RhdGljIGNvbnN0IGludCBrTGVuID0gMjAwOwotICAgIHN0ZDo6c3RyaW5nIHVuZGVyc2NvcmVzKGtMZW4sICdfJyk7Ci0gICAgc3RkOjpzdHJpbmcgc3BhY2VzKGtMZW4sICcgJyk7Ci0KLSAgICBhdXRvIGl0ID0gYnVja2V0cy5iZWdpbigpOwotICAgIGRvdWJsZSBtYXhEZWx0YSA9IGl0LT5maXJzdDsKLSAgICBpbnQgbWF4Q291bnQgPSBpdC0+c2Vjb25kOwotICAgIC8vIENvbXB1dGUgbWF4aW11bSB2YWx1ZXMKLSAgICB3aGlsZSAoKytpdCAhPSBidWNrZXRzLmVuZCgpKSB7Ci0gICAgICAgIGlmIChpdC0+Zmlyc3QgPiBtYXhEZWx0YSkgewotICAgICAgICAgICAgbWF4RGVsdGEgPSBpdC0+Zmlyc3Q7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKGl0LT5zZWNvbmQgPiBtYXhDb3VudCkgewotICAgICAgICAgICAgbWF4Q291bnQgPSBpdC0+c2Vjb25kOwotICAgICAgICB9Ci0gICAgfQotICAgIGludCBoZWlnaHQgPSBsb2cyKG1heENvdW50KSArIDE7IC8vIG1heENvdW50ID4gMCwgc2FmZSB0byBjYWxsIGxvZzIKLSAgICBjb25zdCBpbnQgbGVmdFBhZGRpbmcgPSB3aWR0aE9mKDEgPDwgaGVpZ2h0KTsKLSAgICBjb25zdCBpbnQgYnVja2V0V2lkdGggPSBudW1iZXJXaWR0aChtYXhEZWx0YSwgbGVmdFBhZGRpbmcpOwotICAgIGludCBzY2FsaW5nRmFjdG9yID0gMTsKLSAgICAvLyBzY2FsZSBkYXRhIGlmIGl0IGV4Y2VlZHMgbWF4aW11bSBoZWlnaHQKLSAgICBpZiAoaGVpZ2h0ID4gbWF4SGVpZ2h0KSB7Ci0gICAgICAgIHNjYWxpbmdGYWN0b3IgPSAoaGVpZ2h0ICsgbWF4SGVpZ2h0KSAvIG1heEhlaWdodDsKLSAgICAgICAgaGVpZ2h0IC89IHNjYWxpbmdGYWN0b3I7Ci0gICAgfQotICAgIGJvZHktPmFwcGVuZEZvcm1hdCgiXG4lKnMgJTMuMmYgJXMiLCBsZWZ0UGFkZGluZyArIDExLAotICAgICAgICAgICAgIk9jY3VycmVuY2VzIGluIiwgKGVsYXBzZWRNcyAvIGtNc1BlclNlYyksICJzZWNvbmRzIG9mIGF1ZGlvOiIpOwotICAgIGJvZHktPmFwcGVuZEZvcm1hdCgiXG4lKnMlZCwgJWxsZCwgJWxsZFxuIiwgbGVmdFBhZGRpbmcgKyAxMSwKKyAgICBzdGF0aWMgY29uc3QgaW50IFNJWkUgPSAxMjg7CisgICAgY2hhciB0aXRsZVtTSVpFXTsKKyAgICBzbnByaW50Zih0aXRsZSwgc2l6ZW9mKHRpdGxlKSwgIlxuJXMgJTMuMmYgJXNcbiVzJWQsICVsbGQsICVsbGRcbiIsCisgICAgICAgICAgICAiT2NjdXJyZW5jZXMgaW4iLCAoZWxhcHNlZE1zIC8ga01zUGVyU2VjKSwgInNlY29uZHMgb2YgYXVkaW86IiwKICAgICAgICAgICAgICJUaHJlYWQsIGhhc2gsIHN0YXJ0aW5nIHRpbWVzdGFtcDogIiwgYXV0aG9yLAotICAgICAgICAgICAgc3RhdGljX2Nhc3Q8bG9uZyBsb25nIGludD4oaGFzaCksIHN0YXRpY19jYXN0PGxvbmcgbG9uZyBpbnQ+KHN0YXJ0aW5nVHMpKTsKLSAgICAvLyB3cml0ZSBoaXN0b2dyYW0gbGFiZWwgbGluZSB3aXRoIGJ1Y2tldCB2YWx1ZXMKLSAgICBib2R5LT5hcHBlbmRGb3JtYXQoIlxuJXMiLCAiICIpOwotICAgIGJvZHktPmFwcGVuZEZvcm1hdCgiJSpzIiwgbGVmdFBhZGRpbmcsICIgIik7Ci0gICAgZm9yIChhdXRvIGNvbnN0ICZ4IDogYnVja2V0cykgewotICAgICAgICBjb25zdCBpbnQgY29sV2lkdGggPSBudW1iZXJXaWR0aCh4LmZpcnN0LCBsZWZ0UGFkZGluZyk7Ci0gICAgICAgIGJvZHktPmFwcGVuZEZvcm1hdCgiJSpkIiwgY29sV2lkdGgsIHguc2Vjb25kKTsKLSAgICB9Ci0gICAgLy8gd3JpdGUgaGlzdG9ncmFtIGFzY2lpIGFydAotICAgIGJvZHktPmFwcGVuZEZvcm1hdCgiXG4lcyIsICIgIik7Ci0gICAgZm9yIChpbnQgcm93ID0gaGVpZ2h0ICogc2NhbGluZ0ZhY3Rvcjsgcm93ID49IDA7IHJvdyAtPSBzY2FsaW5nRmFjdG9yKSB7Ci0gICAgICAgIGNvbnN0IGludCB2YWx1ZSA9IDEgPDwgcm93OwotICAgICAgICBib2R5LT5hcHBlbmRGb3JtYXQoIiUuKnMiLCBsZWZ0UGFkZGluZywgc3BhY2VzLmNfc3RyKCkpOwotICAgICAgICBmb3IgKGF1dG8gY29uc3QgJnggOiBidWNrZXRzKSB7Ci0gICAgICAgICAgICBjb25zdCBpbnQgY29sV2lkdGggPSBudW1iZXJXaWR0aCh4LmZpcnN0LCBsZWZ0UGFkZGluZyk7Ci0gICAgICAgICAgICBib2R5LT5hcHBlbmRGb3JtYXQoIiUuKnMlcyIsIGNvbFdpZHRoIC0gMSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcGFjZXMuY19zdHIoKSwgeC5zZWNvbmQgPCB2YWx1ZSA/ICIgIiA6ICJ8Iik7Ci0gICAgICAgIH0KLSAgICAgICAgYm9keS0+YXBwZW5kRm9ybWF0KCJcbiVzIiwgIiAiKTsKLSAgICB9Ci0gICAgLy8gcHJpbnQgeC1heGlzCi0gICAgY29uc3QgaW50IGNvbHVtbnMgPSBzdGF0aWNfY2FzdDxpbnQ+KGJ1Y2tldHMuc2l6ZSgpKTsKLSAgICBib2R5LT5hcHBlbmRGb3JtYXQoIiUqYyIsIGxlZnRQYWRkaW5nLCAnICcpOwotICAgIGJvZHktPmFwcGVuZEZvcm1hdCgiJS4qcyIsIChjb2x1bW5zICsgMSkgKiBidWNrZXRXaWR0aCwgdW5kZXJzY29yZXMuY19zdHIoKSk7Ci0gICAgYm9keS0+YXBwZW5kRm9ybWF0KCJcbiVzIiwgIiAiKTsKKyAgICAgICAgICAgIHN0YXRpY19jYXN0PGxvbmcgbG9uZz4oaGFzaCksIHN0YXRpY19jYXN0PGxvbmcgbG9uZz4oc3RhcnRpbmdUcykpOworICAgIHN0YXRpYyBjb25zdCBjaGFyICogY29uc3Qga0xhYmVsID0gIm1zIjsKIAotICAgIC8vIHdyaXRlIGZvb3RlciB3aXRoIGJ1Y2tldCBsYWJlbHMKLSAgICBib2R5LT5hcHBlbmRGb3JtYXQoIiUqcyIsIGxlZnRQYWRkaW5nLCAiICIpOwotICAgIGZvciAoYXV0byBjb25zdCAmeCA6IGJ1Y2tldHMpIHsKLSAgICAgICAgY29uc3QgaW50IGNvbFdpZHRoID0gbnVtYmVyV2lkdGgoeC5maXJzdCwgbGVmdFBhZGRpbmcpOwotICAgICAgICBib2R5LT5hcHBlbmRGb3JtYXQoIiUqLipmIiwgY29sV2lkdGgsIDEsIHguZmlyc3QpOwotICAgIH0KLSAgICBib2R5LT5hcHBlbmRGb3JtYXQoIiUuKnMlcyIsIGJ1Y2tldFdpZHRoLCBzcGFjZXMuY19zdHIoKSwgIm1zXG4iKTsKKyAgICBib2R5LT5hcHBlbmRGb3JtYXQoIiVzIiwKKyAgICAgICAgICAgIGF1ZGlvX3V0aWxzX3Bsb3RfaGlzdG9ncmFtKGJ1Y2tldHMsIHRpdGxlLCBrTGFiZWwsIG1heEhlaWdodCkuY19zdHIoKSk7CiAKICAgICAvLyBOb3cgcmVwb3J0IGdsaXRjaGVzCiAgICAgYm9keS0+YXBwZW5kRm9ybWF0KCJcbnRpbWUgZWxhcHNlZCBiZXR3ZWVuIGdsaXRjaGVzIGFuZCBnbGl0Y2ggdGltZXN0YW1wczpcbiIpOwpAQCAtMzUwLDcgKzM4NSw5IEBACiAvLyB3cml0ZXMgc3VtbWFyeSBvZiBwZXJmb3JtYW5jZSBpbnRvIHNwZWNpZmllZCBmaWxlIGRlc2NyaXB0b3IKIHZvaWQgZHVtcChpbnQgZmQsIGludCBpbmRlbnQsIFBlcmZvcm1hbmNlQW5hbHlzaXNNYXAgJnRocmVhZFBlcmZvcm1hbmNlQW5hbHlzaXMpIHsKICAgICBTdHJpbmc4IGJvZHk7CisjaWZkZWYgV1JJVEVfVE9fRklMRQogICAgIGNvbnN0IGNoYXIqIGNvbnN0IGtEaXJlY3RvcnkgPSAiL2RhdGEvbWlzYy9hdWRpb3NlcnZlci8iOworI2VuZGlmCiAgICAgZm9yIChhdXRvICYgdGhyZWFkIDogdGhyZWFkUGVyZm9ybWFuY2VBbmFseXNpcykgewogICAgICAgICBmb3IgKGF1dG8gJiBoYXNoOiB0aHJlYWQuc2Vjb25kKSB7CiAgICAgICAgICAgICBQZXJmb3JtYW5jZUFuYWx5c2lzJiBjdXJyID0gaGFzaC5zZWNvbmQ7CkBAIC0zNjAsOSArMzk3LDExIEBACiAgICAgICAgICAgICAgICAgZHVtcExpbmUoZmQsIGluZGVudCwgYm9keSk7CiAgICAgICAgICAgICAgICAgYm9keS5jbGVhcigpOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgLy8gd3JpdGUgdG8gZmlsZQorI2lmZGVmIFdSSVRFX1RPX0ZJTEUKKyAgICAgICAgICAgIC8vIHdyaXRlIHRvIGZpbGUuIEVuYWJsZSBieSB1bmNvbW1lbnRpbmcgbWFjcm8gYXQgdG9wIG9mIGZpbGUuCiAgICAgICAgICAgICB3cml0ZVRvRmlsZShjdXJyLm1IaXN0cywgY3Vyci5tT3V0bGllckRhdGEsIGN1cnIubVBlYWtUaW1lc3RhbXBzLAogICAgICAgICAgICAgICAgICAgICAgICAga0RpcmVjdG9yeSwgZmFsc2UsIHRocmVhZC5maXJzdCwgaGFzaC5maXJzdCk7CisjZW5kaWYKICAgICAgICAgfQogICAgIH0KIH0KQEAgLTM3NCw1ICs0MTMsNCBAQAogfQogCiB9IC8vIG5hbWVzcGFjZSBSZXBvcnRQZXJmb3JtYW5jZQotCiB9ICAgLy8gbmFtZXNwYWNlIGFuZHJvaWQKZGlmZiAtLWdpdCBhL21lZGlhL2xpYm5ibG9nL1JlYWRlci5jcHAgYi9tZWRpYS9saWJuYmxvZy9SZWFkZXIuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZkNTMwOTAKLS0tIC9kZXYvbnVsbAorKysgYi9tZWRpYS9saWJuYmxvZy9SZWFkZXIuY3BwCkBAIC0wLDAgKzEsNDM2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE4IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KKworI2RlZmluZSBMT0dfVEFHICJOQkxvZyIKKy8vI2RlZmluZSBMT0dfTkRFQlVHIDAKKworI2luY2x1ZGUgPG1lbW9yeT4KKyNpbmNsdWRlIDxzdGRkZWYuaD4KKyNpbmNsdWRlIDxzdHJpbmc+CisjaW5jbHVkZSA8dW5vcmRlcmVkX3NldD4KKworI2luY2x1ZGUgPGF1ZGlvX3V0aWxzL2ZpZm8uaD4KKyNpbmNsdWRlIDxiaW5kZXIvSU1lbW9yeS5oPgorI2luY2x1ZGUgPG1lZGlhL25ibG9nL0VudHJ5Lmg+CisjaW5jbHVkZSA8bWVkaWEvbmJsb2cvRXZlbnRzLmg+CisjaW5jbHVkZSA8bWVkaWEvbmJsb2cvUmVhZGVyLmg+CisjaW5jbHVkZSA8bWVkaWEvbmJsb2cvVGltZWxpbmUuaD4KKyNpbmNsdWRlIDx1dGlscy9Mb2cuaD4KKyNpbmNsdWRlIDx1dGlscy9TdHJpbmc4Lmg+CisKK25hbWVzcGFjZSBhbmRyb2lkIHsKK25hbWVzcGFjZSBOQkxvZyB7CisKK1JlYWRlcjo6UmVhZGVyKGNvbnN0IHZvaWQgKnNoYXJlZCwgc2l6ZV90IHNpemUsIGNvbnN0IHN0ZDo6c3RyaW5nICZuYW1lKQorICAgIDogbU5hbWUobmFtZSksCisgICAgICBtU2hhcmVkKCgvKmNvbnN0Ki8gU2hhcmVkICopIHNoYXJlZCksIC8qbUlNZW1vcnkqLworICAgICAgbUZpZm8obVNoYXJlZCAhPSBOVUxMID8KKyAgICAgICAgbmV3IGF1ZGlvX3V0aWxzX2ZpZm8oc2l6ZSwgc2l6ZW9mKHVpbnQ4X3QpLAorICAgICAgICAgICAgbVNoYXJlZC0+bUJ1ZmZlciwgbVNoYXJlZC0+bVJlYXIsIE5VTEwgLyp0aHJvdHRsZXNGcm9udCovKSA6IE5VTEwpLAorICAgICAgbUZpZm9SZWFkZXIobUZpZm8gIT0gTlVMTCA/IG5ldyBhdWRpb191dGlsc19maWZvX3JlYWRlcigqbUZpZm8pIDogTlVMTCkKK3sKK30KKworUmVhZGVyOjpSZWFkZXIoY29uc3Qgc3A8SU1lbW9yeT4mIGlNZW1vcnksIHNpemVfdCBzaXplLCBjb25zdCBzdGQ6OnN0cmluZyAmbmFtZSkKKyAgICA6IFJlYWRlcihpTWVtb3J5ICE9IDAgPyAoU2hhcmVkICopIGlNZW1vcnktPnBvaW50ZXIoKSA6IE5VTEwsIHNpemUsIG5hbWUpCit7CisgICAgbUlNZW1vcnkgPSBpTWVtb3J5OworfQorCitSZWFkZXI6On5SZWFkZXIoKQoreworICAgIGRlbGV0ZSBtRmlmb1JlYWRlcjsKKyAgICBkZWxldGUgbUZpZm87Cit9CisKKy8vIENvcGllcyBjb250ZW50IG9mIGEgUmVhZGVyIEZJRk8gaW50byBpdHMgU25hcHNob3QKKy8vIFRoZSBTbmFwc2hvdCBoYXMgdGhlIHNhbWUgcmF3IGRhdGEsIGJ1dCByZXByZXNlbnRlZCBhcyBhIHNlcXVlbmNlIG9mIGVudHJpZXMKKy8vIGFuZCBhbiBFbnRyeUl0ZXJhdG9yIG1ha2luZyBpdCBwb3NzaWJsZSB0byBwcm9jZXNzIHRoZSBkYXRhLgorc3RkOjp1bmlxdWVfcHRyPFNuYXBzaG90PiBSZWFkZXI6OmdldFNuYXBzaG90KGJvb2wgZmx1c2gpCit7CisgICAgaWYgKG1GaWZvUmVhZGVyID09IE5VTEwpIHsKKyAgICAgICAgcmV0dXJuIHN0ZDo6dW5pcXVlX3B0cjxTbmFwc2hvdD4obmV3IFNuYXBzaG90KCkpOworICAgIH0KKworICAgIC8vIFRoaXMgZW11bGF0ZXMgdGhlIGJlaGF2aW91ciBvZiBhdWRpb191dGlsc19maWZvX3JlYWRlcjo6cmVhZCwgYnV0IHdpdGhvdXQgaW5jcmVtZW50aW5nIHRoZQorICAgIC8vIHJlYWRlciBpbmRleC4gVGhlIGluZGV4IGlzIGluY3JlbWVudGVkIGFmdGVyIGhhbmRsaW5nIGNvcnJ1cHRpb24sIHRvIGFmdGVyIHRoZSBsYXN0IGNvbXBsZXRlCisgICAgLy8gZW50cnkgb2YgdGhlIGJ1ZmZlcgorICAgIHNpemVfdCBsb3N0ID0gMDsKKyAgICBhdWRpb191dGlsc19pb3ZlYyBpb3ZlY1syXTsKKyAgICBjb25zdCBzaXplX3QgY2FwYWNpdHkgPSBtRmlmby0+Y2FwYWNpdHkoKTsKKyAgICBzc2l6ZV90IGF2YWlsVG9SZWFkOworICAgIC8vIEEgY2FsbCB0byBhdWRpb191dGlsc19maWZvX3JlYWRlcjo6b2J0YWluKCkgcGxhY2VzIHRoZSByZWFkIHBvaW50ZXIgb25lIGJ1ZmZlciBsZW5ndGgKKyAgICAvLyBiZWZvcmUgdGhlIHdyaXRlcidzIHBvaW50ZXIgKHNpbmNlIG1GaWZvUmVhZGVyIHdhcyBjb25zdHJ1Y3RlZCB3aXRoIGZsdXNoPWZhbHNlKS4gVGhlCisgICAgLy8gZG8gd2hpbGUgbG9vcCBpcyBhbiBhdHRlbXB0IHRvIHJlYWQgYWxsIG9mIHRoZSBGSUZPJ3MgY29udGVudHMgcmVnYXJkbGVzcyBvZiBob3cgYmVoaW5kCisgICAgLy8gdGhlIHJlYWRlciBpcyB3aXRoIHJlc3BlY3QgdG8gdGhlIHdyaXRlci4gSG93ZXZlciwgdGhlIGZvbGxvd2luZyBzY2hlZHVsaW5nIHNlcXVlbmNlIGlzCisgICAgLy8gcG9zc2libGUgYW5kIGNhbiBsZWFkIHRvIGEgc3RhcnZhdGlvbiBzaXR1YXRpb246CisgICAgLy8gLSBXcml0ZXIgVDEgd3JpdGVzLCBvdmVycnVuIHdpdGggcmVzcGVjdCB0byBSZWFkZXIgVDIKKyAgICAvLyAtIFQyIGNhbGxzIG9idGFpbigpIGFuZCBnZXRzIEVPVkVSRkxPVywgVDIgcHRyIHBsYWNlZCBvbmUgYnVmZmVyIHNpemUgYmVoaW5kIFQxIHB0cgorICAgIC8vIC0gVDEgd3JpdGUsIG92ZXJydW4KKyAgICAvLyAtIFQyIG9idGFpbigpLCBFT1ZFUkZMT1cgKGFuZCBzbyBvbi4uLikKKyAgICAvLyBUbyBhZGRyZXNzIHRoaXMgaXNzdWUsIHdlIGxpbWl0IHRoZSBudW1iZXIgb2YgdHJpZXMgZm9yIHRoZSByZWFkZXIgdG8gY2F0Y2ggdXAgd2l0aAorICAgIC8vIHRoZSB3cml0ZXIuCisgICAgaW50IHRyaWVzID0gMDsKKyAgICBzaXplX3QgbG9zdFRlbXA7CisgICAgZG8geworICAgICAgICBhdmFpbFRvUmVhZCA9IG1GaWZvUmVhZGVyLT5vYnRhaW4oaW92ZWMsIGNhcGFjaXR5LCBOVUxMIC8qdGltZW91dCovLCAmbG9zdFRlbXApOworICAgICAgICBsb3N0ICs9IGxvc3RUZW1wOworICAgIH0gd2hpbGUgKGF2YWlsVG9SZWFkIDwgMCB8fCArK3RyaWVzIDw9IGtNYXhPYnRhaW5Ucmllcyk7CisKKyAgICBpZiAoYXZhaWxUb1JlYWQgPD0gMCkgeworICAgICAgICBBTE9HV19JRihhdmFpbFRvUmVhZCA8IDAsICJOQkxvZyBSZWFkZXIgJXMgZmFpbGVkIHRvIGNhdGNoIHVwIHdpdGggV3JpdGVyIiwgbU5hbWUuY19zdHIoKSk7CisgICAgICAgIHJldHVybiBzdGQ6OnVuaXF1ZV9wdHI8U25hcHNob3Q+KG5ldyBTbmFwc2hvdCgpKTsKKyAgICB9CisKKyAgICAvLyBDaGFuZ2UgdG8gI2lmIDEgZm9yIGRlYnVnZ2luZy4gVGhpcyBzdGF0ZW1lbnQgaXMgdXNlZnVsIGZvciBjaGVja2luZyBidWZmZXIgZnVsbG5lc3MgbGV2ZWxzCisgICAgLy8gKGFzIHNlZW4gYnkgcmVhZGVyKSBhbmQgaG93IG11Y2ggZGF0YSB3YXMgbG9zdC4gSWYgeW91IGZpbmQgdGhhdCB0aGUgZnVsbG5lc3MgbGV2ZWwgaXMKKyAgICAvLyBnZXR0aW5nIGNsb3NlIHRvIGZ1bGwsIG9yIHRoYXQgZGF0YSBsb3NzIGlzIGhhcHBlbmluZyB0byBvZnRlbiwgdGhlbiB5b3Ugc2hvdWxkCisgICAgLy8gcHJvYmFibHkgdHJ5IHNvbWUgb2YgdGhlIGZvbGxvd2luZzoKKyAgICAvLyAtIGxvZyBsZXNzIGRhdGEKKyAgICAvLyAtIGxvZyBsZXNzIG9mdGVuCisgICAgLy8gLSBpbmNyZWFzZSB0aGUgaW5pdGlhbCBzaGFyZWQgbWVtb3J5IGFsbG9jYXRpb24gZm9yIHRoZSBidWZmZXIKKyNpZiAwCisgICAgQUxPR0QoImdldFNuYXBzaG90IG5hbWU9JXMsIGF2YWlsVG9SZWFkPSV6ZCwgY2FwYWNpdHk9JXp1LCBmdWxsbmVzcz0lLjNmLCBsb3N0PSV6dSIsCisgICAgICAgICAgICBuYW1lKCkuY19zdHIoKSwgYXZhaWxUb1JlYWQsIGNhcGFjaXR5LCAoZG91YmxlKWF2YWlsVG9SZWFkIC8gKGRvdWJsZSljYXBhY2l0eSwgbG9zdCk7CisjZW5kaWYKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8U25hcHNob3Q+IHNuYXBzaG90KG5ldyBTbmFwc2hvdChhdmFpbFRvUmVhZCkpOworICAgIG1lbWNweShzbmFwc2hvdC0+bURhdGEsIChjb25zdCBjaGFyICopIG1GaWZvLT5idWZmZXIoKSArIGlvdmVjWzBdLm1PZmZzZXQsIGlvdmVjWzBdLm1MZW5ndGgpOworICAgIGlmIChpb3ZlY1sxXS5tTGVuZ3RoID4gMCkgeworICAgICAgICBtZW1jcHkoc25hcHNob3QtPm1EYXRhICsgKGlvdmVjWzBdLm1MZW5ndGgpLAorICAgICAgICAgICAgICAgIChjb25zdCBjaGFyICopIG1GaWZvLT5idWZmZXIoKSArIGlvdmVjWzFdLm1PZmZzZXQsIGlvdmVjWzFdLm1MZW5ndGgpOworICAgIH0KKworICAgIC8vIEhhbmRsZSBjb3JydXB0ZWQgYnVmZmVyCisgICAgLy8gUG90ZW50aWFsbHksIGEgYnVmZmVyIGhhcyBjb3JydXB0ZWQgZGF0YSBvbiBib3RoIGJlZ2lubmluZyAoZHVlIHRvIG92ZXJmbG93KSBhbmQgZW5kCisgICAgLy8gKGR1ZSB0byBpbmNvbXBsZXRlIGZvcm1hdCBlbnRyeSkuIEJ1dCBldmVuIGlmIHRoZSBlbmQgZm9ybWF0IGVudHJ5IGlzIGluY29tcGxldGUsCisgICAgLy8gaXQgZW5kcyBpbiBhIGNvbXBsZXRlIGVudHJ5ICh3aGljaCBpcyBub3QgYW4gRk1UX0VORCkuIFNvIGlzIHNhZmUgdG8gdHJhdmVyc2UgYmFja3dhcmRzLgorICAgIC8vIFRPRE86IGhhbmRsZSBjbGllbnQgY29ycnVwdGlvbiAoaW4gdGhlIG1pZGRsZSBvZiBhIGJ1ZmZlcikKKworICAgIGNvbnN0IHVpbnQ4X3QgKmJhY2sgPSBzbmFwc2hvdC0+bURhdGEgKyBhdmFpbFRvUmVhZDsKKyAgICBjb25zdCB1aW50OF90ICpmcm9udCA9IHNuYXBzaG90LT5tRGF0YTsKKworICAgIC8vIEZpbmQgbGFzdCBGTVRfRU5ELiA8YmFjaz4gaXMgc2l0dGluZyBvbiBhbiBlbnRyeSB3aGljaCBtaWdodCBiZSB0aGUgbWlkZGxlIG9mIGEgRm9ybWF0RW50cnkuCisgICAgLy8gV2UgZ28gYmFja3dhcmRzIHVudGlsIHdlIGZpbmQgYW4gRVZFTlRfRk1UX0VORC4KKyAgICBjb25zdCB1aW50OF90ICpsYXN0RW5kID0gZmluZExhc3RWYWxpZEVudHJ5KGZyb250LCBiYWNrLCBpbnZhbGlkRW5kVHlwZXMpOworICAgIGlmIChsYXN0RW5kID09IG51bGxwdHIpIHsKKyAgICAgICAgc25hcHNob3QtPm1FbmQgPSBzbmFwc2hvdC0+bUJlZ2luID0gRW50cnlJdGVyYXRvcihmcm9udCk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgLy8gZW5kIG9mIHNuYXBzaG90IHBvaW50cyB0byBhZnRlciBsYXN0IEZNVF9FTkQgZW50cnkKKyAgICAgICAgc25hcHNob3QtPm1FbmQgPSBFbnRyeUl0ZXJhdG9yKGxhc3RFbmQpLm5leHQoKTsKKyAgICAgICAgLy8gZmluZCBmaXJzdCBGTVRfU1RBUlQKKyAgICAgICAgY29uc3QgdWludDhfdCAqZmlyc3RTdGFydCA9IG51bGxwdHI7CisgICAgICAgIGNvbnN0IHVpbnQ4X3QgKmZpcnN0U3RhcnRUbXAgPSBzbmFwc2hvdC0+bUVuZDsKKyAgICAgICAgd2hpbGUgKChmaXJzdFN0YXJ0VG1wID0gZmluZExhc3RWYWxpZEVudHJ5KGZyb250LCBmaXJzdFN0YXJ0VG1wLCBpbnZhbGlkQmVnaW5UeXBlcykpCisgICAgICAgICAgICAgICAgIT0gbnVsbHB0cikgeworICAgICAgICAgICAgZmlyc3RTdGFydCA9IGZpcnN0U3RhcnRUbXA7CisgICAgICAgIH0KKyAgICAgICAgLy8gZmlyc3RTdGFydCBpcyBudWxsIGlmIG5vIEZNVF9TVEFSVCBlbnRyeSB3YXMgZm91bmQgYmVmb3JlIGxhc3RFbmQKKyAgICAgICAgaWYgKGZpcnN0U3RhcnQgPT0gbnVsbHB0cikgeworICAgICAgICAgICAgc25hcHNob3QtPm1CZWdpbiA9IHNuYXBzaG90LT5tRW5kOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgc25hcHNob3QtPm1CZWdpbiA9IEVudHJ5SXRlcmF0b3IoZmlyc3RTdGFydCk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvLyBhZHZhbmNlIGZpZm8gcmVhZGVyIGluZGV4IHRvIGFmdGVyIGxhc3QgZW50cnkgcmVhZC4KKyAgICBpZiAoZmx1c2gpIHsKKyAgICAgICAgbUZpZm9SZWFkZXItPnJlbGVhc2Uoc25hcHNob3QtPm1FbmQgLSBmcm9udCk7CisgICAgfQorCisgICAgc25hcHNob3QtPm1Mb3N0ID0gbG9zdDsKKyAgICByZXR1cm4gc25hcHNob3Q7Cit9CisKK2Jvb2wgUmVhZGVyOjppc0lNZW1vcnkoY29uc3Qgc3A8SU1lbW9yeT4mIGlNZW1vcnkpIGNvbnN0Cit7CisgICAgcmV0dXJuIGlNZW1vcnkgIT0gMCAmJiBtSU1lbW9yeSAhPSAwICYmIGlNZW1vcnktPnBvaW50ZXIoKSA9PSBtSU1lbW9yeS0+cG9pbnRlcigpOworfQorCisvLyBXZSBtYWtlIGEgc2V0IG9mIHRoZSBpbnZhbGlkIHR5cGVzIHJhdGhlciB0aGFuIHRoZSB2YWxpZCB0eXBlcyB3aGVuIGFsaWduaW5nCisvLyBTbmFwc2hvdCBFbnRyeUl0ZXJhdG9ycyB0byB2YWxpZCBlbnRyaWVzIGR1cmluZyBsb2cgY29ycnVwdGlvbiBjaGVja2luZy4KKy8vIFRoaXMgaXMgZG9uZSBpbiBvcmRlciB0byBhdm9pZCB0aGUgbWFpbnRlbmFuY2Ugb3ZlcmhlYWQgb2YgYWRkaW5nIGEgbmV3IEV2ZW50CisvLyB0eXBlIHRvIHRoZSB0d28gc2V0cyBiZWxvdyB3aGVuZXZlciBhIG5ldyBFdmVudCB0eXBlIGlzIGNyZWF0ZWQsIGFzIGl0IGlzCisvLyB2ZXJ5IGxpa2VseSB0aGF0IG5ldyB0eXBlcyBhZGRlZCB3aWxsIGJlIHZhbGlkIHR5cGVzLgorLy8gQ3VycmVudGx5LCBpbnZhbGlkQmVnaW5UeXBlcyBhbmQgaW52YWxpZEVuZFR5cGVzIGFyZSB1c2VkIHRvIGhhbmRsZSB0aGUgc3BlY2lhbAorLy8gY2FzZSBvZiBhIEZvcm1hdCBFbnRyeSwgd2hpY2ggY29uc2lzdHMgb2YgYSB2YXJpYWJsZSBudW1iZXIgb2Ygc2ltcGxlIGxvZyBlbnRyaWVzLgorLy8gSWYgYSBuZXcgRXZlbnQgaXMgYWRkZWQgdGhhdCBjb25zaXN0cyBvZiBhIHZhcmlhYmxlIG51bWJlciBvZiBzaW1wbGUgbG9nIGVudHJpZXMsCisvLyB0aGVuIHRoZXNlIHNldHMgbmVlZCB0byBiZSB1cGRhdGVkLgorCisvLyBXZSB3YW50IHRoZSBiZWdpbm5pbmcgb2YgYSBTbmFwc2hvdCB0byBwb2ludCB0byBhbiBlbnRyeSB0aGF0IGlzIG5vdCBpbgorLy8gdGhlIG1pZGRsZSBvZiBhIGZvcm1hdHRlZCBlbnRyeSBhbmQgbm90IGFuIEZNVF9FTkQuCitjb25zdCBzdGQ6OnVub3JkZXJlZF9zZXQ8RXZlbnQ+IFJlYWRlcjo6aW52YWxpZEJlZ2luVHlwZXMgeworICAgIEVWRU5UX0ZNVF9BVVRIT1IsCisgICAgRVZFTlRfRk1UX0VORCwKKyAgICBFVkVOVF9GTVRfRkxPQVQsCisgICAgRVZFTlRfRk1UX0hBU0gsCisgICAgRVZFTlRfRk1UX0lOVEVHRVIsCisgICAgRVZFTlRfRk1UX1BJRCwKKyAgICBFVkVOVF9GTVRfU1RSSU5HLAorICAgIEVWRU5UX0ZNVF9USU1FU1RBTVAsCit9OworCisvLyBXZSB3YW50IHRoZSBlbmQgb2YgYSBTbmFwc2hvdCB0byBwb2ludCB0byBhbiBlbnRyeSB0aGF0IGlzIG5vdCBpbgorLy8gdGhlIG1pZGRsZSBvZiBhIGZvcm1hdHRlZCBlbnRyeSBhbmQgbm90IGEgRk1UX1NUQVJULgorY29uc3Qgc3RkOjp1bm9yZGVyZWRfc2V0PEV2ZW50PiBSZWFkZXI6OmludmFsaWRFbmRUeXBlcyB7CisgICAgRVZFTlRfRk1UX0FVVEhPUiwKKyAgICBFVkVOVF9GTVRfRkxPQVQsCisgICAgRVZFTlRfRk1UX0hBU0gsCisgICAgRVZFTlRfRk1UX0lOVEVHRVIsCisgICAgRVZFTlRfRk1UX1BJRCwKKyAgICBFVkVOVF9GTVRfU1RBUlQsCisgICAgRVZFTlRfRk1UX1NUUklORywKKyAgICBFVkVOVF9GTVRfVElNRVNUQU1QLAorfTsKKworY29uc3QgdWludDhfdCAqUmVhZGVyOjpmaW5kTGFzdFZhbGlkRW50cnkoY29uc3QgdWludDhfdCAqZnJvbnQsIGNvbnN0IHVpbnQ4X3QgKmJhY2ssCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdGQ6OnVub3JkZXJlZF9zZXQ8RXZlbnQ+ICZpbnZhbGlkVHlwZXMpIHsKKyAgICBpZiAoZnJvbnQgPT0gbnVsbHB0ciB8fCBiYWNrID09IG51bGxwdHIpIHsKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgfQorICAgIHdoaWxlIChiYWNrICsgRW50cnk6OmtQcmV2aW91c0xlbmd0aE9mZnNldCA+PSBmcm9udCkgeworICAgICAgICBjb25zdCB1aW50OF90ICpwcmV2ID0gYmFjayAtIGJhY2tbRW50cnk6OmtQcmV2aW91c0xlbmd0aE9mZnNldF0gLSBFbnRyeTo6a092ZXJoZWFkOworICAgICAgICBjb25zdCBFdmVudCB0eXBlID0gKGNvbnN0IEV2ZW50KXByZXZbb2Zmc2V0b2YoZW50cnksIHR5cGUpXTsKKyAgICAgICAgaWYgKHByZXYgPCBmcm9udAorICAgICAgICAgICAgICAgIHx8IHByZXYgKyBwcmV2W29mZnNldG9mKGVudHJ5LCBsZW5ndGgpXSArIEVudHJ5OjprT3ZlcmhlYWQgIT0gYmFjaworICAgICAgICAgICAgICAgIHx8IHR5cGUgPD0gRVZFTlRfUkVTRVJWRUQgfHwgdHlwZSA+PSBFVkVOVF9VUFBFUl9CT1VORCkgeworICAgICAgICAgICAgLy8gcHJldiBwb2ludHMgdG8gYW4gb3V0IG9mIGxpbWl0cyBvciBpbmNvbnNpc3RlbnQgZW50cnkKKyAgICAgICAgICAgIHJldHVybiBudWxscHRyOworICAgICAgICB9CisgICAgICAgIC8vIGlmIGludmFsaWRUeXBlcyBkb2VzIG5vdCBjb250YWluIHRoZSB0eXBlLCB0aGVuIHRoZSB0eXBlIGlzIHZhbGlkLgorICAgICAgICBpZiAoaW52YWxpZFR5cGVzLmZpbmQodHlwZSkgPT0gaW52YWxpZFR5cGVzLmVuZCgpKSB7CisgICAgICAgICAgICByZXR1cm4gcHJldjsKKyAgICAgICAgfQorICAgICAgICBiYWNrID0gcHJldjsKKyAgICB9CisgICAgcmV0dXJuIG51bGxwdHI7IC8vIG5vIGVudHJ5IGZvdW5kCit9CisKKy8vIFRPRE8gZm9yIGZ1dHVyZSBjb21wYXRpYmlsaXR5LCB3b3VsZCBwcmVmZXIgdG8gaGF2ZSBhIGR1bXAoKSBnbyB0byBzdHJpbmcsIGFuZCB0aGVuIGdvCisvLyB0byBmZCBvbmx5IHdoZW4gaW52b2tlZCB0aHJvdWdoIGJpbmRlci4KK3ZvaWQgRHVtcFJlYWRlcjo6ZHVtcChpbnQgZmQsIHNpemVfdCBpbmRlbnQpCit7CisgICAgaWYgKGZkIDwgMCkgcmV0dXJuOworICAgIHN0ZDo6dW5pcXVlX3B0cjxTbmFwc2hvdD4gc25hcHNob3QgPSBnZXRTbmFwc2hvdChmYWxzZSAvKmZsdXNoKi8pOworICAgIGlmIChzbmFwc2hvdCA9PSBudWxscHRyKSB7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgU3RyaW5nOCB0aW1lc3RhbXAsIGJvZHk7CisKKyAgICAvLyBUT0RPIGFsbCBsb2dnZWQgdHlwZXMgc2hvdWxkIGhhdmUgYSBwcmludGFibGUgZm9ybWF0LgorICAgIC8vIFRPRE8gY2FuIHdlIG1ha2UgdGhlIHByaW50aW5nIGdlbmVyaWM/CisgICAgZm9yIChFbnRyeUl0ZXJhdG9yIGl0ID0gc25hcHNob3QtPmJlZ2luKCk7IGl0ICE9IHNuYXBzaG90LT5lbmQoKTsgKytpdCkgeworICAgICAgICBzd2l0Y2ggKGl0LT50eXBlKSB7CisgICAgICAgIGNhc2UgRVZFTlRfRk1UX1NUQVJUOgorICAgICAgICAgICAgaXQgPSBoYW5kbGVGb3JtYXQoRm9ybWF0RW50cnkoaXQpLCAmdGltZXN0YW1wLCAmYm9keSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBFVkVOVF9MQVRFTkNZOiB7CisgICAgICAgICAgICBjb25zdCBkb3VibGUgbGF0ZW5jeU1zID0gaXQucGF5bG9hZDxkb3VibGU+KCk7CisgICAgICAgICAgICBib2R5LmFwcGVuZEZvcm1hdCgiRVZFTlRfTEFURU5DWSwlLjNmIiwgbGF0ZW5jeU1zKTsKKyAgICAgICAgfSBicmVhazsKKyAgICAgICAgY2FzZSBFVkVOVF9PVkVSUlVOOiB7CisgICAgICAgICAgICBjb25zdCBpbnQ2NF90IHRzID0gaXQucGF5bG9hZDxpbnQ2NF90PigpOworICAgICAgICAgICAgYm9keS5hcHBlbmRGb3JtYXQoIkVWRU5UX09WRVJSVU4sJWxsZCIsIHN0YXRpY19jYXN0PGxvbmcgbG9uZz4odHMpKTsKKyAgICAgICAgfSBicmVhazsKKyAgICAgICAgY2FzZSBFVkVOVF9USFJFQURfSU5GTzogeworICAgICAgICAgICAgY29uc3QgdGhyZWFkX2luZm9fdCBpbmZvID0gaXQucGF5bG9hZDx0aHJlYWRfaW5mb190PigpOworICAgICAgICAgICAgYm9keS5hcHBlbmRGb3JtYXQoIkVWRU5UX1RIUkVBRF9JTkZPLCVkLCVzIiwgc3RhdGljX2Nhc3Q8aW50PihpbmZvLmlkKSwKKyAgICAgICAgICAgICAgICAgICAgdGhyZWFkVHlwZVRvU3RyaW5nKGluZm8udHlwZSkpOworICAgICAgICB9IGJyZWFrOworICAgICAgICBjYXNlIEVWRU5UX1VOREVSUlVOOiB7CisgICAgICAgICAgICBjb25zdCBpbnQ2NF90IHRzID0gaXQucGF5bG9hZDxpbnQ2NF90PigpOworICAgICAgICAgICAgYm9keS5hcHBlbmRGb3JtYXQoIkVWRU5UX1VOREVSUlVOLCVsbGQiLCBzdGF0aWNfY2FzdDxsb25nIGxvbmc+KHRzKSk7CisgICAgICAgIH0gYnJlYWs7CisgICAgICAgIGNhc2UgRVZFTlRfV0FSTVVQX1RJTUU6IHsKKyAgICAgICAgICAgIGNvbnN0IGRvdWJsZSB0aW1lTXMgPSBpdC5wYXlsb2FkPGRvdWJsZT4oKTsKKyAgICAgICAgICAgIGJvZHkuYXBwZW5kRm9ybWF0KCJFVkVOVF9XQVJNVVBfVElNRSwlLjNmIiwgdGltZU1zKTsKKyAgICAgICAgfSBicmVhazsKKyAgICAgICAgY2FzZSBFVkVOVF9XT1JLX1RJTUU6IHsKKyAgICAgICAgICAgIGNvbnN0IGludDY0X3QgbW9ub3RvbmljTnMgPSBpdC5wYXlsb2FkPGludDY0X3Q+KCk7CisgICAgICAgICAgICBib2R5LmFwcGVuZEZvcm1hdCgiRVZFTlRfV09SS19USU1FLCVsbGQiLCBzdGF0aWNfY2FzdDxsb25nIGxvbmc+KG1vbm90b25pY05zKSk7CisgICAgICAgIH0gYnJlYWs7CisgICAgICAgIGNhc2UgRVZFTlRfVEhSRUFEX1BBUkFNUzogeworICAgICAgICAgICAgY29uc3QgdGhyZWFkX3BhcmFtc190IHBhcmFtcyA9IGl0LnBheWxvYWQ8dGhyZWFkX3BhcmFtc190PigpOworICAgICAgICAgICAgYm9keS5hcHBlbmRGb3JtYXQoIkVWRU5UX1RIUkVBRF9QQVJBTVMsJXp1LCV1IiwgcGFyYW1zLmZyYW1lQ291bnQsIHBhcmFtcy5zYW1wbGVSYXRlKTsKKyAgICAgICAgfSBicmVhazsKKyAgICAgICAgY2FzZSBFVkVOVF9GTVRfRU5EOgorICAgICAgICBjYXNlIEVWRU5UX1JFU0VSVkVEOgorICAgICAgICBjYXNlIEVWRU5UX1VQUEVSX0JPVU5EOgorICAgICAgICAgICAgYm9keS5hcHBlbmRGb3JtYXQoIndhcm5pbmc6IHVuZXhwZWN0ZWQgZXZlbnQgJWQiLCBpdC0+dHlwZSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGlmICghYm9keS5pc0VtcHR5KCkpIHsKKyAgICAgICAgICAgIGRwcmludGYoZmQsICIlLipzJXMgJXNcbiIsIChpbnQpaW5kZW50LCAiIiwgdGltZXN0YW1wLnN0cmluZygpLCBib2R5LnN0cmluZygpKTsKKyAgICAgICAgICAgIGJvZHkuY2xlYXIoKTsKKyAgICAgICAgfQorICAgICAgICB0aW1lc3RhbXAuY2xlYXIoKTsKKyAgICB9Cit9CisKK0VudHJ5SXRlcmF0b3IgRHVtcFJlYWRlcjo6aGFuZGxlRm9ybWF0KGNvbnN0IEZvcm1hdEVudHJ5ICZmbXRFbnRyeSwKKyAgICAgICAgU3RyaW5nOCAqdGltZXN0YW1wLCBTdHJpbmc4ICpib2R5KQoreworICAgIC8vIGxvZyB0aW1lc3RhbXAKKyAgICBjb25zdCBpbnQ2NF90IHRzID0gZm10RW50cnkudGltZXN0YW1wKCk7CisgICAgdGltZXN0YW1wLT5jbGVhcigpOworICAgIHRpbWVzdGFtcC0+YXBwZW5kRm9ybWF0KCJbJWQuJTAzZF0iLCAoaW50KSAodHMgLyAoMTAwMCAqIDEwMDAgKiAxMDAwKSksCisgICAgICAgICAgICAgICAgICAgIChpbnQpICgodHMgLyAoMTAwMCAqIDEwMDApKSAlIDEwMDApKTsKKworICAgIC8vIGxvZyB1bmlxdWUgaGFzaAorICAgIGxvZ19oYXNoX3QgaGFzaCA9IGZtdEVudHJ5Lmhhc2goKTsKKyAgICAvLyBwcmludCBvbmx5IGxvd2VyIDE2Yml0IG9mIGhhc2ggYXMgaGV4IGFuZCBsaW5lIGFzIGludCB0byByZWR1Y2Ugc3BhbSBpbiB0aGUgbG9nCisgICAgYm9keS0+YXBwZW5kRm9ybWF0KCIlLjRYLSVkICIsIChpbnQpKGhhc2ggPj4gMTYpICYgMHhGRkZGLCAoaW50KSBoYXNoICYgMHhGRkZGKTsKKworICAgIC8vIGxvZyBhdXRob3IgKGlmIHByZXNlbnQpCisgICAgaGFuZGxlQXV0aG9yKGZtdEVudHJ5LCBib2R5KTsKKworICAgIC8vIGxvZyBzdHJpbmcKKyAgICBFbnRyeUl0ZXJhdG9yIGFyZyA9IGZtdEVudHJ5LmFyZ3MoKTsKKworICAgIGNvbnN0IGNoYXIqIGZtdCA9IGZtdEVudHJ5LmZvcm1hdFN0cmluZygpOworICAgIHNpemVfdCBmbXRfbGVuZ3RoID0gZm10RW50cnkuZm9ybWF0U3RyaW5nTGVuZ3RoKCk7CisKKyAgICBmb3IgKHNpemVfdCBmbXRfb2Zmc2V0ID0gMDsgZm10X29mZnNldCA8IGZtdF9sZW5ndGg7ICsrZm10X29mZnNldCkgeworICAgICAgICBpZiAoZm10W2ZtdF9vZmZzZXRdICE9ICclJykgeworICAgICAgICAgICAgYm9keS0+YXBwZW5kKCZmbXRbZm10X29mZnNldF0sIDEpOyAvLyBUT0RPIG9wdGltaXplIHRvIHdyaXRlIGNvbnNlY3V0aXZlIHN0cmluZ3MgYXQgb25jZQorICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIH0KKyAgICAgICAgLy8gY2FzZSAiJSUiIgorICAgICAgICBpZiAoZm10WysrZm10X29mZnNldF0gPT0gJyUnKSB7CisgICAgICAgICAgICBib2R5LT5hcHBlbmQoIiUiKTsKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB9CisgICAgICAgIC8vIGNhc2UgIiVcMCIKKyAgICAgICAgaWYgKGZtdF9vZmZzZXQgPT0gZm10X2xlbmd0aCkgeworICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIH0KKworICAgICAgICBFdmVudCBldmVudCA9IChFdmVudCkgYXJnLT50eXBlOworICAgICAgICBzaXplX3QgbGVuZ3RoID0gYXJnLT5sZW5ndGg7CisKKyAgICAgICAgLy8gVE9ETyBjaGVjayBsZW5ndGggZm9yIGV2ZW50IHR5cGUgaXMgY29ycmVjdAorCisgICAgICAgIGlmIChldmVudCA9PSBFVkVOVF9GTVRfRU5EKSB7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgIC8vIFRPRE86IGltcGxlbWVudCBtb3JlIGNvbXBsZXggZm9ybWF0dGluZyBzdWNoIGFzICUuM2YKKyAgICAgICAgY29uc3QgdWludDhfdCAqZGF0dW0gPSBhcmctPmRhdGE7IC8vIHBvaW50ZXIgdG8gdGhlIGN1cnJlbnQgZXZlbnQgYXJncworICAgICAgICBzd2l0Y2goZm10W2ZtdF9vZmZzZXRdKQorICAgICAgICB7CisgICAgICAgIGNhc2UgJ3MnOiAvLyBzdHJpbmcKKyAgICAgICAgICAgIEFMT0dXX0lGKGV2ZW50ICE9IEVWRU5UX0ZNVF9TVFJJTkcsCisgICAgICAgICAgICAgICAgIk5CTG9nIFJlYWRlciBpbmNvbXBhdGlibGUgZXZlbnQgZm9yIHN0cmluZyBzcGVjaWZpZXI6ICVkIiwgZXZlbnQpOworICAgICAgICAgICAgYm9keS0+YXBwZW5kKChjb25zdCBjaGFyKikgZGF0dW0sIGxlbmd0aCk7CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlICd0JzogLy8gdGltZXN0YW1wCisgICAgICAgICAgICBBTE9HV19JRihldmVudCAhPSBFVkVOVF9GTVRfVElNRVNUQU1QLAorICAgICAgICAgICAgICAgICJOQkxvZyBSZWFkZXIgaW5jb21wYXRpYmxlIGV2ZW50IGZvciB0aW1lc3RhbXAgc3BlY2lmaWVyOiAlZCIsIGV2ZW50KTsKKyAgICAgICAgICAgIGFwcGVuZFRpbWVzdGFtcChib2R5LCBkYXR1bSk7CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlICdkJzogLy8gaW50ZWdlcgorICAgICAgICAgICAgQUxPR1dfSUYoZXZlbnQgIT0gRVZFTlRfRk1UX0lOVEVHRVIsCisgICAgICAgICAgICAgICAgIk5CTG9nIFJlYWRlciBpbmNvbXBhdGlibGUgZXZlbnQgZm9yIGludGVnZXIgc3BlY2lmaWVyOiAlZCIsIGV2ZW50KTsKKyAgICAgICAgICAgIGFwcGVuZEludChib2R5LCBkYXR1bSk7CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlICdmJzogLy8gZmxvYXQKKyAgICAgICAgICAgIEFMT0dXX0lGKGV2ZW50ICE9IEVWRU5UX0ZNVF9GTE9BVCwKKyAgICAgICAgICAgICAgICAiTkJMb2cgUmVhZGVyIGluY29tcGF0aWJsZSBldmVudCBmb3IgZmxvYXQgc3BlY2lmaWVyOiAlZCIsIGV2ZW50KTsKKyAgICAgICAgICAgIGFwcGVuZEZsb2F0KGJvZHksIGRhdHVtKTsKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2UgJ3AnOiAvLyBwaWQKKyAgICAgICAgICAgIEFMT0dXX0lGKGV2ZW50ICE9IEVWRU5UX0ZNVF9QSUQsCisgICAgICAgICAgICAgICAgIk5CTG9nIFJlYWRlciBpbmNvbXBhdGlibGUgZXZlbnQgZm9yIHBpZCBzcGVjaWZpZXI6ICVkIiwgZXZlbnQpOworICAgICAgICAgICAgYXBwZW5kUElEKGJvZHksIGRhdHVtLCBsZW5ndGgpOworICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIEFMT0dXKCJOQkxvZyBSZWFkZXIgZW5jb3VudGVyZWQgdW5rbm93biBjaGFyYWN0ZXIgJWMiLCBmbXRbZm10X29mZnNldF0pOworICAgICAgICB9CisgICAgICAgICsrYXJnOworICAgIH0KKyAgICBBTE9HV19JRihhcmctPnR5cGUgIT0gRVZFTlRfRk1UX0VORCwgIkV4cGVjdGVkIGVuZCBvZiBmb3JtYXQsIGdvdCAlZCIsIGFyZy0+dHlwZSk7CisgICAgcmV0dXJuIGFyZzsKK30KKwordm9pZCBEdW1wUmVhZGVyOjphcHBlbmRJbnQoU3RyaW5nOCAqYm9keSwgY29uc3Qgdm9pZCAqZGF0YSkKK3sKKyAgICBpZiAoYm9keSA9PSBudWxscHRyIHx8IGRhdGEgPT0gbnVsbHB0cikgeworICAgICAgICByZXR1cm47CisgICAgfQorICAgIC8vaW50IHggPSAqKChpbnQqKSBkYXRhKTsKKyAgICBpbnQgeDsKKyAgICBtZW1jcHkoJngsIGRhdGEsIHNpemVvZih4KSk7CisgICAgYm9keS0+YXBwZW5kRm9ybWF0KCI8JWQ+IiwgeCk7Cit9CisKK3ZvaWQgRHVtcFJlYWRlcjo6YXBwZW5kRmxvYXQoU3RyaW5nOCAqYm9keSwgY29uc3Qgdm9pZCAqZGF0YSkKK3sKKyAgICBpZiAoYm9keSA9PSBudWxscHRyIHx8IGRhdGEgPT0gbnVsbHB0cikgeworICAgICAgICByZXR1cm47CisgICAgfQorICAgIGZsb2F0IGY7CisgICAgbWVtY3B5KCZmLCBkYXRhLCBzaXplb2YoZikpOworICAgIGJvZHktPmFwcGVuZEZvcm1hdCgiPCVmPiIsIGYpOworfQorCit2b2lkIER1bXBSZWFkZXI6OmFwcGVuZFBJRChTdHJpbmc4ICpib2R5LCBjb25zdCB2b2lkKiBkYXRhLCBzaXplX3QgbGVuZ3RoKQoreworICAgIGlmIChib2R5ID09IG51bGxwdHIgfHwgZGF0YSA9PSBudWxscHRyKSB7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgcGlkX3QgaWQgPSAqKChwaWRfdCopIGRhdGEpOworICAgIGNoYXIgKiBuYW1lID0gJigoY2hhciopIGRhdGEpW3NpemVvZihwaWRfdCldOworICAgIGJvZHktPmFwcGVuZEZvcm1hdCgiPFBJRDogJWQsIG5hbWU6ICUuKnM+IiwgaWQsIChpbnQpIChsZW5ndGggLSBzaXplb2YocGlkX3QpKSwgbmFtZSk7Cit9CisKK3ZvaWQgRHVtcFJlYWRlcjo6YXBwZW5kVGltZXN0YW1wKFN0cmluZzggKmJvZHksIGNvbnN0IHZvaWQgKmRhdGEpCit7CisgICAgaWYgKGJvZHkgPT0gbnVsbHB0ciB8fCBkYXRhID09IG51bGxwdHIpIHsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBpbnQ2NF90IHRzOworICAgIG1lbWNweSgmdHMsIGRhdGEsIHNpemVvZih0cykpOworICAgIGJvZHktPmFwcGVuZEZvcm1hdCgiWyVkLiUwM2RdIiwgKGludCkgKHRzIC8gKDEwMDAgKiAxMDAwICogMTAwMCkpLAorICAgICAgICAgICAgICAgICAgICAoaW50KSAoKHRzIC8gKDEwMDAgKiAxMDAwKSkgJSAxMDAwKSk7Cit9CisKK1N0cmluZzggRHVtcFJlYWRlcjo6YnVmZmVyRHVtcChjb25zdCB1aW50OF90ICpidWZmZXIsIHNpemVfdCBzaXplKQoreworICAgIFN0cmluZzggc3RyOworICAgIGlmIChidWZmZXIgPT0gbnVsbHB0cikgeworICAgICAgICByZXR1cm4gc3RyOworICAgIH0KKyAgICBzdHIuYXBwZW5kKCJbICIpOworICAgIGZvcihzaXplX3QgaSA9IDA7IGkgPCBzaXplOyBpKyspIHsKKyAgICAgICAgc3RyLmFwcGVuZEZvcm1hdCgiJWQgIiwgYnVmZmVyW2ldKTsKKyAgICB9CisgICAgc3RyLmFwcGVuZCgiXSIpOworICAgIHJldHVybiBzdHI7Cit9CisKK1N0cmluZzggRHVtcFJlYWRlcjo6YnVmZmVyRHVtcChjb25zdCBFbnRyeUl0ZXJhdG9yICZpdCkKK3sKKyAgICByZXR1cm4gYnVmZmVyRHVtcChpdCwgaXQtPmxlbmd0aCArIEVudHJ5OjprT3ZlcmhlYWQpOworfQorCit9ICAgLy8gbmFtZXNwYWNlIE5CTG9nCit9ICAgLy8gbmFtZXNwYWNlIGFuZHJvaWQKZGlmZiAtLWdpdCBhL21lZGlhL2xpYm5ibG9nL1JlcG9ydFBlcmZvcm1hbmNlLmNwcCBiL21lZGlhL2xpYm5ibG9nL1JlcG9ydFBlcmZvcm1hbmNlLmNwcAppbmRleCA4MjdlNzMxLi5mNjMyZTQwIDEwMDY0NAotLS0gYS9tZWRpYS9saWJuYmxvZy9SZXBvcnRQZXJmb3JtYW5jZS5jcHAKKysrIGIvbWVkaWEvbGlibmJsb2cvUmVwb3J0UGVyZm9ybWFuY2UuY3BwCkBAIC0xNSw5ICsxNSwxMSBAQAogICovCiAKICNkZWZpbmUgTE9HX1RBRyAiUmVwb3J0UGVyZm9ybWFuY2UiCisvLyNkZWZpbmUgTE9HX05ERUJVRyAwCiAKICNpbmNsdWRlIDxmc3RyZWFtPgogI2luY2x1ZGUgPGlvc3RyZWFtPgorI2luY2x1ZGUgPG1lbW9yeT4KICNpbmNsdWRlIDxxdWV1ZT4KICNpbmNsdWRlIDxzdGRhcmcuaD4KICNpbmNsdWRlIDxzdGRpbnQuaD4KQEAgLTI3LDIzICsyOSwxOTUgQEAKICNpbmNsdWRlIDxzeXMvcHJjdGwuaD4KICNpbmNsdWRlIDxzeXMvdGltZS5oPgogI2luY2x1ZGUgPHV0aWxpdHk+Ci0jaW5jbHVkZSA8bWVkaWEvbmJsb2cvTkJMb2cuaD4KKyNpbmNsdWRlIDxqc29uL2pzb24uaD4KKyNpbmNsdWRlIDxtZWRpYS9NZWRpYUFuYWx5dGljc0l0ZW0uaD4KKyNpbmNsdWRlIDxtZWRpYS9uYmxvZy9FdmVudHMuaD4KICNpbmNsdWRlIDxtZWRpYS9uYmxvZy9QZXJmb3JtYW5jZUFuYWx5c2lzLmg+CiAjaW5jbHVkZSA8bWVkaWEvbmJsb2cvUmVwb3J0UGVyZm9ybWFuY2UuaD4KICNpbmNsdWRlIDx1dGlscy9Mb2cuaD4KICNpbmNsdWRlIDx1dGlscy9TdHJpbmc4Lmg+CiAKIG5hbWVzcGFjZSBhbmRyb2lkIHsKLQogbmFtZXNwYWNlIFJlcG9ydFBlcmZvcm1hbmNlIHsKIAorc3RhdGljIHN0ZDo6dW5pcXVlX3B0cjxKc29uOjpWYWx1ZT4gZHVtcFRvSnNvbihjb25zdCBQZXJmb3JtYW5jZURhdGEmIGRhdGEpCit7CisgICAgc3RkOjp1bmlxdWVfcHRyPEpzb246OlZhbHVlPiByb290UHRyID0gc3RkOjptYWtlX3VuaXF1ZTxKc29uOjpWYWx1ZT4oSnNvbjo6b2JqZWN0VmFsdWUpOworICAgIEpzb246OlZhbHVlJiByb290ID0gKnJvb3RQdHI7CisgICAgcm9vdFsiaW9IYW5kbGUiXSA9IGRhdGEudGhyZWFkSW5mby5pZDsKKyAgICByb290WyJ0eXBlIl0gPSBOQkxvZzo6dGhyZWFkVHlwZVRvU3RyaW5nKGRhdGEudGhyZWFkSW5mby50eXBlKTsKKyAgICByb290WyJmcmFtZUNvdW50Il0gPSAoSnNvbjo6VmFsdWU6OkludClkYXRhLnRocmVhZFBhcmFtcy5mcmFtZUNvdW50OworICAgIHJvb3RbInNhbXBsZVJhdGUiXSA9IChKc29uOjpWYWx1ZTo6SW50KWRhdGEudGhyZWFkUGFyYW1zLnNhbXBsZVJhdGU7CisgICAgcm9vdFsid29ya01zSGlzdCJdID0gZGF0YS53b3JrSGlzdC50b1N0cmluZygpOworICAgIHJvb3RbImxhdGVuY3lNc0hpc3QiXSA9IGRhdGEubGF0ZW5jeUhpc3QudG9TdHJpbmcoKTsKKyAgICByb290WyJ3YXJtdXBNc0hpc3QiXSA9IGRhdGEud2FybXVwSGlzdC50b1N0cmluZygpOworICAgIHJvb3RbInVuZGVycnVucyJdID0gKEpzb246OlZhbHVlOjpJbnQ2NClkYXRhLnVuZGVycnVuczsKKyAgICByb290WyJvdmVycnVucyJdID0gKEpzb246OlZhbHVlOjpJbnQ2NClkYXRhLm92ZXJydW5zOworICAgIHJvb3RbImFjdGl2ZU1zIl0gPSAoSnNvbjo6VmFsdWU6OkludDY0KW5zMm1zKGRhdGEuYWN0aXZlKTsKKyAgICByb290WyJkdXJhdGlvbk1zIl0gPSAoSnNvbjo6VmFsdWU6OkludDY0KW5zMm1zKHN5c3RlbVRpbWUoKSAtIGRhdGEuc3RhcnQpOworICAgIHJldHVybiByb290UHRyOworfQorCitzdGF0aWMgc3RkOjpzdHJpbmcgZHVtcEhpc3RvZ3JhbXNUb1N0cmluZyhjb25zdCBQZXJmb3JtYW5jZURhdGEmIGRhdGEpCit7CisgICAgc3RkOjpzdHJpbmdzdHJlYW0gc3M7CisgICAgc3MgPDwgIj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuIjsKKyAgICBzcyA8PCAiVGhyZWFkIHR5cGU9IiA8PCBOQkxvZzo6dGhyZWFkVHlwZVRvU3RyaW5nKGRhdGEudGhyZWFkSW5mby50eXBlKQorICAgICAgICAgICAgPDwgIiBoYW5kbGU9IiA8PCBkYXRhLnRocmVhZEluZm8uaWQKKyAgICAgICAgICAgIDw8ICIgc2FtcGxlUmF0ZT0iIDw8IGRhdGEudGhyZWFkUGFyYW1zLnNhbXBsZVJhdGUKKyAgICAgICAgICAgIDw8ICIgZnJhbWVDb3VudD0iIDw8IGRhdGEudGhyZWFkUGFyYW1zLmZyYW1lQ291bnQgPDwgIlxuIjsKKyAgICBzcyA8PCAiICBUaHJlYWQgd29yayB0aW1lcyBpbiBtczpcbiIgPDwgZGF0YS53b3JrSGlzdC5hc2NpaUFydFN0cmluZyg0IC8qaW5kZW50Ki8pOworICAgIHNzIDw8ICIgIFRocmVhZCBsYXRlbmNpZXMgaW4gbXM6XG4iIDw8IGRhdGEubGF0ZW5jeUhpc3QuYXNjaWlBcnRTdHJpbmcoNCAvKmluZGVudCovKTsKKyAgICBzcyA8PCAiICBUaHJlYWQgd2FybXVwIHRpbWVzIGluIG1zOlxuIiA8PCBkYXRhLndhcm11cEhpc3QuYXNjaWlBcnRTdHJpbmcoNCAvKmluZGVudCovKTsKKyAgICByZXR1cm4gc3Muc3RyKCk7Cit9CisKK3ZvaWQgZHVtcEpzb24oaW50IGZkLCBjb25zdCBzdGQ6Om1hcDxpbnQsIFBlcmZvcm1hbmNlRGF0YT4mIHRocmVhZERhdGFNYXApCit7CisgICAgaWYgKGZkIDwgMCkgeworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgSnNvbjo6VmFsdWUgcm9vdChKc29uOjphcnJheVZhbHVlKTsKKyAgICBmb3IgKGNvbnN0IGF1dG8mIGl0ZW0gOiB0aHJlYWREYXRhTWFwKSB7CisgICAgICAgIGNvbnN0IFJlcG9ydFBlcmZvcm1hbmNlOjpQZXJmb3JtYW5jZURhdGEmIGRhdGEgPSBpdGVtLnNlY29uZDsKKyAgICAgICAgLy8gU2tpcCB0aHJlYWRzIHRoYXQgZG8gbm90IGhhdmUgcGVyZm9ybWFuY2UgZGF0YSByZWNvcmRlZCB5ZXQuCisgICAgICAgIGlmIChkYXRhLmVtcHR5KCkpIHsKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB9CisgICAgICAgIHN0ZDo6dW5pcXVlX3B0cjxKc29uOjpWYWx1ZT4gZGF0YUpzb24gPSBSZXBvcnRQZXJmb3JtYW5jZTo6ZHVtcFRvSnNvbihkYXRhKTsKKyAgICAgICAgaWYgKGRhdGFKc29uID09IG51bGxwdHIpIHsKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB9CisgICAgICAgICgqZGF0YUpzb24pWyJ0aHJlYWROdW0iXSA9IGl0ZW0uZmlyc3Q7CisgICAgICAgIHJvb3QuYXBwZW5kKCpkYXRhSnNvbik7CisgICAgfQorICAgIEpzb246OlN0eWxlZFdyaXRlciB3cml0ZXI7CisgICAgc3RkOjpzdHJpbmcgcm9vdFN0ciA9IHdyaXRlci53cml0ZShyb290KTsKKyAgICB3cml0ZShmZCwgcm9vdFN0ci5jX3N0cigpLCByb290U3RyLnNpemUoKSk7Cit9CisKK3ZvaWQgZHVtcFBsb3RzKGludCBmZCwgY29uc3Qgc3RkOjptYXA8aW50LCBQZXJmb3JtYW5jZURhdGE+JiB0aHJlYWREYXRhTWFwKQoreworICAgIGlmIChmZCA8IDApIHsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGZvciAoY29uc3QgYXV0byAmaXRlbSA6IHRocmVhZERhdGFNYXApIHsKKyAgICAgICAgY29uc3QgUmVwb3J0UGVyZm9ybWFuY2U6OlBlcmZvcm1hbmNlRGF0YSYgZGF0YSA9IGl0ZW0uc2Vjb25kOworICAgICAgICBpZiAoZGF0YS5lbXB0eSgpKSB7CisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQorICAgICAgICBzdGQ6OnN0cmluZyBoaXN0cyA9IFJlcG9ydFBlcmZvcm1hbmNlOjpkdW1wSGlzdG9ncmFtc1RvU3RyaW5nKGRhdGEpOworICAgICAgICB3cml0ZShmZCwgaGlzdHMuY19zdHIoKSwgaGlzdHMuc2l6ZSgpKTsKKyAgICB9Cit9CisKK3N0YXRpYyBzdGQ6OnN0cmluZyBkdW1wUmV0cm9TdHJpbmcoY29uc3QgUGVyZm9ybWFuY2VEYXRhJiBkYXRhLCBpbnQ2NF90IG5vdykKK3sKKyAgICBzdGQ6OnN0cmluZ3N0cmVhbSBzczsKKyAgICBzcyA8PCBOQkxvZzo6dGhyZWFkVHlwZVRvU3RyaW5nKGRhdGEudGhyZWFkSW5mby50eXBlKSA8PCAiLCIgPDwgZGF0YS50aHJlYWRJbmZvLmlkIDw8ICJcbiI7CisgICAgZm9yIChjb25zdCBhdXRvICZpdGVtIDogZGF0YS5zbmFwc2hvdHMpIHsKKyAgICAgICAgLy8gVE9ETyB1c2UgYW4gZW51bSB0byBzdHJpbmcgY29udmVyc2lvbiBtZXRob2QuIE9uZSBnb29kIGlkZWE6CisgICAgICAgIC8vIGh0dHBzOi8vc3RhY2tvdmVyZmxvdy5jb20vYS8yMzgxNTcKKyAgICAgICAgaWYgKGl0ZW0uZmlyc3QgPT0gTkJMb2c6OkVWRU5UX1VOREVSUlVOKSB7CisgICAgICAgICAgICBzcyA8PCAiRVZFTlRfVU5ERVJSVU4sIjsKKyAgICAgICAgfSBlbHNlIGlmIChpdGVtLmZpcnN0ID09IE5CTG9nOjpFVkVOVF9PVkVSUlVOKSB7CisgICAgICAgICAgICBzcyA8PCAiRVZFTlRfT1ZFUlJVTiwiOworICAgICAgICB9CisgICAgICAgIHNzIDw8IG5vdyAtIGl0ZW0uc2Vjb25kIDw8ICJcbiI7CisgICAgfQorICAgIHNzIDw8ICJcbiI7CisgICAgcmV0dXJuIHNzLnN0cigpOworfQorCit2b2lkIGR1bXBSZXRybyhpbnQgZmQsIGNvbnN0IHN0ZDo6bWFwPGludCwgUGVyZm9ybWFuY2VEYXRhPiYgdGhyZWFkRGF0YU1hcCkKK3sKKyAgICBpZiAoZmQgPCAwKSB7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBjb25zdCBuc2Vjc190IG5vdyA9IHN5c3RlbVRpbWUoKTsKKyAgICBmb3IgKGNvbnN0IGF1dG8gJml0ZW0gOiB0aHJlYWREYXRhTWFwKSB7CisgICAgICAgIGNvbnN0IFJlcG9ydFBlcmZvcm1hbmNlOjpQZXJmb3JtYW5jZURhdGEmIGRhdGEgPSBpdGVtLnNlY29uZDsKKyAgICAgICAgaWYgKGRhdGEuc25hcHNob3RzLmVtcHR5KCkpIHsKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB9CisgICAgICAgIGNvbnN0IHN0ZDo6c3RyaW5nIHJldHJvU3RyID0gZHVtcFJldHJvU3RyaW5nKGRhdGEsIG5vdyk7CisgICAgICAgIHdyaXRlKGZkLCByZXRyb1N0ci5jX3N0cigpLCByZXRyb1N0ci5zaXplKCkpOworICAgIH0KK30KKworYm9vbCBzZW5kVG9NZWRpYU1ldHJpY3MoY29uc3QgUGVyZm9ybWFuY2VEYXRhJiBkYXRhKQoreworICAgIC8vIFNlZSBkb2N1bWVudGF0aW9uIGZvciB0aGVzZSBtZXRyaWNzIGhlcmU6CisgICAgLy8gZG9jcy5nb29nbGUuY29tL2RvY3VtZW50L2QvMTEtLTZkeU9YVk9wYWNZUUxaaWFPWTVRVnRRalV5cU54MnpUOWNDekxLWUUvZWRpdD91c3A9c2hhcmluZworICAgIHN0YXRpYyBjb25zdGV4cHIgY2hhciBrVGhyZWFkVHlwZVtdID0gImFuZHJvaWQubWVkaWEuYXVkaW90aHJlYWQudHlwZSI7CisgICAgc3RhdGljIGNvbnN0ZXhwciBjaGFyIGtUaHJlYWRGcmFtZUNvdW50W10gPSAiYW5kcm9pZC5tZWRpYS5hdWRpb3RocmVhZC5mcmFtZWNvdW50IjsKKyAgICBzdGF0aWMgY29uc3RleHByIGNoYXIga1RocmVhZFNhbXBsZVJhdGVbXSA9ICJhbmRyb2lkLm1lZGlhLmF1ZGlvdGhyZWFkLnNhbXBsZXJhdGUiOworICAgIHN0YXRpYyBjb25zdGV4cHIgY2hhciBrVGhyZWFkV29ya0hpc3RbXSA9ICJhbmRyb2lkLm1lZGlhLmF1ZGlvdGhyZWFkLndvcmtNcy5oaXN0IjsKKyAgICBzdGF0aWMgY29uc3RleHByIGNoYXIga1RocmVhZExhdGVuY3lIaXN0W10gPSAiYW5kcm9pZC5tZWRpYS5hdWRpb3RocmVhZC5sYXRlbmN5TXMuaGlzdCI7CisgICAgc3RhdGljIGNvbnN0ZXhwciBjaGFyIGtUaHJlYWRXYXJtdXBIaXN0W10gPSAiYW5kcm9pZC5tZWRpYS5hdWRpb3RocmVhZC53YXJtdXBNcy5oaXN0IjsKKyAgICBzdGF0aWMgY29uc3RleHByIGNoYXIga1RocmVhZFVuZGVycnVuc1tdID0gImFuZHJvaWQubWVkaWEuYXVkaW90aHJlYWQudW5kZXJydW5zIjsKKyAgICBzdGF0aWMgY29uc3RleHByIGNoYXIga1RocmVhZE92ZXJydW5zW10gPSAiYW5kcm9pZC5tZWRpYS5hdWRpb3RocmVhZC5vdmVycnVucyI7CisgICAgc3RhdGljIGNvbnN0ZXhwciBjaGFyIGtUaHJlYWRBY3RpdmVbXSA9ICJhbmRyb2lkLm1lZGlhLmF1ZGlvdGhyZWFkLmFjdGl2ZU1zIjsKKyAgICBzdGF0aWMgY29uc3RleHByIGNoYXIga1RocmVhZER1cmF0aW9uW10gPSAiYW5kcm9pZC5tZWRpYS5hdWRpb3RocmVhZC5kdXJhdGlvbk1zIjsKKworICAgIC8vIEN1cnJlbnRseSwgd2Ugb25seSBhbGxvdyBGYXN0TWl4ZXIgdGhyZWFkIGRhdGEgdG8gYmUgc2VudCB0byBNZWRpYSBNZXRyaWNzLgorICAgIGlmIChkYXRhLnRocmVhZEluZm8udHlwZSAhPSBOQkxvZzo6RkFTVE1JWEVSKSB7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8TWVkaWFBbmFseXRpY3NJdGVtPiBpdGVtKG5ldyBNZWRpYUFuYWx5dGljc0l0ZW0oImF1ZGlvdGhyZWFkIikpOworCisgICAgY29uc3QgSGlzdG9ncmFtICZ3b3JrSGlzdCA9IGRhdGEud29ya0hpc3Q7CisgICAgaWYgKHdvcmtIaXN0LnRvdGFsQ291bnQoKSA+IDApIHsKKyAgICAgICAgaXRlbS0+c2V0Q1N0cmluZyhrVGhyZWFkV29ya0hpc3QsIHdvcmtIaXN0LnRvU3RyaW5nKCkuY19zdHIoKSk7CisgICAgfQorCisgICAgY29uc3QgSGlzdG9ncmFtICZsYXRlbmN5SGlzdCA9IGRhdGEubGF0ZW5jeUhpc3Q7CisgICAgaWYgKGxhdGVuY3lIaXN0LnRvdGFsQ291bnQoKSA+IDApIHsKKyAgICAgICAgaXRlbS0+c2V0Q1N0cmluZyhrVGhyZWFkTGF0ZW5jeUhpc3QsIGxhdGVuY3lIaXN0LnRvU3RyaW5nKCkuY19zdHIoKSk7CisgICAgfQorCisgICAgY29uc3QgSGlzdG9ncmFtICZ3YXJtdXBIaXN0ID0gZGF0YS53YXJtdXBIaXN0OworICAgIGlmICh3YXJtdXBIaXN0LnRvdGFsQ291bnQoKSA+IDApIHsKKyAgICAgICAgaXRlbS0+c2V0Q1N0cmluZyhrVGhyZWFkV2FybXVwSGlzdCwgd2FybXVwSGlzdC50b1N0cmluZygpLmNfc3RyKCkpOworICAgIH0KKworICAgIGlmIChkYXRhLnVuZGVycnVucyA+IDApIHsKKyAgICAgICAgaXRlbS0+c2V0SW50NjQoa1RocmVhZFVuZGVycnVucywgZGF0YS51bmRlcnJ1bnMpOworICAgIH0KKworICAgIGlmIChkYXRhLm92ZXJydW5zID4gMCkgeworICAgICAgICBpdGVtLT5zZXRJbnQ2NChrVGhyZWFkT3ZlcnJ1bnMsIGRhdGEub3ZlcnJ1bnMpOworICAgIH0KKworICAgIC8vIFNlbmQgdG8gTWVkaWEgTWV0cmljcyBpZiB0aGUgcmVjb3JkIGlzIG5vdCBlbXB0eS4KKyAgICAvLyBUaGUgdGhyZWFkIGFuZCB0aW1lIGluZm8gYXJlIGFkZGVkIGluc2lkZSB0aGUgaWYgc3RhdGVtZW50IGJlY2F1c2UKKyAgICAvLyB3ZSB3YW50IHRvIHNlbmQgdGhlbSBvbmx5IGlmIHRoZXJlIGFyZSBwZXJmb3JtYW5jZSBtZXRyaWNzIHRvIHNlbmQuCisgICAgaWYgKGl0ZW0tPmNvdW50KCkgPiAwKSB7CisgICAgICAgIC8vIEFkZCB0aHJlYWQgaW5mbyBmaWVsZHMuCisgICAgICAgIGNvbnN0IGNoYXIgKiBjb25zdCB0eXBlU3RyaW5nID0gTkJMb2c6OnRocmVhZFR5cGVUb1N0cmluZyhkYXRhLnRocmVhZEluZm8udHlwZSk7CisgICAgICAgIGl0ZW0tPnNldENTdHJpbmcoa1RocmVhZFR5cGUsIHR5cGVTdHJpbmcpOworICAgICAgICBpdGVtLT5zZXRJbnQzMihrVGhyZWFkRnJhbWVDb3VudCwgZGF0YS50aHJlYWRQYXJhbXMuZnJhbWVDb3VudCk7CisgICAgICAgIGl0ZW0tPnNldEludDMyKGtUaHJlYWRTYW1wbGVSYXRlLCBkYXRhLnRocmVhZFBhcmFtcy5zYW1wbGVSYXRlKTsKKyAgICAgICAgLy8gQWRkIHRpbWUgaW5mbyBmaWVsZHMuCisgICAgICAgIGl0ZW0tPnNldEludDY0KGtUaHJlYWRBY3RpdmUsIGRhdGEuYWN0aXZlIC8gMTAwMDAwMCk7CisgICAgICAgIGl0ZW0tPnNldEludDY0KGtUaHJlYWREdXJhdGlvbiwgKHN5c3RlbVRpbWUoKSAtIGRhdGEuc3RhcnQpIC8gMTAwMDAwMCk7CisgICAgICAgIHJldHVybiBpdGVtLT5zZWxmcmVjb3JkKCk7CisgICAgfQorICAgIHJldHVybiBmYWxzZTsKK30KKworLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAogLy8gVE9ETzogdXNlIGEgZnVuY3Rpb24gbGlrZSB0aGlzIHRvIGV4dHJhY3QgbG9naWMgZnJvbSB3cml0ZVRvRmlsZQogLy8gaHR0cHM6Ly9zdGFja292ZXJmbG93LmNvbS9hLzkyNzk2MjAKIAogLy8gV3JpdGVzIG91dGxpZXIgaW50ZXJ2YWxzLCB0aW1lc3RhbXBzLCBhbmQgaGlzdG9ncmFtcyBzcGFubmluZyBsb25nIHRpbWUgaW50ZXJ2YWxzIHRvIGZpbGUuCiAvLyBUT0RPOiB3cml0ZSBkYXRhIGluIGJpbmFyeSBmb3JtYXQKLXZvaWQgd3JpdGVUb0ZpbGUoY29uc3Qgc3RkOjpkZXF1ZTxzdGQ6OnBhaXI8dGltZXN0YW1wLCBIaXN0b2dyYW0+PiAmaGlzdHMsCit2b2lkIHdyaXRlVG9GaWxlKGNvbnN0IHN0ZDo6ZGVxdWU8c3RkOjpwYWlyPHRpbWVzdGFtcCwgSGlzdD4+ICZoaXN0cywKICAgICAgICAgICAgICAgICAgY29uc3Qgc3RkOjpkZXF1ZTxzdGQ6OnBhaXI8bXNJbnRlcnZhbCwgdGltZXN0YW1wPj4gJm91dGxpZXJEYXRhLAogICAgICAgICAgICAgICAgICBjb25zdCBzdGQ6OmRlcXVlPHRpbWVzdGFtcD4gJnBlYWtUaW1lc3RhbXBzLAogICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICogZGlyZWN0b3J5LCBib29sIGFwcGVuZCwgaW50IGF1dGhvciwgbG9nX2hhc2hfdCBoYXNoKSB7CkBAIC0xMjgsNiArMzAyLDUgQEAKICAgICBwZnMuY2xvc2UoKTsKIH0KIAotfSAvLyBuYW1lc3BhY2UgUmVwb3J0UGVyZm9ybWFuY2UKLQorfSAgIC8vIG5hbWVzcGFjZSBSZXBvcnRQZXJmb3JtYW5jZQogfSAgIC8vIG5hbWVzcGFjZSBhbmRyb2lkCmRpZmYgLS1naXQgYS9tZWRpYS9saWJuYmxvZy9UaW1lbGluZS5jcHAgYi9tZWRpYS9saWJuYmxvZy9UaW1lbGluZS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzA5YjAzYgotLS0gL2Rldi9udWxsCisrKyBiL21lZGlhL2xpYm5ibG9nL1RpbWVsaW5lLmNwcApAQCAtMCwwICsxLDUwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE4IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KKworI2luY2x1ZGUgPHN0ZGRlZi5oPgorCisjaW5jbHVkZSA8YXVkaW9fdXRpbHMvcm91bmR1cC5oPgorI2luY2x1ZGUgPG1lZGlhL25ibG9nL1RpbWVsaW5lLmg+CisKK25hbWVzcGFjZSBhbmRyb2lkIHsKK25hbWVzcGFjZSBOQkxvZyB7CisKKyNpZiAwICAgLy8gRklYTUUgc2VlIG5vdGUgaW4gVGltZWxpbmUuaAorTkJMb2c6OlRpbWVsaW5lOjpUaW1lbGluZShzaXplX3Qgc2l6ZSwgdm9pZCAqc2hhcmVkKQorICAgIDogbVNpemUocm91bmR1cChzaXplKSksIG1Pd24oc2hhcmVkID09IE5VTEwpLAorICAgICAgbVNoYXJlZCgoU2hhcmVkICopIChtT3duID8gbmV3IGNoYXJbc2hhcmVkU2l6ZShzaXplKV0gOiBzaGFyZWQpKQoreworICAgIG5ldyAobVNoYXJlZCkgU2hhcmVkOworfQorCitOQkxvZzo6VGltZWxpbmU6On5UaW1lbGluZSgpCit7CisgICAgbVNoYXJlZC0+flNoYXJlZCgpOworICAgIGlmIChtT3duKSB7CisgICAgICAgIGRlbGV0ZVtdIChjaGFyICopIG1TaGFyZWQ7CisgICAgfQorfQorI2VuZGlmCisKKy8qc3RhdGljKi8KK3NpemVfdCBUaW1lbGluZTo6c2hhcmVkU2l6ZShzaXplX3Qgc2l6ZSkKK3sKKyAgICAvLyBUT0RPIGZpZm8gbm93IHN1cHBvcnRzIG5vbi1wb3dlci1vZi0yIGJ1ZmZlciBzaXplcywgc28gY291bGQgcmVtb3ZlIHRoZSByb3VuZHVwCisgICAgcmV0dXJuIHNpemVvZihTaGFyZWQpICsgcm91bmR1cChzaXplKTsKK30KKworfSAgIC8vIG5hbWVzcGFjZSBOQkxvZworfSAgIC8vIG5hbWVzcGFjZSBhbmRyb2lkCmRpZmYgLS1naXQgYS9tZWRpYS9saWJuYmxvZy9Xcml0ZXIuY3BwIGIvbWVkaWEvbGlibmJsb2cvV3JpdGVyLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kYTNiZDUyCi0tLSAvZGV2L251bGwKKysrIGIvbWVkaWEvbGlibmJsb2cvV3JpdGVyLmNwcApAQCAtMCwwICsxLDMyMCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxOCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCisKKyNkZWZpbmUgTE9HX1RBRyAiTkJMb2ciCisvLyNkZWZpbmUgTE9HX05ERUJVRyAwCisKKyNpbmNsdWRlIDxzdGRhcmcuaD4KKyNpbmNsdWRlIDxzdGRkZWYuaD4KKyNpbmNsdWRlIDxzeXMvcHJjdGwuaD4KKworI2luY2x1ZGUgPGF1ZGlvX3V0aWxzL2ZpZm8uaD4KKyNpbmNsdWRlIDxiaW5kZXIvSU1lbW9yeS5oPgorI2luY2x1ZGUgPG1lZGlhL25ibG9nL0VudHJ5Lmg+CisjaW5jbHVkZSA8bWVkaWEvbmJsb2cvRXZlbnRzLmg+CisjaW5jbHVkZSA8bWVkaWEvbmJsb2cvVGltZWxpbmUuaD4KKyNpbmNsdWRlIDxtZWRpYS9uYmxvZy9Xcml0ZXIuaD4KKyNpbmNsdWRlIDx1dGlscy9Mb2cuaD4KKyNpbmNsdWRlIDx1dGlscy9NdXRleC5oPgorCituYW1lc3BhY2UgYW5kcm9pZCB7CituYW1lc3BhY2UgTkJMb2cgeworCitXcml0ZXI6OldyaXRlcih2b2lkICpzaGFyZWQsIHNpemVfdCBzaXplKQorICAgIDogbVNoYXJlZCgoU2hhcmVkICopIHNoYXJlZCksCisgICAgICBtRmlmbyhtU2hhcmVkICE9IE5VTEwgPworICAgICAgICBuZXcgYXVkaW9fdXRpbHNfZmlmbyhzaXplLCBzaXplb2YodWludDhfdCksCisgICAgICAgICAgICBtU2hhcmVkLT5tQnVmZmVyLCBtU2hhcmVkLT5tUmVhciwgTlVMTCAvKnRocm90dGxlc0Zyb250Ki8pIDogTlVMTCksCisgICAgICBtRmlmb1dyaXRlcihtRmlmbyAhPSBOVUxMID8gbmV3IGF1ZGlvX3V0aWxzX2ZpZm9fd3JpdGVyKCptRmlmbykgOiBOVUxMKSwKKyAgICAgIG1FbmFibGVkKG1GaWZvV3JpdGVyICE9IE5VTEwpCit7CisgICAgLy8gY2FjaGluZyBwaWQgYW5kIHByb2Nlc3MgbmFtZQorICAgIHBpZF90IGlkID0gOjpnZXRwaWQoKTsKKyAgICBjaGFyIHByb2NOYW1lWzE2XTsKKyAgICBpbnQgc3RhdHVzID0gcHJjdGwoUFJfR0VUX05BTUUsIHByb2NOYW1lKTsKKyAgICBpZiAoc3RhdHVzKSB7ICAvLyBlcnJvciBnZXR0aW5nIHByb2Nlc3MgbmFtZQorICAgICAgICBwcm9jTmFtZVswXSA9ICdcMCc7CisgICAgfQorICAgIHNpemVfdCBsZW5ndGggPSBzdHJsZW4ocHJvY05hbWUpOworICAgIG1QaWRUYWdTaXplID0gbGVuZ3RoICsgc2l6ZW9mKHBpZF90KTsKKyAgICBtUGlkVGFnID0gbmV3IGNoYXJbbVBpZFRhZ1NpemVdOworICAgIG1lbWNweShtUGlkVGFnLCAmaWQsIHNpemVvZihwaWRfdCkpOworICAgIG1lbWNweShtUGlkVGFnICsgc2l6ZW9mKHBpZF90KSwgcHJvY05hbWUsIGxlbmd0aCk7Cit9CisKK1dyaXRlcjo6V3JpdGVyKGNvbnN0IHNwPElNZW1vcnk+JiBpTWVtb3J5LCBzaXplX3Qgc2l6ZSkKKyAgICA6IFdyaXRlcihpTWVtb3J5ICE9IDAgPyAoU2hhcmVkICopIGlNZW1vcnktPnBvaW50ZXIoKSA6IE5VTEwsIHNpemUpCit7CisgICAgbUlNZW1vcnkgPSBpTWVtb3J5OworfQorCitXcml0ZXI6On5Xcml0ZXIoKQoreworICAgIGRlbGV0ZSBtRmlmb1dyaXRlcjsKKyAgICBkZWxldGUgbUZpZm87CisgICAgZGVsZXRlW10gbVBpZFRhZzsKK30KKwordm9pZCBXcml0ZXI6OmxvZyhjb25zdCBjaGFyICpzdHJpbmcpCit7CisgICAgaWYgKCFtRW5hYmxlZCkgeworICAgICAgICByZXR1cm47CisgICAgfQorICAgIExPR19BTFdBWVNfRkFUQUxfSUYoc3RyaW5nID09IE5VTEwsICJBdHRlbXB0ZWQgdG8gbG9nIE5VTEwgc3RyaW5nIik7CisgICAgc2l6ZV90IGxlbmd0aCA9IHN0cmxlbihzdHJpbmcpOworICAgIGlmIChsZW5ndGggPiBFbnRyeTo6a01heExlbmd0aCkgeworICAgICAgICBsZW5ndGggPSBFbnRyeTo6a01heExlbmd0aDsKKyAgICB9CisgICAgbG9nKEVWRU5UX1NUUklORywgc3RyaW5nLCBsZW5ndGgpOworfQorCit2b2lkIFdyaXRlcjo6bG9nZihjb25zdCBjaGFyICpmbXQsIC4uLikKK3sKKyAgICBpZiAoIW1FbmFibGVkKSB7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgdmFfbGlzdCBhcDsKKyAgICB2YV9zdGFydChhcCwgZm10KTsKKyAgICBXcml0ZXI6OmxvZ3ZmKGZtdCwgYXApOyAgICAgLy8gdGhlIFdyaXRlcjo6IGlzIG5lZWRlZCB0byBhdm9pZCB2aXJ0dWFsIGRpc3BhdGNoIGZvciBMb2NrZWRXcml0ZXIKKyAgICB2YV9lbmQoYXApOworfQorCit2b2lkIFdyaXRlcjo6bG9nVGltZXN0YW1wKCkKK3sKKyAgICBpZiAoIW1FbmFibGVkKSB7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgc3RydWN0IHRpbWVzcGVjIHRzOworICAgIGlmICghY2xvY2tfZ2V0dGltZShDTE9DS19NT05PVE9OSUMsICZ0cykpIHsKKyAgICAgICAgbG9nKEVWRU5UX1RJTUVTVEFNUCwgJnRzLCBzaXplb2YodHMpKTsKKyAgICB9Cit9CisKK3ZvaWQgV3JpdGVyOjpsb2dGb3JtYXQoY29uc3QgY2hhciAqZm10LCBsb2dfaGFzaF90IGhhc2gsIC4uLikKK3sKKyAgICBpZiAoIW1FbmFibGVkKSB7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgdmFfbGlzdCBhcDsKKyAgICB2YV9zdGFydChhcCwgaGFzaCk7CisgICAgV3JpdGVyOjpsb2dWRm9ybWF0KGZtdCwgaGFzaCwgYXApOworICAgIHZhX2VuZChhcCk7Cit9CisKK3ZvaWQgV3JpdGVyOjpsb2dFdmVudEhpc3RUcyhFdmVudCBldmVudCwgbG9nX2hhc2hfdCBoYXNoKQoreworICAgIGlmICghbUVuYWJsZWQpIHsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBIaXN0VHNFbnRyeSBkYXRhOworICAgIGRhdGEuaGFzaCA9IGhhc2g7CisgICAgZGF0YS50cyA9IHN5c3RlbVRpbWUoKTsKKyAgICBpZiAoZGF0YS50cyA+IDApIHsKKyAgICAgICAgbG9nKGV2ZW50LCAmZGF0YSwgc2l6ZW9mKGRhdGEpKTsKKyAgICB9IGVsc2UgeworICAgICAgICBBTE9HRSgiRmFpbGVkIHRvIGdldCB0aW1lc3RhbXAiKTsKKyAgICB9Cit9CisKK2Jvb2wgV3JpdGVyOjppc0VuYWJsZWQoKSBjb25zdAoreworICAgIHJldHVybiBtRW5hYmxlZDsKK30KKworYm9vbCBXcml0ZXI6OnNldEVuYWJsZWQoYm9vbCBlbmFibGVkKQoreworICAgIGJvb2wgb2xkID0gbUVuYWJsZWQ7CisgICAgbUVuYWJsZWQgPSBlbmFibGVkICYmIG1TaGFyZWQgIT0gTlVMTDsKKyAgICByZXR1cm4gb2xkOworfQorCit2b2lkIFdyaXRlcjo6bG9nKGNvbnN0IEVudHJ5ICZldHIsIGJvb2wgdHJ1c3RlZCkKK3sKKyAgICBpZiAoIW1FbmFibGVkKSB7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgaWYgKCF0cnVzdGVkKSB7CisgICAgICAgIGxvZyhldHIubUV2ZW50LCBldHIubURhdGEsIGV0ci5tTGVuZ3RoKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBjb25zdCBzaXplX3QgbmVlZCA9IGV0ci5tTGVuZ3RoICsgRW50cnk6OmtPdmVyaGVhZDsgLy8gbUV2ZW50LCBtTGVuZ3RoLCBkYXRhW21MZW5ndGhdLCBtTGVuZ3RoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIG5lZWQgPSBudW1iZXIgb2YgYnl0ZXMgd3JpdHRlbiB0byBGSUZPCisKKyAgICAvLyBGSVhNRSBvcHRpbWl6ZSB0aGlzIHVzaW5nIG1lbWNweSBmb3IgdGhlIGRhdGEgcGFydCBvZiB0aGUgRW50cnkuCisgICAgLy8gVGhlIEVudHJ5IGNvdWxkIGhhdmUgYSBtZXRob2QgY29weVRvKHB0ciwgb2Zmc2V0LCBzaXplKSB0byBvcHRpbWl6ZSB0aGUgY29weS4KKyAgICAvLyBjaGVja3Mgc2l6ZSBvZiBhIHNpbmdsZSBsb2cgRW50cnk6IHR5cGUsIGxlbmd0aCwgZGF0YSBwb2ludGVyIGFuZCBlbmRpbmcKKyAgICB1aW50OF90IHRlbXBbRW50cnk6OmtNYXhMZW5ndGggKyBFbnRyeTo6a092ZXJoZWFkXTsKKyAgICAvLyB3cml0ZSB0aGlzIGRhdGEgdG8gdGVtcCBhcnJheQorICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbmVlZDsgaSsrKSB7CisgICAgICAgIHRlbXBbaV0gPSBldHIuY29weUVudHJ5RGF0YUF0KGkpOworICAgIH0KKyAgICAvLyB3cml0ZSB0byBjaXJjdWxhciBidWZmZXIKKyAgICBtRmlmb1dyaXRlci0+d3JpdGUodGVtcCwgbmVlZCk7Cit9CisKK3ZvaWQgV3JpdGVyOjpsb2coRXZlbnQgZXZlbnQsIGNvbnN0IHZvaWQgKmRhdGEsIHNpemVfdCBsZW5ndGgpCit7CisgICAgaWYgKCFtRW5hYmxlZCkgeworICAgICAgICByZXR1cm47CisgICAgfQorICAgIGlmIChkYXRhID09IE5VTEwgfHwgbGVuZ3RoID4gRW50cnk6OmtNYXhMZW5ndGgpIHsKKyAgICAgICAgLy8gVE9ETyBQZXJoYXBzIGl0IG1ha2VzIHNlbnNlIHRvIGRpc3BsYXkgdHJ1bmNhdGVkIGRhdGEgb3IgYXQgbGVhc3QgYQorICAgICAgICAvLyAgICAgIG1lc3NhZ2UgdGhhdCB0aGUgZGF0YSBpcyB0b28gbG9uZz8gIFRoZSBjdXJyZW50IGJlaGF2aW9yIGNhbiBjcmVhdGUKKyAgICAgICAgLy8gICAgICBhIGNvbmZ1c2lvbiBmb3IgYSBwcm9ncmFtbWVyIGRlYnVnZ2luZyB0aGVpciBjb2RlLgorICAgICAgICByZXR1cm47CisgICAgfQorICAgIC8vIElnbm9yZSBpZiBpbnZhbGlkIGV2ZW50CisgICAgaWYgKGV2ZW50ID09IEVWRU5UX1JFU0VSVkVEIHx8IGV2ZW50ID49IEVWRU5UX1VQUEVSX0JPVU5EKSB7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgRW50cnkgZXRyKGV2ZW50LCBkYXRhLCBsZW5ndGgpOworICAgIGxvZyhldHIsIHRydWUgLyp0cnVzdGVkKi8pOworfQorCit2b2lkIFdyaXRlcjo6bG9ndmYoY29uc3QgY2hhciAqZm10LCB2YV9saXN0IGFwKQoreworICAgIGlmICghbUVuYWJsZWQpIHsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBjaGFyIGJ1ZmZlcltFbnRyeTo6a01heExlbmd0aCArIDEgLypOVUwqL107CisgICAgaW50IGxlbmd0aCA9IHZzbnByaW50ZihidWZmZXIsIHNpemVvZihidWZmZXIpLCBmbXQsIGFwKTsKKyAgICBpZiAobGVuZ3RoID49IChpbnQpIHNpemVvZihidWZmZXIpKSB7CisgICAgICAgIGxlbmd0aCA9IHNpemVvZihidWZmZXIpIC0gMTsKKyAgICAgICAgLy8gTlVMIHRlcm1pbmF0aW9uIGlzIG5vdCByZXF1aXJlZAorICAgICAgICAvLyBidWZmZXJbbGVuZ3RoXSA9ICdcMCc7CisgICAgfQorICAgIGlmIChsZW5ndGggPj0gMCkgeworICAgICAgICBsb2coRVZFTlRfU1RSSU5HLCBidWZmZXIsIGxlbmd0aCk7CisgICAgfQorfQorCit2b2lkIFdyaXRlcjo6bG9nU3RhcnQoY29uc3QgY2hhciAqZm10KQoreworICAgIGlmICghbUVuYWJsZWQpIHsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBzaXplX3QgbGVuZ3RoID0gc3RybGVuKGZtdCk7CisgICAgaWYgKGxlbmd0aCA+IEVudHJ5OjprTWF4TGVuZ3RoKSB7CisgICAgICAgIGxlbmd0aCA9IEVudHJ5OjprTWF4TGVuZ3RoOworICAgIH0KKyAgICBsb2coRVZFTlRfRk1UX1NUQVJULCBmbXQsIGxlbmd0aCk7Cit9CisKK3ZvaWQgV3JpdGVyOjpsb2dUaW1lc3RhbXBGb3JtYXQoKQoreworICAgIGlmICghbUVuYWJsZWQpIHsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBjb25zdCBuc2Vjc190IHRzID0gc3lzdGVtVGltZSgpOworICAgIGlmICh0cyA+IDApIHsKKyAgICAgICAgbG9nKEVWRU5UX0ZNVF9USU1FU1RBTVAsICZ0cywgc2l6ZW9mKHRzKSk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgQUxPR0UoIkZhaWxlZCB0byBnZXQgdGltZXN0YW1wIik7CisgICAgfQorfQorCit2b2lkIFdyaXRlcjo6bG9nVkZvcm1hdChjb25zdCBjaGFyICpmbXQsIGxvZ19oYXNoX3QgaGFzaCwgdmFfbGlzdCBhcmdwKQoreworICAgIGlmICghbUVuYWJsZWQpIHsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBXcml0ZXI6OmxvZ1N0YXJ0KGZtdCk7CisgICAgaW50IGk7CisgICAgZG91YmxlIGQ7CisgICAgZmxvYXQgZjsKKyAgICBjaGFyKiBzOworICAgIHNpemVfdCBsZW5ndGg7CisgICAgaW50NjRfdCB0OworICAgIFdyaXRlcjo6bG9nVGltZXN0YW1wRm9ybWF0KCk7CisgICAgbG9nKEVWRU5UX0ZNVF9IQVNILCAmaGFzaCwgc2l6ZW9mKGhhc2gpKTsKKyAgICBmb3IgKGNvbnN0IGNoYXIgKnAgPSBmbXQ7ICpwICE9ICdcMCc7IHArKykgeworICAgICAgICAvLyBUT0RPOiBpbXBsZW1lbnQgbW9yZSBjb21wbGV4IGZvcm1hdHRpbmcgc3VjaCBhcyAlLjNmCisgICAgICAgIGlmICgqcCAhPSAnJScpIHsKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB9CisgICAgICAgIHN3aXRjaCgqKytwKSB7CisgICAgICAgIGNhc2UgJ3MnOiAvLyBzdHJpbmcKKyAgICAgICAgICAgIHMgPSB2YV9hcmcoYXJncCwgY2hhciAqKTsKKyAgICAgICAgICAgIGxlbmd0aCA9IHN0cmxlbihzKTsKKyAgICAgICAgICAgIGlmIChsZW5ndGggPiBFbnRyeTo6a01heExlbmd0aCkgeworICAgICAgICAgICAgICAgIGxlbmd0aCA9IEVudHJ5OjprTWF4TGVuZ3RoOworICAgICAgICAgICAgfQorICAgICAgICAgICAgbG9nKEVWRU5UX0ZNVF9TVFJJTkcsIHMsIGxlbmd0aCk7CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlICd0JzogLy8gdGltZXN0YW1wCisgICAgICAgICAgICB0ID0gdmFfYXJnKGFyZ3AsIGludDY0X3QpOworICAgICAgICAgICAgbG9nKEVWRU5UX0ZNVF9USU1FU1RBTVAsICZ0LCBzaXplb2YodCkpOworICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSAnZCc6IC8vIGludGVnZXIKKyAgICAgICAgICAgIGkgPSB2YV9hcmcoYXJncCwgaW50KTsKKyAgICAgICAgICAgIGxvZyhFVkVOVF9GTVRfSU5URUdFUiwgJmksIHNpemVvZihpKSk7CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlICdmJzogLy8gZmxvYXQKKyAgICAgICAgICAgIGQgPSB2YV9hcmcoYXJncCwgZG91YmxlKTsgLy8gZmxvYXQgYXJndW1lbnRzIGFyZSBwcm9tb3RlZCB0byBkb3VibGUgaW4gdmFyYXJnIGxpc3RzCisgICAgICAgICAgICBmID0gKGZsb2F0KWQ7CisgICAgICAgICAgICBsb2coRVZFTlRfRk1UX0ZMT0FULCAmZiwgc2l6ZW9mKGYpKTsKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2UgJ3AnOiAvLyBwaWQKKyAgICAgICAgICAgIGxvZyhFVkVOVF9GTVRfUElELCBtUGlkVGFnLCBtUGlkVGFnU2l6ZSk7CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICAvLyB0aGUgIiVcMCIgY2FzZSBmaW5pc2hlcyBwYXJzaW5nCisgICAgICAgIGNhc2UgJ1wwJzoKKyAgICAgICAgICAgIC0tcDsKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2UgJyUnOgorICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIEFMT0dXKCJOQkxvZyBXcml0ZXIgcGFyc2VkIGludmFsaWQgZm9ybWF0IHNwZWNpZmllcjogJWMiLCAqcCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgIH0KKyAgICBFbnRyeSBldHIoRVZFTlRfRk1UX0VORCwgbnVsbHB0ciwgMCk7CisgICAgbG9nKGV0ciwgdHJ1ZSk7Cit9CisKKy8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitMb2NrZWRXcml0ZXI6OkxvY2tlZFdyaXRlcih2b2lkICpzaGFyZWQsIHNpemVfdCBzaXplKQorICAgIDogV3JpdGVyKHNoYXJlZCwgc2l6ZSkKK3sKK30KKworYm9vbCBMb2NrZWRXcml0ZXI6OmlzRW5hYmxlZCgpIGNvbnN0Cit7CisgICAgTXV0ZXg6OkF1dG9sb2NrIF9sKG1Mb2NrKTsKKyAgICByZXR1cm4gV3JpdGVyOjppc0VuYWJsZWQoKTsKK30KKworYm9vbCBMb2NrZWRXcml0ZXI6OnNldEVuYWJsZWQoYm9vbCBlbmFibGVkKQoreworICAgIE11dGV4OjpBdXRvbG9jayBfbChtTG9jayk7CisgICAgcmV0dXJuIFdyaXRlcjo6c2V0RW5hYmxlZChlbmFibGVkKTsKK30KKwordm9pZCBMb2NrZWRXcml0ZXI6OmxvZyhjb25zdCBFbnRyeSAmZW50cnksIGJvb2wgdHJ1c3RlZCkgeworICAgIE11dGV4OjpBdXRvbG9jayBfbChtTG9jayk7CisgICAgV3JpdGVyOjpsb2coZW50cnksIHRydXN0ZWQpOworfQorCit9ICAgLy8gbmFtZXNwYWNlIE5CTG9nCit9ICAgLy8gbmFtZXNwYWNlIGFuZHJvaWQKZGlmZiAtLWdpdCBhL21lZGlhL2xpYm5ibG9nL2luY2x1ZGUvbWVkaWEvbmJsb2cvRW50cnkuaCBiL21lZGlhL2xpYm5ibG9nL2luY2x1ZGUvbWVkaWEvbmJsb2cvRW50cnkuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41M2YwMGI2Ci0tLSAvZGV2L251bGwKKysrIGIvbWVkaWEvbGlibmJsb2cvaW5jbHVkZS9tZWRpYS9uYmxvZy9FbnRyeS5oCkBAIC0wLDAgKzEsMjMyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE4IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KKworI2lmbmRlZiBBTkRST0lEX01FRElBX05CTE9HX0VOVFJZX0gKKyNkZWZpbmUgQU5EUk9JRF9NRURJQV9OQkxPR19FTlRSWV9ICisKKyNpbmNsdWRlIDxtZW1vcnk+CisjaW5jbHVkZSA8c3RkZGVmLmg+CisjaW5jbHVkZSA8c3RkaW50Lmg+CisjaW5jbHVkZSA8dHlwZV90cmFpdHM+CisKKyNpbmNsdWRlIDxtZWRpYS9uYmxvZy9FdmVudHMuaD4KKworY2xhc3MgYXVkaW9fdXRpbHNfZmlmb193cml0ZXI7CisKK25hbWVzcGFjZSBhbmRyb2lkIHsKK25hbWVzcGFjZSBOQkxvZyB7CisKKy8vIGVudHJ5IHJlcHJlc2VudGF0aW9uIGluIG1lbW9yeQorc3RydWN0IGVudHJ5IHsKKyAgICBjb25zdCB1aW50OF90IHR5cGU7CisgICAgY29uc3QgdWludDhfdCBsZW5ndGg7CisgICAgY29uc3QgdWludDhfdCBkYXRhWzBdOworfTsKKworLy8gZW50cnkgdGFpbCByZXByZXNlbnRhdGlvbiAoYWZ0ZXIgZGF0YSkKK3N0cnVjdCBlbmRpbmcgeworICAgIHVpbnQ4X3QgbGVuZ3RoOworICAgIHVpbnQ4X3QgbmV4dFswXTsKK307CisKKy8vIHJlcHJlc2VudGF0aW9uIG9mIGEgc2luZ2xlIGxvZyBlbnRyeSBpbiBzaGFyZWQgbWVtb3J5CisvLyAgYnl0ZVswXSAgICAgICAgICAgICBtRXZlbnQKKy8vICBieXRlWzFdICAgICAgICAgICAgIG1MZW5ndGgKKy8vICBieXRlWzJdICAgICAgICAgICAgIG1EYXRhWzBdCisvLyAgLi4uCisvLyAgYnl0ZVsyK2ldICAgICAgICAgICBtRGF0YVtpXQorLy8gIC4uLgorLy8gIGJ5dGVbMittTGVuZ3RoLTFdICAgbURhdGFbbUxlbmd0aC0xXQorLy8gIGJ5dGVbMittTGVuZ3RoXSAgICAgZHVwbGljYXRlIGNvcHkgb2YgbUxlbmd0aCB0byBwZXJtaXQgcmV2ZXJzZSBzY2FuCisvLyAgYnl0ZVszK21MZW5ndGhdICAgICBzdGFydCBvZiBuZXh0IGxvZyBlbnRyeQorY2xhc3MgRW50cnkgeworcHVibGljOgorICAgIEVudHJ5KEV2ZW50IGV2ZW50LCBjb25zdCB2b2lkICpkYXRhLCBzaXplX3QgbGVuZ3RoKQorICAgICAgICA6IG1FdmVudChldmVudCksIG1MZW5ndGgobGVuZ3RoKSwgbURhdGEoZGF0YSkge30KKyAgICB+RW50cnkoKSB7fQorCisgICAgLy8gdXNlZCBkdXJpbmcgd3JpdGluZyB0byBmb3JtYXQgRW50cnkgaW5mb3JtYXRpb24gYXMgZm9sbG93czoKKyAgICAvLyBbdHlwZV1bbGVuZ3RoXVtkYXRhIC4uLiBdW2xlbmd0aF0KKyAgICBpbnQgICAgIGNvcHlFbnRyeURhdGFBdChzaXplX3Qgb2Zmc2V0KSBjb25zdDsKKworcHJpdmF0ZToKKyAgICBmcmllbmQgY2xhc3MgV3JpdGVyOworICAgIEV2ZW50ICAgICAgIG1FdmVudDsgICAgIC8vIGV2ZW50IHR5cGUKKyAgICB1aW50OF90ICAgICBtTGVuZ3RoOyAgICAvLyBsZW5ndGggb2YgYWRkaXRpb25hbCBkYXRhLCAwIDw9IG1MZW5ndGggPD0ga01heExlbmd0aAorICAgIGNvbnN0IHZvaWQgKm1EYXRhOyAgICAgIC8vIGV2ZW50IHR5cGUtc3BlY2lmaWMgZGF0YQorICAgIHN0YXRpYyBjb25zdCBzaXplX3Qga01heExlbmd0aCA9IDI1NTsKK3B1YmxpYzoKKyAgICAvLyBtRXZlbnQsIG1MZW5ndGgsIG1EYXRhWy4uLl0sIGR1cGxpY2F0ZSBtTGVuZ3RoCisgICAgc3RhdGljIGNvbnN0IHNpemVfdCBrT3ZlcmhlYWQgPSBzaXplb2YoZW50cnkpICsgc2l6ZW9mKGVuZGluZyk7CisgICAgLy8gZW5kaW5kIGxlbmd0aCBvZiBwcmV2aW91cyBlbnRyeQorICAgIHN0YXRpYyBjb25zdCBzc2l6ZV90IGtQcmV2aW91c0xlbmd0aE9mZnNldCA9IC0gc2l6ZW9mKGVuZGluZykgKworICAgICAgICBvZmZzZXRvZihlbmRpbmcsIGxlbmd0aCk7Cit9OworCisvLyBlbnRyeSBpdGVyYXRvcgorY2xhc3MgRW50cnlJdGVyYXRvciB7CitwdWJsaWM6CisgICAgLy8gVXNlZCBmb3IgZHVtbXkgaW5pdGlhbGl6YXRpb24uIFBlcmZvcm1pbmcgb3BlcmF0aW9ucyBvbiBhIGRlZmF1bHQtY29uc3RydWN0ZWQKKyAgICAvLyBFbnRyeUl0ZXJhdG9yIG90aGVyIHRoYW4gYXNzaWduaW5nIGl0IHRvIGFub3RoZXIgdmFsaWQgRW50cnlJdGVyYXRvcgorICAgIC8vIGlzIHVuZGVmaW5lZCBiZWhhdmlvci4KKyAgICBFbnRyeUl0ZXJhdG9yKCk7CisgICAgLy8gQ2FsbGVyJ3MgcmVzcG9uc2liaWxpdHkgdG8gbWFrZSBzdXJlIGVudHJ5IGlzIG5vdCBudWxscHRyLgorICAgIC8vIFBhc3NpbmcgaW4gbnVsbHB0ciBjYW4gcmVzdWx0IGluIHVuZGVmaW5lZCBiZWhhdmlvci4KKyAgICBleHBsaWNpdCBFbnRyeUl0ZXJhdG9yKGNvbnN0IHVpbnQ4X3QgKmVudHJ5KTsKKyAgICBFbnRyeUl0ZXJhdG9yKGNvbnN0IEVudHJ5SXRlcmF0b3IgJm90aGVyKTsKKworICAgIC8vIGRlcmVmZXJlbmNlIHVuZGVybHlpbmcgZW50cnkKKyAgICBjb25zdCBlbnRyeSYgICAgb3BlcmF0b3IqKCkgY29uc3Q7CisgICAgY29uc3QgZW50cnkqICAgIG9wZXJhdG9yLT4oKSBjb25zdDsKKyAgICAvLyBhZHZhbmNlIHRvIG5leHQgZW50cnkKKyAgICBFbnRyeUl0ZXJhdG9yJiAgb3BlcmF0b3IrKygpOyAvLyArK2kKKyAgICAvLyBiYWNrIHRvIHByZXZpb3VzIGVudHJ5CisgICAgRW50cnlJdGVyYXRvciYgIG9wZXJhdG9yLS0oKTsgLy8gLS1pCisgICAgLy8gcmV0dXJucyBhbiBFbnRyeUl0ZXJhdG9yIGNvcnJlc3BvbmRpbmcgdG8gdGhlIG5leHQgZW50cnkKKyAgICBFbnRyeUl0ZXJhdG9yICAgbmV4dCgpIGNvbnN0OworICAgIC8vIHJldHVybnMgYW4gRW50cnlJdGVyYXRvciBjb3JyZXNwb25kaW5nIHRvIHRoZSBwcmV2aW91cyBlbnRyeQorICAgIEVudHJ5SXRlcmF0b3IgICBwcmV2KCkgY29uc3Q7CisgICAgYm9vbCAgICAgICAgICAgIG9wZXJhdG9yIT0oY29uc3QgRW50cnlJdGVyYXRvciAmb3RoZXIpIGNvbnN0OworICAgIGludCAgICAgICAgICAgICBvcGVyYXRvci0oY29uc3QgRW50cnlJdGVyYXRvciAmb3RoZXIpIGNvbnN0OworCisgICAgYm9vbCAgICAgICAgICAgIGhhc0NvbnNpc3RlbnRMZW5ndGgoKSBjb25zdDsKKyAgICB2b2lkICAgICAgICAgICAgY29weVRvKHN0ZDo6dW5pcXVlX3B0cjxhdWRpb191dGlsc19maWZvX3dyaXRlcj4gJmRzdCkgY29uc3Q7CisgICAgdm9pZCAgICAgICAgICAgIGNvcHlEYXRhKHVpbnQ4X3QgKmRzdCkgY29uc3Q7CisKKyAgICAvLyBtZW1jcHkgcHJlZmVycmVkIHRvIHJlaW50ZXJwcmV0X2Nhc3QgdG8gYXZvaWQgcG90ZW50aWFsbHkgdW5zdXBwb3J0ZWQKKyAgICAvLyB1bmFsaWduZWQgbWVtb3J5IGFjY2Vzcy4KKyNpZiAwCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4KKyAgICBpbmxpbmUgY29uc3QgVCYgcGF5bG9hZCgpIHsKKyAgICAgICAgcmV0dXJuICpyZWludGVycHJldF9jYXN0PGNvbnN0IFQgKj4obVB0ciArIG9mZnNldG9mKGVudHJ5LCBkYXRhKSk7CisgICAgfQorI2Vsc2UKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgorICAgIGlubGluZSBUIHBheWxvYWQoKSBjb25zdCB7CisgICAgICAgIHN0YXRpY19hc3NlcnQoc3RkOjppc190cml2aWFsbHlfY29weWFibGU8VD46OnZhbHVlCisgICAgICAgICAgICAgICAgJiYgIXN0ZDo6aXNfcG9pbnRlcjxUPjo6dmFsdWUsCisgICAgICAgICAgICAgICAgIk5CTG9nOjpFbnRyeUl0ZXJhdG9yIHBheWxvYWQgbXVzdCBiZSB0cml2aWFsbHkgY29weWFibGUsIG5vbi1wb2ludGVyIHR5cGUuIik7CisgICAgICAgIFQgcGF5bG9hZDsKKyAgICAgICAgbWVtY3B5KCZwYXlsb2FkLCBtUHRyICsgb2Zmc2V0b2YoZW50cnksIGRhdGEpLCBzaXplb2YocGF5bG9hZCkpOworICAgICAgICByZXR1cm4gcGF5bG9hZDsKKyAgICB9CisjZW5kaWYKKworICAgIGlubGluZSBvcGVyYXRvciBjb25zdCB1aW50OF90KigpIGNvbnN0IHsKKyAgICAgICAgcmV0dXJuIG1QdHI7CisgICAgfQorCitwcml2YXRlOgorICAgIGNvbnN0IHVpbnQ4X3QgICptUHRyOyAgIC8vIFNob3VsZCBub3QgYmUgbnVsbHB0ciBleGNlcHQgZm9yIGR1bW15IGluaXRpYWxpemF0aW9uCit9OworCisvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vIFRoZSBmb2xsb3dpbmcgY2xhc3NlcyBhcmUgdXNlZCBmb3IgbWVyZ2luZyBpbnRvIHRoZSBNZXJnZXIncyBidWZmZXIuCisKK2NsYXNzIEFic3RyYWN0RW50cnkgeworcHVibGljOgorICAgIHZpcnR1YWwgfkFic3RyYWN0RW50cnkoKSB7fQorCisgICAgLy8gYnVpbGQgY29uY3JldGUgZW50cnkgb2YgYXBwcm9wcmlhdGUgY2xhc3MgZnJvbSBwdHIuCisgICAgc3RhdGljIHN0ZDo6dW5pcXVlX3B0cjxBYnN0cmFjdEVudHJ5PiBidWlsZEVudHJ5KGNvbnN0IHVpbnQ4X3QgKnB0cik7CisKKyAgICAvLyBnZXQgZm9ybWF0IGVudHJ5IHRpbWVzdGFtcAorICAgIHZpcnR1YWwgaW50NjRfdCAgICAgICB0aW1lc3RhbXAoKSBjb25zdCA9IDA7CisKKyAgICAvLyBnZXQgZm9ybWF0IGVudHJ5J3MgdW5pcXVlIGlkCisgICAgdmlydHVhbCBsb2dfaGFzaF90ICAgIGhhc2goKSBjb25zdCA9IDA7CisKKyAgICAvLyBlbnRyeSdzIGF1dGhvciBpbmRleCAoLTEgaWYgbm9uZSBwcmVzZW50KQorICAgIC8vIGEgTWVyZ2VyIGhhcyBhIHZlY3RvciBvZiBSZWFkZXJzLCBhdXRob3Igc2ltcGx5IHBvaW50cyB0byB0aGUgaW5kZXggb2YgdGhlCisgICAgLy8gUmVhZGVyIHRoYXQgb3JpZ2luYXRlZCB0aGUgZW50cnkKKyAgICAvLyBUT0RPIGNvbnNpZGVyIGNoYW5naW5nIHRvIHVpbnQzMl90CisgICAgdmlydHVhbCBpbnQgICAgICAgICAgIGF1dGhvcigpIGNvbnN0ID0gMDsKKworICAgIC8vIGNvcHkgZW50cnksIGFkZGluZyBhdXRob3IgYmVmb3JlIHRpbWVzdGFtcCwgcmV0dXJucyBpdGVyYXRvciB0byBlbmQgb2YgZW50cnkKKyAgICB2aXJ0dWFsIEVudHJ5SXRlcmF0b3IgY29weVdpdGhBdXRob3Ioc3RkOjp1bmlxdWVfcHRyPGF1ZGlvX3V0aWxzX2ZpZm9fd3JpdGVyPiAmZHN0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgYXV0aG9yKSBjb25zdCA9IDA7CisKK3Byb3RlY3RlZDoKKyAgICAvLyBFbnRyeSBzdGFydGluZyBpbiB0aGUgZ2l2ZW4gcG9pbnRlciwgd2hpY2ggc2hhbGwgbm90IGJlIG51bGxwdHIuCisgICAgZXhwbGljaXQgQWJzdHJhY3RFbnRyeShjb25zdCB1aW50OF90ICplbnRyeSkgOiBtRW50cnkoZW50cnkpIHt9CisgICAgLy8gY29waWVzIG9yZGluYXJ5IGVudHJ5IGZyb20gc3JjIHRvIGRzdCwgYW5kIHJldHVybnMgbGVuZ3RoIG9mIGVudHJ5CisgICAgLy8gc2l6ZV90ICAgICAgY29weUVudHJ5KGF1ZGlvX3V0aWxzX2ZpZm9fd3JpdGVyICpkc3QsIGNvbnN0IGl0ZXJhdG9yICZpdCk7CisgICAgY29uc3QgdWludDhfdCAqIGNvbnN0IG1FbnRyeTsKK307CisKKy8vIEFQSSBmb3IgaGFuZGxpbmcgZm9ybWF0IGVudHJ5IG9wZXJhdGlvbnMKKworLy8gYSBmb3JtYXR0ZWQgZW50cnkgaGFzIHRoZSBmb2xsb3dpbmcgc3RydWN0dXJlOgorLy8gICAgKiBGTVRfU1RBUlQgZW50cnksIGNvbnRhaW5pbmcgdGhlIGZvcm1hdCBzdHJpbmcKKy8vICAgICogVElNRVNUQU1QIGVudHJ5CisvLyAgICAqIEhBU0ggZW50cnkKKy8vICAgICogYXV0aG9yIGVudHJ5IG9mIHRoZSB0aHJlYWQgdGhhdCBnZW5lcmF0ZWQgaXQgKG9wdGlvbmFsLCBwcmVzZW50IGluIG1lcmdlZCBsb2cpCisvLyAgICAqIGZvcm1hdCBhcmcxCisvLyAgICAqIGZvcm1hdCBhcmcyCisvLyAgICAqIC4uLgorLy8gICAgKiBGTVRfRU5EIGVudHJ5CitjbGFzcyBGb3JtYXRFbnRyeSA6IHB1YmxpYyBBYnN0cmFjdEVudHJ5IHsKK3B1YmxpYzoKKyAgICAvLyBleHBsaWNpdCBGb3JtYXRFbnRyeShjb25zdCBFbnRyeUl0ZXJhdG9yICZpdCk7CisgICAgZXhwbGljaXQgRm9ybWF0RW50cnkoY29uc3QgdWludDhfdCAqcHRyKSA6IEFic3RyYWN0RW50cnkocHRyKSB7fQorICAgIH5Gb3JtYXRFbnRyeSgpIG92ZXJyaWRlID0gZGVmYXVsdDsKKworICAgIEVudHJ5SXRlcmF0b3IgYmVnaW4oKSBjb25zdDsKKworICAgIC8vIEVudHJ5J3MgZm9ybWF0IHN0cmluZworICAgIGNvbnN0IGNoYXIqICAgZm9ybWF0U3RyaW5nKCkgY29uc3Q7CisKKyAgICAvLyBFbnJ0eSdzIGZvcm1hdCBzdHJpbmcgbGVuZ3RoCisgICAgc2l6ZV90ICAgICAgICBmb3JtYXRTdHJpbmdMZW5ndGgoKSBjb25zdDsKKworICAgIC8vIEZvcm1hdCBhcmd1bWVudHMgKGV4Y2x1ZGluZyBmb3JtYXQgc3RyaW5nLCB0aW1lc3RhbXAgYW5kIGF1dGhvcikKKyAgICBFbnRyeUl0ZXJhdG9yIGFyZ3MoKSBjb25zdDsKKworICAgIC8vIGdldCBmb3JtYXQgZW50cnkgdGltZXN0YW1wCisgICAgaW50NjRfdCAgICAgICB0aW1lc3RhbXAoKSBjb25zdCBvdmVycmlkZTsKKworICAgIC8vIGdldCBmb3JtYXQgZW50cnkncyB1bmlxdWUgaWQKKyAgICBsb2dfaGFzaF90ICAgIGhhc2goKSBjb25zdCBvdmVycmlkZTsKKworICAgIC8vIGVudHJ5J3MgYXV0aG9yIGluZGV4ICgtMSBpZiBub25lIHByZXNlbnQpCisgICAgLy8gYSBNZXJnZXIgaGFzIGEgdmVjdG9yIG9mIFJlYWRlcnMsIGF1dGhvciBzaW1wbHkgcG9pbnRzIHRvIHRoZSBpbmRleCBvZiB0aGUKKyAgICAvLyBSZWFkZXIgdGhhdCBvcmlnaW5hdGVkIHRoZSBlbnRyeQorICAgIGludCAgICAgICAgICAgYXV0aG9yKCkgY29uc3Qgb3ZlcnJpZGU7CisKKyAgICAvLyBjb3B5IGVudHJ5LCBhZGRpbmcgYXV0aG9yIGJlZm9yZSB0aW1lc3RhbXAsIHJldHVybnMgc2l6ZSBvZiBvcmlnaW5hbCBlbnRyeQorICAgIEVudHJ5SXRlcmF0b3IgY29weVdpdGhBdXRob3Ioc3RkOjp1bmlxdWVfcHRyPGF1ZGlvX3V0aWxzX2ZpZm9fd3JpdGVyPiAmZHN0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGF1dGhvcikgY29uc3Qgb3ZlcnJpZGU7Cit9OworCitjbGFzcyBIaXN0b2dyYW1FbnRyeSA6IHB1YmxpYyBBYnN0cmFjdEVudHJ5IHsKK3B1YmxpYzoKKyAgICBleHBsaWNpdCBIaXN0b2dyYW1FbnRyeShjb25zdCB1aW50OF90ICpwdHIpIDogQWJzdHJhY3RFbnRyeShwdHIpIHt9CisgICAgfkhpc3RvZ3JhbUVudHJ5KCkgb3ZlcnJpZGUgPSBkZWZhdWx0OworCisgICAgaW50NjRfdCAgICAgICB0aW1lc3RhbXAoKSBjb25zdCBvdmVycmlkZTsKKworICAgIGxvZ19oYXNoX3QgICAgaGFzaCgpIGNvbnN0IG92ZXJyaWRlOworCisgICAgaW50ICAgICAgICAgICBhdXRob3IoKSBjb25zdCBvdmVycmlkZTsKKworICAgIEVudHJ5SXRlcmF0b3IgY29weVdpdGhBdXRob3Ioc3RkOjp1bmlxdWVfcHRyPGF1ZGlvX3V0aWxzX2ZpZm9fd3JpdGVyPiAmZHN0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGF1dGhvcikgY29uc3Qgb3ZlcnJpZGU7Cit9OworCit9ICAgLy8gbmFtZXNwYWNlIE5CTG9nCit9ICAgLy8gbmFtZXNwYWNlIGFuZHJvaWQKKworI2VuZGlmICAvLyBBTkRST0lEX01FRElBX05CTE9HX0VOVFJZX0gKZGlmZiAtLWdpdCBhL21lZGlhL2xpYm5ibG9nL2luY2x1ZGUvbWVkaWEvbmJsb2cvRXZlbnRzLmggYi9tZWRpYS9saWJuYmxvZy9pbmNsdWRlL21lZGlhL25ibG9nL0V2ZW50cy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFjYTRmZTgKLS0tIC9kZXYvbnVsbAorKysgYi9tZWRpYS9saWJuYmxvZy9pbmNsdWRlL21lZGlhL25ibG9nL0V2ZW50cy5oCkBAIC0wLDAgKzEsMTU2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE4IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KKworI2lmbmRlZiBBTkRST0lEX01FRElBX05CTE9HX0VWRU5UU19ICisjZGVmaW5lIEFORFJPSURfTUVESUFfTkJMT0dfRVZFTlRTX0gKKworI2luY2x1ZGUgPHN0ZGRlZi5oPgorI2luY2x1ZGUgPHN0ZGludC5oPgorI2luY2x1ZGUgPHN5c3RlbS9hdWRpby5oPgorI2luY2x1ZGUgPHR5cGVfdHJhaXRzPgorCituYW1lc3BhY2UgYW5kcm9pZCB7CituYW1lc3BhY2UgTkJMb2cgeworCisvLyBUT0RPIGhhdmUgYSBjb21tZW50IHNvbWV3aGVyZSBleHBsYWluaW5nIHRoZSB3aG9sZSBwcm9jZXNzIGZvciBhZGRpbmcgYSBuZXcgRVZFTlRfCisKKy8vIE5CTG9nIEV2ZW50IHR5cGVzLiBUaGUgRXZlbnRzIGFyZSBuYW1lZCB0byBwcm92aWRlIGNvbnRleHR1YWwgbWVhbmluZyBmb3Igd2hhdCBpcyBsb2dnZWQuCisvLyBJZiBhZGRpbmcgYSBuZXcgc3RhbmRhbG9uZSBFdmVudCBoZXJlLCB1cGRhdGUgdGhlIGV2ZW50LXRvLXR5cGUgbWFwcGluZyBieSBhZGRpbmcgYQorLy8gTUFQX0VWRU5UX1RPX1RZUEUgc3RhdGVtZW50IGJlbG93LgorLy8gWFhYIE5vdGUgdGhhdCBhcyBvZiB0aGUgY3VycmVudCBkZXNpZ24sIEV2ZW50cyBzaG91bGQgbm90IGJlIHJlbnVtYmVyZWQgKGkuZS4gcmVvcmRlcmVkKQorLy8gaWYgdGhleSBldmVyIGxlYXZlIG1lbW9yeSAoZm9yIGV4YW1wbGUsIHdyaXR0ZW4gdG8gZmlsZSwgdXBsb2FkZWQgdG8gY2xvdWQsIGV0Yy4pLgorLy8gVE9ETyBtYWtlIHNvbWUgc29ydCBvZiBpbnRlcmZhY2UgdG8ga2VlcCB0aGVzZSAiY29udHJhY3QiIGNvbnN0YW50cy4KK2VudW0gRXZlbnQgOiB1aW50OF90IHsKKyAgICBFVkVOVF9SRVNFUlZFRCwKKyAgICBFVkVOVF9TVFJJTkcsICAgICAgICAgICAgICAgLy8gQVNDSUkgc3RyaW5nLCBub3QgTlVMLXRlcm1pbmF0ZWQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gVE9ETzogbWFrZSB0aW1lc3RhbXAgb3B0aW9uYWwKKyAgICBFVkVOVF9USU1FU1RBTVAsICAgICAgICAgICAgLy8gY2xvY2tfZ2V0dGltZShDTE9DS19NT05PVE9OSUMpCisKKyAgICAvLyBUeXBlcyBmb3IgRm9ybWF0IEVudHJ5LCBpLmUuIGZvcm1hdHRlZCBlbnRyeQorICAgIEVWRU5UX0ZNVF9TVEFSVCwgICAgICAgICAgICAvLyBsb2dGb3JtYXQgc3RhcnQgZXZlbnQ6IGVudHJ5IGluY2x1ZGVzIGZvcm1hdCBzdHJpbmcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGZvbGxvd2luZyBlbnRyaWVzIGNvbnRhaW4gZm9ybWF0IGFyZ3VtZW50cworICAgIC8vIGZvcm1hdCBhcmd1bWVudHMKKyAgICBFVkVOVF9GTVRfQVVUSE9SLCAgICAgICAgICAgLy8gYXV0aG9yIGluZGV4IChwcmVzZW50IGluIG1lcmdlZCBsb2dzKSB0cmFja3MgZW50cnkncworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBvcmlnaW5hbCBsb2cKKyAgICBFVkVOVF9GTVRfRkxPQVQsICAgICAgICAgICAgLy8gZmxvYXRpbmcgcG9pbnQgdmFsdWUgZW50cnkKKyAgICBFVkVOVF9GTVRfSEFTSCwgICAgICAgICAgICAgLy8gdW5pcXVlIEhBU0ggb2YgbG9nIG9yaWdpbiwgb3JpZ2luYXRlcyBmcm9tIGhhc2ggb2YgZmlsZSBuYW1lCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGFuZCBsaW5lIG51bWJlcgorICAgIEVWRU5UX0ZNVF9JTlRFR0VSLCAgICAgICAgICAvLyBpbnRlZ2VyIHZhbHVlIGVudHJ5CisgICAgRVZFTlRfRk1UX1BJRCwgICAgICAgICAgICAgIC8vIHByb2Nlc3MgSUQgYW5kIHByb2Nlc3MgbmFtZQorICAgIEVWRU5UX0ZNVF9TVFJJTkcsICAgICAgICAgICAvLyBzdHJpbmcgdmFsdWUgZW50cnkKKyAgICBFVkVOVF9GTVRfVElNRVNUQU1QLCAgICAgICAgLy8gdGltZXN0YW1wIHZhbHVlIGVudHJ5CisgICAgLy8gZW5kIG9mIGZvcm1hdCBhcmd1bWVudHMKKyAgICBFVkVOVF9GTVRfRU5ELCAgICAgICAgICAgICAgLy8gZW5kIG9mIGxvZ0Zvcm1hdCBhcmd1bWVudCBsaXN0CisKKyAgICAvLyBUeXBlcyBmb3Igd2FrZXVwIHRpbWVzdGFtcCBoaXN0b2dyYW1zCisgICAgRVZFTlRfQVVESU9fU1RBVEUsICAgICAgICAgIC8vIGF1ZGlvIG9uL29mZiBldmVudDogbG9nZ2VkIG9uIEZhc3RNaXhlcjo6b25TdGF0ZUNoYW5nZSBjYWxsCisgICAgRVZFTlRfSElTVE9HUkFNX0VOVFJZX1RTLCAgIC8vIHNpbmdsZSBkYXR1bSBmb3IgdGltZXN0YW1wIGhpc3RvZ3JhbQorCisgICAgLy8gVHlwZXMgcmVwcmVzZW50aW5nIGF1ZGlvIHBlcmZvcm1hbmNlIG1ldHJpY3MKKyAgICBFVkVOVF9MQVRFTkNZLCAgICAgICAgICAgICAgLy8gZGlmZmVyZW5jZSBiZXR3ZWVuIGZyYW1lcyBwcmVzZW50ZWQgYnkgSEFMIGFuZCBmcmFtZXMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gd3JpdHRlbiB0byBIQUwgb3V0cHV0IHNpbmssIGRpdmlkZWQgYnkgc2FtcGxlIHJhdGUuCisgICAgRVZFTlRfT1ZFUlJVTiwgICAgICAgICAgICAgIC8vIHByZWRpY3RlZCB0aHJlYWQgb3ZlcnJ1biBldmVudCB0aW1lc3RhbXAKKyAgICBFVkVOVF9USFJFQURfSU5GTywgICAgICAgICAgLy8gc2VlIHRocmVhZF9pbmZvX3QgYmVsb3cKKyAgICBFVkVOVF9VTkRFUlJVTiwgICAgICAgICAgICAgLy8gcHJlZGljdGVkIHRocmVhZCB1bmRlcnJ1biBldmVudCB0aW1lc3RhbXAKKyAgICBFVkVOVF9XQVJNVVBfVElNRSwgICAgICAgICAgLy8gdGhyZWFkIHdhcm11cCB0aW1lCisgICAgRVZFTlRfV09SS19USU1FLCAgICAgICAgICAgIC8vIHRoZSB0aW1lIGEgdGhyZWFkIHRha2VzIHRvIGRvIHdvcmssIGUuZy4gcmVhZCwgd3JpdGUsIGV0Yy4KKyAgICBFVkVOVF9USFJFQURfUEFSQU1TLCAgICAgICAgLy8gc2VlIHRocmVhZF9wYXJhbXNfdCBiZWxvdworCisgICAgRVZFTlRfVVBQRVJfQk9VTkQsICAgICAgICAgIC8vIHRvIGNoZWNrIGZvciBpbnZhbGlkIGV2ZW50cworfTsKKworLy8gTkJMb2cgY3VzdG9tLWRlZmluZWQgc3RydWN0cy4gU29tZSBOQkxvZyBFdmVudCB0eXBlcyBtYXAgdG8gdGhlc2Ugc3RydWN0cy4KKwordXNpbmcgbG9nX2hhc2hfdCA9IHVpbnQ2NF90OworCisvLyB1c2VkIGZvciBFVkVOVF9ISVNUT0dSQU1fRU5UUllfVFMgKG5vdCBtYXBwZWQpCitzdHJ1Y3QgSGlzdFRzRW50cnkgeworICAgIGxvZ19oYXNoX3QgaGFzaDsKKyAgICBpbnQ2NF90IHRzOworfTsgLy9UT0RPIF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOworCisvLyB1c2VkIGZvciBFVkVOVF9ISVNUT0dSQU1fRU5UUllfVFMgKG5vdCBtYXBwZWQpCitzdHJ1Y3QgSGlzdFRzRW50cnlXaXRoQXV0aG9yIHsKKyAgICBsb2dfaGFzaF90IGhhc2g7CisgICAgaW50NjRfdCB0czsKKyAgICBpbnQgYXV0aG9yOworfTsgLy9UT0RPIF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOworCitlbnVtIFRocmVhZFR5cGUgeworICAgIFVOS05PV04sCisgICAgTUlYRVIsCisgICAgQ0FQVFVSRSwKKyAgICBGQVNUTUlYRVIsCisgICAgRkFTVENBUFRVUkUsCit9OworCitpbmxpbmUgY29uc3QgY2hhciAqdGhyZWFkVHlwZVRvU3RyaW5nKFRocmVhZFR5cGUgdHlwZSkgeworICAgIHN3aXRjaCAodHlwZSkgeworICAgIGNhc2UgTUlYRVI6CisgICAgICAgIHJldHVybiAiTUlYRVIiOworICAgIGNhc2UgQ0FQVFVSRToKKyAgICAgICAgcmV0dXJuICJDQVBUVVJFIjsKKyAgICBjYXNlIEZBU1RNSVhFUjoKKyAgICAgICAgcmV0dXJuICJGQVNUTUlYRVIiOworICAgIGNhc2UgRkFTVENBUFRVUkU6CisgICAgICAgIHJldHVybiAiRkFTVENBUFRVUkUiOworICAgIGNhc2UgVU5LTk9XTjoKKyAgICBkZWZhdWx0OgorICAgICAgICByZXR1cm4gIlVOS05PV04iOworICAgIH0KK30KKworLy8gbWFwcGVkIGZyb20gRVZFTlRfVEhSRUFEX0lORk8KKy8vIFRoZXNlIGZpZWxkcyBhbHdheXMgc3RheSB0aGUgc2FtZSB0aHJvdWdob3V0IGEgdGhyZWFkJ3MgbGlmZXRpbWUgYW5kCisvLyBzaG91bGQgb25seSBuZWVkIHRvIGJlIGxvZ2dlZCBvbmNlIHVwb24gdGhyZWFkIGluaXRpYWxpemF0aW9uLgorLy8gVGhlcmUgaXMgY3VycmVudGx5IG5vIHJlY292ZXJ5IG1lY2hhbmlzbSBpZiB0aGUgbG9nIGV2ZW50IGNvcnJlc3BvbmRpbmcKKy8vIHRvIHRoaXMgdHlwZSBpcyBsb3N0LgorLy8gVE9ETyBhZGQgdGhpcyBpbmZvcm1hdGlvbiB3aGVuIGFkZGluZyBhIHJlYWRlciB0byBNZWRpYUxvZ1NlcnZpY2U/CitzdHJ1Y3QgdGhyZWFkX2luZm9fdCB7CisgICAgYXVkaW9faW9faGFuZGxlX3QgaWQgPSAtMTsgICAgICAvLyBUaHJlYWQgSS9PIGhhbmRsZQorICAgIFRocmVhZFR5cGUgdHlwZSA9IFVOS05PV047ICAgICAgLy8gU2VlIGVudW0gVGhyZWFkVHlwZSBhYm92ZQorfTsKKworLy8gbWFwcGVkIGZyb20gRVZFTlRfVEhSRUFEX1BBUkFNUworLy8gVGhlc2UgZmllbGRzIGFyZSBub3QgbmVjZXNzYXJpbHkgY29uc3RhbnQgdGhyb3VnaG91dCBhIHRocmVhZCdzIGxpZmV0aW1lIGFuZAorLy8gY2FuIGJlIGxvZ2dlZCB3aGVuZXZlciBhIHRocmVhZCByZWNlaXZlcyBuZXcgY29uZmlndXJhdGlvbnMgb3IgcGFyYW1ldGVycy4KK3N0cnVjdCB0aHJlYWRfcGFyYW1zX3QgeworICAgIHNpemVfdCBmcmFtZUNvdW50ID0gMDsgICAgICAgICAgLy8gbnVtYmVyIG9mIGZyYW1lcyBwZXIgcmVhZCBvciB3cml0ZSBidWZmZXIKKyAgICB1bnNpZ25lZCBzYW1wbGVSYXRlID0gMDsgICAgICAgIC8vIGluIGZyYW1lcyBwZXIgc2Vjb25kCit9OworCit0ZW1wbGF0ZSA8RXZlbnQgRT4gc3RydWN0IGdldF9tYXBwZWQ7CisjZGVmaW5lIE1BUF9FVkVOVF9UT19UWVBFKEUsIFQpIFwKK3RlbXBsYXRlPD4gc3RydWN0IGdldF9tYXBwZWQ8RT4geyBcCisgICAgc3RhdGljX2Fzc2VydChzdGQ6OmlzX3RyaXZpYWxseV9jb3B5YWJsZTxUPjo6dmFsdWUgXAorICAgICAgICAgICAgJiYgIXN0ZDo6aXNfcG9pbnRlcjxUPjo6dmFsdWUsIFwKKyAgICAgICAgICAgICJOQkxvZzo6RXZlbnQgbXVzdCBtYXAgdG8gdHJpdmlhbGx5IGNvcHlhYmxlLCBub24tcG9pbnRlciB0eXBlLiIpOyBcCisgICAgdHlwZWRlZiBUIHR5cGU7IFwKK30KKworLy8gTWFwcyBhbiBOQkxvZyBFdmVudCB0eXBlIHRvIGEgQysrIFBPRCB0eXBlLgorTUFQX0VWRU5UX1RPX1RZUEUoRVZFTlRfTEFURU5DWSwgZG91YmxlKTsKK01BUF9FVkVOVF9UT19UWVBFKEVWRU5UX09WRVJSVU4sIGludDY0X3QpOworTUFQX0VWRU5UX1RPX1RZUEUoRVZFTlRfVEhSRUFEX0lORk8sIHRocmVhZF9pbmZvX3QpOworTUFQX0VWRU5UX1RPX1RZUEUoRVZFTlRfVU5ERVJSVU4sIGludDY0X3QpOworTUFQX0VWRU5UX1RPX1RZUEUoRVZFTlRfV0FSTVVQX1RJTUUsIGRvdWJsZSk7CitNQVBfRVZFTlRfVE9fVFlQRShFVkVOVF9XT1JLX1RJTUUsIGludDY0X3QpOworTUFQX0VWRU5UX1RPX1RZUEUoRVZFTlRfVEhSRUFEX1BBUkFNUywgdGhyZWFkX3BhcmFtc190KTsKKworfSAgIC8vIG5hbWVzcGFjZSBOQkxvZworfSAgIC8vIG5hbWVzcGFjZSBhbmRyb2lkCisKKyNlbmRpZiAgLy8gQU5EUk9JRF9NRURJQV9OQkxPR19FVkVOVFNfSApkaWZmIC0tZ2l0IGEvbWVkaWEvbGlibmJsb2cvaW5jbHVkZS9tZWRpYS9uYmxvZy9NZXJnZXIuaCBiL21lZGlhL2xpYm5ibG9nL2luY2x1ZGUvbWVkaWEvbmJsb2cvTWVyZ2VyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2RhODUyMQotLS0gL2Rldi9udWxsCisrKyBiL21lZGlhL2xpYm5ibG9nL2luY2x1ZGUvbWVkaWEvbmJsb2cvTWVyZ2VyLmgKQEAgLTAsMCArMSwxNTcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTggVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworCisjaWZuZGVmIEFORFJPSURfTUVESUFfTkJMT0dfTUVSR0VSX0gKKyNkZWZpbmUgQU5EUk9JRF9NRURJQV9OQkxPR19NRVJHRVJfSAorCisjaW5jbHVkZSA8bWVtb3J5PgorI2luY2x1ZGUgPHN0ZGRlZi5oPgorI2luY2x1ZGUgPHN0ZGludC5oPgorI2luY2x1ZGUgPHZlY3Rvcj4KKworI2luY2x1ZGUgPGF1ZGlvX3V0aWxzL2ZpZm8uaD4KKyNpbmNsdWRlIDxtZWRpYS9uYmxvZy9QZXJmb3JtYW5jZUFuYWx5c2lzLmg+CisjaW5jbHVkZSA8bWVkaWEvbmJsb2cvUmVhZGVyLmg+CisjaW5jbHVkZSA8dXRpbHMvQ29uZGl0aW9uLmg+CisjaW5jbHVkZSA8dXRpbHMvTXV0ZXguaD4KKyNpbmNsdWRlIDx1dGlscy9SZWZCYXNlLmg+CisjaW5jbHVkZSA8dXRpbHMvVGhyZWFkLmg+CisjaW5jbHVkZSA8dXRpbHMvVGltZXJzLmg+CisjaW5jbHVkZSA8dXRpbHMvVmVjdG9yLmg+CisKK25hbWVzcGFjZSBhbmRyb2lkIHsKKworY2xhc3MgU3RyaW5nMTY7CitjbGFzcyBTdHJpbmc4OworCituYW1lc3BhY2UgTkJMb2cgeworCitzdHJ1Y3QgU2hhcmVkOworCisvLyBUT0RPIHVwZGF0ZSBjb21tZW50cyB0byByZWZsZWN0IGN1cnJlbnQgZnVuY3Rpb25hbGl0aWVzCisKKy8vIFRoaXMgY2xhc3MgaXMgdXNlZCB0byByZWFkIGRhdGEgZnJvbSBlYWNoIHRocmVhZCdzIGluZGl2aWR1YWwgRklGTyBpbiBzaGFyZWQgbWVtb3J5CisvLyBhbmQgd3JpdGUgaXQgdG8gYSBzaW5nbGUgRklGTyBpbiBsb2NhbCBtZW1vcnkuCitjbGFzcyBNZXJnZXIgOiBwdWJsaWMgUmVmQmFzZSB7CitwdWJsaWM6CisgICAgTWVyZ2VyKGNvbnN0IHZvaWQgKnNoYXJlZCwgc2l6ZV90IHNpemUpOworCisgICAgfk1lcmdlcigpIG92ZXJyaWRlID0gZGVmYXVsdDsKKworICAgIHZvaWQgYWRkUmVhZGVyKGNvbnN0IHNwPE5CTG9nOjpSZWFkZXI+ICZyZWFkZXIpOworICAgIC8vIFRPRE8gYWRkIHJlbW92ZVJlYWRlcgorICAgIHZvaWQgbWVyZ2UoKTsKKworICAgIC8vIEZJWE1FIFRoaXMgaXMgcmV0dXJuaW5nIGEgcmVmZXJlbmNlIHRvIGEgc2hhcmVkIHZhcmlhYmxlIHRoYXQgbmVlZHMgYSBsb2NrCisgICAgY29uc3Qgc3RkOjp2ZWN0b3I8c3A8UmVhZGVyPj4mIGdldFJlYWRlcnMoKSBjb25zdDsKKworcHJpdmF0ZToKKyAgICAvLyB2ZWN0b3Igb2YgdGhlIHJlYWRlcnMgdGhlIG1lcmdlciBpcyBzdXBwb3NlZCB0byBtZXJnZSBmcm9tLgorICAgIC8vIGV2ZXJ5IHJlYWRlciByZWFkcyBmcm9tIGEgd3JpdGVyJ3MgYnVmZmVyCisgICAgLy8gRklYTUUgTmVlZHMgdG8gYmUgcHJvdGVjdGVkIGJ5IGEgbG9jaworICAgIHN0ZDo6dmVjdG9yPHNwPFJlYWRlcj4+IG1SZWFkZXJzOworCisgICAgU2hhcmVkICogY29uc3QgbVNoYXJlZDsgLy8gcmF3IHBvaW50ZXIgdG8gc2hhcmVkIG1lbW9yeQorICAgIHN0ZDo6dW5pcXVlX3B0cjxhdWRpb191dGlsc19maWZvPiBtRmlmbzsgLy8gRklGTyBpdHNlbGYKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8YXVkaW9fdXRpbHNfZmlmb193cml0ZXI+IG1GaWZvV3JpdGVyOyAvLyB1c2VkIHRvIHdyaXRlIHRvIEZJRk8KK307CisKKy8vIFRoaXMgY2xhc3MgaGFzIGEgcG9pbnRlciB0byB0aGUgRklGTyBpbiBsb2NhbCBtZW1vcnkgd2hpY2ggc3RvcmVzIHRoZSBtZXJnZWQKKy8vIGRhdGEgY29sbGVjdGVkIGJ5IE5CTG9nOjpNZXJnZXIgZnJvbSBhbGwgUmVhZGVycy4gSXQgaXMgdXNlZCB0byBwcm9jZXNzCisvLyB0aGlzIGRhdGEgYW5kIHdyaXRlIHRoZSByZXN1bHQgdG8gUGVyZm9ybWFuY2VBbmFseXNpcy4KK2NsYXNzIE1lcmdlUmVhZGVyIDogcHVibGljIFJlYWRlciB7CitwdWJsaWM6CisgICAgTWVyZ2VSZWFkZXIoY29uc3Qgdm9pZCAqc2hhcmVkLCBzaXplX3Qgc2l6ZSwgTWVyZ2VyICZtZXJnZXIpOworCisgICAgLy8gcHJvY2VzcyBhIHBhcnRpY3VsYXIgc25hcHNob3Qgb2YgdGhlIHJlYWRlcgorICAgIHZvaWQgcHJvY2Vzc1NuYXBzaG90KFNuYXBzaG90ICZzbmFwLCBpbnQgYXV0aG9yKTsKKworICAgIC8vIGNhbGwgZ2V0U25hcHNob3Qgb2YgdGhlIGNvbnRlbnQgb2YgdGhlIHJlYWRlcidzIGJ1ZmZlciBhbmQgcHJvY2VzcyB0aGUgZGF0YQorICAgIHZvaWQgZ2V0QW5kUHJvY2Vzc1NuYXBzaG90KCk7CisKKyAgICAvLyBjaGVjayBmb3IgcGVyaW9kaWMgcHVzaCBvZiBwZXJmb3JtYW5jZSBkYXRhIHRvIG1lZGlhIG1ldHJpY3MsIGFuZCBwZXJmb3JtCisgICAgLy8gdGhlIHNlbmQgaWYgaXQgaXMgdGltZSB0byBkbyBzby4KKyAgICB2b2lkIGNoZWNrUHVzaFRvTWVkaWFNZXRyaWNzKCk7CisKKyAgICB2b2lkIGR1bXAoaW50IGZkLCBjb25zdCBWZWN0b3I8U3RyaW5nMTY+JiBhcmdzKTsKKworcHJpdmF0ZToKKyAgICAvLyBGSVhNRSBOZWVkcyB0byBiZSBwcm90ZWN0ZWQgYnkgYSBsb2NrLAorICAgIC8vICAgICAgIGJlY2F1c2UgZXZlbiB0aG91Z2ggb3VyIHVzZSBvZiBpdCBpcyByZWFkLW9ubHkgdGhlcmUgbWF5IGJlIGFzeW5jaHJvbm91cyB1cGRhdGVzCisgICAgLy8gVGhlIG9iamVjdCBpcyBvd25lZCBieSB0aGUgTWVyZ2VyIGNsYXNzLgorICAgIGNvbnN0IHN0ZDo6dmVjdG9yPHNwPFJlYWRlcj4+JiBtUmVhZGVyczsKKworICAgIC8vIGFuYWx5emVzLCBjb21wcmVzc2VzIGFuZCBzdG9yZXMgdGhlIG1lcmdlZCBkYXRhCisgICAgLy8gY29udGFpbnMgYSBzZXBhcmF0ZSBpbnN0YW5jZSBmb3IgZXZlcnkgYXV0aG9yICh0aHJlYWQpLCBhbmQgZm9yIGV2ZXJ5IHNvdXJjZSBmaWxlCisgICAgLy8gbG9jYXRpb24gd2l0aGluIGVhY2ggYXV0aG9yCisgICAgUmVwb3J0UGVyZm9ybWFuY2U6OlBlcmZvcm1hbmNlQW5hbHlzaXNNYXAgbVRocmVhZFBlcmZvcm1hbmNlQW5hbHlzaXM7CisKKyAgICAvLyBjb21wcmVzc2VzIGFuZCBzdG9yZXMgYXVkaW8gcGVyZm9ybWFuY2UgZGF0YSBmcm9tIGVhY2ggdGhyZWFkJ3MgYnVmZmVycy4KKyAgICAvLyBmaXJzdCBwYXJhbWV0ZXIgaXMgYXV0aG9yLCBpLmUuIHRocmVhZCBpbmRleC4KKyAgICBzdGQ6Om1hcDxpbnQsIFJlcG9ydFBlcmZvcm1hbmNlOjpQZXJmb3JtYW5jZURhdGE+IG1UaHJlYWRQZXJmb3JtYW5jZURhdGE7CisKKyAgICAvLyBob3cgb2Z0ZW4gdG8gcHVzaCBkYXRhIHRvIE1lZGlhIE1ldHJpY3MKKyAgICBzdGF0aWMgY29uc3RleHByIG5zZWNzX3Qga1BlcmlvZGljTWVkaWFNZXRyaWNzUHVzaCA9IHMybnMoKG5zZWNzX3QpMiAqIDYwICogNjApOyAvLyAyIGhvdXJzCisKKyAgICAvLyBoYW5kbGUgYXV0aG9yIGVudHJ5IGJ5IGxvb2tpbmcgdXAgdGhlIGF1dGhvcidzIG5hbWUgYW5kIGFwcGVuZGluZyBpdCB0byB0aGUgYm9keQorICAgIC8vIHJldHVybnMgbnVtYmVyIG9mIGJ5dGVzIHJlYWQgZnJvbSBmbXRFbnRyeQorICAgIHZvaWQgaGFuZGxlQXV0aG9yKGNvbnN0IEFic3RyYWN0RW50cnkgJmZtdEVudHJ5LCBTdHJpbmc4ICpib2R5KTsKK307CisKKy8vIE1lcmdlVGhyZWFkIGlzIGEgdGhyZWFkIHRoYXQgY29udGFpbnMgYSBNZXJnZXIuIEl0IHdvcmtzIGFzIGEgcmV0cmlnZ2VyYWJsZSBvbmUtc2hvdDoKKy8vIHdoZW4gdHJpZ2dlcmVkLCBpdCBhd2FrZXMgZm9yIGEgbGFwc2Ugb2YgdGltZSwgZHVyaW5nIHdoaWNoIGl0IHBlcmlvZGljYWxseSBtZXJnZXM7IGlmCisvLyByZXRyaWdnZXJlZCwgdGhlIHRpbWVvdXQgaXMgcmVzZXQuCisvLyBUaGUgdGhyZWFkIGlzIHRyaWdnZXJlZCBvbiBBdWRpb0ZsaW5nZXIgYmluZGVyIGFjdGl2aXR5LgorY2xhc3MgTWVyZ2VUaHJlYWQgOiBwdWJsaWMgVGhyZWFkIHsKK3B1YmxpYzoKKyAgICBNZXJnZVRocmVhZChNZXJnZXIgJm1lcmdlciwgTWVyZ2VSZWFkZXIgJm1lcmdlUmVhZGVyKTsKKyAgICB+TWVyZ2VUaHJlYWQoKSBvdmVycmlkZTsKKworICAgIC8vIFJlc2V0IHRpbWVvdXQgYW5kIGFjdGl2YXRlIHRocmVhZCB0byBtZXJnZSBwZXJpb2RpY2FsbHkgaWYgaXQncyBpZGxlCisgICAgdm9pZCB3YWtldXAoKTsKKworICAgIC8vIFNldCB0aW1lb3V0IHBlcmlvZCB1bnRpbCB0aGUgbWVyZ2luZyB0aHJlYWQgZ29lcyBpZGxlIGFnYWluCisgICAgdm9pZCBzZXRUaW1lb3V0VXMoaW50IHRpbWUpOworCitwcml2YXRlOgorICAgIGJvb2wgdGhyZWFkTG9vcCgpIG92ZXJyaWRlOworCisgICAgLy8gdGhlIG1lcmdlciB3aG8gYWN0dWFsbHkgZG9lcyB0aGUgd29yayBvZiBtZXJnaW5nIHRoZSBsb2dzCisgICAgTWVyZ2VyJiAgICAgIG1NZXJnZXI7CisKKyAgICAvLyB0aGUgbWVyZ2VyZWFkZXIgdXNlZCB0byBwcm9jZXNzIGRhdGEgbWVyZ2VkIGJ5IG1NZXJnZXIKKyAgICBNZXJnZVJlYWRlciYgbU1lcmdlUmVhZGVyOworCisgICAgLy8gbXV0ZXggZm9yIHRoZSBjb25kaXRpb24gdmFyaWFibGUKKyAgICBNdXRleCAgICAgICAgbU11dGV4OworCisgICAgLy8gY29uZGl0aW9uIHZhcmlhYmxlIHRvIGFjdGl2YXRlIG1lcmdpbmcgb24gdGltZW91dCA+PSAwCisgICAgQ29uZGl0aW9uICAgIG1Db25kOworCisgICAgLy8gdGltZSBsZWZ0IHVudGlsIHRoZSB0aHJlYWQgYmxvY2tzIGFnYWluIChpbiBtaWNyb3NlY29uZHMpCisgICAgaW50ICAgICAgICAgIG1UaW1lb3V0VXM7CisKKyAgICAvLyBtZXJnaW5nIHBlcmlvZCB3aGVuIHRoZSB0aHJlYWQgaXMgYXdha2UKKyAgICBzdGF0aWMgY29uc3QgaW50ICBrVGhyZWFkU2xlZXBQZXJpb2RVcyA9IDEwMDAwMDAgLyoxcyovOworCisgICAgLy8gaW5pdGlhbCB0aW1lb3V0IHZhbHVlIHdoZW4gdHJpZ2dlcmVkCisgICAgc3RhdGljIGNvbnN0IGludCAga1RocmVhZFdha2V1cFBlcmlvZFVzID0gMzAwMDAwMCAvKjNzKi87Cit9OworCit9ICAgLy8gbmFtZXNwYWNlIE5CTG9nCit9ICAgLy8gbmFtZXNwYWNlIGFuZHJvaWQKKworI2VuZGlmICAvLyBBTkRST0lEX01FRElBX05CTE9HX01FUkdFUl9ICmRpZmYgLS1naXQgYS9tZWRpYS9saWJuYmxvZy9pbmNsdWRlL21lZGlhL25ibG9nL05CTG9nLmggYi9tZWRpYS9saWJuYmxvZy9pbmNsdWRlL21lZGlhL25ibG9nL05CTG9nLmgKaW5kZXggZmI2ZjE3OS4uZmQ3MzUzOCAxMDA2NDQKLS0tIGEvbWVkaWEvbGlibmJsb2cvaW5jbHVkZS9tZWRpYS9uYmxvZy9OQkxvZy5oCisrKyBiL21lZGlhL2xpYm5ibG9nL2luY2x1ZGUvbWVkaWEvbmJsb2cvTkJMb2cuaApAQCAtMTksNTk1ICsxOSwxMCBAQAogI2lmbmRlZiBBTkRST0lEX01FRElBX05CTE9HX0gKICNkZWZpbmUgQU5EUk9JRF9NRURJQV9OQkxPR19ICiAKLSNpbmNsdWRlIDxkZXF1ZT4KLSNpbmNsdWRlIDxtYXA+Ci0jaW5jbHVkZSA8c2V0PgotI2luY2x1ZGUgPHZlY3Rvcj4KLQotI2luY2x1ZGUgPGF1ZGlvX3V0aWxzL2ZpZm8uaD4KLSNpbmNsdWRlIDxiaW5kZXIvSU1lbW9yeS5oPgotI2luY2x1ZGUgPG1lZGlhL25ibG9nL1BlcmZvcm1hbmNlQW5hbHlzaXMuaD4KLSNpbmNsdWRlIDxtZWRpYS9uYmxvZy9SZXBvcnRQZXJmb3JtYW5jZS5oPgotI2luY2x1ZGUgPHV0aWxzL011dGV4Lmg+Ci0jaW5jbHVkZSA8dXRpbHMvdGhyZWFkcy5oPgotCi1uYW1lc3BhY2UgYW5kcm9pZCB7Ci0KLWNsYXNzIFN0cmluZzg7Ci0KLWNsYXNzIE5CTG9nIHsKLQotcHVibGljOgotCi0gICAgdXNpbmcgbG9nX2hhc2hfdCA9IFJlcG9ydFBlcmZvcm1hbmNlOjpsb2dfaGFzaF90OwotCi0gICAgLy8gRklYTUUgRXZlcnl0aGluZyBuZWVkZWQgZm9yIGNsaWVudCAod3JpdGVyIEFQSSBhbmQgcmVnaXN0cmF0aW9uKSBzaG91bGQgYmUgaXNvbGF0ZWQKLSAgICAvLyAgICAgICBmcm9tIHRoZSByZXN0IG9mIHRoZSBpbXBsZW1lbnRhdGlvbi4KLSAgICBjbGFzcyBXcml0ZXI7Ci0gICAgY2xhc3MgUmVhZGVyOwotCi0gICAgZW51bSBFdmVudCA6IHVpbnQ4X3QgewotICAgICAgICBFVkVOVF9SRVNFUlZFRCwKLSAgICAgICAgRVZFTlRfU1RSSU5HLCAgICAgICAgICAgICAgIC8vIEFTQ0lJIHN0cmluZywgbm90IE5VTC10ZXJtaW5hdGVkCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBUT0RPOiBtYWtlIHRpbWVzdGFtcCBvcHRpb25hbAotICAgICAgICBFVkVOVF9USU1FU1RBTVAsICAgICAgICAgICAgLy8gY2xvY2tfZ2V0dGltZShDTE9DS19NT05PVE9OSUMpCi0gICAgICAgIEVWRU5UX0lOVEVHRVIsICAgICAgICAgICAgICAvLyBpbnRlZ2VyIHZhbHVlIGVudHJ5Ci0gICAgICAgIEVWRU5UX0ZMT0FULCAgICAgICAgICAgICAgICAvLyBmbG9hdGluZyBwb2ludCB2YWx1ZSBlbnRyeQotICAgICAgICBFVkVOVF9QSUQsICAgICAgICAgICAgICAgICAgLy8gcHJvY2VzcyBJRCBhbmQgcHJvY2VzcyBuYW1lCi0gICAgICAgIEVWRU5UX0FVVEhPUiwgICAgICAgICAgICAgICAvLyBhdXRob3IgaW5kZXggKHByZXNlbnQgaW4gbWVyZ2VkIGxvZ3MpIHRyYWNrcyBlbnRyeSdzCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBvcmlnaW5hbCBsb2cKLSAgICAgICAgRVZFTlRfU1RBUlRfRk1ULCAgICAgICAgICAgIC8vIGxvZ0Zvcm1hdCBzdGFydCBldmVudDogZW50cnkgaW5jbHVkZXMgZm9ybWF0IHN0cmluZywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGZvbGxvd2luZyBlbnRyaWVzIGNvbnRhaW4gZm9ybWF0IGFyZ3VtZW50cwotICAgICAgICBFVkVOVF9IQVNILCAgICAgICAgICAgICAgICAgLy8gdW5pcXVlIEhBU0ggb2YgbG9nIG9yaWdpbiwgb3JpZ2luYXRlcyBmcm9tIGhhc2ggb2YgZmlsZSBuYW1lCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBhbmQgbGluZSBudW1iZXIKLSAgICAgICAgRVZFTlRfSElTVE9HUkFNX0VOVFJZX1RTLCAgIC8vIHNpbmdsZSBkYXR1bSBmb3IgdGltZXN0YW1wIGhpc3RvZ3JhbQotICAgICAgICBFVkVOVF9BVURJT19TVEFURSwgICAgICAgICAgLy8gYXVkaW8gb24vb2ZmIGV2ZW50OiBsb2dnZWQgb24gRmFzdE1peGVyOjpvblN0YXRlQ2hhbmdlIGNhbGwKLSAgICAgICAgRVZFTlRfRU5EX0ZNVCwgICAgICAgICAgICAgIC8vIGVuZCBvZiBsb2dGb3JtYXQgYXJndW1lbnQgbGlzdAotCi0gICAgICAgIEVWRU5UX1VQUEVSX0JPVU5ELCAgICAgICAgICAvLyB0byBjaGVjayBmb3IgaW52YWxpZCBldmVudHMKLSAgICB9OwotCi1wcml2YXRlOgotCi0gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gICAgLy8gQVBJIGZvciBoYW5kbGluZyBmb3JtYXQgZW50cnkgb3BlcmF0aW9ucwotCi0gICAgLy8gYSBmb3JtYXR0ZWQgZW50cnkgaGFzIHRoZSBmb2xsb3dpbmcgc3RydWN0dXJlOgotICAgIC8vICAgICogU1RBUlRfRk1UIGVudHJ5LCBjb250YWluaW5nIHRoZSBmb3JtYXQgc3RyaW5nCi0gICAgLy8gICAgKiBUSU1FU1RBTVAgZW50cnkKLSAgICAvLyAgICAqIEhBU0ggZW50cnkKLSAgICAvLyAgICAqIGF1dGhvciBlbnRyeSBvZiB0aGUgdGhyZWFkIHRoYXQgZ2VuZXJhdGVkIGl0IChvcHRpb25hbCwgcHJlc2VudCBpbiBtZXJnZWQgbG9nKQotICAgIC8vICAgICogZm9ybWF0IGFyZzEKLSAgICAvLyAgICAqIGZvcm1hdCBhcmcyCi0gICAgLy8gICAgKiAuLi4KLSAgICAvLyAgICAqIEVORF9GTVQgZW50cnkKLQotICAgIC8vIGVudHJ5IHJlcHJlc2VudGF0aW9uIGluIG1lbW9yeQotICAgIHN0cnVjdCBlbnRyeSB7Ci0gICAgICAgIGNvbnN0IHVpbnQ4X3QgdHlwZTsKLSAgICAgICAgY29uc3QgdWludDhfdCBsZW5ndGg7Ci0gICAgICAgIGNvbnN0IHVpbnQ4X3QgZGF0YVswXTsKLSAgICB9OwotCi0gICAgLy8gZW50cnkgdGFpbCByZXByZXNlbnRhdGlvbiAoYWZ0ZXIgZGF0YSkKLSAgICBzdHJ1Y3QgZW5kaW5nIHsKLSAgICAgICAgdWludDhfdCBsZW5ndGg7Ci0gICAgICAgIHVpbnQ4X3QgbmV4dFswXTsKLSAgICB9OwotCi0gICAgLy8gZW50cnkgaXRlcmF0b3IKLSAgICBjbGFzcyBFbnRyeUl0ZXJhdG9yIHsKLSAgICBwdWJsaWM6Ci0gICAgICAgIEVudHJ5SXRlcmF0b3IoKTsKLSAgICAgICAgZXhwbGljaXQgRW50cnlJdGVyYXRvcihjb25zdCB1aW50OF90ICplbnRyeSk7Ci0gICAgICAgIEVudHJ5SXRlcmF0b3IoY29uc3QgRW50cnlJdGVyYXRvciAmb3RoZXIpOwotCi0gICAgICAgIC8vIGRlcmVmZXJlbmNlIHVuZGVybHlpbmcgZW50cnkKLSAgICAgICAgY29uc3QgZW50cnkmICAgIG9wZXJhdG9yKigpIGNvbnN0OwotICAgICAgICBjb25zdCBlbnRyeSogICAgb3BlcmF0b3ItPigpIGNvbnN0OwotICAgICAgICAvLyBhZHZhbmNlIHRvIG5leHQgZW50cnkKLSAgICAgICAgRW50cnlJdGVyYXRvciYgICAgICAgb3BlcmF0b3IrKygpOyAvLyArK2kKLSAgICAgICAgLy8gYmFjayB0byBwcmV2aW91cyBlbnRyeQotICAgICAgICBFbnRyeUl0ZXJhdG9yJiAgICAgICBvcGVyYXRvci0tKCk7IC8vIC0taQotICAgICAgICBFbnRyeUl0ZXJhdG9yICAgICAgICBuZXh0KCkgY29uc3Q7Ci0gICAgICAgIEVudHJ5SXRlcmF0b3IgICAgICAgIHByZXYoKSBjb25zdDsKLSAgICAgICAgYm9vbCAgICAgICAgICAgIG9wZXJhdG9yIT0oY29uc3QgRW50cnlJdGVyYXRvciAmb3RoZXIpIGNvbnN0OwotICAgICAgICBpbnQgICAgICAgICAgICAgb3BlcmF0b3ItKGNvbnN0IEVudHJ5SXRlcmF0b3IgJm90aGVyKSBjb25zdDsKLQotICAgICAgICBib29sICAgICAgICAgICAgaGFzQ29uc2lzdGVudExlbmd0aCgpIGNvbnN0OwotICAgICAgICB2b2lkICAgICAgICAgICAgY29weVRvKHN0ZDo6dW5pcXVlX3B0cjxhdWRpb191dGlsc19maWZvX3dyaXRlcj4gJmRzdCkgY29uc3Q7Ci0gICAgICAgIHZvaWQgICAgICAgICAgICBjb3B5RGF0YSh1aW50OF90ICpkc3QpIGNvbnN0OwotCi0gICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+Ci0gICAgICAgIGlubGluZSBjb25zdCBUJiBwYXlsb2FkKCkgewotICAgICAgICAgICAgcmV0dXJuICpyZWludGVycHJldF9jYXN0PGNvbnN0IFQgKj4ocHRyICsgb2Zmc2V0b2YoZW50cnksIGRhdGEpKTsKLSAgICAgICAgfQotCi0gICAgICAgIGlubGluZSBvcGVyYXRvciBjb25zdCB1aW50OF90KigpIGNvbnN0IHsKLSAgICAgICAgICAgIHJldHVybiBwdHI7Ci0gICAgICAgIH0KLQotICAgIHByaXZhdGU6Ci0gICAgICAgIGNvbnN0IHVpbnQ4X3QgICpwdHI7Ci0gICAgfTsKLQotICAgIGNsYXNzIEFic3RyYWN0RW50cnkgewotICAgIHB1YmxpYzoKLQotICAgICAgICAvLyBFbnRyeSBzdGFydGluZyBpbiB0aGUgZ2l2ZW4gcG9pbnRlcgotICAgICAgICBleHBsaWNpdCBBYnN0cmFjdEVudHJ5KGNvbnN0IHVpbnQ4X3QgKmVudHJ5KTsKLSAgICAgICAgdmlydHVhbCB+QWJzdHJhY3RFbnRyeSgpIHt9Ci0KLSAgICAgICAgLy8gYnVpbGQgY29uY3JldGUgZW50cnkgb2YgYXBwcm9wcmlhdGUgY2xhc3MgZnJvbSBwb2ludGVyCi0gICAgICAgIHN0YXRpYyBzdGQ6OnVuaXF1ZV9wdHI8QWJzdHJhY3RFbnRyeT4gYnVpbGRFbnRyeShjb25zdCB1aW50OF90ICpwdHIpOwotCi0gICAgICAgIC8vIGdldCBmb3JtYXQgZW50cnkgdGltZXN0YW1wCi0gICAgICAgIHZpcnR1YWwgaW50NjRfdCAgICAgIHRpbWVzdGFtcCgpIGNvbnN0ID0gMDsKLQotICAgICAgICAvLyBnZXQgZm9ybWF0IGVudHJ5J3MgdW5pcXVlIGlkCi0gICAgICAgIHZpcnR1YWwgbG9nX2hhc2hfdCAgIGhhc2goKSBjb25zdCA9IDA7Ci0KLSAgICAgICAgLy8gZW50cnkncyBhdXRob3IgaW5kZXggKC0xIGlmIG5vbmUgcHJlc2VudCkKLSAgICAgICAgLy8gYSBNZXJnZXIgaGFzIGEgdmVjdG9yIG9mIFJlYWRlcnMsIGF1dGhvciBzaW1wbHkgcG9pbnRzIHRvIHRoZSBpbmRleCBvZiB0aGUKLSAgICAgICAgLy8gUmVhZGVyIHRoYXQgb3JpZ2luYXRlZCB0aGUgZW50cnkKLSAgICAgICAgLy8gVE9ETyBjb25zaWRlciBjaGFuZ2luZyB0byB1aW50MzJfdAotICAgICAgICB2aXJ0dWFsIGludCAgICAgICAgICBhdXRob3IoKSBjb25zdCA9IDA7Ci0KLSAgICAgICAgLy8gY29weSBlbnRyeSwgYWRkaW5nIGF1dGhvciBiZWZvcmUgdGltZXN0YW1wLCByZXR1cm5zIGl0ZXJhdG9yIHRvIGVuZCBvZiBlbnRyeQotICAgICAgICB2aXJ0dWFsIEVudHJ5SXRlcmF0b3IgICAgY29weVdpdGhBdXRob3Ioc3RkOjp1bmlxdWVfcHRyPGF1ZGlvX3V0aWxzX2ZpZm9fd3JpdGVyPiAmZHN0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGF1dGhvcikgY29uc3QgPSAwOwotCi0gICAgcHJvdGVjdGVkOgotICAgICAgICAvLyBjb3BpZXMgb3JkaW5hcnkgZW50cnkgZnJvbSBzcmMgdG8gZHN0LCBhbmQgcmV0dXJucyBsZW5ndGggb2YgZW50cnkKLSAgICAgICAgLy8gc2l6ZV90ICAgICAgY29weUVudHJ5KGF1ZGlvX3V0aWxzX2ZpZm9fd3JpdGVyICpkc3QsIGNvbnN0IGl0ZXJhdG9yICZpdCk7Ci0gICAgICAgIGNvbnN0IHVpbnQ4X3QgICptRW50cnk7Ci0gICAgfTsKLQotICAgIGNsYXNzIEZvcm1hdEVudHJ5IDogcHVibGljIEFic3RyYWN0RW50cnkgewotICAgIHB1YmxpYzoKLSAgICAgICAgLy8gZXhwbGljaXQgRm9ybWF0RW50cnkoY29uc3QgRW50cnlJdGVyYXRvciAmaXQpOwotICAgICAgICBleHBsaWNpdCBGb3JtYXRFbnRyeShjb25zdCB1aW50OF90ICpwdHIpIDogQWJzdHJhY3RFbnRyeShwdHIpIHt9Ci0gICAgICAgIHZpcnR1YWwgfkZvcm1hdEVudHJ5KCkge30KLQotICAgICAgICBFbnRyeUl0ZXJhdG9yIGJlZ2luKCkgY29uc3Q7Ci0KLSAgICAgICAgLy8gRW50cnkncyBmb3JtYXQgc3RyaW5nCi0gICAgICAgIGNvbnN0ICAgY2hhciogZm9ybWF0U3RyaW5nKCkgY29uc3Q7Ci0KLSAgICAgICAgLy8gRW5ydHkncyBmb3JtYXQgc3RyaW5nIGxlbmd0aAotICAgICAgICBzaXplX3QgICAgICBmb3JtYXRTdHJpbmdMZW5ndGgoKSBjb25zdDsKLQotICAgICAgICAvLyBGb3JtYXQgYXJndW1lbnRzIChleGNsdWRpbmcgZm9ybWF0IHN0cmluZywgdGltZXN0YW1wIGFuZCBhdXRob3IpCi0gICAgICAgIEVudHJ5SXRlcmF0b3IgICAgYXJncygpIGNvbnN0OwotCi0gICAgICAgIC8vIGdldCBmb3JtYXQgZW50cnkgdGltZXN0YW1wCi0gICAgICAgIHZpcnR1YWwgaW50NjRfdCAgICAgdGltZXN0YW1wKCkgY29uc3Qgb3ZlcnJpZGU7Ci0KLSAgICAgICAgLy8gZ2V0IGZvcm1hdCBlbnRyeSdzIHVuaXF1ZSBpZAotICAgICAgICB2aXJ0dWFsIGxvZ19oYXNoX3QgIGhhc2goKSBjb25zdCBvdmVycmlkZTsKLQotICAgICAgICAvLyBlbnRyeSdzIGF1dGhvciBpbmRleCAoLTEgaWYgbm9uZSBwcmVzZW50KQotICAgICAgICAvLyBhIE1lcmdlciBoYXMgYSB2ZWN0b3Igb2YgUmVhZGVycywgYXV0aG9yIHNpbXBseSBwb2ludHMgdG8gdGhlIGluZGV4IG9mIHRoZQotICAgICAgICAvLyBSZWFkZXIgdGhhdCBvcmlnaW5hdGVkIHRoZSBlbnRyeQotICAgICAgICB2aXJ0dWFsIGludCAgICAgICAgIGF1dGhvcigpIGNvbnN0IG92ZXJyaWRlOwotCi0gICAgICAgIC8vIGNvcHkgZW50cnksIGFkZGluZyBhdXRob3IgYmVmb3JlIHRpbWVzdGFtcCwgcmV0dXJucyBzaXplIG9mIG9yaWdpbmFsIGVudHJ5Ci0gICAgICAgIHZpcnR1YWwgRW50cnlJdGVyYXRvciAgICBjb3B5V2l0aEF1dGhvcihzdGQ6OnVuaXF1ZV9wdHI8YXVkaW9fdXRpbHNfZmlmb193cml0ZXI+ICZkc3QsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgYXV0aG9yKSBjb25zdCBvdmVycmlkZTsKLQotICAgIH07Ci0KLSAgICBjbGFzcyBIaXN0b2dyYW1FbnRyeSA6IHB1YmxpYyBBYnN0cmFjdEVudHJ5IHsKLSAgICBwdWJsaWM6Ci0gICAgICAgIGV4cGxpY2l0IEhpc3RvZ3JhbUVudHJ5KGNvbnN0IHVpbnQ4X3QgKnB0cikgOiBBYnN0cmFjdEVudHJ5KHB0cikgewotICAgICAgICB9Ci0gICAgICAgIHZpcnR1YWwgfkhpc3RvZ3JhbUVudHJ5KCkge30KLQotICAgICAgICB2aXJ0dWFsIGludDY0X3QgICAgIHRpbWVzdGFtcCgpIGNvbnN0IG92ZXJyaWRlOwotCi0gICAgICAgIHZpcnR1YWwgbG9nX2hhc2hfdCAgaGFzaCgpIGNvbnN0IG92ZXJyaWRlOwotCi0gICAgICAgIHZpcnR1YWwgaW50ICAgICAgICAgYXV0aG9yKCkgY29uc3Qgb3ZlcnJpZGU7Ci0KLSAgICAgICAgdmlydHVhbCBFbnRyeUl0ZXJhdG9yICAgIGNvcHlXaXRoQXV0aG9yKHN0ZDo6dW5pcXVlX3B0cjxhdWRpb191dGlsc19maWZvX3dyaXRlcj4gJmRzdCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBhdXRob3IpIGNvbnN0IG92ZXJyaWRlOwotCi0gICAgfTsKLQotICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi0gICAgLy8gcmVwcmVzZW50YXRpb24gb2YgYSBzaW5nbGUgbG9nIGVudHJ5IGluIHByaXZhdGUgbWVtb3J5Ci0gICAgc3RydWN0IEVudHJ5IHsKLSAgICAgICAgRW50cnkoRXZlbnQgZXZlbnQsIGNvbnN0IHZvaWQgKmRhdGEsIHNpemVfdCBsZW5ndGgpCi0gICAgICAgICAgICA6IG1FdmVudChldmVudCksIG1MZW5ndGgobGVuZ3RoKSwgbURhdGEoZGF0YSkgeyB9Ci0gICAgICAgIC8qdmlydHVhbCovIH5FbnRyeSgpIHsgfQotCi0gICAgICAgIC8vIHVzZWQgZHVyaW5nIHdyaXRpbmcgdG8gZm9ybWF0IEVudHJ5IGluZm9ybWF0aW9uIGFzIGZvbGxvd3M6Ci0gICAgICAgIC8vIFt0eXBlXVtsZW5ndGhdW2RhdGEgLi4uIF1bbGVuZ3RoXQotICAgICAgICBpbnQgICAgIGNvcHlFbnRyeURhdGFBdChzaXplX3Qgb2Zmc2V0KSBjb25zdDsKLQotICAgIHByaXZhdGU6Ci0gICAgICAgIGZyaWVuZCBjbGFzcyBXcml0ZXI7Ci0gICAgICAgIEV2ZW50ICAgICAgIG1FdmVudDsgICAgIC8vIGV2ZW50IHR5cGUKLSAgICAgICAgdWludDhfdCAgICAgbUxlbmd0aDsgICAgLy8gbGVuZ3RoIG9mIGFkZGl0aW9uYWwgZGF0YSwgMCA8PSBtTGVuZ3RoIDw9IGtNYXhMZW5ndGgKLSAgICAgICAgY29uc3Qgdm9pZCAqbURhdGE7ICAgICAgLy8gZXZlbnQgdHlwZS1zcGVjaWZpYyBkYXRhCi0gICAgICAgIHN0YXRpYyBjb25zdCBzaXplX3Qga01heExlbmd0aCA9IDI1NTsKLSAgICBwdWJsaWM6Ci0gICAgICAgIC8vIG1FdmVudCwgbUxlbmd0aCwgbURhdGFbLi4uXSwgZHVwbGljYXRlIG1MZW5ndGgKLSAgICAgICAgc3RhdGljIGNvbnN0IHNpemVfdCBrT3ZlcmhlYWQgPSBzaXplb2YoZW50cnkpICsgc2l6ZW9mKGVuZGluZyk7Ci0gICAgICAgIC8vIGVuZGluZCBsZW5ndGggb2YgcHJldmlvdXMgZW50cnkKLSAgICAgICAgc3RhdGljIGNvbnN0IHNzaXplX3Qga1ByZXZpb3VzTGVuZ3RoT2Zmc2V0ID0gLSBzaXplb2YoZW5kaW5nKSArCi0gICAgICAgICAgICBvZmZzZXRvZihlbmRpbmcsIGxlbmd0aCk7Ci0gICAgfTsKLQotICAgIHN0cnVjdCBIaXN0VHNFbnRyeSB7Ci0gICAgICAgIGxvZ19oYXNoX3QgaGFzaDsKLSAgICAgICAgaW50NjRfdCB0czsKLSAgICB9OyAvL1RPRE8gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7Ci0KLSAgICBzdHJ1Y3QgSGlzdFRzRW50cnlXaXRoQXV0aG9yIHsKLSAgICAgICAgbG9nX2hhc2hfdCBoYXNoOwotICAgICAgICBpbnQ2NF90IHRzOwotICAgICAgICBpbnQgYXV0aG9yOwotICAgIH07IC8vVE9ETyBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKLQotICAgIHN0cnVjdCBIaXN0SW50RW50cnkgewotICAgICAgICBsb2dfaGFzaF90IGhhc2g7Ci0gICAgICAgIGludCB2YWx1ZTsKLSAgICB9OyAvL1RPRE8gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7Ci0KLSAgICAvLyByZXByZXNlbnRhdGlvbiBvZiBhIHNpbmdsZSBsb2cgZW50cnkgaW4gc2hhcmVkIG1lbW9yeQotICAgIC8vICBieXRlWzBdICAgICAgICAgICAgIG1FdmVudAotICAgIC8vICBieXRlWzFdICAgICAgICAgICAgIG1MZW5ndGgKLSAgICAvLyAgYnl0ZVsyXSAgICAgICAgICAgICBtRGF0YVswXQotICAgIC8vICAuLi4KLSAgICAvLyAgYnl0ZVsyK2ldICAgICAgICAgICBtRGF0YVtpXQotICAgIC8vICAuLi4KLSAgICAvLyAgYnl0ZVsyK21MZW5ndGgtMV0gICBtRGF0YVttTGVuZ3RoLTFdCi0gICAgLy8gIGJ5dGVbMittTGVuZ3RoXSAgICAgZHVwbGljYXRlIGNvcHkgb2YgbUxlbmd0aCB0byBwZXJtaXQgcmV2ZXJzZSBzY2FuCi0gICAgLy8gIGJ5dGVbMyttTGVuZ3RoXSAgICAgc3RhcnQgb2YgbmV4dCBsb2cgZW50cnkKLQotICAgIHN0YXRpYyB2b2lkICAgIGFwcGVuZEludChTdHJpbmc4ICpib2R5LCBjb25zdCB2b2lkICpkYXRhKTsKLSAgICBzdGF0aWMgdm9pZCAgICBhcHBlbmRGbG9hdChTdHJpbmc4ICpib2R5LCBjb25zdCB2b2lkICpkYXRhKTsKLSAgICBzdGF0aWMgdm9pZCAgICBhcHBlbmRQSUQoU3RyaW5nOCAqYm9keSwgY29uc3Qgdm9pZCAqZGF0YSwgc2l6ZV90IGxlbmd0aCk7Ci0gICAgc3RhdGljIHZvaWQgICAgYXBwZW5kVGltZXN0YW1wKFN0cmluZzggKmJvZHksIGNvbnN0IHZvaWQgKmRhdGEpOwotICAgIHN0YXRpYyBzaXplX3QgIGZtdEVudHJ5TGVuZ3RoKGNvbnN0IHVpbnQ4X3QgKmRhdGEpOwotICAgIHN0YXRpYyBTdHJpbmc4IGJ1ZmZlckR1bXAoY29uc3QgdWludDhfdCAqYnVmZmVyLCBzaXplX3Qgc2l6ZSk7Ci0gICAgc3RhdGljIFN0cmluZzggYnVmZmVyRHVtcChjb25zdCBFbnRyeUl0ZXJhdG9yICZpdCk7Ci1wdWJsaWM6Ci0KLSAgICAvLyBMb2NhdGVkIGluIHNoYXJlZCBtZW1vcnksIG11c3QgYmUgUE9ELgotICAgIC8vIEV4YWN0bHkgb25lIHByb2Nlc3MgbXVzdCBleHBsaWNpdGx5IGNhbGwgdGhlIGNvbnN0cnVjdG9yIG9yIHVzZSBwbGFjZW1lbnQgbmV3LgotICAgIC8vIFNpbmNlIHRoaXMgaXMgYSBQT0QsIHRoZSBkZXN0cnVjdG9yIGlzIGVtcHR5IGFuZCB1bm5lY2Vzc2FyeSB0byBjYWxsIGl0IGV4cGxpY2l0bHkuCi0gICAgc3RydWN0IFNoYXJlZCB7Ci0gICAgICAgIFNoYXJlZCgpIC8qIG1SZWFyIGluaXRpYWxpemVkIHZpYSBkZWZhdWx0IGNvbnN0cnVjdG9yICovIHsgfQotICAgICAgICAvKnZpcnR1YWwqLyB+U2hhcmVkKCkgeyB9Ci0KLSAgICAgICAgYXVkaW9fdXRpbHNfZmlmb19pbmRleCAgbVJlYXI7ICAvLyBpbmRleCBvbmUgYnl0ZSBwYXN0IHRoZSBlbmQgb2YgbW9zdCByZWNlbnQgRW50cnkKLSAgICAgICAgY2hhciAgICBtQnVmZmVyWzBdOyAgICAgICAgICAgICAvLyBjaXJjdWxhciBidWZmZXIgZm9yIGVudHJpZXMKLSAgICB9OwotCi1wdWJsaWM6Ci0KLSAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotICAgIC8vIEZJWE1FIFRpbWVsaW5lIHdhcyBpbnRlbmRlZCB0byB3cmFwIFdyaXRlciBhbmQgUmVhZGVyLCBidXQgaXNuJ3QgYWN0dWFsbHkgdXNlZCB5ZXQuCi0gICAgLy8gRm9yIG5vdyBpdCBpcyBqdXN0IGEgbmFtZXNwYWNlIGZvciBzaGFyZWRTaXplKCkuCi0gICAgY2xhc3MgVGltZWxpbmUgOiBwdWJsaWMgUmVmQmFzZSB7Ci0gICAgcHVibGljOgotI2lmIDAKLSAgICAgICAgVGltZWxpbmUoc2l6ZV90IHNpemUsIHZvaWQgKnNoYXJlZCA9IE5VTEwpOwotICAgICAgICB2aXJ0dWFsIH5UaW1lbGluZSgpOwotI2VuZGlmCi0KLSAgICAgICAgLy8gSW5wdXQgcGFyYW1ldGVyICdzaXplJyBpcyB0aGUgZGVzaXJlZCBzaXplIG9mIHRoZSB0aW1lbGluZSBpbiBieXRlIHVuaXRzLgotICAgICAgICAvLyBSZXR1cm5zIHRoZSBzaXplIHJvdW5kZWQgdXAgdG8gYSBwb3dlci1vZi0yLCBwbHVzIHRoZSBjb25zdGFudCBzaXplIG92ZXJoZWFkIGZvciBpbmRpY2VzLgotICAgICAgICBzdGF0aWMgc2l6ZV90IHNoYXJlZFNpemUoc2l6ZV90IHNpemUpOwotCi0jaWYgMAotICAgIHByaXZhdGU6Ci0gICAgICAgIGZyaWVuZCBjbGFzcyAgICBXcml0ZXI7Ci0gICAgICAgIGZyaWVuZCBjbGFzcyAgICBSZWFkZXI7Ci0KLSAgICAgICAgY29uc3Qgc2l6ZV90ICAgIG1TaXplOyAgICAgIC8vIGNpcmN1bGFyIGJ1ZmZlciBzaXplIGluIGJ5dGVzLCBtdXN0IGJlIGEgcG93ZXIgb2YgMgotICAgICAgICBib29sICAgICAgICAgICAgbU93bjsgICAgICAgLy8gd2hldGhlciBJIG93biB0aGUgbWVtb3J5IGF0IG1TaGFyZWQKLSAgICAgICAgU2hhcmVkKiBjb25zdCAgIG1TaGFyZWQ7ICAgIC8vIHBvaW50ZXIgdG8gc2hhcmVkIG1lbW9yeQotI2VuZGlmCi0gICAgfTsKLQotICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi0gICAgLy8gV3JpdGVyIGlzIHRocmVhZC1zYWZlIHdpdGggcmVzcGVjdCB0byBSZWFkZXIsIGJ1dCBub3Qgd2l0aCByZXNwZWN0IHRvIG11bHRpcGxlIHRocmVhZHMKLSAgICAvLyBjYWxsaW5nIFdyaXRlciBtZXRob2RzLiAgSWYgeW91IG5lZWQgbXVsdGktdGhyZWFkIHNhZmV0eSBmb3Igd3JpdGluZywgdXNlIExvY2tlZFdyaXRlci4KLSAgICBjbGFzcyBXcml0ZXIgOiBwdWJsaWMgUmVmQmFzZSB7Ci0gICAgcHVibGljOgotICAgICAgICBXcml0ZXIoKTsgICAgICAgICAgICAgICAgICAgLy8gZHVtbXkgbm9wIGltcGxlbWVudGF0aW9uIHdpdGhvdXQgc2hhcmVkIG1lbW9yeQotCi0gICAgICAgIC8vIElucHV0IHBhcmFtZXRlciAnc2l6ZScgaXMgdGhlIGRlc2lyZWQgc2l6ZSBvZiB0aGUgdGltZWxpbmUgaW4gYnl0ZSB1bml0cy4KLSAgICAgICAgLy8gVGhlIHNpemUgb2YgdGhlIHNoYXJlZCBtZW1vcnkgbXVzdCBiZSBhdCBsZWFzdCBUaW1lbGluZTo6c2hhcmVkU2l6ZShzaXplKS4KLSAgICAgICAgV3JpdGVyKHZvaWQgKnNoYXJlZCwgc2l6ZV90IHNpemUpOwotICAgICAgICBXcml0ZXIoY29uc3Qgc3A8SU1lbW9yeT4mIGlNZW1vcnksIHNpemVfdCBzaXplKTsKLQotICAgICAgICB2aXJ0dWFsIH5Xcml0ZXIoKTsKLQotICAgICAgICAvLyBGSVhNRSBuZWVkcyBjb21tZW50cywgYW5kIHNvbWUgc2hvdWxkIGJlIHByaXZhdGUKLSAgICAgICAgdmlydHVhbCB2b2lkICAgIGxvZyhjb25zdCBjaGFyICpzdHJpbmcpOwotICAgICAgICB2aXJ0dWFsIHZvaWQgICAgbG9nZihjb25zdCBjaGFyICpmbXQsIC4uLikgX19hdHRyaWJ1dGVfXyAoKGZvcm1hdCAocHJpbnRmLCAyLCAzKSkpOwotICAgICAgICB2aXJ0dWFsIHZvaWQgICAgbG9ndmYoY29uc3QgY2hhciAqZm10LCB2YV9saXN0IGFwKTsKLSAgICAgICAgdmlydHVhbCB2b2lkICAgIGxvZ1RpbWVzdGFtcCgpOwotICAgICAgICB2aXJ0dWFsIHZvaWQgICAgbG9nVGltZXN0YW1wKGNvbnN0IGludDY0X3QgdHMpOwotICAgICAgICB2aXJ0dWFsIHZvaWQgICAgbG9nSW50ZWdlcihjb25zdCBpbnQgeCk7Ci0gICAgICAgIHZpcnR1YWwgdm9pZCAgICBsb2dGbG9hdChjb25zdCBmbG9hdCB4KTsKLSAgICAgICAgdmlydHVhbCB2b2lkICAgIGxvZ1BJRCgpOwotICAgICAgICB2aXJ0dWFsIHZvaWQgICAgbG9nRm9ybWF0KGNvbnN0IGNoYXIgKmZtdCwgbG9nX2hhc2hfdCBoYXNoLCAuLi4pOwotICAgICAgICB2aXJ0dWFsIHZvaWQgICAgbG9nVkZvcm1hdChjb25zdCBjaGFyICpmbXQsIGxvZ19oYXNoX3QgaGFzaCwgdmFfbGlzdCBhcCk7Ci0gICAgICAgIHZpcnR1YWwgdm9pZCAgICBsb2dTdGFydChjb25zdCBjaGFyICpmbXQpOwotICAgICAgICB2aXJ0dWFsIHZvaWQgICAgbG9nRW5kKCk7Ci0gICAgICAgIHZpcnR1YWwgdm9pZCAgICBsb2dIYXNoKGxvZ19oYXNoX3QgaGFzaCk7Ci0gICAgICAgIHZpcnR1YWwgdm9pZCAgICBsb2dFdmVudEhpc3RUcyhFdmVudCBldmVudCwgbG9nX2hhc2hfdCBoYXNoKTsKLQotICAgICAgICB2aXJ0dWFsIGJvb2wgICAgaXNFbmFibGVkKCkgY29uc3Q7Ci0KLSAgICAgICAgLy8gcmV0dXJuIHZhbHVlIGZvciBhbGwgb2YgdGhlc2UgaXMgdGhlIHByZXZpb3VzIGlzRW5hYmxlZCgpCi0gICAgICAgIHZpcnR1YWwgYm9vbCAgICBzZXRFbmFibGVkKGJvb2wgZW5hYmxlZCk7ICAgLy8gYnV0IHdvbid0IGVuYWJsZSBpZiBubyBzaGFyZWQgbWVtb3J5Ci0gICAgICAgIGJvb2wgICAgZW5hYmxlKCkgICAgeyByZXR1cm4gc2V0RW5hYmxlZCh0cnVlKTsgfQotICAgICAgICBib29sICAgIGRpc2FibGUoKSAgIHsgcmV0dXJuIHNldEVuYWJsZWQoZmFsc2UpOyB9Ci0KLSAgICAgICAgc3A8SU1lbW9yeT4gICAgIGdldElNZW1vcnkoKSBjb25zdCAgeyByZXR1cm4gbUlNZW1vcnk7IH0KLQotICAgIHByaXZhdGU6Ci0gICAgICAgIC8vIDAgPD0gbGVuZ3RoIDw9IGtNYXhMZW5ndGgKLSAgICAgICAgLy8gd3JpdGVzIGEgc2luZ2xlIEVudHJ5IHRvIHRoZSBGSUZPCi0gICAgICAgIHZvaWQgICAgbG9nKEV2ZW50IGV2ZW50LCBjb25zdCB2b2lkICpkYXRhLCBzaXplX3QgbGVuZ3RoKTsKLSAgICAgICAgLy8gY2hlY2tzIHZhbGlkaXR5IG9mIGFuIGV2ZW50IGJlZm9yZSBjYWxsaW5nIGxvZyBhYm92ZSB0aGlzIG9uZQotICAgICAgICB2b2lkICAgIGxvZyhjb25zdCBFbnRyeSAqZW50cnksIGJvb2wgdHJ1c3RlZCA9IGZhbHNlKTsKLQotICAgICAgICBTaGFyZWQqIGNvbnN0ICAgbVNoYXJlZDsgICAgLy8gcmF3IHBvaW50ZXIgdG8gc2hhcmVkIG1lbW9yeQotICAgICAgICBzcDxJTWVtb3J5PiAgICAgbUlNZW1vcnk7ICAgLy8gcmVmLWNvdW50ZWQgdmVyc2lvbiwgaW5pdGlhbGl6ZWQgaW4gY29uc3RydWN0b3IKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGFuZCB0aGVuIGNvbnN0Ci0gICAgICAgIGF1ZGlvX3V0aWxzX2ZpZm8gKiBjb25zdCBtRmlmbzsgICAgICAgICAgICAgICAgIC8vIEZJRk8gaXRzZWxmLCBub24tTlVMTAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyB1bmxlc3MgY29uc3RydWN0b3IgZmFpbHMKLSAgICAgICAgYXVkaW9fdXRpbHNfZmlmb193cml0ZXIgKiBjb25zdCBtRmlmb1dyaXRlcjsgICAgLy8gdXNlZCB0byB3cml0ZSB0byBGSUZPLCBub24tTlVMTAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyB1bmxlc3MgZHVtbXkgY29uc3RydWN0b3IgdXNlZAotICAgICAgICBib29sICAgICAgICAgICAgbUVuYWJsZWQ7ICAgLy8gd2hldGhlciB0byBhY3R1YWxseSBsb2cKLQotICAgICAgICAvLyBjYWNoZWQgcGlkIGFuZCBwcm9jZXNzIG5hbWUgdG8gdXNlIGluICVwIGZvcm1hdCBzcGVjaWZpZXIKLSAgICAgICAgLy8gdG90YWwgdGFnIGxlbmd0aCBpcyBtUGlkVGFnU2l6ZSBhbmQgcHJvY2VzcyBuYW1lIGlzIG5vdCB6ZXJvIHRlcm1pbmF0ZWQKLSAgICAgICAgY2hhciAgICptUGlkVGFnOwotICAgICAgICBzaXplX3QgIG1QaWRUYWdTaXplOwotICAgIH07Ci0KLSAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotICAgIC8vIFNpbWlsYXIgdG8gV3JpdGVyLCBidXQgc2FmZSBmb3IgbXVsdGlwbGUgdGhyZWFkcyB0byBjYWxsIGNvbmN1cnJlbnRseQotICAgIGNsYXNzIExvY2tlZFdyaXRlciA6IHB1YmxpYyBXcml0ZXIgewotICAgIHB1YmxpYzoKLSAgICAgICAgTG9ja2VkV3JpdGVyKCk7Ci0gICAgICAgIExvY2tlZFdyaXRlcih2b2lkICpzaGFyZWQsIHNpemVfdCBzaXplKTsKLQotICAgICAgICB2aXJ0dWFsIHZvaWQgICAgbG9nKGNvbnN0IGNoYXIgKnN0cmluZyk7Ci0gICAgICAgIHZpcnR1YWwgdm9pZCAgICBsb2dmKGNvbnN0IGNoYXIgKmZtdCwgLi4uKSBfX2F0dHJpYnV0ZV9fICgoZm9ybWF0IChwcmludGYsIDIsIDMpKSk7Ci0gICAgICAgIHZpcnR1YWwgdm9pZCAgICBsb2d2Zihjb25zdCBjaGFyICpmbXQsIHZhX2xpc3QgYXApOwotICAgICAgICB2aXJ0dWFsIHZvaWQgICAgbG9nVGltZXN0YW1wKCk7Ci0gICAgICAgIHZpcnR1YWwgdm9pZCAgICBsb2dUaW1lc3RhbXAoY29uc3QgaW50NjRfdCB0cyk7Ci0gICAgICAgIHZpcnR1YWwgdm9pZCAgICBsb2dJbnRlZ2VyKGNvbnN0IGludCB4KTsKLSAgICAgICAgdmlydHVhbCB2b2lkICAgIGxvZ0Zsb2F0KGNvbnN0IGZsb2F0IHgpOwotICAgICAgICB2aXJ0dWFsIHZvaWQgICAgbG9nUElEKCk7Ci0gICAgICAgIHZpcnR1YWwgdm9pZCAgICBsb2dTdGFydChjb25zdCBjaGFyICpmbXQpOwotICAgICAgICB2aXJ0dWFsIHZvaWQgICAgbG9nRW5kKCk7Ci0gICAgICAgIHZpcnR1YWwgdm9pZCAgICBsb2dIYXNoKGxvZ19oYXNoX3QgaGFzaCk7Ci0KLSAgICAgICAgdmlydHVhbCBib29sICAgIGlzRW5hYmxlZCgpIGNvbnN0OwotICAgICAgICB2aXJ0dWFsIGJvb2wgICAgc2V0RW5hYmxlZChib29sIGVuYWJsZWQpOwotCi0gICAgcHJpdmF0ZToKLSAgICAgICAgbXV0YWJsZSBNdXRleCAgIG1Mb2NrOwotICAgIH07Ci0KLSAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotICAgIGNsYXNzIFJlYWRlciA6IHB1YmxpYyBSZWZCYXNlIHsKLSAgICBwdWJsaWM6Ci0gICAgICAgIC8vIEEgc25hcHNob3Qgb2YgYSByZWFkZXJzIGJ1ZmZlcgotICAgICAgICAvLyBUaGlzIGlzIHJhdyBkYXRhLiBObyBhbmFseXNpcyBoYXMgYmVlbiBkb25lIG9uIGl0Ci0gICAgICAgIGNsYXNzIFNuYXBzaG90IHsKLSAgICAgICAgcHVibGljOgotICAgICAgICAgICAgU25hcHNob3QoKSA6IG1EYXRhKE5VTEwpLCBtTG9zdCgwKSB7fQotCi0gICAgICAgICAgICBTbmFwc2hvdChzaXplX3QgYnVmZmVyU2l6ZSkgOiBtRGF0YShuZXcgdWludDhfdFtidWZmZXJTaXplXSkge30KLQotICAgICAgICAgICAgflNuYXBzaG90KCkgeyBkZWxldGVbXSBtRGF0YTsgfQotCi0gICAgICAgICAgICAvLyBjb3B5IG9mIHRoZSBidWZmZXIKLSAgICAgICAgICAgIHVpbnQ4X3QgKmRhdGEoKSBjb25zdCB7IHJldHVybiBtRGF0YTsgfQotCi0gICAgICAgICAgICAvLyBhbW91bnQgb2YgZGF0YSBsb3N0IChnaXZlbiBieSBhdWRpb191dGlsc19maWZvX3JlYWRlcikKLSAgICAgICAgICAgIHNpemVfdCAgIGxvc3QoKSBjb25zdCB7IHJldHVybiBtTG9zdDsgfQotCi0gICAgICAgICAgICAvLyBpdGVyYXRvciB0byBiZWdpbm5pbmcgb2YgcmVhZGFibGUgc2VnbWVudCBvZiBzbmFwc2hvdAotICAgICAgICAgICAgLy8gZGF0YSBiZXR3ZWVuIGJlZ2luIGFuZCBlbmQgaGFzIHZhbGlkIGVudHJpZXMKLSAgICAgICAgICAgIEVudHJ5SXRlcmF0b3IgYmVnaW4oKSB7IHJldHVybiBtQmVnaW47IH0KLQotICAgICAgICAgICAgLy8gaXRlcmF0b3IgdG8gZW5kIG9mIHJlYWRhYmxlIHNlZ21lbnQgb2Ygc25hcHNob3QKLSAgICAgICAgICAgIEVudHJ5SXRlcmF0b3IgZW5kKCkgeyByZXR1cm4gbUVuZDsgfQotCi0gICAgICAgIHByaXZhdGU6Ci0gICAgICAgICAgICBmcmllbmQgY2xhc3MgTWVyZ2VSZWFkZXI7Ci0gICAgICAgICAgICBmcmllbmQgY2xhc3MgUmVhZGVyOwotICAgICAgICAgICAgdWludDhfdCAgICAgICAgICAgICAgKm1EYXRhOwotICAgICAgICAgICAgc2l6ZV90ICAgICAgICAgICAgICAgIG1Mb3N0OwotICAgICAgICAgICAgRW50cnlJdGVyYXRvciBtQmVnaW47Ci0gICAgICAgICAgICBFbnRyeUl0ZXJhdG9yIG1FbmQ7Ci0gICAgICAgIH07Ci0KLSAgICAgICAgLy8gSW5wdXQgcGFyYW1ldGVyICdzaXplJyBpcyB0aGUgZGVzaXJlZCBzaXplIG9mIHRoZSB0aW1lbGluZSBpbiBieXRlIHVuaXRzLgotICAgICAgICAvLyBUaGUgc2l6ZSBvZiB0aGUgc2hhcmVkIG1lbW9yeSBtdXN0IGJlIGF0IGxlYXN0IFRpbWVsaW5lOjpzaGFyZWRTaXplKHNpemUpLgotICAgICAgICBSZWFkZXIoY29uc3Qgdm9pZCAqc2hhcmVkLCBzaXplX3Qgc2l6ZSk7Ci0gICAgICAgIFJlYWRlcihjb25zdCBzcDxJTWVtb3J5PiYgaU1lbW9yeSwgc2l6ZV90IHNpemUpOwotCi0gICAgICAgIHZpcnR1YWwgflJlYWRlcigpOwotCi0gICAgICAgIC8vIGdldCBzbmFwc2hvdCBvZiByZWFkZXJzIGZpZm8gYnVmZmVyLCBlZmZlY3RpdmVseSBjb25zdW1pbmcgdGhlIGJ1ZmZlcgotICAgICAgICBzdGQ6OnVuaXF1ZV9wdHI8U25hcHNob3Q+IGdldFNuYXBzaG90KCk7Ci0KLSAgICAgICAgYm9vbCAgICAgaXNJTWVtb3J5KGNvbnN0IHNwPElNZW1vcnk+JiBpTWVtb3J5KSBjb25zdDsKLQotICAgIHByb3RlY3RlZDoKLSAgICAgICAgLy8gcHJpbnQgYSBzdW1tYXJ5IG9mIHRoZSBwZXJmb3JtYW5jZSB0byB0aGUgY29uc29sZQotICAgICAgICB2b2lkICAgIGR1bXBMaW5lKGNvbnN0IFN0cmluZzgmIHRpbWVzdGFtcCwgU3RyaW5nOCYgYm9keSk7Ci0gICAgICAgIEVudHJ5SXRlcmF0b3IgICBoYW5kbGVGb3JtYXQoY29uc3QgRm9ybWF0RW50cnkgJmZtdEVudHJ5LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN0cmluZzggKnRpbWVzdGFtcCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdHJpbmc4ICpib2R5KTsKLSAgICAgICAgaW50IG1GZDsgICAgICAgICAgICAgICAgLy8gZmlsZSBkZXNjcmlwdG9yCi0gICAgICAgIGludCBtSW5kZW50OyAgICAgICAgICAgIC8vIGluZGVudGF0aW9uIGxldmVsCi0gICAgICAgIGludCBtTG9zdDsgICAgICAgICAgICAgIC8vIGJ5dGVzIG9mIGRhdGEgbG9zdCBiZWZvcmUgYnVmZmVyIHdhcyByZWFkCi0KLSAgICBwcml2YXRlOgotICAgICAgICBzdGF0aWMgY29uc3Qgc3RkOjpzZXQ8RXZlbnQ+IHN0YXJ0aW5nVHlwZXM7Ci0gICAgICAgIHN0YXRpYyBjb25zdCBzdGQ6OnNldDxFdmVudD4gZW5kaW5nVHlwZXM7Ci0KLSAgICAgICAgLy8gZGVjbGFyZWQgYXMgY29uc3QgYmVjYXVzZSBhdWRpb191dGlsc19maWZvKCkgY29uc3RydWN0b3IKLSAgICAgICAgc3A8SU1lbW9yeT4gbUlNZW1vcnk7ICAgICAgIC8vIHJlZi1jb3VudGVkIHZlcnNpb24sIGFzc2lnbmVkIG9ubHkgaW4gY29uc3RydWN0b3IKLQotICAgICAgICAvKmNvbnN0Ki8gU2hhcmVkKiBjb25zdCBtU2hhcmVkOyAgICAvLyByYXcgcG9pbnRlciB0byBzaGFyZWQgbWVtb3J5LCBhY3R1YWxseSBjb25zdCBidXQgbm90Ci0gICAgICAgIGF1ZGlvX3V0aWxzX2ZpZm8gKiBjb25zdCBtRmlmbzsgICAgICAgICAgICAgICAgIC8vIEZJRk8gaXRzZWxmLAotICAgICAgICAvLyBub24tTlVMTCB1bmxlc3MgY29uc3RydWN0b3IgZmFpbHMKLSAgICAgICAgYXVkaW9fdXRpbHNfZmlmb19yZWFkZXIgKiBjb25zdCBtRmlmb1JlYWRlcjsgICAgLy8gdXNlZCB0byByZWFkIGZyb20gRklGTywKLSAgICAgICAgLy8gbm9uLU5VTEwgdW5sZXNzIGNvbnN0cnVjdG9yIGZhaWxzCi0KLSAgICAgICAgLy8gU2VhcmNoZXMgZm9yIHRoZSBsYXN0IGVudHJ5IG9mIHR5cGUgPHR5cGU+IGluIHRoZSByYW5nZSBbZnJvbnQsIGJhY2spCi0gICAgICAgIC8vIGJhY2sgaGFzIHRvIGJlIGVudHJ5LWFsaWduZWQuIFJldHVybnMgbnVsbHB0ciBpZiBub25lIGVuY29udW50ZXJlZC4KLSAgICAgICAgc3RhdGljIGNvbnN0IHVpbnQ4X3QgKmZpbmRMYXN0RW50cnlPZlR5cGVzKGNvbnN0IHVpbnQ4X3QgKmZyb250LCBjb25zdCB1aW50OF90ICpiYWNrLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RkOjpzZXQ8RXZlbnQ+ICZ0eXBlcyk7Ci0KLSAgICAgICAgLy8gZHVtbXkgbWV0aG9kIGZvciBoYW5kbGluZyBhYnNlbnQgYXV0aG9yIGVudHJ5Ci0gICAgICAgIHZpcnR1YWwgdm9pZCBoYW5kbGVBdXRob3IoY29uc3QgQWJzdHJhY3RFbnRyeSYgLypmbXRFbnRyeSovLCBTdHJpbmc4KiAvKmJvZHkqLykge30KLSAgICB9OwotCi0gICAgLy8gV3JhcHBlciBmb3IgYSByZWFkZXIgd2l0aCBhIG5hbWUuIENvbnRhaW5zIGEgcG9pbnRlciB0byB0aGUgcmVhZGVyIGFuZCBhIHBvaW50ZXIgdG8gdGhlIG5hbWUKLSAgICBjbGFzcyBOYW1lZFJlYWRlciB7Ci0gICAgcHVibGljOgotICAgICAgICBOYW1lZFJlYWRlcigpIHsgbU5hbWVbMF0gPSAnXDAnOyB9IC8vIGZvciBWZWN0b3IKLSAgICAgICAgTmFtZWRSZWFkZXIoY29uc3Qgc3A8TkJMb2c6OlJlYWRlcj4mIHJlYWRlciwgY29uc3QgY2hhciAqbmFtZSkgOgotICAgICAgICAgICAgbVJlYWRlcihyZWFkZXIpCi0gICAgICAgICAgICB7IHN0cmxjcHkobU5hbWUsIG5hbWUsIHNpemVvZihtTmFtZSkpOyB9Ci0gICAgICAgIH5OYW1lZFJlYWRlcigpIHsgfQotICAgICAgICBjb25zdCBzcDxOQkxvZzo6UmVhZGVyPiYgIHJlYWRlcigpIGNvbnN0IHsgcmV0dXJuIG1SZWFkZXI7IH0KLSAgICAgICAgY29uc3QgY2hhciogICAgICAgICAgICAgICBuYW1lKCkgY29uc3QgeyByZXR1cm4gbU5hbWU7IH0KLQotICAgIHByaXZhdGU6Ci0gICAgICAgIHNwPE5CTG9nOjpSZWFkZXI+ICAgbVJlYWRlcjsKLSAgICAgICAgc3RhdGljIGNvbnN0IHNpemVfdCBrTWF4TmFtZSA9IDMyOwotICAgICAgICBjaGFyICAgICAgICAgICAgICAgIG1OYW1lW2tNYXhOYW1lXTsKLSAgICB9OwotCi0gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLSAgICAvLyBUaGlzIGNsYXNzIGlzIHVzZWQgdG8gcmVhZCBkYXRhIGZyb20gZWFjaCB0aHJlYWQncyBpbmRpdmlkdWFsIEZJRk8gaW4gc2hhcmVkIG1lbW9yeQotICAgIC8vIGFuZCB3cml0ZSBpdCB0byBhIHNpbmdsZSBGSUZPIGluIGxvY2FsIG1lbW9yeS4KLSAgICBjbGFzcyBNZXJnZXIgOiBwdWJsaWMgUmVmQmFzZSB7Ci0gICAgcHVibGljOgotICAgICAgICBNZXJnZXIoY29uc3Qgdm9pZCAqc2hhcmVkLCBzaXplX3Qgc2l6ZSk7Ci0KLSAgICAgICAgdmlydHVhbCB+TWVyZ2VyKCkge30KLQotICAgICAgICB2b2lkIGFkZFJlYWRlcihjb25zdCBOYW1lZFJlYWRlciAmcmVhZGVyKTsKLSAgICAgICAgLy8gVE9ETyBhZGQgcmVtb3ZlUmVhZGVyCi0gICAgICAgIHZvaWQgbWVyZ2UoKTsKLQotICAgICAgICAvLyBGSVhNRSBUaGlzIGlzIHJldHVybmluZyBhIHJlZmVyZW5jZSB0byBhIHNoYXJlZCB2YXJpYWJsZSB0aGF0IG5lZWRzIGEgbG9jawotICAgICAgICBjb25zdCBzdGQ6OnZlY3RvcjxOYW1lZFJlYWRlcj4mIGdldE5hbWVkUmVhZGVycygpIGNvbnN0OwotCi0gICAgcHJpdmF0ZToKLSAgICAgICAgLy8gdmVjdG9yIG9mIHRoZSByZWFkZXJzIHRoZSBtZXJnZXIgaXMgc3VwcG9zZWQgdG8gbWVyZ2UgZnJvbS4KLSAgICAgICAgLy8gZXZlcnkgcmVhZGVyIHJlYWRzIGZyb20gYSB3cml0ZXIncyBidWZmZXIKLSAgICAgICAgLy8gRklYTUUgTmVlZHMgdG8gYmUgcHJvdGVjdGVkIGJ5IGEgbG9jawotICAgICAgICBzdGQ6OnZlY3RvcjxOYW1lZFJlYWRlcj4gbU5hbWVkUmVhZGVyczsKLQotICAgICAgICBTaGFyZWQgKiBjb25zdCBtU2hhcmVkOyAvLyByYXcgcG9pbnRlciB0byBzaGFyZWQgbWVtb3J5Ci0gICAgICAgIHN0ZDo6dW5pcXVlX3B0cjxhdWRpb191dGlsc19maWZvPiBtRmlmbzsgLy8gRklGTyBpdHNlbGYKLSAgICAgICAgc3RkOjp1bmlxdWVfcHRyPGF1ZGlvX3V0aWxzX2ZpZm9fd3JpdGVyPiBtRmlmb1dyaXRlcjsgLy8gdXNlZCB0byB3cml0ZSB0byBGSUZPCi0gICAgfTsKLQotICAgIC8vIFRoaXMgY2xhc3MgaGFzIGEgcG9pbnRlciB0byB0aGUgRklGTyBpbiBsb2NhbCBtZW1vcnkgd2hpY2ggc3RvcmVzIHRoZSBtZXJnZWQKLSAgICAvLyBkYXRhIGNvbGxlY3RlZCBieSBOQkxvZzo6TWVyZ2VyIGZyb20gYWxsIE5hbWVkUmVhZGVycy4gSXQgaXMgdXNlZCB0byBwcm9jZXNzCi0gICAgLy8gdGhpcyBkYXRhIGFuZCB3cml0ZSB0aGUgcmVzdWx0IHRvIFBlcmZvcm1hbmNlQW5hbHlzaXMuCi0gICAgY2xhc3MgTWVyZ2VSZWFkZXIgOiBwdWJsaWMgUmVhZGVyIHsKLSAgICBwdWJsaWM6Ci0gICAgICAgIE1lcmdlUmVhZGVyKGNvbnN0IHZvaWQgKnNoYXJlZCwgc2l6ZV90IHNpemUsIE1lcmdlciAmbWVyZ2VyKTsKLQotICAgICAgICB2b2lkIGR1bXAoaW50IGZkLCBpbnQgaW5kZW50ID0gMCk7Ci0gICAgICAgIC8vIHByb2Nlc3MgYSBwYXJ0aWN1bGFyIHNuYXBzaG90IG9mIHRoZSByZWFkZXIKLSAgICAgICAgdm9pZCBnZXRBbmRQcm9jZXNzU25hcHNob3QoU25hcHNob3QgJiBzbmFwKTsKLSAgICAgICAgLy8gY2FsbCBnZXRTbmFwc2hvdCBvZiB0aGUgY29udGVudCBvZiB0aGUgcmVhZGVyJ3MgYnVmZmVyIGFuZCBwcm9jZXNzIHRoZSBkYXRhCi0gICAgICAgIHZvaWQgZ2V0QW5kUHJvY2Vzc1NuYXBzaG90KCk7Ci0KLSAgICBwcml2YXRlOgotICAgICAgICAvLyBGSVhNRSBOZWVkcyB0byBiZSBwcm90ZWN0ZWQgYnkgYSBsb2NrLAotICAgICAgICAvLyAgICAgICBiZWNhdXNlIGV2ZW4gdGhvdWdoIG91ciB1c2Ugb2YgaXQgaXMgcmVhZC1vbmx5IHRoZXJlIG1heSBiZSBhc3luY2hyb25vdXMgdXBkYXRlcwotICAgICAgICBjb25zdCBzdGQ6OnZlY3RvcjxOYW1lZFJlYWRlcj4mIG1OYW1lZFJlYWRlcnM7Ci0KLSAgICAgICAgLy8gYW5hbHl6ZXMsIGNvbXByZXNzZXMgYW5kIHN0b3JlcyB0aGUgbWVyZ2VkIGRhdGEKLSAgICAgICAgLy8gY29udGFpbnMgYSBzZXBhcmF0ZSBpbnN0YW5jZSBmb3IgZXZlcnkgYXV0aG9yICh0aHJlYWQpLCBhbmQgZm9yIGV2ZXJ5IHNvdXJjZSBmaWxlCi0gICAgICAgIC8vIGxvY2F0aW9uIHdpdGhpbiBlYWNoIGF1dGhvcgotICAgICAgICBSZXBvcnRQZXJmb3JtYW5jZTo6UGVyZm9ybWFuY2VBbmFseXNpc01hcCBtVGhyZWFkUGVyZm9ybWFuY2VBbmFseXNpczsKLQotICAgICAgICAvLyBoYW5kbGUgYXV0aG9yIGVudHJ5IGJ5IGxvb2tpbmcgdXAgdGhlIGF1dGhvcidzIG5hbWUgYW5kIGFwcGVuZGluZyBpdCB0byB0aGUgYm9keQotICAgICAgICAvLyByZXR1cm5zIG51bWJlciBvZiBieXRlcyByZWFkIGZyb20gZm10RW50cnkKLSAgICAgICAgdm9pZCBoYW5kbGVBdXRob3IoY29uc3QgQWJzdHJhY3RFbnRyeSAmZm10RW50cnksIFN0cmluZzggKmJvZHkpOwotICAgIH07Ci0KLSAgICAvLyBNZXJnZVRocmVhZCBpcyBhIHRocmVhZCB0aGF0IGNvbnRhaW5zIGEgTWVyZ2VyLiBJdCB3b3JrcyBhcyBhIHJldHJpZ2dlcmFibGUgb25lLXNob3Q6Ci0gICAgLy8gd2hlbiB0cmlnZ2VyZWQsIGl0IGF3YWtlcyBmb3IgYSBsYXBzZSBvZiB0aW1lLCBkdXJpbmcgd2hpY2ggaXQgcGVyaW9kaWNhbGx5IG1lcmdlczsgaWYKLSAgICAvLyByZXRyaWdnZXJlZCwgdGhlIHRpbWVvdXQgaXMgcmVzZXQuCi0gICAgLy8gVGhlIHRocmVhZCBpcyB0cmlnZ2VyZWQgb24gQXVkaW9GbGluZ2VyIGJpbmRlciBhY3Rpdml0eS4KLSAgICBjbGFzcyBNZXJnZVRocmVhZCA6IHB1YmxpYyBUaHJlYWQgewotICAgIHB1YmxpYzoKLSAgICAgICAgTWVyZ2VUaHJlYWQoTWVyZ2VyICZtZXJnZXIsIE1lcmdlUmVhZGVyICZtZXJnZVJlYWRlcik7Ci0gICAgICAgIHZpcnR1YWwgfk1lcmdlVGhyZWFkKCkgb3ZlcnJpZGU7Ci0KLSAgICAgICAgLy8gUmVzZXQgdGltZW91dCBhbmQgYWN0aXZhdGUgdGhyZWFkIHRvIG1lcmdlIHBlcmlvZGljYWxseSBpZiBpdCdzIGlkbGUKLSAgICAgICAgdm9pZCB3YWtldXAoKTsKLQotICAgICAgICAvLyBTZXQgdGltZW91dCBwZXJpb2QgdW50aWwgdGhlIG1lcmdpbmcgdGhyZWFkIGdvZXMgaWRsZSBhZ2FpbgotICAgICAgICB2b2lkIHNldFRpbWVvdXRVcyhpbnQgdGltZSk7Ci0KLSAgICBwcml2YXRlOgotICAgICAgICB2aXJ0dWFsIGJvb2wgdGhyZWFkTG9vcCgpIG92ZXJyaWRlOwotCi0gICAgICAgIC8vIHRoZSBtZXJnZXIgd2hvIGFjdHVhbGx5IGRvZXMgdGhlIHdvcmsgb2YgbWVyZ2luZyB0aGUgbG9ncwotICAgICAgICBNZXJnZXImICAgICBtTWVyZ2VyOwotCi0gICAgICAgIC8vIHRoZSBtZXJnZXJlYWRlciB1c2VkIHRvIHByb2Nlc3MgZGF0YSBtZXJnZWQgYnkgbU1lcmdlcgotICAgICAgICBNZXJnZVJlYWRlciYgbU1lcmdlUmVhZGVyOwotCi0gICAgICAgIC8vIG11dGV4IGZvciB0aGUgY29uZGl0aW9uIHZhcmlhYmxlCi0gICAgICAgIE11dGV4ICAgICAgIG1NdXRleDsKLQotICAgICAgICAvLyBjb25kaXRpb24gdmFyaWFibGUgdG8gYWN0aXZhdGUgbWVyZ2luZyBvbiB0aW1lb3V0ID49IDAKLSAgICAgICAgQ29uZGl0aW9uICAgbUNvbmQ7Ci0KLSAgICAgICAgLy8gdGltZSBsZWZ0IHVudGlsIHRoZSB0aHJlYWQgYmxvY2tzIGFnYWluIChpbiBtaWNyb3NlY29uZHMpCi0gICAgICAgIGludCAgICAgICAgIG1UaW1lb3V0VXM7Ci0KLSAgICAgICAgLy8gbWVyZ2luZyBwZXJpb2Qgd2hlbiB0aGUgdGhyZWFkIGlzIGF3YWtlCi0gICAgICAgIHN0YXRpYyBjb25zdCBpbnQgIGtUaHJlYWRTbGVlcFBlcmlvZFVzID0gMTAwMDAwMCAvKjFzKi87Ci0KLSAgICAgICAgLy8gaW5pdGlhbCB0aW1lb3V0IHZhbHVlIHdoZW4gdHJpZ2dlcmVkCi0gICAgICAgIHN0YXRpYyBjb25zdCBpbnQgIGtUaHJlYWRXYWtldXBQZXJpb2RVcyA9IDMwMDAwMDAgLyozcyovOwotICAgIH07Ci0KLX07ICAvLyBjbGFzcyBOQkxvZwotCi0vLyBUT0RPIHB1dCBzb21ld2hlcmUgZWxzZQotc3RhdGljIGlubGluZSBpbnQ2NF90IGdldF9tb25vdG9uaWNfbnMoKSB7Ci0gICAgdGltZXNwZWMgdHM7Ci0gICAgaWYgKGNsb2NrX2dldHRpbWUoQ0xPQ0tfTU9OT1RPTklDLCAmdHMpID09IDApIHsKLSAgICAgICAgcmV0dXJuICh1aW50NjRfdCkgdHMudHZfc2VjICogMTAwMCAqIDEwMDAgKiAxMDAwICsgdHMudHZfbnNlYzsKLSAgICB9Ci0gICAgcmV0dXJuIDA7IC8vIHNob3VsZCBub3QgaGFwcGVuLgotfQotCi19ICAgLy8gbmFtZXNwYWNlIGFuZHJvaWQKKyNpbmNsdWRlIDxtZWRpYS9uYmxvZy9FbnRyeS5oPgorI2luY2x1ZGUgPG1lZGlhL25ibG9nL0V2ZW50cy5oPgorI2luY2x1ZGUgPG1lZGlhL25ibG9nL1JlYWRlci5oPgorI2luY2x1ZGUgPG1lZGlhL25ibG9nL1RpbWVsaW5lLmg+CisjaW5jbHVkZSA8bWVkaWEvbmJsb2cvV3JpdGVyLmg+CiAKICNlbmRpZiAgLy8gQU5EUk9JRF9NRURJQV9OQkxPR19ICmRpZmYgLS1naXQgYS9tZWRpYS9saWJuYmxvZy9pbmNsdWRlL21lZGlhL25ibG9nL1BlcmZvcm1hbmNlQW5hbHlzaXMuaCBiL21lZGlhL2xpYm5ibG9nL2luY2x1ZGUvbWVkaWEvbmJsb2cvUGVyZm9ybWFuY2VBbmFseXNpcy5oCmluZGV4IGRkZmU5ZDYuLmQ3YzE2YjYgMTAwNjQ0Ci0tLSBhL21lZGlhL2xpYm5ibG9nL2luY2x1ZGUvbWVkaWEvbmJsb2cvUGVyZm9ybWFuY2VBbmFseXNpcy5oCisrKyBiL21lZGlhL2xpYm5ibG9nL2luY2x1ZGUvbWVkaWEvbmJsb2cvUGVyZm9ybWFuY2VBbmFseXNpcy5oCkBAIC0xOSwxNCArMTksMTc2IEBACiAKICNpbmNsdWRlIDxkZXF1ZT4KICNpbmNsdWRlIDxtYXA+CisjaW5jbHVkZSA8c3RyaW5nPgorI2luY2x1ZGUgPHV0aWxpdHk+CiAjaW5jbHVkZSA8dmVjdG9yPgogCisjaW5jbHVkZSA8bWVkaWEvbmJsb2cvRXZlbnRzLmg+CiAjaW5jbHVkZSA8bWVkaWEvbmJsb2cvUmVwb3J0UGVyZm9ybWFuY2UuaD4KKyNpbmNsdWRlIDx1dGlscy9UaW1lcnMuaD4KIAogbmFtZXNwYWNlIGFuZHJvaWQgewogCitjbGFzcyBTdHJpbmc4OworCiBuYW1lc3BhY2UgUmVwb3J0UGVyZm9ybWFuY2UgewogCisvLyBUT0RPIG1ha2UgdGhpcyBhIHRlbXBsYXRlZCBjbGFzcyBhbmQgcHV0IGl0IGluIGEgc2VwYXJhdGUgZmlsZS4KKy8vIFRoZSB0ZW1wbGF0ZWQgcGFyYW1ldGVycyB3b3VsZCBiZSBiaW4gc2l6ZSBhbmQgbG93IGxpbWl0LgorLyoKKyAqIEhpc3RvZ3JhbSBwcm92aWRlcyBhIHdheSB0byBzdG9yZSBudW1lcmljIGRhdGEgaW4gaGlzdG9ncmFtIGZvcm1hdCBhbmQgcmVhZCBpdCBhcyBhIHNlcmlhbGl6ZWQKKyAqIHN0cmluZy4gVGhlIHRlcm1zICJiaW4iIGFuZCAiYnVja2V0IiBhcmUgdXNlZCBpbnRlcmNoYW5nZWFibHkuCisgKgorICogVGhpcyBjbGFzcyBpcyBub3QgdGhyZWFkLXNhZmUuCisgKi8KK2NsYXNzIEhpc3RvZ3JhbSB7CitwdWJsaWM6CisgICAgc3RydWN0IENvbmZpZyB7CisgICAgICAgIGNvbnN0IGRvdWJsZSBiaW5TaXplOyAgIC8vIFRPRE8gdGVtcGxhdGUgdHlwZQorICAgICAgICBjb25zdCBzaXplX3QgbnVtQmluczsKKyAgICAgICAgY29uc3QgZG91YmxlIGxvdzsgICAgICAgLy8gVE9ETyB0ZW1wbGF0ZSB0eXBlCisgICAgfTsKKworICAgIC8vIEhpc3RvZ3JhbXMgYXJlIGNvbnN0cnVjdGVkIHdpdGggZml4ZWQgY29uZmlndXJhdGlvbiBudW1iZXJzLiBEeW5hbWljIGNvbmZpZ3VyYXRpb24gYmFzZWQKKyAgICAvLyB0aGUgZGF0YSBpcyBwb3NzaWJsZSBidXQgY29tcGxleCBiZWNhdXNlCisgICAgLy8gLSBkYXRhIHBvaW50cyBhcmUgYWRkZWQgb25lIGJ5IG9uZSwgbm90IHByb2Nlc3NlZCBhcyBhIGJhdGNoLgorICAgIC8vIC0gSGlzdG9ncmFtcyB3aXRoIGRpZmZlcmVudCBjb25maWd1cmF0aW9uIHBhcmFtZXRlcnMgYXJlIHRyaWNreSB0byBhZ2dyZWdhdGUsIGFuZCB0aGV5CisgICAgLy8gICB3aWxsIG5lZWQgdG8gYmUgYWdncmVnYXRlZCBhdCB0aGUgTWVkaWEgTWV0cmljcyBjbG91ZCBzaWRlLgorICAgIC8vIC0gbm90IHByb3ZpZGluZyBsaW1pdHMgdGhlb3JldGljYWxseSBhbGxvd3MgZm9yIGluZmluaXRlIG51bWJlciBvZiBidWNrZXRzLgorCisgICAgLyoqCisgICAgICogXGJyaWVmIENyZWF0ZXMgYSBIaXN0b2dyYW0gb2JqZWN0LgorICAgICAqCisgICAgICogXHBhcmFtIGJpblNpemUgdGhlIHdpZHRoIG9mIGVhY2ggYmluIG9mIHRoZSBoaXN0b2dyYW0sIG11c3QgYmUgZ3JlYXRlciB0aGFuIDAuCisgICAgICogICAgICAgICAgICAgICAgVW5pdHMgYXJlIHdoYXRldmVyIGRhdGEgdGhlIGNhbGxlciBkZWNpZGVzIHRvIHN0b3JlLgorICAgICAqIFxwYXJhbSBudW1CaW5zIHRoZSBudW1iZXIgb2YgYmlucyBkZXNpcmVkIGluIHRoZSBoaXN0b2dyYW0gcmFuZ2UsIG11c3QgYmUgZ3JlYXRlciB0aGFuIDAuCisgICAgICogXHBhcmFtIGxvdyAgICAgdGhlIGxvd2VyIGJvdW5kIG9mIHRoZSBoaXN0b2dyYW0gYnVja2V0IHZhbHVlcy4KKyAgICAgKiAgICAgICAgICAgICAgICBVbml0cyBhcmUgd2hhdGV2ZXIgZGF0YSB0aGUgY2FsbGVyIGRlY2lkZXMgdG8gc3RvcmUuCisgICAgICogICAgICAgICAgICAgICAgTm90ZSB0aGF0IHRoZSB1cHBlciBib3VuZCBjYW4gYmUgY2FsY3VsYXRlZCBieSB0aGUgZm9sbG93aW5nOgorICAgICAqICAgICAgICAgICAgICAgICAgdXBwZXIgPSBsb3dlciArIGJpblNpemUgKiBudW1CaW5zLgorICAgICAqLworICAgIEhpc3RvZ3JhbShkb3VibGUgYmluU2l6ZSwgc2l6ZV90IG51bUJpbnMsIGRvdWJsZSBsb3cgPSAwLikKKyAgICAgICAgOiBtQmluU2l6ZShiaW5TaXplKSwgbU51bUJpbnMobnVtQmlucyksIG1Mb3cobG93KSwgbUJpbnMobU51bUJpbnMgKyAyKSB7fQorCisgICAgSGlzdG9ncmFtKGNvbnN0IENvbmZpZyAmYykKKyAgICAgICAgOiBIaXN0b2dyYW0oYy5iaW5TaXplLCBjLm51bUJpbnMsIGMubG93KSB7fQorCisgICAgLyoqCisgICAgICogXGJyaWVmIEFkZCBhIGRhdGEgcG9pbnQgdG8gdGhlIGhpc3RvZ3JhbS4gVGhlIHZhbHVlIG9mIHRoZSBkYXRhIHBvaW50CisgICAgICogICAgICAgIGlzIHJvdW5kZWQgdG8gdGhlIG5lYXJlc3QgbXVsdGlwbGUgb2YgdGhlIGJpbiBzaXplIChiZWZvcmUgYWNjb3VudGluZworICAgICAqICAgICAgICBmb3IgdGhlIGxvd2VyIGJvdW5kIG9mZnNldCwgd2hpY2ggbWF5IG5vdCBiZSBhIG11bHRpcGxlIG9mIHRoZSBiaW4gc2l6ZSkuCisgICAgICoKKyAgICAgKiBccGFyYW0gdmFsdWUgdGhlIHZhbHVlIG9mIHRoZSBkYXRhIHBvaW50IHRvIGFkZC4KKyAgICAgKi8KKyAgICB2b2lkIGFkZChkb3VibGUgdmFsdWUpOworCisgICAgLyoqCisgICAgICogXGJyaWVmIFJlbW92ZXMgYWxsIGRhdGEgcG9pbnRzIGZyb20gdGhlIGhpc3RvZ3JhbS4KKyAgICAgKi8KKyAgICB2b2lkIGNsZWFyKCk7CisKKyAgICAvKioKKyAgICAgKiBcYnJpZWYgUmV0dXJucyB0aGUgdG90YWwgbnVtYmVyIG9mIGRhdGEgcG9pbnRzIGFkZGVkIHRvIHRoZSBoaXN0b2dyYW0uCisgICAgICoKKyAgICAgKiBccmV0dXJuIHRoZSB0b3RhbCBudW1iZXIgb2YgZGF0YSBwb2ludHMgaW4gdGhlIGhpc3RvZ3JhbS4KKyAgICAgKi8KKyAgICB1aW50NjRfdCB0b3RhbENvdW50KCkgY29uc3Q7CisKKyAgICAvKioKKyAgICAgKiBcYnJpZWYgU2VyaWFsaXplcyB0aGUgaGlzdG9ncmFtIGludG8gYSBzdHJpbmcuIFRoZSBmb3JtYXQgaXMgY2hvc2VuIHRvIGJlIGNvbXBhdGlibGUgd2l0aAorICAgICAqICAgICAgICB0aGUgaGlzdG9ncmFtIHJlcHJlc2VudGF0aW9uIHRvIHNlbmQgdG8gdGhlIE1lZGlhIE1ldHJpY3Mgc2VydmljZS4KKyAgICAgKgorICAgICAqICAgICAgICBUaGUgc3RyaW5nIGlzIGFzIGZvbGxvd3M6CisgICAgICogICAgICAgICAgYmluU2l6ZSxudW1CaW5zLGxvdyx7LTF8bG93Q291bnQsLi4uLGJpbkluZGV4fGNvdW50LC4uLixudW1CaW5zfGhpZ2hDb3VudH0KKyAgICAgKgorICAgICAqICAgICAgICAtIGJpbkluZGV4IGlzIGFuIGludGVnZXIgd2l0aCAwIDw9IGJpbkluZGV4IDwgbnVtQmlucy4KKyAgICAgKiAgICAgICAgLSBjb3VudCBpcyB0aGUgbnVtYmVyIG9mIG9jY3VycmVuY2VzIG9mIHRoZSAocm91bmRlZCkgdmFsdWUKKyAgICAgKiAgICAgICAgICBsb3cgKyBiaW5TaXplICogYnVja2V0SW5kZXguCisgICAgICogICAgICAgIC0gbG93Q291bnQgaXMgdGhlIG51bWJlciBvZiAocm91bmRlZCkgdmFsdWVzIGxlc3MgdGhhbiBsb3cuCisgICAgICogICAgICAgIC0gaGlnaENvdW50IGlzIHRoZSBudW1iZXIgb2YgKHJvdW5kZWQpIHZhbHVlcyBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8KKyAgICAgKiAgICAgICAgICBsb3cgKyBiaW5TaXplICogbnVtQmlucy4KKyAgICAgKiAgICAgICAgLSBhIGJpbkluZGV4IG1heSBiZSBza2lwcGVkIGlmIGl0cyBjb3VudCBpcyAwLgorICAgICAqCisgICAgICogXHJldHVybiB0aGUgaGlzdG9ncmFtIHNlcmlhbGl6ZWQgYXMgYSBzdHJpbmcuCisgICAgICovCisgICAgc3RkOjpzdHJpbmcgdG9TdHJpbmcoKSBjb25zdDsKKworICAgIC8vIERyYXcgbG9nIHNjYWxlIHNpZGV3YXlzIGhpc3RvZ3JhbSBhcyBBU0NJSSBhcnQgYW5kIHN0b3JlIGFzIGEgc3RkOjpzdHJpbmcuCisgICAgLy8gRW1wdHkgc3RyaW5nIGlzIHJldHVybmVkIGlmIHRvdGFsQ291bnQoKSA9PSAwLgorICAgIHN0ZDo6c3RyaW5nIGFzY2lpQXJ0U3RyaW5nKHNpemVfdCBpbmRlbnQgPSAwKSBjb25zdDsKKworcHJpdmF0ZToKKyAgICAvLyBIaXN0b2dyYW0gdmVyc2lvbiBudW1iZXIuCisgICAgc3RhdGljIGNvbnN0ZXhwciBpbnQga1ZlcnNpb24gPSAxOworCisgICAgY29uc3QgZG91YmxlIG1CaW5TaXplOyAgICAgICAgICAvLyBTaXplIG9mIGVhY2ggYnVja2V0CisgICAgY29uc3Qgc2l6ZV90IG1OdW1CaW5zOyAgICAgICAgICAvLyBOdW1iZXIgb2YgYnVja2V0cyBpbiByYW5nZSAoZXhjbHVkZXMgbG93IGFuZCBoaWdoKQorICAgIGNvbnN0IGRvdWJsZSBtTG93OyAgICAgICAgICAgICAgLy8gTG93ZXIgYm91bmQgb2YgdmFsdWVzCisKKyAgICAvLyBEYXRhIHN0cnVjdHVyZSB0byBzdG9yZSB0aGUgYWN0dWFsIGhpc3RvZ3JhbS4gQ291bnRzIG9mIGJpbiB2YWx1ZXMgbGVzcyB0aGFuIG1Mb3cKKyAgICAvLyBhcmUgc3RvcmVkIGluIG1CaW5zWzBdLiBCaW4gaW5kZXggaSBjb3JyZXNwb25kcyB0byBtQmluc1tpKzFdLiBDb3VudHMgb2YgYmluIHZhbHVlcworICAgIC8vID49IGhpZ2ggYXJlIHN0b3JlZCBpbiBtQmluc1ttTnVtQmlucyArIDFdLgorICAgIHN0ZDo6dmVjdG9yPHVpbnQ2NF90PiBtQmluczsKKworICAgIHVpbnQ2NF90IG1Ub3RhbENvdW50ID0gMDsgICAgICAgLy8gVG90YWwgbnVtYmVyIG9mIHZhbHVlcyByZWNvcmRlZAorfTsKKworLy8gVGhpcyBpcyBlc3NlbnRpYWxseSB0aGUgc2FtZSBhcyBjbGFzcyBQZXJmb3JtYW5jZUFuYWx5c2lzLCBidXQgUGVyZm9ybWFuY2VBbmFseXNpcworLy8gYWxzbyBkb2VzIHNvbWUgYWRkaXRpb25hbCBhbmFseXppbmcgb2YgZGF0YSwgd2hpbGUgdGhlIHB1cnBvc2Ugb2YgdGhpcyBzdHJ1Y3QgaXMKKy8vIHRvIGhvbGQgZGF0YS4KK3N0cnVjdCBQZXJmb3JtYW5jZURhdGEgeworICAgIC8vIFRPRE8gdGhlIEhpc3RvZ3JhbTo6Q29uZmlnIG51bWJlcnMgYmVsb3cgYXJlIGZvciBGYXN0TWl4ZXIuCisgICAgLy8gU3BlY2lmeSBkaWZmZXJlbnQgbnVtYmVycyBmb3Igb3RoZXIgdGhyZWFkIHR5cGVzLgorCisgICAgLy8gVmFsdWVzIGJhc2VkIG9uIG1VbmRlcnJ1bk5zIGFuZCBtT3ZlcnJ1bk5zIGluIEZhc3RNaXhlci5jcHAgZm9yIGZyYW1lQ291bnQgPSAxOTIKKyAgICAvLyBhbmQgbVNhbXBsZVJhdGUgPSA0ODAwMCwgd2hpY2ggY29ycmVzcG9uZCB0byAyIGFuZCA3IHNlY29uZHMuCisgICAgc3RhdGljIGNvbnN0ZXhwciBIaXN0b2dyYW06OkNvbmZpZyBrV29ya0NvbmZpZyA9IHsgMC4yNSwgMjAsIDIufTsKKworICAgIC8vIFZhbHVlcyBiYXNlZCBvbiB0cmlhbCBhbmQgZXJyb3IgbG9nZ2luZy4gTmVlZCBhIGJldHRlciB3YXkgdG8gZGV0ZXJtaW5lCisgICAgLy8gYmluIHNpemUgYW5kIGxvd2VyL3VwcGVyIGxpbWl0cy4KKyAgICBzdGF0aWMgY29uc3RleHByIEhpc3RvZ3JhbTo6Q29uZmlnIGtMYXRlbmN5Q29uZmlnID0geyAyLiwgMTAsIDEwLn07CisKKyAgICAvLyBWYWx1ZXMgYmFzZWQgb24gdHJpYWwgYW5kIGVycm9yIGxvZ2dpbmcuIE5lZWQgYSBiZXR0ZXIgd2F5IHRvIGRldGVybWluZQorICAgIC8vIGJpbiBzaXplIGFuZCBsb3dlci91cHBlciBsaW1pdHMuCisgICAgc3RhdGljIGNvbnN0ZXhwciBIaXN0b2dyYW06OkNvbmZpZyBrV2FybXVwQ29uZmlnID0geyA1LiwgMTAsIDEwLn07CisKKyAgICBOQkxvZzo6dGhyZWFkX2luZm9fdCB0aHJlYWRJbmZve307CisgICAgTkJMb2c6OnRocmVhZF9wYXJhbXNfdCB0aHJlYWRQYXJhbXN7fTsKKworICAgIC8vIFBlcmZvcm1hbmNlIERhdGEKKyAgICBIaXN0b2dyYW0gd29ya0hpc3R7a1dvcmtDb25maWd9OworICAgIEhpc3RvZ3JhbSBsYXRlbmN5SGlzdHtrTGF0ZW5jeUNvbmZpZ307CisgICAgSGlzdG9ncmFtIHdhcm11cEhpc3R7a1dhcm11cENvbmZpZ307CisgICAgaW50NjRfdCB1bmRlcnJ1bnMgPSAwOworICAgIHN0YXRpYyBjb25zdGV4cHIgc2l6ZV90IGtNYXhTbmFwc2hvdHNUb1N0b3JlID0gMjU2OworICAgIHN0ZDo6ZGVxdWU8c3RkOjpwYWlyPE5CTG9nOjpFdmVudCwgaW50NjRfdCAvKnRpbWVzdGFtcCovPj4gc25hcHNob3RzOworICAgIGludDY0X3Qgb3ZlcnJ1bnMgPSAwOworICAgIG5zZWNzX3QgYWN0aXZlID0gMDsKKyAgICBuc2Vjc190IHN0YXJ0e3N5c3RlbVRpbWUoKX07CisKKyAgICAvLyBSZXNldCB0aGUgcGVyZm9ybWFuY2UgZGF0YS4gVGhpcyBkb2VzIG5vdCByZXByZXNlbnQgYSB0aHJlYWQgc3RhdGUgY2hhbmdlLgorICAgIC8vIFRocmVhZCBpbmZvIGlzIG5vdCByZXNldCBoZXJlIGJlY2F1c2UgdGhlIGRhdGEgaXMgbWVhbnQgdG8gYmUgYSBjb250aW51YXRpb24gb2YgdGhlIHRocmVhZAorICAgIC8vIHRoYXQgc3RydWN0IFBlcmZvcm1hbmNlRGF0YSBpcyBhc3NvY2lhdGVkIHdpdGguCisgICAgdm9pZCByZXNldCgpIHsKKyAgICAgICAgd29ya0hpc3QuY2xlYXIoKTsKKyAgICAgICAgbGF0ZW5jeUhpc3QuY2xlYXIoKTsKKyAgICAgICAgd2FybXVwSGlzdC5jbGVhcigpOworICAgICAgICB1bmRlcnJ1bnMgPSAwOworICAgICAgICBvdmVycnVucyA9IDA7CisgICAgICAgIGFjdGl2ZSA9IDA7CisgICAgICAgIHN0YXJ0ID0gc3lzdGVtVGltZSgpOworICAgIH0KKworICAgIC8vIFJldHVybiB0cnVlIGlmIHBlcmZvcm1hbmNlIGRhdGEgaGFzIG5vdCBiZWVuIHJlY29yZGVkIHlldCwgZmFsc2Ugb3RoZXJ3aXNlLgorICAgIGJvb2wgZW1wdHkoKSBjb25zdCB7CisgICAgICAgIHJldHVybiB3b3JrSGlzdC50b3RhbENvdW50KCkgPT0gMCAmJiBsYXRlbmN5SGlzdC50b3RhbENvdW50KCkgPT0gMAorICAgICAgICAgICAgICAgICYmIHdhcm11cEhpc3QudG90YWxDb3VudCgpID09IDAgJiYgdW5kZXJydW5zID09IDAgJiYgb3ZlcnJ1bnMgPT0gMAorICAgICAgICAgICAgICAgICYmIGFjdGl2ZSA9PSAwOworICAgIH0KK307CisKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKIGNsYXNzIFBlcmZvcm1hbmNlQW5hbHlzaXM7CiAKIC8vIGEgbWFwIG9mIFBlcmZvcm1hbmNlQW5hbHlzaXMgaW5zdGFuY2VzCkBAIC04MCw3ICsyNDIsNyBAQAogICAgIHN0ZDo6ZGVxdWU8dGltZXN0YW1wPiBtUGVha1RpbWVzdGFtcHM7CiAKICAgICAvLyBzdG9yZXMgYnVmZmVyIHBlcmlvZCBoaXN0b2dyYW1zIHdpdGggdGltZXN0YW1wIG9mIGZpcnN0IHNhbXBsZQotICAgIHN0ZDo6ZGVxdWU8c3RkOjpwYWlyPHRpbWVzdGFtcCwgSGlzdG9ncmFtPj4gbUhpc3RzOworICAgIHN0ZDo6ZGVxdWU8c3RkOjpwYWlyPHRpbWVzdGFtcCwgSGlzdD4+IG1IaXN0czsKIAogICAgIC8vIFBhcmFtZXRlcnMgdXNlZCB3aGVuIGRldGVjdGluZyBvdXRsaWVycwogICAgIHN0cnVjdCBCdWZmZXJQZXJpb2QgewpAQCAtMTE5LDggKzI4MSw3IEBACiB2b2lkIGR1bXAoaW50IGZkLCBpbnQgaW5kZW50LCBQZXJmb3JtYW5jZUFuYWx5c2lzTWFwICZ0aHJlYWRQZXJmb3JtYW5jZUFuYWx5c2lzKTsKIHZvaWQgZHVtcExpbmUoaW50IGZkLCBpbnQgaW5kZW50LCBjb25zdCBTdHJpbmc4ICZib2R5KTsKIAotfSAvLyBuYW1lc3BhY2UgUmVwb3J0UGVyZm9ybWFuY2UKLQorfSAgIC8vIG5hbWVzcGFjZSBSZXBvcnRQZXJmb3JtYW5jZQogfSAgIC8vIG5hbWVzcGFjZSBhbmRyb2lkCiAKICNlbmRpZiAgLy8gQU5EUk9JRF9NRURJQV9QRVJGT1JNQU5DRUFOQUxZU0lTX0gKZGlmZiAtLWdpdCBhL21lZGlhL2xpYm5ibG9nL2luY2x1ZGUvbWVkaWEvbmJsb2cvUmVhZGVyLmggYi9tZWRpYS9saWJuYmxvZy9pbmNsdWRlL21lZGlhL25ibG9nL1JlYWRlci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI0OTVlOGMKLS0tIC9kZXYvbnVsbAorKysgYi9tZWRpYS9saWJuYmxvZy9pbmNsdWRlL21lZGlhL25ibG9nL1JlYWRlci5oCkBAIC0wLDAgKzEsMTM1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE4IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KKworI2lmbmRlZiBBTkRST0lEX01FRElBX05CTE9HX1JFQURFUl9ICisjZGVmaW5lIEFORFJPSURfTUVESUFfTkJMT0dfUkVBREVSX0gKKworI2luY2x1ZGUgPG1lbW9yeT4KKyNpbmNsdWRlIDxzdGRkZWYuaD4KKyNpbmNsdWRlIDxzdHJpbmc+CisjaW5jbHVkZSA8dW5vcmRlcmVkX3NldD4KKworI2luY2x1ZGUgPG1lZGlhL25ibG9nL0VudHJ5Lmg+CisjaW5jbHVkZSA8bWVkaWEvbmJsb2cvRXZlbnRzLmg+CisjaW5jbHVkZSA8dXRpbHMvUmVmQmFzZS5oPgorCitjbGFzcyBhdWRpb191dGlsc19maWZvOworY2xhc3MgYXVkaW9fdXRpbHNfZmlmb19yZWFkZXI7CisKK25hbWVzcGFjZSBhbmRyb2lkIHsKKworY2xhc3MgSU1lbW9yeTsKK2NsYXNzIFN0cmluZzg7CisKK25hbWVzcGFjZSBOQkxvZyB7CisKK3N0cnVjdCBTaGFyZWQ7CisKKy8vIE5CTG9nIFJlYWRlciBBUEkKKworY2xhc3MgU25hcHNob3Q7ICAgICAvLyBGb3J3YXJkIGRlY2xhcmF0aW9uIG5lZWRlZCBmb3IgUmVhZGVyOjpnZXRTbmFwc2hvdCgpCisKK2NsYXNzIFJlYWRlciA6IHB1YmxpYyBSZWZCYXNlIHsKK3B1YmxpYzoKKyAgICAvLyBJbnB1dCBwYXJhbWV0ZXIgJ3NpemUnIGlzIHRoZSBkZXNpcmVkIHNpemUgb2YgdGhlIHRpbWVsaW5lIGluIGJ5dGUgdW5pdHMuCisgICAgLy8gVGhlIHNpemUgb2YgdGhlIHNoYXJlZCBtZW1vcnkgbXVzdCBiZSBhdCBsZWFzdCBUaW1lbGluZTo6c2hhcmVkU2l6ZShzaXplKS4KKyAgICBSZWFkZXIoY29uc3Qgdm9pZCAqc2hhcmVkLCBzaXplX3Qgc2l6ZSwgY29uc3Qgc3RkOjpzdHJpbmcgJm5hbWUpOworICAgIFJlYWRlcihjb25zdCBzcDxJTWVtb3J5PiYgaU1lbW9yeSwgc2l6ZV90IHNpemUsIGNvbnN0IHN0ZDo6c3RyaW5nICZuYW1lKTsKKyAgICB+UmVhZGVyKCkgb3ZlcnJpZGU7CisKKyAgICAvLyBnZXQgc25hcHNob3Qgb2YgcmVhZGVycyBmaWZvIGJ1ZmZlciwgZWZmZWN0aXZlbHkgY29uc3VtaW5nIHRoZSBidWZmZXIKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8U25hcHNob3Q+IGdldFNuYXBzaG90KGJvb2wgZmx1c2ggPSB0cnVlKTsKKyAgICBib29sICAgICBpc0lNZW1vcnkoY29uc3Qgc3A8SU1lbW9yeT4mIGlNZW1vcnkpIGNvbnN0OworICAgIGNvbnN0IHN0ZDo6c3RyaW5nICZuYW1lKCkgY29uc3QgeyByZXR1cm4gbU5hbWU7IH0KKworcHJpdmF0ZToKKyAgICAvLyBBbW91bnQgb2YgdHJpZXMgZm9yIHJlYWRlciB0byBjYXRjaCB1cCB3aXRoIHdyaXRlciBpbiBnZXRTbmFwc2hvdCgpLgorICAgIHN0YXRpYyBjb25zdGV4cHIgaW50IGtNYXhPYnRhaW5UcmllcyA9IDM7CisKKyAgICAvLyBpbnZhbGlkQmVnaW5UeXBlcyBhbmQgaW52YWxpZEVuZFR5cGVzIGFyZSB1c2VkIHRvIGFsaWduIHRoZSBTbmFwc2hvdDo6YmVnaW4oKSBhbmQKKyAgICAvLyBTbmFwc2hvdDo6ZW5kKCkgRW50cnlJdGVyYXRvcnMgdG8gdmFsaWQgZW50cmllcy4KKyAgICBzdGF0aWMgY29uc3Qgc3RkOjp1bm9yZGVyZWRfc2V0PEV2ZW50PiBpbnZhbGlkQmVnaW5UeXBlczsKKyAgICBzdGF0aWMgY29uc3Qgc3RkOjp1bm9yZGVyZWRfc2V0PEV2ZW50PiBpbnZhbGlkRW5kVHlwZXM7CisKKyAgICAvLyBkZWNsYXJlZCBhcyBjb25zdCBiZWNhdXNlIGF1ZGlvX3V0aWxzX2ZpZm8oKSBjb25zdHJ1Y3RvcgorICAgIHNwPElNZW1vcnk+IG1JTWVtb3J5OyAgICAgICAvLyByZWYtY291bnRlZCB2ZXJzaW9uLCBhc3NpZ25lZCBvbmx5IGluIGNvbnN0cnVjdG9yCisKKyAgICBjb25zdCBzdGQ6OnN0cmluZyBtTmFtZTsgICAgICAgICAgICAvLyBuYW1lIG9mIHJlYWRlciAoYWN0dWFsbHkgbmFtZSBvZiB3cml0ZXIpCisgICAgLypjb25zdCovIFNoYXJlZCogY29uc3QgbVNoYXJlZDsgICAgLy8gcmF3IHBvaW50ZXIgdG8gc2hhcmVkIG1lbW9yeSwgYWN0dWFsbHkgY29uc3QgYnV0IG5vdAorICAgIGF1ZGlvX3V0aWxzX2ZpZm8gKiBjb25zdCBtRmlmbzsgICAgICAgICAgICAgICAgIC8vIEZJRk8gaXRzZWxmLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIG5vbi1OVUxMIHVubGVzcyBjb25zdHJ1Y3RvciBmYWlscworICAgIGF1ZGlvX3V0aWxzX2ZpZm9fcmVhZGVyICogY29uc3QgbUZpZm9SZWFkZXI7ICAgIC8vIHVzZWQgdG8gcmVhZCBmcm9tIEZJRk8sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gbm9uLU5VTEwgdW5sZXNzIGNvbnN0cnVjdG9yIGZhaWxzCisKKyAgICAvLyBTZWFyY2hlcyBmb3IgdGhlIGxhc3QgdmFsaWQgZW50cnkgaW4gdGhlIHJhbmdlIFtmcm9udCwgYmFjaykKKyAgICAvLyBiYWNrIGhhcyB0byBiZSBlbnRyeS1hbGlnbmVkLiBSZXR1cm5zIG51bGxwdHIgaWYgbm9uZSBlbmNvbnVudGVyZWQuCisgICAgc3RhdGljIGNvbnN0IHVpbnQ4X3QgKmZpbmRMYXN0VmFsaWRFbnRyeShjb25zdCB1aW50OF90ICpmcm9udCwgY29uc3QgdWludDhfdCAqYmFjaywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RkOjp1bm9yZGVyZWRfc2V0PEV2ZW50PiAmaW52YWxpZFR5cGVzKTsKK307CisKKy8vIEEgc25hcHNob3Qgb2YgYSByZWFkZXJzIGJ1ZmZlcgorLy8gVGhpcyBpcyByYXcgZGF0YS4gTm8gYW5hbHlzaXMgaGFzIGJlZW4gZG9uZSBvbiBpdAorY2xhc3MgU25hcHNob3QgeworcHVibGljOgorICAgIH5TbmFwc2hvdCgpIHsgZGVsZXRlW10gbURhdGE7IH0KKworICAgIC8vIGFtb3VudCBvZiBkYXRhIGxvc3QgKGdpdmVuIGJ5IGF1ZGlvX3V0aWxzX2ZpZm9fcmVhZGVyKQorICAgIHNpemVfdCBsb3N0KCkgY29uc3QgeyByZXR1cm4gbUxvc3Q7IH0KKworICAgIC8vIGl0ZXJhdG9yIHRvIGJlZ2lubmluZyBvZiByZWFkYWJsZSBzZWdtZW50IG9mIHNuYXBzaG90CisgICAgLy8gZGF0YSBiZXR3ZWVuIGJlZ2luIGFuZCBlbmQgaGFzIHZhbGlkIGVudHJpZXMKKyAgICBFbnRyeUl0ZXJhdG9yIGJlZ2luKCkgY29uc3QgeyByZXR1cm4gbUJlZ2luOyB9CisKKyAgICAvLyBpdGVyYXRvciB0byBlbmQgb2YgcmVhZGFibGUgc2VnbWVudCBvZiBzbmFwc2hvdAorICAgIEVudHJ5SXRlcmF0b3IgZW5kKCkgY29uc3QgeyByZXR1cm4gbUVuZDsgfQorCitwcml2YXRlOgorICAgIFNuYXBzaG90KCkgPSBkZWZhdWx0OworICAgIGV4cGxpY2l0IFNuYXBzaG90KHNpemVfdCBidWZmZXJTaXplKSA6IG1EYXRhKG5ldyB1aW50OF90W2J1ZmZlclNpemVdKSB7fQorICAgIGZyaWVuZCBzdGQ6OnVuaXF1ZV9wdHI8U25hcHNob3Q+IFJlYWRlcjo6Z2V0U25hcHNob3QoYm9vbCBmbHVzaCk7CisKKyAgICB1aW50OF90ICogY29uc3QgICAgICAgbURhdGEgPSBudWxscHRyOworICAgIHNpemVfdCAgICAgICAgICAgICAgICBtTG9zdCA9IDA7CisgICAgRW50cnlJdGVyYXRvciAgICAgICAgIG1CZWdpbjsKKyAgICBFbnRyeUl0ZXJhdG9yICAgICAgICAgbUVuZDsKK307CisKKy8vIFRPRE8gbW92ZSB0aGlzIHRvIE1lZGlhTG9nU2VydmljZT8KK2NsYXNzIER1bXBSZWFkZXIgOiBwdWJsaWMgTkJMb2c6OlJlYWRlciB7CitwdWJsaWM6CisgICAgRHVtcFJlYWRlcihjb25zdCB2b2lkICpzaGFyZWQsIHNpemVfdCBzaXplLCBjb25zdCBzdGQ6OnN0cmluZyAmbmFtZSkKKyAgICAgICAgOiBSZWFkZXIoc2hhcmVkLCBzaXplLCBuYW1lKSB7fQorICAgIER1bXBSZWFkZXIoY29uc3Qgc3A8SU1lbW9yeT4mIGlNZW1vcnksIHNpemVfdCBzaXplLCBjb25zdCBzdGQ6OnN0cmluZyAmbmFtZSkKKyAgICAgICAgOiBSZWFkZXIoaU1lbW9yeSwgc2l6ZSwgbmFtZSkge30KKyAgICB2b2lkIGR1bXAoaW50IGZkLCBzaXplX3QgaW5kZW50ID0gMCk7Citwcml2YXRlOgorICAgIHZvaWQgaGFuZGxlQXV0aG9yKGNvbnN0IEFic3RyYWN0RW50cnkmIGZtdEVudHJ5IF9fdW51c2VkLCBTdHJpbmc4KiBib2R5IF9fdW51c2VkKSB7fQorICAgIEVudHJ5SXRlcmF0b3IgaGFuZGxlRm9ybWF0KGNvbnN0IEZvcm1hdEVudHJ5ICZmbXRFbnRyeSwgU3RyaW5nOCAqdGltZXN0YW1wLCBTdHJpbmc4ICpib2R5KTsKKworICAgIHN0YXRpYyB2b2lkICAgIGFwcGVuZEludChTdHJpbmc4ICpib2R5LCBjb25zdCB2b2lkICpkYXRhKTsKKyAgICBzdGF0aWMgdm9pZCAgICBhcHBlbmRGbG9hdChTdHJpbmc4ICpib2R5LCBjb25zdCB2b2lkICpkYXRhKTsKKyAgICBzdGF0aWMgdm9pZCAgICBhcHBlbmRQSUQoU3RyaW5nOCAqYm9keSwgY29uc3Qgdm9pZCAqZGF0YSwgc2l6ZV90IGxlbmd0aCk7CisgICAgc3RhdGljIHZvaWQgICAgYXBwZW5kVGltZXN0YW1wKFN0cmluZzggKmJvZHksIGNvbnN0IHZvaWQgKmRhdGEpOworCisgICAgLy8gVGhlIGJ1ZmZlckR1bXAgZnVuY3Rpb25zIGFyZSB1c2VkIGZvciBkZWJ1Z2dpbmcgb25seS4KKyAgICBzdGF0aWMgU3RyaW5nOCBidWZmZXJEdW1wKGNvbnN0IHVpbnQ4X3QgKmJ1ZmZlciwgc2l6ZV90IHNpemUpOworICAgIHN0YXRpYyBTdHJpbmc4IGJ1ZmZlckR1bXAoY29uc3QgRW50cnlJdGVyYXRvciAmaXQpOworfTsKKworfSAgIC8vIG5hbWVzcGFjZSBOQkxvZworfSAgIC8vIG5hbWVzcGFjZSBhbmRyb2lkCisKKyNlbmRpZiAgLy8gQU5EUk9JRF9NRURJQV9OQkxPR19SRUFERVJfSApkaWZmIC0tZ2l0IGEvbWVkaWEvbGlibmJsb2cvaW5jbHVkZS9tZWRpYS9uYmxvZy9SZXBvcnRQZXJmb3JtYW5jZS5oIGIvbWVkaWEvbGlibmJsb2cvaW5jbHVkZS9tZWRpYS9uYmxvZy9SZXBvcnRQZXJmb3JtYW5jZS5oCmluZGV4IGVjMDg0MmYuLjY0YTU3MDEgMTAwNjQ0Ci0tLSBhL21lZGlhL2xpYm5ibG9nL2luY2x1ZGUvbWVkaWEvbmJsb2cvUmVwb3J0UGVyZm9ybWFuY2UuaAorKysgYi9tZWRpYS9saWJuYmxvZy9pbmNsdWRlL21lZGlhL25ibG9nL1JlcG9ydFBlcmZvcm1hbmNlLmgKQEAgLTIyLDE5ICsyMiwzMyBAQAogI2luY2x1ZGUgPHZlY3Rvcj4KIAogbmFtZXNwYWNlIGFuZHJvaWQgewotCi0vLyBUaGUgU3RyaW5nOCBjbGFzcyBpcyB1c2VkIGJ5IHJlcG9ydFBlcmZvcm1hbmNlIGZ1bmN0aW9uCi1jbGFzcyBTdHJpbmc4OwotCiBuYW1lc3BhY2UgUmVwb3J0UGVyZm9ybWFuY2UgewogCitzdHJ1Y3QgUGVyZm9ybWFuY2VEYXRhOworCisvLyBEdW1wcyBwZXJmb3JtYW5jZSBkYXRhIGluIGEgSlNPTiBmb3JtYXQuCit2b2lkIGR1bXBKc29uKGludCBmZCwgY29uc3Qgc3RkOjptYXA8aW50LCBQZXJmb3JtYW5jZURhdGE+JiB0aHJlYWREYXRhTWFwKTsKKworLy9EdW1wcyBwZXJmb3JtYW5jZSBkYXRhIGFzIHZpc3VhbGl6ZWQgcGxvdHMuCit2b2lkIGR1bXBQbG90cyhpbnQgZmQsIGNvbnN0IHN0ZDo6bWFwPGludCwgUGVyZm9ybWFuY2VEYXRhPiYgdGhyZWFkRGF0YU1hcCk7CisKKy8vIER1bXBzIHNuYXBzaG90cyBhdCBpbXBvcnRhbnQgZXZlbnRzIGluIHRoZSBwYXN0Lgordm9pZCBkdW1wUmV0cm8oaW50IGZkLCBjb25zdCBzdGQ6Om1hcDxpbnQsIFBlcmZvcm1hbmNlRGF0YT4mIHRocmVhZERhdGFNYXApOworCisvLyBTZW5kIG9uZSB0aHJlYWQncyBkYXRhIHRvIG1lZGlhIG1ldHJpY3MsIGlmIHRoZSBwZXJmb3JtYW5jZSBkYXRhIGlzIG5vbnRyaXZpYWwgKGkuZS4gbm90CisvLyBhbGwgemVybyB2YWx1ZXMpLiBSZXR1cm4gdHJ1ZSBpZiBkYXRhIHdhcyBzZW50LCBmYWxzZSBpZiB0aGVyZSBpcyBub3RoaW5nIHRvIHdyaXRlCisvLyBvciBhbiBlcnJvciBvY2N1cnJlZCB3aGlsZSB3cml0aW5nLgorYm9vbCBzZW5kVG9NZWRpYU1ldHJpY3MoY29uc3QgUGVyZm9ybWFuY2VEYXRhJiBkYXRhKTsKKworLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKwogY29uc3RleHByIGludCBrTXNQZXJTZWMgPSAxMDAwOwogY29uc3RleHByIGludCBrU2VjUGVyTWluID0gNjA7CiAKIGNvbnN0ZXhwciBpbnQga0ppZmZ5UGVyTXMgPSAxMDsgLy8gdGltZSB1bml0IGZvciBoaXN0b2dyYW0gYXMgYSBtdWx0aXBsZSBvZiBtaWxsaXNlY29uZHMKIAogLy8gc3RvcmVzIGEgaGlzdG9ncmFtOiBrZXk6IG9ic2VydmVkIGJ1ZmZlciBwZXJpb2QgKG11bHRpcGxlIG9mIGppZmZ5KS4gdmFsdWU6IGNvdW50Ci11c2luZyBIaXN0b2dyYW0gPSBzdGQ6Om1hcDxpbnQsIGludD47Cit1c2luZyBIaXN0ID0gc3RkOjptYXA8aW50LCBpbnQ+OwogCiB1c2luZyBtc0ludGVydmFsID0gZG91YmxlOwogdXNpbmcgamlmZnlJbnRlcnZhbCA9IGRvdWJsZTsKQEAgLTU3LDEzICs3MSwxMiBAQAogfQogCiAvLyBXcml0ZXMgb3V0bGllciBpbnRlcnZhbHMsIHRpbWVzdGFtcHMsIHBlYWtzIHRpbWVzdGFtcHMsIGFuZCBoaXN0b2dyYW1zIHRvIGEgZmlsZS4KLXZvaWQgd3JpdGVUb0ZpbGUoY29uc3Qgc3RkOjpkZXF1ZTxzdGQ6OnBhaXI8dGltZXN0YW1wLCBIaXN0b2dyYW0+PiAmaGlzdHMsCit2b2lkIHdyaXRlVG9GaWxlKGNvbnN0IHN0ZDo6ZGVxdWU8c3RkOjpwYWlyPHRpbWVzdGFtcCwgSGlzdD4+ICZoaXN0cywKICAgICAgICAgICAgICAgICAgY29uc3Qgc3RkOjpkZXF1ZTxzdGQ6OnBhaXI8bXNJbnRlcnZhbCwgdGltZXN0YW1wPj4gJm91dGxpZXJEYXRhLAogICAgICAgICAgICAgICAgICBjb25zdCBzdGQ6OmRlcXVlPHRpbWVzdGFtcD4gJnBlYWtUaW1lc3RhbXBzLAogICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICoga0RpcmVjdG9yeSwgYm9vbCBhcHBlbmQsIGludCBhdXRob3IsIGxvZ19oYXNoX3QgaGFzaCk7CiAKLX0gLy8gbmFtZXNwYWNlIFJlcG9ydFBlcmZvcm1hbmNlCi0KK30gICAvLyBuYW1lc3BhY2UgUmVwb3J0UGVyZm9ybWFuY2UKIH0gICAvLyBuYW1lc3BhY2UgYW5kcm9pZAogCiAjZW5kaWYgIC8vIEFORFJPSURfTUVESUFfUkVQT1JUUEVSRk9STUFOQ0VfSApkaWZmIC0tZ2l0IGEvbWVkaWEvbGlibmJsb2cvaW5jbHVkZS9tZWRpYS9uYmxvZy9UaW1lbGluZS5oIGIvbWVkaWEvbGlibmJsb2cvaW5jbHVkZS9tZWRpYS9uYmxvZy9UaW1lbGluZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ0ZjBjZmYKLS0tIC9kZXYvbnVsbAorKysgYi9tZWRpYS9saWJuYmxvZy9pbmNsdWRlL21lZGlhL25ibG9nL1RpbWVsaW5lLmgKQEAgLTAsMCArMSw2NiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxOCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCisKKyNpZm5kZWYgQU5EUk9JRF9NRURJQV9OQkxPR19USU1FTElORV9ICisjZGVmaW5lIEFORFJPSURfTUVESUFfTkJMT0dfVElNRUxJTkVfSAorCisjaW5jbHVkZSA8c3RkZGVmLmg+CisKKyNpbmNsdWRlIDxhdWRpb191dGlscy9maWZvX2luZGV4Lmg+CisjaW5jbHVkZSA8dXRpbHMvUmVmQmFzZS5oPgorCituYW1lc3BhY2UgYW5kcm9pZCB7CituYW1lc3BhY2UgTkJMb2cgeworCisvLyBMb2NhdGVkIGluIHNoYXJlZCBtZW1vcnksIG11c3QgYmUgUE9ELgorLy8gRXhhY3RseSBvbmUgcHJvY2VzcyBtdXN0IGV4cGxpY2l0bHkgY2FsbCB0aGUgY29uc3RydWN0b3Igb3IgdXNlIHBsYWNlbWVudCBuZXcuCisvLyBTaW5jZSB0aGlzIGlzIGEgUE9ELCB0aGUgZGVzdHJ1Y3RvciBpcyBlbXB0eSBhbmQgdW5uZWNlc3NhcnkgdG8gY2FsbCBpdCBleHBsaWNpdGx5Lgorc3RydWN0IFNoYXJlZCB7CisgICAgU2hhcmVkKCkgLyogbVJlYXIgaW5pdGlhbGl6ZWQgdmlhIGRlZmF1bHQgY29uc3RydWN0b3IgKi8ge30KKyAgICB+U2hhcmVkKCkge30KKworICAgIGF1ZGlvX3V0aWxzX2ZpZm9faW5kZXggIG1SZWFyOyAgLy8gaW5kZXggb25lIGJ5dGUgcGFzdCB0aGUgZW5kIG9mIG1vc3QgcmVjZW50IEVudHJ5CisgICAgY2hhciAgICBtQnVmZmVyWzBdOyAgICAgICAgICAgICAvLyBjaXJjdWxhciBidWZmZXIgZm9yIGVudHJpZXMKK307CisKKy8vIEZJWE1FIFRpbWVsaW5lIHdhcyBpbnRlbmRlZCB0byB3cmFwIFdyaXRlciBhbmQgUmVhZGVyLCBidXQgaXNuJ3QgYWN0dWFsbHkgdXNlZCB5ZXQuCisvLyBGb3Igbm93IGl0IGlzIGp1c3QgYSBuYW1lc3BhY2UgZm9yIHNoYXJlZFNpemUoKS4KK2NsYXNzIFRpbWVsaW5lIDogcHVibGljIFJlZkJhc2UgeworcHVibGljOgorI2lmIDAKKyAgICBUaW1lbGluZShzaXplX3Qgc2l6ZSwgdm9pZCAqc2hhcmVkID0gTlVMTCk7CisgICAgdmlydHVhbCB+VGltZWxpbmUoKTsKKyNlbmRpZgorCisgICAgLy8gSW5wdXQgcGFyYW1ldGVyICdzaXplJyBpcyB0aGUgZGVzaXJlZCBzaXplIG9mIHRoZSB0aW1lbGluZSBpbiBieXRlIHVuaXRzLgorICAgIC8vIFJldHVybnMgdGhlIHNpemUgcm91bmRlZCB1cCB0byBhIHBvd2VyLW9mLTIsIHBsdXMgdGhlIGNvbnN0YW50IHNpemUgb3ZlcmhlYWQgZm9yIGluZGljZXMuCisgICAgc3RhdGljIHNpemVfdCBzaGFyZWRTaXplKHNpemVfdCBzaXplKTsKKworI2lmIDAKK3ByaXZhdGU6CisgICAgZnJpZW5kIGNsYXNzICAgIFdyaXRlcjsKKyAgICBmcmllbmQgY2xhc3MgICAgUmVhZGVyOworCisgICAgY29uc3Qgc2l6ZV90ICAgIG1TaXplOyAgICAgIC8vIGNpcmN1bGFyIGJ1ZmZlciBzaXplIGluIGJ5dGVzLCBtdXN0IGJlIGEgcG93ZXIgb2YgMgorICAgIGJvb2wgICAgICAgICAgICBtT3duOyAgICAgICAvLyB3aGV0aGVyIEkgb3duIHRoZSBtZW1vcnkgYXQgbVNoYXJlZAorICAgIFNoYXJlZCogY29uc3QgICBtU2hhcmVkOyAgICAvLyBwb2ludGVyIHRvIHNoYXJlZCBtZW1vcnkKKyNlbmRpZgorfTsKKworfSAgIC8vIG5hbWVzcGFjZSBOQkxvZworfSAgIC8vIG5hbWVzcGFjZSBhbmRyb2lkCisKKyNlbmRpZiAgLy8gQU5EUk9JRF9NRURJQV9OQkxPR19USU1FTElORV9ICmRpZmYgLS1naXQgYS9tZWRpYS9saWJuYmxvZy9pbmNsdWRlL21lZGlhL25ibG9nL1dyaXRlci5oIGIvbWVkaWEvbGlibmJsb2cvaW5jbHVkZS9tZWRpYS9uYmxvZy9Xcml0ZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43ZmNkMzk2Ci0tLSAvZGV2L251bGwKKysrIGIvbWVkaWEvbGlibmJsb2cvaW5jbHVkZS9tZWRpYS9uYmxvZy9Xcml0ZXIuaApAQCAtMCwwICsxLDEzOSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxOCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCisKKyNpZm5kZWYgQU5EUk9JRF9NRURJQV9OQkxPR19XUklURVJfSAorI2RlZmluZSBBTkRST0lEX01FRElBX05CTE9HX1dSSVRFUl9ICisKKyNpbmNsdWRlIDxzdGRhcmcuaD4KKyNpbmNsdWRlIDxzdGRkZWYuaD4KKworI2luY2x1ZGUgPGJpbmRlci9JTWVtb3J5Lmg+CisjaW5jbHVkZSA8bWVkaWEvbmJsb2cvRXZlbnRzLmg+CisjaW5jbHVkZSA8dXRpbHMvTXV0ZXguaD4KKyNpbmNsdWRlIDx1dGlscy9SZWZCYXNlLmg+CisKK2NsYXNzIGF1ZGlvX3V0aWxzX2ZpZm87CitjbGFzcyBhdWRpb191dGlsc19maWZvX3dyaXRlcjsKKworbmFtZXNwYWNlIGFuZHJvaWQgeworCitjbGFzcyBJTWVtb3J5OworCituYW1lc3BhY2UgTkJMb2cgeworCitjbGFzcyBFbnRyeTsKK3N0cnVjdCBTaGFyZWQ7CisKKy8vIE5CTG9nIFdyaXRlciBJbnRlcmZhY2UKKworLy8gV3JpdGVyIGlzIHRocmVhZC1zYWZlIHdpdGggcmVzcGVjdCB0byBSZWFkZXIsIGJ1dCBub3Qgd2l0aCByZXNwZWN0IHRvIG11bHRpcGxlIHRocmVhZHMKKy8vIGNhbGxpbmcgV3JpdGVyIG1ldGhvZHMuICBJZiB5b3UgbmVlZCBtdWx0aS10aHJlYWQgc2FmZXR5IGZvciB3cml0aW5nLCB1c2UgTG9ja2VkV3JpdGVyLgorY2xhc3MgV3JpdGVyIDogcHVibGljIFJlZkJhc2UgeworcHVibGljOgorICAgIFdyaXRlcigpID0gZGVmYXVsdDsgICAgICAgICAvLyBkdW1teSBub3AgaW1wbGVtZW50YXRpb24gd2l0aG91dCBzaGFyZWQgbWVtb3J5CisKKyAgICAvLyBJbnB1dCBwYXJhbWV0ZXIgJ3NpemUnIGlzIHRoZSBkZXNpcmVkIHNpemUgb2YgdGhlIHRpbWVsaW5lIGluIGJ5dGUgdW5pdHMuCisgICAgLy8gVGhlIHNpemUgb2YgdGhlIHNoYXJlZCBtZW1vcnkgbXVzdCBiZSBhdCBsZWFzdCBUaW1lbGluZTo6c2hhcmVkU2l6ZShzaXplKS4KKyAgICBXcml0ZXIodm9pZCAqc2hhcmVkLCBzaXplX3Qgc2l6ZSk7CisgICAgV3JpdGVyKGNvbnN0IHNwPElNZW1vcnk+JiBpTWVtb3J5LCBzaXplX3Qgc2l6ZSk7CisKKyAgICB+V3JpdGVyKCkgb3ZlcnJpZGU7CisKKyAgICAvLyBGSVhNRSBuZWVkcyBjb21tZW50cywgYW5kIHNvbWUgc2hvdWxkIGJlIHByaXZhdGUKKyAgICB2b2lkICAgIGxvZyhjb25zdCBjaGFyICpzdHJpbmcpOworICAgIHZvaWQgICAgbG9nZihjb25zdCBjaGFyICpmbXQsIC4uLikgX19hdHRyaWJ1dGVfXyAoKGZvcm1hdCAocHJpbnRmLCAyLCAzKSkpOworICAgIHZvaWQgICAgbG9nVGltZXN0YW1wKCk7CisgICAgdm9pZCAgICBsb2dGb3JtYXQoY29uc3QgY2hhciAqZm10LCBsb2dfaGFzaF90IGhhc2gsIC4uLik7CisgICAgdm9pZCAgICBsb2dFdmVudEhpc3RUcyhFdmVudCBldmVudCwgbG9nX2hhc2hfdCBoYXNoKTsKKworICAgIC8vIExvZyBkYXRhIHJlbGF0ZWQgdG8gRXZlbnQgRS4gU2VlIHRoZSBldmVudC10by10eXBlIG1hcHBpbmcgZm9yIHRoZSB0eXBlIG9mIGRhdGEKKyAgICAvLyBjb3JyZXNwb25kaW5nIHRvIHRoZSBldmVudC4gRm9yIGV4YW1wbGUsIGlmIHlvdSBzZWUgYSBtYXBwaW5nIHN0YXRlbWVudDoKKyAgICAvLyAgICAgTUFQX1RZUEVfVE9fRVZFTlQoRSwgVCk7CisgICAgLy8gdGhlbiB0aGUgdXNhZ2Ugb2YgdGhpcyBtZXRob2Qgd291bGQgYmU6CisgICAgLy8gICAgIFQgZGF0YSA9IGRvQ29tcHV0YXRpb24oKTsKKyAgICAvLyAgICAgdGxOQkxvZ1dyaXRlci0+bG9nPE5CTG9nOjpFPihkYXRhKTsKKyAgICB0ZW1wbGF0ZTxFdmVudCBFPgorICAgIHZvaWQgICAgbG9nKHR5cGVuYW1lIGdldF9tYXBwZWQ8RT46OnR5cGUgZGF0YSkgeworICAgICAgICBsb2coRSwgJmRhdGEsIHNpemVvZihkYXRhKSk7CisgICAgfQorCisgICAgdmlydHVhbCBib29sICAgIGlzRW5hYmxlZCgpIGNvbnN0OworCisgICAgLy8gcmV0dXJuIHZhbHVlIGZvciBhbGwgb2YgdGhlc2UgaXMgdGhlIHByZXZpb3VzIGlzRW5hYmxlZCgpCisgICAgdmlydHVhbCBib29sICAgIHNldEVuYWJsZWQoYm9vbCBlbmFibGVkKTsgICAvLyBidXQgd29uJ3QgZW5hYmxlIGlmIG5vIHNoYXJlZCBtZW1vcnkKKyAgICBib29sICAgICAgICAgICAgZW5hYmxlKCkgIHsgcmV0dXJuIHNldEVuYWJsZWQodHJ1ZSk7IH0KKyAgICBib29sICAgICAgICAgICAgZGlzYWJsZSgpIHsgcmV0dXJuIHNldEVuYWJsZWQoZmFsc2UpOyB9CisKKyAgICBzcDxJTWVtb3J5PiAgICAgZ2V0SU1lbW9yeSgpIGNvbnN0IHsgcmV0dXJuIG1JTWVtb3J5OyB9CisKKyAgICAvLyBQdWJsaWMgbG9nZ2luZyBmdW5jdGlvbiBpbXBsZW1lbnRhdGlvbnMgc2hvdWxkIGFsd2F5cyB1c2Ugb25lIG9mIHRoZQorICAgIC8vIHR3byBsb2coKSBmdW5jdGlvbiBjYWxscyBiZWxvdyB0byB3cml0ZSB0byBzaGFyZWQgbWVtb3J5LgorcHJvdGVjdGVkOgorICAgIC8vIFdyaXRlcyBhIHNpbmdsZSBFbnRyeSB0byB0aGUgRklGTyBpZiB0aGUgd3JpdGVyIGlzIGVuYWJsZWQuCisgICAgLy8gVGhpcyBpcyBwcm90ZWN0ZWQgYW5kIHZpcnR1YWwgYmVjYXVzZSBMb2NrZWRXcml0ZXIgdXNlcyBhIGxvY2sgdG8gcHJvdGVjdAorICAgIC8vIHdyaXRpbmcgdG8gdGhlIEZJRk8gYmVmb3JlIHdyaXRpbmcgdG8gdGhpcyBmdW5jdGlvbi4KKyAgICB2aXJ0dWFsIHZvaWQgbG9nKGNvbnN0IEVudHJ5ICZlbnRyeSwgYm9vbCB0cnVzdGVkID0gZmFsc2UpOworCitwcml2YXRlOgorICAgIC8vIDAgPD0gbGVuZ3RoIDw9IGtNYXhMZW5ndGgKKyAgICAvLyBMb2cgYSBzaW5nbGUgRW50cnkgd2l0aCBjb3JyZXNwb25kaW5nIGV2ZW50LCBkYXRhLCBhbmQgbGVuZ3RoLgorICAgIHZvaWQgICAgbG9nKEV2ZW50IGV2ZW50LCBjb25zdCB2b2lkICpkYXRhLCBzaXplX3QgbGVuZ3RoKTsKKworICAgIHZvaWQgICAgbG9ndmYoY29uc3QgY2hhciAqZm10LCB2YV9saXN0IGFwKTsKKworICAgIC8vIGhlbHBlciBmdW5jdGlvbnMgZm9yIGxvZ2dpbmcgcGFydHMgb2YgYSBmb3JtYXR0ZWQgZW50cnkKKyAgICB2b2lkICAgIGxvZ1N0YXJ0KGNvbnN0IGNoYXIgKmZtdCk7CisgICAgdm9pZCAgICBsb2dUaW1lc3RhbXBGb3JtYXQoKTsKKyAgICB2b2lkICAgIGxvZ1ZGb3JtYXQoY29uc3QgY2hhciAqZm10LCBsb2dfaGFzaF90IGhhc2gsIHZhX2xpc3QgYXApOworCisgICAgU2hhcmVkKiBjb25zdCAgIG1TaGFyZWR7fTsgICAgICAgICAgLy8gcmF3IHBvaW50ZXIgdG8gc2hhcmVkIG1lbW9yeQorICAgIHNwPElNZW1vcnk+ICAgICBtSU1lbW9yeXt9OyAgICAgICAgIC8vIHJlZi1jb3VudGVkIHZlcnNpb24sIGluaXRpYWxpemVkIGluIGNvbnN0cnVjdG9yCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gYW5kIHRoZW4gY29uc3QKKyAgICBhdWRpb191dGlsc19maWZvICogY29uc3QgbUZpZm97fTsgICAgICAgICAgICAgICAvLyBGSUZPIGl0c2VsZiwgbm9uLU5VTEwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyB1bmxlc3MgY29uc3RydWN0b3IgZmFpbHMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBvciBkdW1teSBjb25zdHJ1Y3RvciB1c2VkCisgICAgYXVkaW9fdXRpbHNfZmlmb193cml0ZXIgKiBjb25zdCBtRmlmb1dyaXRlcnt9OyAgLy8gdXNlZCB0byB3cml0ZSB0byBGSUZPLCBub24tTlVMTAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHVubGVzcyBkdW1teSBjb25zdHJ1Y3RvciB1c2VkCisgICAgYm9vbCAgICAgICAgICAgIG1FbmFibGVkID0gZmFsc2U7ICAgLy8gd2hldGhlciB0byBhY3R1YWxseSBsb2cKKworICAgIC8vIGNhY2hlZCBwaWQgYW5kIHByb2Nlc3MgbmFtZSB0byB1c2UgaW4gJXAgZm9ybWF0IHNwZWNpZmllcgorICAgIC8vIHRvdGFsIHRhZyBsZW5ndGggaXMgbVBpZFRhZ1NpemUgYW5kIHByb2Nlc3MgbmFtZSBpcyBub3QgemVybyB0ZXJtaW5hdGVkCisgICAgY2hhciAgICptUGlkVGFne307CisgICAgc2l6ZV90ICBtUGlkVGFnU2l6ZSA9IDA7Cit9OworCisvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworLy8gU2ltaWxhciB0byBXcml0ZXIsIGJ1dCBzYWZlIGZvciBtdWx0aXBsZSB0aHJlYWRzIHRvIGNhbGwgY29uY3VycmVudGx5CitjbGFzcyBMb2NrZWRXcml0ZXIgOiBwdWJsaWMgV3JpdGVyIHsKK3B1YmxpYzoKKyAgICBMb2NrZWRXcml0ZXIoKSA9IGRlZmF1bHQ7CisgICAgTG9ja2VkV3JpdGVyKHZvaWQgKnNoYXJlZCwgc2l6ZV90IHNpemUpOworCisgICAgYm9vbCAgICBpc0VuYWJsZWQoKSBjb25zdCBvdmVycmlkZTsKKyAgICBib29sICAgIHNldEVuYWJsZWQoYm9vbCBlbmFibGVkKSBvdmVycmlkZTsKKworcHJpdmF0ZToKKyAgICAvLyBMb2NrIG5lZWRzIHRvIGJlIG9idGFpbmVkIGJlZm9yZSB3cml0aW5nIHRvIEZJRk8uCisgICAgdm9pZCBsb2coY29uc3QgRW50cnkgJmVudHJ5LCBib29sIHRydXN0ZWQgPSBmYWxzZSkgb3ZlcnJpZGU7CisKKyAgICBtdXRhYmxlIE11dGV4ICAgbUxvY2s7Cit9OworCit9ICAgLy8gbmFtZXNwYWNlIE5CTG9nCit9ICAgLy8gbmFtZXNwYWNlIGFuZHJvaWQKKworI2VuZGlmICAvLyBBTkRST0lEX01FRElBX05CTE9HX1dSSVRFUl9ICmRpZmYgLS1naXQgYS9tZWRpYS9saWJzdGFnZWZyaWdodC9BQ29kZWMuY3BwIGIvbWVkaWEvbGlic3RhZ2VmcmlnaHQvQUNvZGVjLmNwcAppbmRleCA5MmU3MmI5Li4zMDgwZGI1IDEwMDY0NAotLS0gYS9tZWRpYS9saWJzdGFnZWZyaWdodC9BQ29kZWMuY3BwCisrKyBiL21lZGlhL2xpYnN0YWdlZnJpZ2h0L0FDb2RlYy5jcHAKQEAgLTE3NDgsMjkgKzE3NDgsMzIgQEAKICAgICB9CiAKICAgICBpbnQzMl90IHN0b3JlTWV0YTsKLSAgICBpZiAoZW5jb2RlcgotICAgICAgICAgICAgJiYgbXNnLT5maW5kSW50MzIoImFuZHJvaWQuX2lucHV0LW1ldGFkYXRhLWJ1ZmZlci10eXBlIiwgJnN0b3JlTWV0YSkKLSAgICAgICAgICAgICYmIHN0b3JlTWV0YSAhPSBrTWV0YWRhdGFCdWZmZXJUeXBlSW52YWxpZCkgewotICAgICAgICBJT01YOjpQb3J0TW9kZSBtb2RlOwotICAgICAgICBpZiAoc3RvcmVNZXRhID09IGtNZXRhZGF0YUJ1ZmZlclR5cGVOYXRpdmVIYW5kbGVTb3VyY2UpIHsKLSAgICAgICAgICAgIG1vZGUgPSBJT01YOjprUG9ydE1vZGVEeW5hbWljTmF0aXZlSGFuZGxlOwotICAgICAgICB9IGVsc2UgaWYgKHN0b3JlTWV0YSA9PSBrTWV0YWRhdGFCdWZmZXJUeXBlQU5XQnVmZmVyIHx8Ci0gICAgICAgICAgICAgICAgc3RvcmVNZXRhID09IGtNZXRhZGF0YUJ1ZmZlclR5cGVHcmFsbG9jU291cmNlKSB7Ci0gICAgICAgICAgICBtb2RlID0gSU9NWDo6a1BvcnRNb2RlRHluYW1pY0FOV0J1ZmZlcjsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIHJldHVybiBCQURfVkFMVUU7CisgICAgaWYgKGVuY29kZXIpIHsKKyAgICAgICAgSU9NWDo6UG9ydE1vZGUgbW9kZSA9IElPTVg6OmtQb3J0TW9kZVByZXNldEJ5dGVCdWZmZXI7CisgICAgICAgIGlmIChtc2ctPmZpbmRJbnQzMigiYW5kcm9pZC5faW5wdXQtbWV0YWRhdGEtYnVmZmVyLXR5cGUiLCAmc3RvcmVNZXRhKQorICAgICAgICAgICAgICAgICYmIHN0b3JlTWV0YSAhPSBrTWV0YWRhdGFCdWZmZXJUeXBlSW52YWxpZCkgeworICAgICAgICAgICAgaWYgKHN0b3JlTWV0YSA9PSBrTWV0YWRhdGFCdWZmZXJUeXBlTmF0aXZlSGFuZGxlU291cmNlKSB7CisgICAgICAgICAgICAgICAgbW9kZSA9IElPTVg6OmtQb3J0TW9kZUR5bmFtaWNOYXRpdmVIYW5kbGU7CisgICAgICAgICAgICB9IGVsc2UgaWYgKHN0b3JlTWV0YSA9PSBrTWV0YWRhdGFCdWZmZXJUeXBlQU5XQnVmZmVyIHx8CisgICAgICAgICAgICAgICAgICAgIHN0b3JlTWV0YSA9PSBrTWV0YWRhdGFCdWZmZXJUeXBlR3JhbGxvY1NvdXJjZSkgeworICAgICAgICAgICAgICAgIG1vZGUgPSBJT01YOjprUG9ydE1vZGVEeW5hbWljQU5XQnVmZmVyOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gQkFEX1ZBTFVFOworICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgICAgIGVyciA9IHNldFBvcnRNb2RlKGtQb3J0SW5kZXhJbnB1dCwgbW9kZSk7CiAgICAgICAgIGlmIChlcnIgIT0gT0spIHsKICAgICAgICAgICAgIHJldHVybiBlcnI7CiAgICAgICAgIH0KIAotICAgICAgICB1aW50MzJfdCB1c2FnZUJpdHM7Ci0gICAgICAgIGlmIChtT01YTm9kZS0+Z2V0UGFyYW1ldGVyKAotICAgICAgICAgICAgICAgIChPTVhfSU5ERVhUWVBFKU9NWF9JbmRleFBhcmFtQ29uc3VtZXJVc2FnZUJpdHMsCi0gICAgICAgICAgICAgICAgJnVzYWdlQml0cywgc2l6ZW9mKHVzYWdlQml0cykpID09IE9LKSB7Ci0gICAgICAgICAgICBpbnB1dEZvcm1hdC0+c2V0SW50MzIoCi0gICAgICAgICAgICAgICAgICAgICJ1c2luZy1zdy1yZWFkLW9mdGVuIiwgISEodXNhZ2VCaXRzICYgR1JBTExPQ19VU0FHRV9TV19SRUFEX09GVEVOKSk7CisgICAgICAgIGlmIChtb2RlICE9IElPTVg6OmtQb3J0TW9kZVByZXNldEJ5dGVCdWZmZXIpIHsKKyAgICAgICAgICAgIHVpbnQzMl90IHVzYWdlQml0czsKKyAgICAgICAgICAgIGlmIChtT01YTm9kZS0+Z2V0UGFyYW1ldGVyKAorICAgICAgICAgICAgICAgICAgICAoT01YX0lOREVYVFlQRSlPTVhfSW5kZXhQYXJhbUNvbnN1bWVyVXNhZ2VCaXRzLAorICAgICAgICAgICAgICAgICAgICAmdXNhZ2VCaXRzLCBzaXplb2YodXNhZ2VCaXRzKSkgPT0gT0spIHsKKyAgICAgICAgICAgICAgICBpbnB1dEZvcm1hdC0+c2V0SW50MzIoCisgICAgICAgICAgICAgICAgICAgICAgICAidXNpbmctc3ctcmVhZC1vZnRlbiIsICEhKHVzYWdlQml0cyAmIEdSQUxMT0NfVVNBR0VfU1dfUkVBRF9PRlRFTikpOworICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgfQogCkBAIC01NTU4LDYgKzU1NjEsMTEgQEAKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAKKyAgICAgICAgY2FzZSBrV2hhdENoZWNrSWZTdHVjazogeworICAgICAgICAgICAgQUxPR1YoIk5vLW9wIGJ5IGRlZmF1bHQiKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CkBAIC03ODc1LDYgKzc4ODMsMTggQEAKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAKKyAgICAgICAgY2FzZSBrV2hhdENoZWNrSWZTdHVjazoKKyAgICAgICAgeworICAgICAgICAgICAgaW50MzJfdCBnZW5lcmF0aW9uID0gMDsKKyAgICAgICAgICAgIENIRUNLKG1zZy0+ZmluZEludDMyKCJnZW5lcmF0aW9uIiwgJmdlbmVyYXRpb24pKTsKKyAgICAgICAgICAgIGlmIChnZW5lcmF0aW9uID09IG1Db2RlYy0+bVN0YXRlR2VuZXJhdGlvbikgeworICAgICAgICAgICAgICAgIG1Db2RlYy0+c2lnbmFsRXJyb3IoT01YX0Vycm9yVW5kZWZpbmVkLCBUSU1FRF9PVVQpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBoYW5kbGVkID0gdHJ1ZTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgIGhhbmRsZWQgPSBCYXNlU3RhdGU6Om9uTWVzc2FnZVJlY2VpdmVkKG1zZyk7CiAgICAgICAgICAgICBicmVhazsKQEAgLTc4ODYsNiArNzkwNiwxMSBAQAogdm9pZCBBQ29kZWM6Ok91dHB1dFBvcnRTZXR0aW5nc0NoYW5nZWRTdGF0ZTo6c3RhdGVFbnRlcmVkKCkgewogICAgIEFMT0dWKCJbJXNdIE5vdyBoYW5kbGluZyBvdXRwdXQgcG9ydCBzZXR0aW5ncyBjaGFuZ2UiLAogICAgICAgICAgbUNvZGVjLT5tQ29tcG9uZW50TmFtZS5jX3N0cigpKTsKKworICAgIC8vIElmIHdlIGhhdmVuJ3QgdHJhbnNpdGlvbmVkIGFmdGVyIDMgc2Vjb25kcywgd2UncmUgcHJvYmFibHkgc3R1Y2suCisgICAgc3A8QU1lc3NhZ2U+IG1zZyA9IG5ldyBBTWVzc2FnZShBQ29kZWM6OmtXaGF0Q2hlY2tJZlN0dWNrLCBtQ29kZWMpOworICAgIG1zZy0+c2V0SW50MzIoImdlbmVyYXRpb24iLCBtQ29kZWMtPm1TdGF0ZUdlbmVyYXRpb24pOworICAgIG1zZy0+cG9zdCgzMDAwMDAwKTsKIH0KIAogYm9vbCBBQ29kZWM6Ok91dHB1dFBvcnRTZXR0aW5nc0NoYW5nZWRTdGF0ZTo6b25PTVhGcmFtZVJlbmRlcmVkKApAQCAtODE0OCw2ICs4MTczLDExIEBACiAgICAgQUxPR1YoIlslc10gTm93IEZsdXNoaW5nIiwgbUNvZGVjLT5tQ29tcG9uZW50TmFtZS5jX3N0cigpKTsKIAogICAgIG1GbHVzaENvbXBsZXRlW2tQb3J0SW5kZXhJbnB1dF0gPSBtRmx1c2hDb21wbGV0ZVtrUG9ydEluZGV4T3V0cHV0XSA9IGZhbHNlOworCisgICAgLy8gSWYgd2UgaGF2ZW4ndCB0cmFuc2l0aW9uZWQgYWZ0ZXIgMyBzZWNvbmRzLCB3ZSdyZSBwcm9iYWJseSBzdHVjay4KKyAgICBzcDxBTWVzc2FnZT4gbXNnID0gbmV3IEFNZXNzYWdlKEFDb2RlYzo6a1doYXRDaGVja0lmU3R1Y2ssIG1Db2RlYyk7CisgICAgbXNnLT5zZXRJbnQzMigiZ2VuZXJhdGlvbiIsIG1Db2RlYy0+bVN0YXRlR2VuZXJhdGlvbik7CisgICAgbXNnLT5wb3N0KDMwMDAwMDApOwogfQogCiBib29sIEFDb2RlYzo6Rmx1c2hpbmdTdGF0ZTo6b25NZXNzYWdlUmVjZWl2ZWQoY29uc3Qgc3A8QU1lc3NhZ2U+ICZtc2cpIHsKQEAgLTgxNjIsNiArODE5Miw3IEBACiAgICAgICAgICAgICAgICAgbXNnLT5zZXRJbnQzMigiZ2VuZXJhdGlvbiIsIG1Db2RlYy0+bVN0YXRlR2VuZXJhdGlvbik7CiAgICAgICAgICAgICAgICAgbXNnLT5wb3N0KDMwMDAwMDApOwogICAgICAgICAgICAgfQorICAgICAgICAgICAgaGFuZGxlZCA9IHRydWU7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogCkBAIC04MTgyLDYgKzgyMTMsMTggQEAKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAKKyAgICAgICAgY2FzZSBrV2hhdENoZWNrSWZTdHVjazoKKyAgICAgICAgeworICAgICAgICAgICAgaW50MzJfdCBnZW5lcmF0aW9uID0gMDsKKyAgICAgICAgICAgIENIRUNLKG1zZy0+ZmluZEludDMyKCJnZW5lcmF0aW9uIiwgJmdlbmVyYXRpb24pKTsKKyAgICAgICAgICAgIGlmIChnZW5lcmF0aW9uID09IG1Db2RlYy0+bVN0YXRlR2VuZXJhdGlvbikgeworICAgICAgICAgICAgICAgIG1Db2RlYy0+c2lnbmFsRXJyb3IoT01YX0Vycm9yVW5kZWZpbmVkLCBUSU1FRF9PVVQpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBoYW5kbGVkID0gdHJ1ZTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgIGhhbmRsZWQgPSBCYXNlU3RhdGU6Om9uTWVzc2FnZVJlY2VpdmVkKG1zZyk7CiAgICAgICAgICAgICBicmVhazsKZGlmZiAtLWdpdCBhL21lZGlhL2xpYnN0YWdlZnJpZ2h0L0FDb2RlY0J1ZmZlckNoYW5uZWwuY3BwIGIvbWVkaWEvbGlic3RhZ2VmcmlnaHQvQUNvZGVjQnVmZmVyQ2hhbm5lbC5jcHAKaW5kZXggNzEwYWU2OC4uMjY2YTI0MCAxMDA2NDQKLS0tIGEvbWVkaWEvbGlic3RhZ2VmcmlnaHQvQUNvZGVjQnVmZmVyQ2hhbm5lbC5jcHAKKysrIGIvbWVkaWEvbGlic3RhZ2VmcmlnaHQvQUNvZGVjQnVmZmVyQ2hhbm5lbC5jcHAKQEAgLTEyOSw2ICsxMjksNyBAQAogICAgICAgICBzZWN1cmVIYW5kbGUgPSBzdGF0aWNfY2FzdDxuYXRpdmVfaGFuZGxlX3QgKj4oc2VjdXJlRGF0YS0+Z2V0RGVzdGluYXRpb25Qb2ludGVyKCkpOwogICAgIH0KICAgICBzc2l6ZV90IHJlc3VsdCA9IC0xOworICAgIHNzaXplX3QgY29kZWNEYXRhT2Zmc2V0ID0gMDsKICAgICBpZiAobUNyeXB0byAhPSBOVUxMKSB7CiAgICAgICAgIElDcnlwdG86OkRlc3RpbmF0aW9uQnVmZmVyIGRlc3RpbmF0aW9uOwogICAgICAgICBpZiAoc2VjdXJlKSB7CkBAIC0xODAsOSArMTgxLDE2IEBACiAKICAgICAgICAgU3RhdHVzIHN0YXR1cyA9IFN0YXR1czo6T0s7CiAgICAgICAgIGhpZGxfc3RyaW5nIGRldGFpbGVkRXJyb3I7CisgICAgICAgIFNjcmFtYmxpbmdDb250cm9sIHNjdHJsID0gU2NyYW1ibGluZ0NvbnRyb2w6OlVOU0NSQU1CTEVEOworCisgICAgICAgIGlmIChrZXkgIT0gTlVMTCkgeworICAgICAgICAgICAgc2N0cmwgPSAoU2NyYW1ibGluZ0NvbnRyb2wpa2V5WzBdOworICAgICAgICAgICAgLy8gQWRqdXN0IGZvciB0aGUgUEVTIG9mZnNldAorICAgICAgICAgICAgY29kZWNEYXRhT2Zmc2V0ID0ga2V5WzJdIHwgKGtleVszXSA8PCA4KTsKKyAgICAgICAgfQogCiAgICAgICAgIGF1dG8gcmV0dXJuVm9pZCA9IG1EZXNjcmFtYmxlci0+ZGVzY3JhbWJsZSgKLSAgICAgICAgICAgICAgICBrZXkgIT0gTlVMTCA/IChTY3JhbWJsaW5nQ29udHJvbClrZXlbMF0gOiBTY3JhbWJsaW5nQ29udHJvbDo6VU5TQ1JBTUJMRUQsCisgICAgICAgICAgICAgICAgc2N0cmwsCiAgICAgICAgICAgICAgICAgaGlkbFN1YlNhbXBsZXMsCiAgICAgICAgICAgICAgICAgc3JjQnVmZmVyLAogICAgICAgICAgICAgICAgIDAsCkBAIC0yMDIsNiArMjEwLDExIEBACiAgICAgICAgICAgICByZXR1cm4gVU5LTk9XTl9FUlJPUjsKICAgICAgICAgfQogCisgICAgICAgIGlmIChyZXN1bHQgPCBjb2RlY0RhdGFPZmZzZXQpIHsKKyAgICAgICAgICAgIEFMT0dEKCJpbnZhbGlkIGNvZGVjIGRhdGEgb2Zmc2V0OiAlemQsIHJlc3VsdCAlemQiLCBjb2RlY0RhdGFPZmZzZXQsIHJlc3VsdCk7CisgICAgICAgICAgICByZXR1cm4gQkFEX1ZBTFVFOworICAgICAgICB9CisKICAgICAgICAgQUxPR1YoImRlc2NyYW1ibGUgc3VjY2VlZGVkLCAlemQgYnl0ZXMiLCByZXN1bHQpOwogCiAgICAgICAgIGlmIChkc3RCdWZmZXIudHlwZSA9PSBCdWZmZXJUeXBlOjpTSEFSRURfTUVNT1JZKSB7CkBAIC0yMTAsNyArMjIzLDcgQEAKICAgICAgICAgfQogICAgIH0KIAotICAgIGl0LT5tQ29kZWNCdWZmZXItPnNldFJhbmdlKDAsIHJlc3VsdCk7CisgICAgaXQtPm1Db2RlY0J1ZmZlci0+c2V0UmFuZ2UoY29kZWNEYXRhT2Zmc2V0LCByZXN1bHQgLSBjb2RlY0RhdGFPZmZzZXQpOwogCiAgICAgLy8gQ29weSBtZXRhZGF0YSBmcm9tIGNsaWVudCB0byBjb2RlYyBidWZmZXIuCiAgICAgaXQtPm1Db2RlY0J1ZmZlci0+bWV0YSgpLT5jbGVhcigpOwpkaWZmIC0tZ2l0IGEvbWVkaWEvbGlic3RhZ2VmcmlnaHQvQUhpZXJhcmNoaWNhbFN0YXRlTWFjaGluZS5jcHAgYi9tZWRpYS9saWJzdGFnZWZyaWdodC9BSGllcmFyY2hpY2FsU3RhdGVNYWNoaW5lLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mODliOGIwCi0tLSAvZGV2L251bGwKKysrIGIvbWVkaWEvbGlic3RhZ2VmcmlnaHQvQUhpZXJhcmNoaWNhbFN0YXRlTWFjaGluZS5jcHAKQEAgLTAsMCArMSwxMTggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworCisvLyNkZWZpbmUgTE9HX05ERUJVRyAwCisjZGVmaW5lIExPR19UQUcgIkFIaWVyYXJjaGljYWxTdGF0ZU1hY2hpbmUiCisjaW5jbHVkZSA8dXRpbHMvTG9nLmg+CisKKyNpbmNsdWRlIDxtZWRpYS9zdGFnZWZyaWdodC9BSGllcmFyY2hpY2FsU3RhdGVNYWNoaW5lLmg+CisKKyNpbmNsdWRlIDxtZWRpYS9zdGFnZWZyaWdodC9mb3VuZGF0aW9uL0FEZWJ1Zy5oPgorI2luY2x1ZGUgPG1lZGlhL3N0YWdlZnJpZ2h0L2ZvdW5kYXRpb24vQU1lc3NhZ2UuaD4KKyNpbmNsdWRlIDx1dGlscy9WZWN0b3IuaD4KKworbmFtZXNwYWNlIGFuZHJvaWQgeworCitBU3RhdGU6OkFTdGF0ZShjb25zdCBzcDxBU3RhdGU+ICZwYXJlbnRTdGF0ZSkKKyAgICA6IG1QYXJlbnRTdGF0ZShwYXJlbnRTdGF0ZSkgeworfQorCitBU3RhdGU6On5BU3RhdGUoKSB7Cit9CisKK3NwPEFTdGF0ZT4gQVN0YXRlOjpwYXJlbnRTdGF0ZSgpIHsKKyAgICByZXR1cm4gbVBhcmVudFN0YXRlOworfQorCit2b2lkIEFTdGF0ZTo6c3RhdGVFbnRlcmVkKCkgeworfQorCit2b2lkIEFTdGF0ZTo6c3RhdGVFeGl0ZWQoKSB7Cit9CisKKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisKK0FIaWVyYXJjaGljYWxTdGF0ZU1hY2hpbmU6OkFIaWVyYXJjaGljYWxTdGF0ZU1hY2hpbmUoKSB7Cit9CisKK0FIaWVyYXJjaGljYWxTdGF0ZU1hY2hpbmU6On5BSGllcmFyY2hpY2FsU3RhdGVNYWNoaW5lKCkgeworfQorCit2b2lkIEFIaWVyYXJjaGljYWxTdGF0ZU1hY2hpbmU6OmhhbmRsZU1lc3NhZ2UoY29uc3Qgc3A8QU1lc3NhZ2U+ICZtc2cpIHsKKyAgICBzcDxBU3RhdGU+IHNhdmUgPSBtU3RhdGU7CisKKyAgICBzcDxBU3RhdGU+IGN1ciA9IG1TdGF0ZTsKKyAgICB3aGlsZSAoY3VyICE9IE5VTEwgJiYgIWN1ci0+b25NZXNzYWdlUmVjZWl2ZWQobXNnKSkgeworICAgICAgICAvLyBJZiB5b3UgY2xhaW0gbm90IHRvIGhhdmUgaGFuZGxlZCB0aGUgbWVzc2FnZSB5b3Ugc2hvdWxkbid0CisgICAgICAgIC8vIGhhdmUgY2FsbGVkIHNldFN0YXRlLi4uCisgICAgICAgIENIRUNLKHNhdmUgPT0gbVN0YXRlKTsKKworICAgICAgICBjdXIgPSBjdXItPnBhcmVudFN0YXRlKCk7CisgICAgfQorCisgICAgaWYgKGN1ciAhPSBOVUxMKSB7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBBTE9HVygiV2FybmluZyBtZXNzYWdlICVzIHVuaGFuZGxlZCBpbiByb290IHN0YXRlLiIsCisgICAgICAgICBtc2ctPmRlYnVnU3RyaW5nKCkuY19zdHIoKSk7Cit9CisKK3ZvaWQgQUhpZXJhcmNoaWNhbFN0YXRlTWFjaGluZTo6Y2hhbmdlU3RhdGUoY29uc3Qgc3A8QVN0YXRlPiAmc3RhdGUpIHsKKyAgICBpZiAoc3RhdGUgPT0gbVN0YXRlKSB7CisgICAgICAgIC8vIFF1aWNrIGV4aXQgZm9yIHRoZSBlYXN5IGNhc2UuCisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBWZWN0b3I8c3A8QVN0YXRlPiA+IEE7CisgICAgc3A8QVN0YXRlPiBjdXIgPSBtU3RhdGU7CisgICAgZm9yICg7OykgeworICAgICAgICBBLnB1c2goY3VyKTsKKyAgICAgICAgaWYgKGN1ciA9PSBOVUxMKSB7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBjdXIgPSBjdXItPnBhcmVudFN0YXRlKCk7CisgICAgfQorCisgICAgVmVjdG9yPHNwPEFTdGF0ZT4gPiBCOworICAgIGN1ciA9IHN0YXRlOworICAgIGZvciAoOzspIHsKKyAgICAgICAgQi5wdXNoKGN1cik7CisgICAgICAgIGlmIChjdXIgPT0gTlVMTCkgeworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgY3VyID0gY3VyLT5wYXJlbnRTdGF0ZSgpOworICAgIH0KKworICAgIC8vIFJlbW92ZSB0aGUgY29tbW9uIHRhaWwuCisgICAgd2hpbGUgKEEuc2l6ZSgpID4gMCAmJiBCLnNpemUoKSA+IDAgJiYgQS50b3AoKSA9PSBCLnRvcCgpKSB7CisgICAgICAgIEEucG9wKCk7CisgICAgICAgIEIucG9wKCk7CisgICAgfQorCisgICAgbVN0YXRlID0gc3RhdGU7CisKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IEEuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgQS5lZGl0SXRlbUF0KGkpLT5zdGF0ZUV4aXRlZCgpOworICAgIH0KKworICAgIGZvciAoc2l6ZV90IGkgPSBCLnNpemUoKTsgaSA+IDA7KSB7CisgICAgICAgIGktLTsKKyAgICAgICAgQi5lZGl0SXRlbUF0KGkpLT5zdGF0ZUVudGVyZWQoKTsKKyAgICB9Cit9CisKK30gIC8vIG5hbWVzcGFjZSBhbmRyb2lkCmRpZmYgLS1naXQgYS9tZWRpYS9saWJzdGFnZWZyaWdodC9BbmRyb2lkLmJwIGIvbWVkaWEvbGlic3RhZ2VmcmlnaHQvQW5kcm9pZC5icAppbmRleCA0OGUzNTFiLi5jYzViN2RhIDEwMDY0NAotLS0gYS9tZWRpYS9saWJzdGFnZWZyaWdodC9BbmRyb2lkLmJwCisrKyBiL21lZGlhL2xpYnN0YWdlZnJpZ2h0L0FuZHJvaWQuYnAKQEAgLTQ1LDcgKzQ1LDcgQEAKICAgICAgICAgfSwKICAgICB9LAogCi0gICAgc2hhcmVkX2xpYnM6IFsibGlibWVkaWEiXSwKKyAgICBzaGFyZWRfbGliczogWyJsaWJtZWRpYSIsICJsaWJtZWRpYW5kayJdLAogfQogCiBjY19saWJyYXJ5X3NoYXJlZCB7CkBAIC05MCwxMiArOTAsMTIgQEAKICAgICBuYW1lOiAibGlic3RhZ2VmcmlnaHQiLAogCiAgICAgc3JjczogWworICAgICAgICAiQUFDV3JpdGVyLmNwcCIsCiAgICAgICAgICJBQ29kZWMuY3BwIiwKICAgICAgICAgIkFDb2RlY0J1ZmZlckNoYW5uZWwuY3BwIiwKLSAgICAgICAgIkFBQ1dyaXRlci5jcHAiLAorICAgICAgICAiQUhpZXJhcmNoaWNhbFN0YXRlTWFjaGluZS5jcHAiLAogICAgICAgICAiQU1SV3JpdGVyLmNwcCIsCiAgICAgICAgICJBdWRpb1BsYXllci5jcHAiLAotICAgICAgICAiQXVkaW9QcmVzZW50YXRpb25JbmZvLmNwcCIsCiAgICAgICAgICJBdWRpb1NvdXJjZS5jcHAiLAogICAgICAgICAiQnVmZmVySW1wbC5jcHAiLAogICAgICAgICAiQ2FsbGJhY2tEYXRhU291cmNlLmNwcCIsCkBAIC0xMDUsNiArMTA1LDcgQEAKICAgICAgICAgIkRhdGFDb252ZXJ0ZXIuY3BwIiwKICAgICAgICAgIkRhdGFTb3VyY2VGYWN0b3J5LmNwcCIsCiAgICAgICAgICJEYXRhVVJJU291cmNlLmNwcCIsCisgICAgICAgICJDbGVhckZpbGVTb3VyY2UuY3BwIiwKICAgICAgICAgIkZpbGVTb3VyY2UuY3BwIiwKICAgICAgICAgIkZyYW1lRGVjb2Rlci5jcHAiLAogICAgICAgICAiSFRUUEJhc2UuY3BwIiwKQEAgLTExOSw4ICsxMjAsMTEgQEAKICAgICAgICAgIk1lZGlhQ29kZWNMaXN0LmNwcCIsCiAgICAgICAgICJNZWRpYUNvZGVjTGlzdE92ZXJyaWRlcy5jcHAiLAogICAgICAgICAiTWVkaWFDb2RlY1NvdXJjZS5jcHAiLAorICAgICAgICAiTWVkaWFFeHRyYWN0b3IuY3BwIiwKICAgICAgICAgIk1lZGlhRXh0cmFjdG9yRmFjdG9yeS5jcHAiLAogICAgICAgICAiTWVkaWFTeW5jLmNwcCIsCisgICAgICAgICJNZWRpYVRyYWNrLmNwcCIsCisgICAgICAgICJodHRwL0NsZWFyTWVkaWFIVFRQLmNwcCIsCiAgICAgICAgICJodHRwL01lZGlhSFRUUC5jcHAiLAogICAgICAgICAiTWVkaWFNdXhlci5jcHAiLAogICAgICAgICAiTnVDYWNoZWRTb3VyY2UyLmNwcCIsCkBAIC0xODksNiArMTkzLDEwIEBACiAgICAgICAgICJsaWJGTEFDIiwKICAgICBdLAogCisgICAgaGVhZGVyX2xpYnM6WworICAgICAgICAibWVkaWFfbmRrX2hlYWRlcnMiLAorICAgIF0sCisKICAgICBleHBvcnRfc2hhcmVkX2xpYl9oZWFkZXJzOiBbCiAgICAgICAgICJsaWJtZWRpYSIsCiAgICAgICAgICJhbmRyb2lkLmhpZGwuYWxsb2NhdG9yQDEuMCIsCkBAIC0xOTgsNiArMjA2LDEyIEBACiAgICAgICAgICJpbmNsdWRlIiwKICAgICBdLAogCisgICAgLy8gVGhpcyBpcyBuZWVkZWQgdG8gbWFrZSBzdXJlIGxpYmNvZGVjMiBleGlzdHMgaW4gYWxsIGRldmljZXMuCisgICAgLy8gVE9ETzogUmVtb3ZlIHRoaXMgb25jZSB0aGUgcHVibGljIENDb2RlYyBpcyBlbmFibGVkLgorICAgIHJlcXVpcmVkOiBbCisgICAgICAgICJsaWJjb2RlYzIiLAorICAgIF0sCisKICAgICBjZmxhZ3M6IFsKICAgICAgICAgIi1Xbm8tbXVsdGljaGFyIiwKICAgICAgICAgIi1XZXJyb3IiLApAQCAtMjI2LDU3ICsyNDAsMzAgQEAKICAgICB9LAogfQogCi1jY19saWJyYXJ5IHsKK2NjX2xpYnJhcnlfc3RhdGljIHsKICAgICBuYW1lOiAibGlic3RhZ2VmcmlnaHRfcGxheWVyMiIsCiAKICAgICBzcmNzOiBbCi0gICAgICAgICJDYWxsYmFja0RhdGFTb3VyY2UuY3BwIiwKLSAgICAgICAgIkNhbGxiYWNrTWVkaWFTb3VyY2UuY3BwIiwKLSAgICAgICAgIkRhdGFTb3VyY2VGYWN0b3J5LmNwcCIsCisgICAgICAgICJDbGVhckZpbGVTb3VyY2UuY3BwIiwKICAgICAgICAgIkRhdGFVUklTb3VyY2UuY3BwIiwKLSAgICAgICAgIkZpbGVTb3VyY2UuY3BwIiwKICAgICAgICAgIkhUVFBCYXNlLmNwcCIsCiAgICAgICAgICJIZXZjVXRpbHMuY3BwIiwKLSAgICAgICAgIkludGVyZmFjZVV0aWxzLmNwcCIsCiAgICAgICAgICJNZWRpYUNsb2NrLmNwcCIsCi0gICAgICAgICJNZWRpYUV4dHJhY3RvckZhY3RvcnkuY3BwIiwKICAgICAgICAgIk5ka1V0aWxzLmNwcCIsCi0gICAgICAgICJOdUNhY2hlZFNvdXJjZTIuY3BwIiwKLSAgICAgICAgIlJlbW90ZU1lZGlhRXh0cmFjdG9yLmNwcCIsCi0gICAgICAgICJSZW1vdGVNZWRpYVNvdXJjZS5jcHAiLAogICAgICAgICAiVXRpbHMuY3BwIiwKICAgICAgICAgIlZpZGVvRnJhbWVTY2hlZHVsZXIuY3BwIiwKLSAgICAgICAgImh0dHAvTWVkaWFIVFRQLmNwcCIsCisgICAgICAgICJodHRwL0NsZWFyTWVkaWFIVFRQLmNwcCIsCiAgICAgXSwKIAogICAgIHNoYXJlZF9saWJzOiBbCi0gICAgICAgICJsaWJiaW5kZXIiLAotICAgICAgICAibGliY3V0aWxzIiwKLSAgICAgICAgImxpYmRybWZyYW1ld29yayIsCiAgICAgICAgICJsaWJndWkiLAogICAgICAgICAibGlibG9nIiwKLSAgICAgICAgImxpYm1lZGlhX3BsYXllcjJfdXRpbCIsCi0gICAgICAgICJsaWJhdWRpb2NsaWVudCIsCi0gICAgICAgICJsaWJtZWRpYWV4dHJhY3RvciIsCi0gICAgICAgICJsaWJtZWRpYW1ldHJpY3MiLAotICAgICAgICAibGlibWVkaWF1dGlscyIsCiAgICAgICAgICJsaWJuZXRkX2NsaWVudCIsCi0gICAgICAgICJsaWJ1aSIsCiAgICAgICAgICJsaWJ1dGlscyIsCi0gICAgICAgICJsaWJtZWRpYV9oZWxwZXIiLAogICAgICAgICAibGlic3RhZ2VmcmlnaHRfZm91bmRhdGlvbiIsCi0gICAgICAgICJsaWJ6aXBhcmNoaXZlIiwKICAgICBdLAogCiAgICAgc3RhdGljX2xpYnM6IFsKLSAgICAgICAgImxpYnN0YWdlZnJpZ2h0X2VzZHMiLAotICAgIF0sCi0KLSAgICBoZWFkZXJfbGliczpbCi0gICAgICAgICJtZWRpYV9wbHVnaW5faGVhZGVycyIsCi0gICAgXSwKLQotICAgIGV4cG9ydF9zaGFyZWRfbGliX2hlYWRlcnM6IFsKICAgICAgICAgImxpYm1lZGlhX3BsYXllcjJfdXRpbCIsCiAgICAgXSwKIApkaWZmIC0tZ2l0IGEvbWVkaWEvbGlic3RhZ2VmcmlnaHQvQXVkaW9QcmVzZW50YXRpb25JbmZvLmNwcCBiL21lZGlhL2xpYnN0YWdlZnJpZ2h0L0F1ZGlvUHJlc2VudGF0aW9uSW5mby5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDg2ZTE4NTkuLjAwMDAwMDAKLS0tIGEvbWVkaWEvbGlic3RhZ2VmcmlnaHQvQXVkaW9QcmVzZW50YXRpb25JbmZvLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDQ1ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTggVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAotICoKLSAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwotICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgotICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0gKgotICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLSAqCi0gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCi0gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAotICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCi0gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCi0gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KLSAqLwotCi0vLyAjZGVmaW5lIExPR19OREVCVUcgMAotI2RlZmluZSBMT0dfVEFHICJBdWRpb1ByZXNlbnRhdGlvbkluZm8iCi0KLSNpbmNsdWRlIDxtZWRpYS9BdWRpb1ByZXNlbnRhdGlvbkluZm8uaD4KLQotbmFtZXNwYWNlIGFuZHJvaWQgewotCi1BdWRpb1ByZXNlbnRhdGlvbkluZm86OkF1ZGlvUHJlc2VudGF0aW9uSW5mbygpIHsKLX0KLQotQXVkaW9QcmVzZW50YXRpb25JbmZvOjp+QXVkaW9QcmVzZW50YXRpb25JbmZvKCkgewotICAgIG1QcmVzZW50YXRpb25zLmNsZWFyKCk7Ci19Ci0KLXZvaWQgQXVkaW9QcmVzZW50YXRpb25JbmZvOjphZGRQcmVzZW50YXRpb24oc3A8QXVkaW9QcmVzZW50YXRpb24+IHByZXNlbnRhdGlvbikgewotICAgIG1QcmVzZW50YXRpb25zLnB1c2gocHJlc2VudGF0aW9uKTsKLX0KLQotc2l6ZV90IEF1ZGlvUHJlc2VudGF0aW9uSW5mbzo6Y291bnRQcmVzZW50YXRpb25zKCkgY29uc3QgewotICAgIHJldHVybiBtUHJlc2VudGF0aW9ucy5zaXplKCk7Ci19Ci0KLS8vIFJldHVybnMgYW4gQXVkaW9QcmVzZW50YXRpb24gZm9yIHRoZSBnaXZlbiB2YWxpZCBpbmRleAotLy8gaW5kZXggbXVzdCBiZSA+PTAgYW5kIDwgY291bnRQcmVzZW50YXRpb25zKCkKLWNvbnN0IHNwPEF1ZGlvUHJlc2VudGF0aW9uPiBBdWRpb1ByZXNlbnRhdGlvbkluZm86OmdldFByZXNlbnRhdGlvbihzaXplX3QgaW5kZXgpIGNvbnN0IHsKLSAgICByZXR1cm4gbVByZXNlbnRhdGlvbnNbaW5kZXhdOwotfQotCi19ICAvLyBuYW1lc3BhY2UgYW5kcm9pZApkaWZmIC0tZ2l0IGEvbWVkaWEvbGlic3RhZ2VmcmlnaHQvQ2xlYXJGaWxlU291cmNlLmNwcCBiL21lZGlhL2xpYnN0YWdlZnJpZ2h0L0NsZWFyRmlsZVNvdXJjZS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTNhMmNiNwotLS0gL2Rldi9udWxsCisrKyBiL21lZGlhL2xpYnN0YWdlZnJpZ2h0L0NsZWFyRmlsZVNvdXJjZS5jcHAKQEAgLTAsMCArMSwxNDMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTggVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworCisvLyNkZWZpbmUgTE9HX05ERUJVRyAwCisjZGVmaW5lIExPR19UQUcgIkNsZWFyRmlsZVNvdXJjZSIKKyNpbmNsdWRlIDx1dGlscy9Mb2cuaD4KKworI2luY2x1ZGUgPG1lZGlhL3N0YWdlZnJpZ2h0L2ZvdW5kYXRpb24vQURlYnVnLmg+CisjaW5jbHVkZSA8bWVkaWEvc3RhZ2VmcmlnaHQvQ2xlYXJGaWxlU291cmNlLmg+CisjaW5jbHVkZSA8bWVkaWEvc3RhZ2VmcmlnaHQvVXRpbHMuaD4KKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyNpbmNsdWRlIDx1bmlzdGQuaD4KKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyNpbmNsdWRlIDxzeXMvc3RhdC5oPgorI2luY2x1ZGUgPGZjbnRsLmg+CisKK25hbWVzcGFjZSBhbmRyb2lkIHsKKworQ2xlYXJGaWxlU291cmNlOjpDbGVhckZpbGVTb3VyY2UoY29uc3QgY2hhciAqZmlsZW5hbWUpCisgICAgOiBtRmQoLTEpLAorICAgICAgbU9mZnNldCgwKSwKKyAgICAgIG1MZW5ndGgoLTEpLAorICAgICAgbU5hbWUoIjxudWxsPiIpIHsKKworICAgIGlmIChmaWxlbmFtZSkgeworICAgICAgICBtTmFtZSA9IFN0cmluZzg6OmZvcm1hdCgiRmlsZVNvdXJjZSglcykiLCBmaWxlbmFtZSk7CisgICAgfQorICAgIEFMT0dWKCIlcyIsIGZpbGVuYW1lKTsKKyAgICBtRmQgPSBvcGVuKGZpbGVuYW1lLCBPX0xBUkdFRklMRSB8IE9fUkRPTkxZKTsKKworICAgIGlmIChtRmQgPj0gMCkgeworICAgICAgICBtTGVuZ3RoID0gbHNlZWs2NChtRmQsIDAsIFNFRUtfRU5EKTsKKyAgICB9IGVsc2UgeworICAgICAgICBBTE9HRSgiRmFpbGVkIHRvIG9wZW4gZmlsZSAnJXMnLiAoJXMpIiwgZmlsZW5hbWUsIHN0cmVycm9yKGVycm5vKSk7CisgICAgfQorfQorCitDbGVhckZpbGVTb3VyY2U6OkNsZWFyRmlsZVNvdXJjZShpbnQgZmQsIGludDY0X3Qgb2Zmc2V0LCBpbnQ2NF90IGxlbmd0aCkKKyAgICA6IG1GZChmZCksCisgICAgICBtT2Zmc2V0KG9mZnNldCksCisgICAgICBtTGVuZ3RoKGxlbmd0aCksCisgICAgICBtTmFtZSgiPG51bGw+IikgeworICAgIEFMT0dWKCJmZD0lZCAoJXMpLCBvZmZzZXQ9JWxsZCwgbGVuZ3RoPSVsbGQiLAorICAgICAgICAgICAgZmQsIG5hbWVGb3JGZChmZCkuY19zdHIoKSwgKGxvbmcgbG9uZykgb2Zmc2V0LCAobG9uZyBsb25nKSBsZW5ndGgpOworCisgICAgaWYgKG1PZmZzZXQgPCAwKSB7CisgICAgICAgIG1PZmZzZXQgPSAwOworICAgIH0KKyAgICBpZiAobUxlbmd0aCA8IDApIHsKKyAgICAgICAgbUxlbmd0aCA9IDA7CisgICAgfQorICAgIGlmIChtTGVuZ3RoID4gSU5UNjRfTUFYIC0gbU9mZnNldCkgeworICAgICAgICBtTGVuZ3RoID0gSU5UNjRfTUFYIC0gbU9mZnNldDsKKyAgICB9CisgICAgc3RydWN0IHN0YXQgczsKKyAgICBpZiAoZnN0YXQoZmQsICZzKSA9PSAwKSB7CisgICAgICAgIGlmIChtT2Zmc2V0ID4gcy5zdF9zaXplKSB7CisgICAgICAgICAgICBtT2Zmc2V0ID0gcy5zdF9zaXplOworICAgICAgICAgICAgbUxlbmd0aCA9IDA7CisgICAgICAgIH0KKyAgICAgICAgaWYgKG1PZmZzZXQgKyBtTGVuZ3RoID4gcy5zdF9zaXplKSB7CisgICAgICAgICAgICBtTGVuZ3RoID0gcy5zdF9zaXplIC0gbU9mZnNldDsKKyAgICAgICAgfQorICAgIH0KKyAgICBpZiAobU9mZnNldCAhPSBvZmZzZXQgfHwgbUxlbmd0aCAhPSBsZW5ndGgpIHsKKyAgICAgICAgQUxPR1coIm9mZnNldC9sZW5ndGggYWRqdXN0ZWQgZnJvbSAlbGxkLyVsbGQgdG8gJWxsZC8lbGxkIiwKKyAgICAgICAgICAgICAgICAobG9uZyBsb25nKSBvZmZzZXQsIChsb25nIGxvbmcpIGxlbmd0aCwKKyAgICAgICAgICAgICAgICAobG9uZyBsb25nKSBtT2Zmc2V0LCAobG9uZyBsb25nKSBtTGVuZ3RoKTsKKyAgICB9CisKKyAgICBtTmFtZSA9IFN0cmluZzg6OmZvcm1hdCgKKyAgICAgICAgICAgICJGaWxlU291cmNlKGZkKCVzKSwgJWxsZCwgJWxsZCkiLAorICAgICAgICAgICAgbmFtZUZvckZkKGZkKS5jX3N0cigpLAorICAgICAgICAgICAgKGxvbmcgbG9uZykgbU9mZnNldCwKKyAgICAgICAgICAgIChsb25nIGxvbmcpIG1MZW5ndGgpOworCit9CisKK0NsZWFyRmlsZVNvdXJjZTo6fkNsZWFyRmlsZVNvdXJjZSgpIHsKKyAgICBpZiAobUZkID49IDApIHsKKyAgICAgICAgOjpjbG9zZShtRmQpOworICAgICAgICBtRmQgPSAtMTsKKyAgICB9Cit9CisKK3N0YXR1c190IENsZWFyRmlsZVNvdXJjZTo6aW5pdENoZWNrKCkgY29uc3QgeworICAgIHJldHVybiBtRmQgPj0gMCA/IE9LIDogTk9fSU5JVDsKK30KKworc3NpemVfdCBDbGVhckZpbGVTb3VyY2U6OnJlYWRBdChvZmY2NF90IG9mZnNldCwgdm9pZCAqZGF0YSwgc2l6ZV90IHNpemUpIHsKKyAgICBpZiAobUZkIDwgMCkgeworICAgICAgICByZXR1cm4gTk9fSU5JVDsKKyAgICB9CisKKyAgICBNdXRleDo6QXV0b2xvY2sgYXV0b0xvY2sobUxvY2spOworICAgIGlmIChtTGVuZ3RoID49IDApIHsKKyAgICAgICAgaWYgKG9mZnNldCA+PSBtTGVuZ3RoKSB7CisgICAgICAgICAgICByZXR1cm4gMDsgIC8vIHJlYWQgYmV5b25kIEVPRi4KKyAgICAgICAgfQorICAgICAgICB1aW50NjRfdCBudW1BdmFpbGFibGUgPSBtTGVuZ3RoIC0gb2Zmc2V0OworICAgICAgICBpZiAoKHVpbnQ2NF90KXNpemUgPiBudW1BdmFpbGFibGUpIHsKKyAgICAgICAgICAgIHNpemUgPSBudW1BdmFpbGFibGU7CisgICAgICAgIH0KKyAgICB9CisgICAgcmV0dXJuIHJlYWRBdF9sKG9mZnNldCwgZGF0YSwgc2l6ZSk7Cit9CisKK3NzaXplX3QgQ2xlYXJGaWxlU291cmNlOjpyZWFkQXRfbChvZmY2NF90IG9mZnNldCwgdm9pZCAqZGF0YSwgc2l6ZV90IHNpemUpIHsKKyAgICBvZmY2NF90IHJlc3VsdCA9IGxzZWVrNjQobUZkLCBvZmZzZXQgKyBtT2Zmc2V0LCBTRUVLX1NFVCk7CisgICAgaWYgKHJlc3VsdCA9PSAtMSkgeworICAgICAgICBBTE9HRSgic2VlayB0byAlbGxkIGZhaWxlZCIsIChsb25nIGxvbmcpKG9mZnNldCArIG1PZmZzZXQpKTsKKyAgICAgICAgcmV0dXJuIFVOS05PV05fRVJST1I7CisgICAgfQorCisgICAgcmV0dXJuIDo6cmVhZChtRmQsIGRhdGEsIHNpemUpOworfQorCitzdGF0dXNfdCBDbGVhckZpbGVTb3VyY2U6OmdldFNpemUob2ZmNjRfdCAqc2l6ZSkgeworICAgIE11dGV4OjpBdXRvbG9jayBhdXRvTG9jayhtTG9jayk7CisKKyAgICBpZiAobUZkIDwgMCkgeworICAgICAgICByZXR1cm4gTk9fSU5JVDsKKyAgICB9CisKKyAgICAqc2l6ZSA9IG1MZW5ndGg7CisKKyAgICByZXR1cm4gT0s7Cit9CisKK30gIC8vIG5hbWVzcGFjZSBhbmRyb2lkCmRpZmYgLS1naXQgYS9tZWRpYS9saWJzdGFnZWZyaWdodC9GaWxlU291cmNlLmNwcCBiL21lZGlhL2xpYnN0YWdlZnJpZ2h0L0ZpbGVTb3VyY2UuY3BwCmluZGV4IGVlZjUzMTQuLmFlZTdmZDggMTAwNjQ0Ci0tLSBhL21lZGlhL2xpYnN0YWdlZnJpZ2h0L0ZpbGVTb3VyY2UuY3BwCisrKyBiL21lZGlhL2xpYnN0YWdlZnJpZ2h0L0ZpbGVTb3VyY2UuY3BwCkBAIC0yMiw5MCArMjIsMjggQEAKICNpbmNsdWRlIDxtZWRpYS9zdGFnZWZyaWdodC9GaWxlU291cmNlLmg+CiAjaW5jbHVkZSA8bWVkaWEvc3RhZ2VmcmlnaHQvVXRpbHMuaD4KICNpbmNsdWRlIDxwcml2YXRlL2FuZHJvaWRfZmlsZXN5c3RlbV9jb25maWcuaD4KLSNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KLSNpbmNsdWRlIDx1bmlzdGQuaD4KLSNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KLSNpbmNsdWRlIDxzeXMvc3RhdC5oPgotI2luY2x1ZGUgPGZjbnRsLmg+CiAKIG5hbWVzcGFjZSBhbmRyb2lkIHsKIAogRmlsZVNvdXJjZTo6RmlsZVNvdXJjZShjb25zdCBjaGFyICpmaWxlbmFtZSkKLSAgICA6IG1GZCgtMSksCi0gICAgICBtT2Zmc2V0KDApLAotICAgICAgbUxlbmd0aCgtMSksCi0gICAgICBtTmFtZSgiPG51bGw+IiksCisgICAgOiBDbGVhckZpbGVTb3VyY2UoZmlsZW5hbWUpLAogICAgICAgbURlY3J5cHRIYW5kbGUoTlVMTCksCiAgICAgICBtRHJtTWFuYWdlckNsaWVudChOVUxMKSwKICAgICAgIG1Ecm1CdWZPZmZzZXQoMCksCiAgICAgICBtRHJtQnVmU2l6ZSgwKSwKICAgICAgIG1Ecm1CdWYoTlVMTCl7Ci0KLSAgICBpZiAoZmlsZW5hbWUpIHsKLSAgICAgICAgbU5hbWUgPSBTdHJpbmc4Ojpmb3JtYXQoIkZpbGVTb3VyY2UoJXMpIiwgZmlsZW5hbWUpOwotICAgIH0KLSAgICBBTE9HVigiJXMiLCBmaWxlbmFtZSk7Ci0gICAgbUZkID0gb3BlbihmaWxlbmFtZSwgT19MQVJHRUZJTEUgfCBPX1JET05MWSk7Ci0KLSAgICBpZiAobUZkID49IDApIHsKLSAgICAgICAgbUxlbmd0aCA9IGxzZWVrNjQobUZkLCAwLCBTRUVLX0VORCk7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgQUxPR0UoIkZhaWxlZCB0byBvcGVuIGZpbGUgJyVzJy4gKCVzKSIsIGZpbGVuYW1lLCBzdHJlcnJvcihlcnJubykpOwotICAgIH0KIH0KIAogRmlsZVNvdXJjZTo6RmlsZVNvdXJjZShpbnQgZmQsIGludDY0X3Qgb2Zmc2V0LCBpbnQ2NF90IGxlbmd0aCkKLSAgICA6IG1GZChmZCksCi0gICAgICBtT2Zmc2V0KG9mZnNldCksCi0gICAgICBtTGVuZ3RoKGxlbmd0aCksCi0gICAgICBtTmFtZSgiPG51bGw+IiksCisgICAgOiBDbGVhckZpbGVTb3VyY2UoZmQsIG9mZnNldCwgbGVuZ3RoKSwKICAgICAgIG1EZWNyeXB0SGFuZGxlKE5VTEwpLAogICAgICAgbURybU1hbmFnZXJDbGllbnQoTlVMTCksCiAgICAgICBtRHJtQnVmT2Zmc2V0KDApLAogICAgICAgbURybUJ1ZlNpemUoMCksCiAgICAgICBtRHJtQnVmKE5VTEwpIHsKLSAgICBBTE9HVigiZmQ9JWQgKCVzKSwgb2Zmc2V0PSVsbGQsIGxlbmd0aD0lbGxkIiwKLSAgICAgICAgICAgIGZkLCBuYW1lRm9yRmQoZmQpLmNfc3RyKCksIChsb25nIGxvbmcpIG9mZnNldCwgKGxvbmcgbG9uZykgbGVuZ3RoKTsKLQotICAgIGlmIChtT2Zmc2V0IDwgMCkgewotICAgICAgICBtT2Zmc2V0ID0gMDsKLSAgICB9Ci0gICAgaWYgKG1MZW5ndGggPCAwKSB7Ci0gICAgICAgIG1MZW5ndGggPSAwOwotICAgIH0KLSAgICBpZiAobUxlbmd0aCA+IElOVDY0X01BWCAtIG1PZmZzZXQpIHsKLSAgICAgICAgbUxlbmd0aCA9IElOVDY0X01BWCAtIG1PZmZzZXQ7Ci0gICAgfQotICAgIHN0cnVjdCBzdGF0IHM7Ci0gICAgaWYgKGZzdGF0KGZkLCAmcykgPT0gMCkgewotICAgICAgICBpZiAobU9mZnNldCA+IHMuc3Rfc2l6ZSkgewotICAgICAgICAgICAgbU9mZnNldCA9IHMuc3Rfc2l6ZTsKLSAgICAgICAgICAgIG1MZW5ndGggPSAwOwotICAgICAgICB9Ci0gICAgICAgIGlmIChtT2Zmc2V0ICsgbUxlbmd0aCA+IHMuc3Rfc2l6ZSkgewotICAgICAgICAgICAgbUxlbmd0aCA9IHMuc3Rfc2l6ZSAtIG1PZmZzZXQ7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgaWYgKG1PZmZzZXQgIT0gb2Zmc2V0IHx8IG1MZW5ndGggIT0gbGVuZ3RoKSB7Ci0gICAgICAgIEFMT0dXKCJvZmZzZXQvbGVuZ3RoIGFkanVzdGVkIGZyb20gJWxsZC8lbGxkIHRvICVsbGQvJWxsZCIsCi0gICAgICAgICAgICAgICAgKGxvbmcgbG9uZykgb2Zmc2V0LCAobG9uZyBsb25nKSBsZW5ndGgsCi0gICAgICAgICAgICAgICAgKGxvbmcgbG9uZykgbU9mZnNldCwgKGxvbmcgbG9uZykgbUxlbmd0aCk7Ci0gICAgfQotCi0gICAgbU5hbWUgPSBTdHJpbmc4Ojpmb3JtYXQoCi0gICAgICAgICAgICAiRmlsZVNvdXJjZShmZCglcyksICVsbGQsICVsbGQpIiwKLSAgICAgICAgICAgIG5hbWVGb3JGZChmZCkuY19zdHIoKSwKLSAgICAgICAgICAgIChsb25nIGxvbmcpIG1PZmZzZXQsCi0gICAgICAgICAgICAobG9uZyBsb25nKSBtTGVuZ3RoKTsKLQogfQogCiBGaWxlU291cmNlOjp+RmlsZVNvdXJjZSgpIHsKLSAgICBpZiAobUZkID49IDApIHsKLSAgICAgICAgOjpjbG9zZShtRmQpOwotICAgICAgICBtRmQgPSAtMTsKLSAgICB9Ci0KICAgICBpZiAobURybUJ1ZiAhPSBOVUxMKSB7CiAgICAgICAgIGRlbGV0ZVtdIG1Ecm1CdWY7CiAgICAgICAgIG1Ecm1CdWYgPSBOVUxMOwpAQCAtMTI0LDEwICs2Miw2IEBACiAgICAgfQogfQogCi1zdGF0dXNfdCBGaWxlU291cmNlOjppbml0Q2hlY2soKSBjb25zdCB7Ci0gICAgcmV0dXJuIG1GZCA+PSAwID8gT0sgOiBOT19JTklUOwotfQotCiBzc2l6ZV90IEZpbGVTb3VyY2U6OnJlYWRBdChvZmY2NF90IG9mZnNldCwgdm9pZCAqZGF0YSwgc2l6ZV90IHNpemUpIHsKICAgICBpZiAobUZkIDwgMCkgewogICAgICAgICByZXR1cm4gTk9fSU5JVDsKQEAgLTE0NywzMCArODEsMTIgQEAKIAogICAgIGlmIChtRGVjcnlwdEhhbmRsZSAhPSBOVUxMICYmIERlY3J5cHRBcGlUeXBlOjpDT05UQUlORVJfQkFTRUQKICAgICAgICAgICAgID09IG1EZWNyeXB0SGFuZGxlLT5kZWNyeXB0QXBpVHlwZSkgewotICAgICAgICByZXR1cm4gcmVhZEF0RFJNKG9mZnNldCwgZGF0YSwgc2l6ZSk7CisgICAgICAgIHJldHVybiByZWFkQXREUk1fbChvZmZzZXQsIGRhdGEsIHNpemUpOwogICAgfSBlbHNlIHsKLSAgICAgICAgb2ZmNjRfdCByZXN1bHQgPSBsc2VlazY0KG1GZCwgb2Zmc2V0ICsgbU9mZnNldCwgU0VFS19TRVQpOwotICAgICAgICBpZiAocmVzdWx0ID09IC0xKSB7Ci0gICAgICAgICAgICBBTE9HRSgic2VlayB0byAlbGxkIGZhaWxlZCIsIChsb25nIGxvbmcpKG9mZnNldCArIG1PZmZzZXQpKTsKLSAgICAgICAgICAgIHJldHVybiBVTktOT1dOX0VSUk9SOwotICAgICAgICB9Ci0KLSAgICAgICAgcmV0dXJuIDo6cmVhZChtRmQsIGRhdGEsIHNpemUpOworICAgICAgICByZXR1cm4gcmVhZEF0X2wob2Zmc2V0LCBkYXRhLCBzaXplKTsKICAgICB9CiB9CiAKLXN0YXR1c190IEZpbGVTb3VyY2U6OmdldFNpemUob2ZmNjRfdCAqc2l6ZSkgewotICAgIE11dGV4OjpBdXRvbG9jayBhdXRvTG9jayhtTG9jayk7Ci0KLSAgICBpZiAobUZkIDwgMCkgewotICAgICAgICByZXR1cm4gTk9fSU5JVDsKLSAgICB9Ci0KLSAgICAqc2l6ZSA9IG1MZW5ndGg7Ci0KLSAgICByZXR1cm4gT0s7Ci19Ci0KIHNwPERlY3J5cHRIYW5kbGU+IEZpbGVTb3VyY2U6OkRybUluaXRpYWxpemF0aW9uKGNvbnN0IGNoYXIgKm1pbWUpIHsKICAgICBpZiAoZ2V0dWlkKCkgPT0gQUlEX01FRElBX0VYKSByZXR1cm4gbnVsbHB0cjsgLy8gbm8gRFJNIGluIG1lZGlhIGV4dHJhY3RvcgogICAgIGlmIChtRHJtTWFuYWdlckNsaWVudCA9PSBOVUxMKSB7CkBAIC0xOTQsNyArMTEwLDcgQEAKICAgICByZXR1cm4gbURlY3J5cHRIYW5kbGU7CiB9CiAKLXNzaXplX3QgRmlsZVNvdXJjZTo6cmVhZEF0RFJNKG9mZjY0X3Qgb2Zmc2V0LCB2b2lkICpkYXRhLCBzaXplX3Qgc2l6ZSkgeworc3NpemVfdCBGaWxlU291cmNlOjpyZWFkQXREUk1fbChvZmY2NF90IG9mZnNldCwgdm9pZCAqZGF0YSwgc2l6ZV90IHNpemUpIHsKICAgICBzaXplX3QgRFJNX0NBQ0hFX1NJWkUgPSAxMDI0OwogICAgIGlmIChtRHJtQnVmID09IE5VTEwpIHsKICAgICAgICAgbURybUJ1ZiA9IG5ldyB1bnNpZ25lZCBjaGFyW0RSTV9DQUNIRV9TSVpFXTsKZGlmZiAtLWdpdCBhL21lZGlhL2xpYnN0YWdlZnJpZ2h0L0ZyYW1lRGVjb2Rlci5jcHAgYi9tZWRpYS9saWJzdGFnZWZyaWdodC9GcmFtZURlY29kZXIuY3BwCmluZGV4IDZlOTQ1MTcuLmM2MmMwNWEgMTAwNjQ0Ci0tLSBhL21lZGlhL2xpYnN0YWdlZnJpZ2h0L0ZyYW1lRGVjb2Rlci5jcHAKKysrIGIvbWVkaWEvbGlic3RhZ2VmcmlnaHQvRnJhbWVEZWNvZGVyLmNwcApAQCAtNTAxLDkgKzUwMSwxNSBAQAogICAgICAgICByZXR1cm4gRVJST1JfTUFMRk9STUVEOwogICAgIH0KIAotICAgIGludDMyX3Qgd2lkdGgsIGhlaWdodDsKLSAgICBDSEVDSyhvdXRwdXRGb3JtYXQtPmZpbmRJbnQzMigid2lkdGgiLCAmd2lkdGgpKTsKLSAgICBDSEVDSyhvdXRwdXRGb3JtYXQtPmZpbmRJbnQzMigiaGVpZ2h0IiwgJmhlaWdodCkpOworICAgIGludDMyX3Qgd2lkdGgsIGhlaWdodCwgc3RyaWRlLCBzcmNGb3JtYXQ7CisgICAgaWYgKCFvdXRwdXRGb3JtYXQtPmZpbmRJbnQzMigid2lkdGgiLCAmd2lkdGgpIHx8CisgICAgICAgICAgICAhb3V0cHV0Rm9ybWF0LT5maW5kSW50MzIoImhlaWdodCIsICZoZWlnaHQpIHx8CisgICAgICAgICAgICAhb3V0cHV0Rm9ybWF0LT5maW5kSW50MzIoInN0cmlkZSIsICZzdHJpZGUpIHx8CisgICAgICAgICAgICAhb3V0cHV0Rm9ybWF0LT5maW5kSW50MzIoImNvbG9yLWZvcm1hdCIsICZzcmNGb3JtYXQpKSB7CisgICAgICAgIEFMT0dFKCJmb3JtYXQgbWlzc2luZyBkaW1lbnNpb24gb3IgY29sb3I6ICVzIiwKKyAgICAgICAgICAgICAgICBvdXRwdXRGb3JtYXQtPmRlYnVnU3RyaW5nKCkuY19zdHIoKSk7CisgICAgICAgIHJldHVybiBFUlJPUl9NQUxGT1JNRUQ7CisgICAgfQogCiAgICAgaW50MzJfdCBjcm9wX2xlZnQsIGNyb3BfdG9wLCBjcm9wX3JpZ2h0LCBjcm9wX2JvdHRvbTsKICAgICBpZiAoIW91dHB1dEZvcm1hdC0+ZmluZFJlY3QoImNyb3AiLCAmY3JvcF9sZWZ0LCAmY3JvcF90b3AsICZjcm9wX3JpZ2h0LCAmY3JvcF9ib3R0b20pKSB7CkBAIC01MjIsMTkgKzUyOCwyNyBAQAogICAgIGFkZEZyYW1lKGZyYW1lTWVtKTsKICAgICBWaWRlb0ZyYW1lKiBmcmFtZSA9IHN0YXRpY19jYXN0PFZpZGVvRnJhbWUqPihmcmFtZU1lbS0+cG9pbnRlcigpKTsKIAotICAgIGludDMyX3Qgc3JjRm9ybWF0OwotICAgIENIRUNLKG91dHB1dEZvcm1hdC0+ZmluZEludDMyKCJjb2xvci1mb3JtYXQiLCAmc3JjRm9ybWF0KSk7Ci0KICAgICBDb2xvckNvbnZlcnRlciBjb252ZXJ0ZXIoKE9NWF9DT0xPUl9GT1JNQVRUWVBFKXNyY0Zvcm1hdCwgZHN0Rm9ybWF0KCkpOwogCisgICAgdWludDMyX3Qgc3RhbmRhcmQsIHJhbmdlLCB0cmFuc2ZlcjsKKyAgICBpZiAoIW91dHB1dEZvcm1hdC0+ZmluZEludDMyKCJjb2xvci1zdGFuZGFyZCIsIChpbnQzMl90Kikmc3RhbmRhcmQpKSB7CisgICAgICAgIHN0YW5kYXJkID0gMDsKKyAgICB9CisgICAgaWYgKCFvdXRwdXRGb3JtYXQtPmZpbmRJbnQzMigiY29sb3ItcmFuZ2UiLCAoaW50MzJfdCopJnJhbmdlKSkgeworICAgICAgICByYW5nZSA9IDA7CisgICAgfQorICAgIGlmICghb3V0cHV0Rm9ybWF0LT5maW5kSW50MzIoImNvbG9yLXRyYW5zZmVyIiwgKGludDMyX3QqKSZ0cmFuc2ZlcikpIHsKKyAgICAgICAgdHJhbnNmZXIgPSAwOworICAgIH0KKyAgICBjb252ZXJ0ZXIuc2V0U3JjQ29sb3JTcGFjZShzdGFuZGFyZCwgcmFuZ2UsIHRyYW5zZmVyKTsKKwogICAgIGlmIChjb252ZXJ0ZXIuaXNWYWxpZCgpKSB7CiAgICAgICAgIGNvbnZlcnRlci5jb252ZXJ0KAogICAgICAgICAgICAgICAgIChjb25zdCB1aW50OF90ICopdmlkZW9GcmFtZUJ1ZmZlci0+ZGF0YSgpLAotICAgICAgICAgICAgICAgIHdpZHRoLCBoZWlnaHQsCisgICAgICAgICAgICAgICAgd2lkdGgsIGhlaWdodCwgc3RyaWRlLAogICAgICAgICAgICAgICAgIGNyb3BfbGVmdCwgY3JvcF90b3AsIGNyb3BfcmlnaHQsIGNyb3BfYm90dG9tLAogICAgICAgICAgICAgICAgIGZyYW1lLT5nZXRGbGF0dGVuZWREYXRhKCksCi0gICAgICAgICAgICAgICAgZnJhbWUtPm1XaWR0aCwKLSAgICAgICAgICAgICAgICBmcmFtZS0+bUhlaWdodCwKKyAgICAgICAgICAgICAgICBmcmFtZS0+bVdpZHRoLCBmcmFtZS0+bUhlaWdodCwgZnJhbWUtPm1Sb3dCeXRlcywKICAgICAgICAgICAgICAgICBjcm9wX2xlZnQsIGNyb3BfdG9wLCBjcm9wX3JpZ2h0LCBjcm9wX2JvdHRvbSk7CiAgICAgICAgIHJldHVybiBPSzsKICAgICB9CkBAIC02ODEsOSArNjk1LDEwIEBACiAgICAgICAgIHJldHVybiBFUlJPUl9NQUxGT1JNRUQ7CiAgICAgfQogCi0gICAgaW50MzJfdCB3aWR0aCwgaGVpZ2h0OworICAgIGludDMyX3Qgd2lkdGgsIGhlaWdodCwgc3RyaWRlOwogICAgIENIRUNLKG91dHB1dEZvcm1hdC0+ZmluZEludDMyKCJ3aWR0aCIsICZ3aWR0aCkpOwogICAgIENIRUNLKG91dHB1dEZvcm1hdC0+ZmluZEludDMyKCJoZWlnaHQiLCAmaGVpZ2h0KSk7CisgICAgQ0hFQ0sob3V0cHV0Rm9ybWF0LT5maW5kSW50MzIoInN0cmlkZSIsICZzdHJpZGUpKTsKIAogICAgIGlmIChtRnJhbWUgPT0gTlVMTCkgewogICAgICAgICBzcDxJTWVtb3J5PiBmcmFtZU1lbSA9IGFsbG9jVmlkZW9GcmFtZSgKQEAgLTY5OCw2ICs3MTMsMTggQEAKIAogICAgIENvbG9yQ29udmVydGVyIGNvbnZlcnRlcigoT01YX0NPTE9SX0ZPUk1BVFRZUEUpc3JjRm9ybWF0LCBkc3RGb3JtYXQoKSk7CiAKKyAgICB1aW50MzJfdCBzdGFuZGFyZCwgcmFuZ2UsIHRyYW5zZmVyOworICAgIGlmICghb3V0cHV0Rm9ybWF0LT5maW5kSW50MzIoImNvbG9yLXN0YW5kYXJkIiwgKGludDMyX3QqKSZzdGFuZGFyZCkpIHsKKyAgICAgICAgc3RhbmRhcmQgPSAwOworICAgIH0KKyAgICBpZiAoIW91dHB1dEZvcm1hdC0+ZmluZEludDMyKCJjb2xvci1yYW5nZSIsIChpbnQzMl90KikmcmFuZ2UpKSB7CisgICAgICAgIHJhbmdlID0gMDsKKyAgICB9CisgICAgaWYgKCFvdXRwdXRGb3JtYXQtPmZpbmRJbnQzMigiY29sb3ItdHJhbnNmZXIiLCAoaW50MzJfdCopJnRyYW5zZmVyKSkgeworICAgICAgICB0cmFuc2ZlciA9IDA7CisgICAgfQorICAgIGNvbnZlcnRlci5zZXRTcmNDb2xvclNwYWNlKHN0YW5kYXJkLCByYW5nZSwgdHJhbnNmZXIpOworCiAgICAgaW50MzJfdCBkc3RMZWZ0LCBkc3RUb3AsIGRzdFJpZ2h0LCBkc3RCb3R0b207CiAgICAgZHN0TGVmdCA9IG1UaWxlc0RlY29kZWQgJSBtR3JpZENvbHMgKiB3aWR0aDsKICAgICBkc3RUb3AgPSBtVGlsZXNEZWNvZGVkIC8gbUdyaWRDb2xzICogaGVpZ2h0OwpAQCAtNzI3LDExICs3NTQsMTAgQEAKICAgICBpZiAoY29udmVydGVyLmlzVmFsaWQoKSkgewogICAgICAgICBjb252ZXJ0ZXIuY29udmVydCgKICAgICAgICAgICAgICAgICAoY29uc3QgdWludDhfdCAqKXZpZGVvRnJhbWVCdWZmZXItPmRhdGEoKSwKLSAgICAgICAgICAgICAgICB3aWR0aCwgaGVpZ2h0LAorICAgICAgICAgICAgICAgIHdpZHRoLCBoZWlnaHQsIHN0cmlkZSwKICAgICAgICAgICAgICAgICBjcm9wX2xlZnQsIGNyb3BfdG9wLCBjcm9wX3JpZ2h0LCBjcm9wX2JvdHRvbSwKICAgICAgICAgICAgICAgICBtRnJhbWUtPmdldEZsYXR0ZW5lZERhdGEoKSwKLSAgICAgICAgICAgICAgICBtRnJhbWUtPm1XaWR0aCwKLSAgICAgICAgICAgICAgICBtRnJhbWUtPm1IZWlnaHQsCisgICAgICAgICAgICAgICAgbUZyYW1lLT5tV2lkdGgsIG1GcmFtZS0+bUhlaWdodCwgbUZyYW1lLT5tUm93Qnl0ZXMsCiAgICAgICAgICAgICAgICAgZHN0TGVmdCwgZHN0VG9wLCBkc3RSaWdodCwgZHN0Qm90dG9tKTsKICAgICAgICAgcmV0dXJuIE9LOwogICAgIH0KZGlmZiAtLWdpdCBhL21lZGlhL2xpYnN0YWdlZnJpZ2h0L0hUVFBCYXNlLmNwcCBiL21lZGlhL2xpYnN0YWdlZnJpZ2h0L0hUVFBCYXNlLmNwcAppbmRleCAwZjI0MzI5Li4wM2UwZDEyIDEwMDY0NAotLS0gYS9tZWRpYS9saWJzdGFnZWZyaWdodC9IVFRQQmFzZS5jcHAKKysrIGIvbWVkaWEvbGlic3RhZ2VmcmlnaHQvSFRUUEJhc2UuY3BwCkBAIC0xMTQsMzAgKzExNCw0IEBACiAgICAgbU1heEJhbmR3aWR0aEhpc3RvcnlJdGVtcyA9IG51bUhpc3RvcnlJdGVtczsKIH0KIAotLy8gc3RhdGljCi12b2lkIEhUVFBCYXNlOjpSZWdpc3RlclNvY2tldFVzZXJUYWcoaW50IHNvY2tmZCwgdWlkX3QgdWlkLCB1aW50MzJfdCBrVGFnKSB7Ci0gICAgaW50IHJlcyA9IHF0YWd1aWRfdGFnU29ja2V0KHNvY2tmZCwga1RhZywgdWlkKTsKLSAgICBpZiAocmVzICE9IDApIHsKLSAgICAgICAgQUxPR0UoIkZhaWxlZCB0YWdnaW5nIHNvY2tldCAlZCBmb3IgdWlkICVkIChNeSBVSUQ9JWQpIiwgc29ja2ZkLCB1aWQsIGdldGV1aWQoKSk7Ci0gICAgfQotfQotCi0vLyBzdGF0aWMKLXZvaWQgSFRUUEJhc2U6OlVuUmVnaXN0ZXJTb2NrZXRVc2VyVGFnKGludCBzb2NrZmQpIHsKLSAgICBpbnQgcmVzID0gcXRhZ3VpZF91bnRhZ1NvY2tldChzb2NrZmQpOwotICAgIGlmIChyZXMgIT0gMCkgewotICAgICAgICBBTE9HRSgiRmFpbGVkIHVudGFnZ2luZyBzb2NrZXQgJWQgKE15IFVJRD0lZCkiLCBzb2NrZmQsIGdldGV1aWQoKSk7Ci0gICAgfQotfQotCi0vLyBzdGF0aWMKLXZvaWQgSFRUUEJhc2U6OlJlZ2lzdGVyU29ja2V0VXNlck1hcmsoaW50IHNvY2tmZCwgdWlkX3QgdWlkKSB7Ci0gICAgc2V0TmV0d29ya0ZvclVzZXIodWlkLCBzb2NrZmQpOwotfQotCi0vLyBzdGF0aWMKLXZvaWQgSFRUUEJhc2U6OlVuUmVnaXN0ZXJTb2NrZXRVc2VyTWFyayhpbnQgc29ja2ZkKSB7Ci0gICAgUmVnaXN0ZXJTb2NrZXRVc2VyTWFyayhzb2NrZmQsIGdldGV1aWQoKSk7Ci19Ci0KIH0gIC8vIG5hbWVzcGFjZSBhbmRyb2lkCmRpZmYgLS1naXQgYS9tZWRpYS9saWJzdGFnZWZyaWdodC9NZWRpYUNvZGVjLmNwcCBiL21lZGlhL2xpYnN0YWdlZnJpZ2h0L01lZGlhQ29kZWMuY3BwCmluZGV4IDEyMGM4NjQuLjcwMDY0ZWEgMTAwNjQ0Ci0tLSBhL21lZGlhL2xpYnN0YWdlZnJpZ2h0L01lZGlhQ29kZWMuY3BwCisrKyBiL21lZGlhL2xpYnN0YWdlZnJpZ2h0L01lZGlhQ29kZWMuY3BwCkBAIC0yNjc0LDcgKzI2NzQsNyBAQAogICAgICAgICAgICAgQ0hFQ0sobXNnLT5zZW5kZXJBd2FpdHNSZXNwb25zZSgmcmVwbHlJRCkpOwogCiAgICAgICAgICAgICBpZiAobUZsYWdzICYga0ZsYWdJc0FzeW5jKSB7Ci0gICAgICAgICAgICAgICAgQUxPR0UoImRlcXVldWVPdXRwdXRCdWZmZXIgY2FuJ3QgYmUgdXNlZCBpbiBhc3luYyBtb2RlIik7CisgICAgICAgICAgICAgICAgQUxPR0UoImRlcXVldWVJbnB1dEJ1ZmZlciBjYW4ndCBiZSB1c2VkIGluIGFzeW5jIG1vZGUiKTsKICAgICAgICAgICAgICAgICBQb3N0UmVwbHlXaXRoRXJyb3IocmVwbHlJRCwgSU5WQUxJRF9PUEVSQVRJT04pOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQpkaWZmIC0tZ2l0IGEvbWVkaWEvbGlic3RhZ2VmcmlnaHQvTWVkaWFFeHRyYWN0b3IuY3BwIGIvbWVkaWEvbGlic3RhZ2VmcmlnaHQvTWVkaWFFeHRyYWN0b3IuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFjOWViMGIKLS0tIC9kZXYvbnVsbAorKysgYi9tZWRpYS9saWJzdGFnZWZyaWdodC9NZWRpYUV4dHJhY3Rvci5jcHAKQEAgLTAsMCArMSwxMzcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworCisvLyNkZWZpbmUgTE9HX05ERUJVRyAwCisjZGVmaW5lIExPR19UQUcgIk1lZGlhRXh0cmFjdG9yIgorI2luY2x1ZGUgPHV0aWxzL0xvZy5oPgorI2luY2x1ZGUgPHB3ZC5oPgorCisjaW5jbHVkZSA8bWVkaWEvc3RhZ2VmcmlnaHQvZm91bmRhdGlvbi9BRGVidWcuaD4KKyNpbmNsdWRlIDxtZWRpYS9zdGFnZWZyaWdodC9NZWRpYUV4dHJhY3Rvci5oPgorI2luY2x1ZGUgPG1lZGlhL3N0YWdlZnJpZ2h0L01ldGFEYXRhLmg+CisjaW5jbHVkZSA8bWVkaWEvc3RhZ2VmcmlnaHQvVXRpbHMuaD4KKyNpbmNsdWRlIDxtZWRpYS9OZGtNZWRpYUZvcm1hdFByaXYuaD4KKyNpbmNsdWRlIDxtZWRpYS9OZGtNZWRpYUVycm9yUHJpdi5oPgorCituYW1lc3BhY2UgYW5kcm9pZCB7CisKK01lZGlhRXh0cmFjdG9yOjpNZWRpYUV4dHJhY3RvcigpIHsKKyAgICBpZiAoIUxPR19OREVCVUcpIHsKKyAgICAgICAgdWlkX3QgdWlkID0gZ2V0dWlkKCk7CisgICAgICAgIHN0cnVjdCBwYXNzd2QgKnB3ID0gZ2V0cHd1aWQodWlkKTsKKyAgICAgICAgQUxPR1YoImV4dHJhY3RvciBjcmVhdGVkIGluIHVpZDogJWQgKCVzKSIsIGdldHVpZCgpLCBwdy0+cHdfbmFtZSk7CisgICAgfQorfQorCitNZWRpYUV4dHJhY3Rvcjo6fk1lZGlhRXh0cmFjdG9yKCkge30KKwordWludDMyX3QgTWVkaWFFeHRyYWN0b3I6OmZsYWdzKCkgY29uc3QgeworICAgIHJldHVybiBDQU5fU0VFS19CQUNLV0FSRCB8IENBTl9TRUVLX0ZPUldBUkQgfCBDQU5fUEFVU0UgfCBDQU5fU0VFSzsKK30KKworLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK01lZGlhRXh0cmFjdG9yQ1Vud3JhcHBlclYxOjpNZWRpYUV4dHJhY3RvckNVbndyYXBwZXJWMShDTWVkaWFFeHRyYWN0b3IgKnBsdWdpbikgeworICAgIHRoaXMtPnBsdWdpbiA9IHBsdWdpbjsKK30KKworTWVkaWFFeHRyYWN0b3JDVW53cmFwcGVyVjE6On5NZWRpYUV4dHJhY3RvckNVbndyYXBwZXJWMSgpIHsKKyAgICBwbHVnaW4tPmZyZWUocGx1Z2luLT5kYXRhKTsKKyAgICBmcmVlKHBsdWdpbik7Cit9CisKK3NpemVfdCBNZWRpYUV4dHJhY3RvckNVbndyYXBwZXJWMTo6Y291bnRUcmFja3MoKSB7CisgICAgcmV0dXJuIHBsdWdpbi0+Y291bnRUcmFja3MocGx1Z2luLT5kYXRhKTsKK30KKworTWVkaWFUcmFjayAqTWVkaWFFeHRyYWN0b3JDVW53cmFwcGVyVjE6OmdldFRyYWNrKHNpemVfdCBpbmRleCkgeworICAgIHJldHVybiBuZXcgTWVkaWFUcmFja0NVbndyYXBwZXIocGx1Z2luLT5nZXRUcmFjayhwbHVnaW4tPmRhdGEsIGluZGV4KSk7Cit9CisKK3N0YXR1c190IE1lZGlhRXh0cmFjdG9yQ1Vud3JhcHBlclYxOjpnZXRUcmFja01ldGFEYXRhKAorICAgICAgICBNZXRhRGF0YUJhc2UmIG1ldGEsIHNpemVfdCBpbmRleCwgdWludDMyX3QgZmxhZ3MpIHsKKyAgICByZXR1cm4gcGx1Z2luLT5nZXRUcmFja01ldGFEYXRhKHBsdWdpbi0+ZGF0YSwgbWV0YSwgaW5kZXgsIGZsYWdzKTsKK30KKworc3RhdHVzX3QgTWVkaWFFeHRyYWN0b3JDVW53cmFwcGVyVjE6OmdldE1ldGFEYXRhKE1ldGFEYXRhQmFzZSYgbWV0YSkgeworICAgIHJldHVybiBwbHVnaW4tPmdldE1ldGFEYXRhKHBsdWdpbi0+ZGF0YSwgbWV0YSk7Cit9CisKK2NvbnN0IGNoYXIgKiBNZWRpYUV4dHJhY3RvckNVbndyYXBwZXJWMTo6bmFtZSgpIHsKKyAgICByZXR1cm4gcGx1Z2luLT5uYW1lKHBsdWdpbi0+ZGF0YSk7Cit9CisKK3VpbnQzMl90IE1lZGlhRXh0cmFjdG9yQ1Vud3JhcHBlclYxOjpmbGFncygpIGNvbnN0IHsKKyAgICByZXR1cm4gcGx1Z2luLT5mbGFncyhwbHVnaW4tPmRhdGEpOworfQorCitzdGF0dXNfdCBNZWRpYUV4dHJhY3RvckNVbndyYXBwZXJWMTo6c2V0TWVkaWFDYXMoY29uc3QgdWludDhfdCogY2FzVG9rZW4sIHNpemVfdCBzaXplKSB7CisgICAgcmV0dXJuIHBsdWdpbi0+c2V0TWVkaWFDYXMocGx1Z2luLT5kYXRhLCBjYXNUb2tlbiwgc2l6ZSk7Cit9CisKKy8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitNZWRpYUV4dHJhY3RvckNVbndyYXBwZXJWMjo6TWVkaWFFeHRyYWN0b3JDVW53cmFwcGVyVjIoQ01lZGlhRXh0cmFjdG9yVjIgKnBsdWdpbikgeworICAgIHRoaXMtPnBsdWdpbiA9IHBsdWdpbjsKK30KKworTWVkaWFFeHRyYWN0b3JDVW53cmFwcGVyVjI6On5NZWRpYUV4dHJhY3RvckNVbndyYXBwZXJWMigpIHsKKyAgICBwbHVnaW4tPmZyZWUocGx1Z2luLT5kYXRhKTsKKyAgICBmcmVlKHBsdWdpbik7Cit9CisKK3NpemVfdCBNZWRpYUV4dHJhY3RvckNVbndyYXBwZXJWMjo6Y291bnRUcmFja3MoKSB7CisgICAgcmV0dXJuIHBsdWdpbi0+Y291bnRUcmFja3MocGx1Z2luLT5kYXRhKTsKK30KKworTWVkaWFUcmFjayAqTWVkaWFFeHRyYWN0b3JDVW53cmFwcGVyVjI6OmdldFRyYWNrKHNpemVfdCBpbmRleCkgeworICAgIHJldHVybiBuZXcgTWVkaWFUcmFja0NVbndyYXBwZXJWMihwbHVnaW4tPmdldFRyYWNrKHBsdWdpbi0+ZGF0YSwgaW5kZXgpKTsKK30KKworc3RhdHVzX3QgTWVkaWFFeHRyYWN0b3JDVW53cmFwcGVyVjI6OmdldFRyYWNrTWV0YURhdGEoCisgICAgICAgIE1ldGFEYXRhQmFzZSYgbWV0YSwgc2l6ZV90IGluZGV4LCB1aW50MzJfdCBmbGFncykgeworICAgIHNwPEFNZXNzYWdlPiBtc2cgPSBuZXcgQU1lc3NhZ2UoKTsKKyAgICBBTWVkaWFGb3JtYXQgKmZvcm1hdCA9ICBBTWVkaWFGb3JtYXRfZnJvbU1zZygmbXNnKTsKKyAgICBtZWRpYV9zdGF0dXNfdCByZXQgPSBwbHVnaW4tPmdldFRyYWNrTWV0YURhdGEocGx1Z2luLT5kYXRhLCBmb3JtYXQsIGluZGV4LCBmbGFncyk7CisgICAgc3A8TWV0YURhdGE+IG5ld01ldGEgPSBuZXcgTWV0YURhdGEoKTsKKyAgICBjb252ZXJ0TWVzc2FnZVRvTWV0YURhdGEobXNnLCBuZXdNZXRhKTsKKyAgICBkZWxldGUgZm9ybWF0OworICAgIG1ldGEgPSAqbmV3TWV0YTsKKyAgICByZXR1cm4gcmV2ZXJzZV90cmFuc2xhdGVfZXJyb3IocmV0KTsKK30KKworc3RhdHVzX3QgTWVkaWFFeHRyYWN0b3JDVW53cmFwcGVyVjI6OmdldE1ldGFEYXRhKE1ldGFEYXRhQmFzZSYgbWV0YSkgeworICAgIHNwPEFNZXNzYWdlPiBtc2cgPSBuZXcgQU1lc3NhZ2UoKTsKKyAgICBBTWVkaWFGb3JtYXQgKmZvcm1hdCA9ICBBTWVkaWFGb3JtYXRfZnJvbU1zZygmbXNnKTsKKyAgICBtZWRpYV9zdGF0dXNfdCByZXQgPSBwbHVnaW4tPmdldE1ldGFEYXRhKHBsdWdpbi0+ZGF0YSwgZm9ybWF0KTsKKyAgICBzcDxNZXRhRGF0YT4gbmV3TWV0YSA9IG5ldyBNZXRhRGF0YSgpOworICAgIGNvbnZlcnRNZXNzYWdlVG9NZXRhRGF0YShtc2csIG5ld01ldGEpOworICAgIGRlbGV0ZSBmb3JtYXQ7CisgICAgbWV0YSA9ICpuZXdNZXRhOworICAgIHJldHVybiByZXZlcnNlX3RyYW5zbGF0ZV9lcnJvcihyZXQpOworfQorCitjb25zdCBjaGFyICogTWVkaWFFeHRyYWN0b3JDVW53cmFwcGVyVjI6Om5hbWUoKSB7CisgICAgcmV0dXJuIHBsdWdpbi0+bmFtZShwbHVnaW4tPmRhdGEpOworfQorCit1aW50MzJfdCBNZWRpYUV4dHJhY3RvckNVbndyYXBwZXJWMjo6ZmxhZ3MoKSBjb25zdCB7CisgICAgcmV0dXJuIHBsdWdpbi0+ZmxhZ3MocGx1Z2luLT5kYXRhKTsKK30KKworc3RhdHVzX3QgTWVkaWFFeHRyYWN0b3JDVW53cmFwcGVyVjI6OnNldE1lZGlhQ2FzKGNvbnN0IHVpbnQ4X3QqIGNhc1Rva2VuLCBzaXplX3Qgc2l6ZSkgeworICAgIHJldHVybiBwbHVnaW4tPnNldE1lZGlhQ2FzKHBsdWdpbi0+ZGF0YSwgY2FzVG9rZW4sIHNpemUpOworfQorCit9ICAvLyBuYW1lc3BhY2UgYW5kcm9pZApkaWZmIC0tZ2l0IGEvbWVkaWEvbGlic3RhZ2VmcmlnaHQvTWVkaWFFeHRyYWN0b3JGYWN0b3J5LmNwcCBiL21lZGlhL2xpYnN0YWdlZnJpZ2h0L01lZGlhRXh0cmFjdG9yRmFjdG9yeS5jcHAKaW5kZXggYjBiZjI2OS4uMzE4YzFlYiAxMDA2NDQKLS0tIGEvbWVkaWEvbGlic3RhZ2VmcmlnaHQvTWVkaWFFeHRyYWN0b3JGYWN0b3J5LmNwcAorKysgYi9tZWRpYS9saWJzdGFnZWZyaWdodC9NZWRpYUV4dHJhY3RvckZhY3RvcnkuY3BwCkBAIC0yMyw5ICsyMyw5IEBACiAjaW5jbHVkZSA8YmluZGVyL0lTZXJ2aWNlTWFuYWdlci5oPgogI2luY2x1ZGUgPG1lZGlhL0RhdGFTb3VyY2UuaD4KICNpbmNsdWRlIDxtZWRpYS9NZWRpYUFuYWx5dGljc0l0ZW0uaD4KLSNpbmNsdWRlIDxtZWRpYS9NZWRpYUV4dHJhY3Rvci5oPgogI2luY2x1ZGUgPG1lZGlhL3N0YWdlZnJpZ2h0L2ZvdW5kYXRpb24vQU1lc3NhZ2UuaD4KICNpbmNsdWRlIDxtZWRpYS9zdGFnZWZyaWdodC9JbnRlcmZhY2VVdGlscy5oPgorI2luY2x1ZGUgPG1lZGlhL3N0YWdlZnJpZ2h0L01lZGlhRXh0cmFjdG9yLmg+CiAjaW5jbHVkZSA8bWVkaWEvc3RhZ2VmcmlnaHQvTWVkaWFFeHRyYWN0b3JGYWN0b3J5Lmg+CiAjaW5jbHVkZSA8bWVkaWEvSU1lZGlhRXh0cmFjdG9yLmg+CiAjaW5jbHVkZSA8bWVkaWEvSU1lZGlhRXh0cmFjdG9yU2VydmljZS5oPgpAQCAtNzYsMjUgKzc2LDM2IEBACiAgICAgc291cmNlLT5Ecm1Jbml0aWFsaXphdGlvbihudWxscHRyIC8qIG1pbWUgKi8pOwogCiAgICAgdm9pZCAqbWV0YSA9IG51bGxwdHI7Ci0gICAgTWVkaWFFeHRyYWN0b3I6OkNyZWF0b3JGdW5jIGNyZWF0b3IgPSBOVUxMOwotICAgIE1lZGlhRXh0cmFjdG9yOjpGcmVlTWV0YUZ1bmMgZnJlZU1ldGEgPSBudWxscHRyOworICAgIHZvaWQgKmNyZWF0b3IgPSBOVUxMOworICAgIEZyZWVNZXRhRnVuYyBmcmVlTWV0YSA9IG51bGxwdHI7CiAgICAgZmxvYXQgY29uZmlkZW5jZTsKICAgICBzcDxFeHRyYWN0b3JQbHVnaW4+IHBsdWdpbjsKLSAgICBjcmVhdG9yID0gc25pZmYoc291cmNlLmdldCgpLCAmY29uZmlkZW5jZSwgJm1ldGEsICZmcmVlTWV0YSwgcGx1Z2luKTsKKyAgICB1aW50MzJfdCBjcmVhdG9yVmVyc2lvbiA9IDA7CisgICAgY3JlYXRvciA9IHNuaWZmKHNvdXJjZSwgJmNvbmZpZGVuY2UsICZtZXRhLCAmZnJlZU1ldGEsIHBsdWdpbiwgJmNyZWF0b3JWZXJzaW9uKTsKICAgICBpZiAoIWNyZWF0b3IpIHsKICAgICAgICAgQUxPR1YoIkZBSUxFRCB0byBhdXRvZGV0ZWN0IG1lZGlhIGNvbnRlbnQuIik7CiAgICAgICAgIHJldHVybiBOVUxMOwogICAgIH0KIAotICAgIE1lZGlhRXh0cmFjdG9yICpyZXQgPSBjcmVhdG9yKHNvdXJjZS5nZXQoKSwgbWV0YSk7Ci0gICAgaWYgKG1ldGEgIT0gbnVsbHB0ciAmJiBmcmVlTWV0YSAhPSBudWxscHRyKSB7Ci0gICAgICAgIGZyZWVNZXRhKG1ldGEpOworICAgIE1lZGlhRXh0cmFjdG9yICpleCA9IG51bGxwdHI7CisgICAgaWYgKGNyZWF0b3JWZXJzaW9uID09IDEpIHsKKyAgICAgICAgQ01lZGlhRXh0cmFjdG9yICpyZXQgPSAoKENyZWF0b3JGdW5jVjEpY3JlYXRvcikoc291cmNlLT53cmFwKCksIG1ldGEpOworICAgICAgICBpZiAobWV0YSAhPSBudWxscHRyICYmIGZyZWVNZXRhICE9IG51bGxwdHIpIHsKKyAgICAgICAgICAgIGZyZWVNZXRhKG1ldGEpOworICAgICAgICB9CisgICAgICAgIGV4ID0gcmV0ICE9IG51bGxwdHIgPyBuZXcgTWVkaWFFeHRyYWN0b3JDVW53cmFwcGVyVjEocmV0KSA6IG51bGxwdHI7CisgICAgfSBlbHNlIGlmIChjcmVhdG9yVmVyc2lvbiA9PSAyKSB7CisgICAgICAgIENNZWRpYUV4dHJhY3RvclYyICpyZXQgPSAoKENyZWF0b3JGdW5jVjIpY3JlYXRvcikoc291cmNlLT53cmFwKCksIG1ldGEpOworICAgICAgICBpZiAobWV0YSAhPSBudWxscHRyICYmIGZyZWVNZXRhICE9IG51bGxwdHIpIHsKKyAgICAgICAgICAgIGZyZWVNZXRhKG1ldGEpOworICAgICAgICB9CisgICAgICAgIGV4ID0gcmV0ICE9IG51bGxwdHIgPyBuZXcgTWVkaWFFeHRyYWN0b3JDVW53cmFwcGVyVjIocmV0KSA6IG51bGxwdHI7CiAgICAgfQogCiAgICAgQUxPR1YoIkNyZWF0ZWQgYW4gZXh0cmFjdG9yICclcycgd2l0aCBjb25maWRlbmNlICUuMmYiLAotICAgICAgICAgcmV0ICE9IG51bGxwdHIgPyByZXQtPm5hbWUoKSA6ICI8bnVsbD4iLCBjb25maWRlbmNlKTsKKyAgICAgICAgIGV4ICE9IG51bGxwdHIgPyBleC0+bmFtZSgpIDogIjxudWxsPiIsIGNvbmZpZGVuY2UpOwogCi0gICAgcmV0dXJuIENyZWF0ZUlNZWRpYUV4dHJhY3RvckZyb21NZWRpYUV4dHJhY3RvcihyZXQsIHNvdXJjZSwgcGx1Z2luKTsKKyAgICByZXR1cm4gQ3JlYXRlSU1lZGlhRXh0cmFjdG9yRnJvbU1lZGlhRXh0cmFjdG9yKGV4LCBzb3VyY2UsIHBsdWdpbik7CiB9CiAKIC8vc3RhdGljCkBAIC0xMDUsMTQgKzExNiwxNCBAQAogfQogCiBzdHJ1Y3QgRXh0cmFjdG9yUGx1Z2luIDogcHVibGljIFJlZkJhc2UgewotICAgIE1lZGlhRXh0cmFjdG9yOjpFeHRyYWN0b3JEZWYgZGVmOworICAgIEV4dHJhY3RvckRlZiBkZWY7CiAgICAgdm9pZCAqbGliSGFuZGxlOwogICAgIFN0cmluZzggbGliUGF0aDsKICAgICBTdHJpbmc4IHV1aWRTdHJpbmc7CiAKLSAgICBFeHRyYWN0b3JQbHVnaW4oTWVkaWFFeHRyYWN0b3I6OkV4dHJhY3RvckRlZiBkZWZpbml0aW9uLCB2b2lkICpoYW5kbGUsIFN0cmluZzggJnBhdGgpCisgICAgRXh0cmFjdG9yUGx1Z2luKEV4dHJhY3RvckRlZiBkZWZpbml0aW9uLCB2b2lkICpoYW5kbGUsIFN0cmluZzggJnBhdGgpCiAgICAgICAgIDogZGVmKGRlZmluaXRpb24pLCBsaWJIYW5kbGUoaGFuZGxlKSwgbGliUGF0aChwYXRoKSB7Ci0gICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgc2l6ZW9mIE1lZGlhRXh0cmFjdG9yOjpFeHRyYWN0b3JEZWY6OmV4dHJhY3Rvcl91dWlkOyBpKyspIHsKKyAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBzaXplb2YgRXh0cmFjdG9yRGVmOjpleHRyYWN0b3JfdXVpZDsgaSsrKSB7CiAgICAgICAgICAgICB1dWlkU3RyaW5nLmFwcGVuZEZvcm1hdCgiJTAyeCIsIGRlZi5leHRyYWN0b3JfdXVpZC5iW2ldKTsKICAgICAgICAgfQogICAgIH0KQEAgLTEyNSwxNyArMTM2LDE4IEBACiB9OwogCiBNdXRleCBNZWRpYUV4dHJhY3RvckZhY3Rvcnk6OmdQbHVnaW5NdXRleDsKLXN0ZDo6c2hhcmVkX3B0cjxMaXN0PHNwPEV4dHJhY3RvclBsdWdpbj4+PiBNZWRpYUV4dHJhY3RvckZhY3Rvcnk6OmdQbHVnaW5zOworc3RkOjpzaGFyZWRfcHRyPHN0ZDo6bGlzdDxzcDxFeHRyYWN0b3JQbHVnaW4+Pj4gTWVkaWFFeHRyYWN0b3JGYWN0b3J5OjpnUGx1Z2luczsKIGJvb2wgTWVkaWFFeHRyYWN0b3JGYWN0b3J5OjpnUGx1Z2luc1JlZ2lzdGVyZWQgPSBmYWxzZTsKK2Jvb2wgTWVkaWFFeHRyYWN0b3JGYWN0b3J5OjpnSWdub3JlVmVyc2lvbiA9IGZhbHNlOwogCiAvLyBzdGF0aWMKLU1lZGlhRXh0cmFjdG9yOjpDcmVhdG9yRnVuYyBNZWRpYUV4dHJhY3RvckZhY3Rvcnk6OnNuaWZmKAotICAgICAgICBEYXRhU291cmNlQmFzZSAqc291cmNlLCBmbG9hdCAqY29uZmlkZW5jZSwgdm9pZCAqKm1ldGEsCi0gICAgICAgIE1lZGlhRXh0cmFjdG9yOjpGcmVlTWV0YUZ1bmMgKmZyZWVNZXRhLCBzcDxFeHRyYWN0b3JQbHVnaW4+ICZwbHVnaW4pIHsKK3ZvaWQgKk1lZGlhRXh0cmFjdG9yRmFjdG9yeTo6c25pZmYoCisgICAgICAgIGNvbnN0IHNwPERhdGFTb3VyY2U+ICZzb3VyY2UsIGZsb2F0ICpjb25maWRlbmNlLCB2b2lkICoqbWV0YSwKKyAgICAgICAgRnJlZU1ldGFGdW5jICpmcmVlTWV0YSwgc3A8RXh0cmFjdG9yUGx1Z2luPiAmcGx1Z2luLCB1aW50MzJfdCAqY3JlYXRvclZlcnNpb24pIHsKICAgICAqY29uZmlkZW5jZSA9IDAuMGY7CiAgICAgKm1ldGEgPSBudWxscHRyOwogCi0gICAgc3RkOjpzaGFyZWRfcHRyPExpc3Q8c3A8RXh0cmFjdG9yUGx1Z2luPj4+IHBsdWdpbnM7CisgICAgc3RkOjpzaGFyZWRfcHRyPHN0ZDo6bGlzdDxzcDxFeHRyYWN0b3JQbHVnaW4+Pj4gcGx1Z2luczsKICAgICB7CiAgICAgICAgIE11dGV4OjpBdXRvbG9jayBhdXRvTG9jayhnUGx1Z2luTXV0ZXgpOwogICAgICAgICBpZiAoIWdQbHVnaW5zUmVnaXN0ZXJlZCkgewpAQCAtMTQ0LDEzICsxNTYsMjMgQEAKICAgICAgICAgcGx1Z2lucyA9IGdQbHVnaW5zOwogICAgIH0KIAotICAgIE1lZGlhRXh0cmFjdG9yOjpDcmVhdG9yRnVuYyBjdXJDcmVhdG9yID0gTlVMTDsKLSAgICBNZWRpYUV4dHJhY3Rvcjo6Q3JlYXRvckZ1bmMgYmVzdENyZWF0b3IgPSBOVUxMOworICAgIHZvaWQgKmJlc3RDcmVhdG9yID0gTlVMTDsKICAgICBmb3IgKGF1dG8gaXQgPSBwbHVnaW5zLT5iZWdpbigpOyBpdCAhPSBwbHVnaW5zLT5lbmQoKTsgKytpdCkgeworICAgICAgICBBTE9HVigic25pZmZpbmcgJXMiLCAoKml0KS0+ZGVmLmV4dHJhY3Rvcl9uYW1lKTsKICAgICAgICAgZmxvYXQgbmV3Q29uZmlkZW5jZTsKICAgICAgICAgdm9pZCAqbmV3TWV0YSA9IG51bGxwdHI7Ci0gICAgICAgIE1lZGlhRXh0cmFjdG9yOjpGcmVlTWV0YUZ1bmMgbmV3RnJlZU1ldGEgPSBudWxscHRyOwotICAgICAgICBpZiAoKGN1ckNyZWF0b3IgPSAoKml0KS0+ZGVmLnNuaWZmKHNvdXJjZSwgJm5ld0NvbmZpZGVuY2UsICZuZXdNZXRhLCAmbmV3RnJlZU1ldGEpKSkgeworICAgICAgICBGcmVlTWV0YUZ1bmMgbmV3RnJlZU1ldGEgPSBudWxscHRyOworCisgICAgICAgIHZvaWQgKmN1ckNyZWF0b3IgPSBOVUxMOworICAgICAgICBpZiAoKCppdCktPmRlZi5kZWZfdmVyc2lvbiA9PSAxKSB7CisgICAgICAgICAgICBjdXJDcmVhdG9yID0gKHZvaWQqKSAoKml0KS0+ZGVmLnNuaWZmLnYxKAorICAgICAgICAgICAgICAgICAgICBzb3VyY2UtPndyYXAoKSwgJm5ld0NvbmZpZGVuY2UsICZuZXdNZXRhLCAmbmV3RnJlZU1ldGEpOworICAgICAgICB9IGVsc2UgaWYgKCgqaXQpLT5kZWYuZGVmX3ZlcnNpb24gPT0gMikgeworICAgICAgICAgICAgY3VyQ3JlYXRvciA9ICh2b2lkKikgKCppdCktPmRlZi5zbmlmZi52MigKKyAgICAgICAgICAgICAgICAgICAgc291cmNlLT53cmFwKCksICZuZXdDb25maWRlbmNlLCAmbmV3TWV0YSwgJm5ld0ZyZWVNZXRhKTsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChjdXJDcmVhdG9yKSB7CiAgICAgICAgICAgICBpZiAobmV3Q29uZmlkZW5jZSA+ICpjb25maWRlbmNlKSB7CiAgICAgICAgICAgICAgICAgKmNvbmZpZGVuY2UgPSBuZXdDb25maWRlbmNlOwogICAgICAgICAgICAgICAgIGlmICgqbWV0YSAhPSBudWxscHRyICYmICpmcmVlTWV0YSAhPSBudWxscHRyKSB7CkBAIC0xNjAsNiArMTgyLDcgQEAKICAgICAgICAgICAgICAgICAqZnJlZU1ldGEgPSBuZXdGcmVlTWV0YTsKICAgICAgICAgICAgICAgICBwbHVnaW4gPSAqaXQ7CiAgICAgICAgICAgICAgICAgYmVzdENyZWF0b3IgPSBjdXJDcmVhdG9yOworICAgICAgICAgICAgICAgICpjcmVhdG9yVmVyc2lvbiA9ICgqaXQpLT5kZWYuZGVmX3ZlcnNpb247CiAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgIGlmIChuZXdNZXRhICE9IG51bGxwdHIgJiYgbmV3RnJlZU1ldGEgIT0gbnVsbHB0cikgewogICAgICAgICAgICAgICAgICAgICBuZXdGcmVlTWV0YShuZXdNZXRhKTsKQEAgLTE3MywxMCArMTk2LDEwIEBACiAKIC8vIHN0YXRpYwogdm9pZCBNZWRpYUV4dHJhY3RvckZhY3Rvcnk6OlJlZ2lzdGVyRXh0cmFjdG9yKGNvbnN0IHNwPEV4dHJhY3RvclBsdWdpbj4gJnBsdWdpbiwKLSAgICAgICAgTGlzdDxzcDxFeHRyYWN0b3JQbHVnaW4+PiAmcGx1Z2luTGlzdCkgeworICAgICAgICBzdGQ6Omxpc3Q8c3A8RXh0cmFjdG9yUGx1Z2luPj4gJnBsdWdpbkxpc3QpIHsKICAgICAvLyBzYW5pdHkgY2hlY2sgY2hlY2sgc3RydWN0IHZlcnNpb24sIHV1aWQsIG5hbWUKICAgICBpZiAocGx1Z2luLT5kZWYuZGVmX3ZlcnNpb24gPT0gMAotICAgICAgICAgICAgfHwgcGx1Z2luLT5kZWYuZGVmX3ZlcnNpb24gPiBNZWRpYUV4dHJhY3Rvcjo6RVhUUkFDVE9SREVGX1ZFUlNJT04pIHsKKyAgICAgICAgICAgIHx8IHBsdWdpbi0+ZGVmLmRlZl92ZXJzaW9uID4gRVhUUkFDVE9SREVGX1ZFUlNJT05fQ1VSUkVOVCkgewogICAgICAgICBBTE9HRSgiZG9uJ3QgdW5kZXJzdGFuZCBleHRyYWN0b3IgZm9ybWF0ICV1LCBpZ25vcmluZy4iLCBwbHVnaW4tPmRlZi5kZWZfdmVyc2lvbik7CiAgICAgICAgIHJldHVybjsKICAgICB9CkBAIC0xOTIsNyArMjE1LDcgQEAKICAgICBmb3IgKGF1dG8gaXQgPSBwbHVnaW5MaXN0LmJlZ2luKCk7IGl0ICE9IHBsdWdpbkxpc3QuZW5kKCk7ICsraXQpIHsKICAgICAgICAgaWYgKG1lbWNtcCgmKCgqaXQpLT5kZWYuZXh0cmFjdG9yX3V1aWQpLCAmcGx1Z2luLT5kZWYuZXh0cmFjdG9yX3V1aWQsIDE2KSA9PSAwKSB7CiAgICAgICAgICAgICAvLyB0aGVyZSdzIGFscmVhZHkgYW4gZXh0cmFjdG9yIHdpdGggdGhlIHNhbWUgdXVpZAotICAgICAgICAgICAgaWYgKCgqaXQpLT5kZWYuZXh0cmFjdG9yX3ZlcnNpb24gPCBwbHVnaW4tPmRlZi5leHRyYWN0b3JfdmVyc2lvbikgeworICAgICAgICAgICAgaWYgKGdJZ25vcmVWZXJzaW9uIHx8ICgqaXQpLT5kZWYuZXh0cmFjdG9yX3ZlcnNpb24gPCBwbHVnaW4tPmRlZi5leHRyYWN0b3JfdmVyc2lvbikgewogICAgICAgICAgICAgICAgIC8vIHRoaXMgb25lIGlzIG5ld2VyLCByZXBsYWNlIHRoZSBvbGQgb25lCiAgICAgICAgICAgICAgICAgQUxPR1coInJlcGxhY2luZyBleHRyYWN0b3IgJyVzJyB2ZXJzaW9uICV1IHdpdGggdmVyc2lvbiAldSIsCiAgICAgICAgICAgICAgICAgICAgICAgICBwbHVnaW4tPmRlZi5leHRyYWN0b3JfbmFtZSwKQEAgLTIxNSw3ICsyMzgsNyBAQAogCiAvL3N0YXRpYwogdm9pZCBNZWRpYUV4dHJhY3RvckZhY3Rvcnk6OlJlZ2lzdGVyRXh0cmFjdG9yc0luQXBrKAotICAgICAgICBjb25zdCBjaGFyICphcGtQYXRoLCBMaXN0PHNwPEV4dHJhY3RvclBsdWdpbj4+ICZwbHVnaW5MaXN0KSB7CisgICAgICAgIGNvbnN0IGNoYXIgKmFwa1BhdGgsIHN0ZDo6bGlzdDxzcDxFeHRyYWN0b3JQbHVnaW4+PiAmcGx1Z2luTGlzdCkgewogICAgIEFMT0dWKCJzZWFyY2ggZm9yIHBsdWdpbnMgYXQgJXMiLCBhcGtQYXRoKTsKICAgICBaaXBBcmNoaXZlSGFuZGxlIHppcEhhbmRsZTsKICAgICBpbnQzMl90IHJldCA9IE9wZW5BcmNoaXZlKGFwa1BhdGgsICZ6aXBIYW5kbGUpOwpAQCAtMjM3LDggKzI2MCw4IEBACiAgICAgICAgICAgICAgICAgLy8gd2l0aGluIHRoZSBhcGsgaW5zdGVhZCBvZiBzeXN0ZW0gbGlicmFyaWVzIGFscmVhZHkgbG9hZGVkLgogICAgICAgICAgICAgICAgIHZvaWQgKmxpYkhhbmRsZSA9IGRsb3BlbihsaWJQYXRoLnN0cmluZygpLCBSVExEX05PVyB8IFJUTERfTE9DQUwpOwogICAgICAgICAgICAgICAgIGlmIChsaWJIYW5kbGUpIHsKLSAgICAgICAgICAgICAgICAgICAgTWVkaWFFeHRyYWN0b3I6OkdldEV4dHJhY3RvckRlZiBnZXREZWYgPQotICAgICAgICAgICAgICAgICAgICAgICAgKE1lZGlhRXh0cmFjdG9yOjpHZXRFeHRyYWN0b3JEZWYpIGRsc3ltKGxpYkhhbmRsZSwgIkdFVEVYVFJBQ1RPUkRFRiIpOworICAgICAgICAgICAgICAgICAgICBHZXRFeHRyYWN0b3JEZWYgZ2V0RGVmID0KKyAgICAgICAgICAgICAgICAgICAgICAgIChHZXRFeHRyYWN0b3JEZWYpIGRsc3ltKGxpYkhhbmRsZSwgIkdFVEVYVFJBQ1RPUkRFRiIpOwogICAgICAgICAgICAgICAgICAgICBpZiAoZ2V0RGVmKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICBBTE9HVigicmVnaXN0ZXJpbmcgc25pZmZlciBmb3IgJXMiLCBsaWJQYXRoLnN0cmluZygpKTsKICAgICAgICAgICAgICAgICAgICAgICAgIFJlZ2lzdGVyRXh0cmFjdG9yKApAQCAtMjYzLDE3ICsyODYsMjAgQEAKIAogLy9zdGF0aWMKIHZvaWQgTWVkaWFFeHRyYWN0b3JGYWN0b3J5OjpSZWdpc3RlckV4dHJhY3RvcnNJblN5c3RlbSgKLSAgICAgICAgY29uc3QgY2hhciAqbGliRGlyUGF0aCwgTGlzdDxzcDxFeHRyYWN0b3JQbHVnaW4+PiAmcGx1Z2luTGlzdCkgeworICAgICAgICBjb25zdCBjaGFyICpsaWJEaXJQYXRoLCBzdGQ6Omxpc3Q8c3A8RXh0cmFjdG9yUGx1Z2luPj4gJnBsdWdpbkxpc3QpIHsKICAgICBBTE9HVigic2VhcmNoIGZvciBwbHVnaW5zIGF0ICVzIiwgbGliRGlyUGF0aCk7CiAgICAgRElSICpsaWJEaXIgPSBvcGVuZGlyKGxpYkRpclBhdGgpOwogICAgIGlmIChsaWJEaXIpIHsKICAgICAgICAgc3RydWN0IGRpcmVudCogbGliRW50cnk7CiAgICAgICAgIHdoaWxlICgobGliRW50cnkgPSByZWFkZGlyKGxpYkRpcikpKSB7CisgICAgICAgICAgICBpZiAobGliRW50cnktPmRfbmFtZVswXSA9PSAnLicpIHsKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIH0KICAgICAgICAgICAgIFN0cmluZzggbGliUGF0aCA9IFN0cmluZzgobGliRGlyUGF0aCkgKyAiLyIgKyBsaWJFbnRyeS0+ZF9uYW1lOwogICAgICAgICAgICAgdm9pZCAqbGliSGFuZGxlID0gZGxvcGVuKGxpYlBhdGguc3RyaW5nKCksIFJUTERfTk9XIHwgUlRMRF9MT0NBTCk7CiAgICAgICAgICAgICBpZiAobGliSGFuZGxlKSB7Ci0gICAgICAgICAgICAgICAgTWVkaWFFeHRyYWN0b3I6OkdldEV4dHJhY3RvckRlZiBnZXREZWYgPQotICAgICAgICAgICAgICAgICAgICAoTWVkaWFFeHRyYWN0b3I6OkdldEV4dHJhY3RvckRlZikgZGxzeW0obGliSGFuZGxlLCAiR0VURVhUUkFDVE9SREVGIik7CisgICAgICAgICAgICAgICAgR2V0RXh0cmFjdG9yRGVmIGdldERlZiA9CisgICAgICAgICAgICAgICAgICAgIChHZXRFeHRyYWN0b3JEZWYpIGRsc3ltKGxpYkhhbmRsZSwgIkdFVEVYVFJBQ1RPUkRFRiIpOwogICAgICAgICAgICAgICAgIGlmIChnZXREZWYpIHsKICAgICAgICAgICAgICAgICAgICAgQUxPR1YoInJlZ2lzdGVyaW5nIHNuaWZmZXIgZm9yICVzIiwgbGliUGF0aC5zdHJpbmcoKSk7CiAgICAgICAgICAgICAgICAgICAgIFJlZ2lzdGVyRXh0cmFjdG9yKApAQCAtMjkzLDYgKzMxOSwxMCBAQAogICAgIH0KIH0KIAorc3RhdGljIGJvb2wgY29tcGFyZUZ1bmMoY29uc3Qgc3A8RXh0cmFjdG9yUGx1Z2luPiYgZmlyc3QsIGNvbnN0IHNwPEV4dHJhY3RvclBsdWdpbj4mIHNlY29uZCkgeworICAgIHJldHVybiBzdHJjbXAoZmlyc3QtPmRlZi5leHRyYWN0b3JfbmFtZSwgc2Vjb25kLT5kZWYuZXh0cmFjdG9yX25hbWUpIDwgMDsKK30KKwogLy8gc3RhdGljCiB2b2lkIE1lZGlhRXh0cmFjdG9yRmFjdG9yeTo6VXBkYXRlRXh0cmFjdG9ycyhjb25zdCBjaGFyICpuZXdVcGRhdGVBcGtQYXRoKSB7CiAgICAgTXV0ZXg6OkF1dG9sb2NrIGF1dG9Mb2NrKGdQbHVnaW5NdXRleCk7CkBAIC0zMDMsNyArMzMzLDkgQEAKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIHN0ZDo6c2hhcmVkX3B0cjxMaXN0PHNwPEV4dHJhY3RvclBsdWdpbj4+PiBuZXdMaXN0KG5ldyBMaXN0PHNwPEV4dHJhY3RvclBsdWdpbj4+KCkpOworICAgIGdJZ25vcmVWZXJzaW9uID0gcHJvcGVydHlfZ2V0X2Jvb2woImRlYnVnLmV4dHJhY3Rvci5pZ25vcmVfdmVyc2lvbiIsIGZhbHNlKTsKKworICAgIHN0ZDo6c2hhcmVkX3B0cjxzdGQ6Omxpc3Q8c3A8RXh0cmFjdG9yUGx1Z2luPj4+IG5ld0xpc3QobmV3IHN0ZDo6bGlzdDxzcDxFeHRyYWN0b3JQbHVnaW4+PigpKTsKIAogICAgIFJlZ2lzdGVyRXh0cmFjdG9yc0luU3lzdGVtKCIvc3lzdGVtL2xpYiIKICNpZmRlZiBfX0xQNjRfXwpAQCAtMzE1LDYgKzM0Nyw3IEBACiAgICAgICAgIFJlZ2lzdGVyRXh0cmFjdG9yc0luQXBrKG5ld1VwZGF0ZUFwa1BhdGgsICpuZXdMaXN0KTsKICAgICB9CiAKKyAgICBuZXdMaXN0LT5zb3J0KGNvbXBhcmVGdW5jKTsKICAgICBnUGx1Z2lucyA9IG5ld0xpc3Q7CiAgICAgZ1BsdWdpbnNSZWdpc3RlcmVkID0gdHJ1ZTsKIH0KQEAgLTMzNSw4ICszNjgsOSBAQAogICAgICAgICBvdXQuYXBwZW5kKCJBdmFpbGFibGUgZXh0cmFjdG9yczpcbiIpOwogICAgICAgICBpZiAoZ1BsdWdpbnNSZWdpc3RlcmVkKSB7CiAgICAgICAgICAgICBmb3IgKGF1dG8gaXQgPSBnUGx1Z2lucy0+YmVnaW4oKTsgaXQgIT0gZ1BsdWdpbnMtPmVuZCgpOyArK2l0KSB7Ci0gICAgICAgICAgICAgICAgb3V0LmFwcGVuZEZvcm1hdCgiICAlMjVzOiB1dWlkKCVzKSwgdmVyc2lvbigldSksIHBhdGgoJXMpXG4iLAorICAgICAgICAgICAgICAgIG91dC5hcHBlbmRGb3JtYXQoIiAgJTI1czogcGx1Z2luX3ZlcnNpb24oJWQpLCB1dWlkKCVzKSwgdmVyc2lvbigldSksIHBhdGgoJXMpXG4iLAogICAgICAgICAgICAgICAgICAgICAgICAgKCppdCktPmRlZi5leHRyYWN0b3JfbmFtZSwKKyAgICAgICAgICAgICAgICAgICAgKCppdCktPmRlZi5kZWZfdmVyc2lvbiwKICAgICAgICAgICAgICAgICAgICAgICAgICgqaXQpLT51dWlkU3RyaW5nLmNfc3RyKCksCiAgICAgICAgICAgICAgICAgICAgICAgICAoKml0KS0+ZGVmLmV4dHJhY3Rvcl92ZXJzaW9uLAogICAgICAgICAgICAgICAgICAgICAgICAgKCppdCktPmxpYlBhdGguY19zdHIoKSk7CmRpZmYgLS1naXQgYS9tZWRpYS9saWJzdGFnZWZyaWdodC9NZWRpYVRyYWNrLmNwcCBiL21lZGlhL2xpYnN0YWdlZnJpZ2h0L01lZGlhVHJhY2suY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgyMTYwNWQKLS0tIC9kZXYvbnVsbAorKysgYi9tZWRpYS9saWJzdGFnZWZyaWdodC9NZWRpYVRyYWNrLmNwcApAQCAtMCwwICsxLDE1OCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOSBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCisKKyNpbmNsdWRlIDxtdXRleD4KKworI2luY2x1ZGUgPG1lZGlhL3N0YWdlZnJpZ2h0L2ZvdW5kYXRpb24vQU1lc3NhZ2UuaD4KKyNpbmNsdWRlIDxtZWRpYS9zdGFnZWZyaWdodC9VdGlscy5oPgorCisjaW5jbHVkZSA8bWVkaWEvTWVkaWFUcmFjay5oPgorI2luY2x1ZGUgPG1lZGlhL01lZGlhRXh0cmFjdG9yUGx1Z2luQXBpLmg+CisjaW5jbHVkZSA8bWVkaWEvTmRrTWVkaWFFcnJvclByaXYuaD4KKyNpbmNsdWRlIDxtZWRpYS9OZGtNZWRpYUZvcm1hdFByaXYuaD4KKworbmFtZXNwYWNlIGFuZHJvaWQgeworCitNZWRpYVRyYWNrOjpNZWRpYVRyYWNrKCkge30KKworTWVkaWFUcmFjazo6fk1lZGlhVHJhY2soKSB7fQorCisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworCit2b2lkIE1lZGlhVHJhY2s6OlJlYWRPcHRpb25zOjpzZXROb25CbG9ja2luZygpIHsKKyAgICBtTm9uQmxvY2tpbmcgPSB0cnVlOworfQorCit2b2lkIE1lZGlhVHJhY2s6OlJlYWRPcHRpb25zOjpjbGVhck5vbkJsb2NraW5nKCkgeworICAgIG1Ob25CbG9ja2luZyA9IGZhbHNlOworfQorCitib29sIE1lZGlhVHJhY2s6OlJlYWRPcHRpb25zOjpnZXROb25CbG9ja2luZygpIGNvbnN0IHsKKyAgICByZXR1cm4gbU5vbkJsb2NraW5nOworfQorCit2b2lkIE1lZGlhVHJhY2s6OlJlYWRPcHRpb25zOjpzZXRTZWVrVG8oaW50NjRfdCB0aW1lX3VzLCBTZWVrTW9kZSBtb2RlKSB7CisgICAgbU9wdGlvbnMgfD0ga1NlZWtUb19PcHRpb247CisgICAgbVNlZWtUaW1lVXMgPSB0aW1lX3VzOworICAgIG1TZWVrTW9kZSA9IG1vZGU7Cit9CisKK2Jvb2wgTWVkaWFUcmFjazo6UmVhZE9wdGlvbnM6OmdldFNlZWtUbygKKyAgICAgICAgaW50NjRfdCAqdGltZV91cywgU2Vla01vZGUgKm1vZGUpIGNvbnN0IHsKKyAgICAqdGltZV91cyA9IG1TZWVrVGltZVVzOworICAgICptb2RlID0gbVNlZWtNb2RlOworICAgIHJldHVybiAobU9wdGlvbnMgJiBrU2Vla1RvX09wdGlvbikgIT0gMDsKK30KKworLyogLS0tLS0tLS0tLS0tLS0gdW53cmFwcGVyIHYxIC0tLS0tLS0tLS0tLS0tLSAqLworCitNZWRpYVRyYWNrQ1Vud3JhcHBlcjo6TWVkaWFUcmFja0NVbndyYXBwZXIoQ01lZGlhVHJhY2sgKmNtZWRpYXRyYWNrKSB7CisgICAgd3JhcHBlciA9IGNtZWRpYXRyYWNrOworfQorCitNZWRpYVRyYWNrQ1Vud3JhcHBlcjo6fk1lZGlhVHJhY2tDVW53cmFwcGVyKCkgeworICAgIHdyYXBwZXItPmZyZWUod3JhcHBlci0+ZGF0YSk7CisgICAgZnJlZSh3cmFwcGVyKTsKK30KKworc3RhdHVzX3QgTWVkaWFUcmFja0NVbndyYXBwZXI6OnN0YXJ0KCkgeworICAgIHJldHVybiB3cmFwcGVyLT5zdGFydCh3cmFwcGVyLT5kYXRhKTsKK30KKworc3RhdHVzX3QgTWVkaWFUcmFja0NVbndyYXBwZXI6OnN0b3AoKSB7CisgICAgcmV0dXJuIHdyYXBwZXItPnN0b3Aod3JhcHBlci0+ZGF0YSk7Cit9CisKK3N0YXR1c190IE1lZGlhVHJhY2tDVW53cmFwcGVyOjpnZXRGb3JtYXQoTWV0YURhdGFCYXNlJiBmb3JtYXQpIHsKKyAgICByZXR1cm4gd3JhcHBlci0+Z2V0Rm9ybWF0KHdyYXBwZXItPmRhdGEsIGZvcm1hdCk7Cit9CisKK3N0YXR1c190IE1lZGlhVHJhY2tDVW53cmFwcGVyOjpyZWFkKE1lZGlhQnVmZmVyQmFzZSAqKmJ1ZmZlciwgY29uc3QgUmVhZE9wdGlvbnMgKm9wdGlvbnMpIHsKKworICAgIHVpbnQzMl90IG9wdHMgPSAwOworCisgICAgaWYgKG9wdGlvbnMgJiYgb3B0aW9ucy0+Z2V0Tm9uQmxvY2tpbmcoKSkgeworICAgICAgICBvcHRzIHw9IENNZWRpYVRyYWNrUmVhZE9wdGlvbnM6Ok5PTkJMT0NLSU5HOworICAgIH0KKworICAgIGludDY0X3Qgc2Vla1Bvc2l0aW9uID0gMDsKKyAgICBNZWRpYVRyYWNrOjpSZWFkT3B0aW9uczo6U2Vla01vZGUgc2Vla01vZGU7CisgICAgaWYgKG9wdGlvbnMgJiYgb3B0aW9ucy0+Z2V0U2Vla1RvKCZzZWVrUG9zaXRpb24sICZzZWVrTW9kZSkpIHsKKyAgICAgICAgb3B0cyB8PSBTRUVLOworICAgICAgICBvcHRzIHw9ICh1aW50MzJfdCkgc2Vla01vZGU7CisgICAgfQorCisKKyAgICByZXR1cm4gd3JhcHBlci0+cmVhZCh3cmFwcGVyLT5kYXRhLCBidWZmZXIsIG9wdHMsIHNlZWtQb3NpdGlvbik7Cit9CisKK2Jvb2wgTWVkaWFUcmFja0NVbndyYXBwZXI6OnN1cHBvcnROb25ibG9ja2luZ1JlYWQoKSB7CisgICAgcmV0dXJuIHdyYXBwZXItPnN1cHBvcnRzTm9uQmxvY2tpbmdSZWFkKHdyYXBwZXItPmRhdGEpOworfQorCisvKiAtLS0tLS0tLS0tLS0tLSB1bndyYXBwZXIgdjIgLS0tLS0tLS0tLS0tLS0tICovCisKK01lZGlhVHJhY2tDVW53cmFwcGVyVjI6Ok1lZGlhVHJhY2tDVW53cmFwcGVyVjIoQ01lZGlhVHJhY2tWMiAqY21lZGlhdHJhY2syKSB7CisgICAgd3JhcHBlciA9IGNtZWRpYXRyYWNrMjsKK30KKworTWVkaWFUcmFja0NVbndyYXBwZXJWMjo6fk1lZGlhVHJhY2tDVW53cmFwcGVyVjIoKSB7CisgICAgd3JhcHBlci0+ZnJlZSh3cmFwcGVyLT5kYXRhKTsKKyAgICBmcmVlKHdyYXBwZXIpOworfQorCitzdGF0dXNfdCBNZWRpYVRyYWNrQ1Vud3JhcHBlclYyOjpzdGFydCgpIHsKKyAgICByZXR1cm4gcmV2ZXJzZV90cmFuc2xhdGVfZXJyb3Iod3JhcHBlci0+c3RhcnQod3JhcHBlci0+ZGF0YSkpOworfQorCitzdGF0dXNfdCBNZWRpYVRyYWNrQ1Vud3JhcHBlclYyOjpzdG9wKCkgeworICAgIHJldHVybiByZXZlcnNlX3RyYW5zbGF0ZV9lcnJvcih3cmFwcGVyLT5zdG9wKHdyYXBwZXItPmRhdGEpKTsKK30KKworc3RhdHVzX3QgTWVkaWFUcmFja0NVbndyYXBwZXJWMjo6Z2V0Rm9ybWF0KE1ldGFEYXRhQmFzZSYgZm9ybWF0KSB7CisgICAgc3A8QU1lc3NhZ2U+IG1zZyA9IG5ldyBBTWVzc2FnZSgpOworICAgIEFNZWRpYUZvcm1hdCAqdG1wRm9ybWF0ID0gIEFNZWRpYUZvcm1hdF9mcm9tTXNnKCZtc2cpOworICAgIG1lZGlhX3N0YXR1c190IHJldCA9IHdyYXBwZXItPmdldEZvcm1hdCh3cmFwcGVyLT5kYXRhLCB0bXBGb3JtYXQpOworICAgIHNwPE1ldGFEYXRhPiBuZXdNZXRhID0gbmV3IE1ldGFEYXRhKCk7CisgICAgY29udmVydE1lc3NhZ2VUb01ldGFEYXRhKG1zZywgbmV3TWV0YSk7CisgICAgZGVsZXRlIHRtcEZvcm1hdDsKKyAgICBmb3JtYXQgPSAqbmV3TWV0YTsKKyAgICByZXR1cm4gcmV2ZXJzZV90cmFuc2xhdGVfZXJyb3IocmV0KTsKK30KKworc3RhdHVzX3QgTWVkaWFUcmFja0NVbndyYXBwZXJWMjo6cmVhZChNZWRpYUJ1ZmZlckJhc2UgKipidWZmZXIsIGNvbnN0IFJlYWRPcHRpb25zICpvcHRpb25zKSB7CisKKyAgICB1aW50MzJfdCBvcHRzID0gMDsKKworICAgIGlmIChvcHRpb25zICYmIG9wdGlvbnMtPmdldE5vbkJsb2NraW5nKCkpIHsKKyAgICAgICAgb3B0cyB8PSBDTWVkaWFUcmFja1JlYWRPcHRpb25zOjpOT05CTE9DS0lORzsKKyAgICB9CisKKyAgICBpbnQ2NF90IHNlZWtQb3NpdGlvbiA9IDA7CisgICAgTWVkaWFUcmFjazo6UmVhZE9wdGlvbnM6OlNlZWtNb2RlIHNlZWtNb2RlOworICAgIGlmIChvcHRpb25zICYmIG9wdGlvbnMtPmdldFNlZWtUbygmc2Vla1Bvc2l0aW9uLCAmc2Vla01vZGUpKSB7CisgICAgICAgIG9wdHMgfD0gU0VFSzsKKyAgICAgICAgb3B0cyB8PSAodWludDMyX3QpIHNlZWtNb2RlOworICAgIH0KKworICAgIHJldHVybiByZXZlcnNlX3RyYW5zbGF0ZV9lcnJvcih3cmFwcGVyLT5yZWFkKHdyYXBwZXItPmRhdGEsIGJ1ZmZlciwgb3B0cywgc2Vla1Bvc2l0aW9uKSk7Cit9CisKK2Jvb2wgTWVkaWFUcmFja0NVbndyYXBwZXJWMjo6c3VwcG9ydE5vbmJsb2NraW5nUmVhZCgpIHsKKyAgICByZXR1cm4gd3JhcHBlci0+c3VwcG9ydHNOb25CbG9ja2luZ1JlYWQod3JhcHBlci0+ZGF0YSk7Cit9CisKK30gIC8vIG5hbWVzcGFjZSBhbmRyb2lkCmRpZmYgLS1naXQgYS9tZWRpYS9saWJzdGFnZWZyaWdodC9NZXRhRGF0YVV0aWxzLmNwcCBiL21lZGlhL2xpYnN0YWdlZnJpZ2h0L01ldGFEYXRhVXRpbHMuY3BwCmluZGV4IDA0ZjZhZGUuLmEzMjU5ZmQgMTAwNjQ0Ci0tLSBhL21lZGlhL2xpYnN0YWdlZnJpZ2h0L01ldGFEYXRhVXRpbHMuY3BwCisrKyBiL21lZGlhL2xpYnN0YWdlZnJpZ2h0L01ldGFEYXRhVXRpbHMuY3BwCkBAIC0xNiwxNSArMTYsMjUgQEAKIAogLy8jZGVmaW5lIExPR19OREVCVUcgMAogI2RlZmluZSBMT0dfVEFHICJNZXRhRGF0YVV0aWxzIgorI2luY2x1ZGUgPHV0aWxzL0xvZy5oPgogCiAjaW5jbHVkZSA8bWVkaWEvc3RhZ2VmcmlnaHQvZm91bmRhdGlvbi9hdmNfdXRpbHMuaD4KKyNpbmNsdWRlIDxtZWRpYS9zdGFnZWZyaWdodC9mb3VuZGF0aW9uL2Jhc2U2NC5oPgorI2luY2x1ZGUgPG1lZGlhL3N0YWdlZnJpZ2h0L2ZvdW5kYXRpb24vQUJpdFJlYWRlci5oPgogI2luY2x1ZGUgPG1lZGlhL3N0YWdlZnJpZ2h0L2ZvdW5kYXRpb24vQUJ1ZmZlci5oPgorI2luY2x1ZGUgPG1lZGlhL3N0YWdlZnJpZ2h0L2ZvdW5kYXRpb24vQnl0ZVV0aWxzLmg+CiAjaW5jbHVkZSA8bWVkaWEvc3RhZ2VmcmlnaHQvTWVkaWFEZWZzLmg+CiAjaW5jbHVkZSA8bWVkaWEvc3RhZ2VmcmlnaHQvTWV0YURhdGFVdGlscy5oPgorI2luY2x1ZGUgPG1lZGlhL3N0YWdlZnJpZ2h0L1V0aWxzLmg+CisjaW5jbHVkZSA8bWVkaWEvTmRrTWVkaWFGb3JtYXQuaD4KIAogbmFtZXNwYWNlIGFuZHJvaWQgewogCiBib29sIE1ha2VBVkNDb2RlY1NwZWNpZmljRGF0YShNZXRhRGF0YUJhc2UgJm1ldGEsIGNvbnN0IHVpbnQ4X3QgKmRhdGEsIHNpemVfdCBzaXplKSB7CisgICAgaWYgKGRhdGEgPT0gbnVsbHB0ciB8fCBzaXplID09IDApIHsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKwogICAgIGludDMyX3Qgd2lkdGg7CiAgICAgaW50MzJfdCBoZWlnaHQ7CiAgICAgaW50MzJfdCBzYXJXaWR0aDsKQEAgLTQ2LDIxICs1Niw4NiBAQAogICAgIHJldHVybiB0cnVlOwogfQogCitib29sIE1ha2VBVkNDb2RlY1NwZWNpZmljRGF0YShBTWVkaWFGb3JtYXQgKm1ldGEsIGNvbnN0IHVpbnQ4X3QgKmRhdGEsIHNpemVfdCBzaXplKSB7CisgICAgaWYgKG1ldGEgPT0gbnVsbHB0ciB8fCBkYXRhID09IG51bGxwdHIgfHwgc2l6ZSA9PSAwKSB7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBpbnQzMl90IHdpZHRoOworICAgIGludDMyX3QgaGVpZ2h0OworICAgIGludDMyX3Qgc2FyV2lkdGg7CisgICAgaW50MzJfdCBzYXJIZWlnaHQ7CisgICAgc3A8QUJ1ZmZlcj4gYWNjZXNzVW5pdCA9IG5ldyBBQnVmZmVyKCh2b2lkKilkYXRhLCAgc2l6ZSk7CisgICAgc3A8QUJ1ZmZlcj4gY3NkID0gTWFrZUFWQ0NvZGVjU3BlY2lmaWNEYXRhKGFjY2Vzc1VuaXQsICZ3aWR0aCwgJmhlaWdodCwgJnNhcldpZHRoLCAmc2FySGVpZ2h0KTsKKyAgICBpZiAoY3NkID09IG51bGxwdHIpIHsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAgICBBTWVkaWFGb3JtYXRfc2V0U3RyaW5nKG1ldGEsIEFNRURJQUZPUk1BVF9LRVlfTUlNRSwgTUVESUFfTUlNRVRZUEVfVklERU9fQVZDKTsKKworICAgIEFNZWRpYUZvcm1hdF9zZXRCdWZmZXIobWV0YSwgQU1FRElBRk9STUFUX0tFWV9DU0RfQVZDLCBjc2QtPmRhdGEoKSwgY3NkLT5zaXplKCkpOworICAgIEFNZWRpYUZvcm1hdF9zZXRJbnQzMihtZXRhLCBBTUVESUFGT1JNQVRfS0VZX1dJRFRILCB3aWR0aCk7CisgICAgQU1lZGlhRm9ybWF0X3NldEludDMyKG1ldGEsIEFNRURJQUZPUk1BVF9LRVlfSEVJR0hULCBoZWlnaHQpOworICAgIGlmIChzYXJXaWR0aCA+IDAgJiYgc2FySGVpZ2h0ID4gMCkgeworICAgICAgICBBTWVkaWFGb3JtYXRfc2V0SW50MzIobWV0YSwgQU1FRElBRk9STUFUX0tFWV9TQVJfV0lEVEgsIHNhcldpZHRoKTsKKyAgICAgICAgQU1lZGlhRm9ybWF0X3NldEludDMyKG1ldGEsIEFNRURJQUZPUk1BVF9LRVlfU0FSX0hFSUdIVCwgc2FySGVpZ2h0KTsKKyAgICB9CisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgTWFrZUFBQ0NvZGVjU3BlY2lmaWNEYXRhKE1ldGFEYXRhQmFzZSAmbWV0YSwgY29uc3QgdWludDhfdCAqZGF0YSwgc2l6ZV90IHNpemUpIHsKKyAgICBpZiAoZGF0YSA9PSBudWxscHRyIHx8IHNpemUgPCA3KSB7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBBQml0UmVhZGVyIGJpdHMoZGF0YSwgc2l6ZSk7CisKKyAgICAvLyBhZHRzX2ZpeGVkX2hlYWRlcgorCisgICAgaWYgKGJpdHMuZ2V0Qml0cygxMikgIT0gMHhmZmZ1KSB7CisgICAgICAgIEFMT0dFKCJXcm9uZyBhdGRzX2ZpeGVkX2hlYWRlciIpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgYml0cy5za2lwQml0cyg0KTsgIC8vIElELCBsYXllciwgcHJvdGVjdGlvbl9hYnNlbnQKKworICAgIHVuc2lnbmVkIHByb2ZpbGUgPSBiaXRzLmdldEJpdHMoMik7CisgICAgaWYgKHByb2ZpbGUgPT0gM3UpIHsKKyAgICAgICAgQUxPR0UoInByb2ZpbGUgc2hvdWxkIG5vdCBiZSAzIik7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgICAgdW5zaWduZWQgc2FtcGxpbmdfZnJlcV9pbmRleCA9IGJpdHMuZ2V0Qml0cyg0KTsKKyAgICBiaXRzLmdldEJpdHMoMSk7ICAvLyBwcml2YXRlX2JpdAorICAgIHVuc2lnbmVkIGNoYW5uZWxfY29uZmlndXJhdGlvbiA9IGJpdHMuZ2V0Qml0cygzKTsKKyAgICBpZiAoY2hhbm5lbF9jb25maWd1cmF0aW9uID09IDB1KSB7CisgICAgICAgIEFMT0dFKCJjaGFubmVsX2NvbmZpZyBzaG91bGQgbm90IGJlIDAiKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIGlmICghTWFrZUFBQ0NvZGVjU3BlY2lmaWNEYXRhKAorICAgICAgICAgICAgbWV0YSwgcHJvZmlsZSwgc2FtcGxpbmdfZnJlcV9pbmRleCwgY2hhbm5lbF9jb25maWd1cmF0aW9uKSkgeworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgbWV0YS5zZXRJbnQzMihrS2V5SXNBRFRTLCB0cnVlKTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKwogYm9vbCBNYWtlQUFDQ29kZWNTcGVjaWZpY0RhdGEoCi0gICAgICAgIE1ldGFEYXRhQmFzZSAmbWV0YSwKLSAgICAgICAgdW5zaWduZWQgcHJvZmlsZSwgdW5zaWduZWQgc2FtcGxpbmdfZnJlcV9pbmRleCwKLSAgICAgICAgdW5zaWduZWQgY2hhbm5lbF9jb25maWd1cmF0aW9uKSB7CisgICAgICAgIHVpbnQ4X3QgKmNzZCwgLyogb3V0ICovCisgICAgICAgIHNpemVfdCAqZXNkc19zaXplLCAvKiBpbi9vdXQgKi8KKyAgICAgICAgdW5zaWduZWQgcHJvZmlsZSwgLyogaW4gKi8KKyAgICAgICAgdW5zaWduZWQgc2FtcGxpbmdfZnJlcV9pbmRleCwgLyogaW4gKi8KKyAgICAgICAgdW5zaWduZWQgY2hhbm5lbF9jb25maWd1cmF0aW9uLCAvKiBpbiAqLworICAgICAgICBpbnQzMl90ICpzYW1wbGluZ19yYXRlIC8qIG91dCAqLworKSB7CiAgICAgaWYoc2FtcGxpbmdfZnJlcV9pbmRleCA+IDExdSkgewogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQotICAgIGludDMyX3Qgc2FtcGxlUmF0ZTsKLSAgICBpbnQzMl90IGNoYW5uZWxDb3VudDsKICAgICBzdGF0aWMgY29uc3QgaW50MzJfdCBrU2FtcGxpbmdGcmVxW10gPSB7CiAgICAgICAgIDk2MDAwLCA4ODIwMCwgNjQwMDAsIDQ4MDAwLCA0NDEwMCwgMzIwMDAsIDI0MDAwLCAyMjA1MCwKICAgICAgICAgMTYwMDAsIDEyMDAwLCAxMTAyNSwgODAwMAogICAgIH07Ci0gICAgc2FtcGxlUmF0ZSA9IGtTYW1wbGluZ0ZyZXFbc2FtcGxpbmdfZnJlcV9pbmRleF07Ci0gICAgY2hhbm5lbENvdW50ID0gY2hhbm5lbF9jb25maWd1cmF0aW9uOworICAgICpzYW1wbGluZ19yYXRlID0ga1NhbXBsaW5nRnJlcVtzYW1wbGluZ19mcmVxX2luZGV4XTsKIAogICAgIHN0YXRpYyBjb25zdCB1aW50OF90IGtTdGF0aWNFU0RTW10gPSB7CiAgICAgICAgIDB4MDMsIDIyLApAQCAtODMsNyArMTU4LDkgQEAKICAgICB9OwogCiAgICAgc2l6ZV90IGNzZFNpemUgPSBzaXplb2Yoa1N0YXRpY0VTRFMpICsgMjsKLSAgICB1aW50OF90ICpjc2QgPSBuZXcgdWludDhfdFtjc2RTaXplXTsKKyAgICBpZiAoY3NkU2l6ZSA+ICplc2RzX3NpemUpIHsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KICAgICBtZW1jcHkoY3NkLCBrU3RhdGljRVNEUywgc2l6ZW9mKGtTdGF0aWNFU0RTKSk7CiAKICAgICBjc2Rbc2l6ZW9mKGtTdGF0aWNFU0RTKV0gPQpAQCAtOTIsMTQgKzE2OSwxODYgQEAKICAgICBjc2Rbc2l6ZW9mKGtTdGF0aWNFU0RTKSArIDFdID0KICAgICAgICAgKChzYW1wbGluZ19mcmVxX2luZGV4IDw8IDcpICYgMHg4MCkgfCAoY2hhbm5lbF9jb25maWd1cmF0aW9uIDw8IDMpOwogCisgICAgKmVzZHNfc2l6ZSA9IGNzZFNpemU7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgTWFrZUFBQ0NvZGVjU3BlY2lmaWNEYXRhKEFNZWRpYUZvcm1hdCAqbWV0YSwgdW5zaWduZWQgcHJvZmlsZSwgdW5zaWduZWQgc2FtcGxpbmdfZnJlcV9pbmRleCwKKyAgICAgICAgdW5zaWduZWQgY2hhbm5lbF9jb25maWd1cmF0aW9uKSB7CisKKyAgICBpZihzYW1wbGluZ19mcmVxX2luZGV4ID4gMTF1KSB7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICB1aW50OF90IGNzZFsyXTsKKyAgICBjc2RbMF0gPSAoKHByb2ZpbGUgKyAxKSA8PCAzKSB8IChzYW1wbGluZ19mcmVxX2luZGV4ID4+IDEpOworICAgIGNzZFsxXSA9ICgoc2FtcGxpbmdfZnJlcV9pbmRleCA8PCA3KSAmIDB4ODApIHwgKGNoYW5uZWxfY29uZmlndXJhdGlvbiA8PCAzKTsKKworICAgIHN0YXRpYyBjb25zdCBpbnQzMl90IGtTYW1wbGluZ0ZyZXFbXSA9IHsKKyAgICAgICAgOTYwMDAsIDg4MjAwLCA2NDAwMCwgNDgwMDAsIDQ0MTAwLCAzMjAwMCwgMjQwMDAsIDIyMDUwLAorICAgICAgICAxNjAwMCwgMTIwMDAsIDExMDI1LCA4MDAwCisgICAgfTsKKyAgICBpbnQzMl90IHNhbXBsZVJhdGUgPSBrU2FtcGxpbmdGcmVxW3NhbXBsaW5nX2ZyZXFfaW5kZXhdOworCisgICAgQU1lZGlhRm9ybWF0X3NldEJ1ZmZlcihtZXRhLCBBTUVESUFGT1JNQVRfS0VZX0NTRF8wLCBjc2QsIHNpemVvZihjc2QpKTsKKyAgICBBTWVkaWFGb3JtYXRfc2V0U3RyaW5nKG1ldGEsIEFNRURJQUZPUk1BVF9LRVlfTUlNRSwgTUVESUFfTUlNRVRZUEVfQVVESU9fQUFDKTsKKyAgICBBTWVkaWFGb3JtYXRfc2V0SW50MzIobWV0YSwgQU1FRElBRk9STUFUX0tFWV9TQU1QTEVfUkFURSwgc2FtcGxlUmF0ZSk7CisgICAgQU1lZGlhRm9ybWF0X3NldEludDMyKG1ldGEsIEFNRURJQUZPUk1BVF9LRVlfQ0hBTk5FTF9DT1VOVCwgY2hhbm5lbF9jb25maWd1cmF0aW9uKTsKKworICAgIHJldHVybiB0cnVlOworfQorCitib29sIE1ha2VBQUNDb2RlY1NwZWNpZmljRGF0YSgKKyAgICAgICAgTWV0YURhdGFCYXNlICZtZXRhLAorICAgICAgICB1bnNpZ25lZCBwcm9maWxlLCB1bnNpZ25lZCBzYW1wbGluZ19mcmVxX2luZGV4LAorICAgICAgICB1bnNpZ25lZCBjaGFubmVsX2NvbmZpZ3VyYXRpb24pIHsKKworICAgIHVpbnQ4X3QgY3NkWzI0XTsKKyAgICBzaXplX3QgY3NkU2l6ZSA9IHNpemVvZihjc2QpOworICAgIGludDMyX3Qgc2FtcGxlUmF0ZTsKKworICAgIGlmICghTWFrZUFBQ0NvZGVjU3BlY2lmaWNEYXRhKGNzZCwgJmNzZFNpemUsIHByb2ZpbGUsIHNhbXBsaW5nX2ZyZXFfaW5kZXgsCisgICAgICAgICAgICBjaGFubmVsX2NvbmZpZ3VyYXRpb24sICZzYW1wbGVSYXRlKSkgeworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCiAgICAgbWV0YS5zZXRDU3RyaW5nKGtLZXlNSU1FVHlwZSwgTUVESUFfTUlNRVRZUEVfQVVESU9fQUFDKTsKIAogICAgIG1ldGEuc2V0SW50MzIoa0tleVNhbXBsZVJhdGUsIHNhbXBsZVJhdGUpOwotICAgIG1ldGEuc2V0SW50MzIoa0tleUNoYW5uZWxDb3VudCwgY2hhbm5lbENvdW50KTsKLQorICAgIG1ldGEuc2V0SW50MzIoa0tleUNoYW5uZWxDb3VudCwgY2hhbm5lbF9jb25maWd1cmF0aW9uKTsKICAgICBtZXRhLnNldERhdGEoa0tleUVTRFMsIDAsIGNzZCwgY3NkU2l6ZSk7Ci0gICAgZGVsZXRlIFtdIGNzZDsKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAorCitzdGF0aWMgdm9pZCBleHRyYWN0QWxidW1BcnQoCisgICAgICAgIEFNZWRpYUZvcm1hdCAqZmlsZU1ldGEsIGNvbnN0IHZvaWQgKmRhdGEsIHNpemVfdCBzaXplKSB7CisgICAgQUxPR1YoImV4dHJhY3RBbGJ1bUFydCBmcm9tICclcyciLCAoY29uc3QgY2hhciAqKWRhdGEpOworCisgICAgc2l6ZV90IGluTGVuID0gc3RybmxlbigoY29uc3QgY2hhciAqKWRhdGEsIHNpemUpOworICAgIHNpemVfdCBmbGFjU2l6ZSA9IGluTGVuIC8gNCAqIDM7CisgICAgdWludDhfdCAqZmxhYyA9IG5ldyB1aW50OF90W2ZsYWNTaXplXTsKKyAgICBpZiAoIWRlY29kZUJhc2U2NChmbGFjLCAmZmxhY1NpemUsIChjb25zdCBjaGFyKilkYXRhKSkgeworICAgICAgICBBTE9HRSgibWFsZm9ybWVkIGJhc2U2NCBlbmNvZGVkIGRhdGEuIik7CisgICAgICAgIGRlbGV0ZVtdIGZsYWM7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBBTE9HVigiZ290IGZsYWMgb2Ygc2l6ZSAlenUiLCBmbGFjU2l6ZSk7CisKKyAgICB1aW50MzJfdCBwaWNUeXBlOworICAgIHVpbnQzMl90IHR5cGVMZW47CisgICAgdWludDMyX3QgZGVzY0xlbjsKKyAgICB1aW50MzJfdCBkYXRhTGVuOworICAgIGNoYXIgdHlwZVsxMjhdOworCisgICAgaWYgKGZsYWNTaXplIDwgOCkgeworICAgICAgICBkZWxldGVbXSBmbGFjOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgcGljVHlwZSA9IFUzMl9BVChmbGFjKTsKKworICAgIGlmIChwaWNUeXBlICE9IDMpIHsKKyAgICAgICAgLy8gVGhpcyBpcyBub3QgYSBmcm9udCBjb3Zlci4KKyAgICAgICAgZGVsZXRlW10gZmxhYzsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIHR5cGVMZW4gPSBVMzJfQVQoJmZsYWNbNF0pOworICAgIGlmICh0eXBlTGVuID4gc2l6ZW9mKHR5cGUpIC0gMSkgeworICAgICAgICBkZWxldGVbXSBmbGFjOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgLy8gd2UndmUgYWxyZWFkeSBjaGVja2VkIGFib3ZlIHRoYXQgZmxhY1NpemUgPj0gOAorICAgIGlmIChmbGFjU2l6ZSAtIDggPCB0eXBlTGVuKSB7CisgICAgICAgIGRlbGV0ZVtdIGZsYWM7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBtZW1jcHkodHlwZSwgJmZsYWNbOF0sIHR5cGVMZW4pOworICAgIHR5cGVbdHlwZUxlbl0gPSAnXDAnOworCisgICAgQUxPR1YoInBpY1R5cGUgPSAlZCwgdHlwZSA9ICclcyciLCBwaWNUeXBlLCB0eXBlKTsKKworICAgIGlmICghc3RyY21wKHR5cGUsICItLT4iKSkgeworICAgICAgICAvLyBUaGlzIGlzIG5vdCBpbmxpbmUgY292ZXIgYXJ0LCBidXQgYW4gZXh0ZXJuYWwgdXJsIGluc3RlYWQuCisgICAgICAgIGRlbGV0ZVtdIGZsYWM7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAoZmxhY1NpemUgPCAzMiB8fCBmbGFjU2l6ZSAtIDMyIDwgdHlwZUxlbikgeworICAgICAgICBkZWxldGVbXSBmbGFjOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgZGVzY0xlbiA9IFUzMl9BVCgmZmxhY1s4ICsgdHlwZUxlbl0pOworICAgIGlmIChmbGFjU2l6ZSAtIDMyIC0gdHlwZUxlbiA8IGRlc2NMZW4pIHsKKyAgICAgICAgZGVsZXRlW10gZmxhYzsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGRhdGFMZW4gPSBVMzJfQVQoJmZsYWNbOCArIHR5cGVMZW4gKyA0ICsgZGVzY0xlbiArIDE2XSk7CisKKyAgICAvLyB3ZSd2ZSBhbHJlYWR5IGNoZWNrZWQgYWJvdmUgdGhhdCAoZmxhY1NpemUgLSAzMiAtIHR5cGVMZW4gLSBkZXNjTGVuKSA+PSAwCisgICAgaWYgKGZsYWNTaXplIC0gMzIgLSB0eXBlTGVuIC0gZGVzY0xlbiA8IGRhdGFMZW4pIHsKKyAgICAgICAgZGVsZXRlW10gZmxhYzsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIEFMT0dWKCJnb3QgaW1hZ2UgZGF0YSwgJXp1IHRyYWlsaW5nIGJ5dGVzIiwKKyAgICAgICAgIGZsYWNTaXplIC0gMzIgLSB0eXBlTGVuIC0gZGVzY0xlbiAtIGRhdGFMZW4pOworCisgICAgQU1lZGlhRm9ybWF0X3NldEJ1ZmZlcihmaWxlTWV0YSwgQU1FRElBRk9STUFUX0tFWV9BTEJVTUFSVCwKKyAgICAgICAgICAgICZmbGFjWzggKyB0eXBlTGVuICsgNCArIGRlc2NMZW4gKyAyMF0sIGRhdGFMZW4pOworCisgICAgZGVsZXRlW10gZmxhYzsKK30KKwordm9pZCBwYXJzZVZvcmJpc0NvbW1lbnQoCisgICAgICAgIEFNZWRpYUZvcm1hdCAqZmlsZU1ldGEsIGNvbnN0IGNoYXIgKmNvbW1lbnQsIHNpemVfdCBjb21tZW50TGVuZ3RoKSB7CisgICAgc3RydWN0IHsKKyAgICAgICAgY29uc3QgY2hhciAqY29uc3QgbVRhZzsKKyAgICAgICAgY29uc3QgY2hhciAqbUtleTsKKyAgICB9IGtNYXBbXSA9IHsKKyAgICAgICAgeyAiVElUTEUiLCBBTUVESUFGT1JNQVRfS0VZX1RJVExFIH0sCisgICAgICAgIHsgIkFSVElTVCIsIEFNRURJQUZPUk1BVF9LRVlfQVJUSVNUIH0sCisgICAgICAgIHsgIkFMQlVNQVJUSVNUIiwgQU1FRElBRk9STUFUX0tFWV9BTEJVTUFSVElTVCB9LAorICAgICAgICB7ICJBTEJVTSBBUlRJU1QiLCBBTUVESUFGT1JNQVRfS0VZX0FMQlVNQVJUSVNUIH0sCisgICAgICAgIHsgIkNPTVBJTEFUSU9OIiwgQU1FRElBRk9STUFUX0tFWV9DT01QSUxBVElPTiB9LAorICAgICAgICB7ICJBTEJVTSIsIEFNRURJQUZPUk1BVF9LRVlfQUxCVU0gfSwKKyAgICAgICAgeyAiQ09NUE9TRVIiLCBBTUVESUFGT1JNQVRfS0VZX0NPTVBPU0VSIH0sCisgICAgICAgIHsgIkdFTlJFIiwgQU1FRElBRk9STUFUX0tFWV9HRU5SRSB9LAorICAgICAgICB7ICJBVVRIT1IiLCBBTUVESUFGT1JNQVRfS0VZX0FVVEhPUiB9LAorICAgICAgICB7ICJUUkFDS05VTUJFUiIsIEFNRURJQUZPUk1BVF9LRVlfQ0RUUkFDS05VTUJFUiB9LAorICAgICAgICB7ICJESVNDTlVNQkVSIiwgQU1FRElBRk9STUFUX0tFWV9ESVNDTlVNQkVSIH0sCisgICAgICAgIHsgIkRBVEUiLCBBTUVESUFGT1JNQVRfS0VZX0RBVEUgfSwKKyAgICAgICAgeyAiWUVBUiIsIEFNRURJQUZPUk1BVF9LRVlfWUVBUiB9LAorICAgICAgICB7ICJMWVJJQ0lTVCIsIEFNRURJQUZPUk1BVF9LRVlfTFlSSUNJU1QgfSwKKyAgICAgICAgeyAiTUVUQURBVEFfQkxPQ0tfUElDVFVSRSIsIEFNRURJQUZPUk1BVF9LRVlfQUxCVU1BUlQgfSwKKyAgICAgICAgeyAiQU5EUk9JRF9MT09QIiwgQU1FRElBRk9STUFUX0tFWV9MT09QIH0sCisgICAgfTsKKworICAgICAgICBmb3IgKHNpemVfdCBqID0gMDsgaiA8IHNpemVvZihrTWFwKSAvIHNpemVvZihrTWFwWzBdKTsgKytqKSB7CisgICAgICAgICAgICBzaXplX3QgdGFnTGVuID0gc3RybGVuKGtNYXBbal0ubVRhZyk7CisgICAgICAgICAgICBpZiAoIXN0cm5jYXNlY21wKGtNYXBbal0ubVRhZywgY29tbWVudCwgdGFnTGVuKQorICAgICAgICAgICAgICAgICAgICAmJiBjb21tZW50W3RhZ0xlbl0gPT0gJz0nKSB7CisgICAgICAgICAgICAgICAgaWYgKGtNYXBbal0ubUtleSA9PSBBTUVESUFGT1JNQVRfS0VZX0FMQlVNQVJUKSB7CisgICAgICAgICAgICAgICAgICAgIGV4dHJhY3RBbGJ1bUFydCgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWxlTWV0YSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAmY29tbWVudFt0YWdMZW4gKyAxXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb21tZW50TGVuZ3RoIC0gdGFnTGVuIC0gMSk7CisgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChrTWFwW2pdLm1LZXkgPT0gQU1FRElBRk9STUFUX0tFWV9MT09QKSB7CisgICAgICAgICAgICAgICAgICAgIGlmICghc3RyY2FzZWNtcCgmY29tbWVudFt0YWdMZW4gKyAxXSwgInRydWUiKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgQU1lZGlhRm9ybWF0X3NldEludDMyKGZpbGVNZXRhLCBBTUVESUFGT1JNQVRfS0VZX0xPT1AsIDEpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgQU1lZGlhRm9ybWF0X3NldFN0cmluZyhmaWxlTWV0YSwga01hcFtqXS5tS2V5LCAmY29tbWVudFt0YWdMZW4gKyAxXSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisKK30KKwogfSAgLy8gbmFtZXNwYWNlIGFuZHJvaWQKZGlmZiAtLWdpdCBhL21lZGlhL2xpYnN0YWdlZnJpZ2h0L051Q2FjaGVkU291cmNlMi5jcHAgYi9tZWRpYS9saWJzdGFnZWZyaWdodC9OdUNhY2hlZFNvdXJjZTIuY3BwCmluZGV4IDE4ZjRiMTIuLjcwMjVhZjcgMTAwNjQ0Ci0tLSBhL21lZGlhL2xpYnN0YWdlZnJpZ2h0L051Q2FjaGVkU291cmNlMi5jcHAKKysrIGIvbWVkaWEvbGlic3RhZ2VmcmlnaHQvTnVDYWNoZWRTb3VyY2UyLmNwcApAQCAtMjU2LDYgKzI1NiwxMCBAQAogICAgIHJldHVybiBFUlJPUl9VTlNVUFBPUlRFRDsKIH0KIAordm9pZCBOdUNhY2hlZFNvdXJjZTI6OmNsb3NlKCkgeworICAgIGRpc2Nvbm5lY3QoKTsKK30KKwogdm9pZCBOdUNhY2hlZFNvdXJjZTI6OmRpc2Nvbm5lY3QoKSB7CiAgICAgaWYgKG1Tb3VyY2UtPmZsYWdzKCkgJiBrSXNIVFRQQmFzZWRTb3VyY2UpIHsKICAgICAgICAgQUxPR1YoImRpc2Nvbm5lY3RpbmcgSFRUUEJhc2VkU291cmNlIik7CkBAIC01NjcsMTIgKzU3MSwxOSBAQAogICAgIHJldHVybiBtQ2FjaGVPZmZzZXQgKyBtQ2FjaGUtPnRvdGFsU2l6ZSgpOwogfQogCi1zaXplX3QgTnVDYWNoZWRTb3VyY2UyOjphcHByb3hEYXRhUmVtYWluaW5nKHN0YXR1c190ICpmaW5hbFN0YXR1cykgY29uc3Qgeworc3RhdHVzX3QgTnVDYWNoZWRTb3VyY2UyOjpnZXRBdmFpbGFibGVTaXplKG9mZjY0X3Qgb2Zmc2V0LCBvZmY2NF90ICpzaXplKSB7CiAgICAgTXV0ZXg6OkF1dG9sb2NrIGF1dG9Mb2NrKG1Mb2NrKTsKLSAgICByZXR1cm4gYXBwcm94RGF0YVJlbWFpbmluZ19sKGZpbmFsU3RhdHVzKTsKKyAgICBzdGF0dXNfdCBmaW5hbFN0YXR1cyA9IFVOS05PV05fRVJST1I7CisgICAgKnNpemUgPSBhcHByb3hEYXRhUmVtYWluaW5nX2wob2Zmc2V0LCAmZmluYWxTdGF0dXMpOworICAgIHJldHVybiBmaW5hbFN0YXR1czsKIH0KIAotc2l6ZV90IE51Q2FjaGVkU291cmNlMjo6YXBwcm94RGF0YVJlbWFpbmluZ19sKHN0YXR1c190ICpmaW5hbFN0YXR1cykgY29uc3Qgeworc2l6ZV90IE51Q2FjaGVkU291cmNlMjo6YXBwcm94RGF0YVJlbWFpbmluZyhzdGF0dXNfdCAqZmluYWxTdGF0dXMpIGNvbnN0IHsKKyAgICBNdXRleDo6QXV0b2xvY2sgYXV0b0xvY2sobUxvY2spOworICAgIHJldHVybiBhcHByb3hEYXRhUmVtYWluaW5nX2wobUxhc3RBY2Nlc3NQb3MsIGZpbmFsU3RhdHVzKTsKK30KKworc2l6ZV90IE51Q2FjaGVkU291cmNlMjo6YXBwcm94RGF0YVJlbWFpbmluZ19sKG9mZjY0X3Qgb2Zmc2V0LCBzdGF0dXNfdCAqZmluYWxTdGF0dXMpIGNvbnN0IHsKICAgICAqZmluYWxTdGF0dXMgPSBtRmluYWxTdGF0dXM7CiAKICAgICBpZiAobUZpbmFsU3RhdHVzICE9IE9LICYmIG1OdW1SZXRyaWVzTGVmdCA+IDApIHsKQEAgLTU4MCw5ICs1OTEsMTAgQEAKICAgICAgICAgKmZpbmFsU3RhdHVzID0gT0s7CiAgICAgfQogCisgICAgb2Zmc2V0ID0gb2Zmc2V0ID49IDAgPyBvZmZzZXQgOiBtTGFzdEFjY2Vzc1BvczsKICAgICBvZmY2NF90IGxhc3RCeXRlUG9zQ2FjaGVkID0gbUNhY2hlT2Zmc2V0ICsgbUNhY2hlLT50b3RhbFNpemUoKTsKLSAgICBpZiAobUxhc3RBY2Nlc3NQb3MgPCBsYXN0Qnl0ZVBvc0NhY2hlZCkgewotICAgICAgICByZXR1cm4gbGFzdEJ5dGVQb3NDYWNoZWQgLSBtTGFzdEFjY2Vzc1BvczsKKyAgICBpZiAob2Zmc2V0IDwgbGFzdEJ5dGVQb3NDYWNoZWQpIHsKKyAgICAgICAgcmV0dXJuIGxhc3RCeXRlUG9zQ2FjaGVkIC0gb2Zmc2V0OwogICAgIH0KICAgICByZXR1cm4gMDsKIH0KZGlmZiAtLWdpdCBhL21lZGlhL2xpYnN0YWdlZnJpZ2h0L051TWVkaWFFeHRyYWN0b3IuY3BwIGIvbWVkaWEvbGlic3RhZ2VmcmlnaHQvTnVNZWRpYUV4dHJhY3Rvci5jcHAKaW5kZXggNGE3ZDZjYS4uZjUxNzhkZCAxMDA2NDQKLS0tIGEvbWVkaWEvbGlic3RhZ2VmcmlnaHQvTnVNZWRpYUV4dHJhY3Rvci5jcHAKKysrIGIvbWVkaWEvbGlic3RhZ2VmcmlnaHQvTnVNZWRpYUV4dHJhY3Rvci5jcHAKQEAgLTIxLDEwICsyMSw4IEBACiAjaW5jbHVkZSA8bWVkaWEvc3RhZ2VmcmlnaHQvTnVNZWRpYUV4dHJhY3Rvci5oPgogCiAjaW5jbHVkZSAiaW5jbHVkZS9FU0RTLmgiCi0jaW5jbHVkZSAiaW5jbHVkZS9OdUNhY2hlZFNvdXJjZTIuaCIKIAogI2luY2x1ZGUgPG1lZGlhL0RhdGFTb3VyY2UuaD4KLSNpbmNsdWRlIDxtZWRpYS9NZWRpYUV4dHJhY3Rvci5oPgogI2luY2x1ZGUgPG1lZGlhL01lZGlhU291cmNlLmg+CiAjaW5jbHVkZSA8bWVkaWEvc3RhZ2VmcmlnaHQvZm91bmRhdGlvbi9BQnVmZmVyLmg+CiAjaW5jbHVkZSA8bWVkaWEvc3RhZ2VmcmlnaHQvZm91bmRhdGlvbi9BRGVidWcuaD4KQEAgLTM0LDYgKzMyLDcgQEAKICNpbmNsdWRlIDxtZWRpYS9zdGFnZWZyaWdodC9NZWRpYUJ1ZmZlci5oPgogI2luY2x1ZGUgPG1lZGlhL3N0YWdlZnJpZ2h0L01lZGlhRGVmcy5oPgogI2luY2x1ZGUgPG1lZGlhL3N0YWdlZnJpZ2h0L01lZGlhRXJyb3JzLmg+CisjaW5jbHVkZSA8bWVkaWEvc3RhZ2VmcmlnaHQvTWVkaWFFeHRyYWN0b3IuaD4KICNpbmNsdWRlIDxtZWRpYS9zdGFnZWZyaWdodC9NZWRpYUV4dHJhY3RvckZhY3RvcnkuaD4KICNpbmNsdWRlIDxtZWRpYS9zdGFnZWZyaWdodC9NZXRhRGF0YS5oPgogI2luY2x1ZGUgPG1lZGlhL3N0YWdlZnJpZ2h0L1V0aWxzLmg+CkBAIC0yMDUsMTUgKzIwNCw2IEBACiAgICAgcmV0dXJuIE9LOwogfQogCi12b2lkIE51TWVkaWFFeHRyYWN0b3I6OmRpc2Nvbm5lY3QoKSB7Ci0gICAgaWYgKG1EYXRhU291cmNlICE9IE5VTEwpIHsKLSAgICAgICAgLy8gZGlzY29ubmVjdCBkYXRhIHNvdXJjZQotICAgICAgICBpZiAobURhdGFTb3VyY2UtPmZsYWdzKCkgJiBEYXRhU291cmNlOjprSXNDYWNoaW5nRGF0YVNvdXJjZSkgewotICAgICAgICAgICAgc3RhdGljX2Nhc3Q8TnVDYWNoZWRTb3VyY2UyICo+KG1EYXRhU291cmNlLmdldCgpKS0+ZGlzY29ubmVjdCgpOwotICAgICAgICB9Ci0gICAgfQotfQotCiBzdGF0dXNfdCBOdU1lZGlhRXh0cmFjdG9yOjp1cGRhdGVEdXJhdGlvbkFuZEJpdHJhdGUoKSB7CiAgICAgaWYgKG1JbXBsLT5jb3VudFRyYWNrcygpID4ga01heFRyYWNrQ291bnQpIHsKICAgICAgICAgcmV0dXJuIEVSUk9SX1VOU1VQUE9SVEVEOwpAQCAtNzkwLDE2ICs3ODAsMTIgQEAKICAgICAgICAgaW50NjRfdCAqZHVyYXRpb25VcywgYm9vbCAqZW9zKSBjb25zdCB7CiAgICAgTXV0ZXg6OkF1dG9sb2NrIGF1dG9Mb2NrKG1Mb2NrKTsKIAorICAgIG9mZjY0X3QgY2FjaGVkRGF0YVJlbWFpbmluZyA9IC0xOworICAgIHN0YXR1c190IGZpbmFsU3RhdHVzID0gbURhdGFTb3VyY2UtPmdldEF2YWlsYWJsZVNpemUoLTEsICZjYWNoZWREYXRhUmVtYWluaW5nKTsKKwogICAgIGludDY0X3QgYml0cmF0ZTsKLSAgICBpZiAoKG1EYXRhU291cmNlLT5mbGFncygpICYgRGF0YVNvdXJjZTo6a0lzQ2FjaGluZ0RhdGFTb3VyY2UpCisgICAgaWYgKGNhY2hlZERhdGFSZW1haW5pbmcgPj0gMAogICAgICAgICAgICAgJiYgZ2V0VG90YWxCaXRyYXRlKCZiaXRyYXRlKSkgewotICAgICAgICBzcDxOdUNhY2hlZFNvdXJjZTI+IGNhY2hlZFNvdXJjZSA9Ci0gICAgICAgICAgICBzdGF0aWNfY2FzdDxOdUNhY2hlZFNvdXJjZTIgKj4obURhdGFTb3VyY2UuZ2V0KCkpOwotCi0gICAgICAgIHN0YXR1c190IGZpbmFsU3RhdHVzOwotICAgICAgICBzaXplX3QgY2FjaGVkRGF0YVJlbWFpbmluZyA9Ci0gICAgICAgICAgICBjYWNoZWRTb3VyY2UtPmFwcHJveERhdGFSZW1haW5pbmcoJmZpbmFsU3RhdHVzKTsKLQogICAgICAgICAqZHVyYXRpb25VcyA9IGNhY2hlZERhdGFSZW1haW5pbmcgKiA4MDAwMDAwbGwgLyBiaXRyYXRlOwogICAgICAgICAqZW9zID0gKGZpbmFsU3RhdHVzICE9IE9LKTsKICAgICAgICAgcmV0dXJuIHRydWU7CkBAIC04MDgsNCArNzk0LDMyIEBACiAgICAgcmV0dXJuIGZhbHNlOwogfQogCisvLyBSZXR1cm4gT0sgaWYgd2UgaGF2ZSByZWNlaXZlZCBhbiBhdWRpbyBwcmVzZW50YXRpb24gaW5mby4KKy8vIFJldHVybiBFUlJPUl9VTlNVUFBPUlRFRCBpZiB0aGUgdHJhY2sgaGFzIG5vIGF1ZGlvIHByZXNlbnRhdGlvbi4KKy8vIFJldHVybiBJTlZBTElEX09QRVJBVElPTiBpZiBhdWRpbyBwcmVzZW50YXRpb24gbWV0YWRhdGEgdmVyc2lvbiBkb2VzIG5vdCBtYXRjaC4KK3N0YXR1c190IE51TWVkaWFFeHRyYWN0b3I6OmdldEF1ZGlvUHJlc2VudGF0aW9ucygKKyAgICAgICAgc2l6ZV90IHRyYWNrSW5kZXgsIEF1ZGlvUHJlc2VudGF0aW9uQ29sbGVjdGlvbiAqcHJlc2VudGF0aW9ucykgY29uc3QgeworICAgIE11dGV4OjpBdXRvbG9jayBhdXRvTG9jayhtTG9jayk7CisKKyAgICBpZiAobUltcGwgPT0gTlVMTCkgeworICAgICAgICByZXR1cm4gLUVJTlZBTDsKKyAgICB9CisKKyAgICBpZiAodHJhY2tJbmRleCA+PSBtSW1wbC0+Y291bnRUcmFja3MoKSkgeworICAgICAgICByZXR1cm4gLUVSQU5HRTsKKyAgICB9CisKKyAgICBzcDxNZXRhRGF0YT4gbWV0YSA9IG1JbXBsLT5nZXRUcmFja01ldGFEYXRhKHRyYWNrSW5kZXgpOworCisgICAgdWludDMyX3QgdHlwZTsKKyAgICBjb25zdCB2b2lkICpkYXRhOworICAgIHNpemVfdCBzaXplOworICAgIGlmIChtZXRhICE9IE5VTEwgJiYgbWV0YS0+ZmluZERhdGEoa0tleUF1ZGlvUHJlc2VudGF0aW9uSW5mbywgJnR5cGUsICZkYXRhLCAmc2l6ZSkpIHsKKyAgICAgICAgc3RkOjppc3RyaW5nc3RyZWFtIGluU3RyZWFtKHN0ZDo6c3RyaW5nKHN0YXRpY19jYXN0PGNvbnN0IGNoYXIqPihkYXRhKSwgc2l6ZSkpOworICAgICAgICByZXR1cm4gZGVzZXJpYWxpemVBdWRpb1ByZXNlbnRhdGlvbnMoJmluU3RyZWFtLCBwcmVzZW50YXRpb25zKTsKKyAgICB9CisgICAgQUxPR0UoIlNvdXJjZSBkb2VzIG5vdCBjb250YWluIGFueSBhdWRpbyBwcmVzZW50YXRpb24iKTsKKyAgICByZXR1cm4gRVJST1JfVU5TVVBQT1JURUQ7Cit9CisKIH0gIC8vIG5hbWVzcGFjZSBhbmRyb2lkCmRpZmYgLS1naXQgYS9tZWRpYS9saWJzdGFnZWZyaWdodC9SZW1vdGVNZWRpYVNvdXJjZS5jcHAgYi9tZWRpYS9saWJzdGFnZWZyaWdodC9SZW1vdGVNZWRpYVNvdXJjZS5jcHAKaW5kZXggZDA3YWZlYy4uZGIzMWFmMiAxMDA2NDQKLS0tIGEvbWVkaWEvbGlic3RhZ2VmcmlnaHQvUmVtb3RlTWVkaWFTb3VyY2UuY3BwCisrKyBiL21lZGlhL2xpYnN0YWdlZnJpZ2h0L1JlbW90ZU1lZGlhU291cmNlLmNwcApAQCAtMjUsMjUgKzI1LDI5IEBACiAgICAgICAgIE1lZGlhVHJhY2sgKnNvdXJjZSwKICAgICAgICAgY29uc3Qgc3A8UmVmQmFzZT4gJnBsdWdpbikKICAgICA6IG1FeHRyYWN0b3IoZXh0cmFjdG9yKSwKLSAgICAgIG1Tb3VyY2Uoc291cmNlKSwKKyAgICAgIG1UcmFjayhzb3VyY2UpLAogICAgICAgbUV4dHJhY3RvclBsdWdpbihwbHVnaW4pIHt9CiAKIFJlbW90ZU1lZGlhU291cmNlOjp+UmVtb3RlTWVkaWFTb3VyY2UoKSB7Ci0gICAgZGVsZXRlIG1Tb3VyY2U7CisgICAgZGVsZXRlIG1UcmFjazsKICAgICBtRXh0cmFjdG9yUGx1Z2luID0gbnVsbHB0cjsKIH0KIAogc3RhdHVzX3QgUmVtb3RlTWVkaWFTb3VyY2U6OnN0YXJ0KE1ldGFEYXRhICpwYXJhbXMpIHsKLSAgICByZXR1cm4gbVNvdXJjZS0+c3RhcnQocGFyYW1zKTsKKyAgICBpZiAocGFyYW1zKSB7CisgICAgICAgIEFMT0dXKCJkcm9wcGluZyBzdGFydCBwYXJhbWV0ZXJzOiIpOworICAgICAgICBwYXJhbXMtPmR1bXBUb0xvZygpOworICAgIH0KKyAgICByZXR1cm4gbVRyYWNrLT5zdGFydCgpOwogfQogCiBzdGF0dXNfdCBSZW1vdGVNZWRpYVNvdXJjZTo6c3RvcCgpIHsKLSAgICByZXR1cm4gbVNvdXJjZS0+c3RvcCgpOworICAgIHJldHVybiBtVHJhY2stPnN0b3AoKTsKIH0KIAogc3A8TWV0YURhdGE+IFJlbW90ZU1lZGlhU291cmNlOjpnZXRGb3JtYXQoKSB7CiAgICAgc3A8TWV0YURhdGE+IG1ldGEgPSBuZXcgTWV0YURhdGEoKTsKLSAgICBpZiAobVNvdXJjZS0+Z2V0Rm9ybWF0KCptZXRhLmdldCgpKSA9PSBPSykgeworICAgIGlmIChtVHJhY2stPmdldEZvcm1hdCgqbWV0YS5nZXQoKSkgPT0gT0spIHsKICAgICAgICAgcmV0dXJuIG1ldGE7CiAgICAgfQogICAgIHJldHVybiBudWxscHRyOwpAQCAtNTEsNyArNTUsMTEgQEAKIAogc3RhdHVzX3QgUmVtb3RlTWVkaWFTb3VyY2U6OnJlYWQoCiAgICAgICAgIE1lZGlhQnVmZmVyQmFzZSAqKmJ1ZmZlciwgY29uc3QgTWVkaWFTb3VyY2U6OlJlYWRPcHRpb25zICpvcHRpb25zKSB7Ci0gICAgcmV0dXJuIG1Tb3VyY2UtPnJlYWQoYnVmZmVyLCByZWludGVycHJldF9jYXN0PGNvbnN0IE1lZGlhU291cmNlOjpSZWFkT3B0aW9ucyo+KG9wdGlvbnMpKTsKKyAgICByZXR1cm4gbVRyYWNrLT5yZWFkKGJ1ZmZlciwgcmVpbnRlcnByZXRfY2FzdDxjb25zdCBNZWRpYVNvdXJjZTo6UmVhZE9wdGlvbnMqPihvcHRpb25zKSk7Cit9CisKK2Jvb2wgUmVtb3RlTWVkaWFTb3VyY2U6OnN1cHBvcnROb25ibG9ja2luZ1JlYWQoKSB7CisgICAgcmV0dXJuIG1UcmFjay0+c3VwcG9ydE5vbmJsb2NraW5nUmVhZCgpOwogfQogCiBzdGF0dXNfdCBSZW1vdGVNZWRpYVNvdXJjZTo6cGF1c2UoKSB7CmRpZmYgLS1naXQgYS9tZWRpYS9saWJzdGFnZWZyaWdodC9TaW1wbGVEZWNvZGluZ1NvdXJjZS5jcHAgYi9tZWRpYS9saWJzdGFnZWZyaWdodC9TaW1wbGVEZWNvZGluZ1NvdXJjZS5jcHAKaW5kZXggNDA0YzUzNy4uYmFiZGM3YSAxMDA2NDQKLS0tIGEvbWVkaWEvbGlic3RhZ2VmcmlnaHQvU2ltcGxlRGVjb2RpbmdTb3VyY2UuY3BwCisrKyBiL21lZGlhL2xpYnN0YWdlZnJpZ2h0L1NpbXBsZURlY29kaW5nU291cmNlLmNwcApAQCAtMzcsNiArMzcsNyBAQAogCiBjb25zdCBpbnQ2NF90IGtUaW1lb3V0V2FpdEZvck91dHB1dFVzID0gNTAwMDAwOyAvLyAwLjUgc2Vjb25kcwogY29uc3QgaW50NjRfdCBrVGltZW91dFdhaXRGb3JJbnB1dFVzID0gNTAwMDsgLy8gNSBtaWxsaXNlY29uZHMKK2NvbnN0IGludCBrVGltZW91dE1heFJldHJpZXMgPSAyMDsKIAogLy9zdGF0aWMKIHNwPFNpbXBsZURlY29kaW5nU291cmNlPiBTaW1wbGVEZWNvZGluZ1NvdXJjZTo6Q3JlYXRlKApAQCAtMjQyLDcgKzI0Myw3IEBACiAgICAgICAgIHJldHVybiBFUlJPUl9FTkRfT0ZfU1RSRUFNOwogICAgIH0KIAotICAgIGZvciAoaW50IHJldHJpZXMgPSAwOyArK3JldHJpZXM7ICkgeworICAgIGZvciAoaW50IHJldHJpZXMgPSAwOyByZXRyaWVzIDwga1RpbWVvdXRNYXhSZXRyaWVzOyArK3JldHJpZXMpIHsKICAgICAgICAgLy8gSWYgd2UgZmlsbCBhbGwgYXZhaWxhYmxlIGlucHV0IGJ1ZmZlcnMsIHdlIHNob3VsZCBleHBlY3QgdGhhdAogICAgICAgICAvLyB0aGUgY29kZWMgcHJvZHVjZXMgYXQgbGVhc3Qgb25lIG91dHB1dCBidWZmZXIuIEFsc28sIHRoZSBjb2RlYwogICAgICAgICAvLyBzaG91bGQgcHJvZHVjZSBhbiBvdXRwdXQgYnVmZmVyIGluIGF0IG1vc3QgMSBzZWNvbmRzLiBSZXRyeSBhCmRpZmYgLS1naXQgYS9tZWRpYS9saWJzdGFnZWZyaWdodC9TdGFnZWZyaWdodE1ldGFkYXRhUmV0cmlldmVyLmNwcCBiL21lZGlhL2xpYnN0YWdlZnJpZ2h0L1N0YWdlZnJpZ2h0TWV0YWRhdGFSZXRyaWV2ZXIuY3BwCmluZGV4IDg0YTY0MWYuLmYzNGQ1NGMgMTAwNjQ0Ci0tLSBhL21lZGlhL2xpYnN0YWdlZnJpZ2h0L1N0YWdlZnJpZ2h0TWV0YWRhdGFSZXRyaWV2ZXIuY3BwCisrKyBiL21lZGlhL2xpYnN0YWdlZnJpZ2h0L1N0YWdlZnJpZ2h0TWV0YWRhdGFSZXRyaWV2ZXIuY3BwCkBAIC0zMyw2ICszMyw3IEBACiAjaW5jbHVkZSA8bWVkaWEvc3RhZ2VmcmlnaHQvTWVkaWFDb2RlY0xpc3QuaD4KICNpbmNsdWRlIDxtZWRpYS9zdGFnZWZyaWdodC9NZWRpYURlZnMuaD4KICNpbmNsdWRlIDxtZWRpYS9zdGFnZWZyaWdodC9NZWRpYUVycm9ycy5oPgorI2luY2x1ZGUgPG1lZGlhL3N0YWdlZnJpZ2h0L01lZGlhRXh0cmFjdG9yLmg+CiAjaW5jbHVkZSA8bWVkaWEvc3RhZ2VmcmlnaHQvTWVkaWFFeHRyYWN0b3JGYWN0b3J5Lmg+CiAjaW5jbHVkZSA8bWVkaWEvc3RhZ2VmcmlnaHQvTWV0YURhdGEuaD4KICNpbmNsdWRlIDxtZWRpYS9zdGFnZWZyaWdodC9VdGlscy5oPgpAQCAtMjc1LDEyICsyNzYsNiBAQAogICAgICAgICByZXR1cm4gTk9fSU5JVDsKICAgICB9CiAKLSAgICBpbnQzMl90IGRybSA9IDA7Ci0gICAgaWYgKGZpbGVNZXRhLT5maW5kSW50MzIoa0tleUlzRFJNLCAmZHJtKSAmJiBkcm0gIT0gMCkgewotICAgICAgICBBTE9HRSgiZnJhbWUgZ3JhYiBub3QgYWxsb3dlZC4iKTsKLSAgICAgICAgcmV0dXJuIEVSUk9SX0RSTV9VTktOT1dOOwotICAgIH0KLQogICAgIHNpemVfdCBuID0gbUV4dHJhY3Rvci0+Y291bnRUcmFja3MoKTsKICAgICBzaXplX3QgaTsKICAgICBmb3IgKGkgPSAwOyBpIDwgbjsgKytpKSB7CkBAIC0zNDIsMTUgKzMzNywxNSBAQAogCiAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtYXRjaGluZ0NvZGVjcy5zaXplKCk7ICsraSkgewogICAgICAgICBjb25zdCBBU3RyaW5nICZjb21wb25lbnROYW1lID0gbWF0Y2hpbmdDb2RlY3NbaV07Ci0gICAgICAgIFZpZGVvRnJhbWVEZWNvZGVyIGRlY29kZXIoY29tcG9uZW50TmFtZSwgdHJhY2tNZXRhLCBzb3VyY2UpOwotICAgICAgICBpZiAoZGVjb2Rlci5pbml0KHRpbWVVcywgbnVtRnJhbWVzLCBvcHRpb24sIGNvbG9yRm9ybWF0KSA9PSBPSykgeworICAgICAgICBzcDxWaWRlb0ZyYW1lRGVjb2Rlcj4gZGVjb2RlciA9IG5ldyBWaWRlb0ZyYW1lRGVjb2Rlcihjb21wb25lbnROYW1lLCB0cmFja01ldGEsIHNvdXJjZSk7CisgICAgICAgIGlmIChkZWNvZGVyLT5pbml0KHRpbWVVcywgbnVtRnJhbWVzLCBvcHRpb24sIGNvbG9yRm9ybWF0KSA9PSBPSykgewogICAgICAgICAgICAgaWYgKG91dEZyYW1lICE9IE5VTEwpIHsKLSAgICAgICAgICAgICAgICAqb3V0RnJhbWUgPSBkZWNvZGVyLmV4dHJhY3RGcmFtZSgpOworICAgICAgICAgICAgICAgICpvdXRGcmFtZSA9IGRlY29kZXItPmV4dHJhY3RGcmFtZSgpOwogICAgICAgICAgICAgICAgIGlmICgqb3V0RnJhbWUgIT0gTlVMTCkgewogICAgICAgICAgICAgICAgICAgICByZXR1cm4gT0s7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfSBlbHNlIGlmIChvdXRGcmFtZXMgIT0gTlVMTCkgewotICAgICAgICAgICAgICAgIHN0YXR1c190IGVyciA9IGRlY29kZXIuZXh0cmFjdEZyYW1lcyhvdXRGcmFtZXMpOworICAgICAgICAgICAgICAgIHN0YXR1c190IGVyciA9IGRlY29kZXItPmV4dHJhY3RGcmFtZXMob3V0RnJhbWVzKTsKICAgICAgICAgICAgICAgICBpZiAoZXJyID09IE9LKSB7CiAgICAgICAgICAgICAgICAgICAgIHJldHVybiBPSzsKICAgICAgICAgICAgICAgICB9CmRpZmYgLS1naXQgYS9tZWRpYS9saWJzdGFnZWZyaWdodC9TdGFnZWZyaWdodFBsdWdpbkxvYWRlci5jcHAgYi9tZWRpYS9saWJzdGFnZWZyaWdodC9TdGFnZWZyaWdodFBsdWdpbkxvYWRlci5jcHAKaW5kZXggNTE5ZTg3MC4uZGQ1OTAzYSAxMDA2NDQKLS0tIGEvbWVkaWEvbGlic3RhZ2VmcmlnaHQvU3RhZ2VmcmlnaHRQbHVnaW5Mb2FkZXIuY3BwCisrKyBiL21lZGlhL2xpYnN0YWdlZnJpZ2h0L1N0YWdlZnJpZ2h0UGx1Z2luTG9hZGVyLmNwcApAQCAtNDYsNyArNDYsNyBAQAogICAgIH0KICAgICBtQ3JlYXRlSW5wdXRTdXJmYWNlID0gKENvZGVjQmFzZTo6Q3JlYXRlSW5wdXRTdXJmYWNlRnVuYylkbHN5bSgKICAgICAgICAgICAgIG1MaWJIYW5kbGUsICJDcmVhdGVJbnB1dFN1cmZhY2UiKTsKLSAgICBpZiAobUNyZWF0ZUJ1aWxkZXIgPT0gbnVsbHB0cikgeworICAgIGlmIChtQ3JlYXRlSW5wdXRTdXJmYWNlID09IG51bGxwdHIpIHsKICAgICAgICAgQUxPR0QoIkZhaWxlZCB0byBmaW5kIHN5bWJvbDogQ3JlYXRlSW5wdXRTdXJmYWNlICglcykiLCBkbGVycm9yKCkpOwogICAgIH0KIH0KZGlmZiAtLWdpdCBhL21lZGlhL2xpYnN0YWdlZnJpZ2h0L1RFU1RfTUFQUElORyBiL21lZGlhL2xpYnN0YWdlZnJpZ2h0L1RFU1RfTUFQUElORwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45NjgxOGViCi0tLSAvZGV2L251bGwKKysrIGIvbWVkaWEvbGlic3RhZ2VmcmlnaHQvVEVTVF9NQVBQSU5HCkBAIC0wLDAgKzEsMTIgQEAKK3sKKyAgInBvc3RzdWJtaXQiOiBbCisgICAgeworICAgICAgIm5hbWUiOiAiQ3RzTWVkaWFUZXN0Q2FzZXMiLAorICAgICAgIm9wdGlvbnMiOiBbCisgICAgICAgIHsKKyAgICAgICAgICAiaW5jbHVkZS1hbm5vdGF0aW9uIjogImFuZHJvaWQucGxhdGZvcm0udGVzdC5hbm5vdGF0aW9ucy5SZXF1aXJlc0RldmljZSIKKyAgICAgICAgfQorICAgICAgXQorICAgIH0KKyAgXQorfQpkaWZmIC0tZ2l0IGEvbWVkaWEvbGlic3RhZ2VmcmlnaHQvVXRpbHMuY3BwIGIvbWVkaWEvbGlic3RhZ2VmcmlnaHQvVXRpbHMuY3BwCmluZGV4IGM3NTc5YmMuLjUzYzMyYjIgMTAwNjQ0Ci0tLSBhL21lZGlhL2xpYnN0YWdlZnJpZ2h0L1V0aWxzLmNwcAorKysgYi9tZWRpYS9saWJzdGFnZWZyaWdodC9VdGlscy5jcHAKQEAgLTc0LDcgKzc0LDcgQEAKIH0KICNlbmRpZgogCi1zdGF0aWMgdm9pZCBjb252ZXJ0TWV0YURhdGFUb01lc3NhZ2VDb2xvckFzcGVjdHMoY29uc3Qgc3A8TWV0YURhdGE+ICZtZXRhLCBzcDxBTWVzc2FnZT4gJm1zZykgeworc3RhdGljIHZvaWQgY29udmVydE1ldGFEYXRhVG9NZXNzYWdlQ29sb3JBc3BlY3RzKGNvbnN0IE1ldGFEYXRhQmFzZSAqbWV0YSwgc3A8QU1lc3NhZ2U+ICZtc2cpIHsKICAgICAvLyAwIHZhbHVlcyBhcmUgdW5zcGVjaWZpZWQKICAgICBpbnQzMl90IHJhbmdlID0gMDsKICAgICBpbnQzMl90IHByaW1hcmllcyA9IDA7CkBAIC01NjgsOCArNTY4LDEzMyBAQAogICAgIH0KIH0KIAorCitzdGF0aWMgc3RkOjp2ZWN0b3I8c3RkOjpwYWlyPGNvbnN0IGNoYXIgKiwgdWludDMyX3Q+PiBzdHJpbmdNYXBwaW5ncyB7CisgICAgeworICAgICAgICB7ICJhbGJ1bSIsIGtLZXlBbGJ1bSB9LAorICAgICAgICB7ICJhbGJ1bWFydGlzdCIsIGtLZXlBbGJ1bUFydGlzdCB9LAorICAgICAgICB7ICJhcnRpc3QiLCBrS2V5QXJ0aXN0IH0sCisgICAgICAgIHsgImF1dGhvciIsIGtLZXlBdXRob3IgfSwKKyAgICAgICAgeyAiY2R0cmFja251bSIsIGtLZXlDRFRyYWNrTnVtYmVyIH0sCisgICAgICAgIHsgImNvbXBpbGF0aW9uIiwga0tleUNvbXBpbGF0aW9uIH0sCisgICAgICAgIHsgImNvbXBvc2VyIiwga0tleUNvbXBvc2VyIH0sCisgICAgICAgIHsgImRhdGUiLCBrS2V5RGF0ZSB9LAorICAgICAgICB7ICJkaXNjbnVtIiwga0tleURpc2NOdW1iZXIgfSwKKyAgICAgICAgeyAiZ2VucmUiLCBrS2V5R2VucmUgfSwKKyAgICAgICAgeyAibG9jYXRpb24iLCBrS2V5TG9jYXRpb24gfSwKKyAgICAgICAgeyAibHlyaWNpc3QiLCBrS2V5V3JpdGVyIH0sCisgICAgICAgIHsgInRpdGxlIiwga0tleVRpdGxlIH0sCisgICAgICAgIHsgInllYXIiLCBrS2V5WWVhciB9LAorICAgIH0KK307CisKK3N0YXRpYyBzdGQ6OnZlY3RvcjxzdGQ6OnBhaXI8Y29uc3QgY2hhciAqLCB1aW50MzJfdD4+IGludDY0TWFwcGluZ3MgeworICAgIHsKKyAgICAgICAgeyAiZXhpZi1vZmZzZXQiLCBrS2V5RXhpZk9mZnNldCB9LAorICAgICAgICB7ICJleGlmLXNpemUiLCBrS2V5RXhpZlNpemUgfSwKKyAgICB9Cit9OworCitzdGF0aWMgc3RkOjp2ZWN0b3I8c3RkOjpwYWlyPGNvbnN0IGNoYXIgKiwgdWludDMyX3Q+PiBpbnQzMk1hcHBpbmdzIHsKKyAgICB7CisgICAgICAgIHsgImxvb3AiLCBrS2V5QXV0b0xvb3AgfSwKKyAgICAgICAgeyAidGltZS1zY2FsZSIsIGtLZXlUaW1lU2NhbGUgfSwKKyAgICAgICAgeyAiY3J5cHRvLW1vZGUiLCBrS2V5Q3J5cHRvTW9kZSB9LAorICAgICAgICB7ICJjcnlwdG8tZGVmYXVsdC1pdi1zaXplIiwga0tleUNyeXB0b0RlZmF1bHRJVlNpemUgfSwKKyAgICAgICAgeyAiY3J5cHRvLWVuY3J5cHRlZC1ieXRlLWJsb2NrIiwga0tleUVuY3J5cHRlZEJ5dGVCbG9jayB9LAorICAgICAgICB7ICJjcnlwdG8tc2tpcC1ieXRlLWJsb2NrIiwga0tleVNraXBCeXRlQmxvY2sgfSwKKyAgICAgICAgeyAibWF4LWJpdHJhdGUiLCBrS2V5TWF4Qml0UmF0ZSB9LAorICAgICAgICB7ICJwY20tYmlnLWVuZGlhbiIsIGtLZXlQY21CaWdFbmRpYW4gfSwKKyAgICAgICAgeyAidGVtcG9yYWwtbGF5ZXItY291bnQiLCBrS2V5VGVtcG9yYWxMYXllckNvdW50IH0sCisgICAgICAgIHsgInRodW1ibmFpbC13aWR0aCIsIGtLZXlUaHVtYm5haWxXaWR0aCB9LAorICAgICAgICB7ICJ0aHVtYm5haWwtaGVpZ2h0Iiwga0tleVRodW1ibmFpbEhlaWdodCB9LAorICAgICAgICB7ICJmcmFtZS1jb3VudCIsIGtLZXlGcmFtZUNvdW50IH0sCisgICAgfQorfTsKKworc3RhdGljIHN0ZDo6dmVjdG9yPHN0ZDo6cGFpcjxjb25zdCBjaGFyICosIHVpbnQzMl90Pj4gYnVmZmVyTWFwcGluZ3MgeworICAgIHsKKyAgICAgICAgeyAiYWxidW1hcnQiLCBrS2V5QWxidW1BcnQgfSwKKyAgICAgICAgeyAiYXVkaW8tcHJlc2VudGF0aW9uLWluZm8iLCBrS2V5QXVkaW9QcmVzZW50YXRpb25JbmZvIH0sCisgICAgICAgIHsgInBzc2giLCBrS2V5UHNzaCB9LAorICAgICAgICB7ICJjcnlwdG8taXYiLCBrS2V5Q3J5cHRvSVYgfSwKKyAgICAgICAgeyAiY3J5cHRvLWtleSIsIGtLZXlDcnlwdG9LZXkgfSwKKyAgICAgICAgeyAiaWNjLXByb2ZpbGUiLCBrS2V5SWNjUHJvZmlsZSB9LAorICAgICAgICB7ICJ0ZXh0LWZvcm1hdC1kYXRhIiwga0tleVRleHRGb3JtYXREYXRhIH0sCisgICAgfQorfTsKKwordm9pZCBjb252ZXJ0TWVzc2FnZVRvTWV0YURhdGFGcm9tTWFwcGluZ3MoY29uc3Qgc3A8QU1lc3NhZ2U+ICZtc2csIHNwPE1ldGFEYXRhPiAmbWV0YSkgeworICAgIGZvciAoYXV0byBlbGVtIDogc3RyaW5nTWFwcGluZ3MpIHsKKyAgICAgICAgQVN0cmluZyB2YWx1ZTsKKyAgICAgICAgaWYgKG1zZy0+ZmluZFN0cmluZyhlbGVtLmZpcnN0LCAmdmFsdWUpKSB7CisgICAgICAgICAgICBtZXRhLT5zZXRDU3RyaW5nKGVsZW0uc2Vjb25kLCB2YWx1ZS5jX3N0cigpKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIGZvciAoYXV0byBlbGVtIDogaW50NjRNYXBwaW5ncykgeworICAgICAgICBpbnQ2NF90IHZhbHVlOworICAgICAgICBpZiAobXNnLT5maW5kSW50NjQoZWxlbS5maXJzdCwgJnZhbHVlKSkgeworICAgICAgICAgICAgbWV0YS0+c2V0SW50NjQoZWxlbS5zZWNvbmQsIHZhbHVlKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIGZvciAoYXV0byBlbGVtIDogaW50MzJNYXBwaW5ncykgeworICAgICAgICBpbnQzMl90IHZhbHVlOworICAgICAgICBpZiAobXNnLT5maW5kSW50MzIoZWxlbS5maXJzdCwgJnZhbHVlKSkgeworICAgICAgICAgICAgbWV0YS0+c2V0SW50MzIoZWxlbS5zZWNvbmQsIHZhbHVlKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIGZvciAoYXV0byBlbGVtIDogYnVmZmVyTWFwcGluZ3MpIHsKKyAgICAgICAgc3A8QUJ1ZmZlcj4gdmFsdWU7CisgICAgICAgIGlmIChtc2ctPmZpbmRCdWZmZXIoZWxlbS5maXJzdCwgJnZhbHVlKSkgeworICAgICAgICAgICAgbWV0YS0+c2V0RGF0YShlbGVtLnNlY29uZCwKKyAgICAgICAgICAgICAgICAgICAgTWV0YURhdGFCYXNlOjpUeXBlOjpUWVBFX05PTkUsIHZhbHVlLT5kYXRhKCksIHZhbHVlLT5zaXplKCkpOworICAgICAgICB9CisgICAgfQorfQorCit2b2lkIGNvbnZlcnRNZXRhRGF0YVRvTWVzc2FnZUZyb21NYXBwaW5ncyhjb25zdCBNZXRhRGF0YUJhc2UgKm1ldGEsIHNwPEFNZXNzYWdlPiBmb3JtYXQpIHsKKyAgICBmb3IgKGF1dG8gZWxlbSA6IHN0cmluZ01hcHBpbmdzKSB7CisgICAgICAgIGNvbnN0IGNoYXIgKnZhbHVlOworICAgICAgICBpZiAobWV0YS0+ZmluZENTdHJpbmcoZWxlbS5zZWNvbmQsICZ2YWx1ZSkpIHsKKyAgICAgICAgICAgIGZvcm1hdC0+c2V0U3RyaW5nKGVsZW0uZmlyc3QsIHZhbHVlLCBzdHJsZW4odmFsdWUpKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIGZvciAoYXV0byBlbGVtIDogaW50NjRNYXBwaW5ncykgeworICAgICAgICBpbnQ2NF90IHZhbHVlOworICAgICAgICBpZiAobWV0YS0+ZmluZEludDY0KGVsZW0uc2Vjb25kLCAmdmFsdWUpKSB7CisgICAgICAgICAgICBmb3JtYXQtPnNldEludDY0KGVsZW0uZmlyc3QsIHZhbHVlKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIGZvciAoYXV0byBlbGVtIDogaW50MzJNYXBwaW5ncykgeworICAgICAgICBpbnQzMl90IHZhbHVlOworICAgICAgICBpZiAobWV0YS0+ZmluZEludDMyKGVsZW0uc2Vjb25kLCAmdmFsdWUpKSB7CisgICAgICAgICAgICBmb3JtYXQtPnNldEludDMyKGVsZW0uZmlyc3QsIHZhbHVlKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIGZvciAoYXV0byBlbGVtIDogYnVmZmVyTWFwcGluZ3MpIHsKKyAgICAgICAgdWludDMyX3QgdHlwZTsKKyAgICAgICAgY29uc3Qgdm9pZCogZGF0YTsKKyAgICAgICAgc2l6ZV90IHNpemU7CisgICAgICAgIGlmIChtZXRhLT5maW5kRGF0YShlbGVtLnNlY29uZCwgJnR5cGUsICZkYXRhLCAmc2l6ZSkpIHsKKyAgICAgICAgICAgIHNwPEFCdWZmZXI+IGJ1ZiA9IEFCdWZmZXI6OkNyZWF0ZUFzQ29weShkYXRhLCBzaXplKTsKKyAgICAgICAgICAgIGZvcm1hdC0+c2V0QnVmZmVyKGVsZW0uZmlyc3QsIGJ1Zik7CisgICAgICAgIH0KKyAgICB9Cit9CisKIHN0YXR1c190IGNvbnZlcnRNZXRhRGF0YVRvTWVzc2FnZSgKICAgICAgICAgY29uc3Qgc3A8TWV0YURhdGE+ICZtZXRhLCBzcDxBTWVzc2FnZT4gKmZvcm1hdCkgeworICAgIHJldHVybiBjb252ZXJ0TWV0YURhdGFUb01lc3NhZ2UobWV0YS5nZXQoKSwgZm9ybWF0KTsKK30KKworc3RhdHVzX3QgY29udmVydE1ldGFEYXRhVG9NZXNzYWdlKAorICAgICAgICBjb25zdCBNZXRhRGF0YUJhc2UgKm1ldGEsIHNwPEFNZXNzYWdlPiAqZm9ybWF0KSB7CiAKICAgICBmb3JtYXQtPmNsZWFyKCk7CiAKQEAgLTU4Niw2ICs3MTEsOCBAQAogICAgIHNwPEFNZXNzYWdlPiBtc2cgPSBuZXcgQU1lc3NhZ2U7CiAgICAgbXNnLT5zZXRTdHJpbmcoIm1pbWUiLCBtaW1lKTsKIAorICAgIGNvbnZlcnRNZXRhRGF0YVRvTWVzc2FnZUZyb21NYXBwaW5ncyhtZXRhLCBtc2cpOworCiAgICAgdWludDMyX3QgdHlwZTsKICAgICBjb25zdCB2b2lkICpkYXRhOwogICAgIHNpemVfdCBzaXplOwpAQCAtNTk5LDYgKzcyNiwxNiBAQAogICAgICAgICBtZW1jcHkoYnVmZmVyLT5kYXRhKCksIGRhdGEsIHNpemUpOwogICAgIH0KIAorICAgIGlmIChtZXRhLT5maW5kRGF0YShrS2V5Q0FQcml2YXRlRGF0YSwgJnR5cGUsICZkYXRhLCAmc2l6ZSkpIHsKKyAgICAgICAgc3A8QUJ1ZmZlcj4gYnVmZmVyID0gbmV3IChzdGQ6Om5vdGhyb3cpIEFCdWZmZXIoc2l6ZSk7CisgICAgICAgIGlmIChidWZmZXIuZ2V0KCkgPT0gTlVMTCB8fCBidWZmZXItPmJhc2UoKSA9PSBOVUxMKSB7CisgICAgICAgICAgICByZXR1cm4gTk9fTUVNT1JZOworICAgICAgICB9CisKKyAgICAgICAgbXNnLT5zZXRCdWZmZXIoImNhLXByaXZhdGUtZGF0YSIsIGJ1ZmZlcik7CisgICAgICAgIG1lbWNweShidWZmZXItPmRhdGEoKSwgZGF0YSwgc2l6ZSk7CisgICAgfQorCiAgICAgaW50MzJfdCBzeXN0ZW1JZDsKICAgICBpZiAobWV0YS0+ZmluZEludDMyKGtLZXlDQVN5c3RlbUlELCAmc3lzdGVtSWQpKSB7CiAgICAgICAgIG1zZy0+c2V0SW50MzIoImNhLXN5c3RlbS1pZCIsIHN5c3RlbUlkKTsKQEAgLTcyMyw2ICs4NjAsMTEgQEAKICAgICAgICAgbXNnLT5zZXRJbnQzMigiY2hhbm5lbC1jb3VudCIsIG51bUNoYW5uZWxzKTsKICAgICAgICAgbXNnLT5zZXRJbnQzMigic2FtcGxlLXJhdGUiLCBzYW1wbGVSYXRlKTsKIAorICAgICAgICBpbnQzMl90IGJpdHNQZXJTYW1wbGU7CisgICAgICAgIGlmIChtZXRhLT5maW5kSW50MzIoa0tleUJpdHNQZXJTYW1wbGUsICZiaXRzUGVyU2FtcGxlKSkgeworICAgICAgICAgICAgbXNnLT5zZXRJbnQzMigiYml0cy1wZXItc2FtcGxlIiwgYml0c1BlclNhbXBsZSk7CisgICAgICAgIH0KKwogICAgICAgICBpbnQzMl90IGNoYW5uZWxNYXNrOwogICAgICAgICBpZiAobWV0YS0+ZmluZEludDMyKGtLZXlDaGFubmVsTWFzaywgJmNoYW5uZWxNYXNrKSkgewogICAgICAgICAgICAgbXNnLT5zZXRJbnQzMigiY2hhbm5lbC1tYXNrIiwgY2hhbm5lbE1hc2spOwpAQCAtMTA0OCw3ICsxMTkwLDcgQEAKICAgICAgICAgICAgICAgICBtc2ctPnNldEludDMyKCJtYXgtYml0cmF0ZSIsIChpbnQzMl90KW1heEJpdHJhdGUpOwogICAgICAgICAgICAgfQogICAgICAgICB9Ci0gICAgfSBlbHNlIGlmIChtZXRhLT5maW5kRGF0YShrVHlwZUQyNjMsICZ0eXBlLCAmZGF0YSwgJnNpemUpKSB7CisgICAgfSBlbHNlIGlmIChtZXRhLT5maW5kRGF0YShrS2V5RDI2MywgJnR5cGUsICZkYXRhLCAmc2l6ZSkpIHsKICAgICAgICAgY29uc3QgdWludDhfdCAqcHRyID0gKGNvbnN0IHVpbnQ4X3QgKilkYXRhOwogICAgICAgICBwYXJzZUgyNjNQcm9maWxlTGV2ZWxGcm9tRDI2MyhwdHIsIHNpemUsIG1zZyk7CiAgICAgfSBlbHNlIGlmIChtZXRhLT5maW5kRGF0YShrS2V5Vm9yYmlzSW5mbywgJnR5cGUsICZkYXRhLCAmc2l6ZSkpIHsKQEAgLTExNDgsMTMgKzEyOTAsNiBAQAogICAgICAgICBtc2ctPnNldEJ1ZmZlcigiY3NkLTAiLCBidWZmZXIpOwogICAgIH0KIAotICAgIC8vIFRPRE8gZXhwb3NlICJjcnlwdG8ta2V5Ii9rS2V5Q3J5cHRvS2V5IHRocm91Z2ggcHVibGljIGFwaQotICAgIGlmIChtZXRhLT5maW5kRGF0YShrS2V5Q3J5cHRvS2V5LCAmdHlwZSwgJmRhdGEsICZzaXplKSkgewotICAgICAgICBzcDxBQnVmZmVyPiBidWZmZXIgPSBuZXcgKHN0ZDo6bm90aHJvdykgQUJ1ZmZlcihzaXplKTsKLSAgICAgICAgbXNnLT5zZXRCdWZmZXIoImNyeXB0by1rZXkiLCBidWZmZXIpOwotICAgICAgICBtZW1jcHkoYnVmZmVyLT5kYXRhKCksIGRhdGEsIHNpemUpOwotICAgIH0KLQogICAgICpmb3JtYXQgPSBtc2c7CiAKICAgICByZXR1cm4gT0s7CkBAIC0xMzUzLDYgKzE0ODgsMjEgQEAKICAgICAgICAgQUxPR1coImRpZCBub3QgZmluZCBtaW1lIHR5cGUiKTsKICAgICB9CiAKKyAgICBjb252ZXJ0TWVzc2FnZVRvTWV0YURhdGFGcm9tTWFwcGluZ3MobXNnLCBtZXRhKTsKKworICAgIGludDMyX3Qgc3lzdGVtSWQ7CisgICAgaWYgKG1zZy0+ZmluZEludDMyKCJjYS1zeXN0ZW0taWQiLCAmc3lzdGVtSWQpKSB7CisgICAgICAgIG1ldGEtPnNldEludDMyKGtLZXlDQVN5c3RlbUlELCBzeXN0ZW1JZCk7CisKKyAgICAgICAgc3A8QUJ1ZmZlcj4gY2FTZXNzaW9uSWQsIGNhUHZ0RGF0YTsKKyAgICAgICAgaWYgKG1zZy0+ZmluZEJ1ZmZlcigiY2Etc2Vzc2lvbi1pZCIsICZjYVNlc3Npb25JZCkpIHsKKyAgICAgICAgICAgIG1ldGEtPnNldERhdGEoa0tleUNBU2Vzc2lvbklELCAwLCBjYVNlc3Npb25JZC0+ZGF0YSgpLCBjYVNlc3Npb25JZC0+c2l6ZSgpKTsKKyAgICAgICAgfQorICAgICAgICBpZiAobXNnLT5maW5kQnVmZmVyKCJjYS1wcml2YXRlLWRhdGEiLCAmY2FQdnREYXRhKSkgeworICAgICAgICAgICAgbWV0YS0+c2V0RGF0YShrS2V5Q0FQcml2YXRlRGF0YSwgMCwgY2FQdnREYXRhLT5kYXRhKCksIGNhUHZ0RGF0YS0+c2l6ZSgpKTsKKyAgICAgICAgfQorICAgIH0KKwogICAgIGludDY0X3QgZHVyYXRpb25VczsKICAgICBpZiAobXNnLT5maW5kSW50NjQoImR1cmF0aW9uVXMiLCAmZHVyYXRpb25VcykpIHsKICAgICAgICAgbWV0YS0+c2V0SW50NjQoa0tleUR1cmF0aW9uLCBkdXJhdGlvblVzKTsKQEAgLTEzODQsNyArMTUzNCw3IEBACiAgICAgICAgICAgICBtZXRhLT5zZXRJbnQzMihrS2V5V2lkdGgsIHdpZHRoKTsKICAgICAgICAgICAgIG1ldGEtPnNldEludDMyKGtLZXlIZWlnaHQsIGhlaWdodCk7CiAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBBTE9HVygiZGlkIG5vdCBmaW5kIHdpZHRoIGFuZC9vciBoZWlnaHQiKTsKKyAgICAgICAgICAgIEFMT0dWKCJkaWQgbm90IGZpbmQgd2lkdGggYW5kL29yIGhlaWdodCIpOwogICAgICAgICB9CiAKICAgICAgICAgaW50MzJfdCBzYXJXaWR0aCwgc2FySGVpZ2h0OwpAQCAtMTQ3MSw2ICsxNjIxLDEwIEBACiAgICAgICAgIGlmIChtc2ctPmZpbmRJbnQzMigic2FtcGxlLXJhdGUiLCAmc2FtcGxlUmF0ZSkpIHsKICAgICAgICAgICAgIG1ldGEtPnNldEludDMyKGtLZXlTYW1wbGVSYXRlLCBzYW1wbGVSYXRlKTsKICAgICAgICAgfQorICAgICAgICBpbnQzMl90IGJpdHNQZXJTYW1wbGU7CisgICAgICAgIGlmIChtc2ctPmZpbmRJbnQzMigiYml0cy1wZXItc2FtcGxlIiwgJmJpdHNQZXJTYW1wbGUpKSB7CisgICAgICAgICAgICBtZXRhLT5zZXRJbnQzMihrS2V5Qml0c1BlclNhbXBsZSwgYml0c1BlclNhbXBsZSk7CisgICAgICAgIH0KICAgICAgICAgaW50MzJfdCBjaGFubmVsTWFzazsKICAgICAgICAgaWYgKG1zZy0+ZmluZEludDMyKCJjaGFubmVsLW1hc2siLCAmY2hhbm5lbE1hc2spKSB7CiAgICAgICAgICAgICBtZXRhLT5zZXRJbnQzMihrS2V5Q2hhbm5lbE1hc2ssIGNoYW5uZWxNYXNrKTsKQEAgLTE1MjksMTkgKzE2ODMsMTkgQEAKICAgICAgICAgICAgIGlmIChtc2ctPmZpbmRCdWZmZXIoImNzZC0xIiwgJmNzZDEpKSB7CiAgICAgICAgICAgICAgICAgc3RkOjp2ZWN0b3I8Y2hhcj4gYXZjYyhjc2Qwc2l6ZSArIGNzZDEtPnNpemUoKSArIDEwMjQpOwogICAgICAgICAgICAgICAgIHNpemVfdCBvdXRzaXplID0gcmVhc3NlbWJsZUFWQ0MoY3NkMCwgY3NkMSwgYXZjYy5kYXRhKCkpOwotICAgICAgICAgICAgICAgIG1ldGEtPnNldERhdGEoa0tleUFWQ0MsIGtLZXlBVkNDLCBhdmNjLmRhdGEoKSwgb3V0c2l6ZSk7CisgICAgICAgICAgICAgICAgbWV0YS0+c2V0RGF0YShrS2V5QVZDQywga1R5cGVBVkNDLCBhdmNjLmRhdGEoKSwgb3V0c2l6ZSk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0gZWxzZSBpZiAobWltZSA9PSBNRURJQV9NSU1FVFlQRV9BVURJT19BQUMgfHwgbWltZSA9PSBNRURJQV9NSU1FVFlQRV9WSURFT19NUEVHNCkgewogICAgICAgICAgICAgc3RkOjp2ZWN0b3I8Y2hhcj4gZXNkcyhjc2Qwc2l6ZSArIDMxKTsKICAgICAgICAgICAgIC8vIFRoZSB3cml0dGVuIEVTRFMgaXMgYWN0dWFsbHkgZm9yIGFuIGF1ZGlvIHN0cmVhbSwgYnV0IGl0J3MgZW5vdWdoCiAgICAgICAgICAgICAvLyBmb3IgdHJhbnNwb3J0aW5nIHRoZSBDU0QgdG8gbXV4ZXJzLgogICAgICAgICAgICAgcmVhc3NlbWJsZUVTRFMoY3NkMCwgZXNkcy5kYXRhKCkpOwotICAgICAgICAgICAgbWV0YS0+c2V0RGF0YShrS2V5RVNEUywga0tleUVTRFMsIGVzZHMuZGF0YSgpLCBlc2RzLnNpemUoKSk7CisgICAgICAgICAgICBtZXRhLT5zZXREYXRhKGtLZXlFU0RTLCBrVHlwZUVTRFMsIGVzZHMuZGF0YSgpLCBlc2RzLnNpemUoKSk7CiAgICAgICAgIH0gZWxzZSBpZiAobWltZSA9PSBNRURJQV9NSU1FVFlQRV9WSURFT19IRVZDIHx8CiAgICAgICAgICAgICAgICAgICAgbWltZSA9PSBNRURJQV9NSU1FVFlQRV9JTUFHRV9BTkRST0lEX0hFSUMpIHsKICAgICAgICAgICAgIHN0ZDo6dmVjdG9yPHVpbnQ4X3Q+IGh2Y2MoY3NkMHNpemUgKyAxMDI0KTsKICAgICAgICAgICAgIHNpemVfdCBvdXRzaXplID0gcmVhc3NlbWJsZUhWQ0MoY3NkMCwgaHZjYy5kYXRhKCksIGh2Y2Muc2l6ZSgpLCA0KTsKLSAgICAgICAgICAgIG1ldGEtPnNldERhdGEoa0tleUhWQ0MsIGtLZXlIVkNDLCBodmNjLmRhdGEoKSwgb3V0c2l6ZSk7CisgICAgICAgICAgICBtZXRhLT5zZXREYXRhKGtLZXlIVkNDLCBrVHlwZUhWQ0MsIGh2Y2MuZGF0YSgpLCBvdXRzaXplKTsKICAgICAgICAgfSBlbHNlIGlmIChtaW1lID09IE1FRElBX01JTUVUWVBFX1ZJREVPX1ZQOSkgewogICAgICAgICAgICAgbWV0YS0+c2V0RGF0YShrS2V5VnA5Q29kZWNQcml2YXRlLCAwLCBjc2QwLT5kYXRhKCksIGNzZDAtPnNpemUoKSk7CiAgICAgICAgIH0gZWxzZSBpZiAobWltZSA9PSBNRURJQV9NSU1FVFlQRV9BVURJT19PUFVTKSB7CkBAIC0xNTYwLDExICsxNzE0LDE3IEBACiAgICAgICAgIH0gZWxzZSBpZiAobWltZSA9PSBNRURJQV9NSU1FVFlQRV9BVURJT19BTEFDKSB7CiAgICAgICAgICAgICBtZXRhLT5zZXREYXRhKGtLZXlBbGFjTWFnaWNDb29raWUsIDAsIGNzZDAtPmRhdGEoKSwgY3NkMC0+c2l6ZSgpKTsKICAgICAgICAgfQotICAgIH0KLQotICAgIGludDMyX3QgdGltZVNjYWxlOwotICAgIGlmIChtc2ctPmZpbmRJbnQzMigidGltZS1zY2FsZSIsICZ0aW1lU2NhbGUpKSB7Ci0gICAgICAgIG1ldGEtPnNldEludDMyKGtLZXlUaW1lU2NhbGUsIHRpbWVTY2FsZSk7CisgICAgfSBlbHNlIGlmIChtaW1lID09IE1FRElBX01JTUVUWVBFX1ZJREVPX0FWQyAmJiBtc2ctPmZpbmRCdWZmZXIoImNzZC1hdmMiLCAmY3NkMCkpIHsKKyAgICAgICAgbWV0YS0+c2V0RGF0YShrS2V5QVZDQywga1R5cGVBVkNDLCBjc2QwLT5kYXRhKCksIGNzZDAtPnNpemUoKSk7CisgICAgfSBlbHNlIGlmICgobWltZSA9PSBNRURJQV9NSU1FVFlQRV9WSURFT19IRVZDIHx8IG1pbWUgPT0gTUVESUFfTUlNRVRZUEVfSU1BR0VfQU5EUk9JRF9IRUlDKQorICAgICAgICAgICAgJiYgbXNnLT5maW5kQnVmZmVyKCJjc2QtaGV2YyIsICZjc2QwKSkgeworICAgICAgICBtZXRhLT5zZXREYXRhKGtLZXlIVkNDLCBrVHlwZUhWQ0MsIGNzZDAtPmRhdGEoKSwgY3NkMC0+c2l6ZSgpKTsKKyAgICB9IGVsc2UgaWYgKG1zZy0+ZmluZEJ1ZmZlcigiZXNkcyIsICZjc2QwKSkgeworICAgICAgICBtZXRhLT5zZXREYXRhKGtLZXlFU0RTLCBrVHlwZUVTRFMsIGNzZDAtPmRhdGEoKSwgY3NkMC0+c2l6ZSgpKTsKKyAgICB9IGVsc2UgaWYgKG1zZy0+ZmluZEJ1ZmZlcigibXBlZzItc3RyZWFtLWhlYWRlciIsICZjc2QwKSkgeworICAgICAgICBtZXRhLT5zZXREYXRhKGtLZXlTdHJlYW1IZWFkZXIsICdtZGF0JywgY3NkMC0+ZGF0YSgpLCBjc2QwLT5zaXplKCkpOworICAgIH0gZWxzZSBpZiAobXNnLT5maW5kQnVmZmVyKCJkMjYzIiwgJmNzZDApKSB7CisgICAgICAgIG1ldGEtPnNldERhdGEoa0tleUQyNjMsIGtUeXBlRDI2MywgY3NkMC0+ZGF0YSgpLCBjc2QwLT5zaXplKCkpOwogICAgIH0KIAogICAgIC8vIFhYWCBUT0RPIGFkZCB3aGF0ZXZlciBvdGhlciBrZXlzIHRoZXJlIGFyZQpAQCAtMTY0MCw2ICsxODAwLDggQEAKICAgICB7IE1FRElBX01JTUVUWVBFX0FVRElPX1ZPUkJJUywgICAgICBBVURJT19GT1JNQVRfVk9SQklTIH0sCiAgICAgeyBNRURJQV9NSU1FVFlQRV9BVURJT19PUFVTLCAgICAgICAgQVVESU9fRk9STUFUX09QVVN9LAogICAgIHsgTUVESUFfTUlNRVRZUEVfQVVESU9fQUMzLCAgICAgICAgIEFVRElPX0ZPUk1BVF9BQzN9LAorICAgIHsgTUVESUFfTUlNRVRZUEVfQVVESU9fRUFDMywgICAgICAgIEFVRElPX0ZPUk1BVF9FX0FDM30sCisgICAgeyBNRURJQV9NSU1FVFlQRV9BVURJT19BQzQsICAgICAgICAgQVVESU9fRk9STUFUX0FDNH0sCiAgICAgeyBNRURJQV9NSU1FVFlQRV9BVURJT19GTEFDLCAgICAgICAgQVVESU9fRk9STUFUX0ZMQUN9LAogICAgIHsgTUVESUFfTUlNRVRZUEVfQVVESU9fQUxBQywgICAgICAgIEFVRElPX0ZPUk1BVF9BTEFDIH0sCiAgICAgeyAwLCBBVURJT19GT1JNQVRfSU5WQUxJRCB9CkBAIC0xNjkzLDQzICsxODU1LDQzIEBACiAgICAgcmV0dXJuOwogfQogCi1ib29sIGNhbk9mZmxvYWRTdHJlYW0oY29uc3Qgc3A8TWV0YURhdGE+JiBtZXRhLCBib29sIGhhc1ZpZGVvLAotICAgICAgICAgICAgICAgICAgICAgIGJvb2wgaXNTdHJlYW1pbmcsIGF1ZGlvX3N0cmVhbV90eXBlX3Qgc3RyZWFtVHlwZSkKK3N0YXR1c190IGdldEF1ZGlvT2ZmbG9hZEluZm8oY29uc3Qgc3A8TWV0YURhdGE+JiBtZXRhLCBib29sIGhhc1ZpZGVvLAorICAgICAgICBib29sIGlzU3RyZWFtaW5nLCBhdWRpb19zdHJlYW1fdHlwZV90IHN0cmVhbVR5cGUsIGF1ZGlvX29mZmxvYWRfaW5mb190ICppbmZvKQogewogICAgIGNvbnN0IGNoYXIgKm1pbWU7CiAgICAgaWYgKG1ldGEgPT0gTlVMTCkgewotICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIHJldHVybiBCQURfVkFMVUU7CiAgICAgfQogICAgIENIRUNLKG1ldGEtPmZpbmRDU3RyaW5nKGtLZXlNSU1FVHlwZSwgJm1pbWUpKTsKIAotICAgIGF1ZGlvX29mZmxvYWRfaW5mb190IGluZm8gPSBBVURJT19JTkZPX0lOSVRJQUxJWkVSOworICAgICgqaW5mbykgPSBBVURJT19JTkZPX0lOSVRJQUxJWkVSOwogCi0gICAgaW5mby5mb3JtYXQgPSBBVURJT19GT1JNQVRfSU5WQUxJRDsKLSAgICBpZiAobWFwTWltZVRvQXVkaW9Gb3JtYXQoaW5mby5mb3JtYXQsIG1pbWUpICE9IE9LKSB7CisgICAgaW5mby0+Zm9ybWF0ID0gQVVESU9fRk9STUFUX0lOVkFMSUQ7CisgICAgaWYgKG1hcE1pbWVUb0F1ZGlvRm9ybWF0KGluZm8tPmZvcm1hdCwgbWltZSkgIT0gT0spIHsKICAgICAgICAgQUxPR0UoIiBDb3VsZG4ndCBtYXAgbWltZSB0eXBlIFwiJXNcIiB0byBhIHZhbGlkIEF1ZGlvU3lzdGVtOjphdWRpb19mb3JtYXQgISIsIG1pbWUpOwotICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIHJldHVybiBCQURfVkFMVUU7CiAgICAgfSBlbHNlIHsKLSAgICAgICAgQUxPR1YoIk1pbWUgdHlwZSBcIiVzXCIgbWFwcGVkIHRvIGF1ZGlvX2Zvcm1hdCAlZCIsIG1pbWUsIGluZm8uZm9ybWF0KTsKKyAgICAgICAgQUxPR1YoIk1pbWUgdHlwZSBcIiVzXCIgbWFwcGVkIHRvIGF1ZGlvX2Zvcm1hdCAlZCIsIG1pbWUsIGluZm8tPmZvcm1hdCk7CiAgICAgfQogCi0gICAgaWYgKEFVRElPX0ZPUk1BVF9JTlZBTElEID09IGluZm8uZm9ybWF0KSB7CisgICAgaWYgKEFVRElPX0ZPUk1BVF9JTlZBTElEID09IGluZm8tPmZvcm1hdCkgewogICAgICAgICAvLyBjYW4ndCBvZmZsb2FkIGlmIHdlIGRvbid0IGtub3cgd2hhdCB0aGUgc291cmNlIGZvcm1hdCBpcwogICAgICAgICBBTE9HRSgibWltZSB0eXBlIFwiJXNcIiBub3QgYSBrbm93biBhdWRpbyBmb3JtYXQiLCBtaW1lKTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICByZXR1cm4gQkFEX1ZBTFVFOwogICAgIH0KIAogICAgIC8vIFJlZGVmaW5lIGFhYyBmb3JtYXQgYWNjb3JkaW5nIHRvIGl0cyBwcm9maWxlCiAgICAgLy8gT2ZmbG9hZGluZyBkZXBlbmRzIG9uIGF1ZGlvIERTUCBjYXBhYmlsaXRpZXMuCiAgICAgaW50MzJfdCBhYWNhb3QgPSAtMTsKICAgICBpZiAobWV0YS0+ZmluZEludDMyKGtLZXlBQUNBT1QsICZhYWNhb3QpKSB7Ci0gICAgICAgIG1hcEFBQ1Byb2ZpbGVUb0F1ZGlvRm9ybWF0KGluZm8uZm9ybWF0LChPTVhfQVVESU9fQUFDUFJPRklMRVRZUEUpIGFhY2FvdCk7CisgICAgICAgIG1hcEFBQ1Byb2ZpbGVUb0F1ZGlvRm9ybWF0KGluZm8tPmZvcm1hdCwoT01YX0FVRElPX0FBQ1BST0ZJTEVUWVBFKSBhYWNhb3QpOwogICAgIH0KIAogICAgIGludDMyX3Qgc3JhdGUgPSAtMTsKICAgICBpZiAoIW1ldGEtPmZpbmRJbnQzMihrS2V5U2FtcGxlUmF0ZSwgJnNyYXRlKSkgewogICAgICAgICBBTE9HVigidHJhY2sgb2YgdHlwZSAnJXMnIGRvZXMgbm90IHB1Ymxpc2ggc2FtcGxlIHJhdGUiLCBtaW1lKTsKICAgICB9Ci0gICAgaW5mby5zYW1wbGVfcmF0ZSA9IHNyYXRlOworICAgIGluZm8tPnNhbXBsZV9yYXRlID0gc3JhdGU7CiAKICAgICBpbnQzMl90IGNtYXNrID0gMDsKICAgICBpZiAoIW1ldGEtPmZpbmRJbnQzMihrS2V5Q2hhbm5lbE1hc2ssICZjbWFzaykgfHwgY21hc2sgPT0gQ0hBTk5FTF9NQVNLX1VTRV9DSEFOTkVMX09SREVSKSB7CkBAIC0xNzQzLDI1ICsxOTA1LDM0IEBACiAgICAgICAgICAgICBjbWFzayA9IGF1ZGlvX2NoYW5uZWxfb3V0X21hc2tfZnJvbV9jb3VudChjaGFubmVsQ291bnQpOwogICAgICAgICB9CiAgICAgfQotICAgIGluZm8uY2hhbm5lbF9tYXNrID0gY21hc2s7CisgICAgaW5mby0+Y2hhbm5lbF9tYXNrID0gY21hc2s7CiAKICAgICBpbnQ2NF90IGR1cmF0aW9uID0gMDsKICAgICBpZiAoIW1ldGEtPmZpbmRJbnQ2NChrS2V5RHVyYXRpb24sICZkdXJhdGlvbikpIHsKICAgICAgICAgQUxPR1YoInRyYWNrIG9mIHR5cGUgJyVzJyBkb2VzIG5vdCBwdWJsaXNoIGR1cmF0aW9uIiwgbWltZSk7CiAgICAgfQotICAgIGluZm8uZHVyYXRpb25fdXMgPSBkdXJhdGlvbjsKKyAgICBpbmZvLT5kdXJhdGlvbl91cyA9IGR1cmF0aW9uOwogCiAgICAgaW50MzJfdCBicmF0ZSA9IC0xOwogICAgIGlmICghbWV0YS0+ZmluZEludDMyKGtLZXlCaXRSYXRlLCAmYnJhdGUpKSB7CiAgICAgICAgIEFMT0dWKCJ0cmFjayBvZiB0eXBlICclcycgZG9lcyBub3QgcHVibGlzaCBiaXRyYXRlIiwgbWltZSk7CiAgICAgfQotICAgIGluZm8uYml0X3JhdGUgPSBicmF0ZTsKKyAgICBpbmZvLT5iaXRfcmF0ZSA9IGJyYXRlOwogCiAKLSAgICBpbmZvLnN0cmVhbV90eXBlID0gc3RyZWFtVHlwZTsKLSAgICBpbmZvLmhhc192aWRlbyA9IGhhc1ZpZGVvOwotICAgIGluZm8uaXNfc3RyZWFtaW5nID0gaXNTdHJlYW1pbmc7CisgICAgaW5mby0+c3RyZWFtX3R5cGUgPSBzdHJlYW1UeXBlOworICAgIGluZm8tPmhhc192aWRlbyA9IGhhc1ZpZGVvOworICAgIGluZm8tPmlzX3N0cmVhbWluZyA9IGlzU3RyZWFtaW5nOworICAgIHJldHVybiBPSzsKK30KIAorYm9vbCBjYW5PZmZsb2FkU3RyZWFtKGNvbnN0IHNwPE1ldGFEYXRhPiYgbWV0YSwgYm9vbCBoYXNWaWRlbywKKyAgICAgICAgICAgICAgICAgICAgICBib29sIGlzU3RyZWFtaW5nLCBhdWRpb19zdHJlYW1fdHlwZV90IHN0cmVhbVR5cGUpCit7CisgICAgYXVkaW9fb2ZmbG9hZF9pbmZvX3QgaW5mbyA9IEFVRElPX0lORk9fSU5JVElBTElaRVI7CisgICAgaWYgKE9LICE9IGdldEF1ZGlvT2ZmbG9hZEluZm8obWV0YSwgaGFzVmlkZW8sIGlzU3RyZWFtaW5nLCBzdHJlYW1UeXBlLCAmaW5mbykpIHsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KICAgICAvLyBDaGVjayBpZiBvZmZsb2FkIGlzIHBvc3NpYmxlIGZvciBnaXZlbiBmb3JtYXQsIHN0cmVhbSB0eXBlLCBzYW1wbGUgcmF0ZSwKICAgICAvLyBiaXQgcmF0ZSwgZHVyYXRpb24sIHZpZGVvIGFuZCBzdHJlYW1pbmcKICAgICByZXR1cm4gQXVkaW9TeXN0ZW06OmlzT2ZmbG9hZFN1cHBvcnRlZChpbmZvKTsKQEAgLTE5MzEsNCArMjEwMiwzIEBACiB9CiAKIH0gIC8vIG5hbWVzcGFjZSBhbmRyb2lkCi0KZGlmZiAtLWdpdCBhL21lZGlhL2xpYnN0YWdlZnJpZ2h0L2JxaGVscGVyL0FuZHJvaWQuYnAgYi9tZWRpYS9saWJzdGFnZWZyaWdodC9icWhlbHBlci9BbmRyb2lkLmJwCmluZGV4IDRmNDZiZTcuLmM2NDdmNWYgMTAwNjQ0Ci0tLSBhL21lZGlhL2xpYnN0YWdlZnJpZ2h0L2JxaGVscGVyL0FuZHJvaWQuYnAKKysrIGIvbWVkaWEvbGlic3RhZ2VmcmlnaHQvYnFoZWxwZXIvQW5kcm9pZC5icApAQCAtNCw3ICs0LDcgQEAKICAgICB2bmRrOiB7CiAgICAgICAgIGVuYWJsZWQ6IHRydWUsCiAgICAgfSwKLQorICAgIGRvdWJsZV9sb2FkYWJsZTogdHJ1ZSwKICAgICBzcmNzOiBbCiAgICAgICAgICJDb252ZXJzaW9uLmNwcCIsCiAgICAgICAgICJGcmFtZURyb3BwZXIuY3BwIiwKZGlmZiAtLWdpdCBhL21lZGlhL2xpYnN0YWdlZnJpZ2h0L2JxaGVscGVyL0NvbnZlcnNpb24uY3BwIGIvbWVkaWEvbGlic3RhZ2VmcmlnaHQvYnFoZWxwZXIvQ29udmVyc2lvbi5jcHAKaW5kZXggZmZlZDAwNS4uOTFkN2M3NCAxMDA2NDQKLS0tIGEvbWVkaWEvbGlic3RhZ2VmcmlnaHQvYnFoZWxwZXIvQ29udmVyc2lvbi5jcHAKKysrIGIvbWVkaWEvbGlic3RhZ2VmcmlnaHQvYnFoZWxwZXIvQ29udmVyc2lvbi5jcHAKQEAgLTk4LDYgKzk4LDE3IEBACiAgKi8KIAogLyoqCisgKiBcYnJpZWYgQ29udmVydCBgUmV0dXJuPHZvaWQ+YCB0byBgc3RhdHVzX3RgLiBUaGlzIGlzIGZvciBsZWdhY3kgYmluZGVyIGNhbGxzLgorICoKKyAqIFxwYXJhbVtpbl0gdCBUaGUgc291cmNlIGBSZXR1cm48dm9pZD5gLgorICogXHJldHVybiBUaGUgY29ycmVzcG9uZGluZyBgc3RhdHVzX3RgLgorICovCisvLyBjb252ZXJ0OiBSZXR1cm48dm9pZD4gLT4gc3RhdHVzX3QKK3N0YXR1c190IHRvU3RhdHVzVChSZXR1cm48dm9pZD4gY29uc3QmIHQpIHsKKyAgICByZXR1cm4gdC5pc09rKCkgPyBPSyA6ICh0LmlzRGVhZE9iamVjdCgpID8gREVBRF9PQkpFQ1QgOiBVTktOT1dOX0VSUk9SKTsKK30KKworLyoqCiAgKiBcYnJpZWYgQ29udmVydCBgUmV0dXJuPHZvaWQ+YCB0byBgYmluZGVyOjpTdGF0dXNgLgogICoKICAqIFxwYXJhbVtpbl0gdCBUaGUgc291cmNlIGBSZXR1cm48dm9pZD5gLgpAQCAtMTA3LDIyICsxMTgsMTEgQEAKIDo6YW5kcm9pZDo6YmluZGVyOjpTdGF0dXMgdG9CaW5kZXJTdGF0dXMoCiAgICAgICAgIFJldHVybjx2b2lkPiBjb25zdCYgdCkgewogICAgIHJldHVybiA6OmFuZHJvaWQ6OmJpbmRlcjo6U3RhdHVzOjpmcm9tRXhjZXB0aW9uQ29kZSgKLSAgICAgICAgICAgIHQuaXNPaygpID8gT0sgOiBVTktOT1dOX0VSUk9SLAorICAgICAgICAgICAgdG9TdGF0dXNUKHQpLAogICAgICAgICAgICAgdC5kZXNjcmlwdGlvbigpLmNfc3RyKCkpOwogfQogCiAvKioKLSAqIFxicmllZiBDb252ZXJ0IGBSZXR1cm48dm9pZD5gIHRvIGBzdGF0dXNfdGAuIFRoaXMgaXMgZm9yIGxlZ2FjeSBiaW5kZXIgY2FsbHMuCi0gKgotICogXHBhcmFtW2luXSB0IFRoZSBzb3VyY2UgYFJldHVybjx2b2lkPmAuCi0gKiBccmV0dXJuIFRoZSBjb3JyZXNwb25kaW5nIGBzdGF0dXNfdGAuCi0gKi8KLS8vIGNvbnZlcnQ6IFJldHVybjx2b2lkPiAtPiBzdGF0dXNfdAotc3RhdHVzX3QgdG9TdGF0dXNUKFJldHVybjx2b2lkPiBjb25zdCYgdCkgewotICAgIHJldHVybiB0LmlzT2soKSA/IE9LIDogVU5LTk9XTl9FUlJPUjsKLX0KLQotLyoqCiAgKiBcYnJpZWYgV3JhcCBgbmF0aXZlX2hhbmRsZV90KmAgaW4gYGhpZGxfaGFuZGxlYC4KICAqCiAgKiBccGFyYW1baW5dIG5oIFRoZSBzb3VyY2UgYG5hdGl2ZV9oYW5kbGVfdCpgLgpkaWZmIC0tZ2l0IGEvbWVkaWEvbGlic3RhZ2VmcmlnaHQvYnFoZWxwZXIvR3JhcGhpY0J1ZmZlclNvdXJjZS5jcHAgYi9tZWRpYS9saWJzdGFnZWZyaWdodC9icWhlbHBlci9HcmFwaGljQnVmZmVyU291cmNlLmNwcAppbmRleCBkZDAzZDM4Li44YzFkYTc2IDEwMDY0NAotLS0gYS9tZWRpYS9saWJzdGFnZWZyaWdodC9icWhlbHBlci9HcmFwaGljQnVmZmVyU291cmNlLmNwcAorKysgYi9tZWRpYS9saWJzdGFnZWZyaWdodC9icWhlbHBlci9HcmFwaGljQnVmZmVyU291cmNlLmNwcApAQCAtNzY3LDcgKzc2Nyw3IEBACiAgICAgICAgICAgICBkb3VibGUgbkZyYW1lcyA9ICh0aW1lVXMgLSBtUHJldkNhcHR1cmVVcykgKiBtQ2FwdHVyZUZwcyAvIDEwMDAwMDA7CiAgICAgICAgICAgICBpZiAobkZyYW1lcyA8IDAuNSAtIGtUaW1lc3RhbXBGbHVjdHVhdGlvbikgewogICAgICAgICAgICAgICAgIC8vIHNraXAgdGhpcyBmcmFtZSBhcyBpdCdzIHRvbyBjbG9zZSB0byBwcmV2aW91cyBjYXB0dXJlCi0gICAgICAgICAgICAgICAgQUxPR1YoInNraXBwaW5nIGZyYW1lLCB0aW1lVXMgJWxsZCIsIHN0YXRpY19jYXN0PGxvbmcgbG9uZz4odGltZVVzKSk7CisgICAgICAgICAgICAgICAgQUxPR0QoInNraXBwaW5nIGZyYW1lLCB0aW1lVXMgJWxsZCIsIHN0YXRpY19jYXN0PGxvbmcgbG9uZz4odGltZVVzKSk7CiAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgaWYgKG5GcmFtZXMgPD0gMS4wKSB7CkBAIC0xMTA2LDYgKzExMDYsMTQgQEAKICAgICAgICAgY29uc3VtZXJVc2FnZSB8PSBHUkFMTE9DX1VTQUdFX0hXX1ZJREVPX0VOQ09ERVI7CiAgICAgICAgIG1Db25zdW1lci0+c2V0Q29uc3VtZXJVc2FnZUJpdHMoY29uc3VtZXJVc2FnZSk7CiAKKyAgICAgICAgLy8gU2V0IGltcGwuIGRlZmluZWQgZm9ybWF0IGFzIGRlZmF1bHQuIERlcGVuZGluZyBvbiB0aGUgdXNhZ2UgZmxhZ3MKKyAgICAgICAgLy8gdGhlIGRldmljZS1zcGVjaWZpYyBpbXBsZW1lbnRhdGlvbiB3aWxsIGRlcml2ZSB0aGUgZXhhY3QgZm9ybWF0LgorICAgICAgICBlcnIgPSBtQ29uc3VtZXItPnNldERlZmF1bHRCdWZmZXJGb3JtYXQoSEFMX1BJWEVMX0ZPUk1BVF9JTVBMRU1FTlRBVElPTl9ERUZJTkVEKTsKKyAgICAgICAgaWYgKGVyciAhPSBOT19FUlJPUikgeworICAgICAgICAgICAgQUxPR0UoIkZhaWxlZCB0byBjb25maWd1cmUgc3VyZmFjZSBkZWZhdWx0IGZvcm1hdCByZXQ6ICVkIiwgZXJyKTsKKyAgICAgICAgICAgIHJldHVybiBlcnI7CisgICAgICAgIH0KKwogICAgICAgICAvLyBTZXRzIHRoZSBkZWZhdWx0IGJ1ZmZlciBkYXRhIHNwYWNlCiAgICAgICAgIEFMT0dEKCJzZXR0aW5nIGRhdGFzcGFjZTogJSN4LCBhY3F1aXJlZD0lZCIsIGRhdGFTcGFjZSwgbU51bU91dHN0YW5kaW5nQWNxdWlyZXMpOwogICAgICAgICBtQ29uc3VtZXItPnNldERlZmF1bHRCdWZmZXJEYXRhU3BhY2UoKGFuZHJvaWRfZGF0YXNwYWNlKWRhdGFTcGFjZSk7CmRpZmYgLS1naXQgYS9tZWRpYS9saWJzdGFnZWZyaWdodC9jb2RlY3MvbTR2X2gyNjMvZGVjL3NyYy9ibG9ja19pZGN0LmNwcCBiL21lZGlhL2xpYnN0YWdlZnJpZ2h0L2NvZGVjcy9tNHZfaDI2My9kZWMvc3JjL2Jsb2NrX2lkY3QuY3BwCmluZGV4IGE3NTQ4M2EuLjNkMTAwODYgMTAwNjQ0Ci0tLSBhL21lZGlhL2xpYnN0YWdlZnJpZ2h0L2NvZGVjcy9tNHZfaDI2My9kZWMvc3JjL2Jsb2NrX2lkY3QuY3BwCisrKyBiL21lZGlhL2xpYnN0YWdlZnJpZ2h0L2NvZGVjcy9tNHZfaDI2My9kZWMvc3JjL2Jsb2NrX2lkY3QuY3BwCkBAIC02MTcsNiArNjE3LDcgQEAKICAgICByZXR1cm47CiB9CiAKK19fYXR0cmlidXRlX18oKG5vX3Nhbml0aXplKCJzaWduZWQtaW50ZWdlci1vdmVyZmxvdyIpKSkKIHZvaWQgaWRjdHJvd19pbnRyYSgKICAgICBpbnQxNiAqYmxrLCBQSVhFTCAqY29tcCwgaW50IHdpZHRoCiApCmRpZmYgLS1naXQgYS9tZWRpYS9saWJzdGFnZWZyaWdodC9jb2RlY3MvbTR2X2gyNjMvZGVjL3NyYy9wdmRlY19hcGkuY3BwIGIvbWVkaWEvbGlic3RhZ2VmcmlnaHQvY29kZWNzL200dl9oMjYzL2RlYy9zcmMvcHZkZWNfYXBpLmNwcAppbmRleCA3NWNhODQ2Li45YzBmY2ZhIDEwMDY0NAotLS0gYS9tZWRpYS9saWJzdGFnZWZyaWdodC9jb2RlY3MvbTR2X2gyNjMvZGVjL3NyYy9wdmRlY19hcGkuY3BwCisrKyBiL21lZGlhL2xpYnN0YWdlZnJpZ2h0L2NvZGVjcy9tNHZfaDI2My9kZWMvc3JjL3B2ZGVjX2FwaS5jcHAKQEAgLTE4Niw4ICsxODYsOCBAQAogI2lmZGVmIERFQ19JTlRFUk5BTF9NRU1PUllfT1BUCiAgICAgICAgICAgICAgICAgdmlkZW8tPnZvbFtpZHhdID0gSU1FTV92b2xbaWR4XTsKICAgICAgICAgICAgICAgICB2aWRlby0+bWVtb3J5VXNhZ2UgKz0gc2l6ZW9mKFZvbCk7Ci0gICAgICAgICAgICAgICAgb3NjbF9tZW1zZXQodmlkZW8tPnZvbFtpZHhdLCAwLCBzaXplb2YoVm9sKSk7CiAgICAgICAgICAgICAgICAgaWYgKHZpZGVvLT52b2xbaWR4XSA9PSBOVUxMKSBzdGF0dXMgPSBQVl9GQUxTRTsKKyAgICAgICAgICAgICAgICBlbHNlIG9zY2xfbWVtc2V0KHZpZGVvLT52b2xbaWR4XSwgMCwgc2l6ZW9mKFZvbCkpOwogICAgICAgICAgICAgICAgIHN0cmVhbSA9IElNRU1fQml0c3RyZWFtRGVjVmlkZW87CiAjZWxzZQogICAgICAgICAgICAgICAgIHZpZGVvLT52b2xbaWR4XSA9IChWb2wgKikgb3NjbF9tYWxsb2Moc2l6ZW9mKFZvbCkpOwpAQCAtMjEzLDYgKzIxMyw3IEBACiAgICAgICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgaW50MzIgYnVmZmVyX3NpemU7CisgICAgICAgICAgICAgICAgICAgIG9zY2xfbWVtc2V0KHN0cmVhbSwgMCwgc2l6ZW9mKEJpdHN0cmVhbURlY1ZpZGVvKSk7CiAgICAgICAgICAgICAgICAgICAgIGlmICgoYnVmZmVyX3NpemUgPSBCaXRzdHJlYW1PcGVuKHN0cmVhbSwgaWR4KSkgPCAwKQogICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICBtcDRkZWNfbG9nKCJJbml0VmlkZW9EZWNvZGVyKCk6IENhbid0IGFsbG9jYXRlIGJpdHN0cmVhbSBidWZmZXIuXG4iKTsKQEAgLTMzOSwyNyArMzQwLDMzIEBACiAjaWZkZWYgREVDX0lOVEVSTkFMX01FTU9SWV9PUFQKICAgICB2aWRlby0+Y3VyclZvcC0+eUNoYW4gPSBJTUVNX2N1cnJWb3BfeUNoYW47IC8qIEFsbG9jYXRlIG1lbW9yeSBmb3IgYWxsIFZPUCBPS0EgMy8yLzEqLwogICAgIGlmICh2aWRlby0+Y3VyclZvcC0+eUNoYW4gPT0gTlVMTCkgc3RhdHVzID0gUFZfRkFMU0U7Ci0gICAgdmlkZW8tPmN1cnJWb3AtPnVDaGFuID0gdmlkZW8tPmN1cnJWb3AtPnlDaGFuICsgc2l6ZTsKLSAgICB2aWRlby0+Y3VyclZvcC0+dkNoYW4gPSB2aWRlby0+Y3VyclZvcC0+dUNoYW4gKyAoc2l6ZSA+PiAyKTsKKyAgICBlbHNlIHsKKyAgICAgICAgdmlkZW8tPmN1cnJWb3AtPnVDaGFuID0gdmlkZW8tPmN1cnJWb3AtPnlDaGFuICsgc2l6ZTsKKyAgICAgICAgdmlkZW8tPmN1cnJWb3AtPnZDaGFuID0gdmlkZW8tPmN1cnJWb3AtPnVDaGFuICsgKHNpemUgPj4gMik7CisgICAgfQogCiAgICAgdmlkZW8tPnByZXZWb3AtPnlDaGFuID0gSU1FTV9wcmV2Vm9wX3lDaGFuOyAvKiBBbGxvY2F0ZSBtZW1vcnkgZm9yIGFsbCBWT1AgT0tBIDMvMi8xKi8KICAgICBpZiAodmlkZW8tPnByZXZWb3AtPnlDaGFuID09IE5VTEwpIHN0YXR1cyA9IFBWX0ZBTFNFOwotICAgIHZpZGVvLT5wcmV2Vm9wLT51Q2hhbiA9IHZpZGVvLT5wcmV2Vm9wLT55Q2hhbiArIHNpemU7Ci0gICAgdmlkZW8tPnByZXZWb3AtPnZDaGFuID0gdmlkZW8tPnByZXZWb3AtPnVDaGFuICsgKHNpemUgPj4gMik7CisgICAgZWxzZSB7CisgICAgICAgIHZpZGVvLT5wcmV2Vm9wLT51Q2hhbiA9IHZpZGVvLT5wcmV2Vm9wLT55Q2hhbiArIHNpemU7CisgICAgICAgIHZpZGVvLT5wcmV2Vm9wLT52Q2hhbiA9IHZpZGVvLT5wcmV2Vm9wLT51Q2hhbiArIChzaXplID4+IDIpOworICAgIH0KICNlbHNlCiAgICAgaWYgKHNpemUgPiBJTlQzMl9NQVggLyAzKSB7CiAgICAgICAgIHJldHVybiBQVl9GQUxTRTsKICAgICB9CiAgICAgdmlkZW8tPmN1cnJWb3AtPnlDaGFuID0gKFBJWEVMICopIG9zY2xfbWFsbG9jKHNpemUgKiAzIC8gMik7IC8qIEFsbG9jYXRlIG1lbW9yeSBmb3IgYWxsIFZPUCBPS0EgMy8yLzEqLwogICAgIGlmICh2aWRlby0+Y3VyclZvcC0+eUNoYW4gPT0gTlVMTCkgc3RhdHVzID0gUFZfRkFMU0U7Ci0KLSAgICB2aWRlby0+Y3VyclZvcC0+dUNoYW4gPSB2aWRlby0+Y3VyclZvcC0+eUNoYW4gKyBzaXplOwotICAgIHZpZGVvLT5jdXJyVm9wLT52Q2hhbiA9IHZpZGVvLT5jdXJyVm9wLT51Q2hhbiArIChzaXplID4+IDIpOworICAgIGVsc2UgeworICAgICAgICB2aWRlby0+Y3VyclZvcC0+dUNoYW4gPSB2aWRlby0+Y3VyclZvcC0+eUNoYW4gKyBzaXplOworICAgICAgICB2aWRlby0+Y3VyclZvcC0+dkNoYW4gPSB2aWRlby0+Y3VyclZvcC0+dUNoYW4gKyAoc2l6ZSA+PiAyKTsKKyAgICB9CiAgICAgdmlkZW8tPnByZXZWb3AtPnlDaGFuID0gKFBJWEVMICopIG9zY2xfbWFsbG9jKHNpemUgKiAzIC8gMik7IC8qIEFsbG9jYXRlIG1lbW9yeSBmb3IgYWxsIFZPUCBPS0EgMy8yLzEqLwogICAgIGlmICh2aWRlby0+cHJldlZvcC0+eUNoYW4gPT0gTlVMTCkgc3RhdHVzID0gUFZfRkFMU0U7Ci0KLSAgICB2aWRlby0+cHJldlZvcC0+dUNoYW4gPSB2aWRlby0+cHJldlZvcC0+eUNoYW4gKyBzaXplOwotICAgIHZpZGVvLT5wcmV2Vm9wLT52Q2hhbiA9IHZpZGVvLT5wcmV2Vm9wLT51Q2hhbiArIChzaXplID4+IDIpOworICAgIGVsc2UgeworICAgICAgICB2aWRlby0+cHJldlZvcC0+dUNoYW4gPSB2aWRlby0+cHJldlZvcC0+eUNoYW4gKyBzaXplOworICAgICAgICB2aWRlby0+cHJldlZvcC0+dkNoYW4gPSB2aWRlby0+cHJldlZvcC0+dUNoYW4gKyAoc2l6ZSA+PiAyKTsKKyAgICB9CiAjZW5kaWYKICAgICB2aWRlby0+bWVtb3J5VXNhZ2UgKz0gKHNpemUgKiAzKTsKICNlbmRpZiAgIC8vIE1FTU9SWV9QT09MCkBAIC0zODMsOCArMzkwLDEwIEBACiAKICAgICAgICAgICAgIHZpZGVvLT5wcmV2RW5oY1ZvcC0+eUNoYW4gPSAoUElYRUwgKikgb3NjbF9tYWxsb2Moc2l6ZSAqIDMgLyAyKTsgLyogQWxsb2NhdGUgbWVtb3J5IGZvciBhbGwgVk9QIE9LQSAzLzIvMSovCiAgICAgICAgICAgICBpZiAodmlkZW8tPnByZXZFbmhjVm9wLT55Q2hhbiA9PSBOVUxMKSBzdGF0dXMgPSBQVl9GQUxTRTsKLSAgICAgICAgICAgIHZpZGVvLT5wcmV2RW5oY1ZvcC0+dUNoYW4gPSB2aWRlby0+cHJldkVuaGNWb3AtPnlDaGFuICsgc2l6ZTsKLSAgICAgICAgICAgIHZpZGVvLT5wcmV2RW5oY1ZvcC0+dkNoYW4gPSB2aWRlby0+cHJldkVuaGNWb3AtPnVDaGFuICsgKHNpemUgPj4gMik7CisgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICB2aWRlby0+cHJldkVuaGNWb3AtPnVDaGFuID0gdmlkZW8tPnByZXZFbmhjVm9wLT55Q2hhbiArIHNpemU7CisgICAgICAgICAgICAgICAgdmlkZW8tPnByZXZFbmhjVm9wLT52Q2hhbiA9IHZpZGVvLT5wcmV2RW5oY1ZvcC0+dUNoYW4gKyAoc2l6ZSA+PiAyKTsKKyAgICAgICAgICAgIH0KICAgICAgICAgICAgIHZpZGVvLT5tZW1vcnlVc2FnZSArPSAoMyAqIHNpemUgLyAyKTsKICNlbmRpZgogICAgICAgICB9CkBAIC00MzEsMTAgKzQ0MCwxMiBAQAogI2Vsc2UKICAgICB2aWRlby0+c2xpY2VObyA9ICh1aW50OCAqKSBvc2NsX21hbGxvYyhuVG90YWxNQik7CiAgICAgaWYgKHZpZGVvLT5zbGljZU5vID09IE5VTEwpIHN0YXR1cyA9IFBWX0ZBTFNFOworICAgIGVsc2Ugb3NjbF9tZW1zZXQodmlkZW8tPnNsaWNlTm8sIDAsIG5Ub3RhbE1CKTsKICAgICB2aWRlby0+bWVtb3J5VXNhZ2UgKz0gblRvdGFsTUI7CiAKICAgICB2aWRlby0+YWNQcmVkRmxhZyA9ICh1aW50OCAqKSBvc2NsX21hbGxvYyhuVG90YWxNQiAqIHNpemVvZih1aW50OCkpOwogICAgIGlmICh2aWRlby0+YWNQcmVkRmxhZyA9PSBOVUxMKSBzdGF0dXMgPSBQVl9GQUxTRTsKKyAgICBlbHNlIG9zY2xfbWVtc2V0KHZpZGVvLT5hY1ByZWRGbGFnLCAwLCBuVG90YWxNQiAqIHNpemVvZih1aW50OCkpOwogICAgIHZpZGVvLT5tZW1vcnlVc2FnZSArPSAoblRvdGFsTUIpOwogCiAgICAgaWYgKChzaXplX3QpblRvdGFsTUIgPiBTSVpFX01BWCAvIHNpemVvZih0eXBlRENTdG9yZSkpIHsKQEAgLTQ0Miw2ICs0NTMsNyBAQAogICAgIH0KICAgICB2aWRlby0+cHJlZERDID0gKHR5cGVEQ1N0b3JlICopIG9zY2xfbWFsbG9jKG5Ub3RhbE1CICogc2l6ZW9mKHR5cGVEQ1N0b3JlKSk7CiAgICAgaWYgKHZpZGVvLT5wcmVkREMgPT0gTlVMTCkgc3RhdHVzID0gUFZfRkFMU0U7CisgICAgZWxzZSBvc2NsX21lbXNldCh2aWRlby0+cHJlZERDLCAwLCBuVG90YWxNQiAqIHNpemVvZih0eXBlRENTdG9yZSkpOwogICAgIHZpZGVvLT5tZW1vcnlVc2FnZSArPSAoblRvdGFsTUIgKiBzaXplb2YodHlwZURDU3RvcmUpKTsKIAogICAgIGlmIChuTUJQZXJSb3cgPiBJTlQzMl9NQVggLSAxCkBAIC00NTAsNiArNDYyLDcgQEAKICAgICB9CiAgICAgdmlkZW8tPnByZWREQ0FDX2NvbCA9ICh0eXBlRENBQ1N0b3JlICopIG9zY2xfbWFsbG9jKChuTUJQZXJSb3cgKyAxKSAqIHNpemVvZih0eXBlRENBQ1N0b3JlKSk7CiAgICAgaWYgKHZpZGVvLT5wcmVkRENBQ19jb2wgPT0gTlVMTCkgc3RhdHVzID0gUFZfRkFMU0U7CisgICAgZWxzZSBvc2NsX21lbXNldCh2aWRlby0+cHJlZERDQUNfY29sLCAwLCAobk1CUGVyUm93ICsgMSkgKiBzaXplb2YodHlwZURDQUNTdG9yZSkpOwogICAgIHZpZGVvLT5tZW1vcnlVc2FnZSArPSAoKG5NQlBlclJvdyArIDEpICogc2l6ZW9mKHR5cGVEQ0FDU3RvcmUpKTsKIAogICAgIC8qIGVsZW1lbnQgemVybyB3aWxsIGJlIHVzZWQgZm9yIHN0b3JpbmcgdmVydGljYWwgKGNvbCkgQUMgY29lZmZpY2llbnRzICovCkBAIC00NTksOSArNDcyLDExIEBACiAgICAgLyogQWxsb2NhdGluZyBIZWFkZXJJbmZvIHN0cnVjdHVyZSAmIFF1YW50aXplciBhcnJheSAqLwogICAgIHZpZGVvLT5oZWFkZXJJbmZvLk1vZGUgPSAodWludDggKikgb3NjbF9tYWxsb2MoblRvdGFsTUIpOwogICAgIGlmICh2aWRlby0+aGVhZGVySW5mby5Nb2RlID09IE5VTEwpIHN0YXR1cyA9IFBWX0ZBTFNFOworICAgIGVsc2Ugb3NjbF9tZW1zZXQodmlkZW8tPmhlYWRlckluZm8uTW9kZSwgMCwgblRvdGFsTUIpOwogICAgIHZpZGVvLT5tZW1vcnlVc2FnZSArPSBuVG90YWxNQjsKICAgICB2aWRlby0+aGVhZGVySW5mby5DQlAgPSAodWludDggKikgb3NjbF9tYWxsb2MoblRvdGFsTUIpOwogICAgIGlmICh2aWRlby0+aGVhZGVySW5mby5DQlAgPT0gTlVMTCkgc3RhdHVzID0gUFZfRkFMU0U7CisgICAgZWxzZSBvc2NsX21lbXNldCAodmlkZW8tPmhlYWRlckluZm8uQ0JQLCAwLCBuVG90YWxNQik7CiAgICAgdmlkZW8tPm1lbW9yeVVzYWdlICs9IG5Ub3RhbE1COwogCiAgICAgaWYgKChzaXplX3QpblRvdGFsTUIgPiBTSVpFX01BWCAvIHNpemVvZihpbnQxNikpIHsKQEAgLTQ2OSw2ICs0ODQsNyBAQAogICAgIH0KICAgICB2aWRlby0+UVBNQiA9IChpbnQxNiAqKSBvc2NsX21hbGxvYyhuVG90YWxNQiAqIHNpemVvZihpbnQxNikpOwogICAgIGlmICh2aWRlby0+UVBNQiA9PSBOVUxMKSBzdGF0dXMgPSBQVl9GQUxTRTsKKyAgICBlbHNlIG1lbXNldCh2aWRlby0+UVBNQiwgMHgwLCBuVG90YWxNQiAqIHNpemVvZihpbnQxNikpOwogICAgIHZpZGVvLT5tZW1vcnlVc2FnZSArPSAoblRvdGFsTUIgKiBzaXplb2YoaW50KSk7CiAKICAgICAvKiBBbGxvY2F0aW5nIG1hY3JvYmxvY2sgc3BhY2UgKi8KQEAgLTQ4OSw4ICs1MDUsMTAgQEAKICAgICB9CiAgICAgdmlkZW8tPm1vdFggPSAoTU9UICopIG9zY2xfbWFsbG9jKHNpemVvZihNT1QpICogNCAqIG5Ub3RhbE1CKTsKICAgICBpZiAodmlkZW8tPm1vdFggPT0gTlVMTCkgc3RhdHVzID0gUFZfRkFMU0U7CisgICAgZWxzZSBtZW1zZXQodmlkZW8tPm1vdFgsIDAsIHNpemVvZihNT1QpICogNCAqIG5Ub3RhbE1CKTsKICAgICB2aWRlby0+bW90WSA9IChNT1QgKikgb3NjbF9tYWxsb2Moc2l6ZW9mKE1PVCkgKiA0ICogblRvdGFsTUIpOwogICAgIGlmICh2aWRlby0+bW90WSA9PSBOVUxMKSBzdGF0dXMgPSBQVl9GQUxTRTsKKyAgICBlbHNlIG1lbXNldCh2aWRlby0+bW90WSwgMCwgc2l6ZW9mKE1PVCkgKiA0ICogblRvdGFsTUIpOwogICAgIHZpZGVvLT5tZW1vcnlVc2FnZSArPSAoc2l6ZW9mKE1PVCkgKiA4ICogblRvdGFsTUIpOwogI2VuZGlmCiAKZGlmZiAtLWdpdCBhL21lZGlhL2xpYnN0YWdlZnJpZ2h0L2NvZGVjcy9tcDNkZWMvU29mdE1QMy5jcHAgYi9tZWRpYS9saWJzdGFnZWZyaWdodC9jb2RlY3MvbXAzZGVjL1NvZnRNUDMuY3BwCmluZGV4IDIzNjQ2ODQuLmNkOTg0ZjAgMTAwNjQ0Ci0tLSBhL21lZGlhL2xpYnN0YWdlZnJpZ2h0L2NvZGVjcy9tcDNkZWMvU29mdE1QMy5jcHAKKysrIGIvbWVkaWEvbGlic3RhZ2VmcmlnaHQvY29kZWNzL21wM2RlYy9Tb2Z0TVAzLmNwcApAQCAtMTE0LDcgKzExNCw3IEBACiAgICAgbUNvbmZpZy0+Y3JjRW5hYmxlZCA9IGZhbHNlOwogCiAgICAgdWludDMyX3QgbWVtUmVxdWlyZW1lbnRzID0gcHZtcDNfZGVjb2Rlck1lbVJlcXVpcmVtZW50cygpOwotICAgIG1EZWNvZGVyQnVmID0gbWFsbG9jKG1lbVJlcXVpcmVtZW50cyk7CisgICAgbURlY29kZXJCdWYgPSBjYWxsb2MoMSwgbWVtUmVxdWlyZW1lbnRzKTsKIAogICAgIHB2bXAzX0luaXREZWNvZGVyKG1Db25maWcsIG1EZWNvZGVyQnVmKTsKICAgICBtSXNGaXJzdCA9IHRydWU7CmRpZmYgLS1naXQgYS9tZWRpYS9saWJzdGFnZWZyaWdodC9jb2RlY3MvbXBlZzJkZWMvQW5kcm9pZC5icCBiL21lZGlhL2xpYnN0YWdlZnJpZ2h0L2NvZGVjcy9tcGVnMmRlYy9BbmRyb2lkLmJwCmluZGV4IGZiMGRiOGYuLmNkODNkYjAgMTAwNjQ0Ci0tLSBhL21lZGlhL2xpYnN0YWdlZnJpZ2h0L2NvZGVjcy9tcGVnMmRlYy9BbmRyb2lkLmJwCisrKyBiL21lZGlhL2xpYnN0YWdlZnJpZ2h0L2NvZGVjcy9tcGVnMmRlYy9BbmRyb2lkLmJwCkBAIC0xLDkgKzEsNiBAQAogY2NfbGlicmFyeV9zaGFyZWQgewogICAgIG5hbWU6ICJsaWJzdGFnZWZyaWdodF9zb2Z0X21wZWcyZGVjIiwKICAgICB2ZW5kb3JfYXZhaWxhYmxlOiB0cnVlLAotICAgIHZuZGs6IHsKLSAgICAgICAgZW5hYmxlZDogdHJ1ZSwKLSAgICB9LAogCiAgICAgc3RhdGljX2xpYnM6IFsibGlibXBlZzJkZWMiXSwKICAgICBzcmNzOiBbIlNvZnRNUEVHMi5jcHAiXSwKZGlmZiAtLWdpdCBhL21lZGlhL2xpYnN0YWdlZnJpZ2h0L2NvZGVjcy9vcHVzL2RlYy9Tb2Z0T3B1cy5jcHAgYi9tZWRpYS9saWJzdGFnZWZyaWdodC9jb2RlY3Mvb3B1cy9kZWMvU29mdE9wdXMuY3BwCmluZGV4IDgxMzAwNGIuLjk0MmY4NTAgMTAwNjQ0Ci0tLSBhL21lZGlhL2xpYnN0YWdlZnJpZ2h0L2NvZGVjcy9vcHVzL2RlYy9Tb2Z0T3B1cy5jcHAKKysrIGIvbWVkaWEvbGlic3RhZ2VmcmlnaHQvY29kZWNzL29wdXMvZGVjL1NvZnRPcHVzLmNwcApAQCAtNDMxLDcgKzQzMSw3IEBACiAgICAgICAgICAgICB9CiAKICAgICAgICAgICAgIGlmIChtSW5wdXRCdWZmZXJDb3VudCA9PSAwKSB7Ci0gICAgICAgICAgICAgICAgQ0hFQ0sobUhlYWRlciA9PSBOVUxMKTsKKyAgICAgICAgICAgICAgICBkZWxldGUgbUhlYWRlcjsKICAgICAgICAgICAgICAgICBtSGVhZGVyID0gbmV3IE9wdXNIZWFkZXIoKTsKICAgICAgICAgICAgICAgICBtZW1zZXQobUhlYWRlciwgMCwgc2l6ZW9mKCptSGVhZGVyKSk7CiAgICAgICAgICAgICAgICAgaWYgKCFQYXJzZU9wdXNIZWFkZXIoZGF0YSwgc2l6ZSwgbUhlYWRlcikpIHsKQEAgLTQ1Miw2ICs0NTIsOSBAQAogICAgICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgICAgIGludCBzdGF0dXMgPSBPUFVTX0lOVkFMSURfU1RBVEU7CisgICAgICAgICAgICAgICAgaWYgKG1EZWNvZGVyICE9IE5VTEwpIHsKKyAgICAgICAgICAgICAgICAgICAgb3B1c19tdWx0aXN0cmVhbV9kZWNvZGVyX2Rlc3Ryb3kobURlY29kZXIpOworICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICBtRGVjb2RlciA9IG9wdXNfbXVsdGlzdHJlYW1fZGVjb2Rlcl9jcmVhdGUoa1JhdGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1IZWFkZXItPmNoYW5uZWxzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtSGVhZGVyLT5udW1fc3RyZWFtcywKZGlmZiAtLWdpdCBhL21lZGlhL2xpYnN0YWdlZnJpZ2h0L2NvZGVjcy92b3JiaXMvZGVjL1NvZnRWb3JiaXMuY3BwIGIvbWVkaWEvbGlic3RhZ2VmcmlnaHQvY29kZWNzL3ZvcmJpcy9kZWMvU29mdFZvcmJpcy5jcHAKaW5kZXggZDUzNGY2NC4uY2U4ZDQ1OCAxMDA2NDQKLS0tIGEvbWVkaWEvbGlic3RhZ2VmcmlnaHQvY29kZWNzL3ZvcmJpcy9kZWMvU29mdFZvcmJpcy5jcHAKKysrIGIvbWVkaWEvbGlic3RhZ2VmcmlnaHQvY29kZWNzL3ZvcmJpcy9kZWMvU29mdFZvcmJpcy5jcHAKQEAgLTM1Nyw3ICszNTcsMTAgQEAKICAgICAgICAgaW50MzJfdCBudW1QYWdlU2FtcGxlcyA9IDA7CiAKICAgICAgICAgaWYgKGluSGVhZGVyKSB7Ci0gICAgICAgICAgICBpZiAobUlucHV0QnVmZmVyQ291bnQgPCAyKSB7CisgICAgICAgICAgICAvLyBBc3N1bWUgdGhlIHZlcnkgZmlyc3QgMiBidWZmZXJzIGFyZSBhbHdheXMgY29kZWMgY29uZmlnIChpbiB0aGlzIGNhc2UgbVN0YXRlIGlzIE5VTEwpCisgICAgICAgICAgICAvLyBBZnRlciBmbHVzaCwgaGFuZGxlIENTRAorICAgICAgICAgICAgaWYgKG1JbnB1dEJ1ZmZlckNvdW50IDwgMiAmJgorICAgICAgICAgICAgICAgICAgICAobVN0YXRlID09IE5VTEwgfHwgKGluSGVhZGVyLT5uRmxhZ3MgJiBPTVhfQlVGRkVSRkxBR19DT0RFQ0NPTkZJRykpKSB7CiAgICAgICAgICAgICAgICAgY29uc3QgdWludDhfdCAqZGF0YSA9IGluSGVhZGVyLT5wQnVmZmVyICsgaW5IZWFkZXItPm5PZmZzZXQ7CiAgICAgICAgICAgICAgICAgc2l6ZV90IHNpemUgPSBpbkhlYWRlci0+bkZpbGxlZExlbjsKIApAQCAtMzgwLDcgKzM4MywyNCBAQAogCiAgICAgICAgICAgICAgICAgbWFrZUJpdFJlYWRlcigoY29uc3QgdWludDhfdCAqKWRhdGEgKyA3LCBzaXplIC0gNywgJmJ1ZiwgJnJlZiwgJmJpdHMpOwogCi0gICAgICAgICAgICAgICAgaWYgKG1JbnB1dEJ1ZmZlckNvdW50ID09IDApIHsKKyAgICAgICAgICAgICAgICAvLyBBc3N1bWUgdmVyeSBmaXJzdCBmcmFtZSBpcyBpZGVudGlmaWNhdGlvbiBoZWFkZXIgLSBvciByZXNldCBpZGVudGlmaWNhdGlvbgorICAgICAgICAgICAgICAgIC8vIGhlYWRlciBhZnRlciBmbHVzaCwgYnV0IGFsbG93IG9ubHkgc3BlY2lmeWluZyBzZXR1cCBoZWFkZXIgYWZ0ZXIgZmx1c2ggaWYKKyAgICAgICAgICAgICAgICAvLyBpZGVudGlmaWNhdGlvbiBoZWFkZXIgd2FzIGFscmVhZHkgc2V0IHVwLgorICAgICAgICAgICAgICAgIGlmIChtSW5wdXRCdWZmZXJDb3VudCA9PSAwICYmCisgICAgICAgICAgICAgICAgICAgICAgICAobVZpID09IE5VTEwgfHwgZGF0YVswXSA9PSAxIC8qIGlkZW50aWZpY2F0aW9uIGhlYWRlciAqLykpIHsKKyAgICAgICAgICAgICAgICAgICAgLy8gcmVtb3ZlIGFueSBwcmlvciBzdGF0ZQorICAgICAgICAgICAgICAgICAgICBpZiAobVZpICE9IE5VTEwpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIGFsc28gY2xlYXIgbVN0YXRlIGFzIGl0IG1heSByZWZlciB0byB0aGUgb2xkIG1WaQorICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1TdGF0ZSAhPSBOVUxMKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9yYmlzX2RzcF9jbGVhcihtU3RhdGUpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlbGV0ZSBtU3RhdGU7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbVN0YXRlID0gTlVMTDsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIHZvcmJpc19pbmZvX2NsZWFyKG1WaSk7CisgICAgICAgICAgICAgICAgICAgICAgICBkZWxldGUgbVZpOworICAgICAgICAgICAgICAgICAgICAgICAgbVZpID0gTlVMTDsKKyAgICAgICAgICAgICAgICAgICAgfQorCiAgICAgICAgICAgICAgICAgICAgIENIRUNLKG1WaSA9PSBOVUxMKTsKICAgICAgICAgICAgICAgICAgICAgbVZpID0gbmV3IHZvcmJpc19pbmZvOwogICAgICAgICAgICAgICAgICAgICB2b3JiaXNfaW5mb19pbml0KG1WaSk7CkBAIC0zOTIsOCArNDEyLDE1IEBACiAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICAvLyByZW1vdmUgYW55IHByaW9yIHN0YXRlCisgICAgICAgICAgICAgICAgICAgIGlmIChtU3RhdGUgIT0gTlVMTCkgeworICAgICAgICAgICAgICAgICAgICAgICAgdm9yYmlzX2RzcF9jbGVhcihtU3RhdGUpOworICAgICAgICAgICAgICAgICAgICAgICAgZGVsZXRlIG1TdGF0ZTsKKyAgICAgICAgICAgICAgICAgICAgICAgIG1TdGF0ZSA9IE5VTEw7CisgICAgICAgICAgICAgICAgICAgIH0KKwogICAgICAgICAgICAgICAgICAgICBpbnQgcmV0ID0gX3ZvcmJpc191bnBhY2tfYm9va3MobVZpLCAmYml0cyk7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChyZXQgIT0gMCkgeworICAgICAgICAgICAgICAgICAgICBpZiAocmV0ICE9IDAgfHwgbVN0YXRlICE9IE5VTEwpIHsKICAgICAgICAgICAgICAgICAgICAgICAgIG5vdGlmeShPTVhfRXZlbnRFcnJvciwgT01YX0Vycm9yVW5kZWZpbmVkLCByZXQsIE5VTEwpOwogICAgICAgICAgICAgICAgICAgICAgICAgbVNpZ25hbGxlZEVycm9yID0gdHJ1ZTsKICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKQEAgLTQwOSw2ICs0MzYsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgbm90aWZ5KE9NWF9FdmVudFBvcnRTZXR0aW5nc0NoYW5nZWQsIDEsIDAsIE5VTEwpOwogICAgICAgICAgICAgICAgICAgICAgICAgbU91dHB1dFBvcnRTZXR0aW5nc0NoYW5nZSA9IEFXQUlUSU5HX0RJU0FCTEVEOwogICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIG1JbnB1dEJ1ZmZlckNvdW50ID0gMTsKICAgICAgICAgICAgICAgICB9CiAKICAgICAgICAgICAgICAgICBpZiAoaW5IZWFkZXItPm5GbGFncyAmIE9NWF9CVUZGRVJGTEFHX0VPUykgewpAQCAtNTUwLDE5ICs1NzgsMTAgQEAKIAogICAgICAgICBtSW5wdXRCdWZmZXJDb3VudCA9IDA7CiAgICAgICAgIG1OdW1GcmFtZXNPdXRwdXQgPSAwOwotICAgICAgICBpZiAobVN0YXRlICE9IE5VTEwpIHsKLSAgICAgICAgICAgIHZvcmJpc19kc3BfY2xlYXIobVN0YXRlKTsKLSAgICAgICAgICAgIGRlbGV0ZSBtU3RhdGU7Ci0gICAgICAgICAgICBtU3RhdGUgPSBOVUxMOwotICAgICAgICB9Ci0gICAgICAgIGlmIChtVmkgIT0gTlVMTCkgewotICAgICAgICAgICAgdm9yYmlzX2luZm9fY2xlYXIobVZpKTsKLSAgICAgICAgICAgIGRlbGV0ZSBtVmk7Ci0gICAgICAgICAgICBtVmkgPSBOVUxMOwotICAgICAgICB9CiAgICAgICAgIG1TYXdJbnB1dEVvcyA9IGZhbHNlOwogICAgICAgICBtU2lnbmFsbGVkT3V0cHV0RW9zID0gZmFsc2U7CiAgICAgICAgIG1OdW1GcmFtZXNMZWZ0T25QYWdlID0gLTE7CisgICAgICAgIHZvcmJpc19kc3BfcmVzdGFydChtU3RhdGUpOwogICAgIH0KIH0KIApkaWZmIC0tZ2l0IGEvbWVkaWEvbGlic3RhZ2VmcmlnaHQvY29kZWNzL3hhYWNkZWMvU29mdFhBQUMuY3BwIGIvbWVkaWEvbGlic3RhZ2VmcmlnaHQvY29kZWNzL3hhYWNkZWMvU29mdFhBQUMuY3BwCmluZGV4IDA2YjE1YjMuLmYzNTJmYmEgMTAwNjQ0Ci0tLSBhL21lZGlhL2xpYnN0YWdlZnJpZ2h0L2NvZGVjcy94YWFjZGVjL1NvZnRYQUFDLmNwcAorKysgYi9tZWRpYS9saWJzdGFnZWZyaWdodC9jb2RlY3MveGFhY2RlYy9Tb2Z0WEFBQy5jcHAKQEAgLTc5LDcgKzc5LDcgQEAKIAogc3RhdGljIGNvbnN0IE9NWF9VMzIga1N1cHBvcnRlZFByb2ZpbGVzW10gPSB7CiAgICAgT01YX0FVRElPX0FBQ09iamVjdExDLCBPTVhfQVVESU9fQUFDT2JqZWN0SEUsICBPTVhfQVVESU9fQUFDT2JqZWN0SEVfUFMsCi0gICAgT01YX0FVRElPX0FBQ09iamVjdExELCBPTVhfQVVESU9fQUFDT2JqZWN0RUxELAorICAgIE9NWF9BVURJT19BQUNPYmplY3RMRCwgT01YX0FVRElPX0FBQ09iamVjdEVMRCwgT01YX0FVRElPX0FBQ09iamVjdFhIRQogfTsKIAogU29mdFhBQUM6OlNvZnRYQUFDKGNvbnN0IGNoYXIqIG5hbWUsIGNvbnN0IE9NWF9DQUxMQkFDS1RZUEUqIGNhbGxiYWNrcywgT01YX1BUUiBhcHBEYXRhLApkaWZmIC0tZ2l0IGEvbWVkaWEvbGlic3RhZ2VmcmlnaHQvY29sb3Jjb252ZXJzaW9uL0NvbG9yQ29udmVydGVyLmNwcCBiL21lZGlhL2xpYnN0YWdlZnJpZ2h0L2NvbG9yY29udmVyc2lvbi9Db2xvckNvbnZlcnRlci5jcHAKaW5kZXggNzBmNTJjMy4uODZiZDlkNiAxMDA2NDQKLS0tIGEvbWVkaWEvbGlic3RhZ2VmcmlnaHQvY29sb3Jjb252ZXJzaW9uL0NvbG9yQ29udmVydGVyLmNwcAorKysgYi9tZWRpYS9saWJzdGFnZWZyaWdodC9jb2xvcmNvbnZlcnNpb24vQ29sb3JDb252ZXJ0ZXIuY3BwCkBAIC0yMSwxMCArMjEsMTIgQEAKIAogI2luY2x1ZGUgPG1lZGlhL3N0YWdlZnJpZ2h0L2ZvdW5kYXRpb24vQURlYnVnLmg+CiAjaW5jbHVkZSA8bWVkaWEvc3RhZ2VmcmlnaHQvZm91bmRhdGlvbi9BTG9vcGVyLmg+CisjaW5jbHVkZSA8bWVkaWEvc3RhZ2VmcmlnaHQvZm91bmRhdGlvbi9Db2xvclV0aWxzLmg+CiAjaW5jbHVkZSA8bWVkaWEvc3RhZ2VmcmlnaHQvQ29sb3JDb252ZXJ0ZXIuaD4KICNpbmNsdWRlIDxtZWRpYS9zdGFnZWZyaWdodC9NZWRpYUVycm9ycy5oPgogCiAjaW5jbHVkZSAibGlieXV2L2NvbnZlcnRfZnJvbS5oIgorI2luY2x1ZGUgImxpYnl1di9jb252ZXJ0X2FyZ2IuaCIKICNpbmNsdWRlICJsaWJ5dXYvdmlkZW9fY29tbW9uLmgiCiAjaW5jbHVkZSA8ZnVuY3Rpb25hbD4KICNpbmNsdWRlIDxzeXMvdGltZS5oPgpAQCAtNDUsMTAgKzQ3LDI4IEBACiAKIG5hbWVzcGFjZSBhbmRyb2lkIHsKIAorc3RhdGljIGJvb2wgaXNSR0IoT01YX0NPTE9SX0ZPUk1BVFRZUEUgY29sb3JGb3JtYXQpIHsKKyAgICByZXR1cm4gY29sb3JGb3JtYXQgPT0gT01YX0NPTE9SX0Zvcm1hdDE2Yml0UkdCNTY1CisgICAgICAgICAgICB8fCBjb2xvckZvcm1hdCA9PSBPTVhfQ09MT1JfRm9ybWF0MzJCaXRSR0JBODg4OAorICAgICAgICAgICAgfHwgY29sb3JGb3JtYXQgPT0gT01YX0NPTE9SX0Zvcm1hdDMyYml0QkdSQTg4ODg7Cit9CisKK2Jvb2wgQ29sb3JDb252ZXJ0ZXI6OkNvbG9yU3BhY2U6OmlzQnQ3MDkoKSB7CisgICAgcmV0dXJuIChtU3RhbmRhcmQgPT0gQ29sb3JVdGlsczo6a0NvbG9yU3RhbmRhcmRCVDcwOSk7Cit9CisKKworYm9vbCBDb2xvckNvbnZlcnRlcjo6Q29sb3JTcGFjZTo6aXNKcGVnKCkgeworICAgIHJldHVybiAoKG1TdGFuZGFyZCA9PSBDb2xvclV0aWxzOjprQ29sb3JTdGFuZGFyZEJUNjAxXzYyNSkKKyAgICAgICAgICAgIHx8IChtU3RhbmRhcmQgPT0gQ29sb3JVdGlsczo6a0NvbG9yU3RhbmRhcmRCVDYwMV81MjUpKQorICAgICAgICAgICAgJiYgKG1SYW5nZSA9PSBDb2xvclV0aWxzOjprQ29sb3JSYW5nZUZ1bGwpOworfQorCiBDb2xvckNvbnZlcnRlcjo6Q29sb3JDb252ZXJ0ZXIoCiAgICAgICAgIE9NWF9DT0xPUl9GT1JNQVRUWVBFIGZyb20sIE9NWF9DT0xPUl9GT1JNQVRUWVBFIHRvKQogICAgIDogbVNyY0Zvcm1hdChmcm9tKSwKICAgICAgIG1Ec3RGb3JtYXQodG8pLAorICAgICAgbVNyY0NvbG9yU3BhY2UoezAsIDAsIDB9KSwKICAgICAgIG1DbGlwKE5VTEwpIHsKIH0KIApAQCAtODEsMTQgKzEwMSwyOSBAQAogfQogCiBib29sIENvbG9yQ29udmVydGVyOjppc0RzdFJHQigpIGNvbnN0IHsKLSAgICByZXR1cm4gbURzdEZvcm1hdCA9PSBPTVhfQ09MT1JfRm9ybWF0MTZiaXRSR0I1NjUKLSAgICAgICAgICAgIHx8IG1Ec3RGb3JtYXQgPT0gT01YX0NPTE9SX0Zvcm1hdDMyQml0UkdCQTg4ODgKLSAgICAgICAgICAgIHx8IG1Ec3RGb3JtYXQgPT0gT01YX0NPTE9SX0Zvcm1hdDMyYml0QkdSQTg4ODg7CisgICAgcmV0dXJuIGlzUkdCKG1Ec3RGb3JtYXQpOwogfQogCit2b2lkIENvbG9yQ29udmVydGVyOjpzZXRTcmNDb2xvclNwYWNlKAorICAgICAgICB1aW50MzJfdCBzdGFuZGFyZCwgdWludDMyX3QgcmFuZ2UsIHVpbnQzMl90IHRyYW5zZmVyKSB7CisgICAgaWYgKGlzUkdCKG1TcmNGb3JtYXQpKSB7CisgICAgICAgIEFMT0dXKCJDYW4ndCBzZXQgY29sb3Igc3BhY2Ugb24gUkdCIHNvdXJjZSIpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIG1TcmNDb2xvclNwYWNlLm1TdGFuZGFyZCA9IHN0YW5kYXJkOworICAgIG1TcmNDb2xvclNwYWNlLm1SYW5nZSA9IHJhbmdlOworICAgIG1TcmNDb2xvclNwYWNlLm1UcmFuc2ZlciA9IHRyYW5zZmVyOworfQorCisvKgorICogSWYgc3RyaWRlIGlzIG5vbi16ZXJvLCBjbGllbnQncyBzdHJpZGUgd2lsbCBiZSB1c2VkLiBGb3IgcGxhbmFyCisgKiBvciBzZW1pLXBsYW5hciBZVVYgZm9ybWF0cywgc3RyaWRlIG11c3QgYmUgZXZlbiBudW1iZXJzLgorICogSWYgc3RyaWRlIGlzIHplcm8sIGl0IHdpbGwgYmUgY2FsY3VsYXRlZCBiYXNlZCBvbiB3aWR0aCBhbmQgYnBwCisgKiBvZiB0aGUgZm9ybWF0LCBhc3N1bWluZyBubyBwYWRkaW5nIG9uIHRoZSByaWdodCBlZGdlLgorICovCiBDb2xvckNvbnZlcnRlcjo6Qml0bWFwUGFyYW1zOjpCaXRtYXBQYXJhbXMoCiAgICAgICAgIHZvaWQgKmJpdHMsCi0gICAgICAgIHNpemVfdCB3aWR0aCwgc2l6ZV90IGhlaWdodCwKKyAgICAgICAgc2l6ZV90IHdpZHRoLCBzaXplX3QgaGVpZ2h0LCBzaXplX3Qgc3RyaWRlLAogICAgICAgICBzaXplX3QgY3JvcExlZnQsIHNpemVfdCBjcm9wVG9wLAogICAgICAgICBzaXplX3QgY3JvcFJpZ2h0LCBzaXplX3QgY3JvcEJvdHRvbSwKICAgICAgICAgT01YX0NPTE9SX0ZPUk1BVFRZUEUgY29sb3JGcm9tYXQpCkBAIC0xMDIsNiArMTM3LDggQEAKICAgICAgIG1Dcm9wQm90dG9tKGNyb3BCb3R0b20pIHsKICAgICBzd2l0Y2gobUNvbG9yRm9ybWF0KSB7CiAgICAgY2FzZSBPTVhfQ09MT1JfRm9ybWF0MTZiaXRSR0I1NjU6CisgICAgY2FzZSBPTVhfQ09MT1JfRm9ybWF0WVVWNDIwUGxhbmFyMTY6CisgICAgY2FzZSBPTVhfQ09MT1JfRm9ybWF0Q2JZQ3JZOgogICAgICAgICBtQnBwID0gMjsKICAgICAgICAgbVN0cmlkZSA9IDIgKiBtV2lkdGg7CiAgICAgICAgIGJyZWFrOwpAQCAtMTEzLDEzICsxNTAsNyBAQAogICAgICAgICBtU3RyaWRlID0gNCAqIG1XaWR0aDsKICAgICAgICAgYnJlYWs7CiAKLSAgICBjYXNlIE9NWF9DT0xPUl9Gb3JtYXRZVVY0MjBQbGFuYXIxNjoKLSAgICAgICAgbUJwcCA9IDI7Ci0gICAgICAgIG1TdHJpZGUgPSAyICogbVdpZHRoOwotICAgICAgICBicmVhazsKLQogICAgIGNhc2UgT01YX0NPTE9SX0Zvcm1hdFlVVjQyMFBsYW5hcjoKLSAgICBjYXNlIE9NWF9DT0xPUl9Gb3JtYXRDYllDclk6CiAgICAgY2FzZSBPTVhfUUNPTV9DT0xPUl9Gb3JtYXRZVlU0MjBTZW1pUGxhbmFyOgogICAgIGNhc2UgT01YX0NPTE9SX0Zvcm1hdFlVVjQyMFNlbWlQbGFuYXI6CiAgICAgY2FzZSBPTVhfVElfQ09MT1JfRm9ybWF0WVVWNDIwUGFja2VkU2VtaVBsYW5hcjoKQEAgLTEzMyw2ICsxNjQsMTAgQEAKICAgICAgICAgbVN0cmlkZSA9IG1XaWR0aDsKICAgICAgICAgYnJlYWs7CiAgICAgfQorICAgIC8vIHVzZSBjbGllbnQncyBzdHJpZGUgaWYgaXQncyBzcGVjaWZpZWQuCisgICAgaWYgKHN0cmlkZSAhPSAwKSB7CisgICAgICAgIG1TdHJpZGUgPSBzdHJpZGU7CisgICAgfQogfQogCiBzaXplX3QgQ29sb3JDb252ZXJ0ZXI6OkJpdG1hcFBhcmFtczo6Y3JvcFdpZHRoKCkgY29uc3QgewpAQCAtMTQ1LDIxICsxODAsMjEgQEAKIAogc3RhdHVzX3QgQ29sb3JDb252ZXJ0ZXI6OmNvbnZlcnQoCiAgICAgICAgIGNvbnN0IHZvaWQgKnNyY0JpdHMsCi0gICAgICAgIHNpemVfdCBzcmNXaWR0aCwgc2l6ZV90IHNyY0hlaWdodCwKKyAgICAgICAgc2l6ZV90IHNyY1dpZHRoLCBzaXplX3Qgc3JjSGVpZ2h0LCBzaXplX3Qgc3JjU3RyaWRlLAogICAgICAgICBzaXplX3Qgc3JjQ3JvcExlZnQsIHNpemVfdCBzcmNDcm9wVG9wLAogICAgICAgICBzaXplX3Qgc3JjQ3JvcFJpZ2h0LCBzaXplX3Qgc3JjQ3JvcEJvdHRvbSwKICAgICAgICAgdm9pZCAqZHN0Qml0cywKLSAgICAgICAgc2l6ZV90IGRzdFdpZHRoLCBzaXplX3QgZHN0SGVpZ2h0LAorICAgICAgICBzaXplX3QgZHN0V2lkdGgsIHNpemVfdCBkc3RIZWlnaHQsIHNpemVfdCBkc3RTdHJpZGUsCiAgICAgICAgIHNpemVfdCBkc3RDcm9wTGVmdCwgc2l6ZV90IGRzdENyb3BUb3AsCiAgICAgICAgIHNpemVfdCBkc3RDcm9wUmlnaHQsIHNpemVfdCBkc3RDcm9wQm90dG9tKSB7CiAgICAgQml0bWFwUGFyYW1zIHNyYygKICAgICAgICAgICAgIGNvbnN0X2Nhc3Q8dm9pZCAqPihzcmNCaXRzKSwKLSAgICAgICAgICAgIHNyY1dpZHRoLCBzcmNIZWlnaHQsCisgICAgICAgICAgICBzcmNXaWR0aCwgc3JjSGVpZ2h0LCBzcmNTdHJpZGUsCiAgICAgICAgICAgICBzcmNDcm9wTGVmdCwgc3JjQ3JvcFRvcCwgc3JjQ3JvcFJpZ2h0LCBzcmNDcm9wQm90dG9tLCBtU3JjRm9ybWF0KTsKIAogICAgIEJpdG1hcFBhcmFtcyBkc3QoCiAgICAgICAgICAgICBkc3RCaXRzLAotICAgICAgICAgICAgZHN0V2lkdGgsIGRzdEhlaWdodCwKKyAgICAgICAgICAgIGRzdFdpZHRoLCBkc3RIZWlnaHQsIGRzdFN0cmlkZSwKICAgICAgICAgICAgIGRzdENyb3BMZWZ0LCBkc3RDcm9wVG9wLCBkc3RDcm9wUmlnaHQsIGRzdENyb3BCb3R0b20sIG1Ec3RGb3JtYXQpOwogCiAgICAgaWYgKCEoKHNyYy5tQ3JvcExlZnQgJiAxKSA9PSAwCkBAIC0yNzYsNiArMzExLDEzIEBACiAgICAgcmV0dXJuIE9LOwogfQogCisjZGVmaW5lIERFQ0xBUkVfWVVWMlJHQkZVTkMoZnVuYywgcmdiKSBpbnQgKCpmdW5jKSggICAgIFwKKyAgICAgICAgY29uc3QgdWludDgqLCBpbnQsIGNvbnN0IHVpbnQ4KiwgaW50LCAgICAgICAgICAgXAorICAgICAgICBjb25zdCB1aW50OCosIGludCwgdWludDgqLCBpbnQsIGludCwgaW50KSAgICAgICBcCisgICAgICAgID0gbVNyY0NvbG9yU3BhY2UuaXNCdDcwOSgpID8gbGlieXV2OjpINDIwVG8jI3JnYiBcCisgICAgICAgIDogbVNyY0NvbG9yU3BhY2UuaXNKcGVnKCkgPyBsaWJ5dXY6Oko0MjBUbyMjcmdiICBcCisgICAgICAgIDogbGlieXV2OjpJNDIwVG8jI3JnYgorCiBzdGF0dXNfdCBDb2xvckNvbnZlcnRlcjo6Y29udmVydFlVVjQyMFBsYW5hclVzZUxpYllVVigKICAgICAgICAgY29uc3QgQml0bWFwUGFyYW1zICZzcmMsIGNvbnN0IEJpdG1hcFBhcmFtcyAmZHN0KSB7CiAgICAgdWludDhfdCAqZHN0X3B0ciA9ICh1aW50OF90ICopZHN0Lm1CaXRzCkBAIC0yOTMsMTkgKzMzNSwyOCBAQAogCiAgICAgc3dpdGNoIChtRHN0Rm9ybWF0KSB7CiAgICAgY2FzZSBPTVhfQ09MT1JfRm9ybWF0MTZiaXRSR0I1NjU6Ci0gICAgICAgIGxpYnl1djo6STQyMFRvUkdCNTY1KHNyY195LCBzcmMubVN0cmlkZSwgc3JjX3UsIHNyYy5tU3RyaWRlIC8gMiwgc3JjX3YsIHNyYy5tU3RyaWRlIC8gMiwKKyAgICB7CisgICAgICAgIERFQ0xBUkVfWVVWMlJHQkZVTkMoZnVuYywgUkdCNTY1KTsKKyAgICAgICAgKCpmdW5jKShzcmNfeSwgc3JjLm1TdHJpZGUsIHNyY191LCBzcmMubVN0cmlkZSAvIDIsIHNyY192LCBzcmMubVN0cmlkZSAvIDIsCiAgICAgICAgICAgICAgICAgKHVpbnQ4ICopZHN0X3B0ciwgZHN0Lm1TdHJpZGUsIHNyYy5jcm9wV2lkdGgoKSwgc3JjLmNyb3BIZWlnaHQoKSk7CiAgICAgICAgIGJyZWFrOworICAgIH0KIAogICAgIGNhc2UgT01YX0NPTE9SX0Zvcm1hdDMyQml0UkdCQTg4ODg6Ci0gICAgICAgIGxpYnl1djo6Q29udmVydEZyb21JNDIwKHNyY195LCBzcmMubVN0cmlkZSwgc3JjX3UsIHNyYy5tU3RyaWRlIC8gMiwgc3JjX3YsIHNyYy5tU3RyaWRlIC8gMiwKLSAgICAgICAgICAgICAgICAodWludDggKilkc3RfcHRyLCBkc3QubVN0cmlkZSwgc3JjLmNyb3BXaWR0aCgpLCBzcmMuY3JvcEhlaWdodCgpLCBsaWJ5dXY6OkZPVVJDQ19BQkdSKTsKKyAgICB7CisgICAgICAgIERFQ0xBUkVfWVVWMlJHQkZVTkMoZnVuYywgQUJHUik7CisgICAgICAgICgqZnVuYykoc3JjX3ksIHNyYy5tU3RyaWRlLCBzcmNfdSwgc3JjLm1TdHJpZGUgLyAyLCBzcmNfdiwgc3JjLm1TdHJpZGUgLyAyLAorICAgICAgICAgICAgICAgICh1aW50OCAqKWRzdF9wdHIsIGRzdC5tU3RyaWRlLCBzcmMuY3JvcFdpZHRoKCksIHNyYy5jcm9wSGVpZ2h0KCkpOwogICAgICAgICBicmVhazsKKyAgICB9CiAKICAgICBjYXNlIE9NWF9DT0xPUl9Gb3JtYXQzMmJpdEJHUkE4ODg4OgotICAgICAgICBsaWJ5dXY6OkNvbnZlcnRGcm9tSTQyMChzcmNfeSwgc3JjLm1TdHJpZGUsIHNyY191LCBzcmMubVN0cmlkZSAvIDIsIHNyY192LCBzcmMubVN0cmlkZSAvIDIsCi0gICAgICAgICAgICAgICAgKHVpbnQ4ICopZHN0X3B0ciwgZHN0Lm1TdHJpZGUsIHNyYy5jcm9wV2lkdGgoKSwgc3JjLmNyb3BIZWlnaHQoKSwgbGlieXV2OjpGT1VSQ0NfQVJHQik7CisgICAgeworICAgICAgICBERUNMQVJFX1lVVjJSR0JGVU5DKGZ1bmMsIEFSR0IpOworICAgICAgICAoKmZ1bmMpKHNyY195LCBzcmMubVN0cmlkZSwgc3JjX3UsIHNyYy5tU3RyaWRlIC8gMiwgc3JjX3YsIHNyYy5tU3RyaWRlIC8gMiwKKyAgICAgICAgICAgICAgICAodWludDggKilkc3RfcHRyLCBkc3QubVN0cmlkZSwgc3JjLmNyb3BXaWR0aCgpLCBzcmMuY3JvcEhlaWdodCgpKTsKICAgICAgICAgYnJlYWs7CisgICAgfQogCiAgICAgZGVmYXVsdDoKICAgICAgICAgcmV0dXJuIEVSUk9SX1VOU1VQUE9SVEVEOwpAQCAtNzkzLDE1ICs4NDQsMTUgQEAKIAogICAgIHVpbnQ4X3QgKmtBZGp1c3RlZENsaXAgPSBpbml0Q2xpcCgpOwogCi0gICAgdWludDE2X3QgKmRzdF9wdHIgPSAodWludDE2X3QgKilkc3QubUJpdHMKLSAgICAgICAgKyBkc3QubUNyb3BUb3AgKiBkc3QubVdpZHRoICsgZHN0Lm1Dcm9wTGVmdDsKKyAgICB1aW50MTZfdCAqZHN0X3B0ciA9ICh1aW50MTZfdCAqKSgodWludDhfdCAqKQorICAgICAgICAgICAgZHN0Lm1CaXRzICsgZHN0Lm1Dcm9wVG9wICogZHN0Lm1TdHJpZGUgKyBkc3QubUNyb3BMZWZ0ICogZHN0Lm1CcHApOwogCiAgICAgY29uc3QgdWludDhfdCAqc3JjX3kgPQotICAgICAgICAoY29uc3QgdWludDhfdCAqKXNyYy5tQml0cyArIHNyYy5tQ3JvcFRvcCAqIHNyYy5tV2lkdGggKyBzcmMubUNyb3BMZWZ0OworICAgICAgICAoY29uc3QgdWludDhfdCAqKXNyYy5tQml0cyArIHNyYy5tQ3JvcFRvcCAqIHNyYy5tU3RyaWRlICsgc3JjLm1Dcm9wTGVmdDsKIAogICAgIGNvbnN0IHVpbnQ4X3QgKnNyY191ID0KLSAgICAgICAgKGNvbnN0IHVpbnQ4X3QgKilzcmNfeSArIHNyYy5tV2lkdGggKiBzcmMubUhlaWdodAotICAgICAgICArIHNyYy5tQ3JvcFRvcCAqIHNyYy5tV2lkdGggKyBzcmMubUNyb3BMZWZ0OworICAgICAgICAoY29uc3QgdWludDhfdCAqKXNyYy5tQml0cyArIHNyYy5tSGVpZ2h0ICogc3JjLm1TdHJpZGUgKworICAgICAgICBzcmMubUNyb3BUb3AgKiBzcmMubVN0cmlkZSAvIDIgKyBzcmMubUNyb3BMZWZ0OwogCiAgICAgZm9yIChzaXplX3QgeSA9IDA7IHkgPCBzcmMuY3JvcEhlaWdodCgpOyArK3kpIHsKICAgICAgICAgZm9yIChzaXplX3QgeCA9IDA7IHggPCBzcmMuY3JvcFdpZHRoKCk7IHggKz0gMikgewpAQCAtODQzLDEzICs4OTQsMTMgQEAKICAgICAgICAgICAgIH0KICAgICAgICAgfQogCi0gICAgICAgIHNyY195ICs9IHNyYy5tV2lkdGg7CisgICAgICAgIHNyY195ICs9IHNyYy5tU3RyaWRlOwogCiAgICAgICAgIGlmICh5ICYgMSkgewotICAgICAgICAgICAgc3JjX3UgKz0gc3JjLm1XaWR0aDsKKyAgICAgICAgICAgIHNyY191ICs9IHNyYy5tU3RyaWRlOwogICAgICAgICB9CiAKLSAgICAgICAgZHN0X3B0ciArPSBkc3QubVdpZHRoOworICAgICAgICBkc3RfcHRyID0gKHVpbnQxNl90KikoKHVpbnQ4X3QqKWRzdF9wdHIgKyBkc3QubVN0cmlkZSk7CiAgICAgfQogCiAgICAgcmV0dXJuIE9LOwpkaWZmIC0tZ2l0IGEvbWVkaWEvbGlic3RhZ2VmcmlnaHQvY29sb3Jjb252ZXJzaW9uL1NvZnR3YXJlUmVuZGVyZXIuY3BwIGIvbWVkaWEvbGlic3RhZ2VmcmlnaHQvY29sb3Jjb252ZXJzaW9uL1NvZnR3YXJlUmVuZGVyZXIuY3BwCmluZGV4IDY1N2EwNWIuLjM1OWRmM2QgMTAwNjQ0Ci0tLSBhL21lZGlhL2xpYnN0YWdlZnJpZ2h0L2NvbG9yY29udmVyc2lvbi9Tb2Z0d2FyZVJlbmRlcmVyLmNwcAorKysgYi9tZWRpYS9saWJzdGFnZWZyaWdodC9jb2xvcmNvbnZlcnNpb24vU29mdHdhcmVSZW5kZXJlci5jcHAKQEAgLTQ0LDYgKzQ0LDcgQEAKICAgICAgIG1OYXRpdmVXaW5kb3cobmF0aXZlV2luZG93KSwKICAgICAgIG1XaWR0aCgwKSwKICAgICAgIG1IZWlnaHQoMCksCisgICAgICBtU3RyaWRlKDApLAogICAgICAgbUNyb3BMZWZ0KDApLAogICAgICAgbUNyb3BUb3AoMCksCiAgICAgICBtQ3JvcFJpZ2h0KDApLApAQCAtNjcsOSArNjgsMTAgQEAKICAgICBpbnQzMl90IGNvbG9yRm9ybWF0TmV3OwogICAgIENIRUNLKGZvcm1hdC0+ZmluZEludDMyKCJjb2xvci1mb3JtYXQiLCAmY29sb3JGb3JtYXROZXcpKTsKIAotICAgIGludDMyX3Qgd2lkdGhOZXcsIGhlaWdodE5ldzsKLSAgICBDSEVDSyhmb3JtYXQtPmZpbmRJbnQzMigic3RyaWRlIiwgJndpZHRoTmV3KSk7CisgICAgaW50MzJfdCB3aWR0aE5ldywgaGVpZ2h0TmV3LCBzdHJpZGVOZXc7CisgICAgQ0hFQ0soZm9ybWF0LT5maW5kSW50MzIoIndpZHRoIiwgJndpZHRoTmV3KSk7CiAgICAgQ0hFQ0soZm9ybWF0LT5maW5kSW50MzIoInNsaWNlLWhlaWdodCIsICZoZWlnaHROZXcpKTsKKyAgICBDSEVDSyhmb3JtYXQtPmZpbmRJbnQzMigic3RyaWRlIiwgJnN0cmlkZU5ldykpOwogCiAgICAgaW50MzJfdCBjcm9wTGVmdE5ldywgY3JvcFRvcE5ldywgY3JvcFJpZ2h0TmV3LCBjcm9wQm90dG9tTmV3OwogICAgIGlmICghZm9ybWF0LT5maW5kUmVjdCgKQEAgLTEwNiw2ICsxMDgsNyBAQAogICAgIG1Db2xvckZvcm1hdCA9IHN0YXRpY19jYXN0PE9NWF9DT0xPUl9GT1JNQVRUWVBFPihjb2xvckZvcm1hdE5ldyk7CiAgICAgbVdpZHRoID0gd2lkdGhOZXc7CiAgICAgbUhlaWdodCA9IGhlaWdodE5ldzsKKyAgICBtU3RyaWRlID0gc3RyaWRlTmV3OwogICAgIG1Dcm9wTGVmdCA9IGNyb3BMZWZ0TmV3OwogICAgIG1Dcm9wVG9wID0gY3JvcFRvcE5ldzsKICAgICBtQ3JvcFJpZ2h0ID0gY3JvcFJpZ2h0TmV3OwpAQCAtMjc2LDIwICsyNzksMTUgQEAKICAgICBpZiAobUNvbnZlcnRlcikgewogICAgICAgICBtQ29udmVydGVyLT5jb252ZXJ0KAogICAgICAgICAgICAgICAgIGRhdGEsCi0gICAgICAgICAgICAgICAgbVdpZHRoLCBtSGVpZ2h0LAorICAgICAgICAgICAgICAgIG1XaWR0aCwgbUhlaWdodCwgbVN0cmlkZSwKICAgICAgICAgICAgICAgICBtQ3JvcExlZnQsIG1Dcm9wVG9wLCBtQ3JvcFJpZ2h0LCBtQ3JvcEJvdHRvbSwKICAgICAgICAgICAgICAgICBkc3QsCi0gICAgICAgICAgICAgICAgYnVmLT5zdHJpZGUsIGJ1Zi0+aGVpZ2h0LAorICAgICAgICAgICAgICAgIGJ1Zi0+c3RyaWRlLCBidWYtPmhlaWdodCwgMCwKICAgICAgICAgICAgICAgICAwLCAwLCBtQ3JvcFdpZHRoIC0gMSwgbUNyb3BIZWlnaHQgLSAxKTsKICAgICB9IGVsc2UgaWYgKG1Db2xvckZvcm1hdCA9PSBPTVhfQ09MT1JfRm9ybWF0WVVWNDIwUGxhbmFyKSB7Ci0gICAgICAgIGNvbnN0IHVpbnQ4X3QgKnNyY195ID0gKGNvbnN0IHVpbnQ4X3QgKilkYXRhOwotICAgICAgICBjb25zdCB1aW50OF90ICpzcmNfdSA9Ci0gICAgICAgICAgICAgICAgKGNvbnN0IHVpbnQ4X3QgKilkYXRhICsgbVdpZHRoICogbUhlaWdodDsKLSAgICAgICAgY29uc3QgdWludDhfdCAqc3JjX3YgPSBzcmNfdSArIChtV2lkdGggLyAyICogbUhlaWdodCAvIDIpOwotCi0gICAgICAgIHNyY195ICs9bUNyb3BMZWZ0ICsgbUNyb3BUb3AgKiBtV2lkdGg7Ci0gICAgICAgIHNyY191ICs9KG1Dcm9wTGVmdCArIG1Dcm9wVG9wICogbVdpZHRoIC8gMikvMjsKLSAgICAgICAgc3JjX3YgKz0obUNyb3BMZWZ0ICsgbUNyb3BUb3AgKiBtV2lkdGggLyAyKS8yOworICAgICAgICBjb25zdCB1aW50OF90ICpzcmNfeSA9IChjb25zdCB1aW50OF90ICopZGF0YSArIG1Dcm9wVG9wICogbVN0cmlkZSArIG1Dcm9wTGVmdDsKKyAgICAgICAgY29uc3QgdWludDhfdCAqc3JjX3UgPSAoY29uc3QgdWludDhfdCAqKWRhdGEgKyBtU3RyaWRlICogbUhlaWdodCArIG1Dcm9wVG9wICogbVN0cmlkZSAvIDQ7CisgICAgICAgIGNvbnN0IHVpbnQ4X3QgKnNyY192ID0gKGNvbnN0IHVpbnQ4X3QgKilzcmNfdSArIG1TdHJpZGUgKiBtSGVpZ2h0IC8gNDsKIAogICAgICAgICB1aW50OF90ICpkc3RfeSA9ICh1aW50OF90ICopZHN0OwogICAgICAgICBzaXplX3QgZHN0X3lfc2l6ZSA9IGJ1Zi0+c3RyaWRlICogYnVmLT5oZWlnaHQ7CkBAIC0zMDUsNyArMzAzLDcgQEAKICAgICAgICAgZm9yIChpbnQgeSA9IDA7IHkgPCBtQ3JvcEhlaWdodDsgKyt5KSB7CiAgICAgICAgICAgICBtZW1jcHkoZHN0X3ksIHNyY195LCBtQ3JvcFdpZHRoKTsKIAotICAgICAgICAgICAgc3JjX3kgKz0gbVdpZHRoOworICAgICAgICAgICAgc3JjX3kgKz0gbVN0cmlkZTsKICAgICAgICAgICAgIGRzdF95ICs9IGJ1Zi0+c3RyaWRlOwogICAgICAgICB9CiAKQEAgLTMxMywxOSArMzExLDE1IEBACiAgICAgICAgICAgICBtZW1jcHkoZHN0X3UsIHNyY191LCAobUNyb3BXaWR0aCArIDEpIC8gMik7CiAgICAgICAgICAgICBtZW1jcHkoZHN0X3YsIHNyY192LCAobUNyb3BXaWR0aCArIDEpIC8gMik7CiAKLSAgICAgICAgICAgIHNyY191ICs9IG1XaWR0aCAvIDI7Ci0gICAgICAgICAgICBzcmNfdiArPSBtV2lkdGggLyAyOworICAgICAgICAgICAgc3JjX3UgKz0gbVN0cmlkZSAvIDI7CisgICAgICAgICAgICBzcmNfdiArPSBtU3RyaWRlIC8gMjsKICAgICAgICAgICAgIGRzdF91ICs9IGRzdF9jX3N0cmlkZTsKICAgICAgICAgICAgIGRzdF92ICs9IGRzdF9jX3N0cmlkZTsKICAgICAgICAgfQogICAgIH0gZWxzZSBpZiAobUNvbG9yRm9ybWF0ID09IE9NWF9DT0xPUl9Gb3JtYXRZVVY0MjBQbGFuYXIxNikgewotICAgICAgICBjb25zdCB1aW50MTZfdCAqc3JjX3kgPSAoY29uc3QgdWludDE2X3QgKilkYXRhOwotICAgICAgICBjb25zdCB1aW50MTZfdCAqc3JjX3UgPSAoY29uc3QgdWludDE2X3QgKilkYXRhICsgbVdpZHRoICogbUhlaWdodDsKLSAgICAgICAgY29uc3QgdWludDE2X3QgKnNyY192ID0gc3JjX3UgKyAobVdpZHRoIC8gMiAqIG1IZWlnaHQgLyAyKTsKLQotICAgICAgICBzcmNfeSArPSBtQ3JvcExlZnQgKyBtQ3JvcFRvcCAqIG1XaWR0aDsKLSAgICAgICAgc3JjX3UgKz0gKG1Dcm9wTGVmdCArIG1Dcm9wVG9wICogbVdpZHRoIC8gMikgLyAyOwotICAgICAgICBzcmNfdiArPSAobUNyb3BMZWZ0ICsgbUNyb3BUb3AgKiBtV2lkdGggLyAyKSAvIDI7CisgICAgICAgIGNvbnN0IHVpbnQ4X3QgKnNyY195ID0gKGNvbnN0IHVpbnQ4X3QgKilkYXRhICsgbUNyb3BUb3AgKiBtU3RyaWRlICsgbUNyb3BMZWZ0ICogMjsKKyAgICAgICAgY29uc3QgdWludDhfdCAqc3JjX3UgPSAoY29uc3QgdWludDhfdCAqKWRhdGEgKyBtU3RyaWRlICogbUhlaWdodCArIG1Dcm9wVG9wICogbVN0cmlkZSAvIDQ7CisgICAgICAgIGNvbnN0IHVpbnQ4X3QgKnNyY192ID0gKGNvbnN0IHVpbnQ4X3QgKilzcmNfdSArIG1TdHJpZGUgKiBtSGVpZ2h0IC8gNDsKIAogICAgICAgICB1aW50OF90ICpkc3RfeSA9ICh1aW50OF90ICopZHN0OwogICAgICAgICBzaXplX3QgZHN0X3lfc2l6ZSA9IGJ1Zi0+c3RyaWRlICogYnVmLT5oZWlnaHQ7CkBAIC0zNDAsMjEgKzMzNCwyMSBAQAogCiAgICAgICAgIGZvciAoaW50IHkgPSAwOyB5IDwgbUNyb3BIZWlnaHQ7ICsreSkgewogICAgICAgICAgICAgZm9yIChpbnQgeCA9IDA7IHggPCBtQ3JvcFdpZHRoOyArK3gpIHsKLSAgICAgICAgICAgICAgICBkc3RfeVt4XSA9ICh1aW50OF90KShzcmNfeVt4XSA+PiAyKTsKKyAgICAgICAgICAgICAgICBkc3RfeVt4XSA9ICh1aW50OF90KSgoKHVpbnQxNl90ICopc3JjX3kpW3hdID4+IDIpOwogICAgICAgICAgICAgfQogCi0gICAgICAgICAgICBzcmNfeSArPSBtV2lkdGg7CisgICAgICAgICAgICBzcmNfeSArPSBtU3RyaWRlOwogICAgICAgICAgICAgZHN0X3kgKz0gYnVmLT5zdHJpZGU7CiAgICAgICAgIH0KIAogICAgICAgICBmb3IgKGludCB5ID0gMDsgeSA8IChtQ3JvcEhlaWdodCArIDEpIC8gMjsgKyt5KSB7CiAgICAgICAgICAgICBmb3IgKGludCB4ID0gMDsgeCA8IChtQ3JvcFdpZHRoICsgMSkgLyAyOyArK3gpIHsKLSAgICAgICAgICAgICAgICBkc3RfdVt4XSA9ICh1aW50OF90KShzcmNfdVt4XSA+PiAyKTsKLSAgICAgICAgICAgICAgICBkc3Rfdlt4XSA9ICh1aW50OF90KShzcmNfdlt4XSA+PiAyKTsKKyAgICAgICAgICAgICAgICBkc3RfdVt4XSA9ICh1aW50OF90KSgoKHVpbnQxNl90ICopc3JjX3UpW3hdID4+IDIpOworICAgICAgICAgICAgICAgIGRzdF92W3hdID0gKHVpbnQ4X3QpKCgodWludDE2X3QgKilzcmNfdilbeF0gPj4gMik7CiAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgIHNyY191ICs9IG1XaWR0aCAvIDI7Ci0gICAgICAgICAgICBzcmNfdiArPSBtV2lkdGggLyAyOworICAgICAgICAgICAgc3JjX3UgKz0gbVN0cmlkZSAvIDI7CisgICAgICAgICAgICBzcmNfdiArPSBtU3RyaWRlIC8gMjsKICAgICAgICAgICAgIGRzdF91ICs9IGRzdF9jX3N0cmlkZTsKICAgICAgICAgICAgIGRzdF92ICs9IGRzdF9jX3N0cmlkZTsKICAgICAgICAgfQpkaWZmIC0tZ2l0IGEvbWVkaWEvbGlic3RhZ2VmcmlnaHQvZm91bmRhdGlvbi9BSGllcmFyY2hpY2FsU3RhdGVNYWNoaW5lLmNwcCBiL21lZGlhL2xpYnN0YWdlZnJpZ2h0L2ZvdW5kYXRpb24vQUhpZXJhcmNoaWNhbFN0YXRlTWFjaGluZS5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGI4MzdmNjYuLjAwMDAwMDAKLS0tIGEvbWVkaWEvbGlic3RhZ2VmcmlnaHQvZm91bmRhdGlvbi9BSGllcmFyY2hpY2FsU3RhdGVNYWNoaW5lLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDExOCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEwIFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKLSAqCi0gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKLSAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KLSAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotICoKLSAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0gKgotICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQotICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKLSAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgotICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAotICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCi0gKi8KLQotLy8jZGVmaW5lIExPR19OREVCVUcgMAotI2RlZmluZSBMT0dfVEFHICJBSGllcmFyY2hpY2FsU3RhdGVNYWNoaW5lIgotI2luY2x1ZGUgPHV0aWxzL0xvZy5oPgotCi0jaW5jbHVkZSA8bWVkaWEvc3RhZ2VmcmlnaHQvZm91bmRhdGlvbi9BSGllcmFyY2hpY2FsU3RhdGVNYWNoaW5lLmg+Ci0KLSNpbmNsdWRlIDxtZWRpYS9zdGFnZWZyaWdodC9mb3VuZGF0aW9uL0FEZWJ1Zy5oPgotI2luY2x1ZGUgPG1lZGlhL3N0YWdlZnJpZ2h0L2ZvdW5kYXRpb24vQU1lc3NhZ2UuaD4KLSNpbmNsdWRlIDx1dGlscy9WZWN0b3IuaD4KLQotbmFtZXNwYWNlIGFuZHJvaWQgewotCi1BU3RhdGU6OkFTdGF0ZShjb25zdCBzcDxBU3RhdGU+ICZwYXJlbnRTdGF0ZSkKLSAgICA6IG1QYXJlbnRTdGF0ZShwYXJlbnRTdGF0ZSkgewotfQotCi1BU3RhdGU6On5BU3RhdGUoKSB7Ci19Ci0KLXNwPEFTdGF0ZT4gQVN0YXRlOjpwYXJlbnRTdGF0ZSgpIHsKLSAgICByZXR1cm4gbVBhcmVudFN0YXRlOwotfQotCi12b2lkIEFTdGF0ZTo6c3RhdGVFbnRlcmVkKCkgewotfQotCi12b2lkIEFTdGF0ZTo6c3RhdGVFeGl0ZWQoKSB7Ci19Ci0KLS8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCi0KLUFIaWVyYXJjaGljYWxTdGF0ZU1hY2hpbmU6OkFIaWVyYXJjaGljYWxTdGF0ZU1hY2hpbmUoKSB7Ci19Ci0KLUFIaWVyYXJjaGljYWxTdGF0ZU1hY2hpbmU6On5BSGllcmFyY2hpY2FsU3RhdGVNYWNoaW5lKCkgewotfQotCi12b2lkIEFIaWVyYXJjaGljYWxTdGF0ZU1hY2hpbmU6OmhhbmRsZU1lc3NhZ2UoY29uc3Qgc3A8QU1lc3NhZ2U+ICZtc2cpIHsKLSAgICBzcDxBU3RhdGU+IHNhdmUgPSBtU3RhdGU7Ci0KLSAgICBzcDxBU3RhdGU+IGN1ciA9IG1TdGF0ZTsKLSAgICB3aGlsZSAoY3VyICE9IE5VTEwgJiYgIWN1ci0+b25NZXNzYWdlUmVjZWl2ZWQobXNnKSkgewotICAgICAgICAvLyBJZiB5b3UgY2xhaW0gbm90IHRvIGhhdmUgaGFuZGxlZCB0aGUgbWVzc2FnZSB5b3Ugc2hvdWxkbid0Ci0gICAgICAgIC8vIGhhdmUgY2FsbGVkIHNldFN0YXRlLi4uCi0gICAgICAgIENIRUNLKHNhdmUgPT0gbVN0YXRlKTsKLQotICAgICAgICBjdXIgPSBjdXItPnBhcmVudFN0YXRlKCk7Ci0gICAgfQotCi0gICAgaWYgKGN1ciAhPSBOVUxMKSB7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBBTE9HVygiV2FybmluZyBtZXNzYWdlICVzIHVuaGFuZGxlZCBpbiByb290IHN0YXRlLiIsCi0gICAgICAgICBtc2ctPmRlYnVnU3RyaW5nKCkuY19zdHIoKSk7Ci19Ci0KLXZvaWQgQUhpZXJhcmNoaWNhbFN0YXRlTWFjaGluZTo6Y2hhbmdlU3RhdGUoY29uc3Qgc3A8QVN0YXRlPiAmc3RhdGUpIHsKLSAgICBpZiAoc3RhdGUgPT0gbVN0YXRlKSB7Ci0gICAgICAgIC8vIFF1aWNrIGV4aXQgZm9yIHRoZSBlYXN5IGNhc2UuCi0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBWZWN0b3I8c3A8QVN0YXRlPiA+IEE7Ci0gICAgc3A8QVN0YXRlPiBjdXIgPSBtU3RhdGU7Ci0gICAgZm9yICg7OykgewotICAgICAgICBBLnB1c2goY3VyKTsKLSAgICAgICAgaWYgKGN1ciA9PSBOVUxMKSB7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBjdXIgPSBjdXItPnBhcmVudFN0YXRlKCk7Ci0gICAgfQotCi0gICAgVmVjdG9yPHNwPEFTdGF0ZT4gPiBCOwotICAgIGN1ciA9IHN0YXRlOwotICAgIGZvciAoOzspIHsKLSAgICAgICAgQi5wdXNoKGN1cik7Ci0gICAgICAgIGlmIChjdXIgPT0gTlVMTCkgewotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgY3VyID0gY3VyLT5wYXJlbnRTdGF0ZSgpOwotICAgIH0KLQotICAgIC8vIFJlbW92ZSB0aGUgY29tbW9uIHRhaWwuCi0gICAgd2hpbGUgKEEuc2l6ZSgpID4gMCAmJiBCLnNpemUoKSA+IDAgJiYgQS50b3AoKSA9PSBCLnRvcCgpKSB7Ci0gICAgICAgIEEucG9wKCk7Ci0gICAgICAgIEIucG9wKCk7Ci0gICAgfQotCi0gICAgbVN0YXRlID0gc3RhdGU7Ci0KLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IEEuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgQS5lZGl0SXRlbUF0KGkpLT5zdGF0ZUV4aXRlZCgpOwotICAgIH0KLQotICAgIGZvciAoc2l6ZV90IGkgPSBCLnNpemUoKTsgaSA+IDA7KSB7Ci0gICAgICAgIGktLTsKLSAgICAgICAgQi5lZGl0SXRlbUF0KGkpLT5zdGF0ZUVudGVyZWQoKTsKLSAgICB9Ci19Ci0KLX0gIC8vIG5hbWVzcGFjZSBhbmRyb2lkCmRpZmYgLS1naXQgYS9tZWRpYS9saWJzdGFnZWZyaWdodC9mb3VuZGF0aW9uL0FMb29wZXIuY3BwIGIvbWVkaWEvbGlic3RhZ2VmcmlnaHQvZm91bmRhdGlvbi9BTG9vcGVyLmNwcAppbmRleCA5OTIxNjM2Li43NjhjYmQ2IDEwMDY0NAotLS0gYS9tZWRpYS9saWJzdGFnZWZyaWdodC9mb3VuZGF0aW9uL0FMb29wZXIuY3BwCisrKyBiL21lZGlhL2xpYnN0YWdlZnJpZ2h0L2ZvdW5kYXRpb24vQUxvb3Blci5jcHAKQEAgLTE3MCw3ICsxNzAsOSBAQAogCiAgICAgaW50NjRfdCB3aGVuVXM7CiAgICAgaWYgKGRlbGF5VXMgPiAwKSB7Ci0gICAgICAgIHdoZW5VcyA9IEdldE5vd1VzKCkgKyBkZWxheVVzOworICAgICAgICBpbnQ2NF90IG5vd1VzID0gR2V0Tm93VXMoKTsKKyAgICAgICAgd2hlblVzID0gKGRlbGF5VXMgPiBJTlQ2NF9NQVggLSBub3dVcyA/IElOVDY0X01BWCA6IG5vd1VzICsgZGVsYXlVcyk7CisKICAgICB9IGVsc2UgewogICAgICAgICB3aGVuVXMgPSBHZXROb3dVcygpOwogICAgIH0KQEAgLTIwOCw2ICsyMTAsOSBAQAogCiAgICAgICAgIGlmICh3aGVuVXMgPiBub3dVcykgewogICAgICAgICAgICAgaW50NjRfdCBkZWxheVVzID0gd2hlblVzIC0gbm93VXM7CisgICAgICAgICAgICBpZiAoZGVsYXlVcyA+IElOVDY0X01BWCAvIDEwMDApIHsKKyAgICAgICAgICAgICAgICBkZWxheVVzID0gSU5UNjRfTUFYIC8gMTAwMDsKKyAgICAgICAgICAgIH0KICAgICAgICAgICAgIG1RdWV1ZUNoYW5nZWRDb25kaXRpb24ud2FpdFJlbGF0aXZlKG1Mb2NrLCBkZWxheVVzICogMTAwMGxsKTsKIAogICAgICAgICAgICAgcmV0dXJuIHRydWU7CmRpZmYgLS1naXQgYS9tZWRpYS9saWJzdGFnZWZyaWdodC9mb3VuZGF0aW9uL0FOZXR3b3JrU2Vzc2lvbi5jcHAgYi9tZWRpYS9saWJzdGFnZWZyaWdodC9mb3VuZGF0aW9uL0FOZXR3b3JrU2Vzc2lvbi5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGVhZmRjMzcuLjAwMDAwMDAKLS0tIGEvbWVkaWEvbGlic3RhZ2VmcmlnaHQvZm91bmRhdGlvbi9BTmV0d29ya1Nlc3Npb24uY3BwCisrKyAvZGV2L251bGwKQEAgLTEsMTQwMSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IDIwMTIsIFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKLSAqCi0gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKLSAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KLSAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotICoKLSAqICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLSAqCi0gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCi0gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAotICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCi0gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCi0gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KLSAqLwotCi0vLyNkZWZpbmUgTE9HX05ERUJVRyAwCi0jZGVmaW5lIExPR19UQUcgIk5ldHdvcmtTZXNzaW9uIgotI2luY2x1ZGUgPHV0aWxzL0xvZy5oPgotCi0jaW5jbHVkZSAiQU5ldHdvcmtTZXNzaW9uLmgiCi0jaW5jbHVkZSAiUGFyc2VkTWVzc2FnZS5oIgotCi0jaW5jbHVkZSA8YXJwYS9pbmV0Lmg+Ci0jaW5jbHVkZSA8ZmNudGwuaD4KLSNpbmNsdWRlIDxsaW51eC90Y3AuaD4KLSNpbmNsdWRlIDxuZXQvaWYuaD4KLSNpbmNsdWRlIDxuZXRkYi5oPgotI2luY2x1ZGUgPG5ldGluZXQvaW4uaD4KLSNpbmNsdWRlIDxzeXMvaW9jdGwuaD4KLSNpbmNsdWRlIDxzeXMvc29ja2V0Lmg+Ci0KLSNpbmNsdWRlIDxtZWRpYS9zdGFnZWZyaWdodC9mb3VuZGF0aW9uL0FCdWZmZXIuaD4KLSNpbmNsdWRlIDxtZWRpYS9zdGFnZWZyaWdodC9mb3VuZGF0aW9uL0FEZWJ1Zy5oPgotI2luY2x1ZGUgPG1lZGlhL3N0YWdlZnJpZ2h0L2ZvdW5kYXRpb24vQU1lc3NhZ2UuaD4KLSNpbmNsdWRlIDxtZWRpYS9zdGFnZWZyaWdodC9mb3VuZGF0aW9uL0J5dGVVdGlscy5oPgotI2luY2x1ZGUgPG1lZGlhL3N0YWdlZnJpZ2h0L2ZvdW5kYXRpb24vaGV4ZHVtcC5oPgotCi1uYW1lc3BhY2UgYW5kcm9pZCB7Ci0KLXN0YXRpYyBjb25zdCBzaXplX3Qga01heFVEUFNpemUgPSAxNTAwOwotc3RhdGljIGNvbnN0IGludDMyX3Qga01heFVEUFJldHJpZXMgPSAyMDA7Ci0KLXN0cnVjdCBBTmV0d29ya1Nlc3Npb246Ok5ldHdvcmtUaHJlYWQgOiBwdWJsaWMgVGhyZWFkIHsKLSAgICBleHBsaWNpdCBOZXR3b3JrVGhyZWFkKEFOZXR3b3JrU2Vzc2lvbiAqc2Vzc2lvbik7Ci0KLXByb3RlY3RlZDoKLSAgICB2aXJ0dWFsIH5OZXR3b3JrVGhyZWFkKCk7Ci0KLXByaXZhdGU6Ci0gICAgQU5ldHdvcmtTZXNzaW9uICptU2Vzc2lvbjsKLQotICAgIHZpcnR1YWwgYm9vbCB0aHJlYWRMb29wKCk7Ci0KLSAgICBESVNBTExPV19FVklMX0NPTlNUUlVDVE9SUyhOZXR3b3JrVGhyZWFkKTsKLX07Ci0KLXN0cnVjdCBBTmV0d29ya1Nlc3Npb246OlNlc3Npb24gOiBwdWJsaWMgUmVmQmFzZSB7Ci0gICAgZW51bSBNb2RlIHsKLSAgICAgICAgTU9ERV9SVFNQLAotICAgICAgICBNT0RFX0RBVEFHUkFNLAotICAgICAgICBNT0RFX1dFQlNPQ0tFVCwKLSAgICB9OwotCi0gICAgZW51bSBTdGF0ZSB7Ci0gICAgICAgIENPTk5FQ1RJTkcsCi0gICAgICAgIENPTk5FQ1RFRCwKLSAgICAgICAgTElTVEVOSU5HX1JUU1AsCi0gICAgICAgIExJU1RFTklOR19UQ1BfREdSQU1TLAotICAgICAgICBEQVRBR1JBTSwKLSAgICB9OwotCi0gICAgU2Vzc2lvbihpbnQzMl90IHNlc3Npb25JRCwKLSAgICAgICAgICAgIFN0YXRlIHN0YXRlLAotICAgICAgICAgICAgaW50IHMsCi0gICAgICAgICAgICBjb25zdCBzcDxBTWVzc2FnZT4gJm5vdGlmeSk7Ci0KLSAgICBpbnQzMl90IHNlc3Npb25JRCgpIGNvbnN0OwotICAgIGludCBzb2NrZXQoKSBjb25zdDsKLSAgICBzcDxBTWVzc2FnZT4gZ2V0Tm90aWZpY2F0aW9uTWVzc2FnZSgpIGNvbnN0OwotCi0gICAgYm9vbCBpc1JUU1BTZXJ2ZXIoKSBjb25zdDsKLSAgICBib29sIGlzVENQRGF0YWdyYW1TZXJ2ZXIoKSBjb25zdDsKLQotICAgIGJvb2wgd2FudHNUb1JlYWQoKTsKLSAgICBib29sIHdhbnRzVG9Xcml0ZSgpOwotCi0gICAgc3RhdHVzX3QgcmVhZE1vcmUoKTsKLSAgICBzdGF0dXNfdCB3cml0ZU1vcmUoKTsKLQotICAgIHN0YXR1c190IHNlbmRSZXF1ZXN0KAotICAgICAgICAgICAgY29uc3Qgdm9pZCAqZGF0YSwgc3NpemVfdCBzaXplLCBib29sIHRpbWVWYWxpZCwgaW50NjRfdCB0aW1lVXMpOwotCi0gICAgdm9pZCBzZXRNb2RlKE1vZGUgbW9kZSk7Ci0KLSAgICBzdGF0dXNfdCBzd2l0Y2hUb1dlYlNvY2tldE1vZGUoKTsKLQotcHJvdGVjdGVkOgotICAgIHZpcnR1YWwgflNlc3Npb24oKTsKLQotcHJpdmF0ZToKLSAgICBlbnVtIHsKLSAgICAgICAgRlJBR01FTlRfRkxBR19USU1FX1ZBTElEID0gMSwKLSAgICB9OwotICAgIHN0cnVjdCBGcmFnbWVudCB7Ci0gICAgICAgIHVpbnQzMl90IG1GbGFnczsKLSAgICAgICAgaW50NjRfdCBtVGltZVVzOwotICAgICAgICBzcDxBQnVmZmVyPiBtQnVmZmVyOwotICAgIH07Ci0KLSAgICBpbnQzMl90IG1TZXNzaW9uSUQ7Ci0gICAgU3RhdGUgbVN0YXRlOwotICAgIE1vZGUgbU1vZGU7Ci0gICAgaW50IG1Tb2NrZXQ7Ci0gICAgc3A8QU1lc3NhZ2U+IG1Ob3RpZnk7Ci0gICAgYm9vbCBtU2F3UmVjZWl2ZUZhaWx1cmUsIG1TYXdTZW5kRmFpbHVyZTsKLSAgICBpbnQzMl90IG1VRFBSZXRyaWVzOwotCi0gICAgTGlzdDxGcmFnbWVudD4gbU91dEZyYWdtZW50czsKLQotICAgIEFTdHJpbmcgbUluQnVmZmVyOwotCi0gICAgaW50NjRfdCBtTGFzdFN0YWxsUmVwb3J0VXM7Ci0KLSAgICB2b2lkIG5vdGlmeUVycm9yKGJvb2wgc2VuZCwgc3RhdHVzX3QgZXJyLCBjb25zdCBjaGFyICpkZXRhaWwpOwotICAgIHZvaWQgbm90aWZ5KE5vdGlmaWNhdGlvblJlYXNvbiByZWFzb24pOwotCi0gICAgdm9pZCBkdW1wRnJhZ21lbnRTdGF0cyhjb25zdCBGcmFnbWVudCAmZnJhZyk7Ci0KLSAgICBESVNBTExPV19FVklMX0NPTlNUUlVDVE9SUyhTZXNzaW9uKTsKLX07Ci0vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLwotCi1BTmV0d29ya1Nlc3Npb246Ok5ldHdvcmtUaHJlYWQ6Ok5ldHdvcmtUaHJlYWQoQU5ldHdvcmtTZXNzaW9uICpzZXNzaW9uKQotICAgIDogbVNlc3Npb24oc2Vzc2lvbikgewotfQotCi1BTmV0d29ya1Nlc3Npb246Ok5ldHdvcmtUaHJlYWQ6On5OZXR3b3JrVGhyZWFkKCkgewotfQotCi1ib29sIEFOZXR3b3JrU2Vzc2lvbjo6TmV0d29ya1RocmVhZDo6dGhyZWFkTG9vcCgpIHsKLSAgICBtU2Vzc2lvbi0+dGhyZWFkTG9vcCgpOwotCi0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLS8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCi0KLUFOZXR3b3JrU2Vzc2lvbjo6U2Vzc2lvbjo6U2Vzc2lvbigKLSAgICAgICAgaW50MzJfdCBzZXNzaW9uSUQsCi0gICAgICAgIFN0YXRlIHN0YXRlLAotICAgICAgICBpbnQgcywKLSAgICAgICAgY29uc3Qgc3A8QU1lc3NhZ2U+ICZub3RpZnkpCi0gICAgOiBtU2Vzc2lvbklEKHNlc3Npb25JRCksCi0gICAgICBtU3RhdGUoc3RhdGUpLAotICAgICAgbU1vZGUoTU9ERV9EQVRBR1JBTSksCi0gICAgICBtU29ja2V0KHMpLAotICAgICAgbU5vdGlmeShub3RpZnkpLAotICAgICAgbVNhd1JlY2VpdmVGYWlsdXJlKGZhbHNlKSwKLSAgICAgIG1TYXdTZW5kRmFpbHVyZShmYWxzZSksCi0gICAgICBtVURQUmV0cmllcyhrTWF4VURQUmV0cmllcyksCi0gICAgICBtTGFzdFN0YWxsUmVwb3J0VXMoLTFsbCkgewotICAgIGlmIChtU3RhdGUgPT0gQ09OTkVDVEVEKSB7Ci0gICAgICAgIHN0cnVjdCBzb2NrYWRkcl9pbiBsb2NhbEFkZHI7Ci0gICAgICAgIHNvY2tsZW5fdCBsb2NhbEFkZHJMZW4gPSBzaXplb2YobG9jYWxBZGRyKTsKLQotICAgICAgICBpbnQgcmVzID0gZ2V0c29ja25hbWUoCi0gICAgICAgICAgICAgICAgbVNvY2tldCwgKHN0cnVjdCBzb2NrYWRkciAqKSZsb2NhbEFkZHIsICZsb2NhbEFkZHJMZW4pOwotICAgICAgICBDSEVDS19HRShyZXMsIDApOwotCi0gICAgICAgIHN0cnVjdCBzb2NrYWRkcl9pbiByZW1vdGVBZGRyOwotICAgICAgICBzb2NrbGVuX3QgcmVtb3RlQWRkckxlbiA9IHNpemVvZihyZW1vdGVBZGRyKTsKLQotICAgICAgICByZXMgPSBnZXRwZWVybmFtZSgKLSAgICAgICAgICAgICAgICBtU29ja2V0LCAoc3RydWN0IHNvY2thZGRyICopJnJlbW90ZUFkZHIsICZyZW1vdGVBZGRyTGVuKTsKLSAgICAgICAgQ0hFQ0tfR0UocmVzLCAwKTsKLQotICAgICAgICBpbl9hZGRyX3QgYWRkciA9IG50b2hsKGxvY2FsQWRkci5zaW5fYWRkci5zX2FkZHIpOwotICAgICAgICBBU3RyaW5nIGxvY2FsQWRkclN0cmluZyA9IEFTdHJpbmdQcmludGYoCi0gICAgICAgICAgICAgICAgIiVkLiVkLiVkLiVkIiwKLSAgICAgICAgICAgICAgICAoYWRkciA+PiAyNCksCi0gICAgICAgICAgICAgICAgKGFkZHIgPj4gMTYpICYgMHhmZiwKLSAgICAgICAgICAgICAgICAoYWRkciA+PiA4KSAmIDB4ZmYsCi0gICAgICAgICAgICAgICAgYWRkciAmIDB4ZmYpOwotCi0gICAgICAgIGFkZHIgPSBudG9obChyZW1vdGVBZGRyLnNpbl9hZGRyLnNfYWRkcik7Ci0gICAgICAgIEFTdHJpbmcgcmVtb3RlQWRkclN0cmluZyA9IEFTdHJpbmdQcmludGYoCi0gICAgICAgICAgICAgICAgIiVkLiVkLiVkLiVkIiwKLSAgICAgICAgICAgICAgICAoYWRkciA+PiAyNCksCi0gICAgICAgICAgICAgICAgKGFkZHIgPj4gMTYpICYgMHhmZiwKLSAgICAgICAgICAgICAgICAoYWRkciA+PiA4KSAmIDB4ZmYsCi0gICAgICAgICAgICAgICAgYWRkciAmIDB4ZmYpOwotCi0gICAgICAgIHNwPEFNZXNzYWdlPiBtc2cgPSBtTm90aWZ5LT5kdXAoKTsKLSAgICAgICAgbXNnLT5zZXRJbnQzMigic2Vzc2lvbklEIiwgbVNlc3Npb25JRCk7Ci0gICAgICAgIG1zZy0+c2V0SW50MzIoInJlYXNvbiIsIGtXaGF0Q2xpZW50Q29ubmVjdGVkKTsKLSAgICAgICAgbXNnLT5zZXRTdHJpbmcoInNlcnZlci1pcCIsIGxvY2FsQWRkclN0cmluZy5jX3N0cigpKTsKLSAgICAgICAgbXNnLT5zZXRJbnQzMigic2VydmVyLXBvcnQiLCBudG9ocyhsb2NhbEFkZHIuc2luX3BvcnQpKTsKLSAgICAgICAgbXNnLT5zZXRTdHJpbmcoImNsaWVudC1pcCIsIHJlbW90ZUFkZHJTdHJpbmcuY19zdHIoKSk7Ci0gICAgICAgIG1zZy0+c2V0SW50MzIoImNsaWVudC1wb3J0IiwgbnRvaHMocmVtb3RlQWRkci5zaW5fcG9ydCkpOwotICAgICAgICBtc2ctPnBvc3QoKTsKLSAgICB9Ci19Ci0KLUFOZXR3b3JrU2Vzc2lvbjo6U2Vzc2lvbjo6flNlc3Npb24oKSB7Ci0gICAgQUxPR1YoIlNlc3Npb24gJWQgZ29uZSIsIG1TZXNzaW9uSUQpOwotCi0gICAgY2xvc2UobVNvY2tldCk7Ci0gICAgbVNvY2tldCA9IC0xOwotfQotCi1pbnQzMl90IEFOZXR3b3JrU2Vzc2lvbjo6U2Vzc2lvbjo6c2Vzc2lvbklEKCkgY29uc3QgewotICAgIHJldHVybiBtU2Vzc2lvbklEOwotfQotCi1pbnQgQU5ldHdvcmtTZXNzaW9uOjpTZXNzaW9uOjpzb2NrZXQoKSBjb25zdCB7Ci0gICAgcmV0dXJuIG1Tb2NrZXQ7Ci19Ci0KLXZvaWQgQU5ldHdvcmtTZXNzaW9uOjpTZXNzaW9uOjpzZXRNb2RlKE1vZGUgbW9kZSkgewotICAgIG1Nb2RlID0gbW9kZTsKLX0KLQotc3RhdHVzX3QgQU5ldHdvcmtTZXNzaW9uOjpTZXNzaW9uOjpzd2l0Y2hUb1dlYlNvY2tldE1vZGUoKSB7Ci0gICAgaWYgKG1TdGF0ZSAhPSBDT05ORUNURUQgfHwgbU1vZGUgIT0gTU9ERV9SVFNQKSB7Ci0gICAgICAgIHJldHVybiBJTlZBTElEX09QRVJBVElPTjsKLSAgICB9Ci0KLSAgICBtTW9kZSA9IE1PREVfV0VCU09DS0VUOwotCi0gICAgcmV0dXJuIE9LOwotfQotCi1zcDxBTWVzc2FnZT4gQU5ldHdvcmtTZXNzaW9uOjpTZXNzaW9uOjpnZXROb3RpZmljYXRpb25NZXNzYWdlKCkgY29uc3QgewotICAgIHJldHVybiBtTm90aWZ5OwotfQotCi1ib29sIEFOZXR3b3JrU2Vzc2lvbjo6U2Vzc2lvbjo6aXNSVFNQU2VydmVyKCkgY29uc3QgewotICAgIHJldHVybiBtU3RhdGUgPT0gTElTVEVOSU5HX1JUU1A7Ci19Ci0KLWJvb2wgQU5ldHdvcmtTZXNzaW9uOjpTZXNzaW9uOjppc1RDUERhdGFncmFtU2VydmVyKCkgY29uc3QgewotICAgIHJldHVybiBtU3RhdGUgPT0gTElTVEVOSU5HX1RDUF9ER1JBTVM7Ci19Ci0KLWJvb2wgQU5ldHdvcmtTZXNzaW9uOjpTZXNzaW9uOjp3YW50c1RvUmVhZCgpIHsKLSAgICByZXR1cm4gIW1TYXdSZWNlaXZlRmFpbHVyZSAmJiBtU3RhdGUgIT0gQ09OTkVDVElORzsKLX0KLQotYm9vbCBBTmV0d29ya1Nlc3Npb246OlNlc3Npb246OndhbnRzVG9Xcml0ZSgpIHsKLSAgICByZXR1cm4gIW1TYXdTZW5kRmFpbHVyZQotICAgICAgICAmJiAobVN0YXRlID09IENPTk5FQ1RJTkcKLSAgICAgICAgICAgIHx8IChtU3RhdGUgPT0gQ09OTkVDVEVEICYmICFtT3V0RnJhZ21lbnRzLmVtcHR5KCkpCi0gICAgICAgICAgICB8fCAobVN0YXRlID09IERBVEFHUkFNICYmICFtT3V0RnJhZ21lbnRzLmVtcHR5KCkpKTsKLX0KLQotc3RhdHVzX3QgQU5ldHdvcmtTZXNzaW9uOjpTZXNzaW9uOjpyZWFkTW9yZSgpIHsKLSAgICBpZiAobVN0YXRlID09IERBVEFHUkFNKSB7Ci0gICAgICAgIENIRUNLX0VRKG1Nb2RlLCBNT0RFX0RBVEFHUkFNKTsKLQotICAgICAgICBzdGF0dXNfdCBlcnI7Ci0gICAgICAgIGRvIHsKLSAgICAgICAgICAgIHNwPEFCdWZmZXI+IGJ1ZiA9IG5ldyBBQnVmZmVyKGtNYXhVRFBTaXplKTsKLQotICAgICAgICAgICAgc3RydWN0IHNvY2thZGRyX2luIHJlbW90ZUFkZHI7Ci0gICAgICAgICAgICBzb2NrbGVuX3QgcmVtb3RlQWRkckxlbiA9IHNpemVvZihyZW1vdGVBZGRyKTsKLQotICAgICAgICAgICAgc3NpemVfdCBuOwotICAgICAgICAgICAgZG8gewotICAgICAgICAgICAgICAgIG4gPSByZWN2ZnJvbSgKLSAgICAgICAgICAgICAgICAgICAgICAgIG1Tb2NrZXQsIGJ1Zi0+ZGF0YSgpLCBidWYtPmNhcGFjaXR5KCksIDAsCi0gICAgICAgICAgICAgICAgICAgICAgICAoc3RydWN0IHNvY2thZGRyICopJnJlbW90ZUFkZHIsICZyZW1vdGVBZGRyTGVuKTsKLSAgICAgICAgICAgIH0gd2hpbGUgKG4gPCAwICYmIGVycm5vID09IEVJTlRSKTsKLQotICAgICAgICAgICAgZXJyID0gT0s7Ci0gICAgICAgICAgICBpZiAobiA8IDApIHsKLSAgICAgICAgICAgICAgICBlcnIgPSAtZXJybm87Ci0gICAgICAgICAgICB9IGVsc2UgaWYgKG4gPT0gMCkgewotICAgICAgICAgICAgICAgIGVyciA9IC1FQ09OTlJFU0VUOwotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICBidWYtPnNldFJhbmdlKDAsIG4pOwotCi0gICAgICAgICAgICAgICAgaW50NjRfdCBub3dVcyA9IEFMb29wZXI6OkdldE5vd1VzKCk7Ci0gICAgICAgICAgICAgICAgYnVmLT5tZXRhKCktPnNldEludDY0KCJhcnJpdmFsVGltZVVzIiwgbm93VXMpOwotCi0gICAgICAgICAgICAgICAgc3A8QU1lc3NhZ2U+IG5vdGlmeSA9IG1Ob3RpZnktPmR1cCgpOwotICAgICAgICAgICAgICAgIG5vdGlmeS0+c2V0SW50MzIoInNlc3Npb25JRCIsIG1TZXNzaW9uSUQpOwotICAgICAgICAgICAgICAgIG5vdGlmeS0+c2V0SW50MzIoInJlYXNvbiIsIGtXaGF0RGF0YWdyYW0pOwotCi0gICAgICAgICAgICAgICAgdWludDMyX3QgaXAgPSBudG9obChyZW1vdGVBZGRyLnNpbl9hZGRyLnNfYWRkcik7Ci0gICAgICAgICAgICAgICAgbm90aWZ5LT5zZXRTdHJpbmcoCi0gICAgICAgICAgICAgICAgICAgICAgICAiZnJvbUFkZHIiLAotICAgICAgICAgICAgICAgICAgICAgICAgQVN0cmluZ1ByaW50ZigKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAiJXUuJXUuJXUuJXUiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlwID4+IDI0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIChpcCA+PiAxNikgJiAweGZmLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIChpcCA+PiA4KSAmIDB4ZmYsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgaXAgJiAweGZmKS5jX3N0cigpKTsKLQotICAgICAgICAgICAgICAgIG5vdGlmeS0+c2V0SW50MzIoImZyb21Qb3J0IiwgbnRvaHMocmVtb3RlQWRkci5zaW5fcG9ydCkpOwotCi0gICAgICAgICAgICAgICAgbm90aWZ5LT5zZXRCdWZmZXIoImRhdGEiLCBidWYpOwotICAgICAgICAgICAgICAgIG5vdGlmeS0+cG9zdCgpOwotICAgICAgICAgICAgfQotICAgICAgICB9IHdoaWxlIChlcnIgPT0gT0spOwotCi0gICAgICAgIGlmIChlcnIgPT0gLUVBR0FJTikgewotICAgICAgICAgICAgZXJyID0gT0s7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoZXJyICE9IE9LKSB7Ci0gICAgICAgICAgICBpZiAoIW1VRFBSZXRyaWVzKSB7Ci0gICAgICAgICAgICAgICAgbm90aWZ5RXJyb3IoZmFsc2UgLyogc2VuZCAqLywgZXJyLCAiUmVjdmZyb20gZmFpbGVkLiIpOwotICAgICAgICAgICAgICAgIG1TYXdSZWNlaXZlRmFpbHVyZSA9IHRydWU7Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIG1VRFBSZXRyaWVzLS07Ci0gICAgICAgICAgICAgICAgQUxPR0UoIlJlY3Zmcm9tIGZhaWxlZCwgJWQvJWQgcmV0cmllcyBsZWZ0IiwKLSAgICAgICAgICAgICAgICAgICAgICAgIG1VRFBSZXRyaWVzLCBrTWF4VURQUmV0cmllcyk7Ci0gICAgICAgICAgICAgICAgZXJyID0gT0s7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBtVURQUmV0cmllcyA9IGtNYXhVRFBSZXRyaWVzOwotICAgICAgICB9Ci0KLSAgICAgICAgcmV0dXJuIGVycjsKLSAgICB9Ci0KLSAgICBjaGFyIHRtcFs1MTJdOwotICAgIHNzaXplX3QgbjsKLSAgICBkbyB7Ci0gICAgICAgIG4gPSByZWN2KG1Tb2NrZXQsIHRtcCwgc2l6ZW9mKHRtcCksIDApOwotICAgIH0gd2hpbGUgKG4gPCAwICYmIGVycm5vID09IEVJTlRSKTsKLQotICAgIHN0YXR1c190IGVyciA9IE9LOwotCi0gICAgaWYgKG4gPiAwKSB7Ci0gICAgICAgIG1JbkJ1ZmZlci5hcHBlbmQodG1wLCBuKTsKLQotI2lmIDAKLSAgICAgICAgQUxPR0koImluOiIpOwotICAgICAgICBoZXhkdW1wKHRtcCwgbik7Ci0jZW5kaWYKLSAgICB9IGVsc2UgaWYgKG4gPCAwKSB7Ci0gICAgICAgIGVyciA9IC1lcnJubzsKLSAgICB9IGVsc2UgewotICAgICAgICBlcnIgPSAtRUNPTk5SRVNFVDsKLSAgICB9Ci0KLSAgICBpZiAobU1vZGUgPT0gTU9ERV9EQVRBR1JBTSkgewotICAgICAgICAvLyBUQ1Agc3RyZWFtIGNhcnJ5aW5nIDE2LWJpdCBsZW5ndGgtcHJlZml4ZWQgZGF0YWdyYW1zLgotCi0gICAgICAgIHdoaWxlIChtSW5CdWZmZXIuc2l6ZSgpID49IDIpIHsKLSAgICAgICAgICAgIHNpemVfdCBwYWNrZXRTaXplID0gVTE2X0FUKChjb25zdCB1aW50OF90ICopbUluQnVmZmVyLmNfc3RyKCkpOwotCi0gICAgICAgICAgICBpZiAobUluQnVmZmVyLnNpemUoKSA8IHBhY2tldFNpemUgKyAyKSB7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIHNwPEFCdWZmZXI+IHBhY2tldCA9IG5ldyBBQnVmZmVyKHBhY2tldFNpemUpOwotICAgICAgICAgICAgbWVtY3B5KHBhY2tldC0+ZGF0YSgpLCBtSW5CdWZmZXIuY19zdHIoKSArIDIsIHBhY2tldFNpemUpOwotCi0gICAgICAgICAgICBpbnQ2NF90IG5vd1VzID0gQUxvb3Blcjo6R2V0Tm93VXMoKTsKLSAgICAgICAgICAgIHBhY2tldC0+bWV0YSgpLT5zZXRJbnQ2NCgiYXJyaXZhbFRpbWVVcyIsIG5vd1VzKTsKLQotICAgICAgICAgICAgc3A8QU1lc3NhZ2U+IG5vdGlmeSA9IG1Ob3RpZnktPmR1cCgpOwotICAgICAgICAgICAgbm90aWZ5LT5zZXRJbnQzMigic2Vzc2lvbklEIiwgbVNlc3Npb25JRCk7Ci0gICAgICAgICAgICBub3RpZnktPnNldEludDMyKCJyZWFzb24iLCBrV2hhdERhdGFncmFtKTsKLSAgICAgICAgICAgIG5vdGlmeS0+c2V0QnVmZmVyKCJkYXRhIiwgcGFja2V0KTsKLSAgICAgICAgICAgIG5vdGlmeS0+cG9zdCgpOwotCi0gICAgICAgICAgICBtSW5CdWZmZXIuZXJhc2UoMCwgcGFja2V0U2l6ZSArIDIpOwotICAgICAgICB9Ci0gICAgfSBlbHNlIGlmIChtTW9kZSA9PSBNT0RFX1JUU1ApIHsKLSAgICAgICAgZm9yICg7OykgewotICAgICAgICAgICAgc2l6ZV90IGxlbmd0aDsKLQotICAgICAgICAgICAgaWYgKG1JbkJ1ZmZlci5zaXplKCkgPiAwICYmIG1JbkJ1ZmZlci5jX3N0cigpWzBdID09ICckJykgewotICAgICAgICAgICAgICAgIGlmIChtSW5CdWZmZXIuc2l6ZSgpIDwgNCkgewotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICBsZW5ndGggPSBVMTZfQVQoKGNvbnN0IHVpbnQ4X3QgKiltSW5CdWZmZXIuY19zdHIoKSArIDIpOwotCi0gICAgICAgICAgICAgICAgaWYgKG1JbkJ1ZmZlci5zaXplKCkgPCA0ICsgbGVuZ3RoKSB7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIHNwPEFNZXNzYWdlPiBub3RpZnkgPSBtTm90aWZ5LT5kdXAoKTsKLSAgICAgICAgICAgICAgICBub3RpZnktPnNldEludDMyKCJzZXNzaW9uSUQiLCBtU2Vzc2lvbklEKTsKLSAgICAgICAgICAgICAgICBub3RpZnktPnNldEludDMyKCJyZWFzb24iLCBrV2hhdEJpbmFyeURhdGEpOwotICAgICAgICAgICAgICAgIG5vdGlmeS0+c2V0SW50MzIoImNoYW5uZWwiLCBtSW5CdWZmZXIuY19zdHIoKVsxXSk7Ci0KLSAgICAgICAgICAgICAgICBzcDxBQnVmZmVyPiBkYXRhID0gbmV3IEFCdWZmZXIobGVuZ3RoKTsKLSAgICAgICAgICAgICAgICBtZW1jcHkoZGF0YS0+ZGF0YSgpLCBtSW5CdWZmZXIuY19zdHIoKSArIDQsIGxlbmd0aCk7Ci0KLSAgICAgICAgICAgICAgICBpbnQ2NF90IG5vd1VzID0gQUxvb3Blcjo6R2V0Tm93VXMoKTsKLSAgICAgICAgICAgICAgICBkYXRhLT5tZXRhKCktPnNldEludDY0KCJhcnJpdmFsVGltZVVzIiwgbm93VXMpOwotCi0gICAgICAgICAgICAgICAgbm90aWZ5LT5zZXRCdWZmZXIoImRhdGEiLCBkYXRhKTsKLSAgICAgICAgICAgICAgICBub3RpZnktPnBvc3QoKTsKLQotICAgICAgICAgICAgICAgIG1JbkJ1ZmZlci5lcmFzZSgwLCA0ICsgbGVuZ3RoKTsKLSAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgc3A8UGFyc2VkTWVzc2FnZT4gbXNnID0KLSAgICAgICAgICAgICAgICBQYXJzZWRNZXNzYWdlOjpQYXJzZSgKLSAgICAgICAgICAgICAgICAgICAgICAgIG1JbkJ1ZmZlci5jX3N0cigpLCBtSW5CdWZmZXIuc2l6ZSgpLCBlcnIgIT0gT0ssICZsZW5ndGgpOwotCi0gICAgICAgICAgICBpZiAobXNnID09IE5VTEwpIHsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgc3A8QU1lc3NhZ2U+IG5vdGlmeSA9IG1Ob3RpZnktPmR1cCgpOwotICAgICAgICAgICAgbm90aWZ5LT5zZXRJbnQzMigic2Vzc2lvbklEIiwgbVNlc3Npb25JRCk7Ci0gICAgICAgICAgICBub3RpZnktPnNldEludDMyKCJyZWFzb24iLCBrV2hhdERhdGEpOwotICAgICAgICAgICAgbm90aWZ5LT5zZXRPYmplY3QoImRhdGEiLCBtc2cpOwotICAgICAgICAgICAgbm90aWZ5LT5wb3N0KCk7Ci0KLSNpZiAxCi0gICAgICAgICAgICAvLyBYWFggVGhlIChvbGQpIGRvbmdsZSBzZW5kcyB0aGUgd3JvbmcgY29udGVudCBsZW5ndGggaGVhZGVyIG9uIGEKLSAgICAgICAgICAgIC8vIFNFVF9QQVJBTUVURVIgcmVxdWVzdCB0aGF0IHNpZ25hbHMgYSAid2ZkX2lkcl9yZXF1ZXN0Ii4KLSAgICAgICAgICAgIC8vICgxNyBpbnN0ZWFkIG9mIDE5KS4KLSAgICAgICAgICAgIGNvbnN0IGNoYXIgKmNvbnRlbnQgPSBtc2ctPmdldENvbnRlbnQoKTsKLSAgICAgICAgICAgIGlmIChjb250ZW50Ci0gICAgICAgICAgICAgICAgICAgICYmICFtZW1jbXAoY29udGVudCwgIndmZF9pZHJfcmVxdWVzdFxyXG4iLCAxNykKLSAgICAgICAgICAgICAgICAgICAgJiYgbGVuZ3RoID49IDE5Ci0gICAgICAgICAgICAgICAgICAgICYmIG1JbkJ1ZmZlci5jX3N0cigpW2xlbmd0aF0gPT0gJ1xyJwotICAgICAgICAgICAgICAgICAgICAmJiBtSW5CdWZmZXIuY19zdHIoKVtsZW5ndGggKyAxXSA9PSAnXG4nKSB7Ci0gICAgICAgICAgICAgICAgbGVuZ3RoICs9IDI7Ci0gICAgICAgICAgICB9Ci0jZW5kaWYKLQotICAgICAgICAgICAgbUluQnVmZmVyLmVyYXNlKDAsIGxlbmd0aCk7Ci0KLSAgICAgICAgICAgIGlmIChlcnIgIT0gT0spIHsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0gZWxzZSB7Ci0gICAgICAgIENIRUNLX0VRKG1Nb2RlLCBNT0RFX1dFQlNPQ0tFVCk7Ci0KLSAgICAgICAgY29uc3QgdWludDhfdCAqZGF0YSA9IChjb25zdCB1aW50OF90ICopbUluQnVmZmVyLmNfc3RyKCk7Ci0gICAgICAgIC8vIGhleGR1bXAoZGF0YSwgbUluQnVmZmVyLnNpemUoKSk7Ci0KLSAgICAgICAgd2hpbGUgKG1JbkJ1ZmZlci5zaXplKCkgPj0gMikgewotICAgICAgICAgICAgc2l6ZV90IG9mZnNldCA9IDI7Ci0KLSAgICAgICAgICAgIHVpbnQ2NF90IHBheWxvYWRMZW4gPSBkYXRhWzFdICYgMHg3ZjsKLSAgICAgICAgICAgIGlmIChwYXlsb2FkTGVuID09IDEyNikgewotICAgICAgICAgICAgICAgIGlmIChvZmZzZXQgKyAyID4gbUluQnVmZmVyLnNpemUoKSkgewotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICBwYXlsb2FkTGVuID0gVTE2X0FUKCZkYXRhW29mZnNldF0pOwotICAgICAgICAgICAgICAgIG9mZnNldCArPSAyOwotICAgICAgICAgICAgfSBlbHNlIGlmIChwYXlsb2FkTGVuID09IDEyNykgewotICAgICAgICAgICAgICAgIGlmIChvZmZzZXQgKyA4ID4gbUluQnVmZmVyLnNpemUoKSkgewotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICBwYXlsb2FkTGVuID0gVTY0X0FUKCZkYXRhW29mZnNldF0pOwotICAgICAgICAgICAgICAgIG9mZnNldCArPSA4OwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICB1aW50MzJfdCBtYXNrID0gMDsKLSAgICAgICAgICAgIGlmIChkYXRhWzFdICYgMHg4MCkgewotICAgICAgICAgICAgICAgIC8vIE1BU0s9PTEKLSAgICAgICAgICAgICAgICBpZiAob2Zmc2V0ICsgNCA+IG1JbkJ1ZmZlci5zaXplKCkpIHsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgbWFzayA9IFUzMl9BVCgmZGF0YVtvZmZzZXRdKTsKLSAgICAgICAgICAgICAgICBvZmZzZXQgKz0gNDsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgaWYgKHBheWxvYWRMZW4gPiBtSW5CdWZmZXIuc2l6ZSgpIHx8IG9mZnNldCA+IG1JbkJ1ZmZlci5zaXplKCkgLSBwYXlsb2FkTGVuKSB7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIC8vIFdlIGhhdmUgdGhlIGZ1bGwgbWVzc2FnZS4KLQotICAgICAgICAgICAgc3A8QUJ1ZmZlcj4gcGFja2V0ID0gbmV3IEFCdWZmZXIocGF5bG9hZExlbik7Ci0gICAgICAgICAgICBtZW1jcHkocGFja2V0LT5kYXRhKCksICZkYXRhW29mZnNldF0sIHBheWxvYWRMZW4pOwotCi0gICAgICAgICAgICBpZiAobWFzayAhPSAwKSB7Ci0gICAgICAgICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBwYXlsb2FkTGVuOyArK2kpIHsKLSAgICAgICAgICAgICAgICAgICAgcGFja2V0LT5kYXRhKClbaV0gPQotICAgICAgICAgICAgICAgICAgICAgICAgZGF0YVtvZmZzZXQgKyBpXQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIF4gKChtYXNrID4+ICg4ICogKDMgLSAoaSAlIDQpKSkpICYgMHhmZik7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBzcDxBTWVzc2FnZT4gbm90aWZ5ID0gbU5vdGlmeS0+ZHVwKCk7Ci0gICAgICAgICAgICBub3RpZnktPnNldEludDMyKCJzZXNzaW9uSUQiLCBtU2Vzc2lvbklEKTsKLSAgICAgICAgICAgIG5vdGlmeS0+c2V0SW50MzIoInJlYXNvbiIsIGtXaGF0V2ViU29ja2V0TWVzc2FnZSk7Ci0gICAgICAgICAgICBub3RpZnktPnNldEJ1ZmZlcigiZGF0YSIsIHBhY2tldCk7Ci0gICAgICAgICAgICBub3RpZnktPnNldEludDMyKCJoZWFkZXJCeXRlIiwgZGF0YVswXSk7Ci0gICAgICAgICAgICBub3RpZnktPnBvc3QoKTsKLQotICAgICAgICAgICAgbUluQnVmZmVyLmVyYXNlKDAsIG9mZnNldCArIHBheWxvYWRMZW4pOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgaWYgKGVyciAhPSBPSykgewotICAgICAgICBub3RpZnlFcnJvcihmYWxzZSAvKiBzZW5kICovLCBlcnIsICJSZWN2IGZhaWxlZC4iKTsKLSAgICAgICAgbVNhd1JlY2VpdmVGYWlsdXJlID0gdHJ1ZTsKLSAgICB9Ci0KLSAgICByZXR1cm4gZXJyOwotfQotCi12b2lkIEFOZXR3b3JrU2Vzc2lvbjo6U2Vzc2lvbjo6ZHVtcEZyYWdtZW50U3RhdHMoY29uc3QgRnJhZ21lbnQgJiAvKiBmcmFnICovKSB7Ci0jaWYgMAotICAgIGludDY0X3Qgbm93VXMgPSBBTG9vcGVyOjpHZXROb3dVcygpOwotICAgIGludDY0X3QgZGVsYXlNcyA9IChub3dVcyAtIGZyYWcubVRpbWVVcykgLyAxMDAwbGw7Ci0KLSAgICBzdGF0aWMgY29uc3QgaW50NjRfdCBrTWluRGVsYXlNcyA9IDA7Ci0gICAgc3RhdGljIGNvbnN0IGludDY0X3Qga01heERlbGF5TXMgPSAzMDA7Ci0KLSAgICBjb25zdCBjaGFyICprUGF0dGVybiA9ICIjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIjsKLSAgICBzaXplX3Qga1BhdHRlcm5TaXplID0gc3RybGVuKGtQYXR0ZXJuKTsKLQotICAgIGludCBuID0gKGtQYXR0ZXJuU2l6ZSAqIChkZWxheU1zIC0ga01pbkRlbGF5TXMpKQotICAgICAgICAgICAgICAgIC8gKGtNYXhEZWxheU1zIC0ga01pbkRlbGF5TXMpOwotCi0gICAgaWYgKG4gPCAwKSB7Ci0gICAgICAgIG4gPSAwOwotICAgIH0gZWxzZSBpZiAoKHNpemVfdCluID4ga1BhdHRlcm5TaXplKSB7Ci0gICAgICAgIG4gPSBrUGF0dGVyblNpemU7Ci0gICAgfQotCi0gICAgQUxPR0koIlslbGxkXTogKCU0bGxkIG1zKSAlc1xuIiwKLSAgICAgICAgICBmcmFnLm1UaW1lVXMgLyAxMDAwLAotICAgICAgICAgIGRlbGF5TXMsCi0gICAgICAgICAga1BhdHRlcm4gKyBrUGF0dGVyblNpemUgLSBuKTsKLSNlbmRpZgotfQotCi1zdGF0dXNfdCBBTmV0d29ya1Nlc3Npb246OlNlc3Npb246OndyaXRlTW9yZSgpIHsKLSAgICBpZiAobVN0YXRlID09IERBVEFHUkFNKSB7Ci0gICAgICAgIENIRUNLKCFtT3V0RnJhZ21lbnRzLmVtcHR5KCkpOwotCi0gICAgICAgIHN0YXR1c190IGVycjsKLSAgICAgICAgZG8gewotICAgICAgICAgICAgY29uc3QgRnJhZ21lbnQgJmZyYWcgPSAqbU91dEZyYWdtZW50cy5iZWdpbigpOwotICAgICAgICAgICAgY29uc3Qgc3A8QUJ1ZmZlcj4gJmRhdGFncmFtID0gZnJhZy5tQnVmZmVyOwotCi0gICAgICAgICAgICBpbnQgbjsKLSAgICAgICAgICAgIGRvIHsKLSAgICAgICAgICAgICAgICBuID0gc2VuZChtU29ja2V0LCBkYXRhZ3JhbS0+ZGF0YSgpLCBkYXRhZ3JhbS0+c2l6ZSgpLCAwKTsKLSAgICAgICAgICAgIH0gd2hpbGUgKG4gPCAwICYmIGVycm5vID09IEVJTlRSKTsKLQotICAgICAgICAgICAgZXJyID0gT0s7Ci0KLSAgICAgICAgICAgIGlmIChuID4gMCkgewotICAgICAgICAgICAgICAgIGlmIChmcmFnLm1GbGFncyAmIEZSQUdNRU5UX0ZMQUdfVElNRV9WQUxJRCkgewotICAgICAgICAgICAgICAgICAgICBkdW1wRnJhZ21lbnRTdGF0cyhmcmFnKTsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICBtT3V0RnJhZ21lbnRzLmVyYXNlKG1PdXRGcmFnbWVudHMuYmVnaW4oKSk7Ci0gICAgICAgICAgICB9IGVsc2UgaWYgKG4gPCAwKSB7Ci0gICAgICAgICAgICAgICAgZXJyID0gLWVycm5vOwotICAgICAgICAgICAgfSBlbHNlIGlmIChuID09IDApIHsKLSAgICAgICAgICAgICAgICBlcnIgPSAtRUNPTk5SRVNFVDsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfSB3aGlsZSAoZXJyID09IE9LICYmICFtT3V0RnJhZ21lbnRzLmVtcHR5KCkpOwotCi0gICAgICAgIGlmIChlcnIgPT0gLUVBR0FJTikgewotICAgICAgICAgICAgaWYgKCFtT3V0RnJhZ21lbnRzLmVtcHR5KCkpIHsKLSAgICAgICAgICAgICAgICBBTE9HSSgiJXp1IGRhdGFncmFtcyByZW1haW4gcXVldWVkLiIsIG1PdXRGcmFnbWVudHMuc2l6ZSgpKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGVyciA9IE9LOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKGVyciAhPSBPSykgewotICAgICAgICAgICAgaWYgKCFtVURQUmV0cmllcykgewotICAgICAgICAgICAgICAgIG5vdGlmeUVycm9yKHRydWUgLyogc2VuZCAqLywgZXJyLCAiU2VuZCBkYXRhZ3JhbSBmYWlsZWQuIik7Ci0gICAgICAgICAgICAgICAgbVNhd1NlbmRGYWlsdXJlID0gdHJ1ZTsKLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgbVVEUFJldHJpZXMtLTsKLSAgICAgICAgICAgICAgICBBTE9HRSgiU2VuZCBkYXRhZ3JhbSBmYWlsZWQsICVkLyVkIHJldHJpZXMgbGVmdCIsCi0gICAgICAgICAgICAgICAgICAgICAgICBtVURQUmV0cmllcywga01heFVEUFJldHJpZXMpOwotICAgICAgICAgICAgICAgIGVyciA9IE9LOwotICAgICAgICAgICAgfQotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgbVVEUFJldHJpZXMgPSBrTWF4VURQUmV0cmllczsKLSAgICAgICAgfQotCi0gICAgICAgIHJldHVybiBlcnI7Ci0gICAgfQotCi0gICAgaWYgKG1TdGF0ZSA9PSBDT05ORUNUSU5HKSB7Ci0gICAgICAgIGludCBlcnI7Ci0gICAgICAgIHNvY2tsZW5fdCBvcHRpb25MZW4gPSBzaXplb2YoZXJyKTsKLSAgICAgICAgQ0hFQ0tfRVEoZ2V0c29ja29wdChtU29ja2V0LCBTT0xfU09DS0VULCBTT19FUlJPUiwgJmVyciwgJm9wdGlvbkxlbiksIDApOwotICAgICAgICBDSEVDS19FUShvcHRpb25MZW4sIChzb2NrbGVuX3Qpc2l6ZW9mKGVycikpOwotCi0gICAgICAgIGlmIChlcnIgIT0gMCkgewotICAgICAgICAgICAgbm90aWZ5RXJyb3Ioa1doYXRFcnJvciwgLWVyciwgIkNvbm5lY3Rpb24gZmFpbGVkIik7Ci0gICAgICAgICAgICBtU2F3U2VuZEZhaWx1cmUgPSB0cnVlOwotCi0gICAgICAgICAgICByZXR1cm4gLWVycjsKLSAgICAgICAgfQotCi0gICAgICAgIG1TdGF0ZSA9IENPTk5FQ1RFRDsKLSAgICAgICAgbm90aWZ5KGtXaGF0Q29ubmVjdGVkKTsKLQotICAgICAgICByZXR1cm4gT0s7Ci0gICAgfQotCi0gICAgQ0hFQ0tfRVEobVN0YXRlLCBDT05ORUNURUQpOwotICAgIENIRUNLKCFtT3V0RnJhZ21lbnRzLmVtcHR5KCkpOwotCi0gICAgc3NpemVfdCBuID0gLTE7Ci0gICAgd2hpbGUgKCFtT3V0RnJhZ21lbnRzLmVtcHR5KCkpIHsKLSAgICAgICAgY29uc3QgRnJhZ21lbnQgJmZyYWcgPSAqbU91dEZyYWdtZW50cy5iZWdpbigpOwotCi0gICAgICAgIGRvIHsKLSAgICAgICAgICAgIG4gPSBzZW5kKG1Tb2NrZXQsIGZyYWcubUJ1ZmZlci0+ZGF0YSgpLCBmcmFnLm1CdWZmZXItPnNpemUoKSwgMCk7Ci0gICAgICAgIH0gd2hpbGUgKG4gPCAwICYmIGVycm5vID09IEVJTlRSKTsKLQotICAgICAgICBpZiAobiA8PSAwKSB7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotCi0gICAgICAgIGZyYWcubUJ1ZmZlci0+c2V0UmFuZ2UoCi0gICAgICAgICAgICAgICAgZnJhZy5tQnVmZmVyLT5vZmZzZXQoKSArIG4sIGZyYWcubUJ1ZmZlci0+c2l6ZSgpIC0gbik7Ci0KLSAgICAgICAgaWYgKGZyYWcubUJ1ZmZlci0+c2l6ZSgpID4gMCkgewotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoZnJhZy5tRmxhZ3MgJiBGUkFHTUVOVF9GTEFHX1RJTUVfVkFMSUQpIHsKLSAgICAgICAgICAgIGR1bXBGcmFnbWVudFN0YXRzKGZyYWcpOwotICAgICAgICB9Ci0KLSAgICAgICAgbU91dEZyYWdtZW50cy5lcmFzZShtT3V0RnJhZ21lbnRzLmJlZ2luKCkpOwotICAgIH0KLQotICAgIHN0YXR1c190IGVyciA9IE9LOwotCi0gICAgaWYgKG4gPCAwKSB7Ci0gICAgICAgIGVyciA9IC1lcnJubzsKLSAgICB9IGVsc2UgaWYgKG4gPT0gMCkgewotICAgICAgICBlcnIgPSAtRUNPTk5SRVNFVDsKLSAgICB9Ci0KLSAgICBpZiAoZXJyICE9IE9LKSB7Ci0gICAgICAgIG5vdGlmeUVycm9yKHRydWUgLyogc2VuZCAqLywgZXJyLCAiU2VuZCBmYWlsZWQuIik7Ci0gICAgICAgIG1TYXdTZW5kRmFpbHVyZSA9IHRydWU7Ci0gICAgfQotCi0jaWYgMAotICAgIGludCBudW1CeXRlc1F1ZXVlZDsKLSAgICBpbnQgcmVzID0gaW9jdGwobVNvY2tldCwgU0lPQ09VVFEsICZudW1CeXRlc1F1ZXVlZCk7Ci0gICAgaWYgKHJlcyA9PSAwICYmIG51bUJ5dGVzUXVldWVkID4gNTAgKiAxMDI0KSB7Ci0gICAgICAgIGlmIChudW1CeXRlc1F1ZXVlZCA+IDQwOTYwMCkgewotICAgICAgICAgICAgQUxPR1coIiEhISBudW1CeXRlc1F1ZXVlZCA9ICVkIiwgbnVtQnl0ZXNRdWV1ZWQpOwotICAgICAgICB9Ci0KLSAgICAgICAgaW50NjRfdCBub3dVcyA9IEFMb29wZXI6OkdldE5vd1VzKCk7Ci0KLSAgICAgICAgaWYgKG1MYXN0U3RhbGxSZXBvcnRVcyA8IDBsbAotICAgICAgICAgICAgICAgIHx8IG5vd1VzID4gbUxhc3RTdGFsbFJlcG9ydFVzICsgMTAwMDAwbGwpIHsKLSAgICAgICAgICAgIHNwPEFNZXNzYWdlPiBtc2cgPSBtTm90aWZ5LT5kdXAoKTsKLSAgICAgICAgICAgIG1zZy0+c2V0SW50MzIoInNlc3Npb25JRCIsIG1TZXNzaW9uSUQpOwotICAgICAgICAgICAgbXNnLT5zZXRJbnQzMigicmVhc29uIiwga1doYXROZXR3b3JrU3RhbGwpOwotICAgICAgICAgICAgbXNnLT5zZXRTaXplKCJudW1CeXRlc1F1ZXVlZCIsIG51bUJ5dGVzUXVldWVkKTsKLSAgICAgICAgICAgIG1zZy0+cG9zdCgpOwotCi0gICAgICAgICAgICBtTGFzdFN0YWxsUmVwb3J0VXMgPSBub3dVczsKLSAgICAgICAgfQotICAgIH0KLSNlbmRpZgotCi0gICAgcmV0dXJuIGVycjsKLX0KLQotc3RhdHVzX3QgQU5ldHdvcmtTZXNzaW9uOjpTZXNzaW9uOjpzZW5kUmVxdWVzdCgKLSAgICAgICAgY29uc3Qgdm9pZCAqZGF0YSwgc3NpemVfdCBzaXplLCBib29sIHRpbWVWYWxpZCwgaW50NjRfdCB0aW1lVXMpIHsKLSAgICBDSEVDSyhtU3RhdGUgPT0gQ09OTkVDVEVEIHx8IG1TdGF0ZSA9PSBEQVRBR1JBTSk7Ci0KLSAgICBpZiAoc2l6ZSA8IDApIHsKLSAgICAgICAgc2l6ZSA9IHN0cmxlbigoY29uc3QgY2hhciAqKWRhdGEpOwotICAgIH0KLQotICAgIGlmIChzaXplID09IDApIHsKLSAgICAgICAgcmV0dXJuIE9LOwotICAgIH0KLQotICAgIHNwPEFCdWZmZXI+IGJ1ZmZlcjsKLQotICAgIGlmIChtU3RhdGUgPT0gQ09OTkVDVEVEICYmIG1Nb2RlID09IE1PREVfREFUQUdSQU0pIHsKLSAgICAgICAgQ0hFQ0tfTEUoc2l6ZSwgNjU1MzUpOwotCi0gICAgICAgIGJ1ZmZlciA9IG5ldyBBQnVmZmVyKHNpemUgKyAyKTsKLSAgICAgICAgYnVmZmVyLT5kYXRhKClbMF0gPSBzaXplID4+IDg7Ci0gICAgICAgIGJ1ZmZlci0+ZGF0YSgpWzFdID0gc2l6ZSAmIDB4ZmY7Ci0gICAgICAgIG1lbWNweShidWZmZXItPmRhdGEoKSArIDIsIGRhdGEsIHNpemUpOwotICAgIH0gZWxzZSBpZiAobVN0YXRlID09IENPTk5FQ1RFRCAmJiBtTW9kZSA9PSBNT0RFX1dFQlNPQ0tFVCkgewotICAgICAgICBzdGF0aWMgY29uc3QgYm9vbCBrVXNlTWFzayA9IGZhbHNlOyAgLy8gQ2hyb21pdW0gZG9lc24ndCBsaWtlIGl0LgotCi0gICAgICAgIHNpemVfdCBudW1IZWFkZXJCeXRlcyA9IDIgKyAoa1VzZU1hc2sgPyA0IDogMCk7Ci0gICAgICAgIGlmIChzaXplID4gNjU1MzUpIHsKLSAgICAgICAgICAgIG51bUhlYWRlckJ5dGVzICs9IDg7Ci0gICAgICAgIH0gZWxzZSBpZiAoc2l6ZSA+IDEyNSkgewotICAgICAgICAgICAgbnVtSGVhZGVyQnl0ZXMgKz0gMjsKLSAgICAgICAgfQotCi0gICAgICAgIGJ1ZmZlciA9IG5ldyBBQnVmZmVyKG51bUhlYWRlckJ5dGVzICsgc2l6ZSk7Ci0gICAgICAgIGJ1ZmZlci0+ZGF0YSgpWzBdID0gMHg4MTsgIC8vIEZJTj09MSB8IG9wY29kZT0xICh0ZXh0KQotICAgICAgICBidWZmZXItPmRhdGEoKVsxXSA9IGtVc2VNYXNrID8gMHg4MCA6IDB4MDA7Ci0KLSAgICAgICAgaWYgKHNpemUgPiA2NTUzNSkgewotICAgICAgICAgICAgYnVmZmVyLT5kYXRhKClbMV0gfD0gMTI3OwotICAgICAgICAgICAgYnVmZmVyLT5kYXRhKClbMl0gPSAweDAwOwotICAgICAgICAgICAgYnVmZmVyLT5kYXRhKClbM10gPSAweDAwOwotICAgICAgICAgICAgYnVmZmVyLT5kYXRhKClbNF0gPSAweDAwOwotICAgICAgICAgICAgYnVmZmVyLT5kYXRhKClbNV0gPSAweDAwOwotICAgICAgICAgICAgYnVmZmVyLT5kYXRhKClbNl0gPSAoc2l6ZSA+PiAyNCkgJiAweGZmOwotICAgICAgICAgICAgYnVmZmVyLT5kYXRhKClbN10gPSAoc2l6ZSA+PiAxNikgJiAweGZmOwotICAgICAgICAgICAgYnVmZmVyLT5kYXRhKClbOF0gPSAoc2l6ZSA+PiA4KSAmIDB4ZmY7Ci0gICAgICAgICAgICBidWZmZXItPmRhdGEoKVs5XSA9IHNpemUgJiAweGZmOwotICAgICAgICB9IGVsc2UgaWYgKHNpemUgPiAxMjUpIHsKLSAgICAgICAgICAgIGJ1ZmZlci0+ZGF0YSgpWzFdIHw9IDEyNjsKLSAgICAgICAgICAgIGJ1ZmZlci0+ZGF0YSgpWzJdID0gKHNpemUgPj4gOCkgJiAweGZmOwotICAgICAgICAgICAgYnVmZmVyLT5kYXRhKClbM10gPSBzaXplICYgMHhmZjsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIGJ1ZmZlci0+ZGF0YSgpWzFdIHw9IHNpemU7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoa1VzZU1hc2spIHsKLSAgICAgICAgICAgIHVpbnQzMl90IG1hc2sgPSByYW5kKCk7Ci0KLSAgICAgICAgICAgIGJ1ZmZlci0+ZGF0YSgpW251bUhlYWRlckJ5dGVzIC0gNF0gPSAobWFzayA+PiAyNCkgJiAweGZmOwotICAgICAgICAgICAgYnVmZmVyLT5kYXRhKClbbnVtSGVhZGVyQnl0ZXMgLSAzXSA9IChtYXNrID4+IDE2KSAmIDB4ZmY7Ci0gICAgICAgICAgICBidWZmZXItPmRhdGEoKVtudW1IZWFkZXJCeXRlcyAtIDJdID0gKG1hc2sgPj4gOCkgJiAweGZmOwotICAgICAgICAgICAgYnVmZmVyLT5kYXRhKClbbnVtSGVhZGVyQnl0ZXMgLSAxXSA9IG1hc2sgJiAweGZmOwotCi0gICAgICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IChzaXplX3Qpc2l6ZTsgKytpKSB7Ci0gICAgICAgICAgICAgICAgYnVmZmVyLT5kYXRhKClbbnVtSGVhZGVyQnl0ZXMgKyBpXSA9Ci0gICAgICAgICAgICAgICAgICAgICgoY29uc3QgdWludDhfdCAqKWRhdGEpW2ldCi0gICAgICAgICAgICAgICAgICAgICAgICBeICgobWFzayA+PiAoOCAqICgzIC0gKGkgJSA0KSkpKSAmIDB4ZmYpOwotICAgICAgICAgICAgfQotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgbWVtY3B5KGJ1ZmZlci0+ZGF0YSgpICsgbnVtSGVhZGVyQnl0ZXMsIGRhdGEsIHNpemUpOwotICAgICAgICB9Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgYnVmZmVyID0gbmV3IEFCdWZmZXIoc2l6ZSk7Ci0gICAgICAgIG1lbWNweShidWZmZXItPmRhdGEoKSwgZGF0YSwgc2l6ZSk7Ci0gICAgfQotCi0gICAgRnJhZ21lbnQgZnJhZzsKLQotICAgIGZyYWcubUZsYWdzID0gMDsKLSAgICBpZiAodGltZVZhbGlkKSB7Ci0gICAgICAgIGZyYWcubUZsYWdzID0gRlJBR01FTlRfRkxBR19USU1FX1ZBTElEOwotICAgICAgICBmcmFnLm1UaW1lVXMgPSB0aW1lVXM7Ci0gICAgfQotCi0gICAgZnJhZy5tQnVmZmVyID0gYnVmZmVyOwotCi0gICAgbU91dEZyYWdtZW50cy5wdXNoX2JhY2soZnJhZyk7Ci0KLSAgICByZXR1cm4gT0s7Ci19Ci0KLXZvaWQgQU5ldHdvcmtTZXNzaW9uOjpTZXNzaW9uOjpub3RpZnlFcnJvcigKLSAgICAgICAgYm9vbCBzZW5kLCBzdGF0dXNfdCBlcnIsIGNvbnN0IGNoYXIgKmRldGFpbCkgewotICAgIHNwPEFNZXNzYWdlPiBtc2cgPSBtTm90aWZ5LT5kdXAoKTsKLSAgICBtc2ctPnNldEludDMyKCJzZXNzaW9uSUQiLCBtU2Vzc2lvbklEKTsKLSAgICBtc2ctPnNldEludDMyKCJyZWFzb24iLCBrV2hhdEVycm9yKTsKLSAgICBtc2ctPnNldEludDMyKCJzZW5kIiwgc2VuZCk7Ci0gICAgbXNnLT5zZXRJbnQzMigiZXJyIiwgZXJyKTsKLSAgICBtc2ctPnNldFN0cmluZygiZGV0YWlsIiwgZGV0YWlsKTsKLSAgICBtc2ctPnBvc3QoKTsKLX0KLQotdm9pZCBBTmV0d29ya1Nlc3Npb246OlNlc3Npb246Om5vdGlmeShOb3RpZmljYXRpb25SZWFzb24gcmVhc29uKSB7Ci0gICAgc3A8QU1lc3NhZ2U+IG1zZyA9IG1Ob3RpZnktPmR1cCgpOwotICAgIG1zZy0+c2V0SW50MzIoInNlc3Npb25JRCIsIG1TZXNzaW9uSUQpOwotICAgIG1zZy0+c2V0SW50MzIoInJlYXNvbiIsIHJlYXNvbik7Ci0gICAgbXNnLT5wb3N0KCk7Ci19Ci0KLS8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCi0KLUFOZXR3b3JrU2Vzc2lvbjo6QU5ldHdvcmtTZXNzaW9uKCkKLSAgICA6IG1OZXh0U2Vzc2lvbklEKDEpIHsKLSAgICBtUGlwZUZkWzBdID0gbVBpcGVGZFsxXSA9IC0xOwotfQotCi1BTmV0d29ya1Nlc3Npb246On5BTmV0d29ya1Nlc3Npb24oKSB7Ci0gICAgc3RvcCgpOwotfQotCi1zdGF0dXNfdCBBTmV0d29ya1Nlc3Npb246OnN0YXJ0KCkgewotICAgIGlmIChtVGhyZWFkICE9IE5VTEwpIHsKLSAgICAgICAgcmV0dXJuIElOVkFMSURfT1BFUkFUSU9OOwotICAgIH0KLQotICAgIGludCByZXMgPSBwaXBlKG1QaXBlRmQpOwotICAgIGlmIChyZXMgIT0gMCkgewotICAgICAgICBtUGlwZUZkWzBdID0gbVBpcGVGZFsxXSA9IC0xOwotICAgICAgICByZXR1cm4gLWVycm5vOwotICAgIH0KLQotICAgIG1UaHJlYWQgPSBuZXcgTmV0d29ya1RocmVhZCh0aGlzKTsKLQotICAgIHN0YXR1c190IGVyciA9IG1UaHJlYWQtPnJ1bigiQU5ldHdvcmtTZXNzaW9uIiwgQU5EUk9JRF9QUklPUklUWV9BVURJTyk7Ci0KLSAgICBpZiAoZXJyICE9IE9LKSB7Ci0gICAgICAgIG1UaHJlYWQuY2xlYXIoKTsKLQotICAgICAgICBjbG9zZShtUGlwZUZkWzBdKTsKLSAgICAgICAgY2xvc2UobVBpcGVGZFsxXSk7Ci0gICAgICAgIG1QaXBlRmRbMF0gPSBtUGlwZUZkWzFdID0gLTE7Ci0KLSAgICAgICAgcmV0dXJuIGVycjsKLSAgICB9Ci0KLSAgICByZXR1cm4gT0s7Ci19Ci0KLXN0YXR1c190IEFOZXR3b3JrU2Vzc2lvbjo6c3RvcCgpIHsKLSAgICBpZiAobVRocmVhZCA9PSBOVUxMKSB7Ci0gICAgICAgIHJldHVybiBJTlZBTElEX09QRVJBVElPTjsKLSAgICB9Ci0KLSAgICBtVGhyZWFkLT5yZXF1ZXN0RXhpdCgpOwotICAgIGludGVycnVwdCgpOwotICAgIG1UaHJlYWQtPnJlcXVlc3RFeGl0QW5kV2FpdCgpOwotCi0gICAgbVRocmVhZC5jbGVhcigpOwotCi0gICAgY2xvc2UobVBpcGVGZFswXSk7Ci0gICAgY2xvc2UobVBpcGVGZFsxXSk7Ci0gICAgbVBpcGVGZFswXSA9IG1QaXBlRmRbMV0gPSAtMTsKLQotICAgIHJldHVybiBPSzsKLX0KLQotc3RhdHVzX3QgQU5ldHdvcmtTZXNzaW9uOjpjcmVhdGVSVFNQQ2xpZW50KAotICAgICAgICBjb25zdCBjaGFyICpob3N0LCB1bnNpZ25lZCBwb3J0LCBjb25zdCBzcDxBTWVzc2FnZT4gJm5vdGlmeSwKLSAgICAgICAgaW50MzJfdCAqc2Vzc2lvbklEKSB7Ci0gICAgcmV0dXJuIGNyZWF0ZUNsaWVudE9yU2VydmVyKAotICAgICAgICAgICAga01vZGVDcmVhdGVSVFNQQ2xpZW50LAotICAgICAgICAgICAgTlVMTCAvKiBhZGRyICovLAotICAgICAgICAgICAgMCAvKiBwb3J0ICovLAotICAgICAgICAgICAgaG9zdCwKLSAgICAgICAgICAgIHBvcnQsCi0gICAgICAgICAgICBub3RpZnksCi0gICAgICAgICAgICBzZXNzaW9uSUQpOwotfQotCi1zdGF0dXNfdCBBTmV0d29ya1Nlc3Npb246OmNyZWF0ZVJUU1BTZXJ2ZXIoCi0gICAgICAgIGNvbnN0IHN0cnVjdCBpbl9hZGRyICZhZGRyLCB1bnNpZ25lZCBwb3J0LAotICAgICAgICBjb25zdCBzcDxBTWVzc2FnZT4gJm5vdGlmeSwgaW50MzJfdCAqc2Vzc2lvbklEKSB7Ci0gICAgcmV0dXJuIGNyZWF0ZUNsaWVudE9yU2VydmVyKAotICAgICAgICAgICAga01vZGVDcmVhdGVSVFNQU2VydmVyLAotICAgICAgICAgICAgJmFkZHIsCi0gICAgICAgICAgICBwb3J0LAotICAgICAgICAgICAgTlVMTCAvKiByZW1vdGVIb3N0ICovLAotICAgICAgICAgICAgMCAvKiByZW1vdGVQb3J0ICovLAotICAgICAgICAgICAgbm90aWZ5LAotICAgICAgICAgICAgc2Vzc2lvbklEKTsKLX0KLQotc3RhdHVzX3QgQU5ldHdvcmtTZXNzaW9uOjpjcmVhdGVVRFBTZXNzaW9uKAotICAgICAgICB1bnNpZ25lZCBsb2NhbFBvcnQsIGNvbnN0IHNwPEFNZXNzYWdlPiAmbm90aWZ5LCBpbnQzMl90ICpzZXNzaW9uSUQpIHsKLSAgICByZXR1cm4gY3JlYXRlVURQU2Vzc2lvbihsb2NhbFBvcnQsIE5VTEwsIDAsIG5vdGlmeSwgc2Vzc2lvbklEKTsKLX0KLQotc3RhdHVzX3QgQU5ldHdvcmtTZXNzaW9uOjpjcmVhdGVVRFBTZXNzaW9uKAotICAgICAgICB1bnNpZ25lZCBsb2NhbFBvcnQsCi0gICAgICAgIGNvbnN0IGNoYXIgKnJlbW90ZUhvc3QsCi0gICAgICAgIHVuc2lnbmVkIHJlbW90ZVBvcnQsCi0gICAgICAgIGNvbnN0IHNwPEFNZXNzYWdlPiAmbm90aWZ5LAotICAgICAgICBpbnQzMl90ICpzZXNzaW9uSUQpIHsKLSAgICByZXR1cm4gY3JlYXRlQ2xpZW50T3JTZXJ2ZXIoCi0gICAgICAgICAgICBrTW9kZUNyZWF0ZVVEUFNlc3Npb24sCi0gICAgICAgICAgICBOVUxMIC8qIGFkZHIgKi8sCi0gICAgICAgICAgICBsb2NhbFBvcnQsCi0gICAgICAgICAgICByZW1vdGVIb3N0LAotICAgICAgICAgICAgcmVtb3RlUG9ydCwKLSAgICAgICAgICAgIG5vdGlmeSwKLSAgICAgICAgICAgIHNlc3Npb25JRCk7Ci19Ci0KLXN0YXR1c190IEFOZXR3b3JrU2Vzc2lvbjo6Y3JlYXRlVENQRGF0YWdyYW1TZXNzaW9uKAotICAgICAgICBjb25zdCBzdHJ1Y3QgaW5fYWRkciAmYWRkciwgdW5zaWduZWQgcG9ydCwKLSAgICAgICAgY29uc3Qgc3A8QU1lc3NhZ2U+ICZub3RpZnksIGludDMyX3QgKnNlc3Npb25JRCkgewotICAgIHJldHVybiBjcmVhdGVDbGllbnRPclNlcnZlcigKLSAgICAgICAgICAgIGtNb2RlQ3JlYXRlVENQRGF0YWdyYW1TZXNzaW9uUGFzc2l2ZSwKLSAgICAgICAgICAgICZhZGRyLAotICAgICAgICAgICAgcG9ydCwKLSAgICAgICAgICAgIE5VTEwgLyogcmVtb3RlSG9zdCAqLywKLSAgICAgICAgICAgIDAgLyogcmVtb3RlUG9ydCAqLywKLSAgICAgICAgICAgIG5vdGlmeSwKLSAgICAgICAgICAgIHNlc3Npb25JRCk7Ci19Ci0KLXN0YXR1c190IEFOZXR3b3JrU2Vzc2lvbjo6Y3JlYXRlVENQRGF0YWdyYW1TZXNzaW9uKAotICAgICAgICB1bnNpZ25lZCBsb2NhbFBvcnQsCi0gICAgICAgIGNvbnN0IGNoYXIgKnJlbW90ZUhvc3QsCi0gICAgICAgIHVuc2lnbmVkIHJlbW90ZVBvcnQsCi0gICAgICAgIGNvbnN0IHNwPEFNZXNzYWdlPiAmbm90aWZ5LAotICAgICAgICBpbnQzMl90ICpzZXNzaW9uSUQpIHsKLSAgICByZXR1cm4gY3JlYXRlQ2xpZW50T3JTZXJ2ZXIoCi0gICAgICAgICAgICBrTW9kZUNyZWF0ZVRDUERhdGFncmFtU2Vzc2lvbkFjdGl2ZSwKLSAgICAgICAgICAgIE5VTEwgLyogYWRkciAqLywKLSAgICAgICAgICAgIGxvY2FsUG9ydCwKLSAgICAgICAgICAgIHJlbW90ZUhvc3QsCi0gICAgICAgICAgICByZW1vdGVQb3J0LAotICAgICAgICAgICAgbm90aWZ5LAotICAgICAgICAgICAgc2Vzc2lvbklEKTsKLX0KLQotc3RhdHVzX3QgQU5ldHdvcmtTZXNzaW9uOjpkZXN0cm95U2Vzc2lvbihpbnQzMl90IHNlc3Npb25JRCkgewotICAgIE11dGV4OjpBdXRvbG9jayBhdXRvTG9jayhtTG9jayk7Ci0KLSAgICBzc2l6ZV90IGluZGV4ID0gbVNlc3Npb25zLmluZGV4T2ZLZXkoc2Vzc2lvbklEKTsKLQotICAgIGlmIChpbmRleCA8IDApIHsKLSAgICAgICAgcmV0dXJuIC1FTk9FTlQ7Ci0gICAgfQotCi0gICAgbVNlc3Npb25zLnJlbW92ZUl0ZW1zQXQoaW5kZXgpOwotCi0gICAgaW50ZXJydXB0KCk7Ci0KLSAgICByZXR1cm4gT0s7Ci19Ci0KLS8vIHN0YXRpYwotc3RhdHVzX3QgQU5ldHdvcmtTZXNzaW9uOjpNYWtlU29ja2V0Tm9uQmxvY2tpbmcoaW50IHMpIHsKLSAgICBpbnQgZmxhZ3MgPSBmY250bChzLCBGX0dFVEZMLCAwKTsKLSAgICBpZiAoZmxhZ3MgPCAwKSB7Ci0gICAgICAgIGZsYWdzID0gMDsKLSAgICB9Ci0KLSAgICBpbnQgcmVzID0gZmNudGwocywgRl9TRVRGTCwgZmxhZ3MgfCBPX05PTkJMT0NLKTsKLSAgICBpZiAocmVzIDwgMCkgewotICAgICAgICByZXR1cm4gLWVycm5vOwotICAgIH0KLQotICAgIHJldHVybiBPSzsKLX0KLQotc3RhdHVzX3QgQU5ldHdvcmtTZXNzaW9uOjpjcmVhdGVDbGllbnRPclNlcnZlcigKLSAgICAgICAgTW9kZSBtb2RlLAotICAgICAgICBjb25zdCBzdHJ1Y3QgaW5fYWRkciAqbG9jYWxBZGRyLAotICAgICAgICB1bnNpZ25lZCBwb3J0LAotICAgICAgICBjb25zdCBjaGFyICpyZW1vdGVIb3N0LAotICAgICAgICB1bnNpZ25lZCByZW1vdGVQb3J0LAotICAgICAgICBjb25zdCBzcDxBTWVzc2FnZT4gJm5vdGlmeSwKLSAgICAgICAgaW50MzJfdCAqc2Vzc2lvbklEKSB7Ci0gICAgTXV0ZXg6OkF1dG9sb2NrIGF1dG9Mb2NrKG1Mb2NrKTsKLQotICAgICpzZXNzaW9uSUQgPSAwOwotICAgIHN0YXR1c190IGVyciA9IE9LOwotICAgIGludCBzLCByZXM7Ci0gICAgc3A8U2Vzc2lvbj4gc2Vzc2lvbjsKLQotICAgIHMgPSBzb2NrZXQoCi0gICAgICAgICAgICBBRl9JTkVULAotICAgICAgICAgICAgKG1vZGUgPT0ga01vZGVDcmVhdGVVRFBTZXNzaW9uKSA/IFNPQ0tfREdSQU0gOiBTT0NLX1NUUkVBTSwKLSAgICAgICAgICAgIDApOwotCi0gICAgaWYgKHMgPCAwKSB7Ci0gICAgICAgIGVyciA9IC1lcnJubzsKLSAgICAgICAgZ290byBiYWlsOwotICAgIH0KLQotICAgIGlmIChtb2RlID09IGtNb2RlQ3JlYXRlUlRTUFNlcnZlcgotICAgICAgICAgICAgfHwgbW9kZSA9PSBrTW9kZUNyZWF0ZVRDUERhdGFncmFtU2Vzc2lvblBhc3NpdmUpIHsKLSAgICAgICAgY29uc3QgaW50IHllcyA9IDE7Ci0gICAgICAgIHJlcyA9IHNldHNvY2tvcHQocywgU09MX1NPQ0tFVCwgU09fUkVVU0VBRERSLCAmeWVzLCBzaXplb2YoeWVzKSk7Ci0KLSAgICAgICAgaWYgKHJlcyA8IDApIHsKLSAgICAgICAgICAgIGVyciA9IC1lcnJubzsKLSAgICAgICAgICAgIGdvdG8gYmFpbDI7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBpZiAobW9kZSA9PSBrTW9kZUNyZWF0ZVVEUFNlc3Npb24pIHsKLSAgICAgICAgaW50IHNpemUgPSAyNTYgKiAxMDI0OwotCi0gICAgICAgIHJlcyA9IHNldHNvY2tvcHQocywgU09MX1NPQ0tFVCwgU09fUkNWQlVGLCAmc2l6ZSwgc2l6ZW9mKHNpemUpKTsKLQotICAgICAgICBpZiAocmVzIDwgMCkgewotICAgICAgICAgICAgZXJyID0gLWVycm5vOwotICAgICAgICAgICAgZ290byBiYWlsMjsKLSAgICAgICAgfQotCi0gICAgICAgIHJlcyA9IHNldHNvY2tvcHQocywgU09MX1NPQ0tFVCwgU09fU05EQlVGLCAmc2l6ZSwgc2l6ZW9mKHNpemUpKTsKLQotICAgICAgICBpZiAocmVzIDwgMCkgewotICAgICAgICAgICAgZXJyID0gLWVycm5vOwotICAgICAgICAgICAgZ290byBiYWlsMjsKLSAgICAgICAgfQotICAgIH0gZWxzZSBpZiAobW9kZSA9PSBrTW9kZUNyZWF0ZVRDUERhdGFncmFtU2Vzc2lvbkFjdGl2ZSkgewotICAgICAgICBpbnQgZmxhZyA9IDE7Ci0gICAgICAgIHJlcyA9IHNldHNvY2tvcHQocywgSVBQUk9UT19UQ1AsIFRDUF9OT0RFTEFZLCAmZmxhZywgc2l6ZW9mKGZsYWcpKTsKLQotICAgICAgICBpZiAocmVzIDwgMCkgewotICAgICAgICAgICAgZXJyID0gLWVycm5vOwotICAgICAgICAgICAgZ290byBiYWlsMjsKLSAgICAgICAgfQotCi0gICAgICAgIGludCB0b3MgPSAyMjQ7ICAvLyBWT0lDRQotICAgICAgICByZXMgPSBzZXRzb2Nrb3B0KHMsIElQUFJPVE9fSVAsIElQX1RPUywgJnRvcywgc2l6ZW9mKHRvcykpOwotCi0gICAgICAgIGlmIChyZXMgPCAwKSB7Ci0gICAgICAgICAgICBlcnIgPSAtZXJybm87Ci0gICAgICAgICAgICBnb3RvIGJhaWwyOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgZXJyID0gTWFrZVNvY2tldE5vbkJsb2NraW5nKHMpOwotCi0gICAgaWYgKGVyciAhPSBPSykgewotICAgICAgICBnb3RvIGJhaWwyOwotICAgIH0KLQotICAgIHN0cnVjdCBzb2NrYWRkcl9pbiBhZGRyOwotICAgIG1lbXNldChhZGRyLnNpbl96ZXJvLCAwLCBzaXplb2YoYWRkci5zaW5femVybykpOwotICAgIGFkZHIuc2luX2ZhbWlseSA9IEFGX0lORVQ7Ci0KLSAgICBpZiAobW9kZSA9PSBrTW9kZUNyZWF0ZVJUU1BDbGllbnQKLSAgICAgICAgICAgIHx8IG1vZGUgPT0ga01vZGVDcmVhdGVUQ1BEYXRhZ3JhbVNlc3Npb25BY3RpdmUpIHsKLSAgICAgICAgc3RydWN0IGhvc3RlbnQgKmVudD0gZ2V0aG9zdGJ5bmFtZShyZW1vdGVIb3N0KTsKLSAgICAgICAgaWYgKGVudCA9PSBOVUxMKSB7Ci0gICAgICAgICAgICBlcnIgPSAtaF9lcnJubzsKLSAgICAgICAgICAgIGdvdG8gYmFpbDI7Ci0gICAgICAgIH0KLQotICAgICAgICBhZGRyLnNpbl9hZGRyLnNfYWRkciA9ICooaW5fYWRkcl90ICopZW50LT5oX2FkZHI7Ci0gICAgICAgIGFkZHIuc2luX3BvcnQgPSBodG9ucyhyZW1vdGVQb3J0KTsKLSAgICB9IGVsc2UgaWYgKGxvY2FsQWRkciAhPSBOVUxMKSB7Ci0gICAgICAgIGFkZHIuc2luX2FkZHIgPSAqbG9jYWxBZGRyOwotICAgICAgICBhZGRyLnNpbl9wb3J0ID0gaHRvbnMocG9ydCk7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgYWRkci5zaW5fYWRkci5zX2FkZHIgPSBodG9ubChJTkFERFJfQU5ZKTsKLSAgICAgICAgYWRkci5zaW5fcG9ydCA9IGh0b25zKHBvcnQpOwotICAgIH0KLQotICAgIGlmIChtb2RlID09IGtNb2RlQ3JlYXRlUlRTUENsaWVudAotICAgICAgICAgICAgfHwgbW9kZSA9PSBrTW9kZUNyZWF0ZVRDUERhdGFncmFtU2Vzc2lvbkFjdGl2ZSkgewotICAgICAgICBpbl9hZGRyX3QgeCA9IG50b2hsKGFkZHIuc2luX2FkZHIuc19hZGRyKTsKLSAgICAgICAgQUxPR0koImNvbm5lY3Rpbmcgc29ja2V0ICVkIHRvICVkLiVkLiVkLiVkOiVkIiwKLSAgICAgICAgICAgICAgcywKLSAgICAgICAgICAgICAgKHggPj4gMjQpLAotICAgICAgICAgICAgICAoeCA+PiAxNikgJiAweGZmLAotICAgICAgICAgICAgICAoeCA+PiA4KSAmIDB4ZmYsCi0gICAgICAgICAgICAgIHggJiAweGZmLAotICAgICAgICAgICAgICBudG9ocyhhZGRyLnNpbl9wb3J0KSk7Ci0KLSAgICAgICAgcmVzID0gY29ubmVjdChzLCAoY29uc3Qgc3RydWN0IHNvY2thZGRyICopJmFkZHIsIHNpemVvZihhZGRyKSk7Ci0KLSAgICAgICAgQ0hFQ0tfTFQocmVzLCAwKTsKLSAgICAgICAgaWYgKGVycm5vID09IEVJTlBST0dSRVNTKSB7Ci0gICAgICAgICAgICByZXMgPSAwOwotICAgICAgICB9Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgcmVzID0gYmluZChzLCAoY29uc3Qgc3RydWN0IHNvY2thZGRyICopJmFkZHIsIHNpemVvZihhZGRyKSk7Ci0KLSAgICAgICAgaWYgKHJlcyA9PSAwKSB7Ci0gICAgICAgICAgICBpZiAobW9kZSA9PSBrTW9kZUNyZWF0ZVJUU1BTZXJ2ZXIKLSAgICAgICAgICAgICAgICAgICAgfHwgbW9kZSA9PSBrTW9kZUNyZWF0ZVRDUERhdGFncmFtU2Vzc2lvblBhc3NpdmUpIHsKLSAgICAgICAgICAgICAgICByZXMgPSBsaXN0ZW4ocywgNCk7Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIENIRUNLX0VRKG1vZGUsIGtNb2RlQ3JlYXRlVURQU2Vzc2lvbik7Ci0KLSAgICAgICAgICAgICAgICBpZiAocmVtb3RlSG9zdCAhPSBOVUxMKSB7Ci0gICAgICAgICAgICAgICAgICAgIHN0cnVjdCBzb2NrYWRkcl9pbiByZW1vdGVBZGRyOwotICAgICAgICAgICAgICAgICAgICBtZW1zZXQocmVtb3RlQWRkci5zaW5femVybywgMCwgc2l6ZW9mKHJlbW90ZUFkZHIuc2luX3plcm8pKTsKLSAgICAgICAgICAgICAgICAgICAgcmVtb3RlQWRkci5zaW5fZmFtaWx5ID0gQUZfSU5FVDsKLSAgICAgICAgICAgICAgICAgICAgcmVtb3RlQWRkci5zaW5fcG9ydCA9IGh0b25zKHJlbW90ZVBvcnQpOwotCi0gICAgICAgICAgICAgICAgICAgIHN0cnVjdCBob3N0ZW50ICplbnQ9IGdldGhvc3RieW5hbWUocmVtb3RlSG9zdCk7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChlbnQgPT0gTlVMTCkgewotICAgICAgICAgICAgICAgICAgICAgICAgZXJyID0gLWhfZXJybm87Ci0gICAgICAgICAgICAgICAgICAgICAgICBnb3RvIGJhaWwyOwotICAgICAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICAgICAgcmVtb3RlQWRkci5zaW5fYWRkci5zX2FkZHIgPSAqKGluX2FkZHJfdCAqKWVudC0+aF9hZGRyOwotCi0gICAgICAgICAgICAgICAgICAgIHJlcyA9IGNvbm5lY3QoCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgcywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY29uc3Qgc3RydWN0IHNvY2thZGRyICopJnJlbW90ZUFkZHIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZW9mKHJlbW90ZUFkZHIpKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBpZiAocmVzIDwgMCkgewotICAgICAgICBlcnIgPSAtZXJybm87Ci0gICAgICAgIGdvdG8gYmFpbDI7Ci0gICAgfQotCi0gICAgU2Vzc2lvbjo6U3RhdGUgc3RhdGU7Ci0gICAgc3dpdGNoIChtb2RlKSB7Ci0gICAgICAgIGNhc2Uga01vZGVDcmVhdGVSVFNQQ2xpZW50OgotICAgICAgICAgICAgc3RhdGUgPSBTZXNzaW9uOjpDT05ORUNUSU5HOwotICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgY2FzZSBrTW9kZUNyZWF0ZVRDUERhdGFncmFtU2Vzc2lvbkFjdGl2ZToKLSAgICAgICAgICAgIHN0YXRlID0gU2Vzc2lvbjo6Q09OTkVDVElORzsKLSAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgIGNhc2Uga01vZGVDcmVhdGVUQ1BEYXRhZ3JhbVNlc3Npb25QYXNzaXZlOgotICAgICAgICAgICAgc3RhdGUgPSBTZXNzaW9uOjpMSVNURU5JTkdfVENQX0RHUkFNUzsKLSAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgIGNhc2Uga01vZGVDcmVhdGVSVFNQU2VydmVyOgotICAgICAgICAgICAgc3RhdGUgPSBTZXNzaW9uOjpMSVNURU5JTkdfUlRTUDsKLSAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICBDSEVDS19FUShtb2RlLCBrTW9kZUNyZWF0ZVVEUFNlc3Npb24pOwotICAgICAgICAgICAgc3RhdGUgPSBTZXNzaW9uOjpEQVRBR1JBTTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgIH0KLQotICAgIHNlc3Npb24gPSBuZXcgU2Vzc2lvbigKLSAgICAgICAgICAgIG1OZXh0U2Vzc2lvbklEKyssCi0gICAgICAgICAgICBzdGF0ZSwKLSAgICAgICAgICAgIHMsCi0gICAgICAgICAgICBub3RpZnkpOwotCi0gICAgaWYgKG1vZGUgPT0ga01vZGVDcmVhdGVUQ1BEYXRhZ3JhbVNlc3Npb25BY3RpdmUpIHsKLSAgICAgICAgc2Vzc2lvbi0+c2V0TW9kZShTZXNzaW9uOjpNT0RFX0RBVEFHUkFNKTsKLSAgICB9IGVsc2UgaWYgKG1vZGUgPT0ga01vZGVDcmVhdGVSVFNQQ2xpZW50KSB7Ci0gICAgICAgIHNlc3Npb24tPnNldE1vZGUoU2Vzc2lvbjo6TU9ERV9SVFNQKTsKLSAgICB9Ci0KLSAgICBtU2Vzc2lvbnMuYWRkKHNlc3Npb24tPnNlc3Npb25JRCgpLCBzZXNzaW9uKTsKLQotICAgIGludGVycnVwdCgpOwotCi0gICAgKnNlc3Npb25JRCA9IHNlc3Npb24tPnNlc3Npb25JRCgpOwotCi0gICAgZ290byBiYWlsOwotCi1iYWlsMjoKLSAgICBjbG9zZShzKTsKLSAgICBzID0gLTE7Ci0KLWJhaWw6Ci0gICAgcmV0dXJuIGVycjsKLX0KLQotc3RhdHVzX3QgQU5ldHdvcmtTZXNzaW9uOjpjb25uZWN0VURQU2Vzc2lvbigKLSAgICAgICAgaW50MzJfdCBzZXNzaW9uSUQsIGNvbnN0IGNoYXIgKnJlbW90ZUhvc3QsIHVuc2lnbmVkIHJlbW90ZVBvcnQpIHsKLSAgICBNdXRleDo6QXV0b2xvY2sgYXV0b0xvY2sobUxvY2spOwotCi0gICAgc3NpemVfdCBpbmRleCA9IG1TZXNzaW9ucy5pbmRleE9mS2V5KHNlc3Npb25JRCk7Ci0KLSAgICBpZiAoaW5kZXggPCAwKSB7Ci0gICAgICAgIHJldHVybiAtRU5PRU5UOwotICAgIH0KLQotICAgIGNvbnN0IHNwPFNlc3Npb24+IHNlc3Npb24gPSBtU2Vzc2lvbnMudmFsdWVBdChpbmRleCk7Ci0gICAgaW50IHMgPSBzZXNzaW9uLT5zb2NrZXQoKTsKLQotICAgIHN0cnVjdCBzb2NrYWRkcl9pbiByZW1vdGVBZGRyOwotICAgIG1lbXNldChyZW1vdGVBZGRyLnNpbl96ZXJvLCAwLCBzaXplb2YocmVtb3RlQWRkci5zaW5femVybykpOwotICAgIHJlbW90ZUFkZHIuc2luX2ZhbWlseSA9IEFGX0lORVQ7Ci0gICAgcmVtb3RlQWRkci5zaW5fcG9ydCA9IGh0b25zKHJlbW90ZVBvcnQpOwotCi0gICAgc3RhdHVzX3QgZXJyID0gT0s7Ci0gICAgc3RydWN0IGhvc3RlbnQgKmVudCA9IGdldGhvc3RieW5hbWUocmVtb3RlSG9zdCk7Ci0gICAgaWYgKGVudCA9PSBOVUxMKSB7Ci0gICAgICAgIGVyciA9IC1oX2Vycm5vOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIHJlbW90ZUFkZHIuc2luX2FkZHIuc19hZGRyID0gKihpbl9hZGRyX3QgKillbnQtPmhfYWRkcjsKLQotICAgICAgICBpbnQgcmVzID0gY29ubmVjdCgKLSAgICAgICAgICAgICAgICBzLAotICAgICAgICAgICAgICAgIChjb25zdCBzdHJ1Y3Qgc29ja2FkZHIgKikmcmVtb3RlQWRkciwKLSAgICAgICAgICAgICAgICBzaXplb2YocmVtb3RlQWRkcikpOwotCi0gICAgICAgIGlmIChyZXMgPCAwKSB7Ci0gICAgICAgICAgICBlcnIgPSAtZXJybm87Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICByZXR1cm4gZXJyOwotfQotCi1zdGF0dXNfdCBBTmV0d29ya1Nlc3Npb246OnNlbmRSZXF1ZXN0KAotICAgICAgICBpbnQzMl90IHNlc3Npb25JRCwgY29uc3Qgdm9pZCAqZGF0YSwgc3NpemVfdCBzaXplLAotICAgICAgICBib29sIHRpbWVWYWxpZCwgaW50NjRfdCB0aW1lVXMpIHsKLSAgICBNdXRleDo6QXV0b2xvY2sgYXV0b0xvY2sobUxvY2spOwotCi0gICAgc3NpemVfdCBpbmRleCA9IG1TZXNzaW9ucy5pbmRleE9mS2V5KHNlc3Npb25JRCk7Ci0KLSAgICBpZiAoaW5kZXggPCAwKSB7Ci0gICAgICAgIHJldHVybiAtRU5PRU5UOwotICAgIH0KLQotICAgIGNvbnN0IHNwPFNlc3Npb24+IHNlc3Npb24gPSBtU2Vzc2lvbnMudmFsdWVBdChpbmRleCk7Ci0KLSAgICBzdGF0dXNfdCBlcnIgPSBzZXNzaW9uLT5zZW5kUmVxdWVzdChkYXRhLCBzaXplLCB0aW1lVmFsaWQsIHRpbWVVcyk7Ci0KLSAgICBpbnRlcnJ1cHQoKTsKLQotICAgIHJldHVybiBlcnI7Ci19Ci0KLXN0YXR1c190IEFOZXR3b3JrU2Vzc2lvbjo6c3dpdGNoVG9XZWJTb2NrZXRNb2RlKGludDMyX3Qgc2Vzc2lvbklEKSB7Ci0gICAgTXV0ZXg6OkF1dG9sb2NrIGF1dG9Mb2NrKG1Mb2NrKTsKLQotICAgIHNzaXplX3QgaW5kZXggPSBtU2Vzc2lvbnMuaW5kZXhPZktleShzZXNzaW9uSUQpOwotCi0gICAgaWYgKGluZGV4IDwgMCkgewotICAgICAgICByZXR1cm4gLUVOT0VOVDsKLSAgICB9Ci0KLSAgICBjb25zdCBzcDxTZXNzaW9uPiBzZXNzaW9uID0gbVNlc3Npb25zLnZhbHVlQXQoaW5kZXgpOwotICAgIHJldHVybiBzZXNzaW9uLT5zd2l0Y2hUb1dlYlNvY2tldE1vZGUoKTsKLX0KLQotdm9pZCBBTmV0d29ya1Nlc3Npb246OmludGVycnVwdCgpIHsKLSAgICBzdGF0aWMgY29uc3QgY2hhciBkdW1teSA9IDA7Ci0KLSAgICBzc2l6ZV90IG47Ci0gICAgZG8gewotICAgICAgICBuID0gd3JpdGUobVBpcGVGZFsxXSwgJmR1bW15LCAxKTsKLSAgICB9IHdoaWxlIChuIDwgMCAmJiBlcnJubyA9PSBFSU5UUik7Ci0KLSAgICBpZiAobiA8IDApIHsKLSAgICAgICAgQUxPR1coIkVycm9yIHdyaXRpbmcgdG8gcGlwZSAoJXMpIiwgc3RyZXJyb3IoZXJybm8pKTsKLSAgICB9Ci19Ci0KLXZvaWQgQU5ldHdvcmtTZXNzaW9uOjp0aHJlYWRMb29wKCkgewotICAgIGZkX3NldCBycywgd3M7Ci0gICAgRkRfWkVSTygmcnMpOwotICAgIEZEX1pFUk8oJndzKTsKLQotICAgIEZEX1NFVChtUGlwZUZkWzBdLCAmcnMpOwotICAgIGludCBtYXhGZCA9IG1QaXBlRmRbMF07Ci0KLSAgICB7Ci0gICAgICAgIE11dGV4OjpBdXRvbG9jayBhdXRvTG9jayhtTG9jayk7Ci0KLSAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtU2Vzc2lvbnMuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgICAgIGNvbnN0IHNwPFNlc3Npb24+ICZzZXNzaW9uID0gbVNlc3Npb25zLnZhbHVlQXQoaSk7Ci0KLSAgICAgICAgICAgIGludCBzID0gc2Vzc2lvbi0+c29ja2V0KCk7Ci0KLSAgICAgICAgICAgIGlmIChzIDwgMCkgewotICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBpZiAoc2Vzc2lvbi0+d2FudHNUb1JlYWQoKSkgewotICAgICAgICAgICAgICAgIEZEX1NFVChzLCAmcnMpOwotICAgICAgICAgICAgICAgIGlmIChzID4gbWF4RmQpIHsKLSAgICAgICAgICAgICAgICAgICAgbWF4RmQgPSBzOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgaWYgKHNlc3Npb24tPndhbnRzVG9Xcml0ZSgpKSB7Ci0gICAgICAgICAgICAgICAgRkRfU0VUKHMsICZ3cyk7Ci0gICAgICAgICAgICAgICAgaWYgKHMgPiBtYXhGZCkgewotICAgICAgICAgICAgICAgICAgICBtYXhGZCA9IHM7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotCi0gICAgaW50IHJlcyA9IHNlbGVjdChtYXhGZCArIDEsICZycywgJndzLCBOVUxMLCBOVUxMIC8qIHR2ICovKTsKLQotICAgIGlmIChyZXMgPT0gMCkgewotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgaWYgKHJlcyA8IDApIHsKLSAgICAgICAgaWYgKGVycm5vID09IEVJTlRSKSB7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLQotICAgICAgICBBTE9HRSgic2VsZWN0IGZhaWxlZCB3LyBlcnJvciAlZCAoJXMpIiwgZXJybm8sIHN0cmVycm9yKGVycm5vKSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBpZiAoRkRfSVNTRVQobVBpcGVGZFswXSwgJnJzKSkgewotICAgICAgICBjaGFyIGM7Ci0gICAgICAgIHNzaXplX3QgbjsKLSAgICAgICAgZG8gewotICAgICAgICAgICAgbiA9IHJlYWQobVBpcGVGZFswXSwgJmMsIDEpOwotICAgICAgICB9IHdoaWxlIChuIDwgMCAmJiBlcnJubyA9PSBFSU5UUik7Ci0KLSAgICAgICAgaWYgKG4gPCAwKSB7Ci0gICAgICAgICAgICBBTE9HVygiRXJyb3IgcmVhZGluZyBmcm9tIHBpcGUgKCVzKSIsIHN0cmVycm9yKGVycm5vKSk7Ci0gICAgICAgIH0KLQotICAgICAgICAtLXJlczsKLSAgICB9Ci0KLSAgICB7Ci0gICAgICAgIE11dGV4OjpBdXRvbG9jayBhdXRvTG9jayhtTG9jayk7Ci0KLSAgICAgICAgTGlzdDxzcDxTZXNzaW9uPiA+IHNlc3Npb25zVG9BZGQ7Ci0KLSAgICAgICAgZm9yIChzaXplX3QgaSA9IG1TZXNzaW9ucy5zaXplKCk7IHJlcyA+IDAgJiYgaSA+IDA7KSB7Ci0gICAgICAgICAgICBpLS07Ci0gICAgICAgICAgICBjb25zdCBzcDxTZXNzaW9uPiAmc2Vzc2lvbiA9IG1TZXNzaW9ucy52YWx1ZUF0KGkpOwotCi0gICAgICAgICAgICBpbnQgcyA9IHNlc3Npb24tPnNvY2tldCgpOwotCi0gICAgICAgICAgICBpZiAocyA8IDApIHsKLSAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgaWYgKEZEX0lTU0VUKHMsICZycykgfHwgRkRfSVNTRVQocywgJndzKSkgewotICAgICAgICAgICAgICAgIC0tcmVzOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBpZiAoRkRfSVNTRVQocywgJnJzKSkgewotICAgICAgICAgICAgICAgIGlmIChzZXNzaW9uLT5pc1JUU1BTZXJ2ZXIoKSB8fCBzZXNzaW9uLT5pc1RDUERhdGFncmFtU2VydmVyKCkpIHsKLSAgICAgICAgICAgICAgICAgICAgc3RydWN0IHNvY2thZGRyX2luIHJlbW90ZUFkZHI7Ci0gICAgICAgICAgICAgICAgICAgIHNvY2tsZW5fdCByZW1vdGVBZGRyTGVuID0gc2l6ZW9mKHJlbW90ZUFkZHIpOwotCi0gICAgICAgICAgICAgICAgICAgIGludCBjbGllbnRTb2NrZXQgPSBhY2NlcHQoCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgcywgKHN0cnVjdCBzb2NrYWRkciAqKSZyZW1vdGVBZGRyLCAmcmVtb3RlQWRkckxlbik7Ci0KLSAgICAgICAgICAgICAgICAgICAgaWYgKGNsaWVudFNvY2tldCA+PSAwKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBzdGF0dXNfdCBlcnIgPSBNYWtlU29ja2V0Tm9uQmxvY2tpbmcoY2xpZW50U29ja2V0KTsKLQotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGVyciAhPSBPSykgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFMT0dFKCJVbmFibGUgdG8gbWFrZSBjbGllbnQgc29ja2V0IG5vbiBibG9ja2luZywgIgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJmYWlsZWQgdy8gZXJyb3IgJWQgKCVzKSIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXJyLCBzdHJlcnJvcigtZXJyKSk7Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbG9zZShjbGllbnRTb2NrZXQpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsaWVudFNvY2tldCA9IC0xOwotICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbl9hZGRyX3QgYWRkciA9IG50b2hsKHJlbW90ZUFkZHIuc2luX2FkZHIuc19hZGRyKTsKLQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFMT0dJKCJpbmNvbWluZyBjb25uZWN0aW9uIGZyb20gJWQuJWQuJWQuJWQ6JWQgIgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIoc29ja2V0ICVkKSIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGFkZHIgPj4gMjQpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChhZGRyID4+IDE2KSAmIDB4ZmYsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGFkZHIgPj4gOCkgJiAweGZmLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFkZHIgJiAweGZmLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG50b2hzKHJlbW90ZUFkZHIuc2luX3BvcnQpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsaWVudFNvY2tldCk7Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcDxTZXNzaW9uPiBjbGllbnRTZXNzaW9uID0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3IFNlc3Npb24oCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbU5leHRTZXNzaW9uSUQrKywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTZXNzaW9uOjpDT05ORUNURUQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xpZW50U29ja2V0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlc3Npb24tPmdldE5vdGlmaWNhdGlvbk1lc3NhZ2UoKSk7Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGllbnRTZXNzaW9uLT5zZXRNb2RlKAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2Vzc2lvbi0+aXNSVFNQU2VydmVyKCkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IFNlc3Npb246Ok1PREVfUlRTUAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogU2Vzc2lvbjo6TU9ERV9EQVRBR1JBTSk7Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXNzaW9uc1RvQWRkLnB1c2hfYmFjayhjbGllbnRTZXNzaW9uKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIEFMT0dFKCJhY2NlcHQgcmV0dXJuZWQgZXJyb3IgJWQgKCVzKSIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlcnJubywgc3RyZXJyb3IoZXJybm8pKTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgIHN0YXR1c190IGVyciA9IHNlc3Npb24tPnJlYWRNb3JlKCk7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChlcnIgIT0gT0spIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIEFMT0dFKCJyZWFkTW9yZSBvbiBzb2NrZXQgJWQgZmFpbGVkIHcvIGVycm9yICVkICglcykiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcywgZXJyLCBzdHJlcnJvcigtZXJyKSk7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGlmIChGRF9JU1NFVChzLCAmd3MpKSB7Ci0gICAgICAgICAgICAgICAgc3RhdHVzX3QgZXJyID0gc2Vzc2lvbi0+d3JpdGVNb3JlKCk7Ci0gICAgICAgICAgICAgICAgaWYgKGVyciAhPSBPSykgewotICAgICAgICAgICAgICAgICAgICBBTE9HRSgid3JpdGVNb3JlIG9uIHNvY2tldCAlZCBmYWlsZWQgdy8gZXJyb3IgJWQgKCVzKSIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgIHMsIGVyciwgc3RyZXJyb3IoLWVycikpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIHdoaWxlICghc2Vzc2lvbnNUb0FkZC5lbXB0eSgpKSB7Ci0gICAgICAgICAgICBzcDxTZXNzaW9uPiBzZXNzaW9uID0gKnNlc3Npb25zVG9BZGQuYmVnaW4oKTsKLSAgICAgICAgICAgIHNlc3Npb25zVG9BZGQuZXJhc2Uoc2Vzc2lvbnNUb0FkZC5iZWdpbigpKTsKLQotICAgICAgICAgICAgbVNlc3Npb25zLmFkZChzZXNzaW9uLT5zZXNzaW9uSUQoKSwgc2Vzc2lvbik7Ci0KLSAgICAgICAgICAgIEFMT0dJKCJhZGRlZCBjbGllbnRTZXNzaW9uICVkIiwgc2Vzc2lvbi0+c2Vzc2lvbklEKCkpOwotICAgICAgICB9Ci0gICAgfQotfQotCi19ICAvLyBuYW1lc3BhY2UgYW5kcm9pZApkaWZmIC0tZ2l0IGEvbWVkaWEvbGlic3RhZ2VmcmlnaHQvZm91bmRhdGlvbi9BbmRyb2lkLmJwIGIvbWVkaWEvbGlic3RhZ2VmcmlnaHQvZm91bmRhdGlvbi9BbmRyb2lkLmJwCmluZGV4IDZiMzg0YzAuLjg2MTUyOGUgMTAwNjQ0Ci0tLSBhL21lZGlhL2xpYnN0YWdlZnJpZ2h0L2ZvdW5kYXRpb24vQW5kcm9pZC5icAorKysgYi9tZWRpYS9saWJzdGFnZWZyaWdodC9mb3VuZGF0aW9uL0FuZHJvaWQuYnAKQEAgLTU2LDE4ICs1NiwxNiBAQAogICAgICAgICAiQUJ1ZmZlci5jcHAiLAogICAgICAgICAiQURlYnVnLmNwcCIsCiAgICAgICAgICJBSGFuZGxlci5jcHAiLAotICAgICAgICAiQUhpZXJhcmNoaWNhbFN0YXRlTWFjaGluZS5jcHAiLAogICAgICAgICAiQUxvb3Blci5jcHAiLAogICAgICAgICAiQUxvb3BlclJvc3Rlci5jcHAiLAogICAgICAgICAiQU1lc3NhZ2UuY3BwIiwKLSAgICAgICAgIkFOZXR3b3JrU2Vzc2lvbi5jcHAiLAogICAgICAgICAiQVN0cmluZy5jcHAiLAogICAgICAgICAiQVN0cmluZ1V0aWxzLmNwcCIsCisgICAgICAgICJBdWRpb1ByZXNlbnRhdGlvbkluZm8uY3BwIiwKICAgICAgICAgIkJ5dGVVdGlscy5jcHAiLAogICAgICAgICAiQ29sb3JVdGlscy5jcHAiLAogICAgICAgICAiTWVkaWFEZWZzLmNwcCIsCiAgICAgICAgICJNZWRpYUtleXMuY3BwIiwKLSAgICAgICAgIlBhcnNlZE1lc3NhZ2UuY3BwIiwKICAgICAgICAgImF2Y191dGlscy5jcHAiLAogICAgICAgICAiYmFzZTY0LmNwcCIsCiAgICAgICAgICJoZXhkdW1wLmNwcCIsCmRpZmYgLS1naXQgYS9tZWRpYS9saWJzdGFnZWZyaWdodC9mb3VuZGF0aW9uL0F1ZGlvUHJlc2VudGF0aW9uSW5mby5jcHAgYi9tZWRpYS9saWJzdGFnZWZyaWdodC9mb3VuZGF0aW9uL0F1ZGlvUHJlc2VudGF0aW9uSW5mby5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGI4ZTk2OQotLS0gL2Rldi9udWxsCisrKyBiL21lZGlhL2xpYnN0YWdlZnJpZ2h0L2ZvdW5kYXRpb24vQXVkaW9QcmVzZW50YXRpb25JbmZvLmNwcApAQCAtMCwwICsxLDEzNiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxOCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCisKKy8vICNkZWZpbmUgTE9HX05ERUJVRyAwCisjZGVmaW5lIExPR19UQUcgIkF1ZGlvUHJlc2VudGF0aW9uSW5mbyIKKworI2luY2x1ZGUgPHZlY3Rvcj4KKworI2luY2x1ZGUgIkF1ZGlvUHJlc2VudGF0aW9uSW5mby5oIgorCisjaW5jbHVkZSA8dXRpbHMvTG9nLmg+CisKK25hbWVzcGFjZSBhbmRyb2lkIHsKKwordm9pZCBzZXJpYWxpemVBdWRpb1ByZXNlbnRhdGlvbnMoY29uc3QgQXVkaW9QcmVzZW50YXRpb25Db2xsZWN0aW9uJiBwcmVzZW50YXRpb25zLAorICAgICAgICBzdGQ6Om9zdHJlYW0qIHNlcmlhbGl6ZWRPdXRwdXQpIHsKKyAgICB1aW50MzJfdCBudW1QcmVzZW50YXRpb25zID0gcHJlc2VudGF0aW9ucy5zaXplKCk7CisgICAgc2VyaWFsaXplZE91dHB1dC0+d3JpdGUocmVpbnRlcnByZXRfY2FzdDxjaGFyKj4oJm51bVByZXNlbnRhdGlvbnMpLCBzaXplb2YobnVtUHJlc2VudGF0aW9ucykpOworICAgIGZvciAoY29uc3QgYXV0byYgYXAgOiBwcmVzZW50YXRpb25zKSB7CisgICAgICAgIGlmIChhcC5tVmVyc2lvbiA9PSBQUkVTRU5UQVRJT05fVkVSU0lPTl8xKSB7CisgICAgICAgICAgICBzZXJpYWxpemVkT3V0cHV0LT53cml0ZSgKKyAgICAgICAgICAgICAgICAgICAgY29uc3RfY2FzdDxjaGFyKj4ocmVpbnRlcnByZXRfY2FzdDxjb25zdCBjaGFyKj4oJmFwLm1WZXJzaW9uKSksCisgICAgICAgICAgICAgICAgICAgIHNpemVvZihhcC5tVmVyc2lvbikpOworICAgICAgICAgICAgc2VyaWFsaXplZE91dHB1dC0+d3JpdGUoCisgICAgICAgICAgICAgICAgICAgIGNvbnN0X2Nhc3Q8Y2hhcio+KHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgY2hhcio+KCZhcC5tUHJlc2VudGF0aW9uSWQpKSwKKyAgICAgICAgICAgICAgICAgICAgc2l6ZW9mKGFwLm1QcmVzZW50YXRpb25JZCkpOworICAgICAgICAgICAgc2VyaWFsaXplZE91dHB1dC0+d3JpdGUoCisgICAgICAgICAgICAgICAgICAgIGNvbnN0X2Nhc3Q8Y2hhcio+KHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgY2hhcio+KCZhcC5tUHJvZ3JhbUlkKSksCisgICAgICAgICAgICAgICAgICAgIHNpemVvZihhcC5tUHJvZ3JhbUlkKSk7CisKKyAgICAgICAgICAgIHVpbnQzMl90IG51bUxhYmVscyA9IGFwLm1MYWJlbHMuc2l6ZSgpOworICAgICAgICAgICAgc2VyaWFsaXplZE91dHB1dC0+d3JpdGUoCisgICAgICAgICAgICAgICAgICAgIGNvbnN0X2Nhc3Q8Y2hhcio+KHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgY2hhcio+KCZudW1MYWJlbHMpKSwKKyAgICAgICAgICAgICAgICAgICAgc2l6ZW9mKG51bUxhYmVscykpOworICAgICAgICAgICAgZm9yIChjb25zdCBhdXRvJiBsYWJlbCA6IGFwLm1MYWJlbHMpIHsKKyAgICAgICAgICAgICAgICB1aW50MzJfdCBsYWJlbEtleVNpemUgPSBsYWJlbC5maXJzdC5zaXplKCk7CisgICAgICAgICAgICAgICAgc2VyaWFsaXplZE91dHB1dC0+d3JpdGUoCisgICAgICAgICAgICAgICAgICAgICAgICBjb25zdF9jYXN0PGNoYXIqPihyZWludGVycHJldF9jYXN0PGNvbnN0IGNoYXIqPigmbGFiZWxLZXlTaXplKSksCisgICAgICAgICAgICAgICAgICAgICAgICBzaXplb2YobGFiZWxLZXlTaXplKSk7CisgICAgICAgICAgICAgICAgc2VyaWFsaXplZE91dHB1dC0+d3JpdGUobGFiZWwuZmlyc3QuY19zdHIoKSwgbGFiZWxLZXlTaXplKTsKKworICAgICAgICAgICAgICAgIHVpbnQzMl90IGxhYmVsVmFsU2l6ZSA9IGxhYmVsLnNlY29uZC5zaXplKCk7CisgICAgICAgICAgICAgICAgc2VyaWFsaXplZE91dHB1dC0+d3JpdGUoCisgICAgICAgICAgICAgICAgICAgICAgICBjb25zdF9jYXN0PGNoYXIqPihyZWludGVycHJldF9jYXN0PGNvbnN0IGNoYXIqPigmbGFiZWxWYWxTaXplKSksCisgICAgICAgICAgICAgICAgICAgICAgICBzaXplb2YobGFiZWxWYWxTaXplKSk7CisgICAgICAgICAgICAgICAgc2VyaWFsaXplZE91dHB1dC0+d3JpdGUobGFiZWwuc2Vjb25kLmNfc3RyKCksIGxhYmVsVmFsU2l6ZSk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHVpbnQzMl90IGxhbmdTaXplID0gYXAubUxhbmd1YWdlLnNpemUoKTsKKyAgICAgICAgICAgIHNlcmlhbGl6ZWRPdXRwdXQtPndyaXRlKAorICAgICAgICAgICAgICAgICAgICBjb25zdF9jYXN0PGNoYXIqPihyZWludGVycHJldF9jYXN0PGNvbnN0IGNoYXIqPigmbGFuZ1NpemUpKSwKKyAgICAgICAgICAgICAgICAgICAgc2l6ZW9mKGxhbmdTaXplKSk7CisgICAgICAgICAgICBzZXJpYWxpemVkT3V0cHV0LT53cml0ZShhcC5tTGFuZ3VhZ2UuY19zdHIoKSwgbGFuZ1NpemUpOworCisgICAgICAgICAgICBzZXJpYWxpemVkT3V0cHV0LT53cml0ZSgKKyAgICAgICAgICAgICAgICAgICAgY29uc3RfY2FzdDxjaGFyKj4ocmVpbnRlcnByZXRfY2FzdDxjb25zdCBjaGFyKj4oJmFwLm1NYXN0ZXJpbmdJbmRpY2F0aW9uKSksCisgICAgICAgICAgICAgICAgICAgIHNpemVvZihhcC5tTWFzdGVyaW5nSW5kaWNhdGlvbikpOworICAgICAgICAgICAgc2VyaWFsaXplZE91dHB1dC0+d3JpdGUoCisgICAgICAgICAgICAgICAgICAgIGNvbnN0X2Nhc3Q8Y2hhcio+KHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgY2hhcio+KCZhcC5tQXVkaW9EZXNjcmlwdGlvbkF2YWlsYWJsZSkpLAorICAgICAgICAgICAgICAgICAgICBzaXplb2YoYXAubUF1ZGlvRGVzY3JpcHRpb25BdmFpbGFibGUpKTsKKyAgICAgICAgICAgIHNlcmlhbGl6ZWRPdXRwdXQtPndyaXRlKAorICAgICAgICAgICAgICAgICAgICBjb25zdF9jYXN0PGNoYXIqPihyZWludGVycHJldF9jYXN0PGNvbnN0IGNoYXIqPigmYXAubVNwb2tlblN1YnRpdGxlc0F2YWlsYWJsZSkpLAorICAgICAgICAgICAgICAgICAgICBzaXplb2YoYXAubVNwb2tlblN1YnRpdGxlc0F2YWlsYWJsZSkpOworICAgICAgICAgICAgc2VyaWFsaXplZE91dHB1dC0+d3JpdGUoCisgICAgICAgICAgICAgICAgICAgIGNvbnN0X2Nhc3Q8Y2hhcio+KHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgY2hhcio+KCZhcC5tRGlhbG9ndWVFbmhhbmNlbWVudEF2YWlsYWJsZSkpLAorICAgICAgICAgICAgICAgICAgICBzaXplb2YoYXAubURpYWxvZ3VlRW5oYW5jZW1lbnRBdmFpbGFibGUpKTsKKyAgICAgICAgfQorICAgIH0KK30KKworc3RhdHVzX3QgZGVzZXJpYWxpemVBdWRpb1ByZXNlbnRhdGlvbnMoc3RkOjppc3RyZWFtKiBzZXJpYWxpemVkSW5wdXQsCisgICAgICAgIEF1ZGlvUHJlc2VudGF0aW9uQ29sbGVjdGlvbiAqcHJlc2VudGF0aW9ucykgeworICAgIHVpbnQzMl90IG51bVByZXNlbnRhdGlvbnM7CisgICAgc2VyaWFsaXplZElucHV0LT5yZWFkKHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KCZudW1QcmVzZW50YXRpb25zKSwgc2l6ZW9mKG51bVByZXNlbnRhdGlvbnMpKTsKKyAgICBmb3IgKHVpbnQzMl90IGkgPSAwOyBpIDwgbnVtUHJlc2VudGF0aW9uczsgKytpKSB7CisgICAgICAgIHVpbnQzMl90IHZlcnNpb247CisgICAgICAgIHNlcmlhbGl6ZWRJbnB1dC0+cmVhZChyZWludGVycHJldF9jYXN0PGNoYXIqPigmdmVyc2lvbiksIHNpemVvZih2ZXJzaW9uKSk7CisgICAgICAgIGlmICh2ZXJzaW9uID09IFBSRVNFTlRBVElPTl9WRVJTSU9OXzEpIHsKKyAgICAgICAgICAgIEF1ZGlvUHJlc2VudGF0aW9uVjEgYXA7CisgICAgICAgICAgICBzZXJpYWxpemVkSW5wdXQtPnJlYWQoCisgICAgICAgICAgICAgICAgICAgIHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KCZhcC5tUHJlc2VudGF0aW9uSWQpLAorICAgICAgICAgICAgICAgICAgICBzaXplb2YoYXAubVByZXNlbnRhdGlvbklkKSk7CisgICAgICAgICAgICBzZXJpYWxpemVkSW5wdXQtPnJlYWQocmVpbnRlcnByZXRfY2FzdDxjaGFyKj4oJmFwLm1Qcm9ncmFtSWQpLCBzaXplb2YoYXAubVByb2dyYW1JZCkpOworCisgICAgICAgICAgICB1aW50MzJfdCBudW1MYWJlbHM7CisgICAgICAgICAgICBzZXJpYWxpemVkSW5wdXQtPnJlYWQocmVpbnRlcnByZXRfY2FzdDxjaGFyKj4oJm51bUxhYmVscyksIHNpemVvZihudW1MYWJlbHMpKTsKKyAgICAgICAgICAgIGZvciAodWludDMyX3QgaiA9IDA7IGogPCBudW1MYWJlbHM7ICsraikgeworICAgICAgICAgICAgICAgIHVpbnQzMl90IGxhYmVsS2V5U2l6ZTsKKyAgICAgICAgICAgICAgICBzZXJpYWxpemVkSW5wdXQtPnJlYWQocmVpbnRlcnByZXRfY2FzdDxjaGFyKj4oJmxhYmVsS2V5U2l6ZSksIHNpemVvZihsYWJlbEtleVNpemUpKTsKKyAgICAgICAgICAgICAgICBzdGQ6OnZlY3RvcjxjaGFyPiBsYWJlbEtleShsYWJlbEtleVNpemUpOworICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWRJbnB1dC0+cmVhZChsYWJlbEtleS5kYXRhKCksIGxhYmVsS2V5U2l6ZSk7CisKKyAgICAgICAgICAgICAgICB1aW50MzJfdCBsYWJlbFZhbFNpemU7CisgICAgICAgICAgICAgICAgc2VyaWFsaXplZElucHV0LT5yZWFkKHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KCZsYWJlbFZhbFNpemUpLCBzaXplb2YobGFiZWxWYWxTaXplKSk7CisgICAgICAgICAgICAgICAgc3RkOjp2ZWN0b3I8Y2hhcj4gbGFiZWxWYWwobGFiZWxWYWxTaXplKTsKKyAgICAgICAgICAgICAgICBzZXJpYWxpemVkSW5wdXQtPnJlYWQobGFiZWxWYWwuZGF0YSgpLCBsYWJlbFZhbFNpemUpOworICAgICAgICAgICAgICAgIGFwLm1MYWJlbHMuZW1wbGFjZSgKKyAgICAgICAgICAgICAgICAgICAgICAgIHN0ZDo6c3RyaW5nKHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KGxhYmVsS2V5LmRhdGEoKSksIGxhYmVsS2V5U2l6ZSksCisgICAgICAgICAgICAgICAgICAgICAgICBzdGQ6OnN0cmluZyhyZWludGVycHJldF9jYXN0PGNoYXIqPihsYWJlbFZhbC5kYXRhKCkpLCBsYWJlbFZhbFNpemUpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHVpbnQzMl90IGxhbmd1YWdlU2l6ZTsKKyAgICAgICAgICAgIHNlcmlhbGl6ZWRJbnB1dC0+cmVhZChyZWludGVycHJldF9jYXN0PGNoYXIqPigmbGFuZ3VhZ2VTaXplKSwgc2l6ZW9mKGxhbmd1YWdlU2l6ZSkpOworICAgICAgICAgICAgc3RkOjp2ZWN0b3I8Y2hhcj4gbGFuZ3VhZ2UobGFuZ3VhZ2VTaXplKTsKKyAgICAgICAgICAgIHNlcmlhbGl6ZWRJbnB1dC0+cmVhZChsYW5ndWFnZS5kYXRhKCksIGxhbmd1YWdlU2l6ZSk7CisgICAgICAgICAgICBhcC5tTGFuZ3VhZ2UgPSBzdGQ6OnN0cmluZyhyZWludGVycHJldF9jYXN0PGNoYXIqPihsYW5ndWFnZS5kYXRhKCkpLCBsYW5ndWFnZVNpemUpOworICAgICAgICAgICAgc2VyaWFsaXplZElucHV0LT5yZWFkKHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KCZhcC5tTWFzdGVyaW5nSW5kaWNhdGlvbiksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplb2YoYXAubU1hc3RlcmluZ0luZGljYXRpb24pKTsKKyAgICAgICAgICAgIHNlcmlhbGl6ZWRJbnB1dC0+cmVhZChyZWludGVycHJldF9jYXN0PGNoYXIqPigmYXAubUF1ZGlvRGVzY3JpcHRpb25BdmFpbGFibGUpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZW9mKGFwLm1BdWRpb0Rlc2NyaXB0aW9uQXZhaWxhYmxlKSk7CisgICAgICAgICAgICBzZXJpYWxpemVkSW5wdXQtPnJlYWQocmVpbnRlcnByZXRfY2FzdDxjaGFyKj4oJmFwLm1TcG9rZW5TdWJ0aXRsZXNBdmFpbGFibGUpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZW9mKGFwLm1TcG9rZW5TdWJ0aXRsZXNBdmFpbGFibGUpKTsKKyAgICAgICAgICAgIHNlcmlhbGl6ZWRJbnB1dC0+cmVhZChyZWludGVycHJldF9jYXN0PGNoYXIqPigmYXAubURpYWxvZ3VlRW5oYW5jZW1lbnRBdmFpbGFibGUpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZW9mKGFwLm1EaWFsb2d1ZUVuaGFuY2VtZW50QXZhaWxhYmxlKSk7CisgICAgICAgICAgICBwcmVzZW50YXRpb25zLT5wdXNoX2JhY2soc3RkOjptb3ZlKGFwKSk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBBTE9HRSgiQXVkaW8gcHJlc2VudGF0aW9uIGluZm8gdmVyc2lvbiBpcyBub3Qgc3VwcG9ydGVkIik7CisgICAgICAgICAgICByZXR1cm4gSU5WQUxJRF9PUEVSQVRJT047CisgICAgICAgIH0KKyAgICB9CisgICAgcmV0dXJuIE9LOworfQorCit9ICAvLyBuYW1lc3BhY2UgYW5kcm9pZApkaWZmIC0tZ2l0IGEvbWVkaWEvbGlic3RhZ2VmcmlnaHQvZm91bmRhdGlvbi9Db2xvclV0aWxzLmNwcCBiL21lZGlhL2xpYnN0YWdlZnJpZ2h0L2ZvdW5kYXRpb24vQ29sb3JVdGlscy5jcHAKaW5kZXggYzRlYWEyNy4uMDcwZTMyNSAxMDA2NDQKLS0tIGEvbWVkaWEvbGlic3RhZ2VmcmlnaHQvZm91bmRhdGlvbi9Db2xvclV0aWxzLmNwcAorKysgYi9tZWRpYS9saWJzdGFnZWZyaWdodC9mb3VuZGF0aW9uL0NvbG9yVXRpbHMuY3BwCkBAIC0yMyw2ICsyMyw3IEBACiAjaW5jbHVkZSA8bWVkaWEvc3RhZ2VmcmlnaHQvZm91bmRhdGlvbi9BRGVidWcuaD4KICNpbmNsdWRlIDxtZWRpYS9zdGFnZWZyaWdodC9mb3VuZGF0aW9uL0FMb29rdXAuaD4KICNpbmNsdWRlIDxtZWRpYS9zdGFnZWZyaWdodC9mb3VuZGF0aW9uL0NvbG9yVXRpbHMuaD4KKyNpbmNsdWRlIDxtZWRpYS9OZGtNZWRpYUZvcm1hdFByaXYuaD4KIAogbmFtZXNwYWNlIGFuZHJvaWQgewogCkBAIC0zNDIsNiArMzQzLDE0IEBACiAgICAgYXNwZWN0cy5tUmFuZ2UgPSBmdWxsUmFuZ2UgPyBDb2xvckFzcGVjdHM6OlJhbmdlRnVsbCA6IENvbG9yQXNwZWN0czo6UmFuZ2VMaW1pdGVkOwogfQogCit2b2lkIENvbG9yVXRpbHM6OmNvbnZlcnRJc29Db2xvckFzcGVjdHNUb1BsYXRmb3JtQXNwZWN0cygKKyAgICAgICAgaW50MzJfdCBwcmltYXJpZXMsIGludDMyX3QgaW50cmFuc2ZlciwgaW50MzJfdCBjb2VmZnMsIGJvb2wgZnVsbFJhbmdlLAorICAgICAgICBpbnQzMl90ICpyYW5nZSwgaW50MzJfdCAqc3RhbmRhcmQsIGludDMyX3QgKm91dHRyYW5zZmVyKSB7CisgICAgQ29sb3JBc3BlY3RzIGFzcGVjdHM7CisgICAgY29udmVydElzb0NvbG9yQXNwZWN0c1RvQ29kZWNBc3BlY3RzKHByaW1hcmllcywgaW50cmFuc2ZlciwgY29lZmZzLCBmdWxsUmFuZ2UsIGFzcGVjdHMpOworICAgIGNvbnZlcnRDb2RlY0NvbG9yQXNwZWN0c1RvUGxhdGZvcm1Bc3BlY3RzKGFzcGVjdHMsIHJhbmdlLCBzdGFuZGFyZCwgb3V0dHJhbnNmZXIpOworfQorCiAvLyBzdGF0aWMKIENvbG9yQXNwZWN0cyBDb2xvclV0aWxzOjp1bnBhY2tUb0NvbG9yQXNwZWN0cyh1aW50MzJfdCBwYWNrZWQpIHsKICAgICBDb2xvckFzcGVjdHMgYXNwZWN0czsKQEAgLTY4NCw2ICs2OTMsMTMgQEAKICAgICAgICAgICAgIHRyYW5zZmVyLCBhc1N0cmluZygoQ29sb3JUcmFuc2Zlcil0cmFuc2ZlcikpOwogfQogCisKKy8vIHN0YXRpYwordm9pZCBDb2xvclV0aWxzOjpzZXRIRFJTdGF0aWNJbmZvSW50b0FNZWRpYUZvcm1hdCgKKyAgICAgICAgY29uc3QgSERSU3RhdGljSW5mbyAmaW5mbywgQU1lZGlhRm9ybWF0ICpmb3JtYXQpIHsKKyAgICBzZXRIRFJTdGF0aWNJbmZvSW50b0Zvcm1hdChpbmZvLCBmb3JtYXQtPm1Gb3JtYXQpOworfQorCiAvLyBzdGF0aWMKIHZvaWQgQ29sb3JVdGlsczo6c2V0SERSU3RhdGljSW5mb0ludG9Gb3JtYXQoCiAgICAgICAgIGNvbnN0IEhEUlN0YXRpY0luZm8gJmluZm8sIHNwPEFNZXNzYWdlPiAmZm9ybWF0KSB7CmRpZmYgLS1naXQgYS9tZWRpYS9saWJzdGFnZWZyaWdodC9mb3VuZGF0aW9uL01lZGlhRGVmcy5jcHAgYi9tZWRpYS9saWJzdGFnZWZyaWdodC9mb3VuZGF0aW9uL01lZGlhRGVmcy5jcHAKaW5kZXggZTVhODVlOS4uZjkzYWU2NSAxMDA2NDQKLS0tIGEvbWVkaWEvbGlic3RhZ2VmcmlnaHQvZm91bmRhdGlvbi9NZWRpYURlZnMuY3BwCisrKyBiL21lZGlhL2xpYnN0YWdlZnJpZ2h0L2ZvdW5kYXRpb24vTWVkaWFEZWZzLmNwcApAQCAtNTAsMTIgKzUwLDEzIEBACiBjb25zdCBjaGFyICpNRURJQV9NSU1FVFlQRV9BVURJT19NU0dTTSA9ICJhdWRpby9nc20iOwogY29uc3QgY2hhciAqTUVESUFfTUlNRVRZUEVfQVVESU9fQUMzID0gImF1ZGlvL2FjMyI7CiBjb25zdCBjaGFyICpNRURJQV9NSU1FVFlQRV9BVURJT19FQUMzID0gImF1ZGlvL2VhYzMiOworY29uc3QgY2hhciAqTUVESUFfTUlNRVRZUEVfQVVESU9fQUM0ID0gImF1ZGlvL2FjNCI7CiBjb25zdCBjaGFyICpNRURJQV9NSU1FVFlQRV9BVURJT19TQ1JBTUJMRUQgPSAiYXVkaW8vc2NyYW1ibGVkIjsKIGNvbnN0IGNoYXIgKk1FRElBX01JTUVUWVBFX0FVRElPX0FMQUMgPSAiYXVkaW8vYWxhYyI7CiAKIGNvbnN0IGNoYXIgKk1FRElBX01JTUVUWVBFX0NPTlRBSU5FUl9NUEVHNCA9ICJ2aWRlby9tcDQiOwogY29uc3QgY2hhciAqTUVESUFfTUlNRVRZUEVfQ09OVEFJTkVSX1dBViA9ICJhdWRpby94LXdhdiI7Ci1jb25zdCBjaGFyICpNRURJQV9NSU1FVFlQRV9DT05UQUlORVJfT0dHID0gImFwcGxpY2F0aW9uL29nZyI7Citjb25zdCBjaGFyICpNRURJQV9NSU1FVFlQRV9DT05UQUlORVJfT0dHID0gImF1ZGlvL29nZyI7CiBjb25zdCBjaGFyICpNRURJQV9NSU1FVFlQRV9DT05UQUlORVJfTUFUUk9TS0EgPSAidmlkZW8veC1tYXRyb3NrYSI7CiBjb25zdCBjaGFyICpNRURJQV9NSU1FVFlQRV9DT05UQUlORVJfTVBFRzJUUyA9ICJ2aWRlby9tcDJ0cyI7CiBjb25zdCBjaGFyICpNRURJQV9NSU1FVFlQRV9DT05UQUlORVJfQVZJID0gInZpZGVvL2F2aSI7CmRpZmYgLS1naXQgYS9tZWRpYS9saWJzdGFnZWZyaWdodC9mb3VuZGF0aW9uL1BhcnNlZE1lc3NhZ2UuY3BwIGIvbWVkaWEvbGlic3RhZ2VmcmlnaHQvZm91bmRhdGlvbi9QYXJzZWRNZXNzYWdlLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDQ5YzlhZC4uMDAwMDAwMAotLS0gYS9tZWRpYS9saWJzdGFnZWZyaWdodC9mb3VuZGF0aW9uL1BhcnNlZE1lc3NhZ2UuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsMzAyICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgMjAxMiwgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAotICoKLSAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwotICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgotICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0gKgotICogICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotICoKLSAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKLSAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCi0gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KLSAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKLSAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgotICovCi0KLSNpbmNsdWRlICJQYXJzZWRNZXNzYWdlLmgiCi0KLSNpbmNsdWRlIDxjdHlwZS5oPgotI2luY2x1ZGUgPG1lZGlhL3N0YWdlZnJpZ2h0L2ZvdW5kYXRpb24vQUJ1ZmZlci5oPgotI2luY2x1ZGUgPG1lZGlhL3N0YWdlZnJpZ2h0L2ZvdW5kYXRpb24vQURlYnVnLmg+Ci0jaW5jbHVkZSA8bWVkaWEvc3RhZ2VmcmlnaHQvZm91bmRhdGlvbi9oZXhkdW1wLmg+Ci0KLW5hbWVzcGFjZSBhbmRyb2lkIHsKLQotLy8gc3RhdGljCi1zcDxQYXJzZWRNZXNzYWdlPiBQYXJzZWRNZXNzYWdlOjpQYXJzZSgKLSAgICAgICAgY29uc3QgY2hhciAqZGF0YSwgc2l6ZV90IHNpemUsIGJvb2wgbm9Nb3JlRGF0YSwgc2l6ZV90ICpsZW5ndGgpIHsKLSAgICBzcDxQYXJzZWRNZXNzYWdlPiBtc2cgPSBuZXcgUGFyc2VkTWVzc2FnZTsKLSAgICBzc2l6ZV90IHJlcyA9IG1zZy0+cGFyc2UoZGF0YSwgc2l6ZSwgbm9Nb3JlRGF0YSk7Ci0KLSAgICBpZiAocmVzIDwgMCkgewotICAgICAgICAqbGVuZ3RoID0gMDsKLSAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgfQotCi0gICAgKmxlbmd0aCA9IHJlczsKLSAgICByZXR1cm4gbXNnOwotfQotCi1QYXJzZWRNZXNzYWdlOjpQYXJzZWRNZXNzYWdlKCkgewotfQotCi1QYXJzZWRNZXNzYWdlOjp+UGFyc2VkTWVzc2FnZSgpIHsKLX0KLQotYm9vbCBQYXJzZWRNZXNzYWdlOjpmaW5kU3RyaW5nKGNvbnN0IGNoYXIgKm5hbWUsIEFTdHJpbmcgKnZhbHVlKSBjb25zdCB7Ci0gICAgQVN0cmluZyBrZXkgPSBuYW1lOwotICAgIGtleS50b2xvd2VyKCk7Ci0KLSAgICBzc2l6ZV90IGluZGV4ID0gbURpY3QuaW5kZXhPZktleShrZXkpOwotCi0gICAgaWYgKGluZGV4IDwgMCkgewotICAgICAgICB2YWx1ZS0+Y2xlYXIoKTsKLQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgKnZhbHVlID0gbURpY3QudmFsdWVBdChpbmRleCk7Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLWJvb2wgUGFyc2VkTWVzc2FnZTo6ZmluZEludDMyKGNvbnN0IGNoYXIgKm5hbWUsIGludDMyX3QgKnZhbHVlKSBjb25zdCB7Ci0gICAgQVN0cmluZyBzdHJpbmdWYWx1ZTsKLQotICAgIGlmICghZmluZFN0cmluZyhuYW1lLCAmc3RyaW5nVmFsdWUpKSB7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICBjaGFyICplbmQ7Ci0gICAgKnZhbHVlID0gc3RydG9sKHN0cmluZ1ZhbHVlLmNfc3RyKCksICZlbmQsIDEwKTsKLQotICAgIGlmIChlbmQgPT0gc3RyaW5nVmFsdWUuY19zdHIoKSB8fCAqZW5kICE9ICdcMCcpIHsKLSAgICAgICAgKnZhbHVlID0gMDsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIHJldHVybiB0cnVlOwotfQotCi1jb25zdCBjaGFyICpQYXJzZWRNZXNzYWdlOjpnZXRDb250ZW50KCkgY29uc3QgewotICAgIHJldHVybiBtQ29udGVudC5jX3N0cigpOwotfQotCi1zc2l6ZV90IFBhcnNlZE1lc3NhZ2U6OnBhcnNlKGNvbnN0IGNoYXIgKmRhdGEsIHNpemVfdCBzaXplLCBib29sIG5vTW9yZURhdGEpIHsKLSAgICBpZiAoc2l6ZSA9PSAwKSB7Ci0gICAgICAgIHJldHVybiAtMTsKLSAgICB9Ci0KLSAgICBzc2l6ZV90IGxhc3REaWN0SW5kZXggPSAtMTsKLQotICAgIHNpemVfdCBvZmZzZXQgPSAwOwotICAgIGJvb2wgaGVhZGVyc0NvbXBsZXRlID0gZmFsc2U7Ci0gICAgd2hpbGUgKG9mZnNldCA8IHNpemUpIHsKLSAgICAgICAgc2l6ZV90IGxpbmVFbmRPZmZzZXQgPSBvZmZzZXQ7Ci0gICAgICAgIHdoaWxlIChsaW5lRW5kT2Zmc2V0ICsgMSA8IHNpemUKLSAgICAgICAgICAgICAgICAmJiAoZGF0YVtsaW5lRW5kT2Zmc2V0XSAhPSAnXHInCi0gICAgICAgICAgICAgICAgICAgICAgICB8fCBkYXRhW2xpbmVFbmRPZmZzZXQgKyAxXSAhPSAnXG4nKSkgewotICAgICAgICAgICAgKytsaW5lRW5kT2Zmc2V0OwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKGxpbmVFbmRPZmZzZXQgKyAxID49IHNpemUpIHsKLSAgICAgICAgICAgIHJldHVybiAtMTsKLSAgICAgICAgfQotCi0gICAgICAgIEFTdHJpbmcgbGluZSgmZGF0YVtvZmZzZXRdLCBsaW5lRW5kT2Zmc2V0IC0gb2Zmc2V0KTsKLQotICAgICAgICBpZiAob2Zmc2V0ID09IDApIHsKLSAgICAgICAgICAgIC8vIFNwZWNpYWwgaGFuZGxpbmcgZm9yIHRoZSByZXF1ZXN0L3N0YXR1cyBsaW5lLgotCi0gICAgICAgICAgICBtRGljdC5hZGQoQVN0cmluZygiXyIpLCBsaW5lKTsKLSAgICAgICAgICAgIG9mZnNldCA9IGxpbmVFbmRPZmZzZXQgKyAyOwotCi0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgfQotCi0gICAgICAgIGlmIChsaW5lRW5kT2Zmc2V0ID09IG9mZnNldCkgewotICAgICAgICAgICAgLy8gQW4gZW1wdHkgbGluZSBzZXBhcmF0ZXMgaGVhZGVycyBmcm9tIGJvZHkuCi0gICAgICAgICAgICBoZWFkZXJzQ29tcGxldGUgPSB0cnVlOwotICAgICAgICAgICAgb2Zmc2V0ICs9IDI7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotCi0gICAgICAgIGlmIChsaW5lLmNfc3RyKClbMF0gPT0gJyAnIHx8IGxpbmUuY19zdHIoKVswXSA9PSAnXHQnKSB7Ci0gICAgICAgICAgICAvLyBTdXBwb3J0IGZvciBmb2xkZWQgaGVhZGVyIHZhbHVlcy4KLQotICAgICAgICAgICAgaWYgKGxhc3REaWN0SW5kZXggPj0gMCkgewotICAgICAgICAgICAgICAgIC8vIE90aGVyd2lzZSBpdCdzIG1hbGZvcm1lZCBzaW5jZSB0aGUgZmlyc3QgaGVhZGVyIGxpbmUKLSAgICAgICAgICAgICAgICAvLyBjYW5ub3QgY29udGludWUgYW55dGhpbmcuLi4KLQotICAgICAgICAgICAgICAgIEFTdHJpbmcgJnZhbHVlID0gbURpY3QuZWRpdFZhbHVlQXQobGFzdERpY3RJbmRleCk7Ci0gICAgICAgICAgICAgICAgdmFsdWUuYXBwZW5kKGxpbmUpOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBvZmZzZXQgPSBsaW5lRW5kT2Zmc2V0ICsgMjsKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICB9Ci0KLSAgICAgICAgc3NpemVfdCBjb2xvblBvcyA9IGxpbmUuZmluZCgiOiIpOwotICAgICAgICBpZiAoY29sb25Qb3MgPj0gMCkgewotICAgICAgICAgICAgQVN0cmluZyBrZXkobGluZSwgMCwgY29sb25Qb3MpOwotICAgICAgICAgICAga2V5LnRyaW0oKTsKLSAgICAgICAgICAgIGtleS50b2xvd2VyKCk7Ci0KLSAgICAgICAgICAgIGxpbmUuZXJhc2UoMCwgY29sb25Qb3MgKyAxKTsKLQotICAgICAgICAgICAgbGFzdERpY3RJbmRleCA9IG1EaWN0LmFkZChrZXksIGxpbmUpOwotICAgICAgICB9Ci0KLSAgICAgICAgb2Zmc2V0ID0gbGluZUVuZE9mZnNldCArIDI7Ci0gICAgfQotCi0gICAgaWYgKCFoZWFkZXJzQ29tcGxldGUgJiYgKCFub01vcmVEYXRhIHx8IG9mZnNldCA9PSAwKSkgewotICAgICAgICAvLyBXZSBlaXRoZXIgc2F3IHRoZSBlbXB0eSBsaW5lIHNlcGFyYXRpbmcgaGVhZGVycyBmcm9tIGJvZHkKLSAgICAgICAgLy8gb3Igd2Ugc2F3IGF0IGxlYXN0IHRoZSBzdGF0dXMgbGluZSBhbmQga25vdyB0aGF0IG5vIG1vcmUgZGF0YQotICAgICAgICAvLyBpcyBnb2luZyB0byBmb2xsb3cuCi0gICAgICAgIHJldHVybiAtMTsKLSAgICB9Ci0KLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1EaWN0LnNpemUoKTsgKytpKSB7Ci0gICAgICAgIG1EaWN0LmVkaXRWYWx1ZUF0KGkpLnRyaW0oKTsKLSAgICB9Ci0KLSAgICBpbnQzMl90IGNvbnRlbnRMZW5ndGg7Ci0gICAgaWYgKCFmaW5kSW50MzIoImNvbnRlbnQtbGVuZ3RoIiwgJmNvbnRlbnRMZW5ndGgpIHx8IGNvbnRlbnRMZW5ndGggPCAwKSB7Ci0gICAgICAgIGNvbnRlbnRMZW5ndGggPSAwOwotICAgIH0KLQotICAgIHNpemVfdCB0b3RhbExlbmd0aCA9IG9mZnNldCArIGNvbnRlbnRMZW5ndGg7Ci0KLSAgICBpZiAoc2l6ZSA8IHRvdGFsTGVuZ3RoKSB7Ci0gICAgICAgIHJldHVybiAtMTsKLSAgICB9Ci0KLSAgICBtQ29udGVudC5zZXRUbygmZGF0YVtvZmZzZXRdLCBjb250ZW50TGVuZ3RoKTsKLQotICAgIHJldHVybiB0b3RhbExlbmd0aDsKLX0KLQotYm9vbCBQYXJzZWRNZXNzYWdlOjpnZXRSZXF1ZXN0RmllbGQoc2l6ZV90IGluZGV4LCBBU3RyaW5nICpmaWVsZCkgY29uc3QgewotICAgIEFTdHJpbmcgbGluZTsKLSAgICBDSEVDSyhmaW5kU3RyaW5nKCJfIiwgJmxpbmUpKTsKLQotICAgIHNpemVfdCBwcmV2T2Zmc2V0ID0gMDsKLSAgICBzaXplX3Qgb2Zmc2V0ID0gMDsKLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8PSBpbmRleDsgKytpKSB7Ci0gICAgICAgIGlmIChvZmZzZXQgPj0gbGluZS5zaXplKCkpIHsKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgfQotCi0gICAgICAgIHNzaXplX3Qgc3BhY2VQb3MgPSBsaW5lLmZpbmQoIiAiLCBvZmZzZXQpOwotCi0gICAgICAgIGlmIChzcGFjZVBvcyA8IDApIHsKLSAgICAgICAgICAgIHNwYWNlUG9zID0gbGluZS5zaXplKCk7Ci0gICAgICAgIH0KLQotICAgICAgICBwcmV2T2Zmc2V0ID0gb2Zmc2V0OwotICAgICAgICBvZmZzZXQgPSBzcGFjZVBvcyArIDE7Ci0gICAgfQotCi0gICAgZmllbGQtPnNldFRvKGxpbmUsIHByZXZPZmZzZXQsIG9mZnNldCAtIHByZXZPZmZzZXQgLSAxKTsKLQotICAgIHJldHVybiB0cnVlOwotfQotCi1ib29sIFBhcnNlZE1lc3NhZ2U6OmdldFN0YXR1c0NvZGUoaW50MzJfdCAqc3RhdHVzQ29kZSkgY29uc3QgewotICAgIEFTdHJpbmcgc3RhdHVzQ29kZVN0cmluZzsKLSAgICBpZiAoIWdldFJlcXVlc3RGaWVsZCgxLCAmc3RhdHVzQ29kZVN0cmluZykpIHsKLSAgICAgICAgKnN0YXR1c0NvZGUgPSAwOwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgY2hhciAqZW5kOwotICAgICpzdGF0dXNDb2RlID0gc3RydG9sKHN0YXR1c0NvZGVTdHJpbmcuY19zdHIoKSwgJmVuZCwgMTApOwotCi0gICAgaWYgKCplbmQgIT0gJ1wwJyB8fCBlbmQgPT0gc3RhdHVzQ29kZVN0cmluZy5jX3N0cigpCi0gICAgICAgICAgICB8fCAoKnN0YXR1c0NvZGUpIDwgMTAwIHx8ICgqc3RhdHVzQ29kZSkgPiA5OTkpIHsKLSAgICAgICAgKnN0YXR1c0NvZGUgPSAwOwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLUFTdHJpbmcgUGFyc2VkTWVzc2FnZTo6ZGVidWdTdHJpbmcoKSBjb25zdCB7Ci0gICAgQVN0cmluZyBsaW5lOwotICAgIENIRUNLKGZpbmRTdHJpbmcoIl8iLCAmbGluZSkpOwotCi0gICAgbGluZS5hcHBlbmQoIlxuIik7Ci0KLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1EaWN0LnNpemUoKTsgKytpKSB7Ci0gICAgICAgIGNvbnN0IEFTdHJpbmcgJmtleSA9IG1EaWN0LmtleUF0KGkpOwotICAgICAgICBjb25zdCBBU3RyaW5nICZ2YWx1ZSA9IG1EaWN0LnZhbHVlQXQoaSk7Ci0KLSAgICAgICAgaWYgKGtleSA9PSBBU3RyaW5nKCJfIikpIHsKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICB9Ci0KLSAgICAgICAgbGluZS5hcHBlbmQoa2V5KTsKLSAgICAgICAgbGluZS5hcHBlbmQoIjogIik7Ci0gICAgICAgIGxpbmUuYXBwZW5kKHZhbHVlKTsKLSAgICAgICAgbGluZS5hcHBlbmQoIlxuIik7Ci0gICAgfQotCi0gICAgbGluZS5hcHBlbmQoIlxuIik7Ci0gICAgbGluZS5hcHBlbmQobUNvbnRlbnQpOwotCi0gICAgcmV0dXJuIGxpbmU7Ci19Ci0KLS8vIHN0YXRpYwotYm9vbCBQYXJzZWRNZXNzYWdlOjpHZXRBdHRyaWJ1dGUoCi0gICAgICAgIGNvbnN0IGNoYXIgKnMsIGNvbnN0IGNoYXIgKmtleSwgQVN0cmluZyAqdmFsdWUpIHsKLSAgICB2YWx1ZS0+Y2xlYXIoKTsKLQotICAgIHNpemVfdCBrZXlMZW4gPSBzdHJsZW4oa2V5KTsKLQotICAgIGZvciAoOzspIHsKLSAgICAgICAgd2hpbGUgKGlzc3BhY2UoKnMpKSB7Ci0gICAgICAgICAgICArK3M7Ci0gICAgICAgIH0KLQotICAgICAgICBjb25zdCBjaGFyICpjb2xvblBvcyA9IHN0cmNocihzLCAnOycpOwotCi0gICAgICAgIHNpemVfdCBsZW4gPQotICAgICAgICAgICAgKGNvbG9uUG9zID09IE5VTEwpID8gc3RybGVuKHMpIDogY29sb25Qb3MgLSBzOwotCi0gICAgICAgIGlmIChsZW4gPj0ga2V5TGVuICsgMSAmJiBzW2tleUxlbl0gPT0gJz0nICYmICFzdHJuY21wKHMsIGtleSwga2V5TGVuKSkgewotICAgICAgICAgICAgdmFsdWUtPnNldFRvKCZzW2tleUxlbiArIDFdLCBsZW4gLSBrZXlMZW4gLSAxKTsKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKGNvbG9uUG9zID09IE5VTEwpIHsKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgfQotCi0gICAgICAgIHMgPSBjb2xvblBvcyArIDE7Ci0gICAgfQotfQotCi0vLyBzdGF0aWMKLWJvb2wgUGFyc2VkTWVzc2FnZTo6R2V0SW50MzJBdHRyaWJ1dGUoCi0gICAgICAgIGNvbnN0IGNoYXIgKnMsIGNvbnN0IGNoYXIgKmtleSwgaW50MzJfdCAqdmFsdWUpIHsKLSAgICBBU3RyaW5nIHN0cmluZ1ZhbHVlOwotICAgIGlmICghR2V0QXR0cmlidXRlKHMsIGtleSwgJnN0cmluZ1ZhbHVlKSkgewotICAgICAgICAqdmFsdWUgPSAwOwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgY2hhciAqZW5kOwotICAgICp2YWx1ZSA9IHN0cnRvbChzdHJpbmdWYWx1ZS5jX3N0cigpLCAmZW5kLCAxMCk7Ci0KLSAgICBpZiAoZW5kID09IHN0cmluZ1ZhbHVlLmNfc3RyKCkgfHwgKmVuZCAhPSAnXDAnKSB7Ci0gICAgICAgICp2YWx1ZSA9IDA7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotfSAgLy8gbmFtZXNwYWNlIGFuZHJvaWQKLQpkaWZmIC0tZ2l0IGEvbWVkaWEvbGlic3RhZ2VmcmlnaHQvZm91bmRhdGlvbi9iYXNlNjQuY3BwIGIvbWVkaWEvbGlic3RhZ2VmcmlnaHQvZm91bmRhdGlvbi9iYXNlNjQuY3BwCmluZGV4IDhmMzI1ODIuLjgzNGI4OGYgMTAwNjQ0Ci0tLSBhL21lZGlhL2xpYnN0YWdlZnJpZ2h0L2ZvdW5kYXRpb24vYmFzZTY0LmNwcAorKysgYi9tZWRpYS9saWJzdGFnZWZyaWdodC9mb3VuZGF0aW9uL2Jhc2U2NC5jcHAKQEAgLTI4LDE0ICsyOCwzMSBAQAogICAgICAgICByZXR1cm4gTlVMTDsKICAgICB9CiAKKyAgICBzaXplX3QgYnVmU2l6ZSA9IG4gLyA0ICogMzsKKyAgICBzcDxBQnVmZmVyPiBidWYgPSBuZXcgQUJ1ZmZlcihidWZTaXplKTsKKworICAgIGlmIChkZWNvZGVCYXNlNjQoYnVmLT5kYXRhKCksICZidWZTaXplLCBzLmNfc3RyKCkpKSB7CisgICAgICAgIGJ1Zi0+c2V0UmFuZ2UoMCwgYnVmU2l6ZSk7CisgICAgICAgIHJldHVybiBidWY7CisgICAgfQorICAgIHJldHVybiBOVUxMOworfQorCitib29sIGRlY29kZUJhc2U2NCh1aW50OF90ICpvdXQsIHNpemVfdCAqaW5PdXRCdWZTaXplLCBjb25zdCBjaGFyKiBzKSB7CisgICAgc2l6ZV90IG4gPSBzdHJsZW4ocyk7CisKKyAgICBpZiAoKG4gJSA0KSAhPSAwKSB7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKICAgICBzaXplX3QgcGFkZGluZyA9IDA7Ci0gICAgaWYgKG4gPj0gMSAmJiBzLmNfc3RyKClbbiAtIDFdID09ICc9JykgeworICAgIGlmIChuID49IDEgJiYgc1tuIC0gMV0gPT0gJz0nKSB7CiAgICAgICAgIHBhZGRpbmcgPSAxOwogCi0gICAgICAgIGlmIChuID49IDIgJiYgcy5jX3N0cigpW24gLSAyXSA9PSAnPScpIHsKKyAgICAgICAgaWYgKG4gPj0gMiAmJiBzW24gLSAyXSA9PSAnPScpIHsKICAgICAgICAgICAgIHBhZGRpbmcgPSAyOwogCi0gICAgICAgICAgICBpZiAobiA+PSAzICYmIHMuY19zdHIoKVtuIC0gM10gPT0gJz0nKSB7CisgICAgICAgICAgICBpZiAobiA+PSAzICYmIHNbbiAtIDNdID09ICc9JykgewogICAgICAgICAgICAgICAgIHBhZGRpbmcgPSAzOwogICAgICAgICAgICAgfQogICAgICAgICB9CkBAIC00NSwxNSArNjIsMTMgQEAKICAgICAvLyBhbHJlYWR5IG1hZGUgc3VyZSB0aGF0IG4gJSA0ID09IDAuCiAgICAgc2l6ZV90IG91dExlbiA9IChuIC8gNCkgKiAzIC0gcGFkZGluZzsKIAotICAgIHNwPEFCdWZmZXI+IGJ1ZmZlciA9IG5ldyBBQnVmZmVyKG91dExlbik7Ci0gICAgdWludDhfdCAqb3V0ID0gYnVmZmVyLT5kYXRhKCk7Ci0gICAgaWYgKG91dCA9PSBOVUxMIHx8IGJ1ZmZlci0+c2l6ZSgpIDwgb3V0TGVuKSB7Ci0gICAgICAgIHJldHVybiBOVUxMOworICAgIGlmIChvdXQgPT0gTlVMTCB8fCAqaW5PdXRCdWZTaXplIDwgb3V0TGVuKSB7CisgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAgICAgc2l6ZV90IGogPSAwOwogICAgIHVpbnQzMl90IGFjY3VtID0gMDsKICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG47ICsraSkgewotICAgICAgICBjaGFyIGMgPSBzLmNfc3RyKClbaV07CisgICAgICAgIGNoYXIgYyA9IHNbaV07CiAgICAgICAgIHVuc2lnbmVkIHZhbHVlOwogICAgICAgICBpZiAoYyA+PSAnQScgJiYgYyA8PSAnWicpIHsKICAgICAgICAgICAgIHZhbHVlID0gYyAtICdBJzsKQEAgLTY2LDEwICs4MSwxMCBAQAogICAgICAgICB9IGVsc2UgaWYgKGMgPT0gJy8nIHx8IGMgPT0gJ18nKSB7CiAgICAgICAgICAgICB2YWx1ZSA9IDYzOwogICAgICAgICB9IGVsc2UgaWYgKGMgIT0gJz0nKSB7Ci0gICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIGlmIChpIDwgbiAtIHBhZGRpbmcpIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgICAgICB9CiAKICAgICAgICAgICAgIHZhbHVlID0gMDsKQEAgLTg2LDcgKzEwMSw4IEBACiAgICAgICAgIH0KICAgICB9CiAKLSAgICByZXR1cm4gYnVmZmVyOworICAgICppbk91dEJ1ZlNpemUgPSBqOworICAgIHJldHVybiB0cnVlOwogfQogCiBzdGF0aWMgY2hhciBlbmNvZGU2Qml0KHVuc2lnbmVkIHgpIHsKZGlmZiAtLWdpdCBhL21lZGlhL2xpYnN0YWdlZnJpZ2h0L2ZvdW5kYXRpb24vaW5jbHVkZS9tZWRpYS9zdGFnZWZyaWdodC9mb3VuZGF0aW9uL0FOZXR3b3JrU2Vzc2lvbi5oIGIvbWVkaWEvbGlic3RhZ2VmcmlnaHQvZm91bmRhdGlvbi9pbmNsdWRlL21lZGlhL3N0YWdlZnJpZ2h0L2ZvdW5kYXRpb24vQU5ldHdvcmtTZXNzaW9uLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGZkM2ViYWEuLjAwMDAwMDAKLS0tIGEvbWVkaWEvbGlic3RhZ2VmcmlnaHQvZm91bmRhdGlvbi9pbmNsdWRlL21lZGlhL3N0YWdlZnJpZ2h0L2ZvdW5kYXRpb24vQU5ldHdvcmtTZXNzaW9uLmgKKysrIC9kZXYvbnVsbApAQCAtMSwxMzUgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAyMDEyLCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0Ci0gKgotICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7Ci0gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCi0gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLSAqCi0gKiAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0gKgotICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQotICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKLSAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgotICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAotICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCi0gKi8KLQotI2lmbmRlZiBBX05FVFdPUktfU0VTU0lPTl9IXwotCi0jZGVmaW5lIEFfTkVUV09SS19TRVNTSU9OX0hfCi0KLSNpbmNsdWRlIDxtZWRpYS9zdGFnZWZyaWdodC9mb3VuZGF0aW9uL0FCYXNlLmg+Ci0jaW5jbHVkZSA8dXRpbHMvS2V5ZWRWZWN0b3IuaD4KLSNpbmNsdWRlIDx1dGlscy9SZWZCYXNlLmg+Ci0jaW5jbHVkZSA8dXRpbHMvVGhyZWFkLmg+Ci0KLSNpbmNsdWRlIDxuZXRpbmV0L2luLmg+Ci0KLW5hbWVzcGFjZSBhbmRyb2lkIHsKLQotc3RydWN0IEFNZXNzYWdlOwotCi0vLyBIZWxwZXIgY2xhc3MgdG8gbWFuYWdlIGEgbnVtYmVyIG9mIGxpdmUgc29ja2V0cyAoZGF0YWdyYW0gYW5kIHN0cmVhbS1iYXNlZCkKLS8vIG9uIGEgc2luZ2xlIHRocmVhZC4gQ2xpZW50cyBhcmUgbm90aWZpZWQgYWJvdXQgYWN0aXZpdHkgdGhyb3VnaCBBTWVzc2FnZXMuCi1zdHJ1Y3QgQU5ldHdvcmtTZXNzaW9uIDogcHVibGljIFJlZkJhc2UgewotICAgIEFOZXR3b3JrU2Vzc2lvbigpOwotCi0gICAgc3RhdHVzX3Qgc3RhcnQoKTsKLSAgICBzdGF0dXNfdCBzdG9wKCk7Ci0KLSAgICBzdGF0dXNfdCBjcmVhdGVSVFNQQ2xpZW50KAotICAgICAgICAgICAgY29uc3QgY2hhciAqaG9zdCwgdW5zaWduZWQgcG9ydCwgY29uc3Qgc3A8QU1lc3NhZ2U+ICZub3RpZnksCi0gICAgICAgICAgICBpbnQzMl90ICpzZXNzaW9uSUQpOwotCi0gICAgc3RhdHVzX3QgY3JlYXRlUlRTUFNlcnZlcigKLSAgICAgICAgICAgIGNvbnN0IHN0cnVjdCBpbl9hZGRyICZhZGRyLCB1bnNpZ25lZCBwb3J0LAotICAgICAgICAgICAgY29uc3Qgc3A8QU1lc3NhZ2U+ICZub3RpZnksIGludDMyX3QgKnNlc3Npb25JRCk7Ci0KLSAgICBzdGF0dXNfdCBjcmVhdGVVRFBTZXNzaW9uKAotICAgICAgICAgICAgdW5zaWduZWQgbG9jYWxQb3J0LCBjb25zdCBzcDxBTWVzc2FnZT4gJm5vdGlmeSwgaW50MzJfdCAqc2Vzc2lvbklEKTsKLQotICAgIHN0YXR1c190IGNyZWF0ZVVEUFNlc3Npb24oCi0gICAgICAgICAgICB1bnNpZ25lZCBsb2NhbFBvcnQsCi0gICAgICAgICAgICBjb25zdCBjaGFyICpyZW1vdGVIb3N0LAotICAgICAgICAgICAgdW5zaWduZWQgcmVtb3RlUG9ydCwKLSAgICAgICAgICAgIGNvbnN0IHNwPEFNZXNzYWdlPiAmbm90aWZ5LAotICAgICAgICAgICAgaW50MzJfdCAqc2Vzc2lvbklEKTsKLQotICAgIHN0YXR1c190IGNvbm5lY3RVRFBTZXNzaW9uKAotICAgICAgICAgICAgaW50MzJfdCBzZXNzaW9uSUQsIGNvbnN0IGNoYXIgKnJlbW90ZUhvc3QsIHVuc2lnbmVkIHJlbW90ZVBvcnQpOwotCi0gICAgLy8gcGFzc2l2ZQotICAgIHN0YXR1c190IGNyZWF0ZVRDUERhdGFncmFtU2Vzc2lvbigKLSAgICAgICAgICAgIGNvbnN0IHN0cnVjdCBpbl9hZGRyICZhZGRyLCB1bnNpZ25lZCBwb3J0LAotICAgICAgICAgICAgY29uc3Qgc3A8QU1lc3NhZ2U+ICZub3RpZnksIGludDMyX3QgKnNlc3Npb25JRCk7Ci0KLSAgICAvLyBhY3RpdmUKLSAgICBzdGF0dXNfdCBjcmVhdGVUQ1BEYXRhZ3JhbVNlc3Npb24oCi0gICAgICAgICAgICB1bnNpZ25lZCBsb2NhbFBvcnQsCi0gICAgICAgICAgICBjb25zdCBjaGFyICpyZW1vdGVIb3N0LAotICAgICAgICAgICAgdW5zaWduZWQgcmVtb3RlUG9ydCwKLSAgICAgICAgICAgIGNvbnN0IHNwPEFNZXNzYWdlPiAmbm90aWZ5LAotICAgICAgICAgICAgaW50MzJfdCAqc2Vzc2lvbklEKTsKLQotICAgIHN0YXR1c190IGRlc3Ryb3lTZXNzaW9uKGludDMyX3Qgc2Vzc2lvbklEKTsKLQotICAgIHN0YXR1c190IHNlbmRSZXF1ZXN0KAotICAgICAgICAgICAgaW50MzJfdCBzZXNzaW9uSUQsIGNvbnN0IHZvaWQgKmRhdGEsIHNzaXplX3Qgc2l6ZSA9IC0xLAotICAgICAgICAgICAgYm9vbCB0aW1lVmFsaWQgPSBmYWxzZSwgaW50NjRfdCB0aW1lVXMgPSAtMWxsKTsKLQotICAgIHN0YXR1c190IHN3aXRjaFRvV2ViU29ja2V0TW9kZShpbnQzMl90IHNlc3Npb25JRCk7Ci0KLSAgICBlbnVtIE5vdGlmaWNhdGlvblJlYXNvbiB7Ci0gICAgICAgIGtXaGF0RXJyb3IsCi0gICAgICAgIGtXaGF0Q29ubmVjdGVkLAotICAgICAgICBrV2hhdENsaWVudENvbm5lY3RlZCwKLSAgICAgICAga1doYXREYXRhLAotICAgICAgICBrV2hhdERhdGFncmFtLAotICAgICAgICBrV2hhdEJpbmFyeURhdGEsCi0gICAgICAgIGtXaGF0V2ViU29ja2V0TWVzc2FnZSwKLSAgICAgICAga1doYXROZXR3b3JrU3RhbGwsCi0gICAgfTsKLQotcHJvdGVjdGVkOgotICAgIHZpcnR1YWwgfkFOZXR3b3JrU2Vzc2lvbigpOwotCi1wcml2YXRlOgotICAgIHN0cnVjdCBOZXR3b3JrVGhyZWFkOwotICAgIHN0cnVjdCBTZXNzaW9uOwotCi0gICAgTXV0ZXggbUxvY2s7Ci0gICAgc3A8VGhyZWFkPiBtVGhyZWFkOwotCi0gICAgaW50MzJfdCBtTmV4dFNlc3Npb25JRDsKLQotICAgIGludCBtUGlwZUZkWzJdOwotCi0gICAgS2V5ZWRWZWN0b3I8aW50MzJfdCwgc3A8U2Vzc2lvbj4gPiBtU2Vzc2lvbnM7Ci0KLSAgICBlbnVtIE1vZGUgewotICAgICAgICBrTW9kZUNyZWF0ZVVEUFNlc3Npb24sCi0gICAgICAgIGtNb2RlQ3JlYXRlVENQRGF0YWdyYW1TZXNzaW9uUGFzc2l2ZSwKLSAgICAgICAga01vZGVDcmVhdGVUQ1BEYXRhZ3JhbVNlc3Npb25BY3RpdmUsCi0gICAgICAgIGtNb2RlQ3JlYXRlUlRTUFNlcnZlciwKLSAgICAgICAga01vZGVDcmVhdGVSVFNQQ2xpZW50LAotICAgIH07Ci0gICAgc3RhdHVzX3QgY3JlYXRlQ2xpZW50T3JTZXJ2ZXIoCi0gICAgICAgICAgICBNb2RlIG1vZGUsCi0gICAgICAgICAgICBjb25zdCBzdHJ1Y3QgaW5fYWRkciAqYWRkciwKLSAgICAgICAgICAgIHVuc2lnbmVkIHBvcnQsCi0gICAgICAgICAgICBjb25zdCBjaGFyICpyZW1vdGVIb3N0LAotICAgICAgICAgICAgdW5zaWduZWQgcmVtb3RlUG9ydCwKLSAgICAgICAgICAgIGNvbnN0IHNwPEFNZXNzYWdlPiAmbm90aWZ5LAotICAgICAgICAgICAgaW50MzJfdCAqc2Vzc2lvbklEKTsKLQotICAgIHZvaWQgdGhyZWFkTG9vcCgpOwotICAgIHZvaWQgaW50ZXJydXB0KCk7Ci0KLSAgICBzdGF0aWMgc3RhdHVzX3QgTWFrZVNvY2tldE5vbkJsb2NraW5nKGludCBzKTsKLQotICAgIERJU0FMTE9XX0VWSUxfQ09OU1RSVUNUT1JTKEFOZXR3b3JrU2Vzc2lvbik7Ci19OwotCi19ICAvLyBuYW1lc3BhY2UgYW5kcm9pZAotCi0jZW5kaWYgIC8vIEFfTkVUV09SS19TRVNTSU9OX0hfCmRpZmYgLS1naXQgYS9tZWRpYS9saWJzdGFnZWZyaWdodC9mb3VuZGF0aW9uL2luY2x1ZGUvbWVkaWEvc3RhZ2VmcmlnaHQvZm91bmRhdGlvbi9BdWRpb1ByZXNlbnRhdGlvbkluZm8uaCBiL21lZGlhL2xpYnN0YWdlZnJpZ2h0L2ZvdW5kYXRpb24vaW5jbHVkZS9tZWRpYS9zdGFnZWZyaWdodC9mb3VuZGF0aW9uL0F1ZGlvUHJlc2VudGF0aW9uSW5mby5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRiZDRkOWYKLS0tIC9kZXYvbnVsbAorKysgYi9tZWRpYS9saWJzdGFnZWZyaWdodC9mb3VuZGF0aW9uL2luY2x1ZGUvbWVkaWEvc3RhZ2VmcmlnaHQvZm91bmRhdGlvbi9BdWRpb1ByZXNlbnRhdGlvbkluZm8uaApAQCAtMCwwICsxLDY4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE4IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KKworI2lmbmRlZiBBVURJT19QUkVTRU5UQVRJT05fSU5GT19IXworI2RlZmluZSBBVURJT19QUkVTRU5UQVRJT05fSU5GT19IXworCisjaW5jbHVkZSA8bWFwPgorI2luY2x1ZGUgPHNzdHJlYW0+CisjaW5jbHVkZSA8c3RkaW50Lmg+CisjaW5jbHVkZSA8dmVjdG9yPgorCisjaW5jbHVkZSA8dXRpbHMvRXJyb3JzLmg+CisKK25hbWVzcGFjZSBhbmRyb2lkIHsKKworZW51bSBBdWRpb1ByZXNlbnRhdGlvblZlcnNpb24geworICAgIFBSRVNFTlRBVElPTl9WRVJTSU9OX1VOREVGSU5FRCA9IDAsCisgICAgUFJFU0VOVEFUSU9OX1ZFUlNJT05fMSwKK307CisKK2VudW0gTWFzdGVyaW5nSW5kaWNhdGlvbiB7CisgICAgTUFTVEVSSU5HX05PVF9JTkRJQ0FURUQsCisgICAgTUFTVEVSRURfRk9SX1NURVJFTywKKyAgICBNQVNURVJFRF9GT1JfU1VSUk9VTkQsCisgICAgTUFTVEVSRURfRk9SXzNELAorICAgIE1BU1RFUkVEX0ZPUl9IRUFEUEhPTkUsCit9OworCitzdHJ1Y3QgQXVkaW9QcmVzZW50YXRpb24geworICAgIHVpbnQzMl90IG1WZXJzaW9uID0gUFJFU0VOVEFUSU9OX1ZFUlNJT05fVU5ERUZJTkVEOworICAgIGludDMyX3QgbVByZXNlbnRhdGlvbklkID0gLTE7CisgICAgaW50MzJfdCBtUHJvZ3JhbUlkID0gLTE7CisgICAgc3RkOjptYXA8c3RkOjpzdHJpbmcsIHN0ZDo6c3RyaW5nPiBtTGFiZWxzOworICAgIHN0ZDo6c3RyaW5nIG1MYW5ndWFnZTsKKyAgICBNYXN0ZXJpbmdJbmRpY2F0aW9uIG1NYXN0ZXJpbmdJbmRpY2F0aW9uID0gTUFTVEVSSU5HX05PVF9JTkRJQ0FURUQ7CisgICAgYm9vbCBtQXVkaW9EZXNjcmlwdGlvbkF2YWlsYWJsZSA9IGZhbHNlOworICAgIGJvb2wgbVNwb2tlblN1YnRpdGxlc0F2YWlsYWJsZSA9IGZhbHNlOworICAgIGJvb2wgbURpYWxvZ3VlRW5oYW5jZW1lbnRBdmFpbGFibGUgPSBmYWxzZTsKK307CisKK3N0cnVjdCBBdWRpb1ByZXNlbnRhdGlvblYxIDogcHVibGljIEF1ZGlvUHJlc2VudGF0aW9uIHsKKyAgICBBdWRpb1ByZXNlbnRhdGlvblYxKCkgeworICAgICAgICBtVmVyc2lvbiA9IFBSRVNFTlRBVElPTl9WRVJTSU9OXzE7CisgICAgfQorfTsKKwordHlwZWRlZiBzdGQ6OnZlY3RvcjxBdWRpb1ByZXNlbnRhdGlvbj4gQXVkaW9QcmVzZW50YXRpb25Db2xsZWN0aW9uOworCit2b2lkIHNlcmlhbGl6ZUF1ZGlvUHJlc2VudGF0aW9ucyhjb25zdCBBdWRpb1ByZXNlbnRhdGlvbkNvbGxlY3Rpb24mIHByZXNlbnRhdGlvbnMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZDo6b3N0cmVhbSogc2VyaWFsaXplZE91dHB1dCk7CitzdGF0dXNfdCBkZXNlcmlhbGl6ZUF1ZGlvUHJlc2VudGF0aW9ucyhzdGQ6OmlzdHJlYW0qIHNlcmlhbGl6ZWRJbnB1dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEF1ZGlvUHJlc2VudGF0aW9uQ29sbGVjdGlvbiAqcHJlc2VudGF0aW9ucyk7Cit9ICAvLyBuYW1lc3BhY2UgYW5kcm9pZAorCisjZW5kaWYgIC8vIEFVRElPX1BSRVNFTlRBVElPTl9JTkZPX0hfCmRpZmYgLS1naXQgYS9tZWRpYS9saWJzdGFnZWZyaWdodC9mb3VuZGF0aW9uL2luY2x1ZGUvbWVkaWEvc3RhZ2VmcmlnaHQvZm91bmRhdGlvbi9Db2xvclV0aWxzLmggYi9tZWRpYS9saWJzdGFnZWZyaWdodC9mb3VuZGF0aW9uL2luY2x1ZGUvbWVkaWEvc3RhZ2VmcmlnaHQvZm91bmRhdGlvbi9Db2xvclV0aWxzLmgKaW5kZXggZDZjNzY4ZC4uY2QwYWYyYiAxMDA2NDQKLS0tIGEvbWVkaWEvbGlic3RhZ2VmcmlnaHQvZm91bmRhdGlvbi9pbmNsdWRlL21lZGlhL3N0YWdlZnJpZ2h0L2ZvdW5kYXRpb24vQ29sb3JVdGlscy5oCisrKyBiL21lZGlhL2xpYnN0YWdlZnJpZ2h0L2ZvdW5kYXRpb24vaW5jbHVkZS9tZWRpYS9zdGFnZWZyaWdodC9mb3VuZGF0aW9uL0NvbG9yVXRpbHMuaApAQCAtMjcsNiArMjcsOCBAQAogI2luY2x1ZGUgPG1lZGlhL2hhcmR3YXJlL1ZpZGVvQVBJLmg+CiAjaW5jbHVkZSA8c3lzdGVtL2dyYXBoaWNzLmg+CiAKK3N0cnVjdCBBTWVkaWFGb3JtYXQ7CisKIG5hbWVzcGFjZSBhbmRyb2lkIHsKIAogc3RydWN0IENvbG9yVXRpbHMgewpAQCAtMTM1LDYgKzEzNyw5IEBACiAgICAgc3RhdGljIHZvaWQgY29udmVydElzb0NvbG9yQXNwZWN0c1RvQ29kZWNBc3BlY3RzKAogICAgICAgICAgICAgaW50MzJfdCBwcmltYXJpZXMsIGludDMyX3QgdHJhbnNmZXIsIGludDMyX3QgY29lZmZzLCBib29sIGZ1bGxSYW5nZSwKICAgICAgICAgICAgIENvbG9yQXNwZWN0cyAmYXNwZWN0cyk7CisgICAgc3RhdGljIHZvaWQgY29udmVydElzb0NvbG9yQXNwZWN0c1RvUGxhdGZvcm1Bc3BlY3RzKAorICAgICAgICBpbnQzMl90IHByaW1hcmllcywgaW50MzJfdCBpc290cmFuc2ZlciwgaW50MzJfdCBjb2VmZnMsIGJvb2wgZnVsbFJhbmdlLAorICAgICAgICBpbnQzMl90ICpyYW5nZSwgaW50MzJfdCAqc3RhbmRhcmQsIGludDMyX3QgKnRyYW5zZmVyKTsKIAogICAgIC8vIHVucGFjayBhIHVpbnQzMl90IHRvIGEgZnVsbCBDb2xvckFzcGVjdHMgc3RydWN0CiAgICAgc3RhdGljIENvbG9yQXNwZWN0cyB1bnBhY2tUb0NvbG9yQXNwZWN0cyh1aW50MzJfdCBwYWNrZWQpOwpAQCAtMTgwLDYgKzE4NSw4IEBACiAKICAgICAvLyB3cml0ZXMgfGluZm98IGludG8gZm9ybWF0LgogICAgIHN0YXRpYyB2b2lkIHNldEhEUlN0YXRpY0luZm9JbnRvRm9ybWF0KGNvbnN0IEhEUlN0YXRpY0luZm8gJmluZm8sIHNwPEFNZXNzYWdlPiAmZm9ybWF0KTsKKyAgICAvLyB3cml0ZXMgfGluZm98IGludG8gZm9ybWF0LgorICAgIHN0YXRpYyB2b2lkIHNldEhEUlN0YXRpY0luZm9JbnRvQU1lZGlhRm9ybWF0KGNvbnN0IEhEUlN0YXRpY0luZm8gJmluZm8sIEFNZWRpYUZvcm1hdCAqZm9ybWF0KTsKIH07CiAKIGlubGluZSBzdGF0aWMgY29uc3QgY2hhciAqYXNTdHJpbmcoYW5kcm9pZDo6Q29sb3JVdGlsczo6Q29sb3JTdGFuZGFyZCBpLCBjb25zdCBjaGFyICpkZWYgPSAiPz8iKSB7CmRpZmYgLS1naXQgYS9tZWRpYS9saWJzdGFnZWZyaWdodC9mb3VuZGF0aW9uL2luY2x1ZGUvbWVkaWEvc3RhZ2VmcmlnaHQvZm91bmRhdGlvbi9NZWRpYURlZnMuaCBiL21lZGlhL2xpYnN0YWdlZnJpZ2h0L2ZvdW5kYXRpb24vaW5jbHVkZS9tZWRpYS9zdGFnZWZyaWdodC9mb3VuZGF0aW9uL01lZGlhRGVmcy5oCmluZGV4IDU4NzU4YmMuLjUyMzM3OGUgMTAwNjQ0Ci0tLSBhL21lZGlhL2xpYnN0YWdlZnJpZ2h0L2ZvdW5kYXRpb24vaW5jbHVkZS9tZWRpYS9zdGFnZWZyaWdodC9mb3VuZGF0aW9uL01lZGlhRGVmcy5oCisrKyBiL21lZGlhL2xpYnN0YWdlZnJpZ2h0L2ZvdW5kYXRpb24vaW5jbHVkZS9tZWRpYS9zdGFnZWZyaWdodC9mb3VuZGF0aW9uL01lZGlhRGVmcy5oCkBAIC01Miw2ICs1Miw3IEBACiBleHRlcm4gY29uc3QgY2hhciAqTUVESUFfTUlNRVRZUEVfQVVESU9fTVNHU007CiBleHRlcm4gY29uc3QgY2hhciAqTUVESUFfTUlNRVRZUEVfQVVESU9fQUMzOwogZXh0ZXJuIGNvbnN0IGNoYXIgKk1FRElBX01JTUVUWVBFX0FVRElPX0VBQzM7CitleHRlcm4gY29uc3QgY2hhciAqTUVESUFfTUlNRVRZUEVfQVVESU9fQUM0OwogZXh0ZXJuIGNvbnN0IGNoYXIgKk1FRElBX01JTUVUWVBFX0FVRElPX1NDUkFNQkxFRDsKIGV4dGVybiBjb25zdCBjaGFyICpNRURJQV9NSU1FVFlQRV9BVURJT19BTEFDOwogCmRpZmYgLS1naXQgYS9tZWRpYS9saWJzdGFnZWZyaWdodC9mb3VuZGF0aW9uL2luY2x1ZGUvbWVkaWEvc3RhZ2VmcmlnaHQvZm91bmRhdGlvbi9QYXJzZWRNZXNzYWdlLmggYi9tZWRpYS9saWJzdGFnZWZyaWdodC9mb3VuZGF0aW9uL2luY2x1ZGUvbWVkaWEvc3RhZ2VmcmlnaHQvZm91bmRhdGlvbi9QYXJzZWRNZXNzYWdlLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDlkNDNhOTMuLjAwMDAwMDAKLS0tIGEvbWVkaWEvbGlic3RhZ2VmcmlnaHQvZm91bmRhdGlvbi9pbmNsdWRlL21lZGlhL3N0YWdlZnJpZ2h0L2ZvdW5kYXRpb24vUGFyc2VkTWVzc2FnZS5oCisrKyAvZGV2L251bGwKQEAgLTEsNjAgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAyMDEyLCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0Ci0gKgotICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7Ci0gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCi0gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLSAqCi0gKiAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0gKgotICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQotICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKLSAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgotICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAotICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCi0gKi8KLQotI2luY2x1ZGUgPG1lZGlhL3N0YWdlZnJpZ2h0L2ZvdW5kYXRpb24vQUJhc2UuaD4KLSNpbmNsdWRlIDxtZWRpYS9zdGFnZWZyaWdodC9mb3VuZGF0aW9uL0FTdHJpbmcuaD4KLSNpbmNsdWRlIDx1dGlscy9LZXllZFZlY3Rvci5oPgotI2luY2x1ZGUgPHV0aWxzL1JlZkJhc2UuaD4KLQotbmFtZXNwYWNlIGFuZHJvaWQgewotCi0vLyBFbmNhcHN1bGF0ZXMgYW4gIkhUVFAvUlRTUCBzdHlsZSIgcmVzcG9uc2UsIGkuZS4gYSBzdGF0dXMgbGluZSwKLS8vIGtleS92YWx1ZSBwYWlycyBtYWtpbmcgdXAgdGhlIGhlYWRlcnMgYW5kIGFuIG9wdGlvbmFsIGJvZHkvY29udGVudC4KLXN0cnVjdCBQYXJzZWRNZXNzYWdlIDogcHVibGljIFJlZkJhc2UgewotICAgIHN0YXRpYyBzcDxQYXJzZWRNZXNzYWdlPiBQYXJzZSgKLSAgICAgICAgICAgIGNvbnN0IGNoYXIgKmRhdGEsIHNpemVfdCBzaXplLCBib29sIG5vTW9yZURhdGEsIHNpemVfdCAqbGVuZ3RoKTsKLQotICAgIGJvb2wgZmluZFN0cmluZyhjb25zdCBjaGFyICpuYW1lLCBBU3RyaW5nICp2YWx1ZSkgY29uc3Q7Ci0gICAgYm9vbCBmaW5kSW50MzIoY29uc3QgY2hhciAqbmFtZSwgaW50MzJfdCAqdmFsdWUpIGNvbnN0OwotCi0gICAgY29uc3QgY2hhciAqZ2V0Q29udGVudCgpIGNvbnN0OwotCi0gICAgYm9vbCBnZXRSZXF1ZXN0RmllbGQoc2l6ZV90IGluZGV4LCBBU3RyaW5nICpmaWVsZCkgY29uc3Q7Ci0gICAgYm9vbCBnZXRTdGF0dXNDb2RlKGludDMyX3QgKnN0YXR1c0NvZGUpIGNvbnN0OwotCi0gICAgQVN0cmluZyBkZWJ1Z1N0cmluZygpIGNvbnN0OwotCi0gICAgc3RhdGljIGJvb2wgR2V0QXR0cmlidXRlKGNvbnN0IGNoYXIgKnMsIGNvbnN0IGNoYXIgKmtleSwgQVN0cmluZyAqdmFsdWUpOwotCi0gICAgc3RhdGljIGJvb2wgR2V0SW50MzJBdHRyaWJ1dGUoCi0gICAgICAgICAgICBjb25zdCBjaGFyICpzLCBjb25zdCBjaGFyICprZXksIGludDMyX3QgKnZhbHVlKTsKLQotCi1wcm90ZWN0ZWQ6Ci0gICAgdmlydHVhbCB+UGFyc2VkTWVzc2FnZSgpOwotCi1wcml2YXRlOgotICAgIEtleWVkVmVjdG9yPEFTdHJpbmcsIEFTdHJpbmc+IG1EaWN0OwotICAgIEFTdHJpbmcgbUNvbnRlbnQ7Ci0KLSAgICBQYXJzZWRNZXNzYWdlKCk7Ci0KLSAgICBzc2l6ZV90IHBhcnNlKGNvbnN0IGNoYXIgKmRhdGEsIHNpemVfdCBzaXplLCBib29sIG5vTW9yZURhdGEpOwotCi0gICAgRElTQUxMT1dfRVZJTF9DT05TVFJVQ1RPUlMoUGFyc2VkTWVzc2FnZSk7Ci19OwotCi19ICAvLyBuYW1lc3BhY2UgYW5kcm9pZApkaWZmIC0tZ2l0IGEvbWVkaWEvbGlic3RhZ2VmcmlnaHQvZm91bmRhdGlvbi9pbmNsdWRlL21lZGlhL3N0YWdlZnJpZ2h0L2ZvdW5kYXRpb24vYmFzZTY0LmggYi9tZWRpYS9saWJzdGFnZWZyaWdodC9mb3VuZGF0aW9uL2luY2x1ZGUvbWVkaWEvc3RhZ2VmcmlnaHQvZm91bmRhdGlvbi9iYXNlNjQuaAppbmRleCBhYmM5NWUwLi42MGZiOWZmIDEwMDY0NAotLS0gYS9tZWRpYS9saWJzdGFnZWZyaWdodC9mb3VuZGF0aW9uL2luY2x1ZGUvbWVkaWEvc3RhZ2VmcmlnaHQvZm91bmRhdGlvbi9iYXNlNjQuaAorKysgYi9tZWRpYS9saWJzdGFnZWZyaWdodC9mb3VuZGF0aW9uL2luY2x1ZGUvbWVkaWEvc3RhZ2VmcmlnaHQvZm91bmRhdGlvbi9iYXNlNjQuaApAQCAtMjYsNiArMjYsOSBAQAogc3RydWN0IEFTdHJpbmc7CiAKIHNwPEFCdWZmZXI+IGRlY29kZUJhc2U2NChjb25zdCBBU3RyaW5nICZzKTsKKworYm9vbCBkZWNvZGVCYXNlNjQodWludDhfdCAqb3V0LCBzaXplX3QgKmluT3V0QnVmU2l6ZSwgY29uc3QgY2hhciogcyk7CisKIHZvaWQgZW5jb2RlQmFzZTY0KGNvbnN0IHZvaWQgKmRhdGEsIHNpemVfdCBzaXplLCBBU3RyaW5nICpvdXQpOwogCiB2b2lkIGVuY29kZUJhc2U2NFVybChjb25zdCB2b2lkICpkYXRhLCBzaXplX3Qgc2l6ZSwgQVN0cmluZyAqb3V0KTsKZGlmZiAtLWdpdCBhL21lZGlhL2xpYnN0YWdlZnJpZ2h0L2h0dHAvQ2xlYXJNZWRpYUhUVFAuY3BwIGIvbWVkaWEvbGlic3RhZ2VmcmlnaHQvaHR0cC9DbGVhck1lZGlhSFRUUC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTU1N2M4YQotLS0gL2Rldi9udWxsCisrKyBiL21lZGlhL2xpYnN0YWdlZnJpZ2h0L2h0dHAvQ2xlYXJNZWRpYUhUVFAuY3BwCkBAIC0wLDAgKzEsMTg0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE4IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KKworLy8jZGVmaW5lIExPR19OREVCVUcgMAorI2RlZmluZSBMT0dfVEFHICJDbGVhck1lZGlhSFRUUCIKKyNpbmNsdWRlIDx1dGlscy9Mb2cuaD4KKworI2luY2x1ZGUgPG1lZGlhL3N0YWdlZnJpZ2h0L0NsZWFyTWVkaWFIVFRQLmg+CisKKyNpbmNsdWRlIDxtZWRpYS9zdGFnZWZyaWdodC9mb3VuZGF0aW9uL0FEZWJ1Zy5oPgorI2luY2x1ZGUgPG1lZGlhL3N0YWdlZnJpZ2h0L2ZvdW5kYXRpb24vQUxvb3Blci5oPgorI2luY2x1ZGUgPG1lZGlhL3N0YWdlZnJpZ2h0L1V0aWxzLmg+CisKKyNpbmNsdWRlIDxtZWRpYS9NZWRpYUhUVFBDb25uZWN0aW9uLmg+CisKK25hbWVzcGFjZSBhbmRyb2lkIHsKKworQ2xlYXJNZWRpYUhUVFA6OkNsZWFyTWVkaWFIVFRQKGNvbnN0IHNwPE1lZGlhSFRUUENvbm5lY3Rpb24+ICZjb25uKQorICAgIDogbUluaXRDaGVjaygoY29ubiAhPSBOVUxMKSA/IE9LIDogTk9fSU5JVCksCisgICAgICBtSFRUUENvbm5lY3Rpb24oY29ubiksCisgICAgICBtQ2FjaGVkU2l6ZVZhbGlkKGZhbHNlKSwKKyAgICAgIG1DYWNoZWRTaXplKDBsbCkgeworfQorCitDbGVhck1lZGlhSFRUUDo6fkNsZWFyTWVkaWFIVFRQKCkgeworfQorCitzdGF0dXNfdCBDbGVhck1lZGlhSFRUUDo6Y29ubmVjdCgKKyAgICAgICAgY29uc3QgY2hhciAqdXJpLAorICAgICAgICBjb25zdCBLZXllZFZlY3RvcjxTdHJpbmc4LCBTdHJpbmc4PiAqaGVhZGVycywKKyAgICAgICAgb2ZmNjRfdCAvKiBvZmZzZXQgKi8pIHsKKyAgICBpZiAobUluaXRDaGVjayAhPSBPSykgeworICAgICAgICByZXR1cm4gbUluaXRDaGVjazsKKyAgICB9CisKKyAgICBLZXllZFZlY3RvcjxTdHJpbmc4LCBTdHJpbmc4PiBleHRIZWFkZXJzOworICAgIGlmIChoZWFkZXJzICE9IE5VTEwpIHsKKyAgICAgICAgZXh0SGVhZGVycyA9ICpoZWFkZXJzOworICAgIH0KKworICAgIGlmIChleHRIZWFkZXJzLmluZGV4T2ZLZXkoU3RyaW5nOCgiVXNlci1BZ2VudCIpKSA8IDApIHsKKyAgICAgICAgZXh0SGVhZGVycy5hZGQoU3RyaW5nOCgiVXNlci1BZ2VudCIpLCBTdHJpbmc4KE1ha2VVc2VyQWdlbnQoKS5jX3N0cigpKSk7CisgICAgfQorCisgICAgbUxhc3RVUkkgPSB1cmk7CisgICAgLy8gcmVjb25uZWN0KCkgY2FsbHMgd2l0aCB1cmkgPT0gb2xkIG1MYXN0VVJJLmNfc3RyKCksIHdoaWNoIGdldHMgemFwcGVkCisgICAgLy8gYXMgcGFydCBvZiB0aGUgYWJvdmUgYXNzaWdubWVudC4gRW5zdXJlIG5vIGFjY2lkZW50YWwgbGF0ZXIgdXNlLgorICAgIHVyaSA9IE5VTEw7CisKKyAgICBib29sIHN1Y2Nlc3MgPSBtSFRUUENvbm5lY3Rpb24tPmNvbm5lY3QobUxhc3RVUkkuY19zdHIoKSwgJmV4dEhlYWRlcnMpOworCisgICAgbUxhc3RIZWFkZXJzID0gZXh0SGVhZGVyczsKKworICAgIG1DYWNoZWRTaXplVmFsaWQgPSBmYWxzZTsKKworICAgIGlmIChzdWNjZXNzKSB7CisgICAgICAgIEFTdHJpbmcgc2FuaXRpemVkID0gdXJpRGVidWdTdHJpbmcobUxhc3RVUkkpOworICAgICAgICBtTmFtZSA9IFN0cmluZzg6OmZvcm1hdCgiQ2xlYXJNZWRpYUhUVFAoJXMpIiwgc2FuaXRpemVkLmNfc3RyKCkpOworICAgIH0KKworICAgIHJldHVybiBzdWNjZXNzID8gT0sgOiBVTktOT1dOX0VSUk9SOworfQorCit2b2lkIENsZWFyTWVkaWFIVFRQOjpjbG9zZSgpIHsKKyAgICBkaXNjb25uZWN0KCk7Cit9CisKK3ZvaWQgQ2xlYXJNZWRpYUhUVFA6OmRpc2Nvbm5lY3QoKSB7CisgICAgbU5hbWUgPSBTdHJpbmc4KCJDbGVhck1lZGlhSFRUUCg8ZGlzY29ubmVjdGVkPikiKTsKKyAgICBpZiAobUluaXRDaGVjayAhPSBPSykgeworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgbUhUVFBDb25uZWN0aW9uLT5kaXNjb25uZWN0KCk7Cit9CisKK3N0YXR1c190IENsZWFyTWVkaWFIVFRQOjppbml0Q2hlY2soKSBjb25zdCB7CisgICAgcmV0dXJuIG1Jbml0Q2hlY2s7Cit9CisKK3NzaXplX3QgQ2xlYXJNZWRpYUhUVFA6OnJlYWRBdChvZmY2NF90IG9mZnNldCwgdm9pZCAqZGF0YSwgc2l6ZV90IHNpemUpIHsKKyAgICBpZiAobUluaXRDaGVjayAhPSBPSykgeworICAgICAgICByZXR1cm4gbUluaXRDaGVjazsKKyAgICB9CisKKyAgICBpbnQ2NF90IHN0YXJ0VGltZVVzID0gQUxvb3Blcjo6R2V0Tm93VXMoKTsKKworICAgIHNpemVfdCBudW1CeXRlc1JlYWQgPSAwOworICAgIHdoaWxlIChudW1CeXRlc1JlYWQgPCBzaXplKSB7CisgICAgICAgIHNpemVfdCBjb3B5ID0gc2l6ZSAtIG51bUJ5dGVzUmVhZDsKKworICAgICAgICBpZiAoY29weSA+IDY0ICogMTAyNCkgeworICAgICAgICAgICAgLy8gbGltaXQgdGhlIGJ1ZmZlciBzaXplcyB0cmFuc2ZlcnJlZCBhY3Jvc3MgYmluZGVyIGJvdW5kYXJpZXMKKyAgICAgICAgICAgIC8vIHRvIGF2b2lkIHNwdXJpb3VzIHRyYW5zYWN0aW9uIGZhaWx1cmVzLgorICAgICAgICAgICAgY29weSA9IDY0ICogMTAyNDsKKyAgICAgICAgfQorCisgICAgICAgIHNzaXplX3QgbiA9IG1IVFRQQ29ubmVjdGlvbi0+cmVhZEF0KAorICAgICAgICAgICAgICAgIG9mZnNldCArIG51bUJ5dGVzUmVhZCwgKHVpbnQ4X3QgKilkYXRhICsgbnVtQnl0ZXNSZWFkLCBjb3B5KTsKKworICAgICAgICBpZiAobiA8IDApIHsKKyAgICAgICAgICAgIHJldHVybiBuOworICAgICAgICB9IGVsc2UgaWYgKG4gPT0gMCkgeworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgICBudW1CeXRlc1JlYWQgKz0gbjsKKyAgICB9CisKKyAgICBpbnQ2NF90IGRlbGF5VXMgPSBBTG9vcGVyOjpHZXROb3dVcygpIC0gc3RhcnRUaW1lVXM7CisKKyAgICBhZGRCYW5kd2lkdGhNZWFzdXJlbWVudChudW1CeXRlc1JlYWQsIGRlbGF5VXMpOworCisgICAgcmV0dXJuIG51bUJ5dGVzUmVhZDsKK30KKworc3RhdHVzX3QgQ2xlYXJNZWRpYUhUVFA6OmdldFNpemUob2ZmNjRfdCAqc2l6ZSkgeworICAgIGlmIChtSW5pdENoZWNrICE9IE9LKSB7CisgICAgICAgIHJldHVybiBtSW5pdENoZWNrOworICAgIH0KKworICAgIC8vIENhY2hpbmcgdGhlIHJldHVybmVkIHNpemUgc28gdGhhdCBpdCBzdGF5cyB2YWxpZCBldmVuIGFmdGVyIGEKKyAgICAvLyBkaXNjb25uZWN0LiBOdUNhY2hlZFNvdXJjZTIgcmVsaWVzIG9uIHRoaXMuCisKKyAgICBpZiAoIW1DYWNoZWRTaXplVmFsaWQpIHsKKyAgICAgICAgbUNhY2hlZFNpemUgPSBtSFRUUENvbm5lY3Rpb24tPmdldFNpemUoKTsKKyAgICAgICAgbUNhY2hlZFNpemVWYWxpZCA9IHRydWU7CisgICAgfQorCisgICAgKnNpemUgPSBtQ2FjaGVkU2l6ZTsKKworICAgIHJldHVybiAqc2l6ZSA8IDAgPyAqc2l6ZSA6IHN0YXRpY19jYXN0PHN0YXR1c190PihPSyk7Cit9CisKK3VpbnQzMl90IENsZWFyTWVkaWFIVFRQOjpmbGFncygpIHsKKyAgICByZXR1cm4ga1dhbnRzUHJlZmV0Y2hpbmcgfCBrSXNIVFRQQmFzZWRTb3VyY2U7Cit9CisKK3N0YXR1c190IENsZWFyTWVkaWFIVFRQOjpyZWNvbm5lY3RBdE9mZnNldChvZmY2NF90IG9mZnNldCkgeworICAgIHJldHVybiBjb25uZWN0KG1MYXN0VVJJLmNfc3RyKCksICZtTGFzdEhlYWRlcnMsIG9mZnNldCk7Cit9CisKKworU3RyaW5nOCBDbGVhck1lZGlhSFRUUDo6Z2V0VXJpKCkgeworICAgIGlmIChtSW5pdENoZWNrICE9IE9LKSB7CisgICAgICAgIHJldHVybiBTdHJpbmc4OjplbXB0eSgpOworICAgIH0KKworICAgIFN0cmluZzggdXJpOworICAgIGlmIChPSyA9PSBtSFRUUENvbm5lY3Rpb24tPmdldFVyaSgmdXJpKSkgeworICAgICAgICByZXR1cm4gdXJpOworICAgIH0KKyAgICByZXR1cm4gU3RyaW5nOChtTGFzdFVSSS5jX3N0cigpKTsKK30KKworU3RyaW5nOCBDbGVhck1lZGlhSFRUUDo6Z2V0TUlNRVR5cGUoKSBjb25zdCB7CisgICAgaWYgKG1Jbml0Q2hlY2sgIT0gT0spIHsKKyAgICAgICAgcmV0dXJuIFN0cmluZzgoImFwcGxpY2F0aW9uL29jdGV0LXN0cmVhbSIpOworICAgIH0KKworICAgIFN0cmluZzggbWltZVR5cGU7CisgICAgc3RhdHVzX3QgZXJyID0gbUhUVFBDb25uZWN0aW9uLT5nZXRNSU1FVHlwZSgmbWltZVR5cGUpOworCisgICAgaWYgKGVyciAhPSBPSykgeworICAgICAgICByZXR1cm4gU3RyaW5nOCgiYXBwbGljYXRpb24vb2N0ZXQtc3RyZWFtIik7CisgICAgfQorCisgICAgcmV0dXJuIG1pbWVUeXBlOworfQorCit9ICAvLyBuYW1lc3BhY2UgYW5kcm9pZApkaWZmIC0tZ2l0IGEvbWVkaWEvbGlic3RhZ2VmcmlnaHQvaHR0cC9NZWRpYUhUVFAuY3BwIGIvbWVkaWEvbGlic3RhZ2VmcmlnaHQvaHR0cC9NZWRpYUhUVFAuY3BwCmluZGV4IDdjOTI0N2UuLjBmYmEzZGMgMTAwNjQ0Ci0tLSBhL21lZGlhL2xpYnN0YWdlZnJpZ2h0L2h0dHAvTWVkaWFIVFRQLmNwcAorKysgYi9tZWRpYS9saWJzdGFnZWZyaWdodC9odHRwL01lZGlhSFRUUC5jcHAKQEAgLTMwLDEwICszMCw3IEBACiBuYW1lc3BhY2UgYW5kcm9pZCB7CiAKIE1lZGlhSFRUUDo6TWVkaWFIVFRQKGNvbnN0IHNwPE1lZGlhSFRUUENvbm5lY3Rpb24+ICZjb25uKQotICAgIDogbUluaXRDaGVjaygoY29ubiAhPSBOVUxMKSA/IE9LIDogTk9fSU5JVCksCi0gICAgICBtSFRUUENvbm5lY3Rpb24oY29ubiksCi0gICAgICBtQ2FjaGVkU2l6ZVZhbGlkKGZhbHNlKSwKLSAgICAgIG1DYWNoZWRTaXplKDBsbCksCisgICAgOiBDbGVhck1lZGlhSFRUUChjb25uKSwKICAgICAgIG1Ecm1NYW5hZ2VyQ2xpZW50KE5VTEwpIHsKIH0KIApAQCAtNDEsMTE3ICszOCw2IEBACiAgICAgY2xlYXJEUk1TdGF0ZV9sKCk7CiB9CiAKLXN0YXR1c190IE1lZGlhSFRUUDo6Y29ubmVjdCgKLSAgICAgICAgY29uc3QgY2hhciAqdXJpLAotICAgICAgICBjb25zdCBLZXllZFZlY3RvcjxTdHJpbmc4LCBTdHJpbmc4PiAqaGVhZGVycywKLSAgICAgICAgb2ZmNjRfdCAvKiBvZmZzZXQgKi8pIHsKLSAgICBpZiAobUluaXRDaGVjayAhPSBPSykgewotICAgICAgICByZXR1cm4gbUluaXRDaGVjazsKLSAgICB9Ci0KLSAgICBLZXllZFZlY3RvcjxTdHJpbmc4LCBTdHJpbmc4PiBleHRIZWFkZXJzOwotICAgIGlmIChoZWFkZXJzICE9IE5VTEwpIHsKLSAgICAgICAgZXh0SGVhZGVycyA9ICpoZWFkZXJzOwotICAgIH0KLQotICAgIGlmIChleHRIZWFkZXJzLmluZGV4T2ZLZXkoU3RyaW5nOCgiVXNlci1BZ2VudCIpKSA8IDApIHsKLSAgICAgICAgZXh0SGVhZGVycy5hZGQoU3RyaW5nOCgiVXNlci1BZ2VudCIpLCBTdHJpbmc4KE1ha2VVc2VyQWdlbnQoKS5jX3N0cigpKSk7Ci0gICAgfQotCi0gICAgbUxhc3RVUkkgPSB1cmk7Ci0gICAgLy8gcmVjb25uZWN0KCkgY2FsbHMgd2l0aCB1cmkgPT0gb2xkIG1MYXN0VVJJLmNfc3RyKCksIHdoaWNoIGdldHMgemFwcGVkCi0gICAgLy8gYXMgcGFydCBvZiB0aGUgYWJvdmUgYXNzaWdubWVudC4gRW5zdXJlIG5vIGFjY2lkZW50YWwgbGF0ZXIgdXNlLgotICAgIHVyaSA9IE5VTEw7Ci0KLSAgICBib29sIHN1Y2Nlc3MgPSBtSFRUUENvbm5lY3Rpb24tPmNvbm5lY3QobUxhc3RVUkkuY19zdHIoKSwgJmV4dEhlYWRlcnMpOwotCi0gICAgbUxhc3RIZWFkZXJzID0gZXh0SGVhZGVyczsKLQotICAgIG1DYWNoZWRTaXplVmFsaWQgPSBmYWxzZTsKLQotICAgIGlmIChzdWNjZXNzKSB7Ci0gICAgICAgIEFTdHJpbmcgc2FuaXRpemVkID0gdXJpRGVidWdTdHJpbmcobUxhc3RVUkkpOwotICAgICAgICBtTmFtZSA9IFN0cmluZzg6OmZvcm1hdCgiTWVkaWFIVFRQKCVzKSIsIHNhbml0aXplZC5jX3N0cigpKTsKLSAgICB9Ci0KLSAgICByZXR1cm4gc3VjY2VzcyA/IE9LIDogVU5LTk9XTl9FUlJPUjsKLX0KLQotdm9pZCBNZWRpYUhUVFA6OmRpc2Nvbm5lY3QoKSB7Ci0gICAgbU5hbWUgPSBTdHJpbmc4KCJNZWRpYUhUVFAoPGRpc2Nvbm5lY3RlZD4pIik7Ci0gICAgaWYgKG1Jbml0Q2hlY2sgIT0gT0spIHsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIG1IVFRQQ29ubmVjdGlvbi0+ZGlzY29ubmVjdCgpOwotfQotCi1zdGF0dXNfdCBNZWRpYUhUVFA6OmluaXRDaGVjaygpIGNvbnN0IHsKLSAgICByZXR1cm4gbUluaXRDaGVjazsKLX0KLQotc3NpemVfdCBNZWRpYUhUVFA6OnJlYWRBdChvZmY2NF90IG9mZnNldCwgdm9pZCAqZGF0YSwgc2l6ZV90IHNpemUpIHsKLSAgICBpZiAobUluaXRDaGVjayAhPSBPSykgewotICAgICAgICByZXR1cm4gbUluaXRDaGVjazsKLSAgICB9Ci0KLSAgICBpbnQ2NF90IHN0YXJ0VGltZVVzID0gQUxvb3Blcjo6R2V0Tm93VXMoKTsKLQotICAgIHNpemVfdCBudW1CeXRlc1JlYWQgPSAwOwotICAgIHdoaWxlIChudW1CeXRlc1JlYWQgPCBzaXplKSB7Ci0gICAgICAgIHNpemVfdCBjb3B5ID0gc2l6ZSAtIG51bUJ5dGVzUmVhZDsKLQotICAgICAgICBpZiAoY29weSA+IDY0ICogMTAyNCkgewotICAgICAgICAgICAgLy8gbGltaXQgdGhlIGJ1ZmZlciBzaXplcyB0cmFuc2ZlcnJlZCBhY3Jvc3MgYmluZGVyIGJvdW5kYXJpZXMKLSAgICAgICAgICAgIC8vIHRvIGF2b2lkIHNwdXJpb3VzIHRyYW5zYWN0aW9uIGZhaWx1cmVzLgotICAgICAgICAgICAgY29weSA9IDY0ICogMTAyNDsKLSAgICAgICAgfQotCi0gICAgICAgIHNzaXplX3QgbiA9IG1IVFRQQ29ubmVjdGlvbi0+cmVhZEF0KAotICAgICAgICAgICAgICAgIG9mZnNldCArIG51bUJ5dGVzUmVhZCwgKHVpbnQ4X3QgKilkYXRhICsgbnVtQnl0ZXNSZWFkLCBjb3B5KTsKLQotICAgICAgICBpZiAobiA8IDApIHsKLSAgICAgICAgICAgIHJldHVybiBuOwotICAgICAgICB9IGVsc2UgaWYgKG4gPT0gMCkgewotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLQotICAgICAgICBudW1CeXRlc1JlYWQgKz0gbjsKLSAgICB9Ci0KLSAgICBpbnQ2NF90IGRlbGF5VXMgPSBBTG9vcGVyOjpHZXROb3dVcygpIC0gc3RhcnRUaW1lVXM7Ci0KLSAgICBhZGRCYW5kd2lkdGhNZWFzdXJlbWVudChudW1CeXRlc1JlYWQsIGRlbGF5VXMpOwotCi0gICAgcmV0dXJuIG51bUJ5dGVzUmVhZDsKLX0KLQotc3RhdHVzX3QgTWVkaWFIVFRQOjpnZXRTaXplKG9mZjY0X3QgKnNpemUpIHsKLSAgICBpZiAobUluaXRDaGVjayAhPSBPSykgewotICAgICAgICByZXR1cm4gbUluaXRDaGVjazsKLSAgICB9Ci0KLSAgICAvLyBDYWNoaW5nIHRoZSByZXR1cm5lZCBzaXplIHNvIHRoYXQgaXQgc3RheXMgdmFsaWQgZXZlbiBhZnRlciBhCi0gICAgLy8gZGlzY29ubmVjdC4gTnVDYWNoZWRTb3VyY2UyIHJlbGllcyBvbiB0aGlzLgotCi0gICAgaWYgKCFtQ2FjaGVkU2l6ZVZhbGlkKSB7Ci0gICAgICAgIG1DYWNoZWRTaXplID0gbUhUVFBDb25uZWN0aW9uLT5nZXRTaXplKCk7Ci0gICAgICAgIG1DYWNoZWRTaXplVmFsaWQgPSB0cnVlOwotICAgIH0KLQotICAgICpzaXplID0gbUNhY2hlZFNpemU7Ci0KLSAgICByZXR1cm4gKnNpemUgPCAwID8gKnNpemUgOiBzdGF0aWNfY2FzdDxzdGF0dXNfdD4oT0spOwotfQotCi11aW50MzJfdCBNZWRpYUhUVFA6OmZsYWdzKCkgewotICAgIHJldHVybiBrV2FudHNQcmVmZXRjaGluZyB8IGtJc0hUVFBCYXNlZFNvdXJjZTsKLX0KLQotc3RhdHVzX3QgTWVkaWFIVFRQOjpyZWNvbm5lY3RBdE9mZnNldChvZmY2NF90IG9mZnNldCkgewotICAgIHJldHVybiBjb25uZWN0KG1MYXN0VVJJLmNfc3RyKCksICZtTGFzdEhlYWRlcnMsIG9mZnNldCk7Ci19Ci0KIC8vIERSTS4uLgogCiBzcDxEZWNyeXB0SGFuZGxlPiBNZWRpYUhUVFA6OkRybUluaXRpYWxpemF0aW9uKGNvbnN0IGNoYXIqIG1pbWUpIHsKQEAgLTE3NiwzMyArNjIsNiBAQAogICAgIHJldHVybiBtRGVjcnlwdEhhbmRsZTsKIH0KIAotU3RyaW5nOCBNZWRpYUhUVFA6OmdldFVyaSgpIHsKLSAgICBpZiAobUluaXRDaGVjayAhPSBPSykgewotICAgICAgICByZXR1cm4gU3RyaW5nODo6ZW1wdHkoKTsKLSAgICB9Ci0KLSAgICBTdHJpbmc4IHVyaTsKLSAgICBpZiAoT0sgPT0gbUhUVFBDb25uZWN0aW9uLT5nZXRVcmkoJnVyaSkpIHsKLSAgICAgICAgcmV0dXJuIHVyaTsKLSAgICB9Ci0gICAgcmV0dXJuIFN0cmluZzgobUxhc3RVUkkuY19zdHIoKSk7Ci19Ci0KLVN0cmluZzggTWVkaWFIVFRQOjpnZXRNSU1FVHlwZSgpIGNvbnN0IHsKLSAgICBpZiAobUluaXRDaGVjayAhPSBPSykgewotICAgICAgICByZXR1cm4gU3RyaW5nOCgiYXBwbGljYXRpb24vb2N0ZXQtc3RyZWFtIik7Ci0gICAgfQotCi0gICAgU3RyaW5nOCBtaW1lVHlwZTsKLSAgICBzdGF0dXNfdCBlcnIgPSBtSFRUUENvbm5lY3Rpb24tPmdldE1JTUVUeXBlKCZtaW1lVHlwZSk7Ci0KLSAgICBpZiAoZXJyICE9IE9LKSB7Ci0gICAgICAgIHJldHVybiBTdHJpbmc4KCJhcHBsaWNhdGlvbi9vY3RldC1zdHJlYW0iKTsKLSAgICB9Ci0KLSAgICByZXR1cm4gbWltZVR5cGU7Ci19Ci0KIHZvaWQgTWVkaWFIVFRQOjpjbGVhckRSTVN0YXRlX2woKSB7CiAgICAgaWYgKG1EZWNyeXB0SGFuZGxlICE9IE5VTEwpIHsKICAgICAgICAgLy8gVG8gcmVsZWFzZSBtRGVjcnlwdEhhbmRsZQpkaWZmIC0tZ2l0IGEvbWVkaWEvbGlic3RhZ2VmcmlnaHQvaHR0cGxpdmUvQW5kcm9pZC5icCBiL21lZGlhL2xpYnN0YWdlZnJpZ2h0L2h0dHBsaXZlL0FuZHJvaWQuYnAKaW5kZXggMmY5MzNhMC4uMjkwNzc1MSAxMDA2NDQKLS0tIGEvbWVkaWEvbGlic3RhZ2VmcmlnaHQvaHR0cGxpdmUvQW5kcm9pZC5icAorKysgYi9tZWRpYS9saWJzdGFnZWZyaWdodC9odHRwbGl2ZS9BbmRyb2lkLmJwCkBAIC0zNyw2ICszNyw3IEBACiAgICAgICAgICJsaWJjdXRpbHMiLAogICAgICAgICAibGlibWVkaWEiLAogICAgICAgICAibGlibWVkaWFleHRyYWN0b3IiLAorICAgICAgICAibGlibWVkaWFuZGsiLAogICAgICAgICAibGlic3RhZ2VmcmlnaHQiLAogICAgICAgICAibGlic3RhZ2VmcmlnaHRfZm91bmRhdGlvbiIsCiAgICAgICAgICJsaWJ1dGlscyIsCmRpZmYgLS1naXQgYS9tZWRpYS9saWJzdGFnZWZyaWdodC9odHRwbGl2ZS9IVFRQRG93bmxvYWRlci5jcHAgYi9tZWRpYS9saWJzdGFnZWZyaWdodC9odHRwbGl2ZS9IVFRQRG93bmxvYWRlci5jcHAKaW5kZXggNzI2MDRlMy4uNTkyNjVmZSAxMDA2NDQKLS0tIGEvbWVkaWEvbGlic3RhZ2VmcmlnaHQvaHR0cGxpdmUvSFRUUERvd25sb2FkZXIuY3BwCisrKyBiL21lZGlhL2xpYnN0YWdlZnJpZ2h0L2h0dHBsaXZlL0hUVFBEb3dubG9hZGVyLmNwcApAQCAtMjYsOCArMjYsOCBAQAogI2luY2x1ZGUgPG1lZGlhL01lZGlhSFRUUFNlcnZpY2UuaD4KICNpbmNsdWRlIDxtZWRpYS9zdGFnZWZyaWdodC9mb3VuZGF0aW9uL0FCdWZmZXIuaD4KICNpbmNsdWRlIDxtZWRpYS9zdGFnZWZyaWdodC9mb3VuZGF0aW9uL0FEZWJ1Zy5oPgotI2luY2x1ZGUgPG1lZGlhL3N0YWdlZnJpZ2h0L01lZGlhSFRUUC5oPgotI2luY2x1ZGUgPG1lZGlhL3N0YWdlZnJpZ2h0L0ZpbGVTb3VyY2UuaD4KKyNpbmNsdWRlIDxtZWRpYS9zdGFnZWZyaWdodC9DbGVhck1lZGlhSFRUUC5oPgorI2luY2x1ZGUgPG1lZGlhL3N0YWdlZnJpZ2h0L0NsZWFyRmlsZVNvdXJjZS5oPgogI2luY2x1ZGUgPG9wZW5zc2wvYWVzLmg+CiAjaW5jbHVkZSA8b3BlbnNzbC9tZDUuaD4KICNpbmNsdWRlIDx1dGlscy9NdXRleC5oPgpAQCAtMzgsNyArMzgsNyBAQAogSFRUUERvd25sb2FkZXI6OkhUVFBEb3dubG9hZGVyKAogICAgICAgICBjb25zdCBzcDxNZWRpYUhUVFBTZXJ2aWNlPiAmaHR0cFNlcnZpY2UsCiAgICAgICAgIGNvbnN0IEtleWVkVmVjdG9yPFN0cmluZzgsIFN0cmluZzg+ICZoZWFkZXJzKSA6Ci0gICAgbUhUVFBEYXRhU291cmNlKG5ldyBNZWRpYUhUVFAoaHR0cFNlcnZpY2UtPm1ha2VIVFRQQ29ubmVjdGlvbigpKSksCisgICAgbUhUVFBEYXRhU291cmNlKG5ldyBDbGVhck1lZGlhSFRUUChodHRwU2VydmljZS0+bWFrZUhUVFBDb25uZWN0aW9uKCkpKSwKICAgICBtRXh0cmFIZWFkZXJzKGhlYWRlcnMpLAogICAgIG1EaXNjb25uZWN0aW5nKGZhbHNlKSB7CiB9CkBAIC05MSw3ICs5MSw3IEBACiAKICAgICBpZiAocmVjb25uZWN0KSB7CiAgICAgICAgIGlmICghc3RybmNhc2VjbXAodXJsLCAiZmlsZTovLyIsIDcpKSB7Ci0gICAgICAgICAgICBtRGF0YVNvdXJjZSA9IG5ldyBGaWxlU291cmNlKHVybCArIDcpOworICAgICAgICAgICAgbURhdGFTb3VyY2UgPSBuZXcgQ2xlYXJGaWxlU291cmNlKHVybCArIDcpOwogICAgICAgICB9IGVsc2UgaWYgKHN0cm5jYXNlY21wKHVybCwgImh0dHA6Ly8iLCA3KQogICAgICAgICAgICAgICAgICYmIHN0cm5jYXNlY21wKHVybCwgImh0dHBzOi8vIiwgOCkpIHsKICAgICAgICAgICAgIHJldHVybiBFUlJPUl9VTlNVUFBPUlRFRDsKZGlmZiAtLWdpdCBhL21lZGlhL2xpYnN0YWdlZnJpZ2h0L2h0dHBsaXZlL00zVVBhcnNlci5jcHAgYi9tZWRpYS9saWJzdGFnZWZyaWdodC9odHRwbGl2ZS9NM1VQYXJzZXIuY3BwCmluZGV4IDhhYjMzZjcuLmQwNmQ5ZjIgMTAwNjQ0Ci0tLSBhL21lZGlhL2xpYnN0YWdlZnJpZ2h0L2h0dHBsaXZlL00zVVBhcnNlci5jcHAKKysrIGIvbWVkaWEvbGlic3RhZ2VmcmlnaHQvaHR0cGxpdmUvTTNVUGFyc2VyLmNwcApAQCAtMTM5MSw2ICsxMzkxLDcgQEAKICAgICAgICAgY2FzZSAnUURNQyc6CiAgICAgICAgIGNhc2UgJ3VsYXcnOgogICAgICAgICBjYXNlICd2ZHZhJzoKKyAgICAgICAgY2FzZSAnYWMtNCc6CiAgICAgICAgICAgICByZXR1cm4gIXN0cmNtcCgiYXVkaW8iLCB0eXBlKTsKIAogICAgICAgICBjYXNlICdhdmMxJzoKZGlmZiAtLWdpdCBhL21lZGlhL2xpYnN0YWdlZnJpZ2h0L2lkMy9BbmRyb2lkLmJwIGIvbWVkaWEvbGlic3RhZ2VmcmlnaHQvaWQzL0FuZHJvaWQuYnAKaW5kZXggMzdmOWQ1MC4uYjQyYzA1MyAxMDA2NDQKLS0tIGEvbWVkaWEvbGlic3RhZ2VmcmlnaHQvaWQzL0FuZHJvaWQuYnAKKysrIGIvbWVkaWEvbGlic3RhZ2VmcmlnaHQvaWQzL0FuZHJvaWQuYnAKQEAgLTMsNiArMywxMCBAQAogCiAgICAgc3JjczogWyJJRDMuY3BwIl0sCiAKKyAgICBoZWFkZXJfbGliczogWworICAgICAgICAibWVkaWFfbmRrX2hlYWRlcnMiLAorICAgIF0sCisKICAgICBjZmxhZ3M6IFsKICAgICAgICAgIi1XZXJyb3IiLAogICAgICAgICAiLVdhbGwiLApkaWZmIC0tZ2l0IGEvbWVkaWEvbGlic3RhZ2VmcmlnaHQvaWQzL0lEMy5jcHAgYi9tZWRpYS9saWJzdGFnZWZyaWdodC9pZDMvSUQzLmNwcAppbmRleCBhMGE2MmY0Li5iNDg5MTgzIDEwMDY0NAotLS0gYS9tZWRpYS9saWJzdGFnZWZyaWdodC9pZDMvSUQzLmNwcAorKysgYi9tZWRpYS9saWJzdGFnZWZyaWdodC9pZDMvSUQzLmNwcApAQCAtMjEsNiArMjEsOCBAQAogI2luY2x1ZGUgIi4uL2luY2x1ZGUvSUQzLmgiCiAKICNpbmNsdWRlIDxtZWRpYS9EYXRhU291cmNlLmg+CisjaW5jbHVkZSA8bWVkaWEvTWVkaWFFeHRyYWN0b3JQbHVnaW5BcGkuaD4KKyNpbmNsdWRlIDxtZWRpYS9NZWRpYUV4dHJhY3RvclBsdWdpbkhlbHBlci5oPgogI2luY2x1ZGUgPG1lZGlhL3N0YWdlZnJpZ2h0L2ZvdW5kYXRpb24vQURlYnVnLmg+CiAjaW5jbHVkZSA8bWVkaWEvc3RhZ2VmcmlnaHQvZm91bmRhdGlvbi9CeXRlVXRpbHMuaD4KICNpbmNsdWRlIDx1dGlscy9TdHJpbmc4Lmg+CkBAIC01Niw2ICs1OCw1NSBAQAogICAgIERJU0FMTE9XX0VWSUxfQ09OU1RSVUNUT1JTKE1lbW9yeVNvdXJjZSk7CiB9OwogCitjbGFzcyBEYXRhU291cmNlVW53cmFwcGVyIDogcHVibGljIERhdGFTb3VyY2VCYXNlIHsKKworcHVibGljOgorICAgIGV4cGxpY2l0IERhdGFTb3VyY2VVbndyYXBwZXIoRGF0YVNvdXJjZUhlbHBlciAqc291cmNlaGVscGVyKSB7CisgICAgICAgIG1Tb3VyY2UgPSBzb3VyY2VoZWxwZXI7CisgICAgfQorICAgIHZpcnR1YWwgc3RhdHVzX3QgaW5pdENoZWNrKCkgY29uc3QgeyByZXR1cm4gT0s7IH0KKworICAgIC8vIFJldHVybnMgdGhlIG51bWJlciBvZiBieXRlcyByZWFkLCBvciAtMSBvbiBmYWlsdXJlLiBJdCdzIG5vdCBhbiBlcnJvciBpZgorICAgIC8vIHRoaXMgcmV0dXJucyB6ZXJvOyBpdCBqdXN0IG1lYW5zIHRoZSBnaXZlbiBvZmZzZXQgaXMgZXF1YWwgdG8sIG9yCisgICAgLy8gYmV5b25kLCB0aGUgZW5kIG9mIHRoZSBzb3VyY2UuCisgICAgdmlydHVhbCBzc2l6ZV90IHJlYWRBdChvZmY2NF90IG9mZnNldCwgdm9pZCAqZGF0YSwgc2l6ZV90IHNpemUpIHsKKyAgICAgICAgcmV0dXJuIG1Tb3VyY2UtPnJlYWRBdChvZmZzZXQsIGRhdGEsIHNpemUpOworICAgIH0KKworICAgIC8vIE1heSByZXR1cm4gRVJST1JfVU5TVVBQT1JURUQuCisgICAgdmlydHVhbCBzdGF0dXNfdCBnZXRTaXplKG9mZjY0X3QgKnNpemUpIHsKKyAgICAgICAgcmV0dXJuIG1Tb3VyY2UtPmdldFNpemUoc2l6ZSk7CisgICAgfQorCisgICAgdmlydHVhbCBib29sIGdldFVyaShjaGFyICogLyp1cmlTdHJpbmcqLywgc2l6ZV90IC8qYnVmZmVyU2l6ZSovKSB7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICB2aXJ0dWFsIHVpbnQzMl90IGZsYWdzKCkgeworICAgICAgICByZXR1cm4gMDsKKyAgICB9CisKKyAgICB2aXJ0dWFsIHZvaWQgY2xvc2UoKSB7fTsKK3ByaXZhdGU6CisgICAgRGF0YVNvdXJjZUhlbHBlciAqbVNvdXJjZTsKK307CisKKworSUQzOjpJRDMoRGF0YVNvdXJjZUhlbHBlciAqc291cmNlaGVscGVyLCBib29sIGlnbm9yZVYxLCBvZmY2NF90IG9mZnNldCkKKyAgICA6IG1Jc1ZhbGlkKGZhbHNlKSwKKyAgICAgIG1EYXRhKE5VTEwpLAorICAgICAgbVNpemUoMCksCisgICAgICBtRmlyc3RGcmFtZU9mZnNldCgwKSwKKyAgICAgIG1WZXJzaW9uKElEM19VTktOT1dOKSwKKyAgICAgIG1SYXdTaXplKDApIHsKKyAgICBEYXRhU291cmNlVW53cmFwcGVyIHNvdXJjZShzb3VyY2VoZWxwZXIpOworICAgIG1Jc1ZhbGlkID0gcGFyc2VWMigmc291cmNlLCBvZmZzZXQpOworCisgICAgaWYgKCFtSXNWYWxpZCAmJiAhaWdub3JlVjEpIHsKKyAgICAgICAgbUlzVmFsaWQgPSBwYXJzZVYxKCZzb3VyY2UpOworICAgIH0KK30KKwogSUQzOjpJRDMoRGF0YVNvdXJjZUJhc2UgKnNvdXJjZSwgYm9vbCBpZ25vcmVWMSwgb2ZmNjRfdCBvZmZzZXQpCiAgICAgOiBtSXNWYWxpZChmYWxzZSksCiAgICAgICBtRGF0YShOVUxMKSwKZGlmZiAtLWdpdCBhL21lZGlhL2xpYnN0YWdlZnJpZ2h0L2luY2x1ZGUvSFRUUEJhc2UuaCBiL21lZGlhL2xpYnN0YWdlZnJpZ2h0L2luY2x1ZGUvSFRUUEJhc2UuaAppbmRleCBhOTI0MTk3Li44YjIwMTg3IDEwMDY0NAotLS0gYS9tZWRpYS9saWJzdGFnZWZyaWdodC9pbmNsdWRlL0hUVFBCYXNlLmgKKysrIGIvbWVkaWEvbGlic3RhZ2VmcmlnaHQvaW5jbHVkZS9IVFRQQmFzZS5oCkBAIC01MSwxMiArNTEsNiBAQAogCiAgICAgdmlydHVhbCB2b2lkIHNldEJhbmR3aWR0aEhpc3RvcnlTaXplKHNpemVfdCBudW1IaXN0b3J5SXRlbXMpOwogCi0gICAgc3RhdGljIHZvaWQgUmVnaXN0ZXJTb2NrZXRVc2VyVGFnKGludCBzb2NrZmQsIHVpZF90IHVpZCwgdWludDMyX3Qga1RhZyk7Ci0gICAgc3RhdGljIHZvaWQgVW5SZWdpc3RlclNvY2tldFVzZXJUYWcoaW50IHNvY2tmZCk7Ci0KLSAgICBzdGF0aWMgdm9pZCBSZWdpc3RlclNvY2tldFVzZXJNYXJrKGludCBzb2NrZmQsIHVpZF90IHVpZCk7Ci0gICAgc3RhdGljIHZvaWQgVW5SZWdpc3RlclNvY2tldFVzZXJNYXJrKGludCBzb2NrZmQpOwotCiAgICAgdmlydHVhbCBTdHJpbmc4IHRvU3RyaW5nKCkgewogICAgICAgICByZXR1cm4gbU5hbWU7CiAgICAgfQpkaWZmIC0tZ2l0IGEvbWVkaWEvbGlic3RhZ2VmcmlnaHQvaW5jbHVkZS9JRDMuaCBiL21lZGlhL2xpYnN0YWdlZnJpZ2h0L2luY2x1ZGUvSUQzLmgKaW5kZXggN2MyMzkxZS4uNWU0MzNlYSAxMDA2NDQKLS0tIGEvbWVkaWEvbGlic3RhZ2VmcmlnaHQvaW5jbHVkZS9JRDMuaAorKysgYi9tZWRpYS9saWJzdGFnZWZyaWdodC9pbmNsdWRlL0lEMy5oCkBAIC0yNCw2ICsyNCw3IEBACiAKIGNsYXNzIERhdGFTb3VyY2VCYXNlOwogY2xhc3MgU3RyaW5nODsKK2NsYXNzIERhdGFTb3VyY2VIZWxwZXI7CiAKIHN0cnVjdCBJRDMgewogICAgIGVudW0gVmVyc2lvbiB7CkBAIC0zNSw2ICszNiw3IEBACiAgICAgICAgIElEM19WMl80LAogICAgIH07CiAKKyAgICBleHBsaWNpdCBJRDMoRGF0YVNvdXJjZUhlbHBlciAqc291cmNlLCBib29sIGlnbm9yZVYxID0gZmFsc2UsIG9mZjY0X3Qgb2Zmc2V0ID0gMCk7CiAgICAgZXhwbGljaXQgSUQzKERhdGFTb3VyY2VCYXNlICpzb3VyY2UsIGJvb2wgaWdub3JlVjEgPSBmYWxzZSwgb2ZmNjRfdCBvZmZzZXQgPSAwKTsKICAgICBJRDMoY29uc3QgdWludDhfdCAqZGF0YSwgc2l6ZV90IHNpemUsIGJvb2wgaWdub3JlVjEgPSBmYWxzZSk7CiAgICAgfklEMygpOwpkaWZmIC0tZ2l0IGEvbWVkaWEvbGlic3RhZ2VmcmlnaHQvaW5jbHVkZS9OdUNhY2hlZFNvdXJjZTIuaCBiL21lZGlhL2xpYnN0YWdlZnJpZ2h0L2luY2x1ZGUvTnVDYWNoZWRTb3VyY2UyLmgKaW5kZXggZjQzOWExYy4uNTk2ZWZiOCAxMDA2NDQKLS0tIGEvbWVkaWEvbGlic3RhZ2VmcmlnaHQvaW5jbHVkZS9OdUNhY2hlZFNvdXJjZTIuaAorKysgYi9tZWRpYS9saWJzdGFnZWZyaWdodC9pbmNsdWRlL051Q2FjaGVkU291cmNlMi5oCkBAIC0zNyw2ICszNyw4IEBACiAKICAgICB2aXJ0dWFsIHNzaXplX3QgcmVhZEF0KG9mZjY0X3Qgb2Zmc2V0LCB2b2lkICpkYXRhLCBzaXplX3Qgc2l6ZSk7CiAKKyAgICB2aXJ0dWFsIHZvaWQgY2xvc2UoKTsKKwogICAgIHZpcnR1YWwgdm9pZCBkaXNjb25uZWN0KCk7CiAKICAgICB2aXJ0dWFsIHN0YXR1c190IGdldFNpemUob2ZmNjRfdCAqc2l6ZSk7CkBAIC01MSw2ICs1Myw4IEBACiAgICAgICAgIHJldHVybiBtTmFtZTsKICAgICB9CiAKKyAgICBzdGF0dXNfdCBnZXRBdmFpbGFibGVTaXplKG9mZjY0X3Qgb2Zmc2V0LCBvZmY2NF90ICpzaXplKTsKKwogICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KIAogICAgIHNpemVfdCBjYWNoZWRTaXplKCk7CkBAIC0xMzUsNyArMTM5LDcgQEAKICAgICBzc2l6ZV90IHJlYWRJbnRlcm5hbChvZmY2NF90IG9mZnNldCwgdm9pZCAqZGF0YSwgc2l6ZV90IHNpemUpOwogICAgIHN0YXR1c190IHNlZWtJbnRlcm5hbF9sKG9mZjY0X3Qgb2Zmc2V0KTsKIAotICAgIHNpemVfdCBhcHByb3hEYXRhUmVtYWluaW5nX2woc3RhdHVzX3QgKmZpbmFsU3RhdHVzKSBjb25zdDsKKyAgICBzaXplX3QgYXBwcm94RGF0YVJlbWFpbmluZ19sKG9mZjY0X3Qgb2Zmc2V0LCBzdGF0dXNfdCAqZmluYWxTdGF0dXMpIGNvbnN0OwogCiAgICAgdm9pZCByZXN0YXJ0UHJlZmV0Y2hlcklmTmVjZXNzYXJ5X2woCiAgICAgICAgICAgICBib29sIGlnbm9yZUxvd1dhdGVyVGhyZXNob2xkID0gZmFsc2UsIGJvb2wgZm9yY2UgPSBmYWxzZSk7CmRpZmYgLS1naXQgYS9tZWRpYS9saWJzdGFnZWZyaWdodC9pbmNsdWRlL1NvZnR3YXJlUmVuZGVyZXIuaCBiL21lZGlhL2xpYnN0YWdlZnJpZ2h0L2luY2x1ZGUvU29mdHdhcmVSZW5kZXJlci5oCmluZGV4IGMyODY1MTYuLjY0ZGNhNGUgMTAwNjQ0Ci0tLSBhL21lZGlhL2xpYnN0YWdlZnJpZ2h0L2luY2x1ZGUvU29mdHdhcmVSZW5kZXJlci5oCisrKyBiL21lZGlhL2xpYnN0YWdlZnJpZ2h0L2luY2x1ZGUvU29mdHdhcmVSZW5kZXJlci5oCkBAIC01MSw3ICs1MSw3IEBACiAgICAgQ29sb3JDb252ZXJ0ZXIgKm1Db252ZXJ0ZXI7CiAgICAgWVVWTW9kZSBtWVVWTW9kZTsKICAgICBzcDxBTmF0aXZlV2luZG93PiBtTmF0aXZlV2luZG93OwotICAgIGludDMyX3QgbVdpZHRoLCBtSGVpZ2h0OworICAgIGludDMyX3QgbVdpZHRoLCBtSGVpZ2h0LCBtU3RyaWRlOwogICAgIGludDMyX3QgbUNyb3BMZWZ0LCBtQ3JvcFRvcCwgbUNyb3BSaWdodCwgbUNyb3BCb3R0b207CiAgICAgaW50MzJfdCBtQ3JvcFdpZHRoLCBtQ3JvcEhlaWdodDsKICAgICBpbnQzMl90IG1Sb3RhdGlvbkRlZ3JlZXM7CmRpZmYgLS1naXQgYS9tZWRpYS9saWJzdGFnZWZyaWdodC9pbmNsdWRlL1N0YWdlZnJpZ2h0TWV0YWRhdGFSZXRyaWV2ZXIuaCBiL21lZGlhL2xpYnN0YWdlZnJpZ2h0L2luY2x1ZGUvU3RhZ2VmcmlnaHRNZXRhZGF0YVJldHJpZXZlci5oCmluZGV4IDFhNDRlMWYuLmM1MDY3N2EgMTAwNjQ0Ci0tLSBhL21lZGlhL2xpYnN0YWdlZnJpZ2h0L2luY2x1ZGUvU3RhZ2VmcmlnaHRNZXRhZGF0YVJldHJpZXZlci5oCisrKyBiL21lZGlhL2xpYnN0YWdlZnJpZ2h0L2luY2x1ZGUvU3RhZ2VmcmlnaHRNZXRhZGF0YVJldHJpZXZlci5oCkBAIC0yNiw3ICsyNiw2IEBACiBuYW1lc3BhY2UgYW5kcm9pZCB7CiAKIGNsYXNzIERhdGFTb3VyY2U7Ci1jbGFzcyBNZWRpYUV4dHJhY3RvcjsKIHN0cnVjdCBJbWFnZURlY29kZXI7CiBzdHJ1Y3QgRnJhbWVSZWN0OwogCmRpZmYgLS1naXQgYS9tZWRpYS9saWJzdGFnZWZyaWdodC9pbmNsdWRlL21lZGlhL3N0YWdlZnJpZ2h0L0FDb2RlYy5oIGIvbWVkaWEvbGlic3RhZ2VmcmlnaHQvaW5jbHVkZS9tZWRpYS9zdGFnZWZyaWdodC9BQ29kZWMuaAppbmRleCA5N2QxNWE3Li43M2Y5M2QxIDEwMDY0NAotLS0gYS9tZWRpYS9saWJzdGFnZWZyaWdodC9pbmNsdWRlL21lZGlhL3N0YWdlZnJpZ2h0L0FDb2RlYy5oCisrKyBiL21lZGlhL2xpYnN0YWdlZnJpZ2h0L2luY2x1ZGUvbWVkaWEvc3RhZ2VmcmlnaHQvQUNvZGVjLmgKQEAgLTIyLDcgKzIyLDcgQEAKICNpbmNsdWRlIDxtZWRpYS9oYXJkd2FyZS9NZXRhZGF0YUJ1ZmZlclR5cGUuaD4KICNpbmNsdWRlIDxtZWRpYS9NZWRpYUNvZGVjSW5mby5oPgogI2luY2x1ZGUgPG1lZGlhL0lPTVguaD4KLSNpbmNsdWRlIDxtZWRpYS9zdGFnZWZyaWdodC9mb3VuZGF0aW9uL0FIaWVyYXJjaGljYWxTdGF0ZU1hY2hpbmUuaD4KKyNpbmNsdWRlIDxtZWRpYS9zdGFnZWZyaWdodC9BSGllcmFyY2hpY2FsU3RhdGVNYWNoaW5lLmg+CiAjaW5jbHVkZSA8bWVkaWEvc3RhZ2VmcmlnaHQvQ29kZWNCYXNlLmg+CiAjaW5jbHVkZSA8bWVkaWEvc3RhZ2VmcmlnaHQvRnJhbWVSZW5kZXJUcmFja2VyLmg+CiAjaW5jbHVkZSA8bWVkaWEvc3RhZ2VmcmlnaHQvTWVkaWFEZWZzLmg+CkBAIC0xMzcsNiArMTM3LDcgQEAKICAgICAgICAga1doYXRPTVhEaWVkICAgICAgICAgICAgICAgICA9ICdPTVhkJywKICAgICAgICAga1doYXRSZWxlYXNlQ29kZWNJbnN0YW5jZSAgICA9ICdyZWxDJywKICAgICAgICAga1doYXRGb3JjZVN0YXRlVHJhbnNpdGlvbiAgICA9ICdmc3R0JywKKyAgICAgICAga1doYXRDaGVja0lmU3R1Y2sgICAgICAgICAgICA9ICdDc3RrJywKICAgICB9OwogCiAgICAgZW51bSB7CmRpZmYgLS1naXQgYS9tZWRpYS9saWJzdGFnZWZyaWdodC9mb3VuZGF0aW9uL2luY2x1ZGUvbWVkaWEvc3RhZ2VmcmlnaHQvZm91bmRhdGlvbi9BSGllcmFyY2hpY2FsU3RhdGVNYWNoaW5lLmggYi9tZWRpYS9saWJzdGFnZWZyaWdodC9pbmNsdWRlL21lZGlhL3N0YWdlZnJpZ2h0L0FIaWVyYXJjaGljYWxTdGF0ZU1hY2hpbmUuaApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gbWVkaWEvbGlic3RhZ2VmcmlnaHQvZm91bmRhdGlvbi9pbmNsdWRlL21lZGlhL3N0YWdlZnJpZ2h0L2ZvdW5kYXRpb24vQUhpZXJhcmNoaWNhbFN0YXRlTWFjaGluZS5oCnJlbmFtZSB0byBtZWRpYS9saWJzdGFnZWZyaWdodC9pbmNsdWRlL21lZGlhL3N0YWdlZnJpZ2h0L0FIaWVyYXJjaGljYWxTdGF0ZU1hY2hpbmUuaApkaWZmIC0tZ2l0IGEvbWVkaWEvbGlic3RhZ2VmcmlnaHQvaW5jbHVkZS9tZWRpYS9zdGFnZWZyaWdodC9DbGVhckZpbGVTb3VyY2UuaCBiL21lZGlhL2xpYnN0YWdlZnJpZ2h0L2luY2x1ZGUvbWVkaWEvc3RhZ2VmcmlnaHQvQ2xlYXJGaWxlU291cmNlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmU4Mzc0OAotLS0gL2Rldi9udWxsCisrKyBiL21lZGlhL2xpYnN0YWdlZnJpZ2h0L2luY2x1ZGUvbWVkaWEvc3RhZ2VmcmlnaHQvQ2xlYXJGaWxlU291cmNlLmgKQEAgLTAsMCArMSw2OCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxOCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCisKKyNpZm5kZWYgQ0xFQVJfRklMRV9TT1VSQ0VfSF8KKworI2RlZmluZSBDTEVBUl9GSUxFX1NPVVJDRV9IXworCisjaW5jbHVkZSA8c3RkaW8uaD4KKworI2luY2x1ZGUgPG1lZGlhL0RhdGFTb3VyY2UuaD4KKyNpbmNsdWRlIDxtZWRpYS9zdGFnZWZyaWdodC9NZWRpYUVycm9ycy5oPgorI2luY2x1ZGUgPHV0aWxzL3RocmVhZHMuaD4KKworbmFtZXNwYWNlIGFuZHJvaWQgeworCitjbGFzcyBDbGVhckZpbGVTb3VyY2UgOiBwdWJsaWMgRGF0YVNvdXJjZSB7CitwdWJsaWM6CisgICAgQ2xlYXJGaWxlU291cmNlKGNvbnN0IGNoYXIgKmZpbGVuYW1lKTsKKyAgICAvLyBDbGVhckZpbGVTb3VyY2UgdGFrZXMgb3duZXJzaGlwIGFuZCB3aWxsIGNsb3NlIHRoZSBmZAorICAgIENsZWFyRmlsZVNvdXJjZShpbnQgZmQsIGludDY0X3Qgb2Zmc2V0LCBpbnQ2NF90IGxlbmd0aCk7CisKKyAgICB2aXJ0dWFsIHN0YXR1c190IGluaXRDaGVjaygpIGNvbnN0OworCisgICAgdmlydHVhbCBzc2l6ZV90IHJlYWRBdChvZmY2NF90IG9mZnNldCwgdm9pZCAqZGF0YSwgc2l6ZV90IHNpemUpOworCisgICAgdmlydHVhbCBzdGF0dXNfdCBnZXRTaXplKG9mZjY0X3QgKnNpemUpOworCisgICAgdmlydHVhbCB1aW50MzJfdCBmbGFncygpIHsKKyAgICAgICAgcmV0dXJuIGtJc0xvY2FsRmlsZVNvdXJjZTsKKyAgICB9CisKKyAgICB2aXJ0dWFsIFN0cmluZzggdG9TdHJpbmcoKSB7CisgICAgICAgIHJldHVybiBtTmFtZTsKKyAgICB9CisKK3Byb3RlY3RlZDoKKyAgICB2aXJ0dWFsIH5DbGVhckZpbGVTb3VyY2UoKTsKKyAgICB2aXJ0dWFsIHNzaXplX3QgcmVhZEF0X2wob2ZmNjRfdCBvZmZzZXQsIHZvaWQgKmRhdGEsIHNpemVfdCBzaXplKTsKKworICAgIGludCBtRmQ7CisgICAgaW50NjRfdCBtT2Zmc2V0OworICAgIGludDY0X3QgbUxlbmd0aDsKKyAgICBNdXRleCBtTG9jazsKKworcHJpdmF0ZToKKyAgICBTdHJpbmc4IG1OYW1lOworCisgICAgQ2xlYXJGaWxlU291cmNlKGNvbnN0IENsZWFyRmlsZVNvdXJjZSAmKTsKKyAgICBDbGVhckZpbGVTb3VyY2UgJm9wZXJhdG9yPShjb25zdCBDbGVhckZpbGVTb3VyY2UgJik7Cit9OworCit9ICAvLyBuYW1lc3BhY2UgYW5kcm9pZAorCisjZW5kaWYgIC8vIENMRUFSX0ZJTEVfU09VUkNFX0hfCisKZGlmZiAtLWdpdCBhL21lZGlhL2xpYnN0YWdlZnJpZ2h0L2luY2x1ZGUvbWVkaWEvc3RhZ2VmcmlnaHQvQ2xlYXJNZWRpYUhUVFAuaCBiL21lZGlhL2xpYnN0YWdlZnJpZ2h0L2luY2x1ZGUvbWVkaWEvc3RhZ2VmcmlnaHQvQ2xlYXJNZWRpYUhUVFAuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MjkwN2E5Ci0tLSAvZGV2L251bGwKKysrIGIvbWVkaWEvbGlic3RhZ2VmcmlnaHQvaW5jbHVkZS9tZWRpYS9zdGFnZWZyaWdodC9DbGVhck1lZGlhSFRUUC5oCkBAIC0wLDAgKzEsNzMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTggVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworCisjaWZuZGVmIENMRUFSX01FRElBX0hUVFBfSF8KKworI2RlZmluZSBDTEVBUl9NRURJQV9IVFRQX0hfCisKKyNpbmNsdWRlIDxtZWRpYS9zdGFnZWZyaWdodC9mb3VuZGF0aW9uL0FTdHJpbmcuaD4KKworI2luY2x1ZGUgImluY2x1ZGUvSFRUUEJhc2UuaCIKKworbmFtZXNwYWNlIGFuZHJvaWQgeworCitzdHJ1Y3QgTWVkaWFIVFRQQ29ubmVjdGlvbjsKKworc3RydWN0IENsZWFyTWVkaWFIVFRQIDogcHVibGljIEhUVFBCYXNlIHsKKyAgICBDbGVhck1lZGlhSFRUUChjb25zdCBzcDxNZWRpYUhUVFBDb25uZWN0aW9uPiAmY29ubik7CisKKyAgICB2aXJ0dWFsIHN0YXR1c190IGNvbm5lY3QoCisgICAgICAgICAgICBjb25zdCBjaGFyICp1cmksCisgICAgICAgICAgICBjb25zdCBLZXllZFZlY3RvcjxTdHJpbmc4LCBTdHJpbmc4PiAqaGVhZGVycywKKyAgICAgICAgICAgIG9mZjY0X3Qgb2Zmc2V0KTsKKworICAgIHZpcnR1YWwgdm9pZCBjbG9zZSgpOworCisgICAgdmlydHVhbCB2b2lkIGRpc2Nvbm5lY3QoKTsKKworICAgIHZpcnR1YWwgc3RhdHVzX3QgaW5pdENoZWNrKCkgY29uc3Q7CisKKyAgICB2aXJ0dWFsIHNzaXplX3QgcmVhZEF0KG9mZjY0X3Qgb2Zmc2V0LCB2b2lkICpkYXRhLCBzaXplX3Qgc2l6ZSk7CisKKyAgICB2aXJ0dWFsIHN0YXR1c190IGdldFNpemUob2ZmNjRfdCAqc2l6ZSk7CisKKyAgICB2aXJ0dWFsIHVpbnQzMl90IGZsYWdzKCk7CisKKyAgICB2aXJ0dWFsIHN0YXR1c190IHJlY29ubmVjdEF0T2Zmc2V0KG9mZjY0X3Qgb2Zmc2V0KTsKKworcHJvdGVjdGVkOgorICAgIHZpcnR1YWwgfkNsZWFyTWVkaWFIVFRQKCk7CisKKyAgICB2aXJ0dWFsIFN0cmluZzggZ2V0VXJpKCk7CisgICAgdmlydHVhbCBTdHJpbmc4IGdldE1JTUVUeXBlKCkgY29uc3Q7CisKKyAgICBBU3RyaW5nIG1MYXN0VVJJOworCitwcml2YXRlOgorICAgIHN0YXR1c190IG1Jbml0Q2hlY2s7CisgICAgc3A8TWVkaWFIVFRQQ29ubmVjdGlvbj4gbUhUVFBDb25uZWN0aW9uOworCisgICAgS2V5ZWRWZWN0b3I8U3RyaW5nOCwgU3RyaW5nOD4gbUxhc3RIZWFkZXJzOworCisgICAgYm9vbCBtQ2FjaGVkU2l6ZVZhbGlkOworICAgIG9mZjY0X3QgbUNhY2hlZFNpemU7CisKKyAgICBESVNBTExPV19FVklMX0NPTlNUUlVDVE9SUyhDbGVhck1lZGlhSFRUUCk7Cit9OworCit9ICAvLyBuYW1lc3BhY2UgYW5kcm9pZAorCisjZW5kaWYgIC8vIENMRUFSX01FRElBX0hUVFBfSF8KZGlmZiAtLWdpdCBhL21lZGlhL2xpYnN0YWdlZnJpZ2h0L2luY2x1ZGUvbWVkaWEvc3RhZ2VmcmlnaHQvQ29sb3JDb252ZXJ0ZXIuaCBiL21lZGlhL2xpYnN0YWdlZnJpZ2h0L2luY2x1ZGUvbWVkaWEvc3RhZ2VmcmlnaHQvQ29sb3JDb252ZXJ0ZXIuaAppbmRleCA1YjM1NDNkLi42ZDRjMWJmIDEwMDY0NAotLS0gYS9tZWRpYS9saWJzdGFnZWZyaWdodC9pbmNsdWRlL21lZGlhL3N0YWdlZnJpZ2h0L0NvbG9yQ29udmVydGVyLmgKKysrIGIvbWVkaWEvbGlic3RhZ2VmcmlnaHQvaW5jbHVkZS9tZWRpYS9zdGFnZWZyaWdodC9Db2xvckNvbnZlcnRlci5oCkBAIC0zNSwyMSArMzUsMzIgQEAKIAogICAgIGJvb2wgaXNEc3RSR0IoKSBjb25zdDsKIAorICAgIHZvaWQgc2V0U3JjQ29sb3JTcGFjZSh1aW50MzJfdCBzdGFuZGFyZCwgdWludDMyX3QgcmFuZ2UsIHVpbnQzMl90IHRyYW5zZmVyKTsKKwogICAgIHN0YXR1c190IGNvbnZlcnQoCiAgICAgICAgICAgICBjb25zdCB2b2lkICpzcmNCaXRzLAotICAgICAgICAgICAgc2l6ZV90IHNyY1dpZHRoLCBzaXplX3Qgc3JjSGVpZ2h0LAorICAgICAgICAgICAgc2l6ZV90IHNyY1dpZHRoLCBzaXplX3Qgc3JjSGVpZ2h0LCBzaXplX3Qgc3JjU3RyaWRlLAogICAgICAgICAgICAgc2l6ZV90IHNyY0Nyb3BMZWZ0LCBzaXplX3Qgc3JjQ3JvcFRvcCwKICAgICAgICAgICAgIHNpemVfdCBzcmNDcm9wUmlnaHQsIHNpemVfdCBzcmNDcm9wQm90dG9tLAogICAgICAgICAgICAgdm9pZCAqZHN0Qml0cywKLSAgICAgICAgICAgIHNpemVfdCBkc3RXaWR0aCwgc2l6ZV90IGRzdEhlaWdodCwKKyAgICAgICAgICAgIHNpemVfdCBkc3RXaWR0aCwgc2l6ZV90IGRzdEhlaWdodCwgc2l6ZV90IGRzdFN0cmlkZSwKICAgICAgICAgICAgIHNpemVfdCBkc3RDcm9wTGVmdCwgc2l6ZV90IGRzdENyb3BUb3AsCiAgICAgICAgICAgICBzaXplX3QgZHN0Q3JvcFJpZ2h0LCBzaXplX3QgZHN0Q3JvcEJvdHRvbSk7CiAKIHByaXZhdGU6CisgICAgc3RydWN0IENvbG9yU3BhY2UgeworICAgICAgICB1aW50MzJfdCBtU3RhbmRhcmQ7CisgICAgICAgIHVpbnQzMl90IG1SYW5nZTsKKyAgICAgICAgdWludDMyX3QgbVRyYW5zZmVyOworCisgICAgICAgIGJvb2wgaXNCdDcwOSgpOworICAgICAgICBib29sIGlzSnBlZygpOworICAgIH07CisKICAgICBzdHJ1Y3QgQml0bWFwUGFyYW1zIHsKICAgICAgICAgQml0bWFwUGFyYW1zKAogICAgICAgICAgICAgICAgIHZvaWQgKmJpdHMsCi0gICAgICAgICAgICAgICAgc2l6ZV90IHdpZHRoLCBzaXplX3QgaGVpZ2h0LAorICAgICAgICAgICAgICAgIHNpemVfdCB3aWR0aCwgc2l6ZV90IGhlaWdodCwgc2l6ZV90IHN0cmlkZSwKICAgICAgICAgICAgICAgICBzaXplX3QgY3JvcExlZnQsIHNpemVfdCBjcm9wVG9wLAogICAgICAgICAgICAgICAgIHNpemVfdCBjcm9wUmlnaHQsIHNpemVfdCBjcm9wQm90dG9tLAogICAgICAgICAgICAgICAgIE9NWF9DT0xPUl9GT1JNQVRUWVBFIGNvbG9yRnJvbWF0KTsKQEAgLTY1LDYgKzc2LDcgQEAKICAgICB9OwogCiAgICAgT01YX0NPTE9SX0ZPUk1BVFRZUEUgbVNyY0Zvcm1hdCwgbURzdEZvcm1hdDsKKyAgICBDb2xvclNwYWNlIG1TcmNDb2xvclNwYWNlOwogICAgIHVpbnQ4X3QgKm1DbGlwOwogCiAgICAgdWludDhfdCAqaW5pdENsaXAoKTsKZGlmZiAtLWdpdCBhL21lZGlhL2xpYnN0YWdlZnJpZ2h0L2luY2x1ZGUvbWVkaWEvc3RhZ2VmcmlnaHQvRmlsZVNvdXJjZS5oIGIvbWVkaWEvbGlic3RhZ2VmcmlnaHQvaW5jbHVkZS9tZWRpYS9zdGFnZWZyaWdodC9GaWxlU291cmNlLmgKaW5kZXggODYwNDg5MC4uYjYxMGVlZiAxMDA2NDQKLS0tIGEvbWVkaWEvbGlic3RhZ2VmcmlnaHQvaW5jbHVkZS9tZWRpYS9zdGFnZWZyaWdodC9GaWxlU291cmNlLmgKKysrIGIvbWVkaWEvbGlic3RhZ2VmcmlnaHQvaW5jbHVkZS9tZWRpYS9zdGFnZWZyaWdodC9GaWxlU291cmNlLmgKQEAgLTIwLDQ3ICsyMCwyOSBAQAogCiAjaW5jbHVkZSA8c3RkaW8uaD4KIAotI2luY2x1ZGUgPG1lZGlhL0RhdGFTb3VyY2UuaD4KKyNpbmNsdWRlIDxtZWRpYS9zdGFnZWZyaWdodC9DbGVhckZpbGVTb3VyY2UuaD4KICNpbmNsdWRlIDxtZWRpYS9zdGFnZWZyaWdodC9NZWRpYUVycm9ycy5oPgogI2luY2x1ZGUgPHV0aWxzL3RocmVhZHMuaD4KICNpbmNsdWRlIDxkcm0vRHJtTWFuYWdlckNsaWVudC5oPgogCiBuYW1lc3BhY2UgYW5kcm9pZCB7CiAKLWNsYXNzIEZpbGVTb3VyY2UgOiBwdWJsaWMgRGF0YVNvdXJjZSB7CitjbGFzcyBGaWxlU291cmNlIDogcHVibGljIENsZWFyRmlsZVNvdXJjZSB7CiBwdWJsaWM6CiAgICAgRmlsZVNvdXJjZShjb25zdCBjaGFyICpmaWxlbmFtZSk7CiAgICAgLy8gRmlsZVNvdXJjZSB0YWtlcyBvd25lcnNoaXAgYW5kIHdpbGwgY2xvc2UgdGhlIGZkCiAgICAgRmlsZVNvdXJjZShpbnQgZmQsIGludDY0X3Qgb2Zmc2V0LCBpbnQ2NF90IGxlbmd0aCk7CiAKLSAgICB2aXJ0dWFsIHN0YXR1c190IGluaXRDaGVjaygpIGNvbnN0OwotCiAgICAgdmlydHVhbCBzc2l6ZV90IHJlYWRBdChvZmY2NF90IG9mZnNldCwgdm9pZCAqZGF0YSwgc2l6ZV90IHNpemUpOwogCi0gICAgdmlydHVhbCBzdGF0dXNfdCBnZXRTaXplKG9mZjY0X3QgKnNpemUpOwotCi0gICAgdmlydHVhbCB1aW50MzJfdCBmbGFncygpIHsKLSAgICAgICAgcmV0dXJuIGtJc0xvY2FsRmlsZVNvdXJjZTsKLSAgICB9Ci0KICAgICB2aXJ0dWFsIHNwPERlY3J5cHRIYW5kbGU+IERybUluaXRpYWxpemF0aW9uKGNvbnN0IGNoYXIgKm1pbWUpOwogCi0gICAgdmlydHVhbCBTdHJpbmc4IHRvU3RyaW5nKCkgewotICAgICAgICByZXR1cm4gbU5hbWU7Ci0gICAgfQotCiAgICAgc3RhdGljIGJvb2wgcmVxdWlyZXNEcm0oaW50IGZkLCBpbnQ2NF90IG9mZnNldCwgaW50NjRfdCBsZW5ndGgsIGNvbnN0IGNoYXIgKm1pbWUpOwogCiBwcm90ZWN0ZWQ6CiAgICAgdmlydHVhbCB+RmlsZVNvdXJjZSgpOwogCiBwcml2YXRlOgotICAgIGludCBtRmQ7Ci0gICAgaW50NjRfdCBtT2Zmc2V0OwotICAgIGludDY0X3QgbUxlbmd0aDsKLSAgICBNdXRleCBtTG9jazsKLSAgICBTdHJpbmc4IG1OYW1lOwotCiAgICAgLypmb3IgRFJNKi8KICAgICBzcDxEZWNyeXB0SGFuZGxlPiBtRGVjcnlwdEhhbmRsZTsKICAgICBEcm1NYW5hZ2VyQ2xpZW50ICptRHJtTWFuYWdlckNsaWVudDsKQEAgLTY4LDcgKzUwLDcgQEAKICAgICBzc2l6ZV90IG1Ecm1CdWZTaXplOwogICAgIHVuc2lnbmVkIGNoYXIgKm1Ecm1CdWY7CiAKLSAgICBzc2l6ZV90IHJlYWRBdERSTShvZmY2NF90IG9mZnNldCwgdm9pZCAqZGF0YSwgc2l6ZV90IHNpemUpOworICAgIHNzaXplX3QgcmVhZEF0RFJNX2wob2ZmNjRfdCBvZmZzZXQsIHZvaWQgKmRhdGEsIHNpemVfdCBzaXplKTsKIAogICAgIEZpbGVTb3VyY2UoY29uc3QgRmlsZVNvdXJjZSAmKTsKICAgICBGaWxlU291cmNlICZvcGVyYXRvcj0oY29uc3QgRmlsZVNvdXJjZSAmKTsKZGlmZiAtLWdpdCBhL21lZGlhL2xpYnN0YWdlZnJpZ2h0L2luY2x1ZGUvbWVkaWEvc3RhZ2VmcmlnaHQvSW50ZXJmYWNlVXRpbHMuaCBiL21lZGlhL2xpYnN0YWdlZnJpZ2h0L2luY2x1ZGUvbWVkaWEvc3RhZ2VmcmlnaHQvSW50ZXJmYWNlVXRpbHMuaAppbmRleCBmMGViZDQ4Li5iODNhOTU4IDEwMDY0NAotLS0gYS9tZWRpYS9saWJzdGFnZWZyaWdodC9pbmNsdWRlL21lZGlhL3N0YWdlZnJpZ2h0L0ludGVyZmFjZVV0aWxzLmgKKysrIGIvbWVkaWEvbGlic3RhZ2VmcmlnaHQvaW5jbHVkZS9tZWRpYS9zdGFnZWZyaWdodC9JbnRlcmZhY2VVdGlscy5oCkBAIC0xOCw3ICsxOCw2IEBACiAjZGVmaW5lIElOVEVSRkFDRV9VVElMU19IXwogCiAjaW5jbHVkZSA8dXRpbHMvUmVmQmFzZS5oPgotI2luY2x1ZGUgPG1lZGlhL01lZGlhRXh0cmFjdG9yLmg+CiAjaW5jbHVkZSA8bWVkaWEvc3RhZ2VmcmlnaHQvUmVtb3RlTWVkaWFFeHRyYWN0b3IuaD4KICNpbmNsdWRlIDxtZWRpYS9NZWRpYVNvdXJjZS5oPgogI2luY2x1ZGUgPG1lZGlhL0lNZWRpYUV4dHJhY3Rvci5oPgpkaWZmIC0tZ2l0IGEvbWVkaWEvbGlic3RhZ2VmcmlnaHQvaW5jbHVkZS9tZWRpYS9zdGFnZWZyaWdodC9NZWRpYUNvZGVjQ29uc3RhbnRzLmggYi9tZWRpYS9saWJzdGFnZWZyaWdodC9pbmNsdWRlL21lZGlhL3N0YWdlZnJpZ2h0L01lZGlhQ29kZWNDb25zdGFudHMuaAppbmRleCAzZWY0YzBlLi5hNDYyYWU3IDEwMDY0NAotLS0gYS9tZWRpYS9saWJzdGFnZWZyaWdodC9pbmNsdWRlL21lZGlhL3N0YWdlZnJpZ2h0L01lZGlhQ29kZWNDb25zdGFudHMuaAorKysgYi9tZWRpYS9saWJzdGFnZWZyaWdodC9pbmNsdWRlL21lZGlhL3N0YWdlZnJpZ2h0L01lZGlhQ29kZWNDb25zdGFudHMuaApAQCAtMzI3LDYgKzMyNyw3IEBACiBjb25zdGV4cHIgY2hhciBLRVlfQklUUkFURV9NT0RFW10gPSAiYml0cmF0ZS1tb2RlIjsKIGNvbnN0ZXhwciBjaGFyIEtFWV9DQV9TRVNTSU9OX0lEW10gPSAiY2Etc2Vzc2lvbi1pZCI7CiBjb25zdGV4cHIgY2hhciBLRVlfQ0FfU1lTVEVNX0lEW10gPSAiY2Etc3lzdGVtLWlkIjsKK2NvbnN0ZXhwciBjaGFyIEtFWV9DQV9QUklWQVRFX0RBVEFbXSA9ICJjYS1wcml2YXRlLWRhdGEiOwogY29uc3RleHByIGNoYXIgS0VZX0NBUFRVUkVfUkFURVtdID0gImNhcHR1cmUtcmF0ZSI7CiBjb25zdGV4cHIgY2hhciBLRVlfQ0hBTk5FTF9DT1VOVFtdID0gImNoYW5uZWwtY291bnQiOwogY29uc3RleHByIGNoYXIgS0VZX0NIQU5ORUxfTUFTS1tdID0gImNoYW5uZWwtbWFzayI7CmRpZmYgLS1naXQgYS9tZWRpYS9saWJzdGFnZWZyaWdodC9pbmNsdWRlL21lZGlhL3N0YWdlZnJpZ2h0L01lZGlhRXh0cmFjdG9yLmggYi9tZWRpYS9saWJzdGFnZWZyaWdodC9pbmNsdWRlL21lZGlhL3N0YWdlZnJpZ2h0L01lZGlhRXh0cmFjdG9yLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzEzNDNkNQotLS0gL2Rldi9udWxsCisrKyBiL21lZGlhL2xpYnN0YWdlZnJpZ2h0L2luY2x1ZGUvbWVkaWEvc3RhZ2VmcmlnaHQvTWVkaWFFeHRyYWN0b3IuaApAQCAtMCwwICsxLDE0MCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOSBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCisKKyNpZm5kZWYgTUVESUFfRVhUUkFDVE9SX0hfCisKKyNkZWZpbmUgTUVESUFfRVhUUkFDVE9SX0hfCisKKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHZlY3Rvcj4KKworI2luY2x1ZGUgPHV0aWxzL0Vycm9ycy5oPgorI2luY2x1ZGUgPHV0aWxzL0xvZy5oPgorI2luY2x1ZGUgPHV0aWxzL1JlZkJhc2UuaD4KKyNpbmNsdWRlIDxtZWRpYS9NZWRpYUV4dHJhY3RvclBsdWdpbkFwaS5oPgorI2luY2x1ZGUgPG1lZGlhL01lZGlhRXh0cmFjdG9yUGx1Z2luSGVscGVyLmg+CisKK25hbWVzcGFjZSBhbmRyb2lkIHsKKworY2xhc3MgRGF0YVNvdXJjZUJhc2U7CitjbGFzcyBNZXRhRGF0YUJhc2U7CitzdHJ1Y3QgTWVkaWFUcmFjazsKKworCitjbGFzcyBFeHRyYWN0b3JBbGxvY1RyYWNrZXIgeworcHVibGljOgorICAgIEV4dHJhY3RvckFsbG9jVHJhY2tlcigpIHsKKyAgICAgICAgQUxPR0QoImV4dHJhY3RvciBhbGxvY2F0ZWQ6ICVwIiwgdGhpcyk7CisgICAgfQorICAgIHZpcnR1YWwgfkV4dHJhY3RvckFsbG9jVHJhY2tlcigpIHsKKyAgICAgICAgQUxPR0QoImV4dHJhY3RvciBmcmVlZDogJXAiLCB0aGlzKTsKKyAgICB9Cit9OworCitjbGFzcyBNZWRpYUV4dHJhY3RvcgorLy8gOiBwdWJsaWMgRXh0cmFjdG9yQWxsb2NUcmFja2VyCit7CitwdWJsaWM6CisgICAgdmlydHVhbCB+TWVkaWFFeHRyYWN0b3IoKTsKKyAgICB2aXJ0dWFsIHNpemVfdCBjb3VudFRyYWNrcygpID0gMDsKKyAgICB2aXJ0dWFsIE1lZGlhVHJhY2sgKmdldFRyYWNrKHNpemVfdCBpbmRleCkgPSAwOworCisgICAgZW51bSBHZXRUcmFja01ldGFEYXRhRmxhZ3MgeworICAgICAgICBrSW5jbHVkZUV4dGVuc2l2ZU1ldGFEYXRhID0gMQorICAgIH07CisgICAgdmlydHVhbCBzdGF0dXNfdCBnZXRUcmFja01ldGFEYXRhKAorICAgICAgICAgICAgTWV0YURhdGFCYXNlJiBtZXRhLAorICAgICAgICAgICAgc2l6ZV90IGluZGV4LCB1aW50MzJfdCBmbGFncyA9IDApID0gMDsKKworICAgIC8vIFJldHVybiBjb250YWluZXIgc3BlY2lmaWMgbWV0YS1kYXRhLiBUaGUgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbgorICAgIC8vIHJldHVybnMgYW4gZW1wdHkgbWV0YWRhdGEgb2JqZWN0LgorICAgIHZpcnR1YWwgc3RhdHVzX3QgZ2V0TWV0YURhdGEoTWV0YURhdGFCYXNlJiBtZXRhKSA9IDA7CisKKyAgICBlbnVtIEZsYWdzIHsKKyAgICAgICAgQ0FOX1NFRUtfQkFDS1dBUkQgID0gMSwgIC8vIHRoZSAic2VlayAxMHNlY3MgYmFjayBidXR0b24iCisgICAgICAgIENBTl9TRUVLX0ZPUldBUkQgICA9IDIsICAvLyB0aGUgInNlZWsgMTBzZWNzIGZvcndhcmQgYnV0dG9uIgorICAgICAgICBDQU5fUEFVU0UgICAgICAgICAgPSA0LAorICAgICAgICBDQU5fU0VFSyAgICAgICAgICAgPSA4LCAgLy8gdGhlICJzZWVrIGJhciIKKyAgICB9OworCisgICAgLy8gSWYgc3ViY2xhc3NlcyBkbyBfbm90XyBvdmVycmlkZSB0aGlzLCB0aGUgZGVmYXVsdCBpcworICAgIC8vIENBTl9TRUVLX0JBQ0tXQVJEIHwgQ0FOX1NFRUtfRk9SV0FSRCB8IENBTl9TRUVLIHwgQ0FOX1BBVVNFCisgICAgdmlydHVhbCB1aW50MzJfdCBmbGFncygpIGNvbnN0OworCisgICAgdmlydHVhbCBzdGF0dXNfdCBzZXRNZWRpYUNhcyhjb25zdCB1aW50OF90KiAvKmNhc1Rva2VuKi8sIHNpemVfdCAvKnNpemUqLykgeworICAgICAgICByZXR1cm4gSU5WQUxJRF9PUEVSQVRJT047CisgICAgfQorCisgICAgdmlydHVhbCBjb25zdCBjaGFyICogbmFtZSgpIHsgcmV0dXJuICI8dW5zcGVjaWZpZWQ+IjsgfQorCitwcm90ZWN0ZWQ6CisgICAgTWVkaWFFeHRyYWN0b3IoKTsKKworcHJpdmF0ZToKKyAgICBNZWRpYUV4dHJhY3Rvcihjb25zdCBNZWRpYUV4dHJhY3RvciAmKTsKKyAgICBNZWRpYUV4dHJhY3RvciAmb3BlcmF0b3I9KGNvbnN0IE1lZGlhRXh0cmFjdG9yICYpOworfTsKKworY2xhc3MgTWVkaWFFeHRyYWN0b3JDVW53cmFwcGVyIDogcHVibGljIE1lZGlhRXh0cmFjdG9yIHsKK3B1YmxpYzoKKyAgICBNZWRpYUV4dHJhY3RvckNVbndyYXBwZXIoKSB7fTsKKyAgICB2aXJ0dWFsIHNpemVfdCBjb3VudFRyYWNrcygpID0gMDsKKyAgICB2aXJ0dWFsIE1lZGlhVHJhY2sgKmdldFRyYWNrKHNpemVfdCBpbmRleCkgPSAwOworICAgIHZpcnR1YWwgc3RhdHVzX3QgZ2V0VHJhY2tNZXRhRGF0YShNZXRhRGF0YUJhc2UmIG1ldGEsIHNpemVfdCBpbmRleCwgdWludDMyX3QgZmxhZ3MgPSAwKSA9IDA7CisgICAgdmlydHVhbCBzdGF0dXNfdCBnZXRNZXRhRGF0YShNZXRhRGF0YUJhc2UmIG1ldGEpID0gMDsKKyAgICB2aXJ0dWFsIGNvbnN0IGNoYXIgKiBuYW1lKCkgPSAwOworICAgIHZpcnR1YWwgdWludDMyX3QgZmxhZ3MoKSBjb25zdCA9IDA7CisgICAgdmlydHVhbCBzdGF0dXNfdCBzZXRNZWRpYUNhcyhjb25zdCB1aW50OF90KiBjYXNUb2tlbiwgc2l6ZV90IHNpemUpID0gMDsKK3Byb3RlY3RlZDoKKyAgICB2aXJ0dWFsIH5NZWRpYUV4dHJhY3RvckNVbndyYXBwZXIoKSB7fTsKK307CisKKworY2xhc3MgTWVkaWFFeHRyYWN0b3JDVW53cmFwcGVyVjEgOiBwdWJsaWMgTWVkaWFFeHRyYWN0b3JDVW53cmFwcGVyIHsKK3B1YmxpYzoKKyAgICBleHBsaWNpdCBNZWRpYUV4dHJhY3RvckNVbndyYXBwZXJWMShDTWVkaWFFeHRyYWN0b3IgKnBsdWdpbik7CisgICAgdmlydHVhbCBzaXplX3QgY291bnRUcmFja3MoKTsKKyAgICB2aXJ0dWFsIE1lZGlhVHJhY2sgKmdldFRyYWNrKHNpemVfdCBpbmRleCk7CisgICAgdmlydHVhbCBzdGF0dXNfdCBnZXRUcmFja01ldGFEYXRhKE1ldGFEYXRhQmFzZSYgbWV0YSwgc2l6ZV90IGluZGV4LCB1aW50MzJfdCBmbGFncyA9IDApOworICAgIHZpcnR1YWwgc3RhdHVzX3QgZ2V0TWV0YURhdGEoTWV0YURhdGFCYXNlJiBtZXRhKTsKKyAgICB2aXJ0dWFsIGNvbnN0IGNoYXIgKiBuYW1lKCk7CisgICAgdmlydHVhbCB1aW50MzJfdCBmbGFncygpIGNvbnN0OworICAgIHZpcnR1YWwgc3RhdHVzX3Qgc2V0TWVkaWFDYXMoY29uc3QgdWludDhfdCogY2FzVG9rZW4sIHNpemVfdCBzaXplKTsKK3Byb3RlY3RlZDoKKyAgICB2aXJ0dWFsIH5NZWRpYUV4dHJhY3RvckNVbndyYXBwZXJWMSgpOworcHJpdmF0ZToKKyAgICBDTWVkaWFFeHRyYWN0b3IgKnBsdWdpbjsKK307CisKK2NsYXNzIE1lZGlhRXh0cmFjdG9yQ1Vud3JhcHBlclYyIDogcHVibGljIE1lZGlhRXh0cmFjdG9yQ1Vud3JhcHBlciB7CitwdWJsaWM6CisgICAgZXhwbGljaXQgTWVkaWFFeHRyYWN0b3JDVW53cmFwcGVyVjIoQ01lZGlhRXh0cmFjdG9yVjIgKnBsdWdpbik7CisgICAgdmlydHVhbCBzaXplX3QgY291bnRUcmFja3MoKTsKKyAgICB2aXJ0dWFsIE1lZGlhVHJhY2sgKmdldFRyYWNrKHNpemVfdCBpbmRleCk7CisgICAgdmlydHVhbCBzdGF0dXNfdCBnZXRUcmFja01ldGFEYXRhKE1ldGFEYXRhQmFzZSYgbWV0YSwgc2l6ZV90IGluZGV4LCB1aW50MzJfdCBmbGFncyA9IDApOworICAgIHZpcnR1YWwgc3RhdHVzX3QgZ2V0TWV0YURhdGEoTWV0YURhdGFCYXNlJiBtZXRhKTsKKyAgICB2aXJ0dWFsIGNvbnN0IGNoYXIgKiBuYW1lKCk7CisgICAgdmlydHVhbCB1aW50MzJfdCBmbGFncygpIGNvbnN0OworICAgIHZpcnR1YWwgc3RhdHVzX3Qgc2V0TWVkaWFDYXMoY29uc3QgdWludDhfdCogY2FzVG9rZW4sIHNpemVfdCBzaXplKTsKK3Byb3RlY3RlZDoKKyAgICB2aXJ0dWFsIH5NZWRpYUV4dHJhY3RvckNVbndyYXBwZXJWMigpOworcHJpdmF0ZToKKyAgICBDTWVkaWFFeHRyYWN0b3JWMiAqcGx1Z2luOworfTsKKworfSAgLy8gbmFtZXNwYWNlIGFuZHJvaWQKKworI2VuZGlmICAvLyBNRURJQV9FWFRSQUNUT1JfSF8KZGlmZiAtLWdpdCBhL21lZGlhL2xpYnN0YWdlZnJpZ2h0L2luY2x1ZGUvbWVkaWEvc3RhZ2VmcmlnaHQvTWVkaWFFeHRyYWN0b3JGYWN0b3J5LmggYi9tZWRpYS9saWJzdGFnZWZyaWdodC9pbmNsdWRlL21lZGlhL3N0YWdlZnJpZ2h0L01lZGlhRXh0cmFjdG9yRmFjdG9yeS5oCmluZGV4IGZiOWY1YmQuLmVmOWY3ZWQgMTAwNjQ0Ci0tLSBhL21lZGlhL2xpYnN0YWdlZnJpZ2h0L2luY2x1ZGUvbWVkaWEvc3RhZ2VmcmlnaHQvTWVkaWFFeHRyYWN0b3JGYWN0b3J5LmgKKysrIGIvbWVkaWEvbGlic3RhZ2VmcmlnaHQvaW5jbHVkZS9tZWRpYS9zdGFnZWZyaWdodC9NZWRpYUV4dHJhY3RvckZhY3RvcnkuaApAQCAtMjEsOCArMjEsNiBAQAogI2luY2x1ZGUgPHN0ZGlvLmg+CiAKICNpbmNsdWRlIDxtZWRpYS9JTWVkaWFFeHRyYWN0b3IuaD4KLSNpbmNsdWRlIDxtZWRpYS9NZWRpYUV4dHJhY3Rvci5oPgotI2luY2x1ZGUgPHV0aWxzL0xpc3QuaD4KIAogbmFtZXNwYWNlIGFuZHJvaWQgewogCkBAIC00MCwxOSArMzgsMjAgQEAKIAogcHJpdmF0ZToKICAgICBzdGF0aWMgTXV0ZXggZ1BsdWdpbk11dGV4OwotICAgIHN0YXRpYyBzdGQ6OnNoYXJlZF9wdHI8TGlzdDxzcDxFeHRyYWN0b3JQbHVnaW4+Pj4gZ1BsdWdpbnM7CisgICAgc3RhdGljIHN0ZDo6c2hhcmVkX3B0cjxzdGQ6Omxpc3Q8c3A8RXh0cmFjdG9yUGx1Z2luPj4+IGdQbHVnaW5zOwogICAgIHN0YXRpYyBib29sIGdQbHVnaW5zUmVnaXN0ZXJlZDsKKyAgICBzdGF0aWMgYm9vbCBnSWdub3JlVmVyc2lvbjsKIAogICAgIHN0YXRpYyB2b2lkIFJlZ2lzdGVyRXh0cmFjdG9yc0luQXBrKAotICAgICAgICAgICAgY29uc3QgY2hhciAqYXBrUGF0aCwgTGlzdDxzcDxFeHRyYWN0b3JQbHVnaW4+PiAmcGx1Z2luTGlzdCk7CisgICAgICAgICAgICBjb25zdCBjaGFyICphcGtQYXRoLCBzdGQ6Omxpc3Q8c3A8RXh0cmFjdG9yUGx1Z2luPj4gJnBsdWdpbkxpc3QpOwogICAgIHN0YXRpYyB2b2lkIFJlZ2lzdGVyRXh0cmFjdG9yc0luU3lzdGVtKAotICAgICAgICAgICAgY29uc3QgY2hhciAqbGliRGlyUGF0aCwgTGlzdDxzcDxFeHRyYWN0b3JQbHVnaW4+PiAmcGx1Z2luTGlzdCk7CisgICAgICAgICAgICBjb25zdCBjaGFyICpsaWJEaXJQYXRoLCBzdGQ6Omxpc3Q8c3A8RXh0cmFjdG9yUGx1Z2luPj4gJnBsdWdpbkxpc3QpOwogICAgIHN0YXRpYyB2b2lkIFJlZ2lzdGVyRXh0cmFjdG9yKAotICAgICAgICAgICAgY29uc3Qgc3A8RXh0cmFjdG9yUGx1Z2luPiAmcGx1Z2luLCBMaXN0PHNwPEV4dHJhY3RvclBsdWdpbj4+ICZwbHVnaW5MaXN0KTsKKyAgICAgICAgICAgIGNvbnN0IHNwPEV4dHJhY3RvclBsdWdpbj4gJnBsdWdpbiwgc3RkOjpsaXN0PHNwPEV4dHJhY3RvclBsdWdpbj4+ICZwbHVnaW5MaXN0KTsKIAotICAgIHN0YXRpYyBNZWRpYUV4dHJhY3Rvcjo6Q3JlYXRvckZ1bmMgc25pZmYoRGF0YVNvdXJjZUJhc2UgKnNvdXJjZSwKLSAgICAgICAgICAgIGZsb2F0ICpjb25maWRlbmNlLCB2b2lkICoqbWV0YSwgTWVkaWFFeHRyYWN0b3I6OkZyZWVNZXRhRnVuYyAqZnJlZU1ldGEsCi0gICAgICAgICAgICBzcDxFeHRyYWN0b3JQbHVnaW4+ICZwbHVnaW4pOworICAgIHN0YXRpYyB2b2lkICpzbmlmZihjb25zdCBzcDxEYXRhU291cmNlPiAmc291cmNlLAorICAgICAgICAgICAgZmxvYXQgKmNvbmZpZGVuY2UsIHZvaWQgKiptZXRhLCBGcmVlTWV0YUZ1bmMgKmZyZWVNZXRhLAorICAgICAgICAgICAgc3A8RXh0cmFjdG9yUGx1Z2luPiAmcGx1Z2luLCB1aW50MzJfdCAqY3JlYXRvclZlcnNpb24pOwogCiAgICAgc3RhdGljIHZvaWQgVXBkYXRlRXh0cmFjdG9ycyhjb25zdCBjaGFyICpuZXdVcGRhdGVBcGtQYXRoKTsKIH07CmRpZmYgLS1naXQgYS9tZWRpYS9saWJzdGFnZWZyaWdodC9pbmNsdWRlL21lZGlhL3N0YWdlZnJpZ2h0L01lZGlhSFRUUC5oIGIvbWVkaWEvbGlic3RhZ2VmcmlnaHQvaW5jbHVkZS9tZWRpYS9zdGFnZWZyaWdodC9NZWRpYUhUVFAuaAppbmRleCBmZTBlNjEzLi5hY2FhNmM0IDEwMDY0NAotLS0gYS9tZWRpYS9saWJzdGFnZWZyaWdodC9pbmNsdWRlL21lZGlhL3N0YWdlZnJpZ2h0L01lZGlhSFRUUC5oCisrKyBiL21lZGlhL2xpYnN0YWdlZnJpZ2h0L2luY2x1ZGUvbWVkaWEvc3RhZ2VmcmlnaHQvTWVkaWFIVFRQLmgKQEAgLTE5LDUwICsxOSwyMSBAQAogI2RlZmluZSBNRURJQV9IVFRQX0hfCiAKICNpbmNsdWRlIDxtZWRpYS9zdGFnZWZyaWdodC9mb3VuZGF0aW9uL0FTdHJpbmcuaD4KLQotI2luY2x1ZGUgImluY2x1ZGUvSFRUUEJhc2UuaCIKKyNpbmNsdWRlIDxtZWRpYS9zdGFnZWZyaWdodC9DbGVhck1lZGlhSFRUUC5oPgogCiBuYW1lc3BhY2UgYW5kcm9pZCB7CiAKIHN0cnVjdCBNZWRpYUhUVFBDb25uZWN0aW9uOwogCi1zdHJ1Y3QgTWVkaWFIVFRQIDogcHVibGljIEhUVFBCYXNlIHsKK3N0cnVjdCBNZWRpYUhUVFAgOiBwdWJsaWMgQ2xlYXJNZWRpYUhUVFAgewogICAgIE1lZGlhSFRUUChjb25zdCBzcDxNZWRpYUhUVFBDb25uZWN0aW9uPiAmY29ubik7CiAKLSAgICB2aXJ0dWFsIHN0YXR1c190IGNvbm5lY3QoCi0gICAgICAgICAgICBjb25zdCBjaGFyICp1cmksCi0gICAgICAgICAgICBjb25zdCBLZXllZFZlY3RvcjxTdHJpbmc4LCBTdHJpbmc4PiAqaGVhZGVycywKLSAgICAgICAgICAgIG9mZjY0X3Qgb2Zmc2V0KTsKLQotICAgIHZpcnR1YWwgdm9pZCBkaXNjb25uZWN0KCk7Ci0KLSAgICB2aXJ0dWFsIHN0YXR1c190IGluaXRDaGVjaygpIGNvbnN0OwotCi0gICAgdmlydHVhbCBzc2l6ZV90IHJlYWRBdChvZmY2NF90IG9mZnNldCwgdm9pZCAqZGF0YSwgc2l6ZV90IHNpemUpOwotCi0gICAgdmlydHVhbCBzdGF0dXNfdCBnZXRTaXplKG9mZjY0X3QgKnNpemUpOwotCi0gICAgdmlydHVhbCB1aW50MzJfdCBmbGFncygpOwotCi0gICAgdmlydHVhbCBzdGF0dXNfdCByZWNvbm5lY3RBdE9mZnNldChvZmY2NF90IG9mZnNldCk7Ci0KIHByb3RlY3RlZDoKICAgICB2aXJ0dWFsIH5NZWRpYUhUVFAoKTsKIAogICAgIHZpcnR1YWwgc3A8RGVjcnlwdEhhbmRsZT4gRHJtSW5pdGlhbGl6YXRpb24oY29uc3QgY2hhciogbWltZSk7Ci0gICAgdmlydHVhbCBTdHJpbmc4IGdldFVyaSgpOwotICAgIHZpcnR1YWwgU3RyaW5nOCBnZXRNSU1FVHlwZSgpIGNvbnN0OwogCiBwcml2YXRlOgotICAgIHN0YXR1c190IG1Jbml0Q2hlY2s7Ci0gICAgc3A8TWVkaWFIVFRQQ29ubmVjdGlvbj4gbUhUVFBDb25uZWN0aW9uOwotCi0gICAgS2V5ZWRWZWN0b3I8U3RyaW5nOCwgU3RyaW5nOD4gbUxhc3RIZWFkZXJzOwotICAgIEFTdHJpbmcgbUxhc3RVUkk7Ci0KLSAgICBib29sIG1DYWNoZWRTaXplVmFsaWQ7Ci0gICAgb2ZmNjRfdCBtQ2FjaGVkU2l6ZTsKLQogICAgIHNwPERlY3J5cHRIYW5kbGU+IG1EZWNyeXB0SGFuZGxlOwogICAgIERybU1hbmFnZXJDbGllbnQgKm1Ecm1NYW5hZ2VyQ2xpZW50OwogCmRpZmYgLS1naXQgYS9tZWRpYS9saWJzdGFnZWZyaWdodC9pbmNsdWRlL21lZGlhL3N0YWdlZnJpZ2h0L01ldGFEYXRhVXRpbHMuaCBiL21lZGlhL2xpYnN0YWdlZnJpZ2h0L2luY2x1ZGUvbWVkaWEvc3RhZ2VmcmlnaHQvTWV0YURhdGFVdGlscy5oCmluZGV4IGQ1YTgwODAuLmRjYWYyN2YgMTAwNjQ0Ci0tLSBhL21lZGlhL2xpYnN0YWdlZnJpZ2h0L2luY2x1ZGUvbWVkaWEvc3RhZ2VmcmlnaHQvTWV0YURhdGFVdGlscy5oCisrKyBiL21lZGlhL2xpYnN0YWdlZnJpZ2h0L2luY2x1ZGUvbWVkaWEvc3RhZ2VmcmlnaHQvTWV0YURhdGFVdGlscy5oCkBAIC0yMCwxMyArMjAsMjQgQEAKIAogI2luY2x1ZGUgPG1lZGlhL3N0YWdlZnJpZ2h0L01ldGFEYXRhLmg+CiAKK3N0cnVjdCBBTWVkaWFGb3JtYXQ7CisKIG5hbWVzcGFjZSBhbmRyb2lkIHsKIAogc3RydWN0IEFCdWZmZXI7CiBib29sIE1ha2VBVkNDb2RlY1NwZWNpZmljRGF0YShNZXRhRGF0YUJhc2UgJm1ldGEsIGNvbnN0IHVpbnQ4X3QgKmRhdGEsIHNpemVfdCBzaXplKTsKK2Jvb2wgTWFrZUFWQ0NvZGVjU3BlY2lmaWNEYXRhKEFNZWRpYUZvcm1hdCAqbWV0YSwgY29uc3QgdWludDhfdCAqZGF0YSwgc2l6ZV90IHNpemUpOworCitib29sIE1ha2VBQUNDb2RlY1NwZWNpZmljRGF0YShNZXRhRGF0YUJhc2UgJm1ldGEsIGNvbnN0IHVpbnQ4X3QgKmRhdGEsIHNpemVfdCBzaXplKTsKIGJvb2wgTWFrZUFBQ0NvZGVjU3BlY2lmaWNEYXRhKE1ldGFEYXRhQmFzZSAmbWV0YSwgdW5zaWduZWQgcHJvZmlsZSwgdW5zaWduZWQgc2FtcGxpbmdfZnJlcV9pbmRleCwKICAgICAgICAgdW5zaWduZWQgY2hhbm5lbF9jb25maWd1cmF0aW9uKTsKIAorYm9vbCBNYWtlQUFDQ29kZWNTcGVjaWZpY0RhdGEoQU1lZGlhRm9ybWF0ICptZXRhLCB1bnNpZ25lZCBwcm9maWxlLCB1bnNpZ25lZCBzYW1wbGluZ19mcmVxX2luZGV4LAorICAgICAgICB1bnNpZ25lZCBjaGFubmVsX2NvbmZpZ3VyYXRpb24pOworCit2b2lkIHBhcnNlVm9yYmlzQ29tbWVudCgKKyAgICAgICAgQU1lZGlhRm9ybWF0ICpmaWxlTWV0YSwgY29uc3QgY2hhciAqY29tbWVudCwgc2l6ZV90IGNvbW1lbnRMZW5ndGgpOworCiB9ICAvLyBuYW1lc3BhY2UgYW5kcm9pZAogCiAjZW5kaWYgIC8vIE1FVEFfREFUQV9VVElMU19IXwpkaWZmIC0tZ2l0IGEvbWVkaWEvbGlic3RhZ2VmcmlnaHQvaW5jbHVkZS9tZWRpYS9zdGFnZWZyaWdodC9OdU1lZGlhRXh0cmFjdG9yLmggYi9tZWRpYS9saWJzdGFnZWZyaWdodC9pbmNsdWRlL21lZGlhL3N0YWdlZnJpZ2h0L051TWVkaWFFeHRyYWN0b3IuaAppbmRleCA1NGE3MDk1Li44ZGM4ZDM4IDEwMDY0NAotLS0gYS9tZWRpYS9saWJzdGFnZWZyaWdodC9pbmNsdWRlL21lZGlhL3N0YWdlZnJpZ2h0L051TWVkaWFFeHRyYWN0b3IuaAorKysgYi9tZWRpYS9saWJzdGFnZWZyaWdodC9pbmNsdWRlL21lZGlhL3N0YWdlZnJpZ2h0L051TWVkaWFFeHRyYWN0b3IuaApAQCAtMjAsNiArMjAsNyBAQAogI2luY2x1ZGUgPGxpc3Q+CiAjaW5jbHVkZSA8bWVkaWEvbWVkaWFwbGF5ZXIuaD4KICNpbmNsdWRlIDxtZWRpYS9zdGFnZWZyaWdodC9mb3VuZGF0aW9uL0FCYXNlLmg+CisjaW5jbHVkZSA8bWVkaWEvc3RhZ2VmcmlnaHQvZm91bmRhdGlvbi9BdWRpb1ByZXNlbnRhdGlvbkluZm8uaD4KICNpbmNsdWRlIDxtZWRpYS9JTWVkaWFFeHRyYWN0b3IuaD4KICNpbmNsdWRlIDxtZWRpYS9NZWRpYVNvdXJjZS5oPgogI2luY2x1ZGUgPHV0aWxzL0Vycm9ycy5oPgpAQCAtNjQsOCArNjUsNiBAQAogCiAgICAgc3RhdHVzX3Qgc2V0TWVkaWFDYXMoY29uc3QgSEludGVyZmFjZVRva2VuICZjYXNUb2tlbik7CiAKLSAgICB2b2lkIGRpc2Nvbm5lY3QoKTsKLQogICAgIHNpemVfdCBjb3VudFRyYWNrcygpIGNvbnN0OwogICAgIHN0YXR1c190IGdldFRyYWNrRm9ybWF0KHNpemVfdCBpbmRleCwgc3A8QU1lc3NhZ2U+ICpmb3JtYXQsIHVpbnQzMl90IGZsYWdzID0gMCkgY29uc3Q7CiAKQEAgLTk3LDYgKzk2LDkgQEAKIAogICAgIGJvb2wgZ2V0Q2FjaGVkRHVyYXRpb24oaW50NjRfdCAqZHVyYXRpb25VcywgYm9vbCAqZW9zKSBjb25zdDsKIAorICAgIHN0YXR1c190IGdldEF1ZGlvUHJlc2VudGF0aW9ucyhzaXplX3QgdHJhY2tJZHgsCisgICAgICAgICAgICBBdWRpb1ByZXNlbnRhdGlvbkNvbGxlY3Rpb24gKnByZXNlbnRhdGlvbnMpIGNvbnN0OworCiBwcm90ZWN0ZWQ6CiAgICAgdmlydHVhbCB+TnVNZWRpYUV4dHJhY3RvcigpOwogCmRpZmYgLS1naXQgYS9tZWRpYS9saWJzdGFnZWZyaWdodC9pbmNsdWRlL21lZGlhL3N0YWdlZnJpZ2h0L1JlbW90ZU1lZGlhRXh0cmFjdG9yLmggYi9tZWRpYS9saWJzdGFnZWZyaWdodC9pbmNsdWRlL21lZGlhL3N0YWdlZnJpZ2h0L1JlbW90ZU1lZGlhRXh0cmFjdG9yLmgKaW5kZXggNTA5ZTY2OS4uOTkyNTExNCAxMDA2NDQKLS0tIGEvbWVkaWEvbGlic3RhZ2VmcmlnaHQvaW5jbHVkZS9tZWRpYS9zdGFnZWZyaWdodC9SZW1vdGVNZWRpYUV4dHJhY3Rvci5oCisrKyBiL21lZGlhL2xpYnN0YWdlZnJpZ2h0L2luY2x1ZGUvbWVkaWEvc3RhZ2VmcmlnaHQvUmVtb3RlTWVkaWFFeHRyYWN0b3IuaApAQCAtMTgsNyArMTgsNyBAQAogI2RlZmluZSBSRU1PVEVfTUVESUFfRVhUUkFDVE9SX0hfCiAKICNpbmNsdWRlIDxtZWRpYS9JTWVkaWFFeHRyYWN0b3IuaD4KLSNpbmNsdWRlIDxtZWRpYS9NZWRpYUV4dHJhY3Rvci5oPgorI2luY2x1ZGUgPG1lZGlhL3N0YWdlZnJpZ2h0L01lZGlhRXh0cmFjdG9yLmg+CiAjaW5jbHVkZSA8bWVkaWEvc3RhZ2VmcmlnaHQvZm91bmRhdGlvbi9BQmFzZS5oPgogCiBuYW1lc3BhY2UgYW5kcm9pZCB7CmRpZmYgLS1naXQgYS9tZWRpYS9saWJzdGFnZWZyaWdodC9pbmNsdWRlL21lZGlhL3N0YWdlZnJpZ2h0L1JlbW90ZU1lZGlhU291cmNlLmggYi9tZWRpYS9saWJzdGFnZWZyaWdodC9pbmNsdWRlL21lZGlhL3N0YWdlZnJpZ2h0L1JlbW90ZU1lZGlhU291cmNlLmgKaW5kZXggMWQ3MjBhZi4uMDNkMzg2OSAxMDA2NDQKLS0tIGEvbWVkaWEvbGlic3RhZ2VmcmlnaHQvaW5jbHVkZS9tZWRpYS9zdGFnZWZyaWdodC9SZW1vdGVNZWRpYVNvdXJjZS5oCisrKyBiL21lZGlhL2xpYnN0YWdlZnJpZ2h0L2luY2x1ZGUvbWVkaWEvc3RhZ2VmcmlnaHQvUmVtb3RlTWVkaWFTb3VyY2UuaApAQCAtMzcsMTIgKzM3LDEzIEBACiAgICAgdmlydHVhbCBzdGF0dXNfdCByZWFkKAogICAgICAgICAgICAgTWVkaWFCdWZmZXJCYXNlICoqYnVmZmVyLAogICAgICAgICAgICAgY29uc3QgTWVkaWFTb3VyY2U6OlJlYWRPcHRpb25zICpvcHRpb25zID0gTlVMTCk7CisgICAgdmlydHVhbCBib29sIHN1cHBvcnROb25ibG9ja2luZ1JlYWQoKTsKICAgICB2aXJ0dWFsIHN0YXR1c190IHBhdXNlKCk7CiAgICAgdmlydHVhbCBzdGF0dXNfdCBzZXRTdG9wVGltZVVzKGludDY0X3Qgc3RvcFRpbWVVcyk7CiAKIHByaXZhdGU6CiAgICAgc3A8UmVtb3RlTWVkaWFFeHRyYWN0b3I+IG1FeHRyYWN0b3I7Ci0gICAgTWVkaWFUcmFjayAqbVNvdXJjZTsKKyAgICBNZWRpYVRyYWNrICptVHJhY2s7CiAgICAgc3A8UmVmQmFzZT4gbUV4dHJhY3RvclBsdWdpbjsKIAogICAgIGV4cGxpY2l0IFJlbW90ZU1lZGlhU291cmNlKApkaWZmIC0tZ2l0IGEvbWVkaWEvbGlic3RhZ2VmcmlnaHQvaW5jbHVkZS9tZWRpYS9zdGFnZWZyaWdodC9VdGlscy5oIGIvbWVkaWEvbGlic3RhZ2VmcmlnaHQvaW5jbHVkZS9tZWRpYS9zdGFnZWZyaWdodC9VdGlscy5oCmluZGV4IDZhMjhlMGIuLmU4ZTBhMTEgMTAwNjQ0Ci0tLSBhL21lZGlhL2xpYnN0YWdlZnJpZ2h0L2luY2x1ZGUvbWVkaWEvc3RhZ2VmcmlnaHQvVXRpbHMuaAorKysgYi9tZWRpYS9saWJzdGFnZWZyaWdodC9pbmNsdWRlL21lZGlhL3N0YWdlZnJpZ2h0L1V0aWxzLmgKQEAgLTMwLDYgKzMwLDggQEAKIAogc3RydWN0IEFNZXNzYWdlOwogc3RhdHVzX3QgY29udmVydE1ldGFEYXRhVG9NZXNzYWdlKAorICAgICAgICBjb25zdCBNZXRhRGF0YUJhc2UgKm1ldGEsIHNwPEFNZXNzYWdlPiAqZm9ybWF0KTsKK3N0YXR1c190IGNvbnZlcnRNZXRhRGF0YVRvTWVzc2FnZSgKICAgICAgICAgY29uc3Qgc3A8TWV0YURhdGE+ICZtZXRhLCBzcDxBTWVzc2FnZT4gKmZvcm1hdCk7CiB2b2lkIGNvbnZlcnRNZXNzYWdlVG9NZXRhRGF0YSgKICAgICAgICAgY29uc3Qgc3A8QU1lc3NhZ2U+ICZmb3JtYXQsIHNwPE1ldGFEYXRhPiAmbWV0YSk7CkBAIC01MCw2ICs1MiwxMCBAQAogLy8gU2VuZCBpbmZvcm1hdGlvbiBmcm9tIE1ldGFEYXRhIHRvIHRoZSBIQUwgdmlhIEF1ZGlvU2luawogc3RhdHVzX3Qgc2VuZE1ldGFEYXRhVG9IYWwoc3A8TWVkaWFQbGF5ZXJCYXNlOjpBdWRpb1Npbms+JiBzaW5rLCBjb25zdCBzcDxNZXRhRGF0YT4mIG1ldGEpOwogCisvLyBSZXR1cm4gfGF1ZGlvX29mZmxvYWRfaW5mb190fCBmaWxsZWQgZnJvbSBnaXZlbiBtZXRhZGF0YQorc3RhdHVzX3QgZ2V0QXVkaW9PZmZsb2FkSW5mbyhjb25zdCBzcDxNZXRhRGF0YT4mIG1ldGEsIGJvb2wgaGFzVmlkZW8sCisgICAgICAgIGJvb2wgaXNTdHJlYW1pbmcsIGF1ZGlvX3N0cmVhbV90eXBlX3Qgc3RyZWFtVHlwZSwgYXVkaW9fb2ZmbG9hZF9pbmZvX3QgKmluZm8pOworCiAvLyBDaGVjayB3aGV0aGVyIHRoZSBzdHJlYW0gZGVmaW5lZCBieSBtZXRhIGNhbiBiZSBvZmZsb2FkZWQgdG8gaGFyZHdhcmUKIGJvb2wgY2FuT2ZmbG9hZFN0cmVhbShjb25zdCBzcDxNZXRhRGF0YT4mIG1ldGEsIGJvb2wgaGFzVmlkZW8sCiAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBpc1N0cmVhbWluZywgYXVkaW9fc3RyZWFtX3R5cGVfdCBzdHJlYW1UeXBlKTsKZGlmZiAtLWdpdCBhL21lZGlhL2xpYnN0YWdlZnJpZ2h0L21wZWcydHMvQVRTUGFyc2VyLmNwcCBiL21lZGlhL2xpYnN0YWdlZnJpZ2h0L21wZWcydHMvQVRTUGFyc2VyLmNwcAppbmRleCA1Y2M1MDkzLi5jZjkzZmNmIDEwMDY0NAotLS0gYS9tZWRpYS9saWJzdGFnZWZyaWdodC9tcGVnMnRzL0FUU1BhcnNlci5jcHAKKysrIGIvbWVkaWEvbGlic3RhZ2VmcmlnaHQvbXBlZzJ0cy9BVFNQYXJzZXIuY3BwCkBAIC0xMTcsMTEgKzExNyw2IEBACiAgICAgdm9pZCBzaWduYWxOZXdTYW1wbGVBZXNLZXkoY29uc3Qgc3A8QU1lc3NhZ2U+ICZrZXlJdGVtKTsKIAogcHJpdmF0ZToKLSAgICBzdHJ1Y3QgU3RyZWFtSW5mbyB7Ci0gICAgICAgIHVuc2lnbmVkIG1UeXBlOwotICAgICAgICB1bnNpZ25lZCBtUElEOwotICAgICAgICBpbnQzMl90IG1DQVN5c3RlbUlkOwotICAgIH07CiAKICAgICBBVFNQYXJzZXIgKm1QYXJzZXI7CiAgICAgdW5zaWduZWQgbVByb2dyYW1OdW1iZXI7CkBAIC0xNDIsMTMgKzEzNywxMCBAQAogfTsKIAogc3RydWN0IEFUU1BhcnNlcjo6U3RyZWFtIDogcHVibGljIFJlZkJhc2UgewotICAgIFN0cmVhbShQcm9ncmFtICpwcm9ncmFtLAotICAgICAgICAgICB1bnNpZ25lZCBlbGVtZW50YXJ5UElELAotICAgICAgICAgICB1bnNpZ25lZCBzdHJlYW1UeXBlLAotICAgICAgICAgICB1bnNpZ25lZCBQQ1JfUElELAotICAgICAgICAgICBpbnQzMl90IENBX3N5c3RlbV9JRCk7CisgICAgU3RyZWFtKFByb2dyYW0gKnByb2dyYW0sIHVuc2lnbmVkIFBDUl9QSUQsIGNvbnN0IFN0cmVhbUluZm8gJmluZm8pOwogCiAgICAgdW5zaWduZWQgdHlwZSgpIGNvbnN0IHsgcmV0dXJuIG1TdHJlYW1UeXBlOyB9CisgICAgdW5zaWduZWQgdHlwZUV4dCgpIGNvbnN0IHsgcmV0dXJuIG1TdHJlYW1UeXBlRXh0OyB9CiAgICAgdW5zaWduZWQgcGlkKCkgY29uc3QgeyByZXR1cm4gbUVsZW1lbnRhcnlQSUQ7IH0KICAgICB2b2lkIHNldFBJRCh1bnNpZ25lZCBwaWQpIHsgbUVsZW1lbnRhcnlQSUQgPSBwaWQ7IH0KIApAQCAtMTk0LDYgKzE4Niw3IEBACiAgICAgUHJvZ3JhbSAqbVByb2dyYW07CiAgICAgdW5zaWduZWQgbUVsZW1lbnRhcnlQSUQ7CiAgICAgdW5zaWduZWQgbVN0cmVhbVR5cGU7CisgICAgdW5zaWduZWQgbVN0cmVhbVR5cGVFeHQ7CiAgICAgdW5zaWduZWQgbVBDUl9QSUQ7CiAgICAgaW50MzJfdCBtRXhwZWN0ZWRDb250aW51aXR5Q291bnRlcjsKIApAQCAtMjE3LDYgKzIxMCw3IEBACiAgICAgc3A8QUJ1ZmZlcj4gbURlc2NyYW1ibGVkQnVmZmVyOwogICAgIExpc3Q8U3ViU2FtcGxlSW5mbz4gbVN1YlNhbXBsZXM7CiAgICAgc3A8SURlc2NyYW1ibGVyPiBtRGVzY3JhbWJsZXI7CisgICAgQXVkaW9QcmVzZW50YXRpb25Db2xsZWN0aW9uIG1BdWRpb1ByZXNlbnRhdGlvbnM7CiAKICAgICAvLyBGbHVzaCBhY2N1bXVsYXRlZCBwYXlsb2FkIGlmIG5lY2Vzc2FyeSAtLS0gaS5lLiBhdCBFT1Mgb3IgYXQgdGhlIHN0YXJ0IG9mCiAgICAgLy8gYW5vdGhlciBwYXlsb2FkLiBldmVudCBpcyBzZXQgaWYgdGhlIGZsdXNoZWQgcGF5bG9hZCBpcyBQRVMgd2l0aCBhIHN5bmMKQEAgLTQ0Nyw3ICs0NDEsNyBAQAogICAgICAgICBpZiAoZGVzY3JpcHRvcl9sZW5ndGggPiBpbmZvTGVuZ3RoKSB7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQotICAgICAgICBpZiAoZGVzY3JpcHRvcl90YWcgPT0gOSAmJiBkZXNjcmlwdG9yX2xlbmd0aCA+PSA0KSB7CisgICAgICAgIGlmIChkZXNjcmlwdG9yX3RhZyA9PSBERVNDUklQVE9SX0NBICYmIGRlc2NyaXB0b3JfbGVuZ3RoID49IDQpIHsKICAgICAgICAgICAgIGZvdW5kID0gdHJ1ZTsKICAgICAgICAgICAgIGNhRGVzY3JpcHRvci0+bVN5c3RlbUlEID0gYnItPmdldEJpdHMoMTYpOwogICAgICAgICAgICAgY2FEZXNjcmlwdG9yLT5tUElEID0gYnItPmdldEJpdHMoMTYpICYgMHgxZmZmOwpAQCAtNTEzLDM3ICs1MDcsMTU1IEBACiAgICAgLy8gaW5mb0J5dGVzUmVtYWluaW5nIGlzIHRoZSBudW1iZXIgb2YgYnl0ZXMgdGhhdCBtYWtlIHVwIHRoZQogICAgIC8vIHZhcmlhYmxlIGxlbmd0aCBzZWN0aW9uIG9mIEVTX2luZm9zLiBJdCBkb2VzIG5vdCBpbmNsdWRlIHRoZQogICAgIC8vIGZpbmFsIENSQy4KLSAgICBzaXplX3QgaW5mb0J5dGVzUmVtYWluaW5nID0gc2VjdGlvbl9sZW5ndGggLSA5IC0gcHJvZ3JhbV9pbmZvX2xlbmd0aCAtIDQ7CisgICAgaW50MzJfdCBpbmZvQnl0ZXNSZW1haW5pbmcgPSBzZWN0aW9uX2xlbmd0aCAtIDkgLSBwcm9ncmFtX2luZm9fbGVuZ3RoIC0gNDsKIAogICAgIHdoaWxlIChpbmZvQnl0ZXNSZW1haW5pbmcgPj0gNSkgewotCi0gICAgICAgIHVuc2lnbmVkIHN0cmVhbVR5cGUgPSBici0+Z2V0Qml0cyg4KTsKLSAgICAgICAgQUxPR1YoIiAgICBzdHJlYW1fdHlwZSA9IDB4JTAyeCIsIHN0cmVhbVR5cGUpOwotCisgICAgICAgIFN0cmVhbUluZm8gaW5mbzsKKyAgICAgICAgaW5mby5tVHlwZSA9IGJyLT5nZXRCaXRzKDgpOworICAgICAgICBBTE9HVigiICAgIHN0cmVhbV90eXBlID0gMHglMDJ4IiwgaW5mby5tVHlwZSk7CiAgICAgICAgIE1ZX0xPR1YoIiAgICByZXNlcnZlZCA9ICV1IiwgYnItPmdldEJpdHMoMykpOwogCi0gICAgICAgIHVuc2lnbmVkIGVsZW1lbnRhcnlQSUQgPSBici0+Z2V0Qml0cygxMyk7Ci0gICAgICAgIEFMT0dWKCIgICAgZWxlbWVudGFyeV9QSUQgPSAweCUwNHgiLCBlbGVtZW50YXJ5UElEKTsKKyAgICAgICAgaW5mby5tUElEID0gYnItPmdldEJpdHMoMTMpOworICAgICAgICBBTE9HVigiICAgIGVsZW1lbnRhcnlfUElEID0gMHglMDR4IiwgaW5mby5tUElEKTsKIAogICAgICAgICBNWV9MT0dWKCIgICAgcmVzZXJ2ZWQgPSAldSIsIGJyLT5nZXRCaXRzKDQpKTsKIAogICAgICAgICB1bnNpZ25lZCBFU19pbmZvX2xlbmd0aCA9IGJyLT5nZXRCaXRzKDEyKTsKICAgICAgICAgQUxPR1YoIiAgICBFU19pbmZvX2xlbmd0aCA9ICV1IiwgRVNfaW5mb19sZW5ndGgpOworICAgICAgICBpbmZvQnl0ZXNSZW1haW5pbmcgLT0gNSArIEVTX2luZm9fbGVuZ3RoOwogCiAgICAgICAgIENBRGVzY3JpcHRvciBzdHJlYW1DQTsKLSAgICAgICAgYm9vbCBoYXNTdHJlYW1DQSA9IGZpbmRDQURlc2NyaXB0b3IoYnIsIEVTX2luZm9fbGVuZ3RoLCAmc3RyZWFtQ0EpOworICAgICAgICBpbmZvLm1UeXBlRXh0ID0gRVhUX0RFU0NSSVBUT1JfRFZCX1JFU0VSVkVEX01BWDsKKworICAgICAgICBpbmZvLm1BdWRpb1ByZXNlbnRhdGlvbnMuY2xlYXIoKTsKKyAgICAgICAgYm9vbCBoYXNTdHJlYW1DQSA9IGZhbHNlOworICAgICAgICB3aGlsZSAoRVNfaW5mb19sZW5ndGggPiAyICYmIGluZm9CeXRlc1JlbWFpbmluZyA+PSAwKSB7CisgICAgICAgICAgICB1bnNpZ25lZCBkZXNjcmlwdG9yX3RhZyA9IGJyLT5nZXRCaXRzKDgpOworICAgICAgICAgICAgQUxPR1YoIiAgICAgIHRhZyA9IDB4JTAyeCIsIGRlc2NyaXB0b3JfdGFnKTsKKworICAgICAgICAgICAgdW5zaWduZWQgZGVzY3JpcHRvcl9sZW5ndGggPSBici0+Z2V0Qml0cyg4KTsKKyAgICAgICAgICAgIEFMT0dWKCIgICAgICBsZW4gPSAldSIsIGRlc2NyaXB0b3JfbGVuZ3RoKTsKKworICAgICAgICAgICAgRVNfaW5mb19sZW5ndGggLT0gMjsKKyAgICAgICAgICAgIGlmIChkZXNjcmlwdG9yX2xlbmd0aCA+IEVTX2luZm9fbGVuZ3RoKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIEVSUk9SX01BTEZPUk1FRDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChkZXNjcmlwdG9yX3RhZyA9PSBERVNDUklQVE9SX0NBICYmIGRlc2NyaXB0b3JfbGVuZ3RoID49IDQpIHsKKyAgICAgICAgICAgICAgICBoYXNTdHJlYW1DQSA9IHRydWU7CisgICAgICAgICAgICAgICAgc3RyZWFtQ0EubVN5c3RlbUlEID0gYnItPmdldEJpdHMoMTYpOworICAgICAgICAgICAgICAgIHN0cmVhbUNBLm1QSUQgPSBici0+Z2V0Qml0cygxNikgJiAweDFmZmY7CisgICAgICAgICAgICAgICAgRVNfaW5mb19sZW5ndGggLT0gZGVzY3JpcHRvcl9sZW5ndGg7CisgICAgICAgICAgICAgICAgZGVzY3JpcHRvcl9sZW5ndGggLT0gNDsKKyAgICAgICAgICAgICAgICBzdHJlYW1DQS5tUHJpdmF0ZURhdGEuYXNzaWduKGJyLT5kYXRhKCksIGJyLT5kYXRhKCkgKyBkZXNjcmlwdG9yX2xlbmd0aCk7CisgICAgICAgICAgICAgICAgYnItPnNraXBCaXRzKGRlc2NyaXB0b3JfbGVuZ3RoICogOCk7CisgICAgICAgICAgICB9IGVsc2UgaWYgKGluZm8ubVR5cGUgPT0gU1RSRUFNVFlQRV9QRVNfUFJJVkFURV9EQVRBICYmCisgICAgICAgICAgICAgICAgICAgICAgIGRlc2NyaXB0b3JfdGFnID09IERFU0NSSVBUT1JfRFZCX0VYVEVOU0lPTiAmJiBkZXNjcmlwdG9yX2xlbmd0aCA+PSAxKSB7CisgICAgICAgICAgICAgICAgdW5zaWduZWQgZGVzY1RhZ0V4dCA9IGJyLT5nZXRCaXRzKDgpOworICAgICAgICAgICAgICAgIEFMT0dWKCIgICAgICB0YWdfZXh0ID0gMHglMDJ4IiwgZGVzY1RhZ0V4dCk7CisgICAgICAgICAgICAgICAgRVNfaW5mb19sZW5ndGggLT0gZGVzY3JpcHRvcl9sZW5ndGg7CisgICAgICAgICAgICAgICAgZGVzY3JpcHRvcl9sZW5ndGgtLTsKKyAgICAgICAgICAgICAgICAvLyBUaGUgQUM0IGRlc2NyaXB0b3IgaXMgdXNlZCBpbiB0aGUgUFNJIFBNVCB0byBpZGVudGlmeSBzdHJlYW1zIHdoaWNoIGNhcnJ5IEFDNAorICAgICAgICAgICAgICAgIC8vIGF1ZGlvLgorICAgICAgICAgICAgICAgIGlmIChkZXNjVGFnRXh0ID09IEVYVF9ERVNDUklQVE9SX0RWQl9BQzQpIHsKKyAgICAgICAgICAgICAgICAgICAgaW5mby5tVHlwZUV4dCA9IEVYVF9ERVNDUklQVE9SX0RWQl9BQzQ7CisgICAgICAgICAgICAgICAgICAgIGJyLT5za2lwQml0cyhkZXNjcmlwdG9yX2xlbmd0aCAqIDgpOworICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoZGVzY1RhZ0V4dCA9PSBFWFRfREVTQ1JJUFRPUl9EVkJfQVVESU9fUFJFU0VMRUNUSU9OICYmCisgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXNjcmlwdG9yX2xlbmd0aCA+PSAxKSB7CisgICAgICAgICAgICAgICAgICAgIC8vIERWQiBCbHVlQm9vayBBMDM4IFRhYmxlIDExMAorICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBudW1fcHJlc2VsZWN0aW9ucyA9IGJyLT5nZXRCaXRzKDUpOworICAgICAgICAgICAgICAgICAgICBici0+c2tpcEJpdHMoMyk7ICAvLyByZXNlcnZlZAorICAgICAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbnVtX3ByZXNlbGVjdGlvbnM7ICsraSkgeworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGJyLT5udW1CaXRzTGVmdCgpIDwgMTYpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBBTE9HRSgiTm90IGVub3VnaCBkYXRhIGxlZnQgaW4gYml0cmVhZGVyISIpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBFUlJPUl9NQUxGT1JNRUQ7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICBBdWRpb1ByZXNlbnRhdGlvblYxIGFwOworICAgICAgICAgICAgICAgICAgICAgICAgYXAubVByZXNlbnRhdGlvbklkID0gYnItPmdldEJpdHMoNSk7ICAvLyBwcmVzZWxlY3Rpb25faWQKKworICAgICAgICAgICAgICAgICAgICAgICAgLy8gYXVkaW9fcmVuZGVyaW5nX2luZGljYXRpb24KKyAgICAgICAgICAgICAgICAgICAgICAgIGFwLm1NYXN0ZXJpbmdJbmRpY2F0aW9uID0gc3RhdGljX2Nhc3Q8TWFzdGVyaW5nSW5kaWNhdGlvbj4oYnItPmdldEJpdHMoMykpOworICAgICAgICAgICAgICAgICAgICAgICAgYXAubUF1ZGlvRGVzY3JpcHRpb25BdmFpbGFibGUgPSAoYnItPmdldEJpdHMoMSkgPT0gMSk7CisgICAgICAgICAgICAgICAgICAgICAgICBhcC5tU3Bva2VuU3VidGl0bGVzQXZhaWxhYmxlID0gKGJyLT5nZXRCaXRzKDEpID09IDEpOworICAgICAgICAgICAgICAgICAgICAgICAgYXAubURpYWxvZ3VlRW5oYW5jZW1lbnRBdmFpbGFibGUgPSAoYnItPmdldEJpdHMoMSkgPT0gMSk7CisKKyAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgaW50ZXJhY3Rpdml0eV9lbmFibGVkID0gKGJyLT5nZXRCaXRzKDEpID09IDEpOworICAgICAgICAgICAgICAgICAgICAgICAgTVlfTE9HVigiICAgICAgaW50ZXJhY3Rpdml0eV9lbmFibGVkID0gJWQiLCBpbnRlcmFjdGl2aXR5X2VuYWJsZWQpOworCisgICAgICAgICAgICAgICAgICAgICAgICBib29sIGxhbmd1YWdlX2NvZGVfcHJlc2VudCA9IChici0+Z2V0Qml0cygxKSA9PSAxKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgdGV4dF9sYWJlbF9wcmVzZW50ID0gKGJyLT5nZXRCaXRzKDEpID09IDEpOworCisgICAgICAgICAgICAgICAgICAgICAgICBib29sIG11bHRpX3N0cmVhbV9pbmZvX3ByZXNlbnQgPSAoYnItPmdldEJpdHMoMSkgPT0gMSk7CisgICAgICAgICAgICAgICAgICAgICAgICBib29sIGZ1dHVyZV9leHRlbnNpb24gPSAoYnItPmdldEJpdHMoMSkgPT0gMSk7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAobGFuZ3VhZ2VfY29kZV9wcmVzZW50KSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGJyLT5udW1CaXRzTGVmdCgpIDwgMjQpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQUxPR0UoIk5vdCBlbm91Z2ggZGF0YSBsZWZ0IGluIGJpdHJlYWRlciEiKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEVSUk9SX01BTEZPUk1FRDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciBsYW5ndWFnZVs0XTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBsYW5ndWFnZVswXSA9IGJyLT5nZXRCaXRzKDgpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxhbmd1YWdlWzFdID0gYnItPmdldEJpdHMoOCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGFuZ3VhZ2VbMl0gPSBici0+Z2V0Qml0cyg4KTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBsYW5ndWFnZVszXSA9IDA7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXAubUxhbmd1YWdlID0gU3RyaW5nOChsYW5ndWFnZSk7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIFRoaXMgbWFwcyB0aGUgcHJlc2VudGF0aW9uIGlkIHRvIHRoZSBtZXNzYWdlIGlkIGluIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgLy8gRVhUX0RFU0NSSVBUT1JfRFZCX01FU1NBR0Ugc28gdGhhdCB3ZSBjYW4gZ2V0IHRoZSBwcmVzZW50YXRpb24gbGFiZWwuCisgICAgICAgICAgICAgICAgICAgICAgICBpZiAodGV4dF9sYWJlbF9wcmVzZW50KSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGJyLT5udW1CaXRzTGVmdCgpIDwgOCkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBTE9HRSgiTm90IGVub3VnaCBkYXRhIGxlZnQgaW4gYml0cmVhZGVyISIpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gRVJST1JfTUFMRk9STUVEOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBtZXNzYWdlX2lkID0gYnItPmdldEJpdHMoOCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgTVlfTE9HVigiICAgICAgbWVzc2FnZV9pZCA9ICV1IiwgbWVzc2FnZV9pZCk7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtdWx0aV9zdHJlYW1faW5mb19wcmVzZW50KSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGJyLT5udW1CaXRzTGVmdCgpIDwgOCkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBTE9HRSgiTm90IGVub3VnaCBkYXRhIGxlZnQgaW4gYml0cmVhZGVyISIpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gRVJST1JfTUFMRk9STUVEOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBudW1fYXV4X2NvbXBvbmVudHMgPSBici0+Z2V0Qml0cygzKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBici0+c2tpcEJpdHMoNSk7ICAvLyByZXNlcnZlZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChici0+bnVtQml0c0xlZnQoKSA8IChudW1fYXV4X2NvbXBvbmVudHMgKiA4KSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBTE9HRSgiTm90IGVub3VnaCBkYXRhIGxlZnQgaW4gYml0cmVhZGVyISIpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gRVJST1JfTUFMRk9STUVEOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBici0+c2tpcEJpdHMobnVtX2F1eF9jb21wb25lbnRzICogOCk7ICAvLyBjb21wb25lbnRfdGFnCisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZnV0dXJlX2V4dGVuc2lvbikgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChici0+bnVtQml0c0xlZnQoKSA8IDgpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEVSUk9SX01BTEZPUk1FRDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnItPnNraXBCaXRzKDMpOyAgLy8gcmVzZXJ2ZWQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBmdXR1cmVfZXh0ZW5zaW9uX2xlbmd0aCA9IGJyLT5nZXRCaXRzKDUpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChici0+bnVtQml0c0xlZnQoKSA8IChmdXR1cmVfZXh0ZW5zaW9uX2xlbmd0aCAqIDgpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFMT0dFKCJOb3QgZW5vdWdoIGRhdGEgbGVmdCBpbiBiaXRyZWFkZXIhIik7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBFUlJPUl9NQUxGT1JNRUQ7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyLT5za2lwQml0cyhmdXR1cmVfZXh0ZW5zaW9uX2xlbmd0aCAqIDgpOyAgLy8gZnV0dXJlX2V4dGVuc2lvbl9ieXRlCisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICBpbmZvLm1BdWRpb1ByZXNlbnRhdGlvbnMucHVzaF9iYWNrKHN0ZDo6bW92ZShhcCkpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgYnItPnNraXBCaXRzKGRlc2NyaXB0b3JfbGVuZ3RoICogOCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBFU19pbmZvX2xlbmd0aCAtPSBkZXNjcmlwdG9yX2xlbmd0aDsKKyAgICAgICAgICAgICAgICBici0+c2tpcEJpdHMoZGVzY3JpcHRvcl9sZW5ndGggKiA4KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQogICAgICAgICBpZiAoaGFzU3RyZWFtQ0EgJiYgIW1QYXJzZXItPm1DYXNNYW5hZ2VyLT5hZGRTdHJlYW0oCi0gICAgICAgICAgICAgICAgbVByb2dyYW1OdW1iZXIsIGVsZW1lbnRhcnlQSUQsIHN0cmVhbUNBKSkgeworICAgICAgICAgICAgICAgIG1Qcm9ncmFtTnVtYmVyLCBpbmZvLm1QSUQsIHN0cmVhbUNBKSkgewogICAgICAgICAgICAgcmV0dXJuIEVSUk9SX01BTEZPUk1FRDsKICAgICAgICAgfQotICAgICAgICBTdHJlYW1JbmZvIGluZm87Ci0gICAgICAgIGluZm8ubVR5cGUgPSBzdHJlYW1UeXBlOwotICAgICAgICBpbmZvLm1QSUQgPSBlbGVtZW50YXJ5UElEOwotICAgICAgICBpbmZvLm1DQVN5c3RlbUlkID0gaGFzUHJvZ3JhbUNBID8gcHJvZ3JhbUNBLm1TeXN0ZW1JRCA6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICBoYXNTdHJlYW1DQSA/IHN0cmVhbUNBLm1TeXN0ZW1JRCAgOiAtMTsKLSAgICAgICAgaW5mb3MucHVzaChpbmZvKTsKKyAgICAgICAgaWYgKGhhc1Byb2dyYW1DQSkgeworICAgICAgICAgICAgaW5mby5tQ0FEZXNjcmlwdG9yID0gcHJvZ3JhbUNBOworICAgICAgICB9IGVsc2UgaWYgKGhhc1N0cmVhbUNBKSB7CisgICAgICAgICAgICBpbmZvLm1DQURlc2NyaXB0b3IgPSBzdHJlYW1DQTsKKyAgICAgICAgfQogCi0gICAgICAgIGluZm9CeXRlc1JlbWFpbmluZyAtPSA1ICsgRVNfaW5mb19sZW5ndGg7CisgICAgICAgIGluZm9zLnB1c2goaW5mbyk7CiAgICAgfQogCiAgICAgaWYgKGluZm9CeXRlc1JlbWFpbmluZyAhPSAwKSB7CkBAIC02MDEsMTQgKzcxMywxMyBAQAogICAgICAgICBzc2l6ZV90IGluZGV4ID0gbVN0cmVhbXMuaW5kZXhPZktleShpbmZvLm1QSUQpOwogCiAgICAgICAgIGlmIChpbmRleCA8IDApIHsKLSAgICAgICAgICAgIHNwPFN0cmVhbT4gc3RyZWFtID0gbmV3IFN0cmVhbSgKLSAgICAgICAgICAgICAgICAgICAgdGhpcywgaW5mby5tUElELCBpbmZvLm1UeXBlLCBQQ1JfUElELCBpbmZvLm1DQVN5c3RlbUlkKTsKKyAgICAgICAgICAgIHNwPFN0cmVhbT4gc3RyZWFtID0gbmV3IFN0cmVhbSh0aGlzLCBQQ1JfUElELCBpbmZvKTsKIAogICAgICAgICAgICAgaWYgKG1TYW1wbGVBZXNLZXlJdGVtICE9IE5VTEwpIHsKICAgICAgICAgICAgICAgICBzdHJlYW0tPnNpZ25hbE5ld1NhbXBsZUFlc0tleShtU2FtcGxlQWVzS2V5SXRlbSk7CiAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgIGlzQWRkaW5nU2NyYW1ibGVkU3RyZWFtIHw9IGluZm8ubUNBU3lzdGVtSWQgPj0gMDsKKyAgICAgICAgICAgIGlzQWRkaW5nU2NyYW1ibGVkU3RyZWFtIHw9IGluZm8ubUNBRGVzY3JpcHRvci5tU3lzdGVtSUQgPj0gMDsKICAgICAgICAgICAgIG1TdHJlYW1zLmFkZChpbmZvLm1QSUQsIHN0cmVhbSk7CiAgICAgICAgIH0KICAgICB9CkBAIC03MTcsMzQgKzgyOCwzMyBAQAogc3RhdGljIGNvbnN0IHNpemVfdCBrSW5pdGlhbFN0cmVhbUJ1ZmZlclNpemUgPSAxOTIgKiAxMDI0OwogCiBBVFNQYXJzZXI6OlN0cmVhbTo6U3RyZWFtKAotICAgICAgICBQcm9ncmFtICpwcm9ncmFtLAotICAgICAgICB1bnNpZ25lZCBlbGVtZW50YXJ5UElELAotICAgICAgICB1bnNpZ25lZCBzdHJlYW1UeXBlLAotICAgICAgICB1bnNpZ25lZCBQQ1JfUElELAotICAgICAgICBpbnQzMl90IENBX3N5c3RlbV9JRCkKKyAgICAgICAgUHJvZ3JhbSAqcHJvZ3JhbSwgdW5zaWduZWQgUENSX1BJRCwgY29uc3QgU3RyZWFtSW5mbyAmaW5mbykKICAgICA6IG1Qcm9ncmFtKHByb2dyYW0pLAotICAgICAgbUVsZW1lbnRhcnlQSUQoZWxlbWVudGFyeVBJRCksCi0gICAgICBtU3RyZWFtVHlwZShzdHJlYW1UeXBlKSwKKyAgICAgIG1FbGVtZW50YXJ5UElEKGluZm8ubVBJRCksCisgICAgICBtU3RyZWFtVHlwZShpbmZvLm1UeXBlKSwKKyAgICAgIG1TdHJlYW1UeXBlRXh0KGluZm8ubVR5cGVFeHQpLAogICAgICAgbVBDUl9QSUQoUENSX1BJRCksCiAgICAgICBtRXhwZWN0ZWRDb250aW51aXR5Q291bnRlcigtMSksCiAgICAgICBtUGF5bG9hZFN0YXJ0ZWQoZmFsc2UpLAogICAgICAgbUVPU1JlYWNoZWQoZmFsc2UpLAogICAgICAgbVByZXZQVFMoMCksCiAgICAgICBtUXVldWUoTlVMTCksCi0gICAgICBtU2NyYW1ibGVkKENBX3N5c3RlbV9JRCA+PSAwKSB7Ci0KKyAgICAgIG1TY3JhbWJsZWQoaW5mby5tQ0FEZXNjcmlwdG9yLm1TeXN0ZW1JRCA+PSAwKSwKKyAgICAgIG1BdWRpb1ByZXNlbnRhdGlvbnMoaW5mby5tQXVkaW9QcmVzZW50YXRpb25zKSB7CiAgICAgbVNhbXBsZUVuY3J5cHRlZCA9CiAgICAgICAgICAgICBtU3RyZWFtVHlwZSA9PSBTVFJFQU1UWVBFX0gyNjRfRU5DUllQVEVEIHx8CiAgICAgICAgICAgICBtU3RyZWFtVHlwZSA9PSBTVFJFQU1UWVBFX0FBQ19FTkNSWVBURUQgIHx8CiAgICAgICAgICAgICBtU3RyZWFtVHlwZSA9PSBTVFJFQU1UWVBFX0FDM19FTkNSWVBURUQ7CiAKICAgICBBTE9HVigibmV3IHN0cmVhbSBQSUQgMHglMDJ4LCB0eXBlIDB4JTAyeCwgc2NyYW1ibGVkICVkLCBTYW1wbGVFbmNyeXB0ZWQ6ICVkIiwKLSAgICAgICAgICAgIGVsZW1lbnRhcnlQSUQsIHN0cmVhbVR5cGUsIG1TY3JhbWJsZWQsIG1TYW1wbGVFbmNyeXB0ZWQpOworICAgICAgICAgICAgaW5mby5tUElELCBpbmZvLm1UeXBlLCBtU2NyYW1ibGVkLCBtU2FtcGxlRW5jcnlwdGVkKTsKIAotICAgIHVpbnQzMl90IGZsYWdzID0KLSAgICAgICAgICAgIChpc1ZpZGVvKCkgJiYgbVNjcmFtYmxlZCkgPyBFbGVtZW50YXJ5U3RyZWFtUXVldWU6OmtGbGFnX1NjcmFtYmxlZERhdGEgOgotICAgICAgICAgICAgKG1TYW1wbGVFbmNyeXB0ZWQpID8gRWxlbWVudGFyeVN0cmVhbVF1ZXVlOjprRmxhZ19TYW1wbGVFbmNyeXB0ZWREYXRhIDoKLSAgICAgICAgICAgIDA7CisgICAgdWludDMyX3QgZmxhZ3MgPSAwOworICAgIGlmICgoKGlzVmlkZW8oKSB8fCBpc0F1ZGlvKCkpICYmIG1TY3JhbWJsZWQpKSB7CisgICAgICAgIGZsYWdzID0gRWxlbWVudGFyeVN0cmVhbVF1ZXVlOjprRmxhZ19TY3JhbWJsZWREYXRhOworICAgIH0gZWxzZSBpZiAobVNhbXBsZUVuY3J5cHRlZCkgeworICAgICAgICBmbGFncyA9IEVsZW1lbnRhcnlTdHJlYW1RdWV1ZTo6a0ZsYWdfU2FtcGxlRW5jcnlwdGVkRGF0YTsKKyAgICB9CiAKICAgICBFbGVtZW50YXJ5U3RyZWFtUXVldWU6Ok1vZGUgbW9kZSA9IEVsZW1lbnRhcnlTdHJlYW1RdWV1ZTo6SU5WQUxJRDsKIApAQCAtNzgxLDEzICs4OTEsMjMgQEAKICAgICAgICAgICAgIG1vZGUgPSBFbGVtZW50YXJ5U3RyZWFtUXVldWU6OkFDMzsKICAgICAgICAgICAgIGJyZWFrOwogCisgICAgICAgIGNhc2UgU1RSRUFNVFlQRV9FQUMzOgorICAgICAgICAgICAgbW9kZSA9IEVsZW1lbnRhcnlTdHJlYW1RdWV1ZTo6RUFDMzsKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2UgU1RSRUFNVFlQRV9QRVNfUFJJVkFURV9EQVRBOgorICAgICAgICAgICAgaWYgKG1TdHJlYW1UeXBlRXh0ID09IEVYVF9ERVNDUklQVE9SX0RWQl9BQzQpIHsKKyAgICAgICAgICAgICAgICBtb2RlID0gRWxlbWVudGFyeVN0cmVhbVF1ZXVlOjpBQzQ7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBicmVhazsKKwogICAgICAgICBjYXNlIFNUUkVBTVRZUEVfTUVUQURBVEE6CiAgICAgICAgICAgICBtb2RlID0gRWxlbWVudGFyeVN0cmVhbVF1ZXVlOjpNRVRBREFUQTsKICAgICAgICAgICAgIGJyZWFrOwogCiAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICBBTE9HRSgic3RyZWFtIFBJRCAweCUwMnggaGFzIGludmFsaWQgc3RyZWFtIHR5cGUgMHglMDJ4IiwKLSAgICAgICAgICAgICAgICAgICAgZWxlbWVudGFyeVBJRCwgc3RyZWFtVHlwZSk7CisgICAgICAgICAgICAgICAgICAgIGluZm8ubVBJRCwgaW5mby5tVHlwZSk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgfQogCkBAIC04MDcsNyArOTI3LDEzIEBACiAgICAgICAgICAgICAgICAgICAgIGlzQXVkaW8oKSA/IE1FRElBX01JTUVUWVBFX0FVRElPX1NDUkFNQkxFRAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBNRURJQV9NSU1FVFlQRV9WSURFT19TQ1JBTUJMRUQpOwogICAgICAgICAgICAgLy8gZm9yIE1lZGlhRXh0cmFjdG9yLkNhc0luZm8KLSAgICAgICAgICAgIG1ldGEtPnNldEludDMyKGtLZXlDQVN5c3RlbUlELCBDQV9zeXN0ZW1fSUQpOworICAgICAgICAgICAgY29uc3QgQ0FEZXNjcmlwdG9yICZkZXNjcmlwdG9yID0gaW5mby5tQ0FEZXNjcmlwdG9yOworICAgICAgICAgICAgbWV0YS0+c2V0SW50MzIoa0tleUNBU3lzdGVtSUQsIGRlc2NyaXB0b3IubVN5c3RlbUlEKTsKKworICAgICAgICAgICAgbWV0YS0+c2V0RGF0YShrS2V5Q0FQcml2YXRlRGF0YSwgMCwKKyAgICAgICAgICAgICAgICAgICAgZGVzY3JpcHRvci5tUHJpdmF0ZURhdGEuZGF0YSgpLAorICAgICAgICAgICAgICAgICAgICBkZXNjcmlwdG9yLm1Qcml2YXRlRGF0YS5zaXplKCkpOworCiAgICAgICAgICAgICBtU291cmNlID0gbmV3IEFub3RoZXJQYWNrZXRTb3VyY2UobWV0YSk7CiAgICAgICAgIH0KICAgICB9CkBAIC05ODYsOSArMTExMiwxMiBAQAogICAgICAgICBjYXNlIFNUUkVBTVRZUEVfTVBFRzJfQVVESU9fQURUUzoKICAgICAgICAgY2FzZSBTVFJFQU1UWVBFX0xQQ01fQUMzOgogICAgICAgICBjYXNlIFNUUkVBTVRZUEVfQUMzOgorICAgICAgICBjYXNlIFNUUkVBTVRZUEVfRUFDMzoKICAgICAgICAgY2FzZSBTVFJFQU1UWVBFX0FBQ19FTkNSWVBURUQ6CiAgICAgICAgIGNhc2UgU1RSRUFNVFlQRV9BQzNfRU5DUllQVEVEOgogICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIGNhc2UgU1RSRUFNVFlQRV9QRVNfUFJJVkFURV9EQVRBOgorICAgICAgICAgICAgcmV0dXJuIG1TdHJlYW1UeXBlRXh0ID09IEVYVF9ERVNDUklQVE9SX0RWQl9BQzQ7CiAKICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKQEAgLTEzOTUsNyArMTUyNCw3IEBACiAgICAgLy8gUGVyZm9ybSB0aGUgMXN0IHBhc3MgZGVzY3JhbWJsaW5nIGlmIG5lZWRlZAogICAgIGlmIChkZXNjcmFtYmxlQnl0ZXMgPiAwKSB7CiAgICAgICAgIG1lbWNweShtRGVzY3JhbWJsZWRCdWZmZXItPmRhdGEoKSwgbUJ1ZmZlci0+ZGF0YSgpLCBkZXNjcmFtYmxlQnl0ZXMpOwotICAgICAgICBtRGVzY3JhbWJsZWRCdWZmZXItPnNldFJhbmdlKDAsIGRlc2NyYW1ibGVCeXRlcyk7CisgICAgICAgIG1EZXNjcmFtYmxlZEJ1ZmZlci0+c2V0UmFuZ2UoMCwgbUJ1ZmZlci0+c2l6ZSgpKTsKIAogICAgICAgICBoaWRsX3ZlYzxTdWJTYW1wbGU+IHN1YlNhbXBsZXM7CiAgICAgICAgIHN1YlNhbXBsZXMucmVzaXplKGRlc2NyYW1ibGVTdWJTYW1wbGVzKTsKQEAgLTE0MTIsMTAgKzE1NDEsOSBAQAogICAgICAgICAgICAgfQogICAgICAgICB9CiAKLSAgICAgICAgdWludDY0X3Qgc3JjT2Zmc2V0ID0gMCwgZHN0T2Zmc2V0ID0gMDsKLSAgICAgICAgLy8gSWYgc2NyYW1ibGVkIGF0IFBFUy1sZXZlbCwgUEVTIGhlYWRlciBzaG91bGQgYmUgc2tpcHBlZAorICAgICAgICAvLyBJZiBzY3JhbWJsZWQgYXQgUEVTLWxldmVsLCBQRVMgaGVhZGVyIGlzIGluIHRoZSBjbGVhcgogICAgICAgICBpZiAocGVzU2NyYW1ibGluZ0NvbnRyb2wgIT0gMCkgewotICAgICAgICAgICAgc3JjT2Zmc2V0ID0gZHN0T2Zmc2V0ID0gcGVzT2Zmc2V0OworICAgICAgICAgICAgc3ViU2FtcGxlc1swXS5udW1CeXRlc09mQ2xlYXJEYXRhID0gcGVzT2Zmc2V0OwogICAgICAgICAgICAgc3ViU2FtcGxlc1swXS5udW1CeXRlc09mRW5jcnlwdGVkRGF0YSAtPSBwZXNPZmZzZXQ7CiAgICAgICAgIH0KIApAQCAtMTQzMSw5ICsxNTU5LDkgQEAKICAgICAgICAgICAgICAgICAoU2NyYW1ibGluZ0NvbnRyb2wpIHNjdHJsLAogICAgICAgICAgICAgICAgIHN1YlNhbXBsZXMsCiAgICAgICAgICAgICAgICAgbURlc2NyYW1ibGVyU3JjQnVmZmVyLAotICAgICAgICAgICAgICAgIHNyY09mZnNldCwKKyAgICAgICAgICAgICAgICAwIC8qc3JjT2Zmc2V0Ki8sCiAgICAgICAgICAgICAgICAgZHN0QnVmZmVyLAotICAgICAgICAgICAgICAgIGRzdE9mZnNldCwKKyAgICAgICAgICAgICAgICAwIC8qZHN0T2Zmc2V0Ki8sCiAgICAgICAgICAgICAgICAgWyZzdGF0dXMsICZieXRlc1dyaXR0ZW4sICZkZXRhaWxlZEVycm9yXSAoCiAgICAgICAgICAgICAgICAgICAgICAgICBTdGF0dXMgX3N0YXR1cywgdWludDMyX3QgX2J5dGVzV3JpdHRlbiwKICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGhpZGxfc3RyaW5nJiBfZGV0YWlsZWRFcnJvcikgewpAQCAtMTQ1MCw5ICsxNTc4LDIxIEBACiAKICAgICAgICAgQUxPR1YoIltzdHJlYW0gJWRdIGRlc2NyYW1ibGUgc3VjY2VlZGVkLCAlZCBieXRlcyIsCiAgICAgICAgICAgICAgICAgbUVsZW1lbnRhcnlQSUQsIGJ5dGVzV3JpdHRlbik7Ci0gICAgICAgIG1lbWNweShtQnVmZmVyLT5kYXRhKCksIG1EZXNjcmFtYmxlZEJ1ZmZlci0+ZGF0YSgpLCBkZXNjcmFtYmxlQnl0ZXMpOworCisgICAgICAgIC8vIFNldCBkZXNjcmFtYmxlQnl0ZXMgdG8gdGhlIHJldHVybmVkIHJlc3VsdC4KKyAgICAgICAgLy8gTm90ZSB0aGF0IHRoaXMgbWlnaHQgYmUgc21hbGxlciB0aGFuIHRoZSB0b3RhbCBsZW5ndGggb2YgaW5wdXQgZGF0YS4KKyAgICAgICAgLy8gKGVnLiB3aGVuIHdlJ3JlIGRlc2NyYW1ibGluZyB0aGUgUEVTIGhlYWRlciBwb3J0aW9uIG9mIGEgc2VjdXJlIHN0cmVhbSwKKyAgICAgICAgLy8gdGhlIHBsdWdpbiBtaWdodCBjdXQgaXQgb2ZmIHJpZ2h0IGFmdGVyIHRoZSBQRVMgaGVhZGVyLikKKyAgICAgICAgZGVzY3JhbWJsZUJ5dGVzID0gYnl0ZXNXcml0dGVuOwogICAgIH0KIAorICAgIC8vIHxidWZmZXJ8IHBvaW50cyB0byB0aGUgYnVmZmVyIGZyb20gd2hpY2ggd2UnZCBwYXJzZSB0aGUgUEVTIGhlYWRlci4KKyAgICAvLyBXaGVuIHRoZSBvdXRwdXQgc3RyZWFtIGlzIHNjcmFtYmxlZCwgaXQgcG9pbnRzIHRvIG1EZXNjcmFtYmxlZEJ1ZmZlcgorICAgIC8vICh1bmxlc3MgYWxsIHBhY2tldHMgaW4gdGhpcyBQRVMgYXJlIGFjdHVhbGx5IGNsZWFyLCBpbiB3aGljaCBjYXNlLAorICAgIC8vIGl0IHBvaW50cyB0byBtQnVmZmVyIHNpbmNlIHdlIG5ldmVyIGNvcGllZCBpbnRvIG1EZXNjcmFtYmxlZEJ1ZmZlcikuCisgICAgLy8gV2hlbiB0aGUgb3V0cHV0IHN0cmVhbSBpcyBjbGVhciwgaXQgcG9pbnRzIHRvIG1CdWZmZXIsIGFuZCB3ZSdsbAorICAgIC8vIGNvcHkgYWxsIGRlc2NyYW1ibGVkIGRhdGEgYmFjayB0byBtQnVmZmVyLgorICAgIHNwPEFCdWZmZXI+IGJ1ZmZlciA9IG1CdWZmZXI7CiAgICAgaWYgKG1RdWV1ZS0+aXNTY3JhbWJsZWQoKSkgewogICAgICAgICAvLyBRdWV1ZSBzdWJTYW1wbGUgaW5mbyBmb3Igc2NyYW1ibGVkIHF1ZXVlCiAgICAgICAgIHNwPEFCdWZmZXI+IGNsZWFyU2l6ZXNCdWZmZXIgPSBuZXcgQUJ1ZmZlcihtU3ViU2FtcGxlcy5zaXplKCkgKiA0KTsKQEAgLTE0NjQsOCArMTYwNCw3IEBACiAgICAgICAgIGZvciAoYXV0byBpdCA9IG1TdWJTYW1wbGVzLmJlZ2luKCk7CiAgICAgICAgICAgICAgICAgaXQgIT0gbVN1YlNhbXBsZXMuZW5kKCk7IGl0KyssIGkrKykgewogICAgICAgICAgICAgaWYgKChpdC0+dHJhbnNwb3J0X3NjcmFtYmxpbmdfbW9kZSA9PSAwCi0gICAgICAgICAgICAgICAgICAgICYmIHBlc1NjcmFtYmxpbmdDb250cm9sID09IDApCi0gICAgICAgICAgICAgICAgICAgIHx8IGkgPCBkZXNjcmFtYmxlU3ViU2FtcGxlcykgeworICAgICAgICAgICAgICAgICAgICAmJiBwZXNTY3JhbWJsaW5nQ29udHJvbCA9PSAwKSkgewogICAgICAgICAgICAgICAgIGNsZWFyU2l6ZVB0cltpXSA9IGl0LT5zdWJTYW1wbGVTaXplOwogICAgICAgICAgICAgICAgIGVuY1NpemVQdHJbaV0gPSAwOwogICAgICAgICAgICAgfSBlbHNlIHsKQEAgLTE0NzQsMTQgKzE2MTMsMjkgQEAKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGlzU3luYyB8PSBpdC0+cmFuZG9tX2FjY2Vzc19pbmRpY2F0b3I7CiAgICAgICAgIH0KKworICAgICAgICAvLyBJZiBzY3JhbWJsZWQgYXQgUEVTLWxldmVsLCBQRVMgaGVhZGVyIGlzIGluIHRoZSBjbGVhcgorICAgICAgICBpZiAocGVzU2NyYW1ibGluZ0NvbnRyb2wgIT0gMCkgeworICAgICAgICAgICAgY2xlYXJTaXplUHRyWzBdID0gcGVzT2Zmc2V0OworICAgICAgICAgICAgZW5jU2l6ZVB0clswXSAtPSBwZXNPZmZzZXQ7CisgICAgICAgIH0KICAgICAgICAgLy8gUGFzcyB0aGUgb3JpZ2luYWwgVFMgc3Vic2FtcGxlIHNpemUgbm93LiBUaGUgUEVTIGhlYWRlciBhZGp1c3QKICAgICAgICAgLy8gd2lsbCBiZSBhcHBsaWVkIHdoZW4gdGhlIHNjcmFtYmxlZCBBVSBpcyBkZXF1ZXVlZC4KKyAgICAgICAgLy8gTm90ZSB0aGF0IGlmIGRlc2NyYW1ibGVCeXRlcyBpcyAwLCBpdCBtZWFucyB0aGlzIFBFUyBjb250YWlucyBvbmx5CisgICAgICAgIC8vIGFsbCB0cyBwYWNrZXRzLCBsZWFkaW5nQ2xlYXJCeXRlcyBpcyBlbnRpcmUgYnVmZmVyIHNpemUuCiAgICAgICAgIG1RdWV1ZS0+YXBwZW5kU2NyYW1ibGVkRGF0YSgKLSAgICAgICAgICAgICAgICBtQnVmZmVyLT5kYXRhKCksIG1CdWZmZXItPnNpemUoKSwgc2N0cmwsCi0gICAgICAgICAgICAgICAgaXNTeW5jLCBjbGVhclNpemVzQnVmZmVyLCBlbmNTaXplc0J1ZmZlcik7CisgICAgICAgICAgICAgICAgbUJ1ZmZlci0+ZGF0YSgpLCBtQnVmZmVyLT5zaXplKCksCisgICAgICAgICAgICAgICAgKGRlc2NyYW1ibGVCeXRlcyA+IDApID8gZGVzY3JhbWJsZUJ5dGVzIDogbUJ1ZmZlci0+c2l6ZSgpLAorICAgICAgICAgICAgICAgIHNjdHJsLCBpc1N5bmMsIGNsZWFyU2l6ZXNCdWZmZXIsIGVuY1NpemVzQnVmZmVyKTsKKworICAgICAgICBpZiAoZGVzY3JhbWJsZUJ5dGVzID4gMCkgeworICAgICAgICAgICAgYnVmZmVyID0gbURlc2NyYW1ibGVkQnVmZmVyOworICAgICAgICB9CisgICAgfSBlbHNlIHsKKyAgICAgICAgbWVtY3B5KG1CdWZmZXItPmRhdGEoKSwgbURlc2NyYW1ibGVkQnVmZmVyLT5kYXRhKCksIGRlc2NyYW1ibGVCeXRlcyk7CiAgICAgfQogCi0gICAgQUJpdFJlYWRlciBicihtQnVmZmVyLT5kYXRhKCksIG1CdWZmZXItPnNpemUoKSk7CisgICAgQUJpdFJlYWRlciBicihidWZmZXItPmRhdGEoKSwgYnVmZmVyLT5zaXplKCkpOwogICAgIHN0YXR1c190IGVyciA9IHBhcnNlUEVTKCZiciwgZXZlbnQpOwogCiAgICAgaWYgKGVyciAhPSBPSykgewpAQCAtMTU2NSw2ICsxNzE5LDcgQEAKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgbVNvdXJjZSA9IG5ldyBBbm90aGVyUGFja2V0U291cmNlKG1ldGEpOwogICAgICAgICAgICAgICAgIG1Tb3VyY2UtPnF1ZXVlQWNjZXNzVW5pdChhY2Nlc3NVbml0KTsKKyAgICAgICAgICAgICAgICBtU291cmNlLT5jb252ZXJ0QXVkaW9QcmVzZW50YXRpb25JbmZvVG9NZXRhZGF0YShtQXVkaW9QcmVzZW50YXRpb25zKTsKICAgICAgICAgICAgICAgICBBTE9HVigib25QYXlsb2FkRGF0YTogY3JlYXRlZCBBbm90aGVyUGFja2V0U291cmNlIFBJRCAweCUwOHggb2YgdHlwZSAweCUwMngiLAogICAgICAgICAgICAgICAgICAgICAgICAgbUVsZW1lbnRhcnlQSUQsIG1TdHJlYW1UeXBlKTsKICAgICAgICAgICAgIH0KZGlmZiAtLWdpdCBhL21lZGlhL2xpYnN0YWdlZnJpZ2h0L21wZWcydHMvQVRTUGFyc2VyLmggYi9tZWRpYS9saWJzdGFnZWZyaWdodC9tcGVnMnRzL0FUU1BhcnNlci5oCmluZGV4IDQ1Y2EwNmIuLjBmZjJkN2UgMTAwNjQ0Ci0tLSBhL21lZGlhL2xpYnN0YWdlZnJpZ2h0L21wZWcydHMvQVRTUGFyc2VyLmgKKysrIGIvbWVkaWEvbGlic3RhZ2VmcmlnaHQvbXBlZzJ0cy9BVFNQYXJzZXIuaApAQCAtMjMsNiArMjMsNyBAQAogI2luY2x1ZGUgPG1lZGlhL01lZGlhU291cmNlLmg+CiAjaW5jbHVkZSA8bWVkaWEvc3RhZ2VmcmlnaHQvZm91bmRhdGlvbi9BQmFzZS5oPgogI2luY2x1ZGUgPG1lZGlhL3N0YWdlZnJpZ2h0L2ZvdW5kYXRpb24vQU1lc3NhZ2UuaD4KKyNpbmNsdWRlIDxtZWRpYS9zdGFnZWZyaWdodC9mb3VuZGF0aW9uL0F1ZGlvUHJlc2VudGF0aW9uSW5mby5oPgogI2luY2x1ZGUgPHV0aWxzL0tleWVkVmVjdG9yLmg+CiAjaW5jbHVkZSA8dXRpbHMvVmVjdG9yLmg+CiAjaW5jbHVkZSA8dXRpbHMvUmVmQmFzZS5oPgpAQCAtMTQyLDYgKzE0Myw3IEBACiAgICAgICAgIFNUUkVBTVRZUEVfTVBFRzJfVklERU8gICAgICAgICAgPSAweDAyLAogICAgICAgICBTVFJFQU1UWVBFX01QRUcxX0FVRElPICAgICAgICAgID0gMHgwMywKICAgICAgICAgU1RSRUFNVFlQRV9NUEVHMl9BVURJTyAgICAgICAgICA9IDB4MDQsCisgICAgICAgIFNUUkVBTVRZUEVfUEVTX1BSSVZBVEVfREFUQSAgICAgPSAweDA2LAogICAgICAgICBTVFJFQU1UWVBFX01QRUcyX0FVRElPX0FEVFMgICAgID0gMHgwZiwKICAgICAgICAgU1RSRUFNVFlQRV9NUEVHNF9WSURFTyAgICAgICAgICA9IDB4MTAsCiAgICAgICAgIFNUUkVBTVRZUEVfTUVUQURBVEEgICAgICAgICAgICAgPSAweDE1LApAQCAtMTUzLDYgKzE1NSw3IEBACiAgICAgICAgIC8vIFN0cmVhbSB0eXBlIDB4ODMgaXMgbm9uLXN0YW5kYXJkLAogICAgICAgICAvLyBpdCBjb3VsZCBiZSBMUENNIG9yIFRydWVIRCBBQzMKICAgICAgICAgU1RSRUFNVFlQRV9MUENNX0FDMyAgICAgICAgICAgICA9IDB4ODMsCisgICAgICAgIFNUUkVBTVRZUEVfRUFDMyAgICAgICAgICAgICAgICAgPSAweDg3LAogCiAgICAgICAgIC8vU2FtcGxlIEVuY3J5cHRlZCB0eXBlcwogICAgICAgICBTVFJFQU1UWVBFX0gyNjRfRU5DUllQVEVEICAgICAgID0gMHhEQiwKQEAgLTE2MCw2ICsxNjMsMjEgQEAKICAgICAgICAgU1RSRUFNVFlQRV9BQzNfRU5DUllQVEVEICAgICAgICA9IDB4QzEsCiAgICAgfTsKIAorICAgIGVudW0geworICAgICAgICAvLyBGcm9tIElTTy9JRUMgMTM4MTgtMTogMjAwNyAoRSksIFRhYmxlIDItNDUKKyAgICAgICAgREVTQ1JJUFRPUl9DQSAgICAgICAgICAgICAgICAgICA9IDB4MDksCisKKyAgICAgICAgLy8gRFZCIEJsdWVCb29rIEEwMzggVGFibGUgMTIKKyAgICAgICAgREVTQ1JJUFRPUl9EVkJfRVhURU5TSU9OICAgICAgICA9IDB4N0YsCisgICAgfTsKKworICAgIC8vIERWQiBCbHVlQm9vayBBMDM4IFRhYmxlIDEwOQorICAgIGVudW0geworICAgICAgICBFWFRfREVTQ1JJUFRPUl9EVkJfQUM0ICAgICAgICAgICAgICAgICAgPSAweDE1LAorICAgICAgICBFWFRfREVTQ1JJUFRPUl9EVkJfQVVESU9fUFJFU0VMRUNUSU9OICAgPSAweDE5LAorICAgICAgICBFWFRfREVTQ1JJUFRPUl9EVkJfUkVTRVJWRURfTUFYICAgICAgICAgPSAweDdGLAorICAgIH07CisKIHByb3RlY3RlZDoKICAgICB2aXJ0dWFsIH5BVFNQYXJzZXIoKTsKIApAQCAtMTY5LDExICsxODcsMjAgQEAKICAgICBzdHJ1Y3QgUFNJU2VjdGlvbjsKICAgICBzdHJ1Y3QgQ2FzTWFuYWdlcjsKICAgICBzdHJ1Y3QgQ0FEZXNjcmlwdG9yIHsKLSAgICAgICAgaW50MzJfdCBtU3lzdGVtSUQ7CisgICAgICAgIENBRGVzY3JpcHRvcigpIDogbVBJRCgwKSwgbVN5c3RlbUlEKC0xKSB7fQogICAgICAgICB1bnNpZ25lZCBtUElEOworICAgICAgICBpbnQzMl90IG1TeXN0ZW1JRDsKICAgICAgICAgc3RkOjp2ZWN0b3I8dWludDhfdD4gbVByaXZhdGVEYXRhOwogICAgIH07CiAKKyAgICBzdHJ1Y3QgU3RyZWFtSW5mbyB7CisgICAgICAgIHVuc2lnbmVkIG1UeXBlOworICAgICAgICB1bnNpZ25lZCBtVHlwZUV4dDsKKyAgICAgICAgdW5zaWduZWQgbVBJRDsKKyAgICAgICAgQ0FEZXNjcmlwdG9yIG1DQURlc2NyaXB0b3I7CisgICAgICAgIEF1ZGlvUHJlc2VudGF0aW9uQ29sbGVjdGlvbiBtQXVkaW9QcmVzZW50YXRpb25zOworICAgIH07CisKICAgICBzcDxDYXNNYW5hZ2VyPiBtQ2FzTWFuYWdlcjsKIAogICAgIHVpbnQzMl90IG1GbGFnczsKZGlmZiAtLWdpdCBhL21lZGlhL2xpYnN0YWdlZnJpZ2h0L21wZWcydHMvQW5kcm9pZC5icCBiL21lZGlhL2xpYnN0YWdlZnJpZ2h0L21wZWcydHMvQW5kcm9pZC5icAppbmRleCBmYmYxNDk2Li43ZTAwZWI4IDEwMDY0NAotLS0gYS9tZWRpYS9saWJzdGFnZWZyaWdodC9tcGVnMnRzL0FuZHJvaWQuYnAKKysrIGIvbWVkaWEvbGlic3RhZ2VmcmlnaHQvbXBlZzJ0cy9BbmRyb2lkLmJwCkBAIC0zOCw2ICszOCwxMCBAQAogICAgICAgICAiYW5kcm9pZC5oaWRsLm1lbW9yeUAxLjAiLAogICAgIF0sCiAKKyAgICBoZWFkZXJfbGliczogWworICAgICAgICAibWVkaWFfbmRrX2hlYWRlcnMiLAorICAgIF0sCisKICAgICB3aG9sZV9zdGF0aWNfbGliczogWwogICAgICAgICAibGlic3RhZ2VmcmlnaHRfbWV0YWRhdGF1dGlscyIsCiAgICAgXSwKZGlmZiAtLWdpdCBhL21lZGlhL2xpYnN0YWdlZnJpZ2h0L21wZWcydHMvQW5vdGhlclBhY2tldFNvdXJjZS5jcHAgYi9tZWRpYS9saWJzdGFnZWZyaWdodC9tcGVnMnRzL0Fub3RoZXJQYWNrZXRTb3VyY2UuY3BwCmluZGV4IGVjZTA2OTIuLmUyYzUwMzEgMTAwNjQ0Ci0tLSBhL21lZGlhL2xpYnN0YWdlZnJpZ2h0L21wZWcydHMvQW5vdGhlclBhY2tldFNvdXJjZS5jcHAKKysrIGIvbWVkaWEvbGlic3RhZ2VmcmlnaHQvbXBlZzJ0cy9Bbm90aGVyUGFja2V0U291cmNlLmNwcApAQCAtMjI2LDYgKzIyNiw3IEBACiAgICAgICAgIGludDMyX3QgY3J5cHRvTW9kZTsKICAgICAgICAgaWYgKGJ1ZmZlci0+bWV0YSgpLT5maW5kSW50MzIoImNyeXB0b01vZGUiLCAmY3J5cHRvTW9kZSkpIHsKICAgICAgICAgICAgIGludDMyX3QgY3J5cHRvS2V5OworICAgICAgICAgICAgaW50MzJfdCBwZXNPZmZzZXQ7CiAgICAgICAgICAgICBzcDxBQnVmZmVyPiBjbGVhckJ5dGVzQnVmZmVyLCBlbmNCeXRlc0J1ZmZlcjsKIAogICAgICAgICAgICAgQ0hFQ0soYnVmZmVyLT5tZXRhKCktPmZpbmRJbnQzMigiY3J5cHRvS2V5IiwgJmNyeXB0b0tleSkpOwpAQCAtMjMzLDYgKzIzNCw4IEBACiAgICAgICAgICAgICAgICAgICAgICYmIGNsZWFyQnl0ZXNCdWZmZXIgIT0gTlVMTCk7CiAgICAgICAgICAgICBDSEVDSyhidWZmZXItPm1ldGEoKS0+ZmluZEJ1ZmZlcigiZW5jQnl0ZXMiLCAmZW5jQnl0ZXNCdWZmZXIpCiAgICAgICAgICAgICAgICAgICAgICYmIGVuY0J5dGVzQnVmZmVyICE9IE5VTEwpOworICAgICAgICAgICAgQ0hFQ0soYnVmZmVyLT5tZXRhKCktPmZpbmRJbnQzMigicGVzT2Zmc2V0IiwgJnBlc09mZnNldCkKKyAgICAgICAgICAgICAgICAgICAgJiYgKHBlc09mZnNldCA+PSAwKSAmJiAocGVzT2Zmc2V0IDwgNjU1MzYpKTsKIAogICAgICAgICAgICAgYnVmbWV0YS5zZXRJbnQzMihrS2V5Q3J5cHRvTW9kZSwgY3J5cHRvTW9kZSk7CiAKQEAgLTI0MCw2ICsyNDMsMTEgQEAKICAgICAgICAgICAgIGJ1Zm1ldGEuc2V0RGF0YShrS2V5Q3J5cHRvSVYsIDAsIGFycmF5LCAxNik7CiAKICAgICAgICAgICAgIGFycmF5WzBdID0gKHVpbnQ4X3QpIChjcnlwdG9LZXkgJiAweGZmKTsKKyAgICAgICAgICAgIC8vIGFycmF5WzFdIGNvbnRhaW5zIFBFUyBoZWFkZXIgZmxhZywgd2hpY2ggd2UgZG9uJ3QgdXNlLgorICAgICAgICAgICAgLy8gYXJyYXlbMn4zXSBjb250YWluIHRoZSBQRVMgb2Zmc2V0LgorICAgICAgICAgICAgYXJyYXlbMl0gPSAodWludDhfdCkgKHBlc09mZnNldCAmIDB4ZmYpOworICAgICAgICAgICAgYXJyYXlbM10gPSAodWludDhfdCkgKChwZXNPZmZzZXQgPj4gOCkgJiAweGZmKTsKKwogICAgICAgICAgICAgYnVmbWV0YS5zZXREYXRhKGtLZXlDcnlwdG9LZXksIDAsIGFycmF5LCAxNik7CiAKICAgICAgICAgICAgIGJ1Zm1ldGEuc2V0RGF0YShrS2V5UGxhaW5TaXplcywgMCwKQEAgLTY4OSw0ICs2OTcsMjMgQEAKICAgICByZXR1cm4gZmlyc3RNZXRhOwogfQogCit2b2lkIEFub3RoZXJQYWNrZXRTb3VyY2U6OmNvbnZlcnRBdWRpb1ByZXNlbnRhdGlvbkluZm9Ub01ldGFkYXRhKAorICAgICAgICBjb25zdCBBdWRpb1ByZXNlbnRhdGlvbkNvbGxlY3Rpb24mIHByZXNlbnRhdGlvbnMpIHsKKyAgICBzcDxNZXRhRGF0YT4gbWV0YSA9IGdldEZvcm1hdCgpOworICAgIGlmIChtZXRhID09IE5VTEwpIHsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBpZiAocHJlc2VudGF0aW9ucy5lbXB0eSgpKSB7CisgICAgICAgIC8vIENsZWFyIGF1ZGlvIHByZXNlbnRhdGlvbiBpbmZvIGluIG1ldGFkYXRhLgorICAgICAgICBNdXRleDo6QXV0b2xvY2sgYXV0b0xvY2sobUxvY2spOworICAgICAgICBtZXRhLT5yZW1vdmUoa0tleUF1ZGlvUHJlc2VudGF0aW9uSW5mbyk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgc3RkOjpvc3RyaW5nc3RyZWFtIG91dFN0cmVhbShzdGQ6Omlvczo6b3V0KTsKKyAgICAgICAgc2VyaWFsaXplQXVkaW9QcmVzZW50YXRpb25zKHByZXNlbnRhdGlvbnMsICZvdXRTdHJlYW0pOworICAgICAgICBNdXRleDo6QXV0b2xvY2sgYXV0b0xvY2sobUxvY2spOworICAgICAgICBtZXRhLT5zZXREYXRhKGtLZXlBdWRpb1ByZXNlbnRhdGlvbkluZm8sIE1ldGFEYXRhOjpUWVBFX05PTkUsCisgICAgICAgICAgICAgICAgb3V0U3RyZWFtLnN0cigpLmRhdGEoKSwgb3V0U3RyZWFtLnN0cigpLnNpemUoKSk7CisgICAgfQorfQorCiB9ICAvLyBuYW1lc3BhY2UgYW5kcm9pZApkaWZmIC0tZ2l0IGEvbWVkaWEvbGlic3RhZ2VmcmlnaHQvbXBlZzJ0cy9Bbm90aGVyUGFja2V0U291cmNlLmggYi9tZWRpYS9saWJzdGFnZWZyaWdodC9tcGVnMnRzL0Fub3RoZXJQYWNrZXRTb3VyY2UuaAppbmRleCBmNGE2YWNiLi41N2E2YzMzIDEwMDY0NAotLS0gYS9tZWRpYS9saWJzdGFnZWZyaWdodC9tcGVnMnRzL0Fub3RoZXJQYWNrZXRTb3VyY2UuaAorKysgYi9tZWRpYS9saWJzdGFnZWZyaWdodC9tcGVnMnRzL0Fub3RoZXJQYWNrZXRTb3VyY2UuaApAQCAtODUsNiArODUsOCBAQAogICAgIHZvaWQgdHJpbUJ1ZmZlcnNBZnRlck1ldGEoY29uc3Qgc3A8QU1lc3NhZ2U+ICZtZXRhKTsKICAgICBzcDxBTWVzc2FnZT4gdHJpbUJ1ZmZlcnNCZWZvcmVNZXRhKGNvbnN0IHNwPEFNZXNzYWdlPiAmbWV0YSk7CiAKKyAgICB2b2lkIGNvbnZlcnRBdWRpb1ByZXNlbnRhdGlvbkluZm9Ub01ldGFkYXRhKGNvbnN0IEF1ZGlvUHJlc2VudGF0aW9uQ29sbGVjdGlvbiAmcHJlc2VudGF0aW9ucyk7CisKIHByb3RlY3RlZDoKICAgICB2aXJ0dWFsIH5Bbm90aGVyUGFja2V0U291cmNlKCk7CiAKZGlmZiAtLWdpdCBhL21lZGlhL2xpYnN0YWdlZnJpZ2h0L21wZWcydHMvRVNRdWV1ZS5jcHAgYi9tZWRpYS9saWJzdGFnZWZyaWdodC9tcGVnMnRzL0VTUXVldWUuY3BwCmluZGV4IDBmYTlmY2IuLmZiOGI5ZmQgMTAwNjQ0Ci0tLSBhL21lZGlhL2xpYnN0YWdlZnJpZ2h0L21wZWcydHMvRVNRdWV1ZS5jcHAKKysrIGIvbWVkaWEvbGlic3RhZ2VmcmlnaHQvbXBlZzJ0cy9FU1F1ZXVlLmNwcApAQCAtODYsNiArODYsMjEgQEAKICAgICBtQ2FzU2Vzc2lvbklkID0gc2Vzc2lvbklkOwogfQogCitzdGF0aWMgaW50MzJfdCByZWFkVmFyaWFibGVCaXRzKEFCaXRSZWFkZXIgJmJpdHMsIGludDMyX3QgbmJpdHMpIHsKKyAgICBpbnQzMl90IHZhbHVlID0gMDsKKyAgICBpbnQzMl90IG1vcmVfYml0cyA9IDE7CisKKyAgICB3aGlsZSAobW9yZV9iaXRzKSB7CisgICAgICAgIHZhbHVlICs9IGJpdHMuZ2V0Qml0cyhuYml0cyk7CisgICAgICAgIG1vcmVfYml0cyA9IGJpdHMuZ2V0Qml0cygxKTsKKyAgICAgICAgaWYgKCFtb3JlX2JpdHMpCisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgdmFsdWUrKzsKKyAgICAgICAgdmFsdWUgPDw9IG5iaXRzOworICAgIH0KKyAgICByZXR1cm4gdmFsdWU7Cit9CisKIC8vIFBhcnNlIEFDMyBoZWFkZXIgYXNzdW1pbmcgdGhlIGN1cnJlbnQgcHRyIGlzIHN0YXJ0IHBvc2l0aW9uIG9mIHN5bmNmcmFtZSwKIC8vIHVwZGF0ZSBtZXRhZGF0YSBvbmx5IGFwcGxpY2FibGUsIGFuZCByZXR1cm4gdGhlIHBheWxvYWQgc2l6ZQogc3RhdGljIHVuc2lnbmVkIHBhcnNlQUMzU3luY0ZyYW1lKApAQCAtMTk1LDggKzIxMCwxNTMgQEAKICAgICByZXR1cm4gcGF5bG9hZFNpemU7CiB9CiAKLXN0YXRpYyBib29sIElzU2VlbWluZ2x5VmFsaWRBQzNIZWFkZXIoY29uc3QgdWludDhfdCAqcHRyLCBzaXplX3Qgc2l6ZSkgewotICAgIHJldHVybiBwYXJzZUFDM1N5bmNGcmFtZShwdHIsIHNpemUsIE5VTEwpID4gMDsKKy8vIFBhcnNlIEVBQzMgaGVhZGVyIGFzc3VtaW5nIHRoZSBjdXJyZW50IHB0ciBpcyBzdGFydCBwb3NpdGlvbiBvZiBzeW5jZnJhbWUsCisvLyB1cGRhdGUgbWV0YWRhdGEgb25seSBhcHBsaWNhYmxlLCBhbmQgcmV0dXJuIHRoZSBwYXlsb2FkIHNpemUKKy8vIEFUU0MgQS81MjoyMDEyIEUyLjMuMQorc3RhdGljIHVuc2lnbmVkIHBhcnNlRUFDM1N5bmNGcmFtZSgKKyAgICBjb25zdCB1aW50OF90ICpwdHIsIHNpemVfdCBzaXplLCBzcDxNZXRhRGF0YT4gKm1ldGFEYXRhKSB7CisgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYW5uZWxDb3VudFRhYmxlW10gPSB7MiwgMSwgMiwgMywgMywgNCwgNCwgNX07CisgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIHNhbXBsaW5nUmF0ZVRhYmxlW10gPSB7NDgwMDAsIDQ0MTAwLCAzMjAwMH07CisgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIHNhbXBsaW5nUmF0ZVRhYmxlMltdID0gezI0MDAwLCAyMjA1MCwgMTYwMDB9OworCisgICAgQUJpdFJlYWRlciBiaXRzKHB0ciwgc2l6ZSk7CisgICAgaWYgKGJpdHMubnVtQml0c0xlZnQoKSA8IDE2KSB7CisgICAgICAgIEFMT0dFKCJOb3QgZW5vdWdoIGJpdHMgbGVmdCBmb3IgZnVydGhlciBwYXJzaW5nIik7CisgICAgICAgIHJldHVybiAwOworICAgIH0KKyAgICBpZiAoYml0cy5nZXRCaXRzKDE2KSAhPSAweDBCNzcpIHsKKyAgICAgICAgQUxPR0UoIk5vIHZhbGlkIHN5bmMgd29yZCBpbiBFQUMzIGhlYWRlciIpOworICAgICAgICByZXR1cm4gMDsKKyAgICB9CisKKyAgICAvLyB3ZSBwYXJzZSB1cCB0byBic2lkIHNvIHRoZXJlIG5lZWRzIHRvIGJlIGF0IGxlYXN0IHRoYXQgbWFueSBiaXRzCisgICAgaWYgKGJpdHMubnVtQml0c0xlZnQoKSA8IDIgKyAzICsgMTEgKyAyICsgMiArIDMgKyAxICsgNSkgeworICAgICAgICBBTE9HRSgiTm90IGVub3VnaCBiaXRzIGxlZnQgZm9yIGZ1cnRoZXIgcGFyc2luZyIpOworICAgICAgICByZXR1cm4gMDsKKyAgICB9CisKKyAgICB1bnNpZ25lZCBzdHJtdHlwID0gYml0cy5nZXRCaXRzKDIpOworICAgIGlmIChzdHJtdHlwID09IDMpIHsKKyAgICAgICAgQUxPR0UoIkluY29ycmVjdCBzdHJtdHlwIGluIEVBQzMgaGVhZGVyIik7CisgICAgICAgIHJldHVybiAwOworICAgIH0KKworICAgIHVuc2lnbmVkIHN1YnN0cmVhbWlkID0gYml0cy5nZXRCaXRzKDMpOworICAgIC8vIG9ubHkgdGhlIGZpcnN0IGluZGVwZW5kZW50IHN0cmVhbSBpcyBzdXBwb3J0ZWQKKyAgICBpZiAoKHN0cm10eXAgPT0gMCB8fCBzdHJtdHlwID09IDIpICYmIHN1YnN0cmVhbWlkICE9IDApCisgICAgICAgIHJldHVybiAwOworCisgICAgdW5zaWduZWQgZnJtc2l6ID0gYml0cy5nZXRCaXRzKDExKTsKKyAgICB1bnNpZ25lZCBmc2NvZCA9IGJpdHMuZ2V0Qml0cygyKTsKKworICAgIHVuc2lnbmVkIHNhbXBsaW5nUmF0ZSA9IDA7CisgICAgaWYgKGZzY29kID09IDB4MykgeworICAgICAgICB1bnNpZ25lZCBmc2NvZDIgPSBiaXRzLmdldEJpdHMoMik7CisgICAgICAgIGlmIChmc2NvZDIgPT0gMykgeworICAgICAgICAgICAgQUxPR1coIkluY29ycmVjdCBmc2NvZDIgaW4gRUFDMyBoZWFkZXIiKTsKKyAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICB9CisgICAgICAgIHNhbXBsaW5nUmF0ZSA9IHNhbXBsaW5nUmF0ZVRhYmxlMltmc2NvZDJdOworICAgIH0gZWxzZSB7CisgICAgICAgIHNhbXBsaW5nUmF0ZSA9IHNhbXBsaW5nUmF0ZVRhYmxlW2ZzY29kXTsKKyAgICAgICAgdW5zaWduZWQgbnVtYmxrc2NvZCBfX3VudXNlZCA9IGJpdHMuZ2V0Qml0cygyKTsKKyAgICB9CisKKyAgICB1bnNpZ25lZCBhY21vZCA9IGJpdHMuZ2V0Qml0cygzKTsKKyAgICB1bnNpZ25lZCBsZmVvbiA9IGJpdHMuZ2V0Qml0cygxKTsKKyAgICB1bnNpZ25lZCBic2lkID0gYml0cy5nZXRCaXRzKDUpOworICAgIGlmIChic2lkIDwgMTEgfHwgYnNpZCA+IDE2KSB7CisgICAgICAgIEFMT0dXKCJJbmNvcnJlY3QgYnNpZCBpbiBFQUMzIGhlYWRlci4gQ291bGQgYmUgQUMtMyBvciBzb21lIHVua25vd24gRUFDMyBmb3JtYXQiKTsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorCisgICAgLy8gd2UgY3VycmVudGx5IG9ubHkgc3VwcG9ydCB0aGUgZmlyc3QgaW5kZXBlbmRhbnQgc3RyZWFtCisgICAgaWYgKG1ldGFEYXRhICE9IE5VTEwgJiYgKHN0cm10eXAgPT0gMCB8fCBzdHJtdHlwID09IDIpKSB7CisgICAgICAgIHVuc2lnbmVkIGNoYW5uZWxDb3VudCA9IGNoYW5uZWxDb3VudFRhYmxlW2FjbW9kXSArIGxmZW9uOworICAgICAgICBBTE9HVigiRUFDMyBjaGFubmVsQ291bnQgPSAlZCIsIGNoYW5uZWxDb3VudCk7CisgICAgICAgIEFMT0dWKCJFQUMzIHNhbXBsaW5nUmF0ZSA9ICVkIiwgc2FtcGxpbmdSYXRlKTsKKyAgICAgICAgKCptZXRhRGF0YSktPnNldENTdHJpbmcoa0tleU1JTUVUeXBlLCBNRURJQV9NSU1FVFlQRV9BVURJT19FQUMzKTsKKyAgICAgICAgKCptZXRhRGF0YSktPnNldEludDMyKGtLZXlDaGFubmVsQ291bnQsIGNoYW5uZWxDb3VudCk7CisgICAgICAgICgqbWV0YURhdGEpLT5zZXRJbnQzMihrS2V5U2FtcGxlUmF0ZSwgc2FtcGxpbmdSYXRlKTsKKyAgICAgICAgKCptZXRhRGF0YSktPnNldEludDMyKGtLZXlJc1N5bmNGcmFtZSwgMSk7CisgICAgfQorCisgICAgdW5zaWduZWQgcGF5bG9hZFNpemUgPSBmcm1zaXogKyAxOworICAgIHBheWxvYWRTaXplIDw8PSAxOyAgLy8gY29udmVydCBmcm9tIDE2LWJpdCB3b3JkcyB0byBieXRlcworCisgICAgcmV0dXJuIHBheWxvYWRTaXplOworfQorCisvLyBQYXJzZSBBQzQgaGVhZGVyIGFzc3VtaW5nIHRoZSBjdXJyZW50IHB0ciBpcyBzdGFydCBwb3NpdGlvbiBvZiBzeW5jZnJhbWUKKy8vIGFuZCB1cGRhdGUgZnJhbWVTaXplIGFuZCBtZXRhZGF0YS4KK3N0YXRpYyBzdGF0dXNfdCBwYXJzZUFDNFN5bmNGcmFtZSgKKyAgICAgICAgY29uc3QgdWludDhfdCAqcHRyLCBzaXplX3Qgc2l6ZSwgdW5zaWduZWQgJmZyYW1lU2l6ZSwgc3A8TWV0YURhdGE+ICptZXRhRGF0YSkgeworICAgIC8vIEVUU0kgVFMgMTAzIDE5MC0yIFYxLjEuMSAoMjAxNS0wOSksIEFubmV4IEMKKyAgICAvLyBUaGUgc3luY193b3JkIGNhbiBiZSBlaXRoZXIgMHhBQzQwIG9yIDB4QUM0MS4KKyAgICBzdGF0aWMgY29uc3QgaW50IGtTeW5jV29yZEFDNDAgPSAweEFDNDA7CisgICAgc3RhdGljIGNvbnN0IGludCBrU3luY1dvcmRBQzQxID0gMHhBQzQxOworCisgICAgc2l6ZV90IGhlYWRlclNpemUgPSAwOworICAgIEFCaXRSZWFkZXIgYml0cyhwdHIsIHNpemUpOworICAgIGludDMyX3Qgc3luY1dvcmQgPSBiaXRzLmdldEJpdHMoMTYpOworICAgIGlmICgoc3luY1dvcmQgIT0ga1N5bmNXb3JkQUM0MCkgJiYgKHN5bmNXb3JkICE9IGtTeW5jV29yZEFDNDEpKSB7CisgICAgICAgIEFMT0dFKCJJbnZhbGlkIHN5bmN3b3JkIGluIEFDNCBoZWFkZXIiKTsKKyAgICAgICAgcmV0dXJuIEVSUk9SX01BTEZPUk1FRDsKKyAgICB9CisgICAgaGVhZGVyU2l6ZSArPSAyOworCisgICAgZnJhbWVTaXplID0gYml0cy5nZXRCaXRzKDE2KTsKKyAgICBoZWFkZXJTaXplICs9IDI7CisgICAgaWYgKGZyYW1lU2l6ZSA9PSAweEZGRkYpIHsKKyAgICAgICAgZnJhbWVTaXplID0gYml0cy5nZXRCaXRzKDI0KTsKKyAgICAgICAgaGVhZGVyU2l6ZSArPSAzOworICAgIH0KKworICAgIGlmIChmcmFtZVNpemUgPT0gMCkgeworICAgICAgICBBTE9HRSgiSW52YWxpZCBmcmFtZSBzaXplIGluIEFDNCBoZWFkZXIiKTsKKyAgICAgICAgcmV0dXJuIEVSUk9SX01BTEZPUk1FRDsKKyAgICB9CisgICAgZnJhbWVTaXplICs9IGhlYWRlclNpemU7CisgICAgLy8gSWYgdGhlIHN5bmNfd29yZCBpcyAweEFDNDEsIGEgY3JjX3dvcmQgaXMgYWxzbyB0cmFuc21pdHRlZC4KKyAgICBpZiAoc3luY1dvcmQgPT0ga1N5bmNXb3JkQUM0MSkgeworICAgICAgICBmcmFtZVNpemUgKz0gMjsgLy8gY3JjX3dvcmQKKyAgICB9CisgICAgQUxPR1YoIkFDNCBmcmFtZVNpemUgPSAldSIsIGZyYW1lU2l6ZSk7CisKKyAgICAvLyBFVFNJIFRTIDEwMyAxOTAtMiBWMS4xLjEgNi4yLjEuMQorICAgIHVpbnQzMl90IGJpdHN0cmVhbVZlcnNpb24gPSBiaXRzLmdldEJpdHMoMik7CisgICAgaWYgKGJpdHN0cmVhbVZlcnNpb24gPT0gMykgeworICAgICAgICBiaXRzdHJlYW1WZXJzaW9uICs9IHJlYWRWYXJpYWJsZUJpdHMoYml0cywgMik7CisgICAgfQorCisgICAgYml0cy5za2lwQml0cygxMCk7IC8vIFNlcXVlbmNlIENvdW50ZXIKKworICAgIHVpbnQzMl90IGJXYWl0RnJhbWVzID0gYml0cy5nZXRCaXRzKDEpOworICAgIGlmIChiV2FpdEZyYW1lcykgeworICAgICAgICB1aW50MzJfdCB3YWl0RnJhbWVzID0gYml0cy5nZXRCaXRzKDMpOworICAgICAgICBpZiAod2FpdEZyYW1lcyA+IDApIHsKKyAgICAgICAgICAgIGJpdHMuc2tpcEJpdHMoMik7IC8vIGJyX2NvZGU7CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvLyBFVFNJIFRTIDEwMyAxOTAgVjEuMS4xIFRhYmxlIDgyCisgICAgYm9vbCBmc0luZGV4ID0gYml0cy5nZXRCaXRzKDEpOworICAgIHVpbnQzMl90IHNhbXBsaW5nUmF0ZSA9IGZzSW5kZXggPyA0ODAwMCA6IDQ0MTAwOworCisgICAgaWYgKG1ldGFEYXRhICE9IE5VTEwpIHsKKyAgICAgICAgQUxPR1YoImRlcXVldWVBY2Nlc3NVbml0QUM0IFNldHRpbmcgbUZvcm1hdCIpOworICAgICAgICAoKm1ldGFEYXRhKS0+c2V0Q1N0cmluZyhrS2V5TUlNRVR5cGUsIE1FRElBX01JTUVUWVBFX0FVRElPX0FDNCk7CisgICAgICAgICgqbWV0YURhdGEpLT5zZXRJbnQzMihrS2V5SXNTeW5jRnJhbWUsIDEpOworICAgICAgICAvLyBbRklYTUVdIEFDNCBjaGFubmVsIGNvdW50IGlzIGRlZmluZWQgcGVyIHByZXNlbnRhdGlvbi4gUHJvdmlkZSBhIGRlZmF1bHQgY2hhbm5lbCBjb3VudAorICAgICAgICAvLyBhcyBzdGVyZW8gZm9yIHRoZSBlbnRpcmUgc3RyZWFtLgorICAgICAgICAoKm1ldGFEYXRhKS0+c2V0SW50MzIoa0tleUNoYW5uZWxDb3VudCwgMik7CisgICAgICAgICgqbWV0YURhdGEpLT5zZXRJbnQzMihrS2V5U2FtcGxlUmF0ZSwgc2FtcGxpbmdSYXRlKTsKKyAgICB9CisgICAgcmV0dXJuIE9LOworfQorCitzdGF0aWMgc3RhdHVzX3QgSXNTZWVtaW5nbHlWYWxpZEFDNEhlYWRlcihjb25zdCB1aW50OF90ICpwdHIsIHNpemVfdCBzaXplLCB1bnNpZ25lZCAmZnJhbWVTaXplKSB7CisgICAgcmV0dXJuIHBhcnNlQUM0U3luY0ZyYW1lKHB0ciwgc2l6ZSwgZnJhbWVTaXplLCBOVUxMKTsKIH0KIAogc3RhdGljIGJvb2wgSXNTZWVtaW5nbHlWYWxpZEFEVFNIZWFkZXIoCkBAIC0yNzksNyArNDM5LDggQEAKICAgICAgICAgQUxPR0UoImFwcGVuZGluZyBkYXRhIGFmdGVyIEVPUyIpOwogICAgICAgICByZXR1cm4gRVJST1JfTUFMRk9STUVEOwogICAgIH0KLSAgICBpZiAobUJ1ZmZlciA9PSBOVUxMIHx8IG1CdWZmZXItPnNpemUoKSA9PSAwKSB7CisKKyAgICBpZiAoIWlzU2NyYW1ibGVkKCkgJiYgKG1CdWZmZXIgPT0gTlVMTCB8fCBtQnVmZmVyLT5zaXplKCkgPT0gMCkpIHsKICAgICAgICAgc3dpdGNoIChtTW9kZSkgewogICAgICAgICAgICAgY2FzZSBIMjY0OgogICAgICAgICAgICAgY2FzZSBNUEVHX1ZJREVPOgpAQCAtMzkwLDEyICs1NTEsMTkgQEAKICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgY2FzZSBBQzM6CisgICAgICAgICAgICBjYXNlIEVBQzM6CiAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgdWludDhfdCAqcHRyID0gKHVpbnQ4X3QgKilkYXRhOwogCiAgICAgICAgICAgICAgICAgc3NpemVfdCBzdGFydE9mZnNldCA9IC0xOwogICAgICAgICAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgc2l6ZTsgKytpKSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChJc1NlZW1pbmdseVZhbGlkQUMzSGVhZGVyKCZwdHJbaV0sIHNpemUgLSBpKSkgeworICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBwYXlsb2FkU2l6ZSA9IDA7CisgICAgICAgICAgICAgICAgICAgIGlmIChtTW9kZSA9PSBBQzMpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHBheWxvYWRTaXplID0gcGFyc2VBQzNTeW5jRnJhbWUoJnB0cltpXSwgc2l6ZSAtIGksIE5VTEwpOworICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKG1Nb2RlID09IEVBQzMpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHBheWxvYWRTaXplID0gcGFyc2VFQUMzU3luY0ZyYW1lKCZwdHJbaV0sIHNpemUgLSBpLCBOVUxMKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBpZiAocGF5bG9hZFNpemUgPiAwKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICBzdGFydE9mZnNldCA9IGk7CiAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgfQpAQCAtNDA2LDcgKzU3NCw3IEBACiAgICAgICAgICAgICAgICAgfQogCiAgICAgICAgICAgICAgICAgaWYgKHN0YXJ0T2Zmc2V0ID4gMCkgewotICAgICAgICAgICAgICAgICAgICBBTE9HSSgiZm91bmQgc29tZXRoaW5nIHJlc2VtYmxpbmcgYW4gQUMzIHN5bmN3b3JkIGF0ICIKKyAgICAgICAgICAgICAgICAgICAgQUxPR0koImZvdW5kIHNvbWV0aGluZyByZXNlbWJsaW5nIGFuIChFKUFDMyBzeW5jd29yZCBhdCAiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJvZmZzZXQgJXpkIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhcnRPZmZzZXQpOwogICAgICAgICAgICAgICAgIH0KQEAgLTQxNiw2ICs1ODQsNDMgQEAKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0KIAorICAgICAgICAgICAgY2FzZSBBQzQ6CisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgdWludDhfdCAqcHRyID0gKHVpbnQ4X3QgKilkYXRhOworICAgICAgICAgICAgICAgIHVuc2lnbmVkIGZyYW1lU2l6ZSA9IDA7CisgICAgICAgICAgICAgICAgc3NpemVfdCBzdGFydE9mZnNldCA9IC0xOworCisgICAgICAgICAgICAgICAgLy8gQSB2YWxpZCBBQzQgc3RyZWFtIHNob3VsZCBoYXZlIG1pbmltdW0gb2YgNyBieXRlcyBpbiBpdHMgYnVmZmVyLgorICAgICAgICAgICAgICAgIC8vIChTeW5jIGhlYWRlciA0IGJ5dGVzICsgQUM0IHRvYyAzIGJ5dGVzKQorICAgICAgICAgICAgICAgIGlmIChzaXplIDwgNykgeworICAgICAgICAgICAgICAgICAgICByZXR1cm4gRVJST1JfTUFMRk9STUVEOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHNpemU7ICsraSkgeworICAgICAgICAgICAgICAgICAgICBpZiAoSXNTZWVtaW5nbHlWYWxpZEFDNEhlYWRlcigmcHRyW2ldLCBzaXplIC0gaSwgZnJhbWVTaXplKSA9PSBPSykgeworICAgICAgICAgICAgICAgICAgICAgICAgc3RhcnRPZmZzZXQgPSBpOworICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICBpZiAoc3RhcnRPZmZzZXQgPCAwKSB7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBFUlJPUl9NQUxGT1JNRUQ7CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgaWYgKHN0YXJ0T2Zmc2V0ID4gMCkgeworICAgICAgICAgICAgICAgICAgICBBTE9HSSgiZm91bmQgc29tZXRoaW5nIHJlc2VtYmxpbmcgYW4gQUM0IHN5bmN3b3JkIGF0ICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIm9mZnNldCAlemQiLAorICAgICAgICAgICAgICAgICAgICAgICAgICBzdGFydE9mZnNldCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGlmIChmcmFtZVNpemUgIT0gc2l6ZSAtIHN0YXJ0T2Zmc2V0KSB7CisgICAgICAgICAgICAgICAgICAgIEFMT0dWKCJBQzQgZnJhbWUgc2l6ZSBpcyAldSBieXRlcywgd2hpbGUgdGhlIGJ1ZmZlciBzaXplIGlzICV6ZCBieXRlcy4iLAorICAgICAgICAgICAgICAgICAgICAgICAgICBmcmFtZVNpemUsIHNpemUgLSBzdGFydE9mZnNldCk7CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgZGF0YSA9ICZwdHJbc3RhcnRPZmZzZXRdOworICAgICAgICAgICAgICAgIHNpemUgLT0gc3RhcnRPZmZzZXQ7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisKICAgICAgICAgICAgIGNhc2UgTVBFR19BVURJTzoKICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICB1aW50OF90ICpwdHIgPSAodWludDhfdCAqKWRhdGE7CkBAIC00OTQsNiArNjk5LDcgQEAKIAogdm9pZCBFbGVtZW50YXJ5U3RyZWFtUXVldWU6OmFwcGVuZFNjcmFtYmxlZERhdGEoCiAgICAgICAgIGNvbnN0IHZvaWQgKmRhdGEsIHNpemVfdCBzaXplLAorICAgICAgICBzaXplX3QgbGVhZGluZ0NsZWFyQnl0ZXMsCiAgICAgICAgIGludDMyX3Qga2V5SWQsIGJvb2wgaXNTeW5jLAogICAgICAgICBzcDxBQnVmZmVyPiBjbGVhclNpemVzLCBzcDxBQnVmZmVyPiBlbmNTaXplcykgewogICAgIGlmICghaXNTY3JhbWJsZWQoKSkgewpAQCAtNTIxLDYgKzcyNyw3IEBACiAKICAgICBTY3JhbWJsZWRSYW5nZUluZm8gc2NyYW1ibGVkSW5mbzsKICAgICBzY3JhbWJsZWRJbmZvLm1MZW5ndGggPSBzaXplOworICAgIHNjcmFtYmxlZEluZm8ubUxlYWRpbmdDbGVhckJ5dGVzID0gbGVhZGluZ0NsZWFyQnl0ZXM7CiAgICAgc2NyYW1ibGVkSW5mby5tS2V5SWQgPSBrZXlJZDsKICAgICBzY3JhbWJsZWRJbmZvLm1Jc1N5bmMgPSBpc1N5bmM7CiAgICAgc2NyYW1ibGVkSW5mby5tQ2xlYXJTaXplcyA9IGNsZWFyU2l6ZXM7CkBAIC01MzMsNyArNzQwLDYgQEAKIAogc3A8QUJ1ZmZlcj4gRWxlbWVudGFyeVN0cmVhbVF1ZXVlOjpkZXF1ZXVlU2NyYW1ibGVkQWNjZXNzVW5pdCgpIHsKICAgICBzaXplX3QgbmV4dFNjYW4gPSBtQnVmZmVyLT5zaXplKCk7Ci0gICAgbUJ1ZmZlci0+c2V0UmFuZ2UoMCwgMCk7CiAgICAgaW50MzJfdCBwZXNPZmZzZXQgPSAwLCBwZXNTY3JhbWJsaW5nQ29udHJvbCA9IDA7CiAgICAgaW50NjRfdCB0aW1lVXMgPSBmZXRjaFRpbWVzdGFtcChuZXh0U2NhbiwgJnBlc09mZnNldCwgJnBlc1NjcmFtYmxpbmdDb250cm9sKTsKICAgICBpZiAodGltZVVzIDwgMGxsKSB7CkBAIC01NDQsNiArNzUwLDcgQEAKICAgICAvLyByZXR1cm4gc2NyYW1ibGVkIHVuaXQKICAgICBpbnQzMl90IGtleUlkID0gcGVzU2NyYW1ibGluZ0NvbnRyb2wsIGlzU3luYyA9IDAsIHNjcmFtYmxlZExlbmd0aCA9IDA7CiAgICAgc3A8QUJ1ZmZlcj4gY2xlYXJTaXplcywgZW5jU2l6ZXM7CisgICAgc2l6ZV90IGxlYWRpbmdDbGVhckJ5dGVzOwogICAgIHdoaWxlIChtU2NyYW1ibGVkUmFuZ2VJbmZvcy5zaXplKCkgPiBtUmFuZ2VJbmZvcy5zaXplKCkpIHsKICAgICAgICAgYXV0byBpdCA9IG1TY3JhbWJsZWRSYW5nZUluZm9zLmJlZ2luKCk7CiAgICAgICAgIEFMT0dWKCJbc3RyZWFtICVkXSBmZXRjaGluZyBzY3JhbWJsZWQgcmFuZ2U6IHNpemU9JXp1IiwgbU1vZGUsIGl0LT5tTGVuZ3RoKTsKQEAgLTU2MSw2ICs3NjgsNyBAQAogICAgICAgICBjbGVhclNpemVzID0gaXQtPm1DbGVhclNpemVzOwogICAgICAgICBlbmNTaXplcyA9IGl0LT5tRW5jU2l6ZXM7CiAgICAgICAgIGlzU3luYyA9IGl0LT5tSXNTeW5jOworICAgICAgICBsZWFkaW5nQ2xlYXJCeXRlcyA9IGl0LT5tTGVhZGluZ0NsZWFyQnl0ZXM7CiAgICAgICAgIG1TY3JhbWJsZWRSYW5nZUluZm9zLmVyYXNlKGl0KTsKICAgICB9CiAgICAgaWYgKHNjcmFtYmxlZExlbmd0aCA9PSAwKSB7CkBAIC01NjgsMjYgKzc3Niw3NCBAQAogICAgICAgICByZXR1cm4gTlVMTDsKICAgICB9CiAKLSAgICAvLyBza2lwIHRoZSBQRVMgaGVhZGVyLCBhbmQgY29weSB0aGUgcmVzdCBpbnRvIHNjcmFtYmxlZCBhY2Nlc3MgdW5pdAotICAgIHNwPEFCdWZmZXI+IHNjcmFtYmxlZEFjY2Vzc1VuaXQgPSBBQnVmZmVyOjpDcmVhdGVBc0NvcHkoCi0gICAgICAgICAgICBtU2NyYW1ibGVkQnVmZmVyLT5kYXRhKCkgKyBwZXNPZmZzZXQsCi0gICAgICAgICAgICBzY3JhbWJsZWRMZW5ndGggLSBwZXNPZmZzZXQpOwotCi0gICAgLy8gZml4IHVwIGZpcnN0IHNhbXBsZSBzaXplIGFmdGVyIHNraXBwaW5nIHRoZSBQRVMgaGVhZGVyCi0gICAgaWYgKHBlc09mZnNldCA+IDApIHsKLSAgICAgICAgaW50MzJfdCAmZmlyc3RDbGVhclNpemUgPSAqKGludDMyX3QqKWNsZWFyU2l6ZXMtPmRhdGEoKTsKLSAgICAgICAgaW50MzJfdCAmZmlyc3RFbmNTaXplID0gKihpbnQzMl90KillbmNTaXplcy0+ZGF0YSgpOwotICAgICAgICAvLyBDdXQgYXdheSB0aGUgUEVTIGhlYWRlcgotICAgICAgICBpZiAoZmlyc3RDbGVhclNpemUgPj0gcGVzT2Zmc2V0KSB7Ci0gICAgICAgICAgICAvLyBUaGlzIGlzIGZvciBUUy1sZXZlbCBzY3JhbWJsaW5nLCB3ZSBkZXNjcmFtYmxlZCB0aGUgZmlyc3QKLSAgICAgICAgICAgIC8vIChvciBpdCB3YXMgY2xlYXIgdG8gYmVnaW4gd2l0aCkKLSAgICAgICAgICAgIGZpcnN0Q2xlYXJTaXplIC09IHBlc09mZnNldDsKLSAgICAgICAgfSBlbHNlIGlmIChmaXJzdEVuY1NpemUgPj0gcGVzT2Zmc2V0KSB7Ci0gICAgICAgICAgICAvLyBUaGlzIGNhbiBvbmx5IGJlIFBFUy1sZXZlbCBzY3JhbWJsaW5nCi0gICAgICAgICAgICBmaXJzdEVuY1NpemUgLT0gcGVzT2Zmc2V0OwotICAgICAgICB9CisgICAgLy8gUmV0cmlldmUgdGhlIGxlYWRpbmcgY2xlYXIgYnl0ZXMgaW5mbywgYW5kIHVzZSBpdCB0byBzZXQgdGhlIGNsZWFyCisgICAgLy8gcmFuZ2Ugb24gbUJ1ZmZlci4gTm90ZSB0aGF0IHRoZSBsZWFkaW5nIGNsZWFyIGJ5dGVzIGluY2x1ZGVzIHRoZQorICAgIC8vIFBFUyBoZWFkZXIgcG9ydGlvbiwgd2hpbGUgbUJ1ZmZlciBkb2Vzbid0LgorICAgIGlmICgoaW50MzJfdClsZWFkaW5nQ2xlYXJCeXRlcyA+IHBlc09mZnNldCkgeworICAgICAgICBtQnVmZmVyLT5zZXRSYW5nZSgwLCBsZWFkaW5nQ2xlYXJCeXRlcyAtIHBlc09mZnNldCk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgbUJ1ZmZlci0+c2V0UmFuZ2UoMCwgMCk7CiAgICAgfQogCisgICAgLy8gVHJ5IHRvIHBhcnNlIGZvcm1hdHMsIGFuZCBpZiB1bmF2YWlsYWJsZSBzZXQgdXAgYSBkdW1teSBmb3JtYXQuCisgICAgLy8gT25seSBzdXBwb3J0IHRoZSBmb2xsb3dpbmcgbW9kZXMgZm9yIHNjcmFtYmxlZCBjb250ZW50IGZvciBub3cuCisgICAgLy8gKHdpbGwgYmUgZXhwYW5kZWQgbGF0ZXIpLgorICAgIGlmIChtRm9ybWF0ID09IE5VTEwpIHsKKyAgICAgICAgbUZvcm1hdCA9IG5ldyBNZXRhRGF0YTsKKyAgICAgICAgc3dpdGNoIChtTW9kZSkgeworICAgICAgICAgICAgY2FzZSBIMjY0OgorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGlmICghTWFrZUFWQ0NvZGVjU3BlY2lmaWNEYXRhKAorICAgICAgICAgICAgICAgICAgICAgICAgKm1Gb3JtYXQsIG1CdWZmZXItPmRhdGEoKSwgbUJ1ZmZlci0+c2l6ZSgpKSkgeworICAgICAgICAgICAgICAgICAgICBBTE9HSSgiQ3JlYXRpbmcgZHVtbXkgQVZDIGZvcm1hdCBmb3Igc2NyYW1ibGVkIGNvbnRlbnQiKTsKKworICAgICAgICAgICAgICAgICAgICBtRm9ybWF0LT5zZXRDU3RyaW5nKGtLZXlNSU1FVHlwZSwgTUVESUFfTUlNRVRZUEVfVklERU9fQVZDKTsKKyAgICAgICAgICAgICAgICAgICAgbUZvcm1hdC0+c2V0SW50MzIoa0tleVdpZHRoLCAxMjgwKTsKKyAgICAgICAgICAgICAgICAgICAgbUZvcm1hdC0+c2V0SW50MzIoa0tleUhlaWdodCwgNzIwKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBjYXNlIEFBQzoKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBpZiAoIU1ha2VBQUNDb2RlY1NwZWNpZmljRGF0YSgKKyAgICAgICAgICAgICAgICAgICAgICAgICptRm9ybWF0LCBtQnVmZmVyLT5kYXRhKCksIG1CdWZmZXItPnNpemUoKSkpIHsKKyAgICAgICAgICAgICAgICAgICAgQUxPR0koIkNyZWF0aW5nIGR1bW15IEFBQyBmb3JtYXQgZm9yIHNjcmFtYmxlZCBjb250ZW50Iik7CisKKyAgICAgICAgICAgICAgICAgICAgTWFrZUFBQ0NvZGVjU3BlY2lmaWNEYXRhKCptRm9ybWF0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEgLypwcm9maWxlKi8sIDcgLypzYW1wbGluZ19mcmVxX2luZGV4Ki8sIDEgLypjaGFubmVsX2NvbmZpZyovKTsKKyAgICAgICAgICAgICAgICAgICAgbUZvcm1hdC0+c2V0SW50MzIoa0tleUlzQURUUywgdHJ1ZSk7CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBjYXNlIE1QRUdfVklERU86CisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgQUxPR0koIkNyZWF0aW5nIGR1bW15IE1QRUcgZm9ybWF0IGZvciBzY3JhbWJsZWQgY29udGVudCIpOworCisgICAgICAgICAgICAgICAgbUZvcm1hdC0+c2V0Q1N0cmluZyhrS2V5TUlNRVR5cGUsIE1FRElBX01JTUVUWVBFX1ZJREVPX01QRUcyKTsKKyAgICAgICAgICAgICAgICBtRm9ybWF0LT5zZXRJbnQzMihrS2V5V2lkdGgsIDEyODApOworICAgICAgICAgICAgICAgIG1Gb3JtYXQtPnNldEludDMyKGtLZXlIZWlnaHQsIDcyMCk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIEFMT0dFKCJVbmtub3duIG1vZGUgZm9yIHNjcmFtYmxlZCBjb250ZW50Iik7CisgICAgICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICAvLyBmb3IgTWVkaWFFeHRyYWN0b3IuQ2FzSW5mbworICAgICAgICBtRm9ybWF0LT5zZXRJbnQzMihrS2V5Q0FTeXN0ZW1JRCwgbUNBU3lzdGVtSWQpOworICAgICAgICBtRm9ybWF0LT5zZXREYXRhKGtLZXlDQVNlc3Npb25JRCwKKyAgICAgICAgICAgICAgICAwLCBtQ2FzU2Vzc2lvbklkLmRhdGEoKSwgbUNhc1Nlc3Npb25JZC5zaXplKCkpOworICAgIH0KKworICAgIG1CdWZmZXItPnNldFJhbmdlKDAsIDApOworCisgICAgLy8gY29weSBpbnRvIHNjcmFtYmxlZCBhY2Nlc3MgdW5pdAorICAgIHNwPEFCdWZmZXI+IHNjcmFtYmxlZEFjY2Vzc1VuaXQgPSBBQnVmZmVyOjpDcmVhdGVBc0NvcHkoCisgICAgICAgICAgICBtU2NyYW1ibGVkQnVmZmVyLT5kYXRhKCksIHNjcmFtYmxlZExlbmd0aCk7CisKICAgICBzY3JhbWJsZWRBY2Nlc3NVbml0LT5tZXRhKCktPnNldEludDY0KCJ0aW1lVXMiLCB0aW1lVXMpOwogICAgIGlmIChpc1N5bmMpIHsKICAgICAgICAgc2NyYW1ibGVkQWNjZXNzVW5pdC0+bWV0YSgpLT5zZXRJbnQzMigiaXNTeW5jIiwgMSk7CkBAIC02MDAsNiArODU2LDcgQEAKICAgICBzY3JhbWJsZWRBY2Nlc3NVbml0LT5tZXRhKCktPnNldEludDMyKCJjcnlwdG9LZXkiLCBrZXlJZCk7CiAgICAgc2NyYW1ibGVkQWNjZXNzVW5pdC0+bWV0YSgpLT5zZXRCdWZmZXIoImNsZWFyQnl0ZXMiLCBjbGVhclNpemVzKTsKICAgICBzY3JhbWJsZWRBY2Nlc3NVbml0LT5tZXRhKCktPnNldEJ1ZmZlcigiZW5jQnl0ZXMiLCBlbmNTaXplcyk7CisgICAgc2NyYW1ibGVkQWNjZXNzVW5pdC0+bWV0YSgpLT5zZXRJbnQzMigicGVzT2Zmc2V0IiwgcGVzT2Zmc2V0KTsKIAogICAgIG1lbW1vdmUobVNjcmFtYmxlZEJ1ZmZlci0+ZGF0YSgpLAogICAgICAgICAgICAgbVNjcmFtYmxlZEJ1ZmZlci0+ZGF0YSgpICsgc2NyYW1ibGVkTGVuZ3RoLApAQCAtNjE0LDcgKzg3MSwxMSBAQAogfQogCiBzcDxBQnVmZmVyPiBFbGVtZW50YXJ5U3RyZWFtUXVldWU6OmRlcXVldWVBY2Nlc3NVbml0KCkgewotICAgIGlmICgobUZsYWdzICYga0ZsYWdfQWxpZ25lZERhdGEpICYmIG1Nb2RlID09IEgyNjQgJiYgIWlzU2NyYW1ibGVkKCkpIHsKKyAgICBpZiAoaXNTY3JhbWJsZWQoKSkgeworICAgICAgICByZXR1cm4gZGVxdWV1ZVNjcmFtYmxlZEFjY2Vzc1VuaXQoKTsKKyAgICB9CisKKyAgICBpZiAoKG1GbGFncyAmIGtGbGFnX0FsaWduZWREYXRhKSAmJiBtTW9kZSA9PSBIMjY0KSB7CiAgICAgICAgIGlmIChtUmFuZ2VJbmZvcy5lbXB0eSgpKSB7CiAgICAgICAgICAgICByZXR1cm4gTlVMTDsKICAgICAgICAgfQpAQCAtNjQ4LDcgKzkwOSwxMCBAQAogICAgICAgICBjYXNlIEFBQzoKICAgICAgICAgICAgIHJldHVybiBkZXF1ZXVlQWNjZXNzVW5pdEFBQygpOwogICAgICAgICBjYXNlIEFDMzoKLSAgICAgICAgICAgIHJldHVybiBkZXF1ZXVlQWNjZXNzVW5pdEFDMygpOworICAgICAgICBjYXNlIEVBQzM6CisgICAgICAgICAgICByZXR1cm4gZGVxdWV1ZUFjY2Vzc1VuaXRFQUMzKCk7CisgICAgICAgIGNhc2UgQUM0OgorICAgICAgICAgICAgcmV0dXJuIGRlcXVldWVBY2Nlc3NVbml0QUM0KCk7CiAgICAgICAgIGNhc2UgTVBFR19WSURFTzoKICAgICAgICAgICAgIHJldHVybiBkZXF1ZXVlQWNjZXNzVW5pdE1QRUdWaWRlbygpOwogICAgICAgICBjYXNlIE1QRUc0X1ZJREVPOgpAQCAtNjY2LDM0ICs5MzAsMzggQEAKICAgICB9CiB9CiAKLXNwPEFCdWZmZXI+IEVsZW1lbnRhcnlTdHJlYW1RdWV1ZTo6ZGVxdWV1ZUFjY2Vzc1VuaXRBQzMoKSB7CitzcDxBQnVmZmVyPiBFbGVtZW50YXJ5U3RyZWFtUXVldWU6OmRlcXVldWVBY2Nlc3NVbml0RUFDMygpIHsKICAgICB1bnNpZ25lZCBzeW5jU3RhcnRQb3MgPSAwOyAgLy8gaW4gYnl0ZXMKICAgICB1bnNpZ25lZCBwYXlsb2FkU2l6ZSA9IDA7CiAgICAgc3A8TWV0YURhdGE+IGZvcm1hdCA9IG5ldyBNZXRhRGF0YTsKIAotICAgIEFMT0dWKCJkZXF1ZXVlQWNjZXNzVW5pdF9BQzNbJWRdOiBtQnVmZmVyICVwKCV6dSkiLCBtQVVJbmRleCwgbUJ1ZmZlci0+ZGF0YSgpLCBtQnVmZmVyLT5zaXplKCkpOworICAgIEFMT0dWKCJkZXF1ZXVlQWNjZXNzVW5pdEVBQzNbJWRdOiBtQnVmZmVyICVwKCV6dSkiLCBtQVVJbmRleCwKKyAgICAgICAgICAgIG1CdWZmZXItPmRhdGEoKSwgbUJ1ZmZlci0+c2l6ZSgpKTsKIAogICAgIHdoaWxlICh0cnVlKSB7CiAgICAgICAgIGlmIChzeW5jU3RhcnRQb3MgKyAyID49IG1CdWZmZXItPnNpemUoKSkgewogICAgICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgICAgIH0KIAotICAgICAgICBwYXlsb2FkU2l6ZSA9IHBhcnNlQUMzU3luY0ZyYW1lKAotICAgICAgICAgICAgICAgIG1CdWZmZXItPmRhdGEoKSArIHN5bmNTdGFydFBvcywKLSAgICAgICAgICAgICAgICBtQnVmZmVyLT5zaXplKCkgLSBzeW5jU3RhcnRQb3MsCi0gICAgICAgICAgICAgICAgJmZvcm1hdCk7CisgICAgICAgIHVpbnQ4X3QgKnB0ciA9IG1CdWZmZXItPmRhdGEoKSArIHN5bmNTdGFydFBvczsKKyAgICAgICAgc2l6ZV90IHNpemUgPSBtQnVmZmVyLT5zaXplKCkgLSBzeW5jU3RhcnRQb3M7CisgICAgICAgIGlmIChtTW9kZSA9PSBBQzMpIHsKKyAgICAgICAgICAgIHBheWxvYWRTaXplID0gcGFyc2VBQzNTeW5jRnJhbWUocHRyLCBzaXplLCAmZm9ybWF0KTsKKyAgICAgICAgfSBlbHNlIGlmIChtTW9kZSA9PSBFQUMzKSB7CisgICAgICAgICAgICBwYXlsb2FkU2l6ZSA9IHBhcnNlRUFDM1N5bmNGcmFtZShwdHIsIHNpemUsICZmb3JtYXQpOworICAgICAgICB9CiAgICAgICAgIGlmIChwYXlsb2FkU2l6ZSA+IDApIHsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAKLSAgICAgICAgQUxPR1YoImRlcXVldWVBY2Nlc3NVbml0X0FDM1slZF06IHN5bmNTdGFydFBvcyAldSBwYXlsb2FkU2l6ZSAldSIsCisgICAgICAgIEFMT0dWKCJkZXF1ZXVlQWNjZXNzVW5pdEVBQzNbJWRdOiBzeW5jU3RhcnRQb3MgJXUgcGF5bG9hZFNpemUgJXUiLAogICAgICAgICAgICAgICAgIG1BVUluZGV4LCBzeW5jU3RhcnRQb3MsIHBheWxvYWRTaXplKTsKIAogICAgICAgICArK3N5bmNTdGFydFBvczsKICAgICB9CiAKICAgICBpZiAobUJ1ZmZlci0+c2l6ZSgpIDwgc3luY1N0YXJ0UG9zICsgcGF5bG9hZFNpemUpIHsKLSAgICAgICAgQUxPR1YoIk5vdCBlbm91Z2ggYnVmZmVyIHNpemUgZm9yIEFDMyIpOworICAgICAgICBBTE9HVigiTm90IGVub3VnaCBidWZmZXIgc2l6ZSBmb3IgRS9BQzMiKTsKICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgfQogCkBAIC03MDEsNyArOTY5LDYgQEAKICAgICAgICAgbUZvcm1hdCA9IGZvcm1hdDsKICAgICB9CiAKLQogICAgIGludDY0X3QgdGltZVVzID0gZmV0Y2hUaW1lc3RhbXAoc3luY1N0YXJ0UG9zICsgcGF5bG9hZFNpemUpOwogICAgIGlmICh0aW1lVXMgPCAwbGwpIHsKICAgICAgICAgQUxPR0UoIm5lZ2F0aXZlIHRpbWVVcyIpOwpAQCAtNzEwLDcgKzk3NywxMiBAQAogCiAgICAgLy8gTm90IGRlY3J5cHRpbmcgaWYga2V5IGluZm8gbm90IGF2YWlsYWJsZSAoZS5nLiwgc2Nhbm5lci9leHRyYWN0b3IgcGFyc2luZyB0cyBmaWxlcykKICAgICBpZiAobVNhbXBsZURlY3J5cHRvciAhPSBOVUxMKSB7Ci0gICAgICAgIG1TYW1wbGVEZWNyeXB0b3ItPnByb2Nlc3NBQzMobUJ1ZmZlci0+ZGF0YSgpICsgc3luY1N0YXJ0UG9zLCBwYXlsb2FkU2l6ZSk7CisgICAgICAgIGlmIChtTW9kZSA9PSBBQzMpIHsKKyAgICAgICAgICAgIG1TYW1wbGVEZWNyeXB0b3ItPnByb2Nlc3NBQzMobUJ1ZmZlci0+ZGF0YSgpICsgc3luY1N0YXJ0UG9zLCBwYXlsb2FkU2l6ZSk7CisgICAgICAgIH0gZWxzZSBpZiAobU1vZGUgPT0gRUFDMykgeworICAgICAgICAgICAgQUxPR0UoIkVBQzMgQVUgaXMgZW5jcnlwdGVkIGFuZCBkZWNyeXB0aW9uIGlzIG5vdCBzdXBwb3J0ZWQiKTsKKyAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgICAgICB9CiAgICAgfQogICAgIG1BVUluZGV4Kys7CiAKQEAgLTczMCw2ICsxMDAyLDY5IEBACiAgICAgcmV0dXJuIGFjY2Vzc1VuaXQ7CiB9CiAKK3NwPEFCdWZmZXI+IEVsZW1lbnRhcnlTdHJlYW1RdWV1ZTo6ZGVxdWV1ZUFjY2Vzc1VuaXRBQzQoKSB7CisgICAgdW5zaWduZWQgc3luY1N0YXJ0UG9zID0gMDsKKyAgICB1bnNpZ25lZCBwYXlsb2FkU2l6ZSA9IDA7CisgICAgc3A8TWV0YURhdGE+IGZvcm1hdCA9IG5ldyBNZXRhRGF0YTsKKyAgICBBTE9HVigiZGVxdWV1ZUFjY2Vzc1VuaXRfQUM0WyVkXTogbUJ1ZmZlciAlcCglenUpIiwgbUFVSW5kZXgsIG1CdWZmZXItPmRhdGEoKSwgbUJ1ZmZlci0+c2l6ZSgpKTsKKworICAgIC8vIEEgdmFsaWQgQUM0IHN0cmVhbSBzaG91bGQgaGF2ZSBtaW5pbXVtIG9mIDcgYnl0ZXMgaW4gaXRzIGJ1ZmZlci4KKyAgICAvLyAoU3luYyBoZWFkZXIgNCBieXRlcyArIEFDNCB0b2MgMyBieXRlcykKKyAgICBpZiAobUJ1ZmZlci0+c2l6ZSgpIDwgNykgeworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisKKyAgICB3aGlsZSAodHJ1ZSkgeworICAgICAgICBpZiAoc3luY1N0YXJ0UG9zICsgMiA+PSBtQnVmZmVyLT5zaXplKCkpIHsKKyAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgICAgICB9CisKKyAgICAgICAgc3RhdHVzX3Qgc3RhdHVzID0gcGFyc2VBQzRTeW5jRnJhbWUoCisgICAgICAgICAgICAgICAgICAgIG1CdWZmZXItPmRhdGEoKSArIHN5bmNTdGFydFBvcywKKyAgICAgICAgICAgICAgICAgICAgbUJ1ZmZlci0+c2l6ZSgpIC0gc3luY1N0YXJ0UG9zLAorICAgICAgICAgICAgICAgICAgICBwYXlsb2FkU2l6ZSwKKyAgICAgICAgICAgICAgICAgICAgJmZvcm1hdCk7CisgICAgICAgIGlmIChzdGF0dXMgPT0gT0spIHsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICAgICAgQUxPR1YoImRlcXVldWVBY2Nlc3NVbml0X0FDNFslZF06IHN5bmNTdGFydFBvcyAldSBwYXlsb2FkU2l6ZSAldSIsCisgICAgICAgICAgICAgICAgbUFVSW5kZXgsIHN5bmNTdGFydFBvcywgcGF5bG9hZFNpemUpOworCisgICAgICAgICsrc3luY1N0YXJ0UG9zOworICAgIH0KKworICAgIGlmIChtQnVmZmVyLT5zaXplKCkgPCBzeW5jU3RhcnRQb3MgKyBwYXlsb2FkU2l6ZSkgeworICAgICAgICBBTE9HVigiTm90IGVub3VnaCBidWZmZXIgc2l6ZSBmb3IgQUM0Iik7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKworICAgIGlmIChtRm9ybWF0ID09IE5VTEwpIHsKKyAgICAgICAgbUZvcm1hdCA9IGZvcm1hdDsKKyAgICB9CisKKyAgICBpbnQ2NF90IHRpbWVVcyA9IGZldGNoVGltZXN0YW1wKHN5bmNTdGFydFBvcyArIHBheWxvYWRTaXplKTsKKyAgICBpZiAodGltZVVzIDwgMGxsKSB7CisgICAgICAgIEFMT0dFKCJuZWdhdGl2ZSB0aW1lVXMiKTsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorICAgIG1BVUluZGV4Kys7CisKKyAgICBzcDxBQnVmZmVyPiBhY2Nlc3NVbml0ID0gbmV3IEFCdWZmZXIoc3luY1N0YXJ0UG9zICsgcGF5bG9hZFNpemUpOworICAgIG1lbWNweShhY2Nlc3NVbml0LT5kYXRhKCksIG1CdWZmZXItPmRhdGEoKSwgc3luY1N0YXJ0UG9zICsgcGF5bG9hZFNpemUpOworCisgICAgYWNjZXNzVW5pdC0+bWV0YSgpLT5zZXRJbnQ2NCgidGltZVVzIiwgdGltZVVzKTsKKyAgICBhY2Nlc3NVbml0LT5tZXRhKCktPnNldEludDMyKCJpc1N5bmMiLCAxKTsKKworICAgIG1lbW1vdmUoCisgICAgICAgICAgICBtQnVmZmVyLT5kYXRhKCksCisgICAgICAgICAgICBtQnVmZmVyLT5kYXRhKCkgKyBzeW5jU3RhcnRQb3MgKyBwYXlsb2FkU2l6ZSwKKyAgICAgICAgICAgIG1CdWZmZXItPnNpemUoKSAtIHN5bmNTdGFydFBvcyAtIHBheWxvYWRTaXplKTsKKworICAgIG1CdWZmZXItPnNldFJhbmdlKDAsIG1CdWZmZXItPnNpemUoKSAtIHN5bmNTdGFydFBvcyAtIHBheWxvYWRTaXplKTsKKyAgICByZXR1cm4gYWNjZXNzVW5pdDsKK30KKwogc3A8QUJ1ZmZlcj4gRWxlbWVudGFyeVN0cmVhbVF1ZXVlOjpkZXF1ZXVlQWNjZXNzVW5pdFBDTUF1ZGlvKCkgewogICAgIGlmIChtQnVmZmVyLT5zaXplKCkgPCA0KSB7CiAgICAgICAgIHJldHVybiBOVUxMOwpAQCAtODUxLDI1ICsxMTg2LDExIEBACiAgICAgICAgIGJvb2wgcHJvdGVjdGlvbl9hYnNlbnQgPSBiaXRzLmdldEJpdHMoMSkgIT0gMDsKIAogICAgICAgICBpZiAobUZvcm1hdCA9PSBOVUxMKSB7Ci0gICAgICAgICAgICB1bnNpZ25lZCBwcm9maWxlID0gYml0cy5nZXRCaXRzKDIpOwotICAgICAgICAgICAgaWYgKHByb2ZpbGUgPT0gM3UpIHsKLSAgICAgICAgICAgICAgICBBTE9HRSgicHJvZmlsZSBzaG91bGQgbm90IGJlIDMiKTsKLSAgICAgICAgICAgICAgICByZXR1cm4gTlVMTDsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHVuc2lnbmVkIHNhbXBsaW5nX2ZyZXFfaW5kZXggPSBiaXRzLmdldEJpdHMoNCk7Ci0gICAgICAgICAgICBiaXRzLmdldEJpdHMoMSk7ICAvLyBwcml2YXRlX2JpdAotICAgICAgICAgICAgdW5zaWduZWQgY2hhbm5lbF9jb25maWd1cmF0aW9uID0gYml0cy5nZXRCaXRzKDMpOwotICAgICAgICAgICAgaWYgKGNoYW5uZWxfY29uZmlndXJhdGlvbiA9PSAwdSkgewotICAgICAgICAgICAgICAgIEFMT0dFKCJjaGFubmVsX2NvbmZpZyBzaG91bGQgbm90IGJlIDAiKTsKLSAgICAgICAgICAgICAgICByZXR1cm4gTlVMTDsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGJpdHMuc2tpcEJpdHMoMik7ICAvLyBvcmlnaW5hbF9jb3B5LCBob21lCi0KICAgICAgICAgICAgIG1Gb3JtYXQgPSBuZXcgTWV0YURhdGE7Ci0gICAgICAgICAgICBNYWtlQUFDQ29kZWNTcGVjaWZpY0RhdGEoKm1Gb3JtYXQsCi0gICAgICAgICAgICAgICAgICAgIHByb2ZpbGUsIHNhbXBsaW5nX2ZyZXFfaW5kZXgsIGNoYW5uZWxfY29uZmlndXJhdGlvbik7Ci0KLSAgICAgICAgICAgIG1Gb3JtYXQtPnNldEludDMyKGtLZXlJc0FEVFMsIHRydWUpOworICAgICAgICAgICAgaWYgKCFNYWtlQUFDQ29kZWNTcGVjaWZpY0RhdGEoCisgICAgICAgICAgICAgICAgICAgICptRm9ybWF0LCBtQnVmZmVyLT5kYXRhKCkgKyBvZmZzZXQsIG1CdWZmZXItPnNpemUoKSAtIG9mZnNldCkpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgaW50MzJfdCBzYW1wbGVSYXRlOwogICAgICAgICAgICAgaW50MzJfdCBudW1DaGFubmVsczsKQEAgLTg4NCwxMiArMTIwNSwxMiBAQAogCiAgICAgICAgICAgICBBTE9HSSgiZm91bmQgQUFDIGNvZGVjIGNvbmZpZyAoJWQgSHosICVkIGNoYW5uZWxzKSIsCiAgICAgICAgICAgICAgICAgIHNhbXBsZVJhdGUsIG51bUNoYW5uZWxzKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIC8vIHByb2ZpbGVfT2JqZWN0VHlwZSwgc2FtcGxpbmdfZnJlcXVlbmN5X2luZGV4LCBwcml2YXRlX2JpdHMsCi0gICAgICAgICAgICAvLyBjaGFubmVsX2NvbmZpZ3VyYXRpb24sIG9yaWdpbmFsX2NvcHksIGhvbWUKLSAgICAgICAgICAgIGJpdHMuc2tpcEJpdHMoMTIpOwogICAgICAgICB9CiAKKyAgICAgICAgLy8gcHJvZmlsZV9PYmplY3RUeXBlLCBzYW1wbGluZ19mcmVxdWVuY3lfaW5kZXgsIHByaXZhdGVfYml0cywKKyAgICAgICAgLy8gY2hhbm5lbF9jb25maWd1cmF0aW9uLCBvcmlnaW5hbF9jb3B5LCBob21lCisgICAgICAgIGJpdHMuc2tpcEJpdHMoMTIpOworCiAgICAgICAgIC8vIGFkdHNfdmFyaWFibGVfaGVhZGVyCiAKICAgICAgICAgLy8gY29weXJpZ2h0X2lkZW50aWZpY2F0aW9uX2JpdCwgY29weXJpZ2h0X2lkZW50aWZpY2F0aW9uX3N0YXJ0CkBAIC0xMDA0LDI3ICsxMzI1LDYgQEAKIH0KIAogc3A8QUJ1ZmZlcj4gRWxlbWVudGFyeVN0cmVhbVF1ZXVlOjpkZXF1ZXVlQWNjZXNzVW5pdEgyNjQoKSB7Ci0gICAgaWYgKGlzU2NyYW1ibGVkKCkpIHsKLSAgICAgICAgaWYgKG1CdWZmZXIgPT0gTlVMTCB8fCBtQnVmZmVyLT5zaXplKCkgPT0gMCkgewotICAgICAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKG1Gb3JtYXQgPT0gTlVMTCkgewotICAgICAgICAgICAgbUZvcm1hdCA9IG5ldyBNZXRhRGF0YTsKLSAgICAgICAgICAgIGlmICghTWFrZUFWQ0NvZGVjU3BlY2lmaWNEYXRhKCptRm9ybWF0LCBtQnVmZmVyLT5kYXRhKCksIG1CdWZmZXItPnNpemUoKSkpIHsKLSAgICAgICAgICAgICAgICBBTE9HVygiQ3JlYXRpbmcgZHVtbXkgQVZDIGZvcm1hdCBmb3Igc2NyYW1ibGVkIGNvbnRlbnQiKTsKLSAgICAgICAgICAgICAgICBtRm9ybWF0ID0gbmV3IE1ldGFEYXRhOwotICAgICAgICAgICAgICAgIG1Gb3JtYXQtPnNldENTdHJpbmcoa0tleU1JTUVUeXBlLCBNRURJQV9NSU1FVFlQRV9WSURFT19BVkMpOwotICAgICAgICAgICAgICAgIG1Gb3JtYXQtPnNldEludDMyKGtLZXlXaWR0aCwgMTI4MCk7Ci0gICAgICAgICAgICAgICAgbUZvcm1hdC0+c2V0SW50MzIoa0tleUhlaWdodCwgNzIwKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIC8vIGZvciBNZWRpYUV4dHJhY3Rvci5DYXNJbmZvCi0gICAgICAgICAgICBtRm9ybWF0LT5zZXRJbnQzMihrS2V5Q0FTeXN0ZW1JRCwgbUNBU3lzdGVtSWQpOwotICAgICAgICAgICAgbUZvcm1hdC0+c2V0RGF0YShrS2V5Q0FTZXNzaW9uSUQsIDAsCi0gICAgICAgICAgICAgICAgICAgIG1DYXNTZXNzaW9uSWQuZGF0YSgpLCBtQ2FzU2Vzc2lvbklkLnNpemUoKSk7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIGRlcXVldWVTY3JhbWJsZWRBY2Nlc3NVbml0KCk7Ci0gICAgfQotCiAgICAgY29uc3QgdWludDhfdCAqZGF0YSA9IG1CdWZmZXItPmRhdGEoKTsKIAogICAgIHNpemVfdCBzaXplID0gbUJ1ZmZlci0+c2l6ZSgpOwpAQCAtMTMyNCwyNSArMTYyNCw2IEBACiB9CiAKIHNwPEFCdWZmZXI+IEVsZW1lbnRhcnlTdHJlYW1RdWV1ZTo6ZGVxdWV1ZUFjY2Vzc1VuaXRNUEVHVmlkZW8oKSB7Ci0gICAgaWYgKGlzU2NyYW1ibGVkKCkpIHsKLSAgICAgICAgaWYgKG1CdWZmZXIgPT0gTlVMTCB8fCBtQnVmZmVyLT5zaXplKCkgPT0gMCkgewotICAgICAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKG1Gb3JtYXQgPT0gTlVMTCkgewotICAgICAgICAgICAgQUxPR0koIkNyZWF0aW5nIGR1bW15IE1QRUcgZm9ybWF0IGZvciBzY3JhbWJsZWQgY29udGVudCIpOwotICAgICAgICAgICAgbUZvcm1hdCA9IG5ldyBNZXRhRGF0YTsKLSAgICAgICAgICAgIG1Gb3JtYXQtPnNldENTdHJpbmcoa0tleU1JTUVUeXBlLCBNRURJQV9NSU1FVFlQRV9WSURFT19NUEVHMik7Ci0gICAgICAgICAgICBtRm9ybWF0LT5zZXRJbnQzMihrS2V5V2lkdGgsIDEyODApOwotICAgICAgICAgICAgbUZvcm1hdC0+c2V0SW50MzIoa0tleUhlaWdodCwgNzIwKTsKLQotICAgICAgICAgICAgLy8gZm9yIE1lZGlhRXh0cmFjdG9yLkNhc0luZm8KLSAgICAgICAgICAgIG1Gb3JtYXQtPnNldEludDMyKGtLZXlDQVN5c3RlbUlELCBtQ0FTeXN0ZW1JZCk7Ci0gICAgICAgICAgICBtRm9ybWF0LT5zZXREYXRhKGtLZXlDQVNlc3Npb25JRCwgMCwKLSAgICAgICAgICAgICAgICAgICAgbUNhc1Nlc3Npb25JZC5kYXRhKCksIG1DYXNTZXNzaW9uSWQuc2l6ZSgpKTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gZGVxdWV1ZVNjcmFtYmxlZEFjY2Vzc1VuaXQoKTsKLSAgICB9Ci0KICAgICBjb25zdCB1aW50OF90ICpkYXRhID0gbUJ1ZmZlci0+ZGF0YSgpOwogICAgIHNpemVfdCBzaXplID0gbUJ1ZmZlci0+c2l6ZSgpOwogCmRpZmYgLS1naXQgYS9tZWRpYS9saWJzdGFnZWZyaWdodC9tcGVnMnRzL0VTUXVldWUuaCBiL21lZGlhL2xpYnN0YWdlZnJpZ2h0L21wZWcydHMvRVNRdWV1ZS5oCmluZGV4IGZmY2I1MDIuLjMyMjdmNDcgMTAwNjQ0Ci0tLSBhL21lZGlhL2xpYnN0YWdlZnJpZ2h0L21wZWcydHMvRVNRdWV1ZS5oCisrKyBiL21lZGlhL2xpYnN0YWdlZnJpZ2h0L21wZWcydHMvRVNRdWV1ZS5oCkBAIC0zOCw2ICszOCw4IEBACiAgICAgICAgIEgyNjQsCiAgICAgICAgIEFBQywKICAgICAgICAgQUMzLAorICAgICAgICBFQUMzLAorICAgICAgICBBQzQsCiAgICAgICAgIE1QRUdfQVVESU8sCiAgICAgICAgIE1QRUdfVklERU8sCiAgICAgICAgIE1QRUc0X1ZJREVPLApAQCAtNTksNiArNjEsNyBAQAogCiAgICAgdm9pZCBhcHBlbmRTY3JhbWJsZWREYXRhKAogICAgICAgICAgICAgY29uc3Qgdm9pZCAqZGF0YSwgc2l6ZV90IHNpemUsCisgICAgICAgICAgICBzaXplX3QgbGVhZGluZ0NsZWFyQnl0ZXMsCiAgICAgICAgICAgICBpbnQzMl90IGtleUlkLCBib29sIGlzU3luYywKICAgICAgICAgICAgIHNwPEFCdWZmZXI+IGNsZWFyU2l6ZXMsIHNwPEFCdWZmZXI+IGVuY1NpemVzKTsKIApAQCAtODQsOCArODcsOCBAQAogICAgIH07CiAKICAgICBzdHJ1Y3QgU2NyYW1ibGVkUmFuZ2VJbmZvIHsKLSAgICAgICAgLy9pbnQ2NF90IG1UaW1lc3RhbXBVczsKICAgICAgICAgc2l6ZV90IG1MZW5ndGg7CisgICAgICAgIHNpemVfdCBtTGVhZGluZ0NsZWFyQnl0ZXM7CiAgICAgICAgIGludDMyX3QgbUtleUlkOwogICAgICAgICBpbnQzMl90IG1Jc1N5bmM7CiAgICAgICAgIHNwPEFCdWZmZXI+IG1DbGVhclNpemVzOwpAQCAtMTE1LDcgKzExOCw4IEBACiAKICAgICBzcDxBQnVmZmVyPiBkZXF1ZXVlQWNjZXNzVW5pdEgyNjQoKTsKICAgICBzcDxBQnVmZmVyPiBkZXF1ZXVlQWNjZXNzVW5pdEFBQygpOwotICAgIHNwPEFCdWZmZXI+IGRlcXVldWVBY2Nlc3NVbml0QUMzKCk7CisgICAgc3A8QUJ1ZmZlcj4gZGVxdWV1ZUFjY2Vzc1VuaXRFQUMzKCk7CisgICAgc3A8QUJ1ZmZlcj4gZGVxdWV1ZUFjY2Vzc1VuaXRBQzQoKTsKICAgICBzcDxBQnVmZmVyPiBkZXF1ZXVlQWNjZXNzVW5pdE1QRUdBdWRpbygpOwogICAgIHNwPEFCdWZmZXI+IGRlcXVldWVBY2Nlc3NVbml0TVBFR1ZpZGVvKCk7CiAgICAgc3A8QUJ1ZmZlcj4gZGVxdWV1ZUFjY2Vzc1VuaXRNUEVHNFZpZGVvKCk7CmRpZmYgLS1naXQgYS9tZWRpYS9saWJzdGFnZWZyaWdodC9vbXgvT01YVXRpbHMuY3BwIGIvbWVkaWEvbGlic3RhZ2VmcmlnaHQvb214L09NWFV0aWxzLmNwcAppbmRleCA5ZWQ0YTk5Li5jNDk5Yzc3IDEwMDY0NAotLS0gYS9tZWRpYS9saWJzdGFnZWZyaWdodC9vbXgvT01YVXRpbHMuY3BwCisrKyBiL21lZGlhL2xpYnN0YWdlZnJpZ2h0L29teC9PTVhVdGlscy5jcHAKQEAgLTE2NCw2ICsxNjQsOCBAQAogICAgICAgICAgICAgImF1ZGlvX2RlY29kZXIuYWMzIiwgImF1ZGlvX2VuY29kZXIuYWMzIiB9LAogICAgICAgICB7IE1FRElBX01JTUVUWVBFX0FVRElPX0VBQzMsCiAgICAgICAgICAgICAiYXVkaW9fZGVjb2Rlci5lYWMzIiwgImF1ZGlvX2VuY29kZXIuZWFjMyIgfSwKKyAgICAgICAgeyBNRURJQV9NSU1FVFlQRV9BVURJT19BQzQsCisgICAgICAgICAgICAiYXVkaW9fZGVjb2Rlci5hYzQiLCAiYXVkaW9fZW5jb2Rlci5hYzQiIH0sCiAgICAgICAgIHsgTUVESUFfTUlNRVRZUEVfSU1BR0VfQU5EUk9JRF9IRUlDLAogICAgICAgICAgICAgImltYWdlX2RlY29kZXIuaGVpYyIsICJpbWFnZV9lbmNvZGVyLmhlaWMiIH0sCiAgICAgfTsKZGlmZiAtLWdpdCBhL21lZGlhL2xpYnN0YWdlZnJpZ2h0L29teC9Tb2Z0VmlkZW9EZWNvZGVyT01YQ29tcG9uZW50LmNwcCBiL21lZGlhL2xpYnN0YWdlZnJpZ2h0L29teC9Tb2Z0VmlkZW9EZWNvZGVyT01YQ29tcG9uZW50LmNwcAppbmRleCA5MzVkYzM0Li5mOWY3ZWMyIDEwMDY0NAotLS0gYS9tZWRpYS9saWJzdGFnZWZyaWdodC9vbXgvU29mdFZpZGVvRGVjb2Rlck9NWENvbXBvbmVudC5jcHAKKysrIGIvbWVkaWEvbGlic3RhZ2VmcmlnaHQvb214L1NvZnRWaWRlb0RlY29kZXJPTVhDb21wb25lbnQuY3BwCkBAIC0xNTQsMTIgKzE1NCwxMiBAQAogICAgIG91dERlZi0+Zm9ybWF0LnZpZGVvLm5GcmFtZVdpZHRoID0gb3V0cHV0QnVmZmVyV2lkdGgoKTsKICAgICBvdXREZWYtPmZvcm1hdC52aWRlby5uRnJhbWVIZWlnaHQgPSBvdXRwdXRCdWZmZXJIZWlnaHQoKTsKICAgICBvdXREZWYtPmZvcm1hdC52aWRlby5lQ29sb3JGb3JtYXQgPSBtT3V0cHV0Rm9ybWF0OwotICAgIG91dERlZi0+Zm9ybWF0LnZpZGVvLm5TdHJpZGUgPSBvdXREZWYtPmZvcm1hdC52aWRlby5uRnJhbWVXaWR0aDsKICAgICBvdXREZWYtPmZvcm1hdC52aWRlby5uU2xpY2VIZWlnaHQgPSBvdXREZWYtPmZvcm1hdC52aWRlby5uRnJhbWVIZWlnaHQ7CiAKICAgICBpbnQzMl90IGJwcCA9IChtT3V0cHV0Rm9ybWF0ID09IE9NWF9DT0xPUl9Gb3JtYXRZVVY0MjBQbGFuYXIxNikgPyAyIDogMTsKKyAgICBvdXREZWYtPmZvcm1hdC52aWRlby5uU3RyaWRlID0gb3V0RGVmLT5mb3JtYXQudmlkZW8ubkZyYW1lV2lkdGggKiBicHA7CiAgICAgb3V0RGVmLT5uQnVmZmVyU2l6ZSA9Ci0gICAgICAgIChvdXREZWYtPmZvcm1hdC52aWRlby5uU3RyaWRlICogb3V0RGVmLT5mb3JtYXQudmlkZW8ublNsaWNlSGVpZ2h0ICogYnBwICogMykgLyAyOworICAgICAgICAgICAgKG91dERlZi0+Zm9ybWF0LnZpZGVvLm5TdHJpZGUgKiBvdXREZWYtPmZvcm1hdC52aWRlby5uU2xpY2VIZWlnaHQgKiAzKSAvIDI7CiAKICAgICBPTVhfUEFSQU1fUE9SVERFRklOSVRJT05UWVBFICppbkRlZiA9ICZlZGl0UG9ydEluZm8oa0lucHV0UG9ydEluZGV4KS0+bURlZjsKICAgICBpbkRlZi0+Zm9ybWF0LnZpZGVvLm5GcmFtZVdpZHRoID0gbVdpZHRoOwpAQCAtNTAyLDcgKzUwMiw4IEBACiAgICAgICAgICAgICAvLyBUaGVzZSB2YWx1ZXMgd2VyZSBjaG9zZW4gdG8gcHJldmVudCBpbnRlZ2VyIG92ZXJmbG93cyBmdXJ0aGVyIGRvd24gdGhlIGxpbmUsIGFuZCBkbwogICAgICAgICAgICAgLy8gbm90IGluZGljYXRlIHN1cHBvcnQgZm9yIDMya3gzMmsgdmlkZW8uCiAgICAgICAgICAgICBpZiAobmV3V2lkdGggPiAzMjc2OCB8fCBuZXdIZWlnaHQgPiAzMjc2OAotICAgICAgICAgICAgICAgICAgICB8fCB2aWRlb19kZWYtPm5TdHJpZGUgPiAzMjc2OCB8fCB2aWRlb19kZWYtPm5TbGljZUhlaWdodCA+IDMyNzY4KSB7CisgICAgICAgICAgICAgICAgICAgIHx8IHZpZGVvX2RlZi0+blN0cmlkZSA+IDMyNzY4IHx8IHZpZGVvX2RlZi0+blN0cmlkZSA8IC0zMjc2OAorICAgICAgICAgICAgICAgICAgICB8fCB2aWRlb19kZWYtPm5TbGljZUhlaWdodCA+IDMyNzY4KSB7CiAgICAgICAgICAgICAgICAgQUxPR0UoImIvMjI4ODU0MjEiKTsKICAgICAgICAgICAgICAgICByZXR1cm4gT01YX0Vycm9yQmFkUGFyYW1ldGVyOwogICAgICAgICAgICAgfQpkaWZmIC0tZ2l0IGEvbWVkaWEvbGlic3RhZ2VmcmlnaHQvb214L2luY2x1ZGUvbWVkaWEvc3RhZ2VmcmlnaHQvb214LzEuMC9Db252ZXJzaW9uLmggYi9tZWRpYS9saWJzdGFnZWZyaWdodC9vbXgvaW5jbHVkZS9tZWRpYS9zdGFnZWZyaWdodC9vbXgvMS4wL0NvbnZlcnNpb24uaAppbmRleCBhOWZjZTU1Li4wZjIyOWY3IDEwMDY0NAotLS0gYS9tZWRpYS9saWJzdGFnZWZyaWdodC9vbXgvaW5jbHVkZS9tZWRpYS9zdGFnZWZyaWdodC9vbXgvMS4wL0NvbnZlcnNpb24uaAorKysgYi9tZWRpYS9saWJzdGFnZWZyaWdodC9vbXgvaW5jbHVkZS9tZWRpYS9zdGFnZWZyaWdodC9vbXgvMS4wL0NvbnZlcnNpb24uaApAQCAtMTkwLDcgKzE5MCwxMiBAQAogICovCiAvLyBjb252ZXJ0OiBTdGF0dXMgLT4gc3RhdHVzX3QKIGlubGluZSBzdGF0dXNfdCB0b1N0YXR1c1QoUmV0dXJuPFN0YXR1cz4gY29uc3QmIHQpIHsKLSAgICByZXR1cm4gdC5pc09rKCkgPyB0b1N0YXR1c1Qoc3RhdGljX2Nhc3Q8U3RhdHVzPih0KSkgOiBVTktOT1dOX0VSUk9SOworICAgIGlmICh0LmlzT2soKSkgeworICAgICAgICByZXR1cm4gdG9TdGF0dXNUKHN0YXRpY19jYXN0PFN0YXR1cz4odCkpOworICAgIH0gZWxzZSBpZiAodC5pc0RlYWRPYmplY3QoKSkgeworICAgICAgICByZXR1cm4gREVBRF9PQkpFQ1Q7CisgICAgfQorICAgIHJldHVybiBVTktOT1dOX0VSUk9SOwogfQogCiAvKioKZGlmZiAtLWdpdCBhL21lZGlhL2xpYnN0YWdlZnJpZ2h0L29teC90ZXN0cy9BbmRyb2lkLmJwIGIvbWVkaWEvbGlic3RhZ2VmcmlnaHQvb214L3Rlc3RzL0FuZHJvaWQuYnAKaW5kZXggZWYzNjk4Mi4uMzFiYzgzNyAxMDA2NDQKLS0tIGEvbWVkaWEvbGlic3RhZ2VmcmlnaHQvb214L3Rlc3RzL0FuZHJvaWQuYnAKKysrIGIvbWVkaWEvbGlic3RhZ2VmcmlnaHQvb214L3Rlc3RzL0FuZHJvaWQuYnAKQEAgLTI5LDYgKzI5LDcgQEAKIAogICAgIGhlYWRlcl9saWJzOiBbCiAgICAgICAgICJsaWJiYXNlX2hlYWRlcnMiLAorICAgICAgICAibWVkaWFfbmRrX2hlYWRlcnMiLAogICAgIF0sCiAKICAgICBjZmxhZ3M6IFsKZGlmZiAtLWdpdCBhL21lZGlhL2xpYnN0YWdlZnJpZ2h0L29teC90ZXN0cy9PTVhIYXJuZXNzLmNwcCBiL21lZGlhL2xpYnN0YWdlZnJpZ2h0L29teC90ZXN0cy9PTVhIYXJuZXNzLmNwcAppbmRleCAxNWE3NjU1Li5jMmYxMDcyIDEwMDY0NAotLS0gYS9tZWRpYS9saWJzdGFnZWZyaWdodC9vbXgvdGVzdHMvT01YSGFybmVzcy5jcHAKKysrIGIvbWVkaWEvbGlic3RhZ2VmcmlnaHQvb214L3Rlc3RzL09NWEhhcm5lc3MuY3BwCkBAIC0yOSw3ICsyOSw2IEBACiAjaW5jbHVkZSA8Y3V0aWxzL3Byb3BlcnRpZXMuaD4KICNpbmNsdWRlIDxtZWRpYS9EYXRhU291cmNlLmg+CiAjaW5jbHVkZSA8bWVkaWEvSU1lZGlhSFRUUFNlcnZpY2UuaD4KLSNpbmNsdWRlIDxtZWRpYS9NZWRpYUV4dHJhY3Rvci5oPgogI2luY2x1ZGUgPG1lZGlhL01lZGlhU291cmNlLmg+CiAjaW5jbHVkZSA8bWVkaWEvT01YQnVmZmVyLmg+CiAjaW5jbHVkZSA8bWVkaWEvc3RhZ2VmcmlnaHQvZm91bmRhdGlvbi9BRGVidWcuaD4KZGlmZiAtLWdpdCBhL21lZGlhL2xpYnN0YWdlZnJpZ2h0L3J0c3AvQVJUU1BDb25uZWN0aW9uLmNwcCBiL21lZGlhL2xpYnN0YWdlZnJpZ2h0L3J0c3AvQVJUU1BDb25uZWN0aW9uLmNwcAppbmRleCA1NjIwY2Y4Li4zM2MxYzE4IDEwMDY0NAotLS0gYS9tZWRpYS9saWJzdGFnZWZyaWdodC9ydHNwL0FSVFNQQ29ubmVjdGlvbi5jcHAKKysrIGIvbWVkaWEvbGlic3RhZ2VmcmlnaHQvcnRzcC9BUlRTUENvbm5lY3Rpb24uY3BwCkBAIC0xOSw2ICsxOSw3IEBACiAjaW5jbHVkZSA8dXRpbHMvTG9nLmg+CiAKICNpbmNsdWRlICJBUlRTUENvbm5lY3Rpb24uaCIKKyNpbmNsdWRlICJOZXR3b3JrVXRpbHMuaCIKIAogI2luY2x1ZGUgPG1lZGlhL3N0YWdlZnJpZ2h0L2ZvdW5kYXRpb24vQUJ1ZmZlci5oPgogI2luY2x1ZGUgPG1lZGlhL3N0YWdlZnJpZ2h0L2ZvdW5kYXRpb24vQURlYnVnLmg+CkBAIC01OSw4ICs2MCw4IEBACiAgICAgaWYgKG1Tb2NrZXQgPj0gMCkgewogICAgICAgICBBTE9HRSgiQ29ubmVjdGlvbiBpcyBzdGlsbCBvcGVuLCBjbG9zaW5nIHRoZSBzb2NrZXQuIik7CiAgICAgICAgIGlmIChtVUlEVmFsaWQpIHsKLSAgICAgICAgICAgIEhUVFBCYXNlOjpVblJlZ2lzdGVyU29ja2V0VXNlclRhZyhtU29ja2V0KTsKLSAgICAgICAgICAgIEhUVFBCYXNlOjpVblJlZ2lzdGVyU29ja2V0VXNlck1hcmsobVNvY2tldCk7CisgICAgICAgICAgICBOZXR3b3JrVXRpbHM6OlVuUmVnaXN0ZXJTb2NrZXRVc2VyVGFnKG1Tb2NrZXQpOworICAgICAgICAgICAgTmV0d29ya1V0aWxzOjpVblJlZ2lzdGVyU29ja2V0VXNlck1hcmsobVNvY2tldCk7CiAgICAgICAgIH0KICAgICAgICAgY2xvc2UobVNvY2tldCk7CiAgICAgICAgIG1Tb2NrZXQgPSAtMTsKQEAgLTIxNCw4ICsyMTUsOCBAQAogCiAgICAgaWYgKG1TdGF0ZSAhPSBESVNDT05ORUNURUQpIHsKICAgICAgICAgaWYgKG1VSURWYWxpZCkgewotICAgICAgICAgICAgSFRUUEJhc2U6OlVuUmVnaXN0ZXJTb2NrZXRVc2VyVGFnKG1Tb2NrZXQpOwotICAgICAgICAgICAgSFRUUEJhc2U6OlVuUmVnaXN0ZXJTb2NrZXRVc2VyTWFyayhtU29ja2V0KTsKKyAgICAgICAgICAgIE5ldHdvcmtVdGlsczo6VW5SZWdpc3RlclNvY2tldFVzZXJUYWcobVNvY2tldCk7CisgICAgICAgICAgICBOZXR3b3JrVXRpbHM6OlVuUmVnaXN0ZXJTb2NrZXRVc2VyTWFyayhtU29ja2V0KTsKICAgICAgICAgfQogICAgICAgICBjbG9zZShtU29ja2V0KTsKICAgICAgICAgbVNvY2tldCA9IC0xOwpAQCAtMjY2LDkgKzI2Nyw5IEBACiAgICAgbVNvY2tldCA9IHNvY2tldChBRl9JTkVULCBTT0NLX1NUUkVBTSwgMCk7CiAKICAgICBpZiAobVVJRFZhbGlkKSB7Ci0gICAgICAgIEhUVFBCYXNlOjpSZWdpc3RlclNvY2tldFVzZXJUYWcobVNvY2tldCwgbVVJRCwKKyAgICAgICAgTmV0d29ya1V0aWxzOjpSZWdpc3RlclNvY2tldFVzZXJUYWcobVNvY2tldCwgbVVJRCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodWludDMyX3QpKih1aW50MzJfdCopICJSVFNQIik7Ci0gICAgICAgIEhUVFBCYXNlOjpSZWdpc3RlclNvY2tldFVzZXJNYXJrKG1Tb2NrZXQsIG1VSUQpOworICAgICAgICBOZXR3b3JrVXRpbHM6OlJlZ2lzdGVyU29ja2V0VXNlck1hcmsobVNvY2tldCwgbVVJRCk7CiAgICAgfQogCiAgICAgTWFrZVNvY2tldEJsb2NraW5nKG1Tb2NrZXQsIGZhbHNlKTsKQEAgLTI5Nyw4ICsyOTgsOCBAQAogICAgICAgICBtU3RhdGUgPSBESVNDT05ORUNURUQ7CiAKICAgICAgICAgaWYgKG1VSURWYWxpZCkgewotICAgICAgICAgICAgSFRUUEJhc2U6OlVuUmVnaXN0ZXJTb2NrZXRVc2VyVGFnKG1Tb2NrZXQpOwotICAgICAgICAgICAgSFRUUEJhc2U6OlVuUmVnaXN0ZXJTb2NrZXRVc2VyTWFyayhtU29ja2V0KTsKKyAgICAgICAgICAgIE5ldHdvcmtVdGlsczo6VW5SZWdpc3RlclNvY2tldFVzZXJUYWcobVNvY2tldCk7CisgICAgICAgICAgICBOZXR3b3JrVXRpbHM6OlVuUmVnaXN0ZXJTb2NrZXRVc2VyTWFyayhtU29ja2V0KTsKICAgICAgICAgfQogICAgICAgICBjbG9zZShtU29ja2V0KTsKICAgICAgICAgbVNvY2tldCA9IC0xOwpAQCAtMzE1LDggKzMxNiw4IEBACiAKIHZvaWQgQVJUU1BDb25uZWN0aW9uOjpwZXJmb3JtRGlzY29ubmVjdCgpIHsKICAgICBpZiAobVVJRFZhbGlkKSB7Ci0gICAgICAgIEhUVFBCYXNlOjpVblJlZ2lzdGVyU29ja2V0VXNlclRhZyhtU29ja2V0KTsKLSAgICAgICAgSFRUUEJhc2U6OlVuUmVnaXN0ZXJTb2NrZXRVc2VyTWFyayhtU29ja2V0KTsKKyAgICAgICAgTmV0d29ya1V0aWxzOjpVblJlZ2lzdGVyU29ja2V0VXNlclRhZyhtU29ja2V0KTsKKyAgICAgICAgTmV0d29ya1V0aWxzOjpVblJlZ2lzdGVyU29ja2V0VXNlck1hcmsobVNvY2tldCk7CiAgICAgfQogICAgIGNsb3NlKG1Tb2NrZXQpOwogICAgIG1Tb2NrZXQgPSAtMTsKQEAgLTM4OSw4ICszOTAsOCBAQAogCiAgICAgICAgIG1TdGF0ZSA9IERJU0NPTk5FQ1RFRDsKICAgICAgICAgaWYgKG1VSURWYWxpZCkgewotICAgICAgICAgICAgSFRUUEJhc2U6OlVuUmVnaXN0ZXJTb2NrZXRVc2VyVGFnKG1Tb2NrZXQpOwotICAgICAgICAgICAgSFRUUEJhc2U6OlVuUmVnaXN0ZXJTb2NrZXRVc2VyTWFyayhtU29ja2V0KTsKKyAgICAgICAgICAgIE5ldHdvcmtVdGlsczo6VW5SZWdpc3RlclNvY2tldFVzZXJUYWcobVNvY2tldCk7CisgICAgICAgICAgICBOZXR3b3JrVXRpbHM6OlVuUmVnaXN0ZXJTb2NrZXRVc2VyTWFyayhtU29ja2V0KTsKICAgICAgICAgfQogICAgICAgICBjbG9zZShtU29ja2V0KTsKICAgICAgICAgbVNvY2tldCA9IC0xOwpkaWZmIC0tZ2l0IGEvbWVkaWEvbGlic3RhZ2VmcmlnaHQvcnRzcC9BbmRyb2lkLmJwIGIvbWVkaWEvbGlic3RhZ2VmcmlnaHQvcnRzcC9BbmRyb2lkLmJwCmluZGV4IGRlYmQwN2UuLmQxNzY3ZDMgMTAwNjQ0Ci0tLSBhL21lZGlhL2xpYnN0YWdlZnJpZ2h0L3J0c3AvQW5kcm9pZC5icAorKysgYi9tZWRpYS9saWJzdGFnZWZyaWdodC9ydHNwL0FuZHJvaWQuYnAKQEAgLTEsNSArMSw1IEBACi1jY19saWJyYXJ5X3N0YXRpYyB7Ci0gICAgbmFtZTogImxpYnN0YWdlZnJpZ2h0X3J0c3AiLAorY2NfZGVmYXVsdHMgeworICAgIG5hbWU6ICJsaWJzdGFnZWZyaWdodF9ydHNwX2RlZmF1bHRzIiwKIAogICAgIHNyY3M6IFsKICAgICAgICAgIkFBTVJBc3NlbWJsZXIuY3BwIiwKQEAgLTUyLDYgKzUyLDIxIEBACiAgICAgfSwKIH0KIAorY2NfbGlicmFyeV9zdGF0aWMgeworICAgIG5hbWU6ICJsaWJzdGFnZWZyaWdodF9ydHNwIiwKKworICAgIHNyY3M6IFsiTmV0d29ya1V0aWxzLmNwcCJdLAorICAgIGhlYWRlcl9saWJzOiBbImxpYm5ldGRfY2xpZW50X2hlYWRlcnMiXSwKKyAgICBkZWZhdWx0czogWyJsaWJzdGFnZWZyaWdodF9ydHNwX2RlZmF1bHRzIl0sCit9CisKK2NjX2xpYnJhcnlfc3RhdGljIHsKKyAgICBuYW1lOiAibGlic3RhZ2VmcmlnaHRfcnRzcF9wbGF5ZXIyIiwKKworICAgIHNyY3M6IFsiTmV0d29ya1V0aWxzRm9yQXBwUHJvYy5jcHAiXSwKKyAgICBkZWZhdWx0czogWyJsaWJzdGFnZWZyaWdodF9ydHNwX2RlZmF1bHRzIl0sCit9CisKIC8vIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwogCiBjY190ZXN0IHsKZGlmZiAtLWdpdCBhL21lZGlhL2xpYnN0YWdlZnJpZ2h0L3J0c3AvTXlIYW5kbGVyLmggYi9tZWRpYS9saWJzdGFnZWZyaWdodC9ydHNwL015SGFuZGxlci5oCmluZGV4IGQxODM1MTYuLjVkOTkzZGIgMTAwNjQ0Ci0tLSBhL21lZGlhL2xpYnN0YWdlZnJpZ2h0L3J0c3AvTXlIYW5kbGVyLmgKKysrIGIvbWVkaWEvbGlic3RhZ2VmcmlnaHQvcnRzcC9NeUhhbmRsZXIuaApAQCAtMzEsNiArMzEsNyBAQAogI2luY2x1ZGUgIkFSVFBDb25uZWN0aW9uLmgiCiAjaW5jbHVkZSAiQVJUU1BDb25uZWN0aW9uLmgiCiAjaW5jbHVkZSAiQVNlc3Npb25EZXNjcmlwdGlvbi5oIgorI2luY2x1ZGUgIk5ldHdvcmtVdGlscy5oIgogCiAjaW5jbHVkZSA8Y3R5cGUuaD4KICNpbmNsdWRlIDxjdXRpbHMvcHJvcGVydGllcy5oPgpAQCAtNzU3LDEwICs3NTgsMTAgQEAKICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghdHJhY2stPm1Vc2luZ0ludGVybGVhdmVkVENQKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gQ2xlYXIgdGhlIHRhZwogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtVUlEVmFsaWQpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSFRUUEJhc2U6OlVuUmVnaXN0ZXJTb2NrZXRVc2VyVGFnKHRyYWNrLT5tUlRQU29ja2V0KTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSFRUUEJhc2U6OlVuUmVnaXN0ZXJTb2NrZXRVc2VyTWFyayh0cmFjay0+bVJUUFNvY2tldCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEhUVFBCYXNlOjpVblJlZ2lzdGVyU29ja2V0VXNlclRhZyh0cmFjay0+bVJUQ1BTb2NrZXQpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBIVFRQQmFzZTo6VW5SZWdpc3RlclNvY2tldFVzZXJNYXJrKHRyYWNrLT5tUlRDUFNvY2tldCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5ldHdvcmtVdGlsczo6VW5SZWdpc3RlclNvY2tldFVzZXJUYWcodHJhY2stPm1SVFBTb2NrZXQpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOZXR3b3JrVXRpbHM6OlVuUmVnaXN0ZXJTb2NrZXRVc2VyTWFyayh0cmFjay0+bVJUUFNvY2tldCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5ldHdvcmtVdGlsczo6VW5SZWdpc3RlclNvY2tldFVzZXJUYWcodHJhY2stPm1SVENQU29ja2V0KTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTmV0d29ya1V0aWxzOjpVblJlZ2lzdGVyU29ja2V0VXNlck1hcmsodHJhY2stPm1SVENQU29ja2V0KTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbG9zZSh0cmFjay0+bVJUUFNvY2tldCk7CkBAIC04ODYsMTAgKzg4NywxMCBAQAogCiAgICAgICAgICAgICAgICAgICAgICAgICAvLyBDbGVhciB0aGUgdGFnCiAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobVVJRFZhbGlkKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgSFRUUEJhc2U6OlVuUmVnaXN0ZXJTb2NrZXRVc2VyVGFnKGluZm8tPm1SVFBTb2NrZXQpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIEhUVFBCYXNlOjpVblJlZ2lzdGVyU29ja2V0VXNlck1hcmsoaW5mby0+bVJUUFNvY2tldCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgSFRUUEJhc2U6OlVuUmVnaXN0ZXJTb2NrZXRVc2VyVGFnKGluZm8tPm1SVENQU29ja2V0KTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBIVFRQQmFzZTo6VW5SZWdpc3RlclNvY2tldFVzZXJNYXJrKGluZm8tPm1SVENQU29ja2V0KTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBOZXR3b3JrVXRpbHM6OlVuUmVnaXN0ZXJTb2NrZXRVc2VyVGFnKGluZm8tPm1SVFBTb2NrZXQpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5ldHdvcmtVdGlsczo6VW5SZWdpc3RlclNvY2tldFVzZXJNYXJrKGluZm8tPm1SVFBTb2NrZXQpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5ldHdvcmtVdGlsczo6VW5SZWdpc3RlclNvY2tldFVzZXJUYWcoaW5mby0+bVJUQ1BTb2NrZXQpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5ldHdvcmtVdGlsczo6VW5SZWdpc3RlclNvY2tldFVzZXJNYXJrKGluZm8tPm1SVENQU29ja2V0KTsKICAgICAgICAgICAgICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgICAgICAgICAgICAgY2xvc2UoaW5mby0+bVJUUFNvY2tldCk7CkBAIC0xNjY1LDEyICsxNjY2LDEyIEBACiAgICAgICAgICAgICAgICAgICAgICZpbmZvLT5tUlRQU29ja2V0LCAmaW5mby0+bVJUQ1BTb2NrZXQsICZydHBQb3J0KTsKIAogICAgICAgICAgICAgaWYgKG1VSURWYWxpZCkgewotICAgICAgICAgICAgICAgIEhUVFBCYXNlOjpSZWdpc3RlclNvY2tldFVzZXJUYWcoaW5mby0+bVJUUFNvY2tldCwgbVVJRCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh1aW50MzJfdCkqKHVpbnQzMl90KikgIlJUUF8iKTsKLSAgICAgICAgICAgICAgICBIVFRQQmFzZTo6UmVnaXN0ZXJTb2NrZXRVc2VyVGFnKGluZm8tPm1SVENQU29ja2V0LCBtVUlELAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHVpbnQzMl90KSoodWludDMyX3QqKSAiUlRQXyIpOwotICAgICAgICAgICAgICAgIEhUVFBCYXNlOjpSZWdpc3RlclNvY2tldFVzZXJNYXJrKGluZm8tPm1SVFBTb2NrZXQsIG1VSUQpOwotICAgICAgICAgICAgICAgIEhUVFBCYXNlOjpSZWdpc3RlclNvY2tldFVzZXJNYXJrKGluZm8tPm1SVENQU29ja2V0LCBtVUlEKTsKKyAgICAgICAgICAgICAgICBOZXR3b3JrVXRpbHM6OlJlZ2lzdGVyU29ja2V0VXNlclRhZyhpbmZvLT5tUlRQU29ja2V0LCBtVUlELAorICAgICAgICAgICAgICAgICAgICAgICAgKHVpbnQzMl90KSoodWludDMyX3QqKSAiUlRQXyIpOworICAgICAgICAgICAgICAgIE5ldHdvcmtVdGlsczo6UmVnaXN0ZXJTb2NrZXRVc2VyVGFnKGluZm8tPm1SVENQU29ja2V0LCBtVUlELAorICAgICAgICAgICAgICAgICAgICAgICAgKHVpbnQzMl90KSoodWludDMyX3QqKSAiUlRQXyIpOworICAgICAgICAgICAgICAgIE5ldHdvcmtVdGlsczo6UmVnaXN0ZXJTb2NrZXRVc2VyTWFyayhpbmZvLT5tUlRQU29ja2V0LCBtVUlEKTsKKyAgICAgICAgICAgICAgICBOZXR3b3JrVXRpbHM6OlJlZ2lzdGVyU29ja2V0VXNlck1hcmsoaW5mby0+bVJUQ1BTb2NrZXQsIG1VSUQpOwogICAgICAgICAgICAgfQogCiAgICAgICAgICAgICByZXF1ZXN0LmFwcGVuZCgiVHJhbnNwb3J0OiBSVFAvQVZQL1VEUDt1bmljYXN0O2NsaWVudF9wb3J0PSIpOwpkaWZmIC0tZ2l0IGEvbWVkaWEvbGlic3RhZ2VmcmlnaHQvcnRzcC9OZXR3b3JrVXRpbHMuY3BwIGIvbWVkaWEvbGlic3RhZ2VmcmlnaHQvcnRzcC9OZXR3b3JrVXRpbHMuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNjMzZiNzgKLS0tIC9kZXYvbnVsbAorKysgYi9tZWRpYS9saWJzdGFnZWZyaWdodC9ydHNwL05ldHdvcmtVdGlscy5jcHAKQEAgLTAsMCArMSw1MyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxOCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCisKKy8vI2RlZmluZSBMT0dfTkRFQlVHIDAKKyNkZWZpbmUgTE9HX1RBRyAiTmV0d29ya1V0aWxzIgorI2luY2x1ZGUgPHV0aWxzL0xvZy5oPgorCisjaW5jbHVkZSAiTmV0d29ya1V0aWxzLmgiCisjaW5jbHVkZSA8Y3V0aWxzL3F0YWd1aWQuaD4KKyNpbmNsdWRlIDxOZXRkQ2xpZW50Lmg+CisKK25hbWVzcGFjZSBhbmRyb2lkIHsKKworLy8gc3RhdGljCit2b2lkIE5ldHdvcmtVdGlsczo6UmVnaXN0ZXJTb2NrZXRVc2VyVGFnKGludCBzb2NrZmQsIHVpZF90IHVpZCwgdWludDMyX3Qga1RhZykgeworICAgIGludCByZXMgPSBxdGFndWlkX3RhZ1NvY2tldChzb2NrZmQsIGtUYWcsIHVpZCk7CisgICAgaWYgKHJlcyAhPSAwKSB7CisgICAgICAgIEFMT0dFKCJGYWlsZWQgdGFnZ2luZyBzb2NrZXQgJWQgZm9yIHVpZCAlZCAoTXkgVUlEPSVkKSIsIHNvY2tmZCwgdWlkLCBnZXRldWlkKCkpOworICAgIH0KK30KKworLy8gc3RhdGljCit2b2lkIE5ldHdvcmtVdGlsczo6VW5SZWdpc3RlclNvY2tldFVzZXJUYWcoaW50IHNvY2tmZCkgeworICAgIGludCByZXMgPSBxdGFndWlkX3VudGFnU29ja2V0KHNvY2tmZCk7CisgICAgaWYgKHJlcyAhPSAwKSB7CisgICAgICAgIEFMT0dFKCJGYWlsZWQgdW50YWdnaW5nIHNvY2tldCAlZCAoTXkgVUlEPSVkKSIsIHNvY2tmZCwgZ2V0ZXVpZCgpKTsKKyAgICB9Cit9CisKKy8vIHN0YXRpYwordm9pZCBOZXR3b3JrVXRpbHM6OlJlZ2lzdGVyU29ja2V0VXNlck1hcmsoaW50IHNvY2tmZCwgdWlkX3QgdWlkKSB7CisgICAgc2V0TmV0d29ya0ZvclVzZXIodWlkLCBzb2NrZmQpOworfQorCisvLyBzdGF0aWMKK3ZvaWQgTmV0d29ya1V0aWxzOjpVblJlZ2lzdGVyU29ja2V0VXNlck1hcmsoaW50IHNvY2tmZCkgeworICAgIFJlZ2lzdGVyU29ja2V0VXNlck1hcmsoc29ja2ZkLCBnZXRldWlkKCkpOworfQorCit9ICAvLyBuYW1lc3BhY2UgYW5kcm9pZApkaWZmIC0tZ2l0IGEvbWVkaWEvbGlic3RhZ2VmcmlnaHQvcnRzcC9OZXR3b3JrVXRpbHMuaCBiL21lZGlhL2xpYnN0YWdlZnJpZ2h0L3J0c3AvTmV0d29ya1V0aWxzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTI1ZWU0NgotLS0gL2Rldi9udWxsCisrKyBiL21lZGlhL2xpYnN0YWdlZnJpZ2h0L3J0c3AvTmV0d29ya1V0aWxzLmgKQEAgLTAsMCArMSwzMiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxOCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCisKKyNpZm5kZWYgTkVUV09SS19VVElMU19IXworI2RlZmluZSBORVRXT1JLX1VUSUxTX0hfCisKK25hbWVzcGFjZSBhbmRyb2lkIHsKKworc3RydWN0IE5ldHdvcmtVdGlscyB7CisgICAgc3RhdGljIHZvaWQgUmVnaXN0ZXJTb2NrZXRVc2VyVGFnKGludCBzb2NrZmQsIHVpZF90IHVpZCwgdWludDMyX3Qga1RhZyk7CisgICAgc3RhdGljIHZvaWQgVW5SZWdpc3RlclNvY2tldFVzZXJUYWcoaW50IHNvY2tmZCk7CisKKyAgICBzdGF0aWMgdm9pZCBSZWdpc3RlclNvY2tldFVzZXJNYXJrKGludCBzb2NrZmQsIHVpZF90IHVpZCk7CisgICAgc3RhdGljIHZvaWQgVW5SZWdpc3RlclNvY2tldFVzZXJNYXJrKGludCBzb2NrZmQpOworfTsKKworfSAgLy8gbmFtZXNwYWNlIGFuZHJvaWQKKworI2VuZGlmICAvLyBORVRXT1JLX1VUSUxTX0hfCmRpZmYgLS1naXQgYS9tZWRpYS9saWJzdGFnZWZyaWdodC9ydHNwL05ldHdvcmtVdGlsc0ZvckFwcFByb2MuY3BwIGIvbWVkaWEvbGlic3RhZ2VmcmlnaHQvcnRzcC9OZXR3b3JrVXRpbHNGb3JBcHBQcm9jLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42NjIxNTljCi0tLSAvZGV2L251bGwKKysrIGIvbWVkaWEvbGlic3RhZ2VmcmlnaHQvcnRzcC9OZXR3b3JrVXRpbHNGb3JBcHBQcm9jLmNwcApAQCAtMCwwICsxLDQ2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE4IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KKworLy8jZGVmaW5lIExPR19OREVCVUcgMAorI2RlZmluZSBMT0dfVEFHICJOZXR3b3JrVXRpbHMiCisjaW5jbHVkZSA8dXRpbHMvTG9nLmg+CisKKyNpbmNsdWRlICJOZXR3b3JrVXRpbHMuaCIKKworLy8gTmV0d29ya1V0aWxzIGltcGxlbWVudGF0aW9uIGZvciBhcHBsaWNhdGlvbiBwcm9jZXNzLgorbmFtZXNwYWNlIGFuZHJvaWQgeworCisvLyBzdGF0aWMKK3ZvaWQgTmV0d29ya1V0aWxzOjpSZWdpc3RlclNvY2tldFVzZXJUYWcoaW50LCB1aWRfdCwgdWludDMyX3QpIHsKKyAgICAvLyBObyBvcC4gRnJhbWV3b3JrIGFscmVhZHkgaGFuZGxlcyB0aGUgZGF0YSB1c2FnZSBiaWxsaW5nIGZvciBhcHBsaWNhdGlvbnMuCit9CisKKy8vIHN0YXRpYwordm9pZCBOZXR3b3JrVXRpbHM6OlVuUmVnaXN0ZXJTb2NrZXRVc2VyVGFnKGludCkgeworICAgIC8vIE5vIG9wLgorfQorCisvLyBzdGF0aWMKK3ZvaWQgTmV0d29ya1V0aWxzOjpSZWdpc3RlclNvY2tldFVzZXJNYXJrKGludCwgdWlkX3QpIHsKKyAgICAvLyBObyBvcC4gRnJhbWV3b3JrIGFscmVhZHkgaGFuZGxlcyB0aGUgZGF0YSB1c2FnZSBiaWxsaW5nIGZvciBhcHBsaWNhdGlvbnMuCit9CisKKy8vIHN0YXRpYwordm9pZCBOZXR3b3JrVXRpbHM6OlVuUmVnaXN0ZXJTb2NrZXRVc2VyTWFyayhpbnQpIHsKKyAgICAvLyBObyBvcC4KK30KKworfSAgLy8gbmFtZXNwYWNlIGFuZHJvaWQKZGlmZiAtLWdpdCBhL21lZGlhL2xpYnN0YWdlZnJpZ2h0L3J0c3AvU0RQTG9hZGVyLmNwcCBiL21lZGlhL2xpYnN0YWdlZnJpZ2h0L3J0c3AvU0RQTG9hZGVyLmNwcAppbmRleCBkNDU5Y2JkLi42NjVkNTFhIDEwMDY0NAotLS0gYS9tZWRpYS9saWJzdGFnZWZyaWdodC9ydHNwL1NEUExvYWRlci5jcHAKKysrIGIvbWVkaWEvbGlic3RhZ2VmcmlnaHQvcnRzcC9TRFBMb2FkZXIuY3BwCkBAIC0yNCw3ICsyNCw3IEBACiAKICNpbmNsdWRlIDxtZWRpYS9NZWRpYUhUVFBDb25uZWN0aW9uLmg+CiAjaW5jbHVkZSA8bWVkaWEvTWVkaWFIVFRQU2VydmljZS5oPgotI2luY2x1ZGUgPG1lZGlhL3N0YWdlZnJpZ2h0L01lZGlhSFRUUC5oPgorI2luY2x1ZGUgPG1lZGlhL3N0YWdlZnJpZ2h0L0NsZWFyTWVkaWFIVFRQLmg+CiAjaW5jbHVkZSA8bWVkaWEvc3RhZ2VmcmlnaHQvZm91bmRhdGlvbi9BQnVmZmVyLmg+CiAjaW5jbHVkZSA8bWVkaWEvc3RhZ2VmcmlnaHQvZm91bmRhdGlvbi9BRGVidWcuaD4KICNpbmNsdWRlIDxtZWRpYS9zdGFnZWZyaWdodC9VdGlscy5oPgpAQCAtNDEsNyArNDEsNyBAQAogICAgICAgbUZsYWdzKGZsYWdzKSwKICAgICAgIG1OZXRMb29wZXIobmV3IEFMb29wZXIpLAogICAgICAgbUNhbmNlbGxlZChmYWxzZSksCi0gICAgICBtSFRUUERhdGFTb3VyY2UobmV3IE1lZGlhSFRUUChodHRwU2VydmljZS0+bWFrZUhUVFBDb25uZWN0aW9uKCkpKSB7CisgICAgICBtSFRUUERhdGFTb3VyY2UobmV3IENsZWFyTWVkaWFIVFRQKGh0dHBTZXJ2aWNlLT5tYWtlSFRUUENvbm5lY3Rpb24oKSkpIHsKICAgICBtTmV0TG9vcGVyLT5zZXROYW1lKCJzZHAgbmV0Iik7CiAgICAgbU5ldExvb3Blci0+c3RhcnQoZmFsc2UgLyogcnVuT25DYWxsaW5nVGhyZWFkICovLAogICAgICAgICAgICAgICAgICAgICAgIGZhbHNlIC8qIGNhbkNhbGxKYXZhICovLApkaWZmIC0tZ2l0IGEvbWVkaWEvbGlic3RhZ2VmcmlnaHQvdGltZWR0ZXh0L0FuZHJvaWQuYnAgYi9tZWRpYS9saWJzdGFnZWZyaWdodC90aW1lZHRleHQvQW5kcm9pZC5icAppbmRleCBhNWFkNmM2Li43YzUxMzMzIDEwMDY0NAotLS0gYS9tZWRpYS9saWJzdGFnZWZyaWdodC90aW1lZHRleHQvQW5kcm9pZC5icAorKysgYi9tZWRpYS9saWJzdGFnZWZyaWdodC90aW1lZHRleHQvQW5kcm9pZC5icApAQCAtMjUsMyArMjUsMzYgQEAKIAogICAgIHNoYXJlZF9saWJzOiBbImxpYm1lZGlhIl0sCiB9CisKK2NjX2xpYnJhcnlfc3RhdGljIHsKKyAgICBuYW1lOiAibGlic3RhZ2VmcmlnaHRfdGltZWR0ZXh0MiIsCisKKyAgICBzcmNzOiBbIlRleHREZXNjcmlwdGlvbnMyLmNwcCJdLAorCisgICAgc3RhdGljX2xpYnM6IFsKKyAgICAgICAgImxpYm1lZGlhcGxheWVyMi1wcm90b3MiLAorICAgICAgICAibGlicHJvdG9idWYtY3BwLWxpdGUiLAorICAgIF0sCisKKyAgICBjZmxhZ3M6IFsKKyAgICAgICAgIi1Xbm8tbXVsdGljaGFyIiwKKyAgICAgICAgIi1XZXJyb3IiLAorICAgICAgICAiLVdhbGwiLAorICAgIF0sCisKKyAgICBzYW5pdGl6ZTogeworICAgICAgICBtaXNjX3VuZGVmaW5lZDogWworICAgICAgICAgICAgInNpZ25lZC1pbnRlZ2VyLW92ZXJmbG93IiwKKyAgICAgICAgXSwKKyAgICAgICAgY2ZpOiB0cnVlLAorICAgICAgICBkaWFnOiB7CisgICAgICAgICAgICBjZmk6IHRydWUsCisgICAgICAgIH0sCisgICAgfSwKKworICAgIGluY2x1ZGVfZGlyczogWworICAgICAgICAiZnJhbWV3b3Jrcy9hdi9tZWRpYS9saWJzdGFnZWZyaWdodCIsCisgICAgXSwKKworICAgIHNoYXJlZF9saWJzOiBbImxpYm1lZGlhIl0sCit9CmRpZmYgLS1naXQgYS9tZWRpYS9saWJzdGFnZWZyaWdodC90aW1lZHRleHQvVGV4dERlc2NyaXB0aW9uczIuY3BwIGIvbWVkaWEvbGlic3RhZ2VmcmlnaHQvdGltZWR0ZXh0L1RleHREZXNjcmlwdGlvbnMyLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNDhlYWNjCi0tLSAvZGV2L251bGwKKysrIGIvbWVkaWEvbGlic3RhZ2VmcmlnaHQvdGltZWR0ZXh0L1RleHREZXNjcmlwdGlvbnMyLmNwcApAQCAtMCwwICsxLDE4OCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxOCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCisKKyNpbmNsdWRlICJUZXh0RGVzY3JpcHRpb25zMi5oIgorI2luY2x1ZGUgPG1lZGlhL3N0YWdlZnJpZ2h0L2ZvdW5kYXRpb24vQnl0ZVV0aWxzLmg+CisjaW5jbHVkZSA8bWVkaWEvc3RhZ2VmcmlnaHQvTWVkaWFFcnJvcnMuaD4KKworbmFtZXNwYWNlIGFuZHJvaWQgeworCitUZXh0RGVzY3JpcHRpb25zMjo6VGV4dERlc2NyaXB0aW9uczIoKSB7Cit9CisKK3N0YXR1c190IFRleHREZXNjcmlwdGlvbnMyOjpnZXRQbGF5ZXJNZXNzYWdlT2ZEZXNjcmlwdGlvbnMoCisgICAgICAgIGNvbnN0IHVpbnQ4X3QgKmRhdGEsIHNzaXplX3Qgc2l6ZSwKKyAgICAgICAgdWludDMyX3QgZmxhZ3MsIGludCB0aW1lTXMsIFBsYXllck1lc3NhZ2UgKnBsYXllck1zZykgeworICAgIGlmIChmbGFncyAmIElOX0JBTkRfVEVYVF8zR1BQKSB7CisgICAgICAgIGlmIChmbGFncyAmIEdMT0JBTF9ERVNDUklQVElPTlMpIHsKKyAgICAgICAgICAgIHJldHVybiBleHRyYWN0M0dQUEdsb2JhbERlc2NyaXB0aW9ucyhkYXRhLCBzaXplLCBwbGF5ZXJNc2cpOworICAgICAgICB9IGVsc2UgaWYgKGZsYWdzICYgTE9DQUxfREVTQ1JJUFRJT05TKSB7CisgICAgICAgICAgICByZXR1cm4gZXh0cmFjdDNHUFBMb2NhbERlc2NyaXB0aW9ucyhkYXRhLCBzaXplLCB0aW1lTXMsIHBsYXllck1zZyk7CisgICAgICAgIH0KKyAgICB9IGVsc2UgaWYgKGZsYWdzICYgT1VUX09GX0JBTkRfVEVYVF9TUlQpIHsKKyAgICAgICAgaWYgKGZsYWdzICYgTE9DQUxfREVTQ1JJUFRJT05TKSB7CisgICAgICAgICAgICByZXR1cm4gZXh0cmFjdFNSVExvY2FsRGVzY3JpcHRpb25zKGRhdGEsIHNpemUsIHRpbWVNcywgcGxheWVyTXNnKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHJldHVybiBFUlJPUl9VTlNVUFBPUlRFRDsKK30KKworLy8gUGFyc2UgdGhlIFNSVCB0ZXh0IHNhbXBsZSwgYW5kIHN0b3JlIHRoZSB0aW1pbmcgYW5kIHRleHQgc2FtcGxlIGluIGEgUGxheWVyTWVzc2FnZS4KKy8vIFRoZSBQbGF5ZXJNZXNzYWdlIHdpbGwgYmUgc2VudCB0byBNZWRpYVBsYXllcjIuamF2YSB0aHJvdWdoIGV2ZW50LCBhbmQgd2lsbCBiZQorLy8gcGFyc2VkIGluIFRpbWVkVGV4dC5qYXZhLgorc3RhdHVzX3QgVGV4dERlc2NyaXB0aW9uczI6OmV4dHJhY3RTUlRMb2NhbERlc2NyaXB0aW9ucygKKyAgICAgICAgY29uc3QgdWludDhfdCAqZGF0YSwgc3NpemVfdCBzaXplLCBpbnQgdGltZU1zLCBQbGF5ZXJNZXNzYWdlICpwbGF5ZXJNc2cpIHsKKyAgICBwbGF5ZXJNc2ctPmFkZF92YWx1ZXMoKS0+c2V0X2ludDMyX3ZhbHVlKEtFWV9MT0NBTF9TRVRUSU5HKTsKKyAgICBwbGF5ZXJNc2ctPmFkZF92YWx1ZXMoKS0+c2V0X2ludDMyX3ZhbHVlKEtFWV9TVEFSVF9USU1FKTsKKyAgICBwbGF5ZXJNc2ctPmFkZF92YWx1ZXMoKS0+c2V0X2ludDMyX3ZhbHVlKHRpbWVNcyk7CisKKyAgICBwbGF5ZXJNc2ctPmFkZF92YWx1ZXMoKS0+c2V0X2ludDMyX3ZhbHVlKEtFWV9TVFJVQ1RfVEVYVCk7CisgICAgcGxheWVyTXNnLT5hZGRfdmFsdWVzKCktPnNldF9ieXRlc192YWx1ZShkYXRhLCBzaXplKTsKKworICAgIHJldHVybiBPSzsKK30KKworLy8gRXh0cmFjdCB0aGUgbG9jYWwgM0dQUCBkaXNwbGF5IGRlc2NyaXB0aW9ucy4gM0dQUCBsb2NhbCBkZXNjcmlwdGlvbnMKKy8vIGFyZSBhcHBlbmRlZCB0byB0aGUgdGV4dCBzYW1wbGUgaWYgYW55Lgorc3RhdHVzX3QgVGV4dERlc2NyaXB0aW9uczI6OmV4dHJhY3QzR1BQTG9jYWxEZXNjcmlwdGlvbnMoCisgICAgICAgIGNvbnN0IHVpbnQ4X3QgKmRhdGEsIHNzaXplX3Qgc2l6ZSwKKyAgICAgICAgaW50IHRpbWVNcywgUGxheWVyTWVzc2FnZSAqcGxheWVyTXNnKSB7CisKKyAgICBwbGF5ZXJNc2ctPmFkZF92YWx1ZXMoKS0+c2V0X2ludDMyX3ZhbHVlKEtFWV9MT0NBTF9TRVRUSU5HKTsKKworICAgIC8vIHdyaXRlIHN0YXJ0IHRpbWUgdG8gZGlzcGxheSB0aGlzIHRleHQgc2FtcGxlCisgICAgcGxheWVyTXNnLT5hZGRfdmFsdWVzKCktPnNldF9pbnQzMl92YWx1ZShLRVlfU1RBUlRfVElNRSk7CisgICAgcGxheWVyTXNnLT5hZGRfdmFsdWVzKCktPnNldF9pbnQzMl92YWx1ZSh0aW1lTXMpOworCisgICAgaWYgKHNpemUgPCAyKSB7CisgICAgICAgIHJldHVybiBPSzsKKyAgICB9CisgICAgc3NpemVfdCB0ZXh0TGVuID0gKCpkYXRhKSA8PCA4IHwgKCooZGF0YSArIDEpKTsKKworICAgIGlmIChzaXplIDwgdGV4dExlbiArIDIpIHsKKyAgICAgICAgcmV0dXJuIE9LOworICAgIH0KKworICAgIC8vIHdyaXRlIHRleHQgc2FtcGxlIGxlbmd0aCBhbmQgdGV4dCBzYW1wbGUgaXRzZWxmCisgICAgcGxheWVyTXNnLT5hZGRfdmFsdWVzKCktPnNldF9pbnQzMl92YWx1ZShLRVlfU1RSVUNUX1RFWFQpOworICAgIHBsYXllck1zZy0+YWRkX3ZhbHVlcygpLT5zZXRfYnl0ZXNfdmFsdWUoZGF0YSArIDIsIHRleHRMZW4pOworCisgICAgaWYgKHNpemUgPiB0ZXh0TGVuICsgMikgeworICAgICAgICBkYXRhICs9ICh0ZXh0TGVuICsgMik7CisgICAgICAgIHNpemUgLT0gKHRleHRMZW4gKyAyKTsKKyAgICB9IGVsc2UgeworICAgICAgICByZXR1cm4gT0s7CisgICAgfQorCisgICAgd2hpbGUgKHNpemUgPj0gOCkgeworICAgICAgICBjb25zdCB1aW50OF90ICp0bXBEYXRhID0gZGF0YTsKKyAgICAgICAgc3NpemVfdCBjaHVua1NpemUgPSBVMzJfQVQodG1wRGF0YSk7ICAgICAgLy8gc2l6ZSBpbmNsdWRlcyBzaXplIGFuZCB0eXBlCisgICAgICAgIHVpbnQzMl90IGNodW5rVHlwZSA9IFUzMl9BVCh0bXBEYXRhICsgNCk7CisKKyAgICAgICAgaWYgKGNodW5rU2l6ZSA8PSA4IHx8IGNodW5rU2l6ZSA+IHNpemUpIHsKKyAgICAgICAgICAgIHJldHVybiBPSzsKKyAgICAgICAgfQorCisgICAgICAgIHNpemVfdCByZW1haW5pbmcgPSBjaHVua1NpemUgLSA4OworCisgICAgICAgIHRtcERhdGEgKz0gODsKKworICAgICAgICBzd2l0Y2goY2h1bmtUeXBlKSB7CisgICAgICAgICAgICAvLyAndGJveCcgYm94IHRvIGluZGljYXRlIHRoZSBwb3NpdGlvbiBvZiB0aGUgdGV4dCB3aXRoIHZhbHVlcworICAgICAgICAgICAgLy8gb2YgdG9wLCBsZWZ0LCBib3R0b20gYW5kIHJpZ2h0CisgICAgICAgICAgICBjYXNlIEZPVVJDQygndCcsICdiJywgJ28nLCAneCcpOgorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGlmIChyZW1haW5pbmcgPCA4KSB7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBPSzsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgcGxheWVyTXNnLT5hZGRfdmFsdWVzKCktPnNldF9pbnQzMl92YWx1ZShLRVlfU1RSVUNUX1RFWFRfUE9TKTsKKyAgICAgICAgICAgICAgICBwbGF5ZXJNc2ctPmFkZF92YWx1ZXMoKS0+c2V0X2ludDMyX3ZhbHVlKFUxNl9BVCh0bXBEYXRhKSk7CisgICAgICAgICAgICAgICAgcGxheWVyTXNnLT5hZGRfdmFsdWVzKCktPnNldF9pbnQzMl92YWx1ZShVMTZfQVQodG1wRGF0YSArIDIpKTsKKyAgICAgICAgICAgICAgICBwbGF5ZXJNc2ctPmFkZF92YWx1ZXMoKS0+c2V0X2ludDMyX3ZhbHVlKFUxNl9BVCh0bXBEYXRhICsgNCkpOworICAgICAgICAgICAgICAgIHBsYXllck1zZy0+YWRkX3ZhbHVlcygpLT5zZXRfaW50MzJfdmFsdWUoVTE2X0FUKHRtcERhdGEgKyA2KSk7CisKKyAgICAgICAgICAgICAgICB0bXBEYXRhICs9IDg7CisgICAgICAgICAgICAgICAgcmVtYWluaW5nIC09IDg7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgZGF0YSArPSBjaHVua1NpemU7CisgICAgICAgIHNpemUgLT0gY2h1bmtTaXplOworICAgIH0KKworICAgIHJldHVybiBPSzsKK30KKworLy8gVG8gZXh0cmFjdCBib3ggJ3R4M2cnIGRlZmluZWQgaW4gM0dQUCBUUyAyNi4yNDUsIGFuZCBzdG9yZSBpdCBpbiBhIFBsYXllck1lc3NhZ2UKK3N0YXR1c190IFRleHREZXNjcmlwdGlvbnMyOjpleHRyYWN0M0dQUEdsb2JhbERlc2NyaXB0aW9ucygKKyAgICAgICAgY29uc3QgdWludDhfdCAqZGF0YSwgc3NpemVfdCBzaXplLCBQbGF5ZXJNZXNzYWdlICpwbGF5ZXJNc2cpIHsKKworICAgIHBsYXllck1zZy0+YWRkX3ZhbHVlcygpLT5zZXRfaW50MzJfdmFsdWUoS0VZX0dMT0JBTF9TRVRUSU5HKTsKKworICAgIHdoaWxlIChzaXplID49IDgpIHsKKyAgICAgICAgc3NpemVfdCBjaHVua1NpemUgPSBVMzJfQVQoZGF0YSk7CisgICAgICAgIHVpbnQzMl90IGNodW5rVHlwZSA9IFUzMl9BVChkYXRhICsgNCk7CisgICAgICAgIGNvbnN0IHVpbnQ4X3QgKnRtcERhdGEgPSBkYXRhOworICAgICAgICB0bXBEYXRhICs9IDg7CisgICAgICAgIHNpemVfdCByZW1haW5pbmcgPSBzaXplIC0gODsKKworICAgICAgICBpZiAoc2l6ZSA8IGNodW5rU2l6ZSkgeworICAgICAgICAgICAgcmV0dXJuIE9LOworICAgICAgICB9CisgICAgICAgIHN3aXRjaChjaHVua1R5cGUpIHsKKyAgICAgICAgICAgIGNhc2UgRk9VUkNDKCd0JywgJ3gnLCAnMycsICdnJyk6CisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgaWYgKHJlbWFpbmluZyA8IDE4KSB7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBPSzsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgLy8gU2tpcCBESVNQTEFZX0ZMQUdTLCBTVFJVQ1RfSlVTVElGSUNBVElPTiwgYW5kIEJBQ0tHUk9VTkRfQ09MT1JfUkdCQQorICAgICAgICAgICAgICAgIHRtcERhdGEgKz0gMTg7CisgICAgICAgICAgICAgICAgcmVtYWluaW5nIC09IDE4OworCisgICAgICAgICAgICAgICAgaWYgKHJlbWFpbmluZyA8IDgpIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIE9LOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBwbGF5ZXJNc2ctPmFkZF92YWx1ZXMoKS0+c2V0X2ludDMyX3ZhbHVlKEtFWV9TVFJVQ1RfVEVYVF9QT1MpOworICAgICAgICAgICAgICAgIHBsYXllck1zZy0+YWRkX3ZhbHVlcygpLT5zZXRfaW50MzJfdmFsdWUoVTE2X0FUKHRtcERhdGEpKTsKKyAgICAgICAgICAgICAgICBwbGF5ZXJNc2ctPmFkZF92YWx1ZXMoKS0+c2V0X2ludDMyX3ZhbHVlKFUxNl9BVCh0bXBEYXRhICsgMikpOworICAgICAgICAgICAgICAgIHBsYXllck1zZy0+YWRkX3ZhbHVlcygpLT5zZXRfaW50MzJfdmFsdWUoVTE2X0FUKHRtcERhdGEgKyA0KSk7CisgICAgICAgICAgICAgICAgcGxheWVyTXNnLT5hZGRfdmFsdWVzKCktPnNldF9pbnQzMl92YWx1ZShVMTZfQVQodG1wRGF0YSArIDYpKTsKKworICAgICAgICAgICAgICAgIHRtcERhdGEgKz0gODsKKyAgICAgICAgICAgICAgICByZW1haW5pbmcgLT0gMTg7CisgICAgICAgICAgICAgICAgLy8gSWdub3JlIHJlbWFpbmluZyBkYXRhLgorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIGRhdGEgKz0gY2h1bmtTaXplOworICAgICAgICBzaXplIC09IGNodW5rU2l6ZTsKKyAgICB9CisKKyAgICByZXR1cm4gT0s7Cit9CisKK30gIC8vIG5hbWVzcGFjZSBhbmRyb2lkCmRpZmYgLS1naXQgYS9tZWRpYS9saWJzdGFnZWZyaWdodC90aW1lZHRleHQvVGV4dERlc2NyaXB0aW9uczIuaCBiL21lZGlhL2xpYnN0YWdlZnJpZ2h0L3RpbWVkdGV4dC9UZXh0RGVzY3JpcHRpb25zMi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdjN2QyZDAKLS0tIC9kZXYvbnVsbAorKysgYi9tZWRpYS9saWJzdGFnZWZyaWdodC90aW1lZHRleHQvVGV4dERlc2NyaXB0aW9uczIuaApAQCAtMCwwICsxLDg4IEBACisgLyoKKyAqIENvcHlyaWdodCAoQykgMjAxOCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCisKKyNpZm5kZWYgVEVYVF9ERVNDUklQVElPTlMyX0hfCisKKyNkZWZpbmUgVEVYVF9ERVNDUklQVElPTlMyX0hfCisKKyNpbmNsdWRlIDxiaW5kZXIvUGFyY2VsLmg+CisjaW5jbHVkZSA8bWVkaWEvc3RhZ2VmcmlnaHQvZm91bmRhdGlvbi9BQmFzZS5oPgorCisjaW5jbHVkZSAibWVkaWFwbGF5ZXIyLnBiLmgiCisKK3VzaW5nIGFuZHJvaWQ6Om1lZGlhOjpNZWRpYVBsYXllcjJQcm90bzo6UGxheWVyTWVzc2FnZTsKKworbmFtZXNwYWNlIGFuZHJvaWQgeworCitjbGFzcyBUZXh0RGVzY3JpcHRpb25zMiB7CitwdWJsaWM6CisgICAgZW51bSB7CisgICAgICAgIElOX0JBTkRfVEVYVF8zR1BQICAgICAgICAgICAgID0gMHgwMSwKKyAgICAgICAgT1VUX09GX0JBTkRfVEVYVF9TUlQgICAgICAgICAgPSAweDAyLAorCisgICAgICAgIEdMT0JBTF9ERVNDUklQVElPTlMgICAgICAgICAgID0gMHgxMDAsCisgICAgICAgIExPQ0FMX0RFU0NSSVBUSU9OUyAgICAgICAgICAgID0gMHgyMDAsCisgICAgfTsKKworICAgIHN0YXRpYyBzdGF0dXNfdCBnZXRQbGF5ZXJNZXNzYWdlT2ZEZXNjcmlwdGlvbnMoCisgICAgICAgICAgICBjb25zdCB1aW50OF90ICpkYXRhLCBzc2l6ZV90IHNpemUsCisgICAgICAgICAgICB1aW50MzJfdCBmbGFncywgaW50IHRpbWVNcywgUGxheWVyTWVzc2FnZSAqcGxheWVyTXNnKTsKK3ByaXZhdGU6CisgICAgVGV4dERlc2NyaXB0aW9uczIoKTsKKworICAgIGVudW0geworICAgICAgICAvLyBUaGVzZSBrZXlzIG11c3QgYmUgaW4gc3luYyB3aXRoIHRoZSBrZXlzIGluIFRpbWVkVGV4dC5qYXZhCisgICAgICAgIEtFWV9ESVNQTEFZX0ZMQUdTICAgICAgICAgICAgICAgICA9IDEsIC8vIGludAorICAgICAgICBLRVlfU1RZTEVfRkxBR1MgICAgICAgICAgICAgICAgICAgPSAyLCAvLyBpbnQKKyAgICAgICAgS0VZX0JBQ0tHUk9VTkRfQ09MT1JfUkdCQSAgICAgICAgID0gMywgLy8gaW50CisgICAgICAgIEtFWV9ISUdITElHSFRfQ09MT1JfUkdCQSAgICAgICAgICA9IDQsIC8vIGludAorICAgICAgICBLRVlfU0NST0xMX0RFTEFZICAgICAgICAgICAgICAgICAgPSA1LCAvLyBpbnQKKyAgICAgICAgS0VZX1dSQVBfVEVYVCAgICAgICAgICAgICAgICAgICAgID0gNiwgLy8gaW50CisgICAgICAgIEtFWV9TVEFSVF9USU1FICAgICAgICAgICAgICAgICAgICA9IDcsIC8vIGludAorICAgICAgICBLRVlfU1RSVUNUX0JMSU5LSU5HX1RFWFRfTElTVCAgICAgPSA4LCAvLyBMaXN0PENoYXJQb3M+CisgICAgICAgIEtFWV9TVFJVQ1RfRk9OVF9MSVNUICAgICAgICAgICAgICA9IDksIC8vIExpc3Q8Rm9udD4KKyAgICAgICAgS0VZX1NUUlVDVF9ISUdITElHSFRfTElTVCAgICAgICAgID0gMTAsIC8vIExpc3Q8Q2hhclBvcz4KKyAgICAgICAgS0VZX1NUUlVDVF9IWVBFUl9URVhUX0xJU1QgICAgICAgID0gMTEsIC8vIExpc3Q8SHlwZXJUZXh0PgorICAgICAgICBLRVlfU1RSVUNUX0tBUkFPS0VfTElTVCAgICAgICAgICAgPSAxMiwgLy8gTGlzdDxLYXJhb2tlPgorICAgICAgICBLRVlfU1RSVUNUX1NUWUxFX0xJU1QgICAgICAgICAgICAgPSAxMywgLy8gTGlzdDxTdHlsZT4KKyAgICAgICAgS0VZX1NUUlVDVF9URVhUX1BPUyAgICAgICAgICAgICAgID0gMTQsIC8vIFRleHRQb3MKKyAgICAgICAgS0VZX1NUUlVDVF9KVVNUSUZJQ0FUSU9OICAgICAgICAgID0gMTUsIC8vIEp1c3RpZmljYXRpb24KKyAgICAgICAgS0VZX1NUUlVDVF9URVhUICAgICAgICAgICAgICAgICAgID0gMTYsIC8vIFRleHQKKworICAgICAgICBLRVlfR0xPQkFMX1NFVFRJTkcgICAgICAgICAgICAgICAgPSAxMDEsCisgICAgICAgIEtFWV9MT0NBTF9TRVRUSU5HICAgICAgICAgICAgICAgICA9IDEwMiwKKyAgICAgICAgS0VZX1NUQVJUX0NIQVIgICAgICAgICAgICAgICAgICAgID0gMTAzLAorICAgICAgICBLRVlfRU5EX0NIQVIgICAgICAgICAgICAgICAgICAgICAgPSAxMDQsCisgICAgICAgIEtFWV9GT05UX0lEICAgICAgICAgICAgICAgICAgICAgICA9IDEwNSwKKyAgICAgICAgS0VZX0ZPTlRfU0laRSAgICAgICAgICAgICAgICAgICAgID0gMTA2LAorICAgICAgICBLRVlfVEVYVF9DT0xPUl9SR0JBICAgICAgICAgICAgICAgPSAxMDcsCisgICAgfTsKKworICAgIHN0YXRpYyBzdGF0dXNfdCBleHRyYWN0U1JUTG9jYWxEZXNjcmlwdGlvbnMoCisgICAgICAgICAgICBjb25zdCB1aW50OF90ICpkYXRhLCBzc2l6ZV90IHNpemUsCisgICAgICAgICAgICBpbnQgdGltZU1zLCBQbGF5ZXJNZXNzYWdlICpwbGF5ZXJNc2cpOworICAgIHN0YXRpYyBzdGF0dXNfdCBleHRyYWN0M0dQUEdsb2JhbERlc2NyaXB0aW9ucygKKyAgICAgICAgICAgIGNvbnN0IHVpbnQ4X3QgKmRhdGEsIHNzaXplX3Qgc2l6ZSwKKyAgICAgICAgICAgIFBsYXllck1lc3NhZ2UgKnBsYXllck1zZyk7CisgICAgc3RhdGljIHN0YXR1c190IGV4dHJhY3QzR1BQTG9jYWxEZXNjcmlwdGlvbnMoCisgICAgICAgICAgICBjb25zdCB1aW50OF90ICpkYXRhLCBzc2l6ZV90IHNpemUsCisgICAgICAgICAgICBpbnQgdGltZU1zLCBQbGF5ZXJNZXNzYWdlICpwbGF5ZXJNc2cpOworCisgICAgRElTQUxMT1dfRVZJTF9DT05TVFJVQ1RPUlMoVGV4dERlc2NyaXB0aW9uczIpOworfTsKKworfSAgLy8gbmFtZXNwYWNlIGFuZHJvaWQKKyNlbmRpZiAgLy8gVEVYVF9ERVNDUklQVElPTlMyX0hfCmRpZmYgLS1naXQgYS9tZWRpYS9saWJzdGFnZWZyaWdodC93ZWJtL0FuZHJvaWQuYnAgYi9tZWRpYS9saWJzdGFnZWZyaWdodC93ZWJtL0FuZHJvaWQuYnAKaW5kZXggZjk2ODc4OC4uOTdlMTQ1MiAxMDA2NDQKLS0tIGEvbWVkaWEvbGlic3RhZ2VmcmlnaHQvd2VibS9BbmRyb2lkLmJwCisrKyBiL21lZGlhL2xpYnN0YWdlZnJpZ2h0L3dlYm0vQW5kcm9pZC5icApAQCAtMzQsNCArMzQsOCBAQAogICAgICAgICAibGlidXRpbHMiLAogICAgICAgICAibGlibG9nIiwKICAgICBdLAorCisgICAgaGVhZGVyX2xpYnM6IFsKKyAgICAgICAgIm1lZGlhX25ka19oZWFkZXJzIiwKKyAgICBdLAogfQpkaWZmIC0tZ2l0IGEvbWVkaWEvbGlic3RhZ2VmcmlnaHQveG1scGFyc2VyL01lZGlhQ29kZWNzWG1sUGFyc2VyLmNwcCBiL21lZGlhL2xpYnN0YWdlZnJpZ2h0L3htbHBhcnNlci9NZWRpYUNvZGVjc1htbFBhcnNlci5jcHAKaW5kZXggMDgzMjk0NC4uMmRlYzlmYSAxMDA2NDQKLS0tIGEvbWVkaWEvbGlic3RhZ2VmcmlnaHQveG1scGFyc2VyL01lZGlhQ29kZWNzWG1sUGFyc2VyLmNwcAorKysgYi9tZWRpYS9saWJzdGFnZWZyaWdodC94bWxwYXJzZXIvTWVkaWFDb2RlY3NYbWxQYXJzZXIuY3BwCkBAIC05MiwxOCArOTIsMTggQEAKIHN0YXR1c190IGxpbWl0Rm91bmRNaXNzaW5nQXR0cihjb25zdCBjaGFyKiBuYW1lLCBjb25zdCBjaGFyICphdHRyLCBib29sIGZvdW5kID0gdHJ1ZSkgewogICAgIEFMT0dFKCJsaW1pdCAnJXMnIHdpdGggJXMnJXMnIGF0dHJpYnV0ZSIsIG5hbWUsCiAgICAgICAgICAgICAoZm91bmQgPyAiIiA6ICJubyAiKSwgYXR0cik7Ci0gICAgcmV0dXJuIC1FSU5WQUw7CisgICAgcmV0dXJuIEJBRF9WQUxVRTsKIH0KIAogc3RhdHVzX3QgbGltaXRFcnJvcihjb25zdCBjaGFyKiBuYW1lLCBjb25zdCBjaGFyICptc2cpIHsKICAgICBBTE9HRSgibGltaXQgJyVzJyAlcyIsIG5hbWUsIG1zZyk7Ci0gICAgcmV0dXJuIC1FSU5WQUw7CisgICAgcmV0dXJuIEJBRF9WQUxVRTsKIH0KIAogc3RhdHVzX3QgbGltaXRJbnZhbGlkQXR0cihjb25zdCBjaGFyKiBuYW1lLCBjb25zdCBjaGFyKiBhdHRyLCBjb25zdCBjaGFyKiB2YWx1ZSkgewogICAgIEFMT0dFKCJsaW1pdCAnJXMnIHdpdGggaW52YWxpZCAnJXMnIGF0dHJpYnV0ZSAoJXMpIiwgbmFtZSwKICAgICAgICAgICAgIGF0dHIsIHZhbHVlKTsKLSAgICByZXR1cm4gLUVJTlZBTDsKKyAgICByZXR1cm4gQkFEX1ZBTFVFOwogfQogCiB9OyAvLyB1bm5hbWVkIG5hbWVzcGFjZQpAQCAtMjMyLDEyICsyMzIsMTIgQEAKICAgICB3aGlsZSAoYXR0cnNbaV0gIT0gbnVsbHB0cikgewogICAgICAgICBpZiAoc3RyRXEoYXR0cnNbaV0sICJocmVmIikpIHsKICAgICAgICAgICAgIGlmIChhdHRyc1srK2ldID09IG51bGxwdHIpIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gLUVJTlZBTDsKKyAgICAgICAgICAgICAgICByZXR1cm4gQkFEX1ZBTFVFOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgaHJlZiA9IGF0dHJzW2ldOwogICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgQUxPR0UoImluY2x1ZGVYTUxGaWxlOiB1bnJlY29nbml6ZWQgYXR0cmlidXRlOiAlcyIsIGF0dHJzW2ldKTsKLSAgICAgICAgICAgIHJldHVybiAtRUlOVkFMOworICAgICAgICAgICAgcmV0dXJuIEJBRF9WQUxVRTsKICAgICAgICAgfQogICAgICAgICArK2k7CiAgICAgfQpAQCAtMjUyLDMyICsyNTIsMzIgQEAKICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICB9CiAgICAgICAgIEFMT0dFKCJpbnZhbGlkIGluY2x1ZGUgZmlsZSBuYW1lOiAlcyIsIGhyZWYpOwotICAgICAgICByZXR1cm4gLUVJTlZBTDsKKyAgICAgICAgcmV0dXJuIEJBRF9WQUxVRTsKICAgICB9CiAKICAgICBzdGQ6OnN0cmluZyBmaWxlbmFtZSA9IGhyZWY7CiAgICAgaWYgKGZpbGVuYW1lLmNvbXBhcmUoMCwgMTMsICJtZWRpYV9jb2RlY3NfIikgIT0gMCB8fAogICAgICAgICAgICAgZmlsZW5hbWUuY29tcGFyZShmaWxlbmFtZS5zaXplKCkgLSA0LCA0LCAiLnhtbCIpICE9IDApIHsKICAgICAgICAgQUxPR0UoImludmFsaWQgaW5jbHVkZSBmaWxlIG5hbWU6ICVzIiwgaHJlZik7Ci0gICAgICAgIHJldHVybiAtRUlOVkFMOworICAgICAgICByZXR1cm4gQkFEX1ZBTFVFOwogICAgIH0KICAgICBmaWxlbmFtZS5pbnNlcnQoMCwgbUhyZWZCYXNlKTsKIAorICAgIHN0YXR1c190IG9sZFBhcnNpbmdTdGF0dXMgPSBtUGFyc2luZ1N0YXR1czsKKwogICAgIHBhcnNlWE1MRmlsZShmaWxlbmFtZS5jX3N0cigpKTsKLSAgICByZXR1cm4gbVBhcnNpbmdTdGF0dXM7CisKKyAgICBzdGF0dXNfdCBuZXdQYXJzaW5nU3RhdHVzID0gbVBhcnNpbmdTdGF0dXM7CisgICAgbVBhcnNpbmdTdGF0dXMgPSBvbGRQYXJzaW5nU3RhdHVzOworICAgIHJldHVybiBuZXdQYXJzaW5nU3RhdHVzOwogfQogCiB2b2lkIE1lZGlhQ29kZWNzWG1sUGFyc2VyOjpzdGFydEVsZW1lbnRIYW5kbGVyKAogICAgICAgICBjb25zdCBjaGFyICpuYW1lLCBjb25zdCBjaGFyICoqYXR0cnMpIHsKLSAgICBpZiAobVBhcnNpbmdTdGF0dXMgIT0gT0spIHsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQogICAgIGJvb2wgaW5UeXBlID0gdHJ1ZTsKIAogICAgIGlmIChzdHJFcShuYW1lLCAiSW5jbHVkZSIpKSB7Ci0gICAgICAgIG1QYXJzaW5nU3RhdHVzID0gaW5jbHVkZVhNTEZpbGUoYXR0cnMpOwotICAgICAgICBpZiAobVBhcnNpbmdTdGF0dXMgPT0gT0spIHsKKyAgICAgICAgaWYgKGluY2x1ZGVYTUxGaWxlKGF0dHJzKSA9PSBPSykgewogICAgICAgICAgICAgbVNlY3Rpb25TdGFjay5wdXNoX2JhY2sobUN1cnJlbnRTZWN0aW9uKTsKICAgICAgICAgICAgIG1DdXJyZW50U2VjdGlvbiA9IFNFQ1RJT05fSU5DTFVERTsKICAgICAgICAgfQpAQCAtMzAwLDcgKzMwMCw3IEBACiAgICAgICAgIGNhc2UgU0VDVElPTl9TRVRUSU5HUzoKICAgICAgICAgewogICAgICAgICAgICAgaWYgKHN0ckVxKG5hbWUsICJTZXR0aW5nIikpIHsKLSAgICAgICAgICAgICAgICBtUGFyc2luZ1N0YXR1cyA9IGFkZFNldHRpbmdGcm9tQXR0cmlidXRlcyhhdHRycyk7CisgICAgICAgICAgICAgICAgKHZvaWQpYWRkU2V0dGluZ0Zyb21BdHRyaWJ1dGVzKGF0dHJzKTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CkBAIC0zMDgsOSArMzA4LDcgQEAKICAgICAgICAgY2FzZSBTRUNUSU9OX0RFQ09ERVJTOgogICAgICAgICB7CiAgICAgICAgICAgICBpZiAoc3RyRXEobmFtZSwgIk1lZGlhQ29kZWMiKSkgewotICAgICAgICAgICAgICAgIG1QYXJzaW5nU3RhdHVzID0KLSAgICAgICAgICAgICAgICAgICAgYWRkTWVkaWFDb2RlY0Zyb21BdHRyaWJ1dGVzKGZhbHNlIC8qIGVuY29kZXIgKi8sIGF0dHJzKTsKLQorICAgICAgICAgICAgICAgICh2b2lkKWFkZE1lZGlhQ29kZWNGcm9tQXR0cmlidXRlcyhmYWxzZSAvKiBlbmNvZGVyICovLCBhdHRycyk7CiAgICAgICAgICAgICAgICAgbUN1cnJlbnRTZWN0aW9uID0gU0VDVElPTl9ERUNPREVSOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgYnJlYWs7CkBAIC0zMTksOSArMzE3LDcgQEAKICAgICAgICAgY2FzZSBTRUNUSU9OX0VOQ09ERVJTOgogICAgICAgICB7CiAgICAgICAgICAgICBpZiAoc3RyRXEobmFtZSwgIk1lZGlhQ29kZWMiKSkgewotICAgICAgICAgICAgICAgIG1QYXJzaW5nU3RhdHVzID0KLSAgICAgICAgICAgICAgICAgICAgYWRkTWVkaWFDb2RlY0Zyb21BdHRyaWJ1dGVzKHRydWUgLyogZW5jb2RlciAqLywgYXR0cnMpOwotCisgICAgICAgICAgICAgICAgKHZvaWQpYWRkTWVkaWFDb2RlY0Zyb21BdHRyaWJ1dGVzKHRydWUgLyogZW5jb2RlciAqLywgYXR0cnMpOwogICAgICAgICAgICAgICAgIG1DdXJyZW50U2VjdGlvbiA9IFNFQ1RJT05fRU5DT0RFUjsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGJyZWFrOwpAQCAtMzMxLDkgKzMyNyw5IEBACiAgICAgICAgIGNhc2UgU0VDVElPTl9FTkNPREVSOgogICAgICAgICB7CiAgICAgICAgICAgICBpZiAoc3RyRXEobmFtZSwgIlF1aXJrIikpIHsKLSAgICAgICAgICAgICAgICBtUGFyc2luZ1N0YXR1cyA9IGFkZFF1aXJrKGF0dHJzKTsKKyAgICAgICAgICAgICAgICAodm9pZClhZGRRdWlyayhhdHRycyk7CiAgICAgICAgICAgICB9IGVsc2UgaWYgKHN0ckVxKG5hbWUsICJUeXBlIikpIHsKLSAgICAgICAgICAgICAgICBtUGFyc2luZ1N0YXR1cyA9IGFkZFR5cGVGcm9tQXR0cmlidXRlcyhhdHRycywKKyAgICAgICAgICAgICAgICAodm9pZClhZGRUeXBlRnJvbUF0dHJpYnV0ZXMoYXR0cnMsCiAgICAgICAgICAgICAgICAgICAgICAgICAobUN1cnJlbnRTZWN0aW9uID09IFNFQ1RJT05fRU5DT0RFUikpOwogICAgICAgICAgICAgICAgIG1DdXJyZW50U2VjdGlvbiA9CiAgICAgICAgICAgICAgICAgICAgICAgICAobUN1cnJlbnRTZWN0aW9uID09IFNFQ1RJT05fREVDT0RFUiA/CkBAIC0zNTMsOSArMzQ5LDkgQEAKICAgICAgICAgICAgICAgICAgICAgKHN0ckVxKG5hbWUsICJMaW1pdCIpIHx8IHN0ckVxKG5hbWUsICJGZWF0dXJlIikpKSB7CiAgICAgICAgICAgICAgICAgQUxPR1coImlnbm9yaW5nICVzIHNwZWNpZmllZCBvdXRzaWRlIG9mIGEgVHlwZSIsIG5hbWUpOwogICAgICAgICAgICAgfSBlbHNlIGlmIChzdHJFcShuYW1lLCAiTGltaXQiKSkgewotICAgICAgICAgICAgICAgIG1QYXJzaW5nU3RhdHVzID0gYWRkTGltaXQoYXR0cnMpOworICAgICAgICAgICAgICAgICh2b2lkKWFkZExpbWl0KGF0dHJzKTsKICAgICAgICAgICAgIH0gZWxzZSBpZiAoc3RyRXEobmFtZSwgIkZlYXR1cmUiKSkgewotICAgICAgICAgICAgICAgIG1QYXJzaW5nU3RhdHVzID0gYWRkRmVhdHVyZShhdHRycyk7CisgICAgICAgICAgICAgICAgKHZvaWQpYWRkRmVhdHVyZShhdHRycyk7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQpAQCAtMzY3LDEwICszNjMsNiBAQAogfQogCiB2b2lkIE1lZGlhQ29kZWNzWG1sUGFyc2VyOjplbmRFbGVtZW50SGFuZGxlcihjb25zdCBjaGFyICpuYW1lKSB7Ci0gICAgaWYgKG1QYXJzaW5nU3RhdHVzICE9IE9LKSB7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KICAgICBzd2l0Y2ggKG1DdXJyZW50U2VjdGlvbikgewogICAgICAgICBjYXNlIFNFQ1RJT05fU0VUVElOR1M6CiAgICAgICAgIHsKQEAgLTQ1MiwzMSArNDQ0LDMxIEBACiAgICAgICAgIGlmIChzdHJFcShhdHRyc1tpXSwgIm5hbWUiKSkgewogICAgICAgICAgICAgaWYgKGF0dHJzWysraV0gPT0gbnVsbHB0cikgewogICAgICAgICAgICAgICAgIEFMT0dFKCJhZGRTZXR0aW5nRnJvbUF0dHJpYnV0ZXM6IG5hbWUgaXMgbnVsbCIpOwotICAgICAgICAgICAgICAgIHJldHVybiAtRUlOVkFMOworICAgICAgICAgICAgICAgIHJldHVybiBCQURfVkFMVUU7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBuYW1lID0gYXR0cnNbaV07CiAgICAgICAgIH0gZWxzZSBpZiAoc3RyRXEoYXR0cnNbaV0sICJ2YWx1ZSIpKSB7CiAgICAgICAgICAgICBpZiAoYXR0cnNbKytpXSA9PSBudWxscHRyKSB7CiAgICAgICAgICAgICAgICAgQUxPR0UoImFkZFNldHRpbmdGcm9tQXR0cmlidXRlczogdmFsdWUgaXMgbnVsbCIpOwotICAgICAgICAgICAgICAgIHJldHVybiAtRUlOVkFMOworICAgICAgICAgICAgICAgIHJldHVybiBCQURfVkFMVUU7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICB2YWx1ZSA9IGF0dHJzW2ldOwogICAgICAgICB9IGVsc2UgaWYgKHN0ckVxKGF0dHJzW2ldLCAidXBkYXRlIikpIHsKICAgICAgICAgICAgIGlmIChhdHRyc1srK2ldID09IG51bGxwdHIpIHsKICAgICAgICAgICAgICAgICBBTE9HRSgiYWRkU2V0dGluZ0Zyb21BdHRyaWJ1dGVzOiB1cGRhdGUgaXMgbnVsbCIpOwotICAgICAgICAgICAgICAgIHJldHVybiAtRUlOVkFMOworICAgICAgICAgICAgICAgIHJldHVybiBCQURfVkFMVUU7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICB1cGRhdGUgPSBhdHRyc1tpXTsKICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIEFMT0dFKCJhZGRTZXR0aW5nRnJvbUF0dHJpYnV0ZXM6IHVucmVjb2duaXplZCBhdHRyaWJ1dGU6ICVzIiwgYXR0cnNbaV0pOwotICAgICAgICAgICAgcmV0dXJuIC1FSU5WQUw7CisgICAgICAgICAgICByZXR1cm4gQkFEX1ZBTFVFOwogICAgICAgICB9CiAgICAgICAgICsraTsKICAgICB9CiAKICAgICBpZiAobmFtZSA9PSBudWxscHRyIHx8IHZhbHVlID09IG51bGxwdHIpIHsKICAgICAgICAgQUxPR0UoImFkZFNldHRpbmdGcm9tQXR0cmlidXRlczogbmFtZSBvciB2YWx1ZSB1bnNwZWNpZmllZCIpOwotICAgICAgICByZXR1cm4gLUVJTlZBTDsKKyAgICAgICAgcmV0dXJuIEJBRF9WQUxVRTsKICAgICB9CiAKICAgICAvLyBCb29sZWFuIHZhbHVlcyBhcmUgY29udmVydGVkIHRvICIwIiBvciAiMSIuCkBAIC00ODksNyArNDgxLDcgQEAKICAgICBpZiAoYXR0cmlidXRlID09IG1TZXJ2aWNlQXR0cmlidXRlTWFwLmVuZCgpKSB7IC8vIE5ldyBhdHRyaWJ1dGUgbmFtZQogICAgICAgICBpZiAobVVwZGF0ZSkgewogICAgICAgICAgICAgQUxPR0UoImFkZFNldHRpbmdGcm9tQXR0cmlidXRlczogdXBkYXRpbmcgbm9uLWV4aXN0aW5nIHNldHRpbmciKTsKLSAgICAgICAgICAgIHJldHVybiAtRUlOVkFMOworICAgICAgICAgICAgcmV0dXJuIEJBRF9WQUxVRTsKICAgICAgICAgfQogICAgICAgICBtU2VydmljZUF0dHJpYnV0ZU1hcC5pbnNlcnQoQXR0cmlidXRlKG5hbWUsIHZhbHVlKSk7CiAgICAgfSBlbHNlIHsgLy8gRXhpc3RpbmcgYXR0cmlidXRlIG5hbWUKQEAgLTUxMywzOSArNTA1LDQwIEBACiAgICAgICAgIGlmIChzdHJFcShhdHRyc1tpXSwgIm5hbWUiKSkgewogICAgICAgICAgICAgaWYgKGF0dHJzWysraV0gPT0gbnVsbHB0cikgewogICAgICAgICAgICAgICAgIEFMT0dFKCJhZGRNZWRpYUNvZGVjRnJvbUF0dHJpYnV0ZXM6IG5hbWUgaXMgbnVsbCIpOwotICAgICAgICAgICAgICAgIHJldHVybiAtRUlOVkFMOworICAgICAgICAgICAgICAgIHJldHVybiBCQURfVkFMVUU7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBuYW1lID0gYXR0cnNbaV07CiAgICAgICAgIH0gZWxzZSBpZiAoc3RyRXEoYXR0cnNbaV0sICJ0eXBlIikpIHsKICAgICAgICAgICAgIGlmIChhdHRyc1srK2ldID09IG51bGxwdHIpIHsKICAgICAgICAgICAgICAgICBBTE9HRSgiYWRkTWVkaWFDb2RlY0Zyb21BdHRyaWJ1dGVzOiB0eXBlIGlzIG51bGwiKTsKLSAgICAgICAgICAgICAgICByZXR1cm4gLUVJTlZBTDsKKyAgICAgICAgICAgICAgICByZXR1cm4gQkFEX1ZBTFVFOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgdHlwZSA9IGF0dHJzW2ldOwogICAgICAgICB9IGVsc2UgaWYgKHN0ckVxKGF0dHJzW2ldLCAidXBkYXRlIikpIHsKICAgICAgICAgICAgIGlmIChhdHRyc1srK2ldID09IG51bGxwdHIpIHsKICAgICAgICAgICAgICAgICBBTE9HRSgiYWRkTWVkaWFDb2RlY0Zyb21BdHRyaWJ1dGVzOiB1cGRhdGUgaXMgbnVsbCIpOwotICAgICAgICAgICAgICAgIHJldHVybiAtRUlOVkFMOworICAgICAgICAgICAgICAgIHJldHVybiBCQURfVkFMVUU7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICB1cGRhdGUgPSBhdHRyc1tpXTsKICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIEFMT0dFKCJhZGRNZWRpYUNvZGVjRnJvbUF0dHJpYnV0ZXM6IHVucmVjb2duaXplZCBhdHRyaWJ1dGU6ICVzIiwgYXR0cnNbaV0pOwotICAgICAgICAgICAgcmV0dXJuIC1FSU5WQUw7CisgICAgICAgICAgICByZXR1cm4gQkFEX1ZBTFVFOwogICAgICAgICB9CiAgICAgICAgICsraTsKICAgICB9CiAKICAgICBpZiAobmFtZSA9PSBudWxscHRyKSB7CiAgICAgICAgIEFMT0dFKCJhZGRNZWRpYUNvZGVjRnJvbUF0dHJpYnV0ZXM6IG5hbWUgbm90IGZvdW5kIik7Ci0gICAgICAgIHJldHVybiAtRUlOVkFMOworICAgICAgICByZXR1cm4gQkFEX1ZBTFVFOwogICAgIH0KIAogICAgIG1VcGRhdGUgPSAodXBkYXRlICE9IG51bGxwdHIpICYmIHBhcnNlQm9vbGVhbih1cGRhdGUpOwogICAgIG1DdXJyZW50Q29kZWMgPSBtQ29kZWNNYXAuZmluZChuYW1lKTsKICAgICBpZiAobUN1cnJlbnRDb2RlYyA9PSBtQ29kZWNNYXAuZW5kKCkpIHsgLy8gTmV3IGNvZGVjIG5hbWUKICAgICAgICAgaWYgKG1VcGRhdGUpIHsKLSAgICAgICAgICAgIEFMT0dFKCJhZGRNZWRpYUNvZGVjRnJvbUF0dHJpYnV0ZXM6IHVwZGF0aW5nIG5vbi1leGlzdGluZyBjb2RlYyIpOwotICAgICAgICAgICAgcmV0dXJuIC1FSU5WQUw7CisgICAgICAgICAgICBBTE9HVygiYWRkTWVkaWFDb2RlY0Zyb21BdHRyaWJ1dGVzOiBjYW5ub3QgdXBkYXRlICIKKyAgICAgICAgICAgICAgICAgICJub24tZXhpc3RpbmcgY29kZWMgXCIlc1wiLiIsIG5hbWUpOworICAgICAgICAgICAgcmV0dXJuIEJBRF9WQUxVRTsKICAgICAgICAgfQogICAgICAgICAvLyBDcmVhdGUgYSBuZXcgY29kZWMgaW4gbUNvZGVjTWFwCiAgICAgICAgIG1DdXJyZW50Q29kZWMgPSBtQ29kZWNNYXAuaW5zZXJ0KApAQCAtNTYwLDE4ICs1NTMsMjYgQEAKICAgICAgICAgbUN1cnJlbnRDb2RlYy0+c2Vjb25kLm9yZGVyID0gbUNvZGVjQ291bnRlcisrOwogICAgIH0gZWxzZSB7IC8vIEV4aXN0aW5nIGNvZGVjIG5hbWUKICAgICAgICAgaWYgKCFtVXBkYXRlKSB7Ci0gICAgICAgICAgICBBTE9HRSgiYWRkTWVkaWFDb2RlY0Zyb21BdHRyaWJ1dGVzOiBhZGRpbmcgZXhpc3RpbmcgY29kZWMiKTsKLSAgICAgICAgICAgIHJldHVybiAtRUlOVkFMOworICAgICAgICAgICAgQUxPR1coImFkZE1lZGlhQ29kZWNGcm9tQXR0cmlidXRlczogdHJ5aW5nIHRvIGFkZCAiCisgICAgICAgICAgICAgICAgICAiZXhpc3RpbmcgY29kZWMgXCIlc1wiIiwgbmFtZSk7CisgICAgICAgICAgICByZXR1cm4gQUxSRUFEWV9FWElTVFM7CiAgICAgICAgIH0KICAgICAgICAgaWYgKHR5cGUgIT0gbnVsbHB0cikgewogICAgICAgICAgICAgbUN1cnJlbnRUeXBlID0gbUN1cnJlbnRDb2RlYy0+c2Vjb25kLnR5cGVNYXAuZmluZCh0eXBlKTsKICAgICAgICAgICAgIGlmIChtQ3VycmVudFR5cGUgPT0gbUN1cnJlbnRDb2RlYy0+c2Vjb25kLnR5cGVNYXAuZW5kKCkpIHsKLSAgICAgICAgICAgICAgICBBTE9HRSgiYWRkTWVkaWFDb2RlY0Zyb21BdHRyaWJ1dGVzOiB1cGRhdGluZyBub24tZXhpc3RpbmcgdHlwZSIpOwotICAgICAgICAgICAgICAgIHJldHVybiAtRUlOVkFMOworICAgICAgICAgICAgICAgIEFMT0dFKCJhZGRNZWRpYUNvZGVjRnJvbUF0dHJpYnV0ZXM6IGNhbm5vdCB1cGRhdGUgIgorICAgICAgICAgICAgICAgICAgICAgICJub24tZXhpc3RpbmcgdHlwZSBcIiVzXCIgZm9yIGNvZGVjIFwiJXNcIiIsCisgICAgICAgICAgICAgICAgICAgICAgICB0eXBlLCBuYW1lKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gQkFEX1ZBTFVFOwogICAgICAgICAgICAgfQogICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgLy8gVGhpcyBzaG91bGQgaGFwcGVuIG9ubHkgd2hlbiB0aGUgY29kZWMgaGFzIGF0IG1vc3Qgb25lIHR5cGUuCiAgICAgICAgICAgICBtQ3VycmVudFR5cGUgPSBtQ3VycmVudENvZGVjLT5zZWNvbmQudHlwZU1hcC5iZWdpbigpOworICAgICAgICAgICAgaWYgKG1DdXJyZW50VHlwZSA9PSBtQ3VycmVudENvZGVjLT5zZWNvbmQudHlwZU1hcC5lbmQoKSkgeworICAgICAgICAgICAgICAgIEFMT0dFKCJhZGRNZWRpYUNvZGVjRnJvbUF0dHJpYnV0ZXM6IGNhbm5vdCB1cGRhdGUgIgorICAgICAgICAgICAgICAgICAgICAgICJjb2RlYyBcIiVzXCIgd2l0aG91dCB0eXBlIHNwZWNpZmllZCIsIG5hbWUpOworICAgICAgICAgICAgICAgIHJldHVybiBCQURfVkFMVUU7CisgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICB9CiAKQEAgLTU3OSw2ICs1ODAsMTAgQEAKIH0KIAogc3RhdHVzX3QgTWVkaWFDb2RlY3NYbWxQYXJzZXI6OmFkZFF1aXJrKGNvbnN0IGNoYXIgKiphdHRycykgeworICAgIGlmIChtQ3VycmVudENvZGVjID09IG1Db2RlY01hcC5lbmQoKSkgeworICAgICAgICByZXR1cm4gQkFEX1ZBTFVFOworICAgIH0KKwogICAgIGNvbnN0IGNoYXIgKm5hbWUgPSBudWxscHRyOwogCiAgICAgc2l6ZV90IGkgPSAwOwpAQCAtNTg2LDE5ICs1OTEsMTkgQEAKICAgICAgICAgaWYgKHN0ckVxKGF0dHJzW2ldLCAibmFtZSIpKSB7CiAgICAgICAgICAgICBpZiAoYXR0cnNbKytpXSA9PSBudWxscHRyKSB7CiAgICAgICAgICAgICAgICAgQUxPR0UoImFkZFF1aXJrOiBuYW1lIGlzIG51bGwiKTsKLSAgICAgICAgICAgICAgICByZXR1cm4gLUVJTlZBTDsKKyAgICAgICAgICAgICAgICByZXR1cm4gQkFEX1ZBTFVFOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgbmFtZSA9IGF0dHJzW2ldOwogICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgQUxPR0UoImFkZFF1aXJrOiB1bnJlY29nbml6ZWQgYXR0cmlidXRlOiAlcyIsIGF0dHJzW2ldKTsKLSAgICAgICAgICAgIHJldHVybiAtRUlOVkFMOworICAgICAgICAgICAgcmV0dXJuIEJBRF9WQUxVRTsKICAgICAgICAgfQogICAgICAgICArK2k7CiAgICAgfQogCiAgICAgaWYgKG5hbWUgPT0gbnVsbHB0cikgewogICAgICAgICBBTE9HRSgiYWRkUXVpcms6IG5hbWUgbm90IGZvdW5kIik7Ci0gICAgICAgIHJldHVybiAtRUlOVkFMOworICAgICAgICByZXR1cm4gQkFEX1ZBTFVFOwogICAgIH0KIAogICAgIG1DdXJyZW50Q29kZWMtPnNlY29uZC5xdWlya1NldC5lbXBsYWNlKG5hbWUpOwpAQCAtNjA2LDYgKzYxMSwxMCBAQAogfQogCiBzdGF0dXNfdCBNZWRpYUNvZGVjc1htbFBhcnNlcjo6YWRkVHlwZUZyb21BdHRyaWJ1dGVzKGNvbnN0IGNoYXIgKiphdHRycywgYm9vbCBlbmNvZGVyKSB7CisgICAgaWYgKG1DdXJyZW50Q29kZWMgPT0gbUNvZGVjTWFwLmVuZCgpKSB7CisgICAgICAgIHJldHVybiBCQURfVkFMVUU7CisgICAgfQorCiAgICAgY29uc3QgY2hhciAqbmFtZSA9IG51bGxwdHI7CiAgICAgY29uc3QgY2hhciAqdXBkYXRlID0gbnVsbHB0cjsKIApAQCAtNjE0LDQyICs2MjMsNTEgQEAKICAgICAgICAgaWYgKHN0ckVxKGF0dHJzW2ldLCAibmFtZSIpKSB7CiAgICAgICAgICAgICBpZiAoYXR0cnNbKytpXSA9PSBudWxscHRyKSB7CiAgICAgICAgICAgICAgICAgQUxPR0UoImFkZFR5cGVGcm9tQXR0cmlidXRlczogbmFtZSBpcyBudWxsIik7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIC1FSU5WQUw7CisgICAgICAgICAgICAgICAgcmV0dXJuIEJBRF9WQUxVRTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIG5hbWUgPSBhdHRyc1tpXTsKICAgICAgICAgfSBlbHNlIGlmIChzdHJFcShhdHRyc1tpXSwgInVwZGF0ZSIpKSB7CiAgICAgICAgICAgICBpZiAoYXR0cnNbKytpXSA9PSBudWxscHRyKSB7CiAgICAgICAgICAgICAgICAgQUxPR0UoImFkZFR5cGVGcm9tQXR0cmlidXRlczogdXBkYXRlIGlzIG51bGwiKTsKLSAgICAgICAgICAgICAgICByZXR1cm4gLUVJTlZBTDsKKyAgICAgICAgICAgICAgICByZXR1cm4gQkFEX1ZBTFVFOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgdXBkYXRlID0gYXR0cnNbaV07CiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICBBTE9HRSgiYWRkVHlwZUZyb21BdHRyaWJ1dGVzOiB1bnJlY29nbml6ZWQgYXR0cmlidXRlOiAlcyIsIGF0dHJzW2ldKTsKLSAgICAgICAgICAgIHJldHVybiAtRUlOVkFMOworICAgICAgICAgICAgcmV0dXJuIEJBRF9WQUxVRTsKICAgICAgICAgfQogICAgICAgICArK2k7CiAgICAgfQogCiAgICAgaWYgKG5hbWUgPT0gbnVsbHB0cikgewotICAgICAgICByZXR1cm4gLUVJTlZBTDsKKyAgICAgICAgcmV0dXJuIEJBRF9WQUxVRTsKICAgICB9CiAKICAgICBtQ3VycmVudENvZGVjLT5zZWNvbmQuaXNFbmNvZGVyID0gZW5jb2RlcjsKICAgICBtQ3VycmVudFR5cGUgPSBtQ3VycmVudENvZGVjLT5zZWNvbmQudHlwZU1hcC5maW5kKG5hbWUpOwogICAgIGlmICghbVVwZGF0ZSkgewogICAgICAgICBpZiAobUN1cnJlbnRUeXBlICE9IG1DdXJyZW50Q29kZWMtPnNlY29uZC50eXBlTWFwLmVuZCgpKSB7Ci0gICAgICAgICAgICBBTE9HRSgiYWRkVHlwZUZyb21BdHRyaWJ1dGVzOiByZS1kZWZpbmluZyBleGlzdGluZyB0eXBlIHdpdGhvdXQgdXBkYXRlIik7Ci0gICAgICAgICAgICByZXR1cm4gLUVJTlZBTDsKKyAgICAgICAgICAgIEFMT0dXKCJhZGRUeXBlRnJvbUF0dHJpYnV0ZXM6IHRyeWluZyB0byB1cGRhdGUgIgorICAgICAgICAgICAgICAgICAgImV4aXN0aW5nIHR5cGUgXCIlc1wiIiwgbmFtZSk7CisgICAgICAgICAgICByZXR1cm4gQUxSRUFEWV9FWElTVFM7CiAgICAgICAgIH0KICAgICAgICAgbUN1cnJlbnRUeXBlID0gbUN1cnJlbnRDb2RlYy0+c2Vjb25kLnR5cGVNYXAuaW5zZXJ0KAogICAgICAgICAgICAgICAgIFR5cGUobmFtZSwgQXR0cmlidXRlTWFwKCkpKS5maXJzdDsKICAgICB9IGVsc2UgaWYgKG1DdXJyZW50VHlwZSA9PSBtQ3VycmVudENvZGVjLT5zZWNvbmQudHlwZU1hcC5lbmQoKSkgewogICAgICAgICBBTE9HRSgiYWRkVHlwZUZyb21BdHRyaWJ1dGVzOiB1cGRhdGluZyBub24tZXhpc3RpbmcgdHlwZSIpOworICAgICAgICByZXR1cm4gQkFEX1ZBTFVFOwogICAgIH0KICAgICByZXR1cm4gT0s7CiB9CiAKIHN0YXR1c190IE1lZGlhQ29kZWNzWG1sUGFyc2VyOjphZGRMaW1pdChjb25zdCBjaGFyICoqYXR0cnMpIHsKKyAgICBpZiAobUN1cnJlbnRDb2RlYyA9PSBtQ29kZWNNYXAuZW5kKCkpIHsKKyAgICAgICAgcmV0dXJuIEJBRF9WQUxVRTsKKyAgICB9CisgICAgaWYgKG1DdXJyZW50VHlwZSA9PSBtQ3VycmVudENvZGVjLT5zZWNvbmQudHlwZU1hcC5lbmQoKSkgeworICAgICAgICByZXR1cm4gQkFEX1ZBTFVFOworICAgIH0KKwogICAgIGNvbnN0IGNoYXIqIGFfbmFtZSA9IG51bGxwdHI7CiAgICAgY29uc3QgY2hhciogYV9kZWZhdWx0ID0gbnVsbHB0cjsKICAgICBjb25zdCBjaGFyKiBhX2luID0gbnVsbHB0cjsKQEAgLTY2NSw3OCArNjgzLDczIEBACiAgICAgICAgIGlmIChzdHJFcShhdHRyc1tpXSwgIm5hbWUiKSkgewogICAgICAgICAgICAgaWYgKGF0dHJzWysraV0gPT0gbnVsbHB0cikgewogICAgICAgICAgICAgICAgIEFMT0dFKCJhZGRMaW1pdDogbmFtZSBpcyBudWxsIik7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIC1FSU5WQUw7CisgICAgICAgICAgICAgICAgcmV0dXJuIEJBRF9WQUxVRTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGFfbmFtZSA9IGF0dHJzW2ldOwogICAgICAgICB9IGVsc2UgaWYgKHN0ckVxKGF0dHJzW2ldLCAiZGVmYXVsdCIpKSB7CiAgICAgICAgICAgICBpZiAoYXR0cnNbKytpXSA9PSBudWxscHRyKSB7CiAgICAgICAgICAgICAgICAgQUxPR0UoImFkZExpbWl0OiBkZWZhdWx0IGlzIG51bGwiKTsKLSAgICAgICAgICAgICAgICByZXR1cm4gLUVJTlZBTDsKKyAgICAgICAgICAgICAgICByZXR1cm4gQkFEX1ZBTFVFOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgYV9kZWZhdWx0ID0gYXR0cnNbaV07CiAgICAgICAgIH0gZWxzZSBpZiAoc3RyRXEoYXR0cnNbaV0sICJpbiIpKSB7CiAgICAgICAgICAgICBpZiAoYXR0cnNbKytpXSA9PSBudWxscHRyKSB7CiAgICAgICAgICAgICAgICAgQUxPR0UoImFkZExpbWl0OiBpbiBpcyBudWxsIik7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIC1FSU5WQUw7CisgICAgICAgICAgICAgICAgcmV0dXJuIEJBRF9WQUxVRTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGFfaW4gPSBhdHRyc1tpXTsKICAgICAgICAgfSBlbHNlIGlmIChzdHJFcShhdHRyc1tpXSwgIm1heCIpKSB7CiAgICAgICAgICAgICBpZiAoYXR0cnNbKytpXSA9PSBudWxscHRyKSB7CiAgICAgICAgICAgICAgICAgQUxPR0UoImFkZExpbWl0OiBtYXggaXMgbnVsbCIpOwotICAgICAgICAgICAgICAgIHJldHVybiAtRUlOVkFMOworICAgICAgICAgICAgICAgIHJldHVybiBCQURfVkFMVUU7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBhX21heCA9IGF0dHJzW2ldOwogICAgICAgICB9IGVsc2UgaWYgKHN0ckVxKGF0dHJzW2ldLCAibWluIikpIHsKICAgICAgICAgICAgIGlmIChhdHRyc1srK2ldID09IG51bGxwdHIpIHsKICAgICAgICAgICAgICAgICBBTE9HRSgiYWRkTGltaXQ6IG1pbiBpcyBudWxsIik7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIC1FSU5WQUw7CisgICAgICAgICAgICAgICAgcmV0dXJuIEJBRF9WQUxVRTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGFfbWluID0gYXR0cnNbaV07CiAgICAgICAgIH0gZWxzZSBpZiAoc3RyRXEoYXR0cnNbaV0sICJyYW5nZSIpKSB7CiAgICAgICAgICAgICBpZiAoYXR0cnNbKytpXSA9PSBudWxscHRyKSB7CiAgICAgICAgICAgICAgICAgQUxPR0UoImFkZExpbWl0OiByYW5nZSBpcyBudWxsIik7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIC1FSU5WQUw7CisgICAgICAgICAgICAgICAgcmV0dXJuIEJBRF9WQUxVRTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGFfcmFuZ2UgPSBhdHRyc1tpXTsKICAgICAgICAgfSBlbHNlIGlmIChzdHJFcShhdHRyc1tpXSwgInJhbmdlcyIpKSB7CiAgICAgICAgICAgICBpZiAoYXR0cnNbKytpXSA9PSBudWxscHRyKSB7CiAgICAgICAgICAgICAgICAgQUxPR0UoImFkZExpbWl0OiByYW5nZXMgaXMgbnVsbCIpOwotICAgICAgICAgICAgICAgIHJldHVybiAtRUlOVkFMOworICAgICAgICAgICAgICAgIHJldHVybiBCQURfVkFMVUU7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBhX3JhbmdlcyA9IGF0dHJzW2ldOwogICAgICAgICB9IGVsc2UgaWYgKHN0ckVxKGF0dHJzW2ldLCAic2NhbGUiKSkgewogICAgICAgICAgICAgaWYgKGF0dHJzWysraV0gPT0gbnVsbHB0cikgewogICAgICAgICAgICAgICAgIEFMT0dFKCJhZGRMaW1pdDogc2NhbGUgaXMgbnVsbCIpOwotICAgICAgICAgICAgICAgIHJldHVybiAtRUlOVkFMOworICAgICAgICAgICAgICAgIHJldHVybiBCQURfVkFMVUU7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBhX3NjYWxlID0gYXR0cnNbaV07CiAgICAgICAgIH0gZWxzZSBpZiAoc3RyRXEoYXR0cnNbaV0sICJ2YWx1ZSIpKSB7CiAgICAgICAgICAgICBpZiAoYXR0cnNbKytpXSA9PSBudWxscHRyKSB7CiAgICAgICAgICAgICAgICAgQUxPR0UoImFkZExpbWl0OiB2YWx1ZSBpcyBudWxsIik7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIC1FSU5WQUw7CisgICAgICAgICAgICAgICAgcmV0dXJuIEJBRF9WQUxVRTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGFfdmFsdWUgPSBhdHRyc1tpXTsKICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIEFMT0dFKCJhZGRMaW1pdDogdW5yZWNvZ25pemVkIGxpbWl0OiAlcyIsIGF0dHJzW2ldKTsKLSAgICAgICAgICAgIHJldHVybiAtRUlOVkFMOworICAgICAgICAgICAgcmV0dXJuIEJBRF9WQUxVRTsKICAgICAgICAgfQogICAgICAgICArK2k7CiAgICAgfQogCiAgICAgaWYgKGFfbmFtZSA9PSBudWxscHRyKSB7CiAgICAgICAgIEFMT0dFKCJsaW1pdCB3aXRoIG5vICduYW1lJyBhdHRyaWJ1dGUiKTsKLSAgICAgICAgcmV0dXJuIC1FSU5WQUw7CisgICAgICAgIHJldHVybiBCQURfVkFMVUU7CiAgICAgfQogCiAgICAgLy8gc2l6ZSwgYmxvY2tzLCBiaXRyYXRlLCBmcmFtZS1yYXRlLCBibG9ja3MtcGVyLXNlY29uZCwgYXNwZWN0LXJhdGlvLAogICAgIC8vIG1lYXN1cmVkLWZyYW1lLXJhdGUsIG1lYXN1cmVkLWJsb2Nrcy1wZXItc2Vjb25kOiByYW5nZQogICAgIC8vIHF1YWxpdHk6IHJhbmdlICsgZGVmYXVsdCArIFtzY2FsZV0KICAgICAvLyBjb21wbGV4aXR5OiByYW5nZSArIGRlZmF1bHQKLSAgICBpZiAobUN1cnJlbnRUeXBlID09IG1DdXJyZW50Q29kZWMtPnNlY29uZC50eXBlTWFwLmVuZCgpKSB7Ci0gICAgICAgIEFMT0dXKCJpZ25vcmluZyBudWxsIHR5cGUiKTsKLSAgICAgICAgcmV0dXJuIE9LOwotICAgIH0KLQogICAgIHN0ZDo6c3RyaW5nIHJhbmdlOwogICAgIGlmIChzdHJFcShhX25hbWUsICJhc3BlY3QtcmF0aW8iKSB8fAogICAgICAgICAgICAgc3RyRXEoYV9uYW1lLCAiYml0cmF0ZSIpIHx8CkBAIC04ODAsNiArODkzLDEzIEBACiB9CiAKIHN0YXR1c190IE1lZGlhQ29kZWNzWG1sUGFyc2VyOjphZGRGZWF0dXJlKGNvbnN0IGNoYXIgKiphdHRycykgeworICAgIGlmIChtQ3VycmVudENvZGVjID09IG1Db2RlY01hcC5lbmQoKSkgeworICAgICAgICByZXR1cm4gQkFEX1ZBTFVFOworICAgIH0KKyAgICBpZiAobUN1cnJlbnRUeXBlID09IG1DdXJyZW50Q29kZWMtPnNlY29uZC50eXBlTWFwLmVuZCgpKSB7CisgICAgICAgIHJldHVybiBCQURfVkFMVUU7CisgICAgfQorCiAgICAgc2l6ZV90IGkgPSAwOwogICAgIGNvbnN0IGNoYXIgKm5hbWUgPSBudWxscHRyOwogICAgIGludDMyX3Qgb3B0aW9uYWwgPSAtMTsKQEAgLTg5MCwzMCArOTEwLDMwIEBACiAgICAgICAgIGlmIChzdHJFcShhdHRyc1tpXSwgIm5hbWUiKSkgewogICAgICAgICAgICAgaWYgKGF0dHJzWysraV0gPT0gbnVsbHB0cikgewogICAgICAgICAgICAgICAgIEFMT0dFKCJhZGRGZWF0dXJlOiBuYW1lIGlzIG51bGwiKTsKLSAgICAgICAgICAgICAgICByZXR1cm4gLUVJTlZBTDsKKyAgICAgICAgICAgICAgICByZXR1cm4gQkFEX1ZBTFVFOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgbmFtZSA9IGF0dHJzW2ldOwogICAgICAgICB9IGVsc2UgaWYgKHN0ckVxKGF0dHJzW2ldLCAib3B0aW9uYWwiKSkgewogICAgICAgICAgICAgaWYgKGF0dHJzWysraV0gPT0gbnVsbHB0cikgewogICAgICAgICAgICAgICAgIEFMT0dFKCJhZGRGZWF0dXJlOiBvcHRpb25hbCBpcyBudWxsIik7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIC1FSU5WQUw7CisgICAgICAgICAgICAgICAgcmV0dXJuIEJBRF9WQUxVRTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIG9wdGlvbmFsID0gcGFyc2VCb29sZWFuKGF0dHJzW2ldKSA/IDEgOiAwOwogICAgICAgICB9IGVsc2UgaWYgKHN0ckVxKGF0dHJzW2ldLCAicmVxdWlyZWQiKSkgewogICAgICAgICAgICAgaWYgKGF0dHJzWysraV0gPT0gbnVsbHB0cikgewogICAgICAgICAgICAgICAgIEFMT0dFKCJhZGRGZWF0dXJlOiByZXF1aXJlZCBpcyBudWxsIik7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIC1FSU5WQUw7CisgICAgICAgICAgICAgICAgcmV0dXJuIEJBRF9WQUxVRTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIHJlcXVpcmVkID0gcGFyc2VCb29sZWFuKGF0dHJzW2ldKSA/IDEgOiAwOwogICAgICAgICB9IGVsc2UgaWYgKHN0ckVxKGF0dHJzW2ldLCAidmFsdWUiKSkgewogICAgICAgICAgICAgaWYgKGF0dHJzWysraV0gPT0gbnVsbHB0cikgewogICAgICAgICAgICAgICAgIEFMT0dFKCJhZGRGZWF0dXJlOiB2YWx1ZSBpcyBudWxsIik7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIC1FSU5WQUw7CisgICAgICAgICAgICAgICAgcmV0dXJuIEJBRF9WQUxVRTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIHZhbHVlID0gYXR0cnNbaV07CiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICBBTE9HRSgiYWRkRmVhdHVyZTogdW5yZWNvZ25pemVkIGF0dHJpYnV0ZTogJXMiLCBhdHRyc1tpXSk7Ci0gICAgICAgICAgICByZXR1cm4gLUVJTlZBTDsKKyAgICAgICAgICAgIHJldHVybiBCQURfVkFMVUU7CiAgICAgICAgIH0KICAgICAgICAgKytpOwogICAgIH0KQEAgLTkyMSwyMyArOTQxLDE4IEBACiAgICAgLy8gRXZlcnkgZmVhdHVyZSBtdXN0IGhhdmUgYSBuYW1lLgogICAgIGlmIChuYW1lID09IG51bGxwdHIpIHsKICAgICAgICAgQUxPR0UoImZlYXR1cmUgd2l0aCBubyAnbmFtZScgYXR0cmlidXRlIik7Ci0gICAgICAgIHJldHVybiAtRUlOVkFMOwotICAgIH0KLQotICAgIGlmIChtQ3VycmVudFR5cGUgPT0gbUN1cnJlbnRDb2RlYy0+c2Vjb25kLnR5cGVNYXAuZW5kKCkpIHsKLSAgICAgICAgQUxPR1coImlnbm9yaW5nIG51bGwgdHlwZSIpOwotICAgICAgICByZXR1cm4gT0s7CisgICAgICAgIHJldHVybiBCQURfVkFMVUU7CiAgICAgfQogCiAgICAgaWYgKChvcHRpb25hbCAhPSAtMSkgfHwgKHJlcXVpcmVkICE9IC0xKSkgewogICAgICAgICBpZiAob3B0aW9uYWwgPT0gcmVxdWlyZWQpIHsKICAgICAgICAgICAgIEFMT0dFKCJmZWF0dXJlICclcycgaXMgYm90aC9uZWl0aGVyIG9wdGlvbmFsIGFuZCByZXF1aXJlZCIsIG5hbWUpOwotICAgICAgICAgICAgcmV0dXJuIC1FSU5WQUw7CisgICAgICAgICAgICByZXR1cm4gQkFEX1ZBTFVFOwogICAgICAgICB9CiAgICAgICAgIGlmICgob3B0aW9uYWwgPT0gMSkgfHwgKHJlcXVpcmVkID09IDEpKSB7CiAgICAgICAgICAgICBpZiAodmFsdWUgIT0gbnVsbHB0cikgewogICAgICAgICAgICAgICAgIEFMT0dFKCJmZWF0dXJlICclcycgY2Fubm90IGhhdmUgZXh0cmEgJ3ZhbHVlJyIsIG5hbWUpOwotICAgICAgICAgICAgICAgIHJldHVybiAtRUlOVkFMOworICAgICAgICAgICAgICAgIHJldHVybiBCQURfVkFMVUU7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBtQ3VycmVudFR5cGUtPnNlY29uZFtzdGQ6OnN0cmluZygiZmVhdHVyZS0iKSArIG5hbWVdID0KICAgICAgICAgICAgICAgICAgICAgb3B0aW9uYWwgPT0gMSA/ICIwIiA6ICIxIjsKZGlmZiAtLWdpdCBhL21lZGlhL210cC9NdHBGZnNIYW5kbGUuY3BwIGIvbWVkaWEvbXRwL010cEZmc0hhbmRsZS5jcHAKaW5kZXggZjI1ZmM3MS4uYWQzYzA2OCAxMDA2NDQKLS0tIGEvbWVkaWEvbXRwL010cEZmc0hhbmRsZS5jcHAKKysrIGIvbWVkaWEvbXRwL010cEZmc0hhbmRsZS5jcHAKQEAgLTIxMiw3ICsyMTIsNiBAQAogICAgIHVpbnQxNl90IHZhbHVlID0gc2V0dXAtPndWYWx1ZTsKICAgICBzdGQ6OnZlY3RvcjxjaGFyPiBidWY7CiAgICAgYnVmLnJlc2l6ZShsZW5ndGgpOwotICAgIGludCByZXQgPSAwOwogCiAgICAgaWYgKCEodHlwZSAmIFVTQl9ESVJfSU4pKSB7CiAgICAgICAgIGlmICg6OnJlYWQobUNvbnRyb2wsIGJ1Zi5kYXRhKCksIGxlbmd0aCkgIT0gbGVuZ3RoKSB7CkBAIC0yMjUsOCArMjI0LDggQEAKICAgICAgICAgY2FzZSBNVFBfUkVRX1JFU0VUOgogICAgICAgICBjYXNlIE1UUF9SRVFfQ0FOQ0VMOgogICAgICAgICAgICAgZXJybm8gPSBFQ0FOQ0VMRUQ7Ci0gICAgICAgICAgICByZXQgPSAtMTsKLSAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICAvLyAgICBicmVhazsKICAgICAgICAgY2FzZSBNVFBfUkVRX0dFVF9ERVZJQ0VfU1RBVFVTOgogICAgICAgICB7CiAgICAgICAgICAgICBpZiAobGVuZ3RoIDwgc2l6ZW9mKHN0cnVjdCBtdHBfZGV2aWNlX3N0YXR1cykgKyA0KSB7CmRpZmYgLS1naXQgYS9tZWRpYS9tdHAvTXRwU2VydmVyLmNwcCBiL21lZGlhL210cC9NdHBTZXJ2ZXIuY3BwCmluZGV4IGNjZGRkNmUuLmNhOGNiNzggMTAwNjQ0Ci0tLSBhL21lZGlhL210cC9NdHBTZXJ2ZXIuY3BwCisrKyBiL21lZGlhL210cC9NdHBTZXJ2ZXIuY3BwCkBAIC05OSw2ICs5OSw3IEBACiAgICAgTVRQX0VWRU5UX1NUT1JFX0FEREVELAogICAgIE1UUF9FVkVOVF9TVE9SRV9SRU1PVkVELAogICAgIE1UUF9FVkVOVF9ERVZJQ0VfUFJPUF9DSEFOR0VELAorICAgIE1UUF9FVkVOVF9PQkpFQ1RfSU5GT19DSEFOR0VELAogfTsKIAogTXRwU2VydmVyOjpNdHBTZXJ2ZXIoSU10cERhdGFiYXNlKiBkYXRhYmFzZSwgaW50IGNvbnRyb2xGZCwgYm9vbCBwdHAsCkBAIC0yNTksNiArMjYwLDExIEBACiAgICAgc2VuZEV2ZW50KE1UUF9FVkVOVF9PQkpFQ1RfUkVNT1ZFRCwgaGFuZGxlKTsKIH0KIAordm9pZCBNdHBTZXJ2ZXI6OnNlbmRPYmplY3RJbmZvQ2hhbmdlZChNdHBPYmplY3RIYW5kbGUgaGFuZGxlKSB7CisgICAgQUxPR1YoInNlbmRPYmplY3RJbmZvQ2hhbmdlZCAlZFxuIiwgaGFuZGxlKTsKKyAgICBzZW5kRXZlbnQoTVRQX0VWRU5UX09CSkVDVF9JTkZPX0NIQU5HRUQsIGhhbmRsZSk7Cit9CisKIHZvaWQgTXRwU2VydmVyOjpzZW5kU3RvcmVBZGRlZChNdHBTdG9yYWdlSUQgaWQpIHsKICAgICBBTE9HVigic2VuZFN0b3JlQWRkZWQgJTA4WFxuIiwgaWQpOwogICAgIHNlbmRFdmVudChNVFBfRVZFTlRfU1RPUkVfQURERUQsIGlkKTsKQEAgLTQ0Miw2ICs0NDgsOSBAQAogICAgICAgICAgICAgYnJlYWs7CiAgICAgfQogCisgICAgaWYgKHJlc3BvbnNlICE9IE1UUF9SRVNQT05TRV9PSykKKyAgICAgIEFMT0dXKCJbTVRQXSBnb3QgcmVzcG9uc2UgMHglWCBpbiBjb21tYW5kICVzICgleCkiLCByZXNwb25zZSwKKyAgICAgICAgICAgIE10cERlYnVnOjpnZXRPcGVyYXRpb25Db2RlTmFtZShvcGVyYXRpb24pLCBvcGVyYXRpb24pOwogICAgIGlmIChyZXNwb25zZSA9PSBNVFBfUkVTUE9OU0VfVFJBTlNBQ1RJT05fQ0FOQ0VMTEVEKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgbVJlc3BvbnNlLnNldFJlc3BvbnNlQ29kZShyZXNwb25zZSk7CkBAIC02NTIsOCArNjYxLDggQEAKICAgICAgICAgcmV0dXJuIE1UUF9SRVNQT05TRV9JTlZBTElEX1BBUkFNRVRFUjsKICAgICBNdHBPYmplY3RIYW5kbGUgaGFuZGxlID0gbVJlcXVlc3QuZ2V0UGFyYW1ldGVyKDEpOwogICAgIE10cE9iamVjdFByb3BlcnR5IHByb3BlcnR5ID0gbVJlcXVlc3QuZ2V0UGFyYW1ldGVyKDIpOwotICAgIEFMT0dWKCJHZXRPYmplY3RQcm9wVmFsdWUgJWQgJXNcbiIsIGhhbmRsZSwKLSAgICAgICAgICAgIE10cERlYnVnOjpnZXRPYmplY3RQcm9wQ29kZU5hbWUocHJvcGVydHkpKTsKKyAgICBBTE9HVigiR2V0T2JqZWN0UHJvcFZhbHVlICVkICVzICgweCUwNFgpXG4iLCBoYW5kbGUsCisgICAgICAgICAgTXRwRGVidWc6OmdldE9iamVjdFByb3BDb2RlTmFtZShwcm9wZXJ0eSksIHByb3BlcnR5KTsKIAogICAgIHJldHVybiBtRGF0YWJhc2UtPmdldE9iamVjdFByb3BlcnR5VmFsdWUoaGFuZGxlLCBwcm9wZXJ0eSwgbURhdGEpOwogfQpAQCAtOTQ2LDcgKzk1NSw4IEBACiAgICAgaWYgKCFtRGF0YS5nZXRTdHJpbmcobW9kaWZpZWQpKSByZXR1cm4gTVRQX1JFU1BPTlNFX0lOVkFMSURfUEFSQU1FVEVSOyAgICAgLy8gZGF0ZSBtb2RpZmllZAogICAgIC8vIGtleXdvcmRzIGZvbGxvdwogCi0gICAgQUxPR1YoIm5hbWU6ICVzIGZvcm1hdDogJTA0WFxuIiwgKGNvbnN0IGNoYXIgKiluYW1lLCBmb3JtYXQpOworICAgIEFMT0dWKCJuYW1lOiAlcyBmb3JtYXQ6IDB4JTA0WCAoJXMpXG4iLCAoY29uc3QgY2hhciopbmFtZSwgZm9ybWF0LAorICAgICAgICAgIE10cERlYnVnOjpnZXRGb3JtYXRDb2RlTmFtZShmb3JtYXQpKTsKICAgICB0aW1lX3QgbW9kaWZpZWRUaW1lOwogICAgIGlmICghcGFyc2VEYXRlVGltZShtb2RpZmllZCwgbW9kaWZpZWRUaW1lKSkKICAgICAgICAgbW9kaWZpZWRUaW1lID0gMDsKQEAgLTk2Nyw5ICs5NzcsMTAgQEAKICAgICAgICAgICAgIHJldHVybiBNVFBfUkVTUE9OU0VfT0JKRUNUX1RPT19MQVJHRTsKICAgICB9CiAKLSAgICBBTE9HRCgicGF0aDogJXMgcGFyZW50OiAlZCBzdG9yYWdlSUQ6ICUwOFgiLCAoY29uc3QgY2hhciopcGF0aCwgcGFyZW50LCBzdG9yYWdlSUQpOworICAgIEFMT0dWKCJwYXRoOiAlcyBwYXJlbnQ6ICVkIHN0b3JhZ2VJRDogJTA4WCIsIChjb25zdCBjaGFyKilwYXRoLCBwYXJlbnQsIHN0b3JhZ2VJRCk7CiAgICAgTXRwT2JqZWN0SGFuZGxlIGhhbmRsZSA9IG1EYXRhYmFzZS0+YmVnaW5TZW5kT2JqZWN0KChjb25zdCBjaGFyKilwYXRoLCBmb3JtYXQsCiAgICAgICAgICAgICBwYXJlbnQsIHN0b3JhZ2VJRCk7CisgICAgQUxPR0QoImhhbmRsZTogJWQsIHBhcmVudDogJWQsIHN0b3JhZ2VJRDogJTA4WCIsIGhhbmRsZSwgcGFyZW50LCBzdG9yYWdlSUQpOwogICAgIGlmIChoYW5kbGUgPT0ga0ludmFsaWRPYmplY3RIYW5kbGUpIHsKICAgICAgICAgcmV0dXJuIE1UUF9SRVNQT05TRV9HRU5FUkFMX0VSUk9SOwogICAgIH0KZGlmZiAtLWdpdCBhL21lZGlhL210cC9NdHBTZXJ2ZXIuaCBiL21lZGlhL210cC9NdHBTZXJ2ZXIuaAppbmRleCBmNjkzOWQ3Li4xZjg3OTlmIDEwMDY0NAotLS0gYS9tZWRpYS9tdHAvTXRwU2VydmVyLmgKKysrIGIvbWVkaWEvbXRwL010cFNlcnZlci5oCkBAIC0xMTUsNiArMTE1LDcgQEAKIAogICAgIHZvaWQgICAgICAgICAgICAgICAgc2VuZE9iamVjdEFkZGVkKE10cE9iamVjdEhhbmRsZSBoYW5kbGUpOwogICAgIHZvaWQgICAgICAgICAgICAgICAgc2VuZE9iamVjdFJlbW92ZWQoTXRwT2JqZWN0SGFuZGxlIGhhbmRsZSk7CisgICAgdm9pZCAgICAgICAgICAgICAgICBzZW5kT2JqZWN0SW5mb0NoYW5nZWQoTXRwT2JqZWN0SGFuZGxlIGhhbmRsZSk7CiAgICAgdm9pZCAgICAgICAgICAgICAgICBzZW5kRGV2aWNlUHJvcGVydHlDaGFuZ2VkKE10cERldmljZVByb3BlcnR5IHByb3BlcnR5KTsKIAogcHJpdmF0ZToKZGlmZiAtLWdpdCBhL21lZGlhL25kay9BbmRyb2lkLmJwIGIvbWVkaWEvbmRrL0FuZHJvaWQuYnAKaW5kZXggNGEzNjY4MS4uNTQxYmEzZSAxMDA2NDQKLS0tIGEvbWVkaWEvbmRrL0FuZHJvaWQuYnAKKysrIGIvbWVkaWEvbmRrL0FuZHJvaWQuYnAKQEAgLTMxLDYgKzMxLDEzIEBACiAgICAgbGljZW5zZTogIk5PVElDRSIsCiB9CiAKKy8vIGZvciB1c2Ugd2l0aCBoZWFkZXJfbGlicworY2NfbGlicmFyeV9oZWFkZXJzIHsKKyAgICBuYW1lOiAibWVkaWFfbmRrX2hlYWRlcnMiLAorICAgIHZlbmRvcl9hdmFpbGFibGU6IHRydWUsCisgICAgZXhwb3J0X2luY2x1ZGVfZGlyczogWyJpbmNsdWRlIl0KK30KKwogY2NfbGlicmFyeV9zaGFyZWQgewogICAgIG5hbWU6ICJsaWJtZWRpYW5kayIsCiAKQEAgLTU2LDcgKzYzLDYgQEAKICAgICBjZmxhZ3M6IFsKICAgICAgICAgIi1mdmlzaWJpbGl0eT1oaWRkZW4iLAogICAgICAgICAiLURFWFBPUlQ9X19hdHRyaWJ1dGVfXygodmlzaWJpbGl0eShcImRlZmF1bHRcIikpKSIsCi0KICAgICAgICAgIi1XZXJyb3IiLAogICAgICAgICAiLVdhbGwiLAogICAgIF0sCkBAIC02Niw2ICs3Miw4IEBACiAgICAgXSwKIAogICAgIHNoYXJlZF9saWJzOiBbCisgICAgICAgICJhbmRyb2lkLmhhcmR3YXJlLmdyYXBoaWNzLmJ1ZmZlcnF1ZXVlQDEuMCIsCisgICAgICAgICJhbmRyb2lkLmhpZGwudG9rZW5AMS4wLXV0aWxzIiwKICAgICAgICAgImxpYmJpbmRlciIsCiAgICAgICAgICJsaWJtZWRpYSIsCiAgICAgICAgICJsaWJtZWRpYV9vbXgiLApAQCAtNzQsMTQgKzgyLDE5IEBACiAgICAgICAgICJsaWJtZWRpYWV4dHJhY3RvciIsCiAgICAgICAgICJsaWJzdGFnZWZyaWdodCIsCiAgICAgICAgICJsaWJzdGFnZWZyaWdodF9mb3VuZGF0aW9uIiwKKyAgICAgICAgImxpYnN0YWdlZnJpZ2h0X2J1ZmZlcnF1ZXVlX2hlbHBlciIsCiAgICAgICAgICJsaWJsb2ciLAogICAgICAgICAibGlidXRpbHMiLAogICAgICAgICAibGliY3V0aWxzIiwKICAgICAgICAgImxpYmFuZHJvaWQiLAogICAgICAgICAibGliYW5kcm9pZF9ydW50aW1lIiwKICAgICAgICAgImxpYmJpbmRlciIsCisgICAgICAgICJsaWJod2JpbmRlciIsCisgICAgICAgICJsaWJoaWRsYmFzZSIsCiAgICAgICAgICJsaWJndWkiLAogICAgICAgICAibGlidWkiLAorICAgICAgICAibGlibWVkaWEyX2puaV9jb3JlIiwKKyAgICAgICAgImxpYm1lZGlhbmRrX3V0aWxzIiwKICAgICBdLAogCiAgICAgZXhwb3J0X2luY2x1ZGVfZGlyczogWyJpbmNsdWRlIl0sCkBAIC05Niw1ICsxMDksNzAgQEAKIGxsbmRrX2xpYnJhcnkgewogICAgIG5hbWU6ICJsaWJtZWRpYW5kayIsCiAgICAgc3ltYm9sX2ZpbGU6ICJsaWJtZWRpYW5kay5tYXAudHh0IiwKLSAgICBleHBvcnRfaW5jbHVkZV9kaXJzOiBbImluY2x1ZGUiXSwKKyAgICBleHBvcnRfaW5jbHVkZV9kaXJzOiBbCisgICAgICAgICJpbmNsdWRlIiwKKyAgICBdLAorfQorCitjY19saWJyYXJ5IHsKKyAgICBuYW1lOiAibGlibWVkaWFuZGtfdXRpbHMiLAorCisgICAgc3JjczogWworICAgICAgICAiTmRrTWVkaWFEYXRhU291cmNlQ2FsbGJhY2tzLmNwcCIsCisgICAgXSwKKworICAgIGluY2x1ZGVfZGlyczogWworICAgICAgICAiZnJhbWV3b3Jrcy9hdi9tZWRpYS9saWJzdGFnZWZyaWdodC9pbmNsdWRlIiwKKyAgICAgICAgImZyYW1ld29ya3MvYXYvbWVkaWEvbmRrL2luY2x1ZGUiLAorICAgIF0sCisKKyAgICBleHBvcnRfaW5jbHVkZV9kaXJzOiBbCisgICAgICAgICJpbmNsdWRlIiwKKyAgICBdLAorCisgICAgY2ZsYWdzOiBbCisgICAgICAgICItV2Vycm9yIiwKKyAgICAgICAgIi1Xbm8tZXJyb3I9ZGVwcmVjYXRlZC1kZWNsYXJhdGlvbnMiLAorICAgICAgICAiLVdhbGwiLAorICAgIF0sCisKKyAgICBzaGFyZWRfbGliczogWworICAgICAgICAibGlic3RhZ2VmcmlnaHRfZm91bmRhdGlvbiIsCisgICAgICAgICJsaWJsb2ciLAorICAgICAgICAibGlidXRpbHMiLAorICAgICAgICAibGliY3V0aWxzIiwKKyAgICBdLAorCisgICAgc2FuaXRpemU6IHsKKyAgICAgICAgbWlzY191bmRlZmluZWQ6IFsKKyAgICAgICAgICAgICJ1bnNpZ25lZC1pbnRlZ2VyLW92ZXJmbG93IiwKKyAgICAgICAgICAgICJzaWduZWQtaW50ZWdlci1vdmVyZmxvdyIsCisgICAgICAgIF0sCisgICAgICAgIGNmaTogdHJ1ZSwKKyAgICAgICAgZGlhZzogeworICAgICAgICAgICAgY2ZpOiB0cnVlLAorICAgICAgICB9LAorICAgIH0sCit9CisKK2NjX3Rlc3QgeworICAgIG5hbWU6ICJBSW1hZ2VSZWFkZXJXaW5kb3dIYW5kbGVUZXN0IiwKKyAgICBzcmNzOiBbInRlc3RzL0FJbWFnZVJlYWRlcldpbmRvd0hhbmRsZVRlc3QuY3BwIl0sCisgICAgc2hhcmVkX2xpYnM6IFsKKyAgICAgICAgImxpYmJpbmRlciIsCisgICAgICAgICJsaWJtZWRpYW5kayIsCisgICAgICAgICJsaWJtZWRpYXV0aWxzIiwKKyAgICAgICAgImxpYm5hdGl2ZXdpbmRvdyIsCisgICAgICAgICJsaWJndWkiLAorICAgICAgICAibGlidXRpbHMiLAorICAgICAgICAibGlidWkiLAorICAgICAgICAibGliY3V0aWxzIiwKKyAgICAgICAgImFuZHJvaWQuaGFyZHdhcmUuZ3JhcGhpY3MuYnVmZmVycXVldWVAMS4wIiwKKyAgICBdLAorICAgIGNmbGFnczogWworICAgICAgICAiLURfX0FORFJPSURfVk5ES19fIiwKKyAgICBdLAorICAgIGluY2x1ZGVfZGlyczogWworICAgICAgICAiZnJhbWV3b3Jrcy9hdi9tZWRpYS9uZGsvIiwKKyAgICBdLAogfQpkaWZmIC0tZ2l0IGEvbWVkaWEvbmRrL05ka0ltYWdlUmVhZGVyLmNwcCBiL21lZGlhL25kay9OZGtJbWFnZVJlYWRlci5jcHAKaW5kZXggYmU2MzVmZi4uYjg2YWI0MiAxMDA2NDQKLS0tIGEvbWVkaWEvbmRrL05ka0ltYWdlUmVhZGVyLmNwcAorKysgYi9tZWRpYS9uZGsvTmRrSW1hZ2VSZWFkZXIuY3BwCkBAIC0yOCw2ICsyOCw3IEBACiAjaW5jbHVkZSA8YW5kcm9pZF9ydW50aW1lL2FuZHJvaWRfdmlld19TdXJmYWNlLmg+CiAjaW5jbHVkZSA8YW5kcm9pZF9ydW50aW1lL2FuZHJvaWRfaGFyZHdhcmVfSGFyZHdhcmVCdWZmZXIuaD4KICNpbmNsdWRlIDxncmFsbG9jdXNhZ2UvR3JhbGxvY1VzYWdlQ29udmVyc2lvbi5oPgorI2luY2x1ZGUgPG1lZGlhL3N0YWdlZnJpZ2h0L2JxaGVscGVyL1dHcmFwaGljQnVmZmVyUHJvZHVjZXIuaD4KIAogdXNpbmcgbmFtZXNwYWNlIGFuZHJvaWQ7CiAKQEAgLTQzLDYgKzQ0LDEwIEBACiBjb25zdCBjaGFyKiBBSW1hZ2VSZWFkZXI6OmtDb250ZXh0S2V5ICAgID0gIkNvbnRleHQiOwogY29uc3QgY2hhciogQUltYWdlUmVhZGVyOjprR3JhcGhpY0J1ZmZlcktleSA9ICJHcmFwaGljQnVmZmVyIjsKIAorc3RhdGljIGNvbnN0ZXhwciBpbnQga1dpbmRvd0hhbFRva2VuU2l6ZU1heCA9IDI1NjsKKworc3RhdGljIG5hdGl2ZV9oYW5kbGVfdCAqY29udmVydEhhbFRva2VuVG9OYXRpdmVIYW5kbGUoY29uc3QgSGFsVG9rZW4gJmhhbFRva2VuKTsKKwogYm9vbAogQUltYWdlUmVhZGVyOjppc1N1cHBvcnRlZEZvcm1hdEFuZFVzYWdlKGludDMyX3QgZm9ybWF0LCB1aW50NjRfdCB1c2FnZSkgewogICAgIC8vIENoZWNrIHdoZXRoZXIgdXNhZ2UgaGFzIGVpdGhlciBDUFVfUkVBRF9PRlRFTiBvciBDUFVfUkVBRCBzZXQuIE5vdGUgdGhhdCBjaGVjayBhZ2FpbnN0CkBAIC02Myw2ICs2OCw3IEBACiAgICAgICAgIGNhc2UgQUlNQUdFX0ZPUk1BVF9SQVcxMjoKICAgICAgICAgY2FzZSBBSU1BR0VfRk9STUFUX0RFUFRIMTY6CiAgICAgICAgIGNhc2UgQUlNQUdFX0ZPUk1BVF9ERVBUSF9QT0lOVF9DTE9VRDoKKyAgICAgICAgY2FzZSBBSU1BR0VfRk9STUFUX1k4OgogICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgIGNhc2UgQUlNQUdFX0ZPUk1BVF9QUklWQVRFOgogICAgICAgICAgICAgLy8gRm9yIHByaXZhdGUgZm9ybWF0LCBjcHUgdXNhZ2UgaXMgcHJvaGliaXRlZC4KQEAgLTg5LDYgKzk1LDcgQEAKICAgICAgICAgY2FzZSBBSU1BR0VfRk9STUFUX1JBVzEyOgogICAgICAgICBjYXNlIEFJTUFHRV9GT1JNQVRfREVQVEgxNjoKICAgICAgICAgY2FzZSBBSU1BR0VfRk9STUFUX0RFUFRIX1BPSU5UX0NMT1VEOgorICAgICAgICBjYXNlIEFJTUFHRV9GT1JNQVRfWTg6CiAgICAgICAgICAgICByZXR1cm4gMTsKICAgICAgICAgY2FzZSBBSU1BR0VfRk9STUFUX1BSSVZBVEU6CiAgICAgICAgICAgICByZXR1cm4gMDsKQEAgLTM2Myw2ICszNzAsMTUgQEAKICAgICAgICAgbUJ1ZmZlckl0ZW1Db25zdW1lci0+YWJhbmRvbigpOwogICAgICAgICBtQnVmZmVySXRlbUNvbnN1bWVyLT5zZXRGcmFtZUF2YWlsYWJsZUxpc3RlbmVyKG51bGxwdHIpOwogICAgIH0KKworICAgIGlmIChtV2luZG93SGFuZGxlICE9IG51bGxwdHIpIHsKKyAgICAgICAgaW50IHNpemUgPSBtV2luZG93SGFuZGxlLT5kYXRhWzBdOworICAgICAgICBoaWRsX3ZlYzx1aW50OF90PiBoYWxUb2tlbjsKKyAgICAgICAgaGFsVG9rZW4uc2V0VG9FeHRlcm5hbCgKKyAgICAgICAgICAgIHJlaW50ZXJwcmV0X2Nhc3Q8dWludDhfdCAqPigmbVdpbmRvd0hhbmRsZS0+ZGF0YVsxXSksIHNpemUpOworICAgICAgICBkZWxldGVIYWxUb2tlbihoYWxUb2tlbik7CisgICAgICAgIG5hdGl2ZV9oYW5kbGVfZGVsZXRlKG1XaW5kb3dIYW5kbGUpOworICAgIH0KIH0KIAogbWVkaWFfc3RhdHVzX3QKQEAgLTUyMiw2ICs1MzgsMjUgQEAKICAgICB9CiB9CiAKK21lZGlhX3N0YXR1c190IEFJbWFnZVJlYWRlcjo6Z2V0V2luZG93TmF0aXZlSGFuZGxlKG5hdGl2ZV9oYW5kbGUgKipoYW5kbGUpIHsKKyAgICBpZiAobVdpbmRvd0hhbmRsZSAhPSBudWxscHRyKSB7CisgICAgICAgICpoYW5kbGUgPSBtV2luZG93SGFuZGxlOworICAgICAgICByZXR1cm4gQU1FRElBX09LOworICAgIH0KKyAgICBzcDxIR3JhcGhpY0J1ZmZlclByb2R1Y2VyPiBoZ2JwID0KKyAgICAgICAgbmV3IFRXR3JhcGhpY0J1ZmZlclByb2R1Y2VyPEhHcmFwaGljQnVmZmVyUHJvZHVjZXI+KG1Qcm9kdWNlcik7CisgICAgSGFsVG9rZW4gaGFsVG9rZW47CisgICAgaWYgKCFjcmVhdGVIYWxUb2tlbihoZ2JwLCAmaGFsVG9rZW4pKSB7CisgICAgICAgIHJldHVybiBBTUVESUFfRVJST1JfVU5LTk9XTjsKKyAgICB9CisgICAgbVdpbmRvd0hhbmRsZSA9IGNvbnZlcnRIYWxUb2tlblRvTmF0aXZlSGFuZGxlKGhhbFRva2VuKTsKKyAgICBpZiAoIW1XaW5kb3dIYW5kbGUpIHsKKyAgICAgICAgcmV0dXJuIEFNRURJQV9FUlJPUl9VTktOT1dOOworICAgIH0KKyAgICAqaGFuZGxlID0gbVdpbmRvd0hhbmRsZTsKKyAgICByZXR1cm4gQU1FRElBX09LOworfQorCiBpbnQKIEFJbWFnZVJlYWRlcjo6Z2V0QnVmZmVyV2lkdGgoQnVmZmVySXRlbSogYnVmZmVyKSB7CiAgICAgaWYgKGJ1ZmZlciA9PSBOVUxMKSByZXR1cm4gLTE7CkBAIC01ODUsNiArNjIwLDMzIEBACiAgICAgfQogfQogCitzdGF0aWMgbmF0aXZlX2hhbmRsZV90ICpjb252ZXJ0SGFsVG9rZW5Ub05hdGl2ZUhhbmRsZSgKKyAgICAgICAgY29uc3QgSGFsVG9rZW4gJmhhbFRva2VuKSB7CisgICAgLy8gV2UgYXR0ZW1wdCB0byBzdG9yZSBoYWxUb2tlbiBpbiB0aGUgaW50cyBvZiB0aGUgbmF0aXZlX2hhbmRsZV90IGFmdGVyIGl0cworICAgIC8vIHNpemUuIFRoZSBmaXJzdCBpbnQgc3RvcmVzIHRoZSBzaXplIG9mIHRoZSB0b2tlbi4gV2Ugc3RvcmUgdGhpcyBpbiBhbiBpbnQKKyAgICAvLyB0byBhdm9pZCBhbGlnbm1lbnQgaXNzdWVzIHdoZXJlIHNpemVfdCBhbmQgaW50IGRvIG5vdCBoYXZlIHRoZSBzYW1lCisgICAgLy8gYWxpZ25tZW50LgorICAgIHNpemVfdCBuaERhdGFCeXRlU2l6ZSA9IGhhbFRva2VuLnNpemUoKTsKKyAgICBpZiAobmhEYXRhQnl0ZVNpemUgPiBrV2luZG93SGFsVG9rZW5TaXplTWF4KSB7CisgICAgICAgIC8vIFRoZSBzaXplIG9mIHRoZSB0b2tlbiBpc24ndCByZWFzb25hYmxlLi4KKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgfQorICAgIHNpemVfdCBudW1JbnRzID0gY2VpbChuaERhdGFCeXRlU2l6ZSAvIHNpemVvZihpbnQpKSArIDE7CisKKyAgICAvLyBXZSBkb24ndCBjaGVjayBmb3Igb3ZlcmZsb3csIHdoZXRoZXIgbnVtSW50cyBjYW4gZml0IGluIGFuIGludCwgc2luY2Ugd2UKKyAgICAvLyBleHBlY3Qga1dpbmRvd0hhbFRva2VuU2l6ZU1heCB0byBiZSBhIHJlYXNvbmFibGUgbGltaXQuCisgICAgLy8gY3JlYXRlIGEgbmF0aXZlX2hhbmRsZV90IHdpdGggMCBudW1GZHMgYW5kIG51bUludHMgbnVtYmVyIG9mIGludHMuCisgICAgbmF0aXZlX2hhbmRsZV90ICpuaCA9CisgICAgICAgIG5hdGl2ZV9oYW5kbGVfY3JlYXRlKDAsIG51bUludHMpOworICAgIGlmICghbmgpIHsKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgfQorICAgIC8vIFN0b3JlIHRoZSBzaXplIG9mIHRoZSB0b2tlbiBpbiB0aGUgZmlyc3QgaW50LgorICAgIG5oLT5kYXRhWzBdID0gbmhEYXRhQnl0ZVNpemU7CisgICAgbWVtY3B5KCYobmgtPmRhdGFbMV0pLCBoYWxUb2tlbi5kYXRhKCksIG5oRGF0YUJ5dGVTaXplKTsKKyAgICByZXR1cm4gbmg7Cit9CisKIEVYUE9SVAogbWVkaWFfc3RhdHVzX3QgQUltYWdlUmVhZGVyX25ldygKICAgICAgICAgaW50MzJfdCB3aWR0aCwgaW50MzJfdCBoZWlnaHQsIGludDMyX3QgZm9ybWF0LCBpbnQzMl90IG1heEltYWdlcywKQEAgLTU5NCw2ICs2NTYsMTkgQEAKICAgICAgICAgICAgIHdpZHRoLCBoZWlnaHQsIGZvcm1hdCwgQUhBUkRXQVJFQlVGRkVSX1VTQUdFX0NQVV9SRUFEX09GVEVOLCBtYXhJbWFnZXMsIHJlYWRlcik7CiB9CiAKK2V4dGVybiAiQyIgeworCitFWFBPUlQKK21lZGlhX3N0YXR1c190IEFJbWFnZVJlYWRlcl9nZXRXaW5kb3dOYXRpdmVIYW5kbGUoCisgICAgICAgIEFJbWFnZVJlYWRlciAqcmVhZGVyLCAvKm91dCovbmF0aXZlX2hhbmRsZV90ICoqaGFuZGxlKSB7CisgICAgaWYgKHJlYWRlciA9PSBudWxscHRyIHx8IGhhbmRsZSA9PSBudWxscHRyKSB7CisgICAgICAgIHJldHVybiBBTUVESUFfRVJST1JfSU5WQUxJRF9QQVJBTUVURVI7CisgICAgfQorICAgIHJldHVybiByZWFkZXItPmdldFdpbmRvd05hdGl2ZUhhbmRsZShoYW5kbGUpOworfQorCit9IC8vZXh0ZXJuICJDIgorCiBFWFBPUlQKIG1lZGlhX3N0YXR1c190IEFJbWFnZVJlYWRlcl9uZXdXaXRoVXNhZ2UoCiAgICAgICAgIGludDMyX3Qgd2lkdGgsIGludDMyX3QgaGVpZ2h0LCBpbnQzMl90IGZvcm1hdCwgdWludDY0X3QgdXNhZ2UsCmRpZmYgLS1naXQgYS9tZWRpYS9uZGsvTmRrSW1hZ2VSZWFkZXJQcml2LmggYi9tZWRpYS9uZGsvTmRrSW1hZ2VSZWFkZXJQcml2LmgKaW5kZXggYmVkOGEyMS4uNzgxNTJkMiAxMDA2NDQKLS0tIGEvbWVkaWEvbmRrL05ka0ltYWdlUmVhZGVyUHJpdi5oCisrKyBiL21lZGlhL25kay9OZGtJbWFnZVJlYWRlclByaXYuaApAQCAtNjksNiArNjksOCBAQAogICAgIG1lZGlhX3N0YXR1c190IGFjcXVpcmVOZXh0SW1hZ2UoLypvdXQqL0FJbWFnZSoqIGltYWdlLCAvKm91dCovaW50KiBmZW5jZUZkKTsKICAgICBtZWRpYV9zdGF0dXNfdCBhY3F1aXJlTGF0ZXN0SW1hZ2UoLypvdXQqL0FJbWFnZSoqIGltYWdlLCAvKm91dCovaW50KiBmZW5jZUZkKTsKIAorICAgIG1lZGlhX3N0YXR1c190IGdldFdpbmRvd05hdGl2ZUhhbmRsZSgvKm91dCovbmF0aXZlX2hhbmRsZV90ICoqaGFuZGxlKTsKKwogICAgIEFOYXRpdmVXaW5kb3cqIGdldFdpbmRvdygpICAgIGNvbnN0IHsgcmV0dXJuIG1XaW5kb3cuZ2V0KCk7IH07CiAgICAgaW50MzJfdCAgICAgICAgZ2V0V2lkdGgoKSAgICAgY29uc3QgeyByZXR1cm4gbVdpZHRoOyB9OwogICAgIGludDMyX3QgICAgICAgIGdldEhlaWdodCgpICAgIGNvbnN0IHsgcmV0dXJuIG1IZWlnaHQ7IH07CkBAIC0xNjAsNiArMTYyLDcgQEAKICAgICBzcDxTdXJmYWNlPiAgICAgICAgICAgICAgICBtU3VyZmFjZTsKICAgICBzcDxCdWZmZXJJdGVtQ29uc3VtZXI+ICAgICBtQnVmZmVySXRlbUNvbnN1bWVyOwogICAgIHNwPEFOYXRpdmVXaW5kb3c+ICAgICAgICAgIG1XaW5kb3c7CisgICAgbmF0aXZlX2hhbmRsZV90KiAgICAgICAgICAgbVdpbmRvd0hhbmRsZSA9IG51bGxwdHI7CiAKICAgICBMaXN0PEFJbWFnZSo+ICAgICAgICAgICAgICBtQWNxdWlyZWRJbWFnZXM7CiAKZGlmZiAtLWdpdCBhL21lZGlhL25kay9OZGtNZWRpYUNvZGVjLmNwcCBiL21lZGlhL25kay9OZGtNZWRpYUNvZGVjLmNwcAppbmRleCA0MjI4NWY4Li5jMjNmMTliIDEwMDY0NAotLS0gYS9tZWRpYS9uZGsvTmRrTWVkaWFDb2RlYy5jcHAKKysrIGIvbWVkaWEvbmRrL05ka01lZGlhQ29kZWMuY3BwCkBAIC0yMSw4ICsyMSw4IEBACiAKICNpbmNsdWRlIDxtZWRpYS9OZGtNZWRpYUNvZGVjLmg+CiAjaW5jbHVkZSA8bWVkaWEvTmRrTWVkaWFFcnJvci5oPgorI2luY2x1ZGUgPG1lZGlhL05ka01lZGlhRm9ybWF0UHJpdi5oPgogI2luY2x1ZGUgIk5ka01lZGlhQ3J5cHRvUHJpdi5oIgotI2luY2x1ZGUgIk5ka01lZGlhRm9ybWF0UHJpdi5oIgogCiAjaW5jbHVkZSA8dXRpbHMvTG9nLmg+CiAjaW5jbHVkZSA8dXRpbHMvU3Ryb25nUG9pbnRlci5oPgpkaWZmIC0tZ2l0IGEvbWVkaWEvbmRrL05ka01lZGlhQ3J5cHRvLmNwcCBiL21lZGlhL25kay9OZGtNZWRpYUNyeXB0by5jcHAKaW5kZXggZDcxOTNjYS4uYjhhZjVmZiAxMDA2NDQKLS0tIGEvbWVkaWEvbmRrL05ka01lZGlhQ3J5cHRvLmNwcAorKysgYi9tZWRpYS9uZGsvTmRrTWVkaWFDcnlwdG8uY3BwCkBAIC0yMCw3ICsyMCw3IEBACiAKICNpbmNsdWRlIDxtZWRpYS9OZGtNZWRpYUNyeXB0by5oPgogI2luY2x1ZGUgPG1lZGlhL05ka01lZGlhQ29kZWMuaD4KLSNpbmNsdWRlICJOZGtNZWRpYUZvcm1hdFByaXYuaCIKKyNpbmNsdWRlIDxtZWRpYS9OZGtNZWRpYUZvcm1hdFByaXYuaD4KIAogCiAjaW5jbHVkZSA8Y3V0aWxzL3Byb3BlcnRpZXMuaD4KZGlmZiAtLWdpdCBhL21lZGlhL25kay9OZGtNZWRpYURhdGFTb3VyY2UuY3BwIGIvbWVkaWEvbmRrL05ka01lZGlhRGF0YVNvdXJjZS5jcHAKaW5kZXggOWQwMGU1ZS4uMWFiZWU5MyAxMDA2NDQKLS0tIGEvbWVkaWEvbmRrL05ka01lZGlhRGF0YVNvdXJjZS5jcHAKKysrIGIvbWVkaWEvbmRrL05ka01lZGlhRGF0YVNvdXJjZS5jcHAKQEAgLTIzLDE2ICsyMywyMyBAQAogI2luY2x1ZGUgPGpuaS5oPgogI2luY2x1ZGUgPHVuaXN0ZC5oPgogCisjaW5jbHVkZSA8YW5kcm9pZF9ydW50aW1lL0FuZHJvaWRSdW50aW1lLmg+CisjaW5jbHVkZSA8YW5kcm9pZF91dGlsX0JpbmRlci5oPgogI2luY2x1ZGUgPGJpbmRlci9JU2VydmljZU1hbmFnZXIuaD4KICNpbmNsdWRlIDxjdXRpbHMvcHJvcGVydGllcy5oPgogI2luY2x1ZGUgPHV0aWxzL0xvZy5oPgogI2luY2x1ZGUgPHV0aWxzL1N0cm9uZ1BvaW50ZXIuaD4KKyNpbmNsdWRlIDxtZWRpYS9JTWVkaWFIVFRQU2VydmljZS5oPgogI2luY2x1ZGUgPG1lZGlhL05ka01lZGlhRXJyb3IuaD4KICNpbmNsdWRlIDxtZWRpYS9OZGtNZWRpYURhdGFTb3VyY2UuaD4KKyNpbmNsdWRlIDxtZWRpYS9zdGFnZWZyaWdodC9EYXRhU291cmNlRmFjdG9yeS5oPgogI2luY2x1ZGUgPG1lZGlhL3N0YWdlZnJpZ2h0L0ludGVyZmFjZVV0aWxzLmg+CisjaW5jbHVkZSA8bWVkaWFwbGF5ZXIyL0phdmFWTUhlbHBlci5oPgorI2luY2x1ZGUgPG1lZGlhcGxheWVyMi9KTWVkaWEySFRUUFNlcnZpY2UuaD4KIAogI2luY2x1ZGUgIi4uLy4uL2xpYnN0YWdlZnJpZ2h0L2luY2x1ZGUvSFRUUEJhc2UuaCIKICNpbmNsdWRlICIuLi8uLi9saWJzdGFnZWZyaWdodC9pbmNsdWRlL051Q2FjaGVkU291cmNlMi5oIgorI2luY2x1ZGUgIk5ka01lZGlhRGF0YVNvdXJjZUNhbGxiYWNrc1ByaXYuaCIKIAogdXNpbmcgbmFtZXNwYWNlIGFuZHJvaWQ7CiAKQEAgLTQxLDE0ICs0OCwyMCBAQAogICAgIEFNZWRpYURhdGFTb3VyY2VSZWFkQXQgcmVhZEF0OwogICAgIEFNZWRpYURhdGFTb3VyY2VHZXRTaXplIGdldFNpemU7CiAgICAgQU1lZGlhRGF0YVNvdXJjZUNsb3NlIGNsb3NlOworICAgIEFNZWRpYURhdGFTb3VyY2VHZXRBdmFpbGFibGVTaXplIGdldEF2YWlsYWJsZVNpemU7CisgICAgc3A8RGF0YVNvdXJjZT4gbUltcGw7CisgICAgdWludDMyX3QgbUZsYWdzOwogfTsKIAogTmRrRGF0YVNvdXJjZTo6TmRrRGF0YVNvdXJjZShBTWVkaWFEYXRhU291cmNlICpkYXRhU291cmNlKQogICAgIDogbURhdGFTb3VyY2UoQU1lZGlhRGF0YVNvdXJjZV9uZXcoKSkgewotICAgICAgQU1lZGlhRGF0YVNvdXJjZV9zZXRSZWFkQXQobURhdGFTb3VyY2UsIGRhdGFTb3VyY2UtPnJlYWRBdCk7Ci0gICAgICBBTWVkaWFEYXRhU291cmNlX3NldEdldFNpemUobURhdGFTb3VyY2UsIGRhdGFTb3VyY2UtPmdldFNpemUpOwotICAgICAgQU1lZGlhRGF0YVNvdXJjZV9zZXRDbG9zZShtRGF0YVNvdXJjZSwgZGF0YVNvdXJjZS0+Y2xvc2UpOwotICAgICAgQU1lZGlhRGF0YVNvdXJjZV9zZXRVc2VyZGF0YShtRGF0YVNvdXJjZSwgZGF0YVNvdXJjZS0+dXNlcmRhdGEpOworICAgIEFNZWRpYURhdGFTb3VyY2Vfc2V0UmVhZEF0KG1EYXRhU291cmNlLCBkYXRhU291cmNlLT5yZWFkQXQpOworICAgIEFNZWRpYURhdGFTb3VyY2Vfc2V0R2V0U2l6ZShtRGF0YVNvdXJjZSwgZGF0YVNvdXJjZS0+Z2V0U2l6ZSk7CisgICAgQU1lZGlhRGF0YVNvdXJjZV9zZXRDbG9zZShtRGF0YVNvdXJjZSwgZGF0YVNvdXJjZS0+Y2xvc2UpOworICAgIEFNZWRpYURhdGFTb3VyY2Vfc2V0VXNlcmRhdGEobURhdGFTb3VyY2UsIGRhdGFTb3VyY2UtPnVzZXJkYXRhKTsKKyAgICBBTWVkaWFEYXRhU291cmNlX3NldEdldEF2YWlsYWJsZVNpemUobURhdGFTb3VyY2UsIGRhdGFTb3VyY2UtPmdldEF2YWlsYWJsZVNpemUpOworICAgIG1EYXRhU291cmNlLT5tSW1wbCA9IGRhdGFTb3VyY2UtPm1JbXBsOworICAgIG1EYXRhU291cmNlLT5tRmxhZ3MgPSBkYXRhU291cmNlLT5tRmxhZ3M7CiB9CiAKIE5ka0RhdGFTb3VyY2U6On5OZGtEYXRhU291cmNlKCkgewpAQCAtNTksOSArNzIsMTMgQEAKICAgICByZXR1cm4gT0s7CiB9CiAKK3VpbnQzMl90IE5ka0RhdGFTb3VyY2U6OmZsYWdzKCkgeworICAgIHJldHVybiBtRGF0YVNvdXJjZS0+bUZsYWdzOworfQorCiBzc2l6ZV90IE5ka0RhdGFTb3VyY2U6OnJlYWRBdChvZmY2NF90IG9mZnNldCwgdm9pZCAqZGF0YSwgc2l6ZV90IHNpemUpIHsKICAgICBNdXRleDo6QXV0b2xvY2sgbChtTG9jayk7Ci0gICAgaWYgKG1EYXRhU291cmNlLT5nZXRTaXplID09IE5VTEwgfHwgbURhdGFTb3VyY2UtPnVzZXJkYXRhID09IE5VTEwpIHsKKyAgICBpZiAobURhdGFTb3VyY2UtPnJlYWRBdCA9PSBOVUxMIHx8IG1EYXRhU291cmNlLT51c2VyZGF0YSA9PSBOVUxMKSB7CiAgICAgICAgIHJldHVybiAtMTsKICAgICB9CiAgICAgcmV0dXJuIG1EYXRhU291cmNlLT5yZWFkQXQobURhdGFTb3VyY2UtPnVzZXJkYXRhLCBvZmZzZXQsIGRhdGEsIHNpemUpOwpAQCAtOTIsNiArMTA5LDk1IEBACiAgICAgfQogfQogCitzdGF0dXNfdCBOZGtEYXRhU291cmNlOjpnZXRBdmFpbGFibGVTaXplKG9mZjY0X3Qgb2Zmc2V0LCBvZmY2NF90ICpzaXplcHRyKSB7CisgICAgb2ZmNjRfdCBzaXplID0gLTE7CisgICAgaWYgKG1EYXRhU291cmNlLT5nZXRBdmFpbGFibGVTaXplICE9IE5VTEwKKyAgICAgICAgICAgICYmIG1EYXRhU291cmNlLT51c2VyZGF0YSAhPSBOVUxMCisgICAgICAgICAgICAmJiBzaXplcHRyICE9IE5VTEwpIHsKKyAgICAgICAgc2l6ZSA9IG1EYXRhU291cmNlLT5nZXRBdmFpbGFibGVTaXplKG1EYXRhU291cmNlLT51c2VyZGF0YSwgb2Zmc2V0KTsKKyAgICAgICAgKnNpemVwdHIgPSBzaXplOworICAgIH0KKyAgICByZXR1cm4gc2l6ZSA+PSAwID8gT0sgOiBVTktOT1dOX0VSUk9SOworfQorCitzdGF0aWMgc3A8TWVkaWFIVFRQU2VydmljZT4gY3JlYXRlTWVkaWFIdHRwU2VydmljZUZyb21KYXZhT2JqKEpOSUVudiAqZW52LCBqb2JqZWN0IG9iaiwgaW50IHZlcnNpb24pIHsKKyAgICBpZiAob2JqID09IE5VTEwpIHsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorICAgIHN3aXRjaCAodmVyc2lvbikgeworICAgICAgICBjYXNlIDE6CisgICAgICAgICAgICByZXR1cm4gaW50ZXJmYWNlX2Nhc3Q8SU1lZGlhSFRUUFNlcnZpY2U+KGliaW5kZXJGb3JKYXZhT2JqZWN0KGVudiwgb2JqKSk7CisgICAgICAgIGNhc2UgMjoKKyAgICAgICAgICAgIHJldHVybiBuZXcgSk1lZGlhMkhUVFBTZXJ2aWNlKGVudiwgb2JqKTsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KK30KKworc3RhdGljIHNwPE1lZGlhSFRUUFNlcnZpY2U+IGNyZWF0ZU1lZGlhSHR0cFNlcnZpY2VUZW1wbGF0ZSgKKyAgICAgICAgSk5JRW52ICplbnYsCisgICAgICAgIGNvbnN0IGNoYXIgKnVyaSwKKyAgICAgICAgY29uc3QgY2hhciAqY2xhenosCisgICAgICAgIGNvbnN0IGNoYXIgKm1ldGhvZCwKKyAgICAgICAgY29uc3QgY2hhciAqc2lnbmF0dXJlLAorICAgICAgICBpbnQgdmVyc2lvbikgeworICAgIGpvYmplY3Qgc2VydmljZSA9IE5VTEw7CisgICAgaWYgKGVudiA9PSBOVUxMKSB7CisgICAgICAgIEFMT0dFKCJodHRwIHNlcnZpY2UgbXVzdCBiZSBjcmVhdGVkIGZyb20gSmF2YSB0aHJlYWQiKTsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorCisgICAgamNsYXNzIG1lZGlhaHR0cGNsYXNzID0gZW52LT5GaW5kQ2xhc3MoY2xhenopOworICAgIGlmIChtZWRpYWh0dHBjbGFzcyA9PSBOVUxMKSB7CisgICAgICAgIEFMT0dFKCJjYW4ndCBmaW5kIE1lZGlhKDIpSHR0cFNlcnZpY2UiKTsKKyAgICAgICAgZW52LT5FeGNlcHRpb25DbGVhcigpOworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisKKyAgICBqbWV0aG9kSUQgbWVkaWFIdHRwQ3JlYXRlTWV0aG9kID0gZW52LT5HZXRTdGF0aWNNZXRob2RJRChtZWRpYWh0dHBjbGFzcywgbWV0aG9kLCBzaWduYXR1cmUpOworICAgIGlmIChtZWRpYUh0dHBDcmVhdGVNZXRob2QgPT0gTlVMTCkgeworICAgICAgICBBTE9HRSgiY2FuJ3QgZmluZCBtZXRob2QiKTsKKyAgICAgICAgZW52LT5FeGNlcHRpb25DbGVhcigpOworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisKKyAgICBqc3RyaW5nIGp1cmkgPSBlbnYtPk5ld1N0cmluZ1VURih1cmkpOworCisgICAgc2VydmljZSA9IGVudi0+Q2FsbFN0YXRpY09iamVjdE1ldGhvZChtZWRpYWh0dHBjbGFzcywgbWVkaWFIdHRwQ3JlYXRlTWV0aG9kLCBqdXJpKTsKKyAgICBlbnYtPkRlbGV0ZUxvY2FsUmVmKGp1cmkpOworCisgICAgZW52LT5FeGNlcHRpb25DbGVhcigpOworICAgIHNwPE1lZGlhSFRUUFNlcnZpY2U+IGh0dHBTZXJ2aWNlID0gY3JlYXRlTWVkaWFIdHRwU2VydmljZUZyb21KYXZhT2JqKGVudiwgc2VydmljZSwgdmVyc2lvbik7CisgICAgcmV0dXJuIGh0dHBTZXJ2aWNlOworCit9CisKK3NwPE1lZGlhSFRUUFNlcnZpY2U+IGNyZWF0ZU1lZGlhSHR0cFNlcnZpY2UoY29uc3QgY2hhciAqdXJpLCBpbnQgdmVyc2lvbikgeworCisgICAgSk5JRW52ICplbnY7CisgICAgY29uc3QgY2hhciAqY2xhenosICptZXRob2QsICpzaWduYXR1cmU7CisKKyAgICBzd2l0Y2ggKHZlcnNpb24pIHsKKyAgICAgICAgY2FzZSAxOgorICAgICAgICAgICAgZW52ID0gQW5kcm9pZFJ1bnRpbWU6OmdldEpOSUVudigpOworICAgICAgICAgICAgY2xhenogPSAiYW5kcm9pZC9tZWRpYS9NZWRpYUhUVFBTZXJ2aWNlIjsKKyAgICAgICAgICAgIG1ldGhvZCA9ICJjcmVhdGVIdHRwU2VydmljZUJpbmRlcklmTmVjZXNzYXJ5IjsKKyAgICAgICAgICAgIHNpZ25hdHVyZSA9ICIoTGphdmEvbGFuZy9TdHJpbmc7KUxhbmRyb2lkL29zL0lCaW5kZXI7IjsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIDI6CisgICAgICAgICAgICBlbnYgPSBKYXZhVk1IZWxwZXI6OmdldEpOSUVudigpOworICAgICAgICAgICAgY2xhenogPSAiYW5kcm9pZC9tZWRpYS9NZWRpYTJIVFRQU2VydmljZSI7CisgICAgICAgICAgICBtZXRob2QgPSAiY3JlYXRlSFRUUFNlcnZpY2UiOworICAgICAgICAgICAgc2lnbmF0dXJlID0gIihMamF2YS9sYW5nL1N0cmluZzspTGFuZHJvaWQvbWVkaWEvTWVkaWEySFRUUFNlcnZpY2U7IjsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorCisgICAgcmV0dXJuIGNyZWF0ZU1lZGlhSHR0cFNlcnZpY2VUZW1wbGF0ZShlbnYsIHVyaSwgY2xhenosIG1ldGhvZCwgc2lnbmF0dXJlLCB2ZXJzaW9uKTsKKworfQorCiBleHRlcm4gIkMiIHsKIAogRVhQT1JUCkBAIC0xMDUsNiArMjExLDMyIEBACiB9CiAKIEVYUE9SVAorQU1lZGlhRGF0YVNvdXJjZSogQU1lZGlhRGF0YVNvdXJjZV9uZXdVcmkoCisgICAgICAgIGNvbnN0IGNoYXIgKnVyaSwKKyAgICAgICAgaW50IG51bWhlYWRlcnMsCisgICAgICAgIGNvbnN0IGNoYXIgKiBjb25zdCAqa2V5X3ZhbHVlcykgeworCisgICAgc3A8TWVkaWFIVFRQU2VydmljZT4gc2VydmljZSA9IGNyZWF0ZU1lZGlhSHR0cFNlcnZpY2UodXJpLCAvKiB2ZXJzaW9uID0gKi8gMSk7CisgICAgS2V5ZWRWZWN0b3I8U3RyaW5nOCwgU3RyaW5nOD4gaGVhZGVyczsKKyAgICBmb3IgKGludCBpID0gMDsgaSA8IG51bWhlYWRlcnM7ICsraSkgeworICAgICAgICBTdHJpbmc4IGtleTgoa2V5X3ZhbHVlc1tpICogMl0pOworICAgICAgICBTdHJpbmc4IHZhbHVlOChrZXlfdmFsdWVzW2kgKiAyICsgMV0pOworICAgICAgICBoZWFkZXJzLmFkZChrZXk4LCB2YWx1ZTgpOworICAgIH0KKworICAgIHNwPERhdGFTb3VyY2U+IHNvdXJjZSA9IERhdGFTb3VyY2VGYWN0b3J5OjpDcmVhdGVGcm9tVVJJKHNlcnZpY2UsIHVyaSwgJmhlYWRlcnMpOworICAgIGlmIChzb3VyY2UgPT0gTlVMTCkgeworICAgICAgICBBTE9HRSgiQU1lZGlhRGF0YVNvdXJjZV9uZXdVcmkgc291cmNlIGlzIG51bGwiKTsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorICAgIEFMT0dJKCJBTWVkaWFEYXRhU291cmNlX25ld1VyaSBzb3VyY2UgJXMgZmxhZ3MgJXUiLCBzb3VyY2UtPnRvU3RyaW5nKCkuY19zdHIoKSwgc291cmNlLT5mbGFncygpKTsKKyAgICBBTWVkaWFEYXRhU291cmNlKiBhU291cmNlID0gY29udmVydERhdGFTb3VyY2VUb0FNZWRpYURhdGFTb3VyY2Uoc291cmNlKTsKKyAgICBhU291cmNlLT5tSW1wbCA9IHNvdXJjZTsKKyAgICBhU291cmNlLT5tRmxhZ3MgPSBzb3VyY2UtPmZsYWdzKCk7CisgICAgcmV0dXJuIGFTb3VyY2U7Cit9CisKK0VYUE9SVAogdm9pZCBBTWVkaWFEYXRhU291cmNlX2RlbGV0ZShBTWVkaWFEYXRhU291cmNlICptU291cmNlKSB7CiAgICAgQUxPR1YoImR0b3IiKTsKICAgICBpZiAobVNvdXJjZSAhPSBOVUxMKSB7CkBAIC0xMzIsNSArMjY0LDE2IEBACiAgICAgbVNvdXJjZS0+Y2xvc2UgPSBjbG9zZTsKIH0KIAorRVhQT1JUCit2b2lkIEFNZWRpYURhdGFTb3VyY2VfY2xvc2UoQU1lZGlhRGF0YVNvdXJjZSAqbVNvdXJjZSkgeworICAgIHJldHVybiBtU291cmNlLT5jbG9zZShtU291cmNlLT51c2VyZGF0YSk7Cit9CisKK0VYUE9SVAordm9pZCBBTWVkaWFEYXRhU291cmNlX3NldEdldEF2YWlsYWJsZVNpemUoQU1lZGlhRGF0YVNvdXJjZSAqbVNvdXJjZSwKKyAgICAgICAgQU1lZGlhRGF0YVNvdXJjZUdldEF2YWlsYWJsZVNpemUgZ2V0QXZhaWxhYmxlU2l6ZSkgeworICAgIG1Tb3VyY2UtPmdldEF2YWlsYWJsZVNpemUgPSBnZXRBdmFpbGFibGVTaXplOworfQorCiB9IC8vIGV4dGVybiAiQyIKIApkaWZmIC0tZ2l0IGEvbWVkaWEvbmRrL05ka01lZGlhRGF0YVNvdXJjZUNhbGxiYWNrcy5jcHAgYi9tZWRpYS9uZGsvTmRrTWVkaWFEYXRhU291cmNlQ2FsbGJhY2tzLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44NmE1N2RhCi0tLSAvZGV2L251bGwKKysrIGIvbWVkaWEvbmRrL05ka01lZGlhRGF0YVNvdXJjZUNhbGxiYWNrcy5jcHAKQEAgLTAsMCArMSw1MCBAQAorLyoKKyAqIENvcHlyaWdodCAyMDE4LCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KKworLy8jZGVmaW5lIExPR19OREVCVUcgMAorI2RlZmluZSBMT0dfVEFHICJOZGtNZWRpYURhdGFTb3VyY2VDYWxsYmFja3MiCisKKyNpbmNsdWRlICJOZGtNZWRpYURhdGFTb3VyY2VDYWxsYmFja3NQcml2LmgiCisjaW5jbHVkZSA8bWVkaWEvRGF0YVNvdXJjZS5oPgorI2luY2x1ZGUgPG1lZGlhL05ka01lZGlhRXJyb3JQcml2Lmg+CisKK25hbWVzcGFjZSBhbmRyb2lkIHsKKworc3NpemVfdCBEYXRhU291cmNlX2dldFNpemUodm9pZCAqdXNlcmRhdGEpIHsKKyAgICBEYXRhU291cmNlICpzb3VyY2UgPSBzdGF0aWNfY2FzdDxEYXRhU291cmNlICo+KHVzZXJkYXRhKTsKKyAgICBvZmY2NF90IHNpemUgPSAtMTsKKyAgICBzb3VyY2UtPmdldFNpemUoJnNpemUpOworICAgIHJldHVybiBzaXplOworfQorCitzc2l6ZV90IERhdGFTb3VyY2VfcmVhZEF0KHZvaWQgKnVzZXJkYXRhLCBvZmY2NF90IG9mZnNldCwgdm9pZCAqIGJ1Ziwgc2l6ZV90IHNpemUpIHsKKyAgICBEYXRhU291cmNlICpzb3VyY2UgPSBzdGF0aWNfY2FzdDxEYXRhU291cmNlICo+KHVzZXJkYXRhKTsKKyAgICByZXR1cm4gc291cmNlLT5yZWFkQXQob2Zmc2V0LCBidWYsIHNpemUpOworfQorCit2b2lkIERhdGFTb3VyY2VfY2xvc2Uodm9pZCAqdXNlcmRhdGEpIHsKKyAgICBEYXRhU291cmNlICpzb3VyY2UgPSBzdGF0aWNfY2FzdDxEYXRhU291cmNlICo+KHVzZXJkYXRhKTsKKyAgICBzb3VyY2UtPmNsb3NlKCk7Cit9CisKK3NzaXplX3QgRGF0YVNvdXJjZV9nZXRBdmFpbGFibGVTaXplKHZvaWQgKnVzZXJkYXRhLCBvZmY2NF90IG9mZnNldCkgeworICAgIG9mZjY0X3Qgc2l6ZSA9IC0xOworICAgIERhdGFTb3VyY2UgKnNvdXJjZSA9IHN0YXRpY19jYXN0PERhdGFTb3VyY2UgKj4odXNlcmRhdGEpOworICAgIHNvdXJjZS0+Z2V0QXZhaWxhYmxlU2l6ZShvZmZzZXQsICZzaXplKTsKKyAgICByZXR1cm4gIHNpemU7Cit9CisKK30gIC8vIG5hbWVzcGFjZSBhbmRyb2lkCmRpZmYgLS1naXQgYS9tZWRpYS9uZGsvTmRrTWVkaWFEYXRhU291cmNlQ2FsbGJhY2tzUHJpdi5oIGIvbWVkaWEvbmRrL05ka01lZGlhRGF0YVNvdXJjZUNhbGxiYWNrc1ByaXYuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42NTAzMzA1Ci0tLSAvZGV2L251bGwKKysrIGIvbWVkaWEvbmRrL05ka01lZGlhRGF0YVNvdXJjZUNhbGxiYWNrc1ByaXYuaApAQCAtMCwwICsxLDUxIEBACisvKgorICogQ29weXJpZ2h0IDIwMTgsIFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworCisjaWZuZGVmIEFfTUVESUFfREFUQV9TT1VSQ0VfQ0FMTEJBQ0tTX0gKKworI2RlZmluZSBBX01FRElBX0RBVEFfU09VUkNFX0NBTExCQUNLU19ICisKKyNpbmNsdWRlIDxtZWRpYS9EYXRhU291cmNlLmg+CisjaW5jbHVkZSA8bWVkaWEvTmRrTWVkaWFEYXRhU291cmNlLmg+CisjaW5jbHVkZSA8bWVkaWEvTmRrTWVkaWFFcnJvci5oPgorI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorCituYW1lc3BhY2UgYW5kcm9pZCB7CisKK3NzaXplX3QgRGF0YVNvdXJjZV9nZXRTaXplKHZvaWQgKnVzZXJkYXRhKTsKKworc3NpemVfdCBEYXRhU291cmNlX3JlYWRBdCh2b2lkICp1c2VyZGF0YSwgb2ZmNjRfdCBvZmZzZXQsIHZvaWQgKiBidWYsIHNpemVfdCBzaXplKTsKKwordm9pZCBEYXRhU291cmNlX2Nsb3NlKHZvaWQgKnVzZXJkYXRhKTsKKworc3NpemVfdCBEYXRhU291cmNlX2dldEF2YWlsYWJsZVNpemUodm9pZCAqdXNlcmRhdGEsIG9mZjY0X3Qgb2Zmc2V0KTsKKworc3RhdGljIGlubGluZSBBTWVkaWFEYXRhU291cmNlKiBjb252ZXJ0RGF0YVNvdXJjZVRvQU1lZGlhRGF0YVNvdXJjZShjb25zdCBzcDxEYXRhU291cmNlPiAmc291cmNlKSB7CisgICAgaWYgKHNvdXJjZSA9PSBOVUxMKSB7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKyAgICBBTWVkaWFEYXRhU291cmNlICptU291cmNlID0gQU1lZGlhRGF0YVNvdXJjZV9uZXcoKTsKKyAgICBBTWVkaWFEYXRhU291cmNlX3NldFVzZXJkYXRhKG1Tb3VyY2UsIHNvdXJjZS5nZXQoKSk7CisgICAgQU1lZGlhRGF0YVNvdXJjZV9zZXRSZWFkQXQobVNvdXJjZSwgRGF0YVNvdXJjZV9yZWFkQXQpOworICAgIEFNZWRpYURhdGFTb3VyY2Vfc2V0R2V0U2l6ZShtU291cmNlLCBEYXRhU291cmNlX2dldFNpemUpOworICAgIEFNZWRpYURhdGFTb3VyY2Vfc2V0Q2xvc2UobVNvdXJjZSwgRGF0YVNvdXJjZV9jbG9zZSk7CisgICAgQU1lZGlhRGF0YVNvdXJjZV9zZXRHZXRBdmFpbGFibGVTaXplKG1Tb3VyY2UsIERhdGFTb3VyY2VfZ2V0QXZhaWxhYmxlU2l6ZSk7CisgICAgcmV0dXJuIG1Tb3VyY2U7Cit9CisKK30gIC8vIG5hbWVzcGFjZSBhbmRyb2lkCisKKyNlbmRpZiAgLy8gQV9NRURJQV9EQVRBX1NPVVJDRV9DQUxMQkFDS1NfSApkaWZmIC0tZ2l0IGEvbWVkaWEvbmRrL05ka01lZGlhRGF0YVNvdXJjZVByaXYuaCBiL21lZGlhL25kay9OZGtNZWRpYURhdGFTb3VyY2VQcml2LmgKaW5kZXggZWE5Yzg2NS4uMTZmZjk3NCAxMDA2NDQKLS0tIGEvbWVkaWEvbmRrL05ka01lZGlhRGF0YVNvdXJjZVByaXYuaAorKysgYi9tZWRpYS9uZGsvTmRrTWVkaWFEYXRhU291cmNlUHJpdi5oCkBAIC0zMiw2ICszMiw3IEBACiAjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CiAKICNpbmNsdWRlIDxtZWRpYS9EYXRhU291cmNlLmg+CisjaW5jbHVkZSA8bWVkaWEvTWVkaWFIVFRQU2VydmljZS5oPgogI2luY2x1ZGUgPG1lZGlhL05ka01lZGlhRGF0YVNvdXJjZS5oPgogI2luY2x1ZGUgPHV0aWxzL011dGV4Lmg+CiAjaW5jbHVkZSA8dXRpbHMvU3RyaW5nOC5oPgpAQCAtNDMsMTEgKzQ0LDEzIEBACiAgICAgTmRrRGF0YVNvdXJjZShBTWVkaWFEYXRhU291cmNlICopOwogCiAgICAgdmlydHVhbCBzdGF0dXNfdCBpbml0Q2hlY2soKSBjb25zdDsKKyAgICB2aXJ0dWFsIHVpbnQzMl90IGZsYWdzKCk7CiAgICAgdmlydHVhbCBzc2l6ZV90IHJlYWRBdChvZmY2NF90IG9mZnNldCwgdm9pZCAqZGF0YSwgc2l6ZV90IHNpemUpOwogICAgIHZpcnR1YWwgc3RhdHVzX3QgZ2V0U2l6ZShvZmY2NF90ICopOwogICAgIHZpcnR1YWwgU3RyaW5nOCB0b1N0cmluZygpOwogICAgIHZpcnR1YWwgU3RyaW5nOCBnZXRNSU1FVHlwZSgpIGNvbnN0OwogICAgIHZpcnR1YWwgdm9pZCBjbG9zZSgpOworICAgIHZpcnR1YWwgc3RhdHVzX3QgZ2V0QXZhaWxhYmxlU2l6ZShvZmY2NF90IG9mZnNldCwgb2ZmNjRfdCAqc2l6ZSk7CiAKIHByb3RlY3RlZDoKICAgICB2aXJ0dWFsIH5OZGtEYXRhU291cmNlKCk7CkBAIC01OSw1ICs2Miw3IEBACiAKIH07CiAKK3NwPE1lZGlhSFRUUFNlcnZpY2U+IGNyZWF0ZU1lZGlhSHR0cFNlcnZpY2UoY29uc3QgY2hhciAqdXJpLCBpbnQgdmVyc2lvbik7CisKICNlbmRpZiAvLyBfTkRLX01FRElBX0RBVEFTT1VSQ0VfUFJJVl9ICiAKZGlmZiAtLWdpdCBhL21lZGlhL25kay9OZGtNZWRpYURybS5jcHAgYi9tZWRpYS9uZGsvTmRrTWVkaWFEcm0uY3BwCmluZGV4IDZkMTBmMWMuLjU1YWZiMzMgMTAwNjQ0Ci0tLSBhL21lZGlhL25kay9OZGtNZWRpYURybS5jcHAKKysrIGIvbWVkaWEvbmRrL05ka01lZGlhRHJtLmNwcApAQCAtMTcsNiArMTcsOCBAQAogLy8jZGVmaW5lIExPR19OREVCVUcgMAogI2RlZmluZSBMT0dfVEFHICJOZGtNZWRpYURybSIKIAorI2luY2x1ZGUgPGludHR5cGVzLmg+CisKICNpbmNsdWRlIDxtZWRpYS9OZGtNZWRpYURybS5oPgogCiAjaW5jbHVkZSA8Y3V0aWxzL3Byb3BlcnRpZXMuaD4KQEAgLTQwLDEwICs0MiwzMiBAQAogewogcHJpdmF0ZToKICAgICBBTWVkaWFEcm0gKm1PYmo7Ci0gICAgQU1lZGlhRHJtRXZlbnRMaXN0ZW5lciBtTGlzdGVuZXI7CisgICAgQU1lZGlhRHJtRXZlbnRMaXN0ZW5lciBtRXZlbnRMaXN0ZW5lcjsKKyAgICBBTWVkaWFEcm1FeHBpcmF0aW9uVXBkYXRlTGlzdGVuZXIgbUV4cGlyYXRpb25VcGRhdGVMaXN0ZW5lcjsKKyAgICBBTWVkaWFEcm1LZXlzQ2hhbmdlTGlzdGVuZXIgbUtleXNDaGFuZ2VMaXN0ZW5lcjsKIAogcHVibGljOgotICAgIERybUxpc3RlbmVyKEFNZWRpYURybSAqb2JqLCBBTWVkaWFEcm1FdmVudExpc3RlbmVyIGxpc3RlbmVyKSA6IG1PYmoob2JqKSwgbUxpc3RlbmVyKGxpc3RlbmVyKSB7fQorICAgIERybUxpc3RlbmVyKEFNZWRpYURybSAqb2JqLCBBTWVkaWFEcm1FdmVudExpc3RlbmVyIGxpc3RlbmVyKSA6IG1PYmoob2JqKSwKKyAgICAgICAgICAgIG1FdmVudExpc3RlbmVyKGxpc3RlbmVyKSwgbUV4cGlyYXRpb25VcGRhdGVMaXN0ZW5lcihOVUxMKSwgbUtleXNDaGFuZ2VMaXN0ZW5lcihOVUxMKSB7fQorCisgICAgRHJtTGlzdGVuZXIoQU1lZGlhRHJtICpvYmosIEFNZWRpYURybUV4cGlyYXRpb25VcGRhdGVMaXN0ZW5lciBsaXN0ZW5lcikgOiBtT2JqKG9iaiksCisgICAgICAgICAgICBtRXZlbnRMaXN0ZW5lcihOVUxMKSwgbUV4cGlyYXRpb25VcGRhdGVMaXN0ZW5lcihsaXN0ZW5lciksIG1LZXlzQ2hhbmdlTGlzdGVuZXIoTlVMTCkge30KKworICAgIERybUxpc3RlbmVyKEFNZWRpYURybSAqb2JqLCBBTWVkaWFEcm1LZXlzQ2hhbmdlTGlzdGVuZXIgbGlzdGVuZXIpIDogbU9iaihvYmopLAorICAgICAgICAgICAgbUV2ZW50TGlzdGVuZXIoTlVMTCksIG1FeHBpcmF0aW9uVXBkYXRlTGlzdGVuZXIoTlVMTCksIG1LZXlzQ2hhbmdlTGlzdGVuZXIobGlzdGVuZXIpIHt9CisKKyAgICB2b2lkIHNldEV2ZW50TGlzdGVuZXIoQU1lZGlhRHJtRXZlbnRMaXN0ZW5lciBsaXN0ZW5lcikgeworICAgICAgICBtRXZlbnRMaXN0ZW5lciA9IGxpc3RlbmVyOworICAgIH0KKworICAgIHZvaWQgc2V0RXhwaXJhdGlvblVwZGF0ZUxpc3RlbmVyKEFNZWRpYURybUV4cGlyYXRpb25VcGRhdGVMaXN0ZW5lciBsaXN0ZW5lcikgeworICAgICAgICBtRXhwaXJhdGlvblVwZGF0ZUxpc3RlbmVyID0gbGlzdGVuZXI7CisgICAgfQorCisgICAgdm9pZCBzZXRLZXlzQ2hhbmdlTGlzdGVuZXIoQU1lZGlhRHJtS2V5c0NoYW5nZUxpc3RlbmVyIGxpc3RlbmVyKSB7CisgICAgICAgIG1LZXlzQ2hhbmdlTGlzdGVuZXIgPSBsaXN0ZW5lcjsKKyAgICB9CisKICAgICB2b2lkIG5vdGlmeShEcm1QbHVnaW46OkV2ZW50VHlwZSBldmVudFR5cGUsIGludCBleHRyYSwgY29uc3QgUGFyY2VsICpvYmopOwogfTsKIApAQCAtNjIsMjcgKzg2LDc1IEBACiB9OwogCiB2b2lkIERybUxpc3RlbmVyOjpub3RpZnkoRHJtUGx1Z2luOjpFdmVudFR5cGUgZXZlbnRUeXBlLCBpbnQgZXh0cmEsIGNvbnN0IFBhcmNlbCAqb2JqKSB7Ci0gICAgaWYgKCFtTGlzdGVuZXIpIHsKKyAgICBpZiAoIW1FdmVudExpc3RlbmVyICYmICFtRXhwaXJhdGlvblVwZGF0ZUxpc3RlbmVyICYmICFtS2V5c0NoYW5nZUxpc3RlbmVyKSB7CisgICAgICAgIEFMT0dFKCJObyBsaXN0ZW5lcnMgYXJlIHNwZWNpZmllZCIpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCisgICAgb2JqLT5zZXREYXRhUG9zaXRpb24oMCk7CisKICAgICBBTWVkaWFEcm1TZXNzaW9uSWQgc2Vzc2lvbklkID0ge05VTEwsIDB9OwogICAgIGludDMyX3Qgc2Vzc2lvbklkU2l6ZSA9IG9iai0+cmVhZEludDMyKCk7Ci0gICAgaWYgKHNlc3Npb25JZFNpemUpIHsKLSAgICAgICAgdWludDhfdCAqc2Vzc2lvbklkRGF0YSA9IG5ldyB1aW50OF90W3Nlc3Npb25JZFNpemVdOwotICAgICAgICBzZXNzaW9uSWQucHRyID0gc2Vzc2lvbklkRGF0YTsKLSAgICAgICAgc2Vzc2lvbklkLmxlbmd0aCA9IHNlc3Npb25JZFNpemU7Ci0gICAgICAgIG9iai0+cmVhZChzZXNzaW9uSWREYXRhLCBzZXNzaW9uSWQubGVuZ3RoKTsKKyAgICBpZiAoc2Vzc2lvbklkU2l6ZSA8PSAwKSB7CisgICAgICAgIEFMT0dFKCJJbnZhbGlkIHNlc3Npb24gaWQgc2l6ZSIpOworICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgaW50MzJfdCBkYXRhU2l6ZSA9IG9iai0+cmVhZEludDMyKCk7Ci0gICAgdWludDhfdCAqZGF0YSA9IE5VTEw7Ci0gICAgaWYgKGRhdGFTaXplKSB7Ci0gICAgICAgIGRhdGEgPSBuZXcgdWludDhfdFtkYXRhU2l6ZV07Ci0gICAgICAgIG9iai0+cmVhZChkYXRhLCBkYXRhU2l6ZSk7CisgICAgc3RkOjp1bmlxdWVfcHRyPHVpbnQ4X3RbXT4gc2Vzc2lvbklkRGF0YShuZXcgdWludDhfdFtzZXNzaW9uSWRTaXplXSk7CisgICAgc2Vzc2lvbklkLnB0ciA9IHNlc3Npb25JZERhdGEuZ2V0KCk7CisgICAgc2Vzc2lvbklkLmxlbmd0aCA9IHNlc3Npb25JZFNpemU7CisgICAgc3RhdHVzX3QgZXJyID0gb2JqLT5yZWFkKHNlc3Npb25JZERhdGEuZ2V0KCksIHNlc3Npb25JZC5sZW5ndGgpOworICAgIGlmIChlcnIgIT0gT0spIHsKKyAgICAgICAgQUxPR0UoIkZhaWxlZCB0byByZWFkIHNlc3Npb24gaWQsIGVycm9yPSVkIiwgZXJyKTsKKyAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIC8vIHRyYW5zbGF0ZSBEcm1QbHVnaW4gZXZlbnQgdHlwZXMgaW50byB0aGVpciBOREsgZXF1aXZhbGVudHMKKyAgICBpZiAoRHJtUGx1Z2luOjprRHJtUGx1Z2luRXZlbnRFeHBpcmF0aW9uVXBkYXRlID09IGV2ZW50VHlwZSkgeworICAgICAgICBpbnQ2NF90IGV4cGlyeVRpbWVJbk1TID0gb2JqLT5yZWFkSW50NjQoKTsKKyAgICAgICAgaWYgKGV4cGlyeVRpbWVJbk1TID49IDApIHsKKyAgICAgICAgICAgICgqbUV4cGlyYXRpb25VcGRhdGVMaXN0ZW5lcikobU9iaiwgJnNlc3Npb25JZCwgZXhwaXJ5VGltZUluTVMpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgQUxPR0UoIkZhaWxlZCB0byByZWFkIGV4cGlyeSB0aW1lLCBzdGF0dXM9JSIgUFJJZDY0ICIiLCBleHBpcnlUaW1lSW5NUyk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuOworICAgIH0gZWxzZSBpZiAoRHJtUGx1Z2luOjprRHJtUGx1Z2luRXZlbnRLZXlzQ2hhbmdlID09IGV2ZW50VHlwZSkgeworICAgICAgICBpbnQzMl90IG51bUtleXMgPSAwOworICAgICAgICBlcnIgPSBvYmotPnJlYWRJbnQzMigmbnVtS2V5cyk7CisgICAgICAgIGlmIChlcnIgIT0gT0spIHsKKyAgICAgICAgICAgIEFMT0dFKCJGYWlsZWQgdG8gcmVhZCBudW1iZXIgb2Yga2V5cyBzdGF0dXMsIGVycm9yPSVkIiwgZXJyKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIFZlY3RvcjxBTWVkaWFEcm1LZXlTdGF0dXM+IGtleXNTdGF0dXM7CisgICAgICAgIHN0ZDo6dmVjdG9yPHN0ZDo6dW5pcXVlX3B0cjx1aW50OF90W10+ID4gZGF0YVBvaW50ZXJzOworICAgICAgICBBTWVkaWFEcm1LZXlTdGF0dXMga2V5U3RhdHVzOworCisgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbnVtS2V5czsgKytpKSB7CisgICAgICAgICAgICBrZXlTdGF0dXMua2V5SWQucHRyID0gbnVsbHB0cjsKKyAgICAgICAgICAgIGtleVN0YXR1cy5rZXlJZC5sZW5ndGggPSAwOworICAgICAgICAgICAgaW50MzJfdCBpZFNpemUgPSBvYmotPnJlYWRJbnQzMigpOworICAgICAgICAgICAgaWYgKGlkU2l6ZSA+IDApIHsKKyAgICAgICAgICAgICAgICBzdGQ6OnVuaXF1ZV9wdHI8dWludDhfdFtdPiBkYXRhKG5ldyB1aW50OF90W2lkU2l6ZV0pOworICAgICAgICAgICAgICAgIGVyciA9IG9iai0+cmVhZChkYXRhLmdldCgpLCBpZFNpemUpOworICAgICAgICAgICAgICAgIGlmIChlcnIgIT0gT0spIHsKKyAgICAgICAgICAgICAgICAgICAgQUxPR0UoIkZhaWxlZCB0byByZWFkIGtleSBkYXRhLCBlcnJvcj0lZCIsIGVycik7CisgICAgICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAga2V5U3RhdHVzLmtleUlkLnB0ciA9IGRhdGEuZ2V0KCk7CisgICAgICAgICAgICAgICAga2V5U3RhdHVzLmtleUlkLmxlbmd0aCA9IGlkU2l6ZTsKKyAgICAgICAgICAgICAgICBkYXRhUG9pbnRlcnMucHVzaF9iYWNrKHN0ZDo6bW92ZShkYXRhKSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBrZXlTdGF0dXMua2V5VHlwZSA9IHN0YXRpY19jYXN0PEFNZWRpYURybUtleVN0YXR1c1R5cGU+KG9iai0+cmVhZEludDMyKCkpOworICAgICAgICAgICAga2V5c1N0YXR1cy5wdXNoKGtleVN0YXR1cyk7CisgICAgICAgIH0KKworICAgICAgICBib29sIGhhc05ld1VzYWJsZUtleSA9IG9iai0+cmVhZEludDMyKCk7CisgICAgICAgICgqbUtleXNDaGFuZ2VMaXN0ZW5lcikobU9iaiwgJnNlc3Npb25JZCwga2V5c1N0YXR1cy5hcnJheSgpLCBudW1LZXlzLCBoYXNOZXdVc2FibGVLZXkpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgLy8gSGFuZGxlcyBBTWVkaWFEcm1FdmVudExpc3RlbmVyIGJlbG93OgorICAgIC8vICB0cmFuc2xhdGVzIERybVBsdWdpbiBldmVudCB0eXBlcyBpbnRvIHRoZWlyIE5ESyBlcXVpdmFsZW50cwogICAgIEFNZWRpYURybUV2ZW50VHlwZSBuZGtFdmVudFR5cGU7CiAgICAgc3dpdGNoKGV2ZW50VHlwZSkgewogICAgICAgICBjYXNlIERybVBsdWdpbjo6a0RybVBsdWdpbkV2ZW50UHJvdmlzaW9uUmVxdWlyZWQ6CkBAIC05NywxOSArMTY5LDMwIEBACiAgICAgICAgIGNhc2UgRHJtUGx1Z2luOjprRHJtUGx1Z2luRXZlbnRWZW5kb3JEZWZpbmVkOgogICAgICAgICAgICAgbmRrRXZlbnRUeXBlID0gRVZFTlRfVkVORE9SX0RFRklORUQ7CiAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBEcm1QbHVnaW46OmtEcm1QbHVnaW5FdmVudFNlc3Npb25SZWNsYWltZWQ6CisgICAgICAgICAgICBuZGtFdmVudFR5cGUgPSBFVkVOVF9TRVNTSU9OX1JFQ0xBSU1FRDsKKyAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgQUxPR0UoIkludmFsaWQgZXZlbnQgRHJtUGx1Z2luOjpFdmVudFR5cGUgJWQsIGlnbm9yZWQiLCAoaW50KWV2ZW50VHlwZSk7Ci0gICAgICAgICAgICBnb3RvIGNsZWFudXA7CisgICAgICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgKCptTGlzdGVuZXIpKG1PYmosICZzZXNzaW9uSWQsIG5ka0V2ZW50VHlwZSwgZXh0cmEsIGRhdGEsIGRhdGFTaXplKTsKLQotIGNsZWFudXA6Ci0gICAgZGVsZXRlIFtdIHNlc3Npb25JZC5wdHI7Ci0gICAgZGVsZXRlIFtdIGRhdGE7CisgICAgaW50MzJfdCBkYXRhU2l6ZSA9IG9iai0+cmVhZEludDMyKCk7CisgICAgdWludDhfdCAqZGF0YSA9IE5VTEw7CisgICAgaWYgKGRhdGFTaXplID4gMCkgeworICAgICAgICBkYXRhID0gbmV3IHVpbnQ4X3RbZGF0YVNpemVdOworICAgICAgICBlcnIgPSBvYmotPnJlYWQoZGF0YSwgZGF0YVNpemUpOworICAgICAgICBpZiAoZXJyID09IE9LKSB7CisgICAgICAgICAgICAoKm1FdmVudExpc3RlbmVyKShtT2JqLCAmc2Vzc2lvbklkLCBuZGtFdmVudFR5cGUsIGV4dHJhLCBkYXRhLCBkYXRhU2l6ZSk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBBTE9HRSgiRmFpbGVkIHRvIHJlYWQgZXZlbnQgZGF0YSwgZXJyb3I9JWQiLCBlcnIpOworICAgICAgICB9CisgICAgICAgIGRlbGV0ZSBbXSBkYXRhOworICAgIH0gZWxzZSB7CisgICAgICAgIEFMT0dFKCJFcnJvciByZWFkaW5nIHBhcmNlbDogaW52YWxpZCBldmVudCBkYXRhIHNpemU9JWQiLCBkYXRhU2l6ZSk7CisgICAgfQogfQogCi0KIGV4dGVybiAiQyIgewogCiBzdGF0aWMgbWVkaWFfc3RhdHVzX3QgdHJhbnNsYXRlU3RhdHVzKHN0YXR1c190IHN0YXR1cykgewpAQCAtMTk4LDYgKzI4MSw4IEBACiBBTWVkaWFEcm0qIEFNZWRpYURybV9jcmVhdGVCeVVVSUQoY29uc3QgQU1lZGlhVVVJRCB1dWlkKSB7CiAgICAgQU1lZGlhRHJtICptT2JqID0gbmV3IEFNZWRpYURybSgpOwogICAgIG1PYmotPm1Ecm0gPSBDcmVhdGVEcm1Gcm9tVVVJRCh1dWlkKTsKKworICAgIG1PYmotPm1MaXN0ZW5lci5jbGVhcigpOwogICAgIHJldHVybiBtT2JqOwogfQogCkBAIC0yMTYsMTEgKzMwMSw0NyBAQAogICAgIGlmICghbU9iaiB8fCBtT2JqLT5tRHJtID09IE5VTEwpIHsKICAgICAgICAgcmV0dXJuIEFNRURJQV9FUlJPUl9JTlZBTElEX09CSkVDVDsKICAgICB9Ci0gICAgbU9iai0+bUxpc3RlbmVyID0gbmV3IERybUxpc3RlbmVyKG1PYmosIGxpc3RlbmVyKTsKKworICAgIGlmIChtT2JqLT5tTGlzdGVuZXIuZ2V0KCkpIHsKKyAgICAgICAgbU9iai0+bUxpc3RlbmVyLT5zZXRFdmVudExpc3RlbmVyKGxpc3RlbmVyKTsKKyAgICB9IGVsc2UgeworICAgICAgICBtT2JqLT5tTGlzdGVuZXIgPSBuZXcgRHJtTGlzdGVuZXIobU9iaiwgbGlzdGVuZXIpOworICAgIH0KICAgICBtT2JqLT5tRHJtLT5zZXRMaXN0ZW5lcihtT2JqLT5tTGlzdGVuZXIpOwogICAgIHJldHVybiBBTUVESUFfT0s7CiB9CiAKK0VYUE9SVAorbWVkaWFfc3RhdHVzX3QgQU1lZGlhRHJtX3NldE9uRXhwaXJhdGlvblVwZGF0ZUxpc3RlbmVyKEFNZWRpYURybSAqbU9iaiwKKyAgICAgICAgQU1lZGlhRHJtRXhwaXJhdGlvblVwZGF0ZUxpc3RlbmVyIGxpc3RlbmVyKSB7CisgICAgaWYgKCFtT2JqIHx8IG1PYmotPm1Ecm0gPT0gTlVMTCkgeworICAgICAgICByZXR1cm4gQU1FRElBX0VSUk9SX0lOVkFMSURfT0JKRUNUOworICAgIH0KKworICAgIGlmIChtT2JqLT5tTGlzdGVuZXIuZ2V0KCkpIHsKKyAgICAgICAgbU9iai0+bUxpc3RlbmVyLT5zZXRFeHBpcmF0aW9uVXBkYXRlTGlzdGVuZXIobGlzdGVuZXIpOworICAgIH0gZWxzZSB7CisgICAgICAgIG1PYmotPm1MaXN0ZW5lciA9IG5ldyBEcm1MaXN0ZW5lcihtT2JqLCBsaXN0ZW5lcik7CisgICAgfQorICAgIG1PYmotPm1Ecm0tPnNldExpc3RlbmVyKG1PYmotPm1MaXN0ZW5lcik7CisgICAgcmV0dXJuIEFNRURJQV9PSzsKK30KKworRVhQT1JUCittZWRpYV9zdGF0dXNfdCBBTWVkaWFEcm1fc2V0T25LZXlzQ2hhbmdlTGlzdGVuZXIoQU1lZGlhRHJtICptT2JqLAorICAgICAgICBBTWVkaWFEcm1LZXlzQ2hhbmdlTGlzdGVuZXIgbGlzdGVuZXIpIHsKKyAgICBpZiAoIW1PYmogfHwgbU9iai0+bURybSA9PSBOVUxMKSB7CisgICAgICAgIHJldHVybiBBTUVESUFfRVJST1JfSU5WQUxJRF9PQkpFQ1Q7CisgICAgfQorCisgICAgaWYgKG1PYmotPm1MaXN0ZW5lci5nZXQoKSkgeworICAgICAgICBtT2JqLT5tTGlzdGVuZXItPnNldEtleXNDaGFuZ2VMaXN0ZW5lcihsaXN0ZW5lcik7CisgICAgfSBlbHNlIHsKKyAgICAgICAgbU9iai0+bUxpc3RlbmVyID0gbmV3IERybUxpc3RlbmVyKG1PYmosIGxpc3RlbmVyKTsKKyAgICB9CisgICAgbU9iai0+bURybS0+c2V0TGlzdGVuZXIobU9iai0+bUxpc3RlbmVyKTsKKyAgICByZXR1cm4gQU1FRElBX09LOworfQogCiBzdGF0aWMgYm9vbCBmaW5kSWQoQU1lZGlhRHJtICptT2JqLCBjb25zdCBBTWVkaWFEcm1CeXRlQXJyYXkgJmlkLCBMaXN0PGlkdmVjX3Q+OjppdGVyYXRvciAmaXRlcikgewogICAgIGZvciAoaXRlciA9IG1PYmotPm1JZHMuYmVnaW4oKTsgaXRlciAhPSBtT2JqLT5tSWRzLmVuZCgpOyArK2l0ZXIpIHsKQEAgLTMwOSw2ICs0MzAsNyBAQAogICAgIH0KICAgICBTdHJpbmc4IGRlZmF1bHRVcmw7CiAgICAgRHJtUGx1Z2luOjpLZXlSZXF1ZXN0VHlwZSBrZXlSZXF1ZXN0VHlwZTsKKyAgICBtT2JqLT5tS2V5UmVxdWVzdC5jbGVhcigpOwogICAgIHN0YXR1c190IHN0YXR1cyA9IG1PYmotPm1Ecm0tPmdldEtleVJlcXVlc3QoKml0ZXIsIG1kSW5pdCwgU3RyaW5nOChtaW1lVHlwZSksCiAgICAgICAgICAgICBtZEtleVR5cGUsIG1kT3B0aW9uYWxQYXJhbWV0ZXJzLCBtT2JqLT5tS2V5UmVxdWVzdCwgZGVmYXVsdFVybCwKICAgICAgICAgICAgICZrZXlSZXF1ZXN0VHlwZSk7CkBAIC01NzYsNyArNjk4LDcgQEAKICAgICBWZWN0b3I8dWludDhfdD4gYnl0ZUFycmF5OwogICAgIGJ5dGVBcnJheS5hcHBlbmRBcnJheSh2YWx1ZSwgdmFsdWVTaXplKTsKIAotICAgIHJldHVybiB0cmFuc2xhdGVTdGF0dXMobU9iai0+bURybS0+Z2V0UHJvcGVydHlCeXRlQXJyYXkoU3RyaW5nOChwcm9wZXJ0eU5hbWUpLAorICAgIHJldHVybiB0cmFuc2xhdGVTdGF0dXMobU9iai0+bURybS0+c2V0UHJvcGVydHlCeXRlQXJyYXkoU3RyaW5nOChwcm9wZXJ0eU5hbWUpLAogICAgICAgICAgICAgICAgICAgICBieXRlQXJyYXkpKTsKIH0KIApkaWZmIC0tZ2l0IGEvbWVkaWEvbmRrL05ka01lZGlhRXh0cmFjdG9yLmNwcCBiL21lZGlhL25kay9OZGtNZWRpYUV4dHJhY3Rvci5jcHAKaW5kZXggYjVlNjBhNC4uZjY5N2JkMSAxMDA2NDQKLS0tIGEvbWVkaWEvbmRrL05ka01lZGlhRXh0cmFjdG9yLmNwcAorKysgYi9tZWRpYS9uZGsvTmRrTWVkaWFFeHRyYWN0b3IuY3BwCkBAIC0yMCw4ICsyMCw5IEBACiAKICNpbmNsdWRlIDxtZWRpYS9OZGtNZWRpYUVycm9yLmg+CiAjaW5jbHVkZSA8bWVkaWEvTmRrTWVkaWFFeHRyYWN0b3IuaD4KKyNpbmNsdWRlIDxtZWRpYS9OZGtNZWRpYUVycm9yUHJpdi5oPgorI2luY2x1ZGUgPG1lZGlhL05ka01lZGlhRm9ybWF0UHJpdi5oPgogI2luY2x1ZGUgIk5ka01lZGlhRGF0YVNvdXJjZVByaXYuaCIKLSNpbmNsdWRlICJOZGtNZWRpYUZvcm1hdFByaXYuaCIKIAogCiAjaW5jbHVkZSA8aW50dHlwZXMuaD4KQEAgLTQwLDE5ICs0MSw2IEBACiAKIHVzaW5nIG5hbWVzcGFjZSBhbmRyb2lkOwogCi1zdGF0aWMgbWVkaWFfc3RhdHVzX3QgdHJhbnNsYXRlX2Vycm9yKHN0YXR1c190IGVycikgewotICAgIGlmIChlcnIgPT0gT0spIHsKLSAgICAgICAgcmV0dXJuIEFNRURJQV9PSzsKLSAgICB9IGVsc2UgaWYgKGVyciA9PSBFUlJPUl9FTkRfT0ZfU1RSRUFNKSB7Ci0gICAgICAgIHJldHVybiBBTUVESUFfRVJST1JfRU5EX09GX1NUUkVBTTsKLSAgICB9IGVsc2UgaWYgKGVyciA9PSBFUlJPUl9JTykgewotICAgICAgICByZXR1cm4gQU1FRElBX0VSUk9SX0lPOwotICAgIH0KLQotICAgIEFMT0dFKCJzZiBlcnJvciBjb2RlOiAlZCIsIGVycik7Ci0gICAgcmV0dXJuIEFNRURJQV9FUlJPUl9VTktOT1dOOwotfQotCiBzdHJ1Y3QgQU1lZGlhRXh0cmFjdG9yIHsKICAgICBzcDxOdU1lZGlhRXh0cmFjdG9yPiBtSW1wbDsKICAgICBzcDxBQnVmZmVyPiBtUHNzaEJ1ZjsKQEAgLTgyLDQ3ICs3MCwzNSBAQAogICAgIHJldHVybiB0cmFuc2xhdGVfZXJyb3IobURhdGEtPm1JbXBsLT5zZXREYXRhU291cmNlKGZkLCBvZmZzZXQsIGxlbmd0aCkpOwogfQogCittZWRpYV9zdGF0dXNfdCBBTWVkaWFFeHRyYWN0b3Jfc2V0RGF0YVNvdXJjZVdpdGhIZWFkZXJzKEFNZWRpYUV4dHJhY3RvciAqbURhdGEsCisgICAgICAgIGNvbnN0IGNoYXIgKnVyaSwKKyAgICAgICAgaW50IG51bWhlYWRlcnMsCisgICAgICAgIGNvbnN0IGNoYXIgKiBjb25zdCAqa2V5cywKKyAgICAgICAgY29uc3QgY2hhciAqIGNvbnN0ICp2YWx1ZXMpIHsKKworICAgIEFMT0dWKCJzZXREYXRhU291cmNlKCVzKSIsIHVyaSk7CisKKyAgICBzcDxNZWRpYUhUVFBTZXJ2aWNlPiBodHRwU2VydmljZSA9IGNyZWF0ZU1lZGlhSHR0cFNlcnZpY2UodXJpLCAvKiB2ZXJzaW9uID0gKi8gMSk7CisgICAgaWYgKGh0dHBTZXJ2aWNlID09IE5VTEwpIHsKKyAgICAgICAgQUxPR0UoImNhbid0IGNyZWF0ZSBodHRwIHNlcnZpY2UiKTsKKyAgICAgICAgcmV0dXJuIEFNRURJQV9FUlJPUl9VTlNVUFBPUlRFRDsKKyAgICB9CisKKyAgICBLZXllZFZlY3RvcjxTdHJpbmc4LCBTdHJpbmc4PiBoZWFkZXJzOworICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbnVtaGVhZGVyczsgKytpKSB7CisgICAgICAgIFN0cmluZzgga2V5OChrZXlzW2ldKTsKKyAgICAgICAgU3RyaW5nOCB2YWx1ZTgodmFsdWVzW2ldKTsKKyAgICAgICAgaGVhZGVycy5hZGQoa2V5OCwgdmFsdWU4KTsKKyAgICB9CisKKyAgICBzdGF0dXNfdCBlcnI7CisgICAgZXJyID0gbURhdGEtPm1JbXBsLT5zZXREYXRhU291cmNlKGh0dHBTZXJ2aWNlLCB1cmksIG51bWhlYWRlcnMgPiAwID8gJmhlYWRlcnMgOiBOVUxMKTsKKyAgICByZXR1cm4gdHJhbnNsYXRlX2Vycm9yKGVycik7Cit9CisKIEVYUE9SVAogbWVkaWFfc3RhdHVzX3QgQU1lZGlhRXh0cmFjdG9yX3NldERhdGFTb3VyY2UoQU1lZGlhRXh0cmFjdG9yICptRGF0YSwgY29uc3QgY2hhciAqbG9jYXRpb24pIHsKLSAgICBBTE9HVigic2V0RGF0YVNvdXJjZSglcykiLCBsb2NhdGlvbik7Ci0gICAgLy8gVE9ETzogYWRkIGhlYWRlciBzdXBwb3J0Ci0KLSAgICBKTklFbnYgKmVudiA9IEFuZHJvaWRSdW50aW1lOjpnZXRKTklFbnYoKTsKLSAgICBqb2JqZWN0IHNlcnZpY2UgPSBOVUxMOwotICAgIGlmIChlbnYgPT0gTlVMTCkgewotICAgICAgICBBTE9HRSgic2V0RGF0YVNvdXJjZShwYXRoKSBtdXN0IGJlIGNhbGxlZCBmcm9tIEphdmEgdGhyZWFkIik7Ci0gICAgICAgIHJldHVybiBBTUVESUFfRVJST1JfVU5TVVBQT1JURUQ7Ci0gICAgfQotCi0gICAgamNsYXNzIG1lZGlhaHR0cGNsYXNzID0gZW52LT5GaW5kQ2xhc3MoImFuZHJvaWQvbWVkaWEvTWVkaWFIVFRQU2VydmljZSIpOwotICAgIGlmIChtZWRpYWh0dHBjbGFzcyA9PSBOVUxMKSB7Ci0gICAgICAgIEFMT0dFKCJjYW4ndCBmaW5kIE1lZGlhSHR0cFNlcnZpY2UiKTsKLSAgICAgICAgZW52LT5FeGNlcHRpb25DbGVhcigpOwotICAgICAgICByZXR1cm4gQU1FRElBX0VSUk9SX1VOU1VQUE9SVEVEOwotICAgIH0KLQotICAgIGptZXRob2RJRCBtZWRpYUh0dHBDcmVhdGVNZXRob2QgPSBlbnYtPkdldFN0YXRpY01ldGhvZElEKG1lZGlhaHR0cGNsYXNzLAotICAgICAgICAgICAgImNyZWF0ZUh0dHBTZXJ2aWNlQmluZGVySWZOZWNlc3NhcnkiLCAiKExqYXZhL2xhbmcvU3RyaW5nOylMYW5kcm9pZC9vcy9JQmluZGVyOyIpOwotICAgIGlmIChtZWRpYUh0dHBDcmVhdGVNZXRob2QgPT0gTlVMTCkgewotICAgICAgICBBTE9HRSgiY2FuJ3QgZmluZCBtZXRob2QiKTsKLSAgICAgICAgZW52LT5FeGNlcHRpb25DbGVhcigpOwotICAgICAgICByZXR1cm4gQU1FRElBX0VSUk9SX1VOU1VQUE9SVEVEOwotICAgIH0KLQotICAgIGpzdHJpbmcgamxvYyA9IGVudi0+TmV3U3RyaW5nVVRGKGxvY2F0aW9uKTsKLQotICAgIHNlcnZpY2UgPSBlbnYtPkNhbGxTdGF0aWNPYmplY3RNZXRob2QobWVkaWFodHRwY2xhc3MsIG1lZGlhSHR0cENyZWF0ZU1ldGhvZCwgamxvYyk7Ci0gICAgZW52LT5EZWxldGVMb2NhbFJlZihqbG9jKTsKLQotICAgIHNwPElNZWRpYUhUVFBTZXJ2aWNlPiBodHRwU2VydmljZTsKLSAgICBpZiAoc2VydmljZSAhPSBOVUxMKSB7Ci0gICAgICAgIHNwPElCaW5kZXI+IGJpbmRlciA9IGliaW5kZXJGb3JKYXZhT2JqZWN0KGVudiwgc2VydmljZSk7Ci0gICAgICAgIGh0dHBTZXJ2aWNlID0gaW50ZXJmYWNlX2Nhc3Q8SU1lZGlhSFRUUFNlcnZpY2U+KGJpbmRlcik7Ci0gICAgfQotCi0gICAgc3RhdHVzX3QgZXJyID0gbURhdGEtPm1JbXBsLT5zZXREYXRhU291cmNlKGh0dHBTZXJ2aWNlLCBsb2NhdGlvbiwgTlVMTCk7Ci0gICAgZW52LT5FeGNlcHRpb25DbGVhcigpOwotICAgIHJldHVybiB0cmFuc2xhdGVfZXJyb3IoZXJyKTsKKyAgICByZXR1cm4gQU1lZGlhRXh0cmFjdG9yX3NldERhdGFTb3VyY2VXaXRoSGVhZGVycyhtRGF0YSwgbG9jYXRpb24sIDAsIE5VTEwsIE5VTEwpOwogfQogCiBFWFBPUlQKQEAgLTQ3NSwxMSArNDUxLDUgQEAKICAgICByZXR1cm4gQU1FRElBX09LOwogfQogCi1FWFBPUlQKLW1lZGlhX3N0YXR1c190IEFNZWRpYUV4dHJhY3Rvcl9kaXNjb25uZWN0KEFNZWRpYUV4dHJhY3RvciAqIGV4KSB7Ci0gICAgZXgtPm1JbXBsLT5kaXNjb25uZWN0KCk7Ci0gICAgcmV0dXJuIEFNRURJQV9PSzsKLX0KLQogfSAvLyBleHRlcm4gIkMiCiAKZGlmZiAtLWdpdCBhL21lZGlhL25kay9OZGtNZWRpYUZvcm1hdC5jcHAgYi9tZWRpYS9uZGsvTmRrTWVkaWFGb3JtYXQuY3BwCmluZGV4IGYzMmI4M2UuLmJmOTcyNWMgMTAwNjQ0Ci0tLSBhL21lZGlhL25kay9OZGtNZWRpYUZvcm1hdC5jcHAKKysrIGIvbWVkaWEvbmRrL05ka01lZGlhRm9ybWF0LmNwcApAQCAtMjAsNiArMjAsNyBAQAogI2luY2x1ZGUgPGludHR5cGVzLmg+CiAKICNpbmNsdWRlIDxtZWRpYS9OZGtNZWRpYUZvcm1hdC5oPgorI2luY2x1ZGUgPG1lZGlhL05ka01lZGlhRm9ybWF0UHJpdi5oPgogCiAjaW5jbHVkZSA8dXRpbHMvTG9nLmg+CiAjaW5jbHVkZSA8dXRpbHMvU3Ryb25nUG9pbnRlci5oPgpAQCAtMzIsMzEgKzMzLDggQEAKIAogdXNpbmcgbmFtZXNwYWNlIGFuZHJvaWQ7CiAKLXN0cnVjdCBBTWVkaWFGb3JtYXQgewotICAgIHNwPEFNZXNzYWdlPiBtRm9ybWF0OwotICAgIFN0cmluZzggbURlYnVnOwotICAgIEtleWVkVmVjdG9yPFN0cmluZzgsIFN0cmluZzg+IG1TdHJpbmdDYWNoZTsKLX07Ci0KIGV4dGVybiAiQyIgewogCi0vLyBwcml2YXRlIGZ1bmN0aW9ucyBmb3IgY29udmVyc2lvbiB0by9mcm9tIEFNZXNzYWdlCi1BTWVkaWFGb3JtYXQqIEFNZWRpYUZvcm1hdF9mcm9tTXNnKGNvbnN0IHZvaWQqIGRhdGEpIHsKLSAgICBBTE9HVigicHJpdmF0ZSBjdG9yIik7Ci0gICAgQU1lZGlhRm9ybWF0KiBtRGF0YSA9IG5ldyBBTWVkaWFGb3JtYXQoKTsKLSAgICBtRGF0YS0+bUZvcm1hdCA9ICooKHNwPEFNZXNzYWdlPiopZGF0YSk7Ci0gICAgaWYgKG1EYXRhLT5tRm9ybWF0ID09IE5VTEwpIHsKLSAgICAgICAgQUxPR1coImdvdCBOVUxMIGZvcm1hdCIpOwotICAgICAgICBtRGF0YS0+bUZvcm1hdCA9IG5ldyBBTWVzc2FnZTsKLSAgICB9Ci0gICAgcmV0dXJuIG1EYXRhOwotfQotCi12b2lkIEFNZWRpYUZvcm1hdF9nZXRGb3JtYXQoY29uc3QgQU1lZGlhRm9ybWF0KiBtRGF0YSwgdm9pZCogZGVzdCkgewotICAgICooKHNwPEFNZXNzYWdlPiopZGVzdCkgPSBtRGF0YS0+bUZvcm1hdDsKLX0KLQotCiAvKgogICogcHVibGljIGZ1bmN0aW9uIGZvbGxvdwogICovCkBAIC03NCw2ICs1MiwyMSBAQAogICAgIHJldHVybiBBTUVESUFfT0s7CiB9CiAKK0VYUE9SVAordm9pZCBBTWVkaWFGb3JtYXRfY2xlYXIoQU1lZGlhRm9ybWF0ICpmb3JtYXQpIHsKKyAgICBmb3JtYXQtPm1Gb3JtYXQtPmNsZWFyKCk7Cit9CisKK0VYUE9SVAorbWVkaWFfc3RhdHVzX3QgQU1lZGlhRm9ybWF0X2NvcHkoQU1lZGlhRm9ybWF0ICp0bywgQU1lZGlhRm9ybWF0ICpmcm9tKSB7CisgICAgaWYgKCF0byB8fCAhZnJvbSkgeworICAgICAgICByZXR1cm4gQU1FRElBX0VSUk9SX0lOVkFMSURfUEFSQU1FVEVSOworICAgIH0KKyAgICB0by0+bUZvcm1hdC0+Y2xlYXIoKTsKKyAgICB0by0+bUZvcm1hdC0+ZXh0ZW5kKGZyb20tPm1Gb3JtYXQpOworICAgIHJldHVybiBBTUVESUFfT0s7Cit9CisKIAogRVhQT1JUCiBjb25zdCBjaGFyKiBBTWVkaWFGb3JtYXRfdG9TdHJpbmcoQU1lZGlhRm9ybWF0ICptRGF0YSkgewpAQCAtMjU2LDcgKzI0OSw3IEBACiB9CiAKIEVYUE9SVAotdm9pZCBBTWVkaWFGb3JtYXRfc2V0QnVmZmVyKEFNZWRpYUZvcm1hdCogZm9ybWF0LCBjb25zdCBjaGFyKiBuYW1lLCB2b2lkKiBkYXRhLCBzaXplX3Qgc2l6ZSkgewordm9pZCBBTWVkaWFGb3JtYXRfc2V0QnVmZmVyKEFNZWRpYUZvcm1hdCogZm9ybWF0LCBjb25zdCBjaGFyKiBuYW1lLCBjb25zdCB2b2lkKiBkYXRhLCBzaXplX3Qgc2l6ZSkgewogICAgIC8vIHRoZSBBQnVmZmVyKHZvaWQqLCBzaXplX3QpIGNvbnN0cnVjdG9yIGRvZXNuJ3QgdGFrZSBvd25lcnNoaXAgb2YgdGhlIGRhdGEsIHNvIGNyZWF0ZQogICAgIC8vIGEgbmV3IGJ1ZmZlciBhbmQgY29weSB0aGUgZGF0YSBpbnRvIGl0CiAgICAgc3A8QUJ1ZmZlcj4gYnVmID0gbmV3IEFCdWZmZXIoc2l6ZSk7CkBAIC0yNzUsMzEgKzI2OCw2MCBAQAogRVhQT1JUIGNvbnN0IGNoYXIqIEFNRURJQUZPUk1BVF9LRVlfQUFDX01BWF9PVVRQVVRfQ0hBTk5FTF9DT1VOVCA9ICJhYWMtbWF4LW91dHB1dC1jaGFubmVsX2NvdW50IjsKIEVYUE9SVCBjb25zdCBjaGFyKiBBTUVESUFGT1JNQVRfS0VZX0FBQ19QUk9GSUxFID0gImFhYy1wcm9maWxlIjsKIEVYUE9SVCBjb25zdCBjaGFyKiBBTUVESUFGT1JNQVRfS0VZX0FBQ19TQlJfTU9ERSA9ICJhYWMtc2JyLW1vZGUiOworRVhQT1JUIGNvbnN0IGNoYXIqIEFNRURJQUZPUk1BVF9LRVlfQUxCVU0gPSAiYWxidW0iOworRVhQT1JUIGNvbnN0IGNoYXIqIEFNRURJQUZPUk1BVF9LRVlfQUxCVU1BUlQgPSAiYWxidW1hcnQiOworRVhQT1JUIGNvbnN0IGNoYXIqIEFNRURJQUZPUk1BVF9LRVlfQUxCVU1BUlRJU1QgPSAiYWxidW1hcnRpc3QiOworRVhQT1JUIGNvbnN0IGNoYXIqIEFNRURJQUZPUk1BVF9LRVlfQVJUSVNUID0gImFydGlzdCI7CitFWFBPUlQgY29uc3QgY2hhciogQU1FRElBRk9STUFUX0tFWV9BVURJT19QUkVTRU5UQVRJT05fSU5GTyA9ICJhdWRpby1wcmVzZW50YXRpb24taW5mbyI7CiBFWFBPUlQgY29uc3QgY2hhciogQU1FRElBRk9STUFUX0tFWV9BVURJT19TRVNTSU9OX0lEID0gImF1ZGlvLXNlc3Npb24taWQiOworRVhQT1JUIGNvbnN0IGNoYXIqIEFNRURJQUZPUk1BVF9LRVlfQVVUSE9SID0gImF1dGhvciI7CiBFWFBPUlQgY29uc3QgY2hhciogQU1FRElBRk9STUFUX0tFWV9CSVRSQVRFX01PREUgPSAiYml0cmF0ZS1tb2RlIjsKIEVYUE9SVCBjb25zdCBjaGFyKiBBTUVESUFGT1JNQVRfS0VZX0JJVF9SQVRFID0gImJpdHJhdGUiOworRVhQT1JUIGNvbnN0IGNoYXIqIEFNRURJQUZPUk1BVF9LRVlfQklUU19QRVJfU0FNUExFID0gImJpdHMtcGVyLXNhbXBsZSI7CiBFWFBPUlQgY29uc3QgY2hhciogQU1FRElBRk9STUFUX0tFWV9DQVBUVVJFX1JBVEUgPSAiY2FwdHVyZS1yYXRlIjsKK0VYUE9SVCBjb25zdCBjaGFyKiBBTUVESUFGT1JNQVRfS0VZX0NEVFJBQ0tOVU1CRVIgPSAiY2R0cmFja251bSI7CiBFWFBPUlQgY29uc3QgY2hhciogQU1FRElBRk9STUFUX0tFWV9DSEFOTkVMX0NPVU5UID0gImNoYW5uZWwtY291bnQiOwogRVhQT1JUIGNvbnN0IGNoYXIqIEFNRURJQUZPUk1BVF9LRVlfQ0hBTk5FTF9NQVNLID0gImNoYW5uZWwtbWFzayI7CiBFWFBPUlQgY29uc3QgY2hhciogQU1FRElBRk9STUFUX0tFWV9DT0xPUl9GT1JNQVQgPSAiY29sb3ItZm9ybWF0IjsKIEVYUE9SVCBjb25zdCBjaGFyKiBBTUVESUFGT1JNQVRfS0VZX0NPTE9SX1JBTkdFID0gImNvbG9yLXJhbmdlIjsKIEVYUE9SVCBjb25zdCBjaGFyKiBBTUVESUFGT1JNQVRfS0VZX0NPTE9SX1NUQU5EQVJEID0gImNvbG9yLXN0YW5kYXJkIjsKIEVYUE9SVCBjb25zdCBjaGFyKiBBTUVESUFGT1JNQVRfS0VZX0NPTE9SX1RSQU5TRkVSID0gImNvbG9yLXRyYW5zZmVyIjsKK0VYUE9SVCBjb25zdCBjaGFyKiBBTUVESUFGT1JNQVRfS0VZX0NPTVBJTEFUSU9OID0gImNvbXBpbGF0aW9uIjsKIEVYUE9SVCBjb25zdCBjaGFyKiBBTUVESUFGT1JNQVRfS0VZX0NPTVBMRVhJVFkgPSAiY29tcGxleGl0eSI7CitFWFBPUlQgY29uc3QgY2hhciogQU1FRElBRk9STUFUX0tFWV9DT01QT1NFUiA9ICJjb21wb3NlciI7CitFWFBPUlQgY29uc3QgY2hhciogQU1FRElBRk9STUFUX0tFWV9DUllQVE9fREVGQVVMVF9JVl9TSVpFID0gImNyeXB0by1kZWZhdWx0LWl2LXNpemUiOworRVhQT1JUIGNvbnN0IGNoYXIqIEFNRURJQUZPUk1BVF9LRVlfQ1JZUFRPX0VOQ1JZUFRFRF9CWVRFX0JMT0NLID0gImNyeXB0by1lbmNyeXB0ZWQtYnl0ZS1ibG9jayI7CitFWFBPUlQgY29uc3QgY2hhciogQU1FRElBRk9STUFUX0tFWV9DUllQVE9fSVYgPSAiY3J5cHRvLWl2IjsKK0VYUE9SVCBjb25zdCBjaGFyKiBBTUVESUFGT1JNQVRfS0VZX0NSWVBUT19LRVkgPSAiY3J5cHRvLWtleSI7CitFWFBPUlQgY29uc3QgY2hhciogQU1FRElBRk9STUFUX0tFWV9DUllQVE9fTU9ERSA9ICJjcnlwdG8tbW9kZSI7CitFWFBPUlQgY29uc3QgY2hhciogQU1FRElBRk9STUFUX0tFWV9DUllQVE9fU0tJUF9CWVRFX0JMT0NLID0gImNyeXB0by1za2lwLWJ5dGUtYmxvY2siOwogRVhQT1JUIGNvbnN0IGNoYXIqIEFNRURJQUZPUk1BVF9LRVlfQ1NEID0gImNzZCI7CiBFWFBPUlQgY29uc3QgY2hhciogQU1FRElBRk9STUFUX0tFWV9DU0RfMCA9ICJjc2QtMCI7CiBFWFBPUlQgY29uc3QgY2hhciogQU1FRElBRk9STUFUX0tFWV9DU0RfMSA9ICJjc2QtMSI7CiBFWFBPUlQgY29uc3QgY2hhciogQU1FRElBRk9STUFUX0tFWV9DU0RfMiA9ICJjc2QtMiI7CitFWFBPUlQgY29uc3QgY2hhciogQU1FRElBRk9STUFUX0tFWV9DU0RfQVZDID0gImNzZC1hdmMiOworRVhQT1JUIGNvbnN0IGNoYXIqIEFNRURJQUZPUk1BVF9LRVlfQ1NEX0hFVkMgPSAiY3NkLWhldmMiOworRVhQT1JUIGNvbnN0IGNoYXIqIEFNRURJQUZPUk1BVF9LRVlfRDI2MyA9ICJkMjYzIjsKK0VYUE9SVCBjb25zdCBjaGFyKiBBTUVESUFGT1JNQVRfS0VZX0RBVEUgPSAiZGF0ZSI7CitFWFBPUlQgY29uc3QgY2hhciogQU1FRElBRk9STUFUX0tFWV9ESVNDTlVNQkVSID0gImRpc2NudW0iOwogRVhQT1JUIGNvbnN0IGNoYXIqIEFNRURJQUZPUk1BVF9LRVlfRElTUExBWV9DUk9QID0gImNyb3AiOwogRVhQT1JUIGNvbnN0IGNoYXIqIEFNRURJQUZPUk1BVF9LRVlfRElTUExBWV9IRUlHSFQgPSAiZGlzcGxheS1oZWlnaHQiOwogRVhQT1JUIGNvbnN0IGNoYXIqIEFNRURJQUZPUk1BVF9LRVlfRElTUExBWV9XSURUSCA9ICJkaXNwbGF5LXdpZHRoIjsKIEVYUE9SVCBjb25zdCBjaGFyKiBBTUVESUFGT1JNQVRfS0VZX0RVUkFUSU9OID0gImR1cmF0aW9uVXMiOworRVhQT1JUIGNvbnN0IGNoYXIqIEFNRURJQUZPUk1BVF9LRVlfRU5DT0RFUl9ERUxBWSA9ICJlbmNvZGVyLWRlbGF5IjsKK0VYUE9SVCBjb25zdCBjaGFyKiBBTUVESUFGT1JNQVRfS0VZX0VOQ09ERVJfUEFERElORyA9ICJlbmNvZGVyLXBhZGRpbmciOworRVhQT1JUIGNvbnN0IGNoYXIqIEFNRURJQUZPUk1BVF9LRVlfRVNEUyA9ICJlc2RzIjsKK0VYUE9SVCBjb25zdCBjaGFyKiBBTUVESUFGT1JNQVRfS0VZX0VYSUZfT0ZGU0VUID0gImV4aWYtb2Zmc2V0IjsKK0VYUE9SVCBjb25zdCBjaGFyKiBBTUVESUFGT1JNQVRfS0VZX0VYSUZfU0laRSA9ICJleGlmLXNpemUiOwogRVhQT1JUIGNvbnN0IGNoYXIqIEFNRURJQUZPUk1BVF9LRVlfRkxBQ19DT01QUkVTU0lPTl9MRVZFTCA9ICJmbGFjLWNvbXByZXNzaW9uLWxldmVsIjsKK0VYUE9SVCBjb25zdCBjaGFyKiBBTUVESUFGT1JNQVRfS0VZX0ZSQU1FX0NPVU5UID0gImZyYW1lLWNvdW50IjsKIEVYUE9SVCBjb25zdCBjaGFyKiBBTUVESUFGT1JNQVRfS0VZX0ZSQU1FX1JBVEUgPSAiZnJhbWUtcmF0ZSI7CitFWFBPUlQgY29uc3QgY2hhciogQU1FRElBRk9STUFUX0tFWV9HRU5SRSA9ICJnZW5yZSI7CiBFWFBPUlQgY29uc3QgY2hhciogQU1FRElBRk9STUFUX0tFWV9HUklEX0NPTFVNTlMgPSAiZ3JpZC1jb2xzIjsKIEVYUE9SVCBjb25zdCBjaGFyKiBBTUVESUFGT1JNQVRfS0VZX0dSSURfUk9XUyA9ICJncmlkLXJvd3MiOwogRVhQT1JUIGNvbnN0IGNoYXIqIEFNRURJQUZPUk1BVF9LRVlfSERSX1NUQVRJQ19JTkZPID0gImhkci1zdGF0aWMtaW5mbyI7CiBFWFBPUlQgY29uc3QgY2hhciogQU1FRElBRk9STUFUX0tFWV9IRUlHSFQgPSAiaGVpZ2h0IjsKK0VYUE9SVCBjb25zdCBjaGFyKiBBTUVESUFGT1JNQVRfS0VZX0lDQ19QUk9GSUxFID0gImljYy1wcm9maWxlIjsKIEVYUE9SVCBjb25zdCBjaGFyKiBBTUVESUFGT1JNQVRfS0VZX0lOVFJBX1JFRlJFU0hfUEVSSU9EID0gImludHJhLXJlZnJlc2gtcGVyaW9kIjsKIEVYUE9SVCBjb25zdCBjaGFyKiBBTUVESUFGT1JNQVRfS0VZX0lTX0FEVFMgPSAiaXMtYWR0cyI7CiBFWFBPUlQgY29uc3QgY2hhciogQU1FRElBRk9STUFUX0tFWV9JU19BVVRPU0VMRUNUID0gImlzLWF1dG9zZWxlY3QiOwpAQCAtMzA5LDMxICszMzEsNDYgQEAKIEVYUE9SVCBjb25zdCBjaGFyKiBBTUVESUFGT1JNQVRfS0VZX0xBTkdVQUdFID0gImxhbmd1YWdlIjsKIEVYUE9SVCBjb25zdCBjaGFyKiBBTUVESUFGT1JNQVRfS0VZX0xBVEVOQ1kgPSAibGF0ZW5jeSI7CiBFWFBPUlQgY29uc3QgY2hhciogQU1FRElBRk9STUFUX0tFWV9MRVZFTCA9ICJsZXZlbCI7CitFWFBPUlQgY29uc3QgY2hhciogQU1FRElBRk9STUFUX0tFWV9MT0NBVElPTiA9ICJsb2NhdGlvbiI7CitFWFBPUlQgY29uc3QgY2hhciogQU1FRElBRk9STUFUX0tFWV9MT09QID0gImxvb3AiOworRVhQT1JUIGNvbnN0IGNoYXIqIEFNRURJQUZPUk1BVF9LRVlfTFlSSUNJU1QgPSAibHlyaWNpc3QiOworRVhQT1JUIGNvbnN0IGNoYXIqIEFNRURJQUZPUk1BVF9LRVlfTUFYX0JJVF9SQVRFID0gIm1heC1iaXRyYXRlIjsKIEVYUE9SVCBjb25zdCBjaGFyKiBBTUVESUFGT1JNQVRfS0VZX01BWF9IRUlHSFQgPSAibWF4LWhlaWdodCI7CiBFWFBPUlQgY29uc3QgY2hhciogQU1FRElBRk9STUFUX0tFWV9NQVhfSU5QVVRfU0laRSA9ICJtYXgtaW5wdXQtc2l6ZSI7CiBFWFBPUlQgY29uc3QgY2hhciogQU1FRElBRk9STUFUX0tFWV9NQVhfV0lEVEggPSAibWF4LXdpZHRoIjsKIEVYUE9SVCBjb25zdCBjaGFyKiBBTUVESUFGT1JNQVRfS0VZX01JTUUgPSAibWltZSI7CiBFWFBPUlQgY29uc3QgY2hhciogQU1FRElBRk9STUFUX0tFWV9NUEVHX1VTRVJfREFUQSA9ICJtcGVnLXVzZXItZGF0YSI7CitFWFBPUlQgY29uc3QgY2hhciogQU1FRElBRk9STUFUX0tFWV9NUEVHMl9TVFJFQU1fSEVBREVSID0gIm1wZWcyLXN0cmVhbS1oZWFkZXIiOwogRVhQT1JUIGNvbnN0IGNoYXIqIEFNRURJQUZPUk1BVF9LRVlfT1BFUkFUSU5HX1JBVEUgPSAib3BlcmF0aW5nLXJhdGUiOwogRVhQT1JUIGNvbnN0IGNoYXIqIEFNRURJQUZPUk1BVF9LRVlfUENNX0VOQ09ESU5HID0gInBjbS1lbmNvZGluZyI7CiBFWFBPUlQgY29uc3QgY2hhciogQU1FRElBRk9STUFUX0tFWV9QUklPUklUWSA9ICJwcmlvcml0eSI7CiBFWFBPUlQgY29uc3QgY2hhciogQU1FRElBRk9STUFUX0tFWV9QUk9GSUxFID0gInByb2ZpbGUiOworRVhQT1JUIGNvbnN0IGNoYXIqIEFNRURJQUZPUk1BVF9LRVlfUENNX0JJR19FTkRJQU4gPSAicGNtLWJpZy1lbmRpYW4iOworRVhQT1JUIGNvbnN0IGNoYXIqIEFNRURJQUZPUk1BVF9LRVlfUFNTSCA9ICJwc3NoIjsKIEVYUE9SVCBjb25zdCBjaGFyKiBBTUVESUFGT1JNQVRfS0VZX1BVU0hfQkxBTktfQlVGRkVSU19PTl9TVE9QID0gInB1c2gtYmxhbmstYnVmZmVycy1vbi1zaHV0ZG93biI7CiBFWFBPUlQgY29uc3QgY2hhciogQU1FRElBRk9STUFUX0tFWV9SRVBFQVRfUFJFVklPVVNfRlJBTUVfQUZURVIgPSAicmVwZWF0LXByZXZpb3VzLWZyYW1lLWFmdGVyIjsKIEVYUE9SVCBjb25zdCBjaGFyKiBBTUVESUFGT1JNQVRfS0VZX1JPVEFUSU9OID0gInJvdGF0aW9uLWRlZ3JlZXMiOwogRVhQT1JUIGNvbnN0IGNoYXIqIEFNRURJQUZPUk1BVF9LRVlfU0FNUExFX1JBVEUgPSAic2FtcGxlLXJhdGUiOworRVhQT1JUIGNvbnN0IGNoYXIqIEFNRURJQUZPUk1BVF9LRVlfU0FSX0hFSUdIVCA9ICJzYXItaGVpZ2h0IjsKK0VYUE9SVCBjb25zdCBjaGFyKiBBTUVESUFGT1JNQVRfS0VZX1NBUl9XSURUSCA9ICJzYXItd2lkdGgiOwogRVhQT1JUIGNvbnN0IGNoYXIqIEFNRURJQUZPUk1BVF9LRVlfU0VJID0gInNlaSI7CiBFWFBPUlQgY29uc3QgY2hhciogQU1FRElBRk9STUFUX0tFWV9TTElDRV9IRUlHSFQgPSAic2xpY2UtaGVpZ2h0IjsKIEVYUE9SVCBjb25zdCBjaGFyKiBBTUVESUFGT1JNQVRfS0VZX1NUUklERSA9ICJzdHJpZGUiOworRVhQT1JUIGNvbnN0IGNoYXIqIEFNRURJQUZPUk1BVF9LRVlfVEVNUE9SQUxfTEFZRVJfQ09VTlQgPSAidGVtcG9yYWwtbGF5ZXItY291bnQiOwogRVhQT1JUIGNvbnN0IGNoYXIqIEFNRURJQUZPUk1BVF9LRVlfVEVNUE9SQUxfTEFZRVJfSUQgPSAidGVtcG9yYWwtbGF5ZXItaWQiOwogRVhQT1JUIGNvbnN0IGNoYXIqIEFNRURJQUZPUk1BVF9LRVlfVEVNUE9SQUxfTEFZRVJJTkcgPSAidHMtc2NoZW1hIjsKK0VYUE9SVCBjb25zdCBjaGFyKiBBTUVESUFGT1JNQVRfS0VZX1RFWFRfRk9STUFUX0RBVEEgPSAidGV4dC1mb3JtYXQtZGF0YSI7CitFWFBPUlQgY29uc3QgY2hhciogQU1FRElBRk9STUFUX0tFWV9USFVNQk5BSUxfSEVJR0hUID0gInRodW1ibmFpbC1oZWlnaHQiOworRVhQT1JUIGNvbnN0IGNoYXIqIEFNRURJQUZPUk1BVF9LRVlfVEhVTUJOQUlMX1RJTUUgPSAidGh1bWJuYWlsLXRpbWUiOworRVhQT1JUIGNvbnN0IGNoYXIqIEFNRURJQUZPUk1BVF9LRVlfVEhVTUJOQUlMX1dJRFRIID0gInRodW1ibmFpbC13aWR0aCI7CiBFWFBPUlQgY29uc3QgY2hhciogQU1FRElBRk9STUFUX0tFWV9USUxFX0hFSUdIVCA9ICJ0aWxlLWhlaWdodCI7CiBFWFBPUlQgY29uc3QgY2hhciogQU1FRElBRk9STUFUX0tFWV9USUxFX1dJRFRIID0gInRpbGUtd2lkdGgiOwogRVhQT1JUIGNvbnN0IGNoYXIqIEFNRURJQUZPUk1BVF9LRVlfVElNRV9VUyA9ICJ0aW1lVXMiOworRVhQT1JUIGNvbnN0IGNoYXIqIEFNRURJQUZPUk1BVF9LRVlfVElUTEUgPSAidGl0bGUiOwogRVhQT1JUIGNvbnN0IGNoYXIqIEFNRURJQUZPUk1BVF9LRVlfVFJBQ0tfSUQgPSAidHJhY2staWQiOwogRVhQT1JUIGNvbnN0IGNoYXIqIEFNRURJQUZPUk1BVF9LRVlfVFJBQ0tfSU5ERVggPSAidHJhY2staW5kZXgiOwogRVhQT1JUIGNvbnN0IGNoYXIqIEFNRURJQUZPUk1BVF9LRVlfV0lEVEggPSAid2lkdGgiOwotCitFWFBPUlQgY29uc3QgY2hhciogQU1FRElBRk9STUFUX0tFWV9ZRUFSID0gInllYXIiOwogCiB9IC8vIGV4dGVybiAiQyIKIApkaWZmIC0tZ2l0IGEvbWVkaWEvbmRrL05ka01lZGlhRm9ybWF0UHJpdi5oIGIvbWVkaWEvbmRrL05ka01lZGlhRm9ybWF0UHJpdi5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjNmE2NTYzLi4wMDAwMDAwCi0tLSBhL21lZGlhL25kay9OZGtNZWRpYUZvcm1hdFByaXYuaAorKysgL2Rldi9udWxsCkBAIC0xLDQ0ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAotICoKLSAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwotICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgotICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0gKgotICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLSAqCi0gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCi0gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAotICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCi0gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCi0gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KLSAqLwotCi0vKgotICogVGhpcyBmaWxlIGRlZmluZXMgYW4gTkRLIEFQSS4KLSAqIERvIG5vdCByZW1vdmUgbWV0aG9kcy4KLSAqIERvIG5vdCBjaGFuZ2UgbWV0aG9kIHNpZ25hdHVyZXMuCi0gKiBEbyBub3QgY2hhbmdlIHRoZSB2YWx1ZSBvZiBjb25zdGFudHMuCi0gKiBEbyBub3QgY2hhbmdlIHRoZSBzaXplIG9mIGFueSBvZiB0aGUgY2xhc3NlcyBkZWZpbmVkIGluIGhlcmUuCi0gKiBEbyBub3QgcmVmZXJlbmNlIHR5cGVzIHRoYXQgYXJlIG5vdCBwYXJ0IG9mIHRoZSBOREsuCi0gKiBEbyBub3QgI2luY2x1ZGUgZmlsZXMgdGhhdCBhcmVuJ3QgcGFydCBvZiB0aGUgTkRLLgotICovCi0KLSNpZm5kZWYgX05ES19NRURJQV9GT1JNQVRfUFJJVl9ICi0jZGVmaW5lIF9OREtfTUVESUFfRk9STUFUX1BSSVZfSAotCi0jaW5jbHVkZSA8bWVkaWEvTmRrTWVkaWFGb3JtYXQuaD4KLQotI2lmZGVmIF9fY3BsdXNwbHVzCi1leHRlcm4gIkMiIHsKLSNlbmRpZgotCi1BTWVkaWFGb3JtYXQqIEFNZWRpYUZvcm1hdF9mcm9tTXNnKHZvaWQqKTsKLXZvaWQgQU1lZGlhRm9ybWF0X2dldEZvcm1hdChjb25zdCBBTWVkaWFGb3JtYXQqIG1EYXRhLCB2b2lkKiBkZXN0KTsKLQotI2lmZGVmIF9fY3BsdXNwbHVzCi19IC8vIGV4dGVybiAiQyIKLSNlbmRpZgotCi0jZW5kaWYgLy8gX05ES19NRURJQV9GT1JNQVRfUFJJVl9ICi0KZGlmZiAtLWdpdCBhL21lZGlhL25kay9OZGtNZWRpYU11eGVyLmNwcCBiL21lZGlhL25kay9OZGtNZWRpYU11eGVyLmNwcAppbmRleCBkZmZjNGQ3Li5lNzk5MjZkIDEwMDY0NAotLS0gYS9tZWRpYS9uZGsvTmRrTWVkaWFNdXhlci5jcHAKKysrIGIvbWVkaWEvbmRrL05ka01lZGlhTXV4ZXIuY3BwCkBAIC0yMCw3ICsyMCw4IEBACiAKICNpbmNsdWRlIDxtZWRpYS9OZGtNZWRpYU11eGVyLmg+CiAjaW5jbHVkZSA8bWVkaWEvTmRrTWVkaWFDb2RlYy5oPgotI2luY2x1ZGUgIk5ka01lZGlhRm9ybWF0UHJpdi5oIgorI2luY2x1ZGUgPG1lZGlhL05ka01lZGlhRXJyb3JQcml2Lmg+CisjaW5jbHVkZSA8bWVkaWEvTmRrTWVkaWFGb3JtYXRQcml2Lmg+CiAKIAogI2luY2x1ZGUgPHV0aWxzL0xvZy5oPgpAQCAtMzYsMTQgKzM3LDYgQEAKIAogdXNpbmcgbmFtZXNwYWNlIGFuZHJvaWQ7CiAKLXN0YXRpYyBtZWRpYV9zdGF0dXNfdCB0cmFuc2xhdGVfZXJyb3Ioc3RhdHVzX3QgZXJyKSB7Ci0gICAgaWYgKGVyciA9PSBPSykgewotICAgICAgICByZXR1cm4gQU1FRElBX09LOwotICAgIH0KLSAgICBBTE9HRSgic2YgZXJyb3IgY29kZTogJWQiLCBlcnIpOwotICAgIHJldHVybiBBTUVESUFfRVJST1JfVU5LTk9XTjsKLX0KLQogc3RydWN0IEFNZWRpYU11eGVyIHsKICAgICBzcDxNZWRpYU11eGVyPiBtSW1wbDsKIApkaWZmIC0tZ2l0IGEvbWVkaWEvbmRrL2luY2x1ZGUvbWVkaWEvTmRrSW1hZ2UuaCBiL21lZGlhL25kay9pbmNsdWRlL21lZGlhL05ka0ltYWdlLmgKaW5kZXggZjkzNjExOC4uMTViMzQwYyAxMDA2NDQKLS0tIGEvbWVkaWEvbmRrL2luY2x1ZGUvbWVkaWEvTmRrSW1hZ2UuaAorKysgYi9tZWRpYS9uZGsvaW5jbHVkZS9tZWRpYS9OZGtJbWFnZS5oCkBAIC00OTksNyArNDk5LDM0IEBACiAgICAgICogPHA+V2hlbiBhbiB7QGxpbmsgQUltYWdlfSBvZiB0aGlzIGZvcm1hdCBpcyBvYnRhaW5lZCBmcm9tIGFuIHtAbGluayBBSW1hZ2VSZWFkZXJ9IG9yCiAgICAgICoge0BsaW5rIEFJbWFnZV9nZXROdW1iZXJPZlBsYW5lcygpfSBtZXRob2Qgd2lsbCByZXR1cm4gemVyby48L3A+CiAgICAgICovCi0gICAgQUlNQUdFX0ZPUk1BVF9QUklWQVRFICAgICAgICAgICA9IDB4MjIKKyAgICBBSU1BR0VfRk9STUFUX1BSSVZBVEUgICAgICAgICAgID0gMHgyMiwKKworICAgIC8qKgorICAgICAqIEFuZHJvaWQgWTggZm9ybWF0LgorICAgICAqCisgICAgICogPHA+WTggaXMgYSBwbGFuYXIgZm9ybWF0IGNvbXByaXNlZCBvZiBhIFd4SCBZIHBsYW5lIG9ubHksIHdpdGggZWFjaCBwaXhlbAorICAgICAqIGJlaW5nIHJlcHJlc2VudGVkIGJ5IDggYml0cy48L3A+CisgICAgICoKKyAgICAgKiA8cD5UaGlzIGZvcm1hdCBhc3N1bWVzCisgICAgICogPHVsPgorICAgICAqIDxsaT5hbiBldmVuIHdpZHRoPC9saT4KKyAgICAgKiA8bGk+YW4gZXZlbiBoZWlnaHQ8L2xpPgorICAgICAqIDxsaT5hIGhvcml6b250YWwgc3RyaWRlIG11bHRpcGxlIG9mIDE2IHBpeGVsczwvbGk+CisgICAgICogPC91bD4KKyAgICAgKiA8L3A+CisgICAgICoKKyAgICAgKiA8cHJlPiBzaXplID0gc3RyaWRlICogaGVpZ2h0IDwvcHJlPgorICAgICAqCisgICAgICogPHA+Rm9yIGV4YW1wbGUsIHRoZSB7QGxpbmsgQUltYWdlfSBvYmplY3QgY2FuIHByb3ZpZGUgZGF0YQorICAgICAqIGluIHRoaXMgZm9ybWF0IGZyb20gYSB7QGxpbmsgQUNhbWVyYURldmljZX0gKGlmIHN1cHBvcnRlZCkgdGhyb3VnaCBhCisgICAgICoge0BsaW5rIEFJbWFnZVJlYWRlcn0gb2JqZWN0LiBUaGUgbnVtYmVyIG9mIHBsYW5lcyByZXR1cm5lZCBieQorICAgICAqIHtAbGluayBBSW1hZ2VfZ2V0TnVtYmVyT2ZQbGFuZXN9IHdpbGwgYWx3YXlzIGJlIDEuIFRoZSBwaXhlbCBzdHJpZGUgcmV0dXJuZWQgYnkKKyAgICAgKiB7QGxpbmsgQUltYWdlX2dldFBsYW5lUGl4ZWxTdHJpZGV9IHdpbGwgYWx3YXlzIGJlIDEsIGFuZCB0aGUKKyAgICAgKiB7QGxpbmsgQUltYWdlX2dldFBsYW5lUm93U3RyaWRlfSBkZXNjcmliZWQgdGhlIHZlcnRpY2FsIG5laWdoYm9yaW5nIHBpeGVsIGRpc3RhbmNlCisgICAgICogKGluIGJ5dGVzKSBiZXR3ZWVuIGFkamFjZW50IHJvd3MuPC9wPgorICAgICAqCisgICAgICovCisgICAgQUlNQUdFX0ZPUk1BVF9ZOCA9IDB4MjAyMDM4NTkKIH07CiAKIC8qKgpkaWZmIC0tZ2l0IGEvbWVkaWEvbmRrL2luY2x1ZGUvbWVkaWEvTmRrSW1hZ2VSZWFkZXIuaCBiL21lZGlhL25kay9pbmNsdWRlL21lZGlhL05ka0ltYWdlUmVhZGVyLmgKaW5kZXggNjhkZTE3Ni4uZTVkODYzYyAxMDA2NDQKLS0tIGEvbWVkaWEvbmRrL2luY2x1ZGUvbWVkaWEvTmRrSW1hZ2VSZWFkZXIuaAorKysgYi9tZWRpYS9uZGsvaW5jbHVkZS9tZWRpYS9OZGtJbWFnZVJlYWRlci5oCkBAIC0zNyw2ICszNyw5IEBACiAjZGVmaW5lIF9OREtfSU1BR0VfUkVBREVSX0gKIAogI2luY2x1ZGUgPHN5cy9jZGVmcy5oPgorI2lmZGVmIF9fQU5EUk9JRF9WTkRLX18KKyNpbmNsdWRlIDxjdXRpbHMvbmF0aXZlX2hhbmRsZS5oPgorI2VuZGlmCiAKICNpbmNsdWRlIDxhbmRyb2lkL25hdGl2ZV93aW5kb3cuaD4KICNpbmNsdWRlICJOZGtNZWRpYUVycm9yLmgiCkBAIC00NjEsNiArNDY0LDIzIEBACiBtZWRpYV9zdGF0dXNfdCBBSW1hZ2VSZWFkZXJfc2V0QnVmZmVyUmVtb3ZlZExpc3RlbmVyKAogICAgICAgICBBSW1hZ2VSZWFkZXIqIHJlYWRlciwgQUltYWdlUmVhZGVyX0J1ZmZlclJlbW92ZWRMaXN0ZW5lciogbGlzdGVuZXIpIF9fSU5UUk9EVUNFRF9JTigyNik7CiAKKyNpZmRlZiBfX0FORFJPSURfVk5ES19fCisvKgorICogR2V0IHRoZSBuYXRpdmVfaGFuZGxlX3QgY29ycmVzcG9uZGluZyB0byB0aGUgQU5hdGl2ZVdpbmRvdyBvd25lZCBieSB0aGUKKyAqIEFJbWFnZVJlYWRlciBwcm92aWRlZC4KKyAqCisgKiBAcGFyYW0gcmVhZGVyIFRoZSBpbWFnZSByZWFkZXIgb2YgaW50ZXJlc3QuCisgKiBAcGFyYW0gaGFuZGxlIFRoZSBvdXRwdXQgbmF0aXZlX2hhbmRsZV90LiBUaGlzIG5hdGl2ZSBoYW5kbGUgaXMgb3duZWQgYnkKKyAqICAgICAgICAgICAgICAgdGhpcyBpbWFnZSByZWFkZXIuCisgKgorICogQHJldHVybiBBTUVESUFfT0sgaWYgdGhlIG1ldGhvZCBjYWxsIHN1Y2NlZWRzLgorICogICAgICAgICBBTUVESUFfRVJST1JfSU5WQUxJRF9QQVJBTUVURVIgaWYgcmVhZGVyIG9yIGhhbmRsZSBhcmUgTlVMTC4KKyAqICAgICAgICAgQU1FRElBX0VSUk9SX1VOS05PV04gaWYgc29tZSBvdGhlciBlcnJvciBpcyBlbmNvdW50ZXJlZC4KKyAqLworbWVkaWFfc3RhdHVzX3QgQUltYWdlUmVhZGVyX2dldFdpbmRvd05hdGl2ZUhhbmRsZSgKKyAgICBBSW1hZ2VSZWFkZXIgKnJlYWRlciwgLyogb3V0ICovbmF0aXZlX2hhbmRsZV90ICoqaGFuZGxlKTsKKyNlbmRpZgorCiAjZW5kaWYgLyogX19BTkRST0lEX0FQSV9fID49IDI2ICovCiAKIF9fRU5EX0RFQ0xTCmRpZmYgLS1naXQgYS9tZWRpYS9uZGsvaW5jbHVkZS9tZWRpYS9OZGtNZWRpYURhdGFTb3VyY2UuaCBiL21lZGlhL25kay9pbmNsdWRlL21lZGlhL05ka01lZGlhRGF0YVNvdXJjZS5oCmluZGV4IGVhNWJhMGMuLjE2YjFlYjMgMTAwNjQ0Ci0tLSBhL21lZGlhL25kay9pbmNsdWRlL21lZGlhL05ka01lZGlhRGF0YVNvdXJjZS5oCisrKyBiL21lZGlhL25kay9pbmNsdWRlL21lZGlhL05ka01lZGlhRGF0YVNvdXJjZS5oCkBAIC00MywxNCArNDMsOSBAQAogLyoKICAqIEFNZWRpYURhdGFTb3VyY2UncyBjYWxsYmFja3Mgd2lsbCBiZSBpbnZva2VkIG9uIGFuIGltcGxlbWVudGF0aW9uLWRlZmluZWQgdGhyZWFkCiAgKiBvciB0aHJlYWQgcG9vbC4gTm8gZ3VhcmFudGVlcyBhcmUgcHJvdmlkZWQgYWJvdXQgd2hpY2ggdGhyZWFkKHMpIHdpbGwgYmUgdXNlZCBmb3IKLSAqIGNhbGxiYWNrcy4gSG93ZXZlciwgaXQgaXMgZ3VhcmFudGVlZCB0aGF0IEFNZWRpYURhdGFTb3VyY2UncyBjYWxsYmFja3Mgd2lsbCBvbmx5Ci0gKiBldmVyIGJlIGludm9rZWQgYnkgYSBzaW5nbGUgdGhyZWFkIGF0IGEgdGltZS4KLSAqCi0gKiBUaGVyZSB3aWxsIGJlIGEgdGhyZWFkIHN5bmNocm9uaXphdGlvbiBwb2ludCBiZXR3ZWVuIGVhY2ggY2FsbCB0byBlbnN1cmUgdGhhdAotICogbW9kaWZpY2F0aW9ucyB0byB0aGUgc3RhdGUgb2YgeW91ciBBTWVkaWFEYXRhU291cmNlIGFyZSB2aXNpYmxlIHRvIGZ1dHVyZQotICogY2FsbHMuIFRoaXMgbWVhbnMgeW91IGRvbid0IG5lZWQgdG8gZG8geW91ciBvd24gc3luY2hyb25pemF0aW9uIHVubGVzcyB5b3UncmUKLSAqIG1vZGlmeWluZyB0aGUgQU1lZGlhRGF0YVNvdXJjZSBmcm9tIGFub3RoZXIgdGhyZWFkIHdoaWxlIGl0J3MgYmVpbmcgdXNlZCBieSB0aGUKLSAqIGZyYW1ld29yay4KKyAqIGNhbGxiYWNrcy4gRm9yIGV4YW1wbGUsIHxjbG9zZXwgY2FuIGJlIGludm9rZWQgZnJvbSBhIGRpZmZlcmVudCB0aHJlYWQgdGhhbiB0aGUKKyAqIHRocmVhZCBpbnZva2luZyB8cmVhZEF0fC4gQXMgc3VjaCwgdGhlIEltcGxlbWVudGF0aW9ucyBvZiBBTWVkaWFEYXRhU291cmNlIGNhbGxiYWNrcworICogbXVzdCBiZSB0aHJlYWRzYWZlLgogICovCiAKIC8qKgpAQCAtNzQsOSArNjksMTkgQEAKIHR5cGVkZWYgc3NpemVfdCAoKkFNZWRpYURhdGFTb3VyY2VHZXRTaXplKSh2b2lkICp1c2VyZGF0YSk7CiAKIC8qKgotICogQ2FsbGVkIHRvIGNsb3NlIHRoZSBkYXRhIHNvdXJjZSBhbmQgcmVsZWFzZSBhc3NvY2lhdGVkIHJlc291cmNlcy4KLSAqIFRoZSBOREsgbWVkaWEgZnJhbWV3b3JrIGd1YXJhbnRlZXMgdGhhdCBhZnRlciB8Y2xvc2V8IGlzIGNhbGxlZAotICogbm8gZnV0dXJlIGNhbGxiYWNrcyB3aWxsIGJlIGludm9rZWQgb24gdGhlIGRhdGEgc291cmNlLgorICogQ2FsbGVkIHRvIGNsb3NlIHRoZSBkYXRhIHNvdXJjZSwgdW5ibG9jayByZWFkcywgYW5kIHJlbGVhc2UgYXNzb2NpYXRlZAorICogcmVzb3VyY2VzLgorICoKKyAqIFRoZSBOREsgbWVkaWEgZnJhbWV3b3JrIGd1YXJhbnRlZXMgdGhhdCBhZnRlciB0aGUgZmlyc3QgfGNsb3NlfCBpcworICogY2FsbGVkLCBubyBmdXR1cmUgY2FsbGJhY2tzIHdpbGwgYmUgaW52b2tlZCBvbiB0aGUgZGF0YSBzb3VyY2UgZXhjZXB0CisgKiBmb3IgfGNsb3NlfCBpdHNlbGYuCisgKgorICogQ2xvc2luZyBhIGRhdGEgc291cmNlIGFsbG93cyByZWFkQXQgY2FsbHMgdGhhdCB3ZXJlIGJsb2NrZWQgd2FpdGluZworICogZm9yIEkvTyBkYXRhIHRvIHJldHVybiBwcm9tcHRseS4KKyAqCisgKiBXaGVuIHVzaW5nIEFNZWRpYURhdGFTb3VyY2UgYXMgaW5wdXQgdG8gQU1lZGlhRXh0cmFjdG9yLCBjbG9zaW5nCisgKiBoYXMgdGhlIGVmZmVjdCBvZiB1bmJsb2NraW5nIHNsb3cgcmVhZHMgaW5zaWRlIG9mIHNldERhdGFTb3VyY2UKKyAqIGFuZCByZWFkU2FtcGxlRGF0YS4KICAqLwogdHlwZWRlZiB2b2lkICgqQU1lZGlhRGF0YVNvdXJjZUNsb3NlKSh2b2lkICp1c2VyZGF0YSk7CiAKQEAgLTg2LDYgKzkxLDM4IEBACiAgKi8KIEFNZWRpYURhdGFTb3VyY2UqIEFNZWRpYURhdGFTb3VyY2VfbmV3KCkgX19JTlRST0RVQ0VEX0lOKDI4KTsKIAorI2lmIF9fQU5EUk9JRF9BUElfXyA+PSAyOQorCisvKioKKyAqIENhbGxlZCB0byBnZXQgYW4gZXN0aW1hdGUgb2YgdGhlIG51bWJlciBvZiBieXRlcyB0aGF0IGNhbiBiZSByZWFkIGZyb20gdGhpcyBkYXRhIHNvdXJjZQorICogc3RhcnRpbmcgYXQgfG9mZnNldHwgd2l0aG91dCBibG9ja2luZyBmb3IgSS9PLgorICoKKyAqIFJldHVybiAtMSB3aGVuIHN1Y2ggYW4gZXN0aW1hdGUgaXMgbm90IHBvc3NpYmxlLgorICovCit0eXBlZGVmIHNzaXplX3QgKCpBTWVkaWFEYXRhU291cmNlR2V0QXZhaWxhYmxlU2l6ZSkodm9pZCAqdXNlcmRhdGEsIG9mZjY0X3Qgb2Zmc2V0KTsKKworLyoqCisgKiBDcmVhdGUgbmV3IG1lZGlhIGRhdGEgc291cmNlLiBSZXR1cm5zIE5VTEwgaWYgbWVtb3J5IGFsbG9jYXRpb24KKyAqIGZvciB0aGUgbmV3IGRhdGEgc291cmNlIG9iamVjdCBmYWlscy4KKyAqCisgKiBTZXQgdGhlIHx1cml8IGZyb20gd2hpY2ggdGhlIGRhdGEgc291cmNlIHdpbGwgcmVhZCwKKyAqIHBsdXMgYWRkaXRpb25hbCBodHRwIGhlYWRlcnMgd2hlbiBpbml0aWF0aW5nIHRoZSByZXF1ZXN0LgorICoKKyAqIEhlYWRlcnMgd2lsbCBjb250YWluIGNvcnJlc3BvbmRpbmcgaXRlbXMgZnJvbSB8a2V5X3ZhbHVlc3wKKyAqIGluIHRoZSBmb2xsb3dpbmcgZmFzaGlvbjoKKyAqCisgKiBrZXlfdmFsdWVzWzBdOmtleV92YWx1ZXNbMV0KKyAqIGtleV92YWx1ZXNbMl06a2V5X3ZhbHVlc1szXQorICogLi4uCisgKiBrZXlfdmFsdWVzWyhudW1oZWFkZXJzIC0gMSkgKiAyXTprZXlfdmFsdWVzWyhudW1oZWFkZXJzIC0gMSkgKiAyICsgMV0KKyAqCisgKi8KK0FNZWRpYURhdGFTb3VyY2UqIEFNZWRpYURhdGFTb3VyY2VfbmV3VXJpKGNvbnN0IGNoYXIgKnVyaSwKKyAgICAgICAgaW50IG51bWhlYWRlcnMsCisgICAgICAgIGNvbnN0IGNoYXIgKiBjb25zdCAqa2V5X3ZhbHVlcykgX19JTlRST0RVQ0VEX0lOKDI5KTsKKworI2VuZGlmICAvKl9fQU5EUk9JRF9BUElfXyA+PSAyOSAqLworCiAvKioKICAqIERlbGV0ZSBhIHByZXZpb3VzbHkgY3JlYXRlZCBtZWRpYSBkYXRhIHNvdXJjZS4KICAqLwpAQCAtMTM3LDYgKzE3NCwzMCBAQAogCiAjZW5kaWYgIC8qX19BTkRST0lEX0FQSV9fID49IDI4ICovCiAKKyNpZiBfX0FORFJPSURfQVBJX18gPj0gMjkKKworLyoqCisgKiBDbG9zZSB0aGUgZGF0YSBzb3VyY2UsIHVuYmxvY2sgcmVhZHMsIGFuZCByZWxlYXNlIGFzc29jaWF0ZWQgcmVzb3VyY2VzLgorICoKKyAqIFBsZWFzZSByZWZlciB0byB0aGUgZGVmaW5pdGlvbiBvZiBBTWVkaWFEYXRhU291cmNlQ2xvc2UgZm9yCisgKiBhZGRpdGlvbmFsIGRldGFpbHMuCisgKi8KK3ZvaWQgQU1lZGlhRGF0YVNvdXJjZV9jbG9zZShBTWVkaWFEYXRhU291cmNlKikgX19JTlRST0RVQ0VEX0lOKDI5KTsKKworLyoqCisgKiBTZXQgYSBjdXN0b20gY2FsbGJhY2sgZm9yIHN1cHBseWluZyB0aGUgZXN0aW1hdGVkIG51bWJlciBvZiBieXRlcworICogdGhhdCBjYW4gYmUgcmVhZCBmcm9tIHRoaXMgZGF0YSBzb3VyY2Ugc3RhcnRpbmcgYXQgYW4gb2Zmc2V0IHdpdGhvdXQKKyAqIGJsb2NraW5nIGZvciBJL08uCisgKgorICogUGxlYXNlIHJlZmVyIHRvIHRoZSBkZWZpbml0aW9uIG9mIEFNZWRpYURhdGFTb3VyY2VHZXRBdmFpbGFibGVTaXplCisgKiBmb3IgYWRkaXRpb25hbCBkZXRhaWxzLgorICovCit2b2lkIEFNZWRpYURhdGFTb3VyY2Vfc2V0R2V0QXZhaWxhYmxlU2l6ZSgKKyAgICAgICAgQU1lZGlhRGF0YVNvdXJjZSosCisgICAgICAgIEFNZWRpYURhdGFTb3VyY2VHZXRBdmFpbGFibGVTaXplKSBfX0lOVFJPRFVDRURfSU4oMjkpOworCisjZW5kaWYgIC8qX19BTkRST0lEX0FQSV9fID49IDI5ICovCisKIF9fRU5EX0RFQ0xTCiAKICNlbmRpZiAvLyBfTkRLX01FRElBX0RBVEFTT1VSQ0VfSApkaWZmIC0tZ2l0IGEvbWVkaWEvbmRrL2luY2x1ZGUvbWVkaWEvTmRrTWVkaWFEcm0uaCBiL21lZGlhL25kay9pbmNsdWRlL21lZGlhL05ka01lZGlhRHJtLmgKaW5kZXggMDIwOTY4MS4uMmU0MzhkOSAxMDA2NDQKLS0tIGEvbWVkaWEvbmRrL2luY2x1ZGUvbWVkaWEvTmRrTWVkaWFEcm0uaAorKysgYi9tZWRpYS9uZGsvaW5jbHVkZS9tZWRpYS9OZGtNZWRpYURybS5oCkBAIC01Niw2ICs1Niw3IEBACiB0eXBlZGVmIEFNZWRpYURybUJ5dGVBcnJheSBBTWVkaWFEcm1TY29wZTsKIHR5cGVkZWYgQU1lZGlhRHJtQnl0ZUFycmF5IEFNZWRpYURybUtleVNldElkOwogdHlwZWRlZiBBTWVkaWFEcm1CeXRlQXJyYXkgQU1lZGlhRHJtU2VjdXJlU3RvcDsKK3R5cGVkZWYgQU1lZGlhRHJtQnl0ZUFycmF5IEFNZWRpYURybUtleUlkOwogCiB0eXBlZGVmIGVudW0gQU1lZGlhRHJtRXZlbnRUeXBlIHsKICAgICAvKioKQEAgLTgxLDEyICs4Miw4OSBAQAogICAgICAqIFRoaXMgZXZlbnQgbWF5IGluZGljYXRlIHNvbWUgc3BlY2lmaWMgdmVuZG9yLWRlZmluZWQgY29uZGl0aW9uLCBzZWUgeW91cgogICAgICAqIERSTSBwcm92aWRlciBkb2N1bWVudGF0aW9uIGZvciBkZXRhaWxzCiAgICAgICovCi0gICAgRVZFTlRfVkVORE9SX0RFRklORUQgPSA0CisgICAgRVZFTlRfVkVORE9SX0RFRklORUQgPSA0LAorCisgICAgLyoqCisgICAgICogVGhpcyBldmVudCBpbmRpY2F0ZXMgdGhhdCBhIHNlc3Npb24gb3BlbmVkIGJ5IHRoZSBhcHAgaGFzIGJlZW4gcmVjbGFpbWVkCisgICAgICogYnkgdGhlIHJlc291cmNlIG1hbmFnZXIuCisgICAgICovCisgICAgRVZFTlRfU0VTU0lPTl9SRUNMQUlNRUQgPSA1LAogfSBBTWVkaWFEcm1FdmVudFR5cGU7CiAKK3R5cGVkZWYgZW51bSBBTWVkaWFEcm1LZXlUeXBlIHsKKyAgICAvKioKKyAgICAgKiBUaGlzIGtleSByZXF1ZXN0IHR5cGUgc3BlY2lmaWVzIHRoYXQgdGhlIGtleXMgd2lsbCBiZSBmb3Igb25saW5lIHVzZSwgdGhleSB3aWxsCisgICAgICogbm90IGJlIHNhdmVkIHRvIHRoZSBkZXZpY2UgZm9yIHN1YnNlcXVlbnQgdXNlIHdoZW4gdGhlIGRldmljZSBpcyBub3QgY29ubmVjdGVkCisgICAgICogdG8gYSBuZXR3b3JrLgorICAgICAqLworICAgIEtFWV9UWVBFX1NUUkVBTUlORyA9IDEsCisKKyAgICAvKioKKyAgICAgKiBUaGlzIGtleSByZXF1ZXN0IHR5cGUgc3BlY2lmaWVzIHRoYXQgdGhlIGtleXMgd2lsbCBiZSBmb3Igb2ZmbGluZSB1c2UsIHRoZXkKKyAgICAgKiB3aWxsIGJlIHNhdmVkIHRvIHRoZSBkZXZpY2UgZm9yIHVzZSB3aGVuIHRoZSBkZXZpY2UgaXMgbm90IGNvbm5lY3RlZCB0byBhIG5ldHdvcmsuCisgICAgICovCisgICAgS0VZX1RZUEVfT0ZGTElORSA9IDIsCisKKyAgICAvKioKKyAgICAgKiBUaGlzIGtleSByZXF1ZXN0IHR5cGUgc3BlY2lmaWVzIHRoYXQgcHJldmlvdXNseSBzYXZlZCBvZmZsaW5lIGtleXMgc2hvdWxkIGJlIHJlbGVhc2VkLgorICAgICAqLworICAgIEtFWV9UWVBFX1JFTEVBU0UgPSAzCit9IEFNZWRpYURybUtleVR5cGU7CisKKy8qKgorICogIERhdGEgdHlwZSBjb250YWluaW5nIHtrZXksIHZhbHVlfSBwYWlyCisgKi8KK3R5cGVkZWYgc3RydWN0IEFNZWRpYURybUtleVZhbHVlUGFpciB7CisgICAgY29uc3QgY2hhciAqbUtleTsKKyAgICBjb25zdCBjaGFyICptVmFsdWU7Cit9IEFNZWRpYURybUtleVZhbHVlOworCit0eXBlZGVmIGVudW0gQU1lZGlhS2V5U3RhdHVzVHlwZSB7CisgICAgLyoqCisgICAgICogVGhlIGtleSBpcyBjdXJyZW50bHkgdXNhYmxlIHRvIGRlY3J5cHQgbWVkaWEgZGF0YS4KKyAgICAgKi8KKyAgICBLRVlfU1RBVFVTX1RZUEVfVVNBQkxFLAorCisgICAgLyoqCisgICAgICogVGhlIGtleSBpcyBubyBsb25nZXIgdXNhYmxlIHRvIGRlY3J5cHQgbWVkaWEgZGF0YSBiZWNhdXNlIGl0cyBleHBpcmF0aW9uCisgICAgICogdGltZSBoYXMgcGFzc2VkLgorICAgICAqLworICAgIEtFWV9TVEFUVVNfVFlQRV9FWFBJUkVELAorCisgICAgLyoqCisgICAgICogVGhlIGtleSBpcyBub3QgY3VycmVudGx5IHVzYWJsZSB0byBkZWNyeXB0IG1lZGlhIGRhdGEgYmVjYXVzZSBpdHMgb3V0cHV0CisgICAgICogcmVxdWlyZW1lbnRzIGNhbm5vdCBjdXJyZW50bHkgYmUgbWV0LgorICAgICAqLworICAgIEtFWV9TVEFUVVNfVFlQRV9PVVRQVVROT1RBTExPV0VELAorCisgICAgLyoqCisgICAgICogVGhlIHN0YXR1cyBvZiB0aGUga2V5IGlzIG5vdCB5ZXQga25vd24gYW5kIGlzIGJlaW5nIGRldGVybWluZWQuCisgICAgICovCisgICAgS0VZX1NUQVRVU19UWVBFX1NUQVRVU1BFTkRJTkcsCisKKyAgICAvKioKKyAgICAgKiBUaGUga2V5IGlzIG5vdCBjdXJyZW50bHkgdXNhYmxlIHRvIGRlY3J5cHQgbWVkaWEgZGF0YSBiZWNhdXNlIG9mIGFuCisgICAgICogaW50ZXJuYWwgZXJyb3IgaW4gcHJvY2Vzc2luZyB1bnJlbGF0ZWQgdG8gaW5wdXQgcGFyYW1ldGVycy4KKyAgICAgKi8KKyAgICBLRVlfU1RBVFVTX1RZUEVfSU5URVJOQUxFUlJPUiwKKworfSBBTWVkaWFEcm1LZXlTdGF0dXNUeXBlOworCit0eXBlZGVmIHN0cnVjdCBBTWVkaWFEcm1LZXlTdGF0dXMgeworICAgIEFNZWRpYURybUtleUlkIGtleUlkOworICAgIEFNZWRpYURybUtleVN0YXR1c1R5cGUga2V5VHlwZTsKK30gQU1lZGlhRHJtS2V5U3RhdHVzOworCiB0eXBlZGVmIHZvaWQgKCpBTWVkaWFEcm1FdmVudExpc3RlbmVyKShBTWVkaWFEcm0gKiwgY29uc3QgQU1lZGlhRHJtU2Vzc2lvbklkICpzZXNzaW9uSWQsCiAgICAgICAgIEFNZWRpYURybUV2ZW50VHlwZSBldmVudFR5cGUsIGludCBleHRyYSwgY29uc3QgdWludDhfdCAqZGF0YSwgc2l6ZV90IGRhdGFTaXplKTsKIAordHlwZWRlZiB2b2lkICgqQU1lZGlhRHJtRXhwaXJhdGlvblVwZGF0ZUxpc3RlbmVyKShBTWVkaWFEcm0gKiwKKyAgICAgICAgY29uc3QgQU1lZGlhRHJtU2Vzc2lvbklkICpzZXNzaW9uSWQsIGludDY0X3QgZXhwaXJ5VGltZUluTVMpOworCit0eXBlZGVmIHZvaWQgKCpBTWVkaWFEcm1LZXlzQ2hhbmdlTGlzdGVuZXIpKEFNZWRpYURybSAqLAorICAgICAgICBjb25zdCBBTWVkaWFEcm1TZXNzaW9uSWQgKnNlc3Npb25JZCwgY29uc3QgQU1lZGlhRHJtS2V5U3RhdHVzICprZXlTdGF0dXMsCisgICAgICAgIHNpemVfdCBudW1LZXlzLCBib29sIGhhc05ld1VzYWJsZUtleSk7CisKICNpZiBfX0FORFJPSURfQVBJX18gPj0gMjEKIAogLyoqCkBAIC0xMjAsNiArMTk4LDIyIEBACiAgICAgICAgIEFNZWRpYURybUV2ZW50TGlzdGVuZXIgbGlzdGVuZXIpIF9fSU5UUk9EVUNFRF9JTigyMSk7CiAKIC8qKgorICogUmVnaXN0ZXIgYSBjYWxsYmFjayB0byBiZSBpbnZva2VkIHdoZW4gYW4gZXhwaXJhdGlvbiB1cGRhdGUgZXZlbnQgb2NjdXJzCisgKgorICogbGlzdGVuZXIgaXMgdGhlIGNhbGxiYWNrIHRoYXQgd2lsbCBiZSBpbnZva2VkIG9uIGV2ZW50CisgKi8KK21lZGlhX3N0YXR1c190IEFNZWRpYURybV9zZXRPbkV4cGlyYXRpb25VcGRhdGVMaXN0ZW5lcihBTWVkaWFEcm0gKiwKKyAgICAgICAgQU1lZGlhRHJtRXhwaXJhdGlvblVwZGF0ZUxpc3RlbmVyIGxpc3RlbmVyKSBfX0lOVFJPRFVDRURfSU4oMjkpOworCisvKioKKyAqIFJlZ2lzdGVyIGEgY2FsbGJhY2sgdG8gYmUgaW52b2tlZCB3aGVuIGEga2V5IHN0YXR1cyBjaGFuZ2UgZXZlbnQgb2NjdXJzCisgKgorICogbGlzdGVuZXIgaXMgdGhlIGNhbGxiYWNrIHRoYXQgd2lsbCBiZSBpbnZva2VkIG9uIGV2ZW50CisgKi8KK21lZGlhX3N0YXR1c190IEFNZWRpYURybV9zZXRPbktleXNDaGFuZ2VMaXN0ZW5lcihBTWVkaWFEcm0gKiwKKyAgICAgICAgQU1lZGlhRHJtS2V5c0NoYW5nZUxpc3RlbmVyIGxpc3RlbmVyKSBfX0lOVFJPRFVDRURfSU4oMjkpOworCisvKioKICAqIE9wZW4gYSBuZXcgc2Vzc2lvbiB3aXRoIHRoZSBNZWRpYURybSBvYmplY3QuICBBIHNlc3Npb24gSUQgaXMgcmV0dXJuZWQuCiAgKgogICogcmV0dXJucyBNRURJQURSTV9OT1RfUFJPVklTSU9ORURfRVJST1IgaWYgcHJvdmlzaW9uaW5nIGlzIG5lZWRlZApAQCAtMTM1LDM0ICsyMjksNiBAQAogbWVkaWFfc3RhdHVzX3QgQU1lZGlhRHJtX2Nsb3NlU2Vzc2lvbihBTWVkaWFEcm0gKiwKICAgICAgICAgY29uc3QgQU1lZGlhRHJtU2Vzc2lvbklkICpzZXNzaW9uSWQpIF9fSU5UUk9EVUNFRF9JTigyMSk7CiAKLXR5cGVkZWYgZW51bSBBTWVkaWFEcm1LZXlUeXBlIHsKLSAgICAvKioKLSAgICAgKiBUaGlzIGtleSByZXF1ZXN0IHR5cGUgc3BlY2llcyB0aGF0IHRoZSBrZXlzIHdpbGwgYmUgZm9yIG9ubGluZSB1c2UsIHRoZXkgd2lsbAotICAgICAqIG5vdCBiZSBzYXZlZCB0byB0aGUgZGV2aWNlIGZvciBzdWJzZXF1ZW50IHVzZSB3aGVuIHRoZSBkZXZpY2UgaXMgbm90IGNvbm5lY3RlZAotICAgICAqIHRvIGEgbmV0d29yay4KLSAgICAgKi8KLSAgICBLRVlfVFlQRV9TVFJFQU1JTkcgPSAxLAotCi0gICAgLyoqCi0gICAgICogVGhpcyBrZXkgcmVxdWVzdCB0eXBlIHNwZWNpZmllcyB0aGF0IHRoZSBrZXlzIHdpbGwgYmUgZm9yIG9mZmxpbmUgdXNlLCB0aGV5Ci0gICAgICogd2lsbCBiZSBzYXZlZCB0byB0aGUgZGV2aWNlIGZvciB1c2Ugd2hlbiB0aGUgZGV2aWNlIGlzIG5vdCBjb25uZWN0ZWQgdG8gYSBuZXR3b3JrLgotICAgICAqLwotICAgIEtFWV9UWVBFX09GRkxJTkUgPSAyLAotCi0gICAgLyoqCi0gICAgICogVGhpcyBrZXkgcmVxdWVzdCB0eXBlIHNwZWNpZmllcyB0aGF0IHByZXZpb3VzbHkgc2F2ZWQgb2ZmbGluZSBrZXlzIHNob3VsZCBiZSByZWxlYXNlZC4KLSAgICAgKi8KLSAgICBLRVlfVFlQRV9SRUxFQVNFID0gMwotfSBBTWVkaWFEcm1LZXlUeXBlOwotCi0vKioKLSAqICBEYXRhIHR5cGUgY29udGFpbmluZyB7a2V5LCB2YWx1ZX0gcGFpcgotICovCi10eXBlZGVmIHN0cnVjdCBBTWVkaWFEcm1LZXlWYWx1ZVBhaXIgewotICAgIGNvbnN0IGNoYXIgKm1LZXk7Ci0gICAgY29uc3QgY2hhciAqbVZhbHVlOwotfSBBTWVkaWFEcm1LZXlWYWx1ZTsKLQogLyoqCiAgKiBBIGtleSByZXF1ZXN0L3Jlc3BvbnNlIGV4Y2hhbmdlIG9jY3VycyBiZXR3ZWVuIHRoZSBhcHAgYW5kIGEgbGljZW5zZSBzZXJ2ZXIKICAqIHRvIG9idGFpbiBvciByZWxlYXNlIGtleXMgdXNlZCB0byBkZWNyeXB0IGVuY3J5cHRlZCBjb250ZW50LgpkaWZmIC0tZ2l0IGEvbWVkaWEvbmRrL2luY2x1ZGUvbWVkaWEvTmRrTWVkaWFFcnJvci5oIGIvbWVkaWEvbmRrL2luY2x1ZGUvbWVkaWEvTmRrTWVkaWFFcnJvci5oCmluZGV4IDc1ZjQ2MDUuLjJiZTFkNmUgMTAwNjQ0Ci0tLSBhL21lZGlhL25kay9pbmNsdWRlL21lZGlhL05ka01lZGlhRXJyb3IuaAorKysgYi9tZWRpYS9uZGsvaW5jbHVkZS9tZWRpYS9OZGtNZWRpYUVycm9yLmgKQEAgLTYzLDYgKzYzLDcgQEAKICAgICBBTUVESUFfRVJST1JfSU5WQUxJRF9PUEVSQVRJT04gICAgID0gQU1FRElBX0VSUk9SX0JBU0UgLSA1LAogICAgIEFNRURJQV9FUlJPUl9FTkRfT0ZfU1RSRUFNICAgICAgICAgPSBBTUVESUFfRVJST1JfQkFTRSAtIDYsCiAgICAgQU1FRElBX0VSUk9SX0lPICAgICAgICAgICAgICAgICAgICA9IEFNRURJQV9FUlJPUl9CQVNFIC0gNywKKyAgICBBTUVESUFfRVJST1JfV09VTERfQkxPQ0sgICAgICAgICAgID0gQU1FRElBX0VSUk9SX0JBU0UgLSA4LAogCiAgICAgQU1FRElBX0RSTV9FUlJPUl9CQVNFICAgICAgICAgICAgICA9IC0yMDAwMCwKICAgICBBTUVESUFfRFJNX05PVF9QUk9WSVNJT05FRCAgICAgICAgID0gQU1FRElBX0RSTV9FUlJPUl9CQVNFIC0gMSwKZGlmZiAtLWdpdCBhL21lZGlhL25kay9pbmNsdWRlL21lZGlhL05ka01lZGlhRXh0cmFjdG9yLmggYi9tZWRpYS9uZGsvaW5jbHVkZS9tZWRpYS9OZGtNZWRpYUV4dHJhY3Rvci5oCmluZGV4IDZhMTc5NmYuLmUzZDlmZTYgMTAwNjQ0Ci0tLSBhL21lZGlhL25kay9pbmNsdWRlL21lZGlhL05ka01lZGlhRXh0cmFjdG9yLmgKKysrIGIvbWVkaWEvbmRrL2luY2x1ZGUvbWVkaWEvTmRrTWVkaWFFeHRyYWN0b3IuaApAQCAtNzIsNyArNzIsNiBAQAogICovCiBtZWRpYV9zdGF0dXNfdCBBTWVkaWFFeHRyYWN0b3Jfc2V0RGF0YVNvdXJjZShBTWVkaWFFeHRyYWN0b3IqLAogICAgICAgICBjb25zdCBjaGFyICpsb2NhdGlvbikgX19JTlRST0RVQ0VEX0lOKDIxKTsKLSAgICAgICAgLy8gVE9ETyBzdXBwb3J0IGhlYWRlcnMKIAogI2lmIF9fQU5EUk9JRF9BUElfXyA+PSAyOAogCmRpZmYgLS1naXQgYS9tZWRpYS9uZGsvaW5jbHVkZS9tZWRpYS9OZGtNZWRpYUZvcm1hdC5oIGIvbWVkaWEvbmRrL2luY2x1ZGUvbWVkaWEvTmRrTWVkaWFGb3JtYXQuaAppbmRleCA1Zjc4MDRkLi42NThjYmFjIDEwMDY0NAotLS0gYS9tZWRpYS9uZGsvaW5jbHVkZS9tZWRpYS9OZGtNZWRpYUZvcm1hdC5oCisrKyBiL21lZGlhL25kay9pbmNsdWRlL21lZGlhL05ka01lZGlhRm9ybWF0LmgKQEAgLTgzLDEzICs4Myw5IEBACiAvKioKICAqIFRoZSBwcm92aWRlZCBkYXRhIGlzIGNvcGllZCBpbnRvIHRoZSBmb3JtYXQuCiAgKi8KLXZvaWQgQU1lZGlhRm9ybWF0X3NldEJ1ZmZlcihBTWVkaWFGb3JtYXQqLCBjb25zdCBjaGFyKiBuYW1lLCB2b2lkKiBkYXRhLCBzaXplX3Qgc2l6ZSkgX19JTlRST0RVQ0VEX0lOKDIxKTsKK3ZvaWQgQU1lZGlhRm9ybWF0X3NldEJ1ZmZlcihBTWVkaWFGb3JtYXQqLCBjb25zdCBjaGFyKiBuYW1lLCBjb25zdCB2b2lkKiBkYXRhLCBzaXplX3Qgc2l6ZSkgX19JTlRST0RVQ0VEX0lOKDIxKTsKIAogCi0KLS8qKgotICogWFhYIHNob3VsZCB0aGVzZSBiZSBpbnRzL2VudW1zIHRoYXQgd2UgbG9vayB1cCBpbiBhIHRhYmxlIGFzIG5lZWRlZD8KLSAqLwogZXh0ZXJuIGNvbnN0IGNoYXIqIEFNRURJQUZPUk1BVF9LRVlfQUFDX0RSQ19BVFRFTlVBVElPTl9GQUNUT1IgX19JTlRST0RVQ0VEX0lOKDI4KTsKIGV4dGVybiBjb25zdCBjaGFyKiBBTUVESUFGT1JNQVRfS0VZX0FBQ19EUkNfQk9PU1RfRkFDVE9SIF9fSU5UUk9EVUNFRF9JTigyOCk7CiBleHRlcm4gY29uc3QgY2hhciogQU1FRElBRk9STUFUX0tFWV9BQUNfRFJDX0hFQVZZX0NPTVBSRVNTSU9OIF9fSU5UUk9EVUNFRF9JTigyOCk7CkBAIC0xNTYsNyArMTUyLDYgQEAKIGV4dGVybiBjb25zdCBjaGFyKiBBTUVESUFGT1JNQVRfS0VZX1RSQUNLX0lEIF9fSU5UUk9EVUNFRF9JTigyOCk7CiBleHRlcm4gY29uc3QgY2hhciogQU1FRElBRk9STUFUX0tFWV9UUkFDS19JTkRFWCBfX0lOVFJPRFVDRURfSU4oMjgpOwogZXh0ZXJuIGNvbnN0IGNoYXIqIEFNRURJQUZPUk1BVF9LRVlfV0lEVEggX19JTlRST0RVQ0VEX0lOKDIxKTsKLQogI2VuZGlmIC8qIF9fQU5EUk9JRF9BUElfXyA+PSAyMSAqLwogCiAjaWYgX19BTkRST0lEX0FQSV9fID49IDI4CkBAIC0xNzAsNiArMTY1LDY5IEBACiAgICAgICAgIGludDMyX3QgbGVmdCwgaW50MzJfdCB0b3AsIGludDMyX3QgcmlnaHQsIGludDMyX3QgYm90dG9tKSBfX0lOVFJPRFVDRURfSU4oMjgpOwogI2VuZGlmIC8qIF9fQU5EUk9JRF9BUElfXyA+PSAyOCAqLwogCisjaWYgX19BTkRST0lEX0FQSV9fID49IDI5CisvKioKKyAqIHJlbW92ZSBhbGwga2V5L3ZhbHVlIHBhaXJzIGZyb20gdGhlIGdpdmVuIEFNZWRpYUZvcm1hdAorICovCit2b2lkIEFNZWRpYUZvcm1hdF9jbGVhcihBTWVkaWFGb3JtYXQqKSBfX0lOVFJPRFVDRURfSU4oMjkpOworCisvKioKKyAqIGNvcHkgb25lIEFNZWRpYUZvcm1hdCB0byBhbm90aGVyCisgKi8KK21lZGlhX3N0YXR1c190IEFNZWRpYUZvcm1hdF9jb3B5KEFNZWRpYUZvcm1hdCAqdG8sIEFNZWRpYUZvcm1hdCAqZnJvbSkgX19JTlRST0RVQ0VEX0lOKDI5KTsKKworZXh0ZXJuIGNvbnN0IGNoYXIqIEFNRURJQUZPUk1BVF9LRVlfQUxCVU0gX19JTlRST0RVQ0VEX0lOKDI5KTsKK2V4dGVybiBjb25zdCBjaGFyKiBBTUVESUFGT1JNQVRfS0VZX0FMQlVNQVJUIF9fSU5UUk9EVUNFRF9JTigyOSk7CitleHRlcm4gY29uc3QgY2hhciogQU1FRElBRk9STUFUX0tFWV9BTEJVTUFSVElTVCBfX0lOVFJPRFVDRURfSU4oMjkpOworZXh0ZXJuIGNvbnN0IGNoYXIqIEFNRURJQUZPUk1BVF9LRVlfQVJUSVNUIF9fSU5UUk9EVUNFRF9JTigyOSk7CitleHRlcm4gY29uc3QgY2hhciogQU1FRElBRk9STUFUX0tFWV9BVURJT19QUkVTRU5UQVRJT05fSU5GTyBfX0lOVFJPRFVDRURfSU4oMjkpOworZXh0ZXJuIGNvbnN0IGNoYXIqIEFNRURJQUZPUk1BVF9LRVlfQVVUSE9SIF9fSU5UUk9EVUNFRF9JTigyOSk7CitleHRlcm4gY29uc3QgY2hhciogQU1FRElBRk9STUFUX0tFWV9CSVRTX1BFUl9TQU1QTEUgX19JTlRST0RVQ0VEX0lOKDI5KTsKK2V4dGVybiBjb25zdCBjaGFyKiBBTUVESUFGT1JNQVRfS0VZX0NEVFJBQ0tOVU1CRVIgX19JTlRST0RVQ0VEX0lOKDI5KTsKK2V4dGVybiBjb25zdCBjaGFyKiBBTUVESUFGT1JNQVRfS0VZX0NPTE9SX1JBTkdFIF9fSU5UUk9EVUNFRF9JTigyOSk7CitleHRlcm4gY29uc3QgY2hhciogQU1FRElBRk9STUFUX0tFWV9DT0xPUl9TVEFOREFSRCBfX0lOVFJPRFVDRURfSU4oMjkpOworZXh0ZXJuIGNvbnN0IGNoYXIqIEFNRURJQUZPUk1BVF9LRVlfQ09MT1JfVFJBTlNGRVIgX19JTlRST0RVQ0VEX0lOKDI5KTsKK2V4dGVybiBjb25zdCBjaGFyKiBBTUVESUFGT1JNQVRfS0VZX0NPTVBJTEFUSU9OIF9fSU5UUk9EVUNFRF9JTigyOSk7CitleHRlcm4gY29uc3QgY2hhciogQU1FRElBRk9STUFUX0tFWV9DT01QT1NFUiBfX0lOVFJPRFVDRURfSU4oMjkpOworZXh0ZXJuIGNvbnN0IGNoYXIqIEFNRURJQUZPUk1BVF9LRVlfQ1JZUFRPX0RFRkFVTFRfSVZfU0laRSBfX0lOVFJPRFVDRURfSU4oMjkpOworZXh0ZXJuIGNvbnN0IGNoYXIqIEFNRURJQUZPUk1BVF9LRVlfQ1JZUFRPX0VOQ1JZUFRFRF9CWVRFX0JMT0NLIF9fSU5UUk9EVUNFRF9JTigyOSk7CitleHRlcm4gY29uc3QgY2hhciogQU1FRElBRk9STUFUX0tFWV9DUllQVE9fSVYgX19JTlRST0RVQ0VEX0lOKDI5KTsKK2V4dGVybiBjb25zdCBjaGFyKiBBTUVESUFGT1JNQVRfS0VZX0NSWVBUT19LRVkgX19JTlRST0RVQ0VEX0lOKDI5KTsKK2V4dGVybiBjb25zdCBjaGFyKiBBTUVESUFGT1JNQVRfS0VZX0NSWVBUT19NT0RFIF9fSU5UUk9EVUNFRF9JTigyOSk7CitleHRlcm4gY29uc3QgY2hhciogQU1FRElBRk9STUFUX0tFWV9DUllQVE9fU0tJUF9CWVRFX0JMT0NLIF9fSU5UUk9EVUNFRF9JTigyOSk7CitleHRlcm4gY29uc3QgY2hhciogQU1FRElBRk9STUFUX0tFWV9DU0RfQVZDIF9fSU5UUk9EVUNFRF9JTigyOSk7CitleHRlcm4gY29uc3QgY2hhciogQU1FRElBRk9STUFUX0tFWV9DU0RfSEVWQyBfX0lOVFJPRFVDRURfSU4oMjkpOworZXh0ZXJuIGNvbnN0IGNoYXIqIEFNRURJQUZPUk1BVF9LRVlfRDI2MyBfX0lOVFJPRFVDRURfSU4oMjkpOworZXh0ZXJuIGNvbnN0IGNoYXIqIEFNRURJQUZPUk1BVF9LRVlfREFURSBfX0lOVFJPRFVDRURfSU4oMjkpOworZXh0ZXJuIGNvbnN0IGNoYXIqIEFNRURJQUZPUk1BVF9LRVlfRElTQ05VTUJFUiBfX0lOVFJPRFVDRURfSU4oMjkpOworZXh0ZXJuIGNvbnN0IGNoYXIqIEFNRURJQUZPUk1BVF9LRVlfRU5DT0RFUl9ERUxBWSBfX0lOVFJPRFVDRURfSU4oMjkpOworZXh0ZXJuIGNvbnN0IGNoYXIqIEFNRURJQUZPUk1BVF9LRVlfRU5DT0RFUl9QQURESU5HIF9fSU5UUk9EVUNFRF9JTigyOSk7CitleHRlcm4gY29uc3QgY2hhciogQU1FRElBRk9STUFUX0tFWV9FU0RTIF9fSU5UUk9EVUNFRF9JTigyOSk7CitleHRlcm4gY29uc3QgY2hhciogQU1FRElBRk9STUFUX0tFWV9FWElGX09GRlNFVCBfX0lOVFJPRFVDRURfSU4oMjkpOworZXh0ZXJuIGNvbnN0IGNoYXIqIEFNRURJQUZPUk1BVF9LRVlfRVhJRl9TSVpFIF9fSU5UUk9EVUNFRF9JTigyOSk7CitleHRlcm4gY29uc3QgY2hhciogQU1FRElBRk9STUFUX0tFWV9GUkFNRV9DT1VOVCBfX0lOVFJPRFVDRURfSU4oMjkpOworZXh0ZXJuIGNvbnN0IGNoYXIqIEFNRURJQUZPUk1BVF9LRVlfR0VOUkUgX19JTlRST0RVQ0VEX0lOKDI5KTsKK2V4dGVybiBjb25zdCBjaGFyKiBBTUVESUFGT1JNQVRfS0VZX0hEUl9TVEFUSUNfSU5GTyBfX0lOVFJPRFVDRURfSU4oMjkpOworZXh0ZXJuIGNvbnN0IGNoYXIqIEFNRURJQUZPUk1BVF9LRVlfSUNDX1BST0ZJTEUgX19JTlRST0RVQ0VEX0lOKDI5KTsKK2V4dGVybiBjb25zdCBjaGFyKiBBTUVESUFGT1JNQVRfS0VZX0xPQ0FUSU9OIF9fSU5UUk9EVUNFRF9JTigyOSk7CitleHRlcm4gY29uc3QgY2hhciogQU1FRElBRk9STUFUX0tFWV9MT09QIF9fSU5UUk9EVUNFRF9JTigyOSk7CitleHRlcm4gY29uc3QgY2hhciogQU1FRElBRk9STUFUX0tFWV9MWVJJQ0lTVCBfX0lOVFJPRFVDRURfSU4oMjkpOworZXh0ZXJuIGNvbnN0IGNoYXIqIEFNRURJQUZPUk1BVF9LRVlfTUFYX0JJVF9SQVRFIF9fSU5UUk9EVUNFRF9JTigyOSk7CitleHRlcm4gY29uc3QgY2hhciogQU1FRElBRk9STUFUX0tFWV9NUEVHMl9TVFJFQU1fSEVBREVSIF9fSU5UUk9EVUNFRF9JTigyOSk7CitleHRlcm4gY29uc3QgY2hhciogQU1FRElBRk9STUFUX0tFWV9QQ01fQklHX0VORElBTiBfX0lOVFJPRFVDRURfSU4oMjkpOworZXh0ZXJuIGNvbnN0IGNoYXIqIEFNRURJQUZPUk1BVF9LRVlfUFNTSCBfX0lOVFJPRFVDRURfSU4oMjkpOworZXh0ZXJuIGNvbnN0IGNoYXIqIEFNRURJQUZPUk1BVF9LRVlfU0FSX0hFSUdIVCBfX0lOVFJPRFVDRURfSU4oMjkpOworZXh0ZXJuIGNvbnN0IGNoYXIqIEFNRURJQUZPUk1BVF9LRVlfU0FSX1dJRFRIIF9fSU5UUk9EVUNFRF9JTigyOSk7CitleHRlcm4gY29uc3QgY2hhciogQU1FRElBRk9STUFUX0tFWV9URU1QT1JBTF9MQVlFUl9DT1VOVCBfX0lOVFJPRFVDRURfSU4oMjkpOworZXh0ZXJuIGNvbnN0IGNoYXIqIEFNRURJQUZPUk1BVF9LRVlfVEVYVF9GT1JNQVRfREFUQSBfX0lOVFJPRFVDRURfSU4oMjkpOworZXh0ZXJuIGNvbnN0IGNoYXIqIEFNRURJQUZPUk1BVF9LRVlfVEhVTUJOQUlMX0hFSUdIVCBfX0lOVFJPRFVDRURfSU4oMjkpOworZXh0ZXJuIGNvbnN0IGNoYXIqIEFNRURJQUZPUk1BVF9LRVlfVEhVTUJOQUlMX1RJTUUgX19JTlRST0RVQ0VEX0lOKDI5KTsKK2V4dGVybiBjb25zdCBjaGFyKiBBTUVESUFGT1JNQVRfS0VZX1RIVU1CTkFJTF9XSURUSCBfX0lOVFJPRFVDRURfSU4oMjkpOworZXh0ZXJuIGNvbnN0IGNoYXIqIEFNRURJQUZPUk1BVF9LRVlfVElUTEUgX19JTlRST0RVQ0VEX0lOKDI5KTsKK2V4dGVybiBjb25zdCBjaGFyKiBBTUVESUFGT1JNQVRfS0VZX1lFQVIgX19JTlRST0RVQ0VEX0lOKDI5KTsKKworI2VuZGlmIC8qIF9fQU5EUk9JRF9BUElfXyA+PSAyOSAqLworCiBfX0VORF9ERUNMUwogCiAjZW5kaWYgLy8gX05ES19NRURJQV9GT1JNQVRfSApkaWZmIC0tZ2l0IGEvbWVkaWEvbmRrL2xpYm1lZGlhbmRrLm1hcC50eHQgYi9tZWRpYS9uZGsvbGlibWVkaWFuZGsubWFwLnR4dAppbmRleCBkODI4ZDZhLi5kM2JkYmFlIDEwMDY0NAotLS0gYS9tZWRpYS9uZGsvbGlibWVkaWFuZGsubWFwLnR4dAorKysgYi9tZWRpYS9uZGsvbGlibWVkaWFuZGsubWFwLnR4dApAQCAtNCw2ICs0LDcgQEAKICAgICBBSW1hZ2VSZWFkZXJfYWNxdWlyZUxhdGVzdEltYWdlQXN5bmM7ICMgaW50cm9kdWNlZD0yNgogICAgIEFJbWFnZVJlYWRlcl9hY3F1aXJlTmV4dEltYWdlOyAjIGludHJvZHVjZWQ9MjQKICAgICBBSW1hZ2VSZWFkZXJfYWNxdWlyZU5leHRJbWFnZUFzeW5jOyAjIGludHJvZHVjZWQ9MjYKKyAgICBBSW1hZ2VSZWFkZXJfZ2V0V2luZG93TmF0aXZlSGFuZGxlOyAjdm5kawogICAgIEFJbWFnZVJlYWRlcl9kZWxldGU7ICMgaW50cm9kdWNlZD0yNAogICAgIEFJbWFnZVJlYWRlcl9nZXRGb3JtYXQ7ICMgaW50cm9kdWNlZD0yNAogICAgIEFJbWFnZVJlYWRlcl9nZXRIZWlnaHQ7ICMgaW50cm9kdWNlZD0yNApAQCAtMTQxLDYgKzE0Miw5IEBACiAgICAgQU1lZGlhRGF0YVNvdXJjZV9zZXRHZXRTaXplOyAgIyBpbnRyb2R1Y2VkPTI4CiAgICAgQU1lZGlhRGF0YVNvdXJjZV9zZXRSZWFkQXQ7ICAgIyBpbnRyb2R1Y2VkPTI4CiAgICAgQU1lZGlhRGF0YVNvdXJjZV9zZXRVc2VyZGF0YTsgIyBpbnRyb2R1Y2VkPTI4CisgICAgQU1lZGlhRGF0YVNvdXJjZV9uZXdVcmk7ICAgICAgIyBpbnRyb2R1Y2VkPTI5CisgICAgQU1lZGlhRGF0YVNvdXJjZV9jbG9zZTsgICAgICAgIyBpbnRyb2R1Y2VkPTI5CisgICAgQU1lZGlhRGF0YVNvdXJjZV9zZXRHZXRBdmFpbGFibGVTaXplOyAjIGludHJvZHVjZWQ9MjkKICAgICBBTWVkaWFEcm1fY2xvc2VTZXNzaW9uOwogICAgIEFNZWRpYURybV9jcmVhdGVCeVVVSUQ7CiAgICAgQU1lZGlhRHJtX2RlY3J5cHQ7CkBAIC0xNjIsNiArMTY2LDggQEAKICAgICBBTWVkaWFEcm1fc2V0T25FdmVudExpc3RlbmVyOwogICAgIEFNZWRpYURybV9zZXRQcm9wZXJ0eUJ5dGVBcnJheTsKICAgICBBTWVkaWFEcm1fc2V0UHJvcGVydHlTdHJpbmc7CisgICAgQU1lZGlhRHJtX3NldE9uRXhwaXJhdGlvblVwZGF0ZUxpc3RlbmVyOyAjIGludHJvZHVjZWQ9MjkKKyAgICBBTWVkaWFEcm1fc2V0T25LZXlzQ2hhbmdlTGlzdGVuZXI7ICMgaW50cm9kdWNlZD0yOQogICAgIEFNZWRpYURybV9zaWduOwogICAgIEFNZWRpYURybV92ZXJpZnk7CiAgICAgQU1lZGlhRXh0cmFjdG9yX2FkdmFuY2U7CkBAIC0xODUsNiArMTkxLDggQEAKICAgICBBTWVkaWFFeHRyYWN0b3Jfc2V0RGF0YVNvdXJjZUN1c3RvbTsgIyBpbnRyb2R1Y2VkPTI4CiAgICAgQU1lZGlhRXh0cmFjdG9yX3NldERhdGFTb3VyY2VGZDsKICAgICBBTWVkaWFFeHRyYWN0b3JfdW5zZWxlY3RUcmFjazsKKyAgICBBTWVkaWFGb3JtYXRfY2xlYXI7ICMgaW50cm9kdWNlZD0yOQorICAgIEFNZWRpYUZvcm1hdF9jb3B5OyAjIGludHJvZHVjZWQ9MjkKICAgICBBTWVkaWFGb3JtYXRfZGVsZXRlOwogICAgIEFNZWRpYUZvcm1hdF9nZXRCdWZmZXI7CiAgICAgQU1lZGlhRm9ybWF0X2dldERvdWJsZTsgIyBpbnRyb2R1Y2VkPTI4CmRpZmYgLS1naXQgYS9tZWRpYS9uZGsvdGVzdHMvQUltYWdlUmVhZGVyV2luZG93SGFuZGxlVGVzdC5jcHAgYi9tZWRpYS9uZGsvdGVzdHMvQUltYWdlUmVhZGVyV2luZG93SGFuZGxlVGVzdC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWYwZmY2NwotLS0gL2Rldi9udWxsCisrKyBiL21lZGlhL25kay90ZXN0cy9BSW1hZ2VSZWFkZXJXaW5kb3dIYW5kbGVUZXN0LmNwcApAQCAtMCwwICsxLDE4NSBAQAorLyoKKyAqIENvcHlyaWdodCAyMDE4IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KKworI2luY2x1ZGUgPGd0ZXN0L2d0ZXN0Lmg+CisjaW5jbHVkZSA8bWVkaWEvTmRrSW1hZ2VSZWFkZXIuaD4KKyNpbmNsdWRlIDxtZWRpYS9OZGtJbWFnZS5oPgorI2luY2x1ZGUgPG1lZGlhdXRpbHMvQUltYWdlUmVhZGVyVXRpbHMuaD4KKyNpbmNsdWRlIDxndWkvSUdyYXBoaWNCdWZmZXJQcm9kdWNlci5oPgorI2luY2x1ZGUgPGd1aS9idWZmZXJxdWV1ZS8xLjAvSDJCR3JhcGhpY0J1ZmZlclByb2R1Y2VyLmg+CisjaW5jbHVkZSA8TmRrSW1hZ2VSZWFkZXJQcml2Lmg+CisjaW5jbHVkZSA8dm5kay9oYXJkd2FyZV9idWZmZXIuaD4KKyNpbmNsdWRlIDxtZW1vcnk+CisKK25hbWVzcGFjZSBhbmRyb2lkIHsKKwordXNpbmcgaGFyZHdhcmU6OmdyYXBoaWNzOjpidWZmZXJxdWV1ZTo6VjFfMDo6dXRpbHM6OkgyQkdyYXBoaWNCdWZmZXJQcm9kdWNlcjsKK3VzaW5nIGFpbWc6OkFJbWFnZVJlYWRlcl9nZXRIR0JQRnJvbUhhbmRsZTsKKwordHlwZWRlZiBJR3JhcGhpY0J1ZmZlclByb2R1Y2VyOjpRdWV1ZUJ1ZmZlcklucHV0IFF1ZXVlQnVmZmVySW5wdXQ7Cit0eXBlZGVmIElHcmFwaGljQnVmZmVyUHJvZHVjZXI6OlF1ZXVlQnVmZmVyT3V0cHV0IFF1ZXVlQnVmZmVyT3V0cHV0OworCitzdGF0aWMgY29uc3RleHByIHVpbnQ2NF90IGtJbWFnZUJ1ZmZlclVzYWdlID0KKyAgICBBSEFSRFdBUkVCVUZGRVJfVVNBR0VfQ1BVX1dSSVRFX09GVEVOOworc3RhdGljIGNvbnN0ZXhwciBpbnQga0ltYWdlV2lkdGggPSA2NDA7CitzdGF0aWMgY29uc3RleHByIGludCBrSW1hZ2VIZWlnaHQgPSA0ODA7CitzdGF0aWMgY29uc3RleHByIGludCBrSW1hZ2VGb3JtYXQgPSBBSU1BR0VfRk9STUFUX1JHQkFfODg4ODsKK3N0YXRpYyBjb25zdGV4cHIgaW50IGtNYXhJbWFnZXMgPSAxOworCitzdGF0aWMgY29uc3RleHByIGludDY0X3Qga1F1ZXVlQnVmZmVySW5wdXRUaW1lU3RhbXAgPSAxMzg0ODg4NjExOworc3RhdGljIGNvbnN0ZXhwciBib29sIGtRdWV1ZUJ1ZmZlcklucHV0SXNBdXRvVGltZVN0YW1wID0gZmFsc2U7CitzdGF0aWMgY29uc3RleHByIGFuZHJvaWRfZGF0YXNwYWNlIGtRdWV1ZUJ1ZmZlcklucHV0RGF0YXNwYWNlID0gSEFMX0RBVEFTUEFDRV9VTktOT1dOOworc3RhdGljIGNvbnN0IFJlY3Qga1F1ZXVlQnVmZmVySW5wdXRSZWN0ID0gUmVjdChrSW1hZ2VXaWR0aCwga0ltYWdlSGVpZ2h0KTsKK3N0YXRpYyBjb25zdGV4cHIgaW50IGtRdWV1ZUJ1ZmZlcklucHV0U2NhbGluZ01vZGUgPSAwOworc3RhdGljIGNvbnN0ZXhwciBpbnQga1F1ZXVlQnVmZmVySW5wdXRUcmFuc2Zvcm0gPSAwOworc3RhdGljIGNvbnN0IHNwPEZlbmNlPiBrUXVldWVCdWZmZXJJbnB1dEZlbmNlID0gRmVuY2U6Ok5PX0ZFTkNFOworCitzdGF0aWMgY29uc3RleHByIGludCBrT25JbWFnZUF2YWlsYWJsZVdhaXRVcyA9IDEwMCAqIDEwMDA7CisKK2NsYXNzIEFJbWFnZVJlYWRlcldpbmRvd0hhbmRsZVRlc3QgOiBwdWJsaWMgOjp0ZXN0aW5nOjpUZXN0IHsKKyAgIHB1YmxpYzoKKyAgICB2b2lkIFNldFVwKCkgb3ZlcnJpZGUgeworICAgICAgICBBSW1hZ2VSZWFkZXJfbmV3V2l0aFVzYWdlKGtJbWFnZVdpZHRoLCBrSW1hZ2VIZWlnaHQsIGtJbWFnZUZvcm1hdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrSW1hZ2VCdWZmZXJVc2FnZSAsIGtNYXhJbWFnZXMsICZpbWFnZVJlYWRlcl8pOworICAgICAgICBtZWRpYV9zdGF0dXNfdCByZXQgPSBBTUVESUFfRVJST1JfVU5LTk9XTjsKKyAgICAgICAgQVNTRVJUX05FKGltYWdlUmVhZGVyXywgbnVsbHB0cik7CisgICAgICAgIHJldCA9IEFJbWFnZVJlYWRlcl9zZXRJbWFnZUxpc3RlbmVyKGltYWdlUmVhZGVyXywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmltYWdlUmVhZGVyQXZhaWxhYmxlQ2JfKTsKKyAgICAgICAgQVNTRVJUX0VRKHJldCwgQU1FRElBX09LKTsKKyAgICAgICAgcmV0ID0gQUltYWdlUmVhZGVyX3NldEJ1ZmZlclJlbW92ZWRMaXN0ZW5lcihpbWFnZVJlYWRlcl8sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmltYWdlUmVhZGVyRGV0YWNoZWRDYl8pOworICAgICAgICBBU1NFUlRfRVEocmV0LCBBTUVESUFfT0spOworICAgIH0KKyAgICB2b2lkIFRlYXJEb3duKCkgb3ZlcnJpZGUgeworICAgICAgICBpZiAoaW1hZ2VSZWFkZXJfKSB7CisgICAgICAgICAgICBBSW1hZ2VSZWFkZXJfZGVsZXRlKGltYWdlUmVhZGVyXyk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICB2b2lkIEhhbmRsZUltYWdlQXZhaWxhYmxlKCkgeworICAgICAgICBBSW1hZ2UgKm91dEltYWdlID0gbnVsbHB0cjsKKyAgICAgICAgbWVkaWFfc3RhdHVzX3QgcmV0ID0gQU1FRElBX09LOworICAgICAgICBhdXRvIGltYWdlRGVsZXRlciA9IFtdKEFJbWFnZSAqaW1nKSB7IEFJbWFnZV9kZWxldGUoaW1nKTsgfTsKKyAgICAgICAgc3RkOjp1bmlxdWVfcHRyPEFJbWFnZSwgZGVjbHR5cGUoaW1hZ2VEZWxldGVyKT4gaW1nKG51bGxwdHIsIGltYWdlRGVsZXRlcik7CisKKyAgICAgICAgLy8gVGVzdCB0aGF0IHRoZSBpbWFnZSBjYW4gYmUgYWNxdWlyZWQuCisgICAgICAgIHJldCA9IEFJbWFnZVJlYWRlcl9hY3F1aXJlTmV4dEltYWdlKGltYWdlUmVhZGVyXywgJm91dEltYWdlKTsKKyAgICAgICAgQVNTRVJUX0VRKHJldCwgQU1FRElBX09LKTsKKyAgICAgICAgaW1nLnJlc2V0KG91dEltYWdlKTsKKyAgICAgICAgQVNTRVJUX05FKGltZywgbnVsbHB0cik7CisKKyAgICAgICAgLy8gVGVzdCB0aGF0IHdlIGNhbiBnZXQgYSBoYW5kbGUgdG8gdGhlIGltYWdlJ3MgaGFyZHdhcmUgYnVmZmVyIGFuZCBhCisgICAgICAgIC8vIG5hdGl2ZSBoYW5kbGUgdG8gaXQuCisgICAgICAgIEFIYXJkd2FyZUJ1ZmZlciAqaGFyZHdhcmVCdWZmZXIgPSBudWxscHRyOworICAgICAgICByZXQgPSBBSW1hZ2VfZ2V0SGFyZHdhcmVCdWZmZXIoaW1nLmdldCgpLCAmaGFyZHdhcmVCdWZmZXIpOworICAgICAgICBBU1NFUlRfRVEocmV0LCBBTUVESUFfT0spOworICAgICAgICBBU1NFUlRfTkUoaGFyZHdhcmVCdWZmZXIsIG51bGxwdHIpOworICAgICAgICBjb25zdCBuYXRpdmVfaGFuZGxlX3QgKm5oID0gQUhhcmR3YXJlQnVmZmVyX2dldE5hdGl2ZUhhbmRsZShoYXJkd2FyZUJ1ZmZlcik7CisgICAgICAgIEFTU0VSVF9ORShuaCwgbnVsbHB0cik7CisgICAgICAgIHN0ZDo6dW5pcXVlX2xvY2s8c3RkOjptdXRleD4gbG9jayhpbWFnZUF2YWlsYWJsZU11dGV4Xyk7CisgICAgICAgIGltYWdlQXZhaWxhYmxlXyA9IHRydWU7CisgICAgICAgIGltYWdlQ29uZFZhcl8ubm90aWZ5X29uZSgpOworICAgIH0KKworICAgIHN0YXRpYyB2b2lkIG9uSW1hZ2VBdmFpbGFibGUodm9pZCAqY29udGV4dCwgQUltYWdlUmVhZGVyICpyZWFkZXIpIHsKKyAgICAgICAgKHZvaWQpcmVhZGVyOworICAgICAgICBBSW1hZ2VSZWFkZXJXaW5kb3dIYW5kbGVUZXN0ICp0aGlzQ29udGV4dCA9CisgICAgICAgICAgICByZWludGVycHJldF9jYXN0PEFJbWFnZVJlYWRlcldpbmRvd0hhbmRsZVRlc3QgKj4oY29udGV4dCk7CisgICAgICAgIHRoaXNDb250ZXh0LT5IYW5kbGVJbWFnZUF2YWlsYWJsZSgpOworICAgIH0KKworICAgIHN0YXRpYyB2b2lkIG9uQnVmZmVyUmVtb3ZlZCh2b2lkICosIEFJbWFnZVJlYWRlciAqLCBBSGFyZHdhcmVCdWZmZXIgKikgeworICAgIH0KKworICAgIEFJbWFnZVJlYWRlciAqaW1hZ2VSZWFkZXJfID0gbnVsbHB0cjsKKyAgICBBSW1hZ2VSZWFkZXJfSW1hZ2VMaXN0ZW5lciBpbWFnZVJlYWRlckF2YWlsYWJsZUNiX3t0aGlzLCBvbkltYWdlQXZhaWxhYmxlfTsKKyAgICBBSW1hZ2VSZWFkZXJfQnVmZmVyUmVtb3ZlZExpc3RlbmVyIGltYWdlUmVhZGVyRGV0YWNoZWRDYl97dGhpcywgb25CdWZmZXJSZW1vdmVkfTsKKyAgICBzdGQ6Om11dGV4IGltYWdlQXZhaWxhYmxlTXV0ZXhfOworICAgIHN0ZDo6Y29uZGl0aW9uX3ZhcmlhYmxlIGltYWdlQ29uZFZhcl87CisgICAgYm9vbCBpbWFnZUF2YWlsYWJsZV8gPSBmYWxzZTsKK307CisKK3N0YXRpYyB2b2lkIGZpbGxSR0JBOEJ1ZmZlcih1aW50OF90KiBidWYsIGludCB3LCBpbnQgaCwgaW50IHN0cmlkZSkgeworICAgIGNvbnN0IHNpemVfdCBQSVhFTF9TSVpFID0gNDsKKyAgICBmb3IgKGludCB4ID0gMDsgeCA8IHc7IHgrKykgeworICAgICAgICBmb3IgKGludCB5ID0gMDsgeSA8IGg7IHkrKykgeworICAgICAgICAgICAgb2ZmX3Qgb2Zmc2V0ID0gKHkgKiBzdHJpZGUgKyB4KSAqIFBJWEVMX1NJWkU7CisgICAgICAgICAgICBmb3IgKGludCBjID0gMDsgYyA8IDQ7IGMrKykgeworICAgICAgICAgICAgICAgIGludCBwYXJpdHlYID0gKHggLyAoMSA8PCAoYysyKSkpICYgMTsKKyAgICAgICAgICAgICAgICBpbnQgcGFyaXR5WSA9ICh5IC8gKDEgPDwgKGMrMikpKSAmIDE7CisgICAgICAgICAgICAgICAgYnVmW29mZnNldCArIGNdID0gKHBhcml0eVggXiBwYXJpdHlZKSA/IDIzMSA6IDM1OworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorfQorCitURVNUX0YoQUltYWdlUmVhZGVyV2luZG93SGFuZGxlVGVzdCwgQ3JlYXRlV2luZG93TmF0aXZlSGFuZGxlKSB7CisgICAgLy8gQ2hlY2sgdGhhdCB3ZSBjYW4gY3JlYXRlIGEgbmF0aXZlX2hhbmRsZV90IGNvcnJlc3BvbmRpbmcgdG8gdGhlCisgICAgLy8gQUltYWdlUmVhZGVyLgorICAgIG5hdGl2ZV9oYW5kbGVfdCAqbmggPSBudWxscHRyOworICAgIEFJbWFnZVJlYWRlcl9nZXRXaW5kb3dOYXRpdmVIYW5kbGUoaW1hZ2VSZWFkZXJfLCAmbmgpOworICAgIEFTU0VSVF9ORShuaCwgbnVsbHB0cik7CisKKyAgICAvLyBDaGVjayB0aGF0IHRoZXJlIGFyZSBvbmx5IGludHMgaW4gdGhlIGhhbmRsZS4KKyAgICBBU1NFUlRfRVEobmgtPm51bUZkcywgMCk7CisgICAgQVNTRVJUX05FKG5oLT5udW1JbnRzLCAwKTsKKworICAgIC8vIENoZWNrIHRoYXQgdGhlIEhHQlAgY2FuIGJlIHJldHJpZXZlZCBmcm9tIHRoZSBoYW5kbGUuCisgICAgc3A8SEdyYXBoaWNCdWZmZXJQcm9kdWNlcj4gaGdicCA9ICBBSW1hZ2VSZWFkZXJfZ2V0SEdCUEZyb21IYW5kbGUobmgpOworICAgIEFTU0VSVF9ORShoZ2JwLCBudWxscHRyKTsKKyAgICBzcDxJR3JhcGhpY0J1ZmZlclByb2R1Y2VyPiBpZ2JwID0gbmV3IEgyQkdyYXBoaWNCdWZmZXJQcm9kdWNlcihoZ2JwKTsKKyAgICBpbnQgZGVxdWV1ZWRTbG90ID0gLTE7CisgICAgc3A8RmVuY2U+IGRlcXVldWVkRmVuY2U7CisgICAgSUdyYXBoaWNCdWZmZXJQcm9kdWNlcjo6UXVldWVCdWZmZXJPdXRwdXQgb3V0cHV0OworICAgIEFTU0VSVF9FUShPSywgaWdicC0+Y29ubmVjdChudWxscHRyLCBOQVRJVkVfV0lORE9XX0FQSV9DUFUsIGZhbHNlLCAmb3V0cHV0KSk7CisKKyAgICAvLyBUZXN0IHRoYXQgd2UgY2FuIGRlcXVldWUgYSBidWZmZXIuCisgICAgQVNTRVJUX0VRKE9LLAorICAgICAgICAgICAgICB+SUdyYXBoaWNCdWZmZXJQcm9kdWNlcjo6QlVGRkVSX05FRURTX1JFQUxMT0NBVElPTiAmCisgICAgICAgICAgICAgICAgICAgICAgKGlnYnAtPmRlcXVldWVCdWZmZXIoJmRlcXVldWVkU2xvdCwgJmRlcXVldWVkRmVuY2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga0ltYWdlV2lkdGgsIGtJbWFnZUhlaWdodCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrSW1hZ2VGb3JtYXQsIGtJbWFnZUJ1ZmZlclVzYWdlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG51bGxwdHIsIG51bGxwdHIpKSk7CisgICAgRVhQRUNUX0xFKDAsIGRlcXVldWVkU2xvdCk7CisgICAgRVhQRUNUX0dUKEJ1ZmZlclF1ZXVlOjpOVU1fQlVGRkVSX1NMT1RTLCBkZXF1ZXVlZFNsb3QpOworCisgICAgc3A8R3JhcGhpY0J1ZmZlcj4gZGVxdWV1ZWRCdWZmZXI7CisgICAgaWdicC0+cmVxdWVzdEJ1ZmZlcihkZXF1ZXVlZFNsb3QsICZkZXF1ZXVlZEJ1ZmZlcik7CisgICAgdWludDhfdCogaW1nID0gbnVsbHB0cjsKKyAgICBBU1NFUlRfRVEoTk9fRVJST1IsIGRlcXVldWVkQnVmZmVyLT5sb2NrKGtJbWFnZUJ1ZmZlclVzYWdlLCAodm9pZCoqKSgmaW1nKSkpOworCisgICAgLy8gV3JpdGUgaW4gc29tZSBkdW1teSBpbWFnZSBkYXRhLgorICAgIGZpbGxSR0JBOEJ1ZmZlcihpbWcsIGRlcXVldWVkQnVmZmVyLT5nZXRXaWR0aCgpLCBkZXF1ZXVlZEJ1ZmZlci0+Z2V0SGVpZ2h0KCksCisgICAgICAgICAgICAgICAgICAgIGRlcXVldWVkQnVmZmVyLT5nZXRTdHJpZGUoKSk7CisgICAgQVNTRVJUX0VRKE5PX0VSUk9SLCBkZXF1ZXVlZEJ1ZmZlci0+dW5sb2NrKCkpOworICAgIFF1ZXVlQnVmZmVySW5wdXQgcXVldWVCdWZmZXJJbnB1dChrUXVldWVCdWZmZXJJbnB1dFRpbWVTdGFtcCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga1F1ZXVlQnVmZmVySW5wdXRJc0F1dG9UaW1lU3RhbXAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtRdWV1ZUJ1ZmZlcklucHV0RGF0YXNwYWNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrUXVldWVCdWZmZXJJbnB1dFJlY3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtRdWV1ZUJ1ZmZlcklucHV0U2NhbGluZ01vZGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtRdWV1ZUJ1ZmZlcklucHV0VHJhbnNmb3JtLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrUXVldWVCdWZmZXJJbnB1dEZlbmNlKTsKKyAgICBRdWV1ZUJ1ZmZlck91dHB1dCBxdWV1ZUJ1ZmZlck91dHB1dDsKKyAgICBBU1NFUlRfRVEoT0ssIGlnYnAtPnF1ZXVlQnVmZmVyKGRlcXVldWVkU2xvdCwgcXVldWVCdWZmZXJJbnB1dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZxdWV1ZUJ1ZmZlck91dHB1dCkpOworICAgIC8vIHdhaXQgdW50aWwgdGhlIG9uSW1hZ2VBdmFpbGFibGUgY2FsbGJhY2sgaXMgY2FsbGVkLCBvciB0aW1lb3V0IGNvbXBsZXRlcy4KKyAgICBzdGQ6OnVuaXF1ZV9sb2NrPHN0ZDo6bXV0ZXg+IGxvY2soaW1hZ2VBdmFpbGFibGVNdXRleF8pOworICAgIGltYWdlQ29uZFZhcl8ud2FpdF9mb3IobG9jaywgc3RkOjpjaHJvbm86Om1pY3Jvc2Vjb25kcyhrT25JbWFnZUF2YWlsYWJsZVdhaXRVcyksCisgICAgICAgICAgICAgICAgICAgICAgICAgICBbdGhpc117IHJldHVybiB0aGlzLT5pbWFnZUF2YWlsYWJsZV87fSk7CisgICAgRVhQRUNUX1RSVUUoaW1hZ2VBdmFpbGFibGVfKSA8PCAgIlRpbWVkIG91dCB3YWl0aW5nIGZvciBpbWFnZSBkYXRhIHRvIGJlIGhhbmRsZWQhXG4iOworfQorCit9ICAvLyBuYW1lc3BhY2UgYW5kcm9pZApkaWZmIC0tZ2l0IGEvbWVkaWEvdXRpbHMvQUltYWdlUmVhZGVyVXRpbHMuY3BwIGIvbWVkaWEvdXRpbHMvQUltYWdlUmVhZGVyVXRpbHMuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ5N2MzNDAKLS0tIC9kZXYvbnVsbAorKysgYi9tZWRpYS91dGlscy9BSW1hZ2VSZWFkZXJVdGlscy5jcHAKQEAgLTAsMCArMSw1MiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxOCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCisKKyNpbmNsdWRlIDxjbWF0aD4KKworI2luY2x1ZGUgPG1lZGlhdXRpbHMvQUltYWdlUmVhZGVyVXRpbHMuaD4KKyNpbmNsdWRlIDxoaWRsL0h5YnJpZEludGVyZmFjZS5oPgorCituYW1lc3BhY2UgYW5kcm9pZCB7CituYW1lc3BhY2UgYWltZyB7CisKK3VzaW5nIGhhcmR3YXJlOjpoaWRsX3ZlYzsKKworc3RhdGljIHNwPEhHcmFwaGljQnVmZmVyUHJvZHVjZXI+IGNvbnZlcnROYXRpdmVIYW5kbGVUb0hHQlAgKAorICAgICAgICBjb25zdCBuYXRpdmVfaGFuZGxlX3QgKmhhbmRsZSkgeworICAgIC8vIFJlYWQgdGhlIHNpemUgb2YgdGhlIGhhbFRva2VuIHZlYzx1aW50OF90PgorICAgIGhpZGxfdmVjPHVpbnQ4X3Q+IGhhbFRva2VuOworICAgIGhhbFRva2VuLnNldFRvRXh0ZXJuYWwoCisgICAgICAgIHJlaW50ZXJwcmV0X2Nhc3Q8dWludDhfdCAqPihjb25zdF9jYXN0PGludCAqPigmKGhhbmRsZS0+ZGF0YVsxXSkpKSwKKyAgICAgICAgaGFuZGxlLT5kYXRhWzBdKTsKKyAgICBzcDxIR3JhcGhpY0J1ZmZlclByb2R1Y2VyPiBoZ2JwID0KKyAgICAgICAgSEdyYXBoaWNCdWZmZXJQcm9kdWNlcjo6Y2FzdEZyb20ocmV0cmlldmVIYWxJbnRlcmZhY2UoaGFsVG9rZW4pKTsKKyAgICByZXR1cm4gaGdicDsKK30KKworc3A8SEdyYXBoaWNCdWZmZXJQcm9kdWNlcj4gQUltYWdlUmVhZGVyX2dldEhHQlBGcm9tSGFuZGxlKAorICAgIGNvbnN0IG5hdGl2ZV9oYW5kbGVfdCAqaGFuZGxlKSB7CisgICAgaWYgKGhhbmRsZSA9PSBudWxscHRyKSB7CisgICAgICAgIHJldHVybiBudWxscHRyOworICAgIH0KKyAgICBpZiAoaGFuZGxlLT5udW1GZHMgIT0gMCAgfHwKKyAgICAgICAgaGFuZGxlLT5udW1JbnRzIDwgc3RkOjpjZWlsKHNpemVvZihzaXplX3QpIC8gc2l6ZW9mKGludCkpKSB7CisgICAgICAgIHJldHVybiBudWxscHRyOworICAgIH0KKyAgICByZXR1cm4gY29udmVydE5hdGl2ZUhhbmRsZVRvSEdCUChoYW5kbGUpOworfQorCit9IC8vbmFtZXNwYWNlIGFpbWcKK30gLy9uYW1lc3BhY2UgYW5kcm9pZApkaWZmIC0tZ2l0IGEvbWVkaWEvdXRpbHMvQW5kcm9pZC5icCBiL21lZGlhL3V0aWxzL0FuZHJvaWQuYnAKaW5kZXggZDZkYWU1Yi4uYjA1ZTAyMiAxMDA2NDQKLS0tIGEvbWVkaWEvdXRpbHMvQW5kcm9pZC5icAorKysgYi9tZWRpYS91dGlscy9BbmRyb2lkLmJwCkBAIC0xNiwyNSArMTYsNDAgQEAKICAgICBuYW1lOiAibGlibWVkaWF1dGlscyIsCiAKICAgICBzcmNzOiBbCisgICAgICAgICJBSW1hZ2VSZWFkZXJVdGlscy5jcHAiLAogICAgICAgICAiQmF0dGVyeU5vdGlmaWVyLmNwcCIsCiAgICAgICAgICJJU2NoZWR1bGluZ1BvbGljeVNlcnZpY2UuY3BwIiwKICAgICAgICAgIk1lbW9yeUxlYWtUcmFja1V0aWwuY3BwIiwKICAgICAgICAgIlByb2Nlc3NJbmZvLmNwcCIsCiAgICAgICAgICJTY2hlZHVsaW5nUG9saWN5U2VydmljZS5jcHAiLAorICAgICAgICAiU2VydmljZVV0aWxpdGllcy5jcHAiLAorICAgICAgICAiVGltZUNoZWNrLmNwcCIsCiAgICAgXSwKICAgICBzaGFyZWRfbGliczogWwogICAgICAgICAibGliYmluZGVyIiwKKyAgICAgICAgImxpYmN1dGlscyIsCiAgICAgICAgICJsaWJsb2ciLAogICAgICAgICAibGlidXRpbHMiLAogICAgICAgICAibGlibWVtdW5yZWFjaGFibGUiLAorICAgICAgICAibGliaGlkbGJhc2UiLAorICAgICAgICAiYW5kcm9pZC5oYXJkd2FyZS5ncmFwaGljcy5idWZmZXJxdWV1ZUAxLjAiLAorICAgICAgICAiYW5kcm9pZC5oaWRsLnRva2VuQDEuMC11dGlscyIsCiAgICAgXSwKIAorICAgIGxvZ3RhZ3M6IFsiRXZlbnRMb2dUYWdzLmxvZ3RhZ3MiXSwKKwogICAgIGNmbGFnczogWwogICAgICAgICAiLVdhbGwiLAogICAgICAgICAiLVdleHRyYSIsCiAgICAgICAgICItV2Vycm9yIiwKICAgICBdLAogCisgICAgcHJvZHVjdF92YXJpYWJsZXM6IHsKKyAgICAgICAgcHJvZHVjdF9pc19pb3Q6IHsKKyAgICAgICAgICAgIGNmbGFnczogWyItRFRBUkdFVF9BTkRST0lEX1RISU5HUyJdLAorICAgICAgICB9LAorICAgIH0sCisKICAgICBsb2NhbF9pbmNsdWRlX2RpcnM6IFsiaW5jbHVkZSJdLAogICAgIGV4cG9ydF9pbmNsdWRlX2RpcnM6IFsiaW5jbHVkZSJdLAogfQpkaWZmIC0tZ2l0IGEvbWVkaWEvdXRpbHMvRXZlbnRMb2dUYWdzLmxvZ3RhZ3MgYi9tZWRpYS91dGlscy9FdmVudExvZ1RhZ3MubG9ndGFncwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42N2YwZWE4Ci0tLSAvZGV2L251bGwKKysrIGIvbWVkaWEvdXRpbHMvRXZlbnRMb2dUYWdzLmxvZ3RhZ3MKQEAgLTAsMCArMSw0MSBAQAorIyBUaGUgZW50cmllcyBpbiB0aGlzIGZpbGUgbWFwIGEgc3BhcnNlIHNldCBvZiBsb2cgdGFnIG51bWJlcnMgdG8gdGFnIG5hbWVzLgorIyBUaGlzIGlzIGluc3RhbGxlZCBvbiB0aGUgZGV2aWNlLCBpbiAvc3lzdGVtL2V0YywgYW5kIHBhcnNlZCBieSBsb2djYXQuCisjCisjIFRhZyBudW1iZXJzIGFyZSBkZWNpbWFsIGludGVnZXJzLCBmcm9tIDAgdG8gMl4zMS4gIChMZXQncyBsZWF2ZSB0aGUKKyMgbmVnYXRpdmUgdmFsdWVzIGFsb25lIGZvciBub3cuKQorIworIyBUYWcgbmFtZXMgYXJlIG9uZSBvciBtb3JlIEFTQ0lJIGxldHRlcnMgYW5kIG51bWJlcnMgb3IgdW5kZXJzY29yZXMsIGkuZS4KKyMgIltBLVpdW2Etel1bMC05XV8iLiAgRG8gbm90IGluY2x1ZGUgc3BhY2VzIG9yIHB1bmN0dWF0aW9uICh0aGUgZm9ybWVyCisjIGltcGFjdHMgbG9nIHJlYWRhYmlsaXR5LCB0aGUgbGF0dGVyIG1ha2VzIHJlZ2V4IHNlYXJjaGVzIG1vcmUgYW5ub3lpbmcpLgorIworIyBUYWcgbnVtYmVycyBhbmQgbmFtZXMgYXJlIHNlcGFyYXRlZCBieSB3aGl0ZXNwYWNlLiAgQmxhbmsgbGluZXMgYW5kIGxpbmVzCisjIHN0YXJ0aW5nIHdpdGggJyMnIGFyZSBpZ25vcmVkLgorIworIyBPcHRpb25hbGx5LCBhZnRlciB0aGUgdGFnIG5hbWVzIGNhbiBiZSBwdXQgYSBkZXNjcmlwdGlvbiBmb3IgdGhlIHZhbHVlKHMpCisjIG9mIHRoZSB0YWcuIERlc2NyaXB0aW9uIGFyZSBpbiB0aGUgZm9ybWF0CisjICAgICg8bmFtZT58ZGF0YSB0eXBlW3xkYXRhIHVuaXRdKQorIyBNdWx0aXBsZSB2YWx1ZXMgYXJlIHNlcGFyYXRlZCBieSBjb21tYXMuCisjCisjIFRoZSBkYXRhIHR5cGUgaXMgYSBudW1iZXIgZnJvbSB0aGUgZm9sbG93aW5nIHZhbHVlczoKKyMgMTogaW50CisjIDI6IGxvbmcKKyMgMzogc3RyaW5nCisjIDQ6IGxpc3QKKyMKKyMgVGhlIGRhdGEgdW5pdCBpcyBhIG51bWJlciB0YWtlbiBmcm9tIHRoZSBmb2xsb3dpbmcgbGlzdDoKKyMgMTogTnVtYmVyIG9mIG9iamVjdHMKKyMgMjogTnVtYmVyIG9mIGJ5dGVzCisjIDM6IE51bWJlciBvZiBtaWxsaXNlY29uZHMKKyMgNDogTnVtYmVyIG9mIGFsbG9jYXRpb25zCisjIDU6IElkCisjIDY6IFBlcmNlbnQKKyMgRGVmYXVsdCB2YWx1ZSBmb3IgZGF0YSBvZiB0eXBlIGludC9sb25nIGlzIDIgKGJ5dGVzKS4KKyMKKyMgU2VlIHN5c3RlbS9jb3JlL2xvZ2NhdC9ldmVudC5sb2d0YWdzIGZvciB0aGUgbWFzdGVyIGNvcHkgb2YgdGhlIHRhZ3MuCisKKyMgNjEwMDAgLSA2MTE5OSByZXNlcnZlZCBmb3IgYXVkaW9zZXJ2ZXIKKworNjEwMDAgYXVkaW9zZXJ2ZXJfYmluZGVyX3RpbWVvdXQgKGNvbW1hbmR8MykKKworIyBOT1RFIC0gdGhlIHJhbmdlIDEwMDAwMDAtMjAwMDAwMCBpcyByZXNlcnZlZCBmb3IgcGFydG5lcnMgYW5kIG90aGVycyB3aG8KKyMgd2FudCB0byBkZWZpbmUgdGhlaXIgb3duIGxvZyB0YWdzIHdpdGhvdXQgY29uZmxpY3Rpbmcgd2l0aCB0aGUgY29yZSBwbGF0Zm9ybS4KZGlmZiAtLWdpdCBhL21lZGlhL3V0aWxzL1NlcnZpY2VVdGlsaXRpZXMuY3BwIGIvbWVkaWEvdXRpbHMvU2VydmljZVV0aWxpdGllcy5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWM1NGFlYwotLS0gL2Rldi9udWxsCisrKyBiL21lZGlhL3V0aWxzL1NlcnZpY2VVdGlsaXRpZXMuY3BwCkBAIC0wLDAgKzEsMjIzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KKworI2RlZmluZSBMT0dfVEFHICJTZXJ2aWNlVXRpbGl0aWVzIgorCisjaW5jbHVkZSA8YmluZGVyL0FwcE9wc01hbmFnZXIuaD4KKyNpbmNsdWRlIDxiaW5kZXIvSVBDVGhyZWFkU3RhdGUuaD4KKyNpbmNsdWRlIDxiaW5kZXIvSVNlcnZpY2VNYW5hZ2VyLmg+CisjaW5jbHVkZSA8YmluZGVyL1Blcm1pc3Npb25DYWNoZS5oPgorI2luY2x1ZGUgIm1lZGlhdXRpbHMvU2VydmljZVV0aWxpdGllcy5oIgorCisvKiBXaGVuIHBlcmZvcm1pbmcgcGVybWlzc2lvbiBjaGVja3Mgd2UgZG8gbm90IHVzZSBwZXJtaXNzaW9uIGNhY2hlIGZvcgorICogcnVudGltZSBwZXJtaXNzaW9ucyAocHJvdGVjdGlvbiBsZXZlbCBkYW5nZXJvdXMpIGFzIHRoZXkgbWF5IGNoYW5nZSBhdAorICogcnVudGltZS4gQWxsIG90aGVyIHBlcm1pc3Npb25zIChwcm90ZWN0aW9uIGxldmVsIG5vcm1hbCBhbmQgZGFuZ2Vyb3VzKQorICogY2FuIGJlIGNhY2hlZCBhcyB0aGV5IG5ldmVyIGNoYW5nZS4gT2YgY291cnNlIGFsbCBwZXJtaXNzaW9uIGNoZWNrZWQKKyAqIGhlcmUgYXJlIHBsYXRmb3JtIGRlZmluZWQuCisgKi8KKworbmFtZXNwYWNlIGFuZHJvaWQgeworCitzdGF0aWMgY29uc3QgU3RyaW5nMTYgc0FuZHJvaWRQZXJtaXNzaW9uUmVjb3JkQXVkaW8oImFuZHJvaWQucGVybWlzc2lvbi5SRUNPUkRfQVVESU8iKTsKKworc3RhdGljIFN0cmluZzE2IHJlc29sdmVDYWxsaW5nUGFja2FnZShQZXJtaXNzaW9uQ29udHJvbGxlciYgcGVybWlzc2lvbkNvbnRyb2xsZXIsCisgICAgICAgIGNvbnN0IFN0cmluZzE2JiBvcFBhY2thZ2VOYW1lLCB1aWRfdCB1aWQpIHsKKyAgICBpZiAob3BQYWNrYWdlTmFtZS5zaXplKCkgPiAwKSB7CisgICAgICAgIHJldHVybiBvcFBhY2thZ2VOYW1lOworICAgIH0KKyAgICAvLyBJbiBzb21lIGNhc2VzIHRoZSBjYWxsaW5nIGNvZGUgaGFzIG5vIGFjY2VzcyB0byB0aGUgcGFja2FnZSBpdCBydW5zIHVuZGVyLgorICAgIC8vIEZvciBleGFtcGxlLCBjb2RlIHVzaW5nIHRoZSB3aWxoZWxtIGZyYW1ld29yaydzIE9wZW5TTC1FUyBBUElzLiBJbiB0aGlzCisgICAgLy8gY2FzZSB3ZSB3aWxsIGdldCB0aGUgcGFja2FnZXMgZm9yIHRoZSBjYWxsaW5nIFVJRCBhbmQgcGljayB0aGUgZmlyc3Qgb25lCisgICAgLy8gZm9yIGF0dHJpYnV0aW5nIHRoZSBhcHAgb3AuIFRoaXMgd2lsbCB3b3JrIGNvcnJlY3RseSBmb3IgcnVudGltZSBwZXJtaXNzaW9ucworICAgIC8vIGFzIGZvciBsZWdhY3kgYXBwcyB3ZSB3aWxsIHRvZ2dsZSB0aGUgYXBwIG9wIGZvciBhbGwgcGFja2FnZXMgaW4gdGhlIFVJRC4KKyAgICAvLyBUaGUgY2F2ZWF0IGlzIHRoYXQgdGhlIG9wZXJhdGlvbiBtYXkgYmUgYXR0cmlidXRlZCB0byB0aGUgd3JvbmcgcGFja2FnZSBhbmQKKyAgICAvLyBzdGF0cyBiYXNlZCBvbiBhcHAgb3BzIG1heSBiZSBzbGlnaHRseSBvZmYuCisgICAgVmVjdG9yPFN0cmluZzE2PiBwYWNrYWdlczsKKyAgICBwZXJtaXNzaW9uQ29udHJvbGxlci5nZXRQYWNrYWdlc0ZvclVpZCh1aWQsIHBhY2thZ2VzKTsKKyAgICBpZiAocGFja2FnZXMuaXNFbXB0eSgpKSB7CisgICAgICAgIEFMT0dFKCJObyBwYWNrYWdlcyBmb3IgdWlkICVkIiwgdWlkKTsKKyAgICAgICAgcmV0dXJuIG9wUGFja2FnZU5hbWU7IC8vIGVtcHR5IHN0cmluZworICAgIH0KKyAgICByZXR1cm4gcGFja2FnZXNbMF07Cit9CisKK3N0YXRpYyBib29sIGNoZWNrUmVjb3JkaW5nSW50ZXJuYWwoY29uc3QgU3RyaW5nMTYmIG9wUGFja2FnZU5hbWUsIHBpZF90IHBpZCwKKyAgICAgICAgdWlkX3QgdWlkLCBib29sIHN0YXJ0KSB7CisgICAgLy8gT2theSB0byBub3QgdHJhY2sgaW4gYXBwIG9wcyBhcyBhdWRpbyBzZXJ2ZXIgaXMgdXMgYW5kIGlmCisgICAgLy8gZGV2aWNlIGlzIHJvb3RlZCBzZWN1cml0eSBtb2RlbCBpcyBjb25zaWRlcmVkIGNvbXByb21pc2VkLgorICAgIGlmIChpc0F1ZGlvU2VydmVyT3JSb290VWlkKHVpZCkpIHJldHVybiB0cnVlOworCisgICAgLy8gV2Ugc3BlY2lmeSBhIHBpZCBhbmQgdWlkIGhlcmUgYXMgbWVkaWFzZXJ2ZXIgKGFrYSBNZWRpYVJlY29yZGVyIG9yIFN0YWdlRnJpZ2h0UmVjb3JkZXIpCisgICAgLy8gbWF5IG9wZW4gYSByZWNvcmQgdHJhY2sgb24gYmVoYWxmIG9mIGEgY2xpZW50LiAgTm90ZSB0aGF0IHBpZCBtYXkgYmUgYSB0aWQuCisgICAgLy8gSU1QT1JUQU5UOiBET04nVCBVU0UgUGVybWlzc2lvbkNhY2hlIC0gUlVOVElNRSBQRVJNSVNTSU9OUyBDSEFOR0UuCisgICAgUGVybWlzc2lvbkNvbnRyb2xsZXIgcGVybWlzc2lvbkNvbnRyb2xsZXI7CisgICAgY29uc3QgYm9vbCBvayA9IHBlcm1pc3Npb25Db250cm9sbGVyLmNoZWNrUGVybWlzc2lvbihzQW5kcm9pZFBlcm1pc3Npb25SZWNvcmRBdWRpbywgcGlkLCB1aWQpOworICAgIGlmICghb2spIHsKKyAgICAgICAgQUxPR0UoIlJlcXVlc3QgcmVxdWlyZXMgJXMiLCBTdHJpbmc4KHNBbmRyb2lkUGVybWlzc2lvblJlY29yZEF1ZGlvKS5jX3N0cigpKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIFN0cmluZzE2IHJlc29sdmVkT3BQYWNrYWdlTmFtZSA9IHJlc29sdmVDYWxsaW5nUGFja2FnZSgKKyAgICAgICAgICAgIHBlcm1pc3Npb25Db250cm9sbGVyLCBvcFBhY2thZ2VOYW1lLCB1aWQpOworICAgIGlmIChyZXNvbHZlZE9wUGFja2FnZU5hbWUuc2l6ZSgpID09IDApIHsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIEFwcE9wc01hbmFnZXIgYXBwT3BzOworICAgIGNvbnN0IGludDMyX3Qgb3AgPSBhcHBPcHMucGVybWlzc2lvblRvT3BDb2RlKHNBbmRyb2lkUGVybWlzc2lvblJlY29yZEF1ZGlvKTsKKyAgICBpZiAoc3RhcnQpIHsKKyAgICAgICAgaWYgKGFwcE9wcy5zdGFydE9wTm9UaHJvdyhvcCwgdWlkLCByZXNvbHZlZE9wUGFja2FnZU5hbWUsIC8qc3RhcnRJZk1vZGVEZWZhdWx0Ki8gZmFsc2UpCisgICAgICAgICAgICAgICAgIT0gQXBwT3BzTWFuYWdlcjo6TU9ERV9BTExPV0VEKSB7CisgICAgICAgICAgICBBTE9HRSgiUmVxdWVzdCBkZW5pZWQgYnkgYXBwIG9wOiAlZCIsIG9wKTsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgIH0gZWxzZSB7CisgICAgICAgIGlmIChhcHBPcHMubm90ZU9wKG9wLCB1aWQsIHJlc29sdmVkT3BQYWNrYWdlTmFtZSkgIT0gQXBwT3BzTWFuYWdlcjo6TU9ERV9BTExPV0VEKSB7CisgICAgICAgICAgICBBTE9HRSgiUmVxdWVzdCBkZW5pZWQgYnkgYXBwIG9wOiAlZCIsIG9wKTsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHJldHVybiB0cnVlOworfQorCitib29sIHJlY29yZGluZ0FsbG93ZWQoY29uc3QgU3RyaW5nMTYmIG9wUGFja2FnZU5hbWUsIHBpZF90IHBpZCwgdWlkX3QgdWlkKSB7CisgICAgcmV0dXJuIGNoZWNrUmVjb3JkaW5nSW50ZXJuYWwob3BQYWNrYWdlTmFtZSwgcGlkLCB1aWQsIC8qc3RhcnQqLyBmYWxzZSk7Cit9CisKK2Jvb2wgc3RhcnRSZWNvcmRpbmcoY29uc3QgU3RyaW5nMTYmIG9wUGFja2FnZU5hbWUsIHBpZF90IHBpZCwgdWlkX3QgdWlkKSB7CisgICAgIHJldHVybiBjaGVja1JlY29yZGluZ0ludGVybmFsKG9wUGFja2FnZU5hbWUsIHBpZCwgdWlkLCAvKnN0YXJ0Ki8gdHJ1ZSk7Cit9CisKK3ZvaWQgZmluaXNoUmVjb3JkaW5nKGNvbnN0IFN0cmluZzE2JiBvcFBhY2thZ2VOYW1lLCB1aWRfdCB1aWQpIHsKKyAgICAvLyBPa2F5IHRvIG5vdCB0cmFjayBpbiBhcHAgb3BzIGFzIGF1ZGlvIHNlcnZlciBpcyB1cyBhbmQgaWYKKyAgICAvLyBkZXZpY2UgaXMgcm9vdGVkIHNlY3VyaXR5IG1vZGVsIGlzIGNvbnNpZGVyZWQgY29tcHJvbWlzZWQuCisgICAgaWYgKGlzQXVkaW9TZXJ2ZXJPclJvb3RVaWQodWlkKSkgcmV0dXJuOworCisgICAgUGVybWlzc2lvbkNvbnRyb2xsZXIgcGVybWlzc2lvbkNvbnRyb2xsZXI7CisgICAgU3RyaW5nMTYgcmVzb2x2ZWRPcFBhY2thZ2VOYW1lID0gcmVzb2x2ZUNhbGxpbmdQYWNrYWdlKAorICAgICAgICAgICAgcGVybWlzc2lvbkNvbnRyb2xsZXIsIG9wUGFja2FnZU5hbWUsIHVpZCk7CisgICAgaWYgKHJlc29sdmVkT3BQYWNrYWdlTmFtZS5zaXplKCkgPT0gMCkgeworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgQXBwT3BzTWFuYWdlciBhcHBPcHM7CisgICAgY29uc3QgaW50MzJfdCBvcCA9IGFwcE9wcy5wZXJtaXNzaW9uVG9PcENvZGUoc0FuZHJvaWRQZXJtaXNzaW9uUmVjb3JkQXVkaW8pOworICAgIGFwcE9wcy5maW5pc2hPcChvcCwgdWlkLCByZXNvbHZlZE9wUGFja2FnZU5hbWUpOworfQorCitib29sIGNhcHR1cmVBdWRpb091dHB1dEFsbG93ZWQocGlkX3QgcGlkLCB1aWRfdCB1aWQpIHsKKyAgICBpZiAoaXNBdWRpb1NlcnZlck9yUm9vdFVpZCh1aWQpKSByZXR1cm4gdHJ1ZTsKKyAgICBzdGF0aWMgY29uc3QgU3RyaW5nMTYgc0NhcHR1cmVBdWRpb091dHB1dCgiYW5kcm9pZC5wZXJtaXNzaW9uLkNBUFRVUkVfQVVESU9fT1VUUFVUIik7CisgICAgYm9vbCBvayA9IFBlcm1pc3Npb25DYWNoZTo6Y2hlY2tQZXJtaXNzaW9uKHNDYXB0dXJlQXVkaW9PdXRwdXQsIHBpZCwgdWlkKTsKKyAgICBpZiAoIW9rKSBBTE9HRSgiUmVxdWVzdCByZXF1aXJlcyBhbmRyb2lkLnBlcm1pc3Npb24uQ0FQVFVSRV9BVURJT19PVVRQVVQiKTsKKyAgICByZXR1cm4gb2s7Cit9CisKK2Jvb2wgY2FwdHVyZUhvdHdvcmRBbGxvd2VkKHBpZF90IHBpZCwgdWlkX3QgdWlkKSB7CisgICAgLy8gQ0FQVFVSRV9BVURJT19IT1RXT1JEIHBlcm1pc3Npb24gaW1wbGllcyBSRUNPUkRfQVVESU8gcGVybWlzc2lvbgorICAgIGJvb2wgb2sgPSByZWNvcmRpbmdBbGxvd2VkKFN0cmluZzE2KCIiKSwgcGlkLCB1aWQpOworCisgICAgaWYgKG9rKSB7CisgICAgICAgIHN0YXRpYyBjb25zdCBTdHJpbmcxNiBzQ2FwdHVyZUhvdHdvcmRBbGxvd2VkKCJhbmRyb2lkLnBlcm1pc3Npb24uQ0FQVFVSRV9BVURJT19IT1RXT1JEIik7CisgICAgICAgIC8vIElNUE9SVEFOVDogVXNlIFBlcm1pc3Npb25DYWNoZSAtIG5vdCBhIHJ1bnRpbWUgcGVybWlzc2lvbiBhbmQgbWF5IG5vdCBjaGFuZ2UuCisgICAgICAgIG9rID0gUGVybWlzc2lvbkNhY2hlOjpjaGVja0NhbGxpbmdQZXJtaXNzaW9uKHNDYXB0dXJlSG90d29yZEFsbG93ZWQpOworICAgIH0KKyAgICBpZiAoIW9rKSBBTE9HRSgiYW5kcm9pZC5wZXJtaXNzaW9uLkNBUFRVUkVfQVVESU9fSE9UV09SRCIpOworICAgIHJldHVybiBvazsKK30KKworYm9vbCBzZXR0aW5nc0FsbG93ZWQoKSB7CisgICAgLy8gZ2l2ZW4gdGhpcyBpcyBhIHBlcm1pc3Npb24gY2hlY2ssIGNvdWxkIHRoaXMgYmUgaXNBdWRpb1NlcnZlck9yUm9vdFVpZCgpPworICAgIGlmIChpc0F1ZGlvU2VydmVyVWlkKElQQ1RocmVhZFN0YXRlOjpzZWxmKCktPmdldENhbGxpbmdVaWQoKSkpIHJldHVybiB0cnVlOworICAgIHN0YXRpYyBjb25zdCBTdHJpbmcxNiBzQXVkaW9TZXR0aW5ncygiYW5kcm9pZC5wZXJtaXNzaW9uLk1PRElGWV9BVURJT19TRVRUSU5HUyIpOworICAgIC8vIElNUE9SVEFOVDogVXNlIFBlcm1pc3Npb25DYWNoZSAtIG5vdCBhIHJ1bnRpbWUgcGVybWlzc2lvbiBhbmQgbWF5IG5vdCBjaGFuZ2UuCisgICAgYm9vbCBvayA9IFBlcm1pc3Npb25DYWNoZTo6Y2hlY2tDYWxsaW5nUGVybWlzc2lvbihzQXVkaW9TZXR0aW5ncyk7CisgICAgaWYgKCFvaykgQUxPR0UoIlJlcXVlc3QgcmVxdWlyZXMgYW5kcm9pZC5wZXJtaXNzaW9uLk1PRElGWV9BVURJT19TRVRUSU5HUyIpOworICAgIHJldHVybiBvazsKK30KKworYm9vbCBtb2RpZnlBdWRpb1JvdXRpbmdBbGxvd2VkKCkgeworICAgIHN0YXRpYyBjb25zdCBTdHJpbmcxNiBzTW9kaWZ5QXVkaW9Sb3V0aW5nQWxsb3dlZCgiYW5kcm9pZC5wZXJtaXNzaW9uLk1PRElGWV9BVURJT19ST1VUSU5HIik7CisgICAgLy8gSU1QT1JUQU5UOiBVc2UgUGVybWlzc2lvbkNhY2hlIC0gbm90IGEgcnVudGltZSBwZXJtaXNzaW9uIGFuZCBtYXkgbm90IGNoYW5nZS4KKyAgICBib29sIG9rID0gUGVybWlzc2lvbkNhY2hlOjpjaGVja0NhbGxpbmdQZXJtaXNzaW9uKHNNb2RpZnlBdWRpb1JvdXRpbmdBbGxvd2VkKTsKKyAgICBpZiAoIW9rKSBBTE9HRSgiYW5kcm9pZC5wZXJtaXNzaW9uLk1PRElGWV9BVURJT19ST1VUSU5HIik7CisgICAgcmV0dXJuIG9rOworfQorCitib29sIG1vZGlmeURlZmF1bHRBdWRpb0VmZmVjdHNBbGxvd2VkKCkgeworICAgIHN0YXRpYyBjb25zdCBTdHJpbmcxNiBzTW9kaWZ5RGVmYXVsdEF1ZGlvRWZmZWN0c0FsbG93ZWQoCisgICAgICAgICAgICAiYW5kcm9pZC5wZXJtaXNzaW9uLk1PRElGWV9ERUZBVUxUX0FVRElPX0VGRkVDVFMiKTsKKyAgICAvLyBJTVBPUlRBTlQ6IFVzZSBQZXJtaXNzaW9uQ2FjaGUgLSBub3QgYSBydW50aW1lIHBlcm1pc3Npb24gYW5kIG1heSBub3QgY2hhbmdlLgorICAgIGJvb2wgb2sgPSBQZXJtaXNzaW9uQ2FjaGU6OmNoZWNrQ2FsbGluZ1Blcm1pc3Npb24oc01vZGlmeURlZmF1bHRBdWRpb0VmZmVjdHNBbGxvd2VkKTsKKworI2lmZGVmIFRBUkdFVF9BTkRST0lEX1RISU5HUworICAgIGlmICghb2spIHsKKyAgICAgICAgLy8gVXNlIGEgc2Vjb25kYXJ5IHBlcm1pc3Npb24gb24gQW5kcm9pZCBUaGluZ3MgdG8gYWxsb3cgYSBtb3JlIGxlbmllbnQgbGV2ZWwgb2YgcHJvdGVjdGlvbi4KKyAgICAgICAgc3RhdGljIGNvbnN0IFN0cmluZzE2IHNNb2RpZnlEZWZhdWx0QXVkaW9FZmZlY3RzQW5kcm9pZFRoaW5nc0FsbG93ZWQoCisgICAgICAgICAgICAgICAgImNvbS5nb29nbGUuYW5kcm9pZC50aGluZ3MucGVybWlzc2lvbi5NT0RJRllfREVGQVVMVF9BVURJT19FRkZFQ1RTIik7CisgICAgICAgIG9rID0gUGVybWlzc2lvbkNhY2hlOjpjaGVja0NhbGxpbmdQZXJtaXNzaW9uKAorICAgICAgICAgICAgICAgIHNNb2RpZnlEZWZhdWx0QXVkaW9FZmZlY3RzQW5kcm9pZFRoaW5nc0FsbG93ZWQpOworICAgIH0KKyAgICBpZiAoIW9rKSBBTE9HRSgiY29tLmdvb2dsZS5hbmRyb2lkLnRoaW5ncy5wZXJtaXNzaW9uLk1PRElGWV9ERUZBVUxUX0FVRElPX0VGRkVDVFMiKTsKKyNlbHNlCisgICAgaWYgKCFvaykgQUxPR0UoImFuZHJvaWQucGVybWlzc2lvbi5NT0RJRllfREVGQVVMVF9BVURJT19FRkZFQ1RTIik7CisjZW5kaWYKKyAgICByZXR1cm4gb2s7Cit9CisKK2Jvb2wgZHVtcEFsbG93ZWQoKSB7CisgICAgc3RhdGljIGNvbnN0IFN0cmluZzE2IHNEdW1wKCJhbmRyb2lkLnBlcm1pc3Npb24uRFVNUCIpOworICAgIC8vIElNUE9SVEFOVDogVXNlIFBlcm1pc3Npb25DYWNoZSAtIG5vdCBhIHJ1bnRpbWUgcGVybWlzc2lvbiBhbmQgbWF5IG5vdCBjaGFuZ2UuCisgICAgYm9vbCBvayA9IFBlcm1pc3Npb25DYWNoZTo6Y2hlY2tDYWxsaW5nUGVybWlzc2lvbihzRHVtcCk7CisgICAgLy8gY29udmVudGlvbiBpcyBmb3IgY2FsbGVyIHRvIGR1bXAgYW4gZXJyb3IgbWVzc2FnZSB0byBmZCBpbnN0ZWFkIG9mIGxvZ2dpbmcgaGVyZQorICAgIC8vaWYgKCFvaykgQUxPR0UoIlJlcXVlc3QgcmVxdWlyZXMgYW5kcm9pZC5wZXJtaXNzaW9uLkRVTVAiKTsKKyAgICByZXR1cm4gb2s7Cit9CisKK2Jvb2wgbW9kaWZ5UGhvbmVTdGF0ZUFsbG93ZWQocGlkX3QgcGlkLCB1aWRfdCB1aWQpIHsKKyAgICBzdGF0aWMgY29uc3QgU3RyaW5nMTYgc01vZGlmeVBob25lU3RhdGUoImFuZHJvaWQucGVybWlzc2lvbi5NT0RJRllfUEhPTkVfU1RBVEUiKTsKKyAgICBib29sIG9rID0gUGVybWlzc2lvbkNhY2hlOjpjaGVja1Blcm1pc3Npb24oc01vZGlmeVBob25lU3RhdGUsIHBpZCwgdWlkKTsKKyAgICBpZiAoIW9rKSBBTE9HRSgiUmVxdWVzdCByZXF1aXJlcyBhbmRyb2lkLnBlcm1pc3Npb24uTU9ESUZZX1BIT05FX1NUQVRFIik7CisgICAgcmV0dXJuIG9rOworfQorCitzdGF0dXNfdCBjaGVja0lNZW1vcnkoY29uc3Qgc3A8SU1lbW9yeT4mIGlNZW1vcnkpCit7CisgICAgaWYgKGlNZW1vcnkgPT0gMCkgeworICAgICAgICBBTE9HRSgiJXMgY2hlY2sgZmFpbGVkOiBOVUxMIElNZW1vcnkgcG9pbnRlciIsIF9fRlVOQ1RJT05fXyk7CisgICAgICAgIHJldHVybiBCQURfVkFMVUU7CisgICAgfQorCisgICAgc3A8SU1lbW9yeUhlYXA+IGhlYXAgPSBpTWVtb3J5LT5nZXRNZW1vcnkoKTsKKyAgICBpZiAoaGVhcCA9PSAwKSB7CisgICAgICAgIEFMT0dFKCIlcyBjaGVjayBmYWlsZWQ6IE5VTEwgaGVhcCBwb2ludGVyIiwgX19GVU5DVElPTl9fKTsKKyAgICAgICAgcmV0dXJuIEJBRF9WQUxVRTsKKyAgICB9CisKKyAgICBvZmZfdCBzaXplID0gbHNlZWsoaGVhcC0+Z2V0SGVhcElEKCksIDAsIFNFRUtfRU5EKTsKKyAgICBsc2VlayhoZWFwLT5nZXRIZWFwSUQoKSwgMCwgU0VFS19TRVQpOworCisgICAgaWYgKGlNZW1vcnktPnBvaW50ZXIoKSA9PSBOVUxMIHx8IHNpemUgPCAob2ZmX3QpaU1lbW9yeS0+c2l6ZSgpKSB7CisgICAgICAgIEFMT0dFKCIlcyBjaGVjayBmYWlsZWQ6IHBvaW50ZXIgJXAgc2l6ZSAlenUgZmQgc2l6ZSAldSIsCisgICAgICAgICAgICAgIF9fRlVOQ1RJT05fXywgaU1lbW9yeS0+cG9pbnRlcigpLCBpTWVtb3J5LT5zaXplKCksICh1aW50MzJfdClzaXplKTsKKyAgICAgICAgcmV0dXJuIEJBRF9WQUxVRTsKKyAgICB9CisKKyAgICByZXR1cm4gTk9fRVJST1I7Cit9CisKK30gLy8gbmFtZXNwYWNlIGFuZHJvaWQKZGlmZiAtLWdpdCBhL21lZGlhL3V0aWxzL1RpbWVDaGVjay5jcHAgYi9tZWRpYS91dGlscy9UaW1lQ2hlY2suY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU5Y2Y0ZWYKLS0tIC9kZXYvbnVsbAorKysgYi9tZWRpYS91dGlscy9UaW1lQ2hlY2suY3BwCkBAIC0wLDAgKzEsOTMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTggVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworCisKKyNpbmNsdWRlIDx1dGlscy9Mb2cuaD4KKyNpbmNsdWRlIDxtZWRpYS9UaW1lQ2hlY2suaD4KKyNpbmNsdWRlIDxtZWRpYS9FdmVudExvZy5oPgorCituYW1lc3BhY2UgYW5kcm9pZCB7CisKKy8qIHN0YXRpYyAqLworc3A8VGltZUNoZWNrOjpUaW1lQ2hlY2tUaHJlYWQ+IFRpbWVDaGVjazo6Z2V0VGltZUNoZWNrVGhyZWFkKCkKK3sKKyAgICBzdGF0aWMgc3A8VGltZUNoZWNrOjpUaW1lQ2hlY2tUaHJlYWQ+IHNUaW1lQ2hlY2tUaHJlYWQgPSBuZXcgVGltZUNoZWNrOjpUaW1lQ2hlY2tUaHJlYWQoKTsKKyAgICByZXR1cm4gc1RpbWVDaGVja1RocmVhZDsKK30KKworVGltZUNoZWNrOjpUaW1lQ2hlY2soY29uc3QgY2hhciAqdGFnLCB1aW50MzJfdCB0aW1lb3V0TXMpCisgICAgOiBtRW5kVGltZU5zKGdldFRpbWVDaGVja1RocmVhZCgpLT5zdGFydE1vbml0b3JpbmcodGFnLCB0aW1lb3V0TXMpKQoreworfQorCitUaW1lQ2hlY2s6On5UaW1lQ2hlY2soKSB7CisgICAgZ2V0VGltZUNoZWNrVGhyZWFkKCktPnN0b3BNb25pdG9yaW5nKG1FbmRUaW1lTnMpOworfQorCitUaW1lQ2hlY2s6OlRpbWVDaGVja1RocmVhZDo6flRpbWVDaGVja1RocmVhZCgpCit7CisgICAgQXV0b011dGV4IF9sKG1NdXRleCk7CisgICAgcmVxdWVzdEV4aXQoKTsKKyAgICBtTW9uaXRvclJlcXVlc3RzLmNsZWFyKCk7CisgICAgbUNvbmQuc2lnbmFsKCk7Cit9CisKK25zZWNzX3QgVGltZUNoZWNrOjpUaW1lQ2hlY2tUaHJlYWQ6OnN0YXJ0TW9uaXRvcmluZyhjb25zdCBjaGFyICp0YWcsIHVpbnQzMl90IHRpbWVvdXRNcykgeworICAgIE11dGV4OjpBdXRvbG9jayBfbChtTXV0ZXgpOworICAgIG5zZWNzX3QgZW5kVGltZU5zID0gc3lzdGVtVGltZSgpICsgbWlsbGlzZWNvbmRzKHRpbWVvdXRNcyk7CisgICAgZm9yICg7IG1Nb25pdG9yUmVxdWVzdHMuaW5kZXhPZktleShlbmRUaW1lTnMpID49IDA7ICsrZW5kVGltZU5zKTsKKyAgICBtTW9uaXRvclJlcXVlc3RzLmFkZChlbmRUaW1lTnMsIHRhZyk7CisgICAgbUNvbmQuc2lnbmFsKCk7CisgICAgcmV0dXJuIGVuZFRpbWVOczsKK30KKwordm9pZCBUaW1lQ2hlY2s6OlRpbWVDaGVja1RocmVhZDo6c3RvcE1vbml0b3JpbmcobnNlY3NfdCBlbmRUaW1lTnMpIHsKKyAgICBNdXRleDo6QXV0b2xvY2sgX2wobU11dGV4KTsKKyAgICBtTW9uaXRvclJlcXVlc3RzLnJlbW92ZUl0ZW0oZW5kVGltZU5zKTsKKyAgICBtQ29uZC5zaWduYWwoKTsKK30KKworYm9vbCBUaW1lQ2hlY2s6OlRpbWVDaGVja1RocmVhZDo6dGhyZWFkTG9vcCgpCit7CisgICAgc3RhdHVzX3Qgc3RhdHVzID0gVElNRURfT1VUOworICAgIGNvbnN0IGNoYXIgKnRhZzsKKyAgICB7CisgICAgICAgIEF1dG9NdXRleCBfbChtTXV0ZXgpOworCisgICAgICAgIGlmIChleGl0UGVuZGluZygpKSB7CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKworICAgICAgICBuc2Vjc190IGVuZFRpbWVOcyA9IElOVDY0X01BWDsKKyAgICAgICAgLy8gS2V5ZWRWZWN0b3IgbU1vbml0b3JSZXF1ZXN0cyBpcyBvcmRlcmVkIHNvIHRha2UgZmlyc3QgZW50cnkgYXMgbmV4dCB0aW1lb3V0CisgICAgICAgIGlmIChtTW9uaXRvclJlcXVlc3RzLnNpemUoKSAhPSAwKSB7CisgICAgICAgICAgICBlbmRUaW1lTnMgPSBtTW9uaXRvclJlcXVlc3RzLmtleUF0KDApOworICAgICAgICAgICAgdGFnID0gbU1vbml0b3JSZXF1ZXN0cy52YWx1ZUF0KDApOworICAgICAgICB9CisKKyAgICAgICAgY29uc3QgbnNlY3NfdCB3YWl0VGltZU5zID0gZW5kVGltZU5zIC0gc3lzdGVtVGltZSgpOworICAgICAgICBpZiAod2FpdFRpbWVOcyA+IDApIHsKKyAgICAgICAgICAgIHN0YXR1cyA9IG1Db25kLndhaXRSZWxhdGl2ZShtTXV0ZXgsIHdhaXRUaW1lTnMpOworICAgICAgICB9CisgICAgfQorICAgIGlmIChzdGF0dXMgIT0gTk9fRVJST1IpIHsKKyAgICAgICAgTE9HX0VWRU5UX1NUUklORyhMT0dUQUdfQVVESU9fQklOREVSX1RJTUVPVVQsIHRhZyk7CisgICAgICAgIExPR19BTFdBWVNfRkFUQUwoIlRpbWVDaGVjayB0aW1lb3V0IGZvciAlcyIsIHRhZyk7CisgICAgfQorICAgIHJldHVybiB0cnVlOworfQorCit9OyAvLyBuYW1lc3BhY2UgYW5kcm9pZApkaWZmIC0tZ2l0IGEvbWVkaWEvdXRpbHMvaW5jbHVkZS9tZWRpYXV0aWxzL0FJbWFnZVJlYWRlclV0aWxzLmggYi9tZWRpYS91dGlscy9pbmNsdWRlL21lZGlhdXRpbHMvQUltYWdlUmVhZGVyVXRpbHMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jOWJkZTFmCi0tLSAvZGV2L251bGwKKysrIGIvbWVkaWEvdXRpbHMvaW5jbHVkZS9tZWRpYXV0aWxzL0FJbWFnZVJlYWRlclV0aWxzLmgKQEAgLTAsMCArMSwzNSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxOCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCisKKyNpZm5kZWYgQUlNQUdFX1JFQURFUl9VVElMU19ICisjZGVmaW5lIEFJTUFHRV9SRUFERVJfVVRJTFNfSAorCisjaW5jbHVkZSA8Y3V0aWxzL25hdGl2ZV9oYW5kbGUuaD4KKyNpbmNsdWRlIDxhbmRyb2lkL2hhcmR3YXJlL2dyYXBoaWNzL2J1ZmZlcnF1ZXVlLzEuMC9JR3JhcGhpY0J1ZmZlclByb2R1Y2VyLmg+CisKK25hbWVzcGFjZSBhbmRyb2lkIHsKK25hbWVzcGFjZSBhaW1nIHsKKwordXNpbmcgSEdyYXBoaWNCdWZmZXJQcm9kdWNlciA9IGhhcmR3YXJlOjpncmFwaGljczo6YnVmZmVycXVldWU6OlYxXzA6OklHcmFwaGljQnVmZmVyUHJvZHVjZXI7CisKKy8vIFJldHJpZXZlcyBIR3JhcGhpY0J1ZmZlclByb2R1Y2VyIGNvcnJlc3BvbmRpbmcgdG8gdGhlIG5hdGl2ZV9oYW5kbGVfdAorLy8gcHJvdmlkZWQgKHRoaXMgbmF0aXZlIGhhbmRsZSBNVVNUIGhhdmUgYmVlbiBvYnRhaW5lZCBieSBBSW1hZ2VSZWFkZXJfZ2V0V2luZG93TmF0aXZlSGFuZGxlKCkpLgorc3A8SEdyYXBoaWNCdWZmZXJQcm9kdWNlcj4gQUltYWdlUmVhZGVyX2dldEhHQlBGcm9tSGFuZGxlKGNvbnN0IG5hdGl2ZV9oYW5kbGVfdCAqaGFuZGxlKTsKKworfS8vIG5hbWVzcGFjZSBhaW1nCit9Ly8gbmFtZXNwYWNlIGFuZHJvaWQKKworI2VuZGlmIC8vQUlNQUdFX1JFQURFUl9VVElMU19ICmRpZmYgLS1naXQgYS9tZWRpYS91dGlscy9pbmNsdWRlL21lZGlhdXRpbHMvRXZlbnRMb2cuaCBiL21lZGlhL3V0aWxzL2luY2x1ZGUvbWVkaWF1dGlscy9FdmVudExvZy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU1M2QzYmQKLS0tIC9kZXYvbnVsbAorKysgYi9tZWRpYS91dGlscy9pbmNsdWRlL21lZGlhdXRpbHMvRXZlbnRMb2cuaApAQCAtMCwwICsxLDI4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE4IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KKyNpZm5kZWYgQU5EUk9JRF9BVURJT19FVkVOVF9MT0dfSF8KKyNkZWZpbmUgQU5EUk9JRF9BVURJT19FVkVOVF9MT0dfSF8KKworbmFtZXNwYWNlIGFuZHJvaWQgeworCisvLyBrZWVwIHZhbHVlcyBpbiBzeW5jIHdpdGggZnJhbWV3b3Jrcy9hdi9tZWRpYS91dGlscy9FdmVudExvZ1RhZ3MubG9ndGFncworZW51bSB7CisgIExPR1RBR19BVURJT19CSU5ERVJfVElNRU9VVCA9IDYxMDAwLAorfTsKKworfSAgLy8gbmFtZXNwYWNlIGFuZHJvaWQKKworI2VuZGlmICAvLyBBTkRST0lEX0FVRElPX0VWRU5UX0xPR19IXwpkaWZmIC0tZ2l0IGEvbWVkaWEvdXRpbHMvaW5jbHVkZS9tZWRpYXV0aWxzL1NlcnZpY2VVdGlsaXRpZXMuaCBiL21lZGlhL3V0aWxzL2luY2x1ZGUvbWVkaWF1dGlscy9TZXJ2aWNlVXRpbGl0aWVzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOThmNTRjMgotLS0gL2Rldi9udWxsCisrKyBiL21lZGlhL3V0aWxzL2luY2x1ZGUvbWVkaWF1dGlscy9TZXJ2aWNlVXRpbGl0aWVzLmgKQEAgLTAsMCArMSw3NSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCisKKyNpbmNsdWRlIDx1bmlzdGQuaD4KKworI2luY2x1ZGUgPGJpbmRlci9JTWVtb3J5Lmg+CisjaW5jbHVkZSA8YmluZGVyL1Blcm1pc3Npb25Db250cm9sbGVyLmg+CisjaW5jbHVkZSA8Y3V0aWxzL211bHRpdXNlci5oPgorI2luY2x1ZGUgPHByaXZhdGUvYW5kcm9pZF9maWxlc3lzdGVtX2NvbmZpZy5oPgorCituYW1lc3BhY2UgYW5kcm9pZCB7CisKKy8vIEF1ZGlvIHBlcm1pc3Npb24gdXRpbGl0aWVzCisKKy8vIFVzZWQgZm9yIGNhbGxzIHRoYXQgc2hvdWxkIG9yaWdpbmF0ZSBmcm9tIHN5c3RlbSBzZXJ2aWNlcy4KKy8vIFdlIGFsbG93IHRoYXQgc29tZSBzZXJ2aWNlcyBtaWdodCBoYXZlIHNlcGFyYXRlIHByb2Nlc3NlcyB0bworLy8gaGFuZGxlIG11bHRpcGxlIHVzZXJzLCBlLmcuIHUxMF9zeXN0ZW0sIHUxMF9ibHVldG9vdGgsIHUxMF9yYWRpby4KK3N0YXRpYyBpbmxpbmUgYm9vbCBpc1NlcnZpY2VVaWQodWlkX3QgdWlkKSB7CisgICAgcmV0dXJuIG11bHRpdXNlcl9nZXRfYXBwX2lkKHVpZCkgPCBBSURfQVBQX1NUQVJUOworfQorCisvLyBVc2VkIGZvciBjYWxscyB0aGF0IHNob3VsZCBvcmlnaW5hdGUgZnJvbSBhdWRpb3NlcnZlci4KK3N0YXRpYyBpbmxpbmUgYm9vbCBpc0F1ZGlvU2VydmVyVWlkKHVpZF90IHVpZCkgeworICAgIHJldHVybiB1aWQgPT0gQUlEX0FVRElPU0VSVkVSOworfQorCisvLyBVc2VkIGZvciBzb21lIHBlcm1pc3Npb24gY2hlY2tzLgorLy8gQUlEX1JPT1QgaXMgT0sgZm9yIGNvbW1hbmQtbGluZSB0ZXN0cy4gIE5hdGl2ZSBhdWRpb3NlcnZlciBhbHdheXMgT0suCitzdGF0aWMgaW5saW5lIGJvb2wgaXNBdWRpb1NlcnZlck9yUm9vdFVpZCh1aWRfdCB1aWQpIHsKKyAgICByZXR1cm4gdWlkID09IEFJRF9BVURJT1NFUlZFUiB8fCB1aWQgPT0gQUlEX1JPT1Q7Cit9CisKKy8vIFVzZWQgZm9yIGNhbGxzIHRoYXQgc2hvdWxkIGNvbWUgZnJvbSBzeXN0ZW0gc2VydmVyIG9yIGludGVybmFsLgorLy8gTm90ZTogc3lzdGVtIHNlcnZlciBpcyBtdWx0aXByb2Nlc3MgZm9yIG11bHRpcGxlIHVzZXJzLiAgYXVkaW9zZXJ2ZXIgaXMgbm90Lgorc3RhdGljIGlubGluZSBib29sIGlzQXVkaW9TZXJ2ZXJPclN5c3RlbVNlcnZlclVpZCh1aWRfdCB1aWQpIHsKKyAgICByZXR1cm4gbXVsdGl1c2VyX2dldF9hcHBfaWQodWlkKSA9PSBBSURfU1lTVEVNIHx8IHVpZCA9PSBBSURfQVVESU9TRVJWRVI7Cit9CisKKy8vIE1lZGlhc2VydmVyIG1heSBmb3J3YXJkIHRoZSBjbGllbnQgUElEIGFuZCBVSUQgYXMgcGFydCBvZiBhIGJpbmRlciBpbnRlcmZhY2UgY2FsbDsKKy8vIG90aGVyd2lzZSB0aGUgY2FsbGluZyBVSUQgbXVzdCBiZSBlcXVhbCB0byB0aGUgY2xpZW50IFVJRC4KK3N0YXRpYyBpbmxpbmUgYm9vbCBpc0F1ZGlvU2VydmVyT3JNZWRpYVNlcnZlclVpZCh1aWRfdCB1aWQpIHsKKyAgICBzd2l0Y2ggKHVpZCkgeworICAgIGNhc2UgQUlEX01FRElBOgorICAgIGNhc2UgQUlEX0FVRElPU0VSVkVSOgorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICBkZWZhdWx0OgorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorfQorCitib29sIHJlY29yZGluZ0FsbG93ZWQoY29uc3QgU3RyaW5nMTYmIG9wUGFja2FnZU5hbWUsIHBpZF90IHBpZCwgdWlkX3QgdWlkKTsKK2Jvb2wgc3RhcnRSZWNvcmRpbmcoY29uc3QgU3RyaW5nMTYmIG9wUGFja2FnZU5hbWUsIHBpZF90IHBpZCwgdWlkX3QgdWlkKTsKK3ZvaWQgZmluaXNoUmVjb3JkaW5nKGNvbnN0IFN0cmluZzE2JiBvcFBhY2thZ2VOYW1lLCB1aWRfdCB1aWQpOworYm9vbCBjYXB0dXJlQXVkaW9PdXRwdXRBbGxvd2VkKHBpZF90IHBpZCwgdWlkX3QgdWlkKTsKK2Jvb2wgY2FwdHVyZUhvdHdvcmRBbGxvd2VkKHBpZF90IHBpZCwgdWlkX3QgdWlkKTsKK2Jvb2wgc2V0dGluZ3NBbGxvd2VkKCk7Citib29sIG1vZGlmeUF1ZGlvUm91dGluZ0FsbG93ZWQoKTsKK2Jvb2wgbW9kaWZ5RGVmYXVsdEF1ZGlvRWZmZWN0c0FsbG93ZWQoKTsKK2Jvb2wgZHVtcEFsbG93ZWQoKTsKK2Jvb2wgbW9kaWZ5UGhvbmVTdGF0ZUFsbG93ZWQocGlkX3QgcGlkLCB1aWRfdCB1aWQpOworc3RhdHVzX3QgY2hlY2tJTWVtb3J5KGNvbnN0IHNwPElNZW1vcnk+JiBpTWVtb3J5KTsKK30KZGlmZiAtLWdpdCBhL21lZGlhL2xpYm1lZGlhL2luY2x1ZGUvbWVkaWEvVGltZUNoZWNrLmggYi9tZWRpYS91dGlscy9pbmNsdWRlL21lZGlhdXRpbHMvVGltZUNoZWNrLmgKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIG1lZGlhL2xpYm1lZGlhL2luY2x1ZGUvbWVkaWEvVGltZUNoZWNrLmgKcmVuYW1lIHRvIG1lZGlhL3V0aWxzL2luY2x1ZGUvbWVkaWF1dGlscy9UaW1lQ2hlY2suaApkaWZmIC0tZ2l0IGEvcGFja2FnZXMvTWVkaWFDb21wb25lbnRzL0FuZHJvaWQubWsgYi9wYWNrYWdlcy9NZWRpYUNvbXBvbmVudHMvQW5kcm9pZC5tawpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZGVmOWRjNS4uMDAwMDAwMAotLS0gYS9wYWNrYWdlcy9NZWRpYUNvbXBvbmVudHMvQW5kcm9pZC5taworKysgL2Rldi9udWxsCkBAIC0xLDcyICswLDAgQEAKLSMKLSMgQ29weXJpZ2h0IDIwMTcgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAotIwotIyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKLSMgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgotIyBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLSMKLSMgICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLSMKLSMgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQotIyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAotIyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KLSMgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAotIyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KLSMKLQotIyBUaGlzIHBhY2thZ2UgaXMgZXhjbHVkZWQgZnJvbSBidWlsZCBmb3Igbm93IHNpbmNlIEFQSXMgdXNpbmcgdGhpcyBhcGsgYmVjYW1lIGhpZGRlbi4KLSMKLSNMT0NBTF9QQVRIIDo9ICQoY2FsbCBteS1kaXIpCi0jaWZuZXEgKCQoVEFSR0VUX0JVSUxEX1BESyksdHJ1ZSkgIyBCdWlsZCBNZWRpYUNvbXBvbmVudHMgb25seSBpZiB0aGlzIGlzIG5vdCBhIFBESyBidWlsZC4gIE1lZGlhQ29tcG9uZW50cyB3b24ndAotIyMgYnVpbGQgaW4gUERLIGJ1aWxkcyBiZWNhdXNlIGZyYW1ld29ya3MvYmFzZS9jb3JlL2phdmEgaXMgbm90IGF2YWlsYWJsZSBidXQKLSMjIElNZWRpYVNlc3Npb24yLmFpZGwgYW5kIElNZWRpYUNvbnRyb2xsZXIyLmFpZGwgYXJlIHVzaW5nIGNsYXNzZXMgZnJvbQotIyMgZnJhbWV3b3Jrcy9iYXNlL2NvcmUvamF2YS4KLSMKLSNpbmNsdWRlICQoQ0xFQVJfVkFSUykKLSMKLSNMT0NBTF9QQUNLQUdFX05BTUUgOj0gTWVkaWFDb21wb25lbnRzCi0jTE9DQUxfTU9EVUxFX09XTkVSIDo9IGdvb2dsZQotIwotIyMgVE9ETzogY3JlYXRlIGEgc2VwYXJhdGUga2V5IGZvciB0aGlzIHBhY2thZ2UuCi0jTE9DQUxfQ0VSVElGSUNBVEUgOj0gcGxhdGZvcm0KLSMKLSMjIFRPRE86IFVzZSBTeXN0ZW0gU0RLIG9uY2UgcHVibGljIEFQSXMgYXJlIGFwcHJvdmVkCi0jIyBMT0NBTF9TREtfVkVSU0lPTiA6PSBzeXN0ZW1fY3VycmVudAotI0xPQ0FMX1BSSVZBVEVfUExBVEZPUk1fQVBJUyA6PSB0cnVlCi0jCi0jTE9DQUxfU1JDX0ZJTEVTIDo9IFwKLSMgICAgJChjYWxsIGFsbC1qYXZhLWZpbGVzLXVuZGVyLCBzcmMpIFwKLSMgICAgJChjYWxsIGFsbC1JYWlkbC1maWxlcy11bmRlciwgc3JjKQotIwotI0xPQ0FMX1BST0dVQVJEX0ZMQUdfRklMRVMgOj0gcHJvZ3VhcmQuY2ZnCi0jCi0jTE9DQUxfTVVMVElMSUIgOj0gZmlyc3QKLSMKLSNMT0NBTF9KQVZBX0xJQlJBUklFUyArPSBhbmRyb2lkLXN1cHBvcnQtYW5ub3RhdGlvbnMKLSMKLSMjIFRvIGVtYmVkIG5hdGl2ZSBsaWJyYXJpZXMgaW4gcGFja2FnZSwgdW5jb21tZW50IHRoZSBsaW5lcyBiZWxvdy4KLSMjTE9DQUxfTU9EVUxFX1RBR1MgOj0gc2FtcGxlcwotIyNMT0NBTF9KTklfU0hBUkVEX0xJQlJBUklFUyA6PSBcCi0jIyAgICBsaWJhYWNleHRyYWN0b3IgXAotIyMgICAgbGliYW1yZXh0cmFjdG9yIFwKLSMjICAgIGxpYmZsYWNleHRyYWN0b3IgXAotIyMgICAgbGlibWlkaWV4dHJhY3RvciBcCi0jIyAgICBsaWJta3ZleHRyYWN0b3IgXAotIyMgICAgbGlibXAzZXh0cmFjdG9yIFwKLSMjICAgIGxpYm1wNGV4dHJhY3RvciBcCi0jIyAgICBsaWJtcGVnMmV4dHJhY3RvciBcCi0jIyAgICBsaWJvZ2dleHRyYWN0b3IgXAotIyMgICAgbGlid2F2ZXh0cmFjdG9yIFwKLSMKLSMjIFRPRE86IFJlbW92ZSBkZXBlbmRlbmN5IHdpdGggb3RoZXIgc3VwcG9ydCBsaWJyYXJpZXMuCi0jTE9DQUxfU1RBVElDX0FORFJPSURfTElCUkFSSUVTICs9IFwKLSMgICAgYW5kcm9pZC1zdXBwb3J0LXY0IFwKLSMgICAgYW5kcm9pZC1zdXBwb3J0LXY3LWFwcGNvbXBhdCBcCi0jICAgIGFuZHJvaWQtc3VwcG9ydC12Ny1wYWxldHRlCi0jTE9DQUxfVVNFX0FBUFQyIDo9IHRydWUKLSMKLSNpbmNsdWRlICQoQlVJTERfUEFDS0FHRSkKLSMKLSNlbmRpZiAgIyBpZm5lcSAoJChUQVJHRVRfQlVJTERfUERLKSx0cnVlKQotIwotI2luY2x1ZGUgJChjYWxsIGFsbC1tYWtlZmlsZXMtdW5kZXIsJChMT0NBTF9QQVRIKSkKZGlmZiAtLWdpdCBhL3BhY2thZ2VzL01lZGlhQ29tcG9uZW50cy9BbmRyb2lkTWFuaWZlc3QueG1sIGIvcGFja2FnZXMvTWVkaWFDb21wb25lbnRzL0FuZHJvaWRNYW5pZmVzdC54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDUwZmRjYTEuLjAwMDAwMDAKLS0tIGEvcGFja2FnZXMvTWVkaWFDb21wb25lbnRzL0FuZHJvaWRNYW5pZmVzdC54bWwKKysrIC9kZXYvbnVsbApAQCAtMSwxNSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ1dGYtOCI/PgotPG1hbmlmZXN0IHhtbG5zOmFuZHJvaWQ9Imh0dHA6Ly9zY2hlbWFzLmFuZHJvaWQuY29tL2Fway9yZXMvYW5kcm9pZCIKLSAgICBwYWNrYWdlPSJjb20uYW5kcm9pZC5tZWRpYS51cGRhdGUiCi0gICAgYW5kcm9pZDp2ZXJzaW9uQ29kZT0iMSIKLSAgICBhbmRyb2lkOnZlcnNpb25OYW1lPSIxLjAiID4KLQotICAgIDxhcHBsaWNhdGlvbgotICAgICAgICBhbmRyb2lkOmxhYmVsPSJNZWRpYSBDb21wb25lbnRzIFVwZGF0ZSIKLSAgICAgICAgYW5kcm9pZDptdWx0aUFyY2g9InRydWUiCi0gICAgICAgIGFuZHJvaWQ6YWxsb3dCYWNrdXA9ImZhbHNlIgotICAgICAgICBhbmRyb2lkOmhhc0NvZGU9ImZhbHNlIgotICAgICAgICBhbmRyb2lkOmV4dHJhY3ROYXRpdmVMaWJzPSJmYWxzZSI+Ci0gICAgPC9hcHBsaWNhdGlvbj4KLQotPC9tYW5pZmVzdD4KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL01lZGlhQ29tcG9uZW50cy9hcGV4L0FuZHJvaWQuYnAgYi9wYWNrYWdlcy9NZWRpYUNvbXBvbmVudHMvYXBleC9BbmRyb2lkLmJwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU3OTdlMTQKLS0tIC9kZXYvbnVsbAorKysgYi9wYWNrYWdlcy9NZWRpYUNvbXBvbmVudHMvYXBleC9BbmRyb2lkLmJwCkBAIC0wLDAgKzEsMzkgQEAKK2ZpbGVncm91cCB7CisgICAgbmFtZTogIm1lZGlhX2FpZGwiLAorICAgIHNyY3M6IFsKKyAgICAgICAgImphdmEvYW5kcm9pZC9tZWRpYS8qKi8qLmFpZGwiLAorICAgICAgICAiamF2YS9hbmRyb2lkL3NlcnZpY2UvKiovKi5haWRsIiwKKyAgICBdLAorICAgIGV4Y2x1ZGVfc3JjczogWworICAgICAgICAvLyBFeGNsdWRlIHRoZXNlIGFpZGxzIHRvIGF2b2lkIGVycm9ycyBzdWNoIGFzCisgICAgICAgIC8vICJSZWZ1c2luZyB0byBnZW5lcmF0ZSBjb2RlIHdpdGggdW5zdHJ1Y3R1cmVkIHBhcmNlbGFibGVzLiIKKyAgICAgICAgImphdmEvYW5kcm9pZC9tZWRpYS9NZWRpYURlc2NyaXB0aW9uLmFpZGwiLAorICAgICAgICAiamF2YS9hbmRyb2lkL21lZGlhL01lZGlhTWV0YWRhdGEuYWlkbCIsCisgICAgICAgICJqYXZhL2FuZHJvaWQvbWVkaWEvUmF0aW5nLmFpZGwiLAorICAgICAgICAiamF2YS9hbmRyb2lkL21lZGlhL2Jyb3dzZS9NZWRpYUJyb3dzZXIuYWlkbCIsCisgICAgICAgICJqYXZhL2FuZHJvaWQvbWVkaWEvc2Vzc2lvbi9NZWRpYVNlc3Npb24uYWlkbCIsCisgICAgICAgICJqYXZhL2FuZHJvaWQvbWVkaWEvc2Vzc2lvbi9QYXJjZWxhYmxlVm9sdW1lSW5mby5haWRsIiwKKyAgICAgICAgImphdmEvYW5kcm9pZC9tZWRpYS9zZXNzaW9uL1BsYXliYWNrU3RhdGUuYWlkbCIsCisgICAgXSwKK30KKworamF2YV9saWJyYXJ5IHsKKyAgICBuYW1lOiAibWVkaWEiLAorICAgIGluc3RhbGxhYmxlOiB0cnVlLAorICAgIHNka192ZXJzaW9uOiAic3lzdGVtX2N1cnJlbnQiLAorICAgIHNyY3M6IFsKKyAgICAgICAgImphdmEvYW5kcm9pZC9tZWRpYS8qKi8qLmphdmEiLAorICAgICAgICAiamF2YS9hbmRyb2lkL3NlcnZpY2UvKiovKi5qYXZhIiwKKyAgICAgICAgIjptZWRpYV9haWRsIiwKKyAgICAgICAgIjpmcmFtZXdvcmstbWVkaWEtYW5ub3RhdGlvbi1zcmNzIiwKKyAgICBdLAorICAgIGFpZGw6IHsKKyAgICAgICAgbG9jYWxfaW5jbHVkZV9kaXJzOiBbImphdmEiXSwKKyAgICAgICAgaW5jbHVkZV9kaXJzOiBbCisgICAgICAgICAgICAiZnJhbWV3b3Jrcy9iYXNlL2NvcmUvamF2YSIsCisgICAgICAgICAgICAvLyBmb3IgYW5kcm9pZC5ncmFwaGljcy5CaXRtYXAKKyAgICAgICAgICAgIC8vIGZyb20gSU1lZGlhQnJvd3NlclNlcnZpY2VDYWxsYmFjaworICAgICAgICAgICAgImZyYW1ld29ya3MvYmFzZS9ncmFwaGljcy9qYXZhIiwKKyAgICAgICAgICAgIF0sCisgICAgfSwKK30KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL01lZGlhQ29tcG9uZW50cy9hcGV4L2phdmEvYW5kcm9pZC9tZWRpYS9JUmVtb3RlVm9sdW1lQ29udHJvbGxlci5haWRsIGIvcGFja2FnZXMvTWVkaWFDb21wb25lbnRzL2FwZXgvamF2YS9hbmRyb2lkL21lZGlhL0lSZW1vdGVWb2x1bWVDb250cm9sbGVyLmFpZGwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTRhNGE0MgotLS0gL2Rldi9udWxsCisrKyBiL3BhY2thZ2VzL01lZGlhQ29tcG9uZW50cy9hcGV4L2phdmEvYW5kcm9pZC9tZWRpYS9JUmVtb3RlVm9sdW1lQ29udHJvbGxlci5haWRsCkBAIC0wLDAgKzEsMzIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworCitwYWNrYWdlIGFuZHJvaWQubWVkaWE7CisKK2ltcG9ydCBhbmRyb2lkLm1lZGlhLnNlc3Npb24uSVNlc3Npb25Db250cm9sbGVyOworCisvKioKKyAqIEFJREwgZm9yIHRoZSBNZWRpYVNlc3Npb25TZXJ2aWNlIHRvIHJlcG9ydCBpbnRlcmVzdGluZyBldmVudHMgb24gcmVtb3RlIHBsYXliYWNrCisgKiB0byBhIHZvbHVtZSBjb250cm9sIGRpYWxvZy4gU2VlIGFsc28gSVZvbHVtZUNvbnRyb2xsZXIgZm9yIHRoZSBBdWRpb1NlcnZpY2UgaGFsZi4KKyAqIFRPRE8gYWRkIGluIGJldHRlciBzdXBwb3J0IGZvciBtdWx0aXBsZSByZW1vdGUgc2Vzc2lvbnMuCisgKiBAaGlkZQorICovCitvbmV3YXkgaW50ZXJmYWNlIElSZW1vdGVWb2x1bWVDb250cm9sbGVyIHsKKyAgICB2b2lkIHJlbW90ZVZvbHVtZUNoYW5nZWQoSVNlc3Npb25Db250cm9sbGVyIHNlc3Npb24sIGludCBmbGFncyk7CisgICAgLy8gc2V0cyB0aGUgZGVmYXVsdCBzZXNzaW9uIHRvIHVzZSB3aXRoIHRoZSBzbGlkZXIsIHJlcGxhY2VzIHJlbW90ZVNsaWRlclZpc2liaWxpdHkKKyAgICAvLyBvbiBJVm9sdW1lQ29udHJvbGxlcgorICAgIHZvaWQgdXBkYXRlUmVtb3RlQ29udHJvbGxlcihJU2Vzc2lvbkNvbnRyb2xsZXIgc2Vzc2lvbik7Cit9CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9NZWRpYUNvbXBvbmVudHMvYXBleC9qYXZhL2FuZHJvaWQvbWVkaWEvSVNlc3Npb25Ub2tlbnNMaXN0ZW5lci5haWRsIGIvcGFja2FnZXMvTWVkaWFDb21wb25lbnRzL2FwZXgvamF2YS9hbmRyb2lkL21lZGlhL0lTZXNzaW9uVG9rZW5zTGlzdGVuZXIuYWlkbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jODNhMTllCi0tLSAvZGV2L251bGwKKysrIGIvcGFja2FnZXMvTWVkaWFDb21wb25lbnRzL2FwZXgvamF2YS9hbmRyb2lkL21lZGlhL0lTZXNzaW9uVG9rZW5zTGlzdGVuZXIuYWlkbApAQCAtMCwwICsxLDI3IEBACisvKgorICogQ29weXJpZ2h0IDIwMTggVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworCitwYWNrYWdlIGFuZHJvaWQubWVkaWE7CisKK2ltcG9ydCBhbmRyb2lkLm9zLkJ1bmRsZTsKKworLyoqCisgKiBMaXN0ZW5zIGZvciBjaGFuZ2VzIHRvIHRoZSBsaXN0IG9mIHNlc3Npb24gdG9rZW5zLgorICogQGhpZGUKKyAqLworb25ld2F5IGludGVyZmFjZSBJU2Vzc2lvblRva2Vuc0xpc3RlbmVyIHsKKyAgICB2b2lkIG9uU2Vzc2lvblRva2Vuc0NoYW5nZWQoaW4gTGlzdDxCdW5kbGU+IHRva2Vucyk7Cit9CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9NZWRpYUNvbXBvbmVudHMvYXBleC9qYXZhL2FuZHJvaWQvbWVkaWEvTWVkaWFEZXNjcmlwdGlvbi5haWRsIGIvcGFja2FnZXMvTWVkaWFDb21wb25lbnRzL2FwZXgvamF2YS9hbmRyb2lkL21lZGlhL01lZGlhRGVzY3JpcHRpb24uYWlkbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42ZjkzNGY3Ci0tLSAvZGV2L251bGwKKysrIGIvcGFja2FnZXMvTWVkaWFDb21wb25lbnRzL2FwZXgvamF2YS9hbmRyb2lkL21lZGlhL01lZGlhRGVzY3JpcHRpb24uYWlkbApAQCAtMCwwICsxLDE4IEBACisvKiBDb3B5cmlnaHQgMjAxNCwgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorKioKKyoqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworKiogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorKiogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisqKgorKiogICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorKioKKyoqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyoqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisqKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyoqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyoqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorKi8KKworcGFja2FnZSBhbmRyb2lkLm1lZGlhOworCitwYXJjZWxhYmxlIE1lZGlhRGVzY3JpcHRpb247CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9NZWRpYUNvbXBvbmVudHMvYXBleC9qYXZhL2FuZHJvaWQvbWVkaWEvTWVkaWFEZXNjcmlwdGlvbi5qYXZhIGIvcGFja2FnZXMvTWVkaWFDb21wb25lbnRzL2FwZXgvamF2YS9hbmRyb2lkL21lZGlhL01lZGlhRGVzY3JpcHRpb24uamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMTA3OWU1Ci0tLSAvZGV2L251bGwKKysrIGIvcGFja2FnZXMvTWVkaWFDb21wb25lbnRzL2FwZXgvamF2YS9hbmRyb2lkL21lZGlhL01lZGlhRGVzY3JpcHRpb24uamF2YQpAQCAtMCwwICsxLDM4MyBAQAorcGFja2FnZSBhbmRyb2lkLm1lZGlhOworCitpbXBvcnQgYW5kcm9pZC5hbm5vdGF0aW9uLk51bGxhYmxlOworaW1wb3J0IGFuZHJvaWQuZ3JhcGhpY3MuQml0bWFwOworaW1wb3J0IGFuZHJvaWQubWVkaWEuYnJvd3NlLk1lZGlhQnJvd3NlcjsKK2ltcG9ydCBhbmRyb2lkLm5ldC5Vcmk7CitpbXBvcnQgYW5kcm9pZC5vcy5CdW5kbGU7CitpbXBvcnQgYW5kcm9pZC5vcy5QYXJjZWw7CitpbXBvcnQgYW5kcm9pZC5vcy5QYXJjZWxhYmxlOworaW1wb3J0IGFuZHJvaWQudGV4dC5UZXh0VXRpbHM7CisKKy8qKgorICogQSBzaW1wbGUgc2V0IG9mIG1ldGFkYXRhIGZvciBhIG1lZGlhIGl0ZW0gc3VpdGFibGUgZm9yIGRpc3BsYXkuIFRoaXMgY2FuIGJlCisgKiBjcmVhdGVkIHVzaW5nIHRoZSBCdWlsZGVyIG9yIHJldHJpZXZlZCBmcm9tIGV4aXN0aW5nIG1ldGFkYXRhIHVzaW5nCisgKiB7QGxpbmsgTWVkaWFNZXRhZGF0YSNnZXREZXNjcmlwdGlvbigpfS4KKyAqLworcHVibGljIGNsYXNzIE1lZGlhRGVzY3JpcHRpb24gaW1wbGVtZW50cyBQYXJjZWxhYmxlIHsKKyAgICAvKioKKyAgICAgKiBBIHVuaXF1ZSBwZXJzaXN0ZW50IGlkIGZvciB0aGUgY29udGVudCBvciBudWxsLgorICAgICAqLworICAgIHByaXZhdGUgZmluYWwgU3RyaW5nIG1NZWRpYUlkOworICAgIC8qKgorICAgICAqIEEgcHJpbWFyeSB0aXRsZSBzdWl0YWJsZSBmb3IgZGlzcGxheSBvciBudWxsLgorICAgICAqLworICAgIHByaXZhdGUgZmluYWwgQ2hhclNlcXVlbmNlIG1UaXRsZTsKKyAgICAvKioKKyAgICAgKiBBIHN1YnRpdGxlIHN1aXRhYmxlIGZvciBkaXNwbGF5IG9yIG51bGwuCisgICAgICovCisgICAgcHJpdmF0ZSBmaW5hbCBDaGFyU2VxdWVuY2UgbVN1YnRpdGxlOworICAgIC8qKgorICAgICAqIEEgZGVzY3JpcHRpb24gc3VpdGFibGUgZm9yIGRpc3BsYXkgb3IgbnVsbC4KKyAgICAgKi8KKyAgICBwcml2YXRlIGZpbmFsIENoYXJTZXF1ZW5jZSBtRGVzY3JpcHRpb247CisgICAgLyoqCisgICAgICogQSBiaXRtYXAgaWNvbiBzdWl0YWJsZSBmb3IgZGlzcGxheSBvciBudWxsLgorICAgICAqLworICAgIHByaXZhdGUgZmluYWwgQml0bWFwIG1JY29uOworICAgIC8qKgorICAgICAqIEEgVXJpIGZvciBhbiBpY29uIHN1aXRhYmxlIGZvciBkaXNwbGF5IG9yIG51bGwuCisgICAgICovCisgICAgcHJpdmF0ZSBmaW5hbCBVcmkgbUljb25Vcmk7CisgICAgLyoqCisgICAgICogRXh0cmFzIGZvciBvcGFxdWUgdXNlIGJ5IGFwcHMvc3lzdGVtLgorICAgICAqLworICAgIHByaXZhdGUgZmluYWwgQnVuZGxlIG1FeHRyYXM7CisgICAgLyoqCisgICAgICogQSBVcmkgdG8gaWRlbnRpZnkgdGhpcyBjb250ZW50LgorICAgICAqLworICAgIHByaXZhdGUgZmluYWwgVXJpIG1NZWRpYVVyaTsKKworICAgIC8qKgorICAgICAqIFVzZWQgYXMgYSBsb25nIGV4dHJhIGZpZWxkIHRvIGluZGljYXRlIHRoZSBibHVldG9vdGggZm9sZGVyIHR5cGUgb2YgdGhlIG1lZGlhIGl0ZW0gYXMKKyAgICAgKiBzcGVjaWZpZWQgaW4gdGhlIHNlY3Rpb24gNi4xMC4yLjIgb2YgdGhlIEJsdWV0b290aCBBVlJDUCAxLjUuIFRoaXMgaXMgdmFsaWQgb25seSBmb3IKKyAgICAgKiB7QGxpbmsgTWVkaWFCcm93c2VyLk1lZGlhSXRlbX0gd2l0aCB7QGxpbmsgTWVkaWFCcm93c2VyLk1lZGlhSXRlbSNGTEFHX0JST1dTQUJMRX0uIFRoZSB2YWx1ZQorICAgICAqIHNob3VsZCBiZSBvbmUgb2YgdGhlIGZvbGxvd2luZzoKKyAgICAgKiA8dWw+CisgICAgICogPGxpPntAbGluayAjQlRfRk9MREVSX1RZUEVfTUlYRUR9PC9saT4KKyAgICAgKiA8bGk+e0BsaW5rICNCVF9GT0xERVJfVFlQRV9USVRMRVN9PC9saT4KKyAgICAgKiA8bGk+e0BsaW5rICNCVF9GT0xERVJfVFlQRV9BTEJVTVN9PC9saT4KKyAgICAgKiA8bGk+e0BsaW5rICNCVF9GT0xERVJfVFlQRV9BUlRJU1RTfTwvbGk+CisgICAgICogPGxpPntAbGluayAjQlRfRk9MREVSX1RZUEVfR0VOUkVTfTwvbGk+CisgICAgICogPGxpPntAbGluayAjQlRfRk9MREVSX1RZUEVfUExBWUxJU1RTfTwvbGk+CisgICAgICogPGxpPntAbGluayAjQlRfRk9MREVSX1RZUEVfWUVBUlN9PC9saT4KKyAgICAgKiA8L3VsPgorICAgICAqCisgICAgICogQHNlZSAjZ2V0RXh0cmFzKCkKKyAgICAgKi8KKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBFWFRSQV9CVF9GT0xERVJfVFlQRSA9ICJhbmRyb2lkLm1lZGlhLmV4dHJhLkJUX0ZPTERFUl9UWVBFIjsKKworICAgIC8qKgorICAgICAqIFRoZSB0eXBlIG9mIGZvbGRlciB0aGF0IGlzIHVua25vd24gb3IgY29udGFpbnMgbWVkaWEgZWxlbWVudHMgb2YgbWl4ZWQgdHlwZXMgYXMgc3BlY2lmaWVkIGluCisgICAgICogdGhlIHNlY3Rpb24gNi4xMC4yLjIgb2YgdGhlIEJsdWV0b290aCBBVlJDUCAxLjUuCisgICAgICovCisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBsb25nIEJUX0ZPTERFUl9UWVBFX01JWEVEID0gMDsKKworICAgIC8qKgorICAgICAqIFRoZSB0eXBlIG9mIGZvbGRlciB0aGF0IGNvbnRhaW5zIG1lZGlhIGVsZW1lbnRzIG9ubHkgYXMgc3BlY2lmaWVkIGluIHRoZSBzZWN0aW9uIDYuMTAuMi4yIG9mCisgICAgICogdGhlIEJsdWV0b290aCBBVlJDUCAxLjUuCisgICAgICovCisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBsb25nIEJUX0ZPTERFUl9UWVBFX1RJVExFUyA9IDE7CisKKyAgICAvKioKKyAgICAgKiBUaGUgdHlwZSBvZiBmb2xkZXIgdGhhdCBjb250YWlucyBmb2xkZXJzIGNhdGVnb3JpemVkIGJ5IGFsYnVtIGFzIHNwZWNpZmllZCBpbiB0aGUgc2VjdGlvbgorICAgICAqIDYuMTAuMi4yIG9mIHRoZSBCbHVldG9vdGggQVZSQ1AgMS41LgorICAgICAqLworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgbG9uZyBCVF9GT0xERVJfVFlQRV9BTEJVTVMgPSAyOworCisgICAgLyoqCisgICAgICogVGhlIHR5cGUgb2YgZm9sZGVyIHRoYXQgY29udGFpbnMgZm9sZGVycyBjYXRlZ29yaXplZCBieSBhcnRpc3QgYXMgc3BlY2lmaWVkIGluIHRoZSBzZWN0aW9uCisgICAgICogNi4xMC4yLjIgb2YgdGhlIEJsdWV0b290aCBBVlJDUCAxLjUuCisgICAgICovCisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBsb25nIEJUX0ZPTERFUl9UWVBFX0FSVElTVFMgPSAzOworCisgICAgLyoqCisgICAgICogVGhlIHR5cGUgb2YgZm9sZGVyIHRoYXQgY29udGFpbnMgZm9sZGVycyBjYXRlZ29yaXplZCBieSBnZW5yZSBhcyBzcGVjaWZpZWQgaW4gdGhlIHNlY3Rpb24KKyAgICAgKiA2LjEwLjIuMiBvZiB0aGUgQmx1ZXRvb3RoIEFWUkNQIDEuNS4KKyAgICAgKi8KKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGxvbmcgQlRfRk9MREVSX1RZUEVfR0VOUkVTID0gNDsKKworICAgIC8qKgorICAgICAqIFRoZSB0eXBlIG9mIGZvbGRlciB0aGF0IGNvbnRhaW5zIGZvbGRlcnMgY2F0ZWdvcml6ZWQgYnkgcGxheWxpc3QgYXMgc3BlY2lmaWVkIGluIHRoZSBzZWN0aW9uCisgICAgICogNi4xMC4yLjIgb2YgdGhlIEJsdWV0b290aCBBVlJDUCAxLjUuCisgICAgICovCisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBsb25nIEJUX0ZPTERFUl9UWVBFX1BMQVlMSVNUUyA9IDU7CisKKyAgICAvKioKKyAgICAgKiBUaGUgdHlwZSBvZiBmb2xkZXIgdGhhdCBjb250YWlucyBmb2xkZXJzIGNhdGVnb3JpemVkIGJ5IHllYXIgYXMgc3BlY2lmaWVkIGluIHRoZSBzZWN0aW9uCisgICAgICogNi4xMC4yLjIgb2YgdGhlIEJsdWV0b290aCBBVlJDUCAxLjUuCisgICAgICovCisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBsb25nIEJUX0ZPTERFUl9UWVBFX1lFQVJTID0gNjsKKworICAgIHByaXZhdGUgTWVkaWFEZXNjcmlwdGlvbihTdHJpbmcgbWVkaWFJZCwgQ2hhclNlcXVlbmNlIHRpdGxlLCBDaGFyU2VxdWVuY2Ugc3VidGl0bGUsCisgICAgICAgICAgICBDaGFyU2VxdWVuY2UgZGVzY3JpcHRpb24sIEJpdG1hcCBpY29uLCBVcmkgaWNvblVyaSwgQnVuZGxlIGV4dHJhcywgVXJpIG1lZGlhVXJpKSB7CisgICAgICAgIG1NZWRpYUlkID0gbWVkaWFJZDsKKyAgICAgICAgbVRpdGxlID0gdGl0bGU7CisgICAgICAgIG1TdWJ0aXRsZSA9IHN1YnRpdGxlOworICAgICAgICBtRGVzY3JpcHRpb24gPSBkZXNjcmlwdGlvbjsKKyAgICAgICAgbUljb24gPSBpY29uOworICAgICAgICBtSWNvblVyaSA9IGljb25Vcmk7CisgICAgICAgIG1FeHRyYXMgPSBleHRyYXM7CisgICAgICAgIG1NZWRpYVVyaSA9IG1lZGlhVXJpOworICAgIH0KKworICAgIHByaXZhdGUgTWVkaWFEZXNjcmlwdGlvbihQYXJjZWwgaW4pIHsKKyAgICAgICAgbU1lZGlhSWQgPSBpbi5yZWFkU3RyaW5nKCk7CisgICAgICAgIG1UaXRsZSA9IFRleHRVdGlscy5DSEFSX1NFUVVFTkNFX0NSRUFUT1IuY3JlYXRlRnJvbVBhcmNlbChpbik7CisgICAgICAgIG1TdWJ0aXRsZSA9IFRleHRVdGlscy5DSEFSX1NFUVVFTkNFX0NSRUFUT1IuY3JlYXRlRnJvbVBhcmNlbChpbik7CisgICAgICAgIG1EZXNjcmlwdGlvbiA9IFRleHRVdGlscy5DSEFSX1NFUVVFTkNFX0NSRUFUT1IuY3JlYXRlRnJvbVBhcmNlbChpbik7CisgICAgICAgIG1JY29uID0gaW4ucmVhZFBhcmNlbGFibGUobnVsbCk7CisgICAgICAgIG1JY29uVXJpID0gaW4ucmVhZFBhcmNlbGFibGUobnVsbCk7CisgICAgICAgIG1FeHRyYXMgPSBpbi5yZWFkQnVuZGxlKCk7CisgICAgICAgIG1NZWRpYVVyaSA9IGluLnJlYWRQYXJjZWxhYmxlKG51bGwpOworICAgIH0KKworICAgIC8qKgorICAgICAqIFJldHVybnMgdGhlIG1lZGlhIGlkIG9yIG51bGwuIFNlZQorICAgICAqIHtAbGluayBNZWRpYU1ldGFkYXRhI01FVEFEQVRBX0tFWV9NRURJQV9JRH0uCisgICAgICovCisgICAgcHVibGljIEBOdWxsYWJsZSBTdHJpbmcgZ2V0TWVkaWFJZCgpIHsKKyAgICAgICAgcmV0dXJuIG1NZWRpYUlkOworICAgIH0KKworICAgIC8qKgorICAgICAqIFJldHVybnMgYSB0aXRsZSBzdWl0YWJsZSBmb3IgZGlzcGxheSBvciBudWxsLgorICAgICAqCisgICAgICogQHJldHVybiBBIHRpdGxlIG9yIG51bGwuCisgICAgICovCisgICAgcHVibGljIEBOdWxsYWJsZSBDaGFyU2VxdWVuY2UgZ2V0VGl0bGUoKSB7CisgICAgICAgIHJldHVybiBtVGl0bGU7CisgICAgfQorCisgICAgLyoqCisgICAgICogUmV0dXJucyBhIHN1YnRpdGxlIHN1aXRhYmxlIGZvciBkaXNwbGF5IG9yIG51bGwuCisgICAgICoKKyAgICAgKiBAcmV0dXJuIEEgc3VidGl0bGUgb3IgbnVsbC4KKyAgICAgKi8KKyAgICBwdWJsaWMgQE51bGxhYmxlIENoYXJTZXF1ZW5jZSBnZXRTdWJ0aXRsZSgpIHsKKyAgICAgICAgcmV0dXJuIG1TdWJ0aXRsZTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBSZXR1cm5zIGEgZGVzY3JpcHRpb24gc3VpdGFibGUgZm9yIGRpc3BsYXkgb3IgbnVsbC4KKyAgICAgKgorICAgICAqIEByZXR1cm4gQSBkZXNjcmlwdGlvbiBvciBudWxsLgorICAgICAqLworICAgIHB1YmxpYyBATnVsbGFibGUgQ2hhclNlcXVlbmNlIGdldERlc2NyaXB0aW9uKCkgeworICAgICAgICByZXR1cm4gbURlc2NyaXB0aW9uOworICAgIH0KKworICAgIC8qKgorICAgICAqIFJldHVybnMgYSBiaXRtYXAgaWNvbiBzdWl0YWJsZSBmb3IgZGlzcGxheSBvciBudWxsLgorICAgICAqCisgICAgICogQHJldHVybiBBbiBpY29uIG9yIG51bGwuCisgICAgICovCisgICAgcHVibGljIEBOdWxsYWJsZSBCaXRtYXAgZ2V0SWNvbkJpdG1hcCgpIHsKKyAgICAgICAgcmV0dXJuIG1JY29uOworICAgIH0KKworICAgIC8qKgorICAgICAqIFJldHVybnMgYSBVcmkgZm9yIGFuIGljb24gc3VpdGFibGUgZm9yIGRpc3BsYXkgb3IgbnVsbC4KKyAgICAgKgorICAgICAqIEByZXR1cm4gQW4gaWNvbiB1cmkgb3IgbnVsbC4KKyAgICAgKi8KKyAgICBwdWJsaWMgQE51bGxhYmxlIFVyaSBnZXRJY29uVXJpKCkgeworICAgICAgICByZXR1cm4gbUljb25Vcmk7CisgICAgfQorCisgICAgLyoqCisgICAgICogUmV0dXJucyBhbnkgZXh0cmFzIHRoYXQgd2VyZSBhZGRlZCB0byB0aGUgZGVzY3JpcHRpb24uCisgICAgICoKKyAgICAgKiBAcmV0dXJuIEEgYnVuZGxlIG9mIGV4dHJhcyBvciBudWxsLgorICAgICAqLworICAgIHB1YmxpYyBATnVsbGFibGUgQnVuZGxlIGdldEV4dHJhcygpIHsKKyAgICAgICAgcmV0dXJuIG1FeHRyYXM7CisgICAgfQorCisgICAgLyoqCisgICAgICogUmV0dXJucyBhIFVyaSByZXByZXNlbnRpbmcgdGhpcyBjb250ZW50IG9yIG51bGwuCisgICAgICoKKyAgICAgKiBAcmV0dXJuIEEgbWVkaWEgVXJpIG9yIG51bGwuCisgICAgICovCisgICAgcHVibGljIEBOdWxsYWJsZSBVcmkgZ2V0TWVkaWFVcmkoKSB7CisgICAgICAgIHJldHVybiBtTWVkaWFVcmk7CisgICAgfQorCisgICAgQE92ZXJyaWRlCisgICAgcHVibGljIGludCBkZXNjcmliZUNvbnRlbnRzKCkgeworICAgICAgICByZXR1cm4gMDsKKyAgICB9CisKKyAgICBAT3ZlcnJpZGUKKyAgICBwdWJsaWMgdm9pZCB3cml0ZVRvUGFyY2VsKFBhcmNlbCBkZXN0LCBpbnQgZmxhZ3MpIHsKKyAgICAgICAgZGVzdC53cml0ZVN0cmluZyhtTWVkaWFJZCk7CisgICAgICAgIFRleHRVdGlscy53cml0ZVRvUGFyY2VsKG1UaXRsZSwgZGVzdCwgMCk7CisgICAgICAgIFRleHRVdGlscy53cml0ZVRvUGFyY2VsKG1TdWJ0aXRsZSwgZGVzdCwgMCk7CisgICAgICAgIFRleHRVdGlscy53cml0ZVRvUGFyY2VsKG1EZXNjcmlwdGlvbiwgZGVzdCwgMCk7CisgICAgICAgIGRlc3Qud3JpdGVQYXJjZWxhYmxlKG1JY29uLCBmbGFncyk7CisgICAgICAgIGRlc3Qud3JpdGVQYXJjZWxhYmxlKG1JY29uVXJpLCBmbGFncyk7CisgICAgICAgIGRlc3Qud3JpdGVCdW5kbGUobUV4dHJhcyk7CisgICAgICAgIGRlc3Qud3JpdGVQYXJjZWxhYmxlKG1NZWRpYVVyaSwgZmxhZ3MpOworICAgIH0KKworICAgIEBPdmVycmlkZQorICAgIHB1YmxpYyBib29sZWFuIGVxdWFscyhPYmplY3QgbykgeworICAgICAgICBpZiAobyA9PSBudWxsKSB7CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKworICAgICAgICBpZiAoIShvIGluc3RhbmNlb2YgTWVkaWFEZXNjcmlwdGlvbikpeworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisKKyAgICAgICAgZmluYWwgTWVkaWFEZXNjcmlwdGlvbiBkID0gKE1lZGlhRGVzY3JpcHRpb24pIG87CisKKyAgICAgICAgaWYgKCFTdHJpbmcudmFsdWVPZihtVGl0bGUpLmVxdWFscyhTdHJpbmcudmFsdWVPZihkLm1UaXRsZSkpKSB7CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKworICAgICAgICBpZiAoIVN0cmluZy52YWx1ZU9mKG1TdWJ0aXRsZSkuZXF1YWxzKFN0cmluZy52YWx1ZU9mKGQubVN1YnRpdGxlKSkpIHsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorCisgICAgICAgIGlmICghU3RyaW5nLnZhbHVlT2YobURlc2NyaXB0aW9uKS5lcXVhbHMoU3RyaW5nLnZhbHVlT2YoZC5tRGVzY3JpcHRpb24pKSkgeworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorCisgICAgQE92ZXJyaWRlCisgICAgcHVibGljIFN0cmluZyB0b1N0cmluZygpIHsKKyAgICAgICAgcmV0dXJuIG1UaXRsZSArICIsICIgKyBtU3VidGl0bGUgKyAiLCAiICsgbURlc2NyaXB0aW9uOworICAgIH0KKworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgUGFyY2VsYWJsZS5DcmVhdG9yPE1lZGlhRGVzY3JpcHRpb24+IENSRUFUT1IgPQorICAgICAgICAgICAgbmV3IFBhcmNlbGFibGUuQ3JlYXRvcjxNZWRpYURlc2NyaXB0aW9uPigpIHsKKyAgICAgICAgICAgICAgICBAT3ZlcnJpZGUKKyAgICAgICAgICAgICAgICBwdWJsaWMgTWVkaWFEZXNjcmlwdGlvbiBjcmVhdGVGcm9tUGFyY2VsKFBhcmNlbCBpbikgeworICAgICAgICAgICAgICAgICAgICByZXR1cm4gbmV3IE1lZGlhRGVzY3JpcHRpb24oaW4pOworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIEBPdmVycmlkZQorICAgICAgICAgICAgICAgIHB1YmxpYyBNZWRpYURlc2NyaXB0aW9uW10gbmV3QXJyYXkoaW50IHNpemUpIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBNZWRpYURlc2NyaXB0aW9uW3NpemVdOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH07CisKKyAgICAvKioKKyAgICAgKiBCdWlsZGVyIGZvciB7QGxpbmsgTWVkaWFEZXNjcmlwdGlvbn0gb2JqZWN0cy4KKyAgICAgKi8KKyAgICBwdWJsaWMgc3RhdGljIGNsYXNzIEJ1aWxkZXIgeworICAgICAgICBwcml2YXRlIFN0cmluZyBtTWVkaWFJZDsKKyAgICAgICAgcHJpdmF0ZSBDaGFyU2VxdWVuY2UgbVRpdGxlOworICAgICAgICBwcml2YXRlIENoYXJTZXF1ZW5jZSBtU3VidGl0bGU7CisgICAgICAgIHByaXZhdGUgQ2hhclNlcXVlbmNlIG1EZXNjcmlwdGlvbjsKKyAgICAgICAgcHJpdmF0ZSBCaXRtYXAgbUljb247CisgICAgICAgIHByaXZhdGUgVXJpIG1JY29uVXJpOworICAgICAgICBwcml2YXRlIEJ1bmRsZSBtRXh0cmFzOworICAgICAgICBwcml2YXRlIFVyaSBtTWVkaWFVcmk7CisKKyAgICAgICAgLyoqCisgICAgICAgICAqIENyZWF0ZXMgYW4gaW5pdGlhbGx5IGVtcHR5IGJ1aWxkZXIuCisgICAgICAgICAqLworICAgICAgICBwdWJsaWMgQnVpbGRlcigpIHsKKyAgICAgICAgfQorCisgICAgICAgIC8qKgorICAgICAgICAgKiBTZXRzIHRoZSBtZWRpYSBpZC4KKyAgICAgICAgICoKKyAgICAgICAgICogQHBhcmFtIG1lZGlhSWQgVGhlIHVuaXF1ZSBpZCBmb3IgdGhlIGl0ZW0gb3IgbnVsbC4KKyAgICAgICAgICogQHJldHVybiB0aGlzCisgICAgICAgICAqLworICAgICAgICBwdWJsaWMgQnVpbGRlciBzZXRNZWRpYUlkKEBOdWxsYWJsZSBTdHJpbmcgbWVkaWFJZCkgeworICAgICAgICAgICAgbU1lZGlhSWQgPSBtZWRpYUlkOworICAgICAgICAgICAgcmV0dXJuIHRoaXM7CisgICAgICAgIH0KKworICAgICAgICAvKioKKyAgICAgICAgICogU2V0cyB0aGUgdGl0bGUuCisgICAgICAgICAqCisgICAgICAgICAqIEBwYXJhbSB0aXRsZSBBIHRpdGxlIHN1aXRhYmxlIGZvciBkaXNwbGF5IHRvIHRoZSB1c2VyIG9yIG51bGwuCisgICAgICAgICAqIEByZXR1cm4gdGhpcworICAgICAgICAgKi8KKyAgICAgICAgcHVibGljIEJ1aWxkZXIgc2V0VGl0bGUoQE51bGxhYmxlIENoYXJTZXF1ZW5jZSB0aXRsZSkgeworICAgICAgICAgICAgbVRpdGxlID0gdGl0bGU7CisgICAgICAgICAgICByZXR1cm4gdGhpczsKKyAgICAgICAgfQorCisgICAgICAgIC8qKgorICAgICAgICAgKiBTZXRzIHRoZSBzdWJ0aXRsZS4KKyAgICAgICAgICoKKyAgICAgICAgICogQHBhcmFtIHN1YnRpdGxlIEEgc3VidGl0bGUgc3VpdGFibGUgZm9yIGRpc3BsYXkgdG8gdGhlIHVzZXIgb3IgbnVsbC4KKyAgICAgICAgICogQHJldHVybiB0aGlzCisgICAgICAgICAqLworICAgICAgICBwdWJsaWMgQnVpbGRlciBzZXRTdWJ0aXRsZShATnVsbGFibGUgQ2hhclNlcXVlbmNlIHN1YnRpdGxlKSB7CisgICAgICAgICAgICBtU3VidGl0bGUgPSBzdWJ0aXRsZTsKKyAgICAgICAgICAgIHJldHVybiB0aGlzOworICAgICAgICB9CisKKyAgICAgICAgLyoqCisgICAgICAgICAqIFNldHMgdGhlIGRlc2NyaXB0aW9uLgorICAgICAgICAgKgorICAgICAgICAgKiBAcGFyYW0gZGVzY3JpcHRpb24gQSBkZXNjcmlwdGlvbiBzdWl0YWJsZSBmb3IgZGlzcGxheSB0byB0aGUgdXNlciBvcgorICAgICAgICAgKiAgICAgICAgICAgIG51bGwuCisgICAgICAgICAqIEByZXR1cm4gdGhpcworICAgICAgICAgKi8KKyAgICAgICAgcHVibGljIEJ1aWxkZXIgc2V0RGVzY3JpcHRpb24oQE51bGxhYmxlIENoYXJTZXF1ZW5jZSBkZXNjcmlwdGlvbikgeworICAgICAgICAgICAgbURlc2NyaXB0aW9uID0gZGVzY3JpcHRpb247CisgICAgICAgICAgICByZXR1cm4gdGhpczsKKyAgICAgICAgfQorCisgICAgICAgIC8qKgorICAgICAgICAgKiBTZXRzIHRoZSBpY29uLgorICAgICAgICAgKgorICAgICAgICAgKiBAcGFyYW0gaWNvbiBBIHtAbGluayBCaXRtYXB9IGljb24gc3VpdGFibGUgZm9yIGRpc3BsYXkgdG8gdGhlIHVzZXIgb3IKKyAgICAgICAgICogICAgICAgICAgICBudWxsLgorICAgICAgICAgKiBAcmV0dXJuIHRoaXMKKyAgICAgICAgICovCisgICAgICAgIHB1YmxpYyBCdWlsZGVyIHNldEljb25CaXRtYXAoQE51bGxhYmxlIEJpdG1hcCBpY29uKSB7CisgICAgICAgICAgICBtSWNvbiA9IGljb247CisgICAgICAgICAgICByZXR1cm4gdGhpczsKKyAgICAgICAgfQorCisgICAgICAgIC8qKgorICAgICAgICAgKiBTZXRzIHRoZSBpY29uIHVyaS4KKyAgICAgICAgICoKKyAgICAgICAgICogQHBhcmFtIGljb25VcmkgQSB7QGxpbmsgVXJpfSBmb3IgYW4gaWNvbiBzdWl0YWJsZSBmb3IgZGlzcGxheSB0byB0aGUKKyAgICAgICAgICogICAgICAgICAgICB1c2VyIG9yIG51bGwuCisgICAgICAgICAqIEByZXR1cm4gdGhpcworICAgICAgICAgKi8KKyAgICAgICAgcHVibGljIEJ1aWxkZXIgc2V0SWNvblVyaShATnVsbGFibGUgVXJpIGljb25VcmkpIHsKKyAgICAgICAgICAgIG1JY29uVXJpID0gaWNvblVyaTsKKyAgICAgICAgICAgIHJldHVybiB0aGlzOworICAgICAgICB9CisKKyAgICAgICAgLyoqCisgICAgICAgICAqIFNldHMgYSBidW5kbGUgb2YgZXh0cmFzLgorICAgICAgICAgKgorICAgICAgICAgKiBAcGFyYW0gZXh0cmFzIFRoZSBleHRyYXMgdG8gaW5jbHVkZSB3aXRoIHRoaXMgZGVzY3JpcHRpb24gb3IgbnVsbC4KKyAgICAgICAgICogQHJldHVybiB0aGlzCisgICAgICAgICAqLworICAgICAgICBwdWJsaWMgQnVpbGRlciBzZXRFeHRyYXMoQE51bGxhYmxlIEJ1bmRsZSBleHRyYXMpIHsKKyAgICAgICAgICAgIG1FeHRyYXMgPSBleHRyYXM7CisgICAgICAgICAgICByZXR1cm4gdGhpczsKKyAgICAgICAgfQorCisgICAgICAgIC8qKgorICAgICAgICAgKiBTZXRzIHRoZSBtZWRpYSB1cmkuCisgICAgICAgICAqCisgICAgICAgICAqIEBwYXJhbSBtZWRpYVVyaSBUaGUgY29udGVudCdzIHtAbGluayBVcml9IGZvciB0aGUgaXRlbSBvciBudWxsLgorICAgICAgICAgKiBAcmV0dXJuIHRoaXMKKyAgICAgICAgICovCisgICAgICAgIHB1YmxpYyBCdWlsZGVyIHNldE1lZGlhVXJpKEBOdWxsYWJsZSBVcmkgbWVkaWFVcmkpIHsKKyAgICAgICAgICAgIG1NZWRpYVVyaSA9IG1lZGlhVXJpOworICAgICAgICAgICAgcmV0dXJuIHRoaXM7CisgICAgICAgIH0KKworICAgICAgICBwdWJsaWMgTWVkaWFEZXNjcmlwdGlvbiBidWlsZCgpIHsKKyAgICAgICAgICAgIHJldHVybiBuZXcgTWVkaWFEZXNjcmlwdGlvbihtTWVkaWFJZCwgbVRpdGxlLCBtU3VidGl0bGUsIG1EZXNjcmlwdGlvbiwgbUljb24sIG1JY29uVXJpLAorICAgICAgICAgICAgICAgICAgICBtRXh0cmFzLCBtTWVkaWFVcmkpOworICAgICAgICB9CisgICAgfQorfQpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvTWVkaWFDb21wb25lbnRzL2FwZXgvamF2YS9hbmRyb2lkL21lZGlhL01lZGlhTWV0YWRhdGEuYWlkbCBiL3BhY2thZ2VzL01lZGlhQ29tcG9uZW50cy9hcGV4L2phdmEvYW5kcm9pZC9tZWRpYS9NZWRpYU1ldGFkYXRhLmFpZGwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjZlZTQ4MwotLS0gL2Rldi9udWxsCisrKyBiL3BhY2thZ2VzL01lZGlhQ29tcG9uZW50cy9hcGV4L2phdmEvYW5kcm9pZC9tZWRpYS9NZWRpYU1ldGFkYXRhLmFpZGwKQEAgLTAsMCArMSwxOCBAQAorLyogQ29weXJpZ2h0IDIwMTQsIFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKyoqCisqKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyoqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyoqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorKioKKyoqICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyoqCisqKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisqKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorKiogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisqKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisqKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyovCisKK3BhY2thZ2UgYW5kcm9pZC5tZWRpYTsKKworcGFyY2VsYWJsZSBNZWRpYU1ldGFkYXRhOwpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvTWVkaWFDb21wb25lbnRzL2FwZXgvamF2YS9hbmRyb2lkL21lZGlhL01lZGlhTWV0YWRhdGEuamF2YSBiL3BhY2thZ2VzL01lZGlhQ29tcG9uZW50cy9hcGV4L2phdmEvYW5kcm9pZC9tZWRpYS9NZWRpYU1ldGFkYXRhLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzNlNjkxNgotLS0gL2Rldi9udWxsCisrKyBiL3BhY2thZ2VzL01lZGlhQ29tcG9uZW50cy9hcGV4L2phdmEvYW5kcm9pZC9tZWRpYS9NZWRpYU1ldGFkYXRhLmphdmEKQEAgLTAsMCArMSw5NDMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworcGFja2FnZSBhbmRyb2lkLm1lZGlhOworCitpbXBvcnQgYW5kcm9pZC5hbm5vdGF0aW9uLk5vbk51bGw7CitpbXBvcnQgYW5kcm9pZC5hbm5vdGF0aW9uLlN0cmluZ0RlZjsKK2ltcG9ydCBhbmRyb2lkLmFubm90YXRpb24uVW5zdXBwb3J0ZWRBcHBVc2FnZTsKK2ltcG9ydCBhbmRyb2lkLmNvbnRlbnQuQ29udGVudFJlc29sdmVyOworaW1wb3J0IGFuZHJvaWQuZ3JhcGhpY3MuQml0bWFwOworaW1wb3J0IGFuZHJvaWQuZ3JhcGhpY3MuQml0bWFwRmFjdG9yeTsKK2ltcG9ydCBhbmRyb2lkLm1lZGlhLmJyb3dzZS5NZWRpYUJyb3dzZXI7CitpbXBvcnQgYW5kcm9pZC5tZWRpYS5zZXNzaW9uLk1lZGlhQ29udHJvbGxlcjsKK2ltcG9ydCBhbmRyb2lkLm5ldC5Vcmk7CitpbXBvcnQgYW5kcm9pZC5vcy5CdW5kbGU7CitpbXBvcnQgYW5kcm9pZC5vcy5QYXJjZWw7CitpbXBvcnQgYW5kcm9pZC5vcy5QYXJjZWxhYmxlOworaW1wb3J0IGFuZHJvaWQudGV4dC5UZXh0VXRpbHM7CitpbXBvcnQgYW5kcm9pZC51dGlsLkFycmF5TWFwOworaW1wb3J0IGFuZHJvaWQudXRpbC5Mb2c7CitpbXBvcnQgYW5kcm9pZC51dGlsLlNwYXJzZUFycmF5OworCitpbXBvcnQgamF2YS5sYW5nLmFubm90YXRpb24uUmV0ZW50aW9uOworaW1wb3J0IGphdmEubGFuZy5hbm5vdGF0aW9uLlJldGVudGlvblBvbGljeTsKK2ltcG9ydCBqYXZhLnV0aWwuU2V0OworaW1wb3J0IGphdmEudXRpbC5PYmplY3RzOworCisvKioKKyAqIENvbnRhaW5zIG1ldGFkYXRhIGFib3V0IGFuIGl0ZW0sIHN1Y2ggYXMgdGhlIHRpdGxlLCBhcnRpc3QsIGV0Yy4KKyAqLworcHVibGljIGZpbmFsIGNsYXNzIE1lZGlhTWV0YWRhdGEgaW1wbGVtZW50cyBQYXJjZWxhYmxlIHsKKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgVEFHID0gIk1lZGlhTWV0YWRhdGEiOworCisgICAgLyoqCisgICAgICogQGhpZGUKKyAgICAgKi8KKyAgICBAU3RyaW5nRGVmKHByZWZpeCA9IHsgIk1FVEFEQVRBX0tFWV8iIH0sIHZhbHVlID0geworICAgICAgICAgICAgTUVUQURBVEFfS0VZX1RJVExFLAorICAgICAgICAgICAgTUVUQURBVEFfS0VZX0FSVElTVCwKKyAgICAgICAgICAgIE1FVEFEQVRBX0tFWV9BTEJVTSwKKyAgICAgICAgICAgIE1FVEFEQVRBX0tFWV9BVVRIT1IsCisgICAgICAgICAgICBNRVRBREFUQV9LRVlfV1JJVEVSLAorICAgICAgICAgICAgTUVUQURBVEFfS0VZX0NPTVBPU0VSLAorICAgICAgICAgICAgTUVUQURBVEFfS0VZX0NPTVBJTEFUSU9OLAorICAgICAgICAgICAgTUVUQURBVEFfS0VZX0RBVEUsCisgICAgICAgICAgICBNRVRBREFUQV9LRVlfR0VOUkUsCisgICAgICAgICAgICBNRVRBREFUQV9LRVlfQUxCVU1fQVJUSVNULAorICAgICAgICAgICAgTUVUQURBVEFfS0VZX0FSVF9VUkksCisgICAgICAgICAgICBNRVRBREFUQV9LRVlfQUxCVU1fQVJUX1VSSSwKKyAgICAgICAgICAgIE1FVEFEQVRBX0tFWV9ESVNQTEFZX1RJVExFLAorICAgICAgICAgICAgTUVUQURBVEFfS0VZX0RJU1BMQVlfU1VCVElUTEUsCisgICAgICAgICAgICBNRVRBREFUQV9LRVlfRElTUExBWV9ERVNDUklQVElPTiwKKyAgICAgICAgICAgIE1FVEFEQVRBX0tFWV9ESVNQTEFZX0lDT05fVVJJLAorICAgICAgICAgICAgTUVUQURBVEFfS0VZX01FRElBX0lELAorICAgICAgICAgICAgTUVUQURBVEFfS0VZX01FRElBX1VSSSwKKyAgICB9KQorICAgIEBSZXRlbnRpb24oUmV0ZW50aW9uUG9saWN5LlNPVVJDRSkKKyAgICBwdWJsaWMgQGludGVyZmFjZSBUZXh0S2V5IHt9CisKKyAgICAvKioKKyAgICAgKiBAaGlkZQorICAgICAqLworICAgIEBTdHJpbmdEZWYocHJlZml4ID0geyAiTUVUQURBVEFfS0VZXyIgfSwgdmFsdWUgPSB7CisgICAgICAgICAgICBNRVRBREFUQV9LRVlfRFVSQVRJT04sCisgICAgICAgICAgICBNRVRBREFUQV9LRVlfWUVBUiwKKyAgICAgICAgICAgIE1FVEFEQVRBX0tFWV9UUkFDS19OVU1CRVIsCisgICAgICAgICAgICBNRVRBREFUQV9LRVlfTlVNX1RSQUNLUywKKyAgICAgICAgICAgIE1FVEFEQVRBX0tFWV9ESVNDX05VTUJFUiwKKyAgICAgICAgICAgIE1FVEFEQVRBX0tFWV9CVF9GT0xERVJfVFlQRSwKKyAgICB9KQorICAgIEBSZXRlbnRpb24oUmV0ZW50aW9uUG9saWN5LlNPVVJDRSkKKyAgICBwdWJsaWMgQGludGVyZmFjZSBMb25nS2V5IHt9CisKKyAgICAvKioKKyAgICAgKiBAaGlkZQorICAgICAqLworICAgIEBTdHJpbmdEZWYocHJlZml4ID0geyAiTUVUQURBVEFfS0VZXyIgfSwgdmFsdWUgPSB7CisgICAgICAgICAgICBNRVRBREFUQV9LRVlfQVJULAorICAgICAgICAgICAgTUVUQURBVEFfS0VZX0FMQlVNX0FSVCwKKyAgICAgICAgICAgIE1FVEFEQVRBX0tFWV9ESVNQTEFZX0lDT04sCisgICAgfSkKKyAgICBAUmV0ZW50aW9uKFJldGVudGlvblBvbGljeS5TT1VSQ0UpCisgICAgcHVibGljIEBpbnRlcmZhY2UgQml0bWFwS2V5IHt9CisKKyAgICAvKioKKyAgICAgKiBAaGlkZQorICAgICAqLworICAgIEBTdHJpbmdEZWYocHJlZml4ID0geyAiTUVUQURBVEFfS0VZXyIgfSwgdmFsdWUgPSB7CisgICAgICAgICAgICBNRVRBREFUQV9LRVlfVVNFUl9SQVRJTkcsCisgICAgICAgICAgICBNRVRBREFUQV9LRVlfUkFUSU5HLAorICAgIH0pCisgICAgQFJldGVudGlvbihSZXRlbnRpb25Qb2xpY3kuU09VUkNFKQorICAgIHB1YmxpYyBAaW50ZXJmYWNlIFJhdGluZ0tleSB7fQorCisgICAgLyoqCisgICAgICogVGhlIHRpdGxlIG9mIHRoZSBtZWRpYS4KKyAgICAgKi8KKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBNRVRBREFUQV9LRVlfVElUTEUgPSAiYW5kcm9pZC5tZWRpYS5tZXRhZGF0YS5USVRMRSI7CisKKyAgICAvKioKKyAgICAgKiBUaGUgYXJ0aXN0IG9mIHRoZSBtZWRpYS4KKyAgICAgKi8KKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBNRVRBREFUQV9LRVlfQVJUSVNUID0gImFuZHJvaWQubWVkaWEubWV0YWRhdGEuQVJUSVNUIjsKKworICAgIC8qKgorICAgICAqIFRoZSBkdXJhdGlvbiBvZiB0aGUgbWVkaWEgaW4gbXMuIEEgbmVnYXRpdmUgZHVyYXRpb24gaW5kaWNhdGVzIHRoYXQgdGhlCisgICAgICogZHVyYXRpb24gaXMgdW5rbm93biAob3IgaW5maW5pdGUpLgorICAgICAqLworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIE1FVEFEQVRBX0tFWV9EVVJBVElPTiA9ICJhbmRyb2lkLm1lZGlhLm1ldGFkYXRhLkRVUkFUSU9OIjsKKworICAgIC8qKgorICAgICAqIFRoZSBhbGJ1bSB0aXRsZSBmb3IgdGhlIG1lZGlhLgorICAgICAqLworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIE1FVEFEQVRBX0tFWV9BTEJVTSA9ICJhbmRyb2lkLm1lZGlhLm1ldGFkYXRhLkFMQlVNIjsKKworICAgIC8qKgorICAgICAqIFRoZSBhdXRob3Igb2YgdGhlIG1lZGlhLgorICAgICAqLworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIE1FVEFEQVRBX0tFWV9BVVRIT1IgPSAiYW5kcm9pZC5tZWRpYS5tZXRhZGF0YS5BVVRIT1IiOworCisgICAgLyoqCisgICAgICogVGhlIHdyaXRlciBvZiB0aGUgbWVkaWEuCisgICAgICovCisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgTUVUQURBVEFfS0VZX1dSSVRFUiA9ICJhbmRyb2lkLm1lZGlhLm1ldGFkYXRhLldSSVRFUiI7CisKKyAgICAvKioKKyAgICAgKiBUaGUgY29tcG9zZXIgb2YgdGhlIG1lZGlhLgorICAgICAqLworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIE1FVEFEQVRBX0tFWV9DT01QT1NFUiA9ICJhbmRyb2lkLm1lZGlhLm1ldGFkYXRhLkNPTVBPU0VSIjsKKworICAgIC8qKgorICAgICAqIFRoZSBjb21waWxhdGlvbiBzdGF0dXMgb2YgdGhlIG1lZGlhLgorICAgICAqLworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIE1FVEFEQVRBX0tFWV9DT01QSUxBVElPTiA9ICJhbmRyb2lkLm1lZGlhLm1ldGFkYXRhLkNPTVBJTEFUSU9OIjsKKworICAgIC8qKgorICAgICAqIFRoZSBkYXRlIHRoZSBtZWRpYSB3YXMgY3JlYXRlZCBvciBwdWJsaXNoZWQuIFRoZSBmb3JtYXQgaXMgdW5zcGVjaWZpZWQKKyAgICAgKiBidXQgUkZDIDMzMzkgaXMgcmVjb21tZW5kZWQuCisgICAgICovCisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgTUVUQURBVEFfS0VZX0RBVEUgPSAiYW5kcm9pZC5tZWRpYS5tZXRhZGF0YS5EQVRFIjsKKworICAgIC8qKgorICAgICAqIFRoZSB5ZWFyIHRoZSBtZWRpYSB3YXMgY3JlYXRlZCBvciBwdWJsaXNoZWQgYXMgYSBsb25nLgorICAgICAqLworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIE1FVEFEQVRBX0tFWV9ZRUFSID0gImFuZHJvaWQubWVkaWEubWV0YWRhdGEuWUVBUiI7CisKKyAgICAvKioKKyAgICAgKiBUaGUgZ2VucmUgb2YgdGhlIG1lZGlhLgorICAgICAqLworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIE1FVEFEQVRBX0tFWV9HRU5SRSA9ICJhbmRyb2lkLm1lZGlhLm1ldGFkYXRhLkdFTlJFIjsKKworICAgIC8qKgorICAgICAqIFRoZSB0cmFjayBudW1iZXIgZm9yIHRoZSBtZWRpYS4KKyAgICAgKi8KKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBNRVRBREFUQV9LRVlfVFJBQ0tfTlVNQkVSID0gImFuZHJvaWQubWVkaWEubWV0YWRhdGEuVFJBQ0tfTlVNQkVSIjsKKworICAgIC8qKgorICAgICAqIFRoZSBudW1iZXIgb2YgdHJhY2tzIGluIHRoZSBtZWRpYSdzIG9yaWdpbmFsIHNvdXJjZS4KKyAgICAgKi8KKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBNRVRBREFUQV9LRVlfTlVNX1RSQUNLUyA9ICJhbmRyb2lkLm1lZGlhLm1ldGFkYXRhLk5VTV9UUkFDS1MiOworCisgICAgLyoqCisgICAgICogVGhlIGRpc2MgbnVtYmVyIGZvciB0aGUgbWVkaWEncyBvcmlnaW5hbCBzb3VyY2UuCisgICAgICovCisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgTUVUQURBVEFfS0VZX0RJU0NfTlVNQkVSID0gImFuZHJvaWQubWVkaWEubWV0YWRhdGEuRElTQ19OVU1CRVIiOworCisgICAgLyoqCisgICAgICogVGhlIGFydGlzdCBmb3IgdGhlIGFsYnVtIG9mIHRoZSBtZWRpYSdzIG9yaWdpbmFsIHNvdXJjZS4KKyAgICAgKi8KKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBNRVRBREFUQV9LRVlfQUxCVU1fQVJUSVNUID0gImFuZHJvaWQubWVkaWEubWV0YWRhdGEuQUxCVU1fQVJUSVNUIjsKKworICAgIC8qKgorICAgICAqIFRoZSBhcnR3b3JrIGZvciB0aGUgbWVkaWEgYXMgYSB7QGxpbmsgQml0bWFwfS4KKyAgICAgKiA8cD4KKyAgICAgKiBUaGUgYXJ0d29yayBzaG91bGQgYmUgcmVsYXRpdmVseSBzbWFsbCBhbmQgbWF5IGJlIHNjYWxlZCBkb3duIGJ5IHRoZQorICAgICAqIHN5c3RlbSBpZiBpdCBpcyB0b28gbGFyZ2UuIEZvciBoaWdoZXIgcmVzb2x1dGlvbiBhcnR3b3JrCisgICAgICoge0BsaW5rICNNRVRBREFUQV9LRVlfQVJUX1VSSX0gc2hvdWxkIGJlIHVzZWQgaW5zdGVhZC4KKyAgICAgKi8KKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBNRVRBREFUQV9LRVlfQVJUID0gImFuZHJvaWQubWVkaWEubWV0YWRhdGEuQVJUIjsKKworICAgIC8qKgorICAgICAqIFRoZSBhcnR3b3JrIGZvciB0aGUgbWVkaWEgYXMgYSBVcmkgZm9ybWF0dGVkIFN0cmluZy4gVGhlIGFydHdvcmsgY2FuIGJlCisgICAgICogbG9hZGVkIHVzaW5nIGEgY29tYmluYXRpb24gb2Yge0BsaW5rIENvbnRlbnRSZXNvbHZlciNvcGVuSW5wdXRTdHJlYW19IGFuZAorICAgICAqIHtAbGluayBCaXRtYXBGYWN0b3J5I2RlY29kZVN0cmVhbX0uCisgICAgICogPHA+CisgICAgICogRm9yIHRoZSBiZXN0IHJlc3VsdHMsIFVyaXMgc2hvdWxkIHVzZSB0aGUgY29udGVudDovLyBzdHlsZSBhbmQgc3VwcG9ydAorICAgICAqIHtAbGluayBDb250ZW50UmVzb2x2ZXIjRVhUUkFfU0laRX0gZm9yIHJldHJpZXZpbmcgc2NhbGVkIGFydHdvcmsgdGhyb3VnaAorICAgICAqIHtAbGluayBDb250ZW50UmVzb2x2ZXIjb3BlblR5cGVkQXNzZXRGaWxlRGVzY3JpcHRvcihVcmksIFN0cmluZywgQnVuZGxlKX0uCisgICAgICovCisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgTUVUQURBVEFfS0VZX0FSVF9VUkkgPSAiYW5kcm9pZC5tZWRpYS5tZXRhZGF0YS5BUlRfVVJJIjsKKworICAgIC8qKgorICAgICAqIFRoZSBhcnR3b3JrIGZvciB0aGUgYWxidW0gb2YgdGhlIG1lZGlhJ3Mgb3JpZ2luYWwgc291cmNlIGFzIGEKKyAgICAgKiB7QGxpbmsgQml0bWFwfS4KKyAgICAgKiA8cD4KKyAgICAgKiBUaGUgYXJ0d29yayBzaG91bGQgYmUgcmVsYXRpdmVseSBzbWFsbCBhbmQgbWF5IGJlIHNjYWxlZCBkb3duIGJ5IHRoZQorICAgICAqIHN5c3RlbSBpZiBpdCBpcyB0b28gbGFyZ2UuIEZvciBoaWdoZXIgcmVzb2x1dGlvbiBhcnR3b3JrCisgICAgICoge0BsaW5rICNNRVRBREFUQV9LRVlfQUxCVU1fQVJUX1VSSX0gc2hvdWxkIGJlIHVzZWQgaW5zdGVhZC4KKyAgICAgKi8KKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBNRVRBREFUQV9LRVlfQUxCVU1fQVJUID0gImFuZHJvaWQubWVkaWEubWV0YWRhdGEuQUxCVU1fQVJUIjsKKworICAgIC8qKgorICAgICAqIFRoZSBhcnR3b3JrIGZvciB0aGUgYWxidW0gb2YgdGhlIG1lZGlhJ3Mgb3JpZ2luYWwgc291cmNlIGFzIGEgVXJpCisgICAgICogZm9ybWF0dGVkIFN0cmluZy4gVGhlIGFydHdvcmsgY2FuIGJlIGxvYWRlZCB1c2luZyBhIGNvbWJpbmF0aW9uIG9mCisgICAgICoge0BsaW5rIENvbnRlbnRSZXNvbHZlciNvcGVuSW5wdXRTdHJlYW19IGFuZAorICAgICAqIHtAbGluayBCaXRtYXBGYWN0b3J5I2RlY29kZVN0cmVhbX0uCisgICAgICogPHA+CisgICAgICogRm9yIHRoZSBiZXN0IHJlc3VsdHMsIFVyaXMgc2hvdWxkIHVzZSB0aGUgY29udGVudDovLyBzdHlsZSBhbmQgc3VwcG9ydAorICAgICAqIHtAbGluayBDb250ZW50UmVzb2x2ZXIjRVhUUkFfU0laRX0gZm9yIHJldHJpZXZpbmcgc2NhbGVkIGFydHdvcmsgdGhyb3VnaAorICAgICAqIHtAbGluayBDb250ZW50UmVzb2x2ZXIjb3BlblR5cGVkQXNzZXRGaWxlRGVzY3JpcHRvcihVcmksIFN0cmluZywgQnVuZGxlKX0uCisgICAgICovCisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgTUVUQURBVEFfS0VZX0FMQlVNX0FSVF9VUkkgPSAiYW5kcm9pZC5tZWRpYS5tZXRhZGF0YS5BTEJVTV9BUlRfVVJJIjsKKworICAgIC8qKgorICAgICAqIFRoZSB1c2VyJ3MgcmF0aW5nIGZvciB0aGUgbWVkaWEuCisgICAgICoKKyAgICAgKiBAc2VlIFJhdGluZworICAgICAqLworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIE1FVEFEQVRBX0tFWV9VU0VSX1JBVElORyA9ICJhbmRyb2lkLm1lZGlhLm1ldGFkYXRhLlVTRVJfUkFUSU5HIjsKKworICAgIC8qKgorICAgICAqIFRoZSBvdmVyYWxsIHJhdGluZyBmb3IgdGhlIG1lZGlhLgorICAgICAqCisgICAgICogQHNlZSBSYXRpbmcKKyAgICAgKi8KKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBNRVRBREFUQV9LRVlfUkFUSU5HID0gImFuZHJvaWQubWVkaWEubWV0YWRhdGEuUkFUSU5HIjsKKworICAgIC8qKgorICAgICAqIEEgdGl0bGUgdGhhdCBpcyBzdWl0YWJsZSBmb3IgZGlzcGxheSB0byB0aGUgdXNlci4gVGhpcyB3aWxsIGdlbmVyYWxseSBiZQorICAgICAqIHRoZSBzYW1lIGFzIHtAbGluayAjTUVUQURBVEFfS0VZX1RJVExFfSBidXQgbWF5IGRpZmZlciBmb3Igc29tZSBmb3JtYXRzLgorICAgICAqIFdoZW4gZGlzcGxheWluZyBtZWRpYSBkZXNjcmliZWQgYnkgdGhpcyBtZXRhZGF0YSB0aGlzIHNob3VsZCBiZSBwcmVmZXJyZWQKKyAgICAgKiBpZiBwcmVzZW50LgorICAgICAqLworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIE1FVEFEQVRBX0tFWV9ESVNQTEFZX1RJVExFID0gImFuZHJvaWQubWVkaWEubWV0YWRhdGEuRElTUExBWV9USVRMRSI7CisKKyAgICAvKioKKyAgICAgKiBBIHN1YnRpdGxlIHRoYXQgaXMgc3VpdGFibGUgZm9yIGRpc3BsYXkgdG8gdGhlIHVzZXIuIFdoZW4gZGlzcGxheWluZyBhCisgICAgICogc2Vjb25kIGxpbmUgZm9yIG1lZGlhIGRlc2NyaWJlZCBieSB0aGlzIG1ldGFkYXRhIHRoaXMgc2hvdWxkIGJlIHByZWZlcnJlZAorICAgICAqIHRvIG90aGVyIGZpZWxkcyBpZiBwcmVzZW50LgorICAgICAqLworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIE1FVEFEQVRBX0tFWV9ESVNQTEFZX1NVQlRJVExFCisgICAgICAgICAgICA9ICJhbmRyb2lkLm1lZGlhLm1ldGFkYXRhLkRJU1BMQVlfU1VCVElUTEUiOworCisgICAgLyoqCisgICAgICogQSBkZXNjcmlwdGlvbiB0aGF0IGlzIHN1aXRhYmxlIGZvciBkaXNwbGF5IHRvIHRoZSB1c2VyLiBXaGVuIGRpc3BsYXlpbmcKKyAgICAgKiBtb3JlIGluZm9ybWF0aW9uIGZvciBtZWRpYSBkZXNjcmliZWQgYnkgdGhpcyBtZXRhZGF0YSB0aGlzIHNob3VsZCBiZQorICAgICAqIHByZWZlcnJlZCB0byBvdGhlciBmaWVsZHMgaWYgcHJlc2VudC4KKyAgICAgKi8KKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBNRVRBREFUQV9LRVlfRElTUExBWV9ERVNDUklQVElPTgorICAgICAgICAgICAgPSAiYW5kcm9pZC5tZWRpYS5tZXRhZGF0YS5ESVNQTEFZX0RFU0NSSVBUSU9OIjsKKworICAgIC8qKgorICAgICAqIEFuIGljb24gb3IgdGh1bWJuYWlsIHRoYXQgaXMgc3VpdGFibGUgZm9yIGRpc3BsYXkgdG8gdGhlIHVzZXIuIFdoZW4KKyAgICAgKiBkaXNwbGF5aW5nIGFuIGljb24gZm9yIG1lZGlhIGRlc2NyaWJlZCBieSB0aGlzIG1ldGFkYXRhIHRoaXMgc2hvdWxkIGJlCisgICAgICogcHJlZmVycmVkIHRvIG90aGVyIGZpZWxkcyBpZiBwcmVzZW50LiBUaGlzIG11c3QgYmUgYSB7QGxpbmsgQml0bWFwfS4KKyAgICAgKiA8cD4KKyAgICAgKiBUaGUgaWNvbiBzaG91bGQgYmUgcmVsYXRpdmVseSBzbWFsbCBhbmQgbWF5IGJlIHNjYWxlZCBkb3duIGJ5IHRoZSBzeXN0ZW0KKyAgICAgKiBpZiBpdCBpcyB0b28gbGFyZ2UuIEZvciBoaWdoZXIgcmVzb2x1dGlvbiBhcnR3b3JrCisgICAgICoge0BsaW5rICNNRVRBREFUQV9LRVlfRElTUExBWV9JQ09OX1VSSX0gc2hvdWxkIGJlIHVzZWQgaW5zdGVhZC4KKyAgICAgKi8KKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBNRVRBREFUQV9LRVlfRElTUExBWV9JQ09OCisgICAgICAgICAgICA9ICJhbmRyb2lkLm1lZGlhLm1ldGFkYXRhLkRJU1BMQVlfSUNPTiI7CisKKyAgICAvKioKKyAgICAgKiBBIFVyaSBmb3JtYXR0ZWQgU3RyaW5nIGZvciBhbiBpY29uIG9yIHRodW1ibmFpbCB0aGF0IGlzIHN1aXRhYmxlIGZvcgorICAgICAqIGRpc3BsYXkgdG8gdGhlIHVzZXIuIFdoZW4gZGlzcGxheWluZyBtb3JlIGluZm9ybWF0aW9uIGZvciBtZWRpYSBkZXNjcmliZWQKKyAgICAgKiBieSB0aGlzIG1ldGFkYXRhIHRoZSBkaXNwbGF5IGRlc2NyaXB0aW9uIHNob3VsZCBiZSBwcmVmZXJyZWQgdG8gb3RoZXIKKyAgICAgKiBmaWVsZHMgd2hlbiBwcmVzZW50LiBUaGUgaWNvbiBjYW4gYmUgbG9hZGVkIHVzaW5nIGEgY29tYmluYXRpb24gb2YKKyAgICAgKiB7QGxpbmsgQ29udGVudFJlc29sdmVyI29wZW5JbnB1dFN0cmVhbX0gYW5kCisgICAgICoge0BsaW5rIEJpdG1hcEZhY3RvcnkjZGVjb2RlU3RyZWFtfS4KKyAgICAgKiA8cD4KKyAgICAgKiBGb3IgdGhlIGJlc3QgcmVzdWx0cywgVXJpcyBzaG91bGQgdXNlIHRoZSBjb250ZW50Oi8vIHN0eWxlIGFuZCBzdXBwb3J0CisgICAgICoge0BsaW5rIENvbnRlbnRSZXNvbHZlciNFWFRSQV9TSVpFfSBmb3IgcmV0cmlldmluZyBzY2FsZWQgYXJ0d29yayB0aHJvdWdoCisgICAgICoge0BsaW5rIENvbnRlbnRSZXNvbHZlciNvcGVuVHlwZWRBc3NldEZpbGVEZXNjcmlwdG9yKFVyaSwgU3RyaW5nLCBCdW5kbGUpfS4KKyAgICAgKi8KKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBNRVRBREFUQV9LRVlfRElTUExBWV9JQ09OX1VSSQorICAgICAgICAgICAgPSAiYW5kcm9pZC5tZWRpYS5tZXRhZGF0YS5ESVNQTEFZX0lDT05fVVJJIjsKKworICAgIC8qKgorICAgICAqIEEgU3RyaW5nIGtleSBmb3IgaWRlbnRpZnlpbmcgdGhlIGNvbnRlbnQuIFRoaXMgdmFsdWUgaXMgc3BlY2lmaWMgdG8gdGhlCisgICAgICogc2VydmljZSBwcm92aWRpbmcgdGhlIGNvbnRlbnQuIElmIHVzZWQsIHRoaXMgc2hvdWxkIGJlIGEgcGVyc2lzdGVudAorICAgICAqIHVuaXF1ZSBrZXkgZm9yIHRoZSB1bmRlcmx5aW5nIGNvbnRlbnQuIEl0IG1heSBiZSB1c2VkIHdpdGgKKyAgICAgKiB7QGxpbmsgTWVkaWFDb250cm9sbGVyLlRyYW5zcG9ydENvbnRyb2xzI3BsYXlGcm9tTWVkaWFJZChTdHJpbmcsIEJ1bmRsZSl9CisgICAgICogdG8gaW5pdGlhdGUgcGxheWJhY2sgd2hlbiBwcm92aWRlZCBieSBhIHtAbGluayBNZWRpYUJyb3dzZXJ9IGNvbm5lY3RlZCB0bworICAgICAqIHRoZSBzYW1lIGFwcC4KKyAgICAgKi8KKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBNRVRBREFUQV9LRVlfTUVESUFfSUQgPSAiYW5kcm9pZC5tZWRpYS5tZXRhZGF0YS5NRURJQV9JRCI7CisKKyAgICAvKioKKyAgICAgKiBBIFVyaSBmb3JtYXR0ZWQgU3RyaW5nIHJlcHJlc2VudGluZyB0aGUgY29udGVudC4gVGhpcyB2YWx1ZSBpcyBzcGVjaWZpYyB0byB0aGUKKyAgICAgKiBzZXJ2aWNlIHByb3ZpZGluZyB0aGUgY29udGVudC4gSXQgbWF5IGJlIHVzZWQgd2l0aAorICAgICAqIHtAbGluayBNZWRpYUNvbnRyb2xsZXIuVHJhbnNwb3J0Q29udHJvbHMjcGxheUZyb21VcmkoVXJpLCBCdW5kbGUpfQorICAgICAqIHRvIGluaXRpYXRlIHBsYXliYWNrIHdoZW4gcHJvdmlkZWQgYnkgYSB7QGxpbmsgTWVkaWFCcm93c2VyfSBjb25uZWN0ZWQgdG8KKyAgICAgKiB0aGUgc2FtZSBhcHAuCisgICAgICovCisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgTUVUQURBVEFfS0VZX01FRElBX1VSSSA9ICJhbmRyb2lkLm1lZGlhLm1ldGFkYXRhLk1FRElBX1VSSSI7CisKKyAgICAvKioKKyAgICAgKiBUaGUgYmx1ZXRvb3RoIGZvbGRlciB0eXBlIG9mIHRoZSBtZWRpYSBzcGVjaWZpZWQgaW4gdGhlIHNlY3Rpb24gNi4xMC4yLjIgb2YgdGhlIEJsdWV0b290aAorICAgICAqIEFWUkNQIDEuNS4gSXQgc2hvdWxkIGJlIG9uZSBvZiB0aGUgZm9sbG93aW5nOgorICAgICAqIDx1bD4KKyAgICAgKiA8bGk+e0BsaW5rIE1lZGlhRGVzY3JpcHRpb24jQlRfRk9MREVSX1RZUEVfTUlYRUR9PC9saT4KKyAgICAgKiA8bGk+e0BsaW5rIE1lZGlhRGVzY3JpcHRpb24jQlRfRk9MREVSX1RZUEVfVElUTEVTfTwvbGk+CisgICAgICogPGxpPntAbGluayBNZWRpYURlc2NyaXB0aW9uI0JUX0ZPTERFUl9UWVBFX0FMQlVNU308L2xpPgorICAgICAqIDxsaT57QGxpbmsgTWVkaWFEZXNjcmlwdGlvbiNCVF9GT0xERVJfVFlQRV9BUlRJU1RTfTwvbGk+CisgICAgICogPGxpPntAbGluayBNZWRpYURlc2NyaXB0aW9uI0JUX0ZPTERFUl9UWVBFX0dFTlJFU308L2xpPgorICAgICAqIDxsaT57QGxpbmsgTWVkaWFEZXNjcmlwdGlvbiNCVF9GT0xERVJfVFlQRV9QTEFZTElTVFN9PC9saT4KKyAgICAgKiA8bGk+e0BsaW5rIE1lZGlhRGVzY3JpcHRpb24jQlRfRk9MREVSX1RZUEVfWUVBUlN9PC9saT4KKyAgICAgKiA8L3VsPgorICAgICAqLworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIE1FVEFEQVRBX0tFWV9CVF9GT0xERVJfVFlQRQorICAgICAgICAgICAgPSAiYW5kcm9pZC5tZWRpYS5tZXRhZGF0YS5CVF9GT0xERVJfVFlQRSI7CisKKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBAVGV4dEtleSBTdHJpbmdbXSBQUkVGRVJSRURfREVTQ1JJUFRJT05fT1JERVIgPSB7CisgICAgICAgICAgICBNRVRBREFUQV9LRVlfVElUTEUsCisgICAgICAgICAgICBNRVRBREFUQV9LRVlfQVJUSVNULAorICAgICAgICAgICAgTUVUQURBVEFfS0VZX0FMQlVNLAorICAgICAgICAgICAgTUVUQURBVEFfS0VZX0FMQlVNX0FSVElTVCwKKyAgICAgICAgICAgIE1FVEFEQVRBX0tFWV9XUklURVIsCisgICAgICAgICAgICBNRVRBREFUQV9LRVlfQVVUSE9SLAorICAgICAgICAgICAgTUVUQURBVEFfS0VZX0NPTVBPU0VSCisgICAgfTsKKworICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIEBCaXRtYXBLZXkgU3RyaW5nW10gUFJFRkVSUkVEX0JJVE1BUF9PUkRFUiA9IHsKKyAgICAgICAgICAgIE1FVEFEQVRBX0tFWV9ESVNQTEFZX0lDT04sCisgICAgICAgICAgICBNRVRBREFUQV9LRVlfQVJULAorICAgICAgICAgICAgTUVUQURBVEFfS0VZX0FMQlVNX0FSVAorICAgIH07CisKKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBAVGV4dEtleSBTdHJpbmdbXSBQUkVGRVJSRURfVVJJX09SREVSID0geworICAgICAgICAgICAgTUVUQURBVEFfS0VZX0RJU1BMQVlfSUNPTl9VUkksCisgICAgICAgICAgICBNRVRBREFUQV9LRVlfQVJUX1VSSSwKKyAgICAgICAgICAgIE1FVEFEQVRBX0tFWV9BTEJVTV9BUlRfVVJJCisgICAgfTsKKworICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGludCBNRVRBREFUQV9UWVBFX0lOVkFMSUQgPSAtMTsKKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgTUVUQURBVEFfVFlQRV9MT05HID0gMDsKKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgTUVUQURBVEFfVFlQRV9URVhUID0gMTsKKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgTUVUQURBVEFfVFlQRV9CSVRNQVAgPSAyOworICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGludCBNRVRBREFUQV9UWVBFX1JBVElORyA9IDM7CisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgQXJyYXlNYXA8U3RyaW5nLCBJbnRlZ2VyPiBNRVRBREFUQV9LRVlTX1RZUEU7CisKKyAgICBzdGF0aWMgeworICAgICAgICBNRVRBREFUQV9LRVlTX1RZUEUgPSBuZXcgQXJyYXlNYXA8U3RyaW5nLCBJbnRlZ2VyPigpOworICAgICAgICBNRVRBREFUQV9LRVlTX1RZUEUucHV0KE1FVEFEQVRBX0tFWV9USVRMRSwgTUVUQURBVEFfVFlQRV9URVhUKTsKKyAgICAgICAgTUVUQURBVEFfS0VZU19UWVBFLnB1dChNRVRBREFUQV9LRVlfQVJUSVNULCBNRVRBREFUQV9UWVBFX1RFWFQpOworICAgICAgICBNRVRBREFUQV9LRVlTX1RZUEUucHV0KE1FVEFEQVRBX0tFWV9EVVJBVElPTiwgTUVUQURBVEFfVFlQRV9MT05HKTsKKyAgICAgICAgTUVUQURBVEFfS0VZU19UWVBFLnB1dChNRVRBREFUQV9LRVlfQUxCVU0sIE1FVEFEQVRBX1RZUEVfVEVYVCk7CisgICAgICAgIE1FVEFEQVRBX0tFWVNfVFlQRS5wdXQoTUVUQURBVEFfS0VZX0FVVEhPUiwgTUVUQURBVEFfVFlQRV9URVhUKTsKKyAgICAgICAgTUVUQURBVEFfS0VZU19UWVBFLnB1dChNRVRBREFUQV9LRVlfV1JJVEVSLCBNRVRBREFUQV9UWVBFX1RFWFQpOworICAgICAgICBNRVRBREFUQV9LRVlTX1RZUEUucHV0KE1FVEFEQVRBX0tFWV9DT01QT1NFUiwgTUVUQURBVEFfVFlQRV9URVhUKTsKKyAgICAgICAgTUVUQURBVEFfS0VZU19UWVBFLnB1dChNRVRBREFUQV9LRVlfQ09NUElMQVRJT04sIE1FVEFEQVRBX1RZUEVfVEVYVCk7CisgICAgICAgIE1FVEFEQVRBX0tFWVNfVFlQRS5wdXQoTUVUQURBVEFfS0VZX0RBVEUsIE1FVEFEQVRBX1RZUEVfVEVYVCk7CisgICAgICAgIE1FVEFEQVRBX0tFWVNfVFlQRS5wdXQoTUVUQURBVEFfS0VZX1lFQVIsIE1FVEFEQVRBX1RZUEVfTE9ORyk7CisgICAgICAgIE1FVEFEQVRBX0tFWVNfVFlQRS5wdXQoTUVUQURBVEFfS0VZX0dFTlJFLCBNRVRBREFUQV9UWVBFX1RFWFQpOworICAgICAgICBNRVRBREFUQV9LRVlTX1RZUEUucHV0KE1FVEFEQVRBX0tFWV9UUkFDS19OVU1CRVIsIE1FVEFEQVRBX1RZUEVfTE9ORyk7CisgICAgICAgIE1FVEFEQVRBX0tFWVNfVFlQRS5wdXQoTUVUQURBVEFfS0VZX05VTV9UUkFDS1MsIE1FVEFEQVRBX1RZUEVfTE9ORyk7CisgICAgICAgIE1FVEFEQVRBX0tFWVNfVFlQRS5wdXQoTUVUQURBVEFfS0VZX0RJU0NfTlVNQkVSLCBNRVRBREFUQV9UWVBFX0xPTkcpOworICAgICAgICBNRVRBREFUQV9LRVlTX1RZUEUucHV0KE1FVEFEQVRBX0tFWV9BTEJVTV9BUlRJU1QsIE1FVEFEQVRBX1RZUEVfVEVYVCk7CisgICAgICAgIE1FVEFEQVRBX0tFWVNfVFlQRS5wdXQoTUVUQURBVEFfS0VZX0FSVCwgTUVUQURBVEFfVFlQRV9CSVRNQVApOworICAgICAgICBNRVRBREFUQV9LRVlTX1RZUEUucHV0KE1FVEFEQVRBX0tFWV9BUlRfVVJJLCBNRVRBREFUQV9UWVBFX1RFWFQpOworICAgICAgICBNRVRBREFUQV9LRVlTX1RZUEUucHV0KE1FVEFEQVRBX0tFWV9BTEJVTV9BUlQsIE1FVEFEQVRBX1RZUEVfQklUTUFQKTsKKyAgICAgICAgTUVUQURBVEFfS0VZU19UWVBFLnB1dChNRVRBREFUQV9LRVlfQUxCVU1fQVJUX1VSSSwgTUVUQURBVEFfVFlQRV9URVhUKTsKKyAgICAgICAgTUVUQURBVEFfS0VZU19UWVBFLnB1dChNRVRBREFUQV9LRVlfVVNFUl9SQVRJTkcsIE1FVEFEQVRBX1RZUEVfUkFUSU5HKTsKKyAgICAgICAgTUVUQURBVEFfS0VZU19UWVBFLnB1dChNRVRBREFUQV9LRVlfUkFUSU5HLCBNRVRBREFUQV9UWVBFX1JBVElORyk7CisgICAgICAgIE1FVEFEQVRBX0tFWVNfVFlQRS5wdXQoTUVUQURBVEFfS0VZX0RJU1BMQVlfVElUTEUsIE1FVEFEQVRBX1RZUEVfVEVYVCk7CisgICAgICAgIE1FVEFEQVRBX0tFWVNfVFlQRS5wdXQoTUVUQURBVEFfS0VZX0RJU1BMQVlfU1VCVElUTEUsIE1FVEFEQVRBX1RZUEVfVEVYVCk7CisgICAgICAgIE1FVEFEQVRBX0tFWVNfVFlQRS5wdXQoTUVUQURBVEFfS0VZX0RJU1BMQVlfREVTQ1JJUFRJT04sIE1FVEFEQVRBX1RZUEVfVEVYVCk7CisgICAgICAgIE1FVEFEQVRBX0tFWVNfVFlQRS5wdXQoTUVUQURBVEFfS0VZX0RJU1BMQVlfSUNPTiwgTUVUQURBVEFfVFlQRV9CSVRNQVApOworICAgICAgICBNRVRBREFUQV9LRVlTX1RZUEUucHV0KE1FVEFEQVRBX0tFWV9ESVNQTEFZX0lDT05fVVJJLCBNRVRBREFUQV9UWVBFX1RFWFQpOworICAgICAgICBNRVRBREFUQV9LRVlTX1RZUEUucHV0KE1FVEFEQVRBX0tFWV9CVF9GT0xERVJfVFlQRSwgTUVUQURBVEFfVFlQRV9MT05HKTsKKyAgICAgICAgTUVUQURBVEFfS0VZU19UWVBFLnB1dChNRVRBREFUQV9LRVlfTUVESUFfSUQsIE1FVEFEQVRBX1RZUEVfVEVYVCk7CisgICAgICAgIE1FVEFEQVRBX0tFWVNfVFlQRS5wdXQoTUVUQURBVEFfS0VZX01FRElBX1VSSSwgTUVUQURBVEFfVFlQRV9URVhUKTsKKyAgICB9CisKKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTcGFyc2VBcnJheTxTdHJpbmc+IEVESVRPUl9LRVlfTUFQUElORzsKKworICAgIHN0YXRpYyB7CisgICAgICAgIEVESVRPUl9LRVlfTUFQUElORyA9IG5ldyBTcGFyc2VBcnJheTxTdHJpbmc+KCk7CisgICAgICAgIEVESVRPUl9LRVlfTUFQUElORy5wdXQoTWVkaWFNZXRhZGF0YUVkaXRvci5CSVRNQVBfS0VZX0FSVFdPUkssIE1FVEFEQVRBX0tFWV9BUlQpOworICAgICAgICBFRElUT1JfS0VZX01BUFBJTkcucHV0KE1lZGlhTWV0YWRhdGFFZGl0b3IuUkFUSU5HX0tFWV9CWV9PVEhFUlMsIE1FVEFEQVRBX0tFWV9SQVRJTkcpOworICAgICAgICBFRElUT1JfS0VZX01BUFBJTkcucHV0KE1lZGlhTWV0YWRhdGFFZGl0b3IuUkFUSU5HX0tFWV9CWV9VU0VSLCBNRVRBREFUQV9LRVlfVVNFUl9SQVRJTkcpOworICAgICAgICBFRElUT1JfS0VZX01BUFBJTkcucHV0KE1lZGlhTWV0YWRhdGFSZXRyaWV2ZXIuTUVUQURBVEFfS0VZX0FMQlVNLCBNRVRBREFUQV9LRVlfQUxCVU0pOworICAgICAgICBFRElUT1JfS0VZX01BUFBJTkcucHV0KE1lZGlhTWV0YWRhdGFSZXRyaWV2ZXIuTUVUQURBVEFfS0VZX0FMQlVNQVJUSVNULAorICAgICAgICAgICAgICAgIE1FVEFEQVRBX0tFWV9BTEJVTV9BUlRJU1QpOworICAgICAgICBFRElUT1JfS0VZX01BUFBJTkcucHV0KE1lZGlhTWV0YWRhdGFSZXRyaWV2ZXIuTUVUQURBVEFfS0VZX0FSVElTVCwgTUVUQURBVEFfS0VZX0FSVElTVCk7CisgICAgICAgIEVESVRPUl9LRVlfTUFQUElORy5wdXQoTWVkaWFNZXRhZGF0YVJldHJpZXZlci5NRVRBREFUQV9LRVlfQVVUSE9SLCBNRVRBREFUQV9LRVlfQVVUSE9SKTsKKyAgICAgICAgRURJVE9SX0tFWV9NQVBQSU5HLnB1dChNZWRpYU1ldGFkYXRhUmV0cmlldmVyLk1FVEFEQVRBX0tFWV9DRF9UUkFDS19OVU1CRVIsCisgICAgICAgICAgICAgICAgTUVUQURBVEFfS0VZX1RSQUNLX05VTUJFUik7CisgICAgICAgIEVESVRPUl9LRVlfTUFQUElORy5wdXQoTWVkaWFNZXRhZGF0YVJldHJpZXZlci5NRVRBREFUQV9LRVlfQ09NUE9TRVIsIE1FVEFEQVRBX0tFWV9DT01QT1NFUik7CisgICAgICAgIEVESVRPUl9LRVlfTUFQUElORy5wdXQoTWVkaWFNZXRhZGF0YVJldHJpZXZlci5NRVRBREFUQV9LRVlfQ09NUElMQVRJT04sCisgICAgICAgICAgICAgICAgTUVUQURBVEFfS0VZX0NPTVBJTEFUSU9OKTsKKyAgICAgICAgRURJVE9SX0tFWV9NQVBQSU5HLnB1dChNZWRpYU1ldGFkYXRhUmV0cmlldmVyLk1FVEFEQVRBX0tFWV9EQVRFLCBNRVRBREFUQV9LRVlfREFURSk7CisgICAgICAgIEVESVRPUl9LRVlfTUFQUElORy5wdXQoTWVkaWFNZXRhZGF0YVJldHJpZXZlci5NRVRBREFUQV9LRVlfRElTQ19OVU1CRVIsCisgICAgICAgICAgICAgICAgTUVUQURBVEFfS0VZX0RJU0NfTlVNQkVSKTsKKyAgICAgICAgRURJVE9SX0tFWV9NQVBQSU5HLnB1dChNZWRpYU1ldGFkYXRhUmV0cmlldmVyLk1FVEFEQVRBX0tFWV9EVVJBVElPTiwgTUVUQURBVEFfS0VZX0RVUkFUSU9OKTsKKyAgICAgICAgRURJVE9SX0tFWV9NQVBQSU5HLnB1dChNZWRpYU1ldGFkYXRhUmV0cmlldmVyLk1FVEFEQVRBX0tFWV9HRU5SRSwgTUVUQURBVEFfS0VZX0dFTlJFKTsKKyAgICAgICAgRURJVE9SX0tFWV9NQVBQSU5HLnB1dChNZWRpYU1ldGFkYXRhUmV0cmlldmVyLk1FVEFEQVRBX0tFWV9OVU1fVFJBQ0tTLAorICAgICAgICAgICAgICAgIE1FVEFEQVRBX0tFWV9OVU1fVFJBQ0tTKTsKKyAgICAgICAgRURJVE9SX0tFWV9NQVBQSU5HLnB1dChNZWRpYU1ldGFkYXRhUmV0cmlldmVyLk1FVEFEQVRBX0tFWV9USVRMRSwgTUVUQURBVEFfS0VZX1RJVExFKTsKKyAgICAgICAgRURJVE9SX0tFWV9NQVBQSU5HLnB1dChNZWRpYU1ldGFkYXRhUmV0cmlldmVyLk1FVEFEQVRBX0tFWV9XUklURVIsIE1FVEFEQVRBX0tFWV9XUklURVIpOworICAgICAgICBFRElUT1JfS0VZX01BUFBJTkcucHV0KE1lZGlhTWV0YWRhdGFSZXRyaWV2ZXIuTUVUQURBVEFfS0VZX1lFQVIsIE1FVEFEQVRBX0tFWV9ZRUFSKTsKKyAgICB9CisKKyAgICBwcml2YXRlIGZpbmFsIEJ1bmRsZSBtQnVuZGxlOworICAgIHByaXZhdGUgTWVkaWFEZXNjcmlwdGlvbiBtRGVzY3JpcHRpb247CisKKyAgICBwcml2YXRlIE1lZGlhTWV0YWRhdGEoQnVuZGxlIGJ1bmRsZSkgeworICAgICAgICBtQnVuZGxlID0gbmV3IEJ1bmRsZShidW5kbGUpOworICAgIH0KKworICAgIHByaXZhdGUgTWVkaWFNZXRhZGF0YShQYXJjZWwgaW4pIHsKKyAgICAgICAgLy9UT0RPKGIvMTE5Nzg5Mzg3KTogUmVzb2x2ZSBoaWRkZW4gQVBJIHVzYWdlOiBCdW5kbGUjc2V0RGVmdXNhYmxlCisgICAgICAgIC8vbUJ1bmRsZSA9IEJ1bmRsZS5zZXREZWZ1c2FibGUoaW4ucmVhZEJ1bmRsZSgpLCB0cnVlKTsKKyAgICAgICAgbUJ1bmRsZSA9IG5ldyBCdW5kbGUoKTsgIC8vVE9ETzpyZW1vdmUgdGhpcy4KKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBSZXR1cm5zIHRydWUgaWYgdGhlIGdpdmVuIGtleSBpcyBjb250YWluZWQgaW4gdGhlIG1ldGFkYXRhCisgICAgICoKKyAgICAgKiBAcGFyYW0ga2V5IGEgU3RyaW5nIGtleQorICAgICAqIEByZXR1cm4gdHJ1ZSBpZiB0aGUga2V5IGV4aXN0cyBpbiB0aGlzIG1ldGFkYXRhLCBmYWxzZSBvdGhlcndpc2UKKyAgICAgKi8KKyAgICBwdWJsaWMgYm9vbGVhbiBjb250YWluc0tleShTdHJpbmcga2V5KSB7CisgICAgICAgIHJldHVybiBtQnVuZGxlLmNvbnRhaW5zS2V5KGtleSk7CisgICAgfQorCisgICAgLyoqCisgICAgICogUmV0dXJucyB0aGUgdmFsdWUgYXNzb2NpYXRlZCB3aXRoIHRoZSBnaXZlbiBrZXksIG9yIG51bGwgaWYgbm8gbWFwcGluZyBvZgorICAgICAqIHRoZSBkZXNpcmVkIHR5cGUgZXhpc3RzIGZvciB0aGUgZ2l2ZW4ga2V5IG9yIGEgbnVsbCB2YWx1ZSBpcyBleHBsaWNpdGx5CisgICAgICogYXNzb2NpYXRlZCB3aXRoIHRoZSBrZXkuCisgICAgICoKKyAgICAgKiBAcGFyYW0ga2V5IFRoZSBrZXkgdGhlIHZhbHVlIGlzIHN0b3JlZCB1bmRlcgorICAgICAqIEByZXR1cm4gYSBDaGFyU2VxdWVuY2UgdmFsdWUsIG9yIG51bGwKKyAgICAgKi8KKyAgICBwdWJsaWMgQ2hhclNlcXVlbmNlIGdldFRleHQoQFRleHRLZXkgU3RyaW5nIGtleSkgeworICAgICAgICByZXR1cm4gbUJ1bmRsZS5nZXRDaGFyU2VxdWVuY2Uoa2V5KTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBSZXR1cm5zIHRoZSB0ZXh0IHZhbHVlIGFzc29jaWF0ZWQgd2l0aCB0aGUgZ2l2ZW4ga2V5IGFzIGEgU3RyaW5nLCBvciBudWxsCisgICAgICogaWYgbm8gbWFwcGluZyBvZiB0aGUgZGVzaXJlZCB0eXBlIGV4aXN0cyBmb3IgdGhlIGdpdmVuIGtleSBvciBhIG51bGwKKyAgICAgKiB2YWx1ZSBpcyBleHBsaWNpdGx5IGFzc29jaWF0ZWQgd2l0aCB0aGUga2V5LiBUaGlzIGlzIGVxdWl2YWxlbnQgdG8KKyAgICAgKiBjYWxsaW5nIHtAbGluayAjZ2V0VGV4dCBnZXRUZXh0KCkudG9TdHJpbmcoKX0gaWYgdGhlIHZhbHVlIGlzIG5vdCBudWxsLgorICAgICAqCisgICAgICogQHBhcmFtIGtleSBUaGUga2V5IHRoZSB2YWx1ZSBpcyBzdG9yZWQgdW5kZXIKKyAgICAgKiBAcmV0dXJuIGEgU3RyaW5nIHZhbHVlLCBvciBudWxsCisgICAgICovCisgICAgcHVibGljIFN0cmluZyBnZXRTdHJpbmcoQFRleHRLZXkgU3RyaW5nIGtleSkgeworICAgICAgICBDaGFyU2VxdWVuY2UgdGV4dCA9IGdldFRleHQoa2V5KTsKKyAgICAgICAgaWYgKHRleHQgIT0gbnVsbCkgeworICAgICAgICAgICAgcmV0dXJuIHRleHQudG9TdHJpbmcoKTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gbnVsbDsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBSZXR1cm5zIHRoZSB2YWx1ZSBhc3NvY2lhdGVkIHdpdGggdGhlIGdpdmVuIGtleSwgb3IgMEwgaWYgbm8gbG9uZyBleGlzdHMKKyAgICAgKiBmb3IgdGhlIGdpdmVuIGtleS4KKyAgICAgKgorICAgICAqIEBwYXJhbSBrZXkgVGhlIGtleSB0aGUgdmFsdWUgaXMgc3RvcmVkIHVuZGVyCisgICAgICogQHJldHVybiBhIGxvbmcgdmFsdWUKKyAgICAgKi8KKyAgICBwdWJsaWMgbG9uZyBnZXRMb25nKEBMb25nS2V5IFN0cmluZyBrZXkpIHsKKyAgICAgICAgcmV0dXJuIG1CdW5kbGUuZ2V0TG9uZyhrZXksIDApOworICAgIH0KKworICAgIC8qKgorICAgICAqIFJldHVybnMgYSB7QGxpbmsgUmF0aW5nfSBmb3IgdGhlIGdpdmVuIGtleSBvciBudWxsIGlmIG5vIHJhdGluZyBleGlzdHMKKyAgICAgKiBmb3IgdGhlIGdpdmVuIGtleS4KKyAgICAgKgorICAgICAqIEBwYXJhbSBrZXkgVGhlIGtleSB0aGUgdmFsdWUgaXMgc3RvcmVkIHVuZGVyCisgICAgICogQHJldHVybiBBIHtAbGluayBSYXRpbmd9IG9yIG51bGwKKyAgICAgKi8KKyAgICBwdWJsaWMgUmF0aW5nIGdldFJhdGluZyhAUmF0aW5nS2V5IFN0cmluZyBrZXkpIHsKKyAgICAgICAgUmF0aW5nIHJhdGluZyA9IG51bGw7CisgICAgICAgIHRyeSB7CisgICAgICAgICAgICByYXRpbmcgPSBtQnVuZGxlLmdldFBhcmNlbGFibGUoa2V5KTsKKyAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKKyAgICAgICAgICAgIC8vIGlnbm9yZSwgdmFsdWUgd2FzIG5vdCBhIGJpdG1hcAorICAgICAgICAgICAgTG9nLncoVEFHLCAiRmFpbGVkIHRvIHJldHJpZXZlIGEga2V5IGFzIFJhdGluZy4iLCBlKTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gcmF0aW5nOworICAgIH0KKworICAgIC8qKgorICAgICAqIFJldHVybnMgYSB7QGxpbmsgQml0bWFwfSBmb3IgdGhlIGdpdmVuIGtleSBvciBudWxsIGlmIG5vIGJpdG1hcCBleGlzdHMKKyAgICAgKiBmb3IgdGhlIGdpdmVuIGtleS4KKyAgICAgKgorICAgICAqIEBwYXJhbSBrZXkgVGhlIGtleSB0aGUgdmFsdWUgaXMgc3RvcmVkIHVuZGVyCisgICAgICogQHJldHVybiBBIHtAbGluayBCaXRtYXB9IG9yIG51bGwKKyAgICAgKi8KKyAgICBwdWJsaWMgQml0bWFwIGdldEJpdG1hcChAQml0bWFwS2V5IFN0cmluZyBrZXkpIHsKKyAgICAgICAgQml0bWFwIGJtcCA9IG51bGw7CisgICAgICAgIHRyeSB7CisgICAgICAgICAgICBibXAgPSBtQnVuZGxlLmdldFBhcmNlbGFibGUoa2V5KTsKKyAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKKyAgICAgICAgICAgIC8vIGlnbm9yZSwgdmFsdWUgd2FzIG5vdCBhIGJpdG1hcAorICAgICAgICAgICAgTG9nLncoVEFHLCAiRmFpbGVkIHRvIHJldHJpZXZlIGEga2V5IGFzIEJpdG1hcC4iLCBlKTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gYm1wOworICAgIH0KKworICAgIEBPdmVycmlkZQorICAgIHB1YmxpYyBpbnQgZGVzY3JpYmVDb250ZW50cygpIHsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorCisgICAgQE92ZXJyaWRlCisgICAgcHVibGljIHZvaWQgd3JpdGVUb1BhcmNlbChQYXJjZWwgZGVzdCwgaW50IGZsYWdzKSB7CisgICAgICAgIGRlc3Qud3JpdGVCdW5kbGUobUJ1bmRsZSk7CisgICAgfQorCisgICAgLyoqCisgICAgICogUmV0dXJucyB0aGUgbnVtYmVyIG9mIGZpZWxkcyBpbiB0aGlzIG1ldGFkYXRhLgorICAgICAqCisgICAgICogQHJldHVybiBUaGUgbnVtYmVyIG9mIGZpZWxkcyBpbiB0aGUgbWV0YWRhdGEuCisgICAgICovCisgICAgcHVibGljIGludCBzaXplKCkgeworICAgICAgICByZXR1cm4gbUJ1bmRsZS5zaXplKCk7CisgICAgfQorCisgICAgLyoqCisgICAgICogUmV0dXJucyBhIFNldCBjb250YWluaW5nIHRoZSBTdHJpbmdzIHVzZWQgYXMga2V5cyBpbiB0aGlzIG1ldGFkYXRhLgorICAgICAqCisgICAgICogQHJldHVybiBhIFNldCBvZiBTdHJpbmcga2V5cworICAgICAqLworICAgIHB1YmxpYyBTZXQ8U3RyaW5nPiBrZXlTZXQoKSB7CisgICAgICAgIHJldHVybiBtQnVuZGxlLmtleVNldCgpOworICAgIH0KKworICAgIC8qKgorICAgICAqIFJldHVybnMgYSBzaW1wbGUgZGVzY3JpcHRpb24gb2YgdGhpcyBtZXRhZGF0YSBmb3IgZGlzcGxheSBwdXJwb3Nlcy4KKyAgICAgKgorICAgICAqIEByZXR1cm4gQSBzaW1wbGUgZGVzY3JpcHRpb24gb2YgdGhpcyBtZXRhZGF0YS4KKyAgICAgKi8KKyAgICBwdWJsaWMgQE5vbk51bGwgTWVkaWFEZXNjcmlwdGlvbiBnZXREZXNjcmlwdGlvbigpIHsKKyAgICAgICAgaWYgKG1EZXNjcmlwdGlvbiAhPSBudWxsKSB7CisgICAgICAgICAgICByZXR1cm4gbURlc2NyaXB0aW9uOworICAgICAgICB9CisKKyAgICAgICAgU3RyaW5nIG1lZGlhSWQgPSBnZXRTdHJpbmcoTUVUQURBVEFfS0VZX01FRElBX0lEKTsKKworICAgICAgICBDaGFyU2VxdWVuY2VbXSB0ZXh0ID0gbmV3IENoYXJTZXF1ZW5jZVszXTsKKyAgICAgICAgQml0bWFwIGljb24gPSBudWxsOworICAgICAgICBVcmkgaWNvblVyaSA9IG51bGw7CisKKyAgICAgICAgLy8gRmlyc3QgaGFuZGxlIHRoZSBjYXNlIHdoZXJlIGRpc3BsYXkgZGF0YSBpcyBzZXQgYWxyZWFkeQorICAgICAgICBDaGFyU2VxdWVuY2UgZGlzcGxheVRleHQgPSBnZXRUZXh0KE1FVEFEQVRBX0tFWV9ESVNQTEFZX1RJVExFKTsKKyAgICAgICAgaWYgKCFUZXh0VXRpbHMuaXNFbXB0eShkaXNwbGF5VGV4dCkpIHsKKyAgICAgICAgICAgIC8vIElmIHRoZXkgaGF2ZSBhIGRpc3BsYXkgdGl0bGUgdXNlIG9ubHkgZGlzcGxheSBkYXRhLCBvdGhlcndpc2UgdXNlCisgICAgICAgICAgICAvLyBvdXIgYmVzdCBiZXRzCisgICAgICAgICAgICB0ZXh0WzBdID0gZGlzcGxheVRleHQ7CisgICAgICAgICAgICB0ZXh0WzFdID0gZ2V0VGV4dChNRVRBREFUQV9LRVlfRElTUExBWV9TVUJUSVRMRSk7CisgICAgICAgICAgICB0ZXh0WzJdID0gZ2V0VGV4dChNRVRBREFUQV9LRVlfRElTUExBWV9ERVNDUklQVElPTik7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAvLyBVc2Ugd2hhdGV2ZXIgZmllbGRzIHdlIGNhbgorICAgICAgICAgICAgaW50IHRleHRJbmRleCA9IDA7CisgICAgICAgICAgICBpbnQga2V5SW5kZXggPSAwOworICAgICAgICAgICAgd2hpbGUgKHRleHRJbmRleCA8IHRleHQubGVuZ3RoICYmIGtleUluZGV4IDwgUFJFRkVSUkVEX0RFU0NSSVBUSU9OX09SREVSLmxlbmd0aCkgeworICAgICAgICAgICAgICAgIENoYXJTZXF1ZW5jZSBuZXh0ID0gZ2V0VGV4dChQUkVGRVJSRURfREVTQ1JJUFRJT05fT1JERVJba2V5SW5kZXgrK10pOworICAgICAgICAgICAgICAgIGlmICghVGV4dFV0aWxzLmlzRW1wdHkobmV4dCkpIHsKKyAgICAgICAgICAgICAgICAgICAgLy8gRmlsbCBpbiB0aGUgbmV4dCBlbXB0eSBiaXQgb2YgdGV4dAorICAgICAgICAgICAgICAgICAgICB0ZXh0W3RleHRJbmRleCsrXSA9IG5leHQ7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgLy8gR2V0IHRoZSBiZXN0IGFydCBiaXRtYXAgd2UgY2FuIGZpbmQKKyAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBQUkVGRVJSRURfQklUTUFQX09SREVSLmxlbmd0aDsgaSsrKSB7CisgICAgICAgICAgICBCaXRtYXAgbmV4dCA9IGdldEJpdG1hcChQUkVGRVJSRURfQklUTUFQX09SREVSW2ldKTsKKyAgICAgICAgICAgIGlmIChuZXh0ICE9IG51bGwpIHsKKyAgICAgICAgICAgICAgICBpY29uID0gbmV4dDsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIC8vIEdldCB0aGUgYmVzdCBVcmkgd2UgY2FuIGZpbmQKKyAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBQUkVGRVJSRURfVVJJX09SREVSLmxlbmd0aDsgaSsrKSB7CisgICAgICAgICAgICBTdHJpbmcgbmV4dCA9IGdldFN0cmluZyhQUkVGRVJSRURfVVJJX09SREVSW2ldKTsKKyAgICAgICAgICAgIGlmICghVGV4dFV0aWxzLmlzRW1wdHkobmV4dCkpIHsKKyAgICAgICAgICAgICAgICBpY29uVXJpID0gVXJpLnBhcnNlKG5leHQpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgVXJpIG1lZGlhVXJpID0gbnVsbDsKKyAgICAgICAgU3RyaW5nIG1lZGlhVXJpU3RyID0gZ2V0U3RyaW5nKE1FVEFEQVRBX0tFWV9NRURJQV9VUkkpOworICAgICAgICBpZiAoIVRleHRVdGlscy5pc0VtcHR5KG1lZGlhVXJpU3RyKSkgeworICAgICAgICAgICAgbWVkaWFVcmkgPSBVcmkucGFyc2UobWVkaWFVcmlTdHIpOworICAgICAgICB9CisKKyAgICAgICAgTWVkaWFEZXNjcmlwdGlvbi5CdWlsZGVyIGJvYiA9IG5ldyBNZWRpYURlc2NyaXB0aW9uLkJ1aWxkZXIoKTsKKyAgICAgICAgYm9iLnNldE1lZGlhSWQobWVkaWFJZCk7CisgICAgICAgIGJvYi5zZXRUaXRsZSh0ZXh0WzBdKTsKKyAgICAgICAgYm9iLnNldFN1YnRpdGxlKHRleHRbMV0pOworICAgICAgICBib2Iuc2V0RGVzY3JpcHRpb24odGV4dFsyXSk7CisgICAgICAgIGJvYi5zZXRJY29uQml0bWFwKGljb24pOworICAgICAgICBib2Iuc2V0SWNvblVyaShpY29uVXJpKTsKKyAgICAgICAgYm9iLnNldE1lZGlhVXJpKG1lZGlhVXJpKTsKKyAgICAgICAgaWYgKG1CdW5kbGUuY29udGFpbnNLZXkoTUVUQURBVEFfS0VZX0JUX0ZPTERFUl9UWVBFKSkgeworICAgICAgICAgICAgQnVuZGxlIGJ1bmRsZSA9IG5ldyBCdW5kbGUoKTsKKyAgICAgICAgICAgIGJ1bmRsZS5wdXRMb25nKE1lZGlhRGVzY3JpcHRpb24uRVhUUkFfQlRfRk9MREVSX1RZUEUsCisgICAgICAgICAgICAgICAgICAgIGdldExvbmcoTUVUQURBVEFfS0VZX0JUX0ZPTERFUl9UWVBFKSk7CisgICAgICAgICAgICBib2Iuc2V0RXh0cmFzKGJ1bmRsZSk7CisgICAgICAgIH0KKyAgICAgICAgbURlc2NyaXB0aW9uID0gYm9iLmJ1aWxkKCk7CisKKyAgICAgICAgcmV0dXJuIG1EZXNjcmlwdGlvbjsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBIZWxwZXIgZm9yIGdldHRpbmcgdGhlIFN0cmluZyBrZXkgdXNlZCBieSB7QGxpbmsgTWVkaWFNZXRhZGF0YX0gZnJvbSB0aGUKKyAgICAgKiBpbnRlZ2VyIGtleSB0aGF0IHtAbGluayBNZWRpYU1ldGFkYXRhRWRpdG9yfSB1c2VzLgorICAgICAqCisgICAgICogQHBhcmFtIGVkaXRvcktleSBUaGUga2V5IHVzZWQgYnkgdGhlIGVkaXRvcgorICAgICAqIEByZXR1cm4gVGhlIGtleSB1c2VkIGJ5IHRoaXMgY2xhc3Mgb3IgbnVsbCBpZiBubyBtYXBwaW5nIGV4aXN0cworICAgICAqIEBoaWRlCisgICAgICovCisgICAgQFVuc3VwcG9ydGVkQXBwVXNhZ2UKKyAgICBwdWJsaWMgc3RhdGljIFN0cmluZyBnZXRLZXlGcm9tTWV0YWRhdGFFZGl0b3JLZXkoaW50IGVkaXRvcktleSkgeworICAgICAgICByZXR1cm4gRURJVE9SX0tFWV9NQVBQSU5HLmdldChlZGl0b3JLZXksIG51bGwpOworICAgIH0KKworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgUGFyY2VsYWJsZS5DcmVhdG9yPE1lZGlhTWV0YWRhdGE+IENSRUFUT1IgPQorICAgICAgICAgICAgbmV3IFBhcmNlbGFibGUuQ3JlYXRvcjxNZWRpYU1ldGFkYXRhPigpIHsKKyAgICAgICAgICAgICAgICBAT3ZlcnJpZGUKKyAgICAgICAgICAgICAgICBwdWJsaWMgTWVkaWFNZXRhZGF0YSBjcmVhdGVGcm9tUGFyY2VsKFBhcmNlbCBpbikgeworICAgICAgICAgICAgICAgICAgICByZXR1cm4gbmV3IE1lZGlhTWV0YWRhdGEoaW4pOworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIEBPdmVycmlkZQorICAgICAgICAgICAgICAgIHB1YmxpYyBNZWRpYU1ldGFkYXRhW10gbmV3QXJyYXkoaW50IHNpemUpIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBNZWRpYU1ldGFkYXRhW3NpemVdOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH07CisKKyAgICAvKioKKyAgICAgKiBDb21wYXJlcyB0aGUgY29udGVudHMgb2YgdGhpcyBvYmplY3QgdG8gYW5vdGhlciBNZWRpYU1ldGFkYXRhIG9iamVjdC4gSXQKKyAgICAgKiBkb2VzIG5vdCBjb21wYXJlIEJpdG1hcHMgYW5kIFJhdGluZ3MgYXMgdGhlIG1lZGlhIHBsYXllciBjYW4gY2hvb3NlIHRvCisgICAgICogZm9yZ28gdGhlc2UgZmllbGRzIGRlcGVuZGluZyBvbiBob3cgeW91IHJldHJpZXZlIHRoZSBNZWRpYU1ldGFkYXRhLgorICAgICAqCisgICAgICogQHBhcmFtIG8gVGhlIE1ldGFkYXRhIG9iamVjdCB0byBjb21wYXJlIHRoaXMgb2JqZWN0IGFnYWluc3QKKyAgICAgKiBAcmV0dXJuIFdoZXRoZXIgb3Igbm90IHRoZSB0d28gb2JqZWN0cyBoYXZlIG1hdGNoaW5nIGZpZWxkcyAoZXhjbHVkaW5nCisgICAgICogQml0bWFwcyBhbmQgUmF0aW5ncykKKyAgICAgKi8KKyAgICBAT3ZlcnJpZGUKKyAgICBwdWJsaWMgYm9vbGVhbiBlcXVhbHMoT2JqZWN0IG8pIHsKKyAgICAgICAgaWYgKG8gPT0gdGhpcykgeworICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0KKworICAgICAgICBpZiAoIShvIGluc3RhbmNlb2YgTWVkaWFNZXRhZGF0YSkpIHsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorCisgICAgICAgIGZpbmFsIE1lZGlhTWV0YWRhdGEgbSA9IChNZWRpYU1ldGFkYXRhKSBvOworCisgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgTUVUQURBVEFfS0VZU19UWVBFLnNpemUoKTsgaSsrKSB7CisgICAgICAgICAgICBTdHJpbmcga2V5ID0gTUVUQURBVEFfS0VZU19UWVBFLmtleUF0KGkpOworICAgICAgICAgICAgc3dpdGNoIChNRVRBREFUQV9LRVlTX1RZUEUudmFsdWVBdChpKSkgeworICAgICAgICAgICAgICAgIGNhc2UgTUVUQURBVEFfVFlQRV9URVhUOgorICAgICAgICAgICAgICAgICAgICBpZiAoIU9iamVjdHMuZXF1YWxzKGdldFN0cmluZyhrZXkpLCBtLmdldFN0cmluZyhrZXkpKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIGNhc2UgTUVUQURBVEFfVFlQRV9MT05HOgorICAgICAgICAgICAgICAgICAgICBpZiAoZ2V0TG9uZyhrZXkpICE9IG0uZ2V0TG9uZyhrZXkpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICAgICAgLy8gSWdub3JlIHJhdGluZ3MgYW5kIGJpdG1hcHMgd2hlbiBjb21wYXJpbmcKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAgICBAT3ZlcnJpZGUKKyAgICBwdWJsaWMgaW50IGhhc2hDb2RlKCkgeworICAgICAgICBpbnQgaGFzaENvZGUgPSAxNzsKKworICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IE1FVEFEQVRBX0tFWVNfVFlQRS5zaXplKCk7IGkrKykgeworICAgICAgICAgICAgU3RyaW5nIGtleSA9IE1FVEFEQVRBX0tFWVNfVFlQRS5rZXlBdChpKTsKKyAgICAgICAgICAgIHN3aXRjaCAoTUVUQURBVEFfS0VZU19UWVBFLnZhbHVlQXQoaSkpIHsKKyAgICAgICAgICAgICAgICBjYXNlIE1FVEFEQVRBX1RZUEVfVEVYVDoKKyAgICAgICAgICAgICAgICAgICAgaGFzaENvZGUgPSAzMSAqIGhhc2hDb2RlICsgT2JqZWN0cy5oYXNoKGdldFN0cmluZyhrZXkpKTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgY2FzZSBNRVRBREFUQV9UWVBFX0xPTkc6CisgICAgICAgICAgICAgICAgICAgIGhhc2hDb2RlID0gMzEgKiBoYXNoQ29kZSArIExvbmcuaGFzaENvZGUoZ2V0TG9uZyhrZXkpKTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICAgICAgLy8gSWdub3JlIHJhdGluZ3MgYW5kIGJpdG1hcHMgd2hlbiBjb21wYXJpbmcKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICByZXR1cm4gaGFzaENvZGU7CisgICAgfQorCisgICAgLyoqCisgICAgICogVXNlIHRvIGJ1aWxkIE1lZGlhTWV0YWRhdGEgb2JqZWN0cy4gVGhlIHN5c3RlbSBkZWZpbmVkIG1ldGFkYXRhIGtleXMgbXVzdAorICAgICAqIHVzZSB0aGUgYXBwcm9wcmlhdGUgZGF0YSB0eXBlLgorICAgICAqLworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgY2xhc3MgQnVpbGRlciB7CisgICAgICAgIHByaXZhdGUgZmluYWwgQnVuZGxlIG1CdW5kbGU7CisKKyAgICAgICAgLyoqCisgICAgICAgICAqIENyZWF0ZSBhbiBlbXB0eSBCdWlsZGVyLiBBbnkgZmllbGQgdGhhdCBzaG91bGQgYmUgaW5jbHVkZWQgaW4gdGhlCisgICAgICAgICAqIHtAbGluayBNZWRpYU1ldGFkYXRhfSBtdXN0IGJlIGFkZGVkLgorICAgICAgICAgKi8KKyAgICAgICAgcHVibGljIEJ1aWxkZXIoKSB7CisgICAgICAgICAgICBtQnVuZGxlID0gbmV3IEJ1bmRsZSgpOworICAgICAgICB9CisKKyAgICAgICAgLyoqCisgICAgICAgICAqIENyZWF0ZSBhIEJ1aWxkZXIgdXNpbmcgYSB7QGxpbmsgTWVkaWFNZXRhZGF0YX0gaW5zdGFuY2UgdG8gc2V0IHRoZQorICAgICAgICAgKiBpbml0aWFsIHZhbHVlcy4gQWxsIGZpZWxkcyBpbiB0aGUgc291cmNlIG1ldGFkYXRhIHdpbGwgYmUgaW5jbHVkZWQgaW4KKyAgICAgICAgICogdGhlIG5ldyBtZXRhZGF0YS4gRmllbGRzIGNhbiBiZSBvdmVyd3JpdHRlbiBieSBhZGRpbmcgdGhlIHNhbWUga2V5LgorICAgICAgICAgKgorICAgICAgICAgKiBAcGFyYW0gc291cmNlCisgICAgICAgICAqLworICAgICAgICBwdWJsaWMgQnVpbGRlcihNZWRpYU1ldGFkYXRhIHNvdXJjZSkgeworICAgICAgICAgICAgbUJ1bmRsZSA9IG5ldyBCdW5kbGUoc291cmNlLm1CdW5kbGUpOworICAgICAgICB9CisKKyAgICAgICAgLyoqCisgICAgICAgICAqIENyZWF0ZSBhIEJ1aWxkZXIgdXNpbmcgYSB7QGxpbmsgTWVkaWFNZXRhZGF0YX0gaW5zdGFuY2UgdG8gc2V0CisgICAgICAgICAqIGluaXRpYWwgdmFsdWVzLCBidXQgcmVwbGFjZSBiaXRtYXBzIHdpdGggYSBzY2FsZWQgZG93biBjb3B5IGlmIHRoZXkKKyAgICAgICAgICogYXJlIGxhcmdlciB0aGFuIG1heEJpdG1hcFNpemUuCisgICAgICAgICAqCisgICAgICAgICAqIEBwYXJhbSBzb3VyY2UgVGhlIG9yaWdpbmFsIG1ldGFkYXRhIHRvIGNvcHkuCisgICAgICAgICAqIEBwYXJhbSBtYXhCaXRtYXBTaXplIFRoZSBtYXhpbXVtIGhlaWdodC93aWR0aCBmb3IgYml0bWFwcyBjb250YWluZWQKKyAgICAgICAgICogICAgICAgICAgICBpbiB0aGUgbWV0YWRhdGEuCisgICAgICAgICAqIEBoaWRlCisgICAgICAgICAqLworICAgICAgICBwdWJsaWMgQnVpbGRlcihNZWRpYU1ldGFkYXRhIHNvdXJjZSwgaW50IG1heEJpdG1hcFNpemUpIHsKKyAgICAgICAgICAgIHRoaXMoc291cmNlKTsKKyAgICAgICAgICAgIGZvciAoU3RyaW5nIGtleSA6IG1CdW5kbGUua2V5U2V0KCkpIHsKKyAgICAgICAgICAgICAgICBPYmplY3QgdmFsdWUgPSBtQnVuZGxlLmdldChrZXkpOworICAgICAgICAgICAgICAgIGlmICh2YWx1ZSAhPSBudWxsICYmIHZhbHVlIGluc3RhbmNlb2YgQml0bWFwKSB7CisgICAgICAgICAgICAgICAgICAgIEJpdG1hcCBibXAgPSAoQml0bWFwKSB2YWx1ZTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGJtcC5nZXRIZWlnaHQoKSA+IG1heEJpdG1hcFNpemUgfHwgYm1wLmdldFdpZHRoKCkgPiBtYXhCaXRtYXBTaXplKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBwdXRCaXRtYXAoa2V5LCBzY2FsZUJpdG1hcChibXAsIG1heEJpdG1hcFNpemUpKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIC8qKgorICAgICAgICAgKiBQdXQgYSBDaGFyU2VxdWVuY2UgdmFsdWUgaW50byB0aGUgbWV0YWRhdGEuIEN1c3RvbSBrZXlzIG1heSBiZSB1c2VkLAorICAgICAgICAgKiBidXQgaWYgdGhlIE1FVEFEQVRBX0tFWXMgZGVmaW5lZCBpbiB0aGlzIGNsYXNzIGFyZSB1c2VkIHRoZXkgbWF5IG9ubHkKKyAgICAgICAgICogYmUgb25lIG9mIHRoZSBmb2xsb3dpbmc6CisgICAgICAgICAqIDx1bD4KKyAgICAgICAgICogPGxpPntAbGluayAjTUVUQURBVEFfS0VZX1RJVExFfTwvbGk+CisgICAgICAgICAqIDxsaT57QGxpbmsgI01FVEFEQVRBX0tFWV9BUlRJU1R9PC9saT4KKyAgICAgICAgICogPGxpPntAbGluayAjTUVUQURBVEFfS0VZX0FMQlVNfTwvbGk+CisgICAgICAgICAqIDxsaT57QGxpbmsgI01FVEFEQVRBX0tFWV9BVVRIT1J9PC9saT4KKyAgICAgICAgICogPGxpPntAbGluayAjTUVUQURBVEFfS0VZX1dSSVRFUn08L2xpPgorICAgICAgICAgKiA8bGk+e0BsaW5rICNNRVRBREFUQV9LRVlfQ09NUE9TRVJ9PC9saT4KKyAgICAgICAgICogPGxpPntAbGluayAjTUVUQURBVEFfS0VZX0RBVEV9PC9saT4KKyAgICAgICAgICogPGxpPntAbGluayAjTUVUQURBVEFfS0VZX0dFTlJFfTwvbGk+CisgICAgICAgICAqIDxsaT57QGxpbmsgI01FVEFEQVRBX0tFWV9BTEJVTV9BUlRJU1R9PC9saT4KKyAgICAgICAgICogPGxpPntAbGluayAjTUVUQURBVEFfS0VZX0FSVF9VUkl9PC9saT4KKyAgICAgICAgICogPGxpPntAbGluayAjTUVUQURBVEFfS0VZX0FMQlVNX0FSVF9VUkl9PC9saT4KKyAgICAgICAgICogPGxpPntAbGluayAjTUVUQURBVEFfS0VZX0RJU1BMQVlfVElUTEV9PC9saT4KKyAgICAgICAgICogPGxpPntAbGluayAjTUVUQURBVEFfS0VZX0RJU1BMQVlfU1VCVElUTEV9PC9saT4KKyAgICAgICAgICogPGxpPntAbGluayAjTUVUQURBVEFfS0VZX0RJU1BMQVlfREVTQ1JJUFRJT059PC9saT4KKyAgICAgICAgICogPGxpPntAbGluayAjTUVUQURBVEFfS0VZX0RJU1BMQVlfSUNPTl9VUkl9PC9saT4KKyAgICAgICAgICogPC91bD4KKyAgICAgICAgICoKKyAgICAgICAgICogQHBhcmFtIGtleSBUaGUga2V5IGZvciByZWZlcmVuY2luZyB0aGlzIHZhbHVlCisgICAgICAgICAqIEBwYXJhbSB2YWx1ZSBUaGUgQ2hhclNlcXVlbmNlIHZhbHVlIHRvIHN0b3JlCisgICAgICAgICAqIEByZXR1cm4gVGhlIEJ1aWxkZXIgdG8gYWxsb3cgY2hhaW5pbmcKKyAgICAgICAgICovCisgICAgICAgIHB1YmxpYyBCdWlsZGVyIHB1dFRleHQoQFRleHRLZXkgU3RyaW5nIGtleSwgQ2hhclNlcXVlbmNlIHZhbHVlKSB7CisgICAgICAgICAgICBpZiAoTUVUQURBVEFfS0VZU19UWVBFLmNvbnRhaW5zS2V5KGtleSkpIHsKKyAgICAgICAgICAgICAgICBpZiAoTUVUQURBVEFfS0VZU19UWVBFLmdldChrZXkpICE9IE1FVEFEQVRBX1RZUEVfVEVYVCkgeworICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKCJUaGUgIiArIGtleQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICsgIiBrZXkgY2Fubm90IGJlIHVzZWQgdG8gcHV0IGEgQ2hhclNlcXVlbmNlIik7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgbUJ1bmRsZS5wdXRDaGFyU2VxdWVuY2Uoa2V5LCB2YWx1ZSk7CisgICAgICAgICAgICByZXR1cm4gdGhpczsKKyAgICAgICAgfQorCisgICAgICAgIC8qKgorICAgICAgICAgKiBQdXQgYSBTdHJpbmcgdmFsdWUgaW50byB0aGUgbWV0YWRhdGEuIEN1c3RvbSBrZXlzIG1heSBiZSB1c2VkLCBidXQgaWYKKyAgICAgICAgICogdGhlIE1FVEFEQVRBX0tFWXMgZGVmaW5lZCBpbiB0aGlzIGNsYXNzIGFyZSB1c2VkIHRoZXkgbWF5IG9ubHkgYmUgb25lCisgICAgICAgICAqIG9mIHRoZSBmb2xsb3dpbmc6CisgICAgICAgICAqIDx1bD4KKyAgICAgICAgICogPGxpPntAbGluayAjTUVUQURBVEFfS0VZX1RJVExFfTwvbGk+CisgICAgICAgICAqIDxsaT57QGxpbmsgI01FVEFEQVRBX0tFWV9BUlRJU1R9PC9saT4KKyAgICAgICAgICogPGxpPntAbGluayAjTUVUQURBVEFfS0VZX0FMQlVNfTwvbGk+CisgICAgICAgICAqIDxsaT57QGxpbmsgI01FVEFEQVRBX0tFWV9BVVRIT1J9PC9saT4KKyAgICAgICAgICogPGxpPntAbGluayAjTUVUQURBVEFfS0VZX1dSSVRFUn08L2xpPgorICAgICAgICAgKiA8bGk+e0BsaW5rICNNRVRBREFUQV9LRVlfQ09NUE9TRVJ9PC9saT4KKyAgICAgICAgICogPGxpPntAbGluayAjTUVUQURBVEFfS0VZX0RBVEV9PC9saT4KKyAgICAgICAgICogPGxpPntAbGluayAjTUVUQURBVEFfS0VZX0dFTlJFfTwvbGk+CisgICAgICAgICAqIDxsaT57QGxpbmsgI01FVEFEQVRBX0tFWV9BTEJVTV9BUlRJU1R9PC9saT4KKyAgICAgICAgICogPGxpPntAbGluayAjTUVUQURBVEFfS0VZX0FSVF9VUkl9PC9saT4KKyAgICAgICAgICogPGxpPntAbGluayAjTUVUQURBVEFfS0VZX0FMQlVNX0FSVF9VUkl9PC9saT4KKyAgICAgICAgICogPGxpPntAbGluayAjTUVUQURBVEFfS0VZX0RJU1BMQVlfVElUTEV9PC9saT4KKyAgICAgICAgICogPGxpPntAbGluayAjTUVUQURBVEFfS0VZX0RJU1BMQVlfU1VCVElUTEV9PC9saT4KKyAgICAgICAgICogPGxpPntAbGluayAjTUVUQURBVEFfS0VZX0RJU1BMQVlfREVTQ1JJUFRJT059PC9saT4KKyAgICAgICAgICogPGxpPntAbGluayAjTUVUQURBVEFfS0VZX0RJU1BMQVlfSUNPTl9VUkl9PC9saT4KKyAgICAgICAgICogPC91bD4KKyAgICAgICAgICogPHA+CisgICAgICAgICAqIFVyaXMgZm9yIGFydHdvcmsgc2hvdWxkIHVzZSB0aGUgY29udGVudDovLyBzdHlsZSBhbmQgc3VwcG9ydAorICAgICAgICAgKiB7QGxpbmsgQ29udGVudFJlc29sdmVyI0VYVFJBX1NJWkV9IGZvciByZXRyaWV2aW5nIHNjYWxlZCBhcnR3b3JrCisgICAgICAgICAqIHRocm91Z2gge0BsaW5rIENvbnRlbnRSZXNvbHZlciNvcGVuVHlwZWRBc3NldEZpbGVEZXNjcmlwdG9yKFVyaSwKKyAgICAgICAgICogU3RyaW5nLCBCdW5kbGUpfS4KKyAgICAgICAgICoKKyAgICAgICAgICogQHBhcmFtIGtleSBUaGUga2V5IGZvciByZWZlcmVuY2luZyB0aGlzIHZhbHVlCisgICAgICAgICAqIEBwYXJhbSB2YWx1ZSBUaGUgU3RyaW5nIHZhbHVlIHRvIHN0b3JlCisgICAgICAgICAqIEByZXR1cm4gVGhlIEJ1aWxkZXIgdG8gYWxsb3cgY2hhaW5pbmcKKyAgICAgICAgICovCisgICAgICAgIHB1YmxpYyBCdWlsZGVyIHB1dFN0cmluZyhAVGV4dEtleSBTdHJpbmcga2V5LCBTdHJpbmcgdmFsdWUpIHsKKyAgICAgICAgICAgIGlmIChNRVRBREFUQV9LRVlTX1RZUEUuY29udGFpbnNLZXkoa2V5KSkgeworICAgICAgICAgICAgICAgIGlmIChNRVRBREFUQV9LRVlTX1RZUEUuZ2V0KGtleSkgIT0gTUVUQURBVEFfVFlQRV9URVhUKSB7CisgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oIlRoZSAiICsga2V5CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgKyAiIGtleSBjYW5ub3QgYmUgdXNlZCB0byBwdXQgYSBTdHJpbmciKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICBtQnVuZGxlLnB1dENoYXJTZXF1ZW5jZShrZXksIHZhbHVlKTsKKyAgICAgICAgICAgIHJldHVybiB0aGlzOworICAgICAgICB9CisKKyAgICAgICAgLyoqCisgICAgICAgICAqIFB1dCBhIGxvbmcgdmFsdWUgaW50byB0aGUgbWV0YWRhdGEuIEN1c3RvbSBrZXlzIG1heSBiZSB1c2VkLCBidXQgaWYKKyAgICAgICAgICogdGhlIE1FVEFEQVRBX0tFWXMgZGVmaW5lZCBpbiB0aGlzIGNsYXNzIGFyZSB1c2VkIHRoZXkgbWF5IG9ubHkgYmUgb25lCisgICAgICAgICAqIG9mIHRoZSBmb2xsb3dpbmc6CisgICAgICAgICAqIDx1bD4KKyAgICAgICAgICogPGxpPntAbGluayAjTUVUQURBVEFfS0VZX0RVUkFUSU9OfTwvbGk+CisgICAgICAgICAqIDxsaT57QGxpbmsgI01FVEFEQVRBX0tFWV9UUkFDS19OVU1CRVJ9PC9saT4KKyAgICAgICAgICogPGxpPntAbGluayAjTUVUQURBVEFfS0VZX05VTV9UUkFDS1N9PC9saT4KKyAgICAgICAgICogPGxpPntAbGluayAjTUVUQURBVEFfS0VZX0RJU0NfTlVNQkVSfTwvbGk+CisgICAgICAgICAqIDxsaT57QGxpbmsgI01FVEFEQVRBX0tFWV9ZRUFSfTwvbGk+CisgICAgICAgICAqIDwvdWw+CisgICAgICAgICAqCisgICAgICAgICAqIEBwYXJhbSBrZXkgVGhlIGtleSBmb3IgcmVmZXJlbmNpbmcgdGhpcyB2YWx1ZQorICAgICAgICAgKiBAcGFyYW0gdmFsdWUgVGhlIGxvbmcgdmFsdWUgdG8gc3RvcmUKKyAgICAgICAgICogQHJldHVybiBUaGUgQnVpbGRlciB0byBhbGxvdyBjaGFpbmluZworICAgICAgICAgKi8KKyAgICAgICAgcHVibGljIEJ1aWxkZXIgcHV0TG9uZyhATG9uZ0tleSBTdHJpbmcga2V5LCBsb25nIHZhbHVlKSB7CisgICAgICAgICAgICBpZiAoTUVUQURBVEFfS0VZU19UWVBFLmNvbnRhaW5zS2V5KGtleSkpIHsKKyAgICAgICAgICAgICAgICBpZiAoTUVUQURBVEFfS0VZU19UWVBFLmdldChrZXkpICE9IE1FVEFEQVRBX1RZUEVfTE9ORykgeworICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKCJUaGUgIiArIGtleQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICsgIiBrZXkgY2Fubm90IGJlIHVzZWQgdG8gcHV0IGEgbG9uZyIpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIG1CdW5kbGUucHV0TG9uZyhrZXksIHZhbHVlKTsKKyAgICAgICAgICAgIHJldHVybiB0aGlzOworICAgICAgICB9CisKKyAgICAgICAgLyoqCisgICAgICAgICAqIFB1dCBhIHtAbGluayBSYXRpbmd9IGludG8gdGhlIG1ldGFkYXRhLiBDdXN0b20ga2V5cyBtYXkgYmUgdXNlZCwgYnV0CisgICAgICAgICAqIGlmIHRoZSBNRVRBREFUQV9LRVlzIGRlZmluZWQgaW4gdGhpcyBjbGFzcyBhcmUgdXNlZCB0aGV5IG1heSBvbmx5IGJlCisgICAgICAgICAqIG9uZSBvZiB0aGUgZm9sbG93aW5nOgorICAgICAgICAgKiA8dWw+CisgICAgICAgICAqIDxsaT57QGxpbmsgI01FVEFEQVRBX0tFWV9SQVRJTkd9PC9saT4KKyAgICAgICAgICogPGxpPntAbGluayAjTUVUQURBVEFfS0VZX1VTRVJfUkFUSU5HfTwvbGk+CisgICAgICAgICAqIDwvdWw+CisgICAgICAgICAqCisgICAgICAgICAqIEBwYXJhbSBrZXkgVGhlIGtleSBmb3IgcmVmZXJlbmNpbmcgdGhpcyB2YWx1ZQorICAgICAgICAgKiBAcGFyYW0gdmFsdWUgVGhlIFJhdGluZyB2YWx1ZSB0byBzdG9yZQorICAgICAgICAgKiBAcmV0dXJuIFRoZSBCdWlsZGVyIHRvIGFsbG93IGNoYWluaW5nCisgICAgICAgICAqLworICAgICAgICBwdWJsaWMgQnVpbGRlciBwdXRSYXRpbmcoQFJhdGluZ0tleSBTdHJpbmcga2V5LCBSYXRpbmcgdmFsdWUpIHsKKyAgICAgICAgICAgIGlmIChNRVRBREFUQV9LRVlTX1RZUEUuY29udGFpbnNLZXkoa2V5KSkgeworICAgICAgICAgICAgICAgIGlmIChNRVRBREFUQV9LRVlTX1RZUEUuZ2V0KGtleSkgIT0gTUVUQURBVEFfVFlQRV9SQVRJTkcpIHsKKyAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbigiVGhlICIgKyBrZXkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICArICIga2V5IGNhbm5vdCBiZSB1c2VkIHRvIHB1dCBhIFJhdGluZyIpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIG1CdW5kbGUucHV0UGFyY2VsYWJsZShrZXksIHZhbHVlKTsKKyAgICAgICAgICAgIHJldHVybiB0aGlzOworICAgICAgICB9CisKKyAgICAgICAgLyoqCisgICAgICAgICAqIFB1dCBhIHtAbGluayBCaXRtYXB9IGludG8gdGhlIG1ldGFkYXRhLiBDdXN0b20ga2V5cyBtYXkgYmUgdXNlZCwgYnV0CisgICAgICAgICAqIGlmIHRoZSBNRVRBREFUQV9LRVlzIGRlZmluZWQgaW4gdGhpcyBjbGFzcyBhcmUgdXNlZCB0aGV5IG1heSBvbmx5IGJlCisgICAgICAgICAqIG9uZSBvZiB0aGUgZm9sbG93aW5nOgorICAgICAgICAgKiA8dWw+CisgICAgICAgICAqIDxsaT57QGxpbmsgI01FVEFEQVRBX0tFWV9BUlR9PC9saT4KKyAgICAgICAgICogPGxpPntAbGluayAjTUVUQURBVEFfS0VZX0FMQlVNX0FSVH08L2xpPgorICAgICAgICAgKiA8bGk+e0BsaW5rICNNRVRBREFUQV9LRVlfRElTUExBWV9JQ09OfTwvbGk+CisgICAgICAgICAqIDwvdWw+CisgICAgICAgICAqIDxwPgorICAgICAgICAgKiBMYXJnZSBiaXRtYXBzIG1heSBiZSBzY2FsZWQgZG93biBieSB0aGUgc3lzdGVtIHdoZW4KKyAgICAgICAgICoge0BsaW5rIGFuZHJvaWQubWVkaWEuc2Vzc2lvbi5NZWRpYVNlc3Npb24jc2V0TWV0YWRhdGF9IGlzIGNhbGxlZC4KKyAgICAgICAgICogVG8gcGFzcyBmdWxsIHJlc29sdXRpb24gaW1hZ2VzIHtAbGluayBVcmkgVXJpc30gc2hvdWxkIGJlIHVzZWQgd2l0aAorICAgICAgICAgKiB7QGxpbmsgI3B1dFN0cmluZ30uCisgICAgICAgICAqCisgICAgICAgICAqIEBwYXJhbSBrZXkgVGhlIGtleSBmb3IgcmVmZXJlbmNpbmcgdGhpcyB2YWx1ZQorICAgICAgICAgKiBAcGFyYW0gdmFsdWUgVGhlIEJpdG1hcCB0byBzdG9yZQorICAgICAgICAgKiBAcmV0dXJuIFRoZSBCdWlsZGVyIHRvIGFsbG93IGNoYWluaW5nCisgICAgICAgICAqLworICAgICAgICBwdWJsaWMgQnVpbGRlciBwdXRCaXRtYXAoQEJpdG1hcEtleSBTdHJpbmcga2V5LCBCaXRtYXAgdmFsdWUpIHsKKyAgICAgICAgICAgIGlmIChNRVRBREFUQV9LRVlTX1RZUEUuY29udGFpbnNLZXkoa2V5KSkgeworICAgICAgICAgICAgICAgIGlmIChNRVRBREFUQV9LRVlTX1RZUEUuZ2V0KGtleSkgIT0gTUVUQURBVEFfVFlQRV9CSVRNQVApIHsKKyAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbigiVGhlICIgKyBrZXkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICArICIga2V5IGNhbm5vdCBiZSB1c2VkIHRvIHB1dCBhIEJpdG1hcCIpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIG1CdW5kbGUucHV0UGFyY2VsYWJsZShrZXksIHZhbHVlKTsKKyAgICAgICAgICAgIHJldHVybiB0aGlzOworICAgICAgICB9CisKKyAgICAgICAgLyoqCisgICAgICAgICAqIENyZWF0ZXMgYSB7QGxpbmsgTWVkaWFNZXRhZGF0YX0gaW5zdGFuY2Ugd2l0aCB0aGUgc3BlY2lmaWVkIGZpZWxkcy4KKyAgICAgICAgICoKKyAgICAgICAgICogQHJldHVybiBUaGUgbmV3IE1lZGlhTWV0YWRhdGEgaW5zdGFuY2UKKyAgICAgICAgICovCisgICAgICAgIHB1YmxpYyBNZWRpYU1ldGFkYXRhIGJ1aWxkKCkgeworICAgICAgICAgICAgcmV0dXJuIG5ldyBNZWRpYU1ldGFkYXRhKG1CdW5kbGUpOworICAgICAgICB9CisKKyAgICAgICAgcHJpdmF0ZSBCaXRtYXAgc2NhbGVCaXRtYXAoQml0bWFwIGJtcCwgaW50IG1heFNpemUpIHsKKyAgICAgICAgICAgIGZsb2F0IG1heFNpemVGID0gbWF4U2l6ZTsKKyAgICAgICAgICAgIGZsb2F0IHdpZHRoU2NhbGUgPSBtYXhTaXplRiAvIGJtcC5nZXRXaWR0aCgpOworICAgICAgICAgICAgZmxvYXQgaGVpZ2h0U2NhbGUgPSBtYXhTaXplRiAvIGJtcC5nZXRIZWlnaHQoKTsKKyAgICAgICAgICAgIGZsb2F0IHNjYWxlID0gTWF0aC5taW4od2lkdGhTY2FsZSwgaGVpZ2h0U2NhbGUpOworICAgICAgICAgICAgaW50IGhlaWdodCA9IChpbnQpIChibXAuZ2V0SGVpZ2h0KCkgKiBzY2FsZSk7CisgICAgICAgICAgICBpbnQgd2lkdGggPSAoaW50KSAoYm1wLmdldFdpZHRoKCkgKiBzY2FsZSk7CisgICAgICAgICAgICByZXR1cm4gQml0bWFwLmNyZWF0ZVNjYWxlZEJpdG1hcChibXAsIHdpZHRoLCBoZWlnaHQsIHRydWUpOworICAgICAgICB9CisgICAgfQorfQpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvTWVkaWFDb21wb25lbnRzL2FwZXgvamF2YS9hbmRyb2lkL21lZGlhL1JhdGluZy5haWRsIGIvcGFja2FnZXMvTWVkaWFDb21wb25lbnRzL2FwZXgvamF2YS9hbmRyb2lkL21lZGlhL1JhdGluZy5haWRsCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFkYzMzNmEKLS0tIC9kZXYvbnVsbAorKysgYi9wYWNrYWdlcy9NZWRpYUNvbXBvbmVudHMvYXBleC9qYXZhL2FuZHJvaWQvbWVkaWEvUmF0aW5nLmFpZGwKQEAgLTAsMCArMSwxOSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCisKK3BhY2thZ2UgYW5kcm9pZC5tZWRpYTsKKworcGFyY2VsYWJsZSBSYXRpbmc7CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9NZWRpYUNvbXBvbmVudHMvYXBleC9qYXZhL2FuZHJvaWQvbWVkaWEvUmF0aW5nLmphdmEgYi9wYWNrYWdlcy9NZWRpYUNvbXBvbmVudHMvYXBleC9qYXZhL2FuZHJvaWQvbWVkaWEvUmF0aW5nLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDRkNTM2NAotLS0gL2Rldi9udWxsCisrKyBiL3BhY2thZ2VzL01lZGlhQ29tcG9uZW50cy9hcGV4L2phdmEvYW5kcm9pZC9tZWRpYS9SYXRpbmcuamF2YQpAQCAtMCwwICsxLDMwOCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCisKK3BhY2thZ2UgYW5kcm9pZC5tZWRpYTsKKworaW1wb3J0IGFuZHJvaWQuYW5ub3RhdGlvbi5JbnREZWY7CitpbXBvcnQgYW5kcm9pZC5vcy5QYXJjZWw7CitpbXBvcnQgYW5kcm9pZC5vcy5QYXJjZWxhYmxlOworaW1wb3J0IGFuZHJvaWQudXRpbC5Mb2c7CisKK2ltcG9ydCBqYXZhLmxhbmcuYW5ub3RhdGlvbi5SZXRlbnRpb247CitpbXBvcnQgamF2YS5sYW5nLmFubm90YXRpb24uUmV0ZW50aW9uUG9saWN5OworCisvKioKKyAqIEEgY2xhc3MgdG8gZW5jYXBzdWxhdGUgcmF0aW5nIGluZm9ybWF0aW9uIHVzZWQgYXMgY29udGVudCBtZXRhZGF0YS4KKyAqIEEgcmF0aW5nIGlzIGRlZmluZWQgYnkgaXRzIHJhdGluZyBzdHlsZSAoc2VlIHtAbGluayAjUkFUSU5HX0hFQVJUfSwKKyAqIHtAbGluayAjUkFUSU5HX1RIVU1CX1VQX0RPV059LCB7QGxpbmsgI1JBVElOR18zX1NUQVJTfSwge0BsaW5rICNSQVRJTkdfNF9TVEFSU30sCisgKiB7QGxpbmsgI1JBVElOR181X1NUQVJTfSBvciB7QGxpbmsgI1JBVElOR19QRVJDRU5UQUdFfSkgYW5kIHRoZSBhY3R1YWwgcmF0aW5nIHZhbHVlICh3aGljaCBtYXkKKyAqIGJlIGRlZmluZWQgYXMgInVucmF0ZWQiKSwgYm90aCBvZiB3aGljaCBhcmUgZGVmaW5lZCB3aGVuIHRoZSByYXRpbmcgaW5zdGFuY2UgaXMgY29uc3RydWN0ZWQKKyAqIHRocm91Z2ggb25lIG9mIHRoZSBmYWN0b3J5IG1ldGhvZHMuCisgKi8KK3B1YmxpYyBmaW5hbCBjbGFzcyBSYXRpbmcgaW1wbGVtZW50cyBQYXJjZWxhYmxlIHsKKyAgICBwcml2YXRlIGZpbmFsIHN0YXRpYyBTdHJpbmcgVEFHID0gIlJhdGluZyI7CisKKyAgICAvKioKKyAgICAgKiBAaGlkZQorICAgICAqLworICAgIEBJbnREZWYoe1JBVElOR19OT05FLCBSQVRJTkdfSEVBUlQsIFJBVElOR19USFVNQl9VUF9ET1dOLCBSQVRJTkdfM19TVEFSUywgUkFUSU5HXzRfU1RBUlMsCisgICAgICAgICAgICBSQVRJTkdfNV9TVEFSUywgUkFUSU5HX1BFUkNFTlRBR0V9KQorICAgIEBSZXRlbnRpb24oUmV0ZW50aW9uUG9saWN5LlNPVVJDRSkKKyAgICBwdWJsaWMgQGludGVyZmFjZSBTdHlsZSB7fQorCisgICAgLyoqCisgICAgICogQGhpZGUKKyAgICAgKi8KKyAgICBASW50RGVmKHtSQVRJTkdfM19TVEFSUywgUkFUSU5HXzRfU1RBUlMsIFJBVElOR181X1NUQVJTfSkKKyAgICBAUmV0ZW50aW9uKFJldGVudGlvblBvbGljeS5TT1VSQ0UpCisgICAgcHVibGljIEBpbnRlcmZhY2UgU3RhclN0eWxlIHt9CisKKyAgICAvKioKKyAgICAgKiBJbmRpY2F0ZXMgYSByYXRpbmcgc3R5bGUgaXMgbm90IHN1cHBvcnRlZC4gQSBSYXRpbmcgd2lsbCBuZXZlciBoYXZlIHRoaXMKKyAgICAgKiB0eXBlLCBidXQgY2FuIGJlIHVzZWQgYnkgb3RoZXIgY2xhc3NlcyB0byBpbmRpY2F0ZSB0aGV5IGRvIG5vdCBzdXBwb3J0CisgICAgICogUmF0aW5nLgorICAgICAqLworICAgIHB1YmxpYyBmaW5hbCBzdGF0aWMgaW50IFJBVElOR19OT05FID0gMDsKKworICAgIC8qKgorICAgICAqIEEgcmF0aW5nIHN0eWxlIHdpdGggYSBzaW5nbGUgZGVncmVlIG9mIHJhdGluZywgImhlYXJ0IiB2cyAibm8gaGVhcnQiLiBDYW4gYmUgdXNlZCB0bworICAgICAqIGluZGljYXRlIHRoZSBjb250ZW50IHJlZmVycmVkIHRvIGlzIGEgZmF2b3JpdGUgKG9yIG5vdCkuCisgICAgICovCisgICAgcHVibGljIGZpbmFsIHN0YXRpYyBpbnQgUkFUSU5HX0hFQVJUID0gMTsKKworICAgIC8qKgorICAgICAqIEEgcmF0aW5nIHN0eWxlIGZvciAidGh1bWIgdXAiIHZzICJ0aHVtYiBkb3duIi4KKyAgICAgKi8KKyAgICBwdWJsaWMgZmluYWwgc3RhdGljIGludCBSQVRJTkdfVEhVTUJfVVBfRE9XTiA9IDI7CisKKyAgICAvKioKKyAgICAgKiBBIHJhdGluZyBzdHlsZSB3aXRoIDAgdG8gMyBzdGFycy4KKyAgICAgKi8KKyAgICBwdWJsaWMgZmluYWwgc3RhdGljIGludCBSQVRJTkdfM19TVEFSUyA9IDM7CisKKyAgICAvKioKKyAgICAgKiBBIHJhdGluZyBzdHlsZSB3aXRoIDAgdG8gNCBzdGFycy4KKyAgICAgKi8KKyAgICBwdWJsaWMgZmluYWwgc3RhdGljIGludCBSQVRJTkdfNF9TVEFSUyA9IDQ7CisKKyAgICAvKioKKyAgICAgKiBBIHJhdGluZyBzdHlsZSB3aXRoIDAgdG8gNSBzdGFycy4KKyAgICAgKi8KKyAgICBwdWJsaWMgZmluYWwgc3RhdGljIGludCBSQVRJTkdfNV9TVEFSUyA9IDU7CisKKyAgICAvKioKKyAgICAgKiBBIHJhdGluZyBzdHlsZSBleHByZXNzZWQgYXMgYSBwZXJjZW50YWdlLgorICAgICAqLworICAgIHB1YmxpYyBmaW5hbCBzdGF0aWMgaW50IFJBVElOR19QRVJDRU5UQUdFID0gNjsKKworICAgIHByaXZhdGUgZmluYWwgc3RhdGljIGZsb2F0IFJBVElOR19OT1RfUkFURUQgPSAtMS4wZjsKKworICAgIHByaXZhdGUgZmluYWwgaW50IG1SYXRpbmdTdHlsZTsKKworICAgIHByaXZhdGUgZmluYWwgZmxvYXQgbVJhdGluZ1ZhbHVlOworCisgICAgcHJpdmF0ZSBSYXRpbmcoQFN0eWxlIGludCByYXRpbmdTdHlsZSwgZmxvYXQgcmF0aW5nKSB7CisgICAgICAgIG1SYXRpbmdTdHlsZSA9IHJhdGluZ1N0eWxlOworICAgICAgICBtUmF0aW5nVmFsdWUgPSByYXRpbmc7CisgICAgfQorCisgICAgQE92ZXJyaWRlCisgICAgcHVibGljIFN0cmluZyB0b1N0cmluZygpIHsKKyAgICAgICAgcmV0dXJuICJSYXRpbmc6c3R5bGU9IiArIG1SYXRpbmdTdHlsZSArICIgcmF0aW5nPSIKKyAgICAgICAgICAgICAgICArIChtUmF0aW5nVmFsdWUgPCAwLjBmID8gInVucmF0ZWQiIDogU3RyaW5nLnZhbHVlT2YobVJhdGluZ1ZhbHVlKSk7CisgICAgfQorCisgICAgQE92ZXJyaWRlCisgICAgcHVibGljIGludCBkZXNjcmliZUNvbnRlbnRzKCkgeworICAgICAgICByZXR1cm4gbVJhdGluZ1N0eWxlOworICAgIH0KKworICAgIEBPdmVycmlkZQorICAgIHB1YmxpYyB2b2lkIHdyaXRlVG9QYXJjZWwoUGFyY2VsIGRlc3QsIGludCBmbGFncykgeworICAgICAgICBkZXN0LndyaXRlSW50KG1SYXRpbmdTdHlsZSk7CisgICAgICAgIGRlc3Qud3JpdGVGbG9hdChtUmF0aW5nVmFsdWUpOworICAgIH0KKworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgUGFyY2VsYWJsZS5DcmVhdG9yPFJhdGluZz4gQ1JFQVRPUgorICAgICAgICAgICAgPSBuZXcgUGFyY2VsYWJsZS5DcmVhdG9yPFJhdGluZz4oKSB7CisgICAgICAgIC8qKgorICAgICAgICAgKiBSZWJ1aWxkcyBhIFJhdGluZyBwcmV2aW91c2x5IHN0b3JlZCB3aXRoIHdyaXRlVG9QYXJjZWwoKS4KKyAgICAgICAgICogQHBhcmFtIHAgICAgUGFyY2VsIG9iamVjdCB0byByZWFkIHRoZSBSYXRpbmcgZnJvbQorICAgICAgICAgKiBAcmV0dXJuIGEgbmV3IFJhdGluZyBjcmVhdGVkIGZyb20gdGhlIGRhdGEgaW4gdGhlIHBhcmNlbAorICAgICAgICAgKi8KKyAgICAgICAgQE92ZXJyaWRlCisgICAgICAgIHB1YmxpYyBSYXRpbmcgY3JlYXRlRnJvbVBhcmNlbChQYXJjZWwgcCkgeworICAgICAgICAgICAgcmV0dXJuIG5ldyBSYXRpbmcocC5yZWFkSW50KCksIHAucmVhZEZsb2F0KCkpOworICAgICAgICB9CisKKyAgICAgICAgQE92ZXJyaWRlCisgICAgICAgIHB1YmxpYyBSYXRpbmdbXSBuZXdBcnJheShpbnQgc2l6ZSkgeworICAgICAgICAgICAgcmV0dXJuIG5ldyBSYXRpbmdbc2l6ZV07CisgICAgICAgIH0KKyAgICB9OworCisgICAgLyoqCisgICAgICogUmV0dXJuIGEgUmF0aW5nIGluc3RhbmNlIHdpdGggbm8gcmF0aW5nLgorICAgICAqIENyZWF0ZSBhbmQgcmV0dXJuIGEgbmV3IFJhdGluZyBpbnN0YW5jZSB3aXRoIG5vIHJhdGluZyBrbm93biBmb3IgdGhlIGdpdmVuCisgICAgICogcmF0aW5nIHN0eWxlLgorICAgICAqIEBwYXJhbSByYXRpbmdTdHlsZSBvbmUgb2Yge0BsaW5rICNSQVRJTkdfSEVBUlR9LCB7QGxpbmsgI1JBVElOR19USFVNQl9VUF9ET1dOfSwKKyAgICAgKiAgICB7QGxpbmsgI1JBVElOR18zX1NUQVJTfSwge0BsaW5rICNSQVRJTkdfNF9TVEFSU30sIHtAbGluayAjUkFUSU5HXzVfU1RBUlN9LAorICAgICAqICAgIG9yIHtAbGluayAjUkFUSU5HX1BFUkNFTlRBR0V9LgorICAgICAqIEByZXR1cm4gbnVsbCBpZiBhbiBpbnZhbGlkIHJhdGluZyBzdHlsZSBpcyBwYXNzZWQsIGEgbmV3IFJhdGluZyBpbnN0YW5jZSBvdGhlcndpc2UuCisgICAgICovCisgICAgcHVibGljIHN0YXRpYyBSYXRpbmcgbmV3VW5yYXRlZFJhdGluZyhAU3R5bGUgaW50IHJhdGluZ1N0eWxlKSB7CisgICAgICAgIHN3aXRjaChyYXRpbmdTdHlsZSkgeworICAgICAgICAgICAgY2FzZSBSQVRJTkdfSEVBUlQ6CisgICAgICAgICAgICBjYXNlIFJBVElOR19USFVNQl9VUF9ET1dOOgorICAgICAgICAgICAgY2FzZSBSQVRJTkdfM19TVEFSUzoKKyAgICAgICAgICAgIGNhc2UgUkFUSU5HXzRfU1RBUlM6CisgICAgICAgICAgICBjYXNlIFJBVElOR181X1NUQVJTOgorICAgICAgICAgICAgY2FzZSBSQVRJTkdfUEVSQ0VOVEFHRToKKyAgICAgICAgICAgICAgICByZXR1cm4gbmV3IFJhdGluZyhyYXRpbmdTdHlsZSwgUkFUSU5HX05PVF9SQVRFRCk7CisgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgIHJldHVybiBudWxsOworICAgICAgICB9CisgICAgfQorCisgICAgLyoqCisgICAgICogUmV0dXJuIGEgUmF0aW5nIGluc3RhbmNlIHdpdGggYSBoZWFydC1iYXNlZCByYXRpbmcuCisgICAgICogQ3JlYXRlIGFuZCByZXR1cm4gYSBuZXcgUmF0aW5nIGluc3RhbmNlIHdpdGggYSByYXRpbmcgc3R5bGUgb2Yge0BsaW5rICNSQVRJTkdfSEVBUlR9LAorICAgICAqIGFuZCBhIGhlYXJ0LWJhc2VkIHJhdGluZy4KKyAgICAgKiBAcGFyYW0gaGFzSGVhcnQgdHJ1ZSBmb3IgYSAiaGVhcnQgc2VsZWN0ZWQiIHJhdGluZywgZmFsc2UgZm9yICJoZWFydCB1bnNlbGVjdGVkIi4KKyAgICAgKiBAcmV0dXJuIGEgbmV3IFJhdGluZyBpbnN0YW5jZS4KKyAgICAgKi8KKyAgICBwdWJsaWMgc3RhdGljIFJhdGluZyBuZXdIZWFydFJhdGluZyhib29sZWFuIGhhc0hlYXJ0KSB7CisgICAgICAgIHJldHVybiBuZXcgUmF0aW5nKFJBVElOR19IRUFSVCwgaGFzSGVhcnQgPyAxLjBmIDogMC4wZik7CisgICAgfQorCisgICAgLyoqCisgICAgICogUmV0dXJuIGEgUmF0aW5nIGluc3RhbmNlIHdpdGggYSB0aHVtYi1iYXNlZCByYXRpbmcuCisgICAgICogQ3JlYXRlIGFuZCByZXR1cm4gYSBuZXcgUmF0aW5nIGluc3RhbmNlIHdpdGggYSB7QGxpbmsgI1JBVElOR19USFVNQl9VUF9ET1dOfQorICAgICAqIHJhdGluZyBzdHlsZSwgYW5kIGEgInRodW1iIHVwIiBvciAidGh1bWIgZG93biIgcmF0aW5nLgorICAgICAqIEBwYXJhbSB0aHVtYklzVXAgdHJ1ZSBmb3IgYSAidGh1bWIgdXAiIHJhdGluZywgZmFsc2UgZm9yICJ0aHVtYiBkb3duIi4KKyAgICAgKiBAcmV0dXJuIGEgbmV3IFJhdGluZyBpbnN0YW5jZS4KKyAgICAgKi8KKyAgICBwdWJsaWMgc3RhdGljIFJhdGluZyBuZXdUaHVtYlJhdGluZyhib29sZWFuIHRodW1iSXNVcCkgeworICAgICAgICByZXR1cm4gbmV3IFJhdGluZyhSQVRJTkdfVEhVTUJfVVBfRE9XTiwgdGh1bWJJc1VwID8gMS4wZiA6IDAuMGYpOworICAgIH0KKworICAgIC8qKgorICAgICAqIFJldHVybiBhIFJhdGluZyBpbnN0YW5jZSB3aXRoIGEgc3Rhci1iYXNlZCByYXRpbmcuCisgICAgICogQ3JlYXRlIGFuZCByZXR1cm4gYSBuZXcgUmF0aW5nIGluc3RhbmNlIHdpdGggb25lIG9mIHRoZSBzdGFyLWJhc2UgcmF0aW5nIHN0eWxlcworICAgICAqIGFuZCB0aGUgZ2l2ZW4gaW50ZWdlciBvciBmcmFjdGlvbmFsIG51bWJlciBvZiBzdGFycy4gTm9uIGludGVnZXIgdmFsdWVzIGNhbiBmb3IgaW5zdGFuY2UKKyAgICAgKiBiZSB1c2VkIHRvIHJlcHJlc2VudCBhbiBhdmVyYWdlIHJhdGluZyB2YWx1ZSwgd2hpY2ggbWlnaHQgbm90IGJlIGFuIGludGVnZXIgbnVtYmVyIG9mIHN0YXJzLgorICAgICAqIEBwYXJhbSBzdGFyUmF0aW5nU3R5bGUgb25lIG9mIHtAbGluayAjUkFUSU5HXzNfU1RBUlN9LCB7QGxpbmsgI1JBVElOR180X1NUQVJTfSwKKyAgICAgKiAgICAge0BsaW5rICNSQVRJTkdfNV9TVEFSU30uCisgICAgICogQHBhcmFtIHN0YXJSYXRpbmcgYSBudW1iZXIgcmFuZ2luZyBmcm9tIDAuMGYgdG8gMy4wZiwgNC4wZiBvciA1LjBmIGFjY29yZGluZyB0bworICAgICAqICAgICB0aGUgcmF0aW5nIHN0eWxlLgorICAgICAqIEByZXR1cm4gbnVsbCBpZiB0aGUgcmF0aW5nIHN0eWxlIGlzIGludmFsaWQsIG9yIHRoZSByYXRpbmcgaXMgb3V0IG9mIHJhbmdlLAorICAgICAqICAgICBhIG5ldyBSYXRpbmcgaW5zdGFuY2Ugb3RoZXJ3aXNlLgorICAgICAqLworICAgIHB1YmxpYyBzdGF0aWMgUmF0aW5nIG5ld1N0YXJSYXRpbmcoQFN0YXJTdHlsZSBpbnQgc3RhclJhdGluZ1N0eWxlLCBmbG9hdCBzdGFyUmF0aW5nKSB7CisgICAgICAgIGZsb2F0IG1heFJhdGluZyA9IC0xLjBmOworICAgICAgICBzd2l0Y2goc3RhclJhdGluZ1N0eWxlKSB7CisgICAgICAgICAgICBjYXNlIFJBVElOR18zX1NUQVJTOgorICAgICAgICAgICAgICAgIG1heFJhdGluZyA9IDMuMGY7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIFJBVElOR180X1NUQVJTOgorICAgICAgICAgICAgICAgIG1heFJhdGluZyA9IDQuMGY7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIFJBVElOR181X1NUQVJTOgorICAgICAgICAgICAgICAgIG1heFJhdGluZyA9IDUuMGY7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgIExvZy5lKFRBRywgIkludmFsaWQgcmF0aW5nIHN0eWxlICgiICsgc3RhclJhdGluZ1N0eWxlICsgIikgZm9yIGEgc3RhciByYXRpbmciKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBudWxsOworICAgICAgICB9CisgICAgICAgIGlmICgoc3RhclJhdGluZyA8IDAuMGYpIHx8IChzdGFyUmF0aW5nID4gbWF4UmF0aW5nKSkgeworICAgICAgICAgICAgTG9nLmUoVEFHLCAiVHJ5aW5nIHRvIHNldCBvdXQgb2YgcmFuZ2Ugc3Rhci1iYXNlZCByYXRpbmciKTsKKyAgICAgICAgICAgIHJldHVybiBudWxsOworICAgICAgICB9CisgICAgICAgIHJldHVybiBuZXcgUmF0aW5nKHN0YXJSYXRpbmdTdHlsZSwgc3RhclJhdGluZyk7CisgICAgfQorCisgICAgLyoqCisgICAgICogUmV0dXJuIGEgUmF0aW5nIGluc3RhbmNlIHdpdGggYSBwZXJjZW50YWdlLWJhc2VkIHJhdGluZy4KKyAgICAgKiBDcmVhdGUgYW5kIHJldHVybiBhIG5ldyBSYXRpbmcgaW5zdGFuY2Ugd2l0aCBhIHtAbGluayAjUkFUSU5HX1BFUkNFTlRBR0V9CisgICAgICogcmF0aW5nIHN0eWxlLCBhbmQgYSByYXRpbmcgb2YgdGhlIGdpdmVuIHBlcmNlbnRhZ2UuCisgICAgICogQHBhcmFtIHBlcmNlbnQgdGhlIHZhbHVlIG9mIHRoZSByYXRpbmcKKyAgICAgKiBAcmV0dXJuIG51bGwgaWYgdGhlIHJhdGluZyBpcyBvdXQgb2YgcmFuZ2UsIGEgbmV3IFJhdGluZyBpbnN0YW5jZSBvdGhlcndpc2UuCisgICAgICovCisgICAgcHVibGljIHN0YXRpYyBSYXRpbmcgbmV3UGVyY2VudGFnZVJhdGluZyhmbG9hdCBwZXJjZW50KSB7CisgICAgICAgIGlmICgocGVyY2VudCA8IDAuMGYpIHx8IChwZXJjZW50ID4gMTAwLjBmKSkgeworICAgICAgICAgICAgTG9nLmUoVEFHLCAiSW52YWxpZCBwZXJjZW50YWdlLWJhc2VkIHJhdGluZyB2YWx1ZSIpOworICAgICAgICAgICAgcmV0dXJuIG51bGw7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICByZXR1cm4gbmV3IFJhdGluZyhSQVRJTkdfUEVSQ0VOVEFHRSwgcGVyY2VudCk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBSZXR1cm4gd2hldGhlciB0aGVyZSBpcyBhIHJhdGluZyB2YWx1ZSBhdmFpbGFibGUuCisgICAgICogQHJldHVybiB0cnVlIGlmIHRoZSBpbnN0YW5jZSB3YXMgbm90IGNyZWF0ZWQgd2l0aCB7QGxpbmsgI25ld1VucmF0ZWRSYXRpbmcoaW50KX0uCisgICAgICovCisgICAgcHVibGljIGJvb2xlYW4gaXNSYXRlZCgpIHsKKyAgICAgICAgcmV0dXJuIG1SYXRpbmdWYWx1ZSA+PSAwLjBmOworICAgIH0KKworICAgIC8qKgorICAgICAqIFJldHVybiB0aGUgcmF0aW5nIHN0eWxlLgorICAgICAqIEByZXR1cm4gb25lIG9mIHtAbGluayAjUkFUSU5HX0hFQVJUfSwge0BsaW5rICNSQVRJTkdfVEhVTUJfVVBfRE9XTn0sCisgICAgICogICAge0BsaW5rICNSQVRJTkdfM19TVEFSU30sIHtAbGluayAjUkFUSU5HXzRfU1RBUlN9LCB7QGxpbmsgI1JBVElOR181X1NUQVJTfSwKKyAgICAgKiAgICBvciB7QGxpbmsgI1JBVElOR19QRVJDRU5UQUdFfS4KKyAgICAgKi8KKyAgICBAU3R5bGUKKyAgICBwdWJsaWMgaW50IGdldFJhdGluZ1N0eWxlKCkgeworICAgICAgICByZXR1cm4gbVJhdGluZ1N0eWxlOworICAgIH0KKworICAgIC8qKgorICAgICAqIFJldHVybiB3aGV0aGVyIHRoZSByYXRpbmcgaXMgImhlYXJ0IHNlbGVjdGVkIi4KKyAgICAgKiBAcmV0dXJuIHRydWUgaWYgdGhlIHJhdGluZyBpcyAiaGVhcnQgc2VsZWN0ZWQiLCBmYWxzZSBpZiB0aGUgcmF0aW5nIGlzICJoZWFydCB1bnNlbGVjdGVkIiwKKyAgICAgKiAgICBpZiB0aGUgcmF0aW5nIHN0eWxlIGlzIG5vdCB7QGxpbmsgI1JBVElOR19IRUFSVH0gb3IgaWYgaXQgaXMgdW5yYXRlZC4KKyAgICAgKi8KKyAgICBwdWJsaWMgYm9vbGVhbiBoYXNIZWFydCgpIHsKKyAgICAgICAgaWYgKG1SYXRpbmdTdHlsZSAhPSBSQVRJTkdfSEVBUlQpIHsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHJldHVybiAobVJhdGluZ1ZhbHVlID09IDEuMGYpOworICAgICAgICB9CisgICAgfQorCisgICAgLyoqCisgICAgICogUmV0dXJuIHdoZXRoZXIgdGhlIHJhdGluZyBpcyAidGh1bWIgdXAiLgorICAgICAqIEByZXR1cm4gdHJ1ZSBpZiB0aGUgcmF0aW5nIGlzICJ0aHVtYiB1cCIsIGZhbHNlIGlmIHRoZSByYXRpbmcgaXMgInRodW1iIGRvd24iLAorICAgICAqICAgIGlmIHRoZSByYXRpbmcgc3R5bGUgaXMgbm90IHtAbGluayAjUkFUSU5HX1RIVU1CX1VQX0RPV059IG9yIGlmIGl0IGlzIHVucmF0ZWQuCisgICAgICovCisgICAgcHVibGljIGJvb2xlYW4gaXNUaHVtYlVwKCkgeworICAgICAgICBpZiAobVJhdGluZ1N0eWxlICE9IFJBVElOR19USFVNQl9VUF9ET1dOKSB7CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICByZXR1cm4gKG1SYXRpbmdWYWx1ZSA9PSAxLjBmKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIC8qKgorICAgICAqIFJldHVybiB0aGUgc3Rhci1iYXNlZCByYXRpbmcgdmFsdWUuCisgICAgICogQHJldHVybiBhIHJhdGluZyB2YWx1ZSBncmVhdGVyIG9yIGVxdWFsIHRvIDAuMGYsIG9yIGEgbmVnYXRpdmUgdmFsdWUgaWYgdGhlIHJhdGluZyBzdHlsZSBpcworICAgICAqICAgIG5vdCBzdGFyLWJhc2VkLCBvciBpZiBpdCBpcyB1bnJhdGVkLgorICAgICAqLworICAgIHB1YmxpYyBmbG9hdCBnZXRTdGFyUmF0aW5nKCkgeworICAgICAgICBzd2l0Y2ggKG1SYXRpbmdTdHlsZSkgeworICAgICAgICAgICAgY2FzZSBSQVRJTkdfM19TVEFSUzoKKyAgICAgICAgICAgIGNhc2UgUkFUSU5HXzRfU1RBUlM6CisgICAgICAgICAgICBjYXNlIFJBVElOR181X1NUQVJTOgorICAgICAgICAgICAgICAgIGlmIChpc1JhdGVkKCkpIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG1SYXRpbmdWYWx1ZTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgIHJldHVybiAtMS4wZjsKKyAgICAgICAgfQorICAgIH0KKworICAgIC8qKgorICAgICAqIFJldHVybiB0aGUgcGVyY2VudGFnZS1iYXNlZCByYXRpbmcgdmFsdWUuCisgICAgICogQHJldHVybiBhIHJhdGluZyB2YWx1ZSBncmVhdGVyIG9yIGVxdWFsIHRvIDAuMGYsIG9yIGEgbmVnYXRpdmUgdmFsdWUgaWYgdGhlIHJhdGluZyBzdHlsZSBpcworICAgICAqICAgIG5vdCBwZXJjZW50YWdlLWJhc2VkLCBvciBpZiBpdCBpcyB1bnJhdGVkLgorICAgICAqLworICAgIHB1YmxpYyBmbG9hdCBnZXRQZXJjZW50UmF0aW5nKCkgeworICAgICAgICBpZiAoKG1SYXRpbmdTdHlsZSAhPSBSQVRJTkdfUEVSQ0VOVEFHRSkgfHwgIWlzUmF0ZWQoKSkgeworICAgICAgICAgICAgcmV0dXJuIC0xLjBmOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgcmV0dXJuIG1SYXRpbmdWYWx1ZTsKKyAgICAgICAgfQorICAgIH0KK30KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL01lZGlhQ29tcG9uZW50cy9hcGV4L2phdmEvYW5kcm9pZC9tZWRpYS9Wb2x1bWVQcm92aWRlci5qYXZhIGIvcGFja2FnZXMvTWVkaWFDb21wb25lbnRzL2FwZXgvamF2YS9hbmRyb2lkL21lZGlhL1ZvbHVtZVByb3ZpZGVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWMwMTdjNQotLS0gL2Rldi9udWxsCisrKyBiL3BhY2thZ2VzL01lZGlhQ29tcG9uZW50cy9hcGV4L2phdmEvYW5kcm9pZC9tZWRpYS9Wb2x1bWVQcm92aWRlci5qYXZhCkBAIC0wLDAgKzEsMTYxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE0IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KK3BhY2thZ2UgYW5kcm9pZC5tZWRpYTsKKworaW1wb3J0IGFuZHJvaWQuYW5ub3RhdGlvbi5JbnREZWY7CitpbXBvcnQgYW5kcm9pZC5tZWRpYS5zZXNzaW9uLk1lZGlhU2Vzc2lvbjsKKworaW1wb3J0IGphdmEubGFuZy5hbm5vdGF0aW9uLlJldGVudGlvbjsKK2ltcG9ydCBqYXZhLmxhbmcuYW5ub3RhdGlvbi5SZXRlbnRpb25Qb2xpY3k7CisKKy8qKgorICogSGFuZGxlcyByZXF1ZXN0cyB0byBhZGp1c3Qgb3Igc2V0IHRoZSB2b2x1bWUgb24gYSBzZXNzaW9uLiBUaGlzIGlzIGFsc28gdXNlZAorICogdG8gcHVzaCB2b2x1bWUgdXBkYXRlcyBiYWNrIHRvIHRoZSBzZXNzaW9uLiBUaGUgcHJvdmlkZXIgbXVzdCBjYWxsCisgKiB7QGxpbmsgI3NldEN1cnJlbnRWb2x1bWUoaW50KX0gZWFjaCB0aW1lIHRoZSB2b2x1bWUgYmVpbmcgcHJvdmlkZWQgY2hhbmdlcy4KKyAqIDxwPgorICogWW91IGNhbiBzZXQgYSB2b2x1bWUgcHJvdmlkZXIgb24gYSBzZXNzaW9uIGJ5IGNhbGxpbmcKKyAqIHtAbGluayBNZWRpYVNlc3Npb24jc2V0UGxheWJhY2tUb1JlbW90ZX0uCisgKi8KK3B1YmxpYyBhYnN0cmFjdCBjbGFzcyBWb2x1bWVQcm92aWRlciB7CisKKyAgICAvKioKKyAgICAgKiBAaGlkZQorICAgICAqLworICAgIEBJbnREZWYoe1ZPTFVNRV9DT05UUk9MX0ZJWEVELCBWT0xVTUVfQ09OVFJPTF9SRUxBVElWRSwgVk9MVU1FX0NPTlRST0xfQUJTT0xVVEV9KQorICAgIEBSZXRlbnRpb24oUmV0ZW50aW9uUG9saWN5LlNPVVJDRSkKKyAgICBwdWJsaWMgQGludGVyZmFjZSBDb250cm9sVHlwZSB7fQorCisgICAgLyoqCisgICAgICogVGhlIHZvbHVtZSBpcyBmaXhlZCBhbmQgY2FuIG5vdCBiZSBtb2RpZmllZC4gUmVxdWVzdHMgdG8gY2hhbmdlIHZvbHVtZQorICAgICAqIHNob3VsZCBiZSBpZ25vcmVkLgorICAgICAqLworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFZPTFVNRV9DT05UUk9MX0ZJWEVEID0gMDsKKworICAgIC8qKgorICAgICAqIFRoZSB2b2x1bWUgY29udHJvbCB1c2VzIHJlbGF0aXZlIGFkanVzdG1lbnQgdmlhCisgICAgICoge0BsaW5rICNvbkFkanVzdFZvbHVtZShpbnQpfS4gQXR0ZW1wdHMgdG8gc2V0IHRoZSB2b2x1bWUgdG8gYSBzcGVjaWZpYworICAgICAqIHZhbHVlIHNob3VsZCBiZSBpZ25vcmVkLgorICAgICAqLworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFZPTFVNRV9DT05UUk9MX1JFTEFUSVZFID0gMTsKKworICAgIC8qKgorICAgICAqIFRoZSB2b2x1bWUgY29udHJvbCB1c2VzIGFuIGFic29sdXRlIHZhbHVlLiBJdCBtYXkgYmUgYWRqdXN0ZWQgdXNpbmcKKyAgICAgKiB7QGxpbmsgI29uQWRqdXN0Vm9sdW1lKGludCl9IG9yIHNldCBkaXJlY3RseSB1c2luZworICAgICAqIHtAbGluayAjb25TZXRWb2x1bWVUbyhpbnQpfS4KKyAgICAgKi8KKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBWT0xVTUVfQ09OVFJPTF9BQlNPTFVURSA9IDI7CisKKyAgICBwcml2YXRlIGZpbmFsIGludCBtQ29udHJvbFR5cGU7CisgICAgcHJpdmF0ZSBmaW5hbCBpbnQgbU1heFZvbHVtZTsKKyAgICBwcml2YXRlIGludCBtQ3VycmVudFZvbHVtZTsKKyAgICBwcml2YXRlIENhbGxiYWNrIG1DYWxsYmFjazsKKworICAgIC8qKgorICAgICAqIENyZWF0ZSBhIG5ldyB2b2x1bWUgcHJvdmlkZXIgZm9yIGhhbmRsaW5nIHZvbHVtZSBldmVudHMuIFlvdSBtdXN0IHNwZWNpZnkKKyAgICAgKiB0aGUgdHlwZSBvZiB2b2x1bWUgY29udHJvbCwgdGhlIG1heGltdW0gdm9sdW1lIHRoYXQgY2FuIGJlIHVzZWQsIGFuZCB0aGUKKyAgICAgKiBjdXJyZW50IHZvbHVtZSBvbiB0aGUgb3V0cHV0LgorICAgICAqCisgICAgICogQHBhcmFtIHZvbHVtZUNvbnRyb2wgVGhlIG1ldGhvZCBmb3IgY29udHJvbGxpbmcgdm9sdW1lIHRoYXQgaXMgdXNlZCBieQorICAgICAqICAgICAgICAgICAgdGhpcyBwcm92aWRlci4KKyAgICAgKiBAcGFyYW0gbWF4Vm9sdW1lIFRoZSBtYXhpbXVtIGFsbG93ZWQgdm9sdW1lLgorICAgICAqIEBwYXJhbSBjdXJyZW50Vm9sdW1lIFRoZSBjdXJyZW50IHZvbHVtZSBvbiB0aGUgb3V0cHV0LgorICAgICAqLworICAgIHB1YmxpYyBWb2x1bWVQcm92aWRlcihAQ29udHJvbFR5cGUgaW50IHZvbHVtZUNvbnRyb2wsIGludCBtYXhWb2x1bWUsIGludCBjdXJyZW50Vm9sdW1lKSB7CisgICAgICAgIG1Db250cm9sVHlwZSA9IHZvbHVtZUNvbnRyb2w7CisgICAgICAgIG1NYXhWb2x1bWUgPSBtYXhWb2x1bWU7CisgICAgICAgIG1DdXJyZW50Vm9sdW1lID0gY3VycmVudFZvbHVtZTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBHZXQgdGhlIHZvbHVtZSBjb250cm9sIHR5cGUgdGhhdCB0aGlzIHZvbHVtZSBwcm92aWRlciB1c2VzLgorICAgICAqCisgICAgICogQHJldHVybiBUaGUgdm9sdW1lIGNvbnRyb2wgdHlwZSBmb3IgdGhpcyB2b2x1bWUgcHJvdmlkZXIKKyAgICAgKi8KKyAgICBAQ29udHJvbFR5cGUKKyAgICBwdWJsaWMgZmluYWwgaW50IGdldFZvbHVtZUNvbnRyb2woKSB7CisgICAgICAgIHJldHVybiBtQ29udHJvbFR5cGU7CisgICAgfQorCisgICAgLyoqCisgICAgICogR2V0IHRoZSBtYXhpbXVtIHZvbHVtZSB0aGlzIHByb3ZpZGVyIGFsbG93cy4KKyAgICAgKgorICAgICAqIEByZXR1cm4gVGhlIG1heCBhbGxvd2VkIHZvbHVtZS4KKyAgICAgKi8KKyAgICBwdWJsaWMgZmluYWwgaW50IGdldE1heFZvbHVtZSgpIHsKKyAgICAgICAgcmV0dXJuIG1NYXhWb2x1bWU7CisgICAgfQorCisgICAgLyoqCisgICAgICogR2V0cyB0aGUgY3VycmVudCB2b2x1bWUuIFRoaXMgd2lsbCBiZSB0aGUgbGFzdCB2YWx1ZSBzZXQgYnkKKyAgICAgKiB7QGxpbmsgI3NldEN1cnJlbnRWb2x1bWUoaW50KX0uCisgICAgICoKKyAgICAgKiBAcmV0dXJuIFRoZSBjdXJyZW50IHZvbHVtZS4KKyAgICAgKi8KKyAgICBwdWJsaWMgZmluYWwgaW50IGdldEN1cnJlbnRWb2x1bWUoKSB7CisgICAgICAgIHJldHVybiBtQ3VycmVudFZvbHVtZTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBOb3RpZnkgdGhlIHN5c3RlbSB0aGF0IHRoZSBjdXJyZW50IHZvbHVtZSBoYXMgYmVlbiBjaGFuZ2VkLiBUaGlzIG11c3QgYmUKKyAgICAgKiBjYWxsZWQgZXZlcnkgdGltZSB0aGUgdm9sdW1lIGNoYW5nZXMgdG8gZW5zdXJlIGl0IGlzIGRpc3BsYXllZCBwcm9wZXJseS4KKyAgICAgKgorICAgICAqIEBwYXJhbSBjdXJyZW50Vm9sdW1lIFRoZSBjdXJyZW50IHZvbHVtZSBvbiB0aGUgb3V0cHV0LgorICAgICAqLworICAgIHB1YmxpYyBmaW5hbCB2b2lkIHNldEN1cnJlbnRWb2x1bWUoaW50IGN1cnJlbnRWb2x1bWUpIHsKKyAgICAgICAgbUN1cnJlbnRWb2x1bWUgPSBjdXJyZW50Vm9sdW1lOworICAgICAgICBpZiAobUNhbGxiYWNrICE9IG51bGwpIHsKKyAgICAgICAgICAgIG1DYWxsYmFjay5vblZvbHVtZUNoYW5nZWQodGhpcyk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBPdmVycmlkZSB0byBoYW5kbGUgcmVxdWVzdHMgdG8gc2V0IHRoZSB2b2x1bWUgb2YgdGhlIGN1cnJlbnQgb3V0cHV0LgorICAgICAqIEFmdGVyIHRoZSB2b2x1bWUgaGFzIGJlZW4gbW9kaWZpZWQge0BsaW5rICNzZXRDdXJyZW50Vm9sdW1lfSBtdXN0IGJlCisgICAgICogY2FsbGVkIHRvIG5vdGlmeSB0aGUgc3lzdGVtLgorICAgICAqCisgICAgICogQHBhcmFtIHZvbHVtZSBUaGUgdm9sdW1lIHRvIHNldCB0aGUgb3V0cHV0IHRvLgorICAgICAqLworICAgIHB1YmxpYyB2b2lkIG9uU2V0Vm9sdW1lVG8oaW50IHZvbHVtZSkgeworICAgIH0KKworICAgIC8qKgorICAgICAqIE92ZXJyaWRlIHRvIGhhbmRsZSByZXF1ZXN0cyB0byBhZGp1c3QgdGhlIHZvbHVtZSBvZiB0aGUgY3VycmVudCBvdXRwdXQuCisgICAgICogRGlyZWN0aW9uIHdpbGwgYmUgb25lIG9mIHtAbGluayBBdWRpb01hbmFnZXIjQURKVVNUX0xPV0VSfSwKKyAgICAgKiB7QGxpbmsgQXVkaW9NYW5hZ2VyI0FESlVTVF9SQUlTRX0sIHtAbGluayBBdWRpb01hbmFnZXIjQURKVVNUX1NBTUV9LgorICAgICAqIEFmdGVyIHRoZSB2b2x1bWUgaGFzIGJlZW4gbW9kaWZpZWQge0BsaW5rICNzZXRDdXJyZW50Vm9sdW1lfSBtdXN0IGJlCisgICAgICogY2FsbGVkIHRvIG5vdGlmeSB0aGUgc3lzdGVtLgorICAgICAqCisgICAgICogQHBhcmFtIGRpcmVjdGlvbiBUaGUgZGlyZWN0aW9uIHRvIGNoYW5nZSB0aGUgdm9sdW1lIGluLgorICAgICAqLworICAgIHB1YmxpYyB2b2lkIG9uQWRqdXN0Vm9sdW1lKGludCBkaXJlY3Rpb24pIHsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBTZXRzIGEgY2FsbGJhY2sgdG8gcmVjZWl2ZSB2b2x1bWUgY2hhbmdlcy4KKyAgICAgKiBAaGlkZQorICAgICAqLworICAgIHB1YmxpYyB2b2lkIHNldENhbGxiYWNrKENhbGxiYWNrIGNhbGxiYWNrKSB7CisgICAgICAgIG1DYWxsYmFjayA9IGNhbGxiYWNrOworICAgIH0KKworICAgIC8qKgorICAgICAqIExpc3RlbnMgZm9yIGNoYW5nZXMgdG8gdGhlIHZvbHVtZS4KKyAgICAgKiBAaGlkZQorICAgICAqLworICAgIHB1YmxpYyBzdGF0aWMgYWJzdHJhY3QgY2xhc3MgQ2FsbGJhY2sgeworICAgICAgICBwdWJsaWMgYWJzdHJhY3Qgdm9pZCBvblZvbHVtZUNoYW5nZWQoVm9sdW1lUHJvdmlkZXIgdm9sdW1lUHJvdmlkZXIpOworICAgIH0KK30KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL01lZGlhQ29tcG9uZW50cy9hcGV4L2phdmEvYW5kcm9pZC9tZWRpYS9icm93c2UvTWVkaWFCcm93c2VyLmFpZGwgYi9wYWNrYWdlcy9NZWRpYUNvbXBvbmVudHMvYXBleC9qYXZhL2FuZHJvaWQvbWVkaWEvYnJvd3NlL01lZGlhQnJvd3Nlci5haWRsCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc4MmUwOTQKLS0tIC9kZXYvbnVsbAorKysgYi9wYWNrYWdlcy9NZWRpYUNvbXBvbmVudHMvYXBleC9qYXZhL2FuZHJvaWQvbWVkaWEvYnJvd3NlL01lZGlhQnJvd3Nlci5haWRsCkBAIC0wLDAgKzEsMTggQEAKKy8qIENvcHlyaWdodCAyMDE0LCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisqKgorKiogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisqKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisqKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyoqCisqKiAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisqKgorKiogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorKiogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyoqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorKiogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorKiogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisqLworCitwYWNrYWdlIGFuZHJvaWQubWVkaWEuYnJvd3NlOworCitwYXJjZWxhYmxlIE1lZGlhQnJvd3Nlci5NZWRpYUl0ZW07ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvTWVkaWFDb21wb25lbnRzL2FwZXgvamF2YS9hbmRyb2lkL21lZGlhL2Jyb3dzZS9NZWRpYUJyb3dzZXIuamF2YSBiL3BhY2thZ2VzL01lZGlhQ29tcG9uZW50cy9hcGV4L2phdmEvYW5kcm9pZC9tZWRpYS9icm93c2UvTWVkaWFCcm93c2VyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGUwOTFhZAotLS0gL2Rldi9udWxsCisrKyBiL3BhY2thZ2VzL01lZGlhQ29tcG9uZW50cy9hcGV4L2phdmEvYW5kcm9pZC9tZWRpYS9icm93c2UvTWVkaWFCcm93c2VyLmphdmEKQEAgLTAsMCArMSwxMTc3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE0IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KKworcGFja2FnZSBhbmRyb2lkLm1lZGlhLmJyb3dzZTsKKworaW1wb3J0IGFuZHJvaWQuYW5ub3RhdGlvbi5JbnREZWY7CitpbXBvcnQgYW5kcm9pZC5hbm5vdGF0aW9uLk5vbk51bGw7CitpbXBvcnQgYW5kcm9pZC5hbm5vdGF0aW9uLk51bGxhYmxlOworaW1wb3J0IGFuZHJvaWQuY29udGVudC5Db21wb25lbnROYW1lOworaW1wb3J0IGFuZHJvaWQuY29udGVudC5Db250ZXh0OworaW1wb3J0IGFuZHJvaWQuY29udGVudC5JbnRlbnQ7CitpbXBvcnQgYW5kcm9pZC5jb250ZW50LlNlcnZpY2VDb25uZWN0aW9uOworLy9pbXBvcnQgYW5kcm9pZC5jb250ZW50LnBtLlBhcmNlbGVkTGlzdFNsaWNlOworaW1wb3J0IGFuZHJvaWQubWVkaWEuTWVkaWFEZXNjcmlwdGlvbjsKK2ltcG9ydCBhbmRyb2lkLm1lZGlhLnNlc3Npb24uTWVkaWFDb250cm9sbGVyOworaW1wb3J0IGFuZHJvaWQubWVkaWEuc2Vzc2lvbi5NZWRpYVNlc3Npb247CitpbXBvcnQgYW5kcm9pZC5vcy5CaW5kZXI7CitpbXBvcnQgYW5kcm9pZC5vcy5CdW5kbGU7CitpbXBvcnQgYW5kcm9pZC5vcy5IYW5kbGVyOworaW1wb3J0IGFuZHJvaWQub3MuSUJpbmRlcjsKK2ltcG9ydCBhbmRyb2lkLm9zLlBhcmNlbDsKK2ltcG9ydCBhbmRyb2lkLm9zLlBhcmNlbGFibGU7CitpbXBvcnQgYW5kcm9pZC5vcy5SZW1vdGVFeGNlcHRpb247CitpbXBvcnQgYW5kcm9pZC5vcy5SZXN1bHRSZWNlaXZlcjsKK2ltcG9ydCBhbmRyb2lkLnNlcnZpY2UubWVkaWEuSU1lZGlhQnJvd3NlclNlcnZpY2U7CitpbXBvcnQgYW5kcm9pZC5zZXJ2aWNlLm1lZGlhLklNZWRpYUJyb3dzZXJTZXJ2aWNlQ2FsbGJhY2tzOworaW1wb3J0IGFuZHJvaWQuc2VydmljZS5tZWRpYS5NZWRpYUJyb3dzZXJTZXJ2aWNlOworaW1wb3J0IGFuZHJvaWQudGV4dC5UZXh0VXRpbHM7CitpbXBvcnQgYW5kcm9pZC51dGlsLkFycmF5TWFwOworaW1wb3J0IGFuZHJvaWQudXRpbC5Mb2c7CisKK2ltcG9ydCBqYXZhLmxhbmcuYW5ub3RhdGlvbi5SZXRlbnRpb247CitpbXBvcnQgamF2YS5sYW5nLmFubm90YXRpb24uUmV0ZW50aW9uUG9saWN5OworaW1wb3J0IGphdmEubGFuZy5yZWYuV2Vha1JlZmVyZW5jZTsKK2ltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OworaW1wb3J0IGphdmEudXRpbC5MaXN0OworaW1wb3J0IGphdmEudXRpbC5NYXAuRW50cnk7CisKKy8qKgorICogQnJvd3NlcyBtZWRpYSBjb250ZW50IG9mZmVyZWQgYnkgYSBsaW5rIE1lZGlhQnJvd3NlclNlcnZpY2UuCisgKiA8cD4KKyAqIFRoaXMgb2JqZWN0IGlzIG5vdCB0aHJlYWQtc2FmZS4gQWxsIGNhbGxzIHNob3VsZCBoYXBwZW4gb24gdGhlIHRocmVhZCBvbiB3aGljaCB0aGUgYnJvd3NlcgorICogd2FzIGNvbnN0cnVjdGVkLgorICogPC9wPgorICogPGgzPlN0YW5kYXJkIEV4dHJhIERhdGE8L2gzPgorICoKKyAqIDxwPlRoZXNlIGFyZSB0aGUgY3VycmVudCBzdGFuZGFyZCBmaWVsZHMgdGhhdCBjYW4gYmUgdXNlZCBhcyBleHRyYSBkYXRhIHZpYQorICoge0BsaW5rICNzdWJzY3JpYmUoU3RyaW5nLCBCdW5kbGUsIFN1YnNjcmlwdGlvbkNhbGxiYWNrKX0sCisgKiB7QGxpbmsgI3Vuc3Vic2NyaWJlKFN0cmluZywgU3Vic2NyaXB0aW9uQ2FsbGJhY2spfSwgYW5kCisgKiB7QGxpbmsgU3Vic2NyaXB0aW9uQ2FsbGJhY2sjb25DaGlsZHJlbkxvYWRlZChTdHJpbmcsIExpc3QsIEJ1bmRsZSl9LgorICoKKyAqIDx1bD4KKyAqICAgICA8bGk+IHtAbGluayAjRVhUUkFfUEFHRX0KKyAqICAgICA8bGk+IHtAbGluayAjRVhUUkFfUEFHRV9TSVpFfQorICogPC91bD4KKyAqLworcHVibGljIGZpbmFsIGNsYXNzIE1lZGlhQnJvd3NlciB7CisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFRBRyA9ICJNZWRpYUJyb3dzZXIiOworICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGJvb2xlYW4gREJHID0gZmFsc2U7CisKKyAgICAvKioKKyAgICAgKiBVc2VkIGFzIGFuIGludCBleHRyYSBmaWVsZCB0byBkZW5vdGUgdGhlIHBhZ2UgbnVtYmVyIHRvIHN1YnNjcmliZS4KKyAgICAgKiBUaGUgdmFsdWUgb2Yge0Bjb2RlIEVYVFJBX1BBR0V9IHNob3VsZCBiZSBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gMC4KKyAgICAgKgorICAgICAqIEBzZWUgI0VYVFJBX1BBR0VfU0laRQorICAgICAqLworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIEVYVFJBX1BBR0UgPSAiYW5kcm9pZC5tZWRpYS5icm93c2UuZXh0cmEuUEFHRSI7CisKKyAgICAvKioKKyAgICAgKiBVc2VkIGFzIGFuIGludCBleHRyYSBmaWVsZCB0byBkZW5vdGUgdGhlIG51bWJlciBvZiBtZWRpYSBpdGVtcyBpbiBhIHBhZ2UuCisgICAgICogVGhlIHZhbHVlIG9mIHtAY29kZSBFWFRSQV9QQUdFX1NJWkV9IHNob3VsZCBiZSBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gMS4KKyAgICAgKgorICAgICAqIEBzZWUgI0VYVFJBX1BBR0UKKyAgICAgKi8KKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBFWFRSQV9QQUdFX1NJWkUgPSAiYW5kcm9pZC5tZWRpYS5icm93c2UuZXh0cmEuUEFHRV9TSVpFIjsKKworICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGludCBDT05ORUNUX1NUQVRFX0RJU0NPTk5FQ1RJTkcgPSAwOworICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGludCBDT05ORUNUX1NUQVRFX0RJU0NPTk5FQ1RFRCA9IDE7CisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IENPTk5FQ1RfU1RBVEVfQ09OTkVDVElORyA9IDI7CisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IENPTk5FQ1RfU1RBVEVfQ09OTkVDVEVEID0gMzsKKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgQ09OTkVDVF9TVEFURV9TVVNQRU5ERUQgPSA0OworCisgICAgcHJpdmF0ZSBmaW5hbCBDb250ZXh0IG1Db250ZXh0OworICAgIHByaXZhdGUgZmluYWwgQ29tcG9uZW50TmFtZSBtU2VydmljZUNvbXBvbmVudDsKKyAgICBwcml2YXRlIGZpbmFsIENvbm5lY3Rpb25DYWxsYmFjayBtQ2FsbGJhY2s7CisgICAgcHJpdmF0ZSBmaW5hbCBCdW5kbGUgbVJvb3RIaW50czsKKyAgICBwcml2YXRlIGZpbmFsIEhhbmRsZXIgbUhhbmRsZXIgPSBuZXcgSGFuZGxlcigpOworICAgIHByaXZhdGUgZmluYWwgQXJyYXlNYXA8U3RyaW5nLCBTdWJzY3JpcHRpb24+IG1TdWJzY3JpcHRpb25zID0gbmV3IEFycmF5TWFwPD4oKTsKKworICAgIHByaXZhdGUgdm9sYXRpbGUgaW50IG1TdGF0ZSA9IENPTk5FQ1RfU1RBVEVfRElTQ09OTkVDVEVEOworICAgIHByaXZhdGUgdm9sYXRpbGUgU3RyaW5nIG1Sb290SWQ7CisgICAgcHJpdmF0ZSB2b2xhdGlsZSBNZWRpYVNlc3Npb24uVG9rZW4gbU1lZGlhU2Vzc2lvblRva2VuOworICAgIHByaXZhdGUgdm9sYXRpbGUgQnVuZGxlIG1FeHRyYXM7CisKKyAgICBwcml2YXRlIE1lZGlhU2VydmljZUNvbm5lY3Rpb24gbVNlcnZpY2VDb25uZWN0aW9uOworICAgIHByaXZhdGUgSU1lZGlhQnJvd3NlclNlcnZpY2UgbVNlcnZpY2VCaW5kZXI7CisgICAgcHJpdmF0ZSBJTWVkaWFCcm93c2VyU2VydmljZUNhbGxiYWNrcyBtU2VydmljZUNhbGxiYWNrczsKKworICAgIC8qKgorICAgICAqIENyZWF0ZXMgYSBtZWRpYSBicm93c2VyIGZvciB0aGUgc3BlY2lmaWVkIG1lZGlhIGJyb3dzZXIgc2VydmljZS4KKyAgICAgKgorICAgICAqIEBwYXJhbSBjb250ZXh0IFRoZSBjb250ZXh0LgorICAgICAqIEBwYXJhbSBzZXJ2aWNlQ29tcG9uZW50IFRoZSBjb21wb25lbnQgbmFtZSBvZiB0aGUgbWVkaWEgYnJvd3NlciBzZXJ2aWNlLgorICAgICAqIEBwYXJhbSBjYWxsYmFjayBUaGUgY29ubmVjdGlvbiBjYWxsYmFjay4KKyAgICAgKiBAcGFyYW0gcm9vdEhpbnRzIEFuIG9wdGlvbmFsIGJ1bmRsZSBvZiBzZXJ2aWNlLXNwZWNpZmljIGFyZ3VtZW50cyB0byBzZW5kCisgICAgICogdG8gdGhlIG1lZGlhIGJyb3dzZXIgc2VydmljZSB3aGVuIGNvbm5lY3RpbmcgYW5kIHJldHJpZXZpbmcgdGhlIHJvb3QgaWQKKyAgICAgKiBmb3IgYnJvd3NpbmcsIG9yIG51bGwgaWYgbm9uZS4gVGhlIGNvbnRlbnRzIG9mIHRoaXMgYnVuZGxlIG1heSBhZmZlY3QKKyAgICAgKiB0aGUgaW5mb3JtYXRpb24gcmV0dXJuZWQgd2hlbiBicm93c2luZy4KKyAgICAgKiBAc2VlIGFuZHJvaWQuc2VydmljZS5tZWRpYS5NZWRpYUJyb3dzZXJTZXJ2aWNlLkJyb3dzZXJSb290I0VYVFJBX1JFQ0VOVAorICAgICAqIEBzZWUgYW5kcm9pZC5zZXJ2aWNlLm1lZGlhLk1lZGlhQnJvd3NlclNlcnZpY2UuQnJvd3NlclJvb3QjRVhUUkFfT0ZGTElORQorICAgICAqIEBzZWUgYW5kcm9pZC5zZXJ2aWNlLm1lZGlhLk1lZGlhQnJvd3NlclNlcnZpY2UuQnJvd3NlclJvb3QjRVhUUkFfU1VHR0VTVEVECisgICAgICovCisgICAgcHVibGljIE1lZGlhQnJvd3NlcihDb250ZXh0IGNvbnRleHQsIENvbXBvbmVudE5hbWUgc2VydmljZUNvbXBvbmVudCwKKyAgICAgICAgICAgIENvbm5lY3Rpb25DYWxsYmFjayBjYWxsYmFjaywgQnVuZGxlIHJvb3RIaW50cykgeworICAgICAgICBpZiAoY29udGV4dCA9PSBudWxsKSB7CisgICAgICAgICAgICB0aHJvdyBuZXcgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKCJjb250ZXh0IG11c3Qgbm90IGJlIG51bGwiKTsKKyAgICAgICAgfQorICAgICAgICBpZiAoc2VydmljZUNvbXBvbmVudCA9PSBudWxsKSB7CisgICAgICAgICAgICB0aHJvdyBuZXcgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKCJzZXJ2aWNlIGNvbXBvbmVudCBtdXN0IG5vdCBiZSBudWxsIik7CisgICAgICAgIH0KKyAgICAgICAgaWYgKGNhbGxiYWNrID09IG51bGwpIHsKKyAgICAgICAgICAgIHRocm93IG5ldyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oImNvbm5lY3Rpb24gY2FsbGJhY2sgbXVzdCBub3QgYmUgbnVsbCIpOworICAgICAgICB9CisgICAgICAgIG1Db250ZXh0ID0gY29udGV4dDsKKyAgICAgICAgbVNlcnZpY2VDb21wb25lbnQgPSBzZXJ2aWNlQ29tcG9uZW50OworICAgICAgICBtQ2FsbGJhY2sgPSBjYWxsYmFjazsKKyAgICAgICAgbVJvb3RIaW50cyA9IHJvb3RIaW50cyA9PSBudWxsID8gbnVsbCA6IG5ldyBCdW5kbGUocm9vdEhpbnRzKTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBDb25uZWN0cyB0byB0aGUgbWVkaWEgYnJvd3NlciBzZXJ2aWNlLgorICAgICAqIDxwPgorICAgICAqIFRoZSBjb25uZWN0aW9uIGNhbGxiYWNrIHNwZWNpZmllZCBpbiB0aGUgY29uc3RydWN0b3Igd2lsbCBiZSBpbnZva2VkCisgICAgICogd2hlbiB0aGUgY29ubmVjdGlvbiBjb21wbGV0ZXMgb3IgZmFpbHMuCisgICAgICogPC9wPgorICAgICAqLworICAgIHB1YmxpYyB2b2lkIGNvbm5lY3QoKSB7CisgICAgICAgIGlmIChtU3RhdGUgIT0gQ09OTkVDVF9TVEFURV9ESVNDT05ORUNUSU5HICYmIG1TdGF0ZSAhPSBDT05ORUNUX1NUQVRFX0RJU0NPTk5FQ1RFRCkgeworICAgICAgICAgICAgdGhyb3cgbmV3IElsbGVnYWxTdGF0ZUV4Y2VwdGlvbigiY29ubmVjdCgpIGNhbGxlZCB3aGlsZSBuZWl0aGVyIGRpc2Nvbm5lY3Rpbmcgbm9yICIKKyAgICAgICAgICAgICAgICAgICAgKyAiZGlzY29ubmVjdGVkIChzdGF0ZT0iICsgZ2V0U3RhdGVMYWJlbChtU3RhdGUpICsgIikiKTsKKyAgICAgICAgfQorCisgICAgICAgIG1TdGF0ZSA9IENPTk5FQ1RfU1RBVEVfQ09OTkVDVElORzsKKyAgICAgICAgbUhhbmRsZXIucG9zdChuZXcgUnVubmFibGUoKSB7CisgICAgICAgICAgICBAT3ZlcnJpZGUKKyAgICAgICAgICAgIHB1YmxpYyB2b2lkIHJ1bigpIHsKKyAgICAgICAgICAgICAgICBpZiAobVN0YXRlID09IENPTk5FQ1RfU1RBVEVfRElTQ09OTkVDVElORykgeworICAgICAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIG1TdGF0ZSA9IENPTk5FQ1RfU1RBVEVfQ09OTkVDVElORzsKKyAgICAgICAgICAgICAgICAvLyBUT0RPOiByZW1vdmUgdGhpcyBleHRyYSBjaGVjay4KKyAgICAgICAgICAgICAgICBpZiAoREJHKSB7CisgICAgICAgICAgICAgICAgICAgIGlmIChtU2VydmljZUNvbm5lY3Rpb24gIT0gbnVsbCkgeworICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IFJ1bnRpbWVFeGNlcHRpb24oIm1TZXJ2aWNlQ29ubmVjdGlvbiBzaG91bGQgYmUgbnVsbC4gSW5zdGVhZCBpdCIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKyAiIGlzICIgKyBtU2VydmljZUNvbm5lY3Rpb24pOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGlmIChtU2VydmljZUJpbmRlciAhPSBudWxsKSB7CisgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBSdW50aW1lRXhjZXB0aW9uKCJtU2VydmljZUJpbmRlciBzaG91bGQgYmUgbnVsbC4gSW5zdGVhZCBpdCBpcyAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgKyBtU2VydmljZUJpbmRlcik7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGlmIChtU2VydmljZUNhbGxiYWNrcyAhPSBudWxsKSB7CisgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBSdW50aW1lRXhjZXB0aW9uKCJtU2VydmljZUNhbGxiYWNrcyBzaG91bGQgYmUgbnVsbC4gSW5zdGVhZCBpdCBpcyAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgKyBtU2VydmljZUNhbGxiYWNrcyk7CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgZmluYWwgSW50ZW50IGludGVudCA9IG5ldyBJbnRlbnQoTWVkaWFCcm93c2VyU2VydmljZS5TRVJWSUNFX0lOVEVSRkFDRSk7CisgICAgICAgICAgICAgICAgaW50ZW50LnNldENvbXBvbmVudChtU2VydmljZUNvbXBvbmVudCk7CisKKyAgICAgICAgICAgICAgICBtU2VydmljZUNvbm5lY3Rpb24gPSBuZXcgTWVkaWFTZXJ2aWNlQ29ubmVjdGlvbigpOworCisgICAgICAgICAgICAgICAgYm9vbGVhbiBib3VuZCA9IGZhbHNlOworICAgICAgICAgICAgICAgIHRyeSB7CisgICAgICAgICAgICAgICAgICAgIGJvdW5kID0gbUNvbnRleHQuYmluZFNlcnZpY2UoaW50ZW50LCBtU2VydmljZUNvbm5lY3Rpb24sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ29udGV4dC5CSU5EX0FVVE9fQ1JFQVRFKTsKKyAgICAgICAgICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZXgpIHsKKyAgICAgICAgICAgICAgICAgICAgTG9nLmUoVEFHLCAiRmFpbGVkIGJpbmRpbmcgdG8gc2VydmljZSAiICsgbVNlcnZpY2VDb21wb25lbnQpOworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIGlmICghYm91bmQpIHsKKyAgICAgICAgICAgICAgICAgICAgLy8gVGVsbCB0aGVtIHRoYXQgaXQgZGlkbid0IHdvcmsuCisgICAgICAgICAgICAgICAgICAgIGZvcmNlQ2xvc2VDb25uZWN0aW9uKCk7CisgICAgICAgICAgICAgICAgICAgIG1DYWxsYmFjay5vbkNvbm5lY3Rpb25GYWlsZWQoKTsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICBpZiAoREJHKSB7CisgICAgICAgICAgICAgICAgICAgIExvZy5kKFRBRywgImNvbm5lY3QuLi4iKTsKKyAgICAgICAgICAgICAgICAgICAgZHVtcCgpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfSk7CisgICAgfQorCisgICAgLyoqCisgICAgICogRGlzY29ubmVjdHMgZnJvbSB0aGUgbWVkaWEgYnJvd3NlciBzZXJ2aWNlLgorICAgICAqIEFmdGVyIHRoaXMsIG5vIG1vcmUgY2FsbGJhY2tzIHdpbGwgYmUgcmVjZWl2ZWQuCisgICAgICovCisgICAgcHVibGljIHZvaWQgZGlzY29ubmVjdCgpIHsKKyAgICAgICAgLy8gSXQncyBvayB0byBjYWxsIHRoaXMgYW55IHN0YXRlLCBiZWNhdXNlIGFsbG93aW5nIHRoaXMgbGV0cyBhcHBzIG5vdCBoYXZlCisgICAgICAgIC8vIHRvIGNoZWNrIGlzQ29ubmVjdGVkKCkgdW5uZWNlc3NhcmlseS4gVGhleSB3b24ndCBhcHByZWNpYXRlIHRoZSBleHRyYQorICAgICAgICAvLyBhc3NlcnRpb25zIGZvciB0aGlzLiBXZSBkbyBldmVyeXRoaW5nIHdlIGNhbiBoZXJlIHRvIGdvIGJhY2sgdG8gYSBzYW5lIHN0YXRlLgorICAgICAgICBtU3RhdGUgPSBDT05ORUNUX1NUQVRFX0RJU0NPTk5FQ1RJTkc7CisgICAgICAgIG1IYW5kbGVyLnBvc3QobmV3IFJ1bm5hYmxlKCkgeworICAgICAgICAgICAgQE92ZXJyaWRlCisgICAgICAgICAgICBwdWJsaWMgdm9pZCBydW4oKSB7CisgICAgICAgICAgICAgICAgLy8gY29ubmVjdCgpIGNvdWxkIGJlIGNhbGxlZCBiZWZvcmUgdGhpcy4gVGhlbiB3ZSB3aWxsIGRpc2Nvbm5lY3QgYW5kIHJlY29ubmVjdC4KKyAgICAgICAgICAgICAgICBpZiAobVNlcnZpY2VDYWxsYmFja3MgIT0gbnVsbCkgeworICAgICAgICAgICAgICAgICAgICB0cnkgeworICAgICAgICAgICAgICAgICAgICAgICAgbVNlcnZpY2VCaW5kZXIuZGlzY29ubmVjdChtU2VydmljZUNhbGxiYWNrcyk7CisgICAgICAgICAgICAgICAgICAgIH0gY2F0Y2ggKFJlbW90ZUV4Y2VwdGlvbiBleCkgeworICAgICAgICAgICAgICAgICAgICAgICAgLy8gV2UgYXJlIGRpc2Nvbm5lY3RpbmcgYW55d2F5LiBMb2csIGp1c3QgZm9yIHBvc3Rlcml0eSBidXQgaXQncyBub3QKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIGEgYmlnIHByb2JsZW0uCisgICAgICAgICAgICAgICAgICAgICAgICBMb2cudyhUQUcsICJSZW1vdGVFeGNlcHRpb24gZHVyaW5nIGNvbm5lY3QgZm9yICIgKyBtU2VydmljZUNvbXBvbmVudCk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgaW50IHN0YXRlID0gbVN0YXRlOworICAgICAgICAgICAgICAgIGZvcmNlQ2xvc2VDb25uZWN0aW9uKCk7CisgICAgICAgICAgICAgICAgLy8gSWYgdGhlIHN0YXRlIHdhcyBub3QgQ09OTkVDVF9TVEFURV9ESVNDT05ORUNUSU5HLCBrZWVwIHRoZSBzdGF0ZSBzbyB0aGF0CisgICAgICAgICAgICAgICAgLy8gdGhlIG9wZXJhdGlvbiBjYW1lIGFmdGVyIGRpc2Nvbm5lY3QoKSBjYW4gYmUgaGFuZGxlZCBwcm9wZXJseS4KKyAgICAgICAgICAgICAgICBpZiAoc3RhdGUgIT0gQ09OTkVDVF9TVEFURV9ESVNDT05ORUNUSU5HKSB7CisgICAgICAgICAgICAgICAgICAgIG1TdGF0ZSA9IHN0YXRlOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBpZiAoREJHKSB7CisgICAgICAgICAgICAgICAgICAgIExvZy5kKFRBRywgImRpc2Nvbm5lY3QuLi4iKTsKKyAgICAgICAgICAgICAgICAgICAgZHVtcCgpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfSk7CisgICAgfQorCisgICAgLyoqCisgICAgICogTnVsbCBvdXQgdGhlIHZhcmlhYmxlcyBhbmQgdW5iaW5kIGZyb20gdGhlIHNlcnZpY2UuIFRoaXMgZG9lc24ndCBpbmNsdWRlCisgICAgICogY2FsbGluZyBkaXNjb25uZWN0IG9uIHRoZSBzZXJ2aWNlLCBiZWNhdXNlIHdlIG9ubHkgdHJ5IHRvIGRvIHRoYXQgaW4gdGhlCisgICAgICogY2xlYW4gc2h1dGRvd24gY2FzZXMuCisgICAgICogPHA+CisgICAgICogRXZlcnl3aGVyZSB0aGF0IGNhbGxzIHRoaXMgRVhDRVBUIGZvciBkaXNjb25uZWN0KCkgc2hvdWxkIGZvbGxvdyBpdCB3aXRoCisgICAgICogYSBjYWxsIHRvIG1DYWxsYmFjay5vbkNvbm5lY3Rpb25GYWlsZWQoKS4gRGlzY29ubmVjdCBkb2Vzbid0IGRvIHRoYXQgY2FsbGJhY2sKKyAgICAgKiBmb3IgYSBjbGVhbiBzaHV0ZG93biwgYnV0IGV2ZXJ5d2hlcmUgZWxzZSBpcyBhIGRpcnR5IHNodXRkb3duIGFuZCBzaG91bGQKKyAgICAgKiBub3RpZnkgdGhlIGFwcC4KKyAgICAgKiA8cD4KKyAgICAgKiBBbHNvLCBtU3RhdGUgc2hvdWxkIGJlIHVwZGF0ZWQgcHJvcGVybHkuIE1vc3RseSBpdCBzaG91bGQgYmUgQ09OTkVDVF9TVEFURV9ESUFDT05ORUNURUQKKyAgICAgKiBleGNlcHQgZm9yIGRpc2Nvbm5lY3QoKS4KKyAgICAgKi8KKyAgICBwcml2YXRlIHZvaWQgZm9yY2VDbG9zZUNvbm5lY3Rpb24oKSB7CisgICAgICAgIGlmIChtU2VydmljZUNvbm5lY3Rpb24gIT0gbnVsbCkgeworICAgICAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgICAgICBtQ29udGV4dC51bmJpbmRTZXJ2aWNlKG1TZXJ2aWNlQ29ubmVjdGlvbik7CisgICAgICAgICAgICB9IGNhdGNoIChJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24gZSkgeworICAgICAgICAgICAgICAgIGlmIChEQkcpIHsKKyAgICAgICAgICAgICAgICAgICAgTG9nLmQoVEFHLCAidW5iaW5kU2VydmljZSBmYWlsZWQiLCBlKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgbVN0YXRlID0gQ09OTkVDVF9TVEFURV9ESVNDT05ORUNURUQ7CisgICAgICAgIG1TZXJ2aWNlQ29ubmVjdGlvbiA9IG51bGw7CisgICAgICAgIG1TZXJ2aWNlQmluZGVyID0gbnVsbDsKKyAgICAgICAgbVNlcnZpY2VDYWxsYmFja3MgPSBudWxsOworICAgICAgICBtUm9vdElkID0gbnVsbDsKKyAgICAgICAgbU1lZGlhU2Vzc2lvblRva2VuID0gbnVsbDsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBSZXR1cm5zIHdoZXRoZXIgdGhlIGJyb3dzZXIgaXMgY29ubmVjdGVkIHRvIHRoZSBzZXJ2aWNlLgorICAgICAqLworICAgIHB1YmxpYyBib29sZWFuIGlzQ29ubmVjdGVkKCkgeworICAgICAgICByZXR1cm4gbVN0YXRlID09IENPTk5FQ1RfU1RBVEVfQ09OTkVDVEVEOworICAgIH0KKworICAgIC8qKgorICAgICAqIEdldHMgdGhlIHNlcnZpY2UgY29tcG9uZW50IHRoYXQgdGhlIG1lZGlhIGJyb3dzZXIgaXMgY29ubmVjdGVkIHRvLgorICAgICAqLworICAgIHB1YmxpYyBATm9uTnVsbCBDb21wb25lbnROYW1lIGdldFNlcnZpY2VDb21wb25lbnQoKSB7CisgICAgICAgIGlmICghaXNDb25uZWN0ZWQoKSkgeworICAgICAgICAgICAgdGhyb3cgbmV3IElsbGVnYWxTdGF0ZUV4Y2VwdGlvbigiZ2V0U2VydmljZUNvbXBvbmVudCgpIGNhbGxlZCB3aGlsZSBub3QgY29ubmVjdGVkIiArCisgICAgICAgICAgICAgICAgICAgICIgKHN0YXRlPSIgKyBtU3RhdGUgKyAiKSIpOworICAgICAgICB9CisgICAgICAgIHJldHVybiBtU2VydmljZUNvbXBvbmVudDsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBHZXRzIHRoZSByb290IGlkLgorICAgICAqIDxwPgorICAgICAqIE5vdGUgdGhhdCB0aGUgcm9vdCBpZCBtYXkgYmVjb21lIGludmFsaWQgb3IgY2hhbmdlIHdoZW4gdGhlCisgICAgICogYnJvd3NlciBpcyBkaXNjb25uZWN0ZWQuCisgICAgICogPC9wPgorICAgICAqCisgICAgICogQHRocm93cyBJbGxlZ2FsU3RhdGVFeGNlcHRpb24gaWYgbm90IGNvbm5lY3RlZC4KKyAgICAgKi8KKyAgICBwdWJsaWMgQE5vbk51bGwgU3RyaW5nIGdldFJvb3QoKSB7CisgICAgICAgIGlmICghaXNDb25uZWN0ZWQoKSkgeworICAgICAgICAgICAgdGhyb3cgbmV3IElsbGVnYWxTdGF0ZUV4Y2VwdGlvbigiZ2V0Um9vdCgpIGNhbGxlZCB3aGlsZSBub3QgY29ubmVjdGVkIChzdGF0ZT0iCisgICAgICAgICAgICAgICAgICAgICsgZ2V0U3RhdGVMYWJlbChtU3RhdGUpICsgIikiKTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gbVJvb3RJZDsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBHZXRzIGFueSBleHRyYXMgZm9yIHRoZSBtZWRpYSBzZXJ2aWNlLgorICAgICAqCisgICAgICogQHRocm93cyBJbGxlZ2FsU3RhdGVFeGNlcHRpb24gaWYgbm90IGNvbm5lY3RlZC4KKyAgICAgKi8KKyAgICBwdWJsaWMgQE51bGxhYmxlIEJ1bmRsZSBnZXRFeHRyYXMoKSB7CisgICAgICAgIGlmICghaXNDb25uZWN0ZWQoKSkgeworICAgICAgICAgICAgdGhyb3cgbmV3IElsbGVnYWxTdGF0ZUV4Y2VwdGlvbigiZ2V0RXh0cmFzKCkgY2FsbGVkIHdoaWxlIG5vdCBjb25uZWN0ZWQgKHN0YXRlPSIKKyAgICAgICAgICAgICAgICAgICAgKyBnZXRTdGF0ZUxhYmVsKG1TdGF0ZSkgKyAiKSIpOworICAgICAgICB9CisgICAgICAgIHJldHVybiBtRXh0cmFzOworICAgIH0KKworICAgIC8qKgorICAgICAqIEdldHMgdGhlIG1lZGlhIHNlc3Npb24gdG9rZW4gYXNzb2NpYXRlZCB3aXRoIHRoZSBtZWRpYSBicm93c2VyLgorICAgICAqIDxwPgorICAgICAqIE5vdGUgdGhhdCB0aGUgc2Vzc2lvbiB0b2tlbiBtYXkgYmVjb21lIGludmFsaWQgb3IgY2hhbmdlIHdoZW4gdGhlCisgICAgICogYnJvd3NlciBpcyBkaXNjb25uZWN0ZWQuCisgICAgICogPC9wPgorICAgICAqCisgICAgICogQHJldHVybiBUaGUgc2Vzc2lvbiB0b2tlbiBmb3IgdGhlIGJyb3dzZXIsIG5ldmVyIG51bGwuCisgICAgICoKKyAgICAgKiBAdGhyb3dzIElsbGVnYWxTdGF0ZUV4Y2VwdGlvbiBpZiBub3QgY29ubmVjdGVkLgorICAgICAqLworICAgICBwdWJsaWMgQE5vbk51bGwgTWVkaWFTZXNzaW9uLlRva2VuIGdldFNlc3Npb25Ub2tlbigpIHsKKyAgICAgICAgaWYgKCFpc0Nvbm5lY3RlZCgpKSB7CisgICAgICAgICAgICB0aHJvdyBuZXcgSWxsZWdhbFN0YXRlRXhjZXB0aW9uKCJnZXRTZXNzaW9uVG9rZW4oKSBjYWxsZWQgd2hpbGUgbm90IGNvbm5lY3RlZCAoc3RhdGU9IgorICAgICAgICAgICAgICAgICAgICArIG1TdGF0ZSArICIpIik7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIG1NZWRpYVNlc3Npb25Ub2tlbjsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBRdWVyaWVzIGZvciBpbmZvcm1hdGlvbiBhYm91dCB0aGUgbWVkaWEgaXRlbXMgdGhhdCBhcmUgY29udGFpbmVkIHdpdGhpbgorICAgICAqIHRoZSBzcGVjaWZpZWQgaWQgYW5kIHN1YnNjcmliZXMgdG8gcmVjZWl2ZSB1cGRhdGVzIHdoZW4gdGhleSBjaGFuZ2UuCisgICAgICogPHA+CisgICAgICogVGhlIGxpc3Qgb2Ygc3Vic2NyaXB0aW9ucyBpcyBtYWludGFpbmVkIGV2ZW4gd2hlbiBub3QgY29ubmVjdGVkIGFuZCBpcworICAgICAqIHJlc3RvcmVkIGFmdGVyIHRoZSByZWNvbm5lY3Rpb24uIEl0IGlzIG9rIHRvIHN1YnNjcmliZSB3aGlsZSBub3QgY29ubmVjdGVkCisgICAgICogYnV0IHRoZSByZXN1bHRzIHdpbGwgbm90IGJlIHJldHVybmVkIHVudGlsIHRoZSBjb25uZWN0aW9uIGNvbXBsZXRlcy4KKyAgICAgKiA8L3A+CisgICAgICogPHA+CisgICAgICogSWYgdGhlIGlkIGlzIGFscmVhZHkgc3Vic2NyaWJlZCB3aXRoIGEgZGlmZmVyZW50IGNhbGxiYWNrIHRoZW4gdGhlIG5ldworICAgICAqIGNhbGxiYWNrIHdpbGwgcmVwbGFjZSB0aGUgcHJldmlvdXMgb25lIGFuZCB0aGUgY2hpbGQgZGF0YSB3aWxsIGJlCisgICAgICogcmVsb2FkZWQuCisgICAgICogPC9wPgorICAgICAqCisgICAgICogQHBhcmFtIHBhcmVudElkIFRoZSBpZCBvZiB0aGUgcGFyZW50IG1lZGlhIGl0ZW0gd2hvc2UgbGlzdCBvZiBjaGlsZHJlbgorICAgICAqICAgICAgICAgICAgd2lsbCBiZSBzdWJzY3JpYmVkLgorICAgICAqIEBwYXJhbSBjYWxsYmFjayBUaGUgY2FsbGJhY2sgdG8gcmVjZWl2ZSB0aGUgbGlzdCBvZiBjaGlsZHJlbi4KKyAgICAgKi8KKyAgICBwdWJsaWMgdm9pZCBzdWJzY3JpYmUoQE5vbk51bGwgU3RyaW5nIHBhcmVudElkLCBATm9uTnVsbCBTdWJzY3JpcHRpb25DYWxsYmFjayBjYWxsYmFjaykgeworICAgICAgICBzdWJzY3JpYmVJbnRlcm5hbChwYXJlbnRJZCwgbnVsbCwgY2FsbGJhY2spOworICAgIH0KKworICAgIC8qKgorICAgICAqIFF1ZXJpZXMgd2l0aCBzZXJ2aWNlLXNwZWNpZmljIGFyZ3VtZW50cyBmb3IgaW5mb3JtYXRpb24gYWJvdXQgdGhlIG1lZGlhIGl0ZW1zCisgICAgICogdGhhdCBhcmUgY29udGFpbmVkIHdpdGhpbiB0aGUgc3BlY2lmaWVkIGlkIGFuZCBzdWJzY3JpYmVzIHRvIHJlY2VpdmUgdXBkYXRlcworICAgICAqIHdoZW4gdGhleSBjaGFuZ2UuCisgICAgICogPHA+CisgICAgICogVGhlIGxpc3Qgb2Ygc3Vic2NyaXB0aW9ucyBpcyBtYWludGFpbmVkIGV2ZW4gd2hlbiBub3QgY29ubmVjdGVkIGFuZCBpcworICAgICAqIHJlc3RvcmVkIGFmdGVyIHRoZSByZWNvbm5lY3Rpb24uIEl0IGlzIG9rIHRvIHN1YnNjcmliZSB3aGlsZSBub3QgY29ubmVjdGVkCisgICAgICogYnV0IHRoZSByZXN1bHRzIHdpbGwgbm90IGJlIHJldHVybmVkIHVudGlsIHRoZSBjb25uZWN0aW9uIGNvbXBsZXRlcy4KKyAgICAgKiA8L3A+CisgICAgICogPHA+CisgICAgICogSWYgdGhlIGlkIGlzIGFscmVhZHkgc3Vic2NyaWJlZCB3aXRoIGEgZGlmZmVyZW50IGNhbGxiYWNrIHRoZW4gdGhlIG5ldworICAgICAqIGNhbGxiYWNrIHdpbGwgcmVwbGFjZSB0aGUgcHJldmlvdXMgb25lIGFuZCB0aGUgY2hpbGQgZGF0YSB3aWxsIGJlCisgICAgICogcmVsb2FkZWQuCisgICAgICogPC9wPgorICAgICAqCisgICAgICogQHBhcmFtIHBhcmVudElkIFRoZSBpZCBvZiB0aGUgcGFyZW50IG1lZGlhIGl0ZW0gd2hvc2UgbGlzdCBvZiBjaGlsZHJlbgorICAgICAqICAgICAgICAgICAgd2lsbCBiZSBzdWJzY3JpYmVkLgorICAgICAqIEBwYXJhbSBvcHRpb25zIFRoZSBidW5kbGUgb2Ygc2VydmljZS1zcGVjaWZpYyBhcmd1bWVudHMgdG8gc2VuZCB0byB0aGUgbWVkaWEKKyAgICAgKiAgICAgICAgICAgIGJyb3dzZXIgc2VydmljZS4gVGhlIGNvbnRlbnRzIG9mIHRoaXMgYnVuZGxlIG1heSBhZmZlY3QgdGhlCisgICAgICogICAgICAgICAgICBpbmZvcm1hdGlvbiByZXR1cm5lZCB3aGVuIGJyb3dzaW5nLgorICAgICAqIEBwYXJhbSBjYWxsYmFjayBUaGUgY2FsbGJhY2sgdG8gcmVjZWl2ZSB0aGUgbGlzdCBvZiBjaGlsZHJlbi4KKyAgICAgKi8KKyAgICBwdWJsaWMgdm9pZCBzdWJzY3JpYmUoQE5vbk51bGwgU3RyaW5nIHBhcmVudElkLCBATm9uTnVsbCBCdW5kbGUgb3B0aW9ucywKKyAgICAgICAgICAgIEBOb25OdWxsIFN1YnNjcmlwdGlvbkNhbGxiYWNrIGNhbGxiYWNrKSB7CisgICAgICAgIGlmIChvcHRpb25zID09IG51bGwpIHsKKyAgICAgICAgICAgIHRocm93IG5ldyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oIm9wdGlvbnMgY2Fubm90IGJlIG51bGwiKTsKKyAgICAgICAgfQorICAgICAgICBzdWJzY3JpYmVJbnRlcm5hbChwYXJlbnRJZCwgbmV3IEJ1bmRsZShvcHRpb25zKSwgY2FsbGJhY2spOworICAgIH0KKworICAgIC8qKgorICAgICAqIFVuc3Vic2NyaWJlcyBmb3IgY2hhbmdlcyB0byB0aGUgY2hpbGRyZW4gb2YgdGhlIHNwZWNpZmllZCBtZWRpYSBpZC4KKyAgICAgKiA8cD4KKyAgICAgKiBUaGUgcXVlcnkgY2FsbGJhY2sgd2lsbCBubyBsb25nZXIgYmUgaW52b2tlZCBmb3IgcmVzdWx0cyBhc3NvY2lhdGVkIHdpdGgKKyAgICAgKiB0aGlzIGlkIG9uY2UgdGhpcyBtZXRob2QgcmV0dXJucy4KKyAgICAgKiA8L3A+CisgICAgICoKKyAgICAgKiBAcGFyYW0gcGFyZW50SWQgVGhlIGlkIG9mIHRoZSBwYXJlbnQgbWVkaWEgaXRlbSB3aG9zZSBsaXN0IG9mIGNoaWxkcmVuCisgICAgICogICAgICAgICAgICB3aWxsIGJlIHVuc3Vic2NyaWJlZC4KKyAgICAgKi8KKyAgICBwdWJsaWMgdm9pZCB1bnN1YnNjcmliZShATm9uTnVsbCBTdHJpbmcgcGFyZW50SWQpIHsKKyAgICAgICAgdW5zdWJzY3JpYmVJbnRlcm5hbChwYXJlbnRJZCwgbnVsbCk7CisgICAgfQorCisgICAgLyoqCisgICAgICogVW5zdWJzY3JpYmVzIGZvciBjaGFuZ2VzIHRvIHRoZSBjaGlsZHJlbiBvZiB0aGUgc3BlY2lmaWVkIG1lZGlhIGlkIHRocm91Z2ggYSBjYWxsYmFjay4KKyAgICAgKiA8cD4KKyAgICAgKiBUaGUgcXVlcnkgY2FsbGJhY2sgd2lsbCBubyBsb25nZXIgYmUgaW52b2tlZCBmb3IgcmVzdWx0cyBhc3NvY2lhdGVkIHdpdGgKKyAgICAgKiB0aGlzIGlkIG9uY2UgdGhpcyBtZXRob2QgcmV0dXJucy4KKyAgICAgKiA8L3A+CisgICAgICoKKyAgICAgKiBAcGFyYW0gcGFyZW50SWQgVGhlIGlkIG9mIHRoZSBwYXJlbnQgbWVkaWEgaXRlbSB3aG9zZSBsaXN0IG9mIGNoaWxkcmVuCisgICAgICogICAgICAgICAgICB3aWxsIGJlIHVuc3Vic2NyaWJlZC4KKyAgICAgKiBAcGFyYW0gY2FsbGJhY2sgQSBjYWxsYmFjayBzZW50IHRvIHRoZSBtZWRpYSBicm93c2VyIHNlcnZpY2UgdG8gc3Vic2NyaWJlLgorICAgICAqLworICAgIHB1YmxpYyB2b2lkIHVuc3Vic2NyaWJlKEBOb25OdWxsIFN0cmluZyBwYXJlbnRJZCwgQE5vbk51bGwgU3Vic2NyaXB0aW9uQ2FsbGJhY2sgY2FsbGJhY2spIHsKKyAgICAgICAgaWYgKGNhbGxiYWNrID09IG51bGwpIHsKKyAgICAgICAgICAgIHRocm93IG5ldyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oImNhbGxiYWNrIGNhbm5vdCBiZSBudWxsIik7CisgICAgICAgIH0KKyAgICAgICAgdW5zdWJzY3JpYmVJbnRlcm5hbChwYXJlbnRJZCwgY2FsbGJhY2spOworICAgIH0KKworICAgIC8qKgorICAgICAqIFJldHJpZXZlcyBhIHNwZWNpZmljIHtAbGluayBNZWRpYUl0ZW19IGZyb20gdGhlIGNvbm5lY3RlZCBzZXJ2aWNlLiBOb3QKKyAgICAgKiBhbGwgc2VydmljZXMgbWF5IHN1cHBvcnQgdGhpcywgc28gZmFsbGluZyBiYWNrIHRvIHN1YnNjcmliaW5nIHRvIHRoZQorICAgICAqIHBhcmVudCdzIGlkIHNob3VsZCBiZSB1c2VkIHdoZW4gdW5hdmFpbGFibGUuCisgICAgICoKKyAgICAgKiBAcGFyYW0gbWVkaWFJZCBUaGUgaWQgb2YgdGhlIGl0ZW0gdG8gcmV0cmlldmUuCisgICAgICogQHBhcmFtIGNiIFRoZSBjYWxsYmFjayB0byByZWNlaXZlIHRoZSByZXN1bHQgb24uCisgICAgICovCisgICAgcHVibGljIHZvaWQgZ2V0SXRlbShmaW5hbCBATm9uTnVsbCBTdHJpbmcgbWVkaWFJZCwgQE5vbk51bGwgZmluYWwgSXRlbUNhbGxiYWNrIGNiKSB7CisgICAgICAgIGlmIChUZXh0VXRpbHMuaXNFbXB0eShtZWRpYUlkKSkgeworICAgICAgICAgICAgdGhyb3cgbmV3IElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbigibWVkaWFJZCBjYW5ub3QgYmUgZW1wdHkuIik7CisgICAgICAgIH0KKyAgICAgICAgaWYgKGNiID09IG51bGwpIHsKKyAgICAgICAgICAgIHRocm93IG5ldyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oImNiIGNhbm5vdCBiZSBudWxsLiIpOworICAgICAgICB9CisgICAgICAgIGlmIChtU3RhdGUgIT0gQ09OTkVDVF9TVEFURV9DT05ORUNURUQpIHsKKyAgICAgICAgICAgIExvZy5pKFRBRywgIk5vdCBjb25uZWN0ZWQsIHVuYWJsZSB0byByZXRyaWV2ZSB0aGUgTWVkaWFJdGVtLiIpOworICAgICAgICAgICAgbUhhbmRsZXIucG9zdChuZXcgUnVubmFibGUoKSB7CisgICAgICAgICAgICAgICAgQE92ZXJyaWRlCisgICAgICAgICAgICAgICAgcHVibGljIHZvaWQgcnVuKCkgeworICAgICAgICAgICAgICAgICAgICBjYi5vbkVycm9yKG1lZGlhSWQpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0pOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIFJlc3VsdFJlY2VpdmVyIHJlY2VpdmVyID0gbmV3IFJlc3VsdFJlY2VpdmVyKG1IYW5kbGVyKSB7CisgICAgICAgICAgICBAT3ZlcnJpZGUKKyAgICAgICAgICAgIHByb3RlY3RlZCB2b2lkIG9uUmVjZWl2ZVJlc3VsdChpbnQgcmVzdWx0Q29kZSwgQnVuZGxlIHJlc3VsdERhdGEpIHsKKyAgICAgICAgICAgICAgICBpZiAoIWlzQ29ubmVjdGVkKCkpIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBpZiAocmVzdWx0Q29kZSAhPSAwIHx8IHJlc3VsdERhdGEgPT0gbnVsbAorICAgICAgICAgICAgICAgICAgICAgICAgfHwgIXJlc3VsdERhdGEuY29udGFpbnNLZXkoTWVkaWFCcm93c2VyU2VydmljZS5LRVlfTUVESUFfSVRFTSkpIHsKKyAgICAgICAgICAgICAgICAgICAgY2Iub25FcnJvcihtZWRpYUlkKTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBQYXJjZWxhYmxlIGl0ZW0gPSByZXN1bHREYXRhLmdldFBhcmNlbGFibGUoTWVkaWFCcm93c2VyU2VydmljZS5LRVlfTUVESUFfSVRFTSk7CisgICAgICAgICAgICAgICAgaWYgKGl0ZW0gIT0gbnVsbCAmJiAhKGl0ZW0gaW5zdGFuY2VvZiBNZWRpYUl0ZW0pKSB7CisgICAgICAgICAgICAgICAgICAgIGNiLm9uRXJyb3IobWVkaWFJZCk7CisgICAgICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgY2Iub25JdGVtTG9hZGVkKChNZWRpYUl0ZW0paXRlbSk7CisgICAgICAgICAgICB9CisgICAgICAgIH07CisgICAgICAgIHRyeSB7CisgICAgICAgICAgICBtU2VydmljZUJpbmRlci5nZXRNZWRpYUl0ZW0obWVkaWFJZCwgcmVjZWl2ZXIsIG1TZXJ2aWNlQ2FsbGJhY2tzKTsKKyAgICAgICAgfSBjYXRjaCAoUmVtb3RlRXhjZXB0aW9uIGUpIHsKKyAgICAgICAgICAgIExvZy5pKFRBRywgIlJlbW90ZSBlcnJvciBnZXR0aW5nIG1lZGlhIGl0ZW0uIik7CisgICAgICAgICAgICBtSGFuZGxlci5wb3N0KG5ldyBSdW5uYWJsZSgpIHsKKyAgICAgICAgICAgICAgICBAT3ZlcnJpZGUKKyAgICAgICAgICAgICAgICBwdWJsaWMgdm9pZCBydW4oKSB7CisgICAgICAgICAgICAgICAgICAgIGNiLm9uRXJyb3IobWVkaWFJZCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfSk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBwcml2YXRlIHZvaWQgc3Vic2NyaWJlSW50ZXJuYWwoU3RyaW5nIHBhcmVudElkLCBCdW5kbGUgb3B0aW9ucywgU3Vic2NyaXB0aW9uQ2FsbGJhY2sgY2FsbGJhY2spIHsKKyAgICAgICAgLy8gQ2hlY2sgYXJndW1lbnRzLgorICAgICAgICBpZiAoVGV4dFV0aWxzLmlzRW1wdHkocGFyZW50SWQpKSB7CisgICAgICAgICAgICB0aHJvdyBuZXcgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKCJwYXJlbnRJZCBjYW5ub3QgYmUgZW1wdHkuIik7CisgICAgICAgIH0KKyAgICAgICAgaWYgKGNhbGxiYWNrID09IG51bGwpIHsKKyAgICAgICAgICAgIHRocm93IG5ldyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oImNhbGxiYWNrIGNhbm5vdCBiZSBudWxsIik7CisgICAgICAgIH0KKyAgICAgICAgLy8gVXBkYXRlIG9yIGNyZWF0ZSB0aGUgc3Vic2NyaXB0aW9uLgorICAgICAgICBTdWJzY3JpcHRpb24gc3ViID0gbVN1YnNjcmlwdGlvbnMuZ2V0KHBhcmVudElkKTsKKyAgICAgICAgaWYgKHN1YiA9PSBudWxsKSB7CisgICAgICAgICAgICBzdWIgPSBuZXcgU3Vic2NyaXB0aW9uKCk7CisgICAgICAgICAgICBtU3Vic2NyaXB0aW9ucy5wdXQocGFyZW50SWQsIHN1Yik7CisgICAgICAgIH0KKyAgICAgICAgc3ViLnB1dENhbGxiYWNrKG1Db250ZXh0LCBvcHRpb25zLCBjYWxsYmFjayk7CisKKyAgICAgICAgLy8gSWYgd2UgYXJlIGNvbm5lY3RlZCwgdGVsbCB0aGUgc2VydmljZSB0aGF0IHdlIGFyZSB3YXRjaGluZy4gSWYgd2UgYXJlbid0IGNvbm5lY3RlZCwKKyAgICAgICAgLy8gdGhlIHNlcnZpY2Ugd2lsbCBiZSB0b2xkIHdoZW4gd2UgY29ubmVjdC4KKyAgICAgICAgaWYgKGlzQ29ubmVjdGVkKCkpIHsKKyAgICAgICAgICAgIHRyeSB7CisgICAgICAgICAgICAgICAgaWYgKG9wdGlvbnMgPT0gbnVsbCkgeworICAgICAgICAgICAgICAgICAgICBtU2VydmljZUJpbmRlci5hZGRTdWJzY3JpcHRpb25EZXByZWNhdGVkKHBhcmVudElkLCBtU2VydmljZUNhbGxiYWNrcyk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIG1TZXJ2aWNlQmluZGVyLmFkZFN1YnNjcmlwdGlvbihwYXJlbnRJZCwgY2FsbGJhY2subVRva2VuLCBvcHRpb25zLAorICAgICAgICAgICAgICAgICAgICAgICAgbVNlcnZpY2VDYWxsYmFja3MpOworICAgICAgICAgICAgfSBjYXRjaCAoUmVtb3RlRXhjZXB0aW9uIGV4KSB7CisgICAgICAgICAgICAgICAgLy8gUHJvY2VzcyBpcyBjcmFzaGluZy4gV2Ugd2lsbCBkaXNjb25uZWN0LCBhbmQgdXBvbiByZWNvbm5lY3Qgd2Ugd2lsbAorICAgICAgICAgICAgICAgIC8vIGF1dG9tYXRpY2FsbHkgcmVyZWdpc3Rlci4gU28gbm90aGluZyB0byBkbyBoZXJlLgorICAgICAgICAgICAgICAgIExvZy5kKFRBRywgImFkZFN1YnNjcmlwdGlvbiBmYWlsZWQgd2l0aCBSZW1vdGVFeGNlcHRpb24gcGFyZW50SWQ9IiArIHBhcmVudElkKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKworICAgIHByaXZhdGUgdm9pZCB1bnN1YnNjcmliZUludGVybmFsKFN0cmluZyBwYXJlbnRJZCwgU3Vic2NyaXB0aW9uQ2FsbGJhY2sgY2FsbGJhY2spIHsKKyAgICAgICAgLy8gQ2hlY2sgYXJndW1lbnRzLgorICAgICAgICBpZiAoVGV4dFV0aWxzLmlzRW1wdHkocGFyZW50SWQpKSB7CisgICAgICAgICAgICB0aHJvdyBuZXcgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKCJwYXJlbnRJZCBjYW5ub3QgYmUgZW1wdHkuIik7CisgICAgICAgIH0KKworICAgICAgICBTdWJzY3JpcHRpb24gc3ViID0gbVN1YnNjcmlwdGlvbnMuZ2V0KHBhcmVudElkKTsKKyAgICAgICAgaWYgKHN1YiA9PSBudWxsKSB7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgLy8gVGVsbCB0aGUgc2VydmljZSBpZiBuZWNlc3NhcnkuCisgICAgICAgIHRyeSB7CisgICAgICAgICAgICBpZiAoY2FsbGJhY2sgPT0gbnVsbCkgeworICAgICAgICAgICAgICAgIGlmIChpc0Nvbm5lY3RlZCgpKSB7CisgICAgICAgICAgICAgICAgICAgIG1TZXJ2aWNlQmluZGVyLnJlbW92ZVN1YnNjcmlwdGlvbkRlcHJlY2F0ZWQocGFyZW50SWQsIG1TZXJ2aWNlQ2FsbGJhY2tzKTsKKyAgICAgICAgICAgICAgICAgICAgbVNlcnZpY2VCaW5kZXIucmVtb3ZlU3Vic2NyaXB0aW9uKHBhcmVudElkLCBudWxsLCBtU2VydmljZUNhbGxiYWNrcyk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBmaW5hbCBMaXN0PFN1YnNjcmlwdGlvbkNhbGxiYWNrPiBjYWxsYmFja3MgPSBzdWIuZ2V0Q2FsbGJhY2tzKCk7CisgICAgICAgICAgICAgICAgZmluYWwgTGlzdDxCdW5kbGU+IG9wdGlvbnNMaXN0ID0gc3ViLmdldE9wdGlvbnNMaXN0KCk7CisgICAgICAgICAgICAgICAgZm9yIChpbnQgaSA9IGNhbGxiYWNrcy5zaXplKCkgLSAxOyBpID49IDA7IC0taSkgeworICAgICAgICAgICAgICAgICAgICBpZiAoY2FsbGJhY2tzLmdldChpKSA9PSBjYWxsYmFjaykgeworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGlzQ29ubmVjdGVkKCkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBtU2VydmljZUJpbmRlci5yZW1vdmVTdWJzY3JpcHRpb24oCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJlbnRJZCwgY2FsbGJhY2subVRva2VuLCBtU2VydmljZUNhbGxiYWNrcyk7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICBjYWxsYmFja3MucmVtb3ZlKGkpOworICAgICAgICAgICAgICAgICAgICAgICAgb3B0aW9uc0xpc3QucmVtb3ZlKGkpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9IGNhdGNoIChSZW1vdGVFeGNlcHRpb24gZXgpIHsKKyAgICAgICAgICAgIC8vIFByb2Nlc3MgaXMgY3Jhc2hpbmcuIFdlIHdpbGwgZGlzY29ubmVjdCwgYW5kIHVwb24gcmVjb25uZWN0IHdlIHdpbGwKKyAgICAgICAgICAgIC8vIGF1dG9tYXRpY2FsbHkgcmVyZWdpc3Rlci4gU28gbm90aGluZyB0byBkbyBoZXJlLgorICAgICAgICAgICAgTG9nLmQoVEFHLCAicmVtb3ZlU3Vic2NyaXB0aW9uIGZhaWxlZCB3aXRoIFJlbW90ZUV4Y2VwdGlvbiBwYXJlbnRJZD0iICsgcGFyZW50SWQpOworICAgICAgICB9CisKKyAgICAgICAgaWYgKHN1Yi5pc0VtcHR5KCkgfHwgY2FsbGJhY2sgPT0gbnVsbCkgeworICAgICAgICAgICAgbVN1YnNjcmlwdGlvbnMucmVtb3ZlKHBhcmVudElkKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIC8qKgorICAgICAqIEZvciBkZWJ1Z2dpbmcuCisgICAgICovCisgICAgcHJpdmF0ZSBzdGF0aWMgU3RyaW5nIGdldFN0YXRlTGFiZWwoaW50IHN0YXRlKSB7CisgICAgICAgIHN3aXRjaCAoc3RhdGUpIHsKKyAgICAgICAgICAgIGNhc2UgQ09OTkVDVF9TVEFURV9ESVNDT05ORUNUSU5HOgorICAgICAgICAgICAgICAgIHJldHVybiAiQ09OTkVDVF9TVEFURV9ESVNDT05ORUNUSU5HIjsKKyAgICAgICAgICAgIGNhc2UgQ09OTkVDVF9TVEFURV9ESVNDT05ORUNURUQ6CisgICAgICAgICAgICAgICAgcmV0dXJuICJDT05ORUNUX1NUQVRFX0RJU0NPTk5FQ1RFRCI7CisgICAgICAgICAgICBjYXNlIENPTk5FQ1RfU1RBVEVfQ09OTkVDVElORzoKKyAgICAgICAgICAgICAgICByZXR1cm4gIkNPTk5FQ1RfU1RBVEVfQ09OTkVDVElORyI7CisgICAgICAgICAgICBjYXNlIENPTk5FQ1RfU1RBVEVfQ09OTkVDVEVEOgorICAgICAgICAgICAgICAgIHJldHVybiAiQ09OTkVDVF9TVEFURV9DT05ORUNURUQiOworICAgICAgICAgICAgY2FzZSBDT05ORUNUX1NUQVRFX1NVU1BFTkRFRDoKKyAgICAgICAgICAgICAgICByZXR1cm4gIkNPTk5FQ1RfU1RBVEVfU1VTUEVOREVEIjsKKyAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgcmV0dXJuICJVTktOT1dOLyIgKyBzdGF0ZTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHByaXZhdGUgZmluYWwgdm9pZCBvblNlcnZpY2VDb25uZWN0ZWQoZmluYWwgSU1lZGlhQnJvd3NlclNlcnZpY2VDYWxsYmFja3MgY2FsbGJhY2ssCisgICAgICAgICAgICBmaW5hbCBTdHJpbmcgcm9vdCwgZmluYWwgTWVkaWFTZXNzaW9uLlRva2VuIHNlc3Npb24sIGZpbmFsIEJ1bmRsZSBleHRyYSkgeworICAgICAgICBtSGFuZGxlci5wb3N0KG5ldyBSdW5uYWJsZSgpIHsKKyAgICAgICAgICAgIEBPdmVycmlkZQorICAgICAgICAgICAgcHVibGljIHZvaWQgcnVuKCkgeworICAgICAgICAgICAgICAgIC8vIENoZWNrIHRvIG1ha2Ugc3VyZSB0aGVyZSBoYXNuJ3QgYmVlbiBhIGRpc2Nvbm5lY3Qgb3IgYSBkaWZmZXJlbnQKKyAgICAgICAgICAgICAgICAvLyBTZXJ2aWNlQ29ubmVjdGlvbi4KKyAgICAgICAgICAgICAgICBpZiAoIWlzQ3VycmVudChjYWxsYmFjaywgIm9uQ29ubmVjdCIpKSB7CisgICAgICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgLy8gRG9uJ3QgYWxsb3cgdGhlbSB0byBjYWxsIHVzIHR3aWNlLgorICAgICAgICAgICAgICAgIGlmIChtU3RhdGUgIT0gQ09OTkVDVF9TVEFURV9DT05ORUNUSU5HKSB7CisgICAgICAgICAgICAgICAgICAgIExvZy53KFRBRywgIm9uQ29ubmVjdCBmcm9tIHNlcnZpY2Ugd2hpbGUgbVN0YXRlPSIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICArIGdldFN0YXRlTGFiZWwobVN0YXRlKSArICIuLi4gaWdub3JpbmciKTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBtUm9vdElkID0gcm9vdDsKKyAgICAgICAgICAgICAgICBtTWVkaWFTZXNzaW9uVG9rZW4gPSBzZXNzaW9uOworICAgICAgICAgICAgICAgIG1FeHRyYXMgPSBleHRyYTsKKyAgICAgICAgICAgICAgICBtU3RhdGUgPSBDT05ORUNUX1NUQVRFX0NPTk5FQ1RFRDsKKworICAgICAgICAgICAgICAgIGlmIChEQkcpIHsKKyAgICAgICAgICAgICAgICAgICAgTG9nLmQoVEFHLCAiU2VydmljZUNhbGxiYWNrcy5vbkNvbm5lY3QuLi4iKTsKKyAgICAgICAgICAgICAgICAgICAgZHVtcCgpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBtQ2FsbGJhY2sub25Db25uZWN0ZWQoKTsKKworICAgICAgICAgICAgICAgIC8vIHdlIG1heSByZWNlaXZlIHNvbWUgc3Vic2NyaXB0aW9ucyBiZWZvcmUgd2UgYXJlIGNvbm5lY3RlZCwgc28gcmUtc3Vic2NyaWJlCisgICAgICAgICAgICAgICAgLy8gZXZlcnl0aGluZyBub3cKKyAgICAgICAgICAgICAgICBmb3IgKEVudHJ5PFN0cmluZywgU3Vic2NyaXB0aW9uPiBzdWJzY3JpcHRpb25FbnRyeSA6IG1TdWJzY3JpcHRpb25zLmVudHJ5U2V0KCkpIHsKKyAgICAgICAgICAgICAgICAgICAgU3RyaW5nIGlkID0gc3Vic2NyaXB0aW9uRW50cnkuZ2V0S2V5KCk7CisgICAgICAgICAgICAgICAgICAgIFN1YnNjcmlwdGlvbiBzdWIgPSBzdWJzY3JpcHRpb25FbnRyeS5nZXRWYWx1ZSgpOworICAgICAgICAgICAgICAgICAgICBMaXN0PFN1YnNjcmlwdGlvbkNhbGxiYWNrPiBjYWxsYmFja0xpc3QgPSBzdWIuZ2V0Q2FsbGJhY2tzKCk7CisgICAgICAgICAgICAgICAgICAgIExpc3Q8QnVuZGxlPiBvcHRpb25zTGlzdCA9IHN1Yi5nZXRPcHRpb25zTGlzdCgpOworICAgICAgICAgICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGNhbGxiYWNrTGlzdC5zaXplKCk7ICsraSkgeworICAgICAgICAgICAgICAgICAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBtU2VydmljZUJpbmRlci5hZGRTdWJzY3JpcHRpb24oaWQsIGNhbGxiYWNrTGlzdC5nZXQoaSkubVRva2VuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3B0aW9uc0xpc3QuZ2V0KGkpLCBtU2VydmljZUNhbGxiYWNrcyk7CisgICAgICAgICAgICAgICAgICAgICAgICB9IGNhdGNoIChSZW1vdGVFeGNlcHRpb24gZXgpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBQcm9jZXNzIGlzIGNyYXNoaW5nLiBXZSB3aWxsIGRpc2Nvbm5lY3QsIGFuZCB1cG9uIHJlY29ubmVjdCB3ZSB3aWxsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gYXV0b21hdGljYWxseSByZXJlZ2lzdGVyLiBTbyBub3RoaW5nIHRvIGRvIGhlcmUuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgTG9nLmQoVEFHLCAiYWRkU3Vic2NyaXB0aW9uIGZhaWxlZCB3aXRoIFJlbW90ZUV4Y2VwdGlvbiBwYXJlbnRJZD0iCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArIGlkKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfSk7CisgICAgfQorCisgICAgcHJpdmF0ZSBmaW5hbCB2b2lkIG9uQ29ubmVjdGlvbkZhaWxlZChmaW5hbCBJTWVkaWFCcm93c2VyU2VydmljZUNhbGxiYWNrcyBjYWxsYmFjaykgeworICAgICAgICBtSGFuZGxlci5wb3N0KG5ldyBSdW5uYWJsZSgpIHsKKyAgICAgICAgICAgIEBPdmVycmlkZQorICAgICAgICAgICAgcHVibGljIHZvaWQgcnVuKCkgeworICAgICAgICAgICAgICAgIExvZy5lKFRBRywgIm9uQ29ubmVjdEZhaWxlZCBmb3IgIiArIG1TZXJ2aWNlQ29tcG9uZW50KTsKKworICAgICAgICAgICAgICAgIC8vIENoZWNrIHRvIG1ha2Ugc3VyZSB0aGVyZSBoYXNuJ3QgYmVlbiBhIGRpc2Nvbm5lY3Qgb3IgYSBkaWZmZXJlbnQKKyAgICAgICAgICAgICAgICAvLyBTZXJ2aWNlQ29ubmVjdGlvbi4KKyAgICAgICAgICAgICAgICBpZiAoIWlzQ3VycmVudChjYWxsYmFjaywgIm9uQ29ubmVjdEZhaWxlZCIpKSB7CisgICAgICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgLy8gRG9uJ3QgYWxsb3cgdGhlbSB0byBjYWxsIHVzIHR3aWNlLgorICAgICAgICAgICAgICAgIGlmIChtU3RhdGUgIT0gQ09OTkVDVF9TVEFURV9DT05ORUNUSU5HKSB7CisgICAgICAgICAgICAgICAgICAgIExvZy53KFRBRywgIm9uQ29ubmVjdCBmcm9tIHNlcnZpY2Ugd2hpbGUgbVN0YXRlPSIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICArIGdldFN0YXRlTGFiZWwobVN0YXRlKSArICIuLi4gaWdub3JpbmciKTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIC8vIENsZWFuIHVwCisgICAgICAgICAgICAgICAgZm9yY2VDbG9zZUNvbm5lY3Rpb24oKTsKKworICAgICAgICAgICAgICAgIC8vIFRlbGwgdGhlIGFwcC4KKyAgICAgICAgICAgICAgICBtQ2FsbGJhY2sub25Db25uZWN0aW9uRmFpbGVkKCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0pOworICAgIH0KKworICAgIC8vVE9ETzooYi8xMTk3NTA4MDcpIFJlc29sdmUgaGlkZGVuIEFQSSB1c2FnZSBQYXJjZWxlZExpc3RTbGljZS4KKyAgICAvKgorICAgIHByaXZhdGUgZmluYWwgdm9pZCBvbkxvYWRDaGlsZHJlbihmaW5hbCBJTWVkaWFCcm93c2VyU2VydmljZUNhbGxiYWNrcyBjYWxsYmFjaywKKyAgICAgICAgICAgIGZpbmFsIFN0cmluZyBwYXJlbnRJZCwgZmluYWwgUGFyY2VsZWRMaXN0U2xpY2UgbGlzdCwgZmluYWwgQnVuZGxlIG9wdGlvbnMpIHsKKyAgICAgICAgbUhhbmRsZXIucG9zdChuZXcgUnVubmFibGUoKSB7CisgICAgICAgICAgICBAT3ZlcnJpZGUKKyAgICAgICAgICAgIHB1YmxpYyB2b2lkIHJ1bigpIHsKKyAgICAgICAgICAgICAgICAvLyBDaGVjayB0aGF0IHRoZXJlIGhhc24ndCBiZWVuIGEgZGlzY29ubmVjdCBvciBhIGRpZmZlcmVudAorICAgICAgICAgICAgICAgIC8vIFNlcnZpY2VDb25uZWN0aW9uLgorICAgICAgICAgICAgICAgIGlmICghaXNDdXJyZW50KGNhbGxiYWNrLCAib25Mb2FkQ2hpbGRyZW4iKSkgeworICAgICAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgaWYgKERCRykgeworICAgICAgICAgICAgICAgICAgICBMb2cuZChUQUcsICJvbkxvYWRDaGlsZHJlbiBmb3IgIiArIG1TZXJ2aWNlQ29tcG9uZW50ICsgIiBpZD0iICsgcGFyZW50SWQpOworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIC8vIENoZWNrIHRoYXQgdGhlIHN1YnNjcmlwdGlvbiBpcyBzdGlsbCBzdWJzY3JpYmVkLgorICAgICAgICAgICAgICAgIGZpbmFsIFN1YnNjcmlwdGlvbiBzdWJzY3JpcHRpb24gPSBtU3Vic2NyaXB0aW9ucy5nZXQocGFyZW50SWQpOworICAgICAgICAgICAgICAgIGlmIChzdWJzY3JpcHRpb24gIT0gbnVsbCkgeworICAgICAgICAgICAgICAgICAgICAvLyBUZWxsIHRoZSBhcHAuCisgICAgICAgICAgICAgICAgICAgIFN1YnNjcmlwdGlvbkNhbGxiYWNrIHN1YnNjcmlwdGlvbkNhbGxiYWNrID0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdWJzY3JpcHRpb24uZ2V0Q2FsbGJhY2sobUNvbnRleHQsIG9wdGlvbnMpOworICAgICAgICAgICAgICAgICAgICBpZiAoc3Vic2NyaXB0aW9uQ2FsbGJhY2sgIT0gbnVsbCkgeworICAgICAgICAgICAgICAgICAgICAgICAgTGlzdDxNZWRpYUl0ZW0+IGRhdGEgPSBsaXN0ID09IG51bGwgPyBudWxsIDogbGlzdC5nZXRMaXN0KCk7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAob3B0aW9ucyA9PSBudWxsKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGRhdGEgPT0gbnVsbCkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdWJzY3JpcHRpb25DYWxsYmFjay5vbkVycm9yKHBhcmVudElkKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdWJzY3JpcHRpb25DYWxsYmFjay5vbkNoaWxkcmVuTG9hZGVkKHBhcmVudElkLCBkYXRhKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChkYXRhID09IG51bGwpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Vic2NyaXB0aW9uQ2FsbGJhY2sub25FcnJvcihwYXJlbnRJZCwgb3B0aW9ucyk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Vic2NyaXB0aW9uQ2FsbGJhY2sub25DaGlsZHJlbkxvYWRlZChwYXJlbnRJZCwgZGF0YSwgb3B0aW9ucyk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGlmIChEQkcpIHsKKyAgICAgICAgICAgICAgICAgICAgTG9nLmQoVEFHLCAib25Mb2FkQ2hpbGRyZW4gZm9yIGlkIHRoYXQgaXNuJ3Qgc3Vic2NyaWJlZCBpZD0iICsgcGFyZW50SWQpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfSk7CisgICAgfQorICAgICovCisKKyAgICAvKioKKyAgICAgKiBSZXR1cm4gdHJ1ZSBpZiB7QGNvZGUgY2FsbGJhY2t9IGlzIHRoZSBjdXJyZW50IFNlcnZpY2VDYWxsYmFja3MuIEFsc28gbG9ncyBpZiBpdCdzIG5vdC4KKyAgICAgKi8KKyAgICBwcml2YXRlIGJvb2xlYW4gaXNDdXJyZW50KElNZWRpYUJyb3dzZXJTZXJ2aWNlQ2FsbGJhY2tzIGNhbGxiYWNrLCBTdHJpbmcgZnVuY05hbWUpIHsKKyAgICAgICAgaWYgKG1TZXJ2aWNlQ2FsbGJhY2tzICE9IGNhbGxiYWNrIHx8IG1TdGF0ZSA9PSBDT05ORUNUX1NUQVRFX0RJU0NPTk5FQ1RJTkcKKyAgICAgICAgICAgICAgICB8fCBtU3RhdGUgPT0gQ09OTkVDVF9TVEFURV9ESVNDT05ORUNURUQpIHsKKyAgICAgICAgICAgIGlmIChtU3RhdGUgIT0gQ09OTkVDVF9TVEFURV9ESVNDT05ORUNUSU5HICYmIG1TdGF0ZSAhPSBDT05ORUNUX1NUQVRFX0RJU0NPTk5FQ1RFRCkgeworICAgICAgICAgICAgICAgIExvZy5pKFRBRywgZnVuY05hbWUgKyAiIGZvciAiICsgbVNlcnZpY2VDb21wb25lbnQgKyAiIHdpdGggbVNlcnZpY2VDb25uZWN0aW9uPSIKKyAgICAgICAgICAgICAgICAgICAgICAgICsgbVNlcnZpY2VDYWxsYmFja3MgKyAiIHRoaXM9IiArIHRoaXMpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKworICAgIHByaXZhdGUgU2VydmljZUNhbGxiYWNrcyBnZXROZXdTZXJ2aWNlQ2FsbGJhY2tzKCkgeworICAgICAgICByZXR1cm4gbmV3IFNlcnZpY2VDYWxsYmFja3ModGhpcyk7CisgICAgfQorCisgICAgLyoqCisgICAgICogTG9nIGludGVybmFsIHN0YXRlLgorICAgICAqIEBoaWRlCisgICAgICovCisgICAgdm9pZCBkdW1wKCkgeworICAgICAgICBMb2cuZChUQUcsICJNZWRpYUJyb3dzZXIuLi4iKTsKKyAgICAgICAgTG9nLmQoVEFHLCAiICBtU2VydmljZUNvbXBvbmVudD0iICsgbVNlcnZpY2VDb21wb25lbnQpOworICAgICAgICBMb2cuZChUQUcsICIgIG1DYWxsYmFjaz0iICsgbUNhbGxiYWNrKTsKKyAgICAgICAgTG9nLmQoVEFHLCAiICBtUm9vdEhpbnRzPSIgKyBtUm9vdEhpbnRzKTsKKyAgICAgICAgTG9nLmQoVEFHLCAiICBtU3RhdGU9IiArIGdldFN0YXRlTGFiZWwobVN0YXRlKSk7CisgICAgICAgIExvZy5kKFRBRywgIiAgbVNlcnZpY2VDb25uZWN0aW9uPSIgKyBtU2VydmljZUNvbm5lY3Rpb24pOworICAgICAgICBMb2cuZChUQUcsICIgIG1TZXJ2aWNlQmluZGVyPSIgKyBtU2VydmljZUJpbmRlcik7CisgICAgICAgIExvZy5kKFRBRywgIiAgbVNlcnZpY2VDYWxsYmFja3M9IiArIG1TZXJ2aWNlQ2FsbGJhY2tzKTsKKyAgICAgICAgTG9nLmQoVEFHLCAiICBtUm9vdElkPSIgKyBtUm9vdElkKTsKKyAgICAgICAgTG9nLmQoVEFHLCAiICBtTWVkaWFTZXNzaW9uVG9rZW49IiArIG1NZWRpYVNlc3Npb25Ub2tlbik7CisgICAgfQorCisgICAgLyoqCisgICAgICogQSBjbGFzcyB3aXRoIGluZm9ybWF0aW9uIG9uIGEgc2luZ2xlIG1lZGlhIGl0ZW0gZm9yIHVzZSBpbiBicm93c2luZy9zZWFyY2hpbmcgbWVkaWEuCisgICAgICogTWVkaWFJdGVtcyBhcmUgYXBwbGljYXRpb24gZGVwZW5kZW50IHNvIHdlIGNhbm5vdCBndWFyYW50ZWUgdGhhdCB0aGV5IGNvbnRhaW4gdGhlCisgICAgICogcmlnaHQgdmFsdWVzLgorICAgICAqLworICAgIHB1YmxpYyBzdGF0aWMgY2xhc3MgTWVkaWFJdGVtIGltcGxlbWVudHMgUGFyY2VsYWJsZSB7CisgICAgICAgIHByaXZhdGUgZmluYWwgaW50IG1GbGFnczsKKyAgICAgICAgcHJpdmF0ZSBmaW5hbCBNZWRpYURlc2NyaXB0aW9uIG1EZXNjcmlwdGlvbjsKKworICAgICAgICAvKiogQGhpZGUgKi8KKyAgICAgICAgQFJldGVudGlvbihSZXRlbnRpb25Qb2xpY3kuU09VUkNFKQorICAgICAgICBASW50RGVmKGZsYWc9dHJ1ZSwgdmFsdWUgPSB7IEZMQUdfQlJPV1NBQkxFLCBGTEFHX1BMQVlBQkxFIH0pCisgICAgICAgIHB1YmxpYyBAaW50ZXJmYWNlIEZsYWdzIHsgfQorCisgICAgICAgIC8qKgorICAgICAgICAgKiBGbGFnOiBJbmRpY2F0ZXMgdGhhdCB0aGUgaXRlbSBoYXMgY2hpbGRyZW4gb2YgaXRzIG93bi4KKyAgICAgICAgICovCisgICAgICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEZMQUdfQlJPV1NBQkxFID0gMSA8PCAwOworCisgICAgICAgIC8qKgorICAgICAgICAgKiBGbGFnOiBJbmRpY2F0ZXMgdGhhdCB0aGUgaXRlbSBpcyBwbGF5YWJsZS4KKyAgICAgICAgICogPHA+CisgICAgICAgICAqIFRoZSBpZCBvZiB0aGlzIGl0ZW0gbWF5IGJlIHBhc3NlZCB0bworICAgICAgICAgKiB7QGxpbmsgTWVkaWFDb250cm9sbGVyLlRyYW5zcG9ydENvbnRyb2xzI3BsYXlGcm9tTWVkaWFJZChTdHJpbmcsIEJ1bmRsZSl9CisgICAgICAgICAqIHRvIHN0YXJ0IHBsYXlpbmcgaXQuCisgICAgICAgICAqIDwvcD4KKyAgICAgICAgICovCisgICAgICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEZMQUdfUExBWUFCTEUgPSAxIDw8IDE7CisKKyAgICAgICAgLyoqCisgICAgICAgICAqIENyZWF0ZSBhIG5ldyBNZWRpYUl0ZW0gZm9yIHVzZSBpbiBicm93c2luZyBtZWRpYS4KKyAgICAgICAgICogQHBhcmFtIGRlc2NyaXB0aW9uIFRoZSBkZXNjcmlwdGlvbiBvZiB0aGUgbWVkaWEsIHdoaWNoIG11c3QgaW5jbHVkZSBhCisgICAgICAgICAqICAgICAgICAgICAgbWVkaWEgaWQuCisgICAgICAgICAqIEBwYXJhbSBmbGFncyBUaGUgZmxhZ3MgZm9yIHRoaXMgaXRlbS4KKyAgICAgICAgICovCisgICAgICAgIHB1YmxpYyBNZWRpYUl0ZW0oQE5vbk51bGwgTWVkaWFEZXNjcmlwdGlvbiBkZXNjcmlwdGlvbiwgQEZsYWdzIGludCBmbGFncykgeworICAgICAgICAgICAgaWYgKGRlc2NyaXB0aW9uID09IG51bGwpIHsKKyAgICAgICAgICAgICAgICB0aHJvdyBuZXcgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKCJkZXNjcmlwdGlvbiBjYW5ub3QgYmUgbnVsbCIpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKFRleHRVdGlscy5pc0VtcHR5KGRlc2NyaXB0aW9uLmdldE1lZGlhSWQoKSkpIHsKKyAgICAgICAgICAgICAgICB0aHJvdyBuZXcgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKCJkZXNjcmlwdGlvbiBtdXN0IGhhdmUgYSBub24tZW1wdHkgbWVkaWEgaWQiKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIG1GbGFncyA9IGZsYWdzOworICAgICAgICAgICAgbURlc2NyaXB0aW9uID0gZGVzY3JpcHRpb247CisgICAgICAgIH0KKworICAgICAgICAvKioKKyAgICAgICAgICogUHJpdmF0ZSBjb25zdHJ1Y3Rvci4KKyAgICAgICAgICovCisgICAgICAgIHByaXZhdGUgTWVkaWFJdGVtKFBhcmNlbCBpbikgeworICAgICAgICAgICAgbUZsYWdzID0gaW4ucmVhZEludCgpOworICAgICAgICAgICAgbURlc2NyaXB0aW9uID0gTWVkaWFEZXNjcmlwdGlvbi5DUkVBVE9SLmNyZWF0ZUZyb21QYXJjZWwoaW4pOworICAgICAgICB9CisKKyAgICAgICAgQE92ZXJyaWRlCisgICAgICAgIHB1YmxpYyBpbnQgZGVzY3JpYmVDb250ZW50cygpIHsKKyAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICB9CisKKyAgICAgICAgQE92ZXJyaWRlCisgICAgICAgIHB1YmxpYyB2b2lkIHdyaXRlVG9QYXJjZWwoUGFyY2VsIG91dCwgaW50IGZsYWdzKSB7CisgICAgICAgICAgICBvdXQud3JpdGVJbnQobUZsYWdzKTsKKyAgICAgICAgICAgIG1EZXNjcmlwdGlvbi53cml0ZVRvUGFyY2VsKG91dCwgZmxhZ3MpOworICAgICAgICB9CisKKyAgICAgICAgQE92ZXJyaWRlCisgICAgICAgIHB1YmxpYyBTdHJpbmcgdG9TdHJpbmcoKSB7CisgICAgICAgICAgICBmaW5hbCBTdHJpbmdCdWlsZGVyIHNiID0gbmV3IFN0cmluZ0J1aWxkZXIoIk1lZGlhSXRlbXsiKTsKKyAgICAgICAgICAgIHNiLmFwcGVuZCgibUZsYWdzPSIpLmFwcGVuZChtRmxhZ3MpOworICAgICAgICAgICAgc2IuYXBwZW5kKCIsIG1EZXNjcmlwdGlvbj0iKS5hcHBlbmQobURlc2NyaXB0aW9uKTsKKyAgICAgICAgICAgIHNiLmFwcGVuZCgnfScpOworICAgICAgICAgICAgcmV0dXJuIHNiLnRvU3RyaW5nKCk7CisgICAgICAgIH0KKworICAgICAgICBwdWJsaWMgc3RhdGljIGZpbmFsIFBhcmNlbGFibGUuQ3JlYXRvcjxNZWRpYUl0ZW0+IENSRUFUT1IgPQorICAgICAgICAgICAgICAgIG5ldyBQYXJjZWxhYmxlLkNyZWF0b3I8TWVkaWFJdGVtPigpIHsKKyAgICAgICAgICAgICAgICAgICAgQE92ZXJyaWRlCisgICAgICAgICAgICAgICAgICAgIHB1YmxpYyBNZWRpYUl0ZW0gY3JlYXRlRnJvbVBhcmNlbChQYXJjZWwgaW4pIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBuZXcgTWVkaWFJdGVtKGluKTsKKyAgICAgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgICAgIEBPdmVycmlkZQorICAgICAgICAgICAgICAgICAgICBwdWJsaWMgTWVkaWFJdGVtW10gbmV3QXJyYXkoaW50IHNpemUpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBuZXcgTWVkaWFJdGVtW3NpemVdOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfTsKKworICAgICAgICAvKioKKyAgICAgICAgICogR2V0cyB0aGUgZmxhZ3Mgb2YgdGhlIGl0ZW0uCisgICAgICAgICAqLworICAgICAgICBwdWJsaWMgQEZsYWdzIGludCBnZXRGbGFncygpIHsKKyAgICAgICAgICAgIHJldHVybiBtRmxhZ3M7CisgICAgICAgIH0KKworICAgICAgICAvKioKKyAgICAgICAgICogUmV0dXJucyB3aGV0aGVyIHRoaXMgaXRlbSBpcyBicm93c2FibGUuCisgICAgICAgICAqIEBzZWUgI0ZMQUdfQlJPV1NBQkxFCisgICAgICAgICAqLworICAgICAgICBwdWJsaWMgYm9vbGVhbiBpc0Jyb3dzYWJsZSgpIHsKKyAgICAgICAgICAgIHJldHVybiAobUZsYWdzICYgRkxBR19CUk9XU0FCTEUpICE9IDA7CisgICAgICAgIH0KKworICAgICAgICAvKioKKyAgICAgICAgICogUmV0dXJucyB3aGV0aGVyIHRoaXMgaXRlbSBpcyBwbGF5YWJsZS4KKyAgICAgICAgICogQHNlZSAjRkxBR19QTEFZQUJMRQorICAgICAgICAgKi8KKyAgICAgICAgcHVibGljIGJvb2xlYW4gaXNQbGF5YWJsZSgpIHsKKyAgICAgICAgICAgIHJldHVybiAobUZsYWdzICYgRkxBR19QTEFZQUJMRSkgIT0gMDsKKyAgICAgICAgfQorCisgICAgICAgIC8qKgorICAgICAgICAgKiBSZXR1cm5zIHRoZSBkZXNjcmlwdGlvbiBvZiB0aGUgbWVkaWEuCisgICAgICAgICAqLworICAgICAgICBwdWJsaWMgQE5vbk51bGwgTWVkaWFEZXNjcmlwdGlvbiBnZXREZXNjcmlwdGlvbigpIHsKKyAgICAgICAgICAgIHJldHVybiBtRGVzY3JpcHRpb247CisgICAgICAgIH0KKworICAgICAgICAvKioKKyAgICAgICAgICogUmV0dXJucyB0aGUgbWVkaWEgaWQgaW4gdGhlIHtAbGluayBNZWRpYURlc2NyaXB0aW9ufSBmb3IgdGhpcyBpdGVtLgorICAgICAgICAgKiBAc2VlIGFuZHJvaWQubWVkaWEuTWVkaWFNZXRhZGF0YSNNRVRBREFUQV9LRVlfTUVESUFfSUQKKyAgICAgICAgICovCisgICAgICAgIHB1YmxpYyBATnVsbGFibGUgU3RyaW5nIGdldE1lZGlhSWQoKSB7CisgICAgICAgICAgICByZXR1cm4gbURlc2NyaXB0aW9uLmdldE1lZGlhSWQoKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIC8qKgorICAgICAqIENhbGxiYWNrcyBmb3IgY29ubmVjdGlvbiByZWxhdGVkIGV2ZW50cy4KKyAgICAgKi8KKyAgICBwdWJsaWMgc3RhdGljIGNsYXNzIENvbm5lY3Rpb25DYWxsYmFjayB7CisgICAgICAgIC8qKgorICAgICAgICAgKiBJbnZva2VkIGFmdGVyIHtAbGluayBNZWRpYUJyb3dzZXIjY29ubmVjdCgpfSB3aGVuIHRoZSByZXF1ZXN0IGhhcyBzdWNjZXNzZnVsbHkgY29tcGxldGVkLgorICAgICAgICAgKi8KKyAgICAgICAgcHVibGljIHZvaWQgb25Db25uZWN0ZWQoKSB7CisgICAgICAgIH0KKworICAgICAgICAvKioKKyAgICAgICAgICogSW52b2tlZCB3aGVuIHRoZSBjbGllbnQgaXMgZGlzY29ubmVjdGVkIGZyb20gdGhlIG1lZGlhIGJyb3dzZXIuCisgICAgICAgICAqLworICAgICAgICBwdWJsaWMgdm9pZCBvbkNvbm5lY3Rpb25TdXNwZW5kZWQoKSB7CisgICAgICAgIH0KKworICAgICAgICAvKioKKyAgICAgICAgICogSW52b2tlZCB3aGVuIHRoZSBjb25uZWN0aW9uIHRvIHRoZSBtZWRpYSBicm93c2VyIGZhaWxlZC4KKyAgICAgICAgICovCisgICAgICAgIHB1YmxpYyB2b2lkIG9uQ29ubmVjdGlvbkZhaWxlZCgpIHsKKyAgICAgICAgfQorICAgIH0KKworICAgIC8qKgorICAgICAqIENhbGxiYWNrcyBmb3Igc3Vic2NyaXB0aW9uIHJlbGF0ZWQgZXZlbnRzLgorICAgICAqLworICAgIHB1YmxpYyBzdGF0aWMgYWJzdHJhY3QgY2xhc3MgU3Vic2NyaXB0aW9uQ2FsbGJhY2sgeworICAgICAgICBCaW5kZXIgbVRva2VuOworCisgICAgICAgIHB1YmxpYyBTdWJzY3JpcHRpb25DYWxsYmFjaygpIHsKKyAgICAgICAgICAgIG1Ub2tlbiA9IG5ldyBCaW5kZXIoKTsKKyAgICAgICAgfQorCisgICAgICAgIC8qKgorICAgICAgICAgKiBDYWxsZWQgd2hlbiB0aGUgbGlzdCBvZiBjaGlsZHJlbiBpcyBsb2FkZWQgb3IgdXBkYXRlZC4KKyAgICAgICAgICoKKyAgICAgICAgICogQHBhcmFtIHBhcmVudElkIFRoZSBtZWRpYSBpZCBvZiB0aGUgcGFyZW50IG1lZGlhIGl0ZW0uCisgICAgICAgICAqIEBwYXJhbSBjaGlsZHJlbiBUaGUgY2hpbGRyZW4gd2hpY2ggd2VyZSBsb2FkZWQuCisgICAgICAgICAqLworICAgICAgICBwdWJsaWMgdm9pZCBvbkNoaWxkcmVuTG9hZGVkKEBOb25OdWxsIFN0cmluZyBwYXJlbnRJZCwgQE5vbk51bGwgTGlzdDxNZWRpYUl0ZW0+IGNoaWxkcmVuKSB7CisgICAgICAgIH0KKworICAgICAgICAvKioKKyAgICAgICAgICogQ2FsbGVkIHdoZW4gdGhlIGxpc3Qgb2YgY2hpbGRyZW4gaXMgbG9hZGVkIG9yIHVwZGF0ZWQuCisgICAgICAgICAqCisgICAgICAgICAqIEBwYXJhbSBwYXJlbnRJZCBUaGUgbWVkaWEgaWQgb2YgdGhlIHBhcmVudCBtZWRpYSBpdGVtLgorICAgICAgICAgKiBAcGFyYW0gY2hpbGRyZW4gVGhlIGNoaWxkcmVuIHdoaWNoIHdlcmUgbG9hZGVkLgorICAgICAgICAgKiBAcGFyYW0gb3B0aW9ucyBUaGUgYnVuZGxlIG9mIHNlcnZpY2Utc3BlY2lmaWMgYXJndW1lbnRzIHNlbnQgdG8gdGhlIG1lZGlhCisgICAgICAgICAqICAgICAgICAgICAgYnJvd3NlciBzZXJ2aWNlLiBUaGUgY29udGVudHMgb2YgdGhpcyBidW5kbGUgbWF5IGFmZmVjdCB0aGUKKyAgICAgICAgICogICAgICAgICAgICBpbmZvcm1hdGlvbiByZXR1cm5lZCB3aGVuIGJyb3dzaW5nLgorICAgICAgICAgKi8KKyAgICAgICAgcHVibGljIHZvaWQgb25DaGlsZHJlbkxvYWRlZChATm9uTnVsbCBTdHJpbmcgcGFyZW50SWQsIEBOb25OdWxsIExpc3Q8TWVkaWFJdGVtPiBjaGlsZHJlbiwKKyAgICAgICAgICAgICAgICBATm9uTnVsbCBCdW5kbGUgb3B0aW9ucykgeworICAgICAgICB9CisKKyAgICAgICAgLyoqCisgICAgICAgICAqIENhbGxlZCB3aGVuIHRoZSBpZCBkb2Vzbid0IGV4aXN0IG9yIG90aGVyIGVycm9ycyBpbiBzdWJzY3JpYmluZy4KKyAgICAgICAgICogPHA+CisgICAgICAgICAqIElmIHRoaXMgaXMgY2FsbGVkLCB0aGUgc3Vic2NyaXB0aW9uIHJlbWFpbnMgdW50aWwge0BsaW5rIE1lZGlhQnJvd3NlciN1bnN1YnNjcmliZX0KKyAgICAgICAgICogY2FsbGVkLCBiZWNhdXNlIHNvbWUgZXJyb3JzIG1heSBoZWFsIHRoZW1zZWx2ZXMuCisgICAgICAgICAqIDwvcD4KKyAgICAgICAgICoKKyAgICAgICAgICogQHBhcmFtIHBhcmVudElkIFRoZSBtZWRpYSBpZCBvZiB0aGUgcGFyZW50IG1lZGlhIGl0ZW0gd2hvc2UgY2hpbGRyZW4gY291bGQKKyAgICAgICAgICogICAgICAgICAgICBub3QgYmUgbG9hZGVkLgorICAgICAgICAgKi8KKyAgICAgICAgcHVibGljIHZvaWQgb25FcnJvcihATm9uTnVsbCBTdHJpbmcgcGFyZW50SWQpIHsKKyAgICAgICAgfQorCisgICAgICAgIC8qKgorICAgICAgICAgKiBDYWxsZWQgd2hlbiB0aGUgaWQgZG9lc24ndCBleGlzdCBvciBvdGhlciBlcnJvcnMgaW4gc3Vic2NyaWJpbmcuCisgICAgICAgICAqIDxwPgorICAgICAgICAgKiBJZiB0aGlzIGlzIGNhbGxlZCwgdGhlIHN1YnNjcmlwdGlvbiByZW1haW5zIHVudGlsIHtAbGluayBNZWRpYUJyb3dzZXIjdW5zdWJzY3JpYmV9CisgICAgICAgICAqIGNhbGxlZCwgYmVjYXVzZSBzb21lIGVycm9ycyBtYXkgaGVhbCB0aGVtc2VsdmVzLgorICAgICAgICAgKiA8L3A+CisgICAgICAgICAqCisgICAgICAgICAqIEBwYXJhbSBwYXJlbnRJZCBUaGUgbWVkaWEgaWQgb2YgdGhlIHBhcmVudCBtZWRpYSBpdGVtIHdob3NlIGNoaWxkcmVuIGNvdWxkCisgICAgICAgICAqICAgICAgICAgICAgbm90IGJlIGxvYWRlZC4KKyAgICAgICAgICogQHBhcmFtIG9wdGlvbnMgVGhlIGJ1bmRsZSBvZiBzZXJ2aWNlLXNwZWNpZmljIGFyZ3VtZW50cyBzZW50IHRvIHRoZSBtZWRpYQorICAgICAgICAgKiAgICAgICAgICAgIGJyb3dzZXIgc2VydmljZS4KKyAgICAgICAgICovCisgICAgICAgIHB1YmxpYyB2b2lkIG9uRXJyb3IoQE5vbk51bGwgU3RyaW5nIHBhcmVudElkLCBATm9uTnVsbCBCdW5kbGUgb3B0aW9ucykgeworICAgICAgICB9CisgICAgfQorCisgICAgLyoqCisgICAgICogQ2FsbGJhY2sgZm9yIHJlY2VpdmluZyB0aGUgcmVzdWx0IG9mIHtAbGluayAjZ2V0SXRlbX0uCisgICAgICovCisgICAgcHVibGljIHN0YXRpYyBhYnN0cmFjdCBjbGFzcyBJdGVtQ2FsbGJhY2sgeworICAgICAgICAvKioKKyAgICAgICAgICogQ2FsbGVkIHdoZW4gdGhlIGl0ZW0gaGFzIGJlZW4gcmV0dXJuZWQgYnkgdGhlIGNvbm5lY3RlZCBzZXJ2aWNlLgorICAgICAgICAgKgorICAgICAgICAgKiBAcGFyYW0gaXRlbSBUaGUgaXRlbSB0aGF0IHdhcyByZXR1cm5lZCBvciBudWxsIGlmIGl0IGRvZXNuJ3QgZXhpc3QuCisgICAgICAgICAqLworICAgICAgICBwdWJsaWMgdm9pZCBvbkl0ZW1Mb2FkZWQoTWVkaWFJdGVtIGl0ZW0pIHsKKyAgICAgICAgfQorCisgICAgICAgIC8qKgorICAgICAgICAgKiBDYWxsZWQgdGhlcmUgd2FzIGFuIGVycm9yIHJldHJpZXZpbmcgaXQgb3IgdGhlIGNvbm5lY3RlZCBzZXJ2aWNlIGRvZXNuJ3Qgc3VwcG9ydAorICAgICAgICAgKiB7QGxpbmsgI2dldEl0ZW19LgorICAgICAgICAgKgorICAgICAgICAgKiBAcGFyYW0gbWVkaWFJZCBUaGUgbWVkaWEgaWQgb2YgdGhlIG1lZGlhIGl0ZW0gd2hpY2ggY291bGQgbm90IGJlIGxvYWRlZC4KKyAgICAgICAgICovCisgICAgICAgIHB1YmxpYyB2b2lkIG9uRXJyb3IoQE5vbk51bGwgU3RyaW5nIG1lZGlhSWQpIHsKKyAgICAgICAgfQorICAgIH0KKworICAgIC8qKgorICAgICAqIFNlcnZpY2VDb25uZWN0aW9uIHRvIHRoZSBvdGhlciBhcHAuCisgICAgICovCisgICAgcHJpdmF0ZSBjbGFzcyBNZWRpYVNlcnZpY2VDb25uZWN0aW9uIGltcGxlbWVudHMgU2VydmljZUNvbm5lY3Rpb24geworICAgICAgICBAT3ZlcnJpZGUKKyAgICAgICAgcHVibGljIHZvaWQgb25TZXJ2aWNlQ29ubmVjdGVkKGZpbmFsIENvbXBvbmVudE5hbWUgbmFtZSwgZmluYWwgSUJpbmRlciBiaW5kZXIpIHsKKyAgICAgICAgICAgIHBvc3RPclJ1bihuZXcgUnVubmFibGUoKSB7CisgICAgICAgICAgICAgICAgQE92ZXJyaWRlCisgICAgICAgICAgICAgICAgcHVibGljIHZvaWQgcnVuKCkgeworICAgICAgICAgICAgICAgICAgICBpZiAoREJHKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBMb2cuZChUQUcsICJNZWRpYVNlcnZpY2VDb25uZWN0aW9uLm9uU2VydmljZUNvbm5lY3RlZCBuYW1lPSIgKyBuYW1lCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsgIiBiaW5kZXI9IiArIGJpbmRlcik7CisgICAgICAgICAgICAgICAgICAgICAgICBkdW1wKCk7CisgICAgICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgICAgICAvLyBNYWtlIHN1cmUgd2UgYXJlIHN0aWxsIHRoZSBjdXJyZW50IGNvbm5lY3Rpb24sIGFuZCB0aGF0IHRoZXkgaGF2ZW4ndCBjYWxsZWQKKyAgICAgICAgICAgICAgICAgICAgLy8gZGlzY29ubmVjdCgpLgorICAgICAgICAgICAgICAgICAgICBpZiAoIWlzQ3VycmVudCgib25TZXJ2aWNlQ29ubmVjdGVkIikpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgICAgIC8vIFNhdmUgdGhlaXIgYmluZGVyCisgICAgICAgICAgICAgICAgICAgIG1TZXJ2aWNlQmluZGVyID0gSU1lZGlhQnJvd3NlclNlcnZpY2UuU3R1Yi5hc0ludGVyZmFjZShiaW5kZXIpOworCisgICAgICAgICAgICAgICAgICAgIC8vIFdlIG1ha2UgYSBuZXcgbVNlcnZpY2VDYWxsYmFja3MgZWFjaCB0aW1lIHdlIGNvbm5lY3Qgc28gdGhhdCB3ZSBjYW4gZHJvcAorICAgICAgICAgICAgICAgICAgICAvLyByZXNwb25zZXMgZnJvbSBwcmV2aW91cyBjb25uZWN0aW9ucy4KKyAgICAgICAgICAgICAgICAgICAgbVNlcnZpY2VDYWxsYmFja3MgPSBnZXROZXdTZXJ2aWNlQ2FsbGJhY2tzKCk7CisgICAgICAgICAgICAgICAgICAgIG1TdGF0ZSA9IENPTk5FQ1RfU1RBVEVfQ09OTkVDVElORzsKKworICAgICAgICAgICAgICAgICAgICAvLyBDYWxsIGNvbm5lY3QsIHdoaWNoIGlzIGFzeW5jLiBXaGVuIHdlIGdldCBhIHJlc3BvbnNlIGZyb20gdGhhdCB3ZSB3aWxsCisgICAgICAgICAgICAgICAgICAgIC8vIHNheSB0aGF0IHdlJ3JlIGNvbm5lY3RlZC4KKyAgICAgICAgICAgICAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChEQkcpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBMb2cuZChUQUcsICJTZXJ2aWNlQ2FsbGJhY2tzLm9uQ29ubmVjdC4uLiIpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGR1bXAoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIG1TZXJ2aWNlQmluZGVyLmNvbm5lY3QobUNvbnRleHQuZ2V0UGFja2FnZU5hbWUoKSwgbVJvb3RIaW50cywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbVNlcnZpY2VDYWxsYmFja3MpOworICAgICAgICAgICAgICAgICAgICB9IGNhdGNoIChSZW1vdGVFeGNlcHRpb24gZXgpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIENvbm5lY3QgZmFpbGVkLCB3aGljaCBpc24ndCBnb29kLiBCdXQgdGhlIGF1dG8tcmVjb25uZWN0IG9uIHRoZSBzZXJ2aWNlCisgICAgICAgICAgICAgICAgICAgICAgICAvLyB3aWxsIHRha2Ugb3ZlciBhbmQgd2Ugd2lsbCBjb21lIGJhY2suIFdlIHdpbGwgYWxzbyBnZXQgdGhlCisgICAgICAgICAgICAgICAgICAgICAgICAvLyBvblNlcnZpY2VEaXNjb25uZWN0ZWQsIHdoaWNoIGhhcyBhbGwgdGhlIGNsZWFudXAgY29kZS4gU28gbGV0IHRoYXQgZG8KKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIGl0LgorICAgICAgICAgICAgICAgICAgICAgICAgTG9nLncoVEFHLCAiUmVtb3RlRXhjZXB0aW9uIGR1cmluZyBjb25uZWN0IGZvciAiICsgbVNlcnZpY2VDb21wb25lbnQpOworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKERCRykgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIExvZy5kKFRBRywgIlNlcnZpY2VDYWxsYmFja3Mub25Db25uZWN0Li4uIik7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZHVtcCgpOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfSk7CisgICAgICAgIH0KKworICAgICAgICBAT3ZlcnJpZGUKKyAgICAgICAgcHVibGljIHZvaWQgb25TZXJ2aWNlRGlzY29ubmVjdGVkKGZpbmFsIENvbXBvbmVudE5hbWUgbmFtZSkgeworICAgICAgICAgICAgcG9zdE9yUnVuKG5ldyBSdW5uYWJsZSgpIHsKKyAgICAgICAgICAgICAgICBAT3ZlcnJpZGUKKyAgICAgICAgICAgICAgICBwdWJsaWMgdm9pZCBydW4oKSB7CisgICAgICAgICAgICAgICAgICAgIGlmIChEQkcpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIExvZy5kKFRBRywgIk1lZGlhU2VydmljZUNvbm5lY3Rpb24ub25TZXJ2aWNlRGlzY29ubmVjdGVkIG5hbWU9IiArIG5hbWUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKyAiIHRoaXM9IiArIHRoaXMgKyAiIG1TZXJ2aWNlQ29ubmVjdGlvbj0iICsgbVNlcnZpY2VDb25uZWN0aW9uKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGR1bXAoKTsKKyAgICAgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgICAgIC8vIE1ha2Ugc3VyZSB3ZSBhcmUgc3RpbGwgdGhlIGN1cnJlbnQgY29ubmVjdGlvbiwgYW5kIHRoYXQgdGhleSBoYXZlbid0IGNhbGxlZAorICAgICAgICAgICAgICAgICAgICAvLyBkaXNjb25uZWN0KCkuCisgICAgICAgICAgICAgICAgICAgIGlmICghaXNDdXJyZW50KCJvblNlcnZpY2VEaXNjb25uZWN0ZWQiKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAgICAgLy8gQ2xlYXIgb3V0IHdoYXQgd2Ugc2V0IGluIG9uU2VydmljZUNvbm5lY3RlZAorICAgICAgICAgICAgICAgICAgICBtU2VydmljZUJpbmRlciA9IG51bGw7CisgICAgICAgICAgICAgICAgICAgIG1TZXJ2aWNlQ2FsbGJhY2tzID0gbnVsbDsKKworICAgICAgICAgICAgICAgICAgICAvLyBBbmQgdGVsbCB0aGUgYXBwIHRoYXQgaXQncyBzdXNwZW5kZWQuCisgICAgICAgICAgICAgICAgICAgIG1TdGF0ZSA9IENPTk5FQ1RfU1RBVEVfU1VTUEVOREVEOworICAgICAgICAgICAgICAgICAgICBtQ2FsbGJhY2sub25Db25uZWN0aW9uU3VzcGVuZGVkKCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfSk7CisgICAgICAgIH0KKworICAgICAgICBwcml2YXRlIHZvaWQgcG9zdE9yUnVuKFJ1bm5hYmxlIHIpIHsKKyAgICAgICAgICAgIGlmIChUaHJlYWQuY3VycmVudFRocmVhZCgpID09IG1IYW5kbGVyLmdldExvb3BlcigpLmdldFRocmVhZCgpKSB7CisgICAgICAgICAgICAgICAgci5ydW4oKTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgbUhhbmRsZXIucG9zdChyKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIC8qKgorICAgICAgICAgKiBSZXR1cm4gdHJ1ZSBpZiB0aGlzIGlzIHRoZSBjdXJyZW50IFNlcnZpY2VDb25uZWN0aW9uLiBBbHNvIGxvZ3MgaWYgaXQncyBub3QuCisgICAgICAgICAqLworICAgICAgICBwcml2YXRlIGJvb2xlYW4gaXNDdXJyZW50KFN0cmluZyBmdW5jTmFtZSkgeworICAgICAgICAgICAgaWYgKG1TZXJ2aWNlQ29ubmVjdGlvbiAhPSB0aGlzIHx8IG1TdGF0ZSA9PSBDT05ORUNUX1NUQVRFX0RJU0NPTk5FQ1RJTkcKKyAgICAgICAgICAgICAgICAgICAgfHwgbVN0YXRlID09IENPTk5FQ1RfU1RBVEVfRElTQ09OTkVDVEVEKSB7CisgICAgICAgICAgICAgICAgaWYgKG1TdGF0ZSAhPSBDT05ORUNUX1NUQVRFX0RJU0NPTk5FQ1RJTkcgJiYgbVN0YXRlICE9IENPTk5FQ1RfU1RBVEVfRElTQ09OTkVDVEVEKSB7CisgICAgICAgICAgICAgICAgICAgIC8vIENoZWNrIG1TdGF0ZSwgYmVjYXVzZSBvdGhlcndpc2UgdGhpcyBsb2cgaXMgbm9pc3kuCisgICAgICAgICAgICAgICAgICAgIExvZy5pKFRBRywgZnVuY05hbWUgKyAiIGZvciAiICsgbVNlcnZpY2VDb21wb25lbnQgKyAiIHdpdGggbVNlcnZpY2VDb25uZWN0aW9uPSIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICArIG1TZXJ2aWNlQ29ubmVjdGlvbiArICIgdGhpcz0iICsgdGhpcyk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9CisgICAgfQorCisgICAgLyoqCisgICAgICogQ2FsbGJhY2tzIGZyb20gdGhlIHNlcnZpY2UuCisgICAgICovCisgICAgcHJpdmF0ZSBzdGF0aWMgY2xhc3MgU2VydmljZUNhbGxiYWNrcyBleHRlbmRzIElNZWRpYUJyb3dzZXJTZXJ2aWNlQ2FsbGJhY2tzLlN0dWIgeworICAgICAgICBwcml2YXRlIFdlYWtSZWZlcmVuY2U8TWVkaWFCcm93c2VyPiBtTWVkaWFCcm93c2VyOworCisgICAgICAgIHB1YmxpYyBTZXJ2aWNlQ2FsbGJhY2tzKE1lZGlhQnJvd3NlciBtZWRpYUJyb3dzZXIpIHsKKyAgICAgICAgICAgIG1NZWRpYUJyb3dzZXIgPSBuZXcgV2Vha1JlZmVyZW5jZTxNZWRpYUJyb3dzZXI+KG1lZGlhQnJvd3Nlcik7CisgICAgICAgIH0KKworICAgICAgICAvKioKKyAgICAgICAgICogVGhlIG90aGVyIHNpZGUgaGFzIGFja25vd2xlZGdlZCBvdXIgY29ubmVjdGlvbi4gVGhlIHBhcmFtZXRlcnMgdG8gdGhpcyBmdW5jdGlvbgorICAgICAgICAgKiBhcmUgdGhlIGluaXRpYWwgZGF0YSBhcyByZXF1ZXN0ZWQuCisgICAgICAgICAqLworICAgICAgICBAT3ZlcnJpZGUKKyAgICAgICAgcHVibGljIHZvaWQgb25Db25uZWN0KFN0cmluZyByb290LCBNZWRpYVNlc3Npb24uVG9rZW4gc2Vzc2lvbiwKKyAgICAgICAgICAgICAgICBmaW5hbCBCdW5kbGUgZXh0cmFzKSB7CisgICAgICAgICAgICBNZWRpYUJyb3dzZXIgbWVkaWFCcm93c2VyID0gbU1lZGlhQnJvd3Nlci5nZXQoKTsKKyAgICAgICAgICAgIGlmIChtZWRpYUJyb3dzZXIgIT0gbnVsbCkgeworICAgICAgICAgICAgICAgIG1lZGlhQnJvd3Nlci5vblNlcnZpY2VDb25uZWN0ZWQodGhpcywgcm9vdCwgc2Vzc2lvbiwgZXh0cmFzKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIC8qKgorICAgICAgICAgKiBUaGUgb3RoZXIgc2lkZSBkb2VzIG5vdCBsaWtlIHVzLiBUZWxsIHRoZSBhcHAgdmlhIG9uQ29ubmVjdGlvbkZhaWxlZC4KKyAgICAgICAgICovCisgICAgICAgIEBPdmVycmlkZQorICAgICAgICBwdWJsaWMgdm9pZCBvbkNvbm5lY3RGYWlsZWQoKSB7CisgICAgICAgICAgICBNZWRpYUJyb3dzZXIgbWVkaWFCcm93c2VyID0gbU1lZGlhQnJvd3Nlci5nZXQoKTsKKyAgICAgICAgICAgIGlmIChtZWRpYUJyb3dzZXIgIT0gbnVsbCkgeworICAgICAgICAgICAgICAgIG1lZGlhQnJvd3Nlci5vbkNvbm5lY3Rpb25GYWlsZWQodGhpcyk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICAvL1RPRE86KGIvMTE5NzUwODA3KSBSZXNvbHZlIGhpZGRlbiBBUEkgdXNhZ2UgUGFyY2VsZWRMaXN0U2xpY2UuCisgICAgICAgIC8qCisgICAgICAgIEBPdmVycmlkZQorICAgICAgICBwdWJsaWMgdm9pZCBvbkxvYWRDaGlsZHJlbihTdHJpbmcgcGFyZW50SWQsIFBhcmNlbGVkTGlzdFNsaWNlIGxpc3QpIHsKKyAgICAgICAgICAgIG9uTG9hZENoaWxkcmVuV2l0aE9wdGlvbnMocGFyZW50SWQsIGxpc3QsIG51bGwpOworICAgICAgICB9CisKKyAgICAgICAgQE92ZXJyaWRlCisgICAgICAgIHB1YmxpYyB2b2lkIG9uTG9hZENoaWxkcmVuV2l0aE9wdGlvbnMoU3RyaW5nIHBhcmVudElkLCBQYXJjZWxlZExpc3RTbGljZSBsaXN0LAorICAgICAgICAgICAgICAgIGZpbmFsIEJ1bmRsZSBvcHRpb25zKSB7CisgICAgICAgICAgICBNZWRpYUJyb3dzZXIgbWVkaWFCcm93c2VyID0gbU1lZGlhQnJvd3Nlci5nZXQoKTsKKyAgICAgICAgICAgIGlmIChtZWRpYUJyb3dzZXIgIT0gbnVsbCkgeworICAgICAgICAgICAgICAgIG1lZGlhQnJvd3Nlci5vbkxvYWRDaGlsZHJlbih0aGlzLCBwYXJlbnRJZCwgbGlzdCwgb3B0aW9ucyk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgKi8KKyAgICB9CisKKyAgICBwcml2YXRlIHN0YXRpYyBjbGFzcyBTdWJzY3JpcHRpb24geworICAgICAgICBwcml2YXRlIGZpbmFsIExpc3Q8U3Vic2NyaXB0aW9uQ2FsbGJhY2s+IG1DYWxsYmFja3M7CisgICAgICAgIHByaXZhdGUgZmluYWwgTGlzdDxCdW5kbGU+IG1PcHRpb25zTGlzdDsKKworICAgICAgICBwdWJsaWMgU3Vic2NyaXB0aW9uKCkgeworICAgICAgICAgICAgbUNhbGxiYWNrcyA9IG5ldyBBcnJheUxpc3Q8PigpOworICAgICAgICAgICAgbU9wdGlvbnNMaXN0ID0gbmV3IEFycmF5TGlzdDw+KCk7CisgICAgICAgIH0KKworICAgICAgICBwdWJsaWMgYm9vbGVhbiBpc0VtcHR5KCkgeworICAgICAgICAgICAgcmV0dXJuIG1DYWxsYmFja3MuaXNFbXB0eSgpOworICAgICAgICB9CisKKyAgICAgICAgcHVibGljIExpc3Q8QnVuZGxlPiBnZXRPcHRpb25zTGlzdCgpIHsKKyAgICAgICAgICAgIHJldHVybiBtT3B0aW9uc0xpc3Q7CisgICAgICAgIH0KKworICAgICAgICBwdWJsaWMgTGlzdDxTdWJzY3JpcHRpb25DYWxsYmFjaz4gZ2V0Q2FsbGJhY2tzKCkgeworICAgICAgICAgICAgcmV0dXJuIG1DYWxsYmFja3M7CisgICAgICAgIH0KKworICAgICAgICBwdWJsaWMgU3Vic2NyaXB0aW9uQ2FsbGJhY2sgZ2V0Q2FsbGJhY2soQ29udGV4dCBjb250ZXh0LCBCdW5kbGUgb3B0aW9ucykgeworICAgICAgICAgICAgaWYgKG9wdGlvbnMgIT0gbnVsbCkgeworICAgICAgICAgICAgICAgIG9wdGlvbnMuc2V0Q2xhc3NMb2FkZXIoY29udGV4dC5nZXRDbGFzc0xvYWRlcigpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbU9wdGlvbnNMaXN0LnNpemUoKTsgKytpKSB7CisgICAgICAgICAgICAgICAgaWYgKE1lZGlhQnJvd3NlclV0aWxzLmFyZVNhbWVPcHRpb25zKG1PcHRpb25zTGlzdC5nZXQoaSksIG9wdGlvbnMpKSB7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBtQ2FsbGJhY2tzLmdldChpKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICByZXR1cm4gbnVsbDsKKyAgICAgICAgfQorCisgICAgICAgIHB1YmxpYyB2b2lkIHB1dENhbGxiYWNrKENvbnRleHQgY29udGV4dCwgQnVuZGxlIG9wdGlvbnMsIFN1YnNjcmlwdGlvbkNhbGxiYWNrIGNhbGxiYWNrKSB7CisgICAgICAgICAgICBpZiAob3B0aW9ucyAhPSBudWxsKSB7CisgICAgICAgICAgICAgICAgb3B0aW9ucy5zZXRDbGFzc0xvYWRlcihjb250ZXh0LmdldENsYXNzTG9hZGVyKCkpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBtT3B0aW9uc0xpc3Quc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgICAgICAgICBpZiAoTWVkaWFCcm93c2VyVXRpbHMuYXJlU2FtZU9wdGlvbnMobU9wdGlvbnNMaXN0LmdldChpKSwgb3B0aW9ucykpIHsKKyAgICAgICAgICAgICAgICAgICAgbUNhbGxiYWNrcy5zZXQoaSwgY2FsbGJhY2spOworICAgICAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgbUNhbGxiYWNrcy5hZGQoY2FsbGJhY2spOworICAgICAgICAgICAgbU9wdGlvbnNMaXN0LmFkZChvcHRpb25zKTsKKyAgICAgICAgfQorICAgIH0KK30KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL01lZGlhQ29tcG9uZW50cy9hcGV4L2phdmEvYW5kcm9pZC9tZWRpYS9icm93c2UvTWVkaWFCcm93c2VyVXRpbHMuamF2YSBiL3BhY2thZ2VzL01lZGlhQ29tcG9uZW50cy9hcGV4L2phdmEvYW5kcm9pZC9tZWRpYS9icm93c2UvTWVkaWFCcm93c2VyVXRpbHMuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yOTQzZTYwCi0tLSAvZGV2L251bGwKKysrIGIvcGFja2FnZXMvTWVkaWFDb21wb25lbnRzL2FwZXgvamF2YS9hbmRyb2lkL21lZGlhL2Jyb3dzZS9NZWRpYUJyb3dzZXJVdGlscy5qYXZhCkBAIC0wLDAgKzEsNzIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworCitwYWNrYWdlIGFuZHJvaWQubWVkaWEuYnJvd3NlOworCitpbXBvcnQgYW5kcm9pZC5vcy5CdW5kbGU7CisKKy8qKgorICogQGhpZGUKKyAqLworcHVibGljIGNsYXNzIE1lZGlhQnJvd3NlclV0aWxzIHsKKyAgICBwdWJsaWMgc3RhdGljIGJvb2xlYW4gYXJlU2FtZU9wdGlvbnMoQnVuZGxlIG9wdGlvbnMxLCBCdW5kbGUgb3B0aW9uczIpIHsKKyAgICAgICAgaWYgKG9wdGlvbnMxID09IG9wdGlvbnMyKSB7CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfSBlbHNlIGlmIChvcHRpb25zMSA9PSBudWxsKSB7CisgICAgICAgICAgICByZXR1cm4gb3B0aW9uczIuZ2V0SW50KE1lZGlhQnJvd3Nlci5FWFRSQV9QQUdFLCAtMSkgPT0gLTEKKyAgICAgICAgICAgICAgICAgICAgJiYgb3B0aW9uczIuZ2V0SW50KE1lZGlhQnJvd3Nlci5FWFRSQV9QQUdFX1NJWkUsIC0xKSA9PSAtMTsKKyAgICAgICAgfSBlbHNlIGlmIChvcHRpb25zMiA9PSBudWxsKSB7CisgICAgICAgICAgICByZXR1cm4gb3B0aW9uczEuZ2V0SW50KE1lZGlhQnJvd3Nlci5FWFRSQV9QQUdFLCAtMSkgPT0gLTEKKyAgICAgICAgICAgICAgICAgICAgJiYgb3B0aW9uczEuZ2V0SW50KE1lZGlhQnJvd3Nlci5FWFRSQV9QQUdFX1NJWkUsIC0xKSA9PSAtMTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHJldHVybiBvcHRpb25zMS5nZXRJbnQoTWVkaWFCcm93c2VyLkVYVFJBX1BBR0UsIC0xKQorICAgICAgICAgICAgICAgICAgICA9PSBvcHRpb25zMi5nZXRJbnQoTWVkaWFCcm93c2VyLkVYVFJBX1BBR0UsIC0xKQorICAgICAgICAgICAgICAgICAgICAmJiBvcHRpb25zMS5nZXRJbnQoTWVkaWFCcm93c2VyLkVYVFJBX1BBR0VfU0laRSwgLTEpCisgICAgICAgICAgICAgICAgICAgID09IG9wdGlvbnMyLmdldEludChNZWRpYUJyb3dzZXIuRVhUUkFfUEFHRV9TSVpFLCAtMSk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBwdWJsaWMgc3RhdGljIGJvb2xlYW4gaGFzRHVwbGljYXRlZEl0ZW1zKEJ1bmRsZSBvcHRpb25zMSwgQnVuZGxlIG9wdGlvbnMyKSB7CisgICAgICAgIGludCBwYWdlMSA9IG9wdGlvbnMxID09IG51bGwgPyAtMSA6IG9wdGlvbnMxLmdldEludChNZWRpYUJyb3dzZXIuRVhUUkFfUEFHRSwgLTEpOworICAgICAgICBpbnQgcGFnZTIgPSBvcHRpb25zMiA9PSBudWxsID8gLTEgOiBvcHRpb25zMi5nZXRJbnQoTWVkaWFCcm93c2VyLkVYVFJBX1BBR0UsIC0xKTsKKyAgICAgICAgaW50IHBhZ2VTaXplMSA9IG9wdGlvbnMxID09IG51bGwgPyAtMSA6IG9wdGlvbnMxLmdldEludChNZWRpYUJyb3dzZXIuRVhUUkFfUEFHRV9TSVpFLCAtMSk7CisgICAgICAgIGludCBwYWdlU2l6ZTIgPSBvcHRpb25zMiA9PSBudWxsID8gLTEgOiBvcHRpb25zMi5nZXRJbnQoTWVkaWFCcm93c2VyLkVYVFJBX1BBR0VfU0laRSwgLTEpOworCisgICAgICAgIGludCBzdGFydEluZGV4MSwgc3RhcnRJbmRleDIsIGVuZEluZGV4MSwgZW5kSW5kZXgyOworICAgICAgICBpZiAocGFnZTEgPT0gLTEgfHwgcGFnZVNpemUxID09IC0xKSB7CisgICAgICAgICAgICBzdGFydEluZGV4MSA9IDA7CisgICAgICAgICAgICBlbmRJbmRleDEgPSBJbnRlZ2VyLk1BWF9WQUxVRTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHN0YXJ0SW5kZXgxID0gcGFnZVNpemUxICogcGFnZTE7CisgICAgICAgICAgICBlbmRJbmRleDEgPSBzdGFydEluZGV4MSArIHBhZ2VTaXplMSAtIDE7CisgICAgICAgIH0KKworICAgICAgICBpZiAocGFnZTIgPT0gLTEgfHwgcGFnZVNpemUyID09IC0xKSB7CisgICAgICAgICAgICBzdGFydEluZGV4MiA9IDA7CisgICAgICAgICAgICBlbmRJbmRleDIgPSBJbnRlZ2VyLk1BWF9WQUxVRTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHN0YXJ0SW5kZXgyID0gcGFnZVNpemUyICogcGFnZTI7CisgICAgICAgICAgICBlbmRJbmRleDIgPSBzdGFydEluZGV4MiArIHBhZ2VTaXplMiAtIDE7CisgICAgICAgIH0KKworICAgICAgICBpZiAoc3RhcnRJbmRleDEgPD0gc3RhcnRJbmRleDIgJiYgc3RhcnRJbmRleDIgPD0gZW5kSW5kZXgxKSB7CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfSBlbHNlIGlmIChzdGFydEluZGV4MSA8PSBlbmRJbmRleDIgJiYgZW5kSW5kZXgyIDw9IGVuZEluZGV4MSkgeworICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KK30KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL01lZGlhQ29tcG9uZW50cy9hcGV4L2phdmEvYW5kcm9pZC9tZWRpYS9zZXNzaW9uL0lBY3RpdmVTZXNzaW9uc0xpc3RlbmVyLmFpZGwgYi9wYWNrYWdlcy9NZWRpYUNvbXBvbmVudHMvYXBleC9qYXZhL2FuZHJvaWQvbWVkaWEvc2Vzc2lvbi9JQWN0aXZlU2Vzc2lvbnNMaXN0ZW5lci5haWRsCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRiOWU0YmQKLS0tIC9kZXYvbnVsbAorKysgYi9wYWNrYWdlcy9NZWRpYUNvbXBvbmVudHMvYXBleC9qYXZhL2FuZHJvaWQvbWVkaWEvc2Vzc2lvbi9JQWN0aXZlU2Vzc2lvbnNMaXN0ZW5lci5haWRsCkBAIC0wLDAgKzEsMjYgQEAKKy8qIENvcHlyaWdodCAoQykgMjAxNCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCisKK3BhY2thZ2UgYW5kcm9pZC5tZWRpYS5zZXNzaW9uOworCitpbXBvcnQgYW5kcm9pZC5tZWRpYS5zZXNzaW9uLk1lZGlhU2Vzc2lvbjsKKworLyoqCisgKiBMaXN0ZW5zIGZvciBjaGFuZ2VzIHRvIHRoZSBsaXN0IG9mIGFjdGl2ZSBzZXNzaW9ucy4KKyAqIEBoaWRlCisgKi8KK29uZXdheSBpbnRlcmZhY2UgSUFjdGl2ZVNlc3Npb25zTGlzdGVuZXIgeworICAgIHZvaWQgb25BY3RpdmVTZXNzaW9uc0NoYW5nZWQoaW4gTGlzdDxNZWRpYVNlc3Npb24uVG9rZW4+IHNlc3Npb25zKTsKK30KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL01lZGlhQ29tcG9uZW50cy9hcGV4L2phdmEvYW5kcm9pZC9tZWRpYS9zZXNzaW9uL0lDYWxsYmFjay5haWRsIGIvcGFja2FnZXMvTWVkaWFDb21wb25lbnRzL2FwZXgvamF2YS9hbmRyb2lkL21lZGlhL3Nlc3Npb24vSUNhbGxiYWNrLmFpZGwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzIyYmZmYQotLS0gL2Rldi9udWxsCisrKyBiL3BhY2thZ2VzL01lZGlhQ29tcG9uZW50cy9hcGV4L2phdmEvYW5kcm9pZC9tZWRpYS9zZXNzaW9uL0lDYWxsYmFjay5haWRsCkBAIC0wLDAgKzEsMzUgQEAKKy8qIENvcHlyaWdodCAoQykgMjAxNiBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCisKK3BhY2thZ2UgYW5kcm9pZC5tZWRpYS5zZXNzaW9uOworCitpbXBvcnQgYW5kcm9pZC5hcHAuUGVuZGluZ0ludGVudDsKK2ltcG9ydCBhbmRyb2lkLmNvbnRlbnQuQ29tcG9uZW50TmFtZTsKK2ltcG9ydCBhbmRyb2lkLm1lZGlhLnNlc3Npb24uTWVkaWFTZXNzaW9uOworaW1wb3J0IGFuZHJvaWQudmlldy5LZXlFdmVudDsKKworLyoqCisgKiBAaGlkZQorICovCitvbmV3YXkgaW50ZXJmYWNlIElDYWxsYmFjayB7CisgICAgdm9pZCBvbk1lZGlhS2V5RXZlbnREaXNwYXRjaGVkVG9NZWRpYVNlc3Npb24oaW4gS2V5RXZlbnQgZXZlbnQsCisgICAgICAgICAgICBpbiBNZWRpYVNlc3Npb24uVG9rZW4gc2Vzc2lvblRva2VuKTsKKyAgICB2b2lkIG9uTWVkaWFLZXlFdmVudERpc3BhdGNoZWRUb01lZGlhQnV0dG9uUmVjZWl2ZXIoaW4gS2V5RXZlbnQgZXZlbnQsCisgICAgICAgICAgICBpbiBDb21wb25lbnROYW1lIG1lZGlhQnV0dG9uUmVjZWl2ZXIpOworCisgICAgdm9pZCBvbkFkZHJlc3NlZFBsYXllckNoYW5nZWRUb01lZGlhU2Vzc2lvbihpbiBNZWRpYVNlc3Npb24uVG9rZW4gc2Vzc2lvblRva2VuKTsKKyAgICB2b2lkIG9uQWRkcmVzc2VkUGxheWVyQ2hhbmdlZFRvTWVkaWFCdXR0b25SZWNlaXZlcihpbiBDb21wb25lbnROYW1lIG1lZGlhQnV0dG9uUmVjZWl2ZXIpOworfQorCmRpZmYgLS1naXQgYS9wYWNrYWdlcy9NZWRpYUNvbXBvbmVudHMvYXBleC9qYXZhL2FuZHJvaWQvbWVkaWEvc2Vzc2lvbi9JT25NZWRpYUtleUxpc3RlbmVyLmFpZGwgYi9wYWNrYWdlcy9NZWRpYUNvbXBvbmVudHMvYXBleC9qYXZhL2FuZHJvaWQvbWVkaWEvc2Vzc2lvbi9JT25NZWRpYUtleUxpc3RlbmVyLmFpZGwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWE5OGVhMwotLS0gL2Rldi9udWxsCisrKyBiL3BhY2thZ2VzL01lZGlhQ29tcG9uZW50cy9hcGV4L2phdmEvYW5kcm9pZC9tZWRpYS9zZXNzaW9uL0lPbk1lZGlhS2V5TGlzdGVuZXIuYWlkbApAQCAtMCwwICsxLDI4IEBACisvKiBDb3B5cmlnaHQgKEMpIDIwMTYgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworCitwYWNrYWdlIGFuZHJvaWQubWVkaWEuc2Vzc2lvbjsKKworaW1wb3J0IGFuZHJvaWQub3MuUmVzdWx0UmVjZWl2ZXI7CitpbXBvcnQgYW5kcm9pZC52aWV3LktleUV2ZW50OworCisvKioKKyAqIExpc3RlbmVyIHRvIGhhbmRsZSBtZWRpYSBrZXkuCisgKiBAaGlkZQorICovCitvbmV3YXkgaW50ZXJmYWNlIElPbk1lZGlhS2V5TGlzdGVuZXIgeworICAgIHZvaWQgb25NZWRpYUtleShpbiBLZXlFdmVudCBldmVudCwgaW4gUmVzdWx0UmVjZWl2ZXIgcmVzdWx0KTsKK30KKwpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvTWVkaWFDb21wb25lbnRzL2FwZXgvamF2YS9hbmRyb2lkL21lZGlhL3Nlc3Npb24vSU9uVm9sdW1lS2V5TG9uZ1ByZXNzTGlzdGVuZXIuYWlkbCBiL3BhY2thZ2VzL01lZGlhQ29tcG9uZW50cy9hcGV4L2phdmEvYW5kcm9pZC9tZWRpYS9zZXNzaW9uL0lPblZvbHVtZUtleUxvbmdQcmVzc0xpc3RlbmVyLmFpZGwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDdiODM0NwotLS0gL2Rldi9udWxsCisrKyBiL3BhY2thZ2VzL01lZGlhQ29tcG9uZW50cy9hcGV4L2phdmEvYW5kcm9pZC9tZWRpYS9zZXNzaW9uL0lPblZvbHVtZUtleUxvbmdQcmVzc0xpc3RlbmVyLmFpZGwKQEAgLTAsMCArMSwyNyBAQAorLyogQ29weXJpZ2h0IChDKSAyMDE2IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KKworcGFja2FnZSBhbmRyb2lkLm1lZGlhLnNlc3Npb247CisKK2ltcG9ydCBhbmRyb2lkLnZpZXcuS2V5RXZlbnQ7CisKKy8qKgorICogTGlzdGVuZXIgdG8gaGFuZGxlIHZvbHVtZSBrZXkgbG9uZy1wcmVzcy4KKyAqIEBoaWRlCisgKi8KK29uZXdheSBpbnRlcmZhY2UgSU9uVm9sdW1lS2V5TG9uZ1ByZXNzTGlzdGVuZXIgeworICAgIHZvaWQgb25Wb2x1bWVLZXlMb25nUHJlc3MoaW4gS2V5RXZlbnQgZXZlbnQpOworfQorCmRpZmYgLS1naXQgYS9wYWNrYWdlcy9NZWRpYUNvbXBvbmVudHMvYXBleC9qYXZhL2FuZHJvaWQvbWVkaWEvc2Vzc2lvbi9JU2Vzc2lvbi5haWRsIGIvcGFja2FnZXMvTWVkaWFDb21wb25lbnRzL2FwZXgvamF2YS9hbmRyb2lkL21lZGlhL3Nlc3Npb24vSVNlc3Npb24uYWlkbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jYmQ5M2NiCi0tLSAvZGV2L251bGwKKysrIGIvcGFja2FnZXMvTWVkaWFDb21wb25lbnRzL2FwZXgvamF2YS9hbmRyb2lkL21lZGlhL3Nlc3Npb24vSVNlc3Npb24uYWlkbApAQCAtMCwwICsxLDU1IEBACisvKiBDb3B5cmlnaHQgKEMpIDIwMTQgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworCitwYWNrYWdlIGFuZHJvaWQubWVkaWEuc2Vzc2lvbjsKKworaW1wb3J0IGFuZHJvaWQuYXBwLlBlbmRpbmdJbnRlbnQ7CitpbXBvcnQgYW5kcm9pZC5jb250ZW50LnBtLlBhcmNlbGVkTGlzdFNsaWNlOworLy9pbXBvcnQgYW5kcm9pZC5tZWRpYS5BdWRpb0F0dHJpYnV0ZXM7CitpbXBvcnQgYW5kcm9pZC5tZWRpYS5NZWRpYU1ldGFkYXRhOworaW1wb3J0IGFuZHJvaWQubWVkaWEuc2Vzc2lvbi5JU2Vzc2lvbkNvbnRyb2xsZXI7CitpbXBvcnQgYW5kcm9pZC5tZWRpYS5zZXNzaW9uLlBsYXliYWNrU3RhdGU7CitpbXBvcnQgYW5kcm9pZC5tZWRpYS5zZXNzaW9uLk1lZGlhU2Vzc2lvbjsKK2ltcG9ydCBhbmRyb2lkLm9zLkJ1bmRsZTsKK2ltcG9ydCBhbmRyb2lkLm9zLlJlc3VsdFJlY2VpdmVyOworCisvKioKKyAqIEludGVyZmFjZSB0byBhIE1lZGlhU2Vzc2lvbiBpbiB0aGUgc3lzdGVtLgorICogQGhpZGUKKyAqLworaW50ZXJmYWNlIElTZXNzaW9uIHsKKyAgICB2b2lkIHNlbmRFdmVudChTdHJpbmcgZXZlbnQsIGluIEJ1bmRsZSBkYXRhKTsKKyAgICBJU2Vzc2lvbkNvbnRyb2xsZXIgZ2V0Q29udHJvbGxlcigpOworICAgIHZvaWQgc2V0RmxhZ3MoaW50IGZsYWdzKTsKKyAgICB2b2lkIHNldEFjdGl2ZShib29sZWFuIGFjdGl2ZSk7CisgICAgdm9pZCBzZXRNZWRpYUJ1dHRvblJlY2VpdmVyKGluIFBlbmRpbmdJbnRlbnQgbWJyKTsKKyAgICB2b2lkIHNldExhdW5jaFBlbmRpbmdJbnRlbnQoaW4gUGVuZGluZ0ludGVudCBwaSk7CisgICAgdm9pZCBkZXN0cm95KCk7CisKKyAgICAvLyBUaGVzZSBjb21tYW5kcyBhcmUgZm9yIHRoZSBUcmFuc3BvcnRQZXJmb3JtZXIKKyAgICB2b2lkIHNldE1ldGFkYXRhKGluIE1lZGlhTWV0YWRhdGEgbWV0YWRhdGEpOworICAgIHZvaWQgc2V0UGxheWJhY2tTdGF0ZShpbiBQbGF5YmFja1N0YXRlIHN0YXRlKTsKKyAgICAvL1RPRE8oYi8xMTk3NTA4MDcpOiBSZXNvbHZlIGhpZGRlbiBBUEkgdXNhZ2UgUGFyY2VsZWRMaXN0U2xpY2UuCisgICAgLy92b2lkIHNldFF1ZXVlKGluIFBhcmNlbGVkTGlzdFNsaWNlIHF1ZXVlKTsKKyAgICB2b2lkIHNldFF1ZXVlVGl0bGUoQ2hhclNlcXVlbmNlIHRpdGxlKTsKKyAgICB2b2lkIHNldEV4dHJhcyhpbiBCdW5kbGUgZXh0cmFzKTsKKyAgICB2b2lkIHNldFJhdGluZ1R5cGUoaW50IHR5cGUpOworCisgICAgLy8gVGhlc2UgY29tbWFuZHMgcmVsYXRlIHRvIHZvbHVtZSBoYW5kbGluZworICAgIC8vVE9ETyhiLzExOTc1MTU5Mik6IERlY2lkZSBpZiBBdWRpb0F0dHJpYnV0ZXMgc2hvdWxkIGJlIHVwZGF0ZWQuCisgICAgLy92b2lkIHNldFBsYXliYWNrVG9Mb2NhbChpbiBBdWRpb0F0dHJpYnV0ZXMgYXR0cmlidXRlcyk7CisgICAgdm9pZCBzZXRQbGF5YmFja1RvUmVtb3RlKGludCBjb250cm9sLCBpbnQgbWF4KTsKKyAgICB2b2lkIHNldEN1cnJlbnRWb2x1bWUoaW50IGN1cnJlbnRWb2x1bWUpOworfQpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvTWVkaWFDb21wb25lbnRzL2FwZXgvamF2YS9hbmRyb2lkL21lZGlhL3Nlc3Npb24vSVNlc3Npb25DYWxsYmFjay5haWRsIGIvcGFja2FnZXMvTWVkaWFDb21wb25lbnRzL2FwZXgvamF2YS9hbmRyb2lkL21lZGlhL3Nlc3Npb24vSVNlc3Npb25DYWxsYmFjay5haWRsCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYyNjMzOGQKLS0tIC9kZXYvbnVsbAorKysgYi9wYWNrYWdlcy9NZWRpYUNvbXBvbmVudHMvYXBleC9qYXZhL2FuZHJvaWQvbWVkaWEvc2Vzc2lvbi9JU2Vzc2lvbkNhbGxiYWNrLmFpZGwKQEAgLTAsMCArMSw3MSBAQAorLyogQ29weXJpZ2h0IChDKSAyMDE0IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KKworcGFja2FnZSBhbmRyb2lkLm1lZGlhLnNlc3Npb247CisKK2ltcG9ydCBhbmRyb2lkLmNvbnRlbnQuSW50ZW50OworaW1wb3J0IGFuZHJvaWQubWVkaWEuUmF0aW5nOworaW1wb3J0IGFuZHJvaWQubWVkaWEuc2Vzc2lvbi5JU2Vzc2lvbkNvbnRyb2xsZXJDYWxsYmFjazsKK2ltcG9ydCBhbmRyb2lkLm5ldC5Vcmk7CitpbXBvcnQgYW5kcm9pZC5vcy5CdW5kbGU7CitpbXBvcnQgYW5kcm9pZC5vcy5SZXN1bHRSZWNlaXZlcjsKKworLyoqCisgKiBAaGlkZQorICovCitvbmV3YXkgaW50ZXJmYWNlIElTZXNzaW9uQ2FsbGJhY2sgeworICAgIHZvaWQgb25Db21tYW5kKFN0cmluZyBwYWNrYWdlTmFtZSwgaW50IHBpZCwgaW50IHVpZCwgSVNlc3Npb25Db250cm9sbGVyQ2FsbGJhY2sgY2FsbGVyLAorICAgICAgICAgICAgU3RyaW5nIGNvbW1hbmQsIGluIEJ1bmRsZSBhcmdzLCBpbiBSZXN1bHRSZWNlaXZlciBjYik7CisgICAgdm9pZCBvbk1lZGlhQnV0dG9uKFN0cmluZyBwYWNrYWdlTmFtZSwgaW50IHBpZCwgaW50IHVpZCwgaW4gSW50ZW50IG1lZGlhQnV0dG9uSW50ZW50LAorICAgICAgICAgICAgaW50IHNlcXVlbmNlTnVtYmVyLCBpbiBSZXN1bHRSZWNlaXZlciBjYik7CisgICAgdm9pZCBvbk1lZGlhQnV0dG9uRnJvbUNvbnRyb2xsZXIoU3RyaW5nIHBhY2thZ2VOYW1lLCBpbnQgcGlkLCBpbnQgdWlkLAorICAgICAgICAgICAgSVNlc3Npb25Db250cm9sbGVyQ2FsbGJhY2sgY2FsbGVyLCBpbiBJbnRlbnQgbWVkaWFCdXR0b25JbnRlbnQpOworCisgICAgLy8gVGhlc2UgY2FsbGJhY2tzIGFyZSBmb3IgdGhlIFRyYW5zcG9ydFBlcmZvcm1lcgorICAgIHZvaWQgb25QcmVwYXJlKFN0cmluZyBwYWNrYWdlTmFtZSwgaW50IHBpZCwgaW50IHVpZCwgSVNlc3Npb25Db250cm9sbGVyQ2FsbGJhY2sgY2FsbGVyKTsKKyAgICB2b2lkIG9uUHJlcGFyZUZyb21NZWRpYUlkKFN0cmluZyBwYWNrYWdlTmFtZSwgaW50IHBpZCwgaW50IHVpZCwKKyAgICAgICAgICAgIElTZXNzaW9uQ29udHJvbGxlckNhbGxiYWNrIGNhbGxlciwgU3RyaW5nIG1lZGlhSWQsIGluIEJ1bmRsZSBleHRyYXMpOworICAgIHZvaWQgb25QcmVwYXJlRnJvbVNlYXJjaChTdHJpbmcgcGFja2FnZU5hbWUsIGludCBwaWQsIGludCB1aWQsCisgICAgICAgICAgICBJU2Vzc2lvbkNvbnRyb2xsZXJDYWxsYmFjayBjYWxsZXIsIFN0cmluZyBxdWVyeSwgaW4gQnVuZGxlIGV4dHJhcyk7CisgICAgdm9pZCBvblByZXBhcmVGcm9tVXJpKFN0cmluZyBwYWNrYWdlTmFtZSwgaW50IHBpZCwgaW50IHVpZCwgSVNlc3Npb25Db250cm9sbGVyQ2FsbGJhY2sgY2FsbGVyLAorICAgICAgICAgICAgaW4gVXJpIHVyaSwgaW4gQnVuZGxlIGV4dHJhcyk7CisgICAgdm9pZCBvblBsYXkoU3RyaW5nIHBhY2thZ2VOYW1lLCBpbnQgcGlkLCBpbnQgdWlkLCBJU2Vzc2lvbkNvbnRyb2xsZXJDYWxsYmFjayBjYWxsZXIpOworICAgIHZvaWQgb25QbGF5RnJvbU1lZGlhSWQoU3RyaW5nIHBhY2thZ2VOYW1lLCBpbnQgcGlkLCBpbnQgdWlkLCBJU2Vzc2lvbkNvbnRyb2xsZXJDYWxsYmFjayBjYWxsZXIsCisgICAgICAgICAgICBTdHJpbmcgbWVkaWFJZCwgaW4gQnVuZGxlIGV4dHJhcyk7CisgICAgdm9pZCBvblBsYXlGcm9tU2VhcmNoKFN0cmluZyBwYWNrYWdlTmFtZSwgaW50IHBpZCwgaW50IHVpZCwgSVNlc3Npb25Db250cm9sbGVyQ2FsbGJhY2sgY2FsbGVyLAorICAgICAgICAgICAgU3RyaW5nIHF1ZXJ5LCBpbiBCdW5kbGUgZXh0cmFzKTsKKyAgICB2b2lkIG9uUGxheUZyb21VcmkoU3RyaW5nIHBhY2thZ2VOYW1lLCBpbnQgcGlkLCBpbnQgdWlkLCBJU2Vzc2lvbkNvbnRyb2xsZXJDYWxsYmFjayBjYWxsZXIsCisgICAgICAgICAgICBpbiBVcmkgdXJpLCBpbiBCdW5kbGUgZXh0cmFzKTsKKyAgICB2b2lkIG9uU2tpcFRvVHJhY2soU3RyaW5nIHBhY2thZ2VOYW1lLCBpbnQgcGlkLCBpbnQgdWlkLCBJU2Vzc2lvbkNvbnRyb2xsZXJDYWxsYmFjayBjYWxsZXIsCisgICAgICAgICAgICBsb25nIGlkKTsKKyAgICB2b2lkIG9uUGF1c2UoU3RyaW5nIHBhY2thZ2VOYW1lLCBpbnQgcGlkLCBpbnQgdWlkLCBJU2Vzc2lvbkNvbnRyb2xsZXJDYWxsYmFjayBjYWxsZXIpOworICAgIHZvaWQgb25TdG9wKFN0cmluZyBwYWNrYWdlTmFtZSwgaW50IHBpZCwgaW50IHVpZCwgSVNlc3Npb25Db250cm9sbGVyQ2FsbGJhY2sgY2FsbGVyKTsKKyAgICB2b2lkIG9uTmV4dChTdHJpbmcgcGFja2FnZU5hbWUsIGludCBwaWQsIGludCB1aWQsIElTZXNzaW9uQ29udHJvbGxlckNhbGxiYWNrIGNhbGxlcik7CisgICAgdm9pZCBvblByZXZpb3VzKFN0cmluZyBwYWNrYWdlTmFtZSwgaW50IHBpZCwgaW50IHVpZCwgSVNlc3Npb25Db250cm9sbGVyQ2FsbGJhY2sgY2FsbGVyKTsKKyAgICB2b2lkIG9uRmFzdEZvcndhcmQoU3RyaW5nIHBhY2thZ2VOYW1lLCBpbnQgcGlkLCBpbnQgdWlkLCBJU2Vzc2lvbkNvbnRyb2xsZXJDYWxsYmFjayBjYWxsZXIpOworICAgIHZvaWQgb25SZXdpbmQoU3RyaW5nIHBhY2thZ2VOYW1lLCBpbnQgcGlkLCBpbnQgdWlkLCBJU2Vzc2lvbkNvbnRyb2xsZXJDYWxsYmFjayBjYWxsZXIpOworICAgIHZvaWQgb25TZWVrVG8oU3RyaW5nIHBhY2thZ2VOYW1lLCBpbnQgcGlkLCBpbnQgdWlkLCBJU2Vzc2lvbkNvbnRyb2xsZXJDYWxsYmFjayBjYWxsZXIsCisgICAgICAgICAgICBsb25nIHBvcyk7CisgICAgdm9pZCBvblJhdGUoU3RyaW5nIHBhY2thZ2VOYW1lLCBpbnQgcGlkLCBpbnQgdWlkLCBJU2Vzc2lvbkNvbnRyb2xsZXJDYWxsYmFjayBjYWxsZXIsCisgICAgICAgICAgICBpbiBSYXRpbmcgcmF0aW5nKTsKKyAgICB2b2lkIG9uQ3VzdG9tQWN0aW9uKFN0cmluZyBwYWNrYWdlTmFtZSwgaW50IHBpZCwgaW50IHVpZCwgSVNlc3Npb25Db250cm9sbGVyQ2FsbGJhY2sgY2FsbGVyLAorICAgICAgICAgICAgU3RyaW5nIGFjdGlvbiwgaW4gQnVuZGxlIGFyZ3MpOworCisgICAgLy8gVGhlc2UgY2FsbGJhY2tzIGFyZSBmb3Igdm9sdW1lIGhhbmRsaW5nCisgICAgdm9pZCBvbkFkanVzdFZvbHVtZShTdHJpbmcgcGFja2FnZU5hbWUsIGludCBwaWQsIGludCB1aWQsIElTZXNzaW9uQ29udHJvbGxlckNhbGxiYWNrIGNhbGxlciwKKyAgICAgICAgICAgIGludCBkaXJlY3Rpb24pOworICAgIHZvaWQgb25TZXRWb2x1bWVUbyhTdHJpbmcgcGFja2FnZU5hbWUsIGludCBwaWQsIGludCB1aWQsCisgICAgICAgICAgICBJU2Vzc2lvbkNvbnRyb2xsZXJDYWxsYmFjayBjYWxsZXIsIGludCB2YWx1ZSk7Cit9CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9NZWRpYUNvbXBvbmVudHMvYXBleC9qYXZhL2FuZHJvaWQvbWVkaWEvc2Vzc2lvbi9JU2Vzc2lvbkNvbnRyb2xsZXIuYWlkbCBiL3BhY2thZ2VzL01lZGlhQ29tcG9uZW50cy9hcGV4L2phdmEvYW5kcm9pZC9tZWRpYS9zZXNzaW9uL0lTZXNzaW9uQ29udHJvbGxlci5haWRsCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAzMWEzODgKLS0tIC9kZXYvbnVsbAorKysgYi9wYWNrYWdlcy9NZWRpYUNvbXBvbmVudHMvYXBleC9qYXZhL2FuZHJvaWQvbWVkaWEvc2Vzc2lvbi9JU2Vzc2lvbkNvbnRyb2xsZXIuYWlkbApAQCAtMCwwICsxLDg5IEBACisvKiBDb3B5cmlnaHQgKEMpIDIwMTQgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworCitwYWNrYWdlIGFuZHJvaWQubWVkaWEuc2Vzc2lvbjsKKworaW1wb3J0IGFuZHJvaWQuYXBwLlBlbmRpbmdJbnRlbnQ7CitpbXBvcnQgYW5kcm9pZC5jb250ZW50LkludGVudDsKKy8vaW1wb3J0IGFuZHJvaWQuY29udGVudC5wbS5QYXJjZWxlZExpc3RTbGljZTsKK2ltcG9ydCBhbmRyb2lkLm1lZGlhLk1lZGlhTWV0YWRhdGE7CitpbXBvcnQgYW5kcm9pZC5tZWRpYS5SYXRpbmc7CitpbXBvcnQgYW5kcm9pZC5tZWRpYS5zZXNzaW9uLklTZXNzaW9uQ29udHJvbGxlckNhbGxiYWNrOworaW1wb3J0IGFuZHJvaWQubWVkaWEuc2Vzc2lvbi5NZWRpYVNlc3Npb247CitpbXBvcnQgYW5kcm9pZC5tZWRpYS5zZXNzaW9uLlBhcmNlbGFibGVWb2x1bWVJbmZvOworaW1wb3J0IGFuZHJvaWQubWVkaWEuc2Vzc2lvbi5QbGF5YmFja1N0YXRlOworaW1wb3J0IGFuZHJvaWQubmV0LlVyaTsKK2ltcG9ydCBhbmRyb2lkLm9zLkJ1bmRsZTsKK2ltcG9ydCBhbmRyb2lkLm9zLlJlc3VsdFJlY2VpdmVyOworaW1wb3J0IGFuZHJvaWQudmlldy5LZXlFdmVudDsKKworaW1wb3J0IGphdmEudXRpbC5MaXN0OworCisvKioKKyAqIEludGVyZmFjZSB0byBNZWRpYVNlc3Npb25SZWNvcmQgaW4gdGhlIHN5c3RlbS4KKyAqIEBoaWRlCisgKi8KK2ludGVyZmFjZSBJU2Vzc2lvbkNvbnRyb2xsZXIgeworICAgIHZvaWQgc2VuZENvbW1hbmQoU3RyaW5nIHBhY2thZ2VOYW1lLCBJU2Vzc2lvbkNvbnRyb2xsZXJDYWxsYmFjayBjYWxsZXIsCisgICAgICAgICAgICBTdHJpbmcgY29tbWFuZCwgaW4gQnVuZGxlIGFyZ3MsIGluIFJlc3VsdFJlY2VpdmVyIGNiKTsKKyAgICBib29sZWFuIHNlbmRNZWRpYUJ1dHRvbihTdHJpbmcgcGFja2FnZU5hbWUsIElTZXNzaW9uQ29udHJvbGxlckNhbGxiYWNrIGNhbGxlciwKKyAgICAgICAgICAgIGJvb2xlYW4gYXNTeXN0ZW1TZXJ2aWNlLCBpbiBLZXlFdmVudCBtZWRpYUJ1dHRvbik7CisgICAgdm9pZCByZWdpc3RlckNhbGxiYWNrTGlzdGVuZXIoU3RyaW5nIHBhY2thZ2VOYW1lLCBJU2Vzc2lvbkNvbnRyb2xsZXJDYWxsYmFjayBjYik7CisgICAgdm9pZCB1bnJlZ2lzdGVyQ2FsbGJhY2tMaXN0ZW5lcihJU2Vzc2lvbkNvbnRyb2xsZXJDYWxsYmFjayBjYik7CisgICAgYm9vbGVhbiBpc1RyYW5zcG9ydENvbnRyb2xFbmFibGVkKCk7CisgICAgU3RyaW5nIGdldFBhY2thZ2VOYW1lKCk7CisgICAgU3RyaW5nIGdldFRhZygpOworICAgIFBlbmRpbmdJbnRlbnQgZ2V0TGF1bmNoUGVuZGluZ0ludGVudCgpOworICAgIGxvbmcgZ2V0RmxhZ3MoKTsKKyAgICBQYXJjZWxhYmxlVm9sdW1lSW5mbyBnZXRWb2x1bWVBdHRyaWJ1dGVzKCk7CisgICAgdm9pZCBhZGp1c3RWb2x1bWUoU3RyaW5nIHBhY2thZ2VOYW1lLCBJU2Vzc2lvbkNvbnRyb2xsZXJDYWxsYmFjayBjYWxsZXIsCisgICAgICAgICAgICBib29sZWFuIGFzU3lzdGVtU2VydmljZSwgaW50IGRpcmVjdGlvbiwgaW50IGZsYWdzKTsKKyAgICB2b2lkIHNldFZvbHVtZVRvKFN0cmluZyBwYWNrYWdlTmFtZSwgSVNlc3Npb25Db250cm9sbGVyQ2FsbGJhY2sgY2FsbGVyLAorICAgICAgICAgICAgaW50IHZhbHVlLCBpbnQgZmxhZ3MpOworCisgICAgLy8gVGhlc2UgY29tbWFuZHMgYXJlIGZvciB0aGUgVHJhbnNwb3J0Q29udHJvbHMKKyAgICB2b2lkIHByZXBhcmUoU3RyaW5nIHBhY2thZ2VOYW1lLCBJU2Vzc2lvbkNvbnRyb2xsZXJDYWxsYmFjayBjYWxsZXIpOworICAgIHZvaWQgcHJlcGFyZUZyb21NZWRpYUlkKFN0cmluZyBwYWNrYWdlTmFtZSwgSVNlc3Npb25Db250cm9sbGVyQ2FsbGJhY2sgY2FsbGVyLAorICAgICAgICAgICAgU3RyaW5nIG1lZGlhSWQsIGluIEJ1bmRsZSBleHRyYXMpOworICAgIHZvaWQgcHJlcGFyZUZyb21TZWFyY2goU3RyaW5nIHBhY2thZ2VOYW1lLCBJU2Vzc2lvbkNvbnRyb2xsZXJDYWxsYmFjayBjYWxsZXIsCisgICAgICAgICAgICBTdHJpbmcgc3RyaW5nLCBpbiBCdW5kbGUgZXh0cmFzKTsKKyAgICB2b2lkIHByZXBhcmVGcm9tVXJpKFN0cmluZyBwYWNrYWdlTmFtZSwgSVNlc3Npb25Db250cm9sbGVyQ2FsbGJhY2sgY2FsbGVyLAorICAgICAgICAgICAgaW4gVXJpIHVyaSwgaW4gQnVuZGxlIGV4dHJhcyk7CisgICAgdm9pZCBwbGF5KFN0cmluZyBwYWNrYWdlTmFtZSwgSVNlc3Npb25Db250cm9sbGVyQ2FsbGJhY2sgY2FsbGVyKTsKKyAgICB2b2lkIHBsYXlGcm9tTWVkaWFJZChTdHJpbmcgcGFja2FnZU5hbWUsIElTZXNzaW9uQ29udHJvbGxlckNhbGxiYWNrIGNhbGxlciwKKyAgICAgICAgICAgIFN0cmluZyBtZWRpYUlkLCBpbiBCdW5kbGUgZXh0cmFzKTsKKyAgICB2b2lkIHBsYXlGcm9tU2VhcmNoKFN0cmluZyBwYWNrYWdlTmFtZSwgSVNlc3Npb25Db250cm9sbGVyQ2FsbGJhY2sgY2FsbGVyLAorICAgICAgICAgICAgU3RyaW5nIHN0cmluZywgaW4gQnVuZGxlIGV4dHJhcyk7CisgICAgdm9pZCBwbGF5RnJvbVVyaShTdHJpbmcgcGFja2FnZU5hbWUsIElTZXNzaW9uQ29udHJvbGxlckNhbGxiYWNrIGNhbGxlciwKKyAgICAgICAgICAgIGluIFVyaSB1cmksIGluIEJ1bmRsZSBleHRyYXMpOworICAgIHZvaWQgc2tpcFRvUXVldWVJdGVtKFN0cmluZyBwYWNrYWdlTmFtZSwgSVNlc3Npb25Db250cm9sbGVyQ2FsbGJhY2sgY2FsbGVyLCBsb25nIGlkKTsKKyAgICB2b2lkIHBhdXNlKFN0cmluZyBwYWNrYWdlTmFtZSwgSVNlc3Npb25Db250cm9sbGVyQ2FsbGJhY2sgY2FsbGVyKTsKKyAgICB2b2lkIHN0b3AoU3RyaW5nIHBhY2thZ2VOYW1lLCBJU2Vzc2lvbkNvbnRyb2xsZXJDYWxsYmFjayBjYWxsZXIpOworICAgIHZvaWQgbmV4dChTdHJpbmcgcGFja2FnZU5hbWUsIElTZXNzaW9uQ29udHJvbGxlckNhbGxiYWNrIGNhbGxlcik7CisgICAgdm9pZCBwcmV2aW91cyhTdHJpbmcgcGFja2FnZU5hbWUsIElTZXNzaW9uQ29udHJvbGxlckNhbGxiYWNrIGNhbGxlcik7CisgICAgdm9pZCBmYXN0Rm9yd2FyZChTdHJpbmcgcGFja2FnZU5hbWUsIElTZXNzaW9uQ29udHJvbGxlckNhbGxiYWNrIGNhbGxlcik7CisgICAgdm9pZCByZXdpbmQoU3RyaW5nIHBhY2thZ2VOYW1lLCBJU2Vzc2lvbkNvbnRyb2xsZXJDYWxsYmFjayBjYWxsZXIpOworICAgIHZvaWQgc2Vla1RvKFN0cmluZyBwYWNrYWdlTmFtZSwgSVNlc3Npb25Db250cm9sbGVyQ2FsbGJhY2sgY2FsbGVyLCBsb25nIHBvcyk7CisgICAgdm9pZCByYXRlKFN0cmluZyBwYWNrYWdlTmFtZSwgSVNlc3Npb25Db250cm9sbGVyQ2FsbGJhY2sgY2FsbGVyLCBpbiBSYXRpbmcgcmF0aW5nKTsKKyAgICB2b2lkIHNlbmRDdXN0b21BY3Rpb24oU3RyaW5nIHBhY2thZ2VOYW1lLCBJU2Vzc2lvbkNvbnRyb2xsZXJDYWxsYmFjayBjYWxsZXIsCisgICAgICAgICAgICBTdHJpbmcgYWN0aW9uLCBpbiBCdW5kbGUgYXJncyk7CisgICAgTWVkaWFNZXRhZGF0YSBnZXRNZXRhZGF0YSgpOworICAgIFBsYXliYWNrU3RhdGUgZ2V0UGxheWJhY2tTdGF0ZSgpOworICAgIC8vVE9ETzooYi8xMTk3NTA4MDcpIFJlc29sdmUgaGlkZGVuIEFQSSB1c2FnZSBQYXJjZWxlZExpc3RTbGljZS4KKyAgICAvL1BhcmNlbGVkTGlzdFNsaWNlIGdldFF1ZXVlKCk7CisgICAgQ2hhclNlcXVlbmNlIGdldFF1ZXVlVGl0bGUoKTsKKyAgICBCdW5kbGUgZ2V0RXh0cmFzKCk7CisgICAgaW50IGdldFJhdGluZ1R5cGUoKTsKK30KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL01lZGlhQ29tcG9uZW50cy9hcGV4L2phdmEvYW5kcm9pZC9tZWRpYS9zZXNzaW9uL0lTZXNzaW9uQ29udHJvbGxlckNhbGxiYWNrLmFpZGwgYi9wYWNrYWdlcy9NZWRpYUNvbXBvbmVudHMvYXBleC9qYXZhL2FuZHJvaWQvbWVkaWEvc2Vzc2lvbi9JU2Vzc2lvbkNvbnRyb2xsZXJDYWxsYmFjay5haWRsCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE3MzUwNGIKLS0tIC9kZXYvbnVsbAorKysgYi9wYWNrYWdlcy9NZWRpYUNvbXBvbmVudHMvYXBleC9qYXZhL2FuZHJvaWQvbWVkaWEvc2Vzc2lvbi9JU2Vzc2lvbkNvbnRyb2xsZXJDYWxsYmFjay5haWRsCkBAIC0wLDAgKzEsNDAgQEAKKy8qIENvcHlyaWdodCAoQykgMjAxNCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCisKK3BhY2thZ2UgYW5kcm9pZC5tZWRpYS5zZXNzaW9uOworCisvL2ltcG9ydCBhbmRyb2lkLmNvbnRlbnQucG0uUGFyY2VsZWRMaXN0U2xpY2U7CitpbXBvcnQgYW5kcm9pZC5tZWRpYS5NZWRpYU1ldGFkYXRhOworaW1wb3J0IGFuZHJvaWQubWVkaWEuc2Vzc2lvbi5QYXJjZWxhYmxlVm9sdW1lSW5mbzsKK2ltcG9ydCBhbmRyb2lkLm1lZGlhLnNlc3Npb24uUGxheWJhY2tTdGF0ZTsKK2ltcG9ydCBhbmRyb2lkLm1lZGlhLnNlc3Npb24uTWVkaWFTZXNzaW9uOworaW1wb3J0IGFuZHJvaWQub3MuQnVuZGxlOworCisvKioKKyAqIEBoaWRlCisgKi8KK29uZXdheSBpbnRlcmZhY2UgSVNlc3Npb25Db250cm9sbGVyQ2FsbGJhY2sgeworICAgIHZvaWQgb25FdmVudChTdHJpbmcgZXZlbnQsIGluIEJ1bmRsZSBleHRyYXMpOworICAgIHZvaWQgb25TZXNzaW9uRGVzdHJveWVkKCk7CisKKyAgICAvLyBUaGVzZSBjYWxsYmFja3MgYXJlIGZvciB0aGUgVHJhbnNwb3J0Q29udHJvbGxlcgorICAgIHZvaWQgb25QbGF5YmFja1N0YXRlQ2hhbmdlZChpbiBQbGF5YmFja1N0YXRlIHN0YXRlKTsKKyAgICB2b2lkIG9uTWV0YWRhdGFDaGFuZ2VkKGluIE1lZGlhTWV0YWRhdGEgbWV0YWRhdGEpOworICAgIC8vVE9ETzooYi8xMTk3NTA4MDcpIFJlc29sdmUgaGlkZGVuIEFQSSB1c2FnZSBQYXJjZWxlZExpc3RTbGljZS4KKyAgICAvL3ZvaWQgb25RdWV1ZUNoYW5nZWQoaW4gUGFyY2VsZWRMaXN0U2xpY2UgcXVldWUpOworICAgIHZvaWQgb25RdWV1ZVRpdGxlQ2hhbmdlZChDaGFyU2VxdWVuY2UgdGl0bGUpOworICAgIHZvaWQgb25FeHRyYXNDaGFuZ2VkKGluIEJ1bmRsZSBleHRyYXMpOworICAgIHZvaWQgb25Wb2x1bWVJbmZvQ2hhbmdlZChpbiBQYXJjZWxhYmxlVm9sdW1lSW5mbyBpbmZvKTsKK30KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL01lZGlhQ29tcG9uZW50cy9hcGV4L2phdmEvYW5kcm9pZC9tZWRpYS9zZXNzaW9uL0lTZXNzaW9uTWFuYWdlci5haWRsIGIvcGFja2FnZXMvTWVkaWFDb21wb25lbnRzL2FwZXgvamF2YS9hbmRyb2lkL21lZGlhL3Nlc3Npb24vSVNlc3Npb25NYW5hZ2VyLmFpZGwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzU3OGMxNgotLS0gL2Rldi9udWxsCisrKyBiL3BhY2thZ2VzL01lZGlhQ29tcG9uZW50cy9hcGV4L2phdmEvYW5kcm9pZC9tZWRpYS9zZXNzaW9uL0lTZXNzaW9uTWFuYWdlci5haWRsCkBAIC0wLDAgKzEsNjYgQEAKKy8qIENvcHlyaWdodCAoQykgMjAxNCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCisKK3BhY2thZ2UgYW5kcm9pZC5tZWRpYS5zZXNzaW9uOworCitpbXBvcnQgYW5kcm9pZC5jb250ZW50LkNvbXBvbmVudE5hbWU7CitpbXBvcnQgYW5kcm9pZC5tZWRpYS5JUmVtb3RlVm9sdW1lQ29udHJvbGxlcjsKK2ltcG9ydCBhbmRyb2lkLm1lZGlhLklTZXNzaW9uVG9rZW5zTGlzdGVuZXI7CitpbXBvcnQgYW5kcm9pZC5tZWRpYS5zZXNzaW9uLklBY3RpdmVTZXNzaW9uc0xpc3RlbmVyOworaW1wb3J0IGFuZHJvaWQubWVkaWEuc2Vzc2lvbi5JQ2FsbGJhY2s7CitpbXBvcnQgYW5kcm9pZC5tZWRpYS5zZXNzaW9uLklPbk1lZGlhS2V5TGlzdGVuZXI7CitpbXBvcnQgYW5kcm9pZC5tZWRpYS5zZXNzaW9uLklPblZvbHVtZUtleUxvbmdQcmVzc0xpc3RlbmVyOworaW1wb3J0IGFuZHJvaWQubWVkaWEuc2Vzc2lvbi5JU2Vzc2lvbjsKK2ltcG9ydCBhbmRyb2lkLm1lZGlhLnNlc3Npb24uSVNlc3Npb25DYWxsYmFjazsKK2ltcG9ydCBhbmRyb2lkLm9zLkJ1bmRsZTsKK2ltcG9ydCBhbmRyb2lkLnZpZXcuS2V5RXZlbnQ7CisKKy8qKgorICogSW50ZXJmYWNlIHRvIHRoZSBNZWRpYVNlc3Npb25NYW5hZ2VyU2VydmljZQorICogQGhpZGUKKyAqLworaW50ZXJmYWNlIElTZXNzaW9uTWFuYWdlciB7CisgICAgSVNlc3Npb24gY3JlYXRlU2Vzc2lvbihTdHJpbmcgcGFja2FnZU5hbWUsIGluIElTZXNzaW9uQ2FsbGJhY2sgY2IsIFN0cmluZyB0YWcsIGludCB1c2VySWQpOworICAgIExpc3Q8SUJpbmRlcj4gZ2V0U2Vzc2lvbnMoaW4gQ29tcG9uZW50TmFtZSBjb21wTmFtZSwgaW50IHVzZXJJZCk7CisgICAgdm9pZCBkaXNwYXRjaE1lZGlhS2V5RXZlbnQoU3RyaW5nIHBhY2thZ2VOYW1lLCBib29sZWFuIGFzU3lzdGVtU2VydmljZSwgaW4gS2V5RXZlbnQga2V5RXZlbnQsCisgICAgICAgICAgICBib29sZWFuIG5lZWRXYWtlTG9jayk7CisgICAgdm9pZCBkaXNwYXRjaFZvbHVtZUtleUV2ZW50KFN0cmluZyBwYWNrYWdlTmFtZSwgYm9vbGVhbiBhc1N5c3RlbVNlcnZpY2UsIGluIEtleUV2ZW50IGtleUV2ZW50LAorICAgICAgICAgICAgaW50IHN0cmVhbSwgYm9vbGVhbiBtdXNpY09ubHkpOworICAgIHZvaWQgZGlzcGF0Y2hBZGp1c3RWb2x1bWUoU3RyaW5nIHBhY2thZ2VOYW1lLCBpbnQgc3VnZ2VzdGVkU3RyZWFtLCBpbnQgZGVsdGEsIGludCBmbGFncyk7CisgICAgdm9pZCBhZGRTZXNzaW9uc0xpc3RlbmVyKGluIElBY3RpdmVTZXNzaW9uc0xpc3RlbmVyIGxpc3RlbmVyLCBpbiBDb21wb25lbnROYW1lIGNvbXBOYW1lLAorICAgICAgICAgICAgaW50IHVzZXJJZCk7CisgICAgdm9pZCByZW1vdmVTZXNzaW9uc0xpc3RlbmVyKGluIElBY3RpdmVTZXNzaW9uc0xpc3RlbmVyIGxpc3RlbmVyKTsKKworICAgIC8vIFRoaXMgaXMgZm9yIHRoZSBzeXN0ZW0gdm9sdW1lIFVJIG9ubHkKKyAgICB2b2lkIHNldFJlbW90ZVZvbHVtZUNvbnRyb2xsZXIoaW4gSVJlbW90ZVZvbHVtZUNvbnRyb2xsZXIgcnZjKTsKKworICAgIC8vIEZvciBQaG9uZVdpbmRvd01hbmFnZXIgdG8gcHJlY2hlY2sgbWVkaWEga2V5cworICAgIGJvb2xlYW4gaXNHbG9iYWxQcmlvcml0eUFjdGl2ZSgpOworCisgICAgdm9pZCBzZXRDYWxsYmFjayhpbiBJQ2FsbGJhY2sgY2FsbGJhY2spOworICAgIHZvaWQgc2V0T25Wb2x1bWVLZXlMb25nUHJlc3NMaXN0ZW5lcihpbiBJT25Wb2x1bWVLZXlMb25nUHJlc3NMaXN0ZW5lciBsaXN0ZW5lcik7CisgICAgdm9pZCBzZXRPbk1lZGlhS2V5TGlzdGVuZXIoaW4gSU9uTWVkaWFLZXlMaXN0ZW5lciBsaXN0ZW5lcik7CisKKyAgICAvLyBNZWRpYVNlc3Npb24yCisgICAgYm9vbGVhbiBpc1RydXN0ZWQoU3RyaW5nIGNvbnRyb2xsZXJQYWNrYWdlTmFtZSwgaW50IGNvbnRyb2xsZXJQaWQsIGludCBjb250cm9sbGVyVWlkKTsKKyAgICBib29sZWFuIGNyZWF0ZVNlc3Npb24yKGluIEJ1bmRsZSBzZXNzaW9uVG9rZW4pOworICAgIHZvaWQgZGVzdHJveVNlc3Npb24yKGluIEJ1bmRsZSBzZXNzaW9uVG9rZW4pOworICAgIExpc3Q8QnVuZGxlPiBnZXRTZXNzaW9uVG9rZW5zKGJvb2xlYW4gYWN0aXZlU2Vzc2lvbk9ubHksIGJvb2xlYW4gc2Vzc2lvblNlcnZpY2VPbmx5LAorICAgICAgICAgICAgU3RyaW5nIHBhY2thZ2VOYW1lKTsKKworICAgIHZvaWQgYWRkU2Vzc2lvblRva2Vuc0xpc3RlbmVyKGluIElTZXNzaW9uVG9rZW5zTGlzdGVuZXIgbGlzdGVuZXIsIGludCB1c2VySWQsCisgICAgICAgICAgICBTdHJpbmcgcGFja2FnZU5hbWUpOworICAgIHZvaWQgcmVtb3ZlU2Vzc2lvblRva2Vuc0xpc3RlbmVyKGluIElTZXNzaW9uVG9rZW5zTGlzdGVuZXIgbGlzdGVuZXIsIFN0cmluZyBwYWNrYWdlTmFtZSk7Cit9CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9NZWRpYUNvbXBvbmVudHMvYXBleC9qYXZhL2FuZHJvaWQvbWVkaWEvc2Vzc2lvbi9NZWRpYUNvbnRyb2xsZXIuamF2YSBiL3BhY2thZ2VzL01lZGlhQ29tcG9uZW50cy9hcGV4L2phdmEvYW5kcm9pZC9tZWRpYS9zZXNzaW9uL01lZGlhQ29udHJvbGxlci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFmMjkxODUKLS0tIC9kZXYvbnVsbAorKysgYi9wYWNrYWdlcy9NZWRpYUNvbXBvbmVudHMvYXBleC9qYXZhL2FuZHJvaWQvbWVkaWEvc2Vzc2lvbi9NZWRpYUNvbnRyb2xsZXIuamF2YQpAQCAtMCwwICsxLDEyMDAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworCitwYWNrYWdlIGFuZHJvaWQubWVkaWEuc2Vzc2lvbjsKKworaW1wb3J0IGFuZHJvaWQuYW5ub3RhdGlvbi5Ob25OdWxsOworaW1wb3J0IGFuZHJvaWQuYW5ub3RhdGlvbi5OdWxsYWJsZTsKK2ltcG9ydCBhbmRyb2lkLmFubm90YXRpb24uVW5zdXBwb3J0ZWRBcHBVc2FnZTsKK2ltcG9ydCBhbmRyb2lkLmFwcC5QZW5kaW5nSW50ZW50OworaW1wb3J0IGFuZHJvaWQuY29udGVudC5Db250ZXh0OworLy9pbXBvcnQgYW5kcm9pZC5jb250ZW50LnBtLlBhcmNlbGVkTGlzdFNsaWNlOworaW1wb3J0IGFuZHJvaWQubWVkaWEuQXVkaW9BdHRyaWJ1dGVzOworaW1wb3J0IGFuZHJvaWQubWVkaWEuQXVkaW9NYW5hZ2VyOworaW1wb3J0IGFuZHJvaWQubWVkaWEuTWVkaWFNZXRhZGF0YTsKK2ltcG9ydCBhbmRyb2lkLm1lZGlhLlJhdGluZzsKK2ltcG9ydCBhbmRyb2lkLm1lZGlhLlZvbHVtZVByb3ZpZGVyOworaW1wb3J0IGFuZHJvaWQubmV0LlVyaTsKK2ltcG9ydCBhbmRyb2lkLm9zLkJ1bmRsZTsKK2ltcG9ydCBhbmRyb2lkLm9zLkhhbmRsZXI7CitpbXBvcnQgYW5kcm9pZC5vcy5Mb29wZXI7CitpbXBvcnQgYW5kcm9pZC5vcy5NZXNzYWdlOworaW1wb3J0IGFuZHJvaWQub3MuUmVtb3RlRXhjZXB0aW9uOworaW1wb3J0IGFuZHJvaWQub3MuUmVzdWx0UmVjZWl2ZXI7CitpbXBvcnQgYW5kcm9pZC50ZXh0LlRleHRVdGlsczsKK2ltcG9ydCBhbmRyb2lkLnV0aWwuTG9nOworaW1wb3J0IGFuZHJvaWQudmlldy5LZXlFdmVudDsKKworaW1wb3J0IGphdmEubGFuZy5yZWYuV2Vha1JlZmVyZW5jZTsKK2ltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OworaW1wb3J0IGphdmEudXRpbC5MaXN0OworCisvKioKKyAqIEFsbG93cyBhbiBhcHAgdG8gaW50ZXJhY3Qgd2l0aCBhbiBvbmdvaW5nIG1lZGlhIHNlc3Npb24uIE1lZGlhIGJ1dHRvbnMgYW5kCisgKiBvdGhlciBjb21tYW5kcyBjYW4gYmUgc2VudCB0byB0aGUgc2Vzc2lvbi4gQSBjYWxsYmFjayBtYXkgYmUgcmVnaXN0ZXJlZCB0bworICogcmVjZWl2ZSB1cGRhdGVzIGZyb20gdGhlIHNlc3Npb24sIHN1Y2ggYXMgbWV0YWRhdGEgYW5kIHBsYXkgc3RhdGUgY2hhbmdlcy4KKyAqIDxwPgorICogQSBNZWRpYUNvbnRyb2xsZXIgY2FuIGJlIGNyZWF0ZWQgdGhyb3VnaCB7QGxpbmsgTWVkaWFTZXNzaW9uTWFuYWdlcn0gaWYgeW91CisgKiBob2xkIHRoZSAiYW5kcm9pZC5wZXJtaXNzaW9uLk1FRElBX0NPTlRFTlRfQ09OVFJPTCIgcGVybWlzc2lvbiBvciBhcmUgYW4KKyAqIGVuYWJsZWQgbm90aWZpY2F0aW9uIGxpc3RlbmVyIG9yIGJ5IGdldHRpbmcgYSB7QGxpbmsgTWVkaWFTZXNzaW9uLlRva2VufQorICogZGlyZWN0bHkgZnJvbSB0aGUgc2Vzc2lvbiBvd25lci4KKyAqIDxwPgorICogTWVkaWFDb250cm9sbGVyIG9iamVjdHMgYXJlIHRocmVhZC1zYWZlLgorICovCitwdWJsaWMgZmluYWwgY2xhc3MgTWVkaWFDb250cm9sbGVyIHsKKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgVEFHID0gIk1lZGlhQ29udHJvbGxlciI7CisKKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgTVNHX0VWRU5UID0gMTsKKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgTVNHX1VQREFURV9QTEFZQkFDS19TVEFURSA9IDI7CisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IE1TR19VUERBVEVfTUVUQURBVEEgPSAzOworICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGludCBNU0dfVVBEQVRFX1ZPTFVNRSA9IDQ7CisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IE1TR19VUERBVEVfUVVFVUUgPSA1OworICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGludCBNU0dfVVBEQVRFX1FVRVVFX1RJVExFID0gNjsKKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgTVNHX1VQREFURV9FWFRSQVMgPSA3OworICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGludCBNU0dfREVTVFJPWUVEID0gODsKKworICAgIHByaXZhdGUgZmluYWwgSVNlc3Npb25Db250cm9sbGVyIG1TZXNzaW9uQmluZGVyOworCisgICAgcHJpdmF0ZSBmaW5hbCBNZWRpYVNlc3Npb24uVG9rZW4gbVRva2VuOworICAgIHByaXZhdGUgZmluYWwgQ29udGV4dCBtQ29udGV4dDsKKyAgICBwcml2YXRlIGZpbmFsIENhbGxiYWNrU3R1YiBtQ2JTdHViID0gbmV3IENhbGxiYWNrU3R1Yih0aGlzKTsKKyAgICBwcml2YXRlIGZpbmFsIEFycmF5TGlzdDxNZXNzYWdlSGFuZGxlcj4gbUNhbGxiYWNrcyA9IG5ldyBBcnJheUxpc3Q8TWVzc2FnZUhhbmRsZXI+KCk7CisgICAgcHJpdmF0ZSBmaW5hbCBPYmplY3QgbUxvY2sgPSBuZXcgT2JqZWN0KCk7CisKKyAgICBwcml2YXRlIGJvb2xlYW4gbUNiUmVnaXN0ZXJlZCA9IGZhbHNlOworICAgIHByaXZhdGUgU3RyaW5nIG1QYWNrYWdlTmFtZTsKKyAgICBwcml2YXRlIFN0cmluZyBtVGFnOworCisgICAgcHJpdmF0ZSBmaW5hbCBUcmFuc3BvcnRDb250cm9scyBtVHJhbnNwb3J0Q29udHJvbHM7CisKKyAgICAvKioKKyAgICAgKiBDYWxsIGZvciBjcmVhdGluZyBhIE1lZGlhQ29udHJvbGxlciBkaXJlY3RseSBmcm9tIGEgYmluZGVyLiBTaG91bGQgb25seQorICAgICAqIGJlIHVzZWQgYnkgZnJhbWV3b3JrIGNvZGUuCisgICAgICoKKyAgICAgKiBAaGlkZQorICAgICAqLworICAgIHB1YmxpYyBNZWRpYUNvbnRyb2xsZXIoQ29udGV4dCBjb250ZXh0LCBJU2Vzc2lvbkNvbnRyb2xsZXIgc2Vzc2lvbkJpbmRlcikgeworICAgICAgICBpZiAoc2Vzc2lvbkJpbmRlciA9PSBudWxsKSB7CisgICAgICAgICAgICB0aHJvdyBuZXcgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKCJTZXNzaW9uIHRva2VuIGNhbm5vdCBiZSBudWxsIik7CisgICAgICAgIH0KKyAgICAgICAgaWYgKGNvbnRleHQgPT0gbnVsbCkgeworICAgICAgICAgICAgdGhyb3cgbmV3IElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbigiQ29udGV4dCBjYW5ub3QgYmUgbnVsbCIpOworICAgICAgICB9CisgICAgICAgIG1TZXNzaW9uQmluZGVyID0gc2Vzc2lvbkJpbmRlcjsKKyAgICAgICAgbVRyYW5zcG9ydENvbnRyb2xzID0gbmV3IFRyYW5zcG9ydENvbnRyb2xzKCk7CisgICAgICAgIG1Ub2tlbiA9IG5ldyBNZWRpYVNlc3Npb24uVG9rZW4oc2Vzc2lvbkJpbmRlcik7CisgICAgICAgIG1Db250ZXh0ID0gY29udGV4dDsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBDcmVhdGUgYSBuZXcgTWVkaWFDb250cm9sbGVyIGZyb20gYSBzZXNzaW9uJ3MgdG9rZW4uCisgICAgICoKKyAgICAgKiBAcGFyYW0gY29udGV4dCBUaGUgY2FsbGVyJ3MgY29udGV4dC4KKyAgICAgKiBAcGFyYW0gdG9rZW4gVGhlIHRva2VuIGZvciB0aGUgc2Vzc2lvbi4KKyAgICAgKi8KKyAgICBwdWJsaWMgTWVkaWFDb250cm9sbGVyKEBOb25OdWxsIENvbnRleHQgY29udGV4dCwgQE5vbk51bGwgTWVkaWFTZXNzaW9uLlRva2VuIHRva2VuKSB7CisgICAgICAgIHRoaXMoY29udGV4dCwgdG9rZW4uZ2V0QmluZGVyKCkpOworICAgIH0KKworICAgIC8qKgorICAgICAqIEdldCBhIHtAbGluayBUcmFuc3BvcnRDb250cm9sc30gaW5zdGFuY2UgdG8gc2VuZCB0cmFuc3BvcnQgYWN0aW9ucyB0bworICAgICAqIHRoZSBhc3NvY2lhdGVkIHNlc3Npb24uCisgICAgICoKKyAgICAgKiBAcmV0dXJuIEEgdHJhbnNwb3J0IGNvbnRyb2xzIGluc3RhbmNlLgorICAgICAqLworICAgIHB1YmxpYyBATm9uTnVsbCBUcmFuc3BvcnRDb250cm9scyBnZXRUcmFuc3BvcnRDb250cm9scygpIHsKKyAgICAgICAgcmV0dXJuIG1UcmFuc3BvcnRDb250cm9sczsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBTZW5kIHRoZSBzcGVjaWZpZWQgbWVkaWEgYnV0dG9uIGV2ZW50IHRvIHRoZSBzZXNzaW9uLiBPbmx5IG1lZGlhIGtleXMgY2FuCisgICAgICogYmUgc2VudCBieSB0aGlzIG1ldGhvZCwgb3RoZXIga2V5cyB3aWxsIGJlIGlnbm9yZWQuCisgICAgICoKKyAgICAgKiBAcGFyYW0ga2V5RXZlbnQgVGhlIG1lZGlhIGJ1dHRvbiBldmVudCB0byBkaXNwYXRjaC4KKyAgICAgKiBAcmV0dXJuIHRydWUgaWYgdGhlIGV2ZW50IHdhcyBzZW50IHRvIHRoZSBzZXNzaW9uLCBmYWxzZSBvdGhlcndpc2UuCisgICAgICovCisgICAgcHVibGljIGJvb2xlYW4gZGlzcGF0Y2hNZWRpYUJ1dHRvbkV2ZW50KEBOb25OdWxsIEtleUV2ZW50IGtleUV2ZW50KSB7CisgICAgICAgIHJldHVybiBkaXNwYXRjaE1lZGlhQnV0dG9uRXZlbnRJbnRlcm5hbChmYWxzZSwga2V5RXZlbnQpOworICAgIH0KKworICAgIC8qKgorICAgICAqIERpc3BhdGNoZXMgdGhlIG1lZGlhIGJ1dHRvbiBldmVudCBhcyBzeXN0ZW0gc2VydmljZSB0byB0aGUgc2Vzc2lvbi4KKyAgICAgKiA8cD4KKyAgICAgKiBTaG91bGQgYmUgb25seSBjYWxsZWQgYnkgdGhlIHtAbGluayBjb20uYW5kcm9pZC5pbnRlcm5hbC5wb2xpY3kuUGhvbmVXaW5kb3d9IHdoZW4gdGhlCisgICAgICogZm9yZWdyb3VuZCBhY3Rpdml0eSBkaWRuJ3QgY29uc3VtZSB0aGUga2V5IGZyb20gdGhlIGhhcmR3YXJlIGRldmljZXMuCisgICAgICoKKyAgICAgKiBAcGFyYW0ga2V5RXZlbnQgbWVkaWEga2V5IGV2ZW50CisgICAgICogQHJldHVybiB7QGNvZGUgdHJ1ZX0gaWYgdGhlIGV2ZW50IHdhcyBzZW50IHRvIHRoZSBzZXNzaW9uLCB7QGNvZGUgZmFsc2V9IG90aGVyd2lzZQorICAgICAqIEBoaWRlCisgICAgICovCisgICAgcHVibGljIGJvb2xlYW4gZGlzcGF0Y2hNZWRpYUJ1dHRvbkV2ZW50QXNTeXN0ZW1TZXJ2aWNlKEBOb25OdWxsIEtleUV2ZW50IGtleUV2ZW50KSB7CisgICAgICAgIHJldHVybiBkaXNwYXRjaE1lZGlhQnV0dG9uRXZlbnRJbnRlcm5hbCh0cnVlLCBrZXlFdmVudCk7CisgICAgfQorCisgICAgcHJpdmF0ZSBib29sZWFuIGRpc3BhdGNoTWVkaWFCdXR0b25FdmVudEludGVybmFsKGJvb2xlYW4gYXNTeXN0ZW1TZXJ2aWNlLAorICAgICAgICAgICAgQE5vbk51bGwgS2V5RXZlbnQga2V5RXZlbnQpIHsKKyAgICAgICAgaWYgKGtleUV2ZW50ID09IG51bGwpIHsKKyAgICAgICAgICAgIHRocm93IG5ldyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oIktleUV2ZW50IG1heSBub3QgYmUgbnVsbCIpOworICAgICAgICB9CisgICAgICAgIC8vVE9ETyhiLzExOTc4OTcwNyk6IFJlc29sdmUgaGlkZGVuIEFQSSB1c2FnZTogS2V5RXZlbnQjaXNNZWRpYUtleQorICAgICAgICAvKgorICAgICAgICBpZiAoIUtleUV2ZW50LmlzTWVkaWFLZXkoa2V5RXZlbnQuZ2V0S2V5Q29kZSgpKSkgeworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgICAgICovCisgICAgICAgIHRyeSB7CisgICAgICAgICAgICAvL1RPRE8oYi8xMTk3NDg2NzgpOiBSZXNvbHZlIG1Db250ZXh0LmdldE9wUGFja2FnZU5hbWUoKSB0aHJvdWdoIHRoaXMgZmlsZS4KKyAgICAgICAgICAgIC8vIFRlbXBvcmFyaWxseSBpdCdzIHJlcGxhY2VkIHdpdGggIm1Db250ZXh0LmdldE9wUGFja2FnZU5hbWUoKSIgZm9yIGNvbXBpbGluZy4KKyAgICAgICAgICAgIHJldHVybiBtU2Vzc2lvbkJpbmRlci5zZW5kTWVkaWFCdXR0b24oIm1Db250ZXh0LmdldE9wUGFja2FnZU5hbWUoKSIsIG1DYlN0dWIsCisgICAgICAgICAgICAgICAgICAgIGFzU3lzdGVtU2VydmljZSwga2V5RXZlbnQpOworICAgICAgICB9IGNhdGNoIChSZW1vdGVFeGNlcHRpb24gZSkgeworICAgICAgICAgICAgLy8gU3lzdGVtIGlzIGRlYWQuID0oCisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIC8qKgorICAgICAqIERpc3BhdGNoZXMgdGhlIHZvbHVtZSBidXR0b24gZXZlbnQgYXMgc3lzdGVtIHNlcnZpY2UgdG8gdGhlIHNlc3Npb24uCisgICAgICogPHA+CisgICAgICogU2hvdWxkIGJlIG9ubHkgY2FsbGVkIGJ5IHRoZSB7QGxpbmsgY29tLmFuZHJvaWQuaW50ZXJuYWwucG9saWN5LlBob25lV2luZG93fSB3aGVuIHRoZQorICAgICAqIGZvcmVncm91bmQgYWN0aXZpdHkgZGlkbid0IGNvbnN1bWUgdGhlIGtleSBmcm9tIHRoZSBoYXJkd2FyZSBkZXZpY2VzLgorICAgICAqCisgICAgICogQHBhcmFtIGtleUV2ZW50IHZvbHVtZSBrZXkgZXZlbnQKKyAgICAgKiBAaGlkZQorICAgICAqLworICAgIHB1YmxpYyB2b2lkIGRpc3BhdGNoVm9sdW1lQnV0dG9uRXZlbnRBc1N5c3RlbVNlcnZpY2UoQE5vbk51bGwgS2V5RXZlbnQga2V5RXZlbnQpIHsKKyAgICAgICAgc3dpdGNoIChrZXlFdmVudC5nZXRBY3Rpb24oKSkgeworICAgICAgICAgICAgY2FzZSBLZXlFdmVudC5BQ1RJT05fRE9XTjogeworICAgICAgICAgICAgICAgIGludCBkaXJlY3Rpb24gPSAwOworICAgICAgICAgICAgICAgIHN3aXRjaCAoa2V5RXZlbnQuZ2V0S2V5Q29kZSgpKSB7CisgICAgICAgICAgICAgICAgICAgIGNhc2UgS2V5RXZlbnQuS0VZQ09ERV9WT0xVTUVfVVA6CisgICAgICAgICAgICAgICAgICAgICAgICBkaXJlY3Rpb24gPSBBdWRpb01hbmFnZXIuQURKVVNUX1JBSVNFOworICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIGNhc2UgS2V5RXZlbnQuS0VZQ09ERV9WT0xVTUVfRE9XTjoKKyAgICAgICAgICAgICAgICAgICAgICAgIGRpcmVjdGlvbiA9IEF1ZGlvTWFuYWdlci5BREpVU1RfTE9XRVI7CisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgY2FzZSBLZXlFdmVudC5LRVlDT0RFX1ZPTFVNRV9NVVRFOgorICAgICAgICAgICAgICAgICAgICAgICAgZGlyZWN0aW9uID0gQXVkaW9NYW5hZ2VyLkFESlVTVF9UT0dHTEVfTVVURTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB0cnkgeworICAgICAgICAgICAgICAgICAgICBtU2Vzc2lvbkJpbmRlci5hZGp1c3RWb2x1bWUoIm1Db250ZXh0LmdldE9wUGFja2FnZU5hbWUoKSIsIG1DYlN0dWIsIHRydWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlyZWN0aW9uLCBBdWRpb01hbmFnZXIuRkxBR19TSE9XX1VJKTsKKyAgICAgICAgICAgICAgICB9IGNhdGNoIChSZW1vdGVFeGNlcHRpb24gZSkgeworICAgICAgICAgICAgICAgICAgICBMb2cud3RmKFRBRywgIkVycm9yIGNhbGxpbmcgYWRqdXN0Vm9sdW1lQnkiLCBlKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGNhc2UgS2V5RXZlbnQuQUNUSU9OX1VQOiB7CisgICAgICAgICAgICAgICAgLy9UT0RPKGIvMTE5NzkwMzM5KTogUmVzb2x2ZSBoaWRkZW4gQVBJIHVzYWdlLiBBdWRpb01hbmFnZXIuRkxBR19GUk9NX0tFWQorICAgICAgICAgICAgICAgIGZpbmFsIGludCBmbGFncyA9IEF1ZGlvTWFuYWdlci5GTEFHX1BMQVlfU09VTkQgfCBBdWRpb01hbmFnZXIuRkxBR19WSUJSQVRFOworICAgICAgICAgICAgICAgICAgICAgICAgLy98IEF1ZGlvTWFuYWdlci5GTEFHX0ZST01fS0VZOworICAgICAgICAgICAgICAgIHRyeSB7CisgICAgICAgICAgICAgICAgICAgIG1TZXNzaW9uQmluZGVyLmFkanVzdFZvbHVtZSgibUNvbnRleHQuZ2V0T3BQYWNrYWdlTmFtZSgpIiwgbUNiU3R1YiwgdHJ1ZSwgMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBmbGFncyk7CisgICAgICAgICAgICAgICAgfSBjYXRjaCAoUmVtb3RlRXhjZXB0aW9uIGUpIHsKKyAgICAgICAgICAgICAgICAgICAgTG9nLnd0ZihUQUcsICJFcnJvciBjYWxsaW5nIGFkanVzdFZvbHVtZUJ5IiwgZSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCisgICAgLyoqCisgICAgICogR2V0IHRoZSBjdXJyZW50IHBsYXliYWNrIHN0YXRlIGZvciB0aGlzIHNlc3Npb24uCisgICAgICoKKyAgICAgKiBAcmV0dXJuIFRoZSBjdXJyZW50IFBsYXliYWNrU3RhdGUgb3IgbnVsbAorICAgICAqLworICAgIHB1YmxpYyBATnVsbGFibGUgUGxheWJhY2tTdGF0ZSBnZXRQbGF5YmFja1N0YXRlKCkgeworICAgICAgICB0cnkgeworICAgICAgICAgICAgcmV0dXJuIG1TZXNzaW9uQmluZGVyLmdldFBsYXliYWNrU3RhdGUoKTsKKyAgICAgICAgfSBjYXRjaCAoUmVtb3RlRXhjZXB0aW9uIGUpIHsKKyAgICAgICAgICAgIExvZy53dGYoVEFHLCAiRXJyb3IgY2FsbGluZyBnZXRQbGF5YmFja1N0YXRlLiIsIGUpOworICAgICAgICAgICAgcmV0dXJuIG51bGw7CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBHZXQgdGhlIGN1cnJlbnQgbWV0YWRhdGEgZm9yIHRoaXMgc2Vzc2lvbi4KKyAgICAgKgorICAgICAqIEByZXR1cm4gVGhlIGN1cnJlbnQgTWVkaWFNZXRhZGF0YSBvciBudWxsLgorICAgICAqLworICAgIHB1YmxpYyBATnVsbGFibGUgTWVkaWFNZXRhZGF0YSBnZXRNZXRhZGF0YSgpIHsKKyAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgIHJldHVybiBtU2Vzc2lvbkJpbmRlci5nZXRNZXRhZGF0YSgpOworICAgICAgICB9IGNhdGNoIChSZW1vdGVFeGNlcHRpb24gZSkgeworICAgICAgICAgICAgTG9nLnd0ZihUQUcsICJFcnJvciBjYWxsaW5nIGdldE1ldGFkYXRhLiIsIGUpOworICAgICAgICAgICAgcmV0dXJuIG51bGw7CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBHZXQgdGhlIGN1cnJlbnQgcGxheSBxdWV1ZSBmb3IgdGhpcyBzZXNzaW9uIGlmIG9uZSBpcyBzZXQuIElmIHlvdSBvbmx5CisgICAgICogY2FyZSBhYm91dCB0aGUgY3VycmVudCBpdGVtIHtAbGluayAjZ2V0TWV0YWRhdGEoKX0gc2hvdWxkIGJlIHVzZWQuCisgICAgICoKKyAgICAgKiBAcmV0dXJuIFRoZSBjdXJyZW50IHBsYXkgcXVldWUgb3IgbnVsbC4KKyAgICAgKi8KKyAgICBwdWJsaWMgQE51bGxhYmxlIExpc3Q8TWVkaWFTZXNzaW9uLlF1ZXVlSXRlbT4gZ2V0UXVldWUoKSB7CisgICAgICAgIC8vVE9ETzooYi8xMTk3NTA4MDcpIFJlc29sdmUgaGlkZGVuIEFQSSB1c2FnZSBQYXJjZWxlZExpc3RTbGljZS4KKyAgICAgICAgLyoKKyAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgIFBhcmNlbGVkTGlzdFNsaWNlIHF1ZXVlID0gbVNlc3Npb25CaW5kZXIuZ2V0UXVldWUoKTsKKyAgICAgICAgICAgIGlmIChxdWV1ZSAhPSBudWxsKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIHF1ZXVlLmdldExpc3QoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSBjYXRjaCAoUmVtb3RlRXhjZXB0aW9uIGUpIHsKKyAgICAgICAgICAgIExvZy53dGYoVEFHLCAiRXJyb3IgY2FsbGluZyBnZXRRdWV1ZS4iLCBlKTsKKyAgICAgICAgfQorICAgICAgICAqLworICAgICAgICByZXR1cm4gbnVsbDsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBHZXQgdGhlIHF1ZXVlIHRpdGxlIGZvciB0aGlzIHNlc3Npb24uCisgICAgICovCisgICAgcHVibGljIEBOdWxsYWJsZSBDaGFyU2VxdWVuY2UgZ2V0UXVldWVUaXRsZSgpIHsKKyAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgIHJldHVybiBtU2Vzc2lvbkJpbmRlci5nZXRRdWV1ZVRpdGxlKCk7CisgICAgICAgIH0gY2F0Y2ggKFJlbW90ZUV4Y2VwdGlvbiBlKSB7CisgICAgICAgICAgICBMb2cud3RmKFRBRywgIkVycm9yIGNhbGxpbmcgZ2V0UXVldWVUaXRsZSIsIGUpOworICAgICAgICB9CisgICAgICAgIHJldHVybiBudWxsOworICAgIH0KKworICAgIC8qKgorICAgICAqIEdldCB0aGUgZXh0cmFzIGZvciB0aGlzIHNlc3Npb24uCisgICAgICovCisgICAgcHVibGljIEBOdWxsYWJsZSBCdW5kbGUgZ2V0RXh0cmFzKCkgeworICAgICAgICB0cnkgeworICAgICAgICAgICAgcmV0dXJuIG1TZXNzaW9uQmluZGVyLmdldEV4dHJhcygpOworICAgICAgICB9IGNhdGNoIChSZW1vdGVFeGNlcHRpb24gZSkgeworICAgICAgICAgICAgTG9nLnd0ZihUQUcsICJFcnJvciBjYWxsaW5nIGdldEV4dHJhcyIsIGUpOworICAgICAgICB9CisgICAgICAgIHJldHVybiBudWxsOworICAgIH0KKworICAgIC8qKgorICAgICAqIEdldCB0aGUgcmF0aW5nIHR5cGUgc3VwcG9ydGVkIGJ5IHRoZSBzZXNzaW9uLiBPbmUgb2Y6CisgICAgICogPHVsPgorICAgICAqIDxsaT57QGxpbmsgUmF0aW5nI1JBVElOR19OT05FfTwvbGk+CisgICAgICogPGxpPntAbGluayBSYXRpbmcjUkFUSU5HX0hFQVJUfTwvbGk+CisgICAgICogPGxpPntAbGluayBSYXRpbmcjUkFUSU5HX1RIVU1CX1VQX0RPV059PC9saT4KKyAgICAgKiA8bGk+e0BsaW5rIFJhdGluZyNSQVRJTkdfM19TVEFSU308L2xpPgorICAgICAqIDxsaT57QGxpbmsgUmF0aW5nI1JBVElOR180X1NUQVJTfTwvbGk+CisgICAgICogPGxpPntAbGluayBSYXRpbmcjUkFUSU5HXzVfU1RBUlN9PC9saT4KKyAgICAgKiA8bGk+e0BsaW5rIFJhdGluZyNSQVRJTkdfUEVSQ0VOVEFHRX08L2xpPgorICAgICAqIDwvdWw+CisgICAgICoKKyAgICAgKiBAcmV0dXJuIFRoZSBzdXBwb3J0ZWQgcmF0aW5nIHR5cGUKKyAgICAgKi8KKyAgICBwdWJsaWMgaW50IGdldFJhdGluZ1R5cGUoKSB7CisgICAgICAgIHRyeSB7CisgICAgICAgICAgICByZXR1cm4gbVNlc3Npb25CaW5kZXIuZ2V0UmF0aW5nVHlwZSgpOworICAgICAgICB9IGNhdGNoIChSZW1vdGVFeGNlcHRpb24gZSkgeworICAgICAgICAgICAgTG9nLnd0ZihUQUcsICJFcnJvciBjYWxsaW5nIGdldFJhdGluZ1R5cGUuIiwgZSk7CisgICAgICAgICAgICByZXR1cm4gUmF0aW5nLlJBVElOR19OT05FOworICAgICAgICB9CisgICAgfQorCisgICAgLyoqCisgICAgICogR2V0IHRoZSBmbGFncyBmb3IgdGhpcyBzZXNzaW9uLiBGbGFncyBhcmUgZGVmaW5lZCBpbiB7QGxpbmsgTWVkaWFTZXNzaW9ufS4KKyAgICAgKgorICAgICAqIEByZXR1cm4gVGhlIGN1cnJlbnQgc2V0IG9mIGZsYWdzIGZvciB0aGUgc2Vzc2lvbi4KKyAgICAgKi8KKyAgICBwdWJsaWMgQE1lZGlhU2Vzc2lvbi5TZXNzaW9uRmxhZ3MgbG9uZyBnZXRGbGFncygpIHsKKyAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgIHJldHVybiBtU2Vzc2lvbkJpbmRlci5nZXRGbGFncygpOworICAgICAgICB9IGNhdGNoIChSZW1vdGVFeGNlcHRpb24gZSkgeworICAgICAgICAgICAgTG9nLnd0ZihUQUcsICJFcnJvciBjYWxsaW5nIGdldEZsYWdzLiIsIGUpOworICAgICAgICB9CisgICAgICAgIHJldHVybiAwOworICAgIH0KKworICAgIC8qKgorICAgICAqIEdldCB0aGUgY3VycmVudCBwbGF5YmFjayBpbmZvIGZvciB0aGlzIHNlc3Npb24uCisgICAgICoKKyAgICAgKiBAcmV0dXJuIFRoZSBjdXJyZW50IHBsYXliYWNrIGluZm8gb3IgbnVsbC4KKyAgICAgKi8KKyAgICBwdWJsaWMgQE51bGxhYmxlIFBsYXliYWNrSW5mbyBnZXRQbGF5YmFja0luZm8oKSB7CisgICAgICAgIHRyeSB7CisgICAgICAgICAgICBQYXJjZWxhYmxlVm9sdW1lSW5mbyByZXN1bHQgPSBtU2Vzc2lvbkJpbmRlci5nZXRWb2x1bWVBdHRyaWJ1dGVzKCk7CisgICAgICAgICAgICByZXR1cm4gbmV3IFBsYXliYWNrSW5mbyhyZXN1bHQudm9sdW1lVHlwZSwgcmVzdWx0LmF1ZGlvQXR0cnMsIHJlc3VsdC5jb250cm9sVHlwZSwKKyAgICAgICAgICAgICAgICAgICAgcmVzdWx0Lm1heFZvbHVtZSwgcmVzdWx0LmN1cnJlbnRWb2x1bWUpOworCisgICAgICAgIH0gY2F0Y2ggKFJlbW90ZUV4Y2VwdGlvbiBlKSB7CisgICAgICAgICAgICBMb2cud3RmKFRBRywgIkVycm9yIGNhbGxpbmcgZ2V0QXVkaW9JbmZvLiIsIGUpOworICAgICAgICB9CisgICAgICAgIHJldHVybiBudWxsOworICAgIH0KKworICAgIC8qKgorICAgICAqIEdldCBhbiBpbnRlbnQgZm9yIGxhdW5jaGluZyBVSSBhc3NvY2lhdGVkIHdpdGggdGhpcyBzZXNzaW9uIGlmIG9uZQorICAgICAqIGV4aXN0cy4KKyAgICAgKgorICAgICAqIEByZXR1cm4gQSB7QGxpbmsgUGVuZGluZ0ludGVudH0gdG8gbGF1bmNoIFVJIG9yIG51bGwuCisgICAgICovCisgICAgcHVibGljIEBOdWxsYWJsZSBQZW5kaW5nSW50ZW50IGdldFNlc3Npb25BY3Rpdml0eSgpIHsKKyAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgIHJldHVybiBtU2Vzc2lvbkJpbmRlci5nZXRMYXVuY2hQZW5kaW5nSW50ZW50KCk7CisgICAgICAgIH0gY2F0Y2ggKFJlbW90ZUV4Y2VwdGlvbiBlKSB7CisgICAgICAgICAgICBMb2cud3RmKFRBRywgIkVycm9yIGNhbGxpbmcgZ2V0UGVuZGluZ0ludGVudC4iLCBlKTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gbnVsbDsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBHZXQgdGhlIHRva2VuIGZvciB0aGUgc2Vzc2lvbiB0aGlzIGlzIGNvbm5lY3RlZCB0by4KKyAgICAgKgorICAgICAqIEByZXR1cm4gVGhlIHRva2VuIGZvciB0aGUgY29ubmVjdGVkIHNlc3Npb24uCisgICAgICovCisgICAgcHVibGljIEBOb25OdWxsIE1lZGlhU2Vzc2lvbi5Ub2tlbiBnZXRTZXNzaW9uVG9rZW4oKSB7CisgICAgICAgIHJldHVybiBtVG9rZW47CisgICAgfQorCisgICAgLyoqCisgICAgICogU2V0IHRoZSB2b2x1bWUgb2YgdGhlIG91dHB1dCB0aGlzIHNlc3Npb24gaXMgcGxheWluZyBvbi4gVGhlIGNvbW1hbmQgd2lsbAorICAgICAqIGJlIGlnbm9yZWQgaWYgaXQgZG9lcyBub3Qgc3VwcG9ydAorICAgICAqIHtAbGluayBWb2x1bWVQcm92aWRlciNWT0xVTUVfQ09OVFJPTF9BQlNPTFVURX0uIFRoZSBmbGFncyBpbgorICAgICAqIHtAbGluayBBdWRpb01hbmFnZXJ9IG1heSBiZSB1c2VkIHRvIGFmZmVjdCB0aGUgaGFuZGxpbmcuCisgICAgICoKKyAgICAgKiBAc2VlICNnZXRQbGF5YmFja0luZm8oKQorICAgICAqIEBwYXJhbSB2YWx1ZSBUaGUgdmFsdWUgdG8gc2V0IGl0IHRvLCBiZXR3ZWVuIDAgYW5kIHRoZSByZXBvcnRlZCBtYXguCisgICAgICogQHBhcmFtIGZsYWdzIEZsYWdzIGZyb20ge0BsaW5rIEF1ZGlvTWFuYWdlcn0gdG8gaW5jbHVkZSB3aXRoIHRoZSB2b2x1bWUKKyAgICAgKiAgICAgICAgICAgIHJlcXVlc3QuCisgICAgICovCisgICAgcHVibGljIHZvaWQgc2V0Vm9sdW1lVG8oaW50IHZhbHVlLCBpbnQgZmxhZ3MpIHsKKyAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgIG1TZXNzaW9uQmluZGVyLnNldFZvbHVtZVRvKCJtQ29udGV4dC5nZXRPcFBhY2thZ2VOYW1lKCkiLCBtQ2JTdHViLCB2YWx1ZSwgZmxhZ3MpOworICAgICAgICB9IGNhdGNoIChSZW1vdGVFeGNlcHRpb24gZSkgeworICAgICAgICAgICAgTG9nLnd0ZihUQUcsICJFcnJvciBjYWxsaW5nIHNldFZvbHVtZVRvLiIsIGUpOworICAgICAgICB9CisgICAgfQorCisgICAgLyoqCisgICAgICogQWRqdXN0IHRoZSB2b2x1bWUgb2YgdGhlIG91dHB1dCB0aGlzIHNlc3Npb24gaXMgcGxheWluZyBvbi4gVGhlIGRpcmVjdGlvbgorICAgICAqIG11c3QgYmUgb25lIG9mIHtAbGluayBBdWRpb01hbmFnZXIjQURKVVNUX0xPV0VSfSwKKyAgICAgKiB7QGxpbmsgQXVkaW9NYW5hZ2VyI0FESlVTVF9SQUlTRX0sIG9yIHtAbGluayBBdWRpb01hbmFnZXIjQURKVVNUX1NBTUV9LgorICAgICAqIFRoZSBjb21tYW5kIHdpbGwgYmUgaWdub3JlZCBpZiB0aGUgc2Vzc2lvbiBkb2VzIG5vdCBzdXBwb3J0CisgICAgICoge0BsaW5rIFZvbHVtZVByb3ZpZGVyI1ZPTFVNRV9DT05UUk9MX1JFTEFUSVZFfSBvcgorICAgICAqIHtAbGluayBWb2x1bWVQcm92aWRlciNWT0xVTUVfQ09OVFJPTF9BQlNPTFVURX0uIFRoZSBmbGFncyBpbgorICAgICAqIHtAbGluayBBdWRpb01hbmFnZXJ9IG1heSBiZSB1c2VkIHRvIGFmZmVjdCB0aGUgaGFuZGxpbmcuCisgICAgICoKKyAgICAgKiBAc2VlICNnZXRQbGF5YmFja0luZm8oKQorICAgICAqIEBwYXJhbSBkaXJlY3Rpb24gVGhlIGRpcmVjdGlvbiB0byBhZGp1c3QgdGhlIHZvbHVtZSBpbi4KKyAgICAgKiBAcGFyYW0gZmxhZ3MgQW55IGZsYWdzIHRvIHBhc3Mgd2l0aCB0aGUgY29tbWFuZC4KKyAgICAgKi8KKyAgICBwdWJsaWMgdm9pZCBhZGp1c3RWb2x1bWUoaW50IGRpcmVjdGlvbiwgaW50IGZsYWdzKSB7CisgICAgICAgIHRyeSB7CisgICAgICAgICAgICBtU2Vzc2lvbkJpbmRlci5hZGp1c3RWb2x1bWUoIm1Db250ZXh0LmdldE9wUGFja2FnZU5hbWUoKSIsIG1DYlN0dWIsIGZhbHNlLCBkaXJlY3Rpb24sCisgICAgICAgICAgICAgICAgICAgIGZsYWdzKTsKKyAgICAgICAgfSBjYXRjaCAoUmVtb3RlRXhjZXB0aW9uIGUpIHsKKyAgICAgICAgICAgIExvZy53dGYoVEFHLCAiRXJyb3IgY2FsbGluZyBhZGp1c3RWb2x1bWVCeS4iLCBlKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIC8qKgorICAgICAqIFJlZ2lzdGVycyBhIGNhbGxiYWNrIHRvIHJlY2VpdmUgdXBkYXRlcyBmcm9tIHRoZSBTZXNzaW9uLiBVcGRhdGVzIHdpbGwgYmUKKyAgICAgKiBwb3N0ZWQgb24gdGhlIGNhbGxlcidzIHRocmVhZC4KKyAgICAgKgorICAgICAqIEBwYXJhbSBjYWxsYmFjayBUaGUgY2FsbGJhY2sgb2JqZWN0LCBtdXN0IG5vdCBiZSBudWxsLgorICAgICAqLworICAgIHB1YmxpYyB2b2lkIHJlZ2lzdGVyQ2FsbGJhY2soQE5vbk51bGwgQ2FsbGJhY2sgY2FsbGJhY2spIHsKKyAgICAgICAgcmVnaXN0ZXJDYWxsYmFjayhjYWxsYmFjaywgbnVsbCk7CisgICAgfQorCisgICAgLyoqCisgICAgICogUmVnaXN0ZXJzIGEgY2FsbGJhY2sgdG8gcmVjZWl2ZSB1cGRhdGVzIGZyb20gdGhlIHNlc3Npb24uIFVwZGF0ZXMgd2lsbCBiZQorICAgICAqIHBvc3RlZCBvbiB0aGUgc3BlY2lmaWVkIGhhbmRsZXIncyB0aHJlYWQuCisgICAgICoKKyAgICAgKiBAcGFyYW0gY2FsbGJhY2sgVGhlIGNhbGxiYWNrIG9iamVjdCwgbXVzdCBub3QgYmUgbnVsbC4KKyAgICAgKiBAcGFyYW0gaGFuZGxlciBUaGUgaGFuZGxlciB0byBwb3N0IHVwZGF0ZXMgb24uIElmIG51bGwgdGhlIGNhbGxlcnMgdGhyZWFkCisgICAgICogICAgICAgICAgICB3aWxsIGJlIHVzZWQuCisgICAgICovCisgICAgcHVibGljIHZvaWQgcmVnaXN0ZXJDYWxsYmFjayhATm9uTnVsbCBDYWxsYmFjayBjYWxsYmFjaywgQE51bGxhYmxlIEhhbmRsZXIgaGFuZGxlcikgeworICAgICAgICBpZiAoY2FsbGJhY2sgPT0gbnVsbCkgeworICAgICAgICAgICAgdGhyb3cgbmV3IElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbigiY2FsbGJhY2sgbXVzdCBub3QgYmUgbnVsbCIpOworICAgICAgICB9CisgICAgICAgIGlmIChoYW5kbGVyID09IG51bGwpIHsKKyAgICAgICAgICAgIGhhbmRsZXIgPSBuZXcgSGFuZGxlcigpOworICAgICAgICB9CisgICAgICAgIHN5bmNocm9uaXplZCAobUxvY2spIHsKKyAgICAgICAgICAgIGFkZENhbGxiYWNrTG9ja2VkKGNhbGxiYWNrLCBoYW5kbGVyKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIC8qKgorICAgICAqIFVucmVnaXN0ZXJzIHRoZSBzcGVjaWZpZWQgY2FsbGJhY2suIElmIGFuIHVwZGF0ZSBoYXMgYWxyZWFkeSBiZWVuIHBvc3RlZAorICAgICAqIHlvdSBtYXkgc3RpbGwgcmVjZWl2ZSBpdCBhZnRlciBjYWxsaW5nIHRoaXMgbWV0aG9kLgorICAgICAqCisgICAgICogQHBhcmFtIGNhbGxiYWNrIFRoZSBjYWxsYmFjayB0byByZW1vdmUuCisgICAgICovCisgICAgcHVibGljIHZvaWQgdW5yZWdpc3RlckNhbGxiYWNrKEBOb25OdWxsIENhbGxiYWNrIGNhbGxiYWNrKSB7CisgICAgICAgIGlmIChjYWxsYmFjayA9PSBudWxsKSB7CisgICAgICAgICAgICB0aHJvdyBuZXcgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKCJjYWxsYmFjayBtdXN0IG5vdCBiZSBudWxsIik7CisgICAgICAgIH0KKyAgICAgICAgc3luY2hyb25pemVkIChtTG9jaykgeworICAgICAgICAgICAgcmVtb3ZlQ2FsbGJhY2tMb2NrZWQoY2FsbGJhY2spOworICAgICAgICB9CisgICAgfQorCisgICAgLyoqCisgICAgICogU2VuZHMgYSBnZW5lcmljIGNvbW1hbmQgdG8gdGhlIHNlc3Npb24uIEl0IGlzIHVwIHRvIHRoZSBzZXNzaW9uIGNyZWF0b3IKKyAgICAgKiB0byBkZWNpZGUgd2hhdCBjb21tYW5kcyBhbmQgcGFyYW1ldGVycyB0aGV5IHdpbGwgc3VwcG9ydC4gQXMgc3VjaCwKKyAgICAgKiBjb21tYW5kcyBzaG91bGQgb25seSBiZSBzZW50IHRvIHNlc3Npb25zIHRoYXQgdGhlIGNvbnRyb2xsZXIgb3ducy4KKyAgICAgKgorICAgICAqIEBwYXJhbSBjb21tYW5kIFRoZSBjb21tYW5kIHRvIHNlbmQKKyAgICAgKiBAcGFyYW0gYXJncyBBbnkgcGFyYW1ldGVycyB0byBpbmNsdWRlIHdpdGggdGhlIGNvbW1hbmQKKyAgICAgKiBAcGFyYW0gY2IgVGhlIGNhbGxiYWNrIHRvIHJlY2VpdmUgdGhlIHJlc3VsdCBvbgorICAgICAqLworICAgIHB1YmxpYyB2b2lkIHNlbmRDb21tYW5kKEBOb25OdWxsIFN0cmluZyBjb21tYW5kLCBATnVsbGFibGUgQnVuZGxlIGFyZ3MsCisgICAgICAgICAgICBATnVsbGFibGUgUmVzdWx0UmVjZWl2ZXIgY2IpIHsKKyAgICAgICAgaWYgKFRleHRVdGlscy5pc0VtcHR5KGNvbW1hbmQpKSB7CisgICAgICAgICAgICB0aHJvdyBuZXcgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKCJjb21tYW5kIGNhbm5vdCBiZSBudWxsIG9yIGVtcHR5Iik7CisgICAgICAgIH0KKyAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgIG1TZXNzaW9uQmluZGVyLnNlbmRDb21tYW5kKCJtQ29udGV4dC5nZXRPcFBhY2thZ2VOYW1lKCkiLCBtQ2JTdHViLCBjb21tYW5kLCBhcmdzLCBjYik7CisgICAgICAgIH0gY2F0Y2ggKFJlbW90ZUV4Y2VwdGlvbiBlKSB7CisgICAgICAgICAgICBMb2cuZChUQUcsICJEZWFkIG9iamVjdCBpbiBzZW5kQ29tbWFuZC4iLCBlKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIC8qKgorICAgICAqIEdldCB0aGUgc2Vzc2lvbiBvd25lcidzIHBhY2thZ2UgbmFtZS4KKyAgICAgKgorICAgICAqIEByZXR1cm4gVGhlIHBhY2thZ2UgbmFtZSBvZiBvZiB0aGUgc2Vzc2lvbiBvd25lci4KKyAgICAgKi8KKyAgICBwdWJsaWMgU3RyaW5nIGdldFBhY2thZ2VOYW1lKCkgeworICAgICAgICBpZiAobVBhY2thZ2VOYW1lID09IG51bGwpIHsKKyAgICAgICAgICAgIHRyeSB7CisgICAgICAgICAgICAgICAgbVBhY2thZ2VOYW1lID0gbVNlc3Npb25CaW5kZXIuZ2V0UGFja2FnZU5hbWUoKTsKKyAgICAgICAgICAgIH0gY2F0Y2ggKFJlbW90ZUV4Y2VwdGlvbiBlKSB7CisgICAgICAgICAgICAgICAgTG9nLmQoVEFHLCAiRGVhZCBvYmplY3QgaW4gZ2V0UGFja2FnZU5hbWUuIiwgZSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIG1QYWNrYWdlTmFtZTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBHZXQgdGhlIHNlc3Npb24ncyB0YWcgZm9yIGRlYnVnZ2luZyBwdXJwb3Nlcy4KKyAgICAgKgorICAgICAqIEByZXR1cm4gVGhlIHNlc3Npb24ncyB0YWcuCisgICAgICogQGhpZGUKKyAgICAgKi8KKyAgICBwdWJsaWMgU3RyaW5nIGdldFRhZygpIHsKKyAgICAgICAgaWYgKG1UYWcgPT0gbnVsbCkgeworICAgICAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgICAgICBtVGFnID0gbVNlc3Npb25CaW5kZXIuZ2V0VGFnKCk7CisgICAgICAgICAgICB9IGNhdGNoIChSZW1vdGVFeGNlcHRpb24gZSkgeworICAgICAgICAgICAgICAgIExvZy5kKFRBRywgIkRlYWQgb2JqZWN0IGluIGdldFRhZy4iLCBlKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICByZXR1cm4gbVRhZzsKKyAgICB9CisKKyAgICAvKgorICAgICAqIEBoaWRlCisgICAgICovCisgICAgSVNlc3Npb25Db250cm9sbGVyIGdldFNlc3Npb25CaW5kZXIoKSB7CisgICAgICAgIHJldHVybiBtU2Vzc2lvbkJpbmRlcjsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBAaGlkZQorICAgICAqLworICAgIEBVbnN1cHBvcnRlZEFwcFVzYWdlCisgICAgcHVibGljIGJvb2xlYW4gY29udHJvbHNTYW1lU2Vzc2lvbihNZWRpYUNvbnRyb2xsZXIgb3RoZXIpIHsKKyAgICAgICAgaWYgKG90aGVyID09IG51bGwpIHJldHVybiBmYWxzZTsKKyAgICAgICAgcmV0dXJuIG1TZXNzaW9uQmluZGVyLmFzQmluZGVyKCkgPT0gb3RoZXIuZ2V0U2Vzc2lvbkJpbmRlcigpLmFzQmluZGVyKCk7CisgICAgfQorCisgICAgcHJpdmF0ZSB2b2lkIGFkZENhbGxiYWNrTG9ja2VkKENhbGxiYWNrIGNiLCBIYW5kbGVyIGhhbmRsZXIpIHsKKyAgICAgICAgaWYgKGdldEhhbmRsZXJGb3JDYWxsYmFja0xvY2tlZChjYikgIT0gbnVsbCkgeworICAgICAgICAgICAgTG9nLncoVEFHLCAiQ2FsbGJhY2sgaXMgYWxyZWFkeSBhZGRlZCwgaWdub3JpbmciKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICBNZXNzYWdlSGFuZGxlciBob2xkZXIgPSBuZXcgTWVzc2FnZUhhbmRsZXIoaGFuZGxlci5nZXRMb29wZXIoKSwgY2IpOworICAgICAgICBtQ2FsbGJhY2tzLmFkZChob2xkZXIpOworICAgICAgICBob2xkZXIubVJlZ2lzdGVyZWQgPSB0cnVlOworCisgICAgICAgIGlmICghbUNiUmVnaXN0ZXJlZCkgeworICAgICAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgICAgICBtU2Vzc2lvbkJpbmRlci5yZWdpc3RlckNhbGxiYWNrTGlzdGVuZXIoIm1Db250ZXh0LmdldE9wUGFja2FnZU5hbWUoKSIsIG1DYlN0dWIpOworICAgICAgICAgICAgICAgIG1DYlJlZ2lzdGVyZWQgPSB0cnVlOworICAgICAgICAgICAgfSBjYXRjaCAoUmVtb3RlRXhjZXB0aW9uIGUpIHsKKyAgICAgICAgICAgICAgICBMb2cuZShUQUcsICJEZWFkIG9iamVjdCBpbiByZWdpc3RlckNhbGxiYWNrIiwgZSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKKyAgICBwcml2YXRlIGJvb2xlYW4gcmVtb3ZlQ2FsbGJhY2tMb2NrZWQoQ2FsbGJhY2sgY2IpIHsKKyAgICAgICAgYm9vbGVhbiBzdWNjZXNzID0gZmFsc2U7CisgICAgICAgIGZvciAoaW50IGkgPSBtQ2FsbGJhY2tzLnNpemUoKSAtIDE7IGkgPj0gMDsgaS0tKSB7CisgICAgICAgICAgICBNZXNzYWdlSGFuZGxlciBoYW5kbGVyID0gbUNhbGxiYWNrcy5nZXQoaSk7CisgICAgICAgICAgICBpZiAoY2IgPT0gaGFuZGxlci5tQ2FsbGJhY2spIHsKKyAgICAgICAgICAgICAgICBtQ2FsbGJhY2tzLnJlbW92ZShpKTsKKyAgICAgICAgICAgICAgICBzdWNjZXNzID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICBoYW5kbGVyLm1SZWdpc3RlcmVkID0gZmFsc2U7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgaWYgKG1DYlJlZ2lzdGVyZWQgJiYgbUNhbGxiYWNrcy5zaXplKCkgPT0gMCkgeworICAgICAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgICAgICBtU2Vzc2lvbkJpbmRlci51bnJlZ2lzdGVyQ2FsbGJhY2tMaXN0ZW5lcihtQ2JTdHViKTsKKyAgICAgICAgICAgIH0gY2F0Y2ggKFJlbW90ZUV4Y2VwdGlvbiBlKSB7CisgICAgICAgICAgICAgICAgTG9nLmUoVEFHLCAiRGVhZCBvYmplY3QgaW4gcmVtb3ZlQ2FsbGJhY2tMb2NrZWQiKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIG1DYlJlZ2lzdGVyZWQgPSBmYWxzZTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gc3VjY2VzczsKKyAgICB9CisKKyAgICBwcml2YXRlIE1lc3NhZ2VIYW5kbGVyIGdldEhhbmRsZXJGb3JDYWxsYmFja0xvY2tlZChDYWxsYmFjayBjYikgeworICAgICAgICBpZiAoY2IgPT0gbnVsbCkgeworICAgICAgICAgICAgdGhyb3cgbmV3IElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbigiQ2FsbGJhY2sgY2Fubm90IGJlIG51bGwiKTsKKyAgICAgICAgfQorICAgICAgICBmb3IgKGludCBpID0gbUNhbGxiYWNrcy5zaXplKCkgLSAxOyBpID49IDA7IGktLSkgeworICAgICAgICAgICAgTWVzc2FnZUhhbmRsZXIgaGFuZGxlciA9IG1DYWxsYmFja3MuZ2V0KGkpOworICAgICAgICAgICAgaWYgKGNiID09IGhhbmRsZXIubUNhbGxiYWNrKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGhhbmRsZXI7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIG51bGw7CisgICAgfQorCisgICAgcHJpdmF0ZSBmaW5hbCB2b2lkIHBvc3RNZXNzYWdlKGludCB3aGF0LCBPYmplY3Qgb2JqLCBCdW5kbGUgZGF0YSkgeworICAgICAgICBzeW5jaHJvbml6ZWQgKG1Mb2NrKSB7CisgICAgICAgICAgICBmb3IgKGludCBpID0gbUNhbGxiYWNrcy5zaXplKCkgLSAxOyBpID49IDA7IGktLSkgeworICAgICAgICAgICAgICAgIG1DYWxsYmFja3MuZ2V0KGkpLnBvc3Qod2hhdCwgb2JqLCBkYXRhKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKworICAgIC8qKgorICAgICAqIENhbGxiYWNrIGZvciByZWNlaXZpbmcgdXBkYXRlcyBmcm9tIHRoZSBzZXNzaW9uLiBBIENhbGxiYWNrIGNhbiBiZQorICAgICAqIHJlZ2lzdGVyZWQgdXNpbmcge0BsaW5rICNyZWdpc3RlckNhbGxiYWNrfS4KKyAgICAgKi8KKyAgICBwdWJsaWMgc3RhdGljIGFic3RyYWN0IGNsYXNzIENhbGxiYWNrIHsKKyAgICAgICAgLyoqCisgICAgICAgICAqIE92ZXJyaWRlIHRvIGhhbmRsZSB0aGUgc2Vzc2lvbiBiZWluZyBkZXN0cm95ZWQuIFRoZSBzZXNzaW9uIGlzIG5vCisgICAgICAgICAqIGxvbmdlciB2YWxpZCBhZnRlciB0aGlzIGNhbGwgYW5kIGNhbGxzIHRvIGl0IHdpbGwgYmUgaWdub3JlZC4KKyAgICAgICAgICovCisgICAgICAgIHB1YmxpYyB2b2lkIG9uU2Vzc2lvbkRlc3Ryb3llZCgpIHsKKyAgICAgICAgfQorCisgICAgICAgIC8qKgorICAgICAgICAgKiBPdmVycmlkZSB0byBoYW5kbGUgY3VzdG9tIGV2ZW50cyBzZW50IGJ5IHRoZSBzZXNzaW9uIG93bmVyIHdpdGhvdXQgYQorICAgICAgICAgKiBzcGVjaWZpZWQgaW50ZXJmYWNlLiBDb250cm9sbGVycyBzaG91bGQgb25seSBoYW5kbGUgdGhlc2UgZm9yCisgICAgICAgICAqIHNlc3Npb25zIHRoZXkgb3duLgorICAgICAgICAgKgorICAgICAgICAgKiBAcGFyYW0gZXZlbnQgVGhlIGV2ZW50IGZyb20gdGhlIHNlc3Npb24uCisgICAgICAgICAqIEBwYXJhbSBleHRyYXMgT3B0aW9uYWwgcGFyYW1ldGVycyBmb3IgdGhlIGV2ZW50LCBtYXkgYmUgbnVsbC4KKyAgICAgICAgICovCisgICAgICAgIHB1YmxpYyB2b2lkIG9uU2Vzc2lvbkV2ZW50KEBOb25OdWxsIFN0cmluZyBldmVudCwgQE51bGxhYmxlIEJ1bmRsZSBleHRyYXMpIHsKKyAgICAgICAgfQorCisgICAgICAgIC8qKgorICAgICAgICAgKiBPdmVycmlkZSB0byBoYW5kbGUgY2hhbmdlcyBpbiBwbGF5YmFjayBzdGF0ZS4KKyAgICAgICAgICoKKyAgICAgICAgICogQHBhcmFtIHN0YXRlIFRoZSBuZXcgcGxheWJhY2sgc3RhdGUgb2YgdGhlIHNlc3Npb24KKyAgICAgICAgICovCisgICAgICAgIHB1YmxpYyB2b2lkIG9uUGxheWJhY2tTdGF0ZUNoYW5nZWQoQE51bGxhYmxlIFBsYXliYWNrU3RhdGUgc3RhdGUpIHsKKyAgICAgICAgfQorCisgICAgICAgIC8qKgorICAgICAgICAgKiBPdmVycmlkZSB0byBoYW5kbGUgY2hhbmdlcyB0byB0aGUgY3VycmVudCBtZXRhZGF0YS4KKyAgICAgICAgICoKKyAgICAgICAgICogQHBhcmFtIG1ldGFkYXRhIFRoZSBjdXJyZW50IG1ldGFkYXRhIGZvciB0aGUgc2Vzc2lvbiBvciBudWxsIGlmIG5vbmUuCisgICAgICAgICAqIEBzZWUgTWVkaWFNZXRhZGF0YQorICAgICAgICAgKi8KKyAgICAgICAgcHVibGljIHZvaWQgb25NZXRhZGF0YUNoYW5nZWQoQE51bGxhYmxlIE1lZGlhTWV0YWRhdGEgbWV0YWRhdGEpIHsKKyAgICAgICAgfQorCisgICAgICAgIC8qKgorICAgICAgICAgKiBPdmVycmlkZSB0byBoYW5kbGUgY2hhbmdlcyB0byBpdGVtcyBpbiB0aGUgcXVldWUuCisgICAgICAgICAqCisgICAgICAgICAqIEBwYXJhbSBxdWV1ZSBBIGxpc3Qgb2YgaXRlbXMgaW4gdGhlIGN1cnJlbnQgcGxheSBxdWV1ZS4gSXQgc2hvdWxkCisgICAgICAgICAqICAgICAgICAgICAgaW5jbHVkZSB0aGUgY3VycmVudGx5IHBsYXlpbmcgaXRlbSBhcyB3ZWxsIGFzIHByZXZpb3VzIGFuZAorICAgICAgICAgKiAgICAgICAgICAgIHVwY29taW5nIGl0ZW1zIGlmIGFwcGxpY2FibGUuCisgICAgICAgICAqIEBzZWUgTWVkaWFTZXNzaW9uLlF1ZXVlSXRlbQorICAgICAgICAgKi8KKyAgICAgICAgcHVibGljIHZvaWQgb25RdWV1ZUNoYW5nZWQoQE51bGxhYmxlIExpc3Q8TWVkaWFTZXNzaW9uLlF1ZXVlSXRlbT4gcXVldWUpIHsKKyAgICAgICAgfQorCisgICAgICAgIC8qKgorICAgICAgICAgKiBPdmVycmlkZSB0byBoYW5kbGUgY2hhbmdlcyB0byB0aGUgcXVldWUgdGl0bGUuCisgICAgICAgICAqCisgICAgICAgICAqIEBwYXJhbSB0aXRsZSBUaGUgdGl0bGUgdGhhdCBzaG91bGQgYmUgZGlzcGxheWVkIGFsb25nIHdpdGggdGhlIHBsYXkgcXVldWUgc3VjaCBhcworICAgICAgICAgKiAgICAgICAgICAgICAgIk5vdyBQbGF5aW5nIi4gTWF5IGJlIG51bGwgaWYgdGhlcmUgaXMgbm8gc3VjaCB0aXRsZS4KKyAgICAgICAgICovCisgICAgICAgIHB1YmxpYyB2b2lkIG9uUXVldWVUaXRsZUNoYW5nZWQoQE51bGxhYmxlIENoYXJTZXF1ZW5jZSB0aXRsZSkgeworICAgICAgICB9CisKKyAgICAgICAgLyoqCisgICAgICAgICAqIE92ZXJyaWRlIHRvIGhhbmRsZSBjaGFuZ2VzIHRvIHRoZSB7QGxpbmsgTWVkaWFTZXNzaW9ufSBleHRyYXMuCisgICAgICAgICAqCisgICAgICAgICAqIEBwYXJhbSBleHRyYXMgVGhlIGV4dHJhcyB0aGF0IGNhbiBpbmNsdWRlIG90aGVyIGluZm9ybWF0aW9uIGFzc29jaWF0ZWQgd2l0aCB0aGUKKyAgICAgICAgICogICAgICAgICAgICAgICB7QGxpbmsgTWVkaWFTZXNzaW9ufS4KKyAgICAgICAgICovCisgICAgICAgIHB1YmxpYyB2b2lkIG9uRXh0cmFzQ2hhbmdlZChATnVsbGFibGUgQnVuZGxlIGV4dHJhcykgeworICAgICAgICB9CisKKyAgICAgICAgLyoqCisgICAgICAgICAqIE92ZXJyaWRlIHRvIGhhbmRsZSBjaGFuZ2VzIHRvIHRoZSBhdWRpbyBpbmZvLgorICAgICAgICAgKgorICAgICAgICAgKiBAcGFyYW0gaW5mbyBUaGUgY3VycmVudCBhdWRpbyBpbmZvIGZvciB0aGlzIHNlc3Npb24uCisgICAgICAgICAqLworICAgICAgICBwdWJsaWMgdm9pZCBvbkF1ZGlvSW5mb0NoYW5nZWQoUGxheWJhY2tJbmZvIGluZm8pIHsKKyAgICAgICAgfQorICAgIH0KKworICAgIC8qKgorICAgICAqIEludGVyZmFjZSBmb3IgY29udHJvbGxpbmcgbWVkaWEgcGxheWJhY2sgb24gYSBzZXNzaW9uLiBUaGlzIGFsbG93cyBhbiBhcHAKKyAgICAgKiB0byBzZW5kIG1lZGlhIHRyYW5zcG9ydCBjb21tYW5kcyB0byB0aGUgc2Vzc2lvbi4KKyAgICAgKi8KKyAgICBwdWJsaWMgZmluYWwgY2xhc3MgVHJhbnNwb3J0Q29udHJvbHMgeworICAgICAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgVEFHID0gIlRyYW5zcG9ydENvbnRyb2xsZXIiOworCisgICAgICAgIHByaXZhdGUgVHJhbnNwb3J0Q29udHJvbHMoKSB7CisgICAgICAgIH0KKworICAgICAgICAvKioKKyAgICAgICAgICogUmVxdWVzdCB0aGF0IHRoZSBwbGF5ZXIgcHJlcGFyZSBpdHMgcGxheWJhY2suIEluIG90aGVyIHdvcmRzLCBvdGhlciBzZXNzaW9ucyBjYW4gY29udGludWUKKyAgICAgICAgICogdG8gcGxheSBkdXJpbmcgdGhlIHByZXBhcmF0aW9uIG9mIHRoaXMgc2Vzc2lvbi4gVGhpcyBtZXRob2QgY2FuIGJlIHVzZWQgdG8gc3BlZWQgdXAgdGhlCisgICAgICAgICAqIHN0YXJ0IG9mIHRoZSBwbGF5YmFjay4gT25jZSB0aGUgcHJlcGFyYXRpb24gaXMgZG9uZSwgdGhlIHNlc3Npb24gd2lsbCBjaGFuZ2UgaXRzIHBsYXliYWNrCisgICAgICAgICAqIHN0YXRlIHRvIHtAbGluayBQbGF5YmFja1N0YXRlI1NUQVRFX1BBVVNFRH0uIEFmdGVyd2FyZHMsIHtAbGluayAjcGxheX0gY2FuIGJlIGNhbGxlZCB0bworICAgICAgICAgKiBzdGFydCBwbGF5YmFjay4KKyAgICAgICAgICovCisgICAgICAgIHB1YmxpYyB2b2lkIHByZXBhcmUoKSB7CisgICAgICAgICAgICB0cnkgeworICAgICAgICAgICAgICAgIG1TZXNzaW9uQmluZGVyLnByZXBhcmUoIm1Db250ZXh0LmdldE9wUGFja2FnZU5hbWUoKSIsIG1DYlN0dWIpOworICAgICAgICAgICAgfSBjYXRjaCAoUmVtb3RlRXhjZXB0aW9uIGUpIHsKKyAgICAgICAgICAgICAgICBMb2cud3RmKFRBRywgIkVycm9yIGNhbGxpbmcgcHJlcGFyZS4iLCBlKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIC8qKgorICAgICAgICAgKiBSZXF1ZXN0IHRoYXQgdGhlIHBsYXllciBwcmVwYXJlIHBsYXliYWNrIGZvciBhIHNwZWNpZmljIG1lZGlhIGlkLiBJbiBvdGhlciB3b3Jkcywgb3RoZXIKKyAgICAgICAgICogc2Vzc2lvbnMgY2FuIGNvbnRpbnVlIHRvIHBsYXkgZHVyaW5nIHRoZSBwcmVwYXJhdGlvbiBvZiB0aGlzIHNlc3Npb24uIFRoaXMgbWV0aG9kIGNhbiBiZQorICAgICAgICAgKiB1c2VkIHRvIHNwZWVkIHVwIHRoZSBzdGFydCBvZiB0aGUgcGxheWJhY2suIE9uY2UgdGhlIHByZXBhcmF0aW9uIGlzIGRvbmUsIHRoZSBzZXNzaW9uCisgICAgICAgICAqIHdpbGwgY2hhbmdlIGl0cyBwbGF5YmFjayBzdGF0ZSB0byB7QGxpbmsgUGxheWJhY2tTdGF0ZSNTVEFURV9QQVVTRUR9LiBBZnRlcndhcmRzLAorICAgICAgICAgKiB7QGxpbmsgI3BsYXl9IGNhbiBiZSBjYWxsZWQgdG8gc3RhcnQgcGxheWJhY2suIElmIHRoZSBwcmVwYXJhdGlvbiBpcyBub3QgbmVlZGVkLAorICAgICAgICAgKiB7QGxpbmsgI3BsYXlGcm9tTWVkaWFJZH0gY2FuIGJlIGRpcmVjdGx5IGNhbGxlZCB3aXRob3V0IHRoaXMgbWV0aG9kLgorICAgICAgICAgKgorICAgICAgICAgKiBAcGFyYW0gbWVkaWFJZCBUaGUgaWQgb2YgdGhlIHJlcXVlc3RlZCBtZWRpYS4KKyAgICAgICAgICogQHBhcmFtIGV4dHJhcyBPcHRpb25hbCBleHRyYXMgdGhhdCBjYW4gaW5jbHVkZSBleHRyYSBpbmZvcm1hdGlvbiBhYm91dCB0aGUgbWVkaWEgaXRlbQorICAgICAgICAgKiAgICAgICAgICAgICAgIHRvIGJlIHByZXBhcmVkLgorICAgICAgICAgKi8KKyAgICAgICAgcHVibGljIHZvaWQgcHJlcGFyZUZyb21NZWRpYUlkKFN0cmluZyBtZWRpYUlkLCBCdW5kbGUgZXh0cmFzKSB7CisgICAgICAgICAgICBpZiAoVGV4dFV0aWxzLmlzRW1wdHkobWVkaWFJZCkpIHsKKyAgICAgICAgICAgICAgICB0aHJvdyBuZXcgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKAorICAgICAgICAgICAgICAgICAgICAgICAgIllvdSBtdXN0IHNwZWNpZnkgYSBub24tZW1wdHkgU3RyaW5nIGZvciBwcmVwYXJlRnJvbU1lZGlhSWQuIik7CisgICAgICAgICAgICB9CisgICAgICAgICAgICB0cnkgeworICAgICAgICAgICAgICAgIG1TZXNzaW9uQmluZGVyLnByZXBhcmVGcm9tTWVkaWFJZCgibUNvbnRleHQuZ2V0T3BQYWNrYWdlTmFtZSgpIiwgbUNiU3R1YiwgbWVkaWFJZCwKKyAgICAgICAgICAgICAgICAgICAgICAgIGV4dHJhcyk7CisgICAgICAgICAgICB9IGNhdGNoIChSZW1vdGVFeGNlcHRpb24gZSkgeworICAgICAgICAgICAgICAgIExvZy53dGYoVEFHLCAiRXJyb3IgY2FsbGluZyBwcmVwYXJlKCIgKyBtZWRpYUlkICsgIikuIiwgZSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICAvKioKKyAgICAgICAgICogUmVxdWVzdCB0aGF0IHRoZSBwbGF5ZXIgcHJlcGFyZSBwbGF5YmFjayBmb3IgYSBzcGVjaWZpYyBzZWFyY2ggcXVlcnkuIEFuIGVtcHR5IG9yIG51bGwKKyAgICAgICAgICogcXVlcnkgc2hvdWxkIGJlIHRyZWF0ZWQgYXMgYSByZXF1ZXN0IHRvIHByZXBhcmUgYW55IG11c2ljLiBJbiBvdGhlciB3b3Jkcywgb3RoZXIgc2Vzc2lvbnMKKyAgICAgICAgICogY2FuIGNvbnRpbnVlIHRvIHBsYXkgZHVyaW5nIHRoZSBwcmVwYXJhdGlvbiBvZiB0aGlzIHNlc3Npb24uIFRoaXMgbWV0aG9kIGNhbiBiZSB1c2VkIHRvCisgICAgICAgICAqIHNwZWVkIHVwIHRoZSBzdGFydCBvZiB0aGUgcGxheWJhY2suIE9uY2UgdGhlIHByZXBhcmF0aW9uIGlzIGRvbmUsIHRoZSBzZXNzaW9uIHdpbGwKKyAgICAgICAgICogY2hhbmdlIGl0cyBwbGF5YmFjayBzdGF0ZSB0byB7QGxpbmsgUGxheWJhY2tTdGF0ZSNTVEFURV9QQVVTRUR9LiBBZnRlcndhcmRzLAorICAgICAgICAgKiB7QGxpbmsgI3BsYXl9IGNhbiBiZSBjYWxsZWQgdG8gc3RhcnQgcGxheWJhY2suIElmIHRoZSBwcmVwYXJhdGlvbiBpcyBub3QgbmVlZGVkLAorICAgICAgICAgKiB7QGxpbmsgI3BsYXlGcm9tU2VhcmNofSBjYW4gYmUgZGlyZWN0bHkgY2FsbGVkIHdpdGhvdXQgdGhpcyBtZXRob2QuCisgICAgICAgICAqCisgICAgICAgICAqIEBwYXJhbSBxdWVyeSBUaGUgc2VhcmNoIHF1ZXJ5LgorICAgICAgICAgKiBAcGFyYW0gZXh0cmFzIE9wdGlvbmFsIGV4dHJhcyB0aGF0IGNhbiBpbmNsdWRlIGV4dHJhIGluZm9ybWF0aW9uCisgICAgICAgICAqICAgICAgICAgICAgICAgYWJvdXQgdGhlIHF1ZXJ5LgorICAgICAgICAgKi8KKyAgICAgICAgcHVibGljIHZvaWQgcHJlcGFyZUZyb21TZWFyY2goU3RyaW5nIHF1ZXJ5LCBCdW5kbGUgZXh0cmFzKSB7CisgICAgICAgICAgICBpZiAocXVlcnkgPT0gbnVsbCkgeworICAgICAgICAgICAgICAgIC8vIFRoaXMgaXMgdG8gcmVtYWluIGNvbXBhdGlibGUgd2l0aAorICAgICAgICAgICAgICAgIC8vIElOVEVOVF9BQ1RJT05fTUVESUFfUExBWV9GUk9NX1NFQVJDSAorICAgICAgICAgICAgICAgIHF1ZXJ5ID0gIiI7CisgICAgICAgICAgICB9CisgICAgICAgICAgICB0cnkgeworICAgICAgICAgICAgICAgIG1TZXNzaW9uQmluZGVyLnByZXBhcmVGcm9tU2VhcmNoKCJtQ29udGV4dC5nZXRPcFBhY2thZ2VOYW1lKCkiLCBtQ2JTdHViLCBxdWVyeSwKKyAgICAgICAgICAgICAgICAgICAgICAgIGV4dHJhcyk7CisgICAgICAgICAgICB9IGNhdGNoIChSZW1vdGVFeGNlcHRpb24gZSkgeworICAgICAgICAgICAgICAgIExvZy53dGYoVEFHLCAiRXJyb3IgY2FsbGluZyBwcmVwYXJlKCIgKyBxdWVyeSArICIpLiIsIGUpOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgLyoqCisgICAgICAgICAqIFJlcXVlc3QgdGhhdCB0aGUgcGxheWVyIHByZXBhcmUgcGxheWJhY2sgZm9yIGEgc3BlY2lmaWMge0BsaW5rIFVyaX0uIEluIG90aGVyIHdvcmRzLAorICAgICAgICAgKiBvdGhlciBzZXNzaW9ucyBjYW4gY29udGludWUgdG8gcGxheSBkdXJpbmcgdGhlIHByZXBhcmF0aW9uIG9mIHRoaXMgc2Vzc2lvbi4gVGhpcyBtZXRob2QKKyAgICAgICAgICogY2FuIGJlIHVzZWQgdG8gc3BlZWQgdXAgdGhlIHN0YXJ0IG9mIHRoZSBwbGF5YmFjay4gT25jZSB0aGUgcHJlcGFyYXRpb24gaXMgZG9uZSwgdGhlCisgICAgICAgICAqIHNlc3Npb24gd2lsbCBjaGFuZ2UgaXRzIHBsYXliYWNrIHN0YXRlIHRvIHtAbGluayBQbGF5YmFja1N0YXRlI1NUQVRFX1BBVVNFRH0uIEFmdGVyd2FyZHMsCisgICAgICAgICAqIHtAbGluayAjcGxheX0gY2FuIGJlIGNhbGxlZCB0byBzdGFydCBwbGF5YmFjay4gSWYgdGhlIHByZXBhcmF0aW9uIGlzIG5vdCBuZWVkZWQsCisgICAgICAgICAqIHtAbGluayAjcGxheUZyb21Vcml9IGNhbiBiZSBkaXJlY3RseSBjYWxsZWQgd2l0aG91dCB0aGlzIG1ldGhvZC4KKyAgICAgICAgICoKKyAgICAgICAgICogQHBhcmFtIHVyaSBUaGUgVVJJIG9mIHRoZSByZXF1ZXN0ZWQgbWVkaWEuCisgICAgICAgICAqIEBwYXJhbSBleHRyYXMgT3B0aW9uYWwgZXh0cmFzIHRoYXQgY2FuIGluY2x1ZGUgZXh0cmEgaW5mb3JtYXRpb24gYWJvdXQgdGhlIG1lZGlhIGl0ZW0KKyAgICAgICAgICogICAgICAgICAgICAgICB0byBiZSBwcmVwYXJlZC4KKyAgICAgICAgICovCisgICAgICAgIHB1YmxpYyB2b2lkIHByZXBhcmVGcm9tVXJpKFVyaSB1cmksIEJ1bmRsZSBleHRyYXMpIHsKKyAgICAgICAgICAgIGlmICh1cmkgPT0gbnVsbCB8fCBVcmkuRU1QVFkuZXF1YWxzKHVyaSkpIHsKKyAgICAgICAgICAgICAgICB0aHJvdyBuZXcgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKAorICAgICAgICAgICAgICAgICAgICAgICAgIllvdSBtdXN0IHNwZWNpZnkgYSBub24tZW1wdHkgVXJpIGZvciBwcmVwYXJlRnJvbVVyaS4iKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHRyeSB7CisgICAgICAgICAgICAgICAgbVNlc3Npb25CaW5kZXIucHJlcGFyZUZyb21VcmkoIm1Db250ZXh0LmdldE9wUGFja2FnZU5hbWUoKSIsIG1DYlN0dWIsIHVyaSwgZXh0cmFzKTsKKyAgICAgICAgICAgIH0gY2F0Y2ggKFJlbW90ZUV4Y2VwdGlvbiBlKSB7CisgICAgICAgICAgICAgICAgTG9nLnd0ZihUQUcsICJFcnJvciBjYWxsaW5nIHByZXBhcmUoIiArIHVyaSArICIpLiIsIGUpOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgLyoqCisgICAgICAgICAqIFJlcXVlc3QgdGhhdCB0aGUgcGxheWVyIHN0YXJ0IGl0cyBwbGF5YmFjayBhdCBpdHMgY3VycmVudCBwb3NpdGlvbi4KKyAgICAgICAgICovCisgICAgICAgIHB1YmxpYyB2b2lkIHBsYXkoKSB7CisgICAgICAgICAgICB0cnkgeworICAgICAgICAgICAgICAgIG1TZXNzaW9uQmluZGVyLnBsYXkoIm1Db250ZXh0LmdldE9wUGFja2FnZU5hbWUoKSIsIG1DYlN0dWIpOworICAgICAgICAgICAgfSBjYXRjaCAoUmVtb3RlRXhjZXB0aW9uIGUpIHsKKyAgICAgICAgICAgICAgICBMb2cud3RmKFRBRywgIkVycm9yIGNhbGxpbmcgcGxheS4iLCBlKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIC8qKgorICAgICAgICAgKiBSZXF1ZXN0IHRoYXQgdGhlIHBsYXllciBzdGFydCBwbGF5YmFjayBmb3IgYSBzcGVjaWZpYyBtZWRpYSBpZC4KKyAgICAgICAgICoKKyAgICAgICAgICogQHBhcmFtIG1lZGlhSWQgVGhlIGlkIG9mIHRoZSByZXF1ZXN0ZWQgbWVkaWEuCisgICAgICAgICAqIEBwYXJhbSBleHRyYXMgT3B0aW9uYWwgZXh0cmFzIHRoYXQgY2FuIGluY2x1ZGUgZXh0cmEgaW5mb3JtYXRpb24gYWJvdXQgdGhlIG1lZGlhIGl0ZW0KKyAgICAgICAgICogICAgICAgICAgICAgICB0byBiZSBwbGF5ZWQuCisgICAgICAgICAqLworICAgICAgICBwdWJsaWMgdm9pZCBwbGF5RnJvbU1lZGlhSWQoU3RyaW5nIG1lZGlhSWQsIEJ1bmRsZSBleHRyYXMpIHsKKyAgICAgICAgICAgIGlmIChUZXh0VXRpbHMuaXNFbXB0eShtZWRpYUlkKSkgeworICAgICAgICAgICAgICAgIHRocm93IG5ldyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oCisgICAgICAgICAgICAgICAgICAgICAgICAiWW91IG11c3Qgc3BlY2lmeSBhIG5vbi1lbXB0eSBTdHJpbmcgZm9yIHBsYXlGcm9tTWVkaWFJZC4iKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHRyeSB7CisgICAgICAgICAgICAgICAgbVNlc3Npb25CaW5kZXIucGxheUZyb21NZWRpYUlkKCJtQ29udGV4dC5nZXRPcFBhY2thZ2VOYW1lKCkiLCBtQ2JTdHViLCBtZWRpYUlkLAorICAgICAgICAgICAgICAgICAgICAgICAgZXh0cmFzKTsKKyAgICAgICAgICAgIH0gY2F0Y2ggKFJlbW90ZUV4Y2VwdGlvbiBlKSB7CisgICAgICAgICAgICAgICAgTG9nLnd0ZihUQUcsICJFcnJvciBjYWxsaW5nIHBsYXkoIiArIG1lZGlhSWQgKyAiKS4iLCBlKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIC8qKgorICAgICAgICAgKiBSZXF1ZXN0IHRoYXQgdGhlIHBsYXllciBzdGFydCBwbGF5YmFjayBmb3IgYSBzcGVjaWZpYyBzZWFyY2ggcXVlcnkuCisgICAgICAgICAqIEFuIGVtcHR5IG9yIG51bGwgcXVlcnkgc2hvdWxkIGJlIHRyZWF0ZWQgYXMgYSByZXF1ZXN0IHRvIHBsYXkgYW55CisgICAgICAgICAqIG11c2ljLgorICAgICAgICAgKgorICAgICAgICAgKiBAcGFyYW0gcXVlcnkgVGhlIHNlYXJjaCBxdWVyeS4KKyAgICAgICAgICogQHBhcmFtIGV4dHJhcyBPcHRpb25hbCBleHRyYXMgdGhhdCBjYW4gaW5jbHVkZSBleHRyYSBpbmZvcm1hdGlvbgorICAgICAgICAgKiAgICAgICAgICAgICAgIGFib3V0IHRoZSBxdWVyeS4KKyAgICAgICAgICovCisgICAgICAgIHB1YmxpYyB2b2lkIHBsYXlGcm9tU2VhcmNoKFN0cmluZyBxdWVyeSwgQnVuZGxlIGV4dHJhcykgeworICAgICAgICAgICAgaWYgKHF1ZXJ5ID09IG51bGwpIHsKKyAgICAgICAgICAgICAgICAvLyBUaGlzIGlzIHRvIHJlbWFpbiBjb21wYXRpYmxlIHdpdGgKKyAgICAgICAgICAgICAgICAvLyBJTlRFTlRfQUNUSU9OX01FRElBX1BMQVlfRlJPTV9TRUFSQ0gKKyAgICAgICAgICAgICAgICBxdWVyeSA9ICIiOworICAgICAgICAgICAgfQorICAgICAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgICAgICBtU2Vzc2lvbkJpbmRlci5wbGF5RnJvbVNlYXJjaCgibUNvbnRleHQuZ2V0T3BQYWNrYWdlTmFtZSgpIiwgbUNiU3R1YiwgcXVlcnksIGV4dHJhcyk7CisgICAgICAgICAgICB9IGNhdGNoIChSZW1vdGVFeGNlcHRpb24gZSkgeworICAgICAgICAgICAgICAgIExvZy53dGYoVEFHLCAiRXJyb3IgY2FsbGluZyBwbGF5KCIgKyBxdWVyeSArICIpLiIsIGUpOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgLyoqCisgICAgICAgICAqIFJlcXVlc3QgdGhhdCB0aGUgcGxheWVyIHN0YXJ0IHBsYXliYWNrIGZvciBhIHNwZWNpZmljIHtAbGluayBVcml9LgorICAgICAgICAgKgorICAgICAgICAgKiBAcGFyYW0gdXJpIFRoZSBVUkkgb2YgdGhlIHJlcXVlc3RlZCBtZWRpYS4KKyAgICAgICAgICogQHBhcmFtIGV4dHJhcyBPcHRpb25hbCBleHRyYXMgdGhhdCBjYW4gaW5jbHVkZSBleHRyYSBpbmZvcm1hdGlvbiBhYm91dCB0aGUgbWVkaWEgaXRlbQorICAgICAgICAgKiAgICAgICAgICAgICAgIHRvIGJlIHBsYXllZC4KKyAgICAgICAgICovCisgICAgICAgIHB1YmxpYyB2b2lkIHBsYXlGcm9tVXJpKFVyaSB1cmksIEJ1bmRsZSBleHRyYXMpIHsKKyAgICAgICAgICAgIGlmICh1cmkgPT0gbnVsbCB8fCBVcmkuRU1QVFkuZXF1YWxzKHVyaSkpIHsKKyAgICAgICAgICAgICAgICB0aHJvdyBuZXcgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKAorICAgICAgICAgICAgICAgICAgICAgICAgIllvdSBtdXN0IHNwZWNpZnkgYSBub24tZW1wdHkgVXJpIGZvciBwbGF5RnJvbVVyaS4iKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHRyeSB7CisgICAgICAgICAgICAgICAgbVNlc3Npb25CaW5kZXIucGxheUZyb21VcmkoIm1Db250ZXh0LmdldE9wUGFja2FnZU5hbWUoKSIsIG1DYlN0dWIsIHVyaSwgZXh0cmFzKTsKKyAgICAgICAgICAgIH0gY2F0Y2ggKFJlbW90ZUV4Y2VwdGlvbiBlKSB7CisgICAgICAgICAgICAgICAgTG9nLnd0ZihUQUcsICJFcnJvciBjYWxsaW5nIHBsYXkoIiArIHVyaSArICIpLiIsIGUpOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgLyoqCisgICAgICAgICAqIFBsYXkgYW4gaXRlbSB3aXRoIGEgc3BlY2lmaWMgaWQgaW4gdGhlIHBsYXkgcXVldWUuIElmIHlvdSBzcGVjaWZ5IGFuCisgICAgICAgICAqIGlkIHRoYXQgaXMgbm90IGluIHRoZSBwbGF5IHF1ZXVlLCB0aGUgYmVoYXZpb3IgaXMgdW5kZWZpbmVkLgorICAgICAgICAgKi8KKyAgICAgICAgcHVibGljIHZvaWQgc2tpcFRvUXVldWVJdGVtKGxvbmcgaWQpIHsKKyAgICAgICAgICAgIHRyeSB7CisgICAgICAgICAgICAgICAgbVNlc3Npb25CaW5kZXIuc2tpcFRvUXVldWVJdGVtKCJtQ29udGV4dC5nZXRPcFBhY2thZ2VOYW1lKCkiLCBtQ2JTdHViLCBpZCk7CisgICAgICAgICAgICB9IGNhdGNoIChSZW1vdGVFeGNlcHRpb24gZSkgeworICAgICAgICAgICAgICAgIExvZy53dGYoVEFHLCAiRXJyb3IgY2FsbGluZyBza2lwVG9JdGVtKCIgKyBpZCArICIpLiIsIGUpOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgLyoqCisgICAgICAgICAqIFJlcXVlc3QgdGhhdCB0aGUgcGxheWVyIHBhdXNlIGl0cyBwbGF5YmFjayBhbmQgc3RheSBhdCBpdHMgY3VycmVudAorICAgICAgICAgKiBwb3NpdGlvbi4KKyAgICAgICAgICovCisgICAgICAgIHB1YmxpYyB2b2lkIHBhdXNlKCkgeworICAgICAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgICAgICBtU2Vzc2lvbkJpbmRlci5wYXVzZSgibUNvbnRleHQuZ2V0T3BQYWNrYWdlTmFtZSgpIiwgbUNiU3R1Yik7CisgICAgICAgICAgICB9IGNhdGNoIChSZW1vdGVFeGNlcHRpb24gZSkgeworICAgICAgICAgICAgICAgIExvZy53dGYoVEFHLCAiRXJyb3IgY2FsbGluZyBwYXVzZS4iLCBlKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIC8qKgorICAgICAgICAgKiBSZXF1ZXN0IHRoYXQgdGhlIHBsYXllciBzdG9wIGl0cyBwbGF5YmFjazsgaXQgbWF5IGNsZWFyIGl0cyBzdGF0ZSBpbgorICAgICAgICAgKiB3aGF0ZXZlciB3YXkgaXMgYXBwcm9wcmlhdGUuCisgICAgICAgICAqLworICAgICAgICBwdWJsaWMgdm9pZCBzdG9wKCkgeworICAgICAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgICAgICBtU2Vzc2lvbkJpbmRlci5zdG9wKCJtQ29udGV4dC5nZXRPcFBhY2thZ2VOYW1lKCkiLCBtQ2JTdHViKTsKKyAgICAgICAgICAgIH0gY2F0Y2ggKFJlbW90ZUV4Y2VwdGlvbiBlKSB7CisgICAgICAgICAgICAgICAgTG9nLnd0ZihUQUcsICJFcnJvciBjYWxsaW5nIHN0b3AuIiwgZSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICAvKioKKyAgICAgICAgICogTW92ZSB0byBhIG5ldyBsb2NhdGlvbiBpbiB0aGUgbWVkaWEgc3RyZWFtLgorICAgICAgICAgKgorICAgICAgICAgKiBAcGFyYW0gcG9zIFBvc2l0aW9uIHRvIG1vdmUgdG8sIGluIG1pbGxpc2Vjb25kcy4KKyAgICAgICAgICovCisgICAgICAgIHB1YmxpYyB2b2lkIHNlZWtUbyhsb25nIHBvcykgeworICAgICAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgICAgICBtU2Vzc2lvbkJpbmRlci5zZWVrVG8oIm1Db250ZXh0LmdldE9wUGFja2FnZU5hbWUoKSIsIG1DYlN0dWIsIHBvcyk7CisgICAgICAgICAgICB9IGNhdGNoIChSZW1vdGVFeGNlcHRpb24gZSkgeworICAgICAgICAgICAgICAgIExvZy53dGYoVEFHLCAiRXJyb3IgY2FsbGluZyBzZWVrVG8uIiwgZSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICAvKioKKyAgICAgICAgICogU3RhcnQgZmFzdCBmb3J3YXJkaW5nLiBJZiBwbGF5YmFjayBpcyBhbHJlYWR5IGZhc3QgZm9yd2FyZGluZyB0aGlzCisgICAgICAgICAqIG1heSBpbmNyZWFzZSB0aGUgcmF0ZS4KKyAgICAgICAgICovCisgICAgICAgIHB1YmxpYyB2b2lkIGZhc3RGb3J3YXJkKCkgeworICAgICAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgICAgICBtU2Vzc2lvbkJpbmRlci5mYXN0Rm9yd2FyZCgibUNvbnRleHQuZ2V0T3BQYWNrYWdlTmFtZSgpIiwgbUNiU3R1Yik7CisgICAgICAgICAgICB9IGNhdGNoIChSZW1vdGVFeGNlcHRpb24gZSkgeworICAgICAgICAgICAgICAgIExvZy53dGYoVEFHLCAiRXJyb3IgY2FsbGluZyBmYXN0Rm9yd2FyZC4iLCBlKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIC8qKgorICAgICAgICAgKiBTa2lwIHRvIHRoZSBuZXh0IGl0ZW0uCisgICAgICAgICAqLworICAgICAgICBwdWJsaWMgdm9pZCBza2lwVG9OZXh0KCkgeworICAgICAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgICAgICBtU2Vzc2lvbkJpbmRlci5uZXh0KCJtQ29udGV4dC5nZXRPcFBhY2thZ2VOYW1lKCkiLCBtQ2JTdHViKTsKKyAgICAgICAgICAgIH0gY2F0Y2ggKFJlbW90ZUV4Y2VwdGlvbiBlKSB7CisgICAgICAgICAgICAgICAgTG9nLnd0ZihUQUcsICJFcnJvciBjYWxsaW5nIG5leHQuIiwgZSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICAvKioKKyAgICAgICAgICogU3RhcnQgcmV3aW5kaW5nLiBJZiBwbGF5YmFjayBpcyBhbHJlYWR5IHJld2luZGluZyB0aGlzIG1heSBpbmNyZWFzZQorICAgICAgICAgKiB0aGUgcmF0ZS4KKyAgICAgICAgICovCisgICAgICAgIHB1YmxpYyB2b2lkIHJld2luZCgpIHsKKyAgICAgICAgICAgIHRyeSB7CisgICAgICAgICAgICAgICAgbVNlc3Npb25CaW5kZXIucmV3aW5kKCJtQ29udGV4dC5nZXRPcFBhY2thZ2VOYW1lKCkiLCBtQ2JTdHViKTsKKyAgICAgICAgICAgIH0gY2F0Y2ggKFJlbW90ZUV4Y2VwdGlvbiBlKSB7CisgICAgICAgICAgICAgICAgTG9nLnd0ZihUQUcsICJFcnJvciBjYWxsaW5nIHJld2luZC4iLCBlKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIC8qKgorICAgICAgICAgKiBTa2lwIHRvIHRoZSBwcmV2aW91cyBpdGVtLgorICAgICAgICAgKi8KKyAgICAgICAgcHVibGljIHZvaWQgc2tpcFRvUHJldmlvdXMoKSB7CisgICAgICAgICAgICB0cnkgeworICAgICAgICAgICAgICAgIG1TZXNzaW9uQmluZGVyLnByZXZpb3VzKCJtQ29udGV4dC5nZXRPcFBhY2thZ2VOYW1lKCkiLCBtQ2JTdHViKTsKKyAgICAgICAgICAgIH0gY2F0Y2ggKFJlbW90ZUV4Y2VwdGlvbiBlKSB7CisgICAgICAgICAgICAgICAgTG9nLnd0ZihUQUcsICJFcnJvciBjYWxsaW5nIHByZXZpb3VzLiIsIGUpOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgLyoqCisgICAgICAgICAqIFJhdGUgdGhlIGN1cnJlbnQgY29udGVudC4gVGhpcyB3aWxsIGNhdXNlIHRoZSByYXRpbmcgdG8gYmUgc2V0IGZvcgorICAgICAgICAgKiB0aGUgY3VycmVudCB1c2VyLiBUaGUgUmF0aW5nIHR5cGUgbXVzdCBtYXRjaCB0aGUgdHlwZSByZXR1cm5lZCBieQorICAgICAgICAgKiB7QGxpbmsgI2dldFJhdGluZ1R5cGUoKX0uCisgICAgICAgICAqCisgICAgICAgICAqIEBwYXJhbSByYXRpbmcgVGhlIHJhdGluZyB0byBzZXQgZm9yIHRoZSBjdXJyZW50IGNvbnRlbnQKKyAgICAgICAgICovCisgICAgICAgIHB1YmxpYyB2b2lkIHNldFJhdGluZyhSYXRpbmcgcmF0aW5nKSB7CisgICAgICAgICAgICB0cnkgeworICAgICAgICAgICAgICAgIG1TZXNzaW9uQmluZGVyLnJhdGUoIm1Db250ZXh0LmdldE9wUGFja2FnZU5hbWUoKSIsIG1DYlN0dWIsIHJhdGluZyk7CisgICAgICAgICAgICB9IGNhdGNoIChSZW1vdGVFeGNlcHRpb24gZSkgeworICAgICAgICAgICAgICAgIExvZy53dGYoVEFHLCAiRXJyb3IgY2FsbGluZyByYXRlLiIsIGUpOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgLyoqCisgICAgICAgICAqIFNlbmQgYSBjdXN0b20gYWN0aW9uIGJhY2sgZm9yIHRoZSB7QGxpbmsgTWVkaWFTZXNzaW9ufSB0byBwZXJmb3JtLgorICAgICAgICAgKgorICAgICAgICAgKiBAcGFyYW0gY3VzdG9tQWN0aW9uIFRoZSBhY3Rpb24gdG8gcGVyZm9ybS4KKyAgICAgICAgICogQHBhcmFtIGFyZ3MgT3B0aW9uYWwgYXJndW1lbnRzIHRvIHN1cHBseSB0byB0aGUge0BsaW5rIE1lZGlhU2Vzc2lvbn0gZm9yIHRoaXMKKyAgICAgICAgICogICAgICAgICAgICAgY3VzdG9tIGFjdGlvbi4KKyAgICAgICAgICovCisgICAgICAgIHB1YmxpYyB2b2lkIHNlbmRDdXN0b21BY3Rpb24oQE5vbk51bGwgUGxheWJhY2tTdGF0ZS5DdXN0b21BY3Rpb24gY3VzdG9tQWN0aW9uLAorICAgICAgICAgICAgICAgIEBOdWxsYWJsZSBCdW5kbGUgYXJncykgeworICAgICAgICAgICAgaWYgKGN1c3RvbUFjdGlvbiA9PSBudWxsKSB7CisgICAgICAgICAgICAgICAgdGhyb3cgbmV3IElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbigiQ3VzdG9tQWN0aW9uIGNhbm5vdCBiZSBudWxsLiIpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgc2VuZEN1c3RvbUFjdGlvbihjdXN0b21BY3Rpb24uZ2V0QWN0aW9uKCksIGFyZ3MpOworICAgICAgICB9CisKKyAgICAgICAgLyoqCisgICAgICAgICAqIFNlbmQgdGhlIGlkIGFuZCBhcmdzIGZyb20gYSBjdXN0b20gYWN0aW9uIGJhY2sgZm9yIHRoZSB7QGxpbmsgTWVkaWFTZXNzaW9ufSB0byBwZXJmb3JtLgorICAgICAgICAgKgorICAgICAgICAgKiBAc2VlICNzZW5kQ3VzdG9tQWN0aW9uKFBsYXliYWNrU3RhdGUuQ3VzdG9tQWN0aW9uIGFjdGlvbiwgQnVuZGxlIGFyZ3MpCisgICAgICAgICAqIEBwYXJhbSBhY3Rpb24gVGhlIGFjdGlvbiBpZGVudGlmaWVyIG9mIHRoZSB7QGxpbmsgUGxheWJhY2tTdGF0ZS5DdXN0b21BY3Rpb259IGFzCisgICAgICAgICAqICAgICAgICAgICAgICAgc3BlY2lmaWVkIGJ5IHRoZSB7QGxpbmsgTWVkaWFTZXNzaW9ufS4KKyAgICAgICAgICogQHBhcmFtIGFyZ3MgT3B0aW9uYWwgYXJndW1lbnRzIHRvIHN1cHBseSB0byB0aGUge0BsaW5rIE1lZGlhU2Vzc2lvbn0gZm9yIHRoaXMKKyAgICAgICAgICogICAgICAgICAgICAgY3VzdG9tIGFjdGlvbi4KKyAgICAgICAgICovCisgICAgICAgIHB1YmxpYyB2b2lkIHNlbmRDdXN0b21BY3Rpb24oQE5vbk51bGwgU3RyaW5nIGFjdGlvbiwgQE51bGxhYmxlIEJ1bmRsZSBhcmdzKSB7CisgICAgICAgICAgICBpZiAoVGV4dFV0aWxzLmlzRW1wdHkoYWN0aW9uKSkgeworICAgICAgICAgICAgICAgIHRocm93IG5ldyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oIkN1c3RvbUFjdGlvbiBjYW5ub3QgYmUgbnVsbC4iKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHRyeSB7CisgICAgICAgICAgICAgICAgbVNlc3Npb25CaW5kZXIuc2VuZEN1c3RvbUFjdGlvbigibUNvbnRleHQuZ2V0T3BQYWNrYWdlTmFtZSgpIiwgbUNiU3R1YiwgYWN0aW9uLCBhcmdzKTsKKyAgICAgICAgICAgIH0gY2F0Y2ggKFJlbW90ZUV4Y2VwdGlvbiBlKSB7CisgICAgICAgICAgICAgICAgTG9nLmQoVEFHLCAiRGVhZCBvYmplY3QgaW4gc2VuZEN1c3RvbUFjdGlvbi4iLCBlKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKworICAgIC8qKgorICAgICAqIEhvbGRzIGluZm9ybWF0aW9uIGFib3V0IHRoZSBjdXJyZW50IHBsYXliYWNrIGFuZCBob3cgYXVkaW8gaXMgaGFuZGxlZCBmb3IKKyAgICAgKiB0aGlzIHNlc3Npb24uCisgICAgICovCisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBjbGFzcyBQbGF5YmFja0luZm8geworICAgICAgICAvKioKKyAgICAgICAgICogVGhlIHNlc3Npb24gdXNlcyByZW1vdGUgcGxheWJhY2suCisgICAgICAgICAqLworICAgICAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBQTEFZQkFDS19UWVBFX1JFTU9URSA9IDI7CisgICAgICAgIC8qKgorICAgICAgICAgKiBUaGUgc2Vzc2lvbiB1c2VzIGxvY2FsIHBsYXliYWNrLgorICAgICAgICAgKi8KKyAgICAgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgUExBWUJBQ0tfVFlQRV9MT0NBTCA9IDE7CisKKyAgICAgICAgcHJpdmF0ZSBmaW5hbCBpbnQgbVZvbHVtZVR5cGU7CisgICAgICAgIHByaXZhdGUgZmluYWwgaW50IG1Wb2x1bWVDb250cm9sOworICAgICAgICBwcml2YXRlIGZpbmFsIGludCBtTWF4Vm9sdW1lOworICAgICAgICBwcml2YXRlIGZpbmFsIGludCBtQ3VycmVudFZvbHVtZTsKKyAgICAgICAgcHJpdmF0ZSBmaW5hbCBBdWRpb0F0dHJpYnV0ZXMgbUF1ZGlvQXR0cnM7CisKKyAgICAgICAgLyoqCisgICAgICAgICAqIEBoaWRlCisgICAgICAgICAqLworICAgICAgICBwdWJsaWMgUGxheWJhY2tJbmZvKGludCB0eXBlLCBBdWRpb0F0dHJpYnV0ZXMgYXR0cnMsIGludCBjb250cm9sLCBpbnQgbWF4LCBpbnQgY3VycmVudCkgeworICAgICAgICAgICAgbVZvbHVtZVR5cGUgPSB0eXBlOworICAgICAgICAgICAgbUF1ZGlvQXR0cnMgPSBhdHRyczsKKyAgICAgICAgICAgIG1Wb2x1bWVDb250cm9sID0gY29udHJvbDsKKyAgICAgICAgICAgIG1NYXhWb2x1bWUgPSBtYXg7CisgICAgICAgICAgICBtQ3VycmVudFZvbHVtZSA9IGN1cnJlbnQ7CisgICAgICAgIH0KKworICAgICAgICAvKioKKyAgICAgICAgICogR2V0IHRoZSB0eXBlIG9mIHBsYXliYWNrIHdoaWNoIGFmZmVjdHMgdm9sdW1lIGhhbmRsaW5nLiBPbmUgb2Y6CisgICAgICAgICAqIDx1bD4KKyAgICAgICAgICogPGxpPntAbGluayAjUExBWUJBQ0tfVFlQRV9MT0NBTH08L2xpPgorICAgICAgICAgKiA8bGk+e0BsaW5rICNQTEFZQkFDS19UWVBFX1JFTU9URX08L2xpPgorICAgICAgICAgKiA8L3VsPgorICAgICAgICAgKgorICAgICAgICAgKiBAcmV0dXJuIFRoZSB0eXBlIG9mIHBsYXliYWNrIHRoaXMgc2Vzc2lvbiBpcyB1c2luZy4KKyAgICAgICAgICovCisgICAgICAgIHB1YmxpYyBpbnQgZ2V0UGxheWJhY2tUeXBlKCkgeworICAgICAgICAgICAgcmV0dXJuIG1Wb2x1bWVUeXBlOworICAgICAgICB9CisKKyAgICAgICAgLyoqCisgICAgICAgICAqIEdldCB0aGUgYXVkaW8gYXR0cmlidXRlcyBmb3IgdGhpcyBzZXNzaW9uLiBUaGUgYXR0cmlidXRlcyB3aWxsIGFmZmVjdAorICAgICAgICAgKiB2b2x1bWUgaGFuZGxpbmcgZm9yIHRoZSBzZXNzaW9uLiBXaGVuIHRoZSB2b2x1bWUgdHlwZSBpcworICAgICAgICAgKiB7QGxpbmsgUGxheWJhY2tJbmZvI1BMQVlCQUNLX1RZUEVfUkVNT1RFfSB0aGVzZSBtYXkgYmUgaWdub3JlZCBieSB0aGUKKyAgICAgICAgICogcmVtb3RlIHZvbHVtZSBoYW5kbGVyLgorICAgICAgICAgKgorICAgICAgICAgKiBAcmV0dXJuIFRoZSBhdHRyaWJ1dGVzIGZvciB0aGlzIHNlc3Npb24uCisgICAgICAgICAqLworICAgICAgICBwdWJsaWMgQXVkaW9BdHRyaWJ1dGVzIGdldEF1ZGlvQXR0cmlidXRlcygpIHsKKyAgICAgICAgICAgIHJldHVybiBtQXVkaW9BdHRyczsKKyAgICAgICAgfQorCisgICAgICAgIC8qKgorICAgICAgICAgKiBHZXQgdGhlIHR5cGUgb2Ygdm9sdW1lIGNvbnRyb2wgdGhhdCBjYW4gYmUgdXNlZC4gT25lIG9mOgorICAgICAgICAgKiA8dWw+CisgICAgICAgICAqIDxsaT57QGxpbmsgVm9sdW1lUHJvdmlkZXIjVk9MVU1FX0NPTlRST0xfQUJTT0xVVEV9PC9saT4KKyAgICAgICAgICogPGxpPntAbGluayBWb2x1bWVQcm92aWRlciNWT0xVTUVfQ09OVFJPTF9SRUxBVElWRX08L2xpPgorICAgICAgICAgKiA8bGk+e0BsaW5rIFZvbHVtZVByb3ZpZGVyI1ZPTFVNRV9DT05UUk9MX0ZJWEVEfTwvbGk+CisgICAgICAgICAqIDwvdWw+CisgICAgICAgICAqCisgICAgICAgICAqIEByZXR1cm4gVGhlIHR5cGUgb2Ygdm9sdW1lIGNvbnRyb2wgdGhhdCBtYXkgYmUgdXNlZCB3aXRoIHRoaXMKKyAgICAgICAgICogICAgICAgICBzZXNzaW9uLgorICAgICAgICAgKi8KKyAgICAgICAgcHVibGljIGludCBnZXRWb2x1bWVDb250cm9sKCkgeworICAgICAgICAgICAgcmV0dXJuIG1Wb2x1bWVDb250cm9sOworICAgICAgICB9CisKKyAgICAgICAgLyoqCisgICAgICAgICAqIEdldCB0aGUgbWF4aW11bSB2b2x1bWUgdGhhdCBtYXkgYmUgc2V0IGZvciB0aGlzIHNlc3Npb24uCisgICAgICAgICAqCisgICAgICAgICAqIEByZXR1cm4gVGhlIG1heGltdW0gYWxsb3dlZCB2b2x1bWUgd2hlcmUgdGhpcyBzZXNzaW9uIGlzIHBsYXlpbmcuCisgICAgICAgICAqLworICAgICAgICBwdWJsaWMgaW50IGdldE1heFZvbHVtZSgpIHsKKyAgICAgICAgICAgIHJldHVybiBtTWF4Vm9sdW1lOworICAgICAgICB9CisKKyAgICAgICAgLyoqCisgICAgICAgICAqIEdldCB0aGUgY3VycmVudCB2b2x1bWUgZm9yIHRoaXMgc2Vzc2lvbi4KKyAgICAgICAgICoKKyAgICAgICAgICogQHJldHVybiBUaGUgY3VycmVudCB2b2x1bWUgd2hlcmUgdGhpcyBzZXNzaW9uIGlzIHBsYXlpbmcuCisgICAgICAgICAqLworICAgICAgICBwdWJsaWMgaW50IGdldEN1cnJlbnRWb2x1bWUoKSB7CisgICAgICAgICAgICByZXR1cm4gbUN1cnJlbnRWb2x1bWU7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBwcml2YXRlIGZpbmFsIHN0YXRpYyBjbGFzcyBDYWxsYmFja1N0dWIgZXh0ZW5kcyBJU2Vzc2lvbkNvbnRyb2xsZXJDYWxsYmFjay5TdHViIHsKKyAgICAgICAgcHJpdmF0ZSBmaW5hbCBXZWFrUmVmZXJlbmNlPE1lZGlhQ29udHJvbGxlcj4gbUNvbnRyb2xsZXI7CisKKyAgICAgICAgcHVibGljIENhbGxiYWNrU3R1YihNZWRpYUNvbnRyb2xsZXIgY29udHJvbGxlcikgeworICAgICAgICAgICAgbUNvbnRyb2xsZXIgPSBuZXcgV2Vha1JlZmVyZW5jZTxNZWRpYUNvbnRyb2xsZXI+KGNvbnRyb2xsZXIpOworICAgICAgICB9CisKKyAgICAgICAgQE92ZXJyaWRlCisgICAgICAgIHB1YmxpYyB2b2lkIG9uU2Vzc2lvbkRlc3Ryb3llZCgpIHsKKyAgICAgICAgICAgIE1lZGlhQ29udHJvbGxlciBjb250cm9sbGVyID0gbUNvbnRyb2xsZXIuZ2V0KCk7CisgICAgICAgICAgICBpZiAoY29udHJvbGxlciAhPSBudWxsKSB7CisgICAgICAgICAgICAgICAgY29udHJvbGxlci5wb3N0TWVzc2FnZShNU0dfREVTVFJPWUVELCBudWxsLCBudWxsKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIEBPdmVycmlkZQorICAgICAgICBwdWJsaWMgdm9pZCBvbkV2ZW50KFN0cmluZyBldmVudCwgQnVuZGxlIGV4dHJhcykgeworICAgICAgICAgICAgTWVkaWFDb250cm9sbGVyIGNvbnRyb2xsZXIgPSBtQ29udHJvbGxlci5nZXQoKTsKKyAgICAgICAgICAgIGlmIChjb250cm9sbGVyICE9IG51bGwpIHsKKyAgICAgICAgICAgICAgICBjb250cm9sbGVyLnBvc3RNZXNzYWdlKE1TR19FVkVOVCwgZXZlbnQsIGV4dHJhcyk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBAT3ZlcnJpZGUKKyAgICAgICAgcHVibGljIHZvaWQgb25QbGF5YmFja1N0YXRlQ2hhbmdlZChQbGF5YmFja1N0YXRlIHN0YXRlKSB7CisgICAgICAgICAgICBNZWRpYUNvbnRyb2xsZXIgY29udHJvbGxlciA9IG1Db250cm9sbGVyLmdldCgpOworICAgICAgICAgICAgaWYgKGNvbnRyb2xsZXIgIT0gbnVsbCkgeworICAgICAgICAgICAgICAgIGNvbnRyb2xsZXIucG9zdE1lc3NhZ2UoTVNHX1VQREFURV9QTEFZQkFDS19TVEFURSwgc3RhdGUsIG51bGwpOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgQE92ZXJyaWRlCisgICAgICAgIHB1YmxpYyB2b2lkIG9uTWV0YWRhdGFDaGFuZ2VkKE1lZGlhTWV0YWRhdGEgbWV0YWRhdGEpIHsKKyAgICAgICAgICAgIE1lZGlhQ29udHJvbGxlciBjb250cm9sbGVyID0gbUNvbnRyb2xsZXIuZ2V0KCk7CisgICAgICAgICAgICBpZiAoY29udHJvbGxlciAhPSBudWxsKSB7CisgICAgICAgICAgICAgICAgY29udHJvbGxlci5wb3N0TWVzc2FnZShNU0dfVVBEQVRFX01FVEFEQVRBLCBtZXRhZGF0YSwgbnVsbCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICAvL1RPRE86KGIvMTE5NzUwODA3KSBSZXNvbHZlIGhpZGRlbiBBUEkgdXNhZ2UgUGFyY2VsZWRMaXN0U2xpY2UuCisgICAgICAgIC8qCisgICAgICAgIEBPdmVycmlkZQorICAgICAgICBwdWJsaWMgdm9pZCBvblF1ZXVlQ2hhbmdlZChQYXJjZWxlZExpc3RTbGljZSBwYXJjZWxlZFF1ZXVlKSB7CisgICAgICAgICAgICBMaXN0PE1lZGlhU2Vzc2lvbi5RdWV1ZUl0ZW0+IHF1ZXVlID0gcGFyY2VsZWRRdWV1ZSA9PSBudWxsID8gbnVsbCA6IHBhcmNlbGVkUXVldWUKKyAgICAgICAgICAgICAgICAgICAgLmdldExpc3QoKTsKKyAgICAgICAgICAgIE1lZGlhQ29udHJvbGxlciBjb250cm9sbGVyID0gbUNvbnRyb2xsZXIuZ2V0KCk7CisgICAgICAgICAgICBpZiAoY29udHJvbGxlciAhPSBudWxsKSB7CisgICAgICAgICAgICAgICAgY29udHJvbGxlci5wb3N0TWVzc2FnZShNU0dfVVBEQVRFX1FVRVVFLCBxdWV1ZSwgbnVsbCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgKi8KKworICAgICAgICBAT3ZlcnJpZGUKKyAgICAgICAgcHVibGljIHZvaWQgb25RdWV1ZVRpdGxlQ2hhbmdlZChDaGFyU2VxdWVuY2UgdGl0bGUpIHsKKyAgICAgICAgICAgIE1lZGlhQ29udHJvbGxlciBjb250cm9sbGVyID0gbUNvbnRyb2xsZXIuZ2V0KCk7CisgICAgICAgICAgICBpZiAoY29udHJvbGxlciAhPSBudWxsKSB7CisgICAgICAgICAgICAgICAgY29udHJvbGxlci5wb3N0TWVzc2FnZShNU0dfVVBEQVRFX1FVRVVFX1RJVExFLCB0aXRsZSwgbnVsbCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBAT3ZlcnJpZGUKKyAgICAgICAgcHVibGljIHZvaWQgb25FeHRyYXNDaGFuZ2VkKEJ1bmRsZSBleHRyYXMpIHsKKyAgICAgICAgICAgIE1lZGlhQ29udHJvbGxlciBjb250cm9sbGVyID0gbUNvbnRyb2xsZXIuZ2V0KCk7CisgICAgICAgICAgICBpZiAoY29udHJvbGxlciAhPSBudWxsKSB7CisgICAgICAgICAgICAgICAgY29udHJvbGxlci5wb3N0TWVzc2FnZShNU0dfVVBEQVRFX0VYVFJBUywgZXh0cmFzLCBudWxsKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIEBPdmVycmlkZQorICAgICAgICBwdWJsaWMgdm9pZCBvblZvbHVtZUluZm9DaGFuZ2VkKFBhcmNlbGFibGVWb2x1bWVJbmZvIHB2aSkgeworICAgICAgICAgICAgTWVkaWFDb250cm9sbGVyIGNvbnRyb2xsZXIgPSBtQ29udHJvbGxlci5nZXQoKTsKKyAgICAgICAgICAgIGlmIChjb250cm9sbGVyICE9IG51bGwpIHsKKyAgICAgICAgICAgICAgICBQbGF5YmFja0luZm8gaW5mbyA9IG5ldyBQbGF5YmFja0luZm8ocHZpLnZvbHVtZVR5cGUsIHB2aS5hdWRpb0F0dHJzLAorICAgICAgICAgICAgICAgICAgICAgICAgcHZpLmNvbnRyb2xUeXBlLCBwdmkubWF4Vm9sdW1lLCBwdmkuY3VycmVudFZvbHVtZSk7CisgICAgICAgICAgICAgICAgY29udHJvbGxlci5wb3N0TWVzc2FnZShNU0dfVVBEQVRFX1ZPTFVNRSwgaW5mbywgbnVsbCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgIH0KKworICAgIHByaXZhdGUgZmluYWwgc3RhdGljIGNsYXNzIE1lc3NhZ2VIYW5kbGVyIGV4dGVuZHMgSGFuZGxlciB7CisgICAgICAgIHByaXZhdGUgZmluYWwgTWVkaWFDb250cm9sbGVyLkNhbGxiYWNrIG1DYWxsYmFjazsKKyAgICAgICAgcHJpdmF0ZSBib29sZWFuIG1SZWdpc3RlcmVkID0gZmFsc2U7CisKKyAgICAgICAgcHVibGljIE1lc3NhZ2VIYW5kbGVyKExvb3BlciBsb29wZXIsIE1lZGlhQ29udHJvbGxlci5DYWxsYmFjayBjYikgeworICAgICAgICAgICAgLy9UT0RPOihiLzExOTUzOTg0OSkgVW5jb21tZW50IGJlbG93IGxpbmUgYW5kIHJlc29sdmUgdGhlIGVycm9yLgorICAgICAgICAgICAgLy8gc3VwZXIobG9vcGVyLCBudWxsLCB0cnVlKTsKKyAgICAgICAgICAgIG1DYWxsYmFjayA9IGNiOworICAgICAgICB9CisKKyAgICAgICAgQE92ZXJyaWRlCisgICAgICAgIHB1YmxpYyB2b2lkIGhhbmRsZU1lc3NhZ2UoTWVzc2FnZSBtc2cpIHsKKyAgICAgICAgICAgIGlmICghbVJlZ2lzdGVyZWQpIHsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisgICAgICAgICAgICBzd2l0Y2ggKG1zZy53aGF0KSB7CisgICAgICAgICAgICAgICAgY2FzZSBNU0dfRVZFTlQ6CisgICAgICAgICAgICAgICAgICAgIG1DYWxsYmFjay5vblNlc3Npb25FdmVudCgoU3RyaW5nKSBtc2cub2JqLCBtc2cuZ2V0RGF0YSgpKTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgY2FzZSBNU0dfVVBEQVRFX1BMQVlCQUNLX1NUQVRFOgorICAgICAgICAgICAgICAgICAgICBtQ2FsbGJhY2sub25QbGF5YmFja1N0YXRlQ2hhbmdlZCgoUGxheWJhY2tTdGF0ZSkgbXNnLm9iaik7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIGNhc2UgTVNHX1VQREFURV9NRVRBREFUQToKKyAgICAgICAgICAgICAgICAgICAgbUNhbGxiYWNrLm9uTWV0YWRhdGFDaGFuZ2VkKChNZWRpYU1ldGFkYXRhKSBtc2cub2JqKTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgY2FzZSBNU0dfVVBEQVRFX1FVRVVFOgorICAgICAgICAgICAgICAgICAgICBtQ2FsbGJhY2sub25RdWV1ZUNoYW5nZWQoKExpc3Q8TWVkaWFTZXNzaW9uLlF1ZXVlSXRlbT4pIG1zZy5vYmopOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICBjYXNlIE1TR19VUERBVEVfUVVFVUVfVElUTEU6CisgICAgICAgICAgICAgICAgICAgIG1DYWxsYmFjay5vblF1ZXVlVGl0bGVDaGFuZ2VkKChDaGFyU2VxdWVuY2UpIG1zZy5vYmopOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICBjYXNlIE1TR19VUERBVEVfRVhUUkFTOgorICAgICAgICAgICAgICAgICAgICBtQ2FsbGJhY2sub25FeHRyYXNDaGFuZ2VkKChCdW5kbGUpIG1zZy5vYmopOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICBjYXNlIE1TR19VUERBVEVfVk9MVU1FOgorICAgICAgICAgICAgICAgICAgICBtQ2FsbGJhY2sub25BdWRpb0luZm9DaGFuZ2VkKChQbGF5YmFja0luZm8pIG1zZy5vYmopOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICBjYXNlIE1TR19ERVNUUk9ZRUQ6CisgICAgICAgICAgICAgICAgICAgIG1DYWxsYmFjay5vblNlc3Npb25EZXN0cm95ZWQoKTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBwdWJsaWMgdm9pZCBwb3N0KGludCB3aGF0LCBPYmplY3Qgb2JqLCBCdW5kbGUgZGF0YSkgeworICAgICAgICAgICAgTWVzc2FnZSBtc2cgPSBvYnRhaW5NZXNzYWdlKHdoYXQsIG9iaik7CisgICAgICAgICAgICBtc2cuc2V0RGF0YShkYXRhKTsKKyAgICAgICAgICAgIG1zZy5zZW5kVG9UYXJnZXQoKTsKKyAgICAgICAgfQorICAgIH0KKworfQpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvTWVkaWFDb21wb25lbnRzL2FwZXgvamF2YS9hbmRyb2lkL21lZGlhL3Nlc3Npb24vTWVkaWFTZXNzaW9uLmFpZGwgYi9wYWNrYWdlcy9NZWRpYUNvbXBvbmVudHMvYXBleC9qYXZhL2FuZHJvaWQvbWVkaWEvc2Vzc2lvbi9NZWRpYVNlc3Npb24uYWlkbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNjU3Y2VmCi0tLSAvZGV2L251bGwKKysrIGIvcGFja2FnZXMvTWVkaWFDb21wb25lbnRzL2FwZXgvamF2YS9hbmRyb2lkL21lZGlhL3Nlc3Npb24vTWVkaWFTZXNzaW9uLmFpZGwKQEAgLTAsMCArMSwxOSBAQAorLyogQ29weXJpZ2h0IDIwMTQsIFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKyoqCisqKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyoqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyoqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorKioKKyoqICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyoqCisqKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisqKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorKiogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisqKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisqKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyovCisKK3BhY2thZ2UgYW5kcm9pZC5tZWRpYS5zZXNzaW9uOworCitwYXJjZWxhYmxlIE1lZGlhU2Vzc2lvbi5Ub2tlbjsKK3BhcmNlbGFibGUgTWVkaWFTZXNzaW9uLlF1ZXVlSXRlbTsKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9wYWNrYWdlcy9NZWRpYUNvbXBvbmVudHMvYXBleC9qYXZhL2FuZHJvaWQvbWVkaWEvc2Vzc2lvbi9NZWRpYVNlc3Npb24uamF2YSBiL3BhY2thZ2VzL01lZGlhQ29tcG9uZW50cy9hcGV4L2phdmEvYW5kcm9pZC9tZWRpYS9zZXNzaW9uL01lZGlhU2Vzc2lvbi5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI0MGUzYjAKLS0tIC9kZXYvbnVsbAorKysgYi9wYWNrYWdlcy9NZWRpYUNvbXBvbmVudHMvYXBleC9qYXZhL2FuZHJvaWQvbWVkaWEvc2Vzc2lvbi9NZWRpYVNlc3Npb24uamF2YQpAQCAtMCwwICsxLDE1NjkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworCitwYWNrYWdlIGFuZHJvaWQubWVkaWEuc2Vzc2lvbjsKKworaW1wb3J0IGFuZHJvaWQuYW5ub3RhdGlvbi5JbnREZWY7CitpbXBvcnQgYW5kcm9pZC5hbm5vdGF0aW9uLk5vbk51bGw7CitpbXBvcnQgYW5kcm9pZC5hbm5vdGF0aW9uLk51bGxhYmxlOworaW1wb3J0IGFuZHJvaWQuYW5ub3RhdGlvbi5VbnN1cHBvcnRlZEFwcFVzYWdlOworaW1wb3J0IGFuZHJvaWQuYXBwLkFjdGl2aXR5OworaW1wb3J0IGFuZHJvaWQuYXBwLlBlbmRpbmdJbnRlbnQ7CitpbXBvcnQgYW5kcm9pZC5jb250ZW50LkNvbnRleHQ7CitpbXBvcnQgYW5kcm9pZC5jb250ZW50LkludGVudDsKKy8vaW1wb3J0IGFuZHJvaWQuY29udGVudC5wbS5QYXJjZWxlZExpc3RTbGljZTsKK2ltcG9ydCBhbmRyb2lkLm1lZGlhLkF1ZGlvQXR0cmlidXRlczsKK2ltcG9ydCBhbmRyb2lkLm1lZGlhLk1lZGlhRGVzY3JpcHRpb247CitpbXBvcnQgYW5kcm9pZC5tZWRpYS5NZWRpYU1ldGFkYXRhOworaW1wb3J0IGFuZHJvaWQubWVkaWEuUmF0aW5nOworaW1wb3J0IGFuZHJvaWQubWVkaWEuVm9sdW1lUHJvdmlkZXI7CitpbXBvcnQgYW5kcm9pZC5uZXQuVXJpOworaW1wb3J0IGFuZHJvaWQub3MuQnVuZGxlOworaW1wb3J0IGFuZHJvaWQub3MuSGFuZGxlcjsKK2ltcG9ydCBhbmRyb2lkLm9zLkxvb3BlcjsKK2ltcG9ydCBhbmRyb2lkLm9zLk1lc3NhZ2U7CitpbXBvcnQgYW5kcm9pZC5vcy5QYXJjZWw7CitpbXBvcnQgYW5kcm9pZC5vcy5QYXJjZWxhYmxlOworaW1wb3J0IGFuZHJvaWQub3MuUmVtb3RlRXhjZXB0aW9uOworaW1wb3J0IGFuZHJvaWQub3MuUmVzdWx0UmVjZWl2ZXI7CitpbXBvcnQgYW5kcm9pZC5vcy5Vc2VySGFuZGxlOworaW1wb3J0IGFuZHJvaWQubWVkaWEuc2Vzc2lvbi5NZWRpYVNlc3Npb25NYW5hZ2VyLlJlbW90ZVVzZXJJbmZvOworaW1wb3J0IGFuZHJvaWQuc2VydmljZS5tZWRpYS5NZWRpYUJyb3dzZXJTZXJ2aWNlOworaW1wb3J0IGFuZHJvaWQudGV4dC5UZXh0VXRpbHM7CitpbXBvcnQgYW5kcm9pZC51dGlsLkxvZzsKK2ltcG9ydCBhbmRyb2lkLnV0aWwuUGFpcjsKK2ltcG9ydCBhbmRyb2lkLnZpZXcuS2V5RXZlbnQ7CitpbXBvcnQgYW5kcm9pZC52aWV3LlZpZXdDb25maWd1cmF0aW9uOworCitpbXBvcnQgamF2YS5sYW5nLmFubm90YXRpb24uUmV0ZW50aW9uOworaW1wb3J0IGphdmEubGFuZy5hbm5vdGF0aW9uLlJldGVudGlvblBvbGljeTsKK2ltcG9ydCBqYXZhLmxhbmcucmVmLldlYWtSZWZlcmVuY2U7CitpbXBvcnQgamF2YS51dGlsLkxpc3Q7CitpbXBvcnQgamF2YS51dGlsLk9iamVjdHM7CisKKy8qKgorICogQWxsb3dzIGludGVyYWN0aW9uIHdpdGggbWVkaWEgY29udHJvbGxlcnMsIHZvbHVtZSBrZXlzLCBtZWRpYSBidXR0b25zLCBhbmQKKyAqIHRyYW5zcG9ydCBjb250cm9scy4KKyAqIDxwPgorICogQSBNZWRpYVNlc3Npb24gc2hvdWxkIGJlIGNyZWF0ZWQgd2hlbiBhbiBhcHAgd2FudHMgdG8gcHVibGlzaCBtZWRpYSBwbGF5YmFjaworICogaW5mb3JtYXRpb24gb3IgaGFuZGxlIG1lZGlhIGtleXMuIEluIGdlbmVyYWwgYW4gYXBwIG9ubHkgbmVlZHMgb25lIHNlc3Npb24KKyAqIGZvciBhbGwgcGxheWJhY2ssIHRob3VnaCBtdWx0aXBsZSBzZXNzaW9ucyBjYW4gYmUgY3JlYXRlZCB0byBwcm92aWRlIGZpbmVyCisgKiBncmFpbiBjb250cm9scyBvZiBtZWRpYS4KKyAqIDxwPgorICogT25jZSBhIHNlc3Npb24gaXMgY3JlYXRlZCB0aGUgb3duZXIgb2YgdGhlIHNlc3Npb24gbWF5IHBhc3MgaXRzCisgKiB7QGxpbmsgI2dldFNlc3Npb25Ub2tlbigpIHNlc3Npb24gdG9rZW59IHRvIG90aGVyIHByb2Nlc3NlcyB0byBhbGxvdyB0aGVtIHRvCisgKiBjcmVhdGUgYSB7QGxpbmsgTWVkaWFDb250cm9sbGVyfSB0byBpbnRlcmFjdCB3aXRoIHRoZSBzZXNzaW9uLgorICogPHA+CisgKiBUbyByZWNlaXZlIGNvbW1hbmRzLCBtZWRpYSBrZXlzLCBhbmQgb3RoZXIgZXZlbnRzIGEge0BsaW5rIENhbGxiYWNrfSBtdXN0IGJlCisgKiBzZXQgd2l0aCB7QGxpbmsgI3NldENhbGxiYWNrKENhbGxiYWNrKX0gYW5kIHtAbGluayAjc2V0QWN0aXZlKGJvb2xlYW4pCisgKiBzZXRBY3RpdmUodHJ1ZSl9IG11c3QgYmUgY2FsbGVkLgorICogPHA+CisgKiBXaGVuIGFuIGFwcCBpcyBmaW5pc2hlZCBwZXJmb3JtaW5nIHBsYXliYWNrIGl0IG11c3QgY2FsbCB7QGxpbmsgI3JlbGVhc2UoKX0KKyAqIHRvIGNsZWFuIHVwIHRoZSBzZXNzaW9uIGFuZCBub3RpZnkgYW55IGNvbnRyb2xsZXJzLgorICogPHA+CisgKiBNZWRpYVNlc3Npb24gb2JqZWN0cyBhcmUgdGhyZWFkIHNhZmUuCisgKi8KK3B1YmxpYyBmaW5hbCBjbGFzcyBNZWRpYVNlc3Npb24geworICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBUQUcgPSAiTWVkaWFTZXNzaW9uIjsKKworICAgIC8qKgorICAgICAqIFNldCB0aGlzIGZsYWcgb24gdGhlIHNlc3Npb24gdG8gaW5kaWNhdGUgdGhhdCBpdCBjYW4gaGFuZGxlIG1lZGlhIGJ1dHRvbgorICAgICAqIGV2ZW50cy4KKyAgICAgKiBAZGVwcmVjYXRlZCBUaGlzIGZsYWcgaXMgbm8gbG9uZ2VyIHVzZWQuIEFsbCBtZWRpYSBzZXNzaW9ucyBhcmUgZXhwZWN0ZWQgdG8gaGFuZGxlIG1lZGlhCisgICAgICogYnV0dG9uIGV2ZW50cyBub3cuCisgICAgICovCisgICAgQERlcHJlY2F0ZWQKKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBGTEFHX0hBTkRMRVNfTUVESUFfQlVUVE9OUyA9IDEgPDwgMDsKKworICAgIC8qKgorICAgICAqIFNldCB0aGlzIGZsYWcgb24gdGhlIHNlc3Npb24gdG8gaW5kaWNhdGUgdGhhdCBpdCBoYW5kbGVzIHRyYW5zcG9ydAorICAgICAqIGNvbnRyb2wgY29tbWFuZHMgdGhyb3VnaCBpdHMge0BsaW5rIENhbGxiYWNrfS4KKyAgICAgKiBAZGVwcmVjYXRlZCBUaGlzIGZsYWcgaXMgbm8gbG9uZ2VyIHVzZWQuIEFsbCBtZWRpYSBzZXNzaW9ucyBhcmUgZXhwZWN0ZWQgdG8gaGFuZGxlIHRyYW5zcG9ydAorICAgICAqIGNvbnRyb2xzIG5vdy4KKyAgICAgKi8KKyAgICBARGVwcmVjYXRlZAorICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEZMQUdfSEFORExFU19UUkFOU1BPUlRfQ09OVFJPTFMgPSAxIDw8IDE7CisKKyAgICAvKioKKyAgICAgKiBTeXN0ZW0gb25seSBmbGFnIGZvciBhIHNlc3Npb24gdGhhdCBuZWVkcyB0byBoYXZlIHByaW9yaXR5IG92ZXIgYWxsIG90aGVyCisgICAgICogc2Vzc2lvbnMuIFRoaXMgZmxhZyBlbnN1cmVzIHRoaXMgc2Vzc2lvbiB3aWxsIHJlY2VpdmUgbWVkaWEgYnV0dG9uIGV2ZW50cworICAgICAqIHJlZ2FyZGxlc3Mgb2YgdGhlIGN1cnJlbnQgb3JkZXJpbmcgaW4gdGhlIHN5c3RlbS4KKyAgICAgKgorICAgICAqIEBoaWRlCisgICAgICovCisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgRkxBR19FWENMVVNJVkVfR0xPQkFMX1BSSU9SSVRZID0gMSA8PCAxNjsKKworICAgIC8qKgorICAgICAqIEBoaWRlCisgICAgICovCisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgSU5WQUxJRF9VSUQgPSAtMTsKKworICAgIC8qKgorICAgICAqIEBoaWRlCisgICAgICovCisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgSU5WQUxJRF9QSUQgPSAtMTsKKworICAgIC8qKiBAaGlkZSAqLworICAgIEBSZXRlbnRpb24oUmV0ZW50aW9uUG9saWN5LlNPVVJDRSkKKyAgICBASW50RGVmKGZsYWcgPSB0cnVlLCB2YWx1ZSA9IHsKKyAgICAgICAgICAgIEZMQUdfSEFORExFU19NRURJQV9CVVRUT05TLAorICAgICAgICAgICAgRkxBR19IQU5ETEVTX1RSQU5TUE9SVF9DT05UUk9MUywKKyAgICAgICAgICAgIEZMQUdfRVhDTFVTSVZFX0dMT0JBTF9QUklPUklUWSB9KQorICAgIHB1YmxpYyBAaW50ZXJmYWNlIFNlc3Npb25GbGFncyB7IH0KKworICAgIHByaXZhdGUgZmluYWwgT2JqZWN0IG1Mb2NrID0gbmV3IE9iamVjdCgpOworICAgIHByaXZhdGUgZmluYWwgaW50IG1NYXhCaXRtYXBTaXplOworCisgICAgcHJpdmF0ZSBmaW5hbCBNZWRpYVNlc3Npb24uVG9rZW4gbVNlc3Npb25Ub2tlbjsKKyAgICBwcml2YXRlIGZpbmFsIE1lZGlhQ29udHJvbGxlciBtQ29udHJvbGxlcjsKKyAgICBwcml2YXRlIGZpbmFsIElTZXNzaW9uIG1CaW5kZXI7CisgICAgcHJpdmF0ZSBmaW5hbCBDYWxsYmFja1N0dWIgbUNiU3R1YjsKKworICAgIC8vIERvIG5vdCBjaGFuZ2UgdGhlIG5hbWUgb2YgbUNhbGxiYWNrLiBTdXBwb3J0IGxpYiBhY2Nlc3NlcyB0aGlzIGJ5IHVzaW5nIHJlZmxlY3Rpb24uCisgICAgQFVuc3VwcG9ydGVkQXBwVXNhZ2UKKyAgICBwcml2YXRlIENhbGxiYWNrTWVzc2FnZUhhbmRsZXIgbUNhbGxiYWNrOworICAgIHByaXZhdGUgVm9sdW1lUHJvdmlkZXIgbVZvbHVtZVByb3ZpZGVyOworICAgIHByaXZhdGUgUGxheWJhY2tTdGF0ZSBtUGxheWJhY2tTdGF0ZTsKKworICAgIHByaXZhdGUgYm9vbGVhbiBtQWN0aXZlID0gZmFsc2U7CisKKyAgICAvKioKKyAgICAgKiBDcmVhdGVzIGEgbmV3IHNlc3Npb24uIFRoZSBzZXNzaW9uIHdpbGwgYXV0b21hdGljYWxseSBiZSByZWdpc3RlcmVkIHdpdGgKKyAgICAgKiB0aGUgc3lzdGVtIGJ1dCB3aWxsIG5vdCBiZSBwdWJsaXNoZWQgdW50aWwge0BsaW5rICNzZXRBY3RpdmUoYm9vbGVhbikKKyAgICAgKiBzZXRBY3RpdmUodHJ1ZSl9IGlzIGNhbGxlZC4gWW91IG11c3QgY2FsbCB7QGxpbmsgI3JlbGVhc2UoKX0gd2hlbgorICAgICAqIGZpbmlzaGVkIHdpdGggdGhlIHNlc3Npb24uCisgICAgICoKKyAgICAgKiBAcGFyYW0gY29udGV4dCBUaGUgY29udGV4dCB0byB1c2UgdG8gY3JlYXRlIHRoZSBzZXNzaW9uLgorICAgICAqIEBwYXJhbSB0YWcgQSBzaG9ydCBuYW1lIGZvciBkZWJ1Z2dpbmcgcHVycG9zZXMuCisgICAgICovCisgICAgcHVibGljIE1lZGlhU2Vzc2lvbihATm9uTnVsbCBDb250ZXh0IGNvbnRleHQsIEBOb25OdWxsIFN0cmluZyB0YWcpIHsKKyAgICAgICAgdGhpcyhjb250ZXh0LCB0YWcsIFVzZXJIYW5kbGUubXlVc2VySWQoKSk7CisgICAgfQorCisgICAgLyoqCisgICAgICogQ3JlYXRlcyBhIG5ldyBzZXNzaW9uIGFzIHRoZSBzcGVjaWZpZWQgdXNlci4gVG8gY3JlYXRlIGEgc2Vzc2lvbiBhcyBhCisgICAgICogdXNlciBvdGhlciB0aGFuIHlvdXIgb3duIHlvdSBtdXN0IGhvbGQgdGhlCisgICAgICoge0BsaW5rIGFuZHJvaWQuTWFuaWZlc3QucGVybWlzc2lvbiNJTlRFUkFDVF9BQ1JPU1NfVVNFUlNfRlVMTH0KKyAgICAgKiBwZXJtaXNzaW9uLgorICAgICAqCisgICAgICogQHBhcmFtIGNvbnRleHQgVGhlIGNvbnRleHQgdG8gdXNlIHRvIGNyZWF0ZSB0aGUgc2Vzc2lvbi4KKyAgICAgKiBAcGFyYW0gdGFnIEEgc2hvcnQgbmFtZSBmb3IgZGVidWdnaW5nIHB1cnBvc2VzLgorICAgICAqIEBwYXJhbSB1c2VySWQgVGhlIHVzZXIgaWQgdG8gY3JlYXRlIHRoZSBzZXNzaW9uIGFzLgorICAgICAqIEBoaWRlCisgICAgICovCisgICAgcHVibGljIE1lZGlhU2Vzc2lvbihATm9uTnVsbCBDb250ZXh0IGNvbnRleHQsIEBOb25OdWxsIFN0cmluZyB0YWcsIGludCB1c2VySWQpIHsKKyAgICAgICAgaWYgKGNvbnRleHQgPT0gbnVsbCkgeworICAgICAgICAgICAgdGhyb3cgbmV3IElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbigiY29udGV4dCBjYW5ub3QgYmUgbnVsbC4iKTsKKyAgICAgICAgfQorICAgICAgICBpZiAoVGV4dFV0aWxzLmlzRW1wdHkodGFnKSkgeworICAgICAgICAgICAgdGhyb3cgbmV3IElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbigidGFnIGNhbm5vdCBiZSBudWxsIG9yIGVtcHR5Iik7CisgICAgICAgIH0KKyAgICAgICAgLy9UT0RPKGIvMTE5NzQ5Nzk4KTogUmVzb2x2ZSBoaWRkZW4gQVBJIHVzYWdlLiBjb20uYW5kcm9pZC5pbnRlcm5hbC5SCisgICAgICAgIC8vbU1heEJpdG1hcFNpemUgPSBjb250ZXh0LmdldFJlc291cmNlcygpLmdldERpbWVuc2lvblBpeGVsU2l6ZSgKKyAgICAgICAgICAgICAgICAvL2NvbS5hbmRyb2lkLmludGVybmFsLlIuZGltZW4uY29uZmlnX21lZGlhTWV0YWRhdGFCaXRtYXBNYXhTaXplKTsKKyAgICAgICAgbU1heEJpdG1hcFNpemUgPSAxMDI0OyAgLy9UT0RPOiByZW1vdmUgdGhpcy4KKyAgICAgICAgbUNiU3R1YiA9IG5ldyBDYWxsYmFja1N0dWIodGhpcyk7CisgICAgICAgIE1lZGlhU2Vzc2lvbk1hbmFnZXIgbWFuYWdlciA9IChNZWRpYVNlc3Npb25NYW5hZ2VyKSBjb250ZXh0CisgICAgICAgICAgICAgICAgLmdldFN5c3RlbVNlcnZpY2UoQ29udGV4dC5NRURJQV9TRVNTSU9OX1NFUlZJQ0UpOworICAgICAgICB0cnkgeworICAgICAgICAgICAgLy9UT0RPKGIvMTE5NzQ5ODYyKTogUmVzb2x2ZSBoaWRkZW4gQVBJIHVzYWdlLiBNZWRpYVNlc3Npb01hbmFnZXIjY3JlYXRlU2Vzc2lvbgorICAgICAgICAgICAgLy9tQmluZGVyID0gbWFuYWdlci5jcmVhdGVTZXNzaW9uKG1DYlN0dWIsIHRhZywgdXNlcklkKTsKKyAgICAgICAgICAgIG1CaW5kZXIgPSBudWxsOyAgLy9UT0RPOiByZW1vdmUgdGhpcy4KKyAgICAgICAgICAgIG1TZXNzaW9uVG9rZW4gPSBuZXcgVG9rZW4obUJpbmRlci5nZXRDb250cm9sbGVyKCkpOworICAgICAgICAgICAgbUNvbnRyb2xsZXIgPSBuZXcgTWVkaWFDb250cm9sbGVyKGNvbnRleHQsIG1TZXNzaW9uVG9rZW4pOworICAgICAgICB9IGNhdGNoIChSZW1vdGVFeGNlcHRpb24gZSkgeworICAgICAgICAgICAgdGhyb3cgbmV3IFJ1bnRpbWVFeGNlcHRpb24oIlJlbW90ZSBlcnJvciBjcmVhdGluZyBzZXNzaW9uLiIsIGUpOworICAgICAgICB9CisgICAgfQorCisgICAgLyoqCisgICAgICogU2V0IHRoZSBjYWxsYmFjayB0byByZWNlaXZlIHVwZGF0ZXMgZm9yIHRoZSBNZWRpYVNlc3Npb24uIFRoaXMgaW5jbHVkZXMKKyAgICAgKiBtZWRpYSBidXR0b24gZXZlbnRzIGFuZCB0cmFuc3BvcnQgY29udHJvbHMuIFRoZSBjYWxsZXIncyB0aHJlYWQgd2lsbCBiZQorICAgICAqIHVzZWQgdG8gcG9zdCB1cGRhdGVzLgorICAgICAqIDxwPgorICAgICAqIFNldCB0aGUgY2FsbGJhY2sgdG8gbnVsbCB0byBzdG9wIHJlY2VpdmluZyB1cGRhdGVzLgorICAgICAqCisgICAgICogQHBhcmFtIGNhbGxiYWNrIFRoZSBjYWxsYmFjayBvYmplY3QKKyAgICAgKi8KKyAgICBwdWJsaWMgdm9pZCBzZXRDYWxsYmFjayhATnVsbGFibGUgQ2FsbGJhY2sgY2FsbGJhY2spIHsKKyAgICAgICAgc2V0Q2FsbGJhY2soY2FsbGJhY2ssIG51bGwpOworICAgIH0KKworICAgIC8qKgorICAgICAqIFNldCB0aGUgY2FsbGJhY2sgdG8gcmVjZWl2ZSB1cGRhdGVzIGZvciB0aGUgTWVkaWFTZXNzaW9uLiBUaGlzIGluY2x1ZGVzCisgICAgICogbWVkaWEgYnV0dG9uIGV2ZW50cyBhbmQgdHJhbnNwb3J0IGNvbnRyb2xzLgorICAgICAqIDxwPgorICAgICAqIFNldCB0aGUgY2FsbGJhY2sgdG8gbnVsbCB0byBzdG9wIHJlY2VpdmluZyB1cGRhdGVzLgorICAgICAqCisgICAgICogQHBhcmFtIGNhbGxiYWNrIFRoZSBjYWxsYmFjayB0byByZWNlaXZlIHVwZGF0ZXMgb24uCisgICAgICogQHBhcmFtIGhhbmRsZXIgVGhlIGhhbmRsZXIgdGhhdCBldmVudHMgc2hvdWxkIGJlIHBvc3RlZCBvbi4KKyAgICAgKi8KKyAgICBwdWJsaWMgdm9pZCBzZXRDYWxsYmFjayhATnVsbGFibGUgQ2FsbGJhY2sgY2FsbGJhY2ssIEBOdWxsYWJsZSBIYW5kbGVyIGhhbmRsZXIpIHsKKyAgICAgICAgc3luY2hyb25pemVkIChtTG9jaykgeworICAgICAgICAgICAgaWYgKG1DYWxsYmFjayAhPSBudWxsKSB7CisgICAgICAgICAgICAgICAgLy8gV2UncmUgdXBkYXRpbmcgdGhlIGNhbGxiYWNrLCBjbGVhciB0aGUgc2Vzc2lvbiBmcm9tIHRoZSBvbGQgb25lLgorICAgICAgICAgICAgICAgIG1DYWxsYmFjay5tQ2FsbGJhY2subVNlc3Npb24gPSBudWxsOworICAgICAgICAgICAgICAgIG1DYWxsYmFjay5yZW1vdmVDYWxsYmFja3NBbmRNZXNzYWdlcyhudWxsKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChjYWxsYmFjayA9PSBudWxsKSB7CisgICAgICAgICAgICAgICAgbUNhbGxiYWNrID0gbnVsbDsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoaGFuZGxlciA9PSBudWxsKSB7CisgICAgICAgICAgICAgICAgaGFuZGxlciA9IG5ldyBIYW5kbGVyKCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBjYWxsYmFjay5tU2Vzc2lvbiA9IHRoaXM7CisgICAgICAgICAgICBDYWxsYmFja01lc3NhZ2VIYW5kbGVyIG1zZ0hhbmRsZXIgPSBuZXcgQ2FsbGJhY2tNZXNzYWdlSGFuZGxlcihoYW5kbGVyLmdldExvb3BlcigpLAorICAgICAgICAgICAgICAgICAgICBjYWxsYmFjayk7CisgICAgICAgICAgICBtQ2FsbGJhY2sgPSBtc2dIYW5kbGVyOworICAgICAgICB9CisgICAgfQorCisgICAgLyoqCisgICAgICogU2V0IGFuIGludGVudCBmb3IgbGF1bmNoaW5nIFVJIGZvciB0aGlzIFNlc3Npb24uIFRoaXMgY2FuIGJlIHVzZWQgYXMgYQorICAgICAqIHF1aWNrIGxpbmsgdG8gYW4gb25nb2luZyBtZWRpYSBzY3JlZW4uIFRoZSBpbnRlbnQgc2hvdWxkIGJlIGZvciBhbgorICAgICAqIGFjdGl2aXR5IHRoYXQgbWF5IGJlIHN0YXJ0ZWQgdXNpbmcge0BsaW5rIEFjdGl2aXR5I3N0YXJ0QWN0aXZpdHkoSW50ZW50KX0uCisgICAgICoKKyAgICAgKiBAcGFyYW0gcGkgVGhlIGludGVudCB0byBsYXVuY2ggdG8gc2hvdyBVSSBmb3IgdGhpcyBTZXNzaW9uLgorICAgICAqLworICAgIHB1YmxpYyB2b2lkIHNldFNlc3Npb25BY3Rpdml0eShATnVsbGFibGUgUGVuZGluZ0ludGVudCBwaSkgeworICAgICAgICB0cnkgeworICAgICAgICAgICAgbUJpbmRlci5zZXRMYXVuY2hQZW5kaW5nSW50ZW50KHBpKTsKKyAgICAgICAgfSBjYXRjaCAoUmVtb3RlRXhjZXB0aW9uIGUpIHsKKyAgICAgICAgICAgIExvZy53dGYoVEFHLCAiRmFpbHVyZSBpbiBzZXRMYXVuY2hQZW5kaW5nSW50ZW50LiIsIGUpOworICAgICAgICB9CisgICAgfQorCisgICAgLyoqCisgICAgICogU2V0IGEgcGVuZGluZyBpbnRlbnQgZm9yIHlvdXIgbWVkaWEgYnV0dG9uIHJlY2VpdmVyIHRvIGFsbG93IHJlc3RhcnRpbmcKKyAgICAgKiBwbGF5YmFjayBhZnRlciB0aGUgc2Vzc2lvbiBoYXMgYmVlbiBzdG9wcGVkLiBJZiB5b3VyIGFwcCBpcyBzdGFydGVkIGluCisgICAgICogdGhpcyB3YXkgYW4ge0BsaW5rIEludGVudCNBQ1RJT05fTUVESUFfQlVUVE9OfSBpbnRlbnQgd2lsbCBiZSBzZW50IHZpYQorICAgICAqIHRoZSBwZW5kaW5nIGludGVudC4KKyAgICAgKgorICAgICAqIEBwYXJhbSBtYnIgVGhlIHtAbGluayBQZW5kaW5nSW50ZW50fSB0byBzZW5kIHRoZSBtZWRpYSBidXR0b24gZXZlbnQgdG8uCisgICAgICovCisgICAgcHVibGljIHZvaWQgc2V0TWVkaWFCdXR0b25SZWNlaXZlcihATnVsbGFibGUgUGVuZGluZ0ludGVudCBtYnIpIHsKKyAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgIG1CaW5kZXIuc2V0TWVkaWFCdXR0b25SZWNlaXZlcihtYnIpOworICAgICAgICB9IGNhdGNoIChSZW1vdGVFeGNlcHRpb24gZSkgeworICAgICAgICAgICAgTG9nLnd0ZihUQUcsICJGYWlsdXJlIGluIHNldE1lZGlhQnV0dG9uUmVjZWl2ZXIuIiwgZSk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBTZXQgYW55IGZsYWdzIGZvciB0aGUgc2Vzc2lvbi4KKyAgICAgKgorICAgICAqIEBwYXJhbSBmbGFncyBUaGUgZmxhZ3MgdG8gc2V0IGZvciB0aGlzIHNlc3Npb24uCisgICAgICovCisgICAgcHVibGljIHZvaWQgc2V0RmxhZ3MoQFNlc3Npb25GbGFncyBpbnQgZmxhZ3MpIHsKKyAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgIG1CaW5kZXIuc2V0RmxhZ3MoZmxhZ3MpOworICAgICAgICB9IGNhdGNoIChSZW1vdGVFeGNlcHRpb24gZSkgeworICAgICAgICAgICAgTG9nLnd0ZihUQUcsICJGYWlsdXJlIGluIHNldEZsYWdzLiIsIGUpOworICAgICAgICB9CisgICAgfQorCisgICAgLyoqCisgICAgICogU2V0IHRoZSBhdHRyaWJ1dGVzIGZvciB0aGlzIHNlc3Npb24ncyBhdWRpby4gVGhpcyB3aWxsIGFmZmVjdCB0aGUKKyAgICAgKiBzeXN0ZW0ncyB2b2x1bWUgaGFuZGxpbmcgZm9yIHRoaXMgc2Vzc2lvbi4gSWYKKyAgICAgKiB7QGxpbmsgI3NldFBsYXliYWNrVG9SZW1vdGV9IHdhcyBwcmV2aW91c2x5IGNhbGxlZCBpdCB3aWxsIHN0b3AgcmVjZWl2aW5nCisgICAgICogdm9sdW1lIGNvbW1hbmRzIGFuZCB0aGUgc3lzdGVtIHdpbGwgYmVnaW4gc2VuZGluZyB2b2x1bWUgY2hhbmdlcyB0byB0aGUKKyAgICAgKiBhcHByb3ByaWF0ZSBzdHJlYW0uCisgICAgICogPHA+CisgICAgICogQnkgZGVmYXVsdCBzZXNzaW9ucyB1c2UgYXR0cmlidXRlcyBmb3IgbWVkaWEuCisgICAgICoKKyAgICAgKiBAcGFyYW0gYXR0cmlidXRlcyBUaGUge0BsaW5rIEF1ZGlvQXR0cmlidXRlc30gZm9yIHRoaXMgc2Vzc2lvbidzIGF1ZGlvLgorICAgICAqLworICAgIHB1YmxpYyB2b2lkIHNldFBsYXliYWNrVG9Mb2NhbChBdWRpb0F0dHJpYnV0ZXMgYXR0cmlidXRlcykgeworICAgICAgICBpZiAoYXR0cmlidXRlcyA9PSBudWxsKSB7CisgICAgICAgICAgICB0aHJvdyBuZXcgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKCJBdHRyaWJ1dGVzIGNhbm5vdCBiZSBudWxsIGZvciBsb2NhbCBwbGF5YmFjay4iKTsKKyAgICAgICAgfQorICAgICAgICAvL1RPRE8oYi8xMTk3NTE1OTIpOiBEZWNpZGUgaWYgQXVkaW9BdHRyaWJ1dGVzIHNob3VsZCBiZSB1cGRhdGVkLgorICAgICAgICAvKgorICAgICAgICB0cnkgeworICAgICAgICAgICAgbUJpbmRlci5zZXRQbGF5YmFja1RvTG9jYWwoYXR0cmlidXRlcyk7CisgICAgICAgIH0gY2F0Y2ggKFJlbW90ZUV4Y2VwdGlvbiBlKSB7CisgICAgICAgICAgICBMb2cud3RmKFRBRywgIkZhaWx1cmUgaW4gc2V0UGxheWJhY2tUb0xvY2FsLiIsIGUpOworICAgICAgICB9CisgICAgICAgICovCisgICAgfQorCisgICAgLyoqCisgICAgICogQ29uZmlndXJlIHRoaXMgc2Vzc2lvbiB0byB1c2UgcmVtb3RlIHZvbHVtZSBoYW5kbGluZy4gVGhpcyBtdXN0IGJlIGNhbGxlZAorICAgICAqIHRvIHJlY2VpdmUgdm9sdW1lIGJ1dHRvbiBldmVudHMsIG90aGVyd2lzZSB0aGUgc3lzdGVtIHdpbGwgYWRqdXN0IHRoZQorICAgICAqIGFwcHJvcHJpYXRlIHN0cmVhbSB2b2x1bWUgZm9yIHRoaXMgc2Vzc2lvbi4gSWYKKyAgICAgKiB7QGxpbmsgI3NldFBsYXliYWNrVG9Mb2NhbH0gd2FzIHByZXZpb3VzbHkgY2FsbGVkIHRoZSBzeXN0ZW0gd2lsbCBzdG9wCisgICAgICogaGFuZGxpbmcgdm9sdW1lIGNoYW5nZXMgZm9yIHRoaXMgc2Vzc2lvbiBhbmQgcGFzcyB0aGVtIHRvIHRoZSB2b2x1bWUKKyAgICAgKiBwcm92aWRlciBpbnN0ZWFkLgorICAgICAqCisgICAgICogQHBhcmFtIHZvbHVtZVByb3ZpZGVyIFRoZSBwcm92aWRlciB0aGF0IHdpbGwgaGFuZGxlIHZvbHVtZSBjaGFuZ2VzLiBNYXkKKyAgICAgKiAgICAgICAgICAgIG5vdCBiZSBudWxsLgorICAgICAqLworICAgIHB1YmxpYyB2b2lkIHNldFBsYXliYWNrVG9SZW1vdGUoQE5vbk51bGwgVm9sdW1lUHJvdmlkZXIgdm9sdW1lUHJvdmlkZXIpIHsKKyAgICAgICAgaWYgKHZvbHVtZVByb3ZpZGVyID09IG51bGwpIHsKKyAgICAgICAgICAgIHRocm93IG5ldyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oInZvbHVtZVByb3ZpZGVyIG1heSBub3QgYmUgbnVsbCEiKTsKKyAgICAgICAgfQorICAgICAgICBzeW5jaHJvbml6ZWQgKG1Mb2NrKSB7CisgICAgICAgICAgICBtVm9sdW1lUHJvdmlkZXIgPSB2b2x1bWVQcm92aWRlcjsKKyAgICAgICAgfQorICAgICAgICB2b2x1bWVQcm92aWRlci5zZXRDYWxsYmFjayhuZXcgVm9sdW1lUHJvdmlkZXIuQ2FsbGJhY2soKSB7CisgICAgICAgICAgICBAT3ZlcnJpZGUKKyAgICAgICAgICAgIHB1YmxpYyB2b2lkIG9uVm9sdW1lQ2hhbmdlZChWb2x1bWVQcm92aWRlciB2b2x1bWVQcm92aWRlcikgeworICAgICAgICAgICAgICAgIG5vdGlmeVJlbW90ZVZvbHVtZUNoYW5nZWQodm9sdW1lUHJvdmlkZXIpOworICAgICAgICAgICAgfQorICAgICAgICB9KTsKKworICAgICAgICB0cnkgeworICAgICAgICAgICAgbUJpbmRlci5zZXRQbGF5YmFja1RvUmVtb3RlKHZvbHVtZVByb3ZpZGVyLmdldFZvbHVtZUNvbnRyb2woKSwKKyAgICAgICAgICAgICAgICAgICAgdm9sdW1lUHJvdmlkZXIuZ2V0TWF4Vm9sdW1lKCkpOworICAgICAgICAgICAgbUJpbmRlci5zZXRDdXJyZW50Vm9sdW1lKHZvbHVtZVByb3ZpZGVyLmdldEN1cnJlbnRWb2x1bWUoKSk7CisgICAgICAgIH0gY2F0Y2ggKFJlbW90ZUV4Y2VwdGlvbiBlKSB7CisgICAgICAgICAgICBMb2cud3RmKFRBRywgIkZhaWx1cmUgaW4gc2V0UGxheWJhY2tUb1JlbW90ZS4iLCBlKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIC8qKgorICAgICAqIFNldCBpZiB0aGlzIHNlc3Npb24gaXMgY3VycmVudGx5IGFjdGl2ZSBhbmQgcmVhZHkgdG8gcmVjZWl2ZSBjb21tYW5kcy4gSWYKKyAgICAgKiBzZXQgdG8gZmFsc2UgeW91ciBzZXNzaW9uJ3MgY29udHJvbGxlciBtYXkgbm90IGJlIGRpc2NvdmVyYWJsZS4gWW91IG11c3QKKyAgICAgKiBzZXQgdGhlIHNlc3Npb24gdG8gYWN0aXZlIGJlZm9yZSBpdCBjYW4gc3RhcnQgcmVjZWl2aW5nIG1lZGlhIGJ1dHRvbgorICAgICAqIGV2ZW50cyBvciB0cmFuc3BvcnQgY29tbWFuZHMuCisgICAgICoKKyAgICAgKiBAcGFyYW0gYWN0aXZlIFdoZXRoZXIgdGhpcyBzZXNzaW9uIGlzIGFjdGl2ZSBvciBub3QuCisgICAgICovCisgICAgcHVibGljIHZvaWQgc2V0QWN0aXZlKGJvb2xlYW4gYWN0aXZlKSB7CisgICAgICAgIGlmIChtQWN0aXZlID09IGFjdGl2ZSkgeworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIHRyeSB7CisgICAgICAgICAgICBtQmluZGVyLnNldEFjdGl2ZShhY3RpdmUpOworICAgICAgICAgICAgbUFjdGl2ZSA9IGFjdGl2ZTsKKyAgICAgICAgfSBjYXRjaCAoUmVtb3RlRXhjZXB0aW9uIGUpIHsKKyAgICAgICAgICAgIExvZy53dGYoVEFHLCAiRmFpbHVyZSBpbiBzZXRBY3RpdmUuIiwgZSk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBHZXQgdGhlIGN1cnJlbnQgYWN0aXZlIHN0YXRlIG9mIHRoaXMgc2Vzc2lvbi4KKyAgICAgKgorICAgICAqIEByZXR1cm4gVHJ1ZSBpZiB0aGUgc2Vzc2lvbiBpcyBhY3RpdmUsIGZhbHNlIG90aGVyd2lzZS4KKyAgICAgKi8KKyAgICBwdWJsaWMgYm9vbGVhbiBpc0FjdGl2ZSgpIHsKKyAgICAgICAgcmV0dXJuIG1BY3RpdmU7CisgICAgfQorCisgICAgLyoqCisgICAgICogU2VuZCBhIHByb3ByaWV0YXJ5IGV2ZW50IHRvIGFsbCBNZWRpYUNvbnRyb2xsZXJzIGxpc3RlbmluZyB0byB0aGlzCisgICAgICogU2Vzc2lvbi4gSXQncyB1cCB0byB0aGUgQ29udHJvbGxlci9TZXNzaW9uIG93bmVyIHRvIGRldGVybWluZSB0aGUgbWVhbmluZworICAgICAqIG9mIGFueSBldmVudHMuCisgICAgICoKKyAgICAgKiBAcGFyYW0gZXZlbnQgVGhlIG5hbWUgb2YgdGhlIGV2ZW50IHRvIHNlbmQKKyAgICAgKiBAcGFyYW0gZXh0cmFzIEFueSBleHRyYXMgaW5jbHVkZWQgd2l0aCB0aGUgZXZlbnQKKyAgICAgKi8KKyAgICBwdWJsaWMgdm9pZCBzZW5kU2Vzc2lvbkV2ZW50KEBOb25OdWxsIFN0cmluZyBldmVudCwgQE51bGxhYmxlIEJ1bmRsZSBleHRyYXMpIHsKKyAgICAgICAgaWYgKFRleHRVdGlscy5pc0VtcHR5KGV2ZW50KSkgeworICAgICAgICAgICAgdGhyb3cgbmV3IElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbigiZXZlbnQgY2Fubm90IGJlIG51bGwgb3IgZW1wdHkiKTsKKyAgICAgICAgfQorICAgICAgICB0cnkgeworICAgICAgICAgICAgbUJpbmRlci5zZW5kRXZlbnQoZXZlbnQsIGV4dHJhcyk7CisgICAgICAgIH0gY2F0Y2ggKFJlbW90ZUV4Y2VwdGlvbiBlKSB7CisgICAgICAgICAgICBMb2cud3RmKFRBRywgIkVycm9yIHNlbmRpbmcgZXZlbnQiLCBlKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIC8qKgorICAgICAqIFRoaXMgbXVzdCBiZSBjYWxsZWQgd2hlbiBhbiBhcHAgaGFzIGZpbmlzaGVkIHBlcmZvcm1pbmcgcGxheWJhY2suIElmCisgICAgICogcGxheWJhY2sgaXMgZXhwZWN0ZWQgdG8gc3RhcnQgYWdhaW4gc2hvcnRseSB0aGUgc2Vzc2lvbiBjYW4gYmUgbGVmdCBvcGVuLAorICAgICAqIGJ1dCBpdCBtdXN0IGJlIHJlbGVhc2VkIGlmIHlvdXIgYWN0aXZpdHkgb3Igc2VydmljZSBpcyBiZWluZyBkZXN0cm95ZWQuCisgICAgICovCisgICAgcHVibGljIHZvaWQgcmVsZWFzZSgpIHsKKyAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgIG1CaW5kZXIuZGVzdHJveSgpOworICAgICAgICB9IGNhdGNoIChSZW1vdGVFeGNlcHRpb24gZSkgeworICAgICAgICAgICAgTG9nLnd0ZihUQUcsICJFcnJvciByZWxlYXNpbmcgc2Vzc2lvbjogIiwgZSk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBSZXRyaWV2ZSBhIHRva2VuIG9iamVjdCB0aGF0IGNhbiBiZSB1c2VkIGJ5IGFwcHMgdG8gY3JlYXRlIGEKKyAgICAgKiB7QGxpbmsgTWVkaWFDb250cm9sbGVyfSBmb3IgaW50ZXJhY3Rpbmcgd2l0aCB0aGlzIHNlc3Npb24uIFRoZSBvd25lciBvZgorICAgICAqIHRoZSBzZXNzaW9uIGlzIHJlc3BvbnNpYmxlIGZvciBkZWNpZGluZyBob3cgdG8gZGlzdHJpYnV0ZSB0aGVzZSB0b2tlbnMuCisgICAgICoKKyAgICAgKiBAcmV0dXJuIEEgdG9rZW4gdGhhdCBjYW4gYmUgdXNlZCB0byBjcmVhdGUgYSBNZWRpYUNvbnRyb2xsZXIgZm9yIHRoaXMKKyAgICAgKiAgICAgICAgIHNlc3Npb24KKyAgICAgKi8KKyAgICBwdWJsaWMgQE5vbk51bGwgVG9rZW4gZ2V0U2Vzc2lvblRva2VuKCkgeworICAgICAgICByZXR1cm4gbVNlc3Npb25Ub2tlbjsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBHZXQgYSBjb250cm9sbGVyIGZvciB0aGlzIHNlc3Npb24uIFRoaXMgaXMgYSBjb252ZW5pZW5jZSBtZXRob2QgdG8gYXZvaWQKKyAgICAgKiBoYXZpbmcgdG8gY2FjaGUgeW91ciBvd24gY29udHJvbGxlciBpbiBwcm9jZXNzLgorICAgICAqCisgICAgICogQHJldHVybiBBIGNvbnRyb2xsZXIgZm9yIHRoaXMgc2Vzc2lvbi4KKyAgICAgKi8KKyAgICBwdWJsaWMgQE5vbk51bGwgTWVkaWFDb250cm9sbGVyIGdldENvbnRyb2xsZXIoKSB7CisgICAgICAgIHJldHVybiBtQ29udHJvbGxlcjsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBVcGRhdGUgdGhlIGN1cnJlbnQgcGxheWJhY2sgc3RhdGUuCisgICAgICoKKyAgICAgKiBAcGFyYW0gc3RhdGUgVGhlIGN1cnJlbnQgc3RhdGUgb2YgcGxheWJhY2sKKyAgICAgKi8KKyAgICBwdWJsaWMgdm9pZCBzZXRQbGF5YmFja1N0YXRlKEBOdWxsYWJsZSBQbGF5YmFja1N0YXRlIHN0YXRlKSB7CisgICAgICAgIG1QbGF5YmFja1N0YXRlID0gc3RhdGU7CisgICAgICAgIHRyeSB7CisgICAgICAgICAgICBtQmluZGVyLnNldFBsYXliYWNrU3RhdGUoc3RhdGUpOworICAgICAgICB9IGNhdGNoIChSZW1vdGVFeGNlcHRpb24gZSkgeworICAgICAgICAgICAgTG9nLnd0ZihUQUcsICJEZWFkIG9iamVjdCBpbiBzZXRQbGF5YmFja1N0YXRlLiIsIGUpOworICAgICAgICB9CisgICAgfQorCisgICAgLyoqCisgICAgICogVXBkYXRlIHRoZSBjdXJyZW50IG1ldGFkYXRhLiBOZXcgbWV0YWRhdGEgY2FuIGJlIGNyZWF0ZWQgdXNpbmcKKyAgICAgKiB7QGxpbmsgYW5kcm9pZC5tZWRpYS5NZWRpYU1ldGFkYXRhLkJ1aWxkZXJ9LiBUaGlzIG9wZXJhdGlvbiBtYXkgdGFrZSB0aW1lIHByb3BvcnRpb25hbCB0bworICAgICAqIHRoZSBzaXplIG9mIHRoZSBiaXRtYXAgdG8gcmVwbGFjZSBsYXJnZSBiaXRtYXBzIHdpdGggYSBzY2FsZWQgZG93biBjb3B5LgorICAgICAqCisgICAgICogQHBhcmFtIG1ldGFkYXRhIFRoZSBuZXcgbWV0YWRhdGEKKyAgICAgKiBAc2VlIGFuZHJvaWQubWVkaWEuTWVkaWFNZXRhZGF0YS5CdWlsZGVyI3B1dEJpdG1hcAorICAgICAqLworICAgIHB1YmxpYyB2b2lkIHNldE1ldGFkYXRhKEBOdWxsYWJsZSBNZWRpYU1ldGFkYXRhIG1ldGFkYXRhKSB7CisgICAgICAgIGlmIChtZXRhZGF0YSAhPSBudWxsKSB7CisgICAgICAgICAgICBtZXRhZGF0YSA9IChuZXcgTWVkaWFNZXRhZGF0YS5CdWlsZGVyKG1ldGFkYXRhLCBtTWF4Qml0bWFwU2l6ZSkpLmJ1aWxkKCk7CisgICAgICAgIH0KKyAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgIG1CaW5kZXIuc2V0TWV0YWRhdGEobWV0YWRhdGEpOworICAgICAgICB9IGNhdGNoIChSZW1vdGVFeGNlcHRpb24gZSkgeworICAgICAgICAgICAgTG9nLnd0ZihUQUcsICJEZWFkIG9iamVjdCBpbiBzZXRQbGF5YmFja1N0YXRlLiIsIGUpOworICAgICAgICB9CisgICAgfQorCisgICAgLyoqCisgICAgICogVXBkYXRlIHRoZSBsaXN0IG9mIGl0ZW1zIGluIHRoZSBwbGF5IHF1ZXVlLiBJdCBpcyBhbiBvcmRlcmVkIGxpc3QgYW5kCisgICAgICogc2hvdWxkIGNvbnRhaW4gdGhlIGN1cnJlbnQgaXRlbSwgYW5kIHByZXZpb3VzIG9yIHVwY29taW5nIGl0ZW1zIGlmIHRoZXkKKyAgICAgKiBleGlzdC4gU3BlY2lmeSBudWxsIGlmIHRoZXJlIGlzIG5vIGN1cnJlbnQgcGxheSBxdWV1ZS4KKyAgICAgKiA8cD4KKyAgICAgKiBUaGUgcXVldWUgc2hvdWxkIGJlIG9mIHJlYXNvbmFibGUgc2l6ZS4gSWYgdGhlIHBsYXkgcXVldWUgaXMgdW5ib3VuZGVkCisgICAgICogd2l0aGluIHlvdXIgYXBwLCBpdCBpcyBiZXR0ZXIgdG8gc2VuZCBhIHJlYXNvbmFibGUgYW1vdW50IGluIGEgc2xpZGluZworICAgICAqIHdpbmRvdyBpbnN0ZWFkLgorICAgICAqCisgICAgICogQHBhcmFtIHF1ZXVlIEEgbGlzdCBvZiBpdGVtcyBpbiB0aGUgcGxheSBxdWV1ZS4KKyAgICAgKi8KKyAgICBwdWJsaWMgdm9pZCBzZXRRdWV1ZShATnVsbGFibGUgTGlzdDxRdWV1ZUl0ZW0+IHF1ZXVlKSB7CisgICAgICAgIC8vVE9ETzooYi8xMTk3NTA4MDcpIFJlc29sdmUgaGlkZGVuIEFQSSB1c2FnZSBQYXJjZWxlZExpc3RTbGljZS4KKyAgICAgICAgLyoKKyAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgIG1CaW5kZXIuc2V0UXVldWUocXVldWUgPT0gbnVsbCA/IG51bGwgOiBuZXcgUGFyY2VsZWRMaXN0U2xpY2U8UXVldWVJdGVtPihxdWV1ZSkpOworICAgICAgICB9IGNhdGNoIChSZW1vdGVFeGNlcHRpb24gZSkgeworICAgICAgICAgICAgTG9nLnd0ZigiRGVhZCBvYmplY3QgaW4gc2V0UXVldWUuIiwgZSk7CisgICAgICAgIH0KKyAgICAgICAgKi8KKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBTZXQgdGhlIHRpdGxlIG9mIHRoZSBwbGF5IHF1ZXVlLiBUaGUgVUkgc2hvdWxkIGRpc3BsYXkgdGhpcyB0aXRsZSBhbG9uZworICAgICAqIHdpdGggdGhlIHBsYXkgcXVldWUgaXRzZWxmLgorICAgICAqIGUuZy4gIlBsYXkgUXVldWUiLCAiTm93IFBsYXlpbmciLCBvciBhbiBhbGJ1bSBuYW1lLgorICAgICAqCisgICAgICogQHBhcmFtIHRpdGxlIFRoZSB0aXRsZSBvZiB0aGUgcGxheSBxdWV1ZS4KKyAgICAgKi8KKyAgICBwdWJsaWMgdm9pZCBzZXRRdWV1ZVRpdGxlKEBOdWxsYWJsZSBDaGFyU2VxdWVuY2UgdGl0bGUpIHsKKyAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgIG1CaW5kZXIuc2V0UXVldWVUaXRsZSh0aXRsZSk7CisgICAgICAgIH0gY2F0Y2ggKFJlbW90ZUV4Y2VwdGlvbiBlKSB7CisgICAgICAgICAgICBMb2cud3RmKCJEZWFkIG9iamVjdCBpbiBzZXRRdWV1ZVRpdGxlLiIsIGUpOworICAgICAgICB9CisgICAgfQorCisgICAgLyoqCisgICAgICogU2V0IHRoZSBzdHlsZSBvZiByYXRpbmcgdXNlZCBieSB0aGlzIHNlc3Npb24uIEFwcHMgdHJ5aW5nIHRvIHNldCB0aGUKKyAgICAgKiByYXRpbmcgc2hvdWxkIHVzZSB0aGlzIHN0eWxlLiBNdXN0IGJlIG9uZSBvZiB0aGUgZm9sbG93aW5nOgorICAgICAqIDx1bD4KKyAgICAgKiA8bGk+e0BsaW5rIFJhdGluZyNSQVRJTkdfTk9ORX08L2xpPgorICAgICAqIDxsaT57QGxpbmsgUmF0aW5nI1JBVElOR18zX1NUQVJTfTwvbGk+CisgICAgICogPGxpPntAbGluayBSYXRpbmcjUkFUSU5HXzRfU1RBUlN9PC9saT4KKyAgICAgKiA8bGk+e0BsaW5rIFJhdGluZyNSQVRJTkdfNV9TVEFSU308L2xpPgorICAgICAqIDxsaT57QGxpbmsgUmF0aW5nI1JBVElOR19IRUFSVH08L2xpPgorICAgICAqIDxsaT57QGxpbmsgUmF0aW5nI1JBVElOR19QRVJDRU5UQUdFfTwvbGk+CisgICAgICogPGxpPntAbGluayBSYXRpbmcjUkFUSU5HX1RIVU1CX1VQX0RPV059PC9saT4KKyAgICAgKiA8L3VsPgorICAgICAqLworICAgIHB1YmxpYyB2b2lkIHNldFJhdGluZ1R5cGUoQFJhdGluZy5TdHlsZSBpbnQgdHlwZSkgeworICAgICAgICB0cnkgeworICAgICAgICAgICAgbUJpbmRlci5zZXRSYXRpbmdUeXBlKHR5cGUpOworICAgICAgICB9IGNhdGNoIChSZW1vdGVFeGNlcHRpb24gZSkgeworICAgICAgICAgICAgTG9nLmUoVEFHLCAiRXJyb3IgaW4gc2V0UmF0aW5nVHlwZS4iLCBlKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIC8qKgorICAgICAqIFNldCBzb21lIGV4dHJhcyB0aGF0IGNhbiBiZSBhc3NvY2lhdGVkIHdpdGggdGhlIHtAbGluayBNZWRpYVNlc3Npb259LiBObyBhc3N1bXB0aW9ucyBzaG91bGQKKyAgICAgKiBiZSBtYWRlIGFzIHRvIGhvdyBhIHtAbGluayBNZWRpYUNvbnRyb2xsZXJ9IHdpbGwgaGFuZGxlIHRoZXNlIGV4dHJhcy4KKyAgICAgKiBLZXlzIHNob3VsZCBiZSBmdWxseSBxdWFsaWZpZWQgKGUuZy4gY29tLmV4YW1wbGUuTVlfRVhUUkEpIHRvIGF2b2lkIGNvbmZsaWN0cy4KKyAgICAgKgorICAgICAqIEBwYXJhbSBleHRyYXMgVGhlIGV4dHJhcyBhc3NvY2lhdGVkIHdpdGggdGhlIHtAbGluayBNZWRpYVNlc3Npb259LgorICAgICAqLworICAgIHB1YmxpYyB2b2lkIHNldEV4dHJhcyhATnVsbGFibGUgQnVuZGxlIGV4dHJhcykgeworICAgICAgICB0cnkgeworICAgICAgICAgICAgbUJpbmRlci5zZXRFeHRyYXMoZXh0cmFzKTsKKyAgICAgICAgfSBjYXRjaCAoUmVtb3RlRXhjZXB0aW9uIGUpIHsKKyAgICAgICAgICAgIExvZy53dGYoIkRlYWQgb2JqZWN0IGluIHNldEV4dHJhcy4iLCBlKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIC8qKgorICAgICAqIEdldHMgdGhlIGNvbnRyb2xsZXIgaW5mb3JtYXRpb24gd2hvIHNlbnQgdGhlIGN1cnJlbnQgcmVxdWVzdC4KKyAgICAgKiA8cD4KKyAgICAgKiBOb3RlOiBUaGlzIGlzIG9ubHkgdmFsaWQgd2hpbGUgaW4gYSByZXF1ZXN0IGNhbGxiYWNrLCBzdWNoIGFzIHtAbGluayBDYWxsYmFjayNvblBsYXl9LgorICAgICAqCisgICAgICogQHRocm93cyBJbGxlZ2FsU3RhdGVFeGNlcHRpb24gSWYgdGhpcyBtZXRob2QgaXMgY2FsbGVkIG91dHNpZGUgb2Yge0BsaW5rIENhbGxiYWNrfSBtZXRob2RzLgorICAgICAqIEBzZWUgTWVkaWFTZXNzaW9uTWFuYWdlciNpc1RydXN0ZWRGb3JNZWRpYUNvbnRyb2woUmVtb3RlVXNlckluZm8pCisgICAgICovCisgICAgcHVibGljIGZpbmFsIEBOb25OdWxsIFJlbW90ZVVzZXJJbmZvIGdldEN1cnJlbnRDb250cm9sbGVySW5mbygpIHsKKyAgICAgICAgaWYgKG1DYWxsYmFjayA9PSBudWxsIHx8IG1DYWxsYmFjay5tQ3VycmVudENvbnRyb2xsZXJJbmZvID09IG51bGwpIHsKKyAgICAgICAgICAgIHRocm93IG5ldyBJbGxlZ2FsU3RhdGVFeGNlcHRpb24oCisgICAgICAgICAgICAgICAgICAgICJUaGlzIHNob3VsZCBiZSBjYWxsZWQgaW5zaWRlIG9mIE1lZGlhU2Vzc2lvbi5DYWxsYmFjayBtZXRob2RzIik7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIG1DYWxsYmFjay5tQ3VycmVudENvbnRyb2xsZXJJbmZvOworICAgIH0KKworICAgIC8qKgorICAgICAqIE5vdGlmeSB0aGUgc3lzdGVtIHRoYXQgdGhlIHJlbW90ZSB2b2x1bWUgY2hhbmdlZC4KKyAgICAgKgorICAgICAqIEBwYXJhbSBwcm92aWRlciBUaGUgcHJvdmlkZXIgdGhhdCBpcyBoYW5kbGluZyB2b2x1bWUgY2hhbmdlcy4KKyAgICAgKiBAaGlkZQorICAgICAqLworICAgIHB1YmxpYyB2b2lkIG5vdGlmeVJlbW90ZVZvbHVtZUNoYW5nZWQoVm9sdW1lUHJvdmlkZXIgcHJvdmlkZXIpIHsKKyAgICAgICAgc3luY2hyb25pemVkIChtTG9jaykgeworICAgICAgICAgICAgaWYgKHByb3ZpZGVyID09IG51bGwgfHwgcHJvdmlkZXIgIT0gbVZvbHVtZVByb3ZpZGVyKSB7CisgICAgICAgICAgICAgICAgTG9nLncoVEFHLCAiUmVjZWl2ZWQgdXBkYXRlIGZyb20gc3RhbGUgdm9sdW1lIHByb3ZpZGVyIik7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIHRyeSB7CisgICAgICAgICAgICBtQmluZGVyLnNldEN1cnJlbnRWb2x1bWUocHJvdmlkZXIuZ2V0Q3VycmVudFZvbHVtZSgpKTsKKyAgICAgICAgfSBjYXRjaCAoUmVtb3RlRXhjZXB0aW9uIGUpIHsKKyAgICAgICAgICAgIExvZy5lKFRBRywgIkVycm9yIGluIG5vdGlmeVZvbHVtZUNoYW5nZWQiLCBlKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIC8qKgorICAgICAqIFJldHVybnMgdGhlIG5hbWUgb2YgdGhlIHBhY2thZ2UgdGhhdCBzZW50IHRoZSBsYXN0IG1lZGlhIGJ1dHRvbiwgdHJhbnNwb3J0IGNvbnRyb2wsIG9yCisgICAgICogY29tbWFuZCBmcm9tIGNvbnRyb2xsZXJzIGFuZCB0aGUgc3lzdGVtLiBUaGlzIGlzIG9ubHkgdmFsaWQgd2hpbGUgaW4gYSByZXF1ZXN0IGNhbGxiYWNrLCBzdWNoCisgICAgICogYXMge0BsaW5rIENhbGxiYWNrI29uUGxheX0uCisgICAgICoKKyAgICAgKiBAaGlkZQorICAgICAqLworICAgIEBVbnN1cHBvcnRlZEFwcFVzYWdlCisgICAgcHVibGljIFN0cmluZyBnZXRDYWxsaW5nUGFja2FnZSgpIHsKKyAgICAgICAgaWYgKG1DYWxsYmFjayAhPSBudWxsICYmIG1DYWxsYmFjay5tQ3VycmVudENvbnRyb2xsZXJJbmZvICE9IG51bGwpIHsKKyAgICAgICAgICAgIHJldHVybiBtQ2FsbGJhY2subUN1cnJlbnRDb250cm9sbGVySW5mby5nZXRQYWNrYWdlTmFtZSgpOworICAgICAgICB9CisgICAgICAgIHJldHVybiBudWxsOworICAgIH0KKworICAgIHByaXZhdGUgdm9pZCBkaXNwYXRjaFByZXBhcmUoUmVtb3RlVXNlckluZm8gY2FsbGVyKSB7CisgICAgICAgIHBvc3RUb0NhbGxiYWNrKGNhbGxlciwgQ2FsbGJhY2tNZXNzYWdlSGFuZGxlci5NU0dfUFJFUEFSRSwgbnVsbCwgbnVsbCk7CisgICAgfQorCisgICAgcHJpdmF0ZSB2b2lkIGRpc3BhdGNoUHJlcGFyZUZyb21NZWRpYUlkKFJlbW90ZVVzZXJJbmZvIGNhbGxlciwgU3RyaW5nIG1lZGlhSWQsIEJ1bmRsZSBleHRyYXMpIHsKKyAgICAgICAgcG9zdFRvQ2FsbGJhY2soY2FsbGVyLCBDYWxsYmFja01lc3NhZ2VIYW5kbGVyLk1TR19QUkVQQVJFX01FRElBX0lELCBtZWRpYUlkLCBleHRyYXMpOworICAgIH0KKworICAgIHByaXZhdGUgdm9pZCBkaXNwYXRjaFByZXBhcmVGcm9tU2VhcmNoKFJlbW90ZVVzZXJJbmZvIGNhbGxlciwgU3RyaW5nIHF1ZXJ5LCBCdW5kbGUgZXh0cmFzKSB7CisgICAgICAgIHBvc3RUb0NhbGxiYWNrKGNhbGxlciwgQ2FsbGJhY2tNZXNzYWdlSGFuZGxlci5NU0dfUFJFUEFSRV9TRUFSQ0gsIHF1ZXJ5LCBleHRyYXMpOworICAgIH0KKworICAgIHByaXZhdGUgdm9pZCBkaXNwYXRjaFByZXBhcmVGcm9tVXJpKFJlbW90ZVVzZXJJbmZvIGNhbGxlciwgVXJpIHVyaSwgQnVuZGxlIGV4dHJhcykgeworICAgICAgICBwb3N0VG9DYWxsYmFjayhjYWxsZXIsIENhbGxiYWNrTWVzc2FnZUhhbmRsZXIuTVNHX1BSRVBBUkVfVVJJLCB1cmksIGV4dHJhcyk7CisgICAgfQorCisgICAgcHJpdmF0ZSB2b2lkIGRpc3BhdGNoUGxheShSZW1vdGVVc2VySW5mbyBjYWxsZXIpIHsKKyAgICAgICAgcG9zdFRvQ2FsbGJhY2soY2FsbGVyLCBDYWxsYmFja01lc3NhZ2VIYW5kbGVyLk1TR19QTEFZLCBudWxsLCBudWxsKTsKKyAgICB9CisKKyAgICBwcml2YXRlIHZvaWQgZGlzcGF0Y2hQbGF5RnJvbU1lZGlhSWQoUmVtb3RlVXNlckluZm8gY2FsbGVyLCBTdHJpbmcgbWVkaWFJZCwgQnVuZGxlIGV4dHJhcykgeworICAgICAgICBwb3N0VG9DYWxsYmFjayhjYWxsZXIsIENhbGxiYWNrTWVzc2FnZUhhbmRsZXIuTVNHX1BMQVlfTUVESUFfSUQsIG1lZGlhSWQsIGV4dHJhcyk7CisgICAgfQorCisgICAgcHJpdmF0ZSB2b2lkIGRpc3BhdGNoUGxheUZyb21TZWFyY2goUmVtb3RlVXNlckluZm8gY2FsbGVyLCBTdHJpbmcgcXVlcnksIEJ1bmRsZSBleHRyYXMpIHsKKyAgICAgICAgcG9zdFRvQ2FsbGJhY2soY2FsbGVyLCBDYWxsYmFja01lc3NhZ2VIYW5kbGVyLk1TR19QTEFZX1NFQVJDSCwgcXVlcnksIGV4dHJhcyk7CisgICAgfQorCisgICAgcHJpdmF0ZSB2b2lkIGRpc3BhdGNoUGxheUZyb21VcmkoUmVtb3RlVXNlckluZm8gY2FsbGVyLCBVcmkgdXJpLCBCdW5kbGUgZXh0cmFzKSB7CisgICAgICAgIHBvc3RUb0NhbGxiYWNrKGNhbGxlciwgQ2FsbGJhY2tNZXNzYWdlSGFuZGxlci5NU0dfUExBWV9VUkksIHVyaSwgZXh0cmFzKTsKKyAgICB9CisKKyAgICBwcml2YXRlIHZvaWQgZGlzcGF0Y2hTa2lwVG9JdGVtKFJlbW90ZVVzZXJJbmZvIGNhbGxlciwgbG9uZyBpZCkgeworICAgICAgICBwb3N0VG9DYWxsYmFjayhjYWxsZXIsIENhbGxiYWNrTWVzc2FnZUhhbmRsZXIuTVNHX1NLSVBfVE9fSVRFTSwgaWQsIG51bGwpOworICAgIH0KKworICAgIHByaXZhdGUgdm9pZCBkaXNwYXRjaFBhdXNlKFJlbW90ZVVzZXJJbmZvIGNhbGxlcikgeworICAgICAgICBwb3N0VG9DYWxsYmFjayhjYWxsZXIsIENhbGxiYWNrTWVzc2FnZUhhbmRsZXIuTVNHX1BBVVNFLCBudWxsLCBudWxsKTsKKyAgICB9CisKKyAgICBwcml2YXRlIHZvaWQgZGlzcGF0Y2hTdG9wKFJlbW90ZVVzZXJJbmZvIGNhbGxlcikgeworICAgICAgICBwb3N0VG9DYWxsYmFjayhjYWxsZXIsIENhbGxiYWNrTWVzc2FnZUhhbmRsZXIuTVNHX1NUT1AsIG51bGwsIG51bGwpOworICAgIH0KKworICAgIHByaXZhdGUgdm9pZCBkaXNwYXRjaE5leHQoUmVtb3RlVXNlckluZm8gY2FsbGVyKSB7CisgICAgICAgIHBvc3RUb0NhbGxiYWNrKGNhbGxlciwgQ2FsbGJhY2tNZXNzYWdlSGFuZGxlci5NU0dfTkVYVCwgbnVsbCwgbnVsbCk7CisgICAgfQorCisgICAgcHJpdmF0ZSB2b2lkIGRpc3BhdGNoUHJldmlvdXMoUmVtb3RlVXNlckluZm8gY2FsbGVyKSB7CisgICAgICAgIHBvc3RUb0NhbGxiYWNrKGNhbGxlciwgQ2FsbGJhY2tNZXNzYWdlSGFuZGxlci5NU0dfUFJFVklPVVMsIG51bGwsIG51bGwpOworICAgIH0KKworICAgIHByaXZhdGUgdm9pZCBkaXNwYXRjaEZhc3RGb3J3YXJkKFJlbW90ZVVzZXJJbmZvIGNhbGxlcikgeworICAgICAgICBwb3N0VG9DYWxsYmFjayhjYWxsZXIsIENhbGxiYWNrTWVzc2FnZUhhbmRsZXIuTVNHX0ZBU1RfRk9SV0FSRCwgbnVsbCwgbnVsbCk7CisgICAgfQorCisgICAgcHJpdmF0ZSB2b2lkIGRpc3BhdGNoUmV3aW5kKFJlbW90ZVVzZXJJbmZvIGNhbGxlcikgeworICAgICAgICBwb3N0VG9DYWxsYmFjayhjYWxsZXIsIENhbGxiYWNrTWVzc2FnZUhhbmRsZXIuTVNHX1JFV0lORCwgbnVsbCwgbnVsbCk7CisgICAgfQorCisgICAgcHJpdmF0ZSB2b2lkIGRpc3BhdGNoU2Vla1RvKFJlbW90ZVVzZXJJbmZvIGNhbGxlciwgbG9uZyBwb3MpIHsKKyAgICAgICAgcG9zdFRvQ2FsbGJhY2soY2FsbGVyLCBDYWxsYmFja01lc3NhZ2VIYW5kbGVyLk1TR19TRUVLX1RPLCBwb3MsIG51bGwpOworICAgIH0KKworICAgIHByaXZhdGUgdm9pZCBkaXNwYXRjaFJhdGUoUmVtb3RlVXNlckluZm8gY2FsbGVyLCBSYXRpbmcgcmF0aW5nKSB7CisgICAgICAgIHBvc3RUb0NhbGxiYWNrKGNhbGxlciwgQ2FsbGJhY2tNZXNzYWdlSGFuZGxlci5NU0dfUkFURSwgcmF0aW5nLCBudWxsKTsKKyAgICB9CisKKyAgICBwcml2YXRlIHZvaWQgZGlzcGF0Y2hDdXN0b21BY3Rpb24oUmVtb3RlVXNlckluZm8gY2FsbGVyLCBTdHJpbmcgYWN0aW9uLCBCdW5kbGUgYXJncykgeworICAgICAgICBwb3N0VG9DYWxsYmFjayhjYWxsZXIsIENhbGxiYWNrTWVzc2FnZUhhbmRsZXIuTVNHX0NVU1RPTV9BQ1RJT04sIGFjdGlvbiwgYXJncyk7CisgICAgfQorCisgICAgcHJpdmF0ZSB2b2lkIGRpc3BhdGNoTWVkaWFCdXR0b24oUmVtb3RlVXNlckluZm8gY2FsbGVyLCBJbnRlbnQgbWVkaWFCdXR0b25JbnRlbnQpIHsKKyAgICAgICAgcG9zdFRvQ2FsbGJhY2soY2FsbGVyLCBDYWxsYmFja01lc3NhZ2VIYW5kbGVyLk1TR19NRURJQV9CVVRUT04sIG1lZGlhQnV0dG9uSW50ZW50LCBudWxsKTsKKyAgICB9CisKKyAgICBwcml2YXRlIHZvaWQgZGlzcGF0Y2hNZWRpYUJ1dHRvbkRlbGF5ZWQoUmVtb3RlVXNlckluZm8gaW5mbywgSW50ZW50IG1lZGlhQnV0dG9uSW50ZW50LAorICAgICAgICAgICAgbG9uZyBkZWxheSkgeworICAgICAgICBwb3N0VG9DYWxsYmFja0RlbGF5ZWQoaW5mbywgQ2FsbGJhY2tNZXNzYWdlSGFuZGxlci5NU0dfUExBWV9QQVVTRV9LRVlfRE9VQkxFX1RBUF9USU1FT1VULAorICAgICAgICAgICAgICAgIG1lZGlhQnV0dG9uSW50ZW50LCBudWxsLCBkZWxheSk7CisgICAgfQorCisgICAgcHJpdmF0ZSB2b2lkIGRpc3BhdGNoQWRqdXN0Vm9sdW1lKFJlbW90ZVVzZXJJbmZvIGNhbGxlciwgaW50IGRpcmVjdGlvbikgeworICAgICAgICBwb3N0VG9DYWxsYmFjayhjYWxsZXIsIENhbGxiYWNrTWVzc2FnZUhhbmRsZXIuTVNHX0FESlVTVF9WT0xVTUUsIGRpcmVjdGlvbiwgbnVsbCk7CisgICAgfQorCisgICAgcHJpdmF0ZSB2b2lkIGRpc3BhdGNoU2V0Vm9sdW1lVG8oUmVtb3RlVXNlckluZm8gY2FsbGVyLCBpbnQgdm9sdW1lKSB7CisgICAgICAgIHBvc3RUb0NhbGxiYWNrKGNhbGxlciwgQ2FsbGJhY2tNZXNzYWdlSGFuZGxlci5NU0dfU0VUX1ZPTFVNRSwgdm9sdW1lLCBudWxsKTsKKyAgICB9CisKKyAgICBwcml2YXRlIHZvaWQgZGlzcGF0Y2hDb21tYW5kKFJlbW90ZVVzZXJJbmZvIGNhbGxlciwgU3RyaW5nIGNvbW1hbmQsIEJ1bmRsZSBhcmdzLAorICAgICAgICAgICAgUmVzdWx0UmVjZWl2ZXIgcmVzdWx0Q2IpIHsKKyAgICAgICAgQ29tbWFuZCBjbWQgPSBuZXcgQ29tbWFuZChjb21tYW5kLCBhcmdzLCByZXN1bHRDYik7CisgICAgICAgIHBvc3RUb0NhbGxiYWNrKGNhbGxlciwgQ2FsbGJhY2tNZXNzYWdlSGFuZGxlci5NU0dfQ09NTUFORCwgY21kLCBudWxsKTsKKyAgICB9CisKKyAgICBwcml2YXRlIHZvaWQgcG9zdFRvQ2FsbGJhY2soUmVtb3RlVXNlckluZm8gY2FsbGVyLCBpbnQgd2hhdCwgT2JqZWN0IG9iaiwgQnVuZGxlIGRhdGEpIHsKKyAgICAgICAgcG9zdFRvQ2FsbGJhY2tEZWxheWVkKGNhbGxlciwgd2hhdCwgb2JqLCBkYXRhLCAwKTsKKyAgICB9CisKKyAgICBwcml2YXRlIHZvaWQgcG9zdFRvQ2FsbGJhY2tEZWxheWVkKFJlbW90ZVVzZXJJbmZvIGNhbGxlciwgaW50IHdoYXQsIE9iamVjdCBvYmosIEJ1bmRsZSBkYXRhLAorICAgICAgICAgICAgbG9uZyBkZWxheSkgeworICAgICAgICBzeW5jaHJvbml6ZWQgKG1Mb2NrKSB7CisgICAgICAgICAgICBpZiAobUNhbGxiYWNrICE9IG51bGwpIHsKKyAgICAgICAgICAgICAgICBtQ2FsbGJhY2sucG9zdChjYWxsZXIsIHdoYXQsIG9iaiwgZGF0YSwgZGVsYXkpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCisgICAgLyoqCisgICAgICogUmV0dXJuIHRydWUgaWYgdGhpcyBpcyBjb25zaWRlcmVkIGFuIGFjdGl2ZSBwbGF5YmFjayBzdGF0ZS4KKyAgICAgKgorICAgICAqIEBoaWRlCisgICAgICovCisgICAgcHVibGljIHN0YXRpYyBib29sZWFuIGlzQWN0aXZlU3RhdGUoaW50IHN0YXRlKSB7CisgICAgICAgIHN3aXRjaCAoc3RhdGUpIHsKKyAgICAgICAgICAgIGNhc2UgUGxheWJhY2tTdGF0ZS5TVEFURV9GQVNUX0ZPUldBUkRJTkc6CisgICAgICAgICAgICBjYXNlIFBsYXliYWNrU3RhdGUuU1RBVEVfUkVXSU5ESU5HOgorICAgICAgICAgICAgY2FzZSBQbGF5YmFja1N0YXRlLlNUQVRFX1NLSVBQSU5HX1RPX1BSRVZJT1VTOgorICAgICAgICAgICAgY2FzZSBQbGF5YmFja1N0YXRlLlNUQVRFX1NLSVBQSU5HX1RPX05FWFQ6CisgICAgICAgICAgICBjYXNlIFBsYXliYWNrU3RhdGUuU1RBVEVfQlVGRkVSSU5HOgorICAgICAgICAgICAgY2FzZSBQbGF5YmFja1N0YXRlLlNUQVRFX0NPTk5FQ1RJTkc6CisgICAgICAgICAgICBjYXNlIFBsYXliYWNrU3RhdGUuU1RBVEVfUExBWUlORzoKKyAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgLyoqCisgICAgICogUmVwcmVzZW50cyBhbiBvbmdvaW5nIHNlc3Npb24uIFRoaXMgbWF5IGJlIHBhc3NlZCB0byBhcHBzIGJ5IHRoZSBzZXNzaW9uCisgICAgICogb3duZXIgdG8gYWxsb3cgdGhlbSB0byBjcmVhdGUgYSB7QGxpbmsgTWVkaWFDb250cm9sbGVyfSB0byBjb21tdW5pY2F0ZSB3aXRoCisgICAgICogdGhlIHNlc3Npb24uCisgICAgICovCisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBjbGFzcyBUb2tlbiBpbXBsZW1lbnRzIFBhcmNlbGFibGUgeworCisgICAgICAgIHByaXZhdGUgSVNlc3Npb25Db250cm9sbGVyIG1CaW5kZXI7CisKKyAgICAgICAgLyoqCisgICAgICAgICAqIEBoaWRlCisgICAgICAgICAqLworICAgICAgICBwdWJsaWMgVG9rZW4oSVNlc3Npb25Db250cm9sbGVyIGJpbmRlcikgeworICAgICAgICAgICAgbUJpbmRlciA9IGJpbmRlcjsKKyAgICAgICAgfQorCisgICAgICAgIEBPdmVycmlkZQorICAgICAgICBwdWJsaWMgaW50IGRlc2NyaWJlQ29udGVudHMoKSB7CisgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgfQorCisgICAgICAgIEBPdmVycmlkZQorICAgICAgICBwdWJsaWMgdm9pZCB3cml0ZVRvUGFyY2VsKFBhcmNlbCBkZXN0LCBpbnQgZmxhZ3MpIHsKKyAgICAgICAgICAgIGRlc3Qud3JpdGVTdHJvbmdCaW5kZXIobUJpbmRlci5hc0JpbmRlcigpKTsKKyAgICAgICAgfQorCisgICAgICAgIEBPdmVycmlkZQorICAgICAgICBwdWJsaWMgaW50IGhhc2hDb2RlKCkgeworICAgICAgICAgICAgZmluYWwgaW50IHByaW1lID0gMzE7CisgICAgICAgICAgICBpbnQgcmVzdWx0ID0gMTsKKyAgICAgICAgICAgIHJlc3VsdCA9IHByaW1lICogcmVzdWx0ICsgKChtQmluZGVyID09IG51bGwpID8gMCA6IG1CaW5kZXIuYXNCaW5kZXIoKS5oYXNoQ29kZSgpKTsKKyAgICAgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgICAgIH0KKworICAgICAgICBAT3ZlcnJpZGUKKyAgICAgICAgcHVibGljIGJvb2xlYW4gZXF1YWxzKE9iamVjdCBvYmopIHsKKyAgICAgICAgICAgIGlmICh0aGlzID09IG9iaikKKyAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgICAgIGlmIChvYmogPT0gbnVsbCkKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICBpZiAoZ2V0Q2xhc3MoKSAhPSBvYmouZ2V0Q2xhc3MoKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICBUb2tlbiBvdGhlciA9IChUb2tlbikgb2JqOworICAgICAgICAgICAgaWYgKG1CaW5kZXIgPT0gbnVsbCkgeworICAgICAgICAgICAgICAgIGlmIChvdGhlci5tQmluZGVyICE9IG51bGwpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIH0gZWxzZSBpZiAoIW1CaW5kZXIuYXNCaW5kZXIoKS5lcXVhbHMob3RoZXIubUJpbmRlci5hc0JpbmRlcigpKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQorCisgICAgICAgIElTZXNzaW9uQ29udHJvbGxlciBnZXRCaW5kZXIoKSB7CisgICAgICAgICAgICByZXR1cm4gbUJpbmRlcjsKKyAgICAgICAgfQorCisgICAgICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgUGFyY2VsYWJsZS5DcmVhdG9yPFRva2VuPiBDUkVBVE9SCisgICAgICAgICAgICAgICAgPSBuZXcgUGFyY2VsYWJsZS5DcmVhdG9yPFRva2VuPigpIHsKKyAgICAgICAgICAgIEBPdmVycmlkZQorICAgICAgICAgICAgcHVibGljIFRva2VuIGNyZWF0ZUZyb21QYXJjZWwoUGFyY2VsIGluKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBUb2tlbihJU2Vzc2lvbkNvbnRyb2xsZXIuU3R1Yi5hc0ludGVyZmFjZShpbi5yZWFkU3Ryb25nQmluZGVyKCkpKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgQE92ZXJyaWRlCisgICAgICAgICAgICBwdWJsaWMgVG9rZW5bXSBuZXdBcnJheShpbnQgc2l6ZSkgeworICAgICAgICAgICAgICAgIHJldHVybiBuZXcgVG9rZW5bc2l6ZV07CisgICAgICAgICAgICB9CisgICAgICAgIH07CisgICAgfQorCisgICAgLyoqCisgICAgICogUmVjZWl2ZXMgbWVkaWEgYnV0dG9ucywgdHJhbnNwb3J0IGNvbnRyb2xzLCBhbmQgY29tbWFuZHMgZnJvbSBjb250cm9sbGVycworICAgICAqIGFuZCB0aGUgc3lzdGVtLiBBIGNhbGxiYWNrIG1heSBiZSBzZXQgdXNpbmcge0BsaW5rICNzZXRDYWxsYmFja30uCisgICAgICovCisgICAgcHVibGljIGFic3RyYWN0IHN0YXRpYyBjbGFzcyBDYWxsYmFjayB7CisKKyAgICAgICAgcHJpdmF0ZSBNZWRpYVNlc3Npb24gbVNlc3Npb247CisgICAgICAgIHByaXZhdGUgQ2FsbGJhY2tNZXNzYWdlSGFuZGxlciBtSGFuZGxlcjsKKyAgICAgICAgcHJpdmF0ZSBib29sZWFuIG1NZWRpYVBsYXlQYXVzZUtleVBlbmRpbmc7CisKKyAgICAgICAgcHVibGljIENhbGxiYWNrKCkgeworICAgICAgICB9CisKKyAgICAgICAgLyoqCisgICAgICAgICAqIENhbGxlZCB3aGVuIGEgY29udHJvbGxlciBoYXMgc2VudCBhIGNvbW1hbmQgdG8gdGhpcyBzZXNzaW9uLgorICAgICAgICAgKiBUaGUgb3duZXIgb2YgdGhlIHNlc3Npb24gbWF5IGhhbmRsZSBjdXN0b20gY29tbWFuZHMgYnV0IGlzIG5vdAorICAgICAgICAgKiByZXF1aXJlZCB0by4KKyAgICAgICAgICoKKyAgICAgICAgICogQHBhcmFtIGNvbW1hbmQgVGhlIGNvbW1hbmQgbmFtZS4KKyAgICAgICAgICogQHBhcmFtIGFyZ3MgT3B0aW9uYWwgcGFyYW1ldGVycyBmb3IgdGhlIGNvbW1hbmQsIG1heSBiZSBudWxsLgorICAgICAgICAgKiBAcGFyYW0gY2IgQSByZXN1bHQgcmVjZWl2ZXIgdG8gd2hpY2ggYSByZXN1bHQgbWF5IGJlIHNlbnQgYnkgdGhlIGNvbW1hbmQsIG1heSBiZSBudWxsLgorICAgICAgICAgKi8KKyAgICAgICAgcHVibGljIHZvaWQgb25Db21tYW5kKEBOb25OdWxsIFN0cmluZyBjb21tYW5kLCBATnVsbGFibGUgQnVuZGxlIGFyZ3MsCisgICAgICAgICAgICAgICAgQE51bGxhYmxlIFJlc3VsdFJlY2VpdmVyIGNiKSB7CisgICAgICAgIH0KKworICAgICAgICAvKioKKyAgICAgICAgICogQ2FsbGVkIHdoZW4gYSBtZWRpYSBidXR0b24gaXMgcHJlc3NlZCBhbmQgdGhpcyBzZXNzaW9uIGhhcyB0aGUKKyAgICAgICAgICogaGlnaGVzdCBwcmlvcml0eSBvciBhIGNvbnRyb2xsZXIgc2VuZHMgYSBtZWRpYSBidXR0b24gZXZlbnQgdG8gdGhlCisgICAgICAgICAqIHNlc3Npb24uIFRoZSBkZWZhdWx0IGJlaGF2aW9yIHdpbGwgY2FsbCB0aGUgcmVsZXZhbnQgbWV0aG9kIGlmIHRoZQorICAgICAgICAgKiBhY3Rpb24gZm9yIGl0IHdhcyBzZXQuCisgICAgICAgICAqIDxwPgorICAgICAgICAgKiBUaGUgaW50ZW50IHdpbGwgYmUgb2YgdHlwZSB7QGxpbmsgSW50ZW50I0FDVElPTl9NRURJQV9CVVRUT059IHdpdGggYQorICAgICAgICAgKiBLZXlFdmVudCBpbiB7QGxpbmsgSW50ZW50I0VYVFJBX0tFWV9FVkVOVH0KKyAgICAgICAgICoKKyAgICAgICAgICogQHBhcmFtIG1lZGlhQnV0dG9uSW50ZW50IGFuIGludGVudCBjb250YWluaW5nIHRoZSBLZXlFdmVudCBhcyBhbgorICAgICAgICAgKiAgICAgICAgICAgIGV4dHJhCisgICAgICAgICAqIEByZXR1cm4gVHJ1ZSBpZiB0aGUgZXZlbnQgd2FzIGhhbmRsZWQsIGZhbHNlIG90aGVyd2lzZS4KKyAgICAgICAgICovCisgICAgICAgIHB1YmxpYyBib29sZWFuIG9uTWVkaWFCdXR0b25FdmVudChATm9uTnVsbCBJbnRlbnQgbWVkaWFCdXR0b25JbnRlbnQpIHsKKyAgICAgICAgICAgIGlmIChtU2Vzc2lvbiAhPSBudWxsICYmIG1IYW5kbGVyICE9IG51bGwKKyAgICAgICAgICAgICAgICAgICAgJiYgSW50ZW50LkFDVElPTl9NRURJQV9CVVRUT04uZXF1YWxzKG1lZGlhQnV0dG9uSW50ZW50LmdldEFjdGlvbigpKSkgeworICAgICAgICAgICAgICAgIEtleUV2ZW50IGtlID0gbWVkaWFCdXR0b25JbnRlbnQuZ2V0UGFyY2VsYWJsZUV4dHJhKEludGVudC5FWFRSQV9LRVlfRVZFTlQpOworICAgICAgICAgICAgICAgIGlmIChrZSAhPSBudWxsICYmIGtlLmdldEFjdGlvbigpID09IEtleUV2ZW50LkFDVElPTl9ET1dOKSB7CisgICAgICAgICAgICAgICAgICAgIFBsYXliYWNrU3RhdGUgc3RhdGUgPSBtU2Vzc2lvbi5tUGxheWJhY2tTdGF0ZTsKKyAgICAgICAgICAgICAgICAgICAgbG9uZyB2YWxpZEFjdGlvbnMgPSBzdGF0ZSA9PSBudWxsID8gMCA6IHN0YXRlLmdldEFjdGlvbnMoKTsKKyAgICAgICAgICAgICAgICAgICAgc3dpdGNoIChrZS5nZXRLZXlDb2RlKCkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgS2V5RXZlbnQuS0VZQ09ERV9NRURJQV9QTEFZX1BBVVNFOgorICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBLZXlFdmVudC5LRVlDT0RFX0hFQURTRVRIT09LOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChrZS5nZXRSZXBlYXRDb3VudCgpID4gMCkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBDb25zaWRlciBsb25nLXByZXNzIGFzIGEgc2luZ2xlIHRhcC4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGFuZGxlTWVkaWFQbGF5UGF1c2VLZXlTaW5nbGVUYXBJZlBlbmRpbmcoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKG1NZWRpYVBsYXlQYXVzZUtleVBlbmRpbmcpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gQ29uc2lkZXIgZG91YmxlIHRhcCBhcyB0aGUgbmV4dC4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbUhhbmRsZXIucmVtb3ZlTWVzc2FnZXMoQ2FsbGJhY2tNZXNzYWdlSGFuZGxlcgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5NU0dfUExBWV9QQVVTRV9LRVlfRE9VQkxFX1RBUF9USU1FT1VUKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbU1lZGlhUGxheVBhdXNlS2V5UGVuZGluZyA9IGZhbHNlOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoKHZhbGlkQWN0aW9ucyAmIFBsYXliYWNrU3RhdGUuQUNUSU9OX1NLSVBfVE9fTkVYVCkgIT0gMCkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb25Ta2lwVG9OZXh0KCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtTWVkaWFQbGF5UGF1c2VLZXlQZW5kaW5nID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbVNlc3Npb24uZGlzcGF0Y2hNZWRpYUJ1dHRvbkRlbGF5ZWQoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbVNlc3Npb24uZ2V0Q3VycmVudENvbnRyb2xsZXJJbmZvKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVkaWFCdXR0b25JbnRlbnQsIFZpZXdDb25maWd1cmF0aW9uLmdldERvdWJsZVRhcFRpbWVvdXQoKSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBJZiBhbm90aGVyIGtleSBpcyBwcmVzc2VkIHdpdGhpbiBkb3VibGUgdGFwIHRpbWVvdXQsIGNvbnNpZGVyIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHBlbmRpbmcgcGxheS9wYXVzZSBhcyBhIHNpbmdsZSB0YXAgdG8gaGFuZGxlIG1lZGlhIGtleXMgaW4gb3JkZXIuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGFuZGxlTWVkaWFQbGF5UGF1c2VLZXlTaW5nbGVUYXBJZlBlbmRpbmcoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgICAgIHN3aXRjaCAoa2UuZ2V0S2V5Q29kZSgpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIEtleUV2ZW50LktFWUNPREVfTUVESUFfUExBWToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoKHZhbGlkQWN0aW9ucyAmIFBsYXliYWNrU3RhdGUuQUNUSU9OX1BMQVkpICE9IDApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb25QbGF5KCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgS2V5RXZlbnQuS0VZQ09ERV9NRURJQV9QQVVTRToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoKHZhbGlkQWN0aW9ucyAmIFBsYXliYWNrU3RhdGUuQUNUSU9OX1BBVVNFKSAhPSAwKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uUGF1c2UoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBLZXlFdmVudC5LRVlDT0RFX01FRElBX05FWFQ6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCh2YWxpZEFjdGlvbnMgJiBQbGF5YmFja1N0YXRlLkFDVElPTl9TS0lQX1RPX05FWFQpICE9IDApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb25Ta2lwVG9OZXh0KCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgS2V5RXZlbnQuS0VZQ09ERV9NRURJQV9QUkVWSU9VUzoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoKHZhbGlkQWN0aW9ucyAmIFBsYXliYWNrU3RhdGUuQUNUSU9OX1NLSVBfVE9fUFJFVklPVVMpICE9IDApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb25Ta2lwVG9QcmV2aW91cygpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIEtleUV2ZW50LktFWUNPREVfTUVESUFfU1RPUDoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoKHZhbGlkQWN0aW9ucyAmIFBsYXliYWNrU3RhdGUuQUNUSU9OX1NUT1ApICE9IDApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb25TdG9wKCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgS2V5RXZlbnQuS0VZQ09ERV9NRURJQV9GQVNUX0ZPUldBUkQ6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCh2YWxpZEFjdGlvbnMgJiBQbGF5YmFja1N0YXRlLkFDVElPTl9GQVNUX0ZPUldBUkQpICE9IDApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb25GYXN0Rm9yd2FyZCgpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIEtleUV2ZW50LktFWUNPREVfTUVESUFfUkVXSU5EOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgodmFsaWRBY3Rpb25zICYgUGxheWJhY2tTdGF0ZS5BQ1RJT05fUkVXSU5EKSAhPSAwKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uUmV3aW5kKCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorCisgICAgICAgIHByaXZhdGUgdm9pZCBoYW5kbGVNZWRpYVBsYXlQYXVzZUtleVNpbmdsZVRhcElmUGVuZGluZygpIHsKKyAgICAgICAgICAgIGlmICghbU1lZGlhUGxheVBhdXNlS2V5UGVuZGluZykgeworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIG1NZWRpYVBsYXlQYXVzZUtleVBlbmRpbmcgPSBmYWxzZTsKKyAgICAgICAgICAgIG1IYW5kbGVyLnJlbW92ZU1lc3NhZ2VzKENhbGxiYWNrTWVzc2FnZUhhbmRsZXIuTVNHX1BMQVlfUEFVU0VfS0VZX0RPVUJMRV9UQVBfVElNRU9VVCk7CisgICAgICAgICAgICBQbGF5YmFja1N0YXRlIHN0YXRlID0gbVNlc3Npb24ubVBsYXliYWNrU3RhdGU7CisgICAgICAgICAgICBsb25nIHZhbGlkQWN0aW9ucyA9IHN0YXRlID09IG51bGwgPyAwIDogc3RhdGUuZ2V0QWN0aW9ucygpOworICAgICAgICAgICAgYm9vbGVhbiBpc1BsYXlpbmcgPSBzdGF0ZSAhPSBudWxsCisgICAgICAgICAgICAgICAgICAgICYmIHN0YXRlLmdldFN0YXRlKCkgPT0gUGxheWJhY2tTdGF0ZS5TVEFURV9QTEFZSU5HOworICAgICAgICAgICAgYm9vbGVhbiBjYW5QbGF5ID0gKHZhbGlkQWN0aW9ucyAmIChQbGF5YmFja1N0YXRlLkFDVElPTl9QTEFZX1BBVVNFCisgICAgICAgICAgICAgICAgICAgICAgICB8IFBsYXliYWNrU3RhdGUuQUNUSU9OX1BMQVkpKSAhPSAwOworICAgICAgICAgICAgYm9vbGVhbiBjYW5QYXVzZSA9ICh2YWxpZEFjdGlvbnMgJiAoUGxheWJhY2tTdGF0ZS5BQ1RJT05fUExBWV9QQVVTRQorICAgICAgICAgICAgICAgICAgICAgICAgfCBQbGF5YmFja1N0YXRlLkFDVElPTl9QQVVTRSkpICE9IDA7CisgICAgICAgICAgICBpZiAoaXNQbGF5aW5nICYmIGNhblBhdXNlKSB7CisgICAgICAgICAgICAgICAgb25QYXVzZSgpOworICAgICAgICAgICAgfSBlbHNlIGlmICghaXNQbGF5aW5nICYmIGNhblBsYXkpIHsKKyAgICAgICAgICAgICAgICBvblBsYXkoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIC8qKgorICAgICAgICAgKiBPdmVycmlkZSB0byBoYW5kbGUgcmVxdWVzdHMgdG8gcHJlcGFyZSBwbGF5YmFjay4gRHVyaW5nIHRoZSBwcmVwYXJhdGlvbiwgYSBzZXNzaW9uIHNob3VsZAorICAgICAgICAgKiBub3QgaG9sZCBhdWRpbyBmb2N1cyBpbiBvcmRlciB0byBhbGxvdyBvdGhlciBzZXNzaW9ucyBwbGF5IHNlYW1sZXNzbHkuIFRoZSBzdGF0ZSBvZgorICAgICAgICAgKiBwbGF5YmFjayBzaG91bGQgYmUgdXBkYXRlZCB0byB7QGxpbmsgUGxheWJhY2tTdGF0ZSNTVEFURV9QQVVTRUR9IGFmdGVyIHRoZSBwcmVwYXJhdGlvbiBpcworICAgICAgICAgKiBkb25lLgorICAgICAgICAgKi8KKyAgICAgICAgcHVibGljIHZvaWQgb25QcmVwYXJlKCkgeworICAgICAgICB9CisKKyAgICAgICAgLyoqCisgICAgICAgICAqIE92ZXJyaWRlIHRvIGhhbmRsZSByZXF1ZXN0cyB0byBwcmVwYXJlIGZvciBwbGF5aW5nIGEgc3BlY2lmaWMgbWVkaWFJZCB0aGF0IHdhcyBwcm92aWRlZAorICAgICAgICAgKiBieSB5b3VyIGFwcCdzIHtAbGluayBNZWRpYUJyb3dzZXJTZXJ2aWNlfS4gRHVyaW5nIHRoZSBwcmVwYXJhdGlvbiwgYSBzZXNzaW9uIHNob3VsZCBub3QKKyAgICAgICAgICogaG9sZCBhdWRpbyBmb2N1cyBpbiBvcmRlciB0byBhbGxvdyBvdGhlciBzZXNzaW9ucyBwbGF5IHNlYW1sZXNzbHkuIFRoZSBzdGF0ZSBvZiBwbGF5YmFjaworICAgICAgICAgKiBzaG91bGQgYmUgdXBkYXRlZCB0byB7QGxpbmsgUGxheWJhY2tTdGF0ZSNTVEFURV9QQVVTRUR9IGFmdGVyIHRoZSBwcmVwYXJhdGlvbiBpcyBkb25lLgorICAgICAgICAgKiBUaGUgcGxheWJhY2sgb2YgdGhlIHByZXBhcmVkIGNvbnRlbnQgc2hvdWxkIHN0YXJ0IGluIHRoZSBpbXBsZW1lbnRhdGlvbiBvZgorICAgICAgICAgKiB7QGxpbmsgI29uUGxheX0uIE92ZXJyaWRlIHtAbGluayAjb25QbGF5RnJvbU1lZGlhSWR9IHRvIGhhbmRsZSByZXF1ZXN0cyBmb3Igc3RhcnRpbmcKKyAgICAgICAgICogcGxheWJhY2sgd2l0aG91dCBwcmVwYXJhdGlvbi4KKyAgICAgICAgICovCisgICAgICAgIHB1YmxpYyB2b2lkIG9uUHJlcGFyZUZyb21NZWRpYUlkKFN0cmluZyBtZWRpYUlkLCBCdW5kbGUgZXh0cmFzKSB7CisgICAgICAgIH0KKworICAgICAgICAvKioKKyAgICAgICAgICogT3ZlcnJpZGUgdG8gaGFuZGxlIHJlcXVlc3RzIHRvIHByZXBhcmUgcGxheWJhY2sgZnJvbSBhIHNlYXJjaCBxdWVyeS4gQW4gZW1wdHkgcXVlcnkKKyAgICAgICAgICogaW5kaWNhdGVzIHRoYXQgdGhlIGFwcCBtYXkgcHJlcGFyZSBhbnkgbXVzaWMuIFRoZSBpbXBsZW1lbnRhdGlvbiBzaG91bGQgYXR0ZW1wdCB0byBtYWtlIGEKKyAgICAgICAgICogc21hcnQgY2hvaWNlIGFib3V0IHdoYXQgdG8gcGxheS4gRHVyaW5nIHRoZSBwcmVwYXJhdGlvbiwgYSBzZXNzaW9uIHNob3VsZCBub3QgaG9sZCBhdWRpbworICAgICAgICAgKiBmb2N1cyBpbiBvcmRlciB0byBhbGxvdyBvdGhlciBzZXNzaW9ucyBwbGF5IHNlYW1sZXNzbHkuIFRoZSBzdGF0ZSBvZiBwbGF5YmFjayBzaG91bGQgYmUKKyAgICAgICAgICogdXBkYXRlZCB0byB7QGxpbmsgUGxheWJhY2tTdGF0ZSNTVEFURV9QQVVTRUR9IGFmdGVyIHRoZSBwcmVwYXJhdGlvbiBpcyBkb25lLiBUaGUgcGxheWJhY2sKKyAgICAgICAgICogb2YgdGhlIHByZXBhcmVkIGNvbnRlbnQgc2hvdWxkIHN0YXJ0IGluIHRoZSBpbXBsZW1lbnRhdGlvbiBvZiB7QGxpbmsgI29uUGxheX0uIE92ZXJyaWRlCisgICAgICAgICAqIHtAbGluayAjb25QbGF5RnJvbVNlYXJjaH0gdG8gaGFuZGxlIHJlcXVlc3RzIGZvciBzdGFydGluZyBwbGF5YmFjayB3aXRob3V0IHByZXBhcmF0aW9uLgorICAgICAgICAgKi8KKyAgICAgICAgcHVibGljIHZvaWQgb25QcmVwYXJlRnJvbVNlYXJjaChTdHJpbmcgcXVlcnksIEJ1bmRsZSBleHRyYXMpIHsKKyAgICAgICAgfQorCisgICAgICAgIC8qKgorICAgICAgICAgKiBPdmVycmlkZSB0byBoYW5kbGUgcmVxdWVzdHMgdG8gcHJlcGFyZSBhIHNwZWNpZmljIG1lZGlhIGl0ZW0gcmVwcmVzZW50ZWQgYnkgYSBVUkkuCisgICAgICAgICAqIER1cmluZyB0aGUgcHJlcGFyYXRpb24sIGEgc2Vzc2lvbiBzaG91bGQgbm90IGhvbGQgYXVkaW8gZm9jdXMgaW4gb3JkZXIgdG8gYWxsb3cKKyAgICAgICAgICogb3RoZXIgc2Vzc2lvbnMgcGxheSBzZWFtbGVzc2x5LiBUaGUgc3RhdGUgb2YgcGxheWJhY2sgc2hvdWxkIGJlIHVwZGF0ZWQgdG8KKyAgICAgICAgICoge0BsaW5rIFBsYXliYWNrU3RhdGUjU1RBVEVfUEFVU0VEfSBhZnRlciB0aGUgcHJlcGFyYXRpb24gaXMgZG9uZS4KKyAgICAgICAgICogVGhlIHBsYXliYWNrIG9mIHRoZSBwcmVwYXJlZCBjb250ZW50IHNob3VsZCBzdGFydCBpbiB0aGUgaW1wbGVtZW50YXRpb24gb2YKKyAgICAgICAgICoge0BsaW5rICNvblBsYXl9LiBPdmVycmlkZSB7QGxpbmsgI29uUGxheUZyb21Vcml9IHRvIGhhbmRsZSByZXF1ZXN0cworICAgICAgICAgKiBmb3Igc3RhcnRpbmcgcGxheWJhY2sgd2l0aG91dCBwcmVwYXJhdGlvbi4KKyAgICAgICAgICovCisgICAgICAgIHB1YmxpYyB2b2lkIG9uUHJlcGFyZUZyb21VcmkoVXJpIHVyaSwgQnVuZGxlIGV4dHJhcykgeworICAgICAgICB9CisKKyAgICAgICAgLyoqCisgICAgICAgICAqIE92ZXJyaWRlIHRvIGhhbmRsZSByZXF1ZXN0cyB0byBiZWdpbiBwbGF5YmFjay4KKyAgICAgICAgICovCisgICAgICAgIHB1YmxpYyB2b2lkIG9uUGxheSgpIHsKKyAgICAgICAgfQorCisgICAgICAgIC8qKgorICAgICAgICAgKiBPdmVycmlkZSB0byBoYW5kbGUgcmVxdWVzdHMgdG8gYmVnaW4gcGxheWJhY2sgZnJvbSBhIHNlYXJjaCBxdWVyeS4gQW4KKyAgICAgICAgICogZW1wdHkgcXVlcnkgaW5kaWNhdGVzIHRoYXQgdGhlIGFwcCBtYXkgcGxheSBhbnkgbXVzaWMuIFRoZQorICAgICAgICAgKiBpbXBsZW1lbnRhdGlvbiBzaG91bGQgYXR0ZW1wdCB0byBtYWtlIGEgc21hcnQgY2hvaWNlIGFib3V0IHdoYXQgdG8KKyAgICAgICAgICogcGxheS4KKyAgICAgICAgICovCisgICAgICAgIHB1YmxpYyB2b2lkIG9uUGxheUZyb21TZWFyY2goU3RyaW5nIHF1ZXJ5LCBCdW5kbGUgZXh0cmFzKSB7CisgICAgICAgIH0KKworICAgICAgICAvKioKKyAgICAgICAgICogT3ZlcnJpZGUgdG8gaGFuZGxlIHJlcXVlc3RzIHRvIHBsYXkgYSBzcGVjaWZpYyBtZWRpYUlkIHRoYXQgd2FzCisgICAgICAgICAqIHByb3ZpZGVkIGJ5IHlvdXIgYXBwJ3Mge0BsaW5rIE1lZGlhQnJvd3NlclNlcnZpY2V9LgorICAgICAgICAgKi8KKyAgICAgICAgcHVibGljIHZvaWQgb25QbGF5RnJvbU1lZGlhSWQoU3RyaW5nIG1lZGlhSWQsIEJ1bmRsZSBleHRyYXMpIHsKKyAgICAgICAgfQorCisgICAgICAgIC8qKgorICAgICAgICAgKiBPdmVycmlkZSB0byBoYW5kbGUgcmVxdWVzdHMgdG8gcGxheSBhIHNwZWNpZmljIG1lZGlhIGl0ZW0gcmVwcmVzZW50ZWQgYnkgYSBVUkkuCisgICAgICAgICAqLworICAgICAgICBwdWJsaWMgdm9pZCBvblBsYXlGcm9tVXJpKFVyaSB1cmksIEJ1bmRsZSBleHRyYXMpIHsKKyAgICAgICAgfQorCisgICAgICAgIC8qKgorICAgICAgICAgKiBPdmVycmlkZSB0byBoYW5kbGUgcmVxdWVzdHMgdG8gcGxheSBhbiBpdGVtIHdpdGggYSBnaXZlbiBpZCBmcm9tIHRoZQorICAgICAgICAgKiBwbGF5IHF1ZXVlLgorICAgICAgICAgKi8KKyAgICAgICAgcHVibGljIHZvaWQgb25Ta2lwVG9RdWV1ZUl0ZW0obG9uZyBpZCkgeworICAgICAgICB9CisKKyAgICAgICAgLyoqCisgICAgICAgICAqIE92ZXJyaWRlIHRvIGhhbmRsZSByZXF1ZXN0cyB0byBwYXVzZSBwbGF5YmFjay4KKyAgICAgICAgICovCisgICAgICAgIHB1YmxpYyB2b2lkIG9uUGF1c2UoKSB7CisgICAgICAgIH0KKworICAgICAgICAvKioKKyAgICAgICAgICogT3ZlcnJpZGUgdG8gaGFuZGxlIHJlcXVlc3RzIHRvIHNraXAgdG8gdGhlIG5leHQgbWVkaWEgaXRlbS4KKyAgICAgICAgICovCisgICAgICAgIHB1YmxpYyB2b2lkIG9uU2tpcFRvTmV4dCgpIHsKKyAgICAgICAgfQorCisgICAgICAgIC8qKgorICAgICAgICAgKiBPdmVycmlkZSB0byBoYW5kbGUgcmVxdWVzdHMgdG8gc2tpcCB0byB0aGUgcHJldmlvdXMgbWVkaWEgaXRlbS4KKyAgICAgICAgICovCisgICAgICAgIHB1YmxpYyB2b2lkIG9uU2tpcFRvUHJldmlvdXMoKSB7CisgICAgICAgIH0KKworICAgICAgICAvKioKKyAgICAgICAgICogT3ZlcnJpZGUgdG8gaGFuZGxlIHJlcXVlc3RzIHRvIGZhc3QgZm9yd2FyZC4KKyAgICAgICAgICovCisgICAgICAgIHB1YmxpYyB2b2lkIG9uRmFzdEZvcndhcmQoKSB7CisgICAgICAgIH0KKworICAgICAgICAvKioKKyAgICAgICAgICogT3ZlcnJpZGUgdG8gaGFuZGxlIHJlcXVlc3RzIHRvIHJld2luZC4KKyAgICAgICAgICovCisgICAgICAgIHB1YmxpYyB2b2lkIG9uUmV3aW5kKCkgeworICAgICAgICB9CisKKyAgICAgICAgLyoqCisgICAgICAgICAqIE92ZXJyaWRlIHRvIGhhbmRsZSByZXF1ZXN0cyB0byBzdG9wIHBsYXliYWNrLgorICAgICAgICAgKi8KKyAgICAgICAgcHVibGljIHZvaWQgb25TdG9wKCkgeworICAgICAgICB9CisKKyAgICAgICAgLyoqCisgICAgICAgICAqIE92ZXJyaWRlIHRvIGhhbmRsZSByZXF1ZXN0cyB0byBzZWVrIHRvIGEgc3BlY2lmaWMgcG9zaXRpb24gaW4gbXMuCisgICAgICAgICAqCisgICAgICAgICAqIEBwYXJhbSBwb3MgTmV3IHBvc2l0aW9uIHRvIG1vdmUgdG8sIGluIG1pbGxpc2Vjb25kcy4KKyAgICAgICAgICovCisgICAgICAgIHB1YmxpYyB2b2lkIG9uU2Vla1RvKGxvbmcgcG9zKSB7CisgICAgICAgIH0KKworICAgICAgICAvKioKKyAgICAgICAgICogT3ZlcnJpZGUgdG8gaGFuZGxlIHRoZSBpdGVtIGJlaW5nIHJhdGVkLgorICAgICAgICAgKgorICAgICAgICAgKiBAcGFyYW0gcmF0aW5nCisgICAgICAgICAqLworICAgICAgICBwdWJsaWMgdm9pZCBvblNldFJhdGluZyhATm9uTnVsbCBSYXRpbmcgcmF0aW5nKSB7CisgICAgICAgIH0KKworICAgICAgICAvKioKKyAgICAgICAgICogQ2FsbGVkIHdoZW4gYSB7QGxpbmsgTWVkaWFDb250cm9sbGVyfSB3YW50cyBhIHtAbGluayBQbGF5YmFja1N0YXRlLkN1c3RvbUFjdGlvbn0gdG8gYmUKKyAgICAgICAgICogcGVyZm9ybWVkLgorICAgICAgICAgKgorICAgICAgICAgKiBAcGFyYW0gYWN0aW9uIFRoZSBhY3Rpb24gdGhhdCB3YXMgb3JpZ2luYWxseSBzZW50IGluIHRoZQorICAgICAgICAgKiAgICAgICAgICAgICAgIHtAbGluayBQbGF5YmFja1N0YXRlLkN1c3RvbUFjdGlvbn0uCisgICAgICAgICAqIEBwYXJhbSBleHRyYXMgT3B0aW9uYWwgZXh0cmFzIHNwZWNpZmllZCBieSB0aGUge0BsaW5rIE1lZGlhQ29udHJvbGxlcn0uCisgICAgICAgICAqLworICAgICAgICBwdWJsaWMgdm9pZCBvbkN1c3RvbUFjdGlvbihATm9uTnVsbCBTdHJpbmcgYWN0aW9uLCBATnVsbGFibGUgQnVuZGxlIGV4dHJhcykgeworICAgICAgICB9CisgICAgfQorCisgICAgLyoqCisgICAgICogQGhpZGUKKyAgICAgKi8KKyAgICBwdWJsaWMgc3RhdGljIGNsYXNzIENhbGxiYWNrU3R1YiBleHRlbmRzIElTZXNzaW9uQ2FsbGJhY2suU3R1YiB7CisgICAgICAgIHByaXZhdGUgV2Vha1JlZmVyZW5jZTxNZWRpYVNlc3Npb24+IG1NZWRpYVNlc3Npb247CisKKyAgICAgICAgcHVibGljIENhbGxiYWNrU3R1YihNZWRpYVNlc3Npb24gc2Vzc2lvbikgeworICAgICAgICAgICAgbU1lZGlhU2Vzc2lvbiA9IG5ldyBXZWFrUmVmZXJlbmNlPD4oc2Vzc2lvbik7CisgICAgICAgIH0KKworICAgICAgICBwcml2YXRlIHN0YXRpYyBSZW1vdGVVc2VySW5mbyBjcmVhdGVSZW1vdGVVc2VySW5mbyhTdHJpbmcgcGFja2FnZU5hbWUsIGludCBwaWQsIGludCB1aWQsCisgICAgICAgICAgICAgICAgSVNlc3Npb25Db250cm9sbGVyQ2FsbGJhY2sgY2FsbGVyKSB7CisgICAgICAgICAgICAvL1RPRE8oYi8xMTk3NTIyMDUpOiBSZXNvbHZlIGhpZGRlbiBBUEkgdXNhZ2UuIDQtcGFyYW0gY29uc3RydWN0b3Igb2YgUmVtb3RlVXNlckluZm8KKyAgICAgICAgICAgIC8qCisgICAgICAgICAgICByZXR1cm4gbmV3IFJlbW90ZVVzZXJJbmZvKHBhY2thZ2VOYW1lLCBwaWQsIHVpZCwKKyAgICAgICAgICAgICAgICAgICAgY2FsbGVyICE9IG51bGwgPyBjYWxsZXIuYXNCaW5kZXIoKSA6IG51bGwpOworICAgICAgICAgICAgKi8KKyAgICAgICAgICAgIHJldHVybiBuZXcgUmVtb3RlVXNlckluZm8ocGFja2FnZU5hbWUsIHBpZCwgdWlkKTsKKyAgICAgICAgfQorCisgICAgICAgIEBPdmVycmlkZQorICAgICAgICBwdWJsaWMgdm9pZCBvbkNvbW1hbmQoU3RyaW5nIHBhY2thZ2VOYW1lLCBpbnQgcGlkLCBpbnQgdWlkLAorICAgICAgICAgICAgICAgIElTZXNzaW9uQ29udHJvbGxlckNhbGxiYWNrIGNhbGxlciwgU3RyaW5nIGNvbW1hbmQsIEJ1bmRsZSBhcmdzLCBSZXN1bHRSZWNlaXZlciBjYikgeworICAgICAgICAgICAgTWVkaWFTZXNzaW9uIHNlc3Npb24gPSBtTWVkaWFTZXNzaW9uLmdldCgpOworICAgICAgICAgICAgaWYgKHNlc3Npb24gIT0gbnVsbCkgeworICAgICAgICAgICAgICAgIHNlc3Npb24uZGlzcGF0Y2hDb21tYW5kKGNyZWF0ZVJlbW90ZVVzZXJJbmZvKHBhY2thZ2VOYW1lLCBwaWQsIHVpZCwgY2FsbGVyKSwKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbW1hbmQsIGFyZ3MsIGNiKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIEBPdmVycmlkZQorICAgICAgICBwdWJsaWMgdm9pZCBvbk1lZGlhQnV0dG9uKFN0cmluZyBwYWNrYWdlTmFtZSwgaW50IHBpZCwgaW50IHVpZCwgSW50ZW50IG1lZGlhQnV0dG9uSW50ZW50LAorICAgICAgICAgICAgICAgIGludCBzZXF1ZW5jZU51bWJlciwgUmVzdWx0UmVjZWl2ZXIgY2IpIHsKKyAgICAgICAgICAgIE1lZGlhU2Vzc2lvbiBzZXNzaW9uID0gbU1lZGlhU2Vzc2lvbi5nZXQoKTsKKyAgICAgICAgICAgIHRyeSB7CisgICAgICAgICAgICAgICAgaWYgKHNlc3Npb24gIT0gbnVsbCkgeworICAgICAgICAgICAgICAgICAgICBzZXNzaW9uLmRpc3BhdGNoTWVkaWFCdXR0b24oY3JlYXRlUmVtb3RlVXNlckluZm8ocGFja2FnZU5hbWUsIHBpZCwgdWlkLCBudWxsKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZWRpYUJ1dHRvbkludGVudCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfSBmaW5hbGx5IHsKKyAgICAgICAgICAgICAgICBpZiAoY2IgIT0gbnVsbCkgeworICAgICAgICAgICAgICAgICAgICBjYi5zZW5kKHNlcXVlbmNlTnVtYmVyLCBudWxsKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBAT3ZlcnJpZGUKKyAgICAgICAgcHVibGljIHZvaWQgb25NZWRpYUJ1dHRvbkZyb21Db250cm9sbGVyKFN0cmluZyBwYWNrYWdlTmFtZSwgaW50IHBpZCwgaW50IHVpZCwKKyAgICAgICAgICAgICAgICBJU2Vzc2lvbkNvbnRyb2xsZXJDYWxsYmFjayBjYWxsZXIsIEludGVudCBtZWRpYUJ1dHRvbkludGVudCkgeworICAgICAgICAgICAgTWVkaWFTZXNzaW9uIHNlc3Npb24gPSBtTWVkaWFTZXNzaW9uLmdldCgpOworICAgICAgICAgICAgaWYgKHNlc3Npb24gIT0gbnVsbCkgeworICAgICAgICAgICAgICAgIHNlc3Npb24uZGlzcGF0Y2hNZWRpYUJ1dHRvbihjcmVhdGVSZW1vdGVVc2VySW5mbyhwYWNrYWdlTmFtZSwgcGlkLCB1aWQsIGNhbGxlciksCisgICAgICAgICAgICAgICAgICAgICAgICBtZWRpYUJ1dHRvbkludGVudCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBAT3ZlcnJpZGUKKyAgICAgICAgcHVibGljIHZvaWQgb25QcmVwYXJlKFN0cmluZyBwYWNrYWdlTmFtZSwgaW50IHBpZCwgaW50IHVpZCwKKyAgICAgICAgICAgICAgICBJU2Vzc2lvbkNvbnRyb2xsZXJDYWxsYmFjayBjYWxsZXIpIHsKKyAgICAgICAgICAgIE1lZGlhU2Vzc2lvbiBzZXNzaW9uID0gbU1lZGlhU2Vzc2lvbi5nZXQoKTsKKyAgICAgICAgICAgIGlmIChzZXNzaW9uICE9IG51bGwpIHsKKyAgICAgICAgICAgICAgICBzZXNzaW9uLmRpc3BhdGNoUHJlcGFyZShjcmVhdGVSZW1vdGVVc2VySW5mbyhwYWNrYWdlTmFtZSwgcGlkLCB1aWQsIGNhbGxlcikpOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgQE92ZXJyaWRlCisgICAgICAgIHB1YmxpYyB2b2lkIG9uUHJlcGFyZUZyb21NZWRpYUlkKFN0cmluZyBwYWNrYWdlTmFtZSwgaW50IHBpZCwgaW50IHVpZCwKKyAgICAgICAgICAgICAgICBJU2Vzc2lvbkNvbnRyb2xsZXJDYWxsYmFjayBjYWxsZXIsIFN0cmluZyBtZWRpYUlkLAorICAgICAgICAgICAgICAgIEJ1bmRsZSBleHRyYXMpIHsKKyAgICAgICAgICAgIE1lZGlhU2Vzc2lvbiBzZXNzaW9uID0gbU1lZGlhU2Vzc2lvbi5nZXQoKTsKKyAgICAgICAgICAgIGlmIChzZXNzaW9uICE9IG51bGwpIHsKKyAgICAgICAgICAgICAgICBzZXNzaW9uLmRpc3BhdGNoUHJlcGFyZUZyb21NZWRpYUlkKAorICAgICAgICAgICAgICAgICAgICAgICAgY3JlYXRlUmVtb3RlVXNlckluZm8ocGFja2FnZU5hbWUsIHBpZCwgdWlkLCBjYWxsZXIpLCBtZWRpYUlkLCBleHRyYXMpOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgQE92ZXJyaWRlCisgICAgICAgIHB1YmxpYyB2b2lkIG9uUHJlcGFyZUZyb21TZWFyY2goU3RyaW5nIHBhY2thZ2VOYW1lLCBpbnQgcGlkLCBpbnQgdWlkLAorICAgICAgICAgICAgICAgIElTZXNzaW9uQ29udHJvbGxlckNhbGxiYWNrIGNhbGxlciwgU3RyaW5nIHF1ZXJ5LAorICAgICAgICAgICAgICAgIEJ1bmRsZSBleHRyYXMpIHsKKyAgICAgICAgICAgIE1lZGlhU2Vzc2lvbiBzZXNzaW9uID0gbU1lZGlhU2Vzc2lvbi5nZXQoKTsKKyAgICAgICAgICAgIGlmIChzZXNzaW9uICE9IG51bGwpIHsKKyAgICAgICAgICAgICAgICBzZXNzaW9uLmRpc3BhdGNoUHJlcGFyZUZyb21TZWFyY2goCisgICAgICAgICAgICAgICAgICAgICAgICBjcmVhdGVSZW1vdGVVc2VySW5mbyhwYWNrYWdlTmFtZSwgcGlkLCB1aWQsIGNhbGxlciksIHF1ZXJ5LCBleHRyYXMpOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgQE92ZXJyaWRlCisgICAgICAgIHB1YmxpYyB2b2lkIG9uUHJlcGFyZUZyb21VcmkoU3RyaW5nIHBhY2thZ2VOYW1lLCBpbnQgcGlkLCBpbnQgdWlkLAorICAgICAgICAgICAgICAgIElTZXNzaW9uQ29udHJvbGxlckNhbGxiYWNrIGNhbGxlciwgVXJpIHVyaSwgQnVuZGxlIGV4dHJhcykgeworICAgICAgICAgICAgTWVkaWFTZXNzaW9uIHNlc3Npb24gPSBtTWVkaWFTZXNzaW9uLmdldCgpOworICAgICAgICAgICAgaWYgKHNlc3Npb24gIT0gbnVsbCkgeworICAgICAgICAgICAgICAgIHNlc3Npb24uZGlzcGF0Y2hQcmVwYXJlRnJvbVVyaShjcmVhdGVSZW1vdGVVc2VySW5mbyhwYWNrYWdlTmFtZSwgcGlkLCB1aWQsIGNhbGxlciksCisgICAgICAgICAgICAgICAgICAgICAgICB1cmksIGV4dHJhcyk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBAT3ZlcnJpZGUKKyAgICAgICAgcHVibGljIHZvaWQgb25QbGF5KFN0cmluZyBwYWNrYWdlTmFtZSwgaW50IHBpZCwgaW50IHVpZCwKKyAgICAgICAgICAgICAgICBJU2Vzc2lvbkNvbnRyb2xsZXJDYWxsYmFjayBjYWxsZXIpIHsKKyAgICAgICAgICAgIE1lZGlhU2Vzc2lvbiBzZXNzaW9uID0gbU1lZGlhU2Vzc2lvbi5nZXQoKTsKKyAgICAgICAgICAgIGlmIChzZXNzaW9uICE9IG51bGwpIHsKKyAgICAgICAgICAgICAgICBzZXNzaW9uLmRpc3BhdGNoUGxheShjcmVhdGVSZW1vdGVVc2VySW5mbyhwYWNrYWdlTmFtZSwgcGlkLCB1aWQsIGNhbGxlcikpOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgQE92ZXJyaWRlCisgICAgICAgIHB1YmxpYyB2b2lkIG9uUGxheUZyb21NZWRpYUlkKFN0cmluZyBwYWNrYWdlTmFtZSwgaW50IHBpZCwgaW50IHVpZCwKKyAgICAgICAgICAgICAgICBJU2Vzc2lvbkNvbnRyb2xsZXJDYWxsYmFjayBjYWxsZXIsIFN0cmluZyBtZWRpYUlkLAorICAgICAgICAgICAgICAgIEJ1bmRsZSBleHRyYXMpIHsKKyAgICAgICAgICAgIE1lZGlhU2Vzc2lvbiBzZXNzaW9uID0gbU1lZGlhU2Vzc2lvbi5nZXQoKTsKKyAgICAgICAgICAgIGlmIChzZXNzaW9uICE9IG51bGwpIHsKKyAgICAgICAgICAgICAgICBzZXNzaW9uLmRpc3BhdGNoUGxheUZyb21NZWRpYUlkKGNyZWF0ZVJlbW90ZVVzZXJJbmZvKHBhY2thZ2VOYW1lLCBwaWQsIHVpZCwgY2FsbGVyKSwKKyAgICAgICAgICAgICAgICAgICAgICAgIG1lZGlhSWQsIGV4dHJhcyk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBAT3ZlcnJpZGUKKyAgICAgICAgcHVibGljIHZvaWQgb25QbGF5RnJvbVNlYXJjaChTdHJpbmcgcGFja2FnZU5hbWUsIGludCBwaWQsIGludCB1aWQsCisgICAgICAgICAgICAgICAgSVNlc3Npb25Db250cm9sbGVyQ2FsbGJhY2sgY2FsbGVyLCBTdHJpbmcgcXVlcnksCisgICAgICAgICAgICAgICAgQnVuZGxlIGV4dHJhcykgeworICAgICAgICAgICAgTWVkaWFTZXNzaW9uIHNlc3Npb24gPSBtTWVkaWFTZXNzaW9uLmdldCgpOworICAgICAgICAgICAgaWYgKHNlc3Npb24gIT0gbnVsbCkgeworICAgICAgICAgICAgICAgIHNlc3Npb24uZGlzcGF0Y2hQbGF5RnJvbVNlYXJjaChjcmVhdGVSZW1vdGVVc2VySW5mbyhwYWNrYWdlTmFtZSwgcGlkLCB1aWQsIGNhbGxlciksCisgICAgICAgICAgICAgICAgICAgICAgICBxdWVyeSwgZXh0cmFzKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIEBPdmVycmlkZQorICAgICAgICBwdWJsaWMgdm9pZCBvblBsYXlGcm9tVXJpKFN0cmluZyBwYWNrYWdlTmFtZSwgaW50IHBpZCwgaW50IHVpZCwKKyAgICAgICAgICAgICAgICBJU2Vzc2lvbkNvbnRyb2xsZXJDYWxsYmFjayBjYWxsZXIsIFVyaSB1cmksIEJ1bmRsZSBleHRyYXMpIHsKKyAgICAgICAgICAgIE1lZGlhU2Vzc2lvbiBzZXNzaW9uID0gbU1lZGlhU2Vzc2lvbi5nZXQoKTsKKyAgICAgICAgICAgIGlmIChzZXNzaW9uICE9IG51bGwpIHsKKyAgICAgICAgICAgICAgICBzZXNzaW9uLmRpc3BhdGNoUGxheUZyb21VcmkoY3JlYXRlUmVtb3RlVXNlckluZm8ocGFja2FnZU5hbWUsIHBpZCwgdWlkLCBjYWxsZXIpLAorICAgICAgICAgICAgICAgICAgICAgICAgdXJpLCBleHRyYXMpOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgQE92ZXJyaWRlCisgICAgICAgIHB1YmxpYyB2b2lkIG9uU2tpcFRvVHJhY2soU3RyaW5nIHBhY2thZ2VOYW1lLCBpbnQgcGlkLCBpbnQgdWlkLAorICAgICAgICAgICAgICAgIElTZXNzaW9uQ29udHJvbGxlckNhbGxiYWNrIGNhbGxlciwgbG9uZyBpZCkgeworICAgICAgICAgICAgTWVkaWFTZXNzaW9uIHNlc3Npb24gPSBtTWVkaWFTZXNzaW9uLmdldCgpOworICAgICAgICAgICAgaWYgKHNlc3Npb24gIT0gbnVsbCkgeworICAgICAgICAgICAgICAgIHNlc3Npb24uZGlzcGF0Y2hTa2lwVG9JdGVtKGNyZWF0ZVJlbW90ZVVzZXJJbmZvKHBhY2thZ2VOYW1lLCBwaWQsIHVpZCwgY2FsbGVyKSwgaWQpOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgQE92ZXJyaWRlCisgICAgICAgIHB1YmxpYyB2b2lkIG9uUGF1c2UoU3RyaW5nIHBhY2thZ2VOYW1lLCBpbnQgcGlkLCBpbnQgdWlkLAorICAgICAgICAgICAgICAgIElTZXNzaW9uQ29udHJvbGxlckNhbGxiYWNrIGNhbGxlcikgeworICAgICAgICAgICAgTWVkaWFTZXNzaW9uIHNlc3Npb24gPSBtTWVkaWFTZXNzaW9uLmdldCgpOworICAgICAgICAgICAgaWYgKHNlc3Npb24gIT0gbnVsbCkgeworICAgICAgICAgICAgICAgIHNlc3Npb24uZGlzcGF0Y2hQYXVzZShjcmVhdGVSZW1vdGVVc2VySW5mbyhwYWNrYWdlTmFtZSwgcGlkLCB1aWQsIGNhbGxlcikpOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgQE92ZXJyaWRlCisgICAgICAgIHB1YmxpYyB2b2lkIG9uU3RvcChTdHJpbmcgcGFja2FnZU5hbWUsIGludCBwaWQsIGludCB1aWQsCisgICAgICAgICAgICAgICAgSVNlc3Npb25Db250cm9sbGVyQ2FsbGJhY2sgY2FsbGVyKSB7CisgICAgICAgICAgICBNZWRpYVNlc3Npb24gc2Vzc2lvbiA9IG1NZWRpYVNlc3Npb24uZ2V0KCk7CisgICAgICAgICAgICBpZiAoc2Vzc2lvbiAhPSBudWxsKSB7CisgICAgICAgICAgICAgICAgc2Vzc2lvbi5kaXNwYXRjaFN0b3AoY3JlYXRlUmVtb3RlVXNlckluZm8ocGFja2FnZU5hbWUsIHBpZCwgdWlkLCBjYWxsZXIpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIEBPdmVycmlkZQorICAgICAgICBwdWJsaWMgdm9pZCBvbk5leHQoU3RyaW5nIHBhY2thZ2VOYW1lLCBpbnQgcGlkLCBpbnQgdWlkLAorICAgICAgICAgICAgICAgIElTZXNzaW9uQ29udHJvbGxlckNhbGxiYWNrIGNhbGxlcikgeworICAgICAgICAgICAgTWVkaWFTZXNzaW9uIHNlc3Npb24gPSBtTWVkaWFTZXNzaW9uLmdldCgpOworICAgICAgICAgICAgaWYgKHNlc3Npb24gIT0gbnVsbCkgeworICAgICAgICAgICAgICAgIHNlc3Npb24uZGlzcGF0Y2hOZXh0KGNyZWF0ZVJlbW90ZVVzZXJJbmZvKHBhY2thZ2VOYW1lLCBwaWQsIHVpZCwgY2FsbGVyKSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBAT3ZlcnJpZGUKKyAgICAgICAgcHVibGljIHZvaWQgb25QcmV2aW91cyhTdHJpbmcgcGFja2FnZU5hbWUsIGludCBwaWQsIGludCB1aWQsCisgICAgICAgICAgICAgICAgSVNlc3Npb25Db250cm9sbGVyQ2FsbGJhY2sgY2FsbGVyKSB7CisgICAgICAgICAgICBNZWRpYVNlc3Npb24gc2Vzc2lvbiA9IG1NZWRpYVNlc3Npb24uZ2V0KCk7CisgICAgICAgICAgICBpZiAoc2Vzc2lvbiAhPSBudWxsKSB7CisgICAgICAgICAgICAgICAgc2Vzc2lvbi5kaXNwYXRjaFByZXZpb3VzKGNyZWF0ZVJlbW90ZVVzZXJJbmZvKHBhY2thZ2VOYW1lLCBwaWQsIHVpZCwgY2FsbGVyKSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBAT3ZlcnJpZGUKKyAgICAgICAgcHVibGljIHZvaWQgb25GYXN0Rm9yd2FyZChTdHJpbmcgcGFja2FnZU5hbWUsIGludCBwaWQsIGludCB1aWQsCisgICAgICAgICAgICAgICAgSVNlc3Npb25Db250cm9sbGVyQ2FsbGJhY2sgY2FsbGVyKSB7CisgICAgICAgICAgICBNZWRpYVNlc3Npb24gc2Vzc2lvbiA9IG1NZWRpYVNlc3Npb24uZ2V0KCk7CisgICAgICAgICAgICBpZiAoc2Vzc2lvbiAhPSBudWxsKSB7CisgICAgICAgICAgICAgICAgc2Vzc2lvbi5kaXNwYXRjaEZhc3RGb3J3YXJkKGNyZWF0ZVJlbW90ZVVzZXJJbmZvKHBhY2thZ2VOYW1lLCBwaWQsIHVpZCwgY2FsbGVyKSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBAT3ZlcnJpZGUKKyAgICAgICAgcHVibGljIHZvaWQgb25SZXdpbmQoU3RyaW5nIHBhY2thZ2VOYW1lLCBpbnQgcGlkLCBpbnQgdWlkLAorICAgICAgICAgICAgICAgIElTZXNzaW9uQ29udHJvbGxlckNhbGxiYWNrIGNhbGxlcikgeworICAgICAgICAgICAgTWVkaWFTZXNzaW9uIHNlc3Npb24gPSBtTWVkaWFTZXNzaW9uLmdldCgpOworICAgICAgICAgICAgaWYgKHNlc3Npb24gIT0gbnVsbCkgeworICAgICAgICAgICAgICAgIHNlc3Npb24uZGlzcGF0Y2hSZXdpbmQoY3JlYXRlUmVtb3RlVXNlckluZm8ocGFja2FnZU5hbWUsIHBpZCwgdWlkLCBjYWxsZXIpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIEBPdmVycmlkZQorICAgICAgICBwdWJsaWMgdm9pZCBvblNlZWtUbyhTdHJpbmcgcGFja2FnZU5hbWUsIGludCBwaWQsIGludCB1aWQsCisgICAgICAgICAgICAgICAgSVNlc3Npb25Db250cm9sbGVyQ2FsbGJhY2sgY2FsbGVyLCBsb25nIHBvcykgeworICAgICAgICAgICAgTWVkaWFTZXNzaW9uIHNlc3Npb24gPSBtTWVkaWFTZXNzaW9uLmdldCgpOworICAgICAgICAgICAgaWYgKHNlc3Npb24gIT0gbnVsbCkgeworICAgICAgICAgICAgICAgIHNlc3Npb24uZGlzcGF0Y2hTZWVrVG8oY3JlYXRlUmVtb3RlVXNlckluZm8ocGFja2FnZU5hbWUsIHBpZCwgdWlkLCBjYWxsZXIpLCBwb3MpOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgQE92ZXJyaWRlCisgICAgICAgIHB1YmxpYyB2b2lkIG9uUmF0ZShTdHJpbmcgcGFja2FnZU5hbWUsIGludCBwaWQsIGludCB1aWQsIElTZXNzaW9uQ29udHJvbGxlckNhbGxiYWNrIGNhbGxlciwKKyAgICAgICAgICAgICAgICBSYXRpbmcgcmF0aW5nKSB7CisgICAgICAgICAgICBNZWRpYVNlc3Npb24gc2Vzc2lvbiA9IG1NZWRpYVNlc3Npb24uZ2V0KCk7CisgICAgICAgICAgICBpZiAoc2Vzc2lvbiAhPSBudWxsKSB7CisgICAgICAgICAgICAgICAgc2Vzc2lvbi5kaXNwYXRjaFJhdGUoY3JlYXRlUmVtb3RlVXNlckluZm8ocGFja2FnZU5hbWUsIHBpZCwgdWlkLCBjYWxsZXIpLCByYXRpbmcpOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgQE92ZXJyaWRlCisgICAgICAgIHB1YmxpYyB2b2lkIG9uQ3VzdG9tQWN0aW9uKFN0cmluZyBwYWNrYWdlTmFtZSwgaW50IHBpZCwgaW50IHVpZCwKKyAgICAgICAgICAgICAgICBJU2Vzc2lvbkNvbnRyb2xsZXJDYWxsYmFjayBjYWxsZXIsIFN0cmluZyBhY3Rpb24sIEJ1bmRsZSBhcmdzKSB7CisgICAgICAgICAgICBNZWRpYVNlc3Npb24gc2Vzc2lvbiA9IG1NZWRpYVNlc3Npb24uZ2V0KCk7CisgICAgICAgICAgICBpZiAoc2Vzc2lvbiAhPSBudWxsKSB7CisgICAgICAgICAgICAgICAgc2Vzc2lvbi5kaXNwYXRjaEN1c3RvbUFjdGlvbihjcmVhdGVSZW1vdGVVc2VySW5mbyhwYWNrYWdlTmFtZSwgcGlkLCB1aWQsIGNhbGxlciksCisgICAgICAgICAgICAgICAgICAgICAgICBhY3Rpb24sIGFyZ3MpOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgQE92ZXJyaWRlCisgICAgICAgIHB1YmxpYyB2b2lkIG9uQWRqdXN0Vm9sdW1lKFN0cmluZyBwYWNrYWdlTmFtZSwgaW50IHBpZCwgaW50IHVpZCwKKyAgICAgICAgICAgICAgICBJU2Vzc2lvbkNvbnRyb2xsZXJDYWxsYmFjayBjYWxsZXIsIGludCBkaXJlY3Rpb24pIHsKKyAgICAgICAgICAgIE1lZGlhU2Vzc2lvbiBzZXNzaW9uID0gbU1lZGlhU2Vzc2lvbi5nZXQoKTsKKyAgICAgICAgICAgIGlmIChzZXNzaW9uICE9IG51bGwpIHsKKyAgICAgICAgICAgICAgICBzZXNzaW9uLmRpc3BhdGNoQWRqdXN0Vm9sdW1lKGNyZWF0ZVJlbW90ZVVzZXJJbmZvKHBhY2thZ2VOYW1lLCBwaWQsIHVpZCwgY2FsbGVyKSwKKyAgICAgICAgICAgICAgICAgICAgICAgIGRpcmVjdGlvbik7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBAT3ZlcnJpZGUKKyAgICAgICAgcHVibGljIHZvaWQgb25TZXRWb2x1bWVUbyhTdHJpbmcgcGFja2FnZU5hbWUsIGludCBwaWQsIGludCB1aWQsCisgICAgICAgICAgICAgICAgSVNlc3Npb25Db250cm9sbGVyQ2FsbGJhY2sgY2FsbGVyLCBpbnQgdmFsdWUpIHsKKyAgICAgICAgICAgIE1lZGlhU2Vzc2lvbiBzZXNzaW9uID0gbU1lZGlhU2Vzc2lvbi5nZXQoKTsKKyAgICAgICAgICAgIGlmIChzZXNzaW9uICE9IG51bGwpIHsKKyAgICAgICAgICAgICAgICBzZXNzaW9uLmRpc3BhdGNoU2V0Vm9sdW1lVG8oY3JlYXRlUmVtb3RlVXNlckluZm8ocGFja2FnZU5hbWUsIHBpZCwgdWlkLCBjYWxsZXIpLAorICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWUpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCisgICAgLyoqCisgICAgICogQSBzaW5nbGUgaXRlbSB0aGF0IGlzIHBhcnQgb2YgdGhlIHBsYXkgcXVldWUuIEl0IGNvbnRhaW5zIGEgZGVzY3JpcHRpb24KKyAgICAgKiBvZiB0aGUgaXRlbSBhbmQgaXRzIGlkIGluIHRoZSBxdWV1ZS4KKyAgICAgKi8KKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGNsYXNzIFF1ZXVlSXRlbSBpbXBsZW1lbnRzIFBhcmNlbGFibGUgeworICAgICAgICAvKioKKyAgICAgICAgICogVGhpcyBpZCBpcyByZXNlcnZlZC4gTm8gaXRlbXMgY2FuIGJlIGV4cGxpY2l0bHkgYXNzaWduZWQgdGhpcyBpZC4KKyAgICAgICAgICovCisgICAgICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFVOS05PV05fSUQgPSAtMTsKKworICAgICAgICBwcml2YXRlIGZpbmFsIE1lZGlhRGVzY3JpcHRpb24gbURlc2NyaXB0aW9uOworICAgICAgICBAVW5zdXBwb3J0ZWRBcHBVc2FnZQorICAgICAgICBwcml2YXRlIGZpbmFsIGxvbmcgbUlkOworCisgICAgICAgIC8qKgorICAgICAgICAgKiBDcmVhdGUgYSBuZXcge0BsaW5rIE1lZGlhU2Vzc2lvbi5RdWV1ZUl0ZW19LgorICAgICAgICAgKgorICAgICAgICAgKiBAcGFyYW0gZGVzY3JpcHRpb24gVGhlIHtAbGluayBNZWRpYURlc2NyaXB0aW9ufSBmb3IgdGhpcyBpdGVtLgorICAgICAgICAgKiBAcGFyYW0gaWQgQW4gaWRlbnRpZmllciBmb3IgdGhpcyBpdGVtLiBJdCBtdXN0IGJlIHVuaXF1ZSB3aXRoaW4gdGhlCisgICAgICAgICAqICAgICAgICAgICAgcGxheSBxdWV1ZSBhbmQgY2Fubm90IGJlIHtAbGluayAjVU5LTk9XTl9JRH0uCisgICAgICAgICAqLworICAgICAgICBwdWJsaWMgUXVldWVJdGVtKE1lZGlhRGVzY3JpcHRpb24gZGVzY3JpcHRpb24sIGxvbmcgaWQpIHsKKyAgICAgICAgICAgIGlmIChkZXNjcmlwdGlvbiA9PSBudWxsKSB7CisgICAgICAgICAgICAgICAgdGhyb3cgbmV3IElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbigiRGVzY3JpcHRpb24gY2Fubm90IGJlIG51bGwuIik7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoaWQgPT0gVU5LTk9XTl9JRCkgeworICAgICAgICAgICAgICAgIHRocm93IG5ldyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oIklkIGNhbm5vdCBiZSBRdWV1ZUl0ZW0uVU5LTk9XTl9JRCIpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgbURlc2NyaXB0aW9uID0gZGVzY3JpcHRpb247CisgICAgICAgICAgICBtSWQgPSBpZDsKKyAgICAgICAgfQorCisgICAgICAgIHByaXZhdGUgUXVldWVJdGVtKFBhcmNlbCBpbikgeworICAgICAgICAgICAgbURlc2NyaXB0aW9uID0gTWVkaWFEZXNjcmlwdGlvbi5DUkVBVE9SLmNyZWF0ZUZyb21QYXJjZWwoaW4pOworICAgICAgICAgICAgbUlkID0gaW4ucmVhZExvbmcoKTsKKyAgICAgICAgfQorCisgICAgICAgIC8qKgorICAgICAgICAgKiBHZXQgdGhlIGRlc2NyaXB0aW9uIGZvciB0aGlzIGl0ZW0uCisgICAgICAgICAqLworICAgICAgICBwdWJsaWMgTWVkaWFEZXNjcmlwdGlvbiBnZXREZXNjcmlwdGlvbigpIHsKKyAgICAgICAgICAgIHJldHVybiBtRGVzY3JpcHRpb247CisgICAgICAgIH0KKworICAgICAgICAvKioKKyAgICAgICAgICogR2V0IHRoZSBxdWV1ZSBpZCBmb3IgdGhpcyBpdGVtLgorICAgICAgICAgKi8KKyAgICAgICAgcHVibGljIGxvbmcgZ2V0UXVldWVJZCgpIHsKKyAgICAgICAgICAgIHJldHVybiBtSWQ7CisgICAgICAgIH0KKworICAgICAgICBAT3ZlcnJpZGUKKyAgICAgICAgcHVibGljIHZvaWQgd3JpdGVUb1BhcmNlbChQYXJjZWwgZGVzdCwgaW50IGZsYWdzKSB7CisgICAgICAgICAgICBtRGVzY3JpcHRpb24ud3JpdGVUb1BhcmNlbChkZXN0LCBmbGFncyk7CisgICAgICAgICAgICBkZXN0LndyaXRlTG9uZyhtSWQpOworICAgICAgICB9CisKKyAgICAgICAgQE92ZXJyaWRlCisgICAgICAgIHB1YmxpYyBpbnQgZGVzY3JpYmVDb250ZW50cygpIHsKKyAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICB9CisKKyAgICAgICAgcHVibGljIHN0YXRpYyBmaW5hbCBDcmVhdG9yPE1lZGlhU2Vzc2lvbi5RdWV1ZUl0ZW0+IENSRUFUT1IgPQorICAgICAgICAgICAgICAgIG5ldyBDcmVhdG9yPE1lZGlhU2Vzc2lvbi5RdWV1ZUl0ZW0+KCkgeworCisgICAgICAgICAgICBAT3ZlcnJpZGUKKyAgICAgICAgICAgIHB1YmxpYyBNZWRpYVNlc3Npb24uUXVldWVJdGVtIGNyZWF0ZUZyb21QYXJjZWwoUGFyY2VsIHApIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gbmV3IE1lZGlhU2Vzc2lvbi5RdWV1ZUl0ZW0ocCk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIEBPdmVycmlkZQorICAgICAgICAgICAgcHVibGljIE1lZGlhU2Vzc2lvbi5RdWV1ZUl0ZW1bXSBuZXdBcnJheShpbnQgc2l6ZSkgeworICAgICAgICAgICAgICAgIHJldHVybiBuZXcgTWVkaWFTZXNzaW9uLlF1ZXVlSXRlbVtzaXplXTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfTsKKworICAgICAgICBAT3ZlcnJpZGUKKyAgICAgICAgcHVibGljIFN0cmluZyB0b1N0cmluZygpIHsKKyAgICAgICAgICAgIHJldHVybiAiTWVkaWFTZXNzaW9uLlF1ZXVlSXRlbSB7IiArCisgICAgICAgICAgICAgICAgICAgICJEZXNjcmlwdGlvbj0iICsgbURlc2NyaXB0aW9uICsKKyAgICAgICAgICAgICAgICAgICAgIiwgSWQ9IiArIG1JZCArICIgfSI7CisgICAgICAgIH0KKworICAgICAgICBAT3ZlcnJpZGUKKyAgICAgICAgcHVibGljIGJvb2xlYW4gZXF1YWxzKE9iamVjdCBvKSB7CisgICAgICAgICAgICBpZiAobyA9PSBudWxsKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAoIShvIGluc3RhbmNlb2YgUXVldWVJdGVtKSkgeworICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgZmluYWwgUXVldWVJdGVtIGl0ZW0gPSAoUXVldWVJdGVtKSBvOworICAgICAgICAgICAgaWYgKG1JZCAhPSBpdGVtLm1JZCkgeworICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKCFPYmplY3RzLmVxdWFscyhtRGVzY3JpcHRpb24sIGl0ZW0ubURlc2NyaXB0aW9uKSkgeworICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBjbGFzcyBDb21tYW5kIHsKKyAgICAgICAgcHVibGljIGZpbmFsIFN0cmluZyBjb21tYW5kOworICAgICAgICBwdWJsaWMgZmluYWwgQnVuZGxlIGV4dHJhczsKKyAgICAgICAgcHVibGljIGZpbmFsIFJlc3VsdFJlY2VpdmVyIHN0dWI7CisKKyAgICAgICAgcHVibGljIENvbW1hbmQoU3RyaW5nIGNvbW1hbmQsIEJ1bmRsZSBleHRyYXMsIFJlc3VsdFJlY2VpdmVyIHN0dWIpIHsKKyAgICAgICAgICAgIHRoaXMuY29tbWFuZCA9IGNvbW1hbmQ7CisgICAgICAgICAgICB0aGlzLmV4dHJhcyA9IGV4dHJhczsKKyAgICAgICAgICAgIHRoaXMuc3R1YiA9IHN0dWI7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBwcml2YXRlIGNsYXNzIENhbGxiYWNrTWVzc2FnZUhhbmRsZXIgZXh0ZW5kcyBIYW5kbGVyIHsKKyAgICAgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IE1TR19DT01NQU5EID0gMTsKKyAgICAgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IE1TR19NRURJQV9CVVRUT04gPSAyOworICAgICAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgTVNHX1BSRVBBUkUgPSAzOworICAgICAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgTVNHX1BSRVBBUkVfTUVESUFfSUQgPSA0OworICAgICAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgTVNHX1BSRVBBUkVfU0VBUkNIID0gNTsKKyAgICAgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IE1TR19QUkVQQVJFX1VSSSA9IDY7CisgICAgICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGludCBNU0dfUExBWSA9IDc7CisgICAgICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGludCBNU0dfUExBWV9NRURJQV9JRCA9IDg7CisgICAgICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGludCBNU0dfUExBWV9TRUFSQ0ggPSA5OworICAgICAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgTVNHX1BMQVlfVVJJID0gMTA7CisgICAgICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGludCBNU0dfU0tJUF9UT19JVEVNID0gMTE7CisgICAgICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGludCBNU0dfUEFVU0UgPSAxMjsKKyAgICAgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IE1TR19TVE9QID0gMTM7CisgICAgICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGludCBNU0dfTkVYVCA9IDE0OworICAgICAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgTVNHX1BSRVZJT1VTID0gMTU7CisgICAgICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGludCBNU0dfRkFTVF9GT1JXQVJEID0gMTY7CisgICAgICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGludCBNU0dfUkVXSU5EID0gMTc7CisgICAgICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGludCBNU0dfU0VFS19UTyA9IDE4OworICAgICAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgTVNHX1JBVEUgPSAxOTsKKyAgICAgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IE1TR19DVVNUT01fQUNUSU9OID0gMjA7CisgICAgICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGludCBNU0dfQURKVVNUX1ZPTFVNRSA9IDIxOworICAgICAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgTVNHX1NFVF9WT0xVTUUgPSAyMjsKKyAgICAgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IE1TR19QTEFZX1BBVVNFX0tFWV9ET1VCTEVfVEFQX1RJTUVPVVQgPSAyMzsKKworICAgICAgICBwcml2YXRlIE1lZGlhU2Vzc2lvbi5DYWxsYmFjayBtQ2FsbGJhY2s7CisgICAgICAgIHByaXZhdGUgUmVtb3RlVXNlckluZm8gbUN1cnJlbnRDb250cm9sbGVySW5mbzsKKworICAgICAgICBwdWJsaWMgQ2FsbGJhY2tNZXNzYWdlSGFuZGxlcihMb29wZXIgbG9vcGVyLCBNZWRpYVNlc3Npb24uQ2FsbGJhY2sgY2FsbGJhY2spIHsKKyAgICAgICAgICAgIC8vVE9ETzooYi8xMTk1Mzk4NDkpIFVuY29tbWVudCBiZWxvdyBsaW5lIGFuZCByZXNvbHZlIHRoZSBlcnJvci4KKyAgICAgICAgICAgIC8vc3VwZXIobG9vcGVyLCBudWxsLCB0cnVlKTsKKyAgICAgICAgICAgIG1DYWxsYmFjayA9IGNhbGxiYWNrOworICAgICAgICAgICAgbUNhbGxiYWNrLm1IYW5kbGVyID0gdGhpczsKKyAgICAgICAgfQorCisgICAgICAgIHB1YmxpYyB2b2lkIHBvc3QoUmVtb3RlVXNlckluZm8gY2FsbGVyLCBpbnQgd2hhdCwgT2JqZWN0IG9iaiwgQnVuZGxlIGRhdGEsIGxvbmcgZGVsYXlNcykgeworICAgICAgICAgICAgUGFpcjxSZW1vdGVVc2VySW5mbywgT2JqZWN0PiBvYmpXaXRoQ2FsbGVyID0gUGFpci5jcmVhdGUoY2FsbGVyLCBvYmopOworICAgICAgICAgICAgTWVzc2FnZSBtc2cgPSBvYnRhaW5NZXNzYWdlKHdoYXQsIG9ialdpdGhDYWxsZXIpOworICAgICAgICAgICAgbXNnLnNldERhdGEoZGF0YSk7CisgICAgICAgICAgICBpZiAoZGVsYXlNcyA+IDApIHsKKyAgICAgICAgICAgICAgICBzZW5kTWVzc2FnZURlbGF5ZWQobXNnLCBkZWxheU1zKTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgc2VuZE1lc3NhZ2UobXNnKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIEBPdmVycmlkZQorICAgICAgICBwdWJsaWMgdm9pZCBoYW5kbGVNZXNzYWdlKE1lc3NhZ2UgbXNnKSB7CisgICAgICAgICAgICBtQ3VycmVudENvbnRyb2xsZXJJbmZvID0gKChQYWlyPFJlbW90ZVVzZXJJbmZvLCBPYmplY3Q+KSBtc2cub2JqKS5maXJzdDsKKworICAgICAgICAgICAgVm9sdW1lUHJvdmlkZXIgdnA7CisgICAgICAgICAgICBPYmplY3Qgb2JqID0gKChQYWlyPFJlbW90ZVVzZXJJbmZvLCBPYmplY3Q+KSBtc2cub2JqKS5zZWNvbmQ7CisKKyAgICAgICAgICAgIHN3aXRjaCAobXNnLndoYXQpIHsKKyAgICAgICAgICAgICAgICBjYXNlIE1TR19DT01NQU5EOgorICAgICAgICAgICAgICAgICAgICBDb21tYW5kIGNtZCA9IChDb21tYW5kKSBvYmo7CisgICAgICAgICAgICAgICAgICAgIG1DYWxsYmFjay5vbkNvbW1hbmQoY21kLmNvbW1hbmQsIGNtZC5leHRyYXMsIGNtZC5zdHViKTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgY2FzZSBNU0dfTUVESUFfQlVUVE9OOgorICAgICAgICAgICAgICAgICAgICBtQ2FsbGJhY2sub25NZWRpYUJ1dHRvbkV2ZW50KChJbnRlbnQpIG9iaik7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIGNhc2UgTVNHX1BSRVBBUkU6CisgICAgICAgICAgICAgICAgICAgIG1DYWxsYmFjay5vblByZXBhcmUoKTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgY2FzZSBNU0dfUFJFUEFSRV9NRURJQV9JRDoKKyAgICAgICAgICAgICAgICAgICAgbUNhbGxiYWNrLm9uUHJlcGFyZUZyb21NZWRpYUlkKChTdHJpbmcpIG9iaiwgbXNnLmdldERhdGEoKSk7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIGNhc2UgTVNHX1BSRVBBUkVfU0VBUkNIOgorICAgICAgICAgICAgICAgICAgICBtQ2FsbGJhY2sub25QcmVwYXJlRnJvbVNlYXJjaCgoU3RyaW5nKSBvYmosIG1zZy5nZXREYXRhKCkpOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICBjYXNlIE1TR19QUkVQQVJFX1VSSToKKyAgICAgICAgICAgICAgICAgICAgbUNhbGxiYWNrLm9uUHJlcGFyZUZyb21VcmkoKFVyaSkgb2JqLCBtc2cuZ2V0RGF0YSgpKTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgY2FzZSBNU0dfUExBWToKKyAgICAgICAgICAgICAgICAgICAgbUNhbGxiYWNrLm9uUGxheSgpOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICBjYXNlIE1TR19QTEFZX01FRElBX0lEOgorICAgICAgICAgICAgICAgICAgICBtQ2FsbGJhY2sub25QbGF5RnJvbU1lZGlhSWQoKFN0cmluZykgb2JqLCBtc2cuZ2V0RGF0YSgpKTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgY2FzZSBNU0dfUExBWV9TRUFSQ0g6CisgICAgICAgICAgICAgICAgICAgIG1DYWxsYmFjay5vblBsYXlGcm9tU2VhcmNoKChTdHJpbmcpIG9iaiwgbXNnLmdldERhdGEoKSk7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIGNhc2UgTVNHX1BMQVlfVVJJOgorICAgICAgICAgICAgICAgICAgICBtQ2FsbGJhY2sub25QbGF5RnJvbVVyaSgoVXJpKSBvYmosIG1zZy5nZXREYXRhKCkpOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICBjYXNlIE1TR19TS0lQX1RPX0lURU06CisgICAgICAgICAgICAgICAgICAgIG1DYWxsYmFjay5vblNraXBUb1F1ZXVlSXRlbSgoTG9uZykgb2JqKTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgY2FzZSBNU0dfUEFVU0U6CisgICAgICAgICAgICAgICAgICAgIG1DYWxsYmFjay5vblBhdXNlKCk7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIGNhc2UgTVNHX1NUT1A6CisgICAgICAgICAgICAgICAgICAgIG1DYWxsYmFjay5vblN0b3AoKTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgY2FzZSBNU0dfTkVYVDoKKyAgICAgICAgICAgICAgICAgICAgbUNhbGxiYWNrLm9uU2tpcFRvTmV4dCgpOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICBjYXNlIE1TR19QUkVWSU9VUzoKKyAgICAgICAgICAgICAgICAgICAgbUNhbGxiYWNrLm9uU2tpcFRvUHJldmlvdXMoKTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgY2FzZSBNU0dfRkFTVF9GT1JXQVJEOgorICAgICAgICAgICAgICAgICAgICBtQ2FsbGJhY2sub25GYXN0Rm9yd2FyZCgpOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICBjYXNlIE1TR19SRVdJTkQ6CisgICAgICAgICAgICAgICAgICAgIG1DYWxsYmFjay5vblJld2luZCgpOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICBjYXNlIE1TR19TRUVLX1RPOgorICAgICAgICAgICAgICAgICAgICBtQ2FsbGJhY2sub25TZWVrVG8oKExvbmcpIG9iaik7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIGNhc2UgTVNHX1JBVEU6CisgICAgICAgICAgICAgICAgICAgIG1DYWxsYmFjay5vblNldFJhdGluZygoUmF0aW5nKSBvYmopOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICBjYXNlIE1TR19DVVNUT01fQUNUSU9OOgorICAgICAgICAgICAgICAgICAgICBtQ2FsbGJhY2sub25DdXN0b21BY3Rpb24oKFN0cmluZykgb2JqLCBtc2cuZ2V0RGF0YSgpKTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgY2FzZSBNU0dfQURKVVNUX1ZPTFVNRToKKyAgICAgICAgICAgICAgICAgICAgc3luY2hyb25pemVkIChtTG9jaykgeworICAgICAgICAgICAgICAgICAgICAgICAgdnAgPSBtVm9sdW1lUHJvdmlkZXI7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgaWYgKHZwICE9IG51bGwpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHZwLm9uQWRqdXN0Vm9sdW1lKChpbnQpIG9iaik7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgY2FzZSBNU0dfU0VUX1ZPTFVNRToKKyAgICAgICAgICAgICAgICAgICAgc3luY2hyb25pemVkIChtTG9jaykgeworICAgICAgICAgICAgICAgICAgICAgICAgdnAgPSBtVm9sdW1lUHJvdmlkZXI7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgaWYgKHZwICE9IG51bGwpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHZwLm9uU2V0Vm9sdW1lVG8oKGludCkgb2JqKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICBjYXNlIE1TR19QTEFZX1BBVVNFX0tFWV9ET1VCTEVfVEFQX1RJTUVPVVQ6CisgICAgICAgICAgICAgICAgICAgIG1DYWxsYmFjay5oYW5kbGVNZWRpYVBsYXlQYXVzZUtleVNpbmdsZVRhcElmUGVuZGluZygpOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIG1DdXJyZW50Q29udHJvbGxlckluZm8gPSBudWxsOworICAgICAgICB9CisgICAgfQorfQpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvTWVkaWFDb21wb25lbnRzL2FwZXgvamF2YS9hbmRyb2lkL21lZGlhL3Nlc3Npb24vUGFyY2VsYWJsZVZvbHVtZUluZm8uYWlkbCBiL3BhY2thZ2VzL01lZGlhQ29tcG9uZW50cy9hcGV4L2phdmEvYW5kcm9pZC9tZWRpYS9zZXNzaW9uL1BhcmNlbGFibGVWb2x1bWVJbmZvLmFpZGwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzQyNTBmMAotLS0gL2Rldi9udWxsCisrKyBiL3BhY2thZ2VzL01lZGlhQ29tcG9uZW50cy9hcGV4L2phdmEvYW5kcm9pZC9tZWRpYS9zZXNzaW9uL1BhcmNlbGFibGVWb2x1bWVJbmZvLmFpZGwKQEAgLTAsMCArMSwxOCBAQAorLyogQ29weXJpZ2h0IDIwMTQsIFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKyoqCisqKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyoqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyoqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorKioKKyoqICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyoqCisqKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisqKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorKiogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisqKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisqKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyovCisKK3BhY2thZ2UgYW5kcm9pZC5tZWRpYS5zZXNzaW9uOworCitwYXJjZWxhYmxlIFBhcmNlbGFibGVWb2x1bWVJbmZvOwpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvTWVkaWFDb21wb25lbnRzL2FwZXgvamF2YS9hbmRyb2lkL21lZGlhL3Nlc3Npb24vUGFyY2VsYWJsZVZvbHVtZUluZm8uamF2YSBiL3BhY2thZ2VzL01lZGlhQ29tcG9uZW50cy9hcGV4L2phdmEvYW5kcm9pZC9tZWRpYS9zZXNzaW9uL1BhcmNlbGFibGVWb2x1bWVJbmZvLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjU5Yzk3NQotLS0gL2Rldi9udWxsCisrKyBiL3BhY2thZ2VzL01lZGlhQ29tcG9uZW50cy9hcGV4L2phdmEvYW5kcm9pZC9tZWRpYS9zZXNzaW9uL1BhcmNlbGFibGVWb2x1bWVJbmZvLmphdmEKQEAgLTAsMCArMSw4MCBAQAorLyogQ29weXJpZ2h0IDIwMTQsIFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKyAqKgorICoqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICoqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqKgorICoqICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqKgorICoqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICoqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICoqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworCitwYWNrYWdlIGFuZHJvaWQubWVkaWEuc2Vzc2lvbjsKKworaW1wb3J0IGFuZHJvaWQubWVkaWEuQXVkaW9BdHRyaWJ1dGVzOworaW1wb3J0IGFuZHJvaWQub3MuUGFyY2VsOworaW1wb3J0IGFuZHJvaWQub3MuUGFyY2VsYWJsZTsKKworLyoqCisgKiBDb252ZW5pZW5jZSBjbGFzcyBmb3IgcGFzc2luZyBpbmZvcm1hdGlvbiBhYm91dCB0aGUgYXVkaW8gY29uZmlndXJhdGlvbiBvZiBhCisgKiBzZXNzaW9uLiBUaGUgcHVibGljIGltcGxlbWVudGF0aW9uIGlzIHtAbGluayBNZWRpYUNvbnRyb2xsZXIuUGxheWJhY2tJbmZvfS4KKyAqCisgKiBAaGlkZQorICovCitwdWJsaWMgY2xhc3MgUGFyY2VsYWJsZVZvbHVtZUluZm8gaW1wbGVtZW50cyBQYXJjZWxhYmxlIHsKKyAgICBwdWJsaWMgaW50IHZvbHVtZVR5cGU7CisgICAgcHVibGljIEF1ZGlvQXR0cmlidXRlcyBhdWRpb0F0dHJzOworICAgIHB1YmxpYyBpbnQgY29udHJvbFR5cGU7CisgICAgcHVibGljIGludCBtYXhWb2x1bWU7CisgICAgcHVibGljIGludCBjdXJyZW50Vm9sdW1lOworCisgICAgcHVibGljIFBhcmNlbGFibGVWb2x1bWVJbmZvKGludCB2b2x1bWVUeXBlLCBBdWRpb0F0dHJpYnV0ZXMgYXVkaW9BdHRycywgaW50IGNvbnRyb2xUeXBlLAorICAgICAgICAgICAgaW50IG1heFZvbHVtZSwKKyAgICAgICAgICAgIGludCBjdXJyZW50Vm9sdW1lKSB7CisgICAgICAgIHRoaXMudm9sdW1lVHlwZSA9IHZvbHVtZVR5cGU7CisgICAgICAgIHRoaXMuYXVkaW9BdHRycyA9IGF1ZGlvQXR0cnM7CisgICAgICAgIHRoaXMuY29udHJvbFR5cGUgPSBjb250cm9sVHlwZTsKKyAgICAgICAgdGhpcy5tYXhWb2x1bWUgPSBtYXhWb2x1bWU7CisgICAgICAgIHRoaXMuY3VycmVudFZvbHVtZSA9IGN1cnJlbnRWb2x1bWU7CisgICAgfQorCisgICAgcHVibGljIFBhcmNlbGFibGVWb2x1bWVJbmZvKFBhcmNlbCBmcm9tKSB7CisgICAgICAgIHZvbHVtZVR5cGUgPSBmcm9tLnJlYWRJbnQoKTsKKyAgICAgICAgY29udHJvbFR5cGUgPSBmcm9tLnJlYWRJbnQoKTsKKyAgICAgICAgbWF4Vm9sdW1lID0gZnJvbS5yZWFkSW50KCk7CisgICAgICAgIGN1cnJlbnRWb2x1bWUgPSBmcm9tLnJlYWRJbnQoKTsKKyAgICAgICAgYXVkaW9BdHRycyA9IEF1ZGlvQXR0cmlidXRlcy5DUkVBVE9SLmNyZWF0ZUZyb21QYXJjZWwoZnJvbSk7CisgICAgfQorCisgICAgQE92ZXJyaWRlCisgICAgcHVibGljIGludCBkZXNjcmliZUNvbnRlbnRzKCkgeworICAgICAgICByZXR1cm4gMDsKKyAgICB9CisKKyAgICBAT3ZlcnJpZGUKKyAgICBwdWJsaWMgdm9pZCB3cml0ZVRvUGFyY2VsKFBhcmNlbCBkZXN0LCBpbnQgZmxhZ3MpIHsKKyAgICAgICAgZGVzdC53cml0ZUludCh2b2x1bWVUeXBlKTsKKyAgICAgICAgZGVzdC53cml0ZUludChjb250cm9sVHlwZSk7CisgICAgICAgIGRlc3Qud3JpdGVJbnQobWF4Vm9sdW1lKTsKKyAgICAgICAgZGVzdC53cml0ZUludChjdXJyZW50Vm9sdW1lKTsKKyAgICAgICAgYXVkaW9BdHRycy53cml0ZVRvUGFyY2VsKGRlc3QsIGZsYWdzKTsKKyAgICB9CisKKworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgUGFyY2VsYWJsZS5DcmVhdG9yPFBhcmNlbGFibGVWb2x1bWVJbmZvPiBDUkVBVE9SCisgICAgICAgICAgICA9IG5ldyBQYXJjZWxhYmxlLkNyZWF0b3I8UGFyY2VsYWJsZVZvbHVtZUluZm8+KCkgeworICAgICAgICBAT3ZlcnJpZGUKKyAgICAgICAgcHVibGljIFBhcmNlbGFibGVWb2x1bWVJbmZvIGNyZWF0ZUZyb21QYXJjZWwoUGFyY2VsIGluKSB7CisgICAgICAgICAgICByZXR1cm4gbmV3IFBhcmNlbGFibGVWb2x1bWVJbmZvKGluKTsKKyAgICAgICAgfQorCisgICAgICAgIEBPdmVycmlkZQorICAgICAgICBwdWJsaWMgUGFyY2VsYWJsZVZvbHVtZUluZm9bXSBuZXdBcnJheShpbnQgc2l6ZSkgeworICAgICAgICAgICAgcmV0dXJuIG5ldyBQYXJjZWxhYmxlVm9sdW1lSW5mb1tzaXplXTsKKyAgICAgICAgfQorICAgIH07Cit9CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9NZWRpYUNvbXBvbmVudHMvYXBleC9qYXZhL2FuZHJvaWQvbWVkaWEvc2Vzc2lvbi9QbGF5YmFja1N0YXRlLmFpZGwgYi9wYWNrYWdlcy9NZWRpYUNvbXBvbmVudHMvYXBleC9qYXZhL2FuZHJvaWQvbWVkaWEvc2Vzc2lvbi9QbGF5YmFja1N0YXRlLmFpZGwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDg3NmViZAotLS0gL2Rldi9udWxsCisrKyBiL3BhY2thZ2VzL01lZGlhQ29tcG9uZW50cy9hcGV4L2phdmEvYW5kcm9pZC9tZWRpYS9zZXNzaW9uL1BsYXliYWNrU3RhdGUuYWlkbApAQCAtMCwwICsxLDE4IEBACisvKiBDb3B5cmlnaHQgMjAxNCwgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorKioKKyoqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworKiogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorKiogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisqKgorKiogICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorKioKKyoqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyoqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisqKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyoqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyoqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorKi8KKworcGFja2FnZSBhbmRyb2lkLm1lZGlhLnNlc3Npb247CisKK3BhcmNlbGFibGUgUGxheWJhY2tTdGF0ZTsKZGlmZiAtLWdpdCBhL3BhY2thZ2VzL01lZGlhQ29tcG9uZW50cy9hcGV4L2phdmEvYW5kcm9pZC9tZWRpYS9zZXNzaW9uL1BsYXliYWNrU3RhdGUuamF2YSBiL3BhY2thZ2VzL01lZGlhQ29tcG9uZW50cy9hcGV4L2phdmEvYW5kcm9pZC9tZWRpYS9zZXNzaW9uL1BsYXliYWNrU3RhdGUuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lZDRmOWFmCi0tLSAvZGV2L251bGwKKysrIGIvcGFja2FnZXMvTWVkaWFDb21wb25lbnRzL2FwZXgvamF2YS9hbmRyb2lkL21lZGlhL3Nlc3Npb24vUGxheWJhY2tTdGF0ZS5qYXZhCkBAIC0wLDAgKzEsMTA4MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCitwYWNrYWdlIGFuZHJvaWQubWVkaWEuc2Vzc2lvbjsKKworaW1wb3J0IGFuZHJvaWQuYW5ub3RhdGlvbi5EcmF3YWJsZVJlczsKK2ltcG9ydCBhbmRyb2lkLmFubm90YXRpb24uSW50RGVmOworaW1wb3J0IGFuZHJvaWQuYW5ub3RhdGlvbi5Mb25nRGVmOworaW1wb3J0IGFuZHJvaWQuYW5ub3RhdGlvbi5OdWxsYWJsZTsKK2ltcG9ydCBhbmRyb2lkLm1lZGlhLlJlbW90ZUNvbnRyb2xDbGllbnQ7CitpbXBvcnQgYW5kcm9pZC5vcy5CdW5kbGU7CitpbXBvcnQgYW5kcm9pZC5vcy5QYXJjZWw7CitpbXBvcnQgYW5kcm9pZC5vcy5QYXJjZWxhYmxlOworaW1wb3J0IGFuZHJvaWQub3MuU3lzdGVtQ2xvY2s7CitpbXBvcnQgYW5kcm9pZC50ZXh0LlRleHRVdGlsczsKK2ltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OworaW1wb3J0IGphdmEudXRpbC5MaXN0OworCitpbXBvcnQgamF2YS5sYW5nLmFubm90YXRpb24uUmV0ZW50aW9uOworaW1wb3J0IGphdmEubGFuZy5hbm5vdGF0aW9uLlJldGVudGlvblBvbGljeTsKKworLyoqCisgKiBQbGF5YmFjayBzdGF0ZSBmb3IgYSB7QGxpbmsgTWVkaWFTZXNzaW9ufS4gVGhpcyBpbmNsdWRlcyBhIHN0YXRlIGxpa2UKKyAqIHtAbGluayBQbGF5YmFja1N0YXRlI1NUQVRFX1BMQVlJTkd9LCB0aGUgY3VycmVudCBwbGF5YmFjayBwb3NpdGlvbiwKKyAqIGFuZCB0aGUgY3VycmVudCBjb250cm9sIGNhcGFiaWxpdGllcy4KKyAqLworcHVibGljIGZpbmFsIGNsYXNzIFBsYXliYWNrU3RhdGUgaW1wbGVtZW50cyBQYXJjZWxhYmxlIHsKKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgVEFHID0gIlBsYXliYWNrU3RhdGUiOworCisgICAgLyoqCisgICAgICogQGhpZGUKKyAgICAgKi8KKyAgICBATG9uZ0RlZihmbGFnPXRydWUsIHZhbHVlPXtBQ1RJT05fU1RPUCwgQUNUSU9OX1BBVVNFLCBBQ1RJT05fUExBWSwgQUNUSU9OX1JFV0lORCwKKyAgICAgICAgICAgIEFDVElPTl9TS0lQX1RPX1BSRVZJT1VTLCBBQ1RJT05fU0tJUF9UT19ORVhULCBBQ1RJT05fRkFTVF9GT1JXQVJELCBBQ1RJT05fU0VUX1JBVElORywKKyAgICAgICAgICAgIEFDVElPTl9TRUVLX1RPLCBBQ1RJT05fUExBWV9QQVVTRSwgQUNUSU9OX1BMQVlfRlJPTV9NRURJQV9JRCwgQUNUSU9OX1BMQVlfRlJPTV9TRUFSQ0gsCisgICAgICAgICAgICBBQ1RJT05fU0tJUF9UT19RVUVVRV9JVEVNLCBBQ1RJT05fUExBWV9GUk9NX1VSSSwgQUNUSU9OX1BSRVBBUkUsCisgICAgICAgICAgICBBQ1RJT05fUFJFUEFSRV9GUk9NX01FRElBX0lELCBBQ1RJT05fUFJFUEFSRV9GUk9NX1NFQVJDSCwgQUNUSU9OX1BSRVBBUkVfRlJPTV9VUkl9KQorICAgIEBSZXRlbnRpb24oUmV0ZW50aW9uUG9saWN5LlNPVVJDRSkKKyAgICBwdWJsaWMgQGludGVyZmFjZSBBY3Rpb25zIHt9CisKKyAgICAvKioKKyAgICAgKiBJbmRpY2F0ZXMgdGhpcyBzZXNzaW9uIHN1cHBvcnRzIHRoZSBzdG9wIGNvbW1hbmQuCisgICAgICoKKyAgICAgKiBAc2VlIEJ1aWxkZXIjc2V0QWN0aW9ucyhsb25nKQorICAgICAqLworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgbG9uZyBBQ1RJT05fU1RPUCA9IDEgPDwgMDsKKworICAgIC8qKgorICAgICAqIEluZGljYXRlcyB0aGlzIHNlc3Npb24gc3VwcG9ydHMgdGhlIHBhdXNlIGNvbW1hbmQuCisgICAgICoKKyAgICAgKiBAc2VlIEJ1aWxkZXIjc2V0QWN0aW9ucyhsb25nKQorICAgICAqLworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgbG9uZyBBQ1RJT05fUEFVU0UgPSAxIDw8IDE7CisKKyAgICAvKioKKyAgICAgKiBJbmRpY2F0ZXMgdGhpcyBzZXNzaW9uIHN1cHBvcnRzIHRoZSBwbGF5IGNvbW1hbmQuCisgICAgICoKKyAgICAgKiBAc2VlIEJ1aWxkZXIjc2V0QWN0aW9ucyhsb25nKQorICAgICAqLworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgbG9uZyBBQ1RJT05fUExBWSA9IDEgPDwgMjsKKworICAgIC8qKgorICAgICAqIEluZGljYXRlcyB0aGlzIHNlc3Npb24gc3VwcG9ydHMgdGhlIHJld2luZCBjb21tYW5kLgorICAgICAqCisgICAgICogQHNlZSBCdWlsZGVyI3NldEFjdGlvbnMobG9uZykKKyAgICAgKi8KKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGxvbmcgQUNUSU9OX1JFV0lORCA9IDEgPDwgMzsKKworICAgIC8qKgorICAgICAqIEluZGljYXRlcyB0aGlzIHNlc3Npb24gc3VwcG9ydHMgdGhlIHByZXZpb3VzIGNvbW1hbmQuCisgICAgICoKKyAgICAgKiBAc2VlIEJ1aWxkZXIjc2V0QWN0aW9ucyhsb25nKQorICAgICAqLworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgbG9uZyBBQ1RJT05fU0tJUF9UT19QUkVWSU9VUyA9IDEgPDwgNDsKKworICAgIC8qKgorICAgICAqIEluZGljYXRlcyB0aGlzIHNlc3Npb24gc3VwcG9ydHMgdGhlIG5leHQgY29tbWFuZC4KKyAgICAgKgorICAgICAqIEBzZWUgQnVpbGRlciNzZXRBY3Rpb25zKGxvbmcpCisgICAgICovCisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBsb25nIEFDVElPTl9TS0lQX1RPX05FWFQgPSAxIDw8IDU7CisKKyAgICAvKioKKyAgICAgKiBJbmRpY2F0ZXMgdGhpcyBzZXNzaW9uIHN1cHBvcnRzIHRoZSBmYXN0IGZvcndhcmQgY29tbWFuZC4KKyAgICAgKgorICAgICAqIEBzZWUgQnVpbGRlciNzZXRBY3Rpb25zKGxvbmcpCisgICAgICovCisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBsb25nIEFDVElPTl9GQVNUX0ZPUldBUkQgPSAxIDw8IDY7CisKKyAgICAvKioKKyAgICAgKiBJbmRpY2F0ZXMgdGhpcyBzZXNzaW9uIHN1cHBvcnRzIHRoZSBzZXQgcmF0aW5nIGNvbW1hbmQuCisgICAgICoKKyAgICAgKiBAc2VlIEJ1aWxkZXIjc2V0QWN0aW9ucyhsb25nKQorICAgICAqLworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgbG9uZyBBQ1RJT05fU0VUX1JBVElORyA9IDEgPDwgNzsKKworICAgIC8qKgorICAgICAqIEluZGljYXRlcyB0aGlzIHNlc3Npb24gc3VwcG9ydHMgdGhlIHNlZWsgdG8gY29tbWFuZC4KKyAgICAgKgorICAgICAqIEBzZWUgQnVpbGRlciNzZXRBY3Rpb25zKGxvbmcpCisgICAgICovCisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBsb25nIEFDVElPTl9TRUVLX1RPID0gMSA8PCA4OworCisgICAgLyoqCisgICAgICogSW5kaWNhdGVzIHRoaXMgc2Vzc2lvbiBzdXBwb3J0cyB0aGUgcGxheS9wYXVzZSB0b2dnbGUgY29tbWFuZC4KKyAgICAgKgorICAgICAqIEBzZWUgQnVpbGRlciNzZXRBY3Rpb25zKGxvbmcpCisgICAgICovCisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBsb25nIEFDVElPTl9QTEFZX1BBVVNFID0gMSA8PCA5OworCisgICAgLyoqCisgICAgICogSW5kaWNhdGVzIHRoaXMgc2Vzc2lvbiBzdXBwb3J0cyB0aGUgcGxheSBmcm9tIG1lZGlhIGlkIGNvbW1hbmQuCisgICAgICoKKyAgICAgKiBAc2VlIEJ1aWxkZXIjc2V0QWN0aW9ucyhsb25nKQorICAgICAqLworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgbG9uZyBBQ1RJT05fUExBWV9GUk9NX01FRElBX0lEID0gMSA8PCAxMDsKKworICAgIC8qKgorICAgICAqIEluZGljYXRlcyB0aGlzIHNlc3Npb24gc3VwcG9ydHMgdGhlIHBsYXkgZnJvbSBzZWFyY2ggY29tbWFuZC4KKyAgICAgKgorICAgICAqIEBzZWUgQnVpbGRlciNzZXRBY3Rpb25zKGxvbmcpCisgICAgICovCisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBsb25nIEFDVElPTl9QTEFZX0ZST01fU0VBUkNIID0gMSA8PCAxMTsKKworICAgIC8qKgorICAgICAqIEluZGljYXRlcyB0aGlzIHNlc3Npb24gc3VwcG9ydHMgdGhlIHNraXAgdG8gcXVldWUgaXRlbSBjb21tYW5kLgorICAgICAqCisgICAgICogQHNlZSBCdWlsZGVyI3NldEFjdGlvbnMobG9uZykKKyAgICAgKi8KKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGxvbmcgQUNUSU9OX1NLSVBfVE9fUVVFVUVfSVRFTSA9IDEgPDwgMTI7CisKKyAgICAvKioKKyAgICAgKiBJbmRpY2F0ZXMgdGhpcyBzZXNzaW9uIHN1cHBvcnRzIHRoZSBwbGF5IGZyb20gVVJJIGNvbW1hbmQuCisgICAgICoKKyAgICAgKiBAc2VlIEJ1aWxkZXIjc2V0QWN0aW9ucyhsb25nKQorICAgICAqLworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgbG9uZyBBQ1RJT05fUExBWV9GUk9NX1VSSSA9IDEgPDwgMTM7CisKKyAgICAvKioKKyAgICAgKiBJbmRpY2F0ZXMgdGhpcyBzZXNzaW9uIHN1cHBvcnRzIHRoZSBwcmVwYXJlIGNvbW1hbmQuCisgICAgICoKKyAgICAgKiBAc2VlIEJ1aWxkZXIjc2V0QWN0aW9ucyhsb25nKQorICAgICAqLworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgbG9uZyBBQ1RJT05fUFJFUEFSRSA9IDEgPDwgMTQ7CisKKyAgICAvKioKKyAgICAgKiBJbmRpY2F0ZXMgdGhpcyBzZXNzaW9uIHN1cHBvcnRzIHRoZSBwcmVwYXJlIGZyb20gbWVkaWEgaWQgY29tbWFuZC4KKyAgICAgKgorICAgICAqIEBzZWUgQnVpbGRlciNzZXRBY3Rpb25zKGxvbmcpCisgICAgICovCisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBsb25nIEFDVElPTl9QUkVQQVJFX0ZST01fTUVESUFfSUQgPSAxIDw8IDE1OworCisgICAgLyoqCisgICAgICogSW5kaWNhdGVzIHRoaXMgc2Vzc2lvbiBzdXBwb3J0cyB0aGUgcHJlcGFyZSBmcm9tIHNlYXJjaCBjb21tYW5kLgorICAgICAqCisgICAgICogQHNlZSBCdWlsZGVyI3NldEFjdGlvbnMobG9uZykKKyAgICAgKi8KKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGxvbmcgQUNUSU9OX1BSRVBBUkVfRlJPTV9TRUFSQ0ggPSAxIDw8IDE2OworCisgICAgLyoqCisgICAgICogSW5kaWNhdGVzIHRoaXMgc2Vzc2lvbiBzdXBwb3J0cyB0aGUgcHJlcGFyZSBmcm9tIFVSSSBjb21tYW5kLgorICAgICAqCisgICAgICogQHNlZSBCdWlsZGVyI3NldEFjdGlvbnMobG9uZykKKyAgICAgKi8KKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGxvbmcgQUNUSU9OX1BSRVBBUkVfRlJPTV9VUkkgPSAxIDw8IDE3OworCisgICAgLyoqCisgICAgICogQGhpZGUKKyAgICAgKi8KKyAgICBASW50RGVmKHtTVEFURV9OT05FLCBTVEFURV9TVE9QUEVELCBTVEFURV9QQVVTRUQsIFNUQVRFX1BMQVlJTkcsIFNUQVRFX0ZBU1RfRk9SV0FSRElORywKKyAgICAgICAgICAgIFNUQVRFX1JFV0lORElORywgU1RBVEVfQlVGRkVSSU5HLCBTVEFURV9FUlJPUiwgU1RBVEVfQ09OTkVDVElORywKKyAgICAgICAgICAgIFNUQVRFX1NLSVBQSU5HX1RPX1BSRVZJT1VTLCBTVEFURV9TS0lQUElOR19UT19ORVhULCBTVEFURV9TS0lQUElOR19UT19RVUVVRV9JVEVNfSkKKyAgICBAUmV0ZW50aW9uKFJldGVudGlvblBvbGljeS5TT1VSQ0UpCisgICAgcHVibGljIEBpbnRlcmZhY2UgU3RhdGUge30KKworICAgIC8qKgorICAgICAqIFRoaXMgaXMgdGhlIGRlZmF1bHQgcGxheWJhY2sgc3RhdGUgYW5kIGluZGljYXRlcyB0aGF0IG5vIG1lZGlhIGhhcyBiZWVuCisgICAgICogYWRkZWQgeWV0LCBvciB0aGUgcGVyZm9ybWVyIGhhcyBiZWVuIHJlc2V0IGFuZCBoYXMgbm8gY29udGVudCB0byBwbGF5LgorICAgICAqCisgICAgICogQHNlZSBCdWlsZGVyI3NldFN0YXRlKGludCwgbG9uZywgZmxvYXQpCisgICAgICogQHNlZSBCdWlsZGVyI3NldFN0YXRlKGludCwgbG9uZywgZmxvYXQsIGxvbmcpCisgICAgICovCisgICAgcHVibGljIGZpbmFsIHN0YXRpYyBpbnQgU1RBVEVfTk9ORSA9IDA7CisKKyAgICAvKioKKyAgICAgKiBTdGF0ZSBpbmRpY2F0aW5nIHRoaXMgaXRlbSBpcyBjdXJyZW50bHkgc3RvcHBlZC4KKyAgICAgKgorICAgICAqIEBzZWUgQnVpbGRlciNzZXRTdGF0ZQorICAgICAqLworICAgIHB1YmxpYyBmaW5hbCBzdGF0aWMgaW50IFNUQVRFX1NUT1BQRUQgPSAxOworCisgICAgLyoqCisgICAgICogU3RhdGUgaW5kaWNhdGluZyB0aGlzIGl0ZW0gaXMgY3VycmVudGx5IHBhdXNlZC4KKyAgICAgKgorICAgICAqIEBzZWUgQnVpbGRlciNzZXRTdGF0ZQorICAgICAqLworICAgIHB1YmxpYyBmaW5hbCBzdGF0aWMgaW50IFNUQVRFX1BBVVNFRCA9IDI7CisKKyAgICAvKioKKyAgICAgKiBTdGF0ZSBpbmRpY2F0aW5nIHRoaXMgaXRlbSBpcyBjdXJyZW50bHkgcGxheWluZy4KKyAgICAgKgorICAgICAqIEBzZWUgQnVpbGRlciNzZXRTdGF0ZQorICAgICAqLworICAgIHB1YmxpYyBmaW5hbCBzdGF0aWMgaW50IFNUQVRFX1BMQVlJTkcgPSAzOworCisgICAgLyoqCisgICAgICogU3RhdGUgaW5kaWNhdGluZyB0aGlzIGl0ZW0gaXMgY3VycmVudGx5IGZhc3QgZm9yd2FyZGluZy4KKyAgICAgKgorICAgICAqIEBzZWUgQnVpbGRlciNzZXRTdGF0ZQorICAgICAqLworICAgIHB1YmxpYyBmaW5hbCBzdGF0aWMgaW50IFNUQVRFX0ZBU1RfRk9SV0FSRElORyA9IDQ7CisKKyAgICAvKioKKyAgICAgKiBTdGF0ZSBpbmRpY2F0aW5nIHRoaXMgaXRlbSBpcyBjdXJyZW50bHkgcmV3aW5kaW5nLgorICAgICAqCisgICAgICogQHNlZSBCdWlsZGVyI3NldFN0YXRlCisgICAgICovCisgICAgcHVibGljIGZpbmFsIHN0YXRpYyBpbnQgU1RBVEVfUkVXSU5ESU5HID0gNTsKKworICAgIC8qKgorICAgICAqIFN0YXRlIGluZGljYXRpbmcgdGhpcyBpdGVtIGlzIGN1cnJlbnRseSBidWZmZXJpbmcgYW5kIHdpbGwgYmVnaW4gcGxheWluZworICAgICAqIHdoZW4gZW5vdWdoIGRhdGEgaGFzIGJ1ZmZlcmVkLgorICAgICAqCisgICAgICogQHNlZSBCdWlsZGVyI3NldFN0YXRlCisgICAgICovCisgICAgcHVibGljIGZpbmFsIHN0YXRpYyBpbnQgU1RBVEVfQlVGRkVSSU5HID0gNjsKKworICAgIC8qKgorICAgICAqIFN0YXRlIGluZGljYXRpbmcgdGhpcyBpdGVtIGlzIGN1cnJlbnRseSBpbiBhbiBlcnJvciBzdGF0ZS4gVGhlIGVycm9yCisgICAgICogbWVzc2FnZSBzaG91bGQgYWxzbyBiZSBzZXQgd2hlbiBlbnRlcmluZyB0aGlzIHN0YXRlLgorICAgICAqCisgICAgICogQHNlZSBCdWlsZGVyI3NldFN0YXRlCisgICAgICovCisgICAgcHVibGljIGZpbmFsIHN0YXRpYyBpbnQgU1RBVEVfRVJST1IgPSA3OworCisgICAgLyoqCisgICAgICogU3RhdGUgaW5kaWNhdGluZyB0aGUgY2xhc3MgZG9pbmcgcGxheWJhY2sgaXMgY3VycmVudGx5IGNvbm5lY3RpbmcgdG8gYQorICAgICAqIG5ldyBkZXN0aW5hdGlvbi4gIERlcGVuZGluZyBvbiB0aGUgaW1wbGVtZW50YXRpb24geW91IG1heSByZXR1cm4gdG8gdGhlIHByZXZpb3VzCisgICAgICogc3RhdGUgd2hlbiB0aGUgY29ubmVjdGlvbiBmaW5pc2hlcyBvciBlbnRlciB7QGxpbmsgI1NUQVRFX05PTkV9LgorICAgICAqIElmIHRoZSBjb25uZWN0aW9uIGZhaWxlZCB7QGxpbmsgI1NUQVRFX0VSUk9SfSBzaG91bGQgYmUgdXNlZC4KKyAgICAgKgorICAgICAqIEBzZWUgQnVpbGRlciNzZXRTdGF0ZQorICAgICAqLworICAgIHB1YmxpYyBmaW5hbCBzdGF0aWMgaW50IFNUQVRFX0NPTk5FQ1RJTkcgPSA4OworCisgICAgLyoqCisgICAgICogU3RhdGUgaW5kaWNhdGluZyB0aGUgcGxheWVyIGlzIGN1cnJlbnRseSBza2lwcGluZyB0byB0aGUgcHJldmlvdXMgaXRlbS4KKyAgICAgKgorICAgICAqIEBzZWUgQnVpbGRlciNzZXRTdGF0ZQorICAgICAqLworICAgIHB1YmxpYyBmaW5hbCBzdGF0aWMgaW50IFNUQVRFX1NLSVBQSU5HX1RPX1BSRVZJT1VTID0gOTsKKworICAgIC8qKgorICAgICAqIFN0YXRlIGluZGljYXRpbmcgdGhlIHBsYXllciBpcyBjdXJyZW50bHkgc2tpcHBpbmcgdG8gdGhlIG5leHQgaXRlbS4KKyAgICAgKgorICAgICAqIEBzZWUgQnVpbGRlciNzZXRTdGF0ZQorICAgICAqLworICAgIHB1YmxpYyBmaW5hbCBzdGF0aWMgaW50IFNUQVRFX1NLSVBQSU5HX1RPX05FWFQgPSAxMDsKKworICAgIC8qKgorICAgICAqIFN0YXRlIGluZGljYXRpbmcgdGhlIHBsYXllciBpcyBjdXJyZW50bHkgc2tpcHBpbmcgdG8gYSBzcGVjaWZpYyBpdGVtIGluCisgICAgICogdGhlIHF1ZXVlLgorICAgICAqCisgICAgICogQHNlZSBCdWlsZGVyI3NldFN0YXRlCisgICAgICovCisgICAgcHVibGljIGZpbmFsIHN0YXRpYyBpbnQgU1RBVEVfU0tJUFBJTkdfVE9fUVVFVUVfSVRFTSA9IDExOworCisgICAgLyoqCisgICAgICogVXNlIHRoaXMgdmFsdWUgZm9yIHRoZSBwb3NpdGlvbiB0byBpbmRpY2F0ZSB0aGUgcG9zaXRpb24gaXMgbm90IGtub3duLgorICAgICAqLworICAgIHB1YmxpYyBmaW5hbCBzdGF0aWMgbG9uZyBQTEFZQkFDS19QT1NJVElPTl9VTktOT1dOID0gLTE7CisKKyAgICBwcml2YXRlIGZpbmFsIGludCBtU3RhdGU7CisgICAgcHJpdmF0ZSBmaW5hbCBsb25nIG1Qb3NpdGlvbjsKKyAgICBwcml2YXRlIGZpbmFsIGxvbmcgbUJ1ZmZlcmVkUG9zaXRpb247CisgICAgcHJpdmF0ZSBmaW5hbCBmbG9hdCBtU3BlZWQ7CisgICAgcHJpdmF0ZSBmaW5hbCBsb25nIG1BY3Rpb25zOworICAgIHByaXZhdGUgTGlzdDxQbGF5YmFja1N0YXRlLkN1c3RvbUFjdGlvbj4gbUN1c3RvbUFjdGlvbnM7CisgICAgcHJpdmF0ZSBmaW5hbCBDaGFyU2VxdWVuY2UgbUVycm9yTWVzc2FnZTsKKyAgICBwcml2YXRlIGZpbmFsIGxvbmcgbVVwZGF0ZVRpbWU7CisgICAgcHJpdmF0ZSBmaW5hbCBsb25nIG1BY3RpdmVJdGVtSWQ7CisgICAgcHJpdmF0ZSBmaW5hbCBCdW5kbGUgbUV4dHJhczsKKworICAgIHByaXZhdGUgUGxheWJhY2tTdGF0ZShpbnQgc3RhdGUsIGxvbmcgcG9zaXRpb24sIGxvbmcgdXBkYXRlVGltZSwgZmxvYXQgc3BlZWQsCisgICAgICAgICAgICBsb25nIGJ1ZmZlcmVkUG9zaXRpb24sIGxvbmcgdHJhbnNwb3J0Q29udHJvbHMsCisgICAgICAgICAgICBMaXN0PFBsYXliYWNrU3RhdGUuQ3VzdG9tQWN0aW9uPiBjdXN0b21BY3Rpb25zLCBsb25nIGFjdGl2ZUl0ZW1JZCwKKyAgICAgICAgICAgIENoYXJTZXF1ZW5jZSBlcnJvciwgQnVuZGxlIGV4dHJhcykgeworICAgICAgICBtU3RhdGUgPSBzdGF0ZTsKKyAgICAgICAgbVBvc2l0aW9uID0gcG9zaXRpb247CisgICAgICAgIG1TcGVlZCA9IHNwZWVkOworICAgICAgICBtVXBkYXRlVGltZSA9IHVwZGF0ZVRpbWU7CisgICAgICAgIG1CdWZmZXJlZFBvc2l0aW9uID0gYnVmZmVyZWRQb3NpdGlvbjsKKyAgICAgICAgbUFjdGlvbnMgPSB0cmFuc3BvcnRDb250cm9sczsKKyAgICAgICAgbUN1c3RvbUFjdGlvbnMgPSBuZXcgQXJyYXlMaXN0PD4oY3VzdG9tQWN0aW9ucyk7CisgICAgICAgIG1BY3RpdmVJdGVtSWQgPSBhY3RpdmVJdGVtSWQ7CisgICAgICAgIG1FcnJvck1lc3NhZ2UgPSBlcnJvcjsKKyAgICAgICAgbUV4dHJhcyA9IGV4dHJhczsKKyAgICB9CisKKyAgICBwcml2YXRlIFBsYXliYWNrU3RhdGUoUGFyY2VsIGluKSB7CisgICAgICAgIG1TdGF0ZSA9IGluLnJlYWRJbnQoKTsKKyAgICAgICAgbVBvc2l0aW9uID0gaW4ucmVhZExvbmcoKTsKKyAgICAgICAgbVNwZWVkID0gaW4ucmVhZEZsb2F0KCk7CisgICAgICAgIG1VcGRhdGVUaW1lID0gaW4ucmVhZExvbmcoKTsKKyAgICAgICAgbUJ1ZmZlcmVkUG9zaXRpb24gPSBpbi5yZWFkTG9uZygpOworICAgICAgICBtQWN0aW9ucyA9IGluLnJlYWRMb25nKCk7CisgICAgICAgIG1DdXN0b21BY3Rpb25zID0gaW4uY3JlYXRlVHlwZWRBcnJheUxpc3QoQ3VzdG9tQWN0aW9uLkNSRUFUT1IpOworICAgICAgICBtQWN0aXZlSXRlbUlkID0gaW4ucmVhZExvbmcoKTsKKyAgICAgICAgbUVycm9yTWVzc2FnZSA9IFRleHRVdGlscy5DSEFSX1NFUVVFTkNFX0NSRUFUT1IuY3JlYXRlRnJvbVBhcmNlbChpbik7CisgICAgICAgIG1FeHRyYXMgPSBpbi5yZWFkQnVuZGxlKCk7CisgICAgfQorCisgICAgQE92ZXJyaWRlCisgICAgcHVibGljIFN0cmluZyB0b1N0cmluZygpIHsKKyAgICAgICAgU3RyaW5nQnVpbGRlciBib2IgPSBuZXcgU3RyaW5nQnVpbGRlcigiUGxheWJhY2tTdGF0ZSB7Iik7CisgICAgICAgIGJvYi5hcHBlbmQoInN0YXRlPSIpLmFwcGVuZChtU3RhdGUpOworICAgICAgICBib2IuYXBwZW5kKCIsIHBvc2l0aW9uPSIpLmFwcGVuZChtUG9zaXRpb24pOworICAgICAgICBib2IuYXBwZW5kKCIsIGJ1ZmZlcmVkIHBvc2l0aW9uPSIpLmFwcGVuZChtQnVmZmVyZWRQb3NpdGlvbik7CisgICAgICAgIGJvYi5hcHBlbmQoIiwgc3BlZWQ9IikuYXBwZW5kKG1TcGVlZCk7CisgICAgICAgIGJvYi5hcHBlbmQoIiwgdXBkYXRlZD0iKS5hcHBlbmQobVVwZGF0ZVRpbWUpOworICAgICAgICBib2IuYXBwZW5kKCIsIGFjdGlvbnM9IikuYXBwZW5kKG1BY3Rpb25zKTsKKyAgICAgICAgYm9iLmFwcGVuZCgiLCBjdXN0b20gYWN0aW9ucz0iKS5hcHBlbmQobUN1c3RvbUFjdGlvbnMpOworICAgICAgICBib2IuYXBwZW5kKCIsIGFjdGl2ZSBpdGVtIGlkPSIpLmFwcGVuZChtQWN0aXZlSXRlbUlkKTsKKyAgICAgICAgYm9iLmFwcGVuZCgiLCBlcnJvcj0iKS5hcHBlbmQobUVycm9yTWVzc2FnZSk7CisgICAgICAgIGJvYi5hcHBlbmQoIn0iKTsKKyAgICAgICAgcmV0dXJuIGJvYi50b1N0cmluZygpOworICAgIH0KKworICAgIEBPdmVycmlkZQorICAgIHB1YmxpYyBpbnQgZGVzY3JpYmVDb250ZW50cygpIHsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorCisgICAgQE92ZXJyaWRlCisgICAgcHVibGljIHZvaWQgd3JpdGVUb1BhcmNlbChQYXJjZWwgZGVzdCwgaW50IGZsYWdzKSB7CisgICAgICAgIGRlc3Qud3JpdGVJbnQobVN0YXRlKTsKKyAgICAgICAgZGVzdC53cml0ZUxvbmcobVBvc2l0aW9uKTsKKyAgICAgICAgZGVzdC53cml0ZUZsb2F0KG1TcGVlZCk7CisgICAgICAgIGRlc3Qud3JpdGVMb25nKG1VcGRhdGVUaW1lKTsKKyAgICAgICAgZGVzdC53cml0ZUxvbmcobUJ1ZmZlcmVkUG9zaXRpb24pOworICAgICAgICBkZXN0LndyaXRlTG9uZyhtQWN0aW9ucyk7CisgICAgICAgIGRlc3Qud3JpdGVUeXBlZExpc3QobUN1c3RvbUFjdGlvbnMpOworICAgICAgICBkZXN0LndyaXRlTG9uZyhtQWN0aXZlSXRlbUlkKTsKKyAgICAgICAgVGV4dFV0aWxzLndyaXRlVG9QYXJjZWwobUVycm9yTWVzc2FnZSwgZGVzdCwgMCk7CisgICAgICAgIGRlc3Qud3JpdGVCdW5kbGUobUV4dHJhcyk7CisgICAgfQorCisgICAgLyoqCisgICAgICogR2V0IHRoZSBjdXJyZW50IHN0YXRlIG9mIHBsYXliYWNrLiBPbmUgb2YgdGhlIGZvbGxvd2luZzoKKyAgICAgKiA8dWw+CisgICAgICogPGxpPiB7QGxpbmsgUGxheWJhY2tTdGF0ZSNTVEFURV9OT05FfTwvbGk+CisgICAgICogPGxpPiB7QGxpbmsgUGxheWJhY2tTdGF0ZSNTVEFURV9TVE9QUEVEfTwvbGk+CisgICAgICogPGxpPiB7QGxpbmsgUGxheWJhY2tTdGF0ZSNTVEFURV9QTEFZSU5HfTwvbGk+CisgICAgICogPGxpPiB7QGxpbmsgUGxheWJhY2tTdGF0ZSNTVEFURV9QQVVTRUR9PC9saT4KKyAgICAgKiA8bGk+IHtAbGluayBQbGF5YmFja1N0YXRlI1NUQVRFX0ZBU1RfRk9SV0FSRElOR308L2xpPgorICAgICAqIDxsaT4ge0BsaW5rIFBsYXliYWNrU3RhdGUjU1RBVEVfUkVXSU5ESU5HfTwvbGk+CisgICAgICogPGxpPiB7QGxpbmsgUGxheWJhY2tTdGF0ZSNTVEFURV9CVUZGRVJJTkd9PC9saT4KKyAgICAgKiA8bGk+IHtAbGluayBQbGF5YmFja1N0YXRlI1NUQVRFX0VSUk9SfTwvbGk+CisgICAgICogPGxpPiB7QGxpbmsgUGxheWJhY2tTdGF0ZSNTVEFURV9DT05ORUNUSU5HfTwvbGk+CisgICAgICogPGxpPiB7QGxpbmsgUGxheWJhY2tTdGF0ZSNTVEFURV9TS0lQUElOR19UT19QUkVWSU9VU308L2xpPgorICAgICAqIDxsaT4ge0BsaW5rIFBsYXliYWNrU3RhdGUjU1RBVEVfU0tJUFBJTkdfVE9fTkVYVH08L2xpPgorICAgICAqIDxsaT4ge0BsaW5rIFBsYXliYWNrU3RhdGUjU1RBVEVfU0tJUFBJTkdfVE9fUVVFVUVfSVRFTX08L2xpPgorICAgICAqIDwvdWw+CisgICAgICovCisgICAgQFN0YXRlCisgICAgcHVibGljIGludCBnZXRTdGF0ZSgpIHsKKyAgICAgICAgcmV0dXJuIG1TdGF0ZTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBHZXQgdGhlIGN1cnJlbnQgcGxheWJhY2sgcG9zaXRpb24gaW4gbXMuCisgICAgICovCisgICAgcHVibGljIGxvbmcgZ2V0UG9zaXRpb24oKSB7CisgICAgICAgIHJldHVybiBtUG9zaXRpb247CisgICAgfQorCisgICAgLyoqCisgICAgICogR2V0IHRoZSBjdXJyZW50IGJ1ZmZlcmVkIHBvc2l0aW9uIGluIG1zLiBUaGlzIGlzIHRoZSBmYXJ0aGVzdCBwbGF5YmFjaworICAgICAqIHBvaW50IHRoYXQgY2FuIGJlIHJlYWNoZWQgZnJvbSB0aGUgY3VycmVudCBwb3NpdGlvbiB1c2luZyBvbmx5IGJ1ZmZlcmVkCisgICAgICogY29udGVudC4KKyAgICAgKi8KKyAgICBwdWJsaWMgbG9uZyBnZXRCdWZmZXJlZFBvc2l0aW9uKCkgeworICAgICAgICByZXR1cm4gbUJ1ZmZlcmVkUG9zaXRpb247CisgICAgfQorCisgICAgLyoqCisgICAgICogR2V0IHRoZSBjdXJyZW50IHBsYXliYWNrIHNwZWVkIGFzIGEgbXVsdGlwbGUgb2Ygbm9ybWFsIHBsYXliYWNrLiBUaGlzCisgICAgICogc2hvdWxkIGJlIG5lZ2F0aXZlIHdoZW4gcmV3aW5kaW5nLiBBIHZhbHVlIG9mIDEgbWVhbnMgbm9ybWFsIHBsYXliYWNrIGFuZAorICAgICAqIDAgbWVhbnMgcGF1c2VkLgorICAgICAqCisgICAgICogQHJldHVybiBUaGUgY3VycmVudCBzcGVlZCBvZiBwbGF5YmFjay4KKyAgICAgKi8KKyAgICBwdWJsaWMgZmxvYXQgZ2V0UGxheWJhY2tTcGVlZCgpIHsKKyAgICAgICAgcmV0dXJuIG1TcGVlZDsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBHZXQgdGhlIGN1cnJlbnQgYWN0aW9ucyBhdmFpbGFibGUgb24gdGhpcyBzZXNzaW9uLiBUaGlzIHNob3VsZCB1c2UgYQorICAgICAqIGJpdG1hc2sgb2YgdGhlIGF2YWlsYWJsZSBhY3Rpb25zLgorICAgICAqIDx1bD4KKyAgICAgKiA8bGk+IHtAbGluayBQbGF5YmFja1N0YXRlI0FDVElPTl9TS0lQX1RPX1BSRVZJT1VTfTwvbGk+CisgICAgICogPGxpPiB7QGxpbmsgUGxheWJhY2tTdGF0ZSNBQ1RJT05fUkVXSU5EfTwvbGk+CisgICAgICogPGxpPiB7QGxpbmsgUGxheWJhY2tTdGF0ZSNBQ1RJT05fUExBWX08L2xpPgorICAgICAqIDxsaT4ge0BsaW5rIFBsYXliYWNrU3RhdGUjQUNUSU9OX1BBVVNFfTwvbGk+CisgICAgICogPGxpPiB7QGxpbmsgUGxheWJhY2tTdGF0ZSNBQ1RJT05fU1RPUH08L2xpPgorICAgICAqIDxsaT4ge0BsaW5rIFBsYXliYWNrU3RhdGUjQUNUSU9OX0ZBU1RfRk9SV0FSRH08L2xpPgorICAgICAqIDxsaT4ge0BsaW5rIFBsYXliYWNrU3RhdGUjQUNUSU9OX1NLSVBfVE9fTkVYVH08L2xpPgorICAgICAqIDxsaT4ge0BsaW5rIFBsYXliYWNrU3RhdGUjQUNUSU9OX1NFRUtfVE99PC9saT4KKyAgICAgKiA8bGk+IHtAbGluayBQbGF5YmFja1N0YXRlI0FDVElPTl9TRVRfUkFUSU5HfTwvbGk+CisgICAgICogPGxpPiB7QGxpbmsgUGxheWJhY2tTdGF0ZSNBQ1RJT05fUExBWV9QQVVTRX08L2xpPgorICAgICAqIDxsaT4ge0BsaW5rIFBsYXliYWNrU3RhdGUjQUNUSU9OX1BMQVlfRlJPTV9NRURJQV9JRH08L2xpPgorICAgICAqIDxsaT4ge0BsaW5rIFBsYXliYWNrU3RhdGUjQUNUSU9OX1BMQVlfRlJPTV9TRUFSQ0h9PC9saT4KKyAgICAgKiA8bGk+IHtAbGluayBQbGF5YmFja1N0YXRlI0FDVElPTl9TS0lQX1RPX1FVRVVFX0lURU19PC9saT4KKyAgICAgKiA8bGk+IHtAbGluayBQbGF5YmFja1N0YXRlI0FDVElPTl9QTEFZX0ZST01fVVJJfTwvbGk+CisgICAgICogPGxpPiB7QGxpbmsgUGxheWJhY2tTdGF0ZSNBQ1RJT05fUFJFUEFSRX08L2xpPgorICAgICAqIDxsaT4ge0BsaW5rIFBsYXliYWNrU3RhdGUjQUNUSU9OX1BSRVBBUkVfRlJPTV9NRURJQV9JRH08L2xpPgorICAgICAqIDxsaT4ge0BsaW5rIFBsYXliYWNrU3RhdGUjQUNUSU9OX1BSRVBBUkVfRlJPTV9TRUFSQ0h9PC9saT4KKyAgICAgKiA8bGk+IHtAbGluayBQbGF5YmFja1N0YXRlI0FDVElPTl9QUkVQQVJFX0ZST01fVVJJfTwvbGk+CisgICAgICogPC91bD4KKyAgICAgKi8KKyAgICBAQWN0aW9ucworICAgIHB1YmxpYyBsb25nIGdldEFjdGlvbnMoKSB7CisgICAgICAgIHJldHVybiBtQWN0aW9uczsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBHZXQgdGhlIGxpc3Qgb2YgY3VzdG9tIGFjdGlvbnMuCisgICAgICovCisgICAgcHVibGljIExpc3Q8UGxheWJhY2tTdGF0ZS5DdXN0b21BY3Rpb24+IGdldEN1c3RvbUFjdGlvbnMoKSB7CisgICAgICAgIHJldHVybiBtQ3VzdG9tQWN0aW9uczsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBHZXQgYSB1c2VyIHJlYWRhYmxlIGVycm9yIG1lc3NhZ2UuIFRoaXMgc2hvdWxkIGJlIHNldCB3aGVuIHRoZSBzdGF0ZSBpcworICAgICAqIHtAbGluayBQbGF5YmFja1N0YXRlI1NUQVRFX0VSUk9SfS4KKyAgICAgKi8KKyAgICBwdWJsaWMgQ2hhclNlcXVlbmNlIGdldEVycm9yTWVzc2FnZSgpIHsKKyAgICAgICAgcmV0dXJuIG1FcnJvck1lc3NhZ2U7CisgICAgfQorCisgICAgLyoqCisgICAgICogR2V0IHRoZSBlbGFwc2VkIHJlYWwgdGltZSBhdCB3aGljaCBwb3NpdGlvbiB3YXMgbGFzdCB1cGRhdGVkLiBJZiB0aGUKKyAgICAgKiBwb3NpdGlvbiBoYXMgbmV2ZXIgYmVlbiBzZXQgdGhpcyB3aWxsIHJldHVybiAwOworICAgICAqCisgICAgICogQHJldHVybiBUaGUgbGFzdCB0aW1lIHRoZSBwb3NpdGlvbiB3YXMgdXBkYXRlZC4KKyAgICAgKi8KKyAgICBwdWJsaWMgbG9uZyBnZXRMYXN0UG9zaXRpb25VcGRhdGVUaW1lKCkgeworICAgICAgICByZXR1cm4gbVVwZGF0ZVRpbWU7CisgICAgfQorCisgICAgLyoqCisgICAgICogR2V0IHRoZSBpZCBvZiB0aGUgY3VycmVudGx5IGFjdGl2ZSBpdGVtIGluIHRoZSBxdWV1ZS4gSWYgdGhlcmUgaXMgbm8KKyAgICAgKiBxdWV1ZSBvciBhIHF1ZXVlIGlzIG5vdCBzdXBwb3J0ZWQgYnkgdGhlIHNlc3Npb24gdGhpcyB3aWxsIGJlCisgICAgICoge0BsaW5rIE1lZGlhU2Vzc2lvbi5RdWV1ZUl0ZW0jVU5LTk9XTl9JRH0uCisgICAgICoKKyAgICAgKiBAcmV0dXJuIFRoZSBpZCBvZiB0aGUgY3VycmVudGx5IGFjdGl2ZSBpdGVtIGluIHRoZSBxdWV1ZSBvcgorICAgICAqICAgICAgICAge0BsaW5rIE1lZGlhU2Vzc2lvbi5RdWV1ZUl0ZW0jVU5LTk9XTl9JRH0uCisgICAgICovCisgICAgcHVibGljIGxvbmcgZ2V0QWN0aXZlUXVldWVJdGVtSWQoKSB7CisgICAgICAgIHJldHVybiBtQWN0aXZlSXRlbUlkOworICAgIH0KKworICAgIC8qKgorICAgICAqIEdldCBhbnkgY3VzdG9tIGV4dHJhcyB0aGF0IHdlcmUgc2V0IG9uIHRoaXMgcGxheWJhY2sgc3RhdGUuCisgICAgICoKKyAgICAgKiBAcmV0dXJuIFRoZSBleHRyYXMgZm9yIHRoaXMgc3RhdGUgb3IgbnVsbC4KKyAgICAgKi8KKyAgICBwdWJsaWMgQE51bGxhYmxlIEJ1bmRsZSBnZXRFeHRyYXMoKSB7CisgICAgICAgIHJldHVybiBtRXh0cmFzOworICAgIH0KKworICAgIC8qKgorICAgICAqIEdldCB0aGUge0BsaW5rIFBsYXliYWNrU3RhdGV9IHN0YXRlIGZvciB0aGUgZ2l2ZW4KKyAgICAgKiB7QGxpbmsgUmVtb3RlQ29udHJvbENsaWVudH0gc3RhdGUuCisgICAgICoKKyAgICAgKiBAcGFyYW0gcmNjU3RhdGUgVGhlIHN0YXRlIHVzZWQgYnkge0BsaW5rIFJlbW90ZUNvbnRyb2xDbGllbnR9LgorICAgICAqIEByZXR1cm4gVGhlIGVxdWl2YWxlbnQgc3RhdGUgdXNlZCBieSB7QGxpbmsgUGxheWJhY2tTdGF0ZX0uCisgICAgICogQGhpZGUKKyAgICAgKi8KKyAgICBwdWJsaWMgc3RhdGljIGludCBnZXRTdGF0ZUZyb21SY2NTdGF0ZShpbnQgcmNjU3RhdGUpIHsKKyAgICAgICAgc3dpdGNoIChyY2NTdGF0ZSkgeworICAgICAgICAgICAgY2FzZSBSZW1vdGVDb250cm9sQ2xpZW50LlBMQVlTVEFURV9CVUZGRVJJTkc6CisgICAgICAgICAgICAgICAgcmV0dXJuIFNUQVRFX0JVRkZFUklORzsKKyAgICAgICAgICAgIGNhc2UgUmVtb3RlQ29udHJvbENsaWVudC5QTEFZU1RBVEVfRVJST1I6CisgICAgICAgICAgICAgICAgcmV0dXJuIFNUQVRFX0VSUk9SOworICAgICAgICAgICAgY2FzZSBSZW1vdGVDb250cm9sQ2xpZW50LlBMQVlTVEFURV9GQVNUX0ZPUldBUkRJTkc6CisgICAgICAgICAgICAgICAgcmV0dXJuIFNUQVRFX0ZBU1RfRk9SV0FSRElORzsKKyAgICAgICAgICAgIC8vUmVtb3RlQ29udHJvbENsaWVudC5QTEFZU1RBVEVfTk9ORSBpcyBoaWRkZW4KKyAgICAgICAgICAgIGNhc2UgMDogIC8vUmVtb3RlQ29udHJvbENsaWVudC5QTEFZU1RBVEVfTk9ORToKKyAgICAgICAgICAgICAgICByZXR1cm4gU1RBVEVfTk9ORTsKKyAgICAgICAgICAgIGNhc2UgUmVtb3RlQ29udHJvbENsaWVudC5QTEFZU1RBVEVfUEFVU0VEOgorICAgICAgICAgICAgICAgIHJldHVybiBTVEFURV9QQVVTRUQ7CisgICAgICAgICAgICBjYXNlIFJlbW90ZUNvbnRyb2xDbGllbnQuUExBWVNUQVRFX1BMQVlJTkc6CisgICAgICAgICAgICAgICAgcmV0dXJuIFNUQVRFX1BMQVlJTkc7CisgICAgICAgICAgICBjYXNlIFJlbW90ZUNvbnRyb2xDbGllbnQuUExBWVNUQVRFX1JFV0lORElORzoKKyAgICAgICAgICAgICAgICByZXR1cm4gU1RBVEVfUkVXSU5ESU5HOworICAgICAgICAgICAgY2FzZSBSZW1vdGVDb250cm9sQ2xpZW50LlBMQVlTVEFURV9TS0lQUElOR19CQUNLV0FSRFM6CisgICAgICAgICAgICAgICAgcmV0dXJuIFNUQVRFX1NLSVBQSU5HX1RPX1BSRVZJT1VTOworICAgICAgICAgICAgY2FzZSBSZW1vdGVDb250cm9sQ2xpZW50LlBMQVlTVEFURV9TS0lQUElOR19GT1JXQVJEUzoKKyAgICAgICAgICAgICAgICByZXR1cm4gU1RBVEVfU0tJUFBJTkdfVE9fTkVYVDsKKyAgICAgICAgICAgIGNhc2UgUmVtb3RlQ29udHJvbENsaWVudC5QTEFZU1RBVEVfU1RPUFBFRDoKKyAgICAgICAgICAgICAgICByZXR1cm4gU1RBVEVfU1RPUFBFRDsKKyAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICB9CisgICAgfQorCisgICAgLyoqCisgICAgICogR2V0IHRoZSB7QGxpbmsgUmVtb3RlQ29udHJvbENsaWVudH0gc3RhdGUgZm9yIHRoZSBnaXZlbgorICAgICAqIHtAbGluayBQbGF5YmFja1N0YXRlfSBzdGF0ZS4KKyAgICAgKgorICAgICAqIEBwYXJhbSBzdGF0ZSBUaGUgc3RhdGUgdXNlZCBieSB7QGxpbmsgUGxheWJhY2tTdGF0ZX0uCisgICAgICogQHJldHVybiBUaGUgZXF1aXZhbGVudCBzdGF0ZSB1c2VkIGJ5IHtAbGluayBSZW1vdGVDb250cm9sQ2xpZW50fS4KKyAgICAgKiBAaGlkZQorICAgICAqLworICAgIHB1YmxpYyBzdGF0aWMgaW50IGdldFJjY1N0YXRlRnJvbVN0YXRlKGludCBzdGF0ZSkgeworICAgICAgICBzd2l0Y2ggKHN0YXRlKSB7CisgICAgICAgICAgICBjYXNlIFNUQVRFX0JVRkZFUklORzoKKyAgICAgICAgICAgICAgICByZXR1cm4gUmVtb3RlQ29udHJvbENsaWVudC5QTEFZU1RBVEVfQlVGRkVSSU5HOworICAgICAgICAgICAgY2FzZSBTVEFURV9FUlJPUjoKKyAgICAgICAgICAgICAgICByZXR1cm4gUmVtb3RlQ29udHJvbENsaWVudC5QTEFZU1RBVEVfRVJST1I7CisgICAgICAgICAgICBjYXNlIFNUQVRFX0ZBU1RfRk9SV0FSRElORzoKKyAgICAgICAgICAgICAgICByZXR1cm4gUmVtb3RlQ29udHJvbENsaWVudC5QTEFZU1RBVEVfRkFTVF9GT1JXQVJESU5HOworICAgICAgICAgICAgY2FzZSBTVEFURV9OT05FOgorICAgICAgICAgICAgICAgIC8vUmVtb3RlQ29udHJvbENsaWVudC5QTEFZU1RBVEVfTk9ORSBpcyBoaWRkZW4KKyAgICAgICAgICAgICAgICByZXR1cm4gMDsgIC8vUmVtb3RlQ29udHJvbENsaWVudC5QTEFZU1RBVEVfTk9ORTsKKyAgICAgICAgICAgIGNhc2UgU1RBVEVfUEFVU0VEOgorICAgICAgICAgICAgICAgIHJldHVybiBSZW1vdGVDb250cm9sQ2xpZW50LlBMQVlTVEFURV9QQVVTRUQ7CisgICAgICAgICAgICBjYXNlIFNUQVRFX1BMQVlJTkc6CisgICAgICAgICAgICAgICAgcmV0dXJuIFJlbW90ZUNvbnRyb2xDbGllbnQuUExBWVNUQVRFX1BMQVlJTkc7CisgICAgICAgICAgICBjYXNlIFNUQVRFX1JFV0lORElORzoKKyAgICAgICAgICAgICAgICByZXR1cm4gUmVtb3RlQ29udHJvbENsaWVudC5QTEFZU1RBVEVfUkVXSU5ESU5HOworICAgICAgICAgICAgY2FzZSBTVEFURV9TS0lQUElOR19UT19QUkVWSU9VUzoKKyAgICAgICAgICAgICAgICByZXR1cm4gUmVtb3RlQ29udHJvbENsaWVudC5QTEFZU1RBVEVfU0tJUFBJTkdfQkFDS1dBUkRTOworICAgICAgICAgICAgY2FzZSBTVEFURV9TS0lQUElOR19UT19ORVhUOgorICAgICAgICAgICAgICAgIHJldHVybiBSZW1vdGVDb250cm9sQ2xpZW50LlBMQVlTVEFURV9TS0lQUElOR19GT1JXQVJEUzsKKyAgICAgICAgICAgIGNhc2UgU1RBVEVfU1RPUFBFRDoKKyAgICAgICAgICAgICAgICByZXR1cm4gUmVtb3RlQ29udHJvbENsaWVudC5QTEFZU1RBVEVfU1RPUFBFRDsKKyAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICB9CisgICAgfQorCisgICAgLyoqCisgICAgICogQGhpZGUKKyAgICAgKi8KKyAgICBwdWJsaWMgc3RhdGljIGxvbmcgZ2V0QWN0aW9uc0Zyb21SY2NDb250cm9sRmxhZ3MoaW50IHJjY0ZsYWdzKSB7CisgICAgICAgIGxvbmcgYWN0aW9ucyA9IDA7CisgICAgICAgIGxvbmcgZmxhZyA9IDE7CisgICAgICAgIHdoaWxlIChmbGFnIDw9IHJjY0ZsYWdzKSB7CisgICAgICAgICAgICBpZiAoKGZsYWcgJiByY2NGbGFncykgIT0gMCkgeworICAgICAgICAgICAgICAgIGFjdGlvbnMgfD0gZ2V0QWN0aW9uRm9yUmNjRmxhZygoaW50KSBmbGFnKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGZsYWcgPSBmbGFnIDw8IDE7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIGFjdGlvbnM7CisgICAgfQorCisgICAgLyoqCisgICAgICogQGhpZGUKKyAgICAgKi8KKyAgICBwdWJsaWMgc3RhdGljIGludCBnZXRSY2NDb250cm9sRmxhZ3NGcm9tQWN0aW9ucyhsb25nIGFjdGlvbnMpIHsKKyAgICAgICAgaW50IHJjY0ZsYWdzID0gMDsKKyAgICAgICAgbG9uZyBhY3Rpb24gPSAxOworICAgICAgICB3aGlsZSAoYWN0aW9uIDw9IGFjdGlvbnMgJiYgYWN0aW9uIDwgSW50ZWdlci5NQVhfVkFMVUUpIHsKKyAgICAgICAgICAgIGlmICgoYWN0aW9uICYgYWN0aW9ucykgIT0gMCkgeworICAgICAgICAgICAgICAgIHJjY0ZsYWdzIHw9IGdldFJjY0ZsYWdGb3JBY3Rpb24oYWN0aW9uKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGFjdGlvbiA9IGFjdGlvbiA8PCAxOworICAgICAgICB9CisgICAgICAgIHJldHVybiByY2NGbGFnczsKKyAgICB9CisKKyAgICBwcml2YXRlIHN0YXRpYyBsb25nIGdldEFjdGlvbkZvclJjY0ZsYWcoaW50IGZsYWcpIHsKKyAgICAgICAgc3dpdGNoIChmbGFnKSB7CisgICAgICAgICAgICBjYXNlIFJlbW90ZUNvbnRyb2xDbGllbnQuRkxBR19LRVlfTUVESUFfUFJFVklPVVM6CisgICAgICAgICAgICAgICAgcmV0dXJuIEFDVElPTl9TS0lQX1RPX1BSRVZJT1VTOworICAgICAgICAgICAgY2FzZSBSZW1vdGVDb250cm9sQ2xpZW50LkZMQUdfS0VZX01FRElBX1JFV0lORDoKKyAgICAgICAgICAgICAgICByZXR1cm4gQUNUSU9OX1JFV0lORDsKKyAgICAgICAgICAgIGNhc2UgUmVtb3RlQ29udHJvbENsaWVudC5GTEFHX0tFWV9NRURJQV9QTEFZOgorICAgICAgICAgICAgICAgIHJldHVybiBBQ1RJT05fUExBWTsKKyAgICAgICAgICAgIGNhc2UgUmVtb3RlQ29udHJvbENsaWVudC5GTEFHX0tFWV9NRURJQV9QTEFZX1BBVVNFOgorICAgICAgICAgICAgICAgIHJldHVybiBBQ1RJT05fUExBWV9QQVVTRTsKKyAgICAgICAgICAgIGNhc2UgUmVtb3RlQ29udHJvbENsaWVudC5GTEFHX0tFWV9NRURJQV9QQVVTRToKKyAgICAgICAgICAgICAgICByZXR1cm4gQUNUSU9OX1BBVVNFOworICAgICAgICAgICAgY2FzZSBSZW1vdGVDb250cm9sQ2xpZW50LkZMQUdfS0VZX01FRElBX1NUT1A6CisgICAgICAgICAgICAgICAgcmV0dXJuIEFDVElPTl9TVE9QOworICAgICAgICAgICAgY2FzZSBSZW1vdGVDb250cm9sQ2xpZW50LkZMQUdfS0VZX01FRElBX0ZBU1RfRk9SV0FSRDoKKyAgICAgICAgICAgICAgICByZXR1cm4gQUNUSU9OX0ZBU1RfRk9SV0FSRDsKKyAgICAgICAgICAgIGNhc2UgUmVtb3RlQ29udHJvbENsaWVudC5GTEFHX0tFWV9NRURJQV9ORVhUOgorICAgICAgICAgICAgICAgIHJldHVybiBBQ1RJT05fU0tJUF9UT19ORVhUOworICAgICAgICAgICAgY2FzZSBSZW1vdGVDb250cm9sQ2xpZW50LkZMQUdfS0VZX01FRElBX1BPU0lUSU9OX1VQREFURToKKyAgICAgICAgICAgICAgICByZXR1cm4gQUNUSU9OX1NFRUtfVE87CisgICAgICAgICAgICBjYXNlIFJlbW90ZUNvbnRyb2xDbGllbnQuRkxBR19LRVlfTUVESUFfUkFUSU5HOgorICAgICAgICAgICAgICAgIHJldHVybiBBQ1RJT05fU0VUX1JBVElORzsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gMDsKKyAgICB9CisKKyAgICBwcml2YXRlIHN0YXRpYyBpbnQgZ2V0UmNjRmxhZ0ZvckFjdGlvbihsb25nIGFjdGlvbikgeworICAgICAgICAvLyBXZSBvbmx5IGNhcmUgYWJvdXQgdGhlIGxvd2VyIHNldCBvZiBhY3Rpb25zIHRoYXQgY2FuIG1hcCB0byByY2MKKyAgICAgICAgLy8gZmxhZ3MuCisgICAgICAgIGludCB0ZXN0QWN0aW9uID0gYWN0aW9uIDwgSW50ZWdlci5NQVhfVkFMVUUgPyAoaW50KSBhY3Rpb24gOiAwOworICAgICAgICBzd2l0Y2ggKHRlc3RBY3Rpb24pIHsKKyAgICAgICAgICAgIGNhc2UgKGludCkgQUNUSU9OX1NLSVBfVE9fUFJFVklPVVM6CisgICAgICAgICAgICAgICAgcmV0dXJuIFJlbW90ZUNvbnRyb2xDbGllbnQuRkxBR19LRVlfTUVESUFfUFJFVklPVVM7CisgICAgICAgICAgICBjYXNlIChpbnQpIEFDVElPTl9SRVdJTkQ6CisgICAgICAgICAgICAgICAgcmV0dXJuIFJlbW90ZUNvbnRyb2xDbGllbnQuRkxBR19LRVlfTUVESUFfUkVXSU5EOworICAgICAgICAgICAgY2FzZSAoaW50KSBBQ1RJT05fUExBWToKKyAgICAgICAgICAgICAgICByZXR1cm4gUmVtb3RlQ29udHJvbENsaWVudC5GTEFHX0tFWV9NRURJQV9QTEFZOworICAgICAgICAgICAgY2FzZSAoaW50KSBBQ1RJT05fUExBWV9QQVVTRToKKyAgICAgICAgICAgICAgICByZXR1cm4gUmVtb3RlQ29udHJvbENsaWVudC5GTEFHX0tFWV9NRURJQV9QTEFZX1BBVVNFOworICAgICAgICAgICAgY2FzZSAoaW50KSBBQ1RJT05fUEFVU0U6CisgICAgICAgICAgICAgICAgcmV0dXJuIFJlbW90ZUNvbnRyb2xDbGllbnQuRkxBR19LRVlfTUVESUFfUEFVU0U7CisgICAgICAgICAgICBjYXNlIChpbnQpIEFDVElPTl9TVE9QOgorICAgICAgICAgICAgICAgIHJldHVybiBSZW1vdGVDb250cm9sQ2xpZW50LkZMQUdfS0VZX01FRElBX1NUT1A7CisgICAgICAgICAgICBjYXNlIChpbnQpIEFDVElPTl9GQVNUX0ZPUldBUkQ6CisgICAgICAgICAgICAgICAgcmV0dXJuIFJlbW90ZUNvbnRyb2xDbGllbnQuRkxBR19LRVlfTUVESUFfRkFTVF9GT1JXQVJEOworICAgICAgICAgICAgY2FzZSAoaW50KSBBQ1RJT05fU0tJUF9UT19ORVhUOgorICAgICAgICAgICAgICAgIHJldHVybiBSZW1vdGVDb250cm9sQ2xpZW50LkZMQUdfS0VZX01FRElBX05FWFQ7CisgICAgICAgICAgICBjYXNlIChpbnQpIEFDVElPTl9TRUVLX1RPOgorICAgICAgICAgICAgICAgIHJldHVybiBSZW1vdGVDb250cm9sQ2xpZW50LkZMQUdfS0VZX01FRElBX1BPU0lUSU9OX1VQREFURTsKKyAgICAgICAgICAgIGNhc2UgKGludCkgQUNUSU9OX1NFVF9SQVRJTkc6CisgICAgICAgICAgICAgICAgcmV0dXJuIFJlbW90ZUNvbnRyb2xDbGllbnQuRkxBR19LRVlfTUVESUFfUkFUSU5HOworICAgICAgICB9CisgICAgICAgIHJldHVybiAwOworICAgIH0KKworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgUGFyY2VsYWJsZS5DcmVhdG9yPFBsYXliYWNrU3RhdGU+IENSRUFUT1IgPQorICAgICAgICAgICAgbmV3IFBhcmNlbGFibGUuQ3JlYXRvcjxQbGF5YmFja1N0YXRlPigpIHsKKyAgICAgICAgQE92ZXJyaWRlCisgICAgICAgIHB1YmxpYyBQbGF5YmFja1N0YXRlIGNyZWF0ZUZyb21QYXJjZWwoUGFyY2VsIGluKSB7CisgICAgICAgICAgICByZXR1cm4gbmV3IFBsYXliYWNrU3RhdGUoaW4pOworICAgICAgICB9CisKKyAgICAgICAgQE92ZXJyaWRlCisgICAgICAgIHB1YmxpYyBQbGF5YmFja1N0YXRlW10gbmV3QXJyYXkoaW50IHNpemUpIHsKKyAgICAgICAgICAgIHJldHVybiBuZXcgUGxheWJhY2tTdGF0ZVtzaXplXTsKKyAgICAgICAgfQorICAgIH07CisKKyAgICAvKioKKyAgICAgKiB7QGxpbmsgUGxheWJhY2tTdGF0ZS5DdXN0b21BY3Rpb24gQ3VzdG9tQWN0aW9uc30gY2FuIGJlIHVzZWQgdG8gZXh0ZW5kIHRoZSBjYXBhYmlsaXRpZXMgb2YKKyAgICAgKiB0aGUgc3RhbmRhcmQgdHJhbnNwb3J0IGNvbnRyb2xzIGJ5IGV4cG9zaW5nIGFwcCBzcGVjaWZpYyBhY3Rpb25zIHRvCisgICAgICoge0BsaW5rIE1lZGlhQ29udHJvbGxlciBNZWRpYUNvbnRyb2xsZXJzfS4KKyAgICAgKi8KKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGNsYXNzIEN1c3RvbUFjdGlvbiBpbXBsZW1lbnRzIFBhcmNlbGFibGUgeworICAgICAgICBwcml2YXRlIGZpbmFsIFN0cmluZyBtQWN0aW9uOworICAgICAgICBwcml2YXRlIGZpbmFsIENoYXJTZXF1ZW5jZSBtTmFtZTsKKyAgICAgICAgcHJpdmF0ZSBmaW5hbCBpbnQgbUljb247CisgICAgICAgIHByaXZhdGUgZmluYWwgQnVuZGxlIG1FeHRyYXM7CisKKyAgICAgICAgLyoqCisgICAgICAgICAqIFVzZSB7QGxpbmsgUGxheWJhY2tTdGF0ZS5DdXN0b21BY3Rpb24uQnVpbGRlciNidWlsZCgpfS4KKyAgICAgICAgICovCisgICAgICAgIHByaXZhdGUgQ3VzdG9tQWN0aW9uKFN0cmluZyBhY3Rpb24sIENoYXJTZXF1ZW5jZSBuYW1lLCBpbnQgaWNvbiwgQnVuZGxlIGV4dHJhcykgeworICAgICAgICAgICAgbUFjdGlvbiA9IGFjdGlvbjsKKyAgICAgICAgICAgIG1OYW1lID0gbmFtZTsKKyAgICAgICAgICAgIG1JY29uID0gaWNvbjsKKyAgICAgICAgICAgIG1FeHRyYXMgPSBleHRyYXM7CisgICAgICAgIH0KKworICAgICAgICBwcml2YXRlIEN1c3RvbUFjdGlvbihQYXJjZWwgaW4pIHsKKyAgICAgICAgICAgIG1BY3Rpb24gPSBpbi5yZWFkU3RyaW5nKCk7CisgICAgICAgICAgICBtTmFtZSA9IFRleHRVdGlscy5DSEFSX1NFUVVFTkNFX0NSRUFUT1IuY3JlYXRlRnJvbVBhcmNlbChpbik7CisgICAgICAgICAgICBtSWNvbiA9IGluLnJlYWRJbnQoKTsKKyAgICAgICAgICAgIG1FeHRyYXMgPSBpbi5yZWFkQnVuZGxlKCk7CisgICAgICAgIH0KKworICAgICAgICBAT3ZlcnJpZGUKKyAgICAgICAgcHVibGljIHZvaWQgd3JpdGVUb1BhcmNlbChQYXJjZWwgZGVzdCwgaW50IGZsYWdzKSB7CisgICAgICAgICAgICBkZXN0LndyaXRlU3RyaW5nKG1BY3Rpb24pOworICAgICAgICAgICAgVGV4dFV0aWxzLndyaXRlVG9QYXJjZWwobU5hbWUsIGRlc3QsIGZsYWdzKTsKKyAgICAgICAgICAgIGRlc3Qud3JpdGVJbnQobUljb24pOworICAgICAgICAgICAgZGVzdC53cml0ZUJ1bmRsZShtRXh0cmFzKTsKKyAgICAgICAgfQorCisgICAgICAgIEBPdmVycmlkZQorICAgICAgICBwdWJsaWMgaW50IGRlc2NyaWJlQ29udGVudHMoKSB7CisgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgfQorCisgICAgICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgUGFyY2VsYWJsZS5DcmVhdG9yPFBsYXliYWNrU3RhdGUuQ3VzdG9tQWN0aW9uPiBDUkVBVE9SCisgICAgICAgICAgICAgICAgPSBuZXcgUGFyY2VsYWJsZS5DcmVhdG9yPFBsYXliYWNrU3RhdGUuQ3VzdG9tQWN0aW9uPigpIHsKKworICAgICAgICAgICAgQE92ZXJyaWRlCisgICAgICAgICAgICBwdWJsaWMgUGxheWJhY2tTdGF0ZS5DdXN0b21BY3Rpb24gY3JlYXRlRnJvbVBhcmNlbChQYXJjZWwgcCkgeworICAgICAgICAgICAgICAgIHJldHVybiBuZXcgUGxheWJhY2tTdGF0ZS5DdXN0b21BY3Rpb24ocCk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIEBPdmVycmlkZQorICAgICAgICAgICAgcHVibGljIFBsYXliYWNrU3RhdGUuQ3VzdG9tQWN0aW9uW10gbmV3QXJyYXkoaW50IHNpemUpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gbmV3IFBsYXliYWNrU3RhdGUuQ3VzdG9tQWN0aW9uW3NpemVdOworICAgICAgICAgICAgfQorICAgICAgICB9OworCisgICAgICAgIC8qKgorICAgICAgICAgKiBSZXR1cm5zIHRoZSBhY3Rpb24gb2YgdGhlIHtAbGluayBDdXN0b21BY3Rpb259LgorICAgICAgICAgKgorICAgICAgICAgKiBAcmV0dXJuIFRoZSBhY3Rpb24gb2YgdGhlIHtAbGluayBDdXN0b21BY3Rpb259LgorICAgICAgICAgKi8KKyAgICAgICAgcHVibGljIFN0cmluZyBnZXRBY3Rpb24oKSB7CisgICAgICAgICAgICByZXR1cm4gbUFjdGlvbjsKKyAgICAgICAgfQorCisgICAgICAgIC8qKgorICAgICAgICAgKiBSZXR1cm5zIHRoZSBkaXNwbGF5IG5hbWUgb2YgdGhpcyBhY3Rpb24uIGUuZy4gIkZhdm9yaXRlIgorICAgICAgICAgKgorICAgICAgICAgKiBAcmV0dXJuIFRoZSBkaXNwbGF5IG5hbWUgb2YgdGhpcyB7QGxpbmsgQ3VzdG9tQWN0aW9ufS4KKyAgICAgICAgICovCisgICAgICAgIHB1YmxpYyBDaGFyU2VxdWVuY2UgZ2V0TmFtZSgpIHsKKyAgICAgICAgICAgIHJldHVybiBtTmFtZTsKKyAgICAgICAgfQorCisgICAgICAgIC8qKgorICAgICAgICAgKiBSZXR1cm5zIHRoZSByZXNvdXJjZSBpZCBvZiB0aGUgaWNvbiBpbiB0aGUge0BsaW5rIE1lZGlhU2Vzc2lvbiBNZWRpYVNlc3Npb24nc30gcGFja2FnZS4KKyAgICAgICAgICoKKyAgICAgICAgICogQHJldHVybiBUaGUgcmVzb3VyY2UgaWQgb2YgdGhlIGljb24gaW4gdGhlIHtAbGluayBNZWRpYVNlc3Npb24gTWVkaWFTZXNzaW9uJ3N9IHBhY2thZ2UuCisgICAgICAgICAqLworICAgICAgICBwdWJsaWMgaW50IGdldEljb24oKSB7CisgICAgICAgICAgICByZXR1cm4gbUljb247CisgICAgICAgIH0KKworICAgICAgICAvKioKKyAgICAgICAgICogUmV0dXJucyBleHRyYXMgd2hpY2ggcHJvdmlkZSBhZGRpdGlvbmFsIGFwcGxpY2F0aW9uLXNwZWNpZmljIGluZm9ybWF0aW9uIGFib3V0IHRoZQorICAgICAgICAgKiBhY3Rpb24sIG9yIG51bGwgaWYgbm9uZS4gVGhlc2UgYXJndW1lbnRzIGFyZSBtZWFudCB0byBiZSBjb25zdW1lZCBieSBhCisgICAgICAgICAqIHtAbGluayBNZWRpYUNvbnRyb2xsZXJ9IGlmIGl0IGtub3dzIGhvdyB0byBoYW5kbGUgdGhlbS4KKyAgICAgICAgICoKKyAgICAgICAgICogQHJldHVybiBPcHRpb25hbCBhcmd1bWVudHMgZm9yIHRoZSB7QGxpbmsgQ3VzdG9tQWN0aW9ufS4KKyAgICAgICAgICovCisgICAgICAgIHB1YmxpYyBCdW5kbGUgZ2V0RXh0cmFzKCkgeworICAgICAgICAgICAgcmV0dXJuIG1FeHRyYXM7CisgICAgICAgIH0KKworICAgICAgICBAT3ZlcnJpZGUKKyAgICAgICAgcHVibGljIFN0cmluZyB0b1N0cmluZygpIHsKKyAgICAgICAgICAgIHJldHVybiAiQWN0aW9uOiIgKworICAgICAgICAgICAgICAgICAgICAibU5hbWU9JyIgKyBtTmFtZSArCisgICAgICAgICAgICAgICAgICAgICIsIG1JY29uPSIgKyBtSWNvbiArCisgICAgICAgICAgICAgICAgICAgICIsIG1FeHRyYXM9IiArIG1FeHRyYXM7CisgICAgICAgIH0KKworICAgICAgICAvKioKKyAgICAgICAgICogQnVpbGRlciBmb3Ige0BsaW5rIEN1c3RvbUFjdGlvbn0gb2JqZWN0cy4KKyAgICAgICAgICovCisgICAgICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgY2xhc3MgQnVpbGRlciB7CisgICAgICAgICAgICBwcml2YXRlIGZpbmFsIFN0cmluZyBtQWN0aW9uOworICAgICAgICAgICAgcHJpdmF0ZSBmaW5hbCBDaGFyU2VxdWVuY2UgbU5hbWU7CisgICAgICAgICAgICBwcml2YXRlIGZpbmFsIGludCBtSWNvbjsKKyAgICAgICAgICAgIHByaXZhdGUgQnVuZGxlIG1FeHRyYXM7CisKKyAgICAgICAgICAgIC8qKgorICAgICAgICAgICAgICogQ3JlYXRlcyBhIHtAbGluayBDdXN0b21BY3Rpb259IGJ1aWxkZXIgd2l0aCB0aGUgaWQsIG5hbWUsIGFuZCBpY29uIHNldC4KKyAgICAgICAgICAgICAqCisgICAgICAgICAgICAgKiBAcGFyYW0gYWN0aW9uIFRoZSBhY3Rpb24gb2YgdGhlIHtAbGluayBDdXN0b21BY3Rpb259LgorICAgICAgICAgICAgICogQHBhcmFtIG5hbWUgVGhlIGRpc3BsYXkgbmFtZSBvZiB0aGUge0BsaW5rIEN1c3RvbUFjdGlvbn0uIFRoaXMgbmFtZSB3aWxsIGJlIGRpc3BsYXllZAorICAgICAgICAgICAgICogICAgICAgICAgICAgYWxvbmcgc2lkZSB0aGUgYWN0aW9uIGlmIHRoZSBVSSBzdXBwb3J0cyBpdC4KKyAgICAgICAgICAgICAqIEBwYXJhbSBpY29uIFRoZSBpY29uIHJlc291cmNlIGlkIG9mIHRoZSB7QGxpbmsgQ3VzdG9tQWN0aW9ufS4gVGhpcyByZXNvdXJjZSBpZAorICAgICAgICAgICAgICogICAgICAgICAgICAgbXVzdCBiZSBpbiB0aGUgc2FtZSBwYWNrYWdlIGFzIHRoZSB7QGxpbmsgTWVkaWFTZXNzaW9ufS4gSXQgd2lsbCBiZQorICAgICAgICAgICAgICogICAgICAgICAgICAgZGlzcGxheWVkIHdpdGggdGhlIGN1c3RvbSBhY3Rpb24gaWYgdGhlIFVJIHN1cHBvcnRzIGl0LgorICAgICAgICAgICAgICovCisgICAgICAgICAgICBwdWJsaWMgQnVpbGRlcihTdHJpbmcgYWN0aW9uLCBDaGFyU2VxdWVuY2UgbmFtZSwgQERyYXdhYmxlUmVzIGludCBpY29uKSB7CisgICAgICAgICAgICAgICAgaWYgKFRleHRVdGlscy5pc0VtcHR5KGFjdGlvbikpIHsKKyAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbigKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAiWW91IG11c3Qgc3BlY2lmeSBhbiBhY3Rpb24gdG8gYnVpbGQgYSBDdXN0b21BY3Rpb24uIik7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGlmIChUZXh0VXRpbHMuaXNFbXB0eShuYW1lKSkgeworICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICJZb3UgbXVzdCBzcGVjaWZ5IGEgbmFtZSB0byBidWlsZCBhIEN1c3RvbUFjdGlvbi4iKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgaWYgKGljb24gPT0gMCkgeworICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICJZb3UgbXVzdCBzcGVjaWZ5IGFuIGljb24gcmVzb3VyY2UgaWQgdG8gYnVpbGQgYSBDdXN0b21BY3Rpb24uIik7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIG1BY3Rpb24gPSBhY3Rpb247CisgICAgICAgICAgICAgICAgbU5hbWUgPSBuYW1lOworICAgICAgICAgICAgICAgIG1JY29uID0gaWNvbjsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgLyoqCisgICAgICAgICAgICAgKiBTZXQgb3B0aW9uYWwgZXh0cmFzIGZvciB0aGUge0BsaW5rIEN1c3RvbUFjdGlvbn0uIFRoZXNlIGV4dHJhcyBhcmUgbWVhbnQgdG8gYmUKKyAgICAgICAgICAgICAqIGNvbnN1bWVkIGJ5IGEge0BsaW5rIE1lZGlhQ29udHJvbGxlcn0gaWYgaXQga25vd3MgaG93IHRvIGhhbmRsZSB0aGVtLgorICAgICAgICAgICAgICogS2V5cyBzaG91bGQgYmUgZnVsbHkgcXVhbGlmaWVkIChlLmcuICJjb20uZXhhbXBsZS5NWV9BUkciKSB0byBhdm9pZCBjb2xsaXNpb25zLgorICAgICAgICAgICAgICoKKyAgICAgICAgICAgICAqIEBwYXJhbSBleHRyYXMgT3B0aW9uYWwgZXh0cmFzIGZvciB0aGUge0BsaW5rIEN1c3RvbUFjdGlvbn0uCisgICAgICAgICAgICAgKiBAcmV0dXJuIHRoaXMuCisgICAgICAgICAgICAgKi8KKyAgICAgICAgICAgIHB1YmxpYyBCdWlsZGVyIHNldEV4dHJhcyhCdW5kbGUgZXh0cmFzKSB7CisgICAgICAgICAgICAgICAgbUV4dHJhcyA9IGV4dHJhczsKKyAgICAgICAgICAgICAgICByZXR1cm4gdGhpczsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgLyoqCisgICAgICAgICAgICAgKiBCdWlsZCBhbmQgcmV0dXJuIHRoZSB7QGxpbmsgQ3VzdG9tQWN0aW9ufSBpbnN0YW5jZSB3aXRoIHRoZSBzcGVjaWZpZWQgdmFsdWVzLgorICAgICAgICAgICAgICoKKyAgICAgICAgICAgICAqIEByZXR1cm4gQSBuZXcge0BsaW5rIEN1c3RvbUFjdGlvbn0gaW5zdGFuY2UuCisgICAgICAgICAgICAgKi8KKyAgICAgICAgICAgIHB1YmxpYyBDdXN0b21BY3Rpb24gYnVpbGQoKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBDdXN0b21BY3Rpb24obUFjdGlvbiwgbU5hbWUsIG1JY29uLCBtRXh0cmFzKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKworICAgIC8qKgorICAgICAqIEJ1aWxkZXIgZm9yIHtAbGluayBQbGF5YmFja1N0YXRlfSBvYmplY3RzLgorICAgICAqLworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgY2xhc3MgQnVpbGRlciB7CisgICAgICAgIHByaXZhdGUgZmluYWwgTGlzdDxQbGF5YmFja1N0YXRlLkN1c3RvbUFjdGlvbj4gbUN1c3RvbUFjdGlvbnMgPSBuZXcgQXJyYXlMaXN0PD4oKTsKKworICAgICAgICBwcml2YXRlIGludCBtU3RhdGU7CisgICAgICAgIHByaXZhdGUgbG9uZyBtUG9zaXRpb247CisgICAgICAgIHByaXZhdGUgbG9uZyBtQnVmZmVyZWRQb3NpdGlvbjsKKyAgICAgICAgcHJpdmF0ZSBmbG9hdCBtU3BlZWQ7CisgICAgICAgIHByaXZhdGUgbG9uZyBtQWN0aW9uczsKKyAgICAgICAgcHJpdmF0ZSBDaGFyU2VxdWVuY2UgbUVycm9yTWVzc2FnZTsKKyAgICAgICAgcHJpdmF0ZSBsb25nIG1VcGRhdGVUaW1lOworICAgICAgICBwcml2YXRlIGxvbmcgbUFjdGl2ZUl0ZW1JZCA9IE1lZGlhU2Vzc2lvbi5RdWV1ZUl0ZW0uVU5LTk9XTl9JRDsKKyAgICAgICAgcHJpdmF0ZSBCdW5kbGUgbUV4dHJhczsKKworICAgICAgICAvKioKKyAgICAgICAgICogQ3JlYXRlcyBhbiBpbml0aWFsbHkgZW1wdHkgc3RhdGUgYnVpbGRlci4KKyAgICAgICAgICovCisgICAgICAgIHB1YmxpYyBCdWlsZGVyKCkgeworICAgICAgICB9CisKKyAgICAgICAgLyoqCisgICAgICAgICAqIENyZWF0ZXMgYSBidWlsZGVyIHdpdGggdGhlIHNhbWUgaW5pdGlhbCB2YWx1ZXMgYXMgdGhvc2UgaW4gdGhlIGZyb20KKyAgICAgICAgICogc3RhdGUuCisgICAgICAgICAqCisgICAgICAgICAqIEBwYXJhbSBmcm9tIFRoZSBzdGF0ZSB0byB1c2UgZm9yIGluaXRpYWxpemluZyB0aGUgYnVpbGRlci4KKyAgICAgICAgICovCisgICAgICAgIHB1YmxpYyBCdWlsZGVyKFBsYXliYWNrU3RhdGUgZnJvbSkgeworICAgICAgICAgICAgaWYgKGZyb20gPT0gbnVsbCkgeworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIG1TdGF0ZSA9IGZyb20ubVN0YXRlOworICAgICAgICAgICAgbVBvc2l0aW9uID0gZnJvbS5tUG9zaXRpb247CisgICAgICAgICAgICBtQnVmZmVyZWRQb3NpdGlvbiA9IGZyb20ubUJ1ZmZlcmVkUG9zaXRpb247CisgICAgICAgICAgICBtU3BlZWQgPSBmcm9tLm1TcGVlZDsKKyAgICAgICAgICAgIG1BY3Rpb25zID0gZnJvbS5tQWN0aW9uczsKKyAgICAgICAgICAgIGlmIChmcm9tLm1DdXN0b21BY3Rpb25zICE9IG51bGwpIHsKKyAgICAgICAgICAgICAgICBtQ3VzdG9tQWN0aW9ucy5hZGRBbGwoZnJvbS5tQ3VzdG9tQWN0aW9ucyk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBtRXJyb3JNZXNzYWdlID0gZnJvbS5tRXJyb3JNZXNzYWdlOworICAgICAgICAgICAgbVVwZGF0ZVRpbWUgPSBmcm9tLm1VcGRhdGVUaW1lOworICAgICAgICAgICAgbUFjdGl2ZUl0ZW1JZCA9IGZyb20ubUFjdGl2ZUl0ZW1JZDsKKyAgICAgICAgICAgIG1FeHRyYXMgPSBmcm9tLm1FeHRyYXM7CisgICAgICAgIH0KKworICAgICAgICAvKioKKyAgICAgICAgICogU2V0IHRoZSBjdXJyZW50IHN0YXRlIG9mIHBsYXliYWNrLgorICAgICAgICAgKiA8cD4KKyAgICAgICAgICogVGhlIHBvc2l0aW9uIG11c3QgYmUgaW4gbXMgYW5kIGluZGljYXRlcyB0aGUgY3VycmVudCBwbGF5YmFjaworICAgICAgICAgKiBwb3NpdGlvbiB3aXRoaW4gdGhlIGl0ZW0uIElmIHRoZSBwb3NpdGlvbiBpcyB1bmtub3duIHVzZQorICAgICAgICAgKiB7QGxpbmsgI1BMQVlCQUNLX1BPU0lUSU9OX1VOS05PV059LiBXaGVuIG5vdCB1c2luZyBhbiB1bmtub3duCisgICAgICAgICAqIHBvc2l0aW9uIHRoZSB0aW1lIGF0IHdoaWNoIHRoZSBwb3NpdGlvbiB3YXMgdXBkYXRlZCBtdXN0IGJlIHByb3ZpZGVkLgorICAgICAgICAgKiBJdCBpcyBva2F5IHRvIHVzZSB7QGxpbmsgU3lzdGVtQ2xvY2sjZWxhcHNlZFJlYWx0aW1lKCl9IGlmIHRoZQorICAgICAgICAgKiBjdXJyZW50IHBvc2l0aW9uIHdhcyBqdXN0IHJldHJpZXZlZC4KKyAgICAgICAgICogPHA+CisgICAgICAgICAqIFRoZSBzcGVlZCBpcyBhIG11bHRpcGxlIG9mIG5vcm1hbCBwbGF5YmFjayBhbmQgc2hvdWxkIGJlIDAgd2hlbgorICAgICAgICAgKiBwYXVzZWQgYW5kIG5lZ2F0aXZlIHdoZW4gcmV3aW5kaW5nLiBOb3JtYWwgcGxheWJhY2sgc3BlZWQgaXMgMS4wLgorICAgICAgICAgKiA8cD4KKyAgICAgICAgICogVGhlIHN0YXRlIG11c3QgYmUgb25lIG9mIHRoZSBmb2xsb3dpbmc6CisgICAgICAgICAqIDx1bD4KKyAgICAgICAgICogPGxpPiB7QGxpbmsgUGxheWJhY2tTdGF0ZSNTVEFURV9OT05FfTwvbGk+CisgICAgICAgICAqIDxsaT4ge0BsaW5rIFBsYXliYWNrU3RhdGUjU1RBVEVfU1RPUFBFRH08L2xpPgorICAgICAgICAgKiA8bGk+IHtAbGluayBQbGF5YmFja1N0YXRlI1NUQVRFX1BMQVlJTkd9PC9saT4KKyAgICAgICAgICogPGxpPiB7QGxpbmsgUGxheWJhY2tTdGF0ZSNTVEFURV9QQVVTRUR9PC9saT4KKyAgICAgICAgICogPGxpPiB7QGxpbmsgUGxheWJhY2tTdGF0ZSNTVEFURV9GQVNUX0ZPUldBUkRJTkd9PC9saT4KKyAgICAgICAgICogPGxpPiB7QGxpbmsgUGxheWJhY2tTdGF0ZSNTVEFURV9SRVdJTkRJTkd9PC9saT4KKyAgICAgICAgICogPGxpPiB7QGxpbmsgUGxheWJhY2tTdGF0ZSNTVEFURV9CVUZGRVJJTkd9PC9saT4KKyAgICAgICAgICogPGxpPiB7QGxpbmsgUGxheWJhY2tTdGF0ZSNTVEFURV9FUlJPUn08L2xpPgorICAgICAgICAgKiA8bGk+IHtAbGluayBQbGF5YmFja1N0YXRlI1NUQVRFX0NPTk5FQ1RJTkd9PC9saT4KKyAgICAgICAgICogPGxpPiB7QGxpbmsgUGxheWJhY2tTdGF0ZSNTVEFURV9TS0lQUElOR19UT19QUkVWSU9VU308L2xpPgorICAgICAgICAgKiA8bGk+IHtAbGluayBQbGF5YmFja1N0YXRlI1NUQVRFX1NLSVBQSU5HX1RPX05FWFR9PC9saT4KKyAgICAgICAgICogPGxpPiB7QGxpbmsgUGxheWJhY2tTdGF0ZSNTVEFURV9TS0lQUElOR19UT19RVUVVRV9JVEVNfTwvbGk+CisgICAgICAgICAqIDwvdWw+CisgICAgICAgICAqCisgICAgICAgICAqIEBwYXJhbSBzdGF0ZSBUaGUgY3VycmVudCBzdGF0ZSBvZiBwbGF5YmFjay4KKyAgICAgICAgICogQHBhcmFtIHBvc2l0aW9uIFRoZSBwb3NpdGlvbiBpbiB0aGUgY3VycmVudCBpdGVtIGluIG1zLgorICAgICAgICAgKiBAcGFyYW0gcGxheWJhY2tTcGVlZCBUaGUgY3VycmVudCBzcGVlZCBvZiBwbGF5YmFjayBhcyBhIG11bHRpcGxlIG9mCisgICAgICAgICAqICAgICAgICAgICAgbm9ybWFsIHBsYXliYWNrLgorICAgICAgICAgKiBAcGFyYW0gdXBkYXRlVGltZSBUaGUgdGltZSBpbiB0aGUge0BsaW5rIFN5c3RlbUNsb2NrI2VsYXBzZWRSZWFsdGltZX0KKyAgICAgICAgICogICAgICAgICAgICB0aW1lYmFzZSB0aGF0IHRoZSBwb3NpdGlvbiB3YXMgdXBkYXRlZCBhdC4KKyAgICAgICAgICogQHJldHVybiB0aGlzCisgICAgICAgICAqLworICAgICAgICBwdWJsaWMgQnVpbGRlciBzZXRTdGF0ZShAU3RhdGUgaW50IHN0YXRlLCBsb25nIHBvc2l0aW9uLCBmbG9hdCBwbGF5YmFja1NwZWVkLAorICAgICAgICAgICAgICAgIGxvbmcgdXBkYXRlVGltZSkgeworICAgICAgICAgICAgbVN0YXRlID0gc3RhdGU7CisgICAgICAgICAgICBtUG9zaXRpb24gPSBwb3NpdGlvbjsKKyAgICAgICAgICAgIG1VcGRhdGVUaW1lID0gdXBkYXRlVGltZTsKKyAgICAgICAgICAgIG1TcGVlZCA9IHBsYXliYWNrU3BlZWQ7CisgICAgICAgICAgICByZXR1cm4gdGhpczsKKyAgICAgICAgfQorCisgICAgICAgIC8qKgorICAgICAgICAgKiBTZXQgdGhlIGN1cnJlbnQgc3RhdGUgb2YgcGxheWJhY2suCisgICAgICAgICAqIDxwPgorICAgICAgICAgKiBUaGUgcG9zaXRpb24gbXVzdCBiZSBpbiBtcyBhbmQgaW5kaWNhdGVzIHRoZSBjdXJyZW50IHBsYXliYWNrCisgICAgICAgICAqIHBvc2l0aW9uIHdpdGhpbiB0aGUgaXRlbS4gSWYgdGhlIHBvc2l0aW9uIGlzIHVua25vd24gdXNlCisgICAgICAgICAqIHtAbGluayAjUExBWUJBQ0tfUE9TSVRJT05fVU5LTk9XTn0uIFRoZSB1cGRhdGUgdGltZSB3aWxsIGJlIHNldCB0bworICAgICAgICAgKiB0aGUgY3VycmVudCB7QGxpbmsgU3lzdGVtQ2xvY2sjZWxhcHNlZFJlYWx0aW1lKCl9LgorICAgICAgICAgKiA8cD4KKyAgICAgICAgICogVGhlIHNwZWVkIGlzIGEgbXVsdGlwbGUgb2Ygbm9ybWFsIHBsYXliYWNrIGFuZCBzaG91bGQgYmUgMCB3aGVuCisgICAgICAgICAqIHBhdXNlZCBhbmQgbmVnYXRpdmUgd2hlbiByZXdpbmRpbmcuIE5vcm1hbCBwbGF5YmFjayBzcGVlZCBpcyAxLjAuCisgICAgICAgICAqIDxwPgorICAgICAgICAgKiBUaGUgc3RhdGUgbXVzdCBiZSBvbmUgb2YgdGhlIGZvbGxvd2luZzoKKyAgICAgICAgICogPHVsPgorICAgICAgICAgKiA8bGk+IHtAbGluayBQbGF5YmFja1N0YXRlI1NUQVRFX05PTkV9PC9saT4KKyAgICAgICAgICogPGxpPiB7QGxpbmsgUGxheWJhY2tTdGF0ZSNTVEFURV9TVE9QUEVEfTwvbGk+CisgICAgICAgICAqIDxsaT4ge0BsaW5rIFBsYXliYWNrU3RhdGUjU1RBVEVfUExBWUlOR308L2xpPgorICAgICAgICAgKiA8bGk+IHtAbGluayBQbGF5YmFja1N0YXRlI1NUQVRFX1BBVVNFRH08L2xpPgorICAgICAgICAgKiA8bGk+IHtAbGluayBQbGF5YmFja1N0YXRlI1NUQVRFX0ZBU1RfRk9SV0FSRElOR308L2xpPgorICAgICAgICAgKiA8bGk+IHtAbGluayBQbGF5YmFja1N0YXRlI1NUQVRFX1JFV0lORElOR308L2xpPgorICAgICAgICAgKiA8bGk+IHtAbGluayBQbGF5YmFja1N0YXRlI1NUQVRFX0JVRkZFUklOR308L2xpPgorICAgICAgICAgKiA8bGk+IHtAbGluayBQbGF5YmFja1N0YXRlI1NUQVRFX0VSUk9SfTwvbGk+CisgICAgICAgICAqIDxsaT4ge0BsaW5rIFBsYXliYWNrU3RhdGUjU1RBVEVfQ09OTkVDVElOR308L2xpPgorICAgICAgICAgKiA8bGk+IHtAbGluayBQbGF5YmFja1N0YXRlI1NUQVRFX1NLSVBQSU5HX1RPX1BSRVZJT1VTfTwvbGk+CisgICAgICAgICAqIDxsaT4ge0BsaW5rIFBsYXliYWNrU3RhdGUjU1RBVEVfU0tJUFBJTkdfVE9fTkVYVH08L2xpPgorICAgICAgICAgKiA8bGk+IHtAbGluayBQbGF5YmFja1N0YXRlI1NUQVRFX1NLSVBQSU5HX1RPX1FVRVVFX0lURU19PC9saT4KKyAgICAgICAgICogPC91bD4KKyAgICAgICAgICoKKyAgICAgICAgICogQHBhcmFtIHN0YXRlIFRoZSBjdXJyZW50IHN0YXRlIG9mIHBsYXliYWNrLgorICAgICAgICAgKiBAcGFyYW0gcG9zaXRpb24gVGhlIHBvc2l0aW9uIGluIHRoZSBjdXJyZW50IGl0ZW0gaW4gbXMuCisgICAgICAgICAqIEBwYXJhbSBwbGF5YmFja1NwZWVkIFRoZSBjdXJyZW50IHNwZWVkIG9mIHBsYXliYWNrIGFzIGEgbXVsdGlwbGUgb2YKKyAgICAgICAgICogICAgICAgICAgICBub3JtYWwgcGxheWJhY2suCisgICAgICAgICAqIEByZXR1cm4gdGhpcworICAgICAgICAgKi8KKyAgICAgICAgcHVibGljIEJ1aWxkZXIgc2V0U3RhdGUoQFN0YXRlIGludCBzdGF0ZSwgbG9uZyBwb3NpdGlvbiwgZmxvYXQgcGxheWJhY2tTcGVlZCkgeworICAgICAgICAgICAgcmV0dXJuIHNldFN0YXRlKHN0YXRlLCBwb3NpdGlvbiwgcGxheWJhY2tTcGVlZCwgU3lzdGVtQ2xvY2suZWxhcHNlZFJlYWx0aW1lKCkpOworICAgICAgICB9CisKKyAgICAgICAgLyoqCisgICAgICAgICAqIFNldCB0aGUgY3VycmVudCBhY3Rpb25zIGF2YWlsYWJsZSBvbiB0aGlzIHNlc3Npb24uIFRoaXMgc2hvdWxkIHVzZSBhCisgICAgICAgICAqIGJpdG1hc2sgb2YgcG9zc2libGUgYWN0aW9ucy4KKyAgICAgICAgICogPHVsPgorICAgICAgICAgKiA8bGk+IHtAbGluayBQbGF5YmFja1N0YXRlI0FDVElPTl9TS0lQX1RPX1BSRVZJT1VTfTwvbGk+CisgICAgICAgICAqIDxsaT4ge0BsaW5rIFBsYXliYWNrU3RhdGUjQUNUSU9OX1JFV0lORH08L2xpPgorICAgICAgICAgKiA8bGk+IHtAbGluayBQbGF5YmFja1N0YXRlI0FDVElPTl9QTEFZfTwvbGk+CisgICAgICAgICAqIDxsaT4ge0BsaW5rIFBsYXliYWNrU3RhdGUjQUNUSU9OX1BBVVNFfTwvbGk+CisgICAgICAgICAqIDxsaT4ge0BsaW5rIFBsYXliYWNrU3RhdGUjQUNUSU9OX1NUT1B9PC9saT4KKyAgICAgICAgICogPGxpPiB7QGxpbmsgUGxheWJhY2tTdGF0ZSNBQ1RJT05fRkFTVF9GT1JXQVJEfTwvbGk+CisgICAgICAgICAqIDxsaT4ge0BsaW5rIFBsYXliYWNrU3RhdGUjQUNUSU9OX1NLSVBfVE9fTkVYVH08L2xpPgorICAgICAgICAgKiA8bGk+IHtAbGluayBQbGF5YmFja1N0YXRlI0FDVElPTl9TRUVLX1RPfTwvbGk+CisgICAgICAgICAqIDxsaT4ge0BsaW5rIFBsYXliYWNrU3RhdGUjQUNUSU9OX1NFVF9SQVRJTkd9PC9saT4KKyAgICAgICAgICogPGxpPiB7QGxpbmsgUGxheWJhY2tTdGF0ZSNBQ1RJT05fUExBWV9QQVVTRX08L2xpPgorICAgICAgICAgKiA8bGk+IHtAbGluayBQbGF5YmFja1N0YXRlI0FDVElPTl9QTEFZX0ZST01fTUVESUFfSUR9PC9saT4KKyAgICAgICAgICogPGxpPiB7QGxpbmsgUGxheWJhY2tTdGF0ZSNBQ1RJT05fUExBWV9GUk9NX1NFQVJDSH08L2xpPgorICAgICAgICAgKiA8bGk+IHtAbGluayBQbGF5YmFja1N0YXRlI0FDVElPTl9TS0lQX1RPX1FVRVVFX0lURU19PC9saT4KKyAgICAgICAgICogPGxpPiB7QGxpbmsgUGxheWJhY2tTdGF0ZSNBQ1RJT05fUExBWV9GUk9NX1VSSX08L2xpPgorICAgICAgICAgKiA8bGk+IHtAbGluayBQbGF5YmFja1N0YXRlI0FDVElPTl9QUkVQQVJFfTwvbGk+CisgICAgICAgICAqIDxsaT4ge0BsaW5rIFBsYXliYWNrU3RhdGUjQUNUSU9OX1BSRVBBUkVfRlJPTV9NRURJQV9JRH08L2xpPgorICAgICAgICAgKiA8bGk+IHtAbGluayBQbGF5YmFja1N0YXRlI0FDVElPTl9QUkVQQVJFX0ZST01fU0VBUkNIfTwvbGk+CisgICAgICAgICAqIDxsaT4ge0BsaW5rIFBsYXliYWNrU3RhdGUjQUNUSU9OX1BSRVBBUkVfRlJPTV9VUkl9PC9saT4KKyAgICAgICAgICogPC91bD4KKyAgICAgICAgICoKKyAgICAgICAgICogQHBhcmFtIGFjdGlvbnMgVGhlIHNldCBvZiBhY3Rpb25zIGFsbG93ZWQuCisgICAgICAgICAqIEByZXR1cm4gdGhpcworICAgICAgICAgKi8KKyAgICAgICAgcHVibGljIEJ1aWxkZXIgc2V0QWN0aW9ucyhAQWN0aW9ucyBsb25nIGFjdGlvbnMpIHsKKyAgICAgICAgICAgIG1BY3Rpb25zID0gYWN0aW9uczsKKyAgICAgICAgICAgIHJldHVybiB0aGlzOworICAgICAgICB9CisKKyAgICAgICAgLyoqCisgICAgICAgICAqIEFkZCBhIGN1c3RvbSBhY3Rpb24gdG8gdGhlIHBsYXliYWNrIHN0YXRlLiBBY3Rpb25zIGNhbiBiZSB1c2VkIHRvCisgICAgICAgICAqIGV4cG9zZSBhZGRpdGlvbmFsIGZ1bmN0aW9uYWxpdHkgdG8ge0BsaW5rIE1lZGlhQ29udHJvbGxlcgorICAgICAgICAgKiBNZWRpYUNvbnRyb2xsZXJzfSBiZXlvbmQgd2hhdCBpcyBvZmZlcmVkIGJ5IHRoZSBzdGFuZGFyZCB0cmFuc3BvcnQKKyAgICAgICAgICogY29udHJvbHMuCisgICAgICAgICAqIDxwPgorICAgICAgICAgKiBlLmcuIHN0YXJ0IGEgcmFkaW8gc3RhdGlvbiBiYXNlZCBvbiB0aGUgY3VycmVudCBpdGVtIG9yIHNraXAgYWhlYWQgYnkKKyAgICAgICAgICogMzAgc2Vjb25kcy4KKyAgICAgICAgICoKKyAgICAgICAgICogQHBhcmFtIGFjdGlvbiBBbiBpZGVudGlmaWVyIGZvciB0aGlzIGFjdGlvbi4gSXQgY2FuIGJlIHNlbnQgYmFjayB0bworICAgICAgICAgKiAgICAgICAgICAgIHRoZSB7QGxpbmsgTWVkaWFTZXNzaW9ufSB0aHJvdWdoCisgICAgICAgICAqICAgICAgICAgICAge0BsaW5rIE1lZGlhQ29udHJvbGxlci5UcmFuc3BvcnRDb250cm9scyNzZW5kQ3VzdG9tQWN0aW9uKFN0cmluZywgQnVuZGxlKX0uCisgICAgICAgICAqIEBwYXJhbSBuYW1lIFRoZSBkaXNwbGF5IG5hbWUgZm9yIHRoZSBhY3Rpb24uIElmIHRleHQgaXMgc2hvd24gd2l0aAorICAgICAgICAgKiAgICAgICAgICAgIHRoZSBhY3Rpb24gb3IgdXNlZCBmb3IgYWNjZXNzaWJpbGl0eSwgdGhpcyBpcyB3aGF0IHNob3VsZAorICAgICAgICAgKiAgICAgICAgICAgIGJlIHVzZWQuCisgICAgICAgICAqIEBwYXJhbSBpY29uIFRoZSByZXNvdXJjZSBhY3Rpb24gb2YgdGhlIGljb24gdGhhdCBzaG91bGQgYmUgZGlzcGxheWVkCisgICAgICAgICAqICAgICAgICAgICAgZm9yIHRoZSBhY3Rpb24uIFRoZSByZXNvdXJjZSBzaG91bGQgYmUgaW4gdGhlIHBhY2thZ2Ugb2YKKyAgICAgICAgICogICAgICAgICAgICB0aGUge0BsaW5rIE1lZGlhU2Vzc2lvbn0uCisgICAgICAgICAqIEByZXR1cm4gdGhpcworICAgICAgICAgKi8KKyAgICAgICAgcHVibGljIEJ1aWxkZXIgYWRkQ3VzdG9tQWN0aW9uKFN0cmluZyBhY3Rpb24sIFN0cmluZyBuYW1lLCBpbnQgaWNvbikgeworICAgICAgICAgICAgcmV0dXJuIGFkZEN1c3RvbUFjdGlvbihuZXcgUGxheWJhY2tTdGF0ZS5DdXN0b21BY3Rpb24oYWN0aW9uLCBuYW1lLCBpY29uLCBudWxsKSk7CisgICAgICAgIH0KKworICAgICAgICAvKioKKyAgICAgICAgICogQWRkIGEgY3VzdG9tIGFjdGlvbiB0byB0aGUgcGxheWJhY2sgc3RhdGUuIEFjdGlvbnMgY2FuIGJlIHVzZWQgdG8gZXhwb3NlIGFkZGl0aW9uYWwKKyAgICAgICAgICogZnVuY3Rpb25hbGl0eSB0byB7QGxpbmsgTWVkaWFDb250cm9sbGVyIE1lZGlhQ29udHJvbGxlcnN9IGJleW9uZCB3aGF0IGlzIG9mZmVyZWQgYnkgdGhlCisgICAgICAgICAqIHN0YW5kYXJkIHRyYW5zcG9ydCBjb250cm9scy4KKyAgICAgICAgICogPHA+CisgICAgICAgICAqIEFuIGV4YW1wbGUgb2YgYW4gYWN0aW9uIHdvdWxkIGJlIHRvIHN0YXJ0IGEgcmFkaW8gc3RhdGlvbiBiYXNlZCBvbiB0aGUgY3VycmVudCBpdGVtCisgICAgICAgICAqIG9yIHRvIHNraXAgYWhlYWQgYnkgMzAgc2Vjb25kcy4KKyAgICAgICAgICoKKyAgICAgICAgICogQHBhcmFtIGN1c3RvbUFjdGlvbiBUaGUgY3VzdG9tIGFjdGlvbiB0byBhZGQgdG8gdGhlIHtAbGluayBQbGF5YmFja1N0YXRlfS4KKyAgICAgICAgICogQHJldHVybiB0aGlzCisgICAgICAgICAqLworICAgICAgICBwdWJsaWMgQnVpbGRlciBhZGRDdXN0b21BY3Rpb24oUGxheWJhY2tTdGF0ZS5DdXN0b21BY3Rpb24gY3VzdG9tQWN0aW9uKSB7CisgICAgICAgICAgICBpZiAoY3VzdG9tQWN0aW9uID09IG51bGwpIHsKKyAgICAgICAgICAgICAgICB0aHJvdyBuZXcgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKAorICAgICAgICAgICAgICAgICAgICAgICAgIllvdSBtYXkgbm90IGFkZCBhIG51bGwgQ3VzdG9tQWN0aW9uIHRvIFBsYXliYWNrU3RhdGUuIik7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBtQ3VzdG9tQWN0aW9ucy5hZGQoY3VzdG9tQWN0aW9uKTsKKyAgICAgICAgICAgIHJldHVybiB0aGlzOworICAgICAgICB9CisKKyAgICAgICAgLyoqCisgICAgICAgICAqIFNldCB0aGUgY3VycmVudCBidWZmZXJlZCBwb3NpdGlvbiBpbiBtcy4gVGhpcyBpcyB0aGUgZmFydGhlc3QKKyAgICAgICAgICogcGxheWJhY2sgcG9pbnQgdGhhdCBjYW4gYmUgcmVhY2hlZCBmcm9tIHRoZSBjdXJyZW50IHBvc2l0aW9uIHVzaW5nCisgICAgICAgICAqIG9ubHkgYnVmZmVyZWQgY29udGVudC4KKyAgICAgICAgICoKKyAgICAgICAgICogQHBhcmFtIGJ1ZmZlcmVkUG9zaXRpb24gVGhlIHBvc2l0aW9uIGluIG1zIHRoYXQgcGxheWJhY2sgaXMgYnVmZmVyZWQKKyAgICAgICAgICogICAgICAgICAgICB0by4KKyAgICAgICAgICogQHJldHVybiB0aGlzCisgICAgICAgICAqLworICAgICAgICBwdWJsaWMgQnVpbGRlciBzZXRCdWZmZXJlZFBvc2l0aW9uKGxvbmcgYnVmZmVyZWRQb3NpdGlvbikgeworICAgICAgICAgICAgbUJ1ZmZlcmVkUG9zaXRpb24gPSBidWZmZXJlZFBvc2l0aW9uOworICAgICAgICAgICAgcmV0dXJuIHRoaXM7CisgICAgICAgIH0KKworICAgICAgICAvKioKKyAgICAgICAgICogU2V0IHRoZSBhY3RpdmUgaXRlbSBpbiB0aGUgcGxheSBxdWV1ZSBieSBzcGVjaWZ5aW5nIGl0cyBpZC4gVGhlCisgICAgICAgICAqIGRlZmF1bHQgdmFsdWUgaXMge0BsaW5rIE1lZGlhU2Vzc2lvbi5RdWV1ZUl0ZW0jVU5LTk9XTl9JRH0KKyAgICAgICAgICoKKyAgICAgICAgICogQHBhcmFtIGlkIFRoZSBpZCBvZiB0aGUgYWN0aXZlIGl0ZW0uCisgICAgICAgICAqIEByZXR1cm4gdGhpcworICAgICAgICAgKi8KKyAgICAgICAgcHVibGljIEJ1aWxkZXIgc2V0QWN0aXZlUXVldWVJdGVtSWQobG9uZyBpZCkgeworICAgICAgICAgICAgbUFjdGl2ZUl0ZW1JZCA9IGlkOworICAgICAgICAgICAgcmV0dXJuIHRoaXM7CisgICAgICAgIH0KKworICAgICAgICAvKioKKyAgICAgICAgICogU2V0IGEgdXNlciByZWFkYWJsZSBlcnJvciBtZXNzYWdlLiBUaGlzIHNob3VsZCBiZSBzZXQgd2hlbiB0aGUgc3RhdGUKKyAgICAgICAgICogaXMge0BsaW5rIFBsYXliYWNrU3RhdGUjU1RBVEVfRVJST1J9LgorICAgICAgICAgKgorICAgICAgICAgKiBAcGFyYW0gZXJyb3IgVGhlIGVycm9yIG1lc3NhZ2UgZm9yIGRpc3BsYXkgdG8gdGhlIHVzZXIuCisgICAgICAgICAqIEByZXR1cm4gdGhpcworICAgICAgICAgKi8KKyAgICAgICAgcHVibGljIEJ1aWxkZXIgc2V0RXJyb3JNZXNzYWdlKENoYXJTZXF1ZW5jZSBlcnJvcikgeworICAgICAgICAgICAgbUVycm9yTWVzc2FnZSA9IGVycm9yOworICAgICAgICAgICAgcmV0dXJuIHRoaXM7CisgICAgICAgIH0KKworICAgICAgICAvKioKKyAgICAgICAgICogU2V0IGFueSBjdXN0b20gZXh0cmFzIHRvIGJlIGluY2x1ZGVkIHdpdGggdGhlIHBsYXliYWNrIHN0YXRlLgorICAgICAgICAgKgorICAgICAgICAgKiBAcGFyYW0gZXh0cmFzIFRoZSBleHRyYXMgdG8gaW5jbHVkZS4KKyAgICAgICAgICogQHJldHVybiB0aGlzCisgICAgICAgICAqLworICAgICAgICBwdWJsaWMgQnVpbGRlciBzZXRFeHRyYXMoQnVuZGxlIGV4dHJhcykgeworICAgICAgICAgICAgbUV4dHJhcyA9IGV4dHJhczsKKyAgICAgICAgICAgIHJldHVybiB0aGlzOworICAgICAgICB9CisKKyAgICAgICAgLyoqCisgICAgICAgICAqIEJ1aWxkIGFuZCByZXR1cm4gdGhlIHtAbGluayBQbGF5YmFja1N0YXRlfSBpbnN0YW5jZSB3aXRoIHRoZXNlCisgICAgICAgICAqIHZhbHVlcy4KKyAgICAgICAgICoKKyAgICAgICAgICogQHJldHVybiBBIG5ldyBzdGF0ZSBpbnN0YW5jZS4KKyAgICAgICAgICovCisgICAgICAgIHB1YmxpYyBQbGF5YmFja1N0YXRlIGJ1aWxkKCkgeworICAgICAgICAgICAgcmV0dXJuIG5ldyBQbGF5YmFja1N0YXRlKG1TdGF0ZSwgbVBvc2l0aW9uLCBtVXBkYXRlVGltZSwgbVNwZWVkLCBtQnVmZmVyZWRQb3NpdGlvbiwKKyAgICAgICAgICAgICAgICAgICAgbUFjdGlvbnMsIG1DdXN0b21BY3Rpb25zLCBtQWN0aXZlSXRlbUlkLCBtRXJyb3JNZXNzYWdlLCBtRXh0cmFzKTsKKyAgICAgICAgfQorICAgIH0KK30KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL01lZGlhQ29tcG9uZW50cy9hcGV4L2phdmEvYW5kcm9pZC9zZXJ2aWNlL21lZGlhL0lNZWRpYUJyb3dzZXJTZXJ2aWNlLmFpZGwgYi9wYWNrYWdlcy9NZWRpYUNvbXBvbmVudHMvYXBleC9qYXZhL2FuZHJvaWQvc2VydmljZS9tZWRpYS9JTWVkaWFCcm93c2VyU2VydmljZS5haWRsCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg0ZjQxZjYKLS0tIC9kZXYvbnVsbAorKysgYi9wYWNrYWdlcy9NZWRpYUNvbXBvbmVudHMvYXBleC9qYXZhL2FuZHJvaWQvc2VydmljZS9tZWRpYS9JTWVkaWFCcm93c2VyU2VydmljZS5haWRsCkBAIC0wLDAgKzEsMjcgQEAKKy8vIENvcHlyaWdodCAyMDE0IEdvb2dsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisKK3BhY2thZ2UgYW5kcm9pZC5zZXJ2aWNlLm1lZGlhOworCitpbXBvcnQgYW5kcm9pZC5jb250ZW50LnJlcy5Db25maWd1cmF0aW9uOworaW1wb3J0IGFuZHJvaWQuc2VydmljZS5tZWRpYS5JTWVkaWFCcm93c2VyU2VydmljZUNhbGxiYWNrczsKK2ltcG9ydCBhbmRyb2lkLm5ldC5Vcmk7CitpbXBvcnQgYW5kcm9pZC5vcy5CdW5kbGU7CitpbXBvcnQgYW5kcm9pZC5vcy5SZXN1bHRSZWNlaXZlcjsKKworLyoqCisgKiBNZWRpYSBBUEkgYWxsb3dzIGNsaWVudHMgdG8gYnJvd3NlIHRocm91Z2ggaGllcmFyY2h5IG9mIGEgdXNlcuKAmXMgbWVkaWEgY29sbGVjdGlvbiwKKyAqIHBsYXliYWNrIGEgc3BlY2lmaWMgbWVkaWEgZW50cnkgYW5kIGludGVyYWN0IHdpdGggdGhlIG5vdyBwbGF5aW5nIHF1ZXVlLgorICogQGhpZGUKKyAqLworb25ld2F5IGludGVyZmFjZSBJTWVkaWFCcm93c2VyU2VydmljZSB7CisgICAgdm9pZCBjb25uZWN0KFN0cmluZyBwa2csIGluIEJ1bmRsZSByb290SGludHMsIElNZWRpYUJyb3dzZXJTZXJ2aWNlQ2FsbGJhY2tzIGNhbGxiYWNrcyk7CisgICAgdm9pZCBkaXNjb25uZWN0KElNZWRpYUJyb3dzZXJTZXJ2aWNlQ2FsbGJhY2tzIGNhbGxiYWNrcyk7CisKKyAgICB2b2lkIGFkZFN1YnNjcmlwdGlvbkRlcHJlY2F0ZWQoU3RyaW5nIHVyaSwgSU1lZGlhQnJvd3NlclNlcnZpY2VDYWxsYmFja3MgY2FsbGJhY2tzKTsKKyAgICB2b2lkIHJlbW92ZVN1YnNjcmlwdGlvbkRlcHJlY2F0ZWQoU3RyaW5nIHVyaSwgSU1lZGlhQnJvd3NlclNlcnZpY2VDYWxsYmFja3MgY2FsbGJhY2tzKTsKKworICAgIHZvaWQgZ2V0TWVkaWFJdGVtKFN0cmluZyB1cmksIGluIFJlc3VsdFJlY2VpdmVyIGNiLCBJTWVkaWFCcm93c2VyU2VydmljZUNhbGxiYWNrcyBjYWxsYmFja3MpOworICAgIHZvaWQgYWRkU3Vic2NyaXB0aW9uKFN0cmluZyB1cmksIGluIElCaW5kZXIgdG9rZW4sIGluIEJ1bmRsZSBvcHRpb25zLAorICAgICAgICAgICAgSU1lZGlhQnJvd3NlclNlcnZpY2VDYWxsYmFja3MgY2FsbGJhY2tzKTsKKyAgICB2b2lkIHJlbW92ZVN1YnNjcmlwdGlvbihTdHJpbmcgdXJpLCBpbiBJQmluZGVyIHRva2VuLCBJTWVkaWFCcm93c2VyU2VydmljZUNhbGxiYWNrcyBjYWxsYmFja3MpOworfQpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvTWVkaWFDb21wb25lbnRzL2FwZXgvamF2YS9hbmRyb2lkL3NlcnZpY2UvbWVkaWEvSU1lZGlhQnJvd3NlclNlcnZpY2VDYWxsYmFja3MuYWlkbCBiL3BhY2thZ2VzL01lZGlhQ29tcG9uZW50cy9hcGV4L2phdmEvYW5kcm9pZC9zZXJ2aWNlL21lZGlhL0lNZWRpYUJyb3dzZXJTZXJ2aWNlQ2FsbGJhY2tzLmFpZGwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmNjMjgyNgotLS0gL2Rldi9udWxsCisrKyBiL3BhY2thZ2VzL01lZGlhQ29tcG9uZW50cy9hcGV4L2phdmEvYW5kcm9pZC9zZXJ2aWNlL21lZGlhL0lNZWRpYUJyb3dzZXJTZXJ2aWNlQ2FsbGJhY2tzLmFpZGwKQEAgLTAsMCArMSwyOCBAQAorLy8gQ29weXJpZ2h0IDIwMTQgR29vZ2xlIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKworcGFja2FnZSBhbmRyb2lkLnNlcnZpY2UubWVkaWE7CisKKy8vaW1wb3J0IGFuZHJvaWQuY29udGVudC5wbS5QYXJjZWxlZExpc3RTbGljZTsKK2ltcG9ydCBhbmRyb2lkLmdyYXBoaWNzLkJpdG1hcDsKK2ltcG9ydCBhbmRyb2lkLm1lZGlhLnNlc3Npb24uTWVkaWFTZXNzaW9uOworaW1wb3J0IGFuZHJvaWQub3MuQnVuZGxlOworCisvKioKKyAqIE1lZGlhIEFQSSBhbGxvd3MgY2xpZW50cyB0byBicm93c2UgdGhyb3VnaCBoaWVyYXJjaHkgb2YgYSB1c2Vy4oCZcyBtZWRpYSBjb2xsZWN0aW9uLAorICogcGxheWJhY2sgYSBzcGVjaWZpYyBtZWRpYSBlbnRyeSBhbmQgaW50ZXJhY3Qgd2l0aCB0aGUgbm93IHBsYXlpbmcgcXVldWUuCisgKiBAaGlkZQorICovCitvbmV3YXkgaW50ZXJmYWNlIElNZWRpYUJyb3dzZXJTZXJ2aWNlQ2FsbGJhY2tzIHsKKyAgICAvKioKKyAgICAgKiBJbnZva2VkIHdoZW4gdGhlIGNvbm5lY3RlZCBoYXMgYmVlbiBlc3RhYmxpc2hlZC4KKyAgICAgKiBAcGFyYW0gcm9vdCBUaGUgcm9vdCBtZWRpYSBpZCBmb3IgYnJvd3NpbmcuCisgICAgICogQHBhcmFtIHNlc3Npb24gVGhlIHtAbGluayBNZWRpYVNlc3Npb24uVG9rZW4gbWVkaWEgc2Vzc2lvbiB0b2tlbn0gdGhhdCBjYW4gYmUgdXNlZCB0byBjb250cm9sCisgICAgICogICAgICAgICB0aGUgcGxheWJhY2sgb2YgdGhlIG1lZGlhIGFwcC4KKyAgICAgKiBAcGFyYW0gZXh0cmEgRXh0cmFzIHJldHVybmVkIGJ5IHRoZSBtZWRpYSBzZXJ2aWNlLgorICAgICAqLworICAgIHZvaWQgb25Db25uZWN0KFN0cmluZyByb290LCBpbiBNZWRpYVNlc3Npb24uVG9rZW4gc2Vzc2lvbiwgaW4gQnVuZGxlIGV4dHJhcyk7CisgICAgdm9pZCBvbkNvbm5lY3RGYWlsZWQoKTsKKyAgICAvL1RPRE86KGIvMTE5NzUwODA3KSBSZXNvbHZlIGhpZGRlbiBBUEkgdXNhZ2UgUGFyY2VsZWRMaXN0U2xpY2UuCisgICAgLy92b2lkIG9uTG9hZENoaWxkcmVuKFN0cmluZyBtZWRpYUlkLCBpbiBQYXJjZWxlZExpc3RTbGljZSBsaXN0KTsKKyAgICAvL3ZvaWQgb25Mb2FkQ2hpbGRyZW5XaXRoT3B0aW9ucyhTdHJpbmcgbWVkaWFJZCwgaW4gUGFyY2VsZWRMaXN0U2xpY2UgbGlzdCwgaW4gQnVuZGxlIG9wdGlvbnMpOworfQpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvTWVkaWFDb21wb25lbnRzL2FwZXgvamF2YS9hbmRyb2lkL3NlcnZpY2UvbWVkaWEvTWVkaWFCcm93c2VyU2VydmljZS5qYXZhIGIvcGFja2FnZXMvTWVkaWFDb21wb25lbnRzL2FwZXgvamF2YS9hbmRyb2lkL3NlcnZpY2UvbWVkaWEvTWVkaWFCcm93c2VyU2VydmljZS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJmMmZiYWYKLS0tIC9kZXYvbnVsbAorKysgYi9wYWNrYWdlcy9NZWRpYUNvbXBvbmVudHMvYXBleC9qYXZhL2FuZHJvaWQvc2VydmljZS9tZWRpYS9NZWRpYUJyb3dzZXJTZXJ2aWNlLmphdmEKQEAgLTAsMCArMSw4NjQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworCitwYWNrYWdlIGFuZHJvaWQuc2VydmljZS5tZWRpYTsKKworaW1wb3J0IGFuZHJvaWQuYW5ub3RhdGlvbi5JbnREZWY7CitpbXBvcnQgYW5kcm9pZC5hbm5vdGF0aW9uLk5vbk51bGw7CitpbXBvcnQgYW5kcm9pZC5hbm5vdGF0aW9uLk51bGxhYmxlOworaW1wb3J0IGFuZHJvaWQuYW5ub3RhdGlvbi5TZGtDb25zdGFudDsKK2ltcG9ydCBhbmRyb2lkLmFubm90YXRpb24uU2RrQ29uc3RhbnQuU2RrQ29uc3RhbnRUeXBlOworaW1wb3J0IGFuZHJvaWQuYW5ub3RhdGlvbi5VbnN1cHBvcnRlZEFwcFVzYWdlOworaW1wb3J0IGFuZHJvaWQuYXBwLlNlcnZpY2U7CitpbXBvcnQgYW5kcm9pZC5jb250ZW50LkludGVudDsKK2ltcG9ydCBhbmRyb2lkLmNvbnRlbnQucG0uUGFja2FnZU1hbmFnZXI7CisvL2ltcG9ydCBhbmRyb2lkLmNvbnRlbnQucG0uUGFyY2VsZWRMaXN0U2xpY2U7CitpbXBvcnQgYW5kcm9pZC5tZWRpYS5icm93c2UuTWVkaWFCcm93c2VyOworaW1wb3J0IGFuZHJvaWQubWVkaWEuYnJvd3NlLk1lZGlhQnJvd3NlclV0aWxzOworaW1wb3J0IGFuZHJvaWQubWVkaWEuc2Vzc2lvbi5NZWRpYVNlc3Npb247CitpbXBvcnQgYW5kcm9pZC5vcy5CaW5kZXI7CitpbXBvcnQgYW5kcm9pZC5vcy5CdW5kbGU7CitpbXBvcnQgYW5kcm9pZC5vcy5IYW5kbGVyOworaW1wb3J0IGFuZHJvaWQubWVkaWEuc2Vzc2lvbi5NZWRpYVNlc3Npb25NYW5hZ2VyOworaW1wb3J0IGFuZHJvaWQubWVkaWEuc2Vzc2lvbi5NZWRpYVNlc3Npb25NYW5hZ2VyLlJlbW90ZVVzZXJJbmZvOworaW1wb3J0IGFuZHJvaWQub3MuSUJpbmRlcjsKK2ltcG9ydCBhbmRyb2lkLm9zLlJlbW90ZUV4Y2VwdGlvbjsKK2ltcG9ydCBhbmRyb2lkLm9zLlJlc3VsdFJlY2VpdmVyOworaW1wb3J0IGFuZHJvaWQuc2VydmljZS5tZWRpYS5JTWVkaWFCcm93c2VyU2VydmljZTsKK2ltcG9ydCBhbmRyb2lkLnNlcnZpY2UubWVkaWEuSU1lZGlhQnJvd3NlclNlcnZpY2VDYWxsYmFja3M7CitpbXBvcnQgYW5kcm9pZC50ZXh0LlRleHRVdGlsczsKK2ltcG9ydCBhbmRyb2lkLnV0aWwuQXJyYXlNYXA7CitpbXBvcnQgYW5kcm9pZC51dGlsLkxvZzsKK2ltcG9ydCBhbmRyb2lkLnV0aWwuUGFpcjsKKworaW1wb3J0IGphdmEuaW8uRmlsZURlc2NyaXB0b3I7CitpbXBvcnQgamF2YS5pby5QcmludFdyaXRlcjsKK2ltcG9ydCBqYXZhLmxhbmcuYW5ub3RhdGlvbi5SZXRlbnRpb247CitpbXBvcnQgamF2YS5sYW5nLmFubm90YXRpb24uUmV0ZW50aW9uUG9saWN5OworaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7CitpbXBvcnQgamF2YS51dGlsLkNvbGxlY3Rpb25zOworaW1wb3J0IGphdmEudXRpbC5IYXNoTWFwOworaW1wb3J0IGphdmEudXRpbC5JdGVyYXRvcjsKK2ltcG9ydCBqYXZhLnV0aWwuTGlzdDsKKworLyoqCisgKiBCYXNlIGNsYXNzIGZvciBtZWRpYSBicm93c2VyIHNlcnZpY2VzLgorICogPHA+CisgKiBNZWRpYSBicm93c2VyIHNlcnZpY2VzIGVuYWJsZSBhcHBsaWNhdGlvbnMgdG8gYnJvd3NlIG1lZGlhIGNvbnRlbnQgcHJvdmlkZWQgYnkgYW4gYXBwbGljYXRpb24KKyAqIGFuZCBhc2sgdGhlIGFwcGxpY2F0aW9uIHRvIHN0YXJ0IHBsYXlpbmcgaXQuIFRoZXkgbWF5IGFsc28gYmUgdXNlZCB0byBjb250cm9sIGNvbnRlbnQgdGhhdAorICogaXMgYWxyZWFkeSBwbGF5aW5nIGJ5IHdheSBvZiBhIHtAbGluayBNZWRpYVNlc3Npb259LgorICogPC9wPgorICoKKyAqIFRvIGV4dGVuZCB0aGlzIGNsYXNzLCB5b3UgbXVzdCBkZWNsYXJlIHRoZSBzZXJ2aWNlIGluIHlvdXIgbWFuaWZlc3QgZmlsZSB3aXRoCisgKiBhbiBpbnRlbnQgZmlsdGVyIHdpdGggdGhlIHtAbGluayAjU0VSVklDRV9JTlRFUkZBQ0V9IGFjdGlvbi4KKyAqCisgKiBGb3IgZXhhbXBsZToKKyAqIDwvcD48cHJlPgorICogJmx0O3NlcnZpY2UgYW5kcm9pZDpuYW1lPSIuTXlNZWRpYUJyb3dzZXJTZXJ2aWNlIgorICogICAgICAgICAgYW5kcm9pZDpsYWJlbD0iJiM2NDtzdHJpbmcvc2VydmljZV9uYW1lIiA+CisgKiAgICAgJmx0O2ludGVudC1maWx0ZXI+CisgKiAgICAgICAgICZsdDthY3Rpb24gYW5kcm9pZDpuYW1lPSJhbmRyb2lkLm1lZGlhLmJyb3dzZS5NZWRpYUJyb3dzZXJTZXJ2aWNlIiAvPgorICogICAgICZsdDsvaW50ZW50LWZpbHRlcj4KKyAqICZsdDsvc2VydmljZT4KKyAqIDwvcHJlPgorICoKKyAqLworcHVibGljIGFic3RyYWN0IGNsYXNzIE1lZGlhQnJvd3NlclNlcnZpY2UgZXh0ZW5kcyBTZXJ2aWNlIHsKKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgVEFHID0gIk1lZGlhQnJvd3NlclNlcnZpY2UiOworICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGJvb2xlYW4gREJHID0gZmFsc2U7CisKKyAgICAvKioKKyAgICAgKiBUaGUge0BsaW5rIEludGVudH0gdGhhdCBtdXN0IGJlIGRlY2xhcmVkIGFzIGhhbmRsZWQgYnkgdGhlIHNlcnZpY2UuCisgICAgICovCisgICAgQFNka0NvbnN0YW50KFNka0NvbnN0YW50VHlwZS5TRVJWSUNFX0FDVElPTikKKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBTRVJWSUNFX0lOVEVSRkFDRSA9ICJhbmRyb2lkLm1lZGlhLmJyb3dzZS5NZWRpYUJyb3dzZXJTZXJ2aWNlIjsKKworICAgIC8qKgorICAgICAqIEEga2V5IGZvciBwYXNzaW5nIHRoZSBNZWRpYUl0ZW0gdG8gdGhlIFJlc3VsdFJlY2VpdmVyIGluIGdldEl0ZW0uCisgICAgICogQGhpZGUKKyAgICAgKi8KKyAgICBAVW5zdXBwb3J0ZWRBcHBVc2FnZQorICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIEtFWV9NRURJQV9JVEVNID0gIm1lZGlhX2l0ZW0iOworCisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IFJFU1VMVF9GTEFHX09QVElPTl9OT1RfSEFORExFRCA9IDEgPDwgMDsKKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgUkVTVUxUX0ZMQUdfT05fTE9BRF9JVEVNX05PVF9JTVBMRU1FTlRFRCA9IDEgPDwgMTsKKworICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGludCBSRVNVTFRfRVJST1IgPSAtMTsKKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgUkVTVUxUX09LID0gMDsKKworICAgIC8qKiBAaGlkZSAqLworICAgIEBSZXRlbnRpb24oUmV0ZW50aW9uUG9saWN5LlNPVVJDRSkKKyAgICBASW50RGVmKGZsYWc9dHJ1ZSwgdmFsdWUgPSB7IFJFU1VMVF9GTEFHX09QVElPTl9OT1RfSEFORExFRCwKKyAgICAgICAgICAgIFJFU1VMVF9GTEFHX09OX0xPQURfSVRFTV9OT1RfSU1QTEVNRU5URUQgfSkKKyAgICBwcml2YXRlIEBpbnRlcmZhY2UgUmVzdWx0RmxhZ3MgeyB9CisKKyAgICBwcml2YXRlIGZpbmFsIEFycmF5TWFwPElCaW5kZXIsIENvbm5lY3Rpb25SZWNvcmQ+IG1Db25uZWN0aW9ucyA9IG5ldyBBcnJheU1hcDw+KCk7CisgICAgcHJpdmF0ZSBDb25uZWN0aW9uUmVjb3JkIG1DdXJDb25uZWN0aW9uOworICAgIHByaXZhdGUgZmluYWwgSGFuZGxlciBtSGFuZGxlciA9IG5ldyBIYW5kbGVyKCk7CisgICAgcHJpdmF0ZSBTZXJ2aWNlQmluZGVyIG1CaW5kZXI7CisgICAgTWVkaWFTZXNzaW9uLlRva2VuIG1TZXNzaW9uOworCisgICAgLyoqCisgICAgICogQWxsIHRoZSBpbmZvIGFib3V0IGEgY29ubmVjdGlvbi4KKyAgICAgKi8KKyAgICBwcml2YXRlIGNsYXNzIENvbm5lY3Rpb25SZWNvcmQgaW1wbGVtZW50cyBJQmluZGVyLkRlYXRoUmVjaXBpZW50IHsKKyAgICAgICAgU3RyaW5nIHBrZzsKKyAgICAgICAgaW50IHVpZDsKKyAgICAgICAgaW50IHBpZDsKKyAgICAgICAgQnVuZGxlIHJvb3RIaW50czsKKyAgICAgICAgSU1lZGlhQnJvd3NlclNlcnZpY2VDYWxsYmFja3MgY2FsbGJhY2tzOworICAgICAgICBCcm93c2VyUm9vdCByb290OworICAgICAgICBIYXNoTWFwPFN0cmluZywgTGlzdDxQYWlyPElCaW5kZXIsIEJ1bmRsZT4+PiBzdWJzY3JpcHRpb25zID0gbmV3IEhhc2hNYXA8PigpOworCisgICAgICAgIEBPdmVycmlkZQorICAgICAgICBwdWJsaWMgdm9pZCBiaW5kZXJEaWVkKCkgeworICAgICAgICAgICAgbUhhbmRsZXIucG9zdChuZXcgUnVubmFibGUoKSB7CisgICAgICAgICAgICAgICAgQE92ZXJyaWRlCisgICAgICAgICAgICAgICAgcHVibGljIHZvaWQgcnVuKCkgeworICAgICAgICAgICAgICAgICAgICBtQ29ubmVjdGlvbnMucmVtb3ZlKGNhbGxiYWNrcy5hc0JpbmRlcigpKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9KTsKKyAgICAgICAgfQorICAgIH0KKworICAgIC8qKgorICAgICAqIENvbXBsZXRpb24gaGFuZGxlciBmb3IgYXN5bmNocm9ub3VzIGNhbGxiYWNrIG1ldGhvZHMgaW4ge0BsaW5rIE1lZGlhQnJvd3NlclNlcnZpY2V9LgorICAgICAqIDxwPgorICAgICAqIEVhY2ggb2YgdGhlIG1ldGhvZHMgdGhhdCB0YWtlcyBvbmUgb2YgdGhlc2UgdG8gc2VuZCB0aGUgcmVzdWx0IG11c3QgY2FsbAorICAgICAqIHtAbGluayAjc2VuZFJlc3VsdH0gdG8gcmVzcG9uZCB0byB0aGUgY2FsbGVyIHdpdGggdGhlIGdpdmVuIHJlc3VsdHMuIElmIHRob3NlCisgICAgICogZnVuY3Rpb25zIHJldHVybiB3aXRob3V0IGNhbGxpbmcge0BsaW5rICNzZW5kUmVzdWx0fSwgdGhleSBtdXN0IGluc3RlYWQgY2FsbAorICAgICAqIHtAbGluayAjZGV0YWNofSBiZWZvcmUgcmV0dXJuaW5nLCBhbmQgdGhlbiBtYXkgY2FsbCB7QGxpbmsgI3NlbmRSZXN1bHR9IHdoZW4KKyAgICAgKiB0aGV5IGFyZSBkb25lLiBJZiBtb3JlIHRoYW4gb25lIG9mIHRob3NlIG1ldGhvZHMgaXMgY2FsbGVkLCBhbiBleGNlcHRpb24gd2lsbAorICAgICAqIGJlIHRocm93bi4KKyAgICAgKgorICAgICAqIEBzZWUgI29uTG9hZENoaWxkcmVuCisgICAgICogQHNlZSAjb25Mb2FkSXRlbQorICAgICAqLworICAgIHB1YmxpYyBjbGFzcyBSZXN1bHQ8VD4geworICAgICAgICBwcml2YXRlIE9iamVjdCBtRGVidWc7CisgICAgICAgIHByaXZhdGUgYm9vbGVhbiBtRGV0YWNoQ2FsbGVkOworICAgICAgICBwcml2YXRlIGJvb2xlYW4gbVNlbmRSZXN1bHRDYWxsZWQ7CisgICAgICAgIEBVbnN1cHBvcnRlZEFwcFVzYWdlCisgICAgICAgIHByaXZhdGUgaW50IG1GbGFnczsKKworICAgICAgICBSZXN1bHQoT2JqZWN0IGRlYnVnKSB7CisgICAgICAgICAgICBtRGVidWcgPSBkZWJ1ZzsKKyAgICAgICAgfQorCisgICAgICAgIC8qKgorICAgICAgICAgKiBTZW5kIHRoZSByZXN1bHQgYmFjayB0byB0aGUgY2FsbGVyLgorICAgICAgICAgKi8KKyAgICAgICAgcHVibGljIHZvaWQgc2VuZFJlc3VsdChUIHJlc3VsdCkgeworICAgICAgICAgICAgaWYgKG1TZW5kUmVzdWx0Q2FsbGVkKSB7CisgICAgICAgICAgICAgICAgdGhyb3cgbmV3IElsbGVnYWxTdGF0ZUV4Y2VwdGlvbigic2VuZFJlc3VsdCgpIGNhbGxlZCB0d2ljZSBmb3I6ICIgKyBtRGVidWcpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgbVNlbmRSZXN1bHRDYWxsZWQgPSB0cnVlOworICAgICAgICAgICAgb25SZXN1bHRTZW50KHJlc3VsdCwgbUZsYWdzKTsKKyAgICAgICAgfQorCisgICAgICAgIC8qKgorICAgICAgICAgKiBEZXRhY2ggdGhpcyBtZXNzYWdlIGZyb20gdGhlIGN1cnJlbnQgdGhyZWFkIGFuZCBhbGxvdyB0aGUge0BsaW5rICNzZW5kUmVzdWx0fQorICAgICAgICAgKiBjYWxsIHRvIGhhcHBlbiBsYXRlci4KKyAgICAgICAgICovCisgICAgICAgIHB1YmxpYyB2b2lkIGRldGFjaCgpIHsKKyAgICAgICAgICAgIGlmIChtRGV0YWNoQ2FsbGVkKSB7CisgICAgICAgICAgICAgICAgdGhyb3cgbmV3IElsbGVnYWxTdGF0ZUV4Y2VwdGlvbigiZGV0YWNoKCkgY2FsbGVkIHdoZW4gZGV0YWNoKCkgaGFkIGFscmVhZHkiCisgICAgICAgICAgICAgICAgICAgICAgICArICIgYmVlbiBjYWxsZWQgZm9yOiAiICsgbURlYnVnKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChtU2VuZFJlc3VsdENhbGxlZCkgeworICAgICAgICAgICAgICAgIHRocm93IG5ldyBJbGxlZ2FsU3RhdGVFeGNlcHRpb24oImRldGFjaCgpIGNhbGxlZCB3aGVuIHNlbmRSZXN1bHQoKSBoYWQgYWxyZWFkeSIKKyAgICAgICAgICAgICAgICAgICAgICAgICsgIiBiZWVuIGNhbGxlZCBmb3I6ICIgKyBtRGVidWcpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgbURldGFjaENhbGxlZCA9IHRydWU7CisgICAgICAgIH0KKworICAgICAgICBib29sZWFuIGlzRG9uZSgpIHsKKyAgICAgICAgICAgIHJldHVybiBtRGV0YWNoQ2FsbGVkIHx8IG1TZW5kUmVzdWx0Q2FsbGVkOworICAgICAgICB9CisKKyAgICAgICAgdm9pZCBzZXRGbGFncyhAUmVzdWx0RmxhZ3MgaW50IGZsYWdzKSB7CisgICAgICAgICAgICBtRmxhZ3MgPSBmbGFnczsKKyAgICAgICAgfQorCisgICAgICAgIC8qKgorICAgICAgICAgKiBDYWxsZWQgd2hlbiB0aGUgcmVzdWx0IGlzIHNlbnQsIGFmdGVyIGFzc2VydGlvbnMgYWJvdXQgbm90IGJlaW5nIGNhbGxlZCB0d2ljZQorICAgICAgICAgKiBoYXZlIGhhcHBlbmVkLgorICAgICAgICAgKi8KKyAgICAgICAgdm9pZCBvblJlc3VsdFNlbnQoVCByZXN1bHQsIEBSZXN1bHRGbGFncyBpbnQgZmxhZ3MpIHsKKyAgICAgICAgfQorICAgIH0KKworICAgIHByaXZhdGUgY2xhc3MgU2VydmljZUJpbmRlciBleHRlbmRzIElNZWRpYUJyb3dzZXJTZXJ2aWNlLlN0dWIgeworICAgICAgICBAT3ZlcnJpZGUKKyAgICAgICAgcHVibGljIHZvaWQgY29ubmVjdChmaW5hbCBTdHJpbmcgcGtnLCBmaW5hbCBCdW5kbGUgcm9vdEhpbnRzLAorICAgICAgICAgICAgICAgIGZpbmFsIElNZWRpYUJyb3dzZXJTZXJ2aWNlQ2FsbGJhY2tzIGNhbGxiYWNrcykgeworCisgICAgICAgICAgICBmaW5hbCBpbnQgcGlkID0gQmluZGVyLmdldENhbGxpbmdQaWQoKTsKKyAgICAgICAgICAgIGZpbmFsIGludCB1aWQgPSBCaW5kZXIuZ2V0Q2FsbGluZ1VpZCgpOworICAgICAgICAgICAgaWYgKCFpc1ZhbGlkUGFja2FnZShwa2csIHVpZCkpIHsKKyAgICAgICAgICAgICAgICB0aHJvdyBuZXcgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKCJQYWNrYWdlL3VpZCBtaXNtYXRjaDogdWlkPSIgKyB1aWQKKyAgICAgICAgICAgICAgICAgICAgICAgICsgIiBwYWNrYWdlPSIgKyBwa2cpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBtSGFuZGxlci5wb3N0KG5ldyBSdW5uYWJsZSgpIHsKKyAgICAgICAgICAgICAgICAgICAgQE92ZXJyaWRlCisgICAgICAgICAgICAgICAgICAgIHB1YmxpYyB2b2lkIHJ1bigpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGZpbmFsIElCaW5kZXIgYiA9IGNhbGxiYWNrcy5hc0JpbmRlcigpOworCisgICAgICAgICAgICAgICAgICAgICAgICAvLyBDbGVhciBvdXQgdGhlIG9sZCBzdWJzY3JpcHRpb25zLiBXZSBhcmUgZ2V0dGluZyBuZXcgb25lcy4KKyAgICAgICAgICAgICAgICAgICAgICAgIG1Db25uZWN0aW9ucy5yZW1vdmUoYik7CisKKyAgICAgICAgICAgICAgICAgICAgICAgIGZpbmFsIENvbm5lY3Rpb25SZWNvcmQgY29ubmVjdGlvbiA9IG5ldyBDb25uZWN0aW9uUmVjb3JkKCk7CisgICAgICAgICAgICAgICAgICAgICAgICBjb25uZWN0aW9uLnBrZyA9IHBrZzsKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbm5lY3Rpb24ucGlkID0gcGlkOworICAgICAgICAgICAgICAgICAgICAgICAgY29ubmVjdGlvbi51aWQgPSB1aWQ7CisgICAgICAgICAgICAgICAgICAgICAgICBjb25uZWN0aW9uLnJvb3RIaW50cyA9IHJvb3RIaW50czsKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbm5lY3Rpb24uY2FsbGJhY2tzID0gY2FsbGJhY2tzOworCisgICAgICAgICAgICAgICAgICAgICAgICBtQ3VyQ29ubmVjdGlvbiA9IGNvbm5lY3Rpb247CisgICAgICAgICAgICAgICAgICAgICAgICBjb25uZWN0aW9uLnJvb3QgPSBNZWRpYUJyb3dzZXJTZXJ2aWNlLnRoaXMub25HZXRSb290KHBrZywgdWlkLCByb290SGludHMpOworICAgICAgICAgICAgICAgICAgICAgICAgbUN1ckNvbm5lY3Rpb24gPSBudWxsOworCisgICAgICAgICAgICAgICAgICAgICAgICAvLyBJZiB0aGV5IGRpZG4ndCByZXR1cm4gc29tZXRoaW5nLCBkb24ndCBhbGxvdyB0aGlzIGNsaWVudC4KKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjb25uZWN0aW9uLnJvb3QgPT0gbnVsbCkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIExvZy5pKFRBRywgIk5vIHJvb3QgZm9yIGNsaWVudCAiICsgcGtnICsgIiBmcm9tIHNlcnZpY2UgIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKyBnZXRDbGFzcygpLmdldE5hbWUoKSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2tzLm9uQ29ubmVjdEZhaWxlZCgpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gY2F0Y2ggKFJlbW90ZUV4Y2VwdGlvbiBleCkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMb2cudyhUQUcsICJDYWxsaW5nIG9uQ29ubmVjdEZhaWxlZCgpIGZhaWxlZC4gSWdub3JpbmcuICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArICJwa2c9IiArIHBrZyk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cnkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtQ29ubmVjdGlvbnMucHV0KGIsIGNvbm5lY3Rpb24pOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiLmxpbmtUb0RlYXRoKGNvbm5lY3Rpb24sIDApOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobVNlc3Npb24gIT0gbnVsbCkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2tzLm9uQ29ubmVjdChjb25uZWN0aW9uLnJvb3QuZ2V0Um9vdElkKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1TZXNzaW9uLCBjb25uZWN0aW9uLnJvb3QuZ2V0RXh0cmFzKCkpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBjYXRjaCAoUmVtb3RlRXhjZXB0aW9uIGV4KSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExvZy53KFRBRywgIkNhbGxpbmcgb25Db25uZWN0KCkgZmFpbGVkLiBEcm9wcGluZyBjbGllbnQuICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArICJwa2c9IiArIHBrZyk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1Db25uZWN0aW9ucy5yZW1vdmUoYik7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfSk7CisgICAgICAgIH0KKworICAgICAgICBAT3ZlcnJpZGUKKyAgICAgICAgcHVibGljIHZvaWQgZGlzY29ubmVjdChmaW5hbCBJTWVkaWFCcm93c2VyU2VydmljZUNhbGxiYWNrcyBjYWxsYmFja3MpIHsKKyAgICAgICAgICAgIG1IYW5kbGVyLnBvc3QobmV3IFJ1bm5hYmxlKCkgeworICAgICAgICAgICAgICAgICAgICBAT3ZlcnJpZGUKKyAgICAgICAgICAgICAgICAgICAgcHVibGljIHZvaWQgcnVuKCkgeworICAgICAgICAgICAgICAgICAgICAgICAgZmluYWwgSUJpbmRlciBiID0gY2FsbGJhY2tzLmFzQmluZGVyKCk7CisKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIENsZWFyIG91dCB0aGUgb2xkIHN1YnNjcmlwdGlvbnMuIFdlIGFyZSBnZXR0aW5nIG5ldyBvbmVzLgorICAgICAgICAgICAgICAgICAgICAgICAgZmluYWwgQ29ubmVjdGlvblJlY29yZCBvbGQgPSBtQ29ubmVjdGlvbnMucmVtb3ZlKGIpOworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG9sZCAhPSBudWxsKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gVE9ETworICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9sZC5jYWxsYmFja3MuYXNCaW5kZXIoKS51bmxpbmtUb0RlYXRoKG9sZCwgMCk7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9KTsKKyAgICAgICAgfQorCisgICAgICAgIEBPdmVycmlkZQorICAgICAgICBwdWJsaWMgdm9pZCBhZGRTdWJzY3JpcHRpb25EZXByZWNhdGVkKFN0cmluZyBpZCwgSU1lZGlhQnJvd3NlclNlcnZpY2VDYWxsYmFja3MgY2FsbGJhY2tzKSB7CisgICAgICAgICAgICAvLyBkby1ub3RoaW5nCisgICAgICAgIH0KKworICAgICAgICBAT3ZlcnJpZGUKKyAgICAgICAgcHVibGljIHZvaWQgYWRkU3Vic2NyaXB0aW9uKGZpbmFsIFN0cmluZyBpZCwgZmluYWwgSUJpbmRlciB0b2tlbiwgZmluYWwgQnVuZGxlIG9wdGlvbnMsCisgICAgICAgICAgICAgICAgZmluYWwgSU1lZGlhQnJvd3NlclNlcnZpY2VDYWxsYmFja3MgY2FsbGJhY2tzKSB7CisgICAgICAgICAgICBtSGFuZGxlci5wb3N0KG5ldyBSdW5uYWJsZSgpIHsKKyAgICAgICAgICAgICAgICAgICAgQE92ZXJyaWRlCisgICAgICAgICAgICAgICAgICAgIHB1YmxpYyB2b2lkIHJ1bigpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGZpbmFsIElCaW5kZXIgYiA9IGNhbGxiYWNrcy5hc0JpbmRlcigpOworCisgICAgICAgICAgICAgICAgICAgICAgICAvLyBHZXQgdGhlIHJlY29yZCBmb3IgdGhlIGNvbm5lY3Rpb24KKyAgICAgICAgICAgICAgICAgICAgICAgIGZpbmFsIENvbm5lY3Rpb25SZWNvcmQgY29ubmVjdGlvbiA9IG1Db25uZWN0aW9ucy5nZXQoYik7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoY29ubmVjdGlvbiA9PSBudWxsKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgTG9nLncoVEFHLCAiYWRkU3Vic2NyaXB0aW9uIGZvciBjYWxsYmFjayB0aGF0IGlzbid0IHJlZ2lzdGVyZWQgaWQ9IgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArIGlkKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAgICAgICAgIE1lZGlhQnJvd3NlclNlcnZpY2UudGhpcy5hZGRTdWJzY3JpcHRpb24oaWQsIGNvbm5lY3Rpb24sIHRva2VuLCBvcHRpb25zKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0pOworICAgICAgICB9CisKKyAgICAgICAgQE92ZXJyaWRlCisgICAgICAgIHB1YmxpYyB2b2lkIHJlbW92ZVN1YnNjcmlwdGlvbkRlcHJlY2F0ZWQoU3RyaW5nIGlkLCBJTWVkaWFCcm93c2VyU2VydmljZUNhbGxiYWNrcyBjYWxsYmFja3MpIHsKKyAgICAgICAgICAgIC8vIGRvLW5vdGhpbmcKKyAgICAgICAgfQorCisgICAgICAgIEBPdmVycmlkZQorICAgICAgICBwdWJsaWMgdm9pZCByZW1vdmVTdWJzY3JpcHRpb24oZmluYWwgU3RyaW5nIGlkLCBmaW5hbCBJQmluZGVyIHRva2VuLAorICAgICAgICAgICAgICAgIGZpbmFsIElNZWRpYUJyb3dzZXJTZXJ2aWNlQ2FsbGJhY2tzIGNhbGxiYWNrcykgeworICAgICAgICAgICAgbUhhbmRsZXIucG9zdChuZXcgUnVubmFibGUoKSB7CisgICAgICAgICAgICAgICAgQE92ZXJyaWRlCisgICAgICAgICAgICAgICAgcHVibGljIHZvaWQgcnVuKCkgeworICAgICAgICAgICAgICAgICAgICBmaW5hbCBJQmluZGVyIGIgPSBjYWxsYmFja3MuYXNCaW5kZXIoKTsKKworICAgICAgICAgICAgICAgICAgICBDb25uZWN0aW9uUmVjb3JkIGNvbm5lY3Rpb24gPSBtQ29ubmVjdGlvbnMuZ2V0KGIpOworICAgICAgICAgICAgICAgICAgICBpZiAoY29ubmVjdGlvbiA9PSBudWxsKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBMb2cudyhUQUcsICJyZW1vdmVTdWJzY3JpcHRpb24gZm9yIGNhbGxiYWNrIHRoYXQgaXNuJ3QgcmVnaXN0ZXJlZCBpZD0iCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsgaWQpOworICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGlmICghTWVkaWFCcm93c2VyU2VydmljZS50aGlzLnJlbW92ZVN1YnNjcmlwdGlvbihpZCwgY29ubmVjdGlvbiwgdG9rZW4pKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBMb2cudyhUQUcsICJyZW1vdmVTdWJzY3JpcHRpb24gY2FsbGVkIGZvciAiICsgaWQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKyAiIHdoaWNoIGlzIG5vdCBzdWJzY3JpYmVkIik7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9KTsKKyAgICAgICAgfQorCisgICAgICAgIEBPdmVycmlkZQorICAgICAgICBwdWJsaWMgdm9pZCBnZXRNZWRpYUl0ZW0oZmluYWwgU3RyaW5nIG1lZGlhSWQsIGZpbmFsIFJlc3VsdFJlY2VpdmVyIHJlY2VpdmVyLAorICAgICAgICAgICAgICAgIGZpbmFsIElNZWRpYUJyb3dzZXJTZXJ2aWNlQ2FsbGJhY2tzIGNhbGxiYWNrcykgeworICAgICAgICAgICAgbUhhbmRsZXIucG9zdChuZXcgUnVubmFibGUoKSB7CisgICAgICAgICAgICAgICAgQE92ZXJyaWRlCisgICAgICAgICAgICAgICAgcHVibGljIHZvaWQgcnVuKCkgeworICAgICAgICAgICAgICAgICAgICBmaW5hbCBJQmluZGVyIGIgPSBjYWxsYmFja3MuYXNCaW5kZXIoKTsKKyAgICAgICAgICAgICAgICAgICAgQ29ubmVjdGlvblJlY29yZCBjb25uZWN0aW9uID0gbUNvbm5lY3Rpb25zLmdldChiKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGNvbm5lY3Rpb24gPT0gbnVsbCkgeworICAgICAgICAgICAgICAgICAgICAgICAgTG9nLncoVEFHLCAiZ2V0TWVkaWFJdGVtIGZvciBjYWxsYmFjayB0aGF0IGlzbid0IHJlZ2lzdGVyZWQgaWQ9IiArIG1lZGlhSWQpOworICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIHBlcmZvcm1Mb2FkSXRlbShtZWRpYUlkLCBjb25uZWN0aW9uLCByZWNlaXZlcik7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfSk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBAT3ZlcnJpZGUKKyAgICBwdWJsaWMgdm9pZCBvbkNyZWF0ZSgpIHsKKyAgICAgICAgc3VwZXIub25DcmVhdGUoKTsKKyAgICAgICAgbUJpbmRlciA9IG5ldyBTZXJ2aWNlQmluZGVyKCk7CisgICAgfQorCisgICAgQE92ZXJyaWRlCisgICAgcHVibGljIElCaW5kZXIgb25CaW5kKEludGVudCBpbnRlbnQpIHsKKyAgICAgICAgaWYgKFNFUlZJQ0VfSU5URVJGQUNFLmVxdWFscyhpbnRlbnQuZ2V0QWN0aW9uKCkpKSB7CisgICAgICAgICAgICByZXR1cm4gbUJpbmRlcjsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gbnVsbDsKKyAgICB9CisKKyAgICBAT3ZlcnJpZGUKKyAgICBwdWJsaWMgdm9pZCBkdW1wKEZpbGVEZXNjcmlwdG9yIGZkLCBQcmludFdyaXRlciB3cml0ZXIsIFN0cmluZ1tdIGFyZ3MpIHsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBDYWxsZWQgdG8gZ2V0IHRoZSByb290IGluZm9ybWF0aW9uIGZvciBicm93c2luZyBieSBhIHBhcnRpY3VsYXIgY2xpZW50LgorICAgICAqIDxwPgorICAgICAqIFRoZSBpbXBsZW1lbnRhdGlvbiBzaG91bGQgdmVyaWZ5IHRoYXQgdGhlIGNsaWVudCBwYWNrYWdlIGhhcyBwZXJtaXNzaW9uCisgICAgICogdG8gYWNjZXNzIGJyb3dzZSBtZWRpYSBpbmZvcm1hdGlvbiBiZWZvcmUgcmV0dXJuaW5nIHRoZSByb290IGlkOyBpdAorICAgICAqIHNob3VsZCByZXR1cm4gbnVsbCBpZiB0aGUgY2xpZW50IGlzIG5vdCBhbGxvd2VkIHRvIGFjY2VzcyB0aGlzCisgICAgICogaW5mb3JtYXRpb24uCisgICAgICogPC9wPgorICAgICAqCisgICAgICogQHBhcmFtIGNsaWVudFBhY2thZ2VOYW1lIFRoZSBwYWNrYWdlIG5hbWUgb2YgdGhlIGFwcGxpY2F0aW9uIHdoaWNoIGlzCisgICAgICogICAgICAgICAgICByZXF1ZXN0aW5nIGFjY2VzcyB0byBicm93c2UgbWVkaWEuCisgICAgICogQHBhcmFtIGNsaWVudFVpZCBUaGUgdWlkIG9mIHRoZSBhcHBsaWNhdGlvbiB3aGljaCBpcyByZXF1ZXN0aW5nIGFjY2VzcyB0bworICAgICAqICAgICAgICAgICAgYnJvd3NlIG1lZGlhLgorICAgICAqIEBwYXJhbSByb290SGludHMgQW4gb3B0aW9uYWwgYnVuZGxlIG9mIHNlcnZpY2Utc3BlY2lmaWMgYXJndW1lbnRzIHRvIHNlbmQKKyAgICAgKiAgICAgICAgICAgIHRvIHRoZSBtZWRpYSBicm93c2VyIHNlcnZpY2Ugd2hlbiBjb25uZWN0aW5nIGFuZCByZXRyaWV2aW5nIHRoZQorICAgICAqICAgICAgICAgICAgcm9vdCBpZCBmb3IgYnJvd3NpbmcsIG9yIG51bGwgaWYgbm9uZS4gVGhlIGNvbnRlbnRzIG9mIHRoaXMKKyAgICAgKiAgICAgICAgICAgIGJ1bmRsZSBtYXkgYWZmZWN0IHRoZSBpbmZvcm1hdGlvbiByZXR1cm5lZCB3aGVuIGJyb3dzaW5nLgorICAgICAqIEByZXR1cm4gVGhlIHtAbGluayBCcm93c2VyUm9vdH0gZm9yIGFjY2Vzc2luZyB0aGlzIGFwcCdzIGNvbnRlbnQgb3IgbnVsbC4KKyAgICAgKiBAc2VlIEJyb3dzZXJSb290I0VYVFJBX1JFQ0VOVAorICAgICAqIEBzZWUgQnJvd3NlclJvb3QjRVhUUkFfT0ZGTElORQorICAgICAqIEBzZWUgQnJvd3NlclJvb3QjRVhUUkFfU1VHR0VTVEVECisgICAgICovCisgICAgcHVibGljIGFic3RyYWN0IEBOdWxsYWJsZSBCcm93c2VyUm9vdCBvbkdldFJvb3QoQE5vbk51bGwgU3RyaW5nIGNsaWVudFBhY2thZ2VOYW1lLAorICAgICAgICAgICAgaW50IGNsaWVudFVpZCwgQE51bGxhYmxlIEJ1bmRsZSByb290SGludHMpOworCisgICAgLyoqCisgICAgICogQ2FsbGVkIHRvIGdldCBpbmZvcm1hdGlvbiBhYm91dCB0aGUgY2hpbGRyZW4gb2YgYSBtZWRpYSBpdGVtLgorICAgICAqIDxwPgorICAgICAqIEltcGxlbWVudGF0aW9ucyBtdXN0IGNhbGwge0BsaW5rIFJlc3VsdCNzZW5kUmVzdWx0IHJlc3VsdC5zZW5kUmVzdWx0fQorICAgICAqIHdpdGggdGhlIGxpc3Qgb2YgY2hpbGRyZW4uIElmIGxvYWRpbmcgdGhlIGNoaWxkcmVuIHdpbGwgYmUgYW4gZXhwZW5zaXZlCisgICAgICogb3BlcmF0aW9uIHRoYXQgc2hvdWxkIGJlIHBlcmZvcm1lZCBvbiBhbm90aGVyIHRocmVhZCwKKyAgICAgKiB7QGxpbmsgUmVzdWx0I2RldGFjaCByZXN1bHQuZGV0YWNofSBtYXkgYmUgY2FsbGVkIGJlZm9yZSByZXR1cm5pbmcgZnJvbQorICAgICAqIHRoaXMgZnVuY3Rpb24sIGFuZCB0aGVuIHtAbGluayBSZXN1bHQjc2VuZFJlc3VsdCByZXN1bHQuc2VuZFJlc3VsdH0KKyAgICAgKiBjYWxsZWQgd2hlbiB0aGUgbG9hZGluZyBpcyBjb21wbGV0ZS4KKyAgICAgKiA8L3A+PHA+CisgICAgICogSW4gY2FzZSB0aGUgbWVkaWEgaXRlbSBkb2VzIG5vdCBoYXZlIGFueSBjaGlsZHJlbiwgY2FsbCB7QGxpbmsgUmVzdWx0I3NlbmRSZXN1bHR9CisgICAgICogd2l0aCBhbiBlbXB0eSBsaXN0LiBXaGVuIHRoZSBnaXZlbiB7QGNvZGUgcGFyZW50SWR9IGlzIGludmFsaWQsIGltcGxlbWVudGF0aW9ucyBtdXN0CisgICAgICogY2FsbCB7QGxpbmsgUmVzdWx0I3NlbmRSZXN1bHQgcmVzdWx0LnNlbmRSZXN1bHR9IHdpdGgge0Bjb2RlIG51bGx9LCB3aGljaCB3aWxsIGludm9rZQorICAgICAqIHtAbGluayBNZWRpYUJyb3dzZXIuU3Vic2NyaXB0aW9uQ2FsbGJhY2sjb25FcnJvcn0uCisgICAgICogPC9wPgorICAgICAqCisgICAgICogQHBhcmFtIHBhcmVudElkIFRoZSBpZCBvZiB0aGUgcGFyZW50IG1lZGlhIGl0ZW0gd2hvc2UgY2hpbGRyZW4gYXJlIHRvIGJlCisgICAgICogICAgICAgICAgICBxdWVyaWVkLgorICAgICAqIEBwYXJhbSByZXN1bHQgVGhlIFJlc3VsdCB0byBzZW5kIHRoZSBsaXN0IG9mIGNoaWxkcmVuIHRvLgorICAgICAqLworICAgIHB1YmxpYyBhYnN0cmFjdCB2b2lkIG9uTG9hZENoaWxkcmVuKEBOb25OdWxsIFN0cmluZyBwYXJlbnRJZCwKKyAgICAgICAgICAgIEBOb25OdWxsIFJlc3VsdDxMaXN0PE1lZGlhQnJvd3Nlci5NZWRpYUl0ZW0+PiByZXN1bHQpOworCisgICAgLyoqCisgICAgICogQ2FsbGVkIHRvIGdldCBpbmZvcm1hdGlvbiBhYm91dCB0aGUgY2hpbGRyZW4gb2YgYSBtZWRpYSBpdGVtLgorICAgICAqIDxwPgorICAgICAqIEltcGxlbWVudGF0aW9ucyBtdXN0IGNhbGwge0BsaW5rIFJlc3VsdCNzZW5kUmVzdWx0IHJlc3VsdC5zZW5kUmVzdWx0fQorICAgICAqIHdpdGggdGhlIGxpc3Qgb2YgY2hpbGRyZW4uIElmIGxvYWRpbmcgdGhlIGNoaWxkcmVuIHdpbGwgYmUgYW4gZXhwZW5zaXZlCisgICAgICogb3BlcmF0aW9uIHRoYXQgc2hvdWxkIGJlIHBlcmZvcm1lZCBvbiBhbm90aGVyIHRocmVhZCwKKyAgICAgKiB7QGxpbmsgUmVzdWx0I2RldGFjaCByZXN1bHQuZGV0YWNofSBtYXkgYmUgY2FsbGVkIGJlZm9yZSByZXR1cm5pbmcgZnJvbQorICAgICAqIHRoaXMgZnVuY3Rpb24sIGFuZCB0aGVuIHtAbGluayBSZXN1bHQjc2VuZFJlc3VsdCByZXN1bHQuc2VuZFJlc3VsdH0KKyAgICAgKiBjYWxsZWQgd2hlbiB0aGUgbG9hZGluZyBpcyBjb21wbGV0ZS4KKyAgICAgKiA8L3A+PHA+CisgICAgICogSW4gY2FzZSB0aGUgbWVkaWEgaXRlbSBkb2VzIG5vdCBoYXZlIGFueSBjaGlsZHJlbiwgY2FsbCB7QGxpbmsgUmVzdWx0I3NlbmRSZXN1bHR9CisgICAgICogd2l0aCBhbiBlbXB0eSBsaXN0LiBXaGVuIHRoZSBnaXZlbiB7QGNvZGUgcGFyZW50SWR9IGlzIGludmFsaWQsIGltcGxlbWVudGF0aW9ucyBtdXN0CisgICAgICogY2FsbCB7QGxpbmsgUmVzdWx0I3NlbmRSZXN1bHQgcmVzdWx0LnNlbmRSZXN1bHR9IHdpdGgge0Bjb2RlIG51bGx9LCB3aGljaCB3aWxsIGludm9rZQorICAgICAqIHtAbGluayBNZWRpYUJyb3dzZXIuU3Vic2NyaXB0aW9uQ2FsbGJhY2sjb25FcnJvcn0uCisgICAgICogPC9wPgorICAgICAqCisgICAgICogQHBhcmFtIHBhcmVudElkIFRoZSBpZCBvZiB0aGUgcGFyZW50IG1lZGlhIGl0ZW0gd2hvc2UgY2hpbGRyZW4gYXJlIHRvIGJlCisgICAgICogICAgICAgICAgICBxdWVyaWVkLgorICAgICAqIEBwYXJhbSByZXN1bHQgVGhlIFJlc3VsdCB0byBzZW5kIHRoZSBsaXN0IG9mIGNoaWxkcmVuIHRvLgorICAgICAqIEBwYXJhbSBvcHRpb25zIFRoZSBidW5kbGUgb2Ygc2VydmljZS1zcGVjaWZpYyBhcmd1bWVudHMgc2VudCBmcm9tIHRoZSBtZWRpYQorICAgICAqICAgICAgICAgICAgYnJvd3Nlci4gVGhlIGluZm9ybWF0aW9uIHJldHVybmVkIHRocm91Z2ggdGhlIHJlc3VsdCBzaG91bGQgYmUKKyAgICAgKiAgICAgICAgICAgIGFmZmVjdGVkIGJ5IHRoZSBjb250ZW50cyBvZiB0aGlzIGJ1bmRsZS4KKyAgICAgKi8KKyAgICBwdWJsaWMgdm9pZCBvbkxvYWRDaGlsZHJlbihATm9uTnVsbCBTdHJpbmcgcGFyZW50SWQsCisgICAgICAgICAgICBATm9uTnVsbCBSZXN1bHQ8TGlzdDxNZWRpYUJyb3dzZXIuTWVkaWFJdGVtPj4gcmVzdWx0LCBATm9uTnVsbCBCdW5kbGUgb3B0aW9ucykgeworICAgICAgICAvLyBUbyBzdXBwb3J0IGJhY2t3YXJkIGNvbXBhdGliaWxpdHksIHdoZW4gdGhlIGltcGxlbWVudGF0aW9uIG9mIE1lZGlhQnJvd3NlclNlcnZpY2UgZG9lc24ndAorICAgICAgICAvLyBvdmVycmlkZSBvbkxvYWRDaGlsZHJlbigpIHdpdGggb3B0aW9ucywgb25Mb2FkQ2hpbGRyZW4oKSB3aXRob3V0IG9wdGlvbnMgd2lsbCBiZSB1c2VkCisgICAgICAgIC8vIGluc3RlYWQsIGFuZCB0aGUgb3B0aW9ucyB3aWxsIGJlIGFwcGxpZWQgaW4gdGhlIGltcGxlbWVudGF0aW9uIG9mIHJlc3VsdC5vblJlc3VsdFNlbnQoKS4KKyAgICAgICAgcmVzdWx0LnNldEZsYWdzKFJFU1VMVF9GTEFHX09QVElPTl9OT1RfSEFORExFRCk7CisgICAgICAgIG9uTG9hZENoaWxkcmVuKHBhcmVudElkLCByZXN1bHQpOworICAgIH0KKworICAgIC8qKgorICAgICAqIENhbGxlZCB0byBnZXQgaW5mb3JtYXRpb24gYWJvdXQgYSBzcGVjaWZpYyBtZWRpYSBpdGVtLgorICAgICAqIDxwPgorICAgICAqIEltcGxlbWVudGF0aW9ucyBtdXN0IGNhbGwge0BsaW5rIFJlc3VsdCNzZW5kUmVzdWx0IHJlc3VsdC5zZW5kUmVzdWx0fS4gSWYKKyAgICAgKiBsb2FkaW5nIHRoZSBpdGVtIHdpbGwgYmUgYW4gZXhwZW5zaXZlIG9wZXJhdGlvbiB7QGxpbmsgUmVzdWx0I2RldGFjaAorICAgICAqIHJlc3VsdC5kZXRhY2h9IG1heSBiZSBjYWxsZWQgYmVmb3JlIHJldHVybmluZyBmcm9tIHRoaXMgZnVuY3Rpb24sIGFuZAorICAgICAqIHRoZW4ge0BsaW5rIFJlc3VsdCNzZW5kUmVzdWx0IHJlc3VsdC5zZW5kUmVzdWx0fSBjYWxsZWQgd2hlbiB0aGUgaXRlbSBoYXMKKyAgICAgKiBiZWVuIGxvYWRlZC4KKyAgICAgKiA8L3A+PHA+CisgICAgICogV2hlbiB0aGUgZ2l2ZW4ge0Bjb2RlIGl0ZW1JZH0gaXMgaW52YWxpZCwgaW1wbGVtZW50YXRpb25zIG11c3QgY2FsbAorICAgICAqIHtAbGluayBSZXN1bHQjc2VuZFJlc3VsdCByZXN1bHQuc2VuZFJlc3VsdH0gd2l0aCB7QGNvZGUgbnVsbH0uCisgICAgICogPC9wPjxwPgorICAgICAqIFRoZSBkZWZhdWx0IGltcGxlbWVudGF0aW9uIHdpbGwgaW52b2tlIHtAbGluayBNZWRpYUJyb3dzZXIuSXRlbUNhbGxiYWNrI29uRXJyb3J9LgorICAgICAqIDwvcD4KKyAgICAgKgorICAgICAqIEBwYXJhbSBpdGVtSWQgVGhlIGlkIGZvciB0aGUgc3BlY2lmaWMKKyAgICAgKiAgICAgICAgICAgIHtAbGluayBhbmRyb2lkLm1lZGlhLmJyb3dzZS5NZWRpYUJyb3dzZXIuTWVkaWFJdGVtfS4KKyAgICAgKiBAcGFyYW0gcmVzdWx0IFRoZSBSZXN1bHQgdG8gc2VuZCB0aGUgaXRlbSB0by4KKyAgICAgKi8KKyAgICBwdWJsaWMgdm9pZCBvbkxvYWRJdGVtKFN0cmluZyBpdGVtSWQsIFJlc3VsdDxNZWRpYUJyb3dzZXIuTWVkaWFJdGVtPiByZXN1bHQpIHsKKyAgICAgICAgcmVzdWx0LnNldEZsYWdzKFJFU1VMVF9GTEFHX09OX0xPQURfSVRFTV9OT1RfSU1QTEVNRU5URUQpOworICAgICAgICByZXN1bHQuc2VuZFJlc3VsdChudWxsKTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBDYWxsIHRvIHNldCB0aGUgbWVkaWEgc2Vzc2lvbi4KKyAgICAgKiA8cD4KKyAgICAgKiBUaGlzIHNob3VsZCBiZSBjYWxsZWQgYXMgc29vbiBhcyBwb3NzaWJsZSBkdXJpbmcgdGhlIHNlcnZpY2UncyBzdGFydHVwLgorICAgICAqIEl0IG1heSBvbmx5IGJlIGNhbGxlZCBvbmNlLgorICAgICAqCisgICAgICogQHBhcmFtIHRva2VuIFRoZSB0b2tlbiBmb3IgdGhlIHNlcnZpY2UncyB7QGxpbmsgTWVkaWFTZXNzaW9ufS4KKyAgICAgKi8KKyAgICBwdWJsaWMgdm9pZCBzZXRTZXNzaW9uVG9rZW4oZmluYWwgTWVkaWFTZXNzaW9uLlRva2VuIHRva2VuKSB7CisgICAgICAgIGlmICh0b2tlbiA9PSBudWxsKSB7CisgICAgICAgICAgICB0aHJvdyBuZXcgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKCJTZXNzaW9uIHRva2VuIG1heSBub3QgYmUgbnVsbC4iKTsKKyAgICAgICAgfQorICAgICAgICBpZiAobVNlc3Npb24gIT0gbnVsbCkgeworICAgICAgICAgICAgdGhyb3cgbmV3IElsbGVnYWxTdGF0ZUV4Y2VwdGlvbigiVGhlIHNlc3Npb24gdG9rZW4gaGFzIGFscmVhZHkgYmVlbiBzZXQuIik7CisgICAgICAgIH0KKyAgICAgICAgbVNlc3Npb24gPSB0b2tlbjsKKyAgICAgICAgbUhhbmRsZXIucG9zdChuZXcgUnVubmFibGUoKSB7CisgICAgICAgICAgICBAT3ZlcnJpZGUKKyAgICAgICAgICAgIHB1YmxpYyB2b2lkIHJ1bigpIHsKKyAgICAgICAgICAgICAgICBJdGVyYXRvcjxDb25uZWN0aW9uUmVjb3JkPiBpdGVyID0gbUNvbm5lY3Rpb25zLnZhbHVlcygpLml0ZXJhdG9yKCk7CisgICAgICAgICAgICAgICAgd2hpbGUgKGl0ZXIuaGFzTmV4dCgpKXsKKyAgICAgICAgICAgICAgICAgICAgQ29ubmVjdGlvblJlY29yZCBjb25uZWN0aW9uID0gaXRlci5uZXh0KCk7CisgICAgICAgICAgICAgICAgICAgIHRyeSB7CisgICAgICAgICAgICAgICAgICAgICAgICBjb25uZWN0aW9uLmNhbGxiYWNrcy5vbkNvbm5lY3QoY29ubmVjdGlvbi5yb290LmdldFJvb3RJZCgpLCB0b2tlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29ubmVjdGlvbi5yb290LmdldEV4dHJhcygpKTsKKyAgICAgICAgICAgICAgICAgICAgfSBjYXRjaCAoUmVtb3RlRXhjZXB0aW9uIGUpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIExvZy53KFRBRywgIkNvbm5lY3Rpb24gZm9yICIgKyBjb25uZWN0aW9uLnBrZyArICIgaXMgbm8gbG9uZ2VyIHZhbGlkLiIpOworICAgICAgICAgICAgICAgICAgICAgICAgaXRlci5yZW1vdmUoKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfSk7CisgICAgfQorCisgICAgLyoqCisgICAgICogR2V0cyB0aGUgc2Vzc2lvbiB0b2tlbiwgb3IgbnVsbCBpZiBpdCBoYXMgbm90IHlldCBiZWVuIGNyZWF0ZWQKKyAgICAgKiBvciBpZiBpdCBoYXMgYmVlbiBkZXN0cm95ZWQuCisgICAgICovCisgICAgcHVibGljIEBOdWxsYWJsZSBNZWRpYVNlc3Npb24uVG9rZW4gZ2V0U2Vzc2lvblRva2VuKCkgeworICAgICAgICByZXR1cm4gbVNlc3Npb247CisgICAgfQorCisgICAgLyoqCisgICAgICogR2V0cyB0aGUgcm9vdCBoaW50cyBzZW50IGZyb20gdGhlIGN1cnJlbnRseSBjb25uZWN0ZWQge0BsaW5rIE1lZGlhQnJvd3Nlcn0uCisgICAgICogVGhlIHJvb3QgaGludHMgYXJlIHNlcnZpY2Utc3BlY2lmaWMgYXJndW1lbnRzIGluY2x1ZGVkIGluIGFuIG9wdGlvbmFsIGJ1bmRsZSBzZW50IHRvIHRoZQorICAgICAqIG1lZGlhIGJyb3dzZXIgc2VydmljZSB3aGVuIGNvbm5lY3RpbmcgYW5kIHJldHJpZXZpbmcgdGhlIHJvb3QgaWQgZm9yIGJyb3dzaW5nLCBvciBudWxsIGlmCisgICAgICogbm9uZS4gVGhlIGNvbnRlbnRzIG9mIHRoaXMgYnVuZGxlIG1heSBhZmZlY3QgdGhlIGluZm9ybWF0aW9uIHJldHVybmVkIHdoZW4gYnJvd3NpbmcuCisgICAgICoKKyAgICAgKiBAdGhyb3dzIElsbGVnYWxTdGF0ZUV4Y2VwdGlvbiBJZiB0aGlzIG1ldGhvZCBpcyBjYWxsZWQgb3V0c2lkZSBvZiB7QGxpbmsgI29uR2V0Um9vdH0gb3IKKyAgICAgKiAgICAgICAgICAgICB7QGxpbmsgI29uTG9hZENoaWxkcmVufSBvciB7QGxpbmsgI29uTG9hZEl0ZW19LgorICAgICAqIEBzZWUgTWVkaWFCcm93c2VyU2VydmljZS5Ccm93c2VyUm9vdCNFWFRSQV9SRUNFTlQKKyAgICAgKiBAc2VlIE1lZGlhQnJvd3NlclNlcnZpY2UuQnJvd3NlclJvb3QjRVhUUkFfT0ZGTElORQorICAgICAqIEBzZWUgTWVkaWFCcm93c2VyU2VydmljZS5Ccm93c2VyUm9vdCNFWFRSQV9TVUdHRVNURUQKKyAgICAgKi8KKyAgICBwdWJsaWMgZmluYWwgQnVuZGxlIGdldEJyb3dzZXJSb290SGludHMoKSB7CisgICAgICAgIGlmIChtQ3VyQ29ubmVjdGlvbiA9PSBudWxsKSB7CisgICAgICAgICAgICB0aHJvdyBuZXcgSWxsZWdhbFN0YXRlRXhjZXB0aW9uKCJUaGlzIHNob3VsZCBiZSBjYWxsZWQgaW5zaWRlIG9mIG9uR2V0Um9vdCBvciIKKyAgICAgICAgICAgICAgICAgICAgKyAiIG9uTG9hZENoaWxkcmVuIG9yIG9uTG9hZEl0ZW0gbWV0aG9kcyIpOworICAgICAgICB9CisgICAgICAgIHJldHVybiBtQ3VyQ29ubmVjdGlvbi5yb290SGludHMgPT0gbnVsbCA/IG51bGwgOiBuZXcgQnVuZGxlKG1DdXJDb25uZWN0aW9uLnJvb3RIaW50cyk7CisgICAgfQorCisgICAgLyoqCisgICAgICogR2V0cyB0aGUgYnJvd3NlciBpbmZvcm1hdGlvbiB3aG8gc2VudCB0aGUgY3VycmVudCByZXF1ZXN0LgorICAgICAqCisgICAgICogQHRocm93cyBJbGxlZ2FsU3RhdGVFeGNlcHRpb24gSWYgdGhpcyBtZXRob2QgaXMgY2FsbGVkIG91dHNpZGUgb2Yge0BsaW5rICNvbkdldFJvb3R9IG9yCisgICAgICogICAgICAgICAgICAge0BsaW5rICNvbkxvYWRDaGlsZHJlbn0gb3Ige0BsaW5rICNvbkxvYWRJdGVtfS4KKyAgICAgKiBAc2VlIE1lZGlhU2Vzc2lvbk1hbmFnZXIjaXNUcnVzdGVkRm9yTWVkaWFDb250cm9sKFJlbW90ZVVzZXJJbmZvKQorICAgICAqLworICAgIHB1YmxpYyBmaW5hbCBSZW1vdGVVc2VySW5mbyBnZXRDdXJyZW50QnJvd3NlckluZm8oKSB7CisgICAgICAgIGlmIChtQ3VyQ29ubmVjdGlvbiA9PSBudWxsKSB7CisgICAgICAgICAgICB0aHJvdyBuZXcgSWxsZWdhbFN0YXRlRXhjZXB0aW9uKCJUaGlzIHNob3VsZCBiZSBjYWxsZWQgaW5zaWRlIG9mIG9uR2V0Um9vdCBvciIKKyAgICAgICAgICAgICAgICAgICAgKyAiIG9uTG9hZENoaWxkcmVuIG9yIG9uTG9hZEl0ZW0gbWV0aG9kcyIpOworICAgICAgICB9CisgICAgICAgIC8vVE9ETyhiLzExOTc1MjIwNSk6IFJlc29sdmUgaGlkZGVuIEFQSSB1c2FnZS4gNC1wYXJhbSBjb25zdHJ1Y3RvciBvZiBSZW1vdGVVc2VySW5mbworICAgICAgICAvKgorICAgICAgICByZXR1cm4gbmV3IFJlbW90ZVVzZXJJbmZvKG1DdXJDb25uZWN0aW9uLnBrZywgbUN1ckNvbm5lY3Rpb24ucGlkLCBtQ3VyQ29ubmVjdGlvbi51aWQsCisgICAgICAgICAgICAgICAgbUN1ckNvbm5lY3Rpb24uY2FsbGJhY2tzLmFzQmluZGVyKCkpOworICAgICAgICAqLworICAgICAgICByZXR1cm4gbmV3IFJlbW90ZVVzZXJJbmZvKG1DdXJDb25uZWN0aW9uLnBrZywgbUN1ckNvbm5lY3Rpb24ucGlkLCBtQ3VyQ29ubmVjdGlvbi51aWQpOworICAgIH0KKworICAgIC8qKgorICAgICAqIE5vdGlmaWVzIGFsbCBjb25uZWN0ZWQgbWVkaWEgYnJvd3NlcnMgdGhhdCB0aGUgY2hpbGRyZW4gb2YKKyAgICAgKiB0aGUgc3BlY2lmaWVkIHBhcmVudCBpZCBoYXZlIGNoYW5nZWQgaW4gc29tZSB3YXkuCisgICAgICogVGhpcyB3aWxsIGNhdXNlIGJyb3dzZXJzIHRvIGZldGNoIHN1YnNjcmliZWQgY29udGVudCBhZ2Fpbi4KKyAgICAgKgorICAgICAqIEBwYXJhbSBwYXJlbnRJZCBUaGUgaWQgb2YgdGhlIHBhcmVudCBtZWRpYSBpdGVtIHdob3NlCisgICAgICogY2hpbGRyZW4gY2hhbmdlZC4KKyAgICAgKi8KKyAgICBwdWJsaWMgdm9pZCBub3RpZnlDaGlsZHJlbkNoYW5nZWQoQE5vbk51bGwgU3RyaW5nIHBhcmVudElkKSB7CisgICAgICAgIG5vdGlmeUNoaWxkcmVuQ2hhbmdlZEludGVybmFsKHBhcmVudElkLCBudWxsKTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBOb3RpZmllcyBhbGwgY29ubmVjdGVkIG1lZGlhIGJyb3dzZXJzIHRoYXQgdGhlIGNoaWxkcmVuIG9mCisgICAgICogdGhlIHNwZWNpZmllZCBwYXJlbnQgaWQgaGF2ZSBjaGFuZ2VkIGluIHNvbWUgd2F5LgorICAgICAqIFRoaXMgd2lsbCBjYXVzZSBicm93c2VycyB0byBmZXRjaCBzdWJzY3JpYmVkIGNvbnRlbnQgYWdhaW4uCisgICAgICoKKyAgICAgKiBAcGFyYW0gcGFyZW50SWQgVGhlIGlkIG9mIHRoZSBwYXJlbnQgbWVkaWEgaXRlbSB3aG9zZQorICAgICAqICAgICAgICAgICAgY2hpbGRyZW4gY2hhbmdlZC4KKyAgICAgKiBAcGFyYW0gb3B0aW9ucyBUaGUgYnVuZGxlIG9mIHNlcnZpY2Utc3BlY2lmaWMgYXJndW1lbnRzIHRvIHNlbmQKKyAgICAgKiAgICAgICAgICAgIHRvIHRoZSBtZWRpYSBicm93c2VyLiBUaGUgY29udGVudHMgb2YgdGhpcyBidW5kbGUgbWF5CisgICAgICogICAgICAgICAgICBjb250YWluIHRoZSBpbmZvcm1hdGlvbiBhYm91dCB0aGUgY2hhbmdlLgorICAgICAqLworICAgIHB1YmxpYyB2b2lkIG5vdGlmeUNoaWxkcmVuQ2hhbmdlZChATm9uTnVsbCBTdHJpbmcgcGFyZW50SWQsIEBOb25OdWxsIEJ1bmRsZSBvcHRpb25zKSB7CisgICAgICAgIGlmIChvcHRpb25zID09IG51bGwpIHsKKyAgICAgICAgICAgIHRocm93IG5ldyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oIm9wdGlvbnMgY2Fubm90IGJlIG51bGwgaW4gbm90aWZ5Q2hpbGRyZW5DaGFuZ2VkIik7CisgICAgICAgIH0KKyAgICAgICAgbm90aWZ5Q2hpbGRyZW5DaGFuZ2VkSW50ZXJuYWwocGFyZW50SWQsIG9wdGlvbnMpOworICAgIH0KKworICAgIHByaXZhdGUgdm9pZCBub3RpZnlDaGlsZHJlbkNoYW5nZWRJbnRlcm5hbChmaW5hbCBTdHJpbmcgcGFyZW50SWQsIGZpbmFsIEJ1bmRsZSBvcHRpb25zKSB7CisgICAgICAgIGlmIChwYXJlbnRJZCA9PSBudWxsKSB7CisgICAgICAgICAgICB0aHJvdyBuZXcgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKCJwYXJlbnRJZCBjYW5ub3QgYmUgbnVsbCBpbiBub3RpZnlDaGlsZHJlbkNoYW5nZWQiKTsKKyAgICAgICAgfQorICAgICAgICBtSGFuZGxlci5wb3N0KG5ldyBSdW5uYWJsZSgpIHsKKyAgICAgICAgICAgIEBPdmVycmlkZQorICAgICAgICAgICAgcHVibGljIHZvaWQgcnVuKCkgeworICAgICAgICAgICAgICAgIGZvciAoSUJpbmRlciBiaW5kZXIgOiBtQ29ubmVjdGlvbnMua2V5U2V0KCkpIHsKKyAgICAgICAgICAgICAgICAgICAgQ29ubmVjdGlvblJlY29yZCBjb25uZWN0aW9uID0gbUNvbm5lY3Rpb25zLmdldChiaW5kZXIpOworICAgICAgICAgICAgICAgICAgICBMaXN0PFBhaXI8SUJpbmRlciwgQnVuZGxlPj4gY2FsbGJhY2tMaXN0ID0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25uZWN0aW9uLnN1YnNjcmlwdGlvbnMuZ2V0KHBhcmVudElkKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGNhbGxiYWNrTGlzdCAhPSBudWxsKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKFBhaXI8SUJpbmRlciwgQnVuZGxlPiBjYWxsYmFjayA6IGNhbGxiYWNrTGlzdCkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChNZWRpYUJyb3dzZXJVdGlscy5oYXNEdXBsaWNhdGVkSXRlbXMob3B0aW9ucywgY2FsbGJhY2suc2Vjb25kKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwZXJmb3JtTG9hZENoaWxkcmVuKHBhcmVudElkLCBjb25uZWN0aW9uLCBjYWxsYmFjay5zZWNvbmQpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfSk7CisgICAgfQorCisgICAgLyoqCisgICAgICogUmV0dXJuIHdoZXRoZXIgdGhlIGdpdmVuIHBhY2thZ2UgaXMgb25lIG9mIHRoZSBvbmVzIHRoYXQgaXMgb3duZWQgYnkgdGhlIHVpZC4KKyAgICAgKi8KKyAgICBwcml2YXRlIGJvb2xlYW4gaXNWYWxpZFBhY2thZ2UoU3RyaW5nIHBrZywgaW50IHVpZCkgeworICAgICAgICBpZiAocGtnID09IG51bGwpIHsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgICAgICBmaW5hbCBQYWNrYWdlTWFuYWdlciBwbSA9IGdldFBhY2thZ2VNYW5hZ2VyKCk7CisgICAgICAgIGZpbmFsIFN0cmluZ1tdIHBhY2thZ2VzID0gcG0uZ2V0UGFja2FnZXNGb3JVaWQodWlkKTsKKyAgICAgICAgZmluYWwgaW50IE4gPSBwYWNrYWdlcy5sZW5ndGg7CisgICAgICAgIGZvciAoaW50IGk9MDsgaTxOOyBpKyspIHsKKyAgICAgICAgICAgIGlmIChwYWNrYWdlc1tpXS5lcXVhbHMocGtnKSkgeworICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBTYXZlIHRoZSBzdWJzY3JpcHRpb24gYW5kIGlmIGl0IGlzIGEgbmV3IHN1YnNjcmlwdGlvbiBzZW5kIHRoZSByZXN1bHRzLgorICAgICAqLworICAgIHByaXZhdGUgdm9pZCBhZGRTdWJzY3JpcHRpb24oU3RyaW5nIGlkLCBDb25uZWN0aW9uUmVjb3JkIGNvbm5lY3Rpb24sIElCaW5kZXIgdG9rZW4sCisgICAgICAgICAgICBCdW5kbGUgb3B0aW9ucykgeworICAgICAgICAvLyBTYXZlIHRoZSBzdWJzY3JpcHRpb24KKyAgICAgICAgTGlzdDxQYWlyPElCaW5kZXIsIEJ1bmRsZT4+IGNhbGxiYWNrTGlzdCA9IGNvbm5lY3Rpb24uc3Vic2NyaXB0aW9ucy5nZXQoaWQpOworICAgICAgICBpZiAoY2FsbGJhY2tMaXN0ID09IG51bGwpIHsKKyAgICAgICAgICAgIGNhbGxiYWNrTGlzdCA9IG5ldyBBcnJheUxpc3Q8PigpOworICAgICAgICB9CisgICAgICAgIGZvciAoUGFpcjxJQmluZGVyLCBCdW5kbGU+IGNhbGxiYWNrIDogY2FsbGJhY2tMaXN0KSB7CisgICAgICAgICAgICBpZiAodG9rZW4gPT0gY2FsbGJhY2suZmlyc3QKKyAgICAgICAgICAgICAgICAgICAgJiYgTWVkaWFCcm93c2VyVXRpbHMuYXJlU2FtZU9wdGlvbnMob3B0aW9ucywgY2FsbGJhY2suc2Vjb25kKSkgeworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBjYWxsYmFja0xpc3QuYWRkKG5ldyBQYWlyPD4odG9rZW4sIG9wdGlvbnMpKTsKKyAgICAgICAgY29ubmVjdGlvbi5zdWJzY3JpcHRpb25zLnB1dChpZCwgY2FsbGJhY2tMaXN0KTsKKyAgICAgICAgLy8gc2VuZCB0aGUgcmVzdWx0cworICAgICAgICBwZXJmb3JtTG9hZENoaWxkcmVuKGlkLCBjb25uZWN0aW9uLCBvcHRpb25zKTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBSZW1vdmUgdGhlIHN1YnNjcmlwdGlvbi4KKyAgICAgKi8KKyAgICBwcml2YXRlIGJvb2xlYW4gcmVtb3ZlU3Vic2NyaXB0aW9uKFN0cmluZyBpZCwgQ29ubmVjdGlvblJlY29yZCBjb25uZWN0aW9uLCBJQmluZGVyIHRva2VuKSB7CisgICAgICAgIGlmICh0b2tlbiA9PSBudWxsKSB7CisgICAgICAgICAgICByZXR1cm4gY29ubmVjdGlvbi5zdWJzY3JpcHRpb25zLnJlbW92ZShpZCkgIT0gbnVsbDsKKyAgICAgICAgfQorICAgICAgICBib29sZWFuIHJlbW92ZWQgPSBmYWxzZTsKKyAgICAgICAgTGlzdDxQYWlyPElCaW5kZXIsIEJ1bmRsZT4+IGNhbGxiYWNrTGlzdCA9IGNvbm5lY3Rpb24uc3Vic2NyaXB0aW9ucy5nZXQoaWQpOworICAgICAgICBpZiAoY2FsbGJhY2tMaXN0ICE9IG51bGwpIHsKKyAgICAgICAgICAgIEl0ZXJhdG9yPFBhaXI8SUJpbmRlciwgQnVuZGxlPj4gaXRlciA9IGNhbGxiYWNrTGlzdC5pdGVyYXRvcigpOworICAgICAgICAgICAgd2hpbGUgKGl0ZXIuaGFzTmV4dCgpKXsKKyAgICAgICAgICAgICAgICBpZiAodG9rZW4gPT0gaXRlci5uZXh0KCkuZmlyc3QpIHsKKyAgICAgICAgICAgICAgICAgICAgcmVtb3ZlZCA9IHRydWU7CisgICAgICAgICAgICAgICAgICAgIGl0ZXIucmVtb3ZlKCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKGNhbGxiYWNrTGlzdC5zaXplKCkgPT0gMCkgeworICAgICAgICAgICAgICAgIGNvbm5lY3Rpb24uc3Vic2NyaXB0aW9ucy5yZW1vdmUoaWQpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIHJldHVybiByZW1vdmVkOworICAgIH0KKworICAgIC8qKgorICAgICAqIENhbGwgb25Mb2FkQ2hpbGRyZW4gYW5kIHRoZW4gc2VuZCB0aGUgcmVzdWx0cyBiYWNrIHRvIHRoZSBjb25uZWN0aW9uLgorICAgICAqIDxwPgorICAgICAqIENhbGxlcnMgbXVzdCBtYWtlIHN1cmUgdGhhdCB0aGlzIGNvbm5lY3Rpb24gaXMgc3RpbGwgY29ubmVjdGVkLgorICAgICAqLworICAgIHByaXZhdGUgdm9pZCBwZXJmb3JtTG9hZENoaWxkcmVuKGZpbmFsIFN0cmluZyBwYXJlbnRJZCwgZmluYWwgQ29ubmVjdGlvblJlY29yZCBjb25uZWN0aW9uLAorICAgICAgICAgICAgZmluYWwgQnVuZGxlIG9wdGlvbnMpIHsKKyAgICAgICAgZmluYWwgUmVzdWx0PExpc3Q8TWVkaWFCcm93c2VyLk1lZGlhSXRlbT4+IHJlc3VsdAorICAgICAgICAgICAgICAgID0gbmV3IFJlc3VsdDxMaXN0PE1lZGlhQnJvd3Nlci5NZWRpYUl0ZW0+PihwYXJlbnRJZCkgeworICAgICAgICAgICAgQE92ZXJyaWRlCisgICAgICAgICAgICB2b2lkIG9uUmVzdWx0U2VudChMaXN0PE1lZGlhQnJvd3Nlci5NZWRpYUl0ZW0+IGxpc3QsIEBSZXN1bHRGbGFncyBpbnQgZmxhZykgeworICAgICAgICAgICAgICAgIGlmIChtQ29ubmVjdGlvbnMuZ2V0KGNvbm5lY3Rpb24uY2FsbGJhY2tzLmFzQmluZGVyKCkpICE9IGNvbm5lY3Rpb24pIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKERCRykgeworICAgICAgICAgICAgICAgICAgICAgICAgTG9nLmQoVEFHLCAiTm90IHNlbmRpbmcgb25Mb2FkQ2hpbGRyZW4gcmVzdWx0IGZvciBjb25uZWN0aW9uIHRoYXQgaGFzIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArICIgYmVlbiBkaXNjb25uZWN0ZWQuIHBrZz0iICsgY29ubmVjdGlvbi5wa2cgKyAiIGlkPSIgKyBwYXJlbnRJZCk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIExpc3Q8TWVkaWFCcm93c2VyLk1lZGlhSXRlbT4gZmlsdGVyZWRMaXN0ID0KKyAgICAgICAgICAgICAgICAgICAgICAgIChmbGFnICYgUkVTVUxUX0ZMQUdfT1BUSU9OX05PVF9IQU5ETEVEKSAhPSAwCisgICAgICAgICAgICAgICAgICAgICAgICA/IGFwcGx5T3B0aW9ucyhsaXN0LCBvcHRpb25zKSA6IGxpc3Q7CisgICAgICAgICAgICAgICAgLy9UT0RPOihiLzExOTc1MDgwNykgUmVzb2x2ZSBoaWRkZW4gQVBJIHVzYWdlIFBhcmNlbGVkTGlzdFNsaWNlLgorICAgICAgICAgICAgICAgIC8qCisgICAgICAgICAgICAgICAgZmluYWwgUGFyY2VsZWRMaXN0U2xpY2U8TWVkaWFCcm93c2VyLk1lZGlhSXRlbT4gcGxzID0KKyAgICAgICAgICAgICAgICAgICAgICAgIGZpbHRlcmVkTGlzdCA9PSBudWxsID8gbnVsbCA6IG5ldyBQYXJjZWxlZExpc3RTbGljZTw+KGZpbHRlcmVkTGlzdCk7CisgICAgICAgICAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgICAgICAgICAgY29ubmVjdGlvbi5jYWxsYmFja3Mub25Mb2FkQ2hpbGRyZW5XaXRoT3B0aW9ucyhwYXJlbnRJZCwgcGxzLCBvcHRpb25zKTsKKyAgICAgICAgICAgICAgICB9IGNhdGNoIChSZW1vdGVFeGNlcHRpb24gZXgpIHsKKyAgICAgICAgICAgICAgICAgICAgLy8gVGhlIG90aGVyIHNpZGUgaXMgaW4gdGhlIHByb2Nlc3Mgb2YgY3Jhc2hpbmcuCisgICAgICAgICAgICAgICAgICAgIExvZy53KFRBRywgIkNhbGxpbmcgb25Mb2FkQ2hpbGRyZW4oKSBmYWlsZWQgZm9yIGlkPSIgKyBwYXJlbnRJZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICsgIiBwYWNrYWdlPSIgKyBjb25uZWN0aW9uLnBrZyk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICovCisgICAgICAgICAgICB9CisgICAgICAgIH07CisKKyAgICAgICAgbUN1ckNvbm5lY3Rpb24gPSBjb25uZWN0aW9uOworICAgICAgICBpZiAob3B0aW9ucyA9PSBudWxsKSB7CisgICAgICAgICAgICBvbkxvYWRDaGlsZHJlbihwYXJlbnRJZCwgcmVzdWx0KTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIG9uTG9hZENoaWxkcmVuKHBhcmVudElkLCByZXN1bHQsIG9wdGlvbnMpOworICAgICAgICB9CisgICAgICAgIG1DdXJDb25uZWN0aW9uID0gbnVsbDsKKworICAgICAgICBpZiAoIXJlc3VsdC5pc0RvbmUoKSkgeworICAgICAgICAgICAgdGhyb3cgbmV3IElsbGVnYWxTdGF0ZUV4Y2VwdGlvbigib25Mb2FkQ2hpbGRyZW4gbXVzdCBjYWxsIGRldGFjaCgpIG9yIHNlbmRSZXN1bHQoKSIKKyAgICAgICAgICAgICAgICAgICAgKyAiIGJlZm9yZSByZXR1cm5pbmcgZm9yIHBhY2thZ2U9IiArIGNvbm5lY3Rpb24ucGtnICsgIiBpZD0iICsgcGFyZW50SWQpOworICAgICAgICB9CisgICAgfQorCisgICAgcHJpdmF0ZSBMaXN0PE1lZGlhQnJvd3Nlci5NZWRpYUl0ZW0+IGFwcGx5T3B0aW9ucyhMaXN0PE1lZGlhQnJvd3Nlci5NZWRpYUl0ZW0+IGxpc3QsCisgICAgICAgICAgICBmaW5hbCBCdW5kbGUgb3B0aW9ucykgeworICAgICAgICBpZiAobGlzdCA9PSBudWxsKSB7CisgICAgICAgICAgICByZXR1cm4gbnVsbDsKKyAgICAgICAgfQorICAgICAgICBpbnQgcGFnZSA9IG9wdGlvbnMuZ2V0SW50KE1lZGlhQnJvd3Nlci5FWFRSQV9QQUdFLCAtMSk7CisgICAgICAgIGludCBwYWdlU2l6ZSA9IG9wdGlvbnMuZ2V0SW50KE1lZGlhQnJvd3Nlci5FWFRSQV9QQUdFX1NJWkUsIC0xKTsKKyAgICAgICAgaWYgKHBhZ2UgPT0gLTEgJiYgcGFnZVNpemUgPT0gLTEpIHsKKyAgICAgICAgICAgIHJldHVybiBsaXN0OworICAgICAgICB9CisgICAgICAgIGludCBmcm9tSW5kZXggPSBwYWdlU2l6ZSAqIHBhZ2U7CisgICAgICAgIGludCB0b0luZGV4ID0gZnJvbUluZGV4ICsgcGFnZVNpemU7CisgICAgICAgIGlmIChwYWdlIDwgMCB8fCBwYWdlU2l6ZSA8IDEgfHwgZnJvbUluZGV4ID49IGxpc3Quc2l6ZSgpKSB7CisgICAgICAgICAgICByZXR1cm4gQ29sbGVjdGlvbnMuRU1QVFlfTElTVDsKKyAgICAgICAgfQorICAgICAgICBpZiAodG9JbmRleCA+IGxpc3Quc2l6ZSgpKSB7CisgICAgICAgICAgICB0b0luZGV4ID0gbGlzdC5zaXplKCk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIGxpc3Quc3ViTGlzdChmcm9tSW5kZXgsIHRvSW5kZXgpOworICAgIH0KKworICAgIHByaXZhdGUgdm9pZCBwZXJmb3JtTG9hZEl0ZW0oU3RyaW5nIGl0ZW1JZCwgZmluYWwgQ29ubmVjdGlvblJlY29yZCBjb25uZWN0aW9uLAorICAgICAgICAgICAgZmluYWwgUmVzdWx0UmVjZWl2ZXIgcmVjZWl2ZXIpIHsKKyAgICAgICAgZmluYWwgUmVzdWx0PE1lZGlhQnJvd3Nlci5NZWRpYUl0ZW0+IHJlc3VsdCA9CisgICAgICAgICAgICAgICAgbmV3IFJlc3VsdDxNZWRpYUJyb3dzZXIuTWVkaWFJdGVtPihpdGVtSWQpIHsKKyAgICAgICAgICAgIEBPdmVycmlkZQorICAgICAgICAgICAgdm9pZCBvblJlc3VsdFNlbnQoTWVkaWFCcm93c2VyLk1lZGlhSXRlbSBpdGVtLCBAUmVzdWx0RmxhZ3MgaW50IGZsYWcpIHsKKyAgICAgICAgICAgICAgICBpZiAobUNvbm5lY3Rpb25zLmdldChjb25uZWN0aW9uLmNhbGxiYWNrcy5hc0JpbmRlcigpKSAhPSBjb25uZWN0aW9uKSB7CisgICAgICAgICAgICAgICAgICAgIGlmIChEQkcpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIExvZy5kKFRBRywgIk5vdCBzZW5kaW5nIG9uTG9hZEl0ZW0gcmVzdWx0IGZvciBjb25uZWN0aW9uIHRoYXQgaGFzIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArICIgYmVlbiBkaXNjb25uZWN0ZWQuIHBrZz0iICsgY29ubmVjdGlvbi5wa2cgKyAiIGlkPSIgKyBpdGVtSWQpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgaWYgKChmbGFnICYgUkVTVUxUX0ZMQUdfT05fTE9BRF9JVEVNX05PVF9JTVBMRU1FTlRFRCkgIT0gMCkgeworICAgICAgICAgICAgICAgICAgICByZWNlaXZlci5zZW5kKFJFU1VMVF9FUlJPUiwgbnVsbCk7CisgICAgICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgQnVuZGxlIGJ1bmRsZSA9IG5ldyBCdW5kbGUoKTsKKyAgICAgICAgICAgICAgICBidW5kbGUucHV0UGFyY2VsYWJsZShLRVlfTUVESUFfSVRFTSwgaXRlbSk7CisgICAgICAgICAgICAgICAgcmVjZWl2ZXIuc2VuZChSRVNVTFRfT0ssIGJ1bmRsZSk7CisgICAgICAgICAgICB9CisgICAgICAgIH07CisKKyAgICAgICAgbUN1ckNvbm5lY3Rpb24gPSBjb25uZWN0aW9uOworICAgICAgICBvbkxvYWRJdGVtKGl0ZW1JZCwgcmVzdWx0KTsKKyAgICAgICAgbUN1ckNvbm5lY3Rpb24gPSBudWxsOworCisgICAgICAgIGlmICghcmVzdWx0LmlzRG9uZSgpKSB7CisgICAgICAgICAgICB0aHJvdyBuZXcgSWxsZWdhbFN0YXRlRXhjZXB0aW9uKCJvbkxvYWRJdGVtIG11c3QgY2FsbCBkZXRhY2goKSBvciBzZW5kUmVzdWx0KCkiCisgICAgICAgICAgICAgICAgICAgICsgIiBiZWZvcmUgcmV0dXJuaW5nIGZvciBpZD0iICsgaXRlbUlkKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIC8qKgorICAgICAqIENvbnRhaW5zIGluZm9ybWF0aW9uIHRoYXQgdGhlIGJyb3dzZXIgc2VydmljZSBuZWVkcyB0byBzZW5kIHRvIHRoZSBjbGllbnQKKyAgICAgKiB3aGVuIGZpcnN0IGNvbm5lY3RlZC4KKyAgICAgKi8KKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGNsYXNzIEJyb3dzZXJSb290IHsKKyAgICAgICAgLyoqCisgICAgICAgICAqIFRoZSBsb29rdXAga2V5IGZvciBhIGJvb2xlYW4gdGhhdCBpbmRpY2F0ZXMgd2hldGhlciB0aGUgYnJvd3NlciBzZXJ2aWNlIHNob3VsZCByZXR1cm4gYQorICAgICAgICAgKiBicm93c2VyIHJvb3QgZm9yIHJlY2VudGx5IHBsYXllZCBtZWRpYSBpdGVtcy4KKyAgICAgICAgICoKKyAgICAgICAgICogPHA+V2hlbiBjcmVhdGluZyBhIG1lZGlhIGJyb3dzZXIgZm9yIGEgZ2l2ZW4gbWVkaWEgYnJvd3NlciBzZXJ2aWNlLCB0aGlzIGtleSBjYW4gYmUKKyAgICAgICAgICogc3VwcGxpZWQgYXMgYSByb290IGhpbnQgZm9yIHJldHJpZXZpbmcgbWVkaWEgaXRlbXMgdGhhdCBhcmUgcmVjZW50bHkgcGxheWVkLgorICAgICAgICAgKiBJZiB0aGUgbWVkaWEgYnJvd3NlciBzZXJ2aWNlIGNhbiBwcm92aWRlIHN1Y2ggbWVkaWEgaXRlbXMsIHRoZSBpbXBsZW1lbnRhdGlvbiBtdXN0IHJldHVybgorICAgICAgICAgKiB0aGUga2V5IGluIHRoZSByb290IGhpbnQgd2hlbiB7QGxpbmsgI29uR2V0Um9vdChTdHJpbmcsIGludCwgQnVuZGxlKX0gaXMgY2FsbGVkIGJhY2suCisgICAgICAgICAqCisgICAgICAgICAqIDxwPlRoZSByb290IGhpbnQgbWF5IGNvbnRhaW4gbXVsdGlwbGUga2V5cy4KKyAgICAgICAgICoKKyAgICAgICAgICogQHNlZSAjRVhUUkFfT0ZGTElORQorICAgICAgICAgKiBAc2VlICNFWFRSQV9TVUdHRVNURUQKKyAgICAgICAgICovCisgICAgICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIEVYVFJBX1JFQ0VOVCA9ICJhbmRyb2lkLnNlcnZpY2UubWVkaWEuZXh0cmEuUkVDRU5UIjsKKworICAgICAgICAvKioKKyAgICAgICAgICogVGhlIGxvb2t1cCBrZXkgZm9yIGEgYm9vbGVhbiB0aGF0IGluZGljYXRlcyB3aGV0aGVyIHRoZSBicm93c2VyIHNlcnZpY2Ugc2hvdWxkIHJldHVybiBhCisgICAgICAgICAqIGJyb3dzZXIgcm9vdCBmb3Igb2ZmbGluZSBtZWRpYSBpdGVtcy4KKyAgICAgICAgICoKKyAgICAgICAgICogPHA+V2hlbiBjcmVhdGluZyBhIG1lZGlhIGJyb3dzZXIgZm9yIGEgZ2l2ZW4gbWVkaWEgYnJvd3NlciBzZXJ2aWNlLCB0aGlzIGtleSBjYW4gYmUKKyAgICAgICAgICogc3VwcGxpZWQgYXMgYSByb290IGhpbnQgZm9yIHJldHJpZXZpbmcgbWVkaWEgaXRlbXMgdGhhdCBhcmUgY2FuIGJlIHBsYXllZCB3aXRob3V0IGFuCisgICAgICAgICAqIGludGVybmV0IGNvbm5lY3Rpb24uCisgICAgICAgICAqIElmIHRoZSBtZWRpYSBicm93c2VyIHNlcnZpY2UgY2FuIHByb3ZpZGUgc3VjaCBtZWRpYSBpdGVtcywgdGhlIGltcGxlbWVudGF0aW9uIG11c3QgcmV0dXJuCisgICAgICAgICAqIHRoZSBrZXkgaW4gdGhlIHJvb3QgaGludCB3aGVuIHtAbGluayAjb25HZXRSb290KFN0cmluZywgaW50LCBCdW5kbGUpfSBpcyBjYWxsZWQgYmFjay4KKyAgICAgICAgICoKKyAgICAgICAgICogPHA+VGhlIHJvb3QgaGludCBtYXkgY29udGFpbiBtdWx0aXBsZSBrZXlzLgorICAgICAgICAgKgorICAgICAgICAgKiBAc2VlICNFWFRSQV9SRUNFTlQKKyAgICAgICAgICogQHNlZSAjRVhUUkFfU1VHR0VTVEVECisgICAgICAgICAqLworICAgICAgICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBFWFRSQV9PRkZMSU5FID0gImFuZHJvaWQuc2VydmljZS5tZWRpYS5leHRyYS5PRkZMSU5FIjsKKworICAgICAgICAvKioKKyAgICAgICAgICogVGhlIGxvb2t1cCBrZXkgZm9yIGEgYm9vbGVhbiB0aGF0IGluZGljYXRlcyB3aGV0aGVyIHRoZSBicm93c2VyIHNlcnZpY2Ugc2hvdWxkIHJldHVybiBhCisgICAgICAgICAqIGJyb3dzZXIgcm9vdCBmb3Igc3VnZ2VzdGVkIG1lZGlhIGl0ZW1zLgorICAgICAgICAgKgorICAgICAgICAgKiA8cD5XaGVuIGNyZWF0aW5nIGEgbWVkaWEgYnJvd3NlciBmb3IgYSBnaXZlbiBtZWRpYSBicm93c2VyIHNlcnZpY2UsIHRoaXMga2V5IGNhbiBiZQorICAgICAgICAgKiBzdXBwbGllZCBhcyBhIHJvb3QgaGludCBmb3IgcmV0cmlldmluZyB0aGUgbWVkaWEgaXRlbXMgc3VnZ2VzdGVkIGJ5IHRoZSBtZWRpYSBicm93c2VyCisgICAgICAgICAqIHNlcnZpY2UuIFRoZSBsaXN0IG9mIG1lZGlhIGl0ZW1zIHBhc3NlZCBpbiB7QGxpbmsgYW5kcm9pZC5tZWRpYS5icm93c2UuTWVkaWFCcm93c2VyLlN1YnNjcmlwdGlvbkNhbGxiYWNrI29uQ2hpbGRyZW5Mb2FkZWQoU3RyaW5nLCBMaXN0KX0KKyAgICAgICAgICogaXMgY29uc2lkZXJlZCBvcmRlcmVkIGJ5IHJlbGV2YW5jZSwgZmlyc3QgYmVpbmcgdGhlIHRvcCBzdWdnZXN0aW9uLgorICAgICAgICAgKiBJZiB0aGUgbWVkaWEgYnJvd3NlciBzZXJ2aWNlIGNhbiBwcm92aWRlIHN1Y2ggbWVkaWEgaXRlbXMsIHRoZSBpbXBsZW1lbnRhdGlvbiBtdXN0IHJldHVybgorICAgICAgICAgKiB0aGUga2V5IGluIHRoZSByb290IGhpbnQgd2hlbiB7QGxpbmsgI29uR2V0Um9vdChTdHJpbmcsIGludCwgQnVuZGxlKX0gaXMgY2FsbGVkIGJhY2suCisgICAgICAgICAqCisgICAgICAgICAqIDxwPlRoZSByb290IGhpbnQgbWF5IGNvbnRhaW4gbXVsdGlwbGUga2V5cy4KKyAgICAgICAgICoKKyAgICAgICAgICogQHNlZSAjRVhUUkFfUkVDRU5UCisgICAgICAgICAqIEBzZWUgI0VYVFJBX09GRkxJTkUKKyAgICAgICAgICovCisgICAgICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIEVYVFJBX1NVR0dFU1RFRCA9ICJhbmRyb2lkLnNlcnZpY2UubWVkaWEuZXh0cmEuU1VHR0VTVEVEIjsKKworICAgICAgICBmaW5hbCBwcml2YXRlIFN0cmluZyBtUm9vdElkOworICAgICAgICBmaW5hbCBwcml2YXRlIEJ1bmRsZSBtRXh0cmFzOworCisgICAgICAgIC8qKgorICAgICAgICAgKiBDb25zdHJ1Y3RzIGEgYnJvd3NlciByb290LgorICAgICAgICAgKiBAcGFyYW0gcm9vdElkIFRoZSByb290IGlkIGZvciBicm93c2luZy4KKyAgICAgICAgICogQHBhcmFtIGV4dHJhcyBBbnkgZXh0cmFzIGFib3V0IHRoZSBicm93c2VyIHNlcnZpY2UuCisgICAgICAgICAqLworICAgICAgICBwdWJsaWMgQnJvd3NlclJvb3QoQE5vbk51bGwgU3RyaW5nIHJvb3RJZCwgQE51bGxhYmxlIEJ1bmRsZSBleHRyYXMpIHsKKyAgICAgICAgICAgIGlmIChyb290SWQgPT0gbnVsbCkgeworICAgICAgICAgICAgICAgIHRocm93IG5ldyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oIlRoZSByb290IGlkIGluIEJyb3dzZXJSb290IGNhbm5vdCBiZSBudWxsLiAiICsKKyAgICAgICAgICAgICAgICAgICAgICAgICJVc2UgbnVsbCBmb3IgQnJvd3NlclJvb3QgaW5zdGVhZC4iKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIG1Sb290SWQgPSByb290SWQ7CisgICAgICAgICAgICBtRXh0cmFzID0gZXh0cmFzOworICAgICAgICB9CisKKyAgICAgICAgLyoqCisgICAgICAgICAqIEdldHMgdGhlIHJvb3QgaWQgZm9yIGJyb3dzaW5nLgorICAgICAgICAgKi8KKyAgICAgICAgcHVibGljIFN0cmluZyBnZXRSb290SWQoKSB7CisgICAgICAgICAgICByZXR1cm4gbVJvb3RJZDsKKyAgICAgICAgfQorCisgICAgICAgIC8qKgorICAgICAgICAgKiBHZXRzIGFueSBleHRyYXMgYWJvdXQgdGhlIGJyb3dzZXIgc2VydmljZS4KKyAgICAgICAgICovCisgICAgICAgIHB1YmxpYyBCdW5kbGUgZ2V0RXh0cmFzKCkgeworICAgICAgICAgICAgcmV0dXJuIG1FeHRyYXM7CisgICAgICAgIH0KKyAgICB9Cit9CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9NZWRpYUNvbXBvbmVudHMvcHJvZ3VhcmQuY2ZnIGIvcGFja2FnZXMvTWVkaWFDb21wb25lbnRzL3Byb2d1YXJkLmNmZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDdiZjczMC4uMDAwMDAwMAotLS0gYS9wYWNrYWdlcy9NZWRpYUNvbXBvbmVudHMvcHJvZ3VhcmQuY2ZnCisrKyAvZGV2L251bGwKQEAgLTEsMjAgKzAsMCBAQAotIwotIyBDb3B5cmlnaHQgMjAxNyBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0Ci0jCi0jIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwotIyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCi0jIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotIwotIyAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotIwotIyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCi0jIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCi0jIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgotIyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCi0jIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgotIwotCi0jIEtlZXAgZW50cnkgcG9pbnQgZm9yIHVwZGF0YWJsZSBKYXZhIGNsYXNzZXMKLS1rZWVwIHB1YmxpYyBjbGFzcyBjb20uYW5kcm9pZC5tZWRpYS51cGRhdGUuQXBpRmFjdG9yeSB7Ci0gICBwdWJsaWMgc3RhdGljIGNvbS5hbmRyb2lkLm1lZGlhLnVwZGF0ZS5BcGlGYWN0b3J5IGluaXRpYWxpemUoYW5kcm9pZC5jb250ZW50LnBtLkFwcGxpY2F0aW9uSW5mbyk7Ci19CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9NZWRpYUNvbXBvbmVudHMvcmVzL2RyYXdhYmxlLWhkcGkvaWNfYXVkaW90cmFja19kYXJrLnBuZyBiL3BhY2thZ2VzL01lZGlhQ29tcG9uZW50cy9yZXMvZHJhd2FibGUtaGRwaS9pY19hdWRpb3RyYWNrX2RhcmsucG5nCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxN2ZkNTFmLi4wMDAwMDAwCi0tLSBhL3BhY2thZ2VzL01lZGlhQ29tcG9uZW50cy9yZXMvZHJhd2FibGUtaGRwaS9pY19hdWRpb3RyYWNrX2RhcmsucG5nCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvTWVkaWFDb21wb25lbnRzL3Jlcy9kcmF3YWJsZS1oZHBpL2ljX2F1ZGlvdHJhY2tfbGlnaHQucG5nIGIvcGFja2FnZXMvTWVkaWFDb21wb25lbnRzL3Jlcy9kcmF3YWJsZS1oZHBpL2ljX2F1ZGlvdHJhY2tfbGlnaHQucG5nCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkN2M4MjUyLi4wMDAwMDAwCi0tLSBhL3BhY2thZ2VzL01lZGlhQ29tcG9uZW50cy9yZXMvZHJhd2FibGUtaGRwaS9pY19hdWRpb3RyYWNrX2xpZ2h0LnBuZworKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3BhY2thZ2VzL01lZGlhQ29tcG9uZW50cy9yZXMvZHJhd2FibGUtaGRwaS9pY19kaWFsb2dfY2xvc2VfZGFyay5wbmcgYi9wYWNrYWdlcy9NZWRpYUNvbXBvbmVudHMvcmVzL2RyYXdhYmxlLWhkcGkvaWNfZGlhbG9nX2Nsb3NlX2RhcmsucG5nCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5MjhkZGVhLi4wMDAwMDAwCi0tLSBhL3BhY2thZ2VzL01lZGlhQ29tcG9uZW50cy9yZXMvZHJhd2FibGUtaGRwaS9pY19kaWFsb2dfY2xvc2VfZGFyay5wbmcKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9wYWNrYWdlcy9NZWRpYUNvbXBvbmVudHMvcmVzL2RyYXdhYmxlLWhkcGkvaWNfZGlhbG9nX2Nsb3NlX2xpZ2h0LnBuZyBiL3BhY2thZ2VzL01lZGlhQ29tcG9uZW50cy9yZXMvZHJhd2FibGUtaGRwaS9pY19kaWFsb2dfY2xvc2VfbGlnaHQucG5nCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxYTljZDc1Li4wMDAwMDAwCi0tLSBhL3BhY2thZ2VzL01lZGlhQ29tcG9uZW50cy9yZXMvZHJhd2FibGUtaGRwaS9pY19kaWFsb2dfY2xvc2VfbGlnaHQucG5nCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvTWVkaWFDb21wb25lbnRzL3Jlcy9kcmF3YWJsZS1oZHBpL2ljX21lZGlhX3BhdXNlX2RhcmsucG5nIGIvcGFja2FnZXMvTWVkaWFDb21wb25lbnRzL3Jlcy9kcmF3YWJsZS1oZHBpL2ljX21lZGlhX3BhdXNlX2RhcmsucG5nCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3MTkyYWQ0Li4wMDAwMDAwCi0tLSBhL3BhY2thZ2VzL01lZGlhQ29tcG9uZW50cy9yZXMvZHJhd2FibGUtaGRwaS9pY19tZWRpYV9wYXVzZV9kYXJrLnBuZworKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3BhY2thZ2VzL01lZGlhQ29tcG9uZW50cy9yZXMvZHJhd2FibGUtaGRwaS9pY19tZWRpYV9wYXVzZV9saWdodC5wbmcgYi9wYWNrYWdlcy9NZWRpYUNvbXBvbmVudHMvcmVzL2RyYXdhYmxlLWhkcGkvaWNfbWVkaWFfcGF1c2VfbGlnaHQucG5nCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiYjcwN2VhLi4wMDAwMDAwCi0tLSBhL3BhY2thZ2VzL01lZGlhQ29tcG9uZW50cy9yZXMvZHJhd2FibGUtaGRwaS9pY19tZWRpYV9wYXVzZV9saWdodC5wbmcKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9wYWNrYWdlcy9NZWRpYUNvbXBvbmVudHMvcmVzL2RyYXdhYmxlLWhkcGkvaWNfbWVkaWFfcGxheV9kYXJrLnBuZyBiL3BhY2thZ2VzL01lZGlhQ29tcG9uZW50cy9yZXMvZHJhd2FibGUtaGRwaS9pY19tZWRpYV9wbGF5X2RhcmsucG5nCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwYzMyZDAwLi4wMDAwMDAwCi0tLSBhL3BhY2thZ2VzL01lZGlhQ29tcG9uZW50cy9yZXMvZHJhd2FibGUtaGRwaS9pY19tZWRpYV9wbGF5X2RhcmsucG5nCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvTWVkaWFDb21wb25lbnRzL3Jlcy9kcmF3YWJsZS1oZHBpL2ljX21lZGlhX3BsYXlfbGlnaHQucG5nIGIvcGFja2FnZXMvTWVkaWFDb21wb25lbnRzL3Jlcy9kcmF3YWJsZS1oZHBpL2ljX21lZGlhX3BsYXlfbGlnaHQucG5nCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1MzQ1ZWUzLi4wMDAwMDAwCi0tLSBhL3BhY2thZ2VzL01lZGlhQ29tcG9uZW50cy9yZXMvZHJhd2FibGUtaGRwaS9pY19tZWRpYV9wbGF5X2xpZ2h0LnBuZworKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3BhY2thZ2VzL01lZGlhQ29tcG9uZW50cy9yZXMvZHJhd2FibGUtaGRwaS9pY19tZWRpYV9zdG9wX2RhcmsucG5nIGIvcGFja2FnZXMvTWVkaWFDb21wb25lbnRzL3Jlcy9kcmF3YWJsZS1oZHBpL2ljX21lZGlhX3N0b3BfZGFyay5wbmcKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDgwMWQzNDEuLjAwMDAwMDAKLS0tIGEvcGFja2FnZXMvTWVkaWFDb21wb25lbnRzL3Jlcy9kcmF3YWJsZS1oZHBpL2ljX21lZGlhX3N0b3BfZGFyay5wbmcKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9wYWNrYWdlcy9NZWRpYUNvbXBvbmVudHMvcmVzL2RyYXdhYmxlLWhkcGkvaWNfbWVkaWFfc3RvcF9saWdodC5wbmcgYi9wYWNrYWdlcy9NZWRpYUNvbXBvbmVudHMvcmVzL2RyYXdhYmxlLWhkcGkvaWNfbWVkaWFfc3RvcF9saWdodC5wbmcKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDlkNmI2NWQuLjAwMDAwMDAKLS0tIGEvcGFja2FnZXMvTWVkaWFDb21wb25lbnRzL3Jlcy9kcmF3YWJsZS1oZHBpL2ljX21lZGlhX3N0b3BfbGlnaHQucG5nCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvTWVkaWFDb21wb25lbnRzL3Jlcy9kcmF3YWJsZS1oZHBpL2ljX21lZGlhX3N1YnRpdGxlX2Rpc2FibGVkLnBuZyBiL3BhY2thZ2VzL01lZGlhQ29tcG9uZW50cy9yZXMvZHJhd2FibGUtaGRwaS9pY19tZWRpYV9zdWJ0aXRsZV9kaXNhYmxlZC5wbmcKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAzNTRmNjEuLjAwMDAwMDAKLS0tIGEvcGFja2FnZXMvTWVkaWFDb21wb25lbnRzL3Jlcy9kcmF3YWJsZS1oZHBpL2ljX21lZGlhX3N1YnRpdGxlX2Rpc2FibGVkLnBuZworKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3BhY2thZ2VzL01lZGlhQ29tcG9uZW50cy9yZXMvZHJhd2FibGUtaGRwaS9pY19tZWRpYV9zdWJ0aXRsZV9lbmFibGVkLnBuZyBiL3BhY2thZ2VzL01lZGlhQ29tcG9uZW50cy9yZXMvZHJhd2FibGUtaGRwaS9pY19tZWRpYV9zdWJ0aXRsZV9lbmFibGVkLnBuZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNWY4ZmViZS4uMDAwMDAwMAotLS0gYS9wYWNrYWdlcy9NZWRpYUNvbXBvbmVudHMvcmVzL2RyYXdhYmxlLWhkcGkvaWNfbWVkaWFfc3VidGl0bGVfZW5hYmxlZC5wbmcKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9wYWNrYWdlcy9NZWRpYUNvbXBvbmVudHMvcmVzL2RyYXdhYmxlLWhkcGkvaWNfbXJfYnV0dG9uX2Rpc2FibGVkX2RhcmsucG5nIGIvcGFja2FnZXMvTWVkaWFDb21wb25lbnRzL3Jlcy9kcmF3YWJsZS1oZHBpL2ljX21yX2J1dHRvbl9kaXNhYmxlZF9kYXJrLnBuZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOGFkMzA1ZC4uMDAwMDAwMAotLS0gYS9wYWNrYWdlcy9NZWRpYUNvbXBvbmVudHMvcmVzL2RyYXdhYmxlLWhkcGkvaWNfbXJfYnV0dG9uX2Rpc2FibGVkX2RhcmsucG5nCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvTWVkaWFDb21wb25lbnRzL3Jlcy9kcmF3YWJsZS1oZHBpL2ljX21yX2J1dHRvbl9kaXNhYmxlZF9saWdodC5wbmcgYi9wYWNrYWdlcy9NZWRpYUNvbXBvbmVudHMvcmVzL2RyYXdhYmxlLWhkcGkvaWNfbXJfYnV0dG9uX2Rpc2FibGVkX2xpZ2h0LnBuZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODg3ZmRlNC4uMDAwMDAwMAotLS0gYS9wYWNrYWdlcy9NZWRpYUNvbXBvbmVudHMvcmVzL2RyYXdhYmxlLWhkcGkvaWNfbXJfYnV0dG9uX2Rpc2FibGVkX2xpZ2h0LnBuZworKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3BhY2thZ2VzL01lZGlhQ29tcG9uZW50cy9yZXMvZHJhd2FibGUtaGRwaS9pY19tcl9idXR0b25fZGlzY29ubmVjdGVkX2RhcmsucG5nIGIvcGFja2FnZXMvTWVkaWFDb21wb25lbnRzL3Jlcy9kcmF3YWJsZS1oZHBpL2ljX21yX2J1dHRvbl9kaXNjb25uZWN0ZWRfZGFyay5wbmcKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDU3MzlkZjcuLjAwMDAwMDAKLS0tIGEvcGFja2FnZXMvTWVkaWFDb21wb25lbnRzL3Jlcy9kcmF3YWJsZS1oZHBpL2ljX21yX2J1dHRvbl9kaXNjb25uZWN0ZWRfZGFyay5wbmcKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9wYWNrYWdlcy9NZWRpYUNvbXBvbmVudHMvcmVzL2RyYXdhYmxlLWhkcGkvaWNfbXJfYnV0dG9uX2Rpc2Nvbm5lY3RlZF9saWdodC5wbmcgYi9wYWNrYWdlcy9NZWRpYUNvbXBvbmVudHMvcmVzL2RyYXdhYmxlLWhkcGkvaWNfbXJfYnV0dG9uX2Rpc2Nvbm5lY3RlZF9saWdodC5wbmcKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDU4YzM0NGEuLjAwMDAwMDAKLS0tIGEvcGFja2FnZXMvTWVkaWFDb21wb25lbnRzL3Jlcy9kcmF3YWJsZS1oZHBpL2ljX21yX2J1dHRvbl9kaXNjb25uZWN0ZWRfbGlnaHQucG5nCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvTWVkaWFDb21wb25lbnRzL3Jlcy9kcmF3YWJsZS1oZHBpL2ljX21yX2J1dHRvbl9ncmV5LnBuZyBiL3BhY2thZ2VzL01lZGlhQ29tcG9uZW50cy9yZXMvZHJhd2FibGUtaGRwaS9pY19tcl9idXR0b25fZ3JleS5wbmcKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDFhMDM0MjAuLjAwMDAwMDAKLS0tIGEvcGFja2FnZXMvTWVkaWFDb21wb25lbnRzL3Jlcy9kcmF3YWJsZS1oZHBpL2ljX21yX2J1dHRvbl9ncmV5LnBuZworKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3BhY2thZ2VzL01lZGlhQ29tcG9uZW50cy9yZXMvZHJhd2FibGUtaGRwaS9pY192b2xfdHlwZV9zcGVha2VyX2RhcmsucG5nIGIvcGFja2FnZXMvTWVkaWFDb21wb25lbnRzL3Jlcy9kcmF3YWJsZS1oZHBpL2ljX3ZvbF90eXBlX3NwZWFrZXJfZGFyay5wbmcKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDcyM2U0NTUuLjAwMDAwMDAKLS0tIGEvcGFja2FnZXMvTWVkaWFDb21wb25lbnRzL3Jlcy9kcmF3YWJsZS1oZHBpL2ljX3ZvbF90eXBlX3NwZWFrZXJfZGFyay5wbmcKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9wYWNrYWdlcy9NZWRpYUNvbXBvbmVudHMvcmVzL2RyYXdhYmxlLWhkcGkvaWNfdm9sX3R5cGVfc3BlYWtlcl9ncm91cF9kYXJrLnBuZyBiL3BhY2thZ2VzL01lZGlhQ29tcG9uZW50cy9yZXMvZHJhd2FibGUtaGRwaS9pY192b2xfdHlwZV9zcGVha2VyX2dyb3VwX2RhcmsucG5nCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDc1NQppbmRleCA0MGMyNWEzLi4wMDAwMDAwCi0tLSBhL3BhY2thZ2VzL01lZGlhQ29tcG9uZW50cy9yZXMvZHJhd2FibGUtaGRwaS9pY192b2xfdHlwZV9zcGVha2VyX2dyb3VwX2RhcmsucG5nCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvTWVkaWFDb21wb25lbnRzL3Jlcy9kcmF3YWJsZS1oZHBpL2ljX3ZvbF90eXBlX3NwZWFrZXJfZ3JvdXBfbGlnaHQucG5nIGIvcGFja2FnZXMvTWVkaWFDb21wb25lbnRzL3Jlcy9kcmF3YWJsZS1oZHBpL2ljX3ZvbF90eXBlX3NwZWFrZXJfZ3JvdXBfbGlnaHQucG5nCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDc1NQppbmRleCBhZmRiOWMxLi4wMDAwMDAwCi0tLSBhL3BhY2thZ2VzL01lZGlhQ29tcG9uZW50cy9yZXMvZHJhd2FibGUtaGRwaS9pY192b2xfdHlwZV9zcGVha2VyX2dyb3VwX2xpZ2h0LnBuZworKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3BhY2thZ2VzL01lZGlhQ29tcG9uZW50cy9yZXMvZHJhd2FibGUtaGRwaS9pY192b2xfdHlwZV9zcGVha2VyX2xpZ2h0LnBuZyBiL3BhY2thZ2VzL01lZGlhQ29tcG9uZW50cy9yZXMvZHJhd2FibGUtaGRwaS9pY192b2xfdHlwZV9zcGVha2VyX2xpZ2h0LnBuZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggODQ2YzEwOS4uMDAwMDAwMAotLS0gYS9wYWNrYWdlcy9NZWRpYUNvbXBvbmVudHMvcmVzL2RyYXdhYmxlLWhkcGkvaWNfdm9sX3R5cGVfc3BlYWtlcl9saWdodC5wbmcKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9wYWNrYWdlcy9NZWRpYUNvbXBvbmVudHMvcmVzL2RyYXdhYmxlLWhkcGkvaWNfdm9sX3R5cGVfdHZfZGFyay5wbmcgYi9wYWNrYWdlcy9NZWRpYUNvbXBvbmVudHMvcmVzL2RyYXdhYmxlLWhkcGkvaWNfdm9sX3R5cGVfdHZfZGFyay5wbmcKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDMzYmY0ODQuLjAwMDAwMDAKLS0tIGEvcGFja2FnZXMvTWVkaWFDb21wb25lbnRzL3Jlcy9kcmF3YWJsZS1oZHBpL2ljX3ZvbF90eXBlX3R2X2RhcmsucG5nCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvTWVkaWFDb21wb25lbnRzL3Jlcy9kcmF3YWJsZS1oZHBpL2ljX3ZvbF90eXBlX3R2X2xpZ2h0LnBuZyBiL3BhY2thZ2VzL01lZGlhQ29tcG9uZW50cy9yZXMvZHJhd2FibGUtaGRwaS9pY192b2xfdHlwZV90dl9saWdodC5wbmcKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IGM5MTFiNWMuLjAwMDAwMDAKLS0tIGEvcGFja2FnZXMvTWVkaWFDb21wb25lbnRzL3Jlcy9kcmF3YWJsZS1oZHBpL2ljX3ZvbF90eXBlX3R2X2xpZ2h0LnBuZworKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3BhY2thZ2VzL01lZGlhQ29tcG9uZW50cy9yZXMvZHJhd2FibGUtbWRwaS9pY19hdWRpb3RyYWNrX2RhcmsucG5nIGIvcGFja2FnZXMvTWVkaWFDb21wb25lbnRzL3Jlcy9kcmF3YWJsZS1tZHBpL2ljX2F1ZGlvdHJhY2tfZGFyay5wbmcKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGU5NGVkNTAuLjAwMDAwMDAKLS0tIGEvcGFja2FnZXMvTWVkaWFDb21wb25lbnRzL3Jlcy9kcmF3YWJsZS1tZHBpL2ljX2F1ZGlvdHJhY2tfZGFyay5wbmcKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9wYWNrYWdlcy9NZWRpYUNvbXBvbmVudHMvcmVzL2RyYXdhYmxlLW1kcGkvaWNfYXVkaW90cmFja19saWdodC5wbmcgYi9wYWNrYWdlcy9NZWRpYUNvbXBvbmVudHMvcmVzL2RyYXdhYmxlLW1kcGkvaWNfYXVkaW90cmFja19saWdodC5wbmcKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDJjZjdlMGMuLjAwMDAwMDAKLS0tIGEvcGFja2FnZXMvTWVkaWFDb21wb25lbnRzL3Jlcy9kcmF3YWJsZS1tZHBpL2ljX2F1ZGlvdHJhY2tfbGlnaHQucG5nCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvTWVkaWFDb21wb25lbnRzL3Jlcy9kcmF3YWJsZS1tZHBpL2ljX2RpYWxvZ19jbG9zZV9kYXJrLnBuZyBiL3BhY2thZ2VzL01lZGlhQ29tcG9uZW50cy9yZXMvZHJhd2FibGUtbWRwaS9pY19kaWFsb2dfY2xvc2VfZGFyay5wbmcKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDY2NTU4YTguLjAwMDAwMDAKLS0tIGEvcGFja2FnZXMvTWVkaWFDb21wb25lbnRzL3Jlcy9kcmF3YWJsZS1tZHBpL2ljX2RpYWxvZ19jbG9zZV9kYXJrLnBuZworKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3BhY2thZ2VzL01lZGlhQ29tcG9uZW50cy9yZXMvZHJhd2FibGUtbWRwaS9pY19kaWFsb2dfY2xvc2VfbGlnaHQucG5nIGIvcGFja2FnZXMvTWVkaWFDb21wb25lbnRzL3Jlcy9kcmF3YWJsZS1tZHBpL2ljX2RpYWxvZ19jbG9zZV9saWdodC5wbmcKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQwYTFhODQuLjAwMDAwMDAKLS0tIGEvcGFja2FnZXMvTWVkaWFDb21wb25lbnRzL3Jlcy9kcmF3YWJsZS1tZHBpL2ljX2RpYWxvZ19jbG9zZV9saWdodC5wbmcKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9wYWNrYWdlcy9NZWRpYUNvbXBvbmVudHMvcmVzL2RyYXdhYmxlLW1kcGkvaWNfbWVkaWFfcGF1c2VfZGFyay5wbmcgYi9wYWNrYWdlcy9NZWRpYUNvbXBvbmVudHMvcmVzL2RyYXdhYmxlLW1kcGkvaWNfbWVkaWFfcGF1c2VfZGFyay5wbmcKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGY0OWFlZDcuLjAwMDAwMDAKLS0tIGEvcGFja2FnZXMvTWVkaWFDb21wb25lbnRzL3Jlcy9kcmF3YWJsZS1tZHBpL2ljX21lZGlhX3BhdXNlX2RhcmsucG5nCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvTWVkaWFDb21wb25lbnRzL3Jlcy9kcmF3YWJsZS1tZHBpL2ljX21lZGlhX3BhdXNlX2xpZ2h0LnBuZyBiL3BhY2thZ2VzL01lZGlhQ29tcG9uZW50cy9yZXMvZHJhd2FibGUtbWRwaS9pY19tZWRpYV9wYXVzZV9saWdodC5wbmcKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDc0MDY4ZWEuLjAwMDAwMDAKLS0tIGEvcGFja2FnZXMvTWVkaWFDb21wb25lbnRzL3Jlcy9kcmF3YWJsZS1tZHBpL2ljX21lZGlhX3BhdXNlX2xpZ2h0LnBuZworKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3BhY2thZ2VzL01lZGlhQ29tcG9uZW50cy9yZXMvZHJhd2FibGUtbWRwaS9pY19tZWRpYV9wbGF5X2RhcmsucG5nIGIvcGFja2FnZXMvTWVkaWFDb21wb25lbnRzL3Jlcy9kcmF3YWJsZS1tZHBpL2ljX21lZGlhX3BsYXlfZGFyay5wbmcKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDljYzc3N2MuLjAwMDAwMDAKLS0tIGEvcGFja2FnZXMvTWVkaWFDb21wb25lbnRzL3Jlcy9kcmF3YWJsZS1tZHBpL2ljX21lZGlhX3BsYXlfZGFyay5wbmcKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9wYWNrYWdlcy9NZWRpYUNvbXBvbmVudHMvcmVzL2RyYXdhYmxlLW1kcGkvaWNfbWVkaWFfcGxheV9saWdodC5wbmcgYi9wYWNrYWdlcy9NZWRpYUNvbXBvbmVudHMvcmVzL2RyYXdhYmxlLW1kcGkvaWNfbWVkaWFfcGxheV9saWdodC5wbmcKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGYyMDg3OTUuLjAwMDAwMDAKLS0tIGEvcGFja2FnZXMvTWVkaWFDb21wb25lbnRzL3Jlcy9kcmF3YWJsZS1tZHBpL2ljX21lZGlhX3BsYXlfbGlnaHQucG5nCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvTWVkaWFDb21wb25lbnRzL3Jlcy9kcmF3YWJsZS1tZHBpL2ljX21lZGlhX3N0b3BfZGFyay5wbmcgYi9wYWNrYWdlcy9NZWRpYUNvbXBvbmVudHMvcmVzL2RyYXdhYmxlLW1kcGkvaWNfbWVkaWFfc3RvcF9kYXJrLnBuZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggM2FkMmM5Yy4uMDAwMDAwMAotLS0gYS9wYWNrYWdlcy9NZWRpYUNvbXBvbmVudHMvcmVzL2RyYXdhYmxlLW1kcGkvaWNfbWVkaWFfc3RvcF9kYXJrLnBuZworKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3BhY2thZ2VzL01lZGlhQ29tcG9uZW50cy9yZXMvZHJhd2FibGUtbWRwaS9pY19tZWRpYV9zdG9wX2xpZ2h0LnBuZyBiL3BhY2thZ2VzL01lZGlhQ29tcG9uZW50cy9yZXMvZHJhd2FibGUtbWRwaS9pY19tZWRpYV9zdG9wX2xpZ2h0LnBuZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjAwMmFiNy4uMDAwMDAwMAotLS0gYS9wYWNrYWdlcy9NZWRpYUNvbXBvbmVudHMvcmVzL2RyYXdhYmxlLW1kcGkvaWNfbWVkaWFfc3RvcF9saWdodC5wbmcKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9wYWNrYWdlcy9NZWRpYUNvbXBvbmVudHMvcmVzL2RyYXdhYmxlLW1kcGkvaWNfbWVkaWFfc3VidGl0bGVfZGlzYWJsZWQucG5nIGIvcGFja2FnZXMvTWVkaWFDb21wb25lbnRzL3Jlcy9kcmF3YWJsZS1tZHBpL2ljX21lZGlhX3N1YnRpdGxlX2Rpc2FibGVkLnBuZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDM1NGY2MS4uMDAwMDAwMAotLS0gYS9wYWNrYWdlcy9NZWRpYUNvbXBvbmVudHMvcmVzL2RyYXdhYmxlLW1kcGkvaWNfbWVkaWFfc3VidGl0bGVfZGlzYWJsZWQucG5nCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvTWVkaWFDb21wb25lbnRzL3Jlcy9kcmF3YWJsZS1tZHBpL2ljX21lZGlhX3N1YnRpdGxlX2VuYWJsZWQucG5nIGIvcGFja2FnZXMvTWVkaWFDb21wb25lbnRzL3Jlcy9kcmF3YWJsZS1tZHBpL2ljX21lZGlhX3N1YnRpdGxlX2VuYWJsZWQucG5nCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1ZjhmZWJlLi4wMDAwMDAwCi0tLSBhL3BhY2thZ2VzL01lZGlhQ29tcG9uZW50cy9yZXMvZHJhd2FibGUtbWRwaS9pY19tZWRpYV9zdWJ0aXRsZV9lbmFibGVkLnBuZworKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3BhY2thZ2VzL01lZGlhQ29tcG9uZW50cy9yZXMvZHJhd2FibGUtbWRwaS9pY19tcl9idXR0b25fZGlzYWJsZWRfZGFyay5wbmcgYi9wYWNrYWdlcy9NZWRpYUNvbXBvbmVudHMvcmVzL2RyYXdhYmxlLW1kcGkvaWNfbXJfYnV0dG9uX2Rpc2FibGVkX2RhcmsucG5nCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0NDQ2ZWE0Li4wMDAwMDAwCi0tLSBhL3BhY2thZ2VzL01lZGlhQ29tcG9uZW50cy9yZXMvZHJhd2FibGUtbWRwaS9pY19tcl9idXR0b25fZGlzYWJsZWRfZGFyay5wbmcKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9wYWNrYWdlcy9NZWRpYUNvbXBvbmVudHMvcmVzL2RyYXdhYmxlLW1kcGkvaWNfbXJfYnV0dG9uX2Rpc2FibGVkX2xpZ2h0LnBuZyBiL3BhY2thZ2VzL01lZGlhQ29tcG9uZW50cy9yZXMvZHJhd2FibGUtbWRwaS9pY19tcl9idXR0b25fZGlzYWJsZWRfbGlnaHQucG5nCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0ZDc5MGM2Li4wMDAwMDAwCi0tLSBhL3BhY2thZ2VzL01lZGlhQ29tcG9uZW50cy9yZXMvZHJhd2FibGUtbWRwaS9pY19tcl9idXR0b25fZGlzYWJsZWRfbGlnaHQucG5nCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvTWVkaWFDb21wb25lbnRzL3Jlcy9kcmF3YWJsZS1tZHBpL2ljX21yX2J1dHRvbl9kaXNjb25uZWN0ZWRfZGFyay5wbmcgYi9wYWNrYWdlcy9NZWRpYUNvbXBvbmVudHMvcmVzL2RyYXdhYmxlLW1kcGkvaWNfbXJfYnV0dG9uX2Rpc2Nvbm5lY3RlZF9kYXJrLnBuZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzQwMWRjMC4uMDAwMDAwMAotLS0gYS9wYWNrYWdlcy9NZWRpYUNvbXBvbmVudHMvcmVzL2RyYXdhYmxlLW1kcGkvaWNfbXJfYnV0dG9uX2Rpc2Nvbm5lY3RlZF9kYXJrLnBuZworKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3BhY2thZ2VzL01lZGlhQ29tcG9uZW50cy9yZXMvZHJhd2FibGUtbWRwaS9pY19tcl9idXR0b25fZGlzY29ubmVjdGVkX2xpZ2h0LnBuZyBiL3BhY2thZ2VzL01lZGlhQ29tcG9uZW50cy9yZXMvZHJhd2FibGUtbWRwaS9pY19tcl9idXR0b25fZGlzY29ubmVjdGVkX2xpZ2h0LnBuZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTI0ZDU4Ni4uMDAwMDAwMAotLS0gYS9wYWNrYWdlcy9NZWRpYUNvbXBvbmVudHMvcmVzL2RyYXdhYmxlLW1kcGkvaWNfbXJfYnV0dG9uX2Rpc2Nvbm5lY3RlZF9saWdodC5wbmcKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9wYWNrYWdlcy9NZWRpYUNvbXBvbmVudHMvcmVzL2RyYXdhYmxlLW1kcGkvaWNfbXJfYnV0dG9uX2dyZXkucG5nIGIvcGFja2FnZXMvTWVkaWFDb21wb25lbnRzL3Jlcy9kcmF3YWJsZS1tZHBpL2ljX21yX2J1dHRvbl9ncmV5LnBuZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggY2NiYjc3Mi4uMDAwMDAwMAotLS0gYS9wYWNrYWdlcy9NZWRpYUNvbXBvbmVudHMvcmVzL2RyYXdhYmxlLW1kcGkvaWNfbXJfYnV0dG9uX2dyZXkucG5nCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvTWVkaWFDb21wb25lbnRzL3Jlcy9kcmF3YWJsZS1tZHBpL2ljX3ZvbF90eXBlX3NwZWFrZXJfZGFyay5wbmcgYi9wYWNrYWdlcy9NZWRpYUNvbXBvbmVudHMvcmVzL2RyYXdhYmxlLW1kcGkvaWNfdm9sX3R5cGVfc3BlYWtlcl9kYXJrLnBuZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggN2NjOTg0NS4uMDAwMDAwMAotLS0gYS9wYWNrYWdlcy9NZWRpYUNvbXBvbmVudHMvcmVzL2RyYXdhYmxlLW1kcGkvaWNfdm9sX3R5cGVfc3BlYWtlcl9kYXJrLnBuZworKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3BhY2thZ2VzL01lZGlhQ29tcG9uZW50cy9yZXMvZHJhd2FibGUtbWRwaS9pY192b2xfdHlwZV9zcGVha2VyX2dyb3VwX2RhcmsucG5nIGIvcGFja2FnZXMvTWVkaWFDb21wb25lbnRzL3Jlcy9kcmF3YWJsZS1tZHBpL2ljX3ZvbF90eXBlX3NwZWFrZXJfZ3JvdXBfZGFyay5wbmcKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDIyNjE3ZTEuLjAwMDAwMDAKLS0tIGEvcGFja2FnZXMvTWVkaWFDb21wb25lbnRzL3Jlcy9kcmF3YWJsZS1tZHBpL2ljX3ZvbF90eXBlX3NwZWFrZXJfZ3JvdXBfZGFyay5wbmcKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9wYWNrYWdlcy9NZWRpYUNvbXBvbmVudHMvcmVzL2RyYXdhYmxlLW1kcGkvaWNfdm9sX3R5cGVfc3BlYWtlcl9ncm91cF9saWdodC5wbmcgYi9wYWNrYWdlcy9NZWRpYUNvbXBvbmVudHMvcmVzL2RyYXdhYmxlLW1kcGkvaWNfdm9sX3R5cGVfc3BlYWtlcl9ncm91cF9saWdodC5wbmcKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IGNlZmVmM2MuLjAwMDAwMDAKLS0tIGEvcGFja2FnZXMvTWVkaWFDb21wb25lbnRzL3Jlcy9kcmF3YWJsZS1tZHBpL2ljX3ZvbF90eXBlX3NwZWFrZXJfZ3JvdXBfbGlnaHQucG5nCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvTWVkaWFDb21wb25lbnRzL3Jlcy9kcmF3YWJsZS1tZHBpL2ljX3ZvbF90eXBlX3NwZWFrZXJfbGlnaHQucG5nIGIvcGFja2FnZXMvTWVkaWFDb21wb25lbnRzL3Jlcy9kcmF3YWJsZS1tZHBpL2ljX3ZvbF90eXBlX3NwZWFrZXJfbGlnaHQucG5nCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDc1NQppbmRleCA5YTAwNDdjLi4wMDAwMDAwCi0tLSBhL3BhY2thZ2VzL01lZGlhQ29tcG9uZW50cy9yZXMvZHJhd2FibGUtbWRwaS9pY192b2xfdHlwZV9zcGVha2VyX2xpZ2h0LnBuZworKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3BhY2thZ2VzL01lZGlhQ29tcG9uZW50cy9yZXMvZHJhd2FibGUtbWRwaS9pY192b2xfdHlwZV90dl9kYXJrLnBuZyBiL3BhY2thZ2VzL01lZGlhQ29tcG9uZW50cy9yZXMvZHJhd2FibGUtbWRwaS9pY192b2xfdHlwZV90dl9kYXJrLnBuZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggY2E1ZDZhMi4uMDAwMDAwMAotLS0gYS9wYWNrYWdlcy9NZWRpYUNvbXBvbmVudHMvcmVzL2RyYXdhYmxlLW1kcGkvaWNfdm9sX3R5cGVfdHZfZGFyay5wbmcKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9wYWNrYWdlcy9NZWRpYUNvbXBvbmVudHMvcmVzL2RyYXdhYmxlLW1kcGkvaWNfdm9sX3R5cGVfdHZfbGlnaHQucG5nIGIvcGFja2FnZXMvTWVkaWFDb21wb25lbnRzL3Jlcy9kcmF3YWJsZS1tZHBpL2ljX3ZvbF90eXBlX3R2X2xpZ2h0LnBuZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggODEzNDMxMC4uMDAwMDAwMAotLS0gYS9wYWNrYWdlcy9NZWRpYUNvbXBvbmVudHMvcmVzL2RyYXdhYmxlLW1kcGkvaWNfdm9sX3R5cGVfdHZfbGlnaHQucG5nCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvTWVkaWFDb21wb25lbnRzL3Jlcy9kcmF3YWJsZS14aGRwaS9pY19hdWRpb3RyYWNrX2RhcmsucG5nIGIvcGFja2FnZXMvTWVkaWFDb21wb25lbnRzL3Jlcy9kcmF3YWJsZS14aGRwaS9pY19hdWRpb3RyYWNrX2RhcmsucG5nCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiNWM4OTlmLi4wMDAwMDAwCi0tLSBhL3BhY2thZ2VzL01lZGlhQ29tcG9uZW50cy9yZXMvZHJhd2FibGUteGhkcGkvaWNfYXVkaW90cmFja19kYXJrLnBuZworKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3BhY2thZ2VzL01lZGlhQ29tcG9uZW50cy9yZXMvZHJhd2FibGUteGhkcGkvaWNfYXVkaW90cmFja19saWdodC5wbmcgYi9wYWNrYWdlcy9NZWRpYUNvbXBvbmVudHMvcmVzL2RyYXdhYmxlLXhoZHBpL2ljX2F1ZGlvdHJhY2tfbGlnaHQucG5nCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0Nzc4ZTAwLi4wMDAwMDAwCi0tLSBhL3BhY2thZ2VzL01lZGlhQ29tcG9uZW50cy9yZXMvZHJhd2FibGUteGhkcGkvaWNfYXVkaW90cmFja19saWdodC5wbmcKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9wYWNrYWdlcy9NZWRpYUNvbXBvbmVudHMvcmVzL2RyYXdhYmxlLXhoZHBpL2ljX2RpYWxvZ19jbG9zZV9kYXJrLnBuZyBiL3BhY2thZ2VzL01lZGlhQ29tcG9uZW50cy9yZXMvZHJhd2FibGUteGhkcGkvaWNfZGlhbG9nX2Nsb3NlX2RhcmsucG5nCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmOTkyZmM1Li4wMDAwMDAwCi0tLSBhL3BhY2thZ2VzL01lZGlhQ29tcG9uZW50cy9yZXMvZHJhd2FibGUteGhkcGkvaWNfZGlhbG9nX2Nsb3NlX2RhcmsucG5nCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvTWVkaWFDb21wb25lbnRzL3Jlcy9kcmF3YWJsZS14aGRwaS9pY19kaWFsb2dfY2xvc2VfbGlnaHQucG5nIGIvcGFja2FnZXMvTWVkaWFDb21wb25lbnRzL3Jlcy9kcmF3YWJsZS14aGRwaS9pY19kaWFsb2dfY2xvc2VfbGlnaHQucG5nCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkMzg4NGU2Li4wMDAwMDAwCi0tLSBhL3BhY2thZ2VzL01lZGlhQ29tcG9uZW50cy9yZXMvZHJhd2FibGUteGhkcGkvaWNfZGlhbG9nX2Nsb3NlX2xpZ2h0LnBuZworKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3BhY2thZ2VzL01lZGlhQ29tcG9uZW50cy9yZXMvZHJhd2FibGUteGhkcGkvaWNfbWVkaWFfcGF1c2VfZGFyay5wbmcgYi9wYWNrYWdlcy9NZWRpYUNvbXBvbmVudHMvcmVzL2RyYXdhYmxlLXhoZHBpL2ljX21lZGlhX3BhdXNlX2RhcmsucG5nCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2NjBhYzY1Li4wMDAwMDAwCi0tLSBhL3BhY2thZ2VzL01lZGlhQ29tcG9uZW50cy9yZXMvZHJhd2FibGUteGhkcGkvaWNfbWVkaWFfcGF1c2VfZGFyay5wbmcKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9wYWNrYWdlcy9NZWRpYUNvbXBvbmVudHMvcmVzL2RyYXdhYmxlLXhoZHBpL2ljX21lZGlhX3BhdXNlX2xpZ2h0LnBuZyBiL3BhY2thZ2VzL01lZGlhQ29tcG9uZW50cy9yZXMvZHJhd2FibGUteGhkcGkvaWNfbWVkaWFfcGF1c2VfbGlnaHQucG5nCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3OTIxMDRmLi4wMDAwMDAwCi0tLSBhL3BhY2thZ2VzL01lZGlhQ29tcG9uZW50cy9yZXMvZHJhd2FibGUteGhkcGkvaWNfbWVkaWFfcGF1c2VfbGlnaHQucG5nCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvTWVkaWFDb21wb25lbnRzL3Jlcy9kcmF3YWJsZS14aGRwaS9pY19tZWRpYV9wbGF5X2RhcmsucG5nIGIvcGFja2FnZXMvTWVkaWFDb21wb25lbnRzL3Jlcy9kcmF3YWJsZS14aGRwaS9pY19tZWRpYV9wbGF5X2RhcmsucG5nCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiZTVjMDYyLi4wMDAwMDAwCi0tLSBhL3BhY2thZ2VzL01lZGlhQ29tcG9uZW50cy9yZXMvZHJhd2FibGUteGhkcGkvaWNfbWVkaWFfcGxheV9kYXJrLnBuZworKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3BhY2thZ2VzL01lZGlhQ29tcG9uZW50cy9yZXMvZHJhd2FibGUteGhkcGkvaWNfbWVkaWFfcGxheV9saWdodC5wbmcgYi9wYWNrYWdlcy9NZWRpYUNvbXBvbmVudHMvcmVzL2RyYXdhYmxlLXhoZHBpL2ljX21lZGlhX3BsYXlfbGlnaHQucG5nCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkMTJkNDk1Li4wMDAwMDAwCi0tLSBhL3BhY2thZ2VzL01lZGlhQ29tcG9uZW50cy9yZXMvZHJhd2FibGUteGhkcGkvaWNfbWVkaWFfcGxheV9saWdodC5wbmcKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9wYWNrYWdlcy9NZWRpYUNvbXBvbmVudHMvcmVzL2RyYXdhYmxlLXhoZHBpL2ljX21lZGlhX3N0b3BfZGFyay5wbmcgYi9wYWNrYWdlcy9NZWRpYUNvbXBvbmVudHMvcmVzL2RyYXdhYmxlLXhoZHBpL2ljX21lZGlhX3N0b3BfZGFyay5wbmcKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDUyMzkzMzYuLjAwMDAwMDAKLS0tIGEvcGFja2FnZXMvTWVkaWFDb21wb25lbnRzL3Jlcy9kcmF3YWJsZS14aGRwaS9pY19tZWRpYV9zdG9wX2RhcmsucG5nCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvTWVkaWFDb21wb25lbnRzL3Jlcy9kcmF3YWJsZS14aGRwaS9pY19tZWRpYV9zdG9wX2xpZ2h0LnBuZyBiL3BhY2thZ2VzL01lZGlhQ29tcG9uZW50cy9yZXMvZHJhd2FibGUteGhkcGkvaWNfbWVkaWFfc3RvcF9saWdodC5wbmcKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDViYzVhNmMuLjAwMDAwMDAKLS0tIGEvcGFja2FnZXMvTWVkaWFDb21wb25lbnRzL3Jlcy9kcmF3YWJsZS14aGRwaS9pY19tZWRpYV9zdG9wX2xpZ2h0LnBuZworKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3BhY2thZ2VzL01lZGlhQ29tcG9uZW50cy9yZXMvZHJhd2FibGUteGhkcGkvaWNfbXJfYnV0dG9uX2Nvbm5lY3RlZF8wMF9kYXJrLnBuZyBiL3BhY2thZ2VzL01lZGlhQ29tcG9uZW50cy9yZXMvZHJhd2FibGUteGhkcGkvaWNfbXJfYnV0dG9uX2Nvbm5lY3RlZF8wMF9kYXJrLnBuZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjZkZDIxNC4uMDAwMDAwMAotLS0gYS9wYWNrYWdlcy9NZWRpYUNvbXBvbmVudHMvcmVzL2RyYXdhYmxlLXhoZHBpL2ljX21yX2J1dHRvbl9jb25uZWN0ZWRfMDBfZGFyay5wbmcKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9wYWNrYWdlcy9NZWRpYUNvbXBvbmVudHMvcmVzL2RyYXdhYmxlLXhoZHBpL2ljX21yX2J1dHRvbl9jb25uZWN0ZWRfMDBfbGlnaHQucG5nIGIvcGFja2FnZXMvTWVkaWFDb21wb25lbnRzL3Jlcy9kcmF3YWJsZS14aGRwaS9pY19tcl9idXR0b25fY29ubmVjdGVkXzAwX2xpZ2h0LnBuZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNmI3YmRjZC4uMDAwMDAwMAotLS0gYS9wYWNrYWdlcy9NZWRpYUNvbXBvbmVudHMvcmVzL2RyYXdhYmxlLXhoZHBpL2ljX21yX2J1dHRvbl9jb25uZWN0ZWRfMDBfbGlnaHQucG5nCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvTWVkaWFDb21wb25lbnRzL3Jlcy9kcmF3YWJsZS14aGRwaS9pY19tcl9idXR0b25fY29ubmVjdGVkXzAxX2RhcmsucG5nIGIvcGFja2FnZXMvTWVkaWFDb21wb25lbnRzL3Jlcy9kcmF3YWJsZS14aGRwaS9pY19tcl9idXR0b25fY29ubmVjdGVkXzAxX2RhcmsucG5nCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjN2ZlNTc2Li4wMDAwMDAwCi0tLSBhL3BhY2thZ2VzL01lZGlhQ29tcG9uZW50cy9yZXMvZHJhd2FibGUteGhkcGkvaWNfbXJfYnV0dG9uX2Nvbm5lY3RlZF8wMV9kYXJrLnBuZworKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3BhY2thZ2VzL01lZGlhQ29tcG9uZW50cy9yZXMvZHJhd2FibGUteGhkcGkvaWNfbXJfYnV0dG9uX2Nvbm5lY3RlZF8wMV9saWdodC5wbmcgYi9wYWNrYWdlcy9NZWRpYUNvbXBvbmVudHMvcmVzL2RyYXdhYmxlLXhoZHBpL2ljX21yX2J1dHRvbl9jb25uZWN0ZWRfMDFfbGlnaHQucG5nCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwYTVkNmFhLi4wMDAwMDAwCi0tLSBhL3BhY2thZ2VzL01lZGlhQ29tcG9uZW50cy9yZXMvZHJhd2FibGUteGhkcGkvaWNfbXJfYnV0dG9uX2Nvbm5lY3RlZF8wMV9saWdodC5wbmcKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9wYWNrYWdlcy9NZWRpYUNvbXBvbmVudHMvcmVzL2RyYXdhYmxlLXhoZHBpL2ljX21yX2J1dHRvbl9jb25uZWN0ZWRfMDJfZGFyay5wbmcgYi9wYWNrYWdlcy9NZWRpYUNvbXBvbmVudHMvcmVzL2RyYXdhYmxlLXhoZHBpL2ljX21yX2J1dHRvbl9jb25uZWN0ZWRfMDJfZGFyay5wbmcKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDBhYWRmYTMuLjAwMDAwMDAKLS0tIGEvcGFja2FnZXMvTWVkaWFDb21wb25lbnRzL3Jlcy9kcmF3YWJsZS14aGRwaS9pY19tcl9idXR0b25fY29ubmVjdGVkXzAyX2RhcmsucG5nCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvTWVkaWFDb21wb25lbnRzL3Jlcy9kcmF3YWJsZS14aGRwaS9pY19tcl9idXR0b25fY29ubmVjdGVkXzAyX2xpZ2h0LnBuZyBiL3BhY2thZ2VzL01lZGlhQ29tcG9uZW50cy9yZXMvZHJhd2FibGUteGhkcGkvaWNfbXJfYnV0dG9uX2Nvbm5lY3RlZF8wMl9saWdodC5wbmcKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDEyNWZlMGIuLjAwMDAwMDAKLS0tIGEvcGFja2FnZXMvTWVkaWFDb21wb25lbnRzL3Jlcy9kcmF3YWJsZS14aGRwaS9pY19tcl9idXR0b25fY29ubmVjdGVkXzAyX2xpZ2h0LnBuZworKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3BhY2thZ2VzL01lZGlhQ29tcG9uZW50cy9yZXMvZHJhd2FibGUteGhkcGkvaWNfbXJfYnV0dG9uX2Nvbm5lY3RlZF8wM19kYXJrLnBuZyBiL3BhY2thZ2VzL01lZGlhQ29tcG9uZW50cy9yZXMvZHJhd2FibGUteGhkcGkvaWNfbXJfYnV0dG9uX2Nvbm5lY3RlZF8wM19kYXJrLnBuZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDVjNDhhNy4uMDAwMDAwMAotLS0gYS9wYWNrYWdlcy9NZWRpYUNvbXBvbmVudHMvcmVzL2RyYXdhYmxlLXhoZHBpL2ljX21yX2J1dHRvbl9jb25uZWN0ZWRfMDNfZGFyay5wbmcKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9wYWNrYWdlcy9NZWRpYUNvbXBvbmVudHMvcmVzL2RyYXdhYmxlLXhoZHBpL2ljX21yX2J1dHRvbl9jb25uZWN0ZWRfMDNfbGlnaHQucG5nIGIvcGFja2FnZXMvTWVkaWFDb21wb25lbnRzL3Jlcy9kcmF3YWJsZS14aGRwaS9pY19tcl9idXR0b25fY29ubmVjdGVkXzAzX2xpZ2h0LnBuZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzQxZTkxMS4uMDAwMDAwMAotLS0gYS9wYWNrYWdlcy9NZWRpYUNvbXBvbmVudHMvcmVzL2RyYXdhYmxlLXhoZHBpL2ljX21yX2J1dHRvbl9jb25uZWN0ZWRfMDNfbGlnaHQucG5nCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvTWVkaWFDb21wb25lbnRzL3Jlcy9kcmF3YWJsZS14aGRwaS9pY19tcl9idXR0b25fY29ubmVjdGVkXzA0X2RhcmsucG5nIGIvcGFja2FnZXMvTWVkaWFDb21wb25lbnRzL3Jlcy9kcmF3YWJsZS14aGRwaS9pY19tcl9idXR0b25fY29ubmVjdGVkXzA0X2RhcmsucG5nCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhZTQyMThhLi4wMDAwMDAwCi0tLSBhL3BhY2thZ2VzL01lZGlhQ29tcG9uZW50cy9yZXMvZHJhd2FibGUteGhkcGkvaWNfbXJfYnV0dG9uX2Nvbm5lY3RlZF8wNF9kYXJrLnBuZworKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3BhY2thZ2VzL01lZGlhQ29tcG9uZW50cy9yZXMvZHJhd2FibGUteGhkcGkvaWNfbXJfYnV0dG9uX2Nvbm5lY3RlZF8wNF9saWdodC5wbmcgYi9wYWNrYWdlcy9NZWRpYUNvbXBvbmVudHMvcmVzL2RyYXdhYmxlLXhoZHBpL2ljX21yX2J1dHRvbl9jb25uZWN0ZWRfMDRfbGlnaHQucG5nCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4YjMwZmFiLi4wMDAwMDAwCi0tLSBhL3BhY2thZ2VzL01lZGlhQ29tcG9uZW50cy9yZXMvZHJhd2FibGUteGhkcGkvaWNfbXJfYnV0dG9uX2Nvbm5lY3RlZF8wNF9saWdodC5wbmcKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9wYWNrYWdlcy9NZWRpYUNvbXBvbmVudHMvcmVzL2RyYXdhYmxlLXhoZHBpL2ljX21yX2J1dHRvbl9jb25uZWN0ZWRfMDVfZGFyay5wbmcgYi9wYWNrYWdlcy9NZWRpYUNvbXBvbmVudHMvcmVzL2RyYXdhYmxlLXhoZHBpL2ljX21yX2J1dHRvbl9jb25uZWN0ZWRfMDVfZGFyay5wbmcKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQ3YWE5MDMuLjAwMDAwMDAKLS0tIGEvcGFja2FnZXMvTWVkaWFDb21wb25lbnRzL3Jlcy9kcmF3YWJsZS14aGRwaS9pY19tcl9idXR0b25fY29ubmVjdGVkXzA1X2RhcmsucG5nCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvTWVkaWFDb21wb25lbnRzL3Jlcy9kcmF3YWJsZS14aGRwaS9pY19tcl9idXR0b25fY29ubmVjdGVkXzA1X2xpZ2h0LnBuZyBiL3BhY2thZ2VzL01lZGlhQ29tcG9uZW50cy9yZXMvZHJhd2FibGUteGhkcGkvaWNfbXJfYnV0dG9uX2Nvbm5lY3RlZF8wNV9saWdodC5wbmcKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGY3ZTJmMjkuLjAwMDAwMDAKLS0tIGEvcGFja2FnZXMvTWVkaWFDb21wb25lbnRzL3Jlcy9kcmF3YWJsZS14aGRwaS9pY19tcl9idXR0b25fY29ubmVjdGVkXzA1X2xpZ2h0LnBuZworKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3BhY2thZ2VzL01lZGlhQ29tcG9uZW50cy9yZXMvZHJhd2FibGUteGhkcGkvaWNfbXJfYnV0dG9uX2Nvbm5lY3RlZF8wNl9kYXJrLnBuZyBiL3BhY2thZ2VzL01lZGlhQ29tcG9uZW50cy9yZXMvZHJhd2FibGUteGhkcGkvaWNfbXJfYnV0dG9uX2Nvbm5lY3RlZF8wNl9kYXJrLnBuZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTc4NzFlMi4uMDAwMDAwMAotLS0gYS9wYWNrYWdlcy9NZWRpYUNvbXBvbmVudHMvcmVzL2RyYXdhYmxlLXhoZHBpL2ljX21yX2J1dHRvbl9jb25uZWN0ZWRfMDZfZGFyay5wbmcKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9wYWNrYWdlcy9NZWRpYUNvbXBvbmVudHMvcmVzL2RyYXdhYmxlLXhoZHBpL2ljX21yX2J1dHRvbl9jb25uZWN0ZWRfMDZfbGlnaHQucG5nIGIvcGFja2FnZXMvTWVkaWFDb21wb25lbnRzL3Jlcy9kcmF3YWJsZS14aGRwaS9pY19tcl9idXR0b25fY29ubmVjdGVkXzA2X2xpZ2h0LnBuZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOGM1N2Y2My4uMDAwMDAwMAotLS0gYS9wYWNrYWdlcy9NZWRpYUNvbXBvbmVudHMvcmVzL2RyYXdhYmxlLXhoZHBpL2ljX21yX2J1dHRvbl9jb25uZWN0ZWRfMDZfbGlnaHQucG5nCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvTWVkaWFDb21wb25lbnRzL3Jlcy9kcmF3YWJsZS14aGRwaS9pY19tcl9idXR0b25fY29ubmVjdGVkXzA3X2RhcmsucG5nIGIvcGFja2FnZXMvTWVkaWFDb21wb25lbnRzL3Jlcy9kcmF3YWJsZS14aGRwaS9pY19tcl9idXR0b25fY29ubmVjdGVkXzA3X2RhcmsucG5nCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDQxYjAxLi4wMDAwMDAwCi0tLSBhL3BhY2thZ2VzL01lZGlhQ29tcG9uZW50cy9yZXMvZHJhd2FibGUteGhkcGkvaWNfbXJfYnV0dG9uX2Nvbm5lY3RlZF8wN19kYXJrLnBuZworKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3BhY2thZ2VzL01lZGlhQ29tcG9uZW50cy9yZXMvZHJhd2FibGUteGhkcGkvaWNfbXJfYnV0dG9uX2Nvbm5lY3RlZF8wN19saWdodC5wbmcgYi9wYWNrYWdlcy9NZWRpYUNvbXBvbmVudHMvcmVzL2RyYXdhYmxlLXhoZHBpL2ljX21yX2J1dHRvbl9jb25uZWN0ZWRfMDdfbGlnaHQucG5nCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2ZGJiNjk0Li4wMDAwMDAwCi0tLSBhL3BhY2thZ2VzL01lZGlhQ29tcG9uZW50cy9yZXMvZHJhd2FibGUteGhkcGkvaWNfbXJfYnV0dG9uX2Nvbm5lY3RlZF8wN19saWdodC5wbmcKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9wYWNrYWdlcy9NZWRpYUNvbXBvbmVudHMvcmVzL2RyYXdhYmxlLXhoZHBpL2ljX21yX2J1dHRvbl9jb25uZWN0ZWRfMDhfZGFyay5wbmcgYi9wYWNrYWdlcy9NZWRpYUNvbXBvbmVudHMvcmVzL2RyYXdhYmxlLXhoZHBpL2ljX21yX2J1dHRvbl9jb25uZWN0ZWRfMDhfZGFyay5wbmcKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDA4ZTEwMTMuLjAwMDAwMDAKLS0tIGEvcGFja2FnZXMvTWVkaWFDb21wb25lbnRzL3Jlcy9kcmF3YWJsZS14aGRwaS9pY19tcl9idXR0b25fY29ubmVjdGVkXzA4X2RhcmsucG5nCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvTWVkaWFDb21wb25lbnRzL3Jlcy9kcmF3YWJsZS14aGRwaS9pY19tcl9idXR0b25fY29ubmVjdGVkXzA4X2xpZ2h0LnBuZyBiL3BhY2thZ2VzL01lZGlhQ29tcG9uZW50cy9yZXMvZHJhd2FibGUteGhkcGkvaWNfbXJfYnV0dG9uX2Nvbm5lY3RlZF8wOF9saWdodC5wbmcKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDVjMzUyYzMuLjAwMDAwMDAKLS0tIGEvcGFja2FnZXMvTWVkaWFDb21wb25lbnRzL3Jlcy9kcmF3YWJsZS14aGRwaS9pY19tcl9idXR0b25fY29ubmVjdGVkXzA4X2xpZ2h0LnBuZworKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3BhY2thZ2VzL01lZGlhQ29tcG9uZW50cy9yZXMvZHJhd2FibGUteGhkcGkvaWNfbXJfYnV0dG9uX2Nvbm5lY3RlZF8wOV9kYXJrLnBuZyBiL3BhY2thZ2VzL01lZGlhQ29tcG9uZW50cy9yZXMvZHJhd2FibGUteGhkcGkvaWNfbXJfYnV0dG9uX2Nvbm5lY3RlZF8wOV9kYXJrLnBuZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzA1MzJlOS4uMDAwMDAwMAotLS0gYS9wYWNrYWdlcy9NZWRpYUNvbXBvbmVudHMvcmVzL2RyYXdhYmxlLXhoZHBpL2ljX21yX2J1dHRvbl9jb25uZWN0ZWRfMDlfZGFyay5wbmcKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9wYWNrYWdlcy9NZWRpYUNvbXBvbmVudHMvcmVzL2RyYXdhYmxlLXhoZHBpL2ljX21yX2J1dHRvbl9jb25uZWN0ZWRfMDlfbGlnaHQucG5nIGIvcGFja2FnZXMvTWVkaWFDb21wb25lbnRzL3Jlcy9kcmF3YWJsZS14aGRwaS9pY19tcl9idXR0b25fY29ubmVjdGVkXzA5X2xpZ2h0LnBuZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOWM2YmEzMC4uMDAwMDAwMAotLS0gYS9wYWNrYWdlcy9NZWRpYUNvbXBvbmVudHMvcmVzL2RyYXdhYmxlLXhoZHBpL2ljX21yX2J1dHRvbl9jb25uZWN0ZWRfMDlfbGlnaHQucG5nCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvTWVkaWFDb21wb25lbnRzL3Jlcy9kcmF3YWJsZS14aGRwaS9pY19tcl9idXR0b25fY29ubmVjdGVkXzEwX2RhcmsucG5nIGIvcGFja2FnZXMvTWVkaWFDb21wb25lbnRzL3Jlcy9kcmF3YWJsZS14aGRwaS9pY19tcl9idXR0b25fY29ubmVjdGVkXzEwX2RhcmsucG5nCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5YmEzYjVmLi4wMDAwMDAwCi0tLSBhL3BhY2thZ2VzL01lZGlhQ29tcG9uZW50cy9yZXMvZHJhd2FibGUteGhkcGkvaWNfbXJfYnV0dG9uX2Nvbm5lY3RlZF8xMF9kYXJrLnBuZworKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3BhY2thZ2VzL01lZGlhQ29tcG9uZW50cy9yZXMvZHJhd2FibGUteGhkcGkvaWNfbXJfYnV0dG9uX2Nvbm5lY3RlZF8xMF9saWdodC5wbmcgYi9wYWNrYWdlcy9NZWRpYUNvbXBvbmVudHMvcmVzL2RyYXdhYmxlLXhoZHBpL2ljX21yX2J1dHRvbl9jb25uZWN0ZWRfMTBfbGlnaHQucG5nCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiZDRiYjIyLi4wMDAwMDAwCi0tLSBhL3BhY2thZ2VzL01lZGlhQ29tcG9uZW50cy9yZXMvZHJhd2FibGUteGhkcGkvaWNfbXJfYnV0dG9uX2Nvbm5lY3RlZF8xMF9saWdodC5wbmcKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9wYWNrYWdlcy9NZWRpYUNvbXBvbmVudHMvcmVzL2RyYXdhYmxlLXhoZHBpL2ljX21yX2J1dHRvbl9jb25uZWN0ZWRfMTFfZGFyay5wbmcgYi9wYWNrYWdlcy9NZWRpYUNvbXBvbmVudHMvcmVzL2RyYXdhYmxlLXhoZHBpL2ljX21yX2J1dHRvbl9jb25uZWN0ZWRfMTFfZGFyay5wbmcKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDIxNTYxMjcuLjAwMDAwMDAKLS0tIGEvcGFja2FnZXMvTWVkaWFDb21wb25lbnRzL3Jlcy9kcmF3YWJsZS14aGRwaS9pY19tcl9idXR0b25fY29ubmVjdGVkXzExX2RhcmsucG5nCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvTWVkaWFDb21wb25lbnRzL3Jlcy9kcmF3YWJsZS14aGRwaS9pY19tcl9idXR0b25fY29ubmVjdGVkXzExX2xpZ2h0LnBuZyBiL3BhY2thZ2VzL01lZGlhQ29tcG9uZW50cy9yZXMvZHJhd2FibGUteGhkcGkvaWNfbXJfYnV0dG9uX2Nvbm5lY3RlZF8xMV9saWdodC5wbmcKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGI0MTdhOWYuLjAwMDAwMDAKLS0tIGEvcGFja2FnZXMvTWVkaWFDb21wb25lbnRzL3Jlcy9kcmF3YWJsZS14aGRwaS9pY19tcl9idXR0b25fY29ubmVjdGVkXzExX2xpZ2h0LnBuZworKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3BhY2thZ2VzL01lZGlhQ29tcG9uZW50cy9yZXMvZHJhd2FibGUteGhkcGkvaWNfbXJfYnV0dG9uX2Nvbm5lY3RlZF8xMl9kYXJrLnBuZyBiL3BhY2thZ2VzL01lZGlhQ29tcG9uZW50cy9yZXMvZHJhd2FibGUteGhkcGkvaWNfbXJfYnV0dG9uX2Nvbm5lY3RlZF8xMl9kYXJrLnBuZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOWJmNjMzZS4uMDAwMDAwMAotLS0gYS9wYWNrYWdlcy9NZWRpYUNvbXBvbmVudHMvcmVzL2RyYXdhYmxlLXhoZHBpL2ljX21yX2J1dHRvbl9jb25uZWN0ZWRfMTJfZGFyay5wbmcKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9wYWNrYWdlcy9NZWRpYUNvbXBvbmVudHMvcmVzL2RyYXdhYmxlLXhoZHBpL2ljX21yX2J1dHRvbl9jb25uZWN0ZWRfMTJfbGlnaHQucG5nIGIvcGFja2FnZXMvTWVkaWFDb21wb25lbnRzL3Jlcy9kcmF3YWJsZS14aGRwaS9pY19tcl9idXR0b25fY29ubmVjdGVkXzEyX2xpZ2h0LnBuZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYmE1MTgxMS4uMDAwMDAwMAotLS0gYS9wYWNrYWdlcy9NZWRpYUNvbXBvbmVudHMvcmVzL2RyYXdhYmxlLXhoZHBpL2ljX21yX2J1dHRvbl9jb25uZWN0ZWRfMTJfbGlnaHQucG5nCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvTWVkaWFDb21wb25lbnRzL3Jlcy9kcmF3YWJsZS14aGRwaS9pY19tcl9idXR0b25fY29ubmVjdGVkXzEzX2RhcmsucG5nIGIvcGFja2FnZXMvTWVkaWFDb21wb25lbnRzL3Jlcy9kcmF3YWJsZS14aGRwaS9pY19tcl9idXR0b25fY29ubmVjdGVkXzEzX2RhcmsucG5nCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3NTZhNTNjLi4wMDAwMDAwCi0tLSBhL3BhY2thZ2VzL01lZGlhQ29tcG9uZW50cy9yZXMvZHJhd2FibGUteGhkcGkvaWNfbXJfYnV0dG9uX2Nvbm5lY3RlZF8xM19kYXJrLnBuZworKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3BhY2thZ2VzL01lZGlhQ29tcG9uZW50cy9yZXMvZHJhd2FibGUteGhkcGkvaWNfbXJfYnV0dG9uX2Nvbm5lY3RlZF8xM19saWdodC5wbmcgYi9wYWNrYWdlcy9NZWRpYUNvbXBvbmVudHMvcmVzL2RyYXdhYmxlLXhoZHBpL2ljX21yX2J1dHRvbl9jb25uZWN0ZWRfMTNfbGlnaHQucG5nCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0NzA1ZGNhLi4wMDAwMDAwCi0tLSBhL3BhY2thZ2VzL01lZGlhQ29tcG9uZW50cy9yZXMvZHJhd2FibGUteGhkcGkvaWNfbXJfYnV0dG9uX2Nvbm5lY3RlZF8xM19saWdodC5wbmcKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9wYWNrYWdlcy9NZWRpYUNvbXBvbmVudHMvcmVzL2RyYXdhYmxlLXhoZHBpL2ljX21yX2J1dHRvbl9jb25uZWN0ZWRfMTRfZGFyay5wbmcgYi9wYWNrYWdlcy9NZWRpYUNvbXBvbmVudHMvcmVzL2RyYXdhYmxlLXhoZHBpL2ljX21yX2J1dHRvbl9jb25uZWN0ZWRfMTRfZGFyay5wbmcKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDUwZTRlYTMuLjAwMDAwMDAKLS0tIGEvcGFja2FnZXMvTWVkaWFDb21wb25lbnRzL3Jlcy9kcmF3YWJsZS14aGRwaS9pY19tcl9idXR0b25fY29ubmVjdGVkXzE0X2RhcmsucG5nCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvTWVkaWFDb21wb25lbnRzL3Jlcy9kcmF3YWJsZS14aGRwaS9pY19tcl9idXR0b25fY29ubmVjdGVkXzE0X2xpZ2h0LnBuZyBiL3BhY2thZ2VzL01lZGlhQ29tcG9uZW50cy9yZXMvZHJhd2FibGUteGhkcGkvaWNfbXJfYnV0dG9uX2Nvbm5lY3RlZF8xNF9saWdodC5wbmcKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGJjNjcyNGYuLjAwMDAwMDAKLS0tIGEvcGFja2FnZXMvTWVkaWFDb21wb25lbnRzL3Jlcy9kcmF3YWJsZS14aGRwaS9pY19tcl9idXR0b25fY29ubmVjdGVkXzE0X2xpZ2h0LnBuZworKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3BhY2thZ2VzL01lZGlhQ29tcG9uZW50cy9yZXMvZHJhd2FibGUteGhkcGkvaWNfbXJfYnV0dG9uX2Nvbm5lY3RlZF8xNV9kYXJrLnBuZyBiL3BhY2thZ2VzL01lZGlhQ29tcG9uZW50cy9yZXMvZHJhd2FibGUteGhkcGkvaWNfbXJfYnV0dG9uX2Nvbm5lY3RlZF8xNV9kYXJrLnBuZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOWUzYjQxMC4uMDAwMDAwMAotLS0gYS9wYWNrYWdlcy9NZWRpYUNvbXBvbmVudHMvcmVzL2RyYXdhYmxlLXhoZHBpL2ljX21yX2J1dHRvbl9jb25uZWN0ZWRfMTVfZGFyay5wbmcKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9wYWNrYWdlcy9NZWRpYUNvbXBvbmVudHMvcmVzL2RyYXdhYmxlLXhoZHBpL2ljX21yX2J1dHRvbl9jb25uZWN0ZWRfMTVfbGlnaHQucG5nIGIvcGFja2FnZXMvTWVkaWFDb21wb25lbnRzL3Jlcy9kcmF3YWJsZS14aGRwaS9pY19tcl9idXR0b25fY29ubmVjdGVkXzE1X2xpZ2h0LnBuZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMmYxOGFiZC4uMDAwMDAwMAotLS0gYS9wYWNrYWdlcy9NZWRpYUNvbXBvbmVudHMvcmVzL2RyYXdhYmxlLXhoZHBpL2ljX21yX2J1dHRvbl9jb25uZWN0ZWRfMTVfbGlnaHQucG5nCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvTWVkaWFDb21wb25lbnRzL3Jlcy9kcmF3YWJsZS14aGRwaS9pY19tcl9idXR0b25fY29ubmVjdGVkXzE2X2RhcmsucG5nIGIvcGFja2FnZXMvTWVkaWFDb21wb25lbnRzL3Jlcy9kcmF3YWJsZS14aGRwaS9pY19tcl9idXR0b25fY29ubmVjdGVkXzE2X2RhcmsucG5nCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkZTgxMTMzLi4wMDAwMDAwCi0tLSBhL3BhY2thZ2VzL01lZGlhQ29tcG9uZW50cy9yZXMvZHJhd2FibGUteGhkcGkvaWNfbXJfYnV0dG9uX2Nvbm5lY3RlZF8xNl9kYXJrLnBuZworKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3BhY2thZ2VzL01lZGlhQ29tcG9uZW50cy9yZXMvZHJhd2FibGUteGhkcGkvaWNfbXJfYnV0dG9uX2Nvbm5lY3RlZF8xNl9saWdodC5wbmcgYi9wYWNrYWdlcy9NZWRpYUNvbXBvbmVudHMvcmVzL2RyYXdhYmxlLXhoZHBpL2ljX21yX2J1dHRvbl9jb25uZWN0ZWRfMTZfbGlnaHQucG5nCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiODBiMTkxLi4wMDAwMDAwCi0tLSBhL3BhY2thZ2VzL01lZGlhQ29tcG9uZW50cy9yZXMvZHJhd2FibGUteGhkcGkvaWNfbXJfYnV0dG9uX2Nvbm5lY3RlZF8xNl9saWdodC5wbmcKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9wYWNrYWdlcy9NZWRpYUNvbXBvbmVudHMvcmVzL2RyYXdhYmxlLXhoZHBpL2ljX21yX2J1dHRvbl9jb25uZWN0ZWRfMTdfZGFyay5wbmcgYi9wYWNrYWdlcy9NZWRpYUNvbXBvbmVudHMvcmVzL2RyYXdhYmxlLXhoZHBpL2ljX21yX2J1dHRvbl9jb25uZWN0ZWRfMTdfZGFyay5wbmcKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQ4YWJhM2QuLjAwMDAwMDAKLS0tIGEvcGFja2FnZXMvTWVkaWFDb21wb25lbnRzL3Jlcy9kcmF3YWJsZS14aGRwaS9pY19tcl9idXR0b25fY29ubmVjdGVkXzE3X2RhcmsucG5nCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvTWVkaWFDb21wb25lbnRzL3Jlcy9kcmF3YWJsZS14aGRwaS9pY19tcl9idXR0b25fY29ubmVjdGVkXzE3X2xpZ2h0LnBuZyBiL3BhY2thZ2VzL01lZGlhQ29tcG9uZW50cy9yZXMvZHJhd2FibGUteGhkcGkvaWNfbXJfYnV0dG9uX2Nvbm5lY3RlZF8xN19saWdodC5wbmcKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGNhMzRkNWIuLjAwMDAwMDAKLS0tIGEvcGFja2FnZXMvTWVkaWFDb21wb25lbnRzL3Jlcy9kcmF3YWJsZS14aGRwaS9pY19tcl9idXR0b25fY29ubmVjdGVkXzE3X2xpZ2h0LnBuZworKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3BhY2thZ2VzL01lZGlhQ29tcG9uZW50cy9yZXMvZHJhd2FibGUteGhkcGkvaWNfbXJfYnV0dG9uX2Nvbm5lY3RlZF8xOF9kYXJrLnBuZyBiL3BhY2thZ2VzL01lZGlhQ29tcG9uZW50cy9yZXMvZHJhd2FibGUteGhkcGkvaWNfbXJfYnV0dG9uX2Nvbm5lY3RlZF8xOF9kYXJrLnBuZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTk5NTdiMy4uMDAwMDAwMAotLS0gYS9wYWNrYWdlcy9NZWRpYUNvbXBvbmVudHMvcmVzL2RyYXdhYmxlLXhoZHBpL2ljX21yX2J1dHRvbl9jb25uZWN0ZWRfMThfZGFyay5wbmcKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9wYWNrYWdlcy9NZWRpYUNvbXBvbmVudHMvcmVzL2RyYXdhYmxlLXhoZHBpL2ljX21yX2J1dHRvbl9jb25uZWN0ZWRfMThfbGlnaHQucG5nIGIvcGFja2FnZXMvTWVkaWFDb21wb25lbnRzL3Jlcy9kcmF3YWJsZS14aGRwaS9pY19tcl9idXR0b25fY29ubmVjdGVkXzE4X2xpZ2h0LnBuZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTVkMzg0Zi4uMDAwMDAwMAotLS0gYS9wYWNrYWdlcy9NZWRpYUNvbXBvbmVudHMvcmVzL2RyYXdhYmxlLXhoZHBpL2ljX21yX2J1dHRvbl9jb25uZWN0ZWRfMThfbGlnaHQucG5nCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvTWVkaWFDb21wb25lbnRzL3Jlcy9kcmF3YWJsZS14aGRwaS9pY19tcl9idXR0b25fY29ubmVjdGVkXzE5X2RhcmsucG5nIGIvcGFja2FnZXMvTWVkaWFDb21wb25lbnRzL3Jlcy9kcmF3YWJsZS14aGRwaS9pY19tcl9idXR0b25fY29ubmVjdGVkXzE5X2RhcmsucG5nCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkZGM2Mjk3Li4wMDAwMDAwCi0tLSBhL3BhY2thZ2VzL01lZGlhQ29tcG9uZW50cy9yZXMvZHJhd2FibGUteGhkcGkvaWNfbXJfYnV0dG9uX2Nvbm5lY3RlZF8xOV9kYXJrLnBuZworKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3BhY2thZ2VzL01lZGlhQ29tcG9uZW50cy9yZXMvZHJhd2FibGUteGhkcGkvaWNfbXJfYnV0dG9uX2Nvbm5lY3RlZF8xOV9saWdodC5wbmcgYi9wYWNrYWdlcy9NZWRpYUNvbXBvbmVudHMvcmVzL2RyYXdhYmxlLXhoZHBpL2ljX21yX2J1dHRvbl9jb25uZWN0ZWRfMTlfbGlnaHQucG5nCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyOGFiNjg0Li4wMDAwMDAwCi0tLSBhL3BhY2thZ2VzL01lZGlhQ29tcG9uZW50cy9yZXMvZHJhd2FibGUteGhkcGkvaWNfbXJfYnV0dG9uX2Nvbm5lY3RlZF8xOV9saWdodC5wbmcKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9wYWNrYWdlcy9NZWRpYUNvbXBvbmVudHMvcmVzL2RyYXdhYmxlLXhoZHBpL2ljX21yX2J1dHRvbl9jb25uZWN0ZWRfMjBfZGFyay5wbmcgYi9wYWNrYWdlcy9NZWRpYUNvbXBvbmVudHMvcmVzL2RyYXdhYmxlLXhoZHBpL2ljX21yX2J1dHRvbl9jb25uZWN0ZWRfMjBfZGFyay5wbmcKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDUxZTdmNzUuLjAwMDAwMDAKLS0tIGEvcGFja2FnZXMvTWVkaWFDb21wb25lbnRzL3Jlcy9kcmF3YWJsZS14aGRwaS9pY19tcl9idXR0b25fY29ubmVjdGVkXzIwX2RhcmsucG5nCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvTWVkaWFDb21wb25lbnRzL3Jlcy9kcmF3YWJsZS14aGRwaS9pY19tcl9idXR0b25fY29ubmVjdGVkXzIwX2xpZ2h0LnBuZyBiL3BhY2thZ2VzL01lZGlhQ29tcG9uZW50cy9yZXMvZHJhd2FibGUteGhkcGkvaWNfbXJfYnV0dG9uX2Nvbm5lY3RlZF8yMF9saWdodC5wbmcKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDRhYTNjYTMuLjAwMDAwMDAKLS0tIGEvcGFja2FnZXMvTWVkaWFDb21wb25lbnRzL3Jlcy9kcmF3YWJsZS14aGRwaS9pY19tcl9idXR0b25fY29ubmVjdGVkXzIwX2xpZ2h0LnBuZworKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3BhY2thZ2VzL01lZGlhQ29tcG9uZW50cy9yZXMvZHJhd2FibGUteGhkcGkvaWNfbXJfYnV0dG9uX2Nvbm5lY3RlZF8yMV9kYXJrLnBuZyBiL3BhY2thZ2VzL01lZGlhQ29tcG9uZW50cy9yZXMvZHJhd2FibGUteGhkcGkvaWNfbXJfYnV0dG9uX2Nvbm5lY3RlZF8yMV9kYXJrLnBuZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOWNhZWNkZS4uMDAwMDAwMAotLS0gYS9wYWNrYWdlcy9NZWRpYUNvbXBvbmVudHMvcmVzL2RyYXdhYmxlLXhoZHBpL2ljX21yX2J1dHRvbl9jb25uZWN0ZWRfMjFfZGFyay5wbmcKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9wYWNrYWdlcy9NZWRpYUNvbXBvbmVudHMvcmVzL2RyYXdhYmxlLXhoZHBpL2ljX21yX2J1dHRvbl9jb25uZWN0ZWRfMjFfbGlnaHQucG5nIGIvcGFja2FnZXMvTWVkaWFDb21wb25lbnRzL3Jlcy9kcmF3YWJsZS14aGRwaS9pY19tcl9idXR0b25fY29ubmVjdGVkXzIxX2xpZ2h0LnBuZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMWI4ZDBiNi4uMDAwMDAwMAotLS0gYS9wYWNrYWdlcy9NZWRpYUNvbXBvbmVudHMvcmVzL2RyYXdhYmxlLXhoZHBpL2ljX21yX2J1dHRvbl9jb25uZWN0ZWRfMjFfbGlnaHQucG5nCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvTWVkaWFDb21wb25lbnRzL3Jlcy9kcmF3YWJsZS14aGRwaS9pY19tcl9idXR0b25fY29ubmVjdGVkXzIyX2RhcmsucG5nIGIvcGFja2FnZXMvTWVkaWFDb21wb25lbnRzL3Jlcy9kcmF3YWJsZS14aGRwaS9pY19tcl9idXR0b25fY29ubmVjdGVkXzIyX2RhcmsucG5nCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0MDBiZTNjLi4wMDAwMDAwCi0tLSBhL3BhY2thZ2VzL01lZGlhQ29tcG9uZW50cy9yZXMvZHJhd2FibGUteGhkcGkvaWNfbXJfYnV0dG9uX2Nvbm5lY3RlZF8yMl9kYXJrLnBuZworKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3BhY2thZ2VzL01lZGlhQ29tcG9uZW50cy9yZXMvZHJhd2FibGUteGhkcGkvaWNfbXJfYnV0dG9uX2Nvbm5lY3RlZF8yMl9saWdodC5wbmcgYi9wYWNrYWdlcy9NZWRpYUNvbXBvbmVudHMvcmVzL2RyYXdhYmxlLXhoZHBpL2ljX21yX2J1dHRvbl9jb25uZWN0ZWRfMjJfbGlnaHQucG5nCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjMTRmMWJmLi4wMDAwMDAwCi0tLSBhL3BhY2thZ2VzL01lZGlhQ29tcG9uZW50cy9yZXMvZHJhd2FibGUteGhkcGkvaWNfbXJfYnV0dG9uX2Nvbm5lY3RlZF8yMl9saWdodC5wbmcKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9wYWNrYWdlcy9NZWRpYUNvbXBvbmVudHMvcmVzL2RyYXdhYmxlLXhoZHBpL2ljX21yX2J1dHRvbl9jb25uZWN0ZWRfMjNfZGFyay5wbmcgYi9wYWNrYWdlcy9NZWRpYUNvbXBvbmVudHMvcmVzL2RyYXdhYmxlLXhoZHBpL2ljX21yX2J1dHRvbl9jb25uZWN0ZWRfMjNfZGFyay5wbmcKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDRlMThiNDYuLjAwMDAwMDAKLS0tIGEvcGFja2FnZXMvTWVkaWFDb21wb25lbnRzL3Jlcy9kcmF3YWJsZS14aGRwaS9pY19tcl9idXR0b25fY29ubmVjdGVkXzIzX2RhcmsucG5nCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvTWVkaWFDb21wb25lbnRzL3Jlcy9kcmF3YWJsZS14aGRwaS9pY19tcl9idXR0b25fY29ubmVjdGVkXzIzX2xpZ2h0LnBuZyBiL3BhY2thZ2VzL01lZGlhQ29tcG9uZW50cy9yZXMvZHJhd2FibGUteGhkcGkvaWNfbXJfYnV0dG9uX2Nvbm5lY3RlZF8yM19saWdodC5wbmcKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGM0YzJjMDAuLjAwMDAwMDAKLS0tIGEvcGFja2FnZXMvTWVkaWFDb21wb25lbnRzL3Jlcy9kcmF3YWJsZS14aGRwaS9pY19tcl9idXR0b25fY29ubmVjdGVkXzIzX2xpZ2h0LnBuZworKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3BhY2thZ2VzL01lZGlhQ29tcG9uZW50cy9yZXMvZHJhd2FibGUteGhkcGkvaWNfbXJfYnV0dG9uX2Nvbm5lY3RlZF8yNF9kYXJrLnBuZyBiL3BhY2thZ2VzL01lZGlhQ29tcG9uZW50cy9yZXMvZHJhd2FibGUteGhkcGkvaWNfbXJfYnV0dG9uX2Nvbm5lY3RlZF8yNF9kYXJrLnBuZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOThmYWU0NC4uMDAwMDAwMAotLS0gYS9wYWNrYWdlcy9NZWRpYUNvbXBvbmVudHMvcmVzL2RyYXdhYmxlLXhoZHBpL2ljX21yX2J1dHRvbl9jb25uZWN0ZWRfMjRfZGFyay5wbmcKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9wYWNrYWdlcy9NZWRpYUNvbXBvbmVudHMvcmVzL2RyYXdhYmxlLXhoZHBpL2ljX21yX2J1dHRvbl9jb25uZWN0ZWRfMjRfbGlnaHQucG5nIGIvcGFja2FnZXMvTWVkaWFDb21wb25lbnRzL3Jlcy9kcmF3YWJsZS14aGRwaS9pY19tcl9idXR0b25fY29ubmVjdGVkXzI0X2xpZ2h0LnBuZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDY0YzI4OS4uMDAwMDAwMAotLS0gYS9wYWNrYWdlcy9NZWRpYUNvbXBvbmVudHMvcmVzL2RyYXdhYmxlLXhoZHBpL2ljX21yX2J1dHRvbl9jb25uZWN0ZWRfMjRfbGlnaHQucG5nCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvTWVkaWFDb21wb25lbnRzL3Jlcy9kcmF3YWJsZS14aGRwaS9pY19tcl9idXR0b25fY29ubmVjdGVkXzI1X2RhcmsucG5nIGIvcGFja2FnZXMvTWVkaWFDb21wb25lbnRzL3Jlcy9kcmF3YWJsZS14aGRwaS9pY19tcl9idXR0b25fY29ubmVjdGVkXzI1X2RhcmsucG5nCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5MWY5MzI3Li4wMDAwMDAwCi0tLSBhL3BhY2thZ2VzL01lZGlhQ29tcG9uZW50cy9yZXMvZHJhd2FibGUteGhkcGkvaWNfbXJfYnV0dG9uX2Nvbm5lY3RlZF8yNV9kYXJrLnBuZworKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3BhY2thZ2VzL01lZGlhQ29tcG9uZW50cy9yZXMvZHJhd2FibGUteGhkcGkvaWNfbXJfYnV0dG9uX2Nvbm5lY3RlZF8yNV9saWdodC5wbmcgYi9wYWNrYWdlcy9NZWRpYUNvbXBvbmVudHMvcmVzL2RyYXdhYmxlLXhoZHBpL2ljX21yX2J1dHRvbl9jb25uZWN0ZWRfMjVfbGlnaHQucG5nCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmNWUxZjY5Li4wMDAwMDAwCi0tLSBhL3BhY2thZ2VzL01lZGlhQ29tcG9uZW50cy9yZXMvZHJhd2FibGUteGhkcGkvaWNfbXJfYnV0dG9uX2Nvbm5lY3RlZF8yNV9saWdodC5wbmcKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9wYWNrYWdlcy9NZWRpYUNvbXBvbmVudHMvcmVzL2RyYXdhYmxlLXhoZHBpL2ljX21yX2J1dHRvbl9jb25uZWN0ZWRfMjZfZGFyay5wbmcgYi9wYWNrYWdlcy9NZWRpYUNvbXBvbmVudHMvcmVzL2RyYXdhYmxlLXhoZHBpL2ljX21yX2J1dHRvbl9jb25uZWN0ZWRfMjZfZGFyay5wbmcKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDNlNmZhZmQuLjAwMDAwMDAKLS0tIGEvcGFja2FnZXMvTWVkaWFDb21wb25lbnRzL3Jlcy9kcmF3YWJsZS14aGRwaS9pY19tcl9idXR0b25fY29ubmVjdGVkXzI2X2RhcmsucG5nCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvTWVkaWFDb21wb25lbnRzL3Jlcy9kcmF3YWJsZS14aGRwaS9pY19tcl9idXR0b25fY29ubmVjdGVkXzI2X2xpZ2h0LnBuZyBiL3BhY2thZ2VzL01lZGlhQ29tcG9uZW50cy9yZXMvZHJhd2FibGUteGhkcGkvaWNfbXJfYnV0dG9uX2Nvbm5lY3RlZF8yNl9saWdodC5wbmcKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGFlMmJkODcuLjAwMDAwMDAKLS0tIGEvcGFja2FnZXMvTWVkaWFDb21wb25lbnRzL3Jlcy9kcmF3YWJsZS14aGRwaS9pY19tcl9idXR0b25fY29ubmVjdGVkXzI2X2xpZ2h0LnBuZworKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3BhY2thZ2VzL01lZGlhQ29tcG9uZW50cy9yZXMvZHJhd2FibGUteGhkcGkvaWNfbXJfYnV0dG9uX2Nvbm5lY3RlZF8yN19kYXJrLnBuZyBiL3BhY2thZ2VzL01lZGlhQ29tcG9uZW50cy9yZXMvZHJhd2FibGUteGhkcGkvaWNfbXJfYnV0dG9uX2Nvbm5lY3RlZF8yN19kYXJrLnBuZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjczYTFmOC4uMDAwMDAwMAotLS0gYS9wYWNrYWdlcy9NZWRpYUNvbXBvbmVudHMvcmVzL2RyYXdhYmxlLXhoZHBpL2ljX21yX2J1dHRvbl9jb25uZWN0ZWRfMjdfZGFyay5wbmcKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9wYWNrYWdlcy9NZWRpYUNvbXBvbmVudHMvcmVzL2RyYXdhYmxlLXhoZHBpL2ljX21yX2J1dHRvbl9jb25uZWN0ZWRfMjdfbGlnaHQucG5nIGIvcGFja2FnZXMvTWVkaWFDb21wb25lbnRzL3Jlcy9kcmF3YWJsZS14aGRwaS9pY19tcl9idXR0b25fY29ubmVjdGVkXzI3X2xpZ2h0LnBuZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzhjMTA2OS4uMDAwMDAwMAotLS0gYS9wYWNrYWdlcy9NZWRpYUNvbXBvbmVudHMvcmVzL2RyYXdhYmxlLXhoZHBpL2ljX21yX2J1dHRvbl9jb25uZWN0ZWRfMjdfbGlnaHQucG5nCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvTWVkaWFDb21wb25lbnRzL3Jlcy9kcmF3YWJsZS14aGRwaS9pY19tcl9idXR0b25fY29ubmVjdGVkXzI4X2RhcmsucG5nIGIvcGFja2FnZXMvTWVkaWFDb21wb25lbnRzL3Jlcy9kcmF3YWJsZS14aGRwaS9pY19tcl9idXR0b25fY29ubmVjdGVkXzI4X2RhcmsucG5nCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1NjJiODAzLi4wMDAwMDAwCi0tLSBhL3BhY2thZ2VzL01lZGlhQ29tcG9uZW50cy9yZXMvZHJhd2FibGUteGhkcGkvaWNfbXJfYnV0dG9uX2Nvbm5lY3RlZF8yOF9kYXJrLnBuZworKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3BhY2thZ2VzL01lZGlhQ29tcG9uZW50cy9yZXMvZHJhd2FibGUteGhkcGkvaWNfbXJfYnV0dG9uX2Nvbm5lY3RlZF8yOF9saWdodC5wbmcgYi9wYWNrYWdlcy9NZWRpYUNvbXBvbmVudHMvcmVzL2RyYXdhYmxlLXhoZHBpL2ljX21yX2J1dHRvbl9jb25uZWN0ZWRfMjhfbGlnaHQucG5nCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkZGZiYTAyLi4wMDAwMDAwCi0tLSBhL3BhY2thZ2VzL01lZGlhQ29tcG9uZW50cy9yZXMvZHJhd2FibGUteGhkcGkvaWNfbXJfYnV0dG9uX2Nvbm5lY3RlZF8yOF9saWdodC5wbmcKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9wYWNrYWdlcy9NZWRpYUNvbXBvbmVudHMvcmVzL2RyYXdhYmxlLXhoZHBpL2ljX21yX2J1dHRvbl9jb25uZWN0ZWRfMjlfZGFyay5wbmcgYi9wYWNrYWdlcy9NZWRpYUNvbXBvbmVudHMvcmVzL2RyYXdhYmxlLXhoZHBpL2ljX21yX2J1dHRvbl9jb25uZWN0ZWRfMjlfZGFyay5wbmcKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDI1N2YyZDIuLjAwMDAwMDAKLS0tIGEvcGFja2FnZXMvTWVkaWFDb21wb25lbnRzL3Jlcy9kcmF3YWJsZS14aGRwaS9pY19tcl9idXR0b25fY29ubmVjdGVkXzI5X2RhcmsucG5nCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvTWVkaWFDb21wb25lbnRzL3Jlcy9kcmF3YWJsZS14aGRwaS9pY19tcl9idXR0b25fY29ubmVjdGVkXzI5X2xpZ2h0LnBuZyBiL3BhY2thZ2VzL01lZGlhQ29tcG9uZW50cy9yZXMvZHJhd2FibGUteGhkcGkvaWNfbXJfYnV0dG9uX2Nvbm5lY3RlZF8yOV9saWdodC5wbmcKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDM4ZjU0NzguLjAwMDAwMDAKLS0tIGEvcGFja2FnZXMvTWVkaWFDb21wb25lbnRzL3Jlcy9kcmF3YWJsZS14aGRwaS9pY19tcl9idXR0b25fY29ubmVjdGVkXzI5X2xpZ2h0LnBuZworKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3BhY2thZ2VzL01lZGlhQ29tcG9uZW50cy9yZXMvZHJhd2FibGUteGhkcGkvaWNfbXJfYnV0dG9uX2Nvbm5lY3RlZF8zMF9kYXJrLnBuZyBiL3BhY2thZ2VzL01lZGlhQ29tcG9uZW50cy9yZXMvZHJhd2FibGUteGhkcGkvaWNfbXJfYnV0dG9uX2Nvbm5lY3RlZF8zMF9kYXJrLnBuZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjk5NWFmMC4uMDAwMDAwMAotLS0gYS9wYWNrYWdlcy9NZWRpYUNvbXBvbmVudHMvcmVzL2RyYXdhYmxlLXhoZHBpL2ljX21yX2J1dHRvbl9jb25uZWN0ZWRfMzBfZGFyay5wbmcKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9wYWNrYWdlcy9NZWRpYUNvbXBvbmVudHMvcmVzL2RyYXdhYmxlLXhoZHBpL2ljX21yX2J1dHRvbl9jb25uZWN0ZWRfMzBfbGlnaHQucG5nIGIvcGFja2FnZXMvTWVkaWFDb21wb25lbnRzL3Jlcy9kcmF3YWJsZS14aGRwaS9pY19tcl9idXR0b25fY29ubmVjdGVkXzMwX2xpZ2h0LnBuZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzUwYjdmMC4uMDAwMDAwMAotLS0gYS9wYWNrYWdlcy9NZWRpYUNvbXBvbmVudHMvcmVzL2RyYXdhYmxlLXhoZHBpL2ljX21yX2J1dHRvbl9jb25uZWN0ZWRfMzBfbGlnaHQucG5nCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvTWVkaWFDb21wb25lbnRzL3Jlcy9kcmF3YWJsZS14aGRwaS9pY19tcl9idXR0b25fY29ubmVjdGluZ18wMF9kYXJrLnBuZyBiL3BhY2thZ2VzL01lZGlhQ29tcG9uZW50cy9yZXMvZHJhd2FibGUteGhkcGkvaWNfbXJfYnV0dG9uX2Nvbm5lY3RpbmdfMDBfZGFyay5wbmcKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGY2ZGQyMTQuLjAwMDAwMDAKLS0tIGEvcGFja2FnZXMvTWVkaWFDb21wb25lbnRzL3Jlcy9kcmF3YWJsZS14aGRwaS9pY19tcl9idXR0b25fY29ubmVjdGluZ18wMF9kYXJrLnBuZworKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3BhY2thZ2VzL01lZGlhQ29tcG9uZW50cy9yZXMvZHJhd2FibGUteGhkcGkvaWNfbXJfYnV0dG9uX2Nvbm5lY3RpbmdfMDBfbGlnaHQucG5nIGIvcGFja2FnZXMvTWVkaWFDb21wb25lbnRzL3Jlcy9kcmF3YWJsZS14aGRwaS9pY19tcl9idXR0b25fY29ubmVjdGluZ18wMF9saWdodC5wbmcKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDZiN2JkY2QuLjAwMDAwMDAKLS0tIGEvcGFja2FnZXMvTWVkaWFDb21wb25lbnRzL3Jlcy9kcmF3YWJsZS14aGRwaS9pY19tcl9idXR0b25fY29ubmVjdGluZ18wMF9saWdodC5wbmcKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9wYWNrYWdlcy9NZWRpYUNvbXBvbmVudHMvcmVzL2RyYXdhYmxlLXhoZHBpL2ljX21yX2J1dHRvbl9jb25uZWN0aW5nXzAxX2RhcmsucG5nIGIvcGFja2FnZXMvTWVkaWFDb21wb25lbnRzL3Jlcy9kcmF3YWJsZS14aGRwaS9pY19tcl9idXR0b25fY29ubmVjdGluZ18wMV9kYXJrLnBuZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzdmZTU3Ni4uMDAwMDAwMAotLS0gYS9wYWNrYWdlcy9NZWRpYUNvbXBvbmVudHMvcmVzL2RyYXdhYmxlLXhoZHBpL2ljX21yX2J1dHRvbl9jb25uZWN0aW5nXzAxX2RhcmsucG5nCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvTWVkaWFDb21wb25lbnRzL3Jlcy9kcmF3YWJsZS14aGRwaS9pY19tcl9idXR0b25fY29ubmVjdGluZ18wMV9saWdodC5wbmcgYi9wYWNrYWdlcy9NZWRpYUNvbXBvbmVudHMvcmVzL2RyYXdhYmxlLXhoZHBpL2ljX21yX2J1dHRvbl9jb25uZWN0aW5nXzAxX2xpZ2h0LnBuZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMGE1ZDZhYS4uMDAwMDAwMAotLS0gYS9wYWNrYWdlcy9NZWRpYUNvbXBvbmVudHMvcmVzL2RyYXdhYmxlLXhoZHBpL2ljX21yX2J1dHRvbl9jb25uZWN0aW5nXzAxX2xpZ2h0LnBuZworKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3BhY2thZ2VzL01lZGlhQ29tcG9uZW50cy9yZXMvZHJhd2FibGUteGhkcGkvaWNfbXJfYnV0dG9uX2Nvbm5lY3RpbmdfMDJfZGFyay5wbmcgYi9wYWNrYWdlcy9NZWRpYUNvbXBvbmVudHMvcmVzL2RyYXdhYmxlLXhoZHBpL2ljX21yX2J1dHRvbl9jb25uZWN0aW5nXzAyX2RhcmsucG5nCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwYWFkZmEzLi4wMDAwMDAwCi0tLSBhL3BhY2thZ2VzL01lZGlhQ29tcG9uZW50cy9yZXMvZHJhd2FibGUteGhkcGkvaWNfbXJfYnV0dG9uX2Nvbm5lY3RpbmdfMDJfZGFyay5wbmcKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9wYWNrYWdlcy9NZWRpYUNvbXBvbmVudHMvcmVzL2RyYXdhYmxlLXhoZHBpL2ljX21yX2J1dHRvbl9jb25uZWN0aW5nXzAyX2xpZ2h0LnBuZyBiL3BhY2thZ2VzL01lZGlhQ29tcG9uZW50cy9yZXMvZHJhd2FibGUteGhkcGkvaWNfbXJfYnV0dG9uX2Nvbm5lY3RpbmdfMDJfbGlnaHQucG5nCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxMjVmZTBiLi4wMDAwMDAwCi0tLSBhL3BhY2thZ2VzL01lZGlhQ29tcG9uZW50cy9yZXMvZHJhd2FibGUteGhkcGkvaWNfbXJfYnV0dG9uX2Nvbm5lY3RpbmdfMDJfbGlnaHQucG5nCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvTWVkaWFDb21wb25lbnRzL3Jlcy9kcmF3YWJsZS14aGRwaS9pY19tcl9idXR0b25fY29ubmVjdGluZ18wM19kYXJrLnBuZyBiL3BhY2thZ2VzL01lZGlhQ29tcG9uZW50cy9yZXMvZHJhd2FibGUteGhkcGkvaWNfbXJfYnV0dG9uX2Nvbm5lY3RpbmdfMDNfZGFyay5wbmcKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDA1YzQ4YTcuLjAwMDAwMDAKLS0tIGEvcGFja2FnZXMvTWVkaWFDb21wb25lbnRzL3Jlcy9kcmF3YWJsZS14aGRwaS9pY19tcl9idXR0b25fY29ubmVjdGluZ18wM19kYXJrLnBuZworKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3BhY2thZ2VzL01lZGlhQ29tcG9uZW50cy9yZXMvZHJhd2FibGUteGhkcGkvaWNfbXJfYnV0dG9uX2Nvbm5lY3RpbmdfMDNfbGlnaHQucG5nIGIvcGFja2FnZXMvTWVkaWFDb21wb25lbnRzL3Jlcy9kcmF3YWJsZS14aGRwaS9pY19tcl9idXR0b25fY29ubmVjdGluZ18wM19saWdodC5wbmcKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDc0MWU5MTEuLjAwMDAwMDAKLS0tIGEvcGFja2FnZXMvTWVkaWFDb21wb25lbnRzL3Jlcy9kcmF3YWJsZS14aGRwaS9pY19tcl9idXR0b25fY29ubmVjdGluZ18wM19saWdodC5wbmcKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9wYWNrYWdlcy9NZWRpYUNvbXBvbmVudHMvcmVzL2RyYXdhYmxlLXhoZHBpL2ljX21yX2J1dHRvbl9jb25uZWN0aW5nXzA0X2RhcmsucG5nIGIvcGFja2FnZXMvTWVkaWFDb21wb25lbnRzL3Jlcy9kcmF3YWJsZS14aGRwaS9pY19tcl9idXR0b25fY29ubmVjdGluZ18wNF9kYXJrLnBuZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYWU0MjE4YS4uMDAwMDAwMAotLS0gYS9wYWNrYWdlcy9NZWRpYUNvbXBvbmVudHMvcmVzL2RyYXdhYmxlLXhoZHBpL2ljX21yX2J1dHRvbl9jb25uZWN0aW5nXzA0X2RhcmsucG5nCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvTWVkaWFDb21wb25lbnRzL3Jlcy9kcmF3YWJsZS14aGRwaS9pY19tcl9idXR0b25fY29ubmVjdGluZ18wNF9saWdodC5wbmcgYi9wYWNrYWdlcy9NZWRpYUNvbXBvbmVudHMvcmVzL2RyYXdhYmxlLXhoZHBpL2ljX21yX2J1dHRvbl9jb25uZWN0aW5nXzA0X2xpZ2h0LnBuZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOGIzMGZhYi4uMDAwMDAwMAotLS0gYS9wYWNrYWdlcy9NZWRpYUNvbXBvbmVudHMvcmVzL2RyYXdhYmxlLXhoZHBpL2ljX21yX2J1dHRvbl9jb25uZWN0aW5nXzA0X2xpZ2h0LnBuZworKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3BhY2thZ2VzL01lZGlhQ29tcG9uZW50cy9yZXMvZHJhd2FibGUteGhkcGkvaWNfbXJfYnV0dG9uX2Nvbm5lY3RpbmdfMDVfZGFyay5wbmcgYi9wYWNrYWdlcy9NZWRpYUNvbXBvbmVudHMvcmVzL2RyYXdhYmxlLXhoZHBpL2ljX21yX2J1dHRvbl9jb25uZWN0aW5nXzA1X2RhcmsucG5nCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkN2FhOTAzLi4wMDAwMDAwCi0tLSBhL3BhY2thZ2VzL01lZGlhQ29tcG9uZW50cy9yZXMvZHJhd2FibGUteGhkcGkvaWNfbXJfYnV0dG9uX2Nvbm5lY3RpbmdfMDVfZGFyay5wbmcKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9wYWNrYWdlcy9NZWRpYUNvbXBvbmVudHMvcmVzL2RyYXdhYmxlLXhoZHBpL2ljX21yX2J1dHRvbl9jb25uZWN0aW5nXzA1X2xpZ2h0LnBuZyBiL3BhY2thZ2VzL01lZGlhQ29tcG9uZW50cy9yZXMvZHJhd2FibGUteGhkcGkvaWNfbXJfYnV0dG9uX2Nvbm5lY3RpbmdfMDVfbGlnaHQucG5nCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmN2UyZjI5Li4wMDAwMDAwCi0tLSBhL3BhY2thZ2VzL01lZGlhQ29tcG9uZW50cy9yZXMvZHJhd2FibGUteGhkcGkvaWNfbXJfYnV0dG9uX2Nvbm5lY3RpbmdfMDVfbGlnaHQucG5nCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvTWVkaWFDb21wb25lbnRzL3Jlcy9kcmF3YWJsZS14aGRwaS9pY19tcl9idXR0b25fY29ubmVjdGluZ18wNl9kYXJrLnBuZyBiL3BhY2thZ2VzL01lZGlhQ29tcG9uZW50cy9yZXMvZHJhd2FibGUteGhkcGkvaWNfbXJfYnV0dG9uX2Nvbm5lY3RpbmdfMDZfZGFyay5wbmcKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGU3ODcxZTIuLjAwMDAwMDAKLS0tIGEvcGFja2FnZXMvTWVkaWFDb21wb25lbnRzL3Jlcy9kcmF3YWJsZS14aGRwaS9pY19tcl9idXR0b25fY29ubmVjdGluZ18wNl9kYXJrLnBuZworKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3BhY2thZ2VzL01lZGlhQ29tcG9uZW50cy9yZXMvZHJhd2FibGUteGhkcGkvaWNfbXJfYnV0dG9uX2Nvbm5lY3RpbmdfMDZfbGlnaHQucG5nIGIvcGFja2FnZXMvTWVkaWFDb21wb25lbnRzL3Jlcy9kcmF3YWJsZS14aGRwaS9pY19tcl9idXR0b25fY29ubmVjdGluZ18wNl9saWdodC5wbmcKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDhjNTdmNjMuLjAwMDAwMDAKLS0tIGEvcGFja2FnZXMvTWVkaWFDb21wb25lbnRzL3Jlcy9kcmF3YWJsZS14aGRwaS9pY19tcl9idXR0b25fY29ubmVjdGluZ18wNl9saWdodC5wbmcKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9wYWNrYWdlcy9NZWRpYUNvbXBvbmVudHMvcmVzL2RyYXdhYmxlLXhoZHBpL2ljX21yX2J1dHRvbl9jb25uZWN0aW5nXzA3X2RhcmsucG5nIGIvcGFja2FnZXMvTWVkaWFDb21wb25lbnRzL3Jlcy9kcmF3YWJsZS14aGRwaS9pY19tcl9idXR0b25fY29ubmVjdGluZ18wN19kYXJrLnBuZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDA0MWIwMS4uMDAwMDAwMAotLS0gYS9wYWNrYWdlcy9NZWRpYUNvbXBvbmVudHMvcmVzL2RyYXdhYmxlLXhoZHBpL2ljX21yX2J1dHRvbl9jb25uZWN0aW5nXzA3X2RhcmsucG5nCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvTWVkaWFDb21wb25lbnRzL3Jlcy9kcmF3YWJsZS14aGRwaS9pY19tcl9idXR0b25fY29ubmVjdGluZ18wN19saWdodC5wbmcgYi9wYWNrYWdlcy9NZWRpYUNvbXBvbmVudHMvcmVzL2RyYXdhYmxlLXhoZHBpL2ljX21yX2J1dHRvbl9jb25uZWN0aW5nXzA3X2xpZ2h0LnBuZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNmRiYjY5NC4uMDAwMDAwMAotLS0gYS9wYWNrYWdlcy9NZWRpYUNvbXBvbmVudHMvcmVzL2RyYXdhYmxlLXhoZHBpL2ljX21yX2J1dHRvbl9jb25uZWN0aW5nXzA3X2xpZ2h0LnBuZworKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3BhY2thZ2VzL01lZGlhQ29tcG9uZW50cy9yZXMvZHJhd2FibGUteGhkcGkvaWNfbXJfYnV0dG9uX2Nvbm5lY3RpbmdfMDhfZGFyay5wbmcgYi9wYWNrYWdlcy9NZWRpYUNvbXBvbmVudHMvcmVzL2RyYXdhYmxlLXhoZHBpL2ljX21yX2J1dHRvbl9jb25uZWN0aW5nXzA4X2RhcmsucG5nCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwOGUxMDEzLi4wMDAwMDAwCi0tLSBhL3BhY2thZ2VzL01lZGlhQ29tcG9uZW50cy9yZXMvZHJhd2FibGUteGhkcGkvaWNfbXJfYnV0dG9uX2Nvbm5lY3RpbmdfMDhfZGFyay5wbmcKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9wYWNrYWdlcy9NZWRpYUNvbXBvbmVudHMvcmVzL2RyYXdhYmxlLXhoZHBpL2ljX21yX2J1dHRvbl9jb25uZWN0aW5nXzA4X2xpZ2h0LnBuZyBiL3BhY2thZ2VzL01lZGlhQ29tcG9uZW50cy9yZXMvZHJhd2FibGUteGhkcGkvaWNfbXJfYnV0dG9uX2Nvbm5lY3RpbmdfMDhfbGlnaHQucG5nCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1YzM1MmMzLi4wMDAwMDAwCi0tLSBhL3BhY2thZ2VzL01lZGlhQ29tcG9uZW50cy9yZXMvZHJhd2FibGUteGhkcGkvaWNfbXJfYnV0dG9uX2Nvbm5lY3RpbmdfMDhfbGlnaHQucG5nCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvTWVkaWFDb21wb25lbnRzL3Jlcy9kcmF3YWJsZS14aGRwaS9pY19tcl9idXR0b25fY29ubmVjdGluZ18wOV9kYXJrLnBuZyBiL3BhY2thZ2VzL01lZGlhQ29tcG9uZW50cy9yZXMvZHJhd2FibGUteGhkcGkvaWNfbXJfYnV0dG9uX2Nvbm5lY3RpbmdfMDlfZGFyay5wbmcKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDcwNTMyZTkuLjAwMDAwMDAKLS0tIGEvcGFja2FnZXMvTWVkaWFDb21wb25lbnRzL3Jlcy9kcmF3YWJsZS14aGRwaS9pY19tcl9idXR0b25fY29ubmVjdGluZ18wOV9kYXJrLnBuZworKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3BhY2thZ2VzL01lZGlhQ29tcG9uZW50cy9yZXMvZHJhd2FibGUteGhkcGkvaWNfbXJfYnV0dG9uX2Nvbm5lY3RpbmdfMDlfbGlnaHQucG5nIGIvcGFja2FnZXMvTWVkaWFDb21wb25lbnRzL3Jlcy9kcmF3YWJsZS14aGRwaS9pY19tcl9idXR0b25fY29ubmVjdGluZ18wOV9saWdodC5wbmcKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDljNmJhMzAuLjAwMDAwMDAKLS0tIGEvcGFja2FnZXMvTWVkaWFDb21wb25lbnRzL3Jlcy9kcmF3YWJsZS14aGRwaS9pY19tcl9idXR0b25fY29ubmVjdGluZ18wOV9saWdodC5wbmcKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9wYWNrYWdlcy9NZWRpYUNvbXBvbmVudHMvcmVzL2RyYXdhYmxlLXhoZHBpL2ljX21yX2J1dHRvbl9jb25uZWN0aW5nXzEwX2RhcmsucG5nIGIvcGFja2FnZXMvTWVkaWFDb21wb25lbnRzL3Jlcy9kcmF3YWJsZS14aGRwaS9pY19tcl9idXR0b25fY29ubmVjdGluZ18xMF9kYXJrLnBuZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOWJhM2I1Zi4uMDAwMDAwMAotLS0gYS9wYWNrYWdlcy9NZWRpYUNvbXBvbmVudHMvcmVzL2RyYXdhYmxlLXhoZHBpL2ljX21yX2J1dHRvbl9jb25uZWN0aW5nXzEwX2RhcmsucG5nCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvTWVkaWFDb21wb25lbnRzL3Jlcy9kcmF3YWJsZS14aGRwaS9pY19tcl9idXR0b25fY29ubmVjdGluZ18xMF9saWdodC5wbmcgYi9wYWNrYWdlcy9NZWRpYUNvbXBvbmVudHMvcmVzL2RyYXdhYmxlLXhoZHBpL2ljX21yX2J1dHRvbl9jb25uZWN0aW5nXzEwX2xpZ2h0LnBuZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYmQ0YmIyMi4uMDAwMDAwMAotLS0gYS9wYWNrYWdlcy9NZWRpYUNvbXBvbmVudHMvcmVzL2RyYXdhYmxlLXhoZHBpL2ljX21yX2J1dHRvbl9jb25uZWN0aW5nXzEwX2xpZ2h0LnBuZworKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3BhY2thZ2VzL01lZGlhQ29tcG9uZW50cy9yZXMvZHJhd2FibGUteGhkcGkvaWNfbXJfYnV0dG9uX2Nvbm5lY3RpbmdfMTFfZGFyay5wbmcgYi9wYWNrYWdlcy9NZWRpYUNvbXBvbmVudHMvcmVzL2RyYXdhYmxlLXhoZHBpL2ljX21yX2J1dHRvbl9jb25uZWN0aW5nXzExX2RhcmsucG5nCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmMzU3MGY0Li4wMDAwMDAwCi0tLSBhL3BhY2thZ2VzL01lZGlhQ29tcG9uZW50cy9yZXMvZHJhd2FibGUteGhkcGkvaWNfbXJfYnV0dG9uX2Nvbm5lY3RpbmdfMTFfZGFyay5wbmcKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9wYWNrYWdlcy9NZWRpYUNvbXBvbmVudHMvcmVzL2RyYXdhYmxlLXhoZHBpL2ljX21yX2J1dHRvbl9jb25uZWN0aW5nXzExX2xpZ2h0LnBuZyBiL3BhY2thZ2VzL01lZGlhQ29tcG9uZW50cy9yZXMvZHJhd2FibGUteGhkcGkvaWNfbXJfYnV0dG9uX2Nvbm5lY3RpbmdfMTFfbGlnaHQucG5nCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2NWE0MDNlLi4wMDAwMDAwCi0tLSBhL3BhY2thZ2VzL01lZGlhQ29tcG9uZW50cy9yZXMvZHJhd2FibGUteGhkcGkvaWNfbXJfYnV0dG9uX2Nvbm5lY3RpbmdfMTFfbGlnaHQucG5nCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvTWVkaWFDb21wb25lbnRzL3Jlcy9kcmF3YWJsZS14aGRwaS9pY19tcl9idXR0b25fY29ubmVjdGluZ18xMl9kYXJrLnBuZyBiL3BhY2thZ2VzL01lZGlhQ29tcG9uZW50cy9yZXMvZHJhd2FibGUteGhkcGkvaWNfbXJfYnV0dG9uX2Nvbm5lY3RpbmdfMTJfZGFyay5wbmcKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGY2NDRiZmQuLjAwMDAwMDAKLS0tIGEvcGFja2FnZXMvTWVkaWFDb21wb25lbnRzL3Jlcy9kcmF3YWJsZS14aGRwaS9pY19tcl9idXR0b25fY29ubmVjdGluZ18xMl9kYXJrLnBuZworKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3BhY2thZ2VzL01lZGlhQ29tcG9uZW50cy9yZXMvZHJhd2FibGUteGhkcGkvaWNfbXJfYnV0dG9uX2Nvbm5lY3RpbmdfMTJfbGlnaHQucG5nIGIvcGFja2FnZXMvTWVkaWFDb21wb25lbnRzL3Jlcy9kcmF3YWJsZS14aGRwaS9pY19tcl9idXR0b25fY29ubmVjdGluZ18xMl9saWdodC5wbmcKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGM3ZDYwNDguLjAwMDAwMDAKLS0tIGEvcGFja2FnZXMvTWVkaWFDb21wb25lbnRzL3Jlcy9kcmF3YWJsZS14aGRwaS9pY19tcl9idXR0b25fY29ubmVjdGluZ18xMl9saWdodC5wbmcKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9wYWNrYWdlcy9NZWRpYUNvbXBvbmVudHMvcmVzL2RyYXdhYmxlLXhoZHBpL2ljX21yX2J1dHRvbl9jb25uZWN0aW5nXzEzX2RhcmsucG5nIGIvcGFja2FnZXMvTWVkaWFDb21wb25lbnRzL3Jlcy9kcmF3YWJsZS14aGRwaS9pY19tcl9idXR0b25fY29ubmVjdGluZ18xM19kYXJrLnBuZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNmUwZDU1OC4uMDAwMDAwMAotLS0gYS9wYWNrYWdlcy9NZWRpYUNvbXBvbmVudHMvcmVzL2RyYXdhYmxlLXhoZHBpL2ljX21yX2J1dHRvbl9jb25uZWN0aW5nXzEzX2RhcmsucG5nCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvTWVkaWFDb21wb25lbnRzL3Jlcy9kcmF3YWJsZS14aGRwaS9pY19tcl9idXR0b25fY29ubmVjdGluZ18xM19saWdodC5wbmcgYi9wYWNrYWdlcy9NZWRpYUNvbXBvbmVudHMvcmVzL2RyYXdhYmxlLXhoZHBpL2ljX21yX2J1dHRvbl9jb25uZWN0aW5nXzEzX2xpZ2h0LnBuZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjNiYzQ4ZC4uMDAwMDAwMAotLS0gYS9wYWNrYWdlcy9NZWRpYUNvbXBvbmVudHMvcmVzL2RyYXdhYmxlLXhoZHBpL2ljX21yX2J1dHRvbl9jb25uZWN0aW5nXzEzX2xpZ2h0LnBuZworKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3BhY2thZ2VzL01lZGlhQ29tcG9uZW50cy9yZXMvZHJhd2FibGUteGhkcGkvaWNfbXJfYnV0dG9uX2Nvbm5lY3RpbmdfMTRfZGFyay5wbmcgYi9wYWNrYWdlcy9NZWRpYUNvbXBvbmVudHMvcmVzL2RyYXdhYmxlLXhoZHBpL2ljX21yX2J1dHRvbl9jb25uZWN0aW5nXzE0X2RhcmsucG5nCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxNGQ4ZjhlLi4wMDAwMDAwCi0tLSBhL3BhY2thZ2VzL01lZGlhQ29tcG9uZW50cy9yZXMvZHJhd2FibGUteGhkcGkvaWNfbXJfYnV0dG9uX2Nvbm5lY3RpbmdfMTRfZGFyay5wbmcKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9wYWNrYWdlcy9NZWRpYUNvbXBvbmVudHMvcmVzL2RyYXdhYmxlLXhoZHBpL2ljX21yX2J1dHRvbl9jb25uZWN0aW5nXzE0X2xpZ2h0LnBuZyBiL3BhY2thZ2VzL01lZGlhQ29tcG9uZW50cy9yZXMvZHJhd2FibGUteGhkcGkvaWNfbXJfYnV0dG9uX2Nvbm5lY3RpbmdfMTRfbGlnaHQucG5nCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5OGI5MGU1Li4wMDAwMDAwCi0tLSBhL3BhY2thZ2VzL01lZGlhQ29tcG9uZW50cy9yZXMvZHJhd2FibGUteGhkcGkvaWNfbXJfYnV0dG9uX2Nvbm5lY3RpbmdfMTRfbGlnaHQucG5nCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvTWVkaWFDb21wb25lbnRzL3Jlcy9kcmF3YWJsZS14aGRwaS9pY19tcl9idXR0b25fY29ubmVjdGluZ18xNV9kYXJrLnBuZyBiL3BhY2thZ2VzL01lZGlhQ29tcG9uZW50cy9yZXMvZHJhd2FibGUteGhkcGkvaWNfbXJfYnV0dG9uX2Nvbm5lY3RpbmdfMTVfZGFyay5wbmcKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDgzMjM0YTcuLjAwMDAwMDAKLS0tIGEvcGFja2FnZXMvTWVkaWFDb21wb25lbnRzL3Jlcy9kcmF3YWJsZS14aGRwaS9pY19tcl9idXR0b25fY29ubmVjdGluZ18xNV9kYXJrLnBuZworKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3BhY2thZ2VzL01lZGlhQ29tcG9uZW50cy9yZXMvZHJhd2FibGUteGhkcGkvaWNfbXJfYnV0dG9uX2Nvbm5lY3RpbmdfMTVfbGlnaHQucG5nIGIvcGFja2FnZXMvTWVkaWFDb21wb25lbnRzL3Jlcy9kcmF3YWJsZS14aGRwaS9pY19tcl9idXR0b25fY29ubmVjdGluZ18xNV9saWdodC5wbmcKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQ3ZDQ1MmYuLjAwMDAwMDAKLS0tIGEvcGFja2FnZXMvTWVkaWFDb21wb25lbnRzL3Jlcy9kcmF3YWJsZS14aGRwaS9pY19tcl9idXR0b25fY29ubmVjdGluZ18xNV9saWdodC5wbmcKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9wYWNrYWdlcy9NZWRpYUNvbXBvbmVudHMvcmVzL2RyYXdhYmxlLXhoZHBpL2ljX21yX2J1dHRvbl9jb25uZWN0aW5nXzE2X2RhcmsucG5nIGIvcGFja2FnZXMvTWVkaWFDb21wb25lbnRzL3Jlcy9kcmF3YWJsZS14aGRwaS9pY19tcl9idXR0b25fY29ubmVjdGluZ18xNl9kYXJrLnBuZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjgxY2Y1YS4uMDAwMDAwMAotLS0gYS9wYWNrYWdlcy9NZWRpYUNvbXBvbmVudHMvcmVzL2RyYXdhYmxlLXhoZHBpL2ljX21yX2J1dHRvbl9jb25uZWN0aW5nXzE2X2RhcmsucG5nCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvTWVkaWFDb21wb25lbnRzL3Jlcy9kcmF3YWJsZS14aGRwaS9pY19tcl9idXR0b25fY29ubmVjdGluZ18xNl9saWdodC5wbmcgYi9wYWNrYWdlcy9NZWRpYUNvbXBvbmVudHMvcmVzL2RyYXdhYmxlLXhoZHBpL2ljX21yX2J1dHRvbl9jb25uZWN0aW5nXzE2X2xpZ2h0LnBuZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjBkMDhiNC4uMDAwMDAwMAotLS0gYS9wYWNrYWdlcy9NZWRpYUNvbXBvbmVudHMvcmVzL2RyYXdhYmxlLXhoZHBpL2ljX21yX2J1dHRvbl9jb25uZWN0aW5nXzE2X2xpZ2h0LnBuZworKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3BhY2thZ2VzL01lZGlhQ29tcG9uZW50cy9yZXMvZHJhd2FibGUteGhkcGkvaWNfbXJfYnV0dG9uX2Nvbm5lY3RpbmdfMTdfZGFyay5wbmcgYi9wYWNrYWdlcy9NZWRpYUNvbXBvbmVudHMvcmVzL2RyYXdhYmxlLXhoZHBpL2ljX21yX2J1dHRvbl9jb25uZWN0aW5nXzE3X2RhcmsucG5nCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2ZmViM2YxLi4wMDAwMDAwCi0tLSBhL3BhY2thZ2VzL01lZGlhQ29tcG9uZW50cy9yZXMvZHJhd2FibGUteGhkcGkvaWNfbXJfYnV0dG9uX2Nvbm5lY3RpbmdfMTdfZGFyay5wbmcKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9wYWNrYWdlcy9NZWRpYUNvbXBvbmVudHMvcmVzL2RyYXdhYmxlLXhoZHBpL2ljX21yX2J1dHRvbl9jb25uZWN0aW5nXzE3X2xpZ2h0LnBuZyBiL3BhY2thZ2VzL01lZGlhQ29tcG9uZW50cy9yZXMvZHJhd2FibGUteGhkcGkvaWNfbXJfYnV0dG9uX2Nvbm5lY3RpbmdfMTdfbGlnaHQucG5nCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlNmFlOGIzLi4wMDAwMDAwCi0tLSBhL3BhY2thZ2VzL01lZGlhQ29tcG9uZW50cy9yZXMvZHJhd2FibGUteGhkcGkvaWNfbXJfYnV0dG9uX2Nvbm5lY3RpbmdfMTdfbGlnaHQucG5nCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvTWVkaWFDb21wb25lbnRzL3Jlcy9kcmF3YWJsZS14aGRwaS9pY19tcl9idXR0b25fY29ubmVjdGluZ18xOF9kYXJrLnBuZyBiL3BhY2thZ2VzL01lZGlhQ29tcG9uZW50cy9yZXMvZHJhd2FibGUteGhkcGkvaWNfbXJfYnV0dG9uX2Nvbm5lY3RpbmdfMThfZGFyay5wbmcKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDBiMGZjMDguLjAwMDAwMDAKLS0tIGEvcGFja2FnZXMvTWVkaWFDb21wb25lbnRzL3Jlcy9kcmF3YWJsZS14aGRwaS9pY19tcl9idXR0b25fY29ubmVjdGluZ18xOF9kYXJrLnBuZworKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3BhY2thZ2VzL01lZGlhQ29tcG9uZW50cy9yZXMvZHJhd2FibGUteGhkcGkvaWNfbXJfYnV0dG9uX2Nvbm5lY3RpbmdfMThfbGlnaHQucG5nIGIvcGFja2FnZXMvTWVkaWFDb21wb25lbnRzL3Jlcy9kcmF3YWJsZS14aGRwaS9pY19tcl9idXR0b25fY29ubmVjdGluZ18xOF9saWdodC5wbmcKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGMyYTE2YWMuLjAwMDAwMDAKLS0tIGEvcGFja2FnZXMvTWVkaWFDb21wb25lbnRzL3Jlcy9kcmF3YWJsZS14aGRwaS9pY19tcl9idXR0b25fY29ubmVjdGluZ18xOF9saWdodC5wbmcKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9wYWNrYWdlcy9NZWRpYUNvbXBvbmVudHMvcmVzL2RyYXdhYmxlLXhoZHBpL2ljX21yX2J1dHRvbl9jb25uZWN0aW5nXzE5X2RhcmsucG5nIGIvcGFja2FnZXMvTWVkaWFDb21wb25lbnRzL3Jlcy9kcmF3YWJsZS14aGRwaS9pY19tcl9idXR0b25fY29ubmVjdGluZ18xOV9kYXJrLnBuZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTM1OThjYy4uMDAwMDAwMAotLS0gYS9wYWNrYWdlcy9NZWRpYUNvbXBvbmVudHMvcmVzL2RyYXdhYmxlLXhoZHBpL2ljX21yX2J1dHRvbl9jb25uZWN0aW5nXzE5X2RhcmsucG5nCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvTWVkaWFDb21wb25lbnRzL3Jlcy9kcmF3YWJsZS14aGRwaS9pY19tcl9idXR0b25fY29ubmVjdGluZ18xOV9saWdodC5wbmcgYi9wYWNrYWdlcy9NZWRpYUNvbXBvbmVudHMvcmVzL2RyYXdhYmxlLXhoZHBpL2ljX21yX2J1dHRvbl9jb25uZWN0aW5nXzE5X2xpZ2h0LnBuZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODQ2ZDE2ZC4uMDAwMDAwMAotLS0gYS9wYWNrYWdlcy9NZWRpYUNvbXBvbmVudHMvcmVzL2RyYXdhYmxlLXhoZHBpL2ljX21yX2J1dHRvbl9jb25uZWN0aW5nXzE5X2xpZ2h0LnBuZworKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3BhY2thZ2VzL01lZGlhQ29tcG9uZW50cy9yZXMvZHJhd2FibGUteGhkcGkvaWNfbXJfYnV0dG9uX2Nvbm5lY3RpbmdfMjBfZGFyay5wbmcgYi9wYWNrYWdlcy9NZWRpYUNvbXBvbmVudHMvcmVzL2RyYXdhYmxlLXhoZHBpL2ljX21yX2J1dHRvbl9jb25uZWN0aW5nXzIwX2RhcmsucG5nCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyMDcwNDU1Li4wMDAwMDAwCi0tLSBhL3BhY2thZ2VzL01lZGlhQ29tcG9uZW50cy9yZXMvZHJhd2FibGUteGhkcGkvaWNfbXJfYnV0dG9uX2Nvbm5lY3RpbmdfMjBfZGFyay5wbmcKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9wYWNrYWdlcy9NZWRpYUNvbXBvbmVudHMvcmVzL2RyYXdhYmxlLXhoZHBpL2ljX21yX2J1dHRvbl9jb25uZWN0aW5nXzIwX2xpZ2h0LnBuZyBiL3BhY2thZ2VzL01lZGlhQ29tcG9uZW50cy9yZXMvZHJhd2FibGUteGhkcGkvaWNfbXJfYnV0dG9uX2Nvbm5lY3RpbmdfMjBfbGlnaHQucG5nCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhZTZkYjEzLi4wMDAwMDAwCi0tLSBhL3BhY2thZ2VzL01lZGlhQ29tcG9uZW50cy9yZXMvZHJhd2FibGUteGhkcGkvaWNfbXJfYnV0dG9uX2Nvbm5lY3RpbmdfMjBfbGlnaHQucG5nCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvTWVkaWFDb21wb25lbnRzL3Jlcy9kcmF3YWJsZS14aGRwaS9pY19tcl9idXR0b25fY29ubmVjdGluZ18yMV9kYXJrLnBuZyBiL3BhY2thZ2VzL01lZGlhQ29tcG9uZW50cy9yZXMvZHJhd2FibGUteGhkcGkvaWNfbXJfYnV0dG9uX2Nvbm5lY3RpbmdfMjFfZGFyay5wbmcKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDdmMzgyOGEuLjAwMDAwMDAKLS0tIGEvcGFja2FnZXMvTWVkaWFDb21wb25lbnRzL3Jlcy9kcmF3YWJsZS14aGRwaS9pY19tcl9idXR0b25fY29ubmVjdGluZ18yMV9kYXJrLnBuZworKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3BhY2thZ2VzL01lZGlhQ29tcG9uZW50cy9yZXMvZHJhd2FibGUteGhkcGkvaWNfbXJfYnV0dG9uX2Nvbm5lY3RpbmdfMjFfbGlnaHQucG5nIGIvcGFja2FnZXMvTWVkaWFDb21wb25lbnRzL3Jlcy9kcmF3YWJsZS14aGRwaS9pY19tcl9idXR0b25fY29ubmVjdGluZ18yMV9saWdodC5wbmcKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGFhY2NjNzMuLjAwMDAwMDAKLS0tIGEvcGFja2FnZXMvTWVkaWFDb21wb25lbnRzL3Jlcy9kcmF3YWJsZS14aGRwaS9pY19tcl9idXR0b25fY29ubmVjdGluZ18yMV9saWdodC5wbmcKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9wYWNrYWdlcy9NZWRpYUNvbXBvbmVudHMvcmVzL2RyYXdhYmxlLXhoZHBpL2ljX21yX2J1dHRvbl9jb25uZWN0aW5nXzIyX2RhcmsucG5nIGIvcGFja2FnZXMvTWVkaWFDb21wb25lbnRzL3Jlcy9kcmF3YWJsZS14aGRwaS9pY19tcl9idXR0b25fY29ubmVjdGluZ18yMl9kYXJrLnBuZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNWM4Y2VkOS4uMDAwMDAwMAotLS0gYS9wYWNrYWdlcy9NZWRpYUNvbXBvbmVudHMvcmVzL2RyYXdhYmxlLXhoZHBpL2ljX21yX2J1dHRvbl9jb25uZWN0aW5nXzIyX2RhcmsucG5nCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvTWVkaWFDb21wb25lbnRzL3Jlcy9kcmF3YWJsZS14aGRwaS9pY19tcl9idXR0b25fY29ubmVjdGluZ18yMl9saWdodC5wbmcgYi9wYWNrYWdlcy9NZWRpYUNvbXBvbmVudHMvcmVzL2RyYXdhYmxlLXhoZHBpL2ljX21yX2J1dHRvbl9jb25uZWN0aW5nXzIyX2xpZ2h0LnBuZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYWQwMWI5ZS4uMDAwMDAwMAotLS0gYS9wYWNrYWdlcy9NZWRpYUNvbXBvbmVudHMvcmVzL2RyYXdhYmxlLXhoZHBpL2ljX21yX2J1dHRvbl9jb25uZWN0aW5nXzIyX2xpZ2h0LnBuZworKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3BhY2thZ2VzL01lZGlhQ29tcG9uZW50cy9yZXMvZHJhd2FibGUteGhkcGkvaWNfbXJfYnV0dG9uX2Nvbm5lY3RpbmdfMjNfZGFyay5wbmcgYi9wYWNrYWdlcy9NZWRpYUNvbXBvbmVudHMvcmVzL2RyYXdhYmxlLXhoZHBpL2ljX21yX2J1dHRvbl9jb25uZWN0aW5nXzIzX2RhcmsucG5nCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjZTMxZGQzLi4wMDAwMDAwCi0tLSBhL3BhY2thZ2VzL01lZGlhQ29tcG9uZW50cy9yZXMvZHJhd2FibGUteGhkcGkvaWNfbXJfYnV0dG9uX2Nvbm5lY3RpbmdfMjNfZGFyay5wbmcKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9wYWNrYWdlcy9NZWRpYUNvbXBvbmVudHMvcmVzL2RyYXdhYmxlLXhoZHBpL2ljX21yX2J1dHRvbl9jb25uZWN0aW5nXzIzX2xpZ2h0LnBuZyBiL3BhY2thZ2VzL01lZGlhQ29tcG9uZW50cy9yZXMvZHJhd2FibGUteGhkcGkvaWNfbXJfYnV0dG9uX2Nvbm5lY3RpbmdfMjNfbGlnaHQucG5nCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5ZWY3OGU0Li4wMDAwMDAwCi0tLSBhL3BhY2thZ2VzL01lZGlhQ29tcG9uZW50cy9yZXMvZHJhd2FibGUteGhkcGkvaWNfbXJfYnV0dG9uX2Nvbm5lY3RpbmdfMjNfbGlnaHQucG5nCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvTWVkaWFDb21wb25lbnRzL3Jlcy9kcmF3YWJsZS14aGRwaS9pY19tcl9idXR0b25fY29ubmVjdGluZ18yNF9kYXJrLnBuZyBiL3BhY2thZ2VzL01lZGlhQ29tcG9uZW50cy9yZXMvZHJhd2FibGUteGhkcGkvaWNfbXJfYnV0dG9uX2Nvbm5lY3RpbmdfMjRfZGFyay5wbmcKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGE3YzJjZGIuLjAwMDAwMDAKLS0tIGEvcGFja2FnZXMvTWVkaWFDb21wb25lbnRzL3Jlcy9kcmF3YWJsZS14aGRwaS9pY19tcl9idXR0b25fY29ubmVjdGluZ18yNF9kYXJrLnBuZworKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3BhY2thZ2VzL01lZGlhQ29tcG9uZW50cy9yZXMvZHJhd2FibGUteGhkcGkvaWNfbXJfYnV0dG9uX2Nvbm5lY3RpbmdfMjRfbGlnaHQucG5nIGIvcGFja2FnZXMvTWVkaWFDb21wb25lbnRzL3Jlcy9kcmF3YWJsZS14aGRwaS9pY19tcl9idXR0b25fY29ubmVjdGluZ18yNF9saWdodC5wbmcKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGU3YzViZWEuLjAwMDAwMDAKLS0tIGEvcGFja2FnZXMvTWVkaWFDb21wb25lbnRzL3Jlcy9kcmF3YWJsZS14aGRwaS9pY19tcl9idXR0b25fY29ubmVjdGluZ18yNF9saWdodC5wbmcKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9wYWNrYWdlcy9NZWRpYUNvbXBvbmVudHMvcmVzL2RyYXdhYmxlLXhoZHBpL2ljX21yX2J1dHRvbl9jb25uZWN0aW5nXzI1X2RhcmsucG5nIGIvcGFja2FnZXMvTWVkaWFDb21wb25lbnRzL3Jlcy9kcmF3YWJsZS14aGRwaS9pY19tcl9idXR0b25fY29ubmVjdGluZ18yNV9kYXJrLnBuZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZWNhZDBkNC4uMDAwMDAwMAotLS0gYS9wYWNrYWdlcy9NZWRpYUNvbXBvbmVudHMvcmVzL2RyYXdhYmxlLXhoZHBpL2ljX21yX2J1dHRvbl9jb25uZWN0aW5nXzI1X2RhcmsucG5nCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvTWVkaWFDb21wb25lbnRzL3Jlcy9kcmF3YWJsZS14aGRwaS9pY19tcl9idXR0b25fY29ubmVjdGluZ18yNV9saWdodC5wbmcgYi9wYWNrYWdlcy9NZWRpYUNvbXBvbmVudHMvcmVzL2RyYXdhYmxlLXhoZHBpL2ljX21yX2J1dHRvbl9jb25uZWN0aW5nXzI1X2xpZ2h0LnBuZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNWZhNTkyMy4uMDAwMDAwMAotLS0gYS9wYWNrYWdlcy9NZWRpYUNvbXBvbmVudHMvcmVzL2RyYXdhYmxlLXhoZHBpL2ljX21yX2J1dHRvbl9jb25uZWN0aW5nXzI1X2xpZ2h0LnBuZworKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3BhY2thZ2VzL01lZGlhQ29tcG9uZW50cy9yZXMvZHJhd2FibGUteGhkcGkvaWNfbXJfYnV0dG9uX2Nvbm5lY3RpbmdfMjZfZGFyay5wbmcgYi9wYWNrYWdlcy9NZWRpYUNvbXBvbmVudHMvcmVzL2RyYXdhYmxlLXhoZHBpL2ljX21yX2J1dHRvbl9jb25uZWN0aW5nXzI2X2RhcmsucG5nCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmNjg3ZTI1Li4wMDAwMDAwCi0tLSBhL3BhY2thZ2VzL01lZGlhQ29tcG9uZW50cy9yZXMvZHJhd2FibGUteGhkcGkvaWNfbXJfYnV0dG9uX2Nvbm5lY3RpbmdfMjZfZGFyay5wbmcKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9wYWNrYWdlcy9NZWRpYUNvbXBvbmVudHMvcmVzL2RyYXdhYmxlLXhoZHBpL2ljX21yX2J1dHRvbl9jb25uZWN0aW5nXzI2X2xpZ2h0LnBuZyBiL3BhY2thZ2VzL01lZGlhQ29tcG9uZW50cy9yZXMvZHJhd2FibGUteGhkcGkvaWNfbXJfYnV0dG9uX2Nvbm5lY3RpbmdfMjZfbGlnaHQucG5nCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5YzA2ZGI4Li4wMDAwMDAwCi0tLSBhL3BhY2thZ2VzL01lZGlhQ29tcG9uZW50cy9yZXMvZHJhd2FibGUteGhkcGkvaWNfbXJfYnV0dG9uX2Nvbm5lY3RpbmdfMjZfbGlnaHQucG5nCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvTWVkaWFDb21wb25lbnRzL3Jlcy9kcmF3YWJsZS14aGRwaS9pY19tcl9idXR0b25fY29ubmVjdGluZ18yN19kYXJrLnBuZyBiL3BhY2thZ2VzL01lZGlhQ29tcG9uZW50cy9yZXMvZHJhd2FibGUteGhkcGkvaWNfbXJfYnV0dG9uX2Nvbm5lY3RpbmdfMjdfZGFyay5wbmcKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDkwMjI1YmEuLjAwMDAwMDAKLS0tIGEvcGFja2FnZXMvTWVkaWFDb21wb25lbnRzL3Jlcy9kcmF3YWJsZS14aGRwaS9pY19tcl9idXR0b25fY29ubmVjdGluZ18yN19kYXJrLnBuZworKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3BhY2thZ2VzL01lZGlhQ29tcG9uZW50cy9yZXMvZHJhd2FibGUteGhkcGkvaWNfbXJfYnV0dG9uX2Nvbm5lY3RpbmdfMjdfbGlnaHQucG5nIGIvcGFja2FnZXMvTWVkaWFDb21wb25lbnRzL3Jlcy9kcmF3YWJsZS14aGRwaS9pY19tcl9idXR0b25fY29ubmVjdGluZ18yN19saWdodC5wbmcKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDE5Njk3ZGUuLjAwMDAwMDAKLS0tIGEvcGFja2FnZXMvTWVkaWFDb21wb25lbnRzL3Jlcy9kcmF3YWJsZS14aGRwaS9pY19tcl9idXR0b25fY29ubmVjdGluZ18yN19saWdodC5wbmcKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9wYWNrYWdlcy9NZWRpYUNvbXBvbmVudHMvcmVzL2RyYXdhYmxlLXhoZHBpL2ljX21yX2J1dHRvbl9jb25uZWN0aW5nXzI4X2RhcmsucG5nIGIvcGFja2FnZXMvTWVkaWFDb21wb25lbnRzL3Jlcy9kcmF3YWJsZS14aGRwaS9pY19tcl9idXR0b25fY29ubmVjdGluZ18yOF9kYXJrLnBuZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDM3ZWMyMS4uMDAwMDAwMAotLS0gYS9wYWNrYWdlcy9NZWRpYUNvbXBvbmVudHMvcmVzL2RyYXdhYmxlLXhoZHBpL2ljX21yX2J1dHRvbl9jb25uZWN0aW5nXzI4X2RhcmsucG5nCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvTWVkaWFDb21wb25lbnRzL3Jlcy9kcmF3YWJsZS14aGRwaS9pY19tcl9idXR0b25fY29ubmVjdGluZ18yOF9saWdodC5wbmcgYi9wYWNrYWdlcy9NZWRpYUNvbXBvbmVudHMvcmVzL2RyYXdhYmxlLXhoZHBpL2ljX21yX2J1dHRvbl9jb25uZWN0aW5nXzI4X2xpZ2h0LnBuZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjE4NDBiZi4uMDAwMDAwMAotLS0gYS9wYWNrYWdlcy9NZWRpYUNvbXBvbmVudHMvcmVzL2RyYXdhYmxlLXhoZHBpL2ljX21yX2J1dHRvbl9jb25uZWN0aW5nXzI4X2xpZ2h0LnBuZworKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3BhY2thZ2VzL01lZGlhQ29tcG9uZW50cy9yZXMvZHJhd2FibGUteGhkcGkvaWNfbXJfYnV0dG9uX2Nvbm5lY3RpbmdfMjlfZGFyay5wbmcgYi9wYWNrYWdlcy9NZWRpYUNvbXBvbmVudHMvcmVzL2RyYXdhYmxlLXhoZHBpL2ljX21yX2J1dHRvbl9jb25uZWN0aW5nXzI5X2RhcmsucG5nCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1NDQ1ZTNhLi4wMDAwMDAwCi0tLSBhL3BhY2thZ2VzL01lZGlhQ29tcG9uZW50cy9yZXMvZHJhd2FibGUteGhkcGkvaWNfbXJfYnV0dG9uX2Nvbm5lY3RpbmdfMjlfZGFyay5wbmcKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9wYWNrYWdlcy9NZWRpYUNvbXBvbmVudHMvcmVzL2RyYXdhYmxlLXhoZHBpL2ljX21yX2J1dHRvbl9jb25uZWN0aW5nXzI5X2xpZ2h0LnBuZyBiL3BhY2thZ2VzL01lZGlhQ29tcG9uZW50cy9yZXMvZHJhd2FibGUteGhkcGkvaWNfbXJfYnV0dG9uX2Nvbm5lY3RpbmdfMjlfbGlnaHQucG5nCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyMzM3YzY1Li4wMDAwMDAwCi0tLSBhL3BhY2thZ2VzL01lZGlhQ29tcG9uZW50cy9yZXMvZHJhd2FibGUteGhkcGkvaWNfbXJfYnV0dG9uX2Nvbm5lY3RpbmdfMjlfbGlnaHQucG5nCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvTWVkaWFDb21wb25lbnRzL3Jlcy9kcmF3YWJsZS14aGRwaS9pY19tcl9idXR0b25fY29ubmVjdGluZ18zMF9kYXJrLnBuZyBiL3BhY2thZ2VzL01lZGlhQ29tcG9uZW50cy9yZXMvZHJhd2FibGUteGhkcGkvaWNfbXJfYnV0dG9uX2Nvbm5lY3RpbmdfMzBfZGFyay5wbmcKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGY2ZGQyMTQuLjAwMDAwMDAKLS0tIGEvcGFja2FnZXMvTWVkaWFDb21wb25lbnRzL3Jlcy9kcmF3YWJsZS14aGRwaS9pY19tcl9idXR0b25fY29ubmVjdGluZ18zMF9kYXJrLnBuZworKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3BhY2thZ2VzL01lZGlhQ29tcG9uZW50cy9yZXMvZHJhd2FibGUteGhkcGkvaWNfbXJfYnV0dG9uX2Nvbm5lY3RpbmdfMzBfbGlnaHQucG5nIGIvcGFja2FnZXMvTWVkaWFDb21wb25lbnRzL3Jlcy9kcmF3YWJsZS14aGRwaS9pY19tcl9idXR0b25fY29ubmVjdGluZ18zMF9saWdodC5wbmcKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDZiN2JkY2QuLjAwMDAwMDAKLS0tIGEvcGFja2FnZXMvTWVkaWFDb21wb25lbnRzL3Jlcy9kcmF3YWJsZS14aGRwaS9pY19tcl9idXR0b25fY29ubmVjdGluZ18zMF9saWdodC5wbmcKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9wYWNrYWdlcy9NZWRpYUNvbXBvbmVudHMvcmVzL2RyYXdhYmxlLXhoZHBpL2ljX21yX2J1dHRvbl9kaXNhYmxlZF9kYXJrLnBuZyBiL3BhY2thZ2VzL01lZGlhQ29tcG9uZW50cy9yZXMvZHJhd2FibGUteGhkcGkvaWNfbXJfYnV0dG9uX2Rpc2FibGVkX2RhcmsucG5nCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjNGRjMTMyLi4wMDAwMDAwCi0tLSBhL3BhY2thZ2VzL01lZGlhQ29tcG9uZW50cy9yZXMvZHJhd2FibGUteGhkcGkvaWNfbXJfYnV0dG9uX2Rpc2FibGVkX2RhcmsucG5nCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvTWVkaWFDb21wb25lbnRzL3Jlcy9kcmF3YWJsZS14aGRwaS9pY19tcl9idXR0b25fZGlzYWJsZWRfbGlnaHQucG5nIGIvcGFja2FnZXMvTWVkaWFDb21wb25lbnRzL3Jlcy9kcmF3YWJsZS14aGRwaS9pY19tcl9idXR0b25fZGlzYWJsZWRfbGlnaHQucG5nCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiMTQ2MTdjLi4wMDAwMDAwCi0tLSBhL3BhY2thZ2VzL01lZGlhQ29tcG9uZW50cy9yZXMvZHJhd2FibGUteGhkcGkvaWNfbXJfYnV0dG9uX2Rpc2FibGVkX2xpZ2h0LnBuZworKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3BhY2thZ2VzL01lZGlhQ29tcG9uZW50cy9yZXMvZHJhd2FibGUteGhkcGkvaWNfbXJfYnV0dG9uX2Rpc2Nvbm5lY3RlZF9kYXJrLnBuZyBiL3BhY2thZ2VzL01lZGlhQ29tcG9uZW50cy9yZXMvZHJhd2FibGUteGhkcGkvaWNfbXJfYnV0dG9uX2Rpc2Nvbm5lY3RlZF9kYXJrLnBuZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYmIzMDc3My4uMDAwMDAwMAotLS0gYS9wYWNrYWdlcy9NZWRpYUNvbXBvbmVudHMvcmVzL2RyYXdhYmxlLXhoZHBpL2ljX21yX2J1dHRvbl9kaXNjb25uZWN0ZWRfZGFyay5wbmcKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9wYWNrYWdlcy9NZWRpYUNvbXBvbmVudHMvcmVzL2RyYXdhYmxlLXhoZHBpL2ljX21yX2J1dHRvbl9kaXNjb25uZWN0ZWRfbGlnaHQucG5nIGIvcGFja2FnZXMvTWVkaWFDb21wb25lbnRzL3Jlcy9kcmF3YWJsZS14aGRwaS9pY19tcl9idXR0b25fZGlzY29ubmVjdGVkX2xpZ2h0LnBuZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTA1ZDdkNy4uMDAwMDAwMAotLS0gYS9wYWNrYWdlcy9NZWRpYUNvbXBvbmVudHMvcmVzL2RyYXdhYmxlLXhoZHBpL2ljX21yX2J1dHRvbl9kaXNjb25uZWN0ZWRfbGlnaHQucG5nCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvTWVkaWFDb21wb25lbnRzL3Jlcy9kcmF3YWJsZS14aGRwaS9pY19tcl9idXR0b25fZ3JleS5wbmcgYi9wYWNrYWdlcy9NZWRpYUNvbXBvbmVudHMvcmVzL2RyYXdhYmxlLXhoZHBpL2ljX21yX2J1dHRvbl9ncmV5LnBuZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjIzOGQ1OC4uMDAwMDAwMAotLS0gYS9wYWNrYWdlcy9NZWRpYUNvbXBvbmVudHMvcmVzL2RyYXdhYmxlLXhoZHBpL2ljX21yX2J1dHRvbl9ncmV5LnBuZworKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3BhY2thZ2VzL01lZGlhQ29tcG9uZW50cy9yZXMvZHJhd2FibGUteGhkcGkvaWNfdm9sX3R5cGVfc3BlYWtlcl9kYXJrLnBuZyBiL3BhY2thZ2VzL01lZGlhQ29tcG9uZW50cy9yZXMvZHJhd2FibGUteGhkcGkvaWNfdm9sX3R5cGVfc3BlYWtlcl9kYXJrLnBuZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggZTQwMzQ5ZC4uMDAwMDAwMAotLS0gYS9wYWNrYWdlcy9NZWRpYUNvbXBvbmVudHMvcmVzL2RyYXdhYmxlLXhoZHBpL2ljX3ZvbF90eXBlX3NwZWFrZXJfZGFyay5wbmcKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9wYWNrYWdlcy9NZWRpYUNvbXBvbmVudHMvcmVzL2RyYXdhYmxlLXhoZHBpL2ljX3ZvbF90eXBlX3NwZWFrZXJfZ3JvdXBfZGFyay5wbmcgYi9wYWNrYWdlcy9NZWRpYUNvbXBvbmVudHMvcmVzL2RyYXdhYmxlLXhoZHBpL2ljX3ZvbF90eXBlX3NwZWFrZXJfZ3JvdXBfZGFyay5wbmcKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IGY2N2M0NjMuLjAwMDAwMDAKLS0tIGEvcGFja2FnZXMvTWVkaWFDb21wb25lbnRzL3Jlcy9kcmF3YWJsZS14aGRwaS9pY192b2xfdHlwZV9zcGVha2VyX2dyb3VwX2RhcmsucG5nCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvTWVkaWFDb21wb25lbnRzL3Jlcy9kcmF3YWJsZS14aGRwaS9pY192b2xfdHlwZV9zcGVha2VyX2dyb3VwX2xpZ2h0LnBuZyBiL3BhY2thZ2VzL01lZGlhQ29tcG9uZW50cy9yZXMvZHJhd2FibGUteGhkcGkvaWNfdm9sX3R5cGVfc3BlYWtlcl9ncm91cF9saWdodC5wbmcKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDdmY2ViZjUuLjAwMDAwMDAKLS0tIGEvcGFja2FnZXMvTWVkaWFDb21wb25lbnRzL3Jlcy9kcmF3YWJsZS14aGRwaS9pY192b2xfdHlwZV9zcGVha2VyX2dyb3VwX2xpZ2h0LnBuZworKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3BhY2thZ2VzL01lZGlhQ29tcG9uZW50cy9yZXMvZHJhd2FibGUteGhkcGkvaWNfdm9sX3R5cGVfc3BlYWtlcl9saWdodC5wbmcgYi9wYWNrYWdlcy9NZWRpYUNvbXBvbmVudHMvcmVzL2RyYXdhYmxlLXhoZHBpL2ljX3ZvbF90eXBlX3NwZWFrZXJfbGlnaHQucG5nCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDc1NQppbmRleCBlYTMyYTdhLi4wMDAwMDAwCi0tLSBhL3BhY2thZ2VzL01lZGlhQ29tcG9uZW50cy9yZXMvZHJhd2FibGUteGhkcGkvaWNfdm9sX3R5cGVfc3BlYWtlcl9saWdodC5wbmcKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9wYWNrYWdlcy9NZWRpYUNvbXBvbmVudHMvcmVzL2RyYXdhYmxlLXhoZHBpL2ljX3ZvbF90eXBlX3R2X2RhcmsucG5nIGIvcGFja2FnZXMvTWVkaWFDb21wb25lbnRzL3Jlcy9kcmF3YWJsZS14aGRwaS9pY192b2xfdHlwZV90dl9kYXJrLnBuZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggZDYyY2EzNy4uMDAwMDAwMAotLS0gYS9wYWNrYWdlcy9NZWRpYUNvbXBvbmVudHMvcmVzL2RyYXdhYmxlLXhoZHBpL2ljX3ZvbF90eXBlX3R2X2RhcmsucG5nCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvTWVkaWFDb21wb25lbnRzL3Jlcy9kcmF3YWJsZS14aGRwaS9pY192b2xfdHlwZV90dl9saWdodC5wbmcgYi9wYWNrYWdlcy9NZWRpYUNvbXBvbmVudHMvcmVzL2RyYXdhYmxlLXhoZHBpL2ljX3ZvbF90eXBlX3R2X2xpZ2h0LnBuZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMzEzMTI1Ni4uMDAwMDAwMAotLS0gYS9wYWNrYWdlcy9NZWRpYUNvbXBvbmVudHMvcmVzL2RyYXdhYmxlLXhoZHBpL2ljX3ZvbF90eXBlX3R2X2xpZ2h0LnBuZworKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3BhY2thZ2VzL01lZGlhQ29tcG9uZW50cy9yZXMvZHJhd2FibGUteHhoZHBpL2ljX2F1ZGlvdHJhY2tfZGFyay5wbmcgYi9wYWNrYWdlcy9NZWRpYUNvbXBvbmVudHMvcmVzL2RyYXdhYmxlLXh4aGRwaS9pY19hdWRpb3RyYWNrX2RhcmsucG5nCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmMTMxZTFiLi4wMDAwMDAwCi0tLSBhL3BhY2thZ2VzL01lZGlhQ29tcG9uZW50cy9yZXMvZHJhd2FibGUteHhoZHBpL2ljX2F1ZGlvdHJhY2tfZGFyay5wbmcKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9wYWNrYWdlcy9NZWRpYUNvbXBvbmVudHMvcmVzL2RyYXdhYmxlLXh4aGRwaS9pY19hdWRpb3RyYWNrX2xpZ2h0LnBuZyBiL3BhY2thZ2VzL01lZGlhQ29tcG9uZW50cy9yZXMvZHJhd2FibGUteHhoZHBpL2ljX2F1ZGlvdHJhY2tfbGlnaHQucG5nCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlNTk0NmEyLi4wMDAwMDAwCi0tLSBhL3BhY2thZ2VzL01lZGlhQ29tcG9uZW50cy9yZXMvZHJhd2FibGUteHhoZHBpL2ljX2F1ZGlvdHJhY2tfbGlnaHQucG5nCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvTWVkaWFDb21wb25lbnRzL3Jlcy9kcmF3YWJsZS14eGhkcGkvaWNfZGlhbG9nX2Nsb3NlX2RhcmsucG5nIGIvcGFja2FnZXMvTWVkaWFDb21wb25lbnRzL3Jlcy9kcmF3YWJsZS14eGhkcGkvaWNfZGlhbG9nX2Nsb3NlX2RhcmsucG5nCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiODVlODdmLi4wMDAwMDAwCi0tLSBhL3BhY2thZ2VzL01lZGlhQ29tcG9uZW50cy9yZXMvZHJhd2FibGUteHhoZHBpL2ljX2RpYWxvZ19jbG9zZV9kYXJrLnBuZworKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3BhY2thZ2VzL01lZGlhQ29tcG9uZW50cy9yZXMvZHJhd2FibGUteHhoZHBpL2ljX2RpYWxvZ19jbG9zZV9saWdodC5wbmcgYi9wYWNrYWdlcy9NZWRpYUNvbXBvbmVudHMvcmVzL2RyYXdhYmxlLXh4aGRwaS9pY19kaWFsb2dfY2xvc2VfbGlnaHQucG5nCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1MWI0NDAxLi4wMDAwMDAwCi0tLSBhL3BhY2thZ2VzL01lZGlhQ29tcG9uZW50cy9yZXMvZHJhd2FibGUteHhoZHBpL2ljX2RpYWxvZ19jbG9zZV9saWdodC5wbmcKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9wYWNrYWdlcy9NZWRpYUNvbXBvbmVudHMvcmVzL2RyYXdhYmxlLXh4aGRwaS9pY19tZWRpYV9wYXVzZV9kYXJrLnBuZyBiL3BhY2thZ2VzL01lZGlhQ29tcG9uZW50cy9yZXMvZHJhd2FibGUteHhoZHBpL2ljX21lZGlhX3BhdXNlX2RhcmsucG5nCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzZWE3ZTAzLi4wMDAwMDAwCi0tLSBhL3BhY2thZ2VzL01lZGlhQ29tcG9uZW50cy9yZXMvZHJhd2FibGUteHhoZHBpL2ljX21lZGlhX3BhdXNlX2RhcmsucG5nCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvTWVkaWFDb21wb25lbnRzL3Jlcy9kcmF3YWJsZS14eGhkcGkvaWNfbWVkaWFfcGF1c2VfbGlnaHQucG5nIGIvcGFja2FnZXMvTWVkaWFDb21wb25lbnRzL3Jlcy9kcmF3YWJsZS14eGhkcGkvaWNfbWVkaWFfcGF1c2VfbGlnaHQucG5nCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkYzYzNTM4Li4wMDAwMDAwCi0tLSBhL3BhY2thZ2VzL01lZGlhQ29tcG9uZW50cy9yZXMvZHJhd2FibGUteHhoZHBpL2ljX21lZGlhX3BhdXNlX2xpZ2h0LnBuZworKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3BhY2thZ2VzL01lZGlhQ29tcG9uZW50cy9yZXMvZHJhd2FibGUteHhoZHBpL2ljX21lZGlhX3BsYXlfZGFyay5wbmcgYi9wYWNrYWdlcy9NZWRpYUNvbXBvbmVudHMvcmVzL2RyYXdhYmxlLXh4aGRwaS9pY19tZWRpYV9wbGF5X2RhcmsucG5nCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyNzQ1YzNhLi4wMDAwMDAwCi0tLSBhL3BhY2thZ2VzL01lZGlhQ29tcG9uZW50cy9yZXMvZHJhd2FibGUteHhoZHBpL2ljX21lZGlhX3BsYXlfZGFyay5wbmcKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9wYWNrYWdlcy9NZWRpYUNvbXBvbmVudHMvcmVzL2RyYXdhYmxlLXh4aGRwaS9pY19tZWRpYV9wbGF5X2xpZ2h0LnBuZyBiL3BhY2thZ2VzL01lZGlhQ29tcG9uZW50cy9yZXMvZHJhd2FibGUteHhoZHBpL2ljX21lZGlhX3BsYXlfbGlnaHQucG5nCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlZGEzYmE1Li4wMDAwMDAwCi0tLSBhL3BhY2thZ2VzL01lZGlhQ29tcG9uZW50cy9yZXMvZHJhd2FibGUteHhoZHBpL2ljX21lZGlhX3BsYXlfbGlnaHQucG5nCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvTWVkaWFDb21wb25lbnRzL3Jlcy9kcmF3YWJsZS14eGhkcGkvaWNfbWVkaWFfc3RvcF9kYXJrLnBuZyBiL3BhY2thZ2VzL01lZGlhQ29tcG9uZW50cy9yZXMvZHJhd2FibGUteHhoZHBpL2ljX21lZGlhX3N0b3BfZGFyay5wbmcKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAzNWNhMTguLjAwMDAwMDAKLS0tIGEvcGFja2FnZXMvTWVkaWFDb21wb25lbnRzL3Jlcy9kcmF3YWJsZS14eGhkcGkvaWNfbWVkaWFfc3RvcF9kYXJrLnBuZworKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3BhY2thZ2VzL01lZGlhQ29tcG9uZW50cy9yZXMvZHJhd2FibGUteHhoZHBpL2ljX21lZGlhX3N0b3BfbGlnaHQucG5nIGIvcGFja2FnZXMvTWVkaWFDb21wb25lbnRzL3Jlcy9kcmF3YWJsZS14eGhkcGkvaWNfbWVkaWFfc3RvcF9saWdodC5wbmcKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGVhYzE4M2QuLjAwMDAwMDAKLS0tIGEvcGFja2FnZXMvTWVkaWFDb21wb25lbnRzL3Jlcy9kcmF3YWJsZS14eGhkcGkvaWNfbWVkaWFfc3RvcF9saWdodC5wbmcKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9wYWNrYWdlcy9NZWRpYUNvbXBvbmVudHMvcmVzL2RyYXdhYmxlLXh4aGRwaS9pY19tcl9idXR0b25fY29ubmVjdGVkXzAwX2RhcmsucG5nIGIvcGFja2FnZXMvTWVkaWFDb21wb25lbnRzL3Jlcy9kcmF3YWJsZS14eGhkcGkvaWNfbXJfYnV0dG9uX2Nvbm5lY3RlZF8wMF9kYXJrLnBuZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMGRiNjc5ZS4uMDAwMDAwMAotLS0gYS9wYWNrYWdlcy9NZWRpYUNvbXBvbmVudHMvcmVzL2RyYXdhYmxlLXh4aGRwaS9pY19tcl9idXR0b25fY29ubmVjdGVkXzAwX2RhcmsucG5nCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvTWVkaWFDb21wb25lbnRzL3Jlcy9kcmF3YWJsZS14eGhkcGkvaWNfbXJfYnV0dG9uX2Nvbm5lY3RlZF8wMF9saWdodC5wbmcgYi9wYWNrYWdlcy9NZWRpYUNvbXBvbmVudHMvcmVzL2RyYXdhYmxlLXh4aGRwaS9pY19tcl9idXR0b25fY29ubmVjdGVkXzAwX2xpZ2h0LnBuZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTFjNjA1MS4uMDAwMDAwMAotLS0gYS9wYWNrYWdlcy9NZWRpYUNvbXBvbmVudHMvcmVzL2RyYXdhYmxlLXh4aGRwaS9pY19tcl9idXR0b25fY29ubmVjdGVkXzAwX2xpZ2h0LnBuZworKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3BhY2thZ2VzL01lZGlhQ29tcG9uZW50cy9yZXMvZHJhd2FibGUteHhoZHBpL2ljX21yX2J1dHRvbl9jb25uZWN0ZWRfMDFfZGFyay5wbmcgYi9wYWNrYWdlcy9NZWRpYUNvbXBvbmVudHMvcmVzL2RyYXdhYmxlLXh4aGRwaS9pY19tcl9idXR0b25fY29ubmVjdGVkXzAxX2RhcmsucG5nCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjMDgzOTE0Li4wMDAwMDAwCi0tLSBhL3BhY2thZ2VzL01lZGlhQ29tcG9uZW50cy9yZXMvZHJhd2FibGUteHhoZHBpL2ljX21yX2J1dHRvbl9jb25uZWN0ZWRfMDFfZGFyay5wbmcKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9wYWNrYWdlcy9NZWRpYUNvbXBvbmVudHMvcmVzL2RyYXdhYmxlLXh4aGRwaS9pY19tcl9idXR0b25fY29ubmVjdGVkXzAxX2xpZ2h0LnBuZyBiL3BhY2thZ2VzL01lZGlhQ29tcG9uZW50cy9yZXMvZHJhd2FibGUteHhoZHBpL2ljX21yX2J1dHRvbl9jb25uZWN0ZWRfMDFfbGlnaHQucG5nCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjM2MzY2FmLi4wMDAwMDAwCi0tLSBhL3BhY2thZ2VzL01lZGlhQ29tcG9uZW50cy9yZXMvZHJhd2FibGUteHhoZHBpL2ljX21yX2J1dHRvbl9jb25uZWN0ZWRfMDFfbGlnaHQucG5nCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvTWVkaWFDb21wb25lbnRzL3Jlcy9kcmF3YWJsZS14eGhkcGkvaWNfbXJfYnV0dG9uX2Nvbm5lY3RlZF8wMl9kYXJrLnBuZyBiL3BhY2thZ2VzL01lZGlhQ29tcG9uZW50cy9yZXMvZHJhd2FibGUteHhoZHBpL2ljX21yX2J1dHRvbl9jb25uZWN0ZWRfMDJfZGFyay5wbmcKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGZjNDQ0Y2YuLjAwMDAwMDAKLS0tIGEvcGFja2FnZXMvTWVkaWFDb21wb25lbnRzL3Jlcy9kcmF3YWJsZS14eGhkcGkvaWNfbXJfYnV0dG9uX2Nvbm5lY3RlZF8wMl9kYXJrLnBuZworKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3BhY2thZ2VzL01lZGlhQ29tcG9uZW50cy9yZXMvZHJhd2FibGUteHhoZHBpL2ljX21yX2J1dHRvbl9jb25uZWN0ZWRfMDJfbGlnaHQucG5nIGIvcGFja2FnZXMvTWVkaWFDb21wb25lbnRzL3Jlcy9kcmF3YWJsZS14eGhkcGkvaWNfbXJfYnV0dG9uX2Nvbm5lY3RlZF8wMl9saWdodC5wbmcKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGFiZDYzNzcuLjAwMDAwMDAKLS0tIGEvcGFja2FnZXMvTWVkaWFDb21wb25lbnRzL3Jlcy9kcmF3YWJsZS14eGhkcGkvaWNfbXJfYnV0dG9uX2Nvbm5lY3RlZF8wMl9saWdodC5wbmcKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9wYWNrYWdlcy9NZWRpYUNvbXBvbmVudHMvcmVzL2RyYXdhYmxlLXh4aGRwaS9pY19tcl9idXR0b25fY29ubmVjdGVkXzAzX2RhcmsucG5nIGIvcGFja2FnZXMvTWVkaWFDb21wb25lbnRzL3Jlcy9kcmF3YWJsZS14eGhkcGkvaWNfbXJfYnV0dG9uX2Nvbm5lY3RlZF8wM19kYXJrLnBuZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNmRiZDFkYS4uMDAwMDAwMAotLS0gYS9wYWNrYWdlcy9NZWRpYUNvbXBvbmVudHMvcmVzL2RyYXdhYmxlLXh4aGRwaS9pY19tcl9idXR0b25fY29ubmVjdGVkXzAzX2RhcmsucG5nCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvTWVkaWFDb21wb25lbnRzL3Jlcy9kcmF3YWJsZS14eGhkcGkvaWNfbXJfYnV0dG9uX2Nvbm5lY3RlZF8wM19saWdodC5wbmcgYi9wYWNrYWdlcy9NZWRpYUNvbXBvbmVudHMvcmVzL2RyYXdhYmxlLXh4aGRwaS9pY19tcl9idXR0b25fY29ubmVjdGVkXzAzX2xpZ2h0LnBuZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDJlNzEwOC4uMDAwMDAwMAotLS0gYS9wYWNrYWdlcy9NZWRpYUNvbXBvbmVudHMvcmVzL2RyYXdhYmxlLXh4aGRwaS9pY19tcl9idXR0b25fY29ubmVjdGVkXzAzX2xpZ2h0LnBuZworKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3BhY2thZ2VzL01lZGlhQ29tcG9uZW50cy9yZXMvZHJhd2FibGUteHhoZHBpL2ljX21yX2J1dHRvbl9jb25uZWN0ZWRfMDRfZGFyay5wbmcgYi9wYWNrYWdlcy9NZWRpYUNvbXBvbmVudHMvcmVzL2RyYXdhYmxlLXh4aGRwaS9pY19tcl9idXR0b25fY29ubmVjdGVkXzA0X2RhcmsucG5nCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkOWY1OTZiLi4wMDAwMDAwCi0tLSBhL3BhY2thZ2VzL01lZGlhQ29tcG9uZW50cy9yZXMvZHJhd2FibGUteHhoZHBpL2ljX21yX2J1dHRvbl9jb25uZWN0ZWRfMDRfZGFyay5wbmcKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9wYWNrYWdlcy9NZWRpYUNvbXBvbmVudHMvcmVzL2RyYXdhYmxlLXh4aGRwaS9pY19tcl9idXR0b25fY29ubmVjdGVkXzA0X2xpZ2h0LnBuZyBiL3BhY2thZ2VzL01lZGlhQ29tcG9uZW50cy9yZXMvZHJhd2FibGUteHhoZHBpL2ljX21yX2J1dHRvbl9jb25uZWN0ZWRfMDRfbGlnaHQucG5nCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0ZjMyZTFhLi4wMDAwMDAwCi0tLSBhL3BhY2thZ2VzL01lZGlhQ29tcG9uZW50cy9yZXMvZHJhd2FibGUteHhoZHBpL2ljX21yX2J1dHRvbl9jb25uZWN0ZWRfMDRfbGlnaHQucG5nCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvTWVkaWFDb21wb25lbnRzL3Jlcy9kcmF3YWJsZS14eGhkcGkvaWNfbXJfYnV0dG9uX2Nvbm5lY3RlZF8wNV9kYXJrLnBuZyBiL3BhY2thZ2VzL01lZGlhQ29tcG9uZW50cy9yZXMvZHJhd2FibGUteHhoZHBpL2ljX21yX2J1dHRvbl9jb25uZWN0ZWRfMDVfZGFyay5wbmcKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGM1NjhlMDQuLjAwMDAwMDAKLS0tIGEvcGFja2FnZXMvTWVkaWFDb21wb25lbnRzL3Jlcy9kcmF3YWJsZS14eGhkcGkvaWNfbXJfYnV0dG9uX2Nvbm5lY3RlZF8wNV9kYXJrLnBuZworKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3BhY2thZ2VzL01lZGlhQ29tcG9uZW50cy9yZXMvZHJhd2FibGUteHhoZHBpL2ljX21yX2J1dHRvbl9jb25uZWN0ZWRfMDVfbGlnaHQucG5nIGIvcGFja2FnZXMvTWVkaWFDb21wb25lbnRzL3Jlcy9kcmF3YWJsZS14eGhkcGkvaWNfbXJfYnV0dG9uX2Nvbm5lY3RlZF8wNV9saWdodC5wbmcKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGVkMjBkZDkuLjAwMDAwMDAKLS0tIGEvcGFja2FnZXMvTWVkaWFDb21wb25lbnRzL3Jlcy9kcmF3YWJsZS14eGhkcGkvaWNfbXJfYnV0dG9uX2Nvbm5lY3RlZF8wNV9saWdodC5wbmcKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9wYWNrYWdlcy9NZWRpYUNvbXBvbmVudHMvcmVzL2RyYXdhYmxlLXh4aGRwaS9pY19tcl9idXR0b25fY29ubmVjdGVkXzA2X2RhcmsucG5nIGIvcGFja2FnZXMvTWVkaWFDb21wb25lbnRzL3Jlcy9kcmF3YWJsZS14eGhkcGkvaWNfbXJfYnV0dG9uX2Nvbm5lY3RlZF8wNl9kYXJrLnBuZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYmJlMzllNy4uMDAwMDAwMAotLS0gYS9wYWNrYWdlcy9NZWRpYUNvbXBvbmVudHMvcmVzL2RyYXdhYmxlLXh4aGRwaS9pY19tcl9idXR0b25fY29ubmVjdGVkXzA2X2RhcmsucG5nCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvTWVkaWFDb21wb25lbnRzL3Jlcy9kcmF3YWJsZS14eGhkcGkvaWNfbXJfYnV0dG9uX2Nvbm5lY3RlZF8wNl9saWdodC5wbmcgYi9wYWNrYWdlcy9NZWRpYUNvbXBvbmVudHMvcmVzL2RyYXdhYmxlLXh4aGRwaS9pY19tcl9idXR0b25fY29ubmVjdGVkXzA2X2xpZ2h0LnBuZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMWVkYzE1Zi4uMDAwMDAwMAotLS0gYS9wYWNrYWdlcy9NZWRpYUNvbXBvbmVudHMvcmVzL2RyYXdhYmxlLXh4aGRwaS9pY19tcl9idXR0b25fY29ubmVjdGVkXzA2X2xpZ2h0LnBuZworKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3BhY2thZ2VzL01lZGlhQ29tcG9uZW50cy9yZXMvZHJhd2FibGUteHhoZHBpL2ljX21yX2J1dHRvbl9jb25uZWN0ZWRfMDdfZGFyay5wbmcgYi9wYWNrYWdlcy9NZWRpYUNvbXBvbmVudHMvcmVzL2RyYXdhYmxlLXh4aGRwaS9pY19tcl9idXR0b25fY29ubmVjdGVkXzA3X2RhcmsucG5nCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3OGFlYmFmLi4wMDAwMDAwCi0tLSBhL3BhY2thZ2VzL01lZGlhQ29tcG9uZW50cy9yZXMvZHJhd2FibGUteHhoZHBpL2ljX21yX2J1dHRvbl9jb25uZWN0ZWRfMDdfZGFyay5wbmcKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9wYWNrYWdlcy9NZWRpYUNvbXBvbmVudHMvcmVzL2RyYXdhYmxlLXh4aGRwaS9pY19tcl9idXR0b25fY29ubmVjdGVkXzA3X2xpZ2h0LnBuZyBiL3BhY2thZ2VzL01lZGlhQ29tcG9uZW50cy9yZXMvZHJhd2FibGUteHhoZHBpL2ljX21yX2J1dHRvbl9jb25uZWN0ZWRfMDdfbGlnaHQucG5nCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiNWE2YTRmLi4wMDAwMDAwCi0tLSBhL3BhY2thZ2VzL01lZGlhQ29tcG9uZW50cy9yZXMvZHJhd2FibGUteHhoZHBpL2ljX21yX2J1dHRvbl9jb25uZWN0ZWRfMDdfbGlnaHQucG5nCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvTWVkaWFDb21wb25lbnRzL3Jlcy9kcmF3YWJsZS14eGhkcGkvaWNfbXJfYnV0dG9uX2Nvbm5lY3RlZF8wOF9kYXJrLnBuZyBiL3BhY2thZ2VzL01lZGlhQ29tcG9uZW50cy9yZXMvZHJhd2FibGUteHhoZHBpL2ljX21yX2J1dHRvbl9jb25uZWN0ZWRfMDhfZGFyay5wbmcKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQ0YjkxY2UuLjAwMDAwMDAKLS0tIGEvcGFja2FnZXMvTWVkaWFDb21wb25lbnRzL3Jlcy9kcmF3YWJsZS14eGhkcGkvaWNfbXJfYnV0dG9uX2Nvbm5lY3RlZF8wOF9kYXJrLnBuZworKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3BhY2thZ2VzL01lZGlhQ29tcG9uZW50cy9yZXMvZHJhd2FibGUteHhoZHBpL2ljX21yX2J1dHRvbl9jb25uZWN0ZWRfMDhfbGlnaHQucG5nIGIvcGFja2FnZXMvTWVkaWFDb21wb25lbnRzL3Jlcy9kcmF3YWJsZS14eGhkcGkvaWNfbXJfYnV0dG9uX2Nvbm5lY3RlZF8wOF9saWdodC5wbmcKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDg1ZjY2ZjkuLjAwMDAwMDAKLS0tIGEvcGFja2FnZXMvTWVkaWFDb21wb25lbnRzL3Jlcy9kcmF3YWJsZS14eGhkcGkvaWNfbXJfYnV0dG9uX2Nvbm5lY3RlZF8wOF9saWdodC5wbmcKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9wYWNrYWdlcy9NZWRpYUNvbXBvbmVudHMvcmVzL2RyYXdhYmxlLXh4aGRwaS9pY19tcl9idXR0b25fY29ubmVjdGVkXzA5X2RhcmsucG5nIGIvcGFja2FnZXMvTWVkaWFDb21wb25lbnRzL3Jlcy9kcmF3YWJsZS14eGhkcGkvaWNfbXJfYnV0dG9uX2Nvbm5lY3RlZF8wOV9kYXJrLnBuZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTFlYTM0Yi4uMDAwMDAwMAotLS0gYS9wYWNrYWdlcy9NZWRpYUNvbXBvbmVudHMvcmVzL2RyYXdhYmxlLXh4aGRwaS9pY19tcl9idXR0b25fY29ubmVjdGVkXzA5X2RhcmsucG5nCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvTWVkaWFDb21wb25lbnRzL3Jlcy9kcmF3YWJsZS14eGhkcGkvaWNfbXJfYnV0dG9uX2Nvbm5lY3RlZF8wOV9saWdodC5wbmcgYi9wYWNrYWdlcy9NZWRpYUNvbXBvbmVudHMvcmVzL2RyYXdhYmxlLXh4aGRwaS9pY19tcl9idXR0b25fY29ubmVjdGVkXzA5X2xpZ2h0LnBuZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTUyZGUwNC4uMDAwMDAwMAotLS0gYS9wYWNrYWdlcy9NZWRpYUNvbXBvbmVudHMvcmVzL2RyYXdhYmxlLXh4aGRwaS9pY19tcl9idXR0b25fY29ubmVjdGVkXzA5X2xpZ2h0LnBuZworKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3BhY2thZ2VzL01lZGlhQ29tcG9uZW50cy9yZXMvZHJhd2FibGUteHhoZHBpL2ljX21yX2J1dHRvbl9jb25uZWN0ZWRfMTBfZGFyay5wbmcgYi9wYWNrYWdlcy9NZWRpYUNvbXBvbmVudHMvcmVzL2RyYXdhYmxlLXh4aGRwaS9pY19tcl9idXR0b25fY29ubmVjdGVkXzEwX2RhcmsucG5nCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4YjFhYTIxLi4wMDAwMDAwCi0tLSBhL3BhY2thZ2VzL01lZGlhQ29tcG9uZW50cy9yZXMvZHJhd2FibGUteHhoZHBpL2ljX21yX2J1dHRvbl9jb25uZWN0ZWRfMTBfZGFyay5wbmcKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9wYWNrYWdlcy9NZWRpYUNvbXBvbmVudHMvcmVzL2RyYXdhYmxlLXh4aGRwaS9pY19tcl9idXR0b25fY29ubmVjdGVkXzEwX2xpZ2h0LnBuZyBiL3BhY2thZ2VzL01lZGlhQ29tcG9uZW50cy9yZXMvZHJhd2FibGUteHhoZHBpL2ljX21yX2J1dHRvbl9jb25uZWN0ZWRfMTBfbGlnaHQucG5nCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1MzRiY2MwLi4wMDAwMDAwCi0tLSBhL3BhY2thZ2VzL01lZGlhQ29tcG9uZW50cy9yZXMvZHJhd2FibGUteHhoZHBpL2ljX21yX2J1dHRvbl9jb25uZWN0ZWRfMTBfbGlnaHQucG5nCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvTWVkaWFDb21wb25lbnRzL3Jlcy9kcmF3YWJsZS14eGhkcGkvaWNfbXJfYnV0dG9uX2Nvbm5lY3RlZF8xMV9kYXJrLnBuZyBiL3BhY2thZ2VzL01lZGlhQ29tcG9uZW50cy9yZXMvZHJhd2FibGUteHhoZHBpL2ljX21yX2J1dHRvbl9jb25uZWN0ZWRfMTFfZGFyay5wbmcKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGY2NjZiMzUuLjAwMDAwMDAKLS0tIGEvcGFja2FnZXMvTWVkaWFDb21wb25lbnRzL3Jlcy9kcmF3YWJsZS14eGhkcGkvaWNfbXJfYnV0dG9uX2Nvbm5lY3RlZF8xMV9kYXJrLnBuZworKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3BhY2thZ2VzL01lZGlhQ29tcG9uZW50cy9yZXMvZHJhd2FibGUteHhoZHBpL2ljX21yX2J1dHRvbl9jb25uZWN0ZWRfMTFfbGlnaHQucG5nIGIvcGFja2FnZXMvTWVkaWFDb21wb25lbnRzL3Jlcy9kcmF3YWJsZS14eGhkcGkvaWNfbXJfYnV0dG9uX2Nvbm5lY3RlZF8xMV9saWdodC5wbmcKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDE0NWE4ZmIuLjAwMDAwMDAKLS0tIGEvcGFja2FnZXMvTWVkaWFDb21wb25lbnRzL3Jlcy9kcmF3YWJsZS14eGhkcGkvaWNfbXJfYnV0dG9uX2Nvbm5lY3RlZF8xMV9saWdodC5wbmcKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9wYWNrYWdlcy9NZWRpYUNvbXBvbmVudHMvcmVzL2RyYXdhYmxlLXh4aGRwaS9pY19tcl9idXR0b25fY29ubmVjdGVkXzEyX2RhcmsucG5nIGIvcGFja2FnZXMvTWVkaWFDb21wb25lbnRzL3Jlcy9kcmF3YWJsZS14eGhkcGkvaWNfbXJfYnV0dG9uX2Nvbm5lY3RlZF8xMl9kYXJrLnBuZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZWRlYjEzMi4uMDAwMDAwMAotLS0gYS9wYWNrYWdlcy9NZWRpYUNvbXBvbmVudHMvcmVzL2RyYXdhYmxlLXh4aGRwaS9pY19tcl9idXR0b25fY29ubmVjdGVkXzEyX2RhcmsucG5nCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvTWVkaWFDb21wb25lbnRzL3Jlcy9kcmF3YWJsZS14eGhkcGkvaWNfbXJfYnV0dG9uX2Nvbm5lY3RlZF8xMl9saWdodC5wbmcgYi9wYWNrYWdlcy9NZWRpYUNvbXBvbmVudHMvcmVzL2RyYXdhYmxlLXh4aGRwaS9pY19tcl9idXR0b25fY29ubmVjdGVkXzEyX2xpZ2h0LnBuZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOWRhMmI2MC4uMDAwMDAwMAotLS0gYS9wYWNrYWdlcy9NZWRpYUNvbXBvbmVudHMvcmVzL2RyYXdhYmxlLXh4aGRwaS9pY19tcl9idXR0b25fY29ubmVjdGVkXzEyX2xpZ2h0LnBuZworKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3BhY2thZ2VzL01lZGlhQ29tcG9uZW50cy9yZXMvZHJhd2FibGUteHhoZHBpL2ljX21yX2J1dHRvbl9jb25uZWN0ZWRfMTNfZGFyay5wbmcgYi9wYWNrYWdlcy9NZWRpYUNvbXBvbmVudHMvcmVzL2RyYXdhYmxlLXh4aGRwaS9pY19tcl9idXR0b25fY29ubmVjdGVkXzEzX2RhcmsucG5nCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhYjgwYWE5Li4wMDAwMDAwCi0tLSBhL3BhY2thZ2VzL01lZGlhQ29tcG9uZW50cy9yZXMvZHJhd2FibGUteHhoZHBpL2ljX21yX2J1dHRvbl9jb25uZWN0ZWRfMTNfZGFyay5wbmcKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9wYWNrYWdlcy9NZWRpYUNvbXBvbmVudHMvcmVzL2RyYXdhYmxlLXh4aGRwaS9pY19tcl9idXR0b25fY29ubmVjdGVkXzEzX2xpZ2h0LnBuZyBiL3BhY2thZ2VzL01lZGlhQ29tcG9uZW50cy9yZXMvZHJhd2FibGUteHhoZHBpL2ljX21yX2J1dHRvbl9jb25uZWN0ZWRfMTNfbGlnaHQucG5nCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxMTVlZmU0Li4wMDAwMDAwCi0tLSBhL3BhY2thZ2VzL01lZGlhQ29tcG9uZW50cy9yZXMvZHJhd2FibGUteHhoZHBpL2ljX21yX2J1dHRvbl9jb25uZWN0ZWRfMTNfbGlnaHQucG5nCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvTWVkaWFDb21wb25lbnRzL3Jlcy9kcmF3YWJsZS14eGhkcGkvaWNfbXJfYnV0dG9uX2Nvbm5lY3RlZF8xNF9kYXJrLnBuZyBiL3BhY2thZ2VzL01lZGlhQ29tcG9uZW50cy9yZXMvZHJhd2FibGUteHhoZHBpL2ljX21yX2J1dHRvbl9jb25uZWN0ZWRfMTRfZGFyay5wbmcKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDhjMGNjMzEuLjAwMDAwMDAKLS0tIGEvcGFja2FnZXMvTWVkaWFDb21wb25lbnRzL3Jlcy9kcmF3YWJsZS14eGhkcGkvaWNfbXJfYnV0dG9uX2Nvbm5lY3RlZF8xNF9kYXJrLnBuZworKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3BhY2thZ2VzL01lZGlhQ29tcG9uZW50cy9yZXMvZHJhd2FibGUteHhoZHBpL2ljX21yX2J1dHRvbl9jb25uZWN0ZWRfMTRfbGlnaHQucG5nIGIvcGFja2FnZXMvTWVkaWFDb21wb25lbnRzL3Jlcy9kcmF3YWJsZS14eGhkcGkvaWNfbXJfYnV0dG9uX2Nvbm5lY3RlZF8xNF9saWdodC5wbmcKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGU2YWU2ZmMuLjAwMDAwMDAKLS0tIGEvcGFja2FnZXMvTWVkaWFDb21wb25lbnRzL3Jlcy9kcmF3YWJsZS14eGhkcGkvaWNfbXJfYnV0dG9uX2Nvbm5lY3RlZF8xNF9saWdodC5wbmcKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9wYWNrYWdlcy9NZWRpYUNvbXBvbmVudHMvcmVzL2RyYXdhYmxlLXh4aGRwaS9pY19tcl9idXR0b25fY29ubmVjdGVkXzE1X2RhcmsucG5nIGIvcGFja2FnZXMvTWVkaWFDb21wb25lbnRzL3Jlcy9kcmF3YWJsZS14eGhkcGkvaWNfbXJfYnV0dG9uX2Nvbm5lY3RlZF8xNV9kYXJrLnBuZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjg4MTZjOS4uMDAwMDAwMAotLS0gYS9wYWNrYWdlcy9NZWRpYUNvbXBvbmVudHMvcmVzL2RyYXdhYmxlLXh4aGRwaS9pY19tcl9idXR0b25fY29ubmVjdGVkXzE1X2RhcmsucG5nCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvTWVkaWFDb21wb25lbnRzL3Jlcy9kcmF3YWJsZS14eGhkcGkvaWNfbXJfYnV0dG9uX2Nvbm5lY3RlZF8xNV9saWdodC5wbmcgYi9wYWNrYWdlcy9NZWRpYUNvbXBvbmVudHMvcmVzL2RyYXdhYmxlLXh4aGRwaS9pY19tcl9idXR0b25fY29ubmVjdGVkXzE1X2xpZ2h0LnBuZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYmQ0MjkzMS4uMDAwMDAwMAotLS0gYS9wYWNrYWdlcy9NZWRpYUNvbXBvbmVudHMvcmVzL2RyYXdhYmxlLXh4aGRwaS9pY19tcl9idXR0b25fY29ubmVjdGVkXzE1X2xpZ2h0LnBuZworKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3BhY2thZ2VzL01lZGlhQ29tcG9uZW50cy9yZXMvZHJhd2FibGUteHhoZHBpL2ljX21yX2J1dHRvbl9jb25uZWN0ZWRfMTZfZGFyay5wbmcgYi9wYWNrYWdlcy9NZWRpYUNvbXBvbmVudHMvcmVzL2RyYXdhYmxlLXh4aGRwaS9pY19tcl9idXR0b25fY29ubmVjdGVkXzE2X2RhcmsucG5nCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxMGQ1YjdmLi4wMDAwMDAwCi0tLSBhL3BhY2thZ2VzL01lZGlhQ29tcG9uZW50cy9yZXMvZHJhd2FibGUteHhoZHBpL2ljX21yX2J1dHRvbl9jb25uZWN0ZWRfMTZfZGFyay5wbmcKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9wYWNrYWdlcy9NZWRpYUNvbXBvbmVudHMvcmVzL2RyYXdhYmxlLXh4aGRwaS9pY19tcl9idXR0b25fY29ubmVjdGVkXzE2X2xpZ2h0LnBuZyBiL3BhY2thZ2VzL01lZGlhQ29tcG9uZW50cy9yZXMvZHJhd2FibGUteHhoZHBpL2ljX21yX2J1dHRvbl9jb25uZWN0ZWRfMTZfbGlnaHQucG5nCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzMDNhMGZlLi4wMDAwMDAwCi0tLSBhL3BhY2thZ2VzL01lZGlhQ29tcG9uZW50cy9yZXMvZHJhd2FibGUteHhoZHBpL2ljX21yX2J1dHRvbl9jb25uZWN0ZWRfMTZfbGlnaHQucG5nCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvTWVkaWFDb21wb25lbnRzL3Jlcy9kcmF3YWJsZS14eGhkcGkvaWNfbXJfYnV0dG9uX2Nvbm5lY3RlZF8xN19kYXJrLnBuZyBiL3BhY2thZ2VzL01lZGlhQ29tcG9uZW50cy9yZXMvZHJhd2FibGUteHhoZHBpL2ljX21yX2J1dHRvbl9jb25uZWN0ZWRfMTdfZGFyay5wbmcKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDNjMmE2NTUuLjAwMDAwMDAKLS0tIGEvcGFja2FnZXMvTWVkaWFDb21wb25lbnRzL3Jlcy9kcmF3YWJsZS14eGhkcGkvaWNfbXJfYnV0dG9uX2Nvbm5lY3RlZF8xN19kYXJrLnBuZworKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3BhY2thZ2VzL01lZGlhQ29tcG9uZW50cy9yZXMvZHJhd2FibGUteHhoZHBpL2ljX21yX2J1dHRvbl9jb25uZWN0ZWRfMTdfbGlnaHQucG5nIGIvcGFja2FnZXMvTWVkaWFDb21wb25lbnRzL3Jlcy9kcmF3YWJsZS14eGhkcGkvaWNfbXJfYnV0dG9uX2Nvbm5lY3RlZF8xN19saWdodC5wbmcKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDkwZGViYzIuLjAwMDAwMDAKLS0tIGEvcGFja2FnZXMvTWVkaWFDb21wb25lbnRzL3Jlcy9kcmF3YWJsZS14eGhkcGkvaWNfbXJfYnV0dG9uX2Nvbm5lY3RlZF8xN19saWdodC5wbmcKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9wYWNrYWdlcy9NZWRpYUNvbXBvbmVudHMvcmVzL2RyYXdhYmxlLXh4aGRwaS9pY19tcl9idXR0b25fY29ubmVjdGVkXzE4X2RhcmsucG5nIGIvcGFja2FnZXMvTWVkaWFDb21wb25lbnRzL3Jlcy9kcmF3YWJsZS14eGhkcGkvaWNfbXJfYnV0dG9uX2Nvbm5lY3RlZF8xOF9kYXJrLnBuZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDNlNzhhNy4uMDAwMDAwMAotLS0gYS9wYWNrYWdlcy9NZWRpYUNvbXBvbmVudHMvcmVzL2RyYXdhYmxlLXh4aGRwaS9pY19tcl9idXR0b25fY29ubmVjdGVkXzE4X2RhcmsucG5nCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvTWVkaWFDb21wb25lbnRzL3Jlcy9kcmF3YWJsZS14eGhkcGkvaWNfbXJfYnV0dG9uX2Nvbm5lY3RlZF8xOF9saWdodC5wbmcgYi9wYWNrYWdlcy9NZWRpYUNvbXBvbmVudHMvcmVzL2RyYXdhYmxlLXh4aGRwaS9pY19tcl9idXR0b25fY29ubmVjdGVkXzE4X2xpZ2h0LnBuZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggM2EzZjk5MS4uMDAwMDAwMAotLS0gYS9wYWNrYWdlcy9NZWRpYUNvbXBvbmVudHMvcmVzL2RyYXdhYmxlLXh4aGRwaS9pY19tcl9idXR0b25fY29ubmVjdGVkXzE4X2xpZ2h0LnBuZworKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3BhY2thZ2VzL01lZGlhQ29tcG9uZW50cy9yZXMvZHJhd2FibGUteHhoZHBpL2ljX21yX2J1dHRvbl9jb25uZWN0ZWRfMTlfZGFyay5wbmcgYi9wYWNrYWdlcy9NZWRpYUNvbXBvbmVudHMvcmVzL2RyYXdhYmxlLXh4aGRwaS9pY19tcl9idXR0b25fY29ubmVjdGVkXzE5X2RhcmsucG5nCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2M2ZhZDllLi4wMDAwMDAwCi0tLSBhL3BhY2thZ2VzL01lZGlhQ29tcG9uZW50cy9yZXMvZHJhd2FibGUteHhoZHBpL2ljX21yX2J1dHRvbl9jb25uZWN0ZWRfMTlfZGFyay5wbmcKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9wYWNrYWdlcy9NZWRpYUNvbXBvbmVudHMvcmVzL2RyYXdhYmxlLXh4aGRwaS9pY19tcl9idXR0b25fY29ubmVjdGVkXzE5X2xpZ2h0LnBuZyBiL3BhY2thZ2VzL01lZGlhQ29tcG9uZW50cy9yZXMvZHJhd2FibGUteHhoZHBpL2ljX21yX2J1dHRvbl9jb25uZWN0ZWRfMTlfbGlnaHQucG5nCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkNmRkOGQ0Li4wMDAwMDAwCi0tLSBhL3BhY2thZ2VzL01lZGlhQ29tcG9uZW50cy9yZXMvZHJhd2FibGUteHhoZHBpL2ljX21yX2J1dHRvbl9jb25uZWN0ZWRfMTlfbGlnaHQucG5nCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvTWVkaWFDb21wb25lbnRzL3Jlcy9kcmF3YWJsZS14eGhkcGkvaWNfbXJfYnV0dG9uX2Nvbm5lY3RlZF8yMF9kYXJrLnBuZyBiL3BhY2thZ2VzL01lZGlhQ29tcG9uZW50cy9yZXMvZHJhd2FibGUteHhoZHBpL2ljX21yX2J1dHRvbl9jb25uZWN0ZWRfMjBfZGFyay5wbmcKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDg5MGZkNWYuLjAwMDAwMDAKLS0tIGEvcGFja2FnZXMvTWVkaWFDb21wb25lbnRzL3Jlcy9kcmF3YWJsZS14eGhkcGkvaWNfbXJfYnV0dG9uX2Nvbm5lY3RlZF8yMF9kYXJrLnBuZworKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3BhY2thZ2VzL01lZGlhQ29tcG9uZW50cy9yZXMvZHJhd2FibGUteHhoZHBpL2ljX21yX2J1dHRvbl9jb25uZWN0ZWRfMjBfbGlnaHQucG5nIGIvcGFja2FnZXMvTWVkaWFDb21wb25lbnRzL3Jlcy9kcmF3YWJsZS14eGhkcGkvaWNfbXJfYnV0dG9uX2Nvbm5lY3RlZF8yMF9saWdodC5wbmcKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDZiMGI1YzEuLjAwMDAwMDAKLS0tIGEvcGFja2FnZXMvTWVkaWFDb21wb25lbnRzL3Jlcy9kcmF3YWJsZS14eGhkcGkvaWNfbXJfYnV0dG9uX2Nvbm5lY3RlZF8yMF9saWdodC5wbmcKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9wYWNrYWdlcy9NZWRpYUNvbXBvbmVudHMvcmVzL2RyYXdhYmxlLXh4aGRwaS9pY19tcl9idXR0b25fY29ubmVjdGVkXzIxX2RhcmsucG5nIGIvcGFja2FnZXMvTWVkaWFDb21wb25lbnRzL3Jlcy9kcmF3YWJsZS14eGhkcGkvaWNfbXJfYnV0dG9uX2Nvbm5lY3RlZF8yMV9kYXJrLnBuZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOWNlMWVmMS4uMDAwMDAwMAotLS0gYS9wYWNrYWdlcy9NZWRpYUNvbXBvbmVudHMvcmVzL2RyYXdhYmxlLXh4aGRwaS9pY19tcl9idXR0b25fY29ubmVjdGVkXzIxX2RhcmsucG5nCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvTWVkaWFDb21wb25lbnRzL3Jlcy9kcmF3YWJsZS14eGhkcGkvaWNfbXJfYnV0dG9uX2Nvbm5lY3RlZF8yMV9saWdodC5wbmcgYi9wYWNrYWdlcy9NZWRpYUNvbXBvbmVudHMvcmVzL2RyYXdhYmxlLXh4aGRwaS9pY19tcl9idXR0b25fY29ubmVjdGVkXzIxX2xpZ2h0LnBuZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODE3MTBkNC4uMDAwMDAwMAotLS0gYS9wYWNrYWdlcy9NZWRpYUNvbXBvbmVudHMvcmVzL2RyYXdhYmxlLXh4aGRwaS9pY19tcl9idXR0b25fY29ubmVjdGVkXzIxX2xpZ2h0LnBuZworKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3BhY2thZ2VzL01lZGlhQ29tcG9uZW50cy9yZXMvZHJhd2FibGUteHhoZHBpL2ljX21yX2J1dHRvbl9jb25uZWN0ZWRfMjJfZGFyay5wbmcgYi9wYWNrYWdlcy9NZWRpYUNvbXBvbmVudHMvcmVzL2RyYXdhYmxlLXh4aGRwaS9pY19tcl9idXR0b25fY29ubmVjdGVkXzIyX2RhcmsucG5nCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4NjFjMDgwLi4wMDAwMDAwCi0tLSBhL3BhY2thZ2VzL01lZGlhQ29tcG9uZW50cy9yZXMvZHJhd2FibGUteHhoZHBpL2ljX21yX2J1dHRvbl9jb25uZWN0ZWRfMjJfZGFyay5wbmcKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9wYWNrYWdlcy9NZWRpYUNvbXBvbmVudHMvcmVzL2RyYXdhYmxlLXh4aGRwaS9pY19tcl9idXR0b25fY29ubmVjdGVkXzIyX2xpZ2h0LnBuZyBiL3BhY2thZ2VzL01lZGlhQ29tcG9uZW50cy9yZXMvZHJhd2FibGUteHhoZHBpL2ljX21yX2J1dHRvbl9jb25uZWN0ZWRfMjJfbGlnaHQucG5nCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxYzRhYTIxLi4wMDAwMDAwCi0tLSBhL3BhY2thZ2VzL01lZGlhQ29tcG9uZW50cy9yZXMvZHJhd2FibGUteHhoZHBpL2ljX21yX2J1dHRvbl9jb25uZWN0ZWRfMjJfbGlnaHQucG5nCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvTWVkaWFDb21wb25lbnRzL3Jlcy9kcmF3YWJsZS14eGhkcGkvaWNfbXJfYnV0dG9uX2Nvbm5lY3RlZF8yM19kYXJrLnBuZyBiL3BhY2thZ2VzL01lZGlhQ29tcG9uZW50cy9yZXMvZHJhd2FibGUteHhoZHBpL2ljX21yX2J1dHRvbl9jb25uZWN0ZWRfMjNfZGFyay5wbmcKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDU5YTZiMzAuLjAwMDAwMDAKLS0tIGEvcGFja2FnZXMvTWVkaWFDb21wb25lbnRzL3Jlcy9kcmF3YWJsZS14eGhkcGkvaWNfbXJfYnV0dG9uX2Nvbm5lY3RlZF8yM19kYXJrLnBuZworKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3BhY2thZ2VzL01lZGlhQ29tcG9uZW50cy9yZXMvZHJhd2FibGUteHhoZHBpL2ljX21yX2J1dHRvbl9jb25uZWN0ZWRfMjNfbGlnaHQucG5nIGIvcGFja2FnZXMvTWVkaWFDb21wb25lbnRzL3Jlcy9kcmF3YWJsZS14eGhkcGkvaWNfbXJfYnV0dG9uX2Nvbm5lY3RlZF8yM19saWdodC5wbmcKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGM2ZThmZTAuLjAwMDAwMDAKLS0tIGEvcGFja2FnZXMvTWVkaWFDb21wb25lbnRzL3Jlcy9kcmF3YWJsZS14eGhkcGkvaWNfbXJfYnV0dG9uX2Nvbm5lY3RlZF8yM19saWdodC5wbmcKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9wYWNrYWdlcy9NZWRpYUNvbXBvbmVudHMvcmVzL2RyYXdhYmxlLXh4aGRwaS9pY19tcl9idXR0b25fY29ubmVjdGVkXzI0X2RhcmsucG5nIGIvcGFja2FnZXMvTWVkaWFDb21wb25lbnRzL3Jlcy9kcmF3YWJsZS14eGhkcGkvaWNfbXJfYnV0dG9uX2Nvbm5lY3RlZF8yNF9kYXJrLnBuZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTdiODQwZS4uMDAwMDAwMAotLS0gYS9wYWNrYWdlcy9NZWRpYUNvbXBvbmVudHMvcmVzL2RyYXdhYmxlLXh4aGRwaS9pY19tcl9idXR0b25fY29ubmVjdGVkXzI0X2RhcmsucG5nCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvTWVkaWFDb21wb25lbnRzL3Jlcy9kcmF3YWJsZS14eGhkcGkvaWNfbXJfYnV0dG9uX2Nvbm5lY3RlZF8yNF9saWdodC5wbmcgYi9wYWNrYWdlcy9NZWRpYUNvbXBvbmVudHMvcmVzL2RyYXdhYmxlLXh4aGRwaS9pY19tcl9idXR0b25fY29ubmVjdGVkXzI0X2xpZ2h0LnBuZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYmYyNDA1MC4uMDAwMDAwMAotLS0gYS9wYWNrYWdlcy9NZWRpYUNvbXBvbmVudHMvcmVzL2RyYXdhYmxlLXh4aGRwaS9pY19tcl9idXR0b25fY29ubmVjdGVkXzI0X2xpZ2h0LnBuZworKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3BhY2thZ2VzL01lZGlhQ29tcG9uZW50cy9yZXMvZHJhd2FibGUteHhoZHBpL2ljX21yX2J1dHRvbl9jb25uZWN0ZWRfMjVfZGFyay5wbmcgYi9wYWNrYWdlcy9NZWRpYUNvbXBvbmVudHMvcmVzL2RyYXdhYmxlLXh4aGRwaS9pY19tcl9idXR0b25fY29ubmVjdGVkXzI1X2RhcmsucG5nCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMWMxOGMxLi4wMDAwMDAwCi0tLSBhL3BhY2thZ2VzL01lZGlhQ29tcG9uZW50cy9yZXMvZHJhd2FibGUteHhoZHBpL2ljX21yX2J1dHRvbl9jb25uZWN0ZWRfMjVfZGFyay5wbmcKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9wYWNrYWdlcy9NZWRpYUNvbXBvbmVudHMvcmVzL2RyYXdhYmxlLXh4aGRwaS9pY19tcl9idXR0b25fY29ubmVjdGVkXzI1X2xpZ2h0LnBuZyBiL3BhY2thZ2VzL01lZGlhQ29tcG9uZW50cy9yZXMvZHJhd2FibGUteHhoZHBpL2ljX21yX2J1dHRvbl9jb25uZWN0ZWRfMjVfbGlnaHQucG5nCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiZTk3NTNlLi4wMDAwMDAwCi0tLSBhL3BhY2thZ2VzL01lZGlhQ29tcG9uZW50cy9yZXMvZHJhd2FibGUteHhoZHBpL2ljX21yX2J1dHRvbl9jb25uZWN0ZWRfMjVfbGlnaHQucG5nCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvTWVkaWFDb21wb25lbnRzL3Jlcy9kcmF3YWJsZS14eGhkcGkvaWNfbXJfYnV0dG9uX2Nvbm5lY3RlZF8yNl9kYXJrLnBuZyBiL3BhY2thZ2VzL01lZGlhQ29tcG9uZW50cy9yZXMvZHJhd2FibGUteHhoZHBpL2ljX21yX2J1dHRvbl9jb25uZWN0ZWRfMjZfZGFyay5wbmcKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDNmMjkxYjEuLjAwMDAwMDAKLS0tIGEvcGFja2FnZXMvTWVkaWFDb21wb25lbnRzL3Jlcy9kcmF3YWJsZS14eGhkcGkvaWNfbXJfYnV0dG9uX2Nvbm5lY3RlZF8yNl9kYXJrLnBuZworKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3BhY2thZ2VzL01lZGlhQ29tcG9uZW50cy9yZXMvZHJhd2FibGUteHhoZHBpL2ljX21yX2J1dHRvbl9jb25uZWN0ZWRfMjZfbGlnaHQucG5nIGIvcGFja2FnZXMvTWVkaWFDb21wb25lbnRzL3Jlcy9kcmF3YWJsZS14eGhkcGkvaWNfbXJfYnV0dG9uX2Nvbm5lY3RlZF8yNl9saWdodC5wbmcKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGRjMWM2MTkuLjAwMDAwMDAKLS0tIGEvcGFja2FnZXMvTWVkaWFDb21wb25lbnRzL3Jlcy9kcmF3YWJsZS14eGhkcGkvaWNfbXJfYnV0dG9uX2Nvbm5lY3RlZF8yNl9saWdodC5wbmcKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9wYWNrYWdlcy9NZWRpYUNvbXBvbmVudHMvcmVzL2RyYXdhYmxlLXh4aGRwaS9pY19tcl9idXR0b25fY29ubmVjdGVkXzI3X2RhcmsucG5nIGIvcGFja2FnZXMvTWVkaWFDb21wb25lbnRzL3Jlcy9kcmF3YWJsZS14eGhkcGkvaWNfbXJfYnV0dG9uX2Nvbm5lY3RlZF8yN19kYXJrLnBuZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjUwNGE3MC4uMDAwMDAwMAotLS0gYS9wYWNrYWdlcy9NZWRpYUNvbXBvbmVudHMvcmVzL2RyYXdhYmxlLXh4aGRwaS9pY19tcl9idXR0b25fY29ubmVjdGVkXzI3X2RhcmsucG5nCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvTWVkaWFDb21wb25lbnRzL3Jlcy9kcmF3YWJsZS14eGhkcGkvaWNfbXJfYnV0dG9uX2Nvbm5lY3RlZF8yN19saWdodC5wbmcgYi9wYWNrYWdlcy9NZWRpYUNvbXBvbmVudHMvcmVzL2RyYXdhYmxlLXh4aGRwaS9pY19tcl9idXR0b25fY29ubmVjdGVkXzI3X2xpZ2h0LnBuZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTdlMGE2MC4uMDAwMDAwMAotLS0gYS9wYWNrYWdlcy9NZWRpYUNvbXBvbmVudHMvcmVzL2RyYXdhYmxlLXh4aGRwaS9pY19tcl9idXR0b25fY29ubmVjdGVkXzI3X2xpZ2h0LnBuZworKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3BhY2thZ2VzL01lZGlhQ29tcG9uZW50cy9yZXMvZHJhd2FibGUteHhoZHBpL2ljX21yX2J1dHRvbl9jb25uZWN0ZWRfMjhfZGFyay5wbmcgYi9wYWNrYWdlcy9NZWRpYUNvbXBvbmVudHMvcmVzL2RyYXdhYmxlLXh4aGRwaS9pY19tcl9idXR0b25fY29ubmVjdGVkXzI4X2RhcmsucG5nCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1N2IxZjNlLi4wMDAwMDAwCi0tLSBhL3BhY2thZ2VzL01lZGlhQ29tcG9uZW50cy9yZXMvZHJhd2FibGUteHhoZHBpL2ljX21yX2J1dHRvbl9jb25uZWN0ZWRfMjhfZGFyay5wbmcKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9wYWNrYWdlcy9NZWRpYUNvbXBvbmVudHMvcmVzL2RyYXdhYmxlLXh4aGRwaS9pY19tcl9idXR0b25fY29ubmVjdGVkXzI4X2xpZ2h0LnBuZyBiL3BhY2thZ2VzL01lZGlhQ29tcG9uZW50cy9yZXMvZHJhd2FibGUteHhoZHBpL2ljX21yX2J1dHRvbl9jb25uZWN0ZWRfMjhfbGlnaHQucG5nCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1YzU1MWVjLi4wMDAwMDAwCi0tLSBhL3BhY2thZ2VzL01lZGlhQ29tcG9uZW50cy9yZXMvZHJhd2FibGUteHhoZHBpL2ljX21yX2J1dHRvbl9jb25uZWN0ZWRfMjhfbGlnaHQucG5nCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvTWVkaWFDb21wb25lbnRzL3Jlcy9kcmF3YWJsZS14eGhkcGkvaWNfbXJfYnV0dG9uX2Nvbm5lY3RlZF8yOV9kYXJrLnBuZyBiL3BhY2thZ2VzL01lZGlhQ29tcG9uZW50cy9yZXMvZHJhd2FibGUteHhoZHBpL2ljX21yX2J1dHRvbl9jb25uZWN0ZWRfMjlfZGFyay5wbmcKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDIzODY2N2UuLjAwMDAwMDAKLS0tIGEvcGFja2FnZXMvTWVkaWFDb21wb25lbnRzL3Jlcy9kcmF3YWJsZS14eGhkcGkvaWNfbXJfYnV0dG9uX2Nvbm5lY3RlZF8yOV9kYXJrLnBuZworKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3BhY2thZ2VzL01lZGlhQ29tcG9uZW50cy9yZXMvZHJhd2FibGUteHhoZHBpL2ljX21yX2J1dHRvbl9jb25uZWN0ZWRfMjlfbGlnaHQucG5nIGIvcGFja2FnZXMvTWVkaWFDb21wb25lbnRzL3Jlcy9kcmF3YWJsZS14eGhkcGkvaWNfbXJfYnV0dG9uX2Nvbm5lY3RlZF8yOV9saWdodC5wbmcKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGZmYjgxODMuLjAwMDAwMDAKLS0tIGEvcGFja2FnZXMvTWVkaWFDb21wb25lbnRzL3Jlcy9kcmF3YWJsZS14eGhkcGkvaWNfbXJfYnV0dG9uX2Nvbm5lY3RlZF8yOV9saWdodC5wbmcKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9wYWNrYWdlcy9NZWRpYUNvbXBvbmVudHMvcmVzL2RyYXdhYmxlLXh4aGRwaS9pY19tcl9idXR0b25fY29ubmVjdGVkXzMwX2RhcmsucG5nIGIvcGFja2FnZXMvTWVkaWFDb21wb25lbnRzL3Jlcy9kcmF3YWJsZS14eGhkcGkvaWNfbXJfYnV0dG9uX2Nvbm5lY3RlZF8zMF9kYXJrLnBuZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDg5M2YxOC4uMDAwMDAwMAotLS0gYS9wYWNrYWdlcy9NZWRpYUNvbXBvbmVudHMvcmVzL2RyYXdhYmxlLXh4aGRwaS9pY19tcl9idXR0b25fY29ubmVjdGVkXzMwX2RhcmsucG5nCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvTWVkaWFDb21wb25lbnRzL3Jlcy9kcmF3YWJsZS14eGhkcGkvaWNfbXJfYnV0dG9uX2Nvbm5lY3RlZF8zMF9saWdodC5wbmcgYi9wYWNrYWdlcy9NZWRpYUNvbXBvbmVudHMvcmVzL2RyYXdhYmxlLXh4aGRwaS9pY19tcl9idXR0b25fY29ubmVjdGVkXzMwX2xpZ2h0LnBuZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYWM1ZTE1Ni4uMDAwMDAwMAotLS0gYS9wYWNrYWdlcy9NZWRpYUNvbXBvbmVudHMvcmVzL2RyYXdhYmxlLXh4aGRwaS9pY19tcl9idXR0b25fY29ubmVjdGVkXzMwX2xpZ2h0LnBuZworKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3BhY2thZ2VzL01lZGlhQ29tcG9uZW50cy9yZXMvZHJhd2FibGUteHhoZHBpL2ljX21yX2J1dHRvbl9jb25uZWN0aW5nXzAwX2RhcmsucG5nIGIvcGFja2FnZXMvTWVkaWFDb21wb25lbnRzL3Jlcy9kcmF3YWJsZS14eGhkcGkvaWNfbXJfYnV0dG9uX2Nvbm5lY3RpbmdfMDBfZGFyay5wbmcKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDBkYjY3OWUuLjAwMDAwMDAKLS0tIGEvcGFja2FnZXMvTWVkaWFDb21wb25lbnRzL3Jlcy9kcmF3YWJsZS14eGhkcGkvaWNfbXJfYnV0dG9uX2Nvbm5lY3RpbmdfMDBfZGFyay5wbmcKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9wYWNrYWdlcy9NZWRpYUNvbXBvbmVudHMvcmVzL2RyYXdhYmxlLXh4aGRwaS9pY19tcl9idXR0b25fY29ubmVjdGluZ18wMF9saWdodC5wbmcgYi9wYWNrYWdlcy9NZWRpYUNvbXBvbmVudHMvcmVzL2RyYXdhYmxlLXh4aGRwaS9pY19tcl9idXR0b25fY29ubmVjdGluZ18wMF9saWdodC5wbmcKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDUxYzYwNTEuLjAwMDAwMDAKLS0tIGEvcGFja2FnZXMvTWVkaWFDb21wb25lbnRzL3Jlcy9kcmF3YWJsZS14eGhkcGkvaWNfbXJfYnV0dG9uX2Nvbm5lY3RpbmdfMDBfbGlnaHQucG5nCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvTWVkaWFDb21wb25lbnRzL3Jlcy9kcmF3YWJsZS14eGhkcGkvaWNfbXJfYnV0dG9uX2Nvbm5lY3RpbmdfMDFfZGFyay5wbmcgYi9wYWNrYWdlcy9NZWRpYUNvbXBvbmVudHMvcmVzL2RyYXdhYmxlLXh4aGRwaS9pY19tcl9idXR0b25fY29ubmVjdGluZ18wMV9kYXJrLnBuZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzA4MzkxNC4uMDAwMDAwMAotLS0gYS9wYWNrYWdlcy9NZWRpYUNvbXBvbmVudHMvcmVzL2RyYXdhYmxlLXh4aGRwaS9pY19tcl9idXR0b25fY29ubmVjdGluZ18wMV9kYXJrLnBuZworKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3BhY2thZ2VzL01lZGlhQ29tcG9uZW50cy9yZXMvZHJhd2FibGUteHhoZHBpL2ljX21yX2J1dHRvbl9jb25uZWN0aW5nXzAxX2xpZ2h0LnBuZyBiL3BhY2thZ2VzL01lZGlhQ29tcG9uZW50cy9yZXMvZHJhd2FibGUteHhoZHBpL2ljX21yX2J1dHRvbl9jb25uZWN0aW5nXzAxX2xpZ2h0LnBuZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzNjM2NhZi4uMDAwMDAwMAotLS0gYS9wYWNrYWdlcy9NZWRpYUNvbXBvbmVudHMvcmVzL2RyYXdhYmxlLXh4aGRwaS9pY19tcl9idXR0b25fY29ubmVjdGluZ18wMV9saWdodC5wbmcKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9wYWNrYWdlcy9NZWRpYUNvbXBvbmVudHMvcmVzL2RyYXdhYmxlLXh4aGRwaS9pY19tcl9idXR0b25fY29ubmVjdGluZ18wMl9kYXJrLnBuZyBiL3BhY2thZ2VzL01lZGlhQ29tcG9uZW50cy9yZXMvZHJhd2FibGUteHhoZHBpL2ljX21yX2J1dHRvbl9jb25uZWN0aW5nXzAyX2RhcmsucG5nCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmYzQ0NGNmLi4wMDAwMDAwCi0tLSBhL3BhY2thZ2VzL01lZGlhQ29tcG9uZW50cy9yZXMvZHJhd2FibGUteHhoZHBpL2ljX21yX2J1dHRvbl9jb25uZWN0aW5nXzAyX2RhcmsucG5nCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvTWVkaWFDb21wb25lbnRzL3Jlcy9kcmF3YWJsZS14eGhkcGkvaWNfbXJfYnV0dG9uX2Nvbm5lY3RpbmdfMDJfbGlnaHQucG5nIGIvcGFja2FnZXMvTWVkaWFDb21wb25lbnRzL3Jlcy9kcmF3YWJsZS14eGhkcGkvaWNfbXJfYnV0dG9uX2Nvbm5lY3RpbmdfMDJfbGlnaHQucG5nCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhYmQ2Mzc3Li4wMDAwMDAwCi0tLSBhL3BhY2thZ2VzL01lZGlhQ29tcG9uZW50cy9yZXMvZHJhd2FibGUteHhoZHBpL2ljX21yX2J1dHRvbl9jb25uZWN0aW5nXzAyX2xpZ2h0LnBuZworKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3BhY2thZ2VzL01lZGlhQ29tcG9uZW50cy9yZXMvZHJhd2FibGUteHhoZHBpL2ljX21yX2J1dHRvbl9jb25uZWN0aW5nXzAzX2RhcmsucG5nIGIvcGFja2FnZXMvTWVkaWFDb21wb25lbnRzL3Jlcy9kcmF3YWJsZS14eGhkcGkvaWNfbXJfYnV0dG9uX2Nvbm5lY3RpbmdfMDNfZGFyay5wbmcKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDZkYmQxZGEuLjAwMDAwMDAKLS0tIGEvcGFja2FnZXMvTWVkaWFDb21wb25lbnRzL3Jlcy9kcmF3YWJsZS14eGhkcGkvaWNfbXJfYnV0dG9uX2Nvbm5lY3RpbmdfMDNfZGFyay5wbmcKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9wYWNrYWdlcy9NZWRpYUNvbXBvbmVudHMvcmVzL2RyYXdhYmxlLXh4aGRwaS9pY19tcl9idXR0b25fY29ubmVjdGluZ18wM19saWdodC5wbmcgYi9wYWNrYWdlcy9NZWRpYUNvbXBvbmVudHMvcmVzL2RyYXdhYmxlLXh4aGRwaS9pY19tcl9idXR0b25fY29ubmVjdGluZ18wM19saWdodC5wbmcKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQyZTcxMDguLjAwMDAwMDAKLS0tIGEvcGFja2FnZXMvTWVkaWFDb21wb25lbnRzL3Jlcy9kcmF3YWJsZS14eGhkcGkvaWNfbXJfYnV0dG9uX2Nvbm5lY3RpbmdfMDNfbGlnaHQucG5nCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvTWVkaWFDb21wb25lbnRzL3Jlcy9kcmF3YWJsZS14eGhkcGkvaWNfbXJfYnV0dG9uX2Nvbm5lY3RpbmdfMDRfZGFyay5wbmcgYi9wYWNrYWdlcy9NZWRpYUNvbXBvbmVudHMvcmVzL2RyYXdhYmxlLXh4aGRwaS9pY19tcl9idXR0b25fY29ubmVjdGluZ18wNF9kYXJrLnBuZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDlmNTk2Yi4uMDAwMDAwMAotLS0gYS9wYWNrYWdlcy9NZWRpYUNvbXBvbmVudHMvcmVzL2RyYXdhYmxlLXh4aGRwaS9pY19tcl9idXR0b25fY29ubmVjdGluZ18wNF9kYXJrLnBuZworKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3BhY2thZ2VzL01lZGlhQ29tcG9uZW50cy9yZXMvZHJhd2FibGUteHhoZHBpL2ljX21yX2J1dHRvbl9jb25uZWN0aW5nXzA0X2xpZ2h0LnBuZyBiL3BhY2thZ2VzL01lZGlhQ29tcG9uZW50cy9yZXMvZHJhd2FibGUteHhoZHBpL2ljX21yX2J1dHRvbl9jb25uZWN0aW5nXzA0X2xpZ2h0LnBuZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNGYzMmUxYS4uMDAwMDAwMAotLS0gYS9wYWNrYWdlcy9NZWRpYUNvbXBvbmVudHMvcmVzL2RyYXdhYmxlLXh4aGRwaS9pY19tcl9idXR0b25fY29ubmVjdGluZ18wNF9saWdodC5wbmcKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9wYWNrYWdlcy9NZWRpYUNvbXBvbmVudHMvcmVzL2RyYXdhYmxlLXh4aGRwaS9pY19tcl9idXR0b25fY29ubmVjdGluZ18wNV9kYXJrLnBuZyBiL3BhY2thZ2VzL01lZGlhQ29tcG9uZW50cy9yZXMvZHJhd2FibGUteHhoZHBpL2ljX21yX2J1dHRvbl9jb25uZWN0aW5nXzA1X2RhcmsucG5nCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjNTY4ZTA0Li4wMDAwMDAwCi0tLSBhL3BhY2thZ2VzL01lZGlhQ29tcG9uZW50cy9yZXMvZHJhd2FibGUteHhoZHBpL2ljX21yX2J1dHRvbl9jb25uZWN0aW5nXzA1X2RhcmsucG5nCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvTWVkaWFDb21wb25lbnRzL3Jlcy9kcmF3YWJsZS14eGhkcGkvaWNfbXJfYnV0dG9uX2Nvbm5lY3RpbmdfMDVfbGlnaHQucG5nIGIvcGFja2FnZXMvTWVkaWFDb21wb25lbnRzL3Jlcy9kcmF3YWJsZS14eGhkcGkvaWNfbXJfYnV0dG9uX2Nvbm5lY3RpbmdfMDVfbGlnaHQucG5nCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlZDIwZGQ5Li4wMDAwMDAwCi0tLSBhL3BhY2thZ2VzL01lZGlhQ29tcG9uZW50cy9yZXMvZHJhd2FibGUteHhoZHBpL2ljX21yX2J1dHRvbl9jb25uZWN0aW5nXzA1X2xpZ2h0LnBuZworKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3BhY2thZ2VzL01lZGlhQ29tcG9uZW50cy9yZXMvZHJhd2FibGUteHhoZHBpL2ljX21yX2J1dHRvbl9jb25uZWN0aW5nXzA2X2RhcmsucG5nIGIvcGFja2FnZXMvTWVkaWFDb21wb25lbnRzL3Jlcy9kcmF3YWJsZS14eGhkcGkvaWNfbXJfYnV0dG9uX2Nvbm5lY3RpbmdfMDZfZGFyay5wbmcKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGJiZTM5ZTcuLjAwMDAwMDAKLS0tIGEvcGFja2FnZXMvTWVkaWFDb21wb25lbnRzL3Jlcy9kcmF3YWJsZS14eGhkcGkvaWNfbXJfYnV0dG9uX2Nvbm5lY3RpbmdfMDZfZGFyay5wbmcKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9wYWNrYWdlcy9NZWRpYUNvbXBvbmVudHMvcmVzL2RyYXdhYmxlLXh4aGRwaS9pY19tcl9idXR0b25fY29ubmVjdGluZ18wNl9saWdodC5wbmcgYi9wYWNrYWdlcy9NZWRpYUNvbXBvbmVudHMvcmVzL2RyYXdhYmxlLXh4aGRwaS9pY19tcl9idXR0b25fY29ubmVjdGluZ18wNl9saWdodC5wbmcKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDFlZGMxNWYuLjAwMDAwMDAKLS0tIGEvcGFja2FnZXMvTWVkaWFDb21wb25lbnRzL3Jlcy9kcmF3YWJsZS14eGhkcGkvaWNfbXJfYnV0dG9uX2Nvbm5lY3RpbmdfMDZfbGlnaHQucG5nCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvTWVkaWFDb21wb25lbnRzL3Jlcy9kcmF3YWJsZS14eGhkcGkvaWNfbXJfYnV0dG9uX2Nvbm5lY3RpbmdfMDdfZGFyay5wbmcgYi9wYWNrYWdlcy9NZWRpYUNvbXBvbmVudHMvcmVzL2RyYXdhYmxlLXh4aGRwaS9pY19tcl9idXR0b25fY29ubmVjdGluZ18wN19kYXJrLnBuZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzhhZWJhZi4uMDAwMDAwMAotLS0gYS9wYWNrYWdlcy9NZWRpYUNvbXBvbmVudHMvcmVzL2RyYXdhYmxlLXh4aGRwaS9pY19tcl9idXR0b25fY29ubmVjdGluZ18wN19kYXJrLnBuZworKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3BhY2thZ2VzL01lZGlhQ29tcG9uZW50cy9yZXMvZHJhd2FibGUteHhoZHBpL2ljX21yX2J1dHRvbl9jb25uZWN0aW5nXzA3X2xpZ2h0LnBuZyBiL3BhY2thZ2VzL01lZGlhQ29tcG9uZW50cy9yZXMvZHJhd2FibGUteHhoZHBpL2ljX21yX2J1dHRvbl9jb25uZWN0aW5nXzA3X2xpZ2h0LnBuZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjVhNmE0Zi4uMDAwMDAwMAotLS0gYS9wYWNrYWdlcy9NZWRpYUNvbXBvbmVudHMvcmVzL2RyYXdhYmxlLXh4aGRwaS9pY19tcl9idXR0b25fY29ubmVjdGluZ18wN19saWdodC5wbmcKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9wYWNrYWdlcy9NZWRpYUNvbXBvbmVudHMvcmVzL2RyYXdhYmxlLXh4aGRwaS9pY19tcl9idXR0b25fY29ubmVjdGluZ18wOF9kYXJrLnBuZyBiL3BhY2thZ2VzL01lZGlhQ29tcG9uZW50cy9yZXMvZHJhd2FibGUteHhoZHBpL2ljX21yX2J1dHRvbl9jb25uZWN0aW5nXzA4X2RhcmsucG5nCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0NGI5MWNlLi4wMDAwMDAwCi0tLSBhL3BhY2thZ2VzL01lZGlhQ29tcG9uZW50cy9yZXMvZHJhd2FibGUteHhoZHBpL2ljX21yX2J1dHRvbl9jb25uZWN0aW5nXzA4X2RhcmsucG5nCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvTWVkaWFDb21wb25lbnRzL3Jlcy9kcmF3YWJsZS14eGhkcGkvaWNfbXJfYnV0dG9uX2Nvbm5lY3RpbmdfMDhfbGlnaHQucG5nIGIvcGFja2FnZXMvTWVkaWFDb21wb25lbnRzL3Jlcy9kcmF3YWJsZS14eGhkcGkvaWNfbXJfYnV0dG9uX2Nvbm5lY3RpbmdfMDhfbGlnaHQucG5nCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4NWY2NmY5Li4wMDAwMDAwCi0tLSBhL3BhY2thZ2VzL01lZGlhQ29tcG9uZW50cy9yZXMvZHJhd2FibGUteHhoZHBpL2ljX21yX2J1dHRvbl9jb25uZWN0aW5nXzA4X2xpZ2h0LnBuZworKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3BhY2thZ2VzL01lZGlhQ29tcG9uZW50cy9yZXMvZHJhd2FibGUteHhoZHBpL2ljX21yX2J1dHRvbl9jb25uZWN0aW5nXzA5X2RhcmsucG5nIGIvcGFja2FnZXMvTWVkaWFDb21wb25lbnRzL3Jlcy9kcmF3YWJsZS14eGhkcGkvaWNfbXJfYnV0dG9uX2Nvbm5lY3RpbmdfMDlfZGFyay5wbmcKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDUxZWEzNGIuLjAwMDAwMDAKLS0tIGEvcGFja2FnZXMvTWVkaWFDb21wb25lbnRzL3Jlcy9kcmF3YWJsZS14eGhkcGkvaWNfbXJfYnV0dG9uX2Nvbm5lY3RpbmdfMDlfZGFyay5wbmcKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9wYWNrYWdlcy9NZWRpYUNvbXBvbmVudHMvcmVzL2RyYXdhYmxlLXh4aGRwaS9pY19tcl9idXR0b25fY29ubmVjdGluZ18wOV9saWdodC5wbmcgYi9wYWNrYWdlcy9NZWRpYUNvbXBvbmVudHMvcmVzL2RyYXdhYmxlLXh4aGRwaS9pY19tcl9idXR0b25fY29ubmVjdGluZ18wOV9saWdodC5wbmcKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDk1MmRlMDQuLjAwMDAwMDAKLS0tIGEvcGFja2FnZXMvTWVkaWFDb21wb25lbnRzL3Jlcy9kcmF3YWJsZS14eGhkcGkvaWNfbXJfYnV0dG9uX2Nvbm5lY3RpbmdfMDlfbGlnaHQucG5nCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvTWVkaWFDb21wb25lbnRzL3Jlcy9kcmF3YWJsZS14eGhkcGkvaWNfbXJfYnV0dG9uX2Nvbm5lY3RpbmdfMTBfZGFyay5wbmcgYi9wYWNrYWdlcy9NZWRpYUNvbXBvbmVudHMvcmVzL2RyYXdhYmxlLXh4aGRwaS9pY19tcl9idXR0b25fY29ubmVjdGluZ18xMF9kYXJrLnBuZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOGIxYWEyMS4uMDAwMDAwMAotLS0gYS9wYWNrYWdlcy9NZWRpYUNvbXBvbmVudHMvcmVzL2RyYXdhYmxlLXh4aGRwaS9pY19tcl9idXR0b25fY29ubmVjdGluZ18xMF9kYXJrLnBuZworKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3BhY2thZ2VzL01lZGlhQ29tcG9uZW50cy9yZXMvZHJhd2FibGUteHhoZHBpL2ljX21yX2J1dHRvbl9jb25uZWN0aW5nXzEwX2xpZ2h0LnBuZyBiL3BhY2thZ2VzL01lZGlhQ29tcG9uZW50cy9yZXMvZHJhd2FibGUteHhoZHBpL2ljX21yX2J1dHRvbl9jb25uZWN0aW5nXzEwX2xpZ2h0LnBuZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTM0YmNjMC4uMDAwMDAwMAotLS0gYS9wYWNrYWdlcy9NZWRpYUNvbXBvbmVudHMvcmVzL2RyYXdhYmxlLXh4aGRwaS9pY19tcl9idXR0b25fY29ubmVjdGluZ18xMF9saWdodC5wbmcKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9wYWNrYWdlcy9NZWRpYUNvbXBvbmVudHMvcmVzL2RyYXdhYmxlLXh4aGRwaS9pY19tcl9idXR0b25fY29ubmVjdGluZ18xMV9kYXJrLnBuZyBiL3BhY2thZ2VzL01lZGlhQ29tcG9uZW50cy9yZXMvZHJhd2FibGUteHhoZHBpL2ljX21yX2J1dHRvbl9jb25uZWN0aW5nXzExX2RhcmsucG5nCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxZmZmYTAxLi4wMDAwMDAwCi0tLSBhL3BhY2thZ2VzL01lZGlhQ29tcG9uZW50cy9yZXMvZHJhd2FibGUteHhoZHBpL2ljX21yX2J1dHRvbl9jb25uZWN0aW5nXzExX2RhcmsucG5nCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvTWVkaWFDb21wb25lbnRzL3Jlcy9kcmF3YWJsZS14eGhkcGkvaWNfbXJfYnV0dG9uX2Nvbm5lY3RpbmdfMTFfbGlnaHQucG5nIGIvcGFja2FnZXMvTWVkaWFDb21wb25lbnRzL3Jlcy9kcmF3YWJsZS14eGhkcGkvaWNfbXJfYnV0dG9uX2Nvbm5lY3RpbmdfMTFfbGlnaHQucG5nCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwZmY3ZTU3Li4wMDAwMDAwCi0tLSBhL3BhY2thZ2VzL01lZGlhQ29tcG9uZW50cy9yZXMvZHJhd2FibGUteHhoZHBpL2ljX21yX2J1dHRvbl9jb25uZWN0aW5nXzExX2xpZ2h0LnBuZworKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3BhY2thZ2VzL01lZGlhQ29tcG9uZW50cy9yZXMvZHJhd2FibGUteHhoZHBpL2ljX21yX2J1dHRvbl9jb25uZWN0aW5nXzEyX2RhcmsucG5nIGIvcGFja2FnZXMvTWVkaWFDb21wb25lbnRzL3Jlcy9kcmF3YWJsZS14eGhkcGkvaWNfbXJfYnV0dG9uX2Nvbm5lY3RpbmdfMTJfZGFyay5wbmcKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDA2YWM0ZGMuLjAwMDAwMDAKLS0tIGEvcGFja2FnZXMvTWVkaWFDb21wb25lbnRzL3Jlcy9kcmF3YWJsZS14eGhkcGkvaWNfbXJfYnV0dG9uX2Nvbm5lY3RpbmdfMTJfZGFyay5wbmcKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9wYWNrYWdlcy9NZWRpYUNvbXBvbmVudHMvcmVzL2RyYXdhYmxlLXh4aGRwaS9pY19tcl9idXR0b25fY29ubmVjdGluZ18xMl9saWdodC5wbmcgYi9wYWNrYWdlcy9NZWRpYUNvbXBvbmVudHMvcmVzL2RyYXdhYmxlLXh4aGRwaS9pY19tcl9idXR0b25fY29ubmVjdGluZ18xMl9saWdodC5wbmcKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQyYTg2ZjUuLjAwMDAwMDAKLS0tIGEvcGFja2FnZXMvTWVkaWFDb21wb25lbnRzL3Jlcy9kcmF3YWJsZS14eGhkcGkvaWNfbXJfYnV0dG9uX2Nvbm5lY3RpbmdfMTJfbGlnaHQucG5nCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvTWVkaWFDb21wb25lbnRzL3Jlcy9kcmF3YWJsZS14eGhkcGkvaWNfbXJfYnV0dG9uX2Nvbm5lY3RpbmdfMTNfZGFyay5wbmcgYi9wYWNrYWdlcy9NZWRpYUNvbXBvbmVudHMvcmVzL2RyYXdhYmxlLXh4aGRwaS9pY19tcl9idXR0b25fY29ubmVjdGluZ18xM19kYXJrLnBuZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDMwMTA5MC4uMDAwMDAwMAotLS0gYS9wYWNrYWdlcy9NZWRpYUNvbXBvbmVudHMvcmVzL2RyYXdhYmxlLXh4aGRwaS9pY19tcl9idXR0b25fY29ubmVjdGluZ18xM19kYXJrLnBuZworKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3BhY2thZ2VzL01lZGlhQ29tcG9uZW50cy9yZXMvZHJhd2FibGUteHhoZHBpL2ljX21yX2J1dHRvbl9jb25uZWN0aW5nXzEzX2xpZ2h0LnBuZyBiL3BhY2thZ2VzL01lZGlhQ29tcG9uZW50cy9yZXMvZHJhd2FibGUteHhoZHBpL2ljX21yX2J1dHRvbl9jb25uZWN0aW5nXzEzX2xpZ2h0LnBuZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDM5NmYwZS4uMDAwMDAwMAotLS0gYS9wYWNrYWdlcy9NZWRpYUNvbXBvbmVudHMvcmVzL2RyYXdhYmxlLXh4aGRwaS9pY19tcl9idXR0b25fY29ubmVjdGluZ18xM19saWdodC5wbmcKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9wYWNrYWdlcy9NZWRpYUNvbXBvbmVudHMvcmVzL2RyYXdhYmxlLXh4aGRwaS9pY19tcl9idXR0b25fY29ubmVjdGluZ18xNF9kYXJrLnBuZyBiL3BhY2thZ2VzL01lZGlhQ29tcG9uZW50cy9yZXMvZHJhd2FibGUteHhoZHBpL2ljX21yX2J1dHRvbl9jb25uZWN0aW5nXzE0X2RhcmsucG5nCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlMTkwMDFiLi4wMDAwMDAwCi0tLSBhL3BhY2thZ2VzL01lZGlhQ29tcG9uZW50cy9yZXMvZHJhd2FibGUteHhoZHBpL2ljX21yX2J1dHRvbl9jb25uZWN0aW5nXzE0X2RhcmsucG5nCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvTWVkaWFDb21wb25lbnRzL3Jlcy9kcmF3YWJsZS14eGhkcGkvaWNfbXJfYnV0dG9uX2Nvbm5lY3RpbmdfMTRfbGlnaHQucG5nIGIvcGFja2FnZXMvTWVkaWFDb21wb25lbnRzL3Jlcy9kcmF3YWJsZS14eGhkcGkvaWNfbXJfYnV0dG9uX2Nvbm5lY3RpbmdfMTRfbGlnaHQucG5nCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyMjcxNTgxLi4wMDAwMDAwCi0tLSBhL3BhY2thZ2VzL01lZGlhQ29tcG9uZW50cy9yZXMvZHJhd2FibGUteHhoZHBpL2ljX21yX2J1dHRvbl9jb25uZWN0aW5nXzE0X2xpZ2h0LnBuZworKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3BhY2thZ2VzL01lZGlhQ29tcG9uZW50cy9yZXMvZHJhd2FibGUteHhoZHBpL2ljX21yX2J1dHRvbl9jb25uZWN0aW5nXzE1X2RhcmsucG5nIGIvcGFja2FnZXMvTWVkaWFDb21wb25lbnRzL3Jlcy9kcmF3YWJsZS14eGhkcGkvaWNfbXJfYnV0dG9uX2Nvbm5lY3RpbmdfMTVfZGFyay5wbmcKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDVlOTYyMDguLjAwMDAwMDAKLS0tIGEvcGFja2FnZXMvTWVkaWFDb21wb25lbnRzL3Jlcy9kcmF3YWJsZS14eGhkcGkvaWNfbXJfYnV0dG9uX2Nvbm5lY3RpbmdfMTVfZGFyay5wbmcKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9wYWNrYWdlcy9NZWRpYUNvbXBvbmVudHMvcmVzL2RyYXdhYmxlLXh4aGRwaS9pY19tcl9idXR0b25fY29ubmVjdGluZ18xNV9saWdodC5wbmcgYi9wYWNrYWdlcy9NZWRpYUNvbXBvbmVudHMvcmVzL2RyYXdhYmxlLXh4aGRwaS9pY19tcl9idXR0b25fY29ubmVjdGluZ18xNV9saWdodC5wbmcKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDBmNjk1MDAuLjAwMDAwMDAKLS0tIGEvcGFja2FnZXMvTWVkaWFDb21wb25lbnRzL3Jlcy9kcmF3YWJsZS14eGhkcGkvaWNfbXJfYnV0dG9uX2Nvbm5lY3RpbmdfMTVfbGlnaHQucG5nCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvTWVkaWFDb21wb25lbnRzL3Jlcy9kcmF3YWJsZS14eGhkcGkvaWNfbXJfYnV0dG9uX2Nvbm5lY3RpbmdfMTZfZGFyay5wbmcgYi9wYWNrYWdlcy9NZWRpYUNvbXBvbmVudHMvcmVzL2RyYXdhYmxlLXh4aGRwaS9pY19tcl9idXR0b25fY29ubmVjdGluZ18xNl9kYXJrLnBuZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDdlMWJkNi4uMDAwMDAwMAotLS0gYS9wYWNrYWdlcy9NZWRpYUNvbXBvbmVudHMvcmVzL2RyYXdhYmxlLXh4aGRwaS9pY19tcl9idXR0b25fY29ubmVjdGluZ18xNl9kYXJrLnBuZworKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3BhY2thZ2VzL01lZGlhQ29tcG9uZW50cy9yZXMvZHJhd2FibGUteHhoZHBpL2ljX21yX2J1dHRvbl9jb25uZWN0aW5nXzE2X2xpZ2h0LnBuZyBiL3BhY2thZ2VzL01lZGlhQ29tcG9uZW50cy9yZXMvZHJhd2FibGUteHhoZHBpL2ljX21yX2J1dHRvbl9jb25uZWN0aW5nXzE2X2xpZ2h0LnBuZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggY2RlOGYxOS4uMDAwMDAwMAotLS0gYS9wYWNrYWdlcy9NZWRpYUNvbXBvbmVudHMvcmVzL2RyYXdhYmxlLXh4aGRwaS9pY19tcl9idXR0b25fY29ubmVjdGluZ18xNl9saWdodC5wbmcKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9wYWNrYWdlcy9NZWRpYUNvbXBvbmVudHMvcmVzL2RyYXdhYmxlLXh4aGRwaS9pY19tcl9idXR0b25fY29ubmVjdGluZ18xN19kYXJrLnBuZyBiL3BhY2thZ2VzL01lZGlhQ29tcG9uZW50cy9yZXMvZHJhd2FibGUteHhoZHBpL2ljX21yX2J1dHRvbl9jb25uZWN0aW5nXzE3X2RhcmsucG5nCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiNjMyZTk1Li4wMDAwMDAwCi0tLSBhL3BhY2thZ2VzL01lZGlhQ29tcG9uZW50cy9yZXMvZHJhd2FibGUteHhoZHBpL2ljX21yX2J1dHRvbl9jb25uZWN0aW5nXzE3X2RhcmsucG5nCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvTWVkaWFDb21wb25lbnRzL3Jlcy9kcmF3YWJsZS14eGhkcGkvaWNfbXJfYnV0dG9uX2Nvbm5lY3RpbmdfMTdfbGlnaHQucG5nIGIvcGFja2FnZXMvTWVkaWFDb21wb25lbnRzL3Jlcy9kcmF3YWJsZS14eGhkcGkvaWNfbXJfYnV0dG9uX2Nvbm5lY3RpbmdfMTdfbGlnaHQucG5nCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxMWQ1ZDJlLi4wMDAwMDAwCi0tLSBhL3BhY2thZ2VzL01lZGlhQ29tcG9uZW50cy9yZXMvZHJhd2FibGUteHhoZHBpL2ljX21yX2J1dHRvbl9jb25uZWN0aW5nXzE3X2xpZ2h0LnBuZworKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3BhY2thZ2VzL01lZGlhQ29tcG9uZW50cy9yZXMvZHJhd2FibGUteHhoZHBpL2ljX21yX2J1dHRvbl9jb25uZWN0aW5nXzE4X2RhcmsucG5nIGIvcGFja2FnZXMvTWVkaWFDb21wb25lbnRzL3Jlcy9kcmF3YWJsZS14eGhkcGkvaWNfbXJfYnV0dG9uX2Nvbm5lY3RpbmdfMThfZGFyay5wbmcKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDY2MGQ1MjcuLjAwMDAwMDAKLS0tIGEvcGFja2FnZXMvTWVkaWFDb21wb25lbnRzL3Jlcy9kcmF3YWJsZS14eGhkcGkvaWNfbXJfYnV0dG9uX2Nvbm5lY3RpbmdfMThfZGFyay5wbmcKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9wYWNrYWdlcy9NZWRpYUNvbXBvbmVudHMvcmVzL2RyYXdhYmxlLXh4aGRwaS9pY19tcl9idXR0b25fY29ubmVjdGluZ18xOF9saWdodC5wbmcgYi9wYWNrYWdlcy9NZWRpYUNvbXBvbmVudHMvcmVzL2RyYXdhYmxlLXh4aGRwaS9pY19tcl9idXR0b25fY29ubmVjdGluZ18xOF9saWdodC5wbmcKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDI3NjFhZTEuLjAwMDAwMDAKLS0tIGEvcGFja2FnZXMvTWVkaWFDb21wb25lbnRzL3Jlcy9kcmF3YWJsZS14eGhkcGkvaWNfbXJfYnV0dG9uX2Nvbm5lY3RpbmdfMThfbGlnaHQucG5nCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvTWVkaWFDb21wb25lbnRzL3Jlcy9kcmF3YWJsZS14eGhkcGkvaWNfbXJfYnV0dG9uX2Nvbm5lY3RpbmdfMTlfZGFyay5wbmcgYi9wYWNrYWdlcy9NZWRpYUNvbXBvbmVudHMvcmVzL2RyYXdhYmxlLXh4aGRwaS9pY19tcl9idXR0b25fY29ubmVjdGluZ18xOV9kYXJrLnBuZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMGFhM2Y4NC4uMDAwMDAwMAotLS0gYS9wYWNrYWdlcy9NZWRpYUNvbXBvbmVudHMvcmVzL2RyYXdhYmxlLXh4aGRwaS9pY19tcl9idXR0b25fY29ubmVjdGluZ18xOV9kYXJrLnBuZworKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3BhY2thZ2VzL01lZGlhQ29tcG9uZW50cy9yZXMvZHJhd2FibGUteHhoZHBpL2ljX21yX2J1dHRvbl9jb25uZWN0aW5nXzE5X2xpZ2h0LnBuZyBiL3BhY2thZ2VzL01lZGlhQ29tcG9uZW50cy9yZXMvZHJhd2FibGUteHhoZHBpL2ljX21yX2J1dHRvbl9jb25uZWN0aW5nXzE5X2xpZ2h0LnBuZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjdkMTY2Zi4uMDAwMDAwMAotLS0gYS9wYWNrYWdlcy9NZWRpYUNvbXBvbmVudHMvcmVzL2RyYXdhYmxlLXh4aGRwaS9pY19tcl9idXR0b25fY29ubmVjdGluZ18xOV9saWdodC5wbmcKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9wYWNrYWdlcy9NZWRpYUNvbXBvbmVudHMvcmVzL2RyYXdhYmxlLXh4aGRwaS9pY19tcl9idXR0b25fY29ubmVjdGluZ18yMF9kYXJrLnBuZyBiL3BhY2thZ2VzL01lZGlhQ29tcG9uZW50cy9yZXMvZHJhd2FibGUteHhoZHBpL2ljX21yX2J1dHRvbl9jb25uZWN0aW5nXzIwX2RhcmsucG5nCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlYmU1MjdlLi4wMDAwMDAwCi0tLSBhL3BhY2thZ2VzL01lZGlhQ29tcG9uZW50cy9yZXMvZHJhd2FibGUteHhoZHBpL2ljX21yX2J1dHRvbl9jb25uZWN0aW5nXzIwX2RhcmsucG5nCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvTWVkaWFDb21wb25lbnRzL3Jlcy9kcmF3YWJsZS14eGhkcGkvaWNfbXJfYnV0dG9uX2Nvbm5lY3RpbmdfMjBfbGlnaHQucG5nIGIvcGFja2FnZXMvTWVkaWFDb21wb25lbnRzL3Jlcy9kcmF3YWJsZS14eGhkcGkvaWNfbXJfYnV0dG9uX2Nvbm5lY3RpbmdfMjBfbGlnaHQucG5nCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhZWIyYThlLi4wMDAwMDAwCi0tLSBhL3BhY2thZ2VzL01lZGlhQ29tcG9uZW50cy9yZXMvZHJhd2FibGUteHhoZHBpL2ljX21yX2J1dHRvbl9jb25uZWN0aW5nXzIwX2xpZ2h0LnBuZworKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3BhY2thZ2VzL01lZGlhQ29tcG9uZW50cy9yZXMvZHJhd2FibGUteHhoZHBpL2ljX21yX2J1dHRvbl9jb25uZWN0aW5nXzIxX2RhcmsucG5nIGIvcGFja2FnZXMvTWVkaWFDb21wb25lbnRzL3Jlcy9kcmF3YWJsZS14eGhkcGkvaWNfbXJfYnV0dG9uX2Nvbm5lY3RpbmdfMjFfZGFyay5wbmcKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDczMzdhZjUuLjAwMDAwMDAKLS0tIGEvcGFja2FnZXMvTWVkaWFDb21wb25lbnRzL3Jlcy9kcmF3YWJsZS14eGhkcGkvaWNfbXJfYnV0dG9uX2Nvbm5lY3RpbmdfMjFfZGFyay5wbmcKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9wYWNrYWdlcy9NZWRpYUNvbXBvbmVudHMvcmVzL2RyYXdhYmxlLXh4aGRwaS9pY19tcl9idXR0b25fY29ubmVjdGluZ18yMV9saWdodC5wbmcgYi9wYWNrYWdlcy9NZWRpYUNvbXBvbmVudHMvcmVzL2RyYXdhYmxlLXh4aGRwaS9pY19tcl9idXR0b25fY29ubmVjdGluZ18yMV9saWdodC5wbmcKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGYzZjMxZWYuLjAwMDAwMDAKLS0tIGEvcGFja2FnZXMvTWVkaWFDb21wb25lbnRzL3Jlcy9kcmF3YWJsZS14eGhkcGkvaWNfbXJfYnV0dG9uX2Nvbm5lY3RpbmdfMjFfbGlnaHQucG5nCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvTWVkaWFDb21wb25lbnRzL3Jlcy9kcmF3YWJsZS14eGhkcGkvaWNfbXJfYnV0dG9uX2Nvbm5lY3RpbmdfMjJfZGFyay5wbmcgYi9wYWNrYWdlcy9NZWRpYUNvbXBvbmVudHMvcmVzL2RyYXdhYmxlLXh4aGRwaS9pY19tcl9idXR0b25fY29ubmVjdGluZ18yMl9kYXJrLnBuZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjBkOWY1Ny4uMDAwMDAwMAotLS0gYS9wYWNrYWdlcy9NZWRpYUNvbXBvbmVudHMvcmVzL2RyYXdhYmxlLXh4aGRwaS9pY19tcl9idXR0b25fY29ubmVjdGluZ18yMl9kYXJrLnBuZworKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3BhY2thZ2VzL01lZGlhQ29tcG9uZW50cy9yZXMvZHJhd2FibGUteHhoZHBpL2ljX21yX2J1dHRvbl9jb25uZWN0aW5nXzIyX2xpZ2h0LnBuZyBiL3BhY2thZ2VzL01lZGlhQ29tcG9uZW50cy9yZXMvZHJhd2FibGUteHhoZHBpL2ljX21yX2J1dHRvbl9jb25uZWN0aW5nXzIyX2xpZ2h0LnBuZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYmY4ZWI3Ny4uMDAwMDAwMAotLS0gYS9wYWNrYWdlcy9NZWRpYUNvbXBvbmVudHMvcmVzL2RyYXdhYmxlLXh4aGRwaS9pY19tcl9idXR0b25fY29ubmVjdGluZ18yMl9saWdodC5wbmcKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9wYWNrYWdlcy9NZWRpYUNvbXBvbmVudHMvcmVzL2RyYXdhYmxlLXh4aGRwaS9pY19tcl9idXR0b25fY29ubmVjdGluZ18yM19kYXJrLnBuZyBiL3BhY2thZ2VzL01lZGlhQ29tcG9uZW50cy9yZXMvZHJhd2FibGUteHhoZHBpL2ljX21yX2J1dHRvbl9jb25uZWN0aW5nXzIzX2RhcmsucG5nCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1NmEwZTE0Li4wMDAwMDAwCi0tLSBhL3BhY2thZ2VzL01lZGlhQ29tcG9uZW50cy9yZXMvZHJhd2FibGUteHhoZHBpL2ljX21yX2J1dHRvbl9jb25uZWN0aW5nXzIzX2RhcmsucG5nCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvTWVkaWFDb21wb25lbnRzL3Jlcy9kcmF3YWJsZS14eGhkcGkvaWNfbXJfYnV0dG9uX2Nvbm5lY3RpbmdfMjNfbGlnaHQucG5nIGIvcGFja2FnZXMvTWVkaWFDb21wb25lbnRzL3Jlcy9kcmF3YWJsZS14eGhkcGkvaWNfbXJfYnV0dG9uX2Nvbm5lY3RpbmdfMjNfbGlnaHQucG5nCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2NzQyNWUxLi4wMDAwMDAwCi0tLSBhL3BhY2thZ2VzL01lZGlhQ29tcG9uZW50cy9yZXMvZHJhd2FibGUteHhoZHBpL2ljX21yX2J1dHRvbl9jb25uZWN0aW5nXzIzX2xpZ2h0LnBuZworKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3BhY2thZ2VzL01lZGlhQ29tcG9uZW50cy9yZXMvZHJhd2FibGUteHhoZHBpL2ljX21yX2J1dHRvbl9jb25uZWN0aW5nXzI0X2RhcmsucG5nIGIvcGFja2FnZXMvTWVkaWFDb21wb25lbnRzL3Jlcy9kcmF3YWJsZS14eGhkcGkvaWNfbXJfYnV0dG9uX2Nvbm5lY3RpbmdfMjRfZGFyay5wbmcKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDdjNzZlMTkuLjAwMDAwMDAKLS0tIGEvcGFja2FnZXMvTWVkaWFDb21wb25lbnRzL3Jlcy9kcmF3YWJsZS14eGhkcGkvaWNfbXJfYnV0dG9uX2Nvbm5lY3RpbmdfMjRfZGFyay5wbmcKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9wYWNrYWdlcy9NZWRpYUNvbXBvbmVudHMvcmVzL2RyYXdhYmxlLXh4aGRwaS9pY19tcl9idXR0b25fY29ubmVjdGluZ18yNF9saWdodC5wbmcgYi9wYWNrYWdlcy9NZWRpYUNvbXBvbmVudHMvcmVzL2RyYXdhYmxlLXh4aGRwaS9pY19tcl9idXR0b25fY29ubmVjdGluZ18yNF9saWdodC5wbmcKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGUwMmYxZWQuLjAwMDAwMDAKLS0tIGEvcGFja2FnZXMvTWVkaWFDb21wb25lbnRzL3Jlcy9kcmF3YWJsZS14eGhkcGkvaWNfbXJfYnV0dG9uX2Nvbm5lY3RpbmdfMjRfbGlnaHQucG5nCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvTWVkaWFDb21wb25lbnRzL3Jlcy9kcmF3YWJsZS14eGhkcGkvaWNfbXJfYnV0dG9uX2Nvbm5lY3RpbmdfMjVfZGFyay5wbmcgYi9wYWNrYWdlcy9NZWRpYUNvbXBvbmVudHMvcmVzL2RyYXdhYmxlLXh4aGRwaS9pY19tcl9idXR0b25fY29ubmVjdGluZ18yNV9kYXJrLnBuZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjVmZGNkZC4uMDAwMDAwMAotLS0gYS9wYWNrYWdlcy9NZWRpYUNvbXBvbmVudHMvcmVzL2RyYXdhYmxlLXh4aGRwaS9pY19tcl9idXR0b25fY29ubmVjdGluZ18yNV9kYXJrLnBuZworKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3BhY2thZ2VzL01lZGlhQ29tcG9uZW50cy9yZXMvZHJhd2FibGUteHhoZHBpL2ljX21yX2J1dHRvbl9jb25uZWN0aW5nXzI1X2xpZ2h0LnBuZyBiL3BhY2thZ2VzL01lZGlhQ29tcG9uZW50cy9yZXMvZHJhd2FibGUteHhoZHBpL2ljX21yX2J1dHRvbl9jb25uZWN0aW5nXzI1X2xpZ2h0LnBuZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOGNlOWI4MTkuLjAwMDAwMDAKLS0tIGEvcGFja2FnZXMvTWVkaWFDb21wb25lbnRzL3Jlcy9kcmF3YWJsZS14eGhkcGkvaWNfbXJfYnV0dG9uX2Nvbm5lY3RpbmdfMjVfbGlnaHQucG5nCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvTWVkaWFDb21wb25lbnRzL3Jlcy9kcmF3YWJsZS14eGhkcGkvaWNfbXJfYnV0dG9uX2Nvbm5lY3RpbmdfMjZfZGFyay5wbmcgYi9wYWNrYWdlcy9NZWRpYUNvbXBvbmVudHMvcmVzL2RyYXdhYmxlLXh4aGRwaS9pY19tcl9idXR0b25fY29ubmVjdGluZ18yNl9kYXJrLnBuZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTI5ZTQ0My4uMDAwMDAwMAotLS0gYS9wYWNrYWdlcy9NZWRpYUNvbXBvbmVudHMvcmVzL2RyYXdhYmxlLXh4aGRwaS9pY19tcl9idXR0b25fY29ubmVjdGluZ18yNl9kYXJrLnBuZworKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3BhY2thZ2VzL01lZGlhQ29tcG9uZW50cy9yZXMvZHJhd2FibGUteHhoZHBpL2ljX21yX2J1dHRvbl9jb25uZWN0aW5nXzI2X2xpZ2h0LnBuZyBiL3BhY2thZ2VzL01lZGlhQ29tcG9uZW50cy9yZXMvZHJhd2FibGUteHhoZHBpL2ljX21yX2J1dHRvbl9jb25uZWN0aW5nXzI2X2xpZ2h0LnBuZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzQ5Y2E4OS4uMDAwMDAwMAotLS0gYS9wYWNrYWdlcy9NZWRpYUNvbXBvbmVudHMvcmVzL2RyYXdhYmxlLXh4aGRwaS9pY19tcl9idXR0b25fY29ubmVjdGluZ18yNl9saWdodC5wbmcKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9wYWNrYWdlcy9NZWRpYUNvbXBvbmVudHMvcmVzL2RyYXdhYmxlLXh4aGRwaS9pY19tcl9idXR0b25fY29ubmVjdGluZ18yN19kYXJrLnBuZyBiL3BhY2thZ2VzL01lZGlhQ29tcG9uZW50cy9yZXMvZHJhd2FibGUteHhoZHBpL2ljX21yX2J1dHRvbl9jb25uZWN0aW5nXzI3X2RhcmsucG5nCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwZmM3NWQ1Li4wMDAwMDAwCi0tLSBhL3BhY2thZ2VzL01lZGlhQ29tcG9uZW50cy9yZXMvZHJhd2FibGUteHhoZHBpL2ljX21yX2J1dHRvbl9jb25uZWN0aW5nXzI3X2RhcmsucG5nCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvTWVkaWFDb21wb25lbnRzL3Jlcy9kcmF3YWJsZS14eGhkcGkvaWNfbXJfYnV0dG9uX2Nvbm5lY3RpbmdfMjdfbGlnaHQucG5nIGIvcGFja2FnZXMvTWVkaWFDb21wb25lbnRzL3Jlcy9kcmF3YWJsZS14eGhkcGkvaWNfbXJfYnV0dG9uX2Nvbm5lY3RpbmdfMjdfbGlnaHQucG5nCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1Y2JkMjdjLi4wMDAwMDAwCi0tLSBhL3BhY2thZ2VzL01lZGlhQ29tcG9uZW50cy9yZXMvZHJhd2FibGUteHhoZHBpL2ljX21yX2J1dHRvbl9jb25uZWN0aW5nXzI3X2xpZ2h0LnBuZworKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3BhY2thZ2VzL01lZGlhQ29tcG9uZW50cy9yZXMvZHJhd2FibGUteHhoZHBpL2ljX21yX2J1dHRvbl9jb25uZWN0aW5nXzI4X2RhcmsucG5nIGIvcGFja2FnZXMvTWVkaWFDb21wb25lbnRzL3Jlcy9kcmF3YWJsZS14eGhkcGkvaWNfbXJfYnV0dG9uX2Nvbm5lY3RpbmdfMjhfZGFyay5wbmcKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDBlYmIwYWMuLjAwMDAwMDAKLS0tIGEvcGFja2FnZXMvTWVkaWFDb21wb25lbnRzL3Jlcy9kcmF3YWJsZS14eGhkcGkvaWNfbXJfYnV0dG9uX2Nvbm5lY3RpbmdfMjhfZGFyay5wbmcKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9wYWNrYWdlcy9NZWRpYUNvbXBvbmVudHMvcmVzL2RyYXdhYmxlLXh4aGRwaS9pY19tcl9idXR0b25fY29ubmVjdGluZ18yOF9saWdodC5wbmcgYi9wYWNrYWdlcy9NZWRpYUNvbXBvbmVudHMvcmVzL2RyYXdhYmxlLXh4aGRwaS9pY19tcl9idXR0b25fY29ubmVjdGluZ18yOF9saWdodC5wbmcKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDViNTE0YWEuLjAwMDAwMDAKLS0tIGEvcGFja2FnZXMvTWVkaWFDb21wb25lbnRzL3Jlcy9kcmF3YWJsZS14eGhkcGkvaWNfbXJfYnV0dG9uX2Nvbm5lY3RpbmdfMjhfbGlnaHQucG5nCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvTWVkaWFDb21wb25lbnRzL3Jlcy9kcmF3YWJsZS14eGhkcGkvaWNfbXJfYnV0dG9uX2Nvbm5lY3RpbmdfMjlfZGFyay5wbmcgYi9wYWNrYWdlcy9NZWRpYUNvbXBvbmVudHMvcmVzL2RyYXdhYmxlLXh4aGRwaS9pY19tcl9idXR0b25fY29ubmVjdGluZ18yOV9kYXJrLnBuZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOGU3ZmU1Yy4uMDAwMDAwMAotLS0gYS9wYWNrYWdlcy9NZWRpYUNvbXBvbmVudHMvcmVzL2RyYXdhYmxlLXh4aGRwaS9pY19tcl9idXR0b25fY29ubmVjdGluZ18yOV9kYXJrLnBuZworKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3BhY2thZ2VzL01lZGlhQ29tcG9uZW50cy9yZXMvZHJhd2FibGUteHhoZHBpL2ljX21yX2J1dHRvbl9jb25uZWN0aW5nXzI5X2xpZ2h0LnBuZyBiL3BhY2thZ2VzL01lZGlhQ29tcG9uZW50cy9yZXMvZHJhd2FibGUteHhoZHBpL2ljX21yX2J1dHRvbl9jb25uZWN0aW5nXzI5X2xpZ2h0LnBuZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZWZiMmMxMC4uMDAwMDAwMAotLS0gYS9wYWNrYWdlcy9NZWRpYUNvbXBvbmVudHMvcmVzL2RyYXdhYmxlLXh4aGRwaS9pY19tcl9idXR0b25fY29ubmVjdGluZ18yOV9saWdodC5wbmcKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9wYWNrYWdlcy9NZWRpYUNvbXBvbmVudHMvcmVzL2RyYXdhYmxlLXh4aGRwaS9pY19tcl9idXR0b25fY29ubmVjdGluZ18zMF9kYXJrLnBuZyBiL3BhY2thZ2VzL01lZGlhQ29tcG9uZW50cy9yZXMvZHJhd2FibGUteHhoZHBpL2ljX21yX2J1dHRvbl9jb25uZWN0aW5nXzMwX2RhcmsucG5nCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwZGI2NzllLi4wMDAwMDAwCi0tLSBhL3BhY2thZ2VzL01lZGlhQ29tcG9uZW50cy9yZXMvZHJhd2FibGUteHhoZHBpL2ljX21yX2J1dHRvbl9jb25uZWN0aW5nXzMwX2RhcmsucG5nCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvTWVkaWFDb21wb25lbnRzL3Jlcy9kcmF3YWJsZS14eGhkcGkvaWNfbXJfYnV0dG9uX2Nvbm5lY3RpbmdfMzBfbGlnaHQucG5nIGIvcGFja2FnZXMvTWVkaWFDb21wb25lbnRzL3Jlcy9kcmF3YWJsZS14eGhkcGkvaWNfbXJfYnV0dG9uX2Nvbm5lY3RpbmdfMzBfbGlnaHQucG5nCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1MWM2MDUxLi4wMDAwMDAwCi0tLSBhL3BhY2thZ2VzL01lZGlhQ29tcG9uZW50cy9yZXMvZHJhd2FibGUteHhoZHBpL2ljX21yX2J1dHRvbl9jb25uZWN0aW5nXzMwX2xpZ2h0LnBuZworKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3BhY2thZ2VzL01lZGlhQ29tcG9uZW50cy9yZXMvZHJhd2FibGUteHhoZHBpL2ljX21yX2J1dHRvbl9kaXNhYmxlZF9kYXJrLnBuZyBiL3BhY2thZ2VzL01lZGlhQ29tcG9uZW50cy9yZXMvZHJhd2FibGUteHhoZHBpL2ljX21yX2J1dHRvbl9kaXNhYmxlZF9kYXJrLnBuZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZmRiMjEyMS4uMDAwMDAwMAotLS0gYS9wYWNrYWdlcy9NZWRpYUNvbXBvbmVudHMvcmVzL2RyYXdhYmxlLXh4aGRwaS9pY19tcl9idXR0b25fZGlzYWJsZWRfZGFyay5wbmcKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9wYWNrYWdlcy9NZWRpYUNvbXBvbmVudHMvcmVzL2RyYXdhYmxlLXh4aGRwaS9pY19tcl9idXR0b25fZGlzYWJsZWRfbGlnaHQucG5nIGIvcGFja2FnZXMvTWVkaWFDb21wb25lbnRzL3Jlcy9kcmF3YWJsZS14eGhkcGkvaWNfbXJfYnV0dG9uX2Rpc2FibGVkX2xpZ2h0LnBuZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOWNlN2UzYS4uMDAwMDAwMAotLS0gYS9wYWNrYWdlcy9NZWRpYUNvbXBvbmVudHMvcmVzL2RyYXdhYmxlLXh4aGRwaS9pY19tcl9idXR0b25fZGlzYWJsZWRfbGlnaHQucG5nCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvTWVkaWFDb21wb25lbnRzL3Jlcy9kcmF3YWJsZS14eGhkcGkvaWNfbXJfYnV0dG9uX2Rpc2Nvbm5lY3RlZF9kYXJrLnBuZyBiL3BhY2thZ2VzL01lZGlhQ29tcG9uZW50cy9yZXMvZHJhd2FibGUteHhoZHBpL2ljX21yX2J1dHRvbl9kaXNjb25uZWN0ZWRfZGFyay5wbmcKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGU4NjAxY2UuLjAwMDAwMDAKLS0tIGEvcGFja2FnZXMvTWVkaWFDb21wb25lbnRzL3Jlcy9kcmF3YWJsZS14eGhkcGkvaWNfbXJfYnV0dG9uX2Rpc2Nvbm5lY3RlZF9kYXJrLnBuZworKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3BhY2thZ2VzL01lZGlhQ29tcG9uZW50cy9yZXMvZHJhd2FibGUteHhoZHBpL2ljX21yX2J1dHRvbl9kaXNjb25uZWN0ZWRfbGlnaHQucG5nIGIvcGFja2FnZXMvTWVkaWFDb21wb25lbnRzL3Jlcy9kcmF3YWJsZS14eGhkcGkvaWNfbXJfYnV0dG9uX2Rpc2Nvbm5lY3RlZF9saWdodC5wbmcKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDM0OTI4ZDcuLjAwMDAwMDAKLS0tIGEvcGFja2FnZXMvTWVkaWFDb21wb25lbnRzL3Jlcy9kcmF3YWJsZS14eGhkcGkvaWNfbXJfYnV0dG9uX2Rpc2Nvbm5lY3RlZF9saWdodC5wbmcKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9wYWNrYWdlcy9NZWRpYUNvbXBvbmVudHMvcmVzL2RyYXdhYmxlLXh4aGRwaS9pY19tcl9idXR0b25fZ3JleS5wbmcgYi9wYWNrYWdlcy9NZWRpYUNvbXBvbmVudHMvcmVzL2RyYXdhYmxlLXh4aGRwaS9pY19tcl9idXR0b25fZ3JleS5wbmcKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDc5MmZkNzcuLjAwMDAwMDAKLS0tIGEvcGFja2FnZXMvTWVkaWFDb21wb25lbnRzL3Jlcy9kcmF3YWJsZS14eGhkcGkvaWNfbXJfYnV0dG9uX2dyZXkucG5nCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvTWVkaWFDb21wb25lbnRzL3Jlcy9kcmF3YWJsZS14eGhkcGkvaWNfdm9sX3R5cGVfc3BlYWtlcl9kYXJrLnBuZyBiL3BhY2thZ2VzL01lZGlhQ29tcG9uZW50cy9yZXMvZHJhd2FibGUteHhoZHBpL2ljX3ZvbF90eXBlX3NwZWFrZXJfZGFyay5wbmcKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IGYxNzFhOGMuLjAwMDAwMDAKLS0tIGEvcGFja2FnZXMvTWVkaWFDb21wb25lbnRzL3Jlcy9kcmF3YWJsZS14eGhkcGkvaWNfdm9sX3R5cGVfc3BlYWtlcl9kYXJrLnBuZworKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3BhY2thZ2VzL01lZGlhQ29tcG9uZW50cy9yZXMvZHJhd2FibGUteHhoZHBpL2ljX3ZvbF90eXBlX3NwZWFrZXJfZ3JvdXBfZGFyay5wbmcgYi9wYWNrYWdlcy9NZWRpYUNvbXBvbmVudHMvcmVzL2RyYXdhYmxlLXh4aGRwaS9pY192b2xfdHlwZV9zcGVha2VyX2dyb3VwX2RhcmsucG5nCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDc1NQppbmRleCBjOGNiNmNhLi4wMDAwMDAwCi0tLSBhL3BhY2thZ2VzL01lZGlhQ29tcG9uZW50cy9yZXMvZHJhd2FibGUteHhoZHBpL2ljX3ZvbF90eXBlX3NwZWFrZXJfZ3JvdXBfZGFyay5wbmcKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9wYWNrYWdlcy9NZWRpYUNvbXBvbmVudHMvcmVzL2RyYXdhYmxlLXh4aGRwaS9pY192b2xfdHlwZV9zcGVha2VyX2dyb3VwX2xpZ2h0LnBuZyBiL3BhY2thZ2VzL01lZGlhQ29tcG9uZW50cy9yZXMvZHJhd2FibGUteHhoZHBpL2ljX3ZvbF90eXBlX3NwZWFrZXJfZ3JvdXBfbGlnaHQucG5nCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDc1NQppbmRleCA5Yzg4NjNkLi4wMDAwMDAwCi0tLSBhL3BhY2thZ2VzL01lZGlhQ29tcG9uZW50cy9yZXMvZHJhd2FibGUteHhoZHBpL2ljX3ZvbF90eXBlX3NwZWFrZXJfZ3JvdXBfbGlnaHQucG5nCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvTWVkaWFDb21wb25lbnRzL3Jlcy9kcmF3YWJsZS14eGhkcGkvaWNfdm9sX3R5cGVfc3BlYWtlcl9saWdodC5wbmcgYi9wYWNrYWdlcy9NZWRpYUNvbXBvbmVudHMvcmVzL2RyYXdhYmxlLXh4aGRwaS9pY192b2xfdHlwZV9zcGVha2VyX2xpZ2h0LnBuZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggOTMzNTAzOC4uMDAwMDAwMAotLS0gYS9wYWNrYWdlcy9NZWRpYUNvbXBvbmVudHMvcmVzL2RyYXdhYmxlLXh4aGRwaS9pY192b2xfdHlwZV9zcGVha2VyX2xpZ2h0LnBuZworKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3BhY2thZ2VzL01lZGlhQ29tcG9uZW50cy9yZXMvZHJhd2FibGUteHhoZHBpL2ljX3ZvbF90eXBlX3R2X2RhcmsucG5nIGIvcGFja2FnZXMvTWVkaWFDb21wb25lbnRzL3Jlcy9kcmF3YWJsZS14eGhkcGkvaWNfdm9sX3R5cGVfdHZfZGFyay5wbmcKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IGE2YTQ4NTguLjAwMDAwMDAKLS0tIGEvcGFja2FnZXMvTWVkaWFDb21wb25lbnRzL3Jlcy9kcmF3YWJsZS14eGhkcGkvaWNfdm9sX3R5cGVfdHZfZGFyay5wbmcKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9wYWNrYWdlcy9NZWRpYUNvbXBvbmVudHMvcmVzL2RyYXdhYmxlLXh4aGRwaS9pY192b2xfdHlwZV90dl9saWdodC5wbmcgYi9wYWNrYWdlcy9NZWRpYUNvbXBvbmVudHMvcmVzL2RyYXdhYmxlLXh4aGRwaS9pY192b2xfdHlwZV90dl9saWdodC5wbmcKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDRjYTY3ODcuLjAwMDAwMDAKLS0tIGEvcGFja2FnZXMvTWVkaWFDb21wb25lbnRzL3Jlcy9kcmF3YWJsZS14eGhkcGkvaWNfdm9sX3R5cGVfdHZfbGlnaHQucG5nCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvTWVkaWFDb21wb25lbnRzL3Jlcy9kcmF3YWJsZS14eHhoZHBpL2ljX2dyb3VwX2NvbGxhcHNlXzAwLnBuZyBiL3BhY2thZ2VzL01lZGlhQ29tcG9uZW50cy9yZXMvZHJhd2FibGUteHh4aGRwaS9pY19ncm91cF9jb2xsYXBzZV8wMC5wbmcKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGIyMzA1ZDIuLjAwMDAwMDAKLS0tIGEvcGFja2FnZXMvTWVkaWFDb21wb25lbnRzL3Jlcy9kcmF3YWJsZS14eHhoZHBpL2ljX2dyb3VwX2NvbGxhcHNlXzAwLnBuZworKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3BhY2thZ2VzL01lZGlhQ29tcG9uZW50cy9yZXMvZHJhd2FibGUteHh4aGRwaS9pY19ncm91cF9jb2xsYXBzZV8wMS5wbmcgYi9wYWNrYWdlcy9NZWRpYUNvbXBvbmVudHMvcmVzL2RyYXdhYmxlLXh4eGhkcGkvaWNfZ3JvdXBfY29sbGFwc2VfMDEucG5nCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1OTM5NWQ0Li4wMDAwMDAwCi0tLSBhL3BhY2thZ2VzL01lZGlhQ29tcG9uZW50cy9yZXMvZHJhd2FibGUteHh4aGRwaS9pY19ncm91cF9jb2xsYXBzZV8wMS5wbmcKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9wYWNrYWdlcy9NZWRpYUNvbXBvbmVudHMvcmVzL2RyYXdhYmxlLXh4eGhkcGkvaWNfZ3JvdXBfY29sbGFwc2VfMDIucG5nIGIvcGFja2FnZXMvTWVkaWFDb21wb25lbnRzL3Jlcy9kcmF3YWJsZS14eHhoZHBpL2ljX2dyb3VwX2NvbGxhcHNlXzAyLnBuZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzBhNzI4Mi4uMDAwMDAwMAotLS0gYS9wYWNrYWdlcy9NZWRpYUNvbXBvbmVudHMvcmVzL2RyYXdhYmxlLXh4eGhkcGkvaWNfZ3JvdXBfY29sbGFwc2VfMDIucG5nCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvTWVkaWFDb21wb25lbnRzL3Jlcy9kcmF3YWJsZS14eHhoZHBpL2ljX2dyb3VwX2NvbGxhcHNlXzAzLnBuZyBiL3BhY2thZ2VzL01lZGlhQ29tcG9uZW50cy9yZXMvZHJhd2FibGUteHh4aGRwaS9pY19ncm91cF9jb2xsYXBzZV8wMy5wbmcKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGIzZjBmNTMuLjAwMDAwMDAKLS0tIGEvcGFja2FnZXMvTWVkaWFDb21wb25lbnRzL3Jlcy9kcmF3YWJsZS14eHhoZHBpL2ljX2dyb3VwX2NvbGxhcHNlXzAzLnBuZworKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3BhY2thZ2VzL01lZGlhQ29tcG9uZW50cy9yZXMvZHJhd2FibGUteHh4aGRwaS9pY19ncm91cF9jb2xsYXBzZV8wNC5wbmcgYi9wYWNrYWdlcy9NZWRpYUNvbXBvbmVudHMvcmVzL2RyYXdhYmxlLXh4eGhkcGkvaWNfZ3JvdXBfY29sbGFwc2VfMDQucG5nCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2NmE4MGQ5Li4wMDAwMDAwCi0tLSBhL3BhY2thZ2VzL01lZGlhQ29tcG9uZW50cy9yZXMvZHJhd2FibGUteHh4aGRwaS9pY19ncm91cF9jb2xsYXBzZV8wNC5wbmcKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9wYWNrYWdlcy9NZWRpYUNvbXBvbmVudHMvcmVzL2RyYXdhYmxlLXh4eGhkcGkvaWNfZ3JvdXBfY29sbGFwc2VfMDUucG5nIGIvcGFja2FnZXMvTWVkaWFDb21wb25lbnRzL3Jlcy9kcmF3YWJsZS14eHhoZHBpL2ljX2dyb3VwX2NvbGxhcHNlXzA1LnBuZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOGVjMzkzOS4uMDAwMDAwMAotLS0gYS9wYWNrYWdlcy9NZWRpYUNvbXBvbmVudHMvcmVzL2RyYXdhYmxlLXh4eGhkcGkvaWNfZ3JvdXBfY29sbGFwc2VfMDUucG5nCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvTWVkaWFDb21wb25lbnRzL3Jlcy9kcmF3YWJsZS14eHhoZHBpL2ljX2dyb3VwX2NvbGxhcHNlXzA2LnBuZyBiL3BhY2thZ2VzL01lZGlhQ29tcG9uZW50cy9yZXMvZHJhd2FibGUteHh4aGRwaS9pY19ncm91cF9jb2xsYXBzZV8wNi5wbmcKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDBmMDI1MzYuLjAwMDAwMDAKLS0tIGEvcGFja2FnZXMvTWVkaWFDb21wb25lbnRzL3Jlcy9kcmF3YWJsZS14eHhoZHBpL2ljX2dyb3VwX2NvbGxhcHNlXzA2LnBuZworKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3BhY2thZ2VzL01lZGlhQ29tcG9uZW50cy9yZXMvZHJhd2FibGUteHh4aGRwaS9pY19ncm91cF9jb2xsYXBzZV8wNy5wbmcgYi9wYWNrYWdlcy9NZWRpYUNvbXBvbmVudHMvcmVzL2RyYXdhYmxlLXh4eGhkcGkvaWNfZ3JvdXBfY29sbGFwc2VfMDcucG5nCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiYTIyOGY0Li4wMDAwMDAwCi0tLSBhL3BhY2thZ2VzL01lZGlhQ29tcG9uZW50cy9yZXMvZHJhd2FibGUteHh4aGRwaS9pY19ncm91cF9jb2xsYXBzZV8wNy5wbmcKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9wYWNrYWdlcy9NZWRpYUNvbXBvbmVudHMvcmVzL2RyYXdhYmxlLXh4eGhkcGkvaWNfZ3JvdXBfY29sbGFwc2VfMDgucG5nIGIvcGFja2FnZXMvTWVkaWFDb21wb25lbnRzL3Jlcy9kcmF3YWJsZS14eHhoZHBpL2ljX2dyb3VwX2NvbGxhcHNlXzA4LnBuZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzA0Mjc3ZS4uMDAwMDAwMAotLS0gYS9wYWNrYWdlcy9NZWRpYUNvbXBvbmVudHMvcmVzL2RyYXdhYmxlLXh4eGhkcGkvaWNfZ3JvdXBfY29sbGFwc2VfMDgucG5nCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvTWVkaWFDb21wb25lbnRzL3Jlcy9kcmF3YWJsZS14eHhoZHBpL2ljX2dyb3VwX2NvbGxhcHNlXzA5LnBuZyBiL3BhY2thZ2VzL01lZGlhQ29tcG9uZW50cy9yZXMvZHJhd2FibGUteHh4aGRwaS9pY19ncm91cF9jb2xsYXBzZV8wOS5wbmcKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGY4NjViZmIuLjAwMDAwMDAKLS0tIGEvcGFja2FnZXMvTWVkaWFDb21wb25lbnRzL3Jlcy9kcmF3YWJsZS14eHhoZHBpL2ljX2dyb3VwX2NvbGxhcHNlXzA5LnBuZworKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3BhY2thZ2VzL01lZGlhQ29tcG9uZW50cy9yZXMvZHJhd2FibGUteHh4aGRwaS9pY19ncm91cF9jb2xsYXBzZV8xMC5wbmcgYi9wYWNrYWdlcy9NZWRpYUNvbXBvbmVudHMvcmVzL2RyYXdhYmxlLXh4eGhkcGkvaWNfZ3JvdXBfY29sbGFwc2VfMTAucG5nCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxN2M1ZDZiLi4wMDAwMDAwCi0tLSBhL3BhY2thZ2VzL01lZGlhQ29tcG9uZW50cy9yZXMvZHJhd2FibGUteHh4aGRwaS9pY19ncm91cF9jb2xsYXBzZV8xMC5wbmcKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9wYWNrYWdlcy9NZWRpYUNvbXBvbmVudHMvcmVzL2RyYXdhYmxlLXh4eGhkcGkvaWNfZ3JvdXBfY29sbGFwc2VfMTEucG5nIGIvcGFja2FnZXMvTWVkaWFDb21wb25lbnRzL3Jlcy9kcmF3YWJsZS14eHhoZHBpL2ljX2dyb3VwX2NvbGxhcHNlXzExLnBuZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTJmNGFkNS4uMDAwMDAwMAotLS0gYS9wYWNrYWdlcy9NZWRpYUNvbXBvbmVudHMvcmVzL2RyYXdhYmxlLXh4eGhkcGkvaWNfZ3JvdXBfY29sbGFwc2VfMTEucG5nCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvTWVkaWFDb21wb25lbnRzL3Jlcy9kcmF3YWJsZS14eHhoZHBpL2ljX2dyb3VwX2NvbGxhcHNlXzEyLnBuZyBiL3BhY2thZ2VzL01lZGlhQ29tcG9uZW50cy9yZXMvZHJhd2FibGUteHh4aGRwaS9pY19ncm91cF9jb2xsYXBzZV8xMi5wbmcKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGMyMzA2NDguLjAwMDAwMDAKLS0tIGEvcGFja2FnZXMvTWVkaWFDb21wb25lbnRzL3Jlcy9kcmF3YWJsZS14eHhoZHBpL2ljX2dyb3VwX2NvbGxhcHNlXzEyLnBuZworKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3BhY2thZ2VzL01lZGlhQ29tcG9uZW50cy9yZXMvZHJhd2FibGUteHh4aGRwaS9pY19ncm91cF9jb2xsYXBzZV8xMy5wbmcgYi9wYWNrYWdlcy9NZWRpYUNvbXBvbmVudHMvcmVzL2RyYXdhYmxlLXh4eGhkcGkvaWNfZ3JvdXBfY29sbGFwc2VfMTMucG5nCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiOTkzMjRlLi4wMDAwMDAwCi0tLSBhL3BhY2thZ2VzL01lZGlhQ29tcG9uZW50cy9yZXMvZHJhd2FibGUteHh4aGRwaS9pY19ncm91cF9jb2xsYXBzZV8xMy5wbmcKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9wYWNrYWdlcy9NZWRpYUNvbXBvbmVudHMvcmVzL2RyYXdhYmxlLXh4eGhkcGkvaWNfZ3JvdXBfY29sbGFwc2VfMTQucG5nIGIvcGFja2FnZXMvTWVkaWFDb21wb25lbnRzL3Jlcy9kcmF3YWJsZS14eHhoZHBpL2ljX2dyb3VwX2NvbGxhcHNlXzE0LnBuZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzg2MThmMC4uMDAwMDAwMAotLS0gYS9wYWNrYWdlcy9NZWRpYUNvbXBvbmVudHMvcmVzL2RyYXdhYmxlLXh4eGhkcGkvaWNfZ3JvdXBfY29sbGFwc2VfMTQucG5nCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvTWVkaWFDb21wb25lbnRzL3Jlcy9kcmF3YWJsZS14eHhoZHBpL2ljX2dyb3VwX2NvbGxhcHNlXzE1LnBuZyBiL3BhY2thZ2VzL01lZGlhQ29tcG9uZW50cy9yZXMvZHJhd2FibGUteHh4aGRwaS9pY19ncm91cF9jb2xsYXBzZV8xNS5wbmcKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDRhMGQ3NzAuLjAwMDAwMDAKLS0tIGEvcGFja2FnZXMvTWVkaWFDb21wb25lbnRzL3Jlcy9kcmF3YWJsZS14eHhoZHBpL2ljX2dyb3VwX2NvbGxhcHNlXzE1LnBuZworKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3BhY2thZ2VzL01lZGlhQ29tcG9uZW50cy9yZXMvZHJhd2FibGUteHh4aGRwaS9pY19ncm91cF9leHBhbmRfMDAucG5nIGIvcGFja2FnZXMvTWVkaWFDb21wb25lbnRzL3Jlcy9kcmF3YWJsZS14eHhoZHBpL2ljX2dyb3VwX2V4cGFuZF8wMC5wbmcKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDRhMGQ3NzAuLjAwMDAwMDAKLS0tIGEvcGFja2FnZXMvTWVkaWFDb21wb25lbnRzL3Jlcy9kcmF3YWJsZS14eHhoZHBpL2ljX2dyb3VwX2V4cGFuZF8wMC5wbmcKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9wYWNrYWdlcy9NZWRpYUNvbXBvbmVudHMvcmVzL2RyYXdhYmxlLXh4eGhkcGkvaWNfZ3JvdXBfZXhwYW5kXzAxLnBuZyBiL3BhY2thZ2VzL01lZGlhQ29tcG9uZW50cy9yZXMvZHJhd2FibGUteHh4aGRwaS9pY19ncm91cF9leHBhbmRfMDEucG5nCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0ZGI0ZTUwLi4wMDAwMDAwCi0tLSBhL3BhY2thZ2VzL01lZGlhQ29tcG9uZW50cy9yZXMvZHJhd2FibGUteHh4aGRwaS9pY19ncm91cF9leHBhbmRfMDEucG5nCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvTWVkaWFDb21wb25lbnRzL3Jlcy9kcmF3YWJsZS14eHhoZHBpL2ljX2dyb3VwX2V4cGFuZF8wMi5wbmcgYi9wYWNrYWdlcy9NZWRpYUNvbXBvbmVudHMvcmVzL2RyYXdhYmxlLXh4eGhkcGkvaWNfZ3JvdXBfZXhwYW5kXzAyLnBuZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODJiNWYwMy4uMDAwMDAwMAotLS0gYS9wYWNrYWdlcy9NZWRpYUNvbXBvbmVudHMvcmVzL2RyYXdhYmxlLXh4eGhkcGkvaWNfZ3JvdXBfZXhwYW5kXzAyLnBuZworKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3BhY2thZ2VzL01lZGlhQ29tcG9uZW50cy9yZXMvZHJhd2FibGUteHh4aGRwaS9pY19ncm91cF9leHBhbmRfMDMucG5nIGIvcGFja2FnZXMvTWVkaWFDb21wb25lbnRzL3Jlcy9kcmF3YWJsZS14eHhoZHBpL2ljX2dyb3VwX2V4cGFuZF8wMy5wbmcKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGIwNWM3NTguLjAwMDAwMDAKLS0tIGEvcGFja2FnZXMvTWVkaWFDb21wb25lbnRzL3Jlcy9kcmF3YWJsZS14eHhoZHBpL2ljX2dyb3VwX2V4cGFuZF8wMy5wbmcKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9wYWNrYWdlcy9NZWRpYUNvbXBvbmVudHMvcmVzL2RyYXdhYmxlLXh4eGhkcGkvaWNfZ3JvdXBfZXhwYW5kXzA0LnBuZyBiL3BhY2thZ2VzL01lZGlhQ29tcG9uZW50cy9yZXMvZHJhd2FibGUteHh4aGRwaS9pY19ncm91cF9leHBhbmRfMDQucG5nCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmYTVjN2ZhLi4wMDAwMDAwCi0tLSBhL3BhY2thZ2VzL01lZGlhQ29tcG9uZW50cy9yZXMvZHJhd2FibGUteHh4aGRwaS9pY19ncm91cF9leHBhbmRfMDQucG5nCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvTWVkaWFDb21wb25lbnRzL3Jlcy9kcmF3YWJsZS14eHhoZHBpL2ljX2dyb3VwX2V4cGFuZF8wNS5wbmcgYi9wYWNrYWdlcy9NZWRpYUNvbXBvbmVudHMvcmVzL2RyYXdhYmxlLXh4eGhkcGkvaWNfZ3JvdXBfZXhwYW5kXzA1LnBuZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMmMyODdlNC4uMDAwMDAwMAotLS0gYS9wYWNrYWdlcy9NZWRpYUNvbXBvbmVudHMvcmVzL2RyYXdhYmxlLXh4eGhkcGkvaWNfZ3JvdXBfZXhwYW5kXzA1LnBuZworKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3BhY2thZ2VzL01lZGlhQ29tcG9uZW50cy9yZXMvZHJhd2FibGUteHh4aGRwaS9pY19ncm91cF9leHBhbmRfMDYucG5nIGIvcGFja2FnZXMvTWVkaWFDb21wb25lbnRzL3Jlcy9kcmF3YWJsZS14eHhoZHBpL2ljX2dyb3VwX2V4cGFuZF8wNi5wbmcKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGViN2QwY2YuLjAwMDAwMDAKLS0tIGEvcGFja2FnZXMvTWVkaWFDb21wb25lbnRzL3Jlcy9kcmF3YWJsZS14eHhoZHBpL2ljX2dyb3VwX2V4cGFuZF8wNi5wbmcKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9wYWNrYWdlcy9NZWRpYUNvbXBvbmVudHMvcmVzL2RyYXdhYmxlLXh4eGhkcGkvaWNfZ3JvdXBfZXhwYW5kXzA3LnBuZyBiL3BhY2thZ2VzL01lZGlhQ29tcG9uZW50cy9yZXMvZHJhd2FibGUteHh4aGRwaS9pY19ncm91cF9leHBhbmRfMDcucG5nCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5NWZhNzJiLi4wMDAwMDAwCi0tLSBhL3BhY2thZ2VzL01lZGlhQ29tcG9uZW50cy9yZXMvZHJhd2FibGUteHh4aGRwaS9pY19ncm91cF9leHBhbmRfMDcucG5nCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvTWVkaWFDb21wb25lbnRzL3Jlcy9kcmF3YWJsZS14eHhoZHBpL2ljX2dyb3VwX2V4cGFuZF8wOC5wbmcgYi9wYWNrYWdlcy9NZWRpYUNvbXBvbmVudHMvcmVzL2RyYXdhYmxlLXh4eGhkcGkvaWNfZ3JvdXBfZXhwYW5kXzA4LnBuZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTY1MGVlYS4uMDAwMDAwMAotLS0gYS9wYWNrYWdlcy9NZWRpYUNvbXBvbmVudHMvcmVzL2RyYXdhYmxlLXh4eGhkcGkvaWNfZ3JvdXBfZXhwYW5kXzA4LnBuZworKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3BhY2thZ2VzL01lZGlhQ29tcG9uZW50cy9yZXMvZHJhd2FibGUteHh4aGRwaS9pY19ncm91cF9leHBhbmRfMDkucG5nIGIvcGFja2FnZXMvTWVkaWFDb21wb25lbnRzL3Jlcy9kcmF3YWJsZS14eHhoZHBpL2ljX2dyb3VwX2V4cGFuZF8wOS5wbmcKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDZmNDQzNTUuLjAwMDAwMDAKLS0tIGEvcGFja2FnZXMvTWVkaWFDb21wb25lbnRzL3Jlcy9kcmF3YWJsZS14eHhoZHBpL2ljX2dyb3VwX2V4cGFuZF8wOS5wbmcKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9wYWNrYWdlcy9NZWRpYUNvbXBvbmVudHMvcmVzL2RyYXdhYmxlLXh4eGhkcGkvaWNfZ3JvdXBfZXhwYW5kXzEwLnBuZyBiL3BhY2thZ2VzL01lZGlhQ29tcG9uZW50cy9yZXMvZHJhd2FibGUteHh4aGRwaS9pY19ncm91cF9leHBhbmRfMTAucG5nCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0ZTg3N2MzLi4wMDAwMDAwCi0tLSBhL3BhY2thZ2VzL01lZGlhQ29tcG9uZW50cy9yZXMvZHJhd2FibGUteHh4aGRwaS9pY19ncm91cF9leHBhbmRfMTAucG5nCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvTWVkaWFDb21wb25lbnRzL3Jlcy9kcmF3YWJsZS14eHhoZHBpL2ljX2dyb3VwX2V4cGFuZF8xMS5wbmcgYi9wYWNrYWdlcy9NZWRpYUNvbXBvbmVudHMvcmVzL2RyYXdhYmxlLXh4eGhkcGkvaWNfZ3JvdXBfZXhwYW5kXzExLnBuZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzkyN2YwYS4uMDAwMDAwMAotLS0gYS9wYWNrYWdlcy9NZWRpYUNvbXBvbmVudHMvcmVzL2RyYXdhYmxlLXh4eGhkcGkvaWNfZ3JvdXBfZXhwYW5kXzExLnBuZworKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3BhY2thZ2VzL01lZGlhQ29tcG9uZW50cy9yZXMvZHJhd2FibGUteHh4aGRwaS9pY19ncm91cF9leHBhbmRfMTIucG5nIGIvcGFja2FnZXMvTWVkaWFDb21wb25lbnRzL3Jlcy9kcmF3YWJsZS14eHhoZHBpL2ljX2dyb3VwX2V4cGFuZF8xMi5wbmcKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDcxYjE5YmIuLjAwMDAwMDAKLS0tIGEvcGFja2FnZXMvTWVkaWFDb21wb25lbnRzL3Jlcy9kcmF3YWJsZS14eHhoZHBpL2ljX2dyb3VwX2V4cGFuZF8xMi5wbmcKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9wYWNrYWdlcy9NZWRpYUNvbXBvbmVudHMvcmVzL2RyYXdhYmxlLXh4eGhkcGkvaWNfZ3JvdXBfZXhwYW5kXzEzLnBuZyBiL3BhY2thZ2VzL01lZGlhQ29tcG9uZW50cy9yZXMvZHJhd2FibGUteHh4aGRwaS9pY19ncm91cF9leHBhbmRfMTMucG5nCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiZjU5MjFlLi4wMDAwMDAwCi0tLSBhL3BhY2thZ2VzL01lZGlhQ29tcG9uZW50cy9yZXMvZHJhd2FibGUteHh4aGRwaS9pY19ncm91cF9leHBhbmRfMTMucG5nCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvTWVkaWFDb21wb25lbnRzL3Jlcy9kcmF3YWJsZS14eHhoZHBpL2ljX2dyb3VwX2V4cGFuZF8xNC5wbmcgYi9wYWNrYWdlcy9NZWRpYUNvbXBvbmVudHMvcmVzL2RyYXdhYmxlLXh4eGhkcGkvaWNfZ3JvdXBfZXhwYW5kXzE0LnBuZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTRiNzZiMS4uMDAwMDAwMAotLS0gYS9wYWNrYWdlcy9NZWRpYUNvbXBvbmVudHMvcmVzL2RyYXdhYmxlLXh4eGhkcGkvaWNfZ3JvdXBfZXhwYW5kXzE0LnBuZworKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3BhY2thZ2VzL01lZGlhQ29tcG9uZW50cy9yZXMvZHJhd2FibGUteHh4aGRwaS9pY19ncm91cF9leHBhbmRfMTUucG5nIGIvcGFja2FnZXMvTWVkaWFDb21wb25lbnRzL3Jlcy9kcmF3YWJsZS14eHhoZHBpL2ljX2dyb3VwX2V4cGFuZF8xNS5wbmcKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGIyMzA1ZDIuLjAwMDAwMDAKLS0tIGEvcGFja2FnZXMvTWVkaWFDb21wb25lbnRzL3Jlcy9kcmF3YWJsZS14eHhoZHBpL2ljX2dyb3VwX2V4cGFuZF8xNS5wbmcKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9wYWNrYWdlcy9NZWRpYUNvbXBvbmVudHMvcmVzL2RyYXdhYmxlLXh4eGhkcGkvaWNfbXJfYnV0dG9uX2dyZXkucG5nIGIvcGFja2FnZXMvTWVkaWFDb21wb25lbnRzL3Jlcy9kcmF3YWJsZS14eHhoZHBpL2ljX21yX2J1dHRvbl9ncmV5LnBuZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDRhOTUyNS4uMDAwMDAwMAotLS0gYS9wYWNrYWdlcy9NZWRpYUNvbXBvbmVudHMvcmVzL2RyYXdhYmxlLXh4eGhkcGkvaWNfbXJfYnV0dG9uX2dyZXkucG5nCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvTWVkaWFDb21wb25lbnRzL3Jlcy9kcmF3YWJsZS9jdXN0b21fcHJvZ3Jlc3MueG1sIGIvcGFja2FnZXMvTWVkaWFDb21wb25lbnRzL3Jlcy9kcmF3YWJsZS9jdXN0b21fcHJvZ3Jlc3MueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5NzMxYTZlLi4wMDAwMDAwCi0tLSBhL3BhY2thZ2VzL01lZGlhQ29tcG9uZW50cy9yZXMvZHJhd2FibGUvY3VzdG9tX3Byb2dyZXNzLnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08IS0tIENvcHlyaWdodCAyMDE4IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKLQotICAgICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKLSAgICAgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgotICAgICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLQotICAgICAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotCi0gICAgIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKLSAgICAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKLSAgICAgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCi0gICAgIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKLSAgICAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCi0tLT4KLTxsYXllci1saXN0IHhtbG5zOmFuZHJvaWQ9Imh0dHA6Ly9zY2hlbWFzLmFuZHJvaWQuY29tL2Fway9yZXMvYW5kcm9pZCIgPgotICAgIDxpdGVtIGFuZHJvaWQ6aWQ9IkBhbmRyb2lkOmlkL2JhY2tncm91bmQiPgotICAgICAgICA8c2hhcGUgYW5kcm9pZDpzaGFwZT0icmVjdGFuZ2xlIiA+Ci0gICAgICAgICAgICA8c29saWQgYW5kcm9pZDpjb2xvcj0iIzI2MDAwMDAwIiAvPgotICAgICAgICA8L3NoYXBlPgotICAgIDwvaXRlbT4KLSAgICA8aXRlbSBhbmRyb2lkOmlkPSJAYW5kcm9pZDppZC9zZWNvbmRhcnlQcm9ncmVzcyI+Ci0gICAgICAgIDxjbGlwPgotICAgICAgICAgICAgPHNoYXBlIGFuZHJvaWQ6c2hhcGU9InJlY3RhbmdsZSIgPgotICAgICAgICAgICAgICAgIDxzb2xpZCBhbmRyb2lkOmNvbG9yPSIjNUNmZmZmZmYiIC8+Ci0gICAgICAgICAgICA8L3NoYXBlPgotICAgICAgICA8L2NsaXA+Ci0gICAgPC9pdGVtPgotICAgIDxpdGVtIGFuZHJvaWQ6aWQ9IkBhbmRyb2lkOmlkL3Byb2dyZXNzIj4KLSAgICAgICAgPGNsaXA+Ci0gICAgICAgICAgICA8c2hhcGUgYW5kcm9pZDpzaGFwZT0icmVjdGFuZ2xlIiA+Ci0gICAgICAgICAgICAgICAgPHNvbGlkIGFuZHJvaWQ6Y29sb3I9IiNmZmZmZmYiIC8+Ci0gICAgICAgICAgICA8L3NoYXBlPgotICAgICAgICA8L2NsaXA+Ci0gICAgPC9pdGVtPgotPC9sYXllci1saXN0PgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3BhY2thZ2VzL01lZGlhQ29tcG9uZW50cy9yZXMvZHJhd2FibGUvY3VzdG9tX3Byb2dyZXNzX3RodW1iLnhtbCBiL3BhY2thZ2VzL01lZGlhQ29tcG9uZW50cy9yZXMvZHJhd2FibGUvY3VzdG9tX3Byb2dyZXNzX3RodW1iLnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMWEzNTk3MC4uMDAwMDAwMAotLS0gYS9wYWNrYWdlcy9NZWRpYUNvbXBvbmVudHMvcmVzL2RyYXdhYmxlL2N1c3RvbV9wcm9ncmVzc190aHVtYi54bWwKKysrIC9kZXYvbnVsbApAQCAtMSwyMiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPCEtLSBDb3B5cmlnaHQgMjAxOCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0Ci0KLSAgICAgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7Ci0gICAgIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KLSAgICAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0KLSAgICAgICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLQotICAgICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCi0gICAgIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCi0gICAgIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgotICAgICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCi0gICAgIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgotLS0+Ci08c2hhcGUgeG1sbnM6YW5kcm9pZD0iaHR0cDovL3NjaGVtYXMuYW5kcm9pZC5jb20vYXBrL3Jlcy9hbmRyb2lkIgotICAgIGFuZHJvaWQ6c2hhcGU9Im92YWwiID4KLSAgICA8c29saWQgYW5kcm9pZDpjb2xvcj0iI2ZmZmZmZiIgLz4KLSAgICA8c2l6ZQotICAgICAgICBhbmRyb2lkOmhlaWdodD0iQGRpbWVuL21jdjJfY3VzdG9tX3Byb2dyZXNzX3RodW1iX3NpemUiCi0gICAgICAgIGFuZHJvaWQ6d2lkdGg9IkBkaW1lbi9tY3YyX2N1c3RvbV9wcm9ncmVzc190aHVtYl9zaXplIiAvPgotPC9zaGFwZT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9wYWNrYWdlcy9NZWRpYUNvbXBvbmVudHMvcmVzL2RyYXdhYmxlL2ljX2Fycm93X2JhY2sueG1sIGIvcGFja2FnZXMvTWVkaWFDb21wb25lbnRzL3Jlcy9kcmF3YWJsZS9pY19hcnJvd19iYWNrLnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMmI1ZjcxZS4uMDAwMDAwMAotLS0gYS9wYWNrYWdlcy9NZWRpYUNvbXBvbmVudHMvcmVzL2RyYXdhYmxlL2ljX2Fycm93X2JhY2sueG1sCisrKyAvZGV2L251bGwKQEAgLTEsOSArMCwwIEBACi08dmVjdG9yIHhtbG5zOmFuZHJvaWQ9Imh0dHA6Ly9zY2hlbWFzLmFuZHJvaWQuY29tL2Fway9yZXMvYW5kcm9pZCIKLSAgICAgICAgYW5kcm9pZDp3aWR0aD0iMjRkcCIKLSAgICAgICAgYW5kcm9pZDpoZWlnaHQ9IjI0ZHAiCi0gICAgICAgIGFuZHJvaWQ6dmlld3BvcnRXaWR0aD0iMjQuMCIKLSAgICAgICAgYW5kcm9pZDp2aWV3cG9ydEhlaWdodD0iMjQuMCI+Ci0gICAgPHBhdGgKLSAgICAgICAgYW5kcm9pZDpwYXRoRGF0YT0iTTIwLDExSDcuODNsNS41OSwtNS41OUwxMiw0bC04LDggOCw4IDEuNDEsLTEuNDFMNy44MywxM0gyMHYtMnoiCi0gICAgICAgIGFuZHJvaWQ6ZmlsbENvbG9yPSIjRkZGRkZGIi8+Ci08L3ZlY3Rvcj4KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL01lZGlhQ29tcG9uZW50cy9yZXMvZHJhd2FibGUvaWNfYXNwZWN0X3JhdGlvLnhtbCBiL3BhY2thZ2VzL01lZGlhQ29tcG9uZW50cy9yZXMvZHJhd2FibGUvaWNfYXNwZWN0X3JhdGlvLnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzYyMjhlNi4uMDAwMDAwMAotLS0gYS9wYWNrYWdlcy9NZWRpYUNvbXBvbmVudHMvcmVzL2RyYXdhYmxlL2ljX2FzcGVjdF9yYXRpby54bWwKKysrIC9kZXYvbnVsbApAQCAtMSw5ICswLDAgQEAKLTx2ZWN0b3IgeG1sbnM6YW5kcm9pZD0iaHR0cDovL3NjaGVtYXMuYW5kcm9pZC5jb20vYXBrL3Jlcy9hbmRyb2lkIgotICAgICAgICBhbmRyb2lkOndpZHRoPSIyNGRwIgotICAgICAgICBhbmRyb2lkOmhlaWdodD0iMjRkcCIKLSAgICAgICAgYW5kcm9pZDp2aWV3cG9ydFdpZHRoPSIyNC4wIgotICAgICAgICBhbmRyb2lkOnZpZXdwb3J0SGVpZ2h0PSIyNC4wIj4KLSAgICA8cGF0aAotICAgICAgICBhbmRyb2lkOnBhdGhEYXRhPSJNMTksMTJoLTJ2M2gtM3YyaDV2LTV6TTcsOWgzTDEwLDdMNSw3djVoMkw3LDl6TTIxLDNMMywzYy0xLjEsMCAtMiwwLjkgLTIsMnYxNGMwLDEuMSAwLjksMiAyLDJoMThjMS4xLDAgMiwtMC45IDIsLTJMMjMsNWMwLC0xLjEgLTAuOSwtMiAtMiwtMnpNMjEsMTkuMDFMMywxOS4wMUwzLDQuOTloMTh2MTQuMDJ6IgotICAgICAgICBhbmRyb2lkOmZpbGxDb2xvcj0iI0ZGRkZGRiIvPgotPC92ZWN0b3I+CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9NZWRpYUNvbXBvbmVudHMvcmVzL2RyYXdhYmxlL2ljX2F1ZGlvdHJhY2sueG1sIGIvcGFja2FnZXMvTWVkaWFDb21wb25lbnRzL3Jlcy9kcmF3YWJsZS9pY19hdWRpb3RyYWNrLnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjdjMTJiNS4uMDAwMDAwMAotLS0gYS9wYWNrYWdlcy9NZWRpYUNvbXBvbmVudHMvcmVzL2RyYXdhYmxlL2ljX2F1ZGlvdHJhY2sueG1sCisrKyAvZGV2L251bGwKQEAgLTEsOSArMCwwIEBACi08dmVjdG9yIHhtbG5zOmFuZHJvaWQ9Imh0dHA6Ly9zY2hlbWFzLmFuZHJvaWQuY29tL2Fway9yZXMvYW5kcm9pZCIKLSAgICBhbmRyb2lkOndpZHRoPSIyNGRwIgotICAgIGFuZHJvaWQ6aGVpZ2h0PSIyNGRwIgotICAgIGFuZHJvaWQ6dmlld3BvcnRXaWR0aD0iMjQuMCIKLSAgICBhbmRyb2lkOnZpZXdwb3J0SGVpZ2h0PSIyNC4wIj4KLSAgICA8cGF0aAotICAgICAgICBhbmRyb2lkOmZpbGxDb2xvcj0iI0ZGRkZGRiIKLSAgICAgICAgYW5kcm9pZDpwYXRoRGF0YT0iTTEyLDN2OS4yOGMtMC40NywtMC4xNyAtMC45NywtMC4yOCAtMS41LC0wLjI4QzguMDEsMTIgNiwxNC4wMSA2LDE2LjVTOC4wMSwyMSAxMC41LDIxYzIuMzEsMCA0LjIsLTEuNzUgNC40NSwtNEgxNVY2aDRWM2gtN3oiLz4KLTwvdmVjdG9yPgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvTWVkaWFDb21wb25lbnRzL3Jlcy9kcmF3YWJsZS9pY19jaGVjay54bWwgYi9wYWNrYWdlcy9NZWRpYUNvbXBvbmVudHMvcmVzL2RyYXdhYmxlL2ljX2NoZWNrLnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzJmNzIwYi4uMDAwMDAwMAotLS0gYS9wYWNrYWdlcy9NZWRpYUNvbXBvbmVudHMvcmVzL2RyYXdhYmxlL2ljX2NoZWNrLnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDEzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9InV0Zi04Ij8+Ci08dmVjdG9yIHhtbG5zOmFuZHJvaWQ9Imh0dHA6Ly9zY2hlbWFzLmFuZHJvaWQuY29tL2Fway9yZXMvYW5kcm9pZCIKLSAgICBhbmRyb2lkOndpZHRoPSIyNGRwIgotICAgIGFuZHJvaWQ6aGVpZ2h0PSIyNGRwIgotICAgIGFuZHJvaWQ6dmlld3BvcnRXaWR0aD0iMjQiCi0gICAgYW5kcm9pZDp2aWV3cG9ydEhlaWdodD0iMjQiPgotCi0gICAgPHBhdGgKLSAgICAgICAgYW5kcm9pZDpwYXRoRGF0YT0iTTAgMGgyNHYyNEgweiIgLz4KLSAgICA8cGF0aAotICAgICAgICBhbmRyb2lkOmZpbGxDb2xvcj0iI0ZGRkZGRiIKLSAgICAgICAgYW5kcm9pZDpwYXRoRGF0YT0iTTkgMTYuMkw0LjggMTJsLTEuNCAxLjRMOSAxOSAyMSA3bC0xLjQtMS40TDkgMTYuMnoiIC8+Ci08L3ZlY3Rvcj4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9wYWNrYWdlcy9NZWRpYUNvbXBvbmVudHMvcmVzL2RyYXdhYmxlL2ljX2NoZXZyb25fbGVmdC54bWwgYi9wYWNrYWdlcy9NZWRpYUNvbXBvbmVudHMvcmVzL2RyYXdhYmxlL2ljX2NoZXZyb25fbGVmdC54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDgzMzZkMTcuLjAwMDAwMDAKLS0tIGEvcGFja2FnZXMvTWVkaWFDb21wb25lbnRzL3Jlcy9kcmF3YWJsZS9pY19jaGV2cm9uX2xlZnQueG1sCisrKyAvZGV2L251bGwKQEAgLTEsOSArMCwwIEBACi08dmVjdG9yIHhtbG5zOmFuZHJvaWQ9Imh0dHA6Ly9zY2hlbWFzLmFuZHJvaWQuY29tL2Fway9yZXMvYW5kcm9pZCIKLSAgICAgICAgYW5kcm9pZDp3aWR0aD0iMjRkcCIKLSAgICAgICAgYW5kcm9pZDpoZWlnaHQ9IjI0ZHAiCi0gICAgICAgIGFuZHJvaWQ6dmlld3BvcnRXaWR0aD0iMjQuMCIKLSAgICAgICAgYW5kcm9pZDp2aWV3cG9ydEhlaWdodD0iMjQuMCI+Ci0gICAgPHBhdGgKLSAgICAgICAgYW5kcm9pZDpwYXRoRGF0YT0iTTE1LjQxLDcuNDFMMTQsNmwtNiw2IDYsNiAxLjQxLC0xLjQxTDEwLjgzLDEyeiIKLSAgICAgICAgYW5kcm9pZDpmaWxsQ29sb3I9IiNGRkZGRkYiLz4KLTwvdmVjdG9yPgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvTWVkaWFDb21wb25lbnRzL3Jlcy9kcmF3YWJsZS9pY19jaGV2cm9uX3JpZ2h0LnhtbCBiL3BhY2thZ2VzL01lZGlhQ29tcG9uZW50cy9yZXMvZHJhd2FibGUvaWNfY2hldnJvbl9yaWdodC54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGZiMmNlMDkuLjAwMDAwMDAKLS0tIGEvcGFja2FnZXMvTWVkaWFDb21wb25lbnRzL3Jlcy9kcmF3YWJsZS9pY19jaGV2cm9uX3JpZ2h0LnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDkgKzAsMCBAQAotPHZlY3RvciB4bWxuczphbmRyb2lkPSJodHRwOi8vc2NoZW1hcy5hbmRyb2lkLmNvbS9hcGsvcmVzL2FuZHJvaWQiCi0gICAgICAgIGFuZHJvaWQ6d2lkdGg9IjI0ZHAiCi0gICAgICAgIGFuZHJvaWQ6aGVpZ2h0PSIyNGRwIgotICAgICAgICBhbmRyb2lkOnZpZXdwb3J0V2lkdGg9IjI0LjAiCi0gICAgICAgIGFuZHJvaWQ6dmlld3BvcnRIZWlnaHQ9IjI0LjAiPgotICAgIDxwYXRoCi0gICAgICAgIGFuZHJvaWQ6cGF0aERhdGE9Ik0xMCw2TDguNTksNy40MSAxMy4xNywxMmwtNC41OCw0LjU5TDEwLDE4bDYsLTZ6IgotICAgICAgICBhbmRyb2lkOmZpbGxDb2xvcj0iI0ZGRkZGRiIvPgotPC92ZWN0b3I+CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9NZWRpYUNvbXBvbmVudHMvcmVzL2RyYXdhYmxlL2ljX2RlZmF1bHRfYWxidW1faW1hZ2UueG1sIGIvcGFja2FnZXMvTWVkaWFDb21wb25lbnRzL3Jlcy9kcmF3YWJsZS9pY19kZWZhdWx0X2FsYnVtX2ltYWdlLnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMWNlZTY0My4uMDAwMDAwMAotLS0gYS9wYWNrYWdlcy9NZWRpYUNvbXBvbmVudHMvcmVzL2RyYXdhYmxlL2ljX2RlZmF1bHRfYWxidW1faW1hZ2UueG1sCisrKyAvZGV2L251bGwKQEAgLTEsMTQgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KLTx2ZWN0b3IgeG1sbnM6YW5kcm9pZD0iaHR0cDovL3NjaGVtYXMuYW5kcm9pZC5jb20vYXBrL3Jlcy9hbmRyb2lkIgotICAgIGFuZHJvaWQ6d2lkdGg9IjUxMmRwIgotICAgIGFuZHJvaWQ6aGVpZ2h0PSI1MTJkcCIKLSAgICBhbmRyb2lkOnZpZXdwb3J0V2lkdGg9IjUxMiIKLSAgICBhbmRyb2lkOnZpZXdwb3J0SGVpZ2h0PSI1MTIiPgotCi0gICAgPHBhdGgKLSAgICAgICAgYW5kcm9pZDpmaWxsQ29sb3I9IiM2MTYxNjEiCi0gICAgICAgIGFuZHJvaWQ6cGF0aERhdGE9Ik0gMCAwIEggNTEyIFYgNTEyIEggMCBWIDAgWiIgLz4KLSAgICA8cGF0aAotICAgICAgICBhbmRyb2lkOmZpbGxDb2xvcj0iIzUyNTI1MiIKLSAgICAgICAgYW5kcm9pZDpwYXRoRGF0YT0iTTI1NiwxNTF2MTIzLjE0Yy02Ljg4LTQuMDItMTQuODItNi40OC0yMy4zMy02LjQ4IGMtMjUuNzgsMC00Ni42NywyMC44OC00Ni42Nyw0Ni42N2MwLDI1Ljc4LDIwLjg4LDQ2LjY3LDQ2LjY3LDQ2LjY3czQ2LjY3LTIwLjg4LDQ2LjY3LTQ2LjY3VjE5Ny42N0gzMjZWMTUxSDI1NnoiIC8+Ci08L3ZlY3Rvcj4KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL01lZGlhQ29tcG9uZW50cy9yZXMvZHJhd2FibGUvaWNfZm9yd2FyZF8zMC54bWwgYi9wYWNrYWdlcy9NZWRpYUNvbXBvbmVudHMvcmVzL2RyYXdhYmxlL2ljX2ZvcndhcmRfMzAueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3ZWZkZjE2Li4wMDAwMDAwCi0tLSBhL3BhY2thZ2VzL01lZGlhQ29tcG9uZW50cy9yZXMvZHJhd2FibGUvaWNfZm9yd2FyZF8zMC54bWwKKysrIC9kZXYvbnVsbApAQCAtMSwxMiArMCwwIEBACi08dmVjdG9yIHhtbG5zOmFuZHJvaWQ9Imh0dHA6Ly9zY2hlbWFzLmFuZHJvaWQuY29tL2Fway9yZXMvYW5kcm9pZCIKLSAgICAgICAgYW5kcm9pZDp3aWR0aD0iNDBkcCIKLSAgICAgICAgYW5kcm9pZDpoZWlnaHQ9IjQwZHAiCi0gICAgICAgIGFuZHJvaWQ6dmlld3BvcnRXaWR0aD0iMjQuMCIKLSAgICAgICAgYW5kcm9pZDp2aWV3cG9ydEhlaWdodD0iMjQuMCI+Ci0gICAgPGdyb3VwPgotICAgICAgICA8Y2xpcC1wYXRoIGFuZHJvaWQ6cGF0aERhdGE9Ik0yNCwyNEgwVjBoMjR2MjR6IE0gMCwwIiAvPgotICAgIDxwYXRoCi0gICAgICAgIGFuZHJvaWQ6cGF0aERhdGE9Ik05LjYgMTMuNWguNGMuMiAwIC40LC0uMS41LC0uMnMuMiwtLjIuMiwtLjR2LS4ycy0uMSwtLjEsLS4xLC0uMiwtLjEsLS4xLC0uMiwtLjFoLS41cy0uMS4xLC0uMi4xLC0uMS4xLC0uMS4ydi4yaC0xYzAsLS4yIDAsLS4zLjEsLS41cy4yLC0uMy4zLC0uNC4zLC0uMi40LC0uMi40LC0uMS41LC0uMWMuMiAwIC40IDAgLjYuMXMuMy4xLjUuMi4yLjIuMy40LjEuMy4xLjV2LjNzLS4xLjIsLS4xLjMsLS4xLjIsLS4yLjIsLS4yLjEsLS4zLjJjLjIuMS40LjIuNS40cy4yLjQuMi42YzAgLjIgMCAuNCwtLjEuNXMtLjIuMywtLjMuNCwtLjMuMiwtLjUuMiwtLjQuMSwtLjYuMWMtLjIgMCwtLjQgMCwtLjUsLS4xcy0uMywtLjEsLS41LC0uMiwtLjIsLS4yLC0uMywtLjQsLS4xLC0uNCwtLjEsLS42aC44di4ycy4xLjEuMS4yLjEuMS4yLjFoLjVzLjEsLS4xLjIsLS4xLjEsLS4xLjEsLS4ydi0uNXMtLjEsLS4xLC0uMSwtLjIsLS4xLC0uMSwtLjIsLS4xaC0uNnYtLjd6bTUuNy43YzAgLjMgMCAuNiwtLjEuOGwtLjMuNnMtLjMuMywtLjUuMywtLjQuMSwtLjYuMSwtLjQgMCwtLjYsLS4xLC0uMywtLjIsLS41LC0uMywtLjIsLS4zLC0uMywtLjYsLS4xLC0uNSwtLjEsLS44di0uN2MwLC0uMyAwLC0uNi4xLC0uOGwuMywtLjZzLjMsLS4zLjUsLS4zLjQsLS4xLjYsLS4xLjQgMCAuNi4xLjMuMi41LjMuMi4zLjMuNi4xLjUuMS44di43em0tLjksLS44di0uNXMtLjEsLS4yLC0uMSwtLjMsLS4xLC0uMSwtLjIsLS4yLC0uMiwtLjEsLS4zLC0uMSwtLjIgMCwtLjMuMWwtLjIuMnMtLjEuMiwtLjEuM3Yycy4xLjIuMS4zLjEuMS4yLjIuMi4xLjMuMS4yIDAgLjMsLS4xbC4yLC0uMnMuMSwtLjIuMSwtLjN2LTEuNXpNNCAxM2MwIDQuNCAzLjYgOCA4IDhzOCwtMy42IDgsLThoLTJjMCAzLjMsLTIuNyA2LC02IDZzLTYsLTIuNywtNiwtNiAyLjcsLTYgNiwtNnY0bDUsLTUsLTUsLTV2NGMtNC40IDAsLTggMy42LC04IDh6IgotICAgICAgICBhbmRyb2lkOmZpbGxDb2xvcj0iI0ZGRkZGRiIvPgotICAgIDwvZ3JvdXA+Ci08L3ZlY3Rvcj4KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL01lZGlhQ29tcG9uZW50cy9yZXMvZHJhd2FibGUvaWNfZnVsbHNjcmVlbi54bWwgYi9wYWNrYWdlcy9NZWRpYUNvbXBvbmVudHMvcmVzL2RyYXdhYmxlL2ljX2Z1bGxzY3JlZW4ueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0YjRmNmJjLi4wMDAwMDAwCi0tLSBhL3BhY2thZ2VzL01lZGlhQ29tcG9uZW50cy9yZXMvZHJhd2FibGUvaWNfZnVsbHNjcmVlbi54bWwKKysrIC9kZXYvbnVsbApAQCAtMSw5ICswLDAgQEAKLTx2ZWN0b3IgeG1sbnM6YW5kcm9pZD0iaHR0cDovL3NjaGVtYXMuYW5kcm9pZC5jb20vYXBrL3Jlcy9hbmRyb2lkIgotICAgICAgICBhbmRyb2lkOndpZHRoPSIyNGRwIgotICAgICAgICBhbmRyb2lkOmhlaWdodD0iMjRkcCIKLSAgICAgICAgYW5kcm9pZDp2aWV3cG9ydFdpZHRoPSIyNC4wIgotICAgICAgICBhbmRyb2lkOnZpZXdwb3J0SGVpZ2h0PSIyNC4wIj4KLSAgICA8cGF0aAotICAgICAgICBhbmRyb2lkOnBhdGhEYXRhPSJNNywxNEw1LDE0djVoNXYtMkw3LDE3di0zek01LDEwaDJMNyw3aDNMMTAsNUw1LDV2NXpNMTcsMTdoLTN2Mmg1di01aC0ydjN6TTE0LDV2MmgzdjNoMkwxOSw1aC01eiIKLSAgICAgICAgYW5kcm9pZDpmaWxsQ29sb3I9IiNGRkZGRkYiLz4KLTwvdmVjdG9yPgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvTWVkaWFDb21wb25lbnRzL3Jlcy9kcmF3YWJsZS9pY19mdWxsc2NyZWVuX2V4aXQueG1sIGIvcGFja2FnZXMvTWVkaWFDb21wb25lbnRzL3Jlcy9kcmF3YWJsZS9pY19mdWxsc2NyZWVuX2V4aXQueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiYzIwNGUyLi4wMDAwMDAwCi0tLSBhL3BhY2thZ2VzL01lZGlhQ29tcG9uZW50cy9yZXMvZHJhd2FibGUvaWNfZnVsbHNjcmVlbl9leGl0LnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDkgKzAsMCBAQAotPHZlY3RvciB4bWxuczphbmRyb2lkPSJodHRwOi8vc2NoZW1hcy5hbmRyb2lkLmNvbS9hcGsvcmVzL2FuZHJvaWQiCi0gICAgICAgIGFuZHJvaWQ6d2lkdGg9IjI0ZHAiCi0gICAgICAgIGFuZHJvaWQ6aGVpZ2h0PSIyNGRwIgotICAgICAgICBhbmRyb2lkOnZpZXdwb3J0V2lkdGg9IjI0LjAiCi0gICAgICAgIGFuZHJvaWQ6dmlld3BvcnRIZWlnaHQ9IjI0LjAiPgotICAgIDxwYXRoCi0gICAgICAgIGFuZHJvaWQ6cGF0aERhdGE9Ik01LDE2aDN2M2gydi01TDUsMTR2MnpNOCw4TDUsOHYyaDVMMTAsNUw4LDV2M3pNMTQsMTloMnYtM2gzdi0yaC01djV6TTE2LDhMMTYsNWgtMnY1aDVMMTksOGgtM3oiCi0gICAgICAgIGFuZHJvaWQ6ZmlsbENvbG9yPSIjRkZGRkZGIi8+Ci08L3ZlY3Rvcj4KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL01lZGlhQ29tcG9uZW50cy9yZXMvZHJhd2FibGUvaWNfaGVscC54bWwgYi9wYWNrYWdlcy9NZWRpYUNvbXBvbmVudHMvcmVzL2RyYXdhYmxlL2ljX2hlbHAueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0ZDFkNzVkLi4wMDAwMDAwCi0tLSBhL3BhY2thZ2VzL01lZGlhQ29tcG9uZW50cy9yZXMvZHJhd2FibGUvaWNfaGVscC54bWwKKysrIC9kZXYvbnVsbApAQCAtMSwxNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ1dGYtOCI/PgotPHZlY3RvciB4bWxuczphbmRyb2lkPSJodHRwOi8vc2NoZW1hcy5hbmRyb2lkLmNvbS9hcGsvcmVzL2FuZHJvaWQiCi0gICAgYW5kcm9pZDp3aWR0aD0iMjRkcCIKLSAgICBhbmRyb2lkOmhlaWdodD0iMjRkcCIKLSAgICBhbmRyb2lkOnZpZXdwb3J0V2lkdGg9IjI0IgotICAgIGFuZHJvaWQ6dmlld3BvcnRIZWlnaHQ9IjI0Ij4KLQotICAgIDxwYXRoCi0gICAgICAgIGFuZHJvaWQ6cGF0aERhdGE9Ik0wIDBoMjR2MjRIMHoiIC8+Ci0gICAgPHBhdGgKLSAgICAgICAgYW5kcm9pZDpmaWxsQ29sb3I9IiNGRkZGRkYiCi0gICAgICAgIGFuZHJvaWQ6cGF0aERhdGE9Ik0xMiAyQzYuNDggMiAyIDYuNDggMiAxMnM0LjQ4IDEwIDEwIDEwIDEwLTQuNDggMTAtMTBTMTcuNTIgMiAxMiAyem0xCi0xN2gtMnYtMmgydjJ6bTIuMDctNy43NWwtLjkgLjkyIEMxMy40NSAxMi45IDEzIDEzLjUgMTMgMTVoLTJ2LS41YzAtMS4xIC40NSAtMi4xCi0xLjE3LTIuODNsMS4yNC0xLjI2Yy4zNy0uMzYgLjU5IC0uODYgLjU5IC0xLjQxIDAtMS4xLS45LTItMi0ycy0yIC45LTIgMkg4YzAtMi4yMQotMS43OS00IDQtNHM0IDEuNzkgNCA0YzAgLjg4LS4zNiAxLjY4LS45MyAyLjI1eiIgLz4KLTwvdmVjdG9yPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3BhY2thZ2VzL01lZGlhQ29tcG9uZW50cy9yZXMvZHJhd2FibGUvaWNfaGlnaF9xdWFsaXR5LnhtbCBiL3BhY2thZ2VzL01lZGlhQ29tcG9uZW50cy9yZXMvZHJhd2FibGUvaWNfaGlnaF9xdWFsaXR5LnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjc2ZTIyZi4uMDAwMDAwMAotLS0gYS9wYWNrYWdlcy9NZWRpYUNvbXBvbmVudHMvcmVzL2RyYXdhYmxlL2ljX2hpZ2hfcXVhbGl0eS54bWwKKysrIC9kZXYvbnVsbApAQCAtMSwxMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ1dGYtOCI/PgotPHZlY3RvciB4bWxuczphbmRyb2lkPSJodHRwOi8vc2NoZW1hcy5hbmRyb2lkLmNvbS9hcGsvcmVzL2FuZHJvaWQiCi0gICAgYW5kcm9pZDp3aWR0aD0iMzRkcCIKLSAgICBhbmRyb2lkOmhlaWdodD0iMzRkcCIKLSAgICBhbmRyb2lkOnZpZXdwb3J0V2lkdGg9IjI0IgotICAgIGFuZHJvaWQ6dmlld3BvcnRIZWlnaHQ9IjI0Ij4KLQotICAgIDxwYXRoCi0gICAgICAgIGFuZHJvaWQ6cGF0aERhdGE9Ik0wIDBoMjR2MjRIMHoiIC8+Ci0gICAgPHBhdGgKLSAgICAgICAgYW5kcm9pZDpmaWxsQ29sb3I9IiNGRkZGRkYiCi0gICAgICAgIGFuZHJvaWQ6cGF0aERhdGE9Ik0xOSA0SDVjLTEuMTEgMC0yIDAuOS0yIDJ2MTJjMCAxLjEgMC44OSAyIDIgMmgxNGMxLjEgMCAyLTAuOSAyLTJWNmMwLTEuMS0wLjktMi0yLTJ6bS04IDExSDkuNXYtMmgtMnYySDZWOWgxLjV2Mi41aDJWOUgxMXY2em03LTFjMCAwLjU1LTAuNDUgMS0xIDFoLTAuNzV2MS41aC0xLjVWMTVIMTRjLTAuNTUgMC0xLTAuNDUtMS0xdi00YzAtMC41NSAwLjQ1IC0xIDEtMWgzYzAuNTUgMCAxIDAuNDUgMSAxdjR6bS0zLjUtMC41aDJ2LTNoLTJ2M3oiIC8+Ci08L3ZlY3Rvcj4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9wYWNrYWdlcy9NZWRpYUNvbXBvbmVudHMvcmVzL2RyYXdhYmxlL2ljX2xhdW5jaC54bWwgYi9wYWNrYWdlcy9NZWRpYUNvbXBvbmVudHMvcmVzL2RyYXdhYmxlL2ljX2xhdW5jaC54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGY3YWY2YWEuLjAwMDAwMDAKLS0tIGEvcGFja2FnZXMvTWVkaWFDb21wb25lbnRzL3Jlcy9kcmF3YWJsZS9pY19sYXVuY2gueG1sCisrKyAvZGV2L251bGwKQEAgLTEsOSArMCwwIEBACi08dmVjdG9yIHhtbG5zOmFuZHJvaWQ9Imh0dHA6Ly9zY2hlbWFzLmFuZHJvaWQuY29tL2Fway9yZXMvYW5kcm9pZCIKLSAgICBhbmRyb2lkOndpZHRoPSIyNGRwIgotICAgIGFuZHJvaWQ6aGVpZ2h0PSIyNGRwIgotICAgIGFuZHJvaWQ6dmlld3BvcnRXaWR0aD0iMjQuMCIKLSAgICBhbmRyb2lkOnZpZXdwb3J0SGVpZ2h0PSIyNC4wIj4KLSAgICA8cGF0aAotICAgICAgICBhbmRyb2lkOmZpbGxDb2xvcj0iI0ZGRkZGRiIKLSAgICAgICAgYW5kcm9pZDpwYXRoRGF0YT0iTTE5LDE5SDVWNWg3VjNINWMtMS4xMSwwIC0yLDAuOSAtMiwydjE0YzAsMS4xIDAuODksMiAyLDJoMTRjMS4xLDAgMiwtMC45IDIsLTJ2LTdoLTJ2N3pNMTQsM3YyaDMuNTlsLTkuODMsOS44MyAxLjQxLDEuNDFMMTksNi40MVYxMGgyVjNoLTd6Ii8+Ci08L3ZlY3Rvcj4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9wYWNrYWdlcy9NZWRpYUNvbXBvbmVudHMvcmVzL2RyYXdhYmxlL2ljX211dGUueG1sIGIvcGFja2FnZXMvTWVkaWFDb21wb25lbnRzL3Jlcy9kcmF3YWJsZS9pY19tdXRlLnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTYwYWFlYy4uMDAwMDAwMAotLS0gYS9wYWNrYWdlcy9NZWRpYUNvbXBvbmVudHMvcmVzL2RyYXdhYmxlL2ljX211dGUueG1sCisrKyAvZGV2L251bGwKQEAgLTEsOSArMCwwIEBACi08dmVjdG9yIHhtbG5zOmFuZHJvaWQ9Imh0dHA6Ly9zY2hlbWFzLmFuZHJvaWQuY29tL2Fway9yZXMvYW5kcm9pZCIKLSAgICAgICAgYW5kcm9pZDp3aWR0aD0iMjRkcCIKLSAgICAgICAgYW5kcm9pZDpoZWlnaHQ9IjI0ZHAiCi0gICAgICAgIGFuZHJvaWQ6dmlld3BvcnRXaWR0aD0iMjQuMCIKLSAgICAgICAgYW5kcm9pZDp2aWV3cG9ydEhlaWdodD0iMjQuMCI+Ci0gICAgPHBhdGgKLSAgICAgICAgYW5kcm9pZDpwYXRoRGF0YT0iTTE2LjUsMTJjMCwtMS43NyAtMS4wMiwtMy4yOSAtMi41LC00LjAzdjIuMjFsMi40NSwyLjQ1YzAuMDMsLTAuMiAwLjA1LC0wLjQxIDAuMDUsLTAuNjN6TTE5LDEyYzAsMC45NCAtMC4yLDEuODIgLTAuNTQsMi42NGwxLjUxLDEuNTFDMjAuNjMsMTQuOTEgMjEsMTMuNSAyMSwxMmMwLC00LjI4IC0yLjk5LC03Ljg2IC03LC04Ljc3djIuMDZjMi44OSwwLjg2IDUsMy41NCA1LDYuNzF6TTQuMjcsM0wzLDQuMjcgNy43Myw5TDMsOXY2aDRsNSw1di02LjczbDQuMjUsNC4yNWMtMC42NywwLjUyIC0xLjQyLDAuOTMgLTIuMjUsMS4xOHYyLjA2YzEuMzgsLTAuMzEgMi42MywtMC45NSAzLjY5LC0xLjgxTDE5LjczLDIxIDIxLDE5LjczbC05LC05TDQuMjcsM3pNMTIsNEw5LjkxLDYuMDkgMTIsOC4xOEwxMiw0eiIKLSAgICAgICAgYW5kcm9pZDpmaWxsQ29sb3I9IiNGRkZGRkYiLz4KLTwvdmVjdG9yPgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvTWVkaWFDb21wb25lbnRzL3Jlcy9kcmF3YWJsZS9pY19wYXVzZV9jaXJjbGVfZmlsbGVkLnhtbCBiL3BhY2thZ2VzL01lZGlhQ29tcG9uZW50cy9yZXMvZHJhd2FibGUvaWNfcGF1c2VfY2lyY2xlX2ZpbGxlZC54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDczYmUyMjguLjAwMDAwMDAKLS0tIGEvcGFja2FnZXMvTWVkaWFDb21wb25lbnRzL3Jlcy9kcmF3YWJsZS9pY19wYXVzZV9jaXJjbGVfZmlsbGVkLnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDkgKzAsMCBAQAotPHZlY3RvciB4bWxuczphbmRyb2lkPSJodHRwOi8vc2NoZW1hcy5hbmRyb2lkLmNvbS9hcGsvcmVzL2FuZHJvaWQiCi0gICAgICAgIGFuZHJvaWQ6d2lkdGg9IjQwZHAiCi0gICAgICAgIGFuZHJvaWQ6aGVpZ2h0PSI0MGRwIgotICAgICAgICBhbmRyb2lkOnZpZXdwb3J0V2lkdGg9IjI0LjAiCi0gICAgICAgIGFuZHJvaWQ6dmlld3BvcnRIZWlnaHQ9IjI0LjAiPgotICAgIDxwYXRoCi0gICAgICAgIGFuZHJvaWQ6cGF0aERhdGE9Ik0xMiwyQzYuNDgsMiAyLDYuNDggMiwxMnM0LjQ4LDEwIDEwLDEwIDEwLC00LjQ4IDEwLC0xMFMxNy41MiwyIDEyLDJ6TTExLDE2TDksMTZMOSw4aDJ2OHpNMTUsMTZoLTJMMTMsOGgydjh6IgotICAgICAgICBhbmRyb2lkOmZpbGxDb2xvcj0iI0ZGRkZGRiIvPgotPC92ZWN0b3I+CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9NZWRpYUNvbXBvbmVudHMvcmVzL2RyYXdhYmxlL2ljX3BsYXlfY2lyY2xlX2ZpbGxlZC54bWwgYi9wYWNrYWdlcy9NZWRpYUNvbXBvbmVudHMvcmVzL2RyYXdhYmxlL2ljX3BsYXlfY2lyY2xlX2ZpbGxlZC54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDlkMzlkZWYuLjAwMDAwMDAKLS0tIGEvcGFja2FnZXMvTWVkaWFDb21wb25lbnRzL3Jlcy9kcmF3YWJsZS9pY19wbGF5X2NpcmNsZV9maWxsZWQueG1sCisrKyAvZGV2L251bGwKQEAgLTEsOSArMCwwIEBACi08dmVjdG9yIHhtbG5zOmFuZHJvaWQ9Imh0dHA6Ly9zY2hlbWFzLmFuZHJvaWQuY29tL2Fway9yZXMvYW5kcm9pZCIKLSAgICAgICAgYW5kcm9pZDp3aWR0aD0iNDBkcCIKLSAgICAgICAgYW5kcm9pZDpoZWlnaHQ9IjQwZHAiCi0gICAgICAgIGFuZHJvaWQ6dmlld3BvcnRXaWR0aD0iMjQuMCIKLSAgICAgICAgYW5kcm9pZDp2aWV3cG9ydEhlaWdodD0iMjQuMCI+Ci0gICAgPHBhdGgKLSAgICAgICAgYW5kcm9pZDpwYXRoRGF0YT0iTTEyLDJDNi40OCwyIDIsNi40OCAyLDEyczQuNDgsMTAgMTAsMTAgMTAsLTQuNDggMTAsLTEwUzE3LjUyLDIgMTIsMnpNMTAsMTYuNXYtOWw2LDQuNSAtNiw0LjV6IgotICAgICAgICBhbmRyb2lkOmZpbGxDb2xvcj0iI0ZGRkZGRiIvPgotPC92ZWN0b3I+CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9NZWRpYUNvbXBvbmVudHMvcmVzL2RyYXdhYmxlL2ljX3JlcGxheV9jaXJjbGVfZmlsbGVkLnhtbCBiL3BhY2thZ2VzL01lZGlhQ29tcG9uZW50cy9yZXMvZHJhd2FibGUvaWNfcmVwbGF5X2NpcmNsZV9maWxsZWQueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhNTZkNWQ5Li4wMDAwMDAwCi0tLSBhL3BhY2thZ2VzL01lZGlhQ29tcG9uZW50cy9yZXMvZHJhd2FibGUvaWNfcmVwbGF5X2NpcmNsZV9maWxsZWQueG1sCisrKyAvZGV2L251bGwKQEAgLTEsMTcgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KLTx2ZWN0b3IgeG1sbnM6YW5kcm9pZD0iaHR0cDovL3NjaGVtYXMuYW5kcm9pZC5jb20vYXBrL3Jlcy9hbmRyb2lkIgotICAgIGFuZHJvaWQ6d2lkdGg9IjQwZHAiCi0gICAgYW5kcm9pZDpoZWlnaHQ9IjQwZHAiCi0gICAgYW5kcm9pZDp2aWV3cG9ydFdpZHRoPSIyNCIKLSAgICBhbmRyb2lkOnZpZXdwb3J0SGVpZ2h0PSIyNCI+Ci0KLSAgICA8cGF0aAotICAgICAgICBhbmRyb2lkOnBhdGhEYXRhPSJNMCwwaDI0djI0SDBWMHoiIC8+Ci0gICAgPHBhdGgKLSAgICAgICAgYW5kcm9pZDpmaWxsQ29sb3I9IiNGRkZGRkYiCi0gICAgICAgIGFuZHJvaWQ6ZmlsbFR5cGU9ImV2ZW5PZGQiCi0gICAgICAgIGFuZHJvaWQ6cGF0aERhdGE9Ik0xMiwyQzYuNDgsMiwyLDYuNDgsMiwxMmMwLDUuNTIsNC40OCwxMCwxMCwxMGM1LjUyLDAsMTAtNC40OCwxMC0xMAotQzIyLDYuNDgsMTcuNTIsMiwxMiwyegotTTE4LDEyYzAsMy4zMS0yLjY5LDYtNiw2Yy0zLjMxLDAtNi0yLjY5LTYtNmgyYzAsMi4yMSwxLjc5LDQsNCw0czQtMS43OSw0LTRzLTEuNzktNC00LTR2M0w4LDdsNC00djMKLUMxNS4zMSw2LDE4LDguNjksMTgsMTJ6IiAvPgotPC92ZWN0b3I+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvTWVkaWFDb21wb25lbnRzL3Jlcy9kcmF3YWJsZS9pY19yZXdpbmRfMTAueG1sIGIvcGFja2FnZXMvTWVkaWFDb21wb25lbnRzL3Jlcy9kcmF3YWJsZS9pY19yZXdpbmRfMTAueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhZTU4NmI0Li4wMDAwMDAwCi0tLSBhL3BhY2thZ2VzL01lZGlhQ29tcG9uZW50cy9yZXMvZHJhd2FibGUvaWNfcmV3aW5kXzEwLnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDEyICswLDAgQEAKLTx2ZWN0b3IgeG1sbnM6YW5kcm9pZD0iaHR0cDovL3NjaGVtYXMuYW5kcm9pZC5jb20vYXBrL3Jlcy9hbmRyb2lkIgotICAgICAgICBhbmRyb2lkOndpZHRoPSI0MGRwIgotICAgICAgICBhbmRyb2lkOmhlaWdodD0iNDBkcCIKLSAgICAgICAgYW5kcm9pZDp2aWV3cG9ydFdpZHRoPSIyNC4wIgotICAgICAgICBhbmRyb2lkOnZpZXdwb3J0SGVpZ2h0PSIyNC4wIj4KLSAgICA8Z3JvdXA+Ci0gICAgICAgIDxjbGlwLXBhdGggYW5kcm9pZDpwYXRoRGF0YT0iTTAsMGgyNHYyNEgwVjB6IE0gMCwwIiAvPgotICAgIDxwYXRoCi0gICAgICAgIGFuZHJvaWQ6cGF0aERhdGE9Ik0xMiA1VjFMNyA2bDUgNVY3YzMuMyAwIDYgMi43IDYgNnMtMi43IDYsLTYgNiwtNiwtMi43LC02LC02SDRjMCA0LjQgMy42IDggOCA4czgsLTMuNiA4LC04LC0zLjYsLTgsLTgsLTh6bS0xLjEgMTFIMTB2LTMuM0w5IDEzdi0uN2wxLjgsLS42aC4xVjE2em00LjMsLTEuOGMwIC4zIDAgLjYsLS4xLjhsLS4zLjZzLS4zLjMsLS41LjMsLS40LjEsLS42LjEsLS40IDAsLS42LC0uMSwtLjMsLS4yLC0uNSwtLjMsLS4yLC0uMywtLjMsLS42LC0uMSwtLjUsLS4xLC0uOHYtLjdjMCwtLjMgMCwtLjYuMSwtLjhsLjMsLS42cy4zLC0uMy41LC0uMy40LC0uMS42LC0uMS40IDAgLjYuMWMuMi4xLjMuMi41LjNzLjIuMy4zLjYuMS41LjEuOHYuN3ptLS45LC0uOHYtLjVzLS4xLC0uMiwtLjEsLS4zLC0uMSwtLjEsLS4yLC0uMiwtLjIsLS4xLC0uMywtLjEsLS4yIDAsLS4zLjFsLS4yLjJzLS4xLjIsLS4xLjN2MnMuMS4yLjEuMy4xLjEuMi4yLjIuMS4zLjEuMiAwIC4zLC0uMWwuMiwtLjJzLjEsLS4yLjEsLS4zdi0xLjV6IgotICAgICAgICBhbmRyb2lkOmZpbGxDb2xvcj0iI0ZGRkZGRiIvPgotICAgIDwvZ3JvdXA+Ci08L3ZlY3Rvcj4KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL01lZGlhQ29tcG9uZW50cy9yZXMvZHJhd2FibGUvaWNfc2QueG1sIGIvcGFja2FnZXMvTWVkaWFDb21wb25lbnRzL3Jlcy9kcmF3YWJsZS9pY19zZC54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGRlY2I2ZDIuLjAwMDAwMDAKLS0tIGEvcGFja2FnZXMvTWVkaWFDb21wb25lbnRzL3Jlcy9kcmF3YWJsZS9pY19zZC54bWwKKysrIC9kZXYvbnVsbApAQCAtMSwxNyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ1dGYtOCI/PgotPHZlY3RvciB4bWxuczphbmRyb2lkPSJodHRwOi8vc2NoZW1hcy5hbmRyb2lkLmNvbS9hcGsvcmVzL2FuZHJvaWQiCi0gICAgYW5kcm9pZDp3aWR0aD0iMjRkcCIKLSAgICBhbmRyb2lkOmhlaWdodD0iMjRkcCIKLSAgICBhbmRyb2lkOnZpZXdwb3J0V2lkdGg9IjI0IgotICAgIGFuZHJvaWQ6dmlld3BvcnRIZWlnaHQ9IjI0Ij4KLQotICAgIDxwYXRoCi0gICAgICAgIGFuZHJvaWQ6cGF0aERhdGE9Ik0wLDBoMjR2MjRIMFYweiIgLz4KLSAgICA8cGF0aAotICAgICAgICBhbmRyb2lkOmZpbGxDb2xvcj0iI0ZGRkZGRiIKLSAgICAgICAgYW5kcm9pZDpwYXRoRGF0YT0iTTE5LDNINUMzLjg5LDMsMywzLjksMyw1djE0YzAsMS4xLDAuODksMiwyLDJoMTRjMS4xLDAsMi0wLjksMi0yVjVDMjEsMy45LDIwLjEsMywxOSwzegotTTEzLDloNGMwLjU1LDAsMSwwLjQ1LDEsMXY0IGMwLDAuNTUtMC40NSwxLTEsMWgtNFY5egotTTkuNSwxMy41di0xSDdjLTAuNTUsMC0xLTAuNDUtMS0xVjEwYzAtMC41NSwwLjQ1LTEsMS0xaDNjMC41NSwwLDEsMC40NSwxLDF2MUg5LjV2LTAuNWgtMnYxSDEwCi1jMC41NSwwLDEsMC40NSwxLDFWMTRjMCwwLjU1LTAuNDUsMS0xLDFIN2MtMC41NSwwLTEtMC40NS0xLTF2LTFoMS41djAuNUg5LjV6Ci1NMTQuNSwxMy41aDJ2LTNoLTJWMTMuNXoiIC8+Ci08L3ZlY3Rvcj4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9wYWNrYWdlcy9NZWRpYUNvbXBvbmVudHMvcmVzL2RyYXdhYmxlL2ljX3NldHRpbmdzLnhtbCBiL3BhY2thZ2VzL01lZGlhQ29tcG9uZW50cy9yZXMvZHJhd2FibGUvaWNfc2V0dGluZ3MueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhNTllY2MxLi4wMDAwMDAwCi0tLSBhL3BhY2thZ2VzL01lZGlhQ29tcG9uZW50cy9yZXMvZHJhd2FibGUvaWNfc2V0dGluZ3MueG1sCisrKyAvZGV2L251bGwKQEAgLTEsOSArMCwwIEBACi08dmVjdG9yIHhtbG5zOmFuZHJvaWQ9Imh0dHA6Ly9zY2hlbWFzLmFuZHJvaWQuY29tL2Fway9yZXMvYW5kcm9pZCIKLSAgICAgICAgYW5kcm9pZDp3aWR0aD0iMjRkcCIKLSAgICAgICAgYW5kcm9pZDpoZWlnaHQ9IjI0ZHAiCi0gICAgICAgIGFuZHJvaWQ6dmlld3BvcnRXaWR0aD0iMjQuMCIKLSAgICAgICAgYW5kcm9pZDp2aWV3cG9ydEhlaWdodD0iMjQuMCI+Ci0gICAgPHBhdGgKLSAgICAgICAgYW5kcm9pZDpwYXRoRGF0YT0iTTE5LjQzLDEyLjk4YzAuMDQsLTAuMzIgMC4wNywtMC42NCAwLjA3LC0wLjk4cy0wLjAzLC0wLjY2IC0wLjA3LC0wLjk4bDIuMTEsLTEuNjVjMC4xOSwtMC4xNSAwLjI0LC0wLjQyIDAuMTIsLTAuNjRsLTIsLTMuNDZjLTAuMTIsLTAuMjIgLTAuMzksLTAuMyAtMC42MSwtMC4yMmwtMi40OSwxYy0wLjUyLC0wLjQgLTEuMDgsLTAuNzMgLTEuNjksLTAuOThsLTAuMzgsLTIuNjVDMTQuNDYsMi4xOCAxNC4yNSwyIDE0LDJoLTRjLTAuMjUsMCAtMC40NiwwLjE4IC0wLjQ5LDAuNDJsLTAuMzgsMi42NWMtMC42MSwwLjI1IC0xLjE3LDAuNTkgLTEuNjksMC45OGwtMi40OSwtMWMtMC4yMywtMC4wOSAtMC40OSwwIC0wLjYxLDAuMjJsLTIsMy40NmMtMC4xMywwLjIyIC0wLjA3LDAuNDkgMC4xMiwwLjY0bDIuMTEsMS42NWMtMC4wNCwwLjMyIC0wLjA3LDAuNjUgLTAuMDcsMC45OHMwLjAzLDAuNjYgMC4wNywwLjk4bC0yLjExLDEuNjVjLTAuMTksMC4xNSAtMC4yNCwwLjQyIC0wLjEyLDAuNjRsMiwzLjQ2YzAuMTIsMC4yMiAwLjM5LDAuMyAwLjYxLDAuMjJsMi40OSwtMWMwLjUyLDAuNCAxLjA4LDAuNzMgMS42OSwwLjk4bDAuMzgsMi42NWMwLjAzLDAuMjQgMC4yNCwwLjQyIDAuNDksMC40Mmg0YzAuMjUsMCAwLjQ2LC0wLjE4IDAuNDksLTAuNDJsMC4zOCwtMi42NWMwLjYxLC0wLjI1IDEuMTcsLTAuNTkgMS42OSwtMC45OGwyLjQ5LDFjMC4yMywwLjA5IDAuNDksMCAwLjYxLC0wLjIybDIsLTMuNDZjMC4xMiwtMC4yMiAwLjA3LC0wLjQ5IC0wLjEyLC0wLjY0bC0yLjExLC0xLjY1ek0xMiwxNS41Yy0xLjkzLDAgLTMuNSwtMS41NyAtMy41LC0zLjVzMS41NywtMy41IDMuNSwtMy41IDMuNSwxLjU3IDMuNSwzLjUgLTEuNTcsMy41IC0zLjUsMy41eiIKLSAgICAgICAgYW5kcm9pZDpmaWxsQ29sb3I9IiNGRkZGRkYiLz4KLTwvdmVjdG9yPgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvTWVkaWFDb21wb25lbnRzL3Jlcy9kcmF3YWJsZS9pY19za2lwX25leHQueG1sIGIvcGFja2FnZXMvTWVkaWFDb21wb25lbnRzL3Jlcy9kcmF3YWJsZS9pY19za2lwX25leHQueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiMWYyODEyLi4wMDAwMDAwCi0tLSBhL3BhY2thZ2VzL01lZGlhQ29tcG9uZW50cy9yZXMvZHJhd2FibGUvaWNfc2tpcF9uZXh0LnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDkgKzAsMCBAQAotPHZlY3RvciB4bWxuczphbmRyb2lkPSJodHRwOi8vc2NoZW1hcy5hbmRyb2lkLmNvbS9hcGsvcmVzL2FuZHJvaWQiCi0gICAgICAgIGFuZHJvaWQ6d2lkdGg9IjQwZHAiCi0gICAgICAgIGFuZHJvaWQ6aGVpZ2h0PSI0MGRwIgotICAgICAgICBhbmRyb2lkOnZpZXdwb3J0V2lkdGg9IjI0LjAiCi0gICAgICAgIGFuZHJvaWQ6dmlld3BvcnRIZWlnaHQ9IjI0LjAiPgotICAgIDxwYXRoCi0gICAgICAgIGFuZHJvaWQ6cGF0aERhdGE9Ik02LDE4bDguNSwtNkw2LDZ2MTJ6TTE2LDZ2MTJoMlY2aC0yeiIKLSAgICAgICAgYW5kcm9pZDpmaWxsQ29sb3I9IiNGRkZGRkYiLz4KLTwvdmVjdG9yPgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvTWVkaWFDb21wb25lbnRzL3Jlcy9kcmF3YWJsZS9pY19za2lwX3ByZXZpb3VzLnhtbCBiL3BhY2thZ2VzL01lZGlhQ29tcG9uZW50cy9yZXMvZHJhd2FibGUvaWNfc2tpcF9wcmV2aW91cy54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDgxZGEzMTQuLjAwMDAwMDAKLS0tIGEvcGFja2FnZXMvTWVkaWFDb21wb25lbnRzL3Jlcy9kcmF3YWJsZS9pY19za2lwX3ByZXZpb3VzLnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDkgKzAsMCBAQAotPHZlY3RvciB4bWxuczphbmRyb2lkPSJodHRwOi8vc2NoZW1hcy5hbmRyb2lkLmNvbS9hcGsvcmVzL2FuZHJvaWQiCi0gICAgICAgIGFuZHJvaWQ6d2lkdGg9IjQwZHAiCi0gICAgICAgIGFuZHJvaWQ6aGVpZ2h0PSI0MGRwIgotICAgICAgICBhbmRyb2lkOnZpZXdwb3J0V2lkdGg9IjI0LjAiCi0gICAgICAgIGFuZHJvaWQ6dmlld3BvcnRIZWlnaHQ9IjI0LjAiPgotICAgIDxwYXRoCi0gICAgICAgIGFuZHJvaWQ6cGF0aERhdGE9Ik02LDZoMnYxMkw2LDE4ek05LjUsMTJsOC41LDZMMTgsNnoiCi0gICAgICAgIGFuZHJvaWQ6ZmlsbENvbG9yPSIjRkZGRkZGIi8+Ci08L3ZlY3Rvcj4KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL01lZGlhQ29tcG9uZW50cy9yZXMvZHJhd2FibGUvaWNfc3VidGl0bGVfb2ZmLnhtbCBiL3BhY2thZ2VzL01lZGlhQ29tcG9uZW50cy9yZXMvZHJhd2FibGUvaWNfc3VidGl0bGVfb2ZmLnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzBhNzI3YS4uMDAwMDAwMAotLS0gYS9wYWNrYWdlcy9NZWRpYUNvbXBvbmVudHMvcmVzL2RyYXdhYmxlL2ljX3N1YnRpdGxlX29mZi54bWwKKysrIC9kZXYvbnVsbApAQCAtMSwxOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ1dGYtOCI/PgotPHZlY3RvciB4bWxuczphbmRyb2lkPSJodHRwOi8vc2NoZW1hcy5hbmRyb2lkLmNvbS9hcGsvcmVzL2FuZHJvaWQiCi0gICAgYW5kcm9pZDp3aWR0aD0iMjRkcCIKLSAgICBhbmRyb2lkOmhlaWdodD0iMjRkcCIKLSAgICBhbmRyb2lkOnZpZXdwb3J0V2lkdGg9IjI0IgotICAgIGFuZHJvaWQ6dmlld3BvcnRIZWlnaHQ9IjI0Ij4KLQotICAgIDxwYXRoCi0gICAgICAgIGFuZHJvaWQ6cGF0aERhdGE9Ik0wLDBoMjR2MjRIMFYweiIgLz4KLSAgICA8cGF0aAotICAgICAgICBhbmRyb2lkOmZpbGxDb2xvcj0iI0ZGRkZGRiIKLSAgICAgICAgYW5kcm9pZDpwYXRoRGF0YT0iTTE5LjUsNS41djEzaC0xNXYtMTNIMTkuNXogTTE5LDRINUMzLjg5LDQsMyw0LjksMyw2djEyYzAsMS4xLDAuODksMiwyLDJoMTRjMS4xLDAsMi0wLjksMi0yVjZDMjEsNC45LDIwLjEsNCwxOSw0TDE5LDR6IiAvPgotICAgIDxwYXRoCi0gICAgICAgIGFuZHJvaWQ6ZmlsbENvbG9yPSIjRkZGRkZGIgotICAgICAgICBhbmRyb2lkOnBhdGhEYXRhPSJNMTEsMTFIOS41di0wLjVoLTJ2M2gyVjEzSDExdjFjMCwwLjU1LTAuNDUsMS0xLDFIN2MtMC41NSwwLTEtMC40NS0xLTF2LTRjMC0wLjU1LDAuNDUtMSwxLTFoM2MwLjU1LDAsMSwwLjQ1LDEsMVYxMXoiIC8+Ci0gICAgPHBhdGgKLSAgICAgICAgYW5kcm9pZDpmaWxsQ29sb3I9IiNGRkZGRkYiCi0gICAgICAgIGFuZHJvaWQ6cGF0aERhdGE9Ik0xOCwxMWgtMS41di0wLjVoLTJ2M2gyVjEzSDE4djFjMCwwLjU1LTAuNDUsMS0xLDFoLTNjLTAuNTUsMC0xLTAuNDUtMS0xdi00YzAtMC41NSwwLjQ1LTEsMS0xaDNjMC41NSwwLDEsMC40NSwxLDFWMTF6IiAvPgotPC92ZWN0b3I+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvTWVkaWFDb21wb25lbnRzL3Jlcy9kcmF3YWJsZS9pY19zdWJ0aXRsZV9vbi54bWwgYi9wYWNrYWdlcy9NZWRpYUNvbXBvbmVudHMvcmVzL2RyYXdhYmxlL2ljX3N1YnRpdGxlX29uLnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggN2M5MWMwNi4uMDAwMDAwMAotLS0gYS9wYWNrYWdlcy9NZWRpYUNvbXBvbmVudHMvcmVzL2RyYXdhYmxlL2ljX3N1YnRpdGxlX29uLnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDEzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9InV0Zi04Ij8+Ci08dmVjdG9yIHhtbG5zOmFuZHJvaWQ9Imh0dHA6Ly9zY2hlbWFzLmFuZHJvaWQuY29tL2Fway9yZXMvYW5kcm9pZCIKLSAgICBhbmRyb2lkOndpZHRoPSIyNGRwIgotICAgIGFuZHJvaWQ6aGVpZ2h0PSIyNGRwIgotICAgIGFuZHJvaWQ6dmlld3BvcnRXaWR0aD0iMjQiCi0gICAgYW5kcm9pZDp2aWV3cG9ydEhlaWdodD0iMjQiPgotCi0gICAgPHBhdGgKLSAgICAgICAgYW5kcm9pZDpwYXRoRGF0YT0iTTAgMGgyNHYyNEgweiIgLz4KLSAgICA8cGF0aAotICAgICAgICBhbmRyb2lkOmZpbGxDb2xvcj0iI0ZGRkZGRiIKLSAgICAgICAgYW5kcm9pZDpwYXRoRGF0YT0iTTE5IDRINWMtMS4xMSAwLTIgMC45LTIgMnYxMmMwIDEuMSAwLjg5IDIgMiAyaDE0YzEuMSAwIDItMC45IDItMlY2YzAtMS4xLTAuOS0yLTItMnptLTggN0g5LjV2LTAuNWgtMnYzaDJWMTNIMTF2MWMwIDAuNTUtMC40NSAxLTEgMUg3Yy0wLjU1IDAtMS0wLjQ1LTEtMXYtNGMwLTAuNTUgMC40NSAtMSAxLTFoM2MwLjU1IDAgMSAwLjQ1IDEgMXYxem03IDBoLTEuNXYtMC41aC0ydjNoMlYxM0gxOHYxYzAgMC41NS0wLjQ1IDEtMSAxaC0zYy0wLjU1IDAtMS0wLjQ1LTEtMXYtNGMwLTAuNTUgMC40NSAtMSAxLTFoM2MwLjU1IDAgMSAwLjQ1IDEgMXYxeiIgLz4KLTwvdmVjdG9yPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3BhY2thZ2VzL01lZGlhQ29tcG9uZW50cy9yZXMvZHJhd2FibGUvaWNfdW5tdXRlLnhtbCBiL3BhY2thZ2VzL01lZGlhQ29tcG9uZW50cy9yZXMvZHJhd2FibGUvaWNfdW5tdXRlLnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOWRmYjJiOS4uMDAwMDAwMAotLS0gYS9wYWNrYWdlcy9NZWRpYUNvbXBvbmVudHMvcmVzL2RyYXdhYmxlL2ljX3VubXV0ZS54bWwKKysrIC9kZXYvbnVsbApAQCAtMSw5ICswLDAgQEAKLTx2ZWN0b3IgeG1sbnM6YW5kcm9pZD0iaHR0cDovL3NjaGVtYXMuYW5kcm9pZC5jb20vYXBrL3Jlcy9hbmRyb2lkIgotICAgICAgICBhbmRyb2lkOndpZHRoPSIyNGRwIgotICAgICAgICBhbmRyb2lkOmhlaWdodD0iMjRkcCIKLSAgICAgICAgYW5kcm9pZDp2aWV3cG9ydFdpZHRoPSIyNC4wIgotICAgICAgICBhbmRyb2lkOnZpZXdwb3J0SGVpZ2h0PSIyNC4wIj4KLSAgICA8cGF0aAotICAgICAgICBhbmRyb2lkOnBhdGhEYXRhPSJNMyw5djZoNGw1LDVMMTIsNEw3LDlMMyw5ek0xNi41LDEyYzAsLTEuNzcgLTEuMDIsLTMuMjkgLTIuNSwtNC4wM3Y4LjA1YzEuNDgsLTAuNzMgMi41LC0yLjI1IDIuNSwtNC4wMnpNMTQsMy4yM3YyLjA2YzIuODksMC44NiA1LDMuNTQgNSw2Ljcxcy0yLjExLDUuODUgLTUsNi43MXYyLjA2YzQuMDEsLTAuOTEgNywtNC40OSA3LC04Ljc3cy0yLjk5LC03Ljg2IC03LC04Ljc3eiIKLSAgICAgICAgYW5kcm9pZDpmaWxsQ29sb3I9IiNGRkZGRkYiLz4KLTwvdmVjdG9yPgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvTWVkaWFDb21wb25lbnRzL3Jlcy9kcmF3YWJsZS9tcl9idXR0b25fY29ubmVjdGVkX2RhcmsueG1sIGIvcGFja2FnZXMvTWVkaWFDb21wb25lbnRzL3Jlcy9kcmF3YWJsZS9tcl9idXR0b25fY29ubmVjdGVkX2RhcmsueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxMTBmZjEzLi4wMDAwMDAwCi0tLSBhL3BhY2thZ2VzL01lZGlhQ29tcG9uZW50cy9yZXMvZHJhd2FibGUvbXJfYnV0dG9uX2Nvbm5lY3RlZF9kYXJrLnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDUxICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9InV0Zi04Ij8+Ci08IS0tIENvcHlyaWdodCAyMDE4IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKLQotICAgICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKLSAgICAgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgotICAgICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLQotICAgICAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotCi0gICAgIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKLSAgICAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKLSAgICAgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCi0gICAgIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKLSAgICAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCi0tLT4KLQotPGFuaW1hdGlvbi1saXN0Ci0gICAgICAgIHhtbG5zOmFuZHJvaWQ9Imh0dHA6Ly9zY2hlbWFzLmFuZHJvaWQuY29tL2Fway9yZXMvYW5kcm9pZCIKLSAgICAgICAgYW5kcm9pZDpvbmVzaG90PSJ0cnVlIj4KLSAgICA8aXRlbSBhbmRyb2lkOmRyYXdhYmxlPSJAZHJhd2FibGUvaWNfbXJfYnV0dG9uX2Nvbm5lY3RlZF8wMF9kYXJrIiBhbmRyb2lkOmR1cmF0aW9uPSI0MiIgLz4KLSAgICA8aXRlbSBhbmRyb2lkOmRyYXdhYmxlPSJAZHJhd2FibGUvaWNfbXJfYnV0dG9uX2Nvbm5lY3RlZF8wMV9kYXJrIiBhbmRyb2lkOmR1cmF0aW9uPSI0MiIgLz4KLSAgICA8aXRlbSBhbmRyb2lkOmRyYXdhYmxlPSJAZHJhd2FibGUvaWNfbXJfYnV0dG9uX2Nvbm5lY3RlZF8wMl9kYXJrIiBhbmRyb2lkOmR1cmF0aW9uPSI0MiIgLz4KLSAgICA8aXRlbSBhbmRyb2lkOmRyYXdhYmxlPSJAZHJhd2FibGUvaWNfbXJfYnV0dG9uX2Nvbm5lY3RlZF8wM19kYXJrIiBhbmRyb2lkOmR1cmF0aW9uPSI0MiIgLz4KLSAgICA8aXRlbSBhbmRyb2lkOmRyYXdhYmxlPSJAZHJhd2FibGUvaWNfbXJfYnV0dG9uX2Nvbm5lY3RlZF8wNF9kYXJrIiBhbmRyb2lkOmR1cmF0aW9uPSI0MiIgLz4KLSAgICA8aXRlbSBhbmRyb2lkOmRyYXdhYmxlPSJAZHJhd2FibGUvaWNfbXJfYnV0dG9uX2Nvbm5lY3RlZF8wNV9kYXJrIiBhbmRyb2lkOmR1cmF0aW9uPSI0MiIgLz4KLSAgICA8aXRlbSBhbmRyb2lkOmRyYXdhYmxlPSJAZHJhd2FibGUvaWNfbXJfYnV0dG9uX2Nvbm5lY3RlZF8wNl9kYXJrIiBhbmRyb2lkOmR1cmF0aW9uPSI0MiIgLz4KLSAgICA8aXRlbSBhbmRyb2lkOmRyYXdhYmxlPSJAZHJhd2FibGUvaWNfbXJfYnV0dG9uX2Nvbm5lY3RlZF8wN19kYXJrIiBhbmRyb2lkOmR1cmF0aW9uPSI0MiIgLz4KLSAgICA8aXRlbSBhbmRyb2lkOmRyYXdhYmxlPSJAZHJhd2FibGUvaWNfbXJfYnV0dG9uX2Nvbm5lY3RlZF8wOF9kYXJrIiBhbmRyb2lkOmR1cmF0aW9uPSI0MiIgLz4KLSAgICA8aXRlbSBhbmRyb2lkOmRyYXdhYmxlPSJAZHJhd2FibGUvaWNfbXJfYnV0dG9uX2Nvbm5lY3RlZF8wOV9kYXJrIiBhbmRyb2lkOmR1cmF0aW9uPSI0MiIgLz4KLSAgICA8aXRlbSBhbmRyb2lkOmRyYXdhYmxlPSJAZHJhd2FibGUvaWNfbXJfYnV0dG9uX2Nvbm5lY3RlZF8xMF9kYXJrIiBhbmRyb2lkOmR1cmF0aW9uPSI0MiIgLz4KLSAgICA8aXRlbSBhbmRyb2lkOmRyYXdhYmxlPSJAZHJhd2FibGUvaWNfbXJfYnV0dG9uX2Nvbm5lY3RlZF8xMV9kYXJrIiBhbmRyb2lkOmR1cmF0aW9uPSI0MiIgLz4KLSAgICA8aXRlbSBhbmRyb2lkOmRyYXdhYmxlPSJAZHJhd2FibGUvaWNfbXJfYnV0dG9uX2Nvbm5lY3RlZF8xMl9kYXJrIiBhbmRyb2lkOmR1cmF0aW9uPSI0MiIgLz4KLSAgICA8aXRlbSBhbmRyb2lkOmRyYXdhYmxlPSJAZHJhd2FibGUvaWNfbXJfYnV0dG9uX2Nvbm5lY3RlZF8xM19kYXJrIiBhbmRyb2lkOmR1cmF0aW9uPSI0MiIgLz4KLSAgICA8aXRlbSBhbmRyb2lkOmRyYXdhYmxlPSJAZHJhd2FibGUvaWNfbXJfYnV0dG9uX2Nvbm5lY3RlZF8xNF9kYXJrIiBhbmRyb2lkOmR1cmF0aW9uPSI0MiIgLz4KLSAgICA8aXRlbSBhbmRyb2lkOmRyYXdhYmxlPSJAZHJhd2FibGUvaWNfbXJfYnV0dG9uX2Nvbm5lY3RlZF8xNV9kYXJrIiBhbmRyb2lkOmR1cmF0aW9uPSI0MiIgLz4KLSAgICA8aXRlbSBhbmRyb2lkOmRyYXdhYmxlPSJAZHJhd2FibGUvaWNfbXJfYnV0dG9uX2Nvbm5lY3RlZF8xNl9kYXJrIiBhbmRyb2lkOmR1cmF0aW9uPSI0MiIgLz4KLSAgICA8aXRlbSBhbmRyb2lkOmRyYXdhYmxlPSJAZHJhd2FibGUvaWNfbXJfYnV0dG9uX2Nvbm5lY3RlZF8xN19kYXJrIiBhbmRyb2lkOmR1cmF0aW9uPSI0MiIgLz4KLSAgICA8aXRlbSBhbmRyb2lkOmRyYXdhYmxlPSJAZHJhd2FibGUvaWNfbXJfYnV0dG9uX2Nvbm5lY3RlZF8xOF9kYXJrIiBhbmRyb2lkOmR1cmF0aW9uPSI0MiIgLz4KLSAgICA8aXRlbSBhbmRyb2lkOmRyYXdhYmxlPSJAZHJhd2FibGUvaWNfbXJfYnV0dG9uX2Nvbm5lY3RlZF8xOV9kYXJrIiBhbmRyb2lkOmR1cmF0aW9uPSI0MiIgLz4KLSAgICA8aXRlbSBhbmRyb2lkOmRyYXdhYmxlPSJAZHJhd2FibGUvaWNfbXJfYnV0dG9uX2Nvbm5lY3RlZF8yMF9kYXJrIiBhbmRyb2lkOmR1cmF0aW9uPSI0MiIgLz4KLSAgICA8aXRlbSBhbmRyb2lkOmRyYXdhYmxlPSJAZHJhd2FibGUvaWNfbXJfYnV0dG9uX2Nvbm5lY3RlZF8yMV9kYXJrIiBhbmRyb2lkOmR1cmF0aW9uPSI0MiIgLz4KLSAgICA8aXRlbSBhbmRyb2lkOmRyYXdhYmxlPSJAZHJhd2FibGUvaWNfbXJfYnV0dG9uX2Nvbm5lY3RlZF8yMl9kYXJrIiBhbmRyb2lkOmR1cmF0aW9uPSI0MiIgLz4KLSAgICA8aXRlbSBhbmRyb2lkOmRyYXdhYmxlPSJAZHJhd2FibGUvaWNfbXJfYnV0dG9uX2Nvbm5lY3RlZF8yM19kYXJrIiBhbmRyb2lkOmR1cmF0aW9uPSI0MiIgLz4KLSAgICA8aXRlbSBhbmRyb2lkOmRyYXdhYmxlPSJAZHJhd2FibGUvaWNfbXJfYnV0dG9uX2Nvbm5lY3RlZF8yNF9kYXJrIiBhbmRyb2lkOmR1cmF0aW9uPSI0MiIgLz4KLSAgICA8aXRlbSBhbmRyb2lkOmRyYXdhYmxlPSJAZHJhd2FibGUvaWNfbXJfYnV0dG9uX2Nvbm5lY3RlZF8yNV9kYXJrIiBhbmRyb2lkOmR1cmF0aW9uPSI0MiIgLz4KLSAgICA8aXRlbSBhbmRyb2lkOmRyYXdhYmxlPSJAZHJhd2FibGUvaWNfbXJfYnV0dG9uX2Nvbm5lY3RlZF8yNl9kYXJrIiBhbmRyb2lkOmR1cmF0aW9uPSI0MiIgLz4KLSAgICA8aXRlbSBhbmRyb2lkOmRyYXdhYmxlPSJAZHJhd2FibGUvaWNfbXJfYnV0dG9uX2Nvbm5lY3RlZF8yN19kYXJrIiBhbmRyb2lkOmR1cmF0aW9uPSI0MiIgLz4KLSAgICA8aXRlbSBhbmRyb2lkOmRyYXdhYmxlPSJAZHJhd2FibGUvaWNfbXJfYnV0dG9uX2Nvbm5lY3RlZF8yOF9kYXJrIiBhbmRyb2lkOmR1cmF0aW9uPSI0MiIgLz4KLSAgICA8aXRlbSBhbmRyb2lkOmRyYXdhYmxlPSJAZHJhd2FibGUvaWNfbXJfYnV0dG9uX2Nvbm5lY3RlZF8yOV9kYXJrIiBhbmRyb2lkOmR1cmF0aW9uPSI0MiIgLz4KLSAgICA8aXRlbSBhbmRyb2lkOmRyYXdhYmxlPSJAZHJhd2FibGUvaWNfbXJfYnV0dG9uX2Nvbm5lY3RlZF8zMF9kYXJrIiBhbmRyb2lkOmR1cmF0aW9uPSI0MiIgLz4KLTwvYW5pbWF0aW9uLWxpc3Q+CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9NZWRpYUNvbXBvbmVudHMvcmVzL2RyYXdhYmxlL21yX2J1dHRvbl9jb25uZWN0ZWRfbGlnaHQueG1sIGIvcGFja2FnZXMvTWVkaWFDb21wb25lbnRzL3Jlcy9kcmF3YWJsZS9tcl9idXR0b25fY29ubmVjdGVkX2xpZ2h0LnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYmNmYzdmZS4uMDAwMDAwMAotLS0gYS9wYWNrYWdlcy9NZWRpYUNvbXBvbmVudHMvcmVzL2RyYXdhYmxlL21yX2J1dHRvbl9jb25uZWN0ZWRfbGlnaHQueG1sCisrKyAvZGV2L251bGwKQEAgLTEsNTEgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KLTwhLS0gQ29weXJpZ2h0IDIwMTggVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAotCi0gICAgIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwotICAgICB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCi0gICAgIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotCi0gICAgICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0KLSAgICAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQotICAgICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAotICAgICBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KLSAgICAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAotICAgICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KLS0tPgotCi08YW5pbWF0aW9uLWxpc3QKLSAgICAgICAgeG1sbnM6YW5kcm9pZD0iaHR0cDovL3NjaGVtYXMuYW5kcm9pZC5jb20vYXBrL3Jlcy9hbmRyb2lkIgotICAgICAgICBhbmRyb2lkOm9uZXNob3Q9InRydWUiPgotICAgIDxpdGVtIGFuZHJvaWQ6ZHJhd2FibGU9IkBkcmF3YWJsZS9pY19tcl9idXR0b25fY29ubmVjdGVkXzAwX2xpZ2h0IiBhbmRyb2lkOmR1cmF0aW9uPSI0MiIgLz4KLSAgICA8aXRlbSBhbmRyb2lkOmRyYXdhYmxlPSJAZHJhd2FibGUvaWNfbXJfYnV0dG9uX2Nvbm5lY3RlZF8wMV9saWdodCIgYW5kcm9pZDpkdXJhdGlvbj0iNDIiIC8+Ci0gICAgPGl0ZW0gYW5kcm9pZDpkcmF3YWJsZT0iQGRyYXdhYmxlL2ljX21yX2J1dHRvbl9jb25uZWN0ZWRfMDJfbGlnaHQiIGFuZHJvaWQ6ZHVyYXRpb249IjQyIiAvPgotICAgIDxpdGVtIGFuZHJvaWQ6ZHJhd2FibGU9IkBkcmF3YWJsZS9pY19tcl9idXR0b25fY29ubmVjdGVkXzAzX2xpZ2h0IiBhbmRyb2lkOmR1cmF0aW9uPSI0MiIgLz4KLSAgICA8aXRlbSBhbmRyb2lkOmRyYXdhYmxlPSJAZHJhd2FibGUvaWNfbXJfYnV0dG9uX2Nvbm5lY3RlZF8wNF9saWdodCIgYW5kcm9pZDpkdXJhdGlvbj0iNDIiIC8+Ci0gICAgPGl0ZW0gYW5kcm9pZDpkcmF3YWJsZT0iQGRyYXdhYmxlL2ljX21yX2J1dHRvbl9jb25uZWN0ZWRfMDVfbGlnaHQiIGFuZHJvaWQ6ZHVyYXRpb249IjQyIiAvPgotICAgIDxpdGVtIGFuZHJvaWQ6ZHJhd2FibGU9IkBkcmF3YWJsZS9pY19tcl9idXR0b25fY29ubmVjdGVkXzA2X2xpZ2h0IiBhbmRyb2lkOmR1cmF0aW9uPSI0MiIgLz4KLSAgICA8aXRlbSBhbmRyb2lkOmRyYXdhYmxlPSJAZHJhd2FibGUvaWNfbXJfYnV0dG9uX2Nvbm5lY3RlZF8wN19saWdodCIgYW5kcm9pZDpkdXJhdGlvbj0iNDIiIC8+Ci0gICAgPGl0ZW0gYW5kcm9pZDpkcmF3YWJsZT0iQGRyYXdhYmxlL2ljX21yX2J1dHRvbl9jb25uZWN0ZWRfMDhfbGlnaHQiIGFuZHJvaWQ6ZHVyYXRpb249IjQyIiAvPgotICAgIDxpdGVtIGFuZHJvaWQ6ZHJhd2FibGU9IkBkcmF3YWJsZS9pY19tcl9idXR0b25fY29ubmVjdGVkXzA5X2xpZ2h0IiBhbmRyb2lkOmR1cmF0aW9uPSI0MiIgLz4KLSAgICA8aXRlbSBhbmRyb2lkOmRyYXdhYmxlPSJAZHJhd2FibGUvaWNfbXJfYnV0dG9uX2Nvbm5lY3RlZF8xMF9saWdodCIgYW5kcm9pZDpkdXJhdGlvbj0iNDIiIC8+Ci0gICAgPGl0ZW0gYW5kcm9pZDpkcmF3YWJsZT0iQGRyYXdhYmxlL2ljX21yX2J1dHRvbl9jb25uZWN0ZWRfMTFfbGlnaHQiIGFuZHJvaWQ6ZHVyYXRpb249IjQyIiAvPgotICAgIDxpdGVtIGFuZHJvaWQ6ZHJhd2FibGU9IkBkcmF3YWJsZS9pY19tcl9idXR0b25fY29ubmVjdGVkXzEyX2xpZ2h0IiBhbmRyb2lkOmR1cmF0aW9uPSI0MiIgLz4KLSAgICA8aXRlbSBhbmRyb2lkOmRyYXdhYmxlPSJAZHJhd2FibGUvaWNfbXJfYnV0dG9uX2Nvbm5lY3RlZF8xM19saWdodCIgYW5kcm9pZDpkdXJhdGlvbj0iNDIiIC8+Ci0gICAgPGl0ZW0gYW5kcm9pZDpkcmF3YWJsZT0iQGRyYXdhYmxlL2ljX21yX2J1dHRvbl9jb25uZWN0ZWRfMTRfbGlnaHQiIGFuZHJvaWQ6ZHVyYXRpb249IjQyIiAvPgotICAgIDxpdGVtIGFuZHJvaWQ6ZHJhd2FibGU9IkBkcmF3YWJsZS9pY19tcl9idXR0b25fY29ubmVjdGVkXzE1X2xpZ2h0IiBhbmRyb2lkOmR1cmF0aW9uPSI0MiIgLz4KLSAgICA8aXRlbSBhbmRyb2lkOmRyYXdhYmxlPSJAZHJhd2FibGUvaWNfbXJfYnV0dG9uX2Nvbm5lY3RlZF8xNl9saWdodCIgYW5kcm9pZDpkdXJhdGlvbj0iNDIiIC8+Ci0gICAgPGl0ZW0gYW5kcm9pZDpkcmF3YWJsZT0iQGRyYXdhYmxlL2ljX21yX2J1dHRvbl9jb25uZWN0ZWRfMTdfbGlnaHQiIGFuZHJvaWQ6ZHVyYXRpb249IjQyIiAvPgotICAgIDxpdGVtIGFuZHJvaWQ6ZHJhd2FibGU9IkBkcmF3YWJsZS9pY19tcl9idXR0b25fY29ubmVjdGVkXzE4X2xpZ2h0IiBhbmRyb2lkOmR1cmF0aW9uPSI0MiIgLz4KLSAgICA8aXRlbSBhbmRyb2lkOmRyYXdhYmxlPSJAZHJhd2FibGUvaWNfbXJfYnV0dG9uX2Nvbm5lY3RlZF8xOV9saWdodCIgYW5kcm9pZDpkdXJhdGlvbj0iNDIiIC8+Ci0gICAgPGl0ZW0gYW5kcm9pZDpkcmF3YWJsZT0iQGRyYXdhYmxlL2ljX21yX2J1dHRvbl9jb25uZWN0ZWRfMjBfbGlnaHQiIGFuZHJvaWQ6ZHVyYXRpb249IjQyIiAvPgotICAgIDxpdGVtIGFuZHJvaWQ6ZHJhd2FibGU9IkBkcmF3YWJsZS9pY19tcl9idXR0b25fY29ubmVjdGVkXzIxX2xpZ2h0IiBhbmRyb2lkOmR1cmF0aW9uPSI0MiIgLz4KLSAgICA8aXRlbSBhbmRyb2lkOmRyYXdhYmxlPSJAZHJhd2FibGUvaWNfbXJfYnV0dG9uX2Nvbm5lY3RlZF8yMl9saWdodCIgYW5kcm9pZDpkdXJhdGlvbj0iNDIiIC8+Ci0gICAgPGl0ZW0gYW5kcm9pZDpkcmF3YWJsZT0iQGRyYXdhYmxlL2ljX21yX2J1dHRvbl9jb25uZWN0ZWRfMjNfbGlnaHQiIGFuZHJvaWQ6ZHVyYXRpb249IjQyIiAvPgotICAgIDxpdGVtIGFuZHJvaWQ6ZHJhd2FibGU9IkBkcmF3YWJsZS9pY19tcl9idXR0b25fY29ubmVjdGVkXzI0X2xpZ2h0IiBhbmRyb2lkOmR1cmF0aW9uPSI0MiIgLz4KLSAgICA8aXRlbSBhbmRyb2lkOmRyYXdhYmxlPSJAZHJhd2FibGUvaWNfbXJfYnV0dG9uX2Nvbm5lY3RlZF8yNV9saWdodCIgYW5kcm9pZDpkdXJhdGlvbj0iNDIiIC8+Ci0gICAgPGl0ZW0gYW5kcm9pZDpkcmF3YWJsZT0iQGRyYXdhYmxlL2ljX21yX2J1dHRvbl9jb25uZWN0ZWRfMjZfbGlnaHQiIGFuZHJvaWQ6ZHVyYXRpb249IjQyIiAvPgotICAgIDxpdGVtIGFuZHJvaWQ6ZHJhd2FibGU9IkBkcmF3YWJsZS9pY19tcl9idXR0b25fY29ubmVjdGVkXzI3X2xpZ2h0IiBhbmRyb2lkOmR1cmF0aW9uPSI0MiIgLz4KLSAgICA8aXRlbSBhbmRyb2lkOmRyYXdhYmxlPSJAZHJhd2FibGUvaWNfbXJfYnV0dG9uX2Nvbm5lY3RlZF8yOF9saWdodCIgYW5kcm9pZDpkdXJhdGlvbj0iNDIiIC8+Ci0gICAgPGl0ZW0gYW5kcm9pZDpkcmF3YWJsZT0iQGRyYXdhYmxlL2ljX21yX2J1dHRvbl9jb25uZWN0ZWRfMjlfbGlnaHQiIGFuZHJvaWQ6ZHVyYXRpb249IjQyIiAvPgotICAgIDxpdGVtIGFuZHJvaWQ6ZHJhd2FibGU9IkBkcmF3YWJsZS9pY19tcl9idXR0b25fY29ubmVjdGVkXzMwX2xpZ2h0IiBhbmRyb2lkOmR1cmF0aW9uPSI0MiIgLz4KLTwvYW5pbWF0aW9uLWxpc3Q+CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9NZWRpYUNvbXBvbmVudHMvcmVzL2RyYXdhYmxlL21yX2J1dHRvbl9jb25uZWN0aW5nX2RhcmsueG1sIGIvcGFja2FnZXMvTWVkaWFDb21wb25lbnRzL3Jlcy9kcmF3YWJsZS9tcl9idXR0b25fY29ubmVjdGluZ19kYXJrLnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTVhZjdiMy4uMDAwMDAwMAotLS0gYS9wYWNrYWdlcy9NZWRpYUNvbXBvbmVudHMvcmVzL2RyYXdhYmxlL21yX2J1dHRvbl9jb25uZWN0aW5nX2RhcmsueG1sCisrKyAvZGV2L251bGwKQEAgLTEsNTEgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KLTwhLS0gQ29weXJpZ2h0IDIwMTggVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAotCi0gICAgIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwotICAgICB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCi0gICAgIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotCi0gICAgICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0KLSAgICAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQotICAgICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAotICAgICBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KLSAgICAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAotICAgICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KLS0tPgotCi08YW5pbWF0aW9uLWxpc3QKLSAgICAgICAgeG1sbnM6YW5kcm9pZD0iaHR0cDovL3NjaGVtYXMuYW5kcm9pZC5jb20vYXBrL3Jlcy9hbmRyb2lkIgotICAgICAgICBhbmRyb2lkOm9uZXNob3Q9ImZhbHNlIj4KLSAgICA8aXRlbSBhbmRyb2lkOmRyYXdhYmxlPSJAZHJhd2FibGUvaWNfbXJfYnV0dG9uX2Nvbm5lY3RpbmdfMDBfZGFyayIgYW5kcm9pZDpkdXJhdGlvbj0iNDIiIC8+Ci0gICAgPGl0ZW0gYW5kcm9pZDpkcmF3YWJsZT0iQGRyYXdhYmxlL2ljX21yX2J1dHRvbl9jb25uZWN0aW5nXzAxX2RhcmsiIGFuZHJvaWQ6ZHVyYXRpb249IjQyIiAvPgotICAgIDxpdGVtIGFuZHJvaWQ6ZHJhd2FibGU9IkBkcmF3YWJsZS9pY19tcl9idXR0b25fY29ubmVjdGluZ18wMl9kYXJrIiBhbmRyb2lkOmR1cmF0aW9uPSI0MiIgLz4KLSAgICA8aXRlbSBhbmRyb2lkOmRyYXdhYmxlPSJAZHJhd2FibGUvaWNfbXJfYnV0dG9uX2Nvbm5lY3RpbmdfMDNfZGFyayIgYW5kcm9pZDpkdXJhdGlvbj0iNDIiIC8+Ci0gICAgPGl0ZW0gYW5kcm9pZDpkcmF3YWJsZT0iQGRyYXdhYmxlL2ljX21yX2J1dHRvbl9jb25uZWN0aW5nXzA0X2RhcmsiIGFuZHJvaWQ6ZHVyYXRpb249IjQyIiAvPgotICAgIDxpdGVtIGFuZHJvaWQ6ZHJhd2FibGU9IkBkcmF3YWJsZS9pY19tcl9idXR0b25fY29ubmVjdGluZ18wNV9kYXJrIiBhbmRyb2lkOmR1cmF0aW9uPSI0MiIgLz4KLSAgICA8aXRlbSBhbmRyb2lkOmRyYXdhYmxlPSJAZHJhd2FibGUvaWNfbXJfYnV0dG9uX2Nvbm5lY3RpbmdfMDZfZGFyayIgYW5kcm9pZDpkdXJhdGlvbj0iNDIiIC8+Ci0gICAgPGl0ZW0gYW5kcm9pZDpkcmF3YWJsZT0iQGRyYXdhYmxlL2ljX21yX2J1dHRvbl9jb25uZWN0aW5nXzA3X2RhcmsiIGFuZHJvaWQ6ZHVyYXRpb249IjQyIiAvPgotICAgIDxpdGVtIGFuZHJvaWQ6ZHJhd2FibGU9IkBkcmF3YWJsZS9pY19tcl9idXR0b25fY29ubmVjdGluZ18wOF9kYXJrIiBhbmRyb2lkOmR1cmF0aW9uPSI0MiIgLz4KLSAgICA8aXRlbSBhbmRyb2lkOmRyYXdhYmxlPSJAZHJhd2FibGUvaWNfbXJfYnV0dG9uX2Nvbm5lY3RpbmdfMDlfZGFyayIgYW5kcm9pZDpkdXJhdGlvbj0iNDIiIC8+Ci0gICAgPGl0ZW0gYW5kcm9pZDpkcmF3YWJsZT0iQGRyYXdhYmxlL2ljX21yX2J1dHRvbl9jb25uZWN0aW5nXzEwX2RhcmsiIGFuZHJvaWQ6ZHVyYXRpb249IjQyIiAvPgotICAgIDxpdGVtIGFuZHJvaWQ6ZHJhd2FibGU9IkBkcmF3YWJsZS9pY19tcl9idXR0b25fY29ubmVjdGluZ18xMV9kYXJrIiBhbmRyb2lkOmR1cmF0aW9uPSI0MiIgLz4KLSAgICA8aXRlbSBhbmRyb2lkOmRyYXdhYmxlPSJAZHJhd2FibGUvaWNfbXJfYnV0dG9uX2Nvbm5lY3RpbmdfMTJfZGFyayIgYW5kcm9pZDpkdXJhdGlvbj0iNDIiIC8+Ci0gICAgPGl0ZW0gYW5kcm9pZDpkcmF3YWJsZT0iQGRyYXdhYmxlL2ljX21yX2J1dHRvbl9jb25uZWN0aW5nXzEzX2RhcmsiIGFuZHJvaWQ6ZHVyYXRpb249IjQyIiAvPgotICAgIDxpdGVtIGFuZHJvaWQ6ZHJhd2FibGU9IkBkcmF3YWJsZS9pY19tcl9idXR0b25fY29ubmVjdGluZ18xNF9kYXJrIiBhbmRyb2lkOmR1cmF0aW9uPSI0MiIgLz4KLSAgICA8aXRlbSBhbmRyb2lkOmRyYXdhYmxlPSJAZHJhd2FibGUvaWNfbXJfYnV0dG9uX2Nvbm5lY3RpbmdfMTVfZGFyayIgYW5kcm9pZDpkdXJhdGlvbj0iNDIiIC8+Ci0gICAgPGl0ZW0gYW5kcm9pZDpkcmF3YWJsZT0iQGRyYXdhYmxlL2ljX21yX2J1dHRvbl9jb25uZWN0aW5nXzE2X2RhcmsiIGFuZHJvaWQ6ZHVyYXRpb249IjQyIiAvPgotICAgIDxpdGVtIGFuZHJvaWQ6ZHJhd2FibGU9IkBkcmF3YWJsZS9pY19tcl9idXR0b25fY29ubmVjdGluZ18xN19kYXJrIiBhbmRyb2lkOmR1cmF0aW9uPSI0MiIgLz4KLSAgICA8aXRlbSBhbmRyb2lkOmRyYXdhYmxlPSJAZHJhd2FibGUvaWNfbXJfYnV0dG9uX2Nvbm5lY3RpbmdfMThfZGFyayIgYW5kcm9pZDpkdXJhdGlvbj0iNDIiIC8+Ci0gICAgPGl0ZW0gYW5kcm9pZDpkcmF3YWJsZT0iQGRyYXdhYmxlL2ljX21yX2J1dHRvbl9jb25uZWN0aW5nXzE5X2RhcmsiIGFuZHJvaWQ6ZHVyYXRpb249IjQyIiAvPgotICAgIDxpdGVtIGFuZHJvaWQ6ZHJhd2FibGU9IkBkcmF3YWJsZS9pY19tcl9idXR0b25fY29ubmVjdGluZ18yMF9kYXJrIiBhbmRyb2lkOmR1cmF0aW9uPSI0MiIgLz4KLSAgICA8aXRlbSBhbmRyb2lkOmRyYXdhYmxlPSJAZHJhd2FibGUvaWNfbXJfYnV0dG9uX2Nvbm5lY3RpbmdfMjFfZGFyayIgYW5kcm9pZDpkdXJhdGlvbj0iNDIiIC8+Ci0gICAgPGl0ZW0gYW5kcm9pZDpkcmF3YWJsZT0iQGRyYXdhYmxlL2ljX21yX2J1dHRvbl9jb25uZWN0aW5nXzIyX2RhcmsiIGFuZHJvaWQ6ZHVyYXRpb249IjQyIiAvPgotICAgIDxpdGVtIGFuZHJvaWQ6ZHJhd2FibGU9IkBkcmF3YWJsZS9pY19tcl9idXR0b25fY29ubmVjdGluZ18yM19kYXJrIiBhbmRyb2lkOmR1cmF0aW9uPSI0MiIgLz4KLSAgICA8aXRlbSBhbmRyb2lkOmRyYXdhYmxlPSJAZHJhd2FibGUvaWNfbXJfYnV0dG9uX2Nvbm5lY3RpbmdfMjRfZGFyayIgYW5kcm9pZDpkdXJhdGlvbj0iNDIiIC8+Ci0gICAgPGl0ZW0gYW5kcm9pZDpkcmF3YWJsZT0iQGRyYXdhYmxlL2ljX21yX2J1dHRvbl9jb25uZWN0aW5nXzI1X2RhcmsiIGFuZHJvaWQ6ZHVyYXRpb249IjQyIiAvPgotICAgIDxpdGVtIGFuZHJvaWQ6ZHJhd2FibGU9IkBkcmF3YWJsZS9pY19tcl9idXR0b25fY29ubmVjdGluZ18yNl9kYXJrIiBhbmRyb2lkOmR1cmF0aW9uPSI0MiIgLz4KLSAgICA8aXRlbSBhbmRyb2lkOmRyYXdhYmxlPSJAZHJhd2FibGUvaWNfbXJfYnV0dG9uX2Nvbm5lY3RpbmdfMjdfZGFyayIgYW5kcm9pZDpkdXJhdGlvbj0iNDIiIC8+Ci0gICAgPGl0ZW0gYW5kcm9pZDpkcmF3YWJsZT0iQGRyYXdhYmxlL2ljX21yX2J1dHRvbl9jb25uZWN0aW5nXzI4X2RhcmsiIGFuZHJvaWQ6ZHVyYXRpb249IjQyIiAvPgotICAgIDxpdGVtIGFuZHJvaWQ6ZHJhd2FibGU9IkBkcmF3YWJsZS9pY19tcl9idXR0b25fY29ubmVjdGluZ18yOV9kYXJrIiBhbmRyb2lkOmR1cmF0aW9uPSI0MiIgLz4KLSAgICA8aXRlbSBhbmRyb2lkOmRyYXdhYmxlPSJAZHJhd2FibGUvaWNfbXJfYnV0dG9uX2Nvbm5lY3RpbmdfMzBfZGFyayIgYW5kcm9pZDpkdXJhdGlvbj0iNDIiIC8+Ci08L2FuaW1hdGlvbi1saXN0PgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvTWVkaWFDb21wb25lbnRzL3Jlcy9kcmF3YWJsZS9tcl9idXR0b25fY29ubmVjdGluZ19saWdodC54bWwgYi9wYWNrYWdlcy9NZWRpYUNvbXBvbmVudHMvcmVzL2RyYXdhYmxlL21yX2J1dHRvbl9jb25uZWN0aW5nX2xpZ2h0LnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTNiNDE3MC4uMDAwMDAwMAotLS0gYS9wYWNrYWdlcy9NZWRpYUNvbXBvbmVudHMvcmVzL2RyYXdhYmxlL21yX2J1dHRvbl9jb25uZWN0aW5nX2xpZ2h0LnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDUxICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9InV0Zi04Ij8+Ci08IS0tIENvcHlyaWdodCAyMDE4IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKLQotICAgICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKLSAgICAgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgotICAgICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLQotICAgICAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotCi0gICAgIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKLSAgICAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKLSAgICAgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCi0gICAgIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKLSAgICAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCi0tLT4KLQotPGFuaW1hdGlvbi1saXN0Ci0gICAgICAgIHhtbG5zOmFuZHJvaWQ9Imh0dHA6Ly9zY2hlbWFzLmFuZHJvaWQuY29tL2Fway9yZXMvYW5kcm9pZCIKLSAgICAgICAgYW5kcm9pZDpvbmVzaG90PSJmYWxzZSI+Ci0gICAgPGl0ZW0gYW5kcm9pZDpkcmF3YWJsZT0iQGRyYXdhYmxlL2ljX21yX2J1dHRvbl9jb25uZWN0aW5nXzAwX2xpZ2h0IiBhbmRyb2lkOmR1cmF0aW9uPSI0MiIgLz4KLSAgICA8aXRlbSBhbmRyb2lkOmRyYXdhYmxlPSJAZHJhd2FibGUvaWNfbXJfYnV0dG9uX2Nvbm5lY3RpbmdfMDFfbGlnaHQiIGFuZHJvaWQ6ZHVyYXRpb249IjQyIiAvPgotICAgIDxpdGVtIGFuZHJvaWQ6ZHJhd2FibGU9IkBkcmF3YWJsZS9pY19tcl9idXR0b25fY29ubmVjdGluZ18wMl9saWdodCIgYW5kcm9pZDpkdXJhdGlvbj0iNDIiIC8+Ci0gICAgPGl0ZW0gYW5kcm9pZDpkcmF3YWJsZT0iQGRyYXdhYmxlL2ljX21yX2J1dHRvbl9jb25uZWN0aW5nXzAzX2xpZ2h0IiBhbmRyb2lkOmR1cmF0aW9uPSI0MiIgLz4KLSAgICA8aXRlbSBhbmRyb2lkOmRyYXdhYmxlPSJAZHJhd2FibGUvaWNfbXJfYnV0dG9uX2Nvbm5lY3RpbmdfMDRfbGlnaHQiIGFuZHJvaWQ6ZHVyYXRpb249IjQyIiAvPgotICAgIDxpdGVtIGFuZHJvaWQ6ZHJhd2FibGU9IkBkcmF3YWJsZS9pY19tcl9idXR0b25fY29ubmVjdGluZ18wNV9saWdodCIgYW5kcm9pZDpkdXJhdGlvbj0iNDIiIC8+Ci0gICAgPGl0ZW0gYW5kcm9pZDpkcmF3YWJsZT0iQGRyYXdhYmxlL2ljX21yX2J1dHRvbl9jb25uZWN0aW5nXzA2X2xpZ2h0IiBhbmRyb2lkOmR1cmF0aW9uPSI0MiIgLz4KLSAgICA8aXRlbSBhbmRyb2lkOmRyYXdhYmxlPSJAZHJhd2FibGUvaWNfbXJfYnV0dG9uX2Nvbm5lY3RpbmdfMDdfbGlnaHQiIGFuZHJvaWQ6ZHVyYXRpb249IjQyIiAvPgotICAgIDxpdGVtIGFuZHJvaWQ6ZHJhd2FibGU9IkBkcmF3YWJsZS9pY19tcl9idXR0b25fY29ubmVjdGluZ18wOF9saWdodCIgYW5kcm9pZDpkdXJhdGlvbj0iNDIiIC8+Ci0gICAgPGl0ZW0gYW5kcm9pZDpkcmF3YWJsZT0iQGRyYXdhYmxlL2ljX21yX2J1dHRvbl9jb25uZWN0aW5nXzA5X2xpZ2h0IiBhbmRyb2lkOmR1cmF0aW9uPSI0MiIgLz4KLSAgICA8aXRlbSBhbmRyb2lkOmRyYXdhYmxlPSJAZHJhd2FibGUvaWNfbXJfYnV0dG9uX2Nvbm5lY3RpbmdfMTBfbGlnaHQiIGFuZHJvaWQ6ZHVyYXRpb249IjQyIiAvPgotICAgIDxpdGVtIGFuZHJvaWQ6ZHJhd2FibGU9IkBkcmF3YWJsZS9pY19tcl9idXR0b25fY29ubmVjdGluZ18xMV9saWdodCIgYW5kcm9pZDpkdXJhdGlvbj0iNDIiIC8+Ci0gICAgPGl0ZW0gYW5kcm9pZDpkcmF3YWJsZT0iQGRyYXdhYmxlL2ljX21yX2J1dHRvbl9jb25uZWN0aW5nXzEyX2xpZ2h0IiBhbmRyb2lkOmR1cmF0aW9uPSI0MiIgLz4KLSAgICA8aXRlbSBhbmRyb2lkOmRyYXdhYmxlPSJAZHJhd2FibGUvaWNfbXJfYnV0dG9uX2Nvbm5lY3RpbmdfMTNfbGlnaHQiIGFuZHJvaWQ6ZHVyYXRpb249IjQyIiAvPgotICAgIDxpdGVtIGFuZHJvaWQ6ZHJhd2FibGU9IkBkcmF3YWJsZS9pY19tcl9idXR0b25fY29ubmVjdGluZ18xNF9saWdodCIgYW5kcm9pZDpkdXJhdGlvbj0iNDIiIC8+Ci0gICAgPGl0ZW0gYW5kcm9pZDpkcmF3YWJsZT0iQGRyYXdhYmxlL2ljX21yX2J1dHRvbl9jb25uZWN0aW5nXzE1X2xpZ2h0IiBhbmRyb2lkOmR1cmF0aW9uPSI0MiIgLz4KLSAgICA8aXRlbSBhbmRyb2lkOmRyYXdhYmxlPSJAZHJhd2FibGUvaWNfbXJfYnV0dG9uX2Nvbm5lY3RpbmdfMTZfbGlnaHQiIGFuZHJvaWQ6ZHVyYXRpb249IjQyIiAvPgotICAgIDxpdGVtIGFuZHJvaWQ6ZHJhd2FibGU9IkBkcmF3YWJsZS9pY19tcl9idXR0b25fY29ubmVjdGluZ18xN19saWdodCIgYW5kcm9pZDpkdXJhdGlvbj0iNDIiIC8+Ci0gICAgPGl0ZW0gYW5kcm9pZDpkcmF3YWJsZT0iQGRyYXdhYmxlL2ljX21yX2J1dHRvbl9jb25uZWN0aW5nXzE4X2xpZ2h0IiBhbmRyb2lkOmR1cmF0aW9uPSI0MiIgLz4KLSAgICA8aXRlbSBhbmRyb2lkOmRyYXdhYmxlPSJAZHJhd2FibGUvaWNfbXJfYnV0dG9uX2Nvbm5lY3RpbmdfMTlfbGlnaHQiIGFuZHJvaWQ6ZHVyYXRpb249IjQyIiAvPgotICAgIDxpdGVtIGFuZHJvaWQ6ZHJhd2FibGU9IkBkcmF3YWJsZS9pY19tcl9idXR0b25fY29ubmVjdGluZ18yMF9saWdodCIgYW5kcm9pZDpkdXJhdGlvbj0iNDIiIC8+Ci0gICAgPGl0ZW0gYW5kcm9pZDpkcmF3YWJsZT0iQGRyYXdhYmxlL2ljX21yX2J1dHRvbl9jb25uZWN0aW5nXzIxX2xpZ2h0IiBhbmRyb2lkOmR1cmF0aW9uPSI0MiIgLz4KLSAgICA8aXRlbSBhbmRyb2lkOmRyYXdhYmxlPSJAZHJhd2FibGUvaWNfbXJfYnV0dG9uX2Nvbm5lY3RpbmdfMjJfbGlnaHQiIGFuZHJvaWQ6ZHVyYXRpb249IjQyIiAvPgotICAgIDxpdGVtIGFuZHJvaWQ6ZHJhd2FibGU9IkBkcmF3YWJsZS9pY19tcl9idXR0b25fY29ubmVjdGluZ18yM19saWdodCIgYW5kcm9pZDpkdXJhdGlvbj0iNDIiIC8+Ci0gICAgPGl0ZW0gYW5kcm9pZDpkcmF3YWJsZT0iQGRyYXdhYmxlL2ljX21yX2J1dHRvbl9jb25uZWN0aW5nXzI0X2xpZ2h0IiBhbmRyb2lkOmR1cmF0aW9uPSI0MiIgLz4KLSAgICA8aXRlbSBhbmRyb2lkOmRyYXdhYmxlPSJAZHJhd2FibGUvaWNfbXJfYnV0dG9uX2Nvbm5lY3RpbmdfMjVfbGlnaHQiIGFuZHJvaWQ6ZHVyYXRpb249IjQyIiAvPgotICAgIDxpdGVtIGFuZHJvaWQ6ZHJhd2FibGU9IkBkcmF3YWJsZS9pY19tcl9idXR0b25fY29ubmVjdGluZ18yNl9saWdodCIgYW5kcm9pZDpkdXJhdGlvbj0iNDIiIC8+Ci0gICAgPGl0ZW0gYW5kcm9pZDpkcmF3YWJsZT0iQGRyYXdhYmxlL2ljX21yX2J1dHRvbl9jb25uZWN0aW5nXzI3X2xpZ2h0IiBhbmRyb2lkOmR1cmF0aW9uPSI0MiIgLz4KLSAgICA8aXRlbSBhbmRyb2lkOmRyYXdhYmxlPSJAZHJhd2FibGUvaWNfbXJfYnV0dG9uX2Nvbm5lY3RpbmdfMjhfbGlnaHQiIGFuZHJvaWQ6ZHVyYXRpb249IjQyIiAvPgotICAgIDxpdGVtIGFuZHJvaWQ6ZHJhd2FibGU9IkBkcmF3YWJsZS9pY19tcl9idXR0b25fY29ubmVjdGluZ18yOV9saWdodCIgYW5kcm9pZDpkdXJhdGlvbj0iNDIiIC8+Ci0gICAgPGl0ZW0gYW5kcm9pZDpkcmF3YWJsZT0iQGRyYXdhYmxlL2ljX21yX2J1dHRvbl9jb25uZWN0aW5nXzMwX2xpZ2h0IiBhbmRyb2lkOmR1cmF0aW9uPSI0MiIgLz4KLTwvYW5pbWF0aW9uLWxpc3Q+CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9NZWRpYUNvbXBvbmVudHMvcmVzL2RyYXdhYmxlL21yX2J1dHRvbl9kYXJrLnhtbCBiL3BhY2thZ2VzL01lZGlhQ29tcG9uZW50cy9yZXMvZHJhd2FibGUvbXJfYnV0dG9uX2RhcmsueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4ZjFkZmFhLi4wMDAwMDAwCi0tLSBhL3BhY2thZ2VzL01lZGlhQ29tcG9uZW50cy9yZXMvZHJhd2FibGUvbXJfYnV0dG9uX2RhcmsueG1sCisrKyAvZGV2L251bGwKQEAgLTEsMjUgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KLTwhLS0gQ29weXJpZ2h0IDIwMTggVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAotCi0gICAgIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwotICAgICB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCi0gICAgIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotCi0gICAgICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0KLSAgICAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQotICAgICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAotICAgICBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KLSAgICAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAotICAgICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KLS0tPgotCi08c2VsZWN0b3IgeG1sbnM6YW5kcm9pZD0iaHR0cDovL3NjaGVtYXMuYW5kcm9pZC5jb20vYXBrL3Jlcy9hbmRyb2lkIj4KLSAgICA8aXRlbSBhbmRyb2lkOnN0YXRlX2NoZWNrZWQ9InRydWUiIGFuZHJvaWQ6c3RhdGVfZW5hYmxlZD0idHJ1ZSIKLSAgICAgICAgICAgIGFuZHJvaWQ6ZHJhd2FibGU9IkBkcmF3YWJsZS9tcl9idXR0b25fY29ubmVjdGVkX2RhcmsiIC8+Ci0gICAgPGl0ZW0gYW5kcm9pZDpzdGF0ZV9jaGVja2FibGU9InRydWUiIGFuZHJvaWQ6c3RhdGVfZW5hYmxlZD0idHJ1ZSIKLSAgICAgICAgICAgIGFuZHJvaWQ6ZHJhd2FibGU9IkBkcmF3YWJsZS9tcl9idXR0b25fY29ubmVjdGluZ19kYXJrIiAvPgotICAgIDxpdGVtIGFuZHJvaWQ6c3RhdGVfZW5hYmxlZD0idHJ1ZSIKLSAgICAgICAgICAgIGFuZHJvaWQ6ZHJhd2FibGU9IkBkcmF3YWJsZS9pY19tcl9idXR0b25fZGlzY29ubmVjdGVkX2RhcmsiIC8+Ci0gICAgPGl0ZW0gYW5kcm9pZDpkcmF3YWJsZT0iQGRyYXdhYmxlL2ljX21yX2J1dHRvbl9kaXNhYmxlZF9kYXJrIiAvPgotPC9zZWxlY3Rvcj4KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL01lZGlhQ29tcG9uZW50cy9yZXMvZHJhd2FibGUvbXJfYnV0dG9uX2xpZ2h0LnhtbCBiL3BhY2thZ2VzL01lZGlhQ29tcG9uZW50cy9yZXMvZHJhd2FibGUvbXJfYnV0dG9uX2xpZ2h0LnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMWQzZDg0ZS4uMDAwMDAwMAotLS0gYS9wYWNrYWdlcy9NZWRpYUNvbXBvbmVudHMvcmVzL2RyYXdhYmxlL21yX2J1dHRvbl9saWdodC54bWwKKysrIC9kZXYvbnVsbApAQCAtMSwyNSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ1dGYtOCI/PgotPCEtLSBDb3B5cmlnaHQgMjAxOCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0Ci0KLSAgICAgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7Ci0gICAgIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KLSAgICAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0KLSAgICAgICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLQotICAgICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCi0gICAgIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCi0gICAgIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgotICAgICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCi0gICAgIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgotLS0+Ci0KLTxzZWxlY3RvciB4bWxuczphbmRyb2lkPSJodHRwOi8vc2NoZW1hcy5hbmRyb2lkLmNvbS9hcGsvcmVzL2FuZHJvaWQiPgotICAgIDxpdGVtIGFuZHJvaWQ6c3RhdGVfY2hlY2tlZD0idHJ1ZSIgYW5kcm9pZDpzdGF0ZV9lbmFibGVkPSJ0cnVlIgotICAgICAgICAgICAgYW5kcm9pZDpkcmF3YWJsZT0iQGRyYXdhYmxlL21yX2J1dHRvbl9jb25uZWN0ZWRfbGlnaHQiIC8+Ci0gICAgPGl0ZW0gYW5kcm9pZDpzdGF0ZV9jaGVja2FibGU9InRydWUiIGFuZHJvaWQ6c3RhdGVfZW5hYmxlZD0idHJ1ZSIKLSAgICAgICAgICAgIGFuZHJvaWQ6ZHJhd2FibGU9IkBkcmF3YWJsZS9tcl9idXR0b25fY29ubmVjdGluZ19saWdodCIgLz4KLSAgICA8aXRlbSBhbmRyb2lkOnN0YXRlX2VuYWJsZWQ9InRydWUiCi0gICAgICAgICAgICBhbmRyb2lkOmRyYXdhYmxlPSJAZHJhd2FibGUvaWNfbXJfYnV0dG9uX2Rpc2Nvbm5lY3RlZF9saWdodCIgLz4KLSAgICA8aXRlbSBhbmRyb2lkOmRyYXdhYmxlPSJAZHJhd2FibGUvaWNfbXJfYnV0dG9uX2Rpc2FibGVkX2xpZ2h0IiAvPgotPC9zZWxlY3Rvcj4KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL01lZGlhQ29tcG9uZW50cy9yZXMvZHJhd2FibGUvbXJfZGlhbG9nX2Nsb3NlX2RhcmsueG1sIGIvcGFja2FnZXMvTWVkaWFDb21wb25lbnRzL3Jlcy9kcmF3YWJsZS9tcl9kaWFsb2dfY2xvc2VfZGFyay54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDI4OGM4YzcuLjAwMDAwMDAKLS0tIGEvcGFja2FnZXMvTWVkaWFDb21wb25lbnRzL3Jlcy9kcmF3YWJsZS9tcl9kaWFsb2dfY2xvc2VfZGFyay54bWwKKysrIC9kZXYvbnVsbApAQCAtMSwxOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ1dGYtOCI/PgotPCEtLSBDb3B5cmlnaHQgMjAxOCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0Ci0KLSAgICAgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7Ci0gICAgIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KLSAgICAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0KLSAgICAgICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLQotICAgICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCi0gICAgIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCi0gICAgIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgotICAgICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCi0gICAgIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgotLS0+Ci0KLTxzZWxlY3RvciB4bWxuczphbmRyb2lkPSJodHRwOi8vc2NoZW1hcy5hbmRyb2lkLmNvbS9hcGsvcmVzL2FuZHJvaWQiPgotICAgIDxpdGVtIGFuZHJvaWQ6ZHJhd2FibGU9IkBkcmF3YWJsZS9pY19kaWFsb2dfY2xvc2VfZGFyayIgLz4KLTwvc2VsZWN0b3I+CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9NZWRpYUNvbXBvbmVudHMvcmVzL2RyYXdhYmxlL21yX2RpYWxvZ19jbG9zZV9saWdodC54bWwgYi9wYWNrYWdlcy9NZWRpYUNvbXBvbmVudHMvcmVzL2RyYXdhYmxlL21yX2RpYWxvZ19jbG9zZV9saWdodC54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGNkNTBlMGYuLjAwMDAwMDAKLS0tIGEvcGFja2FnZXMvTWVkaWFDb21wb25lbnRzL3Jlcy9kcmF3YWJsZS9tcl9kaWFsb2dfY2xvc2VfbGlnaHQueG1sCisrKyAvZGV2L251bGwKQEAgLTEsMjQgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KLTwhLS0gQ29weXJpZ2h0IDIwMTggVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAotCi0gICAgIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwotICAgICB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCi0gICAgIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotCi0gICAgICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0KLSAgICAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQotICAgICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAotICAgICBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KLSAgICAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAotICAgICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KLS0tPgotCi08c2VsZWN0b3IgeG1sbnM6YW5kcm9pZD0iaHR0cDovL3NjaGVtYXMuYW5kcm9pZC5jb20vYXBrL3Jlcy9hbmRyb2lkIj4KLSAgICA8aXRlbT4KLSAgICAgICAgPGJpdG1hcAotICAgICAgICAgICAgYW5kcm9pZDpzcmM9IkBkcmF3YWJsZS9pY19kaWFsb2dfY2xvc2VfbGlnaHQiCi0gICAgICAgICAgICBhbmRyb2lkOmFscGhhPSIwLjg3IiAvPgotICAgIDwvaXRlbT4KLQotPC9zZWxlY3Rvcj4KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL01lZGlhQ29tcG9uZW50cy9yZXMvZHJhd2FibGUvbXJfZGlhbG9nX21hdGVyaWFsX2JhY2tncm91bmRfZGFyay54bWwgYi9wYWNrYWdlcy9NZWRpYUNvbXBvbmVudHMvcmVzL2RyYXdhYmxlL21yX2RpYWxvZ19tYXRlcmlhbF9iYWNrZ3JvdW5kX2RhcmsueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlYmM3ZWNhLi4wMDAwMDAwCi0tLSBhL3BhY2thZ2VzL01lZGlhQ29tcG9uZW50cy9yZXMvZHJhd2FibGUvbXJfZGlhbG9nX21hdGVyaWFsX2JhY2tncm91bmRfZGFyay54bWwKKysrIC9kZXYvbnVsbApAQCAtMSwyMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ1dGYtOCI/PgotPCEtLSBDb3B5cmlnaHQgMjAxOCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0Ci0KLSAgICAgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7Ci0gICAgIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KLSAgICAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0KLSAgICAgICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLQotICAgICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCi0gICAgIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCi0gICAgIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgotICAgICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCi0gICAgIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgotLS0+Ci0KLTwhLS0gVGhpcyBpcyB0aGUgY29weSBvZiBAZHJhd2FibGUvYWJjX2RpYWxvZ19tYXRlcmlhbF9iYWNrZ3JvdW5kX2RhcmsgZXhjZXB0IGZvciBpbnNldAotICAgICB3aGljaCBpbmNsdWRlcyB1bm5lY2Vzc2FyeSBwYWRkaW5nLiAtLT4KLTxzaGFwZSB4bWxuczphbmRyb2lkPSJodHRwOi8vc2NoZW1hcy5hbmRyb2lkLmNvbS9hcGsvcmVzL2FuZHJvaWQiCi0gICAgICAgIGFuZHJvaWQ6c2hhcGU9InJlY3RhbmdsZSI+Ci0gICAgPGNvcm5lcnMgYW5kcm9pZDpyYWRpdXM9IjJkcCIgLz4KLSAgICA8c29saWQgYW5kcm9pZDpjb2xvcj0iQGNvbG9yL2JhY2tncm91bmRfZmxvYXRpbmdfbWF0ZXJpYWxfZGFyayIgLz4KLTwvc2hhcGU+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvTWVkaWFDb21wb25lbnRzL3Jlcy9kcmF3YWJsZS9tcl9kaWFsb2dfbWF0ZXJpYWxfYmFja2dyb3VuZF9saWdodC54bWwgYi9wYWNrYWdlcy9NZWRpYUNvbXBvbmVudHMvcmVzL2RyYXdhYmxlL21yX2RpYWxvZ19tYXRlcmlhbF9iYWNrZ3JvdW5kX2xpZ2h0LnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzFiMjM1YS4uMDAwMDAwMAotLS0gYS9wYWNrYWdlcy9NZWRpYUNvbXBvbmVudHMvcmVzL2RyYXdhYmxlL21yX2RpYWxvZ19tYXRlcmlhbF9iYWNrZ3JvdW5kX2xpZ2h0LnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDIzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9InV0Zi04Ij8+Ci08IS0tIENvcHlyaWdodCAyMDE4IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKLQotICAgICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKLSAgICAgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgotICAgICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLQotICAgICAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotCi0gICAgIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKLSAgICAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKLSAgICAgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCi0gICAgIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKLSAgICAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCi0tLT4KLQotPCEtLSBUaGlzIGlzIHRoZSBjb3B5IG9mIEBkcmF3YWJsZS9hYmNfZGlhbG9nX21hdGVyaWFsX2JhY2tncm91bmRfbGlnaHQgZXhjZXB0IGZvciBpbnNldAotICAgICB3aGljaCBpbmNsdWRlcyB1bm5lY2Vzc2FyeSBwYWRkaW5nLiAtLT4KLTxzaGFwZSB4bWxuczphbmRyb2lkPSJodHRwOi8vc2NoZW1hcy5hbmRyb2lkLmNvbS9hcGsvcmVzL2FuZHJvaWQiCi0gICAgICAgIGFuZHJvaWQ6c2hhcGU9InJlY3RhbmdsZSI+Ci0gICAgPGNvcm5lcnMgYW5kcm9pZDpyYWRpdXM9IjJkcCIgLz4KLSAgICA8c29saWQgYW5kcm9pZDpjb2xvcj0iQGNvbG9yL2JhY2tncm91bmRfZmxvYXRpbmdfbWF0ZXJpYWxfbGlnaHQiIC8+Ci08L3NoYXBlPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3BhY2thZ2VzL01lZGlhQ29tcG9uZW50cy9yZXMvZHJhd2FibGUvbXJfZ3JvdXBfY29sbGFwc2UueG1sIGIvcGFja2FnZXMvTWVkaWFDb21wb25lbnRzL3Jlcy9kcmF3YWJsZS9tcl9ncm91cF9jb2xsYXBzZS54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDhmNzJiYzguLjAwMDAwMDAKLS0tIGEvcGFja2FnZXMvTWVkaWFDb21wb25lbnRzL3Jlcy9kcmF3YWJsZS9tcl9ncm91cF9jb2xsYXBzZS54bWwKKysrIC9kZXYvbnVsbApAQCAtMSwzNSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ1dGYtOCI/PgotPCEtLSBDb3B5cmlnaHQgMjAxOCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0Ci0KLSAgICAgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7Ci0gICAgIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KLSAgICAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0KLSAgICAgICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLQotICAgICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCi0gICAgIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCi0gICAgIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgotICAgICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCi0gICAgIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgotLS0+Ci0KLTxhbmltYXRpb24tbGlzdCB4bWxuczphbmRyb2lkPSJodHRwOi8vc2NoZW1hcy5hbmRyb2lkLmNvbS9hcGsvcmVzL2FuZHJvaWQiCi0gICAgICAgIGFuZHJvaWQ6b25lc2hvdD0idHJ1ZSI+Ci0gICAgPGl0ZW0gYW5kcm9pZDpkcmF3YWJsZT0iQGRyYXdhYmxlL2ljX2dyb3VwX2NvbGxhcHNlXzAwIiBhbmRyb2lkOmR1cmF0aW9uPSIxMyIgLz4KLSAgICA8aXRlbSBhbmRyb2lkOmRyYXdhYmxlPSJAZHJhd2FibGUvaWNfZ3JvdXBfY29sbGFwc2VfMDEiIGFuZHJvaWQ6ZHVyYXRpb249IjEzIiAvPgotICAgIDxpdGVtIGFuZHJvaWQ6ZHJhd2FibGU9IkBkcmF3YWJsZS9pY19ncm91cF9jb2xsYXBzZV8wMiIgYW5kcm9pZDpkdXJhdGlvbj0iMTMiIC8+Ci0gICAgPGl0ZW0gYW5kcm9pZDpkcmF3YWJsZT0iQGRyYXdhYmxlL2ljX2dyb3VwX2NvbGxhcHNlXzAzIiBhbmRyb2lkOmR1cmF0aW9uPSIxMyIgLz4KLSAgICA8aXRlbSBhbmRyb2lkOmRyYXdhYmxlPSJAZHJhd2FibGUvaWNfZ3JvdXBfY29sbGFwc2VfMDQiIGFuZHJvaWQ6ZHVyYXRpb249IjEzIiAvPgotICAgIDxpdGVtIGFuZHJvaWQ6ZHJhd2FibGU9IkBkcmF3YWJsZS9pY19ncm91cF9jb2xsYXBzZV8wNSIgYW5kcm9pZDpkdXJhdGlvbj0iMTMiIC8+Ci0gICAgPGl0ZW0gYW5kcm9pZDpkcmF3YWJsZT0iQGRyYXdhYmxlL2ljX2dyb3VwX2NvbGxhcHNlXzA2IiBhbmRyb2lkOmR1cmF0aW9uPSIxMyIgLz4KLSAgICA8aXRlbSBhbmRyb2lkOmRyYXdhYmxlPSJAZHJhd2FibGUvaWNfZ3JvdXBfY29sbGFwc2VfMDciIGFuZHJvaWQ6ZHVyYXRpb249IjEzIiAvPgotICAgIDxpdGVtIGFuZHJvaWQ6ZHJhd2FibGU9IkBkcmF3YWJsZS9pY19ncm91cF9jb2xsYXBzZV8wOCIgYW5kcm9pZDpkdXJhdGlvbj0iMTMiIC8+Ci0gICAgPGl0ZW0gYW5kcm9pZDpkcmF3YWJsZT0iQGRyYXdhYmxlL2ljX2dyb3VwX2NvbGxhcHNlXzA5IiBhbmRyb2lkOmR1cmF0aW9uPSIxMyIgLz4KLSAgICA8aXRlbSBhbmRyb2lkOmRyYXdhYmxlPSJAZHJhd2FibGUvaWNfZ3JvdXBfY29sbGFwc2VfMTAiIGFuZHJvaWQ6ZHVyYXRpb249IjEzIiAvPgotICAgIDxpdGVtIGFuZHJvaWQ6ZHJhd2FibGU9IkBkcmF3YWJsZS9pY19ncm91cF9jb2xsYXBzZV8xMSIgYW5kcm9pZDpkdXJhdGlvbj0iMTMiIC8+Ci0gICAgPGl0ZW0gYW5kcm9pZDpkcmF3YWJsZT0iQGRyYXdhYmxlL2ljX2dyb3VwX2NvbGxhcHNlXzEyIiBhbmRyb2lkOmR1cmF0aW9uPSIxMyIgLz4KLSAgICA8aXRlbSBhbmRyb2lkOmRyYXdhYmxlPSJAZHJhd2FibGUvaWNfZ3JvdXBfY29sbGFwc2VfMTMiIGFuZHJvaWQ6ZHVyYXRpb249IjEzIiAvPgotICAgIDxpdGVtIGFuZHJvaWQ6ZHJhd2FibGU9IkBkcmF3YWJsZS9pY19ncm91cF9jb2xsYXBzZV8xNCIgYW5kcm9pZDpkdXJhdGlvbj0iMTMiIC8+Ci0gICAgPGl0ZW0gYW5kcm9pZDpkcmF3YWJsZT0iQGRyYXdhYmxlL2ljX2dyb3VwX2NvbGxhcHNlXzE1IiBhbmRyb2lkOmR1cmF0aW9uPSIxMyIgLz4KLTwvYW5pbWF0aW9uLWxpc3Q+CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9NZWRpYUNvbXBvbmVudHMvcmVzL2RyYXdhYmxlL21yX2dyb3VwX2V4cGFuZC54bWwgYi9wYWNrYWdlcy9NZWRpYUNvbXBvbmVudHMvcmVzL2RyYXdhYmxlL21yX2dyb3VwX2V4cGFuZC54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDZiM2ZkYjYuLjAwMDAwMDAKLS0tIGEvcGFja2FnZXMvTWVkaWFDb21wb25lbnRzL3Jlcy9kcmF3YWJsZS9tcl9ncm91cF9leHBhbmQueG1sCisrKyAvZGV2L251bGwKQEAgLTEsMzUgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KLTwhLS0gQ29weXJpZ2h0IDIwMTggVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAotCi0gICAgIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwotICAgICB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCi0gICAgIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotCi0gICAgICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0KLSAgICAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQotICAgICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAotICAgICBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KLSAgICAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAotICAgICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KLS0tPgotCi08YW5pbWF0aW9uLWxpc3QgeG1sbnM6YW5kcm9pZD0iaHR0cDovL3NjaGVtYXMuYW5kcm9pZC5jb20vYXBrL3Jlcy9hbmRyb2lkIgotICAgICAgICBhbmRyb2lkOm9uZXNob3Q9InRydWUiPgotICAgIDxpdGVtIGFuZHJvaWQ6ZHJhd2FibGU9IkBkcmF3YWJsZS9pY19ncm91cF9leHBhbmRfMDAiIGFuZHJvaWQ6ZHVyYXRpb249IjEzIiAvPgotICAgIDxpdGVtIGFuZHJvaWQ6ZHJhd2FibGU9IkBkcmF3YWJsZS9pY19ncm91cF9leHBhbmRfMDEiIGFuZHJvaWQ6ZHVyYXRpb249IjEzIiAvPgotICAgIDxpdGVtIGFuZHJvaWQ6ZHJhd2FibGU9IkBkcmF3YWJsZS9pY19ncm91cF9leHBhbmRfMDIiIGFuZHJvaWQ6ZHVyYXRpb249IjEzIiAvPgotICAgIDxpdGVtIGFuZHJvaWQ6ZHJhd2FibGU9IkBkcmF3YWJsZS9pY19ncm91cF9leHBhbmRfMDMiIGFuZHJvaWQ6ZHVyYXRpb249IjEzIiAvPgotICAgIDxpdGVtIGFuZHJvaWQ6ZHJhd2FibGU9IkBkcmF3YWJsZS9pY19ncm91cF9leHBhbmRfMDQiIGFuZHJvaWQ6ZHVyYXRpb249IjEzIiAvPgotICAgIDxpdGVtIGFuZHJvaWQ6ZHJhd2FibGU9IkBkcmF3YWJsZS9pY19ncm91cF9leHBhbmRfMDUiIGFuZHJvaWQ6ZHVyYXRpb249IjEzIiAvPgotICAgIDxpdGVtIGFuZHJvaWQ6ZHJhd2FibGU9IkBkcmF3YWJsZS9pY19ncm91cF9leHBhbmRfMDYiIGFuZHJvaWQ6ZHVyYXRpb249IjEzIiAvPgotICAgIDxpdGVtIGFuZHJvaWQ6ZHJhd2FibGU9IkBkcmF3YWJsZS9pY19ncm91cF9leHBhbmRfMDciIGFuZHJvaWQ6ZHVyYXRpb249IjEzIiAvPgotICAgIDxpdGVtIGFuZHJvaWQ6ZHJhd2FibGU9IkBkcmF3YWJsZS9pY19ncm91cF9leHBhbmRfMDgiIGFuZHJvaWQ6ZHVyYXRpb249IjEzIiAvPgotICAgIDxpdGVtIGFuZHJvaWQ6ZHJhd2FibGU9IkBkcmF3YWJsZS9pY19ncm91cF9leHBhbmRfMDkiIGFuZHJvaWQ6ZHVyYXRpb249IjEzIiAvPgotICAgIDxpdGVtIGFuZHJvaWQ6ZHJhd2FibGU9IkBkcmF3YWJsZS9pY19ncm91cF9leHBhbmRfMTAiIGFuZHJvaWQ6ZHVyYXRpb249IjEzIiAvPgotICAgIDxpdGVtIGFuZHJvaWQ6ZHJhd2FibGU9IkBkcmF3YWJsZS9pY19ncm91cF9leHBhbmRfMTEiIGFuZHJvaWQ6ZHVyYXRpb249IjEzIiAvPgotICAgIDxpdGVtIGFuZHJvaWQ6ZHJhd2FibGU9IkBkcmF3YWJsZS9pY19ncm91cF9leHBhbmRfMTIiIGFuZHJvaWQ6ZHVyYXRpb249IjEzIiAvPgotICAgIDxpdGVtIGFuZHJvaWQ6ZHJhd2FibGU9IkBkcmF3YWJsZS9pY19ncm91cF9leHBhbmRfMTMiIGFuZHJvaWQ6ZHVyYXRpb249IjEzIiAvPgotICAgIDxpdGVtIGFuZHJvaWQ6ZHJhd2FibGU9IkBkcmF3YWJsZS9pY19ncm91cF9leHBhbmRfMTQiIGFuZHJvaWQ6ZHVyYXRpb249IjEzIiAvPgotICAgIDxpdGVtIGFuZHJvaWQ6ZHJhd2FibGU9IkBkcmF3YWJsZS9pY19ncm91cF9leHBhbmRfMTUiIGFuZHJvaWQ6ZHVyYXRpb249IjEzIiAvPgotPC9hbmltYXRpb24tbGlzdD4KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL01lZGlhQ29tcG9uZW50cy9yZXMvZHJhd2FibGUvbXJfbWVkaWFfcGF1c2VfZGFyay54bWwgYi9wYWNrYWdlcy9NZWRpYUNvbXBvbmVudHMvcmVzL2RyYXdhYmxlL21yX21lZGlhX3BhdXNlX2RhcmsueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4NjIxOGE3Li4wMDAwMDAwCi0tLSBhL3BhY2thZ2VzL01lZGlhQ29tcG9uZW50cy9yZXMvZHJhd2FibGUvbXJfbWVkaWFfcGF1c2VfZGFyay54bWwKKysrIC9kZXYvbnVsbApAQCAtMSwxOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ1dGYtOCI/PgotPCEtLSBDb3B5cmlnaHQgMjAxOCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0Ci0KLSAgICAgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7Ci0gICAgIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KLSAgICAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0KLSAgICAgICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLQotICAgICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCi0gICAgIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCi0gICAgIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgotICAgICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCi0gICAgIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgotLS0+Ci0KLTxzZWxlY3RvciB4bWxuczphbmRyb2lkPSJodHRwOi8vc2NoZW1hcy5hbmRyb2lkLmNvbS9hcGsvcmVzL2FuZHJvaWQiPgotICAgIDxpdGVtIGFuZHJvaWQ6ZHJhd2FibGU9IkBkcmF3YWJsZS9pY19tZWRpYV9wYXVzZV9kYXJrIiAvPgotPC9zZWxlY3Rvcj4KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL01lZGlhQ29tcG9uZW50cy9yZXMvZHJhd2FibGUvbXJfbWVkaWFfcGF1c2VfbGlnaHQueG1sIGIvcGFja2FnZXMvTWVkaWFDb21wb25lbnRzL3Jlcy9kcmF3YWJsZS9tcl9tZWRpYV9wYXVzZV9saWdodC54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDJkZDFmMDIuLjAwMDAwMDAKLS0tIGEvcGFja2FnZXMvTWVkaWFDb21wb25lbnRzL3Jlcy9kcmF3YWJsZS9tcl9tZWRpYV9wYXVzZV9saWdodC54bWwKKysrIC9kZXYvbnVsbApAQCAtMSwyMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ1dGYtOCI/PgotPCEtLSBDb3B5cmlnaHQgMjAxOCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0Ci0KLSAgICAgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7Ci0gICAgIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KLSAgICAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0KLSAgICAgICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLQotICAgICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCi0gICAgIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCi0gICAgIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgotICAgICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCi0gICAgIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgotLS0+Ci0KLTxzZWxlY3RvciB4bWxuczphbmRyb2lkPSJodHRwOi8vc2NoZW1hcy5hbmRyb2lkLmNvbS9hcGsvcmVzL2FuZHJvaWQiPgotICAgIDxpdGVtPgotICAgICAgICA8Yml0bWFwCi0gICAgICAgICAgICBhbmRyb2lkOnNyYz0iQGRyYXdhYmxlL2ljX21lZGlhX3BhdXNlX2xpZ2h0IgotICAgICAgICAgICAgYW5kcm9pZDphbHBoYT0iMC44NyIgLz4KLSAgICA8L2l0ZW0+Ci08L3NlbGVjdG9yPgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvTWVkaWFDb21wb25lbnRzL3Jlcy9kcmF3YWJsZS9tcl9tZWRpYV9wbGF5X2RhcmsueG1sIGIvcGFja2FnZXMvTWVkaWFDb21wb25lbnRzL3Jlcy9kcmF3YWJsZS9tcl9tZWRpYV9wbGF5X2RhcmsueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5ZDQ1YTMzLi4wMDAwMDAwCi0tLSBhL3BhY2thZ2VzL01lZGlhQ29tcG9uZW50cy9yZXMvZHJhd2FibGUvbXJfbWVkaWFfcGxheV9kYXJrLnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDE5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9InV0Zi04Ij8+Ci08IS0tIENvcHlyaWdodCAyMDE4IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKLQotICAgICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKLSAgICAgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgotICAgICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLQotICAgICAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotCi0gICAgIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKLSAgICAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKLSAgICAgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCi0gICAgIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKLSAgICAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCi0tLT4KLQotPHNlbGVjdG9yIHhtbG5zOmFuZHJvaWQ9Imh0dHA6Ly9zY2hlbWFzLmFuZHJvaWQuY29tL2Fway9yZXMvYW5kcm9pZCI+Ci0gICAgPGl0ZW0gYW5kcm9pZDpkcmF3YWJsZT0iQGRyYXdhYmxlL2ljX21lZGlhX3BsYXlfZGFyayIgLz4KLTwvc2VsZWN0b3I+CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9NZWRpYUNvbXBvbmVudHMvcmVzL2RyYXdhYmxlL21yX21lZGlhX3BsYXlfbGlnaHQueG1sIGIvcGFja2FnZXMvTWVkaWFDb21wb25lbnRzL3Jlcy9kcmF3YWJsZS9tcl9tZWRpYV9wbGF5X2xpZ2h0LnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjFmYjdhNi4uMDAwMDAwMAotLS0gYS9wYWNrYWdlcy9NZWRpYUNvbXBvbmVudHMvcmVzL2RyYXdhYmxlL21yX21lZGlhX3BsYXlfbGlnaHQueG1sCisrKyAvZGV2L251bGwKQEAgLTEsMjMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KLTwhLS0gQ29weXJpZ2h0IDIwMTggVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAotCi0gICAgIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwotICAgICB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCi0gICAgIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotCi0gICAgICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0KLSAgICAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQotICAgICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAotICAgICBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KLSAgICAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAotICAgICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KLS0tPgotCi08c2VsZWN0b3IgeG1sbnM6YW5kcm9pZD0iaHR0cDovL3NjaGVtYXMuYW5kcm9pZC5jb20vYXBrL3Jlcy9hbmRyb2lkIj4KLSAgICA8aXRlbT4KLSAgICAgICAgPGJpdG1hcAotICAgICAgICAgICAgYW5kcm9pZDpzcmM9IkBkcmF3YWJsZS9pY19tZWRpYV9wbGF5X2xpZ2h0IgotICAgICAgICAgICAgYW5kcm9pZDphbHBoYT0iMC44NyIgLz4KLSAgICA8L2l0ZW0+Ci08L3NlbGVjdG9yPgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvTWVkaWFDb21wb25lbnRzL3Jlcy9kcmF3YWJsZS9tcl9tZWRpYV9zdG9wX2RhcmsueG1sIGIvcGFja2FnZXMvTWVkaWFDb21wb25lbnRzL3Jlcy9kcmF3YWJsZS9tcl9tZWRpYV9zdG9wX2RhcmsueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzZTEwOGE5Li4wMDAwMDAwCi0tLSBhL3BhY2thZ2VzL01lZGlhQ29tcG9uZW50cy9yZXMvZHJhd2FibGUvbXJfbWVkaWFfc3RvcF9kYXJrLnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDE5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9InV0Zi04Ij8+Ci08IS0tIENvcHlyaWdodCAyMDE4IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKLQotICAgICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKLSAgICAgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgotICAgICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLQotICAgICAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotCi0gICAgIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKLSAgICAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKLSAgICAgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCi0gICAgIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKLSAgICAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCi0tLT4KLQotPHNlbGVjdG9yIHhtbG5zOmFuZHJvaWQ9Imh0dHA6Ly9zY2hlbWFzLmFuZHJvaWQuY29tL2Fway9yZXMvYW5kcm9pZCI+Ci0gICAgPGl0ZW0gYW5kcm9pZDpkcmF3YWJsZT0iQGRyYXdhYmxlL2ljX21lZGlhX3N0b3BfZGFyayIgLz4KLTwvc2VsZWN0b3I+CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9NZWRpYUNvbXBvbmVudHMvcmVzL2RyYXdhYmxlL21yX21lZGlhX3N0b3BfbGlnaHQueG1sIGIvcGFja2FnZXMvTWVkaWFDb21wb25lbnRzL3Jlcy9kcmF3YWJsZS9tcl9tZWRpYV9zdG9wX2xpZ2h0LnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjJjNmNlOC4uMDAwMDAwMAotLS0gYS9wYWNrYWdlcy9NZWRpYUNvbXBvbmVudHMvcmVzL2RyYXdhYmxlL21yX21lZGlhX3N0b3BfbGlnaHQueG1sCisrKyAvZGV2L251bGwKQEAgLTEsMjMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KLTwhLS0gQ29weXJpZ2h0IDIwMTggVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAotCi0gICAgIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwotICAgICB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCi0gICAgIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotCi0gICAgICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0KLSAgICAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQotICAgICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAotICAgICBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KLSAgICAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAotICAgICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KLS0tPgotCi08c2VsZWN0b3IgeG1sbnM6YW5kcm9pZD0iaHR0cDovL3NjaGVtYXMuYW5kcm9pZC5jb20vYXBrL3Jlcy9hbmRyb2lkIj4KLSAgICA8aXRlbT4KLSAgICAgICAgPGJpdG1hcAotICAgICAgICAgICAgYW5kcm9pZDpzcmM9IkBkcmF3YWJsZS9pY19tZWRpYV9zdG9wX2xpZ2h0IgotICAgICAgICAgICAgYW5kcm9pZDphbHBoYT0iMC44NyIgLz4KLSAgICA8L2l0ZW0+Ci08L3NlbGVjdG9yPgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvTWVkaWFDb21wb25lbnRzL3Jlcy9kcmF3YWJsZS9tcl92b2xfdHlwZV9hdWRpb3RyYWNrX2RhcmsueG1sIGIvcGFja2FnZXMvTWVkaWFDb21wb25lbnRzL3Jlcy9kcmF3YWJsZS9tcl92b2xfdHlwZV9hdWRpb3RyYWNrX2RhcmsueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0NGY0ZmQ2Li4wMDAwMDAwCi0tLSBhL3BhY2thZ2VzL01lZGlhQ29tcG9uZW50cy9yZXMvZHJhd2FibGUvbXJfdm9sX3R5cGVfYXVkaW90cmFja19kYXJrLnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDE5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9InV0Zi04Ij8+Ci08IS0tIENvcHlyaWdodCAyMDE4IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKLQotICAgICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKLSAgICAgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgotICAgICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLQotICAgICAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotCi0gICAgIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKLSAgICAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKLSAgICAgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCi0gICAgIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKLSAgICAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCi0tLT4KLQotPHNlbGVjdG9yIHhtbG5zOmFuZHJvaWQ9Imh0dHA6Ly9zY2hlbWFzLmFuZHJvaWQuY29tL2Fway9yZXMvYW5kcm9pZCI+Ci0gICAgPGl0ZW0gYW5kcm9pZDpkcmF3YWJsZT0iQGRyYXdhYmxlL2ljX2F1ZGlvdHJhY2tfZGFyayIgLz4KLTwvc2VsZWN0b3I+CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9NZWRpYUNvbXBvbmVudHMvcmVzL2RyYXdhYmxlL21yX3ZvbF90eXBlX2F1ZGlvdHJhY2tfbGlnaHQueG1sIGIvcGFja2FnZXMvTWVkaWFDb21wb25lbnRzL3Jlcy9kcmF3YWJsZS9tcl92b2xfdHlwZV9hdWRpb3RyYWNrX2xpZ2h0LnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNWM5ZGJjMC4uMDAwMDAwMAotLS0gYS9wYWNrYWdlcy9NZWRpYUNvbXBvbmVudHMvcmVzL2RyYXdhYmxlL21yX3ZvbF90eXBlX2F1ZGlvdHJhY2tfbGlnaHQueG1sCisrKyAvZGV2L251bGwKQEAgLTEsMjMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KLTwhLS0gQ29weXJpZ2h0IDIwMTggVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAotCi0gICAgIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwotICAgICB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCi0gICAgIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotCi0gICAgICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0KLSAgICAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQotICAgICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAotICAgICBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KLSAgICAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAotICAgICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KLS0tPgotCi08c2VsZWN0b3IgeG1sbnM6YW5kcm9pZD0iaHR0cDovL3NjaGVtYXMuYW5kcm9pZC5jb20vYXBrL3Jlcy9hbmRyb2lkIj4KLSAgICA8aXRlbT4KLSAgICAgICAgPGJpdG1hcAotICAgICAgICAgICAgYW5kcm9pZDpzcmM9IkBkcmF3YWJsZS9pY19hdWRpb3RyYWNrX2xpZ2h0IgotICAgICAgICAgICAgYW5kcm9pZDphbHBoYT0iMC44NyIgLz4KLSAgICA8L2l0ZW0+Ci08L3NlbGVjdG9yPgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvTWVkaWFDb21wb25lbnRzL3Jlcy9pbnRlcnBvbGF0b3IvbXJfZmFzdF9vdXRfc2xvd19pbi54bWwgYi9wYWNrYWdlcy9NZWRpYUNvbXBvbmVudHMvcmVzL2ludGVycG9sYXRvci9tcl9mYXN0X291dF9zbG93X2luLnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNmI2YTE3MS4uMDAwMDAwMAotLS0gYS9wYWNrYWdlcy9NZWRpYUNvbXBvbmVudHMvcmVzL2ludGVycG9sYXRvci9tcl9mYXN0X291dF9zbG93X2luLnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDIyICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9InV0Zi04Ij8+Ci08IS0tCi0gIH4gQ29weXJpZ2h0IDIwMTggVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAotICB+Ci0gIH4gTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7Ci0gIH4geW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgotICB+IFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotICB+Ci0gIH4gICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLSAgfgotICB+IFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKLSAgfiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAotICB+IFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgotICB+IFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKLSAgfiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZQotICAtLT4KLQotPHBhdGhJbnRlcnBvbGF0b3IgeG1sbnM6YW5kcm9pZD0iaHR0cDovL3NjaGVtYXMuYW5kcm9pZC5jb20vYXBrL3Jlcy9hbmRyb2lkIgotICAgIGFuZHJvaWQ6Y29udHJvbFgxPSIwLjQiCi0gICAgYW5kcm9pZDpjb250cm9sWTE9IjAiCi0gICAgYW5kcm9pZDpjb250cm9sWDI9IjAuMiIKLSAgICBhbmRyb2lkOmNvbnRyb2xZMj0iMSIvPgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvTWVkaWFDb21wb25lbnRzL3Jlcy9pbnRlcnBvbGF0b3IvbXJfbGluZWFyX291dF9zbG93X2luLnhtbCBiL3BhY2thZ2VzL01lZGlhQ29tcG9uZW50cy9yZXMvaW50ZXJwb2xhdG9yL21yX2xpbmVhcl9vdXRfc2xvd19pbi54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDIwYmYyOTguLjAwMDAwMDAKLS0tIGEvcGFja2FnZXMvTWVkaWFDb21wb25lbnRzL3Jlcy9pbnRlcnBvbGF0b3IvbXJfbGluZWFyX291dF9zbG93X2luLnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDIyICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9InV0Zi04Ij8+Ci08IS0tCi0gIH4gQ29weXJpZ2h0IDIwMTggVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAotICB+Ci0gIH4gTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7Ci0gIH4geW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgotICB+IFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotICB+Ci0gIH4gICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLSAgfgotICB+IFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKLSAgfiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAotICB+IFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgotICB+IFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKLSAgfiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZQotICAtLT4KLQotPHBhdGhJbnRlcnBvbGF0b3IgeG1sbnM6YW5kcm9pZD0iaHR0cDovL3NjaGVtYXMuYW5kcm9pZC5jb20vYXBrL3Jlcy9hbmRyb2lkIgotICAgIGFuZHJvaWQ6Y29udHJvbFgxPSIwIgotICAgIGFuZHJvaWQ6Y29udHJvbFkxPSIwIgotICAgIGFuZHJvaWQ6Y29udHJvbFgyPSIwLjIiCi0gICAgYW5kcm9pZDpjb250cm9sWTI9IjEiLz4KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL01lZGlhQ29tcG9uZW50cy9yZXMvbGF5b3V0L2VtYmVkZGVkX211c2ljLnhtbCBiL3BhY2thZ2VzL01lZGlhQ29tcG9uZW50cy9yZXMvbGF5b3V0L2VtYmVkZGVkX211c2ljLnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggM2U0ZDM2NS4uMDAwMDAwMAotLS0gYS9wYWNrYWdlcy9NZWRpYUNvbXBvbmVudHMvcmVzL2xheW91dC9lbWJlZGRlZF9tdXNpYy54bWwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ1dGYtOCI/PgotPCEtLSBDb3B5cmlnaHQgMjAxOCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0Ci0KLSAgICAgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7Ci0gICAgIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KLSAgICAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0KLSAgICAgICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLQotICAgICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCi0gICAgIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCi0gICAgIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgotICAgICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCi0gICAgIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgotLS0+Ci0KLTxMaW5lYXJMYXlvdXQgeG1sbnM6YW5kcm9pZD0iaHR0cDovL3NjaGVtYXMuYW5kcm9pZC5jb20vYXBrL3Jlcy9hbmRyb2lkIgotICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJtYXRjaF9wYXJlbnQiCi0gICAgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJtYXRjaF9wYXJlbnQiCi0gICAgYW5kcm9pZDpvcmllbnRhdGlvbj0idmVydGljYWwiPgotCi0gICAgPFZpZXcKLSAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9Im1hdGNoX3BhcmVudCIKLSAgICAgICAgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSIwZHAiCi0gICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dlaWdodD0iMC4yNSIvPgotCi0gICAgPEltYWdlVmlldwotICAgICAgICBhbmRyb2lkOmlkPSJAK2lkL2FsYnVtIgotICAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0ibWF0Y2hfcGFyZW50IgotICAgICAgICBhbmRyb2lkOmxheW91dF9oZWlnaHQ9IjBkcCIKLSAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2VpZ2h0PSIwLjUiCi0gICAgICAgIGFuZHJvaWQ6c2NhbGVUeXBlPSJmaXRDZW50ZXIiCi0gICAgICAgIGFuZHJvaWQ6c3JjPSJAZHJhd2FibGUvaWNfZGVmYXVsdF9hbGJ1bV9pbWFnZSIgLz4KLQotICAgIDxWaWV3Ci0gICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJtYXRjaF9wYXJlbnQiCi0gICAgICAgIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0iMGRwIgotICAgICAgICBhbmRyb2lkOmxheW91dF93ZWlnaHQ9IjAuMjUiLz4KLTwvTGluZWFyTGF5b3V0PgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3BhY2thZ2VzL01lZGlhQ29tcG9uZW50cy9yZXMvbGF5b3V0L2VtYmVkZGVkX3NldHRpbmdzX2xpc3RfaXRlbS54bWwgYi9wYWNrYWdlcy9NZWRpYUNvbXBvbmVudHMvcmVzL2xheW91dC9lbWJlZGRlZF9zZXR0aW5nc19saXN0X2l0ZW0ueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxMTU2ZGNhLi4wMDAwMDAwCi0tLSBhL3BhY2thZ2VzL01lZGlhQ29tcG9uZW50cy9yZXMvbGF5b3V0L2VtYmVkZGVkX3NldHRpbmdzX2xpc3RfaXRlbS54bWwKKysrIC9kZXYvbnVsbApAQCAtMSw2MyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ1dGYtOCI/PgotPCEtLSBDb3B5cmlnaHQgMjAxOCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0Ci0KLSAgICAgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7Ci0gICAgIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KLSAgICAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0KLSAgICAgICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLQotICAgICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCi0gICAgIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCi0gICAgIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgotICAgICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCi0gICAgIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgotLS0+Ci0KLTxMaW5lYXJMYXlvdXQgeG1sbnM6YW5kcm9pZD0iaHR0cDovL3NjaGVtYXMuYW5kcm9pZC5jb20vYXBrL3Jlcy9hbmRyb2lkIgotICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJ3cmFwX2NvbnRlbnQiCi0gICAgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJAZGltZW4vbWN2Ml9lbWJlZGRlZF9zZXR0aW5nc19oZWlnaHQiCi0gICAgYW5kcm9pZDpvcmllbnRhdGlvbj0iaG9yaXpvbnRhbCIKLSAgICBhbmRyb2lkOmJhY2tncm91bmQ9IkBjb2xvci9ibGFja19vcGFjaXR5XzcwIj4KLQotICAgIDxMaW5lYXJMYXlvdXQKLSAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9IndyYXBfY29udGVudCIKLSAgICAgICAgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJAZGltZW4vbWN2Ml9lbWJlZGRlZF9zZXR0aW5nc19oZWlnaHQiCi0gICAgICAgIGFuZHJvaWQ6Z3Jhdml0eT0iY2VudGVyIgotICAgICAgICBhbmRyb2lkOm9yaWVudGF0aW9uPSJob3Jpem9udGFsIj4KLQotICAgICAgICA8SW1hZ2VWaWV3Ci0gICAgICAgICAgICBhbmRyb2lkOmlkPSJAK2lkL2ljb24iCi0gICAgICAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0iQGRpbWVuL21jdjJfZW1iZWRkZWRfc2V0dGluZ3NfaWNvbl9zaXplIgotICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJAZGltZW4vbWN2Ml9lbWJlZGRlZF9zZXR0aW5nc19pY29uX3NpemUiCi0gICAgICAgICAgICBhbmRyb2lkOmxheW91dF9tYXJnaW49IjhkcCIKLSAgICAgICAgICAgIGFuZHJvaWQ6Z3Jhdml0eT0iY2VudGVyIiAvPgotICAgIDwvTGluZWFyTGF5b3V0PgotCi0gICAgPFJlbGF0aXZlTGF5b3V0Ci0gICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJ3cmFwX2NvbnRlbnQiCi0gICAgICAgIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0iQGRpbWVuL21jdjJfZW1iZWRkZWRfc2V0dGluZ3NfaGVpZ2h0IgotICAgICAgICBhbmRyb2lkOmdyYXZpdHk9ImNlbnRlciIKLSAgICAgICAgYW5kcm9pZDpvcmllbnRhdGlvbj0idmVydGljYWwiPgotCi0gICAgICAgIDxUZXh0VmlldwotICAgICAgICAgICAgYW5kcm9pZDppZD0iQCtpZC9tYWluX3RleHQiCi0gICAgICAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0id3JhcF9jb250ZW50IgotICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJAZGltZW4vbWN2Ml9lbWJlZGRlZF9zZXR0aW5nc190ZXh0X2hlaWdodCIKLSAgICAgICAgICAgIGFuZHJvaWQ6Z3Jhdml0eT0iY2VudGVyIgotICAgICAgICAgICAgYW5kcm9pZDpwYWRkaW5nTGVmdD0iMmRwIgotICAgICAgICAgICAgYW5kcm9pZDp0ZXh0Q29sb3I9IkBjb2xvci93aGl0ZSIKLSAgICAgICAgICAgIGFuZHJvaWQ6dGV4dFNpemU9IkBkaW1lbi9tY3YyX2VtYmVkZGVkX3NldHRpbmdzX21haW5fdGV4dF9zaXplIi8+Ci0KLSAgICAgICAgPFRleHRWaWV3Ci0gICAgICAgICAgICBhbmRyb2lkOmlkPSJAK2lkL3N1Yl90ZXh0IgotICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9IndyYXBfY29udGVudCIKLSAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0iQGRpbWVuL21jdjJfZW1iZWRkZWRfc2V0dGluZ3NfdGV4dF9oZWlnaHQiCi0gICAgICAgICAgICBhbmRyb2lkOmxheW91dF9iZWxvdz0iQGlkL21haW5fdGV4dCIKLSAgICAgICAgICAgIGFuZHJvaWQ6Z3Jhdml0eT0iY2VudGVyIgotICAgICAgICAgICAgYW5kcm9pZDpwYWRkaW5nTGVmdD0iMmRwIgotICAgICAgICAgICAgYW5kcm9pZDp0ZXh0Q29sb3I9IkBjb2xvci93aGl0ZV9vcGFjaXR5XzcwIgotICAgICAgICAgICAgYW5kcm9pZDp0ZXh0U2l6ZT0iQGRpbWVuL21jdjJfZW1iZWRkZWRfc2V0dGluZ3Nfc3ViX3RleHRfc2l6ZSIvPgotICAgIDwvUmVsYXRpdmVMYXlvdXQ+Ci08L0xpbmVhckxheW91dD4KLQpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvTWVkaWFDb21wb25lbnRzL3Jlcy9sYXlvdXQvZW1iZWRkZWRfc3ViX3NldHRpbmdzX2xpc3RfaXRlbS54bWwgYi9wYWNrYWdlcy9NZWRpYUNvbXBvbmVudHMvcmVzL2xheW91dC9lbWJlZGRlZF9zdWJfc2V0dGluZ3NfbGlzdF9pdGVtLnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTk0N2E3Mi4uMDAwMDAwMAotLS0gYS9wYWNrYWdlcy9NZWRpYUNvbXBvbmVudHMvcmVzL2xheW91dC9lbWJlZGRlZF9zdWJfc2V0dGluZ3NfbGlzdF9pdGVtLnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDUzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9InV0Zi04Ij8+Ci08IS0tIENvcHlyaWdodCAyMDE4IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKLQotICAgICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKLSAgICAgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgotICAgICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLQotICAgICAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotCi0gICAgIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKLSAgICAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKLSAgICAgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCi0gICAgIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKLSAgICAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCi0tLT4KLQotPExpbmVhckxheW91dCB4bWxuczphbmRyb2lkPSJodHRwOi8vc2NoZW1hcy5hbmRyb2lkLmNvbS9hcGsvcmVzL2FuZHJvaWQiCi0gICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9IndyYXBfY29udGVudCIKLSAgICBhbmRyb2lkOmxheW91dF9oZWlnaHQ9IkBkaW1lbi9tY3YyX2VtYmVkZGVkX3NldHRpbmdzX2hlaWdodCIKLSAgICBhbmRyb2lkOm9yaWVudGF0aW9uPSJob3Jpem9udGFsIgotICAgIGFuZHJvaWQ6YmFja2dyb3VuZD0iQGNvbG9yL2JsYWNrX29wYWNpdHlfNzAiPgotCi0gICAgPExpbmVhckxheW91dAotICAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0id3JhcF9jb250ZW50IgotICAgICAgICBhbmRyb2lkOmxheW91dF9oZWlnaHQ9IkBkaW1lbi9tY3YyX2VtYmVkZGVkX3NldHRpbmdzX2hlaWdodCIKLSAgICAgICAgYW5kcm9pZDpncmF2aXR5PSJjZW50ZXIiCi0gICAgICAgIGFuZHJvaWQ6b3JpZW50YXRpb249Imhvcml6b250YWwiPgotCi0gICAgICAgIDxJbWFnZVZpZXcKLSAgICAgICAgICAgIGFuZHJvaWQ6aWQ9IkAraWQvY2hlY2siCi0gICAgICAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0iQGRpbWVuL21jdjJfZW1iZWRkZWRfc2V0dGluZ3NfaWNvbl9zaXplIgotICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJAZGltZW4vbWN2Ml9lbWJlZGRlZF9zZXR0aW5nc19pY29uX3NpemUiCi0gICAgICAgICAgICBhbmRyb2lkOmxheW91dF9tYXJnaW49IjhkcCIKLSAgICAgICAgICAgIGFuZHJvaWQ6Z3Jhdml0eT0iY2VudGVyIgotICAgICAgICAgICAgYW5kcm9pZDpzcmM9IkBkcmF3YWJsZS9pY19jaGVjayIvPgotICAgIDwvTGluZWFyTGF5b3V0PgotCi0gICAgPFJlbGF0aXZlTGF5b3V0Ci0gICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJ3cmFwX2NvbnRlbnQiCi0gICAgICAgIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0iQGRpbWVuL21jdjJfZW1iZWRkZWRfc2V0dGluZ3NfaGVpZ2h0IgotICAgICAgICBhbmRyb2lkOmdyYXZpdHk9ImNlbnRlciIKLSAgICAgICAgYW5kcm9pZDpvcmllbnRhdGlvbj0idmVydGljYWwiPgotCi0gICAgICAgIDxUZXh0VmlldwotICAgICAgICAgICAgYW5kcm9pZDppZD0iQCtpZC90ZXh0IgotICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9IndyYXBfY29udGVudCIKLSAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0iQGRpbWVuL21jdjJfZW1iZWRkZWRfc2V0dGluZ3NfdGV4dF9oZWlnaHQiCi0gICAgICAgICAgICBhbmRyb2lkOmdyYXZpdHk9ImNlbnRlciIKLSAgICAgICAgICAgIGFuZHJvaWQ6cGFkZGluZ0xlZnQ9IjJkcCIKLSAgICAgICAgICAgIGFuZHJvaWQ6dGV4dENvbG9yPSJAY29sb3Ivd2hpdGUiCi0gICAgICAgICAgICBhbmRyb2lkOnRleHRTaXplPSJAZGltZW4vbWN2Ml9lbWJlZGRlZF9zZXR0aW5nc19tYWluX3RleHRfc2l6ZSIvPgotICAgIDwvUmVsYXRpdmVMYXlvdXQ+Ci08L0xpbmVhckxheW91dD4KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL01lZGlhQ29tcG9uZW50cy9yZXMvbGF5b3V0L2VtYmVkZGVkX3RyYW5zcG9ydF9jb250cm9scy54bWwgYi9wYWNrYWdlcy9NZWRpYUNvbXBvbmVudHMvcmVzL2xheW91dC9lbWJlZGRlZF90cmFuc3BvcnRfY29udHJvbHMueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhM2E1OTU3Li4wMDAwMDAwCi0tLSBhL3BhY2thZ2VzL01lZGlhQ29tcG9uZW50cy9yZXMvbGF5b3V0L2VtYmVkZGVkX3RyYW5zcG9ydF9jb250cm9scy54bWwKKysrIC9kZXYvbnVsbApAQCAtMSwzMSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ1dGYtOCI/PgotPCEtLSBDb3B5cmlnaHQgMjAxOCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0Ci0KLSAgICAgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7Ci0gICAgIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KLSAgICAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0KLSAgICAgICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLQotICAgICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCi0gICAgIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCi0gICAgIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgotICAgICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCi0gICAgIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgotLS0+Ci0KLTxMaW5lYXJMYXlvdXQgeG1sbnM6YW5kcm9pZD0iaHR0cDovL3NjaGVtYXMuYW5kcm9pZC5jb20vYXBrL3Jlcy9hbmRyb2lkIgotICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJtYXRjaF9wYXJlbnQiCi0gICAgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJtYXRjaF9wYXJlbnQiCi0gICAgYW5kcm9pZDpncmF2aXR5PSJjZW50ZXIiCi0gICAgYW5kcm9pZDpvcmllbnRhdGlvbj0iaG9yaXpvbnRhbCIKLSAgICBhbmRyb2lkOnBhZGRpbmdMZWZ0PSJAZGltZW4vbWN2Ml90cmFuc3BvcnRfY29udHJvbHNfcGFkZGluZyIKLSAgICBhbmRyb2lkOnBhZGRpbmdSaWdodD0iQGRpbWVuL21jdjJfdHJhbnNwb3J0X2NvbnRyb2xzX3BhZGRpbmciCi0gICAgYW5kcm9pZDp2aXNpYmlsaXR5PSJ2aXNpYmxlIj4KLQotICAgIDxJbWFnZUJ1dHRvbiBhbmRyb2lkOmlkPSJAK2lkL3ByZXYiIHN0eWxlPSJAc3R5bGUvRW1iZWRkZWRUcmFuc3BvcnRDb250cm9sc0J1dHRvbi5QcmV2aW91cyIgLz4KLSAgICA8SW1hZ2VCdXR0b24gYW5kcm9pZDppZD0iQCtpZC9yZXciIHN0eWxlPSJAc3R5bGUvRW1iZWRkZWRUcmFuc3BvcnRDb250cm9sc0J1dHRvbi5SZXciIC8+Ci0gICAgPEltYWdlQnV0dG9uIGFuZHJvaWQ6aWQ9IkAraWQvcGF1c2UiIHN0eWxlPSJAc3R5bGUvRW1iZWRkZWRUcmFuc3BvcnRDb250cm9sc0J1dHRvbi5QYXVzZSIgLz4KLSAgICA8SW1hZ2VCdXR0b24gYW5kcm9pZDppZD0iQCtpZC9mZndkIiBzdHlsZT0iQHN0eWxlL0VtYmVkZGVkVHJhbnNwb3J0Q29udHJvbHNCdXR0b24uRmZ3ZCIgLz4KLSAgICA8SW1hZ2VCdXR0b24gYW5kcm9pZDppZD0iQCtpZC9uZXh0IiBzdHlsZT0iQHN0eWxlL0VtYmVkZGVkVHJhbnNwb3J0Q29udHJvbHNCdXR0b24uTmV4dCIgLz4KLTwvTGluZWFyTGF5b3V0PgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3BhY2thZ2VzL01lZGlhQ29tcG9uZW50cy9yZXMvbGF5b3V0L2Z1bGxfbGFuZHNjYXBlX211c2ljLnhtbCBiL3BhY2thZ2VzL01lZGlhQ29tcG9uZW50cy9yZXMvbGF5b3V0L2Z1bGxfbGFuZHNjYXBlX211c2ljLnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOGNlNzA1OC4uMDAwMDAwMAotLS0gYS9wYWNrYWdlcy9NZWRpYUNvbXBvbmVudHMvcmVzL2xheW91dC9mdWxsX2xhbmRzY2FwZV9tdXNpYy54bWwKKysrIC9kZXYvbnVsbApAQCAtMSw1NCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ1dGYtOCI/PgotPCEtLSBDb3B5cmlnaHQgMjAxOCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0Ci0KLSAgICAgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7Ci0gICAgIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KLSAgICAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0KLSAgICAgICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLQotICAgICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCi0gICAgIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCi0gICAgIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgotICAgICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCi0gICAgIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgotLS0+Ci0KLTxMaW5lYXJMYXlvdXQgeG1sbnM6YW5kcm9pZD0iaHR0cDovL3NjaGVtYXMuYW5kcm9pZC5jb20vYXBrL3Jlcy9hbmRyb2lkIgotICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJtYXRjaF9wYXJlbnQiCi0gICAgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJtYXRjaF9wYXJlbnQiCi0gICAgYW5kcm9pZDpiYWNrZ3JvdW5kPSIjQjMwMEZGMDAiCi0gICAgYW5kcm9pZDpvcmllbnRhdGlvbj0iaG9yaXpvbnRhbCI+Ci0KLSAgICA8TGluZWFyTGF5b3V0Ci0gICAgICAgIGFuZHJvaWQ6aWQ9IkAraWQvbXVzaWNfaW1hZ2UiCi0gICAgICAgIHN0eWxlPSJAc3R5bGUvRnVsbE11c2ljTGFuZHNjYXBlLkltYWdlIj4KLQotICAgICAgICA8SW1hZ2VWaWV3Ci0gICAgICAgICAgICBhbmRyb2lkOmlkPSJAK2lkL2FsYnVtIgotICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9IkBkaW1lbi9tY3YyX2Z1bGxfYWxidW1faW1hZ2VfbGFuZHNjYXBlX3NpemUiCi0gICAgICAgICAgICBhbmRyb2lkOmxheW91dF9oZWlnaHQ9IkBkaW1lbi9tY3YyX2Z1bGxfYWxidW1faW1hZ2VfbGFuZHNjYXBlX3NpemUiCi0gICAgICAgICAgICBhbmRyb2lkOnNyYz0iQGRyYXdhYmxlL2ljX2RlZmF1bHRfYWxidW1faW1hZ2UiLz4KLSAgICA8L0xpbmVhckxheW91dD4KLQotICAgIDxMaW5lYXJMYXlvdXQKLSAgICAgICAgYW5kcm9pZDppZD0iQCtpZC9tdXNpY190ZXh0IgotICAgICAgICBzdHlsZT0iQHN0eWxlL0Z1bGxNdXNpY0xhbmRzY2FwZS5UZXh0Ij4KLQotICAgICAgICA8VGV4dFZpZXcKLSAgICAgICAgICAgIGFuZHJvaWQ6aWQ9IkAraWQvdGl0bGUiCi0gICAgICAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0id3JhcF9jb250ZW50IgotICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJ3cmFwX2NvbnRlbnQiCi0gICAgICAgICAgICBhbmRyb2lkOnRleHQ9IkBzdHJpbmcvbWN2Ml9tdXNpY190aXRsZV91bmtub3duX3RleHQiCi0gICAgICAgICAgICBhbmRyb2lkOnRleHRTaXplPSIyMHNwIgotICAgICAgICAgICAgYW5kcm9pZDp0ZXh0U3R5bGU9ImJvbGQiCi0gICAgICAgICAgICBhbmRyb2lkOnRleHRDb2xvcj0iI0ZGRkZGRiIgLz4KLSAgICAgICAgPFRleHRWaWV3Ci0gICAgICAgICAgICBhbmRyb2lkOmlkPSJAK2lkL2FydGlzdCIKLSAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJ3cmFwX2NvbnRlbnQiCi0gICAgICAgICAgICBhbmRyb2lkOmxheW91dF9oZWlnaHQ9IndyYXBfY29udGVudCIKLSAgICAgICAgICAgIGFuZHJvaWQ6dGV4dD0iQHN0cmluZy9tY3YyX211c2ljX2FydGlzdF91bmtub3duX3RleHQiCi0gICAgICAgICAgICBhbmRyb2lkOnRleHRTaXplPSIxNnNwIgotICAgICAgICAgICAgYW5kcm9pZDp0ZXh0Q29sb3I9IiNCQkJCQkIiIC8+Ci0gICAgPC9MaW5lYXJMYXlvdXQ+Ci08L0xpbmVhckxheW91dD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9wYWNrYWdlcy9NZWRpYUNvbXBvbmVudHMvcmVzL2xheW91dC9mdWxsX3BvcnRyYWl0X211c2ljLnhtbCBiL3BhY2thZ2VzL01lZGlhQ29tcG9uZW50cy9yZXMvbGF5b3V0L2Z1bGxfcG9ydHJhaXRfbXVzaWMueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3NWYxYmIzLi4wMDAwMDAwCi0tLSBhL3BhY2thZ2VzL01lZGlhQ29tcG9uZW50cy9yZXMvbGF5b3V0L2Z1bGxfcG9ydHJhaXRfbXVzaWMueG1sCisrKyAvZGV2L251bGwKQEAgLTEsNTMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KLTwhLS0gQ29weXJpZ2h0IDIwMTggVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAotCi0gICAgIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwotICAgICB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCi0gICAgIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotCi0gICAgICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0KLSAgICAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQotICAgICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAotICAgICBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KLSAgICAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAotICAgICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KLS0tPgotCi08TGluZWFyTGF5b3V0IHhtbG5zOmFuZHJvaWQ9Imh0dHA6Ly9zY2hlbWFzLmFuZHJvaWQuY29tL2Fway9yZXMvYW5kcm9pZCIKLSAgICBhbmRyb2lkOmxheW91dF93aWR0aD0ibWF0Y2hfcGFyZW50IgotICAgIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0ibWF0Y2hfcGFyZW50IgotICAgIGFuZHJvaWQ6b3JpZW50YXRpb249InZlcnRpY2FsIj4KLQotICAgIDxMaW5lYXJMYXlvdXQKLSAgICAgICAgYW5kcm9pZDppZD0iQCtpZC9tdXNpY19pbWFnZSIKLSAgICAgICAgc3R5bGU9IkBzdHlsZS9GdWxsTXVzaWNQb3J0cmFpdC5JbWFnZSI+Ci0KLSAgICAgICAgPEltYWdlVmlldwotICAgICAgICAgICAgYW5kcm9pZDppZD0iQCtpZC9hbGJ1bSIKLSAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJAZGltZW4vbWN2Ml9mdWxsX2FsYnVtX2ltYWdlX3BvcnRyYWl0X3NpemUiCi0gICAgICAgICAgICBhbmRyb2lkOmxheW91dF9oZWlnaHQ9IkBkaW1lbi9tY3YyX2Z1bGxfYWxidW1faW1hZ2VfcG9ydHJhaXRfc2l6ZSIKLSAgICAgICAgICAgIGFuZHJvaWQ6c3JjPSJAZHJhd2FibGUvaWNfZGVmYXVsdF9hbGJ1bV9pbWFnZSIvPgotICAgIDwvTGluZWFyTGF5b3V0PgotCi0gICAgPExpbmVhckxheW91dAotICAgICAgICBhbmRyb2lkOmlkPSJAK2lkL211c2ljX3RleHQiCi0gICAgICAgIHN0eWxlPSJAc3R5bGUvRnVsbE11c2ljUG9ydHJhaXQuVGV4dCI+Ci0KLSAgICAgICAgPFRleHRWaWV3Ci0gICAgICAgICAgICBhbmRyb2lkOmlkPSJAK2lkL3RpdGxlIgotICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9IkBkaW1lbi9tY3YyX2Z1bGxfYWxidW1faW1hZ2VfcG9ydHJhaXRfc2l6ZSIKLSAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0id3JhcF9jb250ZW50IgotICAgICAgICAgICAgYW5kcm9pZDp0ZXh0PSJAc3RyaW5nL21jdjJfbXVzaWNfdGl0bGVfdW5rbm93bl90ZXh0IgotICAgICAgICAgICAgYW5kcm9pZDp0ZXh0U2l6ZT0iMjBzcCIKLSAgICAgICAgICAgIGFuZHJvaWQ6dGV4dFN0eWxlPSJib2xkIgotICAgICAgICAgICAgYW5kcm9pZDp0ZXh0Q29sb3I9IiNGRkZGRkYiIC8+Ci0gICAgICAgIDxUZXh0VmlldwotICAgICAgICAgICAgYW5kcm9pZDppZD0iQCtpZC9hcnRpc3QiCi0gICAgICAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0iQGRpbWVuL21jdjJfZnVsbF9hbGJ1bV9pbWFnZV9wb3J0cmFpdF9zaXplIgotICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJ3cmFwX2NvbnRlbnQiCi0gICAgICAgICAgICBhbmRyb2lkOnRleHQ9IkBzdHJpbmcvbWN2Ml9tdXNpY19hcnRpc3RfdW5rbm93bl90ZXh0IgotICAgICAgICAgICAgYW5kcm9pZDp0ZXh0U2l6ZT0iMTZzcCIKLSAgICAgICAgICAgIGFuZHJvaWQ6dGV4dENvbG9yPSIjQkJCQkJCIiAvPgotICAgIDwvTGluZWFyTGF5b3V0PgotPC9MaW5lYXJMYXlvdXQ+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvTWVkaWFDb21wb25lbnRzL3Jlcy9sYXlvdXQvZnVsbF9zZXR0aW5nc19saXN0X2l0ZW0ueG1sIGIvcGFja2FnZXMvTWVkaWFDb21wb25lbnRzL3Jlcy9sYXlvdXQvZnVsbF9zZXR0aW5nc19saXN0X2l0ZW0ueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmOTJlYTVlLi4wMDAwMDAwCi0tLSBhL3BhY2thZ2VzL01lZGlhQ29tcG9uZW50cy9yZXMvbGF5b3V0L2Z1bGxfc2V0dGluZ3NfbGlzdF9pdGVtLnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDYyICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9InV0Zi04Ij8+Ci08IS0tIENvcHlyaWdodCAyMDE4IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKLQotICAgICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKLSAgICAgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgotICAgICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLQotICAgICAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotCi0gICAgIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKLSAgICAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKLSAgICAgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCi0gICAgIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKLSAgICAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCi0tLT4KLQotPExpbmVhckxheW91dCB4bWxuczphbmRyb2lkPSJodHRwOi8vc2NoZW1hcy5hbmRyb2lkLmNvbS9hcGsvcmVzL2FuZHJvaWQiCi0gICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9IndyYXBfY29udGVudCIKLSAgICBhbmRyb2lkOmxheW91dF9oZWlnaHQ9IkBkaW1lbi9tY3YyX2Z1bGxfc2V0dGluZ3NfaGVpZ2h0IgotICAgIGFuZHJvaWQ6b3JpZW50YXRpb249Imhvcml6b250YWwiCi0gICAgYW5kcm9pZDpiYWNrZ3JvdW5kPSJAY29sb3IvYmxhY2tfb3BhY2l0eV83MCI+Ci0KLSAgICA8TGluZWFyTGF5b3V0Ci0gICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJ3cmFwX2NvbnRlbnQiCi0gICAgICAgIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0iQGRpbWVuL21jdjJfZnVsbF9zZXR0aW5nc19oZWlnaHQiCi0gICAgICAgIGFuZHJvaWQ6Z3Jhdml0eT0iY2VudGVyIgotICAgICAgICBhbmRyb2lkOm9yaWVudGF0aW9uPSJob3Jpem9udGFsIj4KLQotICAgICAgICA8SW1hZ2VWaWV3Ci0gICAgICAgICAgICBhbmRyb2lkOmlkPSJAK2lkL2ljb24iCi0gICAgICAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0iQGRpbWVuL21jdjJfZnVsbF9zZXR0aW5nc19pY29uX3NpemUiCi0gICAgICAgICAgICBhbmRyb2lkOmxheW91dF9oZWlnaHQ9IkBkaW1lbi9tY3YyX2Z1bGxfc2V0dGluZ3NfaWNvbl9zaXplIgotICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfbWFyZ2luPSI4ZHAiCi0gICAgICAgICAgICBhbmRyb2lkOmdyYXZpdHk9ImNlbnRlciIvPgotICAgIDwvTGluZWFyTGF5b3V0PgotCi0gICAgPFJlbGF0aXZlTGF5b3V0Ci0gICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJ3cmFwX2NvbnRlbnQiCi0gICAgICAgIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0iQGRpbWVuL21jdjJfZnVsbF9zZXR0aW5nc19oZWlnaHQiCi0gICAgICAgIGFuZHJvaWQ6Z3Jhdml0eT0iY2VudGVyIgotICAgICAgICBhbmRyb2lkOm9yaWVudGF0aW9uPSJ2ZXJ0aWNhbCI+Ci0KLSAgICAgICAgPFRleHRWaWV3Ci0gICAgICAgICAgICBhbmRyb2lkOmlkPSJAK2lkL21haW5fdGV4dCIKLSAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJ3cmFwX2NvbnRlbnQiCi0gICAgICAgICAgICBhbmRyb2lkOmxheW91dF9oZWlnaHQ9IkBkaW1lbi9tY3YyX2Z1bGxfc2V0dGluZ3NfdGV4dF9oZWlnaHQiCi0gICAgICAgICAgICBhbmRyb2lkOnBhZGRpbmdMZWZ0PSIyZHAiCi0gICAgICAgICAgICBhbmRyb2lkOmdyYXZpdHk9ImNlbnRlciIKLSAgICAgICAgICAgIGFuZHJvaWQ6dGV4dENvbG9yPSJAY29sb3Ivd2hpdGUiCi0gICAgICAgICAgICBhbmRyb2lkOnRleHRTaXplPSJAZGltZW4vbWN2Ml9mdWxsX3NldHRpbmdzX21haW5fdGV4dF9zaXplIi8+Ci0KLSAgICAgICAgPFRleHRWaWV3Ci0gICAgICAgICAgICBhbmRyb2lkOmlkPSJAK2lkL3N1Yl90ZXh0IgotICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9IndyYXBfY29udGVudCIKLSAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0iQGRpbWVuL21jdjJfZnVsbF9zZXR0aW5nc190ZXh0X2hlaWdodCIKLSAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X2JlbG93PSJAaWQvbWFpbl90ZXh0IgotICAgICAgICAgICAgYW5kcm9pZDpncmF2aXR5PSJjZW50ZXIiCi0gICAgICAgICAgICBhbmRyb2lkOnBhZGRpbmdMZWZ0PSIyZHAiCi0gICAgICAgICAgICBhbmRyb2lkOnRleHRDb2xvcj0iQGNvbG9yL3doaXRlX29wYWNpdHlfNzAiCi0gICAgICAgICAgICBhbmRyb2lkOnRleHRTaXplPSJAZGltZW4vbWN2Ml9mdWxsX3NldHRpbmdzX3N1Yl90ZXh0X3NpemUiLz4KLSAgICA8L1JlbGF0aXZlTGF5b3V0PgotPC9MaW5lYXJMYXlvdXQ+CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9NZWRpYUNvbXBvbmVudHMvcmVzL2xheW91dC9mdWxsX3N1Yl9zZXR0aW5nc19saXN0X2l0ZW0ueG1sIGIvcGFja2FnZXMvTWVkaWFDb21wb25lbnRzL3Jlcy9sYXlvdXQvZnVsbF9zdWJfc2V0dGluZ3NfbGlzdF9pdGVtLnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDkxMjhkMC4uMDAwMDAwMAotLS0gYS9wYWNrYWdlcy9NZWRpYUNvbXBvbmVudHMvcmVzL2xheW91dC9mdWxsX3N1Yl9zZXR0aW5nc19saXN0X2l0ZW0ueG1sCisrKyAvZGV2L251bGwKQEAgLTEsNTMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KLTwhLS0gQ29weXJpZ2h0IDIwMTggVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAotCi0gICAgIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwotICAgICB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCi0gICAgIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotCi0gICAgICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0KLSAgICAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQotICAgICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAotICAgICBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KLSAgICAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAotICAgICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KLS0tPgotCi08TGluZWFyTGF5b3V0IHhtbG5zOmFuZHJvaWQ9Imh0dHA6Ly9zY2hlbWFzLmFuZHJvaWQuY29tL2Fway9yZXMvYW5kcm9pZCIKLSAgICBhbmRyb2lkOmxheW91dF93aWR0aD0id3JhcF9jb250ZW50IgotICAgIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0iQGRpbWVuL21jdjJfZnVsbF9zZXR0aW5nc19oZWlnaHQiCi0gICAgYW5kcm9pZDpvcmllbnRhdGlvbj0iaG9yaXpvbnRhbCIKLSAgICBhbmRyb2lkOmJhY2tncm91bmQ9IkBjb2xvci9ibGFja19vcGFjaXR5XzcwIj4KLQotICAgIDxMaW5lYXJMYXlvdXQKLSAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9IndyYXBfY29udGVudCIKLSAgICAgICAgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJAZGltZW4vbWN2Ml9mdWxsX3NldHRpbmdzX2hlaWdodCIKLSAgICAgICAgYW5kcm9pZDpncmF2aXR5PSJjZW50ZXIiCi0gICAgICAgIGFuZHJvaWQ6b3JpZW50YXRpb249Imhvcml6b250YWwiPgotCi0gICAgICAgIDxJbWFnZVZpZXcKLSAgICAgICAgICAgIGFuZHJvaWQ6aWQ9IkAraWQvY2hlY2siCi0gICAgICAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0iQGRpbWVuL21jdjJfZnVsbF9zZXR0aW5nc19pY29uX3NpemUiCi0gICAgICAgICAgICBhbmRyb2lkOmxheW91dF9oZWlnaHQ9IkBkaW1lbi9tY3YyX2Z1bGxfc2V0dGluZ3NfaWNvbl9zaXplIgotICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfbWFyZ2luPSI4ZHAiCi0gICAgICAgICAgICBhbmRyb2lkOmdyYXZpdHk9ImNlbnRlciIKLSAgICAgICAgICAgIGFuZHJvaWQ6c3JjPSJAZHJhd2FibGUvaWNfY2hlY2siLz4KLSAgICA8L0xpbmVhckxheW91dD4KLQotICAgIDxSZWxhdGl2ZUxheW91dAotICAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0id3JhcF9jb250ZW50IgotICAgICAgICBhbmRyb2lkOmxheW91dF9oZWlnaHQ9IkBkaW1lbi9tY3YyX2Z1bGxfc2V0dGluZ3NfaGVpZ2h0IgotICAgICAgICBhbmRyb2lkOmdyYXZpdHk9ImNlbnRlciIKLSAgICAgICAgYW5kcm9pZDpvcmllbnRhdGlvbj0idmVydGljYWwiPgotCi0gICAgICAgIDxUZXh0VmlldwotICAgICAgICAgICAgYW5kcm9pZDppZD0iQCtpZC90ZXh0IgotICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9IndyYXBfY29udGVudCIKLSAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0iQGRpbWVuL21jdjJfZnVsbF9zZXR0aW5nc190ZXh0X2hlaWdodCIKLSAgICAgICAgICAgIGFuZHJvaWQ6Z3Jhdml0eT0iY2VudGVyIgotICAgICAgICAgICAgYW5kcm9pZDpwYWRkaW5nTGVmdD0iMmRwIgotICAgICAgICAgICAgYW5kcm9pZDp0ZXh0Q29sb3I9IkBjb2xvci93aGl0ZSIKLSAgICAgICAgICAgIGFuZHJvaWQ6dGV4dFNpemU9IkBkaW1lbi9tY3YyX2Z1bGxfc2V0dGluZ3NfbWFpbl90ZXh0X3NpemUiLz4KLSAgICA8L1JlbGF0aXZlTGF5b3V0PgotPC9MaW5lYXJMYXlvdXQ+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvTWVkaWFDb21wb25lbnRzL3Jlcy9sYXlvdXQvZnVsbF90cmFuc3BvcnRfY29udHJvbHMueG1sIGIvcGFja2FnZXMvTWVkaWFDb21wb25lbnRzL3Jlcy9sYXlvdXQvZnVsbF90cmFuc3BvcnRfY29udHJvbHMueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwOTE0Nzg1Li4wMDAwMDAwCi0tLSBhL3BhY2thZ2VzL01lZGlhQ29tcG9uZW50cy9yZXMvbGF5b3V0L2Z1bGxfdHJhbnNwb3J0X2NvbnRyb2xzLnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDMxICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9InV0Zi04Ij8+Ci08IS0tIENvcHlyaWdodCAyMDE4IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKLQotICAgICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKLSAgICAgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgotICAgICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLQotICAgICAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotCi0gICAgIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKLSAgICAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKLSAgICAgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCi0gICAgIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKLSAgICAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCi0tLT4KLQotPExpbmVhckxheW91dCB4bWxuczphbmRyb2lkPSJodHRwOi8vc2NoZW1hcy5hbmRyb2lkLmNvbS9hcGsvcmVzL2FuZHJvaWQiCi0gICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9Im1hdGNoX3BhcmVudCIKLSAgICBhbmRyb2lkOmxheW91dF9oZWlnaHQ9Im1hdGNoX3BhcmVudCIKLSAgICBhbmRyb2lkOmdyYXZpdHk9ImNlbnRlciIKLSAgICBhbmRyb2lkOm9yaWVudGF0aW9uPSJob3Jpem9udGFsIgotICAgIGFuZHJvaWQ6cGFkZGluZ0xlZnQ9IkBkaW1lbi9tY3YyX3RyYW5zcG9ydF9jb250cm9sc19wYWRkaW5nIgotICAgIGFuZHJvaWQ6cGFkZGluZ1JpZ2h0PSJAZGltZW4vbWN2Ml90cmFuc3BvcnRfY29udHJvbHNfcGFkZGluZyIKLSAgICBhbmRyb2lkOnZpc2liaWxpdHk9InZpc2libGUiPgotCi0gICAgPEltYWdlQnV0dG9uIGFuZHJvaWQ6aWQ9IkAraWQvcHJldiIgc3R5bGU9IkBzdHlsZS9GdWxsVHJhbnNwb3J0Q29udHJvbHNCdXR0b24uUHJldmlvdXMiIC8+Ci0gICAgPEltYWdlQnV0dG9uIGFuZHJvaWQ6aWQ9IkAraWQvcmV3IiBzdHlsZT0iQHN0eWxlL0Z1bGxUcmFuc3BvcnRDb250cm9sc0J1dHRvbi5SZXciIC8+Ci0gICAgPEltYWdlQnV0dG9uIGFuZHJvaWQ6aWQ9IkAraWQvcGF1c2UiIHN0eWxlPSJAc3R5bGUvRnVsbFRyYW5zcG9ydENvbnRyb2xzQnV0dG9uLlBhdXNlIiAvPgotICAgIDxJbWFnZUJ1dHRvbiBhbmRyb2lkOmlkPSJAK2lkL2Zmd2QiIHN0eWxlPSJAc3R5bGUvRnVsbFRyYW5zcG9ydENvbnRyb2xzQnV0dG9uLkZmd2QiIC8+Ci0gICAgPEltYWdlQnV0dG9uIGFuZHJvaWQ6aWQ9IkAraWQvbmV4dCIgc3R5bGU9IkBzdHlsZS9GdWxsVHJhbnNwb3J0Q29udHJvbHNCdXR0b24uTmV4dCIgLz4KLTwvTGluZWFyTGF5b3V0PgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvTWVkaWFDb21wb25lbnRzL3Jlcy9sYXlvdXQvbWVkaWFfY29udHJvbGxlci54bWwgYi9wYWNrYWdlcy9NZWRpYUNvbXBvbmVudHMvcmVzL2xheW91dC9tZWRpYV9jb250cm9sbGVyLnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDY1OGYwNC4uMDAwMDAwMAotLS0gYS9wYWNrYWdlcy9NZWRpYUNvbXBvbmVudHMvcmVzL2xheW91dC9tZWRpYV9jb250cm9sbGVyLnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDI2NSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ1dGYtOCI/PgotPCEtLSBDb3B5cmlnaHQgKEMpIDIwMTcgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAotCi0gICAgIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwotICAgICB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCi0gICAgIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotCi0gICAgICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0KLSAgICAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQotICAgICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAotICAgICBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KLSAgICAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAotICAgICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KLS0tPgotCi08TGluZWFyTGF5b3V0IHhtbG5zOmFuZHJvaWQ9Imh0dHA6Ly9zY2hlbWFzLmFuZHJvaWQuY29tL2Fway9yZXMvYW5kcm9pZCIKLSAgICBhbmRyb2lkOmxheW91dF93aWR0aD0ibWF0Y2hfcGFyZW50IgotICAgIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0ibWF0Y2hfcGFyZW50IgotICAgIGFuZHJvaWQ6b3JpZW50YXRpb249InZlcnRpY2FsIgotICAgIGFuZHJvaWQ6bGF5b3V0RGlyZWN0aW9uPSJsdHIiPgotCi0gICAgPFJlbGF0aXZlTGF5b3V0Ci0gICAgICAgIGFuZHJvaWQ6aWQ9IkAraWQvdGl0bGVfYmFyIgotICAgICAgICBhbmRyb2lkOmJhY2tncm91bmQ9IkBsYXlvdXQvdGl0bGVfYmFyX2dyYWRpZW50IgotICAgICAgICBzdHlsZT0iQHN0eWxlL1RpdGxlQmFyIj4KLQotICAgICAgICA8TGluZWFyTGF5b3V0Ci0gICAgICAgICAgICBhbmRyb2lkOmlkPSJAK2lkL3RpdGxlX2Jhcl9sZWZ0IgotICAgICAgICAgICAgYW5kcm9pZDpncmF2aXR5PSJjZW50ZXIiCi0gICAgICAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0id3JhcF9jb250ZW50IgotICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJ3cmFwX2NvbnRlbnQiCi0gICAgICAgICAgICBhbmRyb2lkOmxheW91dF9hbGlnblBhcmVudExlZnQ9InRydWUiCi0gICAgICAgICAgICBhbmRyb2lkOmxheW91dF9jZW50ZXJWZXJ0aWNhbD0idHJ1ZSIKLSAgICAgICAgICAgIGFuZHJvaWQ6b3JpZW50YXRpb249Imhvcml6b250YWwiPgotCi0gICAgICAgICAgICA8SW1hZ2VCdXR0b24KLSAgICAgICAgICAgICAgICBhbmRyb2lkOmlkPSJAK2lkL2JhY2siCi0gICAgICAgICAgICAgICAgYW5kcm9pZDpjbGlja2FibGU9InRydWUiCi0gICAgICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9IndyYXBfY29udGVudCIKLSAgICAgICAgICAgICAgICBhbmRyb2lkOmxheW91dF9oZWlnaHQ9IndyYXBfY29udGVudCIKLSAgICAgICAgICAgICAgICBhbmRyb2lkOmxheW91dF9hbGlnblBhcmVudFN0YXJ0PSJ0cnVlIgotICAgICAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X2NlbnRlclZlcnRpY2FsPSJ0cnVlIgotICAgICAgICAgICAgICAgIGFuZHJvaWQ6cGFkZGluZ0xlZnQ9IjVkaXAiCi0gICAgICAgICAgICAgICAgYW5kcm9pZDp2aXNpYmlsaXR5PSJ2aXNpYmxlIgotICAgICAgICAgICAgICAgIHN0eWxlPSJAc3R5bGUvVGl0bGVCYXJCdXR0b24uQmFjayIvPgotCi0gICAgICAgICAgICA8VGV4dFZpZXcKLSAgICAgICAgICAgICAgICBhbmRyb2lkOmlkPSJAK2lkL3RpdGxlX3RleHQiCi0gICAgICAgICAgICAgICAgYW5kcm9pZDplbGxpcHNpemU9ImVuZCIKLSAgICAgICAgICAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0id3JhcF9jb250ZW50IgotICAgICAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0id3JhcF9jb250ZW50IgotICAgICAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X3RvUmlnaHRPZj0iQGlkL2JhY2siCi0gICAgICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfY2VudGVyVmVydGljYWw9InRydWUiCi0gICAgICAgICAgICAgICAgYW5kcm9pZDptYXhMaW5lcz0iMSIKLSAgICAgICAgICAgICAgICBhbmRyb2lkOnBhZGRpbmdMZWZ0PSI1ZGlwIgotICAgICAgICAgICAgICAgIGFuZHJvaWQ6cGFkZGluZ1JpZ2h0PSI1ZGlwIgotICAgICAgICAgICAgICAgIGFuZHJvaWQ6dGV4dFNpemU9IjE1c3AiCi0gICAgICAgICAgICAgICAgYW5kcm9pZDp0ZXh0Q29sb3I9IiNGRkZGRkZGRiIvPgotICAgICAgICA8L0xpbmVhckxheW91dD4KLQotICAgICAgICA8TGluZWFyTGF5b3V0Ci0gICAgICAgICAgICBhbmRyb2lkOmlkPSJAK2lkL3RpdGxlX2Jhcl9yaWdodCIKLSAgICAgICAgICAgIGFuZHJvaWQ6Z3Jhdml0eT0iY2VudGVyIgotICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9IndyYXBfY29udGVudCIKLSAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0id3JhcF9jb250ZW50IgotICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfYWxpZ25QYXJlbnRSaWdodD0idHJ1ZSIKLSAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X2NlbnRlclZlcnRpY2FsPSJ0cnVlIgotICAgICAgICAgICAgYW5kcm9pZDpvcmllbnRhdGlvbj0iaG9yaXpvbnRhbCI+Ci0KLSAgICAgICAgICAgIDxMaW5lYXJMYXlvdXQKLSAgICAgICAgICAgICAgICBhbmRyb2lkOmlkPSJAK2lkL2FkX2V4dGVybmFsX2xpbmsiCi0gICAgICAgICAgICAgICAgYW5kcm9pZDpjbGlja2FibGU9InRydWUiCi0gICAgICAgICAgICAgICAgYW5kcm9pZDpncmF2aXR5PSJjZW50ZXIiCi0gICAgICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9IndyYXBfY29udGVudCIKLSAgICAgICAgICAgICAgICBhbmRyb2lkOmxheW91dF9oZWlnaHQ9IndyYXBfY29udGVudCIKLSAgICAgICAgICAgICAgICBhbmRyb2lkOmxheW91dF9hbGlnblBhcmVudFJpZ2h0PSJ0cnVlIgotICAgICAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X2NlbnRlclZlcnRpY2FsPSJ0cnVlIgotICAgICAgICAgICAgICAgIGFuZHJvaWQ6cGFkZGluZ0xlZnQ9IjVkaXAiCi0gICAgICAgICAgICAgICAgYW5kcm9pZDpwYWRkaW5nUmlnaHQ9IjEwZGlwIgotICAgICAgICAgICAgICAgIGFuZHJvaWQ6b3JpZW50YXRpb249Imhvcml6b250YWwiCi0gICAgICAgICAgICAgICAgYW5kcm9pZDp2aXNpYmlsaXR5PSJnb25lIj4KLQotICAgICAgICAgICAgICAgIDxUZXh0VmlldwotICAgICAgICAgICAgICAgICAgICBhbmRyb2lkOmlkPSJAK2lkL2FkX3RleHQiCi0gICAgICAgICAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJ3cmFwX2NvbnRlbnQiCi0gICAgICAgICAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0id3JhcF9jb250ZW50IgotICAgICAgICAgICAgICAgICAgICBhbmRyb2lkOmxheW91dF9jZW50ZXJWZXJ0aWNhbD0idHJ1ZSIKLSAgICAgICAgICAgICAgICAgICAgYW5kcm9pZDpwYWRkaW5nUmlnaHQ9IjVkaXAiCi0gICAgICAgICAgICAgICAgICAgIGFuZHJvaWQ6dGV4dD0iQHN0cmluZy9NZWRpYUNvbnRyb2xWaWV3Ml9hZF90ZXh0IgotICAgICAgICAgICAgICAgICAgICBhbmRyb2lkOnRleHRTaXplPSIxMHNwIgotICAgICAgICAgICAgICAgICAgICBhbmRyb2lkOnRleHRDb2xvcj0iI0ZGRkZGRkZGIiAvPgotCi0gICAgICAgICAgICAgICAgPEltYWdlQnV0dG9uCi0gICAgICAgICAgICAgICAgICAgIGFuZHJvaWQ6aWQ9IkAraWQvYWRfbGF1bmNoIgotICAgICAgICAgICAgICAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0id3JhcF9jb250ZW50IgotICAgICAgICAgICAgICAgICAgICBhbmRyb2lkOmxheW91dF9oZWlnaHQ9IndyYXBfY29udGVudCIKLSAgICAgICAgICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfY2VudGVyVmVydGljYWw9InRydWUiCi0gICAgICAgICAgICAgICAgICAgIHN0eWxlPSJAc3R5bGUvVGl0bGVCYXJCdXR0b24uTGF1bmNoIiAvPgotICAgICAgICAgICAgPC9MaW5lYXJMYXlvdXQ+Ci0KLSAgICAgICAgICAgIDx2aWV3IGNsYXNzPSJjb20uYW5kcm9pZC5zdXBwb3J0Lm1lZGlhcm91dGVyLmFwcC5NZWRpYVJvdXRlQnV0dG9uIgotICAgICAgICAgICAgICAgIGFuZHJvaWQ6aWQ9IkAraWQvY2FzdCIKLSAgICAgICAgICAgICAgICBhbmRyb2lkOmxheW91dF9jZW50ZXJWZXJ0aWNhbD0idHJ1ZSIKLSAgICAgICAgICAgICAgICBhbmRyb2lkOnZpc2liaWxpdHk9ImdvbmUiCi0gICAgICAgICAgICAgICAgYW5kcm9pZDpjb250ZW50RGVzY3JpcHRpb249IkBzdHJpbmcvbXJfYnV0dG9uX2NvbnRlbnRfZGVzY3JpcHRpb24iCi0gICAgICAgICAgICAgICAgc3R5bGU9IkBzdHlsZS9UaXRsZUJhckJ1dHRvbiIgLz4KLSAgICAgICAgPC9MaW5lYXJMYXlvdXQ+Ci0KLSAgICA8L1JlbGF0aXZlTGF5b3V0PgotCi0gICAgPExpbmVhckxheW91dAotICAgICAgICBhbmRyb2lkOmlkPSJAK2lkL2NlbnRlcl92aWV3IgotICAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0ibWF0Y2hfcGFyZW50IgotICAgICAgICBhbmRyb2lkOmxheW91dF9oZWlnaHQ9IjBkcCIKLSAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2VpZ2h0PSIxIgotICAgICAgICBhbmRyb2lkOmdyYXZpdHk9ImNlbnRlciIKLSAgICAgICAgYW5kcm9pZDpvcmllbnRhdGlvbj0idmVydGljYWwiPgotICAgIDwvTGluZWFyTGF5b3V0PgotCi0gICAgPExpbmVhckxheW91dAotICAgICAgICBhbmRyb2lkOmlkPSJAK2lkL21pbmltYWxfZXh0cmFfdmlldyIKLSAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9Im1hdGNoX3BhcmVudCIKLSAgICAgICAgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJ3cmFwX2NvbnRlbnQiCi0gICAgICAgIGFuZHJvaWQ6Z3Jhdml0eT0icmlnaHQiPgotCi0gICAgICAgIDxJbWFnZUJ1dHRvbgotICAgICAgICAgICAgYW5kcm9pZDppZD0iQCtpZC9mdWxsc2NyZWVuIgotICAgICAgICAgICAgYW5kcm9pZDpncmF2aXR5PSJyaWdodCIKLSAgICAgICAgICAgIHN0eWxlPSJAc3R5bGUvQm90dG9tQmFyQnV0dG9uLkZ1bGxTY3JlZW4iIC8+Ci0gICAgPC9MaW5lYXJMYXlvdXQ+Ci0KLSAgICA8UmVsYXRpdmVMYXlvdXQKLSAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9Im1hdGNoX3BhcmVudCIKLSAgICAgICAgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJAZGltZW4vbWN2Ml9jdXN0b21fcHJvZ3Jlc3NfdGh1bWJfc2l6ZSI+Ci0KLSAgICAgICAgPFNlZWtCYXIKLSAgICAgICAgICAgIGFuZHJvaWQ6aWQ9IkAraWQvcHJvZ3Jlc3MiCi0gICAgICAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0ibWF0Y2hfcGFyZW50IgotICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJAZGltZW4vbWN2Ml9jdXN0b21fcHJvZ3Jlc3NfdGh1bWJfc2l6ZSIKLSAgICAgICAgICAgIGFuZHJvaWQ6Y29udGVudERlc2NyaXB0aW9uPSJAc3RyaW5nL21jdjJfc2Vla19iYXJfZGVzYyIKLSAgICAgICAgICAgIGFuZHJvaWQ6cGFkZGluZz0iMGRwIgotICAgICAgICAgICAgYW5kcm9pZDptYXhIZWlnaHQ9IkBkaW1lbi9tY3YyX2N1c3RvbV9wcm9ncmVzc19tYXhfc2l6ZSIKLSAgICAgICAgICAgIGFuZHJvaWQ6bWluSGVpZ2h0PSJAZGltZW4vbWN2Ml9jdXN0b21fcHJvZ3Jlc3NfbWF4X3NpemUiCi0gICAgICAgICAgICBhbmRyb2lkOmVsZXZhdGlvbj0iMTBkcCIvPgotCi0gICAgICAgIDxWaWV3Ci0gICAgICAgICAgICBhbmRyb2lkOmlkPSJAK2lkL3Byb2dyZXNzX2J1ZmZlciIKLSAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJtYXRjaF9wYXJlbnQiCi0gICAgICAgICAgICBhbmRyb2lkOmxheW91dF9oZWlnaHQ9IkBkaW1lbi9tY3YyX2J1ZmZlcl92aWV3X2hlaWdodCIKLSAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X2FsaWduUGFyZW50Qm90dG9tPSJ0cnVlIgotICAgICAgICAgICAgYW5kcm9pZDpiYWNrZ3JvdW5kPSJAY29sb3IvYm90dG9tX2Jhcl9iYWNrZ3JvdW5kIgotICAgICAgICAgICAgYW5kcm9pZDplbGV2YXRpb249IjBkcCIvPgotICAgIDwvUmVsYXRpdmVMYXlvdXQ+Ci0KLSAgICA8UmVsYXRpdmVMYXlvdXQKLSAgICAgICAgYW5kcm9pZDppZD0iQCtpZC9ib3R0b21fYmFyIgotICAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0ibWF0Y2hfcGFyZW50IgotICAgICAgICBhbmRyb2lkOmxheW91dF9oZWlnaHQ9IjQ0ZHAiCi0gICAgICAgIGFuZHJvaWQ6b3JpZW50YXRpb249Imhvcml6b250YWwiCi0gICAgICAgIGFuZHJvaWQ6YmFja2dyb3VuZD0iQGNvbG9yL2JvdHRvbV9iYXJfYmFja2dyb3VuZCI+Ci0KLSAgICAgICAgPExpbmVhckxheW91dAotICAgICAgICAgICAgYW5kcm9pZDppZD0iQCtpZC9ib3R0b21fYmFyX2xlZnQiCi0gICAgICAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0id3JhcF9jb250ZW50IgotICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJtYXRjaF9wYXJlbnQiCi0gICAgICAgICAgICBhbmRyb2lkOmxheW91dF9hbGlnblBhcmVudFN0YXJ0PSJ0cnVlIgotICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfY2VudGVyVmVydGljYWw9InRydWUiPgotCi0gICAgICAgICAgICA8VGV4dFZpZXcKLSAgICAgICAgICAgICAgICBhbmRyb2lkOmlkPSJAK2lkL2FkX3NraXBfdGltZSIKLSAgICAgICAgICAgICAgICBhbmRyb2lkOmdyYXZpdHk9ImNlbnRlciIKLSAgICAgICAgICAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0id3JhcF9jb250ZW50IgotICAgICAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0ibWF0Y2hfcGFyZW50IgotICAgICAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X21hcmdpbkxlZnQ9IjRkcCIKLSAgICAgICAgICAgICAgICBhbmRyb2lkOnRleHRTaXplPSIxMnNwIgotICAgICAgICAgICAgICAgIGFuZHJvaWQ6dGV4dENvbG9yPSIjRkZGRkZGIgotICAgICAgICAgICAgICAgIGFuZHJvaWQ6dmlzaWJpbGl0eT0iZ29uZSIgLz4KLSAgICAgICAgPC9MaW5lYXJMYXlvdXQ+Ci0KLSAgICAgICAgPExpbmVhckxheW91dAotICAgICAgICAgICAgYW5kcm9pZDppZD0iQCtpZC90aW1lIgotICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9IndyYXBfY29udGVudCIKLSAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0ibWF0Y2hfcGFyZW50IgotICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfdG9SaWdodE9mPSJAaWQvYm90dG9tX2Jhcl9sZWZ0IgotICAgICAgICAgICAgYW5kcm9pZDpwYWRkaW5nTGVmdD0iMTBkcCIKLSAgICAgICAgICAgIGFuZHJvaWQ6cGFkZGluZ1JpZ2h0PSIxMGRwIgotICAgICAgICAgICAgYW5kcm9pZDpncmF2aXR5PSJjZW50ZXIiID4KLQotICAgICAgICAgICAgPFRleHRWaWV3Ci0gICAgICAgICAgICAgICAgYW5kcm9pZDppZD0iQCtpZC90aW1lX2N1cnJlbnQiCi0gICAgICAgICAgICAgICAgc3R5bGU9IkBzdHlsZS9UaW1lVGV4dC5DdXJyZW50Ii8+Ci0gICAgICAgICAgICA8VGV4dFZpZXcKLSAgICAgICAgICAgICAgICBhbmRyb2lkOmlkPSJAK2lkL3RpbWVfaW50ZXJwdW5jdCIKLSAgICAgICAgICAgICAgICBzdHlsZT0iQHN0eWxlL1RpbWVUZXh0LkludGVycHVuY3QiLz4KLSAgICAgICAgICAgIDxUZXh0VmlldwotICAgICAgICAgICAgICAgIGFuZHJvaWQ6aWQ9IkAraWQvdGltZV9lbmQiCi0gICAgICAgICAgICAgICAgc3R5bGU9IkBzdHlsZS9UaW1lVGV4dC5FbmQiLz4KLSAgICAgICAgPC9MaW5lYXJMYXlvdXQ+Ci0KLSAgICAgICAgPExpbmVhckxheW91dAotICAgICAgICAgICAgYW5kcm9pZDppZD0iQCtpZC9ib3R0b21fYmFyX3JpZ2h0IgotICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9IndyYXBfY29udGVudCIKLSAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0id3JhcF9jb250ZW50IgotICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfYWxpZ25QYXJlbnRFbmQ9InRydWUiCi0gICAgICAgICAgICBhbmRyb2lkOmdyYXZpdHk9InJpZ2h0Ij4KLQotICAgICAgICAgICAgPExpbmVhckxheW91dAotICAgICAgICAgICAgICAgIGFuZHJvaWQ6aWQ9IkAraWQvYmFzaWNfY29udHJvbHMiCi0gICAgICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9IndyYXBfY29udGVudCIKLSAgICAgICAgICAgICAgICBhbmRyb2lkOmxheW91dF9oZWlnaHQ9IndyYXBfY29udGVudCIKLSAgICAgICAgICAgICAgICBhbmRyb2lkOmdyYXZpdHk9ImNlbnRlcl92ZXJ0aWNhbCIKLSAgICAgICAgICAgICAgICBhbmRyb2lkOm9yaWVudGF0aW9uPSJob3Jpem9udGFsIiA+Ci0KLSAgICAgICAgICAgICAgICA8VGV4dFZpZXcKLSAgICAgICAgICAgICAgICAgICAgYW5kcm9pZDppZD0iQCtpZC9hZF9yZW1haW5pbmciCi0gICAgICAgICAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJ3cmFwX2NvbnRlbnQiCi0gICAgICAgICAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0id3JhcF9jb250ZW50IgotICAgICAgICAgICAgICAgICAgICBhbmRyb2lkOmdyYXZpdHk9ImNlbnRlciIKLSAgICAgICAgICAgICAgICAgICAgYW5kcm9pZDp0ZXh0U2l6ZT0iMTJzcCIKLSAgICAgICAgICAgICAgICAgICAgYW5kcm9pZDp0ZXh0Q29sb3I9IiNGRkZGRkYiCi0gICAgICAgICAgICAgICAgICAgIGFuZHJvaWQ6dmlzaWJpbGl0eT0iZ29uZSIgLz4KLQotICAgICAgICAgICAgICAgIDxJbWFnZUJ1dHRvbgotICAgICAgICAgICAgICAgICAgICBhbmRyb2lkOmlkPSJAK2lkL211dGUiCi0gICAgICAgICAgICAgICAgICAgIHN0eWxlPSJAc3R5bGUvQm90dG9tQmFyQnV0dG9uLk11dGUiIC8+Ci0gICAgICAgICAgICAgICAgPEltYWdlQnV0dG9uCi0gICAgICAgICAgICAgICAgICAgIGFuZHJvaWQ6aWQ9IkAraWQvc3VidGl0bGUiCi0gICAgICAgICAgICAgICAgICAgIGFuZHJvaWQ6c2NhbGVUeXBlPSJmaXRDZW50ZXIiCi0gICAgICAgICAgICAgICAgICAgIGFuZHJvaWQ6dmlzaWJpbGl0eT0iZ29uZSIKLSAgICAgICAgICAgICAgICAgICAgc3R5bGU9IkBzdHlsZS9Cb3R0b21CYXJCdXR0b24uQ0MiIC8+Ci0gICAgICAgICAgICAgICAgPEltYWdlQnV0dG9uCi0gICAgICAgICAgICAgICAgICAgIGFuZHJvaWQ6aWQ9IkAraWQvZnVsbHNjcmVlbiIKLSAgICAgICAgICAgICAgICAgICAgc3R5bGU9IkBzdHlsZS9Cb3R0b21CYXJCdXR0b24uRnVsbFNjcmVlbiIvPgotICAgICAgICAgICAgICAgIDxJbWFnZUJ1dHRvbgotICAgICAgICAgICAgICAgICAgICBhbmRyb2lkOmlkPSJAK2lkL292ZXJmbG93X3JpZ2h0IgotICAgICAgICAgICAgICAgICAgICBzdHlsZT0iQHN0eWxlL0JvdHRvbUJhckJ1dHRvbi5PdmVyZmxvd1JpZ2h0Ii8+Ci0gICAgICAgICAgICA8L0xpbmVhckxheW91dD4KLQotICAgICAgICAgICAgPExpbmVhckxheW91dAotICAgICAgICAgICAgICAgIGFuZHJvaWQ6aWQ9IkAraWQvZXh0cmFfY29udHJvbHMiCi0gICAgICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9IndyYXBfY29udGVudCIKLSAgICAgICAgICAgICAgICBhbmRyb2lkOmxheW91dF9oZWlnaHQ9IndyYXBfY29udGVudCIKLSAgICAgICAgICAgICAgICBhbmRyb2lkOnZpc2liaWxpdHk9ImdvbmUiCi0gICAgICAgICAgICAgICAgYW5kcm9pZDpvcmllbnRhdGlvbj0iaG9yaXpvbnRhbCIKLSAgICAgICAgICAgICAgICBhbmRyb2lkOmdyYXZpdHk9ImNlbnRlcl92ZXJ0aWNhbCI+Ci0KLSAgICAgICAgICAgICAgICA8TGluZWFyTGF5b3V0Ci0gICAgICAgICAgICAgICAgICAgIGFuZHJvaWQ6aWQ9IkAraWQvY3VzdG9tX2J1dHRvbnMiCi0gICAgICAgICAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJ3cmFwX2NvbnRlbnQiCi0gICAgICAgICAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0id3JhcF9jb250ZW50IiAvPgotCi0gICAgICAgICAgICAgICAgPEltYWdlQnV0dG9uCi0gICAgICAgICAgICAgICAgICAgIGFuZHJvaWQ6aWQ9IkAraWQvdmlkZW9fcXVhbGl0eSIKLSAgICAgICAgICAgICAgICAgICAgc3R5bGU9IkBzdHlsZS9Cb3R0b21CYXJCdXR0b24uVmlkZW9RdWFsaXR5IiAvPgotICAgICAgICAgICAgICAgIDxJbWFnZUJ1dHRvbgotICAgICAgICAgICAgICAgICAgICBhbmRyb2lkOmlkPSJAK2lkL3NldHRpbmdzIgotICAgICAgICAgICAgICAgICAgICBzdHlsZT0iQHN0eWxlL0JvdHRvbUJhckJ1dHRvbi5TZXR0aW5ncyIgLz4KLSAgICAgICAgICAgICAgICA8SW1hZ2VCdXR0b24KLSAgICAgICAgICAgICAgICAgICAgYW5kcm9pZDppZD0iQCtpZC9vdmVyZmxvd19sZWZ0IgotICAgICAgICAgICAgICAgICAgICBzdHlsZT0iQHN0eWxlL0JvdHRvbUJhckJ1dHRvbi5PdmVyZmxvd0xlZnQiLz4KLSAgICAgICAgICAgIDwvTGluZWFyTGF5b3V0PgotICAgICAgICA8L0xpbmVhckxheW91dD4KLSAgICA8L1JlbGF0aXZlTGF5b3V0PgotPC9MaW5lYXJMYXlvdXQ+CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9NZWRpYUNvbXBvbmVudHMvcmVzL2xheW91dC9taW5pbWFsX3RyYW5zcG9ydF9jb250cm9scy54bWwgYi9wYWNrYWdlcy9NZWRpYUNvbXBvbmVudHMvcmVzL2xheW91dC9taW5pbWFsX3RyYW5zcG9ydF9jb250cm9scy54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDgwMGM4MGIuLjAwMDAwMDAKLS0tIGEvcGFja2FnZXMvTWVkaWFDb21wb25lbnRzL3Jlcy9sYXlvdXQvbWluaW1hbF90cmFuc3BvcnRfY29udHJvbHMueG1sCisrKyAvZGV2L251bGwKQEAgLTEsMjQgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KLTwhLS0gQ29weXJpZ2h0IDIwMTggVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAotCi0gICAgIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwotICAgICB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCi0gICAgIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotCi0gICAgICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0KLSAgICAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQotICAgICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAotICAgICBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KLSAgICAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAotICAgICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KLS0tPgotCi08TGluZWFyTGF5b3V0IHhtbG5zOmFuZHJvaWQ9Imh0dHA6Ly9zY2hlbWFzLmFuZHJvaWQuY29tL2Fway9yZXMvYW5kcm9pZCIKLSAgICBhbmRyb2lkOmxheW91dF93aWR0aD0ibWF0Y2hfcGFyZW50IgotICAgIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0ibWF0Y2hfcGFyZW50IgotICAgIGFuZHJvaWQ6Z3Jhdml0eT0iY2VudGVyIgotICAgIGFuZHJvaWQ6b3JpZW50YXRpb249Imhvcml6b250YWwiPgotCi0gICAgPEltYWdlQnV0dG9uIGFuZHJvaWQ6aWQ9IkAraWQvcGF1c2UiIHN0eWxlPSJAc3R5bGUvTWluaW1hbFRyYW5zcG9ydENvbnRyb2xzQnV0dG9uIiAvPgotPC9MaW5lYXJMYXlvdXQ+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvTWVkaWFDb21wb25lbnRzL3Jlcy9sYXlvdXQvbXJfY2hvb3Nlcl9kaWFsb2cueG1sIGIvcGFja2FnZXMvTWVkaWFDb21wb25lbnRzL3Jlcy9sYXlvdXQvbXJfY2hvb3Nlcl9kaWFsb2cueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlZTg5ZTE2Li4wMDAwMDAwCi0tLSBhL3BhY2thZ2VzL01lZGlhQ29tcG9uZW50cy9yZXMvbGF5b3V0L21yX2Nob29zZXJfZGlhbG9nLnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDU1ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9InV0Zi04Ij8+Ci08IS0tIENvcHlyaWdodCAyMDE4IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKLQotICAgICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKLSAgICAgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgotICAgICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLQotICAgICAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotCi0gICAgIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKLSAgICAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKLSAgICAgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCi0gICAgIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKLSAgICAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCi0tLT4KLQotPExpbmVhckxheW91dCB4bWxuczphbmRyb2lkPSJodHRwOi8vc2NoZW1hcy5hbmRyb2lkLmNvbS9hcGsvcmVzL2FuZHJvaWQiCi0gICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9ImZpbGxfcGFyZW50IgotICAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0id3JhcF9jb250ZW50IgotICAgICAgICAgICAgIGFuZHJvaWQ6b3JpZW50YXRpb249InZlcnRpY2FsIj4KLSAgICA8VGV4dFZpZXcgYW5kcm9pZDppZD0iQCtpZC9tcl9jaG9vc2VyX3RpdGxlIgotICAgICAgICAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0iZmlsbF9wYXJlbnQiCi0gICAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0id3JhcF9jb250ZW50IgotICAgICAgICAgICAgICBhbmRyb2lkOnBhZGRpbmdMZWZ0PSIyNGRwIgotICAgICAgICAgICAgICBhbmRyb2lkOnBhZGRpbmdSaWdodD0iMjRkcCIKLSAgICAgICAgICAgICAgYW5kcm9pZDpwYWRkaW5nVG9wPSIyNGRwIgotICAgICAgICAgICAgICBhbmRyb2lkOnRleHQ9IkBzdHJpbmcvbXJfY2hvb3Nlcl90aXRsZSIKLSAgICAgICAgICAgICAgYW5kcm9pZDpzaW5nbGVMaW5lPSJ0cnVlIgotICAgICAgICAgICAgICBhbmRyb2lkOmVsbGlwc2l6ZT0iZW5kIgotICAgICAgICAgICAgICBhbmRyb2lkOnRleHRBcHBlYXJhbmNlPSJAc3R5bGUvVGV4dEFwcGVhcmFuY2UuTWVkaWFSb3V0ZXIuVGl0bGUiIC8+Ci0gICAgPExpc3RWaWV3IGFuZHJvaWQ6aWQ9IkAraWQvbXJfY2hvb3Nlcl9saXN0IgotICAgICAgICAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0iZmlsbF9wYXJlbnQiCi0gICAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0id3JhcF9jb250ZW50IgotICAgICAgICAgICAgICBhbmRyb2lkOmRpdmlkZXI9IkBhbmRyb2lkOmNvbG9yL3RyYW5zcGFyZW50IgotICAgICAgICAgICAgICBhbmRyb2lkOmRpdmlkZXJIZWlnaHQ9IjBkcCIgLz4KLSAgICA8TGluZWFyTGF5b3V0IGFuZHJvaWQ6aWQ9IkBhbmRyb2lkOmlkL2VtcHR5IgotICAgICAgICAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0iZmlsbF9wYXJlbnQiCi0gICAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0iMjQwZHAiCi0gICAgICAgICAgICAgIGFuZHJvaWQ6b3JpZW50YXRpb249InZlcnRpY2FsIgotICAgICAgICAgICAgICBhbmRyb2lkOnBhZGRpbmdUb3A9IjkwZHAiCi0gICAgICAgICAgICAgIGFuZHJvaWQ6cGFkZGluZ0xlZnQ9IjE2ZHAiCi0gICAgICAgICAgICAgIGFuZHJvaWQ6cGFkZGluZ1JpZ2h0PSIxNmRwIgotICAgICAgICAgICAgICBhbmRyb2lkOnZpc2liaWxpdHk9ImdvbmUiPgotICAgICAgICA8VGV4dFZpZXcgYW5kcm9pZDpsYXlvdXRfd2lkdGg9IndyYXBfY29udGVudCIKLSAgICAgICAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0id3JhcF9jb250ZW50IgotICAgICAgICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfZ3Jhdml0eT0iY2VudGVyIgotICAgICAgICAgICAgICAgICAgYW5kcm9pZDp0ZXh0PSJAc3RyaW5nL21yX2Nob29zZXJfc2VhcmNoaW5nIgotICAgICAgICAgICAgICAgICAgYW5kcm9pZDp0ZXh0QXBwZWFyYW5jZT0iQHN0eWxlL1RleHRBcHBlYXJhbmNlLk1lZGlhUm91dGVyLlNlY29uZGFyeVRleHQiIC8+Ci0gICAgICAgIDxQcm9ncmVzc0JhciBhbmRyb2lkOmxheW91dF93aWR0aD0iMTUwZHAiCi0gICAgICAgICAgICAgICAgICAgICBhbmRyb2lkOmxheW91dF9oZWlnaHQ9IndyYXBfY29udGVudCIKLSAgICAgICAgICAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X2dyYXZpdHk9ImNlbnRlciIKLSAgICAgICAgICAgICAgICAgICAgIGFuZHJvaWQ6aW5kZXRlcm1pbmF0ZT0idHJ1ZSIKLSAgICAgICAgICAgICAgICAgICAgIHN0eWxlPSI/YW5kcm9pZDphdHRyL3Byb2dyZXNzQmFyU3R5bGVIb3Jpem9udGFsIiAvPgotICAgIDwvTGluZWFyTGF5b3V0PgotPC9MaW5lYXJMYXlvdXQ+CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9NZWRpYUNvbXBvbmVudHMvcmVzL2xheW91dC9tcl9jaG9vc2VyX2xpc3RfaXRlbS54bWwgYi9wYWNrYWdlcy9NZWRpYUNvbXBvbmVudHMvcmVzL2xheW91dC9tcl9jaG9vc2VyX2xpc3RfaXRlbS54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDk1ODg3OWIuLjAwMDAwMDAKLS0tIGEvcGFja2FnZXMvTWVkaWFDb21wb25lbnRzL3Jlcy9sYXlvdXQvbXJfY2hvb3Nlcl9saXN0X2l0ZW0ueG1sCisrKyAvZGV2L251bGwKQEAgLTEsNTEgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KLTwhLS0gQ29weXJpZ2h0IDIwMTggVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAotCi0gICAgIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwotICAgICB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCi0gICAgIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotCi0gICAgICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0KLSAgICAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQotICAgICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAotICAgICBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KLSAgICAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAotICAgICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KLS0tPgotCi08TGluZWFyTGF5b3V0IHhtbG5zOmFuZHJvaWQ9Imh0dHA6Ly9zY2hlbWFzLmFuZHJvaWQuY29tL2Fway9yZXMvYW5kcm9pZCIKLSAgICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9ImZpbGxfcGFyZW50IgotICAgICAgICAgICAgICBhbmRyb2lkOmxheW91dF9oZWlnaHQ9IndyYXBfY29udGVudCIKLSAgICAgICAgICAgICAgYW5kcm9pZDptaW5IZWlnaHQ9IjU2ZHAiCi0gICAgICAgICAgICAgIGFuZHJvaWQ6cGFkZGluZ0xlZnQ9IjI0ZHAiCi0gICAgICAgICAgICAgIGFuZHJvaWQ6cGFkZGluZ1JpZ2h0PSIyNGRwIgotICAgICAgICAgICAgICBhbmRyb2lkOm9yaWVudGF0aW9uPSJob3Jpem9udGFsIgotICAgICAgICAgICAgICBhbmRyb2lkOmdyYXZpdHk9ImNlbnRlcl92ZXJ0aWNhbCIgPgotCi0gICAgPEltYWdlVmlldyBhbmRyb2lkOmlkPSJAK2lkL21yX2Nob29zZXJfcm91dGVfaWNvbiIKLSAgICAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSIyNGRwIgotICAgICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSIyNGRwIgotICAgICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfbWFyZ2luUmlnaHQ9IjI0ZHAiIC8+Ci0KLSAgICA8TGluZWFyTGF5b3V0IGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJmaWxsX3BhcmVudCIKLSAgICAgICAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0id3JhcF9jb250ZW50IgotICAgICAgICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfbWFyZ2luQm90dG9tPSIxZHAiCi0gICAgICAgICAgICAgICAgICBhbmRyb2lkOm9yaWVudGF0aW9uPSJ2ZXJ0aWNhbCIgPgotCi0gICAgICAgIDxUZXh0VmlldyBhbmRyb2lkOmlkPSJAK2lkL21yX2Nob29zZXJfcm91dGVfbmFtZSIKLSAgICAgICAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJmaWxsX3BhcmVudCIKLSAgICAgICAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0iMzJkcCIKLSAgICAgICAgICAgICAgICAgIGFuZHJvaWQ6c2luZ2xlTGluZT0idHJ1ZSIKLSAgICAgICAgICAgICAgICAgIGFuZHJvaWQ6ZWxsaXBzaXplPSJtYXJxdWVlIgotICAgICAgICAgICAgICAgICAgYW5kcm9pZDp0ZXh0QXBwZWFyYW5jZT0iQHN0eWxlL1RleHRBcHBlYXJhbmNlLk1lZGlhUm91dGVyLlByaW1hcnlUZXh0IiAvPgotCi0gICAgICAgIDxUZXh0VmlldyBhbmRyb2lkOmlkPSJAK2lkL21yX2Nob29zZXJfcm91dGVfZGVzYyIKLSAgICAgICAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJmaWxsX3BhcmVudCIKLSAgICAgICAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0iMjRkcCIKLSAgICAgICAgICAgICAgICAgIGFuZHJvaWQ6c2luZ2xlTGluZT0idHJ1ZSIKLSAgICAgICAgICAgICAgICAgIGFuZHJvaWQ6ZWxsaXBzaXplPSJtYXJxdWVlIgotICAgICAgICAgICAgICAgICAgYW5kcm9pZDp0ZXh0QXBwZWFyYW5jZT0iQHN0eWxlL1RleHRBcHBlYXJhbmNlLk1lZGlhUm91dGVyLlNlY29uZGFyeVRleHQiIC8+Ci0gICAgPC9MaW5lYXJMYXlvdXQ+Ci0KLTwvTGluZWFyTGF5b3V0PgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvTWVkaWFDb21wb25lbnRzL3Jlcy9sYXlvdXQvbXJfY29udHJvbGxlcl9tYXRlcmlhbF9kaWFsb2dfYi54bWwgYi9wYWNrYWdlcy9NZWRpYUNvbXBvbmVudHMvcmVzL2xheW91dC9tcl9jb250cm9sbGVyX21hdGVyaWFsX2RpYWxvZ19iLnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjMwNDQ3MS4uMDAwMDAwMAotLS0gYS9wYWNrYWdlcy9NZWRpYUNvbXBvbmVudHMvcmVzL2xheW91dC9tcl9jb250cm9sbGVyX21hdGVyaWFsX2RpYWxvZ19iLnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDIwNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ1dGYtOCI/PgotPCEtLSBDb3B5cmlnaHQgMjAxOCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0Ci0KLSAgICAgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7Ci0gICAgIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KLSAgICAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0KLSAgICAgICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLQotICAgICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCi0gICAgIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCi0gICAgIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgotICAgICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCi0gICAgIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgotLS0+Ci0KLTxGcmFtZUxheW91dCB4bWxuczphbmRyb2lkPSJodHRwOi8vc2NoZW1hcy5hbmRyb2lkLmNvbS9hcGsvcmVzL2FuZHJvaWQiCi0gICAgYW5kcm9pZDppZD0iQCtpZC9tcl9leHBhbmRhYmxlX2FyZWEiCi0gICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9ImZpbGxfcGFyZW50IgotICAgIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0iZmlsbF9wYXJlbnQiPgotICAgIDxMaW5lYXJMYXlvdXQgYW5kcm9pZDppZD0iQCtpZC9tcl9kaWFsb2dfYXJlYSIKLSAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9ImZpbGxfcGFyZW50IgotICAgICAgICBhbmRyb2lkOmxheW91dF9oZWlnaHQ9IndyYXBfY29udGVudCIKLSAgICAgICAgYW5kcm9pZDpsYXlvdXRfZ3Jhdml0eT0iY2VudGVyIgotICAgICAgICBhbmRyb2lkOm9yaWVudGF0aW9uPSJ2ZXJ0aWNhbCIKLSAgICAgICAgYW5kcm9pZDpiYWNrZ3JvdW5kPSI/YW5kcm9pZDphdHRyL2NvbG9yQmFja2dyb3VuZEZsb2F0aW5nIj4KLSAgICAgICAgPExpbmVhckxheW91dCBhbmRyb2lkOmlkPSJAK2lkL21yX3RpdGxlX2JhciIKLSAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJmaWxsX3BhcmVudCIKLSAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0id3JhcF9jb250ZW50IgotICAgICAgICAgICAgYW5kcm9pZDpwYWRkaW5nTGVmdD0iMjRkcCIKLSAgICAgICAgICAgIGFuZHJvaWQ6cGFkZGluZ1JpZ2h0PSIxMmRwIgotICAgICAgICAgICAgYW5kcm9pZDpvcmllbnRhdGlvbj0iaG9yaXpvbnRhbCIgPgotICAgICAgICAgICAgPFRleHRWaWV3IGFuZHJvaWQ6aWQ9IkAraWQvbXJfbmFtZSIKLSAgICAgICAgICAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0iMGRwIgotICAgICAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0iNzJkcCIKLSAgICAgICAgICAgICAgICBhbmRyb2lkOmxheW91dF93ZWlnaHQ9IjEiCi0gICAgICAgICAgICAgICAgYW5kcm9pZDpncmF2aXR5PSJjZW50ZXJfdmVydGljYWwiCi0gICAgICAgICAgICAgICAgYW5kcm9pZDpzaW5nbGVMaW5lPSJ0cnVlIgotICAgICAgICAgICAgICAgIGFuZHJvaWQ6ZWxsaXBzaXplPSJlbmQiCi0gICAgICAgICAgICAgICAgYW5kcm9pZDp0ZXh0QXBwZWFyYW5jZT0iQHN0eWxlL1RleHRBcHBlYXJhbmNlLk1lZGlhUm91dGVyLlRpdGxlIiAvPgotICAgICAgICAgICAgPEltYWdlQnV0dG9uIGFuZHJvaWQ6aWQ9IkAraWQvbXJfY2xvc2UiCi0gICAgICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9IjQ4ZHAiCi0gICAgICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSI0OGRwIgotICAgICAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X2dyYXZpdHk9ImNlbnRlcl92ZXJ0aWNhbCIKLSAgICAgICAgICAgICAgICBhbmRyb2lkOmNvbnRlbnREZXNjcmlwdGlvbj0iQHN0cmluZy9tcl9jb250cm9sbGVyX2Nsb3NlX2Rlc2NyaXB0aW9uIgotICAgICAgICAgICAgICAgIGFuZHJvaWQ6c3JjPSI/YXR0ci9tZWRpYVJvdXRlQ2xvc2VEcmF3YWJsZSIKLSAgICAgICAgICAgICAgICBhbmRyb2lkOmJhY2tncm91bmQ9Ij9hbmRyb2lkOmF0dHIvc2VsZWN0YWJsZUl0ZW1CYWNrZ3JvdW5kQm9yZGVybGVzcyIgLz4KLSAgICAgICAgPC9MaW5lYXJMYXlvdXQ+Ci0gICAgICAgIDxGcmFtZUxheW91dCBhbmRyb2lkOmlkPSJAK2lkL21yX2N1c3RvbV9jb250cm9sIgotICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9ImZpbGxfcGFyZW50IgotICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJ3cmFwX2NvbnRlbnQiCi0gICAgICAgICAgICBhbmRyb2lkOnZpc2liaWxpdHk9ImdvbmUiIC8+Ci0gICAgICAgIDxGcmFtZUxheW91dCBhbmRyb2lkOmlkPSJAK2lkL21yX2RlZmF1bHRfY29udHJvbCIKLSAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJmaWxsX3BhcmVudCIKLSAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0id3JhcF9jb250ZW50Ij4KLSAgICAgICAgICAgIDxJbWFnZVZpZXcgYW5kcm9pZDppZD0iQCtpZC9tcl9hcnQiCi0gICAgICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9ImZpbGxfcGFyZW50IgotICAgICAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0id3JhcF9jb250ZW50IgotICAgICAgICAgICAgICAgIGFuZHJvaWQ6YWRqdXN0Vmlld0JvdW5kcz0idHJ1ZSIKLSAgICAgICAgICAgICAgICBhbmRyb2lkOnNjYWxlVHlwZT0iZml0WFkiCi0gICAgICAgICAgICAgICAgYW5kcm9pZDpiYWNrZ3JvdW5kPSI/YW5kcm9pZDphdHRyL2NvbG9yUHJpbWFyeSIKLSAgICAgICAgICAgICAgICBhbmRyb2lkOmxheW91dF9ncmF2aXR5PSJ0b3AiCi0gICAgICAgICAgICAgICAgYW5kcm9pZDpjb250ZW50RGVzY3JpcHRpb249IkBzdHJpbmcvbXJfY29udHJvbGxlcl9hbGJ1bV9hcnQiCi0gICAgICAgICAgICAgICAgYW5kcm9pZDp2aXNpYmlsaXR5PSJnb25lIiAvPgotICAgICAgICAgICAgPExpbmVhckxheW91dCBhbmRyb2lkOmxheW91dF93aWR0aD0iZmlsbF9wYXJlbnQiCi0gICAgICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJ3cmFwX2NvbnRlbnQiCi0gICAgICAgICAgICAgICAgYW5kcm9pZDpvcmllbnRhdGlvbj0idmVydGljYWwiCi0gICAgICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfZ3Jhdml0eT0iYm90dG9tIgotICAgICAgICAgICAgICAgIGFuZHJvaWQ6c3BsaXRNb3Rpb25FdmVudHM9ImZhbHNlIj4KLSAgICAgICAgICAgICAgICA8TGluZWFyTGF5b3V0IGFuZHJvaWQ6aWQ9IkAraWQvbXJfbWVkaWFfbWFpbl9jb250cm9sIgotICAgICAgICAgICAgICAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0iZmlsbF9wYXJlbnQiCi0gICAgICAgICAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0id3JhcF9jb250ZW50IgotICAgICAgICAgICAgICAgICAgICBhbmRyb2lkOm9yaWVudGF0aW9uPSJ2ZXJ0aWNhbCIKLSAgICAgICAgICAgICAgICAgICAgYW5kcm9pZDpwYWRkaW5nVG9wPSIxNmRwIgotICAgICAgICAgICAgICAgICAgICBhbmRyb2lkOnBhZGRpbmdCb3R0b209IjE2ZHAiCi0gICAgICAgICAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X2dyYXZpdHk9ImJvdHRvbSIKLSAgICAgICAgICAgICAgICAgICAgYW5kcm9pZDp0aGVtZT0iP2F0dHIvbWVkaWFSb3V0ZUNvbnRyb2xQYW5lbFRoZW1lT3ZlcmxheSI+Ci0gICAgICAgICAgICAgICAgICAgIDxSZWxhdGl2ZUxheW91dAotICAgICAgICAgICAgICAgICAgICAgICAgYW5kcm9pZDppZD0iQCtpZC9tcl9wbGF5YmFja19jb250cm9sIgotICAgICAgICAgICAgICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9ImZpbGxfcGFyZW50IgotICAgICAgICAgICAgICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJ3cmFwX2NvbnRlbnQiCi0gICAgICAgICAgICAgICAgICAgICAgICBhbmRyb2lkOm9yaWVudGF0aW9uPSJob3Jpem9udGFsIgotICAgICAgICAgICAgICAgICAgICAgICAgYW5kcm9pZDpwYWRkaW5nTGVmdD0iMjRkcCIKLSAgICAgICAgICAgICAgICAgICAgICAgIGFuZHJvaWQ6cGFkZGluZ1JpZ2h0PSIxMmRwIiA+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8SW1hZ2VCdXR0b24gYW5kcm9pZDppZD0iQCtpZC9tcl9jb250cm9sX3BsYXliYWNrX2N0cmwiCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9IndyYXBfY29udGVudCIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbmRyb2lkOmxheW91dF9oZWlnaHQ9IndyYXBfY29udGVudCIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbmRyb2lkOmxheW91dF9tYXJnaW5MZWZ0PSIxMmRwIgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X2FsaWduUGFyZW50UmlnaHQ9InRydWUiCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfY2VudGVyVmVydGljYWw9InRydWUiCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgYW5kcm9pZDpjb250ZW50RGVzY3JpcHRpb249IkBzdHJpbmcvbXJfY29udHJvbGxlcl9wbGF5IgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFuZHJvaWQ6YmFja2dyb3VuZD0iP2FuZHJvaWQ6YXR0ci9zZWxlY3RhYmxlSXRlbUJhY2tncm91bmRCb3JkZXJsZXNzIgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFuZHJvaWQ6dmlzaWJpbGl0eT0iZ29uZSIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgIDxMaW5lYXJMYXlvdXQgYW5kcm9pZDppZD0iQCtpZC9tcl9jb250cm9sX3RpdGxlX2NvbnRhaW5lciIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbmRyb2lkOm9yaWVudGF0aW9uPSJ2ZXJ0aWNhbCIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0id3JhcF9jb250ZW50IgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0id3JhcF9jb250ZW50IgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X3RvTGVmdE9mPSJAaWQvbXJfY29udHJvbF9wbGF5YmFja19jdHJsIgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X2FsaWduUGFyZW50TGVmdD0idHJ1ZSIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbmRyb2lkOmxheW91dF9jZW50ZXJWZXJ0aWNhbD0idHJ1ZSI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgPFRleHRWaWV3IGFuZHJvaWQ6aWQ9IkAraWQvbXJfY29udHJvbF90aXRsZSIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9IndyYXBfY29udGVudCIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJ3cmFwX2NvbnRlbnQiCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFuZHJvaWQ6dGV4dEFwcGVhcmFuY2U9IkBzdHlsZS9UZXh0QXBwZWFyYW5jZS5NZWRpYVJvdXRlci5QcmltYXJ5VGV4dCIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYW5kcm9pZDpzaW5nbGVMaW5lPSJ0cnVlIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxUZXh0VmlldyBhbmRyb2lkOmlkPSJAK2lkL21yX2NvbnRyb2xfc3VidGl0bGUiCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJ3cmFwX2NvbnRlbnQiCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0id3JhcF9jb250ZW50IgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbmRyb2lkOnRleHRBcHBlYXJhbmNlPSJAc3R5bGUvVGV4dEFwcGVhcmFuY2UuTWVkaWFSb3V0ZXIuU2Vjb25kYXJ5VGV4dCIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYW5kcm9pZDpzaW5nbGVMaW5lPSJ0cnVlIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgPC9MaW5lYXJMYXlvdXQ+Ci0gICAgICAgICAgICAgICAgICAgIDwvUmVsYXRpdmVMYXlvdXQ+Ci0gICAgICAgICAgICAgICAgICAgIDxWaWV3IGFuZHJvaWQ6aWQ9IkAraWQvbXJfY29udHJvbF9kaXZpZGVyIgotICAgICAgICAgICAgICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9ImZpbGxfcGFyZW50IgotICAgICAgICAgICAgICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSI4ZHAiCi0gICAgICAgICAgICAgICAgICAgICAgICBhbmRyb2lkOnZpc2liaWxpdHk9ImdvbmUiIC8+Ci0gICAgICAgICAgICAgICAgICAgIDxMaW5lYXJMYXlvdXQKLSAgICAgICAgICAgICAgICAgICAgICAgIGFuZHJvaWQ6aWQ9IkAraWQvbXJfdm9sdW1lX2NvbnRyb2wiCi0gICAgICAgICAgICAgICAgICAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0iZmlsbF9wYXJlbnQiCi0gICAgICAgICAgICAgICAgICAgICAgICBhbmRyb2lkOmxheW91dF9oZWlnaHQ9IndyYXBfY29udGVudCIKLSAgICAgICAgICAgICAgICAgICAgICAgIGFuZHJvaWQ6bWluSGVpZ2h0PSI0OGRwIgotICAgICAgICAgICAgICAgICAgICAgICAgYW5kcm9pZDpncmF2aXR5PSJjZW50ZXJfdmVydGljYWwiCi0gICAgICAgICAgICAgICAgICAgICAgICBhbmRyb2lkOnBhZGRpbmdMZWZ0PSIyNGRwIgotICAgICAgICAgICAgICAgICAgICAgICAgYW5kcm9pZDpwYWRkaW5nUmlnaHQ9IjEyZHAiCi0gICAgICAgICAgICAgICAgICAgICAgICBhbmRyb2lkOnNwbGl0TW90aW9uRXZlbnRzPSJmYWxzZSI+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8SW1hZ2VWaWV3Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9IjI0ZHAiCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSIyNGRwIgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFuZHJvaWQ6c3JjPSI/YXR0ci9tZWRpYVJvdXRlQXVkaW9UcmFja0RyYXdhYmxlIgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFuZHJvaWQ6Z3Jhdml0eT0iY2VudGVyIgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFuZHJvaWQ6c2NhbGVUeXBlPSJjZW50ZXIiLz4KLSAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0gU2luY2UgZGlhbG9nJ3MgdG9wIGxheW91dCBtcl9leHBhbmRhYmxlX2FyZWEgaXMgY2xpY2thYmxlLCBpdCBwcm9wYWdhdGVzIHByZXNzZWQgc3RhdGUKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG8gaXRzIG5vbi1jbGlja2FibGUgY2hpbGRyZW4uIFNwZWNpZnkgYW5kcm9pZDpjbGlja2FibGU9InRydWUiIHRvIHByZXZlbnQgdm9sdW1lIHNsaWRlcgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmcm9tIGhhdmluZyBmYWxzZSBwcmVzc2VkIHN0YXRlLiAtLT4KLSAgICAgICAgICAgICAgICAgICAgICAgIDxjb20uYW5kcm9pZC5zdXBwb3J0Lm1lZGlhcm91dGVyLmFwcC5NZWRpYVJvdXRlVm9sdW1lU2xpZGVyCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgYW5kcm9pZDppZD0iQCtpZC9tcl92b2x1bWVfc2xpZGVyIgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSIwZHAiCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJ3cmFwX2NvbnRlbnQiCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgYW5kcm9pZDptaW5IZWlnaHQ9IjQ4ZHAiCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgYW5kcm9pZDptYXhIZWlnaHQ9IjQ4ZHAiCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2VpZ2h0PSIxIgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFuZHJvaWQ6Y2xpY2thYmxlPSJ0cnVlIgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFuZHJvaWQ6Y29udGVudERlc2NyaXB0aW9uPSJAc3RyaW5nL21yX2NvbnRyb2xsZXJfdm9sdW1lX3NsaWRlciIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgIDxjb20uYW5kcm9pZC5zdXBwb3J0Lm1lZGlhcm91dGVyLmFwcC5NZWRpYVJvdXRlRXhwYW5kQ29sbGFwc2VCdXR0b24KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbmRyb2lkOmlkPSJAK2lkL21yX2dyb3VwX2V4cGFuZF9jb2xsYXBzZSIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0iNDhkcCIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbmRyb2lkOmxheW91dF9oZWlnaHQ9IjQ4ZHAiCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgYW5kcm9pZDpwYWRkaW5nPSIxMmRwIgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFuZHJvaWQ6YmFja2dyb3VuZD0iP2FuZHJvaWQ6YXR0ci9zZWxlY3RhYmxlSXRlbUJhY2tncm91bmRCb3JkZXJsZXNzIgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFuZHJvaWQ6dmlzaWJpbGl0eT0iZ29uZSIvPgotICAgICAgICAgICAgICAgICAgICA8L0xpbmVhckxheW91dD4KLSAgICAgICAgICAgICAgICA8L0xpbmVhckxheW91dD4KLSAgICAgICAgICAgICAgICA8Y29tLmFuZHJvaWQuc3VwcG9ydC5tZWRpYXJvdXRlci5hcHAuT3ZlcmxheUxpc3RWaWV3Ci0gICAgICAgICAgICAgICAgICAgIGFuZHJvaWQ6aWQ9IkAraWQvbXJfdm9sdW1lX2dyb3VwX2xpc3QiCi0gICAgICAgICAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJmaWxsX3BhcmVudCIKLSAgICAgICAgICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJ3cmFwX2NvbnRlbnQiCi0gICAgICAgICAgICAgICAgICAgIGFuZHJvaWQ6cGFkZGluZ1RvcD0iQGRpbWVuL21yX2NvbnRyb2xsZXJfdm9sdW1lX2dyb3VwX2xpc3RfcGFkZGluZ190b3AiCi0gICAgICAgICAgICAgICAgICAgIGFuZHJvaWQ6c2Nyb2xsYmFyU3R5bGU9Im91dHNpZGVPdmVybGF5IgotICAgICAgICAgICAgICAgICAgICBhbmRyb2lkOmNsaXBUb1BhZGRpbmc9ImZhbHNlIgotICAgICAgICAgICAgICAgICAgICBhbmRyb2lkOnZpc2liaWxpdHk9ImdvbmUiCi0gICAgICAgICAgICAgICAgICAgIGFuZHJvaWQ6c3BsaXRNb3Rpb25FdmVudHM9ImZhbHNlIgotICAgICAgICAgICAgICAgICAgICBhbmRyb2lkOnRoZW1lPSI/YXR0ci9tZWRpYVJvdXRlQ29udHJvbFBhbmVsVGhlbWVPdmVybGF5IiAvPgotICAgICAgICAgICAgPC9MaW5lYXJMYXlvdXQ+Ci0gICAgICAgIDwvRnJhbWVMYXlvdXQ+Ci0gICAgICAgIDxTY3JvbGxWaWV3Ci0gICAgICAgICAgICBhbmRyb2lkOmlkPSJAK2lkL2J1dHRvblBhbmVsIgotICAgICAgICAgICAgc3R5bGU9Ij9hdHRyL2J1dHRvbkJhclN0eWxlIgotICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9Im1hdGNoX3BhcmVudCIKLSAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0id3JhcF9jb250ZW50IgotICAgICAgICAgICAgYW5kcm9pZDpmaWxsVmlld3BvcnQ9InRydWUiCi0gICAgICAgICAgICBhbmRyb2lkOnNjcm9sbEluZGljYXRvcnM9InRvcHxib3R0b20iPgotICAgICAgICAgICAgPGFuZHJvaWQuc3VwcG9ydC52Ny53aWRnZXQuQnV0dG9uQmFyTGF5b3V0Ci0gICAgICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9Im1hdGNoX3BhcmVudCIKLSAgICAgICAgICAgICAgICBhbmRyb2lkOmxheW91dF9oZWlnaHQ9IndyYXBfY29udGVudCIKLSAgICAgICAgICAgICAgICBhbmRyb2lkOmdyYXZpdHk9ImJvdHRvbSIKLSAgICAgICAgICAgICAgICBhbmRyb2lkOmxheW91dERpcmVjdGlvbj0ibG9jYWxlIgotICAgICAgICAgICAgICAgIGFuZHJvaWQ6b3JpZW50YXRpb249Imhvcml6b250YWwiCi0gICAgICAgICAgICAgICAgYW5kcm9pZDpwYWRkaW5nQm90dG9tPSI0ZHAiCi0gICAgICAgICAgICAgICAgYW5kcm9pZDpwYWRkaW5nTGVmdD0iMTJkcCIKLSAgICAgICAgICAgICAgICBhbmRyb2lkOnBhZGRpbmdSaWdodD0iMTJkcCIKLSAgICAgICAgICAgICAgICBhbmRyb2lkOnBhZGRpbmdUb3A9IjRkcCI+Ci0gICAgICAgICAgICAgICAgPEJ1dHRvbgotICAgICAgICAgICAgICAgICAgICBhbmRyb2lkOmlkPSJAYW5kcm9pZDppZC9idXR0b24zIgotICAgICAgICAgICAgICAgICAgICBzdHlsZT0iP2FuZHJvaWQ6YXR0ci9idXR0b25CYXJOZXV0cmFsQnV0dG9uU3R5bGUiCi0gICAgICAgICAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJ3cmFwX2NvbnRlbnQiCi0gICAgICAgICAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0id3JhcF9jb250ZW50Ii8+Ci0gICAgICAgICAgICAgICAgPGFuZHJvaWQuc3VwcG9ydC52NC53aWRnZXQuU3BhY2UKLSAgICAgICAgICAgICAgICAgICAgYW5kcm9pZDppZD0iQCtpZC9zcGFjZXIiCi0gICAgICAgICAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSIwZHAiCi0gICAgICAgICAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0iMGRwIgotICAgICAgICAgICAgICAgICAgICBhbmRyb2lkOmxheW91dF93ZWlnaHQ9IjEiCi0gICAgICAgICAgICAgICAgICAgIGFuZHJvaWQ6dmlzaWJpbGl0eT0iaW52aXNpYmxlIi8+Ci0gICAgICAgICAgICAgICAgPEJ1dHRvbgotICAgICAgICAgICAgICAgICAgICBhbmRyb2lkOmlkPSJAYW5kcm9pZDppZC9idXR0b24yIgotICAgICAgICAgICAgICAgICAgICBzdHlsZT0iP2FuZHJvaWQ6YXR0ci9idXR0b25CYXJOZWdhdGl2ZUJ1dHRvblN0eWxlIgotICAgICAgICAgICAgICAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0id3JhcF9jb250ZW50IgotICAgICAgICAgICAgICAgICAgICBhbmRyb2lkOmxheW91dF9oZWlnaHQ9IndyYXBfY29udGVudCIvPgotICAgICAgICAgICAgICAgIDxCdXR0b24KLSAgICAgICAgICAgICAgICAgICAgYW5kcm9pZDppZD0iQGFuZHJvaWQ6aWQvYnV0dG9uMSIKLSAgICAgICAgICAgICAgICAgICAgc3R5bGU9Ij9hbmRyb2lkOmF0dHIvYnV0dG9uQmFyUG9zaXRpdmVCdXR0b25TdHlsZSIKLSAgICAgICAgICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9IndyYXBfY29udGVudCIKLSAgICAgICAgICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJ3cmFwX2NvbnRlbnQiLz4KLSAgICAgICAgICAgIDwvYW5kcm9pZC5zdXBwb3J0LnY3LndpZGdldC5CdXR0b25CYXJMYXlvdXQ+Ci0gICAgICAgIDwvU2Nyb2xsVmlldz4KLSAgICA8L0xpbmVhckxheW91dD4KLTwvRnJhbWVMYXlvdXQ+CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9NZWRpYUNvbXBvbmVudHMvcmVzL2xheW91dC9tcl9jb250cm9sbGVyX3ZvbHVtZV9pdGVtLnhtbCBiL3BhY2thZ2VzL01lZGlhQ29tcG9uZW50cy9yZXMvbGF5b3V0L21yX2NvbnRyb2xsZXJfdm9sdW1lX2l0ZW0ueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhODkwNThiLi4wMDAwMDAwCi0tLSBhL3BhY2thZ2VzL01lZGlhQ29tcG9uZW50cy9yZXMvbGF5b3V0L21yX2NvbnRyb2xsZXJfdm9sdW1lX2l0ZW0ueG1sCisrKyAvZGV2L251bGwKQEAgLTEsNTIgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KLTwhLS0gQ29weXJpZ2h0IDIwMTggVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAotCi0gICAgIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwotICAgICB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCi0gICAgIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotCi0gICAgICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0KLSAgICAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQotICAgICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAotICAgICBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KLSAgICAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAotICAgICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KLS0tPgotCi08TGluZWFyTGF5b3V0IHhtbG5zOmFuZHJvaWQ9Imh0dHA6Ly9zY2hlbWFzLmFuZHJvaWQuY29tL2Fway9yZXMvYW5kcm9pZCIKLSAgICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9ImZpbGxfcGFyZW50IgotICAgICAgICAgICAgICBhbmRyb2lkOmxheW91dF9oZWlnaHQ9IndyYXBfY29udGVudCI+Ci0gICAgPExpbmVhckxheW91dCBhbmRyb2lkOmlkPSJAK2lkL3ZvbHVtZV9pdGVtX2NvbnRhaW5lciIKLSAgICAgICAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJmaWxsX3BhcmVudCIKLSAgICAgICAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0iQGRpbWVuL21yX2NvbnRyb2xsZXJfdm9sdW1lX2dyb3VwX2xpc3RfaXRlbV9oZWlnaHQiCi0gICAgICAgICAgICAgICAgICBhbmRyb2lkOnBhZGRpbmdMZWZ0PSIyNGRwIgotICAgICAgICAgICAgICAgICAgYW5kcm9pZDpwYWRkaW5nUmlnaHQ9IjYwZHAiCi0gICAgICAgICAgICAgICAgICBhbmRyb2lkOnBhZGRpbmdCb3R0b209IjhkcCIKLSAgICAgICAgICAgICAgICAgIGFuZHJvaWQ6b3JpZW50YXRpb249InZlcnRpY2FsIiA+Ci0gICAgICAgIDxUZXh0VmlldyBhbmRyb2lkOmlkPSJAK2lkL21yX25hbWUiCi0gICAgICAgICAgICAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0id3JhcF9jb250ZW50IgotICAgICAgICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJ3cmFwX2NvbnRlbnQiCi0gICAgICAgICAgICAgICAgICBhbmRyb2lkOnRleHRBcHBlYXJhbmNlPSJAc3R5bGUvVGV4dEFwcGVhcmFuY2UuTWVkaWFSb3V0ZXIuU2Vjb25kYXJ5VGV4dCIKLSAgICAgICAgICAgICAgICAgIGFuZHJvaWQ6c2luZ2xlTGluZT0idHJ1ZSIgLz4KLSAgICAgICAgPExpbmVhckxheW91dCBhbmRyb2lkOmxheW91dF93aWR0aD0iZmlsbF9wYXJlbnQiCi0gICAgICAgICAgICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJ3cmFwX2NvbnRlbnQiCi0gICAgICAgICAgICAgICAgICAgICAgYW5kcm9pZDpvcmllbnRhdGlvbj0iaG9yaXpvbnRhbCIKLSAgICAgICAgICAgICAgICAgICAgICBhbmRyb2lkOmdyYXZpdHk9ImNlbnRlcl92ZXJ0aWNhbCI+Ci0gICAgICAgICAgICA8SW1hZ2VWaWV3IGFuZHJvaWQ6aWQ9IkAraWQvbXJfdm9sdW1lX2l0ZW1faWNvbiIKLSAgICAgICAgICAgICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9IkBkaW1lbi9tcl9jb250cm9sbGVyX3ZvbHVtZV9ncm91cF9saXN0X2l0ZW1faWNvbl9zaXplIgotICAgICAgICAgICAgICAgICAgICAgICBhbmRyb2lkOmxheW91dF9oZWlnaHQ9IkBkaW1lbi9tcl9jb250cm9sbGVyX3ZvbHVtZV9ncm91cF9saXN0X2l0ZW1faWNvbl9zaXplIgotICAgICAgICAgICAgICAgICAgICAgICBhbmRyb2lkOmxheW91dF9tYXJnaW5Ub3A9IjhkcCIKLSAgICAgICAgICAgICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfbWFyZ2luQm90dG9tPSI4ZHAiCi0gICAgICAgICAgICAgICAgICAgICAgIGFuZHJvaWQ6c2NhbGVUeXBlPSJmaXRDZW50ZXIiCi0gICAgICAgICAgICAgICAgICAgICAgIGFuZHJvaWQ6c3JjPSI/YXR0ci9tZWRpYVJvdXRlQXVkaW9UcmFja0RyYXdhYmxlIiAvPgotICAgICAgICAgICAgPGFuZHJvaWQuc3VwcG9ydC52Ny5hcHAuTWVkaWFSb3V0ZVZvbHVtZVNsaWRlcgotICAgICAgICAgICAgICAgIGFuZHJvaWQ6aWQ9IkAraWQvbXJfdm9sdW1lX3NsaWRlciIKLSAgICAgICAgICAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0iZmlsbF9wYXJlbnQiCi0gICAgICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSI0MGRwIgotICAgICAgICAgICAgICAgIGFuZHJvaWQ6bWluSGVpZ2h0PSI0MGRwIgotICAgICAgICAgICAgICAgIGFuZHJvaWQ6bWF4SGVpZ2h0PSI0MGRwIgotICAgICAgICAgICAgICAgIGFuZHJvaWQ6Y29udGVudERlc2NyaXB0aW9uPSJAc3RyaW5nL21yX2NvbnRyb2xsZXJfdm9sdW1lX3NsaWRlciIgLz4KLSAgICAgICAgPC9MaW5lYXJMYXlvdXQ+Ci0gICAgPC9MaW5lYXJMYXlvdXQ+Ci08L0xpbmVhckxheW91dD4KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL01lZGlhQ29tcG9uZW50cy9yZXMvbGF5b3V0L3NldHRpbmdzX2xpc3QueG1sIGIvcGFja2FnZXMvTWVkaWFDb21wb25lbnRzL3Jlcy9sYXlvdXQvc2V0dGluZ3NfbGlzdC54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGVhMzA1MzguLjAwMDAwMDAKLS0tIGEvcGFja2FnZXMvTWVkaWFDb21wb25lbnRzL3Jlcy9sYXlvdXQvc2V0dGluZ3NfbGlzdC54bWwKKysrIC9kZXYvbnVsbApAQCAtMSwyMiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ1dGYtOCI/PgotPCEtLSBDb3B5cmlnaHQgMjAxOCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0Ci0KLSAgICAgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7Ci0gICAgIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KLSAgICAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0KLSAgICAgICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLQotICAgICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCi0gICAgIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCi0gICAgIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgotICAgICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCi0gICAgIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgotLS0+Ci0KLTxMaXN0VmlldyB4bWxuczphbmRyb2lkPSJodHRwOi8vc2NoZW1hcy5hbmRyb2lkLmNvbS9hcGsvcmVzL2FuZHJvaWQiCi0gICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9IkBkaW1lbi9tY3YyX2VtYmVkZGVkX3NldHRpbmdzX3dpZHRoIgotICAgIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0iQGRpbWVuL21jdjJfZW1iZWRkZWRfc2V0dGluZ3NfaGVpZ2h0IgotICAgIGFuZHJvaWQ6ZGl2aWRlcj0iQG51bGwiCi0gICAgYW5kcm9pZDpkaXZpZGVySGVpZ2h0PSIwZHAiPgotPC9MaXN0Vmlldz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9wYWNrYWdlcy9NZWRpYUNvbXBvbmVudHMvcmVzL2xheW91dC90aXRsZV9iYXJfZ3JhZGllbnQueG1sIGIvcGFja2FnZXMvTWVkaWFDb21wb25lbnRzL3Jlcy9sYXlvdXQvdGl0bGVfYmFyX2dyYWRpZW50LnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYWIxZmM2ZS4uMDAwMDAwMAotLS0gYS9wYWNrYWdlcy9NZWRpYUNvbXBvbmVudHMvcmVzL2xheW91dC90aXRsZV9iYXJfZ3JhZGllbnQueG1sCisrKyAvZGV2L251bGwKQEAgLTEsMjMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KLTwhLS0gQ29weXJpZ2h0IDIwMTggVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAotCi0gICAgIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwotICAgICB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCi0gICAgIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotCi0gICAgICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0KLSAgICAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQotICAgICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAotICAgICBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KLSAgICAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAotICAgICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KLS0tPgotCi08c2hhcGUgeG1sbnM6YW5kcm9pZD0iaHR0cDovL3NjaGVtYXMuYW5kcm9pZC5jb20vYXBrL3Jlcy9hbmRyb2lkIgotICAgIGFuZHJvaWQ6c2hhcGU9InJlY3RhbmdsZSI+Ci0gICAgPGdyYWRpZW50Ci0gICAgICAgIGFuZHJvaWQ6c3RhcnRDb2xvcj0iQGNvbG9yL3RpdGxlX2Jhcl9ncmFkaWVudF9zdGFydCIKLSAgICAgICAgYW5kcm9pZDplbmRDb2xvcj0iQGNvbG9yL3RpdGxlX2Jhcl9ncmFkaWVudF9lbmQiCi0gICAgICAgIGFuZHJvaWQ6YW5nbGU9Ii0yNzAiIC8+Ci08L3NoYXBlPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3BhY2thZ2VzL01lZGlhQ29tcG9uZW50cy9yZXMvdmFsdWVzLWFmL3N0cmluZ3MueG1sIGIvcGFja2FnZXMvTWVkaWFDb21wb25lbnRzL3Jlcy92YWx1ZXMtYWYvc3RyaW5ncy54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQ3MjMwYWQuLjAwMDAwMDAKLS0tIGEvcGFja2FnZXMvTWVkaWFDb21wb25lbnRzL3Jlcy92YWx1ZXMtYWYvc3RyaW5ncy54bWwKKysrIC9kZXYvbnVsbApAQCAtMSw0MCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPCEtLSAgQ29weXJpZ2h0IDIwMTggVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAotCi0gICAgIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwotICAgICB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCi0gICAgIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotCi0gICAgICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0KLSAgICAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQotICAgICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAotICAgICBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KLSAgICAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAotICAgICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KLSAtLT4KLQotPHJlc291cmNlcyB4bWxuczphbmRyb2lkPSJodHRwOi8vc2NoZW1hcy5hbmRyb2lkLmNvbS9hcGsvcmVzL2FuZHJvaWQiCi0gICAgeG1sbnM6eGxpZmY9InVybjpvYXNpczpuYW1lczp0Yzp4bGlmZjpkb2N1bWVudDoxLjIiPgotICAgIDxzdHJpbmcgbmFtZT0ibXJfc3lzdGVtX3JvdXRlX25hbWUiIG1zZ2lkPSI1NDQxNTI5ODUxNDgxMTc2ODE3Ij4iU3RlbHNlbCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im1yX3VzZXJfcm91dGVfY2F0ZWdvcnlfbmFtZSIgbXNnaWQ9Ijc0OTgxMTI5MDc1MjQ5NzczMTEiPiJUb2VzdGVsbGUiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJtcl9idXR0b25fY29udGVudF9kZXNjcmlwdGlvbiIgbXNnaWQ9IjM2OTgzNzgwODU5MDE0NjYxMjkiPiJDYXN0LWtub3BwaWUiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJtcl9jYXN0X2J1dHRvbl9kaXNjb25uZWN0ZWQiIG1zZ2lkPSI4MTYzMDU0OTA0Mjc4MTkyNDAiPiJVaXRzYWFpLWtub3BwaWUuIE9udGtvcHBlbCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im1yX2Nhc3RfYnV0dG9uX2Nvbm5lY3RpbmciIG1zZ2lkPSIyMTg3NjQyNzY1MDkxODczODM0Ij4iVWl0c2FhaS1rbm9wcGllLiBLb3BwZWwgdGFucyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im1yX2Nhc3RfYnV0dG9uX2Nvbm5lY3RlZCIgbXNnaWQ9IjUwODg0Mjc3NzE3ODg2NDgwODUiPiJVaXRzYWFpLWtub3BwaWUuIEdla29wcGVsIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibXJfY2hvb3Nlcl90aXRsZSIgbXNnaWQ9IjQxNDMwMTk0MTU0NjEzNTk5MCI+IlNhYWkgdWl0IG5hIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibXJfY2hvb3Nlcl9zZWFyY2hpbmciIG1zZ2lkPSI2MzQ5OTAwNTc5NTA3NTIxOTU2Ij4iVmluZCB0YW5zIHRvZXN0ZWxsZSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im1yX2NvbnRyb2xsZXJfZGlzY29ubmVjdCIgbXNnaWQ9IjEyMjcyNjQ4ODk0MTI5ODk1ODAiPiJPbnRrb3BwZWwiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJtcl9jb250cm9sbGVyX3N0b3BfY2FzdGluZyIgbXNnaWQ9Ijg4NTc4ODY3OTQwODY1ODMyMjYiPiJIb3Ugb3AgdWl0c2FhaSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im1yX2NvbnRyb2xsZXJfY2xvc2VfZGVzY3JpcHRpb24iIG1zZ2lkPSI3MzMzODYyMzEyNDgwNTgzMjYwIj4iTWFhayB0b2UiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJtcl9jb250cm9sbGVyX3BsYXkiIG1zZ2lkPSI2ODM2MzQ1NjU5Njk5ODc0NTgiPiJTcGVlbCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im1yX2NvbnRyb2xsZXJfcGF1c2UiIG1zZ2lkPSI1NDUxODg0NDM1NTEwOTA1NDA2Ij4iTGFhdCB3YWciPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJtcl9jb250cm9sbGVyX3N0b3AiIG1zZ2lkPSI3MzU4NzQ2NDE5MjE0MjUxMjMiPiJTdG9wIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibXJfY29udHJvbGxlcl9leHBhbmRfZ3JvdXAiIG1zZ2lkPSI4MDYyNDI3MDIyNzQ0MjY2OTA3Ij4iVm91IHVpdCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im1yX2NvbnRyb2xsZXJfY29sbGFwc2VfZ3JvdXAiIG1zZ2lkPSI3OTI0ODA5MDU2OTA0MjQwOTI2Ij4iVm91IGluIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibXJfY29udHJvbGxlcl9hbGJ1bV9hcnQiIG1zZ2lkPSI2NDIyODAxODQzNTQwNTQzNTg1Ij4iQWxidW1rdW5zd2VyayI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im1yX2NvbnRyb2xsZXJfdm9sdW1lX3NsaWRlciIgbXNnaWQ9IjIzNjE3ODU5OTIyMTE4NDE3MDkiPiJWb2x1bWVnbHllciI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im1yX2NvbnRyb2xsZXJfbm9fbWVkaWFfc2VsZWN0ZWQiIG1zZ2lkPSI2NTQ3MTMwMzYwMzQ5MTgyMzgxIj4iR2VlbiBtZWRpYSBpcyBnZWtpZXMgbmllIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibXJfY29udHJvbGxlcl9ub19pbmZvX2F2YWlsYWJsZSIgbXNnaWQ9IjU1ODU0MTg0NzE3NDExNDI5MjQiPiJHZWVuIGlubGlndGluZyBiZXNraWtiYWFyIG5pZSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im1yX2NvbnRyb2xsZXJfY2FzdGluZ19zY3JlZW4iIG1zZ2lkPSI0ODY4NDU3OTU3MTUxMTI0ODY3Ij4iU2FhaSB0YW5zIHNrZXJtIHVpdCI8L3N0cmluZz4KLTwvcmVzb3VyY2VzPgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvTWVkaWFDb21wb25lbnRzL3Jlcy92YWx1ZXMtYW0vc3RyaW5ncy54bWwgYi9wYWNrYWdlcy9NZWRpYUNvbXBvbmVudHMvcmVzL3ZhbHVlcy1hbS9zdHJpbmdzLnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzlhMTkwMy4uMDAwMDAwMAotLS0gYS9wYWNrYWdlcy9NZWRpYUNvbXBvbmVudHMvcmVzL3ZhbHVlcy1hbS9zdHJpbmdzLnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDQwICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08IS0tICBDb3B5cmlnaHQgMjAxOCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0Ci0KLSAgICAgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7Ci0gICAgIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KLSAgICAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0KLSAgICAgICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLQotICAgICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCi0gICAgIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCi0gICAgIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgotICAgICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCi0gICAgIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgotIC0tPgotCi08cmVzb3VyY2VzIHhtbG5zOmFuZHJvaWQ9Imh0dHA6Ly9zY2hlbWFzLmFuZHJvaWQuY29tL2Fway9yZXMvYW5kcm9pZCIKLSAgICB4bWxuczp4bGlmZj0idXJuOm9hc2lzOm5hbWVzOnRjOnhsaWZmOmRvY3VtZW50OjEuMiI+Ci0gICAgPHN0cmluZyBuYW1lPSJtcl9zeXN0ZW1fcm91dGVfbmFtZSIgbXNnaWQ9IjU0NDE1Mjk4NTE0ODExNzY4MTciPiLhiLXhiK3hi5PhibUiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJtcl91c2VyX3JvdXRlX2NhdGVnb3J5X25hbWUiIG1zZ2lkPSI3NDk4MTEyOTA3NTI0OTc3MzExIj4i4YiY4Yij4Yiq4Yur4YuO4Ym9Ijwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibXJfYnV0dG9uX2NvbnRlbnRfZGVzY3JpcHRpb24iIG1zZ2lkPSIzNjk4Mzc4MDg1OTAxNDY2MTI5Ij4i4YuoQ2FzdCDhiqDhi53hiKvhiK0iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJtcl9jYXN0X2J1dHRvbl9kaXNjb25uZWN0ZWQiIG1zZ2lkPSI4MTYzMDU0OTA0Mjc4MTkyNDAiPiJDYXN0IOGKoOGLneGIq+GIreGNoiDhjI3hipXhipnhipDhibUg4Ymw4YmL4Yit4Yyn4YiNIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibXJfY2FzdF9idXR0b25fY29ubmVjdGluZyIgbXNnaWQ9IjIxODc2NDI3NjUwOTE4NzM4MzQiPiJDYXN0IOGKoOGLneGIq+GIrSDhiaDhiJvhjIjhipPhipjhibUg4YiL4YutIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibXJfY2FzdF9idXR0b25fY29ubmVjdGVkIiBtc2dpZD0iNTA4ODQyNzc3MTc4ODY0ODA4NSI+IkNhc3Qg4Yqg4Yud4Yir4Yit4Y2iIOGJsOGMiOGKk+GKneGJt+GIjSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im1yX2Nob29zZXJfdGl0bGUiIG1zZ2lkPSI0MTQzMDE5NDE1NDYxMzU5OTAiPiJDYXN0IOGKoOGLteGIreGMjSDhi4jhi7AiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJtcl9jaG9vc2VyX3NlYXJjaGluZyIgbXNnaWQ9IjYzNDk5MDA1Nzk1MDc1MjE5NTYiPiLhiJjhiKPhiKrhi6vhi47hib3hipUg4Ymg4Yib4YyN4YqY4Ym1IOGIi+GLrSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im1yX2NvbnRyb2xsZXJfZGlzY29ubmVjdCIgbXNnaWQ9IjEyMjcyNjQ4ODk0MTI5ODk1ODAiPiLhjI3hipXhipnhipDhibUg4Yqg4YmL4Yit4YylIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibXJfY29udHJvbGxlcl9zdG9wX2Nhc3RpbmciIG1zZ2lkPSI4ODU3ODg2Nzk0MDg2NTgzMjI2Ij4iQ2FzdCDhiJvhi7XhiKjhjI0g4Yqg4YmB4YidIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibXJfY29udHJvbGxlcl9jbG9zZV9kZXNjcmlwdGlvbiIgbXNnaWQ9IjczMzM4NjIzMTI0ODA1ODMyNjAiPiLhi53hjIsiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJtcl9jb250cm9sbGVyX3BsYXkiIG1zZ2lkPSI2ODM2MzQ1NjU5Njk5ODc0NTgiPiLhiqDhjKvhi43hibUiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJtcl9jb250cm9sbGVyX3BhdXNlIiBtc2dpZD0iNTQ1MTg4NDQzNTUxMDkwNTQwNiI+IuGIiOGKoOGNjeGJsyDhiqDhiYHhiJ0iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJtcl9jb250cm9sbGVyX3N0b3AiIG1zZ2lkPSI3MzU4NzQ2NDE5MjE0MjUxMjMiPiLhiqDhiYHhiJ0iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJtcl9jb250cm9sbGVyX2V4cGFuZF9ncm91cCIgbXNnaWQ9IjgwNjI0MjcwMjI3NDQyNjY5MDciPiLhiqDhiLXhjYsiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJtcl9jb250cm9sbGVyX2NvbGxhcHNlX2dyb3VwIiBtc2dpZD0iNzkyNDgwOTA1NjkwNDI0MDkyNiI+IuGIsOGJpeGIteGJpSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im1yX2NvbnRyb2xsZXJfYWxidW1fYXJ0IiBtc2dpZD0iNjQyMjgwMTg0MzU0MDU0MzU4NSI+IuGLqOGKoOGIjeGJoOGInSDhiLXhipAt4Yyl4Ymg4YmlIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibXJfY29udHJvbGxlcl92b2x1bWVfc2xpZGVyIiBtc2dpZD0iMjM2MTc4NTk5MjIxMTg0MTcwOSI+IuGJsOGKleGIuOGIq+GJs+GJvSDhi6jhi7XhiJ3hjYUg4YiY4YmG4Yyj4Yyg4Yiq4YurIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibXJfY29udHJvbGxlcl9ub19tZWRpYV9zZWxlY3RlZCIgbXNnaWQ9IjY1NDcxMzAzNjAzNDkxODIzODEiPiLhiJ3hipXhiJ0g4Yib4YiF4Yuw4Yio4YiY4Yio4YyDIOGKoOGIjeGJsOGImOGIqOGMoOGInSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im1yX2NvbnRyb2xsZXJfbm9faW5mb19hdmFpbGFibGUiIG1zZ2lkPSI1NTg1NDE4NDcxNzQxMTQyOTI0Ij4i4Yid4YqV4YidIOGImOGIqOGMgyDhiqDhi63hjIjhip3hiJ0iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJtcl9jb250cm9sbGVyX2Nhc3Rpbmdfc2NyZWVuIiBtc2dpZD0iNDg2ODQ1Nzk1NzE1MTEyNDg2NyI+IuGIm+GLqyDhjIjhjL3hipUg4Ymg4YiY4YuN4Yiw4Yu1IOGIi+GLrSI8L3N0cmluZz4KLTwvcmVzb3VyY2VzPgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvTWVkaWFDb21wb25lbnRzL3Jlcy92YWx1ZXMtYXIvc3RyaW5ncy54bWwgYi9wYWNrYWdlcy9NZWRpYUNvbXBvbmVudHMvcmVzL3ZhbHVlcy1hci9zdHJpbmdzLnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjhmYjk3ZC4uMDAwMDAwMAotLS0gYS9wYWNrYWdlcy9NZWRpYUNvbXBvbmVudHMvcmVzL3ZhbHVlcy1hci9zdHJpbmdzLnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDQwICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08IS0tICBDb3B5cmlnaHQgMjAxOCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0Ci0KLSAgICAgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7Ci0gICAgIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KLSAgICAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0KLSAgICAgICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLQotICAgICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCi0gICAgIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCi0gICAgIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgotICAgICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCi0gICAgIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgotIC0tPgotCi08cmVzb3VyY2VzIHhtbG5zOmFuZHJvaWQ9Imh0dHA6Ly9zY2hlbWFzLmFuZHJvaWQuY29tL2Fway9yZXMvYW5kcm9pZCIKLSAgICB4bWxuczp4bGlmZj0idXJuOm9hc2lzOm5hbWVzOnRjOnhsaWZmOmRvY3VtZW50OjEuMiI+Ci0gICAgPHN0cmluZyBuYW1lPSJtcl9zeXN0ZW1fcm91dGVfbmFtZSIgbXNnaWQ9IjU0NDE1Mjk4NTE0ODExNzY4MTciPiLYp9mE2YbYuNin2YUiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJtcl91c2VyX3JvdXRlX2NhdGVnb3J5X25hbWUiIG1zZ2lkPSI3NDk4MTEyOTA3NTI0OTc3MzExIj4i2KfZhNij2KzZh9iy2KkiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJtcl9idXR0b25fY29udGVudF9kZXNjcmlwdGlvbiIgbXNnaWQ9IjM2OTgzNzgwODU5MDE0NjYxMjkiPiLYstixINin2YTYpdix2LPYp9mEIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibXJfY2FzdF9idXR0b25fZGlzY29ubmVjdGVkIiBtc2dpZD0iODE2MzA1NDkwNDI3ODE5MjQwIj4i2LLYsSDYp9mE2KXYsdiz2KfZhC4g2KrZhSDZgti32Lkg2KfZhNin2KrYtdin2YQiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJtcl9jYXN0X2J1dHRvbl9jb25uZWN0aW5nIiBtc2dpZD0iMjE4NzY0Mjc2NTA5MTg3MzgzNCI+Itiy2LEg2KfZhNil2LHYs9in2YQuINis2KfYsdmNINin2YTYp9iq2LXYp9mEIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibXJfY2FzdF9idXR0b25fY29ubmVjdGVkIiBtc2dpZD0iNTA4ODQyNzc3MTc4ODY0ODA4NSI+Itiy2LEg2KfZhNil2LHYs9in2YQuINiq2YUg2KfZhNin2KrYtdin2YQiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJtcl9jaG9vc2VyX3RpdGxlIiBtc2dpZD0iNDE0MzAxOTQxNTQ2MTM1OTkwIj4i2KXYsdiz2KfZhCDYpdmE2YkiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJtcl9jaG9vc2VyX3NlYXJjaGluZyIgbXNnaWQ9IjYzNDk5MDA1Nzk1MDc1MjE5NTYiPiLYrNin2LHZjSDYp9mE2KjYrdirINi52YYg2KPYrNmH2LLYqSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im1yX2NvbnRyb2xsZXJfZGlzY29ubmVjdCIgbXNnaWQ9IjEyMjcyNjQ4ODk0MTI5ODk1ODAiPiLZgti32Lkg2KfZhNin2KrYtdin2YQiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJtcl9jb250cm9sbGVyX3N0b3BfY2FzdGluZyIgbXNnaWQ9Ijg4NTc4ODY3OTQwODY1ODMyMjYiPiLYpdmK2YLYp9mBINin2YTYpdix2LPYp9mEIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibXJfY29udHJvbGxlcl9jbG9zZV9kZXNjcmlwdGlvbiIgbXNnaWQ9IjczMzM4NjIzMTI0ODA1ODMyNjAiPiLYpdi62YTYp9mCIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibXJfY29udHJvbGxlcl9wbGF5IiBtc2dpZD0iNjgzNjM0NTY1OTY5OTg3NDU4Ij4i2KrYtNi62YrZhCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im1yX2NvbnRyb2xsZXJfcGF1c2UiIG1zZ2lkPSI1NDUxODg0NDM1NTEwOTA1NDA2Ij4i2KXZitmC2KfZgSDZhdik2YLYqiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im1yX2NvbnRyb2xsZXJfc3RvcCIgbXNnaWQ9IjczNTg3NDY0MTkyMTQyNTEyMyI+Itil2YrZgtin2YEiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJtcl9jb250cm9sbGVyX2V4cGFuZF9ncm91cCIgbXNnaWQ9IjgwNjI0MjcwMjI3NDQyNjY5MDciPiLYqtmI2LPZiti5Ijwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibXJfY29udHJvbGxlcl9jb2xsYXBzZV9ncm91cCIgbXNnaWQ9Ijc5MjQ4MDkwNTY5MDQyNDA5MjYiPiLYqti12LrZitixIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibXJfY29udHJvbGxlcl9hbGJ1bV9hcnQiIG1zZ2lkPSI2NDIyODAxODQzNTQwNTQzNTg1Ij4i2LXZiNix2Kkg2KfZhNij2YTYqNmI2YUiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJtcl9jb250cm9sbGVyX3ZvbHVtZV9zbGlkZXIiIG1zZ2lkPSIyMzYxNzg1OTkyMjExODQxNzA5Ij4i2LTYsdmK2Lcg2KrZhdix2YrYsSDZhdiz2KrZiNmJINin2YTYtdmI2KoiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJtcl9jb250cm9sbGVyX25vX21lZGlhX3NlbGVjdGVkIiBtc2dpZD0iNjU0NzEzMDM2MDM0OTE4MjM4MSI+ItmE2YUg2YrYqtmFINin2K7YqtmK2KfYsSDYo9mKINmI2LPYp9im2LciPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJtcl9jb250cm9sbGVyX25vX2luZm9fYXZhaWxhYmxlIiBtc2dpZD0iNTU4NTQxODQ3MTc0MTE0MjkyNCI+ItmE2Kcg2KrYqtmI2YHYsSDYo9mKINmF2LnZhNmI2YXYp9iqIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibXJfY29udHJvbGxlcl9jYXN0aW5nX3NjcmVlbiIgbXNnaWQ9IjQ4Njg0NTc5NTcxNTExMjQ4NjciPiLYrNin2LHZjSDYpdix2LPYp9mEINin2YTYtNin2LTYqSI8L3N0cmluZz4KLTwvcmVzb3VyY2VzPgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvTWVkaWFDb21wb25lbnRzL3Jlcy92YWx1ZXMtYXovc3RyaW5ncy54bWwgYi9wYWNrYWdlcy9NZWRpYUNvbXBvbmVudHMvcmVzL3ZhbHVlcy1hei9zdHJpbmdzLnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTNjNjBhYi4uMDAwMDAwMAotLS0gYS9wYWNrYWdlcy9NZWRpYUNvbXBvbmVudHMvcmVzL3ZhbHVlcy1hei9zdHJpbmdzLnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDQwICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08IS0tICBDb3B5cmlnaHQgMjAxOCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0Ci0KLSAgICAgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7Ci0gICAgIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KLSAgICAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0KLSAgICAgICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLQotICAgICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCi0gICAgIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCi0gICAgIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgotICAgICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCi0gICAgIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgotIC0tPgotCi08cmVzb3VyY2VzIHhtbG5zOmFuZHJvaWQ9Imh0dHA6Ly9zY2hlbWFzLmFuZHJvaWQuY29tL2Fway9yZXMvYW5kcm9pZCIKLSAgICB4bWxuczp4bGlmZj0idXJuOm9hc2lzOm5hbWVzOnRjOnhsaWZmOmRvY3VtZW50OjEuMiI+Ci0gICAgPHN0cmluZyBuYW1lPSJtcl9zeXN0ZW1fcm91dGVfbmFtZSIgbXNnaWQ9IjU0NDE1Mjk4NTE0ODExNzY4MTciPiJTaXN0ZW0iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJtcl91c2VyX3JvdXRlX2NhdGVnb3J5X25hbWUiIG1zZ2lkPSI3NDk4MTEyOTA3NTI0OTc3MzExIj4iQ2loYXpsYXIiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJtcl9idXR0b25fY29udGVudF9kZXNjcmlwdGlvbiIgbXNnaWQ9IjM2OTgzNzgwODU5MDE0NjYxMjkiPiJZYXnEsW0gZMO8eW3JmXNpIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibXJfY2FzdF9idXR0b25fZGlzY29ubmVjdGVkIiBtc2dpZD0iODE2MzA1NDkwNDI3ODE5MjQwIj4iWWF5xLFtIGTDvHltyZlzaS4gQmHEn2xhbnTEsSBryZlzaWxkaSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im1yX2Nhc3RfYnV0dG9uX2Nvbm5lY3RpbmciIG1zZ2lkPSIyMTg3NjQyNzY1MDkxODczODM0Ij4iWWF5xLFtIGTDvHltyZlzaS4gUW/Fn3VsdXIiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJtcl9jYXN0X2J1dHRvbl9jb25uZWN0ZWQiIG1zZ2lkPSI1MDg4NDI3NzcxNzg4NjQ4MDg1Ij4iWWF5xLFtIGTDvHltyZlzaS4gUW/Fn3VsZHUiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJtcl9jaG9vc2VyX3RpdGxlIiBtc2dpZD0iNDE0MzAxOTQxNTQ2MTM1OTkwIj4iQnVyYSB5YXnEsW1sYXnEsW4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJtcl9jaG9vc2VyX3NlYXJjaGluZyIgbXNnaWQ9IjYzNDk5MDA1Nzk1MDc1MjE5NTYiPiJDaWhhemxhciBheHRhcsSxbMSxciI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im1yX2NvbnRyb2xsZXJfZGlzY29ubmVjdCIgbXNnaWQ9IjEyMjcyNjQ4ODk0MTI5ODk1ODAiPiJCYcSfbGFudMSxbsSxIGvJmXNpbiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im1yX2NvbnRyb2xsZXJfc3RvcF9jYXN0aW5nIiBtc2dpZD0iODg1Nzg4Njc5NDA4NjU4MzIyNiI+IllhecSxbcSxIGRheWFuZMSxcsSxbiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im1yX2NvbnRyb2xsZXJfY2xvc2VfZGVzY3JpcHRpb24iIG1zZ2lkPSI3MzMzODYyMzEyNDgwNTgzMjYwIj4iUWFwYWTEsW4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJtcl9jb250cm9sbGVyX3BsYXkiIG1zZ2lkPSI2ODM2MzQ1NjU5Njk5ODc0NTgiPiJPeW5hZMSxbiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im1yX2NvbnRyb2xsZXJfcGF1c2UiIG1zZ2lkPSI1NDUxODg0NDM1NTEwOTA1NDA2Ij4iRHVyZHVydW4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJtcl9jb250cm9sbGVyX3N0b3AiIG1zZ2lkPSI3MzU4NzQ2NDE5MjE0MjUxMjMiPiJEYXlhbmTEsXLEsW4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJtcl9jb250cm9sbGVyX2V4cGFuZF9ncm91cCIgbXNnaWQ9IjgwNjI0MjcwMjI3NDQyNjY5MDciPiJHZW5pxZ9syZluZGlyaW4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJtcl9jb250cm9sbGVyX2NvbGxhcHNlX2dyb3VwIiBtc2dpZD0iNzkyNDgwOTA1NjkwNDI0MDkyNiI+IlnEscSfY2FtbGHFn2TEsXLEsW4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJtcl9jb250cm9sbGVyX2FsYnVtX2FydCIgbXNnaWQ9IjY0MjI4MDE4NDM1NDA1NDM1ODUiPiJBbGJvbSBpbmPJmXPJmW7JmXRpIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibXJfY29udHJvbGxlcl92b2x1bWVfc2xpZGVyIiBtc2dpZD0iMjM2MTc4NTk5MjIxMTg0MTcwOSI+IlPJmXMgaMmZcm1pIGRpeWlyY8mZeWkiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJtcl9jb250cm9sbGVyX25vX21lZGlhX3NlbGVjdGVkIiBtc2dpZD0iNjU0NzEzMDM2MDM0OTE4MjM4MSI+Ikhlw6cgYmlyIG1lZGlhIHNlw6dpbG3JmXlpYiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im1yX2NvbnRyb2xsZXJfbm9faW5mb19hdmFpbGFibGUiIG1zZ2lkPSI1NTg1NDE4NDcxNzQxMTQyOTI0Ij4ixo9sw6dhdGFuIG3JmWx1bWF0IHlveGR1ciI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im1yX2NvbnRyb2xsZXJfY2FzdGluZ19zY3JlZW4iIG1zZ2lkPSI0ODY4NDU3OTU3MTUxMTI0ODY3Ij4iRWtyYW4geWF5xLFtbGFuxLFyIjwvc3RyaW5nPgotPC9yZXNvdXJjZXM+CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9NZWRpYUNvbXBvbmVudHMvcmVzL3ZhbHVlcy1iK3NyK0xhdG4vc3RyaW5ncy54bWwgYi9wYWNrYWdlcy9NZWRpYUNvbXBvbmVudHMvcmVzL3ZhbHVlcy1iK3NyK0xhdG4vc3RyaW5ncy54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGUyNWJkNmUuLjAwMDAwMDAKLS0tIGEvcGFja2FnZXMvTWVkaWFDb21wb25lbnRzL3Jlcy92YWx1ZXMtYitzcitMYXRuL3N0cmluZ3MueG1sCisrKyAvZGV2L251bGwKQEAgLTEsNDAgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTwhLS0gIENvcHlyaWdodCAyMDE4IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKLQotICAgICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKLSAgICAgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgotICAgICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLQotICAgICAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotCi0gICAgIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKLSAgICAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKLSAgICAgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCi0gICAgIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKLSAgICAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCi0gLS0+Ci0KLTxyZXNvdXJjZXMgeG1sbnM6YW5kcm9pZD0iaHR0cDovL3NjaGVtYXMuYW5kcm9pZC5jb20vYXBrL3Jlcy9hbmRyb2lkIgotICAgIHhtbG5zOnhsaWZmPSJ1cm46b2FzaXM6bmFtZXM6dGM6eGxpZmY6ZG9jdW1lbnQ6MS4yIj4KLSAgICA8c3RyaW5nIG5hbWU9Im1yX3N5c3RlbV9yb3V0ZV9uYW1lIiBtc2dpZD0iNTQ0MTUyOTg1MTQ4MTE3NjgxNyI+IlNpc3RlbSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im1yX3VzZXJfcm91dGVfY2F0ZWdvcnlfbmFtZSIgbXNnaWQ9Ijc0OTgxMTI5MDc1MjQ5NzczMTEiPiJVcmXEkWFqaSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im1yX2J1dHRvbl9jb250ZW50X2Rlc2NyaXB0aW9uIiBtc2dpZD0iMzY5ODM3ODA4NTkwMTQ2NjEyOSI+IkR1Z21lIFByZWJhY2kiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJtcl9jYXN0X2J1dHRvbl9kaXNjb25uZWN0ZWQiIG1zZ2lkPSI4MTYzMDU0OTA0Mjc4MTkyNDAiPiJEdWdtZSBQcmViYWNpLiBWZXphIGplIHByZWtpbnV0YSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im1yX2Nhc3RfYnV0dG9uX2Nvbm5lY3RpbmciIG1zZ2lkPSIyMTg3NjQyNzY1MDkxODczODM0Ij4iRHVnbWUgUHJlYmFjaS4gUG92ZXp1amUgc2UiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJtcl9jYXN0X2J1dHRvbl9jb25uZWN0ZWQiIG1zZ2lkPSI1MDg4NDI3NzcxNzg4NjQ4MDg1Ij4iRHVnbWUgUHJlYmFjaS4gUG92ZXphbiBqZSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im1yX2Nob29zZXJfdGl0bGUiIG1zZ2lkPSI0MTQzMDE5NDE1NDYxMzU5OTAiPiJQcmViYWN1aiBuYSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im1yX2Nob29zZXJfc2VhcmNoaW5nIiBtc2dpZD0iNjM0OTkwMDU3OTUwNzUyMTk1NiI+IlByb25hbGHFvmVuamUgdXJlxJFhamEiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJtcl9jb250cm9sbGVyX2Rpc2Nvbm5lY3QiIG1zZ2lkPSIxMjI3MjY0ODg5NDEyOTg5NTgwIj4iUHJla2luaSB2ZXp1Ijwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibXJfY29udHJvbGxlcl9zdG9wX2Nhc3RpbmciIG1zZ2lkPSI4ODU3ODg2Nzk0MDg2NTgzMjI2Ij4iWmF1c3RhdmkgcHJlYmFjaXZhbmplIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibXJfY29udHJvbGxlcl9jbG9zZV9kZXNjcmlwdGlvbiIgbXNnaWQ9IjczMzM4NjIzMTI0ODA1ODMyNjAiPiJaYXR2b3JpIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibXJfY29udHJvbGxlcl9wbGF5IiBtc2dpZD0iNjgzNjM0NTY1OTY5OTg3NDU4Ij4iUHVzdGkiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJtcl9jb250cm9sbGVyX3BhdXNlIiBtc2dpZD0iNTQ1MTg4NDQzNTUxMDkwNTQwNiI+IlBhdXppcmFqIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibXJfY29udHJvbGxlcl9zdG9wIiBtc2dpZD0iNzM1ODc0NjQxOTIxNDI1MTIzIj4iWmF1c3RhdmkiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJtcl9jb250cm9sbGVyX2V4cGFuZF9ncm91cCIgbXNnaWQ9IjgwNjI0MjcwMjI3NDQyNjY5MDciPiJQcm/FoWlyaSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im1yX2NvbnRyb2xsZXJfY29sbGFwc2VfZ3JvdXAiIG1zZ2lkPSI3OTI0ODA5MDU2OTA0MjQwOTI2Ij4iU2t1cGkiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJtcl9jb250cm9sbGVyX2FsYnVtX2FydCIgbXNnaWQ9IjY0MjI4MDE4NDM1NDA1NDM1ODUiPiJPbW90IGFsYnVtYSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im1yX2NvbnRyb2xsZXJfdm9sdW1lX3NsaWRlciIgbXNnaWQ9IjIzNjE3ODU5OTIyMTE4NDE3MDkiPiJLbGl6YcSNIHphIGphxI1pbnUgenZ1a2EiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJtcl9jb250cm9sbGVyX25vX21lZGlhX3NlbGVjdGVkIiBtc2dpZD0iNjU0NzEzMDM2MDM0OTE4MjM4MSI+Ik5lbWEgaXphYnJhbmloIG1lZGlqYSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im1yX2NvbnRyb2xsZXJfbm9faW5mb19hdmFpbGFibGUiIG1zZ2lkPSI1NTg1NDE4NDcxNzQxMTQyOTI0Ij4iTmlzdSBkb3N0dXBuZSBuaWtha3ZlIGluZm9ybWFjaWplIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibXJfY29udHJvbGxlcl9jYXN0aW5nX3NjcmVlbiIgbXNnaWQ9IjQ4Njg0NTc5NTcxNTExMjQ4NjciPiJQcmViYWN1amUgc2UgZWtyYW4iPC9zdHJpbmc+Ci08L3Jlc291cmNlcz4KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL01lZGlhQ29tcG9uZW50cy9yZXMvdmFsdWVzLWJlL3N0cmluZ3MueG1sIGIvcGFja2FnZXMvTWVkaWFDb21wb25lbnRzL3Jlcy92YWx1ZXMtYmUvc3RyaW5ncy54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGFjMzkxYzEuLjAwMDAwMDAKLS0tIGEvcGFja2FnZXMvTWVkaWFDb21wb25lbnRzL3Jlcy92YWx1ZXMtYmUvc3RyaW5ncy54bWwKKysrIC9kZXYvbnVsbApAQCAtMSw0MCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPCEtLSAgQ29weXJpZ2h0IDIwMTggVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAotCi0gICAgIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwotICAgICB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCi0gICAgIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotCi0gICAgICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0KLSAgICAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQotICAgICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAotICAgICBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KLSAgICAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAotICAgICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KLSAtLT4KLQotPHJlc291cmNlcyB4bWxuczphbmRyb2lkPSJodHRwOi8vc2NoZW1hcy5hbmRyb2lkLmNvbS9hcGsvcmVzL2FuZHJvaWQiCi0gICAgeG1sbnM6eGxpZmY9InVybjpvYXNpczpuYW1lczp0Yzp4bGlmZjpkb2N1bWVudDoxLjIiPgotICAgIDxzdHJpbmcgbmFtZT0ibXJfc3lzdGVtX3JvdXRlX25hbWUiIG1zZ2lkPSI1NDQxNTI5ODUxNDgxMTc2ODE3Ij4i0KHRltGB0YLRjdC80LAiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJtcl91c2VyX3JvdXRlX2NhdGVnb3J5X25hbWUiIG1zZ2lkPSI3NDk4MTEyOTA3NTI0OTc3MzExIj4i0J/RgNGL0LvQsNC00YsiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJtcl9idXR0b25fY29udGVudF9kZXNjcmlwdGlvbiIgbXNnaWQ9IjM2OTgzNzgwODU5MDE0NjYxMjkiPiLQmtC90L7Qv9C60LAg0YLRgNCw0L3RgdC70Y/RhtGL0ZYiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJtcl9jYXN0X2J1dHRvbl9kaXNjb25uZWN0ZWQiIG1zZ2lkPSI4MTYzMDU0OTA0Mjc4MTkyNDAiPiLQmtC90L7Qv9C60LAg0YLRgNCw0L3RgdC70Y/RhtGL0ZYuINCQ0LTQutC70Y7Rh9Cw0L3QsCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im1yX2Nhc3RfYnV0dG9uX2Nvbm5lY3RpbmciIG1zZ2lkPSIyMTg3NjQyNzY1MDkxODczODM0Ij4i0JrQvdC+0L/QutCwINGC0YDQsNC90YHQu9GP0YbRi9GWLiDQhtC00LfQtSDQv9Cw0LTQutC70Y7Rh9GN0L3QvdC1Ijwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibXJfY2FzdF9idXR0b25fY29ubmVjdGVkIiBtc2dpZD0iNTA4ODQyNzc3MTc4ODY0ODA4NSI+ItCa0L3QvtC/0LrQsCDRgtGA0LDQvdGB0LvRj9GG0YvRli4g0J/QsNC00LrQu9GO0YfQsNC90LAiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJtcl9jaG9vc2VyX3RpdGxlIiBtc2dpZD0iNDE0MzAxOTQxNTQ2MTM1OTkwIj4i0KLRgNCw0L3RgdC70ZbRgNCw0LLQsNGG0Ywg0L3QsCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im1yX2Nob29zZXJfc2VhcmNoaW5nIiBtc2dpZD0iNjM0OTkwMDU3OTUwNzUyMTk1NiI+ItCf0L7RiNGD0Log0L/RgNGL0LvQsNC0Ijwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibXJfY29udHJvbGxlcl9kaXNjb25uZWN0IiBtc2dpZD0iMTIyNzI2NDg4OTQxMjk4OTU4MCI+ItCQ0LTQu9GD0YfRi9GG0YwiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJtcl9jb250cm9sbGVyX3N0b3BfY2FzdGluZyIgbXNnaWQ9Ijg4NTc4ODY3OTQwODY1ODMyMjYiPiLQodC/0YvQvdGW0YbRjCDRgtGA0LDQvdGB0LvRj9GG0YvRjiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im1yX2NvbnRyb2xsZXJfY2xvc2VfZGVzY3JpcHRpb24iIG1zZ2lkPSI3MzMzODYyMzEyNDgwNTgzMjYwIj4i0JfQsNC60YDRi9GG0YwiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJtcl9jb250cm9sbGVyX3BsYXkiIG1zZ2lkPSI2ODM2MzQ1NjU5Njk5ODc0NTgiPiLQn9GA0LDQudCz0YDQsNGG0YwiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJtcl9jb250cm9sbGVyX3BhdXNlIiBtc2dpZD0iNTQ1MTg4NDQzNTUxMDkwNTQwNiI+ItCf0YDRi9C/0YvQvdGW0YbRjCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im1yX2NvbnRyb2xsZXJfc3RvcCIgbXNnaWQ9IjczNTg3NDY0MTkyMTQyNTEyMyI+ItCh0L/Ri9C90ZbRhtGMIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibXJfY29udHJvbGxlcl9leHBhbmRfZ3JvdXAiIG1zZ2lkPSI4MDYyNDI3MDIyNzQ0MjY2OTA3Ij4i0KDQsNC30LPQsNGA0L3Rg9GG0YwiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJtcl9jb250cm9sbGVyX2NvbGxhcHNlX2dyb3VwIiBtc2dpZD0iNzkyNDgwOTA1NjkwNDI0MDkyNiI+ItCX0LPQsNGA0L3Rg9GG0YwiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJtcl9jb250cm9sbGVyX2FsYnVtX2FydCIgbXNnaWQ9IjY0MjI4MDE4NDM1NDA1NDM1ODUiPiLQktC+0LrQu9Cw0LTQutCwINCw0LvRjNCx0L7QvNCwIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibXJfY29udHJvbGxlcl92b2x1bWVfc2xpZGVyIiBtc2dpZD0iMjM2MTc4NTk5MjIxMTg0MTcwOSI+ItCf0LDRntC30YPQvdC+0Log0LPRg9GH0L3QsNGB0YbRliI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im1yX2NvbnRyb2xsZXJfbm9fbWVkaWFfc2VsZWN0ZWQiIG1zZ2lkPSI2NTQ3MTMwMzYwMzQ5MTgyMzgxIj4i0JzQtdC00YvRj9GE0LDQudC7INC90LUg0LLRi9Cx0YDQsNC90YsiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJtcl9jb250cm9sbGVyX25vX2luZm9fYXZhaWxhYmxlIiBtc2dpZD0iNTU4NTQxODQ3MTc0MTE0MjkyNCI+ItCG0L3RhNCw0YDQvNCw0YbRi9GPINCw0LTRgdGD0YLQvdGW0YfQsNC1Ijwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibXJfY29udHJvbGxlcl9jYXN0aW5nX3NjcmVlbiIgbXNnaWQ9IjQ4Njg0NTc5NTcxNTExMjQ4NjciPiLQrdC60YDQsNC9INGC0YDQsNC90YHQu9GP0YbRi9GWIjwvc3RyaW5nPgotPC9yZXNvdXJjZXM+CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9NZWRpYUNvbXBvbmVudHMvcmVzL3ZhbHVlcy1iZy9zdHJpbmdzLnhtbCBiL3BhY2thZ2VzL01lZGlhQ29tcG9uZW50cy9yZXMvdmFsdWVzLWJnL3N0cmluZ3MueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3NjcxMmQ0Li4wMDAwMDAwCi0tLSBhL3BhY2thZ2VzL01lZGlhQ29tcG9uZW50cy9yZXMvdmFsdWVzLWJnL3N0cmluZ3MueG1sCisrKyAvZGV2L251bGwKQEAgLTEsNDAgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTwhLS0gIENvcHlyaWdodCAyMDE4IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKLQotICAgICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKLSAgICAgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgotICAgICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLQotICAgICAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotCi0gICAgIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKLSAgICAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKLSAgICAgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCi0gICAgIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKLSAgICAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCi0gLS0+Ci0KLTxyZXNvdXJjZXMgeG1sbnM6YW5kcm9pZD0iaHR0cDovL3NjaGVtYXMuYW5kcm9pZC5jb20vYXBrL3Jlcy9hbmRyb2lkIgotICAgIHhtbG5zOnhsaWZmPSJ1cm46b2FzaXM6bmFtZXM6dGM6eGxpZmY6ZG9jdW1lbnQ6MS4yIj4KLSAgICA8c3RyaW5nIG5hbWU9Im1yX3N5c3RlbV9yb3V0ZV9uYW1lIiBtc2dpZD0iNTQ0MTUyOTg1MTQ4MTE3NjgxNyI+ItCh0LjRgdGC0LXQvNCwIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibXJfdXNlcl9yb3V0ZV9jYXRlZ29yeV9uYW1lIiBtc2dpZD0iNzQ5ODExMjkwNzUyNDk3NzMxMSI+ItCj0YHRgtGA0L7QudGB0YLQstCwIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibXJfYnV0dG9uX2NvbnRlbnRfZGVzY3JpcHRpb24iIG1zZ2lkPSIzNjk4Mzc4MDg1OTAxNDY2MTI5Ij4i0JHRg9GC0L7QvSDQt9CwINC/0YDQtdC00LDQstCw0L3QtSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im1yX2Nhc3RfYnV0dG9uX2Rpc2Nvbm5lY3RlZCIgbXNnaWQ9IjgxNjMwNTQ5MDQyNzgxOTI0MCI+ItCR0YPRgtC+0L0g0LfQsCDQv9GA0LXQtNCw0LLQsNC90LUuINCS0YDRitC30LrQsNGC0LAg0LUg0L/RgNC10LrRgNCw0YLQtdC90LAiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJtcl9jYXN0X2J1dHRvbl9jb25uZWN0aW5nIiBtc2dpZD0iMjE4NzY0Mjc2NTA5MTg3MzgzNCI+ItCR0YPRgtC+0L0g0LfQsCDQv9GA0LXQtNCw0LLQsNC90LUuINCh0LLRitGA0LfQstCwINGB0LUiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJtcl9jYXN0X2J1dHRvbl9jb25uZWN0ZWQiIG1zZ2lkPSI1MDg4NDI3NzcxNzg4NjQ4MDg1Ij4i0JHRg9GC0L7QvSDQt9CwINC/0YDQtdC00LDQstCw0L3QtS4g0KPRgdGC0LDQvdC+0LLQtdC90LAg0LUg0LLRgNGK0LfQutCwIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibXJfY2hvb3Nlcl90aXRsZSIgbXNnaWQ9IjQxNDMwMTk0MTU0NjEzNTk5MCI+ItCf0YDQtdC00LDQstCw0L3QtSDQutGK0LwiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJtcl9jaG9vc2VyX3NlYXJjaGluZyIgbXNnaWQ9IjYzNDk5MDA1Nzk1MDc1MjE5NTYiPiLQotGK0YDRgdGP0YIg0YHQtSDRg9GB0YLRgNC+0LnRgdGC0LLQsCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im1yX2NvbnRyb2xsZXJfZGlzY29ubmVjdCIgbXNnaWQ9IjEyMjcyNjQ4ODk0MTI5ODk1ODAiPiLQn9GA0LXQutGA0LDRgtGP0LLQsNC90LUg0L3QsCDQstGA0YrQt9C60LDRgtCwIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibXJfY29udHJvbGxlcl9zdG9wX2Nhc3RpbmciIG1zZ2lkPSI4ODU3ODg2Nzk0MDg2NTgzMjI2Ij4i0KHQv9C40YDQsNC90LUg0L3QsCDQv9GA0LXQtNCw0LLQsNC90LXRgtC+Ijwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibXJfY29udHJvbGxlcl9jbG9zZV9kZXNjcmlwdGlvbiIgbXNnaWQ9IjczMzM4NjIzMTI0ODA1ODMyNjAiPiLQl9Cw0YLQstCw0YDRj9C90LUiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJtcl9jb250cm9sbGVyX3BsYXkiIG1zZ2lkPSI2ODM2MzQ1NjU5Njk5ODc0NTgiPiLQn9GD0YHQutCw0L3QtSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im1yX2NvbnRyb2xsZXJfcGF1c2UiIG1zZ2lkPSI1NDUxODg0NDM1NTEwOTA1NDA2Ij4i0J/QvtGB0YLQsNCy0Y/QvdC1INC90LAg0L/QsNGD0LfQsCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im1yX2NvbnRyb2xsZXJfc3RvcCIgbXNnaWQ9IjczNTg3NDY0MTkyMTQyNTEyMyI+ItCh0L/QuNGA0LDQvdC1Ijwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibXJfY29udHJvbGxlcl9leHBhbmRfZ3JvdXAiIG1zZ2lkPSI4MDYyNDI3MDIyNzQ0MjY2OTA3Ij4i0KDQsNC30LPRitCy0LDQvdC1Ijwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibXJfY29udHJvbGxlcl9jb2xsYXBzZV9ncm91cCIgbXNnaWQ9Ijc5MjQ4MDkwNTY5MDQyNDA5MjYiPiLQodCy0LjQstCw0L3QtSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im1yX2NvbnRyb2xsZXJfYWxidW1fYXJ0IiBtc2dpZD0iNjQyMjgwMTg0MzU0MDU0MzU4NSI+ItCe0LHQu9C+0LbQutCwINC90LAg0LDQu9Cx0YPQvNCwIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibXJfY29udHJvbGxlcl92b2x1bWVfc2xpZGVyIiBtc2dpZD0iMjM2MTc4NTk5MjIxMTg0MTcwOSI+ItCf0LvRitC30LPQsNGHINC30LAg0YHQuNC70LDRgtCwINC90LAg0LfQstGD0LrQsCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im1yX2NvbnRyb2xsZXJfbm9fbWVkaWFfc2VsZWN0ZWQiIG1zZ2lkPSI2NTQ3MTMwMzYwMzQ5MTgyMzgxIj4i0J3Rj9C80LAg0LjQt9Cx0YDQsNC90LAg0LzRg9C70YLQuNC80LXQtNC40Y8iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJtcl9jb250cm9sbGVyX25vX2luZm9fYXZhaWxhYmxlIiBtc2dpZD0iNTU4NTQxODQ3MTc0MTE0MjkyNCI+ItCd0Y/QvNCwINC90LDQu9C40YfQvdCwINC40L3RhNC+0YDQvNCw0YbQuNGPIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibXJfY29udHJvbGxlcl9jYXN0aW5nX3NjcmVlbiIgbXNnaWQ9IjQ4Njg0NTc5NTcxNTExMjQ4NjciPiLQldC60YDQsNC90YrRgiDRgdC1INC/0YDQtdC00LDQstCwIjwvc3RyaW5nPgotPC9yZXNvdXJjZXM+CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9NZWRpYUNvbXBvbmVudHMvcmVzL3ZhbHVlcy1ibi9zdHJpbmdzLnhtbCBiL3BhY2thZ2VzL01lZGlhQ29tcG9uZW50cy9yZXMvdmFsdWVzLWJuL3N0cmluZ3MueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxYmY1OTMyLi4wMDAwMDAwCi0tLSBhL3BhY2thZ2VzL01lZGlhQ29tcG9uZW50cy9yZXMvdmFsdWVzLWJuL3N0cmluZ3MueG1sCisrKyAvZGV2L251bGwKQEAgLTEsNDAgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTwhLS0gIENvcHlyaWdodCAyMDE4IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKLQotICAgICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKLSAgICAgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgotICAgICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLQotICAgICAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotCi0gICAgIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKLSAgICAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKLSAgICAgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCi0gICAgIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKLSAgICAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCi0gLS0+Ci0KLTxyZXNvdXJjZXMgeG1sbnM6YW5kcm9pZD0iaHR0cDovL3NjaGVtYXMuYW5kcm9pZC5jb20vYXBrL3Jlcy9hbmRyb2lkIgotICAgIHhtbG5zOnhsaWZmPSJ1cm46b2FzaXM6bmFtZXM6dGM6eGxpZmY6ZG9jdW1lbnQ6MS4yIj4KLSAgICA8c3RyaW5nIG5hbWU9Im1yX3N5c3RlbV9yb3V0ZV9uYW1lIiBtc2dpZD0iNTQ0MTUyOTg1MTQ4MTE3NjgxNyI+IuCmuOCmv+CmuOCnjeCmn+Cnh+CmriI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im1yX3VzZXJfcm91dGVfY2F0ZWdvcnlfbmFtZSIgbXNnaWQ9Ijc0OTgxMTI5MDc1MjQ5NzczMTEiPiLgpqHgpr/gpq3gpr7gpofgprjgppfgp4HgprLgpr8iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJtcl9idXR0b25fY29udGVudF9kZXNjcmlwdGlvbiIgbXNnaWQ9IjM2OTgzNzgwODU5MDE0NjYxMjkiPiLgppXgpr7gprjgp43gpp8g4KaV4Kaw4Ka+4KawIOCmrOCni+CmpOCmvuCmriI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im1yX2Nhc3RfYnV0dG9uX2Rpc2Nvbm5lY3RlZCIgbXNnaWQ9IjgxNjMwNTQ5MDQyNzgxOTI0MCI+IuCmleCmvuCmuOCnjeCmnyDgppXgprDgpr7gprAg4Kas4KeL4Kak4Ka+4Kau4Ke3IOCmuOCmguCmr+Cni+CmlyDgpqzgpr/gpprgp43gppvgpr/gpqjgp43gpqgg4Ka54Kav4Ka84KeH4Kab4KeHIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibXJfY2FzdF9idXR0b25fY29ubmVjdGluZyIgbXNnaWQ9IjIxODc2NDI3NjUwOTE4NzM4MzQiPiLgppXgpr7gprjgp43gpp8g4KaV4Kaw4Ka+4KawIOCmrOCni+CmpOCmvuCmruCntyDgprjgpoLgpq/gp4vgppcg4KaV4Kaw4Ka+IOCmueCmmuCnjeCmm+CnhyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im1yX2Nhc3RfYnV0dG9uX2Nvbm5lY3RlZCIgbXNnaWQ9IjUwODg0Mjc3NzE3ODg2NDgwODUiPiLgppXgpr7gprjgp43gpp8g4KaV4Kaw4Ka+4KawIOCmrOCni+CmpOCmvuCmruCntyDgprjgpoLgpq/gp4HgppXgp43gpqQg4Ka54Kav4Ka84KeH4Kab4KeHIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibXJfY2hvb3Nlcl90aXRsZSIgbXNnaWQ9IjQxNDMwMTk0MTU0NjEzNTk5MCI+IuCmj+CmpOCnhyDgppXgpr7gprjgp43gpp8g4KaV4Kaw4KeB4KaoIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibXJfY2hvb3Nlcl9zZWFyY2hpbmciIG1zZ2lkPSI2MzQ5OTAwNTc5NTA3NTIxOTU2Ij4i4Kah4Ka/4Kat4Ka+4KaH4Ka44KaX4KeB4Kay4Ka/4KaV4KeHIOCmluCni+CmgeCmnOCmviDgprngpprgp43gppvgp4ciPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJtcl9jb250cm9sbGVyX2Rpc2Nvbm5lY3QiIG1zZ2lkPSIxMjI3MjY0ODg5NDEyOTg5NTgwIj4i4Ka44KaC4Kav4KeL4KaXIOCmrOCmv+CmmuCnjeCmm+Cmv+CmqOCnjeCmqCDgppXgprDgp4HgpqgiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJtcl9jb250cm9sbGVyX3N0b3BfY2FzdGluZyIgbXNnaWQ9Ijg4NTc4ODY3OTQwODY1ODMyMjYiPiLgppXgpr7gprjgp43gpp8g4KaV4Kaw4Ka+IOCmrOCmqOCnjeCmpyDgppXgprDgp4HgpqgiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJtcl9jb250cm9sbGVyX2Nsb3NlX2Rlc2NyaXB0aW9uIiBtc2dpZD0iNzMzMzg2MjMxMjQ4MDU4MzI2MCI+IuCmrOCmqOCnjeCmpyDgppXgprDgp4HgpqgiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJtcl9jb250cm9sbGVyX3BsYXkiIG1zZ2lkPSI2ODM2MzQ1NjU5Njk5ODc0NTgiPiLgpprgpr7gprLgpr7gpqgiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJtcl9jb250cm9sbGVyX3BhdXNlIiBtc2dpZD0iNTQ1MTg4NDQzNTUxMDkwNTQwNiI+IuCmrOCmv+CmsOCmvuCmriDgpqbgpr/gpqgiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJtcl9jb250cm9sbGVyX3N0b3AiIG1zZ2lkPSI3MzU4NzQ2NDE5MjE0MjUxMjMiPiLgpqXgpr7gpq7gpr7gpqgiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJtcl9jb250cm9sbGVyX2V4cGFuZF9ncm91cCIgbXNnaWQ9IjgwNjI0MjcwMjI3NDQyNjY5MDciPiLgpqzgpqHgprwg4KaV4Kaw4KeB4KaoIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibXJfY29udHJvbGxlcl9jb2xsYXBzZV9ncm91cCIgbXNnaWQ9Ijc5MjQ4MDkwNTY5MDQyNDA5MjYiPiLgprjgppngp43gppXgp4Hgpprgpr/gpqQg4KaV4Kaw4KeB4KaoIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibXJfY29udHJvbGxlcl9hbGJ1bV9hcnQiIG1zZ2lkPSI2NDIyODAxODQzNTQwNTQzNTg1Ij4i4KaF4KeN4Kav4Ka+4Kay4Kas4Ka+4KauIOCmtuCniOCmsuCmvyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im1yX2NvbnRyb2xsZXJfdm9sdW1lX3NsaWRlciIgbXNnaWQ9IjIzNjE3ODU5OTIyMTE4NDE3MDkiPiLgpq3gprLgpr/gpongpq4g4Ka44KeN4Kay4Ka+4KaH4Kah4Ka+4KawIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibXJfY29udHJvbGxlcl9ub19tZWRpYV9zZWxlY3RlZCIgbXNnaWQ9IjY1NDcxMzAzNjAzNDkxODIzODEiPiLgppXgp4vgpqjgp4sg4Kau4Ka/4Kah4Ka/4Kav4Ka84Ka+IOCmqOCmv+CmsOCnjeCmrOCmvuCmmuCmqCDgppXgprDgpr4g4Ka54Kav4Ka84Kao4Ka/Ijwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibXJfY29udHJvbGxlcl9ub19pbmZvX2F2YWlsYWJsZSIgbXNnaWQ9IjU1ODU0MTg0NzE3NDExNDI5MjQiPiLgppXgp4vgpqjgp4sg4Kak4Kal4KeN4KavIOCmieCmquCmsuCmrOCnjeCmpyDgpqjgp4fgpociPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJtcl9jb250cm9sbGVyX2Nhc3Rpbmdfc2NyZWVuIiBtc2dpZD0iNDg2ODQ1Nzk1NzE1MTEyNDg2NyI+IuCmuOCnjeCmleCnjeCmsOCngOCmqCDgppXgpr7gprjgp43gpp8g4KaV4Kaw4Ka+IOCmueCmmuCnjeCmm+CnhyI8L3N0cmluZz4KLTwvcmVzb3VyY2VzPgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvTWVkaWFDb21wb25lbnRzL3Jlcy92YWx1ZXMtYnMvc3RyaW5ncy54bWwgYi9wYWNrYWdlcy9NZWRpYUNvbXBvbmVudHMvcmVzL3ZhbHVlcy1icy9zdHJpbmdzLnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzExYzc0Mi4uMDAwMDAwMAotLS0gYS9wYWNrYWdlcy9NZWRpYUNvbXBvbmVudHMvcmVzL3ZhbHVlcy1icy9zdHJpbmdzLnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDQwICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08IS0tICBDb3B5cmlnaHQgMjAxOCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0Ci0KLSAgICAgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7Ci0gICAgIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KLSAgICAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0KLSAgICAgICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLQotICAgICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCi0gICAgIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCi0gICAgIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgotICAgICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCi0gICAgIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgotIC0tPgotCi08cmVzb3VyY2VzIHhtbG5zOmFuZHJvaWQ9Imh0dHA6Ly9zY2hlbWFzLmFuZHJvaWQuY29tL2Fway9yZXMvYW5kcm9pZCIKLSAgICB4bWxuczp4bGlmZj0idXJuOm9hc2lzOm5hbWVzOnRjOnhsaWZmOmRvY3VtZW50OjEuMiI+Ci0gICAgPHN0cmluZyBuYW1lPSJtcl9zeXN0ZW1fcm91dGVfbmFtZSIgbXNnaWQ9IjU0NDE1Mjk4NTE0ODExNzY4MTciPiJTaXN0ZW0iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJtcl91c2VyX3JvdXRlX2NhdGVnb3J5X25hbWUiIG1zZ2lkPSI3NDk4MTEyOTA3NTI0OTc3MzExIj4iVXJlxJFhamkiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJtcl9idXR0b25fY29udGVudF9kZXNjcmlwdGlvbiIgbXNnaWQ9IjM2OTgzNzgwODU5MDE0NjYxMjkiPiJEdWdtZSB6YSBlbWl0aXJhbmplIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibXJfY2FzdF9idXR0b25fZGlzY29ubmVjdGVkIiBtc2dpZD0iODE2MzA1NDkwNDI3ODE5MjQwIj4iRHVnbWUgemEgZW1pdGlyYW5qZS4gVmV6YSBqZSBwcmVraW51dGEiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJtcl9jYXN0X2J1dHRvbl9jb25uZWN0aW5nIiBtc2dpZD0iMjE4NzY0Mjc2NTA5MTg3MzgzNCI+IkR1Z21lIHphIGVtaXRpcmFuamUuIFBvdmV6aXZhbmplIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibXJfY2FzdF9idXR0b25fY29ubmVjdGVkIiBtc2dpZD0iNTA4ODQyNzc3MTc4ODY0ODA4NSI+IkR1Z21lIHphIGVtaXRpcmFuamUuIFBvdmV6YW5vIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibXJfY2hvb3Nlcl90aXRsZSIgbXNnaWQ9IjQxNDMwMTk0MTU0NjEzNTk5MCI+IkVtaXRpcmFuamUgbmEiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJtcl9jaG9vc2VyX3NlYXJjaGluZyIgbXNnaWQ9IjYzNDk5MDA1Nzk1MDc1MjE5NTYiPiJUcmHFvmVuamUgdXJlxJFhamEiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJtcl9jb250cm9sbGVyX2Rpc2Nvbm5lY3QiIG1zZ2lkPSIxMjI3MjY0ODg5NDEyOTg5NTgwIj4iUHJla2luaSB2ZXp1Ijwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibXJfY29udHJvbGxlcl9zdG9wX2Nhc3RpbmciIG1zZ2lkPSI4ODU3ODg2Nzk0MDg2NTgzMjI2Ij4iWmF1c3RhdmkgcHJlYmFjaXZhbmplIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibXJfY29udHJvbGxlcl9jbG9zZV9kZXNjcmlwdGlvbiIgbXNnaWQ9IjczMzM4NjIzMTI0ODA1ODMyNjAiPiJaYXR2b3JpIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibXJfY29udHJvbGxlcl9wbGF5IiBtc2dpZD0iNjgzNjM0NTY1OTY5OTg3NDU4Ij4iUmVwcm9kdWNpcmFqIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibXJfY29udHJvbGxlcl9wYXVzZSIgbXNnaWQ9IjU0NTE4ODQ0MzU1MTA5MDU0MDYiPiJQYXV6aXJhaiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im1yX2NvbnRyb2xsZXJfc3RvcCIgbXNnaWQ9IjczNTg3NDY0MTkyMTQyNTEyMyI+IlphdXN0YXZpIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibXJfY29udHJvbGxlcl9leHBhbmRfZ3JvdXAiIG1zZ2lkPSI4MDYyNDI3MDIyNzQ0MjY2OTA3Ij4iUHJvxaFpcmkiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJtcl9jb250cm9sbGVyX2NvbGxhcHNlX2dyb3VwIiBtc2dpZD0iNzkyNDgwOTA1NjkwNDI0MDkyNiI+IlNrdXBpIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibXJfY29udHJvbGxlcl9hbGJ1bV9hcnQiIG1zZ2lkPSI2NDIyODAxODQzNTQwNTQzNTg1Ij4iT21vdCBhbGJ1bWEiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJtcl9jb250cm9sbGVyX3ZvbHVtZV9zbGlkZXIiIG1zZ2lkPSIyMzYxNzg1OTkyMjExODQxNzA5Ij4iS2xpemHEjSB6YSBqYcSNaW51IHp2dWthIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibXJfY29udHJvbGxlcl9ub19tZWRpYV9zZWxlY3RlZCIgbXNnaWQ9IjY1NDcxMzAzNjAzNDkxODIzODEiPiJOaWplZGFuIG1lZGlqIG5pamUgb2RhYnJhbiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im1yX2NvbnRyb2xsZXJfbm9faW5mb19hdmFpbGFibGUiIG1zZ2lkPSI1NTg1NDE4NDcxNzQxMTQyOTI0Ij4iTmVtYSBkb3N0dXBuaWggaW5mb3JtYWNpamEiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJtcl9jb250cm9sbGVyX2Nhc3Rpbmdfc2NyZWVuIiBtc2dpZD0iNDg2ODQ1Nzk1NzE1MTEyNDg2NyI+IlByZWJhY3VqZSBzZSBla3JhbiI8L3N0cmluZz4KLTwvcmVzb3VyY2VzPgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvTWVkaWFDb21wb25lbnRzL3Jlcy92YWx1ZXMtY2Evc3RyaW5ncy54bWwgYi9wYWNrYWdlcy9NZWRpYUNvbXBvbmVudHMvcmVzL3ZhbHVlcy1jYS9zdHJpbmdzLnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYmY4NWFjZi4uMDAwMDAwMAotLS0gYS9wYWNrYWdlcy9NZWRpYUNvbXBvbmVudHMvcmVzL3ZhbHVlcy1jYS9zdHJpbmdzLnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDQwICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08IS0tICBDb3B5cmlnaHQgMjAxOCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0Ci0KLSAgICAgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7Ci0gICAgIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KLSAgICAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0KLSAgICAgICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLQotICAgICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCi0gICAgIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCi0gICAgIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgotICAgICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCi0gICAgIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgotIC0tPgotCi08cmVzb3VyY2VzIHhtbG5zOmFuZHJvaWQ9Imh0dHA6Ly9zY2hlbWFzLmFuZHJvaWQuY29tL2Fway9yZXMvYW5kcm9pZCIKLSAgICB4bWxuczp4bGlmZj0idXJuOm9hc2lzOm5hbWVzOnRjOnhsaWZmOmRvY3VtZW50OjEuMiI+Ci0gICAgPHN0cmluZyBuYW1lPSJtcl9zeXN0ZW1fcm91dGVfbmFtZSIgbXNnaWQ9IjU0NDE1Mjk4NTE0ODExNzY4MTciPiJTaXN0ZW1hIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibXJfdXNlcl9yb3V0ZV9jYXRlZ29yeV9uYW1lIiBtc2dpZD0iNzQ5ODExMjkwNzUyNDk3NzMxMSI+IkRpc3Bvc2l0aXVzIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibXJfYnV0dG9uX2NvbnRlbnRfZGVzY3JpcHRpb24iIG1zZ2lkPSIzNjk4Mzc4MDg1OTAxNDY2MTI5Ij4iQm90w7MgZFwnZW1ldHJlIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibXJfY2FzdF9idXR0b25fZGlzY29ubmVjdGVkIiBtc2dpZD0iODE2MzA1NDkwNDI3ODE5MjQwIj4iQm90w7MgRW1ldC4gRGVzY29ubmVjdGF0LiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im1yX2Nhc3RfYnV0dG9uX2Nvbm5lY3RpbmciIG1zZ2lkPSIyMTg3NjQyNzY1MDkxODczODM0Ij4iQm90w7MgRW1ldC4gU1wnZXN0w6AgY29ubmVjdGFudC4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJtcl9jYXN0X2J1dHRvbl9jb25uZWN0ZWQiIG1zZ2lkPSI1MDg4NDI3NzcxNzg4NjQ4MDg1Ij4iQm90w7MgRW1ldC4gQ29ubmVjdGF0LiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im1yX2Nob29zZXJfdGl0bGUiIG1zZ2lkPSI0MTQzMDE5NDE1NDYxMzU5OTAiPiJFbWV0IGEiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJtcl9jaG9vc2VyX3NlYXJjaGluZyIgbXNnaWQ9IjYzNDk5MDA1Nzk1MDc1MjE5NTYiPiJTXCdlc3RhbiBjZXJjYW50IGRpc3Bvc2l0aXVzIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibXJfY29udHJvbGxlcl9kaXNjb25uZWN0IiBtc2dpZD0iMTIyNzI2NDg4OTQxMjk4OTU4MCI+IkRlc2Nvbm5lY3RhIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibXJfY29udHJvbGxlcl9zdG9wX2Nhc3RpbmciIG1zZ2lkPSI4ODU3ODg2Nzk0MDg2NTgzMjI2Ij4iQXR1cmEgbFwnZW1pc3Npw7MiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJtcl9jb250cm9sbGVyX2Nsb3NlX2Rlc2NyaXB0aW9uIiBtc2dpZD0iNzMzMzg2MjMxMjQ4MDU4MzI2MCI+IlRhbmNhIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibXJfY29udHJvbGxlcl9wbGF5IiBtc2dpZD0iNjgzNjM0NTY1OTY5OTg3NDU4Ij4iUmVwcm9kdWVpeCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im1yX2NvbnRyb2xsZXJfcGF1c2UiIG1zZ2lkPSI1NDUxODg0NDM1NTEwOTA1NDA2Ij4iUG9zYSBlbiBwYXVzYSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im1yX2NvbnRyb2xsZXJfc3RvcCIgbXNnaWQ9IjczNTg3NDY0MTkyMTQyNTEyMyI+IkF0dXJhIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibXJfY29udHJvbGxlcl9leHBhbmRfZ3JvdXAiIG1zZ2lkPSI4MDYyNDI3MDIyNzQ0MjY2OTA3Ij4iRGVzcGxlZ2EiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJtcl9jb250cm9sbGVyX2NvbGxhcHNlX2dyb3VwIiBtc2dpZD0iNzkyNDgwOTA1NjkwNDI0MDkyNiI+IlJlcGxlZ2EiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJtcl9jb250cm9sbGVyX2FsYnVtX2FydCIgbXNnaWQ9IjY0MjI4MDE4NDM1NDA1NDM1ODUiPiJJbWF0Z2UgZGUgbFwnw6BsYnVtIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibXJfY29udHJvbGxlcl92b2x1bWVfc2xpZGVyIiBtc2dpZD0iMjM2MTc4NTk5MjIxMTg0MTcwOSI+IkNvbnRyb2wgbGxpc2NhbnQgZGUgdm9sdW0iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJtcl9jb250cm9sbGVyX25vX21lZGlhX3NlbGVjdGVkIiBtc2dpZD0iNjU0NzEzMDM2MDM0OTE4MjM4MSI+Ik5vIHNcJ2hhIHNlbGVjY2lvbmF0IGNhcCBmaXR4ZXIgbXVsdGltw6hkaWEiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJtcl9jb250cm9sbGVyX25vX2luZm9fYXZhaWxhYmxlIiBtc2dpZD0iNTU4NTQxODQ3MTc0MTE0MjkyNCI+Ik5vIGhpIGhhIGluZm9ybWFjacOzIGRpc3BvbmlibGUiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJtcl9jb250cm9sbGVyX2Nhc3Rpbmdfc2NyZWVuIiBtc2dpZD0iNDg2ODQ1Nzk1NzE1MTEyNDg2NyI+IkVtaXNzacOzIGRlIHBhbnRhbGxhIjwvc3RyaW5nPgotPC9yZXNvdXJjZXM+CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9NZWRpYUNvbXBvbmVudHMvcmVzL3ZhbHVlcy1jcy9zdHJpbmdzLnhtbCBiL3BhY2thZ2VzL01lZGlhQ29tcG9uZW50cy9yZXMvdmFsdWVzLWNzL3N0cmluZ3MueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwOWE4OTIwLi4wMDAwMDAwCi0tLSBhL3BhY2thZ2VzL01lZGlhQ29tcG9uZW50cy9yZXMvdmFsdWVzLWNzL3N0cmluZ3MueG1sCisrKyAvZGV2L251bGwKQEAgLTEsNDAgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTwhLS0gIENvcHlyaWdodCAyMDE4IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKLQotICAgICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKLSAgICAgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgotICAgICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLQotICAgICAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotCi0gICAgIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKLSAgICAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKLSAgICAgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCi0gICAgIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKLSAgICAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCi0gLS0+Ci0KLTxyZXNvdXJjZXMgeG1sbnM6YW5kcm9pZD0iaHR0cDovL3NjaGVtYXMuYW5kcm9pZC5jb20vYXBrL3Jlcy9hbmRyb2lkIgotICAgIHhtbG5zOnhsaWZmPSJ1cm46b2FzaXM6bmFtZXM6dGM6eGxpZmY6ZG9jdW1lbnQ6MS4yIj4KLSAgICA8c3RyaW5nIG5hbWU9Im1yX3N5c3RlbV9yb3V0ZV9uYW1lIiBtc2dpZD0iNTQ0MTUyOTg1MTQ4MTE3NjgxNyI+IlN5c3TDqW0iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJtcl91c2VyX3JvdXRlX2NhdGVnb3J5X25hbWUiIG1zZ2lkPSI3NDk4MTEyOTA3NTI0OTc3MzExIj4iWmHFmcOtemVuw60iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJtcl9idXR0b25fY29udGVudF9kZXNjcmlwdGlvbiIgbXNnaWQ9IjM2OTgzNzgwODU5MDE0NjYxMjkiPiJUbGHEjcOtdGtvIG9kZXPDrWzDoW7DrSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im1yX2Nhc3RfYnV0dG9uX2Rpc2Nvbm5lY3RlZCIgbXNnaWQ9IjgxNjMwNTQ5MDQyNzgxOTI0MCI+IlRsYcSNw610a28gb2Rlc8OtbMOhbsOtLiBPZHBvamVubyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im1yX2Nhc3RfYnV0dG9uX2Nvbm5lY3RpbmciIG1zZ2lkPSIyMTg3NjQyNzY1MDkxODczODM0Ij4iVGxhxI3DrXRrbyBvZGVzw61sw6Fuw60uIFDFmWlwb2pvdsOhbsOtIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibXJfY2FzdF9idXR0b25fY29ubmVjdGVkIiBtc2dpZD0iNTA4ODQyNzc3MTc4ODY0ODA4NSI+IlRsYcSNw610a28gb2Rlc8OtbMOhbsOtLiBQxZlpcG9qZW5vIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibXJfY2hvb3Nlcl90aXRsZSIgbXNnaWQ9IjQxNDMwMTk0MTU0NjEzNTk5MCI+Ik9kZXPDrWxhdCBkbyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im1yX2Nob29zZXJfc2VhcmNoaW5nIiBtc2dpZD0iNjM0OTkwMDU3OTUwNzUyMTk1NiI+IkhsZWTDoW7DrSB6YcWZw616ZW7DrSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im1yX2NvbnRyb2xsZXJfZGlzY29ubmVjdCIgbXNnaWQ9IjEyMjcyNjQ4ODk0MTI5ODk1ODAiPiJPZHBvaml0Ijwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibXJfY29udHJvbGxlcl9zdG9wX2Nhc3RpbmciIG1zZ2lkPSI4ODU3ODg2Nzk0MDg2NTgzMjI2Ij4iWmFzdGF2aXQgb2Rlc8OtbMOhbsOtIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibXJfY29udHJvbGxlcl9jbG9zZV9kZXNjcmlwdGlvbiIgbXNnaWQ9IjczMzM4NjIzMTI0ODA1ODMyNjAiPiJaYXbFmcOtdCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im1yX2NvbnRyb2xsZXJfcGxheSIgbXNnaWQ9IjY4MzYzNDU2NTk2OTk4NzQ1OCI+IlDFmWVocsOhdCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im1yX2NvbnRyb2xsZXJfcGF1c2UiIG1zZ2lkPSI1NDUxODg0NDM1NTEwOTA1NDA2Ij4iUG96YXN0YXZpdCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im1yX2NvbnRyb2xsZXJfc3RvcCIgbXNnaWQ9IjczNTg3NDY0MTkyMTQyNTEyMyI+Ilphc3Rhdml0Ijwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibXJfY29udHJvbGxlcl9leHBhbmRfZ3JvdXAiIG1zZ2lkPSI4MDYyNDI3MDIyNzQ0MjY2OTA3Ij4iUm96YmFsaXQiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJtcl9jb250cm9sbGVyX2NvbGxhcHNlX2dyb3VwIiBtc2dpZD0iNzkyNDgwOTA1NjkwNDI0MDkyNiI+IlNiYWxpdCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im1yX2NvbnRyb2xsZXJfYWxidW1fYXJ0IiBtc2dpZD0iNjQyMjgwMTg0MzU0MDU0MzU4NSI+Ik9iYWwgYWxiYSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im1yX2NvbnRyb2xsZXJfdm9sdW1lX3NsaWRlciIgbXNnaWQ9IjIzNjE3ODU5OTIyMTE4NDE3MDkiPiJQb3N1dm7DrWsgaGxhc2l0b3N0aSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im1yX2NvbnRyb2xsZXJfbm9fbWVkaWFfc2VsZWN0ZWQiIG1zZ2lkPSI2NTQ3MTMwMzYwMzQ5MTgyMzgxIj4iTmVieWxhIHZ5YnLDoW5hIMW+w6FkbsOhIG3DqWRpYSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im1yX2NvbnRyb2xsZXJfbm9faW5mb19hdmFpbGFibGUiIG1zZ2lkPSI1NTg1NDE4NDcxNzQxMTQyOTI0Ij4iTmVqc291IGvCoGRpc3BvemljaSDFvsOhZG7DqSBpbmZvcm1hY2UiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJtcl9jb250cm9sbGVyX2Nhc3Rpbmdfc2NyZWVuIiBtc2dpZD0iNDg2ODQ1Nzk1NzE1MTEyNDg2NyI+Ik9kZXPDrWzDoW7DrSBvYnNhaHUgb2JyYXpvdmt5Ijwvc3RyaW5nPgotPC9yZXNvdXJjZXM+CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9NZWRpYUNvbXBvbmVudHMvcmVzL3ZhbHVlcy1kYS9zdHJpbmdzLnhtbCBiL3BhY2thZ2VzL01lZGlhQ29tcG9uZW50cy9yZXMvdmFsdWVzLWRhL3N0cmluZ3MueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4ZTdhNzkwLi4wMDAwMDAwCi0tLSBhL3BhY2thZ2VzL01lZGlhQ29tcG9uZW50cy9yZXMvdmFsdWVzLWRhL3N0cmluZ3MueG1sCisrKyAvZGV2L251bGwKQEAgLTEsNDAgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTwhLS0gIENvcHlyaWdodCAyMDE4IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKLQotICAgICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKLSAgICAgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgotICAgICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLQotICAgICAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotCi0gICAgIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKLSAgICAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKLSAgICAgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCi0gICAgIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKLSAgICAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCi0gLS0+Ci0KLTxyZXNvdXJjZXMgeG1sbnM6YW5kcm9pZD0iaHR0cDovL3NjaGVtYXMuYW5kcm9pZC5jb20vYXBrL3Jlcy9hbmRyb2lkIgotICAgIHhtbG5zOnhsaWZmPSJ1cm46b2FzaXM6bmFtZXM6dGM6eGxpZmY6ZG9jdW1lbnQ6MS4yIj4KLSAgICA8c3RyaW5nIG5hbWU9Im1yX3N5c3RlbV9yb3V0ZV9uYW1lIiBtc2dpZD0iNTQ0MTUyOTg1MTQ4MTE3NjgxNyI+IlN5c3RlbSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im1yX3VzZXJfcm91dGVfY2F0ZWdvcnlfbmFtZSIgbXNnaWQ9Ijc0OTgxMTI5MDc1MjQ5NzczMTEiPiJFbmhlZGVyIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibXJfYnV0dG9uX2NvbnRlbnRfZGVzY3JpcHRpb24iIG1zZ2lkPSIzNjk4Mzc4MDg1OTAxNDY2MTI5Ij4iQ2FzdC1rbmFwIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibXJfY2FzdF9idXR0b25fZGlzY29ubmVjdGVkIiBtc2dpZD0iODE2MzA1NDkwNDI3ODE5MjQwIj4iQ2FzdC1rbmFwLiBGb3JiaW5kZWxzZW4gZXIgYWZicnVkdCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im1yX2Nhc3RfYnV0dG9uX2Nvbm5lY3RpbmciIG1zZ2lkPSIyMTg3NjQyNzY1MDkxODczODM0Ij4iQ2FzdC1rbmFwLiBPcHJldHRlciBmb3JiaW5kZWxzZSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im1yX2Nhc3RfYnV0dG9uX2Nvbm5lY3RlZCIgbXNnaWQ9IjUwODg0Mjc3NzE3ODg2NDgwODUiPiJDYXN0LWtuYXAuIFRpbHNsdXR0ZXQiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJtcl9jaG9vc2VyX3RpdGxlIiBtc2dpZD0iNDE0MzAxOTQxNTQ2MTM1OTkwIj4iQ2FzdCB0aWwiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJtcl9jaG9vc2VyX3NlYXJjaGluZyIgbXNnaWQ9IjYzNDk5MDA1Nzk1MDc1MjE5NTYiPiJGaW5kZXIgZW5oZWRlciI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im1yX2NvbnRyb2xsZXJfZGlzY29ubmVjdCIgbXNnaWQ9IjEyMjcyNjQ4ODk0MTI5ODk1ODAiPiJBZmJyeWQiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJtcl9jb250cm9sbGVyX3N0b3BfY2FzdGluZyIgbXNnaWQ9Ijg4NTc4ODY3OTQwODY1ODMyMjYiPiJTdG9wIG1lZCBhdCBjYXN0ZSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im1yX2NvbnRyb2xsZXJfY2xvc2VfZGVzY3JpcHRpb24iIG1zZ2lkPSI3MzMzODYyMzEyNDgwNTgzMjYwIj4iTHVrIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibXJfY29udHJvbGxlcl9wbGF5IiBtc2dpZD0iNjgzNjM0NTY1OTY5OTg3NDU4Ij4iQWZzcGlsIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibXJfY29udHJvbGxlcl9wYXVzZSIgbXNnaWQ9IjU0NTE4ODQ0MzU1MTA5MDU0MDYiPiJTw6Z0IHDDpSBwYXVzZSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im1yX2NvbnRyb2xsZXJfc3RvcCIgbXNnaWQ9IjczNTg3NDY0MTkyMTQyNTEyMyI+IlN0b3AiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJtcl9jb250cm9sbGVyX2V4cGFuZF9ncm91cCIgbXNnaWQ9IjgwNjI0MjcwMjI3NDQyNjY5MDciPiJVZHZpZCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im1yX2NvbnRyb2xsZXJfY29sbGFwc2VfZ3JvdXAiIG1zZ2lkPSI3OTI0ODA5MDU2OTA0MjQwOTI2Ij4iU2tqdWwiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJtcl9jb250cm9sbGVyX2FsYnVtX2FydCIgbXNnaWQ9IjY0MjI4MDE4NDM1NDA1NDM1ODUiPiJBbGJ1bWdyYWZpayI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im1yX2NvbnRyb2xsZXJfdm9sdW1lX3NsaWRlciIgbXNnaWQ9IjIzNjE3ODU5OTIyMTE4NDE3MDkiPiJMeWRzdHlya2Vza3lkZXIiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJtcl9jb250cm9sbGVyX25vX21lZGlhX3NlbGVjdGVkIiBtc2dpZD0iNjU0NzEzMDM2MDM0OTE4MjM4MSI+IkluZ2VuIG1lZGllciBlciBtYXJrZXJldCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im1yX2NvbnRyb2xsZXJfbm9faW5mb19hdmFpbGFibGUiIG1zZ2lkPSI1NTg1NDE4NDcxNzQxMTQyOTI0Ij4iRGVyIGVyIGluZ2VuIHRpbGfDpm5nZWxpZ2Ugb3BseXNuaW5nZXIiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJtcl9jb250cm9sbGVyX2Nhc3Rpbmdfc2NyZWVuIiBtc2dpZD0iNDg2ODQ1Nzk1NzE1MTEyNDg2NyI+IlNrw6ZybWVuIGNhc3RlcyI8L3N0cmluZz4KLTwvcmVzb3VyY2VzPgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvTWVkaWFDb21wb25lbnRzL3Jlcy92YWx1ZXMtZGUvc3RyaW5ncy54bWwgYi9wYWNrYWdlcy9NZWRpYUNvbXBvbmVudHMvcmVzL3ZhbHVlcy1kZS9zdHJpbmdzLnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjZiZjU3Yy4uMDAwMDAwMAotLS0gYS9wYWNrYWdlcy9NZWRpYUNvbXBvbmVudHMvcmVzL3ZhbHVlcy1kZS9zdHJpbmdzLnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDQwICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08IS0tICBDb3B5cmlnaHQgMjAxOCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0Ci0KLSAgICAgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7Ci0gICAgIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KLSAgICAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0KLSAgICAgICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLQotICAgICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCi0gICAgIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCi0gICAgIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgotICAgICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCi0gICAgIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgotIC0tPgotCi08cmVzb3VyY2VzIHhtbG5zOmFuZHJvaWQ9Imh0dHA6Ly9zY2hlbWFzLmFuZHJvaWQuY29tL2Fway9yZXMvYW5kcm9pZCIKLSAgICB4bWxuczp4bGlmZj0idXJuOm9hc2lzOm5hbWVzOnRjOnhsaWZmOmRvY3VtZW50OjEuMiI+Ci0gICAgPHN0cmluZyBuYW1lPSJtcl9zeXN0ZW1fcm91dGVfbmFtZSIgbXNnaWQ9IjU0NDE1Mjk4NTE0ODExNzY4MTciPiJTeXN0ZW0iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJtcl91c2VyX3JvdXRlX2NhdGVnb3J5X25hbWUiIG1zZ2lkPSI3NDk4MTEyOTA3NTI0OTc3MzExIj4iR2Vyw6R0ZSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im1yX2J1dHRvbl9jb250ZW50X2Rlc2NyaXB0aW9uIiBtc2dpZD0iMzY5ODM3ODA4NTkwMTQ2NjEyOSI+IkNhc3QtU3ltYm9sIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibXJfY2FzdF9idXR0b25fZGlzY29ubmVjdGVkIiBtc2dpZD0iODE2MzA1NDkwNDI3ODE5MjQwIj4iU3RyZWFtaW5nLVNjaGFsdGZsw6RjaGUuIE5pY2h0IHZlcmJ1bmRlbiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im1yX2Nhc3RfYnV0dG9uX2Nvbm5lY3RpbmciIG1zZ2lkPSIyMTg3NjQyNzY1MDkxODczODM0Ij4iU3RyZWFtaW5nLVNjaGFsdGZsw6RjaGUuIFZlcmJpbmR1bmcgd2lyZCBoZXJnZXN0ZWxsdCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im1yX2Nhc3RfYnV0dG9uX2Nvbm5lY3RlZCIgbXNnaWQ9IjUwODg0Mjc3NzE3ODg2NDgwODUiPiJTdHJlYW1pbmctU2NoYWx0ZmzDpGNoZS4gVmVyYnVuZGVuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibXJfY2hvb3Nlcl90aXRsZSIgbXNnaWQ9IjQxNDMwMTk0MTU0NjEzNTk5MCI+IlN0cmVhbWVuIGF1ZiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im1yX2Nob29zZXJfc2VhcmNoaW5nIiBtc2dpZD0iNjM0OTkwMDU3OTUwNzUyMTk1NiI+IkdlcsOkdGUgd2VyZGVuIGdlc3VjaHQuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibXJfY29udHJvbGxlcl9kaXNjb25uZWN0IiBtc2dpZD0iMTIyNzI2NDg4OTQxMjk4OTU4MCI+IlZlcmJpbmR1bmcgdHJlbm5lbiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im1yX2NvbnRyb2xsZXJfc3RvcF9jYXN0aW5nIiBtc2dpZD0iODg1Nzg4Njc5NDA4NjU4MzIyNiI+IlN0cmVhbWluZyBiZWVuZGVuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibXJfY29udHJvbGxlcl9jbG9zZV9kZXNjcmlwdGlvbiIgbXNnaWQ9IjczMzM4NjIzMTI0ODA1ODMyNjAiPiJTY2hsaWXDn2VuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibXJfY29udHJvbGxlcl9wbGF5IiBtc2dpZD0iNjgzNjM0NTY1OTY5OTg3NDU4Ij4iV2llZGVyZ2ViZW4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJtcl9jb250cm9sbGVyX3BhdXNlIiBtc2dpZD0iNTQ1MTg4NDQzNTUxMDkwNTQwNiI+IlBhdXNpZXJlbiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im1yX2NvbnRyb2xsZXJfc3RvcCIgbXNnaWQ9IjczNTg3NDY0MTkyMTQyNTEyMyI+IkJlZW5kZW4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJtcl9jb250cm9sbGVyX2V4cGFuZF9ncm91cCIgbXNnaWQ9IjgwNjI0MjcwMjI3NDQyNjY5MDciPiJNYXhpbWllcmVuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibXJfY29udHJvbGxlcl9jb2xsYXBzZV9ncm91cCIgbXNnaWQ9Ijc5MjQ4MDkwNTY5MDQyNDA5MjYiPiJNaW5pbWllcmVuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibXJfY29udHJvbGxlcl9hbGJ1bV9hcnQiIG1zZ2lkPSI2NDIyODAxODQzNTQwNTQzNTg1Ij4iQWxidW1jb3ZlciI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im1yX2NvbnRyb2xsZXJfdm9sdW1lX3NsaWRlciIgbXNnaWQ9IjIzNjE3ODU5OTIyMTE4NDE3MDkiPiJTY2hpZWJlcmVnbGVyIGbDvHIgZGllIExhdXRzdMOkcmtlIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibXJfY29udHJvbGxlcl9ub19tZWRpYV9zZWxlY3RlZCIgbXNnaWQ9IjY1NDcxMzAzNjAzNDkxODIzODEiPiJLZWluZSBNZWRpZW4gYXVzZ2V3w6RobHQiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJtcl9jb250cm9sbGVyX25vX2luZm9fYXZhaWxhYmxlIiBtc2dpZD0iNTU4NTQxODQ3MTc0MTE0MjkyNCI+IktlaW5lIEluZm9ybWF0aW9uZW4gdmVyZsO8Z2JhciI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im1yX2NvbnRyb2xsZXJfY2FzdGluZ19zY3JlZW4iIG1zZ2lkPSI0ODY4NDU3OTU3MTUxMTI0ODY3Ij4iQmlsZHNjaGlybSB3aXJkIGdlc3RyZWFtdC4iPC9zdHJpbmc+Ci08L3Jlc291cmNlcz4KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL01lZGlhQ29tcG9uZW50cy9yZXMvdmFsdWVzLWVsL3N0cmluZ3MueG1sIGIvcGFja2FnZXMvTWVkaWFDb21wb25lbnRzL3Jlcy92YWx1ZXMtZWwvc3RyaW5ncy54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQ4MmY2OWIuLjAwMDAwMDAKLS0tIGEvcGFja2FnZXMvTWVkaWFDb21wb25lbnRzL3Jlcy92YWx1ZXMtZWwvc3RyaW5ncy54bWwKKysrIC9kZXYvbnVsbApAQCAtMSw0MCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPCEtLSAgQ29weXJpZ2h0IDIwMTggVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAotCi0gICAgIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwotICAgICB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCi0gICAgIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotCi0gICAgICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0KLSAgICAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQotICAgICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAotICAgICBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KLSAgICAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAotICAgICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KLSAtLT4KLQotPHJlc291cmNlcyB4bWxuczphbmRyb2lkPSJodHRwOi8vc2NoZW1hcy5hbmRyb2lkLmNvbS9hcGsvcmVzL2FuZHJvaWQiCi0gICAgeG1sbnM6eGxpZmY9InVybjpvYXNpczpuYW1lczp0Yzp4bGlmZjpkb2N1bWVudDoxLjIiPgotICAgIDxzdHJpbmcgbmFtZT0ibXJfc3lzdGVtX3JvdXRlX25hbWUiIG1zZ2lkPSI1NDQxNTI5ODUxNDgxMTc2ODE3Ij4izqPPjc+Dz4TOt868zrEiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJtcl91c2VyX3JvdXRlX2NhdGVnb3J5X25hbWUiIG1zZ2lkPSI3NDk4MTEyOTA3NTI0OTc3MzExIj4izqPPhc+DzrrOtc+Fzq3PgiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im1yX2J1dHRvbl9jb250ZW50X2Rlc2NyaXB0aW9uIiBtc2dpZD0iMzY5ODM3ODA4NTkwMTQ2NjEyOSI+Is6azr/Phc68z4DOryBDYXN0Ijwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibXJfY2FzdF9idXR0b25fZGlzY29ubmVjdGVkIiBtc2dpZD0iODE2MzA1NDkwNDI3ODE5MjQwIj4izprOv8+FzrzPgM6vIM68zrXPhM6szrTOv8+DzrfPgi4gzpHPgM6/z4PPhc69zrTOrc64zrfOus61Ijwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibXJfY2FzdF9idXR0b25fY29ubmVjdGluZyIgbXNnaWQ9IjIxODc2NDI3NjUwOTE4NzM4MzQiPiLOms6/z4XOvM+Azq8gzrzOtc+EzqzOtM6/z4POty4gzqPPjc69zrTOtc+Dzrcgz4POtSDOtc6+zq3Ou865zr7OtyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im1yX2Nhc3RfYnV0dG9uX2Nvbm5lY3RlZCIgbXNnaWQ9IjUwODg0Mjc3NzE3ODg2NDgwODUiPiLOms6/z4XOvM+Azq8gzrzOtc+EzqzOtM6/z4POt8+CLiDOo8+Fzr3OtM6tzrjOt866zrUiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJtcl9jaG9vc2VyX3RpdGxlIiBtc2dpZD0iNDE0MzAxOTQxNTQ2MTM1OTkwIj4izpzOtc+EzqzOtM6/z4POtyDPg861Ijwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibXJfY2hvb3Nlcl9zZWFyY2hpbmciIG1zZ2lkPSI2MzQ5OTAwNTc5NTA3NTIxOTU2Ij4izpXPjc+BzrXPg863IM+Dz4XPg866zrXPhc+Ozr0iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJtcl9jb250cm9sbGVyX2Rpc2Nvbm5lY3QiIG1zZ2lkPSIxMjI3MjY0ODg5NDEyOTg5NTgwIj4izpHPgM6/z4PPjc69zrTOtc+DzrciPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJtcl9jb250cm9sbGVyX3N0b3BfY2FzdGluZyIgbXNnaWQ9Ijg4NTc4ODY3OTQwODY1ODMyMjYiPiLOlM65zrHOus6/z4DOriDOvM61z4TOrM60zr/Pg863z4IiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJtcl9jb250cm9sbGVyX2Nsb3NlX2Rlc2NyaXB0aW9uIiBtc2dpZD0iNzMzMzg2MjMxMjQ4MDU4MzI2MCI+Is6azrvOtc6vz4POuc68zr8iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJtcl9jb250cm9sbGVyX3BsYXkiIG1zZ2lkPSI2ODM2MzQ1NjU5Njk5ODc0NTgiPiLOkc69zrHPgM6xz4HOsc6zz4nOs86uIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibXJfY29udHJvbGxlcl9wYXVzZSIgbXNnaWQ9IjU0NTE4ODQ0MzU1MTA5MDU0MDYiPiLOoM6xz43Pg863Ijwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibXJfY29udHJvbGxlcl9zdG9wIiBtc2dpZD0iNzM1ODc0NjQxOTIxNDI1MTIzIj4izpTOuc6xzrrOv8+Azq4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJtcl9jb250cm9sbGVyX2V4cGFuZF9ncm91cCIgbXNnaWQ9IjgwNjI0MjcwMjI3NDQyNjY5MDciPiLOkc69zqzPgM+Ez4XOvs63Ijwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibXJfY29udHJvbGxlcl9jb2xsYXBzZV9ncm91cCIgbXNnaWQ9Ijc5MjQ4MDkwNTY5MDQyNDA5MjYiPiLOo8+NzrzPgM+Ez4XOvs63Ijwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibXJfY29udHJvbGxlcl9hbGJ1bV9hcnQiIG1zZ2lkPSI2NDIyODAxODQzNTQwNTQzNTg1Ij4izpXOvs+Oz4bPhc67zrvOvyDOrM67zrzPgM6/z4XOvCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im1yX2NvbnRyb2xsZXJfdm9sdW1lX3NsaWRlciIgbXNnaWQ9IjIzNjE3ODU5OTIyMTE4NDE3MDkiPiLOoc+FzrjOvM65z4PPhM65zrrPjCDOrc69z4TOsc+DzrfPgiDOrs+Hzr/PhSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im1yX2NvbnRyb2xsZXJfbm9fbWVkaWFfc2VsZWN0ZWQiIG1zZ2lkPSI2NTQ3MTMwMzYwMzQ5MTgyMzgxIj4izpTOtc69IM6tz4fOv8+Fzr0gzrXPgM65zrvOtc6zzrXOryDOvM6tz4POsSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im1yX2NvbnRyb2xsZXJfbm9faW5mb19hdmFpbGFibGUiIG1zZ2lkPSI1NTg1NDE4NDcxNzQxMTQyOTI0Ij4izpTOtc69IM+Fz4DOrM+Bz4fOv8+Fzr0gzrTOuc6xzrjOrc+DzrnOvM61z4Igz4DOu863z4HOv8+Gzr/Pgc6vzrXPgiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im1yX2NvbnRyb2xsZXJfY2FzdGluZ19zY3JlZW4iIG1zZ2lkPSI0ODY4NDU3OTU3MTUxMTI0ODY3Ij4izpzOtc+EzqzOtM6/z4POtyDOv864z4zOvc63z4IiPC9zdHJpbmc+Ci08L3Jlc291cmNlcz4KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL01lZGlhQ29tcG9uZW50cy9yZXMvdmFsdWVzLWVuLXJBVS9zdHJpbmdzLnhtbCBiL3BhY2thZ2VzL01lZGlhQ29tcG9uZW50cy9yZXMvdmFsdWVzLWVuLXJBVS9zdHJpbmdzLnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZGQzZjIxOS4uMDAwMDAwMAotLS0gYS9wYWNrYWdlcy9NZWRpYUNvbXBvbmVudHMvcmVzL3ZhbHVlcy1lbi1yQVUvc3RyaW5ncy54bWwKKysrIC9kZXYvbnVsbApAQCAtMSw0MCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPCEtLSAgQ29weXJpZ2h0IDIwMTggVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAotCi0gICAgIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwotICAgICB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCi0gICAgIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotCi0gICAgICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0KLSAgICAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQotICAgICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAotICAgICBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KLSAgICAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAotICAgICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KLSAtLT4KLQotPHJlc291cmNlcyB4bWxuczphbmRyb2lkPSJodHRwOi8vc2NoZW1hcy5hbmRyb2lkLmNvbS9hcGsvcmVzL2FuZHJvaWQiCi0gICAgeG1sbnM6eGxpZmY9InVybjpvYXNpczpuYW1lczp0Yzp4bGlmZjpkb2N1bWVudDoxLjIiPgotICAgIDxzdHJpbmcgbmFtZT0ibXJfc3lzdGVtX3JvdXRlX25hbWUiIG1zZ2lkPSI1NDQxNTI5ODUxNDgxMTc2ODE3Ij4iU3lzdGVtIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibXJfdXNlcl9yb3V0ZV9jYXRlZ29yeV9uYW1lIiBtc2dpZD0iNzQ5ODExMjkwNzUyNDk3NzMxMSI+IkRldmljZXMiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJtcl9idXR0b25fY29udGVudF9kZXNjcmlwdGlvbiIgbXNnaWQ9IjM2OTgzNzgwODU5MDE0NjYxMjkiPiJDYXN0IGJ1dHRvbiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im1yX2Nhc3RfYnV0dG9uX2Rpc2Nvbm5lY3RlZCIgbXNnaWQ9IjgxNjMwNTQ5MDQyNzgxOTI0MCI+IkNhc3QgYnV0dG9uLiBEaXNjb25uZWN0ZWQiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJtcl9jYXN0X2J1dHRvbl9jb25uZWN0aW5nIiBtc2dpZD0iMjE4NzY0Mjc2NTA5MTg3MzgzNCI+IkNhc3QgYnV0dG9uLiBDb25uZWN0aW5nIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibXJfY2FzdF9idXR0b25fY29ubmVjdGVkIiBtc2dpZD0iNTA4ODQyNzc3MTc4ODY0ODA4NSI+IkNhc3QgYnV0dG9uLiBDb25uZWN0ZWQiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJtcl9jaG9vc2VyX3RpdGxlIiBtc2dpZD0iNDE0MzAxOTQxNTQ2MTM1OTkwIj4iQ2FzdCB0byI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im1yX2Nob29zZXJfc2VhcmNoaW5nIiBtc2dpZD0iNjM0OTkwMDU3OTUwNzUyMTk1NiI+IkZpbmRpbmcgZGV2aWNlcyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im1yX2NvbnRyb2xsZXJfZGlzY29ubmVjdCIgbXNnaWQ9IjEyMjcyNjQ4ODk0MTI5ODk1ODAiPiJEaXNjb25uZWN0Ijwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibXJfY29udHJvbGxlcl9zdG9wX2Nhc3RpbmciIG1zZ2lkPSI4ODU3ODg2Nzk0MDg2NTgzMjI2Ij4iU3RvcCBjYXN0aW5nIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibXJfY29udHJvbGxlcl9jbG9zZV9kZXNjcmlwdGlvbiIgbXNnaWQ9IjczMzM4NjIzMTI0ODA1ODMyNjAiPiJDbG9zZSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im1yX2NvbnRyb2xsZXJfcGxheSIgbXNnaWQ9IjY4MzYzNDU2NTk2OTk4NzQ1OCI+IlBsYXkiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJtcl9jb250cm9sbGVyX3BhdXNlIiBtc2dpZD0iNTQ1MTg4NDQzNTUxMDkwNTQwNiI+IlBhdXNlIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibXJfY29udHJvbGxlcl9zdG9wIiBtc2dpZD0iNzM1ODc0NjQxOTIxNDI1MTIzIj4iU3RvcCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im1yX2NvbnRyb2xsZXJfZXhwYW5kX2dyb3VwIiBtc2dpZD0iODA2MjQyNzAyMjc0NDI2NjkwNyI+IkV4cGFuZCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im1yX2NvbnRyb2xsZXJfY29sbGFwc2VfZ3JvdXAiIG1zZ2lkPSI3OTI0ODA5MDU2OTA0MjQwOTI2Ij4iQ29sbGFwc2UiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJtcl9jb250cm9sbGVyX2FsYnVtX2FydCIgbXNnaWQ9IjY0MjI4MDE4NDM1NDA1NDM1ODUiPiJBbGJ1bSBhcnQiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJtcl9jb250cm9sbGVyX3ZvbHVtZV9zbGlkZXIiIG1zZ2lkPSIyMzYxNzg1OTkyMjExODQxNzA5Ij4iVm9sdW1lIHNsaWRlciI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im1yX2NvbnRyb2xsZXJfbm9fbWVkaWFfc2VsZWN0ZWQiIG1zZ2lkPSI2NTQ3MTMwMzYwMzQ5MTgyMzgxIj4iTm8gbWVkaWEgc2VsZWN0ZWQiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJtcl9jb250cm9sbGVyX25vX2luZm9fYXZhaWxhYmxlIiBtc2dpZD0iNTU4NTQxODQ3MTc0MTE0MjkyNCI+Ik5vIGluZm8gYXZhaWxhYmxlIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibXJfY29udHJvbGxlcl9jYXN0aW5nX3NjcmVlbiIgbXNnaWQ9IjQ4Njg0NTc5NTcxNTExMjQ4NjciPiJDYXN0aW5nIHNjcmVlbiI8L3N0cmluZz4KLTwvcmVzb3VyY2VzPgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvTWVkaWFDb21wb25lbnRzL3Jlcy92YWx1ZXMtZW4tckNBL3N0cmluZ3MueG1sIGIvcGFja2FnZXMvTWVkaWFDb21wb25lbnRzL3Jlcy92YWx1ZXMtZW4tckNBL3N0cmluZ3MueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkZDNmMjE5Li4wMDAwMDAwCi0tLSBhL3BhY2thZ2VzL01lZGlhQ29tcG9uZW50cy9yZXMvdmFsdWVzLWVuLXJDQS9zdHJpbmdzLnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDQwICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08IS0tICBDb3B5cmlnaHQgMjAxOCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0Ci0KLSAgICAgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7Ci0gICAgIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KLSAgICAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0KLSAgICAgICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLQotICAgICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCi0gICAgIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCi0gICAgIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgotICAgICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCi0gICAgIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgotIC0tPgotCi08cmVzb3VyY2VzIHhtbG5zOmFuZHJvaWQ9Imh0dHA6Ly9zY2hlbWFzLmFuZHJvaWQuY29tL2Fway9yZXMvYW5kcm9pZCIKLSAgICB4bWxuczp4bGlmZj0idXJuOm9hc2lzOm5hbWVzOnRjOnhsaWZmOmRvY3VtZW50OjEuMiI+Ci0gICAgPHN0cmluZyBuYW1lPSJtcl9zeXN0ZW1fcm91dGVfbmFtZSIgbXNnaWQ9IjU0NDE1Mjk4NTE0ODExNzY4MTciPiJTeXN0ZW0iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJtcl91c2VyX3JvdXRlX2NhdGVnb3J5X25hbWUiIG1zZ2lkPSI3NDk4MTEyOTA3NTI0OTc3MzExIj4iRGV2aWNlcyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im1yX2J1dHRvbl9jb250ZW50X2Rlc2NyaXB0aW9uIiBtc2dpZD0iMzY5ODM3ODA4NTkwMTQ2NjEyOSI+IkNhc3QgYnV0dG9uIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibXJfY2FzdF9idXR0b25fZGlzY29ubmVjdGVkIiBtc2dpZD0iODE2MzA1NDkwNDI3ODE5MjQwIj4iQ2FzdCBidXR0b24uIERpc2Nvbm5lY3RlZCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im1yX2Nhc3RfYnV0dG9uX2Nvbm5lY3RpbmciIG1zZ2lkPSIyMTg3NjQyNzY1MDkxODczODM0Ij4iQ2FzdCBidXR0b24uIENvbm5lY3RpbmciPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJtcl9jYXN0X2J1dHRvbl9jb25uZWN0ZWQiIG1zZ2lkPSI1MDg4NDI3NzcxNzg4NjQ4MDg1Ij4iQ2FzdCBidXR0b24uIENvbm5lY3RlZCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im1yX2Nob29zZXJfdGl0bGUiIG1zZ2lkPSI0MTQzMDE5NDE1NDYxMzU5OTAiPiJDYXN0IHRvIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibXJfY2hvb3Nlcl9zZWFyY2hpbmciIG1zZ2lkPSI2MzQ5OTAwNTc5NTA3NTIxOTU2Ij4iRmluZGluZyBkZXZpY2VzIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibXJfY29udHJvbGxlcl9kaXNjb25uZWN0IiBtc2dpZD0iMTIyNzI2NDg4OTQxMjk4OTU4MCI+IkRpc2Nvbm5lY3QiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJtcl9jb250cm9sbGVyX3N0b3BfY2FzdGluZyIgbXNnaWQ9Ijg4NTc4ODY3OTQwODY1ODMyMjYiPiJTdG9wIGNhc3RpbmciPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJtcl9jb250cm9sbGVyX2Nsb3NlX2Rlc2NyaXB0aW9uIiBtc2dpZD0iNzMzMzg2MjMxMjQ4MDU4MzI2MCI+IkNsb3NlIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibXJfY29udHJvbGxlcl9wbGF5IiBtc2dpZD0iNjgzNjM0NTY1OTY5OTg3NDU4Ij4iUGxheSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im1yX2NvbnRyb2xsZXJfcGF1c2UiIG1zZ2lkPSI1NDUxODg0NDM1NTEwOTA1NDA2Ij4iUGF1c2UiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJtcl9jb250cm9sbGVyX3N0b3AiIG1zZ2lkPSI3MzU4NzQ2NDE5MjE0MjUxMjMiPiJTdG9wIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibXJfY29udHJvbGxlcl9leHBhbmRfZ3JvdXAiIG1zZ2lkPSI4MDYyNDI3MDIyNzQ0MjY2OTA3Ij4iRXhwYW5kIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibXJfY29udHJvbGxlcl9jb2xsYXBzZV9ncm91cCIgbXNnaWQ9Ijc5MjQ4MDkwNTY5MDQyNDA5MjYiPiJDb2xsYXBzZSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im1yX2NvbnRyb2xsZXJfYWxidW1fYXJ0IiBtc2dpZD0iNjQyMjgwMTg0MzU0MDU0MzU4NSI+IkFsYnVtIGFydCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im1yX2NvbnRyb2xsZXJfdm9sdW1lX3NsaWRlciIgbXNnaWQ9IjIzNjE3ODU5OTIyMTE4NDE3MDkiPiJWb2x1bWUgc2xpZGVyIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibXJfY29udHJvbGxlcl9ub19tZWRpYV9zZWxlY3RlZCIgbXNnaWQ9IjY1NDcxMzAzNjAzNDkxODIzODEiPiJObyBtZWRpYSBzZWxlY3RlZCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im1yX2NvbnRyb2xsZXJfbm9faW5mb19hdmFpbGFibGUiIG1zZ2lkPSI1NTg1NDE4NDcxNzQxMTQyOTI0Ij4iTm8gaW5mbyBhdmFpbGFibGUiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJtcl9jb250cm9sbGVyX2Nhc3Rpbmdfc2NyZWVuIiBtc2dpZD0iNDg2ODQ1Nzk1NzE1MTEyNDg2NyI+IkNhc3Rpbmcgc2NyZWVuIjwvc3RyaW5nPgotPC9yZXNvdXJjZXM+CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9NZWRpYUNvbXBvbmVudHMvcmVzL3ZhbHVlcy1lbi1yR0Ivc3RyaW5ncy54bWwgYi9wYWNrYWdlcy9NZWRpYUNvbXBvbmVudHMvcmVzL3ZhbHVlcy1lbi1yR0Ivc3RyaW5ncy54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGRkM2YyMTkuLjAwMDAwMDAKLS0tIGEvcGFja2FnZXMvTWVkaWFDb21wb25lbnRzL3Jlcy92YWx1ZXMtZW4tckdCL3N0cmluZ3MueG1sCisrKyAvZGV2L251bGwKQEAgLTEsNDAgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTwhLS0gIENvcHlyaWdodCAyMDE4IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKLQotICAgICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKLSAgICAgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgotICAgICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLQotICAgICAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotCi0gICAgIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKLSAgICAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKLSAgICAgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCi0gICAgIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKLSAgICAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCi0gLS0+Ci0KLTxyZXNvdXJjZXMgeG1sbnM6YW5kcm9pZD0iaHR0cDovL3NjaGVtYXMuYW5kcm9pZC5jb20vYXBrL3Jlcy9hbmRyb2lkIgotICAgIHhtbG5zOnhsaWZmPSJ1cm46b2FzaXM6bmFtZXM6dGM6eGxpZmY6ZG9jdW1lbnQ6MS4yIj4KLSAgICA8c3RyaW5nIG5hbWU9Im1yX3N5c3RlbV9yb3V0ZV9uYW1lIiBtc2dpZD0iNTQ0MTUyOTg1MTQ4MTE3NjgxNyI+IlN5c3RlbSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im1yX3VzZXJfcm91dGVfY2F0ZWdvcnlfbmFtZSIgbXNnaWQ9Ijc0OTgxMTI5MDc1MjQ5NzczMTEiPiJEZXZpY2VzIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibXJfYnV0dG9uX2NvbnRlbnRfZGVzY3JpcHRpb24iIG1zZ2lkPSIzNjk4Mzc4MDg1OTAxNDY2MTI5Ij4iQ2FzdCBidXR0b24iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJtcl9jYXN0X2J1dHRvbl9kaXNjb25uZWN0ZWQiIG1zZ2lkPSI4MTYzMDU0OTA0Mjc4MTkyNDAiPiJDYXN0IGJ1dHRvbi4gRGlzY29ubmVjdGVkIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibXJfY2FzdF9idXR0b25fY29ubmVjdGluZyIgbXNnaWQ9IjIxODc2NDI3NjUwOTE4NzM4MzQiPiJDYXN0IGJ1dHRvbi4gQ29ubmVjdGluZyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im1yX2Nhc3RfYnV0dG9uX2Nvbm5lY3RlZCIgbXNnaWQ9IjUwODg0Mjc3NzE3ODg2NDgwODUiPiJDYXN0IGJ1dHRvbi4gQ29ubmVjdGVkIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibXJfY2hvb3Nlcl90aXRsZSIgbXNnaWQ9IjQxNDMwMTk0MTU0NjEzNTk5MCI+IkNhc3QgdG8iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJtcl9jaG9vc2VyX3NlYXJjaGluZyIgbXNnaWQ9IjYzNDk5MDA1Nzk1MDc1MjE5NTYiPiJGaW5kaW5nIGRldmljZXMiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJtcl9jb250cm9sbGVyX2Rpc2Nvbm5lY3QiIG1zZ2lkPSIxMjI3MjY0ODg5NDEyOTg5NTgwIj4iRGlzY29ubmVjdCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im1yX2NvbnRyb2xsZXJfc3RvcF9jYXN0aW5nIiBtc2dpZD0iODg1Nzg4Njc5NDA4NjU4MzIyNiI+IlN0b3AgY2FzdGluZyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im1yX2NvbnRyb2xsZXJfY2xvc2VfZGVzY3JpcHRpb24iIG1zZ2lkPSI3MzMzODYyMzEyNDgwNTgzMjYwIj4iQ2xvc2UiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJtcl9jb250cm9sbGVyX3BsYXkiIG1zZ2lkPSI2ODM2MzQ1NjU5Njk5ODc0NTgiPiJQbGF5Ijwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibXJfY29udHJvbGxlcl9wYXVzZSIgbXNnaWQ9IjU0NTE4ODQ0MzU1MTA5MDU0MDYiPiJQYXVzZSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im1yX2NvbnRyb2xsZXJfc3RvcCIgbXNnaWQ9IjczNTg3NDY0MTkyMTQyNTEyMyI+IlN0b3AiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJtcl9jb250cm9sbGVyX2V4cGFuZF9ncm91cCIgbXNnaWQ9IjgwNjI0MjcwMjI3NDQyNjY5MDciPiJFeHBhbmQiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJtcl9jb250cm9sbGVyX2NvbGxhcHNlX2dyb3VwIiBtc2dpZD0iNzkyNDgwOTA1NjkwNDI0MDkyNiI+IkNvbGxhcHNlIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibXJfY29udHJvbGxlcl9hbGJ1bV9hcnQiIG1zZ2lkPSI2NDIyODAxODQzNTQwNTQzNTg1Ij4iQWxidW0gYXJ0Ijwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibXJfY29udHJvbGxlcl92b2x1bWVfc2xpZGVyIiBtc2dpZD0iMjM2MTc4NTk5MjIxMTg0MTcwOSI+IlZvbHVtZSBzbGlkZXIiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJtcl9jb250cm9sbGVyX25vX21lZGlhX3NlbGVjdGVkIiBtc2dpZD0iNjU0NzEzMDM2MDM0OTE4MjM4MSI+Ik5vIG1lZGlhIHNlbGVjdGVkIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibXJfY29udHJvbGxlcl9ub19pbmZvX2F2YWlsYWJsZSIgbXNnaWQ9IjU1ODU0MTg0NzE3NDExNDI5MjQiPiJObyBpbmZvIGF2YWlsYWJsZSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im1yX2NvbnRyb2xsZXJfY2FzdGluZ19zY3JlZW4iIG1zZ2lkPSI0ODY4NDU3OTU3MTUxMTI0ODY3Ij4iQ2FzdGluZyBzY3JlZW4iPC9zdHJpbmc+Ci08L3Jlc291cmNlcz4KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL01lZGlhQ29tcG9uZW50cy9yZXMvdmFsdWVzLWVuLXJJTi9zdHJpbmdzLnhtbCBiL3BhY2thZ2VzL01lZGlhQ29tcG9uZW50cy9yZXMvdmFsdWVzLWVuLXJJTi9zdHJpbmdzLnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZGQzZjIxOS4uMDAwMDAwMAotLS0gYS9wYWNrYWdlcy9NZWRpYUNvbXBvbmVudHMvcmVzL3ZhbHVlcy1lbi1ySU4vc3RyaW5ncy54bWwKKysrIC9kZXYvbnVsbApAQCAtMSw0MCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPCEtLSAgQ29weXJpZ2h0IDIwMTggVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAotCi0gICAgIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwotICAgICB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCi0gICAgIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotCi0gICAgICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0KLSAgICAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQotICAgICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAotICAgICBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KLSAgICAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAotICAgICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KLSAtLT4KLQotPHJlc291cmNlcyB4bWxuczphbmRyb2lkPSJodHRwOi8vc2NoZW1hcy5hbmRyb2lkLmNvbS9hcGsvcmVzL2FuZHJvaWQiCi0gICAgeG1sbnM6eGxpZmY9InVybjpvYXNpczpuYW1lczp0Yzp4bGlmZjpkb2N1bWVudDoxLjIiPgotICAgIDxzdHJpbmcgbmFtZT0ibXJfc3lzdGVtX3JvdXRlX25hbWUiIG1zZ2lkPSI1NDQxNTI5ODUxNDgxMTc2ODE3Ij4iU3lzdGVtIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibXJfdXNlcl9yb3V0ZV9jYXRlZ29yeV9uYW1lIiBtc2dpZD0iNzQ5ODExMjkwNzUyNDk3NzMxMSI+IkRldmljZXMiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJtcl9idXR0b25fY29udGVudF9kZXNjcmlwdGlvbiIgbXNnaWQ9IjM2OTgzNzgwODU5MDE0NjYxMjkiPiJDYXN0IGJ1dHRvbiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im1yX2Nhc3RfYnV0dG9uX2Rpc2Nvbm5lY3RlZCIgbXNnaWQ9IjgxNjMwNTQ5MDQyNzgxOTI0MCI+IkNhc3QgYnV0dG9uLiBEaXNjb25uZWN0ZWQiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJtcl9jYXN0X2J1dHRvbl9jb25uZWN0aW5nIiBtc2dpZD0iMjE4NzY0Mjc2NTA5MTg3MzgzNCI+IkNhc3QgYnV0dG9uLiBDb25uZWN0aW5nIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibXJfY2FzdF9idXR0b25fY29ubmVjdGVkIiBtc2dpZD0iNTA4ODQyNzc3MTc4ODY0ODA4NSI+IkNhc3QgYnV0dG9uLiBDb25uZWN0ZWQiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJtcl9jaG9vc2VyX3RpdGxlIiBtc2dpZD0iNDE0MzAxOTQxNTQ2MTM1OTkwIj4iQ2FzdCB0byI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im1yX2Nob29zZXJfc2VhcmNoaW5nIiBtc2dpZD0iNjM0OTkwMDU3OTUwNzUyMTk1NiI+IkZpbmRpbmcgZGV2aWNlcyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im1yX2NvbnRyb2xsZXJfZGlzY29ubmVjdCIgbXNnaWQ9IjEyMjcyNjQ4ODk0MTI5ODk1ODAiPiJEaXNjb25uZWN0Ijwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibXJfY29udHJvbGxlcl9zdG9wX2Nhc3RpbmciIG1zZ2lkPSI4ODU3ODg2Nzk0MDg2NTgzMjI2Ij4iU3RvcCBjYXN0aW5nIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibXJfY29udHJvbGxlcl9jbG9zZV9kZXNjcmlwdGlvbiIgbXNnaWQ9IjczMzM4NjIzMTI0ODA1ODMyNjAiPiJDbG9zZSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im1yX2NvbnRyb2xsZXJfcGxheSIgbXNnaWQ9IjY4MzYzNDU2NTk2OTk4NzQ1OCI+IlBsYXkiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJtcl9jb250cm9sbGVyX3BhdXNlIiBtc2dpZD0iNTQ1MTg4NDQzNTUxMDkwNTQwNiI+IlBhdXNlIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibXJfY29udHJvbGxlcl9zdG9wIiBtc2dpZD0iNzM1ODc0NjQxOTIxNDI1MTIzIj4iU3RvcCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im1yX2NvbnRyb2xsZXJfZXhwYW5kX2dyb3VwIiBtc2dpZD0iODA2MjQyNzAyMjc0NDI2NjkwNyI+IkV4cGFuZCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im1yX2NvbnRyb2xsZXJfY29sbGFwc2VfZ3JvdXAiIG1zZ2lkPSI3OTI0ODA5MDU2OTA0MjQwOTI2Ij4iQ29sbGFwc2UiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJtcl9jb250cm9sbGVyX2FsYnVtX2FydCIgbXNnaWQ9IjY0MjI4MDE4NDM1NDA1NDM1ODUiPiJBbGJ1bSBhcnQiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJtcl9jb250cm9sbGVyX3ZvbHVtZV9zbGlkZXIiIG1zZ2lkPSIyMzYxNzg1OTkyMjExODQxNzA5Ij4iVm9sdW1lIHNsaWRlciI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im1yX2NvbnRyb2xsZXJfbm9fbWVkaWFfc2VsZWN0ZWQiIG1zZ2lkPSI2NTQ3MTMwMzYwMzQ5MTgyMzgxIj4iTm8gbWVkaWEgc2VsZWN0ZWQiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJtcl9jb250cm9sbGVyX25vX2luZm9fYXZhaWxhYmxlIiBtc2dpZD0iNTU4NTQxODQ3MTc0MTE0MjkyNCI+Ik5vIGluZm8gYXZhaWxhYmxlIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibXJfY29udHJvbGxlcl9jYXN0aW5nX3NjcmVlbiIgbXNnaWQ9IjQ4Njg0NTc5NTcxNTExMjQ4NjciPiJDYXN0aW5nIHNjcmVlbiI8L3N0cmluZz4KLTwvcmVzb3VyY2VzPgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvTWVkaWFDb21wb25lbnRzL3Jlcy92YWx1ZXMtZW4tclhDL3N0cmluZ3MueG1sIGIvcGFja2FnZXMvTWVkaWFDb21wb25lbnRzL3Jlcy92YWx1ZXMtZW4tclhDL3N0cmluZ3MueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhODcwMDdlLi4wMDAwMDAwCi0tLSBhL3BhY2thZ2VzL01lZGlhQ29tcG9uZW50cy9yZXMvdmFsdWVzLWVuLXJYQy9zdHJpbmdzLnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDQwICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08IS0tICBDb3B5cmlnaHQgMjAxOCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0Ci0KLSAgICAgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7Ci0gICAgIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KLSAgICAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0KLSAgICAgICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLQotICAgICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCi0gICAgIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCi0gICAgIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgotICAgICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCi0gICAgIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgotIC0tPgotCi08cmVzb3VyY2VzIHhtbG5zOmFuZHJvaWQ9Imh0dHA6Ly9zY2hlbWFzLmFuZHJvaWQuY29tL2Fway9yZXMvYW5kcm9pZCIKLSAgICB4bWxuczp4bGlmZj0idXJuOm9hc2lzOm5hbWVzOnRjOnhsaWZmOmRvY3VtZW50OjEuMiI+Ci0gICAgPHN0cmluZyBuYW1lPSJtcl9zeXN0ZW1fcm91dGVfbmFtZSIgbXNnaWQ9IjU0NDE1Mjk4NTE0ODExNzY4MTciPiLigI7igI/igI7igI7igI7igI7igI7igI/igI7igI/igI/igI/igI7igI7igI7igI7igI7igI/igI7igI7igI/igI7igI7igI7igI7igI/igI/igI/igI/igI/igI/igI/igI/igI7igI7igI/igI7igI/igI/igI/igI7igI7igI7igI7igI/igI7igI7igI7igI7igI/igI/igI7igI7igI/igI7igI/igI7igI7igI/igI7igI7igI7igI/igI/igI/igI7igI7igI/igI7igI7igI7igI7igI7igI/igI/igI/igI7igI7igI7igI7igI7igI/igI/igI/igI7igI/igI7igI/igI/igI/igI/igI7igI7igI7igI/igI5TeXN0ZW3igI7igI/igI7igI7igI/igI4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJtcl91c2VyX3JvdXRlX2NhdGVnb3J5X25hbWUiIG1zZ2lkPSI3NDk4MTEyOTA3NTI0OTc3MzExIj4i4oCO4oCP4oCO4oCO4oCO4oCO4oCO4oCP4oCO4oCP4oCP4oCP4oCO4oCO4oCO4oCO4oCO4oCP4oCO4oCO4oCP4oCO4oCO4oCO4oCO4oCP4oCP4oCP4oCP4oCP4oCP4oCP4oCP4oCP4oCO4oCP4oCO4oCO4oCO4oCO4oCO4oCO4oCO4oCP4oCP4oCP4oCO4oCP4oCO4oCP4oCO4oCO4oCP4oCO4oCP4oCP4oCP4oCP4oCP4oCO4oCP4oCP4oCO4oCO4oCP4oCP4oCP4oCO4oCO4oCP4oCO4oCP4oCP4oCO4oCO4oCP4oCP4oCO4oCO4oCO4oCO4oCP4oCP4oCO4oCO4oCP4oCO4oCP4oCO4oCO4oCP4oCP4oCP4oCP4oCP4oCORGV2aWNlc+KAjuKAj+KAjuKAjuKAj+KAjiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im1yX2J1dHRvbl9jb250ZW50X2Rlc2NyaXB0aW9uIiBtc2dpZD0iMzY5ODM3ODA4NTkwMTQ2NjEyOSI+IuKAjuKAj+KAjuKAjuKAjuKAjuKAjuKAj+KAjuKAj+KAj+KAj+KAjuKAjuKAjuKAjuKAjuKAj+KAjuKAjuKAj+KAjuKAjuKAjuKAjuKAj+KAj+KAj+KAj+KAj+KAj+KAjuKAj+KAj+KAjuKAjuKAj+KAj+KAjuKAj+KAjuKAj+KAjuKAjuKAj+KAj+KAjuKAj+KAjuKAjuKAjuKAj+KAj+KAj+KAjuKAj+KAjuKAjuKAjuKAj+KAj+KAjuKAjuKAjuKAj+KAj+KAjuKAj+KAj+KAj+KAjuKAjuKAj+KAj+KAj+KAj+KAj+KAjuKAj+KAj+KAj+KAj+KAj+KAjuKAj+KAjuKAjuKAjuKAjuKAj+KAjuKAjuKAjuKAj+KAjkNhc3QgYnV0dG9u4oCO4oCP4oCO4oCO4oCP4oCOIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibXJfY2FzdF9idXR0b25fZGlzY29ubmVjdGVkIiBtc2dpZD0iODE2MzA1NDkwNDI3ODE5MjQwIj4i4oCO4oCP4oCO4oCO4oCO4oCO4oCO4oCP4oCO4oCP4oCP4oCP4oCO4oCO4oCO4oCO4oCO4oCP4oCO4oCO4oCP4oCO4oCO4oCO4oCO4oCP4oCP4oCP4oCP4oCP4oCO4oCO4oCP4oCO4oCP4oCP4oCO4oCP4oCO4oCP4oCO4oCP4oCO4oCO4oCO4oCO4oCO4oCP4oCP4oCO4oCO4oCP4oCP4oCO4oCO4oCO4oCO4oCP4oCO4oCO4oCP4oCP4oCO4oCO4oCO4oCO4oCO4oCP4oCO4oCO4oCP4oCO4oCO4oCP4oCP4oCO4oCP4oCO4oCP4oCP4oCO4oCP4oCO4oCO4oCP4oCP4oCP4oCO4oCP4oCO4oCO4oCO4oCOQ2FzdCBidXR0b24uIERpc2Nvbm5lY3RlZOKAjuKAj+KAjuKAjuKAj+KAjiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im1yX2Nhc3RfYnV0dG9uX2Nvbm5lY3RpbmciIG1zZ2lkPSIyMTg3NjQyNzY1MDkxODczODM0Ij4i4oCO4oCP4oCO4oCO4oCO4oCO4oCO4oCP4oCO4oCP4oCP4oCP4oCO4oCO4oCO4oCO4oCO4oCP4oCO4oCO4oCP4oCO4oCO4oCO4oCO4oCP4oCP4oCP4oCP4oCP4oCO4oCP4oCP4oCP4oCP4oCP4oCO4oCO4oCP4oCO4oCP4oCP4oCP4oCO4oCO4oCO4oCO4oCO4oCP4oCO4oCO4oCO4oCP4oCP4oCO4oCO4oCO4oCO4oCO4oCO4oCP4oCO4oCO4oCO4oCP4oCO4oCP4oCO4oCO4oCP4oCP4oCO4oCO4oCO4oCO4oCO4oCP4oCO4oCO4oCP4oCO4oCO4oCP4oCO4oCO4oCO4oCO4oCP4oCO4oCP4oCO4oCP4oCO4oCOQ2FzdCBidXR0b24uIENvbm5lY3RpbmfigI7igI/igI7igI7igI/igI4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJtcl9jYXN0X2J1dHRvbl9jb25uZWN0ZWQiIG1zZ2lkPSI1MDg4NDI3NzcxNzg4NjQ4MDg1Ij4i4oCO4oCP4oCO4oCO4oCO4oCO4oCO4oCP4oCO4oCP4oCP4oCP4oCO4oCO4oCO4oCO4oCO4oCP4oCO4oCO4oCP4oCO4oCO4oCO4oCO4oCP4oCP4oCP4oCP4oCP4oCP4oCP4oCP4oCO4oCO4oCO4oCP4oCP4oCO4oCP4oCO4oCO4oCP4oCP4oCP4oCO4oCP4oCP4oCO4oCP4oCP4oCP4oCO4oCP4oCO4oCO4oCO4oCO4oCP4oCP4oCO4oCO4oCP4oCO4oCP4oCO4oCO4oCP4oCO4oCP4oCO4oCP4oCO4oCP4oCP4oCO4oCO4oCO4oCP4oCP4oCP4oCO4oCP4oCP4oCP4oCP4oCO4oCP4oCO4oCO4oCP4oCO4oCP4oCO4oCP4oCOQ2FzdCBidXR0b24uIENvbm5lY3RlZOKAjuKAj+KAjuKAjuKAj+KAjiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im1yX2Nob29zZXJfdGl0bGUiIG1zZ2lkPSI0MTQzMDE5NDE1NDYxMzU5OTAiPiLigI7igI/igI7igI7igI7igI7igI7igI/igI7igI/igI/igI/igI7igI7igI7igI7igI7igI/igI7igI7igI/igI7igI7igI7igI7igI/igI/igI/igI/igI7igI/igI/igI/igI7igI/igI/igI7igI/igI/igI/igI/igI/igI/igI/igI/igI/igI7igI7igI/igI7igI/igI7igI/igI/igI7igI/igI7igI/igI/igI/igI7igI/igI/igI7igI/igI/igI/igI/igI7igI7igI/igI/igI/igI7igI7igI/igI7igI/igI/igI7igI7igI7igI/igI/igI7igI/igI/igI7igI/igI/igI7igI5DYXN0IHRv4oCO4oCP4oCO4oCO4oCP4oCOIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibXJfY2hvb3Nlcl9zZWFyY2hpbmciIG1zZ2lkPSI2MzQ5OTAwNTc5NTA3NTIxOTU2Ij4i4oCO4oCP4oCO4oCO4oCO4oCO4oCO4oCP4oCO4oCP4oCP4oCP4oCO4oCO4oCO4oCO4oCO4oCP4oCO4oCO4oCP4oCO4oCO4oCO4oCO4oCP4oCP4oCP4oCP4oCP4oCP4oCP4oCP4oCO4oCP4oCP4oCO4oCO4oCO4oCO4oCO4oCO4oCP4oCP4oCP4oCP4oCP4oCO4oCP4oCP4oCO4oCO4oCO4oCO4oCO4oCP4oCP4oCP4oCO4oCP4oCP4oCP4oCP4oCO4oCO4oCO4oCP4oCO4oCO4oCO4oCO4oCP4oCO4oCO4oCP4oCO4oCP4oCP4oCP4oCP4oCP4oCO4oCO4oCP4oCO4oCO4oCP4oCP4oCO4oCP4oCO4oCO4oCP4oCO4oCO4oCORmluZGluZyBkZXZpY2Vz4oCO4oCP4oCO4oCO4oCP4oCOIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibXJfY29udHJvbGxlcl9kaXNjb25uZWN0IiBtc2dpZD0iMTIyNzI2NDg4OTQxMjk4OTU4MCI+IuKAjuKAj+KAjuKAjuKAjuKAjuKAjuKAj+KAjuKAj+KAj+KAj+KAjuKAjuKAjuKAjuKAjuKAj+KAjuKAjuKAj+KAjuKAjuKAjuKAjuKAj+KAj+KAj+KAj+KAj+KAjuKAj+KAj+KAjuKAjuKAjuKAj+KAjuKAjuKAjuKAjuKAj+KAjuKAjuKAjuKAjuKAjuKAjuKAj+KAj+KAj+KAj+KAjuKAj+KAj+KAj+KAjuKAj+KAjuKAj+KAjuKAjuKAjuKAj+KAjuKAjuKAjuKAj+KAjuKAj+KAj+KAjuKAjuKAjuKAj+KAjuKAj+KAjuKAjuKAj+KAj+KAjuKAjuKAj+KAjuKAj+KAjuKAjuKAjuKAj+KAj+KAjuKAjuKAjkRpc2Nvbm5lY3TigI7igI/igI7igI7igI/igI4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJtcl9jb250cm9sbGVyX3N0b3BfY2FzdGluZyIgbXNnaWQ9Ijg4NTc4ODY3OTQwODY1ODMyMjYiPiLigI7igI/igI7igI7igI7igI7igI7igI/igI7igI/igI/igI/igI7igI7igI7igI7igI7igI/igI7igI7igI/igI7igI7igI7igI7igI/igI/igI/igI/igI/igI/igI/igI/igI/igI/igI/igI7igI/igI7igI/igI/igI/igI7igI/igI/igI7igI/igI/igI7igI7igI7igI/igI7igI7igI/igI7igI7igI7igI/igI/igI7igI/igI/igI/igI7igI/igI7igI/igI/igI/igI7igI7igI7igI/igI7igI7igI/igI/igI/igI/igI7igI7igI7igI/igI7igI/igI/igI/igI7igI/igI/igI/igI7igI/igI7igI5TdG9wIGNhc3RpbmfigI7igI/igI7igI7igI/igI4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJtcl9jb250cm9sbGVyX2Nsb3NlX2Rlc2NyaXB0aW9uIiBtc2dpZD0iNzMzMzg2MjMxMjQ4MDU4MzI2MCI+IuKAjuKAj+KAjuKAjuKAjuKAjuKAjuKAj+KAjuKAj+KAj+KAj+KAjuKAjuKAjuKAjuKAjuKAj+KAjuKAjuKAj+KAjuKAjuKAjuKAjuKAj+KAj+KAj+KAj+KAj+KAj+KAj+KAj+KAj+KAjuKAjuKAj+KAjuKAj+KAj+KAj+KAjuKAjuKAjuKAj+KAj+KAj+KAjuKAjuKAjuKAj+KAj+KAj+KAjuKAjuKAj+KAj+KAj+KAjuKAj+KAjuKAj+KAjuKAj+KAjuKAj+KAjuKAj+KAj+KAj+KAj+KAjuKAjuKAjuKAjuKAjuKAj+KAj+KAj+KAj+KAjuKAj+KAjuKAj+KAj+KAj+KAjuKAjuKAj+KAjuKAj+KAj+KAj+KAjuKAjuKAjkNsb3Nl4oCO4oCP4oCO4oCO4oCP4oCOIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibXJfY29udHJvbGxlcl9wbGF5IiBtc2dpZD0iNjgzNjM0NTY1OTY5OTg3NDU4Ij4i4oCO4oCP4oCO4oCO4oCO4oCO4oCO4oCP4oCO4oCP4oCP4oCP4oCO4oCO4oCO4oCO4oCO4oCP4oCO4oCO4oCP4oCO4oCO4oCO4oCO4oCP4oCP4oCP4oCP4oCP4oCO4oCO4oCP4oCO4oCO4oCP4oCO4oCP4oCP4oCP4oCP4oCP4oCO4oCO4oCP4oCP4oCO4oCO4oCO4oCO4oCP4oCO4oCO4oCO4oCO4oCO4oCO4oCP4oCO4oCO4oCO4oCO4oCO4oCO4oCO4oCP4oCO4oCO4oCP4oCP4oCO4oCP4oCO4oCO4oCO4oCP4oCP4oCP4oCO4oCO4oCO4oCP4oCP4oCP4oCP4oCO4oCO4oCO4oCO4oCO4oCP4oCO4oCOUGxheeKAjuKAj+KAjuKAjuKAj+KAjiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im1yX2NvbnRyb2xsZXJfcGF1c2UiIG1zZ2lkPSI1NDUxODg0NDM1NTEwOTA1NDA2Ij4i4oCO4oCP4oCO4oCO4oCO4oCO4oCO4oCP4oCO4oCP4oCP4oCP4oCO4oCO4oCO4oCO4oCO4oCP4oCO4oCO4oCP4oCO4oCO4oCO4oCO4oCP4oCP4oCP4oCP4oCP4oCP4oCP4oCP4oCO4oCO4oCP4oCO4oCP4oCP4oCP4oCO4oCP4oCO4oCP4oCO4oCO4oCO4oCP4oCP4oCP4oCP4oCP4oCP4oCO4oCO4oCO4oCO4oCO4oCO4oCO4oCO4oCP4oCO4oCO4oCO4oCP4oCP4oCP4oCP4oCP4oCP4oCO4oCO4oCO4oCP4oCP4oCO4oCP4oCP4oCP4oCP4oCO4oCO4oCP4oCO4oCP4oCO4oCO4oCO4oCP4oCP4oCP4oCP4oCP4oCO4oCOUGF1c2XigI7igI/igI7igI7igI/igI4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJtcl9jb250cm9sbGVyX3N0b3AiIG1zZ2lkPSI3MzU4NzQ2NDE5MjE0MjUxMjMiPiLigI7igI/igI7igI7igI7igI7igI7igI/igI7igI/igI/igI/igI7igI7igI7igI7igI7igI/igI7igI7igI/igI7igI7igI7igI7igI/igI/igI/igI/igI/igI7igI7igI/igI7igI/igI7igI7igI7igI/igI/igI7igI/igI/igI7igI7igI/igI7igI/igI/igI7igI/igI7igI7igI7igI7igI/igI7igI/igI/igI7igI/igI7igI7igI7igI7igI/igI/igI7igI/igI/igI/igI/igI7igI7igI7igI/igI/igI7igI/igI/igI/igI/igI/igI7igI/igI/igI/igI7igI7igI7igI/igI/igI5TdG9w4oCO4oCP4oCO4oCO4oCP4oCOIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibXJfY29udHJvbGxlcl9leHBhbmRfZ3JvdXAiIG1zZ2lkPSI4MDYyNDI3MDIyNzQ0MjY2OTA3Ij4i4oCO4oCP4oCO4oCO4oCO4oCO4oCO4oCP4oCO4oCP4oCP4oCP4oCO4oCO4oCO4oCO4oCO4oCP4oCO4oCO4oCP4oCO4oCO4oCO4oCO4oCP4oCP4oCP4oCP4oCP4oCP4oCP4oCP4oCP4oCO4oCP4oCP4oCP4oCP4oCP4oCP4oCP4oCO4oCO4oCO4oCP4oCP4oCO4oCP4oCP4oCP4oCP4oCP4oCP4oCO4oCP4oCO4oCP4oCO4oCP4oCO4oCO4oCP4oCO4oCO4oCO4oCP4oCP4oCP4oCP4oCO4oCO4oCO4oCP4oCO4oCP4oCP4oCP4oCO4oCP4oCO4oCP4oCO4oCP4oCO4oCO4oCO4oCP4oCO4oCO4oCP4oCP4oCO4oCP4oCP4oCORXhwYW5k4oCO4oCP4oCO4oCO4oCP4oCOIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibXJfY29udHJvbGxlcl9jb2xsYXBzZV9ncm91cCIgbXNnaWQ9Ijc5MjQ4MDkwNTY5MDQyNDA5MjYiPiLigI7igI/igI7igI7igI7igI7igI7igI/igI7igI/igI/igI/igI7igI7igI7igI7igI7igI/igI7igI7igI/igI7igI7igI7igI7igI/igI/igI/igI/igI/igI/igI/igI/igI/igI7igI/igI/igI7igI/igI/igI/igI/igI/igI/igI7igI/igI7igI/igI7igI7igI/igI7igI7igI/igI/igI/igI/igI7igI/igI/igI7igI7igI/igI/igI7igI7igI7igI/igI/igI7igI/igI/igI7igI7igI/igI7igI7igI/igI/igI7igI/igI7igI/igI/igI/igI/igI/igI7igI7igI7igI/igI/igI/igI/igI7igI5Db2xsYXBzZeKAjuKAj+KAjuKAjuKAj+KAjiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im1yX2NvbnRyb2xsZXJfYWxidW1fYXJ0IiBtc2dpZD0iNjQyMjgwMTg0MzU0MDU0MzU4NSI+IuKAjuKAj+KAjuKAjuKAjuKAjuKAjuKAj+KAjuKAj+KAj+KAj+KAjuKAjuKAjuKAjuKAjuKAj+KAjuKAjuKAj+KAjuKAjuKAjuKAjuKAj+KAj+KAj+KAj+KAj+KAj+KAj+KAj+KAjuKAj+KAj+KAjuKAjuKAj+KAjuKAjuKAj+KAjuKAjuKAjuKAj+KAjuKAjuKAj+KAj+KAjuKAjuKAjuKAjuKAjuKAjuKAjuKAj+KAj+KAj+KAj+KAj+KAj+KAjuKAj+KAjuKAjuKAj+KAjuKAj+KAjuKAj+KAj+KAj+KAj+KAjuKAj+KAjuKAj+KAjuKAj+KAjuKAjuKAj+KAjuKAjuKAjuKAjuKAj+KAj+KAjuKAjuKAjuKAjuKAj+KAjkFsYnVtIGFydOKAjuKAj+KAjuKAjuKAj+KAjiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im1yX2NvbnRyb2xsZXJfdm9sdW1lX3NsaWRlciIgbXNnaWQ9IjIzNjE3ODU5OTIyMTE4NDE3MDkiPiLigI7igI/igI7igI7igI7igI7igI7igI/igI7igI/igI/igI/igI7igI7igI7igI7igI7igI/igI7igI7igI/igI7igI7igI7igI7igI/igI/igI/igI/igI/igI/igI7igI/igI7igI7igI7igI7igI7igI/igI/igI7igI7igI7igI/igI/igI7igI/igI7igI/igI/igI/igI/igI/igI/igI/igI/igI7igI/igI/igI7igI7igI7igI/igI7igI/igI/igI/igI/igI7igI/igI7igI/igI7igI7igI7igI/igI/igI/igI/igI/igI7igI7igI7igI7igI/igI7igI/igI7igI/igI7igI/igI/igI7igI/igI5Wb2x1bWUgc2xpZGVy4oCO4oCP4oCO4oCO4oCP4oCOIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibXJfY29udHJvbGxlcl9ub19tZWRpYV9zZWxlY3RlZCIgbXNnaWQ9IjY1NDcxMzAzNjAzNDkxODIzODEiPiLigI7igI/igI7igI7igI7igI7igI7igI/igI7igI/igI/igI/igI7igI7igI7igI7igI7igI/igI7igI7igI/igI7igI7igI7igI7igI/igI/igI/igI/igI/igI/igI/igI/igI7igI/igI/igI7igI/igI7igI/igI/igI7igI/igI/igI/igI7igI7igI7igI7igI7igI/igI7igI/igI7igI7igI7igI/igI7igI/igI/igI/igI/igI/igI/igI/igI/igI7igI7igI7igI/igI7igI/igI/igI7igI7igI/igI7igI7igI/igI/igI/igI7igI7igI/igI7igI7igI/igI/igI7igI/igI7igI/igI/igI7igI/igI5ObyBtZWRpYSBzZWxlY3RlZOKAjuKAj+KAjuKAjuKAj+KAjiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im1yX2NvbnRyb2xsZXJfbm9faW5mb19hdmFpbGFibGUiIG1zZ2lkPSI1NTg1NDE4NDcxNzQxMTQyOTI0Ij4i4oCO4oCP4oCO4oCO4oCO4oCO4oCO4oCP4oCO4oCP4oCP4oCP4oCO4oCO4oCO4oCO4oCO4oCP4oCO4oCO4oCP4oCO4oCO4oCO4oCO4oCP4oCP4oCP4oCP4oCP4oCP4oCP4oCP4oCO4oCO4oCP4oCP4oCO4oCP4oCP4oCO4oCO4oCO4oCO4oCO4oCP4oCP4oCO4oCP4oCP4oCO4oCO4oCP4oCO4oCO4oCP4oCO4oCO4oCO4oCO4oCO4oCO4oCP4oCP4oCP4oCO4oCP4oCP4oCO4oCP4oCO4oCO4oCO4oCO4oCO4oCP4oCO4oCO4oCP4oCO4oCO4oCP4oCP4oCO4oCP4oCP4oCP4oCP4oCO4oCO4oCO4oCP4oCP4oCO4oCO4oCOTm8gaW5mbyBhdmFpbGFibGXigI7igI/igI7igI7igI/igI4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJtcl9jb250cm9sbGVyX2Nhc3Rpbmdfc2NyZWVuIiBtc2dpZD0iNDg2ODQ1Nzk1NzE1MTEyNDg2NyI+IuKAjuKAj+KAjuKAjuKAjuKAjuKAjuKAj+KAjuKAj+KAj+KAj+KAjuKAjuKAjuKAjuKAjuKAj+KAjuKAjuKAj+KAjuKAjuKAjuKAjuKAj+KAj+KAj+KAj+KAj+KAj+KAj+KAj+KAjuKAjuKAjuKAjuKAj+KAj+KAj+KAjuKAjuKAj+KAjuKAjuKAjuKAjuKAjuKAjuKAj+KAj+KAj+KAj+KAjuKAjuKAj+KAjuKAj+KAj+KAjuKAj+KAj+KAj+KAj+KAj+KAjuKAjuKAjuKAjuKAj+KAj+KAj+KAj+KAj+KAjuKAj+KAjuKAj+KAjuKAj+KAjuKAj+KAjuKAj+KAj+KAjuKAj+KAj+KAjuKAjuKAjuKAjuKAjuKAj+KAj+KAjkNhc3Rpbmcgc2NyZWVu4oCO4oCP4oCO4oCO4oCP4oCOIjwvc3RyaW5nPgotPC9yZXNvdXJjZXM+CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9NZWRpYUNvbXBvbmVudHMvcmVzL3ZhbHVlcy1lcy1yVVMvc3RyaW5ncy54bWwgYi9wYWNrYWdlcy9NZWRpYUNvbXBvbmVudHMvcmVzL3ZhbHVlcy1lcy1yVVMvc3RyaW5ncy54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQ0MWVhZDEuLjAwMDAwMDAKLS0tIGEvcGFja2FnZXMvTWVkaWFDb21wb25lbnRzL3Jlcy92YWx1ZXMtZXMtclVTL3N0cmluZ3MueG1sCisrKyAvZGV2L251bGwKQEAgLTEsNDAgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTwhLS0gIENvcHlyaWdodCAyMDE4IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKLQotICAgICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKLSAgICAgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgotICAgICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLQotICAgICAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotCi0gICAgIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKLSAgICAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKLSAgICAgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCi0gICAgIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKLSAgICAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCi0gLS0+Ci0KLTxyZXNvdXJjZXMgeG1sbnM6YW5kcm9pZD0iaHR0cDovL3NjaGVtYXMuYW5kcm9pZC5jb20vYXBrL3Jlcy9hbmRyb2lkIgotICAgIHhtbG5zOnhsaWZmPSJ1cm46b2FzaXM6bmFtZXM6dGM6eGxpZmY6ZG9jdW1lbnQ6MS4yIj4KLSAgICA8c3RyaW5nIG5hbWU9Im1yX3N5c3RlbV9yb3V0ZV9uYW1lIiBtc2dpZD0iNTQ0MTUyOTg1MTQ4MTE3NjgxNyI+IlNpc3RlbWEiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJtcl91c2VyX3JvdXRlX2NhdGVnb3J5X25hbWUiIG1zZ2lkPSI3NDk4MTEyOTA3NTI0OTc3MzExIj4iRGlzcG9zaXRpdm9zIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibXJfYnV0dG9uX2NvbnRlbnRfZGVzY3JpcHRpb24iIG1zZ2lkPSIzNjk4Mzc4MDg1OTAxNDY2MTI5Ij4iQm90w7NuIHBhcmEgdHJhbnNtaXRpciI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im1yX2Nhc3RfYnV0dG9uX2Rpc2Nvbm5lY3RlZCIgbXNnaWQ9IjgxNjMwNTQ5MDQyNzgxOTI0MCI+IkJvdMOzbiBwYXJhIHRyYW5zbWl0aXIgKGRlc2NvbmVjdGFkbykiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJtcl9jYXN0X2J1dHRvbl9jb25uZWN0aW5nIiBtc2dpZD0iMjE4NzY0Mjc2NTA5MTg3MzgzNCI+IkJvdMOzbiBwYXJhIHRyYW5zbWl0aXIgKGNvbmVjdGFuZG8pIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibXJfY2FzdF9idXR0b25fY29ubmVjdGVkIiBtc2dpZD0iNTA4ODQyNzc3MTc4ODY0ODA4NSI+IkJvdMOzbiBwYXJhIHRyYW5zbWl0aXIgKGNvbmVjdGFkbykiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJtcl9jaG9vc2VyX3RpdGxlIiBtc2dpZD0iNDE0MzAxOTQxNTQ2MTM1OTkwIj4iVHJhbnNtaXRpciBhIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibXJfY2hvb3Nlcl9zZWFyY2hpbmciIG1zZ2lkPSI2MzQ5OTAwNTc5NTA3NTIxOTU2Ij4iQnVzY2FuZG8gZGlzcG9zaXRpdm9zIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibXJfY29udHJvbGxlcl9kaXNjb25uZWN0IiBtc2dpZD0iMTIyNzI2NDg4OTQxMjk4OTU4MCI+IkRlc2NvbmVjdGFyIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibXJfY29udHJvbGxlcl9zdG9wX2Nhc3RpbmciIG1zZ2lkPSI4ODU3ODg2Nzk0MDg2NTgzMjI2Ij4iRGV0ZW5lciBsYSB0cmFuc21pc2nDs24iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJtcl9jb250cm9sbGVyX2Nsb3NlX2Rlc2NyaXB0aW9uIiBtc2dpZD0iNzMzMzg2MjMxMjQ4MDU4MzI2MCI+IkNlcnJhciI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im1yX2NvbnRyb2xsZXJfcGxheSIgbXNnaWQ9IjY4MzYzNDU2NTk2OTk4NzQ1OCI+IlJlcHJvZHVjaXIiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJtcl9jb250cm9sbGVyX3BhdXNlIiBtc2dpZD0iNTQ1MTg4NDQzNTUxMDkwNTQwNiI+IlBhdXNhciI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im1yX2NvbnRyb2xsZXJfc3RvcCIgbXNnaWQ9IjczNTg3NDY0MTkyMTQyNTEyMyI+IkRldGVuZXIiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJtcl9jb250cm9sbGVyX2V4cGFuZF9ncm91cCIgbXNnaWQ9IjgwNjI0MjcwMjI3NDQyNjY5MDciPiJNb3N0cmFyIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibXJfY29udHJvbGxlcl9jb2xsYXBzZV9ncm91cCIgbXNnaWQ9Ijc5MjQ4MDkwNTY5MDQyNDA5MjYiPiJPY3VsdGFyIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibXJfY29udHJvbGxlcl9hbGJ1bV9hcnQiIG1zZ2lkPSI2NDIyODAxODQzNTQwNTQzNTg1Ij4iSW1hZ2VuIGRlbCDDoWxidW0iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJtcl9jb250cm9sbGVyX3ZvbHVtZV9zbGlkZXIiIG1zZ2lkPSIyMzYxNzg1OTkyMjExODQxNzA5Ij4iQ29udHJvbCBkZXNsaXphbnRlIGRlbCB2b2x1bWVuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibXJfY29udHJvbGxlcl9ub19tZWRpYV9zZWxlY3RlZCIgbXNnaWQ9IjY1NDcxMzAzNjAzNDkxODIzODEiPiJObyBzZSBzZWxlY2Npb27DsyBuaW5nw7puIGNvbnRlbmlkbyBtdWx0aW1lZGlhIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibXJfY29udHJvbGxlcl9ub19pbmZvX2F2YWlsYWJsZSIgbXNnaWQ9IjU1ODU0MTg0NzE3NDExNDI5MjQiPiJTaW4gaW5mb3JtYWNpw7NuIGRpc3BvbmlibGUiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJtcl9jb250cm9sbGVyX2Nhc3Rpbmdfc2NyZWVuIiBtc2dpZD0iNDg2ODQ1Nzk1NzE1MTEyNDg2NyI+IlRyYW5zbWl0aWVuZG8gcGFudGFsbGEiPC9zdHJpbmc+Ci08L3Jlc291cmNlcz4KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL01lZGlhQ29tcG9uZW50cy9yZXMvdmFsdWVzLWVzL3N0cmluZ3MueG1sIGIvcGFja2FnZXMvTWVkaWFDb21wb25lbnRzL3Jlcy92YWx1ZXMtZXMvc3RyaW5ncy54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGZmNDMwMDguLjAwMDAwMDAKLS0tIGEvcGFja2FnZXMvTWVkaWFDb21wb25lbnRzL3Jlcy92YWx1ZXMtZXMvc3RyaW5ncy54bWwKKysrIC9kZXYvbnVsbApAQCAtMSw0MCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPCEtLSAgQ29weXJpZ2h0IDIwMTggVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAotCi0gICAgIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwotICAgICB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCi0gICAgIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotCi0gICAgICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0KLSAgICAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQotICAgICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAotICAgICBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KLSAgICAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAotICAgICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KLSAtLT4KLQotPHJlc291cmNlcyB4bWxuczphbmRyb2lkPSJodHRwOi8vc2NoZW1hcy5hbmRyb2lkLmNvbS9hcGsvcmVzL2FuZHJvaWQiCi0gICAgeG1sbnM6eGxpZmY9InVybjpvYXNpczpuYW1lczp0Yzp4bGlmZjpkb2N1bWVudDoxLjIiPgotICAgIDxzdHJpbmcgbmFtZT0ibXJfc3lzdGVtX3JvdXRlX25hbWUiIG1zZ2lkPSI1NDQxNTI5ODUxNDgxMTc2ODE3Ij4iU2lzdGVtYSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im1yX3VzZXJfcm91dGVfY2F0ZWdvcnlfbmFtZSIgbXNnaWQ9Ijc0OTgxMTI5MDc1MjQ5NzczMTEiPiJEaXNwb3NpdGl2b3MiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJtcl9idXR0b25fY29udGVudF9kZXNjcmlwdGlvbiIgbXNnaWQ9IjM2OTgzNzgwODU5MDE0NjYxMjkiPiJCb3TDs24gZGUgZW52aWFyIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibXJfY2FzdF9idXR0b25fZGlzY29ubmVjdGVkIiBtc2dpZD0iODE2MzA1NDkwNDI3ODE5MjQwIj4iQm90w7NuIGRlIGVudmlhci4gRGVzY29uZWN0YWRvIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibXJfY2FzdF9idXR0b25fY29ubmVjdGluZyIgbXNnaWQ9IjIxODc2NDI3NjUwOTE4NzM4MzQiPiJCb3TDs24gZGUgZW52aWFyLiBDb25lY3RhbmRvIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibXJfY2FzdF9idXR0b25fY29ubmVjdGVkIiBtc2dpZD0iNTA4ODQyNzc3MTc4ODY0ODA4NSI+IkJvdMOzbiBkZSBlbnZpYXIuIENvbmVjdGFkbyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im1yX2Nob29zZXJfdGl0bGUiIG1zZ2lkPSI0MTQzMDE5NDE1NDYxMzU5OTAiPiJFbnZpYXIgYSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im1yX2Nob29zZXJfc2VhcmNoaW5nIiBtc2dpZD0iNjM0OTkwMDU3OTUwNzUyMTk1NiI+IkJ1c2NhbmRvIGRpc3Bvc2l0aXZvcyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im1yX2NvbnRyb2xsZXJfZGlzY29ubmVjdCIgbXNnaWQ9IjEyMjcyNjQ4ODk0MTI5ODk1ODAiPiJEZXNjb25lY3RhciI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im1yX2NvbnRyb2xsZXJfc3RvcF9jYXN0aW5nIiBtc2dpZD0iODg1Nzg4Njc5NDA4NjU4MzIyNiI+IkRldGVuZXIgZW52w61vIGRlIGNvbnRlbmlkbyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im1yX2NvbnRyb2xsZXJfY2xvc2VfZGVzY3JpcHRpb24iIG1zZ2lkPSI3MzMzODYyMzEyNDgwNTgzMjYwIj4iQ2VycmFyIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibXJfY29udHJvbGxlcl9wbGF5IiBtc2dpZD0iNjgzNjM0NTY1OTY5OTg3NDU4Ij4iUmVwcm9kdWNpciI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im1yX2NvbnRyb2xsZXJfcGF1c2UiIG1zZ2lkPSI1NDUxODg0NDM1NTEwOTA1NDA2Ij4iUGF1c2EiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJtcl9jb250cm9sbGVyX3N0b3AiIG1zZ2lkPSI3MzU4NzQ2NDE5MjE0MjUxMjMiPiJEZXRlbmVyIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibXJfY29udHJvbGxlcl9leHBhbmRfZ3JvdXAiIG1zZ2lkPSI4MDYyNDI3MDIyNzQ0MjY2OTA3Ij4iTW9zdHJhciI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im1yX2NvbnRyb2xsZXJfY29sbGFwc2VfZ3JvdXAiIG1zZ2lkPSI3OTI0ODA5MDU2OTA0MjQwOTI2Ij4iT2N1bHRhciI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im1yX2NvbnRyb2xsZXJfYWxidW1fYXJ0IiBtc2dpZD0iNjQyMjgwMTg0MzU0MDU0MzU4NSI+IlBvcnRhZGEgZGVsIMOhbGJ1bSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im1yX2NvbnRyb2xsZXJfdm9sdW1lX3NsaWRlciIgbXNnaWQ9IjIzNjE3ODU5OTIyMTE4NDE3MDkiPiJDb250cm9sIGRlc2xpemFudGUgZGUgdm9sdW1lbiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im1yX2NvbnRyb2xsZXJfbm9fbWVkaWFfc2VsZWN0ZWQiIG1zZ2lkPSI2NTQ3MTMwMzYwMzQ5MTgyMzgxIj4iTm8gc2UgaGEgc2VsZWNjaW9uYWRvIG5pbmfDum4gbWVkaW8iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJtcl9jb250cm9sbGVyX25vX2luZm9fYXZhaWxhYmxlIiBtc2dpZD0iNTU4NTQxODQ3MTc0MTE0MjkyNCI+Ik5vIGhheSBpbmZvcm1hY2nDs24gZGlzcG9uaWJsZSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im1yX2NvbnRyb2xsZXJfY2FzdGluZ19zY3JlZW4iIG1zZ2lkPSI0ODY4NDU3OTU3MTUxMTI0ODY3Ij4iRW52aWFuZG8gcGFudGFsbGEiPC9zdHJpbmc+Ci08L3Jlc291cmNlcz4KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL01lZGlhQ29tcG9uZW50cy9yZXMvdmFsdWVzLWV0L3N0cmluZ3MueG1sIGIvcGFja2FnZXMvTWVkaWFDb21wb25lbnRzL3Jlcy92YWx1ZXMtZXQvc3RyaW5ncy54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQ1MzIzNWIuLjAwMDAwMDAKLS0tIGEvcGFja2FnZXMvTWVkaWFDb21wb25lbnRzL3Jlcy92YWx1ZXMtZXQvc3RyaW5ncy54bWwKKysrIC9kZXYvbnVsbApAQCAtMSw0MCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPCEtLSAgQ29weXJpZ2h0IDIwMTggVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAotCi0gICAgIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwotICAgICB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCi0gICAgIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotCi0gICAgICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0KLSAgICAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQotICAgICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAotICAgICBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KLSAgICAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAotICAgICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KLSAtLT4KLQotPHJlc291cmNlcyB4bWxuczphbmRyb2lkPSJodHRwOi8vc2NoZW1hcy5hbmRyb2lkLmNvbS9hcGsvcmVzL2FuZHJvaWQiCi0gICAgeG1sbnM6eGxpZmY9InVybjpvYXNpczpuYW1lczp0Yzp4bGlmZjpkb2N1bWVudDoxLjIiPgotICAgIDxzdHJpbmcgbmFtZT0ibXJfc3lzdGVtX3JvdXRlX25hbWUiIG1zZ2lkPSI1NDQxNTI5ODUxNDgxMTc2ODE3Ij4iU8O8c3RlZW0iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJtcl91c2VyX3JvdXRlX2NhdGVnb3J5X25hbWUiIG1zZ2lkPSI3NDk4MTEyOTA3NTI0OTc3MzExIj4iU2VhZG1lZCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im1yX2J1dHRvbl9jb250ZW50X2Rlc2NyaXB0aW9uIiBtc2dpZD0iMzY5ODM3ODA4NTkwMTQ2NjEyOSI+IsOcbGVrYW5kZW51cHAiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJtcl9jYXN0X2J1dHRvbl9kaXNjb25uZWN0ZWQiIG1zZ2lkPSI4MTYzMDU0OTA0Mjc4MTkyNDAiPiLDnGxla2FuZGVudXBwLiDDnGhlbmR1cyBvbiBrYXRrZXN0YXR1ZCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im1yX2Nhc3RfYnV0dG9uX2Nvbm5lY3RpbmciIG1zZ2lkPSIyMTg3NjQyNzY1MDkxODczODM0Ij4iw5xsZWthbmRlbnVwcC4gw5xoZW5kYW1pbmUiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJtcl9jYXN0X2J1dHRvbl9jb25uZWN0ZWQiIG1zZ2lkPSI1MDg4NDI3NzcxNzg4NjQ4MDg1Ij4iw5xsZWthbmRlbnVwcC4gw5xoZW5kYXR1ZCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im1yX2Nob29zZXJfdGl0bGUiIG1zZ2lkPSI0MTQzMDE5NDE1NDYxMzU5OTAiPiLDnGxla2FuZG1pbmUgc2VhZG1lc3NlIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibXJfY2hvb3Nlcl9zZWFyY2hpbmciIG1zZ2lkPSI2MzQ5OTAwNTc5NTA3NTIxOTU2Ij4iU2VhZG1ldGUgb3RzaW1pbmUiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJtcl9jb250cm9sbGVyX2Rpc2Nvbm5lY3QiIG1zZ2lkPSIxMjI3MjY0ODg5NDEyOTg5NTgwIj4iS2F0a2VzdGEgw7xoZW5kdXMiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJtcl9jb250cm9sbGVyX3N0b3BfY2FzdGluZyIgbXNnaWQ9Ijg4NTc4ODY3OTQwODY1ODMyMjYiPiJQZWF0YSDDvGxla2FuZG1pbmUiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJtcl9jb250cm9sbGVyX2Nsb3NlX2Rlc2NyaXB0aW9uIiBtc2dpZD0iNzMzMzg2MjMxMjQ4MDU4MzI2MCI+IlN1bGdlbWluZSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im1yX2NvbnRyb2xsZXJfcGxheSIgbXNnaWQ9IjY4MzYzNDU2NTk2OTk4NzQ1OCI+IkVzaXRhbWluZSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im1yX2NvbnRyb2xsZXJfcGF1c2UiIG1zZ2lkPSI1NDUxODg0NDM1NTEwOTA1NDA2Ij4iUGVhdGFtaW5lIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibXJfY29udHJvbGxlcl9zdG9wIiBtc2dpZD0iNzM1ODc0NjQxOTIxNDI1MTIzIj4iUGVhdGEiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJtcl9jb250cm9sbGVyX2V4cGFuZF9ncm91cCIgbXNnaWQ9IjgwNjI0MjcwMjI3NDQyNjY5MDciPiJMYWllbmRhbWluZSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im1yX2NvbnRyb2xsZXJfY29sbGFwc2VfZ3JvdXAiIG1zZ2lkPSI3OTI0ODA5MDU2OTA0MjQwOTI2Ij4iQWhlbmRhbWluZSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im1yX2NvbnRyb2xsZXJfYWxidW1fYXJ0IiBtc2dpZD0iNjQyMjgwMTg0MzU0MDU0MzU4NSI+IkFsYnVtaSBrdWp1bmR1cyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im1yX2NvbnRyb2xsZXJfdm9sdW1lX3NsaWRlciIgbXNnaWQ9IjIzNjE3ODU5OTIyMTE4NDE3MDkiPiJIZWxpdHVnZXZ1c2UgbGl1Z3VyIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibXJfY29udHJvbGxlcl9ub19tZWRpYV9zZWxlY3RlZCIgbXNnaWQ9IjY1NDcxMzAzNjAzNDkxODIzODEiPiJNZWVkaWF0IHBvbGUgdmFsaXR1ZCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im1yX2NvbnRyb2xsZXJfbm9faW5mb19hdmFpbGFibGUiIG1zZ2lkPSI1NTg1NDE4NDcxNzQxMTQyOTI0Ij4iVGVhdmUgcHV1ZHViIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibXJfY29udHJvbGxlcl9jYXN0aW5nX3NjcmVlbiIgbXNnaWQ9IjQ4Njg0NTc5NTcxNTExMjQ4NjciPiJFa3JhYW5pa3V2YSDDvGxla2FuZG1pbmUiPC9zdHJpbmc+Ci08L3Jlc291cmNlcz4KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL01lZGlhQ29tcG9uZW50cy9yZXMvdmFsdWVzLWV1L3N0cmluZ3MueG1sIGIvcGFja2FnZXMvTWVkaWFDb21wb25lbnRzL3Jlcy92YWx1ZXMtZXUvc3RyaW5ncy54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGRiYTE5ZTQuLjAwMDAwMDAKLS0tIGEvcGFja2FnZXMvTWVkaWFDb21wb25lbnRzL3Jlcy92YWx1ZXMtZXUvc3RyaW5ncy54bWwKKysrIC9kZXYvbnVsbApAQCAtMSw0MCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPCEtLSAgQ29weXJpZ2h0IDIwMTggVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAotCi0gICAgIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwotICAgICB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCi0gICAgIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotCi0gICAgICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0KLSAgICAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQotICAgICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAotICAgICBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KLSAgICAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAotICAgICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KLSAtLT4KLQotPHJlc291cmNlcyB4bWxuczphbmRyb2lkPSJodHRwOi8vc2NoZW1hcy5hbmRyb2lkLmNvbS9hcGsvcmVzL2FuZHJvaWQiCi0gICAgeG1sbnM6eGxpZmY9InVybjpvYXNpczpuYW1lczp0Yzp4bGlmZjpkb2N1bWVudDoxLjIiPgotICAgIDxzdHJpbmcgbmFtZT0ibXJfc3lzdGVtX3JvdXRlX25hbWUiIG1zZ2lkPSI1NDQxNTI5ODUxNDgxMTc2ODE3Ij4iU2lzdGVtYSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im1yX3VzZXJfcm91dGVfY2F0ZWdvcnlfbmFtZSIgbXNnaWQ9Ijc0OTgxMTI5MDc1MjQ5NzczMTEiPiJHYWlsdWFrIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibXJfYnV0dG9uX2NvbnRlbnRfZGVzY3JpcHRpb24iIG1zZ2lkPSIzNjk4Mzc4MDg1OTAxNDY2MTI5Ij4iSWdvcnJpIGJvdG9pYSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im1yX2Nhc3RfYnV0dG9uX2Rpc2Nvbm5lY3RlZCIgbXNnaWQ9IjgxNjMwNTQ5MDQyNzgxOTI0MCI+Iklnb3J0emVrbyBib3RvaWEuIERlc2tvbmVrdGF0dXRhIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibXJfY2FzdF9idXR0b25fY29ubmVjdGluZyIgbXNnaWQ9IjIxODc2NDI3NjUwOTE4NzM4MzQiPiJJZ29ydHpla28gYm90b2lhLiBLb25la3RhdHplbiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im1yX2Nhc3RfYnV0dG9uX2Nvbm5lY3RlZCIgbXNnaWQ9IjUwODg0Mjc3NzE3ODg2NDgwODUiPiJJZ29ydHpla28gYm90b2lhLiBLb25la3RhdHV0YSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im1yX2Nob29zZXJfdGl0bGUiIG1zZ2lkPSI0MTQzMDE5NDE1NDYxMzU5OTAiPiJJZ29ycmkgaG9uYToiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJtcl9jaG9vc2VyX3NlYXJjaGluZyIgbXNnaWQ9IjYzNDk5MDA1Nzk1MDc1MjE5NTYiPiJHYWlsdWFrIGJpbGF0emVuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibXJfY29udHJvbGxlcl9kaXNjb25uZWN0IiBtc2dpZD0iMTIyNzI2NDg4OTQxMjk4OTU4MCI+IkRlc2tvbmVrdGF0dSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im1yX2NvbnRyb2xsZXJfc3RvcF9jYXN0aW5nIiBtc2dpZD0iODg1Nzg4Njc5NDA4NjU4MzIyNiI+IlV0emkgaWdvcnR6ZWFyaSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im1yX2NvbnRyb2xsZXJfY2xvc2VfZGVzY3JpcHRpb24iIG1zZ2lkPSI3MzMzODYyMzEyNDgwNTgzMjYwIj4iSXR4aSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im1yX2NvbnRyb2xsZXJfcGxheSIgbXNnaWQ9IjY4MzYzNDU2NTk2OTk4NzQ1OCI+IkVycmVwcm9kdXppdHUiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJtcl9jb250cm9sbGVyX3BhdXNlIiBtc2dpZD0iNTQ1MTg4NDQzNTUxMDkwNTQwNiI+IlBhdXNhdHUiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJtcl9jb250cm9sbGVyX3N0b3AiIG1zZ2lkPSI3MzU4NzQ2NDE5MjE0MjUxMjMiPiJHZWxkaXR1Ijwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibXJfY29udHJvbGxlcl9leHBhbmRfZ3JvdXAiIG1zZ2lkPSI4MDYyNDI3MDIyNzQ0MjY2OTA3Ij4iWmFiYWxkdSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im1yX2NvbnRyb2xsZXJfY29sbGFwc2VfZ3JvdXAiIG1zZ2lkPSI3OTI0ODA5MDU2OTA0MjQwOTI2Ij4iVG9sZXN0dSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im1yX2NvbnRyb2xsZXJfYWxidW1fYXJ0IiBtc2dpZD0iNjQyMjgwMTg0MzU0MDU0MzU4NSI+IkFsYnVtYXJlbiBhemFsYSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im1yX2NvbnRyb2xsZXJfdm9sdW1lX3NsaWRlciIgbXNnaWQ9IjIzNjE3ODU5OTIyMTE4NDE3MDkiPiJCb2x1bWVuYXJlbiBncmFkdWF0emFpbGVhIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibXJfY29udHJvbGxlcl9ub19tZWRpYV9zZWxlY3RlZCIgbXNnaWQ9IjY1NDcxMzAzNjAzNDkxODIzODEiPiJFeiBkYSBoYXV0YXR1IG11bHRpbWVkaWEtZWR1a2lyaWsiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJtcl9jb250cm9sbGVyX25vX2luZm9fYXZhaWxhYmxlIiBtc2dpZD0iNTU4NTQxODQ3MTc0MTE0MjkyNCI+IkV6IGRhZ28gaW5mb3JtYXppb3JpayI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im1yX2NvbnRyb2xsZXJfY2FzdGluZ19zY3JlZW4iIG1zZ2lkPSI0ODY4NDU3OTU3MTUxMTI0ODY3Ij4iUGFudGFpbGEgaWdvcnR6ZW4iPC9zdHJpbmc+Ci08L3Jlc291cmNlcz4KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL01lZGlhQ29tcG9uZW50cy9yZXMvdmFsdWVzLWZhL3N0cmluZ3MueG1sIGIvcGFja2FnZXMvTWVkaWFDb21wb25lbnRzL3Jlcy92YWx1ZXMtZmEvc3RyaW5ncy54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDRjNmM3NzkuLjAwMDAwMDAKLS0tIGEvcGFja2FnZXMvTWVkaWFDb21wb25lbnRzL3Jlcy92YWx1ZXMtZmEvc3RyaW5ncy54bWwKKysrIC9kZXYvbnVsbApAQCAtMSw0MCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPCEtLSAgQ29weXJpZ2h0IDIwMTggVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAotCi0gICAgIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwotICAgICB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCi0gICAgIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotCi0gICAgICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0KLSAgICAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQotICAgICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAotICAgICBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KLSAgICAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAotICAgICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KLSAtLT4KLQotPHJlc291cmNlcyB4bWxuczphbmRyb2lkPSJodHRwOi8vc2NoZW1hcy5hbmRyb2lkLmNvbS9hcGsvcmVzL2FuZHJvaWQiCi0gICAgeG1sbnM6eGxpZmY9InVybjpvYXNpczpuYW1lczp0Yzp4bGlmZjpkb2N1bWVudDoxLjIiPgotICAgIDxzdHJpbmcgbmFtZT0ibXJfc3lzdGVtX3JvdXRlX25hbWUiIG1zZ2lkPSI1NDQxNTI5ODUxNDgxMTc2ODE3Ij4i2LPbjNiz2KrZhSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im1yX3VzZXJfcm91dGVfY2F0ZWdvcnlfbmFtZSIgbXNnaWQ9Ijc0OTgxMTI5MDc1MjQ5NzczMTEiPiLYr9iz2Krar9in2YfigIzZh9inIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibXJfYnV0dG9uX2NvbnRlbnRfZGVzY3JpcHRpb24iIG1zZ2lkPSIzNjk4Mzc4MDg1OTAxNDY2MTI5Ij4i2K/aqdmF2Ycg2KfYsdiz2KfZhCDZhdit2KrZiNinIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibXJfY2FzdF9idXR0b25fZGlzY29ubmVjdGVkIiBtc2dpZD0iODE2MzA1NDkwNDI3ODE5MjQwIj4i2K/aqdmF2Ycg2YHYsdiz2KrYp9iv2YYuINin2LHYqtio2KfYtyDZgti32Lkg2LTYryI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im1yX2Nhc3RfYnV0dG9uX2Nvbm5lY3RpbmciIG1zZ2lkPSIyMTg3NjQyNzY1MDkxODczODM0Ij4i2K/aqdmF2Ycg2YHYsdiz2KrYp9iv2YYuINiv2LHYrdin2YQg2YXYsdiq2KjYt+KAjNiz2KfYstuMIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibXJfY2FzdF9idXR0b25fY29ubmVjdGVkIiBtc2dpZD0iNTA4ODQyNzc3MTc4ODY0ODA4NSI+Itiv2qnZhdmHINmB2LHYs9iq2KfYr9mGLiDZhdix2KrYqNi3INi02K8iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJtcl9jaG9vc2VyX3RpdGxlIiBtc2dpZD0iNDE0MzAxOTQxNTQ2MTM1OTkwIj4i2KfYsdiz2KfZhCDZhdit2KrZiNinINio2YciPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJtcl9jaG9vc2VyX3NlYXJjaGluZyIgbXNnaWQ9IjYzNDk5MDA1Nzk1MDc1MjE5NTYiPiLZvtuM2K/YpyDaqdix2K/ZhiDYr9iz2Krar9in2YfigIzZh9inIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibXJfY29udHJvbGxlcl9kaXNjb25uZWN0IiBtc2dpZD0iMTIyNzI2NDg4OTQxMjk4OTU4MCI+ItmC2LfYuSDYp9ix2KrYqNin2LciPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJtcl9jb250cm9sbGVyX3N0b3BfY2FzdGluZyIgbXNnaWQ9Ijg4NTc4ODY3OTQwODY1ODMyMjYiPiLYqtmI2YLZgSDYp9ix2LPYp9mEINmF2K3YqtmI2KciPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJtcl9jb250cm9sbGVyX2Nsb3NlX2Rlc2NyaXB0aW9uIiBtc2dpZD0iNzMzMzg2MjMxMjQ4MDU4MzI2MCI+Itio2LPYqtmGIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibXJfY29udHJvbGxlcl9wbGF5IiBtc2dpZD0iNjgzNjM0NTY1OTY5OTg3NDU4Ij4i2b7Yrti0Ijwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibXJfY29udHJvbGxlcl9wYXVzZSIgbXNnaWQ9IjU0NTE4ODQ0MzU1MTA5MDU0MDYiPiLZhdqp2KsiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJtcl9jb250cm9sbGVyX3N0b3AiIG1zZ2lkPSI3MzU4NzQ2NDE5MjE0MjUxMjMiPiLYqtmI2YLZgSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im1yX2NvbnRyb2xsZXJfZXhwYW5kX2dyb3VwIiBtc2dpZD0iODA2MjQyNzAyMjc0NDI2NjkwNyI+Itio2LLYsdqvINqp2LHYr9mGIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibXJfY29udHJvbGxlcl9jb2xsYXBzZV9ncm91cCIgbXNnaWQ9Ijc5MjQ4MDkwNTY5MDQyNDA5MjYiPiLaqdmI2obaqSDaqdix2K/ZhiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im1yX2NvbnRyb2xsZXJfYWxidW1fYXJ0IiBtc2dpZD0iNjQyMjgwMTg0MzU0MDU0MzU4NSI+Iti52qnYsyDYsdmI24wg2KzZhNivINii2YTYqNmI2YUiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJtcl9jb250cm9sbGVyX3ZvbHVtZV9zbGlkZXIiIG1zZ2lkPSIyMzYxNzg1OTkyMjExODQxNzA5Ij4i2YTYutiy2YbYr9mHINmF24zYstin2YYg2LXYr9inIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibXJfY29udHJvbGxlcl9ub19tZWRpYV9zZWxlY3RlZCIgbXNnaWQ9IjY1NDcxMzAzNjAzNDkxODIzODEiPiLYsdiz2KfZhtmHINin2YbYqtiu2KfYqCDZhti02K/ZhyDYp9iz2KoiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJtcl9jb250cm9sbGVyX25vX2luZm9fYXZhaWxhYmxlIiBtc2dpZD0iNTU4NTQxODQ3MTc0MTE0MjkyNCI+Itin2LfZhNin2LnYp9iqINiv2LEg2K/Ys9iq2LHYsyDZhtuM2LPYqiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im1yX2NvbnRyb2xsZXJfY2FzdGluZ19zY3JlZW4iIG1zZ2lkPSI0ODY4NDU3OTU3MTUxMTI0ODY3Ij4i2K/Ysdit2KfZhCDZgdix2LPYqtin2K/ZhiDYtdmB2K3ZhyI8L3N0cmluZz4KLTwvcmVzb3VyY2VzPgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvTWVkaWFDb21wb25lbnRzL3Jlcy92YWx1ZXMtZmkvc3RyaW5ncy54bWwgYi9wYWNrYWdlcy9NZWRpYUNvbXBvbmVudHMvcmVzL3ZhbHVlcy1maS9zdHJpbmdzLnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDY4MzQzNS4uMDAwMDAwMAotLS0gYS9wYWNrYWdlcy9NZWRpYUNvbXBvbmVudHMvcmVzL3ZhbHVlcy1maS9zdHJpbmdzLnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDQwICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08IS0tICBDb3B5cmlnaHQgMjAxOCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0Ci0KLSAgICAgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7Ci0gICAgIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KLSAgICAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0KLSAgICAgICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLQotICAgICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCi0gICAgIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCi0gICAgIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgotICAgICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCi0gICAgIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgotIC0tPgotCi08cmVzb3VyY2VzIHhtbG5zOmFuZHJvaWQ9Imh0dHA6Ly9zY2hlbWFzLmFuZHJvaWQuY29tL2Fway9yZXMvYW5kcm9pZCIKLSAgICB4bWxuczp4bGlmZj0idXJuOm9hc2lzOm5hbWVzOnRjOnhsaWZmOmRvY3VtZW50OjEuMiI+Ci0gICAgPHN0cmluZyBuYW1lPSJtcl9zeXN0ZW1fcm91dGVfbmFtZSIgbXNnaWQ9IjU0NDE1Mjk4NTE0ODExNzY4MTciPiJKw6RyamVzdGVsbcOkIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibXJfdXNlcl9yb3V0ZV9jYXRlZ29yeV9uYW1lIiBtc2dpZD0iNzQ5ODExMjkwNzUyNDk3NzMxMSI+IkxhaXR0ZWV0Ijwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibXJfYnV0dG9uX2NvbnRlbnRfZGVzY3JpcHRpb24iIG1zZ2lkPSIzNjk4Mzc4MDg1OTAxNDY2MTI5Ij4iQ2FzdC1wYWluaWtlIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibXJfY2FzdF9idXR0b25fZGlzY29ubmVjdGVkIiBtc2dpZD0iODE2MzA1NDkwNDI3ODE5MjQwIj4iQ2FzdC1wYWluaWtlLiBZaHRleXMga2F0a2Fpc3R1Ijwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibXJfY2FzdF9idXR0b25fY29ubmVjdGluZyIgbXNnaWQ9IjIxODc2NDI3NjUwOTE4NzM4MzQiPiJDYXN0LXBhaW5pa2UuIFloZGlzdGV0w6TDpG4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJtcl9jYXN0X2J1dHRvbl9jb25uZWN0ZWQiIG1zZ2lkPSI1MDg4NDI3NzcxNzg4NjQ4MDg1Ij4iQ2FzdC1wYWluaWtlLiBZaGRpc3RldHR5Ijwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibXJfY2hvb3Nlcl90aXRsZSIgbXNnaWQ9IjQxNDMwMTk0MTU0NjEzNTk5MCI+IlN1b3JhdG9pc3RvbiBrb2hkZSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im1yX2Nob29zZXJfc2VhcmNoaW5nIiBtc2dpZD0iNjM0OTkwMDU3OTUwNzUyMTk1NiI+IkV0c2l0w6TDpG4gbGFpdHRlaXRhIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibXJfY29udHJvbGxlcl9kaXNjb25uZWN0IiBtc2dpZD0iMTIyNzI2NDg4OTQxMjk4OTU4MCI+IkthdGthaXNlIHlodGV5cyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im1yX2NvbnRyb2xsZXJfc3RvcF9jYXN0aW5nIiBtc2dpZD0iODg1Nzg4Njc5NDA4NjU4MzIyNiI+IkxvcGV0YSBzdW9yYXRvaXN0byI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im1yX2NvbnRyb2xsZXJfY2xvc2VfZGVzY3JpcHRpb24iIG1zZ2lkPSI3MzMzODYyMzEyNDgwNTgzMjYwIj4iU3VsamUiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJtcl9jb250cm9sbGVyX3BsYXkiIG1zZ2lkPSI2ODM2MzQ1NjU5Njk5ODc0NTgiPiJUb2lzdGEiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJtcl9jb250cm9sbGVyX3BhdXNlIiBtc2dpZD0iNTQ1MTg4NDQzNTUxMDkwNTQwNiI+Iktlc2tleXTDpCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im1yX2NvbnRyb2xsZXJfc3RvcCIgbXNnaWQ9IjczNTg3NDY0MTkyMTQyNTEyMyI+IlB5c8OkeXTDpCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im1yX2NvbnRyb2xsZXJfZXhwYW5kX2dyb3VwIiBtc2dpZD0iODA2MjQyNzAyMjc0NDI2NjkwNyI+IkxhYWplbm5hIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibXJfY29udHJvbGxlcl9jb2xsYXBzZV9ncm91cCIgbXNnaWQ9Ijc5MjQ4MDkwNTY5MDQyNDA5MjYiPiJUaWl2aXN0w6QiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJtcl9jb250cm9sbGVyX2FsYnVtX2FydCIgbXNnaWQ9IjY0MjI4MDE4NDM1NDA1NDM1ODUiPiJBbGJ1bWluIGthbnNpa3V2YSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im1yX2NvbnRyb2xsZXJfdm9sdW1lX3NsaWRlciIgbXNnaWQ9IjIzNjE3ODU5OTIyMTE4NDE3MDkiPiLDhMOkbmVudm9pbWFra3V1ZGVuIGxpdWt1c8Okw6RkaW4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJtcl9jb250cm9sbGVyX25vX21lZGlhX3NlbGVjdGVkIiBtc2dpZD0iNjU0NzEzMDM2MDM0OTE4MjM4MSI+IkVpIHZhbGl0dHVhIG1lZGlhYS4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJtcl9jb250cm9sbGVyX25vX2luZm9fYXZhaWxhYmxlIiBtc2dpZD0iNTU4NTQxODQ3MTc0MTE0MjkyNCI+IlRpZXRvamEgZWkgb2xlIHNhYXRhdmlsbGEiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJtcl9jb250cm9sbGVyX2Nhc3Rpbmdfc2NyZWVuIiBtc2dpZD0iNDg2ODQ1Nzk1NzE1MTEyNDg2NyI+IlN1b3JhdG9pc3RldGFhbiBuw6R5dHTDtsOkIjwvc3RyaW5nPgotPC9yZXNvdXJjZXM+CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9NZWRpYUNvbXBvbmVudHMvcmVzL3ZhbHVlcy1mci1yQ0Evc3RyaW5ncy54bWwgYi9wYWNrYWdlcy9NZWRpYUNvbXBvbmVudHMvcmVzL3ZhbHVlcy1mci1yQ0Evc3RyaW5ncy54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGM0Zjk4NGIuLjAwMDAwMDAKLS0tIGEvcGFja2FnZXMvTWVkaWFDb21wb25lbnRzL3Jlcy92YWx1ZXMtZnItckNBL3N0cmluZ3MueG1sCisrKyAvZGV2L251bGwKQEAgLTEsNDAgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTwhLS0gIENvcHlyaWdodCAyMDE4IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKLQotICAgICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKLSAgICAgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgotICAgICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLQotICAgICAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotCi0gICAgIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKLSAgICAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKLSAgICAgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCi0gICAgIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKLSAgICAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCi0gLS0+Ci0KLTxyZXNvdXJjZXMgeG1sbnM6YW5kcm9pZD0iaHR0cDovL3NjaGVtYXMuYW5kcm9pZC5jb20vYXBrL3Jlcy9hbmRyb2lkIgotICAgIHhtbG5zOnhsaWZmPSJ1cm46b2FzaXM6bmFtZXM6dGM6eGxpZmY6ZG9jdW1lbnQ6MS4yIj4KLSAgICA8c3RyaW5nIG5hbWU9Im1yX3N5c3RlbV9yb3V0ZV9uYW1lIiBtc2dpZD0iNTQ0MTUyOTg1MTQ4MTE3NjgxNyI+IlN5c3TDqG1lIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibXJfdXNlcl9yb3V0ZV9jYXRlZ29yeV9uYW1lIiBtc2dpZD0iNzQ5ODExMjkwNzUyNDk3NzMxMSI+IkFwcGFyZWlscyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im1yX2J1dHRvbl9jb250ZW50X2Rlc2NyaXB0aW9uIiBtc2dpZD0iMzY5ODM3ODA4NTkwMTQ2NjEyOSI+IkJvdXRvbiBEaWZmdXNlciI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im1yX2Nhc3RfYnV0dG9uX2Rpc2Nvbm5lY3RlZCIgbXNnaWQ9IjgxNjMwNTQ5MDQyNzgxOTI0MCI+IkJvdXRvbiBEaWZmdXNlci4gRMOpY29ubmVjdMOpIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibXJfY2FzdF9idXR0b25fY29ubmVjdGluZyIgbXNnaWQ9IjIxODc2NDI3NjUwOTE4NzM4MzQiPiJCb3V0b24gRGlmZnVzZXIuIENvbm5leGlvbiBlbiBjb3Vyc+KApiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im1yX2Nhc3RfYnV0dG9uX2Nvbm5lY3RlZCIgbXNnaWQ9IjUwODg0Mjc3NzE3ODg2NDgwODUiPiJCb3V0b24gRGlmZnVzZXIuIENvbm5lY3TDqSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im1yX2Nob29zZXJfdGl0bGUiIG1zZ2lkPSI0MTQzMDE5NDE1NDYxMzU5OTAiPiJEaWZmdXNlciBzdXIiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJtcl9jaG9vc2VyX3NlYXJjaGluZyIgbXNnaWQ9IjYzNDk5MDA1Nzk1MDc1MjE5NTYiPiJSZWNoZXJjaGUgZFwnYXBwYXJlaWxzIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibXJfY29udHJvbGxlcl9kaXNjb25uZWN0IiBtc2dpZD0iMTIyNzI2NDg4OTQxMjk4OTU4MCI+IlNlIGTDqWNvbm5lY3RlciI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im1yX2NvbnRyb2xsZXJfc3RvcF9jYXN0aW5nIiBtc2dpZD0iODg1Nzg4Njc5NDA4NjU4MzIyNiI+IkFycsOqdGVyIGxhIGRpZmZ1c2lvbiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im1yX2NvbnRyb2xsZXJfY2xvc2VfZGVzY3JpcHRpb24iIG1zZ2lkPSI3MzMzODYyMzEyNDgwNTgzMjYwIj4iRmVybWVyIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibXJfY29udHJvbGxlcl9wbGF5IiBtc2dpZD0iNjgzNjM0NTY1OTY5OTg3NDU4Ij4iTGlyZSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im1yX2NvbnRyb2xsZXJfcGF1c2UiIG1zZ2lkPSI1NDUxODg0NDM1NTEwOTA1NDA2Ij4iSW50ZXJyb21wcmUiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJtcl9jb250cm9sbGVyX3N0b3AiIG1zZ2lkPSI3MzU4NzQ2NDE5MjE0MjUxMjMiPiJBcnLDqnRlciI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im1yX2NvbnRyb2xsZXJfZXhwYW5kX2dyb3VwIiBtc2dpZD0iODA2MjQyNzAyMjc0NDI2NjkwNyI+IkTDqXZlbG9wcGVyIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibXJfY29udHJvbGxlcl9jb2xsYXBzZV9ncm91cCIgbXNnaWQ9Ijc5MjQ4MDkwNTY5MDQyNDA5MjYiPiJSw6lkdWlyZSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im1yX2NvbnRyb2xsZXJfYWxidW1fYXJ0IiBtc2dpZD0iNjQyMjgwMTg0MzU0MDU0MzU4NSI+IkltYWdlIGRlIGxcJ2FsYnVtIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibXJfY29udHJvbGxlcl92b2x1bWVfc2xpZGVyIiBtc2dpZD0iMjM2MTc4NTk5MjIxMTg0MTcwOSI+IkN1cnNldXIgZGUgcsOpZ2xhZ2UgZHUgdm9sdW1lIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibXJfY29udHJvbGxlcl9ub19tZWRpYV9zZWxlY3RlZCIgbXNnaWQ9IjY1NDcxMzAzNjAzNDkxODIzODEiPiJBdWN1biBtw6lkaWEgc8OpbGVjdGlvbm7DqSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im1yX2NvbnRyb2xsZXJfbm9faW5mb19hdmFpbGFibGUiIG1zZ2lkPSI1NTg1NDE4NDcxNzQxMTQyOTI0Ij4iQXVjdW5lIGluZm9ybWF0aW9uIGRpc3BvbmlibGUiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJtcl9jb250cm9sbGVyX2Nhc3Rpbmdfc2NyZWVuIiBtc2dpZD0iNDg2ODQ1Nzk1NzE1MTEyNDg2NyI+IkRpZmZ1c2lvbiBkZSBsXCfDqWNyYW4gZW4gY291cnMiPC9zdHJpbmc+Ci08L3Jlc291cmNlcz4KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL01lZGlhQ29tcG9uZW50cy9yZXMvdmFsdWVzLWZyL3N0cmluZ3MueG1sIGIvcGFja2FnZXMvTWVkaWFDb21wb25lbnRzL3Jlcy92YWx1ZXMtZnIvc3RyaW5ncy54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDEyYzMxMmYuLjAwMDAwMDAKLS0tIGEvcGFja2FnZXMvTWVkaWFDb21wb25lbnRzL3Jlcy92YWx1ZXMtZnIvc3RyaW5ncy54bWwKKysrIC9kZXYvbnVsbApAQCAtMSw0MCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPCEtLSAgQ29weXJpZ2h0IDIwMTggVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAotCi0gICAgIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwotICAgICB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCi0gICAgIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotCi0gICAgICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0KLSAgICAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQotICAgICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAotICAgICBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KLSAgICAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAotICAgICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KLSAtLT4KLQotPHJlc291cmNlcyB4bWxuczphbmRyb2lkPSJodHRwOi8vc2NoZW1hcy5hbmRyb2lkLmNvbS9hcGsvcmVzL2FuZHJvaWQiCi0gICAgeG1sbnM6eGxpZmY9InVybjpvYXNpczpuYW1lczp0Yzp4bGlmZjpkb2N1bWVudDoxLjIiPgotICAgIDxzdHJpbmcgbmFtZT0ibXJfc3lzdGVtX3JvdXRlX25hbWUiIG1zZ2lkPSI1NDQxNTI5ODUxNDgxMTc2ODE3Ij4iU3lzdMOobWUiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJtcl91c2VyX3JvdXRlX2NhdGVnb3J5X25hbWUiIG1zZ2lkPSI3NDk4MTEyOTA3NTI0OTc3MzExIj4iQXBwYXJlaWxzIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibXJfYnV0dG9uX2NvbnRlbnRfZGVzY3JpcHRpb24iIG1zZ2lkPSIzNjk4Mzc4MDg1OTAxNDY2MTI5Ij4iSWPDtG5lIENhc3QiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJtcl9jYXN0X2J1dHRvbl9kaXNjb25uZWN0ZWQiIG1zZ2lkPSI4MTYzMDU0OTA0Mjc4MTkyNDAiPiJJY8O0bmUgQ2FzdC4gRMOpY29ubmVjdMOpIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibXJfY2FzdF9idXR0b25fY29ubmVjdGluZyIgbXNnaWQ9IjIxODc2NDI3NjUwOTE4NzM4MzQiPiJJY8O0bmUgQ2FzdC4gQ29ubmV4aW9u4oCmIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibXJfY2FzdF9idXR0b25fY29ubmVjdGVkIiBtc2dpZD0iNTA4ODQyNzc3MTc4ODY0ODA4NSI+Ikljw7RuZSBDYXN0LiBDb25uZWN0w6kiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJtcl9jaG9vc2VyX3RpdGxlIiBtc2dpZD0iNDE0MzAxOTQxNTQ2MTM1OTkwIj4iQ2FzdGVyIHN1ciI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im1yX2Nob29zZXJfc2VhcmNoaW5nIiBtc2dpZD0iNjM0OTkwMDU3OTUwNzUyMTk1NiI+IlJlY2hlcmNoZSBkXCdhcHBhcmVpbHPigKYiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJtcl9jb250cm9sbGVyX2Rpc2Nvbm5lY3QiIG1zZ2lkPSIxMjI3MjY0ODg5NDEyOTg5NTgwIj4iRMOpY29ubmVjdGVyIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibXJfY29udHJvbGxlcl9zdG9wX2Nhc3RpbmciIG1zZ2lkPSI4ODU3ODg2Nzk0MDg2NTgzMjI2Ij4iQXJyw6p0ZXIgbGEgZGlmZnVzaW9uIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibXJfY29udHJvbGxlcl9jbG9zZV9kZXNjcmlwdGlvbiIgbXNnaWQ9IjczMzM4NjIzMTI0ODA1ODMyNjAiPiJGZXJtZXIiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJtcl9jb250cm9sbGVyX3BsYXkiIG1zZ2lkPSI2ODM2MzQ1NjU5Njk5ODc0NTgiPiJMZWN0dXJlIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibXJfY29udHJvbGxlcl9wYXVzZSIgbXNnaWQ9IjU0NTE4ODQ0MzU1MTA5MDU0MDYiPiJQYXVzZSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im1yX2NvbnRyb2xsZXJfc3RvcCIgbXNnaWQ9IjczNTg3NDY0MTkyMTQyNTEyMyI+IkFycsOqdGVyIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibXJfY29udHJvbGxlcl9leHBhbmRfZ3JvdXAiIG1zZ2lkPSI4MDYyNDI3MDIyNzQ0MjY2OTA3Ij4iRMOpdmVsb3BwZXIiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJtcl9jb250cm9sbGVyX2NvbGxhcHNlX2dyb3VwIiBtc2dpZD0iNzkyNDgwOTA1NjkwNDI0MDkyNiI+IlLDqWR1aXJlIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibXJfY29udHJvbGxlcl9hbGJ1bV9hcnQiIG1zZ2lkPSI2NDIyODAxODQzNTQwNTQzNTg1Ij4iSW1hZ2UgZGUgbFwnYWxidW0iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJtcl9jb250cm9sbGVyX3ZvbHVtZV9zbGlkZXIiIG1zZ2lkPSIyMzYxNzg1OTkyMjExODQxNzA5Ij4iQ3Vyc2V1ciBkZSB2b2x1bWUiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJtcl9jb250cm9sbGVyX25vX21lZGlhX3NlbGVjdGVkIiBtc2dpZD0iNjU0NzEzMDM2MDM0OTE4MjM4MSI+IkF1Y3VuIG3DqWRpYSBzw6lsZWN0aW9ubsOpIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibXJfY29udHJvbGxlcl9ub19pbmZvX2F2YWlsYWJsZSIgbXNnaWQ9IjU1ODU0MTg0NzE3NDExNDI5MjQiPiJBdWN1bmUgaW5mb3JtYXRpb24gZGlzcG9uaWJsZSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im1yX2NvbnRyb2xsZXJfY2FzdGluZ19zY3JlZW4iIG1zZ2lkPSI0ODY4NDU3OTU3MTUxMTI0ODY3Ij4iRGlmZnVzaW9uIGRlIGxcJ8OpY3JhbiBlbiBjb3Vyc+KApiI8L3N0cmluZz4KLTwvcmVzb3VyY2VzPgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvTWVkaWFDb21wb25lbnRzL3Jlcy92YWx1ZXMtZ2wvc3RyaW5ncy54bWwgYi9wYWNrYWdlcy9NZWRpYUNvbXBvbmVudHMvcmVzL3ZhbHVlcy1nbC9zdHJpbmdzLnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMWIyYzM1NC4uMDAwMDAwMAotLS0gYS9wYWNrYWdlcy9NZWRpYUNvbXBvbmVudHMvcmVzL3ZhbHVlcy1nbC9zdHJpbmdzLnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDQwICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08IS0tICBDb3B5cmlnaHQgMjAxOCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0Ci0KLSAgICAgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7Ci0gICAgIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KLSAgICAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0KLSAgICAgICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLQotICAgICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCi0gICAgIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCi0gICAgIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgotICAgICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCi0gICAgIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgotIC0tPgotCi08cmVzb3VyY2VzIHhtbG5zOmFuZHJvaWQ9Imh0dHA6Ly9zY2hlbWFzLmFuZHJvaWQuY29tL2Fway9yZXMvYW5kcm9pZCIKLSAgICB4bWxuczp4bGlmZj0idXJuOm9hc2lzOm5hbWVzOnRjOnhsaWZmOmRvY3VtZW50OjEuMiI+Ci0gICAgPHN0cmluZyBuYW1lPSJtcl9zeXN0ZW1fcm91dGVfbmFtZSIgbXNnaWQ9IjU0NDE1Mjk4NTE0ODExNzY4MTciPiJTaXN0ZW1hIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibXJfdXNlcl9yb3V0ZV9jYXRlZ29yeV9uYW1lIiBtc2dpZD0iNzQ5ODExMjkwNzUyNDk3NzMxMSI+IkRpc3Bvc2l0aXZvcyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im1yX2J1dHRvbl9jb250ZW50X2Rlc2NyaXB0aW9uIiBtc2dpZD0iMzY5ODM3ODA4NTkwMTQ2NjEyOSI+IkJvdMOzbiBkZSBlbWl0aXIiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJtcl9jYXN0X2J1dHRvbl9kaXNjb25uZWN0ZWQiIG1zZ2lkPSI4MTYzMDU0OTA0Mjc4MTkyNDAiPiJCb3TDs24gZGUgZW1pdGlyLiBEZXNjb25lY3RhZG8iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJtcl9jYXN0X2J1dHRvbl9jb25uZWN0aW5nIiBtc2dpZD0iMjE4NzY0Mjc2NTA5MTg3MzgzNCI+IkJvdMOzbiBkZSBlbWl0aXIuIENvbmVjdGFuZG8iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJtcl9jYXN0X2J1dHRvbl9jb25uZWN0ZWQiIG1zZ2lkPSI1MDg4NDI3NzcxNzg4NjQ4MDg1Ij4iQm90w7NuIGRlIGVtaXRpci4gQ29uZWN0YWRvIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibXJfY2hvb3Nlcl90aXRsZSIgbXNnaWQ9IjQxNDMwMTk0MTU0NjEzNTk5MCI+IkVtaXRpciBhIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibXJfY2hvb3Nlcl9zZWFyY2hpbmciIG1zZ2lkPSI2MzQ5OTAwNTc5NTA3NTIxOTU2Ij4iQnVzY2FuZG8gZGlzcG9zaXRpdm9zIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibXJfY29udHJvbGxlcl9kaXNjb25uZWN0IiBtc2dpZD0iMTIyNzI2NDg4OTQxMjk4OTU4MCI+IkRlc2NvbmVjdGFyIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibXJfY29udHJvbGxlcl9zdG9wX2Nhc3RpbmciIG1zZ2lkPSI4ODU3ODg2Nzk0MDg2NTgzMjI2Ij4iRGV0ZXIgZW1pc2nDs24iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJtcl9jb250cm9sbGVyX2Nsb3NlX2Rlc2NyaXB0aW9uIiBtc2dpZD0iNzMzMzg2MjMxMjQ4MDU4MzI2MCI+IlBlY2hhciI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im1yX2NvbnRyb2xsZXJfcGxheSIgbXNnaWQ9IjY4MzYzNDU2NTk2OTk4NzQ1OCI+IlJlcHJvZHVjZSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im1yX2NvbnRyb2xsZXJfcGF1c2UiIG1zZ2lkPSI1NDUxODg0NDM1NTEwOTA1NDA2Ij4iUGF1c2EiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJtcl9jb250cm9sbGVyX3N0b3AiIG1zZ2lkPSI3MzU4NzQ2NDE5MjE0MjUxMjMiPiJEZXRlciI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im1yX2NvbnRyb2xsZXJfZXhwYW5kX2dyb3VwIiBtc2dpZD0iODA2MjQyNzAyMjc0NDI2NjkwNyI+IkFtcGxpYXIiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJtcl9jb250cm9sbGVyX2NvbGxhcHNlX2dyb3VwIiBtc2dpZD0iNzkyNDgwOTA1NjkwNDI0MDkyNiI+IkNvbnRyYWVyIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibXJfY29udHJvbGxlcl9hbGJ1bV9hcnQiIG1zZ2lkPSI2NDIyODAxODQzNTQwNTQzNTg1Ij4iUG9ydGFkYSBkbyDDoWxidW0iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJtcl9jb250cm9sbGVyX3ZvbHVtZV9zbGlkZXIiIG1zZ2lkPSIyMzYxNzg1OTkyMjExODQxNzA5Ij4iQ29udHJvbCBkZXNwcmF6YWJsZSBkbyB2b2x1bWUiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJtcl9jb250cm9sbGVyX25vX21lZGlhX3NlbGVjdGVkIiBtc2dpZD0iNjU0NzEzMDM2MDM0OTE4MjM4MSI+Ik5vbiBzZSBzZWxlY2Npb25hcm9uIHJlY3Vyc29zIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibXJfY29udHJvbGxlcl9ub19pbmZvX2F2YWlsYWJsZSIgbXNnaWQ9IjU1ODU0MTg0NzE3NDExNDI5MjQiPiJOb24gaGFpIGluZm9ybWFjacOzbiBkaXNwb8OxaWJsZSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im1yX2NvbnRyb2xsZXJfY2FzdGluZ19zY3JlZW4iIG1zZ2lkPSI0ODY4NDU3OTU3MTUxMTI0ODY3Ij4iRW1pc2nDs24gZGUgcGFudGFsbGEiPC9zdHJpbmc+Ci08L3Jlc291cmNlcz4KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL01lZGlhQ29tcG9uZW50cy9yZXMvdmFsdWVzLWd1L3N0cmluZ3MueG1sIGIvcGFja2FnZXMvTWVkaWFDb21wb25lbnRzL3Jlcy92YWx1ZXMtZ3Uvc3RyaW5ncy54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDJjZDVmM2YuLjAwMDAwMDAKLS0tIGEvcGFja2FnZXMvTWVkaWFDb21wb25lbnRzL3Jlcy92YWx1ZXMtZ3Uvc3RyaW5ncy54bWwKKysrIC9kZXYvbnVsbApAQCAtMSw0MCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPCEtLSAgQ29weXJpZ2h0IDIwMTggVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAotCi0gICAgIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwotICAgICB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCi0gICAgIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotCi0gICAgICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0KLSAgICAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQotICAgICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAotICAgICBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KLSAgICAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAotICAgICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KLSAtLT4KLQotPHJlc291cmNlcyB4bWxuczphbmRyb2lkPSJodHRwOi8vc2NoZW1hcy5hbmRyb2lkLmNvbS9hcGsvcmVzL2FuZHJvaWQiCi0gICAgeG1sbnM6eGxpZmY9InVybjpvYXNpczpuYW1lczp0Yzp4bGlmZjpkb2N1bWVudDoxLjIiPgotICAgIDxzdHJpbmcgbmFtZT0ibXJfc3lzdGVtX3JvdXRlX25hbWUiIG1zZ2lkPSI1NDQxNTI5ODUxNDgxMTc2ODE3Ij4i4Kq44Kq/4Kq44KuN4Kqf4KquIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibXJfdXNlcl9yb3V0ZV9jYXRlZ29yeV9uYW1lIiBtc2dpZD0iNzQ5ODExMjkwNzUyNDk3NzMxMSI+IuCqieCqquCqleCqsOCqo+CriyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im1yX2J1dHRvbl9jb250ZW50X2Rlc2NyaXB0aW9uIiBtc2dpZD0iMzY5ODM3ODA4NTkwMTQ2NjEyOSI+IuCqleCqvuCquOCrjeCqnyDgqpXgqrDgq4sg4Kqs4Kqf4KqoIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibXJfY2FzdF9idXR0b25fZGlzY29ubmVjdGVkIiBtc2dpZD0iODE2MzA1NDkwNDI3ODE5MjQwIj4i4KqV4Kq+4Kq44KuN4KqfIOCqleCqsOCriyDgqqzgqp/gqqguIOCqoeCqv+CquOCrjeCqleCqqOCrh+CqleCrjeCqnyDgqpXgqrDgq43gqq/gq4HgqoIiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJtcl9jYXN0X2J1dHRvbl9jb25uZWN0aW5nIiBtc2dpZD0iMjE4NzY0Mjc2NTA5MTg3MzgzNCI+IuCqleCqvuCquOCrjeCqnyDgqpXgqrDgq4sg4Kqs4Kqf4KqoLiDgqpXgqqjgq4fgqpXgq43gqp8g4Kql4KqIIOCqsOCqueCrjeCqr+CrgeCqgiDgqpvgq4ciPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJtcl9jYXN0X2J1dHRvbl9jb25uZWN0ZWQiIG1zZ2lkPSI1MDg4NDI3NzcxNzg4NjQ4MDg1Ij4i4KqV4Kq+4Kq44KuN4KqfIOCqleCqsOCriyDgqqzgqp/gqqguIOCqleCqqOCrh+CqleCrjeCqnyDgqqXgqq/gq4HgqoIiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJtcl9jaG9vc2VyX3RpdGxlIiBtc2dpZD0iNDE0MzAxOTQxNTQ2MTM1OTkwIj4i4KqG4Kqo4Kq+IOCqquCqsCDgqpXgqr7gqrjgq43gqp8g4KqV4Kqw4KuLIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibXJfY2hvb3Nlcl9zZWFyY2hpbmciIG1zZ2lkPSI2MzQ5OTAwNTc5NTA3NTIxOTU2Ij4i4KqJ4Kqq4KqV4Kqw4Kqj4KuLIOCqtuCri+Cqp+CrgCDgqrDgqrngq43gqq/gqr7gqoIg4Kqb4KuA4KqPIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibXJfY29udHJvbGxlcl9kaXNjb25uZWN0IiBtc2dpZD0iMTIyNzI2NDg4OTQxMjk4OTU4MCI+IuCqoeCqv+CquOCrjeCqleCqqOCrh+CqleCrjeCqnyDgqpXgqrDgq4siPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJtcl9jb250cm9sbGVyX3N0b3BfY2FzdGluZyIgbXNnaWQ9Ijg4NTc4ODY3OTQwODY1ODMyMjYiPiLgqpXgqr7gqrjgq43gqp8g4KqV4Kqw4Kq14Kq+4Kqo4KuB4KqCIOCqsOCri+CqleCriyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im1yX2NvbnRyb2xsZXJfY2xvc2VfZGVzY3JpcHRpb24iIG1zZ2lkPSI3MzMzODYyMzEyNDgwNTgzMjYwIj4i4Kqs4KqC4KqnIOCqleCqsOCriyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im1yX2NvbnRyb2xsZXJfcGxheSIgbXNnaWQ9IjY4MzYzNDU2NTk2OTk4NzQ1OCI+IuCqmuCqsuCqvuCqteCriyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im1yX2NvbnRyb2xsZXJfcGF1c2UiIG1zZ2lkPSI1NDUxODg0NDM1NTEwOTA1NDA2Ij4i4Kql4KuL4Kqt4Kq+4Kq14KuLIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibXJfY29udHJvbGxlcl9zdG9wIiBtc2dpZD0iNzM1ODc0NjQxOTIxNDI1MTIzIj4i4Kqw4KuL4KqV4KuLIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibXJfY29udHJvbGxlcl9leHBhbmRfZ3JvdXAiIG1zZ2lkPSI4MDYyNDI3MDIyNzQ0MjY2OTA3Ij4i4Kq14Kq/4Kq44KuN4Kqk4KuD4KqkIOCqleCqsOCriyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im1yX2NvbnRyb2xsZXJfY29sbGFwc2VfZ3JvdXAiIG1zZ2lkPSI3OTI0ODA5MDU2OTA0MjQwOTI2Ij4i4Kq44KqC4KqV4KuB4Kqa4Kq/4KqkIOCqleCqsOCriyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im1yX2NvbnRyb2xsZXJfYWxidW1fYXJ0IiBtc2dpZD0iNjQyMjgwMTg0MzU0MDU0MzU4NSI+IuCqhuCqsuCrjeCqrOCqriDgqpXgqrLgqr4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJtcl9jb250cm9sbGVyX3ZvbHVtZV9zbGlkZXIiIG1zZ2lkPSIyMzYxNzg1OTkyMjExODQxNzA5Ij4i4Kq14KuJ4Kqy4KuN4Kqv4KuB4KquIOCquOCrjeCqsuCqvuCqh+CqoeCqsCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im1yX2NvbnRyb2xsZXJfbm9fbWVkaWFfc2VsZWN0ZWQiIG1zZ2lkPSI2NTQ3MTMwMzYwMzQ5MTgyMzgxIj4i4KqV4KuL4KqIIOCqruCrgOCqoeCqv+Cqr+CqviDgqqrgqrjgqoLgqqYg4KqV4Kqw4KuH4KqyIOCqqOCqpeCrgCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im1yX2NvbnRyb2xsZXJfbm9faW5mb19hdmFpbGFibGUiIG1zZ2lkPSI1NTg1NDE4NDcxNzQxMTQyOTI0Ij4i4KqV4KuL4KqIIOCqruCqvuCqueCqv+CqpOCrgCDgqongqqrgqrLgqqzgq43gqqcg4Kqo4Kql4KuAIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibXJfY29udHJvbGxlcl9jYXN0aW5nX3NjcmVlbiIgbXNnaWQ9IjQ4Njg0NTc5NTcxNTExMjQ4NjciPiLgqrjgq43gqpXgq43gqrDgq4Dgqqjgqqjgq4cg4KqV4Kq+4Kq44KuN4KqfIOCqleCqsOCrgCDgqrDgqrngq43gqq/gqr7gqoIg4Kqb4KuHIjwvc3RyaW5nPgotPC9yZXNvdXJjZXM+CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9NZWRpYUNvbXBvbmVudHMvcmVzL3ZhbHVlcy1oaS9zdHJpbmdzLnhtbCBiL3BhY2thZ2VzL01lZGlhQ29tcG9uZW50cy9yZXMvdmFsdWVzLWhpL3N0cmluZ3MueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5NTUyYTU5Li4wMDAwMDAwCi0tLSBhL3BhY2thZ2VzL01lZGlhQ29tcG9uZW50cy9yZXMvdmFsdWVzLWhpL3N0cmluZ3MueG1sCisrKyAvZGV2L251bGwKQEAgLTEsNDAgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTwhLS0gIENvcHlyaWdodCAyMDE4IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKLQotICAgICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKLSAgICAgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgotICAgICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLQotICAgICAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotCi0gICAgIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKLSAgICAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKLSAgICAgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCi0gICAgIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKLSAgICAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCi0gLS0+Ci0KLTxyZXNvdXJjZXMgeG1sbnM6YW5kcm9pZD0iaHR0cDovL3NjaGVtYXMuYW5kcm9pZC5jb20vYXBrL3Jlcy9hbmRyb2lkIgotICAgIHhtbG5zOnhsaWZmPSJ1cm46b2FzaXM6bmFtZXM6dGM6eGxpZmY6ZG9jdW1lbnQ6MS4yIj4KLSAgICA8c3RyaW5nIG5hbWU9Im1yX3N5c3RlbV9yb3V0ZV9uYW1lIiBtc2dpZD0iNTQ0MTUyOTg1MTQ4MTE3NjgxNyI+IuCkuOCkv+CkuOCljeCkn+CkriI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im1yX3VzZXJfcm91dGVfY2F0ZWdvcnlfbmFtZSIgbXNnaWQ9Ijc0OTgxMTI5MDc1MjQ5NzczMTEiPiLgpKHgpL/gpLXgpL7gpIfgpLgiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJtcl9idXR0b25fY29udGVudF9kZXNjcmlwdGlvbiIgbXNnaWQ9IjM2OTgzNzgwODU5MDE0NjYxMjkiPiLgpJXgpL7gpLjgpY3gpJ8g4KSV4KSw4KWH4KSCIOCkrOCkn+CkqCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im1yX2Nhc3RfYnV0dG9uX2Rpc2Nvbm5lY3RlZCIgbXNnaWQ9IjgxNjMwNTQ5MDQyNzgxOTI0MCI+IuCkleCkvuCkuOCljeCknyDgpJXgpLDgpYfgpIIg4KSs4KSf4KSoLiDgpKHgpL/gpLjgpJXgpKjgpYfgpJXgpY3gpJ8g4KS54KWIIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibXJfY2FzdF9idXR0b25fY29ubmVjdGluZyIgbXNnaWQ9IjIxODc2NDI3NjUwOTE4NzM4MzQiPiLgpJXgpL7gpLjgpY3gpJ8g4KSV4KSw4KWH4KSCIOCkrOCkn+CkqC4g4KSV4KSo4KWH4KSV4KWN4KSfIOCkueCliyDgpLDgpLngpL4g4KS54KWIIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibXJfY2FzdF9idXR0b25fY29ubmVjdGVkIiBtc2dpZD0iNTA4ODQyNzc3MTc4ODY0ODA4NSI+IuCkleCkvuCkuOCljeCknyDgpJXgpLDgpYfgpIIg4KSs4KSf4KSoLiDgpJXgpKjgpYfgpJXgpY3gpJ8g4KS54KWIIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibXJfY2hvb3Nlcl90aXRsZSIgbXNnaWQ9IjQxNDMwMTk0MTU0NjEzNTk5MCI+IuCkh+CkuCDgpKrgpLAg4KSV4KS+4KS44KWN4oCN4KSfIOCkleCksOClh+CkgiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im1yX2Nob29zZXJfc2VhcmNoaW5nIiBtc2dpZD0iNjM0OTkwMDU3OTUwNzUyMTk1NiI+IuCkoeCkv+CkteCkvuCkh+CkuCDgpKLgpYLgpILgpKIg4KSw4KS54KS+IOCkueCliCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im1yX2NvbnRyb2xsZXJfZGlzY29ubmVjdCIgbXNnaWQ9IjEyMjcyNjQ4ODk0MTI5ODk1ODAiPiLgpKHgpL/gpLjgpJXgpKjgpYfgpJXgpY3gpJ8g4KSV4KSw4KWH4KSCIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibXJfY29udHJvbGxlcl9zdG9wX2Nhc3RpbmciIG1zZ2lkPSI4ODU3ODg2Nzk0MDg2NTgzMjI2Ij4i4KSV4KS+4KS44KWN4KSfIOCkleCksOCkqOCkviDgpKzgpILgpKYg4KSV4KSw4KWH4KSCIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibXJfY29udHJvbGxlcl9jbG9zZV9kZXNjcmlwdGlvbiIgbXNnaWQ9IjczMzM4NjIzMTI0ODA1ODMyNjAiPiLgpKzgpILgpKYg4KSV4KSw4KWH4KSCIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibXJfY29udHJvbGxlcl9wbGF5IiBtc2dpZD0iNjgzNjM0NTY1OTY5OTg3NDU4Ij4i4KSa4KSy4KS+4KSP4KSCIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibXJfY29udHJvbGxlcl9wYXVzZSIgbXNnaWQ9IjU0NTE4ODQ0MzU1MTA5MDU0MDYiPiLgpLDgpYvgpJXgpYfgpIIiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJtcl9jb250cm9sbGVyX3N0b3AiIG1zZ2lkPSI3MzU4NzQ2NDE5MjE0MjUxMjMiPiLgpKzgpILgpKYg4KSV4KSw4KWH4KSCIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibXJfY29udHJvbGxlcl9leHBhbmRfZ3JvdXAiIG1zZ2lkPSI4MDYyNDI3MDIyNzQ0MjY2OTA3Ij4i4KS14KS/4KS44KWN4KSk4KS+4KSwIOCkleCksOClh+CkgiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im1yX2NvbnRyb2xsZXJfY29sbGFwc2VfZ3JvdXAiIG1zZ2lkPSI3OTI0ODA5MDU2OTA0MjQwOTI2Ij4i4KSb4KWL4KSf4KS+IOCkleCksOClh+CkgiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im1yX2NvbnRyb2xsZXJfYWxidW1fYXJ0IiBtc2dpZD0iNjQyMjgwMTg0MzU0MDU0MzU4NSI+IuCkj+CksuCljeCkrOCkriDgpIbgpLDgpY3gpJ8iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJtcl9jb250cm9sbGVyX3ZvbHVtZV9zbGlkZXIiIG1zZ2lkPSIyMzYxNzg1OTkyMjExODQxNzA5Ij4i4KS14KWJ4KSy4KWN4KSv4KWC4KSuIOCkuOCljeCksuCkvuCkh+CkoeCksCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im1yX2NvbnRyb2xsZXJfbm9fbWVkaWFfc2VsZWN0ZWQiIG1zZ2lkPSI2NTQ3MTMwMzYwMzQ5MTgyMzgxIj4i4KSV4KWL4KSIIOCkruClgOCkoeCkv+Ckr+CkviDgpJrgpK/gpKjgpL/gpKQg4KSo4KS54KWA4KSCIOCkueCliCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im1yX2NvbnRyb2xsZXJfbm9faW5mb19hdmFpbGFibGUiIG1zZ2lkPSI1NTg1NDE4NDcxNzQxMTQyOTI0Ij4i4KSV4KWL4KSIIOCknOCkvuCkqOCkleCkvuCksOClgCDgpK7gpYzgpJzgpYLgpKYg4KSo4KS54KWA4KSCIOCkueCliCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im1yX2NvbnRyb2xsZXJfY2FzdGluZ19zY3JlZW4iIG1zZ2lkPSI0ODY4NDU3OTU3MTUxMTI0ODY3Ij4i4KS44KWN4KSV4KWN4KSw4KWA4KSoIOCkleCkvuCkuOCljeCknyDgpLngpYsg4KSw4KS54KWAIOCkueCliCI8L3N0cmluZz4KLTwvcmVzb3VyY2VzPgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvTWVkaWFDb21wb25lbnRzL3Jlcy92YWx1ZXMtaHIvc3RyaW5ncy54bWwgYi9wYWNrYWdlcy9NZWRpYUNvbXBvbmVudHMvcmVzL3ZhbHVlcy1oci9zdHJpbmdzLnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggM2M0M2VlNy4uMDAwMDAwMAotLS0gYS9wYWNrYWdlcy9NZWRpYUNvbXBvbmVudHMvcmVzL3ZhbHVlcy1oci9zdHJpbmdzLnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDQwICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08IS0tICBDb3B5cmlnaHQgMjAxOCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0Ci0KLSAgICAgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7Ci0gICAgIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KLSAgICAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0KLSAgICAgICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLQotICAgICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCi0gICAgIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCi0gICAgIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgotICAgICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCi0gICAgIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgotIC0tPgotCi08cmVzb3VyY2VzIHhtbG5zOmFuZHJvaWQ9Imh0dHA6Ly9zY2hlbWFzLmFuZHJvaWQuY29tL2Fway9yZXMvYW5kcm9pZCIKLSAgICB4bWxuczp4bGlmZj0idXJuOm9hc2lzOm5hbWVzOnRjOnhsaWZmOmRvY3VtZW50OjEuMiI+Ci0gICAgPHN0cmluZyBuYW1lPSJtcl9zeXN0ZW1fcm91dGVfbmFtZSIgbXNnaWQ9IjU0NDE1Mjk4NTE0ODExNzY4MTciPiJTdXN0YXYiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJtcl91c2VyX3JvdXRlX2NhdGVnb3J5X25hbWUiIG1zZ2lkPSI3NDk4MTEyOTA3NTI0OTc3MzExIj4iVXJlxJFhamkiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJtcl9idXR0b25fY29udGVudF9kZXNjcmlwdGlvbiIgbXNnaWQ9IjM2OTgzNzgwODU5MDE0NjYxMjkiPiJHdW1iIHphIGVtaXRpcmFuamUiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJtcl9jYXN0X2J1dHRvbl9kaXNjb25uZWN0ZWQiIG1zZ2lkPSI4MTYzMDU0OTA0Mjc4MTkyNDAiPiJHdW1iIHphIGVtaXRpcmFuamUuIFZlemEgcHJla2ludXRhIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibXJfY2FzdF9idXR0b25fY29ubmVjdGluZyIgbXNnaWQ9IjIxODc2NDI3NjUwOTE4NzM4MzQiPiJHdW1iIHphIGVtaXRpcmFuamUuIFBvdmV6aXZhbmplIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibXJfY2FzdF9idXR0b25fY29ubmVjdGVkIiBtc2dpZD0iNTA4ODQyNzc3MTc4ODY0ODA4NSI+Ikd1bWIgemEgZW1pdGlyYW5qZS4gUG92ZXphbiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im1yX2Nob29zZXJfdGl0bGUiIG1zZ2lkPSI0MTQzMDE5NDE1NDYxMzU5OTAiPiJFbWl0aXJhbmplIG5hIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibXJfY2hvb3Nlcl9zZWFyY2hpbmciIG1zZ2lkPSI2MzQ5OTAwNTc5NTA3NTIxOTU2Ij4iVHJhxb5lbmplIHVyZcSRYWphIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibXJfY29udHJvbGxlcl9kaXNjb25uZWN0IiBtc2dpZD0iMTIyNzI2NDg4OTQxMjk4OTU4MCI+IlByZWtpbmkgdmV6dSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im1yX2NvbnRyb2xsZXJfc3RvcF9jYXN0aW5nIiBtc2dpZD0iODg1Nzg4Njc5NDA4NjU4MzIyNiI+IlphdXN0YXZpIGVtaXRpcmFuamUiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJtcl9jb250cm9sbGVyX2Nsb3NlX2Rlc2NyaXB0aW9uIiBtc2dpZD0iNzMzMzg2MjMxMjQ4MDU4MzI2MCI+IlphdHZhcmFuamUiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJtcl9jb250cm9sbGVyX3BsYXkiIG1zZ2lkPSI2ODM2MzQ1NjU5Njk5ODc0NTgiPiJSZXByb2R1a2NpamEiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJtcl9jb250cm9sbGVyX3BhdXNlIiBtc2dpZD0iNTQ1MTg4NDQzNTUxMDkwNTQwNiI+IlBhdXppcmFuamUiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJtcl9jb250cm9sbGVyX3N0b3AiIG1zZ2lkPSI3MzU4NzQ2NDE5MjE0MjUxMjMiPiJaYXVzdGF2aSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im1yX2NvbnRyb2xsZXJfZXhwYW5kX2dyb3VwIiBtc2dpZD0iODA2MjQyNzAyMjc0NDI2NjkwNyI+IlByb8WhaXJpdmFuamUiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJtcl9jb250cm9sbGVyX2NvbGxhcHNlX2dyb3VwIiBtc2dpZD0iNzkyNDgwOTA1NjkwNDI0MDkyNiI+IlNhxb5pbWFuamUiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJtcl9jb250cm9sbGVyX2FsYnVtX2FydCIgbXNnaWQ9IjY0MjI4MDE4NDM1NDA1NDM1ODUiPiJOYXNsb3ZuaWNhIGFsYnVtYSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im1yX2NvbnRyb2xsZXJfdm9sdW1lX3NsaWRlciIgbXNnaWQ9IjIzNjE3ODU5OTIyMTE4NDE3MDkiPiJLbGl6YcSNIHphIGdsYXNub8SHdSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im1yX2NvbnRyb2xsZXJfbm9fbWVkaWFfc2VsZWN0ZWQiIG1zZ2lkPSI2NTQ3MTMwMzYwMzQ5MTgyMzgxIj4iTmlqZSBvZGFicmFuIG5pamVkYW4gbWVkaWoiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJtcl9jb250cm9sbGVyX25vX2luZm9fYXZhaWxhYmxlIiBtc2dpZD0iNTU4NTQxODQ3MTc0MTE0MjkyNCI+IkluZm9ybWFjaWplIG5pc3UgZG9zdHVwbmUiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJtcl9jb250cm9sbGVyX2Nhc3Rpbmdfc2NyZWVuIiBtc2dpZD0iNDg2ODQ1Nzk1NzE1MTEyNDg2NyI+IkVtaXRpcmFuamUgemFzbG9uYSI8L3N0cmluZz4KLTwvcmVzb3VyY2VzPgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvTWVkaWFDb21wb25lbnRzL3Jlcy92YWx1ZXMtaHUvc3RyaW5ncy54bWwgYi9wYWNrYWdlcy9NZWRpYUNvbXBvbmVudHMvcmVzL3ZhbHVlcy1odS9zdHJpbmdzLnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTM2YmRmZS4uMDAwMDAwMAotLS0gYS9wYWNrYWdlcy9NZWRpYUNvbXBvbmVudHMvcmVzL3ZhbHVlcy1odS9zdHJpbmdzLnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDQwICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08IS0tICBDb3B5cmlnaHQgMjAxOCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0Ci0KLSAgICAgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7Ci0gICAgIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KLSAgICAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0KLSAgICAgICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLQotICAgICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCi0gICAgIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCi0gICAgIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgotICAgICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCi0gICAgIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgotIC0tPgotCi08cmVzb3VyY2VzIHhtbG5zOmFuZHJvaWQ9Imh0dHA6Ly9zY2hlbWFzLmFuZHJvaWQuY29tL2Fway9yZXMvYW5kcm9pZCIKLSAgICB4bWxuczp4bGlmZj0idXJuOm9hc2lzOm5hbWVzOnRjOnhsaWZmOmRvY3VtZW50OjEuMiI+Ci0gICAgPHN0cmluZyBuYW1lPSJtcl9zeXN0ZW1fcm91dGVfbmFtZSIgbXNnaWQ9IjU0NDE1Mjk4NTE0ODExNzY4MTciPiJSZW5kc3plciI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im1yX3VzZXJfcm91dGVfY2F0ZWdvcnlfbmFtZSIgbXNnaWQ9Ijc0OTgxMTI5MDc1MjQ5NzczMTEiPiJFc3prw7Z6w7ZrIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibXJfYnV0dG9uX2NvbnRlbnRfZGVzY3JpcHRpb24iIG1zZ2lkPSIzNjk4Mzc4MDg1OTAxNDY2MTI5Ij4iw4F0a8O8bGTDqXMgZ29tYiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im1yX2Nhc3RfYnV0dG9uX2Rpc2Nvbm5lY3RlZCIgbXNnaWQ9IjgxNjMwNTQ5MDQyNzgxOTI0MCI+IsOBdGvDvGxkw6lzIGdvbWIuIEthcGNzb2xhdCBib250dmEiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJtcl9jYXN0X2J1dHRvbl9jb25uZWN0aW5nIiBtc2dpZD0iMjE4NzY0Mjc2NTA5MTg3MzgzNCI+IsOBdGvDvGxkw6lzIGdvbWIuIENzYXRsYWtvesOhcyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im1yX2Nhc3RfYnV0dG9uX2Nvbm5lY3RlZCIgbXNnaWQ9IjUwODg0Mjc3NzE3ODg2NDgwODUiPiLDgXRrw7xsZMOpcyBnb21iLiBDc2F0bGFrb3p0YXR2YSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im1yX2Nob29zZXJfdGl0bGUiIG1zZ2lkPSI0MTQzMDE5NDE1NDYxMzU5OTAiPiLDgXRrw7xsZMOpcyBpZGUiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJtcl9jaG9vc2VyX3NlYXJjaGluZyIgbXNnaWQ9IjYzNDk5MDA1Nzk1MDc1MjE5NTYiPiJFc3prw7Z6w7ZrIGtlcmVzw6lzZSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im1yX2NvbnRyb2xsZXJfZGlzY29ubmVjdCIgbXNnaWQ9IjEyMjcyNjQ4ODk0MTI5ODk1ODAiPiJMZXbDoWxhc3p0w6FzIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibXJfY29udHJvbGxlcl9zdG9wX2Nhc3RpbmciIG1zZ2lkPSI4ODU3ODg2Nzk0MDg2NTgzMjI2Ij4iw4F0a8O8bGTDqXMgbGXDoWxsw610w6FzYSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im1yX2NvbnRyb2xsZXJfY2xvc2VfZGVzY3JpcHRpb24iIG1zZ2lkPSI3MzMzODYyMzEyNDgwNTgzMjYwIj4iQmV6w6Fyw6FzIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibXJfY29udHJvbGxlcl9wbGF5IiBtc2dpZD0iNjgzNjM0NTY1OTY5OTg3NDU4Ij4iTGVqw6F0c3rDoXMiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJtcl9jb250cm9sbGVyX3BhdXNlIiBtc2dpZD0iNTQ1MTg4NDQzNTUxMDkwNTQwNiI+IlN6w7xuZXRlbHRldMOpcyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im1yX2NvbnRyb2xsZXJfc3RvcCIgbXNnaWQ9IjczNTg3NDY0MTkyMTQyNTEyMyI+Ikxlw6FsbMOtdMOhcyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im1yX2NvbnRyb2xsZXJfZXhwYW5kX2dyb3VwIiBtc2dpZD0iODA2MjQyNzAyMjc0NDI2NjkwNyI+IktpYm9udMOhcyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im1yX2NvbnRyb2xsZXJfY29sbGFwc2VfZ3JvdXAiIG1zZ2lkPSI3OTI0ODA5MDU2OTA0MjQwOTI2Ij4iw5Zzc3plY3N1a8OhcyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im1yX2NvbnRyb2xsZXJfYWxidW1fYXJ0IiBtc2dpZD0iNjQyMjgwMTg0MzU0MDU0MzU4NSI+IkxlbWV6Ym9yw610w7MiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJtcl9jb250cm9sbGVyX3ZvbHVtZV9zbGlkZXIiIG1zZ2lkPSIyMzYxNzg1OTkyMjExODQxNzA5Ij4iSGFuZ2VyxZFzemFiw6FseXrDsyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im1yX2NvbnRyb2xsZXJfbm9fbWVkaWFfc2VsZWN0ZWQiIG1zZ2lkPSI2NTQ3MTMwMzYwMzQ5MTgyMzgxIj4iTmluY3MgbcOpZGlhIGtpdsOhbGFzenR2YSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im1yX2NvbnRyb2xsZXJfbm9faW5mb19hdmFpbGFibGUiIG1zZ2lkPSI1NTg1NDE4NDcxNzQxMTQyOTI0Ij4iTmluY3MgaW5mb3Jtw6FjacOzIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibXJfY29udHJvbGxlcl9jYXN0aW5nX3NjcmVlbiIgbXNnaWQ9IjQ4Njg0NTc5NTcxNTExMjQ4NjciPiJLw6lwZXJuecWRdGFydGFsb20gw6F0a8O8bGTDqXNlIjwvc3RyaW5nPgotPC9yZXNvdXJjZXM+CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9NZWRpYUNvbXBvbmVudHMvcmVzL3ZhbHVlcy1oeS9zdHJpbmdzLnhtbCBiL3BhY2thZ2VzL01lZGlhQ29tcG9uZW50cy9yZXMvdmFsdWVzLWh5L3N0cmluZ3MueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4ZWM4MmI3Li4wMDAwMDAwCi0tLSBhL3BhY2thZ2VzL01lZGlhQ29tcG9uZW50cy9yZXMvdmFsdWVzLWh5L3N0cmluZ3MueG1sCisrKyAvZGV2L251bGwKQEAgLTEsNDAgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTwhLS0gIENvcHlyaWdodCAyMDE4IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKLQotICAgICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKLSAgICAgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgotICAgICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLQotICAgICAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotCi0gICAgIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKLSAgICAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKLSAgICAgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCi0gICAgIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKLSAgICAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCi0gLS0+Ci0KLTxyZXNvdXJjZXMgeG1sbnM6YW5kcm9pZD0iaHR0cDovL3NjaGVtYXMuYW5kcm9pZC5jb20vYXBrL3Jlcy9hbmRyb2lkIgotICAgIHhtbG5zOnhsaWZmPSJ1cm46b2FzaXM6bmFtZXM6dGM6eGxpZmY6ZG9jdW1lbnQ6MS4yIj4KLSAgICA8c3RyaW5nIG5hbWU9Im1yX3N5c3RlbV9yb3V0ZV9uYW1lIiBtc2dpZD0iNTQ0MTUyOTg1MTQ4MTE3NjgxNyI+ItWA1aHVtNWh1a/VodaA1aMiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJtcl91c2VyX3JvdXRlX2NhdGVnb3J5X25hbWUiIG1zZ2lkPSI3NDk4MTEyOTA3NTI0OTc3MzExIj4i1Y3VodaA1oTVpdaAIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibXJfYnV0dG9uX2NvbnRlbnRfZGVzY3JpcHRpb24iIG1zZ2lkPSIzNjk4Mzc4MDg1OTAxNDY2MTI5Ij4i1YDVpdW81aHWgNWx1aHVr9W01aHVtiDVr9W41bPVodWvIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibXJfY2FzdF9idXR0b25fZGlzY29ubmVjdGVkIiBtc2dpZD0iODE2MzA1NDkwNDI3ODE5MjQwIj4i1YDVpdW81aHWgNWx1aHVr9W01aHVtiDVr9W41bPVodWvOiDVjdWh1oDWhNW2INWh1bbVu9Wh1b/VvtWh1a4g1aciPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJtcl9jYXN0X2J1dHRvbl9jb25uZWN0aW5nIiBtc2dpZD0iMjE4NzY0Mjc2NTA5MTg3MzgzNCI+ItWA1aXVvNWh1oDVsdWh1a/VtNWh1bYg1a/VuNWz1aHVrzog1Y3VodaA1oTVqCDVr9Wh1brVodWv1oHVvtW41oLVtCDVpyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im1yX2Nhc3RfYnV0dG9uX2Nvbm5lY3RlZCIgbXNnaWQ9IjUwODg0Mjc3NzE3ODg2NDgwODUiPiLVgNWl1bzVodaA1bHVodWv1bTVodW2INWv1bjVs9Wh1a86INWN1aHWgNaE1agg1a/VodW61aHVr9aB1b7VodWuINWnIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibXJfY2hvb3Nlcl90aXRsZSIgbXNnaWQ9IjQxNDMwMTk0MTU0NjEzNTk5MCI+ItS41bbVv9aA1aXWhCDVvdWh1oDWhNWoIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibXJfY2hvb3Nlcl9zZWFyY2hpbmciIG1zZ2lkPSI2MzQ5OTAwNTc5NTA3NTIxOTU2Ij4i1Y3VodaA1oTVpdaA1asg1bjWgNW41bbVuNaC1bQiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJtcl9jb250cm9sbGVyX2Rpc2Nvbm5lY3QiIG1zZ2lkPSIxMjI3MjY0ODg5NDEyOTg5NTgwIj4i1LHVttW71aHVv9Wl1awiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJtcl9jb250cm9sbGVyX3N0b3BfY2FzdGluZyIgbXNnaWQ9Ijg4NTc4ODY3OTQwODY1ODMyMjYiPiLUtNWh1aTVodaA1aXWgdW21aXVrCDVsNWl1bzVodaA1bHVodWv1bjWgtW01agiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJtcl9jb250cm9sbGVyX2Nsb3NlX2Rlc2NyaXB0aW9uIiBtc2dpZD0iNzMzMzg2MjMxMjQ4MDU4MzI2MCI+ItWT1aHVr9Wl1awiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJtcl9jb250cm9sbGVyX3BsYXkiIG1zZ2lkPSI2ODM2MzQ1NjU5Njk5ODc0NTgiPiLVhtW+1aHVo9Wh1oDVr9Wl1awiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJtcl9jb250cm9sbGVyX3BhdXNlIiBtc2dpZD0iNTQ1MTg4NDQzNTUxMDkwNTQwNiI+ItS01aHVpNWh1oAiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJtcl9jb250cm9sbGVyX3N0b3AiIG1zZ2lkPSI3MzU4NzQ2NDE5MjE0MjUxMjMiPiLUtNWh1aTVodaA1aXWgdW21aXVrCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im1yX2NvbnRyb2xsZXJfZXhwYW5kX2dyb3VwIiBtc2dpZD0iODA2MjQyNzAyMjc0NDI2NjkwNyI+ItS41bbVpNWh1oDVsdWh1a/VpdWsIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibXJfY29udHJvbGxlcl9jb2xsYXBzZV9ncm91cCIgbXNnaWQ9Ijc5MjQ4MDkwNTY5MDQyNDA5MjYiPiLUv9W41a7Vr9Wl1awiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJtcl9jb250cm9sbGVyX2FsYnVtX2FydCIgbXNnaWQ9IjY0MjI4MDE4NDM1NDA1NDM1ODUiPiLUsdWs1aLVuNW01asg1bfVodW61avVryI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im1yX2NvbnRyb2xsZXJfdm9sdW1lX3NsaWRlciIgbXNnaWQ9IjIzNjE3ODU5OTIyMTE4NDE3MDkiPiLVgdWh1bXVttWrINW41oLVqtWj1bbVuNaC1anVtdWh1bYg1a/VodaA1aPVodW+1bjWgNWr1bkiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJtcl9jb250cm9sbGVyX25vX21lZGlhX3NlbGVjdGVkIiBtc2dpZD0iNjU0NzEzMDM2MDM0OTE4MjM4MSI+ItWE1aXVpNWr1aEg1obVodW11azVpdaAINW51aXVtiDVqNW21b/WgNW+1aXVrCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im1yX2NvbnRyb2xsZXJfbm9faW5mb19hdmFpbGFibGUiIG1zZ2lkPSI1NTg1NDE4NDcxNzQxMTQyOTI0Ij4i1Y/VpdWy1aXVr9W41oLVqdW11bjWgtW21bbVpdaA1agg1bDVodW91aHVttWl1azVqyDVudWl1bYiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJtcl9jb250cm9sbGVyX2Nhc3Rpbmdfc2NyZWVuIiBtc2dpZD0iNDg2ODQ1Nzk1NzE1MTEyNDg2NyI+ItS31a/WgNWh1bbVqCDVsNWl1bzVodaA1bHVodWv1b7VuNaC1bQg1aciPC9zdHJpbmc+Ci08L3Jlc291cmNlcz4KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL01lZGlhQ29tcG9uZW50cy9yZXMvdmFsdWVzLWluL3N0cmluZ3MueG1sIGIvcGFja2FnZXMvTWVkaWFDb21wb25lbnRzL3Jlcy92YWx1ZXMtaW4vc3RyaW5ncy54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDZiMjc1MmUuLjAwMDAwMDAKLS0tIGEvcGFja2FnZXMvTWVkaWFDb21wb25lbnRzL3Jlcy92YWx1ZXMtaW4vc3RyaW5ncy54bWwKKysrIC9kZXYvbnVsbApAQCAtMSw0MCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPCEtLSAgQ29weXJpZ2h0IDIwMTggVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAotCi0gICAgIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwotICAgICB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCi0gICAgIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotCi0gICAgICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0KLSAgICAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQotICAgICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAotICAgICBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KLSAgICAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAotICAgICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KLSAtLT4KLQotPHJlc291cmNlcyB4bWxuczphbmRyb2lkPSJodHRwOi8vc2NoZW1hcy5hbmRyb2lkLmNvbS9hcGsvcmVzL2FuZHJvaWQiCi0gICAgeG1sbnM6eGxpZmY9InVybjpvYXNpczpuYW1lczp0Yzp4bGlmZjpkb2N1bWVudDoxLjIiPgotICAgIDxzdHJpbmcgbmFtZT0ibXJfc3lzdGVtX3JvdXRlX25hbWUiIG1zZ2lkPSI1NDQxNTI5ODUxNDgxMTc2ODE3Ij4iU2lzdGVtIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibXJfdXNlcl9yb3V0ZV9jYXRlZ29yeV9uYW1lIiBtc2dpZD0iNzQ5ODExMjkwNzUyNDk3NzMxMSI+IlBlcmFuZ2thdCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im1yX2J1dHRvbl9jb250ZW50X2Rlc2NyaXB0aW9uIiBtc2dpZD0iMzY5ODM3ODA4NTkwMTQ2NjEyOSI+IlRvbWJvbCBDYXN0Ijwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibXJfY2FzdF9idXR0b25fZGlzY29ubmVjdGVkIiBtc2dpZD0iODE2MzA1NDkwNDI3ODE5MjQwIj4iVG9tYm9sIENhc3QuIFRlcnB1dHVzIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibXJfY2FzdF9idXR0b25fY29ubmVjdGluZyIgbXNnaWQ9IjIxODc2NDI3NjUwOTE4NzM4MzQiPiJUb21ib2wgQ2FzdC4gTWVuZ2h1YnVuZ2thbiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im1yX2Nhc3RfYnV0dG9uX2Nvbm5lY3RlZCIgbXNnaWQ9IjUwODg0Mjc3NzE3ODg2NDgwODUiPiJUb21ib2wgQ2FzdC4gVGVyaHVidW5nIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibXJfY2hvb3Nlcl90aXRsZSIgbXNnaWQ9IjQxNDMwMTk0MTU0NjEzNTk5MCI+IlRyYW5zbWlzaWthbiBrZSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im1yX2Nob29zZXJfc2VhcmNoaW5nIiBtc2dpZD0iNjM0OTkwMDU3OTUwNzUyMTk1NiI+Ik1lbmNhcmkgcGVyYW5na2F0Ijwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibXJfY29udHJvbGxlcl9kaXNjb25uZWN0IiBtc2dpZD0iMTIyNzI2NDg4OTQxMjk4OTU4MCI+IlB1dHVza2FuIHNhbWJ1bmdhbiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im1yX2NvbnRyb2xsZXJfc3RvcF9jYXN0aW5nIiBtc2dpZD0iODg1Nzg4Njc5NDA4NjU4MzIyNiI+IkhlbnRpa2FuIGNhc3QiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJtcl9jb250cm9sbGVyX2Nsb3NlX2Rlc2NyaXB0aW9uIiBtc2dpZD0iNzMzMzg2MjMxMjQ4MDU4MzI2MCI+IlR1dHVwIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibXJfY29udHJvbGxlcl9wbGF5IiBtc2dpZD0iNjgzNjM0NTY1OTY5OTg3NDU4Ij4iUHV0YXIiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJtcl9jb250cm9sbGVyX3BhdXNlIiBtc2dpZD0iNTQ1MTg4NDQzNTUxMDkwNTQwNiI+IkplZGEiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJtcl9jb250cm9sbGVyX3N0b3AiIG1zZ2lkPSI3MzU4NzQ2NDE5MjE0MjUxMjMiPiJCZXJoZW50aSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im1yX2NvbnRyb2xsZXJfZXhwYW5kX2dyb3VwIiBtc2dpZD0iODA2MjQyNzAyMjc0NDI2NjkwNyI+Ikx1YXNrYW4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJtcl9jb250cm9sbGVyX2NvbGxhcHNlX2dyb3VwIiBtc2dpZD0iNzkyNDgwOTA1NjkwNDI0MDkyNiI+IkNpdXRrYW4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJtcl9jb250cm9sbGVyX2FsYnVtX2FydCIgbXNnaWQ9IjY0MjI4MDE4NDM1NDA1NDM1ODUiPiJTYW1wdWwgYWxidW0iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJtcl9jb250cm9sbGVyX3ZvbHVtZV9zbGlkZXIiIG1zZ2lkPSIyMzYxNzg1OTkyMjExODQxNzA5Ij4iQmlsYWggZ2VzZXIgdm9sdW1lIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibXJfY29udHJvbGxlcl9ub19tZWRpYV9zZWxlY3RlZCIgbXNnaWQ9IjY1NDcxMzAzNjAzNDkxODIzODEiPiJUaWRhayBhZGEgbWVkaWEgeWFuZyBkaXBpbGloIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibXJfY29udHJvbGxlcl9ub19pbmZvX2F2YWlsYWJsZSIgbXNnaWQ9IjU1ODU0MTg0NzE3NDExNDI5MjQiPiJUaWRhayBhZGEgaW5mbyB5YW5nIHRlcnNlZGlhIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibXJfY29udHJvbGxlcl9jYXN0aW5nX3NjcmVlbiIgbXNnaWQ9IjQ4Njg0NTc5NTcxNTExMjQ4NjciPiJUcmFuc21pc2kgbGF5YXIiPC9zdHJpbmc+Ci08L3Jlc291cmNlcz4KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL01lZGlhQ29tcG9uZW50cy9yZXMvdmFsdWVzLWlzL3N0cmluZ3MueG1sIGIvcGFja2FnZXMvTWVkaWFDb21wb25lbnRzL3Jlcy92YWx1ZXMtaXMvc3RyaW5ncy54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDZhMzVlYTYuLjAwMDAwMDAKLS0tIGEvcGFja2FnZXMvTWVkaWFDb21wb25lbnRzL3Jlcy92YWx1ZXMtaXMvc3RyaW5ncy54bWwKKysrIC9kZXYvbnVsbApAQCAtMSw0MCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPCEtLSAgQ29weXJpZ2h0IDIwMTggVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAotCi0gICAgIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwotICAgICB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCi0gICAgIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotCi0gICAgICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0KLSAgICAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQotICAgICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAotICAgICBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KLSAgICAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAotICAgICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KLSAtLT4KLQotPHJlc291cmNlcyB4bWxuczphbmRyb2lkPSJodHRwOi8vc2NoZW1hcy5hbmRyb2lkLmNvbS9hcGsvcmVzL2FuZHJvaWQiCi0gICAgeG1sbnM6eGxpZmY9InVybjpvYXNpczpuYW1lczp0Yzp4bGlmZjpkb2N1bWVudDoxLjIiPgotICAgIDxzdHJpbmcgbmFtZT0ibXJfc3lzdGVtX3JvdXRlX25hbWUiIG1zZ2lkPSI1NDQxNTI5ODUxNDgxMTc2ODE3Ij4iS2VyZmkiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJtcl91c2VyX3JvdXRlX2NhdGVnb3J5X25hbWUiIG1zZ2lkPSI3NDk4MTEyOTA3NTI0OTc3MzExIj4iVMOma2kiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJtcl9idXR0b25fY29udGVudF9kZXNjcmlwdGlvbiIgbXNnaWQ9IjM2OTgzNzgwODU5MDE0NjYxMjkiPiLDmnRzZW5kaW5nYXJobmFwcHVyIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibXJfY2FzdF9idXR0b25fZGlzY29ubmVjdGVkIiBtc2dpZD0iODE2MzA1NDkwNDI3ODE5MjQwIj4iw5p0c2VuZGluZ2FyaG5hcHB1ci4gQWZ0ZW5ndCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im1yX2Nhc3RfYnV0dG9uX2Nvbm5lY3RpbmciIG1zZ2lkPSIyMTg3NjQyNzY1MDkxODczODM0Ij4iw5p0c2VuZGluZ2FyaG5hcHB1ci4gVGVuZ2lzdCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im1yX2Nhc3RfYnV0dG9uX2Nvbm5lY3RlZCIgbXNnaWQ9IjUwODg0Mjc3NzE3ODg2NDgwODUiPiLDmnRzZW5kaW5nYXJobmFwcHVyLiBUZW5ndCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im1yX2Nob29zZXJfdGl0bGUiIG1zZ2lkPSI0MTQzMDE5NDE1NDYxMzU5OTAiPiJTZW5kYSDDunQgw60iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJtcl9jaG9vc2VyX3NlYXJjaGluZyIgbXNnaWQ9IjYzNDk5MDA1Nzk1MDc1MjE5NTYiPiJMZWl0YcOwIGHDsCB0w6ZranVtIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibXJfY29udHJvbGxlcl9kaXNjb25uZWN0IiBtc2dpZD0iMTIyNzI2NDg4OTQxMjk4OTU4MCI+IkFmdGVuZ2phc3QiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJtcl9jb250cm9sbGVyX3N0b3BfY2FzdGluZyIgbXNnaWQ9Ijg4NTc4ODY3OTQwODY1ODMyMjYiPiJTdMO2w7B2YSDDunRzZW5kaW5ndSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im1yX2NvbnRyb2xsZXJfY2xvc2VfZGVzY3JpcHRpb24iIG1zZ2lkPSI3MzMzODYyMzEyNDgwNTgzMjYwIj4iTG9rYSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im1yX2NvbnRyb2xsZXJfcGxheSIgbXNnaWQ9IjY4MzYzNDU2NTk2OTk4NzQ1OCI+IlNwaWxhIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibXJfY29udHJvbGxlcl9wYXVzZSIgbXNnaWQ9IjU0NTE4ODQ0MzU1MTA5MDU0MDYiPiJIbMOpIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibXJfY29udHJvbGxlcl9zdG9wIiBtc2dpZD0iNzM1ODc0NjQxOTIxNDI1MTIzIj4iU3TDtsOwdmEiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJtcl9jb250cm9sbGVyX2V4cGFuZF9ncm91cCIgbXNnaWQ9IjgwNjI0MjcwMjI3NDQyNjY5MDciPiJTdMOma2thIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibXJfY29udHJvbGxlcl9jb2xsYXBzZV9ncm91cCIgbXNnaWQ9Ijc5MjQ4MDkwNTY5MDQyNDA5MjYiPiJNaW5ua2EiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJtcl9jb250cm9sbGVyX2FsYnVtX2FydCIgbXNnaWQ9IjY0MjI4MDE4NDM1NDA1NDM1ODUiPiJQbMO2dHV1bXNsYWciPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJtcl9jb250cm9sbGVyX3ZvbHVtZV9zbGlkZXIiIG1zZ2lkPSIyMzYxNzg1OTkyMjExODQxNzA5Ij4iSGxqw7PDsHN0eXJrc3NsZcOwaSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im1yX2NvbnRyb2xsZXJfbm9fbWVkaWFfc2VsZWN0ZWQiIG1zZ2lkPSI2NTQ3MTMwMzYwMzQ5MTgyMzgxIj4iRW5naW5uIG1pw7BpbGwgdmFsaW5uIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibXJfY29udHJvbGxlcl9ub19pbmZvX2F2YWlsYWJsZSIgbXNnaWQ9IjU1ODU0MTg0NzE3NDExNDI5MjQiPiJFbmdhciB1cHBsw71zaW5nYXIgw60gYm/DsGkiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJtcl9jb250cm9sbGVyX2Nhc3Rpbmdfc2NyZWVuIiBtc2dpZD0iNDg2ODQ1Nzk1NzE1MTEyNDg2NyI+IlNrasOhciBzZW5kdXIgw7p0Ijwvc3RyaW5nPgotPC9yZXNvdXJjZXM+CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9NZWRpYUNvbXBvbmVudHMvcmVzL3ZhbHVlcy1pdC9zdHJpbmdzLnhtbCBiL3BhY2thZ2VzL01lZGlhQ29tcG9uZW50cy9yZXMvdmFsdWVzLWl0L3N0cmluZ3MueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3MTZlM2FjLi4wMDAwMDAwCi0tLSBhL3BhY2thZ2VzL01lZGlhQ29tcG9uZW50cy9yZXMvdmFsdWVzLWl0L3N0cmluZ3MueG1sCisrKyAvZGV2L251bGwKQEAgLTEsNDAgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTwhLS0gIENvcHlyaWdodCAyMDE4IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKLQotICAgICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKLSAgICAgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgotICAgICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLQotICAgICAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotCi0gICAgIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKLSAgICAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKLSAgICAgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCi0gICAgIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKLSAgICAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCi0gLS0+Ci0KLTxyZXNvdXJjZXMgeG1sbnM6YW5kcm9pZD0iaHR0cDovL3NjaGVtYXMuYW5kcm9pZC5jb20vYXBrL3Jlcy9hbmRyb2lkIgotICAgIHhtbG5zOnhsaWZmPSJ1cm46b2FzaXM6bmFtZXM6dGM6eGxpZmY6ZG9jdW1lbnQ6MS4yIj4KLSAgICA8c3RyaW5nIG5hbWU9Im1yX3N5c3RlbV9yb3V0ZV9uYW1lIiBtc2dpZD0iNTQ0MTUyOTg1MTQ4MTE3NjgxNyI+IlNpc3RlbWEiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJtcl91c2VyX3JvdXRlX2NhdGVnb3J5X25hbWUiIG1zZ2lkPSI3NDk4MTEyOTA3NTI0OTc3MzExIj4iRGlzcG9zaXRpdmkiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJtcl9idXR0b25fY29udGVudF9kZXNjcmlwdGlvbiIgbXNnaWQ9IjM2OTgzNzgwODU5MDE0NjYxMjkiPiJQdWxzYW50ZSBUcmFzbWV0dGkiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJtcl9jYXN0X2J1dHRvbl9kaXNjb25uZWN0ZWQiIG1zZ2lkPSI4MTYzMDU0OTA0Mjc4MTkyNDAiPiJQdWxzYW50ZSBUcmFzbWV0dGkuIERpc2Nvbm5lc3NvIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibXJfY2FzdF9idXR0b25fY29ubmVjdGluZyIgbXNnaWQ9IjIxODc2NDI3NjUwOTE4NzM4MzQiPiJQdWxzYW50ZSBUcmFzbWV0dGkuIENvbm5lc3Npb25lIGluIGNvcnNvIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibXJfY2FzdF9idXR0b25fY29ubmVjdGVkIiBtc2dpZD0iNTA4ODQyNzc3MTc4ODY0ODA4NSI+IlB1bHNhbnRlIFRyYXNtZXR0aS4gQ29ubmVzc28iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJtcl9jaG9vc2VyX3RpdGxlIiBtc2dpZD0iNDE0MzAxOTQxNTQ2MTM1OTkwIj4iVHJhc21ldHRpIGEiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJtcl9jaG9vc2VyX3NlYXJjaGluZyIgbXNnaWQ9IjYzNDk5MDA1Nzk1MDc1MjE5NTYiPiJSaWNlcmNhIGRpIGRpc3Bvc2l0aXZpIGluIGNvcnNvIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibXJfY29udHJvbGxlcl9kaXNjb25uZWN0IiBtc2dpZD0iMTIyNzI2NDg4OTQxMjk4OTU4MCI+IlNjb2xsZWdhIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibXJfY29udHJvbGxlcl9zdG9wX2Nhc3RpbmciIG1zZ2lkPSI4ODU3ODg2Nzk0MDg2NTgzMjI2Ij4iSW50ZXJyb21waSB0cmFzbWlzc2lvbmUiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJtcl9jb250cm9sbGVyX2Nsb3NlX2Rlc2NyaXB0aW9uIiBtc2dpZD0iNzMzMzg2MjMxMjQ4MDU4MzI2MCI+IkNoaXVkaSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im1yX2NvbnRyb2xsZXJfcGxheSIgbXNnaWQ9IjY4MzYzNDU2NTk2OTk4NzQ1OCI+IlJpcHJvZHVjaSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im1yX2NvbnRyb2xsZXJfcGF1c2UiIG1zZ2lkPSI1NDUxODg0NDM1NTEwOTA1NDA2Ij4iUGF1c2EiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJtcl9jb250cm9sbGVyX3N0b3AiIG1zZ2lkPSI3MzU4NzQ2NDE5MjE0MjUxMjMiPiJJbnRlcnJvbXBpIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibXJfY29udHJvbGxlcl9leHBhbmRfZ3JvdXAiIG1zZ2lkPSI4MDYyNDI3MDIyNzQ0MjY2OTA3Ij4iRXNwYW5kaSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im1yX2NvbnRyb2xsZXJfY29sbGFwc2VfZ3JvdXAiIG1zZ2lkPSI3OTI0ODA5MDU2OTA0MjQwOTI2Ij4iQ29tcHJpbWkiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJtcl9jb250cm9sbGVyX2FsYnVtX2FydCIgbXNnaWQ9IjY0MjI4MDE4NDM1NDA1NDM1ODUiPiJDb3BlcnRpbmEiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJtcl9jb250cm9sbGVyX3ZvbHVtZV9zbGlkZXIiIG1zZ2lkPSIyMzYxNzg1OTkyMjExODQxNzA5Ij4iRGlzcG9zaXRpdm8gZGkgc2NvcnJpbWVudG8gZGVsIHZvbHVtZSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im1yX2NvbnRyb2xsZXJfbm9fbWVkaWFfc2VsZWN0ZWQiIG1zZ2lkPSI2NTQ3MTMwMzYwMzQ5MTgyMzgxIj4iTmVzc3VuIGNvbnRlbnV0byBtdWx0aW1lZGlhbGUgc2VsZXppb25hdG8iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJtcl9jb250cm9sbGVyX25vX2luZm9fYXZhaWxhYmxlIiBtc2dpZD0iNTU4NTQxODQ3MTc0MTE0MjkyNCI+Ik5lc3N1bmEgaW5mb3JtYXppb25lIGRpc3BvbmliaWxlIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibXJfY29udHJvbGxlcl9jYXN0aW5nX3NjcmVlbiIgbXNnaWQ9IjQ4Njg0NTc5NTcxNTExMjQ4NjciPiJUcmFzbWlzc2lvbmUgZGVsbG8gc2NoZXJtbyBpbiBjb3JzbyI8L3N0cmluZz4KLTwvcmVzb3VyY2VzPgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvTWVkaWFDb21wb25lbnRzL3Jlcy92YWx1ZXMtaXcvc3RyaW5ncy54bWwgYi9wYWNrYWdlcy9NZWRpYUNvbXBvbmVudHMvcmVzL3ZhbHVlcy1pdy9zdHJpbmdzLnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjUyYjBjZS4uMDAwMDAwMAotLS0gYS9wYWNrYWdlcy9NZWRpYUNvbXBvbmVudHMvcmVzL3ZhbHVlcy1pdy9zdHJpbmdzLnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDQwICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08IS0tICBDb3B5cmlnaHQgMjAxOCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0Ci0KLSAgICAgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7Ci0gICAgIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KLSAgICAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0KLSAgICAgICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLQotICAgICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCi0gICAgIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCi0gICAgIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgotICAgICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCi0gICAgIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgotIC0tPgotCi08cmVzb3VyY2VzIHhtbG5zOmFuZHJvaWQ9Imh0dHA6Ly9zY2hlbWFzLmFuZHJvaWQuY29tL2Fway9yZXMvYW5kcm9pZCIKLSAgICB4bWxuczp4bGlmZj0idXJuOm9hc2lzOm5hbWVzOnRjOnhsaWZmOmRvY3VtZW50OjEuMiI+Ci0gICAgPHN0cmluZyBuYW1lPSJtcl9zeXN0ZW1fcm91dGVfbmFtZSIgbXNnaWQ9IjU0NDE1Mjk4NTE0ODExNzY4MTciPiLXntei16jXm9eqIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibXJfdXNlcl9yb3V0ZV9jYXRlZ29yeV9uYW1lIiBtc2dpZD0iNzQ5ODExMjkwNzUyNDk3NzMxMSI+Itee15vXqdeZ16jXmdedIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibXJfYnV0dG9uX2NvbnRlbnRfZGVzY3JpcHRpb24iIG1zZ2lkPSIzNjk4Mzc4MDg1OTAxNDY2MTI5Ij4i4oCP15zXl9em158g15TXpNei15zXqiBDYXN0Ijwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibXJfY2FzdF9idXR0b25fZGlzY29ubmVjdGVkIiBtc2dpZD0iODE2MzA1NDkwNDI3ODE5MjQwIj4i4oCP15zXl9em158g15TXpNei15zXqiBDYXN0LiDXnteg15XXqtenIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibXJfY2FzdF9idXR0b25fY29ubmVjdGluZyIgbXNnaWQ9IjIxODc2NDI3NjUwOTE4NzM4MzQiPiLigI/XnNeX16bXnyDXlNek16LXnNeqIENhc3QuINee16rXl9eR16giPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJtcl9jYXN0X2J1dHRvbl9jb25uZWN0ZWQiIG1zZ2lkPSI1MDg4NDI3NzcxNzg4NjQ4MDg1Ij4i4oCP15zXl9em158g15TXpNei15zXqiBDYXN0LiDXnteX15XXkdeoIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibXJfY2hvb3Nlcl90aXRsZSIgbXNnaWQ9IjQxNDMwMTk0MTU0NjEzNTk5MCI+IteU16LXkdeo15Qg15DXnCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im1yX2Nob29zZXJfc2VhcmNoaW5nIiBtc2dpZD0iNjM0OTkwMDU3OTUwNzUyMTk1NiI+Itee15fXpNepINee15vXqdeZ16jXmdedIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibXJfY29udHJvbGxlcl9kaXNjb25uZWN0IiBtc2dpZD0iMTIyNzI2NDg4OTQxMjk4OTU4MCI+Iteg16rXpyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im1yX2NvbnRyb2xsZXJfc3RvcF9jYXN0aW5nIiBtc2dpZD0iODg1Nzg4Njc5NDA4NjU4MzIyNiI+IteU16TXodenINeQ16og15TXlNei15HXqNeUIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibXJfY29udHJvbGxlcl9jbG9zZV9kZXNjcmlwdGlvbiIgbXNnaWQ9IjczMzM4NjIzMTI0ODA1ODMyNjAiPiLXodeS15XXqCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im1yX2NvbnRyb2xsZXJfcGxheSIgbXNnaWQ9IjY4MzYzNDU2NTk2OTk4NzQ1OCI+IteU16TXotecIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibXJfY29udHJvbGxlcl9wYXVzZSIgbXNnaWQ9IjU0NTE4ODQ0MzU1MTA5MDU0MDYiPiLXlNep15TXlCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im1yX2NvbnRyb2xsZXJfc3RvcCIgbXNnaWQ9IjczNTg3NDY0MTkyMTQyNTEyMyI+IteU16TXodenIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibXJfY29udHJvbGxlcl9leHBhbmRfZ3JvdXAiIG1zZ2lkPSI4MDYyNDI3MDIyNzQ0MjY2OTA3Ij4i15TXqNeX15EiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJtcl9jb250cm9sbGVyX2NvbGxhcHNlX2dyb3VwIiBtc2dpZD0iNzkyNDgwOTA1NjkwNDI0MDkyNiI+Iteb15XXldelIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibXJfY29udHJvbGxlcl9hbGJ1bV9hcnQiIG1zZ2lkPSI2NDIyODAxODQzNTQwNTQzNTg1Ij4i16LXmNeZ16TXqiDXkNec15HXldedIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibXJfY29udHJvbGxlcl92b2x1bWVfc2xpZGVyIiBtc2dpZD0iMjM2MTc4NTk5MjIxMTg0MTcwOSI+Itee15fXldeV158g16LXldem157XlCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im1yX2NvbnRyb2xsZXJfbm9fbWVkaWFfc2VsZWN0ZWQiIG1zZ2lkPSI2NTQ3MTMwMzYwMzQ5MTgyMzgxIj4i15zXkCDXoNeR15fXqNeUINee15PXmdeUIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibXJfY29udHJvbGxlcl9ub19pbmZvX2F2YWlsYWJsZSIgbXNnaWQ9IjU1ODU0MTg0NzE3NDExNDI5MjQiPiLXkNeZ158g157XmdeT16Ig15bXnteZ158iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJtcl9jb250cm9sbGVyX2Nhc3Rpbmdfc2NyZWVuIiBtc2dpZD0iNDg2ODQ1Nzk1NzE1MTEyNDg2NyI+IteU16LXkdeo16og157XodeaINee16rXkdem16LXqiI8L3N0cmluZz4KLTwvcmVzb3VyY2VzPgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvTWVkaWFDb21wb25lbnRzL3Jlcy92YWx1ZXMtamEvc3RyaW5ncy54bWwgYi9wYWNrYWdlcy9NZWRpYUNvbXBvbmVudHMvcmVzL3ZhbHVlcy1qYS9zdHJpbmdzLnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTE0OTcyNy4uMDAwMDAwMAotLS0gYS9wYWNrYWdlcy9NZWRpYUNvbXBvbmVudHMvcmVzL3ZhbHVlcy1qYS9zdHJpbmdzLnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDQwICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08IS0tICBDb3B5cmlnaHQgMjAxOCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0Ci0KLSAgICAgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7Ci0gICAgIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KLSAgICAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0KLSAgICAgICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLQotICAgICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCi0gICAgIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCi0gICAgIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgotICAgICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCi0gICAgIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgotIC0tPgotCi08cmVzb3VyY2VzIHhtbG5zOmFuZHJvaWQ9Imh0dHA6Ly9zY2hlbWFzLmFuZHJvaWQuY29tL2Fway9yZXMvYW5kcm9pZCIKLSAgICB4bWxuczp4bGlmZj0idXJuOm9hc2lzOm5hbWVzOnRjOnhsaWZmOmRvY3VtZW50OjEuMiI+Ci0gICAgPHN0cmluZyBuYW1lPSJtcl9zeXN0ZW1fcm91dGVfbmFtZSIgbXNnaWQ9IjU0NDE1Mjk4NTE0ODExNzY4MTciPiLjgrfjgrnjg4bjg6AiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJtcl91c2VyX3JvdXRlX2NhdGVnb3J5X25hbWUiIG1zZ2lkPSI3NDk4MTEyOTA3NTI0OTc3MzExIj4i56uv5pyrIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibXJfYnV0dG9uX2NvbnRlbnRfZGVzY3JpcHRpb24iIG1zZ2lkPSIzNjk4Mzc4MDg1OTAxNDY2MTI5Ij4i44Kt44Oj44K544OI44Ki44Kk44Kz44OzIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibXJfY2FzdF9idXR0b25fZGlzY29ubmVjdGVkIiBtc2dpZD0iODE2MzA1NDkwNDI3ODE5MjQwIj4i44Kt44Oj44K544OIIOOCouOCpOOCs+ODs+OAguaOpee2muino+mZpOa4iOOBvyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im1yX2Nhc3RfYnV0dG9uX2Nvbm5lY3RpbmciIG1zZ2lkPSIyMTg3NjQyNzY1MDkxODczODM0Ij4i44Kt44Oj44K544OIIOOCouOCpOOCs+ODs+OAguaOpee2muS4rSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im1yX2Nhc3RfYnV0dG9uX2Nvbm5lY3RlZCIgbXNnaWQ9IjUwODg0Mjc3NzE3ODg2NDgwODUiPiLjgq3jg6Pjgrnjg4gg44Ki44Kk44Kz44Oz44CC5o6l57aa5riI44G/Ijwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibXJfY2hvb3Nlcl90aXRsZSIgbXNnaWQ9IjQxNDMwMTk0MTU0NjEzNTk5MCI+IuOCreODo+OCueODiOOBmeOCi+ODh+ODkOOCpOOCuSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im1yX2Nob29zZXJfc2VhcmNoaW5nIiBtc2dpZD0iNjM0OTkwMDU3OTUwNzUyMTk1NiI+Iuerr+acq+OCkuaknOe0ouOBl+OBpuOBhOOBvuOBmSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im1yX2NvbnRyb2xsZXJfZGlzY29ubmVjdCIgbXNnaWQ9IjEyMjcyNjQ4ODk0MTI5ODk1ODAiPiLmjqXntprjgpLop6PpmaQiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJtcl9jb250cm9sbGVyX3N0b3BfY2FzdGluZyIgbXNnaWQ9Ijg4NTc4ODY3OTQwODY1ODMyMjYiPiLjgq3jg6Pjgrnjg4jjgpLlgZzmraIiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJtcl9jb250cm9sbGVyX2Nsb3NlX2Rlc2NyaXB0aW9uIiBtc2dpZD0iNzMzMzg2MjMxMjQ4MDU4MzI2MCI+IumWieOBmOOCiyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im1yX2NvbnRyb2xsZXJfcGxheSIgbXNnaWQ9IjY4MzYzNDU2NTk2OTk4NzQ1OCI+IuWGjeeUnyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im1yX2NvbnRyb2xsZXJfcGF1c2UiIG1zZ2lkPSI1NDUxODg0NDM1NTEwOTA1NDA2Ij4i5LiA5pmC5YGc5q2iIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibXJfY29udHJvbGxlcl9zdG9wIiBtc2dpZD0iNzM1ODc0NjQxOTIxNDI1MTIzIj4i5YGc5q2iIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibXJfY29udHJvbGxlcl9leHBhbmRfZ3JvdXAiIG1zZ2lkPSI4MDYyNDI3MDIyNzQ0MjY2OTA3Ij4i5bGV6ZaLIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibXJfY29udHJvbGxlcl9jb2xsYXBzZV9ncm91cCIgbXNnaWQ9Ijc5MjQ4MDkwNTY5MDQyNDA5MjYiPiLmipjjgorjgZ/jgZ/jgoAiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJtcl9jb250cm9sbGVyX2FsYnVtX2FydCIgbXNnaWQ9IjY0MjI4MDE4NDM1NDA1NDM1ODUiPiLjgqLjg6vjg5Djg6DjgqLjg7zjg4giPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJtcl9jb250cm9sbGVyX3ZvbHVtZV9zbGlkZXIiIG1zZ2lkPSIyMzYxNzg1OTkyMjExODQxNzA5Ij4i6Z+z6YeP44K544Op44Kk44OA44O8Ijwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibXJfY29udHJvbGxlcl9ub19tZWRpYV9zZWxlY3RlZCIgbXNnaWQ9IjY1NDcxMzAzNjAzNDkxODIzODEiPiLjg6Hjg4fjgqPjgqLjgYzpgbjmip7jgZXjgozjgabjgYTjgb7jgZvjgpMiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJtcl9jb250cm9sbGVyX25vX2luZm9fYXZhaWxhYmxlIiBtc2dpZD0iNTU4NTQxODQ3MTc0MTE0MjkyNCI+IuaDheWgseOBjOOBguOCiuOBvuOBm+OCkyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im1yX2NvbnRyb2xsZXJfY2FzdGluZ19zY3JlZW4iIG1zZ2lkPSI0ODY4NDU3OTU3MTUxMTI0ODY3Ij4i55S76Z2i44KS44Kt44Oj44K544OI44GX44Gm44GE44G+44GZIjwvc3RyaW5nPgotPC9yZXNvdXJjZXM+CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9NZWRpYUNvbXBvbmVudHMvcmVzL3ZhbHVlcy1rYS9zdHJpbmdzLnhtbCBiL3BhY2thZ2VzL01lZGlhQ29tcG9uZW50cy9yZXMvdmFsdWVzLWthL3N0cmluZ3MueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzZGEwODFhLi4wMDAwMDAwCi0tLSBhL3BhY2thZ2VzL01lZGlhQ29tcG9uZW50cy9yZXMvdmFsdWVzLWthL3N0cmluZ3MueG1sCisrKyAvZGV2L251bGwKQEAgLTEsNDAgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTwhLS0gIENvcHlyaWdodCAyMDE4IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKLQotICAgICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKLSAgICAgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgotICAgICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLQotICAgICAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotCi0gICAgIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKLSAgICAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKLSAgICAgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCi0gICAgIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKLSAgICAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCi0gLS0+Ci0KLTxyZXNvdXJjZXMgeG1sbnM6YW5kcm9pZD0iaHR0cDovL3NjaGVtYXMuYW5kcm9pZC5jb20vYXBrL3Jlcy9hbmRyb2lkIgotICAgIHhtbG5zOnhsaWZmPSJ1cm46b2FzaXM6bmFtZXM6dGM6eGxpZmY6ZG9jdW1lbnQ6MS4yIj4KLSAgICA8c3RyaW5nIG5hbWU9Im1yX3N5c3RlbV9yb3V0ZV9uYW1lIiBtc2dpZD0iNTQ0MTUyOTg1MTQ4MTE3NjgxNyI+IuGDoeGDmOGDoeGDouGDlOGDm+GDkCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im1yX3VzZXJfcm91dGVfY2F0ZWdvcnlfbmFtZSIgbXNnaWQ9Ijc0OTgxMTI5MDc1MjQ5NzczMTEiPiLhg5vhg53hg6zhg6fhg53hg5Hhg5jhg5rhg53hg5Hhg5Thg5Hhg5giPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJtcl9idXR0b25fY29udGVudF9kZXNjcmlwdGlvbiIgbXNnaWQ9IjM2OTgzNzgwODU5MDE0NjYxMjkiPiLhg6Lhg6Dhg5Dhg5zhg6Hhg5rhg5jhg6Dhg5Thg5Hhg5jhg6Eg4YOm4YOY4YOa4YOQ4YOZ4YOYIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibXJfY2FzdF9idXR0b25fZGlzY29ubmVjdGVkIiBtc2dpZD0iODE2MzA1NDkwNDI3ODE5MjQwIj4i4YOi4YOg4YOQ4YOc4YOh4YOa4YOY4YOg4YOU4YOR4YOY4YOhIOGDpuGDmOGDmuGDkOGDmeGDmC4g4YOS4YOQ4YOX4YOY4YOo4YOj4YOa4YOYIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibXJfY2FzdF9idXR0b25fY29ubmVjdGluZyIgbXNnaWQ9IjIxODc2NDI3NjUwOTE4NzM4MzQiPiLhg6Lhg6Dhg5Dhg5zhg6Hhg5rhg5jhg6Dhg5Thg5Hhg5jhg6Eg4YOm4YOY4YOa4YOQ4YOZ4YOYLiDhg5vhg5jhg5vhg5Phg5jhg5zhg5Dhg6Dhg5Thg53hg5Hhg6Eg4YOT4YOQ4YOZ4YOQ4YOV4YOo4YOY4YOg4YOU4YOR4YOQIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibXJfY2FzdF9idXR0b25fY29ubmVjdGVkIiBtc2dpZD0iNTA4ODQyNzc3MTc4ODY0ODA4NSI+IuGDouGDoOGDkOGDnOGDoeGDmuGDmOGDoOGDlOGDkeGDmOGDoSDhg6bhg5jhg5rhg5Dhg5nhg5guIOGDk+GDkOGDmeGDkOGDleGDqOGDmOGDoOGDlOGDkeGDo+GDmuGDmCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im1yX2Nob29zZXJfdGl0bGUiIG1zZ2lkPSI0MTQzMDE5NDE1NDYxMzU5OTAiPiLhg6Lhg6Dhg5Dhg5zhg6Hhg5rhg5jhg6Dhg5Thg5Hhg5A6Ijwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibXJfY2hvb3Nlcl9zZWFyY2hpbmciIG1zZ2lkPSI2MzQ5OTAwNTc5NTA3NTIxOTU2Ij4i4YOb4YOd4YOs4YOn4YOd4YOR4YOY4YOa4YOd4YOR4YOU4YOR4YOY4YOhIOGDm+GDneGDq+GDmOGDlOGDkeGDkC4uLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im1yX2NvbnRyb2xsZXJfZGlzY29ubmVjdCIgbXNnaWQ9IjEyMjcyNjQ4ODk0MTI5ODk1ODAiPiLhg5nhg5Dhg5Xhg6jhg5jhg6Dhg5jhg6Eg4YOS4YOQ4YOs4YOn4YOV4YOU4YOi4YOQIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibXJfY29udHJvbGxlcl9zdG9wX2Nhc3RpbmciIG1zZ2lkPSI4ODU3ODg2Nzk0MDg2NTgzMjI2Ij4i4YOi4YOg4YOQ4YOc4YOh4YOa4YOY4YOg4YOU4YOR4YOY4YOhIOGDqOGDlOGDrOGDp+GDleGDlOGDouGDkCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im1yX2NvbnRyb2xsZXJfY2xvc2VfZGVzY3JpcHRpb24iIG1zZ2lkPSI3MzMzODYyMzEyNDgwNTgzMjYwIj4i4YOT4YOQ4YOu4YOj4YOg4YOV4YOQIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibXJfY29udHJvbGxlcl9wbGF5IiBtc2dpZD0iNjgzNjM0NTY1OTY5OTg3NDU4Ij4i4YOT4YOQ4YOZ4YOV4YOg4YOQIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibXJfY29udHJvbGxlcl9wYXVzZSIgbXNnaWQ9IjU0NTE4ODQ0MzU1MTA5MDU0MDYiPiLhg57hg5Dhg6Phg5bhg5AiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJtcl9jb250cm9sbGVyX3N0b3AiIG1zZ2lkPSI3MzU4NzQ2NDE5MjE0MjUxMjMiPiLhg6jhg5Thg6zhg6fhg5Xhg5Thg6Lhg5AiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJtcl9jb250cm9sbGVyX2V4cGFuZF9ncm91cCIgbXNnaWQ9IjgwNjI0MjcwMjI3NDQyNjY5MDciPiLhg5Lhg5Dhg6jhg5rhg5AiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJtcl9jb250cm9sbGVyX2NvbGxhcHNlX2dyb3VwIiBtc2dpZD0iNzkyNDgwOTA1NjkwNDI0MDkyNiI+IuGDqeGDkOGDmeGDlOGDquGDleGDkCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im1yX2NvbnRyb2xsZXJfYWxidW1fYXJ0IiBtc2dpZD0iNjQyMjgwMTg0MzU0MDU0MzU4NSI+IuGDkOGDmuGDkeGDneGDm+GDmOGDoSDhg5Lhg5Dhg6Dhg5Thg5nhg5Dhg5zhg5giPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJtcl9jb250cm9sbGVyX3ZvbHVtZV9zbGlkZXIiIG1zZ2lkPSIyMzYxNzg1OTkyMjExODQxNzA5Ij4i4YOu4YOb4YOY4YOhIOGDoeGDmuGDkOGDmOGDk+GDlOGDoOGDmCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im1yX2NvbnRyb2xsZXJfbm9fbWVkaWFfc2VsZWN0ZWQiIG1zZ2lkPSI2NTQ3MTMwMzYwMzQ5MTgyMzgxIj4i4YOb4YOU4YOT4YOY4YOQIOGDkOGDoOGDqeGDlOGDo+GDmuGDmCDhg5Dhg6Ag4YOQ4YOg4YOY4YOhIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibXJfY29udHJvbGxlcl9ub19pbmZvX2F2YWlsYWJsZSIgbXNnaWQ9IjU1ODU0MTg0NzE3NDExNDI5MjQiPiLhg5jhg5zhg6Thg53hg6Dhg5vhg5Dhg6rhg5jhg5Ag4YOQ4YOgIOGDkOGDoOGDmOGDoSDhg67hg5Thg5rhg5vhg5jhg6Hhg5Dhg6zhg5Xhg5Phg53hg5vhg5giPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJtcl9jb250cm9sbGVyX2Nhc3Rpbmdfc2NyZWVuIiBtc2dpZD0iNDg2ODQ1Nzk1NzE1MTEyNDg2NyI+IuGDm+GDmOGDm+GDk+GDmOGDnOGDkOGDoOGDlOGDneGDkeGDoSDhg5Thg5nhg6Dhg5Dhg5zhg5jhg6Eg4YOS4YOQ4YOT4YOQ4YOq4YOU4YOb4YOQIjwvc3RyaW5nPgotPC9yZXNvdXJjZXM+CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9NZWRpYUNvbXBvbmVudHMvcmVzL3ZhbHVlcy1ray9zdHJpbmdzLnhtbCBiL3BhY2thZ2VzL01lZGlhQ29tcG9uZW50cy9yZXMvdmFsdWVzLWtrL3N0cmluZ3MueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5NGRjYmIzLi4wMDAwMDAwCi0tLSBhL3BhY2thZ2VzL01lZGlhQ29tcG9uZW50cy9yZXMvdmFsdWVzLWtrL3N0cmluZ3MueG1sCisrKyAvZGV2L251bGwKQEAgLTEsNDAgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTwhLS0gIENvcHlyaWdodCAyMDE4IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKLQotICAgICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKLSAgICAgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgotICAgICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLQotICAgICAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotCi0gICAgIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKLSAgICAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKLSAgICAgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCi0gICAgIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKLSAgICAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCi0gLS0+Ci0KLTxyZXNvdXJjZXMgeG1sbnM6YW5kcm9pZD0iaHR0cDovL3NjaGVtYXMuYW5kcm9pZC5jb20vYXBrL3Jlcy9hbmRyb2lkIgotICAgIHhtbG5zOnhsaWZmPSJ1cm46b2FzaXM6bmFtZXM6dGM6eGxpZmY6ZG9jdW1lbnQ6MS4yIj4KLSAgICA8c3RyaW5nIG5hbWU9Im1yX3N5c3RlbV9yb3V0ZV9uYW1lIiBtc2dpZD0iNTQ0MTUyOTg1MTQ4MTE3NjgxNyI+ItCW0q/QudC1Ijwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibXJfdXNlcl9yb3V0ZV9jYXRlZ29yeV9uYW1lIiBtc2dpZD0iNzQ5ODExMjkwNzUyNDk3NzMxMSI+ItKa0rHRgNGL0LvSk9GL0LvQsNGAIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibXJfYnV0dG9uX2NvbnRlbnRfZGVzY3JpcHRpb24iIG1zZ2lkPSIzNjk4Mzc4MDg1OTAxNDY2MTI5Ij4i0KLRgNCw0L3RgdC70Y/RhtC40Y/Qu9Cw0YMg0YLSr9C50LzQtdGB0ZYiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJtcl9jYXN0X2J1dHRvbl9kaXNjb25uZWN0ZWQiIG1zZ2lkPSI4MTYzMDU0OTA0Mjc4MTkyNDAiPiJcItCi0YDQsNC90YHQu9GP0YbQuNGP0LvQsNGDXCIg0YLSr9C50LzQtdGB0ZYuINCQ0LbRi9GA0LDRgtGD0LvRiyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im1yX2Nhc3RfYnV0dG9uX2Nvbm5lY3RpbmciIG1zZ2lkPSIyMTg3NjQyNzY1MDkxODczODM0Ij4iXCLQotGA0LDQvdGB0LvRj9GG0LjRj9C70LDRg1wiINGC0q/QudC80LXRgdGWLiDSmtC+0YHRi9C70YPQtNCwIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibXJfY2FzdF9idXR0b25fY29ubmVjdGVkIiBtc2dpZD0iNTA4ODQyNzc3MTc4ODY0ODA4NSI+Ilwi0KLRgNCw0L3RgdC70Y/RhtC40Y/Qu9Cw0YNcIiDRgtKv0LnQvNC10YHRli4g0prQvtGB0YvQu9C00YsiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJtcl9jaG9vc2VyX3RpdGxlIiBtc2dpZD0iNDE0MzAxOTQxNTQ2MTM1OTkwIj4i0JrQtdC70LXRgdGW0LPQtSDRgtGA0LDQvdGB0LvRj9GG0LjRj9C70LDRgyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im1yX2Nob29zZXJfc2VhcmNoaW5nIiBtc2dpZD0iNjM0OTkwMDU3OTUwNzUyMTk1NiI+ItKa0rHRgNGL0LvSk9GL0LvQsNGA0LTRiyDRgtCw0LHRgyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im1yX2NvbnRyb2xsZXJfZGlzY29ubmVjdCIgbXNnaWQ9IjEyMjcyNjQ4ODk0MTI5ODk1ODAiPiLQkNC20YvRgNCw0YLRgyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im1yX2NvbnRyb2xsZXJfc3RvcF9jYXN0aW5nIiBtc2dpZD0iODg1Nzg4Njc5NDA4NjU4MzIyNiI+ItCi0YDQsNC90YHQu9GP0YbQuNGP0LvQsNGD0LTRiyDRgtC+0pvRgtCw0YLRgyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im1yX2NvbnRyb2xsZXJfY2xvc2VfZGVzY3JpcHRpb24iIG1zZ2lkPSI3MzMzODYyMzEyNDgwNTgzMjYwIj4i0JbQsNCx0YMiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJtcl9jb250cm9sbGVyX3BsYXkiIG1zZ2lkPSI2ODM2MzQ1NjU5Njk5ODc0NTgiPiLQntC50L3QsNGC0YMiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJtcl9jb250cm9sbGVyX3BhdXNlIiBtc2dpZD0iNTQ1MTg4NDQzNTUxMDkwNTQwNiI+ItCa0ZbQtNGW0YDRgtGDIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibXJfY29udHJvbGxlcl9zdG9wIiBtc2dpZD0iNzM1ODc0NjQxOTIxNDI1MTIzIj4i0KLQvtKb0YLQsNGC0YMiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJtcl9jb250cm9sbGVyX2V4cGFuZF9ncm91cCIgbXNnaWQ9IjgwNjI0MjcwMjI3NDQyNjY5MDciPiLQltCw0Y4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJtcl9jb250cm9sbGVyX2NvbGxhcHNlX2dyb3VwIiBtc2dpZD0iNzkyNDgwOTA1NjkwNDI0MDkyNiI+ItCW0LjRjiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im1yX2NvbnRyb2xsZXJfYWxidW1fYXJ0IiBtc2dpZD0iNjQyMjgwMTg0MzU0MDU0MzU4NSI+ItCQ0LvRjNCx0L7QvCDRiNC10LHQtdGA0ZYiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJtcl9jb250cm9sbGVyX3ZvbHVtZV9zbGlkZXIiIG1zZ2lkPSIyMzYxNzg1OTkyMjExODQxNzA5Ij4i0JTRi9Cx0YvRgSDQtNC10qPQs9C10LnRltC90ZbSoyDQttKv0LPRltGA0YLQutGW0YHRliI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im1yX2NvbnRyb2xsZXJfbm9fbWVkaWFfc2VsZWN0ZWQiIG1zZ2lkPSI2NTQ3MTMwMzYwMzQ5MTgyMzgxIj4i0JXRiNCx0ZbRgCDRgtCw0YHRg9GI0Ysg0YLQsNKj0LTQsNC70LzQsNKT0LDQvSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im1yX2NvbnRyb2xsZXJfbm9faW5mb19hdmFpbGFibGUiIG1zZ2lkPSI1NTg1NDE4NDcxNzQxMTQyOTI0Ij4i0prQvtC7INC20LXRgtGW0LzQtNGWINCw0pvQv9Cw0YDQsNGCINC20L7SmyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im1yX2NvbnRyb2xsZXJfY2FzdGluZ19zY3JlZW4iIG1zZ2lkPSI0ODY4NDU3OTU3MTUxMTI0ODY3Ij4i0K3QutGA0LDQvdC00Ysg0YLRgNCw0L3RgdC70Y/RhtC40Y/Qu9Cw0YMiPC9zdHJpbmc+Ci08L3Jlc291cmNlcz4KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL01lZGlhQ29tcG9uZW50cy9yZXMvdmFsdWVzLWttL3N0cmluZ3MueG1sIGIvcGFja2FnZXMvTWVkaWFDb21wb25lbnRzL3Jlcy92YWx1ZXMta20vc3RyaW5ncy54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGU0NDc4MGUuLjAwMDAwMDAKLS0tIGEvcGFja2FnZXMvTWVkaWFDb21wb25lbnRzL3Jlcy92YWx1ZXMta20vc3RyaW5ncy54bWwKKysrIC9kZXYvbnVsbApAQCAtMSw0MCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPCEtLSAgQ29weXJpZ2h0IDIwMTggVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAotCi0gICAgIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwotICAgICB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCi0gICAgIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotCi0gICAgICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0KLSAgICAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQotICAgICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAotICAgICBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KLSAgICAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAotICAgICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KLSAtLT4KLQotPHJlc291cmNlcyB4bWxuczphbmRyb2lkPSJodHRwOi8vc2NoZW1hcy5hbmRyb2lkLmNvbS9hcGsvcmVzL2FuZHJvaWQiCi0gICAgeG1sbnM6eGxpZmY9InVybjpvYXNpczpuYW1lczp0Yzp4bGlmZjpkb2N1bWVudDoxLjIiPgotICAgIDxzdHJpbmcgbmFtZT0ibXJfc3lzdGVtX3JvdXRlX25hbWUiIG1zZ2lkPSI1NDQxNTI5ODUxNDgxMTc2ODE3Ij4i4Z6U4Z+S4Z6a4Z6W4Z+Q4Z6T4Z+S4Z6SIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibXJfdXNlcl9yb3V0ZV9jYXRlZ29yeV9uYW1lIiBtc2dpZD0iNzQ5ODExMjkwNzUyNDk3NzMxMSI+IuGep+GelOGegOGemuGejuGfjSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im1yX2J1dHRvbl9jb250ZW50X2Rlc2NyaXB0aW9uIiBtc2dpZD0iMzY5ODM3ODA4NTkwMTQ2NjEyOSI+IuGelOGfiuGevOGej+Geu+GehOGegeGetuGenyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im1yX2Nhc3RfYnV0dG9uX2Rpc2Nvbm5lY3RlZCIgbXNnaWQ9IjgxNjMwNTQ5MDQyNzgxOTI0MCI+IuGegeGetuGen+GelOGfiuGevOGej+Geu+GehOGfliDhnpThnrbhnpPhnoDhnrbhno/hn4vhnpXhn5Lhno/hnrbhnoXhn4siPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJtcl9jYXN0X2J1dHRvbl9jb25uZWN0aW5nIiBtc2dpZD0iMjE4NzY0Mjc2NTA5MTg3MzgzNCI+IuGegeGetuGen+GelOGfiuGevOGej+Geu+GehOGfliDhnoDhn4bhnpbhnrvhnoThnpfhn5LhnofhnrbhnpThn4siPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJtcl9jYXN0X2J1dHRvbl9jb25uZWN0ZWQiIG1zZ2lkPSI1MDg4NDI3NzcxNzg4NjQ4MDg1Ij4i4Z6B4Z624Z6f4Z6U4Z+K4Z684Z6P4Z674Z6E4Z+WIOGelOGetuGek+Gel+GfkuGeh+GetuGelOGfi+GeoOGevuGemSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im1yX2Nob29zZXJfdGl0bGUiIG1zZ2lkPSI0MTQzMDE5NDE1NDYxMzU5OTAiPiLhnpThnonhn5LhnofhnrzhnpPhnpHhn4UiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJtcl9jaG9vc2VyX3NlYXJjaGluZyIgbXNnaWQ9IjYzNDk5MDA1Nzk1MDc1MjE5NTYiPiLhnoDhn4bhnpbhnrvhnoThnp/hn5Lhnpzhn4LhnoThnprhnoDhnqfhnpThnoDhnprhno7hn40iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJtcl9jb250cm9sbGVyX2Rpc2Nvbm5lY3QiIG1zZ2lkPSIxMjI3MjY0ODg5NDEyOTg5NTgwIj4i4Z6V4Z+S4Z6K4Z624Z6F4Z+LIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibXJfY29udHJvbGxlcl9zdG9wX2Nhc3RpbmciIG1zZ2lkPSI4ODU3ODg2Nzk0MDg2NTgzMjI2Ij4i4Z6I4Z6U4Z+L4Z6X4Z+S4Z6H4Z624Z6U4Z+LIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibXJfY29udHJvbGxlcl9jbG9zZV9kZXNjcmlwdGlvbiIgbXNnaWQ9IjczMzM4NjIzMTI0ODA1ODMyNjAiPiLhnpThnrfhnpEiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJtcl9jb250cm9sbGVyX3BsYXkiIG1zZ2lkPSI2ODM2MzQ1NjU5Njk5ODc0NTgiPiLhnoXhnrbhnoDhn4siPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJtcl9jb250cm9sbGVyX3BhdXNlIiBtc2dpZD0iNTQ1MTg4NDQzNTUxMDkwNTQwNiI+IuGeleGfkuGeouGetuGegCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im1yX2NvbnRyb2xsZXJfc3RvcCIgbXNnaWQ9IjczNTg3NDY0MTkyMTQyNTEyMyI+IuGeiOGelOGfiyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im1yX2NvbnRyb2xsZXJfZXhwYW5kX2dyb3VwIiBtc2dpZD0iODA2MjQyNzAyMjc0NDI2NjkwNyI+IuGeluGehOGfkuGemuGeuOGegCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im1yX2NvbnRyb2xsZXJfY29sbGFwc2VfZ3JvdXAiIG1zZ2lkPSI3OTI0ODA5MDU2OTA0MjQwOTI2Ij4i4Z6U4Z6E4Z+S4Z6a4Z694Z6YIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibXJfY29udHJvbGxlcl9hbGJ1bV9hcnQiIG1zZ2lkPSI2NDIyODAxODQzNTQwNTQzNTg1Ij4i4Z6f4Z+S4Z6T4Z624Z6K4Z+D4Z6f4Z634Z6b4Z+S4Z6U4Z+I4Z6i4Z624Z6b4Z+L4Z6U4Z+K4Z674Z6YIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibXJfY29udHJvbGxlcl92b2x1bWVfc2xpZGVyIiBtc2dpZD0iMjM2MTc4NTk5MjIxMTg0MTcwOSI+IuGemuGelOGetuGemuGegOGemOGfkuGemuGet+Gej+Gen+GfhuGeoeGfgeGehCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im1yX2NvbnRyb2xsZXJfbm9fbWVkaWFfc2VsZWN0ZWQiIG1zZ2lkPSI2NTQ3MTMwMzYwMzQ5MTgyMzgxIj4i4Z6C4Z+S4Z6Y4Z624Z6T4Z6A4Z624Z6a4Z6H4Z+S4Z6a4Z6+4Z6f4Z6Y4Z+B4Z6M4Z+A4Z6R4Z+BIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibXJfY29udHJvbGxlcl9ub19pbmZvX2F2YWlsYWJsZSIgbXNnaWQ9IjU1ODU0MTg0NzE3NDExNDI5MjQiPiLhnpjhnrfhnpPhnpjhnrbhnpPhnpbhn5Dhno/hn4zhnpjhnrbhnpPhnpHhn4EiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJtcl9jb250cm9sbGVyX2Nhc3Rpbmdfc2NyZWVuIiBtc2dpZD0iNDg2ODQ1Nzk1NzE1MTEyNDg2NyI+IuGegOGfhuGeluGeu+GehOGegeGetuGen+GeouGfgeGegOGfkuGemuGehOGfiyI8L3N0cmluZz4KLTwvcmVzb3VyY2VzPgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvTWVkaWFDb21wb25lbnRzL3Jlcy92YWx1ZXMta24vc3RyaW5ncy54bWwgYi9wYWNrYWdlcy9NZWRpYUNvbXBvbmVudHMvcmVzL3ZhbHVlcy1rbi9zdHJpbmdzLnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDIzN2ZkZC4uMDAwMDAwMAotLS0gYS9wYWNrYWdlcy9NZWRpYUNvbXBvbmVudHMvcmVzL3ZhbHVlcy1rbi9zdHJpbmdzLnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDQwICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08IS0tICBDb3B5cmlnaHQgMjAxOCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0Ci0KLSAgICAgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7Ci0gICAgIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KLSAgICAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0KLSAgICAgICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLQotICAgICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCi0gICAgIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCi0gICAgIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgotICAgICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCi0gICAgIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgotIC0tPgotCi08cmVzb3VyY2VzIHhtbG5zOmFuZHJvaWQ9Imh0dHA6Ly9zY2hlbWFzLmFuZHJvaWQuY29tL2Fway9yZXMvYW5kcm9pZCIKLSAgICB4bWxuczp4bGlmZj0idXJuOm9hc2lzOm5hbWVzOnRjOnhsaWZmOmRvY3VtZW50OjEuMiI+Ci0gICAgPHN0cmluZyBuYW1lPSJtcl9zeXN0ZW1fcm91dGVfbmFtZSIgbXNnaWQ9IjU0NDE1Mjk4NTE0ODExNzY4MTciPiLgsrjgsr/gsrjgs43gsp/gsoIiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJtcl91c2VyX3JvdXRlX2NhdGVnb3J5X25hbWUiIG1zZ2lkPSI3NDk4MTEyOTA3NTI0OTc3MzExIj4i4LK44LK+4LKn4LKo4LKX4LKz4LOBIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibXJfYnV0dG9uX2NvbnRlbnRfZGVzY3JpcHRpb24iIG1zZ2lkPSIzNjk4Mzc4MDg1OTAxNDY2MTI5Ij4i4LKs4LK/4LKk4LON4LKk4LKw4LK/4LK44LOBIOCyrOCyn+CyqOCzjeKAjCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im1yX2Nhc3RfYnV0dG9uX2Rpc2Nvbm5lY3RlZCIgbXNnaWQ9IjgxNjMwNTQ5MDQyNzgxOTI0MCI+IuCyrOCyv+CypOCzjeCypOCysOCyv+CyuOCzgSDgsqzgsp/gsqjgs43igIwuIOCyuOCyguCyquCysOCzjeCylSDgspXgsqHgsr/gsqTgspfgs4rgsrPgsr/gsrjgsrLgsr7gspfgsr/gsqbgs4YiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJtcl9jYXN0X2J1dHRvbl9jb25uZWN0aW5nIiBtc2dpZD0iMjE4NzY0Mjc2NTA5MTg3MzgzNCI+IuCyrOCyv+CypOCzjeCypOCysOCyv+CyuOCzgSDgsqzgsp/gsqjgs43igIwuIOCyuOCyguCyquCysOCzjeCyleCyv+CyuOCysuCyvuCyl+CzgeCypOCzjeCypOCyv+CypuCzhiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im1yX2Nhc3RfYnV0dG9uX2Nvbm5lY3RlZCIgbXNnaWQ9IjUwODg0Mjc3NzE3ODg2NDgwODUiPiLgsqzgsr/gsqTgs43gsqTgsrDgsr/gsrjgs4Eg4LKs4LKf4LKo4LON4oCMLiDgsrjgsoLgsqrgsrDgs43gspXgsr/gsqTgspfgs4rgsoLgsqHgsr/gsqbgs4YiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJtcl9jaG9vc2VyX3RpdGxlIiBtc2dpZD0iNDE0MzAxOTQxNTQ2MTM1OTkwIj4i4LKH4LKm4LKV4LON4LKV4LOGIOCyrOCyv+CypOCzjeCypOCysOCyv+CyuOCyvyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im1yX2Nob29zZXJfc2VhcmNoaW5nIiBtc2dpZD0iNjM0OTkwMDU3OTUwNzUyMTk1NiI+IuCyuOCyvuCyp+CyqOCyl+Cys+CyqOCzjeCyqOCzgSDgsrngs4HgsqHgs4HgspXgsrLgsr7gspfgs4HgsqTgs43gsqTgsr/gsqbgs4YiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJtcl9jb250cm9sbGVyX2Rpc2Nvbm5lY3QiIG1zZ2lkPSIxMjI3MjY0ODg5NDEyOTg5NTgwIj4i4LK44LKC4LKq4LKw4LON4LKVIOCyleCyoeCyv+CypOCyl+CziuCys+Cyv+CyuOCzgSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im1yX2NvbnRyb2xsZXJfc3RvcF9jYXN0aW5nIiBtc2dpZD0iODg1Nzg4Njc5NDA4NjU4MzIyNiI+IuCyrOCyv+CypOCzjeCypOCysOCyv+CyuOCzgeCyteCyv+CyleCzhiDgsqjgsr/gsrLgs43gsrLgsr/gsrjgsr8iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJtcl9jb250cm9sbGVyX2Nsb3NlX2Rlc2NyaXB0aW9uIiBtc2dpZD0iNzMzMzg2MjMxMjQ4MDU4MzI2MCI+IuCyruCzgeCymuCzjeCymuCzgSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im1yX2NvbnRyb2xsZXJfcGxheSIgbXNnaWQ9IjY4MzYzNDU2NTk2OTk4NzQ1OCI+IuCyquCzjeCysuCzhyDgsq7gsr7gsqHgsr8iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJtcl9jb250cm9sbGVyX3BhdXNlIiBtc2dpZD0iNTQ1MTg4NDQzNTUxMDkwNTQwNiI+IuCyteCyv+CysOCyvuCyriI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im1yX2NvbnRyb2xsZXJfc3RvcCIgbXNnaWQ9IjczNTg3NDY0MTkyMTQyNTEyMyI+IuCyqOCyv+CysuCzjeCysuCyv+CyuOCyvyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im1yX2NvbnRyb2xsZXJfZXhwYW5kX2dyb3VwIiBtc2dpZD0iODA2MjQyNzAyMjc0NDI2NjkwNyI+IuCyteCyv+CyuOCzjeCypOCysOCyv+CyuOCzgSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im1yX2NvbnRyb2xsZXJfY29sbGFwc2VfZ3JvdXAiIG1zZ2lkPSI3OTI0ODA5MDU2OTA0MjQwOTI2Ij4i4LK44LKC4LKV4LOB4LKa4LK/4LK44LOBIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibXJfY29udHJvbGxlcl9hbGJ1bV9hcnQiIG1zZ2lkPSI2NDIyODAxODQzNTQwNTQzNTg1Ij4i4LKG4LKy4LON4LKs4LKu4LONIOCyleCysuCzhiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im1yX2NvbnRyb2xsZXJfdm9sdW1lX3NsaWRlciIgbXNnaWQ9IjIzNjE3ODU5OTIyMTE4NDE3MDkiPiLgsrXgsr7gsrLgs43gsq/gs4Lgsq7gs40g4LK44LON4LKy4LOI4LKh4LKw4LONIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibXJfY29udHJvbGxlcl9ub19tZWRpYV9zZWxlY3RlZCIgbXNnaWQ9IjY1NDcxMzAzNjAzNDkxODIzODEiPiLgsq/gsr7gsrXgs4Hgsqbgs4cg4LKu4LK+4LKn4LON4LKv4LKuIOCyhuCyr+CzjeCyleCzhuCyruCyvuCyoeCysuCyvuCyl+Cyv+CysuCzjeCysiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im1yX2NvbnRyb2xsZXJfbm9faW5mb19hdmFpbGFibGUiIG1zZ2lkPSI1NTg1NDE4NDcxNzQxMTQyOTI0Ij4i4LKv4LK+4LK14LOB4LKm4LOHIOCyruCyvuCyueCyv+CypOCyvyDgsrLgsq3gs43gsq/gsrXgsr/gsrLgs43gsrIiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJtcl9jb250cm9sbGVyX2Nhc3Rpbmdfc2NyZWVuIiBtc2dpZD0iNDg2ODQ1Nzk1NzE1MTEyNDg2NyI+IuCyquCysOCypuCzhuCyr+CyqOCzjeCyqOCzgSDgsqzgsr/gsqTgs43gsqTgsrDgsr/gsrjgsrLgsr7gspfgs4HgsqTgs43gsqTgsr/gsqbgs4YiPC9zdHJpbmc+Ci08L3Jlc291cmNlcz4KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL01lZGlhQ29tcG9uZW50cy9yZXMvdmFsdWVzLWtvL3N0cmluZ3MueG1sIGIvcGFja2FnZXMvTWVkaWFDb21wb25lbnRzL3Jlcy92YWx1ZXMta28vc3RyaW5ncy54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGJlODkzYTkuLjAwMDAwMDAKLS0tIGEvcGFja2FnZXMvTWVkaWFDb21wb25lbnRzL3Jlcy92YWx1ZXMta28vc3RyaW5ncy54bWwKKysrIC9kZXYvbnVsbApAQCAtMSw0MCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPCEtLSAgQ29weXJpZ2h0IDIwMTggVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAotCi0gICAgIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwotICAgICB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCi0gICAgIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotCi0gICAgICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0KLSAgICAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQotICAgICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAotICAgICBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KLSAgICAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAotICAgICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KLSAtLT4KLQotPHJlc291cmNlcyB4bWxuczphbmRyb2lkPSJodHRwOi8vc2NoZW1hcy5hbmRyb2lkLmNvbS9hcGsvcmVzL2FuZHJvaWQiCi0gICAgeG1sbnM6eGxpZmY9InVybjpvYXNpczpuYW1lczp0Yzp4bGlmZjpkb2N1bWVudDoxLjIiPgotICAgIDxzdHJpbmcgbmFtZT0ibXJfc3lzdGVtX3JvdXRlX25hbWUiIG1zZ2lkPSI1NDQxNTI5ODUxNDgxMTc2ODE3Ij4i7Iuc7Iqk7YWcIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibXJfdXNlcl9yb3V0ZV9jYXRlZ29yeV9uYW1lIiBtc2dpZD0iNzQ5ODExMjkwNzUyNDk3NzMxMSI+Iuq4sOq4sCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im1yX2J1dHRvbl9jb250ZW50X2Rlc2NyaXB0aW9uIiBtc2dpZD0iMzY5ODM3ODA4NTkwMTQ2NjEyOSI+IuyghOyGoSDrsoTtirwiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJtcl9jYXN0X2J1dHRvbl9kaXNjb25uZWN0ZWQiIG1zZ2lkPSI4MTYzMDU0OTA0Mjc4MTkyNDAiPiLsoITshqEg67KE7Yq8LiDsl7DqsrAg7ZW07KCc65CoIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibXJfY2FzdF9idXR0b25fY29ubmVjdGluZyIgbXNnaWQ9IjIxODc2NDI3NjUwOTE4NzM4MzQiPiLsoITshqEg67KE7Yq8LiDsl7DqsrAg7KSRIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibXJfY2FzdF9idXR0b25fY29ubmVjdGVkIiBtc2dpZD0iNTA4ODQyNzc3MTc4ODY0ODA4NSI+IuyghOyGoSDrsoTtirwuIOyXsOqysOuQqCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im1yX2Nob29zZXJfdGl0bGUiIG1zZ2lkPSI0MTQzMDE5NDE1NDYxMzU5OTAiPiLsoITshqHtlaAg6riw6riwIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibXJfY2hvb3Nlcl9zZWFyY2hpbmciIG1zZ2lkPSI2MzQ5OTAwNTc5NTA3NTIxOTU2Ij4i6riw6riw66W8IOywvuuKlCDspJEiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJtcl9jb250cm9sbGVyX2Rpc2Nvbm5lY3QiIG1zZ2lkPSIxMjI3MjY0ODg5NDEyOTg5NTgwIj4i7Jew6rKwIO2VtOygnCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im1yX2NvbnRyb2xsZXJfc3RvcF9jYXN0aW5nIiBtc2dpZD0iODg1Nzg4Njc5NDA4NjU4MzIyNiI+IuyghOyGoSDspJHsp4AiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJtcl9jb250cm9sbGVyX2Nsb3NlX2Rlc2NyaXB0aW9uIiBtc2dpZD0iNzMzMzg2MjMxMjQ4MDU4MzI2MCI+IuuLq+q4sCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im1yX2NvbnRyb2xsZXJfcGxheSIgbXNnaWQ9IjY4MzYzNDU2NTk2OTk4NzQ1OCI+IuyerOyDnSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im1yX2NvbnRyb2xsZXJfcGF1c2UiIG1zZ2lkPSI1NDUxODg0NDM1NTEwOTA1NDA2Ij4i7J287Iuc7KSR7KeAIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibXJfY29udHJvbGxlcl9zdG9wIiBtc2dpZD0iNzM1ODc0NjQxOTIxNDI1MTIzIj4i7KSR7KeAIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibXJfY29udHJvbGxlcl9leHBhbmRfZ3JvdXAiIG1zZ2lkPSI4MDYyNDI3MDIyNzQ0MjY2OTA3Ij4i7Y687LmY6riwIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibXJfY29udHJvbGxlcl9jb2xsYXBzZV9ncm91cCIgbXNnaWQ9Ijc5MjQ4MDkwNTY5MDQyNDA5MjYiPiLsoJHquLAiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJtcl9jb250cm9sbGVyX2FsYnVtX2FydCIgbXNnaWQ9IjY0MjI4MDE4NDM1NDA1NDM1ODUiPiLslajrspTslYTtirgiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJtcl9jb250cm9sbGVyX3ZvbHVtZV9zbGlkZXIiIG1zZ2lkPSIyMzYxNzg1OTkyMjExODQxNzA5Ij4i67O866WoIOyKrOudvOydtOuNlCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im1yX2NvbnRyb2xsZXJfbm9fbWVkaWFfc2VsZWN0ZWQiIG1zZ2lkPSI2NTQ3MTMwMzYwMzQ5MTgyMzgxIj4i7ISg7YOd7ZWcIOuvuOuUlOyWtCDsl4bsnYwiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJtcl9jb250cm9sbGVyX25vX2luZm9fYXZhaWxhYmxlIiBtc2dpZD0iNTU4NTQxODQ3MTc0MTE0MjkyNCI+IuygleuztOqwgCDsl4bsirXri4jri6QuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibXJfY29udHJvbGxlcl9jYXN0aW5nX3NjcmVlbiIgbXNnaWQ9IjQ4Njg0NTc5NTcxNTExMjQ4NjciPiLtmZTrqbQg7KCE7IahIOykkSI8L3N0cmluZz4KLTwvcmVzb3VyY2VzPgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvTWVkaWFDb21wb25lbnRzL3Jlcy92YWx1ZXMta3kvc3RyaW5ncy54bWwgYi9wYWNrYWdlcy9NZWRpYUNvbXBvbmVudHMvcmVzL3ZhbHVlcy1reS9zdHJpbmdzLnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTc4MTNhZi4uMDAwMDAwMAotLS0gYS9wYWNrYWdlcy9NZWRpYUNvbXBvbmVudHMvcmVzL3ZhbHVlcy1reS9zdHJpbmdzLnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDQwICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08IS0tICBDb3B5cmlnaHQgMjAxOCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0Ci0KLSAgICAgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7Ci0gICAgIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KLSAgICAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0KLSAgICAgICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLQotICAgICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCi0gICAgIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCi0gICAgIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgotICAgICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCi0gICAgIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgotIC0tPgotCi08cmVzb3VyY2VzIHhtbG5zOmFuZHJvaWQ9Imh0dHA6Ly9zY2hlbWFzLmFuZHJvaWQuY29tL2Fway9yZXMvYW5kcm9pZCIKLSAgICB4bWxuczp4bGlmZj0idXJuOm9hc2lzOm5hbWVzOnRjOnhsaWZmOmRvY3VtZW50OjEuMiI+Ci0gICAgPHN0cmluZyBuYW1lPSJtcl9zeXN0ZW1fcm91dGVfbmFtZSIgbXNnaWQ9IjU0NDE1Mjk4NTE0ODExNzY4MTciPiLQotGD0YLRg9C8Ijwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibXJfdXNlcl9yb3V0ZV9jYXRlZ29yeV9uYW1lIiBtc2dpZD0iNzQ5ODExMjkwNzUyNDk3NzMxMSI+ItCi0q/Qt9C806nQutGC06nRgCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im1yX2J1dHRvbl9jb250ZW50X2Rlc2NyaXB0aW9uIiBtc2dpZD0iMzY5ODM3ODA4NTkwMTQ2NjEyOSI+ItCi0YvRiNC60Ysg0Y3QutGA0LDQvdCz0LAg0YfRi9Cz0LDRgNGD0YMg0LHQsNGB0LrRi9GH0YsiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJtcl9jYXN0X2J1dHRvbl9kaXNjb25uZWN0ZWQiIG1zZ2lkPSI4MTYzMDU0OTA0Mjc4MTkyNDAiPiLQotGL0YjQutGLINGN0LrRgNCw0L3Qs9CwINGH0YvQs9Cw0YDRg9GDINCx0LDRgdC60YvRh9GLLiDQotKv0LfQvNOp0Log0LDQttGL0YDQsNC/INGC0YPRgNCw0YIuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibXJfY2FzdF9idXR0b25fY29ubmVjdGluZyIgbXNnaWQ9IjIxODc2NDI3NjUwOTE4NzM4MzQiPiLQotGL0YjQutGLINGN0LrRgNCw0L3Qs9CwINGH0YvQs9Cw0YDRg9GDINCx0LDRgdC60YvRh9GLLiDQotKv0LfQvNOp0Log0YLRg9GC0LDRiNGD0YPQtNCwIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibXJfY2FzdF9idXR0b25fY29ubmVjdGVkIiBtc2dpZD0iNTA4ODQyNzc3MTc4ODY0ODA4NSI+ItCi0YvRiNC60Ysg0Y3QutGA0LDQvdCz0LAg0YfRi9Cz0LDRgNGD0YMg0LHQsNGB0LrRi9GH0YsuINCi0q/Qt9C806nQuiDRgtGD0YLQsNGI0YvQvyDRgtGD0YDQsNGCIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibXJfY2hvb3Nlcl90aXRsZSIgbXNnaWQ9IjQxNDMwMTk0MTU0NjEzNTk5MCI+ItCi06nQvNOp0L3QutKv0LPTqSDRh9GL0LPQsNGA0YPRgyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im1yX2Nob29zZXJfc2VhcmNoaW5nIiBtc2dpZD0iNjM0OTkwMDU3OTUwNzUyMTk1NiI+ItCi0q/Qt9C806nQutGC06nRgCDQuNC30LTQtdC70q/Sr9C006kiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJtcl9jb250cm9sbGVyX2Rpc2Nvbm5lY3QiIG1zZ2lkPSIxMjI3MjY0ODg5NDEyOTg5NTgwIj4i0JDQttGL0YDQsNGC0YPRgyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im1yX2NvbnRyb2xsZXJfc3RvcF9jYXN0aW5nIiBtc2dpZD0iODg1Nzg4Njc5NDA4NjU4MzIyNiI+ItCi0YvRiNC6INGN0LrRgNCw0L3Qs9CwINGH0YvQs9Cw0YDQvdGDINGC0L7QutGC0L7RgtGD0YMiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJtcl9jb250cm9sbGVyX2Nsb3NlX2Rlc2NyaXB0aW9uIiBtc2dpZD0iNzMzMzg2MjMxMjQ4MDU4MzI2MCI+ItCW0LDQsdGD0YMiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJtcl9jb250cm9sbGVyX3BsYXkiIG1zZ2lkPSI2ODM2MzQ1NjU5Njk5ODc0NTgiPiLQntC50L3QvtGC0YPRgyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im1yX2NvbnRyb2xsZXJfcGF1c2UiIG1zZ2lkPSI1NDUxODg0NDM1NTEwOTA1NDA2Ij4i0KLRi9C90LTRi9GA0YPRgyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im1yX2NvbnRyb2xsZXJfc3RvcCIgbXNnaWQ9IjczNTg3NDY0MTkyMTQyNTEyMyI+ItCi0L7QutGC0L7RgtGD0YMiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJtcl9jb250cm9sbGVyX2V4cGFuZF9ncm91cCIgbXNnaWQ9IjgwNjI0MjcwMjI3NDQyNjY5MDciPiLQltCw0LnRi9C/INC606nRgNGB06nRgtKv0q8iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJtcl9jb250cm9sbGVyX2NvbGxhcHNlX2dyb3VwIiBtc2dpZD0iNzkyNDgwOTA1NjkwNDI0MDkyNiI+ItCW0YvQudGL0YjRgtGL0YDRg9GDIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibXJfY29udHJvbGxlcl9hbGJ1bV9hcnQiIG1zZ2lkPSI2NDIyODAxODQzNTQwNTQzNTg1Ij4i0JDQu9GM0LHQvtC8INC80YPQutCw0LHQsNGB0YsiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJtcl9jb250cm9sbGVyX3ZvbHVtZV9zbGlkZXIiIG1zZ2lkPSIyMzYxNzg1OTkyMjExODQxNzA5Ij4i0q7QvdC00q8g0LrQsNGC0YPRg9C70LDRgtGD0YPRh9GDINGB0YvQtNGL0YDQvNCwIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibXJfY29udHJvbGxlcl9ub19tZWRpYV9zZWxlY3RlZCIgbXNnaWQ9IjY1NDcxMzAzNjAzNDkxODIzODEiPiLQkdC40YAg0LTQsCDQvNC10LTQuNCwINGE0LDQudC7INGC0LDQvdC00LDQu9Cz0LDQvSDQttC+0LoiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJtcl9jb250cm9sbGVyX25vX2luZm9fYXZhaWxhYmxlIiBtc2dpZD0iNTU4NTQxODQ3MTc0MTE0MjkyNCI+ItCt0Ycg0LzQsNCw0LvRi9C80LDRgiDQttC+0LoiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJtcl9jb250cm9sbGVyX2Nhc3Rpbmdfc2NyZWVuIiBtc2dpZD0iNDg2ODQ1Nzk1NzE1MTEyNDg2NyI+ItCi0YvRiNC60Ysg0Y3QutGA0LDQvdCz0LAg0YfRi9Cz0LDRgNGL0LvRg9GD0LTQsCI8L3N0cmluZz4KLTwvcmVzb3VyY2VzPgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvTWVkaWFDb21wb25lbnRzL3Jlcy92YWx1ZXMtbGFuZC9kaW1lbnMueG1sIGIvcGFja2FnZXMvTWVkaWFDb21wb25lbnRzL3Jlcy92YWx1ZXMtbGFuZC9kaW1lbnMueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyOWYxZTFkLi4wMDAwMDAwCi0tLSBhL3BhY2thZ2VzL01lZGlhQ29tcG9uZW50cy9yZXMvdmFsdWVzLWxhbmQvZGltZW5zLnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDI2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9InV0Zi04Ij8+Ci08IS0tIENvcHlyaWdodCAyMDE4IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKLQotICAgICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKLSAgICAgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgotICAgICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLQotICAgICAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotCi0gICAgIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKLSAgICAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKLSAgICAgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCi0gICAgIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKLSAgICAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCi0tLT4KLQotPHJlc291cmNlcz4KLSAgICA8IS0tIE1lZGlhUm91dGVDb250cm9sbGVyJ3Mgdm9sdW1lIGdyb3VwIGxpc3QgLS0+Ci0gICAgPGVhdC1jb21tZW50IC8+Ci0gICAgPCEtLSBNYXhpbXVtIGhlaWdodCBvZiB2b2x1bWUgZ3JvdXAgbGlzdC4gLS0+Ci0gICAgPGRpbWVuIG5hbWU9Im1yX2NvbnRyb2xsZXJfdm9sdW1lX2dyb3VwX2xpc3RfbWF4X2hlaWdodCI+MTMyZHA8L2RpbWVuPgotICAgIDwhLS0gSGVpZ2h0IG9mIHZvbHVtZSBncm91cCBpdGVtLiAtLT4KLSAgICA8ZGltZW4gbmFtZT0ibXJfY29udHJvbGxlcl92b2x1bWVfZ3JvdXBfbGlzdF9pdGVtX2hlaWdodCI+NjFkcDwvZGltZW4+Ci0gICAgPCEtLSBTaXplIG9mIGFuIGl0ZW0ncyBpY29uLiAtLT4KLSAgICA8ZGltZW4gbmFtZT0ibXJfY29udHJvbGxlcl92b2x1bWVfZ3JvdXBfbGlzdF9pdGVtX2ljb25fc2l6ZSI+MThkcDwvZGltZW4+Ci08L3Jlc291cmNlcz4KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL01lZGlhQ29tcG9uZW50cy9yZXMvdmFsdWVzLWxvL3N0cmluZ3MueG1sIGIvcGFja2FnZXMvTWVkaWFDb21wb25lbnRzL3Jlcy92YWx1ZXMtbG8vc3RyaW5ncy54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDkxNzM3ZGIuLjAwMDAwMDAKLS0tIGEvcGFja2FnZXMvTWVkaWFDb21wb25lbnRzL3Jlcy92YWx1ZXMtbG8vc3RyaW5ncy54bWwKKysrIC9kZXYvbnVsbApAQCAtMSw0MCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPCEtLSAgQ29weXJpZ2h0IDIwMTggVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAotCi0gICAgIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwotICAgICB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCi0gICAgIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotCi0gICAgICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0KLSAgICAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQotICAgICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAotICAgICBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KLSAgICAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAotICAgICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KLSAtLT4KLQotPHJlc291cmNlcyB4bWxuczphbmRyb2lkPSJodHRwOi8vc2NoZW1hcy5hbmRyb2lkLmNvbS9hcGsvcmVzL2FuZHJvaWQiCi0gICAgeG1sbnM6eGxpZmY9InVybjpvYXNpczpuYW1lczp0Yzp4bGlmZjpkb2N1bWVudDoxLjIiPgotICAgIDxzdHJpbmcgbmFtZT0ibXJfc3lzdGVtX3JvdXRlX25hbWUiIG1zZ2lkPSI1NDQxNTI5ODUxNDgxMTc2ODE3Ij4i4Lql4Lqw4Lqa4Lq74LqaIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibXJfdXNlcl9yb3V0ZV9jYXRlZ29yeV9uYW1lIiBtc2dpZD0iNzQ5ODExMjkwNzUyNDk3NzMxMSI+IuC6reC6uOC6m+C6sOC6geC6reC6mSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im1yX2J1dHRvbl9jb250ZW50X2Rlc2NyaXB0aW9uIiBtc2dpZD0iMzY5ODM3ODA4NTkwMTQ2NjEyOSI+IuC6m+C6uOC7iOC6oeKAi+C6hOC6suKAi+C6quKAi+C6l+C7jCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im1yX2Nhc3RfYnV0dG9uX2Rpc2Nvbm5lY3RlZCIgbXNnaWQ9IjgxNjMwNTQ5MDQyNzgxOTI0MCI+IuC6m+C6uOC7iOC6oeC6quC6u+C7iOC6h+C6quC6seC6meC6jeC6suC6mS4g4LqV4Lqx4LqU4LqB4Lqy4LqZ4LuA4LqK4Lq34LuI4Lqt4Lqh4LqV4LuN4LuI4LuB4Lql4LuJ4LqnIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibXJfY2FzdF9idXR0b25fY29ubmVjdGluZyIgbXNnaWQ9IjIxODc2NDI3NjUwOTE4NzM4MzQiPiLgupvgurjgu4jguqHguqrgurvgu4jguofguqrgurHgupnguo3gurLgupkuIOC6geC6s+C6peC6seC6h+C7gOC6iuC6t+C7iOC6reC6oeC6leC7jeC7iCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im1yX2Nhc3RfYnV0dG9uX2Nvbm5lY3RlZCIgbXNnaWQ9IjUwODg0Mjc3NzE3ODg2NDgwODUiPiLgupvgurjgu4jguqHguqrgurvgu4jguofguqrgurHgupnguo3gurLgupkuIOC7gOC6iuC6t+C7iOC6reC6oeC6leC7jeC7iOC7geC6peC7ieC6pyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im1yX2Nob29zZXJfdGl0bGUiIG1zZ2lkPSI0MTQzMDE5NDE1NDYxMzU5OTAiPiLguqrgurvgu4jguofguqrgurHgupnguo3gurLgupnguqvgurIiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJtcl9jaG9vc2VyX3NlYXJjaGluZyIgbXNnaWQ9IjYzNDk5MDA1Nzk1MDc1MjE5NTYiPiLguoHgurPguqXgurHguofigIvguorguq3guoHigIvguqvgurLigIvguq3gurjigIvgupvgurDigIvguoHguq3gupkiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJtcl9jb250cm9sbGVyX2Rpc2Nvbm5lY3QiIG1zZ2lkPSIxMjI3MjY0ODg5NDEyOTg5NTgwIj4i4LqV4Lqx4LqU4LqB4Lqy4LqZ4LuA4LqK4Lq34LuI4Lqt4Lqh4LqV4LuN4LuIIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibXJfY29udHJvbGxlcl9zdG9wX2Nhc3RpbmciIG1zZ2lkPSI4ODU3ODg2Nzk0MDg2NTgzMjI2Ij4i4Lqi4Lq44LqU4LqB4Lqy4LqZ4Lqq4Lq74LuI4LqH4Lqq4Lqx4LqZ4LqN4Lqy4LqZIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibXJfY29udHJvbGxlcl9jbG9zZV9kZXNjcmlwdGlvbiIgbXNnaWQ9IjczMzM4NjIzMTI0ODA1ODMyNjAiPiLgupvgurTgupQiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJtcl9jb250cm9sbGVyX3BsYXkiIG1zZ2lkPSI2ODM2MzQ1NjU5Njk5ODc0NTgiPiLguqvgurzgurTgu4ngupkiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJtcl9jb250cm9sbGVyX3BhdXNlIiBtc2dpZD0iNTQ1MTg4NDQzNTUxMDkwNTQwNiI+IuC6ouC6uOC6lOC6iuC6u+C7iOC6p+C6hOC6suC6pyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im1yX2NvbnRyb2xsZXJfc3RvcCIgbXNnaWQ9IjczNTg3NDY0MTkyMTQyNTEyMyI+IuC6ouC6uOC6lCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im1yX2NvbnRyb2xsZXJfZXhwYW5kX2dyb3VwIiBtc2dpZD0iODA2MjQyNzAyMjc0NDI2NjkwNyI+IuC6guC6sOC6q+C6jeC6suC6jSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im1yX2NvbnRyb2xsZXJfY29sbGFwc2VfZ3JvdXAiIG1zZ2lkPSI3OTI0ODA5MDU2OTA0MjQwOTI2Ij4i4Lqr4LqN4LuN4LuJ4Lql4Lq74LqHIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibXJfY29udHJvbGxlcl9hbGJ1bV9hcnQiIG1zZ2lkPSI2NDIyODAxODQzNTQwNTQzNTg1Ij4i4Luc4LuJ4Lqy4Lqb4Lq74LqB4Lqt4Lqw4Lql4Lqw4Lqa4LuN4LuJ4LqyIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibXJfY29udHJvbGxlcl92b2x1bWVfc2xpZGVyIiBtc2dpZD0iMjM2MTc4NTk5MjIxMTg0MTcwOSI+IuC6leC6u+C6p+C6m+C6seC6muC6peC6sOC6lOC6seC6muC6quC6veC6hyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im1yX2NvbnRyb2xsZXJfbm9fbWVkaWFfc2VsZWN0ZWQiIG1zZ2lkPSI2NTQ3MTMwMzYwMzQ5MTgyMzgxIj4i4Lqa4LuN4LuI4oCL4LuE4LqU4LuJ4oCL4LuA4Lql4Lq34Lqt4LqB4oCL4Lqh4Lq14oCL4LuA4LqU4LqN4oCL4LuD4LqU4oCL4LuE4Lqn4LuJIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibXJfY29udHJvbGxlcl9ub19pbmZvX2F2YWlsYWJsZSIgbXNnaWQ9IjU1ODU0MTg0NzE3NDExNDI5MjQiPiLguprgu43gu4jigIvguqHgurXigIvguoLgu43gu4nigIvguqHgurngupkiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJtcl9jb250cm9sbGVyX2Nhc3Rpbmdfc2NyZWVuIiBtc2dpZD0iNDg2ODQ1Nzk1NzE1MTEyNDg2NyI+IuC6geC6suC6meC6quC6u+C7iOC6h+C6nuC6suC6muC7nOC7ieC6suC6iOC7jSI8L3N0cmluZz4KLTwvcmVzb3VyY2VzPgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvTWVkaWFDb21wb25lbnRzL3Jlcy92YWx1ZXMtbHQvc3RyaW5ncy54bWwgYi9wYWNrYWdlcy9NZWRpYUNvbXBvbmVudHMvcmVzL3ZhbHVlcy1sdC9zdHJpbmdzLnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZmYwMzZkMS4uMDAwMDAwMAotLS0gYS9wYWNrYWdlcy9NZWRpYUNvbXBvbmVudHMvcmVzL3ZhbHVlcy1sdC9zdHJpbmdzLnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDQwICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08IS0tICBDb3B5cmlnaHQgMjAxOCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0Ci0KLSAgICAgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7Ci0gICAgIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KLSAgICAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0KLSAgICAgICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLQotICAgICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCi0gICAgIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCi0gICAgIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgotICAgICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCi0gICAgIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgotIC0tPgotCi08cmVzb3VyY2VzIHhtbG5zOmFuZHJvaWQ9Imh0dHA6Ly9zY2hlbWFzLmFuZHJvaWQuY29tL2Fway9yZXMvYW5kcm9pZCIKLSAgICB4bWxuczp4bGlmZj0idXJuOm9hc2lzOm5hbWVzOnRjOnhsaWZmOmRvY3VtZW50OjEuMiI+Ci0gICAgPHN0cmluZyBuYW1lPSJtcl9zeXN0ZW1fcm91dGVfbmFtZSIgbXNnaWQ9IjU0NDE1Mjk4NTE0ODExNzY4MTciPiJTaXN0ZW1hIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibXJfdXNlcl9yb3V0ZV9jYXRlZ29yeV9uYW1lIiBtc2dpZD0iNzQ5ODExMjkwNzUyNDk3NzMxMSI+IsSucmVuZ2luaWFpIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibXJfYnV0dG9uX2NvbnRlbnRfZGVzY3JpcHRpb24iIG1zZ2lkPSIzNjk4Mzc4MDg1OTAxNDY2MTI5Ij4iUGVyZGF2aW1vIG15Z3R1a2FzIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibXJfY2FzdF9idXR0b25fZGlzY29ubmVjdGVkIiBtc2dpZD0iODE2MzA1NDkwNDI3ODE5MjQwIj4iUGVyZGF2aW1vIG15Z3R1a2FzLiBBdHNpanVuZ3RhIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibXJfY2FzdF9idXR0b25fY29ubmVjdGluZyIgbXNnaWQ9IjIxODc2NDI3NjUwOTE4NzM4MzQiPiJQZXJkYXZpbW8gbXlndHVrYXMuIFByaXNpanVuZ2lhbWEiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJtcl9jYXN0X2J1dHRvbl9jb25uZWN0ZWQiIG1zZ2lkPSI1MDg4NDI3NzcxNzg4NjQ4MDg1Ij4iUGVyZGF2aW1vIG15Z3R1a2FzLiBQcmlzaWp1bmd0YSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im1yX2Nob29zZXJfdGl0bGUiIG1zZ2lkPSI0MTQzMDE5NDE1NDYxMzU5OTAiPiJQZXJkdW90aSDEryI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im1yX2Nob29zZXJfc2VhcmNoaW5nIiBtc2dpZD0iNjM0OTkwMDU3OTUwNzUyMTk1NiI+IlJhbmRhbWkgxK9yZW5naW5pYWkiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJtcl9jb250cm9sbGVyX2Rpc2Nvbm5lY3QiIG1zZ2lkPSIxMjI3MjY0ODg5NDEyOTg5NTgwIj4iQXRqdW5ndGkiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJtcl9jb250cm9sbGVyX3N0b3BfY2FzdGluZyIgbXNnaWQ9Ijg4NTc4ODY3OTQwODY1ODMyMjYiPiJTdXN0YWJkeXRpIHBlcmRhdmltxIUiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJtcl9jb250cm9sbGVyX2Nsb3NlX2Rlc2NyaXB0aW9uIiBtc2dpZD0iNzMzMzg2MjMxMjQ4MDU4MzI2MCI+IlXFvmRhcnl0aSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im1yX2NvbnRyb2xsZXJfcGxheSIgbXNnaWQ9IjY4MzYzNDU2NTk2OTk4NzQ1OCI+IkxlaXN0aSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im1yX2NvbnRyb2xsZXJfcGF1c2UiIG1zZ2lkPSI1NDUxODg0NDM1NTEwOTA1NDA2Ij4iUHJpc3RhYmR5dGkiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJtcl9jb250cm9sbGVyX3N0b3AiIG1zZ2lkPSI3MzU4NzQ2NDE5MjE0MjUxMjMiPiJTdXN0YWJkeXRpIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibXJfY29udHJvbGxlcl9leHBhbmRfZ3JvdXAiIG1zZ2lkPSI4MDYyNDI3MDIyNzQ0MjY2OTA3Ij4iScWhc2tsZWlzdGkiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJtcl9jb250cm9sbGVyX2NvbGxhcHNlX2dyb3VwIiBtc2dpZD0iNzkyNDgwOTA1NjkwNDI0MDkyNiI+IlN1dHJhdWt0aSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im1yX2NvbnRyb2xsZXJfYWxidW1fYXJ0IiBtc2dpZD0iNjQyMjgwMTg0MzU0MDU0MzU4NSI+IkFsYnVtbyB2aXLFoWVsaXMiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJtcl9jb250cm9sbGVyX3ZvbHVtZV9zbGlkZXIiIG1zZ2lkPSIyMzYxNzg1OTkyMjExODQxNzA5Ij4iR2Fyc3VtbyDFoWxpYXXFvmlrbGlzIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibXJfY29udHJvbGxlcl9ub19tZWRpYV9zZWxlY3RlZCIgbXNnaWQ9IjY1NDcxMzAzNjAzNDkxODIzODEiPiJOZXBhc2lyaW5rdGEgam9raWEgbWVkaWphIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibXJfY29udHJvbGxlcl9ub19pbmZvX2F2YWlsYWJsZSIgbXNnaWQ9IjU1ODU0MTg0NzE3NDExNDI5MjQiPiJJbmZvcm1hY2lqYSBuZXBhc2lla2lhbWEiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJtcl9jb250cm9sbGVyX2Nhc3Rpbmdfc2NyZWVuIiBtc2dpZD0iNDg2ODQ1Nzk1NzE1MTEyNDg2NyI+IlBlcmR1b2RhbWFzIGVrcmFuYXMiPC9zdHJpbmc+Ci08L3Jlc291cmNlcz4KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL01lZGlhQ29tcG9uZW50cy9yZXMvdmFsdWVzLWx2L3N0cmluZ3MueG1sIGIvcGFja2FnZXMvTWVkaWFDb21wb25lbnRzL3Jlcy92YWx1ZXMtbHYvc3RyaW5ncy54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQ1NDA2M2UuLjAwMDAwMDAKLS0tIGEvcGFja2FnZXMvTWVkaWFDb21wb25lbnRzL3Jlcy92YWx1ZXMtbHYvc3RyaW5ncy54bWwKKysrIC9kZXYvbnVsbApAQCAtMSw0MCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPCEtLSAgQ29weXJpZ2h0IDIwMTggVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAotCi0gICAgIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwotICAgICB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCi0gICAgIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotCi0gICAgICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0KLSAgICAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQotICAgICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAotICAgICBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KLSAgICAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAotICAgICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KLSAtLT4KLQotPHJlc291cmNlcyB4bWxuczphbmRyb2lkPSJodHRwOi8vc2NoZW1hcy5hbmRyb2lkLmNvbS9hcGsvcmVzL2FuZHJvaWQiCi0gICAgeG1sbnM6eGxpZmY9InVybjpvYXNpczpuYW1lczp0Yzp4bGlmZjpkb2N1bWVudDoxLjIiPgotICAgIDxzdHJpbmcgbmFtZT0ibXJfc3lzdGVtX3JvdXRlX25hbWUiIG1zZ2lkPSI1NDQxNTI5ODUxNDgxMTc2ODE3Ij4iU2lzdMSTbWEiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJtcl91c2VyX3JvdXRlX2NhdGVnb3J5X25hbWUiIG1zZ2lkPSI3NDk4MTEyOTA3NTI0OTc3MzExIj4iSWVyxKtjZXMiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJtcl9idXR0b25fY29udGVudF9kZXNjcmlwdGlvbiIgbXNnaWQ9IjM2OTgzNzgwODU5MDE0NjYxMjkiPiJBcHJhaWRlcyBwb2dhIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibXJfY2FzdF9idXR0b25fZGlzY29ubmVjdGVkIiBtc2dpZD0iODE2MzA1NDkwNDI3ODE5MjQwIj4iQXByYWlkZXMgcG9nYS4gU2F2aWVub2p1bXMgcMSBcnRyYXVrdHMiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJtcl9jYXN0X2J1dHRvbl9jb25uZWN0aW5nIiBtc2dpZD0iMjE4NzY0Mjc2NTA5MTg3MzgzNCI+IkFwcmFpZGVzIHBvZ2EuIE5vdGllayBzYXZpZW5vanVtYSBpenZlaWRlIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibXJfY2FzdF9idXR0b25fY29ubmVjdGVkIiBtc2dpZD0iNTA4ODQyNzc3MTc4ODY0ODA4NSI+IkFwcmFpZGVzIHBvZ2EuIFNhdmllbm9qdW1zIGl6dmVpZG90cyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im1yX2Nob29zZXJfdGl0bGUiIG1zZ2lkPSI0MTQzMDE5NDE1NDYxMzU5OTAiPiJBcHJhaWTEq8WhYW5hIHV6IGllcsSrY2kiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJtcl9jaG9vc2VyX3NlYXJjaGluZyIgbXNnaWQ9IjYzNDk5MDA1Nzk1MDc1MjE5NTYiPiJOb3RpZWsgaWVyxKvEjXUgbWVrbMSTxaFhbmEiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJtcl9jb250cm9sbGVyX2Rpc2Nvbm5lY3QiIG1zZ2lkPSIxMjI3MjY0ODg5NDEyOTg5NTgwIj4iQXR2aWVub3QiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJtcl9jb250cm9sbGVyX3N0b3BfY2FzdGluZyIgbXNnaWQ9Ijg4NTc4ODY3OTQwODY1ODMyMjYiPiJBcHR1csSTdCBhcHJhaWRpIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibXJfY29udHJvbGxlcl9jbG9zZV9kZXNjcmlwdGlvbiIgbXNnaWQ9IjczMzM4NjIzMTI0ODA1ODMyNjAiPiJBaXp2xJNydCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im1yX2NvbnRyb2xsZXJfcGxheSIgbXNnaWQ9IjY4MzYzNDU2NTk2OTk4NzQ1OCI+IkF0c2thxYZvdCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im1yX2NvbnRyb2xsZXJfcGF1c2UiIG1zZ2lkPSI1NDUxODg0NDM1NTEwOTA1NDA2Ij4iQXB0dXLEk3QiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJtcl9jb250cm9sbGVyX3N0b3AiIG1zZ2lkPSI3MzU4NzQ2NDE5MjE0MjUxMjMiPiJBcHR1csSTdCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im1yX2NvbnRyb2xsZXJfZXhwYW5kX2dyb3VwIiBtc2dpZD0iODA2MjQyNzAyMjc0NDI2NjkwNyI+Ikl6dsSTcnN0Ijwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibXJfY29udHJvbGxlcl9jb2xsYXBzZV9ncm91cCIgbXNnaWQ9Ijc5MjQ4MDkwNTY5MDQyNDA5MjYiPiJTYWvEvGF1dCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im1yX2NvbnRyb2xsZXJfYWxidW1fYXJ0IiBtc2dpZD0iNjQyMjgwMTg0MzU0MDU0MzU4NSI+IkFsYnVtYSB2xIFjacWGxaEiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJtcl9jb250cm9sbGVyX3ZvbHVtZV9zbGlkZXIiIG1zZ2lkPSIyMzYxNzg1OTkyMjExODQxNzA5Ij4iU2thxLx1bWEgc2zEq2RuaXMiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJtcl9jb250cm9sbGVyX25vX21lZGlhX3NlbGVjdGVkIiBtc2dpZD0iNjU0NzEzMDM2MDM0OTE4MjM4MSI+Ik5hdiBhdGxhc8SrdGkgbXVsdGl2aWRlcyBmYWlsaSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im1yX2NvbnRyb2xsZXJfbm9faW5mb19hdmFpbGFibGUiIG1zZ2lkPSI1NTg1NDE4NDcxNzQxMTQyOTI0Ij4iTmF2IHBpZWVqYW1hIGluZm9ybcSBY2lqYSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im1yX2NvbnRyb2xsZXJfY2FzdGluZ19zY3JlZW4iIG1zZ2lkPSI0ODY4NDU3OTU3MTUxMTI0ODY3Ij4iTm90aWVrIGVrcsSBbmEgYXByYWlkZSI8L3N0cmluZz4KLTwvcmVzb3VyY2VzPgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvTWVkaWFDb21wb25lbnRzL3Jlcy92YWx1ZXMtbWsvc3RyaW5ncy54bWwgYi9wYWNrYWdlcy9NZWRpYUNvbXBvbmVudHMvcmVzL3ZhbHVlcy1tay9zdHJpbmdzLnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTJkZWUzNi4uMDAwMDAwMAotLS0gYS9wYWNrYWdlcy9NZWRpYUNvbXBvbmVudHMvcmVzL3ZhbHVlcy1tay9zdHJpbmdzLnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDQwICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08IS0tICBDb3B5cmlnaHQgMjAxOCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0Ci0KLSAgICAgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7Ci0gICAgIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KLSAgICAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0KLSAgICAgICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLQotICAgICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCi0gICAgIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCi0gICAgIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgotICAgICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCi0gICAgIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgotIC0tPgotCi08cmVzb3VyY2VzIHhtbG5zOmFuZHJvaWQ9Imh0dHA6Ly9zY2hlbWFzLmFuZHJvaWQuY29tL2Fway9yZXMvYW5kcm9pZCIKLSAgICB4bWxuczp4bGlmZj0idXJuOm9hc2lzOm5hbWVzOnRjOnhsaWZmOmRvY3VtZW50OjEuMiI+Ci0gICAgPHN0cmluZyBuYW1lPSJtcl9zeXN0ZW1fcm91dGVfbmFtZSIgbXNnaWQ9IjU0NDE1Mjk4NTE0ODExNzY4MTciPiLQodC40YHRgtC10LwiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJtcl91c2VyX3JvdXRlX2NhdGVnb3J5X25hbWUiIG1zZ2lkPSI3NDk4MTEyOTA3NTI0OTc3MzExIj4i0KPRgNC10LTQuCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im1yX2J1dHRvbl9jb250ZW50X2Rlc2NyaXB0aW9uIiBtc2dpZD0iMzY5ODM3ODA4NTkwMTQ2NjEyOSI+ItCa0L7Qv9GH0LXRgtC+INC30LAgQ2FzdCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im1yX2Nhc3RfYnV0dG9uX2Rpc2Nvbm5lY3RlZCIgbXNnaWQ9IjgxNjMwNTQ5MDQyNzgxOTI0MCI+ItCa0L7Qv9GH0LUg0LfQsCBDYXN0LiDQmNGB0LrQu9GD0YfQtdC90L4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJtcl9jYXN0X2J1dHRvbl9jb25uZWN0aW5nIiBtc2dpZD0iMjE4NzY0Mjc2NTA5MTg3MzgzNCI+ItCa0L7Qv9GH0LUg0LfQsCBDYXN0LiDQodC1INC/0L7QstGA0LfRg9Cy0LAiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJtcl9jYXN0X2J1dHRvbl9jb25uZWN0ZWQiIG1zZ2lkPSI1MDg4NDI3NzcxNzg4NjQ4MDg1Ij4i0JrQvtC/0YfQtSDQt9CwIENhc3QuINCf0L7QstGA0LfQsNC90L4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJtcl9jaG9vc2VyX3RpdGxlIiBtc2dpZD0iNDE0MzAxOTQxNTQ2MTM1OTkwIj4i0JXQvNC40YLRg9Cy0LDRmCDQvdCwIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibXJfY2hvb3Nlcl9zZWFyY2hpbmciIG1zZ2lkPSI2MzQ5OTAwNTc5NTA3NTIxOTU2Ij4i0KHQtSDQsdCw0YDQsNCw0YIg0YPRgNC10LTQuCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im1yX2NvbnRyb2xsZXJfZGlzY29ubmVjdCIgbXNnaWQ9IjEyMjcyNjQ4ODk0MTI5ODk1ODAiPiLQmNGB0LrQu9GD0YfQuCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im1yX2NvbnRyb2xsZXJfc3RvcF9jYXN0aW5nIiBtc2dpZD0iODg1Nzg4Njc5NDA4NjU4MzIyNiI+ItCh0L7Qv9GA0Lgg0LPQviDQtdC80LjRgtGD0LLQsNGa0LXRgtC+Ijwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibXJfY29udHJvbGxlcl9jbG9zZV9kZXNjcmlwdGlvbiIgbXNnaWQ9IjczMzM4NjIzMTI0ODA1ODMyNjAiPiLQl9Cw0YLQstC+0YDQuCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im1yX2NvbnRyb2xsZXJfcGxheSIgbXNnaWQ9IjY4MzYzNDU2NTk2OTk4NzQ1OCI+ItCg0LXQv9GA0L7QtNGD0YbQuNGA0LDRmCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im1yX2NvbnRyb2xsZXJfcGF1c2UiIG1zZ2lkPSI1NDUxODg0NDM1NTEwOTA1NDA2Ij4i0J/QsNGD0LfQuNGA0LDRmCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im1yX2NvbnRyb2xsZXJfc3RvcCIgbXNnaWQ9IjczNTg3NDY0MTkyMTQyNTEyMyI+ItCh0L7Qv9GA0LgiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJtcl9jb250cm9sbGVyX2V4cGFuZF9ncm91cCIgbXNnaWQ9IjgwNjI0MjcwMjI3NDQyNjY5MDciPiLQn9GA0L7RiNC40YDQuCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im1yX2NvbnRyb2xsZXJfY29sbGFwc2VfZ3JvdXAiIG1zZ2lkPSI3OTI0ODA5MDU2OTA0MjQwOTI2Ij4i0KHQvtCx0LXRgNC4Ijwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibXJfY29udHJvbGxlcl9hbGJ1bV9hcnQiIG1zZ2lkPSI2NDIyODAxODQzNTQwNTQzNTg1Ij4i0JrQvtGA0LjRhtCwINC90LAg0LDQu9Cx0YPQvCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im1yX2NvbnRyb2xsZXJfdm9sdW1lX3NsaWRlciIgbXNnaWQ9IjIzNjE3ODU5OTIyMTE4NDE3MDkiPiLQm9C40LfQs9Cw0Ycg0LfQsCDRmNCw0YfQuNC90LAg0L3QsCDQt9Cy0YPQuiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im1yX2NvbnRyb2xsZXJfbm9fbWVkaWFfc2VsZWN0ZWQiIG1zZ2lkPSI2NTQ3MTMwMzYwMzQ5MTgyMzgxIj4i0J3QtSDRgdC1INC40LfQsdGA0LDQvdC4INC80LXQtNC40YPQvNC4Ijwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibXJfY29udHJvbGxlcl9ub19pbmZvX2F2YWlsYWJsZSIgbXNnaWQ9IjU1ODU0MTg0NzE3NDExNDI5MjQiPiLQndC10LzQsCDQtNC+0YHRgtCw0L/QvdC4INC40L3RhNC+0YDQvNCw0YbQuNC4Ijwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibXJfY29udHJvbGxlcl9jYXN0aW5nX3NjcmVlbiIgbXNnaWQ9IjQ4Njg0NTc5NTcxNTExMjQ4NjciPiLQldC60YDQsNC90L7RgiDRgdC1INC10LzQuNGC0YPQstCwIjwvc3RyaW5nPgotPC9yZXNvdXJjZXM+CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9NZWRpYUNvbXBvbmVudHMvcmVzL3ZhbHVlcy1tbC9zdHJpbmdzLnhtbCBiL3BhY2thZ2VzL01lZGlhQ29tcG9uZW50cy9yZXMvdmFsdWVzLW1sL3N0cmluZ3MueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyZDkxNGI5Li4wMDAwMDAwCi0tLSBhL3BhY2thZ2VzL01lZGlhQ29tcG9uZW50cy9yZXMvdmFsdWVzLW1sL3N0cmluZ3MueG1sCisrKyAvZGV2L251bGwKQEAgLTEsNDAgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTwhLS0gIENvcHlyaWdodCAyMDE4IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKLQotICAgICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKLSAgICAgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgotICAgICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLQotICAgICAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotCi0gICAgIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKLSAgICAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKLSAgICAgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCi0gICAgIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKLSAgICAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCi0gLS0+Ci0KLTxyZXNvdXJjZXMgeG1sbnM6YW5kcm9pZD0iaHR0cDovL3NjaGVtYXMuYW5kcm9pZC5jb20vYXBrL3Jlcy9hbmRyb2lkIgotICAgIHhtbG5zOnhsaWZmPSJ1cm46b2FzaXM6bmFtZXM6dGM6eGxpZmY6ZG9jdW1lbnQ6MS4yIj4KLSAgICA8c3RyaW5nIG5hbWU9Im1yX3N5c3RlbV9yb3V0ZV9uYW1lIiBtc2dpZD0iNTQ0MTUyOTg1MTQ4MTE3NjgxNyI+IuC0uOC0v+C0uOC1jeC0seC1jeC0seC0giI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im1yX3VzZXJfcm91dGVfY2F0ZWdvcnlfbmFtZSIgbXNnaWQ9Ijc0OTgxMTI5MDc1MjQ5NzczMTEiPiLgtIngtKrgtJXgtLDgtKPgtJngtY3gtJngtb4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJtcl9idXR0b25fY29udGVudF9kZXNjcmlwdGlvbiIgbXNnaWQ9IjM2OTgzNzgwODU5MDE0NjYxMjkiPiLgtJ/gtL7gtKrgtY3gtKrgtYHgtJrgtYbgtK/gtY3gtK/gtYHgtJUiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJtcl9jYXN0X2J1dHRvbl9kaXNjb25uZWN0ZWQiIG1zZ2lkPSI4MTYzMDU0OTA0Mjc4MTkyNDAiPiLgtJXgtL7gtLjgtY3gtLHgtY3gtLHgtY0g4LSs4LSf4LWN4LSf4LW6LiDgtLXgtL/gtJrgtY3gtJvgtYfgtKbgtL/gtJrgtY3gtJrgtYEiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJtcl9jYXN0X2J1dHRvbl9jb25uZWN0aW5nIiBtc2dpZD0iMjE4NzY0Mjc2NTA5MTg3MzgzNCI+IuC0leC0vuC0uOC1jeC0seC1jeC0seC1jSDgtKzgtJ/gtY3gtJ/gtbouIOC0leC0o+C0leC1jeKAjOC0seC1jeC0seC1geC0muC1huC0r+C1jeC0r+C1geC0qOC1jeC0qOC1gSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im1yX2Nhc3RfYnV0dG9uX2Nvbm5lY3RlZCIgbXNnaWQ9IjUwODg0Mjc3NzE3ODg2NDgwODUiPiLgtJXgtL7gtLjgtY3gtLHgtY3gtLHgtY0g4LSs4LSf4LWN4LSf4LW6LiDgtJXgtKPgtJXgtY3gtLHgtY3gtLHgtYHgtJrgtYbgtK/gtY3gtKTgtYEiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJtcl9jaG9vc2VyX3RpdGxlIiBtc2dpZD0iNDE0MzAxOTQxNTQ2MTM1OTkwIj4i4LSH4LSk4LS/4LSy4LWH4LSV4LWN4LSV4LWNIOC0leC0vuC0uOC1jeC0seC1jeC0seC1geC0muC1huC0r+C1jeC0r+C1geC0lSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im1yX2Nob29zZXJfc2VhcmNoaW5nIiBtc2dpZD0iNjM0OTkwMDU3OTUwNzUyMTk1NiI+IuC0ieC0quC0leC0sOC0o+C0meC1jeC0meC1viDgtJXgtKPgtY3gtJ/gtYbgtKTgtY3gtKTgtYHgtKjgtY3gtKjgtYEiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJtcl9jb250cm9sbGVyX2Rpc2Nvbm5lY3QiIG1zZ2lkPSIxMjI3MjY0ODg5NDEyOTg5NTgwIj4i4LS14LS/4LSa4LWN4LSb4LWH4LSm4LS/4LSV4LWN4LSV4LWB4LSVIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibXJfY29udHJvbGxlcl9zdG9wX2Nhc3RpbmciIG1zZ2lkPSI4ODU3ODg2Nzk0MDg2NTgzMjI2Ij4i4LSV4LS+4LS44LWN4LSx4LWN4LSx4LWB4LSa4LWG4LSv4LWN4LSv4LW9IOC0qOC0v+C1vOC0pOC1jeC0pOC1geC0lSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im1yX2NvbnRyb2xsZXJfY2xvc2VfZGVzY3JpcHRpb24iIG1zZ2lkPSI3MzMzODYyMzEyNDgwNTgzMjYwIj4i4LSF4LS14LS44LS+4LSo4LS/4LSq4LWN4LSq4LS/4LSV4LWN4LSV4LWB4LSVIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibXJfY29udHJvbGxlcl9wbGF5IiBtc2dpZD0iNjgzNjM0NTY1OTY5OTg3NDU4Ij4i4LSq4LWN4LSy4LWHIOC0muC1huC0r+C1jeC0r+C1geC0lSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im1yX2NvbnRyb2xsZXJfcGF1c2UiIG1zZ2lkPSI1NDUxODg0NDM1NTEwOTA1NDA2Ij4i4LSk4LW94LSV4LWN4LSV4LS+4LSy4LSCIOC0qOC0v+C1vOC0pOC1jeC0pOC1giI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im1yX2NvbnRyb2xsZXJfc3RvcCIgbXNnaWQ9IjczNTg3NDY0MTkyMTQyNTEyMyI+IuC0qOC0v+C0sOC1jeKAjeC0pOC1jeC0pOC1geC0lSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im1yX2NvbnRyb2xsZXJfZXhwYW5kX2dyb3VwIiBtc2dpZD0iODA2MjQyNzAyMjc0NDI2NjkwNyI+IuC0teC0v+C0leC0uOC0v+C0quC1jeC0quC0v+C0leC1jeC0leC1geC0lSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im1yX2NvbnRyb2xsZXJfY29sbGFwc2VfZ3JvdXAiIG1zZ2lkPSI3OTI0ODA5MDU2OTA0MjQwOTI2Ij4i4LSa4LWB4LSw4LWB4LSV4LWN4LSV4LWB4LSVIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibXJfY29udHJvbGxlcl9hbGJ1bV9hcnQiIG1zZ2lkPSI2NDIyODAxODQzNTQwNTQzNTg1Ij4i4LSG4LW94LSs4LSCIOC0huC1vOC0n+C1jeC0n+C1jSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im1yX2NvbnRyb2xsZXJfdm9sdW1lX3NsaWRlciIgbXNnaWQ9IjIzNjE3ODU5OTIyMTE4NDE3MDkiPiLgtLXgtYvgtLPgtL/gtK/gtIIg4LS44LWN4LSy4LWI4LSh4LW8Ijwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibXJfY29udHJvbGxlcl9ub19tZWRpYV9zZWxlY3RlZCIgbXNnaWQ9IjY1NDcxMzAzNjAzNDkxODIzODEiPiLgtK7gtYDgtKHgtL/gtK/gtK/gtYrgtKjgtY3gtKjgtYHgtIIg4LSk4LS/4LSw4LSe4LWN4LSe4LWG4LSf4LWB4LSk4LWN4LSk4LS/4LSf4LWN4LSf4LS/4LSy4LWN4LSyIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibXJfY29udHJvbGxlcl9ub19pbmZvX2F2YWlsYWJsZSIgbXNnaWQ9IjU1ODU0MTg0NzE3NDExNDI5MjQiPiLgtLXgtL/gtLXgtLDgtJngtY3gtJngtLPgtYrgtKjgtY3gtKjgtYHgtIIg4LSy4LSt4LWN4LSv4LSu4LSy4LWN4LSyIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibXJfY29udHJvbGxlcl9jYXN0aW5nX3NjcmVlbiIgbXNnaWQ9IjQ4Njg0NTc5NTcxNTExMjQ4NjciPiLgtLjgtY3igIzgtJXgtY3gtLDgtYDgtbsg4LSV4LS+4LS44LWN4LSx4LWN4LSx4LWB4LSa4LWG4LSv4LWN4LSv4LWB4LSo4LWN4LSo4LWBIjwvc3RyaW5nPgotPC9yZXNvdXJjZXM+CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9NZWRpYUNvbXBvbmVudHMvcmVzL3ZhbHVlcy1tbi9zdHJpbmdzLnhtbCBiL3BhY2thZ2VzL01lZGlhQ29tcG9uZW50cy9yZXMvdmFsdWVzLW1uL3N0cmluZ3MueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlZjg3YzkyLi4wMDAwMDAwCi0tLSBhL3BhY2thZ2VzL01lZGlhQ29tcG9uZW50cy9yZXMvdmFsdWVzLW1uL3N0cmluZ3MueG1sCisrKyAvZGV2L251bGwKQEAgLTEsNDAgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTwhLS0gIENvcHlyaWdodCAyMDE4IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKLQotICAgICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKLSAgICAgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgotICAgICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLQotICAgICAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotCi0gICAgIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKLSAgICAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKLSAgICAgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCi0gICAgIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKLSAgICAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCi0gLS0+Ci0KLTxyZXNvdXJjZXMgeG1sbnM6YW5kcm9pZD0iaHR0cDovL3NjaGVtYXMuYW5kcm9pZC5jb20vYXBrL3Jlcy9hbmRyb2lkIgotICAgIHhtbG5zOnhsaWZmPSJ1cm46b2FzaXM6bmFtZXM6dGM6eGxpZmY6ZG9jdW1lbnQ6MS4yIj4KLSAgICA8c3RyaW5nIG5hbWU9Im1yX3N5c3RlbV9yb3V0ZV9uYW1lIiBtc2dpZD0iNTQ0MTUyOTg1MTQ4MTE3NjgxNyI+ItCh0LjRgdGC0LXQvCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im1yX3VzZXJfcm91dGVfY2F0ZWdvcnlfbmFtZSIgbXNnaWQ9Ijc0OTgxMTI5MDc1MjQ5NzczMTEiPiLQotOp0YXTqdOp0YDTqdC80LbSr9Kv0LQiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJtcl9idXR0b25fY29udGVudF9kZXNjcmlwdGlvbiIgbXNnaWQ9IjM2OTgzNzgwODU5MDE0NjYxMjkiPiLQlNCw0LzQttGD0YPQu9Cw0YUg0YLQvtCy0YfQu9GD0YPRgCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im1yX2Nhc3RfYnV0dG9uX2Rpc2Nvbm5lY3RlZCIgbXNnaWQ9IjgxNjMwNTQ5MDQyNzgxOTI0MCI+ItCU0LDQvNC20YPRg9C70LDRhSDRgtC+0LLRh9C70YPRg9GALiDQodCw0LvRgdCw0L0iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJtcl9jYXN0X2J1dHRvbl9jb25uZWN0aW5nIiBtc2dpZD0iMjE4NzY0Mjc2NTA5MTg3MzgzNCI+ItCU0LDQvNC20YPRg9C70LDRhSDRgtC+0LLRh9C70YPRg9GALiDQpdC+0LvQsdC+0LYg0LHQsNC50L3QsCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im1yX2Nhc3RfYnV0dG9uX2Nvbm5lY3RlZCIgbXNnaWQ9IjUwODg0Mjc3NzE3ODg2NDgwODUiPiLQlNCw0LzQttGD0YPQu9Cw0YUg0YLQvtCy0YfQu9GD0YPRgC4g0KXQvtC70LHQvtCz0LTRgdC+0L0iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJtcl9jaG9vc2VyX3RpdGxlIiBtc2dpZD0iNDE0MzAxOTQxNTQ2MTM1OTkwIj4i0JTQsNC80LbRg9GD0LvQsNGFIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibXJfY2hvb3Nlcl9zZWFyY2hpbmciIG1zZ2lkPSI2MzQ5OTAwNTc5NTA3NTIxOTU2Ij4i0KLTqdGF06nTqdGA06nQvNC2INGF0LDQudC2INCx0LDQudC90LAiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJtcl9jb250cm9sbGVyX2Rpc2Nvbm5lY3QiIG1zZ2lkPSIxMjI3MjY0ODg5NDEyOTg5NTgwIj4i0KHQsNC70LPQsNGFIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibXJfY29udHJvbGxlcl9zdG9wX2Nhc3RpbmciIG1zZ2lkPSI4ODU3ODg2Nzk0MDg2NTgzMjI2Ij4i0JTQsNC80LbRg9GD0LvQsNGF0YvQsyDQt9C+0LPRgdC+0L7RhSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im1yX2NvbnRyb2xsZXJfY2xvc2VfZGVzY3JpcHRpb24iIG1zZ2lkPSI3MzMzODYyMzEyNDgwNTgzMjYwIj4i0KXQsNCw0YUiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJtcl9jb250cm9sbGVyX3BsYXkiIG1zZ2lkPSI2ODM2MzQ1NjU5Njk5ODc0NTgiPiLQotC+0LPQu9GD0YPQu9Cw0YUiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJtcl9jb250cm9sbGVyX3BhdXNlIiBtc2dpZD0iNTQ1MTg4NDQzNTUxMDkwNTQwNiI+ItCi0q/RgCDQt9C+0LPRgdC+0L7RhSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im1yX2NvbnRyb2xsZXJfc3RvcCIgbXNnaWQ9IjczNTg3NDY0MTkyMTQyNTEyMyI+ItCX0L7Qs9GB0L7QvtGFIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibXJfY29udHJvbGxlcl9leHBhbmRfZ3JvdXAiIG1zZ2lkPSI4MDYyNDI3MDIyNzQ0MjY2OTA3Ij4i0JTRjdC70LPRjdGFIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibXJfY29udHJvbGxlcl9jb2xsYXBzZV9ncm91cCIgbXNnaWQ9Ijc5MjQ4MDkwNTY5MDQyNDA5MjYiPiLQpdGD0YDQsNCw0YUiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJtcl9jb250cm9sbGVyX2FsYnVtX2FydCIgbXNnaWQ9IjY0MjI4MDE4NDM1NDA1NDM1ODUiPiLQptC+0LzQs9C40LnQvSDQt9GD0YDQsNCzIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibXJfY29udHJvbGxlcl92b2x1bWVfc2xpZGVyIiBtc2dpZD0iMjM2MTc4NTk5MjIxMTg0MTcwOSI+ItCU0YPRg9C90Ysg0YLSr9Cy0YjQuNC9INGC0LDQsNGA0YPRg9C70LDQs9GHIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibXJfY29udHJvbGxlcl9ub19tZWRpYV9zZWxlY3RlZCIgbXNnaWQ9IjY1NDcxMzAzNjAzNDkxODIzODEiPiLQr9C80LDRgCDRhyDQvNC10LTQuNCwINGB0L7QvdCz0L7QvtCz0q/QuSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im1yX2NvbnRyb2xsZXJfbm9faW5mb19hdmFpbGFibGUiIG1zZ2lkPSI1NTg1NDE4NDcxNzQxMTQyOTI0Ij4i0JzRjdC00Y3RjdC70Y3QuyDQsdCw0LnRhdCz0q/QuSDQsdCw0LnQvdCwIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibXJfY29udHJvbGxlcl9jYXN0aW5nX3NjcmVlbiIgbXNnaWQ9IjQ4Njg0NTc5NTcxNTExMjQ4NjciPiLQlNGN0LvQs9GN0YbQuNC50LMg0LTQsNC80LbRg9GD0LvQtiDQsdCw0LnQvdCwIjwvc3RyaW5nPgotPC9yZXNvdXJjZXM+CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9NZWRpYUNvbXBvbmVudHMvcmVzL3ZhbHVlcy1tci9zdHJpbmdzLnhtbCBiL3BhY2thZ2VzL01lZGlhQ29tcG9uZW50cy9yZXMvdmFsdWVzLW1yL3N0cmluZ3MueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyZmZiZWJiLi4wMDAwMDAwCi0tLSBhL3BhY2thZ2VzL01lZGlhQ29tcG9uZW50cy9yZXMvdmFsdWVzLW1yL3N0cmluZ3MueG1sCisrKyAvZGV2L251bGwKQEAgLTEsNDAgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTwhLS0gIENvcHlyaWdodCAyMDE4IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKLQotICAgICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKLSAgICAgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgotICAgICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLQotICAgICAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotCi0gICAgIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKLSAgICAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKLSAgICAgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCi0gICAgIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKLSAgICAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCi0gLS0+Ci0KLTxyZXNvdXJjZXMgeG1sbnM6YW5kcm9pZD0iaHR0cDovL3NjaGVtYXMuYW5kcm9pZC5jb20vYXBrL3Jlcy9hbmRyb2lkIgotICAgIHhtbG5zOnhsaWZmPSJ1cm46b2FzaXM6bmFtZXM6dGM6eGxpZmY6ZG9jdW1lbnQ6MS4yIj4KLSAgICA8c3RyaW5nIG5hbWU9Im1yX3N5c3RlbV9yb3V0ZV9uYW1lIiBtc2dpZD0iNTQ0MTUyOTg1MTQ4MTE3NjgxNyI+IuCkuOCkv+CkuOCljeCkn+CkriI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im1yX3VzZXJfcm91dGVfY2F0ZWdvcnlfbmFtZSIgbXNnaWQ9Ijc0OTgxMTI5MDc1MjQ5NzczMTEiPiLgpKHgpL/gpLXgpY3gpLngpL7gpIfgpLjgpYfgpLgiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJtcl9idXR0b25fY29udGVudF9kZXNjcmlwdGlvbiIgbXNnaWQ9IjM2OTgzNzgwODU5MDE0NjYxMjkiPiLgpJXgpL7gpLjgpY3gpJ8g4KSs4KSf4KSjIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibXJfY2FzdF9idXR0b25fZGlzY29ubmVjdGVkIiBtc2dpZD0iODE2MzA1NDkwNDI3ODE5MjQwIj4i4KSV4KS+4KS44KWN4KSfIOCkrOCkn+Ckoy4g4KSh4KS/4KS44KWN4KSV4KSo4KWH4KSV4KWN4KSfIOCkleClh+CksuClhyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im1yX2Nhc3RfYnV0dG9uX2Nvbm5lY3RpbmciIG1zZ2lkPSIyMTg3NjQyNzY1MDkxODczODM0Ij4i4KSV4KS+4KS44KWN4KSfIOCkrOCkn+Ckoy4g4KSV4KSo4KWH4KSV4KWN4KSfIOCkleCksOCkpCDgpIbgpLngpYciPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJtcl9jYXN0X2J1dHRvbl9jb25uZWN0ZWQiIG1zZ2lkPSI1MDg4NDI3NzcxNzg4NjQ4MDg1Ij4i4KSV4KS+4KS44KWN4KSfIOCkrOCkn+Ckoy4g4KSV4KSo4KWH4KSV4KWN4KSfIOCkleClh+CksuClhyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im1yX2Nob29zZXJfdGl0bGUiIG1zZ2lkPSI0MTQzMDE5NDE1NDYxMzU5OTAiPiLgpK/gpL7gpLXgpLAg4KSV4KS+4KS44KWN4KSfIOCkleCksOCkviI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im1yX2Nob29zZXJfc2VhcmNoaW5nIiBtc2dpZD0iNjM0OTkwMDU3OTUwNzUyMTk1NiI+IuCkoeCkv+CkteCljeCkueCkvuCkh+CkuOClh+CkuCDgpLbgpYvgpKfgpKQg4KSG4KS54KWHIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibXJfY29udHJvbGxlcl9kaXNjb25uZWN0IiBtc2dpZD0iMTIyNzI2NDg4OTQxMjk4OTU4MCI+IuCkoeCkv+CkuOCljeKAjeCkleCkqOClh+CkleCljeKAjeCknyDgpJXgpLDgpL4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJtcl9jb250cm9sbGVyX3N0b3BfY2FzdGluZyIgbXNnaWQ9Ijg4NTc4ODY3OTQwODY1ODMyMjYiPiLgpJXgpL7gpLjgpY3gpJ8g4KSV4KSw4KSj4KWHIOCkpeCkvuCkguCkrOCkteCkviI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im1yX2NvbnRyb2xsZXJfY2xvc2VfZGVzY3JpcHRpb24iIG1zZ2lkPSI3MzMzODYyMzEyNDgwNTgzMjYwIj4i4KSs4KSC4KSmIOCkleCksOCkviI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im1yX2NvbnRyb2xsZXJfcGxheSIgbXNnaWQ9IjY4MzYzNDU2NTk2OTk4NzQ1OCI+IuCkquCljeCksuClhyDgpJXgpLDgpL4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJtcl9jb250cm9sbGVyX3BhdXNlIiBtc2dpZD0iNTQ1MTg4NDQzNTUxMDkwNTQwNiI+IuCkteCkv+CksOCkvuCkriI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im1yX2NvbnRyb2xsZXJfc3RvcCIgbXNnaWQ9IjczNTg3NDY0MTkyMTQyNTEyMyI+IuCkpeCkvuCkguCkrOCkviI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im1yX2NvbnRyb2xsZXJfZXhwYW5kX2dyb3VwIiBtc2dpZD0iODA2MjQyNzAyMjc0NDI2NjkwNyI+IuCkteCkv+CkuOCljeCkpOClg+CkpCDgpJXgpLDgpL4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJtcl9jb250cm9sbGVyX2NvbGxhcHNlX2dyb3VwIiBtc2dpZD0iNzkyNDgwOTA1NjkwNDI0MDkyNiI+IuCkuOCkguCkleClgeCkmuCkv+CkpCDgpJXgpLDgpL4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJtcl9jb250cm9sbGVyX2FsYnVtX2FydCIgbXNnaWQ9IjY0MjI4MDE4NDM1NDA1NDM1ODUiPiLgpIXgpLLgpY3gpKzgpK4g4KSV4KSy4KS+Ijwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibXJfY29udHJvbGxlcl92b2x1bWVfc2xpZGVyIiBtc2dpZD0iMjM2MTc4NTk5MjIxMTg0MTcwOSI+IuCkteCljeCkueClieCksuCljeCkr+ClguCkriDgpLjgpY3gpLLgpL7gpK/gpKHgpLAiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJtcl9jb250cm9sbGVyX25vX21lZGlhX3NlbGVjdGVkIiBtc2dpZD0iNjU0NzEzMDM2MDM0OTE4MjM4MSI+IuCkruClgOCkoeCkv+Ckr+CkviDgpKjgpL/gpLXgpKHgpLLgpL4g4KSo4KS+4KS54KWAIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibXJfY29udHJvbGxlcl9ub19pbmZvX2F2YWlsYWJsZSIgbXNnaWQ9IjU1ODU0MTg0NzE3NDExNDI5MjQiPiLgpJXgpYvgpKPgpKTgpYDgpLngpYAg4KSu4KS+4KS54KS/4KSk4KWAIOCkieCkquCksuCkrOCljeCkpyDgpKjgpL7gpLngpYAiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJtcl9jb250cm9sbGVyX2Nhc3Rpbmdfc2NyZWVuIiBtc2dpZD0iNDg2ODQ1Nzk1NzE1MTEyNDg2NyI+IuCkuOCljeCkleCljeCksOClgOCkqCDgpJXgpL7gpLjgpY3igI3gpJ8g4KSV4KSw4KSkIOCkhuCkueClhyI8L3N0cmluZz4KLTwvcmVzb3VyY2VzPgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvTWVkaWFDb21wb25lbnRzL3Jlcy92YWx1ZXMtbXMvc3RyaW5ncy54bWwgYi9wYWNrYWdlcy9NZWRpYUNvbXBvbmVudHMvcmVzL3ZhbHVlcy1tcy9zdHJpbmdzLnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDg1ZTQ4MC4uMDAwMDAwMAotLS0gYS9wYWNrYWdlcy9NZWRpYUNvbXBvbmVudHMvcmVzL3ZhbHVlcy1tcy9zdHJpbmdzLnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDQwICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08IS0tICBDb3B5cmlnaHQgMjAxOCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0Ci0KLSAgICAgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7Ci0gICAgIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KLSAgICAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0KLSAgICAgICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLQotICAgICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCi0gICAgIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCi0gICAgIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgotICAgICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCi0gICAgIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgotIC0tPgotCi08cmVzb3VyY2VzIHhtbG5zOmFuZHJvaWQ9Imh0dHA6Ly9zY2hlbWFzLmFuZHJvaWQuY29tL2Fway9yZXMvYW5kcm9pZCIKLSAgICB4bWxuczp4bGlmZj0idXJuOm9hc2lzOm5hbWVzOnRjOnhsaWZmOmRvY3VtZW50OjEuMiI+Ci0gICAgPHN0cmluZyBuYW1lPSJtcl9zeXN0ZW1fcm91dGVfbmFtZSIgbXNnaWQ9IjU0NDE1Mjk4NTE0ODExNzY4MTciPiJTaXN0ZW0iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJtcl91c2VyX3JvdXRlX2NhdGVnb3J5X25hbWUiIG1zZ2lkPSI3NDk4MTEyOTA3NTI0OTc3MzExIj4iUGVyYW50aSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im1yX2J1dHRvbl9jb250ZW50X2Rlc2NyaXB0aW9uIiBtc2dpZD0iMzY5ODM3ODA4NTkwMTQ2NjEyOSI+IkJ1dGFuZyBIYW50YXIiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJtcl9jYXN0X2J1dHRvbl9kaXNjb25uZWN0ZWQiIG1zZ2lkPSI4MTYzMDU0OTA0Mjc4MTkyNDAiPiJCdXRhbmcgaGFudGFyLiBTYW1idW5nYW4gZGlwdXR1c2thbiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im1yX2Nhc3RfYnV0dG9uX2Nvbm5lY3RpbmciIG1zZ2lkPSIyMTg3NjQyNzY1MDkxODczODM0Ij4iQnV0YW5nIGhhbnRhci4gTWVueWFtYnVuZyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im1yX2Nhc3RfYnV0dG9uX2Nvbm5lY3RlZCIgbXNnaWQ9IjUwODg0Mjc3NzE3ODg2NDgwODUiPiJCdXRhbmcgaGFudGFyLiBEaXNhbWJ1bmdrYW4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJtcl9jaG9vc2VyX3RpdGxlIiBtc2dpZD0iNDE0MzAxOTQxNTQ2MTM1OTkwIj4iSGFudGFyIGtlIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibXJfY2hvb3Nlcl9zZWFyY2hpbmciIG1zZ2lkPSI2MzQ5OTAwNTc5NTA3NTIxOTU2Ij4iTWVuY2FyaSBwZXJhbnRpIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibXJfY29udHJvbGxlcl9kaXNjb25uZWN0IiBtc2dpZD0iMTIyNzI2NDg4OTQxMjk4OTU4MCI+IlB1dHVza2FuIHNhbWJ1bmdhbiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im1yX2NvbnRyb2xsZXJfc3RvcF9jYXN0aW5nIiBtc2dpZD0iODg1Nzg4Njc5NDA4NjU4MzIyNiI+IkJlcmhlbnRpIG1lbmdoYW50YXIiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJtcl9jb250cm9sbGVyX2Nsb3NlX2Rlc2NyaXB0aW9uIiBtc2dpZD0iNzMzMzg2MjMxMjQ4MDU4MzI2MCI+IlR1dHVwIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibXJfY29udHJvbGxlcl9wbGF5IiBtc2dpZD0iNjgzNjM0NTY1OTY5OTg3NDU4Ij4iTWFpbiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im1yX2NvbnRyb2xsZXJfcGF1c2UiIG1zZ2lkPSI1NDUxODg0NDM1NTEwOTA1NDA2Ij4iSmVkYSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im1yX2NvbnRyb2xsZXJfc3RvcCIgbXNnaWQ9IjczNTg3NDY0MTkyMTQyNTEyMyI+IkJlcmhlbnRpIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibXJfY29udHJvbGxlcl9leHBhbmRfZ3JvdXAiIG1zZ2lkPSI4MDYyNDI3MDIyNzQ0MjY2OTA3Ij4iS2VtYmFuZ2thbiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im1yX2NvbnRyb2xsZXJfY29sbGFwc2VfZ3JvdXAiIG1zZ2lkPSI3OTI0ODA5MDU2OTA0MjQwOTI2Ij4iUnVudHVoa2FuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibXJfY29udHJvbGxlcl9hbGJ1bV9hcnQiIG1zZ2lkPSI2NDIyODAxODQzNTQwNTQzNTg1Ij4iU2VuaSBhbGJ1bSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im1yX2NvbnRyb2xsZXJfdm9sdW1lX3NsaWRlciIgbXNnaWQ9IjIzNjE3ODU5OTIyMTE4NDE3MDkiPiJQZWx1bmN1ciBrZWxhbnRhbmdhbiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im1yX2NvbnRyb2xsZXJfbm9fbWVkaWFfc2VsZWN0ZWQiIG1zZ2lkPSI2NTQ3MTMwMzYwMzQ5MTgyMzgxIj4iVGlhZGEgbWVkaWEgZGlwaWxpaCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im1yX2NvbnRyb2xsZXJfbm9faW5mb19hdmFpbGFibGUiIG1zZ2lkPSI1NTg1NDE4NDcxNzQxMTQyOTI0Ij4iTWFrbHVtYXQgdGlkYWsgdGVyc2VkaWEiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJtcl9jb250cm9sbGVyX2Nhc3Rpbmdfc2NyZWVuIiBtc2dpZD0iNDg2ODQ1Nzk1NzE1MTEyNDg2NyI+Ik1lbmdoYW50YXIgc2tyaW4iPC9zdHJpbmc+Ci08L3Jlc291cmNlcz4KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL01lZGlhQ29tcG9uZW50cy9yZXMvdmFsdWVzLW15L3N0cmluZ3MueG1sIGIvcGFja2FnZXMvTWVkaWFDb21wb25lbnRzL3Jlcy92YWx1ZXMtbXkvc3RyaW5ncy54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDA4M2Q4MDUuLjAwMDAwMDAKLS0tIGEvcGFja2FnZXMvTWVkaWFDb21wb25lbnRzL3Jlcy92YWx1ZXMtbXkvc3RyaW5ncy54bWwKKysrIC9kZXYvbnVsbApAQCAtMSw0MCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPCEtLSAgQ29weXJpZ2h0IDIwMTggVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAotCi0gICAgIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwotICAgICB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCi0gICAgIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotCi0gICAgICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0KLSAgICAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQotICAgICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAotICAgICBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KLSAgICAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAotICAgICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KLSAtLT4KLQotPHJlc291cmNlcyB4bWxuczphbmRyb2lkPSJodHRwOi8vc2NoZW1hcy5hbmRyb2lkLmNvbS9hcGsvcmVzL2FuZHJvaWQiCi0gICAgeG1sbnM6eGxpZmY9InVybjpvYXNpczpuYW1lczp0Yzp4bGlmZjpkb2N1bWVudDoxLjIiPgotICAgIDxzdHJpbmcgbmFtZT0ibXJfc3lzdGVtX3JvdXRlX25hbWUiIG1zZ2lkPSI1NDQxNTI5ODUxNDgxMTc2ODE3Ij4i4YCF4YCU4YCF4YC6Ijwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibXJfdXNlcl9yb3V0ZV9jYXRlZ29yeV9uYW1lIiBtc2dpZD0iNzQ5ODExMjkwNzUyNDk3NzMxMSI+IuGAheGAgOGAuuGAleGAheGAueGAheGAiuGAuuGAuOGAmeGAu+GArOGAuCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im1yX2J1dHRvbl9jb250ZW50X2Rlc2NyaXB0aW9uIiBtc2dpZD0iMzY5ODM3ODA4NTkwMTQ2NjEyOSI+IuGAgOGArOGAheGAuuGAkOGAuuGAnOGAr+GAleGAuuGAm+GAlOGAuiDhgIHhgJzhgK/hgJDhgLoiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJtcl9jYXN0X2J1dHRvbl9kaXNjb25uZWN0ZWQiIG1zZ2lkPSI4MTYzMDU0OTA0Mjc4MTkyNDAiPiLhgIDhgKzhgIXhgLrhgIHhgJzhgK/hgJDhgLrhgYsg4YCB4YC74YCt4YCQ4YC64YCG4YCA4YC64YCZ4YCR4YCs4YC44YCV4YCrIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibXJfY2FzdF9idXR0b25fY29ubmVjdGluZyIgbXNnaWQ9IjIxODc2NDI3NjUwOTE4NzM4MzQiPiLhgIDhgKzhgIXhgLrhgIHhgJzhgK/hgJDhgLrhgYsg4YCB4YC74YCt4YCQ4YC64YCG4YCA4YC64YCU4YCx4YCe4YCK4YC6Ijwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibXJfY2FzdF9idXR0b25fY29ubmVjdGVkIiBtc2dpZD0iNTA4ODQyNzc3MTc4ODY0ODA4NSI+IuGAgOGArOGAheGAuuGAgeGAnOGAr+GAkOGAuuGBiyDhgIHhgLvhgK3hgJDhgLrhgIbhgIDhgLrhgJHhgKzhgLjhgJ7hgIrhgLoiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJtcl9jaG9vc2VyX3RpdGxlIiBtc2dpZD0iNDE0MzAxOTQxNTQ2MTM1OTkwIj4i4YCA4YCs4YCF4YC64YCc4YCv4YCV4YC64YCb4YCU4YC6IOGAheGAgOGAuiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im1yX2Nob29zZXJfc2VhcmNoaW5nIiBtc2dpZD0iNjM0OTkwMDU3OTUwNzUyMTk1NiI+IuGAheGAgOGAuuGAleGAheGAueGAheGAiuGAuuGAuOGAmeGAu+GArOGAuCDhgJvhgL7hgKzhgJbhgL3hgLHhgIHhgLzhgIThgLrhgLgiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJtcl9jb250cm9sbGVyX2Rpc2Nvbm5lY3QiIG1zZ2lkPSIxMjI3MjY0ODg5NDEyOTg5NTgwIj4i4YCG4YCA4YC64YCe4YC94YCa4YC64YCZ4YC+4YCvIOGAluGAvOGAkOGAuuGAm+GAlOGAuiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im1yX2NvbnRyb2xsZXJfc3RvcF9jYXN0aW5nIiBtc2dpZD0iODg1Nzg4Njc5NDA4NjU4MzIyNiI+IuGAgOGArOGAheGAuuGAnOGAr+GAleGAuuGAgeGAvOGAhOGAuuGAuCDhgJvhgJXhgLrhgJvhgJThgLoiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJtcl9jb250cm9sbGVyX2Nsb3NlX2Rlc2NyaXB0aW9uIiBtc2dpZD0iNzMzMzg2MjMxMjQ4MDU4MzI2MCI+IuGAleGAreGAkOGAuuGAm+GAlOGAuiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im1yX2NvbnRyb2xsZXJfcGxheSIgbXNnaWQ9IjY4MzYzNDU2NTk2OTk4NzQ1OCI+IuGAluGAveGAhOGAt+GAuuGAm+GAlOGAuiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im1yX2NvbnRyb2xsZXJfcGF1c2UiIG1zZ2lkPSI1NDUxODg0NDM1NTEwOTA1NDA2Ij4i4YCB4YCP4YCb4YCV4YC64YCb4YCU4YC6Ijwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibXJfY29udHJvbGxlcl9zdG9wIiBtc2dpZD0iNzM1ODc0NjQxOTIxNDI1MTIzIj4i4YCb4YCV4YC64YCb4YCU4YC6Ijwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibXJfY29udHJvbGxlcl9leHBhbmRfZ3JvdXAiIG1zZ2lkPSI4MDYyNDI3MDIyNzQ0MjY2OTA3Ij4i4YCW4YC84YCU4YC34YC64YCB4YC74YCb4YCU4YC64YGDIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibXJfY29udHJvbGxlcl9jb2xsYXBzZV9ncm91cCIgbXNnaWQ9Ijc5MjQ4MDkwNTY5MDQyNDA5MjYiPiLhgIHhgLHhgKvhgIDhgLrhgJ7hgK3hgJnhgLrhgLjhgJvhgJThgLouLi4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJtcl9jb250cm9sbGVyX2FsYnVtX2FydCIgbXNnaWQ9IjY0MjI4MDE4NDM1NDA1NDM1ODUiPiLhgKHhgJrhgLrhgJzhgLrhgJjhgJnhgLrhgJXhgK/hgLYiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJtcl9jb250cm9sbGVyX3ZvbHVtZV9zbGlkZXIiIG1zZ2lkPSIyMzYxNzg1OTkyMjExODQxNzA5Ij4i4YCh4YCe4YC24YCh4YCQ4YCt4YCv4YC44YCh4YCA4YC74YCa4YC64YCB4YC74YCt4YCU4YC64YCe4YCK4YC34YC6IOGAhuGAnOGAreGAr+GAgOGAuuGAkuGAqyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im1yX2NvbnRyb2xsZXJfbm9fbWVkaWFfc2VsZWN0ZWQiIG1zZ2lkPSI2NTQ3MTMwMzYwMzQ5MTgyMzgxIj4i4YCZ4YCK4YC64YCe4YCK4YC34YC64YCZ4YCu4YCS4YCu4YCZ4YC+IOGAmeGAm+GAveGAseGAuOGAgeGAu+GAmuGAuuGAkeGArOGAuOGAleGAqyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im1yX2NvbnRyb2xsZXJfbm9faW5mb19hdmFpbGFibGUiIG1zZ2lkPSI1NTg1NDE4NDcxNzQxMTQyOTI0Ij4i4YCh4YCB4YC74YCA4YC64YCh4YCc4YCA4YC6IOGAmeGAm+GAm+GAvuGAreGAlOGAreGAr+GAhOGAuuGAleGAqyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im1yX2NvbnRyb2xsZXJfY2FzdGluZ19zY3JlZW4iIG1zZ2lkPSI0ODY4NDU3OTU3MTUxMTI0ODY3Ij4i4YCQ4YCK4YC64YC44YCW4YC84YCQ4YC64YCb4YCx4YC4IOGAmeGAu+GAgOGAuuGAlOGAvuGArOGAleGAvOGAhOGAuiI8L3N0cmluZz4KLTwvcmVzb3VyY2VzPgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvTWVkaWFDb21wb25lbnRzL3Jlcy92YWx1ZXMtbmIvc3RyaW5ncy54bWwgYi9wYWNrYWdlcy9NZWRpYUNvbXBvbmVudHMvcmVzL3ZhbHVlcy1uYi9zdHJpbmdzLnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNGY3NjRjOS4uMDAwMDAwMAotLS0gYS9wYWNrYWdlcy9NZWRpYUNvbXBvbmVudHMvcmVzL3ZhbHVlcy1uYi9zdHJpbmdzLnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDQwICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08IS0tICBDb3B5cmlnaHQgMjAxOCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0Ci0KLSAgICAgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7Ci0gICAgIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KLSAgICAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0KLSAgICAgICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLQotICAgICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCi0gICAgIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCi0gICAgIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgotICAgICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCi0gICAgIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgotIC0tPgotCi08cmVzb3VyY2VzIHhtbG5zOmFuZHJvaWQ9Imh0dHA6Ly9zY2hlbWFzLmFuZHJvaWQuY29tL2Fway9yZXMvYW5kcm9pZCIKLSAgICB4bWxuczp4bGlmZj0idXJuOm9hc2lzOm5hbWVzOnRjOnhsaWZmOmRvY3VtZW50OjEuMiI+Ci0gICAgPHN0cmluZyBuYW1lPSJtcl9zeXN0ZW1fcm91dGVfbmFtZSIgbXNnaWQ9IjU0NDE1Mjk4NTE0ODExNzY4MTciPiJTeXN0ZW0iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJtcl91c2VyX3JvdXRlX2NhdGVnb3J5X25hbWUiIG1zZ2lkPSI3NDk4MTEyOTA3NTI0OTc3MzExIj4iRW5oZXRlciI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im1yX2J1dHRvbl9jb250ZW50X2Rlc2NyaXB0aW9uIiBtc2dpZD0iMzY5ODM3ODA4NTkwMTQ2NjEyOSI+IkNhc3QtaWtvbmV0Ijwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibXJfY2FzdF9idXR0b25fZGlzY29ubmVjdGVkIiBtc2dpZD0iODE2MzA1NDkwNDI3ODE5MjQwIj4iQ2FzdC1rbmFwcGVuLiBGcmFrb2JsZXQiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJtcl9jYXN0X2J1dHRvbl9jb25uZWN0aW5nIiBtc2dpZD0iMjE4NzY0Mjc2NTA5MTg3MzgzNCI+IkNhc3Qta25hcHBlbi4gS29ibGVyIHRpbCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im1yX2Nhc3RfYnV0dG9uX2Nvbm5lY3RlZCIgbXNnaWQ9IjUwODg0Mjc3NzE3ODg2NDgwODUiPiJDYXN0LWtuYXBwZW4uIFRpbGtvYmxldCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im1yX2Nob29zZXJfdGl0bGUiIG1zZ2lkPSI0MTQzMDE5NDE1NDYxMzU5OTAiPiJDYXN0IHRpbCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im1yX2Nob29zZXJfc2VhcmNoaW5nIiBtc2dpZD0iNjM0OTkwMDU3OTUwNzUyMTk1NiI+IlPDuGtlciBldHRlciBlbmhldGVyIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibXJfY29udHJvbGxlcl9kaXNjb25uZWN0IiBtc2dpZD0iMTIyNzI2NDg4OTQxMjk4OTU4MCI+IktvYmxlIGZyYSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im1yX2NvbnRyb2xsZXJfc3RvcF9jYXN0aW5nIiBtc2dpZD0iODg1Nzg4Njc5NDA4NjU4MzIyNiI+IlN0b3BwIGNhc3RpbmdlbiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im1yX2NvbnRyb2xsZXJfY2xvc2VfZGVzY3JpcHRpb24iIG1zZ2lkPSI3MzMzODYyMzEyNDgwNTgzMjYwIj4iTHVrayI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im1yX2NvbnRyb2xsZXJfcGxheSIgbXNnaWQ9IjY4MzYzNDU2NTk2OTk4NzQ1OCI+IlNwaWxsIGF2Ijwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibXJfY29udHJvbGxlcl9wYXVzZSIgbXNnaWQ9IjU0NTE4ODQ0MzU1MTA5MDU0MDYiPiJTZXR0IHDDpSBwYXVzZSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im1yX2NvbnRyb2xsZXJfc3RvcCIgbXNnaWQ9IjczNTg3NDY0MTkyMTQyNTEyMyI+IlN0b3BwIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibXJfY29udHJvbGxlcl9leHBhbmRfZ3JvdXAiIG1zZ2lkPSI4MDYyNDI3MDIyNzQ0MjY2OTA3Ij4iVXR2aWQiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJtcl9jb250cm9sbGVyX2NvbGxhcHNlX2dyb3VwIiBtc2dpZD0iNzkyNDgwOTA1NjkwNDI0MDkyNiI+IlNranVsIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibXJfY29udHJvbGxlcl9hbGJ1bV9hcnQiIG1zZ2lkPSI2NDIyODAxODQzNTQwNTQzNTg1Ij4iQWxidW1ncmFmaWtrIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibXJfY29udHJvbGxlcl92b2x1bWVfc2xpZGVyIiBtc2dpZD0iMjM2MTc4NTk5MjIxMTg0MTcwOSI+IkdsaWRlYnJ5dGVyIGZvciB2b2x1bSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im1yX2NvbnRyb2xsZXJfbm9fbWVkaWFfc2VsZWN0ZWQiIG1zZ2lkPSI2NTQ3MTMwMzYwMzQ5MTgyMzgxIj4iRHUgaGFyIGlra2UgdmFsZ3Qgbm9lbiBtZWRpZXIiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJtcl9jb250cm9sbGVyX25vX2luZm9fYXZhaWxhYmxlIiBtc2dpZD0iNTU4NTQxODQ3MTc0MTE0MjkyNCI+IkluZ2VuIGluZm9ybWFzam9uIGVyIHRpbGdqZW5nZWxpZyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im1yX2NvbnRyb2xsZXJfY2FzdGluZ19zY3JlZW4iIG1zZ2lkPSI0ODY4NDU3OTU3MTUxMTI0ODY3Ij4iQ2FzdGVyIHNramVybWVuIjwvc3RyaW5nPgotPC9yZXNvdXJjZXM+CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9NZWRpYUNvbXBvbmVudHMvcmVzL3ZhbHVlcy1uZS9zdHJpbmdzLnhtbCBiL3BhY2thZ2VzL01lZGlhQ29tcG9uZW50cy9yZXMvdmFsdWVzLW5lL3N0cmluZ3MueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkNmMyZTFhLi4wMDAwMDAwCi0tLSBhL3BhY2thZ2VzL01lZGlhQ29tcG9uZW50cy9yZXMvdmFsdWVzLW5lL3N0cmluZ3MueG1sCisrKyAvZGV2L251bGwKQEAgLTEsNDAgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTwhLS0gIENvcHlyaWdodCAyMDE4IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKLQotICAgICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKLSAgICAgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgotICAgICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLQotICAgICAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotCi0gICAgIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKLSAgICAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKLSAgICAgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCi0gICAgIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKLSAgICAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCi0gLS0+Ci0KLTxyZXNvdXJjZXMgeG1sbnM6YW5kcm9pZD0iaHR0cDovL3NjaGVtYXMuYW5kcm9pZC5jb20vYXBrL3Jlcy9hbmRyb2lkIgotICAgIHhtbG5zOnhsaWZmPSJ1cm46b2FzaXM6bmFtZXM6dGM6eGxpZmY6ZG9jdW1lbnQ6MS4yIj4KLSAgICA8c3RyaW5nIG5hbWU9Im1yX3N5c3RlbV9yb3V0ZV9uYW1lIiBtc2dpZD0iNTQ0MTUyOTg1MTQ4MTE3NjgxNyI+IuCkquCljeCksOCko+CkvuCksuClgCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im1yX3VzZXJfcm91dGVfY2F0ZWdvcnlfbmFtZSIgbXNnaWQ9Ijc0OTgxMTI5MDc1MjQ5NzczMTEiPiLgpIngpKrgpJXgpLDgpKPgpLngpLDgpYIiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJtcl9idXR0b25fY29udGVudF9kZXNjcmlwdGlvbiIgbXNnaWQ9IjM2OTgzNzgwODU5MDE0NjYxMjkiPiJDYXN0IOCkrOCkn+CkqCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im1yX2Nhc3RfYnV0dG9uX2Rpc2Nvbm5lY3RlZCIgbXNnaWQ9IjgxNjMwNTQ5MDQyNzgxOTI0MCI+IkNhc3Qg4KSs4KSf4KSo4KWkIOCknOCkoeCkvuCkqCDgpLXgpL/gpJrgpY3gpJvgpYfgpKYg4KSt4KSv4KWLIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibXJfY2FzdF9idXR0b25fY29ubmVjdGluZyIgbXNnaWQ9IjIxODc2NDI3NjUwOTE4NzM4MzQiPiJDYXN0IOCkrOCkn+CkqOClpCDgpJzgpKHgpL7gpKgg4KS54KWB4KSB4KSm4KWIIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibXJfY2FzdF9idXR0b25fY29ubmVjdGVkIiBtc2dpZD0iNTA4ODQyNzc3MTc4ODY0ODA4NSI+IkNhc3Qg4KSs4KSf4KSo4KWkIOCknOCkoeCkvuCkqCDgpK3gpK/gpYsiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJtcl9jaG9vc2VyX3RpdGxlIiBtc2dpZD0iNDE0MzAxOTQxNTQ2MTM1OTkwIj4i4KSv4KS44KSu4KS+IENhc3Qg4KSX4KSw4KWN4KSo4KWB4KS54KWL4KS44KWNIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibXJfY2hvb3Nlcl9zZWFyY2hpbmciIG1zZ2lkPSI2MzQ5OTAwNTc5NTA3NTIxOTU2Ij4i4KSv4KSo4KWN4KSk4KWN4KSw4KS54KSw4KWCIOCkquCkpOCljeCkpOCkviDgpLLgpJfgpL7gpIngpIHgpKbgpYgiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJtcl9jb250cm9sbGVyX2Rpc2Nvbm5lY3QiIG1zZ2lkPSIxMjI3MjY0ODg5NDEyOTg5NTgwIj4i4KS14KS/4KSa4KWN4KSb4KWH4KSmIOCkl+CksOCljeCkqOClgeCkueCli+CkuOCljSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im1yX2NvbnRyb2xsZXJfc3RvcF9jYXN0aW5nIiBtc2dpZD0iODg1Nzg4Njc5NDA4NjU4MzIyNiI+ImNhc3Rpbmcg4KSw4KWL4KSV4KWN4KSo4KWB4KS54KWL4KS44KWNIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibXJfY29udHJvbGxlcl9jbG9zZV9kZXNjcmlwdGlvbiIgbXNnaWQ9IjczMzM4NjIzMTI0ODA1ODMyNjAiPiLgpKzgpKjgpY3gpKYg4KSX4KSw4KWN4KSo4KWB4KS54KWL4KS44KWNIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibXJfY29udHJvbGxlcl9wbGF5IiBtc2dpZD0iNjgzNjM0NTY1OTY5OTg3NDU4Ij4i4KSs4KSc4KS+4KSJ4KSo4KWB4KS54KWL4KS44KWNIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibXJfY29udHJvbGxlcl9wYXVzZSIgbXNnaWQ9IjU0NTE4ODQ0MzU1MTA5MDU0MDYiPiLgpLDgpYvgpJXgpY3gpKjgpYHgpLngpYvgpLjgpY0iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJtcl9jb250cm9sbGVyX3N0b3AiIG1zZ2lkPSI3MzU4NzQ2NDE5MjE0MjUxMjMiPiLgpLDgpYvgpJXgpY3gpKjgpYHgpLngpYvgpLjgpY0iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJtcl9jb250cm9sbGVyX2V4cGFuZF9ncm91cCIgbXNnaWQ9IjgwNjI0MjcwMjI3NDQyNjY5MDciPiLgpLXgpL/gpLjgpY3gpKTgpL7gpLAg4KSX4KSw4KWN4KSo4KWB4KS54KWL4KS44KWNIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibXJfY29udHJvbGxlcl9jb2xsYXBzZV9ncm91cCIgbXNnaWQ9Ijc5MjQ4MDkwNTY5MDQyNDA5MjYiPiLgpLjgpILgpJXgpY3gpLfgpL/gpKrgpY3gpKQg4KSq4KS+4KSw4KWN4KSo4KWB4KS54KWL4KS44KWNIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibXJfY29udHJvbGxlcl9hbGJ1bV9hcnQiIG1zZ2lkPSI2NDIyODAxODQzNTQwNTQzNTg1Ij4i4KSP4KSy4KWN4KSs4KSuIOCkhuCksOCljeCknyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im1yX2NvbnRyb2xsZXJfdm9sdW1lX3NsaWRlciIgbXNnaWQ9IjIzNjE3ODU5OTIyMTE4NDE3MDkiPiLgpK3gpYvgpLLgpY3gpK/gpYHgpK7gpJXgpYsg4KS44KWN4KSy4KS+4KSH4KSh4KSwIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibXJfY29udHJvbGxlcl9ub19tZWRpYV9zZWxlY3RlZCIgbXNnaWQ9IjY1NDcxMzAzNjAzNDkxODIzODEiPiLgpJXgpYHgpKjgpYgg4KSu4KS/4KSh4KS/4KSv4KS+IOCkmuCkr+CkqCDgpK3gpI/gpJXgpYsg4KSb4KWI4KSoIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibXJfY29udHJvbGxlcl9ub19pbmZvX2F2YWlsYWJsZSIgbXNnaWQ9IjU1ODU0MTg0NzE3NDExNDI5MjQiPiLgpJzgpL7gpKjgpJXgpL7gpLDgpYAg4KSJ4KSq4KSy4KSs4KWN4KSnIOCkm+CliOCkqCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im1yX2NvbnRyb2xsZXJfY2FzdGluZ19zY3JlZW4iIG1zZ2lkPSI0ODY4NDU3OTU3MTUxMTI0ODY3Ij4i4KS44KWN4KSV4KWN4KSw4KS/4KSoIGNhc3Qg4KSX4KSw4KWN4KSm4KWIIjwvc3RyaW5nPgotPC9yZXNvdXJjZXM+CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9NZWRpYUNvbXBvbmVudHMvcmVzL3ZhbHVlcy1ubC9zdHJpbmdzLnhtbCBiL3BhY2thZ2VzL01lZGlhQ29tcG9uZW50cy9yZXMvdmFsdWVzLW5sL3N0cmluZ3MueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwNWRmNjJkLi4wMDAwMDAwCi0tLSBhL3BhY2thZ2VzL01lZGlhQ29tcG9uZW50cy9yZXMvdmFsdWVzLW5sL3N0cmluZ3MueG1sCisrKyAvZGV2L251bGwKQEAgLTEsNDAgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTwhLS0gIENvcHlyaWdodCAyMDE4IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKLQotICAgICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKLSAgICAgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgotICAgICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLQotICAgICAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotCi0gICAgIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKLSAgICAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKLSAgICAgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCi0gICAgIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKLSAgICAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCi0gLS0+Ci0KLTxyZXNvdXJjZXMgeG1sbnM6YW5kcm9pZD0iaHR0cDovL3NjaGVtYXMuYW5kcm9pZC5jb20vYXBrL3Jlcy9hbmRyb2lkIgotICAgIHhtbG5zOnhsaWZmPSJ1cm46b2FzaXM6bmFtZXM6dGM6eGxpZmY6ZG9jdW1lbnQ6MS4yIj4KLSAgICA8c3RyaW5nIG5hbWU9Im1yX3N5c3RlbV9yb3V0ZV9uYW1lIiBtc2dpZD0iNTQ0MTUyOTg1MTQ4MTE3NjgxNyI+IlN5c3RlZW0iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJtcl91c2VyX3JvdXRlX2NhdGVnb3J5X25hbWUiIG1zZ2lkPSI3NDk4MTEyOTA3NTI0OTc3MzExIj4iQXBwYXJhdGVuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibXJfYnV0dG9uX2NvbnRlbnRfZGVzY3JpcHRpb24iIG1zZ2lkPSIzNjk4Mzc4MDg1OTAxNDY2MTI5Ij4iQ2FzdC1pY29vbiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im1yX2Nhc3RfYnV0dG9uX2Rpc2Nvbm5lY3RlZCIgbXNnaWQ9IjgxNjMwNTQ5MDQyNzgxOTI0MCI+IkNhc3QtaWNvb24uIFZlcmJpbmRpbmcgdmVyYnJva2VuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibXJfY2FzdF9idXR0b25fY29ubmVjdGluZyIgbXNnaWQ9IjIxODc2NDI3NjUwOTE4NzM4MzQiPiJDYXN0LWljb29uLiBWZXJiaW5kaW5nIG1ha2VuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibXJfY2FzdF9idXR0b25fY29ubmVjdGVkIiBtc2dpZD0iNTA4ODQyNzc3MTc4ODY0ODA4NSI+IkNhc3QtaWNvb24uIFZlcmJvbmRlbiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im1yX2Nob29zZXJfdGl0bGUiIG1zZ2lkPSI0MTQzMDE5NDE1NDYxMzU5OTAiPiJDYXN0ZW4gbmFhciI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im1yX2Nob29zZXJfc2VhcmNoaW5nIiBtc2dpZD0iNjM0OTkwMDU3OTUwNzUyMTk1NiI+IkFwcGFyYXRlbiB6b2VrZW4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJtcl9jb250cm9sbGVyX2Rpc2Nvbm5lY3QiIG1zZ2lkPSIxMjI3MjY0ODg5NDEyOTg5NTgwIj4iTG9za29wcGVsZW4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJtcl9jb250cm9sbGVyX3N0b3BfY2FzdGluZyIgbXNnaWQ9Ijg4NTc4ODY3OTQwODY1ODMyMjYiPiJDYXN0ZW4gc3RvcHBlbiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im1yX2NvbnRyb2xsZXJfY2xvc2VfZGVzY3JpcHRpb24iIG1zZ2lkPSI3MzMzODYyMzEyNDgwNTgzMjYwIj4iU2x1aXRlbiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im1yX2NvbnRyb2xsZXJfcGxheSIgbXNnaWQ9IjY4MzYzNDU2NTk2OTk4NzQ1OCI+IkFmc3BlbGVuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibXJfY29udHJvbGxlcl9wYXVzZSIgbXNnaWQ9IjU0NTE4ODQ0MzU1MTA5MDU0MDYiPiJPbmRlcmJyZWtlbiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im1yX2NvbnRyb2xsZXJfc3RvcCIgbXNnaWQ9IjczNTg3NDY0MTkyMTQyNTEyMyI+IlN0b3BwZW4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJtcl9jb250cm9sbGVyX2V4cGFuZF9ncm91cCIgbXNnaWQ9IjgwNjI0MjcwMjI3NDQyNjY5MDciPiJVaXR2b3V3ZW4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJtcl9jb250cm9sbGVyX2NvbGxhcHNlX2dyb3VwIiBtc2dpZD0iNzkyNDgwOTA1NjkwNDI0MDkyNiI+IlNhbWVudm91d2VuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibXJfY29udHJvbGxlcl9hbGJ1bV9hcnQiIG1zZ2lkPSI2NDIyODAxODQzNTQwNTQzNTg1Ij4iQWxidW1ob2VzIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibXJfY29udHJvbGxlcl92b2x1bWVfc2xpZGVyIiBtc2dpZD0iMjM2MTc4NTk5MjIxMTg0MTcwOSI+IlZvbHVtZXNjaHVpZnJlZ2VsYWFyIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibXJfY29udHJvbGxlcl9ub19tZWRpYV9zZWxlY3RlZCIgbXNnaWQ9IjY1NDcxMzAzNjAzNDkxODIzODEiPiJHZWVuIG1lZGlhIGdlc2VsZWN0ZWVyZCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im1yX2NvbnRyb2xsZXJfbm9faW5mb19hdmFpbGFibGUiIG1zZ2lkPSI1NTg1NDE4NDcxNzQxMTQyOTI0Ij4iR2VlbiBpbmZvcm1hdGllIGJlc2NoaWtiYWFyIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibXJfY29udHJvbGxlcl9jYXN0aW5nX3NjcmVlbiIgbXNnaWQ9IjQ4Njg0NTc5NTcxNTExMjQ4NjciPiJTY2hlcm0gY2FzdGVuIjwvc3RyaW5nPgotPC9yZXNvdXJjZXM+CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9NZWRpYUNvbXBvbmVudHMvcmVzL3ZhbHVlcy1wYS9zdHJpbmdzLnhtbCBiL3BhY2thZ2VzL01lZGlhQ29tcG9uZW50cy9yZXMvdmFsdWVzLXBhL3N0cmluZ3MueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxYjVkZjcxLi4wMDAwMDAwCi0tLSBhL3BhY2thZ2VzL01lZGlhQ29tcG9uZW50cy9yZXMvdmFsdWVzLXBhL3N0cmluZ3MueG1sCisrKyAvZGV2L251bGwKQEAgLTEsNDAgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTwhLS0gIENvcHlyaWdodCAyMDE4IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKLQotICAgICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKLSAgICAgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgotICAgICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLQotICAgICAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotCi0gICAgIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKLSAgICAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKLSAgICAgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCi0gICAgIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKLSAgICAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCi0gLS0+Ci0KLTxyZXNvdXJjZXMgeG1sbnM6YW5kcm9pZD0iaHR0cDovL3NjaGVtYXMuYW5kcm9pZC5jb20vYXBrL3Jlcy9hbmRyb2lkIgotICAgIHhtbG5zOnhsaWZmPSJ1cm46b2FzaXM6bmFtZXM6dGM6eGxpZmY6ZG9jdW1lbnQ6MS4yIj4KLSAgICA8c3RyaW5nIG5hbWU9Im1yX3N5c3RlbV9yb3V0ZV9uYW1lIiBtc2dpZD0iNTQ0MTUyOTg1MTQ4MTE3NjgxNyI+IuCouOCov+CouOCon+CoriI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im1yX3VzZXJfcm91dGVfY2F0ZWdvcnlfbmFtZSIgbXNnaWQ9Ijc0OTgxMTI5MDc1MjQ5NzczMTEiPiLgqKHgqL/gqLXgqL7gqIjgqLjgqL7gqIIiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJtcl9idXR0b25fY29udGVudF9kZXNjcmlwdGlvbiIgbXNnaWQ9IjM2OTgzNzgwODU5MDE0NjYxMjkiPiLgqJXgqL7gqLjgqJ8g4Kis4Kif4KioIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibXJfY2FzdF9idXR0b25fZGlzY29ubmVjdGVkIiBtc2dpZD0iODE2MzA1NDkwNDI3ODE5MjQwIj4i4KiV4Ki+4Ki44KifIOCorOCon+CoqOClpCDgqKHgqL/gqLjgqJXgqKjgqYjgqJXgqJ8g4KiV4KmA4Kik4Ki+IOCol+Cov+CohiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im1yX2Nhc3RfYnV0dG9uX2Nvbm5lY3RpbmciIG1zZ2lkPSIyMTg3NjQyNzY1MDkxODczODM0Ij4i4KiV4Ki+4Ki44KifIOCorOCon+CoqOClpCDgqJXgqKjgqYjgqJXgqJ8g4KiV4KmA4Kik4Ki+IOConOCoviDgqLDgqL/gqLngqL4g4Ki54KmIIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibXJfY2FzdF9idXR0b25fY29ubmVjdGVkIiBtc2dpZD0iNTA4ODQyNzc3MTc4ODY0ODA4NSI+IuColeCovuCouOConyDgqKzgqJ/gqKjgpaQg4KiV4Kio4KmI4KiV4KifIOColeCpgOCopOCoviDgqJfgqL/gqIYiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJtcl9jaG9vc2VyX3RpdGxlIiBtc2dpZD0iNDE0MzAxOTQxNTQ2MTM1OTkwIj4i4KiP4Kil4KmHIOColeCovuCouOConyDgqJXgqLDgqYsiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJtcl9jaG9vc2VyX3NlYXJjaGluZyIgbXNnaWQ9IjYzNDk5MDA1Nzk1MDc1MjE5NTYiPiLgqKHgqYDgqLXgqL7gqIjgqLjgqL7gqIIg4Kio4KmC4KmwIOCosuCpseCoreCov+CohiDgqJzgqL4g4Kiw4Ki/4Ki54Ki+IOCoueCpiCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im1yX2NvbnRyb2xsZXJfZGlzY29ubmVjdCIgbXNnaWQ9IjEyMjcyNjQ4ODk0MTI5ODk1ODAiPiLgqKHgqL/gqLjgqJXgqKjgqYjgqJXgqJ8g4KiV4Kiw4KmLIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibXJfY29udHJvbGxlcl9zdG9wX2Nhc3RpbmciIG1zZ2lkPSI4ODU3ODg2Nzk0MDg2NTgzMjI2Ij4i4KiV4Ki+4Ki44KifIOColeCosOCoqOCoviDgqKzgqbDgqKYg4KiV4Kiw4KmLIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibXJfY29udHJvbGxlcl9jbG9zZV9kZXNjcmlwdGlvbiIgbXNnaWQ9IjczMzM4NjIzMTI0ODA1ODMyNjAiPiLgqKzgqbDgqKYg4KiV4Kiw4KmLIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibXJfY29udHJvbGxlcl9wbGF5IiBtc2dpZD0iNjgzNjM0NTY1OTY5OTg3NDU4Ij4i4Kiq4Kiy4KmHIOColeCosOCpiyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im1yX2NvbnRyb2xsZXJfcGF1c2UiIG1zZ2lkPSI1NDUxODg0NDM1NTEwOTA1NDA2Ij4i4Kiw4KmL4KiV4KmLIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibXJfY29udHJvbGxlcl9zdG9wIiBtc2dpZD0iNzM1ODc0NjQxOTIxNDI1MTIzIj4i4Kis4Kmw4KimIOColeCosOCpiyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im1yX2NvbnRyb2xsZXJfZXhwYW5kX2dyb3VwIiBtc2dpZD0iODA2MjQyNzAyMjc0NDI2NjkwNyI+IuCoteCov+CouOCopOCovuCosCDgqJXgqLDgqYsiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJtcl9jb250cm9sbGVyX2NvbGxhcHNlX2dyb3VwIiBtc2dpZD0iNzkyNDgwOTA1NjkwNDI0MDkyNiI+IuCorOCpsOCopiDgqJXgqLDgqYsiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJtcl9jb250cm9sbGVyX2FsYnVtX2FydCIgbXNnaWQ9IjY0MjI4MDE4NDM1NDA1NDM1ODUiPiLgqJDgqLLgqKzgqK4g4KiG4Kiw4KifIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibXJfY29udHJvbGxlcl92b2x1bWVfc2xpZGVyIiBtc2dpZD0iMjM2MTc4NTk5MjIxMTg0MTcwOSI+IuCoteCpjOCosuCor+CpguCoriDgqLjgqLLgqL7gqIjgqKHgqLAiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJtcl9jb250cm9sbGVyX25vX21lZGlhX3NlbGVjdGVkIiBtc2dpZD0iNjU0NzEzMDM2MDM0OTE4MjM4MSI+IuColeCpi+CoiCDgqLXgqYAg4Kiu4KmA4Kih4KmA4KiGIOCoqOCoueCpgOCogiDgqJrgqYHgqKPgqL/gqIYg4KiX4Ki/4KiGIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibXJfY29udHJvbGxlcl9ub19pbmZvX2F2YWlsYWJsZSIgbXNnaWQ9IjU1ODU0MTg0NzE3NDExNDI5MjQiPiLgqJXgqYvgqIgg4Kic4Ki+4Kij4KiV4Ki+4Kiw4KmAIOCoieCoquCosuCorOCopyDgqKjgqLngqYDgqIIiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJtcl9jb250cm9sbGVyX2Nhc3Rpbmdfc2NyZWVuIiBtc2dpZD0iNDg2ODQ1Nzk1NzE1MTEyNDg2NyI+IuCouOColeCpjeCosOCpgOCoqCDgqJzgqYvgqZwg4Kiw4Ki/4Ki54Ki+IOCoueCpiCI8L3N0cmluZz4KLTwvcmVzb3VyY2VzPgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvTWVkaWFDb21wb25lbnRzL3Jlcy92YWx1ZXMtcGwvc3RyaW5ncy54bWwgYi9wYWNrYWdlcy9NZWRpYUNvbXBvbmVudHMvcmVzL3ZhbHVlcy1wbC9zdHJpbmdzLnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzc5MmE2ZC4uMDAwMDAwMAotLS0gYS9wYWNrYWdlcy9NZWRpYUNvbXBvbmVudHMvcmVzL3ZhbHVlcy1wbC9zdHJpbmdzLnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDQwICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08IS0tICBDb3B5cmlnaHQgMjAxOCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0Ci0KLSAgICAgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7Ci0gICAgIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KLSAgICAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0KLSAgICAgICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLQotICAgICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCi0gICAgIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCi0gICAgIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgotICAgICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCi0gICAgIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgotIC0tPgotCi08cmVzb3VyY2VzIHhtbG5zOmFuZHJvaWQ9Imh0dHA6Ly9zY2hlbWFzLmFuZHJvaWQuY29tL2Fway9yZXMvYW5kcm9pZCIKLSAgICB4bWxuczp4bGlmZj0idXJuOm9hc2lzOm5hbWVzOnRjOnhsaWZmOmRvY3VtZW50OjEuMiI+Ci0gICAgPHN0cmluZyBuYW1lPSJtcl9zeXN0ZW1fcm91dGVfbmFtZSIgbXNnaWQ9IjU0NDE1Mjk4NTE0ODExNzY4MTciPiJTeXN0ZW0iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJtcl91c2VyX3JvdXRlX2NhdGVnb3J5X25hbWUiIG1zZ2lkPSI3NDk4MTEyOTA3NTI0OTc3MzExIj4iVXJ6xIVkemVuaWEiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJtcl9idXR0b25fY29udGVudF9kZXNjcmlwdGlvbiIgbXNnaWQ9IjM2OTgzNzgwODU5MDE0NjYxMjkiPiJQcnp5Y2lzayBDYXN0Ijwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibXJfY2FzdF9idXR0b25fZGlzY29ubmVjdGVkIiBtc2dpZD0iODE2MzA1NDkwNDI3ODE5MjQwIj4iUHJ6eWNpc2sgUHJ6ZcWbbGlqIGVrcmFuLiBSb3rFgsSFY3pvbm8iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJtcl9jYXN0X2J1dHRvbl9jb25uZWN0aW5nIiBtc2dpZD0iMjE4NzY0Mjc2NTA5MTg3MzgzNCI+IlByenljaXNrIFByemXFm2xpaiBla3Jhbi4gxYHEhWN6xJkiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJtcl9jYXN0X2J1dHRvbl9jb25uZWN0ZWQiIG1zZ2lkPSI1MDg4NDI3NzcxNzg4NjQ4MDg1Ij4iUHJ6eWNpc2sgUHJ6ZcWbbGlqIGVrcmFuLiBQb8WCxIVjem9ubyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im1yX2Nob29zZXJfdGl0bGUiIG1zZ2lkPSI0MTQzMDE5NDE1NDYxMzU5OTAiPiJQcnplc3nFgmFqIG5hIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibXJfY2hvb3Nlcl9zZWFyY2hpbmciIG1zZ2lkPSI2MzQ5OTAwNTc5NTA3NTIxOTU2Ij4iWm5hamRvd2FuaWUgdXJ6xIVkemXFhCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im1yX2NvbnRyb2xsZXJfZGlzY29ubmVjdCIgbXNnaWQ9IjEyMjcyNjQ4ODk0MTI5ODk1ODAiPiJPZMWCxIVjeiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im1yX2NvbnRyb2xsZXJfc3RvcF9jYXN0aW5nIiBtc2dpZD0iODg1Nzg4Njc5NDA4NjU4MzIyNiI+IlphdHJ6eW1haiBwcnplc3nFgmFuaWUiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJtcl9jb250cm9sbGVyX2Nsb3NlX2Rlc2NyaXB0aW9uIiBtc2dpZD0iNzMzMzg2MjMxMjQ4MDU4MzI2MCI+IlphbWtuaWoiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJtcl9jb250cm9sbGVyX3BsYXkiIG1zZ2lkPSI2ODM2MzQ1NjU5Njk5ODc0NTgiPiJPZHR3w7NyeiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im1yX2NvbnRyb2xsZXJfcGF1c2UiIG1zZ2lkPSI1NDUxODg0NDM1NTEwOTA1NDA2Ij4iV3N0cnp5bWFqIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibXJfY29udHJvbGxlcl9zdG9wIiBtc2dpZD0iNzM1ODc0NjQxOTIxNDI1MTIzIj4iWmF0cnp5bWFqIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibXJfY29udHJvbGxlcl9leHBhbmRfZ3JvdXAiIG1zZ2lkPSI4MDYyNDI3MDIyNzQ0MjY2OTA3Ij4iUm96d2nFhCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im1yX2NvbnRyb2xsZXJfY29sbGFwc2VfZ3JvdXAiIG1zZ2lkPSI3OTI0ODA5MDU2OTA0MjQwOTI2Ij4iWndpxYQiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJtcl9jb250cm9sbGVyX2FsYnVtX2FydCIgbXNnaWQ9IjY0MjI4MDE4NDM1NDA1NDM1ODUiPiJPa8WCYWRrYSBhbGJ1bXUiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJtcl9jb250cm9sbGVyX3ZvbHVtZV9zbGlkZXIiIG1zZ2lkPSIyMzYxNzg1OTkyMjExODQxNzA5Ij4iU3V3YWsgZ8WCb8Wbbm/Fm2NpIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibXJfY29udHJvbGxlcl9ub19tZWRpYV9zZWxlY3RlZCIgbXNnaWQ9IjY1NDcxMzAzNjAzNDkxODIzODEiPiJOaWUgd3licmFubyBtdWx0aW1lZGnDs3ciPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJtcl9jb250cm9sbGVyX25vX2luZm9fYXZhaWxhYmxlIiBtc2dpZD0iNTU4NTQxODQ3MTc0MTE0MjkyNCI+IkJyYWsgaW5mb3JtYWNqaSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im1yX2NvbnRyb2xsZXJfY2FzdGluZ19zY3JlZW4iIG1zZ2lkPSI0ODY4NDU3OTU3MTUxMTI0ODY3Ij4iUHJ6ZXN5xYJhbSBla3JhbiI8L3N0cmluZz4KLTwvcmVzb3VyY2VzPgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvTWVkaWFDb21wb25lbnRzL3Jlcy92YWx1ZXMtcHQtckJSL3N0cmluZ3MueG1sIGIvcGFja2FnZXMvTWVkaWFDb21wb25lbnRzL3Jlcy92YWx1ZXMtcHQtckJSL3N0cmluZ3MueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0M2M2MTlkLi4wMDAwMDAwCi0tLSBhL3BhY2thZ2VzL01lZGlhQ29tcG9uZW50cy9yZXMvdmFsdWVzLXB0LXJCUi9zdHJpbmdzLnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDQwICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08IS0tICBDb3B5cmlnaHQgMjAxOCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0Ci0KLSAgICAgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7Ci0gICAgIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KLSAgICAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0KLSAgICAgICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLQotICAgICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCi0gICAgIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCi0gICAgIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgotICAgICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCi0gICAgIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgotIC0tPgotCi08cmVzb3VyY2VzIHhtbG5zOmFuZHJvaWQ9Imh0dHA6Ly9zY2hlbWFzLmFuZHJvaWQuY29tL2Fway9yZXMvYW5kcm9pZCIKLSAgICB4bWxuczp4bGlmZj0idXJuOm9hc2lzOm5hbWVzOnRjOnhsaWZmOmRvY3VtZW50OjEuMiI+Ci0gICAgPHN0cmluZyBuYW1lPSJtcl9zeXN0ZW1fcm91dGVfbmFtZSIgbXNnaWQ9IjU0NDE1Mjk4NTE0ODExNzY4MTciPiJTaXN0ZW1hIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibXJfdXNlcl9yb3V0ZV9jYXRlZ29yeV9uYW1lIiBtc2dpZD0iNzQ5ODExMjkwNzUyNDk3NzMxMSI+IkRpc3Bvc2l0aXZvcyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im1yX2J1dHRvbl9jb250ZW50X2Rlc2NyaXB0aW9uIiBtc2dpZD0iMzY5ODM3ODA4NTkwMTQ2NjEyOSI+IkJvdMOjbyBUcmFuc21pdGlyIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibXJfY2FzdF9idXR0b25fZGlzY29ubmVjdGVkIiBtc2dpZD0iODE2MzA1NDkwNDI3ODE5MjQwIj4iQm90w6NvIFwiVHJhbnNtaXRpclwiLiBEZXNjb25lY3RhZG8iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJtcl9jYXN0X2J1dHRvbl9jb25uZWN0aW5nIiBtc2dpZD0iMjE4NzY0Mjc2NTA5MTg3MzgzNCI+IkJvdMOjbyBcIlRyYW5zbWl0aXJcIi4gQ29uZWN0YW5kbyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im1yX2Nhc3RfYnV0dG9uX2Nvbm5lY3RlZCIgbXNnaWQ9IjUwODg0Mjc3NzE3ODg2NDgwODUiPiJCb3TDo28gXCJUcmFuc21pdGlyXCIuIENvbmVjdGFkbyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im1yX2Nob29zZXJfdGl0bGUiIG1zZ2lkPSI0MTQzMDE5NDE1NDYxMzU5OTAiPiJUcmFuc21pdGlyIHBhcmEiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJtcl9jaG9vc2VyX3NlYXJjaGluZyIgbXNnaWQ9IjYzNDk5MDA1Nzk1MDc1MjE5NTYiPiJMb2NhbGl6YW5kbyBkaXNwb3NpdGl2b3MiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJtcl9jb250cm9sbGVyX2Rpc2Nvbm5lY3QiIG1zZ2lkPSIxMjI3MjY0ODg5NDEyOTg5NTgwIj4iRGVzY29uZWN0YXIiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJtcl9jb250cm9sbGVyX3N0b3BfY2FzdGluZyIgbXNnaWQ9Ijg4NTc4ODY3OTQwODY1ODMyMjYiPiJJbnRlcnJvbXBlciB0cmFuc21pc3PDo28iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJtcl9jb250cm9sbGVyX2Nsb3NlX2Rlc2NyaXB0aW9uIiBtc2dpZD0iNzMzMzg2MjMxMjQ4MDU4MzI2MCI+IkZlY2hhciI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im1yX2NvbnRyb2xsZXJfcGxheSIgbXNnaWQ9IjY4MzYzNDU2NTk2OTk4NzQ1OCI+IlJlcHJvZHV6aXIiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJtcl9jb250cm9sbGVyX3BhdXNlIiBtc2dpZD0iNTQ1MTg4NDQzNTUxMDkwNTQwNiI+IlBhdXNhciI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im1yX2NvbnRyb2xsZXJfc3RvcCIgbXNnaWQ9IjczNTg3NDY0MTkyMTQyNTEyMyI+IlBhcmFyIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibXJfY29udHJvbGxlcl9leHBhbmRfZ3JvdXAiIG1zZ2lkPSI4MDYyNDI3MDIyNzQ0MjY2OTA3Ij4iRXhwYW5kaXIiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJtcl9jb250cm9sbGVyX2NvbGxhcHNlX2dyb3VwIiBtc2dpZD0iNzkyNDgwOTA1NjkwNDI0MDkyNiI+IlJlY29saGVyIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibXJfY29udHJvbGxlcl9hbGJ1bV9hcnQiIG1zZ2lkPSI2NDIyODAxODQzNTQwNTQzNTg1Ij4iQXJ0ZSBkbyDDoWxidW0iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJtcl9jb250cm9sbGVyX3ZvbHVtZV9zbGlkZXIiIG1zZ2lkPSIyMzYxNzg1OTkyMjExODQxNzA5Ij4iQ29udHJvbGUgZGVzbGl6YW50ZSBkZSB2b2x1bWUiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJtcl9jb250cm9sbGVyX25vX21lZGlhX3NlbGVjdGVkIiBtc2dpZD0iNjU0NzEzMDM2MDM0OTE4MjM4MSI+Ik5lbmh1bWEgbcOtZGlhIHNlbGVjaW9uYWRhIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibXJfY29udHJvbGxlcl9ub19pbmZvX2F2YWlsYWJsZSIgbXNnaWQ9IjU1ODU0MTg0NzE3NDExNDI5MjQiPiJOZW5odW1hIGluZm9ybWHDp8OjbyBkaXNwb27DrXZlbCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im1yX2NvbnRyb2xsZXJfY2FzdGluZ19zY3JlZW4iIG1zZ2lkPSI0ODY4NDU3OTU3MTUxMTI0ODY3Ij4iVHJhbnNtaXRpbmRvIGEgdGVsYSI8L3N0cmluZz4KLTwvcmVzb3VyY2VzPgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvTWVkaWFDb21wb25lbnRzL3Jlcy92YWx1ZXMtcHQtclBUL3N0cmluZ3MueG1sIGIvcGFja2FnZXMvTWVkaWFDb21wb25lbnRzL3Jlcy92YWx1ZXMtcHQtclBUL3N0cmluZ3MueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzZjBhNjFkLi4wMDAwMDAwCi0tLSBhL3BhY2thZ2VzL01lZGlhQ29tcG9uZW50cy9yZXMvdmFsdWVzLXB0LXJQVC9zdHJpbmdzLnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDQwICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08IS0tICBDb3B5cmlnaHQgMjAxOCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0Ci0KLSAgICAgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7Ci0gICAgIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KLSAgICAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0KLSAgICAgICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLQotICAgICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCi0gICAgIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCi0gICAgIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgotICAgICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCi0gICAgIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgotIC0tPgotCi08cmVzb3VyY2VzIHhtbG5zOmFuZHJvaWQ9Imh0dHA6Ly9zY2hlbWFzLmFuZHJvaWQuY29tL2Fway9yZXMvYW5kcm9pZCIKLSAgICB4bWxuczp4bGlmZj0idXJuOm9hc2lzOm5hbWVzOnRjOnhsaWZmOmRvY3VtZW50OjEuMiI+Ci0gICAgPHN0cmluZyBuYW1lPSJtcl9zeXN0ZW1fcm91dGVfbmFtZSIgbXNnaWQ9IjU0NDE1Mjk4NTE0ODExNzY4MTciPiJTaXN0ZW1hIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibXJfdXNlcl9yb3V0ZV9jYXRlZ29yeV9uYW1lIiBtc2dpZD0iNzQ5ODExMjkwNzUyNDk3NzMxMSI+IkRpc3Bvc2l0aXZvcyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im1yX2J1dHRvbl9jb250ZW50X2Rlc2NyaXB0aW9uIiBtc2dpZD0iMzY5ODM3ODA4NTkwMTQ2NjEyOSI+IkJvdMOjbyBUcmFuc21pdGlyIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibXJfY2FzdF9idXR0b25fZGlzY29ubmVjdGVkIiBtc2dpZD0iODE2MzA1NDkwNDI3ODE5MjQwIj4iQm90w6NvIFRyYW5zbWl0aXIuIERlc2xpZ2FkbyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im1yX2Nhc3RfYnV0dG9uX2Nvbm5lY3RpbmciIG1zZ2lkPSIyMTg3NjQyNzY1MDkxODczODM0Ij4iQm90w6NvIFRyYW5zbWl0aXIuIEEgbGlnYXIuLi4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJtcl9jYXN0X2J1dHRvbl9jb25uZWN0ZWQiIG1zZ2lkPSI1MDg4NDI3NzcxNzg4NjQ4MDg1Ij4iQm90w6NvIFRyYW5zbWl0aXIuIExpZ2FkbyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im1yX2Nob29zZXJfdGl0bGUiIG1zZ2lkPSI0MTQzMDE5NDE1NDYxMzU5OTAiPiJUcmFuc21pdGlyIHBhcmEiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJtcl9jaG9vc2VyX3NlYXJjaGluZyIgbXNnaWQ9IjYzNDk5MDA1Nzk1MDc1MjE5NTYiPiJBIGxvY2FsaXphciBkaXNwb3NpdGl2b3MiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJtcl9jb250cm9sbGVyX2Rpc2Nvbm5lY3QiIG1zZ2lkPSIxMjI3MjY0ODg5NDEyOTg5NTgwIj4iRGVzYXNzb2NpYXIiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJtcl9jb250cm9sbGVyX3N0b3BfY2FzdGluZyIgbXNnaWQ9Ijg4NTc4ODY3OTQwODY1ODMyMjYiPiJQYXJhciBhIHRyYW5zbWlzc8OjbyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im1yX2NvbnRyb2xsZXJfY2xvc2VfZGVzY3JpcHRpb24iIG1zZ2lkPSI3MzMzODYyMzEyNDgwNTgzMjYwIj4iRmVjaGFyIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibXJfY29udHJvbGxlcl9wbGF5IiBtc2dpZD0iNjgzNjM0NTY1OTY5OTg3NDU4Ij4iUmVwcm9kdXppciI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im1yX2NvbnRyb2xsZXJfcGF1c2UiIG1zZ2lkPSI1NDUxODg0NDM1NTEwOTA1NDA2Ij4iSW50ZXJyb21wZXIiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJtcl9jb250cm9sbGVyX3N0b3AiIG1zZ2lkPSI3MzU4NzQ2NDE5MjE0MjUxMjMiPiJQYXJhciI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im1yX2NvbnRyb2xsZXJfZXhwYW5kX2dyb3VwIiBtc2dpZD0iODA2MjQyNzAyMjc0NDI2NjkwNyI+IkV4cGFuZGlyIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibXJfY29udHJvbGxlcl9jb2xsYXBzZV9ncm91cCIgbXNnaWQ9Ijc5MjQ4MDkwNTY5MDQyNDA5MjYiPiJSZWR1emlyIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibXJfY29udHJvbGxlcl9hbGJ1bV9hcnQiIG1zZ2lkPSI2NDIyODAxODQzNTQwNTQzNTg1Ij4iSW1hZ2VtIGRvIMOhbGJ1bSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im1yX2NvbnRyb2xsZXJfdm9sdW1lX3NsaWRlciIgbXNnaWQ9IjIzNjE3ODU5OTIyMTE4NDE3MDkiPiJDb250cm9sbyBkZSBkZXNsaXplIGRvIHZvbHVtZSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im1yX2NvbnRyb2xsZXJfbm9fbWVkaWFfc2VsZWN0ZWQiIG1zZ2lkPSI2NTQ3MTMwMzYwMzQ5MTgyMzgxIj4iTmVuaHVtIHN1cG9ydGUgbXVsdGltw6lkaWEgc2VsZWNpb25hZG8iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJtcl9jb250cm9sbGVyX25vX2luZm9fYXZhaWxhYmxlIiBtc2dpZD0iNTU4NTQxODQ3MTc0MTE0MjkyNCI+Ik5lbmh1bWEgaW5mb3JtYcOnw6NvIGRpc3BvbsOtdmVsIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibXJfY29udHJvbGxlcl9jYXN0aW5nX3NjcmVlbiIgbXNnaWQ9IjQ4Njg0NTc5NTcxNTExMjQ4NjciPiJBIHRyYW5zbWl0aXIgbyBlY3LDoyI8L3N0cmluZz4KLTwvcmVzb3VyY2VzPgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvTWVkaWFDb21wb25lbnRzL3Jlcy92YWx1ZXMtcHQvc3RyaW5ncy54bWwgYi9wYWNrYWdlcy9NZWRpYUNvbXBvbmVudHMvcmVzL3ZhbHVlcy1wdC9zdHJpbmdzLnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDNjNjE5ZC4uMDAwMDAwMAotLS0gYS9wYWNrYWdlcy9NZWRpYUNvbXBvbmVudHMvcmVzL3ZhbHVlcy1wdC9zdHJpbmdzLnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDQwICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08IS0tICBDb3B5cmlnaHQgMjAxOCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0Ci0KLSAgICAgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7Ci0gICAgIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KLSAgICAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0KLSAgICAgICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLQotICAgICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCi0gICAgIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCi0gICAgIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgotICAgICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCi0gICAgIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgotIC0tPgotCi08cmVzb3VyY2VzIHhtbG5zOmFuZHJvaWQ9Imh0dHA6Ly9zY2hlbWFzLmFuZHJvaWQuY29tL2Fway9yZXMvYW5kcm9pZCIKLSAgICB4bWxuczp4bGlmZj0idXJuOm9hc2lzOm5hbWVzOnRjOnhsaWZmOmRvY3VtZW50OjEuMiI+Ci0gICAgPHN0cmluZyBuYW1lPSJtcl9zeXN0ZW1fcm91dGVfbmFtZSIgbXNnaWQ9IjU0NDE1Mjk4NTE0ODExNzY4MTciPiJTaXN0ZW1hIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibXJfdXNlcl9yb3V0ZV9jYXRlZ29yeV9uYW1lIiBtc2dpZD0iNzQ5ODExMjkwNzUyNDk3NzMxMSI+IkRpc3Bvc2l0aXZvcyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im1yX2J1dHRvbl9jb250ZW50X2Rlc2NyaXB0aW9uIiBtc2dpZD0iMzY5ODM3ODA4NTkwMTQ2NjEyOSI+IkJvdMOjbyBUcmFuc21pdGlyIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibXJfY2FzdF9idXR0b25fZGlzY29ubmVjdGVkIiBtc2dpZD0iODE2MzA1NDkwNDI3ODE5MjQwIj4iQm90w6NvIFwiVHJhbnNtaXRpclwiLiBEZXNjb25lY3RhZG8iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJtcl9jYXN0X2J1dHRvbl9jb25uZWN0aW5nIiBtc2dpZD0iMjE4NzY0Mjc2NTA5MTg3MzgzNCI+IkJvdMOjbyBcIlRyYW5zbWl0aXJcIi4gQ29uZWN0YW5kbyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im1yX2Nhc3RfYnV0dG9uX2Nvbm5lY3RlZCIgbXNnaWQ9IjUwODg0Mjc3NzE3ODg2NDgwODUiPiJCb3TDo28gXCJUcmFuc21pdGlyXCIuIENvbmVjdGFkbyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im1yX2Nob29zZXJfdGl0bGUiIG1zZ2lkPSI0MTQzMDE5NDE1NDYxMzU5OTAiPiJUcmFuc21pdGlyIHBhcmEiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJtcl9jaG9vc2VyX3NlYXJjaGluZyIgbXNnaWQ9IjYzNDk5MDA1Nzk1MDc1MjE5NTYiPiJMb2NhbGl6YW5kbyBkaXNwb3NpdGl2b3MiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJtcl9jb250cm9sbGVyX2Rpc2Nvbm5lY3QiIG1zZ2lkPSIxMjI3MjY0ODg5NDEyOTg5NTgwIj4iRGVzY29uZWN0YXIiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJtcl9jb250cm9sbGVyX3N0b3BfY2FzdGluZyIgbXNnaWQ9Ijg4NTc4ODY3OTQwODY1ODMyMjYiPiJJbnRlcnJvbXBlciB0cmFuc21pc3PDo28iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJtcl9jb250cm9sbGVyX2Nsb3NlX2Rlc2NyaXB0aW9uIiBtc2dpZD0iNzMzMzg2MjMxMjQ4MDU4MzI2MCI+IkZlY2hhciI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im1yX2NvbnRyb2xsZXJfcGxheSIgbXNnaWQ9IjY4MzYzNDU2NTk2OTk4NzQ1OCI+IlJlcHJvZHV6aXIiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJtcl9jb250cm9sbGVyX3BhdXNlIiBtc2dpZD0iNTQ1MTg4NDQzNTUxMDkwNTQwNiI+IlBhdXNhciI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im1yX2NvbnRyb2xsZXJfc3RvcCIgbXNnaWQ9IjczNTg3NDY0MTkyMTQyNTEyMyI+IlBhcmFyIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibXJfY29udHJvbGxlcl9leHBhbmRfZ3JvdXAiIG1zZ2lkPSI4MDYyNDI3MDIyNzQ0MjY2OTA3Ij4iRXhwYW5kaXIiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJtcl9jb250cm9sbGVyX2NvbGxhcHNlX2dyb3VwIiBtc2dpZD0iNzkyNDgwOTA1NjkwNDI0MDkyNiI+IlJlY29saGVyIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibXJfY29udHJvbGxlcl9hbGJ1bV9hcnQiIG1zZ2lkPSI2NDIyODAxODQzNTQwNTQzNTg1Ij4iQXJ0ZSBkbyDDoWxidW0iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJtcl9jb250cm9sbGVyX3ZvbHVtZV9zbGlkZXIiIG1zZ2lkPSIyMzYxNzg1OTkyMjExODQxNzA5Ij4iQ29udHJvbGUgZGVzbGl6YW50ZSBkZSB2b2x1bWUiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJtcl9jb250cm9sbGVyX25vX21lZGlhX3NlbGVjdGVkIiBtc2dpZD0iNjU0NzEzMDM2MDM0OTE4MjM4MSI+Ik5lbmh1bWEgbcOtZGlhIHNlbGVjaW9uYWRhIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibXJfY29udHJvbGxlcl9ub19pbmZvX2F2YWlsYWJsZSIgbXNnaWQ9IjU1ODU0MTg0NzE3NDExNDI5MjQiPiJOZW5odW1hIGluZm9ybWHDp8OjbyBkaXNwb27DrXZlbCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im1yX2NvbnRyb2xsZXJfY2FzdGluZ19zY3JlZW4iIG1zZ2lkPSI0ODY4NDU3OTU3MTUxMTI0ODY3Ij4iVHJhbnNtaXRpbmRvIGEgdGVsYSI8L3N0cmluZz4KLTwvcmVzb3VyY2VzPgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvTWVkaWFDb21wb25lbnRzL3Jlcy92YWx1ZXMtcm8vc3RyaW5ncy54bWwgYi9wYWNrYWdlcy9NZWRpYUNvbXBvbmVudHMvcmVzL3ZhbHVlcy1yby9zdHJpbmdzLnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNmViYjJmNi4uMDAwMDAwMAotLS0gYS9wYWNrYWdlcy9NZWRpYUNvbXBvbmVudHMvcmVzL3ZhbHVlcy1yby9zdHJpbmdzLnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDQwICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08IS0tICBDb3B5cmlnaHQgMjAxOCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0Ci0KLSAgICAgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7Ci0gICAgIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KLSAgICAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0KLSAgICAgICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLQotICAgICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCi0gICAgIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCi0gICAgIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgotICAgICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCi0gICAgIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgotIC0tPgotCi08cmVzb3VyY2VzIHhtbG5zOmFuZHJvaWQ9Imh0dHA6Ly9zY2hlbWFzLmFuZHJvaWQuY29tL2Fway9yZXMvYW5kcm9pZCIKLSAgICB4bWxuczp4bGlmZj0idXJuOm9hc2lzOm5hbWVzOnRjOnhsaWZmOmRvY3VtZW50OjEuMiI+Ci0gICAgPHN0cmluZyBuYW1lPSJtcl9zeXN0ZW1fcm91dGVfbmFtZSIgbXNnaWQ9IjU0NDE1Mjk4NTE0ODExNzY4MTciPiJTaXN0ZW0iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJtcl91c2VyX3JvdXRlX2NhdGVnb3J5X25hbWUiIG1zZ2lkPSI3NDk4MTEyOTA3NTI0OTc3MzExIj4iRGlzcG96aXRpdmUiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJtcl9idXR0b25fY29udGVudF9kZXNjcmlwdGlvbiIgbXNnaWQ9IjM2OTgzNzgwODU5MDE0NjYxMjkiPiJCdXRvbnVsIGRlIHByb2llY8ibaWUiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJtcl9jYXN0X2J1dHRvbl9kaXNjb25uZWN0ZWQiIG1zZ2lkPSI4MTYzMDU0OTA0Mjc4MTkyNDAiPiJCdXRvbnVsIGRlIHByb2llY8ibaWUuIERlY29uZWN0YXQiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJtcl9jYXN0X2J1dHRvbl9jb25uZWN0aW5nIiBtc2dpZD0iMjE4NzY0Mjc2NTA5MTg3MzgzNCI+IkJ1dG9udWwgZGUgcHJvaWVjyJtpZS4gU2UgY29uZWN0ZWF6xIMiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJtcl9jYXN0X2J1dHRvbl9jb25uZWN0ZWQiIG1zZ2lkPSI1MDg4NDI3NzcxNzg4NjQ4MDg1Ij4iQnV0b251bCBkZSBwcm9pZWPIm2llLiBDb25lY3RhdCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im1yX2Nob29zZXJfdGl0bGUiIG1zZ2lkPSI0MTQzMDE5NDE1NDYxMzU5OTAiPiJQcm9pZWN0YcibaSBwZSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im1yX2Nob29zZXJfc2VhcmNoaW5nIiBtc2dpZD0iNjM0OTkwMDU3OTUwNzUyMTk1NiI+IlNlIGNhdXTEgyBkaXNwb3ppdGl2ZSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im1yX2NvbnRyb2xsZXJfZGlzY29ubmVjdCIgbXNnaWQ9IjEyMjcyNjQ4ODk0MTI5ODk1ODAiPiJEZWNvbmVjdGHIm2ktdsSDIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibXJfY29udHJvbGxlcl9zdG9wX2Nhc3RpbmciIG1zZ2lkPSI4ODU3ODg2Nzk0MDg2NTgzMjI2Ij4iTnUgbWFpIHByb2llY3RhyJtpIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibXJfY29udHJvbGxlcl9jbG9zZV9kZXNjcmlwdGlvbiIgbXNnaWQ9IjczMzM4NjIzMTI0ODA1ODMyNjAiPiLDjm5jaGlkZcibaSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im1yX2NvbnRyb2xsZXJfcGxheSIgbXNnaWQ9IjY4MzYzNDU2NTk2OTk4NzQ1OCI+IlJlZGHIm2kiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJtcl9jb250cm9sbGVyX3BhdXNlIiBtc2dpZD0iNTQ1MTg4NDQzNTUxMDkwNTQwNiI+IsOObnRyZXJ1cGXIm2kiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJtcl9jb250cm9sbGVyX3N0b3AiIG1zZ2lkPSI3MzU4NzQ2NDE5MjE0MjUxMjMiPiJPcHJpyJtpIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibXJfY29udHJvbGxlcl9leHBhbmRfZ3JvdXAiIG1zZ2lkPSI4MDYyNDI3MDIyNzQ0MjY2OTA3Ij4iRXh0aW5kZcibaSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im1yX2NvbnRyb2xsZXJfY29sbGFwc2VfZ3JvdXAiIG1zZ2lkPSI3OTI0ODA5MDU2OTA0MjQwOTI2Ij4iUmVzdHLDom5nZcibaSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im1yX2NvbnRyb2xsZXJfYWxidW1fYXJ0IiBtc2dpZD0iNjQyMjgwMTg0MzU0MDU0MzU4NSI+IkdyYWZpY2EgYWxidW11bHVpIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibXJfY29udHJvbGxlcl92b2x1bWVfc2xpZGVyIiBtc2dpZD0iMjM2MTc4NTk5MjIxMTg0MTcwOSI+IkdsaXNvciBwZW50cnUgdm9sdW0iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJtcl9jb250cm9sbGVyX25vX21lZGlhX3NlbGVjdGVkIiBtc2dpZD0iNjU0NzEzMDM2MDM0OTE4MjM4MSI+Ik5pY2l1biBmaciZaWVyIG1lZGlhIHNlbGVjdGF0Ijwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibXJfY29udHJvbGxlcl9ub19pbmZvX2F2YWlsYWJsZSIgbXNnaWQ9IjU1ODU0MTg0NzE3NDExNDI5MjQiPiJOdSBzdW50IGRpc3BvbmliaWxlIGluZm9ybWHIm2lpIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibXJfY29udHJvbGxlcl9jYXN0aW5nX3NjcmVlbiIgbXNnaWQ9IjQ4Njg0NTc5NTcxNTExMjQ4NjciPiJTZSBwcm9pZWN0ZWF6xIMgZWNyYW51bCI8L3N0cmluZz4KLTwvcmVzb3VyY2VzPgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvTWVkaWFDb21wb25lbnRzL3Jlcy92YWx1ZXMtcnUvc3RyaW5ncy54bWwgYi9wYWNrYWdlcy9NZWRpYUNvbXBvbmVudHMvcmVzL3ZhbHVlcy1ydS9zdHJpbmdzLnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggN2M0NjJkMi4uMDAwMDAwMAotLS0gYS9wYWNrYWdlcy9NZWRpYUNvbXBvbmVudHMvcmVzL3ZhbHVlcy1ydS9zdHJpbmdzLnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDQwICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08IS0tICBDb3B5cmlnaHQgMjAxOCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0Ci0KLSAgICAgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7Ci0gICAgIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KLSAgICAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0KLSAgICAgICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLQotICAgICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCi0gICAgIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCi0gICAgIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgotICAgICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCi0gICAgIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgotIC0tPgotCi08cmVzb3VyY2VzIHhtbG5zOmFuZHJvaWQ9Imh0dHA6Ly9zY2hlbWFzLmFuZHJvaWQuY29tL2Fway9yZXMvYW5kcm9pZCIKLSAgICB4bWxuczp4bGlmZj0idXJuOm9hc2lzOm5hbWVzOnRjOnhsaWZmOmRvY3VtZW50OjEuMiI+Ci0gICAgPHN0cmluZyBuYW1lPSJtcl9zeXN0ZW1fcm91dGVfbmFtZSIgbXNnaWQ9IjU0NDE1Mjk4NTE0ODExNzY4MTciPiLQodC40YHRgtC10LzQsCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im1yX3VzZXJfcm91dGVfY2F0ZWdvcnlfbmFtZSIgbXNnaWQ9Ijc0OTgxMTI5MDc1MjQ5NzczMTEiPiLQo9GB0YLRgNC+0LnRgdGC0LLQsCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im1yX2J1dHRvbl9jb250ZW50X2Rlc2NyaXB0aW9uIiBtc2dpZD0iMzY5ODM3ODA4NTkwMTQ2NjEyOSI+ItCa0L3QvtC/0LrQsCDRgtGA0LDQvdGB0LvRj9GG0LjQuCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im1yX2Nhc3RfYnV0dG9uX2Rpc2Nvbm5lY3RlZCIgbXNnaWQ9IjgxNjMwNTQ5MDQyNzgxOTI0MCI+ItCa0L3QvtC/0LrQsCDRgtGA0LDQvdGB0LvRj9GG0LjQuC4g0KPRgdGC0YDQvtC50YHRgtCy0L4g0L7RgtC60LvRjtGH0LXQvdC+LiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im1yX2Nhc3RfYnV0dG9uX2Nvbm5lY3RpbmciIG1zZ2lkPSIyMTg3NjQyNzY1MDkxODczODM0Ij4i0JrQvdC+0L/QutCwINGC0YDQsNC90YHQu9GP0YbQuNC4LiDQo9GB0YLRgNC+0LnRgdGC0LLQviDQv9C+0LTQutC70Y7Rh9Cw0LXRgtGB0Y8uIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibXJfY2FzdF9idXR0b25fY29ubmVjdGVkIiBtc2dpZD0iNTA4ODQyNzc3MTc4ODY0ODA4NSI+ItCa0L3QvtC/0LrQsCDRgtGA0LDQvdGB0LvRj9GG0LjQuC4g0KPRgdGC0YDQvtC50YHRgtCy0L4g0L/QvtC00LrQu9GO0YfQtdC90L4uIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibXJfY2hvb3Nlcl90aXRsZSIgbXNnaWQ9IjQxNDMwMTk0MTU0NjEzNTk5MCI+ItCS0YvQsdC10YDQuNGC0LUg0YPRgdGC0YDQvtC50YHRgtCy0L4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJtcl9jaG9vc2VyX3NlYXJjaGluZyIgbXNnaWQ9IjYzNDk5MDA1Nzk1MDc1MjE5NTYiPiLQn9C+0LjRgdC6INGD0YHRgtGA0L7QudGB0YLQsuKApiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im1yX2NvbnRyb2xsZXJfZGlzY29ubmVjdCIgbXNnaWQ9IjEyMjcyNjQ4ODk0MTI5ODk1ODAiPiLQntGC0LrQu9GO0YfQuNGC0YwiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJtcl9jb250cm9sbGVyX3N0b3BfY2FzdGluZyIgbXNnaWQ9Ijg4NTc4ODY3OTQwODY1ODMyMjYiPiLQn9GA0LXQutGA0LDRgtC40YLRjCDRgtGA0LDQvdGB0LvRj9GG0LjRjiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im1yX2NvbnRyb2xsZXJfY2xvc2VfZGVzY3JpcHRpb24iIG1zZ2lkPSI3MzMzODYyMzEyNDgwNTgzMjYwIj4i0JfQsNC60YDRi9GC0YwiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJtcl9jb250cm9sbGVyX3BsYXkiIG1zZ2lkPSI2ODM2MzQ1NjU5Njk5ODc0NTgiPiLQktC+0YHQv9GA0L7QuNC30LLQtdGB0YLQuCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im1yX2NvbnRyb2xsZXJfcGF1c2UiIG1zZ2lkPSI1NDUxODg0NDM1NTEwOTA1NDA2Ij4i0J/RgNC40L7RgdGC0LDQvdC+0LLQuNGC0YwiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJtcl9jb250cm9sbGVyX3N0b3AiIG1zZ2lkPSI3MzU4NzQ2NDE5MjE0MjUxMjMiPiLQntGB0YLQsNC90L7QstC40YLRjCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im1yX2NvbnRyb2xsZXJfZXhwYW5kX2dyb3VwIiBtc2dpZD0iODA2MjQyNzAyMjc0NDI2NjkwNyI+ItCg0LDQt9Cy0LXRgNC90YPRgtGMIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibXJfY29udHJvbGxlcl9jb2xsYXBzZV9ncm91cCIgbXNnaWQ9Ijc5MjQ4MDkwNTY5MDQyNDA5MjYiPiLQodCy0LXRgNC90YPRgtGMIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibXJfY29udHJvbGxlcl9hbGJ1bV9hcnQiIG1zZ2lkPSI2NDIyODAxODQzNTQwNTQzNTg1Ij4i0J7QsdC70L7QttC60LAiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJtcl9jb250cm9sbGVyX3ZvbHVtZV9zbGlkZXIiIG1zZ2lkPSIyMzYxNzg1OTkyMjExODQxNzA5Ij4i0KDQtdCz0YPQu9GP0YLQvtGAINCz0YDQvtC80LrQvtGB0YLQuCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im1yX2NvbnRyb2xsZXJfbm9fbWVkaWFfc2VsZWN0ZWQiIG1zZ2lkPSI2NTQ3MTMwMzYwMzQ5MTgyMzgxIj4i0JzQtdC00LjQsNGE0LDQudC7INC90LUg0LLRi9Cx0YDQsNC9Ijwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibXJfY29udHJvbGxlcl9ub19pbmZvX2F2YWlsYWJsZSIgbXNnaWQ9IjU1ODU0MTg0NzE3NDExNDI5MjQiPiLQlNCw0L3QvdGL0YUg0L3QtdGCIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibXJfY29udHJvbGxlcl9jYXN0aW5nX3NjcmVlbiIgbXNnaWQ9IjQ4Njg0NTc5NTcxNTExMjQ4NjciPiLQn9C+0LTQutC70Y7Rh9C10L3QuNC1INC6INGD0LTQsNC70LXQvdC90L7QvNGDINC80L7QvdC40YLQvtGA0YMiPC9zdHJpbmc+Ci08L3Jlc291cmNlcz4KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL01lZGlhQ29tcG9uZW50cy9yZXMvdmFsdWVzLXNpL3N0cmluZ3MueG1sIGIvcGFja2FnZXMvTWVkaWFDb21wb25lbnRzL3Jlcy92YWx1ZXMtc2kvc3RyaW5ncy54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGE1NWNlNTAuLjAwMDAwMDAKLS0tIGEvcGFja2FnZXMvTWVkaWFDb21wb25lbnRzL3Jlcy92YWx1ZXMtc2kvc3RyaW5ncy54bWwKKysrIC9kZXYvbnVsbApAQCAtMSw0MCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPCEtLSAgQ29weXJpZ2h0IDIwMTggVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAotCi0gICAgIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwotICAgICB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCi0gICAgIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotCi0gICAgICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0KLSAgICAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQotICAgICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAotICAgICBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KLSAgICAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAotICAgICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KLSAtLT4KLQotPHJlc291cmNlcyB4bWxuczphbmRyb2lkPSJodHRwOi8vc2NoZW1hcy5hbmRyb2lkLmNvbS9hcGsvcmVzL2FuZHJvaWQiCi0gICAgeG1sbnM6eGxpZmY9InVybjpvYXNpczpuYW1lczp0Yzp4bGlmZjpkb2N1bWVudDoxLjIiPgotICAgIDxzdHJpbmcgbmFtZT0ibXJfc3lzdGVtX3JvdXRlX25hbWUiIG1zZ2lkPSI1NDQxNTI5ODUxNDgxMTc2ODE3Ij4i4La04Lav4LeK4Law4Lat4LeS4La6Ijwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibXJfdXNlcl9yb3V0ZV9jYXRlZ29yeV9uYW1lIiBtc2dpZD0iNzQ5ODExMjkwNzUyNDk3NzMxMSI+IuC2i+C2tOC3j+C2guC2nCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im1yX2J1dHRvbl9jb250ZW50X2Rlc2NyaXB0aW9uIiBtc2dpZD0iMzY5ODM3ODA4NTkwMTQ2NjEyOSI+IuC3gOC3kuC2muC3j+C3gSDgtrbgt5zgtq3gt4rgtq3gtrgiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJtcl9jYXN0X2J1dHRvbl9kaXNjb25uZWN0ZWQiIG1zZ2lkPSI4MTYzMDU0OTA0Mjc4MTkyNDAiPiLgt4Dgt5Lgtprgt4/gt4Eg4La24Lec4Lat4LeK4Lat4La4LiDgt4Dgt5Lgt4PgtrHgt4rgtrDgt5Ig4Laa4La74LaxIOC2veC2r+C3kyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im1yX2Nhc3RfYnV0dG9uX2Nvbm5lY3RpbmciIG1zZ2lkPSIyMTg3NjQyNzY1MDkxODczODM0Ij4i4LeA4LeS4Laa4LeP4LeBIOC2tuC3nOC2reC3iuC2reC2uCDgt4Pgtrjgt4rgtrbgtrHgt4rgtrAg4Laa4La74La44LeS4Lax4LeKIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibXJfY2FzdF9idXR0b25fY29ubmVjdGVkIiBtc2dpZD0iNTA4ODQyNzc3MTc4ODY0ODA4NSI+IuC3gOC3kuC2muC3j+C3gSDgtrbgt5zgtq3gt4rgtq3gtrgg4LeD4La44LeK4La24Lax4LeK4LawIOC2muC2u+C2sSDgtr3gtq/gt5MiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJtcl9jaG9vc2VyX3RpdGxlIiBtc2dpZD0iNDE0MzAxOTQxNTQ2MTM1OTkwIj4i4LeA4LeS4Laa4LeP4LeB4La6Ijwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibXJfY2hvb3Nlcl9zZWFyY2hpbmciIG1zZ2lkPSI2MzQ5OTAwNTc5NTA3NTIxOTU2Ij4i4LaL4La04LeP4LaC4LacIOC3g+C3meC3gOC3k+C2uCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im1yX2NvbnRyb2xsZXJfZGlzY29ubmVjdCIgbXNnaWQ9IjEyMjcyNjQ4ODk0MTI5ODk1ODAiPiLgt4Dgt5Lgt4PgtrHgt4rgtrDgt5Ig4Laa4La74Lax4LeK4LaxIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibXJfY29udHJvbGxlcl9zdG9wX2Nhc3RpbmciIG1zZ2lkPSI4ODU3ODg2Nzk0MDg2NTgzMjI2Ij4i4LeA4LeS4Laa4LeP4LeBIOC2muC3kuC2u+C3k+C2uCDgtrHgtq3gtrsg4Laa4La74Lax4LeK4LaxIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibXJfY29udHJvbGxlcl9jbG9zZV9kZXNjcmlwdGlvbiIgbXNnaWQ9IjczMzM4NjIzMTI0ODA1ODMyNjAiPiLgt4Dgt4PgtrHgt4rgtrEiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJtcl9jb250cm9sbGVyX3BsYXkiIG1zZ2lkPSI2ODM2MzQ1NjU5Njk5ODc0NTgiPiLgtrDgt4/gt4DgtrHgtrog4Laa4La74Lax4LeK4LaxIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibXJfY29udHJvbGxlcl9wYXVzZSIgbXNnaWQ9IjU0NTE4ODQ0MzU1MTA5MDU0MDYiPiLgt4Dgt5Lgtrvgt4/gtrgg4Lac4Lax4LeK4LeA4Lax4LeK4LaxIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibXJfY29udHJvbGxlcl9zdG9wIiBtc2dpZD0iNzM1ODc0NjQxOTIxNDI1MTIzIj4i4Lax4Lat4La7IOC2muC2u+C2seC3iuC2sSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im1yX2NvbnRyb2xsZXJfZXhwYW5kX2dyb3VwIiBtc2dpZD0iODA2MjQyNzAyMjc0NDI2NjkwNyI+IuC2r+C3kuC2nCDgt4Tgtrvgt5LgtrHgt4rgtrEiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJtcl9jb250cm9sbGVyX2NvbGxhcHNlX2dyb3VwIiBtc2dpZD0iNzkyNDgwOTA1NjkwNDI0MDkyNiI+IuC3hOC2muC3lOC3heC2seC3iuC2sSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im1yX2NvbnRyb2xsZXJfYWxidW1fYXJ0IiBtc2dpZD0iNjQyMjgwMTg0MzU0MDU0MzU4NSI+IuC2h+C2veC3iuC2tuC2uCDgtprgtr3gt4/gt4AiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJtcl9jb250cm9sbGVyX3ZvbHVtZV9zbGlkZXIiIG1zZ2lkPSIyMzYxNzg1OTkyMjExODQxNzA5Ij4i4LeE4LasIOC2tOC2u+C3kuC2uOC3jyDgt4Pgt4rgtr3gtrrgt5LgtqngtrvgtroiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJtcl9jb250cm9sbGVyX25vX21lZGlhX3NlbGVjdGVkIiBtc2dpZD0iNjU0NzEzMDM2MDM0OTE4MjM4MSI+IuC2uOC3j+C2sOC3iuKAjeC2uuC2uiDgtq3gt53gtrvgt48g4Lax4LeQ4LatIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibXJfY29udHJvbGxlcl9ub19pbmZvX2F2YWlsYWJsZSIgbXNnaWQ9IjU1ODU0MTg0NzE3NDExNDI5MjQiPiLgtr3gtrbgt48g4Lac4LatIOC3hOC3kOC2muC3kiDgtq3gt5zgtrvgtq3gt5Tgtrvgt5Qg4Lax4Lec4La44LeQ4LatIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibXJfY29udHJvbGxlcl9jYXN0aW5nX3NjcmVlbiIgbXNnaWQ9IjQ4Njg0NTc5NTcxNTExMjQ4NjciPiLgt4Dgt5Lgtprgt4/gt4Eg4Lat4LeS4La74La6Ijwvc3RyaW5nPgotPC9yZXNvdXJjZXM+CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9NZWRpYUNvbXBvbmVudHMvcmVzL3ZhbHVlcy1zay9zdHJpbmdzLnhtbCBiL3BhY2thZ2VzL01lZGlhQ29tcG9uZW50cy9yZXMvdmFsdWVzLXNrL3N0cmluZ3MueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhNThhYTExLi4wMDAwMDAwCi0tLSBhL3BhY2thZ2VzL01lZGlhQ29tcG9uZW50cy9yZXMvdmFsdWVzLXNrL3N0cmluZ3MueG1sCisrKyAvZGV2L251bGwKQEAgLTEsNDAgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTwhLS0gIENvcHlyaWdodCAyMDE4IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKLQotICAgICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKLSAgICAgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgotICAgICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLQotICAgICAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotCi0gICAgIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKLSAgICAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKLSAgICAgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCi0gICAgIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKLSAgICAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCi0gLS0+Ci0KLTxyZXNvdXJjZXMgeG1sbnM6YW5kcm9pZD0iaHR0cDovL3NjaGVtYXMuYW5kcm9pZC5jb20vYXBrL3Jlcy9hbmRyb2lkIgotICAgIHhtbG5zOnhsaWZmPSJ1cm46b2FzaXM6bmFtZXM6dGM6eGxpZmY6ZG9jdW1lbnQ6MS4yIj4KLSAgICA8c3RyaW5nIG5hbWU9Im1yX3N5c3RlbV9yb3V0ZV9uYW1lIiBtc2dpZD0iNTQ0MTUyOTg1MTQ4MTE3NjgxNyI+IlN5c3TDqW0iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJtcl91c2VyX3JvdXRlX2NhdGVnb3J5X25hbWUiIG1zZ2lkPSI3NDk4MTEyOTA3NTI0OTc3MzExIj4iWmFyaWFkZW5pYSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im1yX2J1dHRvbl9jb250ZW50X2Rlc2NyaXB0aW9uIiBtc2dpZD0iMzY5ODM3ODA4NTkwMTQ2NjEyOSI+IlRsYcSNaWRsbyBwcmVub3N1Ijwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibXJfY2FzdF9idXR0b25fZGlzY29ubmVjdGVkIiBtc2dpZD0iODE2MzA1NDkwNDI3ODE5MjQwIj4iVGxhxI1pZGxvIHByZW5vc3UuIE9kcG9qZW7DqSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im1yX2Nhc3RfYnV0dG9uX2Nvbm5lY3RpbmciIG1zZ2lkPSIyMTg3NjQyNzY1MDkxODczODM0Ij4iVGxhxI1pZGxvIHByZW5vc3UuIFByaXDDoWphIHNhIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibXJfY2FzdF9idXR0b25fY29ubmVjdGVkIiBtc2dpZD0iNTA4ODQyNzc3MTc4ODY0ODA4NSI+IlRsYcSNaWRsbyBwcmVub3N1LiBQcmlwb2plbsOpIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibXJfY2hvb3Nlcl90aXRsZSIgbXNnaWQ9IjQxNDMwMTk0MTU0NjEzNTk5MCI+IlByZW5vcyBkbyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im1yX2Nob29zZXJfc2VhcmNoaW5nIiBtc2dpZD0iNjM0OTkwMDU3OTUwNzUyMTk1NiI+IkjEvmFkYWrDuiBzYSB6YXJpYWRlbmlhIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibXJfY29udHJvbGxlcl9kaXNjb25uZWN0IiBtc2dpZD0iMTIyNzI2NDg4OTQxMjk4OTU4MCI+Ik9kcG9qacWlIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibXJfY29udHJvbGxlcl9zdG9wX2Nhc3RpbmciIG1zZ2lkPSI4ODU3ODg2Nzk0MDg2NTgzMjI2Ij4iWmFzdGF2acWlIHByZW7DocWhYW5pZSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im1yX2NvbnRyb2xsZXJfY2xvc2VfZGVzY3JpcHRpb24iIG1zZ2lkPSI3MzMzODYyMzEyNDgwNTgzMjYwIj4iWmF2cmllxaUiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJtcl9jb250cm9sbGVyX3BsYXkiIG1zZ2lkPSI2ODM2MzQ1NjU5Njk5ODc0NTgiPiJQcmVocmHFpSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im1yX2NvbnRyb2xsZXJfcGF1c2UiIG1zZ2lkPSI1NDUxODg0NDM1NTEwOTA1NDA2Ij4iUG96YXN0YXZpxaUiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJtcl9jb250cm9sbGVyX3N0b3AiIG1zZ2lkPSI3MzU4NzQ2NDE5MjE0MjUxMjMiPiJaYXN0YXZpxaUiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJtcl9jb250cm9sbGVyX2V4cGFuZF9ncm91cCIgbXNnaWQ9IjgwNjI0MjcwMjI3NDQyNjY5MDciPiJSb3piYWxpxaUiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJtcl9jb250cm9sbGVyX2NvbGxhcHNlX2dyb3VwIiBtc2dpZD0iNzkyNDgwOTA1NjkwNDI0MDkyNiI+IlpiYWxpxaUiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJtcl9jb250cm9sbGVyX2FsYnVtX2FydCIgbXNnaWQ9IjY0MjI4MDE4NDM1NDA1NDM1ODUiPiJPYnLDoXpvayBhbGJ1bXUiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJtcl9jb250cm9sbGVyX3ZvbHVtZV9zbGlkZXIiIG1zZ2lkPSIyMzYxNzg1OTkyMjExODQxNzA5Ij4iUG9zw7p2YcSNIGhsYXNpdG9zdGkiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJtcl9jb250cm9sbGVyX25vX21lZGlhX3NlbGVjdGVkIiBtc2dpZD0iNjU0NzEzMDM2MDM0OTE4MjM4MSI+Ik5pZSBzw7ogdnlicmFuw6kgxb5pYWRuZSBtw6lkacOhIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibXJfY29udHJvbGxlcl9ub19pbmZvX2F2YWlsYWJsZSIgbXNnaWQ9IjU1ODU0MTg0NzE3NDExNDI5MjQiPiJOaWUgc8O6IGvCoGRpc3BvesOtY2lpIMW+aWFkbmUgaW5mb3Jtw6FjaWUiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJtcl9jb250cm9sbGVyX2Nhc3Rpbmdfc2NyZWVuIiBtc2dpZD0iNDg2ODQ1Nzk1NzE1MTEyNDg2NyI+IlByZW7DocWhYSBzYSBvYnJhem92a2EiPC9zdHJpbmc+Ci08L3Jlc291cmNlcz4KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL01lZGlhQ29tcG9uZW50cy9yZXMvdmFsdWVzLXNsL3N0cmluZ3MueG1sIGIvcGFja2FnZXMvTWVkaWFDb21wb25lbnRzL3Jlcy92YWx1ZXMtc2wvc3RyaW5ncy54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDhjYTRjZTQuLjAwMDAwMDAKLS0tIGEvcGFja2FnZXMvTWVkaWFDb21wb25lbnRzL3Jlcy92YWx1ZXMtc2wvc3RyaW5ncy54bWwKKysrIC9kZXYvbnVsbApAQCAtMSw0MCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPCEtLSAgQ29weXJpZ2h0IDIwMTggVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAotCi0gICAgIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwotICAgICB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCi0gICAgIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotCi0gICAgICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0KLSAgICAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQotICAgICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAotICAgICBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KLSAgICAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAotICAgICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KLSAtLT4KLQotPHJlc291cmNlcyB4bWxuczphbmRyb2lkPSJodHRwOi8vc2NoZW1hcy5hbmRyb2lkLmNvbS9hcGsvcmVzL2FuZHJvaWQiCi0gICAgeG1sbnM6eGxpZmY9InVybjpvYXNpczpuYW1lczp0Yzp4bGlmZjpkb2N1bWVudDoxLjIiPgotICAgIDxzdHJpbmcgbmFtZT0ibXJfc3lzdGVtX3JvdXRlX25hbWUiIG1zZ2lkPSI1NDQxNTI5ODUxNDgxMTc2ODE3Ij4iU2lzdGVtIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibXJfdXNlcl9yb3V0ZV9jYXRlZ29yeV9uYW1lIiBtc2dpZD0iNzQ5ODExMjkwNzUyNDk3NzMxMSI+Ik5hcHJhdmUiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJtcl9idXR0b25fY29udGVudF9kZXNjcmlwdGlvbiIgbXNnaWQ9IjM2OTgzNzgwODU5MDE0NjYxMjkiPiJHdW1iIHphIHByZWR2YWphbmplIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibXJfY2FzdF9idXR0b25fZGlzY29ubmVjdGVkIiBtc2dpZD0iODE2MzA1NDkwNDI3ODE5MjQwIj4iR3VtYiB6YSBwcmVkdmFqYW5qZS4gUG92ZXphdmEgamUgcHJla2luamVuYS4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJtcl9jYXN0X2J1dHRvbl9jb25uZWN0aW5nIiBtc2dpZD0iMjE4NzY0Mjc2NTA5MTg3MzgzNCI+Ikd1bWIgemEgcHJlZHZhamFuamUuIFZ6cG9zdGF2bGphbmplIHBvdmV6YXZlLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im1yX2Nhc3RfYnV0dG9uX2Nvbm5lY3RlZCIgbXNnaWQ9IjUwODg0Mjc3NzE3ODg2NDgwODUiPiJHdW1iIHphIHByZWR2YWphbmplLiBQb3ZlemF2YSBqZSB2enBvc3RhdmxqZW5hLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im1yX2Nob29zZXJfdGl0bGUiIG1zZ2lkPSI0MTQzMDE5NDE1NDYxMzU5OTAiPiJQcmVkdmFqYW5qZSBwcmVrOiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im1yX2Nob29zZXJfc2VhcmNoaW5nIiBtc2dpZD0iNjM0OTkwMDU3OTUwNzUyMTk1NiI+Iklza2FuamUgbmFwcmF2Ijwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibXJfY29udHJvbGxlcl9kaXNjb25uZWN0IiBtc2dpZD0iMTIyNzI2NDg4OTQxMjk4OTU4MCI+IlByZWtpbmkgcG92ZXphdm8iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJtcl9jb250cm9sbGVyX3N0b3BfY2FzdGluZyIgbXNnaWQ9Ijg4NTc4ODY3OTQwODY1ODMyMjYiPiJVc3RhdmkgcHJlZHZhamFuamUiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJtcl9jb250cm9sbGVyX2Nsb3NlX2Rlc2NyaXB0aW9uIiBtc2dpZD0iNzMzMzg2MjMxMjQ4MDU4MzI2MCI+IlphcHJpIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibXJfY29udHJvbGxlcl9wbGF5IiBtc2dpZD0iNjgzNjM0NTY1OTY5OTg3NDU4Ij4iUHJlZHZhamFuamUiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJtcl9jb250cm9sbGVyX3BhdXNlIiBtc2dpZD0iNTQ1MTg4NDQzNTUxMDkwNTQwNiI+IlphdXN0YXZpIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibXJfY29udHJvbGxlcl9zdG9wIiBtc2dpZD0iNzM1ODc0NjQxOTIxNDI1MTIzIj4iVXN0YXZpIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibXJfY29udHJvbGxlcl9leHBhbmRfZ3JvdXAiIG1zZ2lkPSI4MDYyNDI3MDIyNzQ0MjY2OTA3Ij4iUmF6xaFpcmkiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJtcl9jb250cm9sbGVyX2NvbGxhcHNlX2dyb3VwIiBtc2dpZD0iNzkyNDgwOTA1NjkwNDI0MDkyNiI+IlN0cm5pIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibXJfY29udHJvbGxlcl9hbGJ1bV9hcnQiIG1zZ2lkPSI2NDIyODAxODQzNTQwNTQzNTg1Ij4iTmFzbG92bmljYSBhbGJ1bWEiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJtcl9jb250cm9sbGVyX3ZvbHVtZV9zbGlkZXIiIG1zZ2lkPSIyMzYxNzg1OTkyMjExODQxNzA5Ij4iRHJzbmlrIHphIGdsYXNub3N0Ijwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibXJfY29udHJvbGxlcl9ub19tZWRpYV9zZWxlY3RlZCIgbXNnaWQ9IjY1NDcxMzAzNjAzNDkxODIzODEiPiJOaSBpemJyYW5lIHByZWRzdGF2bm9zdGkiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJtcl9jb250cm9sbGVyX25vX2luZm9fYXZhaWxhYmxlIiBtc2dpZD0iNTU4NTQxODQ3MTc0MTE0MjkyNCI+IlBvZGF0a2kgbmlzbyBuYSB2b2xqbyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im1yX2NvbnRyb2xsZXJfY2FzdGluZ19zY3JlZW4iIG1zZ2lkPSI0ODY4NDU3OTU3MTUxMTI0ODY3Ij4iUHJlZHZhamFuamUgemFzbG9uYSI8L3N0cmluZz4KLTwvcmVzb3VyY2VzPgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvTWVkaWFDb21wb25lbnRzL3Jlcy92YWx1ZXMtc3Evc3RyaW5ncy54bWwgYi9wYWNrYWdlcy9NZWRpYUNvbXBvbmVudHMvcmVzL3ZhbHVlcy1zcS9zdHJpbmdzLnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODE2ZTExMC4uMDAwMDAwMAotLS0gYS9wYWNrYWdlcy9NZWRpYUNvbXBvbmVudHMvcmVzL3ZhbHVlcy1zcS9zdHJpbmdzLnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDQwICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08IS0tICBDb3B5cmlnaHQgMjAxOCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0Ci0KLSAgICAgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7Ci0gICAgIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KLSAgICAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0KLSAgICAgICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLQotICAgICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCi0gICAgIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCi0gICAgIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgotICAgICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCi0gICAgIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgotIC0tPgotCi08cmVzb3VyY2VzIHhtbG5zOmFuZHJvaWQ9Imh0dHA6Ly9zY2hlbWFzLmFuZHJvaWQuY29tL2Fway9yZXMvYW5kcm9pZCIKLSAgICB4bWxuczp4bGlmZj0idXJuOm9hc2lzOm5hbWVzOnRjOnhsaWZmOmRvY3VtZW50OjEuMiI+Ci0gICAgPHN0cmluZyBuYW1lPSJtcl9zeXN0ZW1fcm91dGVfbmFtZSIgbXNnaWQ9IjU0NDE1Mjk4NTE0ODExNzY4MTciPiJTaXN0ZW1pIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibXJfdXNlcl9yb3V0ZV9jYXRlZ29yeV9uYW1lIiBtc2dpZD0iNzQ5ODExMjkwNzUyNDk3NzMxMSI+IlBhamlzamV0Ijwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibXJfYnV0dG9uX2NvbnRlbnRfZGVzY3JpcHRpb24iIG1zZ2lkPSIzNjk4Mzc4MDg1OTAxNDY2MTI5Ij4iQnV0b25pIGkgdHJhbnNtZXRpbWl0Ijwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibXJfY2FzdF9idXR0b25fZGlzY29ubmVjdGVkIiBtc2dpZD0iODE2MzA1NDkwNDI3ODE5MjQwIj4iQnV0b25pIGkgdHJhbnNtZXRpbWl0LiBKZSBpIHNoa8OrcHV0dXIiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJtcl9jYXN0X2J1dHRvbl9jb25uZWN0aW5nIiBtc2dpZD0iMjE4NzY0Mjc2NTA5MTg3MzgzNCI+IkJ1dG9uaSBpIHRyYW5zbWV0aW1pdC4gUG8gbGlkaGV0Ijwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibXJfY2FzdF9idXR0b25fY29ubmVjdGVkIiBtc2dpZD0iNTA4ODQyNzc3MTc4ODY0ODA4NSI+IkJ1dG9uaSBpIHRyYW5zbWV0aW1pdC4gSmUgaSBsaWRodXIiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJtcl9jaG9vc2VyX3RpdGxlIiBtc2dpZD0iNDE0MzAxOTQxNTQ2MTM1OTkwIj4iVHJhbnNtZXRvIHRlIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibXJfY2hvb3Nlcl9zZWFyY2hpbmciIG1zZ2lkPSI2MzQ5OTAwNTc5NTA3NTIxOTU2Ij4iUG8ga8OrcmtvbiBwYWppc2plIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibXJfY29udHJvbGxlcl9kaXNjb25uZWN0IiBtc2dpZD0iMTIyNzI2NDg4OTQxMjk4OTU4MCI+IlNoa8OrcHV0ZSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im1yX2NvbnRyb2xsZXJfc3RvcF9jYXN0aW5nIiBtc2dpZD0iODg1Nzg4Njc5NDA4NjU4MzIyNiI+Ik5kYWxvIHRyYW5zbWV0aW1pbiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im1yX2NvbnRyb2xsZXJfY2xvc2VfZGVzY3JpcHRpb24iIG1zZ2lkPSI3MzMzODYyMzEyNDgwNTgzMjYwIj4iTWJ5bGwiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJtcl9jb250cm9sbGVyX3BsYXkiIG1zZ2lkPSI2ODM2MzQ1NjU5Njk5ODc0NTgiPiJMdWFqIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibXJfY29udHJvbGxlcl9wYXVzZSIgbXNnaWQ9IjU0NTE4ODQ0MzU1MTA5MDU0MDYiPiJQYXV6w6siPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJtcl9jb250cm9sbGVyX3N0b3AiIG1zZ2lkPSI3MzU4NzQ2NDE5MjE0MjUxMjMiPiJOZGFsbyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im1yX2NvbnRyb2xsZXJfZXhwYW5kX2dyb3VwIiBtc2dpZD0iODA2MjQyNzAyMjc0NDI2NjkwNyI+IlpnamVyb2plIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibXJfY29udHJvbGxlcl9jb2xsYXBzZV9ncm91cCIgbXNnaWQ9Ijc5MjQ4MDkwNTY5MDQyNDA5MjYiPiJQYWxvc2UiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJtcl9jb250cm9sbGVyX2FsYnVtX2FydCIgbXNnaWQ9IjY0MjI4MDE4NDM1NDA1NDM1ODUiPiJLb3BlcnRpbmEgZSBhbGJ1bWl0Ijwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibXJfY29udHJvbGxlcl92b2x1bWVfc2xpZGVyIiBtc2dpZD0iMjM2MTc4NTk5MjIxMTg0MTcwOSI+IlJyw6tzaHFpdMOrc2kgaSB2b2x1bWl0Ijwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibXJfY29udHJvbGxlcl9ub19tZWRpYV9zZWxlY3RlZCIgbXNnaWQ9IjY1NDcxMzAzNjAzNDkxODIzODEiPiJOdWsgdSB6Z2pvZGggYXNuasOrIG1lZGlhIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibXJfY29udHJvbGxlcl9ub19pbmZvX2F2YWlsYWJsZSIgbXNnaWQ9IjU1ODU0MTg0NzE3NDExNDI5MjQiPiJOdWsgamVwZXQgYXNuasOrIGluZm9ybWFjaW9uIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibXJfY29udHJvbGxlcl9jYXN0aW5nX3NjcmVlbiIgbXNnaWQ9IjQ4Njg0NTc5NTcxNTExMjQ4NjciPiJQbyB0cmFuc21ldG9uIGVrcmFuaW4iPC9zdHJpbmc+Ci08L3Jlc291cmNlcz4KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL01lZGlhQ29tcG9uZW50cy9yZXMvdmFsdWVzLXNyL3N0cmluZ3MueG1sIGIvcGFja2FnZXMvTWVkaWFDb21wb25lbnRzL3Jlcy92YWx1ZXMtc3Ivc3RyaW5ncy54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGNhYWJhZDUuLjAwMDAwMDAKLS0tIGEvcGFja2FnZXMvTWVkaWFDb21wb25lbnRzL3Jlcy92YWx1ZXMtc3Ivc3RyaW5ncy54bWwKKysrIC9kZXYvbnVsbApAQCAtMSw0MCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPCEtLSAgQ29weXJpZ2h0IDIwMTggVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAotCi0gICAgIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwotICAgICB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCi0gICAgIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotCi0gICAgICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0KLSAgICAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQotICAgICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAotICAgICBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KLSAgICAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAotICAgICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KLSAtLT4KLQotPHJlc291cmNlcyB4bWxuczphbmRyb2lkPSJodHRwOi8vc2NoZW1hcy5hbmRyb2lkLmNvbS9hcGsvcmVzL2FuZHJvaWQiCi0gICAgeG1sbnM6eGxpZmY9InVybjpvYXNpczpuYW1lczp0Yzp4bGlmZjpkb2N1bWVudDoxLjIiPgotICAgIDxzdHJpbmcgbmFtZT0ibXJfc3lzdGVtX3JvdXRlX25hbWUiIG1zZ2lkPSI1NDQxNTI5ODUxNDgxMTc2ODE3Ij4i0KHQuNGB0YLQtdC8Ijwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibXJfdXNlcl9yb3V0ZV9jYXRlZ29yeV9uYW1lIiBtc2dpZD0iNzQ5ODExMjkwNzUyNDk3NzMxMSI+ItCj0YDQtdGS0LDRmNC4Ijwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibXJfYnV0dG9uX2NvbnRlbnRfZGVzY3JpcHRpb24iIG1zZ2lkPSIzNjk4Mzc4MDg1OTAxNDY2MTI5Ij4i0JTRg9Cz0LzQtSDQn9GA0LXQsdCw0YbQuCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im1yX2Nhc3RfYnV0dG9uX2Rpc2Nvbm5lY3RlZCIgbXNnaWQ9IjgxNjMwNTQ5MDQyNzgxOTI0MCI+ItCU0YPQs9C80LUg0J/RgNC10LHQsNGG0LguINCS0LXQt9CwINGY0LUg0L/RgNC10LrQuNC90YPRgtCwIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibXJfY2FzdF9idXR0b25fY29ubmVjdGluZyIgbXNnaWQ9IjIxODc2NDI3NjUwOTE4NzM4MzQiPiLQlNGD0LPQvNC1INCf0YDQtdCx0LDRhtC4LiDQn9C+0LLQtdC30YPRmNC1INGB0LUiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJtcl9jYXN0X2J1dHRvbl9jb25uZWN0ZWQiIG1zZ2lkPSI1MDg4NDI3NzcxNzg4NjQ4MDg1Ij4i0JTRg9Cz0LzQtSDQn9GA0LXQsdCw0YbQuC4g0J/QvtCy0LXQt9Cw0L0g0ZjQtSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im1yX2Nob29zZXJfdGl0bGUiIG1zZ2lkPSI0MTQzMDE5NDE1NDYxMzU5OTAiPiLQn9GA0LXQsdCw0YbRg9GYINC90LAiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJtcl9jaG9vc2VyX3NlYXJjaGluZyIgbXNnaWQ9IjYzNDk5MDA1Nzk1MDc1MjE5NTYiPiLQn9GA0L7QvdCw0LvQsNC20LXRmtC1INGD0YDQtdGS0LDRmNCwIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibXJfY29udHJvbGxlcl9kaXNjb25uZWN0IiBtc2dpZD0iMTIyNzI2NDg4OTQxMjk4OTU4MCI+ItCf0YDQtdC60LjQvdC4INCy0LXQt9GDIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibXJfY29udHJvbGxlcl9zdG9wX2Nhc3RpbmciIG1zZ2lkPSI4ODU3ODg2Nzk0MDg2NTgzMjI2Ij4i0JfQsNGD0YHRgtCw0LLQuCDQv9GA0LXQsdCw0YbQuNCy0LDRmtC1Ijwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibXJfY29udHJvbGxlcl9jbG9zZV9kZXNjcmlwdGlvbiIgbXNnaWQ9IjczMzM4NjIzMTI0ODA1ODMyNjAiPiLQl9Cw0YLQstC+0YDQuCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im1yX2NvbnRyb2xsZXJfcGxheSIgbXNnaWQ9IjY4MzYzNDU2NTk2OTk4NzQ1OCI+ItCf0YPRgdGC0LgiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJtcl9jb250cm9sbGVyX3BhdXNlIiBtc2dpZD0iNTQ1MTg4NDQzNTUxMDkwNTQwNiI+ItCf0LDRg9C30LjRgNCw0ZgiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJtcl9jb250cm9sbGVyX3N0b3AiIG1zZ2lkPSI3MzU4NzQ2NDE5MjE0MjUxMjMiPiLQl9Cw0YPRgdGC0LDQstC4Ijwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibXJfY29udHJvbGxlcl9leHBhbmRfZ3JvdXAiIG1zZ2lkPSI4MDYyNDI3MDIyNzQ0MjY2OTA3Ij4i0J/RgNC+0YjQuNGA0LgiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJtcl9jb250cm9sbGVyX2NvbGxhcHNlX2dyb3VwIiBtc2dpZD0iNzkyNDgwOTA1NjkwNDI0MDkyNiI+ItCh0LrRg9C/0LgiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJtcl9jb250cm9sbGVyX2FsYnVtX2FydCIgbXNnaWQ9IjY0MjI4MDE4NDM1NDA1NDM1ODUiPiLQntC80L7RgiDQsNC70LHRg9C80LAiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJtcl9jb250cm9sbGVyX3ZvbHVtZV9zbGlkZXIiIG1zZ2lkPSIyMzYxNzg1OTkyMjExODQxNzA5Ij4i0JrQu9C40LfQsNGHINC30LAg0ZjQsNGH0LjQvdGDINC30LLRg9C60LAiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJtcl9jb250cm9sbGVyX25vX21lZGlhX3NlbGVjdGVkIiBtc2dpZD0iNjU0NzEzMDM2MDM0OTE4MjM4MSI+ItCd0LXQvNCwINC40LfQsNCx0YDQsNC90LjRhSDQvNC10LTQuNGY0LAiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJtcl9jb250cm9sbGVyX25vX2luZm9fYXZhaWxhYmxlIiBtc2dpZD0iNTU4NTQxODQ3MTc0MTE0MjkyNCI+ItCd0LjRgdGDINC00L7RgdGC0YPQv9C90LUg0L3QuNC60LDQutCy0LUg0LjQvdGE0L7RgNC80LDRhtC40ZjQtSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im1yX2NvbnRyb2xsZXJfY2FzdGluZ19zY3JlZW4iIG1zZ2lkPSI0ODY4NDU3OTU3MTUxMTI0ODY3Ij4i0J/RgNC10LHQsNGG0YPRmNC1INGB0LUg0LXQutGA0LDQvSI8L3N0cmluZz4KLTwvcmVzb3VyY2VzPgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvTWVkaWFDb21wb25lbnRzL3Jlcy92YWx1ZXMtc3Yvc3RyaW5ncy54bWwgYi9wYWNrYWdlcy9NZWRpYUNvbXBvbmVudHMvcmVzL3ZhbHVlcy1zdi9zdHJpbmdzLnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggY2E3ZDNlMC4uMDAwMDAwMAotLS0gYS9wYWNrYWdlcy9NZWRpYUNvbXBvbmVudHMvcmVzL3ZhbHVlcy1zdi9zdHJpbmdzLnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDQwICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08IS0tICBDb3B5cmlnaHQgMjAxOCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0Ci0KLSAgICAgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7Ci0gICAgIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KLSAgICAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0KLSAgICAgICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLQotICAgICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCi0gICAgIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCi0gICAgIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgotICAgICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCi0gICAgIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgotIC0tPgotCi08cmVzb3VyY2VzIHhtbG5zOmFuZHJvaWQ9Imh0dHA6Ly9zY2hlbWFzLmFuZHJvaWQuY29tL2Fway9yZXMvYW5kcm9pZCIKLSAgICB4bWxuczp4bGlmZj0idXJuOm9hc2lzOm5hbWVzOnRjOnhsaWZmOmRvY3VtZW50OjEuMiI+Ci0gICAgPHN0cmluZyBuYW1lPSJtcl9zeXN0ZW1fcm91dGVfbmFtZSIgbXNnaWQ9IjU0NDE1Mjk4NTE0ODExNzY4MTciPiJTeXN0ZW0iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJtcl91c2VyX3JvdXRlX2NhdGVnb3J5X25hbWUiIG1zZ2lkPSI3NDk4MTEyOTA3NTI0OTc3MzExIj4iRW5oZXRlciI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im1yX2J1dHRvbl9jb250ZW50X2Rlc2NyaXB0aW9uIiBtc2dpZD0iMzY5ODM3ODA4NTkwMTQ2NjEyOSI+IkNhc3Qta25hcHBlbiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im1yX2Nhc3RfYnV0dG9uX2Rpc2Nvbm5lY3RlZCIgbXNnaWQ9IjgxNjMwNTQ5MDQyNzgxOTI0MCI+IkNhc3Qta25hcHBlbi4gRnLDpW5rb3BwbGFkIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibXJfY2FzdF9idXR0b25fY29ubmVjdGluZyIgbXNnaWQ9IjIxODc2NDI3NjUwOTE4NzM4MzQiPiJDYXN0LWtuYXBwZW4uIEFuc2x1dGVyIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibXJfY2FzdF9idXR0b25fY29ubmVjdGVkIiBtc2dpZD0iNTA4ODQyNzc3MTc4ODY0ODA4NSI+IkNhc3Qta25hcHBlbi4gQW5zbHV0ZW4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJtcl9jaG9vc2VyX3RpdGxlIiBtc2dpZD0iNDE0MzAxOTQxNTQ2MTM1OTkwIj4iQ2FzdGEgdGlsbCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im1yX2Nob29zZXJfc2VhcmNoaW5nIiBtc2dpZD0iNjM0OTkwMDU3OTUwNzUyMTk1NiI+IkxldGFyIGVmdGVyIGVuaGV0ZXIiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJtcl9jb250cm9sbGVyX2Rpc2Nvbm5lY3QiIG1zZ2lkPSIxMjI3MjY0ODg5NDEyOTg5NTgwIj4iS29wcGxhIGZyw6VuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibXJfY29udHJvbGxlcl9zdG9wX2Nhc3RpbmciIG1zZ2lkPSI4ODU3ODg2Nzk0MDg2NTgzMjI2Ij4iU2x1dGEgY2FzdGEiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJtcl9jb250cm9sbGVyX2Nsb3NlX2Rlc2NyaXB0aW9uIiBtc2dpZD0iNzMzMzg2MjMxMjQ4MDU4MzI2MCI+IlN0w6RuZyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im1yX2NvbnRyb2xsZXJfcGxheSIgbXNnaWQ9IjY4MzYzNDU2NTk2OTk4NzQ1OCI+IlNwZWxhIHVwcCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im1yX2NvbnRyb2xsZXJfcGF1c2UiIG1zZ2lkPSI1NDUxODg0NDM1NTEwOTA1NDA2Ij4iUGF1c2EiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJtcl9jb250cm9sbGVyX3N0b3AiIG1zZ2lkPSI3MzU4NzQ2NDE5MjE0MjUxMjMiPiJBdmJyeXQiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJtcl9jb250cm9sbGVyX2V4cGFuZF9ncm91cCIgbXNnaWQ9IjgwNjI0MjcwMjI3NDQyNjY5MDciPiJVdMO2a2EiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJtcl9jb250cm9sbGVyX2NvbGxhcHNlX2dyb3VwIiBtc2dpZD0iNzkyNDgwOTA1NjkwNDI0MDkyNiI+IktvbXByaW1lcmEiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJtcl9jb250cm9sbGVyX2FsYnVtX2FydCIgbXNnaWQ9IjY0MjI4MDE4NDM1NDA1NDM1ODUiPiJTa2l2b21zbGFnIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibXJfY29udHJvbGxlcl92b2x1bWVfc2xpZGVyIiBtc2dpZD0iMjM2MTc4NTk5MjIxMTg0MTcwOSI+IlZvbHltcmVnbGFnZSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im1yX2NvbnRyb2xsZXJfbm9fbWVkaWFfc2VsZWN0ZWQiIG1zZ2lkPSI2NTQ3MTMwMzYwMzQ5MTgyMzgxIj4iSW5nYSBtZWRpYSBoYXIgdmFsdHMiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJtcl9jb250cm9sbGVyX25vX2luZm9fYXZhaWxhYmxlIiBtc2dpZD0iNTU4NTQxODQ3MTc0MTE0MjkyNCI+IkRldCBmaW5ucyBpbmdlbiBpbmZvcm1hdGlvbiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im1yX2NvbnRyb2xsZXJfY2FzdGluZ19zY3JlZW4iIG1zZ2lkPSI0ODY4NDU3OTU3MTUxMTI0ODY3Ij4iU2vDpHJtZW4gY2FzdGFzIjwvc3RyaW5nPgotPC9yZXNvdXJjZXM+CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9NZWRpYUNvbXBvbmVudHMvcmVzL3ZhbHVlcy1zdy9zdHJpbmdzLnhtbCBiL3BhY2thZ2VzL01lZGlhQ29tcG9uZW50cy9yZXMvdmFsdWVzLXN3L3N0cmluZ3MueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5NTYyY2IxLi4wMDAwMDAwCi0tLSBhL3BhY2thZ2VzL01lZGlhQ29tcG9uZW50cy9yZXMvdmFsdWVzLXN3L3N0cmluZ3MueG1sCisrKyAvZGV2L251bGwKQEAgLTEsNDAgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTwhLS0gIENvcHlyaWdodCAyMDE4IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKLQotICAgICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKLSAgICAgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgotICAgICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLQotICAgICAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotCi0gICAgIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKLSAgICAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKLSAgICAgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCi0gICAgIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKLSAgICAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCi0gLS0+Ci0KLTxyZXNvdXJjZXMgeG1sbnM6YW5kcm9pZD0iaHR0cDovL3NjaGVtYXMuYW5kcm9pZC5jb20vYXBrL3Jlcy9hbmRyb2lkIgotICAgIHhtbG5zOnhsaWZmPSJ1cm46b2FzaXM6bmFtZXM6dGM6eGxpZmY6ZG9jdW1lbnQ6MS4yIj4KLSAgICA8c3RyaW5nIG5hbWU9Im1yX3N5c3RlbV9yb3V0ZV9uYW1lIiBtc2dpZD0iNTQ0MTUyOTg1MTQ4MTE3NjgxNyI+Ik1mdW1vIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibXJfdXNlcl9yb3V0ZV9jYXRlZ29yeV9uYW1lIiBtc2dpZD0iNzQ5ODExMjkwNzUyNDk3NzMxMSI+IlZpZmFhIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibXJfYnV0dG9uX2NvbnRlbnRfZGVzY3JpcHRpb24iIG1zZ2lkPSIzNjk4Mzc4MDg1OTAxNDY2MTI5Ij4iS2l0dWZlIGNoYSBrdXR1bWEiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJtcl9jYXN0X2J1dHRvbl9kaXNjb25uZWN0ZWQiIG1zZ2lkPSI4MTYzMDU0OTA0Mjc4MTkyNDAiPiJLaXR1ZmUgY2hhIGt1dHVtYS4gS2ltZW9uZG9sZXdhIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibXJfY2FzdF9idXR0b25fY29ubmVjdGluZyIgbXNnaWQ9IjIxODc2NDI3NjUwOTE4NzM4MzQiPiJLaXR1ZmUgY2hhIGt1dHVtYS4gS2luYXVuZ2FuaXNoYSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im1yX2Nhc3RfYnV0dG9uX2Nvbm5lY3RlZCIgbXNnaWQ9IjUwODg0Mjc3NzE3ODg2NDgwODUiPiJLaXR1ZmUgY2hhIGt1dHVtYS4gS2ltZXVuZ2FuaXNod2EiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJtcl9jaG9vc2VyX3RpdGxlIiBtc2dpZD0iNDE0MzAxOTQxNTQ2MTM1OTkwIj4iVHVtYSBrd2VueWUiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJtcl9jaG9vc2VyX3NlYXJjaGluZyIgbXNnaWQ9IjYzNDk5MDA1Nzk1MDc1MjE5NTYiPiJJbmF0YWZ1dGEgdmlmYWEiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJtcl9jb250cm9sbGVyX2Rpc2Nvbm5lY3QiIG1zZ2lkPSIxMjI3MjY0ODg5NDEyOTg5NTgwIj4iT25kb2EiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJtcl9jb250cm9sbGVyX3N0b3BfY2FzdGluZyIgbXNnaWQ9Ijg4NTc4ODY3OTQwODY1ODMyMjYiPiJBY2hhIGt1dHVtYSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im1yX2NvbnRyb2xsZXJfY2xvc2VfZGVzY3JpcHRpb24iIG1zZ2lkPSI3MzMzODYyMzEyNDgwNTgzMjYwIj4iRnVuZ2EiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJtcl9jb250cm9sbGVyX3BsYXkiIG1zZ2lkPSI2ODM2MzQ1NjU5Njk5ODc0NTgiPiJDaGV6YSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im1yX2NvbnRyb2xsZXJfcGF1c2UiIG1zZ2lkPSI1NDUxODg0NDM1NTEwOTA1NDA2Ij4iU2l0aXNoYSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im1yX2NvbnRyb2xsZXJfc3RvcCIgbXNnaWQ9IjczNTg3NDY0MTkyMTQyNTEyMyI+IlNpbWFtaXNoYSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im1yX2NvbnRyb2xsZXJfZXhwYW5kX2dyb3VwIiBtc2dpZD0iODA2MjQyNzAyMjc0NDI2NjkwNyI+IlBhbnVhIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibXJfY29udHJvbGxlcl9jb2xsYXBzZV9ncm91cCIgbXNnaWQ9Ijc5MjQ4MDkwNTY5MDQyNDA5MjYiPiJLdW5qYSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im1yX2NvbnRyb2xsZXJfYWxidW1fYXJ0IiBtc2dpZD0iNjQyMjgwMTg0MzU0MDU0MzU4NSI+IlNhbmFhIHlhIGFsYmFtdSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im1yX2NvbnRyb2xsZXJfdm9sdW1lX3NsaWRlciIgbXNnaWQ9IjIzNjE3ODU5OTIyMTE4NDE3MDkiPiJLaXRlbGV6aSBjaGEgc2F1dGkiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJtcl9jb250cm9sbGVyX25vX21lZGlhX3NlbGVjdGVkIiBtc2dpZD0iNjU0NzEzMDM2MDM0OTE4MjM4MSI+Ikhha3VuYSBtYXVkaHVpIHlhbGl5b2NoYWd1bGl3YSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im1yX2NvbnRyb2xsZXJfbm9faW5mb19hdmFpbGFibGUiIG1zZ2lkPSI1NTg1NDE4NDcxNzQxMTQyOTI0Ij4iSGFrdW5hIG1hZWxlem8geWFsaXlvcGF0aWthbmEiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJtcl9jb250cm9sbGVyX2Nhc3Rpbmdfc2NyZWVuIiBtc2dpZD0iNDg2ODQ1Nzk1NzE1MTEyNDg2NyI+IkluYXR1bWEgc2tyaW5pIjwvc3RyaW5nPgotPC9yZXNvdXJjZXM+CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9NZWRpYUNvbXBvbmVudHMvcmVzL3ZhbHVlcy1zdzYwMGRwL2RpbWVucy54bWwgYi9wYWNrYWdlcy9NZWRpYUNvbXBvbmVudHMvcmVzL3ZhbHVlcy1zdzYwMGRwL2RpbWVucy54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQwNDIzNDguLjAwMDAwMDAKLS0tIGEvcGFja2FnZXMvTWVkaWFDb21wb25lbnRzL3Jlcy92YWx1ZXMtc3c2MDBkcC9kaW1lbnMueG1sCisrKyAvZGV2L251bGwKQEAgLTEsMjQgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KLTwhLS0gQ29weXJpZ2h0IDIwMTggVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAotCi0gICAgIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwotICAgICB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCi0gICAgIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotCi0gICAgICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0KLSAgICAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQotICAgICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAotICAgICBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KLSAgICAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAotICAgICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KLS0tPgotCi08cmVzb3VyY2VzPgotICAgIDwhLS0gVGhlIHBsYXRmb3JtJ3MgZGVzaXJlZCBmaXhlZCB3aWR0aCBmb3IgYSBkaWFsb2cgYWxvbmcgdGhlIG1ham9yIGF4aXMKLSAgICAgICAgICh0aGUgc2NyZWVuIGlzIGluIGxhbmRzY2FwZSkuIFRoaXMgbWF5IGJlIGVpdGhlciBhIGZyYWN0aW9uIG9yIGEgZGltZW5zaW9uLi0tPgotICAgIDxpdGVtIHR5cGU9ImRpbWVuIiBuYW1lPSJtcl9kaWFsb2dfZml4ZWRfd2lkdGhfbWFqb3IiPjYwJTwvaXRlbT4KLSAgICA8IS0tIFRoZSBwbGF0Zm9ybSdzIGRlc2lyZWQgZml4ZWQgd2lkdGggZm9yIGEgZGlhbG9nIGFsb25nIHRoZSBtaW5vciBheGlzCi0gICAgICAgICAodGhlIHNjcmVlbiBpcyBpbiBwb3J0cmFpdCkuIFRoaXMgbWF5IGJlIGVpdGhlciBhIGZyYWN0aW9uIG9yIGEgZGltZW5zaW9uLi0tPgotICAgIDxpdGVtIHR5cGU9ImRpbWVuIiBuYW1lPSJtcl9kaWFsb2dfZml4ZWRfd2lkdGhfbWlub3IiPjkwJTwvaXRlbT4KLTwvcmVzb3VyY2VzPgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvTWVkaWFDb21wb25lbnRzL3Jlcy92YWx1ZXMtc3c3MjBkcC9kaW1lbnMueG1sIGIvcGFja2FnZXMvTWVkaWFDb21wb25lbnRzL3Jlcy92YWx1ZXMtc3c3MjBkcC9kaW1lbnMueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2MzRhYjhkLi4wMDAwMDAwCi0tLSBhL3BhY2thZ2VzL01lZGlhQ29tcG9uZW50cy9yZXMvdmFsdWVzLXN3NzIwZHAvZGltZW5zLnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDI0ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9InV0Zi04Ij8+Ci08IS0tIENvcHlyaWdodCAyMDE4IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKLQotICAgICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKLSAgICAgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgotICAgICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLQotICAgICAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotCi0gICAgIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKLSAgICAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKLSAgICAgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCi0gICAgIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKLSAgICAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCi0tLT4KLQotPHJlc291cmNlcz4KLSAgICA8IS0tIFRoZSBwbGF0Zm9ybSdzIGRlc2lyZWQgZml4ZWQgd2lkdGggZm9yIGEgZGlhbG9nIGFsb25nIHRoZSBtYWpvciBheGlzCi0gICAgICAgICAodGhlIHNjcmVlbiBpcyBpbiBsYW5kc2NhcGUpLiBUaGlzIG1heSBiZSBlaXRoZXIgYSBmcmFjdGlvbiBvciBhIGRpbWVuc2lvbi4tLT4KLSAgICA8aXRlbSB0eXBlPSJkaW1lbiIgbmFtZT0ibXJfZGlhbG9nX2ZpeGVkX3dpZHRoX21ham9yIj41MCU8L2l0ZW0+Ci0gICAgPCEtLSBUaGUgcGxhdGZvcm0ncyBkZXNpcmVkIGZpeGVkIHdpZHRoIGZvciBhIGRpYWxvZyBhbG9uZyB0aGUgbWlub3IgYXhpcwotICAgICAgICAgKHRoZSBzY3JlZW4gaXMgaW4gcG9ydHJhaXQpLiBUaGlzIG1heSBiZSBlaXRoZXIgYSBmcmFjdGlvbiBvciBhIGRpbWVuc2lvbi4tLT4KLSAgICA8aXRlbSB0eXBlPSJkaW1lbiIgbmFtZT0ibXJfZGlhbG9nX2ZpeGVkX3dpZHRoX21pbm9yIj43MCU8L2l0ZW0+Ci08L3Jlc291cmNlcz4KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL01lZGlhQ29tcG9uZW50cy9yZXMvdmFsdWVzLXRhL3N0cmluZ3MueG1sIGIvcGFja2FnZXMvTWVkaWFDb21wb25lbnRzL3Jlcy92YWx1ZXMtdGEvc3RyaW5ncy54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGUxOTc4ZjMuLjAwMDAwMDAKLS0tIGEvcGFja2FnZXMvTWVkaWFDb21wb25lbnRzL3Jlcy92YWx1ZXMtdGEvc3RyaW5ncy54bWwKKysrIC9kZXYvbnVsbApAQCAtMSw0MCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPCEtLSAgQ29weXJpZ2h0IDIwMTggVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAotCi0gICAgIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwotICAgICB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCi0gICAgIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotCi0gICAgICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0KLSAgICAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQotICAgICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAotICAgICBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KLSAgICAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAotICAgICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KLSAtLT4KLQotPHJlc291cmNlcyB4bWxuczphbmRyb2lkPSJodHRwOi8vc2NoZW1hcy5hbmRyb2lkLmNvbS9hcGsvcmVzL2FuZHJvaWQiCi0gICAgeG1sbnM6eGxpZmY9InVybjpvYXNpczpuYW1lczp0Yzp4bGlmZjpkb2N1bWVudDoxLjIiPgotICAgIDxzdHJpbmcgbmFtZT0ibXJfc3lzdGVtX3JvdXRlX25hbWUiIG1zZ2lkPSI1NDQxNTI5ODUxNDgxMTc2ODE3Ij4i4K6a4K6/4K644K+N4K6f4K6u4K+NIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibXJfdXNlcl9yb3V0ZV9jYXRlZ29yeV9uYW1lIiBtc2dpZD0iNzQ5ODExMjkwNzUyNDk3NzMxMSI+IuCumuCuvuCupOCuqeCumeCvjeCuleCus+CvjSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im1yX2J1dHRvbl9jb250ZW50X2Rlc2NyaXB0aW9uIiBtc2dpZD0iMzY5ODM3ODA4NTkwMTQ2NjEyOSI+IuCupOCuv+CusOCviOCur+Cuv+Cun+CvgSDgrqrgrp/gr43grp/grqngr40iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJtcl9jYXN0X2J1dHRvbl9kaXNjb25uZWN0ZWQiIG1zZ2lkPSI4MTYzMDU0OTA0Mjc4MTkyNDAiPiLgroXgrqngr4Hgrqrgr43grqrgr4HgrqTgrrLgr40g4K6q4K+K4K6k4K+N4K6k4K6+4K6p4K+NLiDgrqTgr4HgrqPgr43grp/grr/grpXgr43grpXgrqrgr43grqrgrp/gr43grp/grqTgr4EiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJtcl9jYXN0X2J1dHRvbl9jb25uZWN0aW5nIiBtc2dpZD0iMjE4NzY0Mjc2NTA5MTg3MzgzNCI+IuCuheCuqeCvgeCuquCvjeCuquCvgeCupOCusuCvjSDgrqrgr4rgrqTgr43grqTgrr7grqngr40uIOCuh+Cuo+CviOCuleCvjeCuleCuv+CuseCupOCvgSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im1yX2Nhc3RfYnV0dG9uX2Nvbm5lY3RlZCIgbXNnaWQ9IjUwODg0Mjc3NzE3ODg2NDgwODUiPiLgroXgrqngr4Hgrqrgr43grqrgr4HgrqTgrrLgr40g4K6q4K+K4K6k4K+N4K6k4K6+4K6p4K+NLiDgrofgrqPgr4jgrpXgr43grpXgrqrgr43grqrgrp/gr43grp/grqTgr4EiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJtcl9jaG9vc2VyX3RpdGxlIiBtc2dpZD0iNDE0MzAxOTQxNTQ2MTM1OTkwIj4i4K6H4K6k4K6x4K+N4K6V4K+BIOCuheCuqeCvgeCuquCvjeCuquCvgSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im1yX2Nob29zZXJfc2VhcmNoaW5nIiBtc2dpZD0iNjM0OTkwMDU3OTUwNzUyMTk1NiI+IuCumuCuvuCupOCuqeCumeCvjeCuleCus+CviOCupOCvjSDgrqTgr4fgrp/gr4HgrpXgrr/grrHgrqTgr4EiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJtcl9jb250cm9sbGVyX2Rpc2Nvbm5lY3QiIG1zZ2lkPSIxMjI3MjY0ODg5NDEyOTg5NTgwIj4i4K6k4K+K4K6f4K6w4K+N4K6q4K+I4K6k4K+NIOCupOCvgeCuo+CvjeCun+CuvyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im1yX2NvbnRyb2xsZXJfc3RvcF9jYXN0aW5nIiBtc2dpZD0iODg1Nzg4Njc5NDA4NjU4MzIyNiI+IuCuheCuqeCvgeCuquCvjeCuquCvgeCuteCupOCviCDgrqjgrr/grrHgr4HgrqTgr43grqTgr4EiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJtcl9jb250cm9sbGVyX2Nsb3NlX2Rlc2NyaXB0aW9uIiBtc2dpZD0iNzMzMzg2MjMxMjQ4MDU4MzI2MCI+IuCuruCvguCun+CvgeCuruCvjSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im1yX2NvbnRyb2xsZXJfcGxheSIgbXNnaWQ9IjY4MzYzNDU2NTk2OTk4NzQ1OCI+IuCuh+Cur+CuleCvjeCuleCvgeCuruCvjSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im1yX2NvbnRyb2xsZXJfcGF1c2UiIG1zZ2lkPSI1NDUxODg0NDM1NTEwOTA1NDA2Ij4i4K6H4K6f4K+I4K6o4K6/4K6x4K+B4K6k4K+N4K6k4K+B4K6u4K+NIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibXJfY29udHJvbGxlcl9zdG9wIiBtc2dpZD0iNzM1ODc0NjQxOTIxNDI1MTIzIj4i4K6o4K6/4K6x4K+B4K6k4K+N4K6k4K+B4K614K6k4K6x4K+N4K6V4K6+4K6pIOCuquCviuCupOCvjeCupOCuvuCuqeCvjSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im1yX2NvbnRyb2xsZXJfZXhwYW5kX2dyb3VwIiBtc2dpZD0iODA2MjQyNzAyMjc0NDI2NjkwNyI+IuCuteCuv+CusOCuv+CuteCuvuCuleCvjeCuleCvgSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im1yX2NvbnRyb2xsZXJfY29sbGFwc2VfZ3JvdXAiIG1zZ2lkPSI3OTI0ODA5MDU2OTA0MjQwOTI2Ij4i4K6a4K+B4K6w4K+B4K6V4K+N4K6V4K+BIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibXJfY29udHJvbGxlcl9hbGJ1bV9hcnQiIG1zZ2lkPSI2NDIyODAxODQzNTQwNTQzNTg1Ij4i4K6G4K6y4K+N4K6q4K6u4K+NIOCuhuCusOCvjeCun+CvjSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im1yX2NvbnRyb2xsZXJfdm9sdW1lX3NsaWRlciIgbXNnaWQ9IjIzNjE3ODU5OTIyMTE4NDE3MDkiPiLgrpLgrrLgrr/grq/grrPgrrXgr4Eg4K644K+N4K6y4K+I4K6f4K6w4K+NIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibXJfY29udHJvbGxlcl9ub19tZWRpYV9zZWxlY3RlZCIgbXNnaWQ9IjY1NDcxMzAzNjAzNDkxODIzODEiPiLgrq7gr4Dgrp/grr/grq/grr4g4K6O4K6k4K+B4K614K+B4K6u4K+NIOCupOCvh+CusOCvjeCuqOCvjeCupOCvhuCun+CvgeCuleCvjeCuleCuquCvjeCuquCun+CuteCuv+CusuCvjeCusuCviCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im1yX2NvbnRyb2xsZXJfbm9faW5mb19hdmFpbGFibGUiIG1zZ2lkPSI1NTg1NDE4NDcxNzQxMTQyOTI0Ij4i4K6k4K6V4K614K6y4K+NIOCujuCupOCvgeCuteCvgeCuruCuv+CusuCvjeCusuCviCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im1yX2NvbnRyb2xsZXJfY2FzdGluZ19zY3JlZW4iIG1zZ2lkPSI0ODY4NDU3OTU3MTUxMTI0ODY3Ij4i4K6k4K6/4K6w4K+I4K6v4K+IIOCuheCuqeCvgeCuquCvjeCuquCvgeCuleCuv+CuseCvgOCusOCvjeCuleCus+CvjSI8L3N0cmluZz4KLTwvcmVzb3VyY2VzPgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvTWVkaWFDb21wb25lbnRzL3Jlcy92YWx1ZXMtdGUvc3RyaW5ncy54bWwgYi9wYWNrYWdlcy9NZWRpYUNvbXBvbmVudHMvcmVzL3ZhbHVlcy10ZS9zdHJpbmdzLnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggN2QzMTJlMy4uMDAwMDAwMAotLS0gYS9wYWNrYWdlcy9NZWRpYUNvbXBvbmVudHMvcmVzL3ZhbHVlcy10ZS9zdHJpbmdzLnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDQwICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08IS0tICBDb3B5cmlnaHQgMjAxOCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0Ci0KLSAgICAgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7Ci0gICAgIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KLSAgICAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0KLSAgICAgICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLQotICAgICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCi0gICAgIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCi0gICAgIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgotICAgICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCi0gICAgIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgotIC0tPgotCi08cmVzb3VyY2VzIHhtbG5zOmFuZHJvaWQ9Imh0dHA6Ly9zY2hlbWFzLmFuZHJvaWQuY29tL2Fway9yZXMvYW5kcm9pZCIKLSAgICB4bWxuczp4bGlmZj0idXJuOm9hc2lzOm5hbWVzOnRjOnhsaWZmOmRvY3VtZW50OjEuMiI+Ci0gICAgPHN0cmluZyBuYW1lPSJtcl9zeXN0ZW1fcm91dGVfbmFtZSIgbXNnaWQ9IjU0NDE1Mjk4NTE0ODExNzY4MTciPiLgsLjgsL/gsLjgsY3gsJ/gsK7gsY0iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJtcl91c2VyX3JvdXRlX2NhdGVnb3J5X25hbWUiIG1zZ2lkPSI3NDk4MTEyOTA3NTI0OTc3MzExIj4i4LCq4LCw4LC/4LCV4LCw4LC+4LCy4LGBIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibXJfYnV0dG9uX2NvbnRlbnRfZGVzY3JpcHRpb24iIG1zZ2lkPSIzNjk4Mzc4MDg1OTAxNDY2MTI5Ij4i4LCq4LGN4LCw4LC44LC+4LCw4LCCIOCwmuCxh+Cwr+CwvyDgsKzgsJ/gsKjgsY0iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJtcl9jYXN0X2J1dHRvbl9kaXNjb25uZWN0ZWQiIG1zZ2lkPSI4MTYzMDU0OTA0Mjc4MTkyNDAiPiLgsKrgsY3gsLDgsLjgsL7gsLAg4LCs4LCf4LCo4LGNLiDgsKHgsL/gsLjgsY3igIzgsJXgsKjgsYbgsJXgsY3gsJ/gsY0g4LCa4LGH4LCv4LCs4LCh4LC/4LCC4LCm4LC/Ijwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibXJfY2FzdF9idXR0b25fY29ubmVjdGluZyIgbXNnaWQ9IjIxODc2NDI3NjUwOTE4NzM4MzQiPiLgsKrgsY3gsLDgsLjgsL7gsLAg4LCs4LCf4LCo4LGNLiDgsJXgsKjgsYbgsJXgsY3gsJ/gsY0g4LCa4LGH4LC44LGN4LCk4LGL4LCC4LCm4LC/Ijwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibXJfY2FzdF9idXR0b25fY29ubmVjdGVkIiBtc2dpZD0iNTA4ODQyNzc3MTc4ODY0ODA4NSI+IuCwquCxjeCwsOCwuOCwvuCwsCDgsKzgsJ/gsKjgsY0uIOCwleCwqOCxhuCwleCxjeCwn+CxjSDgsJrgsYfgsK/gsKzgsKHgsL/gsILgsKbgsL8iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJtcl9jaG9vc2VyX3RpdGxlIiBtc2dpZD0iNDE0MzAxOTQxNTQ2MTM1OTkwIj4i4LCm4LGA4LCo4LC/4LCV4LC/IOCwquCxjeCwsOCwuOCwvuCwsOCwgiDgsJrgsYfgsK/gsILgsKHgsL8iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJtcl9jaG9vc2VyX3NlYXJjaGluZyIgbXNnaWQ9IjYzNDk5MDA1Nzk1MDc1MjE5NTYiPiLgsKrgsLDgsL/gsJXgsLDgsL7gsLLgsKjgsYEg4LCV4LCo4LGB4LCX4LGK4LCC4LCf4LGL4LCC4LCm4LC/Ijwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibXJfY29udHJvbGxlcl9kaXNjb25uZWN0IiBtc2dpZD0iMTIyNzI2NDg4OTQxMjk4OTU4MCI+IuCwoeCwv+CwuOCxjeKAjOCwleCwqOCxhuCwleCxjeCwn+CxjSDgsJrgsYfgsK/gsL8iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJtcl9jb250cm9sbGVyX3N0b3BfY2FzdGluZyIgbXNnaWQ9Ijg4NTc4ODY3OTQwODY1ODMyMjYiPiLgsKrgsY3gsLDgsLjgsL7gsLDgsL7gsKjgsY3gsKjgsL8g4LCG4LCq4LC/4LC14LGH4LCv4LC/Ijwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibXJfY29udHJvbGxlcl9jbG9zZV9kZXNjcmlwdGlvbiIgbXNnaWQ9IjczMzM4NjIzMTI0ODA1ODMyNjAiPiLgsK7gsYLgsLjgsL/gsLXgsYfgsLjgsY3gsKTgsYHgsILgsKbgsL8iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJtcl9jb250cm9sbGVyX3BsYXkiIG1zZ2lkPSI2ODM2MzQ1NjU5Njk5ODc0NTgiPiLgsKrgsY3gsLLgsYcg4LCa4LGH4LC44LGN4LCk4LGB4LCC4LCm4LC/Ijwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibXJfY29udHJvbGxlcl9wYXVzZSIgbXNnaWQ9IjU0NTE4ODQ0MzU1MTA5MDU0MDYiPiLgsKrgsL7gsJzgsY0g4LCa4LGH4LC44LGN4LCk4LGB4LCC4LCm4LC/Ijwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibXJfY29udHJvbGxlcl9zdG9wIiBtc2dpZD0iNzM1ODc0NjQxOTIxNDI1MTIzIj4i4LCG4LCq4LC/4LC14LGH4LCv4LC/Ijwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibXJfY29udHJvbGxlcl9leHBhbmRfZ3JvdXAiIG1zZ2lkPSI4MDYyNDI3MDIyNzQ0MjY2OTA3Ij4i4LC14LC/4LC44LGN4LCk4LCw4LC/4LCC4LCq4LCc4LGH4LC44LGN4LCk4LGB4LCC4LCm4LC/Ijwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibXJfY29udHJvbGxlcl9jb2xsYXBzZV9ncm91cCIgbXNnaWQ9Ijc5MjQ4MDkwNTY5MDQyNDA5MjYiPiLgsJXgsYHgsKbgsL/gsLjgsY3gsKTgsYHgsILgsKbgsL8iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJtcl9jb250cm9sbGVyX2FsYnVtX2FydCIgbXNnaWQ9IjY0MjI4MDE4NDM1NDA1NDM1ODUiPiLgsIbgsLLgsY3gsKzgsK7gsY0g4LCG4LCw4LGN4LCf4LGNIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibXJfY29udHJvbGxlcl92b2x1bWVfc2xpZGVyIiBtc2dpZD0iMjM2MTc4NTk5MjIxMTg0MTcwOSI+IuCwteCwvuCwsuCxjeCwr+CxguCwruCxjSDgsLjgsY3gsLLgsK/gsL/gsKHgsLDgsY0iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJtcl9jb250cm9sbGVyX25vX21lZGlhX3NlbGVjdGVkIiBtc2dpZD0iNjU0NzEzMDM2MDM0OTE4MjM4MSI+IuCwruCxgOCwoeCwv+Cwr+CwviDgsI/gsKbgsYAg4LCO4LCC4LCa4LGB4LCV4LGL4LCs4LCh4LCy4LGH4LCm4LGBIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibXJfY29udHJvbGxlcl9ub19pbmZvX2F2YWlsYWJsZSIgbXNnaWQ9IjU1ODU0MTg0NzE3NDExNDI5MjQiPiLgsLjgsK7gsL7gsJrgsL7gsLDgsIIg4LCF4LCC4LCm4LGB4LCs4LC+4LCf4LGB4LCy4LGLIOCwsuCxh+CwpuCxgSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im1yX2NvbnRyb2xsZXJfY2FzdGluZ19zY3JlZW4iIG1zZ2lkPSI0ODY4NDU3OTU3MTUxMTI0ODY3Ij4i4LC44LGN4LCV4LGN4LCw4LGA4LCo4LGN4oCM4LCo4LGBIOCwquCxjeCwsOCwuOCwvuCwsOCwgiDgsJrgsYfgsLjgsY3gsKTgsYvgsILgsKbgsL8iPC9zdHJpbmc+Ci08L3Jlc291cmNlcz4KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL01lZGlhQ29tcG9uZW50cy9yZXMvdmFsdWVzLXRoL3N0cmluZ3MueG1sIGIvcGFja2FnZXMvTWVkaWFDb21wb25lbnRzL3Jlcy92YWx1ZXMtdGgvc3RyaW5ncy54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGNmYThhZTUuLjAwMDAwMDAKLS0tIGEvcGFja2FnZXMvTWVkaWFDb21wb25lbnRzL3Jlcy92YWx1ZXMtdGgvc3RyaW5ncy54bWwKKysrIC9kZXYvbnVsbApAQCAtMSw0MCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPCEtLSAgQ29weXJpZ2h0IDIwMTggVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAotCi0gICAgIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwotICAgICB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCi0gICAgIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotCi0gICAgICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0KLSAgICAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQotICAgICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAotICAgICBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KLSAgICAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAotICAgICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KLSAtLT4KLQotPHJlc291cmNlcyB4bWxuczphbmRyb2lkPSJodHRwOi8vc2NoZW1hcy5hbmRyb2lkLmNvbS9hcGsvcmVzL2FuZHJvaWQiCi0gICAgeG1sbnM6eGxpZmY9InVybjpvYXNpczpuYW1lczp0Yzp4bGlmZjpkb2N1bWVudDoxLjIiPgotICAgIDxzdHJpbmcgbmFtZT0ibXJfc3lzdGVtX3JvdXRlX25hbWUiIG1zZ2lkPSI1NDQxNTI5ODUxNDgxMTc2ODE3Ij4i4Lij4Liw4Lia4LiaIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibXJfdXNlcl9yb3V0ZV9jYXRlZ29yeV9uYW1lIiBtc2dpZD0iNzQ5ODExMjkwNzUyNDk3NzMxMSI+IuC4reC4uOC4m+C4geC4o+C4k+C5jCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im1yX2J1dHRvbl9jb250ZW50X2Rlc2NyaXB0aW9uIiBtc2dpZD0iMzY5ODM3ODA4NTkwMTQ2NjEyOSI+IuC4m+C4uOC5iOC4oSBcIuC5geC4hOC4quC4leC5jFwiIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibXJfY2FzdF9idXR0b25fZGlzY29ubmVjdGVkIiBtc2dpZD0iODE2MzA1NDkwNDI3ODE5MjQwIj4i4Lib4Li44LmI4LihIFwi4LmB4LiE4Liq4LiV4LmMXCIg4Lii4LiB4LmA4Lil4Li04LiB4LiB4Liy4Lij4LmA4LiK4Li34LmI4Lit4Lih4LiV4LmI4LitIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibXJfY2FzdF9idXR0b25fY29ubmVjdGluZyIgbXNnaWQ9IjIxODc2NDI3NjUwOTE4NzM4MzQiPiLguJvguLjguYjguKEgXCLguYHguITguKrguJXguYxcIiDguIHguLPguKXguLHguIfguYDguIrguLfguYjguK3guKHguJXguYjguK0iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJtcl9jYXN0X2J1dHRvbl9jb25uZWN0ZWQiIG1zZ2lkPSI1MDg4NDI3NzcxNzg4NjQ4MDg1Ij4i4Lib4Li44LmI4LihIFwi4LmB4LiE4Liq4LiV4LmMXCIg4LmA4LiK4Li34LmI4Lit4Lih4LiV4LmI4Lit4LmB4Lil4LmJ4LinIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibXJfY2hvb3Nlcl90aXRsZSIgbXNnaWQ9IjQxNDMwMTk0MTU0NjEzNTk5MCI+IuC5geC4hOC4quC4leC5jOC5hOC4m+C4ouC4seC4hyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im1yX2Nob29zZXJfc2VhcmNoaW5nIiBtc2dpZD0iNjM0OTkwMDU3OTUwNzUyMTk1NiI+IuC4geC4s+C4peC4seC4h+C4hOC5ieC4meC4q+C4suC4reC4uOC4m+C4geC4o+C4k+C5jCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im1yX2NvbnRyb2xsZXJfZGlzY29ubmVjdCIgbXNnaWQ9IjEyMjcyNjQ4ODk0MTI5ODk1ODAiPiLguKLguIHguYDguKXguLTguIHguIHguLLguKPguYDguIrguLfguYjguK3guKHguJXguYjguK0iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJtcl9jb250cm9sbGVyX3N0b3BfY2FzdGluZyIgbXNnaWQ9Ijg4NTc4ODY3OTQwODY1ODMyMjYiPiLguKvguKLguLjguJTguYHguITguKrguJXguYwiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJtcl9jb250cm9sbGVyX2Nsb3NlX2Rlc2NyaXB0aW9uIiBtc2dpZD0iNzMzMzg2MjMxMjQ4MDU4MzI2MCI+IuC4m+C4tOC4lCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im1yX2NvbnRyb2xsZXJfcGxheSIgbXNnaWQ9IjY4MzYzNDU2NTk2OTk4NzQ1OCI+IuC5gOC4peC5iOC4mSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im1yX2NvbnRyb2xsZXJfcGF1c2UiIG1zZ2lkPSI1NDUxODg0NDM1NTEwOTA1NDA2Ij4i4Lir4Lii4Li44LiU4LiK4Lix4LmI4Lin4LiE4Lij4Liy4LinIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibXJfY29udHJvbGxlcl9zdG9wIiBtc2dpZD0iNzM1ODc0NjQxOTIxNDI1MTIzIj4i4Lir4Lii4Li44LiUIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibXJfY29udHJvbGxlcl9leHBhbmRfZ3JvdXAiIG1zZ2lkPSI4MDYyNDI3MDIyNzQ0MjY2OTA3Ij4i4LiC4Lii4Liy4LiiIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibXJfY29udHJvbGxlcl9jb2xsYXBzZV9ncm91cCIgbXNnaWQ9Ijc5MjQ4MDkwNTY5MDQyNDA5MjYiPiLguKLguLjguJoiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJtcl9jb250cm9sbGVyX2FsYnVtX2FydCIgbXNnaWQ9IjY0MjI4MDE4NDM1NDA1NDM1ODUiPiLguJvguIHguK3guLHguKXguJrguLHguYnguKEiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJtcl9jb250cm9sbGVyX3ZvbHVtZV9zbGlkZXIiIG1zZ2lkPSIyMzYxNzg1OTkyMjExODQxNzA5Ij4i4LmB4LiW4Lia4LmA4Lil4Li34LmI4Lit4LiZ4Lib4Lij4Lix4Lia4Lij4Liw4LiU4Lix4Lia4LmA4Liq4Li14Lii4LiHIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibXJfY29udHJvbGxlcl9ub19tZWRpYV9zZWxlY3RlZCIgbXNnaWQ9IjY1NDcxMzAzNjAzNDkxODIzODEiPiLguYTguKHguYjguYTguJTguYnguYDguKXguLfguK3guIHguKrguLfguYjguK3guYTguKfguYkiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJtcl9jb250cm9sbGVyX25vX2luZm9fYXZhaWxhYmxlIiBtc2dpZD0iNTU4NTQxODQ3MTc0MTE0MjkyNCI+IuC5hOC4oeC5iOC4oeC4teC4guC5ieC4reC4oeC4ueC4pSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im1yX2NvbnRyb2xsZXJfY2FzdGluZ19zY3JlZW4iIG1zZ2lkPSI0ODY4NDU3OTU3MTUxMTI0ODY3Ij4i4LiB4Liz4Lil4Lix4LiH4LmB4LiE4Liq4LiV4LmM4Lir4LiZ4LmJ4Liy4LiI4LitIjwvc3RyaW5nPgotPC9yZXNvdXJjZXM+CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9NZWRpYUNvbXBvbmVudHMvcmVzL3ZhbHVlcy10bC9zdHJpbmdzLnhtbCBiL3BhY2thZ2VzL01lZGlhQ29tcG9uZW50cy9yZXMvdmFsdWVzLXRsL3N0cmluZ3MueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhOGJlM2QwLi4wMDAwMDAwCi0tLSBhL3BhY2thZ2VzL01lZGlhQ29tcG9uZW50cy9yZXMvdmFsdWVzLXRsL3N0cmluZ3MueG1sCisrKyAvZGV2L251bGwKQEAgLTEsNDAgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTwhLS0gIENvcHlyaWdodCAyMDE4IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKLQotICAgICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKLSAgICAgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgotICAgICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLQotICAgICAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotCi0gICAgIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKLSAgICAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKLSAgICAgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCi0gICAgIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKLSAgICAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCi0gLS0+Ci0KLTxyZXNvdXJjZXMgeG1sbnM6YW5kcm9pZD0iaHR0cDovL3NjaGVtYXMuYW5kcm9pZC5jb20vYXBrL3Jlcy9hbmRyb2lkIgotICAgIHhtbG5zOnhsaWZmPSJ1cm46b2FzaXM6bmFtZXM6dGM6eGxpZmY6ZG9jdW1lbnQ6MS4yIj4KLSAgICA8c3RyaW5nIG5hbWU9Im1yX3N5c3RlbV9yb3V0ZV9uYW1lIiBtc2dpZD0iNTQ0MTUyOTg1MTQ4MTE3NjgxNyI+IlN5c3RlbSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im1yX3VzZXJfcm91dGVfY2F0ZWdvcnlfbmFtZSIgbXNnaWQ9Ijc0OTgxMTI5MDc1MjQ5NzczMTEiPiJNZ2EgRGV2aWNlIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibXJfYnV0dG9uX2NvbnRlbnRfZGVzY3JpcHRpb24iIG1zZ2lkPSIzNjk4Mzc4MDg1OTAxNDY2MTI5Ij4iQnV0dG9uIG5hIEktY2FzdCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im1yX2Nhc3RfYnV0dG9uX2Rpc2Nvbm5lY3RlZCIgbXNnaWQ9IjgxNjMwNTQ5MDQyNzgxOTI0MCI+IkJ1dHRvbiBuYSBJLWNhc3QuIE5hZGlza29uZWt0YSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im1yX2Nhc3RfYnV0dG9uX2Nvbm5lY3RpbmciIG1zZ2lkPSIyMTg3NjQyNzY1MDkxODczODM0Ij4iQnV0dG9uIG5hIEktY2FzdC4gS3Vtb2tvbmVrdGEiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJtcl9jYXN0X2J1dHRvbl9jb25uZWN0ZWQiIG1zZ2lkPSI1MDg4NDI3NzcxNzg4NjQ4MDg1Ij4iQnV0dG9uIG5hIEktY2FzdC4gTmFrYWtvbmVrdGEiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJtcl9jaG9vc2VyX3RpdGxlIiBtc2dpZD0iNDE0MzAxOTQxNTQ2MTM1OTkwIj4iSS1jYXN0IHNhIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibXJfY2hvb3Nlcl9zZWFyY2hpbmciIG1zZ2lkPSI2MzQ5OTAwNTc5NTA3NTIxOTU2Ij4iTmFnaGFoYW5hcCBuZyBtZ2EgZGV2aWNlIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibXJfY29udHJvbGxlcl9kaXNjb25uZWN0IiBtc2dpZD0iMTIyNzI2NDg4OTQxMjk4OTU4MCI+IklkaXNrb25la3RhIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibXJfY29udHJvbGxlcl9zdG9wX2Nhc3RpbmciIG1zZ2lkPSI4ODU3ODg2Nzk0MDg2NTgzMjI2Ij4iSWhpbnRvIGFuZyBwYWctY2FzdCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im1yX2NvbnRyb2xsZXJfY2xvc2VfZGVzY3JpcHRpb24iIG1zZ2lkPSI3MzMzODYyMzEyNDgwNTgzMjYwIj4iSXNhcmEiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJtcl9jb250cm9sbGVyX3BsYXkiIG1zZ2lkPSI2ODM2MzQ1NjU5Njk5ODc0NTgiPiJJLXBsYXkiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJtcl9jb250cm9sbGVyX3BhdXNlIiBtc2dpZD0iNTQ1MTg4NDQzNTUxMDkwNTQwNiI+IkktcGF1c2UiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJtcl9jb250cm9sbGVyX3N0b3AiIG1zZ2lkPSI3MzU4NzQ2NDE5MjE0MjUxMjMiPiJJaGludG8iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJtcl9jb250cm9sbGVyX2V4cGFuZF9ncm91cCIgbXNnaWQ9IjgwNjI0MjcwMjI3NDQyNjY5MDciPiJQYWxhd2FraW4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJtcl9jb250cm9sbGVyX2NvbGxhcHNlX2dyb3VwIiBtc2dpZD0iNzkyNDgwOTA1NjkwNDI0MDkyNiI+IkktY29sbGFwc2UiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJtcl9jb250cm9sbGVyX2FsYnVtX2FydCIgbXNnaWQ9IjY0MjI4MDE4NDM1NDA1NDM1ODUiPiJBbGJ1bSBhcnQiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJtcl9jb250cm9sbGVyX3ZvbHVtZV9zbGlkZXIiIG1zZ2lkPSIyMzYxNzg1OTkyMjExODQxNzA5Ij4iU2xpZGVyIG5nIHZvbHVtZSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im1yX2NvbnRyb2xsZXJfbm9fbWVkaWFfc2VsZWN0ZWQiIG1zZ2lkPSI2NTQ3MTMwMzYwMzQ5MTgyMzgxIj4iV2FsYW5nIHBpbmlsaW5nIG1lZGlhIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibXJfY29udHJvbGxlcl9ub19pbmZvX2F2YWlsYWJsZSIgbXNnaWQ9IjU1ODU0MTg0NzE3NDExNDI5MjQiPiJXYWxhbmcgYXZhaWxhYmxlIG5hIGltcG9ybWFzeW9uIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibXJfY29udHJvbGxlcl9jYXN0aW5nX3NjcmVlbiIgbXNnaWQ9IjQ4Njg0NTc5NTcxNTExMjQ4NjciPiJLaW5hLWNhc3QgYW5nIHNjcmVlbiI8L3N0cmluZz4KLTwvcmVzb3VyY2VzPgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvTWVkaWFDb21wb25lbnRzL3Jlcy92YWx1ZXMtdHIvc3RyaW5ncy54bWwgYi9wYWNrYWdlcy9NZWRpYUNvbXBvbmVudHMvcmVzL3ZhbHVlcy10ci9zdHJpbmdzLnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDVmNjM5Mi4uMDAwMDAwMAotLS0gYS9wYWNrYWdlcy9NZWRpYUNvbXBvbmVudHMvcmVzL3ZhbHVlcy10ci9zdHJpbmdzLnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDQwICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08IS0tICBDb3B5cmlnaHQgMjAxOCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0Ci0KLSAgICAgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7Ci0gICAgIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KLSAgICAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0KLSAgICAgICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLQotICAgICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCi0gICAgIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCi0gICAgIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgotICAgICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCi0gICAgIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgotIC0tPgotCi08cmVzb3VyY2VzIHhtbG5zOmFuZHJvaWQ9Imh0dHA6Ly9zY2hlbWFzLmFuZHJvaWQuY29tL2Fway9yZXMvYW5kcm9pZCIKLSAgICB4bWxuczp4bGlmZj0idXJuOm9hc2lzOm5hbWVzOnRjOnhsaWZmOmRvY3VtZW50OjEuMiI+Ci0gICAgPHN0cmluZyBuYW1lPSJtcl9zeXN0ZW1fcm91dGVfbmFtZSIgbXNnaWQ9IjU0NDE1Mjk4NTE0ODExNzY4MTciPiJTaXN0ZW0iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJtcl91c2VyX3JvdXRlX2NhdGVnb3J5X25hbWUiIG1zZ2lkPSI3NDk4MTEyOTA3NTI0OTc3MzExIj4iQ2loYXpsYXIiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJtcl9idXR0b25fY29udGVudF9kZXNjcmlwdGlvbiIgbXNnaWQ9IjM2OTgzNzgwODU5MDE0NjYxMjkiPiJZYXnEsW5sYSBkw7zEn21lc2kiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJtcl9jYXN0X2J1dHRvbl9kaXNjb25uZWN0ZWQiIG1zZ2lkPSI4MTYzMDU0OTA0Mjc4MTkyNDAiPiJZYXnEsW5sYSBkw7zEn21lc2kuIEJhxJ9sYW50xLEga2VzaWxkaSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im1yX2Nhc3RfYnV0dG9uX2Nvbm5lY3RpbmciIG1zZ2lkPSIyMTg3NjQyNzY1MDkxODczODM0Ij4iWWF5xLFubGEgZMO8xJ9tZXNpLiBCYcSfbGFuxLF5b3IiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJtcl9jYXN0X2J1dHRvbl9jb25uZWN0ZWQiIG1zZ2lkPSI1MDg4NDI3NzcxNzg4NjQ4MDg1Ij4iWWF5xLFubGEgZMO8xJ9tZXNpLiBCYcSfbGFuZMSxIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibXJfY2hvb3Nlcl90aXRsZSIgbXNnaWQ9IjQxNDMwMTk0MTU0NjEzNTk5MCI+IsWedXJheWEgeWF5xLFubGE6Ijwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibXJfY2hvb3Nlcl9zZWFyY2hpbmciIG1zZ2lkPSI2MzQ5OTAwNTc5NTA3NTIxOTU2Ij4iQ2loYXpsYXIgYnVsdW51eW9yIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibXJfY29udHJvbGxlcl9kaXNjb25uZWN0IiBtc2dpZD0iMTIyNzI2NDg4OTQxMjk4OTU4MCI+IkJhxJ9sYW50xLF5xLEga2VzIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibXJfY29udHJvbGxlcl9zdG9wX2Nhc3RpbmciIG1zZ2lkPSI4ODU3ODg2Nzk0MDg2NTgzMjI2Ij4iWWF5xLFuxLEgZHVyZHVyIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibXJfY29udHJvbGxlcl9jbG9zZV9kZXNjcmlwdGlvbiIgbXNnaWQ9IjczMzM4NjIzMTI0ODA1ODMyNjAiPiJLYXBhdCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im1yX2NvbnRyb2xsZXJfcGxheSIgbXNnaWQ9IjY4MzYzNDU2NTk2OTk4NzQ1OCI+Ik95bmF0Ijwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibXJfY29udHJvbGxlcl9wYXVzZSIgbXNnaWQ9IjU0NTE4ODQ0MzU1MTA5MDU0MDYiPiJEdXJha2xhdCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im1yX2NvbnRyb2xsZXJfc3RvcCIgbXNnaWQ9IjczNTg3NDY0MTkyMTQyNTEyMyI+IkR1cmR1ciI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im1yX2NvbnRyb2xsZXJfZXhwYW5kX2dyb3VwIiBtc2dpZD0iODA2MjQyNzAyMjc0NDI2NjkwNyI+IkdlbmnFn2xldCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im1yX2NvbnRyb2xsZXJfY29sbGFwc2VfZ3JvdXAiIG1zZ2lkPSI3OTI0ODA5MDU2OTA0MjQwOTI2Ij4iRGFyYWx0Ijwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibXJfY29udHJvbGxlcl9hbGJ1bV9hcnQiIG1zZ2lkPSI2NDIyODAxODQzNTQwNTQzNTg1Ij4iQWxiw7xtIGthcGHEn8SxIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibXJfY29udHJvbGxlcl92b2x1bWVfc2xpZGVyIiBtc2dpZD0iMjM2MTc4NTk5MjIxMTg0MTcwOSI+IlNlcyBkw7x6ZXlpIGtheWTEsXJtYSDDp3VidcSfdSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im1yX2NvbnRyb2xsZXJfbm9fbWVkaWFfc2VsZWN0ZWQiIG1zZ2lkPSI2NTQ3MTMwMzYwMzQ5MTgyMzgxIj4iTWVkeWEgc2XDp2lsbWVkaSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im1yX2NvbnRyb2xsZXJfbm9faW5mb19hdmFpbGFibGUiIG1zZ2lkPSI1NTg1NDE4NDcxNzQxMTQyOTI0Ij4iQmlsZ2kgeW9rIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibXJfY29udHJvbGxlcl9jYXN0aW5nX3NjcmVlbiIgbXNnaWQ9IjQ4Njg0NTc5NTcxNTExMjQ4NjciPiJFa3JhbiB5YXnEsW5sYW7EsXlvciI8L3N0cmluZz4KLTwvcmVzb3VyY2VzPgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvTWVkaWFDb21wb25lbnRzL3Jlcy92YWx1ZXMtdWsvc3RyaW5ncy54bWwgYi9wYWNrYWdlcy9NZWRpYUNvbXBvbmVudHMvcmVzL3ZhbHVlcy11ay9zdHJpbmdzLnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzNkMzY1ZS4uMDAwMDAwMAotLS0gYS9wYWNrYWdlcy9NZWRpYUNvbXBvbmVudHMvcmVzL3ZhbHVlcy11ay9zdHJpbmdzLnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDQwICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08IS0tICBDb3B5cmlnaHQgMjAxOCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0Ci0KLSAgICAgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7Ci0gICAgIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KLSAgICAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0KLSAgICAgICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLQotICAgICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCi0gICAgIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCi0gICAgIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgotICAgICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCi0gICAgIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgotIC0tPgotCi08cmVzb3VyY2VzIHhtbG5zOmFuZHJvaWQ9Imh0dHA6Ly9zY2hlbWFzLmFuZHJvaWQuY29tL2Fway9yZXMvYW5kcm9pZCIKLSAgICB4bWxuczp4bGlmZj0idXJuOm9hc2lzOm5hbWVzOnRjOnhsaWZmOmRvY3VtZW50OjEuMiI+Ci0gICAgPHN0cmluZyBuYW1lPSJtcl9zeXN0ZW1fcm91dGVfbmFtZSIgbXNnaWQ9IjU0NDE1Mjk4NTE0ODExNzY4MTciPiLQodC40YHRgtC10LzQsCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im1yX3VzZXJfcm91dGVfY2F0ZWdvcnlfbmFtZSIgbXNnaWQ9Ijc0OTgxMTI5MDc1MjQ5NzczMTEiPiLQn9GA0LjRgdGC0YDQvtGXIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibXJfYnV0dG9uX2NvbnRlbnRfZGVzY3JpcHRpb24iIG1zZ2lkPSIzNjk4Mzc4MDg1OTAxNDY2MTI5Ij4i0JrQvdC+0L/QutCwINGC0YDQsNC90YHQu9GP0YbRltGXIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibXJfY2FzdF9idXR0b25fZGlzY29ubmVjdGVkIiBtc2dpZD0iODE2MzA1NDkwNDI3ODE5MjQwIj4i0JrQvdC+0L/QutCwINGC0YDQsNC90YHQu9GP0YbRltGXLiDQktGW0LTigJnRlNC00L3QsNC90L4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJtcl9jYXN0X2J1dHRvbl9jb25uZWN0aW5nIiBtc2dpZD0iMjE4NzY0Mjc2NTA5MTg3MzgzNCI+ItCa0L3QvtC/0LrQsCDRgtGA0LDQvdGB0LvRj9GG0ZbRly4g0J/RltC04oCZ0ZTQtNC90LDQvdC90Y8iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJtcl9jYXN0X2J1dHRvbl9jb25uZWN0ZWQiIG1zZ2lkPSI1MDg4NDI3NzcxNzg4NjQ4MDg1Ij4i0JrQvdC+0L/QutCwINGC0YDQsNC90YHQu9GP0YbRltGXLiDQn9GW0LTigJnRlNC00L3QsNC90L4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJtcl9jaG9vc2VyX3RpdGxlIiBtc2dpZD0iNDE0MzAxOTQxNTQ2MTM1OTkwIj4i0KLRgNCw0L3RgdC70Y7QstCw0YLQuCDQvdCwIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibXJfY2hvb3Nlcl9zZWFyY2hpbmciIG1zZ2lkPSI2MzQ5OTAwNTc5NTA3NTIxOTU2Ij4i0J/QvtGI0YPQuiDQv9GA0LjRgdGC0YDQvtGX0LIiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJtcl9jb250cm9sbGVyX2Rpc2Nvbm5lY3QiIG1zZ2lkPSIxMjI3MjY0ODg5NDEyOTg5NTgwIj4i0JLRltC00LrQu9GO0YfQuNGC0LgiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJtcl9jb250cm9sbGVyX3N0b3BfY2FzdGluZyIgbXNnaWQ9Ijg4NTc4ODY3OTQwODY1ODMyMjYiPiLQn9GA0LjQv9C40L3QuNGC0Lgg0YLRgNCw0L3RgdC70Y/RhtGW0Y4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJtcl9jb250cm9sbGVyX2Nsb3NlX2Rlc2NyaXB0aW9uIiBtc2dpZD0iNzMzMzg2MjMxMjQ4MDU4MzI2MCI+ItCX0LDQutGA0LjRgtC4Ijwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibXJfY29udHJvbGxlcl9wbGF5IiBtc2dpZD0iNjgzNjM0NTY1OTY5OTg3NDU4Ij4i0JLRltC00YLQstC+0YDQuNGC0LgiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJtcl9jb250cm9sbGVyX3BhdXNlIiBtc2dpZD0iNTQ1MTg4NDQzNTUxMDkwNTQwNiI+ItCf0YDQuNC30YPQv9C40L3QuNGC0LgiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJtcl9jb250cm9sbGVyX3N0b3AiIG1zZ2lkPSI3MzU4NzQ2NDE5MjE0MjUxMjMiPiLQn9GA0LjQv9C40L3QuNGC0LgiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJtcl9jb250cm9sbGVyX2V4cGFuZF9ncm91cCIgbXNnaWQ9IjgwNjI0MjcwMjI3NDQyNjY5MDciPiLQoNC+0LfQs9C+0YDQvdGD0YLQuCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im1yX2NvbnRyb2xsZXJfY29sbGFwc2VfZ3JvdXAiIG1zZ2lkPSI3OTI0ODA5MDU2OTA0MjQwOTI2Ij4i0JfQs9C+0YDQvdGD0YLQuCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im1yX2NvbnRyb2xsZXJfYWxidW1fYXJ0IiBtc2dpZD0iNjQyMjgwMTg0MzU0MDU0MzU4NSI+ItCe0LHQutC70LDQtNC40L3QutCwINCw0LvRjNCx0L7QvNGDIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibXJfY29udHJvbGxlcl92b2x1bWVfc2xpZGVyIiBtc2dpZD0iMjM2MTc4NTk5MjIxMTg0MTcwOSI+ItCf0L7QstC30YPQvdC+0Log0LPRg9GH0L3QvtGB0YLRliI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im1yX2NvbnRyb2xsZXJfbm9fbWVkaWFfc2VsZWN0ZWQiIG1zZ2lkPSI2NTQ3MTMwMzYwMzQ5MTgyMzgxIj4i0JzQtdC00ZbQsC3RhNCw0LnQuyDQvdC1INCy0LjQsdGA0LDQvdC+Ijwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibXJfY29udHJvbGxlcl9ub19pbmZvX2F2YWlsYWJsZSIgbXNnaWQ9IjU1ODU0MTg0NzE3NDExNDI5MjQiPiLQndC10LzQsNGUINC00LDQvdC40YUiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJtcl9jb250cm9sbGVyX2Nhc3Rpbmdfc2NyZWVuIiBtc2dpZD0iNDg2ODQ1Nzk1NzE1MTEyNDg2NyI+ItCi0YDQsNC90YHQu9GP0YbRltGPINC10LrRgNCw0L3QsCI8L3N0cmluZz4KLTwvcmVzb3VyY2VzPgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvTWVkaWFDb21wb25lbnRzL3Jlcy92YWx1ZXMtdXIvc3RyaW5ncy54bWwgYi9wYWNrYWdlcy9NZWRpYUNvbXBvbmVudHMvcmVzL3ZhbHVlcy11ci9zdHJpbmdzLnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjMyYzU5OC4uMDAwMDAwMAotLS0gYS9wYWNrYWdlcy9NZWRpYUNvbXBvbmVudHMvcmVzL3ZhbHVlcy11ci9zdHJpbmdzLnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDQwICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08IS0tICBDb3B5cmlnaHQgMjAxOCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0Ci0KLSAgICAgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7Ci0gICAgIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KLSAgICAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0KLSAgICAgICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLQotICAgICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCi0gICAgIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCi0gICAgIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgotICAgICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCi0gICAgIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgotIC0tPgotCi08cmVzb3VyY2VzIHhtbG5zOmFuZHJvaWQ9Imh0dHA6Ly9zY2hlbWFzLmFuZHJvaWQuY29tL2Fway9yZXMvYW5kcm9pZCIKLSAgICB4bWxuczp4bGlmZj0idXJuOm9hc2lzOm5hbWVzOnRjOnhsaWZmOmRvY3VtZW50OjEuMiI+Ci0gICAgPHN0cmluZyBuYW1lPSJtcl9zeXN0ZW1fcm91dGVfbmFtZSIgbXNnaWQ9IjU0NDE1Mjk4NTE0ODExNzY4MTciPiLYs9iz2bnZhSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im1yX3VzZXJfcm91dGVfY2F0ZWdvcnlfbmFtZSIgbXNnaWQ9Ijc0OTgxMTI5MDc1MjQ5NzczMTEiPiLYotmE2KfYqiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im1yX2J1dHRvbl9jb250ZW50X2Rlc2NyaXB0aW9uIiBtc2dpZD0iMzY5ODM3ODA4NTkwMTQ2NjEyOSI+Itqp2KfYs9m5INqp2LHZhtuSINqp2Kcg2KjZudmGIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibXJfY2FzdF9idXR0b25fZGlzY29ubmVjdGVkIiBtc2dpZD0iODE2MzA1NDkwNDI3ODE5MjQwIj4i2qnYp9iz2bkg2qnYsdmG25Ig2qnYpyDYqNm52YbblCDYutuM2LEg2YXZhtiz2YTaqSDbgduSIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibXJfY2FzdF9idXR0b25fY29ubmVjdGluZyIgbXNnaWQ9IjIxODc2NDI3NjUwOTE4NzM4MzQiPiLaqdin2LPZuSDaqdix2YbbkiDaqdinINio2bnZhtuUINmF2YbYs9mE2qkg24HZiCDYsduB2Kcg24HbkiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im1yX2Nhc3RfYnV0dG9uX2Nvbm5lY3RlZCIgbXNnaWQ9IjUwODg0Mjc3NzE3ODg2NDgwODUiPiLaqdin2LPZuSDaqdix2YbbkiDaqdinINio2bnZhtuUINmF2YbYs9mE2qkg24HbkiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im1yX2Nob29zZXJfdGl0bGUiIG1zZ2lkPSI0MTQzMDE5NDE1NDYxMzU5OTAiPiLYp9izINmF24zauiDaqdin2LPZuSDaqdix24zauiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im1yX2Nob29zZXJfc2VhcmNoaW5nIiBtc2dpZD0iNjM0OTkwMDU3OTUwNzUyMTk1NiI+Itii2YTYp9iqINiq2YTYp9i0INuB2Ygg2LHbgduSINuB24zauiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im1yX2NvbnRyb2xsZXJfZGlzY29ubmVjdCIgbXNnaWQ9IjEyMjcyNjQ4ODk0MTI5ODk1ODAiPiLYutuM2LEg2YXZhtiz2YTaqSDaqdix24zauiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im1yX2NvbnRyb2xsZXJfc3RvcF9jYXN0aW5nIiBtc2dpZD0iODg1Nzg4Njc5NDA4NjU4MzIyNiI+Itqp2KfYs9m5INqp2LHZhtinINio2YbYryDaqdix24zauiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im1yX2NvbnRyb2xsZXJfY2xvc2VfZGVzY3JpcHRpb24iIG1zZ2lkPSI3MzMzODYyMzEyNDgwNTgzMjYwIj4i2KjZhtivINqp2LHbjNq6Ijwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibXJfY29udHJvbGxlcl9wbGF5IiBtc2dpZD0iNjgzNjM0NTY1OTY5OTg3NDU4Ij4i2obZhNin2KbbjNq6Ijwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibXJfY29udHJvbGxlcl9wYXVzZSIgbXNnaWQ9IjU0NTE4ODQ0MzU1MTA5MDU0MDYiPiLZhdmI2YLZiNmBINqp2LHbjNq6Ijwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibXJfY29udHJvbGxlcl9zdG9wIiBtc2dpZD0iNzM1ODc0NjQxOTIxNDI1MTIzIj4i2LHZiNqp24zauiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im1yX2NvbnRyb2xsZXJfZXhwYW5kX2dyb3VwIiBtc2dpZD0iODA2MjQyNzAyMjc0NDI2NjkwNyI+Itm+2r7bjNmE2KfYptuM2roiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJtcl9jb250cm9sbGVyX2NvbGxhcHNlX2dyb3VwIiBtc2dpZD0iNzkyNDgwOTA1NjkwNDI0MDkyNiI+Itiz2qnbjNqR24zauiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im1yX2NvbnRyb2xsZXJfYWxidW1fYXJ0IiBtc2dpZD0iNjQyMjgwMTg0MzU0MDU0MzU4NSI+Itin2YTYqNmFINii2LHZuSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im1yX2NvbnRyb2xsZXJfdm9sdW1lX3NsaWRlciIgbXNnaWQ9IjIzNjE3ODU5OTIyMTE4NDE3MDkiPiLZiNin2YTbjNmI2YUg2LPZhNin2KbbjNqI2LEiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJtcl9jb250cm9sbGVyX25vX21lZGlhX3NlbGVjdGVkIiBtc2dpZD0iNjU0NzEzMDM2MDM0OTE4MjM4MSI+Itqp2YjYptuMINmF24zaiNuM2Kcg2YXZhtiq2K7YqCDZhtuB24zauiDbgduSIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibXJfY29udHJvbGxlcl9ub19pbmZvX2F2YWlsYWJsZSIgbXNnaWQ9IjU1ODU0MTg0NzE3NDExNDI5MjQiPiLaqdmI2KbbjCDZhdi52YTZiNmF2KfYqiDYr9iz2KrbjNin2Kgg2YbbgduM2roiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJtcl9jb250cm9sbGVyX2Nhc3Rpbmdfc2NyZWVuIiBtc2dpZD0iNDg2ODQ1Nzk1NzE1MTEyNDg2NyI+Itiz2qnYsduM2YYg2qnYp9iz2bkg24HZiCDYsduB24wg24HbkiI8L3N0cmluZz4KLTwvcmVzb3VyY2VzPgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvTWVkaWFDb21wb25lbnRzL3Jlcy92YWx1ZXMtdXovc3RyaW5ncy54bWwgYi9wYWNrYWdlcy9NZWRpYUNvbXBvbmVudHMvcmVzL3ZhbHVlcy11ei9zdHJpbmdzLnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTBhMDgxNy4uMDAwMDAwMAotLS0gYS9wYWNrYWdlcy9NZWRpYUNvbXBvbmVudHMvcmVzL3ZhbHVlcy11ei9zdHJpbmdzLnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDQwICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08IS0tICBDb3B5cmlnaHQgMjAxOCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0Ci0KLSAgICAgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7Ci0gICAgIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KLSAgICAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0KLSAgICAgICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLQotICAgICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCi0gICAgIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCi0gICAgIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgotICAgICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCi0gICAgIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgotIC0tPgotCi08cmVzb3VyY2VzIHhtbG5zOmFuZHJvaWQ9Imh0dHA6Ly9zY2hlbWFzLmFuZHJvaWQuY29tL2Fway9yZXMvYW5kcm9pZCIKLSAgICB4bWxuczp4bGlmZj0idXJuOm9hc2lzOm5hbWVzOnRjOnhsaWZmOmRvY3VtZW50OjEuMiI+Ci0gICAgPHN0cmluZyBuYW1lPSJtcl9zeXN0ZW1fcm91dGVfbmFtZSIgbXNnaWQ9IjU0NDE1Mjk4NTE0ODExNzY4MTciPiJUaXppbSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im1yX3VzZXJfcm91dGVfY2F0ZWdvcnlfbmFtZSIgbXNnaWQ9Ijc0OTgxMTI5MDc1MjQ5NzczMTEiPiJRdXJpbG1hbGFyIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibXJfYnV0dG9uX2NvbnRlbnRfZGVzY3JpcHRpb24iIG1zZ2lkPSIzNjk4Mzc4MDg1OTAxNDY2MTI5Ij4iVHJhbnNsYXRzaXlhIHR1Z21hc2kiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJtcl9jYXN0X2J1dHRvbl9kaXNjb25uZWN0ZWQiIG1zZ2lkPSI4MTYzMDU0OTA0Mjc4MTkyNDAiPiJUcmFuc2xhdHNpeWEgdHVnbWFzaS4gVXppbGRpIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibXJfY2FzdF9idXR0b25fY29ubmVjdGluZyIgbXNnaWQ9IjIxODc2NDI3NjUwOTE4NzM4MzQiPiJUcmFuc2xhdHNpeWEgdHVnbWFzaS4gVWxhbm1vcWRhIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibXJfY2FzdF9idXR0b25fY29ubmVjdGVkIiBtc2dpZD0iNTA4ODQyNzc3MTc4ODY0ODA4NSI+IlRyYW5zbGF0c2l5YSB0dWdtYXNpLiBVbGFuZGkiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJtcl9jaG9vc2VyX3RpdGxlIiBtc2dpZD0iNDE0MzAxOTQxNTQ2MTM1OTkwIj4iUXV5aWRhZ2lnYSB0cmFuc2xhdHNpeWEgcWlsaXNoOiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im1yX2Nob29zZXJfc2VhcmNoaW5nIiBtc2dpZD0iNjM0OTkwMDU3OTUwNzUyMTk1NiI+IlF1cmlsbWFsYXJuaSB0b3Bpc2giPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJtcl9jb250cm9sbGVyX2Rpc2Nvbm5lY3QiIG1zZ2lkPSIxMjI3MjY0ODg5NDEyOTg5NTgwIj4iVWxhbmlzaG5pIHV6aXNoIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibXJfY29udHJvbGxlcl9zdG9wX2Nhc3RpbmciIG1zZ2lkPSI4ODU3ODg2Nzk0MDg2NTgzMjI2Ij4iVHJhbnNsYXRzaXlhbmkgdG/igJh4dGF0aXNoIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibXJfY29udHJvbGxlcl9jbG9zZV9kZXNjcmlwdGlvbiIgbXNnaWQ9IjczMzM4NjIzMTI0ODA1ODMyNjAiPiJZb3Bpc2giPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJtcl9jb250cm9sbGVyX3BsYXkiIG1zZ2lkPSI2ODM2MzQ1NjU5Njk5ODc0NTgiPiJCb3NobGFzaCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im1yX2NvbnRyb2xsZXJfcGF1c2UiIG1zZ2lkPSI1NDUxODg0NDM1NTEwOTA1NDA2Ij4iVG/igJh4dGF0aWIgdHVyaXNoIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibXJfY29udHJvbGxlcl9zdG9wIiBtc2dpZD0iNzM1ODc0NjQxOTIxNDI1MTIzIj4iVG/igJh4dGF0aXNoIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibXJfY29udHJvbGxlcl9leHBhbmRfZ3JvdXAiIG1zZ2lkPSI4MDYyNDI3MDIyNzQ0MjY2OTA3Ij4iWW95aXNoIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibXJfY29udHJvbGxlcl9jb2xsYXBzZV9ncm91cCIgbXNnaWQ9Ijc5MjQ4MDkwNTY5MDQyNDA5MjYiPiJZaWfigJhpc2giPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJtcl9jb250cm9sbGVyX2FsYnVtX2FydCIgbXNnaWQ9IjY0MjI4MDE4NDM1NDA1NDM1ODUiPiJBbGJvbSBtdXFvdmFzaSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im1yX2NvbnRyb2xsZXJfdm9sdW1lX3NsaWRlciIgbXNnaWQ9IjIzNjE3ODU5OTIyMTE4NDE3MDkiPiJUb3Z1c2ggYmFsYW5kbGlnaSBzbGF5ZGVyaSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im1yX2NvbnRyb2xsZXJfbm9fbWVkaWFfc2VsZWN0ZWQiIG1zZ2lkPSI2NTQ3MTMwMzYwMzQ5MTgyMzgxIj4iTXVsdGltZWRpYSB0YW5sYW1hZ2FuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibXJfY29udHJvbGxlcl9ub19pbmZvX2F2YWlsYWJsZSIgbXNnaWQ9IjU1ODU0MTg0NzE3NDExNDI5MjQiPiJIZWNoIHFhbmRheSBtYeKAmWx1bW90IHlv4oCYcSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im1yX2NvbnRyb2xsZXJfY2FzdGluZ19zY3JlZW4iIG1zZ2lkPSI0ODY4NDU3OTU3MTUxMTI0ODY3Ij4iRWtyYW5uaSB0cmFuc2xhdHNpeWEgcWlsaXNoIjwvc3RyaW5nPgotPC9yZXNvdXJjZXM+CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9NZWRpYUNvbXBvbmVudHMvcmVzL3ZhbHVlcy12aS9zdHJpbmdzLnhtbCBiL3BhY2thZ2VzL01lZGlhQ29tcG9uZW50cy9yZXMvdmFsdWVzLXZpL3N0cmluZ3MueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3MDk4Y2NhLi4wMDAwMDAwCi0tLSBhL3BhY2thZ2VzL01lZGlhQ29tcG9uZW50cy9yZXMvdmFsdWVzLXZpL3N0cmluZ3MueG1sCisrKyAvZGV2L251bGwKQEAgLTEsNDAgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTwhLS0gIENvcHlyaWdodCAyMDE4IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKLQotICAgICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKLSAgICAgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgotICAgICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLQotICAgICAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotCi0gICAgIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKLSAgICAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKLSAgICAgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCi0gICAgIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKLSAgICAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCi0gLS0+Ci0KLTxyZXNvdXJjZXMgeG1sbnM6YW5kcm9pZD0iaHR0cDovL3NjaGVtYXMuYW5kcm9pZC5jb20vYXBrL3Jlcy9hbmRyb2lkIgotICAgIHhtbG5zOnhsaWZmPSJ1cm46b2FzaXM6bmFtZXM6dGM6eGxpZmY6ZG9jdW1lbnQ6MS4yIj4KLSAgICA8c3RyaW5nIG5hbWU9Im1yX3N5c3RlbV9yb3V0ZV9uYW1lIiBtc2dpZD0iNTQ0MTUyOTg1MTQ4MTE3NjgxNyI+Ikjhu4cgdGjhu5FuZyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im1yX3VzZXJfcm91dGVfY2F0ZWdvcnlfbmFtZSIgbXNnaWQ9Ijc0OTgxMTI5MDc1MjQ5NzczMTEiPiJUaGnhur90IGLhu4siPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJtcl9idXR0b25fY29udGVudF9kZXNjcmlwdGlvbiIgbXNnaWQ9IjM2OTgzNzgwODU5MDE0NjYxMjkiPiJOw7p0IHRydXnhu4FuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibXJfY2FzdF9idXR0b25fZGlzY29ubmVjdGVkIiBtc2dpZD0iODE2MzA1NDkwNDI3ODE5MjQwIj4iTsO6dCB0cnV54buBbi4gxJDDoyBuZ+G6r3Qga+G6v3QgbuG7kWkiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJtcl9jYXN0X2J1dHRvbl9jb25uZWN0aW5nIiBtc2dpZD0iMjE4NzY0Mjc2NTA5MTg3MzgzNCI+Ik7DunQgdHJ1eeG7gW4uIMSQYW5nIGvhur90IG7hu5FpIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibXJfY2FzdF9idXR0b25fY29ubmVjdGVkIiBtc2dpZD0iNTA4ODQyNzc3MTc4ODY0ODA4NSI+Ik7DunQgdHJ1eeG7gW4uIMSQw6Mga+G6v3QgbuG7kWkiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJtcl9jaG9vc2VyX3RpdGxlIiBtc2dpZD0iNDE0MzAxOTQxNTQ2MTM1OTkwIj4iVHJ1eeG7gW4gdOG7m2kiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJtcl9jaG9vc2VyX3NlYXJjaGluZyIgbXNnaWQ9IjYzNDk5MDA1Nzk1MDc1MjE5NTYiPiLEkGFuZyB0w6xtIHRoaeG6v3QgYuG7iyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im1yX2NvbnRyb2xsZXJfZGlzY29ubmVjdCIgbXNnaWQ9IjEyMjcyNjQ4ODk0MTI5ODk1ODAiPiJOZ+G6r3Qga+G6v3QgbuG7kWkiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJtcl9jb250cm9sbGVyX3N0b3BfY2FzdGluZyIgbXNnaWQ9Ijg4NTc4ODY3OTQwODY1ODMyMjYiPiJE4burbmcgdHJ1eeG7gW4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJtcl9jb250cm9sbGVyX2Nsb3NlX2Rlc2NyaXB0aW9uIiBtc2dpZD0iNzMzMzg2MjMxMjQ4MDU4MzI2MCI+IsSQw7NuZyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im1yX2NvbnRyb2xsZXJfcGxheSIgbXNnaWQ9IjY4MzYzNDU2NTk2OTk4NzQ1OCI+IlBow6F0Ijwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibXJfY29udHJvbGxlcl9wYXVzZSIgbXNnaWQ9IjU0NTE4ODQ0MzU1MTA5MDU0MDYiPiJU4bqhbSBk4burbmciPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJtcl9jb250cm9sbGVyX3N0b3AiIG1zZ2lkPSI3MzU4NzQ2NDE5MjE0MjUxMjMiPiJE4burbmciPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJtcl9jb250cm9sbGVyX2V4cGFuZF9ncm91cCIgbXNnaWQ9IjgwNjI0MjcwMjI3NDQyNjY5MDciPiJN4bufIHLhu5luZyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im1yX2NvbnRyb2xsZXJfY29sbGFwc2VfZ3JvdXAiIG1zZ2lkPSI3OTI0ODA5MDU2OTA0MjQwOTI2Ij4iVGh1IGfhu41uIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibXJfY29udHJvbGxlcl9hbGJ1bV9hcnQiIG1zZ2lkPSI2NDIyODAxODQzNTQwNTQzNTg1Ij4i4bqibmggYsOsYSBhbGJ1bSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im1yX2NvbnRyb2xsZXJfdm9sdW1lX3NsaWRlciIgbXNnaWQ9IjIzNjE3ODU5OTIyMTE4NDE3MDkiPiJUaGFuaCB0csaw4bujdCDDom0gbMaw4bujbmciPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJtcl9jb250cm9sbGVyX25vX21lZGlhX3NlbGVjdGVkIiBtc2dpZD0iNjU0NzEzMDM2MDM0OTE4MjM4MSI+Iktow7RuZyBjw7MgcGjGsMahbmcgdGnhu4duIG7DoG8gxJHGsOG7o2MgY2jhu41uIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibXJfY29udHJvbGxlcl9ub19pbmZvX2F2YWlsYWJsZSIgbXNnaWQ9IjU1ODU0MTg0NzE3NDExNDI5MjQiPiJLaMO0bmcgY8OzIHRow7RuZyB0aW4gbsOgbyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im1yX2NvbnRyb2xsZXJfY2FzdGluZ19zY3JlZW4iIG1zZ2lkPSI0ODY4NDU3OTU3MTUxMTI0ODY3Ij4ixJBhbmcgdHJ1eeG7gW4gbcOgbiBow6xuaCI8L3N0cmluZz4KLTwvcmVzb3VyY2VzPgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvTWVkaWFDb21wb25lbnRzL3Jlcy92YWx1ZXMtemgtckNOL3N0cmluZ3MueG1sIGIvcGFja2FnZXMvTWVkaWFDb21wb25lbnRzL3Jlcy92YWx1ZXMtemgtckNOL3N0cmluZ3MueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxZTIyZDAxLi4wMDAwMDAwCi0tLSBhL3BhY2thZ2VzL01lZGlhQ29tcG9uZW50cy9yZXMvdmFsdWVzLXpoLXJDTi9zdHJpbmdzLnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDQwICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08IS0tICBDb3B5cmlnaHQgMjAxOCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0Ci0KLSAgICAgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7Ci0gICAgIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KLSAgICAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0KLSAgICAgICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLQotICAgICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCi0gICAgIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCi0gICAgIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgotICAgICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCi0gICAgIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgotIC0tPgotCi08cmVzb3VyY2VzIHhtbG5zOmFuZHJvaWQ9Imh0dHA6Ly9zY2hlbWFzLmFuZHJvaWQuY29tL2Fway9yZXMvYW5kcm9pZCIKLSAgICB4bWxuczp4bGlmZj0idXJuOm9hc2lzOm5hbWVzOnRjOnhsaWZmOmRvY3VtZW50OjEuMiI+Ci0gICAgPHN0cmluZyBuYW1lPSJtcl9zeXN0ZW1fcm91dGVfbmFtZSIgbXNnaWQ9IjU0NDE1Mjk4NTE0ODExNzY4MTciPiLns7vnu58iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJtcl91c2VyX3JvdXRlX2NhdGVnb3J5X25hbWUiIG1zZ2lkPSI3NDk4MTEyOTA3NTI0OTc3MzExIj4i6K6+5aSHIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibXJfYnV0dG9uX2NvbnRlbnRfZGVzY3JpcHRpb24iIG1zZ2lkPSIzNjk4Mzc4MDg1OTAxNDY2MTI5Ij4i5oqV5bCE5oyJ6ZKuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibXJfY2FzdF9idXR0b25fZGlzY29ubmVjdGVkIiBtc2dpZD0iODE2MzA1NDkwNDI3ODE5MjQwIj4i5oqV5bCE5oyJ6ZKu44CC5bey5pat5byA6L+e5o6lIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibXJfY2FzdF9idXR0b25fY29ubmVjdGluZyIgbXNnaWQ9IjIxODc2NDI3NjUwOTE4NzM4MzQiPiLmipXlsITmjInpkq7jgILmraPlnKjov57mjqUiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJtcl9jYXN0X2J1dHRvbl9jb25uZWN0ZWQiIG1zZ2lkPSI1MDg4NDI3NzcxNzg4NjQ4MDg1Ij4i5oqV5bCE5oyJ6ZKu44CC5bey6L+e5o6lIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibXJfY2hvb3Nlcl90aXRsZSIgbXNnaWQ9IjQxNDMwMTk0MTU0NjEzNTk5MCI+IuaKleWwhOWIsCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im1yX2Nob29zZXJfc2VhcmNoaW5nIiBtc2dpZD0iNjM0OTkwMDU3OTUwNzUyMTk1NiI+Iuato+WcqOafpeaJvuiuvuWkhyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im1yX2NvbnRyb2xsZXJfZGlzY29ubmVjdCIgbXNnaWQ9IjEyMjcyNjQ4ODk0MTI5ODk1ODAiPiLmlq3lvIDov57mjqUiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJtcl9jb250cm9sbGVyX3N0b3BfY2FzdGluZyIgbXNnaWQ9Ijg4NTc4ODY3OTQwODY1ODMyMjYiPiLlgZzmraLmipXlsIQiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJtcl9jb250cm9sbGVyX2Nsb3NlX2Rlc2NyaXB0aW9uIiBtc2dpZD0iNzMzMzg2MjMxMjQ4MDU4MzI2MCI+IuWFs+mXrSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im1yX2NvbnRyb2xsZXJfcGxheSIgbXNnaWQ9IjY4MzYzNDU2NTk2OTk4NzQ1OCI+IuaSreaUviI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im1yX2NvbnRyb2xsZXJfcGF1c2UiIG1zZ2lkPSI1NDUxODg0NDM1NTEwOTA1NDA2Ij4i5pqC5YGcIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibXJfY29udHJvbGxlcl9zdG9wIiBtc2dpZD0iNzM1ODc0NjQxOTIxNDI1MTIzIj4i5YGc5q2iIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibXJfY29udHJvbGxlcl9leHBhbmRfZ3JvdXAiIG1zZ2lkPSI4MDYyNDI3MDIyNzQ0MjY2OTA3Ij4i5bGV5byAIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibXJfY29udHJvbGxlcl9jb2xsYXBzZV9ncm91cCIgbXNnaWQ9Ijc5MjQ4MDkwNTY5MDQyNDA5MjYiPiLmlLbotbciPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJtcl9jb250cm9sbGVyX2FsYnVtX2FydCIgbXNnaWQ9IjY0MjI4MDE4NDM1NDA1NDM1ODUiPiLkuJPovpHlsIHpnaIiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJtcl9jb250cm9sbGVyX3ZvbHVtZV9zbGlkZXIiIG1zZ2lkPSIyMzYxNzg1OTkyMjExODQxNzA5Ij4i6Z+z6YeP5ruR5Z2XIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibXJfY29udHJvbGxlcl9ub19tZWRpYV9zZWxlY3RlZCIgbXNnaWQ9IjY1NDcxMzAzNjAzNDkxODIzODEiPiLmnKrpgInmi6nku7vkvZXlqpLkvZMiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJtcl9jb250cm9sbGVyX25vX2luZm9fYXZhaWxhYmxlIiBtc2dpZD0iNTU4NTQxODQ3MTc0MTE0MjkyNCI+IuayoeacieS7u+S9leebuOWFs+S/oeaBryI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im1yX2NvbnRyb2xsZXJfY2FzdGluZ19zY3JlZW4iIG1zZ2lkPSI0ODY4NDU3OTU3MTUxMTI0ODY3Ij4i5q2j5Zyo5oqV5bCE5bGP5bmVIjwvc3RyaW5nPgotPC9yZXNvdXJjZXM+CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9NZWRpYUNvbXBvbmVudHMvcmVzL3ZhbHVlcy16aC1ySEsvc3RyaW5ncy54bWwgYi9wYWNrYWdlcy9NZWRpYUNvbXBvbmVudHMvcmVzL3ZhbHVlcy16aC1ySEsvc3RyaW5ncy54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDE1NmU1YzIuLjAwMDAwMDAKLS0tIGEvcGFja2FnZXMvTWVkaWFDb21wb25lbnRzL3Jlcy92YWx1ZXMtemgtckhLL3N0cmluZ3MueG1sCisrKyAvZGV2L251bGwKQEAgLTEsNDAgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTwhLS0gIENvcHlyaWdodCAyMDE4IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKLQotICAgICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKLSAgICAgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgotICAgICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLQotICAgICAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotCi0gICAgIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKLSAgICAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKLSAgICAgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCi0gICAgIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKLSAgICAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCi0gLS0+Ci0KLTxyZXNvdXJjZXMgeG1sbnM6YW5kcm9pZD0iaHR0cDovL3NjaGVtYXMuYW5kcm9pZC5jb20vYXBrL3Jlcy9hbmRyb2lkIgotICAgIHhtbG5zOnhsaWZmPSJ1cm46b2FzaXM6bmFtZXM6dGM6eGxpZmY6ZG9jdW1lbnQ6MS4yIj4KLSAgICA8c3RyaW5nIG5hbWU9Im1yX3N5c3RlbV9yb3V0ZV9uYW1lIiBtc2dpZD0iNTQ0MTUyOTg1MTQ4MTE3NjgxNyI+Iuezu+e1sSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im1yX3VzZXJfcm91dGVfY2F0ZWdvcnlfbmFtZSIgbXNnaWQ9Ijc0OTgxMTI5MDc1MjQ5NzczMTEiPiLoo53nva4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJtcl9idXR0b25fY29udGVudF9kZXNjcmlwdGlvbiIgbXNnaWQ9IjM2OTgzNzgwODU5MDE0NjYxMjkiPiLmipXmlL7mjInpiJUiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJtcl9jYXN0X2J1dHRvbl9kaXNjb25uZWN0ZWQiIG1zZ2lkPSI4MTYzMDU0OTA0Mjc4MTkyNDAiPiLmipXmlL7mjInpiJXjgILlt7Lop6PpmaTpgKPmjqUiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJtcl9jYXN0X2J1dHRvbl9jb25uZWN0aW5nIiBtc2dpZD0iMjE4NzY0Mjc2NTA5MTg3MzgzNCI+IuaKleaUvuaMiemIleOAguato+WcqOmAo+aOpSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im1yX2Nhc3RfYnV0dG9uX2Nvbm5lY3RlZCIgbXNnaWQ9IjUwODg0Mjc3NzE3ODg2NDgwODUiPiLmipXmlL7mjInpiJXjgILlt7LpgKPmjqUiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJtcl9jaG9vc2VyX3RpdGxlIiBtc2dpZD0iNDE0MzAxOTQxNTQ2MTM1OTkwIj4i5oqV5pS+6IezIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibXJfY2hvb3Nlcl9zZWFyY2hpbmciIG1zZ2lkPSI2MzQ5OTAwNTc5NTA3NTIxOTU2Ij4i5q2j5Zyo5bCL5om+6KOd572uIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibXJfY29udHJvbGxlcl9kaXNjb25uZWN0IiBtc2dpZD0iMTIyNzI2NDg4OTQxMjk4OTU4MCI+IuS4reaWt+mAo+e3miI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im1yX2NvbnRyb2xsZXJfc3RvcF9jYXN0aW5nIiBtc2dpZD0iODg1Nzg4Njc5NDA4NjU4MzIyNiI+IuWBnOatouaKleaUviI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im1yX2NvbnRyb2xsZXJfY2xvc2VfZGVzY3JpcHRpb24iIG1zZ2lkPSI3MzMzODYyMzEyNDgwNTgzMjYwIj4i6Zec6ZaJIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibXJfY29udHJvbGxlcl9wbGF5IiBtc2dpZD0iNjgzNjM0NTY1OTY5OTg3NDU4Ij4i5pKt5pS+Ijwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibXJfY29udHJvbGxlcl9wYXVzZSIgbXNnaWQ9IjU0NTE4ODQ0MzU1MTA5MDU0MDYiPiLmmqvlgZwiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJtcl9jb250cm9sbGVyX3N0b3AiIG1zZ2lkPSI3MzU4NzQ2NDE5MjE0MjUxMjMiPiLlgZzmraIiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJtcl9jb250cm9sbGVyX2V4cGFuZF9ncm91cCIgbXNnaWQ9IjgwNjI0MjcwMjI3NDQyNjY5MDciPiLlsZXplosiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJtcl9jb250cm9sbGVyX2NvbGxhcHNlX2dyb3VwIiBtc2dpZD0iNzkyNDgwOTA1NjkwNDI0MDkyNiI+IuaUtuWQiCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im1yX2NvbnRyb2xsZXJfYWxidW1fYXJ0IiBtc2dpZD0iNjQyMjgwMTg0MzU0MDU0MzU4NSI+IuWwiOi8r+WwgemdoiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im1yX2NvbnRyb2xsZXJfdm9sdW1lX3NsaWRlciIgbXNnaWQ9IjIzNjE3ODU5OTIyMTE4NDE3MDkiPiLpn7Pph4/mu5Hmob8iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJtcl9jb250cm9sbGVyX25vX21lZGlhX3NlbGVjdGVkIiBtc2dpZD0iNjU0NzEzMDM2MDM0OTE4MjM4MSI+IuWwmuacqumBuOaTh+WqkumrlCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im1yX2NvbnRyb2xsZXJfbm9faW5mb19hdmFpbGFibGUiIG1zZ2lkPSI1NTg1NDE4NDcxNzQxMTQyOTI0Ij4i5rKS5pyJ6Kmz57Sw6LOH5paZIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibXJfY29udHJvbGxlcl9jYXN0aW5nX3NjcmVlbiIgbXNnaWQ9IjQ4Njg0NTc5NTcxNTExMjQ4NjciPiLmraPlnKjmipXmlL7onqLluZUiPC9zdHJpbmc+Ci08L3Jlc291cmNlcz4KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL01lZGlhQ29tcG9uZW50cy9yZXMvdmFsdWVzLXpoLXJUVy9zdHJpbmdzLnhtbCBiL3BhY2thZ2VzL01lZGlhQ29tcG9uZW50cy9yZXMvdmFsdWVzLXpoLXJUVy9zdHJpbmdzLnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNmNhZmRlMS4uMDAwMDAwMAotLS0gYS9wYWNrYWdlcy9NZWRpYUNvbXBvbmVudHMvcmVzL3ZhbHVlcy16aC1yVFcvc3RyaW5ncy54bWwKKysrIC9kZXYvbnVsbApAQCAtMSw0MCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPCEtLSAgQ29weXJpZ2h0IDIwMTggVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAotCi0gICAgIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwotICAgICB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCi0gICAgIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotCi0gICAgICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0KLSAgICAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQotICAgICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAotICAgICBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KLSAgICAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAotICAgICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KLSAtLT4KLQotPHJlc291cmNlcyB4bWxuczphbmRyb2lkPSJodHRwOi8vc2NoZW1hcy5hbmRyb2lkLmNvbS9hcGsvcmVzL2FuZHJvaWQiCi0gICAgeG1sbnM6eGxpZmY9InVybjpvYXNpczpuYW1lczp0Yzp4bGlmZjpkb2N1bWVudDoxLjIiPgotICAgIDxzdHJpbmcgbmFtZT0ibXJfc3lzdGVtX3JvdXRlX25hbWUiIG1zZ2lkPSI1NDQxNTI5ODUxNDgxMTc2ODE3Ij4i57O757WxIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibXJfdXNlcl9yb3V0ZV9jYXRlZ29yeV9uYW1lIiBtc2dpZD0iNzQ5ODExMjkwNzUyNDk3NzMxMSI+Iuijnee9riI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im1yX2J1dHRvbl9jb250ZW50X2Rlc2NyaXB0aW9uIiBtc2dpZD0iMzY5ODM3ODA4NTkwMTQ2NjEyOSI+IuaKleaUvuaMiemIlSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im1yX2Nhc3RfYnV0dG9uX2Rpc2Nvbm5lY3RlZCIgbXNnaWQ9IjgxNjMwNTQ5MDQyNzgxOTI0MCI+IuaKleaUvuaMiemIle+8m+W3suS4reaWt+mAo+e3miI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im1yX2Nhc3RfYnV0dG9uX2Nvbm5lY3RpbmciIG1zZ2lkPSIyMTg3NjQyNzY1MDkxODczODM0Ij4i5oqV5pS+5oyJ6YiV77yb6YCj57ea5LitIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibXJfY2FzdF9idXR0b25fY29ubmVjdGVkIiBtc2dpZD0iNTA4ODQyNzc3MTc4ODY0ODA4NSI+IuaKleaUvuaMiemIle+8m+W3sumAo+e3miI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im1yX2Nob29zZXJfdGl0bGUiIG1zZ2lkPSI0MTQzMDE5NDE1NDYxMzU5OTAiPiLmipXmlL7liLAiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJtcl9jaG9vc2VyX3NlYXJjaGluZyIgbXNnaWQ9IjYzNDk5MDA1Nzk1MDc1MjE5NTYiPiLmraPlnKjlsIvmib7oo53nva4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJtcl9jb250cm9sbGVyX2Rpc2Nvbm5lY3QiIG1zZ2lkPSIxMjI3MjY0ODg5NDEyOTg5NTgwIj4i5Lit5pa36YCj57eaIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibXJfY29udHJvbGxlcl9zdG9wX2Nhc3RpbmciIG1zZ2lkPSI4ODU3ODg2Nzk0MDg2NTgzMjI2Ij4i5YGc5q2i5oqV5pS+Ijwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibXJfY29udHJvbGxlcl9jbG9zZV9kZXNjcmlwdGlvbiIgbXNnaWQ9IjczMzM4NjIzMTI0ODA1ODMyNjAiPiLpl5zplokiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJtcl9jb250cm9sbGVyX3BsYXkiIG1zZ2lkPSI2ODM2MzQ1NjU5Njk5ODc0NTgiPiLmkq3mlL4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJtcl9jb250cm9sbGVyX3BhdXNlIiBtc2dpZD0iNTQ1MTg4NDQzNTUxMDkwNTQwNiI+Iuaaq+WBnCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im1yX2NvbnRyb2xsZXJfc3RvcCIgbXNnaWQ9IjczNTg3NDY0MTkyMTQyNTEyMyI+IuWBnOatoiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im1yX2NvbnRyb2xsZXJfZXhwYW5kX2dyb3VwIiBtc2dpZD0iODA2MjQyNzAyMjc0NDI2NjkwNyI+IuWxlemWiyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im1yX2NvbnRyb2xsZXJfY29sbGFwc2VfZ3JvdXAiIG1zZ2lkPSI3OTI0ODA5MDU2OTA0MjQwOTI2Ij4i5pS25ZCIIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibXJfY29udHJvbGxlcl9hbGJ1bV9hcnQiIG1zZ2lkPSI2NDIyODAxODQzNTQwNTQzNTg1Ij4i5bCI6Lyv5bCB6Z2iIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibXJfY29udHJvbGxlcl92b2x1bWVfc2xpZGVyIiBtc2dpZD0iMjM2MTc4NTk5MjIxMTg0MTcwOSI+Iumfs+mHj+a7keahvyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im1yX2NvbnRyb2xsZXJfbm9fbWVkaWFfc2VsZWN0ZWQiIG1zZ2lkPSI2NTQ3MTMwMzYwMzQ5MTgyMzgxIj4i5pyq6YG45Y+W5Lu75L2V5aqS6auUIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibXJfY29udHJvbGxlcl9ub19pbmZvX2F2YWlsYWJsZSIgbXNnaWQ9IjU1ODU0MTg0NzE3NDExNDI5MjQiPiLmspLmnInlj6/nlKjnmoTos4foqIoiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJtcl9jb250cm9sbGVyX2Nhc3Rpbmdfc2NyZWVuIiBtc2dpZD0iNDg2ODQ1Nzk1NzE1MTEyNDg2NyI+Iuato+WcqOaKleaUvuieouW5lSI8L3N0cmluZz4KLTwvcmVzb3VyY2VzPgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvTWVkaWFDb21wb25lbnRzL3Jlcy92YWx1ZXMtenUvc3RyaW5ncy54bWwgYi9wYWNrYWdlcy9NZWRpYUNvbXBvbmVudHMvcmVzL3ZhbHVlcy16dS9zdHJpbmdzLnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTEwN2M0My4uMDAwMDAwMAotLS0gYS9wYWNrYWdlcy9NZWRpYUNvbXBvbmVudHMvcmVzL3ZhbHVlcy16dS9zdHJpbmdzLnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDQwICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08IS0tICBDb3B5cmlnaHQgMjAxOCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0Ci0KLSAgICAgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7Ci0gICAgIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KLSAgICAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0KLSAgICAgICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLQotICAgICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCi0gICAgIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCi0gICAgIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgotICAgICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCi0gICAgIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgotIC0tPgotCi08cmVzb3VyY2VzIHhtbG5zOmFuZHJvaWQ9Imh0dHA6Ly9zY2hlbWFzLmFuZHJvaWQuY29tL2Fway9yZXMvYW5kcm9pZCIKLSAgICB4bWxuczp4bGlmZj0idXJuOm9hc2lzOm5hbWVzOnRjOnhsaWZmOmRvY3VtZW50OjEuMiI+Ci0gICAgPHN0cmluZyBuYW1lPSJtcl9zeXN0ZW1fcm91dGVfbmFtZSIgbXNnaWQ9IjU0NDE1Mjk4NTE0ODExNzY4MTciPiJJc2lzdGltdSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im1yX3VzZXJfcm91dGVfY2F0ZWdvcnlfbmFtZSIgbXNnaWQ9Ijc0OTgxMTI5MDc1MjQ5NzczMTEiPiJBbWFkaXZheWlzaSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im1yX2J1dHRvbl9jb250ZW50X2Rlc2NyaXB0aW9uIiBtc2dpZD0iMzY5ODM3ODA4NTkwMTQ2NjEyOSI+Iklua2lub2JobyB5ZS1DYXN0Ijwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibXJfY2FzdF9idXR0b25fZGlzY29ubmVjdGVkIiBtc2dpZD0iODE2MzA1NDkwNDI3ODE5MjQwIj4iSW5raW5vYmhvIHlva3VzYWthemEuIEt1bnFhbnl1bGl3ZSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im1yX2Nhc3RfYnV0dG9uX2Nvbm5lY3RpbmciIG1zZ2lkPSIyMTg3NjQyNzY1MDkxODczODM0Ij4iSW5raW5vYmhvIHlva3VzYWthemEuIEt1eWF4aHVueXdhIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibXJfY2FzdF9idXR0b25fY29ubmVjdGVkIiBtc2dpZD0iNTA4ODQyNzc3MTc4ODY0ODA4NSI+Iklua2lub2JobyB5b2t1c2FrYXphLiBLdXhodW55aXdlIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibXJfY2hvb3Nlcl90aXRsZSIgbXNnaWQ9IjQxNDMwMTk0MTU0NjEzNTk5MCI+IlNha2F6YSBrdS0iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJtcl9jaG9vc2VyX3NlYXJjaGluZyIgbXNnaWQ9IjYzNDk5MDA1Nzk1MDc1MjE5NTYiPiJJdGhvbGEgYW1hZGl2YXlpc2kiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJtcl9jb250cm9sbGVyX2Rpc2Nvbm5lY3QiIG1zZ2lkPSIxMjI3MjY0ODg5NDEyOTg5NTgwIj4iTnFhbXVsYSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im1yX2NvbnRyb2xsZXJfc3RvcF9jYXN0aW5nIiBtc2dpZD0iODg1Nzg4Njc5NDA4NjU4MzIyNiI+Ik1pc2EgdWt1c2FrYXphIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibXJfY29udHJvbGxlcl9jbG9zZV9kZXNjcmlwdGlvbiIgbXNnaWQ9IjczMzM4NjIzMTI0ODA1ODMyNjAiPiJWYWxhIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibXJfY29udHJvbGxlcl9wbGF5IiBtc2dpZD0iNjgzNjM0NTY1OTY5OTg3NDU4Ij4iRGxhbGEiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJtcl9jb250cm9sbGVyX3BhdXNlIiBtc2dpZD0iNTQ1MTg4NDQzNTUxMDkwNTQwNiI+Ik1pc2EgaXNpa2hhc2hhbmEiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJtcl9jb250cm9sbGVyX3N0b3AiIG1zZ2lkPSI3MzU4NzQ2NDE5MjE0MjUxMjMiPiJNaXNhIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibXJfY29udHJvbGxlcl9leHBhbmRfZ3JvdXAiIG1zZ2lkPSI4MDYyNDI3MDIyNzQ0MjY2OTA3Ij4iTndlYmEiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJtcl9jb250cm9sbGVyX2NvbGxhcHNlX2dyb3VwIiBtc2dpZD0iNzkyNDgwOTA1NjkwNDI0MDkyNiI+IkdvcWEiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJtcl9jb250cm9sbGVyX2FsYnVtX2FydCIgbXNnaWQ9IjY0MjI4MDE4NDM1NDA1NDM1ODUiPiJVYnVjaWtvIGJlLWFsYmhhbXUiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJtcl9jb250cm9sbGVyX3ZvbHVtZV9zbGlkZXIiIG1zZ2lkPSIyMzYxNzg1OTkyMjExODQxNzA5Ij4iSXNpbGF5aWRhIHNldm9sdW11Ijwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibXJfY29udHJvbGxlcl9ub19tZWRpYV9zZWxlY3RlZCIgbXNnaWQ9IjY1NDcxMzAzNjAzNDkxODIzODEiPiJBeWlraG8gaW1pZGl5YSBla2hldGhpd2UiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJtcl9jb250cm9sbGVyX25vX2luZm9fYXZhaWxhYmxlIiBtc2dpZD0iNTU4NTQxODQ3MTc0MTE0MjkyNCI+IkFsdWtobyB1bHdhemkgb2x1dGhvbGFrYWxheW8iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJtcl9jb250cm9sbGVyX2Nhc3Rpbmdfc2NyZWVuIiBtc2dpZD0iNDg2ODQ1Nzk1NzE1MTEyNDg2NyI+IklzaWtyaW5pIHNva3VzYWthemEiPC9zdHJpbmc+Ci08L3Jlc291cmNlcz4KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL01lZGlhQ29tcG9uZW50cy9yZXMvdmFsdWVzL2FycmF5cy54bWwgYi9wYWNrYWdlcy9NZWRpYUNvbXBvbmVudHMvcmVzL3ZhbHVlcy9hcnJheXMueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxMTg3MzIwLi4wMDAwMDAwCi0tLSBhL3BhY2thZ2VzL01lZGlhQ29tcG9uZW50cy9yZXMvdmFsdWVzL2FycmF5cy54bWwKKysrIC9kZXYvbnVsbApAQCAtMSwyNyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ1dGYtOCI/PgotPCEtLSBDb3B5cmlnaHQgMjAxOCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0Ci0KLSAgICAgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7Ci0gICAgIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KLSAgICAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0KLSAgICAgICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLQotICAgICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCi0gICAgIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCi0gICAgIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgotICAgICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCi0gICAgIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgotLS0+Ci0KLTxyZXNvdXJjZXM+Ci0gICAgPGludGVnZXItYXJyYXkgbmFtZT0ic3BlZWRfbXVsdGlwbGllZF9ieV8xMDAiPgotICAgICAgICA8aXRlbT4yNTwvaXRlbT4KLSAgICAgICAgPGl0ZW0+NTA8L2l0ZW0+Ci0gICAgICAgIDxpdGVtPjc1PC9pdGVtPgotICAgICAgICA8aXRlbT4xMDA8L2l0ZW0+Ci0gICAgICAgIDxpdGVtPjEyNTwvaXRlbT4KLSAgICAgICAgPGl0ZW0+MTUwPC9pdGVtPgotICAgICAgICA8aXRlbT4yMDA8L2l0ZW0+Ci0gICAgPC9pbnRlZ2VyLWFycmF5PgotPC9yZXNvdXJjZXM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvTWVkaWFDb21wb25lbnRzL3Jlcy92YWx1ZXMvYXR0cnMueG1sIGIvcGFja2FnZXMvTWVkaWFDb21wb25lbnRzL3Jlcy92YWx1ZXMvYXR0cnMueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlMzcyODViLi4wMDAwMDAwCi0tLSBhL3BhY2thZ2VzL01lZGlhQ29tcG9uZW50cy9yZXMvdmFsdWVzL2F0dHJzLnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDQ0ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9InV0Zi04Ij8+Ci08IS0tIENvcHlyaWdodCAyMDE4IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKLQotICAgICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKLSAgICAgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgotICAgICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLQotICAgICAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotCi0gICAgIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKLSAgICAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKLSAgICAgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCi0gICAgIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKLSAgICAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCi0tLT4KLQotPHJlc291cmNlcz4KLSAgICA8ZGVjbGFyZS1zdHlsZWFibGUgbmFtZT0iTWVkaWFSb3V0ZUJ1dHRvbiI+Ci0gICAgICAgIDwhLS0gVGhpcyBkcmF3YWJsZSBpcyBhIHN0YXRlIGxpc3Qgd2hlcmUgdGhlICJjaGVja2VkIiBzdGF0ZQotICAgICAgICAgICAgIGluZGljYXRlcyBhY3RpdmUgbWVkaWEgcm91dGluZy4gIENoZWNrYWJsZSBpbmRpY2F0ZXMgY29ubmVjdGluZwotICAgICAgICAgICAgIGFuZCBub24tY2hlY2tlZCAvIG5vbi1jaGVja2FibGUgaW5kaWNhdGVzCi0gICAgICAgICAgICAgdGhhdCBtZWRpYSBpcyBwbGF5aW5nIHRvIHRoZSBsb2NhbCBkZXZpY2Ugb25seS4gLS0+Ci0gICAgICAgIDxhdHRyIG5hbWU9ImV4dGVybmFsUm91dGVFbmFibGVkRHJhd2FibGUiIGZvcm1hdD0icmVmZXJlbmNlIiAvPgotICAgICAgICA8IS0tIFRpbnQgdG8gYXBwbHkgdG8gdGhlIG1lZGlhIHJvdXRlIGJ1dHRvbiAtLT4KLSAgICAgICAgPGF0dHIgbmFtZT0ibWVkaWFSb3V0ZUJ1dHRvblRpbnQiIGZvcm1hdD0iY29sb3IiIC8+Ci0KLSAgICAgICAgPGF0dHIgbmFtZT0iYW5kcm9pZDptaW5XaWR0aCIgLz4KLSAgICAgICAgPGF0dHIgbmFtZT0iYW5kcm9pZDptaW5IZWlnaHQiIC8+Ci0gICAgPC9kZWNsYXJlLXN0eWxlYWJsZT4KLQotICAgIDxhdHRyIG5hbWU9Im1lZGlhUm91dGVCdXR0b25TdHlsZSIgZm9ybWF0PSJyZWZlcmVuY2UiIC8+Ci0gICAgPGF0dHIgbmFtZT0ibWVkaWFSb3V0ZUNsb3NlRHJhd2FibGUiIGZvcm1hdD0icmVmZXJlbmNlIiAvPgotICAgIDxhdHRyIG5hbWU9Im1lZGlhUm91dGVQbGF5RHJhd2FibGUiIGZvcm1hdD0icmVmZXJlbmNlIiAvPgotICAgIDxhdHRyIG5hbWU9Im1lZGlhUm91dGVQYXVzZURyYXdhYmxlIiBmb3JtYXQ9InJlZmVyZW5jZSIgLz4KLSAgICA8YXR0ciBuYW1lPSJtZWRpYVJvdXRlU3RvcERyYXdhYmxlIiBmb3JtYXQ9InJlZmVyZW5jZSIgLz4KLSAgICA8YXR0ciBuYW1lPSJtZWRpYVJvdXRlQXVkaW9UcmFja0RyYXdhYmxlIiBmb3JtYXQ9InJlZmVyZW5jZSIgLz4KLSAgICA8YXR0ciBuYW1lPSJtZWRpYVJvdXRlRGVmYXVsdEljb25EcmF3YWJsZSIgZm9ybWF0PSJyZWZlcmVuY2UiIC8+Ci0gICAgPGF0dHIgbmFtZT0ibWVkaWFSb3V0ZVR2SWNvbkRyYXdhYmxlIiBmb3JtYXQ9InJlZmVyZW5jZSIgLz4KLSAgICA8YXR0ciBuYW1lPSJtZWRpYVJvdXRlU3BlYWtlckljb25EcmF3YWJsZSIgZm9ybWF0PSJyZWZlcmVuY2UiIC8+Ci0gICAgPGF0dHIgbmFtZT0ibWVkaWFSb3V0ZVNwZWFrZXJHcm91cEljb25EcmF3YWJsZSIgZm9ybWF0PSJyZWZlcmVuY2UiIC8+Ci0gICAgPGF0dHIgbmFtZT0ibWVkaWFSb3V0ZUNvbnRyb2xQYW5lbFRoZW1lT3ZlcmxheSIgZm9ybWF0PSJyZWZlcmVuY2UiIC8+Ci0KLSAgICA8YXR0ciBuYW1lPSJtZWRpYVJvdXRlVGhlbWUiIGZvcm1hdD0icmVmZXJlbmNlIiAvPgotPC9yZXNvdXJjZXM+CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9NZWRpYUNvbXBvbmVudHMvcmVzL3ZhbHVlcy9jb2xvcnMueG1sIGIvcGFja2FnZXMvTWVkaWFDb21wb25lbnRzL3Jlcy92YWx1ZXMvY29sb3JzLnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTdiYzI5OS4uMDAwMDAwMAotLS0gYS9wYWNrYWdlcy9NZWRpYUNvbXBvbmVudHMvcmVzL3ZhbHVlcy9jb2xvcnMueG1sCisrKyAvZGV2L251bGwKQEAgLTEsMjUgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KLTwhLS0gQ29weXJpZ2h0IDIwMTggVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAotCi0gICAgIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwotICAgICB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCi0gICAgIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotCi0gICAgICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0KLSAgICAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQotICAgICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAotICAgICBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KLSAgICAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAotICAgICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KLS0tPgotCi08cmVzb3VyY2VzPgotICAgIDxjb2xvciBuYW1lPSJncmF5Ij4jODA4MDgwPC9jb2xvcj4KLSAgICA8Y29sb3IgbmFtZT0id2hpdGUiPiNmZmZmZmY8L2NvbG9yPgotICAgIDxjb2xvciBuYW1lPSJ3aGl0ZV9vcGFjaXR5XzcwIj4jQjNmZmZmZmY8L2NvbG9yPgotICAgIDxjb2xvciBuYW1lPSJibGFja19vcGFjaXR5XzcwIj4jQjMwMDAwMDA8L2NvbG9yPgotICAgIDxjb2xvciBuYW1lPSJ0aXRsZV9iYXJfZ3JhZGllbnRfc3RhcnQiPiM1MDAwMDAwMDwvY29sb3I+Ci0gICAgPGNvbG9yIG5hbWU9InRpdGxlX2Jhcl9ncmFkaWVudF9lbmQiPiMwMDAwMDAwMDwvY29sb3I+Ci0gICAgPGNvbG9yIG5hbWU9ImJvdHRvbV9iYXJfYmFja2dyb3VuZCI+IzQwMjAyMDIwPC9jb2xvcj4KLTwvcmVzb3VyY2VzPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3BhY2thZ2VzL01lZGlhQ29tcG9uZW50cy9yZXMvdmFsdWVzL2RpbWVucy54bWwgYi9wYWNrYWdlcy9NZWRpYUNvbXBvbmVudHMvcmVzL3ZhbHVlcy9kaW1lbnMueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyZDdiMDIyLi4wMDAwMDAwCi0tLSBhL3BhY2thZ2VzL01lZGlhQ29tcG9uZW50cy9yZXMvdmFsdWVzL2RpbWVucy54bWwKKysrIC9kZXYvbnVsbApAQCAtMSw3MiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ1dGYtOCI/PgotPCEtLSBDb3B5cmlnaHQgMjAxOCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0Ci0KLSAgICAgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7Ci0gICAgIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KLSAgICAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0KLSAgICAgICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLQotICAgICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCi0gICAgIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCi0gICAgIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgotICAgICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCi0gICAgIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgotLS0+Ci0KLTxyZXNvdXJjZXM+Ci0gICAgPCEtLSBEaWFsb2cgc2l6ZSAtLT4KLSAgICA8ZWF0LWNvbW1lbnQgLz4KLSAgICA8IS0tIFRoZSBwbGF0Zm9ybSdzIGRlc2lyZWQgZml4ZWQgd2lkdGggZm9yIGEgZGlhbG9nIGFsb25nIHRoZSBtYWpvciBheGlzCi0gICAgICAgICAodGhlIHNjcmVlbiBpcyBpbiBsYW5kc2NhcGUpLiBUaGlzIG1heSBiZSBlaXRoZXIgYSBmcmFjdGlvbiBvciBhIGRpbWVuc2lvbi4tLT4KLSAgICA8ZGltZW4gbmFtZT0ibXJfZGlhbG9nX2ZpeGVkX3dpZHRoX21ham9yIj4zMjBkcDwvZGltZW4+Ci0gICAgPCEtLSBUaGUgcGxhdGZvcm0ncyBkZXNpcmVkIGZpeGVkIHdpZHRoIGZvciBhIGRpYWxvZyBhbG9uZyB0aGUgbWlub3IgYXhpcwotICAgICAgICAgKHRoZSBzY3JlZW4gaXMgaW4gcG9ydHJhaXQpLiBUaGlzIG1heSBiZSBlaXRoZXIgYSBmcmFjdGlvbiBvciBhIGRpbWVuc2lvbi4tLT4KLSAgICA8ZGltZW4gbmFtZT0ibXJfZGlhbG9nX2ZpeGVkX3dpZHRoX21pbm9yIj4zMjBkcDwvZGltZW4+Ci0KLSAgICA8IS0tIE1lZGlhUm91dGVDb250cm9sbGVyJ3Mgdm9sdW1lIGdyb3VwIGxpc3QgLS0+Ci0gICAgPGVhdC1jb21tZW50IC8+Ci0gICAgPCEtLSBNYXhpbXVtIGhlaWdodCBvZiB2b2x1bWUgZ3JvdXAgbGlzdC4gLS0+Ci0gICAgPGRpbWVuIG5hbWU9Im1yX2NvbnRyb2xsZXJfdm9sdW1lX2dyb3VwX2xpc3RfbWF4X2hlaWdodCI+Mjg4ZHA8L2RpbWVuPgotICAgIDwhLS0gSGVpZ2h0IG9mIHZvbHVtZSBncm91cCBpdGVtLiAtLT4KLSAgICA8ZGltZW4gbmFtZT0ibXJfY29udHJvbGxlcl92b2x1bWVfZ3JvdXBfbGlzdF9pdGVtX2hlaWdodCI+NjhkcDwvZGltZW4+Ci0gICAgPCEtLSBTaXplIG9mIGFuIGl0ZW0ncyBpY29uLiAtLT4KLSAgICA8ZGltZW4gbmFtZT0ibXJfY29udHJvbGxlcl92b2x1bWVfZ3JvdXBfbGlzdF9pdGVtX2ljb25fc2l6ZSI+MjRkcDwvZGltZW4+Ci0KLSAgICA8ZGltZW4gbmFtZT0ibXJfY29udHJvbGxlcl92b2x1bWVfZ3JvdXBfbGlzdF9wYWRkaW5nX3RvcCI+MTZkcDwvZGltZW4+Ci0gICAgPCEtLSBHcm91cCBsaXN0IGV4cGFuZC9jb2xsYXBzZSBhbmltYXRpb24gZHVyYXRpb24uIC0tPgotICAgIDxpbnRlZ2VyIG5hbWU9Im1yX2NvbnRyb2xsZXJfdm9sdW1lX2dyb3VwX2xpc3RfYW5pbWF0aW9uX2R1cmF0aW9uX21zIj40MDA8L2ludGVnZXI+Ci0gICAgPCEtLSBHcm91cCBsaXN0IGZhZGUgaW4gYW5pbWF0aW9uIGR1cmF0aW9uLiAtLT4KLSAgICA8aW50ZWdlciBuYW1lPSJtcl9jb250cm9sbGVyX3ZvbHVtZV9ncm91cF9saXN0X2ZhZGVfaW5fZHVyYXRpb25fbXMiPjQwMDwvaW50ZWdlcj4KLSAgICA8IS0tIEdyb3VwIGxpc3QgZmFkZSBvdXQgYW5pbWF0aW9uIGR1cmF0aW9uLiAtLT4KLSAgICA8aW50ZWdlciBuYW1lPSJtcl9jb250cm9sbGVyX3ZvbHVtZV9ncm91cF9saXN0X2ZhZGVfb3V0X2R1cmF0aW9uX21zIj4yMDA8L2ludGVnZXI+Ci0KLSAgICA8ZGltZW4gbmFtZT0ibWN2Ml9lbWJlZGRlZF9zZXR0aW5nc193aWR0aCI+MTUwZHA8L2RpbWVuPgotICAgIDxkaW1lbiBuYW1lPSJtY3YyX2VtYmVkZGVkX3NldHRpbmdzX2hlaWdodCI+MzZkcDwvZGltZW4+Ci0gICAgPGRpbWVuIG5hbWU9Im1jdjJfZW1iZWRkZWRfc2V0dGluZ3NfaWNvbl9zaXplIj4yMGRwPC9kaW1lbj4KLSAgICA8ZGltZW4gbmFtZT0ibWN2Ml9lbWJlZGRlZF9zZXR0aW5nc190ZXh0X2hlaWdodCI+MThkcDwvZGltZW4+Ci0gICAgPGRpbWVuIG5hbWU9Im1jdjJfZW1iZWRkZWRfc2V0dGluZ3NfbWFpbl90ZXh0X3NpemUiPjEyc3A8L2RpbWVuPgotICAgIDxkaW1lbiBuYW1lPSJtY3YyX2VtYmVkZGVkX3NldHRpbmdzX3N1Yl90ZXh0X3NpemUiPjEwc3A8L2RpbWVuPgotICAgIDxkaW1lbiBuYW1lPSJtY3YyX2Z1bGxfc2V0dGluZ3Nfd2lkdGgiPjIyNWRwPC9kaW1lbj4KLSAgICA8ZGltZW4gbmFtZT0ibWN2Ml9mdWxsX3NldHRpbmdzX2hlaWdodCI+NTRkcDwvZGltZW4+Ci0gICAgPGRpbWVuIG5hbWU9Im1jdjJfZnVsbF9zZXR0aW5nc19pY29uX3NpemUiPjMwZHA8L2RpbWVuPgotICAgIDxkaW1lbiBuYW1lPSJtY3YyX2Z1bGxfc2V0dGluZ3NfdGV4dF9oZWlnaHQiPjI3ZHA8L2RpbWVuPgotICAgIDxkaW1lbiBuYW1lPSJtY3YyX2Z1bGxfc2V0dGluZ3NfbWFpbl90ZXh0X3NpemUiPjE2c3A8L2RpbWVuPgotICAgIDxkaW1lbiBuYW1lPSJtY3YyX2Z1bGxfc2V0dGluZ3Nfc3ViX3RleHRfc2l6ZSI+MTNzcDwvZGltZW4+Ci0gICAgPGRpbWVuIG5hbWU9Im1jdjJfc2V0dGluZ3Nfb2Zmc2V0Ij44ZHA8L2RpbWVuPgotCi0gICAgPGRpbWVuIG5hbWU9Im1jdjJfdHJhbnNwb3J0X2NvbnRyb2xzX3BhZGRpbmciPjRkcDwvZGltZW4+Ci0gICAgPGRpbWVuIG5hbWU9Im1jdjJfcGF1c2VfaWNvbl9zaXplIj4zNmRwPC9kaW1lbj4KLSAgICA8ZGltZW4gbmFtZT0ibWN2Ml9mdWxsX2ljb25fc2l6ZSI+MjhkcDwvZGltZW4+Ci0gICAgPGRpbWVuIG5hbWU9Im1jdjJfZW1iZWRkZWRfaWNvbl9zaXplIj4yNGRwPC9kaW1lbj4KLSAgICA8ZGltZW4gbmFtZT0ibWN2Ml9taW5pbWFsX2ljb25fc2l6ZSI+MjRkcDwvZGltZW4+Ci0gICAgPGRpbWVuIG5hbWU9Im1jdjJfaWNvbl9tYXJnaW4iPjEwZHA8L2RpbWVuPgotCi0gICAgPGRpbWVuIG5hbWU9Im1jdjJfZnVsbF9hbGJ1bV9pbWFnZV9wb3J0cmFpdF9zaXplIj4yMzJkcDwvZGltZW4+Ci0gICAgPGRpbWVuIG5hbWU9Im1jdjJfZnVsbF9hbGJ1bV9pbWFnZV9sYW5kc2NhcGVfc2l6ZSI+MTc2ZHA8L2RpbWVuPgotCi0gICAgPGRpbWVuIG5hbWU9Im1jdjJfY3VzdG9tX3Byb2dyZXNzX21heF9zaXplIj4yZHA8L2RpbWVuPgotICAgIDxkaW1lbiBuYW1lPSJtY3YyX2N1c3RvbV9wcm9ncmVzc190aHVtYl9zaXplIj4xMmRwPC9kaW1lbj4KLSAgICA8ZGltZW4gbmFtZT0ibWN2Ml9idWZmZXJfdmlld19oZWlnaHQiPjVkcDwvZGltZW4+Ci0gICAgPCEtLSBUT0RPOiBhZGp1c3QgYm90dG9tIGJhciB2aWV3IC0tPgotPC9yZXNvdXJjZXM+CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9NZWRpYUNvbXBvbmVudHMvcmVzL3ZhbHVlcy9zdHJpbmdzLnhtbCBiL3BhY2thZ2VzL01lZGlhQ29tcG9uZW50cy9yZXMvdmFsdWVzL3N0cmluZ3MueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyNTk3YTNiLi4wMDAwMDAwCi0tLSBhL3BhY2thZ2VzL01lZGlhQ29tcG9uZW50cy9yZXMvdmFsdWVzL3N0cmluZ3MueG1sCisrKyAvZGV2L251bGwKQEAgLTEsMTU3ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9InV0Zi04Ij8+Ci08IS0tIENvcHlyaWdodCAyMDE4IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKLQotICAgICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKLSAgICAgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgotICAgICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLQotICAgICAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotCi0gICAgIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKLSAgICAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKLSAgICAgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCi0gICAgIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKLSAgICAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCi0tLT4KLQotPHJlc291cmNlcyB4bWxuczphbmRyb2lkPSJodHRwOi8vc2NoZW1hcy5hbmRyb2lkLmNvbS9hcGsvcmVzL2FuZHJvaWQiCi0gICAgeG1sbnM6eGxpZmY9InVybjpvYXNpczpuYW1lczp0Yzp4bGlmZjpkb2N1bWVudDoxLjIiPgotCi0gICAgPCEtLSBOYW1lIGZvciB0aGUgZGVmYXVsdCBzeXN0ZW0gcm91dGUgcHJpb3IgdG8gSmVsbHliZWFuLiBbQ0hBUiBMSU1JVD0zMF0gLS0+Ci0gICAgPHN0cmluZyBuYW1lPSJtcl9zeXN0ZW1fcm91dGVfbmFtZSI+U3lzdGVtPC9zdHJpbmc+Ci0KLSAgICA8IS0tIE5hbWUgZm9yIHRoZSB1c2VyIHJvdXRlIGNhdGVnb3J5IGNyZWF0ZWQgd2hlbiBwdWJsaXNoaW5nIHJvdXRlcyB0byB0aGUgc3lzdGVtIGluIEplbGx5YmVhbiBhbmQgYWJvdmUuIFtDSEFSIExJTUlUPTMwXSAtLT4KLSAgICA8c3RyaW5nIG5hbWU9Im1yX3VzZXJfcm91dGVfY2F0ZWdvcnlfbmFtZSI+RGV2aWNlczwvc3RyaW5nPgotCi0gICAgPCEtLSBTdHJpbmcgdG8gYmUgc2hvd24gYXMgYSB0b29sdGlwIG9mIE1lZGlhUm91dGVCdXR0b24KLSAgICAgICAgQ2FzdCBpcyB0aGUgc3RhbmRhcmQgYW5kcm9pZCB2ZXJiIGZvciBzZW5kaW5nIGNvbnRlbnQgdG8gYSByZW1vdGUgZGV2aWNlLiBbQ0hBUiBMSU1JVD01MF0gLS0+Ci0gICAgPHN0cmluZyBuYW1lPSJtcl9idXR0b25fY29udGVudF9kZXNjcmlwdGlvbiI+Q2FzdCBidXR0b248L3N0cmluZz4KLQotICAgIDwhLS0gQ29udGVudCBkZXNjcmlwdGlvbiBvZiBhIE1lZGlhUm91dGVCdXR0b24gZm9yIGFjY2Vzc2liaWxpdHkgc3VwcG9ydCB3aGVuIG5vIHJlbW90ZSBkZXZpY2UgaXMgY29ubmVjdGVkLgotICAgICAgICBDYXN0IGlzIHRoZSBzdGFuZGFyZCBhbmRyb2lkIHZlcmIgZm9yIHNlbmRpbmcgY29udGVudCB0byBhIHJlbW90ZSBkZXZpY2UuIFtDSEFSIExJTUlUPU5PTkVdIC0tPgotICAgIDxzdHJpbmcgbmFtZT0ibXJfY2FzdF9idXR0b25fZGlzY29ubmVjdGVkIj5DYXN0IGJ1dHRvbi4gRGlzY29ubmVjdGVkPC9zdHJpbmc+Ci0KLSAgICA8IS0tIENvbnRlbnQgZGVzY3JpcHRpb24gb2YgYSBNZWRpYVJvdXRlQnV0dG9uIGZvciBhY2Nlc3NpYmlsaXR5IHN1cHBvcnQgd2hpbGUgY29ubmVjdGluZyB0byBhIHJlbW90ZSBkZXZpY2UuCi0gICAgICAgIENhc3QgaXMgdGhlIHN0YW5kYXJkIGFuZHJvaWQgdmVyYiBmb3Igc2VuZGluZyBjb250ZW50IHRvIGEgcmVtb3RlIGRldmljZS4gW0NIQVIgTElNSVQ9Tk9ORV0gLS0+Ci0gICAgPHN0cmluZyBuYW1lPSJtcl9jYXN0X2J1dHRvbl9jb25uZWN0aW5nIj5DYXN0IGJ1dHRvbi4gQ29ubmVjdGluZzwvc3RyaW5nPgotCi0gICAgPCEtLSBDb250ZW50IGRlc2NyaXB0aW9uIG9mIGEgTWVkaWFSb3V0ZUJ1dHRvbiBmb3IgYWNjZXNzaWJpbGl0eSBzdXBwb3J0IHdoZW4gYSByZW1vdGUgZGV2aWNlIGlzIGNvbm5lY3RlZC4KLSAgICAgICAgQ2FzdCBpcyB0aGUgc3RhbmRhcmQgYW5kcm9pZCB2ZXJiIGZvciBzZW5kaW5nIGNvbnRlbnQgdG8gYSByZW1vdGUgZGV2aWNlLiBbQ0hBUiBMSU1JVD1OT05FXSAtLT4KLSAgICA8c3RyaW5nIG5hbWU9Im1yX2Nhc3RfYnV0dG9uX2Nvbm5lY3RlZCI+Q2FzdCBidXR0b24uIENvbm5lY3RlZDwvc3RyaW5nPgotCi0gICAgPCEtLSBUaXRsZSBvZiB0aGUgbWVkaWEgcm91dGUgY2hvb3NlciBkaWFsb2cuIFtDSEFSIExJTUlUPTMwXSAtLT4KLSAgICA8c3RyaW5nIG5hbWU9Im1yX2Nob29zZXJfdGl0bGUiPkNhc3QgdG88L3N0cmluZz4KLQotICAgIDwhLS0gUGxhY2Vob2xkZXIgdGV4dCB0byBzaG93IHdoZW4gbm8gZGV2aWNlcyBoYXZlIGJlZW4gZm91bmQuIFtDSEFSIExJTUlUPTUwXSAtLT4KLSAgICA8c3RyaW5nIG5hbWU9Im1yX2Nob29zZXJfc2VhcmNoaW5nIj5GaW5kaW5nIGRldmljZXM8L3N0cmluZz4KLQotICAgIDwhLS0gQnV0dG9uIHRvIGRpc2Nvbm5lY3QgZnJvbSBhIG1lZGlhIHJvdXRlLiAgW0NIQVIgTElNSVQ9MzBdIC0tPgotICAgIDxzdHJpbmcgbmFtZT0ibXJfY29udHJvbGxlcl9kaXNjb25uZWN0Ij5EaXNjb25uZWN0PC9zdHJpbmc+Ci0KLSAgICA8IS0tIEJ1dHRvbiB0byBzdG9wIHBsYXliYWNrIGFuZCBkaXNjb25uZWN0IGZyb20gYSBtZWRpYSByb3V0ZS4gW0NIQVIgTElNSVQ9MzBdIC0tPgotICAgIDxzdHJpbmcgbmFtZT0ibXJfY29udHJvbGxlcl9zdG9wX2Nhc3RpbmciPlN0b3AgY2FzdGluZzwvc3RyaW5nPgotCi0gICAgPCEtLSBDb250ZW50IGRlc2NyaXB0aW9uIGZvciBhY2Nlc3NpYmlsaXR5IChub3Qgc2hvd24gb24gdGhlIHNjcmVlbik6IGRpYWxvZyBjbG9zZSBidXR0b24uIFtDSEFSIExJTUlUPU5PTkVdIC0tPgotICAgIDxzdHJpbmcgbmFtZT0ibXJfY29udHJvbGxlcl9jbG9zZV9kZXNjcmlwdGlvbiI+Q2xvc2U8L3N0cmluZz4KLQotICAgIDwhLS0gQ29udGVudCBkZXNjcmlwdGlvbiBmb3IgYWNjZXNzaWJpbGl0eSAobm90IHNob3duIG9uIHRoZSBzY3JlZW4pOiBtZWRpYSBwbGF5IGJ1dHRvbi4gW0NIQVIgTElNSVQ9Tk9ORV0gLS0+Ci0gICAgPHN0cmluZyBuYW1lPSJtcl9jb250cm9sbGVyX3BsYXkiPlBsYXk8L3N0cmluZz4KLQotICAgIDwhLS0gQ29udGVudCBkZXNjcmlwdGlvbiBmb3IgYWNjZXNzaWJpbGl0eSAobm90IHNob3duIG9uIHRoZSBzY3JlZW4pOiBtZWRpYSBwYXVzZSBidXR0b24uIFtDSEFSIExJTUlUPU5PTkVdIC0tPgotICAgIDxzdHJpbmcgbmFtZT0ibXJfY29udHJvbGxlcl9wYXVzZSI+UGF1c2U8L3N0cmluZz4KLQotICAgIDwhLS0gQ29udGVudCBkZXNjcmlwdGlvbiBmb3IgYWNjZXNzaWJpbGl0eSAobm90IHNob3duIG9uIHRoZSBzY3JlZW4pOiBtZWRpYSBzdG9wIGJ1dHRvbi4gW0NIQVIgTElNSVQ9Tk9ORV0gLS0+Ci0gICAgPHN0cmluZyBuYW1lPSJtcl9jb250cm9sbGVyX3N0b3AiPlN0b3A8L3N0cmluZz4KLQotICAgIDwhLS0gQ29udGVudCBkZXNjcmlwdGlvbiBmb3IgYWNjZXNzaWJpbGl0eSAobm90IHNob3duIG9uIHRoZSBzY3JlZW4pOiBncm91cCBleHBhbmQgYnV0dG9uLiBQcmVzc2luZyBidXR0b24gc2hvd3MgZ3JvdXAgbWVtYmVycyBvZiBhIHNlbGVjdGVkIHJvdXRlIGdyb3VwLiBbQ0hBUiBMSU1JVD1OT05FXSAtLT4KLSAgICA8c3RyaW5nIG5hbWU9Im1yX2NvbnRyb2xsZXJfZXhwYW5kX2dyb3VwIj5FeHBhbmQ8L3N0cmluZz4KLQotICAgIDwhLS0gQ29udGVudCBkZXNjcmlwdGlvbiBmb3IgYWNjZXNzaWJpbGl0eSAobm90IHNob3duIG9uIHRoZSBzY3JlZW4pOiBncm91cCBjb2xsYXBzZSBidXR0b24uIFByZXNzaW5nIGJ1dHRvbiBoaWRlcyBncm91cCBtZW1iZXJzIG9mIGEgc2VsZWN0ZWQgcm91dGUgZ3JvdXAuIFtDSEFSIExJTUlUPU5PTkVdIC0tPgotICAgIDxzdHJpbmcgbmFtZT0ibXJfY29udHJvbGxlcl9jb2xsYXBzZV9ncm91cCI+Q29sbGFwc2U8L3N0cmluZz4KLQotICAgIDwhLS0gQ29udGVudCBkZXNjcmlwdGlvbiBmb3IgYWNjZXNzaWJpbGl0eSAobm90IHNob3duIG9uIHRoZSBzY3JlZW4pOiBhbGJ1bSBhcnQgYnV0dG9uLiBDbGlja2luZyBvbiB0aGUgYWxidW0gYXJ0IHRha2VzIHVzZXIgdG8gYSBwcmVkZWZpbmVkIGFjdGl2aXR5IHBlciBtZWRpYSBhcHAuIFtDSEFSIExJTUlUPTUwXSAtLT4KLSAgICA8c3RyaW5nIG5hbWU9Im1yX2NvbnRyb2xsZXJfYWxidW1fYXJ0Ij5BbGJ1bSBhcnQ8L3N0cmluZz4KLQotICAgIDwhLS0gQ29udGVudCBkZXNjcmlwdGlvbiBmb3IgYWNjZXNzaWJpbGl0eSAobm90IHNob3duIG9uIHRoZSBzY3JlZW4pOiB2b2x1bWUgc2xpZGVyLiBbQ0hBUiBMSU1JVD1OT05FXSAtLT4KLSAgICA8c3RyaW5nIG5hbWU9Im1yX2NvbnRyb2xsZXJfdm9sdW1lX3NsaWRlciI+Vm9sdW1lIHNsaWRlcjwvc3RyaW5nPgotCi0gICAgPCEtLSBQbGFjZWhvbGRlciB0ZXh0IHRvIHNob3cgd2hlbiBubyBtZWRpYSBoYXZlIGJlZW4gc2VsZWN0ZWQgZm9yIHBsYXliYWNrLiBbQ0hBUiBMSU1JVD01MF0gLS0+Ci0gICAgPHN0cmluZyBuYW1lPSJtcl9jb250cm9sbGVyX25vX21lZGlhX3NlbGVjdGVkIj5ObyBtZWRpYSBzZWxlY3RlZDwvc3RyaW5nPgotCi0gICAgPCEtLSBQbGFjZWhvbGRlciB0ZXh0IHRvIHNob3cgd2hlbiBubyB0aXRsZS9kZXNjcmlwdGlvbiBoYXZlIGJlZW4gZm91bmQgZm9yIGEgZ2l2ZW4gc29uZy92aWRlby4gW0NIQVIgTElNSVQ9NTBdIC0tPgotICAgIDxzdHJpbmcgbmFtZT0ibXJfY29udHJvbGxlcl9ub19pbmZvX2F2YWlsYWJsZSI+Tm8gaW5mbyBhdmFpbGFibGU8L3N0cmluZz4KLQotICAgIDwhLS0gUGxhY2Vob2xkZXIgdGV4dCBpbmRpY2F0aW5nIHRoYXQgdGhlIHVzZXIgaXMgY3VycmVudGx5IGNhc3Rpbmcgc2NyZWVuLiBbQ0hBUiBMSU1JVD01MF0gLS0+Ci0gICAgPHN0cmluZyBuYW1lPSJtcl9jb250cm9sbGVyX2Nhc3Rpbmdfc2NyZWVuIj5DYXN0aW5nIHNjcmVlbjwvc3RyaW5nPgotCi0gICAgPCEtLSBUZXh0IGZvciBlcnJvciBhbGVydCB3aGVuIGEgdmlkZW8gY29udGFpbmVyIGlzIG5vdCB2YWxpZCBmb3IgcHJvZ3Jlc3NpdmUgZG93bmxvYWQvcGxheWJhY2suIC0tPgotICAgIDxzdHJpbmcgbmFtZT0iVmlkZW9WaWV3Ml9lcnJvcl90ZXh0X2ludmFsaWRfcHJvZ3Jlc3NpdmVfcGxheWJhY2siPlRoaXMgdmlkZW8gaXNuXCd0IHZhbGlkIGZvciBzdHJlYW1pbmcgdG8gdGhpcyBkZXZpY2UuPC9zdHJpbmc+Ci0gICAgPCEtLSBUZXh0IGZvciBlcnJvciBhbGVydCB3aGVuIGEgdmlkZW8gY2Fubm90IGJlIHBsYXllZC4gSXQgY2FuIGJlIHVzZWQgYnkgYW55IGFwcC4gLS0+Ci0gICAgPHN0cmluZyBuYW1lPSJWaWRlb1ZpZXcyX2Vycm9yX3RleHRfdW5rbm93biI+Q2FuXCd0IHBsYXkgdGhpcyB2aWRlby48L3N0cmluZz4KLSAgICA8IS0tIEJ1dHRvbiB0byBjbG9zZSBlcnJvciBhbGVydCB3aGVuIGEgdmlkZW8gY2Fubm90IGJlIHBsYXllZC4gLS0+Ci0gICAgPHN0cmluZyBuYW1lPSJWaWRlb1ZpZXcyX2Vycm9yX2J1dHRvbiI+T0s8L3N0cmluZz4KLQotICAgIDwhLS0gVGV4dCBmb3IgZGlzcGxheWluZyBhZCBza2lwIHdhaXQgdGltZS4gLS0+Ci0gICAgPHN0cmluZyBuYW1lPSJNZWRpYUNvbnRyb2xWaWV3Ml9hZF9za2lwX3dhaXRfdGltZSI+Ci0gICAgICAgIFlvdSBjYW4gc2tpcCBBZCBpbiA8eGxpZmY6ZyBpZD0id2FpdF90aW1lIiBleGFtcGxlPSI1Ij4lMSRkPC94bGlmZjpnPnMKLSAgICA8L3N0cmluZz4KLSAgICA8IS0tIFRleHQgZm9yIGRpc3BsYXlpbmcgYWQgdG90YWwgcmVtYWluaW5nIHRpbWUuIC0tPgotICAgIDxzdHJpbmcgbmFtZT0iTWVkaWFDb250cm9sVmlldzJfYWRfcmVtYWluaW5nX3RpbWUiPgotICAgICAgICBBZCDCtyA8eGxpZmY6ZyBpZD0icmVtYWluaW5nX3RpbWUiIGV4YW1wbGU9IjE6MTUiPiUxJHM8L3hsaWZmOmc+IHJlbWFpbmluZwotICAgIDwvc3RyaW5nPgotICAgIDwhLS0gUGxhY2Vob2xkZXIgdGV4dCBpbmRpY2F0aW5nIHRoYXQgdGhlIHVzZXIgY2FuIHByZXNzIHRoZSBidXR0b24gdG8gZ28gdG8gYW4gZXh0ZXJuYWwgd2Vic2l0ZS4gLS0+Ci0gICAgPHN0cmluZyBuYW1lPSJNZWRpYUNvbnRyb2xWaWV3Ml9hZF90ZXh0Ij5WaXNpdCBBZHZlcnRpc2VyPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJNZWRpYUNvbnRyb2xWaWV3Ml9zdWJ0aXRsZV90ZXh0Ij5DbG9zZWQgY2FwdGlvbjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iTWVkaWFDb250cm9sVmlldzJfc3VidGl0bGVfb2ZmX3RleHQiPk9mZjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iTWVkaWFDb250cm9sVmlldzJfYXVkaW9fdHJhY2tfdGV4dCI+QXVkaW8gdHJhY2s8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Ik1lZGlhQ29udHJvbFZpZXcyX2F1ZGlvX3RyYWNrX25vbmVfdGV4dCI+Tm9uZTwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iTWVkaWFDb250cm9sVmlldzJfdmlkZW9fcXVhbGl0eV90ZXh0Ij5WaWRlbyBxdWFsaXR5PC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJNZWRpYUNvbnRyb2xWaWV3Ml92aWRlb19xdWFsaXR5X2F1dG9fdGV4dCI+QXV0bzwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iTWVkaWFDb250cm9sVmlldzJfaGVscF90ZXh0Ij5IZWxwICZhbXA7IGZlZWRiYWNrPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJNZWRpYUNvbnRyb2xWaWV3Ml9wbGF5YmFja19zcGVlZF90ZXh0Ij5QbGF5YmFjayBzcGVlZDwvc3RyaW5nPgotICAgIDxzdHJpbmctYXJyYXkgbmFtZT0iTWVkaWFDb250cm9sVmlldzJfcGxheWJhY2tfc3BlZWRzIj4KLSAgICAgICAgPGl0ZW0+MC4yNXg8L2l0ZW0+Ci0gICAgICAgIDxpdGVtPjAuNXg8L2l0ZW0+Ci0gICAgICAgIDxpdGVtPjAuNzV4PC9pdGVtPgotICAgICAgICA8aXRlbT5Ob3JtYWw8L2l0ZW0+Ci0gICAgICAgIDxpdGVtPjEuMjV4PC9pdGVtPgotICAgICAgICA8aXRlbT4xLjV4PC9pdGVtPgotICAgICAgICA8aXRlbT4yeDwvaXRlbT4KLSAgICA8L3N0cmluZy1hcnJheT4KLSAgICA8IS0tIFBsYWNlaG9sZGVyIHRleHQgZm9yIGRpc3BsYXlpbmcgdGltZS4gVXNlZCB0byBjYWxjdWxhdGUgd2hpY2ggc2l6ZSBsYXlvdXQgdG8gdXNlLiAtLT4KLSAgICA8c3RyaW5nIG5hbWU9Ik1lZGlhQ29udHJvbFZpZXcyX3RpbWVfcGxhY2Vob2xkZXIiPjAwOjAwOjAwPC9zdHJpbmc+Ci0KLSAgICA8IS0tIFRleHQgZm9yIGRpc3BsYXlpbmcgc3VidGl0bGUgdHJhY2sgbnVtYmVyLiAtLT4KLSAgICA8c3RyaW5nIG5hbWU9Ik1lZGlhQ29udHJvbFZpZXcyX3N1YnRpdGxlX3RyYWNrX251bWJlcl90ZXh0Ij4KLSAgICAgICAgVHJhY2sgPHhsaWZmOmcgaWQ9InRyYWNrX251bWJlciIgZXhhbXBsZT0iMSI+JTEkczwveGxpZmY6Zz4KLSAgICA8L3N0cmluZz4KLSAgICA8IS0tIFRleHQgZm9yIGRpc3BsYXlpbmcgYXVkaW8gdHJhY2sgbnVtYmVyLiAtLT4KLSAgICA8c3RyaW5nIG5hbWU9Ik1lZGlhQ29udHJvbFZpZXcyX2F1ZGlvX3RyYWNrX251bWJlcl90ZXh0Ij4KLSAgICAgICAgVHJhY2sgPHhsaWZmOmcgaWQ9ImF1ZGlvX251bWJlciIgZXhhbXBsZT0iMSI+JTEkczwveGxpZmY6Zz4KLSAgICA8L3N0cmluZz4KLSAgICA8IS0tIFRleHQgZm9yIGRpc3BsYXlpbmcgdW5rbm93biBzb25nIHRpdGxlLiAtLT4KLSAgICA8c3RyaW5nIG5hbWU9Im1jdjJfbXVzaWNfdGl0bGVfdW5rbm93bl90ZXh0Ij5Tb25nIHRpdGxlIHVua25vd248L3N0cmluZz4KLSAgICA8IS0tIFRleHQgZm9yIGRpc3BsYXlpbmcgdW5rbm93biBhcnRpc3QgbmFtZS4gLS0+Ci0gICAgPHN0cmluZyBuYW1lPSJtY3YyX211c2ljX2FydGlzdF91bmtub3duX3RleHQiPkFydGlzdCB1bmtub3duPC9zdHJpbmc+Ci0KLSAgICA8IS0tQ29udGVudCBEZXNjcmlwdGlvbnMgLS0+Ci0gICAgPHN0cmluZyBuYW1lPSJtY3YyX2JhY2tfYnV0dG9uX2Rlc2MiPkJhY2s8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im1jdjJfb3ZlcmZsb3dfbGVmdF9idXR0b25fZGVzYyI+U2VlIG1vcmUgYnV0dG9uczwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibWN2Ml9vdmVyZmxvd19yaWdodF9idXR0b25fZGVzYyI+QmFjayB0byBwcmV2aW91cyBidXR0b24gbGlzdDwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibWN2Ml9zZWVrX2Jhcl9kZXNjIj5QbGF5YmFjayBwcm9ncmVzczwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibWN2Ml9zZXR0aW5nc19idXR0b25fZGVzYyI+U2V0dGluZ3M8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im1jdjJfdmlkZW9fcXVhbGl0eV9idXR0b25fZGVzYyI+VmlkZW8gUXVhbGl0eSBTZWxlY3Rpb248L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im1jdjJfY2NfaXNfb24iPlN1YnRpdGxlIGlzIG9uLiBDbGljayB0byBoaWRlIGl0Ljwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibWN2Ml9jY19pc19vZmYiPlN1YnRpdGxlIGlzIG9mZi4gQ2xpY2sgdG8gc2hvdyBpdC48L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im1jdjJfcmVwbGF5X2J1dHRvbl9kZXNjIj5SZXBsYXk8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im1jdjJfcGxheV9idXR0b25fZGVzYyI+UGxheTwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibWN2Ml9wYXVzZV9idXR0b25fZGVzYyI+UGF1c2U8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im1jdjJfcHJldmlvdXNfYnV0dG9uX2Rlc2MiPlByZXZpb3VzIG1lZGlhPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJtY3YyX25leHRfYnV0dG9uX2Rlc2MiPk5leHQgbWVkaWE8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im1jdjJfcmV3aW5kX2J1dHRvbl9kZXNjIj5SZXdpbmQgYnkgMTAgc2Vjb25kczwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibWN2Ml9mZndkX2J1dHRvbl9kZXNjIj5HbyBmb3J3YXJkIGJ5IDMwIHNlY29uZHM8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im1jdjJfbGF1bmNoX2J1dHRvbl9kZXNjIj5MYXVuY2ggTGluazwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibWN2Ml9tdXRlZF9idXR0b25fZGVzYyI+TXV0ZWQuIENsaWNrIHRvIHVubXV0ZTwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibWN2Ml91bm11dGVkX2J1dHRvbl9kZXNjIj5DbGljayB0byBNdXRlPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJtY3YyX2Z1bGxfc2NyZWVuX2J1dHRvbl9kZXNjIj5GdWxsIHNjcmVlbjwvc3RyaW5nPgotPC9yZXNvdXJjZXM+CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9NZWRpYUNvbXBvbmVudHMvcmVzL3ZhbHVlcy9zdHlsZS54bWwgYi9wYWNrYWdlcy9NZWRpYUNvbXBvbmVudHMvcmVzL3ZhbHVlcy9zdHlsZS54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDViOWE4ZWUuLjAwMDAwMDAKLS0tIGEvcGFja2FnZXMvTWVkaWFDb21wb25lbnRzL3Jlcy92YWx1ZXMvc3R5bGUueG1sCisrKyAvZGV2L251bGwKQEAgLTEsMjIxICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9InV0Zi04Ij8+Ci08cmVzb3VyY2VzPgotICAgIDxzdHlsZSBuYW1lPSJGdWxsVHJhbnNwb3J0Q29udHJvbHNCdXR0b24iPgotICAgICAgICA8aXRlbSBuYW1lPSJhbmRyb2lkOmJhY2tncm91bmQiPkBudWxsPC9pdGVtPgotICAgICAgICA8aXRlbSBuYW1lPSJhbmRyb2lkOmxheW91dF9tYXJnaW4iPkBkaW1lbi9tY3YyX2ljb25fbWFyZ2luPC9pdGVtPgotICAgICAgICA8aXRlbSBuYW1lPSJhbmRyb2lkOnNjYWxlVHlwZSI+Zml0WFk8L2l0ZW0+Ci0gICAgPC9zdHlsZT4KLQotICAgIDxzdHlsZSBuYW1lPSJGdWxsVHJhbnNwb3J0Q29udHJvbHNCdXR0b24uUHJldmlvdXMiPgotICAgICAgICA8aXRlbSBuYW1lPSJhbmRyb2lkOnNyYyI+QGRyYXdhYmxlL2ljX3NraXBfcHJldmlvdXM8L2l0ZW0+Ci0gICAgICAgIDxpdGVtIG5hbWU9ImFuZHJvaWQ6bGF5b3V0X3dpZHRoIj5AZGltZW4vbWN2Ml9mdWxsX2ljb25fc2l6ZTwvaXRlbT4KLSAgICAgICAgPGl0ZW0gbmFtZT0iYW5kcm9pZDpsYXlvdXRfaGVpZ2h0Ij5AZGltZW4vbWN2Ml9mdWxsX2ljb25fc2l6ZTwvaXRlbT4KLSAgICAgICAgPGl0ZW0gbmFtZT0iYW5kcm9pZDpjb250ZW50RGVzY3JpcHRpb24iPkBzdHJpbmcvbWN2Ml9wcmV2aW91c19idXR0b25fZGVzYzwvaXRlbT4KLSAgICA8L3N0eWxlPgotCi0gICAgPHN0eWxlIG5hbWU9IkZ1bGxUcmFuc3BvcnRDb250cm9sc0J1dHRvbi5OZXh0Ij4KLSAgICAgICAgPGl0ZW0gbmFtZT0iYW5kcm9pZDpzcmMiPkBkcmF3YWJsZS9pY19za2lwX25leHQ8L2l0ZW0+Ci0gICAgICAgIDxpdGVtIG5hbWU9ImFuZHJvaWQ6bGF5b3V0X3dpZHRoIj5AZGltZW4vbWN2Ml9mdWxsX2ljb25fc2l6ZTwvaXRlbT4KLSAgICAgICAgPGl0ZW0gbmFtZT0iYW5kcm9pZDpsYXlvdXRfaGVpZ2h0Ij5AZGltZW4vbWN2Ml9mdWxsX2ljb25fc2l6ZTwvaXRlbT4KLSAgICAgICAgPGl0ZW0gbmFtZT0iYW5kcm9pZDpjb250ZW50RGVzY3JpcHRpb24iPkBzdHJpbmcvbWN2Ml9uZXh0X2J1dHRvbl9kZXNjPC9pdGVtPgotICAgIDwvc3R5bGU+Ci0KLSAgICA8c3R5bGUgbmFtZT0iRnVsbFRyYW5zcG9ydENvbnRyb2xzQnV0dG9uLlBhdXNlIj4KLSAgICAgICAgPGl0ZW0gbmFtZT0iYW5kcm9pZDpzcmMiPkBkcmF3YWJsZS9pY19wYXVzZV9jaXJjbGVfZmlsbGVkPC9pdGVtPgotICAgICAgICA8aXRlbSBuYW1lPSJhbmRyb2lkOmxheW91dF93aWR0aCI+QGRpbWVuL21jdjJfcGF1c2VfaWNvbl9zaXplPC9pdGVtPgotICAgICAgICA8aXRlbSBuYW1lPSJhbmRyb2lkOmxheW91dF9oZWlnaHQiPkBkaW1lbi9tY3YyX3BhdXNlX2ljb25fc2l6ZTwvaXRlbT4KLSAgICAgICAgPGl0ZW0gbmFtZT0iYW5kcm9pZDpjb250ZW50RGVzY3JpcHRpb24iPkBzdHJpbmcvbWN2Ml9wYXVzZV9idXR0b25fZGVzYzwvaXRlbT4KLSAgICA8L3N0eWxlPgotCi0gICAgPHN0eWxlIG5hbWU9IkZ1bGxUcmFuc3BvcnRDb250cm9sc0J1dHRvbi5GZndkIj4KLSAgICAgICAgPGl0ZW0gbmFtZT0iYW5kcm9pZDpzcmMiPkBkcmF3YWJsZS9pY19mb3J3YXJkXzMwPC9pdGVtPgotICAgICAgICA8aXRlbSBuYW1lPSJhbmRyb2lkOmxheW91dF93aWR0aCI+QGRpbWVuL21jdjJfZnVsbF9pY29uX3NpemU8L2l0ZW0+Ci0gICAgICAgIDxpdGVtIG5hbWU9ImFuZHJvaWQ6bGF5b3V0X2hlaWdodCI+QGRpbWVuL21jdjJfZnVsbF9pY29uX3NpemU8L2l0ZW0+Ci0gICAgICAgIDxpdGVtIG5hbWU9ImFuZHJvaWQ6Y29udGVudERlc2NyaXB0aW9uIj5Ac3RyaW5nL21jdjJfZmZ3ZF9idXR0b25fZGVzYzwvaXRlbT4KLSAgICA8L3N0eWxlPgotCi0gICAgPHN0eWxlIG5hbWU9IkZ1bGxUcmFuc3BvcnRDb250cm9sc0J1dHRvbi5SZXciPgotICAgICAgICA8aXRlbSBuYW1lPSJhbmRyb2lkOnNyYyI+QGRyYXdhYmxlL2ljX3Jld2luZF8xMDwvaXRlbT4KLSAgICAgICAgPGl0ZW0gbmFtZT0iYW5kcm9pZDpsYXlvdXRfd2lkdGgiPkBkaW1lbi9tY3YyX2Z1bGxfaWNvbl9zaXplPC9pdGVtPgotICAgICAgICA8aXRlbSBuYW1lPSJhbmRyb2lkOmxheW91dF9oZWlnaHQiPkBkaW1lbi9tY3YyX2Z1bGxfaWNvbl9zaXplPC9pdGVtPgotICAgICAgICA8aXRlbSBuYW1lPSJhbmRyb2lkOmNvbnRlbnREZXNjcmlwdGlvbiI+QHN0cmluZy9tY3YyX3Jld2luZF9idXR0b25fZGVzYzwvaXRlbT4KLSAgICA8L3N0eWxlPgotCi0gICAgPHN0eWxlIG5hbWU9IkVtYmVkZGVkVHJhbnNwb3J0Q29udHJvbHNCdXR0b24iPgotICAgICAgICA8aXRlbSBuYW1lPSJhbmRyb2lkOmJhY2tncm91bmQiPkBudWxsPC9pdGVtPgotICAgICAgICA8aXRlbSBuYW1lPSJhbmRyb2lkOmxheW91dF9tYXJnaW4iPkBkaW1lbi9tY3YyX2ljb25fbWFyZ2luPC9pdGVtPgotICAgICAgICA8aXRlbSBuYW1lPSJhbmRyb2lkOnNjYWxlVHlwZSI+Zml0WFk8L2l0ZW0+Ci0gICAgPC9zdHlsZT4KLQotICAgIDxzdHlsZSBuYW1lPSJFbWJlZGRlZFRyYW5zcG9ydENvbnRyb2xzQnV0dG9uLlByZXZpb3VzIj4KLSAgICAgICAgPGl0ZW0gbmFtZT0iYW5kcm9pZDpzcmMiPkBkcmF3YWJsZS9pY19za2lwX3ByZXZpb3VzPC9pdGVtPgotICAgICAgICA8aXRlbSBuYW1lPSJhbmRyb2lkOmxheW91dF93aWR0aCI+QGRpbWVuL21jdjJfZW1iZWRkZWRfaWNvbl9zaXplPC9pdGVtPgotICAgICAgICA8aXRlbSBuYW1lPSJhbmRyb2lkOmxheW91dF9oZWlnaHQiPkBkaW1lbi9tY3YyX2VtYmVkZGVkX2ljb25fc2l6ZTwvaXRlbT4KLSAgICAgICAgPGl0ZW0gbmFtZT0iYW5kcm9pZDpjb250ZW50RGVzY3JpcHRpb24iPkBzdHJpbmcvbWN2Ml9wcmV2aW91c19idXR0b25fZGVzYzwvaXRlbT4KLSAgICA8L3N0eWxlPgotCi0gICAgPHN0eWxlIG5hbWU9IkVtYmVkZGVkVHJhbnNwb3J0Q29udHJvbHNCdXR0b24uTmV4dCI+Ci0gICAgICAgIDxpdGVtIG5hbWU9ImFuZHJvaWQ6c3JjIj5AZHJhd2FibGUvaWNfc2tpcF9uZXh0PC9pdGVtPgotICAgICAgICA8aXRlbSBuYW1lPSJhbmRyb2lkOmxheW91dF93aWR0aCI+QGRpbWVuL21jdjJfZW1iZWRkZWRfaWNvbl9zaXplPC9pdGVtPgotICAgICAgICA8aXRlbSBuYW1lPSJhbmRyb2lkOmxheW91dF9oZWlnaHQiPkBkaW1lbi9tY3YyX2VtYmVkZGVkX2ljb25fc2l6ZTwvaXRlbT4KLSAgICAgICAgPGl0ZW0gbmFtZT0iYW5kcm9pZDpjb250ZW50RGVzY3JpcHRpb24iPkBzdHJpbmcvbWN2Ml9uZXh0X2J1dHRvbl9kZXNjPC9pdGVtPgotICAgIDwvc3R5bGU+Ci0KLSAgICA8c3R5bGUgbmFtZT0iRW1iZWRkZWRUcmFuc3BvcnRDb250cm9sc0J1dHRvbi5QYXVzZSI+Ci0gICAgICAgIDxpdGVtIG5hbWU9ImFuZHJvaWQ6c3JjIj5AZHJhd2FibGUvaWNfcGF1c2VfY2lyY2xlX2ZpbGxlZDwvaXRlbT4KLSAgICAgICAgPGl0ZW0gbmFtZT0iYW5kcm9pZDpsYXlvdXRfd2lkdGgiPkBkaW1lbi9tY3YyX3BhdXNlX2ljb25fc2l6ZTwvaXRlbT4KLSAgICAgICAgPGl0ZW0gbmFtZT0iYW5kcm9pZDpsYXlvdXRfaGVpZ2h0Ij5AZGltZW4vbWN2Ml9wYXVzZV9pY29uX3NpemU8L2l0ZW0+Ci0gICAgICAgIDxpdGVtIG5hbWU9ImFuZHJvaWQ6Y29udGVudERlc2NyaXB0aW9uIj5Ac3RyaW5nL21jdjJfcGF1c2VfYnV0dG9uX2Rlc2M8L2l0ZW0+Ci0gICAgPC9zdHlsZT4KLQotICAgIDxzdHlsZSBuYW1lPSJFbWJlZGRlZFRyYW5zcG9ydENvbnRyb2xzQnV0dG9uLkZmd2QiPgotICAgICAgICA8aXRlbSBuYW1lPSJhbmRyb2lkOnNyYyI+QGRyYXdhYmxlL2ljX2ZvcndhcmRfMzA8L2l0ZW0+Ci0gICAgICAgIDxpdGVtIG5hbWU9ImFuZHJvaWQ6bGF5b3V0X3dpZHRoIj5AZGltZW4vbWN2Ml9lbWJlZGRlZF9pY29uX3NpemU8L2l0ZW0+Ci0gICAgICAgIDxpdGVtIG5hbWU9ImFuZHJvaWQ6bGF5b3V0X2hlaWdodCI+QGRpbWVuL21jdjJfZW1iZWRkZWRfaWNvbl9zaXplPC9pdGVtPgotICAgICAgICA8aXRlbSBuYW1lPSJhbmRyb2lkOmNvbnRlbnREZXNjcmlwdGlvbiI+QHN0cmluZy9tY3YyX2Zmd2RfYnV0dG9uX2Rlc2M8L2l0ZW0+Ci0gICAgPC9zdHlsZT4KLQotICAgIDxzdHlsZSBuYW1lPSJFbWJlZGRlZFRyYW5zcG9ydENvbnRyb2xzQnV0dG9uLlJldyI+Ci0gICAgICAgIDxpdGVtIG5hbWU9ImFuZHJvaWQ6c3JjIj5AZHJhd2FibGUvaWNfcmV3aW5kXzEwPC9pdGVtPgotICAgICAgICA8aXRlbSBuYW1lPSJhbmRyb2lkOmxheW91dF93aWR0aCI+QGRpbWVuL21jdjJfZW1iZWRkZWRfaWNvbl9zaXplPC9pdGVtPgotICAgICAgICA8aXRlbSBuYW1lPSJhbmRyb2lkOmxheW91dF9oZWlnaHQiPkBkaW1lbi9tY3YyX2VtYmVkZGVkX2ljb25fc2l6ZTwvaXRlbT4KLSAgICAgICAgPGl0ZW0gbmFtZT0iYW5kcm9pZDpjb250ZW50RGVzY3JpcHRpb24iPkBzdHJpbmcvbWN2Ml9yZXdpbmRfYnV0dG9uX2Rlc2M8L2l0ZW0+Ci0gICAgPC9zdHlsZT4KLQotICAgIDxzdHlsZSBuYW1lPSJNaW5pbWFsVHJhbnNwb3J0Q29udHJvbHNCdXR0b24iPgotICAgICAgICA8aXRlbSBuYW1lPSJhbmRyb2lkOmJhY2tncm91bmQiPkBudWxsPC9pdGVtPgotICAgICAgICA8aXRlbSBuYW1lPSJhbmRyb2lkOmxheW91dF93aWR0aCI+QGRpbWVuL21jdjJfcGF1c2VfaWNvbl9zaXplPC9pdGVtPgotICAgICAgICA8aXRlbSBuYW1lPSJhbmRyb2lkOmxheW91dF9oZWlnaHQiPkBkaW1lbi9tY3YyX3BhdXNlX2ljb25fc2l6ZTwvaXRlbT4KLSAgICAgICAgPGl0ZW0gbmFtZT0iYW5kcm9pZDpsYXlvdXRfbWFyZ2luIj5AZGltZW4vbWN2Ml9pY29uX21hcmdpbjwvaXRlbT4KLSAgICAgICAgPGl0ZW0gbmFtZT0iYW5kcm9pZDpzY2FsZVR5cGUiPmZpdFhZPC9pdGVtPgotICAgICAgICA8aXRlbSBuYW1lPSJhbmRyb2lkOnNyYyI+QGRyYXdhYmxlL2ljX3BhdXNlX2NpcmNsZV9maWxsZWQ8L2l0ZW0+Ci0gICAgICAgIDxpdGVtIG5hbWU9ImFuZHJvaWQ6Y29udGVudERlc2NyaXB0aW9uIj5Ac3RyaW5nL21jdjJfcGF1c2VfYnV0dG9uX2Rlc2M8L2l0ZW0+Ci0gICAgPC9zdHlsZT4KLQotICAgIDxzdHlsZSBuYW1lPSJUaXRsZUJhciI+Ci0gICAgICAgIDxpdGVtIG5hbWU9ImFuZHJvaWQ6bGF5b3V0X3dpZHRoIj5tYXRjaF9wYXJlbnQ8L2l0ZW0+Ci0gICAgICAgIDxpdGVtIG5hbWU9ImFuZHJvaWQ6bGF5b3V0X2hlaWdodCI+NDZkcDwvaXRlbT4KLSAgICAgICAgPGl0ZW0gbmFtZT0iYW5kcm9pZDpwYWRkaW5nU3RhcnQiPjVkcDwvaXRlbT4KLSAgICAgICAgPGl0ZW0gbmFtZT0iYW5kcm9pZDpwYWRkaW5nRW5kIj41ZHA8L2l0ZW0+Ci0gICAgPC9zdHlsZT4KLQotICAgIDxzdHlsZSBuYW1lPSJUaXRsZUJhckJ1dHRvbiI+Ci0gICAgICAgIDxpdGVtIG5hbWU9ImFuZHJvaWQ6YmFja2dyb3VuZCI+QG51bGw8L2l0ZW0+Ci0gICAgICAgIDxpdGVtIG5hbWU9ImFuZHJvaWQ6bGF5b3V0X3dpZHRoIj4zNmRwPC9pdGVtPgotICAgICAgICA8aXRlbSBuYW1lPSJhbmRyb2lkOmxheW91dF9oZWlnaHQiPjM2ZHA8L2l0ZW0+Ci0gICAgPC9zdHlsZT4KLQotICAgIDxzdHlsZSBuYW1lPSJUaXRsZUJhckJ1dHRvbi5CYWNrIj4KLSAgICAgICAgPGl0ZW0gbmFtZT0iYW5kcm9pZDpzcmMiPkBkcmF3YWJsZS9pY19hcnJvd19iYWNrPC9pdGVtPgotICAgICAgICA8aXRlbSBuYW1lPSJhbmRyb2lkOmNvbnRlbnREZXNjcmlwdGlvbiI+QHN0cmluZy9tY3YyX2JhY2tfYnV0dG9uX2Rlc2M8L2l0ZW0+Ci0gICAgPC9zdHlsZT4KLQotICAgIDxzdHlsZSBuYW1lPSJUaXRsZUJhckJ1dHRvbi5MYXVuY2giPgotICAgICAgICA8aXRlbSBuYW1lPSJhbmRyb2lkOnNyYyI+QGRyYXdhYmxlL2ljX2xhdW5jaDwvaXRlbT4KLSAgICAgICAgPGl0ZW0gbmFtZT0iYW5kcm9pZDpjb250ZW50RGVzY3JpcHRpb24iPkBzdHJpbmcvbWN2Ml9sYXVuY2hfYnV0dG9uX2Rlc2M8L2l0ZW0+Ci0gICAgPC9zdHlsZT4KLQotICAgIDxzdHlsZSBuYW1lPSJUaW1lVGV4dCI+Ci0gICAgICAgIDxpdGVtIG5hbWU9ImFuZHJvaWQ6bGF5b3V0X3dpZHRoIj53cmFwX2NvbnRlbnQ8L2l0ZW0+Ci0gICAgICAgIDxpdGVtIG5hbWU9ImFuZHJvaWQ6bGF5b3V0X2hlaWdodCI+d3JhcF9jb250ZW50PC9pdGVtPgotICAgICAgICA8aXRlbSBuYW1lPSJhbmRyb2lkOnBhZGRpbmdTdGFydCI+NGRwPC9pdGVtPgotICAgICAgICA8aXRlbSBuYW1lPSJhbmRyb2lkOnBhZGRpbmdFbmQiPjRkcDwvaXRlbT4KLSAgICAgICAgPGl0ZW0gbmFtZT0iYW5kcm9pZDp0ZXh0U3R5bGUiPmJvbGQ8L2l0ZW0+Ci0gICAgICAgIDxpdGVtIG5hbWU9ImFuZHJvaWQ6dGV4dFNpemUiPjE0c3A8L2l0ZW0+Ci0gICAgICAgIDxpdGVtIG5hbWU9ImFuZHJvaWQ6Z3Jhdml0eSI+Y2VudGVyPC9pdGVtPgotICAgIDwvc3R5bGU+Ci0KLSAgICA8c3R5bGUgbmFtZT0iVGltZVRleHQuQ3VycmVudCI+Ci0gICAgICAgIDxpdGVtIG5hbWU9ImFuZHJvaWQ6dGV4dENvbG9yIj5AY29sb3Ivd2hpdGU8L2l0ZW0+Ci0gICAgICAgIDxpdGVtIG5hbWU9ImFuZHJvaWQ6dGV4dCI+QHN0cmluZy9NZWRpYUNvbnRyb2xWaWV3Ml90aW1lX3BsYWNlaG9sZGVyPC9pdGVtPgotICAgIDwvc3R5bGU+Ci0KLSAgICA8c3R5bGUgbmFtZT0iVGltZVRleHQuSW50ZXJwdW5jdCI+Ci0gICAgICAgIDxpdGVtIG5hbWU9ImFuZHJvaWQ6dGV4dENvbG9yIj5AY29sb3Ivd2hpdGVfb3BhY2l0eV83MDwvaXRlbT4KLSAgICAgICAgPGl0ZW0gbmFtZT0iYW5kcm9pZDp0ZXh0Ij7CtzwvaXRlbT4KLSAgICA8L3N0eWxlPgotCi0gICAgPHN0eWxlIG5hbWU9IlRpbWVUZXh0LkVuZCI+Ci0gICAgICAgIDxpdGVtIG5hbWU9ImFuZHJvaWQ6dGV4dENvbG9yIj5AY29sb3Ivd2hpdGVfb3BhY2l0eV83MDwvaXRlbT4KLSAgICAgICAgPGl0ZW0gbmFtZT0iYW5kcm9pZDp0ZXh0Ij5Ac3RyaW5nL01lZGlhQ29udHJvbFZpZXcyX3RpbWVfcGxhY2Vob2xkZXI8L2l0ZW0+Ci0gICAgPC9zdHlsZT4KLQotICAgIDxzdHlsZSBuYW1lPSJCb3R0b21CYXJCdXR0b24iPgotICAgICAgICA8aXRlbSBuYW1lPSJhbmRyb2lkOmJhY2tncm91bmQiPkBudWxsPC9pdGVtPgotICAgICAgICA8aXRlbSBuYW1lPSJhbmRyb2lkOmxheW91dF93aWR0aCI+QGRpbWVuL21jdjJfZW1iZWRkZWRfaWNvbl9zaXplPC9pdGVtPgotICAgICAgICA8aXRlbSBuYW1lPSJhbmRyb2lkOmxheW91dF9oZWlnaHQiPkBkaW1lbi9tY3YyX2VtYmVkZGVkX2ljb25fc2l6ZTwvaXRlbT4KLSAgICAgICAgPGl0ZW0gbmFtZT0iYW5kcm9pZDpsYXlvdXRfbWFyZ2luIj5AZGltZW4vbWN2Ml9pY29uX21hcmdpbjwvaXRlbT4KLSAgICAgICAgPGl0ZW0gbmFtZT0iYW5kcm9pZDpncmF2aXR5Ij5jZW50ZXJfaG9yaXpvbnRhbDwvaXRlbT4KLSAgICAgICAgPGl0ZW0gbmFtZT0iYW5kcm9pZDpzY2FsZVR5cGUiPmZpdFhZPC9pdGVtPgotICAgIDwvc3R5bGU+Ci0KLSAgICA8c3R5bGUgbmFtZT0iQm90dG9tQmFyQnV0dG9uLkNDIj4KLSAgICAgICAgPGl0ZW0gbmFtZT0iYW5kcm9pZDpzcmMiPkBkcmF3YWJsZS9pY19zdWJ0aXRsZV9vZmY8L2l0ZW0+Ci0gICAgICAgIDxpdGVtIG5hbWU9ImFuZHJvaWQ6Y29udGVudERlc2NyaXB0aW9uIj5Ac3RyaW5nL21jdjJfY2NfaXNfb2ZmPC9pdGVtPgotICAgIDwvc3R5bGU+Ci0KLSAgICA8c3R5bGUgbmFtZT0iQm90dG9tQmFyQnV0dG9uLkZ1bGxTY3JlZW4iPgotICAgICAgICA8aXRlbSBuYW1lPSJhbmRyb2lkOnNyYyI+QGRyYXdhYmxlL2ljX2Z1bGxzY3JlZW48L2l0ZW0+Ci0gICAgICAgIDxpdGVtIG5hbWU9ImFuZHJvaWQ6Y29udGVudERlc2NyaXB0aW9uIj5Ac3RyaW5nL21jdjJfZnVsbF9zY3JlZW5fYnV0dG9uX2Rlc2M8L2l0ZW0+Ci0gICAgPC9zdHlsZT4KLQotICAgIDxzdHlsZSBuYW1lPSJCb3R0b21CYXJCdXR0b24uT3ZlcmZsb3dSaWdodCI+Ci0gICAgICAgIDxpdGVtIG5hbWU9ImFuZHJvaWQ6c3JjIj5AZHJhd2FibGUvaWNfY2hldnJvbl9yaWdodDwvaXRlbT4KLSAgICAgICAgPGl0ZW0gbmFtZT0iYW5kcm9pZDpjb250ZW50RGVzY3JpcHRpb24iPkBzdHJpbmcvbWN2Ml9vdmVyZmxvd19yaWdodF9idXR0b25fZGVzYzwvaXRlbT4KLSAgICA8L3N0eWxlPgotCi0gICAgPHN0eWxlIG5hbWU9IkJvdHRvbUJhckJ1dHRvbi5PdmVyZmxvd0xlZnQiPgotICAgICAgICA8aXRlbSBuYW1lPSJhbmRyb2lkOnNyYyI+QGRyYXdhYmxlL2ljX2NoZXZyb25fbGVmdDwvaXRlbT4KLSAgICAgICAgPGl0ZW0gbmFtZT0iYW5kcm9pZDpjb250ZW50RGVzY3JpcHRpb24iPkBzdHJpbmcvbWN2Ml9vdmVyZmxvd19sZWZ0X2J1dHRvbl9kZXNjPC9pdGVtPgotICAgIDwvc3R5bGU+Ci0KLSAgICA8c3R5bGUgbmFtZT0iQm90dG9tQmFyQnV0dG9uLlNldHRpbmdzIj4KLSAgICAgICAgPGl0ZW0gbmFtZT0iYW5kcm9pZDpzcmMiPkBkcmF3YWJsZS9pY19zZXR0aW5nczwvaXRlbT4KLSAgICAgICAgPGl0ZW0gbmFtZT0iYW5kcm9pZDpjb250ZW50RGVzY3JpcHRpb24iPkBzdHJpbmcvbWN2Ml9zZXR0aW5nc19idXR0b25fZGVzYzwvaXRlbT4KLSAgICA8L3N0eWxlPgotCi0gICAgPHN0eWxlIG5hbWU9IkJvdHRvbUJhckJ1dHRvbi5NdXRlIj4KLSAgICAgICAgPGl0ZW0gbmFtZT0iYW5kcm9pZDpzcmMiPkBkcmF3YWJsZS9pY191bm11dGU8L2l0ZW0+Ci0gICAgICAgIDxpdGVtIG5hbWU9ImFuZHJvaWQ6Y29udGVudERlc2NyaXB0aW9uIj5Ac3RyaW5nL21jdjJfdW5tdXRlZF9idXR0b25fZGVzYzwvaXRlbT4KLSAgICA8L3N0eWxlPgotCi0gICAgPHN0eWxlIG5hbWU9IkJvdHRvbUJhckJ1dHRvbi5WaWRlb1F1YWxpdHkiPgotICAgICAgPGl0ZW0gbmFtZT0iYW5kcm9pZDpzcmMiPkBkcmF3YWJsZS9pY19oaWdoX3F1YWxpdHk8L2l0ZW0+Ci0gICAgICA8aXRlbSBuYW1lPSJhbmRyb2lkOmNvbnRlbnREZXNjcmlwdGlvbiI+QHN0cmluZy9tY3YyX3ZpZGVvX3F1YWxpdHlfYnV0dG9uX2Rlc2M8L2l0ZW0+Ci0gICAgPC9zdHlsZT4KLQotICAgIDxzdHlsZSBuYW1lPSJGdWxsTXVzaWNQb3J0cmFpdCI+Ci0gICAgICAgIDxpdGVtIG5hbWU9ImFuZHJvaWQ6bGF5b3V0X2hlaWdodCI+MGRwPC9pdGVtPgotICAgIDwvc3R5bGU+Ci0KLSAgICA8c3R5bGUgbmFtZT0iRnVsbE11c2ljUG9ydHJhaXQuSW1hZ2UiPgotICAgICAgICA8aXRlbSBuYW1lPSJhbmRyb2lkOmxheW91dF93aWR0aCI+bWF0Y2hfcGFyZW50PC9pdGVtPgotICAgICAgICA8aXRlbSBuYW1lPSJhbmRyb2lkOmxheW91dF93ZWlnaHQiPjAuNjwvaXRlbT4KLSAgICAgICAgPGl0ZW0gbmFtZT0iYW5kcm9pZDpncmF2aXR5Ij5jZW50ZXI8L2l0ZW0+Ci0gICAgPC9zdHlsZT4KLQotICAgIDxzdHlsZSBuYW1lPSJGdWxsTXVzaWNQb3J0cmFpdC5UZXh0Ij4KLSAgICAgICAgPGl0ZW0gbmFtZT0iYW5kcm9pZDpsYXlvdXRfd2lkdGgiPm1hdGNoX3BhcmVudDwvaXRlbT4KLSAgICAgICAgPGl0ZW0gbmFtZT0iYW5kcm9pZDpsYXlvdXRfd2VpZ2h0Ij4wLjQ8L2l0ZW0+Ci0gICAgICAgIDxpdGVtIG5hbWU9ImFuZHJvaWQ6Z3Jhdml0eSI+dG9wfGNlbnRlcjwvaXRlbT4KLSAgICAgICAgPGl0ZW0gbmFtZT0iYW5kcm9pZDpvcmllbnRhdGlvbiI+dmVydGljYWw8L2l0ZW0+Ci0gICAgPC9zdHlsZT4KLQotICAgIDxzdHlsZSBuYW1lPSJGdWxsTXVzaWNMYW5kc2NhcGUiPgotICAgICAgICA8aXRlbSBuYW1lPSJhbmRyb2lkOmxheW91dF93aWR0aCI+MGRwPC9pdGVtPgotICAgIDwvc3R5bGU+Ci0KLSAgICA8c3R5bGUgbmFtZT0iRnVsbE11c2ljTGFuZHNjYXBlLkltYWdlIj4KLSAgICAgICAgPGl0ZW0gbmFtZT0iYW5kcm9pZDpsYXlvdXRfaGVpZ2h0Ij5tYXRjaF9wYXJlbnQ8L2l0ZW0+Ci0gICAgICAgIDxpdGVtIG5hbWU9ImFuZHJvaWQ6bGF5b3V0X3dlaWdodCI+MC4zNTwvaXRlbT4KLSAgICAgICAgPGl0ZW0gbmFtZT0iYW5kcm9pZDpncmF2aXR5Ij5jZW50ZXJ8cmlnaHQ8L2l0ZW0+Ci0gICAgPC9zdHlsZT4KLQotICAgIDxzdHlsZSBuYW1lPSJGdWxsTXVzaWNMYW5kc2NhcGUuVGV4dCI+Ci0gICAgICAgIDxpdGVtIG5hbWU9ImFuZHJvaWQ6bGF5b3V0X2hlaWdodCI+bWF0Y2hfcGFyZW50PC9pdGVtPgotICAgICAgICA8aXRlbSBuYW1lPSJhbmRyb2lkOmxheW91dF93ZWlnaHQiPjAuNjU8L2l0ZW0+Ci0gICAgICAgIDxpdGVtIG5hbWU9ImFuZHJvaWQ6bGF5b3V0X21hcmdpbkxlZnQiPjI0ZHA8L2l0ZW0+Ci0gICAgICAgIDxpdGVtIG5hbWU9ImFuZHJvaWQ6Z3Jhdml0eSI+Y2VudGVyfGxlZnQ8L2l0ZW0+Ci0gICAgICAgIDxpdGVtIG5hbWU9ImFuZHJvaWQ6b3JpZW50YXRpb24iPnZlcnRpY2FsPC9pdGVtPgotICAgIDwvc3R5bGU+Ci08L3Jlc291cmNlcz4KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL01lZGlhQ29tcG9uZW50cy9yZXMvdmFsdWVzL3N0eWxlcy54bWwgYi9wYWNrYWdlcy9NZWRpYUNvbXBvbmVudHMvcmVzL3ZhbHVlcy9zdHlsZXMueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiZGU2OTAwLi4wMDAwMDAwCi0tLSBhL3BhY2thZ2VzL01lZGlhQ29tcG9uZW50cy9yZXMvdmFsdWVzL3N0eWxlcy54bWwKKysrIC9kZXYvbnVsbApAQCAtMSwzMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ1dGYtOCI/PgotPCEtLSBDb3B5cmlnaHQgMjAxOCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0Ci0KLSAgICAgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7Ci0gICAgIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KLSAgICAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0KLSAgICAgICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLQotICAgICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCi0gICAgIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCi0gICAgIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgotICAgICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCi0gICAgIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgotLS0+Ci0KLTxyZXNvdXJjZXM+Ci0gICAgPHN0eWxlIG5hbWU9IldpZGdldC5NZWRpYVJvdXRlci5NZWRpYVJvdXRlQnV0dG9uIgotICAgICAgICAgICAgcGFyZW50PSJXaWRnZXQuQXBwQ29tcGF0LkFjdGlvbkJ1dHRvbiI+Ci0gICAgICAgIDxpdGVtIG5hbWU9ImV4dGVybmFsUm91dGVFbmFibGVkRHJhd2FibGUiPkBkcmF3YWJsZS9tcl9idXR0b25fZGFyazwvaXRlbT4KLSAgICA8L3N0eWxlPgotCi0gICAgPHN0eWxlIG5hbWU9IldpZGdldC5NZWRpYVJvdXRlci5MaWdodC5NZWRpYVJvdXRlQnV0dG9uIgotICAgICAgICAgICAgcGFyZW50PSJXaWRnZXQuQXBwQ29tcGF0LkxpZ2h0LkFjdGlvbkJ1dHRvbiI+Ci0gICAgICAgIDxpdGVtIG5hbWU9ImV4dGVybmFsUm91dGVFbmFibGVkRHJhd2FibGUiPkBkcmF3YWJsZS9tcl9idXR0b25fbGlnaHQ8L2l0ZW0+Ci0gICAgPC9zdHlsZT4KLQotICAgIDxzdHlsZSBuYW1lPSJUZXh0QXBwZWFyYW5jZS5NZWRpYVJvdXRlci5UaXRsZSIgcGFyZW50PSJUZXh0QXBwZWFyYW5jZS5BcHBDb21wYXQuVGl0bGUiIC8+Ci0KLSAgICA8c3R5bGUgbmFtZT0iVGV4dEFwcGVhcmFuY2UuTWVkaWFSb3V0ZXIuUHJpbWFyeVRleHQiIHBhcmVudD0iVGV4dEFwcGVhcmFuY2UuQXBwQ29tcGF0LlN1YmhlYWQiIC8+Ci0KLSAgICA8c3R5bGUgbmFtZT0iVGV4dEFwcGVhcmFuY2UuTWVkaWFSb3V0ZXIuU2Vjb25kYXJ5VGV4dCIgcGFyZW50PSJUZXh0QXBwZWFyYW5jZS5BcHBDb21wYXQuQm9keTEiIC8+Ci08L3Jlc291cmNlcz4KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL01lZGlhQ29tcG9uZW50cy9yZXMvdmFsdWVzL3N5bWJvbHMueG1sIGIvcGFja2FnZXMvTWVkaWFDb21wb25lbnRzL3Jlcy92YWx1ZXMvc3ltYm9scy54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGVlMGU4YzYuLjAwMDAwMDAKLS0tIGEvcGFja2FnZXMvTWVkaWFDb21wb25lbnRzL3Jlcy92YWx1ZXMvc3ltYm9scy54bWwKKysrIC9kZXYvbnVsbApAQCAtMSwyOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ1dGYtOCI/PgotPCEtLQotLyogQ29weXJpZ2h0IDIwMTcsIFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKLSoqCi0qKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKLSoqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KLSoqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotKioKLSoqICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLSoqCi0qKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCi0qKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAotKiogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCi0qKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCi0qKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KLSovCi0tLT4KLTxyZXNvdXJjZXM+Ci0gICAgPCEtLWphdmEtc3ltYm9sIHR5cGU9ImlkIiBuYW1lPSJjYyIgLz4KLSAgICA8amF2YS1zeW1ib2wgdHlwZT0iaWQiIG5hbWU9ImZmd2QiIC8+Ci0gICAgPGphdmEtc3ltYm9sIHR5cGU9ImlkIiBuYW1lPSJtZWRpYWNvbnRyb2xsZXJfcHJvZ3Jlc3MiIC8+Ci0gICAgPGphdmEtc3ltYm9sIHR5cGU9ImlkIiBuYW1lPSJuZXh0IiAvPgotICAgIDxqYXZhLXN5bWJvbCB0eXBlPSJpZCIgbmFtZT0icGF1c2UiIC8+Ci0gICAgPGphdmEtc3ltYm9sIHR5cGU9ImlkIiBuYW1lPSJwcmV2IiAvPgotICAgIDxqYXZhLXN5bWJvbCB0eXBlPSJpZCIgbmFtZT0icmV3IiAvPgotICAgIDxqYXZhLXN5bWJvbCB0eXBlPSJpZCIgbmFtZT0idGltZSIgLz4KLSAgICA8amF2YS1zeW1ib2wgdHlwZT0iaWQiIG5hbWU9InRpbWVfY3VycmVudCIgLy0tPgotPC9yZXNvdXJjZXM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvTWVkaWFDb21wb25lbnRzL3Jlcy92YWx1ZXMvdGhlbWVzLnhtbCBiL3BhY2thZ2VzL01lZGlhQ29tcG9uZW50cy9yZXMvdmFsdWVzL3RoZW1lcy54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQ5YTc1NGIuLjAwMDAwMDAKLS0tIGEvcGFja2FnZXMvTWVkaWFDb21wb25lbnRzL3Jlcy92YWx1ZXMvdGhlbWVzLnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDc1ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9InV0Zi04Ij8+Ci08IS0tIENvcHlyaWdodCAyMDE4IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKLQotICAgICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKLSAgICAgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgotICAgICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLQotICAgICAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotCi0gICAgIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKLSAgICAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKLSAgICAgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCi0gICAgIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKLSAgICAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCi0tLT4KLQotPHJlc291cmNlcz4KLQotICAgIDxzdHlsZSBuYW1lPSJUaGVtZS5NZWRpYVJvdXRlciIgcGFyZW50PSJhbmRyb2lkOlRoZW1lLk1hdGVyaWFsIj4KLSAgICAgICAgPGl0ZW0gbmFtZT0iYW5kcm9pZDp3aW5kb3dOb1RpdGxlIj50cnVlPC9pdGVtPgotICAgICAgICA8aXRlbSBuYW1lPSJtZWRpYVJvdXRlQnV0dG9uU3R5bGUiPkBzdHlsZS9XaWRnZXQuTWVkaWFSb3V0ZXIuTWVkaWFSb3V0ZUJ1dHRvbjwvaXRlbT4KLQotICAgICAgICA8aXRlbSBuYW1lPSJtZWRpYVJvdXRlQ2xvc2VEcmF3YWJsZSI+QGRyYXdhYmxlL21yX2RpYWxvZ19jbG9zZV9kYXJrPC9pdGVtPgotICAgICAgICA8aXRlbSBuYW1lPSJtZWRpYVJvdXRlUGxheURyYXdhYmxlIj5AZHJhd2FibGUvbXJfbWVkaWFfcGxheV9kYXJrPC9pdGVtPgotICAgICAgICA8aXRlbSBuYW1lPSJtZWRpYVJvdXRlUGF1c2VEcmF3YWJsZSI+QGRyYXdhYmxlL21yX21lZGlhX3BhdXNlX2Rhcms8L2l0ZW0+Ci0gICAgICAgIDxpdGVtIG5hbWU9Im1lZGlhUm91dGVTdG9wRHJhd2FibGUiPkBkcmF3YWJsZS9tcl9tZWRpYV9zdG9wX2Rhcms8L2l0ZW0+Ci0gICAgICAgIDxpdGVtIG5hbWU9Im1lZGlhUm91dGVBdWRpb1RyYWNrRHJhd2FibGUiPkBkcmF3YWJsZS9tcl92b2xfdHlwZV9hdWRpb3RyYWNrX2Rhcms8L2l0ZW0+Ci0gICAgICAgIDxpdGVtIG5hbWU9Im1lZGlhUm91dGVEZWZhdWx0SWNvbkRyYXdhYmxlIj5AZHJhd2FibGUvaWNfbXJfYnV0dG9uX2Rpc2Nvbm5lY3RlZF9kYXJrPC9pdGVtPgotICAgICAgICA8aXRlbSBuYW1lPSJtZWRpYVJvdXRlVHZJY29uRHJhd2FibGUiPkBkcmF3YWJsZS9pY192b2xfdHlwZV90dl9kYXJrPC9pdGVtPgotICAgICAgICA8aXRlbSBuYW1lPSJtZWRpYVJvdXRlU3BlYWtlckljb25EcmF3YWJsZSI+QGRyYXdhYmxlL2ljX3ZvbF90eXBlX3NwZWFrZXJfZGFyazwvaXRlbT4KLSAgICAgICAgPGl0ZW0gbmFtZT0ibWVkaWFSb3V0ZVNwZWFrZXJHcm91cEljb25EcmF3YWJsZSI+QGRyYXdhYmxlL2ljX3ZvbF90eXBlX3NwZWFrZXJfZ3JvdXBfZGFyazwvaXRlbT4KLQotICAgICAgICA8aXRlbSBuYW1lPSJtZWRpYVJvdXRlQ29udHJvbFBhbmVsVGhlbWVPdmVybGF5Ij5AbnVsbDwvaXRlbT4KLSAgICA8L3N0eWxlPgotCi0gICAgPHN0eWxlIG5hbWU9IlRoZW1lLk1lZGlhUm91dGVyLkxpZ2h0Q29udHJvbFBhbmVsIj4KLSAgICAgICAgPGl0ZW0gbmFtZT0ibWVkaWFSb3V0ZUNvbnRyb2xQYW5lbFRoZW1lT3ZlcmxheSI+QHN0eWxlL1RoZW1lT3ZlcmxheS5NZWRpYVJvdXRlci5MaWdodDwvaXRlbT4KLSAgICA8L3N0eWxlPgotCi0gICAgPHN0eWxlIG5hbWU9IlRoZW1lLk1lZGlhUm91dGVyLkxpZ2h0IiBwYXJlbnQ9ImFuZHJvaWQ6VGhlbWUuTWF0ZXJpYWwuTGlnaHQiPgotICAgICAgICA8aXRlbSBuYW1lPSJhbmRyb2lkOndpbmRvd05vVGl0bGUiPnRydWU8L2l0ZW0+Ci0gICAgICAgIDxpdGVtIG5hbWU9Im1lZGlhUm91dGVCdXR0b25TdHlsZSI+QHN0eWxlL1dpZGdldC5NZWRpYVJvdXRlci5MaWdodC5NZWRpYVJvdXRlQnV0dG9uPC9pdGVtPgotCi0gICAgICAgIDxpdGVtIG5hbWU9Im1lZGlhUm91dGVDbG9zZURyYXdhYmxlIj5AZHJhd2FibGUvbXJfZGlhbG9nX2Nsb3NlX2xpZ2h0PC9pdGVtPgotICAgICAgICA8aXRlbSBuYW1lPSJtZWRpYVJvdXRlUGxheURyYXdhYmxlIj5AZHJhd2FibGUvbXJfbWVkaWFfcGxheV9saWdodDwvaXRlbT4KLSAgICAgICAgPGl0ZW0gbmFtZT0ibWVkaWFSb3V0ZVBhdXNlRHJhd2FibGUiPkBkcmF3YWJsZS9tcl9tZWRpYV9wYXVzZV9saWdodDwvaXRlbT4KLSAgICAgICAgPGl0ZW0gbmFtZT0ibWVkaWFSb3V0ZVN0b3BEcmF3YWJsZSI+QGRyYXdhYmxlL21yX21lZGlhX3N0b3BfbGlnaHQ8L2l0ZW0+Ci0gICAgICAgIDxpdGVtIG5hbWU9Im1lZGlhUm91dGVBdWRpb1RyYWNrRHJhd2FibGUiPkBkcmF3YWJsZS9tcl92b2xfdHlwZV9hdWRpb3RyYWNrX2xpZ2h0PC9pdGVtPgotICAgICAgICA8aXRlbSBuYW1lPSJtZWRpYVJvdXRlRGVmYXVsdEljb25EcmF3YWJsZSI+QGRyYXdhYmxlL2ljX21yX2J1dHRvbl9ncmV5PC9pdGVtPgotICAgICAgICA8aXRlbSBuYW1lPSJtZWRpYVJvdXRlVHZJY29uRHJhd2FibGUiPkBkcmF3YWJsZS9pY192b2xfdHlwZV90dl9saWdodDwvaXRlbT4KLSAgICAgICAgPGl0ZW0gbmFtZT0ibWVkaWFSb3V0ZVNwZWFrZXJJY29uRHJhd2FibGUiPkBkcmF3YWJsZS9pY192b2xfdHlwZV9zcGVha2VyX2xpZ2h0PC9pdGVtPgotICAgICAgICA8aXRlbSBuYW1lPSJtZWRpYVJvdXRlU3BlYWtlckdyb3VwSWNvbkRyYXdhYmxlIj5AZHJhd2FibGUvaWNfdm9sX3R5cGVfc3BlYWtlcl9ncm91cF9saWdodDwvaXRlbT4KLQotICAgICAgICA8aXRlbSBuYW1lPSJtZWRpYVJvdXRlQ29udHJvbFBhbmVsVGhlbWVPdmVybGF5Ij5AbnVsbDwvaXRlbT4KLSAgICA8L3N0eWxlPgotCi0gICAgPHN0eWxlIG5hbWU9IlRoZW1lLk1lZGlhUm91dGVyLkxpZ2h0LkRhcmtDb250cm9sUGFuZWwiPgotICAgICAgICA8aXRlbSBuYW1lPSJtZWRpYVJvdXRlQ29udHJvbFBhbmVsVGhlbWVPdmVybGF5Ij5Ac3R5bGUvVGhlbWVPdmVybGF5Lk1lZGlhUm91dGVyLkRhcms8L2l0ZW0+Ci0gICAgPC9zdHlsZT4KLQotICAgIDxzdHlsZSBuYW1lPSJUaGVtZU92ZXJsYXkuTWVkaWFSb3V0ZXIuRGFyayIgcGFyZW50PSJhbmRyb2lkOlRoZW1lLk1hdGVyaWFsIj4KLSAgICAgICAgPGl0ZW0gbmFtZT0ibWVkaWFSb3V0ZVBsYXlEcmF3YWJsZSI+QGRyYXdhYmxlL21yX21lZGlhX3BsYXlfZGFyazwvaXRlbT4KLSAgICAgICAgPGl0ZW0gbmFtZT0ibWVkaWFSb3V0ZVBhdXNlRHJhd2FibGUiPkBkcmF3YWJsZS9tcl9tZWRpYV9wYXVzZV9kYXJrPC9pdGVtPgotICAgICAgICA8aXRlbSBuYW1lPSJtZWRpYVJvdXRlU3RvcERyYXdhYmxlIj5AZHJhd2FibGUvbXJfbWVkaWFfc3RvcF9kYXJrPC9pdGVtPgotICAgICAgICA8aXRlbSBuYW1lPSJtZWRpYVJvdXRlQXVkaW9UcmFja0RyYXdhYmxlIj5AZHJhd2FibGUvbXJfdm9sX3R5cGVfYXVkaW90cmFja19kYXJrPC9pdGVtPgotCi0gICAgPC9zdHlsZT4KLSAgICA8c3R5bGUgbmFtZT0iVGhlbWVPdmVybGF5Lk1lZGlhUm91dGVyLkxpZ2h0IiBwYXJlbnQ9ImFuZHJvaWQ6VGhlbWUuTWF0ZXJpYWwuTGlnaHQiPgotICAgICAgICA8aXRlbSBuYW1lPSJtZWRpYVJvdXRlUGxheURyYXdhYmxlIj5AZHJhd2FibGUvbXJfbWVkaWFfcGxheV9saWdodDwvaXRlbT4KLSAgICAgICAgPGl0ZW0gbmFtZT0ibWVkaWFSb3V0ZVBhdXNlRHJhd2FibGUiPkBkcmF3YWJsZS9tcl9tZWRpYV9wYXVzZV9saWdodDwvaXRlbT4KLSAgICAgICAgPGl0ZW0gbmFtZT0ibWVkaWFSb3V0ZVN0b3BEcmF3YWJsZSI+QGRyYXdhYmxlL21yX21lZGlhX3N0b3BfbGlnaHQ8L2l0ZW0+Ci0gICAgICAgIDxpdGVtIG5hbWU9Im1lZGlhUm91dGVBdWRpb1RyYWNrRHJhd2FibGUiPkBkcmF3YWJsZS9tcl92b2xfdHlwZV9hdWRpb3RyYWNrX2xpZ2h0PC9pdGVtPgotICAgIDwvc3R5bGU+Ci0KLTwvcmVzb3VyY2VzPgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvTWVkaWFDb21wb25lbnRzL3J1bmN0cy5zaCBiL3BhY2thZ2VzL01lZGlhQ29tcG9uZW50cy9ydW5jdHMuc2gKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDYxYjFhMWUuLjAwMDAwMDAKLS0tIGEvcGFja2FnZXMvTWVkaWFDb21wb25lbnRzL3J1bmN0cy5zaAorKysgL2Rldi9udWxsCkBAIC0xLDIyNCArMCwwIEBACi0jIS9iaW4vYmFzaAotIyBDb3B5cmlnaHQgMjAxOCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0Ci0jCi0jIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwotIyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCi0jIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotIwotIyAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotIwotIyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCi0jIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCi0jIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgotIyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCi0jIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgotCi0jIFVzYWdlICcuIHJ1bmN0cy5zaCcKLQotZnVuY3Rpb24gX3J1bnRlc3RfY3RzX21lZGlhY29tcG9uZW50X3VzYWdlKCkgewotICBlY2hvICdydW50ZXN0LWN0cy1NZWRpYUNvbXBvbmVudHMgW29wdGlvbl06IEJ1aWxkLCBmbGFzaCBkZXZpY2UsJwotICBlY2hvICcgICAgICAgICAgICAgIGFuZCBydW4gc3Vic2V0IG9mIEN0c01lZGlhVGVzdENhc2VzIHRoYXQgTWVkaWFDb21wb25lbnRzIGNvdmVycy4nCi0gIGVjaG8gJyAgICAgICAgICAqV2FybmluZyogVGhpcyBieXBhc3NlcyBDVFMgc2V0dXAgKGUuZy4gZG93bmxvYWQgbWVkaWEgY29udGVudHMgZnJvbSBzZXJ2ZXIpJwotICBlY2hvICcgICAgICAgICAgRm9yIHJ1bm5pbmcgQ1RTIGluIG9mZmljaWFsIHdheSwgdXNlIGF0ZXN0IG9yIGN0cy10cmFkZWZlZCAnCi0gIGVjaG8gJyAgICAgLWh8LS1oZWxwOiBUaGlzIGhlbHAnCi0gIGVjaG8gJyAgICAgLS1za2lwOiBTa2lwIGJ1aWxkIGFuZCBmbGFzaC4gSnVzdCByZXJ1bi10ZXN0cycKLSAgZWNobyAnICAgICAtLW1pbjogT25seSByZWJ1aWxkIHRlc3RzIGFuZCB1cGRhdGFibGUgbGlicmFyeS4nCi0gIGVjaG8gJyAgICAgLS10ZXN0OiBPbmx5IHJlYnVpbGQgdGVzdHMnCi0gIGVjaG8gJyAgICAgLXMgW2RldmljZV9pZF06IFNwZWNpZnkgYSBkZXZpY2UgbmFtZSB0byBydW4gdGVzdCBhZ2FpbnN0LicKLSAgZWNobyAnICAgICAgICAgICAgICAgICAgICAgWW91IGNhbiBkZWZpbmUgJHtBREJIT1NUfSBpbnN0ZWFkLicKLSAgZWNobyAnICAgICAtciBbY291bnRdOiBSZXBlYXQgdGVzdHMgZm9yIGdpdmVuIGNvdW50LiBJdCB3aWxsIHN0b3Agd2hlbiBmYWlscy4nCi0gIGVjaG8gJyAgICAgLS1pZ25vcmU6IEtlZXAgcmVwZWF0aW5nIHRlc3RzIGV2ZW4gd2hlbiBpdCBmYWlscy4nCi0gIGVjaG8gJyAgICAgLXQgW3Rlc3RdOiBPbmx5IHJ1biB0aGUgc3BlY2lmaWMgdGVzdC4gQ2FuIGJlIGVpdGhlciBhIGNsYXNzIG9yIGEgbWV0aG9kLicKLX0KLQotZnVuY3Rpb24gcnVudGVzdC1jdHMtTWVkaWFDb21wb25lbnRzKCkgewotICAjIEVkaXQgaGVyZSBpZiB5b3Ugd2FudCB0byBzdXBwb3J0IG90aGVyIHRlc3RzLgotICAjIExpc3QgdXAgbGlicyBhbmQgYXBrcyBpbiB0aGUgbWVkaWFfYXBpIG5lZWRlZCBmb3IgdGVzdHMsIGFuZCBwbGFjZSB0ZXN0IHRhcmdldCBhdCB0aGUgbGFzdC4KLSAgbG9jYWwgVEVTVF9QQUNLQUdFX0RJUj0oImZyYW1ld29ya3MvYXYvcGFja2FnZXMvTWVkaWFDb21wb25lbnRzL3Rlc3QiKQotICBsb2NhbCBURVNUX1BBQ0tBR0U9KCJhbmRyb2lkLm1lZGlhLmN0cyIpCi0gIGxvY2FsIEJVSUxEX1RBUkdFVFM9KCJNZWRpYUNvbXBvbmVudHMiICJDdHNNZWRpYVRlc3RDYXNlcyIpCi0gICMgRG9uJ3QgaW5jbHVkZSBNZWRpYUNvbXBvbmVudHMgLS0gaWYgd2Ugc2ltcGx5IGluc3RhbGwgaXQsIHN5c3RlbSBzZXJ2ZXIKLSAgIyB3b3VsZG4ndCB1c2UgdGhlIGluc3RhbGxlZCBvbmUuCi0gIGxvY2FsIElOU1RBTExfVEFSR0VUUz0oIkN0c01lZGlhVGVzdENhc2VzIikKLSAgbG9jYWwgVEVTVF9SVU5ORVI9ImFuZHJvaWQuc3VwcG9ydC50ZXN0LnJ1bm5lci5BbmRyb2lkSlVuaXRSdW5uZXIiCi0gIGxvY2FsIERFUEVOREVOQ0lFUz0oIm1vY2tpdG8tdGFyZ2V0LW1pbnVzLWp1bml0NCIgImFuZHJvaWQtc3VwcG9ydC10ZXN0IiAiY29tcGF0aWJpbGl0eS1kZXZpY2UtdXRpbCIpCi0gIGxvY2FsIERFRkFVTFRfVEVTVF9UQVJHRVQ9IiIKLSAgREVGQVVMVF9URVNUX1RBUkdFVCs9ImFuZHJvaWQubWVkaWEuY3RzLk1lZGlhQnJvd3NlcjJUZXN0IgotICBERUZBVUxUX1RFU1RfVEFSR0VUKz0iLGFuZHJvaWQubWVkaWEuY3RzLk1lZGlhQ29udHJvbGxlcjJUZXN0IgotICBERUZBVUxUX1RFU1RfVEFSR0VUKz0iLGFuZHJvaWQubWVkaWEuY3RzLk1lZGlhTWV0YWRhdGEyVGVzdCIKLSAgREVGQVVMVF9URVNUX1RBUkdFVCs9IixhbmRyb2lkLm1lZGlhLmN0cy5NZWRpYVNlc3Npb24yVGVzdCIKLSAgREVGQVVMVF9URVNUX1RBUkdFVCs9IixhbmRyb2lkLm1lZGlhLmN0cy5NZWRpYVNlc3Npb24yX1Blcm1pc3Npb25UZXN0IgotICBERUZBVUxUX1RFU1RfVEFSR0VUKz0iLGFuZHJvaWQubWVkaWEuY3RzLk1lZGlhU2Vzc2lvbk1hbmFnZXJfTWVkaWFTZXNzaW9uMlRlc3QiCi0gIERFRkFVTFRfVEVTVF9UQVJHRVQrPSIsYW5kcm9pZC5tZWRpYS5jdHMuU2Vzc2lvblRva2VuMlRlc3QiCi0gIGlmIFtbIC16ICIke0FORFJPSURfQlVJTERfVE9QfSIgXV07IHRoZW4KLSAgICBlY2hvICJOZWVkcyB0byBsdW5jaCBhIHRhcmdldCBmaXJzdCIKLSAgICByZXR1cm4KLSAgZmkKLQotICBsb2NhbCBvbGRfcGF0aD0ke09MRFBXRH0KLSAgd2hpbGUgdHJ1ZTsgZG8KLSAgICBsb2NhbCBPUFRJT05fU0tJUD0iZmFsc2UiCi0gICAgbG9jYWwgT1BUSU9OX01JTj0iZmFsc2UiCi0gICAgbG9jYWwgT1BUSU9OX1RFU1Q9ImZhbHNlIgotICAgIGxvY2FsIE9QVElPTl9SRVBFQVRfQ09VTlQ9IjEiCi0gICAgbG9jYWwgT1BUSU9OX0lHTk9SRT0iZmFsc2UiCi0gICAgbG9jYWwgT1BUSU9OX1RFU1RfVEFSR0VUPSIke0RFRkFVTFRfVEVTVF9UQVJHRVR9IgotICAgIGxvY2FsIGFkYmhvc3RfbG9jYWwKLSAgICB3aGlsZSAoKCAiJCMiICkpOyBkbwotICAgICAgY2FzZSAiJHsxfSIgaW4KLSAgICAgICAgLWh8LS1oZWxwKQotICAgICAgICAgIF9ydW50ZXN0X2N0c19tZWRpYWNvbXBvbmVudF91c2FnZQotICAgICAgICAgIHJldHVybgotICAgICAgICAgIDs7Ci0gICAgICAgIC0tc2tpcCkKLSAgICAgICAgICBPUFRJT05fU0tJUD0idHJ1ZSIKLSAgICAgICAgICA7OwotICAgICAgICAtLW1pbikKLSAgICAgICAgICBPUFRJT05fTUlOPSJ0cnVlIgotICAgICAgICAgIDs7Ci0gICAgICAgIC0tdGVzdCkKLSAgICAgICAgICBPUFRJT05fVEVTVD0idHJ1ZSIKLSAgICAgICAgICA7OwotICAgICAgICAtcykKLSAgICAgICAgICBzaGlmdAotICAgICAgICAgIGFkYmhvc3RfbG9jYWw9JHsxfQotICAgICAgICAgIDs7Ci0gICAgICAgIC1yKQotICAgICAgICAgIHNoaWZ0Ci0gICAgICAgICAgT1BUSU9OX1JFUEVBVF9DT1VOVD0iJHsxfSIKLSAgICAgICAgICA7OwotICAgICAgICAtLWlnbm9yZSkKLSAgICAgICAgICBPUFRJT05fSUdOT1JFPSJ0cnVlIgotICAgICAgICAgIDs7Ci0gICAgICAgIC10KQotICAgICAgICAgIHNoaWZ0Ci0gICAgICAgICAgT1BUSU9OX1RFU1RfVEFSR0VUPSIkezF9IgotICAgICAgZXNhYwotICAgICAgc2hpZnQKLSAgICBkb25lCi0KLSAgICAjIEJ1aWxkIGFkYiBjb21tYW5kLgotICAgIGxvY2FsIGFkYgotICAgIGlmIFtbIC16ICIke2FkYmhvc3RfbG9jYWx9IiBdXTsgdGhlbgotICAgICAgYWRiaG9zdF9sb2NhbD0ke0FEQkhPU1R9Ci0gICAgZmkKLSAgICBpZiBbWyAteiAiJHthZGJob3N0X2xvY2FsfSIgXV07IHRoZW4KLSAgICAgIGxvY2FsIGRldmljZV9jb3VudD0kKGFkYiBkZXZpY2VzIHwgc2VkICcvXltbOnNwYWNlOl1dKiQvZCcgfCB3YyAtbCkKLSAgICAgIGlmIFtbICIke2RldmljZV9jb3VudH0iICE9ICIyIiBdXTsgdGhlbgotICAgICAgICBlY2hvICJUb28gbWFueSBkZXZpY2VzLiBTcGVjaWZ5IGEgZGV2aWNlLiIgJiYgYnJlYWsKLSAgICAgIGZpCi0gICAgICBhZGI9ImFkYiIKLSAgICBlbHNlCi0gICAgICBhZGI9ImFkYiAtcyAke2FkYmhvc3RfbG9jYWx9IgotICAgIGZpCi0KLSAgICBsb2NhbCB0YXJnZXRfZGlyPSIke0FORFJPSURfQlVJTERfVE9QfS8ke1RFU1RfUEFDS0FHRV9ESVJ9IgotICAgICNsb2NhbCBURVNUX1BBQ0tBR0U9JChzZWQgLW4gJ3MvXi4qXGJwYWNrYWdlXGI9IlwoW2EtejAtOVwuXSpcKSIuKiQvXDEvcCcgJHt0YXJnZXRfZGlyfS9BbmRyb2lkTWFuaWZlc3QueG1sKQotCi0gICAgaWYgW1sgIiR7T1BUSU9OX1NLSVB9IiAhPSAidHJ1ZSIgXV07IHRoZW4KLSAgICAgICMgQnVpbGQgZGVwZW5kZW5jaWVzIGlmIG5lZWRlZC4KLSAgICAgIGxvY2FsIGRlcGVuZGVuY3kKLSAgICAgIGxvY2FsIGJ1aWxkX2RlcGVuZGVuY3k9IiIKLSAgICAgIGZvciBkZXBlbmRlbmN5IGluICR7REVQRU5ERU5DSUVTW0BdfTsgZG8KLSAgICAgICAgaWYgW1sgIiR7ZGVwZW5kZW5jeX0iID09ICJvdXQvIiogXV07IHRoZW4KLSAgICAgICAgICBpZiBbWyAhIC1mICR7QU5EUk9JRF9CVUlMRF9UT1B9LyR7ZGVwZW5kZW5jeX0gXV07IHRoZW4KLSAgICAgICAgICAgIGJ1aWxkX2RlcGVuZGVuY3k9InRydWUiCi0gICAgICAgICAgICBicmVhawotICAgICAgICAgIGZpCi0gICAgICAgIGVsc2UKLSAgICAgICAgICBpZiBbWyAiJChmaW5kICR7T1VUfSAtbmFtZSAke2RlcGVuZGVuY3l9X2ludGVybWVkaWF0ZXMgfCB3YyAtbCkiID09ICIwIiBdXTsgdGhlbgotICAgICAgICAgICAgYnVpbGRfZGVwZW5kZW5jeT0idHJ1ZSIKLSAgICAgICAgICAgIGJyZWFrCi0gICAgICAgICAgZmkKLSAgICAgICAgZmkKLSAgICAgIGRvbmUKLSAgICAgIGlmIFtbICIke2J1aWxkX2RlcGVuZGVuY3l9IiA9PSAidHJ1ZSIgXV07IHRoZW4KLSAgICAgICAgZWNobyAiQnVpbGRpbmcgZGVwZW5kZW5jaWVzLiBXaWxsIG9ubHkgcHJpbnQgc3RkZXJyLiIKLSAgICAgICAgbSAke0RFUEVOREVOQ0lFU1tAXX0gLWogPiAvZGV2L251bGwKLSAgICAgIGZpCi0KLSAgICAgICMgQnVpbGQgdGVzdCBhcGsgYW5kIHJlcXVpcmVkIGFway4KLSAgICAgIGxvY2FsIGJ1aWxkX3RhcmdldHMKLSAgICAgIGlmIFtbICIke09QVElPTl9URVNUfSIgPT0gInRydWUiIF1dOyB0aGVuCi0gICAgICAgIGJ1aWxkX3RhcmdldHM9IiR7SU5TVEFMTF9UQVJHRVRTW0BdfSIKLSAgICAgIGVsaWYgW1sgIiR7T1BUSU9OX01JTn0iID09ICJ0cnVlIiBdXTsgdGhlbgotICAgICAgICBidWlsZF90YXJnZXRzPSIke0JVSUxEX1RBUkdFVFNbQF19IgotICAgICAgZWxzZQotICAgICAgICBidWlsZF90YXJnZXRzPSIke0JVSUxEX1RBUkdFVFNbQF19IGRyb2lkIgotICAgICAgZmkKLSAgICAgIG0gJHtidWlsZF90YXJnZXRzfSAtaiB8fCBicmVhawotCi0gICAgICBpZiBbWyAiJHtPUFRJT05fVEVTVH0iICE9ICJ0cnVlIiBdXTsgdGhlbgotICAgICAgICAjIEZsYXNoIG9ubHkgd2hlbiBuZWVkZWQKLSAgICAgICAgbG9jYWwgZGV2aWNlX2J1aWxkX3R5cGU9IiQoJHthZGJ9IHNoZWxsIGdldHByb3Agcm8uYnVpbGQudHlwZSkiCi0gICAgICAgIGlmIFtbICIke2RldmljZV9idWlsZF90eXBlfSIgPT0gInVzZXIiIF1dOyB0aGVuCi0gICAgICAgICAgIyBVc2VyIGJ1aWxkLiBDYW5ub3QgYWRiIHN5bmMKLSAgICAgICAgICAke2FkYn0gcmVib290IGJvb3Rsb2FkZXIKLSAgICAgICAgICBmYXN0Ym9vdCBmbGFzaGFsbAotICAgICAgICBlbHNlCi0gICAgICAgICAgJHthZGJ9IHJvb3QKLSAgICAgICAgICBsb2NhbCBkZXZpY2VfdmVyaXR5X21vZGU9IiQoJHthZGJ9IHNoZWxsIGdldHByb3Agcm8uYm9vdC52ZXJpdHltb2RlKSIKLSAgICAgICAgICBpZiBbWyAiJHtkZXZpY2VfdmVyaXR5X21vZGV9IiAhPSAiZGlzYWJsZWQiIF1dOyB0aGVuCi0gICAgICAgICAgICAke2FkYn0gZGlzYWJsZS12ZXJpdHkKLSAgICAgICAgICAgICR7YWRifSByZWJvb3QKLSAgICAgICAgICAgICR7YWRifSB3YWl0LWZvci1kZXZpY2UgfHwgYnJlYWsKLSAgICAgICAgICAgICR7YWRifSByb290Ci0gICAgICAgICAgZmkKLSAgICAgICAgICAke2FkYn0gcmVtb3VudAotICAgICAgICAgICR7YWRifSBzaGVsbCBzdG9wCi0gICAgICAgICAgJHthZGJ9IHNoZWxsIHNldHByb3AgbG9nLnRhZy5NZWRpYVNlc3Npb25TZXJ2aWNlIERFQlVHCi0gICAgICAgICAgJHthZGJ9IHN5bmMKLSAgICAgICAgICAke2FkYn0gc2hlbGwgc3RhcnQKLSAgICAgICAgZmkKLSAgICAgICAgJHthZGJ9IHdhaXQtZm9yLWRldmljZSB8fCBicmVhawotICAgICAgICAjIEVuc3VyZSBwYWNrYWdlIG1hbmFnZXIgaXMgbG9hZGVkLgotICAgICAgICAjIFRPRE8oamFld2FuKTogRmluZCBiZXR0ZXIgd2F5IHRvIHdhaXQKLSAgICAgICAgc2xlZXAgMTUKLSAgICAgIGZpCi0KLSAgICAgICMgSW5zdGFsbCBhcGtzCi0gICAgICBsb2NhbCBpbnN0YWxsX2ZhaWxlZD0iZmFsc2UiCi0gICAgICBmb3IgdGFyZ2V0IGluICR7SU5TVEFMTF9UQVJHRVRTW0BdfTsgZG8KLSAgICAgICAgbG9jYWwgYXBrX3BhdGg9JChmaW5kICR7T1VUfS9zeXN0ZW0gJHtPVVR9L2RhdGEgLW5hbWUgJHt0YXJnZXR9LmFwaykKLSAgICAgICAgbG9jYWwgYXBrX251bT0kKGZpbmQgJHtPVVR9L3N5c3RlbSAke09VVH0vZGF0YSAtbmFtZSAke3RhcmdldH0uYXBrIHwgd2MgLWwpCi0gICAgICAgIGlmIFtbICIke2Fwa19udW19IiAhPSAiMSIgXV07IHRoZW4KLSAgICAgICAgICBlY2hvICJDYW5ub3QgbG9jYXRlIGEgJHt0YXJnZXR9LmFway4gRm91bmQgJHthcGtfbnVtfSBhcGtzIiAmJiBicmVhawotICAgICAgICBmaQotICAgICAgICBlY2hvICJJbnN0YWxsaW5nICR7dGFyZ2V0fS5hcGsuIHBhdGg9JHthcGtfcGF0aH0iCi0gICAgICAgICR7YWRifSBpbnN0YWxsIC1yICR7YXBrX3BhdGh9Ci0gICAgICAgIGlmIFtbICIkez99IiAhPSAiMCIgXV07IHRoZW4KLSAgICAgICAgICBpbnN0YWxsX2ZhaWxlZD0idHJ1ZSIKLSAgICAgICAgICBicmVhawotICAgICAgICBmaQotICAgICAgZG9uZQotICAgICAgaWYgW1sgIiR7aW5zdGFsbF9mYWlsZWR9IiA9PSAidHJ1ZSIgXV07IHRoZW4KLSAgICAgICAgZWNobyAiRmFpbGVkIHRvIGluc3RhbGwuIFRlc3Qgd291bGRuJ3QgcnVuLiIKLSAgICAgICAgYnJlYWsKLSAgICAgIGZpCi0gICAgZmkKLQotICAgIGxvY2FsIHRlc3RfdGFyZ2V0PSIiCi0gICAgaWYgW1sgLW4gIiR7T1BUSU9OX1RFU1RfVEFSR0VUfSIgXV07IHRoZW4KLSAgICAgIHRlc3RfdGFyZ2V0PSItZSBjbGFzcyAke09QVElPTl9URVNUX1RBUkdFVH0iCi0gICAgZmkKLQotICAgIGxvY2FsIGkKLSAgICBsb2NhbCB0bXBmaWxlPSQodGVtcGZpbGUpCi0gICAgZm9yICgoaT0xOyBpIDw9ICR7T1BUSU9OX1JFUEVBVF9DT1VOVH07IGkrKykpOyBkbwotICAgICAgZWNobyAiUnVuIHRlc3QgJHtpfS8ke09QVElPTl9SRVBFQVRfQ09VTlR9IgotICAgICAgJHthZGJ9IHNoZWxsIGFtIGluc3RydW1lbnQgJHt0ZXN0X3RhcmdldH0gLXcgJHtURVNUX1BBQ0tBR0V9LyR7VEVTVF9SVU5ORVJ9ID4mICR7dG1wZmlsZX0KLSAgICAgIGNhdCAke3RtcGZpbGV9Ci0gICAgICBpZiBbWyAiJHtPUFRJT05fSUdOT1JFfSIgIT0gInRydWUiIF1dOyB0aGVuCi0gICAgICAgIGlmIFtbIC1uICIkKGdyZXAgJHt0bXBmaWxlfSAtZSAnRkFJTFVSRVx8Y3Jhc2hlZCcpIiBdXTsgdGhlbgotICAgICAgICAgICMgYW0gaW5zdHJ1bWVudCBkb2Vzbid0IHJldHVybiBlcnJvciBjb2RlIHNvIG5lZWQgdG8gZ3JlcCByZXN1bHQgbWVzc2FnZSBpbnN0ZWFkCi0gICAgICAgICAgYnJlYWsKLSAgICAgICAgZmkKLSAgICAgIGZpCi0gICAgZG9uZQotICAgIHJtICR7dG1wZmlsZX0KLSAgICBicmVhawotICBkb25lCi19Ci0KLWVjaG8gIkZvbGxvd2luZyBmdW5jdGlvbnMgYXJlIGFkZGVkIHRvIHlvdXIgZW52aXJvbm1lbnQ6IgotX3J1bnRlc3RfY3RzX21lZGlhY29tcG9uZW50X3VzYWdlCmRpZmYgLS1naXQgYS9wYWNrYWdlcy9NZWRpYUNvbXBvbmVudHMvc3JjL2NvbS9hbmRyb2lkL21lZGlhL0lNZWRpYUNvbnRyb2xsZXIyLmFpZGwgYi9wYWNrYWdlcy9NZWRpYUNvbXBvbmVudHMvc3JjL2NvbS9hbmRyb2lkL21lZGlhL0lNZWRpYUNvbnRyb2xsZXIyLmFpZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDA0ODhiNzAuLjAwMDAwMDAKLS0tIGEvcGFja2FnZXMvTWVkaWFDb21wb25lbnRzL3NyYy9jb20vYW5kcm9pZC9tZWRpYS9JTWVkaWFDb250cm9sbGVyMi5haWRsCisrKyAvZGV2L251bGwKQEAgLTEsNjcgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAyMDE4IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKLSAqCi0gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKLSAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KLSAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotICoKLSAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0gKgotICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQotICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKLSAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgotICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAotICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCi0gKi8KLQotcGFja2FnZSBjb20uYW5kcm9pZC5tZWRpYTsKLQotaW1wb3J0IGFuZHJvaWQuYXBwLlBlbmRpbmdJbnRlbnQ7Ci1pbXBvcnQgYW5kcm9pZC5vcy5CdW5kbGU7Ci1pbXBvcnQgYW5kcm9pZC5vcy5SZXN1bHRSZWNlaXZlcjsKLQotaW1wb3J0IGNvbS5hbmRyb2lkLm1lZGlhLklNZWRpYVNlc3Npb24yOwotCi0vKioKLSAqIEludGVyZmFjZSBmcm9tIE1lZGlhU2Vzc2lvbjIgdG8gTWVkaWFDb250cm9sbGVyMi4KLSAqIDxwPgotICogS2VlcCB0aGlzIGludGVyZmFjZSBvbmV3YXkuIE90aGVyd2lzZSBhIG1hbGljaW91cyBhcHAgbWF5IGltcGxlbWVudCBmYWtlIHZlcnNpb24gb2YgdGhpcywKLSAqIGFuZCBob2xkcyBjYWxscyBmcm9tIHNlc3Npb24gdG8gbWFrZSBzZXNzaW9uIG93bmVyKHMpIGZyb3plbi4KLSAqLwotLy8gVE9ETyhqYWV3YW4pOiAoUG9zdCBQKSBIYW5kbGUgd2hlbiB0aGUgcGxheWxpc3QgYmVjb21lcyB0b28gaHVnZS4KLS8vICAgICAgICAgICAgICAgTm90ZSB0aGF0IFBhcmNlbGxlZFNsaWNlTGlzdCBpc24ndCBhIGdvb2QgaWRlYSBmb3IgdGhlIHB1cnBvc2UuIChzZWU6IGIvMzc0OTM2NzcpCi1vbmV3YXkgaW50ZXJmYWNlIElNZWRpYUNvbnRyb2xsZXIyIHsKLSAgICB2b2lkIG9uUGxheWVyU3RhdGVDaGFuZ2VkKGludCBzdGF0ZSk7Ci0gICAgdm9pZCBvblBvc2l0aW9uQ2hhbmdlZChsb25nIGV2ZW50VGltZU1zLCBsb25nIHBvc2l0aW9uTXMpOwotICAgIHZvaWQgb25QbGF5YmFja1NwZWVkQ2hhbmdlZChmbG9hdCBzcGVlZCk7Ci0gICAgdm9pZCBvbkJ1ZmZlcmVkUG9zaXRpb25DaGFuZ2VkKGxvbmcgYnVmZmVyZWRQb3NpdGlvbk1zKTsKLSAgICB2b2lkIG9uUGxheWxpc3RDaGFuZ2VkKGluIExpc3Q8QnVuZGxlPiBwbGF5bGlzdCwgaW4gQnVuZGxlIG1ldGFkYXRhKTsKLSAgICB2b2lkIG9uUGxheWxpc3RNZXRhZGF0YUNoYW5nZWQoaW4gQnVuZGxlIG1ldGFkYXRhKTsKLSAgICB2b2lkIG9uUGxheWJhY2tJbmZvQ2hhbmdlZChpbiBCdW5kbGUgcGxheWJhY2tJbmZvKTsKLSAgICB2b2lkIG9uUmVwZWF0TW9kZUNoYW5nZWQoaW50IHJlcGVhdE1vZGUpOwotICAgIHZvaWQgb25TaHVmZmxlTW9kZUNoYW5nZWQoaW50IHNodWZmbGVNb2RlKTsKLSAgICB2b2lkIG9uRXJyb3IoaW50IGVycm9yQ29kZSwgaW4gQnVuZGxlIGV4dHJhcyk7Ci0KLSAgICB2b2lkIG9uQ29ubmVjdGVkKElNZWRpYVNlc3Npb24yIHNlc3Npb25CaW5kZXIsIGluIEJ1bmRsZSBjb21tYW5kR3JvdXAsCi0gICAgICAgICAgICBpbnQgcGxheWVyU3RhdGUsIGxvbmcgcG9zaXRpb25FdmVudFRpbWVNcywgbG9uZyBwb3NpdGlvbk1zLCBmbG9hdCBwbGF5YmFja1NwZWVkLAotICAgICAgICAgICAgbG9uZyBidWZmZXJlZFBvc2l0aW9uTXMsIGluIEJ1bmRsZSBwbGF5YmFja0luZm8sIGludCByZXBlYXRNb2RlLCBpbnQgc2h1ZmZsZU1vZGUsCi0gICAgICAgICAgICBpbiBMaXN0PEJ1bmRsZT4gcGxheWxpc3QsIGluIFBlbmRpbmdJbnRlbnQgc2Vzc2lvbkFjdGl2aXR5KTsKLSAgICB2b2lkIG9uRGlzY29ubmVjdGVkKCk7Ci0KLSAgICB2b2lkIG9uQ3VzdG9tTGF5b3V0Q2hhbmdlZChpbiBMaXN0PEJ1bmRsZT4gY29tbWFuZEJ1dHRvbmxpc3QpOwotICAgIHZvaWQgb25BbGxvd2VkQ29tbWFuZHNDaGFuZ2VkKGluIEJ1bmRsZSBjb21tYW5kcyk7Ci0KLSAgICB2b2lkIG9uQ3VzdG9tQ29tbWFuZChpbiBCdW5kbGUgY29tbWFuZCwgaW4gQnVuZGxlIGFyZ3MsIGluIFJlc3VsdFJlY2VpdmVyIHJlY2VpdmVyKTsKLQotICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KLSAgICAvLyBCcm93c2VyIHNlcGNpZmljCi0gICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLwotICAgIHZvaWQgb25HZXRMaWJyYXJ5Um9vdERvbmUoaW4gQnVuZGxlIHJvb3RIaW50cywgU3RyaW5nIHJvb3RNZWRpYUlkLCBpbiBCdW5kbGUgcm9vdEV4dHJhKTsKLSAgICB2b2lkIG9uR2V0SXRlbURvbmUoU3RyaW5nIG1lZGlhSWQsIGluIEJ1bmRsZSByZXN1bHQpOwotICAgIHZvaWQgb25DaGlsZHJlbkNoYW5nZWQoU3RyaW5nIHJvb3RNZWRpYUlkLCBpbnQgaXRlbUNvdW50LCBpbiBCdW5kbGUgZXh0cmFzKTsKLSAgICB2b2lkIG9uR2V0Q2hpbGRyZW5Eb25lKFN0cmluZyBwYXJlbnRJZCwgaW50IHBhZ2UsIGludCBwYWdlU2l6ZSwgaW4gTGlzdDxCdW5kbGU+IHJlc3VsdCwKLSAgICAgICAgICAgIGluIEJ1bmRsZSBleHRyYXMpOwotICAgIHZvaWQgb25TZWFyY2hSZXN1bHRDaGFuZ2VkKFN0cmluZyBxdWVyeSwgaW50IGl0ZW1Db3VudCwgaW4gQnVuZGxlIGV4dHJhcyk7Ci0gICAgdm9pZCBvbkdldFNlYXJjaFJlc3VsdERvbmUoU3RyaW5nIHF1ZXJ5LCBpbnQgcGFnZSwgaW50IHBhZ2VTaXplLCBpbiBMaXN0PEJ1bmRsZT4gcmVzdWx0LAotICAgICAgICAgICAgaW4gQnVuZGxlIGV4dHJhcyk7Ci19CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9NZWRpYUNvbXBvbmVudHMvc3JjL2NvbS9hbmRyb2lkL21lZGlhL0lNZWRpYVNlc3Npb24yLmFpZGwgYi9wYWNrYWdlcy9NZWRpYUNvbXBvbmVudHMvc3JjL2NvbS9hbmRyb2lkL21lZGlhL0lNZWRpYVNlc3Npb24yLmFpZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDY2NDQ2N2QuLjAwMDAwMDAKLS0tIGEvcGFja2FnZXMvTWVkaWFDb21wb25lbnRzL3NyYy9jb20vYW5kcm9pZC9tZWRpYS9JTWVkaWFTZXNzaW9uMi5haWRsCisrKyAvZGV2L251bGwKQEAgLTEsODUgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAyMDE4IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKLSAqCi0gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKLSAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KLSAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotICoKLSAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0gKgotICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQotICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKLSAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgotICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAotICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCi0gKi8KLQotcGFja2FnZSBjb20uYW5kcm9pZC5tZWRpYTsKLQotaW1wb3J0IGFuZHJvaWQub3MuQnVuZGxlOwotaW1wb3J0IGFuZHJvaWQub3MuUmVzdWx0UmVjZWl2ZXI7Ci1pbXBvcnQgYW5kcm9pZC5uZXQuVXJpOwotCi1pbXBvcnQgY29tLmFuZHJvaWQubWVkaWEuSU1lZGlhQ29udHJvbGxlcjI7Ci0KLS8qKgotICogSW50ZXJmYWNlIGZyb20gTWVkaWFDb250cm9sbGVyMiB0byBNZWRpYVNlc3Npb24yLgotICogPHA+Ci0gKiBLZWVwIHRoaXMgaW50ZXJmYWNlIG9uZXdheS4gT3RoZXJ3aXNlIGEgbWFsaWNpb3VzIGFwcCBtYXkgaW1wbGVtZW50IGZha2UgdmVyc2lvbiBvZiB0aGlzLAotICogYW5kIGhvbGRzIGNhbGxzIGZyb20gc2Vzc2lvbiB0byBtYWtlIHNlc3Npb24gb3duZXIocykgZnJvemVuLgotICovCi0gLy8gVE9ETyhqYWV3YW4pOiAoUG9zdCBQKSBIYW5kbGUgd2hlbiB0aGUgcGxheWxpc3QgYmVjb21lcyB0b28gaHVnZS4KLSAvLyAgICAgICAgICAgICAgIE5vdGUgdGhhdCBQYXJjZWxsZWRTbGljZUxpc3QgaXNuJ3QgYSBnb29kIGlkZWEgZm9yIHRoZSBwdXJwb3NlLiAoc2VlOiBiLzM3NDkzNjc3KQotb25ld2F5IGludGVyZmFjZSBJTWVkaWFTZXNzaW9uMiB7Ci0gICAgLy8gVE9ETyhqYWV3YW4pOiBhZGQgb25Db21tYW5kKCkgdG8gc2VuZCBwcml2YXRlIGNvbW1hbmQKLQotICAgIC8vIFRPRE8oamFld2FuKTogKFBvc3QgUCkgV2UgbWF5IGNvbnNpZGVyIHRvIGFkZCBhbm90aGVyIGJpbmRlciBqdXN0IGZvciB0aGUgY29ubmVjdGlvbgotICAgIC8vICAgICAgICAgICAgICAgbm90IHRvIGV4cG9zZSBvdGhlciBtZXRob2RzIHRvIHRoZSBjb250cm9sbGVyIHdob3NlIGNvbm5lY3Rpb24gd2Fzbid0IGFjY2VwdGVkLgotICAgIC8vICAgICAgICAgICAgICAgQnV0IHRoaXMgd291bGQgYmUgZW5vdWdoIGZvciBub3cgYmVjYXVzZSBpdCdzIHRoZSBzYW1lIGFzIGV4aXN0aW5nCi0gICAgLy8gICAgICAgICAgICAgICBNZWRpYUJyb3dzZXIgYW5kIE1lZGlhQnJvd3NlclNlcnZpY2UuCi0gICAgdm9pZCBjb25uZWN0KElNZWRpYUNvbnRyb2xsZXIyIGNhbGxlciwgU3RyaW5nIGNhbGxpbmdQYWNrYWdlKTsKLSAgICB2b2lkIHJlbGVhc2UoSU1lZGlhQ29udHJvbGxlcjIgY2FsbGVyKTsKLQotICAgIHZvaWQgc2V0Vm9sdW1lVG8oSU1lZGlhQ29udHJvbGxlcjIgY2FsbGVyLCBpbnQgdmFsdWUsIGludCBmbGFncyk7Ci0gICAgdm9pZCBhZGp1c3RWb2x1bWUoSU1lZGlhQ29udHJvbGxlcjIgY2FsbGVyLCBpbnQgZGlyZWN0aW9uLCBpbnQgZmxhZ3MpOwotCi0gICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLwotICAgIC8vIHNlbmQgY29tbWFuZAotICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KLSAgICB2b2lkIHNlbmRUcmFuc3BvcnRDb250cm9sQ29tbWFuZChJTWVkaWFDb250cm9sbGVyMiBjYWxsZXIsCi0gICAgICAgICAgICBpbnQgY29tbWFuZENvZGUsIGluIEJ1bmRsZSBhcmdzKTsKLSAgICB2b2lkIHNlbmRDdXN0b21Db21tYW5kKElNZWRpYUNvbnRyb2xsZXIyIGNhbGxlciwgaW4gQnVuZGxlIGNvbW1hbmQsIGluIEJ1bmRsZSBhcmdzLAotICAgICAgICAgICAgaW4gUmVzdWx0UmVjZWl2ZXIgcmVjZWl2ZXIpOwotCi0gICAgdm9pZCBwcmVwYXJlRnJvbVVyaShJTWVkaWFDb250cm9sbGVyMiBjYWxsZXIsIGluIFVyaSB1cmksIGluIEJ1bmRsZSBleHRyYXMpOwotICAgIHZvaWQgcHJlcGFyZUZyb21TZWFyY2goSU1lZGlhQ29udHJvbGxlcjIgY2FsbGVyLCBTdHJpbmcgcXVlcnksIGluIEJ1bmRsZSBleHRyYXMpOwotICAgIHZvaWQgcHJlcGFyZUZyb21NZWRpYUlkKElNZWRpYUNvbnRyb2xsZXIyIGNhbGxlciwgU3RyaW5nIG1lZGlhSWQsIGluIEJ1bmRsZSBleHRyYXMpOwotICAgIHZvaWQgcGxheUZyb21VcmkoSU1lZGlhQ29udHJvbGxlcjIgY2FsbGVyLCBpbiBVcmkgdXJpLCBpbiBCdW5kbGUgZXh0cmFzKTsKLSAgICB2b2lkIHBsYXlGcm9tU2VhcmNoKElNZWRpYUNvbnRyb2xsZXIyIGNhbGxlciwgU3RyaW5nIHF1ZXJ5LCBpbiBCdW5kbGUgZXh0cmFzKTsKLSAgICB2b2lkIHBsYXlGcm9tTWVkaWFJZChJTWVkaWFDb250cm9sbGVyMiBjYWxsZXIsIFN0cmluZyBtZWRpYUlkLCBpbiBCdW5kbGUgZXh0cmFzKTsKLSAgICB2b2lkIHNldFJhdGluZyhJTWVkaWFDb250cm9sbGVyMiBjYWxsZXIsIFN0cmluZyBtZWRpYUlkLCBpbiBCdW5kbGUgcmF0aW5nKTsKLQotICAgIHZvaWQgc2V0UGxheWxpc3QoSU1lZGlhQ29udHJvbGxlcjIgY2FsbGVyLCBpbiBMaXN0PEJ1bmRsZT4gcGxheWxpc3QsIGluIEJ1bmRsZSBtZXRhZGF0YSk7Ci0gICAgdm9pZCB1cGRhdGVQbGF5bGlzdE1ldGFkYXRhKElNZWRpYUNvbnRyb2xsZXIyIGNhbGxlciwgaW4gQnVuZGxlIG1ldGFkYXRhKTsKLSAgICB2b2lkIGFkZFBsYXlsaXN0SXRlbShJTWVkaWFDb250cm9sbGVyMiBjYWxsZXIsIGludCBpbmRleCwgaW4gQnVuZGxlIG1lZGlhSXRlbSk7Ci0gICAgdm9pZCByZW1vdmVQbGF5bGlzdEl0ZW0oSU1lZGlhQ29udHJvbGxlcjIgY2FsbGVyLCBpbiBCdW5kbGUgbWVkaWFJdGVtKTsKLSAgICB2b2lkIHJlcGxhY2VQbGF5bGlzdEl0ZW0oSU1lZGlhQ29udHJvbGxlcjIgY2FsbGVyLCBpbnQgaW5kZXgsIGluIEJ1bmRsZSBtZWRpYUl0ZW0pOwotICAgIHZvaWQgc2tpcFRvUGxheWxpc3RJdGVtKElNZWRpYUNvbnRyb2xsZXIyIGNhbGxlciwgaW4gQnVuZGxlIG1lZGlhSXRlbSk7Ci0gICAgdm9pZCBza2lwVG9QcmV2aW91c0l0ZW0oSU1lZGlhQ29udHJvbGxlcjIgY2FsbGVyKTsKLSAgICB2b2lkIHNraXBUb05leHRJdGVtKElNZWRpYUNvbnRyb2xsZXIyIGNhbGxlcik7Ci0gICAgdm9pZCBzZXRSZXBlYXRNb2RlKElNZWRpYUNvbnRyb2xsZXIyIGNhbGxlciwgaW50IHJlcGVhdE1vZGUpOwotICAgIHZvaWQgc2V0U2h1ZmZsZU1vZGUoSU1lZGlhQ29udHJvbGxlcjIgY2FsbGVyLCBpbnQgc2h1ZmZsZU1vZGUpOwotCi0gICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLwotICAgIC8vIGxpYnJhcnkgc2VydmljZSBzcGVjaWZpYwotICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KLSAgICB2b2lkIGdldExpYnJhcnlSb290KElNZWRpYUNvbnRyb2xsZXIyIGNhbGxlciwgaW4gQnVuZGxlIHJvb3RIaW50cyk7Ci0gICAgdm9pZCBnZXRJdGVtKElNZWRpYUNvbnRyb2xsZXIyIGNhbGxlciwgU3RyaW5nIG1lZGlhSWQpOwotICAgIHZvaWQgZ2V0Q2hpbGRyZW4oSU1lZGlhQ29udHJvbGxlcjIgY2FsbGVyLCBTdHJpbmcgcGFyZW50SWQsIGludCBwYWdlLCBpbnQgcGFnZVNpemUsCi0gICAgICAgICAgICBpbiBCdW5kbGUgZXh0cmFzKTsKLSAgICB2b2lkIHNlYXJjaChJTWVkaWFDb250cm9sbGVyMiBjYWxsZXIsIFN0cmluZyBxdWVyeSwgaW4gQnVuZGxlIGV4dHJhcyk7Ci0gICAgdm9pZCBnZXRTZWFyY2hSZXN1bHQoSU1lZGlhQ29udHJvbGxlcjIgY2FsbGVyLCBTdHJpbmcgcXVlcnksIGludCBwYWdlLCBpbnQgcGFnZVNpemUsCi0gICAgICAgICAgICBpbiBCdW5kbGUgZXh0cmFzKTsKLSAgICB2b2lkIHN1YnNjcmliZShJTWVkaWFDb250cm9sbGVyMiBjYWxsZXIsIFN0cmluZyBwYXJlbnRJZCwgaW4gQnVuZGxlIGV4dHJhcyk7Ci0gICAgdm9pZCB1bnN1YnNjcmliZShJTWVkaWFDb250cm9sbGVyMiBjYWxsZXIsIFN0cmluZyBwYXJlbnRJZCk7Ci19CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9NZWRpYUNvbXBvbmVudHMvc3JjL2NvbS9hbmRyb2lkL21lZGlhL01lZGlhQnJvd3NlcjJJbXBsLmphdmEgYi9wYWNrYWdlcy9NZWRpYUNvbXBvbmVudHMvc3JjL2NvbS9hbmRyb2lkL21lZGlhL01lZGlhQnJvd3NlcjJJbXBsLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGM5MDkwOTkuLjAwMDAwMDAKLS0tIGEvcGFja2FnZXMvTWVkaWFDb21wb25lbnRzL3NyYy9jb20vYW5kcm9pZC9tZWRpYS9NZWRpYUJyb3dzZXIySW1wbC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjM3ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgMjAxOCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0Ci0gKgotICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7Ci0gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCi0gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLSAqCi0gKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotICoKLSAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKLSAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCi0gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KLSAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKLSAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgotICovCi0KLXBhY2thZ2UgY29tLmFuZHJvaWQubWVkaWE7Ci0KLWltcG9ydCBhbmRyb2lkLmNvbnRlbnQuQ29udGV4dDsKLWltcG9ydCBhbmRyb2lkLm1lZGlhLk1lZGlhQnJvd3NlcjI7Ci1pbXBvcnQgYW5kcm9pZC5tZWRpYS5NZWRpYUJyb3dzZXIyLkJyb3dzZXJDYWxsYmFjazsKLWltcG9ydCBhbmRyb2lkLm1lZGlhLk1lZGlhQ29udHJvbGxlcjI7Ci1pbXBvcnQgYW5kcm9pZC5tZWRpYS5NZWRpYUl0ZW0yOwotaW1wb3J0IGFuZHJvaWQubWVkaWEuU2Vzc2lvblRva2VuMjsKLWltcG9ydCBhbmRyb2lkLm1lZGlhLnVwZGF0ZS5NZWRpYUJyb3dzZXIyUHJvdmlkZXI7Ci1pbXBvcnQgYW5kcm9pZC5vcy5CdW5kbGU7Ci1pbXBvcnQgYW5kcm9pZC5vcy5SZW1vdGVFeGNlcHRpb247Ci1pbXBvcnQgYW5kcm9pZC50ZXh0LlRleHRVdGlsczsKLWltcG9ydCBhbmRyb2lkLnV0aWwuTG9nOwotCi1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLmNvbmN1cnJlbnQuRXhlY3V0b3I7Ci0KLXB1YmxpYyBjbGFzcyBNZWRpYUJyb3dzZXIySW1wbCBleHRlbmRzIE1lZGlhQ29udHJvbGxlcjJJbXBsIGltcGxlbWVudHMgTWVkaWFCcm93c2VyMlByb3ZpZGVyIHsKLSAgICBwcml2YXRlIGZpbmFsIFN0cmluZyBUQUcgPSAiTWVkaWFCcm93c2VyMiI7Ci0gICAgcHJpdmF0ZSBmaW5hbCBib29sZWFuIERFQlVHID0gdHJ1ZTsgLy8gVE9ETyhqYWV3YW4pOiBjaGFuZ2UuCi0KLSAgICBwcml2YXRlIGZpbmFsIE1lZGlhQnJvd3NlcjIgbUluc3RhbmNlOwotICAgIHByaXZhdGUgZmluYWwgTWVkaWFCcm93c2VyMi5Ccm93c2VyQ2FsbGJhY2sgbUNhbGxiYWNrOwotCi0gICAgcHVibGljIE1lZGlhQnJvd3NlcjJJbXBsKENvbnRleHQgY29udGV4dCwgTWVkaWFCcm93c2VyMiBpbnN0YW5jZSwgU2Vzc2lvblRva2VuMiB0b2tlbiwKLSAgICAgICAgICAgIEV4ZWN1dG9yIGV4ZWN1dG9yLCBCcm93c2VyQ2FsbGJhY2sgY2FsbGJhY2spIHsKLSAgICAgICAgc3VwZXIoY29udGV4dCwgaW5zdGFuY2UsIHRva2VuLCBleGVjdXRvciwgY2FsbGJhY2spOwotICAgICAgICBtSW5zdGFuY2UgPSBpbnN0YW5jZTsKLSAgICAgICAgbUNhbGxiYWNrID0gY2FsbGJhY2s7Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlIE1lZGlhQnJvd3NlcjIgZ2V0SW5zdGFuY2UoKSB7Ci0gICAgICAgIHJldHVybiAoTWVkaWFCcm93c2VyMikgc3VwZXIuZ2V0SW5zdGFuY2UoKTsKLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgdm9pZCBnZXRMaWJyYXJ5Um9vdF9pbXBsKEJ1bmRsZSByb290SGludHMpIHsKLSAgICAgICAgZmluYWwgSU1lZGlhU2Vzc2lvbjIgYmluZGVyID0gZ2V0U2Vzc2lvbkJpbmRlcigpOwotICAgICAgICBpZiAoYmluZGVyICE9IG51bGwpIHsKLSAgICAgICAgICAgIHRyeSB7Ci0gICAgICAgICAgICAgICAgYmluZGVyLmdldExpYnJhcnlSb290KGdldENvbnRyb2xsZXJTdHViKCksIHJvb3RIaW50cyk7Ci0gICAgICAgICAgICB9IGNhdGNoIChSZW1vdGVFeGNlcHRpb24gZSkgewotICAgICAgICAgICAgICAgIC8vIFRPRE8oamFld2FuKTogSGFuZGxlIGRpc2Nvbm5lY3QuCi0gICAgICAgICAgICAgICAgaWYgKERFQlVHKSB7Ci0gICAgICAgICAgICAgICAgICAgIExvZy53KFRBRywgIkNhbm5vdCBjb25uZWN0IHRvIHRoZSBzZXJ2aWNlIG9yIHRoZSBzZXNzaW9uIGlzIGdvbmUiLCBlKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBMb2cudyhUQUcsICJTZXNzaW9uIGlzbid0IGFjdGl2ZSIsIG5ldyBJbGxlZ2FsU3RhdGVFeGNlcHRpb24oKSk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgdm9pZCBzdWJzY3JpYmVfaW1wbChTdHJpbmcgcGFyZW50SWQsIEJ1bmRsZSBleHRyYXMpIHsKLSAgICAgICAgaWYgKHBhcmVudElkID09IG51bGwpIHsKLSAgICAgICAgICAgIHRocm93IG5ldyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oInBhcmVudElkIHNob3VsZG4ndCBiZSBudWxsIik7Ci0gICAgICAgIH0KLQotICAgICAgICBmaW5hbCBJTWVkaWFTZXNzaW9uMiBiaW5kZXIgPSBnZXRTZXNzaW9uQmluZGVyKCk7Ci0gICAgICAgIGlmIChiaW5kZXIgIT0gbnVsbCkgewotICAgICAgICAgICAgdHJ5IHsKLSAgICAgICAgICAgICAgICBiaW5kZXIuc3Vic2NyaWJlKGdldENvbnRyb2xsZXJTdHViKCksIHBhcmVudElkLCBleHRyYXMpOwotICAgICAgICAgICAgfSBjYXRjaCAoUmVtb3RlRXhjZXB0aW9uIGUpIHsKLSAgICAgICAgICAgICAgICAvLyBUT0RPKGphZXdhbik6IEhhbmRsZSBkaXNjb25uZWN0LgotICAgICAgICAgICAgICAgIGlmIChERUJVRykgewotICAgICAgICAgICAgICAgICAgICBMb2cudyhUQUcsICJDYW5ub3QgY29ubmVjdCB0byB0aGUgc2VydmljZSBvciB0aGUgc2Vzc2lvbiBpcyBnb25lIiwgZSk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgTG9nLncoVEFHLCAiU2Vzc2lvbiBpc24ndCBhY3RpdmUiLCBuZXcgSWxsZWdhbFN0YXRlRXhjZXB0aW9uKCkpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIHZvaWQgdW5zdWJzY3JpYmVfaW1wbChTdHJpbmcgcGFyZW50SWQpIHsKLSAgICAgICAgaWYgKHBhcmVudElkID09IG51bGwpIHsKLSAgICAgICAgICAgIHRocm93IG5ldyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oInBhcmVudElkIHNob3VsZG4ndCBiZSBudWxsIik7Ci0gICAgICAgIH0KLQotICAgICAgICBmaW5hbCBJTWVkaWFTZXNzaW9uMiBiaW5kZXIgPSBnZXRTZXNzaW9uQmluZGVyKCk7Ci0gICAgICAgIGlmIChiaW5kZXIgIT0gbnVsbCkgewotICAgICAgICAgICAgdHJ5IHsKLSAgICAgICAgICAgICAgICBiaW5kZXIudW5zdWJzY3JpYmUoZ2V0Q29udHJvbGxlclN0dWIoKSwgcGFyZW50SWQpOwotICAgICAgICAgICAgfSBjYXRjaCAoUmVtb3RlRXhjZXB0aW9uIGUpIHsKLSAgICAgICAgICAgICAgICAvLyBUT0RPKGphZXdhbik6IEhhbmRsZSBkaXNjb25uZWN0LgotICAgICAgICAgICAgICAgIGlmIChERUJVRykgewotICAgICAgICAgICAgICAgICAgICBMb2cudyhUQUcsICJDYW5ub3QgY29ubmVjdCB0byB0aGUgc2VydmljZSBvciB0aGUgc2Vzc2lvbiBpcyBnb25lIiwgZSk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgTG9nLncoVEFHLCAiU2Vzc2lvbiBpc24ndCBhY3RpdmUiLCBuZXcgSWxsZWdhbFN0YXRlRXhjZXB0aW9uKCkpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIHZvaWQgZ2V0SXRlbV9pbXBsKFN0cmluZyBtZWRpYUlkKSB7Ci0gICAgICAgIGlmIChtZWRpYUlkID09IG51bGwpIHsKLSAgICAgICAgICAgIHRocm93IG5ldyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oIm1lZGlhSWQgc2hvdWxkbid0IGJlIG51bGwiKTsKLSAgICAgICAgfQotCi0gICAgICAgIGZpbmFsIElNZWRpYVNlc3Npb24yIGJpbmRlciA9IGdldFNlc3Npb25CaW5kZXIoKTsKLSAgICAgICAgaWYgKGJpbmRlciAhPSBudWxsKSB7Ci0gICAgICAgICAgICB0cnkgewotICAgICAgICAgICAgICAgIGJpbmRlci5nZXRJdGVtKGdldENvbnRyb2xsZXJTdHViKCksIG1lZGlhSWQpOwotICAgICAgICAgICAgfSBjYXRjaCAoUmVtb3RlRXhjZXB0aW9uIGUpIHsKLSAgICAgICAgICAgICAgICAvLyBUT0RPKGphZXdhbik6IEhhbmRsZSBkaXNjb25uZWN0LgotICAgICAgICAgICAgICAgIGlmIChERUJVRykgewotICAgICAgICAgICAgICAgICAgICBMb2cudyhUQUcsICJDYW5ub3QgY29ubmVjdCB0byB0aGUgc2VydmljZSBvciB0aGUgc2Vzc2lvbiBpcyBnb25lIiwgZSk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgTG9nLncoVEFHLCAiU2Vzc2lvbiBpc24ndCBhY3RpdmUiLCBuZXcgSWxsZWdhbFN0YXRlRXhjZXB0aW9uKCkpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIHZvaWQgZ2V0Q2hpbGRyZW5faW1wbChTdHJpbmcgcGFyZW50SWQsIGludCBwYWdlLCBpbnQgcGFnZVNpemUsIEJ1bmRsZSBleHRyYXMpIHsKLSAgICAgICAgaWYgKHBhcmVudElkID09IG51bGwpIHsKLSAgICAgICAgICAgIHRocm93IG5ldyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oInBhcmVudElkIHNob3VsZG4ndCBiZSBudWxsIik7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKHBhZ2UgPCAxIHx8IHBhZ2VTaXplIDwgMSkgewotICAgICAgICAgICAgdGhyb3cgbmV3IElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbigiTmVpdGhlciBwYWdlIG5vciBwYWdlU2l6ZSBzaG91bGQgYmUgbGVzcyB0aGFuIDEiKTsKLSAgICAgICAgfQotCi0gICAgICAgIGZpbmFsIElNZWRpYVNlc3Npb24yIGJpbmRlciA9IGdldFNlc3Npb25CaW5kZXIoKTsKLSAgICAgICAgaWYgKGJpbmRlciAhPSBudWxsKSB7Ci0gICAgICAgICAgICB0cnkgewotICAgICAgICAgICAgICAgIGJpbmRlci5nZXRDaGlsZHJlbihnZXRDb250cm9sbGVyU3R1YigpLCBwYXJlbnRJZCwgcGFnZSwgcGFnZVNpemUsIGV4dHJhcyk7Ci0gICAgICAgICAgICB9IGNhdGNoIChSZW1vdGVFeGNlcHRpb24gZSkgewotICAgICAgICAgICAgICAgIC8vIFRPRE8oamFld2FuKTogSGFuZGxlIGRpc2Nvbm5lY3QuCi0gICAgICAgICAgICAgICAgaWYgKERFQlVHKSB7Ci0gICAgICAgICAgICAgICAgICAgIExvZy53KFRBRywgIkNhbm5vdCBjb25uZWN0IHRvIHRoZSBzZXJ2aWNlIG9yIHRoZSBzZXNzaW9uIGlzIGdvbmUiLCBlKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBMb2cudyhUQUcsICJTZXNzaW9uIGlzbid0IGFjdGl2ZSIsIG5ldyBJbGxlZ2FsU3RhdGVFeGNlcHRpb24oKSk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgdm9pZCBzZWFyY2hfaW1wbChTdHJpbmcgcXVlcnksIEJ1bmRsZSBleHRyYXMpIHsKLSAgICAgICAgaWYgKFRleHRVdGlscy5pc0VtcHR5KHF1ZXJ5KSkgewotICAgICAgICAgICAgdGhyb3cgbmV3IElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbigicXVlcnkgc2hvdWxkbid0IGJlIGVtcHR5Iik7Ci0gICAgICAgIH0KLSAgICAgICAgZmluYWwgSU1lZGlhU2Vzc2lvbjIgYmluZGVyID0gZ2V0U2Vzc2lvbkJpbmRlcigpOwotICAgICAgICBpZiAoYmluZGVyICE9IG51bGwpIHsKLSAgICAgICAgICAgIHRyeSB7Ci0gICAgICAgICAgICAgICAgYmluZGVyLnNlYXJjaChnZXRDb250cm9sbGVyU3R1YigpLCBxdWVyeSwgZXh0cmFzKTsKLSAgICAgICAgICAgIH0gY2F0Y2ggKFJlbW90ZUV4Y2VwdGlvbiBlKSB7Ci0gICAgICAgICAgICAgICAgLy8gVE9ETyhqYWV3YW4pOiBIYW5kbGUgZGlzY29ubmVjdC4KLSAgICAgICAgICAgICAgICBpZiAoREVCVUcpIHsKLSAgICAgICAgICAgICAgICAgICAgTG9nLncoVEFHLCAiQ2Fubm90IGNvbm5lY3QgdG8gdGhlIHNlcnZpY2Ugb3IgdGhlIHNlc3Npb24gaXMgZ29uZSIsIGUpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIExvZy53KFRBRywgIlNlc3Npb24gaXNuJ3QgYWN0aXZlIiwgbmV3IElsbGVnYWxTdGF0ZUV4Y2VwdGlvbigpKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyB2b2lkIGdldFNlYXJjaFJlc3VsdF9pbXBsKFN0cmluZyBxdWVyeSwgaW50IHBhZ2UsIGludCBwYWdlU2l6ZSwgQnVuZGxlIGV4dHJhcykgewotICAgICAgICBpZiAoVGV4dFV0aWxzLmlzRW1wdHkocXVlcnkpKSB7Ci0gICAgICAgICAgICB0aHJvdyBuZXcgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKCJxdWVyeSBzaG91bGRuJ3QgYmUgZW1wdHkiKTsKLSAgICAgICAgfQotICAgICAgICBpZiAocGFnZSA8IDEgfHwgcGFnZVNpemUgPCAxKSB7Ci0gICAgICAgICAgICB0aHJvdyBuZXcgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKCJOZWl0aGVyIHBhZ2Ugbm9yIHBhZ2VTaXplIHNob3VsZCBiZSBsZXNzIHRoYW4gMSIpOwotICAgICAgICB9Ci0gICAgICAgIGZpbmFsIElNZWRpYVNlc3Npb24yIGJpbmRlciA9IGdldFNlc3Npb25CaW5kZXIoKTsKLSAgICAgICAgaWYgKGJpbmRlciAhPSBudWxsKSB7Ci0gICAgICAgICAgICB0cnkgewotICAgICAgICAgICAgICAgIGJpbmRlci5nZXRTZWFyY2hSZXN1bHQoZ2V0Q29udHJvbGxlclN0dWIoKSwgcXVlcnksIHBhZ2UsIHBhZ2VTaXplLCBleHRyYXMpOwotICAgICAgICAgICAgfSBjYXRjaCAoUmVtb3RlRXhjZXB0aW9uIGUpIHsKLSAgICAgICAgICAgICAgICAvLyBUT0RPKGphZXdhbik6IEhhbmRsZSBkaXNjb25uZWN0LgotICAgICAgICAgICAgICAgIGlmIChERUJVRykgewotICAgICAgICAgICAgICAgICAgICBMb2cudyhUQUcsICJDYW5ub3QgY29ubmVjdCB0byB0aGUgc2VydmljZSBvciB0aGUgc2Vzc2lvbiBpcyBnb25lIiwgZSk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgTG9nLncoVEFHLCAiU2Vzc2lvbiBpc24ndCBhY3RpdmUiLCBuZXcgSWxsZWdhbFN0YXRlRXhjZXB0aW9uKCkpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgcHVibGljIHZvaWQgb25HZXRMaWJyYXJ5Um9vdERvbmUoCi0gICAgICAgICAgICBmaW5hbCBCdW5kbGUgcm9vdEhpbnRzLCBmaW5hbCBTdHJpbmcgcm9vdE1lZGlhSWQsIGZpbmFsIEJ1bmRsZSByb290RXh0cmEpIHsKLSAgICAgICAgZ2V0Q2FsbGJhY2tFeGVjdXRvcigpLmV4ZWN1dGUoKCkgLT4gewotICAgICAgICAgICAgbUNhbGxiYWNrLm9uR2V0TGlicmFyeVJvb3REb25lKGdldEluc3RhbmNlKCksIHJvb3RIaW50cywgcm9vdE1lZGlhSWQsIHJvb3RFeHRyYSk7Ci0gICAgICAgIH0pOwotICAgIH0KLQotICAgIHB1YmxpYyB2b2lkIG9uR2V0SXRlbURvbmUoU3RyaW5nIG1lZGlhSWQsIE1lZGlhSXRlbTIgaXRlbSkgewotICAgICAgICBnZXRDYWxsYmFja0V4ZWN1dG9yKCkuZXhlY3V0ZSgoKSAtPiB7Ci0gICAgICAgICAgICBtQ2FsbGJhY2sub25HZXRJdGVtRG9uZShnZXRJbnN0YW5jZSgpLCBtZWRpYUlkLCBpdGVtKTsKLSAgICAgICAgfSk7Ci0gICAgfQotCi0gICAgcHVibGljIHZvaWQgb25HZXRDaGlsZHJlbkRvbmUoU3RyaW5nIHBhcmVudElkLCBpbnQgcGFnZSwgaW50IHBhZ2VTaXplLCBMaXN0PE1lZGlhSXRlbTI+IHJlc3VsdCwKLSAgICAgICAgICAgIEJ1bmRsZSBleHRyYXMpIHsKLSAgICAgICAgZ2V0Q2FsbGJhY2tFeGVjdXRvcigpLmV4ZWN1dGUoKCkgLT4gewotICAgICAgICAgICAgbUNhbGxiYWNrLm9uR2V0Q2hpbGRyZW5Eb25lKGdldEluc3RhbmNlKCksIHBhcmVudElkLCBwYWdlLCBwYWdlU2l6ZSwgcmVzdWx0LCBleHRyYXMpOwotICAgICAgICB9KTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgdm9pZCBvblNlYXJjaFJlc3VsdENoYW5nZWQoU3RyaW5nIHF1ZXJ5LCBpbnQgaXRlbUNvdW50LCBCdW5kbGUgZXh0cmFzKSB7Ci0gICAgICAgIGdldENhbGxiYWNrRXhlY3V0b3IoKS5leGVjdXRlKCgpIC0+IHsKLSAgICAgICAgICAgIG1DYWxsYmFjay5vblNlYXJjaFJlc3VsdENoYW5nZWQoZ2V0SW5zdGFuY2UoKSwgcXVlcnksIGl0ZW1Db3VudCwgZXh0cmFzKTsKLSAgICAgICAgfSk7Ci0gICAgfQotCi0gICAgcHVibGljIHZvaWQgb25HZXRTZWFyY2hSZXN1bHREb25lKFN0cmluZyBxdWVyeSwgaW50IHBhZ2UsIGludCBwYWdlU2l6ZSwgTGlzdDxNZWRpYUl0ZW0yPiByZXN1bHQsCi0gICAgICAgICAgICBCdW5kbGUgZXh0cmFzKSB7Ci0gICAgICAgIGdldENhbGxiYWNrRXhlY3V0b3IoKS5leGVjdXRlKCgpIC0+IHsKLSAgICAgICAgICAgIG1DYWxsYmFjay5vbkdldFNlYXJjaFJlc3VsdERvbmUoZ2V0SW5zdGFuY2UoKSwgcXVlcnksIHBhZ2UsIHBhZ2VTaXplLCByZXN1bHQsIGV4dHJhcyk7Ci0gICAgICAgIH0pOwotICAgIH0KLQotICAgIHB1YmxpYyB2b2lkIG9uQ2hpbGRyZW5DaGFuZ2VkKGZpbmFsIFN0cmluZyBwYXJlbnRJZCwgaW50IGl0ZW1Db3VudCwgZmluYWwgQnVuZGxlIGV4dHJhcykgewotICAgICAgICBnZXRDYWxsYmFja0V4ZWN1dG9yKCkuZXhlY3V0ZSgoKSAtPiB7Ci0gICAgICAgICAgICBtQ2FsbGJhY2sub25DaGlsZHJlbkNoYW5nZWQoZ2V0SW5zdGFuY2UoKSwgcGFyZW50SWQsIGl0ZW1Db3VudCwgZXh0cmFzKTsKLSAgICAgICAgfSk7Ci0gICAgfQotfQpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvTWVkaWFDb21wb25lbnRzL3NyYy9jb20vYW5kcm9pZC9tZWRpYS9NZWRpYUNvbnRyb2xsZXIySW1wbC5qYXZhIGIvcGFja2FnZXMvTWVkaWFDb21wb25lbnRzL3NyYy9jb20vYW5kcm9pZC9tZWRpYS9NZWRpYUNvbnRyb2xsZXIySW1wbC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyNDkzNjVhLi4wMDAwMDAwCi0tLSBhL3BhY2thZ2VzL01lZGlhQ29tcG9uZW50cy9zcmMvY29tL2FuZHJvaWQvbWVkaWEvTWVkaWFDb250cm9sbGVyMkltcGwuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDExNDMgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAyMDE4IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKLSAqCi0gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKLSAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KLSAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotICoKLSAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0gKgotICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQotICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKLSAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgotICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAotICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCi0gKi8KLQotcGFja2FnZSBjb20uYW5kcm9pZC5tZWRpYTsKLQotaW1wb3J0IHN0YXRpYyBhbmRyb2lkLm1lZGlhLlNlc3Npb25Db21tYW5kMi5DT01NQU5EX0NPREVfU0VUX1ZPTFVNRTsKLWltcG9ydCBzdGF0aWMgYW5kcm9pZC5tZWRpYS5TZXNzaW9uQ29tbWFuZDIuQ09NTUFORF9DT0RFX1BMQVlMSVNUX0FERF9JVEVNOwotaW1wb3J0IHN0YXRpYyBhbmRyb2lkLm1lZGlhLlNlc3Npb25Db21tYW5kMi5DT01NQU5EX0NPREVfUExBWUxJU1RfUkVNT1ZFX0lURU07Ci1pbXBvcnQgc3RhdGljIGFuZHJvaWQubWVkaWEuU2Vzc2lvbkNvbW1hbmQyLkNPTU1BTkRfQ09ERV9QTEFZTElTVF9SRVBMQUNFX0lURU07Ci1pbXBvcnQgc3RhdGljIGFuZHJvaWQubWVkaWEuU2Vzc2lvbkNvbW1hbmQyLkNPTU1BTkRfQ09ERV9QTEFZTElTVF9TRVRfTElTVDsKLWltcG9ydCBzdGF0aWMgYW5kcm9pZC5tZWRpYS5TZXNzaW9uQ29tbWFuZDIuQ09NTUFORF9DT0RFX1BMQVlMSVNUX1NFVF9MSVNUX01FVEFEQVRBOwotaW1wb3J0IHN0YXRpYyBhbmRyb2lkLm1lZGlhLlNlc3Npb25Db21tYW5kMi5DT01NQU5EX0NPREVfUExBWUxJU1RfU0VUX1JFUEVBVF9NT0RFOwotaW1wb3J0IHN0YXRpYyBhbmRyb2lkLm1lZGlhLlNlc3Npb25Db21tYW5kMi5DT01NQU5EX0NPREVfUExBWUxJU1RfU0VUX1NIVUZGTEVfTU9ERTsKLWltcG9ydCBzdGF0aWMgYW5kcm9pZC5tZWRpYS5TZXNzaW9uQ29tbWFuZDIuQ09NTUFORF9DT0RFX1NFU1NJT05fUExBWV9GUk9NX01FRElBX0lEOwotaW1wb3J0IHN0YXRpYyBhbmRyb2lkLm1lZGlhLlNlc3Npb25Db21tYW5kMi5DT01NQU5EX0NPREVfU0VTU0lPTl9QTEFZX0ZST01fU0VBUkNIOwotaW1wb3J0IHN0YXRpYyBhbmRyb2lkLm1lZGlhLlNlc3Npb25Db21tYW5kMi5DT01NQU5EX0NPREVfU0VTU0lPTl9QTEFZX0ZST01fVVJJOwotaW1wb3J0IHN0YXRpYyBhbmRyb2lkLm1lZGlhLlNlc3Npb25Db21tYW5kMi5DT01NQU5EX0NPREVfU0VTU0lPTl9QUkVQQVJFX0ZST01fTUVESUFfSUQ7Ci1pbXBvcnQgc3RhdGljIGFuZHJvaWQubWVkaWEuU2Vzc2lvbkNvbW1hbmQyLkNPTU1BTkRfQ09ERV9TRVNTSU9OX1BSRVBBUkVfRlJPTV9TRUFSQ0g7Ci1pbXBvcnQgc3RhdGljIGFuZHJvaWQubWVkaWEuU2Vzc2lvbkNvbW1hbmQyLkNPTU1BTkRfQ09ERV9TRVNTSU9OX1BSRVBBUkVfRlJPTV9VUkk7Ci0KLWltcG9ydCBhbmRyb2lkLmFwcC5QZW5kaW5nSW50ZW50OwotaW1wb3J0IGFuZHJvaWQuY29udGVudC5Db21wb25lbnROYW1lOwotaW1wb3J0IGFuZHJvaWQuY29udGVudC5Db250ZXh0OwotaW1wb3J0IGFuZHJvaWQuY29udGVudC5JbnRlbnQ7Ci1pbXBvcnQgYW5kcm9pZC5jb250ZW50LlNlcnZpY2VDb25uZWN0aW9uOwotaW1wb3J0IGFuZHJvaWQubWVkaWEuQXVkaW9BdHRyaWJ1dGVzOwotaW1wb3J0IGFuZHJvaWQubWVkaWEuTWVkaWFDb250cm9sbGVyMjsKLWltcG9ydCBhbmRyb2lkLm1lZGlhLk1lZGlhQ29udHJvbGxlcjIuQ29udHJvbGxlckNhbGxiYWNrOwotaW1wb3J0IGFuZHJvaWQubWVkaWEuTWVkaWFDb250cm9sbGVyMi5QbGF5YmFja0luZm87Ci1pbXBvcnQgYW5kcm9pZC5tZWRpYS5NZWRpYUl0ZW0yOwotaW1wb3J0IGFuZHJvaWQubWVkaWEuTWVkaWFNZXRhZGF0YTI7Ci1pbXBvcnQgYW5kcm9pZC5tZWRpYS5NZWRpYVBsYXlsaXN0QWdlbnQuUmVwZWF0TW9kZTsKLWltcG9ydCBhbmRyb2lkLm1lZGlhLk1lZGlhUGxheWxpc3RBZ2VudC5TaHVmZmxlTW9kZTsKLWltcG9ydCBhbmRyb2lkLm1lZGlhLlNlc3Npb25Db21tYW5kMjsKLWltcG9ydCBhbmRyb2lkLm1lZGlhLk1lZGlhU2Vzc2lvbjIuQ29tbWFuZEJ1dHRvbjsKLWltcG9ydCBhbmRyb2lkLm1lZGlhLlNlc3Npb25Db21tYW5kR3JvdXAyOwotaW1wb3J0IGFuZHJvaWQubWVkaWEuTWVkaWFTZXNzaW9uU2VydmljZTI7Ci1pbXBvcnQgYW5kcm9pZC5tZWRpYS5SYXRpbmcyOwotaW1wb3J0IGFuZHJvaWQubWVkaWEuU2Vzc2lvblRva2VuMjsKLWltcG9ydCBhbmRyb2lkLm1lZGlhLnVwZGF0ZS5NZWRpYUNvbnRyb2xsZXIyUHJvdmlkZXI7Ci1pbXBvcnQgYW5kcm9pZC5uZXQuVXJpOwotaW1wb3J0IGFuZHJvaWQub3MuQnVuZGxlOwotaW1wb3J0IGFuZHJvaWQub3MuSUJpbmRlcjsKLWltcG9ydCBhbmRyb2lkLm9zLlByb2Nlc3M7Ci1pbXBvcnQgYW5kcm9pZC5vcy5SZW1vdGVFeGNlcHRpb247Ci1pbXBvcnQgYW5kcm9pZC5vcy5SZXN1bHRSZWNlaXZlcjsKLWltcG9ydCBhbmRyb2lkLm9zLlVzZXJIYW5kbGU7Ci1pbXBvcnQgYW5kcm9pZC5zdXBwb3J0LmFubm90YXRpb24uR3VhcmRlZEJ5OwotaW1wb3J0IGFuZHJvaWQudGV4dC5UZXh0VXRpbHM7Ci1pbXBvcnQgYW5kcm9pZC51dGlsLkxvZzsKLQotaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLmNvbmN1cnJlbnQuRXhlY3V0b3I7Ci0KLXB1YmxpYyBjbGFzcyBNZWRpYUNvbnRyb2xsZXIySW1wbCBpbXBsZW1lbnRzIE1lZGlhQ29udHJvbGxlcjJQcm92aWRlciB7Ci0gICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFRBRyA9ICJNZWRpYUNvbnRyb2xsZXIyIjsKLSAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBib29sZWFuIERFQlVHID0gdHJ1ZTsgLy8gVE9ETyhqYWV3YW4pOiBDaGFuZ2UKLQotICAgIHByaXZhdGUgZmluYWwgTWVkaWFDb250cm9sbGVyMiBtSW5zdGFuY2U7Ci0gICAgcHJpdmF0ZSBmaW5hbCBDb250ZXh0IG1Db250ZXh0OwotICAgIHByaXZhdGUgZmluYWwgT2JqZWN0IG1Mb2NrID0gbmV3IE9iamVjdCgpOwotCi0gICAgcHJpdmF0ZSBmaW5hbCBNZWRpYUNvbnRyb2xsZXIyU3R1YiBtQ29udHJvbGxlclN0dWI7Ci0gICAgcHJpdmF0ZSBmaW5hbCBTZXNzaW9uVG9rZW4yIG1Ub2tlbjsKLSAgICBwcml2YXRlIGZpbmFsIENvbnRyb2xsZXJDYWxsYmFjayBtQ2FsbGJhY2s7Ci0gICAgcHJpdmF0ZSBmaW5hbCBFeGVjdXRvciBtQ2FsbGJhY2tFeGVjdXRvcjsKLSAgICBwcml2YXRlIGZpbmFsIElCaW5kZXIuRGVhdGhSZWNpcGllbnQgbURlYXRoUmVjaXBpZW50OwotCi0gICAgQEd1YXJkZWRCeSgibUxvY2siKQotICAgIHByaXZhdGUgU2Vzc2lvblNlcnZpY2VDb25uZWN0aW9uIG1TZXJ2aWNlQ29ubmVjdGlvbjsKLSAgICBAR3VhcmRlZEJ5KCJtTG9jayIpCi0gICAgcHJpdmF0ZSBib29sZWFuIG1Jc1JlbGVhc2VkOwotICAgIEBHdWFyZGVkQnkoIm1Mb2NrIikKLSAgICBwcml2YXRlIExpc3Q8TWVkaWFJdGVtMj4gbVBsYXlsaXN0OwotICAgIEBHdWFyZGVkQnkoIm1Mb2NrIikKLSAgICBwcml2YXRlIE1lZGlhTWV0YWRhdGEyIG1QbGF5bGlzdE1ldGFkYXRhOwotICAgIEBHdWFyZGVkQnkoIm1Mb2NrIikKLSAgICBwcml2YXRlIEBSZXBlYXRNb2RlIGludCBtUmVwZWF0TW9kZTsKLSAgICBAR3VhcmRlZEJ5KCJtTG9jayIpCi0gICAgcHJpdmF0ZSBAU2h1ZmZsZU1vZGUgaW50IG1TaHVmZmxlTW9kZTsKLSAgICBAR3VhcmRlZEJ5KCJtTG9jayIpCi0gICAgcHJpdmF0ZSBpbnQgbVBsYXllclN0YXRlOwotICAgIEBHdWFyZGVkQnkoIm1Mb2NrIikKLSAgICBwcml2YXRlIGxvbmcgbVBvc2l0aW9uRXZlbnRUaW1lTXM7Ci0gICAgQEd1YXJkZWRCeSgibUxvY2siKQotICAgIHByaXZhdGUgbG9uZyBtUG9zaXRpb25NczsKLSAgICBAR3VhcmRlZEJ5KCJtTG9jayIpCi0gICAgcHJpdmF0ZSBmbG9hdCBtUGxheWJhY2tTcGVlZDsKLSAgICBAR3VhcmRlZEJ5KCJtTG9jayIpCi0gICAgcHJpdmF0ZSBsb25nIG1CdWZmZXJlZFBvc2l0aW9uTXM7Ci0gICAgQEd1YXJkZWRCeSgibUxvY2siKQotICAgIHByaXZhdGUgUGxheWJhY2tJbmZvIG1QbGF5YmFja0luZm87Ci0gICAgQEd1YXJkZWRCeSgibUxvY2siKQotICAgIHByaXZhdGUgUGVuZGluZ0ludGVudCBtU2Vzc2lvbkFjdGl2aXR5OwotICAgIEBHdWFyZGVkQnkoIm1Mb2NrIikKLSAgICBwcml2YXRlIFNlc3Npb25Db21tYW5kR3JvdXAyIG1BbGxvd2VkQ29tbWFuZHM7Ci0KLSAgICAvLyBBc3NpZ25tZW50IHNob3VsZCBiZSB1c2VkIHdpdGggdGhlIGxvY2sgaG9sZCwgYnV0IHNob3VsZCBiZSB1c2VkIHdpdGhvdXQgYSBsb2NrIHRvIHByZXZlbnQKLSAgICAvLyBwb3RlbnRpYWwgZGVhZGxvY2suCi0gICAgLy8gUG9zdGZpeCAtQmluZGVyIGlzIGFkZGVkIHRvIGV4cGxpY2l0bHkgc2hvdyB0aGF0IGl0J3MgcG90ZW50aWFsbHkgcmVtb3RlIHByb2Nlc3MgY2FsbC4KLSAgICAvLyBUZWNobmljYWxseSAtSW50ZXJmYWNlIGlzIG1vcmUgY29ycmVjdCwgYnV0IGl0IG1heSBtaXNyZWFkIHRoYXQgaXQncyBpbnRlcmZhY2UgKHZzIGNsYXNzKQotICAgIC8vIHNvIGxldCdzIGtlZXAgdGhpcyBwb3N0Zml4IHVudGlsIHdlIGZpbmQgYmV0dGVyIHBvc3RmaXguCi0gICAgQEd1YXJkZWRCeSgibUxvY2siKQotICAgIHByaXZhdGUgdm9sYXRpbGUgSU1lZGlhU2Vzc2lvbjIgbVNlc3Npb25CaW5kZXI7Ci0KLSAgICAvLyBUT0RPKGphZXdhbik6IFJlcXVpcmUgc2Vzc2lvbiBhY3RpdmVuZXNzIGNoYW5nZWQgbGlzdGVuZXIsIGJlY2F1c2UgY29udHJvbGxlciBjYW4gYmUKLSAgICAvLyAgICAgICAgICAgICAgIGF2YWlsYWJsZSB3aGVuIHRoZSBzZXNzaW9uJ3MgcGxheWVyIGlzIG51bGwuCi0gICAgcHVibGljIE1lZGlhQ29udHJvbGxlcjJJbXBsKENvbnRleHQgY29udGV4dCwgTWVkaWFDb250cm9sbGVyMiBpbnN0YW5jZSwgU2Vzc2lvblRva2VuMiB0b2tlbiwKLSAgICAgICAgICAgIEV4ZWN1dG9yIGV4ZWN1dG9yLCBDb250cm9sbGVyQ2FsbGJhY2sgY2FsbGJhY2spIHsKLSAgICAgICAgbUluc3RhbmNlID0gaW5zdGFuY2U7Ci0gICAgICAgIGlmIChjb250ZXh0ID09IG51bGwpIHsKLSAgICAgICAgICAgIHRocm93IG5ldyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oImNvbnRleHQgc2hvdWxkbid0IGJlIG51bGwiKTsKLSAgICAgICAgfQotICAgICAgICBpZiAodG9rZW4gPT0gbnVsbCkgewotICAgICAgICAgICAgdGhyb3cgbmV3IElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbigidG9rZW4gc2hvdWxkbid0IGJlIG51bGwiKTsKLSAgICAgICAgfQotICAgICAgICBpZiAoY2FsbGJhY2sgPT0gbnVsbCkgewotICAgICAgICAgICAgdGhyb3cgbmV3IElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbigiY2FsbGJhY2sgc2hvdWxkbid0IGJlIG51bGwiKTsKLSAgICAgICAgfQotICAgICAgICBpZiAoZXhlY3V0b3IgPT0gbnVsbCkgewotICAgICAgICAgICAgdGhyb3cgbmV3IElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbigiZXhlY3V0b3Igc2hvdWxkbid0IGJlIG51bGwiKTsKLSAgICAgICAgfQotICAgICAgICBtQ29udGV4dCA9IGNvbnRleHQ7Ci0gICAgICAgIG1Db250cm9sbGVyU3R1YiA9IG5ldyBNZWRpYUNvbnRyb2xsZXIyU3R1Yih0aGlzKTsKLSAgICAgICAgbVRva2VuID0gdG9rZW47Ci0gICAgICAgIG1DYWxsYmFjayA9IGNhbGxiYWNrOwotICAgICAgICBtQ2FsbGJhY2tFeGVjdXRvciA9IGV4ZWN1dG9yOwotICAgICAgICBtRGVhdGhSZWNpcGllbnQgPSAoKSAtPiB7Ci0gICAgICAgICAgICBtSW5zdGFuY2UuY2xvc2UoKTsKLSAgICAgICAgfTsKLQotICAgICAgICBtU2Vzc2lvbkJpbmRlciA9IG51bGw7Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIHZvaWQgaW5pdGlhbGl6ZSgpIHsKLSAgICAgICAgLy8gVE9ETyhqYWV3YW4pOiBNb3JlIHNhbml0eSBjaGVja3MuCi0gICAgICAgIGlmIChtVG9rZW4uZ2V0VHlwZSgpID09IFNlc3Npb25Ub2tlbjIuVFlQRV9TRVNTSU9OKSB7Ci0gICAgICAgICAgICAvLyBTZXNzaW9uCi0gICAgICAgICAgICBtU2VydmljZUNvbm5lY3Rpb24gPSBudWxsOwotICAgICAgICAgICAgY29ubmVjdFRvU2Vzc2lvbihTZXNzaW9uVG9rZW4ySW1wbC5mcm9tKG1Ub2tlbikuZ2V0U2Vzc2lvbkJpbmRlcigpKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIC8vIFNlc3Npb24gc2VydmljZQotICAgICAgICAgICAgaWYgKFByb2Nlc3MubXlVaWQoKSA9PSBQcm9jZXNzLlNZU1RFTV9VSUQpIHsKLSAgICAgICAgICAgICAgICAvLyBJdCdzIHN5c3RlbSBzZXJ2ZXIgKE1lZGlhU2Vzc2lvblNlcnZpY2UpIHRoYXQgd2FudHMgdG8gbW9uaXRvciBzZXNzaW9uLgotICAgICAgICAgICAgICAgIC8vIERvbid0IGJpbmQgaWYgYWJsZS4uCi0gICAgICAgICAgICAgICAgSU1lZGlhU2Vzc2lvbjIgYmluZGVyID0gU2Vzc2lvblRva2VuMkltcGwuZnJvbShtVG9rZW4pLmdldFNlc3Npb25CaW5kZXIoKTsKLSAgICAgICAgICAgICAgICBpZiAoYmluZGVyICE9IG51bGwpIHsKLSAgICAgICAgICAgICAgICAgICAgLy8gVXNlIGJpbmRlciBpbiB0aGUgc2Vzc2lvbiB0b2tlbiBpbnN0ZWFkIG9mIGJpbmQgYnkgaXRzIG93bi4KLSAgICAgICAgICAgICAgICAgICAgLy8gT3RoZXJ3aXNlIHNlcnZlciB3aWxsIGhvbGRzIHRoZSBiaW5kaW5nIHRvIHRoZSBzZXJ2aWNlICpmb3JldmVyKiBhbmQgc2VydmljZQotICAgICAgICAgICAgICAgICAgICAvLyB3aWxsIG5ldmVyIHN0b3AuCi0gICAgICAgICAgICAgICAgICAgIG1TZXJ2aWNlQ29ubmVjdGlvbiA9IG51bGw7Ci0gICAgICAgICAgICAgICAgICAgIGNvbm5lY3RUb1Nlc3Npb24oU2Vzc2lvblRva2VuMkltcGwuZnJvbShtVG9rZW4pLmdldFNlc3Npb25CaW5kZXIoKSk7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKERFQlVHKSB7Ci0gICAgICAgICAgICAgICAgICAgIC8vIFNob3VsZCBoYXBwZW4gb25seSB3aGVuIHN5c3RlbSBzZXJ2ZXIgd2FudHMgdG8gZGlzcGF0Y2ggbWVkaWEga2V5IGV2ZW50cyB0bwotICAgICAgICAgICAgICAgICAgICAvLyBhIGRlYWQgc2VydmljZS4KLSAgICAgICAgICAgICAgICAgICAgTG9nLmQoVEFHLCAiU3lzdGVtIHNlcnZlciBiaW5kcyB0byBhIHNlc3Npb24gc2VydmljZS4gU2hvdWxkIHVuYmluZCIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICArICIgaW1tZWRpYXRlbHkgYWZ0ZXIgdGhlIHVzZS4iKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBtU2VydmljZUNvbm5lY3Rpb24gPSBuZXcgU2Vzc2lvblNlcnZpY2VDb25uZWN0aW9uKCk7Ci0gICAgICAgICAgICBjb25uZWN0VG9TZXJ2aWNlKCk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBwcml2YXRlIHZvaWQgY29ubmVjdFRvU2VydmljZSgpIHsKLSAgICAgICAgLy8gU2VydmljZS4gTmVlZHMgdG8gZ2V0IGZyZXNoIGJpbmRlciB3aGVuZXZlciBjb25uZWN0aW9uIGlzIG5lZWRlZC4KLSAgICAgICAgU2Vzc2lvblRva2VuMkltcGwgaW1wbCA9IFNlc3Npb25Ub2tlbjJJbXBsLmZyb20obVRva2VuKTsKLSAgICAgICAgZmluYWwgSW50ZW50IGludGVudCA9IG5ldyBJbnRlbnQoTWVkaWFTZXNzaW9uU2VydmljZTIuU0VSVklDRV9JTlRFUkZBQ0UpOwotICAgICAgICBpbnRlbnQuc2V0Q2xhc3NOYW1lKG1Ub2tlbi5nZXRQYWNrYWdlTmFtZSgpLCBpbXBsLmdldFNlcnZpY2VOYW1lKCkpOwotCi0gICAgICAgIC8vIFVzZSBiaW5kU2VydmljZSgpIGluc3RlYWQgb2Ygc3RhcnRGb3JlZ3JvdW5kU2VydmljZSgpIHRvIHN0YXJ0IHNlc3Npb24gc2VydmljZSBmb3IgdGhyZWUKLSAgICAgICAgLy8gcmVhc29ucy4KLSAgICAgICAgLy8gMS4gUHJldmVudCBzZXNzaW9uIHNlcnZpY2Ugb3duZXIncyBzdG9wU2VsZigpIGZyb20gZGVzdHJveWluZyBzZXJ2aWNlLgotICAgICAgICAvLyAgICBXaXRoIHRoZSBzdGFydEZvcmVncm91bmRTZXJ2aWNlKCksIHNlcnZpY2UncyBjYWxsIG9mIHN0b3BTZWxmKCkgd2lsbCB0cmlnZ2VyIGltbWVkaWF0ZQotICAgICAgICAvLyAgICBvbkRlc3Ryb3koKSBjYWxscyBvbiB0aGUgbWFpbiB0aHJlYWQgZXZlbiB3aGVuIG9uQ29ubmVjdCgpIGlzIHJ1bm5pbmcgaW4gYW5vdGhlcgotICAgICAgICAvLyAgICB0aHJlYWQuCi0gICAgICAgIC8vIDIuIE1pbmltaXplIEFQSXMgZm9yIGRldmVsb3BlcnMgdG8gdGFrZSBjYXJlIGFib3V0LgotICAgICAgICAvLyAgICBXaXRoIGJpbmRTZXJ2aWNlKCksIGRldmVsb3BlcnMgb25seSBuZWVkIHRvIHRha2UgY2FyZSBhYm91dCBTZXJ2aWNlLm9uQmluZCgpCi0gICAgICAgIC8vICAgIGJ1dCBTZXJ2aWNlLm9uU3RhcnRDb21tYW5kKCkgc2hvdWxkIGJlIGFsc28gdGFrZW4gY2FyZSBhYm91dCB3aXRoIHRoZQotICAgICAgICAvLyAgICBzdGFydEZvcmVncm91bmRTZXJ2aWNlKCkuCi0gICAgICAgIC8vIDMuIEZ1dHVyZSBzdXBwb3J0IGZvciBVSS1sZXNzIHBsYXliYWNrCi0gICAgICAgIC8vICAgIElmIGEgc2VydmljZSB3YW50cyB0byBrZWVwIHJ1bm5pbmcsIGl0IHNob3VsZCBiZSBlaXRoZXIgZm9yZWdyb3VuZCBzZXJ2aWNlIG9yCi0gICAgICAgIC8vICAgIGJvdW5kZWQgc2VydmljZS4gQnV0IHRoZXJlIGhhZCBiZWVuIHJlcXVlc3QgZm9yIHRoZSBmZWF0dXJlIGZvciBzeXN0ZW0gYXBwcwotICAgICAgICAvLyAgICBhbmQgdXNpbmcgYmluZFNlcnZpY2UoKSB3aWxsIGJlIGJldHRlciBmaXQgd2l0aCBpdC4KLSAgICAgICAgYm9vbGVhbiByZXN1bHQ7Ci0gICAgICAgIGlmIChQcm9jZXNzLm15VWlkKCkgPT0gUHJvY2Vzcy5TWVNURU1fVUlEKSB7Ci0gICAgICAgICAgICAvLyBVc2UgYmluZFNlcnZpY2VBc1VzZXIoKSBmb3IgYmluZGluZyBmcm9tIHN5c3RlbSBzZXJ2aWNlIHRvIGF2b2lkIGZvbGxvd2luZyB3YXJuaW5nLgotICAgICAgICAgICAgLy8gQ29udGV4dEltcGw6IENhbGxpbmcgYSBtZXRob2QgaW4gdGhlIHN5c3RlbSBwcm9jZXNzIHdpdGhvdXQgYSBxdWFsaWZpZWQgdXNlcgotICAgICAgICAgICAgcmVzdWx0ID0gbUNvbnRleHQuYmluZFNlcnZpY2VBc1VzZXIoaW50ZW50LCBtU2VydmljZUNvbm5lY3Rpb24sIENvbnRleHQuQklORF9BVVRPX0NSRUFURSwKLSAgICAgICAgICAgICAgICAgICAgVXNlckhhbmRsZS5nZXRVc2VySGFuZGxlRm9yVWlkKG1Ub2tlbi5nZXRVaWQoKSkpOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgcmVzdWx0ID0gbUNvbnRleHQuYmluZFNlcnZpY2UoaW50ZW50LCBtU2VydmljZUNvbm5lY3Rpb24sIENvbnRleHQuQklORF9BVVRPX0NSRUFURSk7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKCFyZXN1bHQpIHsKLSAgICAgICAgICAgIExvZy53KFRBRywgImJpbmQgdG8gIiArIG1Ub2tlbiArICIgZmFpbGVkIik7Ci0gICAgICAgIH0gZWxzZSBpZiAoREVCVUcpIHsKLSAgICAgICAgICAgIExvZy5kKFRBRywgImJpbmQgdG8gIiArIG1Ub2tlbiArICIgc3VjY2VzcyIpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgcHJpdmF0ZSB2b2lkIGNvbm5lY3RUb1Nlc3Npb24oSU1lZGlhU2Vzc2lvbjIgc2Vzc2lvbkJpbmRlcikgewotICAgICAgICB0cnkgewotICAgICAgICAgICAgc2Vzc2lvbkJpbmRlci5jb25uZWN0KG1Db250cm9sbGVyU3R1YiwgbUNvbnRleHQuZ2V0UGFja2FnZU5hbWUoKSk7Ci0gICAgICAgIH0gY2F0Y2ggKFJlbW90ZUV4Y2VwdGlvbiBlKSB7Ci0gICAgICAgICAgICBMb2cudyhUQUcsICJGYWlsZWQgdG8gY2FsbCBjb25uZWN0aW9uIHJlcXVlc3QuIEZyYW1ld29yayB3aWxsIHJldHJ5IgotICAgICAgICAgICAgICAgICAgICArICIgYXV0b21hdGljYWxseSIpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIHZvaWQgY2xvc2VfaW1wbCgpIHsKLSAgICAgICAgaWYgKERFQlVHKSB7Ci0gICAgICAgICAgICBMb2cuZChUQUcsICJyZWxlYXNlIGZyb20gIiArIG1Ub2tlbik7Ci0gICAgICAgIH0KLSAgICAgICAgZmluYWwgSU1lZGlhU2Vzc2lvbjIgYmluZGVyOwotICAgICAgICBzeW5jaHJvbml6ZWQgKG1Mb2NrKSB7Ci0gICAgICAgICAgICBpZiAobUlzUmVsZWFzZWQpIHsKLSAgICAgICAgICAgICAgICAvLyBQcmV2ZW50IHJlLWVudGVyYW5jZSBmcm9tIHRoZSBDb250cm9sbGVyQ2FsbGJhY2sub25EaXNjb25uZWN0ZWQoKQotICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIG1Jc1JlbGVhc2VkID0gdHJ1ZTsKLSAgICAgICAgICAgIGlmIChtU2VydmljZUNvbm5lY3Rpb24gIT0gbnVsbCkgewotICAgICAgICAgICAgICAgIG1Db250ZXh0LnVuYmluZFNlcnZpY2UobVNlcnZpY2VDb25uZWN0aW9uKTsKLSAgICAgICAgICAgICAgICBtU2VydmljZUNvbm5lY3Rpb24gPSBudWxsOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgYmluZGVyID0gbVNlc3Npb25CaW5kZXI7Ci0gICAgICAgICAgICBtU2Vzc2lvbkJpbmRlciA9IG51bGw7Ci0gICAgICAgICAgICBtQ29udHJvbGxlclN0dWIuZGVzdHJveSgpOwotICAgICAgICB9Ci0gICAgICAgIGlmIChiaW5kZXIgIT0gbnVsbCkgewotICAgICAgICAgICAgdHJ5IHsKLSAgICAgICAgICAgICAgICBiaW5kZXIuYXNCaW5kZXIoKS51bmxpbmtUb0RlYXRoKG1EZWF0aFJlY2lwaWVudCwgMCk7Ci0gICAgICAgICAgICAgICAgYmluZGVyLnJlbGVhc2UobUNvbnRyb2xsZXJTdHViKTsKLSAgICAgICAgICAgIH0gY2F0Y2ggKFJlbW90ZUV4Y2VwdGlvbiBlKSB7Ci0gICAgICAgICAgICAgICAgLy8gTm8tb3AuCi0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgbUNhbGxiYWNrRXhlY3V0b3IuZXhlY3V0ZSgoKSAtPiB7Ci0gICAgICAgICAgICBtQ2FsbGJhY2sub25EaXNjb25uZWN0ZWQobUluc3RhbmNlKTsKLSAgICAgICAgfSk7Ci0gICAgfQotCi0gICAgSU1lZGlhU2Vzc2lvbjIgZ2V0U2Vzc2lvbkJpbmRlcigpIHsKLSAgICAgICAgcmV0dXJuIG1TZXNzaW9uQmluZGVyOwotICAgIH0KLQotICAgIE1lZGlhQ29udHJvbGxlcjJTdHViIGdldENvbnRyb2xsZXJTdHViKCkgewotICAgICAgICByZXR1cm4gbUNvbnRyb2xsZXJTdHViOwotICAgIH0KLQotICAgIEV4ZWN1dG9yIGdldENhbGxiYWNrRXhlY3V0b3IoKSB7Ci0gICAgICAgIHJldHVybiBtQ2FsbGJhY2tFeGVjdXRvcjsKLSAgICB9Ci0KLSAgICBDb250ZXh0IGdldENvbnRleHQoKSB7Ci0gICAgICAgIHJldHVybiBtQ29udGV4dDsKLSAgICB9Ci0KLSAgICBNZWRpYUNvbnRyb2xsZXIyIGdldEluc3RhbmNlKCkgewotICAgICAgICByZXR1cm4gbUluc3RhbmNlOwotICAgIH0KLQotICAgIC8vIFJldHVybnMgc2Vzc2lvbiBiaW5kZXIgaWYgdGhlIGNvbnRyb2xsZXIgY2FuIHNlbmQgdGhlIGNvbW1hbmQuCi0gICAgSU1lZGlhU2Vzc2lvbjIgZ2V0U2Vzc2lvbkJpbmRlcklmQWJsZShpbnQgY29tbWFuZENvZGUpIHsKLSAgICAgICAgc3luY2hyb25pemVkIChtTG9jaykgewotICAgICAgICAgICAgaWYgKCFtQWxsb3dlZENvbW1hbmRzLmhhc0NvbW1hbmQoY29tbWFuZENvZGUpKSB7Ci0gICAgICAgICAgICAgICAgLy8gQ2Fubm90IHNlbmQgYmVjYXVzZSBpc24ndCBhbGxvd2VkIHRvLgotICAgICAgICAgICAgICAgIExvZy53KFRBRywgIkNvbnRyb2xsZXIgaXNuJ3QgYWxsb3dlZCB0byBjYWxsIGNvbW1hbmQsIGNvbW1hbmRDb2RlPSIKLSAgICAgICAgICAgICAgICAgICAgICAgICsgY29tbWFuZENvZGUpOwotICAgICAgICAgICAgICAgIHJldHVybiBudWxsOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIC8vIFRPRE8oamFld2FuKTogU2hvdWxkIHdlIGRvIHRoaXMgd2l0aCB0aGUgbG9jayBob2xkPwotICAgICAgICBmaW5hbCBJTWVkaWFTZXNzaW9uMiBiaW5kZXIgPSBtU2Vzc2lvbkJpbmRlcjsKLSAgICAgICAgaWYgKGJpbmRlciA9PSBudWxsKSB7Ci0gICAgICAgICAgICAvLyBDYW5ub3Qgc2VuZCBiZWNhdXNlIGRpc2Nvbm5lY3RlZC4KLSAgICAgICAgICAgIExvZy53KFRBRywgIlNlc3Npb24gaXMgZGlzY29ubmVjdGVkIik7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIGJpbmRlcjsKLSAgICB9Ci0KLSAgICAvLyBSZXR1cm5zIHNlc3Npb24gYmluZGVyIGlmIHRoZSBjb250cm9sbGVyIGNhbiBzZW5kIHRoZSBjb21tYW5kLgotICAgIElNZWRpYVNlc3Npb24yIGdldFNlc3Npb25CaW5kZXJJZkFibGUoU2Vzc2lvbkNvbW1hbmQyIGNvbW1hbmQpIHsKLSAgICAgICAgc3luY2hyb25pemVkIChtTG9jaykgewotICAgICAgICAgICAgaWYgKCFtQWxsb3dlZENvbW1hbmRzLmhhc0NvbW1hbmQoY29tbWFuZCkpIHsKLSAgICAgICAgICAgICAgICBMb2cudyhUQUcsICJDb250cm9sbGVyIGlzbid0IGFsbG93ZWQgdG8gY2FsbCBjb21tYW5kLCBjb21tYW5kPSIgKyBjb21tYW5kKTsKLSAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICAvLyBUT0RPKGphZXdhbik6IFNob3VsZCB3ZSBkbyB0aGlzIHdpdGggdGhlIGxvY2sgaG9sZD8KLSAgICAgICAgZmluYWwgSU1lZGlhU2Vzc2lvbjIgYmluZGVyID0gbVNlc3Npb25CaW5kZXI7Ci0gICAgICAgIGlmIChiaW5kZXIgPT0gbnVsbCkgewotICAgICAgICAgICAgLy8gQ2Fubm90IHNlbmQgYmVjYXVzZSBkaXNjb25uZWN0ZWQuCi0gICAgICAgICAgICBMb2cudyhUQUcsICJTZXNzaW9uIGlzIGRpc2Nvbm5lY3RlZCIpOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiBiaW5kZXI7Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIFNlc3Npb25Ub2tlbjIgZ2V0U2Vzc2lvblRva2VuX2ltcGwoKSB7Ci0gICAgICAgIHJldHVybiBtVG9rZW47Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIGJvb2xlYW4gaXNDb25uZWN0ZWRfaW1wbCgpIHsKLSAgICAgICAgZmluYWwgSU1lZGlhU2Vzc2lvbjIgYmluZGVyID0gbVNlc3Npb25CaW5kZXI7Ci0gICAgICAgIHJldHVybiBiaW5kZXIgIT0gbnVsbDsKLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgdm9pZCBwbGF5X2ltcGwoKSB7Ci0gICAgICAgIHNlbmRUcmFuc3BvcnRDb250cm9sQ29tbWFuZChTZXNzaW9uQ29tbWFuZDIuQ09NTUFORF9DT0RFX1BMQVlCQUNLX1BMQVkpOwotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyB2b2lkIHBhdXNlX2ltcGwoKSB7Ci0gICAgICAgIHNlbmRUcmFuc3BvcnRDb250cm9sQ29tbWFuZChTZXNzaW9uQ29tbWFuZDIuQ09NTUFORF9DT0RFX1BMQVlCQUNLX1BBVVNFKTsKLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgdm9pZCBzdG9wX2ltcGwoKSB7Ci0gICAgICAgIHNlbmRUcmFuc3BvcnRDb250cm9sQ29tbWFuZChTZXNzaW9uQ29tbWFuZDIuQ09NTUFORF9DT0RFX1BMQVlCQUNLX1NUT1ApOwotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyB2b2lkIHNraXBUb1BsYXlsaXN0SXRlbV9pbXBsKE1lZGlhSXRlbTIgaXRlbSkgewotICAgICAgICBpZiAoaXRlbSA9PSBudWxsKSB7Ci0gICAgICAgICAgICB0aHJvdyBuZXcgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKCJpdGVtIHNob3VsZG4ndCBiZSBudWxsIik7Ci0gICAgICAgIH0KLSAgICAgICAgZmluYWwgSU1lZGlhU2Vzc2lvbjIgYmluZGVyID0gbVNlc3Npb25CaW5kZXI7Ci0gICAgICAgIGlmIChiaW5kZXIgIT0gbnVsbCkgewotICAgICAgICAgICAgdHJ5IHsKLSAgICAgICAgICAgICAgICBiaW5kZXIuc2tpcFRvUGxheWxpc3RJdGVtKG1Db250cm9sbGVyU3R1YiwgaXRlbS50b0J1bmRsZSgpKTsKLSAgICAgICAgICAgIH0gY2F0Y2ggKFJlbW90ZUV4Y2VwdGlvbiBlKSB7Ci0gICAgICAgICAgICAgICAgTG9nLncoVEFHLCAiQ2Fubm90IGNvbm5lY3QgdG8gdGhlIHNlcnZpY2Ugb3IgdGhlIHNlc3Npb24gaXMgZ29uZSIsIGUpOwotICAgICAgICAgICAgfQotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgTG9nLncoVEFHLCAiU2Vzc2lvbiBpc24ndCBhY3RpdmUiLCBuZXcgSWxsZWdhbFN0YXRlRXhjZXB0aW9uKCkpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIHZvaWQgc2tpcFRvUHJldmlvdXNJdGVtX2ltcGwoKSB7Ci0gICAgICAgIGZpbmFsIElNZWRpYVNlc3Npb24yIGJpbmRlciA9IG1TZXNzaW9uQmluZGVyOwotICAgICAgICBpZiAoYmluZGVyICE9IG51bGwpIHsKLSAgICAgICAgICAgIHRyeSB7Ci0gICAgICAgICAgICAgICAgYmluZGVyLnNraXBUb1ByZXZpb3VzSXRlbShtQ29udHJvbGxlclN0dWIpOwotICAgICAgICAgICAgfSBjYXRjaCAoUmVtb3RlRXhjZXB0aW9uIGUpIHsKLSAgICAgICAgICAgICAgICBMb2cudyhUQUcsICJDYW5ub3QgY29ubmVjdCB0byB0aGUgc2VydmljZSBvciB0aGUgc2Vzc2lvbiBpcyBnb25lIiwgZSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBMb2cudyhUQUcsICJTZXNzaW9uIGlzbid0IGFjdGl2ZSIsIG5ldyBJbGxlZ2FsU3RhdGVFeGNlcHRpb24oKSk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgdm9pZCBza2lwVG9OZXh0SXRlbV9pbXBsKCkgewotICAgICAgICBmaW5hbCBJTWVkaWFTZXNzaW9uMiBiaW5kZXIgPSBtU2Vzc2lvbkJpbmRlcjsKLSAgICAgICAgaWYgKGJpbmRlciAhPSBudWxsKSB7Ci0gICAgICAgICAgICB0cnkgewotICAgICAgICAgICAgICAgIGJpbmRlci5za2lwVG9OZXh0SXRlbShtQ29udHJvbGxlclN0dWIpOwotICAgICAgICAgICAgfSBjYXRjaCAoUmVtb3RlRXhjZXB0aW9uIGUpIHsKLSAgICAgICAgICAgICAgICBMb2cudyhUQUcsICJDYW5ub3QgY29ubmVjdCB0byB0aGUgc2VydmljZSBvciB0aGUgc2Vzc2lvbiBpcyBnb25lIiwgZSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBMb2cudyhUQUcsICJTZXNzaW9uIGlzbid0IGFjdGl2ZSIsIG5ldyBJbGxlZ2FsU3RhdGVFeGNlcHRpb24oKSk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBwcml2YXRlIHZvaWQgc2VuZFRyYW5zcG9ydENvbnRyb2xDb21tYW5kKGludCBjb21tYW5kQ29kZSkgewotICAgICAgICBzZW5kVHJhbnNwb3J0Q29udHJvbENvbW1hbmQoY29tbWFuZENvZGUsIG51bGwpOwotICAgIH0KLQotICAgIHByaXZhdGUgdm9pZCBzZW5kVHJhbnNwb3J0Q29udHJvbENvbW1hbmQoaW50IGNvbW1hbmRDb2RlLCBCdW5kbGUgYXJncykgewotICAgICAgICBmaW5hbCBJTWVkaWFTZXNzaW9uMiBiaW5kZXIgPSBtU2Vzc2lvbkJpbmRlcjsKLSAgICAgICAgaWYgKGJpbmRlciAhPSBudWxsKSB7Ci0gICAgICAgICAgICB0cnkgewotICAgICAgICAgICAgICAgIGJpbmRlci5zZW5kVHJhbnNwb3J0Q29udHJvbENvbW1hbmQobUNvbnRyb2xsZXJTdHViLCBjb21tYW5kQ29kZSwgYXJncyk7Ci0gICAgICAgICAgICB9IGNhdGNoIChSZW1vdGVFeGNlcHRpb24gZSkgewotICAgICAgICAgICAgICAgIExvZy53KFRBRywgIkNhbm5vdCBjb25uZWN0IHRvIHRoZSBzZXJ2aWNlIG9yIHRoZSBzZXNzaW9uIGlzIGdvbmUiLCBlKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIExvZy53KFRBRywgIlNlc3Npb24gaXNuJ3QgYWN0aXZlIiwgbmV3IElsbGVnYWxTdGF0ZUV4Y2VwdGlvbigpKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyBQZW5kaW5nSW50ZW50IGdldFNlc3Npb25BY3Rpdml0eV9pbXBsKCkgewotICAgICAgICByZXR1cm4gbVNlc3Npb25BY3Rpdml0eTsKLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgdm9pZCBzZXRWb2x1bWVUb19pbXBsKGludCB2YWx1ZSwgaW50IGZsYWdzKSB7Ci0gICAgICAgIC8vIFRPRE8oaGRtb29uKTogc2FuaXR5IGNoZWNrCi0gICAgICAgIGZpbmFsIElNZWRpYVNlc3Npb24yIGJpbmRlciA9IGdldFNlc3Npb25CaW5kZXJJZkFibGUoQ09NTUFORF9DT0RFX1NFVF9WT0xVTUUpOwotICAgICAgICBpZiAoYmluZGVyICE9IG51bGwpIHsKLSAgICAgICAgICAgIHRyeSB7Ci0gICAgICAgICAgICAgICAgYmluZGVyLnNldFZvbHVtZVRvKG1Db250cm9sbGVyU3R1YiwgdmFsdWUsIGZsYWdzKTsKLSAgICAgICAgICAgIH0gY2F0Y2ggKFJlbW90ZUV4Y2VwdGlvbiBlKSB7Ci0gICAgICAgICAgICAgICAgTG9nLncoVEFHLCAiQ2Fubm90IGNvbm5lY3QgdG8gdGhlIHNlcnZpY2Ugb3IgdGhlIHNlc3Npb24gaXMgZ29uZSIsIGUpOwotICAgICAgICAgICAgfQotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgTG9nLncoVEFHLCAiU2Vzc2lvbiBpc24ndCBhY3RpdmUiLCBuZXcgSWxsZWdhbFN0YXRlRXhjZXB0aW9uKCkpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIHZvaWQgYWRqdXN0Vm9sdW1lX2ltcGwoaW50IGRpcmVjdGlvbiwgaW50IGZsYWdzKSB7Ci0gICAgICAgIC8vIFRPRE8oaGRtb29uKTogc2FuaXR5IGNoZWNrCi0gICAgICAgIGZpbmFsIElNZWRpYVNlc3Npb24yIGJpbmRlciA9IGdldFNlc3Npb25CaW5kZXJJZkFibGUoQ09NTUFORF9DT0RFX1NFVF9WT0xVTUUpOwotICAgICAgICBpZiAoYmluZGVyICE9IG51bGwpIHsKLSAgICAgICAgICAgIHRyeSB7Ci0gICAgICAgICAgICAgICAgYmluZGVyLmFkanVzdFZvbHVtZShtQ29udHJvbGxlclN0dWIsIGRpcmVjdGlvbiwgZmxhZ3MpOwotICAgICAgICAgICAgfSBjYXRjaCAoUmVtb3RlRXhjZXB0aW9uIGUpIHsKLSAgICAgICAgICAgICAgICBMb2cudyhUQUcsICJDYW5ub3QgY29ubmVjdCB0byB0aGUgc2VydmljZSBvciB0aGUgc2Vzc2lvbiBpcyBnb25lIiwgZSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBMb2cudyhUQUcsICJTZXNzaW9uIGlzbid0IGFjdGl2ZSIsIG5ldyBJbGxlZ2FsU3RhdGVFeGNlcHRpb24oKSk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgdm9pZCBwcmVwYXJlRnJvbVVyaV9pbXBsKFVyaSB1cmksIEJ1bmRsZSBleHRyYXMpIHsKLSAgICAgICAgZmluYWwgSU1lZGlhU2Vzc2lvbjIgYmluZGVyID0gZ2V0U2Vzc2lvbkJpbmRlcklmQWJsZShDT01NQU5EX0NPREVfU0VTU0lPTl9QUkVQQVJFX0ZST01fVVJJKTsKLSAgICAgICAgaWYgKHVyaSA9PSBudWxsKSB7Ci0gICAgICAgICAgICB0aHJvdyBuZXcgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKCJ1cmkgc2hvdWxkbid0IGJlIG51bGwiKTsKLSAgICAgICAgfQotICAgICAgICBpZiAoYmluZGVyICE9IG51bGwpIHsKLSAgICAgICAgICAgIHRyeSB7Ci0gICAgICAgICAgICAgICAgYmluZGVyLnByZXBhcmVGcm9tVXJpKG1Db250cm9sbGVyU3R1YiwgdXJpLCBleHRyYXMpOwotICAgICAgICAgICAgfSBjYXRjaCAoUmVtb3RlRXhjZXB0aW9uIGUpIHsKLSAgICAgICAgICAgICAgICBMb2cudyhUQUcsICJDYW5ub3QgY29ubmVjdCB0byB0aGUgc2VydmljZSBvciB0aGUgc2Vzc2lvbiBpcyBnb25lIiwgZSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAvLyBUT0RPKGphZXdhbik6IEhhbmRsZS4KLSAgICAgICAgfQotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyB2b2lkIHByZXBhcmVGcm9tU2VhcmNoX2ltcGwoU3RyaW5nIHF1ZXJ5LCBCdW5kbGUgZXh0cmFzKSB7Ci0gICAgICAgIGZpbmFsIElNZWRpYVNlc3Npb24yIGJpbmRlciA9IGdldFNlc3Npb25CaW5kZXJJZkFibGUoCi0gICAgICAgICAgICAgICAgQ09NTUFORF9DT0RFX1NFU1NJT05fUFJFUEFSRV9GUk9NX1NFQVJDSCk7Ci0gICAgICAgIGlmIChUZXh0VXRpbHMuaXNFbXB0eShxdWVyeSkpIHsKLSAgICAgICAgICAgIHRocm93IG5ldyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oInF1ZXJ5IHNob3VsZG4ndCBiZSBlbXB0eSIpOwotICAgICAgICB9Ci0gICAgICAgIGlmIChiaW5kZXIgIT0gbnVsbCkgewotICAgICAgICAgICAgdHJ5IHsKLSAgICAgICAgICAgICAgICBiaW5kZXIucHJlcGFyZUZyb21TZWFyY2gobUNvbnRyb2xsZXJTdHViLCBxdWVyeSwgZXh0cmFzKTsKLSAgICAgICAgICAgIH0gY2F0Y2ggKFJlbW90ZUV4Y2VwdGlvbiBlKSB7Ci0gICAgICAgICAgICAgICAgTG9nLncoVEFHLCAiQ2Fubm90IGNvbm5lY3QgdG8gdGhlIHNlcnZpY2Ugb3IgdGhlIHNlc3Npb24gaXMgZ29uZSIsIGUpOwotICAgICAgICAgICAgfQotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgLy8gVE9ETyhqYWV3YW4pOiBIYW5kbGUuCi0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgdm9pZCBwcmVwYXJlRnJvbU1lZGlhSWRfaW1wbChTdHJpbmcgbWVkaWFJZCwgQnVuZGxlIGV4dHJhcykgewotICAgICAgICBmaW5hbCBJTWVkaWFTZXNzaW9uMiBiaW5kZXIgPSBnZXRTZXNzaW9uQmluZGVySWZBYmxlKAotICAgICAgICAgICAgICAgIENPTU1BTkRfQ09ERV9TRVNTSU9OX1BSRVBBUkVfRlJPTV9NRURJQV9JRCk7Ci0gICAgICAgIGlmIChtZWRpYUlkID09IG51bGwpIHsKLSAgICAgICAgICAgIHRocm93IG5ldyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oIm1lZGlhSWQgc2hvdWxkbid0IGJlIG51bGwiKTsKLSAgICAgICAgfQotICAgICAgICBpZiAoYmluZGVyICE9IG51bGwpIHsKLSAgICAgICAgICAgIHRyeSB7Ci0gICAgICAgICAgICAgICAgYmluZGVyLnByZXBhcmVGcm9tTWVkaWFJZChtQ29udHJvbGxlclN0dWIsIG1lZGlhSWQsIGV4dHJhcyk7Ci0gICAgICAgICAgICB9IGNhdGNoIChSZW1vdGVFeGNlcHRpb24gZSkgewotICAgICAgICAgICAgICAgIExvZy53KFRBRywgIkNhbm5vdCBjb25uZWN0IHRvIHRoZSBzZXJ2aWNlIG9yIHRoZSBzZXNzaW9uIGlzIGdvbmUiLCBlKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIC8vIFRPRE8oamFld2FuKTogSGFuZGxlLgotICAgICAgICB9Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIHZvaWQgcGxheUZyb21VcmlfaW1wbChVcmkgdXJpLCBCdW5kbGUgZXh0cmFzKSB7Ci0gICAgICAgIGZpbmFsIElNZWRpYVNlc3Npb24yIGJpbmRlciA9IGdldFNlc3Npb25CaW5kZXJJZkFibGUoQ09NTUFORF9DT0RFX1NFU1NJT05fUExBWV9GUk9NX1VSSSk7Ci0gICAgICAgIGlmICh1cmkgPT0gbnVsbCkgewotICAgICAgICAgICAgdGhyb3cgbmV3IElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbigidXJpIHNob3VsZG4ndCBiZSBudWxsIik7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKGJpbmRlciAhPSBudWxsKSB7Ci0gICAgICAgICAgICB0cnkgewotICAgICAgICAgICAgICAgIGJpbmRlci5wbGF5RnJvbVVyaShtQ29udHJvbGxlclN0dWIsIHVyaSwgZXh0cmFzKTsKLSAgICAgICAgICAgIH0gY2F0Y2ggKFJlbW90ZUV4Y2VwdGlvbiBlKSB7Ci0gICAgICAgICAgICAgICAgTG9nLncoVEFHLCAiQ2Fubm90IGNvbm5lY3QgdG8gdGhlIHNlcnZpY2Ugb3IgdGhlIHNlc3Npb24gaXMgZ29uZSIsIGUpOwotICAgICAgICAgICAgfQotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgLy8gVE9ETyhqYWV3YW4pOiBIYW5kbGUuCi0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgdm9pZCBwbGF5RnJvbVNlYXJjaF9pbXBsKFN0cmluZyBxdWVyeSwgQnVuZGxlIGV4dHJhcykgewotICAgICAgICBmaW5hbCBJTWVkaWFTZXNzaW9uMiBiaW5kZXIgPSBnZXRTZXNzaW9uQmluZGVySWZBYmxlKENPTU1BTkRfQ09ERV9TRVNTSU9OX1BMQVlfRlJPTV9TRUFSQ0gpOwotICAgICAgICBpZiAoVGV4dFV0aWxzLmlzRW1wdHkocXVlcnkpKSB7Ci0gICAgICAgICAgICB0aHJvdyBuZXcgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKCJxdWVyeSBzaG91bGRuJ3QgYmUgZW1wdHkiKTsKLSAgICAgICAgfQotICAgICAgICBpZiAoYmluZGVyICE9IG51bGwpIHsKLSAgICAgICAgICAgIHRyeSB7Ci0gICAgICAgICAgICAgICAgYmluZGVyLnBsYXlGcm9tU2VhcmNoKG1Db250cm9sbGVyU3R1YiwgcXVlcnksIGV4dHJhcyk7Ci0gICAgICAgICAgICB9IGNhdGNoIChSZW1vdGVFeGNlcHRpb24gZSkgewotICAgICAgICAgICAgICAgIExvZy53KFRBRywgIkNhbm5vdCBjb25uZWN0IHRvIHRoZSBzZXJ2aWNlIG9yIHRoZSBzZXNzaW9uIGlzIGdvbmUiLCBlKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIC8vIFRPRE8oamFld2FuKTogSGFuZGxlLgotICAgICAgICB9Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIHZvaWQgcGxheUZyb21NZWRpYUlkX2ltcGwoU3RyaW5nIG1lZGlhSWQsIEJ1bmRsZSBleHRyYXMpIHsKLSAgICAgICAgZmluYWwgSU1lZGlhU2Vzc2lvbjIgYmluZGVyID0gZ2V0U2Vzc2lvbkJpbmRlcklmQWJsZSgKLSAgICAgICAgICAgICAgICBDT01NQU5EX0NPREVfU0VTU0lPTl9QTEFZX0ZST01fTUVESUFfSUQpOwotICAgICAgICBpZiAobWVkaWFJZCA9PSBudWxsKSB7Ci0gICAgICAgICAgICB0aHJvdyBuZXcgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKCJtZWRpYUlkIHNob3VsZG4ndCBiZSBudWxsIik7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKGJpbmRlciAhPSBudWxsKSB7Ci0gICAgICAgICAgICB0cnkgewotICAgICAgICAgICAgICAgIGJpbmRlci5wbGF5RnJvbU1lZGlhSWQobUNvbnRyb2xsZXJTdHViLCBtZWRpYUlkLCBleHRyYXMpOwotICAgICAgICAgICAgfSBjYXRjaCAoUmVtb3RlRXhjZXB0aW9uIGUpIHsKLSAgICAgICAgICAgICAgICBMb2cudyhUQUcsICJDYW5ub3QgY29ubmVjdCB0byB0aGUgc2VydmljZSBvciB0aGUgc2Vzc2lvbiBpcyBnb25lIiwgZSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAvLyBUT0RPKGphZXdhbik6IEhhbmRsZS4KLSAgICAgICAgfQotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyB2b2lkIHNldFJhdGluZ19pbXBsKFN0cmluZyBtZWRpYUlkLCBSYXRpbmcyIHJhdGluZykgewotICAgICAgICBpZiAobWVkaWFJZCA9PSBudWxsKSB7Ci0gICAgICAgICAgICB0aHJvdyBuZXcgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKCJtZWRpYUlkIHNob3VsZG4ndCBiZSBudWxsIik7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKHJhdGluZyA9PSBudWxsKSB7Ci0gICAgICAgICAgICB0aHJvdyBuZXcgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKCJyYXRpbmcgc2hvdWxkbid0IGJlIG51bGwiKTsKLSAgICAgICAgfQotCi0gICAgICAgIGZpbmFsIElNZWRpYVNlc3Npb24yIGJpbmRlciA9IG1TZXNzaW9uQmluZGVyOwotICAgICAgICBpZiAoYmluZGVyICE9IG51bGwpIHsKLSAgICAgICAgICAgIHRyeSB7Ci0gICAgICAgICAgICAgICAgYmluZGVyLnNldFJhdGluZyhtQ29udHJvbGxlclN0dWIsIG1lZGlhSWQsIHJhdGluZy50b0J1bmRsZSgpKTsKLSAgICAgICAgICAgIH0gY2F0Y2ggKFJlbW90ZUV4Y2VwdGlvbiBlKSB7Ci0gICAgICAgICAgICAgICAgTG9nLncoVEFHLCAiQ2Fubm90IGNvbm5lY3QgdG8gdGhlIHNlcnZpY2Ugb3IgdGhlIHNlc3Npb24gaXMgZ29uZSIsIGUpOwotICAgICAgICAgICAgfQotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgLy8gVE9ETyhqYWV3YW4pOiBIYW5kbGUuCi0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgdm9pZCBzZW5kQ3VzdG9tQ29tbWFuZF9pbXBsKFNlc3Npb25Db21tYW5kMiBjb21tYW5kLCBCdW5kbGUgYXJncywgUmVzdWx0UmVjZWl2ZXIgY2IpIHsKLSAgICAgICAgaWYgKGNvbW1hbmQgPT0gbnVsbCkgewotICAgICAgICAgICAgdGhyb3cgbmV3IElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbigiY29tbWFuZCBzaG91bGRuJ3QgYmUgbnVsbCIpOwotICAgICAgICB9Ci0gICAgICAgIGZpbmFsIElNZWRpYVNlc3Npb24yIGJpbmRlciA9IGdldFNlc3Npb25CaW5kZXJJZkFibGUoY29tbWFuZCk7Ci0gICAgICAgIGlmIChiaW5kZXIgIT0gbnVsbCkgewotICAgICAgICAgICAgdHJ5IHsKLSAgICAgICAgICAgICAgICBiaW5kZXIuc2VuZEN1c3RvbUNvbW1hbmQobUNvbnRyb2xsZXJTdHViLCBjb21tYW5kLnRvQnVuZGxlKCksIGFyZ3MsIGNiKTsKLSAgICAgICAgICAgIH0gY2F0Y2ggKFJlbW90ZUV4Y2VwdGlvbiBlKSB7Ci0gICAgICAgICAgICAgICAgTG9nLncoVEFHLCAiQ2Fubm90IGNvbm5lY3QgdG8gdGhlIHNlcnZpY2Ugb3IgdGhlIHNlc3Npb24gaXMgZ29uZSIsIGUpOwotICAgICAgICAgICAgfQotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgTG9nLncoVEFHLCAiU2Vzc2lvbiBpc24ndCBhY3RpdmUiLCBuZXcgSWxsZWdhbFN0YXRlRXhjZXB0aW9uKCkpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIExpc3Q8TWVkaWFJdGVtMj4gZ2V0UGxheWxpc3RfaW1wbCgpIHsKLSAgICAgICAgc3luY2hyb25pemVkIChtTG9jaykgewotICAgICAgICAgICAgcmV0dXJuIG1QbGF5bGlzdDsKLSAgICAgICAgfQotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyB2b2lkIHNldFBsYXlsaXN0X2ltcGwoTGlzdDxNZWRpYUl0ZW0yPiBsaXN0LCBNZWRpYU1ldGFkYXRhMiBtZXRhZGF0YSkgewotICAgICAgICBpZiAobGlzdCA9PSBudWxsKSB7Ci0gICAgICAgICAgICB0aHJvdyBuZXcgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKCJsaXN0IHNob3VsZG4ndCBiZSBudWxsIik7Ci0gICAgICAgIH0KLSAgICAgICAgZmluYWwgSU1lZGlhU2Vzc2lvbjIgYmluZGVyID0gZ2V0U2Vzc2lvbkJpbmRlcklmQWJsZShDT01NQU5EX0NPREVfUExBWUxJU1RfU0VUX0xJU1QpOwotICAgICAgICBpZiAoYmluZGVyICE9IG51bGwpIHsKLSAgICAgICAgICAgIExpc3Q8QnVuZGxlPiBidW5kbGVMaXN0ID0gbmV3IEFycmF5TGlzdDw+KCk7Ci0gICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGxpc3Quc2l6ZSgpOyBpKyspIHsKLSAgICAgICAgICAgICAgICBidW5kbGVMaXN0LmFkZChsaXN0LmdldChpKS50b0J1bmRsZSgpKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIEJ1bmRsZSBtZXRhZGF0YUJ1bmRsZSA9IChtZXRhZGF0YSA9PSBudWxsKSA/IG51bGwgOiBtZXRhZGF0YS50b0J1bmRsZSgpOwotICAgICAgICAgICAgdHJ5IHsKLSAgICAgICAgICAgICAgICBiaW5kZXIuc2V0UGxheWxpc3QobUNvbnRyb2xsZXJTdHViLCBidW5kbGVMaXN0LCBtZXRhZGF0YUJ1bmRsZSk7Ci0gICAgICAgICAgICB9IGNhdGNoIChSZW1vdGVFeGNlcHRpb24gZSkgewotICAgICAgICAgICAgICAgIExvZy53KFRBRywgIkNhbm5vdCBjb25uZWN0IHRvIHRoZSBzZXJ2aWNlIG9yIHRoZSBzZXNzaW9uIGlzIGdvbmUiLCBlKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIExvZy53KFRBRywgIlNlc3Npb24gaXNuJ3QgYWN0aXZlIiwgbmV3IElsbGVnYWxTdGF0ZUV4Y2VwdGlvbigpKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyBNZWRpYU1ldGFkYXRhMiBnZXRQbGF5bGlzdE1ldGFkYXRhX2ltcGwoKSB7Ci0gICAgICAgIHN5bmNocm9uaXplZCAobUxvY2spIHsKLSAgICAgICAgICAgIHJldHVybiBtUGxheWxpc3RNZXRhZGF0YTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyB2b2lkIHVwZGF0ZVBsYXlsaXN0TWV0YWRhdGFfaW1wbChNZWRpYU1ldGFkYXRhMiBtZXRhZGF0YSkgewotICAgICAgICBmaW5hbCBJTWVkaWFTZXNzaW9uMiBiaW5kZXIgPSBnZXRTZXNzaW9uQmluZGVySWZBYmxlKAotICAgICAgICAgICAgICAgIENPTU1BTkRfQ09ERV9QTEFZTElTVF9TRVRfTElTVF9NRVRBREFUQSk7Ci0gICAgICAgIGlmIChiaW5kZXIgIT0gbnVsbCkgewotICAgICAgICAgICAgQnVuZGxlIG1ldGFkYXRhQnVuZGxlID0gKG1ldGFkYXRhID09IG51bGwpID8gbnVsbCA6IG1ldGFkYXRhLnRvQnVuZGxlKCk7Ci0gICAgICAgICAgICB0cnkgewotICAgICAgICAgICAgICAgIGJpbmRlci51cGRhdGVQbGF5bGlzdE1ldGFkYXRhKG1Db250cm9sbGVyU3R1YiwgbWV0YWRhdGFCdW5kbGUpOwotICAgICAgICAgICAgfSBjYXRjaCAoUmVtb3RlRXhjZXB0aW9uIGUpIHsKLSAgICAgICAgICAgICAgICBMb2cudyhUQUcsICJDYW5ub3QgY29ubmVjdCB0byB0aGUgc2VydmljZSBvciB0aGUgc2Vzc2lvbiBpcyBnb25lIiwgZSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBMb2cudyhUQUcsICJTZXNzaW9uIGlzbid0IGFjdGl2ZSIsIG5ldyBJbGxlZ2FsU3RhdGVFeGNlcHRpb24oKSk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgdm9pZCBwcmVwYXJlX2ltcGwoKSB7Ci0gICAgICAgIHNlbmRUcmFuc3BvcnRDb250cm9sQ29tbWFuZChTZXNzaW9uQ29tbWFuZDIuQ09NTUFORF9DT0RFX1BMQVlCQUNLX1BSRVBBUkUpOwotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyB2b2lkIGZhc3RGb3J3YXJkX2ltcGwoKSB7Ci0gICAgICAgIC8vIFRPRE8oamFld2FuKTogSW1wbGVtZW50IHRoaXMuIE5vdGUgdGhhdCBmYXN0IGZvcndhcmQgaXNuJ3QgYSB0cmFuc3BvcnQgY29tbWFuZCBhbnltb3JlCi0gICAgICAgIC8vc2VuZFRyYW5zcG9ydENvbnRyb2xDb21tYW5kKE1lZGlhU2Vzc2lvbjIuQ09NTUFORF9DT0RFX1NFU1NJT05fRkFTVF9GT1JXQVJEKTsKLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgdm9pZCByZXdpbmRfaW1wbCgpIHsKLSAgICAgICAgLy8gVE9ETyhqYWV3YW4pOiBJbXBsZW1lbnQgdGhpcy4gTm90ZSB0aGF0IHJld2luZCBpc24ndCBhIHRyYW5zcG9ydCBjb21tYW5kIGFueW1vcmUKLSAgICAgICAgLy9zZW5kVHJhbnNwb3J0Q29udHJvbENvbW1hbmQoTWVkaWFTZXNzaW9uMi5DT01NQU5EX0NPREVfU0VTU0lPTl9SRVdJTkQpOwotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyB2b2lkIHNlZWtUb19pbXBsKGxvbmcgcG9zKSB7Ci0gICAgICAgIGlmIChwb3MgPCAwKSB7Ci0gICAgICAgICAgICB0aHJvdyBuZXcgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKCJwb3NpdGlvbiBzaG91bGRuJ3QgYmUgbmVnYXRpdmUiKTsKLSAgICAgICAgfQotICAgICAgICBCdW5kbGUgYXJncyA9IG5ldyBCdW5kbGUoKTsKLSAgICAgICAgYXJncy5wdXRMb25nKE1lZGlhU2Vzc2lvbjJTdHViLkFSR1VNRU5UX0tFWV9QT1NJVElPTiwgcG9zKTsKLSAgICAgICAgc2VuZFRyYW5zcG9ydENvbnRyb2xDb21tYW5kKFNlc3Npb25Db21tYW5kMi5DT01NQU5EX0NPREVfUExBWUJBQ0tfU0VFS19UTywgYXJncyk7Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIHZvaWQgYWRkUGxheWxpc3RJdGVtX2ltcGwoaW50IGluZGV4LCBNZWRpYUl0ZW0yIGl0ZW0pIHsKLSAgICAgICAgaWYgKGluZGV4IDwgMCkgewotICAgICAgICAgICAgdGhyb3cgbmV3IElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbigiaW5kZXggc2hvdWxkbid0IGJlIG5lZ2F0aXZlIik7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKGl0ZW0gPT0gbnVsbCkgewotICAgICAgICAgICAgdGhyb3cgbmV3IElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbigiaXRlbSBzaG91bGRuJ3QgYmUgbnVsbCIpOwotICAgICAgICB9Ci0gICAgICAgIGZpbmFsIElNZWRpYVNlc3Npb24yIGJpbmRlciA9IGdldFNlc3Npb25CaW5kZXJJZkFibGUoQ09NTUFORF9DT0RFX1BMQVlMSVNUX0FERF9JVEVNKTsKLSAgICAgICAgaWYgKGJpbmRlciAhPSBudWxsKSB7Ci0gICAgICAgICAgICB0cnkgewotICAgICAgICAgICAgICAgIGJpbmRlci5hZGRQbGF5bGlzdEl0ZW0obUNvbnRyb2xsZXJTdHViLCBpbmRleCwgaXRlbS50b0J1bmRsZSgpKTsKLSAgICAgICAgICAgIH0gY2F0Y2ggKFJlbW90ZUV4Y2VwdGlvbiBlKSB7Ci0gICAgICAgICAgICAgICAgTG9nLncoVEFHLCAiQ2Fubm90IGNvbm5lY3QgdG8gdGhlIHNlcnZpY2Ugb3IgdGhlIHNlc3Npb24gaXMgZ29uZSIsIGUpOwotICAgICAgICAgICAgfQotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgTG9nLncoVEFHLCAiU2Vzc2lvbiBpc24ndCBhY3RpdmUiLCBuZXcgSWxsZWdhbFN0YXRlRXhjZXB0aW9uKCkpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIHZvaWQgcmVtb3ZlUGxheWxpc3RJdGVtX2ltcGwoTWVkaWFJdGVtMiBpdGVtKSB7Ci0gICAgICAgIGlmIChpdGVtID09IG51bGwpIHsKLSAgICAgICAgICAgIHRocm93IG5ldyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oIml0ZW0gc2hvdWxkbid0IGJlIG51bGwiKTsKLSAgICAgICAgfQotICAgICAgICBmaW5hbCBJTWVkaWFTZXNzaW9uMiBiaW5kZXIgPSBnZXRTZXNzaW9uQmluZGVySWZBYmxlKENPTU1BTkRfQ09ERV9QTEFZTElTVF9SRU1PVkVfSVRFTSk7Ci0gICAgICAgIGlmIChiaW5kZXIgIT0gbnVsbCkgewotICAgICAgICAgICAgdHJ5IHsKLSAgICAgICAgICAgICAgICBiaW5kZXIucmVtb3ZlUGxheWxpc3RJdGVtKG1Db250cm9sbGVyU3R1YiwgaXRlbS50b0J1bmRsZSgpKTsKLSAgICAgICAgICAgIH0gY2F0Y2ggKFJlbW90ZUV4Y2VwdGlvbiBlKSB7Ci0gICAgICAgICAgICAgICAgTG9nLncoVEFHLCAiQ2Fubm90IGNvbm5lY3QgdG8gdGhlIHNlcnZpY2Ugb3IgdGhlIHNlc3Npb24gaXMgZ29uZSIsIGUpOwotICAgICAgICAgICAgfQotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgTG9nLncoVEFHLCAiU2Vzc2lvbiBpc24ndCBhY3RpdmUiLCBuZXcgSWxsZWdhbFN0YXRlRXhjZXB0aW9uKCkpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIHZvaWQgcmVwbGFjZVBsYXlsaXN0SXRlbV9pbXBsKGludCBpbmRleCwgTWVkaWFJdGVtMiBpdGVtKSB7Ci0gICAgICAgIGlmIChpbmRleCA8IDApIHsKLSAgICAgICAgICAgIHRocm93IG5ldyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oImluZGV4IHNob3VsZG4ndCBiZSBuZWdhdGl2ZSIpOwotICAgICAgICB9Ci0gICAgICAgIGlmIChpdGVtID09IG51bGwpIHsKLSAgICAgICAgICAgIHRocm93IG5ldyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oIml0ZW0gc2hvdWxkbid0IGJlIG51bGwiKTsKLSAgICAgICAgfQotICAgICAgICBmaW5hbCBJTWVkaWFTZXNzaW9uMiBiaW5kZXIgPSBnZXRTZXNzaW9uQmluZGVySWZBYmxlKENPTU1BTkRfQ09ERV9QTEFZTElTVF9SRVBMQUNFX0lURU0pOwotICAgICAgICBpZiAoYmluZGVyICE9IG51bGwpIHsKLSAgICAgICAgICAgIHRyeSB7Ci0gICAgICAgICAgICAgICAgYmluZGVyLnJlcGxhY2VQbGF5bGlzdEl0ZW0obUNvbnRyb2xsZXJTdHViLCBpbmRleCwgaXRlbS50b0J1bmRsZSgpKTsKLSAgICAgICAgICAgIH0gY2F0Y2ggKFJlbW90ZUV4Y2VwdGlvbiBlKSB7Ci0gICAgICAgICAgICAgICAgTG9nLncoVEFHLCAiQ2Fubm90IGNvbm5lY3QgdG8gdGhlIHNlcnZpY2Ugb3IgdGhlIHNlc3Npb24gaXMgZ29uZSIsIGUpOwotICAgICAgICAgICAgfQotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgTG9nLncoVEFHLCAiU2Vzc2lvbiBpc24ndCBhY3RpdmUiLCBuZXcgSWxsZWdhbFN0YXRlRXhjZXB0aW9uKCkpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIGludCBnZXRTaHVmZmxlTW9kZV9pbXBsKCkgewotICAgICAgICByZXR1cm4gbVNodWZmbGVNb2RlOwotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyB2b2lkIHNldFNodWZmbGVNb2RlX2ltcGwoaW50IHNodWZmbGVNb2RlKSB7Ci0gICAgICAgIGZpbmFsIElNZWRpYVNlc3Npb24yIGJpbmRlciA9IGdldFNlc3Npb25CaW5kZXJJZkFibGUoCi0gICAgICAgICAgICAgICAgQ09NTUFORF9DT0RFX1BMQVlMSVNUX1NFVF9TSFVGRkxFX01PREUpOwotICAgICAgICBpZiAoYmluZGVyICE9IG51bGwpIHsKLSAgICAgICAgICAgIHRyeSB7Ci0gICAgICAgICAgICAgICAgYmluZGVyLnNldFNodWZmbGVNb2RlKG1Db250cm9sbGVyU3R1Yiwgc2h1ZmZsZU1vZGUpOwotICAgICAgICAgICAgfSBjYXRjaCAoUmVtb3RlRXhjZXB0aW9uIGUpIHsKLSAgICAgICAgICAgICAgICBMb2cudyhUQUcsICJDYW5ub3QgY29ubmVjdCB0byB0aGUgc2VydmljZSBvciB0aGUgc2Vzc2lvbiBpcyBnb25lIiwgZSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBMb2cudyhUQUcsICJTZXNzaW9uIGlzbid0IGFjdGl2ZSIsIG5ldyBJbGxlZ2FsU3RhdGVFeGNlcHRpb24oKSk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgaW50IGdldFJlcGVhdE1vZGVfaW1wbCgpIHsKLSAgICAgICAgcmV0dXJuIG1SZXBlYXRNb2RlOwotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyB2b2lkIHNldFJlcGVhdE1vZGVfaW1wbChpbnQgcmVwZWF0TW9kZSkgewotICAgICAgICBmaW5hbCBJTWVkaWFTZXNzaW9uMiBiaW5kZXIgPSBnZXRTZXNzaW9uQmluZGVySWZBYmxlKENPTU1BTkRfQ09ERV9QTEFZTElTVF9TRVRfUkVQRUFUX01PREUpOwotICAgICAgICBpZiAoYmluZGVyICE9IG51bGwpIHsKLSAgICAgICAgICAgIHRyeSB7Ci0gICAgICAgICAgICAgICAgYmluZGVyLnNldFJlcGVhdE1vZGUobUNvbnRyb2xsZXJTdHViLCByZXBlYXRNb2RlKTsKLSAgICAgICAgICAgIH0gY2F0Y2ggKFJlbW90ZUV4Y2VwdGlvbiBlKSB7Ci0gICAgICAgICAgICAgICAgTG9nLncoVEFHLCAiQ2Fubm90IGNvbm5lY3QgdG8gdGhlIHNlcnZpY2Ugb3IgdGhlIHNlc3Npb24gaXMgZ29uZSIsIGUpOwotICAgICAgICAgICAgfQotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgTG9nLncoVEFHLCAiU2Vzc2lvbiBpc24ndCBhY3RpdmUiLCBuZXcgSWxsZWdhbFN0YXRlRXhjZXB0aW9uKCkpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIFBsYXliYWNrSW5mbyBnZXRQbGF5YmFja0luZm9faW1wbCgpIHsKLSAgICAgICAgc3luY2hyb25pemVkIChtTG9jaykgewotICAgICAgICAgICAgcmV0dXJuIG1QbGF5YmFja0luZm87Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgaW50IGdldFBsYXllclN0YXRlX2ltcGwoKSB7Ci0gICAgICAgIHN5bmNocm9uaXplZCAobUxvY2spIHsKLSAgICAgICAgICAgIHJldHVybiBtUGxheWVyU3RhdGU7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgbG9uZyBnZXRDdXJyZW50UG9zaXRpb25faW1wbCgpIHsKLSAgICAgICAgc3luY2hyb25pemVkIChtTG9jaykgewotICAgICAgICAgICAgbG9uZyB0aW1lRGlmZiA9IFN5c3RlbS5jdXJyZW50VGltZU1pbGxpcygpIC0gbVBvc2l0aW9uRXZlbnRUaW1lTXM7Ci0gICAgICAgICAgICBsb25nIGV4cGVjdGVkUG9zaXRpb24gPSBtUG9zaXRpb25NcyArIChsb25nKSAobVBsYXliYWNrU3BlZWQgKiB0aW1lRGlmZik7Ci0gICAgICAgICAgICByZXR1cm4gTWF0aC5tYXgoMCwgZXhwZWN0ZWRQb3NpdGlvbik7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgZmxvYXQgZ2V0UGxheWJhY2tTcGVlZF9pbXBsKCkgewotICAgICAgICBzeW5jaHJvbml6ZWQgKG1Mb2NrKSB7Ci0gICAgICAgICAgICByZXR1cm4gbVBsYXliYWNrU3BlZWQ7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgbG9uZyBnZXRCdWZmZXJlZFBvc2l0aW9uX2ltcGwoKSB7Ci0gICAgICAgIHN5bmNocm9uaXplZCAobUxvY2spIHsKLSAgICAgICAgICAgIHJldHVybiBtQnVmZmVyZWRQb3NpdGlvbk1zOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIE1lZGlhSXRlbTIgZ2V0Q3VycmVudE1lZGlhSXRlbV9pbXBsKCkgewotICAgICAgICAvLyBUT0RPKGphZXdhbik6IEltcGxlbWVudAotICAgICAgICByZXR1cm4gbnVsbDsKLSAgICB9Ci0KLSAgICB2b2lkIHB1c2hQbGF5ZXJTdGF0ZUNoYW5nZXMoZmluYWwgaW50IHN0YXRlKSB7Ci0gICAgICAgIHN5bmNocm9uaXplZCAobUxvY2spIHsKLSAgICAgICAgICAgIG1QbGF5ZXJTdGF0ZSA9IHN0YXRlOwotICAgICAgICB9Ci0gICAgICAgIG1DYWxsYmFja0V4ZWN1dG9yLmV4ZWN1dGUoKCkgLT4gewotICAgICAgICAgICAgaWYgKCFtSW5zdGFuY2UuaXNDb25uZWN0ZWQoKSkgewotICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIG1DYWxsYmFjay5vblBsYXllclN0YXRlQ2hhbmdlZChtSW5zdGFuY2UsIHN0YXRlKTsKLSAgICAgICAgfSk7Ci0gICAgfQotCi0gICAgLy8gVE9ETyhqYWV3YW4pOiBSZW5hbWUgdG8gc2VlayBjb21wbGV0ZWQKLSAgICB2b2lkIHB1c2hQb3NpdGlvbkNoYW5nZXMoZmluYWwgbG9uZyBldmVudFRpbWVNcywgZmluYWwgbG9uZyBwb3NpdGlvbk1zKSB7Ci0gICAgICAgIHN5bmNocm9uaXplZCAobUxvY2spIHsKLSAgICAgICAgICAgIG1Qb3NpdGlvbkV2ZW50VGltZU1zID0gZXZlbnRUaW1lTXM7Ci0gICAgICAgICAgICBtUG9zaXRpb25NcyA9IHBvc2l0aW9uTXM7Ci0gICAgICAgIH0KLSAgICAgICAgbUNhbGxiYWNrRXhlY3V0b3IuZXhlY3V0ZSgoKSAtPiB7Ci0gICAgICAgICAgICBpZiAoIW1JbnN0YW5jZS5pc0Nvbm5lY3RlZCgpKSB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgbUNhbGxiYWNrLm9uU2Vla0NvbXBsZXRlZChtSW5zdGFuY2UsIHBvc2l0aW9uTXMpOwotICAgICAgICB9KTsKLSAgICB9Ci0KLSAgICB2b2lkIHB1c2hQbGF5YmFja1NwZWVkQ2hhbmdlcyhmaW5hbCBmbG9hdCBzcGVlZCkgewotICAgICAgICBzeW5jaHJvbml6ZWQgKG1Mb2NrKSB7Ci0gICAgICAgICAgICBtUGxheWJhY2tTcGVlZCA9IHNwZWVkOwotICAgICAgICB9Ci0gICAgICAgIG1DYWxsYmFja0V4ZWN1dG9yLmV4ZWN1dGUoKCkgLT4gewotICAgICAgICAgICAgaWYgKCFtSW5zdGFuY2UuaXNDb25uZWN0ZWQoKSkgewotICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIG1DYWxsYmFjay5vblBsYXliYWNrU3BlZWRDaGFuZ2VkKG1JbnN0YW5jZSwgc3BlZWQpOwotICAgICAgICB9KTsKLSAgICB9Ci0KLSAgICB2b2lkIHB1c2hCdWZmZXJlZFBvc2l0aW9uQ2hhbmdlcyhmaW5hbCBsb25nIGJ1ZmZlcmVkUG9zaXRpb25NcykgewotICAgICAgICBzeW5jaHJvbml6ZWQgKG1Mb2NrKSB7Ci0gICAgICAgICAgICBtQnVmZmVyZWRQb3NpdGlvbk1zID0gYnVmZmVyZWRQb3NpdGlvbk1zOwotICAgICAgICB9Ci0gICAgICAgIG1DYWxsYmFja0V4ZWN1dG9yLmV4ZWN1dGUoKCkgLT4gewotICAgICAgICAgICAgaWYgKCFtSW5zdGFuY2UuaXNDb25uZWN0ZWQoKSkgewotICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIC8vIFRPRE8oamFld2FuKTogRml4IHRoaXMgLS0gaXQncyBub3cgYnVmZmVyZWQgc3RhdGUKLSAgICAgICAgICAgIC8vbUNhbGxiYWNrLm9uQnVmZmVyZWRQb3NpdGlvbkNoYW5nZWQobUluc3RhbmNlLCBidWZmZXJlZFBvc2l0aW9uTXMpOwotICAgICAgICB9KTsKLSAgICB9Ci0KLSAgICB2b2lkIHB1c2hQbGF5YmFja0luZm9DaGFuZ2VzKGZpbmFsIFBsYXliYWNrSW5mbyBpbmZvKSB7Ci0gICAgICAgIHN5bmNocm9uaXplZCAobUxvY2spIHsKLSAgICAgICAgICAgIG1QbGF5YmFja0luZm8gPSBpbmZvOwotICAgICAgICB9Ci0gICAgICAgIG1DYWxsYmFja0V4ZWN1dG9yLmV4ZWN1dGUoKCkgLT4gewotICAgICAgICAgICAgaWYgKCFtSW5zdGFuY2UuaXNDb25uZWN0ZWQoKSkgewotICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIG1DYWxsYmFjay5vblBsYXliYWNrSW5mb0NoYW5nZWQobUluc3RhbmNlLCBpbmZvKTsKLSAgICAgICAgfSk7Ci0gICAgfQotCi0gICAgdm9pZCBwdXNoUGxheWxpc3RDaGFuZ2VzKGZpbmFsIExpc3Q8TWVkaWFJdGVtMj4gcGxheWxpc3QsIGZpbmFsIE1lZGlhTWV0YWRhdGEyIG1ldGFkYXRhKSB7Ci0gICAgICAgIHN5bmNocm9uaXplZCAobUxvY2spIHsKLSAgICAgICAgICAgIG1QbGF5bGlzdCA9IHBsYXlsaXN0OwotICAgICAgICAgICAgbVBsYXlsaXN0TWV0YWRhdGEgPSBtZXRhZGF0YTsKLSAgICAgICAgfQotICAgICAgICBtQ2FsbGJhY2tFeGVjdXRvci5leGVjdXRlKCgpIC0+IHsKLSAgICAgICAgICAgIGlmICghbUluc3RhbmNlLmlzQ29ubmVjdGVkKCkpIHsKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBtQ2FsbGJhY2sub25QbGF5bGlzdENoYW5nZWQobUluc3RhbmNlLCBwbGF5bGlzdCwgbWV0YWRhdGEpOwotICAgICAgICB9KTsKLSAgICB9Ci0KLSAgICB2b2lkIHB1c2hQbGF5bGlzdE1ldGFkYXRhQ2hhbmdlcyhNZWRpYU1ldGFkYXRhMiBtZXRhZGF0YSkgewotICAgICAgICBzeW5jaHJvbml6ZWQgKG1Mb2NrKSB7Ci0gICAgICAgICAgICBtUGxheWxpc3RNZXRhZGF0YSA9IG1ldGFkYXRhOwotICAgICAgICB9Ci0gICAgICAgIG1DYWxsYmFja0V4ZWN1dG9yLmV4ZWN1dGUoKCkgLT4gewotICAgICAgICAgICAgaWYgKCFtSW5zdGFuY2UuaXNDb25uZWN0ZWQoKSkgewotICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIG1DYWxsYmFjay5vblBsYXlsaXN0TWV0YWRhdGFDaGFuZ2VkKG1JbnN0YW5jZSwgbWV0YWRhdGEpOwotICAgICAgICB9KTsKLSAgICB9Ci0KLSAgICB2b2lkIHB1c2hTaHVmZmxlTW9kZUNoYW5nZXMoaW50IHNodWZmbGVNb2RlKSB7Ci0gICAgICAgIHN5bmNocm9uaXplZCAobUxvY2spIHsKLSAgICAgICAgICAgIG1TaHVmZmxlTW9kZSA9IHNodWZmbGVNb2RlOwotICAgICAgICB9Ci0gICAgICAgIG1DYWxsYmFja0V4ZWN1dG9yLmV4ZWN1dGUoKCkgLT4gewotICAgICAgICAgICAgaWYgKCFtSW5zdGFuY2UuaXNDb25uZWN0ZWQoKSkgewotICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIG1DYWxsYmFjay5vblNodWZmbGVNb2RlQ2hhbmdlZChtSW5zdGFuY2UsIHNodWZmbGVNb2RlKTsKLSAgICAgICAgfSk7Ci0gICAgfQotCi0gICAgdm9pZCBwdXNoUmVwZWF0TW9kZUNoYW5nZXMoaW50IHJlcGVhdE1vZGUpIHsKLSAgICAgICAgc3luY2hyb25pemVkIChtTG9jaykgewotICAgICAgICAgICAgbVJlcGVhdE1vZGUgPSByZXBlYXRNb2RlOwotICAgICAgICB9Ci0gICAgICAgIG1DYWxsYmFja0V4ZWN1dG9yLmV4ZWN1dGUoKCkgLT4gewotICAgICAgICAgICAgaWYgKCFtSW5zdGFuY2UuaXNDb25uZWN0ZWQoKSkgewotICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIG1DYWxsYmFjay5vblJlcGVhdE1vZGVDaGFuZ2VkKG1JbnN0YW5jZSwgcmVwZWF0TW9kZSk7Ci0gICAgICAgIH0pOwotICAgIH0KLQotICAgIHZvaWQgcHVzaEVycm9yKGludCBlcnJvckNvZGUsIEJ1bmRsZSBleHRyYXMpIHsKLSAgICAgICAgbUNhbGxiYWNrRXhlY3V0b3IuZXhlY3V0ZSgoKSAtPiB7Ci0gICAgICAgICAgICBpZiAoIW1JbnN0YW5jZS5pc0Nvbm5lY3RlZCgpKSB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgbUNhbGxiYWNrLm9uRXJyb3IobUluc3RhbmNlLCBlcnJvckNvZGUsIGV4dHJhcyk7Ci0gICAgICAgIH0pOwotICAgIH0KLQotICAgIC8vIFNob3VsZCBiZSB1c2VkIHdpdGhvdXQgYSBsb2NrIHRvIHByZXZlbnQgcG90ZW50aWFsIGRlYWRsb2NrLgotICAgIHZvaWQgb25Db25uZWN0ZWROb3RMb2NrZWQoSU1lZGlhU2Vzc2lvbjIgc2Vzc2lvbkJpbmRlciwKLSAgICAgICAgICAgIGZpbmFsIFNlc3Npb25Db21tYW5kR3JvdXAyIGFsbG93ZWRDb21tYW5kcywKLSAgICAgICAgICAgIGZpbmFsIGludCBwbGF5ZXJTdGF0ZSwKLSAgICAgICAgICAgIGZpbmFsIGxvbmcgcG9zaXRpb25FdmVudFRpbWVNcywKLSAgICAgICAgICAgIGZpbmFsIGxvbmcgcG9zaXRpb25NcywKLSAgICAgICAgICAgIGZpbmFsIGZsb2F0IHBsYXliYWNrU3BlZWQsCi0gICAgICAgICAgICBmaW5hbCBsb25nIGJ1ZmZlcmVkUG9zaXRpb25NcywKLSAgICAgICAgICAgIGZpbmFsIFBsYXliYWNrSW5mbyBpbmZvLAotICAgICAgICAgICAgZmluYWwgaW50IHJlcGVhdE1vZGUsCi0gICAgICAgICAgICBmaW5hbCBpbnQgc2h1ZmZsZU1vZGUsCi0gICAgICAgICAgICBmaW5hbCBMaXN0PE1lZGlhSXRlbTI+IHBsYXlsaXN0LAotICAgICAgICAgICAgZmluYWwgUGVuZGluZ0ludGVudCBzZXNzaW9uQWN0aXZpdHkpIHsKLSAgICAgICAgaWYgKERFQlVHKSB7Ci0gICAgICAgICAgICBMb2cuZChUQUcsICJvbkNvbm5lY3RlZE5vdExvY2tlZCBzZXNzaW9uQmluZGVyPSIgKyBzZXNzaW9uQmluZGVyCi0gICAgICAgICAgICAgICAgICAgICsgIiwgYWxsb3dlZENvbW1hbmRzPSIgKyBhbGxvd2VkQ29tbWFuZHMpOwotICAgICAgICB9Ci0gICAgICAgIGJvb2xlYW4gY2xvc2UgPSBmYWxzZTsKLSAgICAgICAgdHJ5IHsKLSAgICAgICAgICAgIGlmIChzZXNzaW9uQmluZGVyID09IG51bGwgfHwgYWxsb3dlZENvbW1hbmRzID09IG51bGwpIHsKLSAgICAgICAgICAgICAgICAvLyBDb25uZWN0aW9uIHJlamVjdGVkLgotICAgICAgICAgICAgICAgIGNsb3NlID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBzeW5jaHJvbml6ZWQgKG1Mb2NrKSB7Ci0gICAgICAgICAgICAgICAgaWYgKG1Jc1JlbGVhc2VkKSB7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgaWYgKG1TZXNzaW9uQmluZGVyICE9IG51bGwpIHsKLSAgICAgICAgICAgICAgICAgICAgTG9nLmUoVEFHLCAiQ2Fubm90IGJlIG5vdGlmaWVkIGFib3V0IHRoZSBjb25uZWN0aW9uIHJlc3VsdCBtYW55IHRpbWVzLiIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICArICIgUHJvYmFibHkgYSBidWcgb3IgbWFsaWNpb3VzIGFwcC4iKTsKLSAgICAgICAgICAgICAgICAgICAgY2xvc2UgPSB0cnVlOwotICAgICAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIG1BbGxvd2VkQ29tbWFuZHMgPSBhbGxvd2VkQ29tbWFuZHM7Ci0gICAgICAgICAgICAgICAgbVBsYXllclN0YXRlID0gcGxheWVyU3RhdGU7Ci0gICAgICAgICAgICAgICAgbVBvc2l0aW9uRXZlbnRUaW1lTXMgPSBwb3NpdGlvbkV2ZW50VGltZU1zOwotICAgICAgICAgICAgICAgIG1Qb3NpdGlvbk1zID0gcG9zaXRpb25NczsKLSAgICAgICAgICAgICAgICBtUGxheWJhY2tTcGVlZCA9IHBsYXliYWNrU3BlZWQ7Ci0gICAgICAgICAgICAgICAgbUJ1ZmZlcmVkUG9zaXRpb25NcyA9IGJ1ZmZlcmVkUG9zaXRpb25NczsKLSAgICAgICAgICAgICAgICBtUGxheWJhY2tJbmZvID0gaW5mbzsKLSAgICAgICAgICAgICAgICBtUmVwZWF0TW9kZSA9IHJlcGVhdE1vZGU7Ci0gICAgICAgICAgICAgICAgbVNodWZmbGVNb2RlID0gc2h1ZmZsZU1vZGU7Ci0gICAgICAgICAgICAgICAgbVBsYXlsaXN0ID0gcGxheWxpc3Q7Ci0gICAgICAgICAgICAgICAgbVNlc3Npb25BY3Rpdml0eSA9IHNlc3Npb25BY3Rpdml0eTsKLSAgICAgICAgICAgICAgICBtU2Vzc2lvbkJpbmRlciA9IHNlc3Npb25CaW5kZXI7Ci0gICAgICAgICAgICAgICAgdHJ5IHsKLSAgICAgICAgICAgICAgICAgICAgLy8gSW1wbGVtZW50YXRpb24gZm9yIHRoZSBsb2NhbCBiaW5kZXIgaXMgbm8tb3AsCi0gICAgICAgICAgICAgICAgICAgIC8vIHNvIGNhbiBiZSB1c2VkIHdpdGhvdXQgd29ycnlpbmcgYWJvdXQgZGVhZGxvY2suCi0gICAgICAgICAgICAgICAgICAgIG1TZXNzaW9uQmluZGVyLmFzQmluZGVyKCkubGlua1RvRGVhdGgobURlYXRoUmVjaXBpZW50LCAwKTsKLSAgICAgICAgICAgICAgICB9IGNhdGNoIChSZW1vdGVFeGNlcHRpb24gZSkgewotICAgICAgICAgICAgICAgICAgICBpZiAoREVCVUcpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIExvZy5kKFRBRywgIlNlc3Npb24gZGllZCB0b28gZWFybHkuIiwgZSk7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgY2xvc2UgPSB0cnVlOwotICAgICAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICAgICAgLy8gVE9ETyhqYWV3YW4pOiBLZWVwIGNvbW1hbmRzIHRvIHByZXZlbnRzIGlsbGVnYWwgQVBJIGNhbGxzLgotICAgICAgICAgICAgbUNhbGxiYWNrRXhlY3V0b3IuZXhlY3V0ZSgoKSAtPiB7Ci0gICAgICAgICAgICAgICAgLy8gTm90ZTogV2UgbWF5IHRyaWdnZXIgQ29udHJvbGxlckNhbGxiYWNrcyB3aXRoIHRoZSBpbml0aWFsIHZhbHVlcwotICAgICAgICAgICAgICAgIC8vIEJ1dCBpdCdzIGhhcmQgdG8gZGVmaW5lIHRoZSBvcmRlciBvZiB0aGUgY29udHJvbGxlciBjYWxsYmFja3MKLSAgICAgICAgICAgICAgICAvLyBPbmx5IG5vdGlmeSBhYm91dCB0aGUKLSAgICAgICAgICAgICAgICBtQ2FsbGJhY2sub25Db25uZWN0ZWQobUluc3RhbmNlLCBhbGxvd2VkQ29tbWFuZHMpOwotICAgICAgICAgICAgfSk7Ci0gICAgICAgIH0gZmluYWxseSB7Ci0gICAgICAgICAgICBpZiAoY2xvc2UpIHsKLSAgICAgICAgICAgICAgICAvLyBUcmljayB0byBjYWxsIHJlbGVhc2UoKSB3aXRob3V0IGhvbGRpbmcgdGhlIGxvY2ssIHRvIHByZXZlbnQgcG90ZW50aWFsIGRlYWRsb2NrCi0gICAgICAgICAgICAgICAgLy8gd2l0aCB0aGUgZGV2ZWxvcGVyJ3MgY3VzdG9tIGxvY2sgd2l0aGluIHRoZSBDb250cm9sbGVyQ2FsbGJhY2sub25EaXNjb25uZWN0ZWQoKS4KLSAgICAgICAgICAgICAgICBtSW5zdGFuY2UuY2xvc2UoKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLQotICAgIHZvaWQgb25DdXN0b21Db21tYW5kKGZpbmFsIFNlc3Npb25Db21tYW5kMiBjb21tYW5kLCBmaW5hbCBCdW5kbGUgYXJncywKLSAgICAgICAgICAgIGZpbmFsIFJlc3VsdFJlY2VpdmVyIHJlY2VpdmVyKSB7Ci0gICAgICAgIGlmIChERUJVRykgewotICAgICAgICAgICAgTG9nLmQoVEFHLCAib25DdXN0b21Db21tYW5kIGNtZD0iICsgY29tbWFuZCk7Ci0gICAgICAgIH0KLSAgICAgICAgbUNhbGxiYWNrRXhlY3V0b3IuZXhlY3V0ZSgoKSAtPiB7Ci0gICAgICAgICAgICAvLyBUT0RPKGphZXdhbik6IERvdWJsZSBjaGVjayBpZiB0aGUgY29udHJvbGxlciBleGlzdHMuCi0gICAgICAgICAgICBtQ2FsbGJhY2sub25DdXN0b21Db21tYW5kKG1JbnN0YW5jZSwgY29tbWFuZCwgYXJncywgcmVjZWl2ZXIpOwotICAgICAgICB9KTsKLSAgICB9Ci0KLSAgICB2b2lkIG9uQWxsb3dlZENvbW1hbmRzQ2hhbmdlZChmaW5hbCBTZXNzaW9uQ29tbWFuZEdyb3VwMiBjb21tYW5kcykgewotICAgICAgICBtQ2FsbGJhY2tFeGVjdXRvci5leGVjdXRlKCgpIC0+IHsKLSAgICAgICAgICAgIG1DYWxsYmFjay5vbkFsbG93ZWRDb21tYW5kc0NoYW5nZWQobUluc3RhbmNlLCBjb21tYW5kcyk7Ci0gICAgICAgIH0pOwotICAgIH0KLQotICAgIHZvaWQgb25DdXN0b21MYXlvdXRDaGFuZ2VkKGZpbmFsIExpc3Q8Q29tbWFuZEJ1dHRvbj4gbGF5b3V0KSB7Ci0gICAgICAgIG1DYWxsYmFja0V4ZWN1dG9yLmV4ZWN1dGUoKCkgLT4gewotICAgICAgICAgICAgbUNhbGxiYWNrLm9uQ3VzdG9tTGF5b3V0Q2hhbmdlZChtSW5zdGFuY2UsIGxheW91dCk7Ci0gICAgICAgIH0pOwotICAgIH0KLQotICAgIC8vIFRoaXMgd2lsbCBiZSBjYWxsZWQgb24gdGhlIG1haW4gdGhyZWFkLgotICAgIHByaXZhdGUgY2xhc3MgU2Vzc2lvblNlcnZpY2VDb25uZWN0aW9uIGltcGxlbWVudHMgU2VydmljZUNvbm5lY3Rpb24gewotICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgcHVibGljIHZvaWQgb25TZXJ2aWNlQ29ubmVjdGVkKENvbXBvbmVudE5hbWUgbmFtZSwgSUJpbmRlciBzZXJ2aWNlKSB7Ci0gICAgICAgICAgICAvLyBOb3RlIHRoYXQgaXQncyBhbHdheXMgbWFpbi10aHJlYWQuCi0gICAgICAgICAgICBpZiAoREVCVUcpIHsKLSAgICAgICAgICAgICAgICBMb2cuZChUQUcsICJvblNlcnZpY2VDb25uZWN0ZWQgIiArIG5hbWUgKyAiICIgKyB0aGlzKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIC8vIFNhbml0eSBjaGVjawotICAgICAgICAgICAgaWYgKCFtVG9rZW4uZ2V0UGFja2FnZU5hbWUoKS5lcXVhbHMobmFtZS5nZXRQYWNrYWdlTmFtZSgpKSkgewotICAgICAgICAgICAgICAgIExvZy53dGYoVEFHLCBuYW1lICsgIiB3YXMgY29ubmVjdGVkLCBidXQgZXhwZWN0ZWQgcGtnPSIKLSAgICAgICAgICAgICAgICAgICAgICAgICsgbVRva2VuLmdldFBhY2thZ2VOYW1lKCkgKyAiIHdpdGggaWQ9IiArIG1Ub2tlbi5nZXRJZCgpKTsKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBmaW5hbCBJTWVkaWFTZXNzaW9uMiBzZXNzaW9uQmluZGVyID0gSU1lZGlhU2Vzc2lvbjIuU3R1Yi5hc0ludGVyZmFjZShzZXJ2aWNlKTsKLSAgICAgICAgICAgIGNvbm5lY3RUb1Nlc3Npb24oc2Vzc2lvbkJpbmRlcik7Ci0gICAgICAgIH0KLQotICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgcHVibGljIHZvaWQgb25TZXJ2aWNlRGlzY29ubmVjdGVkKENvbXBvbmVudE5hbWUgbmFtZSkgewotICAgICAgICAgICAgLy8gVGVtcG9yYWwgbG9zZSBvZiB0aGUgYmluZGluZyBiZWNhdXNlIG9mIHRoZSBzZXJ2aWNlIGNyYXNoLiBTeXN0ZW0gd2lsbCBhdXRvbWF0aWNhbGx5Ci0gICAgICAgICAgICAvLyByZWJpbmQsIHNvIGp1c3Qgbm8tb3AuCi0gICAgICAgICAgICAvLyBUT0RPKGphZXdhbik6IFJlYWxseT8gRWl0aGVyIGRpc2Nvbm5lY3QgY2xlYW5seSBvcgotICAgICAgICAgICAgaWYgKERFQlVHKSB7Ci0gICAgICAgICAgICAgICAgTG9nLncoVEFHLCAiU2Vzc2lvbiBzZXJ2aWNlICIgKyBuYW1lICsgIiBpcyBkaXNjb25uZWN0ZWQuIik7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgcHVibGljIHZvaWQgb25CaW5kaW5nRGllZChDb21wb25lbnROYW1lIG5hbWUpIHsKLSAgICAgICAgICAgIC8vIFBlcm1hbmVudCBsb3NlIG9mIHRoZSBiaW5kaW5nIGJlY2F1c2Ugb2YgdGhlIHNlcnZpY2UgcGFja2FnZSB1cGRhdGUgb3IgcmVtb3ZlZC4KLSAgICAgICAgICAgIC8vIFRoaXMgU2Vzc2lvblNlcnZpY2VSZWNvcmQgd2lsbCBiZSByZW1vdmVkIGFjY29yZGluZ2x5LCBidXQgZm9yZ2V0IHNlc3Npb24gYmluZGVyIGhlcmUKLSAgICAgICAgICAgIC8vIGZvciBzdXJlLgotICAgICAgICAgICAgbUluc3RhbmNlLmNsb3NlKCk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGNsYXNzIFBsYXliYWNrSW5mb0ltcGwgaW1wbGVtZW50cyBQbGF5YmFja0luZm9Qcm92aWRlciB7Ci0KLSAgICAgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIEtFWV9QTEFZQkFDS19UWVBFID0KLSAgICAgICAgICAgICAgICAiYW5kcm9pZC5tZWRpYS5wbGF5YmFja2luZm9faW1wbC5wbGF5YmFja190eXBlIjsKLSAgICAgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIEtFWV9DT05UUk9MX1RZUEUgPQotICAgICAgICAgICAgICAgICJhbmRyb2lkLm1lZGlhLnBsYXliYWNraW5mb19pbXBsLmNvbnRyb2xfdHlwZSI7Ci0gICAgICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBLRVlfTUFYX1ZPTFVNRSA9Ci0gICAgICAgICAgICAgICAgImFuZHJvaWQubWVkaWEucGxheWJhY2tpbmZvX2ltcGwubWF4X3ZvbHVtZSI7Ci0gICAgICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBLRVlfQ1VSUkVOVF9WT0xVTUUgPQotICAgICAgICAgICAgICAgICJhbmRyb2lkLm1lZGlhLnBsYXliYWNraW5mb19pbXBsLmN1cnJlbnRfdm9sdW1lIjsKLSAgICAgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIEtFWV9BVURJT19BVFRSSUJVVEVTID0KLSAgICAgICAgICAgICAgICAiYW5kcm9pZC5tZWRpYS5wbGF5YmFja2luZm9faW1wbC5hdWRpb19hdHRycyI7Ci0KLSAgICAgICAgcHJpdmF0ZSBmaW5hbCBQbGF5YmFja0luZm8gbUluc3RhbmNlOwotCi0gICAgICAgIHByaXZhdGUgZmluYWwgaW50IG1QbGF5YmFja1R5cGU7Ci0gICAgICAgIHByaXZhdGUgZmluYWwgaW50IG1Db250cm9sVHlwZTsKLSAgICAgICAgcHJpdmF0ZSBmaW5hbCBpbnQgbU1heFZvbHVtZTsKLSAgICAgICAgcHJpdmF0ZSBmaW5hbCBpbnQgbUN1cnJlbnRWb2x1bWU7Ci0gICAgICAgIHByaXZhdGUgZmluYWwgQXVkaW9BdHRyaWJ1dGVzIG1BdWRpb0F0dHJzOwotCi0gICAgICAgIHByaXZhdGUgUGxheWJhY2tJbmZvSW1wbChpbnQgcGxheWJhY2tUeXBlLCBBdWRpb0F0dHJpYnV0ZXMgYXR0cnMsIGludCBjb250cm9sVHlwZSwKLSAgICAgICAgICAgICAgICBpbnQgbWF4LCBpbnQgY3VycmVudCkgewotICAgICAgICAgICAgbVBsYXliYWNrVHlwZSA9IHBsYXliYWNrVHlwZTsKLSAgICAgICAgICAgIG1BdWRpb0F0dHJzID0gYXR0cnM7Ci0gICAgICAgICAgICBtQ29udHJvbFR5cGUgPSBjb250cm9sVHlwZTsKLSAgICAgICAgICAgIG1NYXhWb2x1bWUgPSBtYXg7Ci0gICAgICAgICAgICBtQ3VycmVudFZvbHVtZSA9IGN1cnJlbnQ7Ci0gICAgICAgICAgICBtSW5zdGFuY2UgPSBuZXcgUGxheWJhY2tJbmZvKHRoaXMpOwotICAgICAgICB9Ci0KLSAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgIHB1YmxpYyBpbnQgZ2V0UGxheWJhY2tUeXBlX2ltcGwoKSB7Ci0gICAgICAgICAgICByZXR1cm4gbVBsYXliYWNrVHlwZTsKLSAgICAgICAgfQotCi0gICAgICAgIEBPdmVycmlkZQotICAgICAgICBwdWJsaWMgQXVkaW9BdHRyaWJ1dGVzIGdldEF1ZGlvQXR0cmlidXRlc19pbXBsKCkgewotICAgICAgICAgICAgcmV0dXJuIG1BdWRpb0F0dHJzOwotICAgICAgICB9Ci0KLSAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgIHB1YmxpYyBpbnQgZ2V0Q29udHJvbFR5cGVfaW1wbCgpIHsKLSAgICAgICAgICAgIHJldHVybiBtQ29udHJvbFR5cGU7Ci0gICAgICAgIH0KLQotICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgcHVibGljIGludCBnZXRNYXhWb2x1bWVfaW1wbCgpIHsKLSAgICAgICAgICAgIHJldHVybiBtTWF4Vm9sdW1lOwotICAgICAgICB9Ci0KLSAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgIHB1YmxpYyBpbnQgZ2V0Q3VycmVudFZvbHVtZV9pbXBsKCkgewotICAgICAgICAgICAgcmV0dXJuIG1DdXJyZW50Vm9sdW1lOwotICAgICAgICB9Ci0KLSAgICAgICAgUGxheWJhY2tJbmZvIGdldEluc3RhbmNlKCkgewotICAgICAgICAgICAgcmV0dXJuIG1JbnN0YW5jZTsKLSAgICAgICAgfQotCi0gICAgICAgIEJ1bmRsZSB0b0J1bmRsZSgpIHsKLSAgICAgICAgICAgIEJ1bmRsZSBidW5kbGUgPSBuZXcgQnVuZGxlKCk7Ci0gICAgICAgICAgICBidW5kbGUucHV0SW50KEtFWV9QTEFZQkFDS19UWVBFLCBtUGxheWJhY2tUeXBlKTsKLSAgICAgICAgICAgIGJ1bmRsZS5wdXRJbnQoS0VZX0NPTlRST0xfVFlQRSwgbUNvbnRyb2xUeXBlKTsKLSAgICAgICAgICAgIGJ1bmRsZS5wdXRJbnQoS0VZX01BWF9WT0xVTUUsIG1NYXhWb2x1bWUpOwotICAgICAgICAgICAgYnVuZGxlLnB1dEludChLRVlfQ1VSUkVOVF9WT0xVTUUsIG1DdXJyZW50Vm9sdW1lKTsKLSAgICAgICAgICAgIGJ1bmRsZS5wdXRQYXJjZWxhYmxlKEtFWV9BVURJT19BVFRSSUJVVEVTLCBtQXVkaW9BdHRycyk7Ci0gICAgICAgICAgICByZXR1cm4gYnVuZGxlOwotICAgICAgICB9Ci0KLSAgICAgICAgc3RhdGljIFBsYXliYWNrSW5mbyBjcmVhdGVQbGF5YmFja0luZm8oaW50IHBsYXliYWNrVHlwZSwgQXVkaW9BdHRyaWJ1dGVzIGF0dHJzLAotICAgICAgICAgICAgICAgIGludCBjb250cm9sVHlwZSwgaW50IG1heCwgaW50IGN1cnJlbnQpIHsKLSAgICAgICAgICAgIHJldHVybiBuZXcgUGxheWJhY2tJbmZvSW1wbChwbGF5YmFja1R5cGUsIGF0dHJzLCBjb250cm9sVHlwZSwgbWF4LCBjdXJyZW50KQotICAgICAgICAgICAgICAgICAgICAuZ2V0SW5zdGFuY2UoKTsKLSAgICAgICAgfQotCi0gICAgICAgIHN0YXRpYyBQbGF5YmFja0luZm8gZnJvbUJ1bmRsZShCdW5kbGUgYnVuZGxlKSB7Ci0gICAgICAgICAgICBpZiAoYnVuZGxlID09IG51bGwpIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGZpbmFsIGludCB2b2x1bWVUeXBlID0gYnVuZGxlLmdldEludChLRVlfUExBWUJBQ0tfVFlQRSk7Ci0gICAgICAgICAgICBmaW5hbCBpbnQgdm9sdW1lQ29udHJvbCA9IGJ1bmRsZS5nZXRJbnQoS0VZX0NPTlRST0xfVFlQRSk7Ci0gICAgICAgICAgICBmaW5hbCBpbnQgbWF4Vm9sdW1lID0gYnVuZGxlLmdldEludChLRVlfTUFYX1ZPTFVNRSk7Ci0gICAgICAgICAgICBmaW5hbCBpbnQgY3VycmVudFZvbHVtZSA9IGJ1bmRsZS5nZXRJbnQoS0VZX0NVUlJFTlRfVk9MVU1FKTsKLSAgICAgICAgICAgIGZpbmFsIEF1ZGlvQXR0cmlidXRlcyBhdHRycyA9IGJ1bmRsZS5nZXRQYXJjZWxhYmxlKEtFWV9BVURJT19BVFRSSUJVVEVTKTsKLQotICAgICAgICAgICAgcmV0dXJuIGNyZWF0ZVBsYXliYWNrSW5mbyh2b2x1bWVUeXBlLCBhdHRycywgdm9sdW1lQ29udHJvbCwgbWF4Vm9sdW1lLCBjdXJyZW50Vm9sdW1lKTsKLSAgICAgICAgfQotICAgIH0KLX0KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL01lZGlhQ29tcG9uZW50cy9zcmMvY29tL2FuZHJvaWQvbWVkaWEvTWVkaWFDb250cm9sbGVyMlN0dWIuamF2YSBiL3BhY2thZ2VzL01lZGlhQ29tcG9uZW50cy9zcmMvY29tL2FuZHJvaWQvbWVkaWEvTWVkaWFDb250cm9sbGVyMlN0dWIuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMmNmYzVkZi4uMDAwMDAwMAotLS0gYS9wYWNrYWdlcy9NZWRpYUNvbXBvbmVudHMvc3JjL2NvbS9hbmRyb2lkL21lZGlhL01lZGlhQ29udHJvbGxlcjJTdHViLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw0NzAgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAyMDE4IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKLSAqCi0gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKLSAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KLSAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotICoKLSAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0gKgotICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQotICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKLSAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgotICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAotICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCi0gKi8KLQotcGFja2FnZSBjb20uYW5kcm9pZC5tZWRpYTsKLQotaW1wb3J0IGFuZHJvaWQuYXBwLlBlbmRpbmdJbnRlbnQ7Ci1pbXBvcnQgYW5kcm9pZC5jb250ZW50LkNvbnRleHQ7Ci1pbXBvcnQgYW5kcm9pZC5tZWRpYS5NZWRpYUNvbnRyb2xsZXIyOwotaW1wb3J0IGFuZHJvaWQubWVkaWEuTWVkaWFJdGVtMjsKLWltcG9ydCBhbmRyb2lkLm1lZGlhLk1lZGlhTWV0YWRhdGEyOwotaW1wb3J0IGFuZHJvaWQubWVkaWEuU2Vzc2lvbkNvbW1hbmQyOwotaW1wb3J0IGFuZHJvaWQubWVkaWEuTWVkaWFTZXNzaW9uMi5Db21tYW5kQnV0dG9uOwotaW1wb3J0IGFuZHJvaWQubWVkaWEuU2Vzc2lvbkNvbW1hbmRHcm91cDI7Ci1pbXBvcnQgYW5kcm9pZC5vcy5CdW5kbGU7Ci1pbXBvcnQgYW5kcm9pZC5vcy5SZXN1bHRSZWNlaXZlcjsKLWltcG9ydCBhbmRyb2lkLnRleHQuVGV4dFV0aWxzOwotaW1wb3J0IGFuZHJvaWQudXRpbC5Mb2c7Ci0KLWltcG9ydCBjb20uYW5kcm9pZC5tZWRpYS5NZWRpYUNvbnRyb2xsZXIySW1wbC5QbGF5YmFja0luZm9JbXBsOwotaW1wb3J0IGNvbS5hbmRyb2lkLm1lZGlhLk1lZGlhU2Vzc2lvbjJJbXBsLkNvbW1hbmRCdXR0b25JbXBsOwotCi1pbXBvcnQgamF2YS5sYW5nLnJlZi5XZWFrUmVmZXJlbmNlOwotaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci0KLXB1YmxpYyBjbGFzcyBNZWRpYUNvbnRyb2xsZXIyU3R1YiBleHRlbmRzIElNZWRpYUNvbnRyb2xsZXIyLlN0dWIgewotICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBUQUcgPSAiTWVkaWFDb250cm9sbGVyMlN0dWIiOwotICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGJvb2xlYW4gREVCVUcgPSB0cnVlOyAvLyBUT0RPKGphZXdhbik6IENoYW5nZQotCi0gICAgcHJpdmF0ZSBmaW5hbCBXZWFrUmVmZXJlbmNlPE1lZGlhQ29udHJvbGxlcjJJbXBsPiBtQ29udHJvbGxlcjsKLQotICAgIE1lZGlhQ29udHJvbGxlcjJTdHViKE1lZGlhQ29udHJvbGxlcjJJbXBsIGNvbnRyb2xsZXIpIHsKLSAgICAgICAgbUNvbnRyb2xsZXIgPSBuZXcgV2Vha1JlZmVyZW5jZTw+KGNvbnRyb2xsZXIpOwotICAgIH0KLQotICAgIHByaXZhdGUgTWVkaWFDb250cm9sbGVyMkltcGwgZ2V0Q29udHJvbGxlcigpIHRocm93cyBJbGxlZ2FsU3RhdGVFeGNlcHRpb24gewotICAgICAgICBmaW5hbCBNZWRpYUNvbnRyb2xsZXIySW1wbCBjb250cm9sbGVyID0gbUNvbnRyb2xsZXIuZ2V0KCk7Ci0gICAgICAgIGlmIChjb250cm9sbGVyID09IG51bGwpIHsKLSAgICAgICAgICAgIHRocm93IG5ldyBJbGxlZ2FsU3RhdGVFeGNlcHRpb24oIkNvbnRyb2xsZXIgaXMgcmVsZWFzZWQiKTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gY29udHJvbGxlcjsKLSAgICB9Ci0KLSAgICBwcml2YXRlIE1lZGlhQnJvd3NlcjJJbXBsIGdldEJyb3dzZXIoKSB0aHJvd3MgSWxsZWdhbFN0YXRlRXhjZXB0aW9uIHsKLSAgICAgICAgZmluYWwgTWVkaWFDb250cm9sbGVyMkltcGwgY29udHJvbGxlciA9IGdldENvbnRyb2xsZXIoKTsKLSAgICAgICAgaWYgKGNvbnRyb2xsZXIgaW5zdGFuY2VvZiBNZWRpYUJyb3dzZXIySW1wbCkgewotICAgICAgICAgICAgcmV0dXJuIChNZWRpYUJyb3dzZXIySW1wbCkgY29udHJvbGxlcjsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gbnVsbDsKLSAgICB9Ci0KLSAgICBwdWJsaWMgdm9pZCBkZXN0cm95KCkgewotICAgICAgICBtQ29udHJvbGxlci5jbGVhcigpOwotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyB2b2lkIG9uUGxheWVyU3RhdGVDaGFuZ2VkKGludCBzdGF0ZSkgewotICAgICAgICBmaW5hbCBNZWRpYUNvbnRyb2xsZXIySW1wbCBjb250cm9sbGVyOwotICAgICAgICB0cnkgewotICAgICAgICAgICAgY29udHJvbGxlciA9IGdldENvbnRyb2xsZXIoKTsKLSAgICAgICAgfSBjYXRjaCAoSWxsZWdhbFN0YXRlRXhjZXB0aW9uIGUpIHsKLSAgICAgICAgICAgIExvZy53KFRBRywgIkRvbid0IGZhaWwgc2lsZW50bHkgaGVyZS4gSGlnaGx5IGxpa2VseSBhIGJ1ZyIpOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgICAgIGNvbnRyb2xsZXIucHVzaFBsYXllclN0YXRlQ2hhbmdlcyhzdGF0ZSk7Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIHZvaWQgb25Qb3NpdGlvbkNoYW5nZWQobG9uZyBldmVudFRpbWVNcywgbG9uZyBwb3NpdGlvbk1zKSB7Ci0gICAgICAgIGZpbmFsIE1lZGlhQ29udHJvbGxlcjJJbXBsIGNvbnRyb2xsZXI7Ci0gICAgICAgIHRyeSB7Ci0gICAgICAgICAgICBjb250cm9sbGVyID0gZ2V0Q29udHJvbGxlcigpOwotICAgICAgICB9IGNhdGNoIChJbGxlZ2FsU3RhdGVFeGNlcHRpb24gZSkgewotICAgICAgICAgICAgTG9nLncoVEFHLCAiRG9uJ3QgZmFpbCBzaWxlbnRseSBoZXJlLiBIaWdobHkgbGlrZWx5IGEgYnVnIik7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKGV2ZW50VGltZU1zIDwgMCkgewotICAgICAgICAgICAgTG9nLncoVEFHLCAib25Qb3NpdGlvbkNoYW5nZWQoKTogSWdub3JpbmcgbmVnYXRpdmUgZXZlbnRUaW1lTXMiKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAgICAgICBpZiAocG9zaXRpb25NcyA8IDApIHsKLSAgICAgICAgICAgIExvZy53KFRBRywgIm9uUG9zaXRpb25DaGFuZ2VkKCk6IElnbm9yaW5nIG5lZ2F0aXZlIHBvc2l0aW9uTXMiKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAgICAgICBjb250cm9sbGVyLnB1c2hQb3NpdGlvbkNoYW5nZXMoZXZlbnRUaW1lTXMsIHBvc2l0aW9uTXMpOwotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyB2b2lkIG9uUGxheWJhY2tTcGVlZENoYW5nZWQoZmxvYXQgc3BlZWQpIHsKLSAgICAgICAgZmluYWwgTWVkaWFDb250cm9sbGVyMkltcGwgY29udHJvbGxlcjsKLSAgICAgICAgdHJ5IHsKLSAgICAgICAgICAgIGNvbnRyb2xsZXIgPSBnZXRDb250cm9sbGVyKCk7Ci0gICAgICAgIH0gY2F0Y2ggKElsbGVnYWxTdGF0ZUV4Y2VwdGlvbiBlKSB7Ci0gICAgICAgICAgICBMb2cudyhUQUcsICJEb24ndCBmYWlsIHNpbGVudGx5IGhlcmUuIEhpZ2hseSBsaWtlbHkgYSBidWciKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAgICAgICBjb250cm9sbGVyLnB1c2hQbGF5YmFja1NwZWVkQ2hhbmdlcyhzcGVlZCk7Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIHZvaWQgb25CdWZmZXJlZFBvc2l0aW9uQ2hhbmdlZChsb25nIGJ1ZmZlcmVkUG9zaXRpb25NcykgewotICAgICAgICBmaW5hbCBNZWRpYUNvbnRyb2xsZXIySW1wbCBjb250cm9sbGVyOwotICAgICAgICB0cnkgewotICAgICAgICAgICAgY29udHJvbGxlciA9IGdldENvbnRyb2xsZXIoKTsKLSAgICAgICAgfSBjYXRjaCAoSWxsZWdhbFN0YXRlRXhjZXB0aW9uIGUpIHsKLSAgICAgICAgICAgIExvZy53KFRBRywgIkRvbid0IGZhaWwgc2lsZW50bHkgaGVyZS4gSGlnaGx5IGxpa2VseSBhIGJ1ZyIpOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgICAgIGlmIChidWZmZXJlZFBvc2l0aW9uTXMgPCAwKSB7Ci0gICAgICAgICAgICBMb2cudyhUQUcsICJvbkJ1ZmZlcmVkUG9zaXRpb25DaGFuZ2VkKCk6IElnbm9yaW5nIG5lZ2F0aXZlIGJ1ZmZlcmVkUG9zaXRpb25NcyIpOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgICAgIGNvbnRyb2xsZXIucHVzaEJ1ZmZlcmVkUG9zaXRpb25DaGFuZ2VzKGJ1ZmZlcmVkUG9zaXRpb25Ncyk7Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIHZvaWQgb25QbGF5bGlzdENoYW5nZWQoTGlzdDxCdW5kbGU+IHBsYXlsaXN0QnVuZGxlLCBCdW5kbGUgbWV0YWRhdGFCdW5kbGUpIHsKLSAgICAgICAgZmluYWwgTWVkaWFDb250cm9sbGVyMkltcGwgY29udHJvbGxlcjsKLSAgICAgICAgdHJ5IHsKLSAgICAgICAgICAgIGNvbnRyb2xsZXIgPSBnZXRDb250cm9sbGVyKCk7Ci0gICAgICAgIH0gY2F0Y2ggKElsbGVnYWxTdGF0ZUV4Y2VwdGlvbiBlKSB7Ci0gICAgICAgICAgICBMb2cudyhUQUcsICJEb24ndCBmYWlsIHNpbGVudGx5IGhlcmUuIEhpZ2hseSBsaWtlbHkgYSBidWciKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAgICAgICBpZiAocGxheWxpc3RCdW5kbGUgPT0gbnVsbCkgewotICAgICAgICAgICAgTG9nLncoVEFHLCAib25QbGF5bGlzdENoYW5nZWQoKTogSWdub3JpbmcgbnVsbCBwbGF5bGlzdCBmcm9tICIgKyBjb250cm9sbGVyKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAgICAgICBMaXN0PE1lZGlhSXRlbTI+IHBsYXlsaXN0ID0gbmV3IEFycmF5TGlzdDw+KCk7Ci0gICAgICAgIGZvciAoQnVuZGxlIGJ1bmRsZSA6IHBsYXlsaXN0QnVuZGxlKSB7Ci0gICAgICAgICAgICBNZWRpYUl0ZW0yIGl0ZW0gPSBNZWRpYUl0ZW0yLmZyb21CdW5kbGUoYnVuZGxlKTsKLSAgICAgICAgICAgIGlmIChpdGVtID09IG51bGwpIHsKLSAgICAgICAgICAgICAgICBMb2cudyhUQUcsICJvblBsYXlsaXN0Q2hhbmdlZCgpOiBJZ25vcmluZyBudWxsIGl0ZW0gaW4gcGxheWxpc3QiKTsKLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgcGxheWxpc3QuYWRkKGl0ZW0pOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIE1lZGlhTWV0YWRhdGEyIG1ldGFkYXRhID0gTWVkaWFNZXRhZGF0YTIuZnJvbUJ1bmRsZShtZXRhZGF0YUJ1bmRsZSk7Ci0gICAgICAgIGNvbnRyb2xsZXIucHVzaFBsYXlsaXN0Q2hhbmdlcyhwbGF5bGlzdCwgbWV0YWRhdGEpOwotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyB2b2lkIG9uUGxheWxpc3RNZXRhZGF0YUNoYW5nZWQoQnVuZGxlIG1ldGFkYXRhQnVuZGxlKSB0aHJvd3MgUnVudGltZUV4Y2VwdGlvbiB7Ci0gICAgICAgIGZpbmFsIE1lZGlhQ29udHJvbGxlcjJJbXBsIGNvbnRyb2xsZXI7Ci0gICAgICAgIHRyeSB7Ci0gICAgICAgICAgICBjb250cm9sbGVyID0gZ2V0Q29udHJvbGxlcigpOwotICAgICAgICB9IGNhdGNoIChJbGxlZ2FsU3RhdGVFeGNlcHRpb24gZSkgewotICAgICAgICAgICAgTG9nLncoVEFHLCAiRG9uJ3QgZmFpbCBzaWxlbnRseSBoZXJlLiBIaWdobHkgbGlrZWx5IGEgYnVnIik7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICAgICAgTWVkaWFNZXRhZGF0YTIgbWV0YWRhdGEgPSBNZWRpYU1ldGFkYXRhMi5mcm9tQnVuZGxlKG1ldGFkYXRhQnVuZGxlKTsKLSAgICAgICAgY29udHJvbGxlci5wdXNoUGxheWxpc3RNZXRhZGF0YUNoYW5nZXMobWV0YWRhdGEpOwotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyB2b2lkIG9uUmVwZWF0TW9kZUNoYW5nZWQoaW50IHJlcGVhdE1vZGUpIHsKLSAgICAgICAgZmluYWwgTWVkaWFDb250cm9sbGVyMkltcGwgY29udHJvbGxlcjsKLSAgICAgICAgdHJ5IHsKLSAgICAgICAgICAgIGNvbnRyb2xsZXIgPSBnZXRDb250cm9sbGVyKCk7Ci0gICAgICAgIH0gY2F0Y2ggKElsbGVnYWxTdGF0ZUV4Y2VwdGlvbiBlKSB7Ci0gICAgICAgICAgICBMb2cudyhUQUcsICJEb24ndCBmYWlsIHNpbGVudGx5IGhlcmUuIEhpZ2hseSBsaWtlbHkgYSBidWciKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAgICAgICBjb250cm9sbGVyLnB1c2hSZXBlYXRNb2RlQ2hhbmdlcyhyZXBlYXRNb2RlKTsKLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgdm9pZCBvblBsYXliYWNrSW5mb0NoYW5nZWQoQnVuZGxlIHBsYXliYWNrSW5mbykgdGhyb3dzIFJ1bnRpbWVFeGNlcHRpb24gewotICAgICAgICBpZiAoREVCVUcpIHsKLSAgICAgICAgICAgIExvZy5kKFRBRywgIm9uUGxheWJhY2tJbmZvQ2hhbmdlZCIpOwotICAgICAgICB9Ci0gICAgICAgIGZpbmFsIE1lZGlhQ29udHJvbGxlcjJJbXBsIGNvbnRyb2xsZXI7Ci0gICAgICAgIHRyeSB7Ci0gICAgICAgICAgICBjb250cm9sbGVyID0gZ2V0Q29udHJvbGxlcigpOwotICAgICAgICB9IGNhdGNoIChJbGxlZ2FsU3RhdGVFeGNlcHRpb24gZSkgewotICAgICAgICAgICAgTG9nLncoVEFHLCAiRG9uJ3QgZmFpbCBzaWxlbnRseSBoZXJlLiBIaWdobHkgbGlrZWx5IGEgYnVnIik7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICAgICAgTWVkaWFDb250cm9sbGVyMi5QbGF5YmFja0luZm8gaW5mbyA9IFBsYXliYWNrSW5mb0ltcGwuZnJvbUJ1bmRsZShwbGF5YmFja0luZm8pOwotICAgICAgICBpZiAoaW5mbyA9PSBudWxsKSB7Ci0gICAgICAgICAgICBMb2cudyhUQUcsICJvblBsYXliYWNrSW5mb0NoYW5nZWQoKTogSWdub3JpbmcgbnVsbCBwbGF5YmFja0luZm8iKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAgICAgICBjb250cm9sbGVyLnB1c2hQbGF5YmFja0luZm9DaGFuZ2VzKGluZm8pOwotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyB2b2lkIG9uU2h1ZmZsZU1vZGVDaGFuZ2VkKGludCBzaHVmZmxlTW9kZSkgewotICAgICAgICBmaW5hbCBNZWRpYUNvbnRyb2xsZXIySW1wbCBjb250cm9sbGVyOwotICAgICAgICB0cnkgewotICAgICAgICAgICAgY29udHJvbGxlciA9IGdldENvbnRyb2xsZXIoKTsKLSAgICAgICAgfSBjYXRjaCAoSWxsZWdhbFN0YXRlRXhjZXB0aW9uIGUpIHsKLSAgICAgICAgICAgIExvZy53KFRBRywgIkRvbid0IGZhaWwgc2lsZW50bHkgaGVyZS4gSGlnaGx5IGxpa2VseSBhIGJ1ZyIpOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgICAgIGNvbnRyb2xsZXIucHVzaFNodWZmbGVNb2RlQ2hhbmdlcyhzaHVmZmxlTW9kZSk7Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIHZvaWQgb25FcnJvcihpbnQgZXJyb3JDb2RlLCBCdW5kbGUgZXh0cmFzKSB7Ci0gICAgICAgIGZpbmFsIE1lZGlhQ29udHJvbGxlcjJJbXBsIGNvbnRyb2xsZXI7Ci0gICAgICAgIHRyeSB7Ci0gICAgICAgICAgICBjb250cm9sbGVyID0gZ2V0Q29udHJvbGxlcigpOwotICAgICAgICB9IGNhdGNoIChJbGxlZ2FsU3RhdGVFeGNlcHRpb24gZSkgewotICAgICAgICAgICAgTG9nLncoVEFHLCAiRG9uJ3QgZmFpbCBzaWxlbnRseSBoZXJlLiBIaWdobHkgbGlrZWx5IGEgYnVnIik7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICAgICAgY29udHJvbGxlci5wdXNoRXJyb3IoZXJyb3JDb2RlLCBleHRyYXMpOwotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyB2b2lkIG9uQ29ubmVjdGVkKElNZWRpYVNlc3Npb24yIHNlc3Npb25CaW5kZXIsIEJ1bmRsZSBjb21tYW5kR3JvdXAsCi0gICAgICAgICAgICBpbnQgcGxheWVyU3RhdGUsIGxvbmcgcG9zaXRpb25FdmVudFRpbWVNcywgbG9uZyBwb3NpdGlvbk1zLCBmbG9hdCBwbGF5YmFja1NwZWVkLAotICAgICAgICAgICAgbG9uZyBidWZmZXJlZFBvc2l0aW9uTXMsIEJ1bmRsZSBwbGF5YmFja0luZm8sIGludCBzaHVmZmxlTW9kZSwgaW50IHJlcGVhdE1vZGUsCi0gICAgICAgICAgICBMaXN0PEJ1bmRsZT4gaXRlbUJ1bmRsZUxpc3QsIFBlbmRpbmdJbnRlbnQgc2Vzc2lvbkFjdGl2aXR5KSB7Ci0gICAgICAgIGZpbmFsIE1lZGlhQ29udHJvbGxlcjJJbXBsIGNvbnRyb2xsZXIgPSBtQ29udHJvbGxlci5nZXQoKTsKLSAgICAgICAgaWYgKGNvbnRyb2xsZXIgPT0gbnVsbCkgewotICAgICAgICAgICAgaWYgKERFQlVHKSB7Ci0gICAgICAgICAgICAgICAgTG9nLmQoVEFHLCAib25Db25uZWN0ZWQgYWZ0ZXIgTWVkaWFDb250cm9sbGVyMi5jbG9zZSgpIik7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICAgICAgZmluYWwgQ29udGV4dCBjb250ZXh0ID0gY29udHJvbGxlci5nZXRDb250ZXh0KCk7Ci0gICAgICAgIExpc3Q8TWVkaWFJdGVtMj4gaXRlbUxpc3QgPSBudWxsOwotICAgICAgICBpZiAoaXRlbUJ1bmRsZUxpc3QgIT0gbnVsbCkgewotICAgICAgICAgICAgaXRlbUxpc3QgPSBuZXcgQXJyYXlMaXN0PD4oKTsKLSAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgaXRlbUJ1bmRsZUxpc3Quc2l6ZSgpOyBpKyspIHsKLSAgICAgICAgICAgICAgICBNZWRpYUl0ZW0yIGl0ZW0gPSBNZWRpYUl0ZW0yLmZyb21CdW5kbGUoaXRlbUJ1bmRsZUxpc3QuZ2V0KGkpKTsKLSAgICAgICAgICAgICAgICBpZiAoaXRlbSAhPSBudWxsKSB7Ci0gICAgICAgICAgICAgICAgICAgIGl0ZW1MaXN0LmFkZChpdGVtKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgY29udHJvbGxlci5vbkNvbm5lY3RlZE5vdExvY2tlZChzZXNzaW9uQmluZGVyLAotICAgICAgICAgICAgICAgIFNlc3Npb25Db21tYW5kR3JvdXAyLmZyb21CdW5kbGUoY29tbWFuZEdyb3VwKSwKLSAgICAgICAgICAgICAgICBwbGF5ZXJTdGF0ZSwgcG9zaXRpb25FdmVudFRpbWVNcywgcG9zaXRpb25NcywgcGxheWJhY2tTcGVlZCwgYnVmZmVyZWRQb3NpdGlvbk1zLAotICAgICAgICAgICAgICAgIFBsYXliYWNrSW5mb0ltcGwuZnJvbUJ1bmRsZShwbGF5YmFja0luZm8pLCByZXBlYXRNb2RlLCBzaHVmZmxlTW9kZSwKLSAgICAgICAgICAgICAgICBpdGVtTGlzdCwgc2Vzc2lvbkFjdGl2aXR5KTsKLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgdm9pZCBvbkRpc2Nvbm5lY3RlZCgpIHsKLSAgICAgICAgZmluYWwgTWVkaWFDb250cm9sbGVyMkltcGwgY29udHJvbGxlciA9IG1Db250cm9sbGVyLmdldCgpOwotICAgICAgICBpZiAoY29udHJvbGxlciA9PSBudWxsKSB7Ci0gICAgICAgICAgICBpZiAoREVCVUcpIHsKLSAgICAgICAgICAgICAgICBMb2cuZChUQUcsICJvbkRpc2Nvbm5lY3RlZCBhZnRlciBNZWRpYUNvbnRyb2xsZXIyLmNsb3NlKCkiKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAgICAgICBjb250cm9sbGVyLmdldEluc3RhbmNlKCkuY2xvc2UoKTsKLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgdm9pZCBvbkN1c3RvbUxheW91dENoYW5nZWQoTGlzdDxCdW5kbGU+IGNvbW1hbmRCdXR0b25saXN0KSB7Ci0gICAgICAgIGlmIChjb21tYW5kQnV0dG9ubGlzdCA9PSBudWxsKSB7Ci0gICAgICAgICAgICBMb2cudyhUQUcsICJvbkN1c3RvbUxheW91dENoYW5nZWQoKTogSWdub3JpbmcgbnVsbCBjb21tYW5kQnV0dG9ubGlzdCIpOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgICAgIGZpbmFsIE1lZGlhQ29udHJvbGxlcjJJbXBsIGNvbnRyb2xsZXI7Ci0gICAgICAgIHRyeSB7Ci0gICAgICAgICAgICBjb250cm9sbGVyID0gZ2V0Q29udHJvbGxlcigpOwotICAgICAgICB9IGNhdGNoIChJbGxlZ2FsU3RhdGVFeGNlcHRpb24gZSkgewotICAgICAgICAgICAgTG9nLncoVEFHLCAiRG9uJ3QgZmFpbCBzaWxlbnRseSBoZXJlLiBIaWdobHkgbGlrZWx5IGEgYnVnIik7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKGNvbnRyb2xsZXIgPT0gbnVsbCkgewotICAgICAgICAgICAgLy8gVE9ETyhqYWV3YW4pOiBSZXZpc2l0IGhlcmUuIENvdWxkIGJlIGEgYnVnCi0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICAgICAgTGlzdDxDb21tYW5kQnV0dG9uPiBsYXlvdXQgPSBuZXcgQXJyYXlMaXN0PD4oKTsKLSAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBjb21tYW5kQnV0dG9ubGlzdC5zaXplKCk7IGkrKykgewotICAgICAgICAgICAgQ29tbWFuZEJ1dHRvbiBidXR0b24gPSBDb21tYW5kQnV0dG9uSW1wbC5mcm9tQnVuZGxlKGNvbW1hbmRCdXR0b25saXN0LmdldChpKSk7Ci0gICAgICAgICAgICBpZiAoYnV0dG9uICE9IG51bGwpIHsKLSAgICAgICAgICAgICAgICBsYXlvdXQuYWRkKGJ1dHRvbik7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgY29udHJvbGxlci5vbkN1c3RvbUxheW91dENoYW5nZWQobGF5b3V0KTsKLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgdm9pZCBvbkFsbG93ZWRDb21tYW5kc0NoYW5nZWQoQnVuZGxlIGNvbW1hbmRzQnVuZGxlKSB7Ci0gICAgICAgIGZpbmFsIE1lZGlhQ29udHJvbGxlcjJJbXBsIGNvbnRyb2xsZXI7Ci0gICAgICAgIHRyeSB7Ci0gICAgICAgICAgICBjb250cm9sbGVyID0gZ2V0Q29udHJvbGxlcigpOwotICAgICAgICB9IGNhdGNoIChJbGxlZ2FsU3RhdGVFeGNlcHRpb24gZSkgewotICAgICAgICAgICAgTG9nLncoVEFHLCAiRG9uJ3QgZmFpbCBzaWxlbnRseSBoZXJlLiBIaWdobHkgbGlrZWx5IGEgYnVnIik7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKGNvbnRyb2xsZXIgPT0gbnVsbCkgewotICAgICAgICAgICAgLy8gVE9ETyhqYWV3YW4pOiBSZXZpc2l0IGhlcmUuIENvdWxkIGJlIGEgYnVnCi0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICAgICAgU2Vzc2lvbkNvbW1hbmRHcm91cDIgY29tbWFuZHMgPSBTZXNzaW9uQ29tbWFuZEdyb3VwMi5mcm9tQnVuZGxlKGNvbW1hbmRzQnVuZGxlKTsKLSAgICAgICAgaWYgKGNvbW1hbmRzID09IG51bGwpIHsKLSAgICAgICAgICAgIExvZy53KFRBRywgIm9uQWxsb3dlZENvbW1hbmRzQ2hhbmdlZCgpOiBJZ25vcmluZyBudWxsIGNvbW1hbmRzIik7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICAgICAgY29udHJvbGxlci5vbkFsbG93ZWRDb21tYW5kc0NoYW5nZWQoY29tbWFuZHMpOwotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyB2b2lkIG9uQ3VzdG9tQ29tbWFuZChCdW5kbGUgY29tbWFuZEJ1bmRsZSwgQnVuZGxlIGFyZ3MsIFJlc3VsdFJlY2VpdmVyIHJlY2VpdmVyKSB7Ci0gICAgICAgIGZpbmFsIE1lZGlhQ29udHJvbGxlcjJJbXBsIGNvbnRyb2xsZXI7Ci0gICAgICAgIHRyeSB7Ci0gICAgICAgICAgICBjb250cm9sbGVyID0gZ2V0Q29udHJvbGxlcigpOwotICAgICAgICB9IGNhdGNoIChJbGxlZ2FsU3RhdGVFeGNlcHRpb24gZSkgewotICAgICAgICAgICAgTG9nLncoVEFHLCAiRG9uJ3QgZmFpbCBzaWxlbnRseSBoZXJlLiBIaWdobHkgbGlrZWx5IGEgYnVnIik7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICAgICAgU2Vzc2lvbkNvbW1hbmQyIGNvbW1hbmQgPSBTZXNzaW9uQ29tbWFuZDIuZnJvbUJ1bmRsZShjb21tYW5kQnVuZGxlKTsKLSAgICAgICAgaWYgKGNvbW1hbmQgPT0gbnVsbCkgewotICAgICAgICAgICAgTG9nLncoVEFHLCAib25DdXN0b21Db21tYW5kKCk6IElnbm9yaW5nIG51bGwgY29tbWFuZCIpOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgICAgIGNvbnRyb2xsZXIub25DdXN0b21Db21tYW5kKGNvbW1hbmQsIGFyZ3MsIHJlY2VpdmVyKTsKLSAgICB9Ci0KLSAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLwotICAgIC8vIE1lZGlhQnJvd3NlciBzcGVjaWZpYwotICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIHZvaWQgb25HZXRMaWJyYXJ5Um9vdERvbmUoQnVuZGxlIHJvb3RIaW50cywgU3RyaW5nIHJvb3RNZWRpYUlkLCBCdW5kbGUgcm9vdEV4dHJhKQotICAgICAgICAgICAgdGhyb3dzIFJ1bnRpbWVFeGNlcHRpb24gewotICAgICAgICBmaW5hbCBNZWRpYUJyb3dzZXIySW1wbCBicm93c2VyOwotICAgICAgICB0cnkgewotICAgICAgICAgICAgYnJvd3NlciA9IGdldEJyb3dzZXIoKTsKLSAgICAgICAgfSBjYXRjaCAoSWxsZWdhbFN0YXRlRXhjZXB0aW9uIGUpIHsKLSAgICAgICAgICAgIExvZy53KFRBRywgIkRvbid0IGZhaWwgc2lsZW50bHkgaGVyZS4gSGlnaGx5IGxpa2VseSBhIGJ1ZyIpOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgICAgIGlmIChicm93c2VyID09IG51bGwpIHsKLSAgICAgICAgICAgIC8vIFRPRE8oamFld2FuKTogUmV2aXNpdCBoZXJlLiBDb3VsZCBiZSBhIGJ1ZwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgICAgIGJyb3dzZXIub25HZXRMaWJyYXJ5Um9vdERvbmUocm9vdEhpbnRzLCByb290TWVkaWFJZCwgcm9vdEV4dHJhKTsKLSAgICB9Ci0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyB2b2lkIG9uR2V0SXRlbURvbmUoU3RyaW5nIG1lZGlhSWQsIEJ1bmRsZSBpdGVtQnVuZGxlKSB0aHJvd3MgUnVudGltZUV4Y2VwdGlvbiB7Ci0gICAgICAgIGlmIChtZWRpYUlkID09IG51bGwpIHsKLSAgICAgICAgICAgIExvZy53KFRBRywgIm9uR2V0SXRlbURvbmUoKTogSWdub3JpbmcgbnVsbCBtZWRpYUlkIik7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICAgICAgZmluYWwgTWVkaWFCcm93c2VyMkltcGwgYnJvd3NlcjsKLSAgICAgICAgdHJ5IHsKLSAgICAgICAgICAgIGJyb3dzZXIgPSBnZXRCcm93c2VyKCk7Ci0gICAgICAgIH0gY2F0Y2ggKElsbGVnYWxTdGF0ZUV4Y2VwdGlvbiBlKSB7Ci0gICAgICAgICAgICBMb2cudyhUQUcsICJEb24ndCBmYWlsIHNpbGVudGx5IGhlcmUuIEhpZ2hseSBsaWtlbHkgYSBidWciKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAgICAgICBpZiAoYnJvd3NlciA9PSBudWxsKSB7Ci0gICAgICAgICAgICAvLyBUT0RPKGphZXdhbik6IFJldmlzaXQgaGVyZS4gQ291bGQgYmUgYSBidWcKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAgICAgICBicm93c2VyLm9uR2V0SXRlbURvbmUobWVkaWFJZCwgTWVkaWFJdGVtMi5mcm9tQnVuZGxlKGl0ZW1CdW5kbGUpKTsKLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgdm9pZCBvbkdldENoaWxkcmVuRG9uZShTdHJpbmcgcGFyZW50SWQsIGludCBwYWdlLCBpbnQgcGFnZVNpemUsCi0gICAgICAgICAgICBMaXN0PEJ1bmRsZT4gaXRlbUJ1bmRsZUxpc3QsIEJ1bmRsZSBleHRyYXMpIHRocm93cyBSdW50aW1lRXhjZXB0aW9uIHsKLSAgICAgICAgaWYgKHBhcmVudElkID09IG51bGwpIHsKLSAgICAgICAgICAgIExvZy53KFRBRywgIm9uR2V0Q2hpbGRyZW5Eb25lKCk6IElnbm9yaW5nIG51bGwgcGFyZW50SWQiKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAgICAgICBmaW5hbCBNZWRpYUJyb3dzZXIySW1wbCBicm93c2VyOwotICAgICAgICB0cnkgewotICAgICAgICAgICAgYnJvd3NlciA9IGdldEJyb3dzZXIoKTsKLSAgICAgICAgfSBjYXRjaCAoSWxsZWdhbFN0YXRlRXhjZXB0aW9uIGUpIHsKLSAgICAgICAgICAgIExvZy53KFRBRywgIkRvbid0IGZhaWwgc2lsZW50bHkgaGVyZS4gSGlnaGx5IGxpa2VseSBhIGJ1ZyIpOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgICAgIGlmIChicm93c2VyID09IG51bGwpIHsKLSAgICAgICAgICAgIC8vIFRPRE8oamFld2FuKTogUmV2aXNpdCBoZXJlLiBDb3VsZCBiZSBhIGJ1ZwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0KLSAgICAgICAgTGlzdDxNZWRpYUl0ZW0yPiByZXN1bHQgPSBudWxsOwotICAgICAgICBpZiAoaXRlbUJ1bmRsZUxpc3QgIT0gbnVsbCkgewotICAgICAgICAgICAgcmVzdWx0ID0gbmV3IEFycmF5TGlzdDw+KCk7Ci0gICAgICAgICAgICBmb3IgKEJ1bmRsZSBidW5kbGUgOiBpdGVtQnVuZGxlTGlzdCkgewotICAgICAgICAgICAgICAgIHJlc3VsdC5hZGQoTWVkaWFJdGVtMi5mcm9tQnVuZGxlKGJ1bmRsZSkpOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIGJyb3dzZXIub25HZXRDaGlsZHJlbkRvbmUocGFyZW50SWQsIHBhZ2UsIHBhZ2VTaXplLCByZXN1bHQsIGV4dHJhcyk7Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIHZvaWQgb25TZWFyY2hSZXN1bHRDaGFuZ2VkKFN0cmluZyBxdWVyeSwgaW50IGl0ZW1Db3VudCwgQnVuZGxlIGV4dHJhcykKLSAgICAgICAgICAgIHRocm93cyBSdW50aW1lRXhjZXB0aW9uIHsKLSAgICAgICAgaWYgKFRleHRVdGlscy5pc0VtcHR5KHF1ZXJ5KSkgewotICAgICAgICAgICAgTG9nLncoVEFHLCAib25TZWFyY2hSZXN1bHRDaGFuZ2VkKCk6IElnbm9yaW5nIGVtcHR5IHF1ZXJ5Iik7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICAgICAgZmluYWwgTWVkaWFCcm93c2VyMkltcGwgYnJvd3NlcjsKLSAgICAgICAgdHJ5IHsKLSAgICAgICAgICAgIGJyb3dzZXIgPSBnZXRCcm93c2VyKCk7Ci0gICAgICAgIH0gY2F0Y2ggKElsbGVnYWxTdGF0ZUV4Y2VwdGlvbiBlKSB7Ci0gICAgICAgICAgICBMb2cudyhUQUcsICJEb24ndCBmYWlsIHNpbGVudGx5IGhlcmUuIEhpZ2hseSBsaWtlbHkgYSBidWciKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAgICAgICBpZiAoYnJvd3NlciA9PSBudWxsKSB7Ci0gICAgICAgICAgICAvLyBUT0RPKGphZXdhbik6IFJldmlzaXQgaGVyZS4gQ291bGQgYmUgYSBidWcKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAgICAgICBicm93c2VyLm9uU2VhcmNoUmVzdWx0Q2hhbmdlZChxdWVyeSwgaXRlbUNvdW50LCBleHRyYXMpOwotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyB2b2lkIG9uR2V0U2VhcmNoUmVzdWx0RG9uZShTdHJpbmcgcXVlcnksIGludCBwYWdlLCBpbnQgcGFnZVNpemUsCi0gICAgICAgICAgICBMaXN0PEJ1bmRsZT4gaXRlbUJ1bmRsZUxpc3QsIEJ1bmRsZSBleHRyYXMpIHRocm93cyBSdW50aW1lRXhjZXB0aW9uIHsKLSAgICAgICAgaWYgKFRleHRVdGlscy5pc0VtcHR5KHF1ZXJ5KSkgewotICAgICAgICAgICAgTG9nLncoVEFHLCAib25HZXRTZWFyY2hSZXN1bHREb25lKCk6IElnbm9yaW5nIGVtcHR5IHF1ZXJ5Iik7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICAgICAgZmluYWwgTWVkaWFCcm93c2VyMkltcGwgYnJvd3NlcjsKLSAgICAgICAgdHJ5IHsKLSAgICAgICAgICAgIGJyb3dzZXIgPSBnZXRCcm93c2VyKCk7Ci0gICAgICAgIH0gY2F0Y2ggKElsbGVnYWxTdGF0ZUV4Y2VwdGlvbiBlKSB7Ci0gICAgICAgICAgICBMb2cudyhUQUcsICJEb24ndCBmYWlsIHNpbGVudGx5IGhlcmUuIEhpZ2hseSBsaWtlbHkgYSBidWciKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAgICAgICBpZiAoYnJvd3NlciA9PSBudWxsKSB7Ci0gICAgICAgICAgICAvLyBUT0RPKGphZXdhbik6IFJldmlzaXQgaGVyZS4gQ291bGQgYmUgYSBidWcKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotCi0gICAgICAgIExpc3Q8TWVkaWFJdGVtMj4gcmVzdWx0ID0gbnVsbDsKLSAgICAgICAgaWYgKGl0ZW1CdW5kbGVMaXN0ICE9IG51bGwpIHsKLSAgICAgICAgICAgIHJlc3VsdCA9IG5ldyBBcnJheUxpc3Q8PigpOwotICAgICAgICAgICAgZm9yIChCdW5kbGUgYnVuZGxlIDogaXRlbUJ1bmRsZUxpc3QpIHsKLSAgICAgICAgICAgICAgICByZXN1bHQuYWRkKE1lZGlhSXRlbTIuZnJvbUJ1bmRsZShidW5kbGUpKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICBicm93c2VyLm9uR2V0U2VhcmNoUmVzdWx0RG9uZShxdWVyeSwgcGFnZSwgcGFnZVNpemUsIHJlc3VsdCwgZXh0cmFzKTsKLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgdm9pZCBvbkNoaWxkcmVuQ2hhbmdlZChTdHJpbmcgcGFyZW50SWQsIGludCBpdGVtQ291bnQsIEJ1bmRsZSBleHRyYXMpIHsKLSAgICAgICAgaWYgKHBhcmVudElkID09IG51bGwpIHsKLSAgICAgICAgICAgIExvZy53KFRBRywgIm9uQ2hpbGRyZW5DaGFuZ2VkKCk6IElnbm9yaW5nIG51bGwgcGFyZW50SWQiKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAgICAgICBmaW5hbCBNZWRpYUJyb3dzZXIySW1wbCBicm93c2VyOwotICAgICAgICB0cnkgewotICAgICAgICAgICAgYnJvd3NlciA9IGdldEJyb3dzZXIoKTsKLSAgICAgICAgfSBjYXRjaCAoSWxsZWdhbFN0YXRlRXhjZXB0aW9uIGUpIHsKLSAgICAgICAgICAgIExvZy53KFRBRywgIkRvbid0IGZhaWwgc2lsZW50bHkgaGVyZS4gSGlnaGx5IGxpa2VseSBhIGJ1ZyIpOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgICAgIGlmIChicm93c2VyID09IG51bGwpIHsKLSAgICAgICAgICAgIC8vIFRPRE8oamFld2FuKTogUmV2aXNpdCBoZXJlLiBDb3VsZCBiZSBhIGJ1ZwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgICAgIGJyb3dzZXIub25DaGlsZHJlbkNoYW5nZWQocGFyZW50SWQsIGl0ZW1Db3VudCwgZXh0cmFzKTsKLSAgICB9Ci19CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9NZWRpYUNvbXBvbmVudHMvc3JjL2NvbS9hbmRyb2lkL21lZGlhL01lZGlhSXRlbTJJbXBsLmphdmEgYi9wYWNrYWdlcy9NZWRpYUNvbXBvbmVudHMvc3JjL2NvbS9hbmRyb2lkL21lZGlhL01lZGlhSXRlbTJJbXBsLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDkxMGEwZjEuLjAwMDAwMDAKLS0tIGEvcGFja2FnZXMvTWVkaWFDb21wb25lbnRzL3NyYy9jb20vYW5kcm9pZC9tZWRpYS9NZWRpYUl0ZW0ySW1wbC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjIzICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgMjAxOCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0Ci0gKgotICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7Ci0gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCi0gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLSAqCi0gKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotICoKLSAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKLSAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCi0gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KLSAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKLSAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgotICovCi0KLXBhY2thZ2UgY29tLmFuZHJvaWQubWVkaWE7Ci0KLWltcG9ydCBzdGF0aWMgYW5kcm9pZC5tZWRpYS5NZWRpYUl0ZW0yLkZMQUdfQlJPV1NBQkxFOwotaW1wb3J0IHN0YXRpYyBhbmRyb2lkLm1lZGlhLk1lZGlhSXRlbTIuRkxBR19QTEFZQUJMRTsKLQotaW1wb3J0IGFuZHJvaWQuYW5ub3RhdGlvbi5Ob25OdWxsOwotaW1wb3J0IGFuZHJvaWQuYW5ub3RhdGlvbi5OdWxsYWJsZTsKLWltcG9ydCBhbmRyb2lkLm1lZGlhLkRhdGFTb3VyY2VEZXNjOwotaW1wb3J0IGFuZHJvaWQubWVkaWEuTWVkaWFJdGVtMjsKLWltcG9ydCBhbmRyb2lkLm1lZGlhLk1lZGlhSXRlbTIuQnVpbGRlcjsKLWltcG9ydCBhbmRyb2lkLm1lZGlhLk1lZGlhSXRlbTIuRmxhZ3M7Ci1pbXBvcnQgYW5kcm9pZC5tZWRpYS5NZWRpYU1ldGFkYXRhMjsKLWltcG9ydCBhbmRyb2lkLm1lZGlhLnVwZGF0ZS5NZWRpYUl0ZW0yUHJvdmlkZXI7Ci1pbXBvcnQgYW5kcm9pZC5vcy5CdW5kbGU7Ci1pbXBvcnQgYW5kcm9pZC50ZXh0LlRleHRVdGlsczsKLQotaW1wb3J0IGphdmEudXRpbC5VVUlEOwotCi1wdWJsaWMgY2xhc3MgTWVkaWFJdGVtMkltcGwgaW1wbGVtZW50cyBNZWRpYUl0ZW0yUHJvdmlkZXIgewotICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBLRVlfSUQgPSAiYW5kcm9pZC5tZWRpYS5tZWRpYWl0ZW0yLmlkIjsKLSAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgS0VZX0ZMQUdTID0gImFuZHJvaWQubWVkaWEubWVkaWFpdGVtMi5mbGFncyI7Ci0gICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIEtFWV9NRVRBREFUQSA9ICJhbmRyb2lkLm1lZGlhLm1lZGlhaXRlbTIubWV0YWRhdGEiOwotICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBLRVlfVVVJRCA9ICJhbmRyb2lkLm1lZGlhLm1lZGlhaXRlbTIudXVpZCI7Ci0KLSAgICBwcml2YXRlIGZpbmFsIE1lZGlhSXRlbTIgbUluc3RhbmNlOwotICAgIHByaXZhdGUgZmluYWwgU3RyaW5nIG1JZDsKLSAgICBwcml2YXRlIGZpbmFsIGludCBtRmxhZ3M7Ci0gICAgcHJpdmF0ZSBmaW5hbCBVVUlEIG1VVUlEOwotICAgIHByaXZhdGUgTWVkaWFNZXRhZGF0YTIgbU1ldGFkYXRhOwotICAgIHByaXZhdGUgRGF0YVNvdXJjZURlc2MgbURhdGFTb3VyY2VEZXNjOwotCi0gICAgLy8gRnJvbSB0aGUgcHVibGljIEFQSQotICAgIHB1YmxpYyBNZWRpYUl0ZW0ySW1wbChATm9uTnVsbCBTdHJpbmcgbWVkaWFJZCwgQE51bGxhYmxlIERhdGFTb3VyY2VEZXNjIGRzZCwKLSAgICAgICAgICAgIEBOdWxsYWJsZSBNZWRpYU1ldGFkYXRhMiBtZXRhZGF0YSwgQEZsYWdzIGludCBmbGFncykgewotICAgICAgICB0aGlzKG1lZGlhSWQsIGRzZCwgbWV0YWRhdGEsIGZsYWdzLCBudWxsKTsKLSAgICB9Ci0KLSAgICBwcml2YXRlIE1lZGlhSXRlbTJJbXBsKEBOb25OdWxsIFN0cmluZyBtZWRpYUlkLCBATnVsbGFibGUgRGF0YVNvdXJjZURlc2MgZHNkLAotICAgICAgICAgICAgQE51bGxhYmxlIE1lZGlhTWV0YWRhdGEyIG1ldGFkYXRhLCBARmxhZ3MgaW50IGZsYWdzLCBATnVsbGFibGUgVVVJRCB1dWlkKSB7Ci0gICAgICAgIGlmIChtZWRpYUlkID09IG51bGwpIHsKLSAgICAgICAgICAgIHRocm93IG5ldyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oIm1lZGlhSWQgc2hvdWxkbid0IGJlIG51bGwiKTsKLSAgICAgICAgfQotICAgICAgICBpZiAobWV0YWRhdGEgIT0gbnVsbCAmJiAhVGV4dFV0aWxzLmVxdWFscyhtZWRpYUlkLCBtZXRhZGF0YS5nZXRNZWRpYUlkKCkpKSB7Ci0gICAgICAgICAgICB0aHJvdyBuZXcgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKCJtZXRhZGF0YSdzIGlkIHNob3VsZCBiZSBtYXRjaGVkIHdpdGggdGhlIG1lZGlhaWQiKTsKLSAgICAgICAgfQotCi0gICAgICAgIG1JZCA9IG1lZGlhSWQ7Ci0gICAgICAgIG1EYXRhU291cmNlRGVzYyA9IGRzZDsKLSAgICAgICAgbU1ldGFkYXRhID0gbWV0YWRhdGE7Ci0gICAgICAgIG1GbGFncyA9IGZsYWdzOwotICAgICAgICBtVVVJRCA9ICh1dWlkID09IG51bGwpID8gVVVJRC5yYW5kb21VVUlEKCkgOiB1dWlkOwotCi0gICAgICAgIG1JbnN0YW5jZSA9IG5ldyBNZWRpYUl0ZW0yKHRoaXMpOwotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyBib29sZWFuIGVxdWFsc19pbXBsKE9iamVjdCBvYmopIHsKLSAgICAgICAgaWYgKCEob2JqIGluc3RhbmNlb2YgTWVkaWFJdGVtMikpIHsKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgfQotICAgICAgICBNZWRpYUl0ZW0yIG90aGVyID0gKE1lZGlhSXRlbTIpIG9iajsKLSAgICAgICAgcmV0dXJuIG1VVUlELmVxdWFscygoKE1lZGlhSXRlbTJJbXBsKSBvdGhlci5nZXRQcm92aWRlcigpKS5tVVVJRCk7Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogUmV0dXJuIHRoaXMgb2JqZWN0IGFzIGEgYnVuZGxlIHRvIHNoYXJlIGJldHdlZW4gcHJvY2Vzc2VzLgotICAgICAqCi0gICAgICogQHJldHVybiBhIG5ldyBidW5kbGUgaW5zdGFuY2UKLSAgICAgKi8KLSAgICBwdWJsaWMgQnVuZGxlIHRvQnVuZGxlX2ltcGwoKSB7Ci0gICAgICAgIEJ1bmRsZSBidW5kbGUgPSBuZXcgQnVuZGxlKCk7Ci0gICAgICAgIGJ1bmRsZS5wdXRTdHJpbmcoS0VZX0lELCBtSWQpOwotICAgICAgICBidW5kbGUucHV0SW50KEtFWV9GTEFHUywgbUZsYWdzKTsKLSAgICAgICAgaWYgKG1NZXRhZGF0YSAhPSBudWxsKSB7Ci0gICAgICAgICAgICBidW5kbGUucHV0QnVuZGxlKEtFWV9NRVRBREFUQSwgbU1ldGFkYXRhLnRvQnVuZGxlKCkpOwotICAgICAgICB9Ci0gICAgICAgIGJ1bmRsZS5wdXRTdHJpbmcoS0VZX1VVSUQsIG1VVUlELnRvU3RyaW5nKCkpOwotICAgICAgICByZXR1cm4gYnVuZGxlOwotICAgIH0KLQotICAgIC8qKgotICAgICAqIENyZWF0ZSBhIE1lZGlhSXRlbTIgZnJvbSB0aGUge0BsaW5rIEJ1bmRsZX0uCi0gICAgICoKLSAgICAgKiBAcGFyYW0gYnVuZGxlIFRoZSBidW5kbGUgd2hpY2ggd2FzIHB1Ymxpc2hlZCBieSB7QGxpbmsgTWVkaWFJdGVtMiN0b0J1bmRsZSgpfS4KLSAgICAgKiBAcmV0dXJuIFRoZSBuZXdseSBjcmVhdGVkIE1lZGlhSXRlbTIKLSAgICAgKi8KLSAgICBwdWJsaWMgc3RhdGljIE1lZGlhSXRlbTIgZnJvbUJ1bmRsZV9pbXBsKEBOb25OdWxsIEJ1bmRsZSBidW5kbGUpIHsKLSAgICAgICAgaWYgKGJ1bmRsZSA9PSBudWxsKSB7Ci0gICAgICAgICAgICByZXR1cm4gbnVsbDsKLSAgICAgICAgfQotICAgICAgICBmaW5hbCBTdHJpbmcgdXVpZFN0cmluZyA9IGJ1bmRsZS5nZXRTdHJpbmcoS0VZX1VVSUQpOwotICAgICAgICByZXR1cm4gZnJvbUJ1bmRsZShidW5kbGUsIFVVSUQuZnJvbVN0cmluZyh1dWlkU3RyaW5nKSk7Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogQ3JlYXRlIGEgTWVkaWFJdGVtMiBmcm9tIHRoZSB7QGxpbmsgQnVuZGxlfSB3aXRoIHRoZSBzcGVjaWZpZWQge0BsaW5rIFVVSUR9LgotICAgICAqIElmIHtAbGluayBVVUlEfQotICAgICAqIGNhbiBiZSBudWxsIGZvciBjcmVhdGluZyBuZXcuCi0gICAgICoKLSAgICAgKiBAcGFyYW0gYnVuZGxlIFRoZSBidW5kbGUgd2hpY2ggd2FzIHB1Ymxpc2hlZCBieSB7QGxpbmsgTWVkaWFJdGVtMiN0b0J1bmRsZSgpfS4KLSAgICAgKiBAcGFyYW0gdXVpZCBBIHtAbGluayBVVUlEfSB0byBvdmVycmlkZS4gQ2FuIGJlIHtAbGluayBudWxsfSBmb3Igb3ZlcnJpZGUuCi0gICAgICogQHJldHVybiBUaGUgbmV3bHkgY3JlYXRlZCBNZWRpYUl0ZW0yCi0gICAgICovCi0gICAgc3RhdGljIE1lZGlhSXRlbTIgZnJvbUJ1bmRsZShATm9uTnVsbCBCdW5kbGUgYnVuZGxlLCBATnVsbGFibGUgVVVJRCB1dWlkKSB7Ci0gICAgICAgIGlmIChidW5kbGUgPT0gbnVsbCkgewotICAgICAgICAgICAgcmV0dXJuIG51bGw7Ci0gICAgICAgIH0KLSAgICAgICAgZmluYWwgU3RyaW5nIGlkID0gYnVuZGxlLmdldFN0cmluZyhLRVlfSUQpOwotICAgICAgICBmaW5hbCBCdW5kbGUgbWV0YWRhdGFCdW5kbGUgPSBidW5kbGUuZ2V0QnVuZGxlKEtFWV9NRVRBREFUQSk7Ci0gICAgICAgIGZpbmFsIE1lZGlhTWV0YWRhdGEyIG1ldGFkYXRhID0gTWVkaWFNZXRhZGF0YTIuZnJvbUJ1bmRsZShtZXRhZGF0YUJ1bmRsZSk7Ci0gICAgICAgIGZpbmFsIGludCBmbGFncyA9IGJ1bmRsZS5nZXRJbnQoS0VZX0ZMQUdTKTsKLSAgICAgICAgcmV0dXJuIG5ldyBNZWRpYUl0ZW0ySW1wbChpZCwgbnVsbCwgbWV0YWRhdGEsIGZsYWdzLCB1dWlkKS5nZXRJbnN0YW5jZSgpOwotICAgIH0KLQotICAgIHByaXZhdGUgTWVkaWFJdGVtMiBnZXRJbnN0YW5jZSgpIHsKLSAgICAgICAgcmV0dXJuIG1JbnN0YW5jZTsKLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgU3RyaW5nIHRvU3RyaW5nX2ltcGwoKSB7Ci0gICAgICAgIGZpbmFsIFN0cmluZ0J1aWxkZXIgc2IgPSBuZXcgU3RyaW5nQnVpbGRlcigiTWVkaWFJdGVtMnsiKTsKLSAgICAgICAgc2IuYXBwZW5kKCJtRmxhZ3M9IikuYXBwZW5kKG1GbGFncyk7Ci0gICAgICAgIHNiLmFwcGVuZCgiLCBtTWV0YWRhdGE9IikuYXBwZW5kKG1NZXRhZGF0YSk7Ci0gICAgICAgIHNiLmFwcGVuZCgnfScpOwotICAgICAgICByZXR1cm4gc2IudG9TdHJpbmcoKTsKLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgQEZsYWdzIGludCBnZXRGbGFnc19pbXBsKCkgewotICAgICAgICByZXR1cm4gbUZsYWdzOwotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyBib29sZWFuIGlzQnJvd3NhYmxlX2ltcGwoKSB7Ci0gICAgICAgIHJldHVybiAobUZsYWdzICYgRkxBR19CUk9XU0FCTEUpICE9IDA7Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIGJvb2xlYW4gaXNQbGF5YWJsZV9pbXBsKCkgewotICAgICAgICByZXR1cm4gKG1GbGFncyAmIEZMQUdfUExBWUFCTEUpICE9IDA7Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIHZvaWQgc2V0TWV0YWRhdGFfaW1wbChATnVsbGFibGUgTWVkaWFNZXRhZGF0YTIgbWV0YWRhdGEpIHsKLSAgICAgICAgaWYgKG1ldGFkYXRhICE9IG51bGwgJiYgIVRleHRVdGlscy5lcXVhbHMobUlkLCBtZXRhZGF0YS5nZXRNZWRpYUlkKCkpKSB7Ci0gICAgICAgICAgICB0aHJvdyBuZXcgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKCJtZXRhZGF0YSdzIGlkIHNob3VsZCBiZSBtYXRjaGVkIHdpdGggdGhlIG1lZGlhSWQiKTsKLSAgICAgICAgfQotICAgICAgICBtTWV0YWRhdGEgPSBtZXRhZGF0YTsKLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgQE51bGxhYmxlIE1lZGlhTWV0YWRhdGEyIGdldE1ldGFkYXRhX2ltcGwoKSB7Ci0gICAgICAgIHJldHVybiBtTWV0YWRhdGE7Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIEBOb25OdWxsIFN0cmluZyBnZXRNZWRpYUlkX2ltcGwoKSB7Ci0gICAgICAgIHJldHVybiBtSWQ7Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIEBOdWxsYWJsZSBEYXRhU291cmNlRGVzYyBnZXREYXRhU291cmNlRGVzY19pbXBsKCkgewotICAgICAgICByZXR1cm4gbURhdGFTb3VyY2VEZXNjOwotICAgIH0KLQotICAgIHB1YmxpYyBzdGF0aWMgY2xhc3MgQnVpbGRlckltcGwgaW1wbGVtZW50cyBNZWRpYUl0ZW0yUHJvdmlkZXIuQnVpbGRlclByb3ZpZGVyIHsKLSAgICAgICAgcHJpdmF0ZSBCdWlsZGVyIG1JbnN0YW5jZTsKLSAgICAgICAgcHJpdmF0ZSBARmxhZ3MgaW50IG1GbGFnczsKLSAgICAgICAgcHJpdmF0ZSBTdHJpbmcgbU1lZGlhSWQ7Ci0gICAgICAgIHByaXZhdGUgTWVkaWFNZXRhZGF0YTIgbU1ldGFkYXRhOwotICAgICAgICBwcml2YXRlIERhdGFTb3VyY2VEZXNjIG1EYXRhU291cmNlRGVzYzsKLQotICAgICAgICBwdWJsaWMgQnVpbGRlckltcGwoQnVpbGRlciBpbnN0YW5jZSwgaW50IGZsYWdzKSB7Ci0gICAgICAgICAgICBtSW5zdGFuY2UgPSBpbnN0YW5jZTsKLSAgICAgICAgICAgIG1GbGFncyA9IGZsYWdzOwotICAgICAgICB9Ci0KLSAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgIHB1YmxpYyBCdWlsZGVyIHNldE1lZGlhSWRfaW1wbChATnVsbGFibGUgU3RyaW5nIG1lZGlhSWQpIHsKLSAgICAgICAgICAgIG1NZWRpYUlkID0gbWVkaWFJZDsKLSAgICAgICAgICAgIHJldHVybiBtSW5zdGFuY2U7Ci0gICAgICAgIH0KLQotICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgcHVibGljIEJ1aWxkZXIgc2V0TWV0YWRhdGFfaW1wbChATnVsbGFibGUgTWVkaWFNZXRhZGF0YTIgbWV0YWRhdGEpIHsKLSAgICAgICAgICAgIG1NZXRhZGF0YSA9IG1ldGFkYXRhOwotICAgICAgICAgICAgcmV0dXJuIG1JbnN0YW5jZTsKLSAgICAgICAgfQotCi0gICAgICAgIEBPdmVycmlkZQotICAgICAgICBwdWJsaWMgQnVpbGRlciBzZXREYXRhU291cmNlRGVzY19pbXBsKEBOdWxsYWJsZSBEYXRhU291cmNlRGVzYyBkYXRhU291cmNlRGVzYykgewotICAgICAgICAgICAgbURhdGFTb3VyY2VEZXNjID0gZGF0YVNvdXJjZURlc2M7Ci0gICAgICAgICAgICByZXR1cm4gbUluc3RhbmNlOwotICAgICAgICB9Ci0KLSAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgIHB1YmxpYyBNZWRpYUl0ZW0yIGJ1aWxkX2ltcGwoKSB7Ci0gICAgICAgICAgICBTdHJpbmcgaWQgPSAobU1ldGFkYXRhICE9IG51bGwpCi0gICAgICAgICAgICAgICAgICAgID8gbU1ldGFkYXRhLmdldFN0cmluZyhNZWRpYU1ldGFkYXRhMi5NRVRBREFUQV9LRVlfTUVESUFfSUQpIDogbnVsbDsKLSAgICAgICAgICAgIGlmIChpZCA9PSBudWxsKSB7Ci0gICAgICAgICAgICAgICAgLy8gIFRPRE8oamFld2FuKTogRG91YmxlIGNoZWNrIGlmIGl0cyBzdWZmaWNpZW50IChlLmcuIFVzZSBVVUlEIGluc3RlYWQ/KQotICAgICAgICAgICAgICAgIGlkID0gKG1NZWRpYUlkICE9IG51bGwpID8gbU1lZGlhSWQgOiB0b1N0cmluZygpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgcmV0dXJuIG5ldyBNZWRpYUl0ZW0ySW1wbChpZCwgbURhdGFTb3VyY2VEZXNjLCBtTWV0YWRhdGEsIG1GbGFncykuZ2V0SW5zdGFuY2UoKTsKLSAgICAgICAgfQotICAgIH0KLX0KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL01lZGlhQ29tcG9uZW50cy9zcmMvY29tL2FuZHJvaWQvbWVkaWEvTWVkaWFMaWJyYXJ5U2VydmljZTJJbXBsLmphdmEgYi9wYWNrYWdlcy9NZWRpYUNvbXBvbmVudHMvc3JjL2NvbS9hbmRyb2lkL21lZGlhL01lZGlhTGlicmFyeVNlcnZpY2UySW1wbC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjZjM0Y2Q0Li4wMDAwMDAwCi0tLSBhL3BhY2thZ2VzL01lZGlhQ29tcG9uZW50cy9zcmMvY29tL2FuZHJvaWQvbWVkaWEvTWVkaWFMaWJyYXJ5U2VydmljZTJJbXBsLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxNzMgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAyMDE4IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKLSAqCi0gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKLSAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KLSAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotICoKLSAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0gKgotICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQotICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKLSAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgotICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAotICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCi0gKi8KLQotcGFja2FnZSBjb20uYW5kcm9pZC5tZWRpYTsKLQotaW1wb3J0IGFuZHJvaWQuYXBwLlBlbmRpbmdJbnRlbnQ7Ci1pbXBvcnQgYW5kcm9pZC5jb250ZW50LkNvbnRleHQ7Ci1pbXBvcnQgYW5kcm9pZC5tZWRpYS5NZWRpYUxpYnJhcnlTZXJ2aWNlMjsKLWltcG9ydCBhbmRyb2lkLm1lZGlhLk1lZGlhTGlicmFyeVNlcnZpY2UyLkxpYnJhcnlSb290OwotaW1wb3J0IGFuZHJvaWQubWVkaWEuTWVkaWFMaWJyYXJ5U2VydmljZTIuTWVkaWFMaWJyYXJ5U2Vzc2lvbjsKLWltcG9ydCBhbmRyb2lkLm1lZGlhLk1lZGlhTGlicmFyeVNlcnZpY2UyLk1lZGlhTGlicmFyeVNlc3Npb24uQnVpbGRlcjsKLWltcG9ydCBhbmRyb2lkLm1lZGlhLk1lZGlhTGlicmFyeVNlcnZpY2UyLk1lZGlhTGlicmFyeVNlc3Npb24uTWVkaWFMaWJyYXJ5U2Vzc2lvbkNhbGxiYWNrOwotaW1wb3J0IGFuZHJvaWQubWVkaWEuTWVkaWFQbGF5ZXJCYXNlOwotaW1wb3J0IGFuZHJvaWQubWVkaWEuTWVkaWFQbGF5bGlzdEFnZW50OwotaW1wb3J0IGFuZHJvaWQubWVkaWEuTWVkaWFTZXNzaW9uMjsKLWltcG9ydCBhbmRyb2lkLm1lZGlhLk1lZGlhU2Vzc2lvbjIuQ29udHJvbGxlckluZm87Ci1pbXBvcnQgYW5kcm9pZC5tZWRpYS5NZWRpYVNlc3Npb25TZXJ2aWNlMjsKLWltcG9ydCBhbmRyb2lkLm1lZGlhLlNlc3Npb25Ub2tlbjI7Ci1pbXBvcnQgYW5kcm9pZC5tZWRpYS5Wb2x1bWVQcm92aWRlcjI7Ci1pbXBvcnQgYW5kcm9pZC5tZWRpYS51cGRhdGUuTWVkaWFMaWJyYXJ5U2VydmljZTJQcm92aWRlcjsKLWltcG9ydCBhbmRyb2lkLm9zLkJ1bmRsZTsKLWltcG9ydCBhbmRyb2lkLnRleHQuVGV4dFV0aWxzOwotCi1pbXBvcnQgY29tLmFuZHJvaWQubWVkaWEuTWVkaWFTZXNzaW9uMkltcGwuQnVpbGRlckJhc2VJbXBsOwotCi1pbXBvcnQgamF2YS51dGlsLmNvbmN1cnJlbnQuRXhlY3V0b3I7Ci0KLXB1YmxpYyBjbGFzcyBNZWRpYUxpYnJhcnlTZXJ2aWNlMkltcGwgZXh0ZW5kcyBNZWRpYVNlc3Npb25TZXJ2aWNlMkltcGwgaW1wbGVtZW50cwotICAgICAgICBNZWRpYUxpYnJhcnlTZXJ2aWNlMlByb3ZpZGVyIHsKLSAgICBwcml2YXRlIGZpbmFsIE1lZGlhU2Vzc2lvblNlcnZpY2UyIG1JbnN0YW5jZTsKLSAgICBwcml2YXRlIE1lZGlhTGlicmFyeVNlc3Npb24gbUxpYnJhcnlTZXNzaW9uOwotCi0gICAgcHVibGljIE1lZGlhTGlicmFyeVNlcnZpY2UySW1wbChNZWRpYUxpYnJhcnlTZXJ2aWNlMiBpbnN0YW5jZSkgewotICAgICAgICBzdXBlcihpbnN0YW5jZSk7Ci0gICAgICAgIG1JbnN0YW5jZSA9IGluc3RhbmNlOwotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyB2b2lkIG9uQ3JlYXRlX2ltcGwoKSB7Ci0gICAgICAgIHN1cGVyLm9uQ3JlYXRlX2ltcGwoKTsKLQotICAgICAgICAvLyBFZmZlY3RpdmVseSBmaW5hbAotICAgICAgICBNZWRpYVNlc3Npb24yIHNlc3Npb24gPSBnZXRTZXNzaW9uKCk7Ci0gICAgICAgIGlmICghKHNlc3Npb24gaW5zdGFuY2VvZiBNZWRpYUxpYnJhcnlTZXNzaW9uKSkgewotICAgICAgICAgICAgdGhyb3cgbmV3IFJ1bnRpbWVFeGNlcHRpb24oIkV4cGVjdGVkIE1lZGlhTGlicmFyeVNlc3Npb24sIGJ1dCByZXR1cm5lZCBNZWRpYVNlc3Npb24yIik7Ci0gICAgICAgIH0KLSAgICAgICAgbUxpYnJhcnlTZXNzaW9uID0gKE1lZGlhTGlicmFyeVNlc3Npb24pIGdldFNlc3Npb24oKTsKLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBpbnQgZ2V0U2Vzc2lvblR5cGUoKSB7Ci0gICAgICAgIHJldHVybiBTZXNzaW9uVG9rZW4yLlRZUEVfTElCUkFSWV9TRVJWSUNFOwotICAgIH0KLQotICAgIHB1YmxpYyBzdGF0aWMgY2xhc3MgTWVkaWFMaWJyYXJ5U2Vzc2lvbkltcGwgZXh0ZW5kcyBNZWRpYVNlc3Npb24ySW1wbAotICAgICAgICAgICAgaW1wbGVtZW50cyBNZWRpYUxpYnJhcnlTZXNzaW9uUHJvdmlkZXIgewotICAgICAgICBwdWJsaWMgTWVkaWFMaWJyYXJ5U2Vzc2lvbkltcGwoQ29udGV4dCBjb250ZXh0LAotICAgICAgICAgICAgICAgIE1lZGlhUGxheWVyQmFzZSBwbGF5ZXIsIFN0cmluZyBpZCwgTWVkaWFQbGF5bGlzdEFnZW50IHBsYXlsaXN0QWdlbnQsCi0gICAgICAgICAgICAgICAgVm9sdW1lUHJvdmlkZXIyIHZvbHVtZVByb3ZpZGVyLAotICAgICAgICAgICAgICAgIFBlbmRpbmdJbnRlbnQgc2Vzc2lvbkFjdGl2aXR5LCBFeGVjdXRvciBjYWxsYmFja0V4ZWN1dG9yLAotICAgICAgICAgICAgICAgIE1lZGlhTGlicmFyeVNlc3Npb25DYWxsYmFjayBjYWxsYmFjaykgewotICAgICAgICAgICAgc3VwZXIoY29udGV4dCwgcGxheWVyLCBpZCwgcGxheWxpc3RBZ2VudCwgdm9sdW1lUHJvdmlkZXIsIHNlc3Npb25BY3Rpdml0eSwKLSAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2tFeGVjdXRvciwgY2FsbGJhY2spOwotICAgICAgICAgICAgLy8gRG9uJ3QgcHV0IGFueSBleHRyYSBpbml0aWFsaXphdGlvbiBoZXJlLiBIZXJlJ3MgdGhlIHJlYXNvbi4KLSAgICAgICAgICAgIC8vIFN5c3RlbSBzZXJ2aWNlIHdpbGwgcmVjb2duaXplIHRoaXMgc2Vzc2lvbiBpbnNpZGUgb2YgdGhlIHN1cGVyIGNvbnN0cnVjdG9yIGFuZCB3b3VsZAotICAgICAgICAgICAgLy8gY29ubmVjdCB0byB0aGlzIHNlc3Npb24gYXNzdW1pbmcgdGhhdCBpbml0aWFsaXphdGlvbiBpcyBmaW5pc2hlZC4gSG93ZXZlciwgaWYgYW55Ci0gICAgICAgICAgICAvLyBpbml0aWFsaXphdGlvbiBsb2dpYyBpcyBoZXJlLCBjYWxscyBmcm9tIHRoZSBzZXJ2ZXIgd291bGQgZmFpbC4KLSAgICAgICAgICAgIC8vIHNlZTogTWVkaWFTZXNzaW9uMlN0dWIjY29ubmVjdCgpCi0gICAgICAgIH0KLQotICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgTWVkaWFMaWJyYXJ5U2Vzc2lvbiBjcmVhdGVJbnN0YW5jZSgpIHsKLSAgICAgICAgICAgIHJldHVybiBuZXcgTWVkaWFMaWJyYXJ5U2Vzc2lvbih0aGlzKTsKLSAgICAgICAgfQotCi0gICAgICAgIEBPdmVycmlkZQotICAgICAgICBNZWRpYUxpYnJhcnlTZXNzaW9uIGdldEluc3RhbmNlKCkgewotICAgICAgICAgICAgcmV0dXJuIChNZWRpYUxpYnJhcnlTZXNzaW9uKSBzdXBlci5nZXRJbnN0YW5jZSgpOwotICAgICAgICB9Ci0KLSAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgIE1lZGlhTGlicmFyeVNlc3Npb25DYWxsYmFjayBnZXRDYWxsYmFjaygpIHsKLSAgICAgICAgICAgIHJldHVybiAoTWVkaWFMaWJyYXJ5U2Vzc2lvbkNhbGxiYWNrKSBzdXBlci5nZXRDYWxsYmFjaygpOwotICAgICAgICB9Ci0KLSAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgIHB1YmxpYyB2b2lkIG5vdGlmeUNoaWxkcmVuQ2hhbmdlZF9pbXBsKENvbnRyb2xsZXJJbmZvIGNvbnRyb2xsZXIsIFN0cmluZyBwYXJlbnRJZCwKLSAgICAgICAgICAgICAgICBpbnQgaXRlbUNvdW50LCBCdW5kbGUgZXh0cmFzKSB7Ci0gICAgICAgICAgICBpZiAoY29udHJvbGxlciA9PSBudWxsKSB7Ci0gICAgICAgICAgICAgICAgdGhyb3cgbmV3IElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbigiY29udHJvbGxlciBzaG91bGRuJ3QgYmUgbnVsbCIpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYgKHBhcmVudElkID09IG51bGwpIHsKLSAgICAgICAgICAgICAgICB0aHJvdyBuZXcgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKCJwYXJlbnRJZCBzaG91bGRuJ3QgYmUgbnVsbCIpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgZ2V0U2Vzc2lvblN0dWIoKS5ub3RpZnlDaGlsZHJlbkNoYW5nZWROb3RMb2NrZWQoY29udHJvbGxlciwgcGFyZW50SWQsIGl0ZW1Db3VudCwKLSAgICAgICAgICAgICAgICAgICAgZXh0cmFzKTsKLSAgICAgICAgfQotCi0gICAgICAgIEBPdmVycmlkZQotICAgICAgICBwdWJsaWMgdm9pZCBub3RpZnlDaGlsZHJlbkNoYW5nZWRfaW1wbChTdHJpbmcgcGFyZW50SWQsIGludCBpdGVtQ291bnQsIEJ1bmRsZSBleHRyYXMpIHsKLSAgICAgICAgICAgIGlmIChwYXJlbnRJZCA9PSBudWxsKSB7Ci0gICAgICAgICAgICAgICAgdGhyb3cgbmV3IElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbigicGFyZW50SWQgc2hvdWxkbid0IGJlIG51bGwiKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGdldFNlc3Npb25TdHViKCkubm90aWZ5Q2hpbGRyZW5DaGFuZ2VkTm90TG9ja2VkKHBhcmVudElkLCBpdGVtQ291bnQsIGV4dHJhcyk7Ci0gICAgICAgIH0KLQotICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgcHVibGljIHZvaWQgbm90aWZ5U2VhcmNoUmVzdWx0Q2hhbmdlZF9pbXBsKENvbnRyb2xsZXJJbmZvIGNvbnRyb2xsZXIsIFN0cmluZyBxdWVyeSwKLSAgICAgICAgICAgICAgICBpbnQgaXRlbUNvdW50LCBCdW5kbGUgZXh0cmFzKSB7Ci0gICAgICAgICAgICBlbnN1cmVDYWxsaW5nVGhyZWFkKCk7Ci0gICAgICAgICAgICBpZiAoY29udHJvbGxlciA9PSBudWxsKSB7Ci0gICAgICAgICAgICAgICAgdGhyb3cgbmV3IElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbigiY29udHJvbGxlciBzaG91bGRuJ3QgYmUgbnVsbCIpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYgKFRleHRVdGlscy5pc0VtcHR5KHF1ZXJ5KSkgewotICAgICAgICAgICAgICAgIHRocm93IG5ldyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oInF1ZXJ5IHNob3VsZG4ndCBiZSBlbXB0eSIpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgZ2V0U2Vzc2lvblN0dWIoKS5ub3RpZnlTZWFyY2hSZXN1bHRDaGFuZ2VkKGNvbnRyb2xsZXIsIHF1ZXJ5LCBpdGVtQ291bnQsIGV4dHJhcyk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBwdWJsaWMgc3RhdGljIGNsYXNzIEJ1aWxkZXJJbXBsCi0gICAgICAgICAgICBleHRlbmRzIEJ1aWxkZXJCYXNlSW1wbDxNZWRpYUxpYnJhcnlTZXNzaW9uLCBNZWRpYUxpYnJhcnlTZXNzaW9uQ2FsbGJhY2s+IHsKLSAgICAgICAgcHVibGljIEJ1aWxkZXJJbXBsKE1lZGlhTGlicmFyeVNlcnZpY2UyIHNlcnZpY2UsIEJ1aWxkZXIgaW5zdGFuY2UsCi0gICAgICAgICAgICAgICAgRXhlY3V0b3IgY2FsbGJhY2tFeGVjdXRvciwgTWVkaWFMaWJyYXJ5U2Vzc2lvbkNhbGxiYWNrIGNhbGxiYWNrKSB7Ci0gICAgICAgICAgICBzdXBlcihzZXJ2aWNlKTsKLSAgICAgICAgICAgIHNldFNlc3Npb25DYWxsYmFja19pbXBsKGNhbGxiYWNrRXhlY3V0b3IsIGNhbGxiYWNrKTsKLSAgICAgICAgfQotCi0gICAgICAgIEBPdmVycmlkZQotICAgICAgICBwdWJsaWMgTWVkaWFMaWJyYXJ5U2Vzc2lvbiBidWlsZF9pbXBsKCkgewotICAgICAgICAgICAgcmV0dXJuIG5ldyBNZWRpYUxpYnJhcnlTZXNzaW9uSW1wbChtQ29udGV4dCwgbVBsYXllciwgbUlkLCBtUGxheWxpc3RBZ2VudCwKLSAgICAgICAgICAgICAgICAgICAgbVZvbHVtZVByb3ZpZGVyLCBtU2Vzc2lvbkFjdGl2aXR5LCBtQ2FsbGJhY2tFeGVjdXRvciwgbUNhbGxiYWNrKS5nZXRJbnN0YW5jZSgpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgcHVibGljIHN0YXRpYyBmaW5hbCBjbGFzcyBMaWJyYXJ5Um9vdEltcGwgaW1wbGVtZW50cyBMaWJyYXJ5Um9vdFByb3ZpZGVyIHsKLSAgICAgICAgcHJpdmF0ZSBmaW5hbCBMaWJyYXJ5Um9vdCBtSW5zdGFuY2U7Ci0gICAgICAgIHByaXZhdGUgZmluYWwgU3RyaW5nIG1Sb290SWQ7Ci0gICAgICAgIHByaXZhdGUgZmluYWwgQnVuZGxlIG1FeHRyYXM7Ci0KLSAgICAgICAgcHVibGljIExpYnJhcnlSb290SW1wbChMaWJyYXJ5Um9vdCBpbnN0YW5jZSwgU3RyaW5nIHJvb3RJZCwgQnVuZGxlIGV4dHJhcykgewotICAgICAgICAgICAgaWYgKHJvb3RJZCA9PSBudWxsKSB7Ci0gICAgICAgICAgICAgICAgdGhyb3cgbmV3IElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbigicm9vdElkIHNob3VsZG4ndCBiZSBudWxsLiIpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgbUluc3RhbmNlID0gaW5zdGFuY2U7Ci0gICAgICAgICAgICBtUm9vdElkID0gcm9vdElkOwotICAgICAgICAgICAgbUV4dHJhcyA9IGV4dHJhczsKLSAgICAgICAgfQotCi0gICAgICAgIEBPdmVycmlkZQotICAgICAgICBwdWJsaWMgU3RyaW5nIGdldFJvb3RJZF9pbXBsKCkgewotICAgICAgICAgICAgcmV0dXJuIG1Sb290SWQ7Ci0gICAgICAgIH0KLQotICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgcHVibGljIEJ1bmRsZSBnZXRFeHRyYXNfaW1wbCgpIHsKLSAgICAgICAgICAgIHJldHVybiBtRXh0cmFzOwotICAgICAgICB9Ci0gICAgfQotfQpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvTWVkaWFDb21wb25lbnRzL3NyYy9jb20vYW5kcm9pZC9tZWRpYS9NZWRpYU1ldGFkYXRhMkltcGwuamF2YSBiL3BhY2thZ2VzL01lZGlhQ29tcG9uZW50cy9zcmMvY29tL2FuZHJvaWQvbWVkaWEvTWVkaWFNZXRhZGF0YTJJbXBsLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGNmMWM1MzIuLjAwMDAwMDAKLS0tIGEvcGFja2FnZXMvTWVkaWFDb21wb25lbnRzL3NyYy9jb20vYW5kcm9pZC9tZWRpYS9NZWRpYU1ldGFkYXRhMkltcGwuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDM3MyArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IDIwMTggVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAotICoKLSAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwotICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgotICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0gKgotICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLSAqCi0gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCi0gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAotICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCi0gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCi0gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KLSAqLwotCi1wYWNrYWdlIGNvbS5hbmRyb2lkLm1lZGlhOwotCi1pbXBvcnQgc3RhdGljIGFuZHJvaWQubWVkaWEuTWVkaWFNZXRhZGF0YTIuKjsKLQotaW1wb3J0IGFuZHJvaWQuYW5ub3RhdGlvbi5OdWxsYWJsZTsKLWltcG9ydCBhbmRyb2lkLmdyYXBoaWNzLkJpdG1hcDsKLWltcG9ydCBhbmRyb2lkLm1lZGlhLk1lZGlhTWV0YWRhdGEyOwotaW1wb3J0IGFuZHJvaWQubWVkaWEuTWVkaWFNZXRhZGF0YTIuQml0bWFwS2V5OwotaW1wb3J0IGFuZHJvaWQubWVkaWEuTWVkaWFNZXRhZGF0YTIuQnVpbGRlcjsKLWltcG9ydCBhbmRyb2lkLm1lZGlhLk1lZGlhTWV0YWRhdGEyLkxvbmdLZXk7Ci1pbXBvcnQgYW5kcm9pZC5tZWRpYS5NZWRpYU1ldGFkYXRhMi5SYXRpbmdLZXk7Ci1pbXBvcnQgYW5kcm9pZC5tZWRpYS5NZWRpYU1ldGFkYXRhMi5UZXh0S2V5OwotaW1wb3J0IGFuZHJvaWQubWVkaWEuUmF0aW5nMjsKLWltcG9ydCBhbmRyb2lkLm1lZGlhLnVwZGF0ZS5NZWRpYU1ldGFkYXRhMlByb3ZpZGVyOwotaW1wb3J0IGFuZHJvaWQub3MuQnVuZGxlOwotaW1wb3J0IGFuZHJvaWQudXRpbC5BcnJheU1hcDsKLWltcG9ydCBhbmRyb2lkLnV0aWwuTG9nOwotCi1pbXBvcnQgamF2YS51dGlsLlNldDsKLQotcHVibGljIGNsYXNzIE1lZGlhTWV0YWRhdGEySW1wbCBpbXBsZW1lbnRzIE1lZGlhTWV0YWRhdGEyUHJvdmlkZXIgewotICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBUQUcgPSAiTWVkaWFNZXRhZGF0YTIiOwotCi0gICAgc3RhdGljIGZpbmFsIGludCBNRVRBREFUQV9UWVBFX0xPTkcgPSAwOwotICAgIHN0YXRpYyBmaW5hbCBpbnQgTUVUQURBVEFfVFlQRV9URVhUID0gMTsKLSAgICBzdGF0aWMgZmluYWwgaW50IE1FVEFEQVRBX1RZUEVfQklUTUFQID0gMjsKLSAgICBzdGF0aWMgZmluYWwgaW50IE1FVEFEQVRBX1RZUEVfUkFUSU5HID0gMzsKLSAgICBzdGF0aWMgZmluYWwgaW50IE1FVEFEQVRBX1RZUEVfRkxPQVQgPSA0OwotICAgIHN0YXRpYyBmaW5hbCBBcnJheU1hcDxTdHJpbmcsIEludGVnZXI+IE1FVEFEQVRBX0tFWVNfVFlQRTsKLQotICAgIHN0YXRpYyB7Ci0gICAgICAgIE1FVEFEQVRBX0tFWVNfVFlQRSA9IG5ldyBBcnJheU1hcDxTdHJpbmcsIEludGVnZXI+KCk7Ci0gICAgICAgIE1FVEFEQVRBX0tFWVNfVFlQRS5wdXQoTUVUQURBVEFfS0VZX1RJVExFLCBNRVRBREFUQV9UWVBFX1RFWFQpOwotICAgICAgICBNRVRBREFUQV9LRVlTX1RZUEUucHV0KE1FVEFEQVRBX0tFWV9BUlRJU1QsIE1FVEFEQVRBX1RZUEVfVEVYVCk7Ci0gICAgICAgIE1FVEFEQVRBX0tFWVNfVFlQRS5wdXQoTUVUQURBVEFfS0VZX0RVUkFUSU9OLCBNRVRBREFUQV9UWVBFX0xPTkcpOwotICAgICAgICBNRVRBREFUQV9LRVlTX1RZUEUucHV0KE1FVEFEQVRBX0tFWV9BTEJVTSwgTUVUQURBVEFfVFlQRV9URVhUKTsKLSAgICAgICAgTUVUQURBVEFfS0VZU19UWVBFLnB1dChNRVRBREFUQV9LRVlfQVVUSE9SLCBNRVRBREFUQV9UWVBFX1RFWFQpOwotICAgICAgICBNRVRBREFUQV9LRVlTX1RZUEUucHV0KE1FVEFEQVRBX0tFWV9XUklURVIsIE1FVEFEQVRBX1RZUEVfVEVYVCk7Ci0gICAgICAgIE1FVEFEQVRBX0tFWVNfVFlQRS5wdXQoTUVUQURBVEFfS0VZX0NPTVBPU0VSLCBNRVRBREFUQV9UWVBFX1RFWFQpOwotICAgICAgICBNRVRBREFUQV9LRVlTX1RZUEUucHV0KE1FVEFEQVRBX0tFWV9DT01QSUxBVElPTiwgTUVUQURBVEFfVFlQRV9URVhUKTsKLSAgICAgICAgTUVUQURBVEFfS0VZU19UWVBFLnB1dChNRVRBREFUQV9LRVlfREFURSwgTUVUQURBVEFfVFlQRV9URVhUKTsKLSAgICAgICAgTUVUQURBVEFfS0VZU19UWVBFLnB1dChNRVRBREFUQV9LRVlfWUVBUiwgTUVUQURBVEFfVFlQRV9MT05HKTsKLSAgICAgICAgTUVUQURBVEFfS0VZU19UWVBFLnB1dChNRVRBREFUQV9LRVlfR0VOUkUsIE1FVEFEQVRBX1RZUEVfVEVYVCk7Ci0gICAgICAgIE1FVEFEQVRBX0tFWVNfVFlQRS5wdXQoTUVUQURBVEFfS0VZX1RSQUNLX05VTUJFUiwgTUVUQURBVEFfVFlQRV9MT05HKTsKLSAgICAgICAgTUVUQURBVEFfS0VZU19UWVBFLnB1dChNRVRBREFUQV9LRVlfTlVNX1RSQUNLUywgTUVUQURBVEFfVFlQRV9MT05HKTsKLSAgICAgICAgTUVUQURBVEFfS0VZU19UWVBFLnB1dChNRVRBREFUQV9LRVlfRElTQ19OVU1CRVIsIE1FVEFEQVRBX1RZUEVfTE9ORyk7Ci0gICAgICAgIE1FVEFEQVRBX0tFWVNfVFlQRS5wdXQoTUVUQURBVEFfS0VZX0FMQlVNX0FSVElTVCwgTUVUQURBVEFfVFlQRV9URVhUKTsKLSAgICAgICAgTUVUQURBVEFfS0VZU19UWVBFLnB1dChNRVRBREFUQV9LRVlfQVJULCBNRVRBREFUQV9UWVBFX0JJVE1BUCk7Ci0gICAgICAgIE1FVEFEQVRBX0tFWVNfVFlQRS5wdXQoTUVUQURBVEFfS0VZX0FSVF9VUkksIE1FVEFEQVRBX1RZUEVfVEVYVCk7Ci0gICAgICAgIE1FVEFEQVRBX0tFWVNfVFlQRS5wdXQoTUVUQURBVEFfS0VZX0FMQlVNX0FSVCwgTUVUQURBVEFfVFlQRV9CSVRNQVApOwotICAgICAgICBNRVRBREFUQV9LRVlTX1RZUEUucHV0KE1FVEFEQVRBX0tFWV9BTEJVTV9BUlRfVVJJLCBNRVRBREFUQV9UWVBFX1RFWFQpOwotICAgICAgICBNRVRBREFUQV9LRVlTX1RZUEUucHV0KE1FVEFEQVRBX0tFWV9VU0VSX1JBVElORywgTUVUQURBVEFfVFlQRV9SQVRJTkcpOwotICAgICAgICBNRVRBREFUQV9LRVlTX1RZUEUucHV0KE1FVEFEQVRBX0tFWV9SQVRJTkcsIE1FVEFEQVRBX1RZUEVfUkFUSU5HKTsKLSAgICAgICAgTUVUQURBVEFfS0VZU19UWVBFLnB1dChNRVRBREFUQV9LRVlfRElTUExBWV9USVRMRSwgTUVUQURBVEFfVFlQRV9URVhUKTsKLSAgICAgICAgTUVUQURBVEFfS0VZU19UWVBFLnB1dChNRVRBREFUQV9LRVlfRElTUExBWV9TVUJUSVRMRSwgTUVUQURBVEFfVFlQRV9URVhUKTsKLSAgICAgICAgTUVUQURBVEFfS0VZU19UWVBFLnB1dChNRVRBREFUQV9LRVlfRElTUExBWV9ERVNDUklQVElPTiwgTUVUQURBVEFfVFlQRV9URVhUKTsKLSAgICAgICAgTUVUQURBVEFfS0VZU19UWVBFLnB1dChNRVRBREFUQV9LRVlfRElTUExBWV9JQ09OLCBNRVRBREFUQV9UWVBFX0JJVE1BUCk7Ci0gICAgICAgIE1FVEFEQVRBX0tFWVNfVFlQRS5wdXQoTUVUQURBVEFfS0VZX0RJU1BMQVlfSUNPTl9VUkksIE1FVEFEQVRBX1RZUEVfVEVYVCk7Ci0gICAgICAgIE1FVEFEQVRBX0tFWVNfVFlQRS5wdXQoTUVUQURBVEFfS0VZX01FRElBX0lELCBNRVRBREFUQV9UWVBFX1RFWFQpOwotICAgICAgICBNRVRBREFUQV9LRVlTX1RZUEUucHV0KE1FVEFEQVRBX0tFWV9CVF9GT0xERVJfVFlQRSwgTUVUQURBVEFfVFlQRV9MT05HKTsKLSAgICAgICAgTUVUQURBVEFfS0VZU19UWVBFLnB1dChNRVRBREFUQV9LRVlfTUVESUFfVVJJLCBNRVRBREFUQV9UWVBFX1RFWFQpOwotICAgICAgICBNRVRBREFUQV9LRVlTX1RZUEUucHV0KE1FVEFEQVRBX0tFWV9BRFZFUlRJU0VNRU5ULCBNRVRBREFUQV9UWVBFX0xPTkcpOwotICAgICAgICBNRVRBREFUQV9LRVlTX1RZUEUucHV0KE1FVEFEQVRBX0tFWV9ET1dOTE9BRF9TVEFUVVMsIE1FVEFEQVRBX1RZUEVfTE9ORyk7Ci0gICAgfQotCi0gICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgQFRleHRLZXkKLSAgICBTdHJpbmdbXSBQUkVGRVJSRURfREVTQ1JJUFRJT05fT1JERVIgPSB7Ci0gICAgICAgICAgICBNRVRBREFUQV9LRVlfVElUTEUsCi0gICAgICAgICAgICBNRVRBREFUQV9LRVlfQVJUSVNULAotICAgICAgICAgICAgTUVUQURBVEFfS0VZX0FMQlVNLAotICAgICAgICAgICAgTUVUQURBVEFfS0VZX0FMQlVNX0FSVElTVCwKLSAgICAgICAgICAgIE1FVEFEQVRBX0tFWV9XUklURVIsCi0gICAgICAgICAgICBNRVRBREFUQV9LRVlfQVVUSE9SLAotICAgICAgICAgICAgTUVUQURBVEFfS0VZX0NPTVBPU0VSCi0gICAgfTsKLQotICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIEBCaXRtYXBLZXkKLSAgICBTdHJpbmdbXSBQUkVGRVJSRURfQklUTUFQX09SREVSID0gewotICAgICAgICAgICAgTUVUQURBVEFfS0VZX0RJU1BMQVlfSUNPTiwKLSAgICAgICAgICAgIE1FVEFEQVRBX0tFWV9BUlQsCi0gICAgICAgICAgICBNRVRBREFUQV9LRVlfQUxCVU1fQVJUCi0gICAgfTsKLQotICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIEBUZXh0S2V5Ci0gICAgU3RyaW5nW10gUFJFRkVSUkVEX1VSSV9PUkRFUiA9IHsKLSAgICAgICAgICAgIE1FVEFEQVRBX0tFWV9ESVNQTEFZX0lDT05fVVJJLAotICAgICAgICAgICAgTUVUQURBVEFfS0VZX0FSVF9VUkksCi0gICAgICAgICAgICBNRVRBREFUQV9LRVlfQUxCVU1fQVJUX1VSSQotICAgIH07Ci0KLSAgICBwcml2YXRlIGZpbmFsIE1lZGlhTWV0YWRhdGEyIG1JbnN0YW5jZTsKLSAgICBwcml2YXRlIGZpbmFsIEJ1bmRsZSBtQnVuZGxlOwotCi0gICAgcHVibGljIE1lZGlhTWV0YWRhdGEySW1wbChCdW5kbGUgYnVuZGxlKSB7Ci0gICAgICAgIG1JbnN0YW5jZSA9IG5ldyBNZWRpYU1ldGFkYXRhMih0aGlzKTsKLSAgICAgICAgbUJ1bmRsZSA9IGJ1bmRsZTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgTWVkaWFNZXRhZGF0YTIgZ2V0SW5zdGFuY2UoKSB7Ci0gICAgICAgIHJldHVybiBtSW5zdGFuY2U7Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIGJvb2xlYW4gY29udGFpbnNLZXlfaW1wbChTdHJpbmcga2V5KSB7Ci0gICAgICAgIGlmIChrZXkgPT0gbnVsbCkgewotICAgICAgICAgICAgdGhyb3cgbmV3IElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbigia2V5IHNob3VsZG4ndCBiZSBudWxsIik7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIG1CdW5kbGUuY29udGFpbnNLZXkoa2V5KTsKLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgQ2hhclNlcXVlbmNlIGdldFRleHRfaW1wbChAVGV4dEtleSBTdHJpbmcga2V5KSB7Ci0gICAgICAgIGlmIChrZXkgPT0gbnVsbCkgewotICAgICAgICAgICAgdGhyb3cgbmV3IElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbigia2V5IHNob3VsZG4ndCBiZSBudWxsIik7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIG1CdW5kbGUuZ2V0Q2hhclNlcXVlbmNlKGtleSk7Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIEBOdWxsYWJsZSBTdHJpbmcgZ2V0TWVkaWFJZF9pbXBsKCkgewotICAgICAgICByZXR1cm4gbUluc3RhbmNlLmdldFN0cmluZyhNRVRBREFUQV9LRVlfTUVESUFfSUQpOwotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyBTdHJpbmcgZ2V0U3RyaW5nX2ltcGwoQFRleHRLZXkgU3RyaW5nIGtleSkgewotICAgICAgICBpZiAoa2V5ID09IG51bGwpIHsKLSAgICAgICAgICAgIHRocm93IG5ldyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oImtleSBzaG91bGRuJ3QgYmUgbnVsbCIpOwotICAgICAgICB9Ci0gICAgICAgIENoYXJTZXF1ZW5jZSB0ZXh0ID0gbUJ1bmRsZS5nZXRDaGFyU2VxdWVuY2Uoa2V5KTsKLSAgICAgICAgaWYgKHRleHQgIT0gbnVsbCkgewotICAgICAgICAgICAgcmV0dXJuIHRleHQudG9TdHJpbmcoKTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gbnVsbDsKLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgbG9uZyBnZXRMb25nX2ltcGwoQExvbmdLZXkgU3RyaW5nIGtleSkgewotICAgICAgICBpZiAoa2V5ID09IG51bGwpIHsKLSAgICAgICAgICAgIHRocm93IG5ldyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oImtleSBzaG91bGRuJ3QgYmUgbnVsbCIpOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiBtQnVuZGxlLmdldExvbmcoa2V5LCAwKTsKLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgUmF0aW5nMiBnZXRSYXRpbmdfaW1wbChAUmF0aW5nS2V5IFN0cmluZyBrZXkpIHsKLSAgICAgICAgaWYgKGtleSA9PSBudWxsKSB7Ci0gICAgICAgICAgICB0aHJvdyBuZXcgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKCJrZXkgc2hvdWxkbid0IGJlIG51bGwiKTsKLSAgICAgICAgfQotICAgICAgICAvLyBUT0RPKGphZXdhbik6IEFkZCBiYWNrd2FyZCBjb21wYXRpYmlsaXR5Ci0gICAgICAgIFJhdGluZzIgcmF0aW5nID0gbnVsbDsKLSAgICAgICAgdHJ5IHsKLSAgICAgICAgICAgIHJhdGluZyA9IFJhdGluZzIuZnJvbUJ1bmRsZShtQnVuZGxlLmdldEJ1bmRsZShrZXkpKTsKLSAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKLSAgICAgICAgICAgIC8vIGlnbm9yZSwgdmFsdWUgd2FzIG5vdCBhIHJhdGluZwotICAgICAgICAgICAgTG9nLncoVEFHLCAiRmFpbGVkIHRvIHJldHJpZXZlIGEga2V5IGFzIFJhdGluZy4iLCBlKTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gcmF0aW5nOwotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyBmbG9hdCBnZXRGbG9hdF9pbXBsKEBGbG9hdEtleSBTdHJpbmcga2V5KSB7Ci0gICAgICAgIGlmIChrZXkgPT0gbnVsbCkgewotICAgICAgICAgICAgdGhyb3cgbmV3IElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbigia2V5IHNob3VsZG4ndCBiZSBudWxsIik7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIG1CdW5kbGUuZ2V0RmxvYXQoa2V5KTsKLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgQml0bWFwIGdldEJpdG1hcF9pbXBsKEBCaXRtYXBLZXkgU3RyaW5nIGtleSkgewotICAgICAgICBpZiAoa2V5ID09IG51bGwpIHsKLSAgICAgICAgICAgIHRocm93IG5ldyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oImtleSBzaG91bGRuJ3QgYmUgbnVsbCIpOwotICAgICAgICB9Ci0gICAgICAgIEJpdG1hcCBibXAgPSBudWxsOwotICAgICAgICB0cnkgewotICAgICAgICAgICAgYm1wID0gbUJ1bmRsZS5nZXRQYXJjZWxhYmxlKGtleSk7Ci0gICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7Ci0gICAgICAgICAgICAvLyBpZ25vcmUsIHZhbHVlIHdhcyBub3QgYSBiaXRtYXAKLSAgICAgICAgICAgIExvZy53KFRBRywgIkZhaWxlZCB0byByZXRyaWV2ZSBhIGtleSBhcyBCaXRtYXAuIiwgZSk7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIGJtcDsKLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgQnVuZGxlIGdldEV4dHJhc19pbXBsKCkgewotICAgICAgICB0cnkgewotICAgICAgICAgICAgcmV0dXJuIG1CdW5kbGUuZ2V0QnVuZGxlKE1FVEFEQVRBX0tFWV9FWFRSQVMpOwotICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZSkgewotICAgICAgICAgICAgLy8gaWdub3JlLCB2YWx1ZSB3YXMgbm90IGFuIGJ1bmRsZQotICAgICAgICAgICAgTG9nLncoVEFHLCAiRmFpbGVkIHRvIHJldHJpZXZlIGFuIGV4dHJhIik7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIG51bGw7Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIGludCBzaXplX2ltcGwoKSB7Ci0gICAgICAgIHJldHVybiBtQnVuZGxlLnNpemUoKTsKLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgU2V0PFN0cmluZz4ga2V5U2V0X2ltcGwoKSB7Ci0gICAgICAgIHJldHVybiBtQnVuZGxlLmtleVNldCgpOwotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyBCdW5kbGUgdG9CdW5kbGVfaW1wbCgpIHsKLSAgICAgICAgcmV0dXJuIG1CdW5kbGU7Ci0gICAgfQotCi0gICAgcHVibGljIHN0YXRpYyBNZWRpYU1ldGFkYXRhMiBmcm9tQnVuZGxlX2ltcGwoQnVuZGxlIGJ1bmRsZSkgewotICAgICAgICByZXR1cm4gKGJ1bmRsZSA9PSBudWxsKSA/IG51bGwgOiBuZXcgTWVkaWFNZXRhZGF0YTJJbXBsKGJ1bmRsZSkuZ2V0SW5zdGFuY2UoKTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGNsYXNzIEJ1aWxkZXJJbXBsIGltcGxlbWVudHMgTWVkaWFNZXRhZGF0YTJQcm92aWRlci5CdWlsZGVyUHJvdmlkZXIgewotICAgICAgICBwcml2YXRlIGZpbmFsIE1lZGlhTWV0YWRhdGEyLkJ1aWxkZXIgbUluc3RhbmNlOwotICAgICAgICBwcml2YXRlIGZpbmFsIEJ1bmRsZSBtQnVuZGxlOwotCi0gICAgICAgIHB1YmxpYyBCdWlsZGVySW1wbChNZWRpYU1ldGFkYXRhMi5CdWlsZGVyIGluc3RhbmNlKSB7Ci0gICAgICAgICAgICBtSW5zdGFuY2UgPSBpbnN0YW5jZTsKLSAgICAgICAgICAgIG1CdW5kbGUgPSBuZXcgQnVuZGxlKCk7Ci0gICAgICAgIH0KLQotICAgICAgICBwdWJsaWMgQnVpbGRlckltcGwoTWVkaWFNZXRhZGF0YTIuQnVpbGRlciBpbnN0YW5jZSwgTWVkaWFNZXRhZGF0YTIgc291cmNlKSB7Ci0gICAgICAgICAgICBpZiAoc291cmNlID09IG51bGwpIHsKLSAgICAgICAgICAgICAgICB0aHJvdyBuZXcgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKCJzb3VyY2Ugc2hvdWxkbid0IGJlIG51bGwiKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIG1JbnN0YW5jZSA9IGluc3RhbmNlOwotICAgICAgICAgICAgbUJ1bmRsZSA9IG5ldyBCdW5kbGUoc291cmNlLnRvQnVuZGxlKCkpOwotICAgICAgICB9Ci0KLSAgICAgICAgcHVibGljIEJ1aWxkZXJJbXBsKGludCBtYXhCaXRtYXBTaXplKSB7Ci0gICAgICAgICAgICBtSW5zdGFuY2UgPSBuZXcgTWVkaWFNZXRhZGF0YTIuQnVpbGRlcih0aGlzKTsKLSAgICAgICAgICAgIG1CdW5kbGUgPSBuZXcgQnVuZGxlKCk7Ci0KLSAgICAgICAgICAgIGZvciAoU3RyaW5nIGtleSA6IG1CdW5kbGUua2V5U2V0KCkpIHsKLSAgICAgICAgICAgICAgICBPYmplY3QgdmFsdWUgPSBtQnVuZGxlLmdldChrZXkpOwotICAgICAgICAgICAgICAgIGlmICh2YWx1ZSBpbnN0YW5jZW9mIEJpdG1hcCkgewotICAgICAgICAgICAgICAgICAgICBCaXRtYXAgYm1wID0gKEJpdG1hcCkgdmFsdWU7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChibXAuZ2V0SGVpZ2h0KCkgPiBtYXhCaXRtYXBTaXplIHx8IGJtcC5nZXRXaWR0aCgpID4gbWF4Qml0bWFwU2l6ZSkgewotICAgICAgICAgICAgICAgICAgICAgICAgbUluc3RhbmNlLnB1dEJpdG1hcChrZXksIHNjYWxlQml0bWFwKGJtcCwgbWF4Qml0bWFwU2l6ZSkpOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgIHB1YmxpYyBCdWlsZGVyIHB1dFRleHRfaW1wbChAVGV4dEtleSBTdHJpbmcga2V5LCBDaGFyU2VxdWVuY2UgdmFsdWUpIHsKLSAgICAgICAgICAgIGlmIChrZXkgPT0gbnVsbCkgewotICAgICAgICAgICAgICAgIHRocm93IG5ldyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oImtleSBzaG91bGRuJ3QgYmUgbnVsbCIpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYgKE1FVEFEQVRBX0tFWVNfVFlQRS5jb250YWluc0tleShrZXkpKSB7Ci0gICAgICAgICAgICAgICAgaWYgKE1FVEFEQVRBX0tFWVNfVFlQRS5nZXQoa2V5KSAhPSBNRVRBREFUQV9UWVBFX1RFWFQpIHsKLSAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbigiVGhlICIgKyBrZXkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICArICIga2V5IGNhbm5vdCBiZSB1c2VkIHRvIHB1dCBhIENoYXJTZXF1ZW5jZSIpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIG1CdW5kbGUucHV0Q2hhclNlcXVlbmNlKGtleSwgdmFsdWUpOwotICAgICAgICAgICAgcmV0dXJuIG1JbnN0YW5jZTsKLSAgICAgICAgfQotCi0gICAgICAgIEBPdmVycmlkZQotICAgICAgICBwdWJsaWMgQnVpbGRlciBwdXRTdHJpbmdfaW1wbChAVGV4dEtleSBTdHJpbmcga2V5LCBTdHJpbmcgdmFsdWUpIHsKLSAgICAgICAgICAgIGlmIChrZXkgPT0gbnVsbCkgewotICAgICAgICAgICAgICAgIHRocm93IG5ldyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oImtleSBzaG91bGRuJ3QgYmUgbnVsbCIpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYgKE1FVEFEQVRBX0tFWVNfVFlQRS5jb250YWluc0tleShrZXkpKSB7Ci0gICAgICAgICAgICAgICAgaWYgKE1FVEFEQVRBX0tFWVNfVFlQRS5nZXQoa2V5KSAhPSBNRVRBREFUQV9UWVBFX1RFWFQpIHsKLSAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbigiVGhlICIgKyBrZXkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICArICIga2V5IGNhbm5vdCBiZSB1c2VkIHRvIHB1dCBhIFN0cmluZyIpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIG1CdW5kbGUucHV0Q2hhclNlcXVlbmNlKGtleSwgdmFsdWUpOwotICAgICAgICAgICAgcmV0dXJuIG1JbnN0YW5jZTsKLSAgICAgICAgfQotCi0gICAgICAgIEBPdmVycmlkZQotICAgICAgICBwdWJsaWMgQnVpbGRlciBwdXRMb25nX2ltcGwoQExvbmdLZXkgU3RyaW5nIGtleSwgbG9uZyB2YWx1ZSkgewotICAgICAgICAgICAgaWYgKGtleSA9PSBudWxsKSB7Ci0gICAgICAgICAgICAgICAgdGhyb3cgbmV3IElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbigia2V5IHNob3VsZG4ndCBiZSBudWxsIik7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAoTUVUQURBVEFfS0VZU19UWVBFLmNvbnRhaW5zS2V5KGtleSkpIHsKLSAgICAgICAgICAgICAgICBpZiAoTUVUQURBVEFfS0VZU19UWVBFLmdldChrZXkpICE9IE1FVEFEQVRBX1RZUEVfTE9ORykgewotICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKCJUaGUgIiArIGtleQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICsgIiBrZXkgY2Fubm90IGJlIHVzZWQgdG8gcHV0IGEgbG9uZyIpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIG1CdW5kbGUucHV0TG9uZyhrZXksIHZhbHVlKTsKLSAgICAgICAgICAgIHJldHVybiBtSW5zdGFuY2U7Ci0gICAgICAgIH0KLQotICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgcHVibGljIEJ1aWxkZXIgcHV0UmF0aW5nX2ltcGwoQFJhdGluZ0tleSBTdHJpbmcga2V5LCBSYXRpbmcyIHZhbHVlKSB7Ci0gICAgICAgICAgICBpZiAoa2V5ID09IG51bGwpIHsKLSAgICAgICAgICAgICAgICB0aHJvdyBuZXcgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKCJrZXkgc2hvdWxkbid0IGJlIG51bGwiKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmIChNRVRBREFUQV9LRVlTX1RZUEUuY29udGFpbnNLZXkoa2V5KSkgewotICAgICAgICAgICAgICAgIGlmIChNRVRBREFUQV9LRVlTX1RZUEUuZ2V0KGtleSkgIT0gTUVUQURBVEFfVFlQRV9SQVRJTkcpIHsKLSAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbigiVGhlICIgKyBrZXkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICArICIga2V5IGNhbm5vdCBiZSB1c2VkIHRvIHB1dCBhIFJhdGluZyIpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIG1CdW5kbGUucHV0QnVuZGxlKGtleSwgdmFsdWUudG9CdW5kbGUoKSk7Ci0gICAgICAgICAgICByZXR1cm4gbUluc3RhbmNlOwotICAgICAgICB9Ci0KLSAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgIHB1YmxpYyBCdWlsZGVyIHB1dEJpdG1hcF9pbXBsKEBCaXRtYXBLZXkgU3RyaW5nIGtleSwgQml0bWFwIHZhbHVlKSB7Ci0gICAgICAgICAgICBpZiAoa2V5ID09IG51bGwpIHsKLSAgICAgICAgICAgICAgICB0aHJvdyBuZXcgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKCJrZXkgc2hvdWxkbid0IGJlIG51bGwiKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmIChNRVRBREFUQV9LRVlTX1RZUEUuY29udGFpbnNLZXkoa2V5KSkgewotICAgICAgICAgICAgICAgIGlmIChNRVRBREFUQV9LRVlTX1RZUEUuZ2V0KGtleSkgIT0gTUVUQURBVEFfVFlQRV9CSVRNQVApIHsKLSAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbigiVGhlICIgKyBrZXkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICArICIga2V5IGNhbm5vdCBiZSB1c2VkIHRvIHB1dCBhIEJpdG1hcCIpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIG1CdW5kbGUucHV0UGFyY2VsYWJsZShrZXksIHZhbHVlKTsKLSAgICAgICAgICAgIHJldHVybiBtSW5zdGFuY2U7Ci0gICAgICAgIH0KLQotICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgcHVibGljIEJ1aWxkZXIgcHV0RmxvYXRfaW1wbChARmxvYXRLZXkgU3RyaW5nIGtleSwgZmxvYXQgdmFsdWUpIHsKLSAgICAgICAgICAgIGlmIChrZXkgPT0gbnVsbCkgewotICAgICAgICAgICAgICAgIHRocm93IG5ldyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oImtleSBzaG91bGRuJ3QgYmUgbnVsbCIpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYgKE1FVEFEQVRBX0tFWVNfVFlQRS5jb250YWluc0tleShrZXkpKSB7Ci0gICAgICAgICAgICAgICAgaWYgKE1FVEFEQVRBX0tFWVNfVFlQRS5nZXQoa2V5KSAhPSBNRVRBREFUQV9UWVBFX0ZMT0FUKSB7Ci0gICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oIlRoZSAiICsga2V5Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgKyAiIGtleSBjYW5ub3QgYmUgdXNlZCB0byBwdXQgYSBmbG9hdCIpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIG1CdW5kbGUucHV0RmxvYXQoa2V5LCB2YWx1ZSk7Ci0gICAgICAgICAgICByZXR1cm4gbUluc3RhbmNlOwotICAgICAgICB9Ci0KLSAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgIHB1YmxpYyBCdWlsZGVyIHNldEV4dHJhc19pbXBsKEJ1bmRsZSBidW5kbGUpIHsKLSAgICAgICAgICAgIG1CdW5kbGUucHV0QnVuZGxlKE1FVEFEQVRBX0tFWV9FWFRSQVMsIGJ1bmRsZSk7Ci0gICAgICAgICAgICByZXR1cm4gbUluc3RhbmNlOwotICAgICAgICB9Ci0KLSAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgIHB1YmxpYyBNZWRpYU1ldGFkYXRhMiBidWlsZF9pbXBsKCkgewotICAgICAgICAgICAgcmV0dXJuIG5ldyBNZWRpYU1ldGFkYXRhMkltcGwobUJ1bmRsZSkuZ2V0SW5zdGFuY2UoKTsKLSAgICAgICAgfQotCi0gICAgICAgIHByaXZhdGUgQml0bWFwIHNjYWxlQml0bWFwKEJpdG1hcCBibXAsIGludCBtYXhTaXplKSB7Ci0gICAgICAgICAgICBmbG9hdCBtYXhTaXplRiA9IG1heFNpemU7Ci0gICAgICAgICAgICBmbG9hdCB3aWR0aFNjYWxlID0gbWF4U2l6ZUYgLyBibXAuZ2V0V2lkdGgoKTsKLSAgICAgICAgICAgIGZsb2F0IGhlaWdodFNjYWxlID0gbWF4U2l6ZUYgLyBibXAuZ2V0SGVpZ2h0KCk7Ci0gICAgICAgICAgICBmbG9hdCBzY2FsZSA9IE1hdGgubWluKHdpZHRoU2NhbGUsIGhlaWdodFNjYWxlKTsKLSAgICAgICAgICAgIGludCBoZWlnaHQgPSAoaW50KSAoYm1wLmdldEhlaWdodCgpICogc2NhbGUpOwotICAgICAgICAgICAgaW50IHdpZHRoID0gKGludCkgKGJtcC5nZXRXaWR0aCgpICogc2NhbGUpOwotICAgICAgICAgICAgcmV0dXJuIEJpdG1hcC5jcmVhdGVTY2FsZWRCaXRtYXAoYm1wLCB3aWR0aCwgaGVpZ2h0LCB0cnVlKTsKLSAgICAgICAgfQotICAgIH0KLX0KLQpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvTWVkaWFDb21wb25lbnRzL3NyYy9jb20vYW5kcm9pZC9tZWRpYS9NZWRpYVBsYXlsaXN0QWdlbnRJbXBsLmphdmEgYi9wYWNrYWdlcy9NZWRpYUNvbXBvbmVudHMvc3JjL2NvbS9hbmRyb2lkL21lZGlhL01lZGlhUGxheWxpc3RBZ2VudEltcGwuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZGZkNGUxYS4uMDAwMDAwMAotLS0gYS9wYWNrYWdlcy9NZWRpYUNvbXBvbmVudHMvc3JjL2NvbS9hbmRyb2lkL21lZGlhL01lZGlhUGxheWxpc3RBZ2VudEltcGwuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDIyNCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IDIwMTggVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAotICoKLSAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwotICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgotICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0gKgotICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLSAqCi0gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCi0gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAotICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCi0gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCi0gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KLSAqLwotCi1wYWNrYWdlIGNvbS5hbmRyb2lkLm1lZGlhOwotCi1pbXBvcnQgYW5kcm9pZC5hbm5vdGF0aW9uLkNhbGxiYWNrRXhlY3V0b3I7Ci1pbXBvcnQgYW5kcm9pZC5hbm5vdGF0aW9uLk5vbk51bGw7Ci1pbXBvcnQgYW5kcm9pZC5hbm5vdGF0aW9uLk51bGxhYmxlOwotaW1wb3J0IGFuZHJvaWQubWVkaWEuRGF0YVNvdXJjZURlc2M7Ci1pbXBvcnQgYW5kcm9pZC5tZWRpYS5NZWRpYUl0ZW0yOwotaW1wb3J0IGFuZHJvaWQubWVkaWEuTWVkaWFNZXRhZGF0YTI7Ci1pbXBvcnQgYW5kcm9pZC5tZWRpYS5NZWRpYVBsYXlsaXN0QWdlbnQ7Ci1pbXBvcnQgYW5kcm9pZC5tZWRpYS5NZWRpYVBsYXlsaXN0QWdlbnQuUGxheWxpc3RFdmVudENhbGxiYWNrOwotaW1wb3J0IGFuZHJvaWQubWVkaWEudXBkYXRlLk1lZGlhUGxheWxpc3RBZ2VudFByb3ZpZGVyOwotaW1wb3J0IGFuZHJvaWQudXRpbC5BcnJheU1hcDsKLWltcG9ydCBhbmRyb2lkLnV0aWwuTG9nOwotCi1pbXBvcnQgY29tLmFuZHJvaWQuaW50ZXJuYWwuYW5ub3RhdGlvbnMuR3VhcmRlZEJ5OwotCi1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLmNvbmN1cnJlbnQuRXhlY3V0b3I7Ci0KLXB1YmxpYyBjbGFzcyBNZWRpYVBsYXlsaXN0QWdlbnRJbXBsIGltcGxlbWVudHMgTWVkaWFQbGF5bGlzdEFnZW50UHJvdmlkZXIgewotICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBUQUcgPSAiTWVkaWFQbGF5bGlzdEFnZW50IjsKLQotICAgIHByaXZhdGUgZmluYWwgTWVkaWFQbGF5bGlzdEFnZW50IG1JbnN0YW5jZTsKLQotICAgIHByaXZhdGUgZmluYWwgT2JqZWN0IG1Mb2NrID0gbmV3IE9iamVjdCgpOwotICAgIEBHdWFyZGVkQnkoIm1Mb2NrIikKLSAgICBwcml2YXRlIGZpbmFsIEFycmF5TWFwPFBsYXlsaXN0RXZlbnRDYWxsYmFjaywgRXhlY3V0b3I+IG1DYWxsYmFja3MgPSBuZXcgQXJyYXlNYXA8PigpOwotCi0gICAgcHVibGljIE1lZGlhUGxheWxpc3RBZ2VudEltcGwoTWVkaWFQbGF5bGlzdEFnZW50IGluc3RhbmNlKSB7Ci0gICAgICAgIG1JbnN0YW5jZSA9IGluc3RhbmNlOwotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIGZpbmFsIHB1YmxpYyB2b2lkIHJlZ2lzdGVyUGxheWxpc3RFdmVudENhbGxiYWNrX2ltcGwoCi0gICAgICAgICAgICBATm9uTnVsbCBAQ2FsbGJhY2tFeGVjdXRvciBFeGVjdXRvciBleGVjdXRvciwgQE5vbk51bGwgUGxheWxpc3RFdmVudENhbGxiYWNrIGNhbGxiYWNrKSB7Ci0gICAgICAgIGlmIChleGVjdXRvciA9PSBudWxsKSB7Ci0gICAgICAgICAgICB0aHJvdyBuZXcgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKCJleGVjdXRvciBzaG91bGRuJ3QgYmUgbnVsbCIpOwotICAgICAgICB9Ci0gICAgICAgIGlmIChjYWxsYmFjayA9PSBudWxsKSB7Ci0gICAgICAgICAgICB0aHJvdyBuZXcgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKCJjYWxsYmFjayBzaG91bGRuJ3QgYmUgbnVsbCIpOwotICAgICAgICB9Ci0KLSAgICAgICAgc3luY2hyb25pemVkIChtTG9jaykgewotICAgICAgICAgICAgaWYgKG1DYWxsYmFja3MuZ2V0KGNhbGxiYWNrKSAhPSBudWxsKSB7Ci0gICAgICAgICAgICAgICAgTG9nLncoVEFHLCAiY2FsbGJhY2sgaXMgYWxyZWFkeSBhZGRlZC4gSWdub3JpbmcuIik7Ci0gICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgbUNhbGxiYWNrcy5wdXQoY2FsbGJhY2ssIGV4ZWN1dG9yKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIGZpbmFsIHB1YmxpYyB2b2lkIHVucmVnaXN0ZXJQbGF5bGlzdEV2ZW50Q2FsbGJhY2tfaW1wbCgKLSAgICAgICAgICAgIEBOb25OdWxsIFBsYXlsaXN0RXZlbnRDYWxsYmFjayBjYWxsYmFjaykgewotICAgICAgICBpZiAoY2FsbGJhY2sgPT0gbnVsbCkgewotICAgICAgICAgICAgdGhyb3cgbmV3IElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbigiY2FsbGJhY2sgc2hvdWxkbid0IGJlIG51bGwiKTsKLSAgICAgICAgfQotICAgICAgICBzeW5jaHJvbml6ZWQgKG1Mb2NrKSB7Ci0gICAgICAgICAgICBtQ2FsbGJhY2tzLnJlbW92ZShjYWxsYmFjayk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBmaW5hbCBwdWJsaWMgdm9pZCBub3RpZnlQbGF5bGlzdENoYW5nZWRfaW1wbCgpIHsKLSAgICAgICAgQXJyYXlNYXA8UGxheWxpc3RFdmVudENhbGxiYWNrLCBFeGVjdXRvcj4gY2FsbGJhY2tzID0gZ2V0Q2FsbGJhY2tzKCk7Ci0gICAgICAgIExpc3Q8TWVkaWFJdGVtMj4gcGxheWxpc3Q9IG1JbnN0YW5jZS5nZXRQbGF5bGlzdCgpOwotICAgICAgICBNZWRpYU1ldGFkYXRhMiBtZXRhZGF0YSA9IG1JbnN0YW5jZS5nZXRQbGF5bGlzdE1ldGFkYXRhKCk7Ci0gICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgY2FsbGJhY2tzLnNpemUoKTsgaSsrKSB7Ci0gICAgICAgICAgICBmaW5hbCBQbGF5bGlzdEV2ZW50Q2FsbGJhY2sgY2FsbGJhY2sgPSBjYWxsYmFja3Mua2V5QXQoaSk7Ci0gICAgICAgICAgICBmaW5hbCBFeGVjdXRvciBleGVjdXRvciA9IGNhbGxiYWNrcy52YWx1ZUF0KGkpOwotICAgICAgICAgICAgZXhlY3V0b3IuZXhlY3V0ZSgoKSAtPiBjYWxsYmFjay5vblBsYXlsaXN0Q2hhbmdlZCgKLSAgICAgICAgICAgICAgICAgICAgbUluc3RhbmNlLCBwbGF5bGlzdCwgbWV0YWRhdGEpKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIGZpbmFsIHB1YmxpYyB2b2lkIG5vdGlmeVBsYXlsaXN0TWV0YWRhdGFDaGFuZ2VkX2ltcGwoKSB7Ci0gICAgICAgIEFycmF5TWFwPFBsYXlsaXN0RXZlbnRDYWxsYmFjaywgRXhlY3V0b3I+IGNhbGxiYWNrcyA9IGdldENhbGxiYWNrcygpOwotICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGNhbGxiYWNrcy5zaXplKCk7IGkrKykgewotICAgICAgICAgICAgZmluYWwgUGxheWxpc3RFdmVudENhbGxiYWNrIGNhbGxiYWNrID0gY2FsbGJhY2tzLmtleUF0KGkpOwotICAgICAgICAgICAgZmluYWwgRXhlY3V0b3IgZXhlY3V0b3IgPSBjYWxsYmFja3MudmFsdWVBdChpKTsKLSAgICAgICAgICAgIGV4ZWN1dG9yLmV4ZWN1dGUoKCkgLT4gY2FsbGJhY2sub25QbGF5bGlzdE1ldGFkYXRhQ2hhbmdlZCgKLSAgICAgICAgICAgICAgICAgICAgbUluc3RhbmNlLCBtSW5zdGFuY2UuZ2V0UGxheWxpc3RNZXRhZGF0YSgpKSk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBmaW5hbCBwdWJsaWMgdm9pZCBub3RpZnlTaHVmZmxlTW9kZUNoYW5nZWRfaW1wbCgpIHsKLSAgICAgICAgQXJyYXlNYXA8UGxheWxpc3RFdmVudENhbGxiYWNrLCBFeGVjdXRvcj4gY2FsbGJhY2tzID0gZ2V0Q2FsbGJhY2tzKCk7Ci0gICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgY2FsbGJhY2tzLnNpemUoKTsgaSsrKSB7Ci0gICAgICAgICAgICBmaW5hbCBQbGF5bGlzdEV2ZW50Q2FsbGJhY2sgY2FsbGJhY2sgPSBjYWxsYmFja3Mua2V5QXQoaSk7Ci0gICAgICAgICAgICBmaW5hbCBFeGVjdXRvciBleGVjdXRvciA9IGNhbGxiYWNrcy52YWx1ZUF0KGkpOwotICAgICAgICAgICAgZXhlY3V0b3IuZXhlY3V0ZSgoKSAtPiBjYWxsYmFjay5vblNodWZmbGVNb2RlQ2hhbmdlZCgKLSAgICAgICAgICAgICAgICAgICAgbUluc3RhbmNlLCBtSW5zdGFuY2UuZ2V0U2h1ZmZsZU1vZGUoKSkpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgZmluYWwgcHVibGljIHZvaWQgbm90aWZ5UmVwZWF0TW9kZUNoYW5nZWRfaW1wbCgpIHsKLSAgICAgICAgQXJyYXlNYXA8UGxheWxpc3RFdmVudENhbGxiYWNrLCBFeGVjdXRvcj4gY2FsbGJhY2tzID0gZ2V0Q2FsbGJhY2tzKCk7Ci0gICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgY2FsbGJhY2tzLnNpemUoKTsgaSsrKSB7Ci0gICAgICAgICAgICBmaW5hbCBQbGF5bGlzdEV2ZW50Q2FsbGJhY2sgY2FsbGJhY2sgPSBjYWxsYmFja3Mua2V5QXQoaSk7Ci0gICAgICAgICAgICBmaW5hbCBFeGVjdXRvciBleGVjdXRvciA9IGNhbGxiYWNrcy52YWx1ZUF0KGkpOwotICAgICAgICAgICAgZXhlY3V0b3IuZXhlY3V0ZSgoKSAtPiBjYWxsYmFjay5vblJlcGVhdE1vZGVDaGFuZ2VkKAotICAgICAgICAgICAgICAgICAgICBtSW5zdGFuY2UsIG1JbnN0YW5jZS5nZXRSZXBlYXRNb2RlKCkpKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyBATnVsbGFibGUgTGlzdDxNZWRpYUl0ZW0yPiBnZXRQbGF5bGlzdF9pbXBsKCkgewotICAgICAgICAvLyBlbXB0eSBpbXBsZW1lbnRhdGlvbgotICAgICAgICByZXR1cm4gbnVsbDsKLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgdm9pZCBzZXRQbGF5bGlzdF9pbXBsKEBOb25OdWxsIExpc3Q8TWVkaWFJdGVtMj4gbGlzdCwKLSAgICAgICAgICAgIEBOdWxsYWJsZSBNZWRpYU1ldGFkYXRhMiBtZXRhZGF0YSkgewotICAgICAgICAvLyBlbXB0eSBpbXBsZW1lbnRhdGlvbgotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyBATnVsbGFibGUgTWVkaWFNZXRhZGF0YTIgZ2V0UGxheWxpc3RNZXRhZGF0YV9pbXBsKCkgewotICAgICAgICAvLyBlbXB0eSBpbXBsZW1lbnRhdGlvbgotICAgICAgICByZXR1cm4gbnVsbDsKLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgdm9pZCB1cGRhdGVQbGF5bGlzdE1ldGFkYXRhX2ltcGwoQE51bGxhYmxlIE1lZGlhTWV0YWRhdGEyIG1ldGFkYXRhKSB7Ci0gICAgICAgIC8vIGVtcHR5IGltcGxlbWVudGF0aW9uCi0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIHZvaWQgYWRkUGxheWxpc3RJdGVtX2ltcGwoaW50IGluZGV4LCBATm9uTnVsbCBNZWRpYUl0ZW0yIGl0ZW0pIHsKLSAgICAgICAgLy8gZW1wdHkgaW1wbGVtZW50YXRpb24KLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgdm9pZCByZW1vdmVQbGF5bGlzdEl0ZW1faW1wbChATm9uTnVsbCBNZWRpYUl0ZW0yIGl0ZW0pIHsKLSAgICAgICAgLy8gZW1wdHkgaW1wbGVtZW50YXRpb24KLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgdm9pZCByZXBsYWNlUGxheWxpc3RJdGVtX2ltcGwoaW50IGluZGV4LCBATm9uTnVsbCBNZWRpYUl0ZW0yIGl0ZW0pIHsKLSAgICAgICAgLy8gZW1wdHkgaW1wbGVtZW50YXRpb24KLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgdm9pZCBza2lwVG9QbGF5bGlzdEl0ZW1faW1wbChATm9uTnVsbCBNZWRpYUl0ZW0yIGl0ZW0pIHsKLSAgICAgICAgLy8gZW1wdHkgaW1wbGVtZW50YXRpb24KLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgdm9pZCBza2lwVG9QcmV2aW91c0l0ZW1faW1wbCgpIHsKLSAgICAgICAgLy8gZW1wdHkgaW1wbGVtZW50YXRpb24KLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgdm9pZCBza2lwVG9OZXh0SXRlbV9pbXBsKCkgewotICAgICAgICAvLyBlbXB0eSBpbXBsZW1lbnRhdGlvbgotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyBpbnQgZ2V0UmVwZWF0TW9kZV9pbXBsKCkgewotICAgICAgICByZXR1cm4gTWVkaWFQbGF5bGlzdEFnZW50LlJFUEVBVF9NT0RFX05PTkU7Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIHZvaWQgc2V0UmVwZWF0TW9kZV9pbXBsKGludCByZXBlYXRNb2RlKSB7Ci0gICAgICAgIC8vIGVtcHR5IGltcGxlbWVudGF0aW9uCi0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIGludCBnZXRTaHVmZmxlTW9kZV9pbXBsKCkgewotICAgICAgICAvLyBlbXB0eSBpbXBsZW1lbnRhdGlvbgotICAgICAgICByZXR1cm4gTWVkaWFQbGF5bGlzdEFnZW50LlNIVUZGTEVfTU9ERV9OT05FOwotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyB2b2lkIHNldFNodWZmbGVNb2RlX2ltcGwoaW50IHNodWZmbGVNb2RlKSB7Ci0gICAgICAgIC8vIGVtcHR5IGltcGxlbWVudGF0aW9uCi0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIEBOdWxsYWJsZSBNZWRpYUl0ZW0yIGdldE1lZGlhSXRlbV9pbXBsKEBOb25OdWxsIERhdGFTb3VyY2VEZXNjIGRzZCkgewotICAgICAgICBpZiAoZHNkID09IG51bGwpIHsKLSAgICAgICAgICAgIHRocm93IG5ldyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oImRzZCBzaG91bGRuJ3QgYmUgbnVsbCIpOwotICAgICAgICB9Ci0gICAgICAgIExpc3Q8TWVkaWFJdGVtMj4gaXRlbUxpc3QgPSBtSW5zdGFuY2UuZ2V0UGxheWxpc3QoKTsKLSAgICAgICAgaWYgKGl0ZW1MaXN0ID09IG51bGwpIHsKLSAgICAgICAgICAgIHJldHVybiBudWxsOwotICAgICAgICB9Ci0gICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgaXRlbUxpc3Quc2l6ZSgpOyBpKyspIHsKLSAgICAgICAgICAgIE1lZGlhSXRlbTIgaXRlbSA9IGl0ZW1MaXN0LmdldChpKTsKLSAgICAgICAgICAgIGlmIChpdGVtICE9IG51bGwgJiYgaXRlbS5nZXREYXRhU291cmNlRGVzYygpID09IGRzZCkgewotICAgICAgICAgICAgICAgIHJldHVybiBpdGVtOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIHJldHVybiBudWxsOwotICAgIH0KLQotICAgIHByaXZhdGUgQXJyYXlNYXA8UGxheWxpc3RFdmVudENhbGxiYWNrLCBFeGVjdXRvcj4gZ2V0Q2FsbGJhY2tzKCkgewotICAgICAgICBBcnJheU1hcDxQbGF5bGlzdEV2ZW50Q2FsbGJhY2ssIEV4ZWN1dG9yPiBjYWxsYmFja3MgPSBuZXcgQXJyYXlNYXA8PigpOwotICAgICAgICBzeW5jaHJvbml6ZWQgKG1Mb2NrKSB7Ci0gICAgICAgICAgICBjYWxsYmFja3MucHV0QWxsKG1DYWxsYmFja3MpOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiBjYWxsYmFja3M7Ci0gICAgfQotfQpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvTWVkaWFDb21wb25lbnRzL3NyYy9jb20vYW5kcm9pZC9tZWRpYS9NZWRpYVNlc3Npb24ySW1wbC5qYXZhIGIvcGFja2FnZXMvTWVkaWFDb21wb25lbnRzL3NyYy9jb20vYW5kcm9pZC9tZWRpYS9NZWRpYVNlc3Npb24ySW1wbC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0ZWM2MDQyLi4wMDAwMDAwCi0tLSBhL3BhY2thZ2VzL01lZGlhQ29tcG9uZW50cy9zcmMvY29tL2FuZHJvaWQvbWVkaWEvTWVkaWFTZXNzaW9uMkltcGwuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDE1NTUgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAyMDE4IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKLSAqCi0gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKLSAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KLSAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotICoKLSAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0gKgotICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQotICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKLSAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgotICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAotICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCi0gKi8KLQotcGFja2FnZSBjb20uYW5kcm9pZC5tZWRpYTsKLQotaW1wb3J0IHN0YXRpYyBhbmRyb2lkLm1lZGlhLlNlc3Npb25Db21tYW5kMi5DT01NQU5EX0NPREVfQ1VTVE9NOwotaW1wb3J0IHN0YXRpYyBhbmRyb2lkLm1lZGlhLlNlc3Npb25Ub2tlbjIuVFlQRV9MSUJSQVJZX1NFUlZJQ0U7Ci1pbXBvcnQgc3RhdGljIGFuZHJvaWQubWVkaWEuU2Vzc2lvblRva2VuMi5UWVBFX1NFU1NJT047Ci1pbXBvcnQgc3RhdGljIGFuZHJvaWQubWVkaWEuU2Vzc2lvblRva2VuMi5UWVBFX1NFU1NJT05fU0VSVklDRTsKLQotaW1wb3J0IGFuZHJvaWQuYW5ub3RhdGlvbi5Ob25OdWxsOwotaW1wb3J0IGFuZHJvaWQuYW5ub3RhdGlvbi5OdWxsYWJsZTsKLWltcG9ydCBhbmRyb2lkLmFwcC5QZW5kaW5nSW50ZW50OwotaW1wb3J0IGFuZHJvaWQuY29udGVudC5Db250ZXh0OwotaW1wb3J0IGFuZHJvaWQuY29udGVudC5JbnRlbnQ7Ci1pbXBvcnQgYW5kcm9pZC5jb250ZW50LnBtLlBhY2thZ2VNYW5hZ2VyOwotaW1wb3J0IGFuZHJvaWQuY29udGVudC5wbS5SZXNvbHZlSW5mbzsKLWltcG9ydCBhbmRyb2lkLm1lZGlhLkF1ZGlvQXR0cmlidXRlczsKLWltcG9ydCBhbmRyb2lkLm1lZGlhLkF1ZGlvRm9jdXNSZXF1ZXN0OwotaW1wb3J0IGFuZHJvaWQubWVkaWEuQXVkaW9NYW5hZ2VyOwotaW1wb3J0IGFuZHJvaWQubWVkaWEuRGF0YVNvdXJjZURlc2M7Ci1pbXBvcnQgYW5kcm9pZC5tZWRpYS5NZWRpYUNvbnRyb2xsZXIyOwotaW1wb3J0IGFuZHJvaWQubWVkaWEuTWVkaWFDb250cm9sbGVyMi5QbGF5YmFja0luZm87Ci1pbXBvcnQgYW5kcm9pZC5tZWRpYS5NZWRpYUl0ZW0yOwotaW1wb3J0IGFuZHJvaWQubWVkaWEuTWVkaWFMaWJyYXJ5U2VydmljZTI7Ci1pbXBvcnQgYW5kcm9pZC5tZWRpYS5NZWRpYU1ldGFkYXRhMjsKLWltcG9ydCBhbmRyb2lkLm1lZGlhLk1lZGlhUGxheWVyQmFzZTsKLWltcG9ydCBhbmRyb2lkLm1lZGlhLk1lZGlhUGxheWVyQmFzZS5QbGF5ZXJFdmVudENhbGxiYWNrOwotaW1wb3J0IGFuZHJvaWQubWVkaWEuTWVkaWFQbGF5ZXJCYXNlLlBsYXllclN0YXRlOwotaW1wb3J0IGFuZHJvaWQubWVkaWEuTWVkaWFQbGF5bGlzdEFnZW50OwotaW1wb3J0IGFuZHJvaWQubWVkaWEuTWVkaWFQbGF5bGlzdEFnZW50LlBsYXlsaXN0RXZlbnRDYWxsYmFjazsKLWltcG9ydCBhbmRyb2lkLm1lZGlhLk1lZGlhU2Vzc2lvbjI7Ci1pbXBvcnQgYW5kcm9pZC5tZWRpYS5NZWRpYVNlc3Npb24yLkJ1aWxkZXI7Ci1pbXBvcnQgYW5kcm9pZC5tZWRpYS5TZXNzaW9uQ29tbWFuZDI7Ci1pbXBvcnQgYW5kcm9pZC5tZWRpYS5NZWRpYVNlc3Npb24yLkNvbW1hbmRCdXR0b247Ci1pbXBvcnQgYW5kcm9pZC5tZWRpYS5TZXNzaW9uQ29tbWFuZEdyb3VwMjsKLWltcG9ydCBhbmRyb2lkLm1lZGlhLk1lZGlhU2Vzc2lvbjIuQ29udHJvbGxlckluZm87Ci1pbXBvcnQgYW5kcm9pZC5tZWRpYS5NZWRpYVNlc3Npb24yLk9uRGF0YVNvdXJjZU1pc3NpbmdIZWxwZXI7Ci1pbXBvcnQgYW5kcm9pZC5tZWRpYS5NZWRpYVNlc3Npb24yLlNlc3Npb25DYWxsYmFjazsKLWltcG9ydCBhbmRyb2lkLm1lZGlhLk1lZGlhU2Vzc2lvblNlcnZpY2UyOwotaW1wb3J0IGFuZHJvaWQubWVkaWEuU2Vzc2lvblRva2VuMjsKLWltcG9ydCBhbmRyb2lkLm1lZGlhLlZvbHVtZVByb3ZpZGVyMjsKLWltcG9ydCBhbmRyb2lkLm1lZGlhLnNlc3Npb24uTWVkaWFTZXNzaW9uTWFuYWdlcjsKLWltcG9ydCBhbmRyb2lkLm1lZGlhLnVwZGF0ZS5NZWRpYVNlc3Npb24yUHJvdmlkZXI7Ci1pbXBvcnQgYW5kcm9pZC5vcy5CdW5kbGU7Ci1pbXBvcnQgYW5kcm9pZC5vcy5JQmluZGVyOwotaW1wb3J0IGFuZHJvaWQub3MuUGFyY2VsYWJsZTsKLWltcG9ydCBhbmRyb2lkLm9zLlByb2Nlc3M7Ci1pbXBvcnQgYW5kcm9pZC5vcy5SZXN1bHRSZWNlaXZlcjsKLWltcG9ydCBhbmRyb2lkLnN1cHBvcnQuYW5ub3RhdGlvbi5HdWFyZGVkQnk7Ci1pbXBvcnQgYW5kcm9pZC50ZXh0LlRleHRVdGlsczsKLWltcG9ydCBhbmRyb2lkLnV0aWwuTG9nOwotCi1pbXBvcnQgamF2YS5sYW5nLnJlZi5XZWFrUmVmZXJlbmNlOwotaW1wb3J0IGphdmEubGFuZy5yZWZsZWN0LkZpZWxkOwotaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLkNvbGxlY3Rpb25zOwotaW1wb3J0IGphdmEudXRpbC5IYXNoU2V0OwotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotaW1wb3J0IGphdmEudXRpbC5Ob1N1Y2hFbGVtZW50RXhjZXB0aW9uOwotaW1wb3J0IGphdmEudXRpbC5TZXQ7Ci1pbXBvcnQgamF2YS51dGlsLmNvbmN1cnJlbnQuRXhlY3V0b3I7Ci0KLXB1YmxpYyBjbGFzcyBNZWRpYVNlc3Npb24ySW1wbCBpbXBsZW1lbnRzIE1lZGlhU2Vzc2lvbjJQcm92aWRlciB7Ci0gICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFRBRyA9ICJNZWRpYVNlc3Npb24yIjsKLSAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBib29sZWFuIERFQlVHID0gdHJ1ZTsvL0xvZy5pc0xvZ2dhYmxlKFRBRywgTG9nLkRFQlVHKTsKLQotICAgIHByaXZhdGUgZmluYWwgT2JqZWN0IG1Mb2NrID0gbmV3IE9iamVjdCgpOwotCi0gICAgcHJpdmF0ZSBmaW5hbCBNZWRpYVNlc3Npb24yIG1JbnN0YW5jZTsKLSAgICBwcml2YXRlIGZpbmFsIENvbnRleHQgbUNvbnRleHQ7Ci0gICAgcHJpdmF0ZSBmaW5hbCBTdHJpbmcgbUlkOwotICAgIHByaXZhdGUgZmluYWwgRXhlY3V0b3IgbUNhbGxiYWNrRXhlY3V0b3I7Ci0gICAgcHJpdmF0ZSBmaW5hbCBTZXNzaW9uQ2FsbGJhY2sgbUNhbGxiYWNrOwotICAgIHByaXZhdGUgZmluYWwgTWVkaWFTZXNzaW9uMlN0dWIgbVNlc3Npb25TdHViOwotICAgIHByaXZhdGUgZmluYWwgU2Vzc2lvblRva2VuMiBtU2Vzc2lvblRva2VuOwotICAgIHByaXZhdGUgZmluYWwgQXVkaW9NYW5hZ2VyIG1BdWRpb01hbmFnZXI7Ci0gICAgcHJpdmF0ZSBmaW5hbCBQZW5kaW5nSW50ZW50IG1TZXNzaW9uQWN0aXZpdHk7Ci0gICAgcHJpdmF0ZSBmaW5hbCBQbGF5ZXJFdmVudENhbGxiYWNrIG1QbGF5ZXJFdmVudENhbGxiYWNrOwotICAgIHByaXZhdGUgZmluYWwgUGxheWxpc3RFdmVudENhbGxiYWNrIG1QbGF5bGlzdEV2ZW50Q2FsbGJhY2s7Ci0KLSAgICAvLyBtUGxheWVyIGlzIHNldCB0byBudWxsIHdoZW4gdGhlIHNlc3Npb24gaXMgY2xvc2VkLCBhbmQgd2Ugc2hvdWxkbid0IHRocm93IGFuIGV4Y2VwdGlvbgotICAgIC8vIG5vciBsZWF2ZSBsb2cgYWx3YXlzIGZvciB1c2luZyBtUGxheWVyIHdoZW4gaXQncyBudWxsLiBIZXJlJ3MgdGhlIHJlYXNvbi4KLSAgICAvLyBXaGVuIGEgTWVkaWFTZXNzaW9uMiBpcyBjbG9zZWQsIHRoZXJlIGNvdWxkIGJlIGEgcGVuZGVkIG9wZXJhdGlvbiBpbiB0aGUgc2Vzc2lvbiBjYWxsYmFjawotICAgIC8vIGV4ZWN1dG9yIHRoYXQgbWF5IHdhbnQgdG8gYWNjZXNzIHRoZSBwbGF5ZXIuIEhlcmUncyB0aGUgc2FtcGxlIGNvZGUgc25pcHBldCBmb3IgdGhhdC4KLSAgICAvLwotICAgIC8vICAgcHVibGljIHZvaWQgb25Gb28oKSB7Ci0gICAgLy8gICAgIGlmIChtUGxheWVyID09IG51bGwpIHJldHVybjsgLy8gZmlyc3QgY2hlY2sKLSAgICAvLyAgICAgbVNlc3Npb25DYWxsYmFja0V4ZWN1dG9yLmV4ZWN1dG9yKCgpIC0+IHsKLSAgICAvLyAgICAgICAvLyBFcnJvci4gU2Vzc2lvbiBtYXkgYmUgY2xvc2VkIGFuZCBtUGxheWVyIGNhbiBiZSBudWxsIGhlcmUuCi0gICAgLy8gICAgICAgbVBsYXllci5mb28oKTsKLSAgICAvLyAgICAgfSk7Ci0gICAgLy8gICB9Ci0gICAgLy8KLSAgICAvLyBCeSBhZGRpbmcgcHJvdGVjdGl2ZSBjb2RlLCB3ZSBjYW4gYWxzbyBwcm90ZWN0IEFQSXMgZnJvbSBiZWluZyBjYWxsZWQgYWZ0ZXIgdGhlIGNsb3NlKCkKLSAgICAvLwotICAgIC8vIFRPRE8oamFld2FuKTogU2hvdWxkIHdlIHB1dCB2b2xhdGlsZSBoZXJlPwotICAgIEBHdWFyZGVkQnkoIm1Mb2NrIikKLSAgICBwcml2YXRlIE1lZGlhUGxheWVyQmFzZSBtUGxheWVyOwotICAgIEBHdWFyZGVkQnkoIm1Mb2NrIikKLSAgICBwcml2YXRlIE1lZGlhUGxheWxpc3RBZ2VudCBtUGxheWxpc3RBZ2VudDsKLSAgICBAR3VhcmRlZEJ5KCJtTG9jayIpCi0gICAgcHJpdmF0ZSBTZXNzaW9uUGxheWxpc3RBZ2VudCBtU2Vzc2lvblBsYXlsaXN0QWdlbnQ7Ci0gICAgQEd1YXJkZWRCeSgibUxvY2siKQotICAgIHByaXZhdGUgVm9sdW1lUHJvdmlkZXIyIG1Wb2x1bWVQcm92aWRlcjsKLSAgICBAR3VhcmRlZEJ5KCJtTG9jayIpCi0gICAgcHJpdmF0ZSBQbGF5YmFja0luZm8gbVBsYXliYWNrSW5mbzsKLSAgICBAR3VhcmRlZEJ5KCJtTG9jayIpCi0gICAgcHJpdmF0ZSBPbkRhdGFTb3VyY2VNaXNzaW5nSGVscGVyIG1Ec21IZWxwZXI7Ci0KLSAgICAvKioKLSAgICAgKiBDYW4gYmUgb25seSBjYWxsZWQgYnkgdGhlIHtAbGluayBCdWlsZGVyI2J1aWxkKCl9LgotICAgICAqIEBwYXJhbSBjb250ZXh0Ci0gICAgICogQHBhcmFtIHBsYXllcgotICAgICAqIEBwYXJhbSBpZAotICAgICAqIEBwYXJhbSBwbGF5bGlzdEFnZW50Ci0gICAgICogQHBhcmFtIHZvbHVtZVByb3ZpZGVyCi0gICAgICogQHBhcmFtIHNlc3Npb25BY3Rpdml0eQotICAgICAqIEBwYXJhbSBjYWxsYmFja0V4ZWN1dG9yCi0gICAgICogQHBhcmFtIGNhbGxiYWNrCi0gICAgICovCi0gICAgcHVibGljIE1lZGlhU2Vzc2lvbjJJbXBsKENvbnRleHQgY29udGV4dCwgTWVkaWFQbGF5ZXJCYXNlIHBsYXllciwgU3RyaW5nIGlkLAotICAgICAgICAgICAgTWVkaWFQbGF5bGlzdEFnZW50IHBsYXlsaXN0QWdlbnQsIFZvbHVtZVByb3ZpZGVyMiB2b2x1bWVQcm92aWRlciwKLSAgICAgICAgICAgIFBlbmRpbmdJbnRlbnQgc2Vzc2lvbkFjdGl2aXR5LAotICAgICAgICAgICAgRXhlY3V0b3IgY2FsbGJhY2tFeGVjdXRvciwgU2Vzc2lvbkNhbGxiYWNrIGNhbGxiYWNrKSB7Ci0gICAgICAgIC8vIFRPRE8oamFld2FuKTogS2VlcCBvdGhlciBwYXJhbXMuCi0gICAgICAgIG1JbnN0YW5jZSA9IGNyZWF0ZUluc3RhbmNlKCk7Ci0KLSAgICAgICAgLy8gQXJndW1lbnQgY2hlY2tzIGFyZSBkb25lIGJ5IGJ1aWxkZXIgYWxyZWFkeS4KLSAgICAgICAgLy8gSW5pdGlhbGl6ZSBmaW5hbHMgZmlyc3QuCi0gICAgICAgIG1Db250ZXh0ID0gY29udGV4dDsKLSAgICAgICAgbUlkID0gaWQ7Ci0gICAgICAgIG1DYWxsYmFjayA9IGNhbGxiYWNrOwotICAgICAgICBtQ2FsbGJhY2tFeGVjdXRvciA9IGNhbGxiYWNrRXhlY3V0b3I7Ci0gICAgICAgIG1TZXNzaW9uQWN0aXZpdHkgPSBzZXNzaW9uQWN0aXZpdHk7Ci0gICAgICAgIG1TZXNzaW9uU3R1YiA9IG5ldyBNZWRpYVNlc3Npb24yU3R1Yih0aGlzKTsKLSAgICAgICAgbUF1ZGlvTWFuYWdlciA9IChBdWRpb01hbmFnZXIpIGNvbnRleHQuZ2V0U3lzdGVtU2VydmljZShDb250ZXh0LkFVRElPX1NFUlZJQ0UpOwotICAgICAgICBtUGxheWVyRXZlbnRDYWxsYmFjayA9IG5ldyBNeVBsYXllckV2ZW50Q2FsbGJhY2sodGhpcyk7Ci0gICAgICAgIG1QbGF5bGlzdEV2ZW50Q2FsbGJhY2sgPSBuZXcgTXlQbGF5bGlzdEV2ZW50Q2FsbGJhY2sodGhpcyk7Ci0KLSAgICAgICAgLy8gSW5mZXIgdHlwZSBmcm9tIHRoZSBpZCBhbmQgcGFja2FnZSBuYW1lLgotICAgICAgICBTdHJpbmcgbGlicmFyeVNlcnZpY2UgPSBnZXRTZXJ2aWNlTmFtZShjb250ZXh0LCBNZWRpYUxpYnJhcnlTZXJ2aWNlMi5TRVJWSUNFX0lOVEVSRkFDRSwgaWQpOwotICAgICAgICBTdHJpbmcgc2Vzc2lvblNlcnZpY2UgPSBnZXRTZXJ2aWNlTmFtZShjb250ZXh0LCBNZWRpYVNlc3Npb25TZXJ2aWNlMi5TRVJWSUNFX0lOVEVSRkFDRSwgaWQpOwotICAgICAgICBpZiAoc2Vzc2lvblNlcnZpY2UgIT0gbnVsbCAmJiBsaWJyYXJ5U2VydmljZSAhPSBudWxsKSB7Ci0gICAgICAgICAgICB0aHJvdyBuZXcgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKCJBbWJpZ3VvdXMgc2Vzc2lvbiB0eXBlLiBNdWx0aXBsZSIKLSAgICAgICAgICAgICAgICAgICAgKyAiIHNlc3Npb24gc2VydmljZXMgZGVmaW5lIHRoZSBzYW1lIGlkPSIgKyBpZCk7Ci0gICAgICAgIH0gZWxzZSBpZiAobGlicmFyeVNlcnZpY2UgIT0gbnVsbCkgewotICAgICAgICAgICAgbVNlc3Npb25Ub2tlbiA9IG5ldyBTZXNzaW9uVG9rZW4ySW1wbChQcm9jZXNzLm15VWlkKCksIFRZUEVfTElCUkFSWV9TRVJWSUNFLAotICAgICAgICAgICAgICAgICAgICBtQ29udGV4dC5nZXRQYWNrYWdlTmFtZSgpLCBsaWJyYXJ5U2VydmljZSwgaWQsIG1TZXNzaW9uU3R1YikuZ2V0SW5zdGFuY2UoKTsKLSAgICAgICAgfSBlbHNlIGlmIChzZXNzaW9uU2VydmljZSAhPSBudWxsKSB7Ci0gICAgICAgICAgICBtU2Vzc2lvblRva2VuID0gbmV3IFNlc3Npb25Ub2tlbjJJbXBsKFByb2Nlc3MubXlVaWQoKSwgVFlQRV9TRVNTSU9OX1NFUlZJQ0UsCi0gICAgICAgICAgICAgICAgICAgIG1Db250ZXh0LmdldFBhY2thZ2VOYW1lKCksIHNlc3Npb25TZXJ2aWNlLCBpZCwgbVNlc3Npb25TdHViKS5nZXRJbnN0YW5jZSgpOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgbVNlc3Npb25Ub2tlbiA9IG5ldyBTZXNzaW9uVG9rZW4ySW1wbChQcm9jZXNzLm15VWlkKCksIFRZUEVfU0VTU0lPTiwKLSAgICAgICAgICAgICAgICAgICAgbUNvbnRleHQuZ2V0UGFja2FnZU5hbWUoKSwgbnVsbCwgaWQsIG1TZXNzaW9uU3R1YikuZ2V0SW5zdGFuY2UoKTsKLSAgICAgICAgfQotCi0gICAgICAgIHVwZGF0ZVBsYXllcihwbGF5ZXIsIHBsYXlsaXN0QWdlbnQsIHZvbHVtZVByb3ZpZGVyKTsKLQotICAgICAgICAvLyBBc2sgc2VydmVyIGZvciB0aGUgc2FuaXR5IGNoZWNrLCBhbmQgc3RhcnRzCi0gICAgICAgIC8vIFNhbml0eSBjaGVjayBmb3IgbWFraW5nIHNlc3Npb24gSUQgdW5pcXVlICdwZXIgcGFja2FnZScgY2Fubm90IGJlIGRvbmUgaW4gaGVyZS4KLSAgICAgICAgLy8gU2VydmVyIGNhbiBvbmx5IGtub3cgaWYgdGhlIHBhY2thZ2UgaGFzIGFub3RoZXIgcHJvY2VzcyBhbmQgaGFzIGFub3RoZXIgc2Vzc2lvbiB3aXRoIHRoZQotICAgICAgICAvLyBzYW1lIGlkLiBOb3RlIHRoYXQgJ0lEIGlzIHVuaXF1ZSBwZXIgcGFja2FnZScgaXMgaW1wb3J0YW50IGZvciBjb250cm9sbGVyIHRvIGRpc3Rpbmd1aXNoCi0gICAgICAgIC8vIGEgc2Vzc2lvbiBpbiBhbm90aGVyIHBhY2thZ2UuCi0gICAgICAgIE1lZGlhU2Vzc2lvbk1hbmFnZXIgbWFuYWdlciA9Ci0gICAgICAgICAgICAgICAgKE1lZGlhU2Vzc2lvbk1hbmFnZXIpIG1Db250ZXh0LmdldFN5c3RlbVNlcnZpY2UoQ29udGV4dC5NRURJQV9TRVNTSU9OX1NFUlZJQ0UpOwotICAgICAgICBpZiAoIW1hbmFnZXIuY3JlYXRlU2Vzc2lvbjIobVNlc3Npb25Ub2tlbikpIHsKLSAgICAgICAgICAgIHRocm93IG5ldyBJbGxlZ2FsU3RhdGVFeGNlcHRpb24oIlNlc3Npb24gd2l0aCB0aGUgc2FtZSBpZCBpcyBhbHJlYWR5IHVzZWQgYnkiCi0gICAgICAgICAgICAgICAgICAgICsgIiBhbm90aGVyIHByb2Nlc3MuIFVzZSBNZWRpYUNvbnRyb2xsZXIyIGluc3RlYWQuIik7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBNZWRpYVNlc3Npb24yIGNyZWF0ZUluc3RhbmNlKCkgewotICAgICAgICByZXR1cm4gbmV3IE1lZGlhU2Vzc2lvbjIodGhpcyk7Ci0gICAgfQotCi0gICAgcHJpdmF0ZSBzdGF0aWMgU3RyaW5nIGdldFNlcnZpY2VOYW1lKENvbnRleHQgY29udGV4dCwgU3RyaW5nIHNlcnZpY2VBY3Rpb24sIFN0cmluZyBpZCkgewotICAgICAgICBQYWNrYWdlTWFuYWdlciBtYW5hZ2VyID0gY29udGV4dC5nZXRQYWNrYWdlTWFuYWdlcigpOwotICAgICAgICBJbnRlbnQgc2VydmljZUludGVudCA9IG5ldyBJbnRlbnQoc2VydmljZUFjdGlvbik7Ci0gICAgICAgIHNlcnZpY2VJbnRlbnQuc2V0UGFja2FnZShjb250ZXh0LmdldFBhY2thZ2VOYW1lKCkpOwotICAgICAgICBMaXN0PFJlc29sdmVJbmZvPiBzZXJ2aWNlcyA9IG1hbmFnZXIucXVlcnlJbnRlbnRTZXJ2aWNlcyhzZXJ2aWNlSW50ZW50LAotICAgICAgICAgICAgICAgIFBhY2thZ2VNYW5hZ2VyLkdFVF9NRVRBX0RBVEEpOwotICAgICAgICBTdHJpbmcgc2VydmljZU5hbWUgPSBudWxsOwotICAgICAgICBpZiAoc2VydmljZXMgIT0gbnVsbCkgewotICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBzZXJ2aWNlcy5zaXplKCk7IGkrKykgewotICAgICAgICAgICAgICAgIFN0cmluZyBzZXJ2aWNlSWQgPSBTZXNzaW9uVG9rZW4ySW1wbC5nZXRTZXNzaW9uSWQoc2VydmljZXMuZ2V0KGkpKTsKLSAgICAgICAgICAgICAgICBpZiAoc2VydmljZUlkICE9IG51bGwgJiYgVGV4dFV0aWxzLmVxdWFscyhpZCwgc2VydmljZUlkKSkgewotICAgICAgICAgICAgICAgICAgICBpZiAoc2VydmljZXMuZ2V0KGkpLnNlcnZpY2VJbmZvID09IG51bGwpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIGlmIChzZXJ2aWNlTmFtZSAhPSBudWxsKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKCJBbWJpZ3VvdXMgc2Vzc2lvbiB0eXBlLiBNdWx0aXBsZSIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKyAiIHNlc3Npb24gc2VydmljZXMgZGVmaW5lIHRoZSBzYW1lIGlkPSIgKyBpZCk7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgc2VydmljZU5hbWUgPSBzZXJ2aWNlcy5nZXQoaSkuc2VydmljZUluZm8ubmFtZTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIHNlcnZpY2VOYW1lOwotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyB2b2lkIHVwZGF0ZVBsYXllcl9pbXBsKEBOb25OdWxsIE1lZGlhUGxheWVyQmFzZSBwbGF5ZXIsIE1lZGlhUGxheWxpc3RBZ2VudCBwbGF5bGlzdEFnZW50LAotICAgICAgICAgICAgVm9sdW1lUHJvdmlkZXIyIHZvbHVtZVByb3ZpZGVyKSB0aHJvd3MgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uIHsKLSAgICAgICAgZW5zdXJlQ2FsbGluZ1RocmVhZCgpOwotICAgICAgICBpZiAocGxheWVyID09IG51bGwpIHsKLSAgICAgICAgICAgIHRocm93IG5ldyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oInBsYXllciBzaG91bGRuJ3QgYmUgbnVsbCIpOwotICAgICAgICB9Ci0gICAgICAgIHVwZGF0ZVBsYXllcihwbGF5ZXIsIHBsYXlsaXN0QWdlbnQsIHZvbHVtZVByb3ZpZGVyKTsKLSAgICB9Ci0KLSAgICBwcml2YXRlIHZvaWQgdXBkYXRlUGxheWVyKE1lZGlhUGxheWVyQmFzZSBwbGF5ZXIsIE1lZGlhUGxheWxpc3RBZ2VudCBhZ2VudCwKLSAgICAgICAgICAgIFZvbHVtZVByb3ZpZGVyMiB2b2x1bWVQcm92aWRlcikgewotICAgICAgICBmaW5hbCBNZWRpYVBsYXllckJhc2Ugb2xkUGxheWVyOwotICAgICAgICBmaW5hbCBNZWRpYVBsYXlsaXN0QWdlbnQgb2xkQWdlbnQ7Ci0gICAgICAgIGZpbmFsIFBsYXliYWNrSW5mbyBpbmZvID0gY3JlYXRlUGxheWJhY2tJbmZvKHZvbHVtZVByb3ZpZGVyLCBwbGF5ZXIuZ2V0QXVkaW9BdHRyaWJ1dGVzKCkpOwotICAgICAgICBzeW5jaHJvbml6ZWQgKG1Mb2NrKSB7Ci0gICAgICAgICAgICBvbGRQbGF5ZXIgPSBtUGxheWVyOwotICAgICAgICAgICAgb2xkQWdlbnQgPSBtUGxheWxpc3RBZ2VudDsKLSAgICAgICAgICAgIG1QbGF5ZXIgPSBwbGF5ZXI7Ci0gICAgICAgICAgICBpZiAoYWdlbnQgPT0gbnVsbCkgewotICAgICAgICAgICAgICAgIG1TZXNzaW9uUGxheWxpc3RBZ2VudCA9IG5ldyBTZXNzaW9uUGxheWxpc3RBZ2VudCh0aGlzLCBtUGxheWVyKTsKLSAgICAgICAgICAgICAgICBpZiAobURzbUhlbHBlciAhPSBudWxsKSB7Ci0gICAgICAgICAgICAgICAgICAgIG1TZXNzaW9uUGxheWxpc3RBZ2VudC5zZXRPbkRhdGFTb3VyY2VNaXNzaW5nSGVscGVyKG1Ec21IZWxwZXIpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBhZ2VudCA9IG1TZXNzaW9uUGxheWxpc3RBZ2VudDsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIG1QbGF5bGlzdEFnZW50ID0gYWdlbnQ7Ci0gICAgICAgICAgICBtVm9sdW1lUHJvdmlkZXIgPSB2b2x1bWVQcm92aWRlcjsKLSAgICAgICAgICAgIG1QbGF5YmFja0luZm8gPSBpbmZvOwotICAgICAgICB9Ci0gICAgICAgIGlmIChwbGF5ZXIgIT0gb2xkUGxheWVyKSB7Ci0gICAgICAgICAgICBwbGF5ZXIucmVnaXN0ZXJQbGF5ZXJFdmVudENhbGxiYWNrKG1DYWxsYmFja0V4ZWN1dG9yLCBtUGxheWVyRXZlbnRDYWxsYmFjayk7Ci0gICAgICAgICAgICBpZiAob2xkUGxheWVyICE9IG51bGwpIHsKLSAgICAgICAgICAgICAgICAvLyBXYXJuaW5nOiBQb29ybHkgaW1wbGVtZW50IHBsYXllciBtYXkgaWdub3JlIHRoaXMKLSAgICAgICAgICAgICAgICBvbGRQbGF5ZXIudW5yZWdpc3RlclBsYXllckV2ZW50Q2FsbGJhY2sobVBsYXllckV2ZW50Q2FsbGJhY2spOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIGlmIChhZ2VudCAhPSBvbGRBZ2VudCkgewotICAgICAgICAgICAgYWdlbnQucmVnaXN0ZXJQbGF5bGlzdEV2ZW50Q2FsbGJhY2sobUNhbGxiYWNrRXhlY3V0b3IsIG1QbGF5bGlzdEV2ZW50Q2FsbGJhY2spOwotICAgICAgICAgICAgaWYgKG9sZEFnZW50ICE9IG51bGwpIHsKLSAgICAgICAgICAgICAgICAvLyBXYXJuaW5nOiBQb29ybHkgaW1wbGVtZW50IHBsYXllciBtYXkgaWdub3JlIHRoaXMKLSAgICAgICAgICAgICAgICBvbGRBZ2VudC51bnJlZ2lzdGVyUGxheWxpc3RFdmVudENhbGxiYWNrKG1QbGF5bGlzdEV2ZW50Q2FsbGJhY2spOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKG9sZFBsYXllciAhPSBudWxsKSB7Ci0gICAgICAgICAgICBtU2Vzc2lvblN0dWIubm90aWZ5UGxheWJhY2tJbmZvQ2hhbmdlZChpbmZvKTsKLSAgICAgICAgICAgIG5vdGlmeVBsYXllclVwZGF0ZWROb3RMb2NrZWQob2xkUGxheWVyKTsKLSAgICAgICAgfQotICAgICAgICAvLyBUT0RPKGphZXdhbik6IFJlcGVhdCB0aGUgc2FtZSB0aGluZyBmb3IgdGhlIHBsYXlsaXN0IGFnZW50LgotICAgIH0KLQotICAgIHByaXZhdGUgUGxheWJhY2tJbmZvIGNyZWF0ZVBsYXliYWNrSW5mbyhWb2x1bWVQcm92aWRlcjIgdm9sdW1lUHJvdmlkZXIsIEF1ZGlvQXR0cmlidXRlcyBhdHRycykgewotICAgICAgICBQbGF5YmFja0luZm8gaW5mbzsKLSAgICAgICAgaWYgKHZvbHVtZVByb3ZpZGVyID09IG51bGwpIHsKLSAgICAgICAgICAgIGludCBzdHJlYW07Ci0gICAgICAgICAgICBpZiAoYXR0cnMgPT0gbnVsbCkgewotICAgICAgICAgICAgICAgIHN0cmVhbSA9IEF1ZGlvTWFuYWdlci5TVFJFQU1fTVVTSUM7Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIHN0cmVhbSA9IGF0dHJzLmdldFZvbHVtZUNvbnRyb2xTdHJlYW0oKTsKLSAgICAgICAgICAgICAgICBpZiAoc3RyZWFtID09IEF1ZGlvTWFuYWdlci5VU0VfREVGQVVMVF9TVFJFQU1fVFlQRSkgewotICAgICAgICAgICAgICAgICAgICAvLyBJdCBtYXkgaGFwcGVuIGlmIHRoZSBBdWRpb0F0dHJpYnV0ZXMgZG9lc24ndCBoYXZlIHVzYWdlLgotICAgICAgICAgICAgICAgICAgICAvLyBDaGFuZ2UgaXQgdG8gdGhlIFNUUkVBTV9NVVNJQyBiZWNhdXNlIGl0J3Mgbm90IHN1cHBvcnRlZCBieSBhdWRpbyBtYW5hZ2VyCi0gICAgICAgICAgICAgICAgICAgIC8vIGZvciBxdWVyeWluZyB2b2x1bWUgbGV2ZWwuCi0gICAgICAgICAgICAgICAgICAgIHN0cmVhbSA9IEF1ZGlvTWFuYWdlci5TVFJFQU1fTVVTSUM7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICAgICAgaW5mbyA9IE1lZGlhQ29udHJvbGxlcjJJbXBsLlBsYXliYWNrSW5mb0ltcGwuY3JlYXRlUGxheWJhY2tJbmZvKAotICAgICAgICAgICAgICAgICAgICBQbGF5YmFja0luZm8uUExBWUJBQ0tfVFlQRV9MT0NBTCwKLSAgICAgICAgICAgICAgICAgICAgYXR0cnMsCi0gICAgICAgICAgICAgICAgICAgIG1BdWRpb01hbmFnZXIuaXNWb2x1bWVGaXhlZCgpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgPyBWb2x1bWVQcm92aWRlcjIuVk9MVU1FX0NPTlRST0xfRklYRUQKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IFZvbHVtZVByb3ZpZGVyMi5WT0xVTUVfQ09OVFJPTF9BQlNPTFVURSwKLSAgICAgICAgICAgICAgICAgICAgbUF1ZGlvTWFuYWdlci5nZXRTdHJlYW1NYXhWb2x1bWUoc3RyZWFtKSwKLSAgICAgICAgICAgICAgICAgICAgbUF1ZGlvTWFuYWdlci5nZXRTdHJlYW1Wb2x1bWUoc3RyZWFtKSk7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBpbmZvID0gTWVkaWFDb250cm9sbGVyMkltcGwuUGxheWJhY2tJbmZvSW1wbC5jcmVhdGVQbGF5YmFja0luZm8oCi0gICAgICAgICAgICAgICAgICAgIFBsYXliYWNrSW5mby5QTEFZQkFDS19UWVBFX1JFTU9URSAvKiBDb250cm9sVHlwZSAqLywKLSAgICAgICAgICAgICAgICAgICAgYXR0cnMsCi0gICAgICAgICAgICAgICAgICAgIHZvbHVtZVByb3ZpZGVyLmdldENvbnRyb2xUeXBlKCksCi0gICAgICAgICAgICAgICAgICAgIHZvbHVtZVByb3ZpZGVyLmdldE1heFZvbHVtZSgpLAotICAgICAgICAgICAgICAgICAgICB2b2x1bWVQcm92aWRlci5nZXRDdXJyZW50Vm9sdW1lKCkpOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiBpbmZvOwotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyB2b2lkIGNsb3NlX2ltcGwoKSB7Ci0gICAgICAgIC8vIFN0b3Agc3lzdGVtIHNlcnZpY2UgZnJvbSBsaXN0ZW5pbmcgdGhpcyBzZXNzaW9uIGZpcnN0LgotICAgICAgICBNZWRpYVNlc3Npb25NYW5hZ2VyIG1hbmFnZXIgPQotICAgICAgICAgICAgICAgIChNZWRpYVNlc3Npb25NYW5hZ2VyKSBtQ29udGV4dC5nZXRTeXN0ZW1TZXJ2aWNlKENvbnRleHQuTUVESUFfU0VTU0lPTl9TRVJWSUNFKTsKLSAgICAgICAgbWFuYWdlci5kZXN0cm95U2Vzc2lvbjIobVNlc3Npb25Ub2tlbik7Ci0KLSAgICAgICAgaWYgKG1TZXNzaW9uU3R1YiAhPSBudWxsKSB7Ci0gICAgICAgICAgICBpZiAoREVCVUcpIHsKLSAgICAgICAgICAgICAgICBMb2cuZChUQUcsICJzZXNzaW9uIGlzIG5vdyB1bmF2YWlsYWJsZSwgaWQ9IiArIG1JZCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICAvLyBJbnZhbGlkYXRlIHByZXZpb3VzbHkgcHVibGlzaGVkIHNlc3Npb24gc3R1Yi4KLSAgICAgICAgICAgIG1TZXNzaW9uU3R1Yi5kZXN0cm95Tm90TG9ja2VkKCk7Ci0gICAgICAgIH0KLSAgICAgICAgZmluYWwgTWVkaWFQbGF5ZXJCYXNlIHBsYXllcjsKLSAgICAgICAgZmluYWwgTWVkaWFQbGF5bGlzdEFnZW50IGFnZW50OwotICAgICAgICBzeW5jaHJvbml6ZWQgKG1Mb2NrKSB7Ci0gICAgICAgICAgICBwbGF5ZXIgPSBtUGxheWVyOwotICAgICAgICAgICAgbVBsYXllciA9IG51bGw7Ci0gICAgICAgICAgICBhZ2VudCA9IG1QbGF5bGlzdEFnZW50OwotICAgICAgICAgICAgbVBsYXlsaXN0QWdlbnQgPSBudWxsOwotICAgICAgICAgICAgbVNlc3Npb25QbGF5bGlzdEFnZW50ID0gbnVsbDsKLSAgICAgICAgfQotICAgICAgICBpZiAocGxheWVyICE9IG51bGwpIHsKLSAgICAgICAgICAgIHBsYXllci51bnJlZ2lzdGVyUGxheWVyRXZlbnRDYWxsYmFjayhtUGxheWVyRXZlbnRDYWxsYmFjayk7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKGFnZW50ICE9IG51bGwpIHsKLSAgICAgICAgICAgIGFnZW50LnVucmVnaXN0ZXJQbGF5bGlzdEV2ZW50Q2FsbGJhY2sobVBsYXlsaXN0RXZlbnRDYWxsYmFjayk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgTWVkaWFQbGF5ZXJCYXNlIGdldFBsYXllcl9pbXBsKCkgewotICAgICAgICByZXR1cm4gZ2V0UGxheWVyKCk7Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIE1lZGlhUGxheWxpc3RBZ2VudCBnZXRQbGF5bGlzdEFnZW50X2ltcGwoKSB7Ci0gICAgICAgIHJldHVybiBtUGxheWxpc3RBZ2VudDsKLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgVm9sdW1lUHJvdmlkZXIyIGdldFZvbHVtZVByb3ZpZGVyX2ltcGwoKSB7Ci0gICAgICAgIHJldHVybiBtVm9sdW1lUHJvdmlkZXI7Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIFNlc3Npb25Ub2tlbjIgZ2V0VG9rZW5faW1wbCgpIHsKLSAgICAgICAgcmV0dXJuIG1TZXNzaW9uVG9rZW47Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIExpc3Q8Q29udHJvbGxlckluZm8+IGdldENvbm5lY3RlZENvbnRyb2xsZXJzX2ltcGwoKSB7Ci0gICAgICAgIHJldHVybiBtU2Vzc2lvblN0dWIuZ2V0Q29udHJvbGxlcnMoKTsKLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgdm9pZCBzZXRBdWRpb0ZvY3VzUmVxdWVzdF9pbXBsKEF1ZGlvRm9jdXNSZXF1ZXN0IGFmcikgewotICAgICAgICAvLyBpbXBsZW1lbnQKLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgdm9pZCBwbGF5X2ltcGwoKSB7Ci0gICAgICAgIGVuc3VyZUNhbGxpbmdUaHJlYWQoKTsKLSAgICAgICAgZmluYWwgTWVkaWFQbGF5ZXJCYXNlIHBsYXllciA9IG1QbGF5ZXI7Ci0gICAgICAgIGlmIChwbGF5ZXIgIT0gbnVsbCkgewotICAgICAgICAgICAgcGxheWVyLnBsYXkoKTsKLSAgICAgICAgfSBlbHNlIGlmIChERUJVRykgewotICAgICAgICAgICAgTG9nLmQoVEFHLCAiQVBJIGNhbGxzIGFmdGVyIHRoZSBjbG9zZSgpIiwgbmV3IElsbGVnYWxTdGF0ZUV4Y2VwdGlvbigpKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyB2b2lkIHBhdXNlX2ltcGwoKSB7Ci0gICAgICAgIGVuc3VyZUNhbGxpbmdUaHJlYWQoKTsKLSAgICAgICAgZmluYWwgTWVkaWFQbGF5ZXJCYXNlIHBsYXllciA9IG1QbGF5ZXI7Ci0gICAgICAgIGlmIChwbGF5ZXIgIT0gbnVsbCkgewotICAgICAgICAgICAgcGxheWVyLnBhdXNlKCk7Ci0gICAgICAgIH0gZWxzZSBpZiAoREVCVUcpIHsKLSAgICAgICAgICAgIExvZy5kKFRBRywgIkFQSSBjYWxscyBhZnRlciB0aGUgY2xvc2UoKSIsIG5ldyBJbGxlZ2FsU3RhdGVFeGNlcHRpb24oKSk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgdm9pZCBzdG9wX2ltcGwoKSB7Ci0gICAgICAgIGVuc3VyZUNhbGxpbmdUaHJlYWQoKTsKLSAgICAgICAgZmluYWwgTWVkaWFQbGF5ZXJCYXNlIHBsYXllciA9IG1QbGF5ZXI7Ci0gICAgICAgIGlmIChwbGF5ZXIgIT0gbnVsbCkgewotICAgICAgICAgICAgcGxheWVyLnJlc2V0KCk7Ci0gICAgICAgIH0gZWxzZSBpZiAoREVCVUcpIHsKLSAgICAgICAgICAgIExvZy5kKFRBRywgIkFQSSBjYWxscyBhZnRlciB0aGUgY2xvc2UoKSIsIG5ldyBJbGxlZ2FsU3RhdGVFeGNlcHRpb24oKSk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgdm9pZCBza2lwVG9QbGF5bGlzdEl0ZW1faW1wbChATm9uTnVsbCBNZWRpYUl0ZW0yIGl0ZW0pIHsKLSAgICAgICAgaWYgKGl0ZW0gPT0gbnVsbCkgewotICAgICAgICAgICAgdGhyb3cgbmV3IElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbigiaXRlbSBzaG91bGRuJ3QgYmUgbnVsbCIpOwotICAgICAgICB9Ci0gICAgICAgIGZpbmFsIE1lZGlhUGxheWxpc3RBZ2VudCBhZ2VudCA9IG1QbGF5bGlzdEFnZW50OwotICAgICAgICBpZiAoYWdlbnQgIT0gbnVsbCkgewotICAgICAgICAgICAgYWdlbnQuc2tpcFRvUGxheWxpc3RJdGVtKGl0ZW0pOwotICAgICAgICB9IGVsc2UgaWYgKERFQlVHKSB7Ci0gICAgICAgICAgICBMb2cuZChUQUcsICJBUEkgY2FsbHMgYWZ0ZXIgdGhlIGNsb3NlKCkiLCBuZXcgSWxsZWdhbFN0YXRlRXhjZXB0aW9uKCkpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIHZvaWQgc2tpcFRvUHJldmlvdXNJdGVtX2ltcGwoKSB7Ci0gICAgICAgIGZpbmFsIE1lZGlhUGxheWxpc3RBZ2VudCBhZ2VudCA9IG1QbGF5bGlzdEFnZW50OwotICAgICAgICBpZiAoYWdlbnQgIT0gbnVsbCkgewotICAgICAgICAgICAgYWdlbnQuc2tpcFRvUHJldmlvdXNJdGVtKCk7Ci0gICAgICAgIH0gZWxzZSBpZiAoREVCVUcpIHsKLSAgICAgICAgICAgIExvZy5kKFRBRywgIkFQSSBjYWxscyBhZnRlciB0aGUgY2xvc2UoKSIsIG5ldyBJbGxlZ2FsU3RhdGVFeGNlcHRpb24oKSk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgdm9pZCBza2lwVG9OZXh0SXRlbV9pbXBsKCkgewotICAgICAgICBmaW5hbCBNZWRpYVBsYXlsaXN0QWdlbnQgYWdlbnQgPSBtUGxheWxpc3RBZ2VudDsKLSAgICAgICAgaWYgKGFnZW50ICE9IG51bGwpIHsKLSAgICAgICAgICAgIGFnZW50LnNraXBUb05leHRJdGVtKCk7Ci0gICAgICAgIH0gZWxzZSBpZiAoREVCVUcpIHsKLSAgICAgICAgICAgIExvZy5kKFRBRywgIkFQSSBjYWxscyBhZnRlciB0aGUgY2xvc2UoKSIsIG5ldyBJbGxlZ2FsU3RhdGVFeGNlcHRpb24oKSk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgdm9pZCBzZXRDdXN0b21MYXlvdXRfaW1wbChATm9uTnVsbCBDb250cm9sbGVySW5mbyBjb250cm9sbGVyLAotICAgICAgICAgICAgQE5vbk51bGwgTGlzdDxDb21tYW5kQnV0dG9uPiBsYXlvdXQpIHsKLSAgICAgICAgZW5zdXJlQ2FsbGluZ1RocmVhZCgpOwotICAgICAgICBpZiAoY29udHJvbGxlciA9PSBudWxsKSB7Ci0gICAgICAgICAgICB0aHJvdyBuZXcgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKCJjb250cm9sbGVyIHNob3VsZG4ndCBiZSBudWxsIik7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKGxheW91dCA9PSBudWxsKSB7Ci0gICAgICAgICAgICB0aHJvdyBuZXcgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKCJsYXlvdXQgc2hvdWxkbid0IGJlIG51bGwiKTsKLSAgICAgICAgfQotICAgICAgICBtU2Vzc2lvblN0dWIubm90aWZ5Q3VzdG9tTGF5b3V0Tm90TG9ja2VkKGNvbnRyb2xsZXIsIGxheW91dCk7Ci0gICAgfQotCi0gICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KLSAgICAvLyBUT0RPKGphZXdhbik6IEltcGxlbWVudCBmb2xsb3dzCi0gICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyB2b2lkIHNldEFsbG93ZWRDb21tYW5kc19pbXBsKEBOb25OdWxsIENvbnRyb2xsZXJJbmZvIGNvbnRyb2xsZXIsCi0gICAgICAgICAgICBATm9uTnVsbCBTZXNzaW9uQ29tbWFuZEdyb3VwMiBjb21tYW5kcykgewotICAgICAgICBpZiAoY29udHJvbGxlciA9PSBudWxsKSB7Ci0gICAgICAgICAgICB0aHJvdyBuZXcgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKCJjb250cm9sbGVyIHNob3VsZG4ndCBiZSBudWxsIik7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKGNvbW1hbmRzID09IG51bGwpIHsKLSAgICAgICAgICAgIHRocm93IG5ldyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oImNvbW1hbmRzIHNob3VsZG4ndCBiZSBudWxsIik7Ci0gICAgICAgIH0KLSAgICAgICAgbVNlc3Npb25TdHViLnNldEFsbG93ZWRDb21tYW5kcyhjb250cm9sbGVyLCBjb21tYW5kcyk7Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIHZvaWQgc2VuZEN1c3RvbUNvbW1hbmRfaW1wbChATm9uTnVsbCBDb250cm9sbGVySW5mbyBjb250cm9sbGVyLAotICAgICAgICAgICAgQE5vbk51bGwgU2Vzc2lvbkNvbW1hbmQyIGNvbW1hbmQsIEJ1bmRsZSBhcmdzLCBSZXN1bHRSZWNlaXZlciByZWNlaXZlcikgewotICAgICAgICBpZiAoY29udHJvbGxlciA9PSBudWxsKSB7Ci0gICAgICAgICAgICB0aHJvdyBuZXcgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKCJjb250cm9sbGVyIHNob3VsZG4ndCBiZSBudWxsIik7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKGNvbW1hbmQgPT0gbnVsbCkgewotICAgICAgICAgICAgdGhyb3cgbmV3IElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbigiY29tbWFuZCBzaG91bGRuJ3QgYmUgbnVsbCIpOwotICAgICAgICB9Ci0gICAgICAgIG1TZXNzaW9uU3R1Yi5zZW5kQ3VzdG9tQ29tbWFuZChjb250cm9sbGVyLCBjb21tYW5kLCBhcmdzLCByZWNlaXZlcik7Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIHZvaWQgc2VuZEN1c3RvbUNvbW1hbmRfaW1wbChATm9uTnVsbCBTZXNzaW9uQ29tbWFuZDIgY29tbWFuZCwgQnVuZGxlIGFyZ3MpIHsKLSAgICAgICAgaWYgKGNvbW1hbmQgPT0gbnVsbCkgewotICAgICAgICAgICAgdGhyb3cgbmV3IElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbigiY29tbWFuZCBzaG91bGRuJ3QgYmUgbnVsbCIpOwotICAgICAgICB9Ci0gICAgICAgIG1TZXNzaW9uU3R1Yi5zZW5kQ3VzdG9tQ29tbWFuZChjb21tYW5kLCBhcmdzKTsKLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgdm9pZCBzZXRQbGF5bGlzdF9pbXBsKEBOb25OdWxsIExpc3Q8TWVkaWFJdGVtMj4gbGlzdCwgTWVkaWFNZXRhZGF0YTIgbWV0YWRhdGEpIHsKLSAgICAgICAgaWYgKGxpc3QgPT0gbnVsbCkgewotICAgICAgICAgICAgdGhyb3cgbmV3IElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbigibGlzdCBzaG91bGRuJ3QgYmUgbnVsbCIpOwotICAgICAgICB9Ci0gICAgICAgIGVuc3VyZUNhbGxpbmdUaHJlYWQoKTsKLSAgICAgICAgZmluYWwgTWVkaWFQbGF5bGlzdEFnZW50IGFnZW50ID0gbVBsYXlsaXN0QWdlbnQ7Ci0gICAgICAgIGlmIChhZ2VudCAhPSBudWxsKSB7Ci0gICAgICAgICAgICBhZ2VudC5zZXRQbGF5bGlzdChsaXN0LCBtZXRhZGF0YSk7Ci0gICAgICAgIH0gZWxzZSBpZiAoREVCVUcpIHsKLSAgICAgICAgICAgIExvZy5kKFRBRywgIkFQSSBjYWxscyBhZnRlciB0aGUgY2xvc2UoKSIsIG5ldyBJbGxlZ2FsU3RhdGVFeGNlcHRpb24oKSk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgdm9pZCB1cGRhdGVQbGF5bGlzdE1ldGFkYXRhX2ltcGwoTWVkaWFNZXRhZGF0YTIgbWV0YWRhdGEpIHsKLSAgICAgICAgZmluYWwgTWVkaWFQbGF5bGlzdEFnZW50IGFnZW50ID0gbVBsYXlsaXN0QWdlbnQ7Ci0gICAgICAgIGlmIChhZ2VudCAhPSBudWxsKSB7Ci0gICAgICAgICAgICBhZ2VudC51cGRhdGVQbGF5bGlzdE1ldGFkYXRhKG1ldGFkYXRhKTsKLSAgICAgICAgfSBlbHNlIGlmIChERUJVRykgewotICAgICAgICAgICAgTG9nLmQoVEFHLCAiQVBJIGNhbGxzIGFmdGVyIHRoZSBjbG9zZSgpIiwgbmV3IElsbGVnYWxTdGF0ZUV4Y2VwdGlvbigpKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyB2b2lkIGFkZFBsYXlsaXN0SXRlbV9pbXBsKGludCBpbmRleCwgQE5vbk51bGwgTWVkaWFJdGVtMiBpdGVtKSB7Ci0gICAgICAgIGlmIChpbmRleCA8IDApIHsKLSAgICAgICAgICAgIHRocm93IG5ldyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oImluZGV4IHNob3VsZG4ndCBiZSBuZWdhdGl2ZSIpOwotICAgICAgICB9Ci0gICAgICAgIGlmIChpdGVtID09IG51bGwpIHsKLSAgICAgICAgICAgIHRocm93IG5ldyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oIml0ZW0gc2hvdWxkbid0IGJlIG51bGwiKTsKLSAgICAgICAgfQotICAgICAgICBmaW5hbCBNZWRpYVBsYXlsaXN0QWdlbnQgYWdlbnQgPSBtUGxheWxpc3RBZ2VudDsKLSAgICAgICAgaWYgKGFnZW50ICE9IG51bGwpIHsKLSAgICAgICAgICAgIGFnZW50LmFkZFBsYXlsaXN0SXRlbShpbmRleCwgaXRlbSk7Ci0gICAgICAgIH0gZWxzZSBpZiAoREVCVUcpIHsKLSAgICAgICAgICAgIExvZy5kKFRBRywgIkFQSSBjYWxscyBhZnRlciB0aGUgY2xvc2UoKSIsIG5ldyBJbGxlZ2FsU3RhdGVFeGNlcHRpb24oKSk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgdm9pZCByZW1vdmVQbGF5bGlzdEl0ZW1faW1wbChATm9uTnVsbCBNZWRpYUl0ZW0yIGl0ZW0pIHsKLSAgICAgICAgaWYgKGl0ZW0gPT0gbnVsbCkgewotICAgICAgICAgICAgdGhyb3cgbmV3IElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbigiaXRlbSBzaG91bGRuJ3QgYmUgbnVsbCIpOwotICAgICAgICB9Ci0gICAgICAgIGZpbmFsIE1lZGlhUGxheWxpc3RBZ2VudCBhZ2VudCA9IG1QbGF5bGlzdEFnZW50OwotICAgICAgICBpZiAoYWdlbnQgIT0gbnVsbCkgewotICAgICAgICAgICAgYWdlbnQucmVtb3ZlUGxheWxpc3RJdGVtKGl0ZW0pOwotICAgICAgICB9IGVsc2UgaWYgKERFQlVHKSB7Ci0gICAgICAgICAgICBMb2cuZChUQUcsICJBUEkgY2FsbHMgYWZ0ZXIgdGhlIGNsb3NlKCkiLCBuZXcgSWxsZWdhbFN0YXRlRXhjZXB0aW9uKCkpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIHZvaWQgcmVwbGFjZVBsYXlsaXN0SXRlbV9pbXBsKGludCBpbmRleCwgQE5vbk51bGwgTWVkaWFJdGVtMiBpdGVtKSB7Ci0gICAgICAgIGlmIChpbmRleCA8IDApIHsKLSAgICAgICAgICAgIHRocm93IG5ldyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oImluZGV4IHNob3VsZG4ndCBiZSBuZWdhdGl2ZSIpOwotICAgICAgICB9Ci0gICAgICAgIGlmIChpdGVtID09IG51bGwpIHsKLSAgICAgICAgICAgIHRocm93IG5ldyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oIml0ZW0gc2hvdWxkbid0IGJlIG51bGwiKTsKLSAgICAgICAgfQotICAgICAgICBmaW5hbCBNZWRpYVBsYXlsaXN0QWdlbnQgYWdlbnQgPSBtUGxheWxpc3RBZ2VudDsKLSAgICAgICAgaWYgKGFnZW50ICE9IG51bGwpIHsKLSAgICAgICAgICAgIGFnZW50LnJlcGxhY2VQbGF5bGlzdEl0ZW0oaW5kZXgsIGl0ZW0pOwotICAgICAgICB9IGVsc2UgaWYgKERFQlVHKSB7Ci0gICAgICAgICAgICBMb2cuZChUQUcsICJBUEkgY2FsbHMgYWZ0ZXIgdGhlIGNsb3NlKCkiLCBuZXcgSWxsZWdhbFN0YXRlRXhjZXB0aW9uKCkpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIExpc3Q8TWVkaWFJdGVtMj4gZ2V0UGxheWxpc3RfaW1wbCgpIHsKLSAgICAgICAgZmluYWwgTWVkaWFQbGF5bGlzdEFnZW50IGFnZW50ID0gbVBsYXlsaXN0QWdlbnQ7Ci0gICAgICAgIGlmIChhZ2VudCAhPSBudWxsKSB7Ci0gICAgICAgICAgICByZXR1cm4gYWdlbnQuZ2V0UGxheWxpc3QoKTsKLSAgICAgICAgfSBlbHNlIGlmIChERUJVRykgewotICAgICAgICAgICAgTG9nLmQoVEFHLCAiQVBJIGNhbGxzIGFmdGVyIHRoZSBjbG9zZSgpIiwgbmV3IElsbGVnYWxTdGF0ZUV4Y2VwdGlvbigpKTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gbnVsbDsKLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgTWVkaWFNZXRhZGF0YTIgZ2V0UGxheWxpc3RNZXRhZGF0YV9pbXBsKCkgewotICAgICAgICBmaW5hbCBNZWRpYVBsYXlsaXN0QWdlbnQgYWdlbnQgPSBtUGxheWxpc3RBZ2VudDsKLSAgICAgICAgaWYgKGFnZW50ICE9IG51bGwpIHsKLSAgICAgICAgICAgIHJldHVybiBhZ2VudC5nZXRQbGF5bGlzdE1ldGFkYXRhKCk7Ci0gICAgICAgIH0gZWxzZSBpZiAoREVCVUcpIHsKLSAgICAgICAgICAgIExvZy5kKFRBRywgIkFQSSBjYWxscyBhZnRlciB0aGUgY2xvc2UoKSIsIG5ldyBJbGxlZ2FsU3RhdGVFeGNlcHRpb24oKSk7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIG51bGw7Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIE1lZGlhSXRlbTIgZ2V0Q3VycmVudFBsYXlsaXN0SXRlbV9pbXBsKCkgewotICAgICAgICAvLyBUT0RPKGphZXdhbik6IEltcGxlbWVudAotICAgICAgICByZXR1cm4gbnVsbDsKLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgaW50IGdldFJlcGVhdE1vZGVfaW1wbCgpIHsKLSAgICAgICAgZmluYWwgTWVkaWFQbGF5bGlzdEFnZW50IGFnZW50ID0gbVBsYXlsaXN0QWdlbnQ7Ci0gICAgICAgIGlmIChhZ2VudCAhPSBudWxsKSB7Ci0gICAgICAgICAgICByZXR1cm4gYWdlbnQuZ2V0UmVwZWF0TW9kZSgpOwotICAgICAgICB9IGVsc2UgaWYgKERFQlVHKSB7Ci0gICAgICAgICAgICBMb2cuZChUQUcsICJBUEkgY2FsbHMgYWZ0ZXIgdGhlIGNsb3NlKCkiLCBuZXcgSWxsZWdhbFN0YXRlRXhjZXB0aW9uKCkpOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiBNZWRpYVBsYXlsaXN0QWdlbnQuUkVQRUFUX01PREVfTk9ORTsKLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgdm9pZCBzZXRSZXBlYXRNb2RlX2ltcGwoaW50IHJlcGVhdE1vZGUpIHsKLSAgICAgICAgZmluYWwgTWVkaWFQbGF5bGlzdEFnZW50IGFnZW50ID0gbVBsYXlsaXN0QWdlbnQ7Ci0gICAgICAgIGlmIChhZ2VudCAhPSBudWxsKSB7Ci0gICAgICAgICAgICBhZ2VudC5zZXRSZXBlYXRNb2RlKHJlcGVhdE1vZGUpOwotICAgICAgICB9IGVsc2UgaWYgKERFQlVHKSB7Ci0gICAgICAgICAgICBMb2cuZChUQUcsICJBUEkgY2FsbHMgYWZ0ZXIgdGhlIGNsb3NlKCkiLCBuZXcgSWxsZWdhbFN0YXRlRXhjZXB0aW9uKCkpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIGludCBnZXRTaHVmZmxlTW9kZV9pbXBsKCkgewotICAgICAgICBmaW5hbCBNZWRpYVBsYXlsaXN0QWdlbnQgYWdlbnQgPSBtUGxheWxpc3RBZ2VudDsKLSAgICAgICAgaWYgKGFnZW50ICE9IG51bGwpIHsKLSAgICAgICAgICAgIHJldHVybiBhZ2VudC5nZXRTaHVmZmxlTW9kZSgpOwotICAgICAgICB9IGVsc2UgaWYgKERFQlVHKSB7Ci0gICAgICAgICAgICBMb2cuZChUQUcsICJBUEkgY2FsbHMgYWZ0ZXIgdGhlIGNsb3NlKCkiLCBuZXcgSWxsZWdhbFN0YXRlRXhjZXB0aW9uKCkpOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiBNZWRpYVBsYXlsaXN0QWdlbnQuU0hVRkZMRV9NT0RFX05PTkU7Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIHZvaWQgc2V0U2h1ZmZsZU1vZGVfaW1wbChpbnQgc2h1ZmZsZU1vZGUpIHsKLSAgICAgICAgZmluYWwgTWVkaWFQbGF5bGlzdEFnZW50IGFnZW50ID0gbVBsYXlsaXN0QWdlbnQ7Ci0gICAgICAgIGlmIChhZ2VudCAhPSBudWxsKSB7Ci0gICAgICAgICAgICBhZ2VudC5zZXRTaHVmZmxlTW9kZShzaHVmZmxlTW9kZSk7Ci0gICAgICAgIH0gZWxzZSBpZiAoREVCVUcpIHsKLSAgICAgICAgICAgIExvZy5kKFRBRywgIkFQSSBjYWxscyBhZnRlciB0aGUgY2xvc2UoKSIsIG5ldyBJbGxlZ2FsU3RhdGVFeGNlcHRpb24oKSk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgdm9pZCBwcmVwYXJlX2ltcGwoKSB7Ci0gICAgICAgIGVuc3VyZUNhbGxpbmdUaHJlYWQoKTsKLSAgICAgICAgZmluYWwgTWVkaWFQbGF5ZXJCYXNlIHBsYXllciA9IG1QbGF5ZXI7Ci0gICAgICAgIGlmIChwbGF5ZXIgIT0gbnVsbCkgewotICAgICAgICAgICAgcGxheWVyLnByZXBhcmUoKTsKLSAgICAgICAgfSBlbHNlIGlmIChERUJVRykgewotICAgICAgICAgICAgTG9nLmQoVEFHLCAiQVBJIGNhbGxzIGFmdGVyIHRoZSBjbG9zZSgpIiwgbmV3IElsbGVnYWxTdGF0ZUV4Y2VwdGlvbigpKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyB2b2lkIHNlZWtUb19pbXBsKGxvbmcgcG9zKSB7Ci0gICAgICAgIGVuc3VyZUNhbGxpbmdUaHJlYWQoKTsKLSAgICAgICAgZmluYWwgTWVkaWFQbGF5ZXJCYXNlIHBsYXllciA9IG1QbGF5ZXI7Ci0gICAgICAgIGlmIChwbGF5ZXIgIT0gbnVsbCkgewotICAgICAgICAgICAgcGxheWVyLnNlZWtUbyhwb3MpOwotICAgICAgICB9IGVsc2UgaWYgKERFQlVHKSB7Ci0gICAgICAgICAgICBMb2cuZChUQUcsICJBUEkgY2FsbHMgYWZ0ZXIgdGhlIGNsb3NlKCkiLCBuZXcgSWxsZWdhbFN0YXRlRXhjZXB0aW9uKCkpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIEBQbGF5ZXJTdGF0ZSBpbnQgZ2V0UGxheWVyU3RhdGVfaW1wbCgpIHsKLSAgICAgICAgZmluYWwgTWVkaWFQbGF5ZXJCYXNlIHBsYXllciA9IG1QbGF5ZXI7Ci0gICAgICAgIGlmIChwbGF5ZXIgIT0gbnVsbCkgewotICAgICAgICAgICAgcmV0dXJuIG1QbGF5ZXIuZ2V0UGxheWVyU3RhdGUoKTsKLSAgICAgICAgfSBlbHNlIGlmIChERUJVRykgewotICAgICAgICAgICAgTG9nLmQoVEFHLCAiQVBJIGNhbGxzIGFmdGVyIHRoZSBjbG9zZSgpIiwgbmV3IElsbGVnYWxTdGF0ZUV4Y2VwdGlvbigpKTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gTWVkaWFQbGF5ZXJCYXNlLlBMQVlFUl9TVEFURV9FUlJPUjsKLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgbG9uZyBnZXRDdXJyZW50UG9zaXRpb25faW1wbCgpIHsKLSAgICAgICAgZmluYWwgTWVkaWFQbGF5ZXJCYXNlIHBsYXllciA9IG1QbGF5ZXI7Ci0gICAgICAgIGlmIChwbGF5ZXIgIT0gbnVsbCkgewotICAgICAgICAgICAgcmV0dXJuIG1QbGF5ZXIuZ2V0Q3VycmVudFBvc2l0aW9uKCk7Ci0gICAgICAgIH0gZWxzZSBpZiAoREVCVUcpIHsKLSAgICAgICAgICAgIExvZy5kKFRBRywgIkFQSSBjYWxscyBhZnRlciB0aGUgY2xvc2UoKSIsIG5ldyBJbGxlZ2FsU3RhdGVFeGNlcHRpb24oKSk7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIE1lZGlhUGxheWVyQmFzZS5VTktOT1dOX1RJTUU7Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIGxvbmcgZ2V0QnVmZmVyZWRQb3NpdGlvbl9pbXBsKCkgewotICAgICAgICBmaW5hbCBNZWRpYVBsYXllckJhc2UgcGxheWVyID0gbVBsYXllcjsKLSAgICAgICAgaWYgKHBsYXllciAhPSBudWxsKSB7Ci0gICAgICAgICAgICByZXR1cm4gbVBsYXllci5nZXRCdWZmZXJlZFBvc2l0aW9uKCk7Ci0gICAgICAgIH0gZWxzZSBpZiAoREVCVUcpIHsKLSAgICAgICAgICAgIExvZy5kKFRBRywgIkFQSSBjYWxscyBhZnRlciB0aGUgY2xvc2UoKSIsIG5ldyBJbGxlZ2FsU3RhdGVFeGNlcHRpb24oKSk7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIE1lZGlhUGxheWVyQmFzZS5VTktOT1dOX1RJTUU7Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIHZvaWQgbm90aWZ5RXJyb3JfaW1wbChpbnQgZXJyb3JDb2RlLCBCdW5kbGUgZXh0cmFzKSB7Ci0gICAgICAgIG1TZXNzaW9uU3R1Yi5ub3RpZnlFcnJvcihlcnJvckNvZGUsIGV4dHJhcyk7Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIHZvaWQgc2V0T25EYXRhU291cmNlTWlzc2luZ0hlbHBlcl9pbXBsKEBOb25OdWxsIE9uRGF0YVNvdXJjZU1pc3NpbmdIZWxwZXIgaGVscGVyKSB7Ci0gICAgICAgIGlmIChoZWxwZXIgPT0gbnVsbCkgewotICAgICAgICAgICAgdGhyb3cgbmV3IElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbigiaGVscGVyIHNob3VsZG4ndCBiZSBudWxsIik7Ci0gICAgICAgIH0KLSAgICAgICAgc3luY2hyb25pemVkIChtTG9jaykgewotICAgICAgICAgICAgbURzbUhlbHBlciA9IGhlbHBlcjsKLSAgICAgICAgICAgIGlmIChtU2Vzc2lvblBsYXlsaXN0QWdlbnQgIT0gbnVsbCkgewotICAgICAgICAgICAgICAgIG1TZXNzaW9uUGxheWxpc3RBZ2VudC5zZXRPbkRhdGFTb3VyY2VNaXNzaW5nSGVscGVyKGhlbHBlcik7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgdm9pZCBjbGVhck9uRGF0YVNvdXJjZU1pc3NpbmdIZWxwZXJfaW1wbCgpIHsKLSAgICAgICAgc3luY2hyb25pemVkIChtTG9jaykgewotICAgICAgICAgICAgbURzbUhlbHBlciA9IG51bGw7Ci0gICAgICAgICAgICBpZiAobVNlc3Npb25QbGF5bGlzdEFnZW50ICE9IG51bGwpIHsKLSAgICAgICAgICAgICAgICBtU2Vzc2lvblBsYXlsaXN0QWdlbnQuY2xlYXJPbkRhdGFTb3VyY2VNaXNzaW5nSGVscGVyKCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KLSAgICAvLyBQcm90ZWN0ZWQgb3IgcHJpdmF0ZSBtZXRob2RzCi0gICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCi0KLSAgICAvLyBFbmZvcmNlcyBkZXZlbG9wZXJzIHRvIGNhbGwgYWxsIHRoZSBtZXRob2RzIG9uIHRoZSBpbml0aWFsbHkgZ2l2ZW4gdGhyZWFkCi0gICAgLy8gYmVjYXVzZSBjYWxscyBmcm9tIHRoZSBNZWRpYUNvbnRyb2xsZXIyIHdpbGwgYmUgcnVuIG9uIHRoZSB0aHJlYWQuCi0gICAgLy8gVE9ETyhqYWV3YW4pOiBTaG91bGQgd2UgYWxsb3cgY2FsbHMgZnJvbSB0aGUgbXVsdGlwbGUgdGhyZWFkPwotICAgIC8vICAgICAgICAgICAgICAgSSBwcmVmZXIgdGhpcyB3YXkgYmVjYXVzZSBhbGxvd2luZyBtdWx0aXBsZSB0aHJlYWQgbWF5IGNhc2UgdHJpY2t5IGlzc3VlIGxpa2UKLSAgICAvLyAgICAgICAgICAgICAgIGIvNjM0NDYzNjAuIElmIHRoZSB7QGxpbmsgI3NldFBsYXllcigpfSB3aXRoIHtAY29kZSBudWxsfSBjYW4gYmUgY2FsbGVkIGZyb20KLSAgICAvLyAgICAgICAgICAgICAgIGFub3RoZXIgdGhyZWFkLCB0cmFuc3BvcnQgY29udHJvbHMgY2FuIGJlIGNhbGxlZCBhZnRlciB0aGF0LgotICAgIC8vICAgICAgICAgICAgICAgVGhhdCdzIGJhc2ljYWxseSB0aGUgZGV2ZWxvcGVyJ3MgbWlzdGFrZSwgYnV0IHRoZXkgY2Fubm90IHVuZGVyc3RhbmQgd2hhdCdzCi0gICAgLy8gICAgICAgICAgICAgICBoYXBwZW5pbmcgYmVoaW5kIHVudGlsIHdlIHRlbGwgdGhlbSBzby4KLSAgICAvLyAgICAgICAgICAgICAgIElmIGVuZm9yY2luZyBjYWxsbGluZyB0aHJlYWQgZG9lc24ndCBsb29rIGdvb2QsIHdlIGNhbiBhbHRlcm5hdGl2ZWx5IHBpY2sKLSAgICAvLyAgICAgICAgICAgICAgIDEuIEFsbG93IGNhbGxzIGZyb20gcmFuZG9tIHRocmVhZHMgZm9yIGFsbCBtZXRob2RzLgotICAgIC8vICAgICAgICAgICAgICAgMi4gQWxsb3cgY2FsbHMgZnJvbSByYW5kb20gdGhyZWFkcyBmb3IgYWxsIG1ldGhvZHMsIGV4Y2VwdCBmb3IgdGhlCi0gICAgLy8gICAgICAgICAgICAgICAgICB7QGxpbmsgI3NldFBsYXllcigpfS4KLSAgICB2b2lkIGVuc3VyZUNhbGxpbmdUaHJlYWQoKSB7Ci0gICAgICAgIC8vIFRPRE8oamFld2FuKTogVW5jb21tZW50IG9yIHJlbW92ZQotICAgICAgICAvKgotICAgICAgICBpZiAobUhhbmRsZXIuZ2V0TG9vcGVyKCkgIT0gTG9vcGVyLm15TG9vcGVyKCkpIHsKLSAgICAgICAgICAgIHRocm93IG5ldyBJbGxlZ2FsU3RhdGVFeGNlcHRpb24oIlJ1biB0aGlzIG9uIHRoZSBnaXZlbiB0aHJlYWQiKTsKLSAgICAgICAgfSovCi0gICAgfQotCi0gICAgcHJpdmF0ZSB2b2lkIG5vdGlmeVBsYXlsaXN0Q2hhbmdlZE9uRXhlY3V0b3IoTWVkaWFQbGF5bGlzdEFnZW50IHBsYXlsaXN0QWdlbnQsCi0gICAgICAgICAgICBMaXN0PE1lZGlhSXRlbTI+IGxpc3QsIE1lZGlhTWV0YWRhdGEyIG1ldGFkYXRhKSB7Ci0gICAgICAgIGlmIChwbGF5bGlzdEFnZW50ICE9IG1QbGF5bGlzdEFnZW50KSB7Ci0gICAgICAgICAgICAvLyBJZ25vcmUgY2FsbHMgZnJvbSB0aGUgb2xkIGFnZW50LgotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgICAgIG1DYWxsYmFjay5vblBsYXlsaXN0Q2hhbmdlZChtSW5zdGFuY2UsIHBsYXlsaXN0QWdlbnQsIGxpc3QsIG1ldGFkYXRhKTsKLSAgICAgICAgbVNlc3Npb25TdHViLm5vdGlmeVBsYXlsaXN0Q2hhbmdlZE5vdExvY2tlZChsaXN0LCBtZXRhZGF0YSk7Ci0gICAgfQotCi0gICAgcHJpdmF0ZSB2b2lkIG5vdGlmeVBsYXlsaXN0TWV0YWRhdGFDaGFuZ2VkT25FeGVjdXRvcihNZWRpYVBsYXlsaXN0QWdlbnQgcGxheWxpc3RBZ2VudCwKLSAgICAgICAgICAgIE1lZGlhTWV0YWRhdGEyIG1ldGFkYXRhKSB7Ci0gICAgICAgIGlmIChwbGF5bGlzdEFnZW50ICE9IG1QbGF5bGlzdEFnZW50KSB7Ci0gICAgICAgICAgICAvLyBJZ25vcmUgY2FsbHMgZnJvbSB0aGUgb2xkIGFnZW50LgotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgICAgIG1DYWxsYmFjay5vblBsYXlsaXN0TWV0YWRhdGFDaGFuZ2VkKG1JbnN0YW5jZSwgcGxheWxpc3RBZ2VudCwgbWV0YWRhdGEpOwotICAgICAgICBtU2Vzc2lvblN0dWIubm90aWZ5UGxheWxpc3RNZXRhZGF0YUNoYW5nZWROb3RMb2NrZWQobWV0YWRhdGEpOwotICAgIH0KLQotICAgIHByaXZhdGUgdm9pZCBub3RpZnlSZXBlYXRNb2RlQ2hhbmdlZE9uRXhlY3V0b3IoTWVkaWFQbGF5bGlzdEFnZW50IHBsYXlsaXN0QWdlbnQsCi0gICAgICAgICAgICBpbnQgcmVwZWF0TW9kZSkgewotICAgICAgICBpZiAocGxheWxpc3RBZ2VudCAhPSBtUGxheWxpc3RBZ2VudCkgewotICAgICAgICAgICAgLy8gSWdub3JlIGNhbGxzIGZyb20gdGhlIG9sZCBhZ2VudC4KLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAgICAgICBtQ2FsbGJhY2sub25SZXBlYXRNb2RlQ2hhbmdlZChtSW5zdGFuY2UsIHBsYXlsaXN0QWdlbnQsIHJlcGVhdE1vZGUpOwotICAgICAgICBtU2Vzc2lvblN0dWIubm90aWZ5UmVwZWF0TW9kZUNoYW5nZWROb3RMb2NrZWQocmVwZWF0TW9kZSk7Ci0gICAgfQotCi0gICAgcHJpdmF0ZSB2b2lkIG5vdGlmeVNodWZmbGVNb2RlQ2hhbmdlZE9uRXhlY3V0b3IoTWVkaWFQbGF5bGlzdEFnZW50IHBsYXlsaXN0QWdlbnQsCi0gICAgICAgICAgICBpbnQgc2h1ZmZsZU1vZGUpIHsKLSAgICAgICAgaWYgKHBsYXlsaXN0QWdlbnQgIT0gbVBsYXlsaXN0QWdlbnQpIHsKLSAgICAgICAgICAgIC8vIElnbm9yZSBjYWxscyBmcm9tIHRoZSBvbGQgYWdlbnQuCi0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICAgICAgbUNhbGxiYWNrLm9uU2h1ZmZsZU1vZGVDaGFuZ2VkKG1JbnN0YW5jZSwgcGxheWxpc3RBZ2VudCwgc2h1ZmZsZU1vZGUpOwotICAgICAgICBtU2Vzc2lvblN0dWIubm90aWZ5U2h1ZmZsZU1vZGVDaGFuZ2VkTm90TG9ja2VkKHNodWZmbGVNb2RlKTsKLSAgICB9Ci0KLSAgICBwcml2YXRlIHZvaWQgbm90aWZ5UGxheWVyVXBkYXRlZE5vdExvY2tlZChNZWRpYVBsYXllckJhc2Ugb2xkUGxheWVyKSB7Ci0gICAgICAgIGZpbmFsIE1lZGlhUGxheWVyQmFzZSBwbGF5ZXIgPSBtUGxheWVyOwotICAgICAgICAvLyBUT0RPKGphZXdhbik6IChDYW4gYmUgcG9zdC1QKSBGaW5kIGJldHRlciB3YXkgZm9yIHBsYXllci5nZXRQbGF5ZXJTdGF0ZSgpIC8vCi0gICAgICAgIC8vICAgICAgICAgICAgICAgSW4gdGhlb3J5LCBTZXNzaW9uLmdldFhYWCgpIG1heSBub3QgYmUgdGhlIHNhbWUgYXMgUGxheWVyLmdldFhYWCgpCi0gICAgICAgIC8vICAgICAgICAgICAgICAgYW5kIHdlIHNob3VsZCBub3RpZnkgaW5mb3JtYXRpb24gb2YgdGhlIHNlc3Npb24uZ2V0WFhYKCkgaW5zdGVhZCBvZgotICAgICAgICAvLyAgICAgICAgICAgICAgIHBsYXllci5nZXRYWFgoKQotICAgICAgICAvLyBOb3RpZnkgdG8gY29udHJvbGxlcnMgYXMgd2VsbC4KLSAgICAgICAgZmluYWwgaW50IHN0YXRlID0gcGxheWVyLmdldFBsYXllclN0YXRlKCk7Ci0gICAgICAgIGlmIChzdGF0ZSAhPSBvbGRQbGF5ZXIuZ2V0UGxheWVyU3RhdGUoKSkgewotICAgICAgICAgICAgbVNlc3Npb25TdHViLm5vdGlmeVBsYXllclN0YXRlQ2hhbmdlZE5vdExvY2tlZChzdGF0ZSk7Ci0gICAgICAgIH0KLQotICAgICAgICBmaW5hbCBsb25nIGN1cnJlbnRUaW1lTXMgPSBTeXN0ZW0uY3VycmVudFRpbWVNaWxsaXMoKTsKLSAgICAgICAgZmluYWwgbG9uZyBwb3NpdGlvbiA9IHBsYXllci5nZXRDdXJyZW50UG9zaXRpb24oKTsKLSAgICAgICAgaWYgKHBvc2l0aW9uICE9IG9sZFBsYXllci5nZXRDdXJyZW50UG9zaXRpb24oKSkgewotICAgICAgICAgICAgbVNlc3Npb25TdHViLm5vdGlmeVBvc2l0aW9uQ2hhbmdlZE5vdExvY2tlZChjdXJyZW50VGltZU1zLCBwb3NpdGlvbik7Ci0gICAgICAgIH0KLQotICAgICAgICBmaW5hbCBmbG9hdCBzcGVlZCA9IHBsYXllci5nZXRQbGF5YmFja1NwZWVkKCk7Ci0gICAgICAgIGlmIChzcGVlZCAhPSBvbGRQbGF5ZXIuZ2V0UGxheWJhY2tTcGVlZCgpKSB7Ci0gICAgICAgICAgICBtU2Vzc2lvblN0dWIubm90aWZ5UGxheWJhY2tTcGVlZENoYW5nZWROb3RMb2NrZWQoc3BlZWQpOwotICAgICAgICB9Ci0KLSAgICAgICAgZmluYWwgbG9uZyBidWZmZXJlZFBvc2l0aW9uID0gcGxheWVyLmdldEJ1ZmZlcmVkUG9zaXRpb24oKTsKLSAgICAgICAgaWYgKGJ1ZmZlcmVkUG9zaXRpb24gIT0gb2xkUGxheWVyLmdldEJ1ZmZlcmVkUG9zaXRpb24oKSkgewotICAgICAgICAgICAgbVNlc3Npb25TdHViLm5vdGlmeUJ1ZmZlcmVkUG9zaXRpb25DaGFuZ2VkTm90TG9ja2VkKGJ1ZmZlcmVkUG9zaXRpb24pOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgQ29udGV4dCBnZXRDb250ZXh0KCkgewotICAgICAgICByZXR1cm4gbUNvbnRleHQ7Ci0gICAgfQotCi0gICAgTWVkaWFTZXNzaW9uMiBnZXRJbnN0YW5jZSgpIHsKLSAgICAgICAgcmV0dXJuIG1JbnN0YW5jZTsKLSAgICB9Ci0KLSAgICBNZWRpYVBsYXllckJhc2UgZ2V0UGxheWVyKCkgewotICAgICAgICByZXR1cm4gbVBsYXllcjsKLSAgICB9Ci0KLSAgICBNZWRpYVBsYXlsaXN0QWdlbnQgZ2V0UGxheWxpc3RBZ2VudCgpIHsKLSAgICAgICAgcmV0dXJuIG1QbGF5bGlzdEFnZW50OwotICAgIH0KLQotICAgIEV4ZWN1dG9yIGdldENhbGxiYWNrRXhlY3V0b3IoKSB7Ci0gICAgICAgIHJldHVybiBtQ2FsbGJhY2tFeGVjdXRvcjsKLSAgICB9Ci0KLSAgICBTZXNzaW9uQ2FsbGJhY2sgZ2V0Q2FsbGJhY2soKSB7Ci0gICAgICAgIHJldHVybiBtQ2FsbGJhY2s7Ci0gICAgfQotCi0gICAgTWVkaWFTZXNzaW9uMlN0dWIgZ2V0U2Vzc2lvblN0dWIoKSB7Ci0gICAgICAgIHJldHVybiBtU2Vzc2lvblN0dWI7Ci0gICAgfQotCi0gICAgVm9sdW1lUHJvdmlkZXIyIGdldFZvbHVtZVByb3ZpZGVyKCkgewotICAgICAgICByZXR1cm4gbVZvbHVtZVByb3ZpZGVyOwotICAgIH0KLQotICAgIFBsYXliYWNrSW5mbyBnZXRQbGF5YmFja0luZm8oKSB7Ci0gICAgICAgIHN5bmNocm9uaXplZCAobUxvY2spIHsKLSAgICAgICAgICAgIHJldHVybiBtUGxheWJhY2tJbmZvOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgUGVuZGluZ0ludGVudCBnZXRTZXNzaW9uQWN0aXZpdHkoKSB7Ci0gICAgICAgIHJldHVybiBtU2Vzc2lvbkFjdGl2aXR5OwotICAgIH0KLQotICAgIHByaXZhdGUgc3RhdGljIGNsYXNzIE15UGxheWVyRXZlbnRDYWxsYmFjayBleHRlbmRzIFBsYXllckV2ZW50Q2FsbGJhY2sgewotICAgICAgICBwcml2YXRlIGZpbmFsIFdlYWtSZWZlcmVuY2U8TWVkaWFTZXNzaW9uMkltcGw+IG1TZXNzaW9uOwotCi0gICAgICAgIHByaXZhdGUgTXlQbGF5ZXJFdmVudENhbGxiYWNrKE1lZGlhU2Vzc2lvbjJJbXBsIHNlc3Npb24pIHsKLSAgICAgICAgICAgIG1TZXNzaW9uID0gbmV3IFdlYWtSZWZlcmVuY2U8PihzZXNzaW9uKTsKLSAgICAgICAgfQotCi0gICAgICAgIEBPdmVycmlkZQotICAgICAgICBwdWJsaWMgdm9pZCBvbkN1cnJlbnREYXRhU291cmNlQ2hhbmdlZChNZWRpYVBsYXllckJhc2UgbXBiLCBEYXRhU291cmNlRGVzYyBkc2QpIHsKLSAgICAgICAgICAgIE1lZGlhU2Vzc2lvbjJJbXBsIHNlc3Npb24gPSBnZXRTZXNzaW9uKCk7Ci0gICAgICAgICAgICBpZiAoc2Vzc2lvbiA9PSBudWxsIHx8IGRzZCA9PSBudWxsKSB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgc2Vzc2lvbi5nZXRDYWxsYmFja0V4ZWN1dG9yKCkuZXhlY3V0ZSgoKSAtPiB7Ci0gICAgICAgICAgICAgICAgTWVkaWFJdGVtMiBpdGVtID0gZ2V0TWVkaWFJdGVtKHNlc3Npb24sIGRzZCk7Ci0gICAgICAgICAgICAgICAgaWYgKGl0ZW0gPT0gbnVsbCkgewotICAgICAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIHNlc3Npb24uZ2V0Q2FsbGJhY2soKS5vbkN1cnJlbnRNZWRpYUl0ZW1DaGFuZ2VkKHNlc3Npb24uZ2V0SW5zdGFuY2UoKSwgbXBiLCBpdGVtKTsKLSAgICAgICAgICAgICAgICAvLyBUT0RPIChqYWV3YW4pOiBOb3RpZnkgY29udHJvbGxlcnMgdGhyb3VnaCBhcHByb3ByaWF0ZSBjYWxsYmFjay4gKGIvNzQ1MDU5MzYpCi0gICAgICAgICAgICB9KTsKLSAgICAgICAgfQotCi0gICAgICAgIEBPdmVycmlkZQotICAgICAgICBwdWJsaWMgdm9pZCBvbk1lZGlhUHJlcGFyZWQoTWVkaWFQbGF5ZXJCYXNlIG1wYiwgRGF0YVNvdXJjZURlc2MgZHNkKSB7Ci0gICAgICAgICAgICBNZWRpYVNlc3Npb24ySW1wbCBzZXNzaW9uID0gZ2V0U2Vzc2lvbigpOwotICAgICAgICAgICAgaWYgKHNlc3Npb24gPT0gbnVsbCB8fCBkc2QgPT0gbnVsbCkgewotICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHNlc3Npb24uZ2V0Q2FsbGJhY2tFeGVjdXRvcigpLmV4ZWN1dGUoKCkgLT4gewotICAgICAgICAgICAgICAgIE1lZGlhSXRlbTIgaXRlbSA9IGdldE1lZGlhSXRlbShzZXNzaW9uLCBkc2QpOwotICAgICAgICAgICAgICAgIGlmIChpdGVtID09IG51bGwpIHsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBzZXNzaW9uLmdldENhbGxiYWNrKCkub25NZWRpYVByZXBhcmVkKHNlc3Npb24uZ2V0SW5zdGFuY2UoKSwgbXBiLCBpdGVtKTsKLSAgICAgICAgICAgICAgICAvLyBUT0RPIChqYWV3YW4pOiBOb3RpZnkgY29udHJvbGxlcnMgdGhyb3VnaCBhcHByb3ByaWF0ZSBjYWxsYmFjay4gKGIvNzQ1MDU5MzYpCi0gICAgICAgICAgICB9KTsKLSAgICAgICAgfQotCi0gICAgICAgIEBPdmVycmlkZQotICAgICAgICBwdWJsaWMgdm9pZCBvblBsYXllclN0YXRlQ2hhbmdlZChNZWRpYVBsYXllckJhc2UgbXBiLCBpbnQgc3RhdGUpIHsKLSAgICAgICAgICAgIE1lZGlhU2Vzc2lvbjJJbXBsIHNlc3Npb24gPSBnZXRTZXNzaW9uKCk7Ci0gICAgICAgICAgICBpZiAoc2Vzc2lvbiA9PSBudWxsKSB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgc2Vzc2lvbi5nZXRDYWxsYmFja0V4ZWN1dG9yKCkuZXhlY3V0ZSgoKSAtPiB7Ci0gICAgICAgICAgICAgICAgc2Vzc2lvbi5nZXRDYWxsYmFjaygpLm9uUGxheWVyU3RhdGVDaGFuZ2VkKHNlc3Npb24uZ2V0SW5zdGFuY2UoKSwgbXBiLCBzdGF0ZSk7Ci0gICAgICAgICAgICAgICAgc2Vzc2lvbi5nZXRTZXNzaW9uU3R1YigpLm5vdGlmeVBsYXllclN0YXRlQ2hhbmdlZE5vdExvY2tlZChzdGF0ZSk7Ci0gICAgICAgICAgICB9KTsKLSAgICAgICAgfQotCi0gICAgICAgIEBPdmVycmlkZQotICAgICAgICBwdWJsaWMgdm9pZCBvbkJ1ZmZlcmluZ1N0YXRlQ2hhbmdlZChNZWRpYVBsYXllckJhc2UgbXBiLCBEYXRhU291cmNlRGVzYyBkc2QsIGludCBzdGF0ZSkgewotICAgICAgICAgICAgTWVkaWFTZXNzaW9uMkltcGwgc2Vzc2lvbiA9IGdldFNlc3Npb24oKTsKLSAgICAgICAgICAgIGlmIChzZXNzaW9uID09IG51bGwgfHwgZHNkID09IG51bGwpIHsKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBzZXNzaW9uLmdldENhbGxiYWNrRXhlY3V0b3IoKS5leGVjdXRlKCgpIC0+IHsKLSAgICAgICAgICAgICAgICBNZWRpYUl0ZW0yIGl0ZW0gPSBnZXRNZWRpYUl0ZW0oc2Vzc2lvbiwgZHNkKTsKLSAgICAgICAgICAgICAgICBpZiAoaXRlbSA9PSBudWxsKSB7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgc2Vzc2lvbi5nZXRDYWxsYmFjaygpLm9uQnVmZmVyaW5nU3RhdGVDaGFuZ2VkKAotICAgICAgICAgICAgICAgICAgICAgICAgc2Vzc2lvbi5nZXRJbnN0YW5jZSgpLCBtcGIsIGl0ZW0sIHN0YXRlKTsKLSAgICAgICAgICAgICAgICAvLyBUT0RPIChqYWV3YW4pOiBOb3RpZnkgY29udHJvbGxlcnMgdGhyb3VnaCBhcHByb3ByaWF0ZSBjYWxsYmFjay4gKGIvNzQ1MDU5MzYpCi0gICAgICAgICAgICB9KTsKLSAgICAgICAgfQotCi0gICAgICAgIHByaXZhdGUgTWVkaWFTZXNzaW9uMkltcGwgZ2V0U2Vzc2lvbigpIHsKLSAgICAgICAgICAgIGZpbmFsIE1lZGlhU2Vzc2lvbjJJbXBsIHNlc3Npb24gPSBtU2Vzc2lvbi5nZXQoKTsKLSAgICAgICAgICAgIGlmIChzZXNzaW9uID09IG51bGwgJiYgREVCVUcpIHsKLSAgICAgICAgICAgICAgICBMb2cuZChUQUcsICJTZXNzaW9uIGlzIGNsb3NlZCIsIG5ldyBJbGxlZ2FsU3RhdGVFeGNlcHRpb24oKSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICByZXR1cm4gc2Vzc2lvbjsKLSAgICAgICAgfQotCi0gICAgICAgIHByaXZhdGUgTWVkaWFJdGVtMiBnZXRNZWRpYUl0ZW0oTWVkaWFTZXNzaW9uMkltcGwgc2Vzc2lvbiwgRGF0YVNvdXJjZURlc2MgZHNkKSB7Ci0gICAgICAgICAgICBNZWRpYVBsYXlsaXN0QWdlbnQgYWdlbnQgPSBzZXNzaW9uLmdldFBsYXlsaXN0QWdlbnQoKTsKLSAgICAgICAgICAgIGlmIChhZ2VudCA9PSBudWxsKSB7Ci0gICAgICAgICAgICAgICAgaWYgKERFQlVHKSB7Ci0gICAgICAgICAgICAgICAgICAgIExvZy5kKFRBRywgIlNlc3Npb24gaXMgY2xvc2VkIiwgbmV3IElsbGVnYWxTdGF0ZUV4Y2VwdGlvbigpKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBNZWRpYUl0ZW0yIGl0ZW0gPSBhZ2VudC5nZXRNZWRpYUl0ZW0oZHNkKTsKLSAgICAgICAgICAgIGlmIChpdGVtID09IG51bGwpIHsKLSAgICAgICAgICAgICAgICBpZiAoREVCVUcpIHsKLSAgICAgICAgICAgICAgICAgICAgTG9nLmQoVEFHLCAiQ291bGQgbm90IGZpbmQgbWF0Y2hpbmcgaXRlbSBmb3IgZHNkPSIgKyBkc2QsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3IE5vU3VjaEVsZW1lbnRFeGNlcHRpb24oKSk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICAgICAgcmV0dXJuIGl0ZW07Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBwcml2YXRlIHN0YXRpYyBjbGFzcyBNeVBsYXlsaXN0RXZlbnRDYWxsYmFjayBleHRlbmRzIFBsYXlsaXN0RXZlbnRDYWxsYmFjayB7Ci0gICAgICAgIHByaXZhdGUgZmluYWwgV2Vha1JlZmVyZW5jZTxNZWRpYVNlc3Npb24ySW1wbD4gbVNlc3Npb247Ci0KLSAgICAgICAgcHJpdmF0ZSBNeVBsYXlsaXN0RXZlbnRDYWxsYmFjayhNZWRpYVNlc3Npb24ySW1wbCBzZXNzaW9uKSB7Ci0gICAgICAgICAgICBtU2Vzc2lvbiA9IG5ldyBXZWFrUmVmZXJlbmNlPD4oc2Vzc2lvbik7Ci0gICAgICAgIH0KLQotICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgcHVibGljIHZvaWQgb25QbGF5bGlzdENoYW5nZWQoTWVkaWFQbGF5bGlzdEFnZW50IHBsYXlsaXN0QWdlbnQsIExpc3Q8TWVkaWFJdGVtMj4gbGlzdCwKLSAgICAgICAgICAgICAgICBNZWRpYU1ldGFkYXRhMiBtZXRhZGF0YSkgewotICAgICAgICAgICAgZmluYWwgTWVkaWFTZXNzaW9uMkltcGwgc2Vzc2lvbiA9IG1TZXNzaW9uLmdldCgpOwotICAgICAgICAgICAgaWYgKHNlc3Npb24gPT0gbnVsbCkgewotICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHNlc3Npb24ubm90aWZ5UGxheWxpc3RDaGFuZ2VkT25FeGVjdXRvcihwbGF5bGlzdEFnZW50LCBsaXN0LCBtZXRhZGF0YSk7Ci0gICAgICAgIH0KLQotICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgcHVibGljIHZvaWQgb25QbGF5bGlzdE1ldGFkYXRhQ2hhbmdlZChNZWRpYVBsYXlsaXN0QWdlbnQgcGxheWxpc3RBZ2VudCwKLSAgICAgICAgICAgICAgICBNZWRpYU1ldGFkYXRhMiBtZXRhZGF0YSkgewotICAgICAgICAgICAgZmluYWwgTWVkaWFTZXNzaW9uMkltcGwgc2Vzc2lvbiA9IG1TZXNzaW9uLmdldCgpOwotICAgICAgICAgICAgaWYgKHNlc3Npb24gPT0gbnVsbCkgewotICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHNlc3Npb24ubm90aWZ5UGxheWxpc3RNZXRhZGF0YUNoYW5nZWRPbkV4ZWN1dG9yKHBsYXlsaXN0QWdlbnQsIG1ldGFkYXRhKTsKLSAgICAgICAgfQotCi0gICAgICAgIEBPdmVycmlkZQotICAgICAgICBwdWJsaWMgdm9pZCBvblJlcGVhdE1vZGVDaGFuZ2VkKE1lZGlhUGxheWxpc3RBZ2VudCBwbGF5bGlzdEFnZW50LCBpbnQgcmVwZWF0TW9kZSkgewotICAgICAgICAgICAgZmluYWwgTWVkaWFTZXNzaW9uMkltcGwgc2Vzc2lvbiA9IG1TZXNzaW9uLmdldCgpOwotICAgICAgICAgICAgaWYgKHNlc3Npb24gPT0gbnVsbCkgewotICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHNlc3Npb24ubm90aWZ5UmVwZWF0TW9kZUNoYW5nZWRPbkV4ZWN1dG9yKHBsYXlsaXN0QWdlbnQsIHJlcGVhdE1vZGUpOwotICAgICAgICB9Ci0KLSAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgIHB1YmxpYyB2b2lkIG9uU2h1ZmZsZU1vZGVDaGFuZ2VkKE1lZGlhUGxheWxpc3RBZ2VudCBwbGF5bGlzdEFnZW50LCBpbnQgc2h1ZmZsZU1vZGUpIHsKLSAgICAgICAgICAgIGZpbmFsIE1lZGlhU2Vzc2lvbjJJbXBsIHNlc3Npb24gPSBtU2Vzc2lvbi5nZXQoKTsKLSAgICAgICAgICAgIGlmIChzZXNzaW9uID09IG51bGwpIHsKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBzZXNzaW9uLm5vdGlmeVNodWZmbGVNb2RlQ2hhbmdlZE9uRXhlY3V0b3IocGxheWxpc3RBZ2VudCwgc2h1ZmZsZU1vZGUpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgcHVibGljIHN0YXRpYyBmaW5hbCBjbGFzcyBDb21tYW5kSW1wbCBpbXBsZW1lbnRzIENvbW1hbmRQcm92aWRlciB7Ci0gICAgICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBLRVlfQ09NTUFORF9DT0RFCi0gICAgICAgICAgICAgICAgPSAiYW5kcm9pZC5tZWRpYS5tZWRpYV9zZXNzaW9uMi5jb21tYW5kLmNvbW1hbmRfY29kZSI7Ci0gICAgICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBLRVlfQ09NTUFORF9DVVNUT01fQ09NTUFORAotICAgICAgICAgICAgICAgID0gImFuZHJvaWQubWVkaWEubWVkaWFfc2Vzc2lvbjIuY29tbWFuZC5jdXN0b21fY29tbWFuZCI7Ci0gICAgICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBLRVlfQ09NTUFORF9FWFRSQVMKLSAgICAgICAgICAgICAgICA9ICJhbmRyb2lkLm1lZGlhLm1lZGlhX3Nlc3Npb24yLmNvbW1hbmQuZXh0cmFzIjsKLQotICAgICAgICBwcml2YXRlIGZpbmFsIFNlc3Npb25Db21tYW5kMiBtSW5zdGFuY2U7Ci0gICAgICAgIHByaXZhdGUgZmluYWwgaW50IG1Db21tYW5kQ29kZTsKLSAgICAgICAgLy8gTm9ubnVsbCBpZiBpdCdzIGN1c3RvbSBjb21tYW5kCi0gICAgICAgIHByaXZhdGUgZmluYWwgU3RyaW5nIG1DdXN0b21Db21tYW5kOwotICAgICAgICBwcml2YXRlIGZpbmFsIEJ1bmRsZSBtRXh0cmFzOwotCi0gICAgICAgIHB1YmxpYyBDb21tYW5kSW1wbChTZXNzaW9uQ29tbWFuZDIgaW5zdGFuY2UsIGludCBjb21tYW5kQ29kZSkgewotICAgICAgICAgICAgbUluc3RhbmNlID0gaW5zdGFuY2U7Ci0gICAgICAgICAgICBtQ29tbWFuZENvZGUgPSBjb21tYW5kQ29kZTsKLSAgICAgICAgICAgIG1DdXN0b21Db21tYW5kID0gbnVsbDsKLSAgICAgICAgICAgIG1FeHRyYXMgPSBudWxsOwotICAgICAgICB9Ci0KLSAgICAgICAgcHVibGljIENvbW1hbmRJbXBsKFNlc3Npb25Db21tYW5kMiBpbnN0YW5jZSwgQE5vbk51bGwgU3RyaW5nIGFjdGlvbiwKLSAgICAgICAgICAgICAgICBATnVsbGFibGUgQnVuZGxlIGV4dHJhcykgewotICAgICAgICAgICAgaWYgKGFjdGlvbiA9PSBudWxsKSB7Ci0gICAgICAgICAgICAgICAgdGhyb3cgbmV3IElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbigiYWN0aW9uIHNob3VsZG4ndCBiZSBudWxsIik7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBtSW5zdGFuY2UgPSBpbnN0YW5jZTsKLSAgICAgICAgICAgIG1Db21tYW5kQ29kZSA9IENPTU1BTkRfQ09ERV9DVVNUT007Ci0gICAgICAgICAgICBtQ3VzdG9tQ29tbWFuZCA9IGFjdGlvbjsKLSAgICAgICAgICAgIG1FeHRyYXMgPSBleHRyYXM7Ci0gICAgICAgIH0KLQotICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgcHVibGljIGludCBnZXRDb21tYW5kQ29kZV9pbXBsKCkgewotICAgICAgICAgICAgcmV0dXJuIG1Db21tYW5kQ29kZTsKLSAgICAgICAgfQotCi0gICAgICAgIEBPdmVycmlkZQotICAgICAgICBwdWJsaWMgQE51bGxhYmxlIFN0cmluZyBnZXRDdXN0b21Db21tYW5kX2ltcGwoKSB7Ci0gICAgICAgICAgICByZXR1cm4gbUN1c3RvbUNvbW1hbmQ7Ci0gICAgICAgIH0KLQotICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgcHVibGljIEBOdWxsYWJsZSBCdW5kbGUgZ2V0RXh0cmFzX2ltcGwoKSB7Ci0gICAgICAgICAgICByZXR1cm4gbUV4dHJhczsKLSAgICAgICAgfQotCi0gICAgICAgIC8qKgotICAgICAgICAgKiBAcmV0dXJuIGEgbmV3IEJ1bmRsZSBpbnN0YW5jZSBmcm9tIHRoZSBDb21tYW5kCi0gICAgICAgICAqLwotICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgcHVibGljIEJ1bmRsZSB0b0J1bmRsZV9pbXBsKCkgewotICAgICAgICAgICAgQnVuZGxlIGJ1bmRsZSA9IG5ldyBCdW5kbGUoKTsKLSAgICAgICAgICAgIGJ1bmRsZS5wdXRJbnQoS0VZX0NPTU1BTkRfQ09ERSwgbUNvbW1hbmRDb2RlKTsKLSAgICAgICAgICAgIGJ1bmRsZS5wdXRTdHJpbmcoS0VZX0NPTU1BTkRfQ1VTVE9NX0NPTU1BTkQsIG1DdXN0b21Db21tYW5kKTsKLSAgICAgICAgICAgIGJ1bmRsZS5wdXRCdW5kbGUoS0VZX0NPTU1BTkRfRVhUUkFTLCBtRXh0cmFzKTsKLSAgICAgICAgICAgIHJldHVybiBidW5kbGU7Ci0gICAgICAgIH0KLQotICAgICAgICAvKioKLSAgICAgICAgICogQHJldHVybiBhIG5ldyBDb21tYW5kIGluc3RhbmNlIGZyb20gdGhlIEJ1bmRsZQotICAgICAgICAgKi8KLSAgICAgICAgcHVibGljIHN0YXRpYyBTZXNzaW9uQ29tbWFuZDIgZnJvbUJ1bmRsZV9pbXBsKEBOb25OdWxsIEJ1bmRsZSBjb21tYW5kKSB7Ci0gICAgICAgICAgICBpZiAoY29tbWFuZCA9PSBudWxsKSB7Ci0gICAgICAgICAgICAgICAgdGhyb3cgbmV3IElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbigiY29tbWFuZCBzaG91bGRuJ3QgYmUgbnVsbCIpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgaW50IGNvZGUgPSBjb21tYW5kLmdldEludChLRVlfQ09NTUFORF9DT0RFKTsKLSAgICAgICAgICAgIGlmIChjb2RlICE9IENPTU1BTkRfQ09ERV9DVVNUT00pIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gbmV3IFNlc3Npb25Db21tYW5kMihjb2RlKTsKLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgU3RyaW5nIGN1c3RvbUNvbW1hbmQgPSBjb21tYW5kLmdldFN0cmluZyhLRVlfQ09NTUFORF9DVVNUT01fQ09NTUFORCk7Ci0gICAgICAgICAgICAgICAgaWYgKGN1c3RvbUNvbW1hbmQgPT0gbnVsbCkgewotICAgICAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBTZXNzaW9uQ29tbWFuZDIoY3VzdG9tQ29tbWFuZCwgY29tbWFuZC5nZXRCdW5kbGUoS0VZX0NPTU1BTkRfRVhUUkFTKSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgcHVibGljIGJvb2xlYW4gZXF1YWxzX2ltcGwoT2JqZWN0IG9iaikgewotICAgICAgICAgICAgaWYgKCEob2JqIGluc3RhbmNlb2YgQ29tbWFuZEltcGwpKSB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgQ29tbWFuZEltcGwgb3RoZXIgPSAoQ29tbWFuZEltcGwpIG9iajsKLSAgICAgICAgICAgIC8vIFRPRE8oamFld2FuKTogQ29tcGFyZSBDb21tYW5kcyB3aXRoIHRoZSBnZW5lcmF0ZWQgVVVJRCwgYXMgd2UncmUgZG9pbmcgZm9yIHRoZSBNSTIuCi0gICAgICAgICAgICByZXR1cm4gbUNvbW1hbmRDb2RlID09IG90aGVyLm1Db21tYW5kQ29kZQotICAgICAgICAgICAgICAgICAgICAmJiBUZXh0VXRpbHMuZXF1YWxzKG1DdXN0b21Db21tYW5kLCBvdGhlci5tQ3VzdG9tQ29tbWFuZCk7Ci0gICAgICAgIH0KLQotICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgcHVibGljIGludCBoYXNoQ29kZV9pbXBsKCkgewotICAgICAgICAgICAgZmluYWwgaW50IHByaW1lID0gMzE7Ci0gICAgICAgICAgICByZXR1cm4gKChtQ3VzdG9tQ29tbWFuZCAhPSBudWxsKQotICAgICAgICAgICAgICAgICAgICA/IG1DdXN0b21Db21tYW5kLmhhc2hDb2RlKCkgOiAwKSAqIHByaW1lICsgbUNvbW1hbmRDb2RlOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogUmVwcmVzZW50IHNldCBvZiB7QGxpbmsgU2Vzc2lvbkNvbW1hbmQyfS4KLSAgICAgKi8KLSAgICBwdWJsaWMgc3RhdGljIGNsYXNzIENvbW1hbmRHcm91cEltcGwgaW1wbGVtZW50cyBDb21tYW5kR3JvdXBQcm92aWRlciB7Ci0gICAgICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBLRVlfQ09NTUFORFMgPQotICAgICAgICAgICAgICAgICJhbmRyb2lkLm1lZGlhLm1lZGlhc2Vzc2lvbjIuY29tbWFuZGdyb3VwLmNvbW1hbmRzIjsKLQotICAgICAgICAvLyBQcmVmaXggZm9yIGFsbCBjb21tYW5kIGNvZGVzCi0gICAgICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBQUkVGSVhfQ09NTUFORF9DT0RFID0gIkNPTU1BTkRfQ09ERV8iOwotCi0gICAgICAgIC8vIFByZWZpeCBmb3IgY29tbWFuZCBjb2RlcyB0aGF0IHdpbGwgYmUgc2VudCBkaXJlY3RseSB0byB0aGUgTWVkaWFQbGF5ZXJCYXNlCi0gICAgICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBQUkVGSVhfQ09NTUFORF9DT0RFX1BMQVlCQUNLID0gIkNPTU1BTkRfQ09ERV9QTEFZQkFDS18iOwotCi0gICAgICAgIC8vIFByZWZpeCBmb3IgY29tbWFuZCBjb2RlcyB0aGF0IHdpbGwgYmUgc2VudCBkaXJlY3RseSB0byB0aGUgTWVkaWFQbGF5bGlzdEFnZW50Ci0gICAgICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBQUkVGSVhfQ09NTUFORF9DT0RFX1BMQVlMSVNUID0gIkNPTU1BTkRfQ09ERV9QTEFZTElTVF8iOwotCi0gICAgICAgIHByaXZhdGUgU2V0PFNlc3Npb25Db21tYW5kMj4gbUNvbW1hbmRzID0gbmV3IEhhc2hTZXQ8PigpOwotICAgICAgICBwcml2YXRlIGZpbmFsIFNlc3Npb25Db21tYW5kR3JvdXAyIG1JbnN0YW5jZTsKLQotICAgICAgICBwdWJsaWMgQ29tbWFuZEdyb3VwSW1wbChTZXNzaW9uQ29tbWFuZEdyb3VwMiBpbnN0YW5jZSwgT2JqZWN0IG90aGVyKSB7Ci0gICAgICAgICAgICBtSW5zdGFuY2UgPSBpbnN0YW5jZTsKLSAgICAgICAgICAgIGlmIChvdGhlciAhPSBudWxsICYmIG90aGVyIGluc3RhbmNlb2YgQ29tbWFuZEdyb3VwSW1wbCkgewotICAgICAgICAgICAgICAgIG1Db21tYW5kcy5hZGRBbGwoKChDb21tYW5kR3JvdXBJbXBsKSBvdGhlcikubUNvbW1hbmRzKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIHB1YmxpYyBDb21tYW5kR3JvdXBJbXBsKCkgewotICAgICAgICAgICAgbUluc3RhbmNlID0gbmV3IFNlc3Npb25Db21tYW5kR3JvdXAyKHRoaXMpOwotICAgICAgICB9Ci0KLSAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgIHB1YmxpYyB2b2lkIGFkZENvbW1hbmRfaW1wbChATm9uTnVsbCBTZXNzaW9uQ29tbWFuZDIgY29tbWFuZCkgewotICAgICAgICAgICAgaWYgKGNvbW1hbmQgPT0gbnVsbCkgewotICAgICAgICAgICAgICAgIHRocm93IG5ldyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oImNvbW1hbmQgc2hvdWxkbid0IGJlIG51bGwiKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIG1Db21tYW5kcy5hZGQoY29tbWFuZCk7Ci0gICAgICAgIH0KLQotICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgcHVibGljIHZvaWQgYWRkQWxsUHJlZGVmaW5lZENvbW1hbmRzX2ltcGwoKSB7Ci0gICAgICAgICAgICBhZGRDb21tYW5kc1dpdGhQcmVmaXgoUFJFRklYX0NPTU1BTkRfQ09ERSk7Ci0gICAgICAgIH0KLQotICAgICAgICB2b2lkIGFkZEFsbFBsYXliYWNrQ29tbWFuZHMoKSB7Ci0gICAgICAgICAgICBhZGRDb21tYW5kc1dpdGhQcmVmaXgoUFJFRklYX0NPTU1BTkRfQ09ERV9QTEFZQkFDSyk7Ci0gICAgICAgIH0KLQotICAgICAgICB2b2lkIGFkZEFsbFBsYXlsaXN0Q29tbWFuZHMoKSB7Ci0gICAgICAgICAgICBhZGRDb21tYW5kc1dpdGhQcmVmaXgoUFJFRklYX0NPTU1BTkRfQ09ERV9QTEFZTElTVCk7Ci0gICAgICAgIH0KLQotICAgICAgICBwcml2YXRlIHZvaWQgYWRkQ29tbWFuZHNXaXRoUHJlZml4KFN0cmluZyBwcmVmaXgpIHsKLSAgICAgICAgICAgIC8vIFRPRE8oamFld2FuKTogKENhbiBiZSBwb3N0LVApOiBEb24ndCB1c2UgcmVmbGVjdGlvbiBmb3IgdGhpcyBwdXJwb3NlLgotICAgICAgICAgICAgZmluYWwgRmllbGRbXSBmaWVsZHMgPSBNZWRpYVNlc3Npb24yLmNsYXNzLmdldEZpZWxkcygpOwotICAgICAgICAgICAgaWYgKGZpZWxkcyAhPSBudWxsKSB7Ci0gICAgICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBmaWVsZHMubGVuZ3RoOyBpKyspIHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKGZpZWxkc1tpXS5nZXROYW1lKCkuc3RhcnRzV2l0aChwcmVmaXgpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICB0cnkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1Db21tYW5kcy5hZGQobmV3IFNlc3Npb25Db21tYW5kMihmaWVsZHNbaV0uZ2V0SW50KG51bGwpKSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9IGNhdGNoIChJbGxlZ2FsQWNjZXNzRXhjZXB0aW9uIGUpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBMb2cudyhUQUcsICJVbmV4cGVjdGVkICIgKyBmaWVsZHNbaV0gKyAiIGluIE1lZGlhU2Vzc2lvbjIiKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIEBPdmVycmlkZQotICAgICAgICBwdWJsaWMgdm9pZCByZW1vdmVDb21tYW5kX2ltcGwoQE5vbk51bGwgU2Vzc2lvbkNvbW1hbmQyIGNvbW1hbmQpIHsKLSAgICAgICAgICAgIGlmIChjb21tYW5kID09IG51bGwpIHsKLSAgICAgICAgICAgICAgICB0aHJvdyBuZXcgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKCJjb21tYW5kIHNob3VsZG4ndCBiZSBudWxsIik7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBtQ29tbWFuZHMucmVtb3ZlKGNvbW1hbmQpOwotICAgICAgICB9Ci0KLSAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgIHB1YmxpYyBib29sZWFuIGhhc0NvbW1hbmRfaW1wbChATm9uTnVsbCBTZXNzaW9uQ29tbWFuZDIgY29tbWFuZCkgewotICAgICAgICAgICAgaWYgKGNvbW1hbmQgPT0gbnVsbCkgewotICAgICAgICAgICAgICAgIHRocm93IG5ldyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oImNvbW1hbmQgc2hvdWxkbid0IGJlIG51bGwiKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHJldHVybiBtQ29tbWFuZHMuY29udGFpbnMoY29tbWFuZCk7Ci0gICAgICAgIH0KLQotICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgcHVibGljIGJvb2xlYW4gaGFzQ29tbWFuZF9pbXBsKGludCBjb2RlKSB7Ci0gICAgICAgICAgICBpZiAoY29kZSA9PSBDT01NQU5EX0NPREVfQ1VTVE9NKSB7Ci0gICAgICAgICAgICAgICAgdGhyb3cgbmV3IElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbigiVXNlIGhhc0NvbW1hbmQoQ29tbWFuZCkgZm9yIGN1c3RvbSBjb21tYW5kIik7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBmb3IgKFNlc3Npb25Db21tYW5kMiBjb21tYW5kIDogbUNvbW1hbmRzKSB7Ci0gICAgICAgICAgICAgICAgaWYgKGNvbW1hbmQuZ2V0Q29tbWFuZENvZGUoKSA9PSBjb2RlKSB7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgfQotCi0gICAgICAgIEBPdmVycmlkZQotICAgICAgICBwdWJsaWMgU2V0PFNlc3Npb25Db21tYW5kMj4gZ2V0Q29tbWFuZHNfaW1wbCgpIHsKLSAgICAgICAgICAgIHJldHVybiBnZXRDb21tYW5kcygpOwotICAgICAgICB9Ci0KLSAgICAgICAgcHVibGljIFNldDxTZXNzaW9uQ29tbWFuZDI+IGdldENvbW1hbmRzKCkgewotICAgICAgICAgICAgcmV0dXJuIENvbGxlY3Rpb25zLnVubW9kaWZpYWJsZVNldChtQ29tbWFuZHMpOwotICAgICAgICB9Ci0KLSAgICAgICAgLyoqCi0gICAgICAgICAqIEByZXR1cm4gbmV3IGJ1bmRsZSBmcm9tIHRoZSBDb21tYW5kR3JvdXAKLSAgICAgICAgICogQGhpZGUKLSAgICAgICAgICovCi0gICAgICAgIEBPdmVycmlkZQotICAgICAgICBwdWJsaWMgQnVuZGxlIHRvQnVuZGxlX2ltcGwoKSB7Ci0gICAgICAgICAgICBBcnJheUxpc3Q8QnVuZGxlPiBsaXN0ID0gbmV3IEFycmF5TGlzdDw+KCk7Ci0gICAgICAgICAgICBmb3IgKFNlc3Npb25Db21tYW5kMiBjb21tYW5kIDogbUNvbW1hbmRzKSB7Ci0gICAgICAgICAgICAgICAgbGlzdC5hZGQoY29tbWFuZC50b0J1bmRsZSgpKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIEJ1bmRsZSBidW5kbGUgPSBuZXcgQnVuZGxlKCk7Ci0gICAgICAgICAgICBidW5kbGUucHV0UGFyY2VsYWJsZUFycmF5TGlzdChLRVlfQ09NTUFORFMsIGxpc3QpOwotICAgICAgICAgICAgcmV0dXJuIGJ1bmRsZTsKLSAgICAgICAgfQotCi0gICAgICAgIC8qKgotICAgICAgICAgKiBAcmV0dXJuIG5ldyBpbnN0YW5jZSBvZiBDb21tYW5kR3JvdXAgZnJvbSB0aGUgYnVuZGxlCi0gICAgICAgICAqIEBoaWRlCi0gICAgICAgICAqLwotICAgICAgICBwdWJsaWMgc3RhdGljIEBOdWxsYWJsZSBTZXNzaW9uQ29tbWFuZEdyb3VwMiBmcm9tQnVuZGxlX2ltcGwoQnVuZGxlIGNvbW1hbmRzKSB7Ci0gICAgICAgICAgICBpZiAoY29tbWFuZHMgPT0gbnVsbCkgewotICAgICAgICAgICAgICAgIHJldHVybiBudWxsOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgTGlzdDxQYXJjZWxhYmxlPiBsaXN0ID0gY29tbWFuZHMuZ2V0UGFyY2VsYWJsZUFycmF5TGlzdChLRVlfQ09NTUFORFMpOwotICAgICAgICAgICAgaWYgKGxpc3QgPT0gbnVsbCkgewotICAgICAgICAgICAgICAgIHJldHVybiBudWxsOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgU2Vzc2lvbkNvbW1hbmRHcm91cDIgY29tbWFuZEdyb3VwID0gbmV3IFNlc3Npb25Db21tYW5kR3JvdXAyKCk7Ci0gICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGxpc3Quc2l6ZSgpOyBpKyspIHsKLSAgICAgICAgICAgICAgICBQYXJjZWxhYmxlIHBhcmNlbGFibGUgPSBsaXN0LmdldChpKTsKLSAgICAgICAgICAgICAgICBpZiAoIShwYXJjZWxhYmxlIGluc3RhbmNlb2YgQnVuZGxlKSkgewotICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgQnVuZGxlIGNvbW1hbmRCdW5kbGUgPSAoQnVuZGxlKSBwYXJjZWxhYmxlOwotICAgICAgICAgICAgICAgIFNlc3Npb25Db21tYW5kMiBjb21tYW5kID0gU2Vzc2lvbkNvbW1hbmQyLmZyb21CdW5kbGUoY29tbWFuZEJ1bmRsZSk7Ci0gICAgICAgICAgICAgICAgaWYgKGNvbW1hbmQgIT0gbnVsbCkgewotICAgICAgICAgICAgICAgICAgICBjb21tYW5kR3JvdXAuYWRkQ29tbWFuZChjb21tYW5kKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICByZXR1cm4gY29tbWFuZEdyb3VwOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgcHVibGljIHN0YXRpYyBjbGFzcyBDb250cm9sbGVySW5mb0ltcGwgaW1wbGVtZW50cyBDb250cm9sbGVySW5mb1Byb3ZpZGVyIHsKLSAgICAgICAgcHJpdmF0ZSBmaW5hbCBDb250cm9sbGVySW5mbyBtSW5zdGFuY2U7Ci0gICAgICAgIHByaXZhdGUgZmluYWwgaW50IG1VaWQ7Ci0gICAgICAgIHByaXZhdGUgZmluYWwgU3RyaW5nIG1QYWNrYWdlTmFtZTsKLSAgICAgICAgcHJpdmF0ZSBmaW5hbCBib29sZWFuIG1Jc1RydXN0ZWQ7Ci0gICAgICAgIHByaXZhdGUgZmluYWwgSU1lZGlhQ29udHJvbGxlcjIgbUNvbnRyb2xsZXJCaW5kZXI7Ci0KLSAgICAgICAgcHVibGljIENvbnRyb2xsZXJJbmZvSW1wbChDb250ZXh0IGNvbnRleHQsIENvbnRyb2xsZXJJbmZvIGluc3RhbmNlLCBpbnQgdWlkLAotICAgICAgICAgICAgICAgIGludCBwaWQsIEBOb25OdWxsIFN0cmluZyBwYWNrYWdlTmFtZSwgQE5vbk51bGwgSU1lZGlhQ29udHJvbGxlcjIgY2FsbGJhY2spIHsKLSAgICAgICAgICAgIGlmIChUZXh0VXRpbHMuaXNFbXB0eShwYWNrYWdlTmFtZSkpIHsKLSAgICAgICAgICAgICAgICB0aHJvdyBuZXcgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKCJwYWNrYWdlTmFtZSBzaG91bGRuJ3QgYmUgZW1wdHkiKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmIChjYWxsYmFjayA9PSBudWxsKSB7Ci0gICAgICAgICAgICAgICAgdGhyb3cgbmV3IElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbigiY2FsbGJhY2sgc2hvdWxkbid0IGJlIG51bGwiKTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgbUluc3RhbmNlID0gaW5zdGFuY2U7Ci0gICAgICAgICAgICBtVWlkID0gdWlkOwotICAgICAgICAgICAgbVBhY2thZ2VOYW1lID0gcGFja2FnZU5hbWU7Ci0gICAgICAgICAgICBtQ29udHJvbGxlckJpbmRlciA9IGNhbGxiYWNrOwotICAgICAgICAgICAgTWVkaWFTZXNzaW9uTWFuYWdlciBtYW5hZ2VyID0KLSAgICAgICAgICAgICAgICAgIChNZWRpYVNlc3Npb25NYW5hZ2VyKSBjb250ZXh0LmdldFN5c3RlbVNlcnZpY2UoQ29udGV4dC5NRURJQV9TRVNTSU9OX1NFUlZJQ0UpOwotICAgICAgICAgICAgLy8gQXNrIHNlcnZlciB3aGV0aGVyIHRoZSBjb250cm9sbGVyIGlzIHRydXN0ZWQuCi0gICAgICAgICAgICAvLyBBcHAgY2Fubm90IGtub3cgdGhpcyBiZWNhdXNlIGFwcHMgY2Fubm90IHF1ZXJ5IGVuYWJsZWQgbm90aWZpY2F0aW9uIGxpc3RlbmVyIGZvcgotICAgICAgICAgICAgLy8gYW5vdGhlciBwYWNrYWdlLCBidXQgc3lzdGVtIHNlcnZlciBjYW4gZG8uCi0gICAgICAgICAgICBtSXNUcnVzdGVkID0gbWFuYWdlci5pc1RydXN0ZWRGb3JNZWRpYUNvbnRyb2woCi0gICAgICAgICAgICAgICAgICAgIG5ldyBNZWRpYVNlc3Npb25NYW5hZ2VyLlJlbW90ZVVzZXJJbmZvKHBhY2thZ2VOYW1lLCBwaWQsIHVpZCkpOwotICAgICAgICB9Ci0KLSAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgIHB1YmxpYyBTdHJpbmcgZ2V0UGFja2FnZU5hbWVfaW1wbCgpIHsKLSAgICAgICAgICAgIHJldHVybiBtUGFja2FnZU5hbWU7Ci0gICAgICAgIH0KLQotICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgcHVibGljIGludCBnZXRVaWRfaW1wbCgpIHsKLSAgICAgICAgICAgIHJldHVybiBtVWlkOwotICAgICAgICB9Ci0KLSAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgIHB1YmxpYyBib29sZWFuIGlzVHJ1c3RlZF9pbXBsKCkgewotICAgICAgICAgICAgcmV0dXJuIG1Jc1RydXN0ZWQ7Ci0gICAgICAgIH0KLQotICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgcHVibGljIGludCBoYXNoQ29kZV9pbXBsKCkgewotICAgICAgICAgICAgcmV0dXJuIG1Db250cm9sbGVyQmluZGVyLmhhc2hDb2RlKCk7Ci0gICAgICAgIH0KLQotICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgcHVibGljIGJvb2xlYW4gZXF1YWxzX2ltcGwoT2JqZWN0IG9iaikgewotICAgICAgICAgICAgaWYgKCEob2JqIGluc3RhbmNlb2YgQ29udHJvbGxlckluZm8pKSB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgcmV0dXJuIGVxdWFscygoKENvbnRyb2xsZXJJbmZvKSBvYmopLmdldFByb3ZpZGVyKCkpOwotICAgICAgICB9Ci0KLSAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgIHB1YmxpYyBTdHJpbmcgdG9TdHJpbmdfaW1wbCgpIHsKLSAgICAgICAgICAgIHJldHVybiAiQ29udHJvbGxlckluZm8ge3BrZz0iICsgbVBhY2thZ2VOYW1lICsgIiwgdWlkPSIgKyBtVWlkICsgIiwgdHJ1c3RlZD0iCi0gICAgICAgICAgICAgICAgICAgICsgbUlzVHJ1c3RlZCArICJ9IjsKLSAgICAgICAgfQotCi0gICAgICAgIEBPdmVycmlkZQotICAgICAgICBwdWJsaWMgaW50IGhhc2hDb2RlKCkgewotICAgICAgICAgICAgcmV0dXJuIG1Db250cm9sbGVyQmluZGVyLmhhc2hDb2RlKCk7Ci0gICAgICAgIH0KLQotICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgcHVibGljIGJvb2xlYW4gZXF1YWxzKE9iamVjdCBvYmopIHsKLSAgICAgICAgICAgIGlmICghKG9iaiBpbnN0YW5jZW9mIENvbnRyb2xsZXJJbmZvSW1wbCkpIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBDb250cm9sbGVySW5mb0ltcGwgb3RoZXIgPSAoQ29udHJvbGxlckluZm9JbXBsKSBvYmo7Ci0gICAgICAgICAgICByZXR1cm4gbUNvbnRyb2xsZXJCaW5kZXIuYXNCaW5kZXIoKS5lcXVhbHMob3RoZXIubUNvbnRyb2xsZXJCaW5kZXIuYXNCaW5kZXIoKSk7Ci0gICAgICAgIH0KLQotICAgICAgICBDb250cm9sbGVySW5mbyBnZXRJbnN0YW5jZSgpIHsKLSAgICAgICAgICAgIHJldHVybiBtSW5zdGFuY2U7Ci0gICAgICAgIH0KLQotICAgICAgICBJQmluZGVyIGdldElkKCkgewotICAgICAgICAgICAgcmV0dXJuIG1Db250cm9sbGVyQmluZGVyLmFzQmluZGVyKCk7Ci0gICAgICAgIH0KLQotICAgICAgICBJTWVkaWFDb250cm9sbGVyMiBnZXRDb250cm9sbGVyQmluZGVyKCkgewotICAgICAgICAgICAgcmV0dXJuIG1Db250cm9sbGVyQmluZGVyOwotICAgICAgICB9Ci0KLSAgICAgICAgc3RhdGljIENvbnRyb2xsZXJJbmZvSW1wbCBmcm9tKENvbnRyb2xsZXJJbmZvIGNvbnRyb2xsZXIpIHsKLSAgICAgICAgICAgIHJldHVybiAoQ29udHJvbGxlckluZm9JbXBsKSBjb250cm9sbGVyLmdldFByb3ZpZGVyKCk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBwdWJsaWMgc3RhdGljIGNsYXNzIENvbW1hbmRCdXR0b25JbXBsIGltcGxlbWVudHMgQ29tbWFuZEJ1dHRvblByb3ZpZGVyIHsKLSAgICAgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIEtFWV9DT01NQU5ECi0gICAgICAgICAgICAgICAgPSAiYW5kcm9pZC5tZWRpYS5tZWRpYV9zZXNzaW9uMi5jb21tYW5kX2J1dHRvbi5jb21tYW5kIjsKLSAgICAgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIEtFWV9JQ09OX1JFU19JRAotICAgICAgICAgICAgICAgID0gImFuZHJvaWQubWVkaWEubWVkaWFfc2Vzc2lvbjIuY29tbWFuZF9idXR0b24uaWNvbl9yZXNfaWQiOwotICAgICAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgS0VZX0RJU1BMQVlfTkFNRQotICAgICAgICAgICAgICAgID0gImFuZHJvaWQubWVkaWEubWVkaWFfc2Vzc2lvbjIuY29tbWFuZF9idXR0b24uZGlzcGxheV9uYW1lIjsKLSAgICAgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIEtFWV9FWFRSQVMKLSAgICAgICAgICAgICAgICA9ICJhbmRyb2lkLm1lZGlhLm1lZGlhX3Nlc3Npb24yLmNvbW1hbmRfYnV0dG9uLmV4dHJhcyI7Ci0gICAgICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBLRVlfRU5BQkxFRAotICAgICAgICAgICAgICAgID0gImFuZHJvaWQubWVkaWEubWVkaWFfc2Vzc2lvbjIuY29tbWFuZF9idXR0b24uZW5hYmxlZCI7Ci0KLSAgICAgICAgcHJpdmF0ZSBmaW5hbCBDb21tYW5kQnV0dG9uIG1JbnN0YW5jZTsKLSAgICAgICAgcHJpdmF0ZSBTZXNzaW9uQ29tbWFuZDIgbUNvbW1hbmQ7Ci0gICAgICAgIHByaXZhdGUgaW50IG1JY29uUmVzSWQ7Ci0gICAgICAgIHByaXZhdGUgU3RyaW5nIG1EaXNwbGF5TmFtZTsKLSAgICAgICAgcHJpdmF0ZSBCdW5kbGUgbUV4dHJhczsKLSAgICAgICAgcHJpdmF0ZSBib29sZWFuIG1FbmFibGVkOwotCi0gICAgICAgIHB1YmxpYyBDb21tYW5kQnV0dG9uSW1wbChATnVsbGFibGUgU2Vzc2lvbkNvbW1hbmQyIGNvbW1hbmQsIGludCBpY29uUmVzSWQsCi0gICAgICAgICAgICAgICAgQE51bGxhYmxlIFN0cmluZyBkaXNwbGF5TmFtZSwgQnVuZGxlIGV4dHJhcywgYm9vbGVhbiBlbmFibGVkKSB7Ci0gICAgICAgICAgICBtQ29tbWFuZCA9IGNvbW1hbmQ7Ci0gICAgICAgICAgICBtSWNvblJlc0lkID0gaWNvblJlc0lkOwotICAgICAgICAgICAgbURpc3BsYXlOYW1lID0gZGlzcGxheU5hbWU7Ci0gICAgICAgICAgICBtRXh0cmFzID0gZXh0cmFzOwotICAgICAgICAgICAgbUVuYWJsZWQgPSBlbmFibGVkOwotICAgICAgICAgICAgbUluc3RhbmNlID0gbmV3IENvbW1hbmRCdXR0b24odGhpcyk7Ci0gICAgICAgIH0KLQotICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgcHVibGljIEBOdWxsYWJsZQotICAgICAgICBTZXNzaW9uQ29tbWFuZDIgZ2V0Q29tbWFuZF9pbXBsKCkgewotICAgICAgICAgICAgcmV0dXJuIG1Db21tYW5kOwotICAgICAgICB9Ci0KLSAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgIHB1YmxpYyBpbnQgZ2V0SWNvblJlc0lkX2ltcGwoKSB7Ci0gICAgICAgICAgICByZXR1cm4gbUljb25SZXNJZDsKLSAgICAgICAgfQotCi0gICAgICAgIEBPdmVycmlkZQotICAgICAgICBwdWJsaWMgQE51bGxhYmxlIFN0cmluZyBnZXREaXNwbGF5TmFtZV9pbXBsKCkgewotICAgICAgICAgICAgcmV0dXJuIG1EaXNwbGF5TmFtZTsKLSAgICAgICAgfQotCi0gICAgICAgIEBPdmVycmlkZQotICAgICAgICBwdWJsaWMgQE51bGxhYmxlIEJ1bmRsZSBnZXRFeHRyYXNfaW1wbCgpIHsKLSAgICAgICAgICAgIHJldHVybiBtRXh0cmFzOwotICAgICAgICB9Ci0KLSAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgIHB1YmxpYyBib29sZWFuIGlzRW5hYmxlZF9pbXBsKCkgewotICAgICAgICAgICAgcmV0dXJuIG1FbmFibGVkOwotICAgICAgICB9Ci0KLSAgICAgICAgQE5vbk51bGwgQnVuZGxlIHRvQnVuZGxlKCkgewotICAgICAgICAgICAgQnVuZGxlIGJ1bmRsZSA9IG5ldyBCdW5kbGUoKTsKLSAgICAgICAgICAgIGJ1bmRsZS5wdXRCdW5kbGUoS0VZX0NPTU1BTkQsIG1Db21tYW5kLnRvQnVuZGxlKCkpOwotICAgICAgICAgICAgYnVuZGxlLnB1dEludChLRVlfSUNPTl9SRVNfSUQsIG1JY29uUmVzSWQpOwotICAgICAgICAgICAgYnVuZGxlLnB1dFN0cmluZyhLRVlfRElTUExBWV9OQU1FLCBtRGlzcGxheU5hbWUpOwotICAgICAgICAgICAgYnVuZGxlLnB1dEJ1bmRsZShLRVlfRVhUUkFTLCBtRXh0cmFzKTsKLSAgICAgICAgICAgIGJ1bmRsZS5wdXRCb29sZWFuKEtFWV9FTkFCTEVELCBtRW5hYmxlZCk7Ci0gICAgICAgICAgICByZXR1cm4gYnVuZGxlOwotICAgICAgICB9Ci0KLSAgICAgICAgc3RhdGljIEBOdWxsYWJsZSBDb21tYW5kQnV0dG9uIGZyb21CdW5kbGUoQnVuZGxlIGJ1bmRsZSkgewotICAgICAgICAgICAgaWYgKGJ1bmRsZSA9PSBudWxsKSB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBDb21tYW5kQnV0dG9uLkJ1aWxkZXIgYnVpbGRlciA9IG5ldyBDb21tYW5kQnV0dG9uLkJ1aWxkZXIoKTsKLSAgICAgICAgICAgIGJ1aWxkZXIuc2V0Q29tbWFuZChTZXNzaW9uQ29tbWFuZDIuZnJvbUJ1bmRsZShidW5kbGUuZ2V0QnVuZGxlKEtFWV9DT01NQU5EKSkpOwotICAgICAgICAgICAgYnVpbGRlci5zZXRJY29uUmVzSWQoYnVuZGxlLmdldEludChLRVlfSUNPTl9SRVNfSUQsIDApKTsKLSAgICAgICAgICAgIGJ1aWxkZXIuc2V0RGlzcGxheU5hbWUoYnVuZGxlLmdldFN0cmluZyhLRVlfRElTUExBWV9OQU1FKSk7Ci0gICAgICAgICAgICBidWlsZGVyLnNldEV4dHJhcyhidW5kbGUuZ2V0QnVuZGxlKEtFWV9FWFRSQVMpKTsKLSAgICAgICAgICAgIGJ1aWxkZXIuc2V0RW5hYmxlZChidW5kbGUuZ2V0Qm9vbGVhbihLRVlfRU5BQkxFRCkpOwotICAgICAgICAgICAgdHJ5IHsKLSAgICAgICAgICAgICAgICByZXR1cm4gYnVpbGRlci5idWlsZCgpOwotICAgICAgICAgICAgfSBjYXRjaCAoSWxsZWdhbFN0YXRlRXhjZXB0aW9uIGUpIHsKLSAgICAgICAgICAgICAgICAvLyBNYWxmb3JtZWQgb3IgdmVyc2lvbiBtaXNtYXRjaC4gUmV0dXJuIG51bGwgZm9yIG5vdy4KLSAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIC8qKgotICAgICAgICAgKiBCdWlsZGVyIGZvciB7QGxpbmsgQ29tbWFuZEJ1dHRvbn0uCi0gICAgICAgICAqLwotICAgICAgICBwdWJsaWMgc3RhdGljIGNsYXNzIEJ1aWxkZXJJbXBsIGltcGxlbWVudHMgQ29tbWFuZEJ1dHRvblByb3ZpZGVyLkJ1aWxkZXJQcm92aWRlciB7Ci0gICAgICAgICAgICBwcml2YXRlIGZpbmFsIENvbW1hbmRCdXR0b24uQnVpbGRlciBtSW5zdGFuY2U7Ci0gICAgICAgICAgICBwcml2YXRlIFNlc3Npb25Db21tYW5kMiBtQ29tbWFuZDsKLSAgICAgICAgICAgIHByaXZhdGUgaW50IG1JY29uUmVzSWQ7Ci0gICAgICAgICAgICBwcml2YXRlIFN0cmluZyBtRGlzcGxheU5hbWU7Ci0gICAgICAgICAgICBwcml2YXRlIEJ1bmRsZSBtRXh0cmFzOwotICAgICAgICAgICAgcHJpdmF0ZSBib29sZWFuIG1FbmFibGVkOwotCi0gICAgICAgICAgICBwdWJsaWMgQnVpbGRlckltcGwoQ29tbWFuZEJ1dHRvbi5CdWlsZGVyIGluc3RhbmNlKSB7Ci0gICAgICAgICAgICAgICAgbUluc3RhbmNlID0gaW5zdGFuY2U7Ci0gICAgICAgICAgICAgICAgbUVuYWJsZWQgPSB0cnVlOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgICAgIHB1YmxpYyBDb21tYW5kQnV0dG9uLkJ1aWxkZXIgc2V0Q29tbWFuZF9pbXBsKFNlc3Npb25Db21tYW5kMiBjb21tYW5kKSB7Ci0gICAgICAgICAgICAgICAgbUNvbW1hbmQgPSBjb21tYW5kOwotICAgICAgICAgICAgICAgIHJldHVybiBtSW5zdGFuY2U7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIEBPdmVycmlkZQotICAgICAgICAgICAgcHVibGljIENvbW1hbmRCdXR0b24uQnVpbGRlciBzZXRJY29uUmVzSWRfaW1wbChpbnQgcmVzSWQpIHsKLSAgICAgICAgICAgICAgICBtSWNvblJlc0lkID0gcmVzSWQ7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIG1JbnN0YW5jZTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgICAgICBwdWJsaWMgQ29tbWFuZEJ1dHRvbi5CdWlsZGVyIHNldERpc3BsYXlOYW1lX2ltcGwoU3RyaW5nIGRpc3BsYXlOYW1lKSB7Ci0gICAgICAgICAgICAgICAgbURpc3BsYXlOYW1lID0gZGlzcGxheU5hbWU7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIG1JbnN0YW5jZTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgICAgICBwdWJsaWMgQ29tbWFuZEJ1dHRvbi5CdWlsZGVyIHNldEVuYWJsZWRfaW1wbChib29sZWFuIGVuYWJsZWQpIHsKLSAgICAgICAgICAgICAgICBtRW5hYmxlZCA9IGVuYWJsZWQ7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIG1JbnN0YW5jZTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgICAgICBwdWJsaWMgQ29tbWFuZEJ1dHRvbi5CdWlsZGVyIHNldEV4dHJhc19pbXBsKEJ1bmRsZSBleHRyYXMpIHsKLSAgICAgICAgICAgICAgICBtRXh0cmFzID0gZXh0cmFzOwotICAgICAgICAgICAgICAgIHJldHVybiBtSW5zdGFuY2U7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIEBPdmVycmlkZQotICAgICAgICAgICAgcHVibGljIENvbW1hbmRCdXR0b24gYnVpbGRfaW1wbCgpIHsKLSAgICAgICAgICAgICAgICBpZiAobUVuYWJsZWQgJiYgbUNvbW1hbmQgPT0gbnVsbCkgewotICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgSWxsZWdhbFN0YXRlRXhjZXB0aW9uKCJFbmFibGVkIGJ1dHRvbiBuZWVkcyBDb21tYW5kIgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICsgIiBmb3IgY29udHJvbGxlciB0byBpbnZva2UgdGhlIGNvbW1hbmQiKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgaWYgKG1Db21tYW5kICE9IG51bGwgJiYgbUNvbW1hbmQuZ2V0Q29tbWFuZENvZGUoKSA9PSBDT01NQU5EX0NPREVfQ1VTVE9NCi0gICAgICAgICAgICAgICAgICAgICAgICAmJiAobUljb25SZXNJZCA9PSAwIHx8IFRleHRVdGlscy5pc0VtcHR5KG1EaXNwbGF5TmFtZSkpKSB7Ci0gICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBJbGxlZ2FsU3RhdGVFeGNlcHRpb24oIkN1c3RvbSBjb21tYW5kcyBuZWVkcyBpY29uIGFuZCIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICArICIgYW5kIG5hbWUgdG8gZGlzcGxheSIpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICByZXR1cm4gbmV3IENvbW1hbmRCdXR0b25JbXBsKG1Db21tYW5kLCBtSWNvblJlc0lkLCBtRGlzcGxheU5hbWUsIG1FeHRyYXMsIG1FbmFibGVkKQotICAgICAgICAgICAgICAgICAgICAgICAgLm1JbnN0YW5jZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLQotICAgIHB1YmxpYyBzdGF0aWMgYWJzdHJhY3QgY2xhc3MgQnVpbGRlckJhc2VJbXBsPFQgZXh0ZW5kcyBNZWRpYVNlc3Npb24yLCBDIGV4dGVuZHMgU2Vzc2lvbkNhbGxiYWNrPgotICAgICAgICAgICAgaW1wbGVtZW50cyBCdWlsZGVyQmFzZVByb3ZpZGVyPFQsIEM+IHsKLSAgICAgICAgZmluYWwgQ29udGV4dCBtQ29udGV4dDsKLSAgICAgICAgTWVkaWFQbGF5ZXJCYXNlIG1QbGF5ZXI7Ci0gICAgICAgIFN0cmluZyBtSWQ7Ci0gICAgICAgIEV4ZWN1dG9yIG1DYWxsYmFja0V4ZWN1dG9yOwotICAgICAgICBDIG1DYWxsYmFjazsKLSAgICAgICAgTWVkaWFQbGF5bGlzdEFnZW50IG1QbGF5bGlzdEFnZW50OwotICAgICAgICBWb2x1bWVQcm92aWRlcjIgbVZvbHVtZVByb3ZpZGVyOwotICAgICAgICBQZW5kaW5nSW50ZW50IG1TZXNzaW9uQWN0aXZpdHk7Ci0KLSAgICAgICAgLyoqCi0gICAgICAgICAqIENvbnN0cnVjdG9yLgotICAgICAgICAgKgotICAgICAgICAgKiBAcGFyYW0gY29udGV4dCBhIGNvbnRleHQKLSAgICAgICAgICogQHRocm93cyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24gaWYgYW55IHBhcmFtZXRlciBpcyBudWxsLCBvciB0aGUgcGxheWVyIGlzIGEKLSAgICAgICAgICogICAgICB7QGxpbmsgTWVkaWFTZXNzaW9uMn0gb3Ige0BsaW5rIE1lZGlhQ29udHJvbGxlcjJ9LgotICAgICAgICAgKi8KLSAgICAgICAgLy8gVE9ETyhqYWV3YW4pOiBBbHNvIG5lZWQgZXhlY3V0b3IKLSAgICAgICAgcHVibGljIEJ1aWxkZXJCYXNlSW1wbChATm9uTnVsbCBDb250ZXh0IGNvbnRleHQpIHsKLSAgICAgICAgICAgIGlmIChjb250ZXh0ID09IG51bGwpIHsKLSAgICAgICAgICAgICAgICB0aHJvdyBuZXcgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKCJjb250ZXh0IHNob3VsZG4ndCBiZSBudWxsIik7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBtQ29udGV4dCA9IGNvbnRleHQ7Ci0gICAgICAgICAgICAvLyBFbnN1cmUgbm9uLW51bGwKLSAgICAgICAgICAgIG1JZCA9ICIiOwotICAgICAgICB9Ci0KLSAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgIHB1YmxpYyB2b2lkIHNldFBsYXllcl9pbXBsKEBOb25OdWxsIE1lZGlhUGxheWVyQmFzZSBwbGF5ZXIpIHsKLSAgICAgICAgICAgIGlmIChwbGF5ZXIgPT0gbnVsbCkgewotICAgICAgICAgICAgICAgIHRocm93IG5ldyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oInBsYXllciBzaG91bGRuJ3QgYmUgbnVsbCIpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgbVBsYXllciA9IHBsYXllcjsKLSAgICAgICAgfQotCi0gICAgICAgIEBPdmVycmlkZQotICAgICAgICBwdWJsaWMgdm9pZCBzZXRQbGF5bGlzdEFnZW50X2ltcGwoQE5vbk51bGwgTWVkaWFQbGF5bGlzdEFnZW50IHBsYXlsaXN0QWdlbnQpIHsKLSAgICAgICAgICAgIGlmIChwbGF5bGlzdEFnZW50ID09IG51bGwpIHsKLSAgICAgICAgICAgICAgICB0aHJvdyBuZXcgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKCJwbGF5bGlzdEFnZW50IHNob3VsZG4ndCBiZSBudWxsIik7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBtUGxheWxpc3RBZ2VudCA9IHBsYXlsaXN0QWdlbnQ7Ci0gICAgICAgIH0KLQotICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgcHVibGljIHZvaWQgc2V0Vm9sdW1lUHJvdmlkZXJfaW1wbChWb2x1bWVQcm92aWRlcjIgdm9sdW1lUHJvdmlkZXIpIHsKLSAgICAgICAgICAgIG1Wb2x1bWVQcm92aWRlciA9IHZvbHVtZVByb3ZpZGVyOwotICAgICAgICB9Ci0KLSAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgIHB1YmxpYyB2b2lkIHNldFNlc3Npb25BY3Rpdml0eV9pbXBsKFBlbmRpbmdJbnRlbnQgcGkpIHsKLSAgICAgICAgICAgIG1TZXNzaW9uQWN0aXZpdHkgPSBwaTsKLSAgICAgICAgfQotCi0gICAgICAgIEBPdmVycmlkZQotICAgICAgICBwdWJsaWMgdm9pZCBzZXRJZF9pbXBsKEBOb25OdWxsIFN0cmluZyBpZCkgewotICAgICAgICAgICAgaWYgKGlkID09IG51bGwpIHsKLSAgICAgICAgICAgICAgICB0aHJvdyBuZXcgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKCJpZCBzaG91bGRuJ3QgYmUgbnVsbCIpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgbUlkID0gaWQ7Ci0gICAgICAgIH0KLQotICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgcHVibGljIHZvaWQgc2V0U2Vzc2lvbkNhbGxiYWNrX2ltcGwoQE5vbk51bGwgRXhlY3V0b3IgZXhlY3V0b3IsIEBOb25OdWxsIEMgY2FsbGJhY2spIHsKLSAgICAgICAgICAgIGlmIChleGVjdXRvciA9PSBudWxsKSB7Ci0gICAgICAgICAgICAgICAgdGhyb3cgbmV3IElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbigiZXhlY3V0b3Igc2hvdWxkbid0IGJlIG51bGwiKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmIChjYWxsYmFjayA9PSBudWxsKSB7Ci0gICAgICAgICAgICAgICAgdGhyb3cgbmV3IElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbigiY2FsbGJhY2sgc2hvdWxkbid0IGJlIG51bGwiKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIG1DYWxsYmFja0V4ZWN1dG9yID0gZXhlY3V0b3I7Ci0gICAgICAgICAgICBtQ2FsbGJhY2sgPSBjYWxsYmFjazsKLSAgICAgICAgfQotCi0gICAgICAgIEBPdmVycmlkZQotICAgICAgICBwdWJsaWMgYWJzdHJhY3QgVCBidWlsZF9pbXBsKCk7Ci0gICAgfQotCi0gICAgcHVibGljIHN0YXRpYyBjbGFzcyBCdWlsZGVySW1wbCBleHRlbmRzIEJ1aWxkZXJCYXNlSW1wbDxNZWRpYVNlc3Npb24yLCBTZXNzaW9uQ2FsbGJhY2s+IHsKLSAgICAgICAgcHVibGljIEJ1aWxkZXJJbXBsKENvbnRleHQgY29udGV4dCwgQnVpbGRlciBpbnN0YW5jZSkgewotICAgICAgICAgICAgc3VwZXIoY29udGV4dCk7Ci0gICAgICAgIH0KLQotICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgcHVibGljIE1lZGlhU2Vzc2lvbjIgYnVpbGRfaW1wbCgpIHsKLSAgICAgICAgICAgIGlmIChtQ2FsbGJhY2tFeGVjdXRvciA9PSBudWxsKSB7Ci0gICAgICAgICAgICAgICAgbUNhbGxiYWNrRXhlY3V0b3IgPSBtQ29udGV4dC5nZXRNYWluRXhlY3V0b3IoKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmIChtQ2FsbGJhY2sgPT0gbnVsbCkgewotICAgICAgICAgICAgICAgIG1DYWxsYmFjayA9IG5ldyBTZXNzaW9uQ2FsbGJhY2soKSB7fTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHJldHVybiBuZXcgTWVkaWFTZXNzaW9uMkltcGwobUNvbnRleHQsIG1QbGF5ZXIsIG1JZCwgbVBsYXlsaXN0QWdlbnQsCi0gICAgICAgICAgICAgICAgICAgIG1Wb2x1bWVQcm92aWRlciwgbVNlc3Npb25BY3Rpdml0eSwgbUNhbGxiYWNrRXhlY3V0b3IsIG1DYWxsYmFjaykuZ2V0SW5zdGFuY2UoKTsKLSAgICAgICAgfQotICAgIH0KLX0KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL01lZGlhQ29tcG9uZW50cy9zcmMvY29tL2FuZHJvaWQvbWVkaWEvTWVkaWFTZXNzaW9uMlN0dWIuamF2YSBiL3BhY2thZ2VzL01lZGlhQ29tcG9uZW50cy9zcmMvY29tL2FuZHJvaWQvbWVkaWEvTWVkaWFTZXNzaW9uMlN0dWIuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZWM2NTdkNy4uMDAwMDAwMAotLS0gYS9wYWNrYWdlcy9NZWRpYUNvbXBvbmVudHMvc3JjL2NvbS9hbmRyb2lkL21lZGlhL01lZGlhU2Vzc2lvbjJTdHViLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxMTEzICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgMjAxOCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0Ci0gKgotICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7Ci0gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCi0gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLSAqCi0gKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotICoKLSAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKLSAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCi0gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KLSAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKLSAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgotICovCi0KLXBhY2thZ2UgY29tLmFuZHJvaWQubWVkaWE7Ci0KLWltcG9ydCBhbmRyb2lkLmFwcC5QZW5kaW5nSW50ZW50OwotaW1wb3J0IGFuZHJvaWQuY29udGVudC5Db250ZXh0OwotaW1wb3J0IGFuZHJvaWQubWVkaWEuTWVkaWFDb250cm9sbGVyMjsKLWltcG9ydCBhbmRyb2lkLm1lZGlhLk1lZGlhSXRlbTI7Ci1pbXBvcnQgYW5kcm9pZC5tZWRpYS5NZWRpYUxpYnJhcnlTZXJ2aWNlMi5MaWJyYXJ5Um9vdDsKLWltcG9ydCBhbmRyb2lkLm1lZGlhLk1lZGlhTWV0YWRhdGEyOwotaW1wb3J0IGFuZHJvaWQubWVkaWEuU2Vzc2lvbkNvbW1hbmQyOwotaW1wb3J0IGFuZHJvaWQubWVkaWEuTWVkaWFTZXNzaW9uMi5Db21tYW5kQnV0dG9uOwotaW1wb3J0IGFuZHJvaWQubWVkaWEuU2Vzc2lvbkNvbW1hbmRHcm91cDI7Ci1pbXBvcnQgYW5kcm9pZC5tZWRpYS5NZWRpYVNlc3Npb24yLkNvbnRyb2xsZXJJbmZvOwotaW1wb3J0IGFuZHJvaWQubWVkaWEuUmF0aW5nMjsKLWltcG9ydCBhbmRyb2lkLm1lZGlhLlZvbHVtZVByb3ZpZGVyMjsKLWltcG9ydCBhbmRyb2lkLm5ldC5Vcmk7Ci1pbXBvcnQgYW5kcm9pZC5vcy5CaW5kZXI7Ci1pbXBvcnQgYW5kcm9pZC5vcy5CdW5kbGU7Ci1pbXBvcnQgYW5kcm9pZC5vcy5EZWFkT2JqZWN0RXhjZXB0aW9uOwotaW1wb3J0IGFuZHJvaWQub3MuSUJpbmRlcjsKLWltcG9ydCBhbmRyb2lkLm9zLlJlbW90ZUV4Y2VwdGlvbjsKLWltcG9ydCBhbmRyb2lkLm9zLlJlc3VsdFJlY2VpdmVyOwotaW1wb3J0IGFuZHJvaWQuc3VwcG9ydC5hbm5vdGF0aW9uLkd1YXJkZWRCeTsKLWltcG9ydCBhbmRyb2lkLnN1cHBvcnQuYW5ub3RhdGlvbi5Ob25OdWxsOwotaW1wb3J0IGFuZHJvaWQudGV4dC5UZXh0VXRpbHM7Ci1pbXBvcnQgYW5kcm9pZC51dGlsLkFycmF5TWFwOwotaW1wb3J0IGFuZHJvaWQudXRpbC5Mb2c7Ci1pbXBvcnQgYW5kcm9pZC51dGlsLlNwYXJzZUFycmF5OwotCi1pbXBvcnQgY29tLmFuZHJvaWQubWVkaWEuTWVkaWFMaWJyYXJ5U2VydmljZTJJbXBsLk1lZGlhTGlicmFyeVNlc3Npb25JbXBsOwotaW1wb3J0IGNvbS5hbmRyb2lkLm1lZGlhLk1lZGlhU2Vzc2lvbjJJbXBsLkNvbW1hbmRCdXR0b25JbXBsOwotaW1wb3J0IGNvbS5hbmRyb2lkLm1lZGlhLk1lZGlhU2Vzc2lvbjJJbXBsLkNvbW1hbmRHcm91cEltcGw7Ci1pbXBvcnQgY29tLmFuZHJvaWQubWVkaWEuTWVkaWFTZXNzaW9uMkltcGwuQ29udHJvbGxlckluZm9JbXBsOwotCi1pbXBvcnQgamF2YS5sYW5nLnJlZi5XZWFrUmVmZXJlbmNlOwotaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLkhhc2hTZXQ7Ci1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLlNldDsKLQotcHVibGljIGNsYXNzIE1lZGlhU2Vzc2lvbjJTdHViIGV4dGVuZHMgSU1lZGlhU2Vzc2lvbjIuU3R1YiB7Ci0KLSAgICBzdGF0aWMgZmluYWwgU3RyaW5nIEFSR1VNRU5UX0tFWV9QT1NJVElPTiA9ICJhbmRyb2lkLm1lZGlhLm1lZGlhX3Nlc3Npb24yLmtleV9wb3NpdGlvbiI7Ci0gICAgc3RhdGljIGZpbmFsIFN0cmluZyBBUkdVTUVOVF9LRVlfSVRFTV9JTkRFWCA9ICJhbmRyb2lkLm1lZGlhLm1lZGlhX3Nlc3Npb24yLmtleV9pdGVtX2luZGV4IjsKLSAgICBzdGF0aWMgZmluYWwgU3RyaW5nIEFSR1VNRU5UX0tFWV9QTEFZTElTVF9QQVJBTVMgPQotICAgICAgICAgICAgImFuZHJvaWQubWVkaWEubWVkaWFfc2Vzc2lvbjIua2V5X3BsYXlsaXN0X3BhcmFtcyI7Ci0KLSAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgVEFHID0gIk1lZGlhU2Vzc2lvbjJTdHViIjsKLSAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBib29sZWFuIERFQlVHID0gdHJ1ZTsgLy8gVE9ETyhqYWV3YW4pOiBSZW5hbWUuCi0KLSAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTcGFyc2VBcnJheTxTZXNzaW9uQ29tbWFuZDI+IHNDb21tYW5kc0Zvck9uQ29tbWFuZFJlcXVlc3QgPQotICAgICAgICAgICAgbmV3IFNwYXJzZUFycmF5PD4oKTsKLQotICAgIHByaXZhdGUgZmluYWwgT2JqZWN0IG1Mb2NrID0gbmV3IE9iamVjdCgpOwotICAgIHByaXZhdGUgZmluYWwgV2Vha1JlZmVyZW5jZTxNZWRpYVNlc3Npb24ySW1wbD4gbVNlc3Npb247Ci0KLSAgICBAR3VhcmRlZEJ5KCJtTG9jayIpCi0gICAgcHJpdmF0ZSBmaW5hbCBBcnJheU1hcDxJQmluZGVyLCBDb250cm9sbGVySW5mbz4gbUNvbnRyb2xsZXJzID0gbmV3IEFycmF5TWFwPD4oKTsKLSAgICBAR3VhcmRlZEJ5KCJtTG9jayIpCi0gICAgcHJpdmF0ZSBmaW5hbCBTZXQ8SUJpbmRlcj4gbUNvbm5lY3RpbmdDb250cm9sbGVycyA9IG5ldyBIYXNoU2V0PD4oKTsKLSAgICBAR3VhcmRlZEJ5KCJtTG9jayIpCi0gICAgcHJpdmF0ZSBmaW5hbCBBcnJheU1hcDxDb250cm9sbGVySW5mbywgU2Vzc2lvbkNvbW1hbmRHcm91cDI+IG1BbGxvd2VkQ29tbWFuZEdyb3VwTWFwID0KLSAgICAgICAgICAgIG5ldyBBcnJheU1hcDw+KCk7Ci0gICAgQEd1YXJkZWRCeSgibUxvY2siKQotICAgIHByaXZhdGUgZmluYWwgQXJyYXlNYXA8Q29udHJvbGxlckluZm8sIFNldDxTdHJpbmc+PiBtU3Vic2NyaXB0aW9ucyA9IG5ldyBBcnJheU1hcDw+KCk7Ci0KLSAgICBwdWJsaWMgTWVkaWFTZXNzaW9uMlN0dWIoTWVkaWFTZXNzaW9uMkltcGwgc2Vzc2lvbikgewotICAgICAgICBtU2Vzc2lvbiA9IG5ldyBXZWFrUmVmZXJlbmNlPD4oc2Vzc2lvbik7Ci0KLSAgICAgICAgc3luY2hyb25pemVkIChzQ29tbWFuZHNGb3JPbkNvbW1hbmRSZXF1ZXN0KSB7Ci0gICAgICAgICAgICBpZiAoc0NvbW1hbmRzRm9yT25Db21tYW5kUmVxdWVzdC5zaXplKCkgPT0gMCkgewotICAgICAgICAgICAgICAgIENvbW1hbmRHcm91cEltcGwgZ3JvdXAgPSBuZXcgQ29tbWFuZEdyb3VwSW1wbCgpOwotICAgICAgICAgICAgICAgIGdyb3VwLmFkZEFsbFBsYXliYWNrQ29tbWFuZHMoKTsKLSAgICAgICAgICAgICAgICBncm91cC5hZGRBbGxQbGF5bGlzdENvbW1hbmRzKCk7Ci0gICAgICAgICAgICAgICAgU2V0PFNlc3Npb25Db21tYW5kMj4gY29tbWFuZHMgPSBncm91cC5nZXRDb21tYW5kcygpOwotICAgICAgICAgICAgICAgIGZvciAoU2Vzc2lvbkNvbW1hbmQyIGNvbW1hbmQgOiBjb21tYW5kcykgewotICAgICAgICAgICAgICAgICAgICBzQ29tbWFuZHNGb3JPbkNvbW1hbmRSZXF1ZXN0LmFwcGVuZChjb21tYW5kLmdldENvbW1hbmRDb2RlKCksIGNvbW1hbmQpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLQotICAgIHB1YmxpYyB2b2lkIGRlc3Ryb3lOb3RMb2NrZWQoKSB7Ci0gICAgICAgIGZpbmFsIExpc3Q8Q29udHJvbGxlckluZm8+IGxpc3Q7Ci0gICAgICAgIHN5bmNocm9uaXplZCAobUxvY2spIHsKLSAgICAgICAgICAgIG1TZXNzaW9uLmNsZWFyKCk7Ci0gICAgICAgICAgICBsaXN0ID0gZ2V0Q29udHJvbGxlcnMoKTsKLSAgICAgICAgICAgIG1Db250cm9sbGVycy5jbGVhcigpOwotICAgICAgICB9Ci0gICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbGlzdC5zaXplKCk7IGkrKykgewotICAgICAgICAgICAgSU1lZGlhQ29udHJvbGxlcjIgY29udHJvbGxlckJpbmRlciA9Ci0gICAgICAgICAgICAgICAgICAgICgoQ29udHJvbGxlckluZm9JbXBsKSBsaXN0LmdldChpKS5nZXRQcm92aWRlcigpKS5nZXRDb250cm9sbGVyQmluZGVyKCk7Ci0gICAgICAgICAgICB0cnkgewotICAgICAgICAgICAgICAgIC8vIFNob3VsZCBiZSB1c2VkIHdpdGhvdXQgYSBsb2NrIGhvbGQgdG8gcHJldmVudCBwb3RlbnRpYWwgZGVhZGxvY2suCi0gICAgICAgICAgICAgICAgY29udHJvbGxlckJpbmRlci5vbkRpc2Nvbm5lY3RlZCgpOwotICAgICAgICAgICAgfSBjYXRjaCAoUmVtb3RlRXhjZXB0aW9uIGUpIHsKLSAgICAgICAgICAgICAgICAvLyBDb250cm9sbGVyIGlzIGdvbmUuIFNob3VsZCBiZSBmaW5lIGJlY2F1c2Ugd2UncmUgZGVzdHJveWluZy4KLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLQotICAgIHByaXZhdGUgTWVkaWFTZXNzaW9uMkltcGwgZ2V0U2Vzc2lvbigpIHsKLSAgICAgICAgZmluYWwgTWVkaWFTZXNzaW9uMkltcGwgc2Vzc2lvbiA9IG1TZXNzaW9uLmdldCgpOwotICAgICAgICBpZiAoc2Vzc2lvbiA9PSBudWxsICYmIERFQlVHKSB7Ci0gICAgICAgICAgICBMb2cuZChUQUcsICJTZXNzaW9uIGlzIGNsb3NlZCIsIG5ldyBJbGxlZ2FsU3RhdGVFeGNlcHRpb24oKSk7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIHNlc3Npb247Ci0gICAgfQotCi0gICAgcHJpdmF0ZSBNZWRpYUxpYnJhcnlTZXNzaW9uSW1wbCBnZXRMaWJyYXJ5U2Vzc2lvbigpIHRocm93cyBJbGxlZ2FsU3RhdGVFeGNlcHRpb24gewotICAgICAgICBmaW5hbCBNZWRpYVNlc3Npb24ySW1wbCBzZXNzaW9uID0gZ2V0U2Vzc2lvbigpOwotICAgICAgICBpZiAoIShzZXNzaW9uIGluc3RhbmNlb2YgTWVkaWFMaWJyYXJ5U2Vzc2lvbkltcGwpKSB7Ci0gICAgICAgICAgICB0aHJvdyBuZXcgUnVudGltZUV4Y2VwdGlvbigiU2Vzc2lvbiBpc24ndCBhIGxpYnJhcnkgc2Vzc2lvbiIpOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiAoTWVkaWFMaWJyYXJ5U2Vzc2lvbkltcGwpIHNlc3Npb247Ci0gICAgfQotCi0gICAgLy8gR2V0IGNvbnRyb2xsZXIgaWYgdGhlIGNvbW1hbmQgZnJvbSBjYWxsZXIgdG8gc2Vzc2lvbiBpcyBhYmxlIHRvIGJlIGhhbmRsZWQuCi0gICAgcHJpdmF0ZSBDb250cm9sbGVySW5mbyBnZXRDb250cm9sbGVySWZBYmxlKElNZWRpYUNvbnRyb2xsZXIyIGNhbGxlcikgewotICAgICAgICBzeW5jaHJvbml6ZWQgKG1Mb2NrKSB7Ci0gICAgICAgICAgICBmaW5hbCBDb250cm9sbGVySW5mbyBjb250cm9sbGVySW5mbyA9IG1Db250cm9sbGVycy5nZXQoY2FsbGVyLmFzQmluZGVyKCkpOwotICAgICAgICAgICAgaWYgKGNvbnRyb2xsZXJJbmZvID09IG51bGwgJiYgREVCVUcpIHsKLSAgICAgICAgICAgICAgICBMb2cuZChUQUcsICJDb250cm9sbGVyIGlzIGRpc2Nvbm5lY3RlZCIsIG5ldyBJbGxlZ2FsU3RhdGVFeGNlcHRpb24oKSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICByZXR1cm4gY29udHJvbGxlckluZm87Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICAvLyBHZXQgY29udHJvbGxlciBpZiB0aGUgY29tbWFuZCBmcm9tIGNhbGxlciB0byBzZXNzaW9uIGlzIGFibGUgdG8gYmUgaGFuZGxlZC4KLSAgICBwcml2YXRlIENvbnRyb2xsZXJJbmZvIGdldENvbnRyb2xsZXJJZkFibGUoSU1lZGlhQ29udHJvbGxlcjIgY2FsbGVyLCBpbnQgY29tbWFuZENvZGUpIHsKLSAgICAgICAgc3luY2hyb25pemVkIChtTG9jaykgewotICAgICAgICAgICAgZmluYWwgQ29udHJvbGxlckluZm8gY29udHJvbGxlckluZm8gPSBnZXRDb250cm9sbGVySWZBYmxlKGNhbGxlcik7Ci0gICAgICAgICAgICBpZiAoY29udHJvbGxlckluZm8gPT0gbnVsbCkgewotICAgICAgICAgICAgICAgIHJldHVybiBudWxsOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgU2Vzc2lvbkNvbW1hbmRHcm91cDIgYWxsb3dlZENvbW1hbmRzID0gbUFsbG93ZWRDb21tYW5kR3JvdXBNYXAuZ2V0KGNvbnRyb2xsZXJJbmZvKTsKLSAgICAgICAgICAgIGlmIChhbGxvd2VkQ29tbWFuZHMgPT0gbnVsbCkgewotICAgICAgICAgICAgICAgIExvZy53KFRBRywgIkNvbnRyb2xsZXIgd2l0aCBudWxsIGFsbG93ZWQgY29tbWFuZHMuIElnbm9yaW5nIiwKLSAgICAgICAgICAgICAgICAgICAgICAgIG5ldyBJbGxlZ2FsU3RhdGVFeGNlcHRpb24oKSk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAoIWFsbG93ZWRDb21tYW5kcy5oYXNDb21tYW5kKGNvbW1hbmRDb2RlKSkgewotICAgICAgICAgICAgICAgIGlmIChERUJVRykgewotICAgICAgICAgICAgICAgICAgICBMb2cuZChUQUcsICJDb250cm9sbGVyIGlzbid0IGFsbG93ZWQgZm9yIGNvbW1hbmQgIiArIGNvbW1hbmRDb2RlKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICByZXR1cm4gY29udHJvbGxlckluZm87Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICAvLyBHZXQgY29udHJvbGxlciBpZiB0aGUgY29tbWFuZCBmcm9tIGNhbGxlciB0byBzZXNzaW9uIGlzIGFibGUgdG8gYmUgaGFuZGxlZC4KLSAgICBwcml2YXRlIENvbnRyb2xsZXJJbmZvIGdldENvbnRyb2xsZXJJZkFibGUoSU1lZGlhQ29udHJvbGxlcjIgY2FsbGVyLCBTZXNzaW9uQ29tbWFuZDIgY29tbWFuZCkgewotICAgICAgICBzeW5jaHJvbml6ZWQgKG1Mb2NrKSB7Ci0gICAgICAgICAgICBmaW5hbCBDb250cm9sbGVySW5mbyBjb250cm9sbGVySW5mbyA9IGdldENvbnRyb2xsZXJJZkFibGUoY2FsbGVyKTsKLSAgICAgICAgICAgIGlmIChjb250cm9sbGVySW5mbyA9PSBudWxsKSB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBTZXNzaW9uQ29tbWFuZEdyb3VwMiBhbGxvd2VkQ29tbWFuZHMgPSBtQWxsb3dlZENvbW1hbmRHcm91cE1hcC5nZXQoY29udHJvbGxlckluZm8pOwotICAgICAgICAgICAgaWYgKGFsbG93ZWRDb21tYW5kcyA9PSBudWxsKSB7Ci0gICAgICAgICAgICAgICAgTG9nLncoVEFHLCAiQ29udHJvbGxlciB3aXRoIG51bGwgYWxsb3dlZCBjb21tYW5kcy4gSWdub3JpbmciLAotICAgICAgICAgICAgICAgICAgICAgICAgbmV3IElsbGVnYWxTdGF0ZUV4Y2VwdGlvbigpKTsKLSAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmICghYWxsb3dlZENvbW1hbmRzLmhhc0NvbW1hbmQoY29tbWFuZCkpIHsKLSAgICAgICAgICAgICAgICBpZiAoREVCVUcpIHsKLSAgICAgICAgICAgICAgICAgICAgTG9nLmQoVEFHLCAiQ29udHJvbGxlciBpc24ndCBhbGxvd2VkIGZvciBjb21tYW5kICIgKyBjb21tYW5kKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICByZXR1cm4gY29udHJvbGxlckluZm87Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICAvLyBSZXR1cm4gYmluZGVyIGlmIHRoZSBzZXNzaW9uIGlzIGFibGUgdG8gc2VuZCBhIGNvbW1hbmQgdG8gdGhlIGNvbnRyb2xsZXIuCi0gICAgcHJpdmF0ZSBJTWVkaWFDb250cm9sbGVyMiBnZXRDb250cm9sbGVyQmluZGVySWZBYmxlKENvbnRyb2xsZXJJbmZvIGNvbnRyb2xsZXIpIHsKLSAgICAgICAgaWYgKGdldFNlc3Npb24oKSA9PSBudWxsKSB7Ci0gICAgICAgICAgICAvLyBnZXRTZXNzaW9uKCkgYWxyZWFkeSBsb2dnZWQgaWYgc2Vzc2lvbiBpcyBjbG9zZWQuCi0gICAgICAgICAgICByZXR1cm4gbnVsbDsKLSAgICAgICAgfQotICAgICAgICBmaW5hbCBDb250cm9sbGVySW5mb0ltcGwgaW1wbCA9IENvbnRyb2xsZXJJbmZvSW1wbC5mcm9tKGNvbnRyb2xsZXIpOwotICAgICAgICBzeW5jaHJvbml6ZWQgKG1Mb2NrKSB7Ci0gICAgICAgICAgICBpZiAobUNvbnRyb2xsZXJzLmdldChpbXBsLmdldElkKCkpICE9IG51bGwKLSAgICAgICAgICAgICAgICAgICAgfHwgbUNvbm5lY3RpbmdDb250cm9sbGVycy5jb250YWlucyhpbXBsLmdldElkKCkpKSB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGltcGwuZ2V0Q29udHJvbGxlckJpbmRlcigpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYgKERFQlVHKSB7Ci0gICAgICAgICAgICAgICAgTG9nLmQoVEFHLCBjb250cm9sbGVyICsgIiBpc24ndCBjb25uZWN0ZWQgbm9yIGNvbm5lY3RpbmciLAotICAgICAgICAgICAgICAgICAgICAgICAgbmV3IElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbigpKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHJldHVybiBudWxsOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgLy8gUmV0dXJuIGJpbmRlciBpZiB0aGUgc2Vzc2lvbiBpcyBhYmxlIHRvIHNlbmQgYSBjb21tYW5kIHRvIHRoZSBjb250cm9sbGVyLgotICAgIHByaXZhdGUgSU1lZGlhQ29udHJvbGxlcjIgZ2V0Q29udHJvbGxlckJpbmRlcklmQWJsZShDb250cm9sbGVySW5mbyBjb250cm9sbGVyLAotICAgICAgICAgICAgaW50IGNvbW1hbmRDb2RlKSB7Ci0gICAgICAgIHN5bmNocm9uaXplZCAobUxvY2spIHsKLSAgICAgICAgICAgIFNlc3Npb25Db21tYW5kR3JvdXAyIGFsbG93ZWRDb21tYW5kcyA9IG1BbGxvd2VkQ29tbWFuZEdyb3VwTWFwLmdldChjb250cm9sbGVyKTsKLSAgICAgICAgICAgIGlmIChhbGxvd2VkQ29tbWFuZHMgPT0gbnVsbCkgewotICAgICAgICAgICAgICAgIExvZy53KFRBRywgIkNvbnRyb2xsZXIgd2l0aCBudWxsIGFsbG93ZWQgY29tbWFuZHMuIElnbm9yaW5nIik7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAoIWFsbG93ZWRDb21tYW5kcy5oYXNDb21tYW5kKGNvbW1hbmRDb2RlKSkgewotICAgICAgICAgICAgICAgIGlmIChERUJVRykgewotICAgICAgICAgICAgICAgICAgICBMb2cuZChUQUcsICJDb250cm9sbGVyIGlzbid0IGFsbG93ZWQgZm9yIGNvbW1hbmQgIiArIGNvbW1hbmRDb2RlKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICByZXR1cm4gZ2V0Q29udHJvbGxlckJpbmRlcklmQWJsZShjb250cm9sbGVyKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIHByaXZhdGUgdm9pZCBvbkNvbW1hbmQoQE5vbk51bGwgSU1lZGlhQ29udHJvbGxlcjIgY2FsbGVyLCBpbnQgY29tbWFuZENvZGUsCi0gICAgICAgICAgICBATm9uTnVsbCBTZXNzaW9uUnVubmFibGUgcnVubmFibGUpIHsKLSAgICAgICAgZmluYWwgTWVkaWFTZXNzaW9uMkltcGwgc2Vzc2lvbiA9IGdldFNlc3Npb24oKTsKLSAgICAgICAgZmluYWwgQ29udHJvbGxlckluZm8gY29udHJvbGxlciA9IGdldENvbnRyb2xsZXJJZkFibGUoY2FsbGVyLCBjb21tYW5kQ29kZSk7Ci0gICAgICAgIGlmIChzZXNzaW9uID09IG51bGwgfHwgY29udHJvbGxlciA9PSBudWxsKSB7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICAgICAgc2Vzc2lvbi5nZXRDYWxsYmFja0V4ZWN1dG9yKCkuZXhlY3V0ZSgoKSAtPiB7Ci0gICAgICAgICAgICBpZiAoZ2V0Q29udHJvbGxlcklmQWJsZShjYWxsZXIsIGNvbW1hbmRDb2RlKSA9PSBudWxsKSB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgU2Vzc2lvbkNvbW1hbmQyIGNvbW1hbmQgPSBzQ29tbWFuZHNGb3JPbkNvbW1hbmRSZXF1ZXN0LmdldChjb21tYW5kQ29kZSk7Ci0gICAgICAgICAgICBpZiAoY29tbWFuZCAhPSBudWxsKSB7Ci0gICAgICAgICAgICAgICAgYm9vbGVhbiBhY2NlcHRlZCA9IHNlc3Npb24uZ2V0Q2FsbGJhY2soKS5vbkNvbW1hbmRSZXF1ZXN0KHNlc3Npb24uZ2V0SW5zdGFuY2UoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRyb2xsZXIsIGNvbW1hbmQpOwotICAgICAgICAgICAgICAgIGlmICghYWNjZXB0ZWQpIHsKLSAgICAgICAgICAgICAgICAgICAgLy8gRG9uJ3QgcnVuIHJlamVjdGVkIGNvbW1hbmQuCi0gICAgICAgICAgICAgICAgICAgIGlmIChERUJVRykgewotICAgICAgICAgICAgICAgICAgICAgICAgTG9nLmQoVEFHLCAiQ29tbWFuZCAoY29kZT0iICsgY29tbWFuZENvZGUgKyAiKSBmcm9tICIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKyBjb250cm9sbGVyICsgIiB3YXMgcmVqZWN0ZWQgYnkgIiArIHNlc3Npb24pOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBydW5uYWJsZS5ydW4oc2Vzc2lvbiwgY29udHJvbGxlcik7Ci0gICAgICAgIH0pOwotICAgIH0KLQotICAgIHByaXZhdGUgdm9pZCBvbkJyb3dzZXJDb21tYW5kKEBOb25OdWxsIElNZWRpYUNvbnRyb2xsZXIyIGNhbGxlciwKLSAgICAgICAgICAgIEBOb25OdWxsIExpYnJhcnlTZXNzaW9uUnVubmFibGUgcnVubmFibGUpIHsKLSAgICAgICAgZmluYWwgTWVkaWFMaWJyYXJ5U2Vzc2lvbkltcGwgc2Vzc2lvbiA9IGdldExpYnJhcnlTZXNzaW9uKCk7Ci0gICAgICAgIC8vIFRPRE8oamFld2FuKTogQ29uc2lkZXIgY29tbWFuZCBjb2RlCi0gICAgICAgIGZpbmFsIENvbnRyb2xsZXJJbmZvIGNvbnRyb2xsZXIgPSBnZXRDb250cm9sbGVySWZBYmxlKGNhbGxlcik7Ci0gICAgICAgIGlmIChzZXNzaW9uID09IG51bGwgfHwgY29udHJvbGxlciA9PSBudWxsKSB7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICAgICAgc2Vzc2lvbi5nZXRDYWxsYmFja0V4ZWN1dG9yKCkuZXhlY3V0ZSgoKSAtPiB7Ci0gICAgICAgICAgICAvLyBUT0RPKGphZXdhbik6IENvbnNpZGVyIGNvbW1hbmQgY29kZQotICAgICAgICAgICAgaWYgKGdldENvbnRyb2xsZXJJZkFibGUoY2FsbGVyKSA9PSBudWxsKSB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgcnVubmFibGUucnVuKHNlc3Npb24sIGNvbnRyb2xsZXIpOwotICAgICAgICB9KTsKLSAgICB9Ci0KLQotICAgIHByaXZhdGUgdm9pZCBub3RpZnlBbGwoaW50IGNvbW1hbmRDb2RlLCBATm9uTnVsbCBOb3RpZnlSdW5uYWJsZSBydW5uYWJsZSkgewotICAgICAgICBMaXN0PENvbnRyb2xsZXJJbmZvPiBjb250cm9sbGVycyA9IGdldENvbnRyb2xsZXJzKCk7Ci0gICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgY29udHJvbGxlcnMuc2l6ZSgpOyBpKyspIHsKLSAgICAgICAgICAgIG5vdGlmeUludGVybmFsKGNvbnRyb2xsZXJzLmdldChpKSwKLSAgICAgICAgICAgICAgICAgICAgZ2V0Q29udHJvbGxlckJpbmRlcklmQWJsZShjb250cm9sbGVycy5nZXQoaSksIGNvbW1hbmRDb2RlKSwgcnVubmFibGUpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgcHJpdmF0ZSB2b2lkIG5vdGlmeUFsbChATm9uTnVsbCBOb3RpZnlSdW5uYWJsZSBydW5uYWJsZSkgewotICAgICAgICBMaXN0PENvbnRyb2xsZXJJbmZvPiBjb250cm9sbGVycyA9IGdldENvbnRyb2xsZXJzKCk7Ci0gICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgY29udHJvbGxlcnMuc2l6ZSgpOyBpKyspIHsKLSAgICAgICAgICAgIG5vdGlmeUludGVybmFsKGNvbnRyb2xsZXJzLmdldChpKSwKLSAgICAgICAgICAgICAgICAgICAgZ2V0Q29udHJvbGxlckJpbmRlcklmQWJsZShjb250cm9sbGVycy5nZXQoaSkpLCBydW5uYWJsZSk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBwcml2YXRlIHZvaWQgbm90aWZ5KEBOb25OdWxsIENvbnRyb2xsZXJJbmZvIGNvbnRyb2xsZXIsIEBOb25OdWxsIE5vdGlmeVJ1bm5hYmxlIHJ1bm5hYmxlKSB7Ci0gICAgICAgIG5vdGlmeUludGVybmFsKGNvbnRyb2xsZXIsIGdldENvbnRyb2xsZXJCaW5kZXJJZkFibGUoY29udHJvbGxlciksIHJ1bm5hYmxlKTsKLSAgICB9Ci0KLSAgICBwcml2YXRlIHZvaWQgbm90aWZ5KEBOb25OdWxsIENvbnRyb2xsZXJJbmZvIGNvbnRyb2xsZXIsIGludCBjb21tYW5kQ29kZSwKLSAgICAgICAgICAgIEBOb25OdWxsIE5vdGlmeVJ1bm5hYmxlIHJ1bm5hYmxlKSB7Ci0gICAgICAgIG5vdGlmeUludGVybmFsKGNvbnRyb2xsZXIsIGdldENvbnRyb2xsZXJCaW5kZXJJZkFibGUoY29udHJvbGxlciwgY29tbWFuZENvZGUpLCBydW5uYWJsZSk7Ci0gICAgfQotCi0gICAgLy8gRG8gbm90IGNhbGwgdGhpcyBBUEkgZGlyZWN0bHkuIFVzZSBub3RpZnkoKSBpbnN0ZWFkLgotICAgIHByaXZhdGUgdm9pZCBub3RpZnlJbnRlcm5hbChATm9uTnVsbCBDb250cm9sbGVySW5mbyBjb250cm9sbGVyLAotICAgICAgICAgICAgQE5vbk51bGwgSU1lZGlhQ29udHJvbGxlcjIgaUNvbnRyb2xsZXIsIEBOb25OdWxsIE5vdGlmeVJ1bm5hYmxlIHJ1bm5hYmxlKSB7Ci0gICAgICAgIGlmIChjb250cm9sbGVyID09IG51bGwgfHwgaUNvbnRyb2xsZXIgPT0gbnVsbCkgewotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgICAgIHRyeSB7Ci0gICAgICAgICAgICBydW5uYWJsZS5ydW4oY29udHJvbGxlciwgaUNvbnRyb2xsZXIpOwotICAgICAgICB9IGNhdGNoIChEZWFkT2JqZWN0RXhjZXB0aW9uIGUpIHsKLSAgICAgICAgICAgIGlmIChERUJVRykgewotICAgICAgICAgICAgICAgIExvZy5kKFRBRywgY29udHJvbGxlci50b1N0cmluZygpICsgIiBpcyBnb25lIiwgZSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBvbkNvbnRyb2xsZXJDbG9zZWQoaUNvbnRyb2xsZXIpOwotICAgICAgICB9IGNhdGNoIChSZW1vdGVFeGNlcHRpb24gZSkgewotICAgICAgICAgICAgLy8gQ3VycmVudGx5IGl0J3MgVHJhbnNhY3Rpb25Ub29MYXJnZUV4Y2VwdGlvbiBvciBEZWFkU3lzdGVtRXhjZXB0aW9uLgotICAgICAgICAgICAgLy8gV2UnZCBiZXR0ZXIgdG8gbGVhdmUgbG9nIGZvciB0aG9zZSBjYXNlcyBiZWNhdXNlCi0gICAgICAgICAgICAvLyAgIC0gVHJhbnNhY3Rpb25Ub29MYXJnZUV4Y2VwdGlvbiBtZWFucyB0aGF0IHdlIG1heSBuZWVkIHRvIGZpeCBvdXIgY29kZS4KLSAgICAgICAgICAgIC8vICAgICAoZS5nLiBhZGQgcGFnaW5hdGlvbiBvciBzcGVjaWFsIHdheSB0byBkZWxpdmVyIEJpdG1hcCkKLSAgICAgICAgICAgIC8vICAgLSBEZWFkU3lzdGVtRXhjZXB0aW9uIG1lYW5zIHRoYXQgZXJyb3JzIGFyb3VuZCBpdCBjYW4gYmUgaWdub3JlZC4KLSAgICAgICAgICAgIExvZy53KFRBRywgIkV4Y2VwdGlvbiBpbiAiICsgY29udHJvbGxlci50b1N0cmluZygpLCBlKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIHByaXZhdGUgdm9pZCBvbkNvbnRyb2xsZXJDbG9zZWQoSU1lZGlhQ29udHJvbGxlcjIgaUNvbnRyb2xsZXIpIHsKLSAgICAgICAgQ29udHJvbGxlckluZm8gY29udHJvbGxlcjsKLSAgICAgICAgc3luY2hyb25pemVkIChtTG9jaykgewotICAgICAgICAgICAgY29udHJvbGxlciA9IG1Db250cm9sbGVycy5yZW1vdmUoaUNvbnRyb2xsZXIuYXNCaW5kZXIoKSk7Ci0gICAgICAgICAgICBpZiAoREVCVUcpIHsKLSAgICAgICAgICAgICAgICBMb2cuZChUQUcsICJyZWxlYXNpbmcgIiArIGNvbnRyb2xsZXIpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgbVN1YnNjcmlwdGlvbnMucmVtb3ZlKGNvbnRyb2xsZXIpOwotICAgICAgICB9Ci0gICAgICAgIGZpbmFsIE1lZGlhU2Vzc2lvbjJJbXBsIHNlc3Npb24gPSBnZXRTZXNzaW9uKCk7Ci0gICAgICAgIGlmIChzZXNzaW9uID09IG51bGwgfHwgY29udHJvbGxlciA9PSBudWxsKSB7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICAgICAgc2Vzc2lvbi5nZXRDYWxsYmFja0V4ZWN1dG9yKCkuZXhlY3V0ZSgoKSAtPiB7Ci0gICAgICAgICAgICBzZXNzaW9uLmdldENhbGxiYWNrKCkub25EaXNjb25uZWN0ZWQoc2Vzc2lvbi5nZXRJbnN0YW5jZSgpLCBjb250cm9sbGVyKTsKLSAgICAgICAgfSk7Ci0gICAgfQotCi0gICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLwotICAgIC8vIEFJREwgbWV0aG9kcyBmb3Igc2Vzc2lvbiBvdmVycmlkZXMKLSAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIHZvaWQgY29ubmVjdChmaW5hbCBJTWVkaWFDb250cm9sbGVyMiBjYWxsZXIsIGZpbmFsIFN0cmluZyBjYWxsaW5nUGFja2FnZSkKLSAgICAgICAgICAgIHRocm93cyBSdW50aW1lRXhjZXB0aW9uIHsKLSAgICAgICAgZmluYWwgTWVkaWFTZXNzaW9uMkltcGwgc2Vzc2lvbiA9IGdldFNlc3Npb24oKTsKLSAgICAgICAgaWYgKHNlc3Npb24gPT0gbnVsbCkgewotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgICAgIGZpbmFsIENvbnRleHQgY29udGV4dCA9IHNlc3Npb24uZ2V0Q29udGV4dCgpOwotICAgICAgICBmaW5hbCBDb250cm9sbGVySW5mbyBjb250cm9sbGVySW5mbyA9IG5ldyBDb250cm9sbGVySW5mbyhjb250ZXh0LAotICAgICAgICAgICAgICAgIEJpbmRlci5nZXRDYWxsaW5nVWlkKCksIEJpbmRlci5nZXRDYWxsaW5nUGlkKCksIGNhbGxpbmdQYWNrYWdlLCBjYWxsZXIpOwotICAgICAgICBzZXNzaW9uLmdldENhbGxiYWNrRXhlY3V0b3IoKS5leGVjdXRlKCgpIC0+IHsKLSAgICAgICAgICAgIGlmIChnZXRTZXNzaW9uKCkgPT0gbnVsbCkgewotICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHN5bmNocm9uaXplZCAobUxvY2spIHsKLSAgICAgICAgICAgICAgICAvLyBLZWVwIGNvbm5lY3RpbmcgY29udHJvbGxlcnMuCi0gICAgICAgICAgICAgICAgLy8gVGhpcyBoZWxwcyBzZXNzaW9ucyB0byBjYWxsIEFQSXMgaW4gdGhlIG9uQ29ubmVjdCgpIChlLmcuIHNldEN1c3RvbUxheW91dCgpKQotICAgICAgICAgICAgICAgIC8vIGluc3RlYWQgb2YgcGVuZGluZyB0aGVtLgotICAgICAgICAgICAgICAgIG1Db25uZWN0aW5nQ29udHJvbGxlcnMuYWRkKENvbnRyb2xsZXJJbmZvSW1wbC5mcm9tKGNvbnRyb2xsZXJJbmZvKS5nZXRJZCgpKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIFNlc3Npb25Db21tYW5kR3JvdXAyIGFsbG93ZWRDb21tYW5kcyA9IHNlc3Npb24uZ2V0Q2FsbGJhY2soKS5vbkNvbm5lY3QoCi0gICAgICAgICAgICAgICAgICAgIHNlc3Npb24uZ2V0SW5zdGFuY2UoKSwgY29udHJvbGxlckluZm8pOwotICAgICAgICAgICAgLy8gRG9uJ3QgcmVqZWN0IGNvbm5lY3Rpb24gZm9yIHRoZSByZXF1ZXN0IGZyb20gdHJ1c3RlZCBhcHAuCi0gICAgICAgICAgICAvLyBPdGhlcndpc2Ugc2VydmVyIHdpbGwgZmFpbCB0byByZXRyaWV2ZSBzZXNzaW9uJ3MgaW5mb3JtYXRpb24gdG8gZGlzcGF0Y2gKLSAgICAgICAgICAgIC8vIG1lZGlhIGtleXMgdG8uCi0gICAgICAgICAgICBib29sZWFuIGFjY2VwdCA9IGFsbG93ZWRDb21tYW5kcyAhPSBudWxsIHx8IGNvbnRyb2xsZXJJbmZvLmlzVHJ1c3RlZCgpOwotICAgICAgICAgICAgaWYgKGFjY2VwdCkgewotICAgICAgICAgICAgICAgIENvbnRyb2xsZXJJbmZvSW1wbCBjb250cm9sbGVySW1wbCA9IENvbnRyb2xsZXJJbmZvSW1wbC5mcm9tKGNvbnRyb2xsZXJJbmZvKTsKLSAgICAgICAgICAgICAgICBpZiAoREVCVUcpIHsKLSAgICAgICAgICAgICAgICAgICAgTG9nLmQoVEFHLCAiQWNjZXB0aW5nIGNvbm5lY3Rpb24sIGNvbnRyb2xsZXJJbmZvPSIgKyBjb250cm9sbGVySW5mbwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICsgIiBhbGxvd2VkQ29tbWFuZHM9IiArIGFsbG93ZWRDb21tYW5kcyk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGlmIChhbGxvd2VkQ29tbWFuZHMgPT0gbnVsbCkgewotICAgICAgICAgICAgICAgICAgICAvLyBGb3IgdHJ1c3RlZCBhcHBzLCBzZW5kIG5vbi1udWxsIGFsbG93ZWQgY29tbWFuZHMgdG8ga2VlcCBjb25uZWN0aW9uLgotICAgICAgICAgICAgICAgICAgICBhbGxvd2VkQ29tbWFuZHMgPSBuZXcgU2Vzc2lvbkNvbW1hbmRHcm91cDIoKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgc3luY2hyb25pemVkIChtTG9jaykgewotICAgICAgICAgICAgICAgICAgICBtQ29ubmVjdGluZ0NvbnRyb2xsZXJzLnJlbW92ZShjb250cm9sbGVySW1wbC5nZXRJZCgpKTsKLSAgICAgICAgICAgICAgICAgICAgbUNvbnRyb2xsZXJzLnB1dChjb250cm9sbGVySW1wbC5nZXRJZCgpLCAgY29udHJvbGxlckluZm8pOwotICAgICAgICAgICAgICAgICAgICBtQWxsb3dlZENvbW1hbmRHcm91cE1hcC5wdXQoY29udHJvbGxlckluZm8sIGFsbG93ZWRDb21tYW5kcyk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIC8vIElmIGNvbm5lY3Rpb24gaXMgYWNjZXB0ZWQsIG5vdGlmeSB0aGUgY3VycmVudCBzdGF0ZSB0byB0aGUgY29udHJvbGxlci4KLSAgICAgICAgICAgICAgICAvLyBJdCdzIG5lZWRlZCBiZWNhdXNlIHdlIGNhbm5vdCBjYWxsIHN5bmNocm9ub3VzIGNhbGxzIGJldHdlZW4gc2Vzc2lvbi9jb250cm9sbGVyLgotICAgICAgICAgICAgICAgIC8vIE5vdGU6IFdlJ3JlIGRvaW5nIHRoaXMgYWZ0ZXIgdGhlIG9uQ29ubmVjdGlvbkNoYW5nZWQoKSwgYnV0IHRoZXJlJ3Mgbm8gZ3VhcmFudGVlCi0gICAgICAgICAgICAgICAgLy8gICAgICAgdGhhdCBldmVudHMgaGVyZSBhcmUgbm90aWZpZWQgYWZ0ZXIgdGhlIG9uQ29ubmVjdGVkKCkgYmVjYXVzZQotICAgICAgICAgICAgICAgIC8vICAgICAgIElNZWRpYUNvbnRyb2xsZXIyIGlzIG9uZXdheSAoaS5lLiBhc3luYyBjYWxsKSBhbmQgU3R1YiB3aWxsCi0gICAgICAgICAgICAgICAgLy8gICAgICAgdXNlIHRocmVhZCBwb2xsIGZvciBpbmNvbWluZyBjYWxscy4KLSAgICAgICAgICAgICAgICBmaW5hbCBpbnQgcGxheWVyU3RhdGUgPSBzZXNzaW9uLmdldEluc3RhbmNlKCkuZ2V0UGxheWVyU3RhdGUoKTsKLSAgICAgICAgICAgICAgICBmaW5hbCBsb25nIHBvc2l0aW9uRXZlbnRUaW1lTXMgPSBTeXN0ZW0uY3VycmVudFRpbWVNaWxsaXMoKTsKLSAgICAgICAgICAgICAgICBmaW5hbCBsb25nIHBvc2l0aW9uTXMgPSBzZXNzaW9uLmdldEluc3RhbmNlKCkuZ2V0Q3VycmVudFBvc2l0aW9uKCk7Ci0gICAgICAgICAgICAgICAgZmluYWwgZmxvYXQgcGxheWJhY2tTcGVlZCA9IHNlc3Npb24uZ2V0SW5zdGFuY2UoKS5nZXRQbGF5YmFja1NwZWVkKCk7Ci0gICAgICAgICAgICAgICAgZmluYWwgbG9uZyBidWZmZXJlZFBvc2l0aW9uTXMgPSBzZXNzaW9uLmdldEluc3RhbmNlKCkuZ2V0QnVmZmVyZWRQb3NpdGlvbigpOwotICAgICAgICAgICAgICAgIGZpbmFsIEJ1bmRsZSBwbGF5YmFja0luZm9CdW5kbGUgPSAoKE1lZGlhQ29udHJvbGxlcjJJbXBsLlBsYXliYWNrSW5mb0ltcGwpCi0gICAgICAgICAgICAgICAgICAgICAgICBzZXNzaW9uLmdldFBsYXliYWNrSW5mbygpLmdldFByb3ZpZGVyKCkpLnRvQnVuZGxlKCk7Ci0gICAgICAgICAgICAgICAgZmluYWwgaW50IHJlcGVhdE1vZGUgPSBzZXNzaW9uLmdldEluc3RhbmNlKCkuZ2V0UmVwZWF0TW9kZSgpOwotICAgICAgICAgICAgICAgIGZpbmFsIGludCBzaHVmZmxlTW9kZSA9IHNlc3Npb24uZ2V0SW5zdGFuY2UoKS5nZXRTaHVmZmxlTW9kZSgpOwotICAgICAgICAgICAgICAgIGZpbmFsIFBlbmRpbmdJbnRlbnQgc2Vzc2lvbkFjdGl2aXR5ID0gc2Vzc2lvbi5nZXRTZXNzaW9uQWN0aXZpdHkoKTsKLSAgICAgICAgICAgICAgICBmaW5hbCBMaXN0PE1lZGlhSXRlbTI+IHBsYXlsaXN0ID0KLSAgICAgICAgICAgICAgICAgICAgICAgIGFsbG93ZWRDb21tYW5kcy5oYXNDb21tYW5kKFNlc3Npb25Db21tYW5kMi5DT01NQU5EX0NPREVfUExBWUxJU1RfR0VUX0xJU1QpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gc2Vzc2lvbi5nZXRJbnN0YW5jZSgpLmdldFBsYXlsaXN0KCkgOiBudWxsOwotICAgICAgICAgICAgICAgIGZpbmFsIExpc3Q8QnVuZGxlPiBwbGF5bGlzdEJ1bmRsZTsKLSAgICAgICAgICAgICAgICBpZiAocGxheWxpc3QgIT0gbnVsbCkgewotICAgICAgICAgICAgICAgICAgICBwbGF5bGlzdEJ1bmRsZSA9IG5ldyBBcnJheUxpc3Q8PigpOwotICAgICAgICAgICAgICAgICAgICAvLyBUT0RPKGphZXdhbik6IEZpbmQgYSB3YXkgdG8gYXZvaWQgY29uY3VycmVudCBtb2RpZmljYXRpb24gZXhjZXB0aW9uLgotICAgICAgICAgICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IHBsYXlsaXN0LnNpemUoKTsgaSsrKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBmaW5hbCBNZWRpYUl0ZW0yIGl0ZW0gPSBwbGF5bGlzdC5nZXQoaSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoaXRlbSAhPSBudWxsKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgZmluYWwgQnVuZGxlIGl0ZW1CdW5kbGUgPSBpdGVtLnRvQnVuZGxlKCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGl0ZW1CdW5kbGUgIT0gbnVsbCkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwbGF5bGlzdEJ1bmRsZS5hZGQoaXRlbUJ1bmRsZSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgcGxheWxpc3RCdW5kbGUgPSBudWxsOwotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIC8vIERvdWJsZSBjaGVjayBpZiBzZXNzaW9uIGlzIHN0aWxsIHRoZXJlLCBiZWNhdXNlIGNsb3NlKCkgY2FuIGJlIGNhbGxlZCBpbiBhbm90aGVyCi0gICAgICAgICAgICAgICAgLy8gdGhyZWFkLgotICAgICAgICAgICAgICAgIGlmIChnZXRTZXNzaW9uKCkgPT0gbnVsbCkgewotICAgICAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIHRyeSB7Ci0gICAgICAgICAgICAgICAgICAgIGNhbGxlci5vbkNvbm5lY3RlZChNZWRpYVNlc3Npb24yU3R1Yi50aGlzLCBhbGxvd2VkQ29tbWFuZHMudG9CdW5kbGUoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBwbGF5ZXJTdGF0ZSwgcG9zaXRpb25FdmVudFRpbWVNcywgcG9zaXRpb25NcywgcGxheWJhY2tTcGVlZCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBidWZmZXJlZFBvc2l0aW9uTXMsIHBsYXliYWNrSW5mb0J1bmRsZSwgcmVwZWF0TW9kZSwgc2h1ZmZsZU1vZGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgcGxheWxpc3RCdW5kbGUsIHNlc3Npb25BY3Rpdml0eSk7Ci0gICAgICAgICAgICAgICAgfSBjYXRjaCAoUmVtb3RlRXhjZXB0aW9uIGUpIHsKLSAgICAgICAgICAgICAgICAgICAgLy8gQ29udHJvbGxlciBtYXkgYmUgZGllZCBwcmVtYXR1cmVseS4KLSAgICAgICAgICAgICAgICAgICAgLy8gVE9ETyhqYWV3YW4pOiBIYW5kbGUgaGVyZS4KLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIHN5bmNocm9uaXplZCAobUxvY2spIHsKLSAgICAgICAgICAgICAgICAgICAgbUNvbm5lY3RpbmdDb250cm9sbGVycy5yZW1vdmUoQ29udHJvbGxlckluZm9JbXBsLmZyb20oY29udHJvbGxlckluZm8pLmdldElkKCkpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBpZiAoREVCVUcpIHsKLSAgICAgICAgICAgICAgICAgICAgTG9nLmQoVEFHLCAiUmVqZWN0aW5nIGNvbm5lY3Rpb24sIGNvbnRyb2xsZXJJbmZvPSIgKyBjb250cm9sbGVySW5mbyk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIHRyeSB7Ci0gICAgICAgICAgICAgICAgICAgIGNhbGxlci5vbkRpc2Nvbm5lY3RlZCgpOwotICAgICAgICAgICAgICAgIH0gY2F0Y2ggKFJlbW90ZUV4Y2VwdGlvbiBlKSB7Ci0gICAgICAgICAgICAgICAgICAgIC8vIENvbnRyb2xsZXIgbWF5IGJlIGRpZWQgcHJlbWF0dXJlbHkuCi0gICAgICAgICAgICAgICAgICAgIC8vIE5vdCBhbiBpc3N1ZSBiZWNhdXNlIHdlJ2xsIGlnbm9yZSBpdCBhbnl3YXkuCi0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICB9KTsKLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgdm9pZCByZWxlYXNlKGZpbmFsIElNZWRpYUNvbnRyb2xsZXIyIGNhbGxlcikgdGhyb3dzIFJlbW90ZUV4Y2VwdGlvbiB7Ci0gICAgICAgIG9uQ29udHJvbGxlckNsb3NlZChjYWxsZXIpOwotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyB2b2lkIHNldFZvbHVtZVRvKGZpbmFsIElNZWRpYUNvbnRyb2xsZXIyIGNhbGxlciwgZmluYWwgaW50IHZhbHVlLCBmaW5hbCBpbnQgZmxhZ3MpCi0gICAgICAgICAgICB0aHJvd3MgUnVudGltZUV4Y2VwdGlvbiB7Ci0gICAgICAgIG9uQ29tbWFuZChjYWxsZXIsIFNlc3Npb25Db21tYW5kMi5DT01NQU5EX0NPREVfU0VUX1ZPTFVNRSwKLSAgICAgICAgICAgICAgICAoc2Vzc2lvbiwgY29udHJvbGxlcikgLT4gewotICAgICAgICAgICAgICAgICAgICBWb2x1bWVQcm92aWRlcjIgdm9sdW1lUHJvdmlkZXIgPSBzZXNzaW9uLmdldFZvbHVtZVByb3ZpZGVyKCk7Ci0gICAgICAgICAgICAgICAgICAgIGlmICh2b2x1bWVQcm92aWRlciA9PSBudWxsKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAvLyBUT0RPKGphZXdhbik6IFNldCBsb2NhbCBzdHJlYW0gdm9sdW1lCi0gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICB2b2x1bWVQcm92aWRlci5vblNldFZvbHVtZVRvKHZhbHVlKTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0pOwotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyB2b2lkIGFkanVzdFZvbHVtZShJTWVkaWFDb250cm9sbGVyMiBjYWxsZXIsIGludCBkaXJlY3Rpb24sIGludCBmbGFncykKLSAgICAgICAgICAgIHRocm93cyBSdW50aW1lRXhjZXB0aW9uIHsKLSAgICAgICAgb25Db21tYW5kKGNhbGxlciwgU2Vzc2lvbkNvbW1hbmQyLkNPTU1BTkRfQ09ERV9TRVRfVk9MVU1FLAotICAgICAgICAgICAgICAgIChzZXNzaW9uLCBjb250cm9sbGVyKSAtPiB7Ci0gICAgICAgICAgICAgICAgICAgIFZvbHVtZVByb3ZpZGVyMiB2b2x1bWVQcm92aWRlciA9IHNlc3Npb24uZ2V0Vm9sdW1lUHJvdmlkZXIoKTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKHZvbHVtZVByb3ZpZGVyID09IG51bGwpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIC8vIFRPRE8oamFld2FuKTogQWRqdXN0IGxvY2FsIHN0cmVhbSB2b2x1bWUKLSAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHZvbHVtZVByb3ZpZGVyLm9uQWRqdXN0Vm9sdW1lKGRpcmVjdGlvbik7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9KTsKLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgdm9pZCBzZW5kVHJhbnNwb3J0Q29udHJvbENvbW1hbmQoSU1lZGlhQ29udHJvbGxlcjIgY2FsbGVyLAotICAgICAgICAgICAgaW50IGNvbW1hbmRDb2RlLCBCdW5kbGUgYXJncykgdGhyb3dzIFJ1bnRpbWVFeGNlcHRpb24gewotICAgICAgICBvbkNvbW1hbmQoY2FsbGVyLCBjb21tYW5kQ29kZSwgKHNlc3Npb24sIGNvbnRyb2xsZXIpIC0+IHsKLSAgICAgICAgICAgIHN3aXRjaCAoY29tbWFuZENvZGUpIHsKLSAgICAgICAgICAgICAgICBjYXNlIFNlc3Npb25Db21tYW5kMi5DT01NQU5EX0NPREVfUExBWUJBQ0tfUExBWToKLSAgICAgICAgICAgICAgICAgICAgc2Vzc2lvbi5nZXRJbnN0YW5jZSgpLnBsYXkoKTsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgY2FzZSBTZXNzaW9uQ29tbWFuZDIuQ09NTUFORF9DT0RFX1BMQVlCQUNLX1BBVVNFOgotICAgICAgICAgICAgICAgICAgICBzZXNzaW9uLmdldEluc3RhbmNlKCkucGF1c2UoKTsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgY2FzZSBTZXNzaW9uQ29tbWFuZDIuQ09NTUFORF9DT0RFX1BMQVlCQUNLX1NUT1A6Ci0gICAgICAgICAgICAgICAgICAgIHNlc3Npb24uZ2V0SW5zdGFuY2UoKS5zdG9wKCk7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIGNhc2UgU2Vzc2lvbkNvbW1hbmQyLkNPTU1BTkRfQ09ERV9QTEFZQkFDS19QUkVQQVJFOgotICAgICAgICAgICAgICAgICAgICBzZXNzaW9uLmdldEluc3RhbmNlKCkucHJlcGFyZSgpOwotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICBjYXNlIFNlc3Npb25Db21tYW5kMi5DT01NQU5EX0NPREVfUExBWUJBQ0tfU0VFS19UTzoKLSAgICAgICAgICAgICAgICAgICAgc2Vzc2lvbi5nZXRJbnN0YW5jZSgpLnNlZWtUbyhhcmdzLmdldExvbmcoQVJHVU1FTlRfS0VZX1BPU0lUSU9OKSk7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAgICAgIC8vIFRPRE8oamFld2FuKTogUmVzZW5kIHVua25vd24gKG5ldykgY29tbWFuZHMgdGhyb3VnaCB0aGUgY3VzdG9tIGNvbW1hbmQuCi0gICAgICAgICAgICB9Ci0gICAgICAgIH0pOwotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyB2b2lkIHNlbmRDdXN0b21Db21tYW5kKGZpbmFsIElNZWRpYUNvbnRyb2xsZXIyIGNhbGxlciwgZmluYWwgQnVuZGxlIGNvbW1hbmRCdW5kbGUsCi0gICAgICAgICAgICBmaW5hbCBCdW5kbGUgYXJncywgZmluYWwgUmVzdWx0UmVjZWl2ZXIgcmVjZWl2ZXIpIHsKLSAgICAgICAgZmluYWwgTWVkaWFTZXNzaW9uMkltcGwgc2Vzc2lvbiA9IGdldFNlc3Npb24oKTsKLSAgICAgICAgaWYgKHNlc3Npb24gPT0gbnVsbCkgewotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgICAgIGZpbmFsIFNlc3Npb25Db21tYW5kMiBjb21tYW5kID0gU2Vzc2lvbkNvbW1hbmQyLmZyb21CdW5kbGUoY29tbWFuZEJ1bmRsZSk7Ci0gICAgICAgIGlmIChjb21tYW5kID09IG51bGwpIHsKLSAgICAgICAgICAgIExvZy53KFRBRywgInNlbmRDdXN0b21Db21tYW5kKCk6IElnbm9yaW5nIG51bGwgY29tbWFuZCBmcm9tICIKLSAgICAgICAgICAgICAgICAgICAgKyBnZXRDb250cm9sbGVySWZBYmxlKGNhbGxlcikpOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgICAgIGZpbmFsIENvbnRyb2xsZXJJbmZvIGNvbnRyb2xsZXIgPSBnZXRDb250cm9sbGVySWZBYmxlKGNhbGxlciwgY29tbWFuZCk7Ci0gICAgICAgIGlmIChjb250cm9sbGVyID09IG51bGwpIHsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAgICAgICBzZXNzaW9uLmdldENhbGxiYWNrRXhlY3V0b3IoKS5leGVjdXRlKCgpIC0+IHsKLSAgICAgICAgICAgIGlmIChnZXRDb250cm9sbGVySWZBYmxlKGNhbGxlciwgY29tbWFuZCkgPT0gbnVsbCkgewotICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHNlc3Npb24uZ2V0Q2FsbGJhY2soKS5vbkN1c3RvbUNvbW1hbmQoc2Vzc2lvbi5nZXRJbnN0YW5jZSgpLAotICAgICAgICAgICAgICAgICAgICBjb250cm9sbGVyLCBjb21tYW5kLCBhcmdzLCByZWNlaXZlcik7Ci0gICAgICAgIH0pOwotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyB2b2lkIHByZXBhcmVGcm9tVXJpKGZpbmFsIElNZWRpYUNvbnRyb2xsZXIyIGNhbGxlciwgZmluYWwgVXJpIHVyaSwKLSAgICAgICAgICAgIGZpbmFsIEJ1bmRsZSBleHRyYXMpIHsKLSAgICAgICAgb25Db21tYW5kKGNhbGxlciwgU2Vzc2lvbkNvbW1hbmQyLkNPTU1BTkRfQ09ERV9TRVNTSU9OX1BSRVBBUkVfRlJPTV9VUkksCi0gICAgICAgICAgICAgICAgKHNlc3Npb24sIGNvbnRyb2xsZXIpIC0+IHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKHVyaSA9PSBudWxsKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBMb2cudyhUQUcsICJwcmVwYXJlRnJvbVVyaSgpOiBJZ25vcmluZyBudWxsIHVyaSBmcm9tICIgKyBjb250cm9sbGVyKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICBzZXNzaW9uLmdldENhbGxiYWNrKCkub25QcmVwYXJlRnJvbVVyaShzZXNzaW9uLmdldEluc3RhbmNlKCksIGNvbnRyb2xsZXIsIHVyaSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHRyYXMpOwotICAgICAgICAgICAgICAgIH0pOwotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyB2b2lkIHByZXBhcmVGcm9tU2VhcmNoKGZpbmFsIElNZWRpYUNvbnRyb2xsZXIyIGNhbGxlciwgZmluYWwgU3RyaW5nIHF1ZXJ5LAotICAgICAgICAgICAgZmluYWwgQnVuZGxlIGV4dHJhcykgewotICAgICAgICBvbkNvbW1hbmQoY2FsbGVyLCBTZXNzaW9uQ29tbWFuZDIuQ09NTUFORF9DT0RFX1NFU1NJT05fUFJFUEFSRV9GUk9NX1NFQVJDSCwKLSAgICAgICAgICAgICAgICAoc2Vzc2lvbiwgY29udHJvbGxlcikgLT4gewotICAgICAgICAgICAgICAgICAgICBpZiAoVGV4dFV0aWxzLmlzRW1wdHkocXVlcnkpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBMb2cudyhUQUcsICJwcmVwYXJlRnJvbVNlYXJjaCgpOiBJZ25vcmluZyBlbXB0eSBxdWVyeSBmcm9tICIgKyBjb250cm9sbGVyKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICBzZXNzaW9uLmdldENhbGxiYWNrKCkub25QcmVwYXJlRnJvbVNlYXJjaChzZXNzaW9uLmdldEluc3RhbmNlKCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udHJvbGxlciwgcXVlcnksIGV4dHJhcyk7Ci0gICAgICAgICAgICAgICAgfSk7Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIHZvaWQgcHJlcGFyZUZyb21NZWRpYUlkKGZpbmFsIElNZWRpYUNvbnRyb2xsZXIyIGNhbGxlciwgZmluYWwgU3RyaW5nIG1lZGlhSWQsCi0gICAgICAgICAgICBmaW5hbCBCdW5kbGUgZXh0cmFzKSB7Ci0gICAgICAgIG9uQ29tbWFuZChjYWxsZXIsIFNlc3Npb25Db21tYW5kMi5DT01NQU5EX0NPREVfU0VTU0lPTl9QUkVQQVJFX0ZST01fTUVESUFfSUQsCi0gICAgICAgICAgICAgICAgKHNlc3Npb24sIGNvbnRyb2xsZXIpIC0+IHsKLSAgICAgICAgICAgIGlmIChtZWRpYUlkID09IG51bGwpIHsKLSAgICAgICAgICAgICAgICBMb2cudyhUQUcsICJwcmVwYXJlRnJvbU1lZGlhSWQoKTogSWdub3JpbmcgbnVsbCBtZWRpYUlkIGZyb20gIiArIGNvbnRyb2xsZXIpOwotICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHNlc3Npb24uZ2V0Q2FsbGJhY2soKS5vblByZXBhcmVGcm9tTWVkaWFJZChzZXNzaW9uLmdldEluc3RhbmNlKCksCi0gICAgICAgICAgICAgICAgICAgIGNvbnRyb2xsZXIsIG1lZGlhSWQsIGV4dHJhcyk7Ci0gICAgICAgIH0pOwotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyB2b2lkIHBsYXlGcm9tVXJpKGZpbmFsIElNZWRpYUNvbnRyb2xsZXIyIGNhbGxlciwgZmluYWwgVXJpIHVyaSwKLSAgICAgICAgICAgIGZpbmFsIEJ1bmRsZSBleHRyYXMpIHsKLSAgICAgICAgb25Db21tYW5kKGNhbGxlciwgU2Vzc2lvbkNvbW1hbmQyLkNPTU1BTkRfQ09ERV9TRVNTSU9OX1BMQVlfRlJPTV9VUkksCi0gICAgICAgICAgICAgICAgKHNlc3Npb24sIGNvbnRyb2xsZXIpIC0+IHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKHVyaSA9PSBudWxsKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBMb2cudyhUQUcsICJwbGF5RnJvbVVyaSgpOiBJZ25vcmluZyBudWxsIHVyaSBmcm9tICIgKyBjb250cm9sbGVyKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICBzZXNzaW9uLmdldENhbGxiYWNrKCkub25QbGF5RnJvbVVyaShzZXNzaW9uLmdldEluc3RhbmNlKCksIGNvbnRyb2xsZXIsIHVyaSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHRyYXMpOwotICAgICAgICAgICAgICAgIH0pOwotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyB2b2lkIHBsYXlGcm9tU2VhcmNoKGZpbmFsIElNZWRpYUNvbnRyb2xsZXIyIGNhbGxlciwgZmluYWwgU3RyaW5nIHF1ZXJ5LAotICAgICAgICAgICAgZmluYWwgQnVuZGxlIGV4dHJhcykgewotICAgICAgICBvbkNvbW1hbmQoY2FsbGVyLCBTZXNzaW9uQ29tbWFuZDIuQ09NTUFORF9DT0RFX1NFU1NJT05fUExBWV9GUk9NX1NFQVJDSCwKLSAgICAgICAgICAgICAgICAoc2Vzc2lvbiwgY29udHJvbGxlcikgLT4gewotICAgICAgICAgICAgICAgICAgICBpZiAoVGV4dFV0aWxzLmlzRW1wdHkocXVlcnkpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBMb2cudyhUQUcsICJwbGF5RnJvbVNlYXJjaCgpOiBJZ25vcmluZyBlbXB0eSBxdWVyeSBmcm9tICIgKyBjb250cm9sbGVyKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICBzZXNzaW9uLmdldENhbGxiYWNrKCkub25QbGF5RnJvbVNlYXJjaChzZXNzaW9uLmdldEluc3RhbmNlKCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udHJvbGxlciwgcXVlcnksIGV4dHJhcyk7Ci0gICAgICAgICAgICAgICAgfSk7Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIHZvaWQgcGxheUZyb21NZWRpYUlkKGZpbmFsIElNZWRpYUNvbnRyb2xsZXIyIGNhbGxlciwgZmluYWwgU3RyaW5nIG1lZGlhSWQsCi0gICAgICAgICAgICBmaW5hbCBCdW5kbGUgZXh0cmFzKSB7Ci0gICAgICAgIG9uQ29tbWFuZChjYWxsZXIsIFNlc3Npb25Db21tYW5kMi5DT01NQU5EX0NPREVfU0VTU0lPTl9QTEFZX0ZST01fTUVESUFfSUQsCi0gICAgICAgICAgICAgICAgKHNlc3Npb24sIGNvbnRyb2xsZXIpIC0+IHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKG1lZGlhSWQgPT0gbnVsbCkgewotICAgICAgICAgICAgICAgICAgICAgICAgTG9nLncoVEFHLCAicGxheUZyb21NZWRpYUlkKCk6IElnbm9yaW5nIG51bGwgbWVkaWFJZCBmcm9tICIgKyBjb250cm9sbGVyKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICBzZXNzaW9uLmdldENhbGxiYWNrKCkub25QbGF5RnJvbU1lZGlhSWQoc2Vzc2lvbi5nZXRJbnN0YW5jZSgpLCBjb250cm9sbGVyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lZGlhSWQsIGV4dHJhcyk7Ci0gICAgICAgICAgICAgICAgfSk7Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIHZvaWQgc2V0UmF0aW5nKGZpbmFsIElNZWRpYUNvbnRyb2xsZXIyIGNhbGxlciwgZmluYWwgU3RyaW5nIG1lZGlhSWQsCi0gICAgICAgICAgICBmaW5hbCBCdW5kbGUgcmF0aW5nQnVuZGxlKSB7Ci0gICAgICAgIG9uQ29tbWFuZChjYWxsZXIsIFNlc3Npb25Db21tYW5kMi5DT01NQU5EX0NPREVfU0VTU0lPTl9TRVRfUkFUSU5HLAotICAgICAgICAgICAgICAgIChzZXNzaW9uLCBjb250cm9sbGVyKSAtPiB7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChtZWRpYUlkID09IG51bGwpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIExvZy53KFRBRywgInNldFJhdGluZygpOiBJZ25vcmluZyBudWxsIG1lZGlhSWQgZnJvbSAiICsgY29udHJvbGxlcik7Ci0gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgaWYgKHJhdGluZ0J1bmRsZSA9PSBudWxsKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBMb2cudyhUQUcsICJzZXRSYXRpbmcoKTogSWdub3JpbmcgbnVsbCByYXRpbmdCdW5kbGUgZnJvbSAiICsgY29udHJvbGxlcik7Ci0gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgUmF0aW5nMiByYXRpbmcgPSBSYXRpbmcyLmZyb21CdW5kbGUocmF0aW5nQnVuZGxlKTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKHJhdGluZyA9PSBudWxsKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAocmF0aW5nQnVuZGxlID09IG51bGwpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBMb2cudyhUQUcsICJzZXRSYXRpbmcoKTogSWdub3JpbmcgbnVsbCByYXRpbmcgZnJvbSAiICsgY29udHJvbGxlcik7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIHNlc3Npb24uZ2V0Q2FsbGJhY2soKS5vblNldFJhdGluZyhzZXNzaW9uLmdldEluc3RhbmNlKCksIGNvbnRyb2xsZXIsIG1lZGlhSWQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmF0aW5nKTsKLSAgICAgICAgICAgICAgICB9KTsKLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgdm9pZCBzZXRQbGF5bGlzdChmaW5hbCBJTWVkaWFDb250cm9sbGVyMiBjYWxsZXIsIGZpbmFsIExpc3Q8QnVuZGxlPiBwbGF5bGlzdCwKLSAgICAgICAgICAgIGZpbmFsIEJ1bmRsZSBtZXRhZGF0YSkgewotICAgICAgICBvbkNvbW1hbmQoY2FsbGVyLCBTZXNzaW9uQ29tbWFuZDIuQ09NTUFORF9DT0RFX1BMQVlMSVNUX1NFVF9MSVNULCAoc2Vzc2lvbiwgY29udHJvbGxlcikgLT4gewotICAgICAgICAgICAgaWYgKHBsYXlsaXN0ID09IG51bGwpIHsKLSAgICAgICAgICAgICAgICBMb2cudyhUQUcsICJzZXRQbGF5bGlzdCgpOiBJZ25vcmluZyBudWxsIHBsYXlsaXN0IGZyb20gIiArIGNvbnRyb2xsZXIpOwotICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIExpc3Q8TWVkaWFJdGVtMj4gbGlzdCA9IG5ldyBBcnJheUxpc3Q8PigpOwotICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBwbGF5bGlzdC5zaXplKCk7IGkrKykgewotICAgICAgICAgICAgICAgIC8vIFJlY3JlYXRlcyBVVUlEIGluIHRoZSBwbGF5bGlzdAotICAgICAgICAgICAgICAgIE1lZGlhSXRlbTIgaXRlbSA9IE1lZGlhSXRlbTJJbXBsLmZyb21CdW5kbGUocGxheWxpc3QuZ2V0KGkpLCBudWxsKTsKLSAgICAgICAgICAgICAgICBpZiAoaXRlbSAhPSBudWxsKSB7Ci0gICAgICAgICAgICAgICAgICAgIGxpc3QuYWRkKGl0ZW0pOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHNlc3Npb24uZ2V0SW5zdGFuY2UoKS5zZXRQbGF5bGlzdChsaXN0LCBNZWRpYU1ldGFkYXRhMi5mcm9tQnVuZGxlKG1ldGFkYXRhKSk7Ci0gICAgICAgIH0pOwotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyB2b2lkIHVwZGF0ZVBsYXlsaXN0TWV0YWRhdGEoZmluYWwgSU1lZGlhQ29udHJvbGxlcjIgY2FsbGVyLCBmaW5hbCBCdW5kbGUgbWV0YWRhdGEpIHsKLSAgICAgICAgb25Db21tYW5kKGNhbGxlciwgU2Vzc2lvbkNvbW1hbmQyLkNPTU1BTkRfQ09ERV9QTEFZTElTVF9TRVRfTElTVF9NRVRBREFUQSwKLSAgICAgICAgICAgICAgICAoc2Vzc2lvbiwgY29udHJvbGxlcikgLT4gewotICAgICAgICAgICAgc2Vzc2lvbi5nZXRJbnN0YW5jZSgpLnVwZGF0ZVBsYXlsaXN0TWV0YWRhdGEoTWVkaWFNZXRhZGF0YTIuZnJvbUJ1bmRsZShtZXRhZGF0YSkpOwotICAgICAgICB9KTsKLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgdm9pZCBhZGRQbGF5bGlzdEl0ZW0oSU1lZGlhQ29udHJvbGxlcjIgY2FsbGVyLCBpbnQgaW5kZXgsIEJ1bmRsZSBtZWRpYUl0ZW0pIHsKLSAgICAgICAgb25Db21tYW5kKGNhbGxlciwgU2Vzc2lvbkNvbW1hbmQyLkNPTU1BTkRfQ09ERV9QTEFZTElTVF9BRERfSVRFTSwKLSAgICAgICAgICAgICAgICAoc2Vzc2lvbiwgY29udHJvbGxlcikgLT4gewotICAgICAgICAgICAgICAgICAgICAvLyBSZXNldHMgdGhlIFVVSUQgZnJvbSB0aGUgaW5jb21pbmcgbWVkaWEgaWQsIHNvIGNvbnRyb2xsZXIgbWF5IHJldXNlIGEgbWVkaWEKLSAgICAgICAgICAgICAgICAgICAgLy8gaXRlbSBtdWx0aXBsZSB0aW1lcyBmb3IgYWRkUGxheWxpc3RJdGVtLgotICAgICAgICAgICAgICAgICAgICBzZXNzaW9uLmdldEluc3RhbmNlKCkuYWRkUGxheWxpc3RJdGVtKGluZGV4LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1lZGlhSXRlbTJJbXBsLmZyb21CdW5kbGUobWVkaWFJdGVtLCBudWxsKSk7Ci0gICAgICAgICAgICAgICAgfSk7Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIHZvaWQgcmVtb3ZlUGxheWxpc3RJdGVtKElNZWRpYUNvbnRyb2xsZXIyIGNhbGxlciwgQnVuZGxlIG1lZGlhSXRlbSkgewotICAgICAgICBvbkNvbW1hbmQoY2FsbGVyLCBTZXNzaW9uQ29tbWFuZDIuQ09NTUFORF9DT0RFX1BMQVlMSVNUX1JFTU9WRV9JVEVNLAotICAgICAgICAgICAgICAgIChzZXNzaW9uLCBjb250cm9sbGVyKSAtPiB7Ci0gICAgICAgICAgICBNZWRpYUl0ZW0yIGl0ZW0gPSBNZWRpYUl0ZW0yLmZyb21CdW5kbGUobWVkaWFJdGVtKTsKLSAgICAgICAgICAgIC8vIE5vdGU6IE1lZGlhSXRlbTIgaGFzIGhpZGRlbiBVVUlEIHRvIGlkZW50aWZ5IGl0IGFjcm9zcyB0aGUgcHJvY2Vzc2VzLgotICAgICAgICAgICAgc2Vzc2lvbi5nZXRJbnN0YW5jZSgpLnJlbW92ZVBsYXlsaXN0SXRlbShpdGVtKTsKLSAgICAgICAgfSk7Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIHZvaWQgcmVwbGFjZVBsYXlsaXN0SXRlbShJTWVkaWFDb250cm9sbGVyMiBjYWxsZXIsIGludCBpbmRleCwgQnVuZGxlIG1lZGlhSXRlbSkgewotICAgICAgICBvbkNvbW1hbmQoY2FsbGVyLCBTZXNzaW9uQ29tbWFuZDIuQ09NTUFORF9DT0RFX1BMQVlMSVNUX1JFUExBQ0VfSVRFTSwKLSAgICAgICAgICAgICAgICAoc2Vzc2lvbiwgY29udHJvbGxlcikgLT4gewotICAgICAgICAgICAgICAgICAgICAvLyBSZXNldHMgdGhlIFVVSUQgZnJvbSB0aGUgaW5jb21pbmcgbWVkaWEgaWQsIHNvIGNvbnRyb2xsZXIgbWF5IHJldXNlIGEgbWVkaWEKLSAgICAgICAgICAgICAgICAgICAgLy8gaXRlbSBtdWx0aXBsZSB0aW1lcyBmb3IgcmVwbGFjZVBsYXlsaXN0SXRlbS4KLSAgICAgICAgICAgICAgICAgICAgc2Vzc2lvbi5nZXRJbnN0YW5jZSgpLnJlcGxhY2VQbGF5bGlzdEl0ZW0oaW5kZXgsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgTWVkaWFJdGVtMkltcGwuZnJvbUJ1bmRsZShtZWRpYUl0ZW0sIG51bGwpKTsKLSAgICAgICAgICAgICAgICB9KTsKLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgdm9pZCBza2lwVG9QbGF5bGlzdEl0ZW0oSU1lZGlhQ29udHJvbGxlcjIgY2FsbGVyLCBCdW5kbGUgbWVkaWFJdGVtKSB7Ci0gICAgICAgIG9uQ29tbWFuZChjYWxsZXIsIFNlc3Npb25Db21tYW5kMi5DT01NQU5EX0NPREVfUExBWUxJU1RfU0tJUF9UT19QTEFZTElTVF9JVEVNLAotICAgICAgICAgICAgICAgIChzZXNzaW9uLCBjb250cm9sbGVyKSAtPiB7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChtZWRpYUl0ZW0gPT0gbnVsbCkgewotICAgICAgICAgICAgICAgICAgICAgICAgTG9nLncoVEFHLCAic2tpcFRvUGxheWxpc3RJdGVtKCk6IElnbm9yaW5nIG51bGwgbWVkaWFJdGVtIGZyb20gIgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArIGNvbnRyb2xsZXIpOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIC8vIE5vdGU6IE1lZGlhSXRlbTIgaGFzIGhpZGRlbiBVVUlEIHRvIGlkZW50aWZ5IGl0IGFjcm9zcyB0aGUgcHJvY2Vzc2VzLgotICAgICAgICAgICAgICAgICAgICBzZXNzaW9uLmdldEluc3RhbmNlKCkuc2tpcFRvUGxheWxpc3RJdGVtKE1lZGlhSXRlbTIuZnJvbUJ1bmRsZShtZWRpYUl0ZW0pKTsKLSAgICAgICAgICAgICAgICB9KTsKLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgdm9pZCBza2lwVG9QcmV2aW91c0l0ZW0oSU1lZGlhQ29udHJvbGxlcjIgY2FsbGVyKSB7Ci0gICAgICAgIG9uQ29tbWFuZChjYWxsZXIsIFNlc3Npb25Db21tYW5kMi5DT01NQU5EX0NPREVfUExBWUxJU1RfU0tJUF9QUkVWX0lURU0sCi0gICAgICAgICAgICAgICAgKHNlc3Npb24sIGNvbnRyb2xsZXIpIC0+IHsKLSAgICAgICAgICAgICAgICAgICAgc2Vzc2lvbi5nZXRJbnN0YW5jZSgpLnNraXBUb1ByZXZpb3VzSXRlbSgpOwotICAgICAgICAgICAgICAgIH0pOwotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyB2b2lkIHNraXBUb05leHRJdGVtKElNZWRpYUNvbnRyb2xsZXIyIGNhbGxlcikgewotICAgICAgICBvbkNvbW1hbmQoY2FsbGVyLCBTZXNzaW9uQ29tbWFuZDIuQ09NTUFORF9DT0RFX1BMQVlMSVNUX1NLSVBfTkVYVF9JVEVNLAotICAgICAgICAgICAgICAgIChzZXNzaW9uLCBjb250cm9sbGVyKSAtPiB7Ci0gICAgICAgICAgICAgICAgICAgIHNlc3Npb24uZ2V0SW5zdGFuY2UoKS5za2lwVG9OZXh0SXRlbSgpOwotICAgICAgICAgICAgICAgIH0pOwotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyB2b2lkIHNldFJlcGVhdE1vZGUoSU1lZGlhQ29udHJvbGxlcjIgY2FsbGVyLCBpbnQgcmVwZWF0TW9kZSkgewotICAgICAgICBvbkNvbW1hbmQoY2FsbGVyLCBTZXNzaW9uQ29tbWFuZDIuQ09NTUFORF9DT0RFX1BMQVlMSVNUX1NFVF9SRVBFQVRfTU9ERSwKLSAgICAgICAgICAgICAgICAoc2Vzc2lvbiwgY29udHJvbGxlcikgLT4gewotICAgICAgICAgICAgICAgICAgICBzZXNzaW9uLmdldEluc3RhbmNlKCkuc2V0UmVwZWF0TW9kZShyZXBlYXRNb2RlKTsKLSAgICAgICAgICAgICAgICB9KTsKLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgdm9pZCBzZXRTaHVmZmxlTW9kZShJTWVkaWFDb250cm9sbGVyMiBjYWxsZXIsIGludCBzaHVmZmxlTW9kZSkgewotICAgICAgICBvbkNvbW1hbmQoY2FsbGVyLCBTZXNzaW9uQ29tbWFuZDIuQ09NTUFORF9DT0RFX1BMQVlMSVNUX1NFVF9TSFVGRkxFX01PREUsCi0gICAgICAgICAgICAgICAgKHNlc3Npb24sIGNvbnRyb2xsZXIpIC0+IHsKLSAgICAgICAgICAgICAgICAgICAgc2Vzc2lvbi5nZXRJbnN0YW5jZSgpLnNldFNodWZmbGVNb2RlKHNodWZmbGVNb2RlKTsKLSAgICAgICAgICAgICAgICB9KTsKLSAgICB9Ci0KLSAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCi0gICAgLy8gQUlETCBtZXRob2RzIGZvciBMaWJyYXJ5U2Vzc2lvbiBvdmVycmlkZXMKLSAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCi0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgdm9pZCBnZXRMaWJyYXJ5Um9vdChmaW5hbCBJTWVkaWFDb250cm9sbGVyMiBjYWxsZXIsIGZpbmFsIEJ1bmRsZSByb290SGludHMpCi0gICAgICAgICAgICB0aHJvd3MgUnVudGltZUV4Y2VwdGlvbiB7Ci0gICAgICAgIG9uQnJvd3NlckNvbW1hbmQoY2FsbGVyLCAoc2Vzc2lvbiwgY29udHJvbGxlcikgLT4gewotICAgICAgICAgICAgZmluYWwgTGlicmFyeVJvb3Qgcm9vdCA9IHNlc3Npb24uZ2V0Q2FsbGJhY2soKS5vbkdldExpYnJhcnlSb290KHNlc3Npb24uZ2V0SW5zdGFuY2UoKSwKLSAgICAgICAgICAgICAgICAgICAgY29udHJvbGxlciwgcm9vdEhpbnRzKTsKLSAgICAgICAgICAgIG5vdGlmeShjb250cm9sbGVyLCAodW51c2VkLCBpQ29udHJvbGxlcikgLT4gewotICAgICAgICAgICAgICAgIGlDb250cm9sbGVyLm9uR2V0TGlicmFyeVJvb3REb25lKHJvb3RIaW50cywKLSAgICAgICAgICAgICAgICAgICAgICAgIHJvb3QgPT0gbnVsbCA/IG51bGwgOiByb290LmdldFJvb3RJZCgpLAotICAgICAgICAgICAgICAgICAgICAgICAgcm9vdCA9PSBudWxsID8gbnVsbCA6IHJvb3QuZ2V0RXh0cmFzKCkpOwotICAgICAgICAgICAgfSk7Ci0gICAgICAgIH0pOwotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyB2b2lkIGdldEl0ZW0oZmluYWwgSU1lZGlhQ29udHJvbGxlcjIgY2FsbGVyLCBmaW5hbCBTdHJpbmcgbWVkaWFJZCkKLSAgICAgICAgICAgIHRocm93cyBSdW50aW1lRXhjZXB0aW9uIHsKLSAgICAgICAgb25Ccm93c2VyQ29tbWFuZChjYWxsZXIsIChzZXNzaW9uLCBjb250cm9sbGVyKSAtPiB7Ci0gICAgICAgICAgICBpZiAobWVkaWFJZCA9PSBudWxsKSB7Ci0gICAgICAgICAgICAgICAgaWYgKERFQlVHKSB7Ci0gICAgICAgICAgICAgICAgICAgIExvZy5kKFRBRywgIm1lZGlhSWQgc2hvdWxkbid0IGJlIG51bGwiKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgZmluYWwgTWVkaWFJdGVtMiByZXN1bHQgPSBzZXNzaW9uLmdldENhbGxiYWNrKCkub25HZXRJdGVtKHNlc3Npb24uZ2V0SW5zdGFuY2UoKSwKLSAgICAgICAgICAgICAgICAgICAgY29udHJvbGxlciwgbWVkaWFJZCk7Ci0gICAgICAgICAgICBub3RpZnkoY29udHJvbGxlciwgKHVudXNlZCwgaUNvbnRyb2xsZXIpIC0+IHsKLSAgICAgICAgICAgICAgICBpQ29udHJvbGxlci5vbkdldEl0ZW1Eb25lKG1lZGlhSWQsIHJlc3VsdCA9PSBudWxsID8gbnVsbCA6IHJlc3VsdC50b0J1bmRsZSgpKTsKLSAgICAgICAgICAgIH0pOwotICAgICAgICB9KTsKLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgdm9pZCBnZXRDaGlsZHJlbihmaW5hbCBJTWVkaWFDb250cm9sbGVyMiBjYWxsZXIsIGZpbmFsIFN0cmluZyBwYXJlbnRJZCwKLSAgICAgICAgICAgIGZpbmFsIGludCBwYWdlLCBmaW5hbCBpbnQgcGFnZVNpemUsIGZpbmFsIEJ1bmRsZSBleHRyYXMpIHRocm93cyBSdW50aW1lRXhjZXB0aW9uIHsKLSAgICAgICAgb25Ccm93c2VyQ29tbWFuZChjYWxsZXIsIChzZXNzaW9uLCBjb250cm9sbGVyKSAtPiB7Ci0gICAgICAgICAgICBpZiAocGFyZW50SWQgPT0gbnVsbCkgewotICAgICAgICAgICAgICAgIGlmIChERUJVRykgewotICAgICAgICAgICAgICAgICAgICBMb2cuZChUQUcsICJwYXJlbnRJZCBzaG91bGRuJ3QgYmUgbnVsbCIpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAocGFnZSA8IDEgfHwgcGFnZVNpemUgPCAxKSB7Ci0gICAgICAgICAgICAgICAgaWYgKERFQlVHKSB7Ci0gICAgICAgICAgICAgICAgICAgIExvZy5kKFRBRywgIk5laXRoZXIgcGFnZSBub3IgcGFnZVNpemUgc2hvdWxkIGJlIGxlc3MgdGhhbiAxIik7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIExpc3Q8TWVkaWFJdGVtMj4gcmVzdWx0ID0gc2Vzc2lvbi5nZXRDYWxsYmFjaygpLm9uR2V0Q2hpbGRyZW4oc2Vzc2lvbi5nZXRJbnN0YW5jZSgpLAotICAgICAgICAgICAgICAgICAgICBjb250cm9sbGVyLCBwYXJlbnRJZCwgcGFnZSwgcGFnZVNpemUsIGV4dHJhcyk7Ci0gICAgICAgICAgICBpZiAocmVzdWx0ICE9IG51bGwgJiYgcmVzdWx0LnNpemUoKSA+IHBhZ2VTaXplKSB7Ci0gICAgICAgICAgICAgICAgdGhyb3cgbmV3IElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbigib25HZXRDaGlsZHJlbigpIHNob3VsZG4ndCByZXR1cm4gbWVkaWEgaXRlbXMgIgotICAgICAgICAgICAgICAgICAgICAgICAgKyAibW9yZSB0aGFuIHBhZ2VTaXplLiByZXN1bHQuc2l6ZSgpPSIgKyByZXN1bHQuc2l6ZSgpICsgIiBwYWdlU2l6ZT0iCi0gICAgICAgICAgICAgICAgICAgICAgICArIHBhZ2VTaXplKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGZpbmFsIExpc3Q8QnVuZGxlPiBidW5kbGVMaXN0OwotICAgICAgICAgICAgaWYgKHJlc3VsdCAhPSBudWxsKSB7Ci0gICAgICAgICAgICAgICAgYnVuZGxlTGlzdCA9IG5ldyBBcnJheUxpc3Q8PigpOwotICAgICAgICAgICAgICAgIGZvciAoTWVkaWFJdGVtMiBpdGVtIDogcmVzdWx0KSB7Ci0gICAgICAgICAgICAgICAgICAgIGJ1bmRsZUxpc3QuYWRkKGl0ZW0gPT0gbnVsbCA/IG51bGwgOiBpdGVtLnRvQnVuZGxlKCkpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgYnVuZGxlTGlzdCA9IG51bGw7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBub3RpZnkoY29udHJvbGxlciwgKHVudXNlZCwgaUNvbnRyb2xsZXIpIC0+IHsKLSAgICAgICAgICAgICAgICBpQ29udHJvbGxlci5vbkdldENoaWxkcmVuRG9uZShwYXJlbnRJZCwgcGFnZSwgcGFnZVNpemUsIGJ1bmRsZUxpc3QsIGV4dHJhcyk7Ci0gICAgICAgICAgICB9KTsKLSAgICAgICAgfSk7Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIHZvaWQgc2VhcmNoKElNZWRpYUNvbnRyb2xsZXIyIGNhbGxlciwgU3RyaW5nIHF1ZXJ5LCBCdW5kbGUgZXh0cmFzKSB7Ci0gICAgICAgIG9uQnJvd3NlckNvbW1hbmQoY2FsbGVyLCAoc2Vzc2lvbiwgY29udHJvbGxlcikgLT4gewotICAgICAgICAgICAgaWYgKFRleHRVdGlscy5pc0VtcHR5KHF1ZXJ5KSkgewotICAgICAgICAgICAgICAgIExvZy53KFRBRywgInNlYXJjaCgpOiBJZ25vcmluZyBlbXB0eSBxdWVyeSBmcm9tICIgKyBjb250cm9sbGVyKTsKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBzZXNzaW9uLmdldENhbGxiYWNrKCkub25TZWFyY2goc2Vzc2lvbi5nZXRJbnN0YW5jZSgpLCBjb250cm9sbGVyLCBxdWVyeSwgZXh0cmFzKTsKLSAgICAgICAgfSk7Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIHZvaWQgZ2V0U2VhcmNoUmVzdWx0KGZpbmFsIElNZWRpYUNvbnRyb2xsZXIyIGNhbGxlciwgZmluYWwgU3RyaW5nIHF1ZXJ5LAotICAgICAgICAgICAgZmluYWwgaW50IHBhZ2UsIGZpbmFsIGludCBwYWdlU2l6ZSwgZmluYWwgQnVuZGxlIGV4dHJhcykgewotICAgICAgICBvbkJyb3dzZXJDb21tYW5kKGNhbGxlciwgKHNlc3Npb24sIGNvbnRyb2xsZXIpIC0+IHsKLSAgICAgICAgICAgIGlmIChUZXh0VXRpbHMuaXNFbXB0eShxdWVyeSkpIHsKLSAgICAgICAgICAgICAgICBMb2cudyhUQUcsICJnZXRTZWFyY2hSZXN1bHQoKTogSWdub3JpbmcgZW1wdHkgcXVlcnkgZnJvbSAiICsgY29udHJvbGxlcik7Ci0gICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYgKHBhZ2UgPCAxIHx8IHBhZ2VTaXplIDwgMSkgewotICAgICAgICAgICAgICAgIExvZy53KFRBRywgImdldFNlYXJjaFJlc3VsdCgpOiBJZ25vcmluZyBuZWdhdGl2ZSBwYWdlIC8gcGFnZVNpemUuIgotICAgICAgICAgICAgICAgICAgICAgICAgKyAiIHBhZ2U9IiArIHBhZ2UgKyAiIHBhZ2VTaXplPSIgKyBwYWdlU2l6ZSArICIgZnJvbSAiICsgY29udHJvbGxlcik7Ci0gICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgTGlzdDxNZWRpYUl0ZW0yPiByZXN1bHQgPSBzZXNzaW9uLmdldENhbGxiYWNrKCkub25HZXRTZWFyY2hSZXN1bHQoc2Vzc2lvbi5nZXRJbnN0YW5jZSgpLAotICAgICAgICAgICAgICAgICAgICBjb250cm9sbGVyLCBxdWVyeSwgcGFnZSwgcGFnZVNpemUsIGV4dHJhcyk7Ci0gICAgICAgICAgICBpZiAocmVzdWx0ICE9IG51bGwgJiYgcmVzdWx0LnNpemUoKSA+IHBhZ2VTaXplKSB7Ci0gICAgICAgICAgICAgICAgdGhyb3cgbmV3IElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbigib25HZXRTZWFyY2hSZXN1bHQoKSBzaG91bGRuJ3QgcmV0dXJuIG1lZGlhICIKLSAgICAgICAgICAgICAgICAgICAgICAgICsgIml0ZW1zIG1vcmUgdGhhbiBwYWdlU2l6ZS4gcmVzdWx0LnNpemUoKT0iICsgcmVzdWx0LnNpemUoKSArICIgcGFnZVNpemU9IgotICAgICAgICAgICAgICAgICAgICAgICAgKyBwYWdlU2l6ZSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBmaW5hbCBMaXN0PEJ1bmRsZT4gYnVuZGxlTGlzdDsKLSAgICAgICAgICAgIGlmIChyZXN1bHQgIT0gbnVsbCkgewotICAgICAgICAgICAgICAgIGJ1bmRsZUxpc3QgPSBuZXcgQXJyYXlMaXN0PD4oKTsKLSAgICAgICAgICAgICAgICBmb3IgKE1lZGlhSXRlbTIgaXRlbSA6IHJlc3VsdCkgewotICAgICAgICAgICAgICAgICAgICBidW5kbGVMaXN0LmFkZChpdGVtID09IG51bGwgPyBudWxsIDogaXRlbS50b0J1bmRsZSgpKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIGJ1bmRsZUxpc3QgPSBudWxsOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgbm90aWZ5KGNvbnRyb2xsZXIsICh1bnVzZWQsIGlDb250cm9sbGVyKSAtPiB7Ci0gICAgICAgICAgICAgICAgaUNvbnRyb2xsZXIub25HZXRTZWFyY2hSZXN1bHREb25lKHF1ZXJ5LCBwYWdlLCBwYWdlU2l6ZSwgYnVuZGxlTGlzdCwgZXh0cmFzKTsKLSAgICAgICAgICAgIH0pOwotICAgICAgICB9KTsKLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgdm9pZCBzdWJzY3JpYmUoZmluYWwgSU1lZGlhQ29udHJvbGxlcjIgY2FsbGVyLCBmaW5hbCBTdHJpbmcgcGFyZW50SWQsCi0gICAgICAgICAgICBmaW5hbCBCdW5kbGUgb3B0aW9uKSB7Ci0gICAgICAgIG9uQnJvd3NlckNvbW1hbmQoY2FsbGVyLCAoc2Vzc2lvbiwgY29udHJvbGxlcikgLT4gewotICAgICAgICAgICAgaWYgKHBhcmVudElkID09IG51bGwpIHsKLSAgICAgICAgICAgICAgICBMb2cudyhUQUcsICJzdWJzY3JpYmUoKTogSWdub3JpbmcgbnVsbCBwYXJlbnRJZCBmcm9tICIgKyBjb250cm9sbGVyKTsKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBzZXNzaW9uLmdldENhbGxiYWNrKCkub25TdWJzY3JpYmUoc2Vzc2lvbi5nZXRJbnN0YW5jZSgpLAotICAgICAgICAgICAgICAgICAgICBjb250cm9sbGVyLCBwYXJlbnRJZCwgb3B0aW9uKTsKLSAgICAgICAgICAgIHN5bmNocm9uaXplZCAobUxvY2spIHsKLSAgICAgICAgICAgICAgICBTZXQ8U3RyaW5nPiBzdWJzY3JpcHRpb24gPSBtU3Vic2NyaXB0aW9ucy5nZXQoY29udHJvbGxlcik7Ci0gICAgICAgICAgICAgICAgaWYgKHN1YnNjcmlwdGlvbiA9PSBudWxsKSB7Ci0gICAgICAgICAgICAgICAgICAgIHN1YnNjcmlwdGlvbiA9IG5ldyBIYXNoU2V0PD4oKTsKLSAgICAgICAgICAgICAgICAgICAgbVN1YnNjcmlwdGlvbnMucHV0KGNvbnRyb2xsZXIsIHN1YnNjcmlwdGlvbik7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIHN1YnNjcmlwdGlvbi5hZGQocGFyZW50SWQpOwotICAgICAgICAgICAgfQotICAgICAgICB9KTsKLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgdm9pZCB1bnN1YnNjcmliZShmaW5hbCBJTWVkaWFDb250cm9sbGVyMiBjYWxsZXIsIGZpbmFsIFN0cmluZyBwYXJlbnRJZCkgewotICAgICAgICBvbkJyb3dzZXJDb21tYW5kKGNhbGxlciwgKHNlc3Npb24sIGNvbnRyb2xsZXIpIC0+IHsKLSAgICAgICAgICAgIGlmIChwYXJlbnRJZCA9PSBudWxsKSB7Ci0gICAgICAgICAgICAgICAgTG9nLncoVEFHLCAidW5zdWJzY3JpYmUoKTogSWdub3JpbmcgbnVsbCBwYXJlbnRJZCBmcm9tICIgKyBjb250cm9sbGVyKTsKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBzZXNzaW9uLmdldENhbGxiYWNrKCkub25VbnN1YnNjcmliZShzZXNzaW9uLmdldEluc3RhbmNlKCksIGNvbnRyb2xsZXIsIHBhcmVudElkKTsKLSAgICAgICAgICAgIHN5bmNocm9uaXplZCAobUxvY2spIHsKLSAgICAgICAgICAgICAgICBtU3Vic2NyaXB0aW9ucy5yZW1vdmUoY29udHJvbGxlcik7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0pOwotICAgIH0KLQotICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KLSAgICAvLyBBUElzIGZvciBNZWRpYVNlc3Npb24ySW1wbAotICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KLQotICAgIC8vIFRPRE8oamFld2FuKTogKENhbiBiZSBQb3N0LVApIE5lZWQgYSB3YXkgdG8gZ2V0IGNvbnRyb2xsZXIgd2l0aCBwZXJtaXNzaW9ucwotICAgIHB1YmxpYyBMaXN0PENvbnRyb2xsZXJJbmZvPiBnZXRDb250cm9sbGVycygpIHsKLSAgICAgICAgQXJyYXlMaXN0PENvbnRyb2xsZXJJbmZvPiBjb250cm9sbGVycyA9IG5ldyBBcnJheUxpc3Q8PigpOwotICAgICAgICBzeW5jaHJvbml6ZWQgKG1Mb2NrKSB7Ci0gICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IG1Db250cm9sbGVycy5zaXplKCk7IGkrKykgewotICAgICAgICAgICAgICAgIGNvbnRyb2xsZXJzLmFkZChtQ29udHJvbGxlcnMudmFsdWVBdChpKSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIGNvbnRyb2xsZXJzOwotICAgIH0KLQotICAgIC8vIFNob3VsZCBiZSB1c2VkIHdpdGhvdXQgYSBsb2NrIHRvIHByZXZlbnQgcG90ZW50aWFsIGRlYWRsb2NrLgotICAgIHB1YmxpYyB2b2lkIG5vdGlmeVBsYXllclN0YXRlQ2hhbmdlZE5vdExvY2tlZChpbnQgc3RhdGUpIHsKLSAgICAgICAgbm90aWZ5QWxsKChjb250cm9sbGVyLCBpQ29udHJvbGxlcikgLT4gewotICAgICAgICAgICAgaUNvbnRyb2xsZXIub25QbGF5ZXJTdGF0ZUNoYW5nZWQoc3RhdGUpOwotICAgICAgICB9KTsKLSAgICB9Ci0KLSAgICAvLyBUT0RPKGphZXdhbik6IFJlbmFtZQotICAgIHB1YmxpYyB2b2lkIG5vdGlmeVBvc2l0aW9uQ2hhbmdlZE5vdExvY2tlZChsb25nIGV2ZW50VGltZU1zLCBsb25nIHBvc2l0aW9uTXMpIHsKLSAgICAgICAgbm90aWZ5QWxsKChjb250cm9sbGVyLCBpQ29udHJvbGxlcikgLT4gewotICAgICAgICAgICAgaUNvbnRyb2xsZXIub25Qb3NpdGlvbkNoYW5nZWQoZXZlbnRUaW1lTXMsIHBvc2l0aW9uTXMpOwotICAgICAgICB9KTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgdm9pZCBub3RpZnlQbGF5YmFja1NwZWVkQ2hhbmdlZE5vdExvY2tlZChmbG9hdCBzcGVlZCkgewotICAgICAgICBub3RpZnlBbGwoKGNvbnRyb2xsZXIsIGlDb250cm9sbGVyKSAtPiB7Ci0gICAgICAgICAgICBpQ29udHJvbGxlci5vblBsYXliYWNrU3BlZWRDaGFuZ2VkKHNwZWVkKTsKLSAgICAgICAgfSk7Ci0gICAgfQotCi0gICAgcHVibGljIHZvaWQgbm90aWZ5QnVmZmVyZWRQb3NpdGlvbkNoYW5nZWROb3RMb2NrZWQobG9uZyBidWZmZXJlZFBvc2l0aW9uTXMpIHsKLSAgICAgICAgbm90aWZ5QWxsKChjb250cm9sbGVyLCBpQ29udHJvbGxlcikgLT4gewotICAgICAgICAgICAgaUNvbnRyb2xsZXIub25CdWZmZXJlZFBvc2l0aW9uQ2hhbmdlZChidWZmZXJlZFBvc2l0aW9uTXMpOwotICAgICAgICB9KTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgdm9pZCBub3RpZnlDdXN0b21MYXlvdXROb3RMb2NrZWQoQ29udHJvbGxlckluZm8gY29udHJvbGxlciwgTGlzdDxDb21tYW5kQnV0dG9uPiBsYXlvdXQpIHsKLSAgICAgICAgbm90aWZ5KGNvbnRyb2xsZXIsICh1bnVzZWQsIGlDb250cm9sbGVyKSAtPiB7Ci0gICAgICAgICAgICBMaXN0PEJ1bmRsZT4gbGF5b3V0QnVuZGxlcyA9IG5ldyBBcnJheUxpc3Q8PigpOwotICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBsYXlvdXQuc2l6ZSgpOyBpKyspIHsKLSAgICAgICAgICAgICAgICBCdW5kbGUgYnVuZGxlID0gKChDb21tYW5kQnV0dG9uSW1wbCkgbGF5b3V0LmdldChpKS5nZXRQcm92aWRlcigpKS50b0J1bmRsZSgpOwotICAgICAgICAgICAgICAgIGlmIChidW5kbGUgIT0gbnVsbCkgewotICAgICAgICAgICAgICAgICAgICBsYXlvdXRCdW5kbGVzLmFkZChidW5kbGUpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlDb250cm9sbGVyLm9uQ3VzdG9tTGF5b3V0Q2hhbmdlZChsYXlvdXRCdW5kbGVzKTsKLSAgICAgICAgfSk7Ci0gICAgfQotCi0gICAgcHVibGljIHZvaWQgbm90aWZ5UGxheWxpc3RDaGFuZ2VkTm90TG9ja2VkKExpc3Q8TWVkaWFJdGVtMj4gcGxheWxpc3QsIE1lZGlhTWV0YWRhdGEyIG1ldGFkYXRhKSB7Ci0gICAgICAgIGZpbmFsIExpc3Q8QnVuZGxlPiBidW5kbGVMaXN0OwotICAgICAgICBpZiAocGxheWxpc3QgIT0gbnVsbCkgewotICAgICAgICAgICAgYnVuZGxlTGlzdCA9IG5ldyBBcnJheUxpc3Q8PigpOwotICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBwbGF5bGlzdC5zaXplKCk7IGkrKykgewotICAgICAgICAgICAgICAgIGlmIChwbGF5bGlzdC5nZXQoaSkgIT0gbnVsbCkgewotICAgICAgICAgICAgICAgICAgICBCdW5kbGUgYnVuZGxlID0gcGxheWxpc3QuZ2V0KGkpLnRvQnVuZGxlKCk7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChidW5kbGUgIT0gbnVsbCkgewotICAgICAgICAgICAgICAgICAgICAgICAgYnVuZGxlTGlzdC5hZGQoYnVuZGxlKTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIGJ1bmRsZUxpc3QgPSBudWxsOwotICAgICAgICB9Ci0gICAgICAgIGZpbmFsIEJ1bmRsZSBtZXRhZGF0YUJ1bmRsZSA9IChtZXRhZGF0YSA9PSBudWxsKSA/IG51bGwgOiBtZXRhZGF0YS50b0J1bmRsZSgpOwotICAgICAgICBub3RpZnlBbGwoKGNvbnRyb2xsZXIsIGlDb250cm9sbGVyKSAtPiB7Ci0gICAgICAgICAgICBpZiAoZ2V0Q29udHJvbGxlckJpbmRlcklmQWJsZShjb250cm9sbGVyLAotICAgICAgICAgICAgICAgICAgICBTZXNzaW9uQ29tbWFuZDIuQ09NTUFORF9DT0RFX1BMQVlMSVNUX0dFVF9MSVNUKSAhPSBudWxsKSB7Ci0gICAgICAgICAgICAgICAgaUNvbnRyb2xsZXIub25QbGF5bGlzdENoYW5nZWQoYnVuZGxlTGlzdCwgbWV0YWRhdGFCdW5kbGUpOwotICAgICAgICAgICAgfSBlbHNlIGlmIChnZXRDb250cm9sbGVyQmluZGVySWZBYmxlKGNvbnRyb2xsZXIsCi0gICAgICAgICAgICAgICAgICAgIFNlc3Npb25Db21tYW5kMi5DT01NQU5EX0NPREVfUExBWUxJU1RfR0VUX0xJU1RfTUVUQURBVEEpICE9IG51bGwpIHsKLSAgICAgICAgICAgICAgICBpQ29udHJvbGxlci5vblBsYXlsaXN0TWV0YWRhdGFDaGFuZ2VkKG1ldGFkYXRhQnVuZGxlKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfSk7Ci0gICAgfQotCi0gICAgcHVibGljIHZvaWQgbm90aWZ5UGxheWxpc3RNZXRhZGF0YUNoYW5nZWROb3RMb2NrZWQoTWVkaWFNZXRhZGF0YTIgbWV0YWRhdGEpIHsKLSAgICAgICAgZmluYWwgQnVuZGxlIG1ldGFkYXRhQnVuZGxlID0gKG1ldGFkYXRhID09IG51bGwpID8gbnVsbCA6IG1ldGFkYXRhLnRvQnVuZGxlKCk7Ci0gICAgICAgIG5vdGlmeUFsbChTZXNzaW9uQ29tbWFuZDIuQ09NTUFORF9DT0RFX1BMQVlMSVNUX0dFVF9MSVNUX01FVEFEQVRBLAotICAgICAgICAgICAgICAgICh1bnVzZWQsIGlDb250cm9sbGVyKSAtPiB7Ci0gICAgICAgICAgICAgICAgICAgIGlDb250cm9sbGVyLm9uUGxheWxpc3RNZXRhZGF0YUNoYW5nZWQobWV0YWRhdGFCdW5kbGUpOwotICAgICAgICAgICAgICAgIH0pOwotICAgIH0KLQotICAgIHB1YmxpYyB2b2lkIG5vdGlmeVJlcGVhdE1vZGVDaGFuZ2VkTm90TG9ja2VkKGludCByZXBlYXRNb2RlKSB7Ci0gICAgICAgIG5vdGlmeUFsbCgodW51c2VkLCBpQ29udHJvbGxlcikgLT4gewotICAgICAgICAgICAgaUNvbnRyb2xsZXIub25SZXBlYXRNb2RlQ2hhbmdlZChyZXBlYXRNb2RlKTsKLSAgICAgICAgfSk7Ci0gICAgfQotCi0gICAgcHVibGljIHZvaWQgbm90aWZ5U2h1ZmZsZU1vZGVDaGFuZ2VkTm90TG9ja2VkKGludCBzaHVmZmxlTW9kZSkgewotICAgICAgICBub3RpZnlBbGwoKHVudXNlZCwgaUNvbnRyb2xsZXIpIC0+IHsKLSAgICAgICAgICAgIGlDb250cm9sbGVyLm9uU2h1ZmZsZU1vZGVDaGFuZ2VkKHNodWZmbGVNb2RlKTsKLSAgICAgICAgfSk7Ci0gICAgfQotCi0gICAgcHVibGljIHZvaWQgbm90aWZ5UGxheWJhY2tJbmZvQ2hhbmdlZChNZWRpYUNvbnRyb2xsZXIyLlBsYXliYWNrSW5mbyBwbGF5YmFja0luZm8pIHsKLSAgICAgICAgZmluYWwgQnVuZGxlIHBsYXliYWNrSW5mb0J1bmRsZSA9Ci0gICAgICAgICAgICAgICAgKChNZWRpYUNvbnRyb2xsZXIySW1wbC5QbGF5YmFja0luZm9JbXBsKSBwbGF5YmFja0luZm8uZ2V0UHJvdmlkZXIoKSkudG9CdW5kbGUoKTsKLSAgICAgICAgbm90aWZ5QWxsKCh1bnVzZWQsIGlDb250cm9sbGVyKSAtPiB7Ci0gICAgICAgICAgICBpQ29udHJvbGxlci5vblBsYXliYWNrSW5mb0NoYW5nZWQocGxheWJhY2tJbmZvQnVuZGxlKTsKLSAgICAgICAgfSk7Ci0gICAgfQotCi0gICAgcHVibGljIHZvaWQgc2V0QWxsb3dlZENvbW1hbmRzKENvbnRyb2xsZXJJbmZvIGNvbnRyb2xsZXIsIFNlc3Npb25Db21tYW5kR3JvdXAyIGNvbW1hbmRzKSB7Ci0gICAgICAgIHN5bmNocm9uaXplZCAobUxvY2spIHsKLSAgICAgICAgICAgIG1BbGxvd2VkQ29tbWFuZEdyb3VwTWFwLnB1dChjb250cm9sbGVyLCBjb21tYW5kcyk7Ci0gICAgICAgIH0KLSAgICAgICAgbm90aWZ5KGNvbnRyb2xsZXIsICh1bnVzZWQsIGlDb250cm9sbGVyKSAtPiB7Ci0gICAgICAgICAgICBpQ29udHJvbGxlci5vbkFsbG93ZWRDb21tYW5kc0NoYW5nZWQoY29tbWFuZHMudG9CdW5kbGUoKSk7Ci0gICAgICAgIH0pOwotICAgIH0KLQotICAgIHB1YmxpYyB2b2lkIHNlbmRDdXN0b21Db21tYW5kKENvbnRyb2xsZXJJbmZvIGNvbnRyb2xsZXIsIFNlc3Npb25Db21tYW5kMiBjb21tYW5kLCBCdW5kbGUgYXJncywKLSAgICAgICAgICAgIFJlc3VsdFJlY2VpdmVyIHJlY2VpdmVyKSB7Ci0gICAgICAgIGlmIChyZWNlaXZlciAhPSBudWxsICYmIGNvbnRyb2xsZXIgPT0gbnVsbCkgewotICAgICAgICAgICAgdGhyb3cgbmV3IElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbigiQ29udHJvbGxlciBzaG91bGRuJ3QgYmUgbnVsbCBpZiByZXN1bHQgcmVjZWl2ZXIgaXMiCi0gICAgICAgICAgICAgICAgICAgICsgIiBzcGVjaWZpZWQiKTsKLSAgICAgICAgfQotICAgICAgICBpZiAoY29tbWFuZCA9PSBudWxsKSB7Ci0gICAgICAgICAgICB0aHJvdyBuZXcgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKCJjb21tYW5kIHNob3VsZG4ndCBiZSBudWxsIik7Ci0gICAgICAgIH0KLSAgICAgICAgbm90aWZ5KGNvbnRyb2xsZXIsICh1bnVzZWQsIGlDb250cm9sbGVyKSAtPiB7Ci0gICAgICAgICAgICBCdW5kbGUgY29tbWFuZEJ1bmRsZSA9IGNvbW1hbmQudG9CdW5kbGUoKTsKLSAgICAgICAgICAgIGlDb250cm9sbGVyLm9uQ3VzdG9tQ29tbWFuZChjb21tYW5kQnVuZGxlLCBhcmdzLCBudWxsKTsKLSAgICAgICAgfSk7Ci0gICAgfQotCi0gICAgcHVibGljIHZvaWQgc2VuZEN1c3RvbUNvbW1hbmQoU2Vzc2lvbkNvbW1hbmQyIGNvbW1hbmQsIEJ1bmRsZSBhcmdzKSB7Ci0gICAgICAgIGlmIChjb21tYW5kID09IG51bGwpIHsKLSAgICAgICAgICAgIHRocm93IG5ldyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oImNvbW1hbmQgc2hvdWxkbid0IGJlIG51bGwiKTsKLSAgICAgICAgfQotICAgICAgICBCdW5kbGUgY29tbWFuZEJ1bmRsZSA9IGNvbW1hbmQudG9CdW5kbGUoKTsKLSAgICAgICAgbm90aWZ5QWxsKCh1bnVzZWQsIGlDb250cm9sbGVyKSAtPiB7Ci0gICAgICAgICAgICBpQ29udHJvbGxlci5vbkN1c3RvbUNvbW1hbmQoY29tbWFuZEJ1bmRsZSwgYXJncywgbnVsbCk7Ci0gICAgICAgIH0pOwotICAgIH0KLQotICAgIHB1YmxpYyB2b2lkIG5vdGlmeUVycm9yKGludCBlcnJvckNvZGUsIEJ1bmRsZSBleHRyYXMpIHsKLSAgICAgICAgbm90aWZ5QWxsKCh1bnVzZWQsIGlDb250cm9sbGVyKSAtPiB7Ci0gICAgICAgICAgICBpQ29udHJvbGxlci5vbkVycm9yKGVycm9yQ29kZSwgZXh0cmFzKTsKLSAgICAgICAgfSk7Ci0gICAgfQotCi0gICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLwotICAgIC8vIEFQSXMgZm9yIE1lZGlhTGlicmFyeVNlc3Npb25JbXBsCi0gICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLwotCi0gICAgcHVibGljIHZvaWQgbm90aWZ5U2VhcmNoUmVzdWx0Q2hhbmdlZChDb250cm9sbGVySW5mbyBjb250cm9sbGVyLCBTdHJpbmcgcXVlcnksIGludCBpdGVtQ291bnQsCi0gICAgICAgICAgICBCdW5kbGUgZXh0cmFzKSB7Ci0gICAgICAgIG5vdGlmeShjb250cm9sbGVyLCAodW51c2VkLCBpQ29udHJvbGxlcikgLT4gewotICAgICAgICAgICAgaUNvbnRyb2xsZXIub25TZWFyY2hSZXN1bHRDaGFuZ2VkKHF1ZXJ5LCBpdGVtQ291bnQsIGV4dHJhcyk7Ci0gICAgICAgIH0pOwotICAgIH0KLQotICAgIHB1YmxpYyB2b2lkIG5vdGlmeUNoaWxkcmVuQ2hhbmdlZE5vdExvY2tlZChDb250cm9sbGVySW5mbyBjb250cm9sbGVyLCBTdHJpbmcgcGFyZW50SWQsCi0gICAgICAgICAgICBpbnQgaXRlbUNvdW50LCBCdW5kbGUgZXh0cmFzKSB7Ci0gICAgICAgIG5vdGlmeShjb250cm9sbGVyLCAodW51c2VkLCBpQ29udHJvbGxlcikgLT4gewotICAgICAgICAgICAgaWYgKGlzU3Vic2NyaWJlZChjb250cm9sbGVyLCBwYXJlbnRJZCkpIHsKLSAgICAgICAgICAgICAgICBpQ29udHJvbGxlci5vbkNoaWxkcmVuQ2hhbmdlZChwYXJlbnRJZCwgaXRlbUNvdW50LCBleHRyYXMpOwotICAgICAgICAgICAgfQotICAgICAgICB9KTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgdm9pZCBub3RpZnlDaGlsZHJlbkNoYW5nZWROb3RMb2NrZWQoU3RyaW5nIHBhcmVudElkLCBpbnQgaXRlbUNvdW50LCBCdW5kbGUgZXh0cmFzKSB7Ci0gICAgICAgIG5vdGlmeUFsbCgoY29udHJvbGxlciwgaUNvbnRyb2xsZXIpIC0+IHsKLSAgICAgICAgICAgIGlmIChpc1N1YnNjcmliZWQoY29udHJvbGxlciwgcGFyZW50SWQpKSB7Ci0gICAgICAgICAgICAgICAgaUNvbnRyb2xsZXIub25DaGlsZHJlbkNoYW5nZWQocGFyZW50SWQsIGl0ZW1Db3VudCwgZXh0cmFzKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfSk7Ci0gICAgfQotCi0gICAgcHJpdmF0ZSBib29sZWFuIGlzU3Vic2NyaWJlZChDb250cm9sbGVySW5mbyBjb250cm9sbGVyLCBTdHJpbmcgcGFyZW50SWQpIHsKLSAgICAgICAgc3luY2hyb25pemVkIChtTG9jaykgewotICAgICAgICAgICAgU2V0PFN0cmluZz4gc3Vic2NyaXB0aW9ucyA9IG1TdWJzY3JpcHRpb25zLmdldChjb250cm9sbGVyKTsKLSAgICAgICAgICAgIGlmIChzdWJzY3JpcHRpb25zID09IG51bGwgfHwgIXN1YnNjcmlwdGlvbnMuY29udGFpbnMocGFyZW50SWQpKSB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLQotICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KLSAgICAvLyBNaXNjCi0gICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLwotCi0gICAgQEZ1bmN0aW9uYWxJbnRlcmZhY2UKLSAgICBwcml2YXRlIGludGVyZmFjZSBTZXNzaW9uUnVubmFibGUgewotICAgICAgICB2b2lkIHJ1bihmaW5hbCBNZWRpYVNlc3Npb24ySW1wbCBzZXNzaW9uLCBmaW5hbCBDb250cm9sbGVySW5mbyBjb250cm9sbGVyKTsKLSAgICB9Ci0KLSAgICBARnVuY3Rpb25hbEludGVyZmFjZQotICAgIHByaXZhdGUgaW50ZXJmYWNlIExpYnJhcnlTZXNzaW9uUnVubmFibGUgewotICAgICAgICB2b2lkIHJ1bihmaW5hbCBNZWRpYUxpYnJhcnlTZXNzaW9uSW1wbCBzZXNzaW9uLCBmaW5hbCBDb250cm9sbGVySW5mbyBjb250cm9sbGVyKTsKLSAgICB9Ci0KLSAgICBARnVuY3Rpb25hbEludGVyZmFjZQotICAgIHByaXZhdGUgaW50ZXJmYWNlIE5vdGlmeVJ1bm5hYmxlIHsKLSAgICAgICAgdm9pZCBydW4oZmluYWwgQ29udHJvbGxlckluZm8gY29udHJvbGxlciwKLSAgICAgICAgICAgICAgICBmaW5hbCBJTWVkaWFDb250cm9sbGVyMiBpQ29udHJvbGxlcikgdGhyb3dzIFJlbW90ZUV4Y2VwdGlvbjsKLSAgICB9Ci19CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9NZWRpYUNvbXBvbmVudHMvc3JjL2NvbS9hbmRyb2lkL21lZGlhL01lZGlhU2Vzc2lvblNlcnZpY2UySW1wbC5qYXZhIGIvcGFja2FnZXMvTWVkaWFDb21wb25lbnRzL3NyYy9jb20vYW5kcm9pZC9tZWRpYS9NZWRpYVNlc3Npb25TZXJ2aWNlMkltcGwuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzMzZWI2NS4uMDAwMDAwMAotLS0gYS9wYWNrYWdlcy9NZWRpYUNvbXBvbmVudHMvc3JjL2NvbS9hbmRyb2lkL21lZGlhL01lZGlhU2Vzc2lvblNlcnZpY2UySW1wbC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTY5ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgMjAxOCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0Ci0gKgotICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7Ci0gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCi0gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLSAqCi0gKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotICoKLSAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKLSAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCi0gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KLSAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKLSAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgotICovCi0KLXBhY2thZ2UgY29tLmFuZHJvaWQubWVkaWE7Ci0KLWltcG9ydCBzdGF0aWMgYW5kcm9pZC5jb250ZW50LkNvbnRleHQuTk9USUZJQ0FUSU9OX1NFUlZJQ0U7Ci0KLWltcG9ydCBhbmRyb2lkLmFwcC5Ob3RpZmljYXRpb247Ci1pbXBvcnQgYW5kcm9pZC5hcHAuTm90aWZpY2F0aW9uTWFuYWdlcjsKLWltcG9ydCBhbmRyb2lkLmNvbnRlbnQuQ29udGV4dDsKLWltcG9ydCBhbmRyb2lkLmNvbnRlbnQuSW50ZW50OwotaW1wb3J0IGFuZHJvaWQubWVkaWEuTWVkaWFQbGF5ZXJCYXNlOwotaW1wb3J0IGFuZHJvaWQubWVkaWEuTWVkaWFQbGF5ZXJCYXNlLlBsYXllckV2ZW50Q2FsbGJhY2s7Ci1pbXBvcnQgYW5kcm9pZC5tZWRpYS5NZWRpYVNlc3Npb24yOwotaW1wb3J0IGFuZHJvaWQubWVkaWEuTWVkaWFTZXNzaW9uU2VydmljZTI7Ci1pbXBvcnQgYW5kcm9pZC5tZWRpYS5NZWRpYVNlc3Npb25TZXJ2aWNlMi5NZWRpYU5vdGlmaWNhdGlvbjsKLWltcG9ydCBhbmRyb2lkLm1lZGlhLlNlc3Npb25Ub2tlbjI7Ci1pbXBvcnQgYW5kcm9pZC5tZWRpYS5TZXNzaW9uVG9rZW4yLlRva2VuVHlwZTsKLWltcG9ydCBhbmRyb2lkLm1lZGlhLnVwZGF0ZS5NZWRpYVNlc3Npb25TZXJ2aWNlMlByb3ZpZGVyOwotaW1wb3J0IGFuZHJvaWQub3MuSUJpbmRlcjsKLWltcG9ydCBhbmRyb2lkLnN1cHBvcnQuYW5ub3RhdGlvbi5HdWFyZGVkQnk7Ci1pbXBvcnQgYW5kcm9pZC51dGlsLkxvZzsKLQotLy8gVE9ETyhqYWV3YW4pOiBOZWVkIGEgdGVzdCBmb3Igc2Vzc2lvbiBzZXJ2aWNlIGl0c2VsZi4KLXB1YmxpYyBjbGFzcyBNZWRpYVNlc3Npb25TZXJ2aWNlMkltcGwgaW1wbGVtZW50cyBNZWRpYVNlc3Npb25TZXJ2aWNlMlByb3ZpZGVyIHsKLQotICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBUQUcgPSAiTVBTZXNzaW9uU2VydmljZSI7IC8vIHRvIG1lZXQgMjMgY2hhciBsaW1pdCBpbiBMb2cgdGFnCi0gICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgYm9vbGVhbiBERUJVRyA9IHRydWU7IC8vIFRPRE8oamFld2FuKTogQ2hhbmdlIHRoaXMuIChiLzc0MDk0NjExKQotCi0gICAgcHJpdmF0ZSBmaW5hbCBNZWRpYVNlc3Npb25TZXJ2aWNlMiBtSW5zdGFuY2U7Ci0gICAgcHJpdmF0ZSBmaW5hbCBQbGF5ZXJFdmVudENhbGxiYWNrIG1DYWxsYmFjayA9IG5ldyBTZXNzaW9uU2VydmljZUV2ZW50Q2FsbGJhY2soKTsKLQotICAgIHByaXZhdGUgZmluYWwgT2JqZWN0IG1Mb2NrID0gbmV3IE9iamVjdCgpOwotICAgIEBHdWFyZGVkQnkoIm1Mb2NrIikKLSAgICBwcml2YXRlIE5vdGlmaWNhdGlvbk1hbmFnZXIgbU5vdGlmaWNhdGlvbk1hbmFnZXI7Ci0gICAgQEd1YXJkZWRCeSgibUxvY2siKQotICAgIHByaXZhdGUgSW50ZW50IG1TdGFydFNlbGZJbnRlbnQ7Ci0KLSAgICBwcml2YXRlIGJvb2xlYW4gbUlzUnVubmluZ0ZvcmVncm91bmQ7Ci0gICAgcHJpdmF0ZSBNZWRpYVNlc3Npb24yIG1TZXNzaW9uOwotCi0gICAgcHVibGljIE1lZGlhU2Vzc2lvblNlcnZpY2UySW1wbChNZWRpYVNlc3Npb25TZXJ2aWNlMiBpbnN0YW5jZSkgewotICAgICAgICBpZiAoREVCVUcpIHsKLSAgICAgICAgICAgIExvZy5kKFRBRywgIk1lZGlhU2Vzc2lvblNlcnZpY2UySW1wbCgiICsgaW5zdGFuY2UgKyAiKSIpOwotICAgICAgICB9Ci0gICAgICAgIG1JbnN0YW5jZSA9IGluc3RhbmNlOwotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyBNZWRpYVNlc3Npb24yIGdldFNlc3Npb25faW1wbCgpIHsKLSAgICAgICAgcmV0dXJuIGdldFNlc3Npb24oKTsKLSAgICB9Ci0KLSAgICBNZWRpYVNlc3Npb24yIGdldFNlc3Npb24oKSB7Ci0gICAgICAgIHN5bmNocm9uaXplZCAobUxvY2spIHsKLSAgICAgICAgICAgIHJldHVybiBtU2Vzc2lvbjsKLSAgICAgICAgfQotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyBNZWRpYU5vdGlmaWNhdGlvbiBvblVwZGF0ZU5vdGlmaWNhdGlvbl9pbXBsKCkgewotICAgICAgICAvLyBQcm92aWRlIGRlZmF1bHQgbm90aWZpY2F0aW9uIFVJIGxhdGVyLgotICAgICAgICByZXR1cm4gbnVsbDsKLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgdm9pZCBvbkNyZWF0ZV9pbXBsKCkgewotICAgICAgICBtTm90aWZpY2F0aW9uTWFuYWdlciA9IChOb3RpZmljYXRpb25NYW5hZ2VyKSBtSW5zdGFuY2UuZ2V0U3lzdGVtU2VydmljZSgKLSAgICAgICAgICAgICAgICBOT1RJRklDQVRJT05fU0VSVklDRSk7Ci0gICAgICAgIG1TdGFydFNlbGZJbnRlbnQgPSBuZXcgSW50ZW50KG1JbnN0YW5jZSwgbUluc3RhbmNlLmdldENsYXNzKCkpOwotCi0gICAgICAgIFNlc3Npb25Ub2tlbjIgdG9rZW4gPSBuZXcgU2Vzc2lvblRva2VuMihtSW5zdGFuY2UsIG1JbnN0YW5jZS5nZXRQYWNrYWdlTmFtZSgpLAotICAgICAgICAgICAgICAgIG1JbnN0YW5jZS5nZXRDbGFzcygpLmdldE5hbWUoKSk7Ci0gICAgICAgIGlmICh0b2tlbi5nZXRUeXBlKCkgIT0gZ2V0U2Vzc2lvblR5cGUoKSkgewotICAgICAgICAgICAgdGhyb3cgbmV3IFJ1bnRpbWVFeGNlcHRpb24oIkV4cGVjdGVkIHNlc3Npb24gc2VydmljZSwgYnV0IHdhcyAiICsgdG9rZW4uZ2V0VHlwZSgpKTsKLSAgICAgICAgfQotICAgICAgICBtU2Vzc2lvbiA9IG1JbnN0YW5jZS5vbkNyZWF0ZVNlc3Npb24odG9rZW4uZ2V0SWQoKSk7Ci0gICAgICAgIGlmIChtU2Vzc2lvbiA9PSBudWxsIHx8ICF0b2tlbi5nZXRJZCgpLmVxdWFscyhtU2Vzc2lvbi5nZXRUb2tlbigpLmdldElkKCkpKSB7Ci0gICAgICAgICAgICB0aHJvdyBuZXcgUnVudGltZUV4Y2VwdGlvbigiRXhwZWN0ZWQgc2Vzc2lvbiB3aXRoIGlkICIgKyB0b2tlbi5nZXRJZCgpCi0gICAgICAgICAgICAgICAgICAgICsgIiwgYnV0IGdvdCAiICsgbVNlc3Npb24pOwotICAgICAgICB9Ci0gICAgICAgIC8vIFRPRE8oamFld2FuKTogVW5jb21tZW50IGhlcmUuCi0gICAgICAgIC8vIG1TZXNzaW9uLnJlZ2lzdGVyUGxheWVyRXZlbnRDYWxsYmFjayhtQ2FsbGJhY2ssIG1TZXNzaW9uLmdldEV4ZWN1dG9yKCkpOwotICAgIH0KLQotICAgIEBUb2tlblR5cGUgaW50IGdldFNlc3Npb25UeXBlKCkgewotICAgICAgICByZXR1cm4gU2Vzc2lvblRva2VuMi5UWVBFX1NFU1NJT05fU0VSVklDRTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgSUJpbmRlciBvbkJpbmRfaW1wbChJbnRlbnQgaW50ZW50KSB7Ci0gICAgICAgIGlmIChNZWRpYVNlc3Npb25TZXJ2aWNlMi5TRVJWSUNFX0lOVEVSRkFDRS5lcXVhbHMoaW50ZW50LmdldEFjdGlvbigpKSkgewotICAgICAgICAgICAgcmV0dXJuICgoTWVkaWFTZXNzaW9uMkltcGwpIG1TZXNzaW9uLmdldFByb3ZpZGVyKCkpLmdldFNlc3Npb25TdHViKCkuYXNCaW5kZXIoKTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gbnVsbDsKLSAgICB9Ci0KLSAgICBwcml2YXRlIHZvaWQgdXBkYXRlTm90aWZpY2F0aW9uKGludCBwbGF5ZXJTdGF0ZSkgewotICAgICAgICBNZWRpYU5vdGlmaWNhdGlvbiBtZWRpYU5vdGlmaWNhdGlvbiA9IG1JbnN0YW5jZS5vblVwZGF0ZU5vdGlmaWNhdGlvbigpOwotICAgICAgICBpZiAobWVkaWFOb3RpZmljYXRpb24gPT0gbnVsbCkgewotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgICAgIHN3aXRjaChwbGF5ZXJTdGF0ZSkgewotICAgICAgICAgICAgY2FzZSBNZWRpYVBsYXllckJhc2UuUExBWUVSX1NUQVRFX1BMQVlJTkc6Ci0gICAgICAgICAgICAgICAgaWYgKCFtSXNSdW5uaW5nRm9yZWdyb3VuZCkgewotICAgICAgICAgICAgICAgICAgICBtSXNSdW5uaW5nRm9yZWdyb3VuZCA9IHRydWU7Ci0gICAgICAgICAgICAgICAgICAgIG1JbnN0YW5jZS5zdGFydEZvcmVncm91bmRTZXJ2aWNlKG1TdGFydFNlbGZJbnRlbnQpOwotICAgICAgICAgICAgICAgICAgICBtSW5zdGFuY2Uuc3RhcnRGb3JlZ3JvdW5kKG1lZGlhTm90aWZpY2F0aW9uLmdldE5vdGlmaWNhdGlvbklkKCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVkaWFOb3RpZmljYXRpb24uZ2V0Tm90aWZpY2F0aW9uKCkpOwotICAgICAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgY2FzZSBNZWRpYVBsYXllckJhc2UuUExBWUVSX1NUQVRFX0lETEU6Ci0gICAgICAgICAgICBjYXNlIE1lZGlhUGxheWVyQmFzZS5QTEFZRVJfU1RBVEVfRVJST1I6Ci0gICAgICAgICAgICAgICAgaWYgKG1Jc1J1bm5pbmdGb3JlZ3JvdW5kKSB7Ci0gICAgICAgICAgICAgICAgICAgIG1Jc1J1bm5pbmdGb3JlZ3JvdW5kID0gZmFsc2U7Ci0gICAgICAgICAgICAgICAgICAgIG1JbnN0YW5jZS5zdG9wRm9yZWdyb3VuZCh0cnVlKTsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBtTm90aWZpY2F0aW9uTWFuYWdlci5ub3RpZnkobWVkaWFOb3RpZmljYXRpb24uZ2V0Tm90aWZpY2F0aW9uSWQoKSwKLSAgICAgICAgICAgICAgICBtZWRpYU5vdGlmaWNhdGlvbi5nZXROb3RpZmljYXRpb24oKSk7Ci0gICAgfQotCi0gICAgcHJpdmF0ZSBjbGFzcyBTZXNzaW9uU2VydmljZUV2ZW50Q2FsbGJhY2sgZXh0ZW5kcyBQbGF5ZXJFdmVudENhbGxiYWNrIHsKLSAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgIHB1YmxpYyB2b2lkIG9uUGxheWVyU3RhdGVDaGFuZ2VkKE1lZGlhUGxheWVyQmFzZSBwbGF5ZXIsIGludCBzdGF0ZSkgewotICAgICAgICAgICAgLy8gVE9ETzogSW1wbGVtZW50IHRoaXMKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAgIH0KLQotICAgIHB1YmxpYyBzdGF0aWMgY2xhc3MgTWVkaWFOb3RpZmljYXRpb25JbXBsIGltcGxlbWVudHMgTWVkaWFOb3RpZmljYXRpb25Qcm92aWRlciB7Ci0gICAgICAgIHByaXZhdGUgaW50IG1Ob3RpZmljYXRpb25JZDsKLSAgICAgICAgcHJpdmF0ZSBOb3RpZmljYXRpb24gbU5vdGlmaWNhdGlvbjsKLQotICAgICAgICBwdWJsaWMgTWVkaWFOb3RpZmljYXRpb25JbXBsKE1lZGlhTm90aWZpY2F0aW9uIGluc3RhbmNlLCBpbnQgbm90aWZpY2F0aW9uSWQsCi0gICAgICAgICAgICAgICAgTm90aWZpY2F0aW9uIG5vdGlmaWNhdGlvbikgewotICAgICAgICAgICAgaWYgKG5vdGlmaWNhdGlvbiA9PSBudWxsKSB7Ci0gICAgICAgICAgICAgICAgdGhyb3cgbmV3IElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbigibm90aWZpY2F0aW9uIHNob3VsZG4ndCBiZSBudWxsIik7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBtTm90aWZpY2F0aW9uSWQgPSBub3RpZmljYXRpb25JZDsKLSAgICAgICAgICAgIG1Ob3RpZmljYXRpb24gPSBub3RpZmljYXRpb247Ci0gICAgICAgIH0KLQotICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgcHVibGljIGludCBnZXROb3RpZmljYXRpb25JZF9pbXBsKCkgewotICAgICAgICAgICAgcmV0dXJuIG1Ob3RpZmljYXRpb25JZDsKLSAgICAgICAgfQotCi0gICAgICAgIEBPdmVycmlkZQotICAgICAgICBwdWJsaWMgTm90aWZpY2F0aW9uIGdldE5vdGlmaWNhdGlvbl9pbXBsKCkgewotICAgICAgICAgICAgcmV0dXJuIG1Ob3RpZmljYXRpb247Ci0gICAgICAgIH0KLSAgICB9Ci19CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9NZWRpYUNvbXBvbmVudHMvc3JjL2NvbS9hbmRyb2lkL21lZGlhL1JhdGluZzJJbXBsLmphdmEgYi9wYWNrYWdlcy9NZWRpYUNvbXBvbmVudHMvc3JjL2NvbS9hbmRyb2lkL21lZGlhL1JhdGluZzJJbXBsLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQ1NTgxMjkuLjAwMDAwMDAKLS0tIGEvcGFja2FnZXMvTWVkaWFDb21wb25lbnRzL3NyYy9jb20vYW5kcm9pZC9tZWRpYS9SYXRpbmcySW1wbC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTkxICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgMjAxOCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0Ci0gKgotICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7Ci0gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCi0gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLSAqCi0gKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotICoKLSAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKLSAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCi0gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KLSAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKLSAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgotICovCi0KLXBhY2thZ2UgY29tLmFuZHJvaWQubWVkaWE7Ci0KLWltcG9ydCBzdGF0aWMgYW5kcm9pZC5tZWRpYS5SYXRpbmcyLio7Ci0KLWltcG9ydCBhbmRyb2lkLmNvbnRlbnQuQ29udGV4dDsKLWltcG9ydCBhbmRyb2lkLm1lZGlhLlJhdGluZzI7Ci1pbXBvcnQgYW5kcm9pZC5tZWRpYS5SYXRpbmcyLlN0eWxlOwotaW1wb3J0IGFuZHJvaWQubWVkaWEudXBkYXRlLlJhdGluZzJQcm92aWRlcjsKLWltcG9ydCBhbmRyb2lkLm9zLkJ1bmRsZTsKLWltcG9ydCBhbmRyb2lkLnV0aWwuTG9nOwotCi1pbXBvcnQgamF2YS51dGlsLk9iamVjdHM7Ci0KLXB1YmxpYyBmaW5hbCBjbGFzcyBSYXRpbmcySW1wbCBpbXBsZW1lbnRzIFJhdGluZzJQcm92aWRlciB7Ci0gICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFRBRyA9ICJSYXRpbmcyIjsKLQotICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBLRVlfU1RZTEUgPSAiYW5kcm9pZC5tZWRpYS5yYXRpbmcyLnN0eWxlIjsKLSAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgS0VZX1ZBTFVFID0gImFuZHJvaWQubWVkaWEucmF0aW5nMi52YWx1ZSI7Ci0KLSAgICBwcml2YXRlIGZpbmFsIHN0YXRpYyBmbG9hdCBSQVRJTkdfTk9UX1JBVEVEID0gLTEuMGY7Ci0KLSAgICBwcml2YXRlIGZpbmFsIFJhdGluZzIgbUluc3RhbmNlOwotICAgIHByaXZhdGUgZmluYWwgaW50IG1SYXRpbmdTdHlsZTsKLSAgICBwcml2YXRlIGZpbmFsIGZsb2F0IG1SYXRpbmdWYWx1ZTsKLQotICAgIHByaXZhdGUgUmF0aW5nMkltcGwoQFN0eWxlIGludCByYXRpbmdTdHlsZSwgZmxvYXQgcmF0aW5nKSB7Ci0gICAgICAgIG1SYXRpbmdTdHlsZSA9IHJhdGluZ1N0eWxlOwotICAgICAgICBtUmF0aW5nVmFsdWUgPSByYXRpbmc7Ci0gICAgICAgIG1JbnN0YW5jZSA9IG5ldyBSYXRpbmcyKHRoaXMpOwotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyBTdHJpbmcgdG9TdHJpbmdfaW1wbCgpIHsKLSAgICAgICAgcmV0dXJuICJSYXRpbmcyOnN0eWxlPSIgKyBtUmF0aW5nU3R5bGUgKyAiIHJhdGluZz0iCi0gICAgICAgICAgICAgICAgKyAobVJhdGluZ1ZhbHVlIDwgMC4wZiA/ICJ1bnJhdGVkIiA6IFN0cmluZy52YWx1ZU9mKG1SYXRpbmdWYWx1ZSkpOwotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyBib29sZWFuIGVxdWFsc19pbXBsKE9iamVjdCBvYmopIHsKLSAgICAgICAgaWYgKCEob2JqIGluc3RhbmNlb2YgUmF0aW5nMikpIHsKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgfQotICAgICAgICBSYXRpbmcySW1wbCBvdGhlciA9IChSYXRpbmcySW1wbCkgKChSYXRpbmcyKSBvYmopLmdldFByb3ZpZGVyKCk7Ci0gICAgICAgIHJldHVybiBtUmF0aW5nU3R5bGUgPT0gb3RoZXIubVJhdGluZ1N0eWxlCi0gICAgICAgICAgICAgICAgJiYgbVJhdGluZ1ZhbHVlID09IG90aGVyLm1SYXRpbmdWYWx1ZTsKLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgaW50IGhhc2hDb2RlX2ltcGwoKSB7Ci0gICAgICAgIHJldHVybiBPYmplY3RzLmhhc2gobVJhdGluZ1N0eWxlLCBtUmF0aW5nVmFsdWUpOwotICAgIH0KLQotICAgIFJhdGluZzIgZ2V0SW5zdGFuY2UoKSB7Ci0gICAgICAgIHJldHVybiBtSW5zdGFuY2U7Ci0gICAgfQotCi0gICAgcHVibGljIHN0YXRpYyBSYXRpbmcyIGZyb21CdW5kbGVfaW1wbChCdW5kbGUgYnVuZGxlKSB7Ci0gICAgICAgIGlmIChidW5kbGUgPT0gbnVsbCkgewotICAgICAgICAgICAgcmV0dXJuIG51bGw7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIG5ldyBSYXRpbmcySW1wbChidW5kbGUuZ2V0SW50KEtFWV9TVFlMRSksIGJ1bmRsZS5nZXRGbG9hdChLRVlfVkFMVUUpKS5nZXRJbnN0YW5jZSgpOwotICAgIH0KLQotICAgIHB1YmxpYyBCdW5kbGUgdG9CdW5kbGVfaW1wbCgpIHsKLSAgICAgICAgQnVuZGxlIGJ1bmRsZSA9IG5ldyBCdW5kbGUoKTsKLSAgICAgICAgYnVuZGxlLnB1dEludChLRVlfU1RZTEUsIG1SYXRpbmdTdHlsZSk7Ci0gICAgICAgIGJ1bmRsZS5wdXRGbG9hdChLRVlfVkFMVUUsIG1SYXRpbmdWYWx1ZSk7Ci0gICAgICAgIHJldHVybiBidW5kbGU7Ci0gICAgfQotCi0gICAgcHVibGljIHN0YXRpYyBSYXRpbmcyIG5ld1VucmF0ZWRSYXRpbmdfaW1wbChAU3R5bGUgaW50IHJhdGluZ1N0eWxlKSB7Ci0gICAgICAgIHN3aXRjaChyYXRpbmdTdHlsZSkgewotICAgICAgICAgICAgY2FzZSBSQVRJTkdfSEVBUlQ6Ci0gICAgICAgICAgICBjYXNlIFJBVElOR19USFVNQl9VUF9ET1dOOgotICAgICAgICAgICAgY2FzZSBSQVRJTkdfM19TVEFSUzoKLSAgICAgICAgICAgIGNhc2UgUkFUSU5HXzRfU1RBUlM6Ci0gICAgICAgICAgICBjYXNlIFJBVElOR181X1NUQVJTOgotICAgICAgICAgICAgY2FzZSBSQVRJTkdfUEVSQ0VOVEFHRToKLSAgICAgICAgICAgICAgICByZXR1cm4gbmV3IFJhdGluZzJJbXBsKHJhdGluZ1N0eWxlLCBSQVRJTkdfTk9UX1JBVEVEKS5nZXRJbnN0YW5jZSgpOwotICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDsKLSAgICAgICAgfQotICAgIH0KLQotICAgIHB1YmxpYyBzdGF0aWMgUmF0aW5nMiBuZXdIZWFydFJhdGluZ19pbXBsKGJvb2xlYW4gaGFzSGVhcnQpIHsKLSAgICAgICAgcmV0dXJuIG5ldyBSYXRpbmcySW1wbChSQVRJTkdfSEVBUlQsIGhhc0hlYXJ0ID8gMS4wZiA6IDAuMGYpLmdldEluc3RhbmNlKCk7Ci0gICAgfQotCi0gICAgcHVibGljIHN0YXRpYyBSYXRpbmcyIG5ld1RodW1iUmF0aW5nX2ltcGwoYm9vbGVhbiB0aHVtYklzVXApIHsKLSAgICAgICAgcmV0dXJuIG5ldyBSYXRpbmcySW1wbChSQVRJTkdfVEhVTUJfVVBfRE9XTiwgdGh1bWJJc1VwID8gMS4wZiA6IDAuMGYpLmdldEluc3RhbmNlKCk7Ci0gICAgfQotCi0gICAgcHVibGljIHN0YXRpYyBSYXRpbmcyIG5ld1N0YXJSYXRpbmdfaW1wbChpbnQgc3RhclJhdGluZ1N0eWxlLCBmbG9hdCBzdGFyUmF0aW5nKSB7Ci0gICAgICAgIGZsb2F0IG1heFJhdGluZyA9IFJBVElOR19OT1RfUkFURUQ7Ci0gICAgICAgIHN3aXRjaChzdGFyUmF0aW5nU3R5bGUpIHsKLSAgICAgICAgICAgIGNhc2UgUkFUSU5HXzNfU1RBUlM6Ci0gICAgICAgICAgICAgICAgbWF4UmF0aW5nID0gMy4wZjsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGNhc2UgUkFUSU5HXzRfU1RBUlM6Ci0gICAgICAgICAgICAgICAgbWF4UmF0aW5nID0gNC4wZjsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGNhc2UgUkFUSU5HXzVfU1RBUlM6Ci0gICAgICAgICAgICAgICAgbWF4UmF0aW5nID0gNS4wZjsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAgTG9nLmUoVEFHLCAiSW52YWxpZCByYXRpbmcgc3R5bGUgKCIgKyBzdGFyUmF0aW5nU3R5bGUgKyAiKSBmb3IgYSBzdGFyIHJhdGluZyIpOwotICAgICAgICAgICAgICAgIHJldHVybiBudWxsOwotICAgICAgICB9Ci0gICAgICAgIGlmICgoc3RhclJhdGluZyA8IDAuMGYpIHx8IChzdGFyUmF0aW5nID4gbWF4UmF0aW5nKSkgewotICAgICAgICAgICAgTG9nLmUoVEFHLCAiVHJ5aW5nIHRvIHNldCBvdXQgb2YgcmFuZ2Ugc3Rhci1iYXNlZCByYXRpbmciKTsKLSAgICAgICAgICAgIHJldHVybiBudWxsOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiBuZXcgUmF0aW5nMkltcGwoc3RhclJhdGluZ1N0eWxlLCBzdGFyUmF0aW5nKS5nZXRJbnN0YW5jZSgpOwotICAgIH0KLQotICAgIHB1YmxpYyBzdGF0aWMgUmF0aW5nMiBuZXdQZXJjZW50YWdlUmF0aW5nX2ltcGwoZmxvYXQgcGVyY2VudCkgewotICAgICAgICBpZiAoKHBlcmNlbnQgPCAwLjBmKSB8fCAocGVyY2VudCA+IDEwMC4wZikpIHsKLSAgICAgICAgICAgIExvZy5lKFRBRywgIkludmFsaWQgcGVyY2VudGFnZS1iYXNlZCByYXRpbmcgdmFsdWUiKTsKLSAgICAgICAgICAgIHJldHVybiBudWxsOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgcmV0dXJuIG5ldyBSYXRpbmcySW1wbChSQVRJTkdfUEVSQ0VOVEFHRSwgcGVyY2VudCkuZ2V0SW5zdGFuY2UoKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyBib29sZWFuIGlzUmF0ZWRfaW1wbCgpIHsKLSAgICAgICAgcmV0dXJuIG1SYXRpbmdWYWx1ZSA+PSAwLjBmOwotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyBpbnQgZ2V0UmF0aW5nU3R5bGVfaW1wbCgpIHsKLSAgICAgICAgcmV0dXJuIG1SYXRpbmdTdHlsZTsKLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgYm9vbGVhbiBoYXNIZWFydF9pbXBsKCkgewotICAgICAgICBpZiAobVJhdGluZ1N0eWxlICE9IFJBVElOR19IRUFSVCkgewotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgcmV0dXJuIChtUmF0aW5nVmFsdWUgPT0gMS4wZik7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgYm9vbGVhbiBpc1RodW1iVXBfaW1wbCgpIHsKLSAgICAgICAgaWYgKG1SYXRpbmdTdHlsZSAhPSBSQVRJTkdfVEhVTUJfVVBfRE9XTikgewotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgcmV0dXJuIChtUmF0aW5nVmFsdWUgPT0gMS4wZik7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgZmxvYXQgZ2V0U3RhclJhdGluZ19pbXBsKCkgewotICAgICAgICBzd2l0Y2ggKG1SYXRpbmdTdHlsZSkgewotICAgICAgICAgICAgY2FzZSBSQVRJTkdfM19TVEFSUzoKLSAgICAgICAgICAgIGNhc2UgUkFUSU5HXzRfU1RBUlM6Ci0gICAgICAgICAgICBjYXNlIFJBVElOR181X1NUQVJTOgotICAgICAgICAgICAgICAgIGlmIChtSW5zdGFuY2UuaXNSYXRlZCgpKSB7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBtUmF0aW5nVmFsdWU7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgICByZXR1cm4gLTEuMGY7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgZmxvYXQgZ2V0UGVyY2VudFJhdGluZ19pbXBsKCkgewotICAgICAgICBpZiAoKG1SYXRpbmdTdHlsZSAhPSBSQVRJTkdfUEVSQ0VOVEFHRSkgfHwgIW1JbnN0YW5jZS5pc1JhdGVkKCkpIHsKLSAgICAgICAgICAgIHJldHVybiAtMS4wZjsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIHJldHVybiBtUmF0aW5nVmFsdWU7Ci0gICAgICAgIH0KLSAgICB9Ci19CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9NZWRpYUNvbXBvbmVudHMvc3JjL2NvbS9hbmRyb2lkL21lZGlhL1JvdXRlUGxheWVyLmphdmEgYi9wYWNrYWdlcy9NZWRpYUNvbXBvbmVudHMvc3JjL2NvbS9hbmRyb2lkL21lZGlhL1JvdXRlUGxheWVyLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDk0NTBkMzQuLjAwMDAwMDAKLS0tIGEvcGFja2FnZXMvTWVkaWFDb21wb25lbnRzL3NyYy9jb20vYW5kcm9pZC9tZWRpYS9Sb3V0ZVBsYXllci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTY5ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgMjAxOCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0Ci0gKgotICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7Ci0gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCi0gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLSAqCi0gKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotICoKLSAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKLSAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCi0gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KLSAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKLSAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgotICovCi0KLXBhY2thZ2UgY29tLmFuZHJvaWQubWVkaWE7Ci0KLWltcG9ydCBhbmRyb2lkLmNvbnRlbnQuQ29udGV4dDsKLWltcG9ydCBhbmRyb2lkLm1lZGlhLkRhdGFTb3VyY2VEZXNjOwotaW1wb3J0IGFuZHJvaWQubWVkaWEuc2Vzc2lvbi5NZWRpYVNlc3Npb247Ci1pbXBvcnQgYW5kcm9pZC5tZWRpYS5zZXNzaW9uLlBsYXliYWNrU3RhdGU7Ci1pbXBvcnQgYW5kcm9pZC5uZXQuVXJpOwotaW1wb3J0IGFuZHJvaWQub3MuQnVpbGQ7Ci1pbXBvcnQgYW5kcm9pZC5vcy5CdW5kbGU7Ci1pbXBvcnQgYW5kcm9pZC5zdXBwb3J0LmFubm90YXRpb24uUmVxdWlyZXNBcGk7Ci0KLWltcG9ydCBjb20uYW5kcm9pZC5zdXBwb3J0Lm1lZGlhcm91dGVyLm1lZGlhLk1lZGlhSXRlbVN0YXR1czsKLWltcG9ydCBjb20uYW5kcm9pZC5zdXBwb3J0Lm1lZGlhcm91dGVyLm1lZGlhLk1lZGlhUm91dGVyOwotaW1wb3J0IGNvbS5hbmRyb2lkLnN1cHBvcnQubWVkaWFyb3V0ZXIubWVkaWEuTWVkaWFTZXNzaW9uU3RhdHVzOwotaW1wb3J0IGNvbS5hbmRyb2lkLnN1cHBvcnQubWVkaWFyb3V0ZXIubWVkaWEuUmVtb3RlUGxheWJhY2tDbGllbnQ7Ci1pbXBvcnQgY29tLmFuZHJvaWQuc3VwcG9ydC5tZWRpYXJvdXRlci5tZWRpYS5SZW1vdGVQbGF5YmFja0NsaWVudC5JdGVtQWN0aW9uQ2FsbGJhY2s7Ci1pbXBvcnQgY29tLmFuZHJvaWQuc3VwcG9ydC5tZWRpYXJvdXRlci5tZWRpYS5SZW1vdGVQbGF5YmFja0NsaWVudC5TZXNzaW9uQWN0aW9uQ2FsbGJhY2s7Ci1pbXBvcnQgY29tLmFuZHJvaWQuc3VwcG9ydC5tZWRpYXJvdXRlci5tZWRpYS5SZW1vdGVQbGF5YmFja0NsaWVudC5TdGF0dXNDYWxsYmFjazsKLQotaW1wb3J0IGphdmEudXRpbC5NYXA7Ci0KLUBSZXF1aXJlc0FwaShhcGkgPSBCdWlsZC5WRVJTSU9OX0NPREVTLkxPTExJUE9QKQotcHVibGljIGNsYXNzIFJvdXRlUGxheWVyIGV4dGVuZHMgTWVkaWFTZXNzaW9uLkNhbGxiYWNrIHsKLSAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGxvbmcgUExBWUJBQ0tfQUNUSU9OUyA9IFBsYXliYWNrU3RhdGUuQUNUSU9OX1BBVVNFCi0gICAgICAgICAgICB8IFBsYXliYWNrU3RhdGUuQUNUSU9OX1BMQVkgfCBQbGF5YmFja1N0YXRlLkFDVElPTl9TRUVLX1RPCi0gICAgICAgICAgICB8IFBsYXliYWNrU3RhdGUuQUNUSU9OX0ZBU1RfRk9SV0FSRCB8IFBsYXliYWNrU3RhdGUuQUNUSU9OX1JFV0lORDsKLQotICAgIHByaXZhdGUgUmVtb3RlUGxheWJhY2tDbGllbnQgbUNsaWVudDsKLSAgICBwcml2YXRlIFN0cmluZyBtU2Vzc2lvbklkOwotICAgIHByaXZhdGUgU3RyaW5nIG1JdGVtSWQ7Ci0gICAgcHJpdmF0ZSBQbGF5ZXJFdmVudENhbGxiYWNrIG1DYWxsYmFjazsKLQotICAgIHByaXZhdGUgU3RhdHVzQ2FsbGJhY2sgbVN0YXR1c0NhbGxiYWNrID0gbmV3IFN0YXR1c0NhbGxiYWNrKCkgewotICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgcHVibGljIHZvaWQgb25JdGVtU3RhdHVzQ2hhbmdlZChCdW5kbGUgZGF0YSwKLSAgICAgICAgICAgICAgICBTdHJpbmcgc2Vzc2lvbklkLCBNZWRpYVNlc3Npb25TdGF0dXMgc2Vzc2lvblN0YXR1cywKLSAgICAgICAgICAgICAgICBTdHJpbmcgaXRlbUlkLCBNZWRpYUl0ZW1TdGF0dXMgaXRlbVN0YXR1cykgewotICAgICAgICAgICAgdXBkYXRlU2Vzc2lvblN0YXR1cyhzZXNzaW9uSWQsIHNlc3Npb25TdGF0dXMpOwotICAgICAgICAgICAgdXBkYXRlSXRlbVN0YXR1cyhpdGVtSWQsIGl0ZW1TdGF0dXMpOwotICAgICAgICB9Ci0gICAgfTsKLQotICAgIHB1YmxpYyBSb3V0ZVBsYXllcihDb250ZXh0IGNvbnRleHQsIE1lZGlhUm91dGVyLlJvdXRlSW5mbyByb3V0ZSkgewotICAgICAgICBtQ2xpZW50ID0gbmV3IFJlbW90ZVBsYXliYWNrQ2xpZW50KGNvbnRleHQsIHJvdXRlKTsKLSAgICAgICAgbUNsaWVudC5zZXRTdGF0dXNDYWxsYmFjayhtU3RhdHVzQ2FsbGJhY2spOwotICAgICAgICBtQ2xpZW50LnN0YXJ0U2Vzc2lvbihudWxsLCBuZXcgU2Vzc2lvbkFjdGlvbkNhbGxiYWNrKCkgewotICAgICAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgICAgICBwdWJsaWMgdm9pZCBvblJlc3VsdChCdW5kbGUgZGF0YSwKLSAgICAgICAgICAgICAgICAgICAgU3RyaW5nIHNlc3Npb25JZCwgTWVkaWFTZXNzaW9uU3RhdHVzIHNlc3Npb25TdGF0dXMpIHsKLSAgICAgICAgICAgICAgICB1cGRhdGVTZXNzaW9uU3RhdHVzKHNlc3Npb25JZCwgc2Vzc2lvblN0YXR1cyk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0pOwotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyB2b2lkIG9uUGxheSgpIHsKLSAgICAgICAgbUNsaWVudC5yZXN1bWUobnVsbCwgbmV3IFNlc3Npb25BY3Rpb25DYWxsYmFjaygpIHsKLSAgICAgICAgICAgIEBPdmVycmlkZQotICAgICAgICAgICAgcHVibGljIHZvaWQgb25SZXN1bHQoQnVuZGxlIGRhdGEsCi0gICAgICAgICAgICAgICAgICAgIFN0cmluZyBzZXNzaW9uSWQsIE1lZGlhU2Vzc2lvblN0YXR1cyBzZXNzaW9uU3RhdHVzKSB7Ci0gICAgICAgICAgICAgICAgdXBkYXRlU2Vzc2lvblN0YXR1cyhzZXNzaW9uSWQsIHNlc3Npb25TdGF0dXMpOwotICAgICAgICAgICAgfQotICAgICAgICB9KTsKLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgdm9pZCBvblBhdXNlKCkgewotICAgICAgICBtQ2xpZW50LnBhdXNlKG51bGwsIG5ldyBTZXNzaW9uQWN0aW9uQ2FsbGJhY2soKSB7Ci0gICAgICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgICAgIHB1YmxpYyB2b2lkIG9uUmVzdWx0KEJ1bmRsZSBkYXRhLAotICAgICAgICAgICAgICAgICAgICBTdHJpbmcgc2Vzc2lvbklkLCBNZWRpYVNlc3Npb25TdGF0dXMgc2Vzc2lvblN0YXR1cykgewotICAgICAgICAgICAgICAgIHVwZGF0ZVNlc3Npb25TdGF0dXMoc2Vzc2lvbklkLCBzZXNzaW9uU3RhdHVzKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfSk7Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIHZvaWQgb25TZWVrVG8obG9uZyBwb3MpIHsKLSAgICAgICAgbUNsaWVudC5zZWVrKG1JdGVtSWQsIHBvcywgbnVsbCwgbmV3IEl0ZW1BY3Rpb25DYWxsYmFjaygpIHsKLSAgICAgICAgICAgIEBPdmVycmlkZQotICAgICAgICAgICAgcHVibGljIHZvaWQgb25SZXN1bHQoQnVuZGxlIGRhdGEsCi0gICAgICAgICAgICAgICAgICAgIFN0cmluZyBzZXNzaW9uSWQsIE1lZGlhU2Vzc2lvblN0YXR1cyBzZXNzaW9uU3RhdHVzLAotICAgICAgICAgICAgICAgICAgICBTdHJpbmcgaXRlbUlkLCBNZWRpYUl0ZW1TdGF0dXMgaXRlbVN0YXR1cykgewotICAgICAgICAgICAgICAgIHVwZGF0ZVNlc3Npb25TdGF0dXMoc2Vzc2lvbklkLCBzZXNzaW9uU3RhdHVzKTsKLSAgICAgICAgICAgICAgICB1cGRhdGVJdGVtU3RhdHVzKGl0ZW1JZCwgaXRlbVN0YXR1cyk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0pOwotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyB2b2lkIG9uU3RvcCgpIHsKLSAgICAgICAgbUNsaWVudC5zdG9wKG51bGwsIG5ldyBTZXNzaW9uQWN0aW9uQ2FsbGJhY2soKSB7Ci0gICAgICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgICAgIHB1YmxpYyB2b2lkIG9uUmVzdWx0KEJ1bmRsZSBkYXRhLAotICAgICAgICAgICAgICAgICAgICBTdHJpbmcgc2Vzc2lvbklkLCBNZWRpYVNlc3Npb25TdGF0dXMgc2Vzc2lvblN0YXR1cykgewotICAgICAgICAgICAgICAgIHVwZGF0ZVNlc3Npb25TdGF0dXMoc2Vzc2lvbklkLCBzZXNzaW9uU3RhdHVzKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfSk7Ci0gICAgfQotCi0gICAgcHVibGljIHZvaWQgc2V0UGxheWVyRXZlbnRDYWxsYmFjayhQbGF5ZXJFdmVudENhbGxiYWNrIGNhbGxiYWNrKSB7Ci0gICAgICAgIG1DYWxsYmFjayA9IGNhbGxiYWNrOwotICAgIH0KLQotICAgIHB1YmxpYyB2b2lkIG9wZW5WaWRlbyhEYXRhU291cmNlRGVzYyBkc2QpIHsKLSAgICAgICAgbUNsaWVudC5wbGF5KGRzZC5nZXRVcmkoKSwgInZpZGVvL21wNCIsIG51bGwsIDAsIG51bGwsIG5ldyBJdGVtQWN0aW9uQ2FsbGJhY2soKSB7Ci0gICAgICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgICAgIHB1YmxpYyB2b2lkIG9uUmVzdWx0KEJ1bmRsZSBkYXRhLAotICAgICAgICAgICAgICAgICAgICBTdHJpbmcgc2Vzc2lvbklkLCBNZWRpYVNlc3Npb25TdGF0dXMgc2Vzc2lvblN0YXR1cywKLSAgICAgICAgICAgICAgICAgICAgU3RyaW5nIGl0ZW1JZCwgTWVkaWFJdGVtU3RhdHVzIGl0ZW1TdGF0dXMpIHsKLSAgICAgICAgICAgICAgICB1cGRhdGVTZXNzaW9uU3RhdHVzKHNlc3Npb25JZCwgc2Vzc2lvblN0YXR1cyk7Ci0gICAgICAgICAgICAgICAgdXBkYXRlSXRlbVN0YXR1cyhpdGVtSWQsIGl0ZW1TdGF0dXMpOwotICAgICAgICAgICAgICAgIHBsYXlJbnRlcm5hbChkc2QuZ2V0VXJpKCkpOwotICAgICAgICAgICAgfQotICAgICAgICB9KTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgdm9pZCByZWxlYXNlKCkgewotICAgICAgICBpZiAobUNsaWVudCAhPSBudWxsKSB7Ci0gICAgICAgICAgICBtQ2xpZW50LnJlbGVhc2UoKTsKLSAgICAgICAgICAgIG1DbGllbnQgPSBudWxsOwotICAgICAgICB9Ci0gICAgICAgIGlmIChtQ2FsbGJhY2sgIT0gbnVsbCkgewotICAgICAgICAgICAgbUNhbGxiYWNrID0gbnVsbDsKLSAgICAgICAgfQotICAgIH0KLQotICAgIHByaXZhdGUgdm9pZCBwbGF5SW50ZXJuYWwoVXJpIHVyaSkgewotICAgICAgICBtQ2xpZW50LnBsYXkodXJpLCAidmlkZW8vbXA0IiwgbnVsbCwgMCwgbnVsbCwgbmV3IEl0ZW1BY3Rpb25DYWxsYmFjaygpIHsKLSAgICAgICAgICAgIEBPdmVycmlkZQotICAgICAgICAgICAgcHVibGljIHZvaWQgb25SZXN1bHQoQnVuZGxlIGRhdGEsCi0gICAgICAgICAgICAgICAgICAgIFN0cmluZyBzZXNzaW9uSWQsIE1lZGlhU2Vzc2lvblN0YXR1cyBzZXNzaW9uU3RhdHVzLAotICAgICAgICAgICAgICAgICAgICBTdHJpbmcgaXRlbUlkLCBNZWRpYUl0ZW1TdGF0dXMgaXRlbVN0YXR1cykgewotICAgICAgICAgICAgICAgIHVwZGF0ZVNlc3Npb25TdGF0dXMoc2Vzc2lvbklkLCBzZXNzaW9uU3RhdHVzKTsKLSAgICAgICAgICAgICAgICB1cGRhdGVJdGVtU3RhdHVzKGl0ZW1JZCwgaXRlbVN0YXR1cyk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0pOwotICAgIH0KLQotICAgIHByaXZhdGUgdm9pZCB1cGRhdGVTZXNzaW9uU3RhdHVzKFN0cmluZyBzZXNzaW9uSWQsIE1lZGlhU2Vzc2lvblN0YXR1cyBzZXNzaW9uU3RhdHVzKSB7Ci0gICAgICAgIG1TZXNzaW9uSWQgPSBzZXNzaW9uSWQ7Ci0gICAgfQotCi0gICAgcHJpdmF0ZSB2b2lkIHVwZGF0ZUl0ZW1TdGF0dXMoU3RyaW5nIGl0ZW1JZCwgTWVkaWFJdGVtU3RhdHVzIGl0ZW1TdGF0dXMpIHsKLSAgICAgICAgbUl0ZW1JZCA9IGl0ZW1JZDsKLSAgICAgICAgaWYgKGl0ZW1TdGF0dXMgPT0gbnVsbCB8fCBtQ2FsbGJhY2sgPT0gbnVsbCkgcmV0dXJuOwotICAgICAgICBtQ2FsbGJhY2sub25QbGF5ZXJTdGF0ZUNoYW5nZWQoaXRlbVN0YXR1cyk7Ci0gICAgfQotCi0gICAgcHVibGljIHN0YXRpYyBhYnN0cmFjdCBjbGFzcyBQbGF5ZXJFdmVudENhbGxiYWNrIHsKLSAgICAgICAgcHVibGljIHZvaWQgb25QbGF5ZXJTdGF0ZUNoYW5nZWQoTWVkaWFJdGVtU3RhdHVzIGl0ZW1TdGF0dXMpIHsgfQotICAgIH0KLX0KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL01lZGlhQ29tcG9uZW50cy9zcmMvY29tL2FuZHJvaWQvbWVkaWEvU2Vzc2lvblBsYXlsaXN0QWdlbnQuamF2YSBiL3BhY2thZ2VzL01lZGlhQ29tcG9uZW50cy9zcmMvY29tL2FuZHJvaWQvbWVkaWEvU2Vzc2lvblBsYXlsaXN0QWdlbnQuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMWM1NzBhYS4uMDAwMDAwMAotLS0gYS9wYWNrYWdlcy9NZWRpYUNvbXBvbmVudHMvc3JjL2NvbS9hbmRyb2lkL21lZGlhL1Nlc3Npb25QbGF5bGlzdEFnZW50LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw0OTQgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAyMDE4IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKLSAqCi0gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKLSAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KLSAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotICoKLSAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0gKgotICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQotICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKLSAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgotICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAotICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCi0gKi8KLQotcGFja2FnZSBjb20uYW5kcm9pZC5tZWRpYTsKLQotaW1wb3J0IGFuZHJvaWQuYW5ub3RhdGlvbi5Ob25OdWxsOwotaW1wb3J0IGFuZHJvaWQuYW5ub3RhdGlvbi5OdWxsYWJsZTsKLWltcG9ydCBhbmRyb2lkLm1lZGlhLkRhdGFTb3VyY2VEZXNjOwotaW1wb3J0IGFuZHJvaWQubWVkaWEuTWVkaWFJdGVtMjsKLWltcG9ydCBhbmRyb2lkLm1lZGlhLk1lZGlhTWV0YWRhdGEyOwotaW1wb3J0IGFuZHJvaWQubWVkaWEuTWVkaWFQbGF5ZXJCYXNlOwotaW1wb3J0IGFuZHJvaWQubWVkaWEuTWVkaWFQbGF5ZXJCYXNlLlBsYXllckV2ZW50Q2FsbGJhY2s7Ci1pbXBvcnQgYW5kcm9pZC5tZWRpYS5NZWRpYVBsYXlsaXN0QWdlbnQ7Ci1pbXBvcnQgYW5kcm9pZC5tZWRpYS5NZWRpYVNlc3Npb24yLk9uRGF0YVNvdXJjZU1pc3NpbmdIZWxwZXI7Ci1pbXBvcnQgYW5kcm9pZC51dGlsLkFycmF5TWFwOwotCi1pbXBvcnQgY29tLmFuZHJvaWQuaW50ZXJuYWwuYW5ub3RhdGlvbnMuR3VhcmRlZEJ5OwotaW1wb3J0IGNvbS5hbmRyb2lkLmludGVybmFsLmFubm90YXRpb25zLlZpc2libGVGb3JUZXN0aW5nOwotCi1pbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKLWltcG9ydCBqYXZhLnV0aWwuQ29sbGVjdGlvbnM7Ci1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLk1hcDsKLWltcG9ydCBqYXZhLnV0aWwuY29uY3VycmVudC5UaHJlYWRMb2NhbFJhbmRvbTsKLQotcHVibGljIGNsYXNzIFNlc3Npb25QbGF5bGlzdEFnZW50IGV4dGVuZHMgTWVkaWFQbGF5bGlzdEFnZW50IHsKLSAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgVEFHID0gIlNlc3Npb25QbGF5bGlzdEFnZW50IjsKLSAgICBAVmlzaWJsZUZvclRlc3RpbmcKLSAgICBzdGF0aWMgZmluYWwgaW50IEVORF9PRl9QTEFZTElTVCA9IC0xOwotICAgIEBWaXNpYmxlRm9yVGVzdGluZwotICAgIHN0YXRpYyBmaW5hbCBpbnQgTk9fVkFMSURfSVRFTVMgPSAtMjsKLQotICAgIHByaXZhdGUgZmluYWwgUGxheUl0ZW0gbUVvcFBsYXlJdGVtID0gbmV3IFBsYXlJdGVtKEVORF9PRl9QTEFZTElTVCwgbnVsbCk7Ci0KLSAgICBwcml2YXRlIGZpbmFsIE9iamVjdCBtTG9jayA9IG5ldyBPYmplY3QoKTsKLSAgICBwcml2YXRlIGZpbmFsIE1lZGlhU2Vzc2lvbjJJbXBsIG1TZXNzaW9uSW1wbDsKLSAgICBwcml2YXRlIGZpbmFsIE15UGxheWVyRXZlbnRDYWxsYmFjayBtUGxheWVyQ2FsbGJhY2s7Ci0KLSAgICBAR3VhcmRlZEJ5KCJtTG9jayIpCi0gICAgcHJpdmF0ZSBNZWRpYVBsYXllckJhc2UgbVBsYXllcjsKLSAgICBAR3VhcmRlZEJ5KCJtTG9jayIpCi0gICAgcHJpdmF0ZSBPbkRhdGFTb3VyY2VNaXNzaW5nSGVscGVyIG1Ec21IZWxwZXI7Ci0gICAgLy8gVE9ETzogQ2hlY2sgaWYgaGF2aW5nIHRoZSBzYW1lIGl0ZW0gaXMgb2theSAoYi83NDA5MDc0MSkKLSAgICBAR3VhcmRlZEJ5KCJtTG9jayIpCi0gICAgcHJpdmF0ZSBBcnJheUxpc3Q8TWVkaWFJdGVtMj4gbVBsYXlsaXN0ID0gbmV3IEFycmF5TGlzdDw+KCk7Ci0gICAgQEd1YXJkZWRCeSgibUxvY2siKQotICAgIHByaXZhdGUgQXJyYXlMaXN0PE1lZGlhSXRlbTI+IG1TaHVmZmxlZExpc3QgPSBuZXcgQXJyYXlMaXN0PD4oKTsKLSAgICBAR3VhcmRlZEJ5KCJtTG9jayIpCi0gICAgcHJpdmF0ZSBNYXA8TWVkaWFJdGVtMiwgRGF0YVNvdXJjZURlc2M+IG1JdGVtRHNkTWFwID0gbmV3IEFycmF5TWFwPD4oKTsKLSAgICBAR3VhcmRlZEJ5KCJtTG9jayIpCi0gICAgcHJpdmF0ZSBNZWRpYU1ldGFkYXRhMiBtTWV0YWRhdGE7Ci0gICAgQEd1YXJkZWRCeSgibUxvY2siKQotICAgIHByaXZhdGUgaW50IG1SZXBlYXRNb2RlOwotICAgIEBHdWFyZGVkQnkoIm1Mb2NrIikKLSAgICBwcml2YXRlIGludCBtU2h1ZmZsZU1vZGU7Ci0gICAgQEd1YXJkZWRCeSgibUxvY2siKQotICAgIHByaXZhdGUgUGxheUl0ZW0gbUN1cnJlbnQ7Ci0KLSAgICAvLyBDYWxsZWQgb24gc2Vzc2lvbiBjYWxsYmFjayBleGVjdXRvci4KLSAgICBwcml2YXRlIGNsYXNzIE15UGxheWVyRXZlbnRDYWxsYmFjayBleHRlbmRzIFBsYXllckV2ZW50Q2FsbGJhY2sgewotICAgICAgICBwdWJsaWMgdm9pZCBvbkN1cnJlbnREYXRhU291cmNlQ2hhbmdlZChATm9uTnVsbCBNZWRpYVBsYXllckJhc2UgbXBiLAotICAgICAgICAgICAgICAgIEBOdWxsYWJsZSBEYXRhU291cmNlRGVzYyBkc2QpIHsKLSAgICAgICAgICAgIGlmIChtUGxheWVyICE9IG1wYikgewotICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHN5bmNocm9uaXplZCAobUxvY2spIHsKLSAgICAgICAgICAgICAgICBpZiAoZHNkID09IG51bGwgJiYgbUN1cnJlbnQgIT0gbnVsbCkgewotICAgICAgICAgICAgICAgICAgICBtQ3VycmVudCA9IGdldE5leHRWYWxpZFBsYXlJdGVtTG9ja2VkKG1DdXJyZW50LnNodWZmbGVkSWR4LCAxKTsKLSAgICAgICAgICAgICAgICAgICAgdXBkYXRlQ3VycmVudElmTmVlZGVkTG9ja2VkKCk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotCi0gICAgcHJpdmF0ZSBjbGFzcyBQbGF5SXRlbSB7Ci0gICAgICAgIGludCBzaHVmZmxlZElkeDsKLSAgICAgICAgRGF0YVNvdXJjZURlc2MgZHNkOwotICAgICAgICBNZWRpYUl0ZW0yIG1lZGlhSXRlbTsKLQotICAgICAgICBQbGF5SXRlbShpbnQgc2h1ZmZsZWRJZHgpIHsKLSAgICAgICAgICAgIHRoaXMoc2h1ZmZsZWRJZHgsIG51bGwpOwotICAgICAgICB9Ci0KLSAgICAgICAgUGxheUl0ZW0oaW50IHNodWZmbGVkSWR4LCBEYXRhU291cmNlRGVzYyBkc2QpIHsKLSAgICAgICAgICAgIHRoaXMuc2h1ZmZsZWRJZHggPSBzaHVmZmxlZElkeDsKLSAgICAgICAgICAgIGlmIChzaHVmZmxlZElkeCA+PSAwKSB7Ci0gICAgICAgICAgICAgICAgdGhpcy5tZWRpYUl0ZW0gPSBtU2h1ZmZsZWRMaXN0LmdldChzaHVmZmxlZElkeCk7Ci0gICAgICAgICAgICAgICAgaWYgKGRzZCA9PSBudWxsKSB7Ci0gICAgICAgICAgICAgICAgICAgIHN5bmNocm9uaXplZCAobUxvY2spIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZHNkID0gcmV0cmlldmVEYXRhU291cmNlRGVzY0xvY2tlZCh0aGlzLm1lZGlhSXRlbSk7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICB0aGlzLmRzZCA9IGRzZDsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICBib29sZWFuIGlzVmFsaWQoKSB7Ci0gICAgICAgICAgICBpZiAodGhpcyA9PSBtRW9wUGxheUl0ZW0pIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmIChtZWRpYUl0ZW0gPT0gbnVsbCkgewotICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmIChkc2QgPT0gbnVsbCkgewotICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmIChzaHVmZmxlZElkeCA+PSBtU2h1ZmZsZWRMaXN0LnNpemUoKSkgewotICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmIChtZWRpYUl0ZW0gIT0gbVNodWZmbGVkTGlzdC5nZXQoc2h1ZmZsZWRJZHgpKSB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYgKG1lZGlhSXRlbS5nZXREYXRhU291cmNlRGVzYygpICE9IG51bGwKLSAgICAgICAgICAgICAgICAgICAgJiYgIW1lZGlhSXRlbS5nZXREYXRhU291cmNlRGVzYygpLmVxdWFscyhkc2QpKSB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBwdWJsaWMgU2Vzc2lvblBsYXlsaXN0QWdlbnQoQE5vbk51bGwgTWVkaWFTZXNzaW9uMkltcGwgc2Vzc2lvbkltcGwsCi0gICAgICAgICAgICBATm9uTnVsbCBNZWRpYVBsYXllckJhc2UgcGxheWVyKSB7Ci0gICAgICAgIGlmIChzZXNzaW9uSW1wbCA9PSBudWxsKSB7Ci0gICAgICAgICAgICB0aHJvdyBuZXcgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKCJzZXNzaW9uSW1wbCBzaG91bGRuJ3QgYmUgbnVsbCIpOwotICAgICAgICB9Ci0gICAgICAgIGlmIChwbGF5ZXIgPT0gbnVsbCkgewotICAgICAgICAgICAgdGhyb3cgbmV3IElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbigicGxheWVyIHNob3VsZG4ndCBiZSBudWxsIik7Ci0gICAgICAgIH0KLSAgICAgICAgbVNlc3Npb25JbXBsID0gc2Vzc2lvbkltcGw7Ci0gICAgICAgIG1QbGF5ZXIgPSBwbGF5ZXI7Ci0gICAgICAgIG1QbGF5ZXJDYWxsYmFjayA9IG5ldyBNeVBsYXllckV2ZW50Q2FsbGJhY2soKTsKLSAgICAgICAgbVBsYXllci5yZWdpc3RlclBsYXllckV2ZW50Q2FsbGJhY2sobVNlc3Npb25JbXBsLmdldENhbGxiYWNrRXhlY3V0b3IoKSwgbVBsYXllckNhbGxiYWNrKTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgdm9pZCBzZXRQbGF5ZXIoQE5vbk51bGwgTWVkaWFQbGF5ZXJCYXNlIHBsYXllcikgewotICAgICAgICBpZiAocGxheWVyID09IG51bGwpIHsKLSAgICAgICAgICAgIHRocm93IG5ldyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oInBsYXllciBzaG91bGRuJ3QgYmUgbnVsbCIpOwotICAgICAgICB9Ci0gICAgICAgIHN5bmNocm9uaXplZCAobUxvY2spIHsKLSAgICAgICAgICAgIGlmIChwbGF5ZXIgPT0gbVBsYXllcikgewotICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIG1QbGF5ZXIudW5yZWdpc3RlclBsYXllckV2ZW50Q2FsbGJhY2sobVBsYXllckNhbGxiYWNrKTsKLSAgICAgICAgICAgIG1QbGF5ZXIgPSBwbGF5ZXI7Ci0gICAgICAgICAgICBtUGxheWVyLnJlZ2lzdGVyUGxheWVyRXZlbnRDYWxsYmFjaygKLSAgICAgICAgICAgICAgICAgICAgbVNlc3Npb25JbXBsLmdldENhbGxiYWNrRXhlY3V0b3IoKSwgbVBsYXllckNhbGxiYWNrKTsKLSAgICAgICAgICAgIHVwZGF0ZVBsYXllckRhdGFTb3VyY2VMb2NrZWQoKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIHB1YmxpYyB2b2lkIHNldE9uRGF0YVNvdXJjZU1pc3NpbmdIZWxwZXIoT25EYXRhU291cmNlTWlzc2luZ0hlbHBlciBoZWxwZXIpIHsKLSAgICAgICAgc3luY2hyb25pemVkIChtTG9jaykgewotICAgICAgICAgICAgbURzbUhlbHBlciA9IGhlbHBlcjsKLSAgICAgICAgfQotICAgIH0KLQotICAgIHB1YmxpYyB2b2lkIGNsZWFyT25EYXRhU291cmNlTWlzc2luZ0hlbHBlcigpIHsKLSAgICAgICAgc3luY2hyb25pemVkIChtTG9jaykgewotICAgICAgICAgICAgbURzbUhlbHBlciA9IG51bGw7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgQE51bGxhYmxlIExpc3Q8TWVkaWFJdGVtMj4gZ2V0UGxheWxpc3QoKSB7Ci0gICAgICAgIHN5bmNocm9uaXplZCAobUxvY2spIHsKLSAgICAgICAgICAgIHJldHVybiBDb2xsZWN0aW9ucy51bm1vZGlmaWFibGVMaXN0KG1QbGF5bGlzdCk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgdm9pZCBzZXRQbGF5bGlzdChATm9uTnVsbCBMaXN0PE1lZGlhSXRlbTI+IGxpc3QsIEBOdWxsYWJsZSBNZWRpYU1ldGFkYXRhMiBtZXRhZGF0YSkgewotICAgICAgICBpZiAobGlzdCA9PSBudWxsKSB7Ci0gICAgICAgICAgICB0aHJvdyBuZXcgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKCJsaXN0IHNob3VsZG4ndCBiZSBudWxsIik7Ci0gICAgICAgIH0KLQotICAgICAgICBzeW5jaHJvbml6ZWQgKG1Mb2NrKSB7Ci0gICAgICAgICAgICBtSXRlbURzZE1hcC5jbGVhcigpOwotCi0gICAgICAgICAgICBtUGxheWxpc3QuY2xlYXIoKTsKLSAgICAgICAgICAgIG1QbGF5bGlzdC5hZGRBbGwobGlzdCk7Ci0gICAgICAgICAgICBhcHBseVNodWZmbGVNb2RlTG9ja2VkKCk7Ci0KLSAgICAgICAgICAgIG1NZXRhZGF0YSA9IG1ldGFkYXRhOwotICAgICAgICAgICAgbUN1cnJlbnQgPSBnZXROZXh0VmFsaWRQbGF5SXRlbUxvY2tlZChFTkRfT0ZfUExBWUxJU1QsIDEpOwotICAgICAgICAgICAgdXBkYXRlUGxheWVyRGF0YVNvdXJjZUxvY2tlZCgpOwotICAgICAgICB9Ci0gICAgICAgIG5vdGlmeVBsYXlsaXN0Q2hhbmdlZCgpOwotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyBATnVsbGFibGUgTWVkaWFNZXRhZGF0YTIgZ2V0UGxheWxpc3RNZXRhZGF0YSgpIHsKLSAgICAgICAgcmV0dXJuIG1NZXRhZGF0YTsKLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgdm9pZCB1cGRhdGVQbGF5bGlzdE1ldGFkYXRhKEBOdWxsYWJsZSBNZWRpYU1ldGFkYXRhMiBtZXRhZGF0YSkgewotICAgICAgICBzeW5jaHJvbml6ZWQgKG1Mb2NrKSB7Ci0gICAgICAgICAgICBpZiAobWV0YWRhdGEgPT0gbU1ldGFkYXRhKSB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgbU1ldGFkYXRhID0gbWV0YWRhdGE7Ci0gICAgICAgIH0KLSAgICAgICAgbm90aWZ5UGxheWxpc3RNZXRhZGF0YUNoYW5nZWQoKTsKLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgdm9pZCBhZGRQbGF5bGlzdEl0ZW0oaW50IGluZGV4LCBATm9uTnVsbCBNZWRpYUl0ZW0yIGl0ZW0pIHsKLSAgICAgICAgaWYgKGl0ZW0gPT0gbnVsbCkgewotICAgICAgICAgICAgdGhyb3cgbmV3IElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbigiaXRlbSBzaG91bGRuJ3QgYmUgbnVsbCIpOwotICAgICAgICB9Ci0gICAgICAgIHN5bmNocm9uaXplZCAobUxvY2spIHsKLSAgICAgICAgICAgIGluZGV4ID0gY2xhbXAoaW5kZXgsIG1QbGF5bGlzdC5zaXplKCkpOwotICAgICAgICAgICAgaW50IHNodWZmbGVkSWR4ID0gaW5kZXg7Ci0gICAgICAgICAgICBtUGxheWxpc3QuYWRkKGluZGV4LCBpdGVtKTsKLSAgICAgICAgICAgIGlmIChtU2h1ZmZsZU1vZGUgPT0gTWVkaWFQbGF5bGlzdEFnZW50LlNIVUZGTEVfTU9ERV9OT05FKSB7Ci0gICAgICAgICAgICAgICAgbVNodWZmbGVkTGlzdC5hZGQoaW5kZXgsIGl0ZW0pOwotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAvLyBBZGQgdGhlIGl0ZW0gaW4gcmFuZG9tIHBvc2l0aW9uIG9mIG1TaHVmZmxlZExpc3QuCi0gICAgICAgICAgICAgICAgc2h1ZmZsZWRJZHggPSBUaHJlYWRMb2NhbFJhbmRvbS5jdXJyZW50KCkubmV4dEludChtU2h1ZmZsZWRMaXN0LnNpemUoKSArIDEpOwotICAgICAgICAgICAgICAgIG1TaHVmZmxlZExpc3QuYWRkKHNodWZmbGVkSWR4LCBpdGVtKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmICghaGFzVmFsaWRJdGVtKCkpIHsKLSAgICAgICAgICAgICAgICBtQ3VycmVudCA9IGdldE5leHRWYWxpZFBsYXlJdGVtTG9ja2VkKEVORF9PRl9QTEFZTElTVCwgMSk7Ci0gICAgICAgICAgICAgICAgdXBkYXRlUGxheWVyRGF0YVNvdXJjZUxvY2tlZCgpOwotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICB1cGRhdGVDdXJyZW50SWZOZWVkZWRMb2NrZWQoKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICBub3RpZnlQbGF5bGlzdENoYW5nZWQoKTsKLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgdm9pZCByZW1vdmVQbGF5bGlzdEl0ZW0oQE5vbk51bGwgTWVkaWFJdGVtMiBpdGVtKSB7Ci0gICAgICAgIGlmIChpdGVtID09IG51bGwpIHsKLSAgICAgICAgICAgIHRocm93IG5ldyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oIml0ZW0gc2hvdWxkbid0IGJlIG51bGwiKTsKLSAgICAgICAgfQotICAgICAgICBzeW5jaHJvbml6ZWQgKG1Mb2NrKSB7Ci0gICAgICAgICAgICBpZiAoIW1QbGF5bGlzdC5yZW1vdmUoaXRlbSkpIHsKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBtU2h1ZmZsZWRMaXN0LnJlbW92ZShpdGVtKTsKLSAgICAgICAgICAgIG1JdGVtRHNkTWFwLnJlbW92ZShpdGVtKTsKLSAgICAgICAgICAgIHVwZGF0ZUN1cnJlbnRJZk5lZWRlZExvY2tlZCgpOwotICAgICAgICB9Ci0gICAgICAgIG5vdGlmeVBsYXlsaXN0Q2hhbmdlZCgpOwotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyB2b2lkIHJlcGxhY2VQbGF5bGlzdEl0ZW0oaW50IGluZGV4LCBATm9uTnVsbCBNZWRpYUl0ZW0yIGl0ZW0pIHsKLSAgICAgICAgaWYgKGl0ZW0gPT0gbnVsbCkgewotICAgICAgICAgICAgdGhyb3cgbmV3IElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbigiaXRlbSBzaG91bGRuJ3QgYmUgbnVsbCIpOwotICAgICAgICB9Ci0gICAgICAgIHN5bmNocm9uaXplZCAobUxvY2spIHsKLSAgICAgICAgICAgIGlmIChtUGxheWxpc3Quc2l6ZSgpIDw9IDApIHsKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBpbmRleCA9IGNsYW1wKGluZGV4LCBtUGxheWxpc3Quc2l6ZSgpIC0gMSk7Ci0gICAgICAgICAgICBpbnQgc2h1ZmZsZWRJZHggPSBtU2h1ZmZsZWRMaXN0LmluZGV4T2YobVBsYXlsaXN0LmdldChpbmRleCkpOwotICAgICAgICAgICAgbUl0ZW1Ec2RNYXAucmVtb3ZlKG1TaHVmZmxlZExpc3QuZ2V0KHNodWZmbGVkSWR4KSk7Ci0gICAgICAgICAgICBtU2h1ZmZsZWRMaXN0LnNldChzaHVmZmxlZElkeCwgaXRlbSk7Ci0gICAgICAgICAgICBtUGxheWxpc3Quc2V0KGluZGV4LCBpdGVtKTsKLSAgICAgICAgICAgIGlmICghaGFzVmFsaWRJdGVtKCkpIHsKLSAgICAgICAgICAgICAgICBtQ3VycmVudCA9IGdldE5leHRWYWxpZFBsYXlJdGVtTG9ja2VkKEVORF9PRl9QTEFZTElTVCwgMSk7Ci0gICAgICAgICAgICAgICAgdXBkYXRlUGxheWVyRGF0YVNvdXJjZUxvY2tlZCgpOwotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICB1cGRhdGVDdXJyZW50SWZOZWVkZWRMb2NrZWQoKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICBub3RpZnlQbGF5bGlzdENoYW5nZWQoKTsKLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgdm9pZCBza2lwVG9QbGF5bGlzdEl0ZW0oQE5vbk51bGwgTWVkaWFJdGVtMiBpdGVtKSB7Ci0gICAgICAgIGlmIChpdGVtID09IG51bGwpIHsKLSAgICAgICAgICAgIHRocm93IG5ldyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oIml0ZW0gc2hvdWxkbid0IGJlIG51bGwiKTsKLSAgICAgICAgfQotICAgICAgICBzeW5jaHJvbml6ZWQgKG1Mb2NrKSB7Ci0gICAgICAgICAgICBpZiAoIWhhc1ZhbGlkSXRlbSgpIHx8IGl0ZW0uZXF1YWxzKG1DdXJyZW50Lm1lZGlhSXRlbSkpIHsKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBpbnQgc2h1ZmZsZWRJZHggPSBtU2h1ZmZsZWRMaXN0LmluZGV4T2YoaXRlbSk7Ci0gICAgICAgICAgICBpZiAoc2h1ZmZsZWRJZHggPCAwKSB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgbUN1cnJlbnQgPSBuZXcgUGxheUl0ZW0oc2h1ZmZsZWRJZHgpOwotICAgICAgICAgICAgdXBkYXRlQ3VycmVudElmTmVlZGVkTG9ja2VkKCk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgdm9pZCBza2lwVG9QcmV2aW91c0l0ZW0oKSB7Ci0gICAgICAgIHN5bmNocm9uaXplZCAobUxvY2spIHsKLSAgICAgICAgICAgIGlmICghaGFzVmFsaWRJdGVtKCkpIHsKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBQbGF5SXRlbSBwcmV2ID0gZ2V0TmV4dFZhbGlkUGxheUl0ZW1Mb2NrZWQobUN1cnJlbnQuc2h1ZmZsZWRJZHgsIC0xKTsKLSAgICAgICAgICAgIGlmIChwcmV2ICE9IG1Fb3BQbGF5SXRlbSkgewotICAgICAgICAgICAgICAgIG1DdXJyZW50ID0gcHJldjsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHVwZGF0ZUN1cnJlbnRJZk5lZWRlZExvY2tlZCgpOwotICAgICAgIH0KLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgdm9pZCBza2lwVG9OZXh0SXRlbSgpIHsKLSAgICAgICAgc3luY2hyb25pemVkIChtTG9jaykgewotICAgICAgICAgICAgaWYgKCFoYXNWYWxpZEl0ZW0oKSB8fCBtQ3VycmVudCA9PSBtRW9wUGxheUl0ZW0pIHsKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBQbGF5SXRlbSBuZXh0ID0gZ2V0TmV4dFZhbGlkUGxheUl0ZW1Mb2NrZWQobUN1cnJlbnQuc2h1ZmZsZWRJZHgsIDEpOwotICAgICAgICAgICAgaWYgKG5leHQgIT0gbUVvcFBsYXlJdGVtKSB7Ci0gICAgICAgICAgICAgICAgbUN1cnJlbnQgPSBuZXh0OwotICAgICAgICAgICAgfQotICAgICAgICAgICAgdXBkYXRlQ3VycmVudElmTmVlZGVkTG9ja2VkKCk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgaW50IGdldFJlcGVhdE1vZGUoKSB7Ci0gICAgICAgIHJldHVybiBtUmVwZWF0TW9kZTsKLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgdm9pZCBzZXRSZXBlYXRNb2RlKGludCByZXBlYXRNb2RlKSB7Ci0gICAgICAgIGlmIChyZXBlYXRNb2RlIDwgTWVkaWFQbGF5bGlzdEFnZW50LlJFUEVBVF9NT0RFX05PTkUKLSAgICAgICAgICAgICAgICB8fCByZXBlYXRNb2RlID4gTWVkaWFQbGF5bGlzdEFnZW50LlJFUEVBVF9NT0RFX0dST1VQKSB7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICAgICAgc3luY2hyb25pemVkIChtTG9jaykgewotICAgICAgICAgICAgaWYgKG1SZXBlYXRNb2RlID09IHJlcGVhdE1vZGUpIHsKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBtUmVwZWF0TW9kZSA9IHJlcGVhdE1vZGU7Ci0gICAgICAgICAgICBzd2l0Y2ggKHJlcGVhdE1vZGUpIHsKLSAgICAgICAgICAgICAgICBjYXNlIE1lZGlhUGxheWxpc3RBZ2VudC5SRVBFQVRfTU9ERV9PTkU6Ci0gICAgICAgICAgICAgICAgICAgIGlmIChtQ3VycmVudCAhPSBudWxsICYmIG1DdXJyZW50ICE9IG1Fb3BQbGF5SXRlbSkgewotICAgICAgICAgICAgICAgICAgICAgICAgbVBsYXllci5sb29wQ3VycmVudCh0cnVlKTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICBjYXNlIE1lZGlhUGxheWxpc3RBZ2VudC5SRVBFQVRfTU9ERV9BTEw6Ci0gICAgICAgICAgICAgICAgY2FzZSBNZWRpYVBsYXlsaXN0QWdlbnQuUkVQRUFUX01PREVfR1JPVVA6Ci0gICAgICAgICAgICAgICAgICAgIGlmIChtQ3VycmVudCA9PSBtRW9wUGxheUl0ZW0pIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIG1DdXJyZW50ID0gZ2V0TmV4dFZhbGlkUGxheUl0ZW1Mb2NrZWQoRU5EX09GX1BMQVlMSVNULCAxKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIHVwZGF0ZVBsYXllckRhdGFTb3VyY2VMb2NrZWQoKTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAvLyBwYXNzIHRocm91Z2gKLSAgICAgICAgICAgICAgICBjYXNlIE1lZGlhUGxheWxpc3RBZ2VudC5SRVBFQVRfTU9ERV9OT05FOgotICAgICAgICAgICAgICAgICAgICBtUGxheWVyLmxvb3BDdXJyZW50KGZhbHNlKTsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgbm90aWZ5UmVwZWF0TW9kZUNoYW5nZWQoKTsKLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgaW50IGdldFNodWZmbGVNb2RlKCkgewotICAgICAgICByZXR1cm4gbVNodWZmbGVNb2RlOwotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyB2b2lkIHNldFNodWZmbGVNb2RlKGludCBzaHVmZmxlTW9kZSkgewotICAgICAgICBpZiAoc2h1ZmZsZU1vZGUgPCBNZWRpYVBsYXlsaXN0QWdlbnQuU0hVRkZMRV9NT0RFX05PTkUKLSAgICAgICAgICAgICAgICB8fCBzaHVmZmxlTW9kZSA+IE1lZGlhUGxheWxpc3RBZ2VudC5TSFVGRkxFX01PREVfR1JPVVApIHsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAgICAgICBzeW5jaHJvbml6ZWQgKG1Mb2NrKSB7Ci0gICAgICAgICAgICBpZiAobVNodWZmbGVNb2RlID09IHNodWZmbGVNb2RlKSB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgbVNodWZmbGVNb2RlID0gc2h1ZmZsZU1vZGU7Ci0gICAgICAgICAgICBhcHBseVNodWZmbGVNb2RlTG9ja2VkKCk7Ci0gICAgICAgICAgICB1cGRhdGVDdXJyZW50SWZOZWVkZWRMb2NrZWQoKTsKLSAgICAgICAgfQotICAgICAgICBub3RpZnlTaHVmZmxlTW9kZUNoYW5nZWQoKTsKLSAgICB9Ci0KLSAgICBAVmlzaWJsZUZvclRlc3RpbmcKLSAgICBpbnQgZ2V0Q3VyU2h1ZmZsZWRJbmRleCgpIHsKLSAgICAgICAgcmV0dXJuIGhhc1ZhbGlkSXRlbSgpID8gbUN1cnJlbnQuc2h1ZmZsZWRJZHggOiBOT19WQUxJRF9JVEVNUzsKLSAgICB9Ci0KLSAgICBwcml2YXRlIGJvb2xlYW4gaGFzVmFsaWRJdGVtKCkgewotICAgICAgICByZXR1cm4gbUN1cnJlbnQgIT0gbnVsbDsKLSAgICB9Ci0KLSAgICBwcml2YXRlIERhdGFTb3VyY2VEZXNjIHJldHJpZXZlRGF0YVNvdXJjZURlc2NMb2NrZWQoTWVkaWFJdGVtMiBpdGVtKSB7Ci0gICAgICAgIERhdGFTb3VyY2VEZXNjIGRzZCA9IGl0ZW0uZ2V0RGF0YVNvdXJjZURlc2MoKTsKLSAgICAgICAgaWYgKGRzZCAhPSBudWxsKSB7Ci0gICAgICAgICAgICBtSXRlbURzZE1hcC5wdXQoaXRlbSwgZHNkKTsKLSAgICAgICAgICAgIHJldHVybiBkc2Q7Ci0gICAgICAgIH0KLSAgICAgICAgZHNkID0gbUl0ZW1Ec2RNYXAuZ2V0KGl0ZW0pOwotICAgICAgICBpZiAoZHNkICE9IG51bGwpIHsKLSAgICAgICAgICAgIHJldHVybiBkc2Q7Ci0gICAgICAgIH0KLSAgICAgICAgT25EYXRhU291cmNlTWlzc2luZ0hlbHBlciBoZWxwZXIgPSBtRHNtSGVscGVyOwotICAgICAgICBpZiAoaGVscGVyICE9IG51bGwpIHsKLSAgICAgICAgICAgIC8vIFRPRE86IERvIG5vdCBjYWxsIG9uRGF0YVNvdXJjZU1pc3Npbmcgd2l0aCB0aGUgbG9jayAoYi83NDA5MDc0MSkuCi0gICAgICAgICAgICBkc2QgPSBoZWxwZXIub25EYXRhU291cmNlTWlzc2luZyhtU2Vzc2lvbkltcGwuZ2V0SW5zdGFuY2UoKSwgaXRlbSk7Ci0gICAgICAgICAgICBpZiAoZHNkICE9IG51bGwpIHsKLSAgICAgICAgICAgICAgICBtSXRlbURzZE1hcC5wdXQoaXRlbSwgZHNkKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICByZXR1cm4gZHNkOwotICAgIH0KLQotICAgIC8vIFRPRE86IGNvbnNpZGVyIHRvIGNhbGwgdXBkYXRlQ3VycmVudElmTmVlZGVkTG9ja2VkIGluc2lkZSAoYi83NDA5MDc0MSkKLSAgICBwcml2YXRlIFBsYXlJdGVtIGdldE5leHRWYWxpZFBsYXlJdGVtTG9ja2VkKGludCBjdXJTaHVmZmxlZElkeCwgaW50IGRpcmVjdGlvbikgewotICAgICAgICBpbnQgc2l6ZSA9IG1QbGF5bGlzdC5zaXplKCk7Ci0gICAgICAgIGlmIChjdXJTaHVmZmxlZElkeCA9PSBFTkRfT0ZfUExBWUxJU1QpIHsKLSAgICAgICAgICAgIGN1clNodWZmbGVkSWR4ID0gKGRpcmVjdGlvbiA+IDApID8gLTEgOiBzaXplOwotICAgICAgICB9Ci0gICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgc2l6ZTsgaSsrKSB7Ci0gICAgICAgICAgICBjdXJTaHVmZmxlZElkeCArPSBkaXJlY3Rpb247Ci0gICAgICAgICAgICBpZiAoY3VyU2h1ZmZsZWRJZHggPCAwIHx8IGN1clNodWZmbGVkSWR4ID49IG1QbGF5bGlzdC5zaXplKCkpIHsKLSAgICAgICAgICAgICAgICBpZiAobVJlcGVhdE1vZGUgPT0gUkVQRUFUX01PREVfTk9ORSkgewotICAgICAgICAgICAgICAgICAgICByZXR1cm4gKGkgPT0gc2l6ZSAtIDEpID8gbnVsbCA6IG1Fb3BQbGF5SXRlbTsKLSAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICBjdXJTaHVmZmxlZElkeCA9IGN1clNodWZmbGVkSWR4IDwgMCA/IG1QbGF5bGlzdC5zaXplKCkgLSAxIDogMDsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBEYXRhU291cmNlRGVzYyBkc2QgPSByZXRyaWV2ZURhdGFTb3VyY2VEZXNjTG9ja2VkKG1TaHVmZmxlZExpc3QuZ2V0KGN1clNodWZmbGVkSWR4KSk7Ci0gICAgICAgICAgICBpZiAoZHNkICE9IG51bGwpIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gbmV3IFBsYXlJdGVtKGN1clNodWZmbGVkSWR4LCBkc2QpOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIHJldHVybiBudWxsOwotICAgIH0KLQotICAgIHByaXZhdGUgdm9pZCB1cGRhdGVDdXJyZW50SWZOZWVkZWRMb2NrZWQoKSB7Ci0gICAgICAgIGlmICghaGFzVmFsaWRJdGVtKCkgfHwgbUN1cnJlbnQuaXNWYWxpZCgpKSB7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICAgICAgaW50IHNodWZmbGVkSWR4ID0gbVNodWZmbGVkTGlzdC5pbmRleE9mKG1DdXJyZW50Lm1lZGlhSXRlbSk7Ci0gICAgICAgIGlmIChzaHVmZmxlZElkeCA+PSAwKSB7Ci0gICAgICAgICAgICAvLyBBZGRlZCBhbiBpdGVtLgotICAgICAgICAgICAgbUN1cnJlbnQuc2h1ZmZsZWRJZHggPSBzaHVmZmxlZElkeDsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotCi0gICAgICAgIGlmIChtQ3VycmVudC5zaHVmZmxlZElkeCA+PSBtU2h1ZmZsZWRMaXN0LnNpemUoKSkgewotICAgICAgICAgICAgbUN1cnJlbnQgPSBnZXROZXh0VmFsaWRQbGF5SXRlbUxvY2tlZChtU2h1ZmZsZWRMaXN0LnNpemUoKSAtIDEsIDEpOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgbUN1cnJlbnQubWVkaWFJdGVtID0gbVNodWZmbGVkTGlzdC5nZXQobUN1cnJlbnQuc2h1ZmZsZWRJZHgpOwotICAgICAgICAgICAgaWYgKHJldHJpZXZlRGF0YVNvdXJjZURlc2NMb2NrZWQobUN1cnJlbnQubWVkaWFJdGVtKSA9PSBudWxsKSB7Ci0gICAgICAgICAgICAgICAgbUN1cnJlbnQgPSBnZXROZXh0VmFsaWRQbGF5SXRlbUxvY2tlZChtQ3VycmVudC5zaHVmZmxlZElkeCwgMSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgdXBkYXRlUGxheWVyRGF0YVNvdXJjZUxvY2tlZCgpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgcHJpdmF0ZSB2b2lkIHVwZGF0ZVBsYXllckRhdGFTb3VyY2VMb2NrZWQoKSB7Ci0gICAgICAgIGlmIChtQ3VycmVudCA9PSBudWxsIHx8IG1DdXJyZW50ID09IG1Fb3BQbGF5SXRlbSkgewotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgICAgIGlmIChtUGxheWVyLmdldEN1cnJlbnREYXRhU291cmNlKCkgIT0gbUN1cnJlbnQuZHNkKSB7Ci0gICAgICAgICAgICBtUGxheWVyLnNldERhdGFTb3VyY2UobUN1cnJlbnQuZHNkKTsKLSAgICAgICAgICAgIG1QbGF5ZXIubG9vcEN1cnJlbnQobVJlcGVhdE1vZGUgPT0gTWVkaWFQbGF5bGlzdEFnZW50LlJFUEVBVF9NT0RFX09ORSk7Ci0gICAgICAgIH0KLSAgICAgICAgLy8gVE9ETzogQ2FsbCBzZXROZXh0RGF0YVNvdXJjZSAoYi83NDA5MDc0MSkKLSAgICB9Ci0KLSAgICBwcml2YXRlIHZvaWQgYXBwbHlTaHVmZmxlTW9kZUxvY2tlZCgpIHsKLSAgICAgICAgbVNodWZmbGVkTGlzdC5jbGVhcigpOwotICAgICAgICBtU2h1ZmZsZWRMaXN0LmFkZEFsbChtUGxheWxpc3QpOwotICAgICAgICBpZiAobVNodWZmbGVNb2RlID09IE1lZGlhUGxheWxpc3RBZ2VudC5TSFVGRkxFX01PREVfQUxMCi0gICAgICAgICAgICAgICAgfHwgbVNodWZmbGVNb2RlID09IE1lZGlhUGxheWxpc3RBZ2VudC5TSFVGRkxFX01PREVfR1JPVVApIHsKLSAgICAgICAgICAgIENvbGxlY3Rpb25zLnNodWZmbGUobVNodWZmbGVkTGlzdCk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICAvLyBDbGFtcHMgdmFsdWUgdG8gWzAsIHNpemVdCi0gICAgcHJpdmF0ZSBzdGF0aWMgaW50IGNsYW1wKGludCB2YWx1ZSwgaW50IHNpemUpIHsKLSAgICAgICAgaWYgKHZhbHVlIDwgMCkgewotICAgICAgICAgICAgcmV0dXJuIDA7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuICh2YWx1ZSA+IHNpemUpID8gc2l6ZSA6IHZhbHVlOwotICAgIH0KLX0KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL01lZGlhQ29tcG9uZW50cy9zcmMvY29tL2FuZHJvaWQvbWVkaWEvU2Vzc2lvblRva2VuMkltcGwuamF2YSBiL3BhY2thZ2VzL01lZGlhQ29tcG9uZW50cy9zcmMvY29tL2FuZHJvaWQvbWVkaWEvU2Vzc2lvblRva2VuMkltcGwuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTVjZjhjNC4uMDAwMDAwMAotLS0gYS9wYWNrYWdlcy9NZWRpYUNvbXBvbmVudHMvc3JjL2NvbS9hbmRyb2lkL21lZGlhL1Nlc3Npb25Ub2tlbjJJbXBsLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyNjAgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAyMDE4IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKLSAqCi0gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKLSAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KLSAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotICoKLSAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0gKgotICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQotICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKLSAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgotICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAotICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCi0gKi8KLQotcGFja2FnZSBjb20uYW5kcm9pZC5tZWRpYTsKLQotaW1wb3J0IHN0YXRpYyBhbmRyb2lkLm1lZGlhLlNlc3Npb25Ub2tlbjIuVFlQRV9TRVNTSU9OOwotaW1wb3J0IHN0YXRpYyBhbmRyb2lkLm1lZGlhLlNlc3Npb25Ub2tlbjIuVFlQRV9TRVNTSU9OX1NFUlZJQ0U7Ci1pbXBvcnQgc3RhdGljIGFuZHJvaWQubWVkaWEuU2Vzc2lvblRva2VuMi5UWVBFX0xJQlJBUllfU0VSVklDRTsKLQotaW1wb3J0IGFuZHJvaWQuY29udGVudC5Db250ZXh0OwotaW1wb3J0IGFuZHJvaWQuY29udGVudC5JbnRlbnQ7Ci1pbXBvcnQgYW5kcm9pZC5jb250ZW50LnBtLlBhY2thZ2VNYW5hZ2VyOwotaW1wb3J0IGFuZHJvaWQuY29udGVudC5wbS5QYWNrYWdlTWFuYWdlci5OYW1lTm90Rm91bmRFeGNlcHRpb247Ci1pbXBvcnQgYW5kcm9pZC5jb250ZW50LnBtLlJlc29sdmVJbmZvOwotaW1wb3J0IGFuZHJvaWQubWVkaWEuTWVkaWFMaWJyYXJ5U2VydmljZTI7Ci1pbXBvcnQgYW5kcm9pZC5tZWRpYS5NZWRpYVNlc3Npb25TZXJ2aWNlMjsKLWltcG9ydCBhbmRyb2lkLm1lZGlhLlNlc3Npb25Ub2tlbjI7Ci1pbXBvcnQgYW5kcm9pZC5tZWRpYS5TZXNzaW9uVG9rZW4yLlRva2VuVHlwZTsKLWltcG9ydCBhbmRyb2lkLm1lZGlhLnVwZGF0ZS5TZXNzaW9uVG9rZW4yUHJvdmlkZXI7Ci1pbXBvcnQgYW5kcm9pZC5vcy5CdW5kbGU7Ci1pbXBvcnQgYW5kcm9pZC5vcy5JQmluZGVyOwotaW1wb3J0IGFuZHJvaWQudGV4dC5UZXh0VXRpbHM7Ci0KLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLQotcHVibGljIGNsYXNzIFNlc3Npb25Ub2tlbjJJbXBsIGltcGxlbWVudHMgU2Vzc2lvblRva2VuMlByb3ZpZGVyIHsKLSAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgS0VZX1VJRCA9ICJhbmRyb2lkLm1lZGlhLnRva2VuLnVpZCI7Ci0gICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIEtFWV9UWVBFID0gImFuZHJvaWQubWVkaWEudG9rZW4udHlwZSI7Ci0gICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIEtFWV9QQUNLQUdFX05BTUUgPSAiYW5kcm9pZC5tZWRpYS50b2tlbi5wYWNrYWdlX25hbWUiOwotICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBLRVlfU0VSVklDRV9OQU1FID0gImFuZHJvaWQubWVkaWEudG9rZW4uc2VydmljZV9uYW1lIjsKLSAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgS0VZX0lEID0gImFuZHJvaWQubWVkaWEudG9rZW4uaWQiOwotICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBLRVlfU0VTU0lPTl9CSU5ERVIgPSAiYW5kcm9pZC5tZWRpYS50b2tlbi5zZXNzaW9uX2JpbmRlciI7Ci0KLSAgICBwcml2YXRlIGZpbmFsIFNlc3Npb25Ub2tlbjIgbUluc3RhbmNlOwotICAgIHByaXZhdGUgZmluYWwgaW50IG1VaWQ7Ci0gICAgcHJpdmF0ZSBmaW5hbCBAVG9rZW5UeXBlIGludCBtVHlwZTsKLSAgICBwcml2YXRlIGZpbmFsIFN0cmluZyBtUGFja2FnZU5hbWU7Ci0gICAgcHJpdmF0ZSBmaW5hbCBTdHJpbmcgbVNlcnZpY2VOYW1lOwotICAgIHByaXZhdGUgZmluYWwgU3RyaW5nIG1JZDsKLSAgICBwcml2YXRlIGZpbmFsIElNZWRpYVNlc3Npb24yIG1TZXNzaW9uQmluZGVyOwotCi0gICAgLyoqCi0gICAgICogUHVibGljIGNvbnN0cnVjdG9yIGZvciB0aGUgbGVnYWN5IHN1cHBvcnQgKGkuZS4gYnJvd3NlciBjYW4gdHJ5IGNvbm5lY3RpbmcgdG8gYW55IGJyb3dzZXIKLSAgICAgKiBzZXJ2aWNlIGlmIGl0IGtub3dzIHRoZSBzZXJ2aWNlIG5hbWUpCi0gICAgICovCi0gICAgcHVibGljIFNlc3Npb25Ub2tlbjJJbXBsKENvbnRleHQgY29udGV4dCwgU2Vzc2lvblRva2VuMiBpbnN0YW5jZSwKLSAgICAgICAgICAgIFN0cmluZyBwYWNrYWdlTmFtZSwgU3RyaW5nIHNlcnZpY2VOYW1lLCBpbnQgdWlkKSB7Ci0gICAgICAgIGlmIChUZXh0VXRpbHMuaXNFbXB0eShwYWNrYWdlTmFtZSkpIHsKLSAgICAgICAgICAgIHRocm93IG5ldyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oInBhY2thZ2VOYW1lIHNob3VsZG4ndCBiZSBlbXB0eSIpOwotICAgICAgICB9Ci0gICAgICAgIGlmIChUZXh0VXRpbHMuaXNFbXB0eShzZXJ2aWNlTmFtZSkpIHsKLSAgICAgICAgICAgIHRocm93IG5ldyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oInNlcnZpY2VOYW1lIHNob3VsZG4ndCBiZSBlbXB0eSIpOwotICAgICAgICB9Ci0gICAgICAgIG1JbnN0YW5jZSA9IGluc3RhbmNlOwotICAgICAgICAvLyBDYWxjdWxhdGUgdWlkIGlmIGl0J3Mgbm90IHNwZWNpZmllZC4KLSAgICAgICAgZmluYWwgUGFja2FnZU1hbmFnZXIgbWFuYWdlciA9IGNvbnRleHQuZ2V0UGFja2FnZU1hbmFnZXIoKTsKLSAgICAgICAgaWYgKHVpZCA8IDApIHsKLSAgICAgICAgICAgIHRyeSB7Ci0gICAgICAgICAgICAgICAgdWlkID0gbWFuYWdlci5nZXRQYWNrYWdlVWlkKHBhY2thZ2VOYW1lLCAwKTsKLSAgICAgICAgICAgIH0gY2F0Y2ggKE5hbWVOb3RGb3VuZEV4Y2VwdGlvbiBlKSB7Ci0gICAgICAgICAgICAgICAgdGhyb3cgbmV3IElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbigiQ2Fubm90IGZpbmQgcGFja2FnZSAiICsgcGFja2FnZU5hbWUpOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIG1VaWQgPSB1aWQ7Ci0KLSAgICAgICAgLy8gSW5mZXIgaWQgYW5kIHR5cGUgZnJvbSBwYWNrYWdlIG5hbWUgYW5kIHNlcnZpY2UgbmFtZQotICAgICAgICAvLyBUT0RPKGphZXdhbik6IEhhbmRsZSBtdWx0aS11c2VyLgotICAgICAgICBTdHJpbmcgaWQgPSBnZXRTZXNzaW9uSWRGcm9tU2VydmljZShtYW5hZ2VyLCBNZWRpYUxpYnJhcnlTZXJ2aWNlMi5TRVJWSUNFX0lOVEVSRkFDRSwKLSAgICAgICAgICAgICAgICBwYWNrYWdlTmFtZSwgc2VydmljZU5hbWUpOwotICAgICAgICBpZiAoaWQgIT0gbnVsbCkgewotICAgICAgICAgICAgbUlkID0gaWQ7Ci0gICAgICAgICAgICBtVHlwZSA9IFRZUEVfTElCUkFSWV9TRVJWSUNFOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgLy8gcmV0cnkgd2l0aCBzZXNzaW9uIHNlcnZpY2UKLSAgICAgICAgICAgIG1JZCA9IGdldFNlc3Npb25JZEZyb21TZXJ2aWNlKG1hbmFnZXIsIE1lZGlhU2Vzc2lvblNlcnZpY2UyLlNFUlZJQ0VfSU5URVJGQUNFLAotICAgICAgICAgICAgICAgICAgICBwYWNrYWdlTmFtZSwgc2VydmljZU5hbWUpOwotICAgICAgICAgICAgbVR5cGUgPSBUWVBFX1NFU1NJT05fU0VSVklDRTsKLSAgICAgICAgfQotICAgICAgICBpZiAobUlkID09IG51bGwpIHsKLSAgICAgICAgICAgIHRocm93IG5ldyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oInNlcnZpY2UgIiArIHNlcnZpY2VOYW1lICsgIiBkb2Vzbid0IGltcGxlbWVudCIKLSAgICAgICAgICAgICAgICAgICAgKyAiIHNlc3Npb24gc2VydmljZSBub3IgbGlicmFyeSBzZXJ2aWNlLiBVc2Ugc2VydmljZSdzIGZ1bGwgbmFtZS4iKTsKLSAgICAgICAgfQotICAgICAgICBtUGFja2FnZU5hbWUgPSBwYWNrYWdlTmFtZTsKLSAgICAgICAgbVNlcnZpY2VOYW1lID0gc2VydmljZU5hbWU7Ci0gICAgICAgIG1TZXNzaW9uQmluZGVyID0gbnVsbDsKLSAgICB9Ci0KLSAgICBTZXNzaW9uVG9rZW4ySW1wbChpbnQgdWlkLCBpbnQgdHlwZSwgU3RyaW5nIHBhY2thZ2VOYW1lLCBTdHJpbmcgc2VydmljZU5hbWUsIFN0cmluZyBpZCwKLSAgICAgICAgICAgIElNZWRpYVNlc3Npb24yIHNlc3Npb25CaW5kZXIpIHsKLSAgICAgICAgLy8gVE9ETyhqYWV3YW4pOiBBZGQgc2FuaXR5IGNoZWNrIChiLzczODYzODY1KQotICAgICAgICBtVWlkID0gdWlkOwotICAgICAgICBtVHlwZSA9IHR5cGU7Ci0gICAgICAgIG1QYWNrYWdlTmFtZSA9IHBhY2thZ2VOYW1lOwotICAgICAgICBtU2VydmljZU5hbWUgPSBzZXJ2aWNlTmFtZTsKLSAgICAgICAgbUlkID0gaWQ7Ci0gICAgICAgIG1TZXNzaW9uQmluZGVyID0gc2Vzc2lvbkJpbmRlcjsKLSAgICAgICAgbUluc3RhbmNlID0gbmV3IFNlc3Npb25Ub2tlbjIodGhpcyk7Ci0gICAgfQotCi0gICAgcHJpdmF0ZSBzdGF0aWMgU3RyaW5nIGdldFNlc3Npb25JZEZyb21TZXJ2aWNlKFBhY2thZ2VNYW5hZ2VyIG1hbmFnZXIsIFN0cmluZyBzZXJ2aWNlSW50ZXJmYWNlLAotICAgICAgICAgICAgU3RyaW5nIHBhY2thZ2VOYW1lLCBTdHJpbmcgc2VydmljZU5hbWUpIHsKLSAgICAgICAgSW50ZW50IHNlcnZpY2VJbnRlbnQgPSBuZXcgSW50ZW50KHNlcnZpY2VJbnRlcmZhY2UpOwotICAgICAgICBzZXJ2aWNlSW50ZW50LnNldFBhY2thZ2UocGFja2FnZU5hbWUpOwotICAgICAgICAvLyBVc2UgcXVlcnlJbnRlbnRTZXJ2aWNlcyB0byBmaW5kIHNlcnZpY2VzIHdpdGggTWVkaWFMaWJyYXJ5U2VydmljZTIuU0VSVklDRV9JTlRFUkZBQ0UuCi0gICAgICAgIC8vIFdlIGNhbm5vdCB1c2UgcmVzb2x2ZVNlcnZpY2Ugd2l0aCBpbnRlbnQgc3BlY2lmaWVkIGNsYXNzIG5hbWUsIGJlY2F1c2UgcmVzb2x2ZVNlcnZpY2UKLSAgICAgICAgLy8gaWdub3JlcyBhY3Rpb25zIGlmIEludGVudC5zZXRDbGFzc05hbWUoKSBpcyBzcGVjaWZpZWQuCi0gICAgICAgIExpc3Q8UmVzb2x2ZUluZm8+IGxpc3QgPSBtYW5hZ2VyLnF1ZXJ5SW50ZW50U2VydmljZXMoCi0gICAgICAgICAgICAgICAgc2VydmljZUludGVudCwgUGFja2FnZU1hbmFnZXIuR0VUX01FVEFfREFUQSk7Ci0gICAgICAgIGlmIChsaXN0ICE9IG51bGwpIHsKLSAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbGlzdC5zaXplKCk7IGkrKykgewotICAgICAgICAgICAgICAgIFJlc29sdmVJbmZvIHJlc29sdmVJbmZvID0gbGlzdC5nZXQoaSk7Ci0gICAgICAgICAgICAgICAgaWYgKHJlc29sdmVJbmZvID09IG51bGwgfHwgcmVzb2x2ZUluZm8uc2VydmljZUluZm8gPT0gbnVsbCkgewotICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgaWYgKFRleHRVdGlscy5lcXVhbHMocmVzb2x2ZUluZm8uc2VydmljZUluZm8ubmFtZSwgc2VydmljZU5hbWUpKSB7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBnZXRTZXNzaW9uSWQocmVzb2x2ZUluZm8pOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICByZXR1cm4gbnVsbDsKLSAgICB9Ci0KLSAgICBwdWJsaWMgc3RhdGljIFN0cmluZyBnZXRTZXNzaW9uSWQoUmVzb2x2ZUluZm8gcmVzb2x2ZUluZm8pIHsKLSAgICAgICAgaWYgKHJlc29sdmVJbmZvID09IG51bGwgfHwgcmVzb2x2ZUluZm8uc2VydmljZUluZm8gPT0gbnVsbCkgewotICAgICAgICAgICAgcmV0dXJuIG51bGw7Ci0gICAgICAgIH0gZWxzZSBpZiAocmVzb2x2ZUluZm8uc2VydmljZUluZm8ubWV0YURhdGEgPT0gbnVsbCkgewotICAgICAgICAgICAgcmV0dXJuICIiOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgcmV0dXJuIHJlc29sdmVJbmZvLnNlcnZpY2VJbmZvLm1ldGFEYXRhLmdldFN0cmluZygKLSAgICAgICAgICAgICAgICAgICAgTWVkaWFTZXNzaW9uU2VydmljZTIuU0VSVklDRV9NRVRBX0RBVEEsICIiKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIHB1YmxpYyBTZXNzaW9uVG9rZW4yIGdldEluc3RhbmNlKCkgewotICAgICAgICByZXR1cm4gbUluc3RhbmNlOwotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyBTdHJpbmcgZ2V0UGFja2FnZU5hbWVfaW1wbCgpIHsKLSAgICAgICAgcmV0dXJuIG1QYWNrYWdlTmFtZTsKLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgaW50IGdldFVpZF9pbXBsKCkgewotICAgICAgICByZXR1cm4gbVVpZDsKLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgU3RyaW5nIGdldElkX2ltcCgpIHsKLSAgICAgICAgcmV0dXJuIG1JZDsKLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgaW50IGdldFR5cGVfaW1wbCgpIHsKLSAgICAgICAgcmV0dXJuIG1UeXBlOwotICAgIH0KLQotICAgIFN0cmluZyBnZXRTZXJ2aWNlTmFtZSgpIHsKLSAgICAgICAgcmV0dXJuIG1TZXJ2aWNlTmFtZTsKLSAgICB9Ci0KLSAgICBJTWVkaWFTZXNzaW9uMiBnZXRTZXNzaW9uQmluZGVyKCkgewotICAgICAgICByZXR1cm4gbVNlc3Npb25CaW5kZXI7Ci0gICAgfQotCi0gICAgcHVibGljIHN0YXRpYyBTZXNzaW9uVG9rZW4yIGZyb21CdW5kbGVfaW1wbChCdW5kbGUgYnVuZGxlKSB7Ci0gICAgICAgIGlmIChidW5kbGUgPT0gbnVsbCkgewotICAgICAgICAgICAgcmV0dXJuIG51bGw7Ci0gICAgICAgIH0KLSAgICAgICAgZmluYWwgaW50IHVpZCA9IGJ1bmRsZS5nZXRJbnQoS0VZX1VJRCk7Ci0gICAgICAgIGZpbmFsIEBUb2tlblR5cGUgaW50IHR5cGUgPSBidW5kbGUuZ2V0SW50KEtFWV9UWVBFLCAtMSk7Ci0gICAgICAgIGZpbmFsIFN0cmluZyBwYWNrYWdlTmFtZSA9IGJ1bmRsZS5nZXRTdHJpbmcoS0VZX1BBQ0tBR0VfTkFNRSk7Ci0gICAgICAgIGZpbmFsIFN0cmluZyBzZXJ2aWNlTmFtZSA9IGJ1bmRsZS5nZXRTdHJpbmcoS0VZX1NFUlZJQ0VfTkFNRSk7Ci0gICAgICAgIGZpbmFsIFN0cmluZyBpZCA9IGJ1bmRsZS5nZXRTdHJpbmcoS0VZX0lEKTsKLSAgICAgICAgZmluYWwgSUJpbmRlciBzZXNzaW9uQmluZGVyID0gYnVuZGxlLmdldEJpbmRlcihLRVlfU0VTU0lPTl9CSU5ERVIpOwotCi0gICAgICAgIC8vIFNhbml0eSBjaGVjay4KLSAgICAgICAgc3dpdGNoICh0eXBlKSB7Ci0gICAgICAgICAgICBjYXNlIFRZUEVfU0VTU0lPTjoKLSAgICAgICAgICAgICAgICBpZiAoc2Vzc2lvbkJpbmRlciA9PSBudWxsKSB7Ci0gICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oIlVuZXhwZWN0ZWQgc2Vzc2lvbkJpbmRlciBmb3Igc2Vzc2lvbiwiCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgKyAiIGJpbmRlcj0iICsgc2Vzc2lvbkJpbmRlcik7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgY2FzZSBUWVBFX1NFU1NJT05fU0VSVklDRToKLSAgICAgICAgICAgIGNhc2UgVFlQRV9MSUJSQVJZX1NFUlZJQ0U6Ci0gICAgICAgICAgICAgICAgaWYgKFRleHRVdGlscy5pc0VtcHR5KHNlcnZpY2VOYW1lKSkgewotICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKCJTZXNzaW9uIHNlcnZpY2UgbmVlZHMgc2VydmljZSBuYW1lIik7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgICB0aHJvdyBuZXcgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKCJJbnZhbGlkIHR5cGUiKTsKLSAgICAgICAgfQotICAgICAgICBpZiAoVGV4dFV0aWxzLmlzRW1wdHkocGFja2FnZU5hbWUpIHx8IGlkID09IG51bGwpIHsKLSAgICAgICAgICAgIHRocm93IG5ldyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oIlBhY2thZ2UgbmFtZSBub3IgSUQgY2Fubm90IGJlIG51bGwuIik7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIG5ldyBTZXNzaW9uVG9rZW4ySW1wbCh1aWQsIHR5cGUsIHBhY2thZ2VOYW1lLCBzZXJ2aWNlTmFtZSwgaWQsCi0gICAgICAgICAgICAgICAgc2Vzc2lvbkJpbmRlciAhPSBudWxsID8gSU1lZGlhU2Vzc2lvbjIuU3R1Yi5hc0ludGVyZmFjZShzZXNzaW9uQmluZGVyKSA6IG51bGwpCi0gICAgICAgICAgICAgICAgLmdldEluc3RhbmNlKCk7Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIEJ1bmRsZSB0b0J1bmRsZV9pbXBsKCkgewotICAgICAgICBCdW5kbGUgYnVuZGxlID0gbmV3IEJ1bmRsZSgpOwotICAgICAgICBidW5kbGUucHV0SW50KEtFWV9VSUQsIG1VaWQpOwotICAgICAgICBidW5kbGUucHV0U3RyaW5nKEtFWV9QQUNLQUdFX05BTUUsIG1QYWNrYWdlTmFtZSk7Ci0gICAgICAgIGJ1bmRsZS5wdXRTdHJpbmcoS0VZX1NFUlZJQ0VfTkFNRSwgbVNlcnZpY2VOYW1lKTsKLSAgICAgICAgYnVuZGxlLnB1dFN0cmluZyhLRVlfSUQsIG1JZCk7Ci0gICAgICAgIGJ1bmRsZS5wdXRJbnQoS0VZX1RZUEUsIG1UeXBlKTsKLSAgICAgICAgYnVuZGxlLnB1dEJpbmRlcihLRVlfU0VTU0lPTl9CSU5ERVIsCi0gICAgICAgICAgICAgICAgbVNlc3Npb25CaW5kZXIgIT0gbnVsbCA/IG1TZXNzaW9uQmluZGVyLmFzQmluZGVyKCkgOiBudWxsKTsKLSAgICAgICAgcmV0dXJuIGJ1bmRsZTsKLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgaW50IGhhc2hDb2RlX2ltcGwoKSB7Ci0gICAgICAgIGZpbmFsIGludCBwcmltZSA9IDMxOwotICAgICAgICByZXR1cm4gbVR5cGUKLSAgICAgICAgICAgICAgICArIHByaW1lICogKG1VaWQKLSAgICAgICAgICAgICAgICArIHByaW1lICogKG1QYWNrYWdlTmFtZS5oYXNoQ29kZSgpCi0gICAgICAgICAgICAgICAgKyBwcmltZSAqIChtSWQuaGFzaENvZGUoKQotICAgICAgICAgICAgICAgICsgcHJpbWUgKiAobVNlcnZpY2VOYW1lICE9IG51bGwgPyBtU2VydmljZU5hbWUuaGFzaENvZGUoKSA6IDApKSkpOwotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyBib29sZWFuIGVxdWFsc19pbXBsKE9iamVjdCBvYmopIHsKLSAgICAgICAgaWYgKCEob2JqIGluc3RhbmNlb2YgU2Vzc2lvblRva2VuMikpIHsKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgfQotICAgICAgICBTZXNzaW9uVG9rZW4ySW1wbCBvdGhlciA9IGZyb20oKFNlc3Npb25Ub2tlbjIpIG9iaik7Ci0gICAgICAgIHJldHVybiBtVWlkID09IG90aGVyLm1VaWQKLSAgICAgICAgICAgICAgICAmJiBUZXh0VXRpbHMuZXF1YWxzKG1QYWNrYWdlTmFtZSwgb3RoZXIubVBhY2thZ2VOYW1lKQotICAgICAgICAgICAgICAgICYmIFRleHRVdGlscy5lcXVhbHMobVNlcnZpY2VOYW1lLCBvdGhlci5tU2VydmljZU5hbWUpCi0gICAgICAgICAgICAgICAgJiYgVGV4dFV0aWxzLmVxdWFscyhtSWQsIG90aGVyLm1JZCkKLSAgICAgICAgICAgICAgICAmJiBtVHlwZSA9PSBvdGhlci5tVHlwZTsKLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgU3RyaW5nIHRvU3RyaW5nX2ltcGwoKSB7Ci0gICAgICAgIHJldHVybiAiU2Vzc2lvblRva2VuIHtwa2c9IiArIG1QYWNrYWdlTmFtZSArICIgaWQ9IiArIG1JZCArICIgdHlwZT0iICsgbVR5cGUKLSAgICAgICAgICAgICAgICArICIgc2VydmljZT0iICsgbVNlcnZpY2VOYW1lICsgIiBiaW5kZXI9IiArIG1TZXNzaW9uQmluZGVyICsgIn0iOwotICAgIH0KLQotICAgIHN0YXRpYyBTZXNzaW9uVG9rZW4ySW1wbCBmcm9tKFNlc3Npb25Ub2tlbjIgdG9rZW4pIHsKLSAgICAgICAgcmV0dXJuICgoU2Vzc2lvblRva2VuMkltcGwpIHRva2VuLmdldFByb3ZpZGVyKCkpOwotICAgIH0KLX0KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL01lZGlhQ29tcG9uZW50cy9zcmMvY29tL2FuZHJvaWQvbWVkaWEvVm9sdW1lUHJvdmlkZXIySW1wbC5qYXZhIGIvcGFja2FnZXMvTWVkaWFDb21wb25lbnRzL3NyYy9jb20vYW5kcm9pZC9tZWRpYS9Wb2x1bWVQcm92aWRlcjJJbXBsLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGJmMjJlMWIuLjAwMDAwMDAKLS0tIGEvcGFja2FnZXMvTWVkaWFDb21wb25lbnRzL3NyYy9jb20vYW5kcm9pZC9tZWRpYS9Wb2x1bWVQcm92aWRlcjJJbXBsLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw5MyArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IDIwMTggVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAotICoKLSAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwotICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgotICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0gKgotICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLSAqCi0gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCi0gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAotICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCi0gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCi0gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KLSAqLwotcGFja2FnZSBjb20uYW5kcm9pZC5tZWRpYTsKLQotaW1wb3J0IHN0YXRpYyBhbmRyb2lkLm1lZGlhLlZvbHVtZVByb3ZpZGVyMi5WT0xVTUVfQ09OVFJPTF9BQlNPTFVURTsKLWltcG9ydCBzdGF0aWMgYW5kcm9pZC5tZWRpYS5Wb2x1bWVQcm92aWRlcjIuVk9MVU1FX0NPTlRST0xfRklYRUQ7Ci1pbXBvcnQgc3RhdGljIGFuZHJvaWQubWVkaWEuVm9sdW1lUHJvdmlkZXIyLlZPTFVNRV9DT05UUk9MX1JFTEFUSVZFOwotCi1pbXBvcnQgYW5kcm9pZC5tZWRpYS5Wb2x1bWVQcm92aWRlcjI7Ci1pbXBvcnQgYW5kcm9pZC5tZWRpYS51cGRhdGUuVm9sdW1lUHJvdmlkZXIyUHJvdmlkZXI7Ci0KLXB1YmxpYyBjbGFzcyBWb2x1bWVQcm92aWRlcjJJbXBsIGltcGxlbWVudHMgVm9sdW1lUHJvdmlkZXIyUHJvdmlkZXIgewotICAgIHByaXZhdGUgZmluYWwgVm9sdW1lUHJvdmlkZXIyIG1JbnN0YW5jZTsKLSAgICBwcml2YXRlIGZpbmFsIGludCBtQ29udHJvbFR5cGU7Ci0gICAgcHJpdmF0ZSBmaW5hbCBpbnQgbU1heFZvbHVtZTsKLQotICAgIHByaXZhdGUgaW50IG1DdXJyZW50Vm9sdW1lOwotICAgIHByaXZhdGUgQ2FsbGJhY2sgbUNhbGxiYWNrOwotCi0gICAgcHVibGljIFZvbHVtZVByb3ZpZGVyMkltcGwoVm9sdW1lUHJvdmlkZXIyIGluc3RhbmNlLAotICAgICAgICAgICAgQFZvbHVtZVByb3ZpZGVyMi5Db250cm9sVHlwZSBpbnQgY29udHJvbFR5cGUsIGludCBtYXhWb2x1bWUsIGludCBjdXJyZW50Vm9sdW1lKSB7Ci0gICAgICAgIGlmIChjb250cm9sVHlwZSAhPSBWT0xVTUVfQ09OVFJPTF9GSVhFRCAmJiBjb250cm9sVHlwZSAhPSBWT0xVTUVfQ09OVFJPTF9SRUxBVElWRQotICAgICAgICAgICAgICAgICYmIGNvbnRyb2xUeXBlICE9IFZPTFVNRV9DT05UUk9MX0FCU09MVVRFKSB7Ci0gICAgICAgICAgICB0aHJvdyBuZXcgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKCJ3cm9uZyBjb250cm9sVHlwZSAiICsgY29udHJvbFR5cGUpOwotICAgICAgICB9Ci0gICAgICAgIGlmIChtYXhWb2x1bWUgPCAwIHx8IGN1cnJlbnRWb2x1bWUgPCAwKSB7Ci0gICAgICAgICAgICB0aHJvdyBuZXcgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKCJ2b2x1bWUgc2hvdWxkbid0IGJlIG5lZ2F0aXZlIgotICAgICAgICAgICAgICAgICAgICArICIsIG1heFZvbHVtZT0iICsgbWF4Vm9sdW1lICsgIiwgY3VycmVudFZvbHVtZT0iICsgY3VycmVudFZvbHVtZSk7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKGN1cnJlbnRWb2x1bWUgPiBtYXhWb2x1bWUpIHsKLSAgICAgICAgICAgIHRocm93IG5ldyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oImN1cnJlbnRWb2x1bWUgc2hvdWxkbid0IGJlIGdyZWF0ZXIgdGhhbiBtYXhWb2x1bWUiCi0gICAgICAgICAgICAgICAgICAgICsgIiwgbWF4Vm9sdW1lPSIgKyBtYXhWb2x1bWUgKyAiLCBjdXJyZW50Vm9sdW1lPSIgKyBjdXJyZW50Vm9sdW1lKTsKLSAgICAgICAgfQotICAgICAgICBtSW5zdGFuY2UgPSBpbnN0YW5jZTsKLSAgICAgICAgbUNvbnRyb2xUeXBlID0gY29udHJvbFR5cGU7Ci0gICAgICAgIG1NYXhWb2x1bWUgPSBtYXhWb2x1bWU7Ci0gICAgICAgIG1DdXJyZW50Vm9sdW1lID0gY3VycmVudFZvbHVtZTsKLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgaW50IGdldENvbnRyb2xUeXBlX2ltcGwoKSB7Ci0gICAgICAgIHJldHVybiBtQ29udHJvbFR5cGU7Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIGludCBnZXRNYXhWb2x1bWVfaW1wbCgpIHsKLSAgICAgICAgcmV0dXJuIG1NYXhWb2x1bWU7Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIGludCBnZXRDdXJyZW50Vm9sdW1lX2ltcGwoKSB7Ci0gICAgICAgIHJldHVybiBtQ3VycmVudFZvbHVtZTsKLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgdm9pZCBzZXRDdXJyZW50Vm9sdW1lX2ltcGwoaW50IGN1cnJlbnRWb2x1bWUpIHsKLSAgICAgICAgaWYgKGN1cnJlbnRWb2x1bWUgPCAwKSB7Ci0gICAgICAgICAgICB0aHJvdyBuZXcgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKCJjdXJyZW50Vm9sdW1lIHNob3VsZG4ndCBiZSBuZWdhdGl2ZSIKLSAgICAgICAgICAgICAgICAgICAgKyAiLCBjdXJyZW50Vm9sdW1lPSIgKyBjdXJyZW50Vm9sdW1lKTsKLSAgICAgICAgfQotICAgICAgICBtQ3VycmVudFZvbHVtZSA9IGN1cnJlbnRWb2x1bWU7Ci0gICAgICAgIGlmIChtQ2FsbGJhY2sgIT0gbnVsbCkgewotICAgICAgICAgICAgbUNhbGxiYWNrLm9uVm9sdW1lQ2hhbmdlZChtSW5zdGFuY2UpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogU2V0cyBhIGNhbGxiYWNrIHRvIHJlY2VpdmUgdm9sdW1lIGNoYW5nZXMuCi0gICAgICovCi0gICAgcHVibGljIHZvaWQgc2V0Q2FsbGJhY2soQ2FsbGJhY2sgY2FsbGJhY2spIHsKLSAgICAgICAgbUNhbGxiYWNrID0gY2FsbGJhY2s7Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogTGlzdGVucyBmb3IgY2hhbmdlcyB0byB0aGUgdm9sdW1lLgotICAgICAqLwotICAgIHB1YmxpYyBzdGF0aWMgYWJzdHJhY3QgY2xhc3MgQ2FsbGJhY2sgewotICAgICAgICBwdWJsaWMgYWJzdHJhY3Qgdm9pZCBvblZvbHVtZUNoYW5nZWQoVm9sdW1lUHJvdmlkZXIyIHZvbHVtZVByb3ZpZGVyKTsKLSAgICB9Ci19CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9NZWRpYUNvbXBvbmVudHMvc3JjL2NvbS9hbmRyb2lkL21lZGlhL3N1YnRpdGxlL0Nsb3NlZENhcHRpb25SZW5kZXJlci5qYXZhIGIvcGFja2FnZXMvTWVkaWFDb21wb25lbnRzL3NyYy9jb20vYW5kcm9pZC9tZWRpYS9zdWJ0aXRsZS9DbG9zZWRDYXB0aW9uUmVuZGVyZXIuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZmY3ZWVjOS4uMDAwMDAwMAotLS0gYS9wYWNrYWdlcy9NZWRpYUNvbXBvbmVudHMvc3JjL2NvbS9hbmRyb2lkL21lZGlhL3N1YnRpdGxlL0Nsb3NlZENhcHRpb25SZW5kZXJlci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTUwMSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IDIwMTggVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAotICoKLSAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwotICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgotICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0gKgotICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLSAqCi0gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCi0gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAotICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCi0gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCi0gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KLSAqLwotCi1wYWNrYWdlIGNvbS5hbmRyb2lkLm1lZGlhLnN1YnRpdGxlOwotCi1pbXBvcnQgYW5kcm9pZC5jb250ZW50LkNvbnRleHQ7Ci1pbXBvcnQgYW5kcm9pZC5jb250ZW50LnJlcy5SZXNvdXJjZXM7Ci1pbXBvcnQgYW5kcm9pZC5ncmFwaGljcy5DYW52YXM7Ci1pbXBvcnQgYW5kcm9pZC5ncmFwaGljcy5Db2xvcjsKLWltcG9ydCBhbmRyb2lkLmdyYXBoaWNzLlBhaW50OwotaW1wb3J0IGFuZHJvaWQuZ3JhcGhpY3MuUmVjdDsKLWltcG9ydCBhbmRyb2lkLmdyYXBoaWNzLlR5cGVmYWNlOwotaW1wb3J0IGFuZHJvaWQubWVkaWEuTWVkaWFGb3JtYXQ7Ci1pbXBvcnQgYW5kcm9pZC50ZXh0LlNwYW5uYWJsZTsKLWltcG9ydCBhbmRyb2lkLnRleHQuU3Bhbm5hYmxlU3RyaW5nQnVpbGRlcjsKLWltcG9ydCBhbmRyb2lkLnRleHQuVGV4dFBhaW50OwotaW1wb3J0IGFuZHJvaWQudGV4dC5zdHlsZS5DaGFyYWN0ZXJTdHlsZTsKLWltcG9ydCBhbmRyb2lkLnRleHQuc3R5bGUuU3R5bGVTcGFuOwotaW1wb3J0IGFuZHJvaWQudGV4dC5zdHlsZS5VbmRlcmxpbmVTcGFuOwotaW1wb3J0IGFuZHJvaWQudGV4dC5zdHlsZS5VcGRhdGVBcHBlYXJhbmNlOwotaW1wb3J0IGFuZHJvaWQudXRpbC5BdHRyaWJ1dGVTZXQ7Ci1pbXBvcnQgYW5kcm9pZC51dGlsLkxvZzsKLWltcG9ydCBhbmRyb2lkLnV0aWwuVHlwZWRWYWx1ZTsKLWltcG9ydCBhbmRyb2lkLnZpZXcuR3Jhdml0eTsKLWltcG9ydCBhbmRyb2lkLnZpZXcuVmlldzsKLWltcG9ydCBhbmRyb2lkLnZpZXcuVmlld0dyb3VwOwotaW1wb3J0IGFuZHJvaWQudmlldy5hY2Nlc3NpYmlsaXR5LkNhcHRpb25pbmdNYW5hZ2VyOwotaW1wb3J0IGFuZHJvaWQudmlldy5hY2Nlc3NpYmlsaXR5LkNhcHRpb25pbmdNYW5hZ2VyLkNhcHRpb25TdHlsZTsKLWltcG9ydCBhbmRyb2lkLnZpZXcuYWNjZXNzaWJpbGl0eS5DYXB0aW9uaW5nTWFuYWdlci5DYXB0aW9uaW5nQ2hhbmdlTGlzdGVuZXI7Ci1pbXBvcnQgYW5kcm9pZC53aWRnZXQuTGluZWFyTGF5b3V0OwotaW1wb3J0IGFuZHJvaWQud2lkZ2V0LlRleHRWaWV3OwotCi1pbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKLWltcG9ydCBqYXZhLnV0aWwuQXJyYXlzOwotaW1wb3J0IGphdmEudXRpbC5WZWN0b3I7Ci0KLS8vIE5vdGU6IFRoaXMgaXMgZm9ya2VkIGZyb20gYW5kcm9pZC5tZWRpYS5DbG9zZWRDYXB0aW9uUmVuZGVyZXIgc2luY2UgUAotcHVibGljIGNsYXNzIENsb3NlZENhcHRpb25SZW5kZXJlciBleHRlbmRzIFN1YnRpdGxlQ29udHJvbGxlci5SZW5kZXJlciB7Ci0gICAgcHJpdmF0ZSBmaW5hbCBDb250ZXh0IG1Db250ZXh0OwotICAgIHByaXZhdGUgQ2VhNjA4Q0NXaWRnZXQgbUNDV2lkZ2V0OwotCi0gICAgcHVibGljIENsb3NlZENhcHRpb25SZW5kZXJlcihDb250ZXh0IGNvbnRleHQpIHsKLSAgICAgICAgbUNvbnRleHQgPSBjb250ZXh0OwotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyBib29sZWFuIHN1cHBvcnRzKE1lZGlhRm9ybWF0IGZvcm1hdCkgewotICAgICAgICBpZiAoZm9ybWF0LmNvbnRhaW5zS2V5KE1lZGlhRm9ybWF0LktFWV9NSU1FKSkgewotICAgICAgICAgICAgU3RyaW5nIG1pbWVUeXBlID0gZm9ybWF0LmdldFN0cmluZyhNZWRpYUZvcm1hdC5LRVlfTUlNRSk7Ci0gICAgICAgICAgICByZXR1cm4gTWVkaWFGb3JtYXQuTUlNRVRZUEVfVEVYVF9DRUFfNjA4LmVxdWFscyhtaW1lVHlwZSk7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyBTdWJ0aXRsZVRyYWNrIGNyZWF0ZVRyYWNrKE1lZGlhRm9ybWF0IGZvcm1hdCkgewotICAgICAgICBTdHJpbmcgbWltZVR5cGUgPSBmb3JtYXQuZ2V0U3RyaW5nKE1lZGlhRm9ybWF0LktFWV9NSU1FKTsKLSAgICAgICAgaWYgKE1lZGlhRm9ybWF0Lk1JTUVUWVBFX1RFWFRfQ0VBXzYwOC5lcXVhbHMobWltZVR5cGUpKSB7Ci0gICAgICAgICAgICBpZiAobUNDV2lkZ2V0ID09IG51bGwpIHsKLSAgICAgICAgICAgICAgICBtQ0NXaWRnZXQgPSBuZXcgQ2VhNjA4Q0NXaWRnZXQobUNvbnRleHQpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgcmV0dXJuIG5ldyBDZWE2MDhDYXB0aW9uVHJhY2sobUNDV2lkZ2V0LCBmb3JtYXQpOwotICAgICAgICB9Ci0gICAgICAgIHRocm93IG5ldyBSdW50aW1lRXhjZXB0aW9uKCJObyBtYXRjaGluZyBmb3JtYXQ6ICIgKyBmb3JtYXQudG9TdHJpbmcoKSk7Ci0gICAgfQotfQotCi1jbGFzcyBDZWE2MDhDYXB0aW9uVHJhY2sgZXh0ZW5kcyBTdWJ0aXRsZVRyYWNrIHsKLSAgICBwcml2YXRlIGZpbmFsIENlYTYwOENDUGFyc2VyIG1DQ1BhcnNlcjsKLSAgICBwcml2YXRlIGZpbmFsIENlYTYwOENDV2lkZ2V0IG1SZW5kZXJpbmdXaWRnZXQ7Ci0KLSAgICBDZWE2MDhDYXB0aW9uVHJhY2soQ2VhNjA4Q0NXaWRnZXQgcmVuZGVyaW5nV2lkZ2V0LCBNZWRpYUZvcm1hdCBmb3JtYXQpIHsKLSAgICAgICAgc3VwZXIoZm9ybWF0KTsKLQotICAgICAgICBtUmVuZGVyaW5nV2lkZ2V0ID0gcmVuZGVyaW5nV2lkZ2V0OwotICAgICAgICBtQ0NQYXJzZXIgPSBuZXcgQ2VhNjA4Q0NQYXJzZXIobVJlbmRlcmluZ1dpZGdldCk7Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIHZvaWQgb25EYXRhKGJ5dGVbXSBkYXRhLCBib29sZWFuIGVvcywgbG9uZyBydW5JRCkgewotICAgICAgICBtQ0NQYXJzZXIucGFyc2UoZGF0YSk7Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIFJlbmRlcmluZ1dpZGdldCBnZXRSZW5kZXJpbmdXaWRnZXQoKSB7Ci0gICAgICAgIHJldHVybiBtUmVuZGVyaW5nV2lkZ2V0OwotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyB2b2lkIHVwZGF0ZVZpZXcoVmVjdG9yPEN1ZT4gYWN0aXZlQ3VlcykgewotICAgICAgICAvLyBPdmVycmlkaW5nIHdpdGggTk8tT1AsIENDIHJlbmRlcmluZyBieS1wYXNzZXMgdGhpcwotICAgIH0KLX0KLQotLyoqCi0gKiBBYnN0cmFjdCB3aWRnZXQgY2xhc3MgdG8gcmVuZGVyIGEgY2xvc2VkIGNhcHRpb24gdHJhY2suCi0gKi8KLWFic3RyYWN0IGNsYXNzIENsb3NlZENhcHRpb25XaWRnZXQgZXh0ZW5kcyBWaWV3R3JvdXAgaW1wbGVtZW50cyBTdWJ0aXRsZVRyYWNrLlJlbmRlcmluZ1dpZGdldCB7Ci0KLSAgICBpbnRlcmZhY2UgQ2xvc2VkQ2FwdGlvbkxheW91dCB7Ci0gICAgICAgIHZvaWQgc2V0Q2FwdGlvblN0eWxlKENhcHRpb25TdHlsZSBjYXB0aW9uU3R5bGUpOwotICAgICAgICB2b2lkIHNldEZvbnRTY2FsZShmbG9hdCBzY2FsZSk7Ci0gICAgfQotCi0gICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgQ2FwdGlvblN0eWxlIERFRkFVTFRfQ0FQVElPTl9TVFlMRSA9IENhcHRpb25TdHlsZS5ERUZBVUxUOwotCi0gICAgLyoqIENhcHRpb25pbmcgbWFuYWdlciwgdXNlZCB0byBvYnRhaW4gYW5kIHRyYWNrIGNhcHRpb24gcHJvcGVydGllcy4gKi8KLSAgICBwcml2YXRlIGZpbmFsIENhcHRpb25pbmdNYW5hZ2VyIG1NYW5hZ2VyOwotCi0gICAgLyoqIEN1cnJlbnQgY2FwdGlvbiBzdHlsZS4gKi8KLSAgICBwcm90ZWN0ZWQgQ2FwdGlvblN0eWxlIG1DYXB0aW9uU3R5bGU7Ci0KLSAgICAvKiogQ2FsbGJhY2sgZm9yIHJlbmRlcmluZyBjaGFuZ2VzLiAqLwotICAgIHByb3RlY3RlZCBPbkNoYW5nZWRMaXN0ZW5lciBtTGlzdGVuZXI7Ci0KLSAgICAvKiogQ29uY3JldGUgbGF5b3V0IG9mIENDLiAqLwotICAgIHByb3RlY3RlZCBDbG9zZWRDYXB0aW9uTGF5b3V0IG1DbG9zZWRDYXB0aW9uTGF5b3V0OwotCi0gICAgLyoqIFdoZXRoZXIgYSBjYXB0aW9uIHN0eWxlIGNoYW5nZSBsaXN0ZW5lciBpcyByZWdpc3RlcmVkLiAqLwotICAgIHByaXZhdGUgYm9vbGVhbiBtSGFzQ2hhbmdlTGlzdGVuZXI7Ci0KLSAgICBwdWJsaWMgQ2xvc2VkQ2FwdGlvbldpZGdldChDb250ZXh0IGNvbnRleHQpIHsKLSAgICAgICAgdGhpcyhjb250ZXh0LCBudWxsKTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgQ2xvc2VkQ2FwdGlvbldpZGdldChDb250ZXh0IGNvbnRleHQsIEF0dHJpYnV0ZVNldCBhdHRycykgewotICAgICAgICB0aGlzKGNvbnRleHQsIGF0dHJzLCAwKTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgQ2xvc2VkQ2FwdGlvbldpZGdldChDb250ZXh0IGNvbnRleHQsIEF0dHJpYnV0ZVNldCBhdHRycywgaW50IGRlZlN0eWxlKSB7Ci0gICAgICAgIHRoaXMoY29udGV4dCwgYXR0cnMsIGRlZlN0eWxlLCAwKTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgQ2xvc2VkQ2FwdGlvbldpZGdldChDb250ZXh0IGNvbnRleHQsIEF0dHJpYnV0ZVNldCBhdHRycywgaW50IGRlZlN0eWxlQXR0ciwKLSAgICAgICAgICAgIGludCBkZWZTdHlsZVJlcykgewotICAgICAgICBzdXBlcihjb250ZXh0LCBhdHRycywgZGVmU3R5bGVBdHRyLCBkZWZTdHlsZVJlcyk7Ci0KLSAgICAgICAgLy8gQ2Fubm90IHJlbmRlciB0ZXh0IG92ZXIgdmlkZW8gd2hlbiBsYXllciB0eXBlIGlzIGhhcmR3YXJlLgotICAgICAgICBzZXRMYXllclR5cGUoVmlldy5MQVlFUl9UWVBFX1NPRlRXQVJFLCBudWxsKTsKLQotICAgICAgICBtTWFuYWdlciA9IChDYXB0aW9uaW5nTWFuYWdlcikgY29udGV4dC5nZXRTeXN0ZW1TZXJ2aWNlKENvbnRleHQuQ0FQVElPTklOR19TRVJWSUNFKTsKLSAgICAgICAgbUNhcHRpb25TdHlsZSA9IERFRkFVTFRfQ0FQVElPTl9TVFlMRS5hcHBseVN0eWxlKG1NYW5hZ2VyLmdldFVzZXJTdHlsZSgpKTsKLQotICAgICAgICBtQ2xvc2VkQ2FwdGlvbkxheW91dCA9IGNyZWF0ZUNhcHRpb25MYXlvdXQoY29udGV4dCk7Ci0gICAgICAgIG1DbG9zZWRDYXB0aW9uTGF5b3V0LnNldENhcHRpb25TdHlsZShtQ2FwdGlvblN0eWxlKTsKLSAgICAgICAgbUNsb3NlZENhcHRpb25MYXlvdXQuc2V0Rm9udFNjYWxlKG1NYW5hZ2VyLmdldEZvbnRTY2FsZSgpKTsKLSAgICAgICAgYWRkVmlldygoVmlld0dyb3VwKSBtQ2xvc2VkQ2FwdGlvbkxheW91dCwgTGF5b3V0UGFyYW1zLk1BVENIX1BBUkVOVCwKLSAgICAgICAgICAgICAgICBMYXlvdXRQYXJhbXMuTUFUQ0hfUEFSRU5UKTsKLQotICAgICAgICByZXF1ZXN0TGF5b3V0KCk7Ci0gICAgfQotCi0gICAgcHVibGljIGFic3RyYWN0IENsb3NlZENhcHRpb25MYXlvdXQgY3JlYXRlQ2FwdGlvbkxheW91dChDb250ZXh0IGNvbnRleHQpOwotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIHZvaWQgc2V0T25DaGFuZ2VkTGlzdGVuZXIoT25DaGFuZ2VkTGlzdGVuZXIgbGlzdGVuZXIpIHsKLSAgICAgICAgbUxpc3RlbmVyID0gbGlzdGVuZXI7Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIHZvaWQgc2V0U2l6ZShpbnQgd2lkdGgsIGludCBoZWlnaHQpIHsKLSAgICAgICAgZmluYWwgaW50IHdpZHRoU3BlYyA9IE1lYXN1cmVTcGVjLm1ha2VNZWFzdXJlU3BlYyh3aWR0aCwgTWVhc3VyZVNwZWMuRVhBQ1RMWSk7Ci0gICAgICAgIGZpbmFsIGludCBoZWlnaHRTcGVjID0gTWVhc3VyZVNwZWMubWFrZU1lYXN1cmVTcGVjKGhlaWdodCwgTWVhc3VyZVNwZWMuRVhBQ1RMWSk7Ci0KLSAgICAgICAgbWVhc3VyZSh3aWR0aFNwZWMsIGhlaWdodFNwZWMpOwotICAgICAgICBsYXlvdXQoMCwgMCwgd2lkdGgsIGhlaWdodCk7Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIHZvaWQgc2V0VmlzaWJsZShib29sZWFuIHZpc2libGUpIHsKLSAgICAgICAgaWYgKHZpc2libGUpIHsKLSAgICAgICAgICAgIHNldFZpc2liaWxpdHkoVmlldy5WSVNJQkxFKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIHNldFZpc2liaWxpdHkoVmlldy5HT05FKTsKLSAgICAgICAgfQotCi0gICAgICAgIG1hbmFnZUNoYW5nZUxpc3RlbmVyKCk7Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIHZvaWQgb25BdHRhY2hlZFRvV2luZG93KCkgewotICAgICAgICBzdXBlci5vbkF0dGFjaGVkVG9XaW5kb3coKTsKLQotICAgICAgICBtYW5hZ2VDaGFuZ2VMaXN0ZW5lcigpOwotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyB2b2lkIG9uRGV0YWNoZWRGcm9tV2luZG93KCkgewotICAgICAgICBzdXBlci5vbkRldGFjaGVkRnJvbVdpbmRvdygpOwotCi0gICAgICAgIG1hbmFnZUNoYW5nZUxpc3RlbmVyKCk7Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHJvdGVjdGVkIHZvaWQgb25NZWFzdXJlKGludCB3aWR0aE1lYXN1cmVTcGVjLCBpbnQgaGVpZ2h0TWVhc3VyZVNwZWMpIHsKLSAgICAgICAgc3VwZXIub25NZWFzdXJlKHdpZHRoTWVhc3VyZVNwZWMsIGhlaWdodE1lYXN1cmVTcGVjKTsKLSAgICAgICAgKChWaWV3R3JvdXApIG1DbG9zZWRDYXB0aW9uTGF5b3V0KS5tZWFzdXJlKHdpZHRoTWVhc3VyZVNwZWMsIGhlaWdodE1lYXN1cmVTcGVjKTsKLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwcm90ZWN0ZWQgdm9pZCBvbkxheW91dChib29sZWFuIGNoYW5nZWQsIGludCBsLCBpbnQgdCwgaW50IHIsIGludCBiKSB7Ci0gICAgICAgICgoVmlld0dyb3VwKSBtQ2xvc2VkQ2FwdGlvbkxheW91dCkubGF5b3V0KGwsIHQsIHIsIGIpOwotICAgIH0KLQotICAgIC8qKgotICAgICAqIE1hbmFnZXMgd2hldGhlciB0aGlzIHJlbmRlcmVyIGlzIGxpc3RlbmluZyBmb3IgY2FwdGlvbiBzdHlsZSBjaGFuZ2VzLgotICAgICAqLwotICAgIHByaXZhdGUgZmluYWwgQ2FwdGlvbmluZ0NoYW5nZUxpc3RlbmVyIG1DYXB0aW9uaW5nTGlzdGVuZXIgPSBuZXcgQ2FwdGlvbmluZ0NoYW5nZUxpc3RlbmVyKCkgewotICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgcHVibGljIHZvaWQgb25Vc2VyU3R5bGVDaGFuZ2VkKENhcHRpb25TdHlsZSB1c2VyU3R5bGUpIHsKLSAgICAgICAgICAgIG1DYXB0aW9uU3R5bGUgPSBERUZBVUxUX0NBUFRJT05fU1RZTEUuYXBwbHlTdHlsZSh1c2VyU3R5bGUpOwotICAgICAgICAgICAgbUNsb3NlZENhcHRpb25MYXlvdXQuc2V0Q2FwdGlvblN0eWxlKG1DYXB0aW9uU3R5bGUpOwotICAgICAgICB9Ci0KLSAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgIHB1YmxpYyB2b2lkIG9uRm9udFNjYWxlQ2hhbmdlZChmbG9hdCBmb250U2NhbGUpIHsKLSAgICAgICAgICAgIG1DbG9zZWRDYXB0aW9uTGF5b3V0LnNldEZvbnRTY2FsZShmb250U2NhbGUpOwotICAgICAgICB9Ci0gICAgfTsKLQotICAgIHByaXZhdGUgdm9pZCBtYW5hZ2VDaGFuZ2VMaXN0ZW5lcigpIHsKLSAgICAgICAgZmluYWwgYm9vbGVhbiBuZWVkc0xpc3RlbmVyID0gaXNBdHRhY2hlZFRvV2luZG93KCkgJiYgZ2V0VmlzaWJpbGl0eSgpID09IFZpZXcuVklTSUJMRTsKLSAgICAgICAgaWYgKG1IYXNDaGFuZ2VMaXN0ZW5lciAhPSBuZWVkc0xpc3RlbmVyKSB7Ci0gICAgICAgICAgICBtSGFzQ2hhbmdlTGlzdGVuZXIgPSBuZWVkc0xpc3RlbmVyOwotCi0gICAgICAgICAgICBpZiAobmVlZHNMaXN0ZW5lcikgewotICAgICAgICAgICAgICAgIG1NYW5hZ2VyLmFkZENhcHRpb25pbmdDaGFuZ2VMaXN0ZW5lcihtQ2FwdGlvbmluZ0xpc3RlbmVyKTsKLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgbU1hbmFnZXIucmVtb3ZlQ2FwdGlvbmluZ0NoYW5nZUxpc3RlbmVyKG1DYXB0aW9uaW5nTGlzdGVuZXIpOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotfQotCi0vKioKLSAqIENDUGFyc2VyIHByb2Nlc3NlcyBDRUEtNjA4IGNsb3NlZCBjYXB0aW9uIGRhdGEuCi0gKgotICogSXQgY2FsbHMgYmFjayBpbnRvIE9uRGlzcGxheUNoYW5nZWRMaXN0ZW5lciB1cG9uCi0gKiBkaXNwbGF5IGNoYW5nZSB3aXRoIHN0eWxlZCB0ZXh0IGZvciByZW5kZXJpbmcuCi0gKgotICovCi1jbGFzcyBDZWE2MDhDQ1BhcnNlciB7Ci0gICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgTUFYX1JPV1MgPSAxNTsKLSAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBNQVhfQ09MUyA9IDMyOwotCi0gICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFRBRyA9ICJDZWE2MDhDQ1BhcnNlciI7Ci0gICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgYm9vbGVhbiBERUJVRyA9IExvZy5pc0xvZ2dhYmxlKFRBRywgTG9nLkRFQlVHKTsKLQotICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGludCBJTlZBTElEID0gLTE7Ci0KLSAgICAvLyBFSUEtQ0VBLTYwODogVGFibGUgNzAgLSBDb250cm9sIENvZGVzCi0gICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IFJDTCA9IDB4MjA7Ci0gICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IEJTICA9IDB4MjE7Ci0gICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IEFPRiA9IDB4MjI7Ci0gICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IEFPTiA9IDB4MjM7Ci0gICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IERFUiA9IDB4MjQ7Ci0gICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IFJVMiA9IDB4MjU7Ci0gICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IFJVMyA9IDB4MjY7Ci0gICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IFJVNCA9IDB4Mjc7Ci0gICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IEZPTiA9IDB4Mjg7Ci0gICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IFJEQyA9IDB4Mjk7Ci0gICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IFRSICA9IDB4MmE7Ci0gICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IFJURCA9IDB4MmI7Ci0gICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IEVETSA9IDB4MmM7Ci0gICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IENSICA9IDB4MmQ7Ci0gICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IEVOTSA9IDB4MmU7Ci0gICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IEVPQyA9IDB4MmY7Ci0KLSAgICAvLyBUcmFuc3BhcmVudCBTcGFjZQotICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGNoYXIgVFMgPSAnXHUwMEEwJzsKLQotICAgIC8vIENhcHRpb25pbmcgTW9kZXMKLSAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgTU9ERV9VTktOT1dOID0gMDsKLSAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgTU9ERV9QQUlOVF9PTiA9IDE7Ci0gICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IE1PREVfUk9MTF9VUCA9IDI7Ci0gICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IE1PREVfUE9QX09OID0gMzsKLSAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgTU9ERV9URVhUID0gNDsKLQotICAgIHByaXZhdGUgZmluYWwgRGlzcGxheUxpc3RlbmVyIG1MaXN0ZW5lcjsKLQotICAgIHByaXZhdGUgaW50IG1Nb2RlID0gTU9ERV9QQUlOVF9PTjsKLSAgICBwcml2YXRlIGludCBtUm9sbFVwU2l6ZSA9IDQ7Ci0gICAgcHJpdmF0ZSBpbnQgbVByZXZDdHJsQ29kZSA9IElOVkFMSUQ7Ci0KLSAgICBwcml2YXRlIENDTWVtb3J5IG1EaXNwbGF5ID0gbmV3IENDTWVtb3J5KCk7Ci0gICAgcHJpdmF0ZSBDQ01lbW9yeSBtTm9uRGlzcGxheSA9IG5ldyBDQ01lbW9yeSgpOwotICAgIHByaXZhdGUgQ0NNZW1vcnkgbVRleHRNZW0gPSBuZXcgQ0NNZW1vcnkoKTsKLQotICAgIENlYTYwOENDUGFyc2VyKERpc3BsYXlMaXN0ZW5lciBsaXN0ZW5lcikgewotICAgICAgICBtTGlzdGVuZXIgPSBsaXN0ZW5lcjsKLSAgICB9Ci0KLSAgICBwdWJsaWMgdm9pZCBwYXJzZShieXRlW10gZGF0YSkgewotICAgICAgICBDQ0RhdGFbXSBjY0RhdGEgPSBDQ0RhdGEuZnJvbUJ5dGVBcnJheShkYXRhKTsKLQotICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGNjRGF0YS5sZW5ndGg7IGkrKykgewotICAgICAgICAgICAgaWYgKERFQlVHKSB7Ci0gICAgICAgICAgICAgICAgTG9nLmQoVEFHLCBjY0RhdGFbaV0udG9TdHJpbmcoKSk7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGlmIChoYW5kbGVDdHJsQ29kZShjY0RhdGFbaV0pCi0gICAgICAgICAgICAgICAgICAgIHx8IGhhbmRsZVRhYk9mZnNldHMoY2NEYXRhW2ldKQotICAgICAgICAgICAgICAgICAgICB8fCBoYW5kbGVQQUNDb2RlKGNjRGF0YVtpXSkKLSAgICAgICAgICAgICAgICAgICAgfHwgaGFuZGxlTWlkUm93Q29kZShjY0RhdGFbaV0pKSB7Ci0gICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGhhbmRsZURpc3BsYXlhYmxlQ2hhcnMoY2NEYXRhW2ldKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIGludGVyZmFjZSBEaXNwbGF5TGlzdGVuZXIgewotICAgICAgICB2b2lkIG9uRGlzcGxheUNoYW5nZWQoU3Bhbm5hYmxlU3RyaW5nQnVpbGRlcltdIHN0eWxlZFRleHRzKTsKLSAgICAgICAgQ2FwdGlvblN0eWxlIGdldENhcHRpb25TdHlsZSgpOwotICAgIH0KLQotICAgIHByaXZhdGUgQ0NNZW1vcnkgZ2V0TWVtb3J5KCkgewotICAgICAgICAvLyBnZXQgdGhlIENDIG1lbW9yeSB0byBvcGVyYXRlIG9uIGZvciBjdXJyZW50IG1vZGUKLSAgICAgICAgc3dpdGNoIChtTW9kZSkgewotICAgICAgICBjYXNlIE1PREVfUE9QX09OOgotICAgICAgICAgICAgcmV0dXJuIG1Ob25EaXNwbGF5OwotICAgICAgICBjYXNlIE1PREVfVEVYVDoKLSAgICAgICAgICAgIC8vIFRPRE8oY2h6KTogc3VwcG9ydCBvbmx5IGNhcHRpb24gbW9kZSBmb3Igbm93LAotICAgICAgICAgICAgLy8gaW4gdGV4dCBtb2RlLCBkdW1wIGV2ZXJ5dGhpbmcgdG8gdGV4dCBtZW0uCi0gICAgICAgICAgICByZXR1cm4gbVRleHRNZW07Ci0gICAgICAgIGNhc2UgTU9ERV9QQUlOVF9PTjoKLSAgICAgICAgY2FzZSBNT0RFX1JPTExfVVA6Ci0gICAgICAgICAgICByZXR1cm4gbURpc3BsYXk7Ci0gICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICBMb2cudyhUQUcsICJ1bnJlY29naW5pemVkIG1vZGU6ICIgKyBtTW9kZSk7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIG1EaXNwbGF5OwotICAgIH0KLQotICAgIHByaXZhdGUgYm9vbGVhbiBoYW5kbGVEaXNwbGF5YWJsZUNoYXJzKENDRGF0YSBjY0RhdGEpIHsKLSAgICAgICAgaWYgKCFjY0RhdGEuaXNEaXNwbGF5YWJsZUNoYXIoKSkgewotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9Ci0KLSAgICAgICAgLy8gRXh0ZW5kZWQgY2hhciBpbmNsdWRlcyAxIGF1dG9tYXRpYyBiYWNrc3BhY2UKLSAgICAgICAgaWYgKGNjRGF0YS5pc0V4dGVuZGVkQ2hhcigpKSB7Ci0gICAgICAgICAgICBnZXRNZW1vcnkoKS5icygpOwotICAgICAgICB9Ci0KLSAgICAgICAgZ2V0TWVtb3J5KCkud3JpdGVUZXh0KGNjRGF0YS5nZXREaXNwbGF5VGV4dCgpKTsKLQotICAgICAgICBpZiAobU1vZGUgPT0gTU9ERV9QQUlOVF9PTiB8fCBtTW9kZSA9PSBNT0RFX1JPTExfVVApIHsKLSAgICAgICAgICAgIHVwZGF0ZURpc3BsYXkoKTsKLSAgICAgICAgfQotCi0gICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLQotICAgIHByaXZhdGUgYm9vbGVhbiBoYW5kbGVNaWRSb3dDb2RlKENDRGF0YSBjY0RhdGEpIHsKLSAgICAgICAgU3R5bGVDb2RlIG0gPSBjY0RhdGEuZ2V0TWlkUm93KCk7Ci0gICAgICAgIGlmIChtICE9IG51bGwpIHsKLSAgICAgICAgICAgIGdldE1lbW9yeSgpLndyaXRlTWlkUm93Q29kZShtKTsKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICBwcml2YXRlIGJvb2xlYW4gaGFuZGxlUEFDQ29kZShDQ0RhdGEgY2NEYXRhKSB7Ci0gICAgICAgIFBBQyBwYWMgPSBjY0RhdGEuZ2V0UEFDKCk7Ci0KLSAgICAgICAgaWYgKHBhYyAhPSBudWxsKSB7Ci0gICAgICAgICAgICBpZiAobU1vZGUgPT0gTU9ERV9ST0xMX1VQKSB7Ci0gICAgICAgICAgICAgICAgZ2V0TWVtb3J5KCkubW92ZUJhc2VsaW5lVG8ocGFjLmdldFJvdygpLCBtUm9sbFVwU2l6ZSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBnZXRNZW1vcnkoKS53cml0ZVBBQyhwYWMpOwotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIH0KLQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgcHJpdmF0ZSBib29sZWFuIGhhbmRsZVRhYk9mZnNldHMoQ0NEYXRhIGNjRGF0YSkgewotICAgICAgICBpbnQgdGFicyA9IGNjRGF0YS5nZXRUYWJPZmZzZXQoKTsKLQotICAgICAgICBpZiAodGFicyA+IDApIHsKLSAgICAgICAgICAgIGdldE1lbW9yeSgpLnRhYih0YWJzKTsKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICB9Ci0KLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIHByaXZhdGUgYm9vbGVhbiBoYW5kbGVDdHJsQ29kZShDQ0RhdGEgY2NEYXRhKSB7Ci0gICAgICAgIGludCBjdHJsQ29kZSA9IGNjRGF0YS5nZXRDdHJsQ29kZSgpOwotCi0gICAgICAgIGlmIChtUHJldkN0cmxDb2RlICE9IElOVkFMSUQgJiYgbVByZXZDdHJsQ29kZSA9PSBjdHJsQ29kZSkgewotICAgICAgICAgICAgLy8gZGlzY2FyZCBkb3VibGUgY3RybCBjb2RlcyAoYnV0IGlmIHRoZXJlJ3MgYSAzcmQgb25lLCB3ZSBzdGlsbCB0YWtlIHRoYXQpCi0gICAgICAgICAgICBtUHJldkN0cmxDb2RlID0gSU5WQUxJRDsKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICB9Ci0KLSAgICAgICAgc3dpdGNoKGN0cmxDb2RlKSB7Ci0gICAgICAgIGNhc2UgUkNMOgotICAgICAgICAgICAgLy8gc2VsZWN0IHBvcC1vbiBzdHlsZQotICAgICAgICAgICAgbU1vZGUgPSBNT0RFX1BPUF9PTjsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEJTOgotICAgICAgICAgICAgZ2V0TWVtb3J5KCkuYnMoKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIERFUjoKLSAgICAgICAgICAgIGdldE1lbW9yeSgpLmRlcigpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgUlUyOgotICAgICAgICBjYXNlIFJVMzoKLSAgICAgICAgY2FzZSBSVTQ6Ci0gICAgICAgICAgICBtUm9sbFVwU2l6ZSA9IChjdHJsQ29kZSAtIDB4MjMpOwotICAgICAgICAgICAgLy8gZXJhc2UgbWVtb3J5IGlmIGN1cnJlbnRseSBpbiBvdGhlciBzdHlsZQotICAgICAgICAgICAgaWYgKG1Nb2RlICE9IE1PREVfUk9MTF9VUCkgewotICAgICAgICAgICAgICAgIG1EaXNwbGF5LmVyYXNlKCk7Ci0gICAgICAgICAgICAgICAgbU5vbkRpc3BsYXkuZXJhc2UoKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIC8vIHNlbGVjdCByb2xsLXVwIHN0eWxlCi0gICAgICAgICAgICBtTW9kZSA9IE1PREVfUk9MTF9VUDsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEZPTjoKLSAgICAgICAgICAgIExvZy5pKFRBRywgIkZsYXNoIE9uIik7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBSREM6Ci0gICAgICAgICAgICAvLyBzZWxlY3QgcGFpbnQtb24gc3R5bGUKLSAgICAgICAgICAgIG1Nb2RlID0gTU9ERV9QQUlOVF9PTjsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIFRSOgotICAgICAgICAgICAgbU1vZGUgPSBNT0RFX1RFWFQ7Ci0gICAgICAgICAgICBtVGV4dE1lbS5lcmFzZSgpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgUlREOgotICAgICAgICAgICAgbU1vZGUgPSBNT0RFX1RFWFQ7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBFRE06Ci0gICAgICAgICAgICAvLyBlcmFzZSBkaXNwbGF5IG1lbW9yeQotICAgICAgICAgICAgbURpc3BsYXkuZXJhc2UoKTsKLSAgICAgICAgICAgIHVwZGF0ZURpc3BsYXkoKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIENSOgotICAgICAgICAgICAgaWYgKG1Nb2RlID09IE1PREVfUk9MTF9VUCkgewotICAgICAgICAgICAgICAgIGdldE1lbW9yeSgpLnJvbGxVcChtUm9sbFVwU2l6ZSk7Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIGdldE1lbW9yeSgpLmNyKCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAobU1vZGUgPT0gTU9ERV9ST0xMX1VQKSB7Ci0gICAgICAgICAgICAgICAgdXBkYXRlRGlzcGxheSgpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgRU5NOgotICAgICAgICAgICAgLy8gZXJhc2Ugbm9uLWRpc3BsYXkgbWVtb3J5Ci0gICAgICAgICAgICBtTm9uRGlzcGxheS5lcmFzZSgpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgRU9DOgotICAgICAgICAgICAgLy8gc3dhcCBkaXNwbGF5L25vbi1kaXNwbGF5IG1lbW9yeQotICAgICAgICAgICAgc3dhcE1lbW9yeSgpOwotICAgICAgICAgICAgLy8gc3dpdGNoIHRvIHBvcC1vbiBzdHlsZQotICAgICAgICAgICAgbU1vZGUgPSBNT0RFX1BPUF9PTjsKLSAgICAgICAgICAgIHVwZGF0ZURpc3BsYXkoKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIElOVkFMSUQ6Ci0gICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICBtUHJldkN0cmxDb2RlID0gSU5WQUxJRDsKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgfQotCi0gICAgICAgIG1QcmV2Q3RybENvZGUgPSBjdHJsQ29kZTsKLQotICAgICAgICAvLyBoYW5kbGVkCi0gICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLQotICAgIHByaXZhdGUgdm9pZCB1cGRhdGVEaXNwbGF5KCkgewotICAgICAgICBpZiAobUxpc3RlbmVyICE9IG51bGwpIHsKLSAgICAgICAgICAgIENhcHRpb25TdHlsZSBjYXB0aW9uU3R5bGUgPSBtTGlzdGVuZXIuZ2V0Q2FwdGlvblN0eWxlKCk7Ci0gICAgICAgICAgICBtTGlzdGVuZXIub25EaXNwbGF5Q2hhbmdlZChtRGlzcGxheS5nZXRTdHlsZWRUZXh0KGNhcHRpb25TdHlsZSkpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgcHJpdmF0ZSB2b2lkIHN3YXBNZW1vcnkoKSB7Ci0gICAgICAgIENDTWVtb3J5IHRlbXAgPSBtRGlzcGxheTsKLSAgICAgICAgbURpc3BsYXkgPSBtTm9uRGlzcGxheTsKLSAgICAgICAgbU5vbkRpc3BsYXkgPSB0ZW1wOwotICAgIH0KLQotICAgIHByaXZhdGUgc3RhdGljIGNsYXNzIFN0eWxlQ29kZSB7Ci0gICAgICAgIHN0YXRpYyBmaW5hbCBpbnQgQ09MT1JfV0hJVEUgPSAwOwotICAgICAgICBzdGF0aWMgZmluYWwgaW50IENPTE9SX0dSRUVOID0gMTsKLSAgICAgICAgc3RhdGljIGZpbmFsIGludCBDT0xPUl9CTFVFID0gMjsKLSAgICAgICAgc3RhdGljIGZpbmFsIGludCBDT0xPUl9DWUFOID0gMzsKLSAgICAgICAgc3RhdGljIGZpbmFsIGludCBDT0xPUl9SRUQgPSA0OwotICAgICAgICBzdGF0aWMgZmluYWwgaW50IENPTE9SX1lFTExPVyA9IDU7Ci0gICAgICAgIHN0YXRpYyBmaW5hbCBpbnQgQ09MT1JfTUFHRU5UQSA9IDY7Ci0gICAgICAgIHN0YXRpYyBmaW5hbCBpbnQgQ09MT1JfSU5WQUxJRCA9IDc7Ci0KLSAgICAgICAgc3RhdGljIGZpbmFsIGludCBTVFlMRV9JVEFMSUNTICAgPSAweDAwMDAwMDAxOwotICAgICAgICBzdGF0aWMgZmluYWwgaW50IFNUWUxFX1VOREVSTElORSA9IDB4MDAwMDAwMDI7Ci0KLSAgICAgICAgc3RhdGljIGZpbmFsIFN0cmluZ1tdIG1Db2xvck1hcCA9IHsKLSAgICAgICAgICAgICJXSElURSIsICJHUkVFTiIsICJCTFVFIiwgIkNZQU4iLCAiUkVEIiwgIllFTExPVyIsICJNQUdFTlRBIiwgIklOVkFMSUQiCi0gICAgICAgIH07Ci0KLSAgICAgICAgZmluYWwgaW50IG1TdHlsZTsKLSAgICAgICAgZmluYWwgaW50IG1Db2xvcjsKLQotICAgICAgICBzdGF0aWMgU3R5bGVDb2RlIGZyb21CeXRlKGJ5dGUgZGF0YTIpIHsKLSAgICAgICAgICAgIGludCBzdHlsZSA9IDA7Ci0gICAgICAgICAgICBpbnQgY29sb3IgPSAoZGF0YTIgPj4gMSkgJiAweDc7Ci0KLSAgICAgICAgICAgIGlmICgoZGF0YTIgJiAweDEpICE9IDApIHsKLSAgICAgICAgICAgICAgICBzdHlsZSB8PSBTVFlMRV9VTkRFUkxJTkU7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGlmIChjb2xvciA9PSBDT0xPUl9JTlZBTElEKSB7Ci0gICAgICAgICAgICAgICAgLy8gV0hJVEUgSVRBTElDUwotICAgICAgICAgICAgICAgIGNvbG9yID0gQ09MT1JfV0hJVEU7Ci0gICAgICAgICAgICAgICAgc3R5bGUgfD0gU1RZTEVfSVRBTElDUzsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgcmV0dXJuIG5ldyBTdHlsZUNvZGUoc3R5bGUsIGNvbG9yKTsKLSAgICAgICAgfQotCi0gICAgICAgIFN0eWxlQ29kZShpbnQgc3R5bGUsIGludCBjb2xvcikgewotICAgICAgICAgICAgbVN0eWxlID0gc3R5bGU7Ci0gICAgICAgICAgICBtQ29sb3IgPSBjb2xvcjsKLSAgICAgICAgfQotCi0gICAgICAgIGJvb2xlYW4gaXNJdGFsaWNzKCkgewotICAgICAgICAgICAgcmV0dXJuIChtU3R5bGUgJiBTVFlMRV9JVEFMSUNTKSAhPSAwOwotICAgICAgICB9Ci0KLSAgICAgICAgYm9vbGVhbiBpc1VuZGVybGluZSgpIHsKLSAgICAgICAgICAgIHJldHVybiAobVN0eWxlICYgU1RZTEVfVU5ERVJMSU5FKSAhPSAwOwotICAgICAgICB9Ci0KLSAgICAgICAgaW50IGdldENvbG9yKCkgewotICAgICAgICAgICAgcmV0dXJuIG1Db2xvcjsKLSAgICAgICAgfQotCi0gICAgICAgIEBPdmVycmlkZQotICAgICAgICBwdWJsaWMgU3RyaW5nIHRvU3RyaW5nKCkgewotICAgICAgICAgICAgU3RyaW5nQnVpbGRlciBzdHIgPSBuZXcgU3RyaW5nQnVpbGRlcigpOwotICAgICAgICAgICAgc3RyLmFwcGVuZCgieyIpOwotICAgICAgICAgICAgc3RyLmFwcGVuZChtQ29sb3JNYXBbbUNvbG9yXSk7Ci0gICAgICAgICAgICBpZiAoKG1TdHlsZSAmIFNUWUxFX0lUQUxJQ1MpICE9IDApIHsKLSAgICAgICAgICAgICAgICBzdHIuYXBwZW5kKCIsIElUQUxJQ1MiKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmICgobVN0eWxlICYgU1RZTEVfVU5ERVJMSU5FKSAhPSAwKSB7Ci0gICAgICAgICAgICAgICAgc3RyLmFwcGVuZCgiLCBVTkRFUkxJTkUiKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHN0ci5hcHBlbmQoIn0iKTsKLQotICAgICAgICAgICAgcmV0dXJuIHN0ci50b1N0cmluZygpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgcHJpdmF0ZSBzdGF0aWMgY2xhc3MgUEFDIGV4dGVuZHMgU3R5bGVDb2RlIHsKLSAgICAgICAgZmluYWwgaW50IG1Sb3c7Ci0gICAgICAgIGZpbmFsIGludCBtQ29sOwotCi0gICAgICAgIHN0YXRpYyBQQUMgZnJvbUJ5dGVzKGJ5dGUgZGF0YTEsIGJ5dGUgZGF0YTIpIHsKLSAgICAgICAgICAgIGludFtdIHJvd1RhYmxlID0gezExLCAxLCAzLCAxMiwgMTQsIDUsIDcsIDl9OwotICAgICAgICAgICAgaW50IHJvdyA9IHJvd1RhYmxlW2RhdGExICYgMHgwN10gKyAoKGRhdGEyICYgMHgyMCkgPj4gNSk7Ci0gICAgICAgICAgICBpbnQgc3R5bGUgPSAwOwotICAgICAgICAgICAgaWYgKChkYXRhMiAmIDEpICE9IDApIHsKLSAgICAgICAgICAgICAgICBzdHlsZSB8PSBTVFlMRV9VTkRFUkxJTkU7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAoKGRhdGEyICYgMHgxMCkgIT0gMCkgewotICAgICAgICAgICAgICAgIC8vIGluZGVudCBjb2RlCi0gICAgICAgICAgICAgICAgaW50IGluZGVudCA9IChkYXRhMiA+PiAxKSAmIDB4NzsKLSAgICAgICAgICAgICAgICByZXR1cm4gbmV3IFBBQyhyb3csIGluZGVudCAqIDQsIHN0eWxlLCBDT0xPUl9XSElURSk7Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIC8vIHN0eWxlIGNvZGUKLSAgICAgICAgICAgICAgICBpbnQgY29sb3IgPSAoZGF0YTIgPj4gMSkgJiAweDc7Ci0KLSAgICAgICAgICAgICAgICBpZiAoY29sb3IgPT0gQ09MT1JfSU5WQUxJRCkgewotICAgICAgICAgICAgICAgICAgICAvLyBXSElURSBJVEFMSUNTCi0gICAgICAgICAgICAgICAgICAgIGNvbG9yID0gQ09MT1JfV0hJVEU7Ci0gICAgICAgICAgICAgICAgICAgIHN0eWxlIHw9IFNUWUxFX0lUQUxJQ1M7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIHJldHVybiBuZXcgUEFDKHJvdywgLTEsIHN0eWxlLCBjb2xvcik7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICBQQUMoaW50IHJvdywgaW50IGNvbCwgaW50IHN0eWxlLCBpbnQgY29sb3IpIHsKLSAgICAgICAgICAgIHN1cGVyKHN0eWxlLCBjb2xvcik7Ci0gICAgICAgICAgICBtUm93ID0gcm93OwotICAgICAgICAgICAgbUNvbCA9IGNvbDsKLSAgICAgICAgfQotCi0gICAgICAgIGJvb2xlYW4gaXNJbmRlbnRQQUMoKSB7Ci0gICAgICAgICAgICByZXR1cm4gKG1Db2wgPj0gMCk7Ci0gICAgICAgIH0KLQotICAgICAgICBpbnQgZ2V0Um93KCkgewotICAgICAgICAgICAgcmV0dXJuIG1Sb3c7Ci0gICAgICAgIH0KLQotICAgICAgICBpbnQgZ2V0Q29sKCkgewotICAgICAgICAgICAgcmV0dXJuIG1Db2w7Ci0gICAgICAgIH0KLQotICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgcHVibGljIFN0cmluZyB0b1N0cmluZygpIHsKLSAgICAgICAgICAgIHJldHVybiBTdHJpbmcuZm9ybWF0KCJ7JWQsICVkfSwgJXMiLAotICAgICAgICAgICAgICAgICAgICBtUm93LCBtQ29sLCBzdXBlci50b1N0cmluZygpKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIC8qKgotICAgICAqIE11dGFibGUgdmVyc2lvbiBvZiBCYWNrZ3JvdW5kU3BhbiB0byBmYWNpbGl0YXRlIHRleHQgcmVuZGVyaW5nIHdpdGggZWRnZSBzdHlsZXMuCi0gICAgICovCi0gICAgcHVibGljIHN0YXRpYyBjbGFzcyBNdXRhYmxlQmFja2dyb3VuZENvbG9yU3BhbiBleHRlbmRzIENoYXJhY3RlclN0eWxlCi0gICAgICAgICAgICBpbXBsZW1lbnRzIFVwZGF0ZUFwcGVhcmFuY2UgewotICAgICAgICBwcml2YXRlIGludCBtQ29sb3I7Ci0KLSAgICAgICAgcHVibGljIE11dGFibGVCYWNrZ3JvdW5kQ29sb3JTcGFuKGludCBjb2xvcikgewotICAgICAgICAgICAgbUNvbG9yID0gY29sb3I7Ci0gICAgICAgIH0KLQotICAgICAgICBwdWJsaWMgdm9pZCBzZXRCYWNrZ3JvdW5kQ29sb3IoaW50IGNvbG9yKSB7Ci0gICAgICAgICAgICBtQ29sb3IgPSBjb2xvcjsKLSAgICAgICAgfQotCi0gICAgICAgIHB1YmxpYyBpbnQgZ2V0QmFja2dyb3VuZENvbG9yKCkgewotICAgICAgICAgICAgcmV0dXJuIG1Db2xvcjsKLSAgICAgICAgfQotCi0gICAgICAgIEBPdmVycmlkZQotICAgICAgICBwdWJsaWMgdm9pZCB1cGRhdGVEcmF3U3RhdGUoVGV4dFBhaW50IGRzKSB7Ci0gICAgICAgICAgICBkcy5iZ0NvbG9yID0gbUNvbG9yOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgLyogQ0NMaW5lQnVpbGRlciBrZWVwcyB0cmFjayBvZiBkaXNwbGF5YWJsZSBjaGFycywgYXMgd2VsbCBhcwotICAgICAqIE1pZFJvdyBzdHlsZXMgYW5kIFBBQ3MsIGZvciBhIHNpbmdsZSBsaW5lIG9mIENDIG1lbW9yeS4KLSAgICAgKgotICAgICAqIEl0IGdlbmVyYXRlcyBzdHlsZWQgdGV4dCB2aWEgZ2V0U3R5bGVkVGV4dCgpIG1ldGhvZC4KLSAgICAgKi8KLSAgICBwcml2YXRlIHN0YXRpYyBjbGFzcyBDQ0xpbmVCdWlsZGVyIHsKLSAgICAgICAgcHJpdmF0ZSBmaW5hbCBTdHJpbmdCdWlsZGVyIG1EaXNwbGF5Q2hhcnM7Ci0gICAgICAgIHByaXZhdGUgZmluYWwgU3R5bGVDb2RlW10gbU1pZFJvd1N0eWxlczsKLSAgICAgICAgcHJpdmF0ZSBmaW5hbCBTdHlsZUNvZGVbXSBtUEFDU3R5bGVzOwotCi0gICAgICAgIENDTGluZUJ1aWxkZXIoU3RyaW5nIHN0cikgewotICAgICAgICAgICAgbURpc3BsYXlDaGFycyA9IG5ldyBTdHJpbmdCdWlsZGVyKHN0cik7Ci0gICAgICAgICAgICBtTWlkUm93U3R5bGVzID0gbmV3IFN0eWxlQ29kZVttRGlzcGxheUNoYXJzLmxlbmd0aCgpXTsKLSAgICAgICAgICAgIG1QQUNTdHlsZXMgPSBuZXcgU3R5bGVDb2RlW21EaXNwbGF5Q2hhcnMubGVuZ3RoKCldOwotICAgICAgICB9Ci0KLSAgICAgICAgdm9pZCBzZXRDaGFyQXQoaW50IGluZGV4LCBjaGFyIGNoKSB7Ci0gICAgICAgICAgICBtRGlzcGxheUNoYXJzLnNldENoYXJBdChpbmRleCwgY2gpOwotICAgICAgICAgICAgbU1pZFJvd1N0eWxlc1tpbmRleF0gPSBudWxsOwotICAgICAgICB9Ci0KLSAgICAgICAgdm9pZCBzZXRNaWRSb3dBdChpbnQgaW5kZXgsIFN0eWxlQ29kZSBtKSB7Ci0gICAgICAgICAgICBtRGlzcGxheUNoYXJzLnNldENoYXJBdChpbmRleCwgJyAnKTsKLSAgICAgICAgICAgIG1NaWRSb3dTdHlsZXNbaW5kZXhdID0gbTsKLSAgICAgICAgfQotCi0gICAgICAgIHZvaWQgc2V0UEFDQXQoaW50IGluZGV4LCBQQUMgcGFjKSB7Ci0gICAgICAgICAgICBtUEFDU3R5bGVzW2luZGV4XSA9IHBhYzsKLSAgICAgICAgfQotCi0gICAgICAgIGNoYXIgY2hhckF0KGludCBpbmRleCkgewotICAgICAgICAgICAgcmV0dXJuIG1EaXNwbGF5Q2hhcnMuY2hhckF0KGluZGV4KTsKLSAgICAgICAgfQotCi0gICAgICAgIGludCBsZW5ndGgoKSB7Ci0gICAgICAgICAgICByZXR1cm4gbURpc3BsYXlDaGFycy5sZW5ndGgoKTsKLSAgICAgICAgfQotCi0gICAgICAgIHZvaWQgYXBwbHlTdHlsZVNwYW4oCi0gICAgICAgICAgICAgICAgU3Bhbm5hYmxlU3RyaW5nQnVpbGRlciBzdHlsZWRUZXh0LAotICAgICAgICAgICAgICAgIFN0eWxlQ29kZSBzLCBpbnQgc3RhcnQsIGludCBlbmQpIHsKLSAgICAgICAgICAgIGlmIChzLmlzSXRhbGljcygpKSB7Ci0gICAgICAgICAgICAgICAgc3R5bGVkVGV4dC5zZXRTcGFuKAotICAgICAgICAgICAgICAgICAgICAgICAgbmV3IFN0eWxlU3BhbihhbmRyb2lkLmdyYXBoaWNzLlR5cGVmYWNlLklUQUxJQyksCi0gICAgICAgICAgICAgICAgICAgICAgICBzdGFydCwgZW5kLCBTcGFubmFibGUuU1BBTl9FWENMVVNJVkVfRVhDTFVTSVZFKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmIChzLmlzVW5kZXJsaW5lKCkpIHsKLSAgICAgICAgICAgICAgICBzdHlsZWRUZXh0LnNldFNwYW4oCi0gICAgICAgICAgICAgICAgICAgICAgICBuZXcgVW5kZXJsaW5lU3BhbigpLAotICAgICAgICAgICAgICAgICAgICAgICAgc3RhcnQsIGVuZCwgU3Bhbm5hYmxlLlNQQU5fRVhDTFVTSVZFX0VYQ0xVU0lWRSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICBTcGFubmFibGVTdHJpbmdCdWlsZGVyIGdldFN0eWxlZFRleHQoQ2FwdGlvblN0eWxlIGNhcHRpb25TdHlsZSkgewotICAgICAgICAgICAgU3Bhbm5hYmxlU3RyaW5nQnVpbGRlciBzdHlsZWRUZXh0ID0gbmV3IFNwYW5uYWJsZVN0cmluZ0J1aWxkZXIobURpc3BsYXlDaGFycyk7Ci0gICAgICAgICAgICBpbnQgc3RhcnQgPSAtMSwgbmV4dCA9IDA7Ci0gICAgICAgICAgICBpbnQgc3R5bGVTdGFydCA9IC0xOwotICAgICAgICAgICAgU3R5bGVDb2RlIGN1clN0eWxlID0gbnVsbDsKLSAgICAgICAgICAgIHdoaWxlIChuZXh0IDwgbURpc3BsYXlDaGFycy5sZW5ndGgoKSkgewotICAgICAgICAgICAgICAgIFN0eWxlQ29kZSBuZXdTdHlsZSA9IG51bGw7Ci0gICAgICAgICAgICAgICAgaWYgKG1NaWRSb3dTdHlsZXNbbmV4dF0gIT0gbnVsbCkgewotICAgICAgICAgICAgICAgICAgICAvLyBhcHBseSBtaWQtcm93IHN0eWxlIGNoYW5nZQotICAgICAgICAgICAgICAgICAgICBuZXdTdHlsZSA9IG1NaWRSb3dTdHlsZXNbbmV4dF07Ci0gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChtUEFDU3R5bGVzW25leHRdICE9IG51bGwKLSAgICAgICAgICAgICAgICAgICAgJiYgKHN0eWxlU3RhcnQgPCAwIHx8IHN0YXJ0IDwgMCkpIHsKLSAgICAgICAgICAgICAgICAgICAgLy8gYXBwbHkgUEFDIHN0eWxlIGNoYW5nZSwgb25seSBpZjoKLSAgICAgICAgICAgICAgICAgICAgLy8gMS4gbm8gc3R5bGUgc2V0LCBvcgotICAgICAgICAgICAgICAgICAgICAvLyAyLiBzdHlsZSBzZXQsIGJ1dCBwcmV2IGNoYXIgaXMgbm9uZS1kaXNwbGF5YWJsZQotICAgICAgICAgICAgICAgICAgICBuZXdTdHlsZSA9IG1QQUNTdHlsZXNbbmV4dF07Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGlmIChuZXdTdHlsZSAhPSBudWxsKSB7Ci0gICAgICAgICAgICAgICAgICAgIGN1clN0eWxlID0gbmV3U3R5bGU7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChzdHlsZVN0YXJ0ID49IDAgJiYgc3RhcnQgPj0gMCkgewotICAgICAgICAgICAgICAgICAgICAgICAgYXBwbHlTdHlsZVNwYW4oc3R5bGVkVGV4dCwgbmV3U3R5bGUsIHN0eWxlU3RhcnQsIG5leHQpOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIHN0eWxlU3RhcnQgPSBuZXh0OwotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIGlmIChtRGlzcGxheUNoYXJzLmNoYXJBdChuZXh0KSAhPSBUUykgewotICAgICAgICAgICAgICAgICAgICBpZiAoc3RhcnQgPCAwKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBzdGFydCA9IG5leHQ7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHN0YXJ0ID49IDApIHsKLSAgICAgICAgICAgICAgICAgICAgaW50IGV4cGFuZGVkU3RhcnQgPSBtRGlzcGxheUNoYXJzLmNoYXJBdChzdGFydCkgPT0gJyAnID8gc3RhcnQgOiBzdGFydCAtIDE7Ci0gICAgICAgICAgICAgICAgICAgIGludCBleHBhbmRlZEVuZCA9IG1EaXNwbGF5Q2hhcnMuY2hhckF0KG5leHQgLSAxKSA9PSAnICcgPyBuZXh0IDogbmV4dCArIDE7Ci0gICAgICAgICAgICAgICAgICAgIHN0eWxlZFRleHQuc2V0U3BhbigKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXcgTXV0YWJsZUJhY2tncm91bmRDb2xvclNwYW4oY2FwdGlvblN0eWxlLmJhY2tncm91bmRDb2xvciksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhwYW5kZWRTdGFydCwgZXhwYW5kZWRFbmQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgU3Bhbm5hYmxlLlNQQU5fRVhDTFVTSVZFX0VYQ0xVU0lWRSk7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChzdHlsZVN0YXJ0ID49IDApIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGFwcGx5U3R5bGVTcGFuKHN0eWxlZFRleHQsIGN1clN0eWxlLCBzdHlsZVN0YXJ0LCBleHBhbmRlZEVuZCk7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgc3RhcnQgPSAtMTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgbmV4dCsrOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICByZXR1cm4gc3R5bGVkVGV4dDsKLSAgICAgICAgfQotICAgIH0KLQotICAgIC8qCi0gICAgICogQ0NNZW1vcnkgbW9kZWxzIGEgY29uc29sZS1zdHlsZSBkaXNwbGF5LgotICAgICAqLwotICAgIHByaXZhdGUgc3RhdGljIGNsYXNzIENDTWVtb3J5IHsKLSAgICAgICAgcHJpdmF0ZSBmaW5hbCBTdHJpbmcgbUJsYW5rTGluZTsKLSAgICAgICAgcHJpdmF0ZSBmaW5hbCBDQ0xpbmVCdWlsZGVyW10gbUxpbmVzID0gbmV3IENDTGluZUJ1aWxkZXJbTUFYX1JPV1MgKyAyXTsKLSAgICAgICAgcHJpdmF0ZSBpbnQgbVJvdzsKLSAgICAgICAgcHJpdmF0ZSBpbnQgbUNvbDsKLQotICAgICAgICBDQ01lbW9yeSgpIHsKLSAgICAgICAgICAgIGNoYXJbXSBibGFuayA9IG5ldyBjaGFyW01BWF9DT0xTICsgMl07Ci0gICAgICAgICAgICBBcnJheXMuZmlsbChibGFuaywgVFMpOwotICAgICAgICAgICAgbUJsYW5rTGluZSA9IG5ldyBTdHJpbmcoYmxhbmspOwotICAgICAgICB9Ci0KLSAgICAgICAgdm9pZCBlcmFzZSgpIHsKLSAgICAgICAgICAgIC8vIGVyYXNlIGFsbCBsaW5lcwotICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBtTGluZXMubGVuZ3RoOyBpKyspIHsKLSAgICAgICAgICAgICAgICBtTGluZXNbaV0gPSBudWxsOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgbVJvdyA9IE1BWF9ST1dTOwotICAgICAgICAgICAgbUNvbCA9IDE7Ci0gICAgICAgIH0KLQotICAgICAgICB2b2lkIGRlcigpIHsKLSAgICAgICAgICAgIGlmIChtTGluZXNbbVJvd10gIT0gbnVsbCkgewotICAgICAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbUNvbDsgaSsrKSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChtTGluZXNbbVJvd10uY2hhckF0KGkpICE9IFRTKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGludCBqID0gbUNvbDsgaiA8IG1MaW5lc1ttUm93XS5sZW5ndGgoKTsgaisrKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgbUxpbmVzW2pdLnNldENoYXJBdChqLCBUUyk7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgbUxpbmVzW21Sb3ddID0gbnVsbDsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIHZvaWQgdGFiKGludCB0YWJzKSB7Ci0gICAgICAgICAgICBtb3ZlQ3Vyc29yQnlDb2wodGFicyk7Ci0gICAgICAgIH0KLQotICAgICAgICB2b2lkIGJzKCkgewotICAgICAgICAgICAgbW92ZUN1cnNvckJ5Q29sKC0xKTsKLSAgICAgICAgICAgIGlmIChtTGluZXNbbVJvd10gIT0gbnVsbCkgewotICAgICAgICAgICAgICAgIG1MaW5lc1ttUm93XS5zZXRDaGFyQXQobUNvbCwgVFMpOwotICAgICAgICAgICAgICAgIGlmIChtQ29sID09IE1BWF9DT0xTIC0gMSkgewotICAgICAgICAgICAgICAgICAgICAvLyBTcGVjIHJlY29tbWVuZGF0aW9uOgotICAgICAgICAgICAgICAgICAgICAvLyBpZiBjdXJzb3Igd2FzIGF0IGNvbCAzMiwgbW92ZSBjdXJzb3IKLSAgICAgICAgICAgICAgICAgICAgLy8gYmFjayB0byBjb2wgMzEgYW5kIGVyYXNlIGJvdGggY29sIDMxJjMyCi0gICAgICAgICAgICAgICAgICAgIG1MaW5lc1ttUm93XS5zZXRDaGFyQXQoTUFYX0NPTFMsIFRTKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICB2b2lkIGNyKCkgewotICAgICAgICAgICAgbW92ZUN1cnNvclRvKG1Sb3cgKyAxLCAxKTsKLSAgICAgICAgfQotCi0gICAgICAgIHZvaWQgcm9sbFVwKGludCB3aW5kb3dTaXplKSB7Ci0gICAgICAgICAgICBpbnQgaTsKLSAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPD0gbVJvdyAtIHdpbmRvd1NpemU7IGkrKykgewotICAgICAgICAgICAgICAgIG1MaW5lc1tpXSA9IG51bGw7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBpbnQgc3RhcnRSb3cgPSBtUm93IC0gd2luZG93U2l6ZSArIDE7Ci0gICAgICAgICAgICBpZiAoc3RhcnRSb3cgPCAxKSB7Ci0gICAgICAgICAgICAgICAgc3RhcnRSb3cgPSAxOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgZm9yIChpID0gc3RhcnRSb3c7IGkgPCBtUm93OyBpKyspIHsKLSAgICAgICAgICAgICAgICBtTGluZXNbaV0gPSBtTGluZXNbaSArIDFdOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgZm9yIChpID0gbVJvdzsgaSA8IG1MaW5lcy5sZW5ndGg7IGkrKykgewotICAgICAgICAgICAgICAgIC8vIGNsZWFyIGJhc2Ugcm93Ci0gICAgICAgICAgICAgICAgbUxpbmVzW2ldID0gbnVsbDsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIC8vIGRlZmF1bHQgdG8gY29sIDEsIGluIGNhc2UgUEFDIGlzIG5vdCBzZW50Ci0gICAgICAgICAgICBtQ29sID0gMTsKLSAgICAgICAgfQotCi0gICAgICAgIHZvaWQgd3JpdGVUZXh0KFN0cmluZyB0ZXh0KSB7Ci0gICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IHRleHQubGVuZ3RoKCk7IGkrKykgewotICAgICAgICAgICAgICAgIGdldExpbmVCdWZmZXIobVJvdykuc2V0Q2hhckF0KG1Db2wsIHRleHQuY2hhckF0KGkpKTsKLSAgICAgICAgICAgICAgICBtb3ZlQ3Vyc29yQnlDb2woMSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICB2b2lkIHdyaXRlTWlkUm93Q29kZShTdHlsZUNvZGUgbSkgewotICAgICAgICAgICAgZ2V0TGluZUJ1ZmZlcihtUm93KS5zZXRNaWRSb3dBdChtQ29sLCBtKTsKLSAgICAgICAgICAgIG1vdmVDdXJzb3JCeUNvbCgxKTsKLSAgICAgICAgfQotCi0gICAgICAgIHZvaWQgd3JpdGVQQUMoUEFDIHBhYykgewotICAgICAgICAgICAgaWYgKHBhYy5pc0luZGVudFBBQygpKSB7Ci0gICAgICAgICAgICAgICAgbW92ZUN1cnNvclRvKHBhYy5nZXRSb3coKSwgcGFjLmdldENvbCgpKTsKLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgbW92ZUN1cnNvclRvKHBhYy5nZXRSb3coKSwgMSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBnZXRMaW5lQnVmZmVyKG1Sb3cpLnNldFBBQ0F0KG1Db2wsIHBhYyk7Ci0gICAgICAgIH0KLQotICAgICAgICBTcGFubmFibGVTdHJpbmdCdWlsZGVyW10gZ2V0U3R5bGVkVGV4dChDYXB0aW9uU3R5bGUgY2FwdGlvblN0eWxlKSB7Ci0gICAgICAgICAgICBBcnJheUxpc3Q8U3Bhbm5hYmxlU3RyaW5nQnVpbGRlcj4gcm93cyA9IG5ldyBBcnJheUxpc3Q8PihNQVhfUk9XUyk7Ci0gICAgICAgICAgICBmb3IgKGludCBpID0gMTsgaSA8PSBNQVhfUk9XUzsgaSsrKSB7Ci0gICAgICAgICAgICAgICAgcm93cy5hZGQobUxpbmVzW2ldICE9IG51bGwgPwotICAgICAgICAgICAgICAgICAgICAgICAgbUxpbmVzW2ldLmdldFN0eWxlZFRleHQoY2FwdGlvblN0eWxlKSA6IG51bGwpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgcmV0dXJuIHJvd3MudG9BcnJheShuZXcgU3Bhbm5hYmxlU3RyaW5nQnVpbGRlcltNQVhfUk9XU10pOwotICAgICAgICB9Ci0KLSAgICAgICAgcHJpdmF0ZSBzdGF0aWMgaW50IGNsYW1wKGludCB4LCBpbnQgbWluLCBpbnQgbWF4KSB7Ci0gICAgICAgICAgICByZXR1cm4geCA8IG1pbiA/IG1pbiA6ICh4ID4gbWF4ID8gbWF4IDogeCk7Ci0gICAgICAgIH0KLQotICAgICAgICBwcml2YXRlIHZvaWQgbW92ZUN1cnNvclRvKGludCByb3csIGludCBjb2wpIHsKLSAgICAgICAgICAgIG1Sb3cgPSBjbGFtcChyb3csIDEsIE1BWF9ST1dTKTsKLSAgICAgICAgICAgIG1Db2wgPSBjbGFtcChjb2wsIDEsIE1BWF9DT0xTKTsKLSAgICAgICAgfQotCi0gICAgICAgIHByaXZhdGUgdm9pZCBtb3ZlQ3Vyc29yVG9Sb3coaW50IHJvdykgewotICAgICAgICAgICAgbVJvdyA9IGNsYW1wKHJvdywgMSwgTUFYX1JPV1MpOwotICAgICAgICB9Ci0KLSAgICAgICAgcHJpdmF0ZSB2b2lkIG1vdmVDdXJzb3JCeUNvbChpbnQgY29sKSB7Ci0gICAgICAgICAgICBtQ29sID0gY2xhbXAobUNvbCArIGNvbCwgMSwgTUFYX0NPTFMpOwotICAgICAgICB9Ci0KLSAgICAgICAgcHJpdmF0ZSB2b2lkIG1vdmVCYXNlbGluZVRvKGludCBiYXNlUm93LCBpbnQgd2luZG93U2l6ZSkgewotICAgICAgICAgICAgaWYgKG1Sb3cgPT0gYmFzZVJvdykgewotICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGludCBhY3R1YWxXaW5kb3dTaXplID0gd2luZG93U2l6ZTsKLSAgICAgICAgICAgIGlmIChiYXNlUm93IDwgYWN0dWFsV2luZG93U2l6ZSkgewotICAgICAgICAgICAgICAgIGFjdHVhbFdpbmRvd1NpemUgPSBiYXNlUm93OwotICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYgKG1Sb3cgPCBhY3R1YWxXaW5kb3dTaXplKSB7Ci0gICAgICAgICAgICAgICAgYWN0dWFsV2luZG93U2l6ZSA9IG1Sb3c7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGludCBpOwotICAgICAgICAgICAgaWYgKGJhc2VSb3cgPCBtUm93KSB7Ci0gICAgICAgICAgICAgICAgLy8gY29weSBmcm9tIGJvdHRvbSB0byB0b3Agcm93Ci0gICAgICAgICAgICAgICAgZm9yIChpID0gYWN0dWFsV2luZG93U2l6ZSAtIDE7IGkgPj0gMDsgaS0tKSB7Ci0gICAgICAgICAgICAgICAgICAgIG1MaW5lc1tiYXNlUm93IC0gaV0gPSBtTGluZXNbbVJvdyAtIGldOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgLy8gY29weSBmcm9tIHRvcCB0byBib3R0b20gcm93Ci0gICAgICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IGFjdHVhbFdpbmRvd1NpemU7IGkrKykgewotICAgICAgICAgICAgICAgICAgICBtTGluZXNbYmFzZVJvdyAtIGldID0gbUxpbmVzW21Sb3cgLSBpXTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICAvLyBjbGVhciByZXN0IG9mIHRoZSByb3dzCi0gICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDw9IGJhc2VSb3cgLSB3aW5kb3dTaXplOyBpKyspIHsKLSAgICAgICAgICAgICAgICBtTGluZXNbaV0gPSBudWxsOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgZm9yIChpID0gYmFzZVJvdyArIDE7IGkgPCBtTGluZXMubGVuZ3RoOyBpKyspIHsKLSAgICAgICAgICAgICAgICBtTGluZXNbaV0gPSBudWxsOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgcHJpdmF0ZSBDQ0xpbmVCdWlsZGVyIGdldExpbmVCdWZmZXIoaW50IHJvdykgewotICAgICAgICAgICAgaWYgKG1MaW5lc1tyb3ddID09IG51bGwpIHsKLSAgICAgICAgICAgICAgICBtTGluZXNbcm93XSA9IG5ldyBDQ0xpbmVCdWlsZGVyKG1CbGFua0xpbmUpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgcmV0dXJuIG1MaW5lc1tyb3ddOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgLyoKLSAgICAgKiBDQ0RhdGEgcGFyc2VzIHRoZSByYXcgQ0MgYnl0ZSBwYWlyIGludG8gZGlzcGxheWFibGUgY2hhcnMsCi0gICAgICogbWlzYyBjb250cm9sIGNvZGVzLCBNaWQtUm93IG9yIFByZWFtYmxlIEFkZHJlc3MgQ29kZXMuCi0gICAgICovCi0gICAgcHJpdmF0ZSBzdGF0aWMgY2xhc3MgQ0NEYXRhIHsKLSAgICAgICAgcHJpdmF0ZSBmaW5hbCBieXRlIG1UeXBlOwotICAgICAgICBwcml2YXRlIGZpbmFsIGJ5dGUgbURhdGExOwotICAgICAgICBwcml2YXRlIGZpbmFsIGJ5dGUgbURhdGEyOwotCi0gICAgICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZ1tdIG1DdHJsQ29kZU1hcCA9IHsKLSAgICAgICAgICAgICJSQ0wiLCAiQlMiICwgIkFPRiIsICJBT04iLAotICAgICAgICAgICAgIkRFUiIsICJSVTIiLCAiUlUzIiwgIlJVNCIsCi0gICAgICAgICAgICAiRk9OIiwgIlJEQyIsICJUUiIgLCAiUlREIiwKLSAgICAgICAgICAgICJFRE0iLCAiQ1IiICwgIkVOTSIsICJFT0MiLAotICAgICAgICB9OwotCi0gICAgICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZ1tdIG1TcGVjaWFsQ2hhck1hcCA9IHsKLSAgICAgICAgICAgICJcdTAwQUUiLAotICAgICAgICAgICAgIlx1MDBCMCIsCi0gICAgICAgICAgICAiXHUwMEJEIiwKLSAgICAgICAgICAgICJcdTAwQkYiLAotICAgICAgICAgICAgIlx1MjEyMiIsCi0gICAgICAgICAgICAiXHUwMEEyIiwKLSAgICAgICAgICAgICJcdTAwQTMiLAotICAgICAgICAgICAgIlx1MjY2QSIsIC8vIEVpZ2h0aCBub3RlCi0gICAgICAgICAgICAiXHUwMEUwIiwKLSAgICAgICAgICAgICJcdTAwQTAiLCAvLyBUcmFuc3BhcmVudCBzcGFjZQotICAgICAgICAgICAgIlx1MDBFOCIsCi0gICAgICAgICAgICAiXHUwMEUyIiwKLSAgICAgICAgICAgICJcdTAwRUEiLAotICAgICAgICAgICAgIlx1MDBFRSIsCi0gICAgICAgICAgICAiXHUwMEY0IiwKLSAgICAgICAgICAgICJcdTAwRkIiLAotICAgICAgICB9OwotCi0gICAgICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZ1tdIG1TcGFuaXNoQ2hhck1hcCA9IHsKLSAgICAgICAgICAgIC8vIFNwYW5pc2ggYW5kIG1pc2MgY2hhcnMKLSAgICAgICAgICAgICJcdTAwQzEiLCAvLyBBCi0gICAgICAgICAgICAiXHUwMEM5IiwgLy8gRQotICAgICAgICAgICAgIlx1MDBEMyIsIC8vIEkKLSAgICAgICAgICAgICJcdTAwREEiLCAvLyBPCi0gICAgICAgICAgICAiXHUwMERDIiwgLy8gVQotICAgICAgICAgICAgIlx1MDBGQyIsIC8vIHUKLSAgICAgICAgICAgICJcdTIwMTgiLCAvLyBvcGVuaW5nIHNpbmdsZSBxdW90ZQotICAgICAgICAgICAgIlx1MDBBMSIsIC8vIGludmVydGVkIGV4Y2xhbWF0aW9uIG1hcmsKLSAgICAgICAgICAgICIqIiwKLSAgICAgICAgICAgICInIiwKLSAgICAgICAgICAgICJcdTIwMTQiLCAvLyBlbSBkYXNoCi0gICAgICAgICAgICAiXHUwMEE5IiwgLy8gQ29weXJpZ2h0Ci0gICAgICAgICAgICAiXHUyMTIwIiwgLy8gU2VydmljZW1hcmsKLSAgICAgICAgICAgICJcdTIwMjIiLCAvLyByb3VuZCBidWxsZXQKLSAgICAgICAgICAgICJcdTIwMUMiLCAvLyBvcGVuaW5nIGRvdWJsZSBxdW90ZQotICAgICAgICAgICAgIlx1MjAxRCIsIC8vIGNsb3NpbmcgZG91YmxlIHF1b3RlCi0gICAgICAgICAgICAvLyBGcmVuY2gKLSAgICAgICAgICAgICJcdTAwQzAiLAotICAgICAgICAgICAgIlx1MDBDMiIsCi0gICAgICAgICAgICAiXHUwMEM3IiwKLSAgICAgICAgICAgICJcdTAwQzgiLAotICAgICAgICAgICAgIlx1MDBDQSIsCi0gICAgICAgICAgICAiXHUwMENCIiwKLSAgICAgICAgICAgICJcdTAwRUIiLAotICAgICAgICAgICAgIlx1MDBDRSIsCi0gICAgICAgICAgICAiXHUwMENGIiwKLSAgICAgICAgICAgICJcdTAwRUYiLAotICAgICAgICAgICAgIlx1MDBENCIsCi0gICAgICAgICAgICAiXHUwMEQ5IiwKLSAgICAgICAgICAgICJcdTAwRjkiLAotICAgICAgICAgICAgIlx1MDBEQiIsCi0gICAgICAgICAgICAiXHUwMEFCIiwKLSAgICAgICAgICAgICJcdTAwQkIiCi0gICAgICAgIH07Ci0KLSAgICAgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nW10gbVByb3R1Z3Vlc2VDaGFyTWFwID0gewotICAgICAgICAgICAgLy8gUG9ydHVndWVzZQotICAgICAgICAgICAgIlx1MDBDMyIsCi0gICAgICAgICAgICAiXHUwMEUzIiwKLSAgICAgICAgICAgICJcdTAwQ0QiLAotICAgICAgICAgICAgIlx1MDBDQyIsCi0gICAgICAgICAgICAiXHUwMEVDIiwKLSAgICAgICAgICAgICJcdTAwRDIiLAotICAgICAgICAgICAgIlx1MDBGMiIsCi0gICAgICAgICAgICAiXHUwMEQ1IiwKLSAgICAgICAgICAgICJcdTAwRjUiLAotICAgICAgICAgICAgInsiLAotICAgICAgICAgICAgIn0iLAotICAgICAgICAgICAgIlxcIiwKLSAgICAgICAgICAgICJeIiwKLSAgICAgICAgICAgICJfIiwKLSAgICAgICAgICAgICJ8IiwKLSAgICAgICAgICAgICJ+IiwKLSAgICAgICAgICAgIC8vIEdlcm1hbiBhbmQgbWlzYyBjaGFycwotICAgICAgICAgICAgIlx1MDBDNCIsCi0gICAgICAgICAgICAiXHUwMEU0IiwKLSAgICAgICAgICAgICJcdTAwRDYiLAotICAgICAgICAgICAgIlx1MDBGNiIsCi0gICAgICAgICAgICAiXHUwMERGIiwKLSAgICAgICAgICAgICJcdTAwQTUiLAotICAgICAgICAgICAgIlx1MDBBNCIsCi0gICAgICAgICAgICAiXHUyNTAyIiwgLy8gdmVydGljYWwgYmFyCi0gICAgICAgICAgICAiXHUwMEM1IiwKLSAgICAgICAgICAgICJcdTAwRTUiLAotICAgICAgICAgICAgIlx1MDBEOCIsCi0gICAgICAgICAgICAiXHUwMEY4IiwKLSAgICAgICAgICAgICJcdTI1MEMiLCAvLyB0b3AtbGVmdCBjb3JuZXIKLSAgICAgICAgICAgICJcdTI1MTAiLCAvLyB0b3AtcmlnaHQgY29ybmVyCi0gICAgICAgICAgICAiXHUyNTE0IiwgLy8gbG93ZXItbGVmdCBjb3JuZXIKLSAgICAgICAgICAgICJcdTI1MTgiLCAvLyBsb3dlci1yaWdodCBjb3JuZXIKLSAgICAgICAgfTsKLQotICAgICAgICBzdGF0aWMgQ0NEYXRhW10gZnJvbUJ5dGVBcnJheShieXRlW10gZGF0YSkgewotICAgICAgICAgICAgQ0NEYXRhW10gY2NEYXRhID0gbmV3IENDRGF0YVtkYXRhLmxlbmd0aCAvIDNdOwotCi0gICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGNjRGF0YS5sZW5ndGg7IGkrKykgewotICAgICAgICAgICAgICAgIGNjRGF0YVtpXSA9IG5ldyBDQ0RhdGEoCi0gICAgICAgICAgICAgICAgICAgICAgICBkYXRhW2kgKiAzXSwKLSAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFbaSAqIDMgKyAxXSwKLSAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFbaSAqIDMgKyAyXSk7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIHJldHVybiBjY0RhdGE7Ci0gICAgICAgIH0KLQotICAgICAgICBDQ0RhdGEoYnl0ZSB0eXBlLCBieXRlIGRhdGExLCBieXRlIGRhdGEyKSB7Ci0gICAgICAgICAgICBtVHlwZSA9IHR5cGU7Ci0gICAgICAgICAgICBtRGF0YTEgPSBkYXRhMTsKLSAgICAgICAgICAgIG1EYXRhMiA9IGRhdGEyOwotICAgICAgICB9Ci0KLSAgICAgICAgaW50IGdldEN0cmxDb2RlKCkgewotICAgICAgICAgICAgaWYgKChtRGF0YTEgPT0gMHgxNCB8fCBtRGF0YTEgPT0gMHgxYykKLSAgICAgICAgICAgICAgICAgICAgJiYgbURhdGEyID49IDB4MjAgJiYgbURhdGEyIDw9IDB4MmYpIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gbURhdGEyOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgcmV0dXJuIElOVkFMSUQ7Ci0gICAgICAgIH0KLQotICAgICAgICBTdHlsZUNvZGUgZ2V0TWlkUm93KCkgewotICAgICAgICAgICAgLy8gb25seSBzdXBwb3J0IHN0YW5kYXJkIE1pZC1yb3cgY29kZXMsIGlnbm9yZQotICAgICAgICAgICAgLy8gb3B0aW9uYWwgYmFja2dyb3VuZC9mb3JlZ3JvdW5kIG1pZC1yb3cgY29kZXMKLSAgICAgICAgICAgIGlmICgobURhdGExID09IDB4MTEgfHwgbURhdGExID09IDB4MTkpCi0gICAgICAgICAgICAgICAgICAgICYmIG1EYXRhMiA+PSAweDIwICYmIG1EYXRhMiA8PSAweDJmKSB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIFN0eWxlQ29kZS5mcm9tQnl0ZShtRGF0YTIpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgcmV0dXJuIG51bGw7Ci0gICAgICAgIH0KLQotICAgICAgICBQQUMgZ2V0UEFDKCkgewotICAgICAgICAgICAgaWYgKChtRGF0YTEgJiAweDcwKSA9PSAweDEwCi0gICAgICAgICAgICAgICAgICAgICYmIChtRGF0YTIgJiAweDQwKSA9PSAweDQwCi0gICAgICAgICAgICAgICAgICAgICYmICgobURhdGExICYgMHgwNykgIT0gMCB8fCAobURhdGEyICYgMHgyMCkgPT0gMCkpIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gUEFDLmZyb21CeXRlcyhtRGF0YTEsIG1EYXRhMik7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICByZXR1cm4gbnVsbDsKLSAgICAgICAgfQotCi0gICAgICAgIGludCBnZXRUYWJPZmZzZXQoKSB7Ci0gICAgICAgICAgICBpZiAoKG1EYXRhMSA9PSAweDE3IHx8IG1EYXRhMSA9PSAweDFmKQotICAgICAgICAgICAgICAgICAgICAmJiBtRGF0YTIgPj0gMHgyMSAmJiBtRGF0YTIgPD0gMHgyMykgewotICAgICAgICAgICAgICAgIHJldHVybiBtRGF0YTIgJiAweDM7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICByZXR1cm4gMDsKLSAgICAgICAgfQotCi0gICAgICAgIGJvb2xlYW4gaXNEaXNwbGF5YWJsZUNoYXIoKSB7Ci0gICAgICAgICAgICByZXR1cm4gaXNCYXNpY0NoYXIoKSB8fCBpc1NwZWNpYWxDaGFyKCkgfHwgaXNFeHRlbmRlZENoYXIoKTsKLSAgICAgICAgfQotCi0gICAgICAgIFN0cmluZyBnZXREaXNwbGF5VGV4dCgpIHsKLSAgICAgICAgICAgIFN0cmluZyBzdHIgPSBnZXRCYXNpY0NoYXJzKCk7Ci0KLSAgICAgICAgICAgIGlmIChzdHIgPT0gbnVsbCkgewotICAgICAgICAgICAgICAgIHN0ciA9ICBnZXRTcGVjaWFsQ2hhcigpOwotCi0gICAgICAgICAgICAgICAgaWYgKHN0ciA9PSBudWxsKSB7Ci0gICAgICAgICAgICAgICAgICAgIHN0ciA9IGdldEV4dGVuZGVkQ2hhcigpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgcmV0dXJuIHN0cjsKLSAgICAgICAgfQotCi0gICAgICAgIHByaXZhdGUgU3RyaW5nIGN0cmxDb2RlVG9TdHJpbmcoaW50IGN0cmxDb2RlKSB7Ci0gICAgICAgICAgICByZXR1cm4gbUN0cmxDb2RlTWFwW2N0cmxDb2RlIC0gMHgyMF07Ci0gICAgICAgIH0KLQotICAgICAgICBwcml2YXRlIGJvb2xlYW4gaXNCYXNpY0NoYXIoKSB7Ci0gICAgICAgICAgICByZXR1cm4gbURhdGExID49IDB4MjAgJiYgbURhdGExIDw9IDB4N2Y7Ci0gICAgICAgIH0KLQotICAgICAgICBwcml2YXRlIGJvb2xlYW4gaXNTcGVjaWFsQ2hhcigpIHsKLSAgICAgICAgICAgIHJldHVybiAoKG1EYXRhMSA9PSAweDExIHx8IG1EYXRhMSA9PSAweDE5KQotICAgICAgICAgICAgICAgICAgICAmJiBtRGF0YTIgPj0gMHgzMCAmJiBtRGF0YTIgPD0gMHgzZik7Ci0gICAgICAgIH0KLQotICAgICAgICBwcml2YXRlIGJvb2xlYW4gaXNFeHRlbmRlZENoYXIoKSB7Ci0gICAgICAgICAgICByZXR1cm4gKChtRGF0YTEgPT0gMHgxMiB8fCBtRGF0YTEgPT0gMHgxQQotICAgICAgICAgICAgICAgICAgICB8fCBtRGF0YTEgPT0gMHgxMyB8fCBtRGF0YTEgPT0gMHgxQikKLSAgICAgICAgICAgICAgICAgICAgJiYgbURhdGEyID49IDB4MjAgJiYgbURhdGEyIDw9IDB4M2YpOwotICAgICAgICB9Ci0KLSAgICAgICAgcHJpdmF0ZSBjaGFyIGdldEJhc2ljQ2hhcihieXRlIGRhdGEpIHsKLSAgICAgICAgICAgIGNoYXIgYzsKLSAgICAgICAgICAgIC8vIHJlcGxhY2UgdGhlIG5vbi1BU0NJSSBvbmVzCi0gICAgICAgICAgICBzd2l0Y2ggKGRhdGEpIHsKLSAgICAgICAgICAgICAgICBjYXNlIDB4MkE6IGMgPSAnXHUwMEUxJzsgYnJlYWs7Ci0gICAgICAgICAgICAgICAgY2FzZSAweDVDOiBjID0gJ1x1MDBFOSc7IGJyZWFrOwotICAgICAgICAgICAgICAgIGNhc2UgMHg1RTogYyA9ICdcdTAwRUQnOyBicmVhazsKLSAgICAgICAgICAgICAgICBjYXNlIDB4NUY6IGMgPSAnXHUwMEYzJzsgYnJlYWs7Ci0gICAgICAgICAgICAgICAgY2FzZSAweDYwOiBjID0gJ1x1MDBGQSc7IGJyZWFrOwotICAgICAgICAgICAgICAgIGNhc2UgMHg3QjogYyA9ICdcdTAwRTcnOyBicmVhazsKLSAgICAgICAgICAgICAgICBjYXNlIDB4N0M6IGMgPSAnXHUwMEY3JzsgYnJlYWs7Ci0gICAgICAgICAgICAgICAgY2FzZSAweDdEOiBjID0gJ1x1MDBEMSc7IGJyZWFrOwotICAgICAgICAgICAgICAgIGNhc2UgMHg3RTogYyA9ICdcdTAwRjEnOyBicmVhazsKLSAgICAgICAgICAgICAgICBjYXNlIDB4N0Y6IGMgPSAnXHUyNTg4JzsgYnJlYWs7IC8vIEZ1bGwgYmxvY2sKLSAgICAgICAgICAgICAgICBkZWZhdWx0OiBjID0gKGNoYXIpIGRhdGE7IGJyZWFrOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgcmV0dXJuIGM7Ci0gICAgICAgIH0KLQotICAgICAgICBwcml2YXRlIFN0cmluZyBnZXRCYXNpY0NoYXJzKCkgewotICAgICAgICAgICAgaWYgKG1EYXRhMSA+PSAweDIwICYmIG1EYXRhMSA8PSAweDdmKSB7Ci0gICAgICAgICAgICAgICAgU3RyaW5nQnVpbGRlciBidWlsZGVyID0gbmV3IFN0cmluZ0J1aWxkZXIoMik7Ci0gICAgICAgICAgICAgICAgYnVpbGRlci5hcHBlbmQoZ2V0QmFzaWNDaGFyKG1EYXRhMSkpOwotICAgICAgICAgICAgICAgIGlmIChtRGF0YTIgPj0gMHgyMCAmJiBtRGF0YTIgPD0gMHg3ZikgewotICAgICAgICAgICAgICAgICAgICBidWlsZGVyLmFwcGVuZChnZXRCYXNpY0NoYXIobURhdGEyKSk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIHJldHVybiBidWlsZGVyLnRvU3RyaW5nKCk7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIHJldHVybiBudWxsOwotICAgICAgICB9Ci0KLSAgICAgICAgcHJpdmF0ZSBTdHJpbmcgZ2V0U3BlY2lhbENoYXIoKSB7Ci0gICAgICAgICAgICBpZiAoKG1EYXRhMSA9PSAweDExIHx8IG1EYXRhMSA9PSAweDE5KQotICAgICAgICAgICAgICAgICAgICAmJiBtRGF0YTIgPj0gMHgzMCAmJiBtRGF0YTIgPD0gMHgzZikgewotICAgICAgICAgICAgICAgIHJldHVybiBtU3BlY2lhbENoYXJNYXBbbURhdGEyIC0gMHgzMF07Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIHJldHVybiBudWxsOwotICAgICAgICB9Ci0KLSAgICAgICAgcHJpdmF0ZSBTdHJpbmcgZ2V0RXh0ZW5kZWRDaGFyKCkgewotICAgICAgICAgICAgaWYgKChtRGF0YTEgPT0gMHgxMiB8fCBtRGF0YTEgPT0gMHgxQSkKLSAgICAgICAgICAgICAgICAgICAgJiYgbURhdGEyID49IDB4MjAgJiYgbURhdGEyIDw9IDB4M2YpewotICAgICAgICAgICAgICAgIC8vIDEgU3BhbmlzaC9GcmVuY2ggY2hhcgotICAgICAgICAgICAgICAgIHJldHVybiBtU3BhbmlzaENoYXJNYXBbbURhdGEyIC0gMHgyMF07Ci0gICAgICAgICAgICB9IGVsc2UgaWYgKChtRGF0YTEgPT0gMHgxMyB8fCBtRGF0YTEgPT0gMHgxQikKLSAgICAgICAgICAgICAgICAgICAgJiYgbURhdGEyID49IDB4MjAgJiYgbURhdGEyIDw9IDB4M2YpewotICAgICAgICAgICAgICAgIC8vIDEgUG9ydHVndWVzZS9HZXJtYW4vRGFuaXNoIGNoYXIKLSAgICAgICAgICAgICAgICByZXR1cm4gbVByb3R1Z3Vlc2VDaGFyTWFwW21EYXRhMiAtIDB4MjBdOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICByZXR1cm4gbnVsbDsKLSAgICAgICAgfQotCi0gICAgICAgIEBPdmVycmlkZQotICAgICAgICBwdWJsaWMgU3RyaW5nIHRvU3RyaW5nKCkgewotICAgICAgICAgICAgU3RyaW5nIHN0cjsKLQotICAgICAgICAgICAgaWYgKG1EYXRhMSA8IDB4MTAgJiYgbURhdGEyIDwgMHgxMCkgewotICAgICAgICAgICAgICAgIC8vIE51bGwgUGFkLCBpZ25vcmUKLSAgICAgICAgICAgICAgICByZXR1cm4gU3RyaW5nLmZvcm1hdCgiWyVkXU51bGw6ICUwMnggJTAyeCIsIG1UeXBlLCBtRGF0YTEsIG1EYXRhMik7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGludCBjdHJsQ29kZSA9IGdldEN0cmxDb2RlKCk7Ci0gICAgICAgICAgICBpZiAoY3RybENvZGUgIT0gSU5WQUxJRCkgewotICAgICAgICAgICAgICAgIHJldHVybiBTdHJpbmcuZm9ybWF0KCJbJWRdJXMiLCBtVHlwZSwgY3RybENvZGVUb1N0cmluZyhjdHJsQ29kZSkpOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBpbnQgdGFiT2Zmc2V0ID0gZ2V0VGFiT2Zmc2V0KCk7Ci0gICAgICAgICAgICBpZiAodGFiT2Zmc2V0ID4gMCkgewotICAgICAgICAgICAgICAgIHJldHVybiBTdHJpbmcuZm9ybWF0KCJbJWRdVGFiJWQiLCBtVHlwZSwgdGFiT2Zmc2V0KTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgUEFDIHBhYyA9IGdldFBBQygpOwotICAgICAgICAgICAgaWYgKHBhYyAhPSBudWxsKSB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIFN0cmluZy5mb3JtYXQoIlslZF1QQUM6ICVzIiwgbVR5cGUsIHBhYy50b1N0cmluZygpKTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgU3R5bGVDb2RlIG0gPSBnZXRNaWRSb3coKTsKLSAgICAgICAgICAgIGlmIChtICE9IG51bGwpIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gU3RyaW5nLmZvcm1hdCgiWyVkXU1pZC1yb3c6ICVzIiwgbVR5cGUsIG0udG9TdHJpbmcoKSk7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGlmIChpc0Rpc3BsYXlhYmxlQ2hhcigpKSB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIFN0cmluZy5mb3JtYXQoIlslZF1EaXNwbGF5YWJsZTogJXMgKCUwMnggJTAyeCkiLAotICAgICAgICAgICAgICAgICAgICAgICAgbVR5cGUsIGdldERpc3BsYXlUZXh0KCksIG1EYXRhMSwgbURhdGEyKTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgcmV0dXJuIFN0cmluZy5mb3JtYXQoIlslZF1JbnZhbGlkOiAlMDJ4ICUwMngiLCBtVHlwZSwgbURhdGExLCBtRGF0YTIpOwotICAgICAgICB9Ci0gICAgfQotfQotCi0vKioKLSAqIFdpZGdldCBjYXBhYmxlIG9mIHJlbmRlcmluZyBDRUEtNjA4IGNsb3NlZCBjYXB0aW9ucy4KLSAqLwotY2xhc3MgQ2VhNjA4Q0NXaWRnZXQgZXh0ZW5kcyBDbG9zZWRDYXB0aW9uV2lkZ2V0IGltcGxlbWVudHMgQ2VhNjA4Q0NQYXJzZXIuRGlzcGxheUxpc3RlbmVyIHsKLSAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBSZWN0IG1UZXh0Qm91bmRzID0gbmV3IFJlY3QoKTsKLSAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgbUR1bW15VGV4dCA9ICIxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0IjsKLQotICAgIHB1YmxpYyBDZWE2MDhDQ1dpZGdldChDb250ZXh0IGNvbnRleHQpIHsKLSAgICAgICAgdGhpcyhjb250ZXh0LCBudWxsKTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgQ2VhNjA4Q0NXaWRnZXQoQ29udGV4dCBjb250ZXh0LCBBdHRyaWJ1dGVTZXQgYXR0cnMpIHsKLSAgICAgICAgdGhpcyhjb250ZXh0LCBhdHRycywgMCk7Ci0gICAgfQotCi0gICAgcHVibGljIENlYTYwOENDV2lkZ2V0KENvbnRleHQgY29udGV4dCwgQXR0cmlidXRlU2V0IGF0dHJzLCBpbnQgZGVmU3R5bGUpIHsKLSAgICAgICAgdGhpcyhjb250ZXh0LCBhdHRycywgZGVmU3R5bGUsIDApOwotICAgIH0KLQotICAgIHB1YmxpYyBDZWE2MDhDQ1dpZGdldChDb250ZXh0IGNvbnRleHQsIEF0dHJpYnV0ZVNldCBhdHRycywgaW50IGRlZlN0eWxlQXR0ciwKLSAgICAgICAgICAgIGludCBkZWZTdHlsZVJlcykgewotICAgICAgICBzdXBlcihjb250ZXh0LCBhdHRycywgZGVmU3R5bGVBdHRyLCBkZWZTdHlsZVJlcyk7Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIENsb3NlZENhcHRpb25MYXlvdXQgY3JlYXRlQ2FwdGlvbkxheW91dChDb250ZXh0IGNvbnRleHQpIHsKLSAgICAgICAgcmV0dXJuIG5ldyBDQ0xheW91dChjb250ZXh0KTsKLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgdm9pZCBvbkRpc3BsYXlDaGFuZ2VkKFNwYW5uYWJsZVN0cmluZ0J1aWxkZXJbXSBzdHlsZWRUZXh0cykgewotICAgICAgICAoKENDTGF5b3V0KSBtQ2xvc2VkQ2FwdGlvbkxheW91dCkudXBkYXRlKHN0eWxlZFRleHRzKTsKLQotICAgICAgICBpZiAobUxpc3RlbmVyICE9IG51bGwpIHsKLSAgICAgICAgICAgIG1MaXN0ZW5lci5vbkNoYW5nZWQodGhpcyk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgQ2FwdGlvblN0eWxlIGdldENhcHRpb25TdHlsZSgpIHsKLSAgICAgICAgcmV0dXJuIG1DYXB0aW9uU3R5bGU7Ci0gICAgfQotCi0gICAgcHJpdmF0ZSBzdGF0aWMgY2xhc3MgQ0NMaW5lQm94IGV4dGVuZHMgVGV4dFZpZXcgewotICAgICAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBmbG9hdCBGT05UX1BBRERJTkdfUkFUSU8gPSAwLjc1ZjsKLSAgICAgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgZmxvYXQgRURHRV9PVVRMSU5FX1JBVElPID0gMC4xZjsKLSAgICAgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgZmxvYXQgRURHRV9TSEFET1dfUkFUSU8gPSAwLjA1ZjsKLSAgICAgICAgcHJpdmF0ZSBmbG9hdCBtT3V0bGluZVdpZHRoOwotICAgICAgICBwcml2YXRlIGZsb2F0IG1TaGFkb3dSYWRpdXM7Ci0gICAgICAgIHByaXZhdGUgZmxvYXQgbVNoYWRvd09mZnNldDsKLQotICAgICAgICBwcml2YXRlIGludCBtVGV4dENvbG9yID0gQ29sb3IuV0hJVEU7Ci0gICAgICAgIHByaXZhdGUgaW50IG1CZ0NvbG9yID0gQ29sb3IuQkxBQ0s7Ci0gICAgICAgIHByaXZhdGUgaW50IG1FZGdlVHlwZSA9IENhcHRpb25TdHlsZS5FREdFX1RZUEVfTk9ORTsKLSAgICAgICAgcHJpdmF0ZSBpbnQgbUVkZ2VDb2xvciA9IENvbG9yLlRSQU5TUEFSRU5UOwotCi0gICAgICAgIENDTGluZUJveChDb250ZXh0IGNvbnRleHQpIHsKLSAgICAgICAgICAgIHN1cGVyKGNvbnRleHQpOwotICAgICAgICAgICAgc2V0R3Jhdml0eShHcmF2aXR5LkNFTlRFUik7Ci0gICAgICAgICAgICBzZXRCYWNrZ3JvdW5kQ29sb3IoQ29sb3IuVFJBTlNQQVJFTlQpOwotICAgICAgICAgICAgc2V0VGV4dENvbG9yKENvbG9yLldISVRFKTsKLSAgICAgICAgICAgIHNldFR5cGVmYWNlKFR5cGVmYWNlLk1PTk9TUEFDRSk7Ci0gICAgICAgICAgICBzZXRWaXNpYmlsaXR5KFZpZXcuSU5WSVNJQkxFKTsKLQotICAgICAgICAgICAgZmluYWwgUmVzb3VyY2VzIHJlcyA9IGdldENvbnRleHQoKS5nZXRSZXNvdXJjZXMoKTsKLQotICAgICAgICAgICAgLy8gZ2V0IHRoZSBkZWZhdWx0ICh3aWxsIGJlIHVwZGF0ZWQgbGF0ZXIgZHVyaW5nIG1lYXN1cmUpCi0gICAgICAgICAgICBtT3V0bGluZVdpZHRoID0gcmVzLmdldERpbWVuc2lvblBpeGVsU2l6ZSgKLSAgICAgICAgICAgICAgICAgICAgY29tLmFuZHJvaWQuaW50ZXJuYWwuUi5kaW1lbi5zdWJ0aXRsZV9vdXRsaW5lX3dpZHRoKTsKLSAgICAgICAgICAgIG1TaGFkb3dSYWRpdXMgPSByZXMuZ2V0RGltZW5zaW9uUGl4ZWxTaXplKAotICAgICAgICAgICAgICAgICAgICBjb20uYW5kcm9pZC5pbnRlcm5hbC5SLmRpbWVuLnN1YnRpdGxlX3NoYWRvd19yYWRpdXMpOwotICAgICAgICAgICAgbVNoYWRvd09mZnNldCA9IHJlcy5nZXREaW1lbnNpb25QaXhlbFNpemUoCi0gICAgICAgICAgICAgICAgICAgIGNvbS5hbmRyb2lkLmludGVybmFsLlIuZGltZW4uc3VidGl0bGVfc2hhZG93X29mZnNldCk7Ci0gICAgICAgIH0KLQotICAgICAgICB2b2lkIHNldENhcHRpb25TdHlsZShDYXB0aW9uU3R5bGUgY2FwdGlvblN0eWxlKSB7Ci0gICAgICAgICAgICBtVGV4dENvbG9yID0gY2FwdGlvblN0eWxlLmZvcmVncm91bmRDb2xvcjsKLSAgICAgICAgICAgIG1CZ0NvbG9yID0gY2FwdGlvblN0eWxlLmJhY2tncm91bmRDb2xvcjsKLSAgICAgICAgICAgIG1FZGdlVHlwZSA9IGNhcHRpb25TdHlsZS5lZGdlVHlwZTsKLSAgICAgICAgICAgIG1FZGdlQ29sb3IgPSBjYXB0aW9uU3R5bGUuZWRnZUNvbG9yOwotCi0gICAgICAgICAgICBzZXRUZXh0Q29sb3IobVRleHRDb2xvcik7Ci0gICAgICAgICAgICBpZiAobUVkZ2VUeXBlID09IENhcHRpb25TdHlsZS5FREdFX1RZUEVfRFJPUF9TSEFET1cpIHsKLSAgICAgICAgICAgICAgICBzZXRTaGFkb3dMYXllcihtU2hhZG93UmFkaXVzLCBtU2hhZG93T2Zmc2V0LCBtU2hhZG93T2Zmc2V0LCBtRWRnZUNvbG9yKTsKLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgc2V0U2hhZG93TGF5ZXIoMCwgMCwgMCwgMCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBpbnZhbGlkYXRlKCk7Ci0gICAgICAgIH0KLQotICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgcHJvdGVjdGVkIHZvaWQgb25NZWFzdXJlKGludCB3aWR0aE1lYXN1cmVTcGVjLCBpbnQgaGVpZ2h0TWVhc3VyZVNwZWMpIHsKLSAgICAgICAgICAgIGZsb2F0IGZvbnRTaXplID0gTWVhc3VyZVNwZWMuZ2V0U2l6ZShoZWlnaHRNZWFzdXJlU3BlYykgKiBGT05UX1BBRERJTkdfUkFUSU87Ci0gICAgICAgICAgICBzZXRUZXh0U2l6ZShUeXBlZFZhbHVlLkNPTVBMRVhfVU5JVF9QWCwgZm9udFNpemUpOwotCi0gICAgICAgICAgICBtT3V0bGluZVdpZHRoID0gRURHRV9PVVRMSU5FX1JBVElPICogZm9udFNpemUgKyAxLjBmOwotICAgICAgICAgICAgbVNoYWRvd1JhZGl1cyA9IEVER0VfU0hBRE9XX1JBVElPICogZm9udFNpemUgKyAxLjBmOzsKLSAgICAgICAgICAgIG1TaGFkb3dPZmZzZXQgPSBtU2hhZG93UmFkaXVzOwotCi0gICAgICAgICAgICAvLyBzZXQgZm9udCBzY2FsZSBpbiB0aGUgWCBkaXJlY3Rpb24gdG8gbWF0Y2ggdGhlIHJlcXVpcmVkIHdpZHRoCi0gICAgICAgICAgICBzZXRTY2FsZVgoMS4wZik7Ci0gICAgICAgICAgICBnZXRQYWludCgpLmdldFRleHRCb3VuZHMobUR1bW15VGV4dCwgMCwgbUR1bW15VGV4dC5sZW5ndGgoKSwgbVRleHRCb3VuZHMpOwotICAgICAgICAgICAgZmxvYXQgYWN0dWFsVGV4dFdpZHRoID0gbVRleHRCb3VuZHMud2lkdGgoKTsKLSAgICAgICAgICAgIGZsb2F0IHJlcXVpcmVkVGV4dFdpZHRoID0gTWVhc3VyZVNwZWMuZ2V0U2l6ZSh3aWR0aE1lYXN1cmVTcGVjKTsKLSAgICAgICAgICAgIHNldFNjYWxlWChyZXF1aXJlZFRleHRXaWR0aCAvIGFjdHVhbFRleHRXaWR0aCk7Ci0KLSAgICAgICAgICAgIHN1cGVyLm9uTWVhc3VyZSh3aWR0aE1lYXN1cmVTcGVjLCBoZWlnaHRNZWFzdXJlU3BlYyk7Ci0gICAgICAgIH0KLQotICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgcHJvdGVjdGVkIHZvaWQgb25EcmF3KENhbnZhcyBjKSB7Ci0gICAgICAgICAgICBpZiAobUVkZ2VUeXBlID09IENhcHRpb25TdHlsZS5FREdFX1RZUEVfVU5TUEVDSUZJRUQKLSAgICAgICAgICAgICAgICAgICAgfHwgbUVkZ2VUeXBlID09IENhcHRpb25TdHlsZS5FREdFX1RZUEVfTk9ORQotICAgICAgICAgICAgICAgICAgICB8fCBtRWRnZVR5cGUgPT0gQ2FwdGlvblN0eWxlLkVER0VfVFlQRV9EUk9QX1NIQURPVykgewotICAgICAgICAgICAgICAgIC8vIHRoZXNlIGVkZ2Ugc3R5bGVzIGRvbid0IHJlcXVpcmUgYSBzZWNvbmQgcGFzcwotICAgICAgICAgICAgICAgIHN1cGVyLm9uRHJhdyhjKTsKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGlmIChtRWRnZVR5cGUgPT0gQ2FwdGlvblN0eWxlLkVER0VfVFlQRV9PVVRMSU5FKSB7Ci0gICAgICAgICAgICAgICAgZHJhd0VkZ2VPdXRsaW5lKGMpOwotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAvLyBSYWlzZWQgb3IgZGVwcmVzc2VkCi0gICAgICAgICAgICAgICAgZHJhd0VkZ2VSYWlzZWRPckRlcHJlc3NlZChjKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIHByaXZhdGUgdm9pZCBkcmF3RWRnZU91dGxpbmUoQ2FudmFzIGMpIHsKLSAgICAgICAgICAgIFRleHRQYWludCB0ZXh0UGFpbnQgPSBnZXRQYWludCgpOwotCi0gICAgICAgICAgICBQYWludC5TdHlsZSBwcmV2aW91c1N0eWxlID0gdGV4dFBhaW50LmdldFN0eWxlKCk7Ci0gICAgICAgICAgICBQYWludC5Kb2luIHByZXZpb3VzSm9pbiA9IHRleHRQYWludC5nZXRTdHJva2VKb2luKCk7Ci0gICAgICAgICAgICBmbG9hdCBwcmV2aW91c1dpZHRoID0gdGV4dFBhaW50LmdldFN0cm9rZVdpZHRoKCk7Ci0KLSAgICAgICAgICAgIHNldFRleHRDb2xvcihtRWRnZUNvbG9yKTsKLSAgICAgICAgICAgIHRleHRQYWludC5zZXRTdHlsZShQYWludC5TdHlsZS5GSUxMX0FORF9TVFJPS0UpOwotICAgICAgICAgICAgdGV4dFBhaW50LnNldFN0cm9rZUpvaW4oUGFpbnQuSm9pbi5ST1VORCk7Ci0gICAgICAgICAgICB0ZXh0UGFpbnQuc2V0U3Ryb2tlV2lkdGgobU91dGxpbmVXaWR0aCk7Ci0KLSAgICAgICAgICAgIC8vIERyYXcgb3V0bGluZSBhbmQgYmFja2dyb3VuZCBvbmx5LgotICAgICAgICAgICAgc3VwZXIub25EcmF3KGMpOwotCi0gICAgICAgICAgICAvLyBSZXN0b3JlIG9yaWdpbmFsIHNldHRpbmdzLgotICAgICAgICAgICAgc2V0VGV4dENvbG9yKG1UZXh0Q29sb3IpOwotICAgICAgICAgICAgdGV4dFBhaW50LnNldFN0eWxlKHByZXZpb3VzU3R5bGUpOwotICAgICAgICAgICAgdGV4dFBhaW50LnNldFN0cm9rZUpvaW4ocHJldmlvdXNKb2luKTsKLSAgICAgICAgICAgIHRleHRQYWludC5zZXRTdHJva2VXaWR0aChwcmV2aW91c1dpZHRoKTsKLQotICAgICAgICAgICAgLy8gUmVtb3ZlIHRoZSBiYWNrZ3JvdW5kLgotICAgICAgICAgICAgc2V0QmFja2dyb3VuZFNwYW5zKENvbG9yLlRSQU5TUEFSRU5UKTsKLSAgICAgICAgICAgIC8vIERyYXcgZm9yZWdyb3VuZCBvbmx5LgotICAgICAgICAgICAgc3VwZXIub25EcmF3KGMpOwotICAgICAgICAgICAgLy8gUmVzdG9yZSB0aGUgYmFja2dyb3VuZC4KLSAgICAgICAgICAgIHNldEJhY2tncm91bmRTcGFucyhtQmdDb2xvcik7Ci0gICAgICAgIH0KLQotICAgICAgICBwcml2YXRlIHZvaWQgZHJhd0VkZ2VSYWlzZWRPckRlcHJlc3NlZChDYW52YXMgYykgewotICAgICAgICAgICAgVGV4dFBhaW50IHRleHRQYWludCA9IGdldFBhaW50KCk7Ci0KLSAgICAgICAgICAgIFBhaW50LlN0eWxlIHByZXZpb3VzU3R5bGUgPSB0ZXh0UGFpbnQuZ2V0U3R5bGUoKTsKLSAgICAgICAgICAgIHRleHRQYWludC5zZXRTdHlsZShQYWludC5TdHlsZS5GSUxMKTsKLQotICAgICAgICAgICAgZmluYWwgYm9vbGVhbiByYWlzZWQgPSBtRWRnZVR5cGUgPT0gQ2FwdGlvblN0eWxlLkVER0VfVFlQRV9SQUlTRUQ7Ci0gICAgICAgICAgICBmaW5hbCBpbnQgY29sb3JVcCA9IHJhaXNlZCA/IENvbG9yLldISVRFIDogbUVkZ2VDb2xvcjsKLSAgICAgICAgICAgIGZpbmFsIGludCBjb2xvckRvd24gPSByYWlzZWQgPyBtRWRnZUNvbG9yIDogQ29sb3IuV0hJVEU7Ci0gICAgICAgICAgICBmaW5hbCBmbG9hdCBvZmZzZXQgPSBtU2hhZG93UmFkaXVzIC8gMmY7Ci0KLSAgICAgICAgICAgIC8vIERyYXcgYmFja2dyb3VuZCBhbmQgdGV4dCB3aXRoIHNoYWRvdyB1cAotICAgICAgICAgICAgc2V0U2hhZG93TGF5ZXIobVNoYWRvd1JhZGl1cywgLW9mZnNldCwgLW9mZnNldCwgY29sb3JVcCk7Ci0gICAgICAgICAgICBzdXBlci5vbkRyYXcoYyk7Ci0KLSAgICAgICAgICAgIC8vIFJlbW92ZSB0aGUgYmFja2dyb3VuZC4KLSAgICAgICAgICAgIHNldEJhY2tncm91bmRTcGFucyhDb2xvci5UUkFOU1BBUkVOVCk7Ci0KLSAgICAgICAgICAgIC8vIERyYXcgdGV4dCB3aXRoIHNoYWRvdyBkb3duCi0gICAgICAgICAgICBzZXRTaGFkb3dMYXllcihtU2hhZG93UmFkaXVzLCArb2Zmc2V0LCArb2Zmc2V0LCBjb2xvckRvd24pOwotICAgICAgICAgICAgc3VwZXIub25EcmF3KGMpOwotCi0gICAgICAgICAgICAvLyBSZXN0b3JlIHNldHRpbmdzCi0gICAgICAgICAgICB0ZXh0UGFpbnQuc2V0U3R5bGUocHJldmlvdXNTdHlsZSk7Ci0KLSAgICAgICAgICAgIC8vIFJlc3RvcmUgdGhlIGJhY2tncm91bmQuCi0gICAgICAgICAgICBzZXRCYWNrZ3JvdW5kU3BhbnMobUJnQ29sb3IpOwotICAgICAgICB9Ci0KLSAgICAgICAgcHJpdmF0ZSB2b2lkIHNldEJhY2tncm91bmRTcGFucyhpbnQgY29sb3IpIHsKLSAgICAgICAgICAgIENoYXJTZXF1ZW5jZSB0ZXh0ID0gZ2V0VGV4dCgpOwotICAgICAgICAgICAgaWYgKHRleHQgaW5zdGFuY2VvZiBTcGFubmFibGUpIHsKLSAgICAgICAgICAgICAgICBTcGFubmFibGUgc3Bhbm5hYmxlID0gKFNwYW5uYWJsZSkgdGV4dDsKLSAgICAgICAgICAgICAgICBDZWE2MDhDQ1BhcnNlci5NdXRhYmxlQmFja2dyb3VuZENvbG9yU3BhbltdIGJnU3BhbnMgPSBzcGFubmFibGUuZ2V0U3BhbnMoCi0gICAgICAgICAgICAgICAgICAgICAgICAwLCBzcGFubmFibGUubGVuZ3RoKCksIENlYTYwOENDUGFyc2VyLk11dGFibGVCYWNrZ3JvdW5kQ29sb3JTcGFuLmNsYXNzKTsKLSAgICAgICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGJnU3BhbnMubGVuZ3RoOyBpKyspIHsKLSAgICAgICAgICAgICAgICAgICAgYmdTcGFuc1tpXS5zZXRCYWNrZ3JvdW5kQ29sb3IoY29sb3IpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLQotICAgIHByaXZhdGUgc3RhdGljIGNsYXNzIENDTGF5b3V0IGV4dGVuZHMgTGluZWFyTGF5b3V0IGltcGxlbWVudHMgQ2xvc2VkQ2FwdGlvbkxheW91dCB7Ci0gICAgICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGludCBNQVhfUk9XUyA9IENlYTYwOENDUGFyc2VyLk1BWF9ST1dTOwotICAgICAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBmbG9hdCBTQUZFX0FSRUFfUkFUSU8gPSAwLjlmOwotCi0gICAgICAgIHByaXZhdGUgZmluYWwgQ0NMaW5lQm94W10gbUxpbmVCb3hlcyA9IG5ldyBDQ0xpbmVCb3hbTUFYX1JPV1NdOwotCi0gICAgICAgIENDTGF5b3V0KENvbnRleHQgY29udGV4dCkgewotICAgICAgICAgICAgc3VwZXIoY29udGV4dCk7Ci0gICAgICAgICAgICBzZXRHcmF2aXR5KEdyYXZpdHkuU1RBUlQpOwotICAgICAgICAgICAgc2V0T3JpZW50YXRpb24oTGluZWFyTGF5b3V0LlZFUlRJQ0FMKTsKLSAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgTUFYX1JPV1M7IGkrKykgewotICAgICAgICAgICAgICAgIG1MaW5lQm94ZXNbaV0gPSBuZXcgQ0NMaW5lQm94KGdldENvbnRleHQoKSk7Ci0gICAgICAgICAgICAgICAgYWRkVmlldyhtTGluZUJveGVzW2ldLCBMYXlvdXRQYXJhbXMuV1JBUF9DT05URU5ULCBMYXlvdXRQYXJhbXMuV1JBUF9DT05URU5UKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIEBPdmVycmlkZQotICAgICAgICBwdWJsaWMgdm9pZCBzZXRDYXB0aW9uU3R5bGUoQ2FwdGlvblN0eWxlIGNhcHRpb25TdHlsZSkgewotICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBNQVhfUk9XUzsgaSsrKSB7Ci0gICAgICAgICAgICAgICAgbUxpbmVCb3hlc1tpXS5zZXRDYXB0aW9uU3R5bGUoY2FwdGlvblN0eWxlKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIEBPdmVycmlkZQotICAgICAgICBwdWJsaWMgdm9pZCBzZXRGb250U2NhbGUoZmxvYXQgZm9udFNjYWxlKSB7Ci0gICAgICAgICAgICAvLyBJZ25vcmVzIHRoZSBmb250IHNjYWxlIGNoYW5nZXMgb2YgdGhlIHN5c3RlbSB3aWRlIENDIHByZWZlcmVuY2UuCi0gICAgICAgIH0KLQotICAgICAgICB2b2lkIHVwZGF0ZShTcGFubmFibGVTdHJpbmdCdWlsZGVyW10gdGV4dEJ1ZmZlcikgewotICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBNQVhfUk9XUzsgaSsrKSB7Ci0gICAgICAgICAgICAgICAgaWYgKHRleHRCdWZmZXJbaV0gIT0gbnVsbCkgewotICAgICAgICAgICAgICAgICAgICBtTGluZUJveGVzW2ldLnNldFRleHQodGV4dEJ1ZmZlcltpXSwgVGV4dFZpZXcuQnVmZmVyVHlwZS5TUEFOTkFCTEUpOwotICAgICAgICAgICAgICAgICAgICBtTGluZUJveGVzW2ldLnNldFZpc2liaWxpdHkoVmlldy5WSVNJQkxFKTsKLSAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICBtTGluZUJveGVzW2ldLnNldFZpc2liaWxpdHkoVmlldy5JTlZJU0lCTEUpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIEBPdmVycmlkZQotICAgICAgICBwcm90ZWN0ZWQgdm9pZCBvbk1lYXN1cmUoaW50IHdpZHRoTWVhc3VyZVNwZWMsIGludCBoZWlnaHRNZWFzdXJlU3BlYykgewotICAgICAgICAgICAgc3VwZXIub25NZWFzdXJlKHdpZHRoTWVhc3VyZVNwZWMsIGhlaWdodE1lYXN1cmVTcGVjKTsKLQotICAgICAgICAgICAgaW50IHNhZmVXaWR0aCA9IGdldE1lYXN1cmVkV2lkdGgoKTsKLSAgICAgICAgICAgIGludCBzYWZlSGVpZ2h0ID0gZ2V0TWVhc3VyZWRIZWlnaHQoKTsKLQotICAgICAgICAgICAgLy8gQ0VBLTYwOCBhc3N1bWVzIDQ6MyB2aWRlbwotICAgICAgICAgICAgaWYgKHNhZmVXaWR0aCAqIDMgPj0gc2FmZUhlaWdodCAqIDQpIHsKLSAgICAgICAgICAgICAgICBzYWZlV2lkdGggPSBzYWZlSGVpZ2h0ICogNCAvIDM7Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIHNhZmVIZWlnaHQgPSBzYWZlV2lkdGggKiAzIC8gNDsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHNhZmVXaWR0aCAqPSBTQUZFX0FSRUFfUkFUSU87Ci0gICAgICAgICAgICBzYWZlSGVpZ2h0ICo9IFNBRkVfQVJFQV9SQVRJTzsKLQotICAgICAgICAgICAgaW50IGxpbmVIZWlnaHQgPSBzYWZlSGVpZ2h0IC8gTUFYX1JPV1M7Ci0gICAgICAgICAgICBpbnQgbGluZUhlaWdodE1lYXN1cmVTcGVjID0gTWVhc3VyZVNwZWMubWFrZU1lYXN1cmVTcGVjKAotICAgICAgICAgICAgICAgICAgICBsaW5lSGVpZ2h0LCBNZWFzdXJlU3BlYy5FWEFDVExZKTsKLSAgICAgICAgICAgIGludCBsaW5lV2lkdGhNZWFzdXJlU3BlYyA9IE1lYXN1cmVTcGVjLm1ha2VNZWFzdXJlU3BlYygKLSAgICAgICAgICAgICAgICAgICAgc2FmZVdpZHRoLCBNZWFzdXJlU3BlYy5FWEFDVExZKTsKLQotICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBNQVhfUk9XUzsgaSsrKSB7Ci0gICAgICAgICAgICAgICAgbUxpbmVCb3hlc1tpXS5tZWFzdXJlKGxpbmVXaWR0aE1lYXN1cmVTcGVjLCBsaW5lSGVpZ2h0TWVhc3VyZVNwZWMpOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgIHByb3RlY3RlZCB2b2lkIG9uTGF5b3V0KGJvb2xlYW4gY2hhbmdlZCwgaW50IGwsIGludCB0LCBpbnQgciwgaW50IGIpIHsKLSAgICAgICAgICAgIC8vIHNhZmUgY2FwdGlvbiBhcmVhCi0gICAgICAgICAgICBpbnQgdmlld1BvcnRXaWR0aCA9IHIgLSBsOwotICAgICAgICAgICAgaW50IHZpZXdQb3J0SGVpZ2h0ID0gYiAtIHQ7Ci0gICAgICAgICAgICBpbnQgc2FmZVdpZHRoLCBzYWZlSGVpZ2h0OwotICAgICAgICAgICAgLy8gQ0VBLTYwOCBhc3N1bWVzIDQ6MyB2aWRlbwotICAgICAgICAgICAgaWYgKHZpZXdQb3J0V2lkdGggKiAzID49IHZpZXdQb3J0SGVpZ2h0ICogNCkgewotICAgICAgICAgICAgICAgIHNhZmVXaWR0aCA9IHZpZXdQb3J0SGVpZ2h0ICogNCAvIDM7Ci0gICAgICAgICAgICAgICAgc2FmZUhlaWdodCA9IHZpZXdQb3J0SGVpZ2h0OwotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICBzYWZlV2lkdGggPSB2aWV3UG9ydFdpZHRoOwotICAgICAgICAgICAgICAgIHNhZmVIZWlnaHQgPSB2aWV3UG9ydFdpZHRoICogMyAvIDQ7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBzYWZlV2lkdGggKj0gU0FGRV9BUkVBX1JBVElPOwotICAgICAgICAgICAgc2FmZUhlaWdodCAqPSBTQUZFX0FSRUFfUkFUSU87Ci0gICAgICAgICAgICBpbnQgbGVmdCA9ICh2aWV3UG9ydFdpZHRoIC0gc2FmZVdpZHRoKSAvIDI7Ci0gICAgICAgICAgICBpbnQgdG9wID0gKHZpZXdQb3J0SGVpZ2h0IC0gc2FmZUhlaWdodCkgLyAyOwotCi0gICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IE1BWF9ST1dTOyBpKyspIHsKLSAgICAgICAgICAgICAgICBtTGluZUJveGVzW2ldLmxheW91dCgKLSAgICAgICAgICAgICAgICAgICAgICAgIGxlZnQsCi0gICAgICAgICAgICAgICAgICAgICAgICB0b3AgKyBzYWZlSGVpZ2h0ICogaSAvIE1BWF9ST1dTLAotICAgICAgICAgICAgICAgICAgICAgICAgbGVmdCArIHNhZmVXaWR0aCwKLSAgICAgICAgICAgICAgICAgICAgICAgIHRvcCArIHNhZmVIZWlnaHQgKiAoaSArIDEpIC8gTUFYX1JPV1MpOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotfQpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvTWVkaWFDb21wb25lbnRzL3NyYy9jb20vYW5kcm9pZC9tZWRpYS9zdWJ0aXRsZS9NZWRpYVRpbWVQcm92aWRlci5qYXZhIGIvcGFja2FnZXMvTWVkaWFDb21wb25lbnRzL3NyYy9jb20vYW5kcm9pZC9tZWRpYS9zdWJ0aXRsZS9NZWRpYVRpbWVQcm92aWRlci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhZjM2ZDdmLi4wMDAwMDAwCi0tLSBhL3BhY2thZ2VzL01lZGlhQ29tcG9uZW50cy9zcmMvY29tL2FuZHJvaWQvbWVkaWEvc3VidGl0bGUvTWVkaWFUaW1lUHJvdmlkZXIuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDg5ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgMjAxOCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0Ci0gKgotICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7Ci0gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCi0gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLSAqCi0gKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotICoKLSAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKLSAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCi0gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KLSAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKLSAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgotICovCi0KLXBhY2thZ2UgY29tLmFuZHJvaWQubWVkaWEuc3VidGl0bGU7Ci0KLS8vIE5vdGU6IFRoaXMgaXMganVzdCBjb3BpZWQgZnJvbSBhbmRyb2lkLm1lZGlhLk1lZGlhVGltZVByb3ZpZGVyLgotcHVibGljIGludGVyZmFjZSBNZWRpYVRpbWVQcm92aWRlciB7Ci0gICAgLy8gd2UgZG8gbm90IGFsbG93IG5lZ2F0aXZlIG1lZGlhIHRpbWUKLSAgICAvKioKLSAgICAgKiBQcmVzZW50YXRpb24gdGltZSB2YWx1ZSBpZiBubyB0aW1lZCBldmVudCBub3RpZmljYXRpb24gaXMgcmVxdWVzdGVkLgotICAgICAqLwotICAgIHB1YmxpYyBmaW5hbCBzdGF0aWMgbG9uZyBOT19USU1FID0gLTE7Ci0KLSAgICAvKioKLSAgICAgKiBDYW5jZWxzIGFsbCBwcmV2aW91cyBub3RpZmljYXRpb24gcmVxdWVzdCBmcm9tIHRoaXMgbGlzdGVuZXIgaWYgYW55LiAgSXQKLSAgICAgKiByZWdpc3RlcnMgdGhlIGxpc3RlbmVyIHRvIGdldCBzZWVrIGFuZCBzdG9wIG5vdGlmaWNhdGlvbnMuICBJZiB0aW1lVXMgaXMKLSAgICAgKiBub3QgbmVnYXRpdmUsIGl0IGFsc28gcmVnaXN0ZXJzIHRoZSBsaXN0ZW5lciBmb3IgYSB0aW1lZCBldmVudAotICAgICAqIG5vdGlmaWNhdGlvbiB3aGVuIHRoZSBwcmVzZW50YXRpb24gdGltZSByZWFjaGVzIChiZWNvbWVzIGdyZWF0ZXIpIHRoYW4KLSAgICAgKiB0aGUgdmFsdWUgc3BlY2lmaWVkLiAgVGhpcyBoYXBwZW5zIGltbWVkaWF0ZWx5IGlmIHRoZSBjdXJyZW50IG1lZGlhIHRpbWUKLSAgICAgKiBpcyBsYXJnZXIgdGhhbiBvciBlcXVhbCB0byB0aW1lVXMuCi0gICAgICoKLSAgICAgKiBAcGFyYW0gdGltZVVzIHByZXNlbnRhdGlvbiB0aW1lIHRvIGdldCB0aW1lZCBldmVudCBjYWxsYmFjayBhdCAob3IKLSAgICAgKiAgICAgICAgICAgICAgIHtAbGluayAjTk9fVElNRX0pCi0gICAgICovCi0gICAgcHVibGljIHZvaWQgbm90aWZ5QXQobG9uZyB0aW1lVXMsIE9uTWVkaWFUaW1lTGlzdGVuZXIgbGlzdGVuZXIpOwotCi0gICAgLyoqCi0gICAgICogQ2FuY2VscyBhbGwgcHJldmlvdXMgbm90aWZpY2F0aW9uIHJlcXVlc3QgZnJvbSB0aGlzIGxpc3RlbmVyIGlmIGFueS4gIEl0Ci0gICAgICogcmVnaXN0ZXJzIHRoZSBsaXN0ZW5lciB0byBnZXQgc2VlayBhbmQgc3RvcCBub3RpZmljYXRpb25zLiAgSWYgdGhlIG1lZGlhCi0gICAgICogaXMgc3RvcHBlZCwgdGhlIGxpc3RlbmVyIHdpbGwgaW1tZWRpYXRlbHkgcmVjZWl2ZSBhIHN0b3Agbm90aWZpY2F0aW9uLgotICAgICAqIE90aGVyd2lzZSwgaXQgd2lsbCByZWNlaXZlIGEgdGltZWQgZXZlbnQgbm90aWZpY2F0b24uCi0gICAgICovCi0gICAgcHVibGljIHZvaWQgc2NoZWR1bGVVcGRhdGUoT25NZWRpYVRpbWVMaXN0ZW5lciBsaXN0ZW5lcik7Ci0KLSAgICAvKioKLSAgICAgKiBDYW5jZWxzIGFsbCBwcmV2aW91cyBub3RpZmljYXRpb24gcmVxdWVzdCBmcm9tIHRoaXMgbGlzdGVuZXIgaWYgYW55LgotICAgICAqLwotICAgIHB1YmxpYyB2b2lkIGNhbmNlbE5vdGlmaWNhdGlvbnMoT25NZWRpYVRpbWVMaXN0ZW5lciBsaXN0ZW5lcik7Ci0KLSAgICAvKioKLSAgICAgKiBHZXQgdGhlIGN1cnJlbnQgcHJlc2VudGF0aW9uIHRpbWUuCi0gICAgICoKLSAgICAgKiBAcGFyYW0gcHJlY2lzZSAgIFdoZXRoZXIgZ2V0dGluZyBhIHByZWNpc2UgdGltZSBpcyBpbXBvcnRhbnQuIFRoaXMgaXMKLSAgICAgKiAgICAgICAgICAgICAgICAgIG1vcmUgY29zdGx5LgotICAgICAqIEBwYXJhbSBtb25vdG9uaWMgV2hldGhlciByZXR1cm5lZCB0aW1lIHNob3VsZCBiZSBtb25vdG9uaWM6IHRoYXQgaXMsCi0gICAgICogICAgICAgICAgICAgICAgICBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gdGhlIGxhc3QgcmV0dXJuZWQgdGltZS4gIERvbid0Ci0gICAgICogICAgICAgICAgICAgICAgICBhbHdheXMgc2V0IHRoaXMgdG8gdHJ1ZS4gIEUuZy4gdGhpcyBoYXMgdW5kZXNpcmVkCi0gICAgICogICAgICAgICAgICAgICAgICBjb25zZXF1ZW5jZXMgaWYgdGhlIG1lZGlhIGlzIHNlZWtlZCBiZXR3ZWVuIGNhbGxzLgotICAgICAqIEB0aHJvd3MgSWxsZWdhbFN0YXRlRXhjZXB0aW9uIGlmIHRoZSBtZWRpYSBpcyBub3QgaW5pdGlhbGl6ZWQKLSAgICAgKi8KLSAgICBwdWJsaWMgbG9uZyBnZXRDdXJyZW50VGltZVVzKGJvb2xlYW4gcHJlY2lzZSwgYm9vbGVhbiBtb25vdG9uaWMpCi0gICAgICAgICAgICB0aHJvd3MgSWxsZWdhbFN0YXRlRXhjZXB0aW9uOwotCi0gICAgcHVibGljIHN0YXRpYyBpbnRlcmZhY2UgT25NZWRpYVRpbWVMaXN0ZW5lciB7Ci0gICAgICAgIC8qKgotICAgICAgICAgKiBDYWxsZWQgd2hlbiB0aGUgcmVnaXN0ZXJlZCB0aW1lIHdhcyByZWFjaGVkIG5hdHVyYWxseS4KLSAgICAgICAgICoKLSAgICAgICAgICogQHBhcmFtIHRpbWVVcyBjdXJyZW50IG1lZGlhIHRpbWUKLSAgICAgICAgICovCi0gICAgICAgIHZvaWQgb25UaW1lZEV2ZW50KGxvbmcgdGltZVVzKTsKLQotICAgICAgICAvKioKLSAgICAgICAgICogQ2FsbGVkIHdoZW4gdGhlIG1lZGlhIHRpbWUgY2hhbmdlZCBkdWUgdG8gc2Vla2luZy4KLSAgICAgICAgICoKLSAgICAgICAgICogQHBhcmFtIHRpbWVVcyBjdXJyZW50IG1lZGlhIHRpbWUKLSAgICAgICAgICovCi0gICAgICAgIHZvaWQgb25TZWVrKGxvbmcgdGltZVVzKTsKLQotICAgICAgICAvKioKLSAgICAgICAgICogQ2FsbGVkIHdoZW4gdGhlIHBsYXliYWNrIHN0b3BwZWQuICBUaGlzIGlzIG5vdCBjYWxsZWQgb24gcGF1c2UsIG9ubHkKLSAgICAgICAgICogb24gZnVsbCBzdG9wLCBhdCB3aGljaCBwb2ludCB0aGVyZSBpcyBubyBmdXJ0aGVyIGN1cnJlbnQgbWVkaWEgdGltZS4KLSAgICAgICAgICovCi0gICAgICAgIHZvaWQgb25TdG9wKCk7Ci0gICAgfQotfQotCmRpZmYgLS1naXQgYS9wYWNrYWdlcy9NZWRpYUNvbXBvbmVudHMvc3JjL2NvbS9hbmRyb2lkL21lZGlhL3N1YnRpdGxlL1N1YnRpdGxlQ29udHJvbGxlci5qYXZhIGIvcGFja2FnZXMvTWVkaWFDb21wb25lbnRzL3NyYy9jb20vYW5kcm9pZC9tZWRpYS9zdWJ0aXRsZS9TdWJ0aXRsZUNvbnRyb2xsZXIuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTRkNTVkNy4uMDAwMDAwMAotLS0gYS9wYWNrYWdlcy9NZWRpYUNvbXBvbmVudHMvc3JjL2NvbS9hbmRyb2lkL21lZGlhL3N1YnRpdGxlL1N1YnRpdGxlQ29udHJvbGxlci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNTA4ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgMjAxOCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0Ci0gKgotICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7Ci0gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCi0gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLSAqCi0gKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotICoKLSAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKLSAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCi0gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KLSAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKLSAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgotICovCi0KLXBhY2thZ2UgY29tLmFuZHJvaWQubWVkaWEuc3VidGl0bGU7Ci0KLWltcG9ydCBqYXZhLnV0aWwuTG9jYWxlOwotaW1wb3J0IGphdmEudXRpbC5WZWN0b3I7Ci0KLWltcG9ydCBhbmRyb2lkLmNvbnRlbnQuQ29udGV4dDsKLWltcG9ydCBhbmRyb2lkLm1lZGlhLk1lZGlhRm9ybWF0OwotaW1wb3J0IGFuZHJvaWQubWVkaWEuTWVkaWFQbGF5ZXIyOwotaW1wb3J0IGFuZHJvaWQubWVkaWEuTWVkaWFQbGF5ZXIyLlRyYWNrSW5mbzsKLWltcG9ydCBhbmRyb2lkLm9zLkhhbmRsZXI7Ci1pbXBvcnQgYW5kcm9pZC5vcy5Mb29wZXI7Ci1pbXBvcnQgYW5kcm9pZC5vcy5NZXNzYWdlOwotaW1wb3J0IGFuZHJvaWQudmlldy5hY2Nlc3NpYmlsaXR5LkNhcHRpb25pbmdNYW5hZ2VyOwotCi1pbXBvcnQgY29tLmFuZHJvaWQubWVkaWEuc3VidGl0bGUuU3VidGl0bGVUcmFjay5SZW5kZXJpbmdXaWRnZXQ7Ci0KLS8vIE5vdGU6IFRoaXMgaXMgZm9ya2VkIGZyb20gYW5kcm9pZC5tZWRpYS5TdWJ0aXRsZUNvbnRyb2xsZXIgc2luY2UgUAotLyoqCi0gKiBUaGUgc3VidGl0bGUgY29udHJvbGxlciBwcm92aWRlcyB0aGUgYXJjaGl0ZWN0dXJlIHRvIGRpc3BsYXkgc3VidGl0bGVzIGZvciBhCi0gKiBtZWRpYSBzb3VyY2UuICBJdCBhbGxvd3Mgc3BlY2lmeWluZyB3aGljaCB0cmFja3MgdG8gZGlzcGxheSwgb24gd2hpY2ggYW5jaG9yCi0gKiB0byBkaXNwbGF5IHRoZW0sIGFuZCBhbHNvIGFsbG93cyBhZGRpbmcgZXh0ZXJuYWwsIG91dC1vZi1iYW5kIHN1YnRpdGxlIHRyYWNrcy4KLSAqLwotcHVibGljIGNsYXNzIFN1YnRpdGxlQ29udHJvbGxlciB7Ci0gICAgcHJpdmF0ZSBNZWRpYVRpbWVQcm92aWRlciBtVGltZVByb3ZpZGVyOwotICAgIHByaXZhdGUgVmVjdG9yPFJlbmRlcmVyPiBtUmVuZGVyZXJzOwotICAgIHByaXZhdGUgVmVjdG9yPFN1YnRpdGxlVHJhY2s+IG1UcmFja3M7Ci0gICAgcHJpdmF0ZSBTdWJ0aXRsZVRyYWNrIG1TZWxlY3RlZFRyYWNrOwotICAgIHByaXZhdGUgYm9vbGVhbiBtU2hvd2luZzsKLSAgICBwcml2YXRlIENhcHRpb25pbmdNYW5hZ2VyIG1DYXB0aW9uaW5nTWFuYWdlcjsKLSAgICBwcml2YXRlIEhhbmRsZXIgbUhhbmRsZXI7Ci0KLSAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgV0hBVF9TSE9XID0gMTsKLSAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgV0hBVF9ISURFID0gMjsKLSAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgV0hBVF9TRUxFQ1RfVFJBQ0sgPSAzOwotICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGludCBXSEFUX1NFTEVDVF9ERUZBVUxUX1RSQUNLID0gNDsKLQotICAgIHByaXZhdGUgZmluYWwgSGFuZGxlci5DYWxsYmFjayBtQ2FsbGJhY2sgPSBuZXcgSGFuZGxlci5DYWxsYmFjaygpIHsKLSAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgIHB1YmxpYyBib29sZWFuIGhhbmRsZU1lc3NhZ2UoTWVzc2FnZSBtc2cpIHsKLSAgICAgICAgICAgIHN3aXRjaCAobXNnLndoYXQpIHsKLSAgICAgICAgICAgIGNhc2UgV0hBVF9TSE9XOgotICAgICAgICAgICAgICAgIGRvU2hvdygpOwotICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICAgICAgY2FzZSBXSEFUX0hJREU6Ci0gICAgICAgICAgICAgICAgZG9IaWRlKCk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgICAgICBjYXNlIFdIQVRfU0VMRUNUX1RSQUNLOgotICAgICAgICAgICAgICAgIGRvU2VsZWN0VHJhY2soKFN1YnRpdGxlVHJhY2spbXNnLm9iaik7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgICAgICBjYXNlIFdIQVRfU0VMRUNUX0RFRkFVTFRfVFJBQ0s6Ci0gICAgICAgICAgICAgICAgZG9TZWxlY3REZWZhdWx0VHJhY2soKTsKLSAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfTsKLQotICAgIHByaXZhdGUgQ2FwdGlvbmluZ01hbmFnZXIuQ2FwdGlvbmluZ0NoYW5nZUxpc3RlbmVyIG1DYXB0aW9uaW5nQ2hhbmdlTGlzdGVuZXIgPQotICAgICAgICBuZXcgQ2FwdGlvbmluZ01hbmFnZXIuQ2FwdGlvbmluZ0NoYW5nZUxpc3RlbmVyKCkgewotICAgICAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgICAgICBwdWJsaWMgdm9pZCBvbkVuYWJsZWRDaGFuZ2VkKGJvb2xlYW4gZW5hYmxlZCkgewotICAgICAgICAgICAgICAgIHNlbGVjdERlZmF1bHRUcmFjaygpOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgICAgIHB1YmxpYyB2b2lkIG9uTG9jYWxlQ2hhbmdlZChMb2NhbGUgbG9jYWxlKSB7Ci0gICAgICAgICAgICAgICAgc2VsZWN0RGVmYXVsdFRyYWNrKCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH07Ci0KLSAgICBwdWJsaWMgU3VidGl0bGVDb250cm9sbGVyKENvbnRleHQgY29udGV4dCkgewotICAgICAgICB0aGlzKGNvbnRleHQsIG51bGwsIG51bGwpOwotICAgIH0KLQotICAgIC8qKgotICAgICAqIENyZWF0ZXMgYSBzdWJ0aXRsZSBjb250cm9sbGVyIGZvciBhIG1lZGlhIHBsYXliYWNrIG9iamVjdCB0aGF0IGltcGxlbWVudHMKLSAgICAgKiB0aGUgTWVkaWFUaW1lUHJvdmlkZXIgaW50ZXJmYWNlLgotICAgICAqCi0gICAgICogQHBhcmFtIHRpbWVQcm92aWRlcgotICAgICAqLwotICAgIHB1YmxpYyBTdWJ0aXRsZUNvbnRyb2xsZXIoCi0gICAgICAgICAgICBDb250ZXh0IGNvbnRleHQsCi0gICAgICAgICAgICBNZWRpYVRpbWVQcm92aWRlciB0aW1lUHJvdmlkZXIsCi0gICAgICAgICAgICBMaXN0ZW5lciBsaXN0ZW5lcikgewotICAgICAgICBtVGltZVByb3ZpZGVyID0gdGltZVByb3ZpZGVyOwotICAgICAgICBtTGlzdGVuZXIgPSBsaXN0ZW5lcjsKLQotICAgICAgICBtUmVuZGVyZXJzID0gbmV3IFZlY3RvcjxSZW5kZXJlcj4oKTsKLSAgICAgICAgbVNob3dpbmcgPSBmYWxzZTsKLSAgICAgICAgbVRyYWNrcyA9IG5ldyBWZWN0b3I8U3VidGl0bGVUcmFjaz4oKTsKLSAgICAgICAgbUNhcHRpb25pbmdNYW5hZ2VyID0KLSAgICAgICAgICAgIChDYXB0aW9uaW5nTWFuYWdlciljb250ZXh0LmdldFN5c3RlbVNlcnZpY2UoQ29udGV4dC5DQVBUSU9OSU5HX1NFUlZJQ0UpOwotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHByb3RlY3RlZCB2b2lkIGZpbmFsaXplKCkgdGhyb3dzIFRocm93YWJsZSB7Ci0gICAgICAgIG1DYXB0aW9uaW5nTWFuYWdlci5yZW1vdmVDYXB0aW9uaW5nQ2hhbmdlTGlzdGVuZXIoCi0gICAgICAgICAgICAgICAgbUNhcHRpb25pbmdDaGFuZ2VMaXN0ZW5lcik7Ci0gICAgICAgIHN1cGVyLmZpbmFsaXplKCk7Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogQHJldHVybiB0aGUgYXZhaWxhYmxlIHN1YnRpdGxlIHRyYWNrcyBmb3IgdGhpcyBtZWRpYS4gVGhlc2UgaW5jbHVkZQotICAgICAqIHRoZSB0cmFja3MgZm91bmQgYnkge0BsaW5rIE1lZGlhUGxheWVyfSBhcyB3ZWxsIGFzIGFueSB0cmFja3MgYWRkZWQKLSAgICAgKiBtYW51YWxseSB2aWEge0BsaW5rICNhZGRUcmFja30uCi0gICAgICovCi0gICAgcHVibGljIFN1YnRpdGxlVHJhY2tbXSBnZXRUcmFja3MoKSB7Ci0gICAgICAgIHN5bmNocm9uaXplZChtVHJhY2tzKSB7Ci0gICAgICAgICAgICBTdWJ0aXRsZVRyYWNrW10gdHJhY2tzID0gbmV3IFN1YnRpdGxlVHJhY2tbbVRyYWNrcy5zaXplKCldOwotICAgICAgICAgICAgbVRyYWNrcy50b0FycmF5KHRyYWNrcyk7Ci0gICAgICAgICAgICByZXR1cm4gdHJhY2tzOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogQHJldHVybiB0aGUgY3VycmVudGx5IHNlbGVjdGVkIHN1YnRpdGxlIHRyYWNrCi0gICAgICovCi0gICAgcHVibGljIFN1YnRpdGxlVHJhY2sgZ2V0U2VsZWN0ZWRUcmFjaygpIHsKLSAgICAgICAgcmV0dXJuIG1TZWxlY3RlZFRyYWNrOwotICAgIH0KLQotICAgIHByaXZhdGUgUmVuZGVyaW5nV2lkZ2V0IGdldFJlbmRlcmluZ1dpZGdldCgpIHsKLSAgICAgICAgaWYgKG1TZWxlY3RlZFRyYWNrID09IG51bGwpIHsKLSAgICAgICAgICAgIHJldHVybiBudWxsOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiBtU2VsZWN0ZWRUcmFjay5nZXRSZW5kZXJpbmdXaWRnZXQoKTsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBTZWxlY3RzIGEgc3VidGl0bGUgdHJhY2suICBBcyBhIHJlc3VsdCwgdGhpcyB0cmFjayB3aWxsIHJlY2VpdmUKLSAgICAgKiBpbi1iYW5kIGRhdGEgZnJvbSB0aGUge0BsaW5rIE1lZGlhUGxheWVyfS4gIEhvd2V2ZXIsIHRoaXMgZG9lcwotICAgICAqIG5vdCBjaGFuZ2UgdGhlIHN1YnRpdGxlIHZpc2liaWxpdHkuCi0gICAgICoKLSAgICAgKiBTaG91bGQgYmUgY2FsbGVkIGZyb20gdGhlIGFuY2hvcidzIChVSSkgdGhyZWFkLiB7QHNlZSAjQW5jaG9yLmdldFN1YnRpdGxlTG9vcGVyfQotICAgICAqCi0gICAgICogQHBhcmFtIHRyYWNrIFRoZSBzdWJ0aXRsZSB0cmFjayB0byBzZWxlY3QuICBUaGlzIG11c3QgYmUgb25lIG9mIHRoZQotICAgICAqICAgICAgICAgICAgICB0cmFja3MgaW4ge0BsaW5rICNnZXRUcmFja3N9LgotICAgICAqIEByZXR1cm4gdHJ1ZSBpZiB0aGUgdHJhY2sgd2FzIHN1Y2Nlc3NmdWxseSBzZWxlY3RlZC4KLSAgICAgKi8KLSAgICBwdWJsaWMgYm9vbGVhbiBzZWxlY3RUcmFjayhTdWJ0aXRsZVRyYWNrIHRyYWNrKSB7Ci0gICAgICAgIGlmICh0cmFjayAhPSBudWxsICYmICFtVHJhY2tzLmNvbnRhaW5zKHRyYWNrKSkgewotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9Ci0KLSAgICAgICAgcHJvY2Vzc09uQW5jaG9yKG1IYW5kbGVyLm9idGFpbk1lc3NhZ2UoV0hBVF9TRUxFQ1RfVFJBQ0ssIHRyYWNrKSk7Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLQotICAgIHByaXZhdGUgdm9pZCBkb1NlbGVjdFRyYWNrKFN1YnRpdGxlVHJhY2sgdHJhY2spIHsKLSAgICAgICAgbVRyYWNrSXNFeHBsaWNpdCA9IHRydWU7Ci0gICAgICAgIGlmIChtU2VsZWN0ZWRUcmFjayA9PSB0cmFjaykgewotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKG1TZWxlY3RlZFRyYWNrICE9IG51bGwpIHsKLSAgICAgICAgICAgIG1TZWxlY3RlZFRyYWNrLmhpZGUoKTsKLSAgICAgICAgICAgIG1TZWxlY3RlZFRyYWNrLnNldFRpbWVQcm92aWRlcihudWxsKTsKLSAgICAgICAgfQotCi0gICAgICAgIG1TZWxlY3RlZFRyYWNrID0gdHJhY2s7Ci0gICAgICAgIGlmIChtQW5jaG9yICE9IG51bGwpIHsKLSAgICAgICAgICAgIG1BbmNob3Iuc2V0U3VidGl0bGVXaWRnZXQoZ2V0UmVuZGVyaW5nV2lkZ2V0KCkpOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKG1TZWxlY3RlZFRyYWNrICE9IG51bGwpIHsKLSAgICAgICAgICAgIG1TZWxlY3RlZFRyYWNrLnNldFRpbWVQcm92aWRlcihtVGltZVByb3ZpZGVyKTsKLSAgICAgICAgICAgIG1TZWxlY3RlZFRyYWNrLnNob3coKTsKLSAgICAgICAgfQotCi0gICAgICAgIGlmIChtTGlzdGVuZXIgIT0gbnVsbCkgewotICAgICAgICAgICAgbUxpc3RlbmVyLm9uU3VidGl0bGVUcmFja1NlbGVjdGVkKHRyYWNrKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIC8qKgotICAgICAqIEByZXR1cm4gdGhlIGRlZmF1bHQgc3VidGl0bGUgdHJhY2sgYmFzZWQgb24gc3lzdGVtIHByZWZlcmVuY2VzLCBvciBudWxsLAotICAgICAqIGlmIG5vIHN1Y2ggdHJhY2sgZXhpc3RzIGluIHRoaXMgbWFuYWdlci4KLSAgICAgKgotICAgICAqIFN1cHBvcnRzIEhMUy1mbGFnczogQVVUT1NFTEVDVCwgRk9SQ0VEICYgREVGQVVMVC4KLSAgICAgKgotICAgICAqIDEuIElmIGNhcHRpb25pbmcgaXMgZGlzYWJsZWQsIG9ubHkgY29uc2lkZXIgRk9SQ0VEIHRyYWNrcy4gT3RoZXJ3aXNlLAotICAgICAqIGNvbnNpZGVyIGFsbCB0cmFja3MsIGJ1dCBwcmVmZXIgbm9uLUZPUkNFRCBvbmVzLgotICAgICAqIDIuIElmIHVzZXIgc2VsZWN0ZWQgIkRlZmF1bHQiIGNhcHRpb24gbGFuZ3VhZ2U6Ci0gICAgICogICBhLiBJZiB0aGVyZSBpcyBhIGNvbnNpZGVyZWQgdHJhY2sgd2l0aCBERUZBVUxUPXllcywgcmV0dXJucyB0aGF0IHRyYWNrCi0gICAgICogICAgICAoZmF2b3IgdGhlIGZpcnN0IG9uZSBpbiB0aGUgY3VycmVudCBsYW5ndWFnZSBpZiB0aGVyZSBhcmUgbW9yZSB0aGFuCi0gICAgICogICAgICBvbmUgZGVmYXVsdCB0cmFja3MsIG9yIHRoZSBmaXJzdCBpbiBnZW5lcmFsIGlmIG5vbmUgb2YgdGhlbSBhcmUgaW4KLSAgICAgKiAgICAgIHRoZSBjdXJyZW50IGxhbmd1YWdlKS4KLSAgICAgKiAgIGIuIE90aGVyd2lzZSwgaWYgdGhlcmUgaXMgYSB0cmFjayB3aXRoIEFVVE9TRUxFQ1Q9eWVzIGluIHRoZSBjdXJyZW50Ci0gICAgICogICAgICBsYW5ndWFnZSwgcmV0dXJuIHRoYXQgb25lLgotICAgICAqICAgYy4gSWYgdGhlcmUgYXJlIG5vIGRlZmF1bHQgdHJhY2tzLCBhbmQgbm8gYXV0b3NlbGVjdGFibGUgdHJhY2tzIGluIHRoZQotICAgICAqICAgICAgY3VycmVudCBsYW5ndWFnZSwgcmV0dXJuIG51bGwuCi0gICAgICogMy4gSWYgdGhlcmUgaXMgYSB0cmFjayB3aXRoIHRoZSBjYXB0aW9uIGxhbmd1YWdlLCBzZWxlY3QgdGhhdCBvbmUuICBQcmVmZXIKLSAgICAgKiB0aGUgb25lIHdpdGggQVVUT1NFTEVDVD1uby4KLSAgICAgKgotICAgICAqIFRoZSBkZWZhdWx0IHZhbHVlcyBmb3IgdGhlc2UgZmxhZ3MgYXJlIERFRkFVTFQ9bm8sIEFVVE9TRUxFQ1Q9eWVzCi0gICAgICogYW5kIEZPUkNFRD1uby4KLSAgICAgKi8KLSAgICBwdWJsaWMgU3VidGl0bGVUcmFjayBnZXREZWZhdWx0VHJhY2soKSB7Ci0gICAgICAgIFN1YnRpdGxlVHJhY2sgYmVzdFRyYWNrID0gbnVsbDsKLSAgICAgICAgaW50IGJlc3RTY29yZSA9IC0xOwotCi0gICAgICAgIExvY2FsZSBzZWxlY3RlZExvY2FsZSA9IG1DYXB0aW9uaW5nTWFuYWdlci5nZXRMb2NhbGUoKTsKLSAgICAgICAgTG9jYWxlIGxvY2FsZSA9IHNlbGVjdGVkTG9jYWxlOwotICAgICAgICBpZiAobG9jYWxlID09IG51bGwpIHsKLSAgICAgICAgICAgIGxvY2FsZSA9IExvY2FsZS5nZXREZWZhdWx0KCk7Ci0gICAgICAgIH0KLSAgICAgICAgYm9vbGVhbiBzZWxlY3RGb3JjZWQgPSAhbUNhcHRpb25pbmdNYW5hZ2VyLmlzRW5hYmxlZCgpOwotCi0gICAgICAgIHN5bmNocm9uaXplZChtVHJhY2tzKSB7Ci0gICAgICAgICAgICBmb3IgKFN1YnRpdGxlVHJhY2sgdHJhY2s6IG1UcmFja3MpIHsKLSAgICAgICAgICAgICAgICBNZWRpYUZvcm1hdCBmb3JtYXQgPSB0cmFjay5nZXRGb3JtYXQoKTsKLSAgICAgICAgICAgICAgICBTdHJpbmcgbGFuZ3VhZ2UgPSBmb3JtYXQuZ2V0U3RyaW5nKE1lZGlhRm9ybWF0LktFWV9MQU5HVUFHRSk7Ci0gICAgICAgICAgICAgICAgYm9vbGVhbiBmb3JjZWQgPQotICAgICAgICAgICAgICAgICAgICBmb3JtYXQuZ2V0SW50ZWdlcihNZWRpYUZvcm1hdC5LRVlfSVNfRk9SQ0VEX1NVQlRJVExFLCAwKSAhPSAwOwotICAgICAgICAgICAgICAgIGJvb2xlYW4gYXV0b3NlbGVjdCA9Ci0gICAgICAgICAgICAgICAgICAgIGZvcm1hdC5nZXRJbnRlZ2VyKE1lZGlhRm9ybWF0LktFWV9JU19BVVRPU0VMRUNULCAxKSAhPSAwOwotICAgICAgICAgICAgICAgIGJvb2xlYW4gaXNfZGVmYXVsdCA9Ci0gICAgICAgICAgICAgICAgICAgIGZvcm1hdC5nZXRJbnRlZ2VyKE1lZGlhRm9ybWF0LktFWV9JU19ERUZBVUxULCAwKSAhPSAwOwotCi0gICAgICAgICAgICAgICAgYm9vbGVhbiBsYW5ndWFnZU1hdGNoZXMgPQotICAgICAgICAgICAgICAgICAgICAobG9jYWxlID09IG51bGwgfHwKLSAgICAgICAgICAgICAgICAgICAgbG9jYWxlLmdldExhbmd1YWdlKCkuZXF1YWxzKCIiKSB8fAotICAgICAgICAgICAgICAgICAgICBsb2NhbGUuZ2V0SVNPM0xhbmd1YWdlKCkuZXF1YWxzKGxhbmd1YWdlKSB8fAotICAgICAgICAgICAgICAgICAgICBsb2NhbGUuZ2V0TGFuZ3VhZ2UoKS5lcXVhbHMobGFuZ3VhZ2UpKTsKLSAgICAgICAgICAgICAgICAvLyBpc19kZWZhdWx0IGlzIG1lYW5pbmdsZXNzIHVubGVzcyBjYXB0aW9uIGxhbmd1YWdlIGlzICdkZWZhdWx0JwotICAgICAgICAgICAgICAgIGludCBzY29yZSA9IChmb3JjZWQgPyAwIDogOCkgKwotICAgICAgICAgICAgICAgICAgICAoKChzZWxlY3RlZExvY2FsZSA9PSBudWxsKSAmJiBpc19kZWZhdWx0KSA/IDQgOiAwKSArCi0gICAgICAgICAgICAgICAgICAgIChhdXRvc2VsZWN0ID8gMCA6IDIpICsgKGxhbmd1YWdlTWF0Y2hlcyA/IDEgOiAwKTsKLQotICAgICAgICAgICAgICAgIGlmIChzZWxlY3RGb3JjZWQgJiYgIWZvcmNlZCkgewotICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICAvLyB3ZSB0cmVhdCBudWxsIGxvY2FsZS9sYW5ndWFnZSBhcyBtYXRjaGluZyBhbnkgbGFuZ3VhZ2UKLSAgICAgICAgICAgICAgICBpZiAoKHNlbGVjdGVkTG9jYWxlID09IG51bGwgJiYgaXNfZGVmYXVsdCkgfHwKLSAgICAgICAgICAgICAgICAgICAgKGxhbmd1YWdlTWF0Y2hlcyAmJgotICAgICAgICAgICAgICAgICAgICAgKGF1dG9zZWxlY3QgfHwgZm9yY2VkIHx8IHNlbGVjdGVkTG9jYWxlICE9IG51bGwpKSkgewotICAgICAgICAgICAgICAgICAgICBpZiAoc2NvcmUgPiBiZXN0U2NvcmUpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGJlc3RTY29yZSA9IHNjb3JlOwotICAgICAgICAgICAgICAgICAgICAgICAgYmVzdFRyYWNrID0gdHJhY2s7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIGJlc3RUcmFjazsKLSAgICB9Ci0KLSAgICBwcml2YXRlIGJvb2xlYW4gbVRyYWNrSXNFeHBsaWNpdCA9IGZhbHNlOwotICAgIHByaXZhdGUgYm9vbGVhbiBtVmlzaWJpbGl0eUlzRXhwbGljaXQgPSBmYWxzZTsKLQotICAgIC8qKiBzaG91bGQgYmUgY2FsbGVkIGZyb20gYW5jaG9yIHRocmVhZCAqLwotICAgIHB1YmxpYyB2b2lkIHNlbGVjdERlZmF1bHRUcmFjaygpIHsKLSAgICAgICAgcHJvY2Vzc09uQW5jaG9yKG1IYW5kbGVyLm9idGFpbk1lc3NhZ2UoV0hBVF9TRUxFQ1RfREVGQVVMVF9UUkFDSykpOwotICAgIH0KLQotICAgIHByaXZhdGUgdm9pZCBkb1NlbGVjdERlZmF1bHRUcmFjaygpIHsKLSAgICAgICAgaWYgKG1UcmFja0lzRXhwbGljaXQpIHsKLSAgICAgICAgICAgIC8vIElmIHRyYWNrIHNlbGVjdGlvbiBpcyBleHBsaWNpdCwgYnV0IHZpc2liaWxpdHkKLSAgICAgICAgICAgIC8vIGlzIG5vdCwgaXQgZmFsbHMgYmFjayB0byB0aGUgY2FwdGlvbmluZyBzZXR0aW5nCi0gICAgICAgICAgICBpZiAoIW1WaXNpYmlsaXR5SXNFeHBsaWNpdCkgewotICAgICAgICAgICAgICAgIGlmIChtQ2FwdGlvbmluZ01hbmFnZXIuaXNFbmFibGVkKCkgfHwKLSAgICAgICAgICAgICAgICAgICAgKG1TZWxlY3RlZFRyYWNrICE9IG51bGwgJiYKLSAgICAgICAgICAgICAgICAgICAgIG1TZWxlY3RlZFRyYWNrLmdldEZvcm1hdCgpLmdldEludGVnZXIoCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgTWVkaWFGb3JtYXQuS0VZX0lTX0ZPUkNFRF9TVUJUSVRMRSwgMCkgIT0gMCkpIHsKLSAgICAgICAgICAgICAgICAgICAgc2hvdygpOwotICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAobVNlbGVjdGVkVHJhY2sgIT0gbnVsbAotICAgICAgICAgICAgICAgICAgICAgICAgJiYgbVNlbGVjdGVkVHJhY2suZ2V0VHJhY2tUeXBlKCkgPT0gVHJhY2tJbmZvLk1FRElBX1RSQUNLX1RZUEVfU1VCVElUTEUpIHsKLSAgICAgICAgICAgICAgICAgICAgaGlkZSgpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBtVmlzaWJpbGl0eUlzRXhwbGljaXQgPSBmYWxzZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotCi0gICAgICAgIC8vIFdlIGNhbiBoYXZlIGEgZGVmYXVsdCAoZm9yY2VkKSB0cmFjayBldmVuIGlmIGNhcHRpb25pbmcKLSAgICAgICAgLy8gaXMgbm90IGVuYWJsZWQuICBUaGlzIGlzIGhhbmRsZWQgYnkgZ2V0RGVmYXVsdFRyYWNrKCkuCi0gICAgICAgIC8vIFNob3cgdGhpcyB0cmFjayB1bmxlc3Mgc3VidGl0bGVzIHdlcmUgZXhwbGljaXRseSBoaWRkZW4uCi0gICAgICAgIFN1YnRpdGxlVHJhY2sgdHJhY2sgPSBnZXREZWZhdWx0VHJhY2soKTsKLSAgICAgICAgaWYgKHRyYWNrICE9IG51bGwpIHsKLSAgICAgICAgICAgIHNlbGVjdFRyYWNrKHRyYWNrKTsKLSAgICAgICAgICAgIG1UcmFja0lzRXhwbGljaXQgPSBmYWxzZTsKLSAgICAgICAgICAgIGlmICghbVZpc2liaWxpdHlJc0V4cGxpY2l0KSB7Ci0gICAgICAgICAgICAgICAgc2hvdygpOwotICAgICAgICAgICAgICAgIG1WaXNpYmlsaXR5SXNFeHBsaWNpdCA9IGZhbHNlOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotCi0gICAgLyoqIG11c3QgYmUgY2FsbGVkIGZyb20gYW5jaG9yIHRocmVhZCAqLwotICAgIHB1YmxpYyB2b2lkIHJlc2V0KCkgewotICAgICAgICBjaGVja0FuY2hvckxvb3BlcigpOwotICAgICAgICBoaWRlKCk7Ci0gICAgICAgIHNlbGVjdFRyYWNrKG51bGwpOwotICAgICAgICBtVHJhY2tzLmNsZWFyKCk7Ci0gICAgICAgIG1UcmFja0lzRXhwbGljaXQgPSBmYWxzZTsKLSAgICAgICAgbVZpc2liaWxpdHlJc0V4cGxpY2l0ID0gZmFsc2U7Ci0gICAgICAgIG1DYXB0aW9uaW5nTWFuYWdlci5yZW1vdmVDYXB0aW9uaW5nQ2hhbmdlTGlzdGVuZXIoCi0gICAgICAgICAgICAgICAgbUNhcHRpb25pbmdDaGFuZ2VMaXN0ZW5lcik7Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogQWRkcyBhIG5ldywgZXh0ZXJuYWwgc3VidGl0bGUgdHJhY2sgdG8gdGhlIG1hbmFnZXIuCi0gICAgICoKLSAgICAgKiBAcGFyYW0gZm9ybWF0IHRoZSBmb3JtYXQgb2YgdGhlIHRyYWNrIHRoYXQgd2lsbCBpbmNsdWRlIGF0IGxlYXN0Ci0gICAgICogICAgICAgICAgICAgICB0aGUgTUlNRSB0eXBlIHtAbGluayBNZWRpYUZvcm1hdEBLRVlfTUlNRX0uCi0gICAgICogQHJldHVybiB0aGUgY3JlYXRlZCB7QGxpbmsgU3VidGl0bGVUcmFja30gb2JqZWN0Ci0gICAgICovCi0gICAgcHVibGljIFN1YnRpdGxlVHJhY2sgYWRkVHJhY2soTWVkaWFGb3JtYXQgZm9ybWF0KSB7Ci0gICAgICAgIHN5bmNocm9uaXplZChtUmVuZGVyZXJzKSB7Ci0gICAgICAgICAgICBmb3IgKFJlbmRlcmVyIHJlbmRlcmVyOiBtUmVuZGVyZXJzKSB7Ci0gICAgICAgICAgICAgICAgaWYgKHJlbmRlcmVyLnN1cHBvcnRzKGZvcm1hdCkpIHsKLSAgICAgICAgICAgICAgICAgICAgU3VidGl0bGVUcmFjayB0cmFjayA9IHJlbmRlcmVyLmNyZWF0ZVRyYWNrKGZvcm1hdCk7Ci0gICAgICAgICAgICAgICAgICAgIGlmICh0cmFjayAhPSBudWxsKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBzeW5jaHJvbml6ZWQobVRyYWNrcykgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtVHJhY2tzLnNpemUoKSA9PSAwKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1DYXB0aW9uaW5nTWFuYWdlci5hZGRDYXB0aW9uaW5nQ2hhbmdlTGlzdGVuZXIoCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbUNhcHRpb25pbmdDaGFuZ2VMaXN0ZW5lcik7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1UcmFja3MuYWRkKHRyYWNrKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0cmFjazsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICByZXR1cm4gbnVsbDsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBTaG93IHRoZSBzZWxlY3RlZCAob3IgZGVmYXVsdCkgc3VidGl0bGUgdHJhY2suCi0gICAgICoKLSAgICAgKiBTaG91bGQgYmUgY2FsbGVkIGZyb20gdGhlIGFuY2hvcidzIChVSSkgdGhyZWFkLiB7QHNlZSAjQW5jaG9yLmdldFN1YnRpdGxlTG9vcGVyfQotICAgICAqLwotICAgIHB1YmxpYyB2b2lkIHNob3coKSB7Ci0gICAgICAgIHByb2Nlc3NPbkFuY2hvcihtSGFuZGxlci5vYnRhaW5NZXNzYWdlKFdIQVRfU0hPVykpOwotICAgIH0KLQotICAgIHByaXZhdGUgdm9pZCBkb1Nob3coKSB7Ci0gICAgICAgIG1TaG93aW5nID0gdHJ1ZTsKLSAgICAgICAgbVZpc2liaWxpdHlJc0V4cGxpY2l0ID0gdHJ1ZTsKLSAgICAgICAgaWYgKG1TZWxlY3RlZFRyYWNrICE9IG51bGwpIHsKLSAgICAgICAgICAgIG1TZWxlY3RlZFRyYWNrLnNob3coKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIC8qKgotICAgICAqIEhpZGUgdGhlIHNlbGVjdGVkIChvciBkZWZhdWx0KSBzdWJ0aXRsZSB0cmFjay4KLSAgICAgKgotICAgICAqIFNob3VsZCBiZSBjYWxsZWQgZnJvbSB0aGUgYW5jaG9yJ3MgKFVJKSB0aHJlYWQuIHtAc2VlICNBbmNob3IuZ2V0U3VidGl0bGVMb29wZXJ9Ci0gICAgICovCi0gICAgcHVibGljIHZvaWQgaGlkZSgpIHsKLSAgICAgICAgcHJvY2Vzc09uQW5jaG9yKG1IYW5kbGVyLm9idGFpbk1lc3NhZ2UoV0hBVF9ISURFKSk7Ci0gICAgfQotCi0gICAgcHJpdmF0ZSB2b2lkIGRvSGlkZSgpIHsKLSAgICAgICAgbVZpc2liaWxpdHlJc0V4cGxpY2l0ID0gdHJ1ZTsKLSAgICAgICAgaWYgKG1TZWxlY3RlZFRyYWNrICE9IG51bGwpIHsKLSAgICAgICAgICAgIG1TZWxlY3RlZFRyYWNrLmhpZGUoKTsKLSAgICAgICAgfQotICAgICAgICBtU2hvd2luZyA9IGZhbHNlOwotICAgIH0KLQotICAgIC8qKgotICAgICAqIEludGVyZmFjZSBmb3Igc3VwcG9ydGluZyBhIHNpbmdsZSBvciBtdWx0aXBsZSBzdWJ0aXRsZSB0eXBlcyBpbiB7QGxpbmsKLSAgICAgKiBNZWRpYVBsYXllcn0uCi0gICAgICovCi0gICAgcHVibGljIGFic3RyYWN0IHN0YXRpYyBjbGFzcyBSZW5kZXJlciB7Ci0gICAgICAgIC8qKgotICAgICAgICAgKiBDYWxsZWQgYnkge0BsaW5rIE1lZGlhUGxheWVyfSdzIHtAbGluayBTdWJ0aXRsZUNvbnRyb2xsZXJ9IHdoZW4gYSBuZXcKLSAgICAgICAgICogc3VidGl0bGUgdHJhY2sgaXMgZGV0ZWN0ZWQsIHRvIHNlZSBpZiBpdCBzaG91bGQgdXNlIHRoaXMgb2JqZWN0IHRvCi0gICAgICAgICAqIHBhcnNlIGFuZCBkaXNwbGF5IHRoaXMgc3VidGl0bGUgdHJhY2suCi0gICAgICAgICAqCi0gICAgICAgICAqIEBwYXJhbSBmb3JtYXQgdGhlIGZvcm1hdCBvZiB0aGUgdHJhY2sgdGhhdCB3aWxsIGluY2x1ZGUgYXQgbGVhc3QKLSAgICAgICAgICogICAgICAgICAgICAgICB0aGUgTUlNRSB0eXBlIHtAbGluayBNZWRpYUZvcm1hdEBLRVlfTUlNRX0uCi0gICAgICAgICAqCi0gICAgICAgICAqIEByZXR1cm4gdHJ1ZSBpZiBhbmQgb25seSBpZiB0aGUgdHJhY2sgZm9ybWF0IGlzIHN1cHBvcnRlZCBieSB0aGlzCi0gICAgICAgICAqIHJlbmRlcmVyCi0gICAgICAgICAqLwotICAgICAgICBwdWJsaWMgYWJzdHJhY3QgYm9vbGVhbiBzdXBwb3J0cyhNZWRpYUZvcm1hdCBmb3JtYXQpOwotCi0gICAgICAgIC8qKgotICAgICAgICAgKiBDYWxsZWQgYnkge0BsaW5rIE1lZGlhUGxheWVyfSdzIHtAbGluayBTdWJ0aXRsZUNvbnRyb2xsZXJ9IGZvciBlYWNoCi0gICAgICAgICAqIHN1YnRpdGxlIHRyYWNrIHRoYXQgd2FzIGRldGVjdGVkIGFuZCBpcyBzdXBwb3J0ZWQgYnkgdGhpcyBvYmplY3QgdG8KLSAgICAgICAgICogY3JlYXRlIGEge0BsaW5rIFN1YnRpdGxlVHJhY2t9IG9iamVjdC4gIFRoaXMgb2JqZWN0IHdpbGwgYmUgY3JlYXRlZAotICAgICAgICAgKiBmb3IgZWFjaCB0cmFjayB0aGF0IHdhcyBmb3VuZC4gIElmIHRoZSB0cmFjayBpcyBzZWxlY3RlZCBmb3IgZGlzcGxheSwKLSAgICAgICAgICogdGhpcyBvYmplY3Qgd2lsbCBiZSB1c2VkIHRvIHBhcnNlIGFuZCBkaXNwbGF5IHRoZSB0cmFjayBkYXRhLgotICAgICAgICAgKgotICAgICAgICAgKiBAcGFyYW0gZm9ybWF0IHRoZSBmb3JtYXQgb2YgdGhlIHRyYWNrIHRoYXQgd2lsbCBpbmNsdWRlIGF0IGxlYXN0Ci0gICAgICAgICAqICAgICAgICAgICAgICAgdGhlIE1JTUUgdHlwZSB7QGxpbmsgTWVkaWFGb3JtYXRAS0VZX01JTUV9LgotICAgICAgICAgKiBAcmV0dXJuIGEge0BsaW5rIFN1YnRpdGxlVHJhY2t9IG9iamVjdCB0aGF0IHdpbGwgYmUgdXNlZCB0byBwYXJzZQotICAgICAgICAgKiBhbmQgcmVuZGVyIHRoZSBzdWJ0aXRsZSB0cmFjay4KLSAgICAgICAgICovCi0gICAgICAgIHB1YmxpYyBhYnN0cmFjdCBTdWJ0aXRsZVRyYWNrIGNyZWF0ZVRyYWNrKE1lZGlhRm9ybWF0IGZvcm1hdCk7Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogQWRkIHN1cHBvcnQgZm9yIGEgc3VidGl0bGUgZm9ybWF0IGluIHtAbGluayBNZWRpYVBsYXllcn0uCi0gICAgICoKLSAgICAgKiBAcGFyYW0gcmVuZGVyZXIgYSB7QGxpbmsgU3VidGl0bGVDb250cm9sbGVyLlJlbmRlcmVyfSBvYmplY3QgdGhhdCBhZGRzCi0gICAgICogICAgICAgICAgICAgICAgIHN1cHBvcnQgZm9yIGEgc3VidGl0bGUgZm9ybWF0LgotICAgICAqLwotICAgIHB1YmxpYyB2b2lkIHJlZ2lzdGVyUmVuZGVyZXIoUmVuZGVyZXIgcmVuZGVyZXIpIHsKLSAgICAgICAgc3luY2hyb25pemVkKG1SZW5kZXJlcnMpIHsKLSAgICAgICAgICAgIC8vIFRPRE8gaG93IHRvIGdldCBhdmFpbGFibGUgcmVuZGVyZXJzIGluIHRoZSBzeXN0ZW0KLSAgICAgICAgICAgIGlmICghbVJlbmRlcmVycy5jb250YWlucyhyZW5kZXJlcikpIHsKLSAgICAgICAgICAgICAgICAvLyBUT0RPIHNob3VsZCBhZGRlZCByZW5kZXJlcnMgb3ZlcnJpZGUgZXhpc3Rpbmcgb25lcyAodG8gYWxsb3cgcmVwbGFjaW5nPykKLSAgICAgICAgICAgICAgICBtUmVuZGVyZXJzLmFkZChyZW5kZXJlcik7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBwdWJsaWMgYm9vbGVhbiBoYXNSZW5kZXJlckZvcihNZWRpYUZvcm1hdCBmb3JtYXQpIHsKLSAgICAgICAgc3luY2hyb25pemVkKG1SZW5kZXJlcnMpIHsKLSAgICAgICAgICAgIC8vIFRPRE8gaG93IHRvIGdldCBhdmFpbGFibGUgcmVuZGVyZXJzIGluIHRoZSBzeXN0ZW0KLSAgICAgICAgICAgIGZvciAoUmVuZGVyZXIgcmVuZGVyZXI6IG1SZW5kZXJlcnMpIHsKLSAgICAgICAgICAgICAgICBpZiAocmVuZGVyZXIuc3VwcG9ydHMoZm9ybWF0KSkgewotICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBTdWJ0aXRsZSBhbmNob3IsIGFuIG9iamVjdCB0aGF0IGlzIGFibGUgdG8gZGlzcGxheSBhIHN1YnRpdGxlIHJlbmRlcmVyLAotICAgICAqIGUuZy4gYSBWaWRlb1ZpZXcuCi0gICAgICovCi0gICAgcHVibGljIGludGVyZmFjZSBBbmNob3IgewotICAgICAgICAvKioKLSAgICAgICAgICogQW5jaG9yIHNob3VsZCB1c2UgdGhlIHN1cHBsaWVkIHN1YnRpdGxlIHJlbmRlcmluZyB3aWRnZXQsIG9yCi0gICAgICAgICAqIG5vbmUgaWYgaXQgaXMgbnVsbC4KLSAgICAgICAgICovCi0gICAgICAgIHB1YmxpYyB2b2lkIHNldFN1YnRpdGxlV2lkZ2V0KFJlbmRlcmluZ1dpZGdldCBzdWJ0aXRsZVdpZGdldCk7Ci0KLSAgICAgICAgLyoqCi0gICAgICAgICAqIEFuY2hvcnMgcHJvdmlkZSB0aGUgbG9vcGVyIG9uIHdoaWNoIGFsbCB0cmFjayB2aXNpYmlsaXR5IGNoYW5nZXMKLSAgICAgICAgICogKHRyYWNrLnNob3cvaGlkZSwgc2V0U3VidGl0bGVXaWRnZXQpIHdpbGwgdGFrZSBwbGFjZS4KLSAgICAgICAgICovCi0gICAgICAgIHB1YmxpYyBMb29wZXIgZ2V0U3VidGl0bGVMb29wZXIoKTsKLSAgICB9Ci0KLSAgICBwcml2YXRlIEFuY2hvciBtQW5jaG9yOwotCi0gICAgLyoqCi0gICAgICogIGNhbGxlZCBmcm9tIGFuY2hvcidzIGxvb3BlciAoaWYgYW55LCBib3RoIHdoZW4gdW5zZXR0aW5nIGFuZAotICAgICAqICBzZXR0aW5nKQotICAgICAqLwotICAgIHB1YmxpYyB2b2lkIHNldEFuY2hvcihBbmNob3IgYW5jaG9yKSB7Ci0gICAgICAgIGlmIChtQW5jaG9yID09IGFuY2hvcikgewotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKG1BbmNob3IgIT0gbnVsbCkgewotICAgICAgICAgICAgY2hlY2tBbmNob3JMb29wZXIoKTsKLSAgICAgICAgICAgIG1BbmNob3Iuc2V0U3VidGl0bGVXaWRnZXQobnVsbCk7Ci0gICAgICAgIH0KLSAgICAgICAgbUFuY2hvciA9IGFuY2hvcjsKLSAgICAgICAgbUhhbmRsZXIgPSBudWxsOwotICAgICAgICBpZiAobUFuY2hvciAhPSBudWxsKSB7Ci0gICAgICAgICAgICBtSGFuZGxlciA9IG5ldyBIYW5kbGVyKG1BbmNob3IuZ2V0U3VidGl0bGVMb29wZXIoKSwgbUNhbGxiYWNrKTsKLSAgICAgICAgICAgIGNoZWNrQW5jaG9yTG9vcGVyKCk7Ci0gICAgICAgICAgICBtQW5jaG9yLnNldFN1YnRpdGxlV2lkZ2V0KGdldFJlbmRlcmluZ1dpZGdldCgpKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIHByaXZhdGUgdm9pZCBjaGVja0FuY2hvckxvb3BlcigpIHsKLSAgICAgICAgYXNzZXJ0IG1IYW5kbGVyICE9IG51bGwgOiAiU2hvdWxkIGhhdmUgYSBsb29wZXIgYWxyZWFkeSI7Ci0gICAgICAgIGFzc2VydCBMb29wZXIubXlMb29wZXIoKSA9PSBtSGFuZGxlci5nZXRMb29wZXIoKQotICAgICAgICAgICAgICAgIDogIk11c3QgYmUgY2FsbGVkIGZyb20gdGhlIGFuY2hvcidzIGxvb3BlciI7Ci0gICAgfQotCi0gICAgcHJpdmF0ZSB2b2lkIHByb2Nlc3NPbkFuY2hvcihNZXNzYWdlIG0pIHsKLSAgICAgICAgYXNzZXJ0IG1IYW5kbGVyICE9IG51bGwgOiAiU2hvdWxkIGhhdmUgYSBsb29wZXIgYWxyZWFkeSI7Ci0gICAgICAgIGlmIChMb29wZXIubXlMb29wZXIoKSA9PSBtSGFuZGxlci5nZXRMb29wZXIoKSkgewotICAgICAgICAgICAgbUhhbmRsZXIuZGlzcGF0Y2hNZXNzYWdlKG0pOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgbUhhbmRsZXIuc2VuZE1lc3NhZ2UobSk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBwdWJsaWMgaW50ZXJmYWNlIExpc3RlbmVyIHsKLSAgICAgICAgLyoqCi0gICAgICAgICAqIENhbGxlZCB3aGVuIGEgc3VidGl0bGUgdHJhY2sgaGFzIGJlZW4gc2VsZWN0ZWQuCi0gICAgICAgICAqCi0gICAgICAgICAqIEBwYXJhbSB0cmFjayBzZWxlY3RlZCBzdWJ0aXRsZSB0cmFjayBvciBudWxsCi0gICAgICAgICAqLwotICAgICAgICBwdWJsaWMgdm9pZCBvblN1YnRpdGxlVHJhY2tTZWxlY3RlZChTdWJ0aXRsZVRyYWNrIHRyYWNrKTsKLSAgICB9Ci0KLSAgICBwcml2YXRlIExpc3RlbmVyIG1MaXN0ZW5lcjsKLX0KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL01lZGlhQ29tcG9uZW50cy9zcmMvY29tL2FuZHJvaWQvbWVkaWEvc3VidGl0bGUvU3VidGl0bGVUcmFjay5qYXZhIGIvcGFja2FnZXMvTWVkaWFDb21wb25lbnRzL3NyYy9jb20vYW5kcm9pZC9tZWRpYS9zdWJ0aXRsZS9TdWJ0aXRsZVRyYWNrLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDZiOTA2NGEuLjAwMDAwMDAKLS0tIGEvcGFja2FnZXMvTWVkaWFDb21wb25lbnRzL3NyYy9jb20vYW5kcm9pZC9tZWRpYS9zdWJ0aXRsZS9TdWJ0aXRsZVRyYWNrLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw2OTYgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAyMDE4IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKLSAqCi0gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKLSAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KLSAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotICoKLSAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0gKgotICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQotICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKLSAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgotICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAotICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCi0gKi8KLQotcGFja2FnZSBjb20uYW5kcm9pZC5tZWRpYS5zdWJ0aXRsZTsKLQotaW1wb3J0IGFuZHJvaWQuZ3JhcGhpY3MuQ2FudmFzOwotaW1wb3J0IGFuZHJvaWQubWVkaWEuTWVkaWFGb3JtYXQ7Ci1pbXBvcnQgYW5kcm9pZC5tZWRpYS5NZWRpYVBsYXllcjIuVHJhY2tJbmZvOwotaW1wb3J0IGFuZHJvaWQubWVkaWEuU3VidGl0bGVEYXRhOwotaW1wb3J0IGFuZHJvaWQub3MuSGFuZGxlcjsKLWltcG9ydCBhbmRyb2lkLnV0aWwuTG9nOwotaW1wb3J0IGFuZHJvaWQudXRpbC5Mb25nU3BhcnNlQXJyYXk7Ci1pbXBvcnQgYW5kcm9pZC51dGlsLlBhaXI7Ci0KLWltcG9ydCBqYXZhLnV0aWwuSXRlcmF0b3I7Ci1pbXBvcnQgamF2YS51dGlsLk5vU3VjaEVsZW1lbnRFeGNlcHRpb247Ci1pbXBvcnQgamF2YS51dGlsLlNvcnRlZE1hcDsKLWltcG9ydCBqYXZhLnV0aWwuVHJlZU1hcDsKLWltcG9ydCBqYXZhLnV0aWwuVmVjdG9yOwotCi0vLyBOb3RlOiBUaGlzIGlzIGZvcmtlZCBmcm9tIGFuZHJvaWQubWVkaWEuU3VidGl0bGVUcmFjayBzaW5jZSBQCi0vKioKLSAqIEEgc3VidGl0bGUgdHJhY2sgYWJzdHJhY3QgYmFzZSBjbGFzcyB0aGF0IGlzIHJlc3BvbnNpYmxlIGZvciBwYXJzaW5nIGFuZCBkaXNwbGF5aW5nCi0gKiBhbiBpbnN0YW5jZSBvZiBhIHBhcnRpY3VsYXIgdHlwZSBvZiBzdWJ0aXRsZS4KLSAqLwotcHVibGljIGFic3RyYWN0IGNsYXNzIFN1YnRpdGxlVHJhY2sgaW1wbGVtZW50cyBNZWRpYVRpbWVQcm92aWRlci5Pbk1lZGlhVGltZUxpc3RlbmVyIHsKLSAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgVEFHID0gIlN1YnRpdGxlVHJhY2siOwotICAgIHByaXZhdGUgbG9uZyBtTGFzdFVwZGF0ZVRpbWVNczsKLSAgICBwcml2YXRlIGxvbmcgbUxhc3RUaW1lTXM7Ci0KLSAgICBwcml2YXRlIFJ1bm5hYmxlIG1SdW5uYWJsZTsKLQotICAgIGZpbmFsIHByaXZhdGUgTG9uZ1NwYXJzZUFycmF5PFJ1bj4gbVJ1bnNCeUVuZFRpbWUgPSBuZXcgTG9uZ1NwYXJzZUFycmF5PFJ1bj4oKTsKLSAgICBmaW5hbCBwcml2YXRlIExvbmdTcGFyc2VBcnJheTxSdW4+IG1SdW5zQnlJRCA9IG5ldyBMb25nU3BhcnNlQXJyYXk8UnVuPigpOwotCi0gICAgcHJpdmF0ZSBDdWVMaXN0IG1DdWVzOwotICAgIGZpbmFsIHByaXZhdGUgVmVjdG9yPEN1ZT4gbUFjdGl2ZUN1ZXMgPSBuZXcgVmVjdG9yPEN1ZT4oKTsKLSAgICBwcm90ZWN0ZWQgYm9vbGVhbiBtVmlzaWJsZTsKLQotICAgIHB1YmxpYyBib29sZWFuIERFQlVHID0gZmFsc2U7Ci0KLSAgICBwcm90ZWN0ZWQgSGFuZGxlciBtSGFuZGxlciA9IG5ldyBIYW5kbGVyKCk7Ci0KLSAgICBwcml2YXRlIE1lZGlhRm9ybWF0IG1Gb3JtYXQ7Ci0KLSAgICBwdWJsaWMgU3VidGl0bGVUcmFjayhNZWRpYUZvcm1hdCBmb3JtYXQpIHsKLSAgICAgICAgbUZvcm1hdCA9IGZvcm1hdDsKLSAgICAgICAgbUN1ZXMgPSBuZXcgQ3VlTGlzdCgpOwotICAgICAgICBjbGVhckFjdGl2ZUN1ZXMoKTsKLSAgICAgICAgbUxhc3RUaW1lTXMgPSAtMTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgZmluYWwgTWVkaWFGb3JtYXQgZ2V0Rm9ybWF0KCkgewotICAgICAgICByZXR1cm4gbUZvcm1hdDsKLSAgICB9Ci0KLSAgICBwcml2YXRlIGxvbmcgbU5leHRTY2hlZHVsZWRUaW1lTXMgPSAtMTsKLQotICAgIHB1YmxpYyB2b2lkIG9uRGF0YShTdWJ0aXRsZURhdGEgZGF0YSkgewotICAgICAgICBsb25nIHJ1bklEID0gZGF0YS5nZXRTdGFydFRpbWVVcygpICsgMTsKLSAgICAgICAgb25EYXRhKGRhdGEuZ2V0RGF0YSgpLCB0cnVlIC8qIGVvcyAqLywgcnVuSUQpOwotICAgICAgICBzZXRSdW5EaXNjYXJkVGltZU1zKAotICAgICAgICAgICAgICAgIHJ1bklELAotICAgICAgICAgICAgICAgIChkYXRhLmdldFN0YXJ0VGltZVVzKCkgKyBkYXRhLmdldER1cmF0aW9uVXMoKSkgLyAxMDAwKTsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBDYWxsZWQgd2hlbiB0aGVyZSBpcyBpbnB1dCBkYXRhIGZvciB0aGUgc3VidGl0bGUgdHJhY2suICBUaGUKLSAgICAgKiBjb21wbGV0ZSBzdWJ0aXRsZSBmb3IgYSB0cmFjayBjYW4gaW5jbHVkZSBtdWx0aXBsZSB3aG9sZSB1bml0cwotICAgICAqIChydW5zKS4gIEVhY2ggb2YgdGhlc2UgdW5pdHMgY2FuIGhhdmUgbXVsdGlwbGUgc2VjdGlvbnMuICBUaGUKLSAgICAgKiBjb250ZW50cyBvZiBhIHJ1biBhcmUgc3VibWl0dGVkIGluIHNlcXVlbnRpYWwgb3JkZXIsIHdpdGggZW9zCi0gICAgICogaW5kaWNhdGluZyB0aGUgbGFzdCBzZWN0aW9uIG9mIHRoZSBydW4uICBDYWxscyBmcm9tIGRpZmZlcmVudAotICAgICAqIHJ1bnMgbXVzdCBub3QgYmUgaW50ZXJtaXhlZC4KLSAgICAgKgotICAgICAqIEBwYXJhbSBkYXRhIHN1YnRpdGxlIGRhdGEgYnl0ZSBidWZmZXIKLSAgICAgKiBAcGFyYW0gZW9zIHRydWUgaWYgdGhpcyBpcyB0aGUgbGFzdCBzZWN0aW9uIG9mIHRoZSBydW4uCi0gICAgICogQHBhcmFtIHJ1bklEIG1vc3RseS11bmlxdWUgSUQgZm9yIHRoaXMgcnVuIG9mIGRhdGEuICBTdWJ0aXRsZSBjdWVzCi0gICAgICogICAgICAgICAgICAgIHdpdGggcnVuSUQgb2YgMCBhcmUgZGlzY2FyZGVkIGltbWVkaWF0ZWx5IGFmdGVyCi0gICAgICogICAgICAgICAgICAgIGRpc3BsYXkuICBDdWVzIHdpdGggcnVuSUQgb2YgfjAgYXJlIGRpc2NhcmRlZAotICAgICAqICAgICAgICAgICAgICBvbmx5IGF0IHRoZSBkZWxldGlvbiBvZiB0aGUgdHJhY2sgb2JqZWN0LiAgQ3VlcwotICAgICAqICAgICAgICAgICAgICB3aXRoIG90aGVyIHJ1bklELXMgYXJlIGRpc2NhcmRlZCBhdCB0aGUgZW5kIG9mIHRoZQotICAgICAqICAgICAgICAgICAgICBydW4sIHdoaWNoIGRlZmF1bHRzIHRvIHRoZSBsYXRlc3QgdGltZXN0YW1wIG9mCi0gICAgICogICAgICAgICAgICAgIGFueSBvZiBpdHMgY3VlcyAod2l0aCB0aGlzIHJ1bklEKS4KLSAgICAgKi8KLSAgICBwcm90ZWN0ZWQgYWJzdHJhY3Qgdm9pZCBvbkRhdGEoYnl0ZVtdIGRhdGEsIGJvb2xlYW4gZW9zLCBsb25nIHJ1bklEKTsKLQotICAgIC8qKgotICAgICAqIENhbGxlZCB3aGVuIGFkZGluZyB0aGUgc3VidGl0bGUgcmVuZGVyaW5nIHdpZGdldCB0byB0aGUgdmlldyBoaWVyYXJjaHksCi0gICAgICogYXMgd2VsbCBhcyB3aGVuIHNob3dpbmcgb3IgaGlkaW5nIHRoZSBzdWJ0aXRsZSB0cmFjaywgb3Igd2hlbiB0aGUgdmlkZW8KLSAgICAgKiBzdXJmYWNlIHBvc2l0aW9uIGhhcyBjaGFuZ2VkLgotICAgICAqCi0gICAgICogQHJldHVybiB0aGUgd2lkZ2V0IHRoYXQgcmVuZGVycyB0aGlzIHN1YnRpdGxlIHRyYWNrLiBGb3IgbW9zdCByZW5kZXJlcnMKLSAgICAgKiAgICAgICAgIHRoZXJlIHNob3VsZCBiZSBhIHNpbmdsZSBzaGFyZWQgaW5zdGFuY2UgdGhhdCBpcyB1c2VkIGZvciBhbGwKLSAgICAgKiAgICAgICAgIHRyYWNrcyBzdXBwb3J0ZWQgYnkgdGhhdCByZW5kZXJlciwgYXMgYXQgbW9zdCBvbmUgc3VidGl0bGUgdHJhY2sKLSAgICAgKiAgICAgICAgIGlzIHZpc2libGUgYXQgb25lIHRpbWUuCi0gICAgICovCi0gICAgcHVibGljIGFic3RyYWN0IFJlbmRlcmluZ1dpZGdldCBnZXRSZW5kZXJpbmdXaWRnZXQoKTsKLQotICAgIC8qKgotICAgICAqIENhbGxlZCB3aGVuIHRoZSBhY3RpdmUgY3VlcyBoYXZlIGNoYW5nZWQsIGFuZCB0aGUgY29udGVudHMgb2YgdGhlIHN1YnRpdGxlCi0gICAgICogdmlldyBzaG91bGQgYmUgdXBkYXRlZC4KLSAgICAgKi8KLSAgICBwdWJsaWMgYWJzdHJhY3Qgdm9pZCB1cGRhdGVWaWV3KFZlY3RvcjxDdWU+IGFjdGl2ZUN1ZXMpOwotCi0gICAgcHJvdGVjdGVkIHN5bmNocm9uaXplZCB2b2lkIHVwZGF0ZUFjdGl2ZUN1ZXMoYm9vbGVhbiByZWJ1aWxkLCBsb25nIHRpbWVNcykgewotICAgICAgICAvLyBvdXQtb2Ytb3JkZXIgdGltZXMgbWVhbiBzZWVraW5nIG9yIG5ldyBhY3RpdmUgY3VlcyBiZWluZyBhZGRlZAotICAgICAgICAvLyAoZHVyaW5nIHRoZWlyIG93biB0aW1lc3BhbikKLSAgICAgICAgaWYgKHJlYnVpbGQgfHwgbUxhc3RVcGRhdGVUaW1lTXMgPiB0aW1lTXMpIHsKLSAgICAgICAgICAgIGNsZWFyQWN0aXZlQ3VlcygpOwotICAgICAgICB9Ci0KLSAgICAgICAgZm9yKEl0ZXJhdG9yPFBhaXI8TG9uZywgQ3VlPiA+IGl0ID0KLSAgICAgICAgICAgICAgICBtQ3Vlcy5lbnRyaWVzQmV0d2VlbihtTGFzdFVwZGF0ZVRpbWVNcywgdGltZU1zKS5pdGVyYXRvcigpOyBpdC5oYXNOZXh0KCk7ICkgewotICAgICAgICAgICAgUGFpcjxMb25nLCBDdWU+IGV2ZW50ID0gaXQubmV4dCgpOwotICAgICAgICAgICAgQ3VlIGN1ZSA9IGV2ZW50LnNlY29uZDsKLQotICAgICAgICAgICAgaWYgKGN1ZS5tRW5kVGltZU1zID09IGV2ZW50LmZpcnN0KSB7Ci0gICAgICAgICAgICAgICAgLy8gcmVtb3ZlIHBhc3QgY3VlcwotICAgICAgICAgICAgICAgIGlmIChERUJVRykgTG9nLnYoVEFHLCAiUmVtb3ZpbmcgIiArIGN1ZSk7Ci0gICAgICAgICAgICAgICAgbUFjdGl2ZUN1ZXMucmVtb3ZlKGN1ZSk7Ci0gICAgICAgICAgICAgICAgaWYgKGN1ZS5tUnVuSUQgPT0gMCkgewotICAgICAgICAgICAgICAgICAgICBpdC5yZW1vdmUoKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9IGVsc2UgaWYgKGN1ZS5tU3RhcnRUaW1lTXMgPT0gZXZlbnQuZmlyc3QpIHsKLSAgICAgICAgICAgICAgICAvLyBhZGQgbmV3IGN1ZXMKLSAgICAgICAgICAgICAgICAvLyBUUklDS1k6IHRoaXMgd2lsbCBoYXBwZW4gaW4gc3RhcnQgb3JkZXIKLSAgICAgICAgICAgICAgICBpZiAoREVCVUcpIExvZy52KFRBRywgIkFkZGluZyAiICsgY3VlKTsKLSAgICAgICAgICAgICAgICBpZiAoY3VlLm1Jbm5lclRpbWVzTXMgIT0gbnVsbCkgewotICAgICAgICAgICAgICAgICAgICBjdWUub25UaW1lKHRpbWVNcyk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIG1BY3RpdmVDdWVzLmFkZChjdWUpOwotICAgICAgICAgICAgfSBlbHNlIGlmIChjdWUubUlubmVyVGltZXNNcyAhPSBudWxsKSB7Ci0gICAgICAgICAgICAgICAgLy8gY3VlIGlzIG1vZGlmaWVkCi0gICAgICAgICAgICAgICAgY3VlLm9uVGltZSh0aW1lTXMpOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgLyogY29tcGxldGUgYW55IHJ1bnMgKi8KLSAgICAgICAgd2hpbGUgKG1SdW5zQnlFbmRUaW1lLnNpemUoKSA+IDAgJiYKLSAgICAgICAgICAgICAgIG1SdW5zQnlFbmRUaW1lLmtleUF0KDApIDw9IHRpbWVNcykgewotICAgICAgICAgICAgcmVtb3ZlUnVuc0J5RW5kVGltZUluZGV4KDApOyAvLyByZW1vdmVzIGVsZW1lbnQKLSAgICAgICAgfQotICAgICAgICBtTGFzdFVwZGF0ZVRpbWVNcyA9IHRpbWVNczsKLSAgICB9Ci0KLSAgICBwcml2YXRlIHZvaWQgcmVtb3ZlUnVuc0J5RW5kVGltZUluZGV4KGludCBpeCkgewotICAgICAgICBSdW4gcnVuID0gbVJ1bnNCeUVuZFRpbWUudmFsdWVBdChpeCk7Ci0gICAgICAgIHdoaWxlIChydW4gIT0gbnVsbCkgewotICAgICAgICAgICAgQ3VlIGN1ZSA9IHJ1bi5tRmlyc3RDdWU7Ci0gICAgICAgICAgICB3aGlsZSAoY3VlICE9IG51bGwpIHsKLSAgICAgICAgICAgICAgICBtQ3Vlcy5yZW1vdmUoY3VlKTsKLSAgICAgICAgICAgICAgICBDdWUgbmV4dEN1ZSA9IGN1ZS5tTmV4dEluUnVuOwotICAgICAgICAgICAgICAgIGN1ZS5tTmV4dEluUnVuID0gbnVsbDsKLSAgICAgICAgICAgICAgICBjdWUgPSBuZXh0Q3VlOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgbVJ1bnNCeUlELnJlbW92ZShydW4ubVJ1bklEKTsKLSAgICAgICAgICAgIFJ1biBuZXh0UnVuID0gcnVuLm1OZXh0UnVuQXRFbmRUaW1lTXM7Ci0gICAgICAgICAgICBydW4ubVByZXZSdW5BdEVuZFRpbWVNcyA9IG51bGw7Ci0gICAgICAgICAgICBydW4ubU5leHRSdW5BdEVuZFRpbWVNcyA9IG51bGw7Ci0gICAgICAgICAgICBydW4gPSBuZXh0UnVuOwotICAgICAgICB9Ci0gICAgICAgIG1SdW5zQnlFbmRUaW1lLnJlbW92ZUF0KGl4KTsKLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwcm90ZWN0ZWQgdm9pZCBmaW5hbGl6ZSgpIHRocm93cyBUaHJvd2FibGUgewotICAgICAgICAvKiByZW1vdmUgYWxsIGN1ZXMgKHVudGFuZ2xlIGFsbCBjcm9zcy1saW5rcykgKi8KLSAgICAgICAgaW50IHNpemUgPSBtUnVuc0J5RW5kVGltZS5zaXplKCk7Ci0gICAgICAgIGZvcihpbnQgaXggPSBzaXplIC0gMTsgaXggPj0gMDsgaXgtLSkgewotICAgICAgICAgICAgcmVtb3ZlUnVuc0J5RW5kVGltZUluZGV4KGl4KTsKLSAgICAgICAgfQotCi0gICAgICAgIHN1cGVyLmZpbmFsaXplKCk7Ci0gICAgfQotCi0gICAgcHJpdmF0ZSBzeW5jaHJvbml6ZWQgdm9pZCB0YWtlVGltZShsb25nIHRpbWVNcykgewotICAgICAgICBtTGFzdFRpbWVNcyA9IHRpbWVNczsKLSAgICB9Ci0KLSAgICBwcm90ZWN0ZWQgc3luY2hyb25pemVkIHZvaWQgY2xlYXJBY3RpdmVDdWVzKCkgewotICAgICAgICBpZiAoREVCVUcpIExvZy52KFRBRywgIkNsZWFyaW5nICIgKyBtQWN0aXZlQ3Vlcy5zaXplKCkgKyAiIGFjdGl2ZSBjdWVzIik7Ci0gICAgICAgIG1BY3RpdmVDdWVzLmNsZWFyKCk7Ci0gICAgICAgIG1MYXN0VXBkYXRlVGltZU1zID0gLTE7Ci0gICAgfQotCi0gICAgcHJvdGVjdGVkIHZvaWQgc2NoZWR1bGVUaW1lZEV2ZW50cygpIHsKLSAgICAgICAgLyogZ2V0IHRpbWVzIGZvciB0aGUgbmV4dCBldmVudCAqLwotICAgICAgICBpZiAobVRpbWVQcm92aWRlciAhPSBudWxsKSB7Ci0gICAgICAgICAgICBtTmV4dFNjaGVkdWxlZFRpbWVNcyA9IG1DdWVzLm5leHRUaW1lQWZ0ZXIobUxhc3RUaW1lTXMpOwotICAgICAgICAgICAgaWYgKERFQlVHKSBMb2cuZChUQUcsICJzY2hlZCBAIiArIG1OZXh0U2NoZWR1bGVkVGltZU1zICsgIiBhZnRlciAiICsgbUxhc3RUaW1lTXMpOwotICAgICAgICAgICAgbVRpbWVQcm92aWRlci5ub3RpZnlBdCgKLSAgICAgICAgICAgICAgICAgICAgbU5leHRTY2hlZHVsZWRUaW1lTXMgPj0gMCA/Ci0gICAgICAgICAgICAgICAgICAgICAgICAobU5leHRTY2hlZHVsZWRUaW1lTXMgKiAxMDAwKSA6IE1lZGlhVGltZVByb3ZpZGVyLk5PX1RJTUUsCi0gICAgICAgICAgICAgICAgICAgIHRoaXMpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIHZvaWQgb25UaW1lZEV2ZW50KGxvbmcgdGltZVVzKSB7Ci0gICAgICAgIGlmIChERUJVRykgTG9nLmQoVEFHLCAib25UaW1lZEV2ZW50ICIgKyB0aW1lVXMpOwotICAgICAgICBzeW5jaHJvbml6ZWQgKHRoaXMpIHsKLSAgICAgICAgICAgIGxvbmcgdGltZU1zID0gdGltZVVzIC8gMTAwMDsKLSAgICAgICAgICAgIHVwZGF0ZUFjdGl2ZUN1ZXMoZmFsc2UsIHRpbWVNcyk7Ci0gICAgICAgICAgICB0YWtlVGltZSh0aW1lTXMpOwotICAgICAgICB9Ci0gICAgICAgIHVwZGF0ZVZpZXcobUFjdGl2ZUN1ZXMpOwotICAgICAgICBzY2hlZHVsZVRpbWVkRXZlbnRzKCk7Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIHZvaWQgb25TZWVrKGxvbmcgdGltZVVzKSB7Ci0gICAgICAgIGlmIChERUJVRykgTG9nLmQoVEFHLCAib25TZWVrICIgKyB0aW1lVXMpOwotICAgICAgICBzeW5jaHJvbml6ZWQgKHRoaXMpIHsKLSAgICAgICAgICAgIGxvbmcgdGltZU1zID0gdGltZVVzIC8gMTAwMDsKLSAgICAgICAgICAgIHVwZGF0ZUFjdGl2ZUN1ZXModHJ1ZSwgdGltZU1zKTsKLSAgICAgICAgICAgIHRha2VUaW1lKHRpbWVNcyk7Ci0gICAgICAgIH0KLSAgICAgICAgdXBkYXRlVmlldyhtQWN0aXZlQ3Vlcyk7Ci0gICAgICAgIHNjaGVkdWxlVGltZWRFdmVudHMoKTsKLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgdm9pZCBvblN0b3AoKSB7Ci0gICAgICAgIHN5bmNocm9uaXplZCAodGhpcykgewotICAgICAgICAgICAgaWYgKERFQlVHKSBMb2cuZChUQUcsICJvblN0b3AiKTsKLSAgICAgICAgICAgIGNsZWFyQWN0aXZlQ3VlcygpOwotICAgICAgICAgICAgbUxhc3RUaW1lTXMgPSAtMTsKLSAgICAgICAgfQotICAgICAgICB1cGRhdGVWaWV3KG1BY3RpdmVDdWVzKTsKLSAgICAgICAgbU5leHRTY2hlZHVsZWRUaW1lTXMgPSAtMTsKLSAgICAgICAgbVRpbWVQcm92aWRlci5ub3RpZnlBdChNZWRpYVRpbWVQcm92aWRlci5OT19USU1FLCB0aGlzKTsKLSAgICB9Ci0KLSAgICBwcm90ZWN0ZWQgTWVkaWFUaW1lUHJvdmlkZXIgbVRpbWVQcm92aWRlcjsKLQotICAgIHB1YmxpYyB2b2lkIHNob3coKSB7Ci0gICAgICAgIGlmIChtVmlzaWJsZSkgewotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0KLSAgICAgICAgbVZpc2libGUgPSB0cnVlOwotICAgICAgICBSZW5kZXJpbmdXaWRnZXQgcmVuZGVyaW5nV2lkZ2V0ID0gZ2V0UmVuZGVyaW5nV2lkZ2V0KCk7Ci0gICAgICAgIGlmIChyZW5kZXJpbmdXaWRnZXQgIT0gbnVsbCkgewotICAgICAgICAgICAgcmVuZGVyaW5nV2lkZ2V0LnNldFZpc2libGUodHJ1ZSk7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKG1UaW1lUHJvdmlkZXIgIT0gbnVsbCkgewotICAgICAgICAgICAgbVRpbWVQcm92aWRlci5zY2hlZHVsZVVwZGF0ZSh0aGlzKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIHB1YmxpYyB2b2lkIGhpZGUoKSB7Ci0gICAgICAgIGlmICghbVZpc2libGUpIHsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotCi0gICAgICAgIGlmIChtVGltZVByb3ZpZGVyICE9IG51bGwpIHsKLSAgICAgICAgICAgIG1UaW1lUHJvdmlkZXIuY2FuY2VsTm90aWZpY2F0aW9ucyh0aGlzKTsKLSAgICAgICAgfQotICAgICAgICBSZW5kZXJpbmdXaWRnZXQgcmVuZGVyaW5nV2lkZ2V0ID0gZ2V0UmVuZGVyaW5nV2lkZ2V0KCk7Ci0gICAgICAgIGlmIChyZW5kZXJpbmdXaWRnZXQgIT0gbnVsbCkgewotICAgICAgICAgICAgcmVuZGVyaW5nV2lkZ2V0LnNldFZpc2libGUoZmFsc2UpOwotICAgICAgICB9Ci0gICAgICAgIG1WaXNpYmxlID0gZmFsc2U7Ci0gICAgfQotCi0gICAgcHJvdGVjdGVkIHN5bmNocm9uaXplZCBib29sZWFuIGFkZEN1ZShDdWUgY3VlKSB7Ci0gICAgICAgIG1DdWVzLmFkZChjdWUpOwotCi0gICAgICAgIGlmIChjdWUubVJ1bklEICE9IDApIHsKLSAgICAgICAgICAgIFJ1biBydW4gPSBtUnVuc0J5SUQuZ2V0KGN1ZS5tUnVuSUQpOwotICAgICAgICAgICAgaWYgKHJ1biA9PSBudWxsKSB7Ci0gICAgICAgICAgICAgICAgcnVuID0gbmV3IFJ1bigpOwotICAgICAgICAgICAgICAgIG1SdW5zQnlJRC5wdXQoY3VlLm1SdW5JRCwgcnVuKTsKLSAgICAgICAgICAgICAgICBydW4ubUVuZFRpbWVNcyA9IGN1ZS5tRW5kVGltZU1zOwotICAgICAgICAgICAgfSBlbHNlIGlmIChydW4ubUVuZFRpbWVNcyA8IGN1ZS5tRW5kVGltZU1zKSB7Ci0gICAgICAgICAgICAgICAgcnVuLm1FbmRUaW1lTXMgPSBjdWUubUVuZFRpbWVNczsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgLy8gbGluay11cCBjdWVzIGluIHRoZSBzYW1lIHJ1bgotICAgICAgICAgICAgY3VlLm1OZXh0SW5SdW4gPSBydW4ubUZpcnN0Q3VlOwotICAgICAgICAgICAgcnVuLm1GaXJzdEN1ZSA9IGN1ZTsKLSAgICAgICAgfQotCi0gICAgICAgIC8vIGlmIGEgY3VlIGlzIGFkZGVkIHRoYXQgc2hvdWxkIGJlIHZpc2libGUsIG5lZWQgdG8gcmVmcmVzaCB2aWV3Ci0gICAgICAgIGxvbmcgbm93TXMgPSAtMTsKLSAgICAgICAgaWYgKG1UaW1lUHJvdmlkZXIgIT0gbnVsbCkgewotICAgICAgICAgICAgdHJ5IHsKLSAgICAgICAgICAgICAgICBub3dNcyA9IG1UaW1lUHJvdmlkZXIuZ2V0Q3VycmVudFRpbWVVcygKLSAgICAgICAgICAgICAgICAgICAgICAgIGZhbHNlIC8qIHByZWNpc2UgKi8sIHRydWUgLyogbW9ub3RvbmljICovKSAvIDEwMDA7Ci0gICAgICAgICAgICB9IGNhdGNoIChJbGxlZ2FsU3RhdGVFeGNlcHRpb24gZSkgewotICAgICAgICAgICAgICAgIC8vIGhhbmRsZSBhcyBpdCB3ZSBhcmUgbm90IHBsYXlpbmcKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIGlmIChERUJVRykgTG9nLnYoVEFHLCAibVZpc2libGU9IiArIG1WaXNpYmxlICsgIiwgIiArCi0gICAgICAgICAgICAgICAgY3VlLm1TdGFydFRpbWVNcyArICIgPD0gIiArIG5vd01zICsgIiwgIiArCi0gICAgICAgICAgICAgICAgY3VlLm1FbmRUaW1lTXMgKyAiID49ICIgKyBtTGFzdFRpbWVNcyk7Ci0KLSAgICAgICAgaWYgKG1WaXNpYmxlICYmCi0gICAgICAgICAgICAgICAgY3VlLm1TdGFydFRpbWVNcyA8PSBub3dNcyAmJgotICAgICAgICAgICAgICAgIC8vIHdlIGRvbid0IHRydXN0IG5vd01zLCBzbyBjaGVjayBhbnkgY3VlIHNpbmNlIGxhc3QgY2FsbGJhY2sKLSAgICAgICAgICAgICAgICBjdWUubUVuZFRpbWVNcyA+PSBtTGFzdFRpbWVNcykgewotICAgICAgICAgICAgaWYgKG1SdW5uYWJsZSAhPSBudWxsKSB7Ci0gICAgICAgICAgICAgICAgbUhhbmRsZXIucmVtb3ZlQ2FsbGJhY2tzKG1SdW5uYWJsZSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBmaW5hbCBTdWJ0aXRsZVRyYWNrIHRyYWNrID0gdGhpczsKLSAgICAgICAgICAgIGZpbmFsIGxvbmcgdGhlbk1zID0gbm93TXM7Ci0gICAgICAgICAgICBtUnVubmFibGUgPSBuZXcgUnVubmFibGUoKSB7Ci0gICAgICAgICAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgICAgICAgICAgcHVibGljIHZvaWQgcnVuKCkgewotICAgICAgICAgICAgICAgICAgICAvLyBldmVuIHdpdGggc3luY2hyb25pemVkLCBpdCBpcyBwb3NzaWJsZSB0aGF0IHdlIGFyZSBnb2luZwotICAgICAgICAgICAgICAgICAgICAvLyB0byBkbyBtdWx0aXBsZSB1cGRhdGVzIGFzIHRoZSBydW5uYWJsZSBjb3VsZCBiZSBhbHJlYWR5Ci0gICAgICAgICAgICAgICAgICAgIC8vIHJ1bm5pbmcuCi0gICAgICAgICAgICAgICAgICAgIHN5bmNocm9uaXplZCAodHJhY2spIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIG1SdW5uYWJsZSA9IG51bGw7Ci0gICAgICAgICAgICAgICAgICAgICAgICB1cGRhdGVBY3RpdmVDdWVzKHRydWUsIHRoZW5Ncyk7Ci0gICAgICAgICAgICAgICAgICAgICAgICB1cGRhdGVWaWV3KG1BY3RpdmVDdWVzKTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH07Ci0gICAgICAgICAgICAvLyBkZWxheSB1cGRhdGUgc28gd2UgZG9uJ3QgdXBkYXRlIHZpZXcgb24gZXZlcnkgY3VlLiAgVE9ETyB3aHkgMTA/Ci0gICAgICAgICAgICBpZiAobUhhbmRsZXIucG9zdERlbGF5ZWQobVJ1bm5hYmxlLCAxMCAvKiBkZWxheSAqLykpIHsKLSAgICAgICAgICAgICAgICBpZiAoREVCVUcpIExvZy52KFRBRywgInNjaGVkdWxpbmcgdXBkYXRlIik7Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIGlmIChERUJVRykgTG9nLncoVEFHLCAiZmFpbGVkIHRvIHNjaGVkdWxlIHN1YnRpdGxlIHZpZXcgdXBkYXRlIik7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgfQotCi0gICAgICAgIGlmIChtVmlzaWJsZSAmJgotICAgICAgICAgICAgICAgIGN1ZS5tRW5kVGltZU1zID49IG1MYXN0VGltZU1zICYmCi0gICAgICAgICAgICAgICAgKGN1ZS5tU3RhcnRUaW1lTXMgPCBtTmV4dFNjaGVkdWxlZFRpbWVNcyB8fAotICAgICAgICAgICAgICAgICBtTmV4dFNjaGVkdWxlZFRpbWVNcyA8IDApKSB7Ci0gICAgICAgICAgICBzY2hlZHVsZVRpbWVkRXZlbnRzKCk7Ci0gICAgICAgIH0KLQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgcHVibGljIHN5bmNocm9uaXplZCB2b2lkIHNldFRpbWVQcm92aWRlcihNZWRpYVRpbWVQcm92aWRlciB0aW1lUHJvdmlkZXIpIHsKLSAgICAgICAgaWYgKG1UaW1lUHJvdmlkZXIgPT0gdGltZVByb3ZpZGVyKSB7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKG1UaW1lUHJvdmlkZXIgIT0gbnVsbCkgewotICAgICAgICAgICAgbVRpbWVQcm92aWRlci5jYW5jZWxOb3RpZmljYXRpb25zKHRoaXMpOwotICAgICAgICB9Ci0gICAgICAgIG1UaW1lUHJvdmlkZXIgPSB0aW1lUHJvdmlkZXI7Ci0gICAgICAgIGlmIChtVGltZVByb3ZpZGVyICE9IG51bGwpIHsKLSAgICAgICAgICAgIG1UaW1lUHJvdmlkZXIuc2NoZWR1bGVVcGRhdGUodGhpcyk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLQotICAgIHN0YXRpYyBjbGFzcyBDdWVMaXN0IHsKLSAgICAgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFRBRyA9ICJDdWVMaXN0IjsKLSAgICAgICAgLy8gc2ltcGxpc3RpYywgaW5lZmZpY2llbnQgaW1wbGVtZW50YXRpb24KLSAgICAgICAgcHJpdmF0ZSBTb3J0ZWRNYXA8TG9uZywgVmVjdG9yPEN1ZT4gPiBtQ3VlczsKLSAgICAgICAgcHVibGljIGJvb2xlYW4gREVCVUcgPSBmYWxzZTsKLQotICAgICAgICBwcml2YXRlIGJvb2xlYW4gYWRkRXZlbnQoQ3VlIGN1ZSwgbG9uZyB0aW1lTXMpIHsKLSAgICAgICAgICAgIFZlY3RvcjxDdWU+IGN1ZXMgPSBtQ3Vlcy5nZXQodGltZU1zKTsKLSAgICAgICAgICAgIGlmIChjdWVzID09IG51bGwpIHsKLSAgICAgICAgICAgICAgICBjdWVzID0gbmV3IFZlY3RvcjxDdWU+KDIpOwotICAgICAgICAgICAgICAgIG1DdWVzLnB1dCh0aW1lTXMsIGN1ZXMpOwotICAgICAgICAgICAgfSBlbHNlIGlmIChjdWVzLmNvbnRhaW5zKGN1ZSkpIHsKLSAgICAgICAgICAgICAgICAvLyBkbyBub3QgZHVwbGljYXRlIGN1ZXMKLSAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGN1ZXMuYWRkKGN1ZSk7Ci0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgfQotCi0gICAgICAgIHByaXZhdGUgdm9pZCByZW1vdmVFdmVudChDdWUgY3VlLCBsb25nIHRpbWVNcykgewotICAgICAgICAgICAgVmVjdG9yPEN1ZT4gY3VlcyA9IG1DdWVzLmdldCh0aW1lTXMpOwotICAgICAgICAgICAgaWYgKGN1ZXMgIT0gbnVsbCkgewotICAgICAgICAgICAgICAgIGN1ZXMucmVtb3ZlKGN1ZSk7Ci0gICAgICAgICAgICAgICAgaWYgKGN1ZXMuc2l6ZSgpID09IDApIHsKLSAgICAgICAgICAgICAgICAgICAgbUN1ZXMucmVtb3ZlKHRpbWVNcyk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgcHVibGljIHZvaWQgYWRkKEN1ZSBjdWUpIHsKLSAgICAgICAgICAgIC8vIGlnbm9yZSBub24tcG9zaXRpdmUtZHVyYXRpb24gY3VlcwotICAgICAgICAgICAgaWYgKGN1ZS5tU3RhcnRUaW1lTXMgPj0gY3VlLm1FbmRUaW1lTXMpCi0gICAgICAgICAgICAgICAgcmV0dXJuOwotCi0gICAgICAgICAgICBpZiAoIWFkZEV2ZW50KGN1ZSwgY3VlLm1TdGFydFRpbWVNcykpIHsKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGxvbmcgbGFzdFRpbWVNcyA9IGN1ZS5tU3RhcnRUaW1lTXM7Ci0gICAgICAgICAgICBpZiAoY3VlLm1Jbm5lclRpbWVzTXMgIT0gbnVsbCkgewotICAgICAgICAgICAgICAgIGZvciAobG9uZyB0aW1lTXM6IGN1ZS5tSW5uZXJUaW1lc01zKSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmICh0aW1lTXMgPiBsYXN0VGltZU1zICYmIHRpbWVNcyA8IGN1ZS5tRW5kVGltZU1zKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBhZGRFdmVudChjdWUsIHRpbWVNcyk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBsYXN0VGltZU1zID0gdGltZU1zOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBhZGRFdmVudChjdWUsIGN1ZS5tRW5kVGltZU1zKTsKLSAgICAgICAgfQotCi0gICAgICAgIHB1YmxpYyB2b2lkIHJlbW92ZShDdWUgY3VlKSB7Ci0gICAgICAgICAgICByZW1vdmVFdmVudChjdWUsIGN1ZS5tU3RhcnRUaW1lTXMpOwotICAgICAgICAgICAgaWYgKGN1ZS5tSW5uZXJUaW1lc01zICE9IG51bGwpIHsKLSAgICAgICAgICAgICAgICBmb3IgKGxvbmcgdGltZU1zOiBjdWUubUlubmVyVGltZXNNcykgewotICAgICAgICAgICAgICAgICAgICByZW1vdmVFdmVudChjdWUsIHRpbWVNcyk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICAgICAgcmVtb3ZlRXZlbnQoY3VlLCBjdWUubUVuZFRpbWVNcyk7Ci0gICAgICAgIH0KLQotICAgICAgICBwdWJsaWMgSXRlcmFibGU8UGFpcjxMb25nLCBDdWU+PiBlbnRyaWVzQmV0d2VlbigKLSAgICAgICAgICAgICAgICBmaW5hbCBsb25nIGxhc3RUaW1lTXMsIGZpbmFsIGxvbmcgdGltZU1zKSB7Ci0gICAgICAgICAgICByZXR1cm4gbmV3IEl0ZXJhYmxlPFBhaXI8TG9uZywgQ3VlPiA+KCkgewotICAgICAgICAgICAgICAgIEBPdmVycmlkZQotICAgICAgICAgICAgICAgIHB1YmxpYyBJdGVyYXRvcjxQYWlyPExvbmcsIEN1ZT4gPiBpdGVyYXRvcigpIHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKERFQlVHKSBMb2cuZChUQUcsICJzbGljZSAoIiArIGxhc3RUaW1lTXMgKyAiLCAiICsgdGltZU1zICsgIl09Iik7Ci0gICAgICAgICAgICAgICAgICAgIHRyeSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbmV3IEVudHJ5SXRlcmF0b3IoCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1DdWVzLnN1Yk1hcChsYXN0VGltZU1zICsgMSwgdGltZU1zICsgMSkpOwotICAgICAgICAgICAgICAgICAgICB9IGNhdGNoKElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbiBlKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbmV3IEVudHJ5SXRlcmF0b3IobnVsbCk7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9OwotICAgICAgICB9Ci0KLSAgICAgICAgcHVibGljIGxvbmcgbmV4dFRpbWVBZnRlcihsb25nIHRpbWVNcykgewotICAgICAgICAgICAgU29ydGVkTWFwPExvbmcsIFZlY3RvcjxDdWU+PiB0YWlsID0gbnVsbDsKLSAgICAgICAgICAgIHRyeSB7Ci0gICAgICAgICAgICAgICAgdGFpbCA9IG1DdWVzLnRhaWxNYXAodGltZU1zICsgMSk7Ci0gICAgICAgICAgICAgICAgaWYgKHRhaWwgIT0gbnVsbCkgewotICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGFpbC5maXJzdEtleSgpOwotICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiAtMTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9IGNhdGNoKElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbiBlKSB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIC0xOwotICAgICAgICAgICAgfSBjYXRjaChOb1N1Y2hFbGVtZW50RXhjZXB0aW9uIGUpIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gLTE7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICBjbGFzcyBFbnRyeUl0ZXJhdG9yIGltcGxlbWVudHMgSXRlcmF0b3I8UGFpcjxMb25nLCBDdWU+ID4gewotICAgICAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgICAgICBwdWJsaWMgYm9vbGVhbiBoYXNOZXh0KCkgewotICAgICAgICAgICAgICAgIHJldHVybiAhbURvbmU7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIEBPdmVycmlkZQotICAgICAgICAgICAgcHVibGljIFBhaXI8TG9uZywgQ3VlPiBuZXh0KCkgewotICAgICAgICAgICAgICAgIGlmIChtRG9uZSkgewotICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgTm9TdWNoRWxlbWVudEV4Y2VwdGlvbigiIik7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIG1MYXN0RW50cnkgPSBuZXcgUGFpcjxMb25nLCBDdWU+KAotICAgICAgICAgICAgICAgICAgICAgICAgbUN1cnJlbnRUaW1lTXMsIG1MaXN0SXRlcmF0b3IubmV4dCgpKTsKLSAgICAgICAgICAgICAgICBtTGFzdExpc3RJdGVyYXRvciA9IG1MaXN0SXRlcmF0b3I7Ci0gICAgICAgICAgICAgICAgaWYgKCFtTGlzdEl0ZXJhdG9yLmhhc05leHQoKSkgewotICAgICAgICAgICAgICAgICAgICBuZXh0S2V5KCk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIHJldHVybiBtTGFzdEVudHJ5OwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgICAgIHB1YmxpYyB2b2lkIHJlbW92ZSgpIHsKLSAgICAgICAgICAgICAgICAvLyBvbmx5IGFsbG93IHJlbW92aW5nIGVuZCB0YWdzCi0gICAgICAgICAgICAgICAgaWYgKG1MYXN0TGlzdEl0ZXJhdG9yID09IG51bGwgfHwKLSAgICAgICAgICAgICAgICAgICAgICAgIG1MYXN0RW50cnkuc2Vjb25kLm1FbmRUaW1lTXMgIT0gbUxhc3RFbnRyeS5maXJzdCkgewotICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgSWxsZWdhbFN0YXRlRXhjZXB0aW9uKCIiKTsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICAvLyByZW1vdmUgZW5kLWN1ZQotICAgICAgICAgICAgICAgIG1MYXN0TGlzdEl0ZXJhdG9yLnJlbW92ZSgpOwotICAgICAgICAgICAgICAgIG1MYXN0TGlzdEl0ZXJhdG9yID0gbnVsbDsKLSAgICAgICAgICAgICAgICBpZiAobUN1ZXMuZ2V0KG1MYXN0RW50cnkuZmlyc3QpLnNpemUoKSA9PSAwKSB7Ci0gICAgICAgICAgICAgICAgICAgIG1DdWVzLnJlbW92ZShtTGFzdEVudHJ5LmZpcnN0KTsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICAvLyByZW1vdmUgcmVzdCBvZiB0aGUgY3VlcwotICAgICAgICAgICAgICAgIEN1ZSBjdWUgPSBtTGFzdEVudHJ5LnNlY29uZDsKLSAgICAgICAgICAgICAgICByZW1vdmVFdmVudChjdWUsIGN1ZS5tU3RhcnRUaW1lTXMpOwotICAgICAgICAgICAgICAgIGlmIChjdWUubUlubmVyVGltZXNNcyAhPSBudWxsKSB7Ci0gICAgICAgICAgICAgICAgICAgIGZvciAobG9uZyB0aW1lTXM6IGN1ZS5tSW5uZXJUaW1lc01zKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICByZW1vdmVFdmVudChjdWUsIHRpbWVNcyk7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIHB1YmxpYyBFbnRyeUl0ZXJhdG9yKFNvcnRlZE1hcDxMb25nLCBWZWN0b3I8Q3VlPiA+IGN1ZXMpIHsKLSAgICAgICAgICAgICAgICBpZiAoREVCVUcpIExvZy52KFRBRywgY3VlcyArICIiKTsKLSAgICAgICAgICAgICAgICBtUmVtYWluaW5nQ3VlcyA9IGN1ZXM7Ci0gICAgICAgICAgICAgICAgbUxhc3RMaXN0SXRlcmF0b3IgPSBudWxsOwotICAgICAgICAgICAgICAgIG5leHRLZXkoKTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgcHJpdmF0ZSB2b2lkIG5leHRLZXkoKSB7Ci0gICAgICAgICAgICAgICAgZG8gewotICAgICAgICAgICAgICAgICAgICB0cnkgewotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1SZW1haW5pbmdDdWVzID09IG51bGwpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgTm9TdWNoRWxlbWVudEV4Y2VwdGlvbigiIik7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICBtQ3VycmVudFRpbWVNcyA9IG1SZW1haW5pbmdDdWVzLmZpcnN0S2V5KCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBtTGlzdEl0ZXJhdG9yID0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBtUmVtYWluaW5nQ3Vlcy5nZXQobUN1cnJlbnRUaW1lTXMpLml0ZXJhdG9yKCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICB0cnkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1SZW1haW5pbmdDdWVzID0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbVJlbWFpbmluZ0N1ZXMudGFpbE1hcChtQ3VycmVudFRpbWVNcyArIDEpOwotICAgICAgICAgICAgICAgICAgICAgICAgfSBjYXRjaCAoSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uIGUpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBtUmVtYWluaW5nQ3VlcyA9IG51bGw7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICBtRG9uZSA9IGZhbHNlOwotICAgICAgICAgICAgICAgICAgICB9IGNhdGNoIChOb1N1Y2hFbGVtZW50RXhjZXB0aW9uIGUpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIG1Eb25lID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICAgICAgICAgIG1SZW1haW5pbmdDdWVzID0gbnVsbDsKLSAgICAgICAgICAgICAgICAgICAgICAgIG1MaXN0SXRlcmF0b3IgPSBudWxsOwotICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfSB3aGlsZSAoIW1MaXN0SXRlcmF0b3IuaGFzTmV4dCgpKTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgcHJpdmF0ZSBsb25nIG1DdXJyZW50VGltZU1zOwotICAgICAgICAgICAgcHJpdmF0ZSBJdGVyYXRvcjxDdWU+IG1MaXN0SXRlcmF0b3I7Ci0gICAgICAgICAgICBwcml2YXRlIGJvb2xlYW4gbURvbmU7Ci0gICAgICAgICAgICBwcml2YXRlIFNvcnRlZE1hcDxMb25nLCBWZWN0b3I8Q3VlPiA+IG1SZW1haW5pbmdDdWVzOwotICAgICAgICAgICAgcHJpdmF0ZSBJdGVyYXRvcjxDdWU+IG1MYXN0TGlzdEl0ZXJhdG9yOwotICAgICAgICAgICAgcHJpdmF0ZSBQYWlyPExvbmcsQ3VlPiBtTGFzdEVudHJ5OwotICAgICAgICB9Ci0KLSAgICAgICAgQ3VlTGlzdCgpIHsKLSAgICAgICAgICAgIG1DdWVzID0gbmV3IFRyZWVNYXA8TG9uZywgVmVjdG9yPEN1ZT4+KCk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBwdWJsaWMgc3RhdGljIGNsYXNzIEN1ZSB7Ci0gICAgICAgIHB1YmxpYyBsb25nIG1TdGFydFRpbWVNczsKLSAgICAgICAgcHVibGljIGxvbmcgbUVuZFRpbWVNczsKLSAgICAgICAgcHVibGljIGxvbmdbXSBtSW5uZXJUaW1lc01zOwotICAgICAgICBwdWJsaWMgbG9uZyBtUnVuSUQ7Ci0KLSAgICAgICAgcHVibGljIEN1ZSBtTmV4dEluUnVuOwotCi0gICAgICAgIHB1YmxpYyB2b2lkIG9uVGltZShsb25nIHRpbWVNcykgeyB9Ci0gICAgfQotCi0gICAgLyoqIHVwZGF0ZSBtUnVuc0J5RW5kVGltZSAod2l0aCBkZWZhdWx0IGVuZCB0aW1lKSAqLwotICAgIHByb3RlY3RlZCB2b2lkIGZpbmlzaGVkUnVuKGxvbmcgcnVuSUQpIHsKLSAgICAgICAgaWYgKHJ1bklEICE9IDAgJiYgcnVuSUQgIT0gfjApIHsKLSAgICAgICAgICAgIFJ1biBydW4gPSBtUnVuc0J5SUQuZ2V0KHJ1bklEKTsKLSAgICAgICAgICAgIGlmIChydW4gIT0gbnVsbCkgewotICAgICAgICAgICAgICAgIHJ1bi5zdG9yZUJ5RW5kVGltZU1zKG1SdW5zQnlFbmRUaW1lKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLQotICAgIC8qKiB1cGRhdGUgbVJ1bnNCeUVuZFRpbWUgd2l0aCBnaXZlbiBlbmQgdGltZSAqLwotICAgIHB1YmxpYyB2b2lkIHNldFJ1bkRpc2NhcmRUaW1lTXMobG9uZyBydW5JRCwgbG9uZyB0aW1lTXMpIHsKLSAgICAgICAgaWYgKHJ1bklEICE9IDAgJiYgcnVuSUQgIT0gfjApIHsKLSAgICAgICAgICAgIFJ1biBydW4gPSBtUnVuc0J5SUQuZ2V0KHJ1bklEKTsKLSAgICAgICAgICAgIGlmIChydW4gIT0gbnVsbCkgewotICAgICAgICAgICAgICAgIHJ1bi5tRW5kVGltZU1zID0gdGltZU1zOwotICAgICAgICAgICAgICAgIHJ1bi5zdG9yZUJ5RW5kVGltZU1zKG1SdW5zQnlFbmRUaW1lKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLQotICAgIC8qKiB3aGV0aGVyIHRoaXMgaXMgYSB0ZXh0IHRyYWNrIHdobyBmaXJlcyBldmVudHMgaW5zdGVhZCBnZXR0aW5nIHJlbmRlcmVkICovCi0gICAgcHVibGljIGludCBnZXRUcmFja1R5cGUoKSB7Ci0gICAgICAgIHJldHVybiBnZXRSZW5kZXJpbmdXaWRnZXQoKSA9PSBudWxsCi0gICAgICAgICAgICAgICAgPyBUcmFja0luZm8uTUVESUFfVFJBQ0tfVFlQRV9USU1FRFRFWFQKLSAgICAgICAgICAgICAgICA6IFRyYWNrSW5mby5NRURJQV9UUkFDS19UWVBFX1NVQlRJVExFOwotICAgIH0KLQotCi0gICAgcHJpdmF0ZSBzdGF0aWMgY2xhc3MgUnVuIHsKLSAgICAgICAgcHVibGljIEN1ZSBtRmlyc3RDdWU7Ci0gICAgICAgIHB1YmxpYyBSdW4gbU5leHRSdW5BdEVuZFRpbWVNczsKLSAgICAgICAgcHVibGljIFJ1biBtUHJldlJ1bkF0RW5kVGltZU1zOwotICAgICAgICBwdWJsaWMgbG9uZyBtRW5kVGltZU1zID0gLTE7Ci0gICAgICAgIHB1YmxpYyBsb25nIG1SdW5JRCA9IDA7Ci0gICAgICAgIHByaXZhdGUgbG9uZyBtU3RvcmVkRW5kVGltZU1zID0gLTE7Ci0KLSAgICAgICAgcHVibGljIHZvaWQgc3RvcmVCeUVuZFRpbWVNcyhMb25nU3BhcnNlQXJyYXk8UnVuPiBydW5zQnlFbmRUaW1lKSB7Ci0gICAgICAgICAgICAvLyByZW1vdmUgb2xkIHZhbHVlIGlmIGFueQotICAgICAgICAgICAgaW50IGl4ID0gcnVuc0J5RW5kVGltZS5pbmRleE9mS2V5KG1TdG9yZWRFbmRUaW1lTXMpOwotICAgICAgICAgICAgaWYgKGl4ID49IDApIHsKLSAgICAgICAgICAgICAgICBpZiAobVByZXZSdW5BdEVuZFRpbWVNcyA9PSBudWxsKSB7Ci0gICAgICAgICAgICAgICAgICAgIGFzc2VydCh0aGlzID09IHJ1bnNCeUVuZFRpbWUudmFsdWVBdChpeCkpOwotICAgICAgICAgICAgICAgICAgICBpZiAobU5leHRSdW5BdEVuZFRpbWVNcyA9PSBudWxsKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBydW5zQnlFbmRUaW1lLnJlbW92ZUF0KGl4KTsKLSAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHJ1bnNCeUVuZFRpbWUuc2V0VmFsdWVBdChpeCwgbU5leHRSdW5BdEVuZFRpbWVNcyk7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgcmVtb3ZlQXRFbmRUaW1lTXMoKTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgLy8gYWRkIG5ldyB2YWx1ZQotICAgICAgICAgICAgaWYgKG1FbmRUaW1lTXMgPj0gMCkgewotICAgICAgICAgICAgICAgIG1QcmV2UnVuQXRFbmRUaW1lTXMgPSBudWxsOwotICAgICAgICAgICAgICAgIG1OZXh0UnVuQXRFbmRUaW1lTXMgPSBydW5zQnlFbmRUaW1lLmdldChtRW5kVGltZU1zKTsKLSAgICAgICAgICAgICAgICBpZiAobU5leHRSdW5BdEVuZFRpbWVNcyAhPSBudWxsKSB7Ci0gICAgICAgICAgICAgICAgICAgIG1OZXh0UnVuQXRFbmRUaW1lTXMubVByZXZSdW5BdEVuZFRpbWVNcyA9IHRoaXM7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIHJ1bnNCeUVuZFRpbWUucHV0KG1FbmRUaW1lTXMsIHRoaXMpOwotICAgICAgICAgICAgICAgIG1TdG9yZWRFbmRUaW1lTXMgPSBtRW5kVGltZU1zOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgcHVibGljIHZvaWQgcmVtb3ZlQXRFbmRUaW1lTXMoKSB7Ci0gICAgICAgICAgICBSdW4gcHJldiA9IG1QcmV2UnVuQXRFbmRUaW1lTXM7Ci0KLSAgICAgICAgICAgIGlmIChtUHJldlJ1bkF0RW5kVGltZU1zICE9IG51bGwpIHsKLSAgICAgICAgICAgICAgICBtUHJldlJ1bkF0RW5kVGltZU1zLm1OZXh0UnVuQXRFbmRUaW1lTXMgPSBtTmV4dFJ1bkF0RW5kVGltZU1zOwotICAgICAgICAgICAgICAgIG1QcmV2UnVuQXRFbmRUaW1lTXMgPSBudWxsOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYgKG1OZXh0UnVuQXRFbmRUaW1lTXMgIT0gbnVsbCkgewotICAgICAgICAgICAgICAgIG1OZXh0UnVuQXRFbmRUaW1lTXMubVByZXZSdW5BdEVuZFRpbWVNcyA9IHByZXY7Ci0gICAgICAgICAgICAgICAgbU5leHRSdW5BdEVuZFRpbWVNcyA9IG51bGw7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBJbnRlcmZhY2UgZm9yIHJlbmRlcmluZyBzdWJ0aXRsZXMgb250byBhIENhbnZhcy4KLSAgICAgKi8KLSAgICBwdWJsaWMgaW50ZXJmYWNlIFJlbmRlcmluZ1dpZGdldCB7Ci0gICAgICAgIC8qKgotICAgICAgICAgKiBTZXRzIHRoZSB3aWRnZXQncyBjYWxsYmFjaywgd2hpY2ggaXMgdXNlZCB0byBzZW5kIHVwZGF0ZXMgd2hlbiB0aGUKLSAgICAgICAgICogcmVuZGVyZWQgZGF0YSBoYXMgY2hhbmdlZC4KLSAgICAgICAgICoKLSAgICAgICAgICogQHBhcmFtIGNhbGxiYWNrIHVwZGF0ZSBjYWxsYmFjawotICAgICAgICAgKi8KLSAgICAgICAgcHVibGljIHZvaWQgc2V0T25DaGFuZ2VkTGlzdGVuZXIoT25DaGFuZ2VkTGlzdGVuZXIgY2FsbGJhY2spOwotCi0gICAgICAgIC8qKgotICAgICAgICAgKiBTZXRzIHRoZSB3aWRnZXQncyBzaXplLgotICAgICAgICAgKgotICAgICAgICAgKiBAcGFyYW0gd2lkdGggd2lkdGggaW4gcGl4ZWxzCi0gICAgICAgICAqIEBwYXJhbSBoZWlnaHQgaGVpZ2h0IGluIHBpeGVscwotICAgICAgICAgKi8KLSAgICAgICAgcHVibGljIHZvaWQgc2V0U2l6ZShpbnQgd2lkdGgsIGludCBoZWlnaHQpOwotCi0gICAgICAgIC8qKgotICAgICAgICAgKiBTZXRzIHdoZXRoZXIgdGhlIHdpZGdldCBzaG91bGQgZHJhdyBzdWJ0aXRsZXMuCi0gICAgICAgICAqCi0gICAgICAgICAqIEBwYXJhbSB2aXNpYmxlIHRydWUgaWYgc3VidGl0bGVzIHNob3VsZCBiZSBkcmF3biwgZmFsc2Ugb3RoZXJ3aXNlCi0gICAgICAgICAqLwotICAgICAgICBwdWJsaWMgdm9pZCBzZXRWaXNpYmxlKGJvb2xlYW4gdmlzaWJsZSk7Ci0KLSAgICAgICAgLyoqCi0gICAgICAgICAqIFJlbmRlcnMgc3VidGl0bGVzIG9udG8gYSB7QGxpbmsgQ2FudmFzfS4KLSAgICAgICAgICoKLSAgICAgICAgICogQHBhcmFtIGMgY2FudmFzIG9uIHdoaWNoIHRvIHJlbmRlciBzdWJ0aXRsZXMKLSAgICAgICAgICovCi0gICAgICAgIHB1YmxpYyB2b2lkIGRyYXcoQ2FudmFzIGMpOwotCi0gICAgICAgIC8qKgotICAgICAgICAgKiBDYWxsZWQgd2hlbiB0aGUgd2lkZ2V0IGlzIGF0dGFjaGVkIHRvIGEgd2luZG93LgotICAgICAgICAgKi8KLSAgICAgICAgcHVibGljIHZvaWQgb25BdHRhY2hlZFRvV2luZG93KCk7Ci0KLSAgICAgICAgLyoqCi0gICAgICAgICAqIENhbGxlZCB3aGVuIHRoZSB3aWRnZXQgaXMgZGV0YWNoZWQgZnJvbSBhIHdpbmRvdy4KLSAgICAgICAgICovCi0gICAgICAgIHB1YmxpYyB2b2lkIG9uRGV0YWNoZWRGcm9tV2luZG93KCk7Ci0KLSAgICAgICAgLyoqCi0gICAgICAgICAqIENhbGxiYWNrIHVzZWQgdG8gc2VuZCB1cGRhdGVzIGFib3V0IGNoYW5nZXMgdG8gcmVuZGVyaW5nIGRhdGEuCi0gICAgICAgICAqLwotICAgICAgICBwdWJsaWMgaW50ZXJmYWNlIE9uQ2hhbmdlZExpc3RlbmVyIHsKLSAgICAgICAgICAgIC8qKgotICAgICAgICAgICAgICogQ2FsbGVkIHdoZW4gdGhlIHJlbmRlcmluZyBkYXRhIGhhcyBjaGFuZ2VkLgotICAgICAgICAgICAgICoKLSAgICAgICAgICAgICAqIEBwYXJhbSByZW5kZXJpbmdXaWRnZXQgdGhlIHdpZGdldCB3aG9zZSBkYXRhIGhhcyBjaGFuZ2VkCi0gICAgICAgICAgICAgKi8KLSAgICAgICAgICAgIHB1YmxpYyB2b2lkIG9uQ2hhbmdlZChSZW5kZXJpbmdXaWRnZXQgcmVuZGVyaW5nV2lkZ2V0KTsKLSAgICAgICAgfQotICAgIH0KLX0KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL01lZGlhQ29tcG9uZW50cy9zcmMvY29tL2FuZHJvaWQvbWVkaWEvdXBkYXRlL0FwaUZhY3RvcnkuamF2YSBiL3BhY2thZ2VzL01lZGlhQ29tcG9uZW50cy9zcmMvY29tL2FuZHJvaWQvbWVkaWEvdXBkYXRlL0FwaUZhY3RvcnkuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDdiZTU0OS4uMDAwMDAwMAotLS0gYS9wYWNrYWdlcy9NZWRpYUNvbXBvbmVudHMvc3JjL2NvbS9hbmRyb2lkL21lZGlhL3VwZGF0ZS9BcGlGYWN0b3J5LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyNzYgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNyBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0Ci0gKgotICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7Ci0gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCi0gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLSAqCi0gKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotICoKLSAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKLSAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCi0gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KLSAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKLSAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgotICovCi0KLXBhY2thZ2UgY29tLmFuZHJvaWQubWVkaWEudXBkYXRlOwotCi1pbXBvcnQgYW5kcm9pZC5hcHAuTm90aWZpY2F0aW9uOwotaW1wb3J0IGFuZHJvaWQuY29udGVudC5Db250ZXh0OwotaW1wb3J0IGFuZHJvaWQuY29udGVudC5wbS5BcHBsaWNhdGlvbkluZm87Ci1pbXBvcnQgYW5kcm9pZC5tZWRpYS5NZWRpYUJyb3dzZXIyOwotaW1wb3J0IGFuZHJvaWQubWVkaWEuTWVkaWFCcm93c2VyMi5Ccm93c2VyQ2FsbGJhY2s7Ci1pbXBvcnQgYW5kcm9pZC5tZWRpYS5NZWRpYUNvbnRyb2xsZXIyOwotaW1wb3J0IGFuZHJvaWQubWVkaWEuTWVkaWFDb250cm9sbGVyMi5Db250cm9sbGVyQ2FsbGJhY2s7Ci1pbXBvcnQgYW5kcm9pZC5tZWRpYS5NZWRpYUl0ZW0yOwotaW1wb3J0IGFuZHJvaWQubWVkaWEuTWVkaWFMaWJyYXJ5U2VydmljZTI7Ci1pbXBvcnQgYW5kcm9pZC5tZWRpYS5NZWRpYUxpYnJhcnlTZXJ2aWNlMi5MaWJyYXJ5Um9vdDsKLWltcG9ydCBhbmRyb2lkLm1lZGlhLk1lZGlhTGlicmFyeVNlcnZpY2UyLk1lZGlhTGlicmFyeVNlc3Npb247Ci1pbXBvcnQgYW5kcm9pZC5tZWRpYS5NZWRpYUxpYnJhcnlTZXJ2aWNlMi5NZWRpYUxpYnJhcnlTZXNzaW9uLk1lZGlhTGlicmFyeVNlc3Npb25DYWxsYmFjazsKLWltcG9ydCBhbmRyb2lkLm1lZGlhLk1lZGlhTWV0YWRhdGEyOwotaW1wb3J0IGFuZHJvaWQubWVkaWEuTWVkaWFQbGF5bGlzdEFnZW50OwotaW1wb3J0IGFuZHJvaWQubWVkaWEuTWVkaWFTZXNzaW9uMjsKLWltcG9ydCBhbmRyb2lkLm1lZGlhLlNlc3Npb25Db21tYW5kMjsKLWltcG9ydCBhbmRyb2lkLm1lZGlhLlNlc3Npb25Db21tYW5kR3JvdXAyOwotaW1wb3J0IGFuZHJvaWQubWVkaWEuTWVkaWFTZXNzaW9uMi5Db250cm9sbGVySW5mbzsKLWltcG9ydCBhbmRyb2lkLm1lZGlhLk1lZGlhU2Vzc2lvbjIuU2Vzc2lvbkNhbGxiYWNrOwotaW1wb3J0IGFuZHJvaWQubWVkaWEuTWVkaWFTZXNzaW9uU2VydmljZTI7Ci1pbXBvcnQgYW5kcm9pZC5tZWRpYS5NZWRpYVNlc3Npb25TZXJ2aWNlMi5NZWRpYU5vdGlmaWNhdGlvbjsKLWltcG9ydCBhbmRyb2lkLm1lZGlhLlJhdGluZzI7Ci1pbXBvcnQgYW5kcm9pZC5tZWRpYS5TZXNzaW9uVG9rZW4yOwotaW1wb3J0IGFuZHJvaWQubWVkaWEuVm9sdW1lUHJvdmlkZXIyOwotaW1wb3J0IGFuZHJvaWQubWVkaWEudXBkYXRlLk1lZGlhQnJvd3NlcjJQcm92aWRlcjsKLWltcG9ydCBhbmRyb2lkLm1lZGlhLnVwZGF0ZS5NZWRpYUNvbnRyb2xWaWV3MlByb3ZpZGVyOwotaW1wb3J0IGFuZHJvaWQubWVkaWEudXBkYXRlLk1lZGlhQ29udHJvbGxlcjJQcm92aWRlcjsKLWltcG9ydCBhbmRyb2lkLm1lZGlhLnVwZGF0ZS5NZWRpYUl0ZW0yUHJvdmlkZXI7Ci1pbXBvcnQgYW5kcm9pZC5tZWRpYS51cGRhdGUuTWVkaWFMaWJyYXJ5U2VydmljZTJQcm92aWRlci5MaWJyYXJ5Um9vdFByb3ZpZGVyOwotaW1wb3J0IGFuZHJvaWQubWVkaWEudXBkYXRlLk1lZGlhTWV0YWRhdGEyUHJvdmlkZXI7Ci1pbXBvcnQgYW5kcm9pZC5tZWRpYS51cGRhdGUuTWVkaWFQbGF5bGlzdEFnZW50UHJvdmlkZXI7Ci1pbXBvcnQgYW5kcm9pZC5tZWRpYS51cGRhdGUuTWVkaWFTZXNzaW9uMlByb3ZpZGVyOwotaW1wb3J0IGFuZHJvaWQubWVkaWEudXBkYXRlLk1lZGlhU2Vzc2lvbjJQcm92aWRlci5CdWlsZGVyQmFzZVByb3ZpZGVyOwotaW1wb3J0IGFuZHJvaWQubWVkaWEudXBkYXRlLk1lZGlhU2Vzc2lvbjJQcm92aWRlci5Db21tYW5kQnV0dG9uUHJvdmlkZXIuQnVpbGRlclByb3ZpZGVyOwotaW1wb3J0IGFuZHJvaWQubWVkaWEudXBkYXRlLk1lZGlhU2Vzc2lvblNlcnZpY2UyUHJvdmlkZXI7Ci1pbXBvcnQgYW5kcm9pZC5tZWRpYS51cGRhdGUuTWVkaWFTZXNzaW9uU2VydmljZTJQcm92aWRlci5NZWRpYU5vdGlmaWNhdGlvblByb3ZpZGVyOwotaW1wb3J0IGFuZHJvaWQubWVkaWEudXBkYXRlLlNlc3Npb25Ub2tlbjJQcm92aWRlcjsKLWltcG9ydCBhbmRyb2lkLm1lZGlhLnVwZGF0ZS5TdGF0aWNQcm92aWRlcjsKLWltcG9ydCBhbmRyb2lkLm1lZGlhLnVwZGF0ZS5WaWRlb1ZpZXcyUHJvdmlkZXI7Ci1pbXBvcnQgYW5kcm9pZC5tZWRpYS51cGRhdGUuVmlld0dyb3VwUHJvdmlkZXI7Ci1pbXBvcnQgYW5kcm9pZC5tZWRpYS51cGRhdGUuVm9sdW1lUHJvdmlkZXIyUHJvdmlkZXI7Ci1pbXBvcnQgYW5kcm9pZC5vcy5CdW5kbGU7Ci1pbXBvcnQgYW5kcm9pZC5vcy5JSW50ZXJmYWNlOwotaW1wb3J0IGFuZHJvaWQuc3VwcG9ydC5hbm5vdGF0aW9uLk51bGxhYmxlOwotaW1wb3J0IGFuZHJvaWQudXRpbC5BdHRyaWJ1dGVTZXQ7Ci1pbXBvcnQgYW5kcm9pZC53aWRnZXQuTWVkaWFDb250cm9sVmlldzI7Ci1pbXBvcnQgYW5kcm9pZC53aWRnZXQuVmlkZW9WaWV3MjsKLQotaW1wb3J0IGNvbS5hbmRyb2lkLm1lZGlhLklNZWRpYUNvbnRyb2xsZXIyOwotaW1wb3J0IGNvbS5hbmRyb2lkLm1lZGlhLk1lZGlhQnJvd3NlcjJJbXBsOwotaW1wb3J0IGNvbS5hbmRyb2lkLm1lZGlhLk1lZGlhQ29udHJvbGxlcjJJbXBsOwotaW1wb3J0IGNvbS5hbmRyb2lkLm1lZGlhLk1lZGlhSXRlbTJJbXBsOwotaW1wb3J0IGNvbS5hbmRyb2lkLm1lZGlhLk1lZGlhTGlicmFyeVNlcnZpY2UySW1wbDsKLWltcG9ydCBjb20uYW5kcm9pZC5tZWRpYS5NZWRpYUxpYnJhcnlTZXJ2aWNlMkltcGwuTGlicmFyeVJvb3RJbXBsOwotaW1wb3J0IGNvbS5hbmRyb2lkLm1lZGlhLk1lZGlhTWV0YWRhdGEySW1wbDsKLWltcG9ydCBjb20uYW5kcm9pZC5tZWRpYS5NZWRpYVBsYXlsaXN0QWdlbnRJbXBsOwotaW1wb3J0IGNvbS5hbmRyb2lkLm1lZGlhLk1lZGlhU2Vzc2lvbjJJbXBsOwotaW1wb3J0IGNvbS5hbmRyb2lkLm1lZGlhLk1lZGlhU2Vzc2lvblNlcnZpY2UySW1wbDsKLWltcG9ydCBjb20uYW5kcm9pZC5tZWRpYS5SYXRpbmcySW1wbDsKLWltcG9ydCBjb20uYW5kcm9pZC5tZWRpYS5TZXNzaW9uVG9rZW4ySW1wbDsKLWltcG9ydCBjb20uYW5kcm9pZC5tZWRpYS5Wb2x1bWVQcm92aWRlcjJJbXBsOwotaW1wb3J0IGNvbS5hbmRyb2lkLndpZGdldC5NZWRpYUNvbnRyb2xWaWV3MkltcGw7Ci1pbXBvcnQgY29tLmFuZHJvaWQud2lkZ2V0LlZpZGVvVmlldzJJbXBsOwotCi1pbXBvcnQgamF2YS51dGlsLmNvbmN1cnJlbnQuRXhlY3V0b3I7Ci0KLXB1YmxpYyBmaW5hbCBjbGFzcyBBcGlGYWN0b3J5IGltcGxlbWVudHMgU3RhdGljUHJvdmlkZXIgewotICAgIHByaXZhdGUgQXBpRmFjdG9yeSgpIHsgfQotCi0gICAgcHVibGljIHN0YXRpYyBTdGF0aWNQcm92aWRlciBpbml0aWFsaXplKEFwcGxpY2F0aW9uSW5mbyB1cGRhdGFibGVJbmZvKSB7Ci0gICAgICAgIEFwaUhlbHBlci5pbml0aWFsaXplKHVwZGF0YWJsZUluZm8pOwotICAgICAgICByZXR1cm4gbmV3IEFwaUZhY3RvcnkoKTsKLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgTWVkaWFDb250cm9sbGVyMlByb3ZpZGVyIGNyZWF0ZU1lZGlhQ29udHJvbGxlcjIoCi0gICAgICAgICAgICBDb250ZXh0IGNvbnRleHQsIE1lZGlhQ29udHJvbGxlcjIgaW5zdGFuY2UsIFNlc3Npb25Ub2tlbjIgdG9rZW4sCi0gICAgICAgICAgICBFeGVjdXRvciBleGVjdXRvciwgQ29udHJvbGxlckNhbGxiYWNrIGNhbGxiYWNrKSB7Ci0gICAgICAgIHJldHVybiBuZXcgTWVkaWFDb250cm9sbGVyMkltcGwoY29udGV4dCwgaW5zdGFuY2UsIHRva2VuLCBleGVjdXRvciwgY2FsbGJhY2spOwotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyBNZWRpYUJyb3dzZXIyUHJvdmlkZXIgY3JlYXRlTWVkaWFCcm93c2VyMihDb250ZXh0IGNvbnRleHQsIE1lZGlhQnJvd3NlcjIgaW5zdGFuY2UsCi0gICAgICAgICAgICBTZXNzaW9uVG9rZW4yIHRva2VuLCBFeGVjdXRvciBleGVjdXRvciwgQnJvd3NlckNhbGxiYWNrIGNhbGxiYWNrKSB7Ci0gICAgICAgIHJldHVybiBuZXcgTWVkaWFCcm93c2VyMkltcGwoY29udGV4dCwgaW5zdGFuY2UsIHRva2VuLCBleGVjdXRvciwgY2FsbGJhY2spOwotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyBNZWRpYVNlc3Npb24yUHJvdmlkZXIuQ29tbWFuZFByb3ZpZGVyIGNyZWF0ZU1lZGlhU2Vzc2lvbjJDb21tYW5kKAotICAgICAgICAgICAgU2Vzc2lvbkNvbW1hbmQyIGluc3RhbmNlLCBpbnQgY29tbWFuZENvZGUsIFN0cmluZyBhY3Rpb24sIEJ1bmRsZSBleHRyYSkgewotICAgICAgICBpZiAoYWN0aW9uID09IG51bGwgJiYgZXh0cmEgPT0gbnVsbCkgewotICAgICAgICAgICAgcmV0dXJuIG5ldyBNZWRpYVNlc3Npb24ySW1wbC5Db21tYW5kSW1wbChpbnN0YW5jZSwgY29tbWFuZENvZGUpOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiBuZXcgTWVkaWFTZXNzaW9uMkltcGwuQ29tbWFuZEltcGwoaW5zdGFuY2UsIGFjdGlvbiwgZXh0cmEpOwotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyBTZXNzaW9uQ29tbWFuZDIgZnJvbUJ1bmRsZV9NZWRpYVNlc3Npb24yQ29tbWFuZChCdW5kbGUgY29tbWFuZCkgewotICAgICAgICByZXR1cm4gTWVkaWFTZXNzaW9uMkltcGwuQ29tbWFuZEltcGwuZnJvbUJ1bmRsZV9pbXBsKGNvbW1hbmQpOwotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyBNZWRpYVNlc3Npb24yUHJvdmlkZXIuQ29tbWFuZEdyb3VwUHJvdmlkZXIgY3JlYXRlTWVkaWFTZXNzaW9uMkNvbW1hbmRHcm91cCgKLSAgICAgICAgICAgIFNlc3Npb25Db21tYW5kR3JvdXAyIGluc3RhbmNlLCBTZXNzaW9uQ29tbWFuZEdyb3VwMiBvdGhlcikgewotICAgICAgICByZXR1cm4gbmV3IE1lZGlhU2Vzc2lvbjJJbXBsLkNvbW1hbmRHcm91cEltcGwoaW5zdGFuY2UsCi0gICAgICAgICAgICAgICAgKG90aGVyID09IG51bGwpID8gbnVsbCA6IG90aGVyLmdldFByb3ZpZGVyKCkpOwotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyBTZXNzaW9uQ29tbWFuZEdyb3VwMiBmcm9tQnVuZGxlX01lZGlhU2Vzc2lvbjJDb21tYW5kR3JvdXAoQnVuZGxlIGNvbW1hbmRzKSB7Ci0gICAgICAgIHJldHVybiBNZWRpYVNlc3Npb24ySW1wbC5Db21tYW5kR3JvdXBJbXBsLmZyb21CdW5kbGVfaW1wbChjb21tYW5kcyk7Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIE1lZGlhU2Vzc2lvbjJQcm92aWRlci5Db250cm9sbGVySW5mb1Byb3ZpZGVyIGNyZWF0ZU1lZGlhU2Vzc2lvbjJDb250cm9sbGVySW5mbygKLSAgICAgICAgICAgIENvbnRleHQgY29udGV4dCwgQ29udHJvbGxlckluZm8gaW5zdGFuY2UsIGludCB1aWQsIGludCBwaWQsIFN0cmluZyBwYWNrYWdlTmFtZSwKLSAgICAgICAgICAgIElJbnRlcmZhY2UgY2FsbGJhY2spIHsKLSAgICAgICAgcmV0dXJuIG5ldyBNZWRpYVNlc3Npb24ySW1wbC5Db250cm9sbGVySW5mb0ltcGwoY29udGV4dCwKLSAgICAgICAgICAgICAgICBpbnN0YW5jZSwgdWlkLCBwaWQsIHBhY2thZ2VOYW1lLCAoSU1lZGlhQ29udHJvbGxlcjIpIGNhbGxiYWNrKTsKLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgQnVpbGRlclByb3ZpZGVyIGNyZWF0ZU1lZGlhU2Vzc2lvbjJDb21tYW5kQnV0dG9uQnVpbGRlcigKLSAgICAgICAgICAgIE1lZGlhU2Vzc2lvbjIuQ29tbWFuZEJ1dHRvbi5CdWlsZGVyIGluc3RhbmNlKSB7Ci0gICAgICAgIHJldHVybiBuZXcgTWVkaWFTZXNzaW9uMkltcGwuQ29tbWFuZEJ1dHRvbkltcGwuQnVpbGRlckltcGwoaW5zdGFuY2UpOwotICAgIH0KLQotICAgIHB1YmxpYyBCdWlsZGVyQmFzZVByb3ZpZGVyPE1lZGlhU2Vzc2lvbjIsIFNlc3Npb25DYWxsYmFjaz4gY3JlYXRlTWVkaWFTZXNzaW9uMkJ1aWxkZXIoCi0gICAgICAgICAgICBDb250ZXh0IGNvbnRleHQsIE1lZGlhU2Vzc2lvbjIuQnVpbGRlciBpbnN0YW5jZSkgewotICAgICAgICByZXR1cm4gbmV3IE1lZGlhU2Vzc2lvbjJJbXBsLkJ1aWxkZXJJbXBsKGNvbnRleHQsIGluc3RhbmNlKTsKLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgTWVkaWFTZXNzaW9uU2VydmljZTJQcm92aWRlciBjcmVhdGVNZWRpYVNlc3Npb25TZXJ2aWNlMihNZWRpYVNlc3Npb25TZXJ2aWNlMiBpbnN0YW5jZSkgewotICAgICAgICByZXR1cm4gbmV3IE1lZGlhU2Vzc2lvblNlcnZpY2UySW1wbChpbnN0YW5jZSk7Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIE1lZGlhTm90aWZpY2F0aW9uUHJvdmlkZXIgY3JlYXRlTWVkaWFTZXNzaW9uU2VydmljZTJNZWRpYU5vdGlmaWNhdGlvbigKLSAgICAgICAgICAgIE1lZGlhTm90aWZpY2F0aW9uIGluc3RhbmNlLCBpbnQgbm90aWZpY2F0aW9uSWQsIE5vdGlmaWNhdGlvbiBub3RpZmljYXRpb24pIHsKLSAgICAgICAgcmV0dXJuIG5ldyBNZWRpYVNlc3Npb25TZXJ2aWNlMkltcGwuTWVkaWFOb3RpZmljYXRpb25JbXBsKAotICAgICAgICAgICAgICAgIGluc3RhbmNlLCBub3RpZmljYXRpb25JZCwgbm90aWZpY2F0aW9uKTsKLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgTWVkaWFTZXNzaW9uU2VydmljZTJQcm92aWRlciBjcmVhdGVNZWRpYUxpYnJhcnlTZXJ2aWNlMihNZWRpYUxpYnJhcnlTZXJ2aWNlMiBpbnN0YW5jZSkgewotICAgICAgICByZXR1cm4gbmV3IE1lZGlhTGlicmFyeVNlcnZpY2UySW1wbChpbnN0YW5jZSk7Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIEJ1aWxkZXJCYXNlUHJvdmlkZXI8TWVkaWFMaWJyYXJ5U2Vzc2lvbiwgTWVkaWFMaWJyYXJ5U2Vzc2lvbkNhbGxiYWNrPgotICAgICAgICBjcmVhdGVNZWRpYUxpYnJhcnlTZXJ2aWNlMkJ1aWxkZXIoTWVkaWFMaWJyYXJ5U2VydmljZTIgc2VydmljZSwKLSAgICAgICAgICAgIE1lZGlhTGlicmFyeVNlc3Npb24uQnVpbGRlciBpbnN0YW5jZSwgRXhlY3V0b3IgY2FsbGJhY2tFeGVjdXRvciwKLSAgICAgICAgICAgIE1lZGlhTGlicmFyeVNlc3Npb25DYWxsYmFjayBjYWxsYmFjaykgewotICAgICAgICByZXR1cm4gbmV3IE1lZGlhTGlicmFyeVNlcnZpY2UySW1wbC5CdWlsZGVySW1wbChzZXJ2aWNlLCBpbnN0YW5jZSwgY2FsbGJhY2tFeGVjdXRvciwKLSAgICAgICAgICAgICAgICBjYWxsYmFjayk7Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIExpYnJhcnlSb290UHJvdmlkZXIgY3JlYXRlTWVkaWFMaWJyYXJ5U2VydmljZTJMaWJyYXJ5Um9vdCgKLSAgICAgICAgICAgIExpYnJhcnlSb290IGluc3RhbmNlLCBTdHJpbmcgcm9vdElkLCBCdW5kbGUgZXh0cmFzKSB7Ci0gICAgICAgIHJldHVybiBuZXcgTGlicmFyeVJvb3RJbXBsKGluc3RhbmNlLCByb290SWQsIGV4dHJhcyk7Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIE1lZGlhQ29udHJvbFZpZXcyUHJvdmlkZXIgY3JlYXRlTWVkaWFDb250cm9sVmlldzIoTWVkaWFDb250cm9sVmlldzIgaW5zdGFuY2UsCi0gICAgICAgICAgICBWaWV3R3JvdXBQcm92aWRlciBzdXBlclByb3ZpZGVyLCBWaWV3R3JvdXBQcm92aWRlciBwcml2YXRlUHJvdmlkZXIsCi0gICAgICAgICAgICBATnVsbGFibGUgQXR0cmlidXRlU2V0IGF0dHJzLCBpbnQgZGVmU3R5bGVBdHRyLCBpbnQgZGVmU3R5bGVSZXMpIHsKLSAgICAgICAgcmV0dXJuIG5ldyBNZWRpYUNvbnRyb2xWaWV3MkltcGwoaW5zdGFuY2UsIHN1cGVyUHJvdmlkZXIsIHByaXZhdGVQcm92aWRlcik7Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIFZpZGVvVmlldzJQcm92aWRlciBjcmVhdGVWaWRlb1ZpZXcyKAotICAgICAgICAgICAgVmlkZW9WaWV3MiBpbnN0YW5jZSwgVmlld0dyb3VwUHJvdmlkZXIgc3VwZXJQcm92aWRlciwgVmlld0dyb3VwUHJvdmlkZXIgcHJpdmF0ZVByb3ZpZGVyLAotICAgICAgICAgICAgQE51bGxhYmxlIEF0dHJpYnV0ZVNldCBhdHRycywgaW50IGRlZlN0eWxlQXR0ciwgaW50IGRlZlN0eWxlUmVzKSB7Ci0gICAgICAgIHJldHVybiBuZXcgVmlkZW9WaWV3MkltcGwoaW5zdGFuY2UsIHN1cGVyUHJvdmlkZXIsIHByaXZhdGVQcm92aWRlcik7Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIFNlc3Npb25Ub2tlbjJQcm92aWRlciBjcmVhdGVTZXNzaW9uVG9rZW4yKENvbnRleHQgY29udGV4dCwgU2Vzc2lvblRva2VuMiBpbnN0YW5jZSwKLSAgICAgICAgICAgIFN0cmluZyBwYWNrYWdlTmFtZSwgU3RyaW5nIHNlcnZpY2VOYW1lLCBpbnQgdWlkKSB7Ci0gICAgICAgIHJldHVybiBuZXcgU2Vzc2lvblRva2VuMkltcGwoY29udGV4dCwgaW5zdGFuY2UsIHBhY2thZ2VOYW1lLCBzZXJ2aWNlTmFtZSwgdWlkKTsKLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgU2Vzc2lvblRva2VuMiBmcm9tQnVuZGxlX1Nlc3Npb25Ub2tlbjIoQnVuZGxlIGJ1bmRsZSkgewotICAgICAgICByZXR1cm4gU2Vzc2lvblRva2VuMkltcGwuZnJvbUJ1bmRsZV9pbXBsKGJ1bmRsZSk7Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIE1lZGlhSXRlbTJQcm92aWRlci5CdWlsZGVyUHJvdmlkZXIgY3JlYXRlTWVkaWFJdGVtMkJ1aWxkZXIoTWVkaWFJdGVtMi5CdWlsZGVyIGluc3RhbmNlLAotICAgICAgICAgICAgaW50IGZsYWdzKSB7Ci0gICAgICAgIHJldHVybiBuZXcgTWVkaWFJdGVtMkltcGwuQnVpbGRlckltcGwoaW5zdGFuY2UsIGZsYWdzKTsKLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgTWVkaWFJdGVtMiBmcm9tQnVuZGxlX01lZGlhSXRlbTIoQnVuZGxlIGJ1bmRsZSkgewotICAgICAgICByZXR1cm4gTWVkaWFJdGVtMkltcGwuZnJvbUJ1bmRsZV9pbXBsKGJ1bmRsZSk7Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIFZvbHVtZVByb3ZpZGVyMlByb3ZpZGVyIGNyZWF0ZVZvbHVtZVByb3ZpZGVyMihWb2x1bWVQcm92aWRlcjIgaW5zdGFuY2UsIGludCBjb250cm9sVHlwZSwKLSAgICAgICAgICAgIGludCBtYXhWb2x1bWUsIGludCBjdXJyZW50Vm9sdW1lKSB7Ci0gICAgICAgIHJldHVybiBuZXcgVm9sdW1lUHJvdmlkZXIySW1wbChpbnN0YW5jZSwgY29udHJvbFR5cGUsIG1heFZvbHVtZSwgY3VycmVudFZvbHVtZSk7Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIE1lZGlhTWV0YWRhdGEyIGZyb21CdW5kbGVfTWVkaWFNZXRhZGF0YTIoQnVuZGxlIGJ1bmRsZSkgewotICAgICAgICByZXR1cm4gTWVkaWFNZXRhZGF0YTJJbXBsLmZyb21CdW5kbGVfaW1wbChidW5kbGUpOwotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyBNZWRpYU1ldGFkYXRhMlByb3ZpZGVyLkJ1aWxkZXJQcm92aWRlciBjcmVhdGVNZWRpYU1ldGFkYXRhMkJ1aWxkZXIoCi0gICAgICAgICAgICBNZWRpYU1ldGFkYXRhMi5CdWlsZGVyIGluc3RhbmNlKSB7Ci0gICAgICAgIHJldHVybiBuZXcgTWVkaWFNZXRhZGF0YTJJbXBsLkJ1aWxkZXJJbXBsKGluc3RhbmNlKTsKLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgTWVkaWFNZXRhZGF0YTJQcm92aWRlci5CdWlsZGVyUHJvdmlkZXIgY3JlYXRlTWVkaWFNZXRhZGF0YTJCdWlsZGVyKAotICAgICAgICAgICAgTWVkaWFNZXRhZGF0YTIuQnVpbGRlciBpbnN0YW5jZSwgTWVkaWFNZXRhZGF0YTIgc291cmNlKSB7Ci0gICAgICAgIHJldHVybiBuZXcgTWVkaWFNZXRhZGF0YTJJbXBsLkJ1aWxkZXJJbXBsKGluc3RhbmNlLCBzb3VyY2UpOwotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyBSYXRpbmcyIGZyb21CdW5kbGVfUmF0aW5nMihCdW5kbGUgYnVuZGxlKSB7Ci0gICAgICAgIHJldHVybiBSYXRpbmcySW1wbC5mcm9tQnVuZGxlX2ltcGwoYnVuZGxlKTsKLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgUmF0aW5nMiBuZXdVbnJhdGVkUmF0aW5nX1JhdGluZzIoaW50IHJhdGluZ1N0eWxlKSB7Ci0gICAgICAgIHJldHVybiBSYXRpbmcySW1wbC5uZXdVbnJhdGVkUmF0aW5nX2ltcGwocmF0aW5nU3R5bGUpOwotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyBSYXRpbmcyIG5ld0hlYXJ0UmF0aW5nX1JhdGluZzIoYm9vbGVhbiBoYXNIZWFydCkgewotICAgICAgICByZXR1cm4gUmF0aW5nMkltcGwubmV3SGVhcnRSYXRpbmdfaW1wbChoYXNIZWFydCk7Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIFJhdGluZzIgbmV3VGh1bWJSYXRpbmdfUmF0aW5nMihib29sZWFuIHRodW1iSXNVcCkgewotICAgICAgICByZXR1cm4gUmF0aW5nMkltcGwubmV3VGh1bWJSYXRpbmdfaW1wbCh0aHVtYklzVXApOwotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyBSYXRpbmcyIG5ld1N0YXJSYXRpbmdfUmF0aW5nMihpbnQgc3RhclJhdGluZ1N0eWxlLCBmbG9hdCBzdGFyUmF0aW5nKSB7Ci0gICAgICAgIHJldHVybiBSYXRpbmcySW1wbC5uZXdTdGFyUmF0aW5nX2ltcGwoc3RhclJhdGluZ1N0eWxlLCBzdGFyUmF0aW5nKTsKLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgUmF0aW5nMiBuZXdQZXJjZW50YWdlUmF0aW5nX1JhdGluZzIoZmxvYXQgcGVyY2VudCkgewotICAgICAgICByZXR1cm4gUmF0aW5nMkltcGwubmV3UGVyY2VudGFnZVJhdGluZ19pbXBsKHBlcmNlbnQpOwotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyBNZWRpYVBsYXlsaXN0QWdlbnRQcm92aWRlciBjcmVhdGVNZWRpYVBsYXlsaXN0QWdlbnQoTWVkaWFQbGF5bGlzdEFnZW50IGluc3RhbmNlKSB7Ci0gICAgICAgIHJldHVybiBuZXcgTWVkaWFQbGF5bGlzdEFnZW50SW1wbChpbnN0YW5jZSk7Ci0gICAgfQotfQpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvTWVkaWFDb21wb25lbnRzL3NyYy9jb20vYW5kcm9pZC9tZWRpYS91cGRhdGUvQXBpSGVscGVyLmphdmEgYi9wYWNrYWdlcy9NZWRpYUNvbXBvbmVudHMvc3JjL2NvbS9hbmRyb2lkL21lZGlhL3VwZGF0ZS9BcGlIZWxwZXIuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYWQ4YmI0OC4uMDAwMDAwMAotLS0gYS9wYWNrYWdlcy9NZWRpYUNvbXBvbmVudHMvc3JjL2NvbS9hbmRyb2lkL21lZGlhL3VwZGF0ZS9BcGlIZWxwZXIuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDE0MiArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IDIwMTggVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAotICoKLSAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwotICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgotICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0gKgotICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLSAqCi0gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCi0gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAotICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCi0gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCi0gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KLSAqLwotCi1wYWNrYWdlIGNvbS5hbmRyb2lkLm1lZGlhLnVwZGF0ZTsKLQotaW1wb3J0IGFuZHJvaWQuYW5ub3RhdGlvbi5OdWxsYWJsZTsKLWltcG9ydCBhbmRyb2lkLmNvbnRlbnQuQ29udGV4dDsKLWltcG9ydCBhbmRyb2lkLmNvbnRlbnQuQ29udGV4dFdyYXBwZXI7Ci1pbXBvcnQgYW5kcm9pZC5jb250ZW50LnBtLkFwcGxpY2F0aW9uSW5mbzsKLWltcG9ydCBhbmRyb2lkLmNvbnRlbnQucG0uUGFja2FnZU1hbmFnZXIuTmFtZU5vdEZvdW5kRXhjZXB0aW9uOwotaW1wb3J0IGFuZHJvaWQuY29udGVudC5yZXMuUmVzb3VyY2VzOwotaW1wb3J0IGFuZHJvaWQuY29udGVudC5yZXMuUmVzb3VyY2VzLlRoZW1lOwotaW1wb3J0IGFuZHJvaWQuY29udGVudC5yZXMuWG1sUmVzb3VyY2VQYXJzZXI7Ci1pbXBvcnQgYW5kcm9pZC5zdXBwb3J0LmFubm90YXRpb24uR3VhcmRlZEJ5OwotaW1wb3J0IGFuZHJvaWQuc3VwcG9ydC52NC53aWRnZXQuU3BhY2U7Ci1pbXBvcnQgYW5kcm9pZC5zdXBwb3J0LnY3LndpZGdldC5CdXR0b25CYXJMYXlvdXQ7Ci1pbXBvcnQgYW5kcm9pZC51dGlsLkF0dHJpYnV0ZVNldDsKLWltcG9ydCBhbmRyb2lkLnZpZXcuQ29udGV4dFRoZW1lV3JhcHBlcjsKLWltcG9ydCBhbmRyb2lkLnZpZXcuTGF5b3V0SW5mbGF0ZXI7Ci1pbXBvcnQgYW5kcm9pZC52aWV3LlZpZXc7Ci1pbXBvcnQgYW5kcm9pZC52aWV3LlZpZXdHcm91cDsKLQotaW1wb3J0IGNvbS5hbmRyb2lkLnN1cHBvcnQubWVkaWFyb3V0ZXIuYXBwLk1lZGlhUm91dGVCdXR0b247Ci1pbXBvcnQgY29tLmFuZHJvaWQuc3VwcG9ydC5tZWRpYXJvdXRlci5hcHAuTWVkaWFSb3V0ZUV4cGFuZENvbGxhcHNlQnV0dG9uOwotaW1wb3J0IGNvbS5hbmRyb2lkLnN1cHBvcnQubWVkaWFyb3V0ZXIuYXBwLk1lZGlhUm91dGVWb2x1bWVTbGlkZXI7Ci1pbXBvcnQgY29tLmFuZHJvaWQuc3VwcG9ydC5tZWRpYXJvdXRlci5hcHAuT3ZlcmxheUxpc3RWaWV3OwotCi1wdWJsaWMgZmluYWwgY2xhc3MgQXBpSGVscGVyIHsKLSAgICBwcml2YXRlIHN0YXRpYyBBcHBsaWNhdGlvbkluZm8gc1VwZGF0YWJsZUluZm87Ci0KLSAgICBAR3VhcmRlZEJ5KCJ0aGlzIikKLSAgICBwcml2YXRlIHN0YXRpYyBUaGVtZSBzTGliVGhlbWU7Ci0KLSAgICBwcml2YXRlIEFwaUhlbHBlcigpIHsgfQotCi0gICAgc3RhdGljIHZvaWQgaW5pdGlhbGl6ZShBcHBsaWNhdGlvbkluZm8gdXBkYXRhYmxlSW5mbykgewotICAgICAgICBpZiAoc1VwZGF0YWJsZUluZm8gIT0gbnVsbCkgewotICAgICAgICAgICAgdGhyb3cgbmV3IElsbGVnYWxTdGF0ZUV4Y2VwdGlvbigiaW5pdGlhbGl6ZSBzaG91bGQgb25seSBiZSBjYWxsZWQgb25jZSIpOwotICAgICAgICB9Ci0KLSAgICAgICAgc1VwZGF0YWJsZUluZm8gPSB1cGRhdGFibGVJbmZvOwotICAgIH0KLQotICAgIHB1YmxpYyBzdGF0aWMgUmVzb3VyY2VzIGdldExpYlJlc291cmNlcyhDb250ZXh0IGNvbnRleHQpIHsKLSAgICAgICAgcmV0dXJuIGdldExpYlRoZW1lKGNvbnRleHQpLmdldFJlc291cmNlcygpOwotICAgIH0KLQotICAgIHB1YmxpYyBzdGF0aWMgVGhlbWUgZ2V0TGliVGhlbWUoQ29udGV4dCBjb250ZXh0KSB7Ci0gICAgICAgIGlmIChzTGliVGhlbWUgIT0gbnVsbCkgcmV0dXJuIHNMaWJUaGVtZTsKLQotICAgICAgICByZXR1cm4gZ2V0TGliVGhlbWVTeW5jaHJvbml6ZWQoY29udGV4dCk7Ci0gICAgfQotCi0gICAgcHVibGljIHN0YXRpYyBUaGVtZSBnZXRMaWJUaGVtZShDb250ZXh0IGNvbnRleHQsIGludCB0aGVtZUlkKSB7Ci0gICAgICAgIFRoZW1lIHRoZW1lID0gZ2V0TGliUmVzb3VyY2VzKGNvbnRleHQpLm5ld1RoZW1lKCk7Ci0gICAgICAgIHRoZW1lLmFwcGx5U3R5bGUodGhlbWVJZCwgdHJ1ZSk7Ci0gICAgICAgIHJldHVybiB0aGVtZTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgc3RhdGljIExheW91dEluZmxhdGVyIGdldExheW91dEluZmxhdGVyKENvbnRleHQgY29udGV4dCkgewotICAgICAgICByZXR1cm4gZ2V0TGF5b3V0SW5mbGF0ZXIoY29udGV4dCwgbnVsbCk7Ci0gICAgfQotCi0gICAgcHVibGljIHN0YXRpYyBMYXlvdXRJbmZsYXRlciBnZXRMYXlvdXRJbmZsYXRlcihDb250ZXh0IGNvbnRleHQsIFRoZW1lIHRoZW1lKSB7Ci0gICAgICAgIGlmICh0aGVtZSA9PSBudWxsKSB7Ci0gICAgICAgICAgICB0aGVtZSA9IGdldExpYlRoZW1lKGNvbnRleHQpOwotICAgICAgICB9Ci0KLSAgICAgICAgLy8gVE9ETyAoYi83Mjk3NTk3Nik6IEF2b2lkIHRvIHVzZSBDb250ZXh0VGhlbWVXcmFwcGVyIHdpdGggYXBwIGNvbnRleHQgYW5kIGxpYiB0aGVtZS4KLSAgICAgICAgTGF5b3V0SW5mbGF0ZXIgbGF5b3V0SW5mbGF0ZXIgPSBMYXlvdXRJbmZsYXRlci5mcm9tKGNvbnRleHQpLmNsb25lSW5Db250ZXh0KAotICAgICAgICAgICAgICAgIG5ldyBDb250ZXh0VGhlbWVXcmFwcGVyKGNvbnRleHQsIHRoZW1lKSk7Ci0gICAgICAgIGxheW91dEluZmxhdGVyLnNldEZhY3RvcnkyKG5ldyBMYXlvdXRJbmZsYXRlci5GYWN0b3J5MigpIHsKLSAgICAgICAgICAgIEBPdmVycmlkZQotICAgICAgICAgICAgcHVibGljIFZpZXcgb25DcmVhdGVWaWV3KAotICAgICAgICAgICAgICAgICAgICBWaWV3IHBhcmVudCwgU3RyaW5nIG5hbWUsIENvbnRleHQgY29udGV4dCwgQXR0cmlidXRlU2V0IGF0dHJzKSB7Ci0gICAgICAgICAgICAgICAgaWYgKE1lZGlhUm91dGVCdXR0b24uY2xhc3MuZ2V0Q2Fub25pY2FsTmFtZSgpLmVxdWFscyhuYW1lKSkgewotICAgICAgICAgICAgICAgICAgICByZXR1cm4gbmV3IE1lZGlhUm91dGVCdXR0b24oY29udGV4dCwgYXR0cnMpOwotICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoTWVkaWFSb3V0ZVZvbHVtZVNsaWRlci5jbGFzcy5nZXRDYW5vbmljYWxOYW1lKCkuZXF1YWxzKG5hbWUpKSB7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBuZXcgTWVkaWFSb3V0ZVZvbHVtZVNsaWRlcihjb250ZXh0LCBhdHRycyk7Ci0gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChNZWRpYVJvdXRlRXhwYW5kQ29sbGFwc2VCdXR0b24uY2xhc3MuZ2V0Q2Fub25pY2FsTmFtZSgpLmVxdWFscyhuYW1lKSkgewotICAgICAgICAgICAgICAgICAgICByZXR1cm4gbmV3IE1lZGlhUm91dGVFeHBhbmRDb2xsYXBzZUJ1dHRvbihjb250ZXh0LCBhdHRycyk7Ci0gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChPdmVybGF5TGlzdFZpZXcuY2xhc3MuZ2V0Q2Fub25pY2FsTmFtZSgpLmVxdWFscyhuYW1lKSkgewotICAgICAgICAgICAgICAgICAgICByZXR1cm4gbmV3IE92ZXJsYXlMaXN0Vmlldyhjb250ZXh0LCBhdHRycyk7Ci0gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChCdXR0b25CYXJMYXlvdXQuY2xhc3MuZ2V0Q2Fub25pY2FsTmFtZSgpLmVxdWFscyhuYW1lKSkgewotICAgICAgICAgICAgICAgICAgICByZXR1cm4gbmV3IEJ1dHRvbkJhckxheW91dChjb250ZXh0LCBhdHRycyk7Ci0gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChTcGFjZS5jbGFzcy5nZXRDYW5vbmljYWxOYW1lKCkuZXF1YWxzKG5hbWUpKSB7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBuZXcgU3BhY2UoY29udGV4dCwgYXR0cnMpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgICAgICBwdWJsaWMgVmlldyBvbkNyZWF0ZVZpZXcoU3RyaW5nIG5hbWUsIENvbnRleHQgY29udGV4dCwgQXR0cmlidXRlU2V0IGF0dHJzKSB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIG9uQ3JlYXRlVmlldyhudWxsLCBuYW1lLCBjb250ZXh0LCBhdHRycyk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0pOwotICAgICAgICByZXR1cm4gbGF5b3V0SW5mbGF0ZXI7Ci0gICAgfQotCi0gICAgcHVibGljIHN0YXRpYyBWaWV3IGluZmxhdGVMaWJMYXlvdXQoQ29udGV4dCBjb250ZXh0LCBpbnQgbGliUmVzSWQpIHsKLSAgICAgICAgcmV0dXJuIGluZmxhdGVMaWJMYXlvdXQoY29udGV4dCwgZ2V0TGliVGhlbWUoY29udGV4dCksIGxpYlJlc0lkLCBudWxsLCBmYWxzZSk7Ci0gICAgfQotCi0gICAgcHVibGljIHN0YXRpYyBWaWV3IGluZmxhdGVMaWJMYXlvdXQoQ29udGV4dCBjb250ZXh0LCBUaGVtZSB0aGVtZSwgaW50IGxpYlJlc0lkKSB7Ci0gICAgICAgIHJldHVybiBpbmZsYXRlTGliTGF5b3V0KGNvbnRleHQsIHRoZW1lLCBsaWJSZXNJZCwgbnVsbCwgZmFsc2UpOwotICAgIH0KLQotICAgIHB1YmxpYyBzdGF0aWMgVmlldyBpbmZsYXRlTGliTGF5b3V0KENvbnRleHQgY29udGV4dCwgVGhlbWUgdGhlbWUsIGludCBsaWJSZXNJZCwKLSAgICAgICAgICAgIEBOdWxsYWJsZSBWaWV3R3JvdXAgcm9vdCwgYm9vbGVhbiBhdHRhY2hUb1Jvb3QpIHsKLSAgICAgICAgdHJ5IChYbWxSZXNvdXJjZVBhcnNlciBwYXJzZXIgPSBnZXRMaWJSZXNvdXJjZXMoY29udGV4dCkuZ2V0TGF5b3V0KGxpYlJlc0lkKSkgewotICAgICAgICAgICAgcmV0dXJuIGdldExheW91dEluZmxhdGVyKGNvbnRleHQsIHRoZW1lKS5pbmZsYXRlKHBhcnNlciwgcm9vdCwgYXR0YWNoVG9Sb290KTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIHByaXZhdGUgc3RhdGljIHN5bmNocm9uaXplZCBUaGVtZSBnZXRMaWJUaGVtZVN5bmNocm9uaXplZChDb250ZXh0IGNvbnRleHQpIHsKLSAgICAgICAgaWYgKHNMaWJUaGVtZSAhPSBudWxsKSByZXR1cm4gc0xpYlRoZW1lOwotCi0gICAgICAgIGlmIChzVXBkYXRhYmxlSW5mbyA9PSBudWxsKSB7Ci0gICAgICAgICAgICB0aHJvdyBuZXcgSWxsZWdhbFN0YXRlRXhjZXB0aW9uKCJpbml0aWFsaXplIGhhc24ndCBiZWVuIGNhbGxlZCB5ZXQiKTsKLSAgICAgICAgfQotCi0gICAgICAgIHRyeSB7Ci0gICAgICAgICAgICByZXR1cm4gc0xpYlRoZW1lID0gY29udGV4dC5nZXRQYWNrYWdlTWFuYWdlcigpCi0gICAgICAgICAgICAgICAgICAgIC5nZXRSZXNvdXJjZXNGb3JBcHBsaWNhdGlvbihzVXBkYXRhYmxlSW5mbykubmV3VGhlbWUoKTsKLSAgICAgICAgfSBjYXRjaCAoTmFtZU5vdEZvdW5kRXhjZXB0aW9uIGUpIHsKLSAgICAgICAgICAgIHRocm93IG5ldyBSdW50aW1lRXhjZXB0aW9uKGUpOwotICAgICAgICB9Ci0gICAgfQotfQpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvTWVkaWFDb21wb25lbnRzL3NyYy9jb20vYW5kcm9pZC9zdXBwb3J0L21lZGlhcm91dGVyL2FwaTI0L21lZGlhL01lZGlhUm91dGVyQXBpMjQuamF2YSBiL3BhY2thZ2VzL01lZGlhQ29tcG9uZW50cy9zcmMvY29tL2FuZHJvaWQvc3VwcG9ydC9tZWRpYXJvdXRlci9hcGkyNC9tZWRpYS9NZWRpYVJvdXRlckFwaTI0LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDExNDZhZjYuLjAwMDAwMDAKLS0tIGEvcGFja2FnZXMvTWVkaWFDb21wb25lbnRzL3NyYy9jb20vYW5kcm9pZC9zdXBwb3J0L21lZGlhcm91dGVyL2FwaTI0L21lZGlhL01lZGlhUm91dGVyQXBpMjQuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDI2ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgMjAxOCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0Ci0gKgotICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7Ci0gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCi0gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLSAqCi0gKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotICoKLSAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKLSAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCi0gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KLSAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKLSAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgotICovCi0KLXBhY2thZ2UgY29tLmFuZHJvaWQuc3VwcG9ydC5tZWRpYXJvdXRlci5tZWRpYTsKLQotLy8gQEBSZXF1aXJlc0FwaSgyNCkKLWZpbmFsIGNsYXNzIE1lZGlhUm91dGVyQXBpMjQgewotICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgY2xhc3MgUm91dGVJbmZvIHsKLSAgICAgICAgcHVibGljIHN0YXRpYyBpbnQgZ2V0RGV2aWNlVHlwZShPYmplY3Qgcm91dGVPYmopIHsKLSAgICAgICAgICAgIHJldHVybiAoKGFuZHJvaWQubWVkaWEuTWVkaWFSb3V0ZXIuUm91dGVJbmZvKXJvdXRlT2JqKS5nZXREZXZpY2VUeXBlKCk7Ci0gICAgICAgIH0KLSAgICB9Ci19CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9NZWRpYUNvbXBvbmVudHMvc3JjL2NvbS9hbmRyb2lkL3N1cHBvcnQvbWVkaWFyb3V0ZXIvYXBwL01lZGlhUm91dGVBY3Rpb25Qcm92aWRlci5qYXZhIGIvcGFja2FnZXMvTWVkaWFDb21wb25lbnRzL3NyYy9jb20vYW5kcm9pZC9zdXBwb3J0L21lZGlhcm91dGVyL2FwcC9NZWRpYVJvdXRlQWN0aW9uUHJvdmlkZXIuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDNlOGQ0Ny4uMDAwMDAwMAotLS0gYS9wYWNrYWdlcy9NZWRpYUNvbXBvbmVudHMvc3JjL2NvbS9hbmRyb2lkL3N1cHBvcnQvbWVkaWFyb3V0ZXIvYXBwL01lZGlhUm91dGVBY3Rpb25Qcm92aWRlci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMzMzICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgMjAxOCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0Ci0gKgotICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7Ci0gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCi0gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLSAqCi0gKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotICoKLSAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKLSAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCi0gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KLSAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKLSAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgotICovCi0KLXBhY2thZ2UgY29tLmFuZHJvaWQuc3VwcG9ydC5tZWRpYXJvdXRlci5hcHA7Ci0KLWltcG9ydCBhbmRyb2lkLmFubm90YXRpb24uTm9uTnVsbDsKLWltcG9ydCBhbmRyb2lkLmFubm90YXRpb24uTnVsbGFibGU7Ci1pbXBvcnQgYW5kcm9pZC5jb250ZW50LkNvbnRleHQ7Ci1pbXBvcnQgYW5kcm9pZC5zdXBwb3J0LnY0LnZpZXcuQWN0aW9uUHJvdmlkZXI7Ci1pbXBvcnQgYW5kcm9pZC51dGlsLkxvZzsKLWltcG9ydCBhbmRyb2lkLnZpZXcuVmlldzsKLWltcG9ydCBhbmRyb2lkLnZpZXcuVmlld0dyb3VwOwotCi1pbXBvcnQgY29tLmFuZHJvaWQuc3VwcG9ydC5tZWRpYXJvdXRlci5tZWRpYS5NZWRpYVJvdXRlU2VsZWN0b3I7Ci1pbXBvcnQgY29tLmFuZHJvaWQuc3VwcG9ydC5tZWRpYXJvdXRlci5tZWRpYS5NZWRpYVJvdXRlcjsKLQotaW1wb3J0IGphdmEubGFuZy5yZWYuV2Vha1JlZmVyZW5jZTsKLQotLyoqCi0gKiBUaGUgbWVkaWEgcm91dGUgYWN0aW9uIHByb3ZpZGVyIGRpc3BsYXlzIGEge0BsaW5rIE1lZGlhUm91dGVCdXR0b24gbWVkaWEgcm91dGUgYnV0dG9ufQotICogaW4gdGhlIGFwcGxpY2F0aW9uJ3Mge0BsaW5rIEFjdGlvbkJhcn0gdG8gYWxsb3cgdGhlIHVzZXIgdG8gc2VsZWN0IHJvdXRlcyBhbmQKLSAqIHRvIGNvbnRyb2wgdGhlIGN1cnJlbnRseSBzZWxlY3RlZCByb3V0ZS4KLSAqIDxwPgotICogVGhlIGFwcGxpY2F0aW9uIG11c3Qgc3BlY2lmeSB0aGUga2luZHMgb2Ygcm91dGVzIHRoYXQgdGhlIHVzZXIgc2hvdWxkIGJlIGFsbG93ZWQKLSAqIHRvIHNlbGVjdCBieSBzcGVjaWZ5aW5nIGEge0BsaW5rIE1lZGlhUm91dGVTZWxlY3RvciBzZWxlY3Rvcn0gd2l0aCB0aGUKLSAqIHtAbGluayAjc2V0Um91dGVTZWxlY3Rvcn0gbWV0aG9kLgotICogPC9wPjxwPgotICogUmVmZXIgdG8ge0BsaW5rIE1lZGlhUm91dGVCdXR0b259IGZvciBhIGRlc2NyaXB0aW9uIG9mIHRoZSBidXR0b24gdGhhdCB3aWxsCi0gKiBhcHBlYXIgaW4gdGhlIGFjdGlvbiBiYXIgbWVudS4gIE5vdGUgdGhhdCBpbnN0ZWFkIG9mIGRpc2FibGluZyB0aGUgYnV0dG9uCi0gKiB3aGVuIG5vIHJvdXRlcyBhcmUgYXZhaWxhYmxlLCB0aGUgYWN0aW9uIHByb3ZpZGVyIHdpbGwgaW5zdGVhZCBtYWtlIHRoZQotICogbWVudSBpdGVtIGludmlzaWJsZS4gIEluIHRoaXMgd2F5LCB0aGUgYnV0dG9uIHdpbGwgb25seSBiZSB2aXNpYmxlIHdoZW4gaXQKLSAqIGlzIHBvc3NpYmxlIGZvciB0aGUgdXNlciB0byBkaXNjb3ZlciBhbmQgc2VsZWN0IGEgbWF0Y2hpbmcgcm91dGUuCi0gKiA8L3A+Ci0gKgotICogPGgzPlByZXJlcXVpc2l0ZXM8L2gzPgotICogPHA+Ci0gKiBUbyB1c2UgdGhlIG1lZGlhIHJvdXRlIGFjdGlvbiBwcm92aWRlciwgdGhlIGFjdGl2aXR5IG11c3QgYmUgYSBzdWJjbGFzcyBvZgotICoge0BsaW5rIEFwcENvbXBhdEFjdGl2aXR5fSBmcm9tIHRoZSA8Y29kZT5hbmRyb2lkLnN1cHBvcnQudjcuYXBwY29tcGF0PC9jb2RlPgotICogc3VwcG9ydCBsaWJyYXJ5LiAgUmVmZXIgdG8gc3VwcG9ydCBsaWJyYXJ5IGRvY3VtZW50YXRpb24gZm9yIGRldGFpbHMuCi0gKiA8L3A+Ci0gKgotICogPGgzPkV4YW1wbGU8L2gzPgotICogPHA+Ci0gKiA8L3A+PHA+Ci0gKiBUaGUgYXBwbGljYXRpb24gc2hvdWxkIGRlZmluZSBhIG1lbnUgcmVzb3VyY2UgdG8gaW5jbHVkZSB0aGUgcHJvdmlkZXIgaW4gdGhlCi0gKiBhY3Rpb24gYmFyIG9wdGlvbnMgbWVudS4gIE5vdGUgdGhhdCB0aGUgc3VwcG9ydCBsaWJyYXJ5IGFjdGlvbiBiYXIgdXNlcyBhdHRyaWJ1dGVzCi0gKiB0aGF0IGFyZSBkZWZpbmVkIGluIHRoZSBhcHBsaWNhdGlvbidzIHJlc291cmNlIG5hbWVzcGFjZSByYXRoZXIgdGhhbiB0aGUgZnJhbWV3b3JrJ3MKLSAqIHJlc291cmNlIG5hbWVzcGFjZSB0byBjb25maWd1cmUgZWFjaCBpdGVtLgotICogPC9wPjxwcmU+Ci0gKiAmbHQ7bWVudSB4bWxuczphbmRyb2lkPSJodHRwOi8vc2NoZW1hcy5hbmRyb2lkLmNvbS9hcGsvcmVzL2FuZHJvaWQiCi0gKiAgICAgICAgIHhtbG5zOmFwcD0iaHR0cDovL3NjaGVtYXMuYW5kcm9pZC5jb20vYXBrL3Jlcy1hdXRvIj4KLSAqICAgICAmbHQ7aXRlbSBhbmRyb2lkOmlkPSJAK2lkL21lZGlhX3JvdXRlX21lbnVfaXRlbSIKLSAqICAgICAgICAgYW5kcm9pZDp0aXRsZT0iQHN0cmluZy9tZWRpYV9yb3V0ZV9tZW51X3RpdGxlIgotICogICAgICAgICBhcHA6c2hvd0FzQWN0aW9uPSJhbHdheXMiCi0gKiAgICAgICAgIGFwcDphY3Rpb25Qcm92aWRlckNsYXNzPSJhbmRyb2lkLnN1cHBvcnQudjcuYXBwLk1lZGlhUm91dGVBY3Rpb25Qcm92aWRlciIvPgotICogJmx0Oy9tZW51PgotICogPC9wcmU+PHA+Ci0gKiBUaGVuIGNvbmZpZ3VyZSB0aGUgbWVudSBhbmQgc2V0IHRoZSByb3V0ZSBzZWxlY3RvciBmb3IgdGhlIGNob29zZXIuCi0gKiA8L3A+PHByZT4KLSAqIHB1YmxpYyBjbGFzcyBNeUFjdGl2aXR5IGV4dGVuZHMgQXBwQ29tcGF0QWN0aXZpdHkgewotICogICAgIHByaXZhdGUgTWVkaWFSb3V0ZXIgbVJvdXRlcjsKLSAqICAgICBwcml2YXRlIE1lZGlhUm91dGVyLkNhbGxiYWNrIG1DYWxsYmFjazsKLSAqICAgICBwcml2YXRlIE1lZGlhUm91dGVTZWxlY3RvciBtU2VsZWN0b3I7Ci0gKgotICogICAgIHByb3RlY3RlZCB2b2lkIG9uQ3JlYXRlKEJ1bmRsZSBzYXZlZEluc3RhbmNlU3RhdGUpIHsKLSAqICAgICAgICAgc3VwZXIub25DcmVhdGUoc2F2ZWRJbnN0YW5jZVN0YXRlKTsKLSAqCi0gKiAgICAgICAgIG1Sb3V0ZXIgPSBNZWRpYXJvdXRlci5nZXRJbnN0YW5jZSh0aGlzKTsKLSAqICAgICAgICAgbVNlbGVjdG9yID0gbmV3IE1lZGlhUm91dGVTZWxlY3Rvci5CdWlsZGVyKCkKLSAqICAgICAgICAgICAgICAgICAuYWRkQ29udHJvbENhdGVnb3J5KE1lZGlhQ29udHJvbEludGVudC5DQVRFR09SWV9MSVZFX0FVRElPKQotICogICAgICAgICAgICAgICAgIC5hZGRDb250cm9sQ2F0ZWdvcnkoTWVkaWFDb250cm9sSW50ZW50LkNBVEVHT1JZX1JFTU9URV9QTEFZQkFDSykKLSAqICAgICAgICAgICAgICAgICAuYnVpbGQoKTsKLSAqICAgICAgICAgbUNhbGxiYWNrID0gbmV3IE15Q2FsbGJhY2soKTsKLSAqICAgICB9Ci0gKgotICogICAgIC8vIEFkZCB0aGUgY2FsbGJhY2sgb24gc3RhcnQgdG8gdGVsbCB0aGUgbWVkaWEgcm91dGVyIHdoYXQga2luZHMgb2Ygcm91dGVzCi0gKiAgICAgLy8gdGhlIGFwcGxpY2F0aW9uIGlzIGludGVyZXN0ZWQgaW4gc28gdGhhdCBpdCBjYW4gdHJ5IHRvIGRpc2NvdmVyIHN1aXRhYmxlIG9uZXMuCi0gKiAgICAgcHVibGljIHZvaWQgb25TdGFydCgpIHsKLSAqICAgICAgICAgc3VwZXIub25TdGFydCgpOwotICoKLSAqICAgICAgICAgbWVkaWFSb3V0ZXIuYWRkQ2FsbGJhY2sobVNlbGVjdG9yLCBtQ2FsbGJhY2ssCi0gKiAgICAgICAgICAgICAgICAgTWVkaWFSb3V0ZXIuQ0FMTEJBQ0tfRkxBR19SRVFVRVNUX0RJU0NPVkVSWSk7Ci0gKgotICogICAgICAgICBNZWRpYVJvdXRlci5Sb3V0ZUluZm8gcm91dGUgPSBtZWRpYVJvdXRlci51cGRhdGVTZWxlY3RlZFJvdXRlKG1TZWxlY3Rvcik7Ci0gKiAgICAgICAgIC8vIGRvIHNvbWV0aGluZyB3aXRoIHRoZSByb3V0ZS4uLgotICogICAgIH0KLSAqCi0gKiAgICAgLy8gUmVtb3ZlIHRoZSBzZWxlY3RvciBvbiBzdG9wIHRvIHRlbGwgdGhlIG1lZGlhIHJvdXRlciB0aGF0IGl0IG5vIGxvbmdlcgotICogICAgIC8vIG5lZWRzIHRvIGludmVzdCBlZmZvcnQgdHJ5aW5nIHRvIGRpc2NvdmVyIHJvdXRlcyBvZiB0aGVzZSBraW5kcyBmb3Igbm93LgotICogICAgIHB1YmxpYyB2b2lkIG9uU3RvcCgpIHsKLSAqICAgICAgICAgc3VwZXIub25TdG9wKCk7Ci0gKgotICogICAgICAgICBtZWRpYVJvdXRlci5yZW1vdmVDYWxsYmFjayhtQ2FsbGJhY2spOwotICogICAgIH0KLSAqCi0gKiAgICAgcHVibGljIGJvb2xlYW4gb25DcmVhdGVPcHRpb25zTWVudShNZW51IG1lbnUpIHsKLSAqICAgICAgICAgc3VwZXIub25DcmVhdGVPcHRpb25zTWVudShtZW51KTsKLSAqCi0gKiAgICAgICAgIGdldE1lbnVJbmZsYXRlcigpLmluZmxhdGUoUi5tZW51LnNhbXBsZV9tZWRpYV9yb3V0ZXJfbWVudSwgbWVudSk7Ci0gKgotICogICAgICAgICBNZW51SXRlbSBtZWRpYVJvdXRlTWVudUl0ZW0gPSBtZW51LmZpbmRJdGVtKFIuaWQubWVkaWFfcm91dGVfbWVudV9pdGVtKTsKLSAqICAgICAgICAgTWVkaWFSb3V0ZUFjdGlvblByb3ZpZGVyIG1lZGlhUm91dGVBY3Rpb25Qcm92aWRlciA9Ci0gKiAgICAgICAgICAgICAgICAgKE1lZGlhUm91dGVBY3Rpb25Qcm92aWRlcilNZW51SXRlbUNvbXBhdC5nZXRBY3Rpb25Qcm92aWRlcihtZWRpYVJvdXRlTWVudUl0ZW0pOwotICogICAgICAgICBtZWRpYVJvdXRlQWN0aW9uUHJvdmlkZXIuc2V0Um91dGVTZWxlY3RvcihtU2VsZWN0b3IpOwotICogICAgICAgICByZXR1cm4gdHJ1ZTsKLSAqICAgICB9Ci0gKgotICogICAgIHByaXZhdGUgZmluYWwgY2xhc3MgTXlDYWxsYmFjayBleHRlbmRzIE1lZGlhUm91dGVyLkNhbGxiYWNrIHsKLSAqICAgICAgICAgLy8gSW1wbGVtZW50IGNhbGxiYWNrIG1ldGhvZHMgYXMgbmVlZGVkLgotICogICAgIH0KLSAqIH0KLSAqIDwvcHJlPgotICoKLSAqIEBzZWUgI3NldFJvdXRlU2VsZWN0b3IKLSAqLwotcHVibGljIGNsYXNzIE1lZGlhUm91dGVBY3Rpb25Qcm92aWRlciBleHRlbmRzIEFjdGlvblByb3ZpZGVyIHsKLSAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgVEFHID0gIk1lZGlhUm91dGVBY3Rpb25Qcm92aWRlciI7Ci0KLSAgICBwcml2YXRlIGZpbmFsIE1lZGlhUm91dGVyIG1Sb3V0ZXI7Ci0gICAgcHJpdmF0ZSBmaW5hbCBNZWRpYVJvdXRlckNhbGxiYWNrIG1DYWxsYmFjazsKLQotICAgIHByaXZhdGUgTWVkaWFSb3V0ZVNlbGVjdG9yIG1TZWxlY3RvciA9IE1lZGlhUm91dGVTZWxlY3Rvci5FTVBUWTsKLSAgICBwcml2YXRlIE1lZGlhUm91dGVEaWFsb2dGYWN0b3J5IG1EaWFsb2dGYWN0b3J5ID0gTWVkaWFSb3V0ZURpYWxvZ0ZhY3RvcnkuZ2V0RGVmYXVsdCgpOwotICAgIHByaXZhdGUgTWVkaWFSb3V0ZUJ1dHRvbiBtQnV0dG9uOwotCi0gICAgLyoqCi0gICAgICogQ3JlYXRlcyB0aGUgYWN0aW9uIHByb3ZpZGVyLgotICAgICAqCi0gICAgICogQHBhcmFtIGNvbnRleHQgVGhlIGNvbnRleHQuCi0gICAgICovCi0gICAgcHVibGljIE1lZGlhUm91dGVBY3Rpb25Qcm92aWRlcihDb250ZXh0IGNvbnRleHQpIHsKLSAgICAgICAgc3VwZXIoY29udGV4dCk7Ci0KLSAgICAgICAgbVJvdXRlciA9IE1lZGlhUm91dGVyLmdldEluc3RhbmNlKGNvbnRleHQpOwotICAgICAgICBtQ2FsbGJhY2sgPSBuZXcgTWVkaWFSb3V0ZXJDYWxsYmFjayh0aGlzKTsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBHZXRzIHRoZSBtZWRpYSByb3V0ZSBzZWxlY3RvciBmb3IgZmlsdGVyaW5nIHRoZSByb3V0ZXMgdGhhdCB0aGUgdXNlciBjYW4KLSAgICAgKiBzZWxlY3QgdXNpbmcgdGhlIG1lZGlhIHJvdXRlIGNob29zZXIgZGlhbG9nLgotICAgICAqCi0gICAgICogQHJldHVybiBUaGUgc2VsZWN0b3IsIG5ldmVyIG51bGwuCi0gICAgICovCi0gICAgQE5vbk51bGwKLSAgICBwdWJsaWMgTWVkaWFSb3V0ZVNlbGVjdG9yIGdldFJvdXRlU2VsZWN0b3IoKSB7Ci0gICAgICAgIHJldHVybiBtU2VsZWN0b3I7Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogU2V0cyB0aGUgbWVkaWEgcm91dGUgc2VsZWN0b3IgZm9yIGZpbHRlcmluZyB0aGUgcm91dGVzIHRoYXQgdGhlIHVzZXIgY2FuCi0gICAgICogc2VsZWN0IHVzaW5nIHRoZSBtZWRpYSByb3V0ZSBjaG9vc2VyIGRpYWxvZy4KLSAgICAgKgotICAgICAqIEBwYXJhbSBzZWxlY3RvciBUaGUgc2VsZWN0b3IsIG11c3Qgbm90IGJlIG51bGwuCi0gICAgICovCi0gICAgcHVibGljIHZvaWQgc2V0Um91dGVTZWxlY3RvcihATm9uTnVsbCBNZWRpYVJvdXRlU2VsZWN0b3Igc2VsZWN0b3IpIHsKLSAgICAgICAgaWYgKHNlbGVjdG9yID09IG51bGwpIHsKLSAgICAgICAgICAgIHRocm93IG5ldyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oInNlbGVjdG9yIG11c3Qgbm90IGJlIG51bGwiKTsKLSAgICAgICAgfQotCi0gICAgICAgIGlmICghbVNlbGVjdG9yLmVxdWFscyhzZWxlY3RvcikpIHsKLSAgICAgICAgICAgIC8vIEZJWE1FOiBXZSBjdXJyZW50bHkgaGF2ZSBubyB3YXkgb2Yga25vd2luZyB3aGV0aGVyIHRoZSBhY3Rpb24gcHJvdmlkZXIKLSAgICAgICAgICAgIC8vIGlzIHN0aWxsIG5lZWRlZCBieSB0aGUgVUkuICBVbmZvcnR1bmF0ZWx5IHRoaXMgbWVhbnMgdGhlIGFjdGlvbiBwcm92aWRlcgotICAgICAgICAgICAgLy8gbWF5IGxlYWsgY2FsbGJhY2tzIHVudGlsIGdhcmJhZ2UgY29sbGVjdGlvbiBvY2N1cnMuICBUaGlzIG1heSByZXN1bHQgaW4KLSAgICAgICAgICAgIC8vIG1lZGlhIHJvdXRlIHByb3ZpZGVycyBkb2luZyBtb3JlIHdvcmsgdGhhbiBuZWNlc3NhcnkgaW4gdGhlIHNob3J0IHRlcm0KLSAgICAgICAgICAgIC8vIHdoaWxlIHRyeWluZyB0byBkaXNjb3ZlciByb3V0ZXMgdGhhdCBhcmUgbm8gbG9uZ2VyIG9mIGludGVyZXN0IHRvIHRoZQotICAgICAgICAgICAgLy8gYXBwbGljYXRpb24uICBUbyBzb2x2ZSB0aGlzIHByb2JsZW0sIHRoZSBhY3Rpb24gcHJvdmlkZXIgd2lsbCBuZWVkIHNvbWUKLSAgICAgICAgICAgIC8vIGluZGljYXRpb24gZnJvbSB0aGUgZnJhbWV3b3JrIHRoYXQgaXQgaXMgYmVpbmcgZGVzdHJveWVkLgotICAgICAgICAgICAgaWYgKCFtU2VsZWN0b3IuaXNFbXB0eSgpKSB7Ci0gICAgICAgICAgICAgICAgbVJvdXRlci5yZW1vdmVDYWxsYmFjayhtQ2FsbGJhY2spOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYgKCFzZWxlY3Rvci5pc0VtcHR5KCkpIHsKLSAgICAgICAgICAgICAgICBtUm91dGVyLmFkZENhbGxiYWNrKHNlbGVjdG9yLCBtQ2FsbGJhY2spOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgbVNlbGVjdG9yID0gc2VsZWN0b3I7Ci0gICAgICAgICAgICByZWZyZXNoUm91dGUoKTsKLQotICAgICAgICAgICAgaWYgKG1CdXR0b24gIT0gbnVsbCkgewotICAgICAgICAgICAgICAgIG1CdXR0b24uc2V0Um91dGVTZWxlY3RvcihzZWxlY3Rvcik7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBHZXRzIHRoZSBtZWRpYSByb3V0ZSBkaWFsb2cgZmFjdG9yeSB0byB1c2Ugd2hlbiBzaG93aW5nIHRoZSByb3V0ZSBjaG9vc2VyCi0gICAgICogb3IgY29udHJvbGxlciBkaWFsb2cuCi0gICAgICoKLSAgICAgKiBAcmV0dXJuIFRoZSBkaWFsb2cgZmFjdG9yeSwgbmV2ZXIgbnVsbC4KLSAgICAgKi8KLSAgICBATm9uTnVsbAotICAgIHB1YmxpYyBNZWRpYVJvdXRlRGlhbG9nRmFjdG9yeSBnZXREaWFsb2dGYWN0b3J5KCkgewotICAgICAgICByZXR1cm4gbURpYWxvZ0ZhY3Rvcnk7Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogU2V0cyB0aGUgbWVkaWEgcm91dGUgZGlhbG9nIGZhY3RvcnkgdG8gdXNlIHdoZW4gc2hvd2luZyB0aGUgcm91dGUgY2hvb3NlcgotICAgICAqIG9yIGNvbnRyb2xsZXIgZGlhbG9nLgotICAgICAqCi0gICAgICogQHBhcmFtIGZhY3RvcnkgVGhlIGRpYWxvZyBmYWN0b3J5LCBtdXN0IG5vdCBiZSBudWxsLgotICAgICAqLwotICAgIHB1YmxpYyB2b2lkIHNldERpYWxvZ0ZhY3RvcnkoQE5vbk51bGwgTWVkaWFSb3V0ZURpYWxvZ0ZhY3RvcnkgZmFjdG9yeSkgewotICAgICAgICBpZiAoZmFjdG9yeSA9PSBudWxsKSB7Ci0gICAgICAgICAgICB0aHJvdyBuZXcgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKCJmYWN0b3J5IG11c3Qgbm90IGJlIG51bGwiKTsKLSAgICAgICAgfQotCi0gICAgICAgIGlmIChtRGlhbG9nRmFjdG9yeSAhPSBmYWN0b3J5KSB7Ci0gICAgICAgICAgICBtRGlhbG9nRmFjdG9yeSA9IGZhY3Rvcnk7Ci0KLSAgICAgICAgICAgIGlmIChtQnV0dG9uICE9IG51bGwpIHsKLSAgICAgICAgICAgICAgICBtQnV0dG9uLnNldERpYWxvZ0ZhY3RvcnkoZmFjdG9yeSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBHZXRzIHRoZSBhc3NvY2lhdGVkIG1lZGlhIHJvdXRlIGJ1dHRvbiwgb3IgbnVsbCBpZiBpdCBoYXMgbm90IHlldCBiZWVuIGNyZWF0ZWQuCi0gICAgICovCi0gICAgQE51bGxhYmxlCi0gICAgcHVibGljIE1lZGlhUm91dGVCdXR0b24gZ2V0TWVkaWFSb3V0ZUJ1dHRvbigpIHsKLSAgICAgICAgcmV0dXJuIG1CdXR0b247Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogQ2FsbGVkIHdoZW4gdGhlIG1lZGlhIHJvdXRlIGJ1dHRvbiBpcyBiZWluZyBjcmVhdGVkLgotICAgICAqIDxwPgotICAgICAqIFN1YmNsYXNzZXMgbWF5IG92ZXJyaWRlIHRoaXMgbWV0aG9kIHRvIGN1c3RvbWl6ZSB0aGUgYnV0dG9uLgotICAgICAqIDwvcD4KLSAgICAgKi8KLSAgICBwdWJsaWMgTWVkaWFSb3V0ZUJ1dHRvbiBvbkNyZWF0ZU1lZGlhUm91dGVCdXR0b24oKSB7Ci0gICAgICAgIHJldHVybiBuZXcgTWVkaWFSb3V0ZUJ1dHRvbihnZXRDb250ZXh0KCkpOwotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIEBTdXBwcmVzc1dhcm5pbmdzKCJkZXByZWNhdGlvbiIpCi0gICAgcHVibGljIFZpZXcgb25DcmVhdGVBY3Rpb25WaWV3KCkgewotICAgICAgICBpZiAobUJ1dHRvbiAhPSBudWxsKSB7Ci0gICAgICAgICAgICBMb2cuZShUQUcsICJvbkNyZWF0ZUFjdGlvblZpZXc6IHRoaXMgQWN0aW9uUHJvdmlkZXIgaXMgYWxyZWFkeSBhc3NvY2lhdGVkICIgKwotICAgICAgICAgICAgICAgICAgICAid2l0aCBhIG1lbnUgaXRlbS4gRG9uJ3QgcmV1c2UgTWVkaWFSb3V0ZUFjdGlvblByb3ZpZGVyIGluc3RhbmNlcyEgIiArCi0gICAgICAgICAgICAgICAgICAgICJBYmFuZG9uaW5nIHRoZSBvbGQgbWVudSBpdGVtLi4uIik7Ci0gICAgICAgIH0KLQotICAgICAgICBtQnV0dG9uID0gb25DcmVhdGVNZWRpYVJvdXRlQnV0dG9uKCk7Ci0gICAgICAgIG1CdXR0b24uc2V0Q2hlYXRTaGVldEVuYWJsZWQodHJ1ZSk7Ci0gICAgICAgIG1CdXR0b24uc2V0Um91dGVTZWxlY3RvcihtU2VsZWN0b3IpOwotICAgICAgICBtQnV0dG9uLnNldERpYWxvZ0ZhY3RvcnkobURpYWxvZ0ZhY3RvcnkpOwotICAgICAgICBtQnV0dG9uLnNldExheW91dFBhcmFtcyhuZXcgVmlld0dyb3VwLkxheW91dFBhcmFtcygKLSAgICAgICAgICAgICAgICBWaWV3R3JvdXAuTGF5b3V0UGFyYW1zLldSQVBfQ09OVEVOVCwKLSAgICAgICAgICAgICAgICBWaWV3R3JvdXAuTGF5b3V0UGFyYW1zLk1BVENIX1BBUkVOVCkpOwotICAgICAgICByZXR1cm4gbUJ1dHRvbjsKLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgYm9vbGVhbiBvblBlcmZvcm1EZWZhdWx0QWN0aW9uKCkgewotICAgICAgICBpZiAobUJ1dHRvbiAhPSBudWxsKSB7Ci0gICAgICAgICAgICByZXR1cm4gbUJ1dHRvbi5zaG93RGlhbG9nKCk7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyBib29sZWFuIG92ZXJyaWRlc0l0ZW1WaXNpYmlsaXR5KCkgewotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgYm9vbGVhbiBpc1Zpc2libGUoKSB7Ci0gICAgICAgIHJldHVybiBtUm91dGVyLmlzUm91dGVBdmFpbGFibGUobVNlbGVjdG9yLAotICAgICAgICAgICAgICAgIE1lZGlhUm91dGVyLkFWQUlMQUJJTElUWV9GTEFHX0lHTk9SRV9ERUZBVUxUX1JPVVRFKTsKLSAgICB9Ci0KLSAgICB2b2lkIHJlZnJlc2hSb3V0ZSgpIHsKLSAgICAgICAgcmVmcmVzaFZpc2liaWxpdHkoKTsKLSAgICB9Ci0KLSAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBjbGFzcyBNZWRpYVJvdXRlckNhbGxiYWNrIGV4dGVuZHMgTWVkaWFSb3V0ZXIuQ2FsbGJhY2sgewotICAgICAgICBwcml2YXRlIGZpbmFsIFdlYWtSZWZlcmVuY2U8TWVkaWFSb3V0ZUFjdGlvblByb3ZpZGVyPiBtUHJvdmlkZXJXZWFrOwotCi0gICAgICAgIHB1YmxpYyBNZWRpYVJvdXRlckNhbGxiYWNrKE1lZGlhUm91dGVBY3Rpb25Qcm92aWRlciBwcm92aWRlcikgewotICAgICAgICAgICAgbVByb3ZpZGVyV2VhayA9IG5ldyBXZWFrUmVmZXJlbmNlPE1lZGlhUm91dGVBY3Rpb25Qcm92aWRlcj4ocHJvdmlkZXIpOwotICAgICAgICB9Ci0KLSAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgIHB1YmxpYyB2b2lkIG9uUm91dGVBZGRlZChNZWRpYVJvdXRlciByb3V0ZXIsIE1lZGlhUm91dGVyLlJvdXRlSW5mbyBpbmZvKSB7Ci0gICAgICAgICAgICByZWZyZXNoUm91dGUocm91dGVyKTsKLSAgICAgICAgfQotCi0gICAgICAgIEBPdmVycmlkZQotICAgICAgICBwdWJsaWMgdm9pZCBvblJvdXRlUmVtb3ZlZChNZWRpYVJvdXRlciByb3V0ZXIsIE1lZGlhUm91dGVyLlJvdXRlSW5mbyBpbmZvKSB7Ci0gICAgICAgICAgICByZWZyZXNoUm91dGUocm91dGVyKTsKLSAgICAgICAgfQotCi0gICAgICAgIEBPdmVycmlkZQotICAgICAgICBwdWJsaWMgdm9pZCBvblJvdXRlQ2hhbmdlZChNZWRpYVJvdXRlciByb3V0ZXIsIE1lZGlhUm91dGVyLlJvdXRlSW5mbyBpbmZvKSB7Ci0gICAgICAgICAgICByZWZyZXNoUm91dGUocm91dGVyKTsKLSAgICAgICAgfQotCi0gICAgICAgIEBPdmVycmlkZQotICAgICAgICBwdWJsaWMgdm9pZCBvblByb3ZpZGVyQWRkZWQoTWVkaWFSb3V0ZXIgcm91dGVyLCBNZWRpYVJvdXRlci5Qcm92aWRlckluZm8gcHJvdmlkZXIpIHsKLSAgICAgICAgICAgIHJlZnJlc2hSb3V0ZShyb3V0ZXIpOwotICAgICAgICB9Ci0KLSAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgIHB1YmxpYyB2b2lkIG9uUHJvdmlkZXJSZW1vdmVkKE1lZGlhUm91dGVyIHJvdXRlciwgTWVkaWFSb3V0ZXIuUHJvdmlkZXJJbmZvIHByb3ZpZGVyKSB7Ci0gICAgICAgICAgICByZWZyZXNoUm91dGUocm91dGVyKTsKLSAgICAgICAgfQotCi0gICAgICAgIEBPdmVycmlkZQotICAgICAgICBwdWJsaWMgdm9pZCBvblByb3ZpZGVyQ2hhbmdlZChNZWRpYVJvdXRlciByb3V0ZXIsIE1lZGlhUm91dGVyLlByb3ZpZGVySW5mbyBwcm92aWRlcikgewotICAgICAgICAgICAgcmVmcmVzaFJvdXRlKHJvdXRlcik7Ci0gICAgICAgIH0KLQotICAgICAgICBwcml2YXRlIHZvaWQgcmVmcmVzaFJvdXRlKE1lZGlhUm91dGVyIHJvdXRlcikgewotICAgICAgICAgICAgTWVkaWFSb3V0ZUFjdGlvblByb3ZpZGVyIHByb3ZpZGVyID0gbVByb3ZpZGVyV2Vhay5nZXQoKTsKLSAgICAgICAgICAgIGlmIChwcm92aWRlciAhPSBudWxsKSB7Ci0gICAgICAgICAgICAgICAgcHJvdmlkZXIucmVmcmVzaFJvdXRlKCk7Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIHJvdXRlci5yZW1vdmVDYWxsYmFjayh0aGlzKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLX0KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL01lZGlhQ29tcG9uZW50cy9zcmMvY29tL2FuZHJvaWQvc3VwcG9ydC9tZWRpYXJvdXRlci9hcHAvTWVkaWFSb3V0ZUJ1dHRvbi5qYXZhIGIvcGFja2FnZXMvTWVkaWFDb21wb25lbnRzL3NyYy9jb20vYW5kcm9pZC9zdXBwb3J0L21lZGlhcm91dGVyL2FwcC9NZWRpYVJvdXRlQnV0dG9uLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGZkZThhNjMuLjAwMDAwMDAKLS0tIGEvcGFja2FnZXMvTWVkaWFDb21wb25lbnRzL3NyYy9jb20vYW5kcm9pZC9zdXBwb3J0L21lZGlhcm91dGVyL2FwcC9NZWRpYVJvdXRlQnV0dG9uLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw2MjkgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAyMDE4IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKLSAqCi0gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKLSAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KLSAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotICoKLSAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0gKgotICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQotICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKLSAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgotICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAotICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCi0gKi8KLQotcGFja2FnZSBjb20uYW5kcm9pZC5zdXBwb3J0Lm1lZGlhcm91dGVyLmFwcDsKLQotaW1wb3J0IGFuZHJvaWQuYW5ub3RhdGlvbi5Ob25OdWxsOwotaW1wb3J0IGFuZHJvaWQuYXBwLkFjdGl2aXR5OwotaW1wb3J0IGFuZHJvaWQuYXBwLkZyYWdtZW50TWFuYWdlcjsKLWltcG9ydCBhbmRyb2lkLmNvbnRlbnQuQ29udGV4dDsKLWltcG9ydCBhbmRyb2lkLmNvbnRlbnQuQ29udGV4dFdyYXBwZXI7Ci1pbXBvcnQgYW5kcm9pZC5jb250ZW50LnJlcy5Db2xvclN0YXRlTGlzdDsKLWltcG9ydCBhbmRyb2lkLmNvbnRlbnQucmVzLlJlc291cmNlczsKLWltcG9ydCBhbmRyb2lkLmNvbnRlbnQucmVzLlR5cGVkQXJyYXk7Ci1pbXBvcnQgYW5kcm9pZC5ncmFwaGljcy5DYW52YXM7Ci1pbXBvcnQgYW5kcm9pZC5ncmFwaGljcy5kcmF3YWJsZS5BbmltYXRpb25EcmF3YWJsZTsKLWltcG9ydCBhbmRyb2lkLmdyYXBoaWNzLmRyYXdhYmxlLkRyYXdhYmxlOwotaW1wb3J0IGFuZHJvaWQub3MuQXN5bmNUYXNrOwotaW1wb3J0IGFuZHJvaWQuc3VwcG9ydC52NC5ncmFwaGljcy5kcmF3YWJsZS5EcmF3YWJsZUNvbXBhdDsKLWltcG9ydCBhbmRyb2lkLnN1cHBvcnQudjcud2lkZ2V0LlRvb2x0aXBDb21wYXQ7Ci1pbXBvcnQgYW5kcm9pZC51dGlsLkF0dHJpYnV0ZVNldDsKLWltcG9ydCBhbmRyb2lkLnV0aWwuTG9nOwotaW1wb3J0IGFuZHJvaWQudXRpbC5TcGFyc2VBcnJheTsKLWltcG9ydCBhbmRyb2lkLnZpZXcuU291bmRFZmZlY3RDb25zdGFudHM7Ci1pbXBvcnQgYW5kcm9pZC52aWV3LlZpZXc7Ci0KLWltcG9ydCBjb20uYW5kcm9pZC5tZWRpYS51cGRhdGUuQXBpSGVscGVyOwotaW1wb3J0IGNvbS5hbmRyb2lkLm1lZGlhLnVwZGF0ZS5SOwotaW1wb3J0IGNvbS5hbmRyb2lkLnN1cHBvcnQubWVkaWFyb3V0ZXIubWVkaWEuTWVkaWFSb3V0ZVNlbGVjdG9yOwotaW1wb3J0IGNvbS5hbmRyb2lkLnN1cHBvcnQubWVkaWFyb3V0ZXIubWVkaWEuTWVkaWFSb3V0ZXI7Ci0KLS8qKgotICogVGhlIG1lZGlhIHJvdXRlIGJ1dHRvbiBhbGxvd3MgdGhlIHVzZXIgdG8gc2VsZWN0IHJvdXRlcyBhbmQgdG8gY29udHJvbCB0aGUKLSAqIGN1cnJlbnRseSBzZWxlY3RlZCByb3V0ZS4KLSAqIDxwPgotICogVGhlIGFwcGxpY2F0aW9uIG11c3Qgc3BlY2lmeSB0aGUga2luZHMgb2Ygcm91dGVzIHRoYXQgdGhlIHVzZXIgc2hvdWxkIGJlIGFsbG93ZWQKLSAqIHRvIHNlbGVjdCBieSBzcGVjaWZ5aW5nIGEge0BsaW5rIE1lZGlhUm91dGVTZWxlY3RvciBzZWxlY3Rvcn0gd2l0aCB0aGUKLSAqIHtAbGluayAjc2V0Um91dGVTZWxlY3Rvcn0gbWV0aG9kLgotICogPC9wPjxwPgotICogV2hlbiB0aGUgZGVmYXVsdCByb3V0ZSBpcyBzZWxlY3RlZCBvciB3aGVuIHRoZSBjdXJyZW50bHkgc2VsZWN0ZWQgcm91dGUgZG9lcyBub3QKLSAqIG1hdGNoIHRoZSB7QGxpbmsgI2dldFJvdXRlU2VsZWN0b3IoKSBzZWxlY3Rvcn0sIHRoZSBidXR0b24gd2lsbCBhcHBlYXIgaW4KLSAqIGFuIGluYWN0aXZlIHN0YXRlIGluZGljYXRpbmcgdGhhdCB0aGUgYXBwbGljYXRpb24gaXMgbm90IGNvbm5lY3RlZCB0byBhCi0gKiByb3V0ZSBvZiB0aGUga2luZCB0aGF0IGl0IHdhbnRzIHRvIHVzZS4gIENsaWNraW5nIG9uIHRoZSBidXR0b24gb3BlbnMKLSAqIGEge0BsaW5rIE1lZGlhUm91dGVDaG9vc2VyRGlhbG9nfSB0byBhbGxvdyB0aGUgdXNlciB0byBzZWxlY3QgYSByb3V0ZS4KLSAqIElmIG5vIG5vbi1kZWZhdWx0IHJvdXRlcyBtYXRjaCB0aGUgc2VsZWN0b3IgYW5kIGl0IGlzIG5vdCBwb3NzaWJsZSBmb3IgYW4gYWN0aXZlCi0gKiBzY2FuIHRvIGRpc2NvdmVyIGFueSBtYXRjaGluZyByb3V0ZXMsIHRoZW4gdGhlIGJ1dHRvbiBpcyBkaXNhYmxlZCBhbmQgY2Fubm90Ci0gKiBiZSBjbGlja2VkLgotICogPC9wPjxwPgotICogV2hlbiBhIG5vbi1kZWZhdWx0IHJvdXRlIGlzIHNlbGVjdGVkIHRoYXQgbWF0Y2hlcyB0aGUgc2VsZWN0b3IsIHRoZSBidXR0b24gd2lsbAotICogYXBwZWFyIGluIGFuIGFjdGl2ZSBzdGF0ZSBpbmRpY2F0aW5nIHRoYXQgdGhlIGFwcGxpY2F0aW9uIGlzIGNvbm5lY3RlZAotICogdG8gYSByb3V0ZSBvZiB0aGUga2luZCB0aGF0IGl0IHdhbnRzIHRvIHVzZS4gIFRoZSBidXR0b24gbWF5IGFsc28gYXBwZWFyCi0gKiBpbiBhbiBpbnRlcm1lZGlhcnkgY29ubmVjdGluZyBzdGF0ZSBpZiB0aGUgcm91dGUgaXMgaW4gdGhlIHByb2Nlc3Mgb2YgY29ubmVjdGluZwotICogdG8gdGhlIGRlc3RpbmF0aW9uIGJ1dCBoYXMgbm90IHlldCBjb21wbGV0ZWQgZG9pbmcgc28uICBJbiBlaXRoZXIgY2FzZSwgY2xpY2tpbmcKLSAqIG9uIHRoZSBidXR0b24gb3BlbnMgYSB7QGxpbmsgTWVkaWFSb3V0ZUNvbnRyb2xsZXJEaWFsb2d9IHRvIGFsbG93IHRoZSB1c2VyCi0gKiB0byBjb250cm9sIG9yIGRpc2Nvbm5lY3QgZnJvbSB0aGUgY3VycmVudCByb3V0ZS4KLSAqIDwvcD4KLSAqCi0gKiA8aDM+UHJlcmVxdWlzaXRlczwvaDM+Ci0gKiA8cD4KLSAqIFRvIHVzZSB0aGUgbWVkaWEgcm91dGUgYnV0dG9uLCB0aGUgYWN0aXZpdHkgbXVzdCBiZSBhIHN1YmNsYXNzIG9mCi0gKiB7QGxpbmsgRnJhZ21lbnRBY3Rpdml0eX0gZnJvbSB0aGUgPGNvZGU+YW5kcm9pZC5zdXBwb3J0LnY0PC9jb2RlPgotICogc3VwcG9ydCBsaWJyYXJ5LiAgUmVmZXIgdG8gc3VwcG9ydCBsaWJyYXJ5IGRvY3VtZW50YXRpb24gZm9yIGRldGFpbHMuCi0gKiA8L3A+Ci0gKgotICogQHNlZSBNZWRpYVJvdXRlQWN0aW9uUHJvdmlkZXIKLSAqIEBzZWUgI3NldFJvdXRlU2VsZWN0b3IKLSAqLwotcHVibGljIGNsYXNzIE1lZGlhUm91dGVCdXR0b24gZXh0ZW5kcyBWaWV3IHsKLSAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgVEFHID0gIk1lZGlhUm91dGVCdXR0b24iOwotCi0gICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIENIT09TRVJfRlJBR01FTlRfVEFHID0KLSAgICAgICAgICAgICJhbmRyb2lkLnN1cHBvcnQudjcubWVkaWFyb3V0ZXI6TWVkaWFSb3V0ZUNob29zZXJEaWFsb2dGcmFnbWVudCI7Ci0gICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIENPTlRST0xMRVJfRlJBR01FTlRfVEFHID0KLSAgICAgICAgICAgICJhbmRyb2lkLnN1cHBvcnQudjcubWVkaWFyb3V0ZXI6TWVkaWFSb3V0ZUNvbnRyb2xsZXJEaWFsb2dGcmFnbWVudCI7Ci0KLSAgICBwcml2YXRlIGZpbmFsIE1lZGlhUm91dGVyIG1Sb3V0ZXI7Ci0gICAgcHJpdmF0ZSBmaW5hbCBNZWRpYVJvdXRlckNhbGxiYWNrIG1DYWxsYmFjazsKLQotICAgIHByaXZhdGUgTWVkaWFSb3V0ZVNlbGVjdG9yIG1TZWxlY3RvciA9IE1lZGlhUm91dGVTZWxlY3Rvci5FTVBUWTsKLSAgICBwcml2YXRlIGludCBtUm91dGVDYWxsYmFja0ZsYWdzOwotICAgIHByaXZhdGUgTWVkaWFSb3V0ZURpYWxvZ0ZhY3RvcnkgbURpYWxvZ0ZhY3RvcnkgPSBNZWRpYVJvdXRlRGlhbG9nRmFjdG9yeS5nZXREZWZhdWx0KCk7Ci0KLSAgICBwcml2YXRlIGJvb2xlYW4gbUF0dGFjaGVkVG9XaW5kb3c7Ci0KLSAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTcGFyc2VBcnJheTxEcmF3YWJsZS5Db25zdGFudFN0YXRlPiBzUmVtb3RlSW5kaWNhdG9yQ2FjaGUgPQotICAgICAgICAgICAgbmV3IFNwYXJzZUFycmF5PD4oMik7Ci0gICAgcHJpdmF0ZSBSZW1vdGVJbmRpY2F0b3JMb2FkZXIgbVJlbW90ZUluZGljYXRvckxvYWRlcjsKLSAgICBwcml2YXRlIERyYXdhYmxlIG1SZW1vdGVJbmRpY2F0b3I7Ci0gICAgcHJpdmF0ZSBib29sZWFuIG1SZW1vdGVBY3RpdmU7Ci0gICAgcHJpdmF0ZSBib29sZWFuIG1Jc0Nvbm5lY3Rpbmc7Ci0KLSAgICBwcml2YXRlIENvbG9yU3RhdGVMaXN0IG1CdXR0b25UaW50OwotICAgIHByaXZhdGUgaW50IG1NaW5XaWR0aDsKLSAgICBwcml2YXRlIGludCBtTWluSGVpZ2h0OwotCi0gICAgLy8gVGhlIGNoZWNrZWQgc3RhdGUgaXMgdXNlZCB3aGVuIGNvbm5lY3RlZCB0byBhIHJlbW90ZSByb3V0ZS4KLSAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnRbXSBDSEVDS0VEX1NUQVRFX1NFVCA9IHsKLSAgICAgICAgYW5kcm9pZC5SLmF0dHIuc3RhdGVfY2hlY2tlZAotICAgIH07Ci0KLSAgICAvLyBUaGUgY2hlY2thYmxlIHN0YXRlIGlzIHVzZWQgd2hpbGUgY29ubmVjdGluZyB0byBhIHJlbW90ZSByb3V0ZS4KLSAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnRbXSBDSEVDS0FCTEVfU1RBVEVfU0VUID0gewotICAgICAgICBhbmRyb2lkLlIuYXR0ci5zdGF0ZV9jaGVja2FibGUKLSAgICB9OwotCi0gICAgcHVibGljIE1lZGlhUm91dGVCdXR0b24oQ29udGV4dCBjb250ZXh0KSB7Ci0gICAgICAgIHRoaXMoY29udGV4dCwgbnVsbCk7Ci0gICAgfQotCi0gICAgcHVibGljIE1lZGlhUm91dGVCdXR0b24oQ29udGV4dCBjb250ZXh0LCBBdHRyaWJ1dGVTZXQgYXR0cnMpIHsKLSAgICAgICAgdGhpcyhjb250ZXh0LCBhdHRycywgUi5hdHRyLm1lZGlhUm91dGVCdXR0b25TdHlsZSk7Ci0gICAgfQotCi0gICAgcHVibGljIE1lZGlhUm91dGVCdXR0b24oQ29udGV4dCBjb250ZXh0LCBBdHRyaWJ1dGVTZXQgYXR0cnMsIGludCBkZWZTdHlsZUF0dHIpIHsKLSAgICAgICAgc3VwZXIoTWVkaWFSb3V0ZXJUaGVtZUhlbHBlci5jcmVhdGVUaGVtZWRCdXR0b25Db250ZXh0KGNvbnRleHQpLCBhdHRycywgZGVmU3R5bGVBdHRyKTsKLSAgICAgICAgY29udGV4dCA9IGdldENvbnRleHQoKTsKLQotICAgICAgICBtUm91dGVyID0gTWVkaWFSb3V0ZXIuZ2V0SW5zdGFuY2UoY29udGV4dCk7Ci0gICAgICAgIG1DYWxsYmFjayA9IG5ldyBNZWRpYVJvdXRlckNhbGxiYWNrKCk7Ci0KLSAgICAgICAgUmVzb3VyY2VzLlRoZW1lIHRoZW1lID0gQXBpSGVscGVyLmdldExpYlJlc291cmNlcyhjb250ZXh0KS5uZXdUaGVtZSgpOwotICAgICAgICB0aGVtZS5hcHBseVN0eWxlKE1lZGlhUm91dGVyVGhlbWVIZWxwZXIuZ2V0Um91dGVyVGhlbWVJZChjb250ZXh0KSwgdHJ1ZSk7Ci0gICAgICAgIFR5cGVkQXJyYXkgYSA9IHRoZW1lLm9idGFpblN0eWxlZEF0dHJpYnV0ZXMoYXR0cnMsCi0gICAgICAgICAgICAgICAgUi5zdHlsZWFibGUuTWVkaWFSb3V0ZUJ1dHRvbiwgZGVmU3R5bGVBdHRyLCAwKTsKLQotICAgICAgICBtQnV0dG9uVGludCA9IGEuZ2V0Q29sb3JTdGF0ZUxpc3QoUi5zdHlsZWFibGUuTWVkaWFSb3V0ZUJ1dHRvbl9tZWRpYVJvdXRlQnV0dG9uVGludCk7Ci0gICAgICAgIG1NaW5XaWR0aCA9IGEuZ2V0RGltZW5zaW9uUGl4ZWxTaXplKAotICAgICAgICAgICAgICAgIFIuc3R5bGVhYmxlLk1lZGlhUm91dGVCdXR0b25fYW5kcm9pZF9taW5XaWR0aCwgMCk7Ci0gICAgICAgIG1NaW5IZWlnaHQgPSBhLmdldERpbWVuc2lvblBpeGVsU2l6ZSgKLSAgICAgICAgICAgICAgICBSLnN0eWxlYWJsZS5NZWRpYVJvdXRlQnV0dG9uX2FuZHJvaWRfbWluSGVpZ2h0LCAwKTsKLSAgICAgICAgaW50IHJlbW90ZUluZGljYXRvclJlc0lkID0gYS5nZXRSZXNvdXJjZUlkKAotICAgICAgICAgICAgICAgIFIuc3R5bGVhYmxlLk1lZGlhUm91dGVCdXR0b25fZXh0ZXJuYWxSb3V0ZUVuYWJsZWREcmF3YWJsZSwgMCk7Ci0gICAgICAgIGEucmVjeWNsZSgpOwotCi0gICAgICAgIGlmIChyZW1vdGVJbmRpY2F0b3JSZXNJZCAhPSAwKSB7Ci0gICAgICAgICAgICBEcmF3YWJsZS5Db25zdGFudFN0YXRlIHJlbW90ZUluZGljYXRvclN0YXRlID0KLSAgICAgICAgICAgICAgICAgICAgc1JlbW90ZUluZGljYXRvckNhY2hlLmdldChyZW1vdGVJbmRpY2F0b3JSZXNJZCk7Ci0gICAgICAgICAgICBpZiAocmVtb3RlSW5kaWNhdG9yU3RhdGUgIT0gbnVsbCkgewotICAgICAgICAgICAgICAgIHNldFJlbW90ZUluZGljYXRvckRyYXdhYmxlKHJlbW90ZUluZGljYXRvclN0YXRlLm5ld0RyYXdhYmxlKCkpOwotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICBtUmVtb3RlSW5kaWNhdG9yTG9hZGVyID0gbmV3IFJlbW90ZUluZGljYXRvckxvYWRlcihyZW1vdGVJbmRpY2F0b3JSZXNJZCk7Ci0gICAgICAgICAgICAgICAgbVJlbW90ZUluZGljYXRvckxvYWRlci5leGVjdXRlT25FeGVjdXRvcihBc3luY1Rhc2suVEhSRUFEX1BPT0xfRVhFQ1VUT1IpOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgdXBkYXRlQ29udGVudERlc2NyaXB0aW9uKCk7Ci0gICAgICAgIHNldENsaWNrYWJsZSh0cnVlKTsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBHZXRzIHRoZSBtZWRpYSByb3V0ZSBzZWxlY3RvciBmb3IgZmlsdGVyaW5nIHRoZSByb3V0ZXMgdGhhdCB0aGUgdXNlciBjYW4KLSAgICAgKiBzZWxlY3QgdXNpbmcgdGhlIG1lZGlhIHJvdXRlIGNob29zZXIgZGlhbG9nLgotICAgICAqCi0gICAgICogQHJldHVybiBUaGUgc2VsZWN0b3IsIG5ldmVyIG51bGwuCi0gICAgICovCi0gICAgQE5vbk51bGwKLSAgICBwdWJsaWMgTWVkaWFSb3V0ZVNlbGVjdG9yIGdldFJvdXRlU2VsZWN0b3IoKSB7Ci0gICAgICAgIHJldHVybiBtU2VsZWN0b3I7Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogU2V0cyB0aGUgbWVkaWEgcm91dGUgc2VsZWN0b3IgZm9yIGZpbHRlcmluZyB0aGUgcm91dGVzIHRoYXQgdGhlIHVzZXIgY2FuCi0gICAgICogc2VsZWN0IHVzaW5nIHRoZSBtZWRpYSByb3V0ZSBjaG9vc2VyIGRpYWxvZy4KLSAgICAgKgotICAgICAqIEBwYXJhbSBzZWxlY3RvciBUaGUgc2VsZWN0b3IuCi0gICAgICovCi0gICAgcHVibGljIHZvaWQgc2V0Um91dGVTZWxlY3RvcihNZWRpYVJvdXRlU2VsZWN0b3Igc2VsZWN0b3IpIHsKLSAgICAgICAgc2V0Um91dGVTZWxlY3RvcihzZWxlY3RvciwgMCk7Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogU2V0cyB0aGUgbWVkaWEgcm91dGUgc2VsZWN0b3IgZm9yIGZpbHRlcmluZyB0aGUgcm91dGVzIHRoYXQgdGhlIHVzZXIgY2FuCi0gICAgICogc2VsZWN0IHVzaW5nIHRoZSBtZWRpYSByb3V0ZSBjaG9vc2VyIGRpYWxvZy4KLSAgICAgKgotICAgICAqIEBwYXJhbSBzZWxlY3RvciBUaGUgc2VsZWN0b3IuCi0gICAgICogQHBhcmFtIGZsYWdzIEZsYWdzIHRvIGNvbnRyb2wgdGhlIGJlaGF2aW9yIG9mIHRoZSBjYWxsYmFjay4gTWF5IGJlIHplcm8gb3IgYSBjb21iaW5hdGlvbiBvZgotICAgICAqICAgICAgICAgICAgICB7QGxpbmsgI01lZGlhUm91dGVyLkNBTExCQUNLX0ZMQUdfUEVSRk9STV9BQ1RJVkVfU0NBTn0gYW5kCi0gICAgICogICAgICAgICAgICAgIHtAbGluayAjTWVkaWFSb3V0ZXIuQ0FMTEJBQ0tfRkxBR19VTkZJTFRFUkVEX0VWRU5UU30uCi0gICAgICovCi0gICAgcHVibGljIHZvaWQgc2V0Um91dGVTZWxlY3RvcihNZWRpYVJvdXRlU2VsZWN0b3Igc2VsZWN0b3IsIGludCBmbGFncykgewotICAgICAgICBpZiAobVNlbGVjdG9yLmVxdWFscyhzZWxlY3RvcikgJiYgbVJvdXRlQ2FsbGJhY2tGbGFncyA9PSBmbGFncykgewotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgICAgIGlmICghbVNlbGVjdG9yLmlzRW1wdHkoKSkgewotICAgICAgICAgICAgbVJvdXRlci5yZW1vdmVDYWxsYmFjayhtQ2FsbGJhY2spOwotICAgICAgICB9Ci0gICAgICAgIGlmIChzZWxlY3RvciA9PSBudWxsIHx8IHNlbGVjdG9yLmlzRW1wdHkoKSkgewotICAgICAgICAgICAgbVNlbGVjdG9yID0gTWVkaWFSb3V0ZVNlbGVjdG9yLkVNUFRZOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0KLSAgICAgICAgbVNlbGVjdG9yID0gc2VsZWN0b3I7Ci0gICAgICAgIG1Sb3V0ZUNhbGxiYWNrRmxhZ3MgPSBmbGFnczsKLQotICAgICAgICBpZiAobUF0dGFjaGVkVG9XaW5kb3cpIHsKLSAgICAgICAgICAgIG1Sb3V0ZXIuYWRkQ2FsbGJhY2soc2VsZWN0b3IsIG1DYWxsYmFjaywgZmxhZ3MpOwotICAgICAgICAgICAgcmVmcmVzaFJvdXRlKCk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBHZXRzIHRoZSBtZWRpYSByb3V0ZSBkaWFsb2cgZmFjdG9yeSB0byB1c2Ugd2hlbiBzaG93aW5nIHRoZSByb3V0ZSBjaG9vc2VyCi0gICAgICogb3IgY29udHJvbGxlciBkaWFsb2cuCi0gICAgICoKLSAgICAgKiBAcmV0dXJuIFRoZSBkaWFsb2cgZmFjdG9yeSwgbmV2ZXIgbnVsbC4KLSAgICAgKi8KLSAgICBATm9uTnVsbAotICAgIHB1YmxpYyBNZWRpYVJvdXRlRGlhbG9nRmFjdG9yeSBnZXREaWFsb2dGYWN0b3J5KCkgewotICAgICAgICByZXR1cm4gbURpYWxvZ0ZhY3Rvcnk7Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogU2V0cyB0aGUgbWVkaWEgcm91dGUgZGlhbG9nIGZhY3RvcnkgdG8gdXNlIHdoZW4gc2hvd2luZyB0aGUgcm91dGUgY2hvb3NlcgotICAgICAqIG9yIGNvbnRyb2xsZXIgZGlhbG9nLgotICAgICAqCi0gICAgICogQHBhcmFtIGZhY3RvcnkgVGhlIGRpYWxvZyBmYWN0b3J5LCBtdXN0IG5vdCBiZSBudWxsLgotICAgICAqLwotICAgIHB1YmxpYyB2b2lkIHNldERpYWxvZ0ZhY3RvcnkoQE5vbk51bGwgTWVkaWFSb3V0ZURpYWxvZ0ZhY3RvcnkgZmFjdG9yeSkgewotICAgICAgICBpZiAoZmFjdG9yeSA9PSBudWxsKSB7Ci0gICAgICAgICAgICB0aHJvdyBuZXcgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKCJmYWN0b3J5IG11c3Qgbm90IGJlIG51bGwiKTsKLSAgICAgICAgfQotCi0gICAgICAgIG1EaWFsb2dGYWN0b3J5ID0gZmFjdG9yeTsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBTaG93IHRoZSByb3V0ZSBjaG9vc2VyIG9yIGNvbnRyb2xsZXIgZGlhbG9nLgotICAgICAqIDxwPgotICAgICAqIElmIHRoZSBkZWZhdWx0IHJvdXRlIGlzIHNlbGVjdGVkIG9yIGlmIHRoZSBjdXJyZW50bHkgc2VsZWN0ZWQgcm91dGUgZG9lcwotICAgICAqIG5vdCBtYXRjaCB0aGUge0BsaW5rICNnZXRSb3V0ZVNlbGVjdG9yIHNlbGVjdG9yfSwgdGhlbiBzaG93cyB0aGUgcm91dGUgY2hvb3NlciBkaWFsb2cuCi0gICAgICogT3RoZXJ3aXNlLCBzaG93cyB0aGUgcm91dGUgY29udHJvbGxlciBkaWFsb2cgdG8gb2ZmZXIgdGhlIHVzZXIKLSAgICAgKiBhIGNob2ljZSB0byBkaXNjb25uZWN0IGZyb20gdGhlIHJvdXRlIG9yIHBlcmZvcm0gb3RoZXIgY29udHJvbCBhY3Rpb25zCi0gICAgICogc3VjaCBhcyBzZXR0aW5nIHRoZSByb3V0ZSdzIHZvbHVtZS4KLSAgICAgKiA8L3A+PHA+Ci0gICAgICogVGhlIGFwcGxpY2F0aW9uIGNhbiBjdXN0b21pemUgdGhlIGRpYWxvZ3MgYnkgY2FsbGluZyB7QGxpbmsgI3NldERpYWxvZ0ZhY3Rvcnl9Ci0gICAgICogdG8gcHJvdmlkZSBhIGN1c3RvbWl6ZWQgZGlhbG9nIGZhY3RvcnkuCi0gICAgICogPC9wPgotICAgICAqCi0gICAgICogQHJldHVybiBUcnVlIGlmIHRoZSBkaWFsb2cgd2FzIGFjdHVhbGx5IHNob3duLgotICAgICAqCi0gICAgICogQHRocm93cyBJbGxlZ2FsU3RhdGVFeGNlcHRpb24gaWYgdGhlIGFjdGl2aXR5IGlzIG5vdCBhIHN1YmNsYXNzIG9mCi0gICAgICoge0BsaW5rIEZyYWdtZW50QWN0aXZpdHl9LgotICAgICAqLwotICAgIHB1YmxpYyBib29sZWFuIHNob3dEaWFsb2coKSB7Ci0gICAgICAgIGlmICghbUF0dGFjaGVkVG9XaW5kb3cpIHsKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgfQotCi0gICAgICAgIGZpbmFsIEZyYWdtZW50TWFuYWdlciBmbSA9IGdldEFjdGl2aXR5KCkuZ2V0RnJhZ21lbnRNYW5hZ2VyKCk7Ci0gICAgICAgIGlmIChmbSA9PSBudWxsKSB7Ci0gICAgICAgICAgICB0aHJvdyBuZXcgSWxsZWdhbFN0YXRlRXhjZXB0aW9uKCJUaGUgYWN0aXZpdHkgbXVzdCBiZSBhIHN1YmNsYXNzIG9mIEZyYWdtZW50QWN0aXZpdHkiKTsKLSAgICAgICAgfQotCi0gICAgICAgIE1lZGlhUm91dGVyLlJvdXRlSW5mbyByb3V0ZSA9IG1Sb3V0ZXIuZ2V0U2VsZWN0ZWRSb3V0ZSgpOwotICAgICAgICBpZiAocm91dGUuaXNEZWZhdWx0T3JCbHVldG9vdGgoKSB8fCAhcm91dGUubWF0Y2hlc1NlbGVjdG9yKG1TZWxlY3RvcikpIHsKLSAgICAgICAgICAgIGlmIChmbS5maW5kRnJhZ21lbnRCeVRhZyhDSE9PU0VSX0ZSQUdNRU5UX1RBRykgIT0gbnVsbCkgewotICAgICAgICAgICAgICAgIExvZy53KFRBRywgInNob3dEaWFsb2coKTogUm91dGUgY2hvb3NlciBkaWFsb2cgYWxyZWFkeSBzaG93aW5nISIpOwotICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIE1lZGlhUm91dGVDaG9vc2VyRGlhbG9nRnJhZ21lbnQgZiA9Ci0gICAgICAgICAgICAgICAgICAgIG1EaWFsb2dGYWN0b3J5Lm9uQ3JlYXRlQ2hvb3NlckRpYWxvZ0ZyYWdtZW50KCk7Ci0gICAgICAgICAgICBmLnNldFJvdXRlU2VsZWN0b3IobVNlbGVjdG9yKTsKLSAgICAgICAgICAgIGYuc2hvdyhmbSwgQ0hPT1NFUl9GUkFHTUVOVF9UQUcpOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgaWYgKGZtLmZpbmRGcmFnbWVudEJ5VGFnKENPTlRST0xMRVJfRlJBR01FTlRfVEFHKSAhPSBudWxsKSB7Ci0gICAgICAgICAgICAgICAgTG9nLncoVEFHLCAic2hvd0RpYWxvZygpOiBSb3V0ZSBjb250cm9sbGVyIGRpYWxvZyBhbHJlYWR5IHNob3dpbmchIik7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgTWVkaWFSb3V0ZUNvbnRyb2xsZXJEaWFsb2dGcmFnbWVudCBmID0KLSAgICAgICAgICAgICAgICAgICAgbURpYWxvZ0ZhY3Rvcnkub25DcmVhdGVDb250cm9sbGVyRGlhbG9nRnJhZ21lbnQoKTsKLSAgICAgICAgICAgIGYuc2hvdyhmbSwgQ09OVFJPTExFUl9GUkFHTUVOVF9UQUcpOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLQotCi0gICAgcHJpdmF0ZSBBY3Rpdml0eSBnZXRBY3Rpdml0eSgpIHsKLSAgICAgICAgLy8gR3Jvc3Mgd2F5IG9mIHVud3JhcHBpbmcgdGhlIEFjdGl2aXR5IHNvIHdlIGNhbiBnZXQgdGhlIEZyYWdtZW50TWFuYWdlcgotICAgICAgICBDb250ZXh0IGNvbnRleHQgPSBnZXRDb250ZXh0KCk7Ci0gICAgICAgIHdoaWxlIChjb250ZXh0IGluc3RhbmNlb2YgQ29udGV4dFdyYXBwZXIpIHsKLSAgICAgICAgICAgIGlmIChjb250ZXh0IGluc3RhbmNlb2YgQWN0aXZpdHkpIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gKEFjdGl2aXR5KWNvbnRleHQ7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBjb250ZXh0ID0gKChDb250ZXh0V3JhcHBlciljb250ZXh0KS5nZXRCYXNlQ29udGV4dCgpOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiBudWxsOwotICAgIH0KLQotICAgIC8qKgotICAgICAqIFNldHMgd2hldGhlciB0byBlbmFibGUgc2hvd2luZyBhIHRvYXN0IHdpdGggdGhlIGNvbnRlbnQgZGVzY3JpcHRvciBvZiB0aGUKLSAgICAgKiBidXR0b24gd2hlbiB0aGUgYnV0dG9uIGlzIGxvbmcgcHJlc3NlZC4KLSAgICAgKi8KLSAgICB2b2lkIHNldENoZWF0U2hlZXRFbmFibGVkKGJvb2xlYW4gZW5hYmxlKSB7Ci0gICAgICAgIFRvb2x0aXBDb21wYXQuc2V0VG9vbHRpcFRleHQodGhpcywgZW5hYmxlCi0gICAgICAgICAgICAgICAgPyBBcGlIZWxwZXIuZ2V0TGliUmVzb3VyY2VzKGdldENvbnRleHQoKSkKLSAgICAgICAgICAgICAgICAgICAgLmdldFN0cmluZyhSLnN0cmluZy5tcl9idXR0b25fY29udGVudF9kZXNjcmlwdGlvbikKLSAgICAgICAgICAgICAgICA6IG51bGwpOwotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyBib29sZWFuIHBlcmZvcm1DbGljaygpIHsKLSAgICAgICAgLy8gU2VuZCB0aGUgYXBwcm9wcmlhdGUgYWNjZXNzaWJpbGl0eSBldmVudHMgYW5kIGNhbGwgbGlzdGVuZXJzCi0gICAgICAgIGJvb2xlYW4gaGFuZGxlZCA9IHN1cGVyLnBlcmZvcm1DbGljaygpOwotICAgICAgICBpZiAoIWhhbmRsZWQpIHsKLSAgICAgICAgICAgIHBsYXlTb3VuZEVmZmVjdChTb3VuZEVmZmVjdENvbnN0YW50cy5DTElDSyk7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIHNob3dEaWFsb2coKSB8fCBoYW5kbGVkOwotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHByb3RlY3RlZCBpbnRbXSBvbkNyZWF0ZURyYXdhYmxlU3RhdGUoaW50IGV4dHJhU3BhY2UpIHsKLSAgICAgICAgZmluYWwgaW50W10gZHJhd2FibGVTdGF0ZSA9IHN1cGVyLm9uQ3JlYXRlRHJhd2FibGVTdGF0ZShleHRyYVNwYWNlICsgMSk7Ci0KLSAgICAgICAgLy8gVGVjaG5pY2FsbHkgd2Ugc2hvdWxkIGJlIGhhbmRsaW5nIHRoaXMgbW9yZSBjb21wbGV0ZWx5LCBidXQgdGhlc2UKLSAgICAgICAgLy8gYXJlIGltcGxlbWVudGF0aW9uIGRldGFpbHMgaGVyZS4gQ2hlY2thYmxlIGlzIHVzZWQgdG8gZXhwcmVzcyB0aGUgY29ubmVjdGluZwotICAgICAgICAvLyBkcmF3YWJsZSBzdGF0ZSBhbmQgaXQncyBtdXR1YWxseSBleGNsdXNpdmUgd2l0aCBjaGVjayBmb3IgdGhlIHB1cnBvc2VzCi0gICAgICAgIC8vIG9mIHN0YXRlIHNlbGVjdGlvbiBoZXJlLgotICAgICAgICBpZiAobUlzQ29ubmVjdGluZykgewotICAgICAgICAgICAgbWVyZ2VEcmF3YWJsZVN0YXRlcyhkcmF3YWJsZVN0YXRlLCBDSEVDS0FCTEVfU1RBVEVfU0VUKTsKLSAgICAgICAgfSBlbHNlIGlmIChtUmVtb3RlQWN0aXZlKSB7Ci0gICAgICAgICAgICBtZXJnZURyYXdhYmxlU3RhdGVzKGRyYXdhYmxlU3RhdGUsIENIRUNLRURfU1RBVEVfU0VUKTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gZHJhd2FibGVTdGF0ZTsKLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwcm90ZWN0ZWQgdm9pZCBkcmF3YWJsZVN0YXRlQ2hhbmdlZCgpIHsKLSAgICAgICAgc3VwZXIuZHJhd2FibGVTdGF0ZUNoYW5nZWQoKTsKLQotICAgICAgICBpZiAobVJlbW90ZUluZGljYXRvciAhPSBudWxsKSB7Ci0gICAgICAgICAgICBpbnRbXSBteURyYXdhYmxlU3RhdGUgPSBnZXREcmF3YWJsZVN0YXRlKCk7Ci0gICAgICAgICAgICBtUmVtb3RlSW5kaWNhdG9yLnNldFN0YXRlKG15RHJhd2FibGVTdGF0ZSk7Ci0gICAgICAgICAgICBpbnZhbGlkYXRlKCk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBTZXRzIGEgZHJhd2FibGUgdG8gdXNlIGFzIHRoZSByZW1vdGUgcm91dGUgaW5kaWNhdG9yLgotICAgICAqLwotICAgIHB1YmxpYyB2b2lkIHNldFJlbW90ZUluZGljYXRvckRyYXdhYmxlKERyYXdhYmxlIGQpIHsKLSAgICAgICAgaWYgKG1SZW1vdGVJbmRpY2F0b3JMb2FkZXIgIT0gbnVsbCkgewotICAgICAgICAgICAgbVJlbW90ZUluZGljYXRvckxvYWRlci5jYW5jZWwoZmFsc2UpOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKG1SZW1vdGVJbmRpY2F0b3IgIT0gbnVsbCkgewotICAgICAgICAgICAgbVJlbW90ZUluZGljYXRvci5zZXRDYWxsYmFjayhudWxsKTsKLSAgICAgICAgICAgIHVuc2NoZWR1bGVEcmF3YWJsZShtUmVtb3RlSW5kaWNhdG9yKTsKLSAgICAgICAgfQotICAgICAgICBpZiAoZCAhPSBudWxsKSB7Ci0gICAgICAgICAgICBpZiAobUJ1dHRvblRpbnQgIT0gbnVsbCkgewotICAgICAgICAgICAgICAgIGQgPSBEcmF3YWJsZUNvbXBhdC53cmFwKGQubXV0YXRlKCkpOwotICAgICAgICAgICAgICAgIERyYXdhYmxlQ29tcGF0LnNldFRpbnRMaXN0KGQsIG1CdXR0b25UaW50KTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGQuc2V0Q2FsbGJhY2sodGhpcyk7Ci0gICAgICAgICAgICBkLnNldFN0YXRlKGdldERyYXdhYmxlU3RhdGUoKSk7Ci0gICAgICAgICAgICBkLnNldFZpc2libGUoZ2V0VmlzaWJpbGl0eSgpID09IFZJU0lCTEUsIGZhbHNlKTsKLSAgICAgICAgfQotICAgICAgICBtUmVtb3RlSW5kaWNhdG9yID0gZDsKLQotICAgICAgICByZWZyZXNoRHJhd2FibGVTdGF0ZSgpOwotICAgICAgICBpZiAobUF0dGFjaGVkVG9XaW5kb3cgJiYgbVJlbW90ZUluZGljYXRvciAhPSBudWxsCi0gICAgICAgICAgICAgICAgJiYgbVJlbW90ZUluZGljYXRvci5nZXRDdXJyZW50KCkgaW5zdGFuY2VvZiBBbmltYXRpb25EcmF3YWJsZSkgewotICAgICAgICAgICAgQW5pbWF0aW9uRHJhd2FibGUgY3VyRHJhd2FibGUgPSAoQW5pbWF0aW9uRHJhd2FibGUpIG1SZW1vdGVJbmRpY2F0b3IuZ2V0Q3VycmVudCgpOwotICAgICAgICAgICAgaWYgKG1Jc0Nvbm5lY3RpbmcpIHsKLSAgICAgICAgICAgICAgICBpZiAoIWN1ckRyYXdhYmxlLmlzUnVubmluZygpKSB7Ci0gICAgICAgICAgICAgICAgICAgIGN1ckRyYXdhYmxlLnN0YXJ0KCk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfSBlbHNlIGlmIChtUmVtb3RlQWN0aXZlKSB7Ci0gICAgICAgICAgICAgICAgaWYgKGN1ckRyYXdhYmxlLmlzUnVubmluZygpKSB7Ci0gICAgICAgICAgICAgICAgICAgIGN1ckRyYXdhYmxlLnN0b3AoKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgY3VyRHJhd2FibGUuc2VsZWN0RHJhd2FibGUoY3VyRHJhd2FibGUuZ2V0TnVtYmVyT2ZGcmFtZXMoKSAtIDEpOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHJvdGVjdGVkIGJvb2xlYW4gdmVyaWZ5RHJhd2FibGUoRHJhd2FibGUgd2hvKSB7Ci0gICAgICAgIHJldHVybiBzdXBlci52ZXJpZnlEcmF3YWJsZSh3aG8pIHx8IHdobyA9PSBtUmVtb3RlSW5kaWNhdG9yOwotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyB2b2lkIGp1bXBEcmF3YWJsZXNUb0N1cnJlbnRTdGF0ZSgpIHsKLSAgICAgICAgLy8gV2UgY2FuJ3QgY2FsbCBzdXBlciB0byBoYW5kbGUgdGhlIGJhY2tncm91bmQgc28gd2UgZG8gaXQgb3Vyc2VsdmVzLgotICAgICAgICAvL3N1cGVyLmp1bXBEcmF3YWJsZXNUb0N1cnJlbnRTdGF0ZSgpOwotICAgICAgICBpZiAoZ2V0QmFja2dyb3VuZCgpICE9IG51bGwpIHsKLSAgICAgICAgICAgIERyYXdhYmxlQ29tcGF0Lmp1bXBUb0N1cnJlbnRTdGF0ZShnZXRCYWNrZ3JvdW5kKCkpOwotICAgICAgICB9Ci0KLSAgICAgICAgLy8gSGFuZGxlIG91ciBvd24gcmVtb3RlIGluZGljYXRvci4KLSAgICAgICAgaWYgKG1SZW1vdGVJbmRpY2F0b3IgIT0gbnVsbCkgewotICAgICAgICAgICAgRHJhd2FibGVDb21wYXQuanVtcFRvQ3VycmVudFN0YXRlKG1SZW1vdGVJbmRpY2F0b3IpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIHZvaWQgc2V0VmlzaWJpbGl0eShpbnQgdmlzaWJpbGl0eSkgewotICAgICAgICBzdXBlci5zZXRWaXNpYmlsaXR5KHZpc2liaWxpdHkpOwotCi0gICAgICAgIGlmIChtUmVtb3RlSW5kaWNhdG9yICE9IG51bGwpIHsKLSAgICAgICAgICAgIG1SZW1vdGVJbmRpY2F0b3Iuc2V0VmlzaWJsZShnZXRWaXNpYmlsaXR5KCkgPT0gVklTSUJMRSwgZmFsc2UpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIHZvaWQgb25BdHRhY2hlZFRvV2luZG93KCkgewotICAgICAgICBzdXBlci5vbkF0dGFjaGVkVG9XaW5kb3coKTsKLQotICAgICAgICBtQXR0YWNoZWRUb1dpbmRvdyA9IHRydWU7Ci0gICAgICAgIGlmICghbVNlbGVjdG9yLmlzRW1wdHkoKSkgewotICAgICAgICAgICAgbVJvdXRlci5hZGRDYWxsYmFjayhtU2VsZWN0b3IsIG1DYWxsYmFjaywgbVJvdXRlQ2FsbGJhY2tGbGFncyk7Ci0gICAgICAgIH0KLSAgICAgICAgcmVmcmVzaFJvdXRlKCk7Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIHZvaWQgb25EZXRhY2hlZEZyb21XaW5kb3coKSB7Ci0gICAgICAgIG1BdHRhY2hlZFRvV2luZG93ID0gZmFsc2U7Ci0gICAgICAgIGlmICghbVNlbGVjdG9yLmlzRW1wdHkoKSkgewotICAgICAgICAgICAgbVJvdXRlci5yZW1vdmVDYWxsYmFjayhtQ2FsbGJhY2spOwotICAgICAgICB9Ci0KLSAgICAgICAgc3VwZXIub25EZXRhY2hlZEZyb21XaW5kb3coKTsKLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwcm90ZWN0ZWQgdm9pZCBvbk1lYXN1cmUoaW50IHdpZHRoTWVhc3VyZVNwZWMsIGludCBoZWlnaHRNZWFzdXJlU3BlYykgewotICAgICAgICBmaW5hbCBpbnQgd2lkdGhTaXplID0gTWVhc3VyZVNwZWMuZ2V0U2l6ZSh3aWR0aE1lYXN1cmVTcGVjKTsKLSAgICAgICAgZmluYWwgaW50IGhlaWdodFNpemUgPSBNZWFzdXJlU3BlYy5nZXRTaXplKGhlaWdodE1lYXN1cmVTcGVjKTsKLSAgICAgICAgZmluYWwgaW50IHdpZHRoTW9kZSA9IE1lYXN1cmVTcGVjLmdldE1vZGUod2lkdGhNZWFzdXJlU3BlYyk7Ci0gICAgICAgIGZpbmFsIGludCBoZWlnaHRNb2RlID0gTWVhc3VyZVNwZWMuZ2V0TW9kZShoZWlnaHRNZWFzdXJlU3BlYyk7Ci0KLSAgICAgICAgZmluYWwgaW50IHdpZHRoID0gTWF0aC5tYXgobU1pbldpZHRoLCBtUmVtb3RlSW5kaWNhdG9yICE9IG51bGwgPwotICAgICAgICAgICAgICAgIG1SZW1vdGVJbmRpY2F0b3IuZ2V0SW50cmluc2ljV2lkdGgoKSArIGdldFBhZGRpbmdMZWZ0KCkgKyBnZXRQYWRkaW5nUmlnaHQoKSA6IDApOwotICAgICAgICBmaW5hbCBpbnQgaGVpZ2h0ID0gTWF0aC5tYXgobU1pbkhlaWdodCwgbVJlbW90ZUluZGljYXRvciAhPSBudWxsID8KLSAgICAgICAgICAgICAgICBtUmVtb3RlSW5kaWNhdG9yLmdldEludHJpbnNpY0hlaWdodCgpICsgZ2V0UGFkZGluZ1RvcCgpICsgZ2V0UGFkZGluZ0JvdHRvbSgpIDogMCk7Ci0KLSAgICAgICAgaW50IG1lYXN1cmVkV2lkdGg7Ci0gICAgICAgIHN3aXRjaCAod2lkdGhNb2RlKSB7Ci0gICAgICAgICAgICBjYXNlIE1lYXN1cmVTcGVjLkVYQUNUTFk6Ci0gICAgICAgICAgICAgICAgbWVhc3VyZWRXaWR0aCA9IHdpZHRoU2l6ZTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGNhc2UgTWVhc3VyZVNwZWMuQVRfTU9TVDoKLSAgICAgICAgICAgICAgICBtZWFzdXJlZFdpZHRoID0gTWF0aC5taW4od2lkdGhTaXplLCB3aWR0aCk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgY2FzZSBNZWFzdXJlU3BlYy5VTlNQRUNJRklFRDoKLSAgICAgICAgICAgICAgICBtZWFzdXJlZFdpZHRoID0gd2lkdGg7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLQotICAgICAgICBpbnQgbWVhc3VyZWRIZWlnaHQ7Ci0gICAgICAgIHN3aXRjaCAoaGVpZ2h0TW9kZSkgewotICAgICAgICAgICAgY2FzZSBNZWFzdXJlU3BlYy5FWEFDVExZOgotICAgICAgICAgICAgICAgIG1lYXN1cmVkSGVpZ2h0ID0gaGVpZ2h0U2l6ZTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGNhc2UgTWVhc3VyZVNwZWMuQVRfTU9TVDoKLSAgICAgICAgICAgICAgICBtZWFzdXJlZEhlaWdodCA9IE1hdGgubWluKGhlaWdodFNpemUsIGhlaWdodCk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgY2FzZSBNZWFzdXJlU3BlYy5VTlNQRUNJRklFRDoKLSAgICAgICAgICAgICAgICBtZWFzdXJlZEhlaWdodCA9IGhlaWdodDsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotCi0gICAgICAgIHNldE1lYXN1cmVkRGltZW5zaW9uKG1lYXN1cmVkV2lkdGgsIG1lYXN1cmVkSGVpZ2h0KTsKLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwcm90ZWN0ZWQgdm9pZCBvbkRyYXcoQ2FudmFzIGNhbnZhcykgewotICAgICAgICBzdXBlci5vbkRyYXcoY2FudmFzKTsKLQotICAgICAgICBpZiAobVJlbW90ZUluZGljYXRvciAhPSBudWxsKSB7Ci0gICAgICAgICAgICBmaW5hbCBpbnQgbGVmdCA9IGdldFBhZGRpbmdMZWZ0KCk7Ci0gICAgICAgICAgICBmaW5hbCBpbnQgcmlnaHQgPSBnZXRXaWR0aCgpIC0gZ2V0UGFkZGluZ1JpZ2h0KCk7Ci0gICAgICAgICAgICBmaW5hbCBpbnQgdG9wID0gZ2V0UGFkZGluZ1RvcCgpOwotICAgICAgICAgICAgZmluYWwgaW50IGJvdHRvbSA9IGdldEhlaWdodCgpIC0gZ2V0UGFkZGluZ0JvdHRvbSgpOwotCi0gICAgICAgICAgICBmaW5hbCBpbnQgZHJhd1dpZHRoID0gbVJlbW90ZUluZGljYXRvci5nZXRJbnRyaW5zaWNXaWR0aCgpOwotICAgICAgICAgICAgZmluYWwgaW50IGRyYXdIZWlnaHQgPSBtUmVtb3RlSW5kaWNhdG9yLmdldEludHJpbnNpY0hlaWdodCgpOwotICAgICAgICAgICAgZmluYWwgaW50IGRyYXdMZWZ0ID0gbGVmdCArIChyaWdodCAtIGxlZnQgLSBkcmF3V2lkdGgpIC8gMjsKLSAgICAgICAgICAgIGZpbmFsIGludCBkcmF3VG9wID0gdG9wICsgKGJvdHRvbSAtIHRvcCAtIGRyYXdIZWlnaHQpIC8gMjsKLQotICAgICAgICAgICAgbVJlbW90ZUluZGljYXRvci5zZXRCb3VuZHMoZHJhd0xlZnQsIGRyYXdUb3AsCi0gICAgICAgICAgICAgICAgICAgIGRyYXdMZWZ0ICsgZHJhd1dpZHRoLCBkcmF3VG9wICsgZHJhd0hlaWdodCk7Ci0gICAgICAgICAgICBtUmVtb3RlSW5kaWNhdG9yLmRyYXcoY2FudmFzKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIHZvaWQgcmVmcmVzaFJvdXRlKCkgewotICAgICAgICBmaW5hbCBNZWRpYVJvdXRlci5Sb3V0ZUluZm8gcm91dGUgPSBtUm91dGVyLmdldFNlbGVjdGVkUm91dGUoKTsKLSAgICAgICAgZmluYWwgYm9vbGVhbiBpc1JlbW90ZSA9ICFyb3V0ZS5pc0RlZmF1bHRPckJsdWV0b290aCgpICYmIHJvdXRlLm1hdGNoZXNTZWxlY3RvcihtU2VsZWN0b3IpOwotICAgICAgICBmaW5hbCBib29sZWFuIGlzQ29ubmVjdGluZyA9IGlzUmVtb3RlICYmIHJvdXRlLmlzQ29ubmVjdGluZygpOwotICAgICAgICBib29sZWFuIG5lZWRzUmVmcmVzaCA9IGZhbHNlOwotICAgICAgICBpZiAobVJlbW90ZUFjdGl2ZSAhPSBpc1JlbW90ZSkgewotICAgICAgICAgICAgbVJlbW90ZUFjdGl2ZSA9IGlzUmVtb3RlOwotICAgICAgICAgICAgbmVlZHNSZWZyZXNoID0gdHJ1ZTsKLSAgICAgICAgfQotICAgICAgICBpZiAobUlzQ29ubmVjdGluZyAhPSBpc0Nvbm5lY3RpbmcpIHsKLSAgICAgICAgICAgIG1Jc0Nvbm5lY3RpbmcgPSBpc0Nvbm5lY3Rpbmc7Ci0gICAgICAgICAgICBuZWVkc1JlZnJlc2ggPSB0cnVlOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKG5lZWRzUmVmcmVzaCkgewotICAgICAgICAgICAgdXBkYXRlQ29udGVudERlc2NyaXB0aW9uKCk7Ci0gICAgICAgICAgICByZWZyZXNoRHJhd2FibGVTdGF0ZSgpOwotICAgICAgICB9Ci0gICAgICAgIGlmIChtQXR0YWNoZWRUb1dpbmRvdykgewotICAgICAgICAgICAgc2V0RW5hYmxlZChtUm91dGVyLmlzUm91dGVBdmFpbGFibGUobVNlbGVjdG9yLAotICAgICAgICAgICAgICAgICAgICBNZWRpYVJvdXRlci5BVkFJTEFCSUxJVFlfRkxBR19JR05PUkVfREVGQVVMVF9ST1VURSkpOwotICAgICAgICB9Ci0gICAgICAgIGlmIChtUmVtb3RlSW5kaWNhdG9yICE9IG51bGwKLSAgICAgICAgICAgICAgICAmJiBtUmVtb3RlSW5kaWNhdG9yLmdldEN1cnJlbnQoKSBpbnN0YW5jZW9mIEFuaW1hdGlvbkRyYXdhYmxlKSB7Ci0gICAgICAgICAgICBBbmltYXRpb25EcmF3YWJsZSBjdXJEcmF3YWJsZSA9IChBbmltYXRpb25EcmF3YWJsZSkgbVJlbW90ZUluZGljYXRvci5nZXRDdXJyZW50KCk7Ci0gICAgICAgICAgICBpZiAobUF0dGFjaGVkVG9XaW5kb3cpIHsKLSAgICAgICAgICAgICAgICBpZiAoKG5lZWRzUmVmcmVzaCB8fCBpc0Nvbm5lY3RpbmcpICYmICFjdXJEcmF3YWJsZS5pc1J1bm5pbmcoKSkgewotICAgICAgICAgICAgICAgICAgICBjdXJEcmF3YWJsZS5zdGFydCgpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0gZWxzZSBpZiAoaXNSZW1vdGUgJiYgIWlzQ29ubmVjdGluZykgewotICAgICAgICAgICAgICAgIC8vIFdoZW4gdGhlIHJvdXRlIGlzIGFscmVhZHkgY29ubmVjdGVkIGJlZm9yZSB0aGUgdmlldyBpcyBhdHRhY2hlZCwgc2hvdyB0aGUgbGFzdAotICAgICAgICAgICAgICAgIC8vIGZyYW1lIG9mIHRoZSBjb25uZWN0ZWQgYW5pbWF0aW9uIGltbWVkaWF0ZWx5LgotICAgICAgICAgICAgICAgIGlmIChjdXJEcmF3YWJsZS5pc1J1bm5pbmcoKSkgewotICAgICAgICAgICAgICAgICAgICBjdXJEcmF3YWJsZS5zdG9wKCk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGN1ckRyYXdhYmxlLnNlbGVjdERyYXdhYmxlKGN1ckRyYXdhYmxlLmdldE51bWJlck9mRnJhbWVzKCkgLSAxKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLQotICAgIHByaXZhdGUgdm9pZCB1cGRhdGVDb250ZW50RGVzY3JpcHRpb24oKSB7Ci0gICAgICAgIGludCByZXNJZDsKLSAgICAgICAgaWYgKG1Jc0Nvbm5lY3RpbmcpIHsKLSAgICAgICAgICAgIHJlc0lkID0gUi5zdHJpbmcubXJfY2FzdF9idXR0b25fY29ubmVjdGluZzsKLSAgICAgICAgfSBlbHNlIGlmIChtUmVtb3RlQWN0aXZlKSB7Ci0gICAgICAgICAgICByZXNJZCA9IFIuc3RyaW5nLm1yX2Nhc3RfYnV0dG9uX2Nvbm5lY3RlZDsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIHJlc0lkID0gUi5zdHJpbmcubXJfY2FzdF9idXR0b25fZGlzY29ubmVjdGVkOwotICAgICAgICB9Ci0gICAgICAgIHNldENvbnRlbnREZXNjcmlwdGlvbihBcGlIZWxwZXIuZ2V0TGliUmVzb3VyY2VzKGdldENvbnRleHQoKSkuZ2V0U3RyaW5nKHJlc0lkKSk7Ci0gICAgfQotCi0gICAgcHJpdmF0ZSBmaW5hbCBjbGFzcyBNZWRpYVJvdXRlckNhbGxiYWNrIGV4dGVuZHMgTWVkaWFSb3V0ZXIuQ2FsbGJhY2sgewotICAgICAgICBNZWRpYVJvdXRlckNhbGxiYWNrKCkgewotICAgICAgICB9Ci0KLSAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgIHB1YmxpYyB2b2lkIG9uUm91dGVBZGRlZChNZWRpYVJvdXRlciByb3V0ZXIsIE1lZGlhUm91dGVyLlJvdXRlSW5mbyBpbmZvKSB7Ci0gICAgICAgICAgICByZWZyZXNoUm91dGUoKTsKLSAgICAgICAgfQotCi0gICAgICAgIEBPdmVycmlkZQotICAgICAgICBwdWJsaWMgdm9pZCBvblJvdXRlUmVtb3ZlZChNZWRpYVJvdXRlciByb3V0ZXIsIE1lZGlhUm91dGVyLlJvdXRlSW5mbyBpbmZvKSB7Ci0gICAgICAgICAgICByZWZyZXNoUm91dGUoKTsKLSAgICAgICAgfQotCi0gICAgICAgIEBPdmVycmlkZQotICAgICAgICBwdWJsaWMgdm9pZCBvblJvdXRlQ2hhbmdlZChNZWRpYVJvdXRlciByb3V0ZXIsIE1lZGlhUm91dGVyLlJvdXRlSW5mbyBpbmZvKSB7Ci0gICAgICAgICAgICByZWZyZXNoUm91dGUoKTsKLSAgICAgICAgfQotCi0gICAgICAgIEBPdmVycmlkZQotICAgICAgICBwdWJsaWMgdm9pZCBvblJvdXRlU2VsZWN0ZWQoTWVkaWFSb3V0ZXIgcm91dGVyLCBNZWRpYVJvdXRlci5Sb3V0ZUluZm8gaW5mbykgewotICAgICAgICAgICAgcmVmcmVzaFJvdXRlKCk7Ci0gICAgICAgIH0KLQotICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgcHVibGljIHZvaWQgb25Sb3V0ZVVuc2VsZWN0ZWQoTWVkaWFSb3V0ZXIgcm91dGVyLCBNZWRpYVJvdXRlci5Sb3V0ZUluZm8gaW5mbykgewotICAgICAgICAgICAgcmVmcmVzaFJvdXRlKCk7Ci0gICAgICAgIH0KLQotICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgcHVibGljIHZvaWQgb25Qcm92aWRlckFkZGVkKE1lZGlhUm91dGVyIHJvdXRlciwgTWVkaWFSb3V0ZXIuUHJvdmlkZXJJbmZvIHByb3ZpZGVyKSB7Ci0gICAgICAgICAgICByZWZyZXNoUm91dGUoKTsKLSAgICAgICAgfQotCi0gICAgICAgIEBPdmVycmlkZQotICAgICAgICBwdWJsaWMgdm9pZCBvblByb3ZpZGVyUmVtb3ZlZChNZWRpYVJvdXRlciByb3V0ZXIsIE1lZGlhUm91dGVyLlByb3ZpZGVySW5mbyBwcm92aWRlcikgewotICAgICAgICAgICAgcmVmcmVzaFJvdXRlKCk7Ci0gICAgICAgIH0KLQotICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgcHVibGljIHZvaWQgb25Qcm92aWRlckNoYW5nZWQoTWVkaWFSb3V0ZXIgcm91dGVyLCBNZWRpYVJvdXRlci5Qcm92aWRlckluZm8gcHJvdmlkZXIpIHsKLSAgICAgICAgICAgIHJlZnJlc2hSb3V0ZSgpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgcHJpdmF0ZSBmaW5hbCBjbGFzcyBSZW1vdGVJbmRpY2F0b3JMb2FkZXIgZXh0ZW5kcyBBc3luY1Rhc2s8Vm9pZCwgVm9pZCwgRHJhd2FibGU+IHsKLSAgICAgICAgcHJpdmF0ZSBmaW5hbCBpbnQgbVJlc0lkOwotCi0gICAgICAgIFJlbW90ZUluZGljYXRvckxvYWRlcihpbnQgcmVzSWQpIHsKLSAgICAgICAgICAgIG1SZXNJZCA9IHJlc0lkOwotICAgICAgICB9Ci0KLSAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgIHByb3RlY3RlZCBEcmF3YWJsZSBkb0luQmFja2dyb3VuZChWb2lkLi4uIHBhcmFtcykgewotICAgICAgICAgICAgcmV0dXJuIEFwaUhlbHBlci5nZXRMaWJSZXNvdXJjZXMoZ2V0Q29udGV4dCgpKS5nZXREcmF3YWJsZShtUmVzSWQpOwotICAgICAgICB9Ci0KLSAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgIHByb3RlY3RlZCB2b2lkIG9uUG9zdEV4ZWN1dGUoRHJhd2FibGUgcmVtb3RlSW5kaWNhdG9yKSB7Ci0gICAgICAgICAgICBjYWNoZUFuZFJlc2V0KHJlbW90ZUluZGljYXRvcik7Ci0gICAgICAgICAgICBzZXRSZW1vdGVJbmRpY2F0b3JEcmF3YWJsZShyZW1vdGVJbmRpY2F0b3IpOwotICAgICAgICB9Ci0KLSAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgIHByb3RlY3RlZCB2b2lkIG9uQ2FuY2VsbGVkKERyYXdhYmxlIHJlbW90ZUluZGljYXRvcikgewotICAgICAgICAgICAgY2FjaGVBbmRSZXNldChyZW1vdGVJbmRpY2F0b3IpOwotICAgICAgICB9Ci0KLSAgICAgICAgcHJpdmF0ZSB2b2lkIGNhY2hlQW5kUmVzZXQoRHJhd2FibGUgcmVtb3RlSW5kaWNhdG9yKSB7Ci0gICAgICAgICAgICBpZiAocmVtb3RlSW5kaWNhdG9yICE9IG51bGwpIHsKLSAgICAgICAgICAgICAgICBzUmVtb3RlSW5kaWNhdG9yQ2FjaGUucHV0KG1SZXNJZCwgcmVtb3RlSW5kaWNhdG9yLmdldENvbnN0YW50U3RhdGUoKSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBtUmVtb3RlSW5kaWNhdG9yTG9hZGVyID0gbnVsbDsKLSAgICAgICAgfQotICAgIH0KLX0KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL01lZGlhQ29tcG9uZW50cy9zcmMvY29tL2FuZHJvaWQvc3VwcG9ydC9tZWRpYXJvdXRlci9hcHAvTWVkaWFSb3V0ZUNob29zZXJEaWFsb2cuamF2YSBiL3BhY2thZ2VzL01lZGlhQ29tcG9uZW50cy9zcmMvY29tL2FuZHJvaWQvc3VwcG9ydC9tZWRpYXJvdXRlci9hcHAvTWVkaWFSb3V0ZUNob29zZXJEaWFsb2cuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggY2FjNjRkOS4uMDAwMDAwMAotLS0gYS9wYWNrYWdlcy9NZWRpYUNvbXBvbmVudHMvc3JjL2NvbS9hbmRyb2lkL3N1cHBvcnQvbWVkaWFyb3V0ZXIvYXBwL01lZGlhUm91dGVDaG9vc2VyRGlhbG9nLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw0MDUgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAyMDE4IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKLSAqCi0gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKLSAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KLSAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotICoKLSAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0gKgotICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQotICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKLSAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgotICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAotICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCi0gKi8KLQotcGFja2FnZSBjb20uYW5kcm9pZC5zdXBwb3J0Lm1lZGlhcm91dGVyLmFwcDsKLQotaW1wb3J0IHN0YXRpYyBjb20uYW5kcm9pZC5zdXBwb3J0Lm1lZGlhcm91dGVyLm1lZGlhLk1lZGlhUm91dGVyLlJvdXRlSW5mby5DT05ORUNUSU9OX1NUQVRFX0NPTk5FQ1RFRDsKLWltcG9ydCBzdGF0aWMgY29tLmFuZHJvaWQuc3VwcG9ydC5tZWRpYXJvdXRlci5tZWRpYS5NZWRpYVJvdXRlci5Sb3V0ZUluZm8uQ09OTkVDVElPTl9TVEFURV9DT05ORUNUSU5HOwotCi1pbXBvcnQgYW5kcm9pZC5hbm5vdGF0aW9uLk5vbk51bGw7Ci1pbXBvcnQgYW5kcm9pZC5hcHAuRGlhbG9nOwotaW1wb3J0IGFuZHJvaWQuY29udGVudC5Db250ZXh0OwotaW1wb3J0IGFuZHJvaWQuY29udGVudC5yZXMuUmVzb3VyY2VzOwotaW1wb3J0IGFuZHJvaWQuY29udGVudC5yZXMuVHlwZWRBcnJheTsKLWltcG9ydCBhbmRyb2lkLmdyYXBoaWNzLmRyYXdhYmxlLkRyYXdhYmxlOwotaW1wb3J0IGFuZHJvaWQubmV0LlVyaTsKLWltcG9ydCBhbmRyb2lkLm9zLkJ1bmRsZTsKLWltcG9ydCBhbmRyb2lkLm9zLkhhbmRsZXI7Ci1pbXBvcnQgYW5kcm9pZC5vcy5NZXNzYWdlOwotaW1wb3J0IGFuZHJvaWQub3MuU3lzdGVtQ2xvY2s7Ci1pbXBvcnQgYW5kcm9pZC5zdXBwb3J0LnY3LmFwcC5BcHBDb21wYXREaWFsb2c7Ci1pbXBvcnQgYW5kcm9pZC50ZXh0LlRleHRVdGlsczsKLWltcG9ydCBhbmRyb2lkLnV0aWwuTG9nOwotaW1wb3J0IGFuZHJvaWQudmlldy5Db250ZXh0VGhlbWVXcmFwcGVyOwotaW1wb3J0IGFuZHJvaWQudmlldy5HcmF2aXR5OwotaW1wb3J0IGFuZHJvaWQudmlldy5MYXlvdXRJbmZsYXRlcjsKLWltcG9ydCBhbmRyb2lkLnZpZXcuVmlldzsKLWltcG9ydCBhbmRyb2lkLnZpZXcuVmlld0dyb3VwOwotaW1wb3J0IGFuZHJvaWQud2lkZ2V0LkFkYXB0ZXJWaWV3OwotaW1wb3J0IGFuZHJvaWQud2lkZ2V0LkFycmF5QWRhcHRlcjsKLWltcG9ydCBhbmRyb2lkLndpZGdldC5JbWFnZVZpZXc7Ci1pbXBvcnQgYW5kcm9pZC53aWRnZXQuTGlzdFZpZXc7Ci1pbXBvcnQgYW5kcm9pZC53aWRnZXQuVGV4dFZpZXc7Ci0KLWltcG9ydCBjb20uYW5kcm9pZC5tZWRpYS51cGRhdGUuQXBpSGVscGVyOwotaW1wb3J0IGNvbS5hbmRyb2lkLm1lZGlhLnVwZGF0ZS5SOwotaW1wb3J0IGNvbS5hbmRyb2lkLnN1cHBvcnQubWVkaWFyb3V0ZXIubWVkaWEuTWVkaWFSb3V0ZVNlbGVjdG9yOwotaW1wb3J0IGNvbS5hbmRyb2lkLnN1cHBvcnQubWVkaWFyb3V0ZXIubWVkaWEuTWVkaWFSb3V0ZXI7Ci0KLWltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOwotaW1wb3J0IGphdmEuaW8uSW5wdXRTdHJlYW07Ci1pbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKLWltcG9ydCBqYXZhLnV0aWwuQ29sbGVjdGlvbnM7Ci1pbXBvcnQgamF2YS51dGlsLkNvbXBhcmF0b3I7Ci1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci0KLS8qKgotICogVGhpcyBjbGFzcyBpbXBsZW1lbnRzIHRoZSByb3V0ZSBjaG9vc2VyIGRpYWxvZyBmb3Ige0BsaW5rIE1lZGlhUm91dGVyfS4KLSAqIDxwPgotICogVGhpcyBkaWFsb2cgYWxsb3dzIHRoZSB1c2VyIHRvIGNob29zZSBhIHJvdXRlIHRoYXQgbWF0Y2hlcyBhIGdpdmVuIHNlbGVjdG9yLgotICogPC9wPgotICoKLSAqIEBzZWUgTWVkaWFSb3V0ZUJ1dHRvbgotICogQHNlZSBNZWRpYVJvdXRlQWN0aW9uUHJvdmlkZXIKLSAqLwotcHVibGljIGNsYXNzIE1lZGlhUm91dGVDaG9vc2VyRGlhbG9nIGV4dGVuZHMgRGlhbG9nIHsKLSAgICBzdGF0aWMgZmluYWwgU3RyaW5nIFRBRyA9ICJNZWRpYVJvdXRlQ2hvb3NlckRpYWxvZyI7Ci0KLSAgICAvLyBEbyBub3QgdXBkYXRlIHRoZSByb3V0ZSBsaXN0IGltbWVkaWF0ZWx5IHRvIGF2b2lkIHVubmF0dXJhbCBkaWFsb2cgY2hhbmdlLgotICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGxvbmcgVVBEQVRFX1JPVVRFU19ERUxBWV9NUyA9IDMwMEw7Ci0gICAgc3RhdGljIGZpbmFsIGludCBNU0dfVVBEQVRFX1JPVVRFUyA9IDE7Ci0KLSAgICBwcml2YXRlIGZpbmFsIE1lZGlhUm91dGVyIG1Sb3V0ZXI7Ci0gICAgcHJpdmF0ZSBmaW5hbCBNZWRpYVJvdXRlckNhbGxiYWNrIG1DYWxsYmFjazsKLQotICAgIHByaXZhdGUgVGV4dFZpZXcgbVRpdGxlVmlldzsKLSAgICBwcml2YXRlIE1lZGlhUm91dGVTZWxlY3RvciBtU2VsZWN0b3IgPSBNZWRpYVJvdXRlU2VsZWN0b3IuRU1QVFk7Ci0gICAgcHJpdmF0ZSBBcnJheUxpc3Q8TWVkaWFSb3V0ZXIuUm91dGVJbmZvPiBtUm91dGVzOwotICAgIHByaXZhdGUgUm91dGVBZGFwdGVyIG1BZGFwdGVyOwotICAgIHByaXZhdGUgTGlzdFZpZXcgbUxpc3RWaWV3OwotICAgIHByaXZhdGUgYm9vbGVhbiBtQXR0YWNoZWRUb1dpbmRvdzsKLSAgICBwcml2YXRlIGxvbmcgbUxhc3RVcGRhdGVUaW1lOwotICAgIHByaXZhdGUgZmluYWwgSGFuZGxlciBtSGFuZGxlciA9IG5ldyBIYW5kbGVyKCkgewotICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgcHVibGljIHZvaWQgaGFuZGxlTWVzc2FnZShNZXNzYWdlIG1lc3NhZ2UpIHsKLSAgICAgICAgICAgIHN3aXRjaCAobWVzc2FnZS53aGF0KSB7Ci0gICAgICAgICAgICAgICAgY2FzZSBNU0dfVVBEQVRFX1JPVVRFUzoKLSAgICAgICAgICAgICAgICAgICAgdXBkYXRlUm91dGVzKChMaXN0PE1lZGlhUm91dGVyLlJvdXRlSW5mbz4pIG1lc3NhZ2Uub2JqKTsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9OwotCi0gICAgcHVibGljIE1lZGlhUm91dGVDaG9vc2VyRGlhbG9nKENvbnRleHQgY29udGV4dCkgewotICAgICAgICB0aGlzKGNvbnRleHQsIDApOwotICAgIH0KLQotICAgIHB1YmxpYyBNZWRpYVJvdXRlQ2hvb3NlckRpYWxvZyhDb250ZXh0IGNvbnRleHQsIGludCB0aGVtZSkgewotICAgICAgICAvLyBUT0RPIChiLzcyOTc1OTc2KTogQXZvaWQgdG8gdXNlIENvbnRleHRUaGVtZVdyYXBwZXIgd2l0aCBhcHAgY29udGV4dCBhbmQgbGliIHRoZW1lLgotICAgICAgICBzdXBlcihuZXcgQ29udGV4dFRoZW1lV3JhcHBlcihjb250ZXh0LCBBcGlIZWxwZXIuZ2V0TGliVGhlbWUoY29udGV4dCwKLSAgICAgICAgICAgICAgICBNZWRpYVJvdXRlclRoZW1lSGVscGVyLmdldFJvdXRlclRoZW1lSWQoY29udGV4dCkpKSwgdGhlbWUpOwotICAgICAgICBjb250ZXh0ID0gZ2V0Q29udGV4dCgpOwotCi0gICAgICAgIG1Sb3V0ZXIgPSBNZWRpYVJvdXRlci5nZXRJbnN0YW5jZShjb250ZXh0KTsKLSAgICAgICAgbUNhbGxiYWNrID0gbmV3IE1lZGlhUm91dGVyQ2FsbGJhY2soKTsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBHZXRzIHRoZSBtZWRpYSByb3V0ZSBzZWxlY3RvciBmb3IgZmlsdGVyaW5nIHRoZSByb3V0ZXMgdGhhdCB0aGUgdXNlciBjYW4gc2VsZWN0LgotICAgICAqCi0gICAgICogQHJldHVybiBUaGUgc2VsZWN0b3IsIG5ldmVyIG51bGwuCi0gICAgICovCi0gICAgQE5vbk51bGwKLSAgICBwdWJsaWMgTWVkaWFSb3V0ZVNlbGVjdG9yIGdldFJvdXRlU2VsZWN0b3IoKSB7Ci0gICAgICAgIHJldHVybiBtU2VsZWN0b3I7Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogU2V0cyB0aGUgbWVkaWEgcm91dGUgc2VsZWN0b3IgZm9yIGZpbHRlcmluZyB0aGUgcm91dGVzIHRoYXQgdGhlIHVzZXIgY2FuIHNlbGVjdC4KLSAgICAgKgotICAgICAqIEBwYXJhbSBzZWxlY3RvciBUaGUgc2VsZWN0b3IsIG11c3Qgbm90IGJlIG51bGwuCi0gICAgICovCi0gICAgcHVibGljIHZvaWQgc2V0Um91dGVTZWxlY3RvcihATm9uTnVsbCBNZWRpYVJvdXRlU2VsZWN0b3Igc2VsZWN0b3IpIHsKLSAgICAgICAgaWYgKHNlbGVjdG9yID09IG51bGwpIHsKLSAgICAgICAgICAgIHRocm93IG5ldyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oInNlbGVjdG9yIG11c3Qgbm90IGJlIG51bGwiKTsKLSAgICAgICAgfQotCi0gICAgICAgIGlmICghbVNlbGVjdG9yLmVxdWFscyhzZWxlY3RvcikpIHsKLSAgICAgICAgICAgIG1TZWxlY3RvciA9IHNlbGVjdG9yOwotCi0gICAgICAgICAgICBpZiAobUF0dGFjaGVkVG9XaW5kb3cpIHsKLSAgICAgICAgICAgICAgICBtUm91dGVyLnJlbW92ZUNhbGxiYWNrKG1DYWxsYmFjayk7Ci0gICAgICAgICAgICAgICAgbVJvdXRlci5hZGRDYWxsYmFjayhzZWxlY3RvciwgbUNhbGxiYWNrLAotICAgICAgICAgICAgICAgICAgICAgICAgTWVkaWFSb3V0ZXIuQ0FMTEJBQ0tfRkxBR19QRVJGT1JNX0FDVElWRV9TQ0FOKTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgcmVmcmVzaFJvdXRlcygpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogQ2FsbGVkIHRvIGZpbHRlciB0aGUgc2V0IG9mIHJvdXRlcyB0aGF0IHNob3VsZCBiZSBpbmNsdWRlZCBpbiB0aGUgbGlzdC4KLSAgICAgKiA8cD4KLSAgICAgKiBUaGUgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiBpdGVyYXRlcyBvdmVyIGFsbCByb3V0ZXMgaW4gdGhlIHByb3ZpZGVkIGxpc3QgYW5kCi0gICAgICogcmVtb3ZlcyB0aG9zZSBmb3Igd2hpY2gge0BsaW5rICNvbkZpbHRlclJvdXRlfSByZXR1cm5zIGZhbHNlLgotICAgICAqIDwvcD4KLSAgICAgKgotICAgICAqIEBwYXJhbSByb3V0ZXMgVGhlIGxpc3Qgb2Ygcm91dGVzIHRvIGZpbHRlciBpbi1wbGFjZSwgbmV2ZXIgbnVsbC4KLSAgICAgKi8KLSAgICBwdWJsaWMgdm9pZCBvbkZpbHRlclJvdXRlcyhATm9uTnVsbCBMaXN0PE1lZGlhUm91dGVyLlJvdXRlSW5mbz4gcm91dGVzKSB7Ci0gICAgICAgIGZvciAoaW50IGkgPSByb3V0ZXMuc2l6ZSgpOyBpLS0gPiAwOyApIHsKLSAgICAgICAgICAgIGlmICghb25GaWx0ZXJSb3V0ZShyb3V0ZXMuZ2V0KGkpKSkgewotICAgICAgICAgICAgICAgIHJvdXRlcy5yZW1vdmUoaSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBSZXR1cm5zIHRydWUgaWYgdGhlIHJvdXRlIHNob3VsZCBiZSBpbmNsdWRlZCBpbiB0aGUgbGlzdC4KLSAgICAgKiA8cD4KLSAgICAgKiBUaGUgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIHRydWUgZm9yIGVuYWJsZWQgbm9uLWRlZmF1bHQgcm91dGVzIHRoYXQKLSAgICAgKiBtYXRjaCB0aGUgc2VsZWN0b3IuICBTdWJjbGFzc2VzIGNhbiBvdmVycmlkZSB0aGlzIG1ldGhvZCB0byBmaWx0ZXIgcm91dGVzCi0gICAgICogZGlmZmVyZW50bHkuCi0gICAgICogPC9wPgotICAgICAqCi0gICAgICogQHBhcmFtIHJvdXRlIFRoZSByb3V0ZSB0byBjb25zaWRlciwgbmV2ZXIgbnVsbC4KLSAgICAgKiBAcmV0dXJuIFRydWUgaWYgdGhlIHJvdXRlIHNob3VsZCBiZSBpbmNsdWRlZCBpbiB0aGUgY2hvb3NlciBkaWFsb2cuCi0gICAgICovCi0gICAgcHVibGljIGJvb2xlYW4gb25GaWx0ZXJSb3V0ZShATm9uTnVsbCBNZWRpYVJvdXRlci5Sb3V0ZUluZm8gcm91dGUpIHsKLSAgICAgICAgcmV0dXJuICFyb3V0ZS5pc0RlZmF1bHRPckJsdWV0b290aCgpICYmIHJvdXRlLmlzRW5hYmxlZCgpCi0gICAgICAgICAgICAgICAgJiYgcm91dGUubWF0Y2hlc1NlbGVjdG9yKG1TZWxlY3Rvcik7Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIHZvaWQgc2V0VGl0bGUoQ2hhclNlcXVlbmNlIHRpdGxlKSB7Ci0gICAgICAgIG1UaXRsZVZpZXcuc2V0VGV4dCh0aXRsZSk7Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIHZvaWQgc2V0VGl0bGUoaW50IHRpdGxlSWQpIHsKLSAgICAgICAgbVRpdGxlVmlldy5zZXRUZXh0KHRpdGxlSWQpOwotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHByb3RlY3RlZCB2b2lkIG9uQ3JlYXRlKEJ1bmRsZSBzYXZlZEluc3RhbmNlU3RhdGUpIHsKLSAgICAgICAgc3VwZXIub25DcmVhdGUoc2F2ZWRJbnN0YW5jZVN0YXRlKTsKLQotICAgICAgICBzZXRDb250ZW50VmlldyhBcGlIZWxwZXIuaW5mbGF0ZUxpYkxheW91dChnZXRDb250ZXh0KCksIEFwaUhlbHBlci5nZXRMaWJUaGVtZShnZXRDb250ZXh0KCksCi0gICAgICAgICAgICAgICAgTWVkaWFSb3V0ZXJUaGVtZUhlbHBlci5nZXRSb3V0ZXJUaGVtZUlkKGdldENvbnRleHQoKSkpLAotICAgICAgICAgICAgICAgIFIubGF5b3V0Lm1yX2Nob29zZXJfZGlhbG9nKSk7Ci0KLSAgICAgICAgbVJvdXRlcyA9IG5ldyBBcnJheUxpc3Q8PigpOwotICAgICAgICBtQWRhcHRlciA9IG5ldyBSb3V0ZUFkYXB0ZXIoZ2V0Q29udGV4dCgpLCBtUm91dGVzKTsKLSAgICAgICAgbUxpc3RWaWV3ID0gKExpc3RWaWV3KWZpbmRWaWV3QnlJZChSLmlkLm1yX2Nob29zZXJfbGlzdCk7Ci0gICAgICAgIG1MaXN0Vmlldy5zZXRBZGFwdGVyKG1BZGFwdGVyKTsKLSAgICAgICAgbUxpc3RWaWV3LnNldE9uSXRlbUNsaWNrTGlzdGVuZXIobUFkYXB0ZXIpOwotICAgICAgICBtTGlzdFZpZXcuc2V0RW1wdHlWaWV3KGZpbmRWaWV3QnlJZChhbmRyb2lkLlIuaWQuZW1wdHkpKTsKLSAgICAgICAgbVRpdGxlVmlldyA9IGZpbmRWaWV3QnlJZChSLmlkLm1yX2Nob29zZXJfdGl0bGUpOwotCi0gICAgICAgIHVwZGF0ZUxheW91dCgpOwotICAgIH0KLQotICAgIC8qKgotICAgICAqIFNldHMgdGhlIHdpZHRoIG9mIHRoZSBkaWFsb2cuIEFsc28gY2FsbGVkIHdoZW4gY29uZmlndXJhdGlvbiBjaGFuZ2VzLgotICAgICAqLwotICAgIHZvaWQgdXBkYXRlTGF5b3V0KCkgewotICAgICAgICBnZXRXaW5kb3coKS5zZXRMYXlvdXQoTWVkaWFSb3V0ZURpYWxvZ0hlbHBlci5nZXREaWFsb2dXaWR0aChnZXRDb250ZXh0KCkpLAotICAgICAgICAgICAgICAgIFZpZXdHcm91cC5MYXlvdXRQYXJhbXMuV1JBUF9DT05URU5UKTsKLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgdm9pZCBvbkF0dGFjaGVkVG9XaW5kb3coKSB7Ci0gICAgICAgIHN1cGVyLm9uQXR0YWNoZWRUb1dpbmRvdygpOwotCi0gICAgICAgIG1BdHRhY2hlZFRvV2luZG93ID0gdHJ1ZTsKLSAgICAgICAgbVJvdXRlci5hZGRDYWxsYmFjayhtU2VsZWN0b3IsIG1DYWxsYmFjaywgTWVkaWFSb3V0ZXIuQ0FMTEJBQ0tfRkxBR19QRVJGT1JNX0FDVElWRV9TQ0FOKTsKLSAgICAgICAgcmVmcmVzaFJvdXRlcygpOwotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyB2b2lkIG9uRGV0YWNoZWRGcm9tV2luZG93KCkgewotICAgICAgICBtQXR0YWNoZWRUb1dpbmRvdyA9IGZhbHNlOwotICAgICAgICBtUm91dGVyLnJlbW92ZUNhbGxiYWNrKG1DYWxsYmFjayk7Ci0gICAgICAgIG1IYW5kbGVyLnJlbW92ZU1lc3NhZ2VzKE1TR19VUERBVEVfUk9VVEVTKTsKLQotICAgICAgICBzdXBlci5vbkRldGFjaGVkRnJvbVdpbmRvdygpOwotICAgIH0KLQotICAgIC8qKgotICAgICAqIFJlZnJlc2hlcyB0aGUgbGlzdCBvZiByb3V0ZXMgdGhhdCBhcmUgc2hvd24gaW4gdGhlIGNob29zZXIgZGlhbG9nLgotICAgICAqLwotICAgIHB1YmxpYyB2b2lkIHJlZnJlc2hSb3V0ZXMoKSB7Ci0gICAgICAgIGlmIChtQXR0YWNoZWRUb1dpbmRvdykgewotICAgICAgICAgICAgQXJyYXlMaXN0PE1lZGlhUm91dGVyLlJvdXRlSW5mbz4gcm91dGVzID0gbmV3IEFycmF5TGlzdDw+KG1Sb3V0ZXIuZ2V0Um91dGVzKCkpOwotICAgICAgICAgICAgb25GaWx0ZXJSb3V0ZXMocm91dGVzKTsKLSAgICAgICAgICAgIENvbGxlY3Rpb25zLnNvcnQocm91dGVzLCBSb3V0ZUNvbXBhcmF0b3Iuc0luc3RhbmNlKTsKLSAgICAgICAgICAgIGlmIChTeXN0ZW1DbG9jay51cHRpbWVNaWxsaXMoKSAtIG1MYXN0VXBkYXRlVGltZSA+PSBVUERBVEVfUk9VVEVTX0RFTEFZX01TKSB7Ci0gICAgICAgICAgICAgICAgdXBkYXRlUm91dGVzKHJvdXRlcyk7Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIG1IYW5kbGVyLnJlbW92ZU1lc3NhZ2VzKE1TR19VUERBVEVfUk9VVEVTKTsKLSAgICAgICAgICAgICAgICBtSGFuZGxlci5zZW5kTWVzc2FnZUF0VGltZShtSGFuZGxlci5vYnRhaW5NZXNzYWdlKE1TR19VUERBVEVfUk9VVEVTLCByb3V0ZXMpLAotICAgICAgICAgICAgICAgICAgICAgICAgbUxhc3RVcGRhdGVUaW1lICsgVVBEQVRFX1JPVVRFU19ERUxBWV9NUyk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICB2b2lkIHVwZGF0ZVJvdXRlcyhMaXN0PE1lZGlhUm91dGVyLlJvdXRlSW5mbz4gcm91dGVzKSB7Ci0gICAgICAgIG1MYXN0VXBkYXRlVGltZSA9IFN5c3RlbUNsb2NrLnVwdGltZU1pbGxpcygpOwotICAgICAgICBtUm91dGVzLmNsZWFyKCk7Ci0gICAgICAgIG1Sb3V0ZXMuYWRkQWxsKHJvdXRlcyk7Ci0gICAgICAgIG1BZGFwdGVyLm5vdGlmeURhdGFTZXRDaGFuZ2VkKCk7Ci0gICAgfQotCi0gICAgcHJpdmF0ZSBmaW5hbCBjbGFzcyBSb3V0ZUFkYXB0ZXIgZXh0ZW5kcyBBcnJheUFkYXB0ZXI8TWVkaWFSb3V0ZXIuUm91dGVJbmZvPgotICAgICAgICAgICAgaW1wbGVtZW50cyBMaXN0Vmlldy5Pbkl0ZW1DbGlja0xpc3RlbmVyIHsKLSAgICAgICAgcHJpdmF0ZSBmaW5hbCBEcmF3YWJsZSBtRGVmYXVsdEljb247Ci0gICAgICAgIHByaXZhdGUgZmluYWwgRHJhd2FibGUgbVR2SWNvbjsKLSAgICAgICAgcHJpdmF0ZSBmaW5hbCBEcmF3YWJsZSBtU3BlYWtlckljb247Ci0gICAgICAgIHByaXZhdGUgZmluYWwgRHJhd2FibGUgbVNwZWFrZXJHcm91cEljb247Ci0KLSAgICAgICAgcHVibGljIFJvdXRlQWRhcHRlcihDb250ZXh0IGNvbnRleHQsIExpc3Q8TWVkaWFSb3V0ZXIuUm91dGVJbmZvPiByb3V0ZXMpIHsKLSAgICAgICAgICAgIHN1cGVyKGNvbnRleHQsIDAsIHJvdXRlcyk7Ci0KLSAgICAgICAgICAgIFR5cGVkQXJyYXkgc3R5bGVkQXR0cmlidXRlcyA9IEFwaUhlbHBlci5nZXRMaWJUaGVtZShjb250ZXh0LAotICAgICAgICAgICAgICAgICAgICBNZWRpYVJvdXRlclRoZW1lSGVscGVyLmdldFJvdXRlclRoZW1lSWQoY29udGV4dCkpLm9idGFpblN0eWxlZEF0dHJpYnV0ZXMoCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3IGludFtdIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUi5hdHRyLm1lZGlhUm91dGVEZWZhdWx0SWNvbkRyYXdhYmxlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSLmF0dHIubWVkaWFSb3V0ZVR2SWNvbkRyYXdhYmxlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSLmF0dHIubWVkaWFSb3V0ZVNwZWFrZXJJY29uRHJhd2FibGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFIuYXR0ci5tZWRpYVJvdXRlU3BlYWtlckdyb3VwSWNvbkRyYXdhYmxlCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7Ci0KLSAgICAgICAgICAgIG1EZWZhdWx0SWNvbiA9IHN0eWxlZEF0dHJpYnV0ZXMuZ2V0RHJhd2FibGUoMCk7Ci0gICAgICAgICAgICBtVHZJY29uID0gc3R5bGVkQXR0cmlidXRlcy5nZXREcmF3YWJsZSgxKTsKLSAgICAgICAgICAgIG1TcGVha2VySWNvbiA9IHN0eWxlZEF0dHJpYnV0ZXMuZ2V0RHJhd2FibGUoMik7Ci0gICAgICAgICAgICBtU3BlYWtlckdyb3VwSWNvbiA9IHN0eWxlZEF0dHJpYnV0ZXMuZ2V0RHJhd2FibGUoMyk7Ci0gICAgICAgICAgICBzdHlsZWRBdHRyaWJ1dGVzLnJlY3ljbGUoKTsKLSAgICAgICAgfQotCi0gICAgICAgIEBPdmVycmlkZQotICAgICAgICBwdWJsaWMgYm9vbGVhbiBhcmVBbGxJdGVtc0VuYWJsZWQoKSB7Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0KLQotICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgcHVibGljIGJvb2xlYW4gaXNFbmFibGVkKGludCBwb3NpdGlvbikgewotICAgICAgICAgICAgcmV0dXJuIGdldEl0ZW0ocG9zaXRpb24pLmlzRW5hYmxlZCgpOwotICAgICAgICB9Ci0KLSAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgIHB1YmxpYyBWaWV3IGdldFZpZXcoaW50IHBvc2l0aW9uLCBWaWV3IGNvbnZlcnRWaWV3LCBWaWV3R3JvdXAgcGFyZW50KSB7Ci0gICAgICAgICAgICBWaWV3IHZpZXcgPSBjb252ZXJ0VmlldzsKLSAgICAgICAgICAgIGlmICh2aWV3ID09IG51bGwpIHsKLSAgICAgICAgICAgICAgICB2aWV3ID0gQXBpSGVscGVyLmluZmxhdGVMaWJMYXlvdXQoZ2V0Q29udGV4dCgpLAotICAgICAgICAgICAgICAgICAgICAgICAgQXBpSGVscGVyLmdldExpYlRoZW1lKGdldENvbnRleHQoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTWVkaWFSb3V0ZXJUaGVtZUhlbHBlci5nZXRSb3V0ZXJUaGVtZUlkKGdldENvbnRleHQoKSkpLAotICAgICAgICAgICAgICAgICAgICAgICAgUi5sYXlvdXQubXJfY2hvb3Nlcl9saXN0X2l0ZW0sIHBhcmVudCwgZmFsc2UpOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBNZWRpYVJvdXRlci5Sb3V0ZUluZm8gcm91dGUgPSBnZXRJdGVtKHBvc2l0aW9uKTsKLSAgICAgICAgICAgIFRleHRWaWV3IHRleHQxID0gKFRleHRWaWV3KSB2aWV3LmZpbmRWaWV3QnlJZChSLmlkLm1yX2Nob29zZXJfcm91dGVfbmFtZSk7Ci0gICAgICAgICAgICBUZXh0VmlldyB0ZXh0MiA9IChUZXh0Vmlldykgdmlldy5maW5kVmlld0J5SWQoUi5pZC5tcl9jaG9vc2VyX3JvdXRlX2Rlc2MpOwotICAgICAgICAgICAgdGV4dDEuc2V0VGV4dChyb3V0ZS5nZXROYW1lKCkpOwotICAgICAgICAgICAgU3RyaW5nIGRlc2NyaXB0aW9uID0gcm91dGUuZ2V0RGVzY3JpcHRpb24oKTsKLSAgICAgICAgICAgIGJvb2xlYW4gaXNDb25uZWN0ZWRPckNvbm5lY3RpbmcgPQotICAgICAgICAgICAgICAgICAgICByb3V0ZS5nZXRDb25uZWN0aW9uU3RhdGUoKSA9PSBDT05ORUNUSU9OX1NUQVRFX0NPTk5FQ1RFRAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHx8IHJvdXRlLmdldENvbm5lY3Rpb25TdGF0ZSgpID09IENPTk5FQ1RJT05fU1RBVEVfQ09OTkVDVElORzsKLSAgICAgICAgICAgIGlmIChpc0Nvbm5lY3RlZE9yQ29ubmVjdGluZyAmJiAhVGV4dFV0aWxzLmlzRW1wdHkoZGVzY3JpcHRpb24pKSB7Ci0gICAgICAgICAgICAgICAgdGV4dDEuc2V0R3Jhdml0eShHcmF2aXR5LkJPVFRPTSk7Ci0gICAgICAgICAgICAgICAgdGV4dDIuc2V0VmlzaWJpbGl0eShWaWV3LlZJU0lCTEUpOwotICAgICAgICAgICAgICAgIHRleHQyLnNldFRleHQoZGVzY3JpcHRpb24pOwotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICB0ZXh0MS5zZXRHcmF2aXR5KEdyYXZpdHkuQ0VOVEVSX1ZFUlRJQ0FMKTsKLSAgICAgICAgICAgICAgICB0ZXh0Mi5zZXRWaXNpYmlsaXR5KFZpZXcuR09ORSk7Ci0gICAgICAgICAgICAgICAgdGV4dDIuc2V0VGV4dCgiIik7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICB2aWV3LnNldEVuYWJsZWQocm91dGUuaXNFbmFibGVkKCkpOwotCi0gICAgICAgICAgICBJbWFnZVZpZXcgaWNvblZpZXcgPSAoSW1hZ2VWaWV3KSB2aWV3LmZpbmRWaWV3QnlJZChSLmlkLm1yX2Nob29zZXJfcm91dGVfaWNvbik7Ci0gICAgICAgICAgICBpZiAoaWNvblZpZXcgIT0gbnVsbCkgewotICAgICAgICAgICAgICAgIGljb25WaWV3LnNldEltYWdlRHJhd2FibGUoZ2V0SWNvbkRyYXdhYmxlKHJvdXRlKSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICByZXR1cm4gdmlldzsKLSAgICAgICAgfQotCi0gICAgICAgIEBPdmVycmlkZQotICAgICAgICBwdWJsaWMgdm9pZCBvbkl0ZW1DbGljayhBZGFwdGVyVmlldzw/PiBwYXJlbnQsIFZpZXcgdmlldywgaW50IHBvc2l0aW9uLCBsb25nIGlkKSB7Ci0gICAgICAgICAgICBNZWRpYVJvdXRlci5Sb3V0ZUluZm8gcm91dGUgPSBnZXRJdGVtKHBvc2l0aW9uKTsKLSAgICAgICAgICAgIGlmIChyb3V0ZS5pc0VuYWJsZWQoKSkgewotICAgICAgICAgICAgICAgIHJvdXRlLnNlbGVjdCgpOwotICAgICAgICAgICAgICAgIGRpc21pc3MoKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIHByaXZhdGUgRHJhd2FibGUgZ2V0SWNvbkRyYXdhYmxlKE1lZGlhUm91dGVyLlJvdXRlSW5mbyByb3V0ZSkgewotICAgICAgICAgICAgVXJpIGljb25VcmkgPSByb3V0ZS5nZXRJY29uVXJpKCk7Ci0gICAgICAgICAgICBpZiAoaWNvblVyaSAhPSBudWxsKSB7Ci0gICAgICAgICAgICAgICAgdHJ5IHsKLSAgICAgICAgICAgICAgICAgICAgSW5wdXRTdHJlYW0gaXMgPSBnZXRDb250ZXh0KCkuZ2V0Q29udGVudFJlc29sdmVyKCkub3BlbklucHV0U3RyZWFtKGljb25VcmkpOwotICAgICAgICAgICAgICAgICAgICBEcmF3YWJsZSBkcmF3YWJsZSA9IERyYXdhYmxlLmNyZWF0ZUZyb21TdHJlYW0oaXMsIG51bGwpOwotICAgICAgICAgICAgICAgICAgICBpZiAoZHJhd2FibGUgIT0gbnVsbCkgewotICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGRyYXdhYmxlOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfSBjYXRjaCAoSU9FeGNlcHRpb24gZSkgewotICAgICAgICAgICAgICAgICAgICBMb2cudyhUQUcsICJGYWlsZWQgdG8gbG9hZCAiICsgaWNvblVyaSwgZSk7Ci0gICAgICAgICAgICAgICAgICAgIC8vIEZhbGxzIGJhY2suCi0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICAgICAgcmV0dXJuIGdldERlZmF1bHRJY29uRHJhd2FibGUocm91dGUpOwotICAgICAgICB9Ci0KLSAgICAgICAgcHJpdmF0ZSBEcmF3YWJsZSBnZXREZWZhdWx0SWNvbkRyYXdhYmxlKE1lZGlhUm91dGVyLlJvdXRlSW5mbyByb3V0ZSkgewotICAgICAgICAgICAgLy8gSWYgdGhlIHR5cGUgb2YgdGhlIHJlY2VpdmVyIGRldmljZSBpcyBzcGVjaWZpZWQsIHVzZSBpdC4KLSAgICAgICAgICAgIHN3aXRjaCAocm91dGUuZ2V0RGV2aWNlVHlwZSgpKSB7Ci0gICAgICAgICAgICAgICAgY2FzZSAgTWVkaWFSb3V0ZXIuUm91dGVJbmZvLkRFVklDRV9UWVBFX1RWOgotICAgICAgICAgICAgICAgICAgICByZXR1cm4gbVR2SWNvbjsKLSAgICAgICAgICAgICAgICBjYXNlIE1lZGlhUm91dGVyLlJvdXRlSW5mby5ERVZJQ0VfVFlQRV9TUEVBS0VSOgotICAgICAgICAgICAgICAgICAgICByZXR1cm4gbVNwZWFrZXJJY29uOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAvLyBPdGhlcndpc2UsIG1ha2UgdGhlIGJlc3QgZ3Vlc3MgYmFzZWQgb24gb3RoZXIgcm91dGUgaW5mb3JtYXRpb24uCi0gICAgICAgICAgICBpZiAocm91dGUgaW5zdGFuY2VvZiBNZWRpYVJvdXRlci5Sb3V0ZUdyb3VwKSB7Ci0gICAgICAgICAgICAgICAgLy8gT25seSBzcGVha2VycyBjYW4gYmUgZ3JvdXBlZCBmb3Igbm93LgotICAgICAgICAgICAgICAgIHJldHVybiBtU3BlYWtlckdyb3VwSWNvbjsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHJldHVybiBtRGVmYXVsdEljb247Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBwcml2YXRlIGZpbmFsIGNsYXNzIE1lZGlhUm91dGVyQ2FsbGJhY2sgZXh0ZW5kcyBNZWRpYVJvdXRlci5DYWxsYmFjayB7Ci0gICAgICAgIE1lZGlhUm91dGVyQ2FsbGJhY2soKSB7Ci0gICAgICAgIH0KLQotICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgcHVibGljIHZvaWQgb25Sb3V0ZUFkZGVkKE1lZGlhUm91dGVyIHJvdXRlciwgTWVkaWFSb3V0ZXIuUm91dGVJbmZvIGluZm8pIHsKLSAgICAgICAgICAgIHJlZnJlc2hSb3V0ZXMoKTsKLSAgICAgICAgfQotCi0gICAgICAgIEBPdmVycmlkZQotICAgICAgICBwdWJsaWMgdm9pZCBvblJvdXRlUmVtb3ZlZChNZWRpYVJvdXRlciByb3V0ZXIsIE1lZGlhUm91dGVyLlJvdXRlSW5mbyBpbmZvKSB7Ci0gICAgICAgICAgICByZWZyZXNoUm91dGVzKCk7Ci0gICAgICAgIH0KLQotICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgcHVibGljIHZvaWQgb25Sb3V0ZUNoYW5nZWQoTWVkaWFSb3V0ZXIgcm91dGVyLCBNZWRpYVJvdXRlci5Sb3V0ZUluZm8gaW5mbykgewotICAgICAgICAgICAgcmVmcmVzaFJvdXRlcygpOwotICAgICAgICB9Ci0KLSAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgIHB1YmxpYyB2b2lkIG9uUm91dGVTZWxlY3RlZChNZWRpYVJvdXRlciByb3V0ZXIsIE1lZGlhUm91dGVyLlJvdXRlSW5mbyByb3V0ZSkgewotICAgICAgICAgICAgZGlzbWlzcygpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgc3RhdGljIGZpbmFsIGNsYXNzIFJvdXRlQ29tcGFyYXRvciBpbXBsZW1lbnRzIENvbXBhcmF0b3I8TWVkaWFSb3V0ZXIuUm91dGVJbmZvPiB7Ci0gICAgICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgUm91dGVDb21wYXJhdG9yIHNJbnN0YW5jZSA9IG5ldyBSb3V0ZUNvbXBhcmF0b3IoKTsKLQotICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgcHVibGljIGludCBjb21wYXJlKE1lZGlhUm91dGVyLlJvdXRlSW5mbyBsaHMsIE1lZGlhUm91dGVyLlJvdXRlSW5mbyByaHMpIHsKLSAgICAgICAgICAgIHJldHVybiBsaHMuZ2V0TmFtZSgpLmNvbXBhcmVUb0lnbm9yZUNhc2UocmhzLmdldE5hbWUoKSk7Ci0gICAgICAgIH0KLSAgICB9Ci19CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9NZWRpYUNvbXBvbmVudHMvc3JjL2NvbS9hbmRyb2lkL3N1cHBvcnQvbWVkaWFyb3V0ZXIvYXBwL01lZGlhUm91dGVDaG9vc2VyRGlhbG9nRnJhZ21lbnQuamF2YSBiL3BhY2thZ2VzL01lZGlhQ29tcG9uZW50cy9zcmMvY29tL2FuZHJvaWQvc3VwcG9ydC9tZWRpYXJvdXRlci9hcHAvTWVkaWFSb3V0ZUNob29zZXJEaWFsb2dGcmFnbWVudC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2NWU2YjI5Li4wMDAwMDAwCi0tLSBhL3BhY2thZ2VzL01lZGlhQ29tcG9uZW50cy9zcmMvY29tL2FuZHJvaWQvc3VwcG9ydC9tZWRpYXJvdXRlci9hcHAvTWVkaWFSb3V0ZUNob29zZXJEaWFsb2dGcmFnbWVudC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTI2ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgMjAxOCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0Ci0gKgotICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7Ci0gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCi0gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLSAqCi0gKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotICoKLSAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKLSAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCi0gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KLSAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKLSAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgotICovCi0KLXBhY2thZ2UgY29tLmFuZHJvaWQuc3VwcG9ydC5tZWRpYXJvdXRlci5hcHA7Ci0KLWltcG9ydCBhbmRyb2lkLmFwcC5EaWFsb2c7Ci1pbXBvcnQgYW5kcm9pZC5hcHAuRGlhbG9nRnJhZ21lbnQ7Ci1pbXBvcnQgYW5kcm9pZC5jb250ZW50LkNvbnRleHQ7Ci1pbXBvcnQgYW5kcm9pZC5jb250ZW50LnJlcy5Db25maWd1cmF0aW9uOwotaW1wb3J0IGFuZHJvaWQub3MuQnVuZGxlOwotCi1pbXBvcnQgY29tLmFuZHJvaWQuc3VwcG9ydC5tZWRpYXJvdXRlci5tZWRpYS5NZWRpYVJvdXRlU2VsZWN0b3I7Ci0KLS8qKgotICogTWVkaWEgcm91dGUgY2hvb3NlciBkaWFsb2cgZnJhZ21lbnQuCi0gKiA8cD4KLSAqIENyZWF0ZXMgYSB7QGxpbmsgTWVkaWFSb3V0ZUNob29zZXJEaWFsb2d9LiAgVGhlIGFwcGxpY2F0aW9uIG1heSBzdWJjbGFzcwotICogdGhpcyBkaWFsb2cgZnJhZ21lbnQgdG8gY3VzdG9taXplIHRoZSBtZWRpYSByb3V0ZSBjaG9vc2VyIGRpYWxvZy4KLSAqIDwvcD4KLSAqLwotcHVibGljIGNsYXNzIE1lZGlhUm91dGVDaG9vc2VyRGlhbG9nRnJhZ21lbnQgZXh0ZW5kcyBEaWFsb2dGcmFnbWVudCB7Ci0gICAgcHJpdmF0ZSBmaW5hbCBTdHJpbmcgQVJHVU1FTlRfU0VMRUNUT1IgPSAic2VsZWN0b3IiOwotCi0gICAgcHJpdmF0ZSBNZWRpYVJvdXRlQ2hvb3NlckRpYWxvZyBtRGlhbG9nOwotICAgIHByaXZhdGUgTWVkaWFSb3V0ZVNlbGVjdG9yIG1TZWxlY3RvcjsKLQotICAgIC8qKgotICAgICAqIENyZWF0ZXMgYSBtZWRpYSByb3V0ZSBjaG9vc2VyIGRpYWxvZyBmcmFnbWVudC4KLSAgICAgKiA8cD4KLSAgICAgKiBBbGwgc3ViY2xhc3NlcyBvZiB0aGlzIGNsYXNzIG11c3QgYWxzbyBwb3NzZXNzIGEgZGVmYXVsdCBjb25zdHJ1Y3Rvci4KLSAgICAgKiA8L3A+Ci0gICAgICovCi0gICAgcHVibGljIE1lZGlhUm91dGVDaG9vc2VyRGlhbG9nRnJhZ21lbnQoKSB7Ci0gICAgICAgIHNldENhbmNlbGFibGUodHJ1ZSk7Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogR2V0cyB0aGUgbWVkaWEgcm91dGUgc2VsZWN0b3IgZm9yIGZpbHRlcmluZyB0aGUgcm91dGVzIHRoYXQgdGhlIHVzZXIgY2FuIHNlbGVjdC4KLSAgICAgKgotICAgICAqIEByZXR1cm4gVGhlIHNlbGVjdG9yLCBuZXZlciBudWxsLgotICAgICAqLwotICAgIHB1YmxpYyBNZWRpYVJvdXRlU2VsZWN0b3IgZ2V0Um91dGVTZWxlY3RvcigpIHsKLSAgICAgICAgZW5zdXJlUm91dGVTZWxlY3RvcigpOwotICAgICAgICByZXR1cm4gbVNlbGVjdG9yOwotICAgIH0KLQotICAgIHByaXZhdGUgdm9pZCBlbnN1cmVSb3V0ZVNlbGVjdG9yKCkgewotICAgICAgICBpZiAobVNlbGVjdG9yID09IG51bGwpIHsKLSAgICAgICAgICAgIEJ1bmRsZSBhcmdzID0gZ2V0QXJndW1lbnRzKCk7Ci0gICAgICAgICAgICBpZiAoYXJncyAhPSBudWxsKSB7Ci0gICAgICAgICAgICAgICAgbVNlbGVjdG9yID0gTWVkaWFSb3V0ZVNlbGVjdG9yLmZyb21CdW5kbGUoYXJncy5nZXRCdW5kbGUoQVJHVU1FTlRfU0VMRUNUT1IpKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmIChtU2VsZWN0b3IgPT0gbnVsbCkgewotICAgICAgICAgICAgICAgIG1TZWxlY3RvciA9IE1lZGlhUm91dGVTZWxlY3Rvci5FTVBUWTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLQotICAgIC8qKgotICAgICAqIFNldHMgdGhlIG1lZGlhIHJvdXRlIHNlbGVjdG9yIGZvciBmaWx0ZXJpbmcgdGhlIHJvdXRlcyB0aGF0IHRoZSB1c2VyIGNhbiBzZWxlY3QuCi0gICAgICogVGhpcyBtZXRob2QgbXVzdCBiZSBjYWxsZWQgYmVmb3JlIHRoZSBmcmFnbWVudCBpcyBhZGRlZC4KLSAgICAgKgotICAgICAqIEBwYXJhbSBzZWxlY3RvciBUaGUgc2VsZWN0b3IgdG8gc2V0LgotICAgICAqLwotICAgIHB1YmxpYyB2b2lkIHNldFJvdXRlU2VsZWN0b3IoTWVkaWFSb3V0ZVNlbGVjdG9yIHNlbGVjdG9yKSB7Ci0gICAgICAgIGlmIChzZWxlY3RvciA9PSBudWxsKSB7Ci0gICAgICAgICAgICB0aHJvdyBuZXcgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKCJzZWxlY3RvciBtdXN0IG5vdCBiZSBudWxsIik7Ci0gICAgICAgIH0KLQotICAgICAgICBlbnN1cmVSb3V0ZVNlbGVjdG9yKCk7Ci0gICAgICAgIGlmICghbVNlbGVjdG9yLmVxdWFscyhzZWxlY3RvcikpIHsKLSAgICAgICAgICAgIG1TZWxlY3RvciA9IHNlbGVjdG9yOwotCi0gICAgICAgICAgICBCdW5kbGUgYXJncyA9IGdldEFyZ3VtZW50cygpOwotICAgICAgICAgICAgaWYgKGFyZ3MgPT0gbnVsbCkgewotICAgICAgICAgICAgICAgIGFyZ3MgPSBuZXcgQnVuZGxlKCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBhcmdzLnB1dEJ1bmRsZShBUkdVTUVOVF9TRUxFQ1RPUiwgc2VsZWN0b3IuYXNCdW5kbGUoKSk7Ci0gICAgICAgICAgICBzZXRBcmd1bWVudHMoYXJncyk7Ci0KLSAgICAgICAgICAgIE1lZGlhUm91dGVDaG9vc2VyRGlhbG9nIGRpYWxvZyA9IChNZWRpYVJvdXRlQ2hvb3NlckRpYWxvZylnZXREaWFsb2coKTsKLSAgICAgICAgICAgIGlmIChkaWFsb2cgIT0gbnVsbCkgewotICAgICAgICAgICAgICAgIGRpYWxvZy5zZXRSb3V0ZVNlbGVjdG9yKHNlbGVjdG9yKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLQotICAgIC8qKgotICAgICAqIENhbGxlZCB3aGVuIHRoZSBjaG9vc2VyIGRpYWxvZyBpcyBiZWluZyBjcmVhdGVkLgotICAgICAqIDxwPgotICAgICAqIFN1YmNsYXNzZXMgbWF5IG92ZXJyaWRlIHRoaXMgbWV0aG9kIHRvIGN1c3RvbWl6ZSB0aGUgZGlhbG9nLgotICAgICAqIDwvcD4KLSAgICAgKi8KLSAgICBwdWJsaWMgTWVkaWFSb3V0ZUNob29zZXJEaWFsb2cgb25DcmVhdGVDaG9vc2VyRGlhbG9nKAotICAgICAgICAgICAgQ29udGV4dCBjb250ZXh0LCBCdW5kbGUgc2F2ZWRJbnN0YW5jZVN0YXRlKSB7Ci0gICAgICAgIHJldHVybiBuZXcgTWVkaWFSb3V0ZUNob29zZXJEaWFsb2coY29udGV4dCk7Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIERpYWxvZyBvbkNyZWF0ZURpYWxvZyhCdW5kbGUgc2F2ZWRJbnN0YW5jZVN0YXRlKSB7Ci0gICAgICAgIG1EaWFsb2cgPSBvbkNyZWF0ZUNob29zZXJEaWFsb2coZ2V0Q29udGV4dCgpLCBzYXZlZEluc3RhbmNlU3RhdGUpOwotICAgICAgICBtRGlhbG9nLnNldFJvdXRlU2VsZWN0b3IoZ2V0Um91dGVTZWxlY3RvcigpKTsKLSAgICAgICAgcmV0dXJuIG1EaWFsb2c7Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIHZvaWQgb25Db25maWd1cmF0aW9uQ2hhbmdlZChDb25maWd1cmF0aW9uIG5ld0NvbmZpZykgewotICAgICAgICBzdXBlci5vbkNvbmZpZ3VyYXRpb25DaGFuZ2VkKG5ld0NvbmZpZyk7Ci0gICAgICAgIGlmIChtRGlhbG9nICE9IG51bGwpIHsKLSAgICAgICAgICAgIG1EaWFsb2cudXBkYXRlTGF5b3V0KCk7Ci0gICAgICAgIH0KLSAgICB9Ci19CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9NZWRpYUNvbXBvbmVudHMvc3JjL2NvbS9hbmRyb2lkL3N1cHBvcnQvbWVkaWFyb3V0ZXIvYXBwL01lZGlhUm91dGVDb250cm9sbGVyRGlhbG9nLmphdmEgYi9wYWNrYWdlcy9NZWRpYUNvbXBvbmVudHMvc3JjL2NvbS9hbmRyb2lkL3N1cHBvcnQvbWVkaWFyb3V0ZXIvYXBwL01lZGlhUm91dGVDb250cm9sbGVyRGlhbG9nLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDA2MGNmY2EuLjAwMDAwMDAKLS0tIGEvcGFja2FnZXMvTWVkaWFDb21wb25lbnRzL3NyYy9jb20vYW5kcm9pZC9zdXBwb3J0L21lZGlhcm91dGVyL2FwcC9NZWRpYVJvdXRlQ29udHJvbGxlckRpYWxvZy5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTQ4NiArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IDIwMTggVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAotICoKLSAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwotICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgotICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0gKgotICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLSAqCi0gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCi0gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAotICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCi0gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCi0gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KLSAqLwotCi1wYWNrYWdlIGNvbS5hbmRyb2lkLnN1cHBvcnQubWVkaWFyb3V0ZXIuYXBwOwotCi1pbXBvcnQgc3RhdGljIGFuZHJvaWQuc3VwcG9ydC52NC5tZWRpYS5zZXNzaW9uLlBsYXliYWNrU3RhdGVDb21wYXQuQUNUSU9OX1BBVVNFOwotaW1wb3J0IHN0YXRpYyBhbmRyb2lkLnN1cHBvcnQudjQubWVkaWEuc2Vzc2lvbi5QbGF5YmFja1N0YXRlQ29tcGF0LkFDVElPTl9QTEFZOwotaW1wb3J0IHN0YXRpYyBhbmRyb2lkLnN1cHBvcnQudjQubWVkaWEuc2Vzc2lvbi5QbGF5YmFja1N0YXRlQ29tcGF0LkFDVElPTl9QTEFZX1BBVVNFOwotaW1wb3J0IHN0YXRpYyBhbmRyb2lkLnN1cHBvcnQudjQubWVkaWEuc2Vzc2lvbi5QbGF5YmFja1N0YXRlQ29tcGF0LkFDVElPTl9TVE9QOwotCi1pbXBvcnQgYW5kcm9pZC5hcHAuQWxlcnREaWFsb2c7Ci1pbXBvcnQgYW5kcm9pZC5hcHAuUGVuZGluZ0ludGVudDsKLWltcG9ydCBhbmRyb2lkLmNvbnRlbnQuQ29udGVudFJlc29sdmVyOwotaW1wb3J0IGFuZHJvaWQuY29udGVudC5Db250ZXh0OwotaW1wb3J0IGFuZHJvaWQuY29udGVudC5yZXMuUmVzb3VyY2VzOwotaW1wb3J0IGFuZHJvaWQuZ3JhcGhpY3MuQml0bWFwOwotaW1wb3J0IGFuZHJvaWQuZ3JhcGhpY3MuQml0bWFwRmFjdG9yeTsKLWltcG9ydCBhbmRyb2lkLmdyYXBoaWNzLlJlY3Q7Ci1pbXBvcnQgYW5kcm9pZC5ncmFwaGljcy5kcmF3YWJsZS5CaXRtYXBEcmF3YWJsZTsKLWltcG9ydCBhbmRyb2lkLm5ldC5Vcmk7Ci1pbXBvcnQgYW5kcm9pZC5vcy5Bc3luY1Rhc2s7Ci1pbXBvcnQgYW5kcm9pZC5vcy5CdW5kbGU7Ci1pbXBvcnQgYW5kcm9pZC5vcy5SZW1vdGVFeGNlcHRpb247Ci1pbXBvcnQgYW5kcm9pZC5vcy5TeXN0ZW1DbG9jazsKLWltcG9ydCBhbmRyb2lkLnN1cHBvcnQudjQubWVkaWEuTWVkaWFEZXNjcmlwdGlvbkNvbXBhdDsKLWltcG9ydCBhbmRyb2lkLnN1cHBvcnQudjQubWVkaWEuTWVkaWFNZXRhZGF0YUNvbXBhdDsKLWltcG9ydCBhbmRyb2lkLnN1cHBvcnQudjQubWVkaWEuc2Vzc2lvbi5NZWRpYUNvbnRyb2xsZXJDb21wYXQ7Ci1pbXBvcnQgYW5kcm9pZC5zdXBwb3J0LnY0Lm1lZGlhLnNlc3Npb24uTWVkaWFTZXNzaW9uQ29tcGF0OwotaW1wb3J0IGFuZHJvaWQuc3VwcG9ydC52NC5tZWRpYS5zZXNzaW9uLlBsYXliYWNrU3RhdGVDb21wYXQ7Ci1pbXBvcnQgYW5kcm9pZC5zdXBwb3J0LnY0LnV0aWwuT2JqZWN0c0NvbXBhdDsKLWltcG9ydCBhbmRyb2lkLnN1cHBvcnQudjQudmlldy5hY2Nlc3NpYmlsaXR5LkFjY2Vzc2liaWxpdHlFdmVudENvbXBhdDsKLWltcG9ydCBhbmRyb2lkLnN1cHBvcnQudjcuZ3JhcGhpY3MuUGFsZXR0ZTsKLWltcG9ydCBhbmRyb2lkLnRleHQuVGV4dFV0aWxzOwotaW1wb3J0IGFuZHJvaWQudXRpbC5Mb2c7Ci1pbXBvcnQgYW5kcm9pZC52aWV3LkNvbnRleHRUaGVtZVdyYXBwZXI7Ci1pbXBvcnQgYW5kcm9pZC52aWV3LktleUV2ZW50OwotaW1wb3J0IGFuZHJvaWQudmlldy5MYXlvdXRJbmZsYXRlcjsKLWltcG9ydCBhbmRyb2lkLnZpZXcuVmlldzsKLWltcG9ydCBhbmRyb2lkLnZpZXcuVmlldy5NZWFzdXJlU3BlYzsKLWltcG9ydCBhbmRyb2lkLnZpZXcuVmlld0dyb3VwOwotaW1wb3J0IGFuZHJvaWQudmlldy5WaWV3VHJlZU9ic2VydmVyOwotaW1wb3J0IGFuZHJvaWQudmlldy5hY2Nlc3NpYmlsaXR5LkFjY2Vzc2liaWxpdHlFdmVudDsKLWltcG9ydCBhbmRyb2lkLnZpZXcuYWNjZXNzaWJpbGl0eS5BY2Nlc3NpYmlsaXR5TWFuYWdlcjsKLWltcG9ydCBhbmRyb2lkLnZpZXcuYW5pbWF0aW9uLkFjY2VsZXJhdGVEZWNlbGVyYXRlSW50ZXJwb2xhdG9yOwotaW1wb3J0IGFuZHJvaWQudmlldy5hbmltYXRpb24uQWxwaGFBbmltYXRpb247Ci1pbXBvcnQgYW5kcm9pZC52aWV3LmFuaW1hdGlvbi5BbmltYXRpb247Ci1pbXBvcnQgYW5kcm9pZC52aWV3LmFuaW1hdGlvbi5BbmltYXRpb25TZXQ7Ci1pbXBvcnQgYW5kcm9pZC52aWV3LmFuaW1hdGlvbi5BbmltYXRpb25VdGlsczsKLWltcG9ydCBhbmRyb2lkLnZpZXcuYW5pbWF0aW9uLkludGVycG9sYXRvcjsKLWltcG9ydCBhbmRyb2lkLnZpZXcuYW5pbWF0aW9uLlRyYW5zZm9ybWF0aW9uOwotaW1wb3J0IGFuZHJvaWQudmlldy5hbmltYXRpb24uVHJhbnNsYXRlQW5pbWF0aW9uOwotaW1wb3J0IGFuZHJvaWQud2lkZ2V0LkFycmF5QWRhcHRlcjsKLWltcG9ydCBhbmRyb2lkLndpZGdldC5CdXR0b247Ci1pbXBvcnQgYW5kcm9pZC53aWRnZXQuRnJhbWVMYXlvdXQ7Ci1pbXBvcnQgYW5kcm9pZC53aWRnZXQuSW1hZ2VCdXR0b247Ci1pbXBvcnQgYW5kcm9pZC53aWRnZXQuSW1hZ2VWaWV3OwotaW1wb3J0IGFuZHJvaWQud2lkZ2V0LkxpbmVhckxheW91dDsKLWltcG9ydCBhbmRyb2lkLndpZGdldC5SZWxhdGl2ZUxheW91dDsKLWltcG9ydCBhbmRyb2lkLndpZGdldC5TZWVrQmFyOwotaW1wb3J0IGFuZHJvaWQud2lkZ2V0LlRleHRWaWV3OwotCi1pbXBvcnQgY29tLmFuZHJvaWQubWVkaWEudXBkYXRlLkFwaUhlbHBlcjsKLWltcG9ydCBjb20uYW5kcm9pZC5tZWRpYS51cGRhdGUuUjsKLWltcG9ydCBjb20uYW5kcm9pZC5zdXBwb3J0Lm1lZGlhcm91dGVyLm1lZGlhLk1lZGlhUm91dGVTZWxlY3RvcjsKLWltcG9ydCBjb20uYW5kcm9pZC5zdXBwb3J0Lm1lZGlhcm91dGVyLm1lZGlhLk1lZGlhUm91dGVyOwotaW1wb3J0IGNvbS5hbmRyb2lkLnN1cHBvcnQubWVkaWFyb3V0ZXIuYXBwLk92ZXJsYXlMaXN0Vmlldy5PdmVybGF5T2JqZWN0OwotCi1pbXBvcnQgamF2YS5pby5CdWZmZXJlZElucHV0U3RyZWFtOwotaW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247Ci1pbXBvcnQgamF2YS5pby5JbnB1dFN0cmVhbTsKLWltcG9ydCBqYXZhLm5ldC5VUkw7Ci1pbXBvcnQgamF2YS5uZXQuVVJMQ29ubmVjdGlvbjsKLWltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OwotaW1wb3J0IGphdmEudXRpbC5IYXNoTWFwOwotaW1wb3J0IGphdmEudXRpbC5IYXNoU2V0OwotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotaW1wb3J0IGphdmEudXRpbC5NYXA7Ci1pbXBvcnQgamF2YS51dGlsLlNldDsKLWltcG9ydCBqYXZhLnV0aWwuY29uY3VycmVudC5UaW1lVW5pdDsKLQotLyoqCi0gKiBUaGlzIGNsYXNzIGltcGxlbWVudHMgdGhlIHJvdXRlIGNvbnRyb2xsZXIgZGlhbG9nIGZvciB7QGxpbmsgTWVkaWFSb3V0ZXJ9LgotICogPHA+Ci0gKiBUaGlzIGRpYWxvZyBhbGxvd3MgdGhlIHVzZXIgdG8gY29udHJvbCBvciBkaXNjb25uZWN0IGZyb20gdGhlIGN1cnJlbnRseSBzZWxlY3RlZCByb3V0ZS4KLSAqIDwvcD4KLSAqCi0gKiBAc2VlIE1lZGlhUm91dGVCdXR0b24KLSAqIEBzZWUgTWVkaWFSb3V0ZUFjdGlvblByb3ZpZGVyCi0gKi8KLXB1YmxpYyBjbGFzcyBNZWRpYVJvdXRlQ29udHJvbGxlckRpYWxvZyBleHRlbmRzIEFsZXJ0RGlhbG9nIHsKLSAgICAvLyBUYWdzIHNob3VsZCBiZSBsZXNzIHRoYW4gMjQgY2hhcmFjdGVycyBsb25nIChzZWUgZG9jcyBmb3IgYW5kcm9pZC51dGlsLkxvZy5pc0xvZ2dhYmxlKCkpCi0gICAgc3RhdGljIGZpbmFsIFN0cmluZyBUQUcgPSAiTWVkaWFSb3V0ZUN0cmxEaWFsb2ciOwotICAgIHN0YXRpYyBmaW5hbCBib29sZWFuIERFQlVHID0gTG9nLmlzTG9nZ2FibGUoVEFHLCBMb2cuREVCVUcpOwotCi0gICAgLy8gVGltZSB0byB3YWl0IGJlZm9yZSB1cGRhdGluZyB0aGUgdm9sdW1lIHdoZW4gdGhlIHVzZXIgbGV0cyBnbyBvZiB0aGUgc2VlayBiYXIKLSAgICAvLyB0byBhbGxvdyB0aGUgcm91dGUgcHJvdmlkZXIgdGltZSB0byBwcm9wYWdhdGUgdGhlIGNoYW5nZSBhbmQgcHVibGlzaCBhIG5ldwotICAgIC8vIHJvdXRlIGRlc2NyaXB0b3IuCi0gICAgc3RhdGljIGZpbmFsIGludCBWT0xVTUVfVVBEQVRFX0RFTEFZX01JTExJUyA9IDUwMDsKLSAgICBzdGF0aWMgZmluYWwgaW50IENPTk5FQ1RJT05fVElNRU9VVF9NSUxMSVMgPSAoaW50KSBUaW1lVW5pdC5TRUNPTkRTLnRvTWlsbGlzKDMwTCk7Ci0KLSAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgQlVUVE9OX05FVVRSQUxfUkVTX0lEID0gYW5kcm9pZC5SLmlkLmJ1dHRvbjM7Ci0gICAgc3RhdGljIGZpbmFsIGludCBCVVRUT05fRElTQ09OTkVDVF9SRVNfSUQgPSBhbmRyb2lkLlIuaWQuYnV0dG9uMjsKLSAgICBzdGF0aWMgZmluYWwgaW50IEJVVFRPTl9TVE9QX1JFU19JRCA9IGFuZHJvaWQuUi5pZC5idXR0b24xOwotCi0gICAgZmluYWwgTWVkaWFSb3V0ZXIgbVJvdXRlcjsKLSAgICBwcml2YXRlIGZpbmFsIE1lZGlhUm91dGVyQ2FsbGJhY2sgbUNhbGxiYWNrOwotICAgIGZpbmFsIE1lZGlhUm91dGVyLlJvdXRlSW5mbyBtUm91dGU7Ci0KLSAgICBDb250ZXh0IG1Db250ZXh0OwotICAgIHByaXZhdGUgYm9vbGVhbiBtQ3JlYXRlZDsKLSAgICBwcml2YXRlIGJvb2xlYW4gbUF0dGFjaGVkVG9XaW5kb3c7Ci0KLSAgICBwcml2YXRlIGludCBtRGlhbG9nQ29udGVudFdpZHRoOwotCi0gICAgcHJpdmF0ZSBWaWV3IG1DdXN0b21Db250cm9sVmlldzsKLQotICAgIHByaXZhdGUgQnV0dG9uIG1EaXNjb25uZWN0QnV0dG9uOwotICAgIHByaXZhdGUgQnV0dG9uIG1TdG9wQ2FzdGluZ0J1dHRvbjsKLSAgICBwcml2YXRlIEltYWdlQnV0dG9uIG1QbGF5YmFja0NvbnRyb2xCdXR0b247Ci0gICAgcHJpdmF0ZSBJbWFnZUJ1dHRvbiBtQ2xvc2VCdXR0b247Ci0gICAgcHJpdmF0ZSBNZWRpYVJvdXRlRXhwYW5kQ29sbGFwc2VCdXR0b24gbUdyb3VwRXhwYW5kQ29sbGFwc2VCdXR0b247Ci0KLSAgICBwcml2YXRlIEZyYW1lTGF5b3V0IG1FeHBhbmRhYmxlQXJlYUxheW91dDsKLSAgICBwcml2YXRlIExpbmVhckxheW91dCBtRGlhbG9nQXJlYUxheW91dDsKLSAgICBGcmFtZUxheW91dCBtRGVmYXVsdENvbnRyb2xMYXlvdXQ7Ci0gICAgcHJpdmF0ZSBGcmFtZUxheW91dCBtQ3VzdG9tQ29udHJvbExheW91dDsKLSAgICBwcml2YXRlIEltYWdlVmlldyBtQXJ0VmlldzsKLSAgICBwcml2YXRlIFRleHRWaWV3IG1UaXRsZVZpZXc7Ci0gICAgcHJpdmF0ZSBUZXh0VmlldyBtU3VidGl0bGVWaWV3OwotICAgIHByaXZhdGUgVGV4dFZpZXcgbVJvdXRlTmFtZVRleHRWaWV3OwotCi0gICAgcHJpdmF0ZSBib29sZWFuIG1Wb2x1bWVDb250cm9sRW5hYmxlZCA9IHRydWU7Ci0gICAgLy8gTGF5b3V0IGZvciBtZWRpYSBjb250cm9sbGVycyBpbmNsdWRpbmcgcGxheS9wYXVzZSBidXR0b24gYW5kIHRoZSBtYWluIHZvbHVtZSBzbGlkZXIuCi0gICAgcHJpdmF0ZSBMaW5lYXJMYXlvdXQgbU1lZGlhTWFpbkNvbnRyb2xMYXlvdXQ7Ci0gICAgcHJpdmF0ZSBSZWxhdGl2ZUxheW91dCBtUGxheWJhY2tDb250cm9sTGF5b3V0OwotICAgIHByaXZhdGUgTGluZWFyTGF5b3V0IG1Wb2x1bWVDb250cm9sTGF5b3V0OwotICAgIHByaXZhdGUgVmlldyBtRGl2aWRlclZpZXc7Ci0KLSAgICBPdmVybGF5TGlzdFZpZXcgbVZvbHVtZUdyb3VwTGlzdDsKLSAgICBWb2x1bWVHcm91cEFkYXB0ZXIgbVZvbHVtZUdyb3VwQWRhcHRlcjsKLSAgICBwcml2YXRlIExpc3Q8TWVkaWFSb3V0ZXIuUm91dGVJbmZvPiBtR3JvdXBNZW1iZXJSb3V0ZXM7Ci0gICAgU2V0PE1lZGlhUm91dGVyLlJvdXRlSW5mbz4gbUdyb3VwTWVtYmVyUm91dGVzQWRkZWQ7Ci0gICAgcHJpdmF0ZSBTZXQ8TWVkaWFSb3V0ZXIuUm91dGVJbmZvPiBtR3JvdXBNZW1iZXJSb3V0ZXNSZW1vdmVkOwotICAgIFNldDxNZWRpYVJvdXRlci5Sb3V0ZUluZm8+IG1Hcm91cE1lbWJlclJvdXRlc0FuaW1hdGluZ1dpdGhCaXRtYXA7Ci0gICAgU2Vla0JhciBtVm9sdW1lU2xpZGVyOwotICAgIFZvbHVtZUNoYW5nZUxpc3RlbmVyIG1Wb2x1bWVDaGFuZ2VMaXN0ZW5lcjsKLSAgICBNZWRpYVJvdXRlci5Sb3V0ZUluZm8gbVJvdXRlSW5Wb2x1bWVTbGlkZXJUb3VjaGVkOwotICAgIHByaXZhdGUgaW50IG1Wb2x1bWVHcm91cExpc3RJdGVtSWNvblNpemU7Ci0gICAgcHJpdmF0ZSBpbnQgbVZvbHVtZUdyb3VwTGlzdEl0ZW1IZWlnaHQ7Ci0gICAgcHJpdmF0ZSBpbnQgbVZvbHVtZUdyb3VwTGlzdE1heEhlaWdodDsKLSAgICBwcml2YXRlIGZpbmFsIGludCBtVm9sdW1lR3JvdXBMaXN0UGFkZGluZ1RvcDsKLSAgICBNYXA8TWVkaWFSb3V0ZXIuUm91dGVJbmZvLCBTZWVrQmFyPiBtVm9sdW1lU2xpZGVyTWFwOwotCi0gICAgTWVkaWFDb250cm9sbGVyQ29tcGF0IG1NZWRpYUNvbnRyb2xsZXI7Ci0gICAgTWVkaWFDb250cm9sbGVyQ2FsbGJhY2sgbUNvbnRyb2xsZXJDYWxsYmFjazsKLSAgICBQbGF5YmFja1N0YXRlQ29tcGF0IG1TdGF0ZTsKLSAgICBNZWRpYURlc2NyaXB0aW9uQ29tcGF0IG1EZXNjcmlwdGlvbjsKLQotICAgIEZldGNoQXJ0VGFzayBtRmV0Y2hBcnRUYXNrOwotICAgIEJpdG1hcCBtQXJ0SWNvbkJpdG1hcDsKLSAgICBVcmkgbUFydEljb25Vcmk7Ci0gICAgYm9vbGVhbiBtQXJ0SWNvbklzTG9hZGVkOwotICAgIEJpdG1hcCBtQXJ0SWNvbkxvYWRlZEJpdG1hcDsKLSAgICBpbnQgbUFydEljb25CYWNrZ3JvdW5kQ29sb3I7Ci0KLSAgICBib29sZWFuIG1IYXNQZW5kaW5nVXBkYXRlOwotICAgIGJvb2xlYW4gbVBlbmRpbmdVcGRhdGVBbmltYXRpb25OZWVkZWQ7Ci0KLSAgICBib29sZWFuIG1Jc0dyb3VwRXhwYW5kZWQ7Ci0gICAgYm9vbGVhbiBtSXNHcm91cExpc3RBbmltYXRpbmc7Ci0gICAgYm9vbGVhbiBtSXNHcm91cExpc3RBbmltYXRpb25QZW5kaW5nOwotICAgIGludCBtR3JvdXBMaXN0QW5pbWF0aW9uRHVyYXRpb25NczsKLSAgICBwcml2YXRlIGludCBtR3JvdXBMaXN0RmFkZUluRHVyYXRpb25NczsKLSAgICBwcml2YXRlIGludCBtR3JvdXBMaXN0RmFkZU91dER1cmF0aW9uTXM7Ci0KLSAgICBwcml2YXRlIEludGVycG9sYXRvciBtSW50ZXJwb2xhdG9yOwotICAgIHByaXZhdGUgSW50ZXJwb2xhdG9yIG1MaW5lYXJPdXRTbG93SW5JbnRlcnBvbGF0b3I7Ci0gICAgcHJpdmF0ZSBJbnRlcnBvbGF0b3IgbUZhc3RPdXRTbG93SW5JbnRlcnBvbGF0b3I7Ci0gICAgcHJpdmF0ZSBJbnRlcnBvbGF0b3IgbUFjY2VsZXJhdGVEZWNlbGVyYXRlSW50ZXJwb2xhdG9yOwotCi0gICAgZmluYWwgQWNjZXNzaWJpbGl0eU1hbmFnZXIgbUFjY2Vzc2liaWxpdHlNYW5hZ2VyOwotCi0gICAgUnVubmFibGUgbUdyb3VwTGlzdEZhZGVJbkFuaW1hdGlvbiA9IG5ldyBSdW5uYWJsZSgpIHsKLSAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgIHB1YmxpYyB2b2lkIHJ1bigpIHsKLSAgICAgICAgICAgIHN0YXJ0R3JvdXBMaXN0RmFkZUluQW5pbWF0aW9uKCk7Ci0gICAgICAgIH0KLSAgICB9OwotCi0gICAgcHVibGljIE1lZGlhUm91dGVDb250cm9sbGVyRGlhbG9nKENvbnRleHQgY29udGV4dCkgewotICAgICAgICB0aGlzKGNvbnRleHQsIDApOwotICAgIH0KLQotICAgIHB1YmxpYyBNZWRpYVJvdXRlQ29udHJvbGxlckRpYWxvZyhDb250ZXh0IGNvbnRleHQsIGludCB0aGVtZSkgewotICAgICAgICAvLyBUT0RPIChiLzcyOTc1OTc2KTogQXZvaWQgdG8gdXNlIENvbnRleHRUaGVtZVdyYXBwZXIgd2l0aCBhcHAgY29udGV4dCBhbmQgbGliIHRoZW1lLgotICAgICAgICBzdXBlcihuZXcgQ29udGV4dFRoZW1lV3JhcHBlcihjb250ZXh0LCBBcGlIZWxwZXIuZ2V0TGliVGhlbWUoY29udGV4dCwKLSAgICAgICAgICAgICAgICBNZWRpYVJvdXRlclRoZW1lSGVscGVyLmdldFJvdXRlclRoZW1lSWQoY29udGV4dCkpKSwgdGhlbWUpOwotICAgICAgICBtQ29udGV4dCA9IGdldENvbnRleHQoKTsKLQotICAgICAgICBtQ29udHJvbGxlckNhbGxiYWNrID0gbmV3IE1lZGlhQ29udHJvbGxlckNhbGxiYWNrKCk7Ci0gICAgICAgIG1Sb3V0ZXIgPSBNZWRpYVJvdXRlci5nZXRJbnN0YW5jZShtQ29udGV4dCk7Ci0gICAgICAgIG1DYWxsYmFjayA9IG5ldyBNZWRpYVJvdXRlckNhbGxiYWNrKCk7Ci0gICAgICAgIG1Sb3V0ZSA9IG1Sb3V0ZXIuZ2V0U2VsZWN0ZWRSb3V0ZSgpOwotICAgICAgICBzZXRNZWRpYVNlc3Npb24obVJvdXRlci5nZXRNZWRpYVNlc3Npb25Ub2tlbigpKTsKLSAgICAgICAgbVZvbHVtZUdyb3VwTGlzdFBhZGRpbmdUb3AgPSBBcGlIZWxwZXIuZ2V0TGliUmVzb3VyY2VzKGNvbnRleHQpLmdldERpbWVuc2lvblBpeGVsU2l6ZSgKLSAgICAgICAgICAgICAgICBSLmRpbWVuLm1yX2NvbnRyb2xsZXJfdm9sdW1lX2dyb3VwX2xpc3RfcGFkZGluZ190b3ApOwotICAgICAgICBtQWNjZXNzaWJpbGl0eU1hbmFnZXIgPQotICAgICAgICAgICAgICAgIChBY2Nlc3NpYmlsaXR5TWFuYWdlcikgbUNvbnRleHQuZ2V0U3lzdGVtU2VydmljZShDb250ZXh0LkFDQ0VTU0lCSUxJVFlfU0VSVklDRSk7Ci0gICAgICAgIG1MaW5lYXJPdXRTbG93SW5JbnRlcnBvbGF0b3IgPSBBbmltYXRpb25VdGlscy5sb2FkSW50ZXJwb2xhdG9yKAotICAgICAgICAgICAgICAgIG1Db250ZXh0LCBhbmRyb2lkLlIuaW50ZXJwb2xhdG9yLmxpbmVhcl9vdXRfc2xvd19pbik7Ci0gICAgICAgIG1GYXN0T3V0U2xvd0luSW50ZXJwb2xhdG9yID0gQW5pbWF0aW9uVXRpbHMubG9hZEludGVycG9sYXRvcigKLSAgICAgICAgICAgICAgICBtQ29udGV4dCwgYW5kcm9pZC5SLmludGVycG9sYXRvci5mYXN0X291dF9zbG93X2luKTsKLSAgICAgICAgbUFjY2VsZXJhdGVEZWNlbGVyYXRlSW50ZXJwb2xhdG9yID0gbmV3IEFjY2VsZXJhdGVEZWNlbGVyYXRlSW50ZXJwb2xhdG9yKCk7Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogR2V0cyB0aGUgcm91dGUgdGhhdCB0aGlzIGRpYWxvZyBpcyBjb250cm9sbGluZy4KLSAgICAgKi8KLSAgICBwdWJsaWMgTWVkaWFSb3V0ZXIuUm91dGVJbmZvIGdldFJvdXRlKCkgewotICAgICAgICByZXR1cm4gbVJvdXRlOwotICAgIH0KLQotICAgIHByaXZhdGUgTWVkaWFSb3V0ZXIuUm91dGVHcm91cCBnZXRHcm91cCgpIHsKLSAgICAgICAgaWYgKG1Sb3V0ZSBpbnN0YW5jZW9mIE1lZGlhUm91dGVyLlJvdXRlR3JvdXApIHsKLSAgICAgICAgICAgIHJldHVybiAoTWVkaWFSb3V0ZXIuUm91dGVHcm91cCkgbVJvdXRlOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiBudWxsOwotICAgIH0KLQotICAgIC8qKgotICAgICAqIFByb3ZpZGVzIHRoZSBzdWJjbGFzcyBhbiBvcHBvcnR1bml0eSB0byBjcmVhdGUgYSB2aWV3IHRoYXQgd2lsbCByZXBsYWNlIHRoZSBkZWZhdWx0IG1lZGlhCi0gICAgICogY29udHJvbHMgZm9yIHRoZSBjdXJyZW50bHkgcGxheWluZyBjb250ZW50LgotICAgICAqCi0gICAgICogQHBhcmFtIHNhdmVkSW5zdGFuY2VTdGF0ZSBUaGUgZGlhbG9nJ3Mgc2F2ZWQgaW5zdGFuY2Ugc3RhdGUuCi0gICAgICogQHJldHVybiBUaGUgbWVkaWEgY29udHJvbCB2aWV3LCBvciBudWxsIGlmIG5vbmUuCi0gICAgICovCi0gICAgcHVibGljIFZpZXcgb25DcmVhdGVNZWRpYUNvbnRyb2xWaWV3KEJ1bmRsZSBzYXZlZEluc3RhbmNlU3RhdGUpIHsKLSAgICAgICAgcmV0dXJuIG51bGw7Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogR2V0cyB0aGUgbWVkaWEgY29udHJvbCB2aWV3IHRoYXQgd2FzIGNyZWF0ZWQgYnkge0BsaW5rICNvbkNyZWF0ZU1lZGlhQ29udHJvbFZpZXcoQnVuZGxlKX0uCi0gICAgICoKLSAgICAgKiBAcmV0dXJuIFRoZSBtZWRpYSBjb250cm9sIHZpZXcsIG9yIG51bGwgaWYgbm9uZS4KLSAgICAgKi8KLSAgICBwdWJsaWMgVmlldyBnZXRNZWRpYUNvbnRyb2xWaWV3KCkgewotICAgICAgICByZXR1cm4gbUN1c3RvbUNvbnRyb2xWaWV3OwotICAgIH0KLQotICAgIC8qKgotICAgICAqIFNldHMgd2hldGhlciB0byBlbmFibGUgdGhlIHZvbHVtZSBzbGlkZXIgYW5kIHZvbHVtZSBjb250cm9sIHVzaW5nIHRoZSB2b2x1bWUga2V5cwotICAgICAqIHdoZW4gdGhlIHJvdXRlIHN1cHBvcnRzIGl0LgotICAgICAqIDxwPgotICAgICAqIFRoZSBkZWZhdWx0IHZhbHVlIGlzIHRydWUuCi0gICAgICogPC9wPgotICAgICAqLwotICAgIHB1YmxpYyB2b2lkIHNldFZvbHVtZUNvbnRyb2xFbmFibGVkKGJvb2xlYW4gZW5hYmxlKSB7Ci0gICAgICAgIGlmIChtVm9sdW1lQ29udHJvbEVuYWJsZWQgIT0gZW5hYmxlKSB7Ci0gICAgICAgICAgICBtVm9sdW1lQ29udHJvbEVuYWJsZWQgPSBlbmFibGU7Ci0gICAgICAgICAgICBpZiAobUNyZWF0ZWQpIHsKLSAgICAgICAgICAgICAgICB1cGRhdGUoZmFsc2UpOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogUmV0dXJucyB3aGV0aGVyIHRvIGVuYWJsZSB0aGUgdm9sdW1lIHNsaWRlciBhbmQgdm9sdW1lIGNvbnRyb2wgdXNpbmcgdGhlIHZvbHVtZSBrZXlzCi0gICAgICogd2hlbiB0aGUgcm91dGUgc3VwcG9ydHMgaXQuCi0gICAgICovCi0gICAgcHVibGljIGJvb2xlYW4gaXNWb2x1bWVDb250cm9sRW5hYmxlZCgpIHsKLSAgICAgICAgcmV0dXJuIG1Wb2x1bWVDb250cm9sRW5hYmxlZDsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBTZXQgdGhlIHNlc3Npb24gdG8gdXNlIGZvciBtZXRhZGF0YSBhbmQgdHJhbnNwb3J0IGNvbnRyb2xzLiBUaGUgZGlhbG9nCi0gICAgICogd2lsbCBsaXN0ZW4gdG8gY2hhbmdlcyBvbiB0aGlzIHNlc3Npb24gYW5kIHVwZGF0ZSB0aGUgVUkgYXV0b21hdGljYWxseSBpbgotICAgICAqIHJlc3BvbnNlIHRvIGNoYW5nZXMuCi0gICAgICoKLSAgICAgKiBAcGFyYW0gc2Vzc2lvblRva2VuIFRoZSB0b2tlbiBmb3IgdGhlIHNlc3Npb24gdG8gdXNlLgotICAgICAqLwotICAgIHByaXZhdGUgdm9pZCBzZXRNZWRpYVNlc3Npb24oTWVkaWFTZXNzaW9uQ29tcGF0LlRva2VuIHNlc3Npb25Ub2tlbikgewotICAgICAgICBpZiAobU1lZGlhQ29udHJvbGxlciAhPSBudWxsKSB7Ci0gICAgICAgICAgICBtTWVkaWFDb250cm9sbGVyLnVucmVnaXN0ZXJDYWxsYmFjayhtQ29udHJvbGxlckNhbGxiYWNrKTsKLSAgICAgICAgICAgIG1NZWRpYUNvbnRyb2xsZXIgPSBudWxsOwotICAgICAgICB9Ci0gICAgICAgIGlmIChzZXNzaW9uVG9rZW4gPT0gbnVsbCkgewotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgICAgIGlmICghbUF0dGFjaGVkVG9XaW5kb3cpIHsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAgICAgICB0cnkgewotICAgICAgICAgICAgbU1lZGlhQ29udHJvbGxlciA9IG5ldyBNZWRpYUNvbnRyb2xsZXJDb21wYXQobUNvbnRleHQsIHNlc3Npb25Ub2tlbik7Ci0gICAgICAgIH0gY2F0Y2ggKFJlbW90ZUV4Y2VwdGlvbiBlKSB7Ci0gICAgICAgICAgICBMb2cuZShUQUcsICJFcnJvciBjcmVhdGluZyBtZWRpYSBjb250cm9sbGVyIGluIHNldE1lZGlhU2Vzc2lvbi4iLCBlKTsKLSAgICAgICAgfQotICAgICAgICBpZiAobU1lZGlhQ29udHJvbGxlciAhPSBudWxsKSB7Ci0gICAgICAgICAgICBtTWVkaWFDb250cm9sbGVyLnJlZ2lzdGVyQ2FsbGJhY2sobUNvbnRyb2xsZXJDYWxsYmFjayk7Ci0gICAgICAgIH0KLSAgICAgICAgTWVkaWFNZXRhZGF0YUNvbXBhdCBtZXRhZGF0YSA9IG1NZWRpYUNvbnRyb2xsZXIgPT0gbnVsbCA/IG51bGwKLSAgICAgICAgICAgICAgICA6IG1NZWRpYUNvbnRyb2xsZXIuZ2V0TWV0YWRhdGEoKTsKLSAgICAgICAgbURlc2NyaXB0aW9uID0gbWV0YWRhdGEgPT0gbnVsbCA/IG51bGwgOiBtZXRhZGF0YS5nZXREZXNjcmlwdGlvbigpOwotICAgICAgICBtU3RhdGUgPSBtTWVkaWFDb250cm9sbGVyID09IG51bGwgPyBudWxsIDogbU1lZGlhQ29udHJvbGxlci5nZXRQbGF5YmFja1N0YXRlKCk7Ci0gICAgICAgIHVwZGF0ZUFydEljb25JZk5lZWRlZCgpOwotICAgICAgICB1cGRhdGUoZmFsc2UpOwotICAgIH0KLQotICAgIC8qKgotICAgICAqIEdldHMgdGhlIHNlc3Npb24gdG8gdXNlIGZvciBtZXRhZGF0YSBhbmQgdHJhbnNwb3J0IGNvbnRyb2xzLgotICAgICAqCi0gICAgICogQHJldHVybiBUaGUgdG9rZW4gZm9yIHRoZSBzZXNzaW9uIHRvIHVzZSBvciBudWxsIGlmIG5vbmUuCi0gICAgICovCi0gICAgcHVibGljIE1lZGlhU2Vzc2lvbkNvbXBhdC5Ub2tlbiBnZXRNZWRpYVNlc3Npb24oKSB7Ci0gICAgICAgIHJldHVybiBtTWVkaWFDb250cm9sbGVyID09IG51bGwgPyBudWxsIDogbU1lZGlhQ29udHJvbGxlci5nZXRTZXNzaW9uVG9rZW4oKTsKLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwcm90ZWN0ZWQgdm9pZCBvbkNyZWF0ZShCdW5kbGUgc2F2ZWRJbnN0YW5jZVN0YXRlKSB7Ci0gICAgICAgIHN1cGVyLm9uQ3JlYXRlKHNhdmVkSW5zdGFuY2VTdGF0ZSk7Ci0KLSAgICAgICAgZ2V0V2luZG93KCkuc2V0QmFja2dyb3VuZERyYXdhYmxlUmVzb3VyY2UoYW5kcm9pZC5SLmNvbG9yLnRyYW5zcGFyZW50KTsKLQotICAgICAgICBzZXRDb250ZW50VmlldyhBcGlIZWxwZXIuaW5mbGF0ZUxpYkxheW91dChtQ29udGV4dCwKLSAgICAgICAgICAgICAgICBBcGlIZWxwZXIuZ2V0TGliVGhlbWUobUNvbnRleHQsIE1lZGlhUm91dGVyVGhlbWVIZWxwZXIuZ2V0Um91dGVyVGhlbWVJZChtQ29udGV4dCkpLAotICAgICAgICAgICAgICAgIFIubGF5b3V0Lm1yX2NvbnRyb2xsZXJfbWF0ZXJpYWxfZGlhbG9nX2IpKTsKLQotICAgICAgICAvLyBSZW1vdmUgdGhlIG5ldXRyYWwgYnV0dG9uLgotICAgICAgICBmaW5kVmlld0J5SWQoQlVUVE9OX05FVVRSQUxfUkVTX0lEKS5zZXRWaXNpYmlsaXR5KFZpZXcuR09ORSk7Ci0KLSAgICAgICAgQ2xpY2tMaXN0ZW5lciBsaXN0ZW5lciA9IG5ldyBDbGlja0xpc3RlbmVyKCk7Ci0KLSAgICAgICAgbUV4cGFuZGFibGVBcmVhTGF5b3V0ID0gZmluZFZpZXdCeUlkKFIuaWQubXJfZXhwYW5kYWJsZV9hcmVhKTsKLSAgICAgICAgbUV4cGFuZGFibGVBcmVhTGF5b3V0LnNldE9uQ2xpY2tMaXN0ZW5lcihuZXcgVmlldy5PbkNsaWNrTGlzdGVuZXIoKSB7Ci0gICAgICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgICAgIHB1YmxpYyB2b2lkIG9uQ2xpY2soVmlldyB2KSB7Ci0gICAgICAgICAgICAgICAgZGlzbWlzcygpOwotICAgICAgICAgICAgfQotICAgICAgICB9KTsKLSAgICAgICAgbURpYWxvZ0FyZWFMYXlvdXQgPSBmaW5kVmlld0J5SWQoUi5pZC5tcl9kaWFsb2dfYXJlYSk7Ci0gICAgICAgIG1EaWFsb2dBcmVhTGF5b3V0LnNldE9uQ2xpY2tMaXN0ZW5lcihuZXcgVmlldy5PbkNsaWNrTGlzdGVuZXIoKSB7Ci0gICAgICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgICAgIHB1YmxpYyB2b2lkIG9uQ2xpY2soVmlldyB2KSB7Ci0gICAgICAgICAgICAgICAgLy8gRWF0IHVuaGFuZGxlZCB0b3VjaCBldmVudHMuCi0gICAgICAgICAgICB9Ci0gICAgICAgIH0pOwotICAgICAgICBpbnQgY29sb3IgPSBNZWRpYVJvdXRlclRoZW1lSGVscGVyLmdldEJ1dHRvblRleHRDb2xvcihtQ29udGV4dCk7Ci0gICAgICAgIG1EaXNjb25uZWN0QnV0dG9uID0gZmluZFZpZXdCeUlkKEJVVFRPTl9ESVNDT05ORUNUX1JFU19JRCk7Ci0gICAgICAgIG1EaXNjb25uZWN0QnV0dG9uLnNldFRleHQoCi0gICAgICAgICAgICAgICAgQXBpSGVscGVyLmdldExpYlJlc291cmNlcyhtQ29udGV4dCkuZ2V0U3RyaW5nKFIuc3RyaW5nLm1yX2NvbnRyb2xsZXJfZGlzY29ubmVjdCkpOwotICAgICAgICBtRGlzY29ubmVjdEJ1dHRvbi5zZXRUZXh0Q29sb3IoY29sb3IpOwotICAgICAgICBtRGlzY29ubmVjdEJ1dHRvbi5zZXRPbkNsaWNrTGlzdGVuZXIobGlzdGVuZXIpOwotCi0gICAgICAgIG1TdG9wQ2FzdGluZ0J1dHRvbiA9IGZpbmRWaWV3QnlJZChCVVRUT05fU1RPUF9SRVNfSUQpOwotICAgICAgICBtU3RvcENhc3RpbmdCdXR0b24uc2V0VGV4dCgKLSAgICAgICAgICAgICAgICBBcGlIZWxwZXIuZ2V0TGliUmVzb3VyY2VzKG1Db250ZXh0KS5nZXRTdHJpbmcoUi5zdHJpbmcubXJfY29udHJvbGxlcl9zdG9wX2Nhc3RpbmcpKTsKLSAgICAgICAgbVN0b3BDYXN0aW5nQnV0dG9uLnNldFRleHRDb2xvcihjb2xvcik7Ci0gICAgICAgIG1TdG9wQ2FzdGluZ0J1dHRvbi5zZXRPbkNsaWNrTGlzdGVuZXIobGlzdGVuZXIpOwotCi0gICAgICAgIG1Sb3V0ZU5hbWVUZXh0VmlldyA9IGZpbmRWaWV3QnlJZChSLmlkLm1yX25hbWUpOwotICAgICAgICBtQ2xvc2VCdXR0b24gPSBmaW5kVmlld0J5SWQoUi5pZC5tcl9jbG9zZSk7Ci0gICAgICAgIG1DbG9zZUJ1dHRvbi5zZXRPbkNsaWNrTGlzdGVuZXIobGlzdGVuZXIpOwotICAgICAgICBtQ3VzdG9tQ29udHJvbExheW91dCA9IGZpbmRWaWV3QnlJZChSLmlkLm1yX2N1c3RvbV9jb250cm9sKTsKLSAgICAgICAgbURlZmF1bHRDb250cm9sTGF5b3V0ID0gZmluZFZpZXdCeUlkKFIuaWQubXJfZGVmYXVsdF9jb250cm9sKTsKLQotICAgICAgICAvLyBTdGFydCB0aGUgc2Vzc2lvbiBhY3Rpdml0eSB3aGVuIGEgY29udGVudCBpdGVtIChhbGJ1bSBhcnQsIHRpdGxlIG9yIHN1YnRpdGxlKSBpcyBjbGlja2VkLgotICAgICAgICBWaWV3Lk9uQ2xpY2tMaXN0ZW5lciBvbkNsaWNrTGlzdGVuZXIgPSBuZXcgVmlldy5PbkNsaWNrTGlzdGVuZXIoKSB7Ci0gICAgICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgICAgIHB1YmxpYyB2b2lkIG9uQ2xpY2soVmlldyB2KSB7Ci0gICAgICAgICAgICAgICAgaWYgKG1NZWRpYUNvbnRyb2xsZXIgIT0gbnVsbCkgewotICAgICAgICAgICAgICAgICAgICBQZW5kaW5nSW50ZW50IHBpID0gbU1lZGlhQ29udHJvbGxlci5nZXRTZXNzaW9uQWN0aXZpdHkoKTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKHBpICE9IG51bGwpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHRyeSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgcGkuc2VuZCgpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpc21pc3MoKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0gY2F0Y2ggKFBlbmRpbmdJbnRlbnQuQ2FuY2VsZWRFeGNlcHRpb24gZSkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIExvZy5lKFRBRywgcGkgKyAiIHdhcyBub3Qgc2VudCwgaXQgaGFkIGJlZW4gY2FuY2VsZWQuIik7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH07Ci0gICAgICAgIG1BcnRWaWV3ID0gZmluZFZpZXdCeUlkKFIuaWQubXJfYXJ0KTsKLSAgICAgICAgbUFydFZpZXcuc2V0T25DbGlja0xpc3RlbmVyKG9uQ2xpY2tMaXN0ZW5lcik7Ci0gICAgICAgIGZpbmRWaWV3QnlJZChSLmlkLm1yX2NvbnRyb2xfdGl0bGVfY29udGFpbmVyKS5zZXRPbkNsaWNrTGlzdGVuZXIob25DbGlja0xpc3RlbmVyKTsKLQotICAgICAgICBtTWVkaWFNYWluQ29udHJvbExheW91dCA9IGZpbmRWaWV3QnlJZChSLmlkLm1yX21lZGlhX21haW5fY29udHJvbCk7Ci0gICAgICAgIG1EaXZpZGVyVmlldyA9IGZpbmRWaWV3QnlJZChSLmlkLm1yX2NvbnRyb2xfZGl2aWRlcik7Ci0KLSAgICAgICAgbVBsYXliYWNrQ29udHJvbExheW91dCA9IGZpbmRWaWV3QnlJZChSLmlkLm1yX3BsYXliYWNrX2NvbnRyb2wpOwotICAgICAgICBtVGl0bGVWaWV3ID0gZmluZFZpZXdCeUlkKFIuaWQubXJfY29udHJvbF90aXRsZSk7Ci0gICAgICAgIG1TdWJ0aXRsZVZpZXcgPSBmaW5kVmlld0J5SWQoUi5pZC5tcl9jb250cm9sX3N1YnRpdGxlKTsKLSAgICAgICAgbVBsYXliYWNrQ29udHJvbEJ1dHRvbiA9IGZpbmRWaWV3QnlJZChSLmlkLm1yX2NvbnRyb2xfcGxheWJhY2tfY3RybCk7Ci0gICAgICAgIG1QbGF5YmFja0NvbnRyb2xCdXR0b24uc2V0T25DbGlja0xpc3RlbmVyKGxpc3RlbmVyKTsKLQotICAgICAgICBtVm9sdW1lQ29udHJvbExheW91dCA9IGZpbmRWaWV3QnlJZChSLmlkLm1yX3ZvbHVtZV9jb250cm9sKTsKLSAgICAgICAgbVZvbHVtZUNvbnRyb2xMYXlvdXQuc2V0VmlzaWJpbGl0eShWaWV3LkdPTkUpOwotICAgICAgICBtVm9sdW1lU2xpZGVyID0gZmluZFZpZXdCeUlkKFIuaWQubXJfdm9sdW1lX3NsaWRlcik7Ci0gICAgICAgIG1Wb2x1bWVTbGlkZXIuc2V0VGFnKG1Sb3V0ZSk7Ci0gICAgICAgIG1Wb2x1bWVDaGFuZ2VMaXN0ZW5lciA9IG5ldyBWb2x1bWVDaGFuZ2VMaXN0ZW5lcigpOwotICAgICAgICBtVm9sdW1lU2xpZGVyLnNldE9uU2Vla0JhckNoYW5nZUxpc3RlbmVyKG1Wb2x1bWVDaGFuZ2VMaXN0ZW5lcik7Ci0KLSAgICAgICAgbVZvbHVtZUdyb3VwTGlzdCA9IGZpbmRWaWV3QnlJZChSLmlkLm1yX3ZvbHVtZV9ncm91cF9saXN0KTsKLSAgICAgICAgbUdyb3VwTWVtYmVyUm91dGVzID0gbmV3IEFycmF5TGlzdDxNZWRpYVJvdXRlci5Sb3V0ZUluZm8+KCk7Ci0gICAgICAgIG1Wb2x1bWVHcm91cEFkYXB0ZXIgPSBuZXcgVm9sdW1lR3JvdXBBZGFwdGVyKG1Wb2x1bWVHcm91cExpc3QuZ2V0Q29udGV4dCgpLAotICAgICAgICAgICAgICAgIG1Hcm91cE1lbWJlclJvdXRlcyk7Ci0gICAgICAgIG1Wb2x1bWVHcm91cExpc3Quc2V0QWRhcHRlcihtVm9sdW1lR3JvdXBBZGFwdGVyKTsKLSAgICAgICAgbUdyb3VwTWVtYmVyUm91dGVzQW5pbWF0aW5nV2l0aEJpdG1hcCA9IG5ldyBIYXNoU2V0PD4oKTsKLQotICAgICAgICBNZWRpYVJvdXRlclRoZW1lSGVscGVyLnNldE1lZGlhQ29udHJvbHNCYWNrZ3JvdW5kQ29sb3IobUNvbnRleHQsCi0gICAgICAgICAgICAgICAgbU1lZGlhTWFpbkNvbnRyb2xMYXlvdXQsIG1Wb2x1bWVHcm91cExpc3QsIGdldEdyb3VwKCkgIT0gbnVsbCk7Ci0gICAgICAgIE1lZGlhUm91dGVyVGhlbWVIZWxwZXIuc2V0Vm9sdW1lU2xpZGVyQ29sb3IobUNvbnRleHQsCi0gICAgICAgICAgICAgICAgKE1lZGlhUm91dGVWb2x1bWVTbGlkZXIpIG1Wb2x1bWVTbGlkZXIsIG1NZWRpYU1haW5Db250cm9sTGF5b3V0KTsKLSAgICAgICAgbVZvbHVtZVNsaWRlck1hcCA9IG5ldyBIYXNoTWFwPD4oKTsKLSAgICAgICAgbVZvbHVtZVNsaWRlck1hcC5wdXQobVJvdXRlLCBtVm9sdW1lU2xpZGVyKTsKLQotICAgICAgICBtR3JvdXBFeHBhbmRDb2xsYXBzZUJ1dHRvbiA9Ci0gICAgICAgICAgICAgICAgZmluZFZpZXdCeUlkKFIuaWQubXJfZ3JvdXBfZXhwYW5kX2NvbGxhcHNlKTsKLSAgICAgICAgbUdyb3VwRXhwYW5kQ29sbGFwc2VCdXR0b24uc2V0T25DbGlja0xpc3RlbmVyKG5ldyBWaWV3Lk9uQ2xpY2tMaXN0ZW5lcigpIHsKLSAgICAgICAgICAgIEBPdmVycmlkZQotICAgICAgICAgICAgcHVibGljIHZvaWQgb25DbGljayhWaWV3IHYpIHsKLSAgICAgICAgICAgICAgICBtSXNHcm91cEV4cGFuZGVkID0gIW1Jc0dyb3VwRXhwYW5kZWQ7Ci0gICAgICAgICAgICAgICAgaWYgKG1Jc0dyb3VwRXhwYW5kZWQpIHsKLSAgICAgICAgICAgICAgICAgICAgbVZvbHVtZUdyb3VwTGlzdC5zZXRWaXNpYmlsaXR5KFZpZXcuVklTSUJMRSk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGxvYWRJbnRlcnBvbGF0b3IoKTsKLSAgICAgICAgICAgICAgICB1cGRhdGVMYXlvdXRIZWlnaHQodHJ1ZSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0pOwotICAgICAgICBsb2FkSW50ZXJwb2xhdG9yKCk7Ci0gICAgICAgIG1Hcm91cExpc3RBbmltYXRpb25EdXJhdGlvbk1zID0gQXBpSGVscGVyLmdldExpYlJlc291cmNlcyhtQ29udGV4dCkuZ2V0SW50ZWdlcigKLSAgICAgICAgICAgICAgICBSLmludGVnZXIubXJfY29udHJvbGxlcl92b2x1bWVfZ3JvdXBfbGlzdF9hbmltYXRpb25fZHVyYXRpb25fbXMpOwotICAgICAgICBtR3JvdXBMaXN0RmFkZUluRHVyYXRpb25NcyA9IEFwaUhlbHBlci5nZXRMaWJSZXNvdXJjZXMobUNvbnRleHQpLmdldEludGVnZXIoCi0gICAgICAgICAgICAgICAgUi5pbnRlZ2VyLm1yX2NvbnRyb2xsZXJfdm9sdW1lX2dyb3VwX2xpc3RfZmFkZV9pbl9kdXJhdGlvbl9tcyk7Ci0gICAgICAgIG1Hcm91cExpc3RGYWRlT3V0RHVyYXRpb25NcyA9IEFwaUhlbHBlci5nZXRMaWJSZXNvdXJjZXMobUNvbnRleHQpLmdldEludGVnZXIoCi0gICAgICAgICAgICAgICAgUi5pbnRlZ2VyLm1yX2NvbnRyb2xsZXJfdm9sdW1lX2dyb3VwX2xpc3RfZmFkZV9vdXRfZHVyYXRpb25fbXMpOwotCi0gICAgICAgIG1DdXN0b21Db250cm9sVmlldyA9IG9uQ3JlYXRlTWVkaWFDb250cm9sVmlldyhzYXZlZEluc3RhbmNlU3RhdGUpOwotICAgICAgICBpZiAobUN1c3RvbUNvbnRyb2xWaWV3ICE9IG51bGwpIHsKLSAgICAgICAgICAgIG1DdXN0b21Db250cm9sTGF5b3V0LmFkZFZpZXcobUN1c3RvbUNvbnRyb2xWaWV3KTsKLSAgICAgICAgICAgIG1DdXN0b21Db250cm9sTGF5b3V0LnNldFZpc2liaWxpdHkoVmlldy5WSVNJQkxFKTsKLSAgICAgICAgfQotICAgICAgICBtQ3JlYXRlZCA9IHRydWU7Ci0gICAgICAgIHVwZGF0ZUxheW91dCgpOwotICAgIH0KLQotICAgIC8qKgotICAgICAqIFNldHMgdGhlIHdpZHRoIG9mIHRoZSBkaWFsb2cuIEFsc28gY2FsbGVkIHdoZW4gY29uZmlndXJhdGlvbiBjaGFuZ2VzLgotICAgICAqLwotICAgIHZvaWQgdXBkYXRlTGF5b3V0KCkgewotICAgICAgICBpbnQgd2lkdGggPSBNZWRpYVJvdXRlRGlhbG9nSGVscGVyLmdldERpYWxvZ1dpZHRoKG1Db250ZXh0KTsKLSAgICAgICAgZ2V0V2luZG93KCkuc2V0TGF5b3V0KHdpZHRoLCBWaWV3R3JvdXAuTGF5b3V0UGFyYW1zLldSQVBfQ09OVEVOVCk7Ci0KLSAgICAgICAgVmlldyBkZWNvclZpZXcgPSBnZXRXaW5kb3coKS5nZXREZWNvclZpZXcoKTsKLSAgICAgICAgbURpYWxvZ0NvbnRlbnRXaWR0aCA9IHdpZHRoIC0gZGVjb3JWaWV3LmdldFBhZGRpbmdMZWZ0KCkgLSBkZWNvclZpZXcuZ2V0UGFkZGluZ1JpZ2h0KCk7Ci0KLSAgICAgICAgUmVzb3VyY2VzIHJlcyA9IEFwaUhlbHBlci5nZXRMaWJSZXNvdXJjZXMobUNvbnRleHQpOwotICAgICAgICBtVm9sdW1lR3JvdXBMaXN0SXRlbUljb25TaXplID0gcmVzLmdldERpbWVuc2lvblBpeGVsU2l6ZSgKLSAgICAgICAgICAgICAgICBSLmRpbWVuLm1yX2NvbnRyb2xsZXJfdm9sdW1lX2dyb3VwX2xpc3RfaXRlbV9pY29uX3NpemUpOwotICAgICAgICBtVm9sdW1lR3JvdXBMaXN0SXRlbUhlaWdodCA9IHJlcy5nZXREaW1lbnNpb25QaXhlbFNpemUoCi0gICAgICAgICAgICAgICAgUi5kaW1lbi5tcl9jb250cm9sbGVyX3ZvbHVtZV9ncm91cF9saXN0X2l0ZW1faGVpZ2h0KTsKLSAgICAgICAgbVZvbHVtZUdyb3VwTGlzdE1heEhlaWdodCA9IHJlcy5nZXREaW1lbnNpb25QaXhlbFNpemUoCi0gICAgICAgICAgICAgICAgUi5kaW1lbi5tcl9jb250cm9sbGVyX3ZvbHVtZV9ncm91cF9saXN0X21heF9oZWlnaHQpOwotCi0gICAgICAgIC8vIEZldGNoIGFydCBpY29ucyBhZ2FpbiBmb3IgbGF5b3V0IGNoYW5nZXMgdG8gcmVzaXplIGl0IGFjY29yZGluZ2x5Ci0gICAgICAgIG1BcnRJY29uQml0bWFwID0gbnVsbDsKLSAgICAgICAgbUFydEljb25VcmkgPSBudWxsOwotICAgICAgICB1cGRhdGVBcnRJY29uSWZOZWVkZWQoKTsKLSAgICAgICAgdXBkYXRlKGZhbHNlKTsKLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgdm9pZCBvbkF0dGFjaGVkVG9XaW5kb3coKSB7Ci0gICAgICAgIHN1cGVyLm9uQXR0YWNoZWRUb1dpbmRvdygpOwotICAgICAgICBtQXR0YWNoZWRUb1dpbmRvdyA9IHRydWU7Ci0KLSAgICAgICAgbVJvdXRlci5hZGRDYWxsYmFjayhNZWRpYVJvdXRlU2VsZWN0b3IuRU1QVFksIG1DYWxsYmFjaywKLSAgICAgICAgICAgICAgICBNZWRpYVJvdXRlci5DQUxMQkFDS19GTEFHX1VORklMVEVSRURfRVZFTlRTKTsKLSAgICAgICAgc2V0TWVkaWFTZXNzaW9uKG1Sb3V0ZXIuZ2V0TWVkaWFTZXNzaW9uVG9rZW4oKSk7Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIHZvaWQgb25EZXRhY2hlZEZyb21XaW5kb3coKSB7Ci0gICAgICAgIG1Sb3V0ZXIucmVtb3ZlQ2FsbGJhY2sobUNhbGxiYWNrKTsKLSAgICAgICAgc2V0TWVkaWFTZXNzaW9uKG51bGwpOwotICAgICAgICBtQXR0YWNoZWRUb1dpbmRvdyA9IGZhbHNlOwotICAgICAgICBzdXBlci5vbkRldGFjaGVkRnJvbVdpbmRvdygpOwotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyBib29sZWFuIG9uS2V5RG93bihpbnQga2V5Q29kZSwgS2V5RXZlbnQgZXZlbnQpIHsKLSAgICAgICAgaWYgKGtleUNvZGUgPT0gS2V5RXZlbnQuS0VZQ09ERV9WT0xVTUVfRE9XTgotICAgICAgICAgICAgICAgIHx8IGtleUNvZGUgPT0gS2V5RXZlbnQuS0VZQ09ERV9WT0xVTUVfVVApIHsKLSAgICAgICAgICAgIG1Sb3V0ZS5yZXF1ZXN0VXBkYXRlVm9sdW1lKGtleUNvZGUgPT0gS2V5RXZlbnQuS0VZQ09ERV9WT0xVTUVfRE9XTiA/IC0xIDogMSk7Ci0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gc3VwZXIub25LZXlEb3duKGtleUNvZGUsIGV2ZW50KTsKLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgYm9vbGVhbiBvbktleVVwKGludCBrZXlDb2RlLCBLZXlFdmVudCBldmVudCkgewotICAgICAgICBpZiAoa2V5Q29kZSA9PSBLZXlFdmVudC5LRVlDT0RFX1ZPTFVNRV9ET1dOCi0gICAgICAgICAgICAgICAgfHwga2V5Q29kZSA9PSBLZXlFdmVudC5LRVlDT0RFX1ZPTFVNRV9VUCkgewotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIHN1cGVyLm9uS2V5VXAoa2V5Q29kZSwgZXZlbnQpOwotICAgIH0KLQotICAgIHZvaWQgdXBkYXRlKGJvb2xlYW4gYW5pbWF0ZSkgewotICAgICAgICAvLyBEZWZlciBkaWFsb2cgdXBkYXRlcyBpZiBhIHVzZXIgaXMgYWRqdXN0aW5nIGEgdm9sdW1lIGluIHRoZSBsaXN0Ci0gICAgICAgIGlmIChtUm91dGVJblZvbHVtZVNsaWRlclRvdWNoZWQgIT0gbnVsbCkgewotICAgICAgICAgICAgbUhhc1BlbmRpbmdVcGRhdGUgPSB0cnVlOwotICAgICAgICAgICAgbVBlbmRpbmdVcGRhdGVBbmltYXRpb25OZWVkZWQgfD0gYW5pbWF0ZTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAgICAgICBtSGFzUGVuZGluZ1VwZGF0ZSA9IGZhbHNlOwotICAgICAgICBtUGVuZGluZ1VwZGF0ZUFuaW1hdGlvbk5lZWRlZCA9IGZhbHNlOwotICAgICAgICBpZiAoIW1Sb3V0ZS5pc1NlbGVjdGVkKCkgfHwgbVJvdXRlLmlzRGVmYXVsdE9yQmx1ZXRvb3RoKCkpIHsKLSAgICAgICAgICAgIGRpc21pc3MoKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAgICAgICBpZiAoIW1DcmVhdGVkKSB7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLQotICAgICAgICBtUm91dGVOYW1lVGV4dFZpZXcuc2V0VGV4dChtUm91dGUuZ2V0TmFtZSgpKTsKLSAgICAgICAgbURpc2Nvbm5lY3RCdXR0b24uc2V0VmlzaWJpbGl0eShtUm91dGUuY2FuRGlzY29ubmVjdCgpID8gVmlldy5WSVNJQkxFIDogVmlldy5HT05FKTsKLSAgICAgICAgaWYgKG1DdXN0b21Db250cm9sVmlldyA9PSBudWxsICYmIG1BcnRJY29uSXNMb2FkZWQpIHsKLSAgICAgICAgICAgIGlmIChpc0JpdG1hcFJlY3ljbGVkKG1BcnRJY29uTG9hZGVkQml0bWFwKSkgewotICAgICAgICAgICAgICAgIExvZy53KFRBRywgIkNhbid0IHNldCBhcnR3b3JrIGltYWdlIHdpdGggcmVjeWNsZWQgYml0bWFwOiAiICsgbUFydEljb25Mb2FkZWRCaXRtYXApOwotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICBtQXJ0Vmlldy5zZXRJbWFnZUJpdG1hcChtQXJ0SWNvbkxvYWRlZEJpdG1hcCk7Ci0gICAgICAgICAgICAgICAgbUFydFZpZXcuc2V0QmFja2dyb3VuZENvbG9yKG1BcnRJY29uQmFja2dyb3VuZENvbG9yKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGNsZWFyTG9hZGVkQml0bWFwKCk7Ci0gICAgICAgIH0KLSAgICAgICAgdXBkYXRlVm9sdW1lQ29udHJvbExheW91dCgpOwotICAgICAgICB1cGRhdGVQbGF5YmFja0NvbnRyb2xMYXlvdXQoKTsKLSAgICAgICAgdXBkYXRlTGF5b3V0SGVpZ2h0KGFuaW1hdGUpOwotICAgIH0KLQotICAgIHByaXZhdGUgYm9vbGVhbiBpc0JpdG1hcFJlY3ljbGVkKEJpdG1hcCBiaXRtYXApIHsKLSAgICAgICAgcmV0dXJuIGJpdG1hcCAhPSBudWxsICYmIGJpdG1hcC5pc1JlY3ljbGVkKCk7Ci0gICAgfQotCi0gICAgcHJpdmF0ZSBib29sZWFuIGNhblNob3dQbGF5YmFja0NvbnRyb2xMYXlvdXQoKSB7Ci0gICAgICAgIHJldHVybiBtQ3VzdG9tQ29udHJvbFZpZXcgPT0gbnVsbCAmJiAobURlc2NyaXB0aW9uICE9IG51bGwgfHwgbVN0YXRlICE9IG51bGwpOwotICAgIH0KLQotICAgIC8qKgotICAgICAqIFJldHVybnMgdGhlIGhlaWdodCBvZiBtYWluIG1lZGlhIGNvbnRyb2xsZXIgd2hpY2ggaW5jbHVkZXMgcGxheWJhY2sgY29udHJvbCBhbmQgbWFzdGVyCi0gICAgICogdm9sdW1lIGNvbnRyb2wuCi0gICAgICovCi0gICAgcHJpdmF0ZSBpbnQgZ2V0TWFpbkNvbnRyb2xsZXJIZWlnaHQoYm9vbGVhbiBzaG93UGxheWJhY2tDb250cm9sKSB7Ci0gICAgICAgIGludCBoZWlnaHQgPSAwOwotICAgICAgICBpZiAoc2hvd1BsYXliYWNrQ29udHJvbCB8fCBtVm9sdW1lQ29udHJvbExheW91dC5nZXRWaXNpYmlsaXR5KCkgPT0gVmlldy5WSVNJQkxFKSB7Ci0gICAgICAgICAgICBoZWlnaHQgKz0gbU1lZGlhTWFpbkNvbnRyb2xMYXlvdXQuZ2V0UGFkZGluZ1RvcCgpCi0gICAgICAgICAgICAgICAgICAgICsgbU1lZGlhTWFpbkNvbnRyb2xMYXlvdXQuZ2V0UGFkZGluZ0JvdHRvbSgpOwotICAgICAgICAgICAgaWYgKHNob3dQbGF5YmFja0NvbnRyb2wpIHsKLSAgICAgICAgICAgICAgICBoZWlnaHQgKz0gIG1QbGF5YmFja0NvbnRyb2xMYXlvdXQuZ2V0TWVhc3VyZWRIZWlnaHQoKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmIChtVm9sdW1lQ29udHJvbExheW91dC5nZXRWaXNpYmlsaXR5KCkgPT0gVmlldy5WSVNJQkxFKSB7Ci0gICAgICAgICAgICAgICAgaGVpZ2h0ICs9IG1Wb2x1bWVDb250cm9sTGF5b3V0LmdldE1lYXN1cmVkSGVpZ2h0KCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAoc2hvd1BsYXliYWNrQ29udHJvbCAmJiBtVm9sdW1lQ29udHJvbExheW91dC5nZXRWaXNpYmlsaXR5KCkgPT0gVmlldy5WSVNJQkxFKSB7Ci0gICAgICAgICAgICAgICAgaGVpZ2h0ICs9IG1EaXZpZGVyVmlldy5nZXRNZWFzdXJlZEhlaWdodCgpOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIHJldHVybiBoZWlnaHQ7Ci0gICAgfQotCi0gICAgcHJpdmF0ZSB2b2lkIHVwZGF0ZU1lZGlhQ29udHJvbFZpc2liaWxpdHkoYm9vbGVhbiBjYW5TaG93UGxheWJhY2tDb250cm9sTGF5b3V0KSB7Ci0gICAgICAgIC8vIFRPRE86IFVwZGF0ZSB0aGUgdG9wIGFuZCBib3R0b20gcGFkZGluZyBvZiB0aGUgY29udHJvbCBsYXlvdXQgYWNjb3JkaW5nIHRvIHRoZSBkaXNwbGF5Ci0gICAgICAgIC8vIGhlaWdodC4KLSAgICAgICAgbURpdmlkZXJWaWV3LnNldFZpc2liaWxpdHkoKG1Wb2x1bWVDb250cm9sTGF5b3V0LmdldFZpc2liaWxpdHkoKSA9PSBWaWV3LlZJU0lCTEUKLSAgICAgICAgICAgICAgICAmJiBjYW5TaG93UGxheWJhY2tDb250cm9sTGF5b3V0KSA/IFZpZXcuVklTSUJMRSA6IFZpZXcuR09ORSk7Ci0gICAgICAgIG1NZWRpYU1haW5Db250cm9sTGF5b3V0LnNldFZpc2liaWxpdHkoKG1Wb2x1bWVDb250cm9sTGF5b3V0LmdldFZpc2liaWxpdHkoKSA9PSBWaWV3LkdPTkUKLSAgICAgICAgICAgICAgICAmJiAhY2FuU2hvd1BsYXliYWNrQ29udHJvbExheW91dCkgPyBWaWV3LkdPTkUgOiBWaWV3LlZJU0lCTEUpOwotICAgIH0KLQotICAgIHZvaWQgdXBkYXRlTGF5b3V0SGVpZ2h0KGZpbmFsIGJvb2xlYW4gYW5pbWF0ZSkgewotICAgICAgICAvLyBXZSBuZWVkIHRvIGRlZmVyIHRoZSB1cGRhdGUgdW50aWwgdGhlIGZpcnN0IGxheW91dCBoYXMgb2NjdXJyZWQsIGFzIHdlIGRvbid0IHlldCBrbm93IHRoZQotICAgICAgICAvLyBvdmVyYWxsIHZpc2libGUgZGlzcGxheSBzaXplIGluIHdoaWNoIHRoZSB3aW5kb3cgdGhpcyB2aWV3IGlzIGF0dGFjaGVkIHRvIGhhcyBiZWVuCi0gICAgICAgIC8vIHBvc2l0aW9uZWQgaW4uCi0gICAgICAgIG1EZWZhdWx0Q29udHJvbExheW91dC5yZXF1ZXN0TGF5b3V0KCk7Ci0gICAgICAgIFZpZXdUcmVlT2JzZXJ2ZXIgb2JzZXJ2ZXIgPSBtRGVmYXVsdENvbnRyb2xMYXlvdXQuZ2V0Vmlld1RyZWVPYnNlcnZlcigpOwotICAgICAgICBvYnNlcnZlci5hZGRPbkdsb2JhbExheW91dExpc3RlbmVyKG5ldyBWaWV3VHJlZU9ic2VydmVyLk9uR2xvYmFsTGF5b3V0TGlzdGVuZXIoKSB7Ci0gICAgICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgICAgIHB1YmxpYyB2b2lkIG9uR2xvYmFsTGF5b3V0KCkgewotICAgICAgICAgICAgICAgIG1EZWZhdWx0Q29udHJvbExheW91dC5nZXRWaWV3VHJlZU9ic2VydmVyKCkucmVtb3ZlR2xvYmFsT25MYXlvdXRMaXN0ZW5lcih0aGlzKTsKLSAgICAgICAgICAgICAgICBpZiAobUlzR3JvdXBMaXN0QW5pbWF0aW5nKSB7Ci0gICAgICAgICAgICAgICAgICAgIG1Jc0dyb3VwTGlzdEFuaW1hdGlvblBlbmRpbmcgPSB0cnVlOwotICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgIHVwZGF0ZUxheW91dEhlaWdodEludGVybmFsKGFuaW1hdGUpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgfSk7Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogVXBkYXRlcyB0aGUgaGVpZ2h0IG9mIHZpZXdzIGFuZCBoaWRlIGFydHdvcmsgb3IgbWV0YWRhdGEgaWYgc3BhY2UgaXMgbGltaXRlZC4KLSAgICAgKi8KLSAgICB2b2lkIHVwZGF0ZUxheW91dEhlaWdodEludGVybmFsKGJvb2xlYW4gYW5pbWF0ZSkgewotICAgICAgICAvLyBNZWFzdXJlIHRoZSBzaXplIG9mIHdpZGdldHMgYW5kIGdldCB0aGUgaGVpZ2h0IG9mIG1haW4gY29tcG9uZW50cy4KLSAgICAgICAgaW50IG9sZEhlaWdodCA9IGdldExheW91dEhlaWdodChtTWVkaWFNYWluQ29udHJvbExheW91dCk7Ci0gICAgICAgIHNldExheW91dEhlaWdodChtTWVkaWFNYWluQ29udHJvbExheW91dCwgVmlld0dyb3VwLkxheW91dFBhcmFtcy5NQVRDSF9QQVJFTlQpOwotICAgICAgICB1cGRhdGVNZWRpYUNvbnRyb2xWaXNpYmlsaXR5KGNhblNob3dQbGF5YmFja0NvbnRyb2xMYXlvdXQoKSk7Ci0gICAgICAgIFZpZXcgZGVjb3JWaWV3ID0gZ2V0V2luZG93KCkuZ2V0RGVjb3JWaWV3KCk7Ci0gICAgICAgIGRlY29yVmlldy5tZWFzdXJlKAotICAgICAgICAgICAgICAgIE1lYXN1cmVTcGVjLm1ha2VNZWFzdXJlU3BlYyhnZXRXaW5kb3coKS5nZXRBdHRyaWJ1dGVzKCkud2lkdGgsIE1lYXN1cmVTcGVjLkVYQUNUTFkpLAotICAgICAgICAgICAgICAgIE1lYXN1cmVTcGVjLlVOU1BFQ0lGSUVEKTsKLSAgICAgICAgc2V0TGF5b3V0SGVpZ2h0KG1NZWRpYU1haW5Db250cm9sTGF5b3V0LCBvbGRIZWlnaHQpOwotICAgICAgICBpbnQgYXJ0Vmlld0hlaWdodCA9IDA7Ci0gICAgICAgIGlmIChtQ3VzdG9tQ29udHJvbFZpZXcgPT0gbnVsbCAmJiBtQXJ0Vmlldy5nZXREcmF3YWJsZSgpIGluc3RhbmNlb2YgQml0bWFwRHJhd2FibGUpIHsKLSAgICAgICAgICAgIEJpdG1hcCBhcnQgPSAoKEJpdG1hcERyYXdhYmxlKSBtQXJ0Vmlldy5nZXREcmF3YWJsZSgpKS5nZXRCaXRtYXAoKTsKLSAgICAgICAgICAgIGlmIChhcnQgIT0gbnVsbCkgewotICAgICAgICAgICAgICAgIGFydFZpZXdIZWlnaHQgPSBnZXREZXNpcmVkQXJ0SGVpZ2h0KGFydC5nZXRXaWR0aCgpLCBhcnQuZ2V0SGVpZ2h0KCkpOwotICAgICAgICAgICAgICAgIG1BcnRWaWV3LnNldFNjYWxlVHlwZShhcnQuZ2V0V2lkdGgoKSA+PSBhcnQuZ2V0SGVpZ2h0KCkKLSAgICAgICAgICAgICAgICAgICAgICAgID8gSW1hZ2VWaWV3LlNjYWxlVHlwZS5GSVRfWFkgOiBJbWFnZVZpZXcuU2NhbGVUeXBlLkZJVF9DRU5URVIpOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIGludCBtYWluQ29udHJvbGxlckhlaWdodCA9IGdldE1haW5Db250cm9sbGVySGVpZ2h0KGNhblNob3dQbGF5YmFja0NvbnRyb2xMYXlvdXQoKSk7Ci0gICAgICAgIGludCB2b2x1bWVHcm91cExpc3RDb3VudCA9IG1Hcm91cE1lbWJlclJvdXRlcy5zaXplKCk7Ci0gICAgICAgIC8vIFNjYWxlIGRvd24gdm9sdW1lIGdyb3VwIGxpc3QgaXRlbXMgaW4gbGFuZHNjYXBlIG1vZGUuCi0gICAgICAgIGludCBleHBhbmRlZEdyb3VwTGlzdEhlaWdodCA9IGdldEdyb3VwKCkgPT0gbnVsbCA/IDAgOgotICAgICAgICAgICAgICAgIG1Wb2x1bWVHcm91cExpc3RJdGVtSGVpZ2h0ICogZ2V0R3JvdXAoKS5nZXRSb3V0ZXMoKS5zaXplKCk7Ci0gICAgICAgIGlmICh2b2x1bWVHcm91cExpc3RDb3VudCA+IDApIHsKLSAgICAgICAgICAgIGV4cGFuZGVkR3JvdXBMaXN0SGVpZ2h0ICs9IG1Wb2x1bWVHcm91cExpc3RQYWRkaW5nVG9wOwotICAgICAgICB9Ci0gICAgICAgIGV4cGFuZGVkR3JvdXBMaXN0SGVpZ2h0ID0gTWF0aC5taW4oZXhwYW5kZWRHcm91cExpc3RIZWlnaHQsIG1Wb2x1bWVHcm91cExpc3RNYXhIZWlnaHQpOwotICAgICAgICBpbnQgdmlzaWJsZUdyb3VwTGlzdEhlaWdodCA9IG1Jc0dyb3VwRXhwYW5kZWQgPyBleHBhbmRlZEdyb3VwTGlzdEhlaWdodCA6IDA7Ci0KLSAgICAgICAgaW50IGRlc2lyZWRDb250cm9sTGF5b3V0SGVpZ2h0ID0KLSAgICAgICAgICAgICAgICBNYXRoLm1heChhcnRWaWV3SGVpZ2h0LCB2aXNpYmxlR3JvdXBMaXN0SGVpZ2h0KSArIG1haW5Db250cm9sbGVySGVpZ2h0OwotICAgICAgICBSZWN0IHZpc2libGVSZWN0ID0gbmV3IFJlY3QoKTsKLSAgICAgICAgZGVjb3JWaWV3LmdldFdpbmRvd1Zpc2libGVEaXNwbGF5RnJhbWUodmlzaWJsZVJlY3QpOwotICAgICAgICAvLyBIZWlnaHQgb2Ygbm9uLWNvbnRyb2wgdmlld3MgaW4gZGVjb3Igdmlldy4KLSAgICAgICAgLy8gVGhpcyBpbmNsdWRlcyB0aXRsZSBiYXIsIGJ1dHRvbiBiYXIsIGFuZCBkaWFsb2cncyB2ZXJ0aWNhbCBwYWRkaW5nIHdoaWNoIHNob3VsZCBiZQotICAgICAgICAvLyBhbHdheXMgc2hvd24uCi0gICAgICAgIGludCBub25Db250cm9sVmlld0hlaWdodCA9IG1EaWFsb2dBcmVhTGF5b3V0LmdldE1lYXN1cmVkSGVpZ2h0KCkKLSAgICAgICAgICAgICAgICAtIG1EZWZhdWx0Q29udHJvbExheW91dC5nZXRNZWFzdXJlZEhlaWdodCgpOwotICAgICAgICAvLyBNYXhpbXVtIGFsbG93ZWQgaGVpZ2h0IGZvciBjb250cm9scyB0byBmaXQgc2NyZWVuLgotICAgICAgICBpbnQgbWF4aW11bUNvbnRyb2xWaWV3SGVpZ2h0ID0gdmlzaWJsZVJlY3QuaGVpZ2h0KCkgLSBub25Db250cm9sVmlld0hlaWdodDsKLQotICAgICAgICAvLyBTaG93IGFydHdvcmsgaWYgaXQgZml0cyB0aGUgc2NyZWVuLgotICAgICAgICBpZiAobUN1c3RvbUNvbnRyb2xWaWV3ID09IG51bGwgJiYgYXJ0Vmlld0hlaWdodCA+IDAKLSAgICAgICAgICAgICAgICAmJiBkZXNpcmVkQ29udHJvbExheW91dEhlaWdodCA8PSBtYXhpbXVtQ29udHJvbFZpZXdIZWlnaHQpIHsKLSAgICAgICAgICAgIG1BcnRWaWV3LnNldFZpc2liaWxpdHkoVmlldy5WSVNJQkxFKTsKLSAgICAgICAgICAgIHNldExheW91dEhlaWdodChtQXJ0VmlldywgYXJ0Vmlld0hlaWdodCk7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBpZiAoZ2V0TGF5b3V0SGVpZ2h0KG1Wb2x1bWVHcm91cExpc3QpICsgbU1lZGlhTWFpbkNvbnRyb2xMYXlvdXQuZ2V0TWVhc3VyZWRIZWlnaHQoKQotICAgICAgICAgICAgICAgICAgICA+PSBtRGVmYXVsdENvbnRyb2xMYXlvdXQuZ2V0TWVhc3VyZWRIZWlnaHQoKSkgewotICAgICAgICAgICAgICAgIG1BcnRWaWV3LnNldFZpc2liaWxpdHkoVmlldy5HT05FKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGFydFZpZXdIZWlnaHQgPSAwOwotICAgICAgICAgICAgZGVzaXJlZENvbnRyb2xMYXlvdXRIZWlnaHQgPSB2aXNpYmxlR3JvdXBMaXN0SGVpZ2h0ICsgbWFpbkNvbnRyb2xsZXJIZWlnaHQ7Ci0gICAgICAgIH0KLSAgICAgICAgLy8gU2hvdyB0aGUgcGxheWJhY2sgY29udHJvbCBpZiBpdCBmaXRzIHRoZSBzY3JlZW4uCi0gICAgICAgIGlmIChjYW5TaG93UGxheWJhY2tDb250cm9sTGF5b3V0KCkKLSAgICAgICAgICAgICAgICAmJiBkZXNpcmVkQ29udHJvbExheW91dEhlaWdodCA8PSBtYXhpbXVtQ29udHJvbFZpZXdIZWlnaHQpIHsKLSAgICAgICAgICAgIG1QbGF5YmFja0NvbnRyb2xMYXlvdXQuc2V0VmlzaWJpbGl0eShWaWV3LlZJU0lCTEUpOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgbVBsYXliYWNrQ29udHJvbExheW91dC5zZXRWaXNpYmlsaXR5KFZpZXcuR09ORSk7Ci0gICAgICAgIH0KLSAgICAgICAgdXBkYXRlTWVkaWFDb250cm9sVmlzaWJpbGl0eShtUGxheWJhY2tDb250cm9sTGF5b3V0LmdldFZpc2liaWxpdHkoKSA9PSBWaWV3LlZJU0lCTEUpOwotICAgICAgICBtYWluQ29udHJvbGxlckhlaWdodCA9IGdldE1haW5Db250cm9sbGVySGVpZ2h0KAotICAgICAgICAgICAgICAgIG1QbGF5YmFja0NvbnRyb2xMYXlvdXQuZ2V0VmlzaWJpbGl0eSgpID09IFZpZXcuVklTSUJMRSk7Ci0gICAgICAgIGRlc2lyZWRDb250cm9sTGF5b3V0SGVpZ2h0ID0KLSAgICAgICAgICAgICAgICBNYXRoLm1heChhcnRWaWV3SGVpZ2h0LCB2aXNpYmxlR3JvdXBMaXN0SGVpZ2h0KSArIG1haW5Db250cm9sbGVySGVpZ2h0OwotCi0gICAgICAgIC8vIExpbWl0IHRoZSB2b2x1bWUgZ3JvdXAgbGlzdCBoZWlnaHQgdG8gZml0IHRoZSBzY3JlZW4uCi0gICAgICAgIGlmIChkZXNpcmVkQ29udHJvbExheW91dEhlaWdodCA+IG1heGltdW1Db250cm9sVmlld0hlaWdodCkgewotICAgICAgICAgICAgdmlzaWJsZUdyb3VwTGlzdEhlaWdodCAtPSAoZGVzaXJlZENvbnRyb2xMYXlvdXRIZWlnaHQgLSBtYXhpbXVtQ29udHJvbFZpZXdIZWlnaHQpOwotICAgICAgICAgICAgZGVzaXJlZENvbnRyb2xMYXlvdXRIZWlnaHQgPSBtYXhpbXVtQ29udHJvbFZpZXdIZWlnaHQ7Ci0gICAgICAgIH0KLSAgICAgICAgLy8gVXBkYXRlIHRoZSBsYXlvdXRzIHdpdGggdGhlIGNvbXB1dGVkIGhlaWdodHMuCi0gICAgICAgIG1NZWRpYU1haW5Db250cm9sTGF5b3V0LmNsZWFyQW5pbWF0aW9uKCk7Ci0gICAgICAgIG1Wb2x1bWVHcm91cExpc3QuY2xlYXJBbmltYXRpb24oKTsKLSAgICAgICAgbURlZmF1bHRDb250cm9sTGF5b3V0LmNsZWFyQW5pbWF0aW9uKCk7Ci0gICAgICAgIGlmIChhbmltYXRlKSB7Ci0gICAgICAgICAgICBhbmltYXRlTGF5b3V0SGVpZ2h0KG1NZWRpYU1haW5Db250cm9sTGF5b3V0LCBtYWluQ29udHJvbGxlckhlaWdodCk7Ci0gICAgICAgICAgICBhbmltYXRlTGF5b3V0SGVpZ2h0KG1Wb2x1bWVHcm91cExpc3QsIHZpc2libGVHcm91cExpc3RIZWlnaHQpOwotICAgICAgICAgICAgYW5pbWF0ZUxheW91dEhlaWdodChtRGVmYXVsdENvbnRyb2xMYXlvdXQsIGRlc2lyZWRDb250cm9sTGF5b3V0SGVpZ2h0KTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIHNldExheW91dEhlaWdodChtTWVkaWFNYWluQ29udHJvbExheW91dCwgbWFpbkNvbnRyb2xsZXJIZWlnaHQpOwotICAgICAgICAgICAgc2V0TGF5b3V0SGVpZ2h0KG1Wb2x1bWVHcm91cExpc3QsIHZpc2libGVHcm91cExpc3RIZWlnaHQpOwotICAgICAgICAgICAgc2V0TGF5b3V0SGVpZ2h0KG1EZWZhdWx0Q29udHJvbExheW91dCwgZGVzaXJlZENvbnRyb2xMYXlvdXRIZWlnaHQpOwotICAgICAgICB9Ci0gICAgICAgIC8vIE1heGltaXplIHRoZSB3aW5kb3cgc2l6ZSB3aXRoIGEgdHJhbnNwYXJlbnQgbGF5b3V0IGluIGFkdmFuY2UgZm9yIHNtb290aCBhbmltYXRpb24uCi0gICAgICAgIHNldExheW91dEhlaWdodChtRXhwYW5kYWJsZUFyZWFMYXlvdXQsIHZpc2libGVSZWN0LmhlaWdodCgpKTsKLSAgICAgICAgcmVidWlsZFZvbHVtZUdyb3VwTGlzdChhbmltYXRlKTsKLSAgICB9Ci0KLSAgICB2b2lkIHVwZGF0ZVZvbHVtZUdyb3VwSXRlbUhlaWdodChWaWV3IGl0ZW0pIHsKLSAgICAgICAgTGluZWFyTGF5b3V0IGNvbnRhaW5lciA9IChMaW5lYXJMYXlvdXQpIGl0ZW0uZmluZFZpZXdCeUlkKFIuaWQudm9sdW1lX2l0ZW1fY29udGFpbmVyKTsKLSAgICAgICAgc2V0TGF5b3V0SGVpZ2h0KGNvbnRhaW5lciwgbVZvbHVtZUdyb3VwTGlzdEl0ZW1IZWlnaHQpOwotICAgICAgICBWaWV3IGljb24gPSBpdGVtLmZpbmRWaWV3QnlJZChSLmlkLm1yX3ZvbHVtZV9pdGVtX2ljb24pOwotICAgICAgICBWaWV3R3JvdXAuTGF5b3V0UGFyYW1zIGxwID0gaWNvbi5nZXRMYXlvdXRQYXJhbXMoKTsKLSAgICAgICAgbHAud2lkdGggPSBtVm9sdW1lR3JvdXBMaXN0SXRlbUljb25TaXplOwotICAgICAgICBscC5oZWlnaHQgPSBtVm9sdW1lR3JvdXBMaXN0SXRlbUljb25TaXplOwotICAgICAgICBpY29uLnNldExheW91dFBhcmFtcyhscCk7Ci0gICAgfQotCi0gICAgcHJpdmF0ZSB2b2lkIGFuaW1hdGVMYXlvdXRIZWlnaHQoZmluYWwgVmlldyB2aWV3LCBpbnQgdGFyZ2V0SGVpZ2h0KSB7Ci0gICAgICAgIGZpbmFsIGludCBzdGFydFZhbHVlID0gZ2V0TGF5b3V0SGVpZ2h0KHZpZXcpOwotICAgICAgICBmaW5hbCBpbnQgZW5kVmFsdWUgPSB0YXJnZXRIZWlnaHQ7Ci0gICAgICAgIEFuaW1hdGlvbiBhbmltID0gbmV3IEFuaW1hdGlvbigpIHsKLSAgICAgICAgICAgIEBPdmVycmlkZQotICAgICAgICAgICAgcHJvdGVjdGVkIHZvaWQgYXBwbHlUcmFuc2Zvcm1hdGlvbihmbG9hdCBpbnRlcnBvbGF0ZWRUaW1lLCBUcmFuc2Zvcm1hdGlvbiB0KSB7Ci0gICAgICAgICAgICAgICAgaW50IGhlaWdodCA9IHN0YXJ0VmFsdWUgLSAoaW50KSAoKHN0YXJ0VmFsdWUgLSBlbmRWYWx1ZSkgKiBpbnRlcnBvbGF0ZWRUaW1lKTsKLSAgICAgICAgICAgICAgICBzZXRMYXlvdXRIZWlnaHQodmlldywgaGVpZ2h0KTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfTsKLSAgICAgICAgYW5pbS5zZXREdXJhdGlvbihtR3JvdXBMaXN0QW5pbWF0aW9uRHVyYXRpb25Ncyk7Ci0gICAgICAgIGlmIChhbmRyb2lkLm9zLkJ1aWxkLlZFUlNJT04uU0RLX0lOVCA+PSAyMSkgewotICAgICAgICAgICAgYW5pbS5zZXRJbnRlcnBvbGF0b3IobUludGVycG9sYXRvcik7Ci0gICAgICAgIH0KLSAgICAgICAgdmlldy5zdGFydEFuaW1hdGlvbihhbmltKTsKLSAgICB9Ci0KLSAgICB2b2lkIGxvYWRJbnRlcnBvbGF0b3IoKSB7Ci0gICAgICAgIG1JbnRlcnBvbGF0b3IgPQotICAgICAgICAgICAgICAgIG1Jc0dyb3VwRXhwYW5kZWQgPyBtTGluZWFyT3V0U2xvd0luSW50ZXJwb2xhdG9yIDogbUZhc3RPdXRTbG93SW5JbnRlcnBvbGF0b3I7Ci0gICAgfQotCi0gICAgcHJpdmF0ZSB2b2lkIHVwZGF0ZVZvbHVtZUNvbnRyb2xMYXlvdXQoKSB7Ci0gICAgICAgIGlmIChpc1ZvbHVtZUNvbnRyb2xBdmFpbGFibGUobVJvdXRlKSkgewotICAgICAgICAgICAgaWYgKG1Wb2x1bWVDb250cm9sTGF5b3V0LmdldFZpc2liaWxpdHkoKSA9PSBWaWV3LkdPTkUpIHsKLSAgICAgICAgICAgICAgICBtVm9sdW1lQ29udHJvbExheW91dC5zZXRWaXNpYmlsaXR5KFZpZXcuVklTSUJMRSk7Ci0gICAgICAgICAgICAgICAgbVZvbHVtZVNsaWRlci5zZXRNYXgobVJvdXRlLmdldFZvbHVtZU1heCgpKTsKLSAgICAgICAgICAgICAgICBtVm9sdW1lU2xpZGVyLnNldFByb2dyZXNzKG1Sb3V0ZS5nZXRWb2x1bWUoKSk7Ci0gICAgICAgICAgICAgICAgbUdyb3VwRXhwYW5kQ29sbGFwc2VCdXR0b24uc2V0VmlzaWJpbGl0eShnZXRHcm91cCgpID09IG51bGwgPyBWaWV3LkdPTkUKLSAgICAgICAgICAgICAgICAgICAgICAgIDogVmlldy5WSVNJQkxFKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIG1Wb2x1bWVDb250cm9sTGF5b3V0LnNldFZpc2liaWxpdHkoVmlldy5HT05FKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIHByaXZhdGUgdm9pZCByZWJ1aWxkVm9sdW1lR3JvdXBMaXN0KGJvb2xlYW4gYW5pbWF0ZSkgewotICAgICAgICBMaXN0PE1lZGlhUm91dGVyLlJvdXRlSW5mbz4gcm91dGVzID0gZ2V0R3JvdXAoKSA9PSBudWxsID8gbnVsbCA6IGdldEdyb3VwKCkuZ2V0Um91dGVzKCk7Ci0gICAgICAgIGlmIChyb3V0ZXMgPT0gbnVsbCkgewotICAgICAgICAgICAgbUdyb3VwTWVtYmVyUm91dGVzLmNsZWFyKCk7Ci0gICAgICAgICAgICBtVm9sdW1lR3JvdXBBZGFwdGVyLm5vdGlmeURhdGFTZXRDaGFuZ2VkKCk7Ci0gICAgICAgIH0gZWxzZSBpZiAoTWVkaWFSb3V0ZURpYWxvZ0hlbHBlci5saXN0VW5vcmRlcmVkRXF1YWxzKG1Hcm91cE1lbWJlclJvdXRlcywgcm91dGVzKSkgewotICAgICAgICAgICAgbVZvbHVtZUdyb3VwQWRhcHRlci5ub3RpZnlEYXRhU2V0Q2hhbmdlZCgpOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgSGFzaE1hcDxNZWRpYVJvdXRlci5Sb3V0ZUluZm8sIFJlY3Q+IHByZXZpb3VzUm91dGVCb3VuZE1hcCA9IGFuaW1hdGUKLSAgICAgICAgICAgICAgICAgICAgPyBNZWRpYVJvdXRlRGlhbG9nSGVscGVyLmdldEl0ZW1Cb3VuZE1hcChtVm9sdW1lR3JvdXBMaXN0LCBtVm9sdW1lR3JvdXBBZGFwdGVyKQotICAgICAgICAgICAgICAgICAgICA6IG51bGw7Ci0gICAgICAgICAgICBIYXNoTWFwPE1lZGlhUm91dGVyLlJvdXRlSW5mbywgQml0bWFwRHJhd2FibGU+IHByZXZpb3VzUm91dGVCaXRtYXBNYXAgPSBhbmltYXRlCi0gICAgICAgICAgICAgICAgICAgID8gTWVkaWFSb3V0ZURpYWxvZ0hlbHBlci5nZXRJdGVtQml0bWFwTWFwKG1Db250ZXh0LCBtVm9sdW1lR3JvdXBMaXN0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1Wb2x1bWVHcm91cEFkYXB0ZXIpIDogbnVsbDsKLSAgICAgICAgICAgIG1Hcm91cE1lbWJlclJvdXRlc0FkZGVkID0KLSAgICAgICAgICAgICAgICAgICAgTWVkaWFSb3V0ZURpYWxvZ0hlbHBlci5nZXRJdGVtc0FkZGVkKG1Hcm91cE1lbWJlclJvdXRlcywgcm91dGVzKTsKLSAgICAgICAgICAgIG1Hcm91cE1lbWJlclJvdXRlc1JlbW92ZWQgPSBNZWRpYVJvdXRlRGlhbG9nSGVscGVyLmdldEl0ZW1zUmVtb3ZlZChtR3JvdXBNZW1iZXJSb3V0ZXMsCi0gICAgICAgICAgICAgICAgICAgIHJvdXRlcyk7Ci0gICAgICAgICAgICBtR3JvdXBNZW1iZXJSb3V0ZXMuYWRkQWxsKDAsIG1Hcm91cE1lbWJlclJvdXRlc0FkZGVkKTsKLSAgICAgICAgICAgIG1Hcm91cE1lbWJlclJvdXRlcy5yZW1vdmVBbGwobUdyb3VwTWVtYmVyUm91dGVzUmVtb3ZlZCk7Ci0gICAgICAgICAgICBtVm9sdW1lR3JvdXBBZGFwdGVyLm5vdGlmeURhdGFTZXRDaGFuZ2VkKCk7Ci0gICAgICAgICAgICBpZiAoYW5pbWF0ZSAmJiBtSXNHcm91cEV4cGFuZGVkCi0gICAgICAgICAgICAgICAgICAgICYmIG1Hcm91cE1lbWJlclJvdXRlc0FkZGVkLnNpemUoKSArIG1Hcm91cE1lbWJlclJvdXRlc1JlbW92ZWQuc2l6ZSgpID4gMCkgewotICAgICAgICAgICAgICAgIGFuaW1hdGVHcm91cExpc3RJdGVtcyhwcmV2aW91c1JvdXRlQm91bmRNYXAsIHByZXZpb3VzUm91dGVCaXRtYXBNYXApOwotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICBtR3JvdXBNZW1iZXJSb3V0ZXNBZGRlZCA9IG51bGw7Ci0gICAgICAgICAgICAgICAgbUdyb3VwTWVtYmVyUm91dGVzUmVtb3ZlZCA9IG51bGw7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBwcml2YXRlIHZvaWQgYW5pbWF0ZUdyb3VwTGlzdEl0ZW1zKGZpbmFsIE1hcDxNZWRpYVJvdXRlci5Sb3V0ZUluZm8sIFJlY3Q+IHByZXZpb3VzUm91dGVCb3VuZE1hcCwKLSAgICAgICAgICAgIGZpbmFsIE1hcDxNZWRpYVJvdXRlci5Sb3V0ZUluZm8sIEJpdG1hcERyYXdhYmxlPiBwcmV2aW91c1JvdXRlQml0bWFwTWFwKSB7Ci0gICAgICAgIG1Wb2x1bWVHcm91cExpc3Quc2V0RW5hYmxlZChmYWxzZSk7Ci0gICAgICAgIG1Wb2x1bWVHcm91cExpc3QucmVxdWVzdExheW91dCgpOwotICAgICAgICBtSXNHcm91cExpc3RBbmltYXRpbmcgPSB0cnVlOwotICAgICAgICBWaWV3VHJlZU9ic2VydmVyIG9ic2VydmVyID0gbVZvbHVtZUdyb3VwTGlzdC5nZXRWaWV3VHJlZU9ic2VydmVyKCk7Ci0gICAgICAgIG9ic2VydmVyLmFkZE9uR2xvYmFsTGF5b3V0TGlzdGVuZXIobmV3IFZpZXdUcmVlT2JzZXJ2ZXIuT25HbG9iYWxMYXlvdXRMaXN0ZW5lcigpIHsKLSAgICAgICAgICAgIEBPdmVycmlkZQotICAgICAgICAgICAgcHVibGljIHZvaWQgb25HbG9iYWxMYXlvdXQoKSB7Ci0gICAgICAgICAgICAgICAgbVZvbHVtZUdyb3VwTGlzdC5nZXRWaWV3VHJlZU9ic2VydmVyKCkucmVtb3ZlR2xvYmFsT25MYXlvdXRMaXN0ZW5lcih0aGlzKTsKLSAgICAgICAgICAgICAgICBhbmltYXRlR3JvdXBMaXN0SXRlbXNJbnRlcm5hbChwcmV2aW91c1JvdXRlQm91bmRNYXAsIHByZXZpb3VzUm91dGVCaXRtYXBNYXApOwotICAgICAgICAgICAgfQotICAgICAgICB9KTsKLSAgICB9Ci0KLSAgICB2b2lkIGFuaW1hdGVHcm91cExpc3RJdGVtc0ludGVybmFsKAotICAgICAgICAgICAgTWFwPE1lZGlhUm91dGVyLlJvdXRlSW5mbywgUmVjdD4gcHJldmlvdXNSb3V0ZUJvdW5kTWFwLAotICAgICAgICAgICAgTWFwPE1lZGlhUm91dGVyLlJvdXRlSW5mbywgQml0bWFwRHJhd2FibGU+IHByZXZpb3VzUm91dGVCaXRtYXBNYXApIHsKLSAgICAgICAgaWYgKG1Hcm91cE1lbWJlclJvdXRlc0FkZGVkID09IG51bGwgfHwgbUdyb3VwTWVtYmVyUm91dGVzUmVtb3ZlZCA9PSBudWxsKSB7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICAgICAgaW50IGdyb3VwU2l6ZURlbHRhID0gbUdyb3VwTWVtYmVyUm91dGVzQWRkZWQuc2l6ZSgpIC0gbUdyb3VwTWVtYmVyUm91dGVzUmVtb3ZlZC5zaXplKCk7Ci0gICAgICAgIGJvb2xlYW4gbGlzdGVuZXJSZWdpc3RlcmVkID0gZmFsc2U7Ci0gICAgICAgIEFuaW1hdGlvbi5BbmltYXRpb25MaXN0ZW5lciBsaXN0ZW5lciA9IG5ldyBBbmltYXRpb24uQW5pbWF0aW9uTGlzdGVuZXIoKSB7Ci0gICAgICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgICAgIHB1YmxpYyB2b2lkIG9uQW5pbWF0aW9uU3RhcnQoQW5pbWF0aW9uIGFuaW1hdGlvbikgewotICAgICAgICAgICAgICAgIG1Wb2x1bWVHcm91cExpc3Quc3RhcnRBbmltYXRpb25BbGwoKTsKLSAgICAgICAgICAgICAgICBtVm9sdW1lR3JvdXBMaXN0LnBvc3REZWxheWVkKG1Hcm91cExpc3RGYWRlSW5BbmltYXRpb24sCi0gICAgICAgICAgICAgICAgICAgICAgICBtR3JvdXBMaXN0QW5pbWF0aW9uRHVyYXRpb25Ncyk7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIEBPdmVycmlkZQotICAgICAgICAgICAgcHVibGljIHZvaWQgb25BbmltYXRpb25FbmQoQW5pbWF0aW9uIGFuaW1hdGlvbikgeyB9Ci0KLSAgICAgICAgICAgIEBPdmVycmlkZQotICAgICAgICAgICAgcHVibGljIHZvaWQgb25BbmltYXRpb25SZXBlYXQoQW5pbWF0aW9uIGFuaW1hdGlvbikgeyB9Ci0gICAgICAgIH07Ci0KLSAgICAgICAgLy8gQW5pbWF0ZSB2aXNpYmxlIGl0ZW1zIGZyb20gcHJldmlvdXMgcG9zaXRpb25zIHRvIGN1cnJlbnQgcG9zaXRpb25zIGV4Y2VwdCByb3V0ZXMgYWRkZWQKLSAgICAgICAgLy8ganVzdCBiZWZvcmUuIEFkZGVkIHJvdXRlcyB3aWxsIHJlbWFpbiBoaWRkZW4gdW50aWwgdHJhbnNsYXRlIGFuaW1hdGlvbiBmaW5pc2hlcy4KLSAgICAgICAgaW50IGZpcnN0ID0gbVZvbHVtZUdyb3VwTGlzdC5nZXRGaXJzdFZpc2libGVQb3NpdGlvbigpOwotICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IG1Wb2x1bWVHcm91cExpc3QuZ2V0Q2hpbGRDb3VudCgpOyArK2kpIHsKLSAgICAgICAgICAgIFZpZXcgdmlldyA9IG1Wb2x1bWVHcm91cExpc3QuZ2V0Q2hpbGRBdChpKTsKLSAgICAgICAgICAgIGludCBwb3NpdGlvbiA9IGZpcnN0ICsgaTsKLSAgICAgICAgICAgIE1lZGlhUm91dGVyLlJvdXRlSW5mbyByb3V0ZSA9IG1Wb2x1bWVHcm91cEFkYXB0ZXIuZ2V0SXRlbShwb3NpdGlvbik7Ci0gICAgICAgICAgICBSZWN0IHByZXZpb3VzQm91bmRzID0gcHJldmlvdXNSb3V0ZUJvdW5kTWFwLmdldChyb3V0ZSk7Ci0gICAgICAgICAgICBpbnQgY3VycmVudFRvcCA9IHZpZXcuZ2V0VG9wKCk7Ci0gICAgICAgICAgICBpbnQgcHJldmlvdXNUb3AgPSBwcmV2aW91c0JvdW5kcyAhPSBudWxsID8gcHJldmlvdXNCb3VuZHMudG9wCi0gICAgICAgICAgICAgICAgICAgIDogKGN1cnJlbnRUb3AgKyBtVm9sdW1lR3JvdXBMaXN0SXRlbUhlaWdodCAqIGdyb3VwU2l6ZURlbHRhKTsKLSAgICAgICAgICAgIEFuaW1hdGlvblNldCBhbmltU2V0ID0gbmV3IEFuaW1hdGlvblNldCh0cnVlKTsKLSAgICAgICAgICAgIGlmIChtR3JvdXBNZW1iZXJSb3V0ZXNBZGRlZCAhPSBudWxsICYmIG1Hcm91cE1lbWJlclJvdXRlc0FkZGVkLmNvbnRhaW5zKHJvdXRlKSkgewotICAgICAgICAgICAgICAgIHByZXZpb3VzVG9wID0gY3VycmVudFRvcDsKLSAgICAgICAgICAgICAgICBBbmltYXRpb24gYWxwaGFBbmltID0gbmV3IEFscGhhQW5pbWF0aW9uKDAuMGYsIDAuMGYpOwotICAgICAgICAgICAgICAgIGFscGhhQW5pbS5zZXREdXJhdGlvbihtR3JvdXBMaXN0RmFkZUluRHVyYXRpb25Ncyk7Ci0gICAgICAgICAgICAgICAgYW5pbVNldC5hZGRBbmltYXRpb24oYWxwaGFBbmltKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIEFuaW1hdGlvbiB0cmFuc2xhdGlvbkFuaW0gPSBuZXcgVHJhbnNsYXRlQW5pbWF0aW9uKDAsIDAsIHByZXZpb3VzVG9wIC0gY3VycmVudFRvcCwgMCk7Ci0gICAgICAgICAgICB0cmFuc2xhdGlvbkFuaW0uc2V0RHVyYXRpb24obUdyb3VwTGlzdEFuaW1hdGlvbkR1cmF0aW9uTXMpOwotICAgICAgICAgICAgYW5pbVNldC5hZGRBbmltYXRpb24odHJhbnNsYXRpb25BbmltKTsKLSAgICAgICAgICAgIGFuaW1TZXQuc2V0RmlsbEFmdGVyKHRydWUpOwotICAgICAgICAgICAgYW5pbVNldC5zZXRGaWxsRW5hYmxlZCh0cnVlKTsKLSAgICAgICAgICAgIGFuaW1TZXQuc2V0SW50ZXJwb2xhdG9yKG1JbnRlcnBvbGF0b3IpOwotICAgICAgICAgICAgaWYgKCFsaXN0ZW5lclJlZ2lzdGVyZWQpIHsKLSAgICAgICAgICAgICAgICBsaXN0ZW5lclJlZ2lzdGVyZWQgPSB0cnVlOwotICAgICAgICAgICAgICAgIGFuaW1TZXQuc2V0QW5pbWF0aW9uTGlzdGVuZXIobGlzdGVuZXIpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgdmlldy5jbGVhckFuaW1hdGlvbigpOwotICAgICAgICAgICAgdmlldy5zdGFydEFuaW1hdGlvbihhbmltU2V0KTsKLSAgICAgICAgICAgIHByZXZpb3VzUm91dGVCb3VuZE1hcC5yZW1vdmUocm91dGUpOwotICAgICAgICAgICAgcHJldmlvdXNSb3V0ZUJpdG1hcE1hcC5yZW1vdmUocm91dGUpOwotICAgICAgICB9Ci0KLSAgICAgICAgLy8gSWYgYSBtZW1iZXIgcm91dGUgZG9lc24ndCBleGlzdCBhbnkgbG9uZ2VyLCBpdCBjYW4gYmUgZWl0aGVyIHJlbW92ZWQgb3IgbW92ZWQgb3V0IG9mIHRoZQotICAgICAgICAvLyBMaXN0VmlldyBsYXlvdXQgYm91bmRhcnkuIEluIHRoaXMgY2FzZSwgdXNlIHRoZSBwcmV2aW91c2x5IGNhcHR1cmVkIGJpdG1hcHMgZm9yCi0gICAgICAgIC8vIGFuaW1hdGlvbi4KLSAgICAgICAgZm9yIChNYXAuRW50cnk8TWVkaWFSb3V0ZXIuUm91dGVJbmZvLCBCaXRtYXBEcmF3YWJsZT4gaXRlbQotICAgICAgICAgICAgICAgIDogcHJldmlvdXNSb3V0ZUJpdG1hcE1hcC5lbnRyeVNldCgpKSB7Ci0gICAgICAgICAgICBmaW5hbCBNZWRpYVJvdXRlci5Sb3V0ZUluZm8gcm91dGUgPSBpdGVtLmdldEtleSgpOwotICAgICAgICAgICAgZmluYWwgQml0bWFwRHJhd2FibGUgYml0bWFwID0gaXRlbS5nZXRWYWx1ZSgpOwotICAgICAgICAgICAgZmluYWwgUmVjdCBib3VuZHMgPSBwcmV2aW91c1JvdXRlQm91bmRNYXAuZ2V0KHJvdXRlKTsKLSAgICAgICAgICAgIE92ZXJsYXlPYmplY3Qgb2JqZWN0ID0gbnVsbDsKLSAgICAgICAgICAgIGlmIChtR3JvdXBNZW1iZXJSb3V0ZXNSZW1vdmVkLmNvbnRhaW5zKHJvdXRlKSkgewotICAgICAgICAgICAgICAgIG9iamVjdCA9IG5ldyBPdmVybGF5T2JqZWN0KGJpdG1hcCwgYm91bmRzKS5zZXRBbHBoYUFuaW1hdGlvbigxLjBmLCAwLjBmKQotICAgICAgICAgICAgICAgICAgICAgICAgLnNldER1cmF0aW9uKG1Hcm91cExpc3RGYWRlT3V0RHVyYXRpb25NcykKLSAgICAgICAgICAgICAgICAgICAgICAgIC5zZXRJbnRlcnBvbGF0b3IobUludGVycG9sYXRvcik7Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIGludCBkZWx0YVkgPSBncm91cFNpemVEZWx0YSAqIG1Wb2x1bWVHcm91cExpc3RJdGVtSGVpZ2h0OwotICAgICAgICAgICAgICAgIG9iamVjdCA9IG5ldyBPdmVybGF5T2JqZWN0KGJpdG1hcCwgYm91bmRzKS5zZXRUcmFuc2xhdGVZQW5pbWF0aW9uKGRlbHRhWSkKLSAgICAgICAgICAgICAgICAgICAgICAgIC5zZXREdXJhdGlvbihtR3JvdXBMaXN0QW5pbWF0aW9uRHVyYXRpb25NcykKLSAgICAgICAgICAgICAgICAgICAgICAgIC5zZXRJbnRlcnBvbGF0b3IobUludGVycG9sYXRvcikKLSAgICAgICAgICAgICAgICAgICAgICAgIC5zZXRBbmltYXRpb25FbmRMaXN0ZW5lcihuZXcgT3ZlcmxheU9iamVjdC5PbkFuaW1hdGlvbkVuZExpc3RlbmVyKCkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIEBPdmVycmlkZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHB1YmxpYyB2b2lkIG9uQW5pbWF0aW9uRW5kKCkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtR3JvdXBNZW1iZXJSb3V0ZXNBbmltYXRpbmdXaXRoQml0bWFwLnJlbW92ZShyb3V0ZSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1Wb2x1bWVHcm91cEFkYXB0ZXIubm90aWZ5RGF0YVNldENoYW5nZWQoKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICB9KTsKLSAgICAgICAgICAgICAgICBtR3JvdXBNZW1iZXJSb3V0ZXNBbmltYXRpbmdXaXRoQml0bWFwLmFkZChyb3V0ZSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBtVm9sdW1lR3JvdXBMaXN0LmFkZE92ZXJsYXlPYmplY3Qob2JqZWN0KTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIHZvaWQgc3RhcnRHcm91cExpc3RGYWRlSW5BbmltYXRpb24oKSB7Ci0gICAgICAgIGNsZWFyR3JvdXBMaXN0QW5pbWF0aW9uKHRydWUpOwotICAgICAgICBtVm9sdW1lR3JvdXBMaXN0LnJlcXVlc3RMYXlvdXQoKTsKLSAgICAgICAgVmlld1RyZWVPYnNlcnZlciBvYnNlcnZlciA9IG1Wb2x1bWVHcm91cExpc3QuZ2V0Vmlld1RyZWVPYnNlcnZlcigpOwotICAgICAgICBvYnNlcnZlci5hZGRPbkdsb2JhbExheW91dExpc3RlbmVyKG5ldyBWaWV3VHJlZU9ic2VydmVyLk9uR2xvYmFsTGF5b3V0TGlzdGVuZXIoKSB7Ci0gICAgICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgICAgIHB1YmxpYyB2b2lkIG9uR2xvYmFsTGF5b3V0KCkgewotICAgICAgICAgICAgICAgIG1Wb2x1bWVHcm91cExpc3QuZ2V0Vmlld1RyZWVPYnNlcnZlcigpLnJlbW92ZUdsb2JhbE9uTGF5b3V0TGlzdGVuZXIodGhpcyk7Ci0gICAgICAgICAgICAgICAgc3RhcnRHcm91cExpc3RGYWRlSW5BbmltYXRpb25JbnRlcm5hbCgpOwotICAgICAgICAgICAgfQotICAgICAgICB9KTsKLSAgICB9Ci0KLSAgICB2b2lkIHN0YXJ0R3JvdXBMaXN0RmFkZUluQW5pbWF0aW9uSW50ZXJuYWwoKSB7Ci0gICAgICAgIGlmIChtR3JvdXBNZW1iZXJSb3V0ZXNBZGRlZCAhPSBudWxsICYmIG1Hcm91cE1lbWJlclJvdXRlc0FkZGVkLnNpemUoKSAhPSAwKSB7Ci0gICAgICAgICAgICBmYWRlSW5BZGRlZFJvdXRlcygpOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgZmluaXNoQW5pbWF0aW9uKHRydWUpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgdm9pZCBmaW5pc2hBbmltYXRpb24oYm9vbGVhbiBhbmltYXRlKSB7Ci0gICAgICAgIG1Hcm91cE1lbWJlclJvdXRlc0FkZGVkID0gbnVsbDsKLSAgICAgICAgbUdyb3VwTWVtYmVyUm91dGVzUmVtb3ZlZCA9IG51bGw7Ci0gICAgICAgIG1Jc0dyb3VwTGlzdEFuaW1hdGluZyA9IGZhbHNlOwotICAgICAgICBpZiAobUlzR3JvdXBMaXN0QW5pbWF0aW9uUGVuZGluZykgewotICAgICAgICAgICAgbUlzR3JvdXBMaXN0QW5pbWF0aW9uUGVuZGluZyA9IGZhbHNlOwotICAgICAgICAgICAgdXBkYXRlTGF5b3V0SGVpZ2h0KGFuaW1hdGUpOwotICAgICAgICB9Ci0gICAgICAgIG1Wb2x1bWVHcm91cExpc3Quc2V0RW5hYmxlZCh0cnVlKTsKLSAgICB9Ci0KLSAgICBwcml2YXRlIHZvaWQgZmFkZUluQWRkZWRSb3V0ZXMoKSB7Ci0gICAgICAgIEFuaW1hdGlvbi5BbmltYXRpb25MaXN0ZW5lciBsaXN0ZW5lciA9IG5ldyBBbmltYXRpb24uQW5pbWF0aW9uTGlzdGVuZXIoKSB7Ci0gICAgICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgICAgIHB1YmxpYyB2b2lkIG9uQW5pbWF0aW9uU3RhcnQoQW5pbWF0aW9uIGFuaW1hdGlvbikgeyB9Ci0KLSAgICAgICAgICAgIEBPdmVycmlkZQotICAgICAgICAgICAgcHVibGljIHZvaWQgb25BbmltYXRpb25FbmQoQW5pbWF0aW9uIGFuaW1hdGlvbikgewotICAgICAgICAgICAgICAgIGZpbmlzaEFuaW1hdGlvbih0cnVlKTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgICAgICBwdWJsaWMgdm9pZCBvbkFuaW1hdGlvblJlcGVhdChBbmltYXRpb24gYW5pbWF0aW9uKSB7IH0KLSAgICAgICAgfTsKLSAgICAgICAgYm9vbGVhbiBsaXN0ZW5lclJlZ2lzdGVyZWQgPSBmYWxzZTsKLSAgICAgICAgaW50IGZpcnN0ID0gbVZvbHVtZUdyb3VwTGlzdC5nZXRGaXJzdFZpc2libGVQb3NpdGlvbigpOwotICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IG1Wb2x1bWVHcm91cExpc3QuZ2V0Q2hpbGRDb3VudCgpOyArK2kpIHsKLSAgICAgICAgICAgIFZpZXcgdmlldyA9IG1Wb2x1bWVHcm91cExpc3QuZ2V0Q2hpbGRBdChpKTsKLSAgICAgICAgICAgIGludCBwb3NpdGlvbiA9IGZpcnN0ICsgaTsKLSAgICAgICAgICAgIE1lZGlhUm91dGVyLlJvdXRlSW5mbyByb3V0ZSA9IG1Wb2x1bWVHcm91cEFkYXB0ZXIuZ2V0SXRlbShwb3NpdGlvbik7Ci0gICAgICAgICAgICBpZiAobUdyb3VwTWVtYmVyUm91dGVzQWRkZWQuY29udGFpbnMocm91dGUpKSB7Ci0gICAgICAgICAgICAgICAgQW5pbWF0aW9uIGFscGhhQW5pbSA9IG5ldyBBbHBoYUFuaW1hdGlvbigwLjBmLCAxLjBmKTsKLSAgICAgICAgICAgICAgICBhbHBoYUFuaW0uc2V0RHVyYXRpb24obUdyb3VwTGlzdEZhZGVJbkR1cmF0aW9uTXMpOwotICAgICAgICAgICAgICAgIGFscGhhQW5pbS5zZXRGaWxsRW5hYmxlZCh0cnVlKTsKLSAgICAgICAgICAgICAgICBhbHBoYUFuaW0uc2V0RmlsbEFmdGVyKHRydWUpOwotICAgICAgICAgICAgICAgIGlmICghbGlzdGVuZXJSZWdpc3RlcmVkKSB7Ci0gICAgICAgICAgICAgICAgICAgIGxpc3RlbmVyUmVnaXN0ZXJlZCA9IHRydWU7Ci0gICAgICAgICAgICAgICAgICAgIGFscGhhQW5pbS5zZXRBbmltYXRpb25MaXN0ZW5lcihsaXN0ZW5lcik7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIHZpZXcuY2xlYXJBbmltYXRpb24oKTsKLSAgICAgICAgICAgICAgICB2aWV3LnN0YXJ0QW5pbWF0aW9uKGFscGhhQW5pbSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICB2b2lkIGNsZWFyR3JvdXBMaXN0QW5pbWF0aW9uKGJvb2xlYW4gZXhjZXB0QWRkZWRSb3V0ZXMpIHsKLSAgICAgICAgaW50IGZpcnN0ID0gbVZvbHVtZUdyb3VwTGlzdC5nZXRGaXJzdFZpc2libGVQb3NpdGlvbigpOwotICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IG1Wb2x1bWVHcm91cExpc3QuZ2V0Q2hpbGRDb3VudCgpOyArK2kpIHsKLSAgICAgICAgICAgIFZpZXcgdmlldyA9IG1Wb2x1bWVHcm91cExpc3QuZ2V0Q2hpbGRBdChpKTsKLSAgICAgICAgICAgIGludCBwb3NpdGlvbiA9IGZpcnN0ICsgaTsKLSAgICAgICAgICAgIE1lZGlhUm91dGVyLlJvdXRlSW5mbyByb3V0ZSA9IG1Wb2x1bWVHcm91cEFkYXB0ZXIuZ2V0SXRlbShwb3NpdGlvbik7Ci0gICAgICAgICAgICBpZiAoZXhjZXB0QWRkZWRSb3V0ZXMgJiYgbUdyb3VwTWVtYmVyUm91dGVzQWRkZWQgIT0gbnVsbAotICAgICAgICAgICAgICAgICAgICAmJiBtR3JvdXBNZW1iZXJSb3V0ZXNBZGRlZC5jb250YWlucyhyb3V0ZSkpIHsKLSAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIExpbmVhckxheW91dCBjb250YWluZXIgPSAoTGluZWFyTGF5b3V0KSB2aWV3LmZpbmRWaWV3QnlJZChSLmlkLnZvbHVtZV9pdGVtX2NvbnRhaW5lcik7Ci0gICAgICAgICAgICBjb250YWluZXIuc2V0VmlzaWJpbGl0eShWaWV3LlZJU0lCTEUpOwotICAgICAgICAgICAgQW5pbWF0aW9uU2V0IGFuaW1TZXQgPSBuZXcgQW5pbWF0aW9uU2V0KHRydWUpOwotICAgICAgICAgICAgQW5pbWF0aW9uIGFscGhhQW5pbSA9IG5ldyBBbHBoYUFuaW1hdGlvbigxLjBmLCAxLjBmKTsKLSAgICAgICAgICAgIGFscGhhQW5pbS5zZXREdXJhdGlvbigwKTsKLSAgICAgICAgICAgIGFuaW1TZXQuYWRkQW5pbWF0aW9uKGFscGhhQW5pbSk7Ci0gICAgICAgICAgICBBbmltYXRpb24gdHJhbnNsYXRpb25BbmltID0gbmV3IFRyYW5zbGF0ZUFuaW1hdGlvbigwLCAwLCAwLCAwKTsKLSAgICAgICAgICAgIHRyYW5zbGF0aW9uQW5pbS5zZXREdXJhdGlvbigwKTsKLSAgICAgICAgICAgIGFuaW1TZXQuc2V0RmlsbEFmdGVyKHRydWUpOwotICAgICAgICAgICAgYW5pbVNldC5zZXRGaWxsRW5hYmxlZCh0cnVlKTsKLSAgICAgICAgICAgIHZpZXcuY2xlYXJBbmltYXRpb24oKTsKLSAgICAgICAgICAgIHZpZXcuc3RhcnRBbmltYXRpb24oYW5pbVNldCk7Ci0gICAgICAgIH0KLSAgICAgICAgbVZvbHVtZUdyb3VwTGlzdC5zdG9wQW5pbWF0aW9uQWxsKCk7Ci0gICAgICAgIGlmICghZXhjZXB0QWRkZWRSb3V0ZXMpIHsKLSAgICAgICAgICAgIGZpbmlzaEFuaW1hdGlvbihmYWxzZSk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBwcml2YXRlIHZvaWQgdXBkYXRlUGxheWJhY2tDb250cm9sTGF5b3V0KCkgewotICAgICAgICBpZiAoY2FuU2hvd1BsYXliYWNrQ29udHJvbExheW91dCgpKSB7Ci0gICAgICAgICAgICBDaGFyU2VxdWVuY2UgdGl0bGUgPSBtRGVzY3JpcHRpb24gPT0gbnVsbCA/IG51bGwgOiBtRGVzY3JpcHRpb24uZ2V0VGl0bGUoKTsKLSAgICAgICAgICAgIGJvb2xlYW4gaGFzVGl0bGUgPSAhVGV4dFV0aWxzLmlzRW1wdHkodGl0bGUpOwotCi0gICAgICAgICAgICBDaGFyU2VxdWVuY2Ugc3VidGl0bGUgPSBtRGVzY3JpcHRpb24gPT0gbnVsbCA/IG51bGwgOiBtRGVzY3JpcHRpb24uZ2V0U3VidGl0bGUoKTsKLSAgICAgICAgICAgIGJvb2xlYW4gaGFzU3VidGl0bGUgPSAhVGV4dFV0aWxzLmlzRW1wdHkoc3VidGl0bGUpOwotCi0gICAgICAgICAgICBib29sZWFuIHNob3dUaXRsZSA9IGZhbHNlOwotICAgICAgICAgICAgYm9vbGVhbiBzaG93U3VidGl0bGUgPSBmYWxzZTsKLSAgICAgICAgICAgIGlmIChtUm91dGUuZ2V0UHJlc2VudGF0aW9uRGlzcGxheUlkKCkKLSAgICAgICAgICAgICAgICAgICAgIT0gTWVkaWFSb3V0ZXIuUm91dGVJbmZvLlBSRVNFTlRBVElPTl9ESVNQTEFZX0lEX05PTkUpIHsKLSAgICAgICAgICAgICAgICAvLyBUaGUgdXNlciBpcyBjdXJyZW50bHkgY2FzdGluZyBzY3JlZW4uCi0gICAgICAgICAgICAgICAgbVRpdGxlVmlldy5zZXRUZXh0KEFwaUhlbHBlci5nZXRMaWJSZXNvdXJjZXMobUNvbnRleHQpLmdldFN0cmluZygKLSAgICAgICAgICAgICAgICAgICAgICAgIFIuc3RyaW5nLm1yX2NvbnRyb2xsZXJfY2FzdGluZ19zY3JlZW4pKTsKLSAgICAgICAgICAgICAgICBzaG93VGl0bGUgPSB0cnVlOwotICAgICAgICAgICAgfSBlbHNlIGlmIChtU3RhdGUgPT0gbnVsbCB8fCBtU3RhdGUuZ2V0U3RhdGUoKSA9PSBQbGF5YmFja1N0YXRlQ29tcGF0LlNUQVRFX05PTkUpIHsKLSAgICAgICAgICAgICAgICAvLyBTaG93ICJObyBtZWRpYSBzZWxlY3RlZCIgYXMgd2UgZG9uJ3QgeWV0IGtub3cgdGhlIHBsYXliYWNrIHN0YXRlLgotICAgICAgICAgICAgICAgIG1UaXRsZVZpZXcuc2V0VGV4dChBcGlIZWxwZXIuZ2V0TGliUmVzb3VyY2VzKG1Db250ZXh0KS5nZXRTdHJpbmcoCi0gICAgICAgICAgICAgICAgICAgICAgICBSLnN0cmluZy5tcl9jb250cm9sbGVyX25vX21lZGlhX3NlbGVjdGVkKSk7Ci0gICAgICAgICAgICAgICAgc2hvd1RpdGxlID0gdHJ1ZTsKLSAgICAgICAgICAgIH0gZWxzZSBpZiAoIWhhc1RpdGxlICYmICFoYXNTdWJ0aXRsZSkgewotICAgICAgICAgICAgICAgIG1UaXRsZVZpZXcuc2V0VGV4dChBcGlIZWxwZXIuZ2V0TGliUmVzb3VyY2VzKG1Db250ZXh0KS5nZXRTdHJpbmcoCi0gICAgICAgICAgICAgICAgICAgICAgICBSLnN0cmluZy5tcl9jb250cm9sbGVyX25vX2luZm9fYXZhaWxhYmxlKSk7Ci0gICAgICAgICAgICAgICAgc2hvd1RpdGxlID0gdHJ1ZTsKLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgaWYgKGhhc1RpdGxlKSB7Ci0gICAgICAgICAgICAgICAgICAgIG1UaXRsZVZpZXcuc2V0VGV4dCh0aXRsZSk7Ci0gICAgICAgICAgICAgICAgICAgIHNob3dUaXRsZSA9IHRydWU7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGlmIChoYXNTdWJ0aXRsZSkgewotICAgICAgICAgICAgICAgICAgICBtU3VidGl0bGVWaWV3LnNldFRleHQoc3VidGl0bGUpOwotICAgICAgICAgICAgICAgICAgICBzaG93U3VidGl0bGUgPSB0cnVlOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIG1UaXRsZVZpZXcuc2V0VmlzaWJpbGl0eShzaG93VGl0bGUgPyBWaWV3LlZJU0lCTEUgOiBWaWV3LkdPTkUpOwotICAgICAgICAgICAgbVN1YnRpdGxlVmlldy5zZXRWaXNpYmlsaXR5KHNob3dTdWJ0aXRsZSA/IFZpZXcuVklTSUJMRSA6IFZpZXcuR09ORSk7Ci0KLSAgICAgICAgICAgIGlmIChtU3RhdGUgIT0gbnVsbCkgewotICAgICAgICAgICAgICAgIGJvb2xlYW4gaXNQbGF5aW5nID0gbVN0YXRlLmdldFN0YXRlKCkgPT0gUGxheWJhY2tTdGF0ZUNvbXBhdC5TVEFURV9CVUZGRVJJTkcKLSAgICAgICAgICAgICAgICAgICAgICAgIHx8IG1TdGF0ZS5nZXRTdGF0ZSgpID09IFBsYXliYWNrU3RhdGVDb21wYXQuU1RBVEVfUExBWUlORzsKLSAgICAgICAgICAgICAgICBDb250ZXh0IHBsYXliYWNrQ29udHJvbEJ1dHRvbkNvbnRleHQgPSBtUGxheWJhY2tDb250cm9sQnV0dG9uLmdldENvbnRleHQoKTsKLSAgICAgICAgICAgICAgICBib29sZWFuIHZpc2libGUgPSB0cnVlOwotICAgICAgICAgICAgICAgIGludCBpY29uRHJhd2FibGVBdHRyID0gMDsKLSAgICAgICAgICAgICAgICBpbnQgaWNvbkRlc2NSZXNJZCA9IDA7Ci0gICAgICAgICAgICAgICAgaWYgKGlzUGxheWluZyAmJiBpc1BhdXNlQWN0aW9uU3VwcG9ydGVkKCkpIHsKLSAgICAgICAgICAgICAgICAgICAgaWNvbkRyYXdhYmxlQXR0ciA9IFIuYXR0ci5tZWRpYVJvdXRlUGF1c2VEcmF3YWJsZTsKLSAgICAgICAgICAgICAgICAgICAgaWNvbkRlc2NSZXNJZCA9IFIuc3RyaW5nLm1yX2NvbnRyb2xsZXJfcGF1c2U7Ci0gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChpc1BsYXlpbmcgJiYgaXNTdG9wQWN0aW9uU3VwcG9ydGVkKCkpIHsKLSAgICAgICAgICAgICAgICAgICAgaWNvbkRyYXdhYmxlQXR0ciA9IFIuYXR0ci5tZWRpYVJvdXRlU3RvcERyYXdhYmxlOwotICAgICAgICAgICAgICAgICAgICBpY29uRGVzY1Jlc0lkID0gUi5zdHJpbmcubXJfY29udHJvbGxlcl9zdG9wOwotICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoIWlzUGxheWluZyAmJiBpc1BsYXlBY3Rpb25TdXBwb3J0ZWQoKSkgewotICAgICAgICAgICAgICAgICAgICBpY29uRHJhd2FibGVBdHRyID0gUi5hdHRyLm1lZGlhUm91dGVQbGF5RHJhd2FibGU7Ci0gICAgICAgICAgICAgICAgICAgIGljb25EZXNjUmVzSWQgPSBSLnN0cmluZy5tcl9jb250cm9sbGVyX3BsYXk7Ci0gICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgdmlzaWJsZSA9IGZhbHNlOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBtUGxheWJhY2tDb250cm9sQnV0dG9uLnNldFZpc2liaWxpdHkodmlzaWJsZSA/IFZpZXcuVklTSUJMRSA6IFZpZXcuR09ORSk7Ci0gICAgICAgICAgICAgICAgaWYgKHZpc2libGUpIHsKLSAgICAgICAgICAgICAgICAgICAgbVBsYXliYWNrQ29udHJvbEJ1dHRvbi5zZXRJbWFnZVJlc291cmNlKAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1lZGlhUm91dGVyVGhlbWVIZWxwZXIuZ2V0VGhlbWVSZXNvdXJjZSgKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBsYXliYWNrQ29udHJvbEJ1dHRvbkNvbnRleHQsIGljb25EcmF3YWJsZUF0dHIpKTsKLSAgICAgICAgICAgICAgICAgICAgbVBsYXliYWNrQ29udHJvbEJ1dHRvbi5zZXRDb250ZW50RGVzY3JpcHRpb24oCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgcGxheWJhY2tDb250cm9sQnV0dG9uQ29udGV4dC5nZXRSZXNvdXJjZXMoKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLmdldFRleHQoaWNvbkRlc2NSZXNJZCkpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLQotICAgIHByaXZhdGUgYm9vbGVhbiBpc1BsYXlBY3Rpb25TdXBwb3J0ZWQoKSB7Ci0gICAgICAgIHJldHVybiAobVN0YXRlLmdldEFjdGlvbnMoKSAmIChBQ1RJT05fUExBWSB8IEFDVElPTl9QTEFZX1BBVVNFKSkgIT0gMDsKLSAgICB9Ci0KLSAgICBwcml2YXRlIGJvb2xlYW4gaXNQYXVzZUFjdGlvblN1cHBvcnRlZCgpIHsKLSAgICAgICAgcmV0dXJuIChtU3RhdGUuZ2V0QWN0aW9ucygpICYgKEFDVElPTl9QQVVTRSB8IEFDVElPTl9QTEFZX1BBVVNFKSkgIT0gMDsKLSAgICB9Ci0KLSAgICBwcml2YXRlIGJvb2xlYW4gaXNTdG9wQWN0aW9uU3VwcG9ydGVkKCkgewotICAgICAgICByZXR1cm4gKG1TdGF0ZS5nZXRBY3Rpb25zKCkgJiBBQ1RJT05fU1RPUCkgIT0gMDsKLSAgICB9Ci0KLSAgICBib29sZWFuIGlzVm9sdW1lQ29udHJvbEF2YWlsYWJsZShNZWRpYVJvdXRlci5Sb3V0ZUluZm8gcm91dGUpIHsKLSAgICAgICAgcmV0dXJuIG1Wb2x1bWVDb250cm9sRW5hYmxlZCAmJiByb3V0ZS5nZXRWb2x1bWVIYW5kbGluZygpCi0gICAgICAgICAgICAgICAgPT0gTWVkaWFSb3V0ZXIuUm91dGVJbmZvLlBMQVlCQUNLX1ZPTFVNRV9WQVJJQUJMRTsKLSAgICB9Ci0KLSAgICBwcml2YXRlIHN0YXRpYyBpbnQgZ2V0TGF5b3V0SGVpZ2h0KFZpZXcgdmlldykgewotICAgICAgICByZXR1cm4gdmlldy5nZXRMYXlvdXRQYXJhbXMoKS5oZWlnaHQ7Ci0gICAgfQotCi0gICAgc3RhdGljIHZvaWQgc2V0TGF5b3V0SGVpZ2h0KFZpZXcgdmlldywgaW50IGhlaWdodCkgewotICAgICAgICBWaWV3R3JvdXAuTGF5b3V0UGFyYW1zIGxwID0gdmlldy5nZXRMYXlvdXRQYXJhbXMoKTsKLSAgICAgICAgbHAuaGVpZ2h0ID0gaGVpZ2h0OwotICAgICAgICB2aWV3LnNldExheW91dFBhcmFtcyhscCk7Ci0gICAgfQotCi0gICAgcHJpdmF0ZSBzdGF0aWMgYm9vbGVhbiB1cmlFcXVhbHMoVXJpIHVyaTEsIFVyaSB1cmkyKSB7Ci0gICAgICAgIGlmICh1cmkxICE9IG51bGwgJiYgdXJpMS5lcXVhbHModXJpMikpIHsKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICB9IGVsc2UgaWYgKHVyaTEgPT0gbnVsbCAmJiB1cmkyID09IG51bGwpIHsKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBSZXR1cm5zIGRlc2lyZWQgYXJ0IGhlaWdodCB0byBmaXQgaW50byBjb250cm9sbGVyIGRpYWxvZy4KLSAgICAgKi8KLSAgICBpbnQgZ2V0RGVzaXJlZEFydEhlaWdodChpbnQgb3JpZ2luYWxXaWR0aCwgaW50IG9yaWdpbmFsSGVpZ2h0KSB7Ci0gICAgICAgIGlmIChvcmlnaW5hbFdpZHRoID49IG9yaWdpbmFsSGVpZ2h0KSB7Ci0gICAgICAgICAgICAvLyBGb3IgbGFuZHNjYXBlIGFydCwgZml0IHdpZHRoIHRvIGRpYWxvZyB3aWR0aC4KLSAgICAgICAgICAgIHJldHVybiAoaW50KSAoKGZsb2F0KSBtRGlhbG9nQ29udGVudFdpZHRoICogb3JpZ2luYWxIZWlnaHQgLyBvcmlnaW5hbFdpZHRoICsgMC41Zik7Ci0gICAgICAgIH0KLSAgICAgICAgLy8gRm9yIHBvcnRyYWl0IGFydCwgZml0IGhlaWdodCB0byAxNjo5IHJhdGlvIGNhc2UncyBoZWlnaHQuCi0gICAgICAgIHJldHVybiAoaW50KSAoKGZsb2F0KSBtRGlhbG9nQ29udGVudFdpZHRoICogOSAvIDE2ICsgMC41Zik7Ci0gICAgfQotCi0gICAgdm9pZCB1cGRhdGVBcnRJY29uSWZOZWVkZWQoKSB7Ci0gICAgICAgIGlmIChtQ3VzdG9tQ29udHJvbFZpZXcgIT0gbnVsbCB8fCAhaXNJY29uQ2hhbmdlZCgpKSB7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKG1GZXRjaEFydFRhc2sgIT0gbnVsbCkgewotICAgICAgICAgICAgbUZldGNoQXJ0VGFzay5jYW5jZWwodHJ1ZSk7Ci0gICAgICAgIH0KLSAgICAgICAgbUZldGNoQXJ0VGFzayA9IG5ldyBGZXRjaEFydFRhc2soKTsKLSAgICAgICAgbUZldGNoQXJ0VGFzay5leGVjdXRlKCk7Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogQ2xlYXIgdGhlIGJpdG1hcCBsb2FkZWQgYnkgRmV0Y2hBcnRUYXNrLiBXaWxsIGJlIGNhbGxlZCBhZnRlciB0aGUgbG9hZGVkIGJpdG1hcHMgYXJlIGFwcGxpZWQKLSAgICAgKiB0byBhcnR3b3JrLCBvciBubyBsb25nZXIgdmFsaWQuCi0gICAgICovCi0gICAgdm9pZCBjbGVhckxvYWRlZEJpdG1hcCgpIHsKLSAgICAgICAgbUFydEljb25Jc0xvYWRlZCA9IGZhbHNlOwotICAgICAgICBtQXJ0SWNvbkxvYWRlZEJpdG1hcCA9IG51bGw7Ci0gICAgICAgIG1BcnRJY29uQmFja2dyb3VuZENvbG9yID0gMDsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBSZXR1cm5zIHdoZXRoZXIgYSBuZXcgYXJ0IGltYWdlIGlzIGRpZmZlcmVudCBmcm9tIGFuIG9yaWdpbmFsIGFydCBpbWFnZS4gQ29tcGFyZXMKLSAgICAgKiBCaXRtYXAgb2JqZWN0cyBmaXJzdCwgYW5kIHRoZW4gY29tcGFyZXMgVVJJcyBvbmx5IGlmIGJpdG1hcCBpcyB1bmNoYW5nZWQgd2l0aAotICAgICAqIGEgbnVsbCB2YWx1ZS4KLSAgICAgKi8KLSAgICBwcml2YXRlIGJvb2xlYW4gaXNJY29uQ2hhbmdlZCgpIHsKLSAgICAgICAgQml0bWFwIG5ld0JpdG1hcCA9IG1EZXNjcmlwdGlvbiA9PSBudWxsID8gbnVsbCA6IG1EZXNjcmlwdGlvbi5nZXRJY29uQml0bWFwKCk7Ci0gICAgICAgIFVyaSBuZXdVcmkgPSBtRGVzY3JpcHRpb24gPT0gbnVsbCA/IG51bGwgOiBtRGVzY3JpcHRpb24uZ2V0SWNvblVyaSgpOwotICAgICAgICBCaXRtYXAgb2xkQml0bWFwID0gbUZldGNoQXJ0VGFzayA9PSBudWxsID8gbUFydEljb25CaXRtYXAgOiBtRmV0Y2hBcnRUYXNrLmdldEljb25CaXRtYXAoKTsKLSAgICAgICAgVXJpIG9sZFVyaSA9IG1GZXRjaEFydFRhc2sgPT0gbnVsbCA/IG1BcnRJY29uVXJpIDogbUZldGNoQXJ0VGFzay5nZXRJY29uVXJpKCk7Ci0gICAgICAgIGlmIChvbGRCaXRtYXAgIT0gbmV3Qml0bWFwKSB7Ci0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgfSBlbHNlIGlmIChvbGRCaXRtYXAgPT0gbnVsbCAmJiAhdXJpRXF1YWxzKG9sZFVyaSwgbmV3VXJpKSkgewotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIHByaXZhdGUgZmluYWwgY2xhc3MgTWVkaWFSb3V0ZXJDYWxsYmFjayBleHRlbmRzIE1lZGlhUm91dGVyLkNhbGxiYWNrIHsKLSAgICAgICAgTWVkaWFSb3V0ZXJDYWxsYmFjaygpIHsKLSAgICAgICAgfQotCi0gICAgICAgIEBPdmVycmlkZQotICAgICAgICBwdWJsaWMgdm9pZCBvblJvdXRlVW5zZWxlY3RlZChNZWRpYVJvdXRlciByb3V0ZXIsIE1lZGlhUm91dGVyLlJvdXRlSW5mbyByb3V0ZSkgewotICAgICAgICAgICAgdXBkYXRlKGZhbHNlKTsKLSAgICAgICAgfQotCi0gICAgICAgIEBPdmVycmlkZQotICAgICAgICBwdWJsaWMgdm9pZCBvblJvdXRlQ2hhbmdlZChNZWRpYVJvdXRlciByb3V0ZXIsIE1lZGlhUm91dGVyLlJvdXRlSW5mbyByb3V0ZSkgewotICAgICAgICAgICAgdXBkYXRlKHRydWUpOwotICAgICAgICB9Ci0KLSAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgIHB1YmxpYyB2b2lkIG9uUm91dGVWb2x1bWVDaGFuZ2VkKE1lZGlhUm91dGVyIHJvdXRlciwgTWVkaWFSb3V0ZXIuUm91dGVJbmZvIHJvdXRlKSB7Ci0gICAgICAgICAgICBTZWVrQmFyIHZvbHVtZVNsaWRlciA9IG1Wb2x1bWVTbGlkZXJNYXAuZ2V0KHJvdXRlKTsKLSAgICAgICAgICAgIGludCB2b2x1bWUgPSByb3V0ZS5nZXRWb2x1bWUoKTsKLSAgICAgICAgICAgIGlmIChERUJVRykgewotICAgICAgICAgICAgICAgIExvZy5kKFRBRywgIm9uUm91dGVWb2x1bWVDaGFuZ2VkKCksIHJvdXRlLmdldFZvbHVtZToiICsgdm9sdW1lKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmICh2b2x1bWVTbGlkZXIgIT0gbnVsbCAmJiBtUm91dGVJblZvbHVtZVNsaWRlclRvdWNoZWQgIT0gcm91dGUpIHsKLSAgICAgICAgICAgICAgICB2b2x1bWVTbGlkZXIuc2V0UHJvZ3Jlc3Modm9sdW1lKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLQotICAgIHByaXZhdGUgZmluYWwgY2xhc3MgTWVkaWFDb250cm9sbGVyQ2FsbGJhY2sgZXh0ZW5kcyBNZWRpYUNvbnRyb2xsZXJDb21wYXQuQ2FsbGJhY2sgewotICAgICAgICBNZWRpYUNvbnRyb2xsZXJDYWxsYmFjaygpIHsKLSAgICAgICAgfQotCi0gICAgICAgIEBPdmVycmlkZQotICAgICAgICBwdWJsaWMgdm9pZCBvblNlc3Npb25EZXN0cm95ZWQoKSB7Ci0gICAgICAgICAgICBpZiAobU1lZGlhQ29udHJvbGxlciAhPSBudWxsKSB7Ci0gICAgICAgICAgICAgICAgbU1lZGlhQ29udHJvbGxlci51bnJlZ2lzdGVyQ2FsbGJhY2sobUNvbnRyb2xsZXJDYWxsYmFjayk7Ci0gICAgICAgICAgICAgICAgbU1lZGlhQ29udHJvbGxlciA9IG51bGw7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgcHVibGljIHZvaWQgb25QbGF5YmFja1N0YXRlQ2hhbmdlZChQbGF5YmFja1N0YXRlQ29tcGF0IHN0YXRlKSB7Ci0gICAgICAgICAgICBtU3RhdGUgPSBzdGF0ZTsKLSAgICAgICAgICAgIHVwZGF0ZShmYWxzZSk7Ci0gICAgICAgIH0KLQotICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgcHVibGljIHZvaWQgb25NZXRhZGF0YUNoYW5nZWQoTWVkaWFNZXRhZGF0YUNvbXBhdCBtZXRhZGF0YSkgewotICAgICAgICAgICAgbURlc2NyaXB0aW9uID0gbWV0YWRhdGEgPT0gbnVsbCA/IG51bGwgOiBtZXRhZGF0YS5nZXREZXNjcmlwdGlvbigpOwotICAgICAgICAgICAgdXBkYXRlQXJ0SWNvbklmTmVlZGVkKCk7Ci0gICAgICAgICAgICB1cGRhdGUoZmFsc2UpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgcHJpdmF0ZSBmaW5hbCBjbGFzcyBDbGlja0xpc3RlbmVyIGltcGxlbWVudHMgVmlldy5PbkNsaWNrTGlzdGVuZXIgewotICAgICAgICBDbGlja0xpc3RlbmVyKCkgewotICAgICAgICB9Ci0KLSAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgIHB1YmxpYyB2b2lkIG9uQ2xpY2soVmlldyB2KSB7Ci0gICAgICAgICAgICBpbnQgaWQgPSB2LmdldElkKCk7Ci0gICAgICAgICAgICBpZiAoaWQgPT0gQlVUVE9OX1NUT1BfUkVTX0lEIHx8IGlkID09IEJVVFRPTl9ESVNDT05ORUNUX1JFU19JRCkgewotICAgICAgICAgICAgICAgIGlmIChtUm91dGUuaXNTZWxlY3RlZCgpKSB7Ci0gICAgICAgICAgICAgICAgICAgIG1Sb3V0ZXIudW5zZWxlY3QoaWQgPT0gQlVUVE9OX1NUT1BfUkVTX0lEID8KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBNZWRpYVJvdXRlci5VTlNFTEVDVF9SRUFTT05fU1RPUFBFRCA6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgTWVkaWFSb3V0ZXIuVU5TRUxFQ1RfUkVBU09OX0RJU0NPTk5FQ1RFRCk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGRpc21pc3MoKTsKLSAgICAgICAgICAgIH0gZWxzZSBpZiAoaWQgPT0gUi5pZC5tcl9jb250cm9sX3BsYXliYWNrX2N0cmwpIHsKLSAgICAgICAgICAgICAgICBpZiAobU1lZGlhQ29udHJvbGxlciAhPSBudWxsICYmIG1TdGF0ZSAhPSBudWxsKSB7Ci0gICAgICAgICAgICAgICAgICAgIGJvb2xlYW4gaXNQbGF5aW5nID0gbVN0YXRlLmdldFN0YXRlKCkgPT0gUGxheWJhY2tTdGF0ZUNvbXBhdC5TVEFURV9QTEFZSU5HOwotICAgICAgICAgICAgICAgICAgICBpbnQgYWN0aW9uRGVzY1Jlc0lkID0gMDsKLSAgICAgICAgICAgICAgICAgICAgaWYgKGlzUGxheWluZyAmJiBpc1BhdXNlQWN0aW9uU3VwcG9ydGVkKCkpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIG1NZWRpYUNvbnRyb2xsZXIuZ2V0VHJhbnNwb3J0Q29udHJvbHMoKS5wYXVzZSgpOwotICAgICAgICAgICAgICAgICAgICAgICAgYWN0aW9uRGVzY1Jlc0lkID0gUi5zdHJpbmcubXJfY29udHJvbGxlcl9wYXVzZTsKLSAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChpc1BsYXlpbmcgJiYgaXNTdG9wQWN0aW9uU3VwcG9ydGVkKCkpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIG1NZWRpYUNvbnRyb2xsZXIuZ2V0VHJhbnNwb3J0Q29udHJvbHMoKS5zdG9wKCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBhY3Rpb25EZXNjUmVzSWQgPSBSLnN0cmluZy5tcl9jb250cm9sbGVyX3N0b3A7Ci0gICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoIWlzUGxheWluZyAmJiBpc1BsYXlBY3Rpb25TdXBwb3J0ZWQoKSl7Ci0gICAgICAgICAgICAgICAgICAgICAgICBtTWVkaWFDb250cm9sbGVyLmdldFRyYW5zcG9ydENvbnRyb2xzKCkucGxheSgpOwotICAgICAgICAgICAgICAgICAgICAgICAgYWN0aW9uRGVzY1Jlc0lkID0gUi5zdHJpbmcubXJfY29udHJvbGxlcl9wbGF5OwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIC8vIEFubm91bmNlIHRoZSBhY3Rpb24gZm9yIGFjY2Vzc2liaWxpdHkuCi0gICAgICAgICAgICAgICAgICAgIGlmIChtQWNjZXNzaWJpbGl0eU1hbmFnZXIgIT0gbnVsbCAmJiBtQWNjZXNzaWJpbGl0eU1hbmFnZXIuaXNFbmFibGVkKCkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAmJiBhY3Rpb25EZXNjUmVzSWQgIT0gMCkgewotICAgICAgICAgICAgICAgICAgICAgICAgQWNjZXNzaWJpbGl0eUV2ZW50IGV2ZW50ID0gQWNjZXNzaWJpbGl0eUV2ZW50Lm9idGFpbigKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQWNjZXNzaWJpbGl0eUV2ZW50Q29tcGF0LlRZUEVfQU5OT1VOQ0VNRU5UKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGV2ZW50LnNldFBhY2thZ2VOYW1lKG1Db250ZXh0LmdldFBhY2thZ2VOYW1lKCkpOwotICAgICAgICAgICAgICAgICAgICAgICAgZXZlbnQuc2V0Q2xhc3NOYW1lKGdldENsYXNzKCkuZ2V0TmFtZSgpKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGV2ZW50LmdldFRleHQoKS5hZGQoCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFwaUhlbHBlci5nZXRMaWJSZXNvdXJjZXMobUNvbnRleHQpLmdldFN0cmluZyhhY3Rpb25EZXNjUmVzSWQpKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIG1BY2Nlc3NpYmlsaXR5TWFuYWdlci5zZW5kQWNjZXNzaWJpbGl0eUV2ZW50KGV2ZW50KTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0gZWxzZSBpZiAoaWQgPT0gUi5pZC5tcl9jbG9zZSkgewotICAgICAgICAgICAgICAgIGRpc21pc3MoKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLQotICAgIHByaXZhdGUgY2xhc3MgVm9sdW1lQ2hhbmdlTGlzdGVuZXIgaW1wbGVtZW50cyBTZWVrQmFyLk9uU2Vla0JhckNoYW5nZUxpc3RlbmVyIHsKLSAgICAgICAgcHJpdmF0ZSBmaW5hbCBSdW5uYWJsZSBtU3RvcFRyYWNraW5nVG91Y2ggPSBuZXcgUnVubmFibGUoKSB7Ci0gICAgICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgICAgIHB1YmxpYyB2b2lkIHJ1bigpIHsKLSAgICAgICAgICAgICAgICBpZiAobVJvdXRlSW5Wb2x1bWVTbGlkZXJUb3VjaGVkICE9IG51bGwpIHsKLSAgICAgICAgICAgICAgICAgICAgbVJvdXRlSW5Wb2x1bWVTbGlkZXJUb3VjaGVkID0gbnVsbDsKLSAgICAgICAgICAgICAgICAgICAgaWYgKG1IYXNQZW5kaW5nVXBkYXRlKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICB1cGRhdGUobVBlbmRpbmdVcGRhdGVBbmltYXRpb25OZWVkZWQpOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICB9OwotCi0gICAgICAgIFZvbHVtZUNoYW5nZUxpc3RlbmVyKCkgewotICAgICAgICB9Ci0KLSAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgIHB1YmxpYyB2b2lkIG9uU3RhcnRUcmFja2luZ1RvdWNoKFNlZWtCYXIgc2Vla0JhcikgewotICAgICAgICAgICAgaWYgKG1Sb3V0ZUluVm9sdW1lU2xpZGVyVG91Y2hlZCAhPSBudWxsKSB7Ci0gICAgICAgICAgICAgICAgbVZvbHVtZVNsaWRlci5yZW1vdmVDYWxsYmFja3MobVN0b3BUcmFja2luZ1RvdWNoKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIG1Sb3V0ZUluVm9sdW1lU2xpZGVyVG91Y2hlZCA9IChNZWRpYVJvdXRlci5Sb3V0ZUluZm8pIHNlZWtCYXIuZ2V0VGFnKCk7Ci0gICAgICAgIH0KLQotICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgcHVibGljIHZvaWQgb25TdG9wVHJhY2tpbmdUb3VjaChTZWVrQmFyIHNlZWtCYXIpIHsKLSAgICAgICAgICAgIC8vIERlZmVyIHJlc2V0dGluZyBtVm9sdW1lU2xpZGVyVG91Y2hlZCB0byBhbGxvdyB0aGUgbWVkaWEgcm91dGUgcHJvdmlkZXIKLSAgICAgICAgICAgIC8vIGEgbGl0dGxlIHRpbWUgdG8gc2V0dGxlIGludG8gaXRzIG5ldyBzdGF0ZSBhbmQgcHVibGlzaCB0aGUgZmluYWwKLSAgICAgICAgICAgIC8vIHZvbHVtZSB1cGRhdGUuCi0gICAgICAgICAgICBtVm9sdW1lU2xpZGVyLnBvc3REZWxheWVkKG1TdG9wVHJhY2tpbmdUb3VjaCwgVk9MVU1FX1VQREFURV9ERUxBWV9NSUxMSVMpOwotICAgICAgICB9Ci0KLSAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgIHB1YmxpYyB2b2lkIG9uUHJvZ3Jlc3NDaGFuZ2VkKFNlZWtCYXIgc2Vla0JhciwgaW50IHByb2dyZXNzLCBib29sZWFuIGZyb21Vc2VyKSB7Ci0gICAgICAgICAgICBpZiAoZnJvbVVzZXIpIHsKLSAgICAgICAgICAgICAgICBNZWRpYVJvdXRlci5Sb3V0ZUluZm8gcm91dGUgPSAoTWVkaWFSb3V0ZXIuUm91dGVJbmZvKSBzZWVrQmFyLmdldFRhZygpOwotICAgICAgICAgICAgICAgIGlmIChERUJVRykgewotICAgICAgICAgICAgICAgICAgICBMb2cuZChUQUcsICJvblByb2dyZXNzQ2hhbmdlZCgpOiBjYWxsaW5nICIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICArICJNZWRpYVJvdXRlci5Sb3V0ZUluZm8ucmVxdWVzdFNldFZvbHVtZSgiICsgcHJvZ3Jlc3MgKyAiKSIpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICByb3V0ZS5yZXF1ZXN0U2V0Vm9sdW1lKHByb2dyZXNzKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLQotICAgIHByaXZhdGUgY2xhc3MgVm9sdW1lR3JvdXBBZGFwdGVyIGV4dGVuZHMgQXJyYXlBZGFwdGVyPE1lZGlhUm91dGVyLlJvdXRlSW5mbz4gewotICAgICAgICBmaW5hbCBmbG9hdCBtRGlzYWJsZWRBbHBoYTsKLQotICAgICAgICBwdWJsaWMgVm9sdW1lR3JvdXBBZGFwdGVyKENvbnRleHQgY29udGV4dCwgTGlzdDxNZWRpYVJvdXRlci5Sb3V0ZUluZm8+IG9iamVjdHMpIHsKLSAgICAgICAgICAgIHN1cGVyKGNvbnRleHQsIDAsIG9iamVjdHMpOwotICAgICAgICAgICAgbURpc2FibGVkQWxwaGEgPSBNZWRpYVJvdXRlclRoZW1lSGVscGVyLmdldERpc2FibGVkQWxwaGEoY29udGV4dCk7Ci0gICAgICAgIH0KLQotICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgcHVibGljIGJvb2xlYW4gaXNFbmFibGVkKGludCBwb3NpdGlvbikgewotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9Ci0KLSAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgIHB1YmxpYyBWaWV3IGdldFZpZXcoZmluYWwgaW50IHBvc2l0aW9uLCBWaWV3IGNvbnZlcnRWaWV3LCBWaWV3R3JvdXAgcGFyZW50KSB7Ci0gICAgICAgICAgICBWaWV3IHYgPSBjb252ZXJ0VmlldzsKLSAgICAgICAgICAgIGlmICh2ID09IG51bGwpIHsKLSAgICAgICAgICAgICAgICB2ID0gTGF5b3V0SW5mbGF0ZXIuZnJvbShwYXJlbnQuZ2V0Q29udGV4dCgpKS5pbmZsYXRlKAotICAgICAgICAgICAgICAgICAgICAgICAgUi5sYXlvdXQubXJfY29udHJvbGxlcl92b2x1bWVfaXRlbSwgcGFyZW50LCBmYWxzZSk7Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIHVwZGF0ZVZvbHVtZUdyb3VwSXRlbUhlaWdodCh2KTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgTWVkaWFSb3V0ZXIuUm91dGVJbmZvIHJvdXRlID0gZ2V0SXRlbShwb3NpdGlvbik7Ci0gICAgICAgICAgICBpZiAocm91dGUgIT0gbnVsbCkgewotICAgICAgICAgICAgICAgIGJvb2xlYW4gaXNFbmFibGVkID0gcm91dGUuaXNFbmFibGVkKCk7Ci0KLSAgICAgICAgICAgICAgICBUZXh0VmlldyByb3V0ZU5hbWUgPSAoVGV4dFZpZXcpIHYuZmluZFZpZXdCeUlkKFIuaWQubXJfbmFtZSk7Ci0gICAgICAgICAgICAgICAgcm91dGVOYW1lLnNldEVuYWJsZWQoaXNFbmFibGVkKTsKLSAgICAgICAgICAgICAgICByb3V0ZU5hbWUuc2V0VGV4dChyb3V0ZS5nZXROYW1lKCkpOwotCi0gICAgICAgICAgICAgICAgTWVkaWFSb3V0ZVZvbHVtZVNsaWRlciB2b2x1bWVTbGlkZXIgPQotICAgICAgICAgICAgICAgICAgICAgICAgKE1lZGlhUm91dGVWb2x1bWVTbGlkZXIpIHYuZmluZFZpZXdCeUlkKFIuaWQubXJfdm9sdW1lX3NsaWRlcik7Ci0gICAgICAgICAgICAgICAgTWVkaWFSb3V0ZXJUaGVtZUhlbHBlci5zZXRWb2x1bWVTbGlkZXJDb2xvcigKLSAgICAgICAgICAgICAgICAgICAgICAgIHBhcmVudC5nZXRDb250ZXh0KCksIHZvbHVtZVNsaWRlciwgbVZvbHVtZUdyb3VwTGlzdCk7Ci0gICAgICAgICAgICAgICAgdm9sdW1lU2xpZGVyLnNldFRhZyhyb3V0ZSk7Ci0gICAgICAgICAgICAgICAgbVZvbHVtZVNsaWRlck1hcC5wdXQocm91dGUsIHZvbHVtZVNsaWRlcik7Ci0gICAgICAgICAgICAgICAgdm9sdW1lU2xpZGVyLnNldEhpZGVUaHVtYighaXNFbmFibGVkKTsKLSAgICAgICAgICAgICAgICB2b2x1bWVTbGlkZXIuc2V0RW5hYmxlZChpc0VuYWJsZWQpOwotICAgICAgICAgICAgICAgIGlmIChpc0VuYWJsZWQpIHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKGlzVm9sdW1lQ29udHJvbEF2YWlsYWJsZShyb3V0ZSkpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHZvbHVtZVNsaWRlci5zZXRNYXgocm91dGUuZ2V0Vm9sdW1lTWF4KCkpOwotICAgICAgICAgICAgICAgICAgICAgICAgdm9sdW1lU2xpZGVyLnNldFByb2dyZXNzKHJvdXRlLmdldFZvbHVtZSgpKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIHZvbHVtZVNsaWRlci5zZXRPblNlZWtCYXJDaGFuZ2VMaXN0ZW5lcihtVm9sdW1lQ2hhbmdlTGlzdGVuZXIpOwotICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICAgICAgdm9sdW1lU2xpZGVyLnNldE1heCgxMDApOwotICAgICAgICAgICAgICAgICAgICAgICAgdm9sdW1lU2xpZGVyLnNldFByb2dyZXNzKDEwMCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICB2b2x1bWVTbGlkZXIuc2V0RW5hYmxlZChmYWxzZSk7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICBJbWFnZVZpZXcgdm9sdW1lSXRlbUljb24gPQotICAgICAgICAgICAgICAgICAgICAgICAgKEltYWdlVmlldykgdi5maW5kVmlld0J5SWQoUi5pZC5tcl92b2x1bWVfaXRlbV9pY29uKTsKLSAgICAgICAgICAgICAgICB2b2x1bWVJdGVtSWNvbi5zZXRBbHBoYShpc0VuYWJsZWQgPyAweEZGIDogKGludCkgKDB4RkYgKiBtRGlzYWJsZWRBbHBoYSkpOwotCi0gICAgICAgICAgICAgICAgLy8gSWYgb3ZlcmxheSBiaXRtYXAgZXhpc3RzLCByZWFsIHZpZXcgc2hvdWxkIHJlbWFpbiBoaWRkZW4gdW50aWwKLSAgICAgICAgICAgICAgICAvLyB0aGUgYW5pbWF0aW9uIGVuZHMuCi0gICAgICAgICAgICAgICAgTGluZWFyTGF5b3V0IGNvbnRhaW5lciA9IChMaW5lYXJMYXlvdXQpIHYuZmluZFZpZXdCeUlkKFIuaWQudm9sdW1lX2l0ZW1fY29udGFpbmVyKTsKLSAgICAgICAgICAgICAgICBjb250YWluZXIuc2V0VmlzaWJpbGl0eShtR3JvdXBNZW1iZXJSb3V0ZXNBbmltYXRpbmdXaXRoQml0bWFwLmNvbnRhaW5zKHJvdXRlKQotICAgICAgICAgICAgICAgICAgICAgICAgPyBWaWV3LklOVklTSUJMRSA6IFZpZXcuVklTSUJMRSk7Ci0KLSAgICAgICAgICAgICAgICAvLyBSb3V0ZXMgd2hpY2ggYXJlIGJlaW5nIGFkZGVkIHdpbGwgYmUgaW52aXNpYmxlIHVudGlsIGFuaW1hdGlvbiBlbmRzLgotICAgICAgICAgICAgICAgIGlmIChtR3JvdXBNZW1iZXJSb3V0ZXNBZGRlZCAhPSBudWxsICYmIG1Hcm91cE1lbWJlclJvdXRlc0FkZGVkLmNvbnRhaW5zKHJvdXRlKSkgewotICAgICAgICAgICAgICAgICAgICBBbmltYXRpb24gYWxwaGFBbmltID0gbmV3IEFscGhhQW5pbWF0aW9uKDAuMGYsIDAuMGYpOwotICAgICAgICAgICAgICAgICAgICBhbHBoYUFuaW0uc2V0RHVyYXRpb24oMCk7Ci0gICAgICAgICAgICAgICAgICAgIGFscGhhQW5pbS5zZXRGaWxsRW5hYmxlZCh0cnVlKTsKLSAgICAgICAgICAgICAgICAgICAgYWxwaGFBbmltLnNldEZpbGxBZnRlcih0cnVlKTsKLSAgICAgICAgICAgICAgICAgICAgdi5jbGVhckFuaW1hdGlvbigpOwotICAgICAgICAgICAgICAgICAgICB2LnN0YXJ0QW5pbWF0aW9uKGFscGhhQW5pbSk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICAgICAgcmV0dXJuIHY7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBwcml2YXRlIGNsYXNzIEZldGNoQXJ0VGFzayBleHRlbmRzIEFzeW5jVGFzazxWb2lkLCBWb2lkLCBCaXRtYXA+IHsKLSAgICAgICAgLy8gU2hvdyBhbmltYXRpb24gb25seSB3aGVuIGZldGNoaW5nIHRha2VzIGEgbG9uZyB0aW1lLgotICAgICAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBsb25nIFNIT1dfQU5JTV9USU1FX1RIUkVTSE9MRF9NSUxMSVMgPSAxMjBMOwotCi0gICAgICAgIHByaXZhdGUgZmluYWwgQml0bWFwIG1JY29uQml0bWFwOwotICAgICAgICBwcml2YXRlIGZpbmFsIFVyaSBtSWNvblVyaTsKLSAgICAgICAgcHJpdmF0ZSBpbnQgbUJhY2tncm91bmRDb2xvcjsKLSAgICAgICAgcHJpdmF0ZSBsb25nIG1TdGFydFRpbWVNaWxsaXM7Ci0KLSAgICAgICAgRmV0Y2hBcnRUYXNrKCkgewotICAgICAgICAgICAgQml0bWFwIGJpdG1hcCA9IG1EZXNjcmlwdGlvbiA9PSBudWxsID8gbnVsbCA6IG1EZXNjcmlwdGlvbi5nZXRJY29uQml0bWFwKCk7Ci0gICAgICAgICAgICBpZiAoaXNCaXRtYXBSZWN5Y2xlZChiaXRtYXApKSB7Ci0gICAgICAgICAgICAgICAgTG9nLncoVEFHLCAiQ2FuJ3QgZmV0Y2ggdGhlIGdpdmVuIGFydCBiaXRtYXAgYmVjYXVzZSBpdCdzIGFscmVhZHkgcmVjeWNsZWQuIik7Ci0gICAgICAgICAgICAgICAgYml0bWFwID0gbnVsbDsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIG1JY29uQml0bWFwID0gYml0bWFwOwotICAgICAgICAgICAgbUljb25VcmkgPSBtRGVzY3JpcHRpb24gPT0gbnVsbCA/IG51bGwgOiBtRGVzY3JpcHRpb24uZ2V0SWNvblVyaSgpOwotICAgICAgICB9Ci0KLSAgICAgICAgcHVibGljIEJpdG1hcCBnZXRJY29uQml0bWFwKCkgewotICAgICAgICAgICAgcmV0dXJuIG1JY29uQml0bWFwOwotICAgICAgICB9Ci0KLSAgICAgICAgcHVibGljIFVyaSBnZXRJY29uVXJpKCkgewotICAgICAgICAgICAgcmV0dXJuIG1JY29uVXJpOwotICAgICAgICB9Ci0KLSAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgIHByb3RlY3RlZCB2b2lkIG9uUHJlRXhlY3V0ZSgpIHsKLSAgICAgICAgICAgIG1TdGFydFRpbWVNaWxsaXMgPSBTeXN0ZW1DbG9jay51cHRpbWVNaWxsaXMoKTsKLSAgICAgICAgICAgIGNsZWFyTG9hZGVkQml0bWFwKCk7Ci0gICAgICAgIH0KLQotICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgcHJvdGVjdGVkIEJpdG1hcCBkb0luQmFja2dyb3VuZChWb2lkLi4uIGFyZykgewotICAgICAgICAgICAgQml0bWFwIGFydCA9IG51bGw7Ci0gICAgICAgICAgICBpZiAobUljb25CaXRtYXAgIT0gbnVsbCkgewotICAgICAgICAgICAgICAgIGFydCA9IG1JY29uQml0bWFwOwotICAgICAgICAgICAgfSBlbHNlIGlmIChtSWNvblVyaSAhPSBudWxsKSB7Ci0gICAgICAgICAgICAgICAgSW5wdXRTdHJlYW0gc3RyZWFtID0gbnVsbDsKLSAgICAgICAgICAgICAgICB0cnkgewotICAgICAgICAgICAgICAgICAgICBpZiAoKHN0cmVhbSA9IG9wZW5JbnB1dFN0cmVhbUJ5U2NoZW1lKG1JY29uVXJpKSkgPT0gbnVsbCkgewotICAgICAgICAgICAgICAgICAgICAgICAgTG9nLncoVEFHLCAiVW5hYmxlIHRvIG9wZW46ICIgKyBtSWNvblVyaSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAvLyBRdWVyeSBhcnQgc2l6ZS4KLSAgICAgICAgICAgICAgICAgICAgQml0bWFwRmFjdG9yeS5PcHRpb25zIG9wdGlvbnMgPSBuZXcgQml0bWFwRmFjdG9yeS5PcHRpb25zKCk7Ci0gICAgICAgICAgICAgICAgICAgIG9wdGlvbnMuaW5KdXN0RGVjb2RlQm91bmRzID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICAgICAgQml0bWFwRmFjdG9yeS5kZWNvZGVTdHJlYW0oc3RyZWFtLCBudWxsLCBvcHRpb25zKTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKG9wdGlvbnMub3V0V2lkdGggPT0gMCB8fCBvcHRpb25zLm91dEhlaWdodCA9PSAwKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAvLyBSZXdpbmQgdGhlIHN0cmVhbSBpbiBvcmRlciB0byByZXN0YXJ0IGFydCBkZWNvZGluZy4KLSAgICAgICAgICAgICAgICAgICAgdHJ5IHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHN0cmVhbS5yZXNldCgpOwotICAgICAgICAgICAgICAgICAgICB9IGNhdGNoIChJT0V4Y2VwdGlvbiBlKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAvLyBGYWlsZWQgdG8gcmV3aW5kIHRoZSBzdHJlYW0sIHRyeSB0byByZW9wZW4gaXQuCi0gICAgICAgICAgICAgICAgICAgICAgICBzdHJlYW0uY2xvc2UoKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmICgoc3RyZWFtID0gb3BlbklucHV0U3RyZWFtQnlTY2hlbWUobUljb25VcmkpKSA9PSBudWxsKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgTG9nLncoVEFHLCAiVW5hYmxlIHRvIG9wZW46ICIgKyBtSWNvblVyaSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgLy8gQ2FsY3VsYXRlIHJlcXVpcmVkIHNpemUgdG8gZGVjb2RlIHRoZSBhcnQgYW5kIHBvc3NpYmx5IHJlc2l6ZSBpdC4KLSAgICAgICAgICAgICAgICAgICAgb3B0aW9ucy5pbkp1c3REZWNvZGVCb3VuZHMgPSBmYWxzZTsKLSAgICAgICAgICAgICAgICAgICAgaW50IHJlcUhlaWdodCA9IGdldERlc2lyZWRBcnRIZWlnaHQob3B0aW9ucy5vdXRXaWR0aCwgb3B0aW9ucy5vdXRIZWlnaHQpOwotICAgICAgICAgICAgICAgICAgICBpbnQgcmF0aW8gPSBvcHRpb25zLm91dEhlaWdodCAvIHJlcUhlaWdodDsKLSAgICAgICAgICAgICAgICAgICAgb3B0aW9ucy5pblNhbXBsZVNpemUgPSBNYXRoLm1heCgxLCBJbnRlZ2VyLmhpZ2hlc3RPbmVCaXQocmF0aW8pKTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKGlzQ2FuY2VsbGVkKCkpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBudWxsOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIGFydCA9IEJpdG1hcEZhY3RvcnkuZGVjb2RlU3RyZWFtKHN0cmVhbSwgbnVsbCwgb3B0aW9ucyk7Ci0gICAgICAgICAgICAgICAgfSBjYXRjaCAoSU9FeGNlcHRpb24gZSl7Ci0gICAgICAgICAgICAgICAgICAgIExvZy53KFRBRywgIlVuYWJsZSB0byBvcGVuOiAiICsgbUljb25VcmksIGUpOwotICAgICAgICAgICAgICAgIH0gZmluYWxseSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChzdHJlYW0gIT0gbnVsbCkgewotICAgICAgICAgICAgICAgICAgICAgICAgdHJ5IHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJlYW0uY2xvc2UoKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0gY2F0Y2ggKElPRXhjZXB0aW9uIGUpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmIChpc0JpdG1hcFJlY3ljbGVkKGFydCkpIHsKLSAgICAgICAgICAgICAgICBMb2cudyhUQUcsICJDYW4ndCB1c2UgcmVjeWNsZWQgYml0bWFwOiAiICsgYXJ0KTsKLSAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmIChhcnQgIT0gbnVsbCAmJiBhcnQuZ2V0V2lkdGgoKSA8IGFydC5nZXRIZWlnaHQoKSkgewotICAgICAgICAgICAgICAgIC8vIFBvcnRyYWl0IGFydCByZXF1aXJlcyBkb21pbmFudCBjb2xvciBhcyBiYWNrZ3JvdW5kIGNvbG9yLgotICAgICAgICAgICAgICAgIFBhbGV0dGUgcGFsZXR0ZSA9IG5ldyBQYWxldHRlLkJ1aWxkZXIoYXJ0KS5tYXhpbXVtQ29sb3JDb3VudCgxKS5nZW5lcmF0ZSgpOwotICAgICAgICAgICAgICAgIG1CYWNrZ3JvdW5kQ29sb3IgPSBwYWxldHRlLmdldFN3YXRjaGVzKCkuaXNFbXB0eSgpCi0gICAgICAgICAgICAgICAgICAgICAgICA/IDAgOiBwYWxldHRlLmdldFN3YXRjaGVzKCkuZ2V0KDApLmdldFJnYigpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgcmV0dXJuIGFydDsKLSAgICAgICAgfQotCi0gICAgICAgIEBPdmVycmlkZQotICAgICAgICBwcm90ZWN0ZWQgdm9pZCBvblBvc3RFeGVjdXRlKEJpdG1hcCBhcnQpIHsKLSAgICAgICAgICAgIG1GZXRjaEFydFRhc2sgPSBudWxsOwotICAgICAgICAgICAgaWYgKCFPYmplY3RzQ29tcGF0LmVxdWFscyhtQXJ0SWNvbkJpdG1hcCwgbUljb25CaXRtYXApCi0gICAgICAgICAgICAgICAgICAgIHx8ICFPYmplY3RzQ29tcGF0LmVxdWFscyhtQXJ0SWNvblVyaSwgbUljb25VcmkpKSB7Ci0gICAgICAgICAgICAgICAgbUFydEljb25CaXRtYXAgPSBtSWNvbkJpdG1hcDsKLSAgICAgICAgICAgICAgICBtQXJ0SWNvbkxvYWRlZEJpdG1hcCA9IGFydDsKLSAgICAgICAgICAgICAgICBtQXJ0SWNvblVyaSA9IG1JY29uVXJpOwotICAgICAgICAgICAgICAgIG1BcnRJY29uQmFja2dyb3VuZENvbG9yID0gbUJhY2tncm91bmRDb2xvcjsKLSAgICAgICAgICAgICAgICBtQXJ0SWNvbklzTG9hZGVkID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICBsb25nIGVsYXBzZWRUaW1lTWlsbGlzID0gU3lzdGVtQ2xvY2sudXB0aW1lTWlsbGlzKCkgLSBtU3RhcnRUaW1lTWlsbGlzOwotICAgICAgICAgICAgICAgIC8vIExvYWRlZCBiaXRtYXAgd2lsbCBiZSBhcHBsaWVkIG9uIHRoZSBuZXh0IHVwZGF0ZQotICAgICAgICAgICAgICAgIHVwZGF0ZShlbGFwc2VkVGltZU1pbGxpcyA+IFNIT1dfQU5JTV9USU1FX1RIUkVTSE9MRF9NSUxMSVMpOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgcHJpdmF0ZSBJbnB1dFN0cmVhbSBvcGVuSW5wdXRTdHJlYW1CeVNjaGVtZShVcmkgdXJpKSB0aHJvd3MgSU9FeGNlcHRpb24gewotICAgICAgICAgICAgU3RyaW5nIHNjaGVtZSA9IHVyaS5nZXRTY2hlbWUoKS50b0xvd2VyQ2FzZSgpOwotICAgICAgICAgICAgSW5wdXRTdHJlYW0gc3RyZWFtID0gbnVsbDsKLSAgICAgICAgICAgIGlmIChDb250ZW50UmVzb2x2ZXIuU0NIRU1FX0FORFJPSURfUkVTT1VSQ0UuZXF1YWxzKHNjaGVtZSkKLSAgICAgICAgICAgICAgICAgICAgfHwgQ29udGVudFJlc29sdmVyLlNDSEVNRV9DT05URU5ULmVxdWFscyhzY2hlbWUpCi0gICAgICAgICAgICAgICAgICAgIHx8IENvbnRlbnRSZXNvbHZlci5TQ0hFTUVfRklMRS5lcXVhbHMoc2NoZW1lKSkgewotICAgICAgICAgICAgICAgIHN0cmVhbSA9IG1Db250ZXh0LmdldENvbnRlbnRSZXNvbHZlcigpLm9wZW5JbnB1dFN0cmVhbSh1cmkpOwotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICBVUkwgdXJsID0gbmV3IFVSTCh1cmkudG9TdHJpbmcoKSk7Ci0gICAgICAgICAgICAgICAgVVJMQ29ubmVjdGlvbiBjb25uID0gdXJsLm9wZW5Db25uZWN0aW9uKCk7Ci0gICAgICAgICAgICAgICAgY29ubi5zZXRDb25uZWN0VGltZW91dChDT05ORUNUSU9OX1RJTUVPVVRfTUlMTElTKTsKLSAgICAgICAgICAgICAgICBjb25uLnNldFJlYWRUaW1lb3V0KENPTk5FQ1RJT05fVElNRU9VVF9NSUxMSVMpOwotICAgICAgICAgICAgICAgIHN0cmVhbSA9IGNvbm4uZ2V0SW5wdXRTdHJlYW0oKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHJldHVybiAoc3RyZWFtID09IG51bGwpID8gbnVsbCA6IG5ldyBCdWZmZXJlZElucHV0U3RyZWFtKHN0cmVhbSk7Ci0gICAgICAgIH0KLSAgICB9Ci19CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9NZWRpYUNvbXBvbmVudHMvc3JjL2NvbS9hbmRyb2lkL3N1cHBvcnQvbWVkaWFyb3V0ZXIvYXBwL01lZGlhUm91dGVDb250cm9sbGVyRGlhbG9nRnJhZ21lbnQuamF2YSBiL3BhY2thZ2VzL01lZGlhQ29tcG9uZW50cy9zcmMvY29tL2FuZHJvaWQvc3VwcG9ydC9tZWRpYXJvdXRlci9hcHAvTWVkaWFSb3V0ZUNvbnRyb2xsZXJEaWFsb2dGcmFnbWVudC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyMTVkNzRmLi4wMDAwMDAwCi0tLSBhL3BhY2thZ2VzL01lZGlhQ29tcG9uZW50cy9zcmMvY29tL2FuZHJvaWQvc3VwcG9ydC9tZWRpYXJvdXRlci9hcHAvTWVkaWFSb3V0ZUNvbnRyb2xsZXJEaWFsb2dGcmFnbWVudC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNzYgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAyMDE4IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKLSAqCi0gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKLSAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KLSAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotICoKLSAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0gKgotICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQotICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKLSAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgotICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAotICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCi0gKi8KLQotcGFja2FnZSBjb20uYW5kcm9pZC5zdXBwb3J0Lm1lZGlhcm91dGVyLmFwcDsKLQotaW1wb3J0IGFuZHJvaWQuYXBwLkRpYWxvZzsKLWltcG9ydCBhbmRyb2lkLmFwcC5EaWFsb2dGcmFnbWVudDsKLWltcG9ydCBhbmRyb2lkLmNvbnRlbnQuQ29udGV4dDsKLWltcG9ydCBhbmRyb2lkLmNvbnRlbnQucmVzLkNvbmZpZ3VyYXRpb247Ci1pbXBvcnQgYW5kcm9pZC5vcy5CdW5kbGU7Ci0KLS8qKgotICogTWVkaWEgcm91dGUgY29udHJvbGxlciBkaWFsb2cgZnJhZ21lbnQuCi0gKiA8cD4KLSAqIENyZWF0ZXMgYSB7QGxpbmsgTWVkaWFSb3V0ZUNvbnRyb2xsZXJEaWFsb2d9LiAgVGhlIGFwcGxpY2F0aW9uIG1heSBzdWJjbGFzcwotICogdGhpcyBkaWFsb2cgZnJhZ21lbnQgdG8gY3VzdG9taXplIHRoZSBtZWRpYSByb3V0ZSBjb250cm9sbGVyIGRpYWxvZy4KLSAqIDwvcD4KLSAqLwotcHVibGljIGNsYXNzIE1lZGlhUm91dGVDb250cm9sbGVyRGlhbG9nRnJhZ21lbnQgZXh0ZW5kcyBEaWFsb2dGcmFnbWVudCB7Ci0gICAgcHJpdmF0ZSBNZWRpYVJvdXRlQ29udHJvbGxlckRpYWxvZyBtRGlhbG9nOwotICAgIC8qKgotICAgICAqIENyZWF0ZXMgYSBtZWRpYSByb3V0ZSBjb250cm9sbGVyIGRpYWxvZyBmcmFnbWVudC4KLSAgICAgKiA8cD4KLSAgICAgKiBBbGwgc3ViY2xhc3NlcyBvZiB0aGlzIGNsYXNzIG11c3QgYWxzbyBwb3NzZXNzIGEgZGVmYXVsdCBjb25zdHJ1Y3Rvci4KLSAgICAgKiA8L3A+Ci0gICAgICovCi0gICAgcHVibGljIE1lZGlhUm91dGVDb250cm9sbGVyRGlhbG9nRnJhZ21lbnQoKSB7Ci0gICAgICAgIHNldENhbmNlbGFibGUodHJ1ZSk7Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogQ2FsbGVkIHdoZW4gdGhlIGNvbnRyb2xsZXIgZGlhbG9nIGlzIGJlaW5nIGNyZWF0ZWQuCi0gICAgICogPHA+Ci0gICAgICogU3ViY2xhc3NlcyBtYXkgb3ZlcnJpZGUgdGhpcyBtZXRob2QgdG8gY3VzdG9taXplIHRoZSBkaWFsb2cuCi0gICAgICogPC9wPgotICAgICAqLwotICAgIHB1YmxpYyBNZWRpYVJvdXRlQ29udHJvbGxlckRpYWxvZyBvbkNyZWF0ZUNvbnRyb2xsZXJEaWFsb2coCi0gICAgICAgICAgICBDb250ZXh0IGNvbnRleHQsIEJ1bmRsZSBzYXZlZEluc3RhbmNlU3RhdGUpIHsKLSAgICAgICAgcmV0dXJuIG5ldyBNZWRpYVJvdXRlQ29udHJvbGxlckRpYWxvZyhjb250ZXh0KTsKLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgRGlhbG9nIG9uQ3JlYXRlRGlhbG9nKEJ1bmRsZSBzYXZlZEluc3RhbmNlU3RhdGUpIHsKLSAgICAgICAgbURpYWxvZyA9IG9uQ3JlYXRlQ29udHJvbGxlckRpYWxvZyhnZXRDb250ZXh0KCksIHNhdmVkSW5zdGFuY2VTdGF0ZSk7Ci0gICAgICAgIHJldHVybiBtRGlhbG9nOwotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyB2b2lkIG9uU3RvcCgpIHsKLSAgICAgICAgc3VwZXIub25TdG9wKCk7Ci0gICAgICAgIGlmIChtRGlhbG9nICE9IG51bGwpIHsKLSAgICAgICAgICAgIG1EaWFsb2cuY2xlYXJHcm91cExpc3RBbmltYXRpb24oZmFsc2UpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIHZvaWQgb25Db25maWd1cmF0aW9uQ2hhbmdlZChDb25maWd1cmF0aW9uIG5ld0NvbmZpZykgewotICAgICAgICBzdXBlci5vbkNvbmZpZ3VyYXRpb25DaGFuZ2VkKG5ld0NvbmZpZyk7Ci0gICAgICAgIGlmIChtRGlhbG9nICE9IG51bGwpIHsKLSAgICAgICAgICAgIG1EaWFsb2cudXBkYXRlTGF5b3V0KCk7Ci0gICAgICAgIH0KLSAgICB9Ci19CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9NZWRpYUNvbXBvbmVudHMvc3JjL2NvbS9hbmRyb2lkL3N1cHBvcnQvbWVkaWFyb3V0ZXIvYXBwL01lZGlhUm91dGVEaWFsb2dGYWN0b3J5LmphdmEgYi9wYWNrYWdlcy9NZWRpYUNvbXBvbmVudHMvc3JjL2NvbS9hbmRyb2lkL3N1cHBvcnQvbWVkaWFyb3V0ZXIvYXBwL01lZGlhUm91dGVEaWFsb2dGYWN0b3J5LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGE5ZWFmMzkuLjAwMDAwMDAKLS0tIGEvcGFja2FnZXMvTWVkaWFDb21wb25lbnRzL3NyYy9jb20vYW5kcm9pZC9zdXBwb3J0L21lZGlhcm91dGVyL2FwcC9NZWRpYVJvdXRlRGlhbG9nRmFjdG9yeS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNzQgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAyMDE4IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKLSAqCi0gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKLSAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KLSAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotICoKLSAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0gKgotICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQotICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKLSAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgotICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAotICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCi0gKi8KLQotcGFja2FnZSBjb20uYW5kcm9pZC5zdXBwb3J0Lm1lZGlhcm91dGVyLmFwcDsKLQotaW1wb3J0IGFuZHJvaWQuc3VwcG9ydC5hbm5vdGF0aW9uLk5vbk51bGw7Ci0KLS8qKgotICogVGhlIG1lZGlhIHJvdXRlIGRpYWxvZyBmYWN0b3J5IGlzIHJlc3BvbnNpYmxlIGZvciBjcmVhdGluZyB0aGUgbWVkaWEgcm91dGUKLSAqIGNob29zZXIgYW5kIGNvbnRyb2xsZXIgZGlhbG9ncyBhcyBuZWVkZWQuCi0gKiA8cD4KLSAqIFRoZSBhcHBsaWNhdGlvbiBjYW4gY3VzdG9taXplIHRoZSBkaWFsb2dzIGJ5IHByb3ZpZGluZyBhIHN1YmNsYXNzIG9mIHRoZQotICogZGlhbG9nIGZhY3RvcnkgdG8gdGhlIHtAbGluayBNZWRpYVJvdXRlQnV0dG9ufSB1c2luZyB0aGUKLSAqIHtAbGluayBNZWRpYVJvdXRlQnV0dG9uI3NldERpYWxvZ0ZhY3Rvcnkgc2V0RGlhbG9nRmFjdG9yeX0gbWV0aG9kLgotICogPC9wPgotICovCi1wdWJsaWMgY2xhc3MgTWVkaWFSb3V0ZURpYWxvZ0ZhY3RvcnkgewotICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIE1lZGlhUm91dGVEaWFsb2dGYWN0b3J5IHNEZWZhdWx0ID0gbmV3IE1lZGlhUm91dGVEaWFsb2dGYWN0b3J5KCk7Ci0KLSAgICAvKioKLSAgICAgKiBDcmVhdGVzIGEgZGVmYXVsdCBtZWRpYSByb3V0ZSBkaWFsb2cgZmFjdG9yeS4KLSAgICAgKi8KLSAgICBwdWJsaWMgTWVkaWFSb3V0ZURpYWxvZ0ZhY3RvcnkoKSB7Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogR2V0cyB0aGUgZGVmYXVsdCBmYWN0b3J5IGluc3RhbmNlLgotICAgICAqCi0gICAgICogQHJldHVybiBUaGUgZGVmYXVsdCBtZWRpYSByb3V0ZSBkaWFsb2cgZmFjdG9yeSwgbmV2ZXIgbnVsbC4KLSAgICAgKi8KLSAgICBATm9uTnVsbAotICAgIHB1YmxpYyBzdGF0aWMgTWVkaWFSb3V0ZURpYWxvZ0ZhY3RvcnkgZ2V0RGVmYXVsdCgpIHsKLSAgICAgICAgcmV0dXJuIHNEZWZhdWx0OwotICAgIH0KLQotICAgIC8qKgotICAgICAqIENhbGxlZCB3aGVuIHRoZSBjaG9vc2VyIGRpYWxvZyBpcyBiZWluZyBvcGVuZWQgYW5kIGl0IGlzIHRpbWUgdG8gY3JlYXRlIHRoZSBmcmFnbWVudC4KLSAgICAgKiA8cD4KLSAgICAgKiBTdWJjbGFzc2VzIG1heSBvdmVycmlkZSB0aGlzIG1ldGhvZCB0byBjcmVhdGUgYSBjdXN0b21pemVkIGZyYWdtZW50LgotICAgICAqIDwvcD4KLSAgICAgKgotICAgICAqIEByZXR1cm4gVGhlIG1lZGlhIHJvdXRlIGNob29zZXIgZGlhbG9nIGZyYWdtZW50LCBtdXN0IG5vdCBiZSBudWxsLgotICAgICAqLwotICAgIEBOb25OdWxsCi0gICAgcHVibGljIE1lZGlhUm91dGVDaG9vc2VyRGlhbG9nRnJhZ21lbnQgb25DcmVhdGVDaG9vc2VyRGlhbG9nRnJhZ21lbnQoKSB7Ci0gICAgICAgIHJldHVybiBuZXcgTWVkaWFSb3V0ZUNob29zZXJEaWFsb2dGcmFnbWVudCgpOwotICAgIH0KLQotICAgIC8qKgotICAgICAqIENhbGxlZCB3aGVuIHRoZSBjb250cm9sbGVyIGRpYWxvZyBpcyBiZWluZyBvcGVuZWQgYW5kIGl0IGlzIHRpbWUgdG8gY3JlYXRlIHRoZSBmcmFnbWVudC4KLSAgICAgKiA8cD4KLSAgICAgKiBTdWJjbGFzc2VzIG1heSBvdmVycmlkZSB0aGlzIG1ldGhvZCB0byBjcmVhdGUgYSBjdXN0b21pemVkIGZyYWdtZW50LgotICAgICAqIDwvcD4KLSAgICAgKgotICAgICAqIEByZXR1cm4gVGhlIG1lZGlhIHJvdXRlIGNvbnRyb2xsZXIgZGlhbG9nIGZyYWdtZW50LCBtdXN0IG5vdCBiZSBudWxsLgotICAgICAqLwotICAgIEBOb25OdWxsCi0gICAgcHVibGljIE1lZGlhUm91dGVDb250cm9sbGVyRGlhbG9nRnJhZ21lbnQgb25DcmVhdGVDb250cm9sbGVyRGlhbG9nRnJhZ21lbnQoKSB7Ci0gICAgICAgIHJldHVybiBuZXcgTWVkaWFSb3V0ZUNvbnRyb2xsZXJEaWFsb2dGcmFnbWVudCgpOwotICAgIH0KLX0KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL01lZGlhQ29tcG9uZW50cy9zcmMvY29tL2FuZHJvaWQvc3VwcG9ydC9tZWRpYXJvdXRlci9hcHAvTWVkaWFSb3V0ZURpYWxvZ0hlbHBlci5qYXZhIGIvcGFja2FnZXMvTWVkaWFDb21wb25lbnRzL3NyYy9jb20vYW5kcm9pZC9zdXBwb3J0L21lZGlhcm91dGVyL2FwcC9NZWRpYVJvdXRlRGlhbG9nSGVscGVyLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDlhYWJmN2IuLjAwMDAwMDAKLS0tIGEvcGFja2FnZXMvTWVkaWFDb21wb25lbnRzL3NyYy9jb20vYW5kcm9pZC9zdXBwb3J0L21lZGlhcm91dGVyL2FwcC9NZWRpYVJvdXRlRGlhbG9nSGVscGVyLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxNTQgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAyMDE4IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKLSAqCi0gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKLSAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KLSAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotICoKLSAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0gKgotICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQotICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKLSAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgotICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAotICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCi0gKi8KLQotcGFja2FnZSBjb20uYW5kcm9pZC5zdXBwb3J0Lm1lZGlhcm91dGVyLmFwcDsKLQotaW1wb3J0IGFuZHJvaWQuY29udGVudC5Db250ZXh0OwotaW1wb3J0IGFuZHJvaWQuZ3JhcGhpY3MuQml0bWFwOwotaW1wb3J0IGFuZHJvaWQuZ3JhcGhpY3MuQ2FudmFzOwotaW1wb3J0IGFuZHJvaWQuZ3JhcGhpY3MuUmVjdDsKLWltcG9ydCBhbmRyb2lkLmdyYXBoaWNzLmRyYXdhYmxlLkJpdG1hcERyYXdhYmxlOwotaW1wb3J0IGFuZHJvaWQudXRpbC5EaXNwbGF5TWV0cmljczsKLWltcG9ydCBhbmRyb2lkLnV0aWwuVHlwZWRWYWx1ZTsKLWltcG9ydCBhbmRyb2lkLnZpZXcuVmlldzsKLWltcG9ydCBhbmRyb2lkLnZpZXcuVmlld0dyb3VwOwotaW1wb3J0IGFuZHJvaWQud2lkZ2V0LkFycmF5QWRhcHRlcjsKLWltcG9ydCBhbmRyb2lkLndpZGdldC5MaXN0VmlldzsKLQotaW1wb3J0IGNvbS5hbmRyb2lkLm1lZGlhLnVwZGF0ZS5BcGlIZWxwZXI7Ci1pbXBvcnQgY29tLmFuZHJvaWQubWVkaWEudXBkYXRlLlI7Ci0KLWltcG9ydCBqYXZhLnV0aWwuSGFzaE1hcDsKLWltcG9ydCBqYXZhLnV0aWwuSGFzaFNldDsKLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLWltcG9ydCBqYXZhLnV0aWwuU2V0OwotCi1maW5hbCBjbGFzcyBNZWRpYVJvdXRlRGlhbG9nSGVscGVyIHsKLSAgICAvKioKLSAgICAgKiBUaGUgZnJhbWV3b3JrIHNob3VsZCBzZXQgdGhlIGRpYWxvZyB3aWR0aCBwcm9wZXJseSwgYnV0IHNvbWVob3cgaXQgZG9lc24ndCB3b3JrLCBoZW5jZQotICAgICAqIGR1cGxpY2F0aW5nIGEgc2ltaWxhciBsb2dpYyBoZXJlIHRvIGRldGVybWluZSB0aGUgYXBwcm9wcmlhdGUgZGlhbG9nIHdpZHRoLgotICAgICAqLwotICAgIHB1YmxpYyBzdGF0aWMgaW50IGdldERpYWxvZ1dpZHRoKENvbnRleHQgY29udGV4dCkgewotICAgICAgICBEaXNwbGF5TWV0cmljcyBtZXRyaWNzID0gQXBpSGVscGVyLmdldExpYlJlc291cmNlcyhjb250ZXh0KS5nZXREaXNwbGF5TWV0cmljcygpOwotICAgICAgICBib29sZWFuIGlzUG9ydHJhaXQgPSBtZXRyaWNzLndpZHRoUGl4ZWxzIDwgbWV0cmljcy5oZWlnaHRQaXhlbHM7Ci0KLSAgICAgICAgVHlwZWRWYWx1ZSB2YWx1ZSA9IG5ldyBUeXBlZFZhbHVlKCk7Ci0gICAgICAgIEFwaUhlbHBlci5nZXRMaWJSZXNvdXJjZXMoY29udGV4dCkuZ2V0VmFsdWUoaXNQb3J0cmFpdAotICAgICAgICAgICAgICAgID8gUi5kaW1lbi5tcl9kaWFsb2dfZml4ZWRfd2lkdGhfbWlub3IKLSAgICAgICAgICAgICAgICA6IFIuZGltZW4ubXJfZGlhbG9nX2ZpeGVkX3dpZHRoX21ham9yLCB2YWx1ZSwgdHJ1ZSk7Ci0gICAgICAgIGlmICh2YWx1ZS50eXBlID09IFR5cGVkVmFsdWUuVFlQRV9ESU1FTlNJT04pIHsKLSAgICAgICAgICAgIHJldHVybiAoaW50KSB2YWx1ZS5nZXREaW1lbnNpb24obWV0cmljcyk7Ci0gICAgICAgIH0gZWxzZSBpZiAodmFsdWUudHlwZSA9PSBUeXBlZFZhbHVlLlRZUEVfRlJBQ1RJT04pIHsKLSAgICAgICAgICAgIHJldHVybiAoaW50KSB2YWx1ZS5nZXRGcmFjdGlvbihtZXRyaWNzLndpZHRoUGl4ZWxzLCBtZXRyaWNzLndpZHRoUGl4ZWxzKTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gVmlld0dyb3VwLkxheW91dFBhcmFtcy5XUkFQX0NPTlRFTlQ7Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogQ29tcGFyZXMgdHdvIGxpc3RzIHJlZ2FyZGxlc3Mgb2Ygb3JkZXIuCi0gICAgICoKLSAgICAgKiBAcGFyYW0gbGlzdDEgQSBsaXN0Ci0gICAgICogQHBhcmFtIGxpc3QyIEEgbGlzdCB0byBiZSBjb21wYXJlZCB3aXRoIHtAY29kZSBsaXN0MX0KLSAgICAgKiBAcmV0dXJuIFRydWUgaWYgdHdvIGxpc3RzIGhhdmUgZXhhY3RseSBzYW1lIGl0ZW1zIHJlZ2FyZGxlc3Mgb2Ygb3JkZXIsIGZhbHNlIG90aGVyd2lzZS4KLSAgICAgKi8KLSAgICBwdWJsaWMgc3RhdGljIDxFPiBib29sZWFuIGxpc3RVbm9yZGVyZWRFcXVhbHMoTGlzdDxFPiBsaXN0MSwgTGlzdDxFPiBsaXN0MikgewotICAgICAgICBIYXNoU2V0PEU+IHNldDEgPSBuZXcgSGFzaFNldDw+KGxpc3QxKTsKLSAgICAgICAgSGFzaFNldDxFPiBzZXQyID0gbmV3IEhhc2hTZXQ8PihsaXN0Mik7Ci0gICAgICAgIHJldHVybiBzZXQxLmVxdWFscyhzZXQyKTsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBDb21wYXJlcyB0d28gbGlzdHMgYW5kIHJldHVybnMgYSBzZXQgb2YgaXRlbXMgd2hpY2ggZXhpc3QKLSAgICAgKiBhZnRlci1saXN0IGJ1dCBiZWZvcmUtbGlzdCwgd2hpY2ggbWVhbnMgbmV3bHkgYWRkZWQgaXRlbXMuCi0gICAgICoKLSAgICAgKiBAcGFyYW0gYmVmb3JlIEEgbGlzdAotICAgICAqIEBwYXJhbSBhZnRlciBBIGxpc3QgdG8gYmUgY29tcGFyZWQgd2l0aCB7QGNvZGUgYmVmb3JlfQotICAgICAqIEByZXR1cm4gQSBzZXQgb2YgaXRlbXMgd2hpY2ggY29udGFpbnMgbmV3bHkgYWRkZWQgaXRlbXMgd2hpbGUKLSAgICAgKiBjb21wYXJpbmcge0Bjb2RlIGFmdGVyfSB0byB7QGNvZGUgYmVmb3JlfS4KLSAgICAgKi8KLSAgICBwdWJsaWMgc3RhdGljIDxFPiBTZXQ8RT4gZ2V0SXRlbXNBZGRlZChMaXN0PEU+IGJlZm9yZSwgTGlzdDxFPiBhZnRlcikgewotICAgICAgICBIYXNoU2V0PEU+IHNldCA9IG5ldyBIYXNoU2V0PD4oYWZ0ZXIpOwotICAgICAgICBzZXQucmVtb3ZlQWxsKGJlZm9yZSk7Ci0gICAgICAgIHJldHVybiBzZXQ7Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogQ29tcGFyZXMgdHdvIGxpc3RzIGFuZCByZXR1cm5zIGEgc2V0IG9mIGl0ZW1zIHdoaWNoIGV4aXN0Ci0gICAgICogYmVmb3JlLWxpc3QgYnV0IGFmdGVyLWxpc3QsIHdoaWNoIG1lYW5zIHJlbW92ZWQgaXRlbXMuCi0gICAgICoKLSAgICAgKiBAcGFyYW0gYmVmb3JlIEEgbGlzdAotICAgICAqIEBwYXJhbSBhZnRlciBBIGxpc3QgdG8gYmUgY29tcGFyZWQgd2l0aCB7QGNvZGUgYmVmb3JlfQotICAgICAqIEByZXR1cm4gQSBzZXQgb2YgaXRlbXMgd2hpY2ggY29udGFpbnMgcmVtb3ZlZCBpdGVtcyB3aGlsZQotICAgICAqIGNvbXBhcmluZyB7QGNvZGUgYWZ0ZXJ9IHRvIHtAY29kZSBiZWZvcmV9LgotICAgICAqLwotICAgIHB1YmxpYyBzdGF0aWMgPEU+IFNldDxFPiBnZXRJdGVtc1JlbW92ZWQoTGlzdDxFPiBiZWZvcmUsIExpc3Q8RT4gYWZ0ZXIpIHsKLSAgICAgICAgSGFzaFNldDxFPiBzZXQgPSBuZXcgSGFzaFNldDw+KGJlZm9yZSk7Ci0gICAgICAgIHNldC5yZW1vdmVBbGwoYWZ0ZXIpOwotICAgICAgICByZXR1cm4gc2V0OwotICAgIH0KLQotICAgIC8qKgotICAgICAqIEdlbmVyYXRlcyBhbiBpdGVtLVJlY3QgbWFwIHdoaWNoIGluZGljYXRlcyB3aGVyZSBtZW1iZXIKLSAgICAgKiBpdGVtcyBhcmUgbG9jYXRlZCBpbiB0aGUgZ2l2ZW4gTGlzdFZpZXcuCi0gICAgICoKLSAgICAgKiBAcGFyYW0gbGlzdFZpZXcgQSBsaXN0IHZpZXcKLSAgICAgKiBAcGFyYW0gYWRhcHRlciBBbiBhcnJheSBhZGFwdGVyIHdoaWNoIGNvbnRhaW5zIGFuIGFycmF5IG9mIGl0ZW1zLgotICAgICAqIEByZXR1cm4gQSBtYXAgb2YgaXRlbXMgYW5kIGJvdW5kcyBvZiB0aGVpciB2aWV3cyBsb2NhdGVkIGluIHRoZSBnaXZlbiBsaXN0IHZpZXcuCi0gICAgICovCi0gICAgcHVibGljIHN0YXRpYyA8RT4gSGFzaE1hcDxFLCBSZWN0PiBnZXRJdGVtQm91bmRNYXAoTGlzdFZpZXcgbGlzdFZpZXcsCi0gICAgICAgICAgICBBcnJheUFkYXB0ZXI8RT4gYWRhcHRlcikgewotICAgICAgICBIYXNoTWFwPEUsIFJlY3Q+IGl0ZW1Cb3VuZE1hcCA9IG5ldyBIYXNoTWFwPD4oKTsKLSAgICAgICAgaW50IGZpcnN0VmlzaWJsZVBvc2l0aW9uID0gbGlzdFZpZXcuZ2V0Rmlyc3RWaXNpYmxlUG9zaXRpb24oKTsKLSAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBsaXN0Vmlldy5nZXRDaGlsZENvdW50KCk7ICsraSkgewotICAgICAgICAgICAgaW50IHBvc2l0aW9uID0gZmlyc3RWaXNpYmxlUG9zaXRpb24gKyBpOwotICAgICAgICAgICAgRSBpdGVtID0gYWRhcHRlci5nZXRJdGVtKHBvc2l0aW9uKTsKLSAgICAgICAgICAgIFZpZXcgdmlldyA9IGxpc3RWaWV3LmdldENoaWxkQXQoaSk7Ci0gICAgICAgICAgICBpdGVtQm91bmRNYXAucHV0KGl0ZW0sCi0gICAgICAgICAgICAgICAgICAgIG5ldyBSZWN0KHZpZXcuZ2V0TGVmdCgpLCB2aWV3LmdldFRvcCgpLCB2aWV3LmdldFJpZ2h0KCksIHZpZXcuZ2V0Qm90dG9tKCkpKTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gaXRlbUJvdW5kTWFwOwotICAgIH0KLQotICAgIC8qKgotICAgICAqIEdlbmVyYXRlcyBhbiBpdGVtLUJpdG1hcERyYXdhYmxlIG1hcCB3aGljaCBzdG9yZXMgc25hcHNob3RzCi0gICAgICogb2YgbWVtYmVyIGl0ZW1zIGluIHRoZSBnaXZlbiBMaXN0Vmlldy4KLSAgICAgKgotICAgICAqIEBwYXJhbSBjb250ZXh0IEEgY29udGV4dAotICAgICAqIEBwYXJhbSBsaXN0VmlldyBBIGxpc3QgdmlldwotICAgICAqIEBwYXJhbSBhZGFwdGVyIEFuIGFycmF5IGFkYXB0ZXIgd2hpY2ggY29udGFpbnMgYW4gYXJyYXkgb2YgaXRlbXMuCi0gICAgICogQHJldHVybiBBIG1hcCBvZiBpdGVtcyBhbmQgc25hcHNob3RzIG9mIHRoZWlyIHZpZXdzIGluIHRoZSBnaXZlbiBsaXN0IHZpZXcuCi0gICAgICovCi0gICAgcHVibGljIHN0YXRpYyA8RT4gSGFzaE1hcDxFLCBCaXRtYXBEcmF3YWJsZT4gZ2V0SXRlbUJpdG1hcE1hcChDb250ZXh0IGNvbnRleHQsCi0gICAgICAgICAgICBMaXN0VmlldyBsaXN0VmlldywgQXJyYXlBZGFwdGVyPEU+IGFkYXB0ZXIpIHsKLSAgICAgICAgSGFzaE1hcDxFLCBCaXRtYXBEcmF3YWJsZT4gaXRlbUJpdG1hcE1hcCA9IG5ldyBIYXNoTWFwPD4oKTsKLSAgICAgICAgaW50IGZpcnN0VmlzaWJsZVBvc2l0aW9uID0gbGlzdFZpZXcuZ2V0Rmlyc3RWaXNpYmxlUG9zaXRpb24oKTsKLSAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBsaXN0Vmlldy5nZXRDaGlsZENvdW50KCk7ICsraSkgewotICAgICAgICAgICAgaW50IHBvc2l0aW9uID0gZmlyc3RWaXNpYmxlUG9zaXRpb24gKyBpOwotICAgICAgICAgICAgRSBpdGVtID0gYWRhcHRlci5nZXRJdGVtKHBvc2l0aW9uKTsKLSAgICAgICAgICAgIFZpZXcgdmlldyA9IGxpc3RWaWV3LmdldENoaWxkQXQoaSk7Ci0gICAgICAgICAgICBpdGVtQml0bWFwTWFwLnB1dChpdGVtLCBnZXRWaWV3Qml0bWFwKGNvbnRleHQsIHZpZXcpKTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gaXRlbUJpdG1hcE1hcDsKLSAgICB9Ci0KLSAgICBwcml2YXRlIHN0YXRpYyBCaXRtYXBEcmF3YWJsZSBnZXRWaWV3Qml0bWFwKENvbnRleHQgY29udGV4dCwgVmlldyB2aWV3KSB7Ci0gICAgICAgIEJpdG1hcCBiaXRtYXAgPSBCaXRtYXAuY3JlYXRlQml0bWFwKHZpZXcuZ2V0V2lkdGgoKSwgdmlldy5nZXRIZWlnaHQoKSwKLSAgICAgICAgICAgICAgICBCaXRtYXAuQ29uZmlnLkFSR0JfODg4OCk7Ci0gICAgICAgIENhbnZhcyBjYW52YXMgPSBuZXcgQ2FudmFzKGJpdG1hcCk7Ci0gICAgICAgIHZpZXcuZHJhdyhjYW52YXMpOwotICAgICAgICByZXR1cm4gbmV3IEJpdG1hcERyYXdhYmxlKGNvbnRleHQuZ2V0UmVzb3VyY2VzKCksIGJpdG1hcCk7Ci0gICAgfQotfQpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvTWVkaWFDb21wb25lbnRzL3NyYy9jb20vYW5kcm9pZC9zdXBwb3J0L21lZGlhcm91dGVyL2FwcC9NZWRpYVJvdXRlRGlzY292ZXJ5RnJhZ21lbnQuamF2YSBiL3BhY2thZ2VzL01lZGlhQ29tcG9uZW50cy9zcmMvY29tL2FuZHJvaWQvc3VwcG9ydC9tZWRpYXJvdXRlci9hcHAvTWVkaWFSb3V0ZURpc2NvdmVyeUZyYWdtZW50LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAyZWUxMTguLjAwMDAwMDAKLS0tIGEvcGFja2FnZXMvTWVkaWFDb21wb25lbnRzL3NyYy9jb20vYW5kcm9pZC9zdXBwb3J0L21lZGlhcm91dGVyL2FwcC9NZWRpYVJvdXRlRGlzY292ZXJ5RnJhZ21lbnQuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDE2NCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IDIwMTggVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAotICoKLSAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwotICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgotICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0gKgotICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLSAqCi0gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCi0gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAotICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCi0gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCi0gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KLSAqLwotCi1wYWNrYWdlIGNvbS5hbmRyb2lkLnN1cHBvcnQubWVkaWFyb3V0ZXIuYXBwOwotCi1pbXBvcnQgYW5kcm9pZC5vcy5CdW5kbGU7Ci1pbXBvcnQgYW5kcm9pZC5zdXBwb3J0LnY0LmFwcC5GcmFnbWVudDsKLQotaW1wb3J0IGNvbS5hbmRyb2lkLnN1cHBvcnQubWVkaWFyb3V0ZXIubWVkaWEuTWVkaWFSb3V0ZXI7Ci1pbXBvcnQgY29tLmFuZHJvaWQuc3VwcG9ydC5tZWRpYXJvdXRlci5tZWRpYS5NZWRpYVJvdXRlU2VsZWN0b3I7Ci0KLS8qKgotICogTWVkaWEgcm91dGUgZGlzY292ZXJ5IGZyYWdtZW50LgotICogPHA+Ci0gKiBUaGlzIGZyYWdtZW50IHRha2VzIGNhcmUgb2YgcmVnaXN0ZXJpbmcgYSBjYWxsYmFjayBmb3IgbWVkaWEgcm91dGUgZGlzY292ZXJ5Ci0gKiBkdXJpbmcgdGhlIHtAbGluayBGcmFnbWVudCNvblN0YXJ0IG9uU3RhcnQoKX0gcGhhc2UKLSAqIGFuZCByZW1vdmluZyBpdCBkdXJpbmcgdGhlIHtAbGluayBGcmFnbWVudCNvblN0b3Agb25TdG9wKCl9IHBoYXNlLgotICogPC9wPjxwPgotICogVGhlIGFwcGxpY2F0aW9uIG11c3Qgc3VwcGx5IGEgcm91dGUgc2VsZWN0b3IgdG8gc3BlY2lmeSB0aGUga2luZHMgb2Ygcm91dGVzCi0gKiB0byBkaXNjb3Zlci4gIFRoZSBhcHBsaWNhdGlvbiBtYXkgYWxzbyBvdmVycmlkZSB7QGxpbmsgI29uQ3JlYXRlQ2FsbGJhY2t9IHRvCi0gKiBwcm92aWRlIHRoZSB7QGxpbmsgTWVkaWFSb3V0ZXJ9IGNhbGxiYWNrIHRvIHJlZ2lzdGVyLgotICogPC9wPjxwPgotICogTm90ZSB0aGF0IHRoZSBkaXNjb3ZlcnkgY2FsbGJhY2sgbWFrZXMgdGhlIGFwcGxpY2F0aW9uIGJlIGNvbm5lY3RlZCB3aXRoIGFsbCB0aGUKLSAqIHtAbGluayBhbmRyb2lkLnN1cHBvcnQudjcubWVkaWEuTWVkaWFSb3V0ZVByb3ZpZGVyU2VydmljZSBtZWRpYSByb3V0ZSBwcm92aWRlciBzZXJ2aWNlc30KLSAqIHdoaWxlIGl0IGlzIHJlZ2lzdGVyZWQuCi0gKiA8L3A+Ci0gKi8KLXB1YmxpYyBjbGFzcyBNZWRpYVJvdXRlRGlzY292ZXJ5RnJhZ21lbnQgZXh0ZW5kcyBGcmFnbWVudCB7Ci0gICAgcHJpdmF0ZSBmaW5hbCBTdHJpbmcgQVJHVU1FTlRfU0VMRUNUT1IgPSAic2VsZWN0b3IiOwotCi0gICAgcHJpdmF0ZSBNZWRpYVJvdXRlciBtUm91dGVyOwotICAgIHByaXZhdGUgTWVkaWFSb3V0ZVNlbGVjdG9yIG1TZWxlY3RvcjsKLSAgICBwcml2YXRlIE1lZGlhUm91dGVyLkNhbGxiYWNrIG1DYWxsYmFjazsKLQotICAgIHB1YmxpYyBNZWRpYVJvdXRlRGlzY292ZXJ5RnJhZ21lbnQoKSB7Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogR2V0cyB0aGUgbWVkaWEgcm91dGVyIGluc3RhbmNlLgotICAgICAqLwotICAgIHB1YmxpYyBNZWRpYVJvdXRlciBnZXRNZWRpYVJvdXRlcigpIHsKLSAgICAgICAgZW5zdXJlUm91dGVyKCk7Ci0gICAgICAgIHJldHVybiBtUm91dGVyOwotICAgIH0KLQotICAgIHByaXZhdGUgdm9pZCBlbnN1cmVSb3V0ZXIoKSB7Ci0gICAgICAgIGlmIChtUm91dGVyID09IG51bGwpIHsKLSAgICAgICAgICAgIG1Sb3V0ZXIgPSBNZWRpYVJvdXRlci5nZXRJbnN0YW5jZShnZXRDb250ZXh0KCkpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogR2V0cyB0aGUgbWVkaWEgcm91dGUgc2VsZWN0b3IgZm9yIGZpbHRlcmluZyB0aGUgcm91dGVzIHRvIGJlIGRpc2NvdmVyZWQuCi0gICAgICoKLSAgICAgKiBAcmV0dXJuIFRoZSBzZWxlY3RvciwgbmV2ZXIgbnVsbC4KLSAgICAgKi8KLSAgICBwdWJsaWMgTWVkaWFSb3V0ZVNlbGVjdG9yIGdldFJvdXRlU2VsZWN0b3IoKSB7Ci0gICAgICAgIGVuc3VyZVJvdXRlU2VsZWN0b3IoKTsKLSAgICAgICAgcmV0dXJuIG1TZWxlY3RvcjsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBTZXRzIHRoZSBtZWRpYSByb3V0ZSBzZWxlY3RvciBmb3IgZmlsdGVyaW5nIHRoZSByb3V0ZXMgdG8gYmUgZGlzY292ZXJlZC4KLSAgICAgKiBUaGlzIG1ldGhvZCBtdXN0IGJlIGNhbGxlZCBiZWZvcmUgdGhlIGZyYWdtZW50IGlzIGFkZGVkLgotICAgICAqCi0gICAgICogQHBhcmFtIHNlbGVjdG9yIFRoZSBzZWxlY3RvciB0byBzZXQuCi0gICAgICovCi0gICAgcHVibGljIHZvaWQgc2V0Um91dGVTZWxlY3RvcihNZWRpYVJvdXRlU2VsZWN0b3Igc2VsZWN0b3IpIHsKLSAgICAgICAgaWYgKHNlbGVjdG9yID09IG51bGwpIHsKLSAgICAgICAgICAgIHRocm93IG5ldyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oInNlbGVjdG9yIG11c3Qgbm90IGJlIG51bGwiKTsKLSAgICAgICAgfQotCi0gICAgICAgIGVuc3VyZVJvdXRlU2VsZWN0b3IoKTsKLSAgICAgICAgaWYgKCFtU2VsZWN0b3IuZXF1YWxzKHNlbGVjdG9yKSkgewotICAgICAgICAgICAgbVNlbGVjdG9yID0gc2VsZWN0b3I7Ci0KLSAgICAgICAgICAgIEJ1bmRsZSBhcmdzID0gZ2V0QXJndW1lbnRzKCk7Ci0gICAgICAgICAgICBpZiAoYXJncyA9PSBudWxsKSB7Ci0gICAgICAgICAgICAgICAgYXJncyA9IG5ldyBCdW5kbGUoKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGFyZ3MucHV0QnVuZGxlKEFSR1VNRU5UX1NFTEVDVE9SLCBzZWxlY3Rvci5hc0J1bmRsZSgpKTsKLSAgICAgICAgICAgIHNldEFyZ3VtZW50cyhhcmdzKTsKLQotICAgICAgICAgICAgaWYgKG1DYWxsYmFjayAhPSBudWxsKSB7Ci0gICAgICAgICAgICAgICAgbVJvdXRlci5yZW1vdmVDYWxsYmFjayhtQ2FsbGJhY2spOwotICAgICAgICAgICAgICAgIG1Sb3V0ZXIuYWRkQ2FsbGJhY2sobVNlbGVjdG9yLCBtQ2FsbGJhY2ssIG9uUHJlcGFyZUNhbGxiYWNrRmxhZ3MoKSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBwcml2YXRlIHZvaWQgZW5zdXJlUm91dGVTZWxlY3RvcigpIHsKLSAgICAgICAgaWYgKG1TZWxlY3RvciA9PSBudWxsKSB7Ci0gICAgICAgICAgICBCdW5kbGUgYXJncyA9IGdldEFyZ3VtZW50cygpOwotICAgICAgICAgICAgaWYgKGFyZ3MgIT0gbnVsbCkgewotICAgICAgICAgICAgICAgIG1TZWxlY3RvciA9IE1lZGlhUm91dGVTZWxlY3Rvci5mcm9tQnVuZGxlKGFyZ3MuZ2V0QnVuZGxlKEFSR1VNRU5UX1NFTEVDVE9SKSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAobVNlbGVjdG9yID09IG51bGwpIHsKLSAgICAgICAgICAgICAgICBtU2VsZWN0b3IgPSBNZWRpYVJvdXRlU2VsZWN0b3IuRU1QVFk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBDYWxsZWQgdG8gY3JlYXRlIHRoZSB7QGxpbmsgYW5kcm9pZC5zdXBwb3J0LnY3Lm1lZGlhLk1lZGlhUm91dGVyLkNhbGxiYWNrIGNhbGxiYWNrfQotICAgICAqIHRoYXQgd2lsbCBiZSByZWdpc3RlcmVkLgotICAgICAqIDxwPgotICAgICAqIFRoZSBkZWZhdWx0IGNhbGxiYWNrIGRvZXMgbm90aGluZy4gIFRoZSBhcHBsaWNhdGlvbiBtYXkgb3ZlcnJpZGUgdGhpcyBtZXRob2QgdG8KLSAgICAgKiBzdXBwbHkgaXRzIG93biBjYWxsYmFjay4KLSAgICAgKiA8L3A+Ci0gICAgICoKLSAgICAgKiBAcmV0dXJuIFRoZSBuZXcgY2FsbGJhY2ssIG9yIG51bGwgaWYgbm8gY2FsbGJhY2sgc2hvdWxkIGJlIHJlZ2lzdGVyZWQuCi0gICAgICovCi0gICAgcHVibGljIE1lZGlhUm91dGVyLkNhbGxiYWNrIG9uQ3JlYXRlQ2FsbGJhY2soKSB7Ci0gICAgICAgIHJldHVybiBuZXcgTWVkaWFSb3V0ZXIuQ2FsbGJhY2soKSB7IH07Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogQ2FsbGVkIHRvIHByZXBhcmUgdGhlIGNhbGxiYWNrIGZsYWdzIHRoYXQgd2lsbCBiZSB1c2VkIHdoZW4gdGhlCi0gICAgICoge0BsaW5rIGFuZHJvaWQuc3VwcG9ydC52Ny5tZWRpYS5NZWRpYVJvdXRlci5DYWxsYmFjayBjYWxsYmFja30gaXMgcmVnaXN0ZXJlZC4KLSAgICAgKiA8cD4KLSAgICAgKiBUaGUgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIHtAbGluayBNZWRpYVJvdXRlciNDQUxMQkFDS19GTEFHX1JFUVVFU1RfRElTQ09WRVJZfS4KLSAgICAgKiA8L3A+Ci0gICAgICoKLSAgICAgKiBAcmV0dXJuIFRoZSBkZXNpcmVkIGNhbGxiYWNrIGZsYWdzLgotICAgICAqLwotICAgIHB1YmxpYyBpbnQgb25QcmVwYXJlQ2FsbGJhY2tGbGFncygpIHsKLSAgICAgICAgcmV0dXJuIE1lZGlhUm91dGVyLkNBTExCQUNLX0ZMQUdfUkVRVUVTVF9ESVNDT1ZFUlk7Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIHZvaWQgb25TdGFydCgpIHsKLSAgICAgICAgc3VwZXIub25TdGFydCgpOwotCi0gICAgICAgIGVuc3VyZVJvdXRlU2VsZWN0b3IoKTsKLSAgICAgICAgZW5zdXJlUm91dGVyKCk7Ci0gICAgICAgIG1DYWxsYmFjayA9IG9uQ3JlYXRlQ2FsbGJhY2soKTsKLSAgICAgICAgaWYgKG1DYWxsYmFjayAhPSBudWxsKSB7Ci0gICAgICAgICAgICBtUm91dGVyLmFkZENhbGxiYWNrKG1TZWxlY3RvciwgbUNhbGxiYWNrLCBvblByZXBhcmVDYWxsYmFja0ZsYWdzKCkpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIHZvaWQgb25TdG9wKCkgewotICAgICAgICBpZiAobUNhbGxiYWNrICE9IG51bGwpIHsKLSAgICAgICAgICAgIG1Sb3V0ZXIucmVtb3ZlQ2FsbGJhY2sobUNhbGxiYWNrKTsKLSAgICAgICAgICAgIG1DYWxsYmFjayA9IG51bGw7Ci0gICAgICAgIH0KLQotICAgICAgICBzdXBlci5vblN0b3AoKTsKLSAgICB9Ci19CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9NZWRpYUNvbXBvbmVudHMvc3JjL2NvbS9hbmRyb2lkL3N1cHBvcnQvbWVkaWFyb3V0ZXIvYXBwL01lZGlhUm91dGVFeHBhbmRDb2xsYXBzZUJ1dHRvbi5qYXZhIGIvcGFja2FnZXMvTWVkaWFDb21wb25lbnRzL3NyYy9jb20vYW5kcm9pZC9zdXBwb3J0L21lZGlhcm91dGVyL2FwcC9NZWRpYVJvdXRlRXhwYW5kQ29sbGFwc2VCdXR0b24uamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNmEwYTk1YS4uMDAwMDAwMAotLS0gYS9wYWNrYWdlcy9NZWRpYUNvbXBvbmVudHMvc3JjL2NvbS9hbmRyb2lkL3N1cHBvcnQvbWVkaWFyb3V0ZXIvYXBwL01lZGlhUm91dGVFeHBhbmRDb2xsYXBzZUJ1dHRvbi5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsOTYgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAyMDE4IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKLSAqCi0gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKLSAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KLSAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotICoKLSAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0gKgotICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQotICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKLSAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgotICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAotICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCi0gKi8KLQotcGFja2FnZSBjb20uYW5kcm9pZC5zdXBwb3J0Lm1lZGlhcm91dGVyLmFwcDsKLQotaW1wb3J0IGFuZHJvaWQuY29udGVudC5Db250ZXh0OwotaW1wb3J0IGFuZHJvaWQuZ3JhcGhpY3MuQ29sb3JGaWx0ZXI7Ci1pbXBvcnQgYW5kcm9pZC5ncmFwaGljcy5Qb3J0ZXJEdWZmOwotaW1wb3J0IGFuZHJvaWQuZ3JhcGhpY3MuUG9ydGVyRHVmZkNvbG9yRmlsdGVyOwotaW1wb3J0IGFuZHJvaWQuZ3JhcGhpY3MuZHJhd2FibGUuQW5pbWF0aW9uRHJhd2FibGU7Ci1pbXBvcnQgYW5kcm9pZC5zdXBwb3J0LnY0LmNvbnRlbnQuQ29udGV4dENvbXBhdDsKLWltcG9ydCBhbmRyb2lkLnV0aWwuQXR0cmlidXRlU2V0OwotaW1wb3J0IGFuZHJvaWQudmlldy5WaWV3OwotaW1wb3J0IGFuZHJvaWQud2lkZ2V0LkltYWdlQnV0dG9uOwotCi1pbXBvcnQgY29tLmFuZHJvaWQubWVkaWEudXBkYXRlLkFwaUhlbHBlcjsKLWltcG9ydCBjb20uYW5kcm9pZC5tZWRpYS51cGRhdGUuUjsKLQotLyoqCi0gKiBDaGV2cm9uL0NhcmV0IGJ1dHRvbiB0byBleHBhbmQvY29sbGFwc2UgZ3JvdXAgdm9sdW1lIGxpc3Qgd2l0aCBhbmltYXRpb24uCi0gKi8KLXB1YmxpYyBjbGFzcyBNZWRpYVJvdXRlRXhwYW5kQ29sbGFwc2VCdXR0b24gZXh0ZW5kcyBJbWFnZUJ1dHRvbiB7Ci0gICAgZmluYWwgQW5pbWF0aW9uRHJhd2FibGUgbUV4cGFuZEFuaW1hdGlvbkRyYXdhYmxlOwotICAgIGZpbmFsIEFuaW1hdGlvbkRyYXdhYmxlIG1Db2xsYXBzZUFuaW1hdGlvbkRyYXdhYmxlOwotICAgIGZpbmFsIFN0cmluZyBtRXhwYW5kR3JvdXBEZXNjcmlwdGlvbjsKLSAgICBmaW5hbCBTdHJpbmcgbUNvbGxhcHNlR3JvdXBEZXNjcmlwdGlvbjsKLSAgICBib29sZWFuIG1Jc0dyb3VwRXhwYW5kZWQ7Ci0gICAgT25DbGlja0xpc3RlbmVyIG1MaXN0ZW5lcjsKLQotICAgIHB1YmxpYyBNZWRpYVJvdXRlRXhwYW5kQ29sbGFwc2VCdXR0b24oQ29udGV4dCBjb250ZXh0KSB7Ci0gICAgICAgIHRoaXMoY29udGV4dCwgbnVsbCk7Ci0gICAgfQotCi0gICAgcHVibGljIE1lZGlhUm91dGVFeHBhbmRDb2xsYXBzZUJ1dHRvbihDb250ZXh0IGNvbnRleHQsIEF0dHJpYnV0ZVNldCBhdHRycykgewotICAgICAgICB0aGlzKGNvbnRleHQsIGF0dHJzLCAwKTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgTWVkaWFSb3V0ZUV4cGFuZENvbGxhcHNlQnV0dG9uKENvbnRleHQgY29udGV4dCwgQXR0cmlidXRlU2V0IGF0dHJzLCBpbnQgZGVmU3R5bGVBdHRyKSB7Ci0gICAgICAgIHN1cGVyKGNvbnRleHQsIGF0dHJzLCBkZWZTdHlsZUF0dHIpOwotICAgICAgICBtRXhwYW5kQW5pbWF0aW9uRHJhd2FibGUgPSAoQW5pbWF0aW9uRHJhd2FibGUpCi0gICAgICAgICAgICAgICAgQXBpSGVscGVyLmdldExpYlJlc291cmNlcyhjb250ZXh0KS5nZXREcmF3YWJsZShSLmRyYXdhYmxlLm1yX2dyb3VwX2V4cGFuZCk7Ci0gICAgICAgIG1Db2xsYXBzZUFuaW1hdGlvbkRyYXdhYmxlID0gKEFuaW1hdGlvbkRyYXdhYmxlKQotICAgICAgICAgICAgICAgIEFwaUhlbHBlci5nZXRMaWJSZXNvdXJjZXMoY29udGV4dCkuZ2V0RHJhd2FibGUoUi5kcmF3YWJsZS5tcl9ncm91cF9jb2xsYXBzZSk7Ci0KLSAgICAgICAgQ29sb3JGaWx0ZXIgZmlsdGVyID0gbmV3IFBvcnRlckR1ZmZDb2xvckZpbHRlcigKLSAgICAgICAgICAgICAgICBNZWRpYVJvdXRlclRoZW1lSGVscGVyLmdldENvbnRyb2xsZXJDb2xvcihjb250ZXh0LCBkZWZTdHlsZUF0dHIpLAotICAgICAgICAgICAgICAgIFBvcnRlckR1ZmYuTW9kZS5TUkNfSU4pOwotICAgICAgICBtRXhwYW5kQW5pbWF0aW9uRHJhd2FibGUuc2V0Q29sb3JGaWx0ZXIoZmlsdGVyKTsKLSAgICAgICAgbUNvbGxhcHNlQW5pbWF0aW9uRHJhd2FibGUuc2V0Q29sb3JGaWx0ZXIoZmlsdGVyKTsKLQotICAgICAgICBtRXhwYW5kR3JvdXBEZXNjcmlwdGlvbiA9Ci0gICAgICAgICAgICAgICAgQXBpSGVscGVyLmdldExpYlJlc291cmNlcyhjb250ZXh0KS5nZXRTdHJpbmcoUi5zdHJpbmcubXJfY29udHJvbGxlcl9leHBhbmRfZ3JvdXApOwotICAgICAgICBtQ29sbGFwc2VHcm91cERlc2NyaXB0aW9uID0KLSAgICAgICAgICAgICAgICBBcGlIZWxwZXIuZ2V0TGliUmVzb3VyY2VzKGNvbnRleHQpLmdldFN0cmluZyhSLnN0cmluZy5tcl9jb250cm9sbGVyX2NvbGxhcHNlX2dyb3VwKTsKLQotICAgICAgICBzZXRJbWFnZURyYXdhYmxlKG1FeHBhbmRBbmltYXRpb25EcmF3YWJsZS5nZXRGcmFtZSgwKSk7Ci0gICAgICAgIHNldENvbnRlbnREZXNjcmlwdGlvbihtRXhwYW5kR3JvdXBEZXNjcmlwdGlvbik7Ci0KLSAgICAgICAgc3VwZXIuc2V0T25DbGlja0xpc3RlbmVyKG5ldyBPbkNsaWNrTGlzdGVuZXIoKSB7Ci0gICAgICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgICAgIHB1YmxpYyB2b2lkIG9uQ2xpY2soVmlldyB2aWV3KSB7Ci0gICAgICAgICAgICAgICAgbUlzR3JvdXBFeHBhbmRlZCA9ICFtSXNHcm91cEV4cGFuZGVkOwotICAgICAgICAgICAgICAgIGlmIChtSXNHcm91cEV4cGFuZGVkKSB7Ci0gICAgICAgICAgICAgICAgICAgIHNldEltYWdlRHJhd2FibGUobUV4cGFuZEFuaW1hdGlvbkRyYXdhYmxlKTsKLSAgICAgICAgICAgICAgICAgICAgbUV4cGFuZEFuaW1hdGlvbkRyYXdhYmxlLnN0YXJ0KCk7Ci0gICAgICAgICAgICAgICAgICAgIHNldENvbnRlbnREZXNjcmlwdGlvbihtQ29sbGFwc2VHcm91cERlc2NyaXB0aW9uKTsKLSAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICBzZXRJbWFnZURyYXdhYmxlKG1Db2xsYXBzZUFuaW1hdGlvbkRyYXdhYmxlKTsKLSAgICAgICAgICAgICAgICAgICAgbUNvbGxhcHNlQW5pbWF0aW9uRHJhd2FibGUuc3RhcnQoKTsKLSAgICAgICAgICAgICAgICAgICAgc2V0Q29udGVudERlc2NyaXB0aW9uKG1FeHBhbmRHcm91cERlc2NyaXB0aW9uKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgaWYgKG1MaXN0ZW5lciAhPSBudWxsKSB7Ci0gICAgICAgICAgICAgICAgICAgIG1MaXN0ZW5lci5vbkNsaWNrKHZpZXcpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgfSk7Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIHZvaWQgc2V0T25DbGlja0xpc3RlbmVyKE9uQ2xpY2tMaXN0ZW5lciBsaXN0ZW5lcikgewotICAgICAgICBtTGlzdGVuZXIgPSBsaXN0ZW5lcjsKLSAgICB9Ci19CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9NZWRpYUNvbXBvbmVudHMvc3JjL2NvbS9hbmRyb2lkL3N1cHBvcnQvbWVkaWFyb3V0ZXIvYXBwL01lZGlhUm91dGVWb2x1bWVTbGlkZXIuamF2YSBiL3BhY2thZ2VzL01lZGlhQ29tcG9uZW50cy9zcmMvY29tL2FuZHJvaWQvc3VwcG9ydC9tZWRpYXJvdXRlci9hcHAvTWVkaWFSb3V0ZVZvbHVtZVNsaWRlci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkMDVkMjBlLi4wMDAwMDAwCi0tLSBhL3BhY2thZ2VzL01lZGlhQ29tcG9uZW50cy9zcmMvY29tL2FuZHJvaWQvc3VwcG9ydC9tZWRpYXJvdXRlci9hcHAvTWVkaWFSb3V0ZVZvbHVtZVNsaWRlci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTAyICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgMjAxOCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0Ci0gKgotICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7Ci0gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCi0gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLSAqCi0gKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotICoKLSAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKLSAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCi0gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KLSAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKLSAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgotICovCi0KLXBhY2thZ2UgY29tLmFuZHJvaWQuc3VwcG9ydC5tZWRpYXJvdXRlci5hcHA7Ci0KLWltcG9ydCBhbmRyb2lkLmNvbnRlbnQuQ29udGV4dDsKLWltcG9ydCBhbmRyb2lkLmdyYXBoaWNzLkNvbG9yOwotaW1wb3J0IGFuZHJvaWQuZ3JhcGhpY3MuUG9ydGVyRHVmZjsKLWltcG9ydCBhbmRyb2lkLmdyYXBoaWNzLmRyYXdhYmxlLkRyYXdhYmxlOwotaW1wb3J0IGFuZHJvaWQudXRpbC5BdHRyaWJ1dGVTZXQ7Ci1pbXBvcnQgYW5kcm9pZC51dGlsLkxvZzsKLWltcG9ydCBhbmRyb2lkLndpZGdldC5TZWVrQmFyOwotCi0vKioKLSAqIFZvbHVtZSBzbGlkZXIgd2l0aCBzaG93aW5nLCBoaWRpbmcsIGFuZCBhcHBseWluZyBhbHBoYSBzdXBwb3J0cyB0byB0aGUgdGh1bWIuCi0gKi8KLXB1YmxpYyBjbGFzcyBNZWRpYVJvdXRlVm9sdW1lU2xpZGVyIGV4dGVuZHMgU2Vla0JhciB7Ci0gICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFRBRyA9ICJNZWRpYVJvdXRlVm9sdW1lU2xpZGVyIjsKLQotICAgIHByaXZhdGUgZmluYWwgZmxvYXQgbURpc2FibGVkQWxwaGE7Ci0KLSAgICBwcml2YXRlIGJvb2xlYW4gbUhpZGVUaHVtYjsKLSAgICBwcml2YXRlIERyYXdhYmxlIG1UaHVtYjsKLSAgICBwcml2YXRlIGludCBtQ29sb3I7Ci0KLSAgICBwdWJsaWMgTWVkaWFSb3V0ZVZvbHVtZVNsaWRlcihDb250ZXh0IGNvbnRleHQpIHsKLSAgICAgICAgdGhpcyhjb250ZXh0LCBudWxsKTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgTWVkaWFSb3V0ZVZvbHVtZVNsaWRlcihDb250ZXh0IGNvbnRleHQsIEF0dHJpYnV0ZVNldCBhdHRycykgewotICAgICAgICBzdXBlcihjb250ZXh0LCBhdHRycyk7Ci0gICAgICAgIG1EaXNhYmxlZEFscGhhID0gTWVkaWFSb3V0ZXJUaGVtZUhlbHBlci5nZXREaXNhYmxlZEFscGhhKGNvbnRleHQpOwotICAgIH0KLQotICAgIHB1YmxpYyBNZWRpYVJvdXRlVm9sdW1lU2xpZGVyKENvbnRleHQgY29udGV4dCwgQXR0cmlidXRlU2V0IGF0dHJzLCBpbnQgZGVmU3R5bGVBdHRyKSB7Ci0gICAgICAgIHN1cGVyKGNvbnRleHQsIGF0dHJzLCBkZWZTdHlsZUF0dHIpOwotICAgICAgICBtRGlzYWJsZWRBbHBoYSA9IE1lZGlhUm91dGVyVGhlbWVIZWxwZXIuZ2V0RGlzYWJsZWRBbHBoYShjb250ZXh0KTsKLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwcm90ZWN0ZWQgdm9pZCBkcmF3YWJsZVN0YXRlQ2hhbmdlZCgpIHsKLSAgICAgICAgc3VwZXIuZHJhd2FibGVTdGF0ZUNoYW5nZWQoKTsKLSAgICAgICAgaW50IGFscGhhID0gaXNFbmFibGVkKCkgPyAweEZGIDogKGludCkgKDB4RkYgKiBtRGlzYWJsZWRBbHBoYSk7Ci0KLSAgICAgICAgLy8gVGhlIHRodW1iIGRyYXdhYmxlIGlzIGEgY29sbGVjdGlvbiBvZiBkcmF3YWJsZXMgYW5kIGl0cyBjdXJyZW50IGRyYXdhYmxlcyBhcmUgY2hhbmdlZCBwZXIKLSAgICAgICAgLy8gc3RhdGUuIEFwcGx5IHRoZSBjb2xvciBmaWx0ZXIgYW5kIGFscGhhIG9uIGV2ZXJ5IHN0YXRlIGNoYW5nZS4KLSAgICAgICAgaWYgKG1UaHVtYiAhPSBudWxsKSB7Ci0gICAgICAgICAgICBtVGh1bWIuc2V0Q29sb3JGaWx0ZXIobUNvbG9yLCBQb3J0ZXJEdWZmLk1vZGUuU1JDX0lOKTsKLSAgICAgICAgICAgIG1UaHVtYi5zZXRBbHBoYShhbHBoYSk7Ci0gICAgICAgIH0KLQotICAgICAgICBnZXRQcm9ncmVzc0RyYXdhYmxlKCkuc2V0Q29sb3JGaWx0ZXIobUNvbG9yLCBQb3J0ZXJEdWZmLk1vZGUuU1JDX0lOKTsKLSAgICAgICAgZ2V0UHJvZ3Jlc3NEcmF3YWJsZSgpLnNldEFscGhhKGFscGhhKTsKLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgdm9pZCBzZXRUaHVtYihEcmF3YWJsZSB0aHVtYikgewotICAgICAgICBtVGh1bWIgPSB0aHVtYjsKLSAgICAgICAgc3VwZXIuc2V0VGh1bWIobUhpZGVUaHVtYiA/IG51bGwgOiBtVGh1bWIpOwotICAgIH0KLQotICAgIC8qKgotICAgICAqIFNldHMgd2hldGhlciB0byBzaG93IG9yIGhpZGUgdGh1bWIuCi0gICAgICovCi0gICAgcHVibGljIHZvaWQgc2V0SGlkZVRodW1iKGJvb2xlYW4gaGlkZVRodW1iKSB7Ci0gICAgICAgIGlmIChtSGlkZVRodW1iID09IGhpZGVUaHVtYikgewotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgICAgIG1IaWRlVGh1bWIgPSBoaWRlVGh1bWI7Ci0gICAgICAgIHN1cGVyLnNldFRodW1iKG1IaWRlVGh1bWIgPyBudWxsIDogbVRodW1iKTsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBTZXRzIHRoZSB2b2x1bWUgc2xpZGVyIGNvbG9yLiBUaGUgY2hhbmdlIHRha2VzIGVmZmVjdCBuZXh0IHRpbWUgZHJhd2FibGUgc3RhdGUgaXMgY2hhbmdlZC4KLSAgICAgKiA8cD4KLSAgICAgKiBUaGUgY29sb3IgY2Fubm90IGJlIHRyYW5zbHVjZW50LCBvdGhlcndpc2UgdGhlIHVuZGVybHlpbmcgcHJvZ3Jlc3MgYmFyIHdpbGwgYmUgc2VlbiB0aHJvdWdoCi0gICAgICogdGhlIHRodW1iLgotICAgICAqIDwvcD4KLSAgICAgKi8KLSAgICBwdWJsaWMgdm9pZCBzZXRDb2xvcihpbnQgY29sb3IpIHsKLSAgICAgICAgaWYgKG1Db2xvciA9PSBjb2xvcikgewotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgICAgIGlmIChDb2xvci5hbHBoYShjb2xvcikgIT0gMHhGRikgewotICAgICAgICAgICAgTG9nLmUoVEFHLCAiVm9sdW1lIHNsaWRlciBjb2xvciBjYW5ub3QgYmUgdHJhbnNsdWNlbnQ6ICMiICsgSW50ZWdlci50b0hleFN0cmluZyhjb2xvcikpOwotICAgICAgICB9Ci0gICAgICAgIG1Db2xvciA9IGNvbG9yOwotICAgIH0KLX0KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL01lZGlhQ29tcG9uZW50cy9zcmMvY29tL2FuZHJvaWQvc3VwcG9ydC9tZWRpYXJvdXRlci9hcHAvTWVkaWFSb3V0ZXJUaGVtZUhlbHBlci5qYXZhIGIvcGFja2FnZXMvTWVkaWFDb21wb25lbnRzL3NyYy9jb20vYW5kcm9pZC9zdXBwb3J0L21lZGlhcm91dGVyL2FwcC9NZWRpYVJvdXRlclRoZW1lSGVscGVyLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDYzZjA0MmYuLjAwMDAwMDAKLS0tIGEvcGFja2FnZXMvTWVkaWFDb21wb25lbnRzL3NyYy9jb20vYW5kcm9pZC9zdXBwb3J0L21lZGlhcm91dGVyL2FwcC9NZWRpYVJvdXRlclRoZW1lSGVscGVyLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyMTIgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAyMDE4IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKLSAqCi0gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKLSAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KLSAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotICoKLSAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0gKgotICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQotICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKLSAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgotICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAotICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCi0gKi8KLQotcGFja2FnZSBjb20uYW5kcm9pZC5zdXBwb3J0Lm1lZGlhcm91dGVyLmFwcDsKLQotaW1wb3J0IGFuZHJvaWQuY29udGVudC5Db250ZXh0OwotaW1wb3J0IGFuZHJvaWQuY29udGVudC5yZXMuVHlwZWRBcnJheTsKLWltcG9ydCBhbmRyb2lkLmdyYXBoaWNzLkNvbG9yOwotaW1wb3J0IGFuZHJvaWQuc3VwcG9ydC5hbm5vdGF0aW9uLkludERlZjsKLWltcG9ydCBhbmRyb2lkLnN1cHBvcnQudjQuZ3JhcGhpY3MuQ29sb3JVdGlsczsKLWltcG9ydCBhbmRyb2lkLnV0aWwuVHlwZWRWYWx1ZTsKLWltcG9ydCBhbmRyb2lkLnZpZXcuQ29udGV4dFRoZW1lV3JhcHBlcjsKLWltcG9ydCBhbmRyb2lkLnZpZXcuVmlldzsKLQotaW1wb3J0IGNvbS5hbmRyb2lkLm1lZGlhLnVwZGF0ZS5SOwotCi1pbXBvcnQgamF2YS5sYW5nLmFubm90YXRpb24uUmV0ZW50aW9uOwotaW1wb3J0IGphdmEubGFuZy5hbm5vdGF0aW9uLlJldGVudGlvblBvbGljeTsKLQotZmluYWwgY2xhc3MgTWVkaWFSb3V0ZXJUaGVtZUhlbHBlciB7Ci0gICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgZmxvYXQgTUlOX0NPTlRSQVNUID0gMy4wZjsKLQotICAgIEBJbnREZWYoe0NPTE9SX0RBUktfT05fTElHSFRfQkFDS0dST1VORCwgQ09MT1JfV0hJVEVfT05fREFSS19CQUNLR1JPVU5EfSkKLSAgICBAUmV0ZW50aW9uKFJldGVudGlvblBvbGljeS5TT1VSQ0UpCi0gICAgcHJpdmF0ZSBAaW50ZXJmYWNlIENvbnRyb2xsZXJDb2xvclR5cGUge30KLQotICAgIHN0YXRpYyBmaW5hbCBpbnQgQ09MT1JfREFSS19PTl9MSUdIVF9CQUNLR1JPVU5EID0gMHhERTAwMDAwMDsgLyogT3BhY2l0eSBvZiA4NyUgKi8KLSAgICBzdGF0aWMgZmluYWwgaW50IENPTE9SX1dISVRFX09OX0RBUktfQkFDS0dST1VORCA9IENvbG9yLldISVRFOwotCi0gICAgcHJpdmF0ZSBNZWRpYVJvdXRlclRoZW1lSGVscGVyKCkgewotICAgIH0KLQotICAgIHN0YXRpYyBDb250ZXh0IGNyZWF0ZVRoZW1lZEJ1dHRvbkNvbnRleHQoQ29udGV4dCBjb250ZXh0KSB7Ci0gICAgICAgIC8vIEFwcGx5IGJhc2UgTWVkaWEgUm91dGVyIHRoZW1lLgotICAgICAgICBjb250ZXh0ID0gbmV3IENvbnRleHRUaGVtZVdyYXBwZXIoY29udGV4dCwgZ2V0Um91dGVyVGhlbWVJZChjb250ZXh0KSk7Ci0KLSAgICAgICAgLy8gQXBwbHkgY3VzdG9tIE1lZGlhIFJvdXRlciB0aGVtZS4KLSAgICAgICAgaW50IHN0eWxlID0gZ2V0VGhlbWVSZXNvdXJjZShjb250ZXh0LCBSLmF0dHIubWVkaWFSb3V0ZVRoZW1lKTsKLSAgICAgICAgaWYgKHN0eWxlICE9IDApIHsKLSAgICAgICAgICAgIGNvbnRleHQgPSBuZXcgQ29udGV4dFRoZW1lV3JhcHBlcihjb250ZXh0LCBzdHlsZSk7Ci0gICAgICAgIH0KLQotICAgICAgICByZXR1cm4gY29udGV4dDsKLSAgICB9Ci0KLSAgICAvKgotICAgICAqIFRoZSBmb2xsb3dpbmcgdHdvIG1ldGhvZHMgYXJlIHRvIGJlIHVzZWQgaW4gY29uanVuY3Rpb24uIFRoZXkgc2hvdWxkIGJlIHVzZWQgdG8gcHJlcGFyZQotICAgICAqIHRoZSBjb250ZXh0IGFuZCB0aGVtZSBmb3IgYSBzdXBlciBjbGFzcyBjb25zdHJ1Y3RvciAodGhlIGxhdHRlciBtZXRob2QgcmVsaWVzIG9uIHRoZQotICAgICAqIGZvcm1lciBtZXRob2QgdG8gcHJvcGVybHkgcHJlcGFyZSB0aGUgY29udGV4dCk6Ci0gICAgICogICBzdXBlcihjb250ZXh0ID0gY3JlYXRlVGhlbWVkRGlhbG9nQ29udGV4dChjb250ZXh0LCB0aGVtZSksCi0gICAgICogICAgICAgICAgIGNyZWF0ZVRoZW1lZERpYWxvZ1N0eWxlKGNvbnRleHQpKTsKLSAgICAgKgotICAgICAqIEl0IHdpbGwgYXBwbHkgdGhlbWUgaW4gdGhlIGZvbGxvd2luZyBvcmRlciAoc3R5bGUgbG9va3VwcyB3aWxsIGJlIGRvbmUgaW4gcmV2ZXJzZSk6Ci0gICAgICogICAxKSBDdXJyZW50IHRoZW1lCi0gICAgICogICAyKSBTdXBwbGllZCB0aGVtZQotICAgICAqICAgMykgQmFzZSBNZWRpYSBSb3V0ZXIgdGhlbWUKLSAgICAgKiAgIDQpIEN1c3RvbSBNZWRpYSBSb3V0ZXIgdGhlbWUsIGlmIHByb3ZpZGVkCi0gICAgICovCi0gICAgc3RhdGljIENvbnRleHQgY3JlYXRlVGhlbWVkRGlhbG9nQ29udGV4dChDb250ZXh0IGNvbnRleHQsIGludCB0aGVtZSwgYm9vbGVhbiBhbGVydERpYWxvZykgewotICAgICAgICAvLyAxKSBDdXJyZW50IHRoZW1lIGlzIGFscmVhZHkgYXBwbGllZCB0byB0aGUgY29udGV4dAotCi0gICAgICAgIC8vIDIpIElmIG5vIHRoZW1lIGlzIHN1cHBsaWVkLCBsb29rIGl0IHVwIGZyb20gdGhlIGNvbnRleHQgKGRpYWxvZ1RoZW1lL2FsZXJ0RGlhbG9nVGhlbWUpCi0gICAgICAgIGlmICh0aGVtZSA9PSAwKSB7Ci0gICAgICAgICAgICB0aGVtZSA9IGdldFRoZW1lUmVzb3VyY2UoY29udGV4dCwKLSAgICAgICAgICAgICAgICAgICAgIWFsZXJ0RGlhbG9nID8gYW5kcm9pZC5SLmF0dHIuZGlhbG9nVGhlbWUgOiBhbmRyb2lkLlIuYXR0ci5hbGVydERpYWxvZ1RoZW1lKTsKLSAgICAgICAgfQotICAgICAgICAvLyAgICBBcHBseSBpdAotICAgICAgICBjb250ZXh0ID0gbmV3IENvbnRleHRUaGVtZVdyYXBwZXIoY29udGV4dCwgdGhlbWUpOwotCi0gICAgICAgIC8vIDMpIElmIGEgY3VzdG9tIE1lZGlhIFJvdXRlciB0aGVtZSBpcyBwcm92aWRlZCB0aGVuIGFwcGx5IHRoZSBiYXNlIHRoZW1lCi0gICAgICAgIGlmIChnZXRUaGVtZVJlc291cmNlKGNvbnRleHQsIFIuYXR0ci5tZWRpYVJvdXRlVGhlbWUpICE9IDApIHsKLSAgICAgICAgICAgIGNvbnRleHQgPSBuZXcgQ29udGV4dFRoZW1lV3JhcHBlcihjb250ZXh0LCBnZXRSb3V0ZXJUaGVtZUlkKGNvbnRleHQpKTsKLSAgICAgICAgfQotCi0gICAgICAgIHJldHVybiBjb250ZXh0OwotICAgIH0KLSAgICAvLyBUaGlzIG1ldGhvZCBzaG91bGQgYmUgdXNlZCBpbiBjb25qdW5jdGlvbiB3aXRoIHRoZSBwcmV2aW91cyBtZXRob2QuCi0gICAgc3RhdGljIGludCBjcmVhdGVUaGVtZWREaWFsb2dTdHlsZShDb250ZXh0IGNvbnRleHQpIHsKLSAgICAgICAgLy8gNCkgQXBwbHkgdGhlIGN1c3RvbSBNZWRpYSBSb3V0ZXIgdGhlbWUKLSAgICAgICAgaW50IHRoZW1lID0gZ2V0VGhlbWVSZXNvdXJjZShjb250ZXh0LCBSLmF0dHIubWVkaWFSb3V0ZVRoZW1lKTsKLSAgICAgICAgaWYgKHRoZW1lID09IDApIHsKLSAgICAgICAgICAgIC8vIDMpIE5vIGN1c3RvbSBNZWRpYVJvdXRlciB0aGVtZSB3YXMgcHJvdmlkZWQgc28gYXBwbHkgdGhlIGJhc2UgdGhlbWUgaW5zdGVhZAotICAgICAgICAgICAgdGhlbWUgPSBnZXRSb3V0ZXJUaGVtZUlkKGNvbnRleHQpOwotICAgICAgICB9Ci0KLSAgICAgICAgcmV0dXJuIHRoZW1lOwotICAgIH0KLSAgICAvLyBFTkQuIFByZXZpb3VzIHR3byBtZXRob2RzIHNob3VsZCBiZSB1c2VkIGluIGNvbmp1bmN0aW9uLgotCi0gICAgc3RhdGljIGludCBnZXRUaGVtZVJlc291cmNlKENvbnRleHQgY29udGV4dCwgaW50IGF0dHIpIHsKLSAgICAgICAgVHlwZWRWYWx1ZSB2YWx1ZSA9IG5ldyBUeXBlZFZhbHVlKCk7Ci0gICAgICAgIHJldHVybiBjb250ZXh0LmdldFRoZW1lKCkucmVzb2x2ZUF0dHJpYnV0ZShhdHRyLCB2YWx1ZSwgdHJ1ZSkgPyB2YWx1ZS5yZXNvdXJjZUlkIDogMDsKLSAgICB9Ci0KLSAgICBzdGF0aWMgZmxvYXQgZ2V0RGlzYWJsZWRBbHBoYShDb250ZXh0IGNvbnRleHQpIHsKLSAgICAgICAgVHlwZWRWYWx1ZSB2YWx1ZSA9IG5ldyBUeXBlZFZhbHVlKCk7Ci0gICAgICAgIHJldHVybiBjb250ZXh0LmdldFRoZW1lKCkucmVzb2x2ZUF0dHJpYnV0ZShhbmRyb2lkLlIuYXR0ci5kaXNhYmxlZEFscGhhLCB2YWx1ZSwgdHJ1ZSkKLSAgICAgICAgICAgICAgICA/IHZhbHVlLmdldEZsb2F0KCkgOiAwLjVmOwotICAgIH0KLQotICAgIHN0YXRpYyBAQ29udHJvbGxlckNvbG9yVHlwZSBpbnQgZ2V0Q29udHJvbGxlckNvbG9yKENvbnRleHQgY29udGV4dCwgaW50IHN0eWxlKSB7Ci0gICAgICAgIGludCBwcmltYXJ5Q29sb3IgPSBnZXRUaGVtZUNvbG9yKGNvbnRleHQsIHN0eWxlLCBhbmRyb2lkLlIuYXR0ci5jb2xvclByaW1hcnkpOwotICAgICAgICBpZiAocHJpbWFyeUNvbG9yID09IDApIHsKLSAgICAgICAgICAgIHByaW1hcnlDb2xvciA9IGdldFRoZW1lQ29sb3IoY29udGV4dCwgc3R5bGUsIGFuZHJvaWQuUi5hdHRyLmNvbG9yUHJpbWFyeSk7Ci0gICAgICAgICAgICBpZiAocHJpbWFyeUNvbG9yID09IDApIHsKLSAgICAgICAgICAgICAgICBwcmltYXJ5Q29sb3IgPSAweEZGMDAwMDAwOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIGlmIChDb2xvclV0aWxzLmNhbGN1bGF0ZUNvbnRyYXN0KENPTE9SX1dISVRFX09OX0RBUktfQkFDS0dST1VORCwgcHJpbWFyeUNvbG9yKQotICAgICAgICAgICAgICAgID49IE1JTl9DT05UUkFTVCkgewotICAgICAgICAgICAgcmV0dXJuIENPTE9SX1dISVRFX09OX0RBUktfQkFDS0dST1VORDsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gQ09MT1JfREFSS19PTl9MSUdIVF9CQUNLR1JPVU5EOwotICAgIH0KLQotICAgIHN0YXRpYyBpbnQgZ2V0QnV0dG9uVGV4dENvbG9yKENvbnRleHQgY29udGV4dCkgewotICAgICAgICBpbnQgcHJpbWFyeUNvbG9yID0gZ2V0VGhlbWVDb2xvcihjb250ZXh0LCAwLCBhbmRyb2lkLlIuYXR0ci5jb2xvclByaW1hcnkpOwotICAgICAgICBpbnQgYmFja2dyb3VuZENvbG9yID0gZ2V0VGhlbWVDb2xvcihjb250ZXh0LCAwLCBhbmRyb2lkLlIuYXR0ci5jb2xvckJhY2tncm91bmQpOwotCi0gICAgICAgIGlmIChDb2xvclV0aWxzLmNhbGN1bGF0ZUNvbnRyYXN0KHByaW1hcnlDb2xvciwgYmFja2dyb3VuZENvbG9yKSA8IE1JTl9DT05UUkFTVCkgewotICAgICAgICAgICAgLy8gRGVmYXVsdCB0byBjb2xvckFjY2VudCBpZiB0aGUgY29udHJhc3QgcmF0aW8gaXMgbG93LgotICAgICAgICAgICAgcmV0dXJuIGdldFRoZW1lQ29sb3IoY29udGV4dCwgMCwgYW5kcm9pZC5SLmF0dHIuY29sb3JBY2NlbnQpOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiBwcmltYXJ5Q29sb3I7Ci0gICAgfQotCi0gICAgc3RhdGljIHZvaWQgc2V0TWVkaWFDb250cm9sc0JhY2tncm91bmRDb2xvcigKLSAgICAgICAgICAgIENvbnRleHQgY29udGV4dCwgVmlldyBtYWluQ29udHJvbHMsIFZpZXcgZ3JvdXBDb250cm9scywgYm9vbGVhbiBoYXNHcm91cCkgewotICAgICAgICBpbnQgcHJpbWFyeUNvbG9yID0gZ2V0VGhlbWVDb2xvcihjb250ZXh0LCAwLCBhbmRyb2lkLlIuYXR0ci5jb2xvclByaW1hcnkpOwotICAgICAgICBpbnQgcHJpbWFyeURhcmtDb2xvciA9IGdldFRoZW1lQ29sb3IoY29udGV4dCwgMCwgYW5kcm9pZC5SLmF0dHIuY29sb3JQcmltYXJ5RGFyayk7Ci0gICAgICAgIGlmIChoYXNHcm91cCAmJiBnZXRDb250cm9sbGVyQ29sb3IoY29udGV4dCwgMCkgPT0gQ09MT1JfREFSS19PTl9MSUdIVF9CQUNLR1JPVU5EKSB7Ci0gICAgICAgICAgICAvLyBJbnN0ZWFkIG9mIHNob3dpbmcgZGFyayBjb250cm9scyBpbiBhIHBvc3NpYmx5IGRhcmsgKGkuZS4gdGhlIHByaW1hcnkgZGFyayksIG1vZGVsCi0gICAgICAgICAgICAvLyB0aGUgd2hpdGUgZGlhbG9nIGFuZCB1c2UgdGhlIHByaW1hcnkgY29sb3IgZm9yIHRoZSBncm91cCBjb250cm9scy4KLSAgICAgICAgICAgIHByaW1hcnlEYXJrQ29sb3IgPSBwcmltYXJ5Q29sb3I7Ci0gICAgICAgICAgICBwcmltYXJ5Q29sb3IgPSBDb2xvci5XSElURTsKLSAgICAgICAgfQotICAgICAgICBtYWluQ29udHJvbHMuc2V0QmFja2dyb3VuZENvbG9yKHByaW1hcnlDb2xvcik7Ci0gICAgICAgIGdyb3VwQ29udHJvbHMuc2V0QmFja2dyb3VuZENvbG9yKHByaW1hcnlEYXJrQ29sb3IpOwotICAgICAgICAvLyBBbHNvIHN0b3JlIHRoZSBiYWNrZ3JvdW5kIGNvbG9ycyB0byB0aGUgdmlldyB0YWdzLiBUaGV5IGFyZSB1c2VkIGluCi0gICAgICAgIC8vIHNldFZvbHVtZVNsaWRlckNvbG9yKCkgYmVsb3cuCi0gICAgICAgIG1haW5Db250cm9scy5zZXRUYWcocHJpbWFyeUNvbG9yKTsKLSAgICAgICAgZ3JvdXBDb250cm9scy5zZXRUYWcocHJpbWFyeURhcmtDb2xvcik7Ci0gICAgfQotCi0gICAgc3RhdGljIHZvaWQgc2V0Vm9sdW1lU2xpZGVyQ29sb3IoCi0gICAgICAgICAgICBDb250ZXh0IGNvbnRleHQsIE1lZGlhUm91dGVWb2x1bWVTbGlkZXIgdm9sdW1lU2xpZGVyLCBWaWV3IGJhY2tncm91bmRWaWV3KSB7Ci0gICAgICAgIGludCBjb250cm9sbGVyQ29sb3IgPSBnZXRDb250cm9sbGVyQ29sb3IoY29udGV4dCwgMCk7Ci0gICAgICAgIGlmIChDb2xvci5hbHBoYShjb250cm9sbGVyQ29sb3IpICE9IDB4RkYpIHsKLSAgICAgICAgICAgIC8vIENvbXBvc2l0ZSB3aXRoIHRoZSBiYWNrZ3JvdW5kIGluIG9yZGVyIG5vdCB0byBzaG93IHRoZSB1bmRlcmx5aW5nIHByb2dyZXNzIGJhcgotICAgICAgICAgICAgLy8gdGhyb3VnaCB0aGUgdGh1bWIuCi0gICAgICAgICAgICBpbnQgYmFja2dyb3VuZENvbG9yID0gKGludCkgYmFja2dyb3VuZFZpZXcuZ2V0VGFnKCk7Ci0gICAgICAgICAgICBjb250cm9sbGVyQ29sb3IgPSBDb2xvclV0aWxzLmNvbXBvc2l0ZUNvbG9ycyhjb250cm9sbGVyQ29sb3IsIGJhY2tncm91bmRDb2xvcik7Ci0gICAgICAgIH0KLSAgICAgICAgdm9sdW1lU2xpZGVyLnNldENvbG9yKGNvbnRyb2xsZXJDb2xvcik7Ci0gICAgfQotCi0gICAgcHJpdmF0ZSBzdGF0aWMgYm9vbGVhbiBpc0xpZ2h0VGhlbWUoQ29udGV4dCBjb250ZXh0KSB7Ci0gICAgICAgIFR5cGVkVmFsdWUgdmFsdWUgPSBuZXcgVHlwZWRWYWx1ZSgpOwotICAgICAgICAvLyBUT0RPKHN1bmdzb28pOiBTd2l0Y2ggdG8gY29tLmFuZHJvaWQuaW50ZXJuYWwuUi5hdHRyLmlzTGlnaHRUaGVtZQotICAgICAgICByZXR1cm4gY29udGV4dC5nZXRUaGVtZSgpLnJlc29sdmVBdHRyaWJ1dGUoYW5kcm9pZC5zdXBwb3J0LnY3LmFwcGNvbXBhdC5SLmF0dHIuaXNMaWdodFRoZW1lLAotICAgICAgICAgICAgICAgIHZhbHVlLCB0cnVlKSAmJiB2YWx1ZS5kYXRhICE9IDA7Ci0gICAgfQotCi0gICAgcHJpdmF0ZSBzdGF0aWMgaW50IGdldFRoZW1lQ29sb3IoQ29udGV4dCBjb250ZXh0LCBpbnQgc3R5bGUsIGludCBhdHRyKSB7Ci0gICAgICAgIGlmIChzdHlsZSAhPSAwKSB7Ci0gICAgICAgICAgICBpbnRbXSBhdHRycyA9IHsgYXR0ciB9OwotICAgICAgICAgICAgVHlwZWRBcnJheSB0YSA9IGNvbnRleHQub2J0YWluU3R5bGVkQXR0cmlidXRlcyhzdHlsZSwgYXR0cnMpOwotICAgICAgICAgICAgaW50IGNvbG9yID0gdGEuZ2V0Q29sb3IoMCwgMCk7Ci0gICAgICAgICAgICB0YS5yZWN5Y2xlKCk7Ci0gICAgICAgICAgICBpZiAoY29sb3IgIT0gMCkgewotICAgICAgICAgICAgICAgIHJldHVybiBjb2xvcjsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICBUeXBlZFZhbHVlIHZhbHVlID0gbmV3IFR5cGVkVmFsdWUoKTsKLSAgICAgICAgY29udGV4dC5nZXRUaGVtZSgpLnJlc29sdmVBdHRyaWJ1dGUoYXR0ciwgdmFsdWUsIHRydWUpOwotICAgICAgICBpZiAodmFsdWUucmVzb3VyY2VJZCAhPSAwKSB7Ci0gICAgICAgICAgICByZXR1cm4gY29udGV4dC5nZXRSZXNvdXJjZXMoKS5nZXRDb2xvcih2YWx1ZS5yZXNvdXJjZUlkKTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gdmFsdWUuZGF0YTsKLSAgICB9Ci0KLSAgICBzdGF0aWMgaW50IGdldFJvdXRlclRoZW1lSWQoQ29udGV4dCBjb250ZXh0KSB7Ci0gICAgICAgIGludCB0aGVtZUlkOwotICAgICAgICBpZiAoaXNMaWdodFRoZW1lKGNvbnRleHQpKSB7Ci0gICAgICAgICAgICBpZiAoZ2V0Q29udHJvbGxlckNvbG9yKGNvbnRleHQsIDApID09IENPTE9SX0RBUktfT05fTElHSFRfQkFDS0dST1VORCkgewotICAgICAgICAgICAgICAgIHRoZW1lSWQgPSBSLnN0eWxlLlRoZW1lX01lZGlhUm91dGVyX0xpZ2h0OwotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICB0aGVtZUlkID0gUi5zdHlsZS5UaGVtZV9NZWRpYVJvdXRlcl9MaWdodF9EYXJrQ29udHJvbFBhbmVsOwotICAgICAgICAgICAgfQotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgaWYgKGdldENvbnRyb2xsZXJDb2xvcihjb250ZXh0LCAwKSA9PSBDT0xPUl9EQVJLX09OX0xJR0hUX0JBQ0tHUk9VTkQpIHsKLSAgICAgICAgICAgICAgICB0aGVtZUlkID0gUi5zdHlsZS5UaGVtZV9NZWRpYVJvdXRlcl9MaWdodENvbnRyb2xQYW5lbDsKLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgdGhlbWVJZCA9IFIuc3R5bGUuVGhlbWVfTWVkaWFSb3V0ZXI7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIHRoZW1lSWQ7Ci0gICAgfQotfQpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvTWVkaWFDb21wb25lbnRzL3NyYy9jb20vYW5kcm9pZC9zdXBwb3J0L21lZGlhcm91dGVyL2FwcC9PdmVybGF5TGlzdFZpZXcuamF2YSBiL3BhY2thZ2VzL01lZGlhQ29tcG9uZW50cy9zcmMvY29tL2FuZHJvaWQvc3VwcG9ydC9tZWRpYXJvdXRlci9hcHAvT3ZlcmxheUxpc3RWaWV3LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGIwMGRlZTIuLjAwMDAwMDAKLS0tIGEvcGFja2FnZXMvTWVkaWFDb21wb25lbnRzL3NyYy9jb20vYW5kcm9pZC9zdXBwb3J0L21lZGlhcm91dGVyL2FwcC9PdmVybGF5TGlzdFZpZXcuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDI2NSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IDIwMTggVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAotICoKLSAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwotICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgotICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0gKgotICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLSAqCi0gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCi0gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAotICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCi0gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCi0gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KLSAqLwotCi1wYWNrYWdlIGNvbS5hbmRyb2lkLnN1cHBvcnQubWVkaWFyb3V0ZXIuYXBwOwotCi1pbXBvcnQgYW5kcm9pZC5jb250ZW50LkNvbnRleHQ7Ci1pbXBvcnQgYW5kcm9pZC5ncmFwaGljcy5DYW52YXM7Ci1pbXBvcnQgYW5kcm9pZC5ncmFwaGljcy5SZWN0OwotaW1wb3J0IGFuZHJvaWQuZ3JhcGhpY3MuZHJhd2FibGUuQml0bWFwRHJhd2FibGU7Ci1pbXBvcnQgYW5kcm9pZC51dGlsLkF0dHJpYnV0ZVNldDsKLWltcG9ydCBhbmRyb2lkLnZpZXcuYW5pbWF0aW9uLkludGVycG9sYXRvcjsKLWltcG9ydCBhbmRyb2lkLndpZGdldC5MaXN0VmlldzsKLQotaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLkl0ZXJhdG9yOwotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotCi0vKioKLSAqIEEgTGlzdFZpZXcgd2hpY2ggaGFzIGFuIGFkZGl0aW9uYWwgb3ZlcmxheSBsYXllci4ge0BsaW5rIEJpdG1hcERyYXdhYmxlfQotICogY2FuIGJlIGFkZGVkIHRvIHRoZSBsYXllciBhbmQgY2FuIGJlIGFuaW1hdGVkLgotICovCi1wdWJsaWMgZmluYWwgY2xhc3MgT3ZlcmxheUxpc3RWaWV3IGV4dGVuZHMgTGlzdFZpZXcgewotICAgIHByaXZhdGUgZmluYWwgTGlzdDxPdmVybGF5T2JqZWN0PiBtT3ZlcmxheU9iamVjdHMgPSBuZXcgQXJyYXlMaXN0PD4oKTsKLQotICAgIHB1YmxpYyBPdmVybGF5TGlzdFZpZXcoQ29udGV4dCBjb250ZXh0KSB7Ci0gICAgICAgIHN1cGVyKGNvbnRleHQpOwotICAgIH0KLQotICAgIHB1YmxpYyBPdmVybGF5TGlzdFZpZXcoQ29udGV4dCBjb250ZXh0LCBBdHRyaWJ1dGVTZXQgYXR0cnMpIHsKLSAgICAgICAgc3VwZXIoY29udGV4dCwgYXR0cnMpOwotICAgIH0KLQotICAgIHB1YmxpYyBPdmVybGF5TGlzdFZpZXcoQ29udGV4dCBjb250ZXh0LCBBdHRyaWJ1dGVTZXQgYXR0cnMsIGludCBkZWZTdHlsZUF0dHIpIHsKLSAgICAgICAgc3VwZXIoY29udGV4dCwgYXR0cnMsIGRlZlN0eWxlQXR0cik7Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogQWRkcyBhbiBvYmplY3QgdG8gdGhlIG92ZXJsYXkgbGF5ZXIuCi0gICAgICoKLSAgICAgKiBAcGFyYW0gb2JqZWN0IEFuIG9iamVjdCB0byBiZSBhZGRlZC4KLSAgICAgKi8KLSAgICBwdWJsaWMgdm9pZCBhZGRPdmVybGF5T2JqZWN0KE92ZXJsYXlPYmplY3Qgb2JqZWN0KSB7Ci0gICAgICAgIG1PdmVybGF5T2JqZWN0cy5hZGQob2JqZWN0KTsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBTdGFydHMgYWxsIGFuaW1hdGlvbnMgb2Ygb2JqZWN0cyBpbiB0aGUgb3ZlcmxheSBsYXllci4KLSAgICAgKi8KLSAgICBwdWJsaWMgdm9pZCBzdGFydEFuaW1hdGlvbkFsbCgpIHsKLSAgICAgICAgZm9yIChPdmVybGF5T2JqZWN0IG9iamVjdCA6IG1PdmVybGF5T2JqZWN0cykgewotICAgICAgICAgICAgaWYgKCFvYmplY3QuaXNBbmltYXRpb25TdGFydGVkKCkpIHsKLSAgICAgICAgICAgICAgICBvYmplY3Quc3RhcnRBbmltYXRpb24oZ2V0RHJhd2luZ1RpbWUoKSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBTdG9wcyBhbGwgYW5pbWF0aW9ucyBvZiBvYmplY3RzIGluIHRoZSBvdmVybGF5IGxheWVyLgotICAgICAqLwotICAgIHB1YmxpYyB2b2lkIHN0b3BBbmltYXRpb25BbGwoKSB7Ci0gICAgICAgIGZvciAoT3ZlcmxheU9iamVjdCBvYmplY3QgOiBtT3ZlcmxheU9iamVjdHMpIHsKLSAgICAgICAgICAgIG9iamVjdC5zdG9wQW5pbWF0aW9uKCk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgdm9pZCBvbkRyYXcoQ2FudmFzIGNhbnZhcykgewotICAgICAgICBzdXBlci5vbkRyYXcoY2FudmFzKTsKLSAgICAgICAgaWYgKG1PdmVybGF5T2JqZWN0cy5zaXplKCkgPiAwKSB7Ci0gICAgICAgICAgICBJdGVyYXRvcjxPdmVybGF5T2JqZWN0PiBpdCA9IG1PdmVybGF5T2JqZWN0cy5pdGVyYXRvcigpOwotICAgICAgICAgICAgd2hpbGUgKGl0Lmhhc05leHQoKSkgewotICAgICAgICAgICAgICAgIE92ZXJsYXlPYmplY3Qgb2JqZWN0ID0gaXQubmV4dCgpOwotICAgICAgICAgICAgICAgIEJpdG1hcERyYXdhYmxlIGJpdG1hcCA9IG9iamVjdC5nZXRCaXRtYXBEcmF3YWJsZSgpOwotICAgICAgICAgICAgICAgIGlmIChiaXRtYXAgIT0gbnVsbCkgewotICAgICAgICAgICAgICAgICAgICBiaXRtYXAuZHJhdyhjYW52YXMpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBpZiAoIW9iamVjdC51cGRhdGUoZ2V0RHJhd2luZ1RpbWUoKSkpIHsKLSAgICAgICAgICAgICAgICAgICAgaXQucmVtb3ZlKCk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogQSBjbGFzcyB0aGF0IHJlcHJlc2VudHMgYW4gb2JqZWN0IHRvIGJlIHNob3duIGluIHRoZSBvdmVybGF5IGxheWVyLgotICAgICAqLwotICAgIHB1YmxpYyBzdGF0aWMgY2xhc3MgT3ZlcmxheU9iamVjdCB7Ci0gICAgICAgIHByaXZhdGUgQml0bWFwRHJhd2FibGUgbUJpdG1hcDsKLSAgICAgICAgcHJpdmF0ZSBmbG9hdCBtQ3VycmVudEFscGhhID0gMS4wZjsKLSAgICAgICAgcHJpdmF0ZSBSZWN0IG1DdXJyZW50Qm91bmRzOwotICAgICAgICBwcml2YXRlIEludGVycG9sYXRvciBtSW50ZXJwb2xhdG9yOwotICAgICAgICBwcml2YXRlIGxvbmcgbUR1cmF0aW9uOwotICAgICAgICBwcml2YXRlIFJlY3QgbVN0YXJ0UmVjdDsKLSAgICAgICAgcHJpdmF0ZSBpbnQgbURlbHRhWTsKLSAgICAgICAgcHJpdmF0ZSBmbG9hdCBtU3RhcnRBbHBoYSA9IDEuMGY7Ci0gICAgICAgIHByaXZhdGUgZmxvYXQgbUVuZEFscGhhID0gMS4wZjsKLSAgICAgICAgcHJpdmF0ZSBsb25nIG1TdGFydFRpbWU7Ci0gICAgICAgIHByaXZhdGUgYm9vbGVhbiBtSXNBbmltYXRpb25TdGFydGVkOwotICAgICAgICBwcml2YXRlIGJvb2xlYW4gbUlzQW5pbWF0aW9uRW5kZWQ7Ci0gICAgICAgIHByaXZhdGUgT25BbmltYXRpb25FbmRMaXN0ZW5lciBtTGlzdGVuZXI7Ci0KLSAgICAgICAgcHVibGljIE92ZXJsYXlPYmplY3QoQml0bWFwRHJhd2FibGUgYml0bWFwLCBSZWN0IHN0YXJ0UmVjdCkgewotICAgICAgICAgICAgbUJpdG1hcCA9IGJpdG1hcDsKLSAgICAgICAgICAgIG1TdGFydFJlY3QgPSBzdGFydFJlY3Q7Ci0gICAgICAgICAgICBtQ3VycmVudEJvdW5kcyA9IG5ldyBSZWN0KHN0YXJ0UmVjdCk7Ci0gICAgICAgICAgICBpZiAobUJpdG1hcCAhPSBudWxsICYmIG1DdXJyZW50Qm91bmRzICE9IG51bGwpIHsKLSAgICAgICAgICAgICAgICBtQml0bWFwLnNldEFscGhhKChpbnQpIChtQ3VycmVudEFscGhhICogMjU1KSk7Ci0gICAgICAgICAgICAgICAgbUJpdG1hcC5zZXRCb3VuZHMobUN1cnJlbnRCb3VuZHMpOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgLyoqCi0gICAgICAgICAqIFJldHVybnMgdGhlIGJpdG1hcCB0aGF0IHRoaXMgb2JqZWN0IHJlcHJlc2VudHMuCi0gICAgICAgICAqCi0gICAgICAgICAqIEByZXR1cm4gQml0bWFwRHJhd2FibGUgdGhhdCB0aGlzIG9iamVjdCBoYXMuCi0gICAgICAgICAqLwotICAgICAgICBwdWJsaWMgQml0bWFwRHJhd2FibGUgZ2V0Qml0bWFwRHJhd2FibGUoKSB7Ci0gICAgICAgICAgICByZXR1cm4gbUJpdG1hcDsKLSAgICAgICAgfQotCi0gICAgICAgIC8qKgotICAgICAgICAgKiBSZXR1cm5zIHRoZSBzdGFydGVkIHN0YXR1cyBvZiB0aGUgYW5pbWF0aW9uLgotICAgICAgICAgKgotICAgICAgICAgKiBAcmV0dXJuIFRydWUgaWYgdGhlIGFuaW1hdGlvbiBoYXMgc3RhcnRlZCwgZmFsc2Ugb3RoZXJ3aXNlLgotICAgICAgICAgKi8KLSAgICAgICAgcHVibGljIGJvb2xlYW4gaXNBbmltYXRpb25TdGFydGVkKCkgewotICAgICAgICAgICAgcmV0dXJuIG1Jc0FuaW1hdGlvblN0YXJ0ZWQ7Ci0gICAgICAgIH0KLQotICAgICAgICAvKioKLSAgICAgICAgICogU2V0cyBhbmltYXRpb24gZm9yIHZhcnlpbmcgYWxwaGEuCi0gICAgICAgICAqCi0gICAgICAgICAqIEBwYXJhbSBzdGFydEFscGhhIFN0YXJ0aW5nIGFscGhhIHZhbHVlIGZvciB0aGUgYW5pbWF0aW9uLCB3aGVyZSAxLjAgbWVhbnMKLSAgICAgICAgICogZnVsbHkgb3BhcXVlIGFuZCAwLjAgbWVhbnMgZnVsbHkgdHJhbnNwYXJlbnQuCi0gICAgICAgICAqIEBwYXJhbSBlbmRBbHBoYSBFbmRpbmcgYWxwaGEgdmFsdWUgZm9yIHRoZSBhbmltYXRpb24uCi0gICAgICAgICAqIEByZXR1cm4gVGhpcyBPdmVybGF5T2JqZWN0IHRvIGFsbG93IGZvciBjaGFpbmluZyBvZiBjYWxscy4KLSAgICAgICAgICovCi0gICAgICAgIHB1YmxpYyBPdmVybGF5T2JqZWN0IHNldEFscGhhQW5pbWF0aW9uKGZsb2F0IHN0YXJ0QWxwaGEsIGZsb2F0IGVuZEFscGhhKSB7Ci0gICAgICAgICAgICBtU3RhcnRBbHBoYSA9IHN0YXJ0QWxwaGE7Ci0gICAgICAgICAgICBtRW5kQWxwaGEgPSBlbmRBbHBoYTsKLSAgICAgICAgICAgIHJldHVybiB0aGlzOwotICAgICAgICB9Ci0KLSAgICAgICAgLyoqCi0gICAgICAgICAqIFNldHMgYW5pbWF0aW9uIGZvciBtb3Zpbmcgb2JqZWN0cyB2ZXJ0aWNhbGx5LgotICAgICAgICAgKgotICAgICAgICAgKiBAcGFyYW0gZGVsdGFZIERpc3RhbmNlIHRvIG1vdmUgaW4gcGl4ZWxzLgotICAgICAgICAgKiBAcmV0dXJuIFRoaXMgT3ZlcmxheU9iamVjdCB0byBhbGxvdyBmb3IgY2hhaW5pbmcgb2YgY2FsbHMuCi0gICAgICAgICAqLwotICAgICAgICBwdWJsaWMgT3ZlcmxheU9iamVjdCBzZXRUcmFuc2xhdGVZQW5pbWF0aW9uKGludCBkZWx0YVkpIHsKLSAgICAgICAgICAgIG1EZWx0YVkgPSBkZWx0YVk7Ci0gICAgICAgICAgICByZXR1cm4gdGhpczsKLSAgICAgICAgfQotCi0gICAgICAgIC8qKgotICAgICAgICAgKiBTZXRzIGhvdyBsb25nIHRoZSBhbmltYXRpb24gd2lsbCBsYXN0LgotICAgICAgICAgKgotICAgICAgICAgKiBAcGFyYW0gZHVyYXRpb24gRHVyYXRpb24gaW4gbWlsbGlzZWNvbmRzCi0gICAgICAgICAqIEByZXR1cm4gVGhpcyBPdmVybGF5T2JqZWN0IHRvIGFsbG93IGZvciBjaGFpbmluZyBvZiBjYWxscy4KLSAgICAgICAgICovCi0gICAgICAgIHB1YmxpYyBPdmVybGF5T2JqZWN0IHNldER1cmF0aW9uKGxvbmcgZHVyYXRpb24pIHsKLSAgICAgICAgICAgIG1EdXJhdGlvbiA9IGR1cmF0aW9uOwotICAgICAgICAgICAgcmV0dXJuIHRoaXM7Ci0gICAgICAgIH0KLQotICAgICAgICAvKioKLSAgICAgICAgICogU2V0cyB0aGUgYWNjZWxlcmF0aW9uIGN1cnZlIGZvciB0aGlzIGFuaW1hdGlvbi4KLSAgICAgICAgICoKLSAgICAgICAgICogQHBhcmFtIGludGVycG9sYXRvciBUaGUgaW50ZXJwb2xhdG9yIHdoaWNoIGRlZmluZXMgdGhlIGFjY2VsZXJhdGlvbiBjdXJ2ZQotICAgICAgICAgKiBAcmV0dXJuIFRoaXMgT3ZlcmxheU9iamVjdCB0byBhbGxvdyBmb3IgY2hhaW5pbmcgb2YgY2FsbHMuCi0gICAgICAgICAqLwotICAgICAgICBwdWJsaWMgT3ZlcmxheU9iamVjdCBzZXRJbnRlcnBvbGF0b3IoSW50ZXJwb2xhdG9yIGludGVycG9sYXRvcikgewotICAgICAgICAgICAgbUludGVycG9sYXRvciA9IGludGVycG9sYXRvcjsKLSAgICAgICAgICAgIHJldHVybiB0aGlzOwotICAgICAgICB9Ci0KLSAgICAgICAgLyoqCi0gICAgICAgICAqIEJpbmRzIGFuIGFuaW1hdGlvbiBlbmQgbGlzdGVuZXIgdG8gdGhlIGFuaW1hdGlvbi4KLSAgICAgICAgICoKLSAgICAgICAgICogQHBhcmFtIGxpc3RlbmVyIHRoZSBhbmltYXRpb24gZW5kIGxpc3RlbmVyIHRvIGJlIG5vdGlmaWVkLgotICAgICAgICAgKiBAcmV0dXJuIFRoaXMgT3ZlcmxheU9iamVjdCB0byBhbGxvdyBmb3IgY2hhaW5pbmcgb2YgY2FsbHMuCi0gICAgICAgICAqLwotICAgICAgICBwdWJsaWMgT3ZlcmxheU9iamVjdCBzZXRBbmltYXRpb25FbmRMaXN0ZW5lcihPbkFuaW1hdGlvbkVuZExpc3RlbmVyIGxpc3RlbmVyKSB7Ci0gICAgICAgICAgICBtTGlzdGVuZXIgPSBsaXN0ZW5lcjsKLSAgICAgICAgICAgIHJldHVybiB0aGlzOwotICAgICAgICB9Ci0KLSAgICAgICAgLyoqCi0gICAgICAgICAqIFN0YXJ0cyB0aGUgYW5pbWF0aW9uIGFuZCBzZXRzIHRoZSBzdGFydCB0aW1lLgotICAgICAgICAgKgotICAgICAgICAgKiBAcGFyYW0gc3RhcnRUaW1lIFN0YXJ0IHRpbWUgdG8gYmUgc2V0IGluIE1pbGxpcwotICAgICAgICAgKi8KLSAgICAgICAgcHVibGljIHZvaWQgc3RhcnRBbmltYXRpb24obG9uZyBzdGFydFRpbWUpIHsKLSAgICAgICAgICAgIG1TdGFydFRpbWUgPSBzdGFydFRpbWU7Ci0gICAgICAgICAgICBtSXNBbmltYXRpb25TdGFydGVkID0gdHJ1ZTsKLSAgICAgICAgfQotCi0gICAgICAgIC8qKgotICAgICAgICAgKiBTdG9wcyB0aGUgYW5pbWF0aW9uLgotICAgICAgICAgKi8KLSAgICAgICAgcHVibGljIHZvaWQgc3RvcEFuaW1hdGlvbigpIHsKLSAgICAgICAgICAgIG1Jc0FuaW1hdGlvblN0YXJ0ZWQgPSB0cnVlOwotICAgICAgICAgICAgbUlzQW5pbWF0aW9uRW5kZWQgPSB0cnVlOwotICAgICAgICAgICAgaWYgKG1MaXN0ZW5lciAhPSBudWxsKSB7Ci0gICAgICAgICAgICAgICAgbUxpc3RlbmVyLm9uQW5pbWF0aW9uRW5kKCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICAvKioKLSAgICAgICAgICogQ2FsY3VsYXRlcyBhbmQgdXBkYXRlcyBjdXJyZW50IGJvdW5kcyBhbmQgYWxwaGEgdmFsdWUuCi0gICAgICAgICAqCi0gICAgICAgICAqIEBwYXJhbSBjdXJyZW50VGltZSBDdXJyZW50IHRpbWUuaW4gbWlsbGlzCi0gICAgICAgICAqLwotICAgICAgICBwdWJsaWMgYm9vbGVhbiB1cGRhdGUobG9uZyBjdXJyZW50VGltZSkgewotICAgICAgICAgICAgaWYgKG1Jc0FuaW1hdGlvbkVuZGVkKSB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgZmxvYXQgbm9ybWFsaXplZFRpbWUgPSAoY3VycmVudFRpbWUgLSBtU3RhcnRUaW1lKSAvIChmbG9hdCkgbUR1cmF0aW9uOwotICAgICAgICAgICAgbm9ybWFsaXplZFRpbWUgPSBNYXRoLm1heCgwLjBmLCBNYXRoLm1pbigxLjBmLCBub3JtYWxpemVkVGltZSkpOwotICAgICAgICAgICAgaWYgKCFtSXNBbmltYXRpb25TdGFydGVkKSB7Ci0gICAgICAgICAgICAgICAgbm9ybWFsaXplZFRpbWUgPSAwLjBmOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgZmxvYXQgaW50ZXJwb2xhdGVkVGltZSA9IChtSW50ZXJwb2xhdG9yID09IG51bGwpID8gbm9ybWFsaXplZFRpbWUKLSAgICAgICAgICAgICAgICAgICAgOiBtSW50ZXJwb2xhdG9yLmdldEludGVycG9sYXRpb24obm9ybWFsaXplZFRpbWUpOwotICAgICAgICAgICAgaW50IGRlbHRhWSA9IChpbnQpIChtRGVsdGFZICogaW50ZXJwb2xhdGVkVGltZSk7Ci0gICAgICAgICAgICBtQ3VycmVudEJvdW5kcy50b3AgPSBtU3RhcnRSZWN0LnRvcCArIGRlbHRhWTsKLSAgICAgICAgICAgIG1DdXJyZW50Qm91bmRzLmJvdHRvbSA9IG1TdGFydFJlY3QuYm90dG9tICsgZGVsdGFZOwotICAgICAgICAgICAgbUN1cnJlbnRBbHBoYSA9IG1TdGFydEFscGhhICsgKG1FbmRBbHBoYSAtIG1TdGFydEFscGhhKSAqIGludGVycG9sYXRlZFRpbWU7Ci0gICAgICAgICAgICBpZiAobUJpdG1hcCAhPSBudWxsICYmIG1DdXJyZW50Qm91bmRzICE9IG51bGwpIHsKLSAgICAgICAgICAgICAgICBtQml0bWFwLnNldEFscGhhKChpbnQpIChtQ3VycmVudEFscGhhICogMjU1KSk7Ci0gICAgICAgICAgICAgICAgbUJpdG1hcC5zZXRCb3VuZHMobUN1cnJlbnRCb3VuZHMpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYgKG1Jc0FuaW1hdGlvblN0YXJ0ZWQgJiYgbm9ybWFsaXplZFRpbWUgPj0gMS4wZikgewotICAgICAgICAgICAgICAgIG1Jc0FuaW1hdGlvbkVuZGVkID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICBpZiAobUxpc3RlbmVyICE9IG51bGwpIHsKLSAgICAgICAgICAgICAgICAgICAgbUxpc3RlbmVyLm9uQW5pbWF0aW9uRW5kKCk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICAgICAgcmV0dXJuICFtSXNBbmltYXRpb25FbmRlZDsKLSAgICAgICAgfQotCi0gICAgICAgIC8qKgotICAgICAgICAgKiBBbiBhbmltYXRpb24gbGlzdGVuZXIgdGhhdCByZWNlaXZlcyBub3RpZmljYXRpb25zIHdoZW4gdGhlIGFuaW1hdGlvbiBlbmRzLgotICAgICAgICAgKi8KLSAgICAgICAgcHVibGljIGludGVyZmFjZSBPbkFuaW1hdGlvbkVuZExpc3RlbmVyIHsKLSAgICAgICAgICAgIC8qKgotICAgICAgICAgICAgICogTm90aWZpZXMgdGhlIGVuZCBvZiB0aGUgYW5pbWF0aW9uLgotICAgICAgICAgICAgICovCi0gICAgICAgICAgICBwdWJsaWMgdm9pZCBvbkFuaW1hdGlvbkVuZCgpOwotICAgICAgICB9Ci0gICAgfQotfQpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvTWVkaWFDb21wb25lbnRzL3NyYy9jb20vYW5kcm9pZC9zdXBwb3J0L21lZGlhcm91dGVyL2plbGx5YmVhbi1tcjEvTWVkaWFSb3V0ZXJKZWxseWJlYW5NcjEuamF2YSBiL3BhY2thZ2VzL01lZGlhQ29tcG9uZW50cy9zcmMvY29tL2FuZHJvaWQvc3VwcG9ydC9tZWRpYXJvdXRlci9qZWxseWJlYW4tbXIxL01lZGlhUm91dGVySmVsbHliZWFuTXIxLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGY4NTM5YmQuLjAwMDAwMDAKLS0tIGEvcGFja2FnZXMvTWVkaWFDb21wb25lbnRzL3NyYy9jb20vYW5kcm9pZC9zdXBwb3J0L21lZGlhcm91dGVyL2plbGx5YmVhbi1tcjEvTWVkaWFSb3V0ZXJKZWxseWJlYW5NcjEuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDE4NSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IDIwMTggVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAotICoKLSAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwotICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgotICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0gKgotICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLSAqCi0gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCi0gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAotICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCi0gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCi0gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KLSAqLwotCi1wYWNrYWdlIGNvbS5hbmRyb2lkLnN1cHBvcnQubWVkaWFyb3V0ZXIubWVkaWE7Ci0KLWltcG9ydCBhbmRyb2lkLmNvbnRlbnQuQ29udGV4dDsKLWltcG9ydCBhbmRyb2lkLmhhcmR3YXJlLmRpc3BsYXkuRGlzcGxheU1hbmFnZXI7Ci1pbXBvcnQgYW5kcm9pZC5vcy5CdWlsZDsKLWltcG9ydCBhbmRyb2lkLm9zLkhhbmRsZXI7Ci1pbXBvcnQgYW5kcm9pZC5zdXBwb3J0LmFubm90YXRpb24uUmVxdWlyZXNBcGk7Ci1pbXBvcnQgYW5kcm9pZC51dGlsLkxvZzsKLWltcG9ydCBhbmRyb2lkLnZpZXcuRGlzcGxheTsKLQotaW1wb3J0IGphdmEubGFuZy5yZWZsZWN0LkZpZWxkOwotaW1wb3J0IGphdmEubGFuZy5yZWZsZWN0Lkludm9jYXRpb25UYXJnZXRFeGNlcHRpb247Ci1pbXBvcnQgamF2YS5sYW5nLnJlZmxlY3QuTWV0aG9kOwotCi0vLyBAQFJlcXVpcmVzQXBpKDE3KQotZmluYWwgY2xhc3MgTWVkaWFSb3V0ZXJKZWxseWJlYW5NcjEgewotICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBUQUcgPSAiTWVkaWFSb3V0ZXJKZWxseWJlYW5NcjEiOwotCi0gICAgcHVibGljIHN0YXRpYyBPYmplY3QgY3JlYXRlQ2FsbGJhY2soQ2FsbGJhY2sgY2FsbGJhY2spIHsKLSAgICAgICAgcmV0dXJuIG5ldyBDYWxsYmFja1Byb3h5PENhbGxiYWNrPihjYWxsYmFjayk7Ci0gICAgfQotCi0gICAgcHVibGljIHN0YXRpYyBmaW5hbCBjbGFzcyBSb3V0ZUluZm8gewotICAgICAgICBwdWJsaWMgc3RhdGljIGJvb2xlYW4gaXNFbmFibGVkKE9iamVjdCByb3V0ZU9iaikgewotICAgICAgICAgICAgcmV0dXJuICgoYW5kcm9pZC5tZWRpYS5NZWRpYVJvdXRlci5Sb3V0ZUluZm8pcm91dGVPYmopLmlzRW5hYmxlZCgpOwotICAgICAgICB9Ci0KLSAgICAgICAgcHVibGljIHN0YXRpYyBEaXNwbGF5IGdldFByZXNlbnRhdGlvbkRpc3BsYXkoT2JqZWN0IHJvdXRlT2JqKSB7Ci0gICAgICAgICAgICAvLyBhbmRyb2lkLm1lZGlhLk1lZGlhUm91dGVyLlJvdXRlSW5mby5nZXRQcmVzZW50YXRpb25EaXNwbGF5KCkgd2FzCi0gICAgICAgICAgICAvLyBhZGRlZCBpbiBBUEkgMTcuIEhvd2V2ZXIsIHNvbWUgZmFjdG9yeSByZWxlYXNlcyBvZiBKQiBNUjEgbWlzc2VkIGl0LgotICAgICAgICAgICAgdHJ5IHsKLSAgICAgICAgICAgICAgICByZXR1cm4gKChhbmRyb2lkLm1lZGlhLk1lZGlhUm91dGVyLlJvdXRlSW5mbylyb3V0ZU9iaikuZ2V0UHJlc2VudGF0aW9uRGlzcGxheSgpOwotICAgICAgICAgICAgfSBjYXRjaCAoTm9TdWNoTWV0aG9kRXJyb3IgZXgpIHsKLSAgICAgICAgICAgICAgICBMb2cudyhUQUcsICJDYW5ub3QgZ2V0IHByZXNlbnRhdGlvbiBkaXNwbGF5IGZvciB0aGUgcm91dGUuIiwgZXgpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgcmV0dXJuIG51bGw7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBwdWJsaWMgc3RhdGljIGludGVyZmFjZSBDYWxsYmFjayBleHRlbmRzIE1lZGlhUm91dGVySmVsbHliZWFuLkNhbGxiYWNrIHsKLSAgICAgICAgcHVibGljIHZvaWQgb25Sb3V0ZVByZXNlbnRhdGlvbkRpc3BsYXlDaGFuZ2VkKE9iamVjdCByb3V0ZU9iaik7Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogV29ya2Fyb3VuZCB0aGUgZmFjdCB0aGF0IHRoZSB2ZXJzaW9uIG9mIE1lZGlhUm91dGVyLmFkZENhbGxiYWNrKCkgdGhhdCBhY2NlcHRzIGEKLSAgICAgKiBmbGFnIHRvIHBlcmZvcm0gYW4gYWN0aXZlIHNjYW4gZG9lcyBub3QgZXhpc3QgaW4gSkIgTVIxIHNvIHdlIG5lZWQgdG8gZm9yY2UKLSAgICAgKiB3aWZpIGRpc3BsYXkgc2NhbnMgZGlyZWN0bHkgdGhyb3VnaCB0aGUgRGlzcGxheU1hbmFnZXIuCi0gICAgICogRG8gbm90IHVzZSBvbiBKQiBNUjIgYW5kIGFib3ZlLgotICAgICAqLwotICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgY2xhc3MgQWN0aXZlU2Nhbldvcmthcm91bmQgaW1wbGVtZW50cyBSdW5uYWJsZSB7Ci0gICAgICAgIC8vIFRpbWUgYmV0d2VlbiB3aWZpIGRpc3BsYXkgc2NhbnMgd2hlbiBhY3RpdmVseSBzY2FubmluZyBpbiBtaWxsaXNlY29uZHMuCi0gICAgICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGludCBXSUZJX0RJU1BMQVlfU0NBTl9JTlRFUlZBTCA9IDE1MDAwOwotCi0gICAgICAgIHByaXZhdGUgZmluYWwgRGlzcGxheU1hbmFnZXIgbURpc3BsYXlNYW5hZ2VyOwotICAgICAgICBwcml2YXRlIGZpbmFsIEhhbmRsZXIgbUhhbmRsZXI7Ci0gICAgICAgIHByaXZhdGUgTWV0aG9kIG1TY2FuV2lmaURpc3BsYXlzTWV0aG9kOwotCi0gICAgICAgIHByaXZhdGUgYm9vbGVhbiBtQWN0aXZlbHlTY2FubmluZ1dpZmlEaXNwbGF5czsKLQotICAgICAgICBwdWJsaWMgQWN0aXZlU2Nhbldvcmthcm91bmQoQ29udGV4dCBjb250ZXh0LCBIYW5kbGVyIGhhbmRsZXIpIHsKLSAgICAgICAgICAgIGlmIChCdWlsZC5WRVJTSU9OLlNES19JTlQgIT0gMTcpIHsKLSAgICAgICAgICAgICAgICB0aHJvdyBuZXcgVW5zdXBwb3J0ZWRPcGVyYXRpb25FeGNlcHRpb24oKTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgbURpc3BsYXlNYW5hZ2VyID0gKERpc3BsYXlNYW5hZ2VyKSBjb250ZXh0LmdldFN5c3RlbVNlcnZpY2UoQ29udGV4dC5ESVNQTEFZX1NFUlZJQ0UpOwotICAgICAgICAgICAgbUhhbmRsZXIgPSBoYW5kbGVyOwotICAgICAgICAgICAgdHJ5IHsKLSAgICAgICAgICAgICAgICBtU2NhbldpZmlEaXNwbGF5c01ldGhvZCA9IERpc3BsYXlNYW5hZ2VyLmNsYXNzLmdldE1ldGhvZCgic2NhbldpZmlEaXNwbGF5cyIpOwotICAgICAgICAgICAgfSBjYXRjaCAoTm9TdWNoTWV0aG9kRXhjZXB0aW9uIGV4KSB7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICBwdWJsaWMgdm9pZCBzZXRBY3RpdmVTY2FuUm91dGVUeXBlcyhpbnQgcm91dGVUeXBlcykgewotICAgICAgICAgICAgLy8gT24gSkIgTVIxLCB0aGVyZSBpcyBubyBBUEkgdG8gc2NhbiB3aWZpIGRpc3BsYXkgcm91dGVzLgotICAgICAgICAgICAgLy8gSW5zdGVhZCB3ZSBtdXN0IG1ha2UgYSBkaXJlY3QgY2FsbCBpbnRvIHRoZSBEaXNwbGF5TWFuYWdlciB0byBzY2FuCi0gICAgICAgICAgICAvLyB3aWZpIGRpc3BsYXlzIG9uIHRoaXMgdmVyc2lvbiBidXQgb25seSB3aGVuIGxpdmUgdmlkZW8gcm91dGVzIGFyZSByZXF1ZXN0ZWQuCi0gICAgICAgICAgICAvLyBTZWUgYWxzbyB0aGUgSmVsbHliZWFuTXIySW1wbCBpbXBsZW1lbnRhdGlvbiBvZiB0aGlzIG1ldGhvZC4KLSAgICAgICAgICAgIC8vIFRoaXMgd2FzIGZpeGVkIGluIEpCIE1SMiBieSBhZGRpbmcgYSBuZXcgb3ZlcmxvYWQgb2YgYWRkQ2FsbGJhY2soKSB0bwotICAgICAgICAgICAgLy8gZW5hYmxlIGFjdGl2ZSBzY2FubmluZyBvbiByZXF1ZXN0LgotICAgICAgICAgICAgaWYgKChyb3V0ZVR5cGVzICYgTWVkaWFSb3V0ZXJKZWxseWJlYW4uUk9VVEVfVFlQRV9MSVZFX1ZJREVPKSAhPSAwKSB7Ci0gICAgICAgICAgICAgICAgaWYgKCFtQWN0aXZlbHlTY2FubmluZ1dpZmlEaXNwbGF5cykgewotICAgICAgICAgICAgICAgICAgICBpZiAobVNjYW5XaWZpRGlzcGxheXNNZXRob2QgIT0gbnVsbCkgewotICAgICAgICAgICAgICAgICAgICAgICAgbUFjdGl2ZWx5U2Nhbm5pbmdXaWZpRGlzcGxheXMgPSB0cnVlOwotICAgICAgICAgICAgICAgICAgICAgICAgbUhhbmRsZXIucG9zdCh0aGlzKTsKLSAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIExvZy53KFRBRywgIkNhbm5vdCBzY2FuIGZvciB3aWZpIGRpc3BsYXlzIGJlY2F1c2UgdGhlICIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKyAiRGlzcGxheU1hbmFnZXIuc2NhbldpZmlEaXNwbGF5cygpIG1ldGhvZCBpcyAiCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsgIm5vdCBhdmFpbGFibGUgb24gdGhpcyBkZXZpY2UuIik7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIGlmIChtQWN0aXZlbHlTY2FubmluZ1dpZmlEaXNwbGF5cykgewotICAgICAgICAgICAgICAgICAgICBtQWN0aXZlbHlTY2FubmluZ1dpZmlEaXNwbGF5cyA9IGZhbHNlOwotICAgICAgICAgICAgICAgICAgICBtSGFuZGxlci5yZW1vdmVDYWxsYmFja3ModGhpcyk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgIHB1YmxpYyB2b2lkIHJ1bigpIHsKLSAgICAgICAgICAgIGlmIChtQWN0aXZlbHlTY2FubmluZ1dpZmlEaXNwbGF5cykgewotICAgICAgICAgICAgICAgIHRyeSB7Ci0gICAgICAgICAgICAgICAgICAgIG1TY2FuV2lmaURpc3BsYXlzTWV0aG9kLmludm9rZShtRGlzcGxheU1hbmFnZXIpOwotICAgICAgICAgICAgICAgIH0gY2F0Y2ggKElsbGVnYWxBY2Nlc3NFeGNlcHRpb24gZXgpIHsKLSAgICAgICAgICAgICAgICAgICAgTG9nLncoVEFHLCAiQ2Fubm90IHNjYW4gZm9yIHdpZmkgZGlzcGxheXMuIiwgZXgpOwotICAgICAgICAgICAgICAgIH0gY2F0Y2ggKEludm9jYXRpb25UYXJnZXRFeGNlcHRpb24gZXgpIHsKLSAgICAgICAgICAgICAgICAgICAgTG9nLncoVEFHLCAiQ2Fubm90IHNjYW4gZm9yIHdpZmkgZGlzcGxheXMuIiwgZXgpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBtSGFuZGxlci5wb3N0RGVsYXllZCh0aGlzLCBXSUZJX0RJU1BMQVlfU0NBTl9JTlRFUlZBTCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBXb3JrYXJvdW5kIHRoZSBmYWN0IHRoYXQgdGhlIGlzQ29ubmVjdGluZygpIG1ldGhvZCBkb2VzIG5vdCBleGlzdCBpbiBKQiBNUjEuCi0gICAgICogRG8gbm90IHVzZSBvbiBKQiBNUjIgYW5kIGFib3ZlLgotICAgICAqLwotICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgY2xhc3MgSXNDb25uZWN0aW5nV29ya2Fyb3VuZCB7Ci0gICAgICAgIHByaXZhdGUgTWV0aG9kIG1HZXRTdGF0dXNDb2RlTWV0aG9kOwotICAgICAgICBwcml2YXRlIGludCBtU3RhdHVzQ29ubmVjdGluZzsKLQotICAgICAgICBwdWJsaWMgSXNDb25uZWN0aW5nV29ya2Fyb3VuZCgpIHsKLSAgICAgICAgICAgIGlmIChCdWlsZC5WRVJTSU9OLlNES19JTlQgIT0gMTcpIHsKLSAgICAgICAgICAgICAgICB0aHJvdyBuZXcgVW5zdXBwb3J0ZWRPcGVyYXRpb25FeGNlcHRpb24oKTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgdHJ5IHsKLSAgICAgICAgICAgICAgICBGaWVsZCBzdGF0dXNDb25uZWN0aW5nRmllbGQgPQotICAgICAgICAgICAgICAgICAgICAgICAgYW5kcm9pZC5tZWRpYS5NZWRpYVJvdXRlci5Sb3V0ZUluZm8uY2xhc3MuZ2V0RmllbGQoIlNUQVRVU19DT05ORUNUSU5HIik7Ci0gICAgICAgICAgICAgICAgbVN0YXR1c0Nvbm5lY3RpbmcgPSBzdGF0dXNDb25uZWN0aW5nRmllbGQuZ2V0SW50KG51bGwpOwotICAgICAgICAgICAgICAgIG1HZXRTdGF0dXNDb2RlTWV0aG9kID0KLSAgICAgICAgICAgICAgICAgICAgICAgIGFuZHJvaWQubWVkaWEuTWVkaWFSb3V0ZXIuUm91dGVJbmZvLmNsYXNzLmdldE1ldGhvZCgiZ2V0U3RhdHVzQ29kZSIpOwotICAgICAgICAgICAgfSBjYXRjaCAoTm9TdWNoRmllbGRFeGNlcHRpb24gZXgpIHsKLSAgICAgICAgICAgIH0gY2F0Y2ggKE5vU3VjaE1ldGhvZEV4Y2VwdGlvbiBleCkgewotICAgICAgICAgICAgfSBjYXRjaCAoSWxsZWdhbEFjY2Vzc0V4Y2VwdGlvbiBleCkgewotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgcHVibGljIGJvb2xlYW4gaXNDb25uZWN0aW5nKE9iamVjdCByb3V0ZU9iaikgewotICAgICAgICAgICAgYW5kcm9pZC5tZWRpYS5NZWRpYVJvdXRlci5Sb3V0ZUluZm8gcm91dGUgPQotICAgICAgICAgICAgICAgICAgICAoYW5kcm9pZC5tZWRpYS5NZWRpYVJvdXRlci5Sb3V0ZUluZm8pcm91dGVPYmo7Ci0KLSAgICAgICAgICAgIGlmIChtR2V0U3RhdHVzQ29kZU1ldGhvZCAhPSBudWxsKSB7Ci0gICAgICAgICAgICAgICAgdHJ5IHsKLSAgICAgICAgICAgICAgICAgICAgaW50IHN0YXR1c0NvZGUgPSAoSW50ZWdlciltR2V0U3RhdHVzQ29kZU1ldGhvZC5pbnZva2Uocm91dGUpOwotICAgICAgICAgICAgICAgICAgICByZXR1cm4gc3RhdHVzQ29kZSA9PSBtU3RhdHVzQ29ubmVjdGluZzsKLSAgICAgICAgICAgICAgICB9IGNhdGNoIChJbGxlZ2FsQWNjZXNzRXhjZXB0aW9uIGV4KSB7Ci0gICAgICAgICAgICAgICAgfSBjYXRjaCAoSW52b2NhdGlvblRhcmdldEV4Y2VwdGlvbiBleCkgewotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgLy8gQXNzdW1lIG5vdCBjb25uZWN0aW5nLgotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgc3RhdGljIGNsYXNzIENhbGxiYWNrUHJveHk8VCBleHRlbmRzIENhbGxiYWNrPgotICAgICAgICAgICAgZXh0ZW5kcyBNZWRpYVJvdXRlckplbGx5YmVhbi5DYWxsYmFja1Byb3h5PFQ+IHsKLSAgICAgICAgcHVibGljIENhbGxiYWNrUHJveHkoVCBjYWxsYmFjaykgewotICAgICAgICAgICAgc3VwZXIoY2FsbGJhY2spOwotICAgICAgICB9Ci0KLSAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgIHB1YmxpYyB2b2lkIG9uUm91dGVQcmVzZW50YXRpb25EaXNwbGF5Q2hhbmdlZChhbmRyb2lkLm1lZGlhLk1lZGlhUm91dGVyIHJvdXRlciwKLSAgICAgICAgICAgICAgICBhbmRyb2lkLm1lZGlhLk1lZGlhUm91dGVyLlJvdXRlSW5mbyByb3V0ZSkgewotICAgICAgICAgICAgbUNhbGxiYWNrLm9uUm91dGVQcmVzZW50YXRpb25EaXNwbGF5Q2hhbmdlZChyb3V0ZSk7Ci0gICAgICAgIH0KLSAgICB9Ci19CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9NZWRpYUNvbXBvbmVudHMvc3JjL2NvbS9hbmRyb2lkL3N1cHBvcnQvbWVkaWFyb3V0ZXIvamVsbHliZWFuLW1yMi9NZWRpYVJvdXRlckplbGx5YmVhbk1yMi5qYXZhIGIvcGFja2FnZXMvTWVkaWFDb21wb25lbnRzL3NyYy9jb20vYW5kcm9pZC9zdXBwb3J0L21lZGlhcm91dGVyL2plbGx5YmVhbi1tcjIvTWVkaWFSb3V0ZXJKZWxseWJlYW5NcjIuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTEwMzU0OS4uMDAwMDAwMAotLS0gYS9wYWNrYWdlcy9NZWRpYUNvbXBvbmVudHMvc3JjL2NvbS9hbmRyb2lkL3N1cHBvcnQvbWVkaWFyb3V0ZXIvamVsbHliZWFuLW1yMi9NZWRpYVJvdXRlckplbGx5YmVhbk1yMi5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNDUgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAyMDE4IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKLSAqCi0gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKLSAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KLSAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotICoKLSAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0gKgotICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQotICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKLSAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgotICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAotICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCi0gKi8KLQotcGFja2FnZSBjb20uYW5kcm9pZC5zdXBwb3J0Lm1lZGlhcm91dGVyLm1lZGlhOwotCi0vLyBAQFJlcXVpcmVzQXBpKDE4KQotZmluYWwgY2xhc3MgTWVkaWFSb3V0ZXJKZWxseWJlYW5NcjIgewotICAgIHB1YmxpYyBzdGF0aWMgT2JqZWN0IGdldERlZmF1bHRSb3V0ZShPYmplY3Qgcm91dGVyT2JqKSB7Ci0gICAgICAgIHJldHVybiAoKGFuZHJvaWQubWVkaWEuTWVkaWFSb3V0ZXIpcm91dGVyT2JqKS5nZXREZWZhdWx0Um91dGUoKTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgc3RhdGljIHZvaWQgYWRkQ2FsbGJhY2soT2JqZWN0IHJvdXRlck9iaiwgaW50IHR5cGVzLCBPYmplY3QgY2FsbGJhY2tPYmosIGludCBmbGFncykgewotICAgICAgICAoKGFuZHJvaWQubWVkaWEuTWVkaWFSb3V0ZXIpcm91dGVyT2JqKS5hZGRDYWxsYmFjayh0eXBlcywKLSAgICAgICAgICAgICAgICAoYW5kcm9pZC5tZWRpYS5NZWRpYVJvdXRlci5DYWxsYmFjayljYWxsYmFja09iaiwgZmxhZ3MpOwotICAgIH0KLQotICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgY2xhc3MgUm91dGVJbmZvIHsKLSAgICAgICAgcHVibGljIHN0YXRpYyBDaGFyU2VxdWVuY2UgZ2V0RGVzY3JpcHRpb24oT2JqZWN0IHJvdXRlT2JqKSB7Ci0gICAgICAgICAgICByZXR1cm4gKChhbmRyb2lkLm1lZGlhLk1lZGlhUm91dGVyLlJvdXRlSW5mbylyb3V0ZU9iaikuZ2V0RGVzY3JpcHRpb24oKTsKLSAgICAgICAgfQotCi0gICAgICAgIHB1YmxpYyBzdGF0aWMgYm9vbGVhbiBpc0Nvbm5lY3RpbmcoT2JqZWN0IHJvdXRlT2JqKSB7Ci0gICAgICAgICAgICByZXR1cm4gKChhbmRyb2lkLm1lZGlhLk1lZGlhUm91dGVyLlJvdXRlSW5mbylyb3V0ZU9iaikuaXNDb25uZWN0aW5nKCk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGNsYXNzIFVzZXJSb3V0ZUluZm8gewotICAgICAgICBwdWJsaWMgc3RhdGljIHZvaWQgc2V0RGVzY3JpcHRpb24oT2JqZWN0IHJvdXRlT2JqLCBDaGFyU2VxdWVuY2UgZGVzY3JpcHRpb24pIHsKLSAgICAgICAgICAgICgoYW5kcm9pZC5tZWRpYS5NZWRpYVJvdXRlci5Vc2VyUm91dGVJbmZvKXJvdXRlT2JqKS5zZXREZXNjcmlwdGlvbihkZXNjcmlwdGlvbik7Ci0gICAgICAgIH0KLSAgICB9Ci19CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9NZWRpYUNvbXBvbmVudHMvc3JjL2NvbS9hbmRyb2lkL3N1cHBvcnQvbWVkaWFyb3V0ZXIvamVsbHliZWFuL01lZGlhUm91dGVySmVsbHliZWFuLmphdmEgYi9wYWNrYWdlcy9NZWRpYUNvbXBvbmVudHMvc3JjL2NvbS9hbmRyb2lkL3N1cHBvcnQvbWVkaWFyb3V0ZXIvamVsbHliZWFuL01lZGlhUm91dGVySmVsbHliZWFuLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDBiYjU5YjguLjAwMDAwMDAKLS0tIGEvcGFja2FnZXMvTWVkaWFDb21wb25lbnRzL3NyYy9jb20vYW5kcm9pZC9zdXBwb3J0L21lZGlhcm91dGVyL2plbGx5YmVhbi9NZWRpYVJvdXRlckplbGx5YmVhbi5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNDYyICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgMjAxOCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0Ci0gKgotICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7Ci0gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCi0gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLSAqCi0gKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotICoKLSAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKLSAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCi0gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KLSAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKLSAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgotICovCi0KLXBhY2thZ2UgY29tLmFuZHJvaWQuc3VwcG9ydC5tZWRpYXJvdXRlci5tZWRpYTsKLQotaW1wb3J0IGFuZHJvaWQuY29udGVudC5Db250ZXh0OwotaW1wb3J0IGFuZHJvaWQuZ3JhcGhpY3MuZHJhd2FibGUuRHJhd2FibGU7Ci1pbXBvcnQgYW5kcm9pZC5tZWRpYS5BdWRpb01hbmFnZXI7Ci1pbXBvcnQgYW5kcm9pZC5vcy5CdWlsZDsKLWltcG9ydCBhbmRyb2lkLnV0aWwuTG9nOwotCi1pbXBvcnQgamF2YS5sYW5nLnJlZmxlY3QuSW52b2NhdGlvblRhcmdldEV4Y2VwdGlvbjsKLWltcG9ydCBqYXZhLmxhbmcucmVmbGVjdC5NZXRob2Q7Ci1pbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLQotLy8gQEBSZXF1aXJlc0FwaSgxNikKLWZpbmFsIGNsYXNzIE1lZGlhUm91dGVySmVsbHliZWFuIHsKLSAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgVEFHID0gIk1lZGlhUm91dGVySmVsbHliZWFuIjsKLQotICAgIC8vIGFuZHJvaWQubWVkaWEuQXVkaW9TeXN0ZW0uREVWSUNFX09VVF9CTFVFVE9PVEhfQTJEUCA9IDB4ODA7Ci0gICAgLy8gYW5kcm9pZC5tZWRpYS5BdWRpb1N5c3RlbS5ERVZJQ0VfT1VUX0JMVUVUT09USF9BMkRQX0hFQURQSE9ORVMgPSAweDEwMDsKLSAgICAvLyBhbmRyb2lkLm1lZGlhLkF1ZGlvU3lzdGVtLkRFVklDRV9PVVRfQkxVRVRPT1RIX0EyRFBfU1BFQUtFUiA9IDB4MjAwOwotICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IERFVklDRV9PVVRfQkxVRVRPT1RIID0gMHg4MCB8IDB4MTAwIHwgMHgyMDA7Ci0KLSAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBST1VURV9UWVBFX0xJVkVfQVVESU8gPSAweDE7Ci0gICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgUk9VVEVfVFlQRV9MSVZFX1ZJREVPID0gMHgyOwotICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFJPVVRFX1RZUEVfVVNFUiA9IDB4MDA4MDAwMDA7Ci0KLSAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBBTExfUk9VVEVfVFlQRVMgPQotICAgICAgICAgICAgTWVkaWFSb3V0ZXJKZWxseWJlYW4uUk9VVEVfVFlQRV9MSVZFX0FVRElPCi0gICAgICAgICAgICB8IE1lZGlhUm91dGVySmVsbHliZWFuLlJPVVRFX1RZUEVfTElWRV9WSURFTwotICAgICAgICAgICAgfCBNZWRpYVJvdXRlckplbGx5YmVhbi5ST1VURV9UWVBFX1VTRVI7Ci0KLSAgICBwdWJsaWMgc3RhdGljIE9iamVjdCBnZXRNZWRpYVJvdXRlcihDb250ZXh0IGNvbnRleHQpIHsKLSAgICAgICAgcmV0dXJuIGNvbnRleHQuZ2V0U3lzdGVtU2VydmljZShDb250ZXh0Lk1FRElBX1JPVVRFUl9TRVJWSUNFKTsKLSAgICB9Ci0KLSAgICBAU3VwcHJlc3NXYXJuaW5ncyh7ICJyYXd0eXBlcyIsICJ1bmNoZWNrZWQiIH0pCi0gICAgcHVibGljIHN0YXRpYyBMaXN0IGdldFJvdXRlcyhPYmplY3Qgcm91dGVyT2JqKSB7Ci0gICAgICAgIGZpbmFsIGFuZHJvaWQubWVkaWEuTWVkaWFSb3V0ZXIgcm91dGVyID0gKGFuZHJvaWQubWVkaWEuTWVkaWFSb3V0ZXIpcm91dGVyT2JqOwotICAgICAgICBmaW5hbCBpbnQgY291bnQgPSByb3V0ZXIuZ2V0Um91dGVDb3VudCgpOwotICAgICAgICBMaXN0IG91dCA9IG5ldyBBcnJheUxpc3QoY291bnQpOwotICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGNvdW50OyBpKyspIHsKLSAgICAgICAgICAgIG91dC5hZGQocm91dGVyLmdldFJvdXRlQXQoaSkpOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiBvdXQ7Ci0gICAgfQotCi0gICAgQFN1cHByZXNzV2FybmluZ3MoeyAicmF3dHlwZXMiLCAidW5jaGVja2VkIiB9KQotICAgIHB1YmxpYyBzdGF0aWMgTGlzdCBnZXRDYXRlZ29yaWVzKE9iamVjdCByb3V0ZXJPYmopIHsKLSAgICAgICAgZmluYWwgYW5kcm9pZC5tZWRpYS5NZWRpYVJvdXRlciByb3V0ZXIgPSAoYW5kcm9pZC5tZWRpYS5NZWRpYVJvdXRlcilyb3V0ZXJPYmo7Ci0gICAgICAgIGZpbmFsIGludCBjb3VudCA9IHJvdXRlci5nZXRDYXRlZ29yeUNvdW50KCk7Ci0gICAgICAgIExpc3Qgb3V0ID0gbmV3IEFycmF5TGlzdChjb3VudCk7Ci0gICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgY291bnQ7IGkrKykgewotICAgICAgICAgICAgb3V0LmFkZChyb3V0ZXIuZ2V0Q2F0ZWdvcnlBdChpKSk7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIG91dDsKLSAgICB9Ci0KLSAgICBwdWJsaWMgc3RhdGljIE9iamVjdCBnZXRTZWxlY3RlZFJvdXRlKE9iamVjdCByb3V0ZXJPYmosIGludCB0eXBlKSB7Ci0gICAgICAgIHJldHVybiAoKGFuZHJvaWQubWVkaWEuTWVkaWFSb3V0ZXIpcm91dGVyT2JqKS5nZXRTZWxlY3RlZFJvdXRlKHR5cGUpOwotICAgIH0KLQotICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBzZWxlY3RSb3V0ZShPYmplY3Qgcm91dGVyT2JqLCBpbnQgdHlwZXMsIE9iamVjdCByb3V0ZU9iaikgewotICAgICAgICAoKGFuZHJvaWQubWVkaWEuTWVkaWFSb3V0ZXIpcm91dGVyT2JqKS5zZWxlY3RSb3V0ZSh0eXBlcywKLSAgICAgICAgICAgICAgICAoYW5kcm9pZC5tZWRpYS5NZWRpYVJvdXRlci5Sb3V0ZUluZm8pcm91dGVPYmopOwotICAgIH0KLQotICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBhZGRDYWxsYmFjayhPYmplY3Qgcm91dGVyT2JqLCBpbnQgdHlwZXMsIE9iamVjdCBjYWxsYmFja09iaikgewotICAgICAgICAoKGFuZHJvaWQubWVkaWEuTWVkaWFSb3V0ZXIpcm91dGVyT2JqKS5hZGRDYWxsYmFjayh0eXBlcywKLSAgICAgICAgICAgICAgICAoYW5kcm9pZC5tZWRpYS5NZWRpYVJvdXRlci5DYWxsYmFjayljYWxsYmFja09iaik7Ci0gICAgfQotCi0gICAgcHVibGljIHN0YXRpYyB2b2lkIHJlbW92ZUNhbGxiYWNrKE9iamVjdCByb3V0ZXJPYmosIE9iamVjdCBjYWxsYmFja09iaikgewotICAgICAgICAoKGFuZHJvaWQubWVkaWEuTWVkaWFSb3V0ZXIpcm91dGVyT2JqKS5yZW1vdmVDYWxsYmFjaygKLSAgICAgICAgICAgICAgICAoYW5kcm9pZC5tZWRpYS5NZWRpYVJvdXRlci5DYWxsYmFjayljYWxsYmFja09iaik7Ci0gICAgfQotCi0gICAgcHVibGljIHN0YXRpYyBPYmplY3QgY3JlYXRlUm91dGVDYXRlZ29yeShPYmplY3Qgcm91dGVyT2JqLAotICAgICAgICAgICAgU3RyaW5nIG5hbWUsIGJvb2xlYW4gaXNHcm91cGFibGUpIHsKLSAgICAgICAgcmV0dXJuICgoYW5kcm9pZC5tZWRpYS5NZWRpYVJvdXRlcilyb3V0ZXJPYmopLmNyZWF0ZVJvdXRlQ2F0ZWdvcnkobmFtZSwgaXNHcm91cGFibGUpOwotICAgIH0KLQotICAgIHB1YmxpYyBzdGF0aWMgT2JqZWN0IGNyZWF0ZVVzZXJSb3V0ZShPYmplY3Qgcm91dGVyT2JqLCBPYmplY3QgY2F0ZWdvcnlPYmopIHsKLSAgICAgICAgcmV0dXJuICgoYW5kcm9pZC5tZWRpYS5NZWRpYVJvdXRlcilyb3V0ZXJPYmopLmNyZWF0ZVVzZXJSb3V0ZSgKLSAgICAgICAgICAgICAgICAoYW5kcm9pZC5tZWRpYS5NZWRpYVJvdXRlci5Sb3V0ZUNhdGVnb3J5KWNhdGVnb3J5T2JqKTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgc3RhdGljIHZvaWQgYWRkVXNlclJvdXRlKE9iamVjdCByb3V0ZXJPYmosIE9iamVjdCByb3V0ZU9iaikgewotICAgICAgICAoKGFuZHJvaWQubWVkaWEuTWVkaWFSb3V0ZXIpcm91dGVyT2JqKS5hZGRVc2VyUm91dGUoCi0gICAgICAgICAgICAgICAgKGFuZHJvaWQubWVkaWEuTWVkaWFSb3V0ZXIuVXNlclJvdXRlSW5mbylyb3V0ZU9iaik7Ci0gICAgfQotCi0gICAgcHVibGljIHN0YXRpYyB2b2lkIHJlbW92ZVVzZXJSb3V0ZShPYmplY3Qgcm91dGVyT2JqLCBPYmplY3Qgcm91dGVPYmopIHsKLSAgICAgICAgKChhbmRyb2lkLm1lZGlhLk1lZGlhUm91dGVyKXJvdXRlck9iaikucmVtb3ZlVXNlclJvdXRlKAotICAgICAgICAgICAgICAgIChhbmRyb2lkLm1lZGlhLk1lZGlhUm91dGVyLlVzZXJSb3V0ZUluZm8pcm91dGVPYmopOwotICAgIH0KLQotICAgIHB1YmxpYyBzdGF0aWMgT2JqZWN0IGNyZWF0ZUNhbGxiYWNrKENhbGxiYWNrIGNhbGxiYWNrKSB7Ci0gICAgICAgIHJldHVybiBuZXcgQ2FsbGJhY2tQcm94eTxDYWxsYmFjaz4oY2FsbGJhY2spOwotICAgIH0KLQotICAgIHB1YmxpYyBzdGF0aWMgT2JqZWN0IGNyZWF0ZVZvbHVtZUNhbGxiYWNrKFZvbHVtZUNhbGxiYWNrIGNhbGxiYWNrKSB7Ci0gICAgICAgIHJldHVybiBuZXcgVm9sdW1lQ2FsbGJhY2tQcm94eTxWb2x1bWVDYWxsYmFjaz4oY2FsbGJhY2spOwotICAgIH0KLQotICAgIHN0YXRpYyBib29sZWFuIGNoZWNrUm91dGVkVG9CbHVldG9vdGgoQ29udGV4dCBjb250ZXh0KSB7Ci0gICAgICAgIHRyeSB7Ci0gICAgICAgICAgICBBdWRpb01hbmFnZXIgYXVkaW9NYW5hZ2VyID0gKEF1ZGlvTWFuYWdlcikgY29udGV4dC5nZXRTeXN0ZW1TZXJ2aWNlKAotICAgICAgICAgICAgICAgICAgICBDb250ZXh0LkFVRElPX1NFUlZJQ0UpOwotICAgICAgICAgICAgTWV0aG9kIG1ldGhvZCA9IGF1ZGlvTWFuYWdlci5nZXRDbGFzcygpLmdldERlY2xhcmVkTWV0aG9kKAotICAgICAgICAgICAgICAgICAgICAiZ2V0RGV2aWNlc0ZvclN0cmVhbSIsIGludC5jbGFzcyk7Ci0gICAgICAgICAgICBpbnQgZGV2aWNlID0gKEludGVnZXIpIG1ldGhvZC5pbnZva2UoYXVkaW9NYW5hZ2VyLCBBdWRpb01hbmFnZXIuU1RSRUFNX01VU0lDKTsKLSAgICAgICAgICAgIHJldHVybiAoZGV2aWNlICYgREVWSUNFX09VVF9CTFVFVE9PVEgpICE9IDA7Ci0gICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGNsYXNzIFJvdXRlSW5mbyB7Ci0gICAgICAgIHB1YmxpYyBzdGF0aWMgQ2hhclNlcXVlbmNlIGdldE5hbWUoT2JqZWN0IHJvdXRlT2JqLCBDb250ZXh0IGNvbnRleHQpIHsKLSAgICAgICAgICAgIHJldHVybiAoKGFuZHJvaWQubWVkaWEuTWVkaWFSb3V0ZXIuUm91dGVJbmZvKXJvdXRlT2JqKS5nZXROYW1lKGNvbnRleHQpOwotICAgICAgICB9Ci0KLSAgICAgICAgcHVibGljIHN0YXRpYyBDaGFyU2VxdWVuY2UgZ2V0U3RhdHVzKE9iamVjdCByb3V0ZU9iaikgewotICAgICAgICAgICAgcmV0dXJuICgoYW5kcm9pZC5tZWRpYS5NZWRpYVJvdXRlci5Sb3V0ZUluZm8pcm91dGVPYmopLmdldFN0YXR1cygpOwotICAgICAgICB9Ci0KLSAgICAgICAgcHVibGljIHN0YXRpYyBpbnQgZ2V0U3VwcG9ydGVkVHlwZXMoT2JqZWN0IHJvdXRlT2JqKSB7Ci0gICAgICAgICAgICByZXR1cm4gKChhbmRyb2lkLm1lZGlhLk1lZGlhUm91dGVyLlJvdXRlSW5mbylyb3V0ZU9iaikuZ2V0U3VwcG9ydGVkVHlwZXMoKTsKLSAgICAgICAgfQotCi0gICAgICAgIHB1YmxpYyBzdGF0aWMgT2JqZWN0IGdldENhdGVnb3J5KE9iamVjdCByb3V0ZU9iaikgewotICAgICAgICAgICAgcmV0dXJuICgoYW5kcm9pZC5tZWRpYS5NZWRpYVJvdXRlci5Sb3V0ZUluZm8pcm91dGVPYmopLmdldENhdGVnb3J5KCk7Ci0gICAgICAgIH0KLQotICAgICAgICBwdWJsaWMgc3RhdGljIERyYXdhYmxlIGdldEljb25EcmF3YWJsZShPYmplY3Qgcm91dGVPYmopIHsKLSAgICAgICAgICAgIHJldHVybiAoKGFuZHJvaWQubWVkaWEuTWVkaWFSb3V0ZXIuUm91dGVJbmZvKXJvdXRlT2JqKS5nZXRJY29uRHJhd2FibGUoKTsKLSAgICAgICAgfQotCi0gICAgICAgIHB1YmxpYyBzdGF0aWMgaW50IGdldFBsYXliYWNrVHlwZShPYmplY3Qgcm91dGVPYmopIHsKLSAgICAgICAgICAgIHJldHVybiAoKGFuZHJvaWQubWVkaWEuTWVkaWFSb3V0ZXIuUm91dGVJbmZvKXJvdXRlT2JqKS5nZXRQbGF5YmFja1R5cGUoKTsKLSAgICAgICAgfQotCi0gICAgICAgIHB1YmxpYyBzdGF0aWMgaW50IGdldFBsYXliYWNrU3RyZWFtKE9iamVjdCByb3V0ZU9iaikgewotICAgICAgICAgICAgcmV0dXJuICgoYW5kcm9pZC5tZWRpYS5NZWRpYVJvdXRlci5Sb3V0ZUluZm8pcm91dGVPYmopLmdldFBsYXliYWNrU3RyZWFtKCk7Ci0gICAgICAgIH0KLQotICAgICAgICBwdWJsaWMgc3RhdGljIGludCBnZXRWb2x1bWUoT2JqZWN0IHJvdXRlT2JqKSB7Ci0gICAgICAgICAgICByZXR1cm4gKChhbmRyb2lkLm1lZGlhLk1lZGlhUm91dGVyLlJvdXRlSW5mbylyb3V0ZU9iaikuZ2V0Vm9sdW1lKCk7Ci0gICAgICAgIH0KLQotICAgICAgICBwdWJsaWMgc3RhdGljIGludCBnZXRWb2x1bWVNYXgoT2JqZWN0IHJvdXRlT2JqKSB7Ci0gICAgICAgICAgICByZXR1cm4gKChhbmRyb2lkLm1lZGlhLk1lZGlhUm91dGVyLlJvdXRlSW5mbylyb3V0ZU9iaikuZ2V0Vm9sdW1lTWF4KCk7Ci0gICAgICAgIH0KLQotICAgICAgICBwdWJsaWMgc3RhdGljIGludCBnZXRWb2x1bWVIYW5kbGluZyhPYmplY3Qgcm91dGVPYmopIHsKLSAgICAgICAgICAgIHJldHVybiAoKGFuZHJvaWQubWVkaWEuTWVkaWFSb3V0ZXIuUm91dGVJbmZvKXJvdXRlT2JqKS5nZXRWb2x1bWVIYW5kbGluZygpOwotICAgICAgICB9Ci0KLSAgICAgICAgcHVibGljIHN0YXRpYyBPYmplY3QgZ2V0VGFnKE9iamVjdCByb3V0ZU9iaikgewotICAgICAgICAgICAgcmV0dXJuICgoYW5kcm9pZC5tZWRpYS5NZWRpYVJvdXRlci5Sb3V0ZUluZm8pcm91dGVPYmopLmdldFRhZygpOwotICAgICAgICB9Ci0KLSAgICAgICAgcHVibGljIHN0YXRpYyB2b2lkIHNldFRhZyhPYmplY3Qgcm91dGVPYmosIE9iamVjdCB0YWcpIHsKLSAgICAgICAgICAgICgoYW5kcm9pZC5tZWRpYS5NZWRpYVJvdXRlci5Sb3V0ZUluZm8pcm91dGVPYmopLnNldFRhZyh0YWcpOwotICAgICAgICB9Ci0KLSAgICAgICAgcHVibGljIHN0YXRpYyB2b2lkIHJlcXVlc3RTZXRWb2x1bWUoT2JqZWN0IHJvdXRlT2JqLCBpbnQgdm9sdW1lKSB7Ci0gICAgICAgICAgICAoKGFuZHJvaWQubWVkaWEuTWVkaWFSb3V0ZXIuUm91dGVJbmZvKXJvdXRlT2JqKS5yZXF1ZXN0U2V0Vm9sdW1lKHZvbHVtZSk7Ci0gICAgICAgIH0KLQotICAgICAgICBwdWJsaWMgc3RhdGljIHZvaWQgcmVxdWVzdFVwZGF0ZVZvbHVtZShPYmplY3Qgcm91dGVPYmosIGludCBkaXJlY3Rpb24pIHsKLSAgICAgICAgICAgICgoYW5kcm9pZC5tZWRpYS5NZWRpYVJvdXRlci5Sb3V0ZUluZm8pcm91dGVPYmopLnJlcXVlc3RVcGRhdGVWb2x1bWUoZGlyZWN0aW9uKTsKLSAgICAgICAgfQotCi0gICAgICAgIHB1YmxpYyBzdGF0aWMgT2JqZWN0IGdldEdyb3VwKE9iamVjdCByb3V0ZU9iaikgewotICAgICAgICAgICAgcmV0dXJuICgoYW5kcm9pZC5tZWRpYS5NZWRpYVJvdXRlci5Sb3V0ZUluZm8pcm91dGVPYmopLmdldEdyb3VwKCk7Ci0gICAgICAgIH0KLQotICAgICAgICBwdWJsaWMgc3RhdGljIGJvb2xlYW4gaXNHcm91cChPYmplY3Qgcm91dGVPYmopIHsKLSAgICAgICAgICAgIHJldHVybiByb3V0ZU9iaiBpbnN0YW5jZW9mIGFuZHJvaWQubWVkaWEuTWVkaWFSb3V0ZXIuUm91dGVHcm91cDsKLSAgICAgICAgfQotICAgIH0KLQotICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgY2xhc3MgUm91dGVHcm91cCB7Ci0gICAgICAgIEBTdXBwcmVzc1dhcm5pbmdzKHsgInJhd3R5cGVzIiwgInVuY2hlY2tlZCIgfSkKLSAgICAgICAgcHVibGljIHN0YXRpYyBMaXN0IGdldEdyb3VwZWRSb3V0ZXMoT2JqZWN0IGdyb3VwT2JqKSB7Ci0gICAgICAgICAgICBmaW5hbCBhbmRyb2lkLm1lZGlhLk1lZGlhUm91dGVyLlJvdXRlR3JvdXAgZ3JvdXAgPQotICAgICAgICAgICAgICAgICAgICAoYW5kcm9pZC5tZWRpYS5NZWRpYVJvdXRlci5Sb3V0ZUdyb3VwKWdyb3VwT2JqOwotICAgICAgICAgICAgZmluYWwgaW50IGNvdW50ID0gZ3JvdXAuZ2V0Um91dGVDb3VudCgpOwotICAgICAgICAgICAgTGlzdCBvdXQgPSBuZXcgQXJyYXlMaXN0KGNvdW50KTsKLSAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgY291bnQ7IGkrKykgewotICAgICAgICAgICAgICAgIG91dC5hZGQoZ3JvdXAuZ2V0Um91dGVBdChpKSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICByZXR1cm4gb3V0OwotICAgICAgICB9Ci0gICAgfQotCi0gICAgcHVibGljIHN0YXRpYyBmaW5hbCBjbGFzcyBVc2VyUm91dGVJbmZvIHsKLSAgICAgICAgcHVibGljIHN0YXRpYyB2b2lkIHNldE5hbWUoT2JqZWN0IHJvdXRlT2JqLCBDaGFyU2VxdWVuY2UgbmFtZSkgewotICAgICAgICAgICAgKChhbmRyb2lkLm1lZGlhLk1lZGlhUm91dGVyLlVzZXJSb3V0ZUluZm8pcm91dGVPYmopLnNldE5hbWUobmFtZSk7Ci0gICAgICAgIH0KLQotICAgICAgICBwdWJsaWMgc3RhdGljIHZvaWQgc2V0U3RhdHVzKE9iamVjdCByb3V0ZU9iaiwgQ2hhclNlcXVlbmNlIHN0YXR1cykgewotICAgICAgICAgICAgKChhbmRyb2lkLm1lZGlhLk1lZGlhUm91dGVyLlVzZXJSb3V0ZUluZm8pcm91dGVPYmopLnNldFN0YXR1cyhzdGF0dXMpOwotICAgICAgICB9Ci0KLSAgICAgICAgcHVibGljIHN0YXRpYyB2b2lkIHNldEljb25EcmF3YWJsZShPYmplY3Qgcm91dGVPYmosIERyYXdhYmxlIGljb24pIHsKLSAgICAgICAgICAgICgoYW5kcm9pZC5tZWRpYS5NZWRpYVJvdXRlci5Vc2VyUm91dGVJbmZvKXJvdXRlT2JqKS5zZXRJY29uRHJhd2FibGUoaWNvbik7Ci0gICAgICAgIH0KLQotICAgICAgICBwdWJsaWMgc3RhdGljIHZvaWQgc2V0UGxheWJhY2tUeXBlKE9iamVjdCByb3V0ZU9iaiwgaW50IHR5cGUpIHsKLSAgICAgICAgICAgICgoYW5kcm9pZC5tZWRpYS5NZWRpYVJvdXRlci5Vc2VyUm91dGVJbmZvKXJvdXRlT2JqKS5zZXRQbGF5YmFja1R5cGUodHlwZSk7Ci0gICAgICAgIH0KLQotICAgICAgICBwdWJsaWMgc3RhdGljIHZvaWQgc2V0UGxheWJhY2tTdHJlYW0oT2JqZWN0IHJvdXRlT2JqLCBpbnQgc3RyZWFtKSB7Ci0gICAgICAgICAgICAoKGFuZHJvaWQubWVkaWEuTWVkaWFSb3V0ZXIuVXNlclJvdXRlSW5mbylyb3V0ZU9iaikuc2V0UGxheWJhY2tTdHJlYW0oc3RyZWFtKTsKLSAgICAgICAgfQotCi0gICAgICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBzZXRWb2x1bWUoT2JqZWN0IHJvdXRlT2JqLCBpbnQgdm9sdW1lKSB7Ci0gICAgICAgICAgICAoKGFuZHJvaWQubWVkaWEuTWVkaWFSb3V0ZXIuVXNlclJvdXRlSW5mbylyb3V0ZU9iaikuc2V0Vm9sdW1lKHZvbHVtZSk7Ci0gICAgICAgIH0KLQotICAgICAgICBwdWJsaWMgc3RhdGljIHZvaWQgc2V0Vm9sdW1lTWF4KE9iamVjdCByb3V0ZU9iaiwgaW50IHZvbHVtZU1heCkgewotICAgICAgICAgICAgKChhbmRyb2lkLm1lZGlhLk1lZGlhUm91dGVyLlVzZXJSb3V0ZUluZm8pcm91dGVPYmopLnNldFZvbHVtZU1heCh2b2x1bWVNYXgpOwotICAgICAgICB9Ci0KLSAgICAgICAgcHVibGljIHN0YXRpYyB2b2lkIHNldFZvbHVtZUhhbmRsaW5nKE9iamVjdCByb3V0ZU9iaiwgaW50IHZvbHVtZUhhbmRsaW5nKSB7Ci0gICAgICAgICAgICAoKGFuZHJvaWQubWVkaWEuTWVkaWFSb3V0ZXIuVXNlclJvdXRlSW5mbylyb3V0ZU9iaikuc2V0Vm9sdW1lSGFuZGxpbmcodm9sdW1lSGFuZGxpbmcpOwotICAgICAgICB9Ci0KLSAgICAgICAgcHVibGljIHN0YXRpYyB2b2lkIHNldFZvbHVtZUNhbGxiYWNrKE9iamVjdCByb3V0ZU9iaiwgT2JqZWN0IHZvbHVtZUNhbGxiYWNrT2JqKSB7Ci0gICAgICAgICAgICAoKGFuZHJvaWQubWVkaWEuTWVkaWFSb3V0ZXIuVXNlclJvdXRlSW5mbylyb3V0ZU9iaikuc2V0Vm9sdW1lQ2FsbGJhY2soCi0gICAgICAgICAgICAgICAgICAgIChhbmRyb2lkLm1lZGlhLk1lZGlhUm91dGVyLlZvbHVtZUNhbGxiYWNrKXZvbHVtZUNhbGxiYWNrT2JqKTsKLSAgICAgICAgfQotCi0gICAgICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBzZXRSZW1vdGVDb250cm9sQ2xpZW50KE9iamVjdCByb3V0ZU9iaiwgT2JqZWN0IHJjY09iaikgewotICAgICAgICAgICAgKChhbmRyb2lkLm1lZGlhLk1lZGlhUm91dGVyLlVzZXJSb3V0ZUluZm8pcm91dGVPYmopLnNldFJlbW90ZUNvbnRyb2xDbGllbnQoCi0gICAgICAgICAgICAgICAgICAgIChhbmRyb2lkLm1lZGlhLlJlbW90ZUNvbnRyb2xDbGllbnQpcmNjT2JqKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgY2xhc3MgUm91dGVDYXRlZ29yeSB7Ci0gICAgICAgIHB1YmxpYyBzdGF0aWMgQ2hhclNlcXVlbmNlIGdldE5hbWUoT2JqZWN0IGNhdGVnb3J5T2JqLCBDb250ZXh0IGNvbnRleHQpIHsKLSAgICAgICAgICAgIHJldHVybiAoKGFuZHJvaWQubWVkaWEuTWVkaWFSb3V0ZXIuUm91dGVDYXRlZ29yeSljYXRlZ29yeU9iaikuZ2V0TmFtZShjb250ZXh0KTsKLSAgICAgICAgfQotCi0gICAgICAgIEBTdXBwcmVzc1dhcm5pbmdzKHsgInJhd3R5cGVzIiwgInVuY2hlY2tlZCIgfSkKLSAgICAgICAgcHVibGljIHN0YXRpYyBMaXN0IGdldFJvdXRlcyhPYmplY3QgY2F0ZWdvcnlPYmopIHsKLSAgICAgICAgICAgIEFycmF5TGlzdCBvdXQgPSBuZXcgQXJyYXlMaXN0KCk7Ci0gICAgICAgICAgICAoKGFuZHJvaWQubWVkaWEuTWVkaWFSb3V0ZXIuUm91dGVDYXRlZ29yeSljYXRlZ29yeU9iaikuZ2V0Um91dGVzKG91dCk7Ci0gICAgICAgICAgICByZXR1cm4gb3V0OwotICAgICAgICB9Ci0KLSAgICAgICAgcHVibGljIHN0YXRpYyBpbnQgZ2V0U3VwcG9ydGVkVHlwZXMoT2JqZWN0IGNhdGVnb3J5T2JqKSB7Ci0gICAgICAgICAgICByZXR1cm4gKChhbmRyb2lkLm1lZGlhLk1lZGlhUm91dGVyLlJvdXRlQ2F0ZWdvcnkpY2F0ZWdvcnlPYmopLmdldFN1cHBvcnRlZFR5cGVzKCk7Ci0gICAgICAgIH0KLQotICAgICAgICBwdWJsaWMgc3RhdGljIGJvb2xlYW4gaXNHcm91cGFibGUoT2JqZWN0IGNhdGVnb3J5T2JqKSB7Ci0gICAgICAgICAgICByZXR1cm4gKChhbmRyb2lkLm1lZGlhLk1lZGlhUm91dGVyLlJvdXRlQ2F0ZWdvcnkpY2F0ZWdvcnlPYmopLmlzR3JvdXBhYmxlKCk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBwdWJsaWMgc3RhdGljIGludGVyZmFjZSBDYWxsYmFjayB7Ci0gICAgICAgIHB1YmxpYyB2b2lkIG9uUm91dGVTZWxlY3RlZChpbnQgdHlwZSwgT2JqZWN0IHJvdXRlT2JqKTsKLSAgICAgICAgcHVibGljIHZvaWQgb25Sb3V0ZVVuc2VsZWN0ZWQoaW50IHR5cGUsIE9iamVjdCByb3V0ZU9iaik7Ci0gICAgICAgIHB1YmxpYyB2b2lkIG9uUm91dGVBZGRlZChPYmplY3Qgcm91dGVPYmopOwotICAgICAgICBwdWJsaWMgdm9pZCBvblJvdXRlUmVtb3ZlZChPYmplY3Qgcm91dGVPYmopOwotICAgICAgICBwdWJsaWMgdm9pZCBvblJvdXRlQ2hhbmdlZChPYmplY3Qgcm91dGVPYmopOwotICAgICAgICBwdWJsaWMgdm9pZCBvblJvdXRlR3JvdXBlZChPYmplY3Qgcm91dGVPYmosIE9iamVjdCBncm91cE9iaiwgaW50IGluZGV4KTsKLSAgICAgICAgcHVibGljIHZvaWQgb25Sb3V0ZVVuZ3JvdXBlZChPYmplY3Qgcm91dGVPYmosIE9iamVjdCBncm91cE9iaik7Ci0gICAgICAgIHB1YmxpYyB2b2lkIG9uUm91dGVWb2x1bWVDaGFuZ2VkKE9iamVjdCByb3V0ZU9iaik7Ci0gICAgfQotCi0gICAgcHVibGljIHN0YXRpYyBpbnRlcmZhY2UgVm9sdW1lQ2FsbGJhY2sgewotICAgICAgICBwdWJsaWMgdm9pZCBvblZvbHVtZVNldFJlcXVlc3QoT2JqZWN0IHJvdXRlT2JqLCBpbnQgdm9sdW1lKTsKLSAgICAgICAgcHVibGljIHZvaWQgb25Wb2x1bWVVcGRhdGVSZXF1ZXN0KE9iamVjdCByb3V0ZU9iaiwgaW50IGRpcmVjdGlvbik7Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogV29ya2Fyb3VuZCBmb3IgbGltaXRhdGlvbnMgb2Ygc2VsZWN0Um91dGUoKSBvbiBKQiBhbmQgSkIgTVIxLgotICAgICAqIERvIG5vdCB1c2Ugb24gSkIgTVIyIGFuZCBhYm92ZS4KLSAgICAgKi8KLSAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGNsYXNzIFNlbGVjdFJvdXRlV29ya2Fyb3VuZCB7Ci0gICAgICAgIHByaXZhdGUgTWV0aG9kIG1TZWxlY3RSb3V0ZUludE1ldGhvZDsKLQotICAgICAgICBwdWJsaWMgU2VsZWN0Um91dGVXb3JrYXJvdW5kKCkgewotICAgICAgICAgICAgaWYgKEJ1aWxkLlZFUlNJT04uU0RLX0lOVCA8IDE2IHx8IEJ1aWxkLlZFUlNJT04uU0RLX0lOVCA+IDE3KSB7Ci0gICAgICAgICAgICAgICAgdGhyb3cgbmV3IFVuc3VwcG9ydGVkT3BlcmF0aW9uRXhjZXB0aW9uKCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICB0cnkgewotICAgICAgICAgICAgICAgIG1TZWxlY3RSb3V0ZUludE1ldGhvZCA9IGFuZHJvaWQubWVkaWEuTWVkaWFSb3V0ZXIuY2xhc3MuZ2V0TWV0aG9kKAotICAgICAgICAgICAgICAgICAgICAgICAgInNlbGVjdFJvdXRlSW50IiwgaW50LmNsYXNzLCBhbmRyb2lkLm1lZGlhLk1lZGlhUm91dGVyLlJvdXRlSW5mby5jbGFzcyk7Ci0gICAgICAgICAgICB9IGNhdGNoIChOb1N1Y2hNZXRob2RFeGNlcHRpb24gZXgpIHsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIHB1YmxpYyB2b2lkIHNlbGVjdFJvdXRlKE9iamVjdCByb3V0ZXJPYmosIGludCB0eXBlcywgT2JqZWN0IHJvdXRlT2JqKSB7Ci0gICAgICAgICAgICBhbmRyb2lkLm1lZGlhLk1lZGlhUm91dGVyIHJvdXRlciA9IChhbmRyb2lkLm1lZGlhLk1lZGlhUm91dGVyKXJvdXRlck9iajsKLSAgICAgICAgICAgIGFuZHJvaWQubWVkaWEuTWVkaWFSb3V0ZXIuUm91dGVJbmZvIHJvdXRlID0KLSAgICAgICAgICAgICAgICAgICAgKGFuZHJvaWQubWVkaWEuTWVkaWFSb3V0ZXIuUm91dGVJbmZvKXJvdXRlT2JqOwotCi0gICAgICAgICAgICBpbnQgcm91dGVUeXBlcyA9IHJvdXRlLmdldFN1cHBvcnRlZFR5cGVzKCk7Ci0gICAgICAgICAgICBpZiAoKHJvdXRlVHlwZXMgJiBST1VURV9UWVBFX1VTRVIpID09IDApIHsKLSAgICAgICAgICAgICAgICAvLyBIYW5kbGUgbm9uLXVzZXIgcm91dGVzLgotICAgICAgICAgICAgICAgIC8vIE9uIEpCIGFuZCBKQiBNUjEsIHRoZSBzZWxlY3RSb3V0ZSgpIEFQSSBvbmx5IHN1cHBvcnRzIHByb2dyYW1tYXRpY2FsbHkKLSAgICAgICAgICAgICAgICAvLyBzZWxlY3RpbmcgdXNlciByb3V0ZXMuICBTbyBpbnN0ZWFkIHdlIHJlbHkgb24gdGhlIGhpZGRlbiBzZWxlY3RSb3V0ZUludCgpCi0gICAgICAgICAgICAgICAgLy8gbWV0aG9kIG9uIHRoZXNlIHZlcnNpb25zIG9mIHRoZSBwbGF0Zm9ybS4KLSAgICAgICAgICAgICAgICAvLyBUaGlzIGxpbWl0YXRpb24gd2FzIHJlbW92ZWQgaW4gSkIgTVIyLgotICAgICAgICAgICAgICAgIGlmIChtU2VsZWN0Um91dGVJbnRNZXRob2QgIT0gbnVsbCkgewotICAgICAgICAgICAgICAgICAgICB0cnkgewotICAgICAgICAgICAgICAgICAgICAgICAgbVNlbGVjdFJvdXRlSW50TWV0aG9kLmludm9rZShyb3V0ZXIsIHR5cGVzLCByb3V0ZSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47IC8vIHN1Y2Nlc3MhCi0gICAgICAgICAgICAgICAgICAgIH0gY2F0Y2ggKElsbGVnYWxBY2Nlc3NFeGNlcHRpb24gZXgpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIExvZy53KFRBRywgIkNhbm5vdCBwcm9ncmFtbWF0aWNhbGx5IHNlbGVjdCBub24tdXNlciByb3V0ZS4gICIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKyAiTWVkaWEgcm91dGluZyBtYXkgbm90IHdvcmsuIiwgZXgpOwotICAgICAgICAgICAgICAgICAgICB9IGNhdGNoIChJbnZvY2F0aW9uVGFyZ2V0RXhjZXB0aW9uIGV4KSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBMb2cudyhUQUcsICJDYW5ub3QgcHJvZ3JhbW1hdGljYWxseSBzZWxlY3Qgbm9uLXVzZXIgcm91dGUuICAiCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsgIk1lZGlhIHJvdXRpbmcgbWF5IG5vdCB3b3JrLiIsIGV4KTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgIExvZy53KFRBRywgIkNhbm5vdCBwcm9ncmFtbWF0aWNhbGx5IHNlbGVjdCBub24tdXNlciByb3V0ZSAiCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgKyAiYmVjYXVzZSB0aGUgcGxhdGZvcm0gaXMgbWlzc2luZyB0aGUgc2VsZWN0Um91dGVJbnQoKSAiCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgKyAibWV0aG9kLiAgTWVkaWEgcm91dGluZyBtYXkgbm90IHdvcmsuIik7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAvLyBEZWZhdWx0IGhhbmRsaW5nLgotICAgICAgICAgICAgcm91dGVyLnNlbGVjdFJvdXRlKHR5cGVzLCByb3V0ZSk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBXb3JrYXJvdW5kIHRoZSBmYWN0IHRoYXQgdGhlIGdldERlZmF1bHRSb3V0ZSgpIG1ldGhvZCBkb2VzIG5vdCBleGlzdCBpbiBKQiBhbmQgSkIgTVIxLgotICAgICAqIERvIG5vdCB1c2Ugb24gSkIgTVIyIGFuZCBhYm92ZS4KLSAgICAgKi8KLSAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGNsYXNzIEdldERlZmF1bHRSb3V0ZVdvcmthcm91bmQgewotICAgICAgICBwcml2YXRlIE1ldGhvZCBtR2V0U3lzdGVtQXVkaW9Sb3V0ZU1ldGhvZDsKLQotICAgICAgICBwdWJsaWMgR2V0RGVmYXVsdFJvdXRlV29ya2Fyb3VuZCgpIHsKLSAgICAgICAgICAgIGlmIChCdWlsZC5WRVJTSU9OLlNES19JTlQgPCAxNiB8fCBCdWlsZC5WRVJTSU9OLlNES19JTlQgPiAxNykgewotICAgICAgICAgICAgICAgIHRocm93IG5ldyBVbnN1cHBvcnRlZE9wZXJhdGlvbkV4Y2VwdGlvbigpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgdHJ5IHsKLSAgICAgICAgICAgICAgICBtR2V0U3lzdGVtQXVkaW9Sb3V0ZU1ldGhvZCA9Ci0gICAgICAgICAgICAgICAgICAgICAgICBhbmRyb2lkLm1lZGlhLk1lZGlhUm91dGVyLmNsYXNzLmdldE1ldGhvZCgiZ2V0U3lzdGVtQXVkaW9Sb3V0ZSIpOwotICAgICAgICAgICAgfSBjYXRjaCAoTm9TdWNoTWV0aG9kRXhjZXB0aW9uIGV4KSB7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICBwdWJsaWMgT2JqZWN0IGdldERlZmF1bHRSb3V0ZShPYmplY3Qgcm91dGVyT2JqKSB7Ci0gICAgICAgICAgICBhbmRyb2lkLm1lZGlhLk1lZGlhUm91dGVyIHJvdXRlciA9IChhbmRyb2lkLm1lZGlhLk1lZGlhUm91dGVyKXJvdXRlck9iajsKLQotICAgICAgICAgICAgaWYgKG1HZXRTeXN0ZW1BdWRpb1JvdXRlTWV0aG9kICE9IG51bGwpIHsKLSAgICAgICAgICAgICAgICB0cnkgewotICAgICAgICAgICAgICAgICAgICByZXR1cm4gbUdldFN5c3RlbUF1ZGlvUm91dGVNZXRob2QuaW52b2tlKHJvdXRlcik7Ci0gICAgICAgICAgICAgICAgfSBjYXRjaCAoSWxsZWdhbEFjY2Vzc0V4Y2VwdGlvbiBleCkgewotICAgICAgICAgICAgICAgIH0gY2F0Y2ggKEludm9jYXRpb25UYXJnZXRFeGNlcHRpb24gZXgpIHsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIC8vIENvdWxkIG5vdCBmaW5kIHRoZSBtZXRob2Qgb3IgaXQgZG9lcyBub3Qgd29yay4KLSAgICAgICAgICAgIC8vIFJldHVybiB0aGUgZmlyc3Qgcm91dGUgYW5kIGhvcGUgZm9yIHRoZSBiZXN0LgotICAgICAgICAgICAgcmV0dXJuIHJvdXRlci5nZXRSb3V0ZUF0KDApOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgc3RhdGljIGNsYXNzIENhbGxiYWNrUHJveHk8VCBleHRlbmRzIENhbGxiYWNrPgotICAgICAgICAgICAgZXh0ZW5kcyBhbmRyb2lkLm1lZGlhLk1lZGlhUm91dGVyLkNhbGxiYWNrIHsKLSAgICAgICAgcHJvdGVjdGVkIGZpbmFsIFQgbUNhbGxiYWNrOwotCi0gICAgICAgIHB1YmxpYyBDYWxsYmFja1Byb3h5KFQgY2FsbGJhY2spIHsKLSAgICAgICAgICAgIG1DYWxsYmFjayA9IGNhbGxiYWNrOwotICAgICAgICB9Ci0KLSAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgIHB1YmxpYyB2b2lkIG9uUm91dGVTZWxlY3RlZChhbmRyb2lkLm1lZGlhLk1lZGlhUm91dGVyIHJvdXRlciwKLSAgICAgICAgICAgICAgICBpbnQgdHlwZSwgYW5kcm9pZC5tZWRpYS5NZWRpYVJvdXRlci5Sb3V0ZUluZm8gcm91dGUpIHsKLSAgICAgICAgICAgIG1DYWxsYmFjay5vblJvdXRlU2VsZWN0ZWQodHlwZSwgcm91dGUpOwotICAgICAgICB9Ci0KLSAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgIHB1YmxpYyB2b2lkIG9uUm91dGVVbnNlbGVjdGVkKGFuZHJvaWQubWVkaWEuTWVkaWFSb3V0ZXIgcm91dGVyLAotICAgICAgICAgICAgICAgIGludCB0eXBlLCBhbmRyb2lkLm1lZGlhLk1lZGlhUm91dGVyLlJvdXRlSW5mbyByb3V0ZSkgewotICAgICAgICAgICAgbUNhbGxiYWNrLm9uUm91dGVVbnNlbGVjdGVkKHR5cGUsIHJvdXRlKTsKLSAgICAgICAgfQotCi0gICAgICAgIEBPdmVycmlkZQotICAgICAgICBwdWJsaWMgdm9pZCBvblJvdXRlQWRkZWQoYW5kcm9pZC5tZWRpYS5NZWRpYVJvdXRlciByb3V0ZXIsCi0gICAgICAgICAgICAgICAgYW5kcm9pZC5tZWRpYS5NZWRpYVJvdXRlci5Sb3V0ZUluZm8gcm91dGUpIHsKLSAgICAgICAgICAgIG1DYWxsYmFjay5vblJvdXRlQWRkZWQocm91dGUpOwotICAgICAgICB9Ci0KLSAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgIHB1YmxpYyB2b2lkIG9uUm91dGVSZW1vdmVkKGFuZHJvaWQubWVkaWEuTWVkaWFSb3V0ZXIgcm91dGVyLAotICAgICAgICAgICAgICAgIGFuZHJvaWQubWVkaWEuTWVkaWFSb3V0ZXIuUm91dGVJbmZvIHJvdXRlKSB7Ci0gICAgICAgICAgICBtQ2FsbGJhY2sub25Sb3V0ZVJlbW92ZWQocm91dGUpOwotICAgICAgICB9Ci0KLSAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgIHB1YmxpYyB2b2lkIG9uUm91dGVDaGFuZ2VkKGFuZHJvaWQubWVkaWEuTWVkaWFSb3V0ZXIgcm91dGVyLAotICAgICAgICAgICAgICAgIGFuZHJvaWQubWVkaWEuTWVkaWFSb3V0ZXIuUm91dGVJbmZvIHJvdXRlKSB7Ci0gICAgICAgICAgICBtQ2FsbGJhY2sub25Sb3V0ZUNoYW5nZWQocm91dGUpOwotICAgICAgICB9Ci0KLSAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgIHB1YmxpYyB2b2lkIG9uUm91dGVHcm91cGVkKGFuZHJvaWQubWVkaWEuTWVkaWFSb3V0ZXIgcm91dGVyLAotICAgICAgICAgICAgICAgIGFuZHJvaWQubWVkaWEuTWVkaWFSb3V0ZXIuUm91dGVJbmZvIHJvdXRlLAotICAgICAgICAgICAgICAgIGFuZHJvaWQubWVkaWEuTWVkaWFSb3V0ZXIuUm91dGVHcm91cCBncm91cCwgaW50IGluZGV4KSB7Ci0gICAgICAgICAgICBtQ2FsbGJhY2sub25Sb3V0ZUdyb3VwZWQocm91dGUsIGdyb3VwLCBpbmRleCk7Ci0gICAgICAgIH0KLQotICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgcHVibGljIHZvaWQgb25Sb3V0ZVVuZ3JvdXBlZChhbmRyb2lkLm1lZGlhLk1lZGlhUm91dGVyIHJvdXRlciwKLSAgICAgICAgICAgICAgICBhbmRyb2lkLm1lZGlhLk1lZGlhUm91dGVyLlJvdXRlSW5mbyByb3V0ZSwKLSAgICAgICAgICAgICAgICBhbmRyb2lkLm1lZGlhLk1lZGlhUm91dGVyLlJvdXRlR3JvdXAgZ3JvdXApIHsKLSAgICAgICAgICAgIG1DYWxsYmFjay5vblJvdXRlVW5ncm91cGVkKHJvdXRlLCBncm91cCk7Ci0gICAgICAgIH0KLQotICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgcHVibGljIHZvaWQgb25Sb3V0ZVZvbHVtZUNoYW5nZWQoYW5kcm9pZC5tZWRpYS5NZWRpYVJvdXRlciByb3V0ZXIsCi0gICAgICAgICAgICAgICAgYW5kcm9pZC5tZWRpYS5NZWRpYVJvdXRlci5Sb3V0ZUluZm8gcm91dGUpIHsKLSAgICAgICAgICAgIG1DYWxsYmFjay5vblJvdXRlVm9sdW1lQ2hhbmdlZChyb3V0ZSk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBzdGF0aWMgY2xhc3MgVm9sdW1lQ2FsbGJhY2tQcm94eTxUIGV4dGVuZHMgVm9sdW1lQ2FsbGJhY2s+Ci0gICAgICAgICAgICBleHRlbmRzIGFuZHJvaWQubWVkaWEuTWVkaWFSb3V0ZXIuVm9sdW1lQ2FsbGJhY2sgewotICAgICAgICBwcm90ZWN0ZWQgZmluYWwgVCBtQ2FsbGJhY2s7Ci0KLSAgICAgICAgcHVibGljIFZvbHVtZUNhbGxiYWNrUHJveHkoVCBjYWxsYmFjaykgewotICAgICAgICAgICAgbUNhbGxiYWNrID0gY2FsbGJhY2s7Ci0gICAgICAgIH0KLQotICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgcHVibGljIHZvaWQgb25Wb2x1bWVTZXRSZXF1ZXN0KGFuZHJvaWQubWVkaWEuTWVkaWFSb3V0ZXIuUm91dGVJbmZvIHJvdXRlLAotICAgICAgICAgICAgICAgIGludCB2b2x1bWUpIHsKLSAgICAgICAgICAgIG1DYWxsYmFjay5vblZvbHVtZVNldFJlcXVlc3Qocm91dGUsIHZvbHVtZSk7Ci0gICAgICAgIH0KLQotICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgcHVibGljIHZvaWQgb25Wb2x1bWVVcGRhdGVSZXF1ZXN0KGFuZHJvaWQubWVkaWEuTWVkaWFSb3V0ZXIuUm91dGVJbmZvIHJvdXRlLAotICAgICAgICAgICAgICAgIGludCBkaXJlY3Rpb24pIHsKLSAgICAgICAgICAgIG1DYWxsYmFjay5vblZvbHVtZVVwZGF0ZVJlcXVlc3Qocm91dGUsIGRpcmVjdGlvbik7Ci0gICAgICAgIH0KLSAgICB9Ci19CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9NZWRpYUNvbXBvbmVudHMvc3JjL2NvbS9hbmRyb2lkL3N1cHBvcnQvbWVkaWFyb3V0ZXIvbWVkaWEvTWVkaWFDb250cm9sSW50ZW50LmphdmEgYi9wYWNrYWdlcy9NZWRpYUNvbXBvbmVudHMvc3JjL2NvbS9hbmRyb2lkL3N1cHBvcnQvbWVkaWFyb3V0ZXIvbWVkaWEvTWVkaWFDb250cm9sSW50ZW50LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDFkOWU3NzcuLjAwMDAwMDAKLS0tIGEvcGFja2FnZXMvTWVkaWFDb21wb25lbnRzL3NyYy9jb20vYW5kcm9pZC9zdXBwb3J0L21lZGlhcm91dGVyL21lZGlhL01lZGlhQ29udHJvbEludGVudC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTIyOCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IDIwMTggVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAotICoKLSAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwotICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgotICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0gKgotICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLSAqCi0gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCi0gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAotICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCi0gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCi0gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KLSAqLwotCi1wYWNrYWdlIGNvbS5hbmRyb2lkLnN1cHBvcnQubWVkaWFyb3V0ZXIubWVkaWE7Ci0KLWltcG9ydCBhbmRyb2lkLmFwcC5QZW5kaW5nSW50ZW50OwotaW1wb3J0IGFuZHJvaWQuY29udGVudC5JbnRlbnQ7Ci1pbXBvcnQgYW5kcm9pZC5uZXQuVXJpOwotCi0vKioKLSAqIENvbnN0YW50cyBmb3IgbWVkaWEgY29udHJvbCBpbnRlbnRzLgotICogPHA+Ci0gKiBUaGlzIGNsYXNzIGRlY2xhcmVzIGEgc2V0IG9mIHN0YW5kYXJkIG1lZGlhIGNvbnRyb2wgaW50ZW50IGNhdGVnb3JpZXMgYW5kIGFjdGlvbnMgdGhhdAotICogYXBwbGljYXRpb25zIGNhbiB1c2UgdG8gaWRlbnRpZnkgdGhlIGNhcGFiaWxpdGllcyBvZiBtZWRpYSByb3V0ZXMgYW5kIGNvbnRyb2wgdGhlbS4KLSAqIDwvcD4KLSAqCi0gKiA8aDM+TWVkaWEgY29udHJvbCBpbnRlbnQgY2F0ZWdvcmllczwvaDM+Ci0gKiA8cD4KLSAqIE1lZGlhIGNvbnRyb2wgaW50ZW50IGNhdGVnb3JpZXMgc3BlY2lmeSBtZWFucyBieSB3aGljaCBhcHBsaWNhdGlvbnMgY2FuCi0gKiBzZW5kIG1lZGlhIHRvIHRoZSBkZXN0aW5hdGlvbiBvZiBhIG1lZGlhIHJvdXRlLiAgQ2F0ZWdvcmllcyBhcmUgc29tZXRpbWVzIHJlZmVycmVkCi0gKiB0byBhcyBkZXNjcmliaW5nICJ0eXBlcyIgb3IgImtpbmRzIiBvZiByb3V0ZXMuCi0gKiA8L3A+PHA+Ci0gKiBGb3IgZXhhbXBsZSwgaWYgYSByb3V0ZSBzdXBwb3J0cyB0aGUge0BsaW5rICNDQVRFR09SWV9SRU1PVEVfUExBWUJBQ0sgcmVtb3RlIHBsYXliYWNrIGNhdGVnb3J5fSwKLSAqIHRoZW4gYW4gYXBwbGljYXRpb24gY2FuIGFzayBpdCB0byBwbGF5IG1lZGlhIHJlbW90ZWx5IGJ5IHNlbmRpbmcgYQotICoge0BsaW5rICNBQ1RJT05fUExBWSBwbGF5fSBvciB7QGxpbmsgI0FDVElPTl9FTlFVRVVFIGVucXVldWV9IGludGVudCB3aXRoIHRoZSBVcmkgb2YgdGhlCi0gKiBtZWRpYSBjb250ZW50IHRvIHBsYXkuICBTdWNoIGEgcm91dGUgbWF5IHRoZW4gYmUgcmVmZXJyZWQgdG8gYXMKLSAqIGEgInJlbW90ZSBwbGF5YmFjayByb3V0ZSIgYmVjYXVzZSBpdCBzdXBwb3J0cyByZW1vdGUgcGxheWJhY2sgcmVxdWVzdHMuICBJdCBpcyBjb21tb24KLSAqIGZvciBhIHJvdXRlIHRvIHN1cHBvcnQgbXVsdGlwbGUgY2F0ZWdvcmllcyBvZiByZXF1ZXN0cyBhdCB0aGUgc2FtZSB0aW1lLCBzdWNoIGFzCi0gKiBsaXZlIGF1ZGlvIGFuZCBsaXZlIHZpZGVvLgotICogPC9wPjxwPgotICogVGhlIGZvbGxvd2luZyBzdGFuZGFyZCByb3V0ZSBjYXRlZ29yaWVzIGFyZSBkZWZpbmVkLgotICogPC9wPjx1bD4KLSAqIDxsaT57QGxpbmsgI0NBVEVHT1JZX0xJVkVfQVVESU8gTGl2ZSBhdWRpb306IFRoZSByb3V0ZSBzdXBwb3J0cyBzdHJlYW1pbmcgbGl2ZSBhdWRpbwotICogZnJvbSB0aGUgZGV2aWNlIHRvIHRoZSBkZXN0aW5hdGlvbi4gIExpdmUgYXVkaW8gcm91dGVzIGluY2x1ZGUgbG9jYWwgc3BlYWtlcnMKLSAqIGFuZCBCbHVldG9vdGggaGVhZHNldHMuCi0gKiA8bGk+e0BsaW5rICNDQVRFR09SWV9MSVZFX1ZJREVPIExpdmUgdmlkZW99OiBUaGUgcm91dGUgc3VwcG9ydHMgc3RyZWFtaW5nIGxpdmUgdmlkZW8KLSAqIGZyb20gdGhlIGRldmljZSB0byB0aGUgZGVzdGluYXRpb24uICBMaXZlIHZpZGVvIHJvdXRlcyBpbmNsdWRlIGxvY2FsIGRpc3BsYXlzCi0gKiBhbmQgd2lyZWxlc3MgZGlzcGxheXMgdGhhdCBzdXBwb3J0IG1pcnJvcmluZyBhbmQKLSAqIHtAbGluayBhbmRyb2lkLmFwcC5QcmVzZW50YXRpb24gcHJlc2VudGF0aW9uc30uICBMaXZlIHZpZGVvIHJvdXRlcyB0eXBpY2FsbHkgYWxzbwotICogc3VwcG9ydCBsaXZlIGF1ZGlvIGNhcGFiaWxpdGllcy4KLSAqIDxsaT57QGxpbmsgI0NBVEVHT1JZX1JFTU9URV9QTEFZQkFDSyBSZW1vdGUgcGxheWJhY2t9OiBUaGUgcm91dGUgc3VwcG9ydHMgc2VuZGluZwotICogcmVtb3RlIHBsYXliYWNrIHJlcXVlc3RzIGZvciBtZWRpYSBjb250ZW50IHRvIHRoZSBkZXN0aW5hdGlvbi4gIFRoZSBjb250ZW50IHRvIGJlCi0gKiBwbGF5ZWQgaXMgaWRlbnRpZmllZCBieSBhIFVyaSBhbmQgbWltZS10eXBlLgotICogPC91bD48cD4KLSAqIE1lZGlhIHJvdXRlIHByb3ZpZGVycyBtYXkgZGVmaW5lIGN1c3RvbSBtZWRpYSBjb250cm9sIGludGVudCBjYXRlZ29yaWVzIG9mIHRoZWlyIG93biBpbgotICogYWRkaXRpb24gdG8gdGhlIHN0YW5kYXJkIG9uZXMuICBDdXN0b20gY2F0ZWdvcmllcyBjYW4gYmUgdXNlZCB0byBwcm92aWRlIGEgdmFyaWV0eQotICogb2YgZmVhdHVyZXMgdG8gYXBwbGljYXRpb25zIHRoYXQgcmVjb2duaXplIGFuZCBrbm93IGhvdyB0byB1c2UgdGhlbS4gIEZvciBleGFtcGxlLAotICogYSBtZWRpYSByb3V0ZSBwcm92aWRlciBtaWdodCBkZWZpbmUgYSBjdXN0b20gY2F0ZWdvcnkgdG8gaW5kaWNhdGUgdGhhdCBpdHMgcm91dGVzCi0gKiBzdXBwb3J0IGEgc3BlY2lhbCBkZXZpY2Utc3BlY2lmaWMgY29udHJvbCBpbnRlcmZhY2UgaW4gYWRkaXRpb24gdG8gb3RoZXIKLSAqIHN0YW5kYXJkIGZlYXR1cmVzLgotICogPC9wPjxwPgotICogQXBwbGljYXRpb25zIGNhbiBkZXRlcm1pbmUgd2hpY2ggY2F0ZWdvcmllcyBhIHJvdXRlIHN1cHBvcnRzIGJ5IHVzaW5nIHRoZQotICoge0BsaW5rIE1lZGlhUm91dGVyLlJvdXRlSW5mbyNzdXBwb3J0c0NvbnRyb2xDYXRlZ29yeSBNZWRpYVJvdXRlci5Sb3V0ZUluZm8uc3VwcG9ydHNDb250cm9sQ2F0ZWdvcnl9Ci0gKiBvciB7QGxpbmsgTWVkaWFSb3V0ZXIuUm91dGVJbmZvI2dldENvbnRyb2xGaWx0ZXJzIE1lZGlhUm91dGVyLlJvdXRlSW5mby5nZXRDb250cm9sRmlsdGVyc30KLSAqIG1ldGhvZHMuICBBcHBsaWNhdGlvbnMgY2FuIGFsc28gc3BlY2lmeSB0aGUgdHlwZXMgb2Ygcm91dGVzIHRoYXQgdGhleSB3YW50IHRvIHVzZSBieQotICogY3JlYXRpbmcge0BsaW5rIE1lZGlhUm91dGVTZWxlY3RvciBtZWRpYSByb3V0ZSBzZWxlY3RvcnN9IHRoYXQgY29udGFpbiB0aGUgZGVzaXJlZAotICogY2F0ZWdvcmllcyBhbmQgYXJlIHVzZWQgdG8gZmlsdGVyIHJvdXRlcyBpbiBzZXZlcmFsIHBhcnRzIG9mIHRoZSBtZWRpYSByb3V0ZXIgQVBJLgotICogPC9wPgotICoKLSAqIDxoMz5NZWRpYSBjb250cm9sIGludGVudCBhY3Rpb25zPC9oMz4KLSAqIDxwPgotICogTWVkaWEgY29udHJvbCBpbnRlbnQgYWN0aW9ucyBzcGVjaWZ5IHBhcnRpY3VsYXIgZnVuY3Rpb25zIHRoYXQgYXBwbGljYXRpb25zCi0gKiBjYW4gYXNrIHRoZSBkZXN0aW5hdGlvbiBvZiBhIG1lZGlhIHJvdXRlIHRvIHBlcmZvcm0uICBNZWRpYSByb3V0ZSBjb250cm9sIHJlcXVlc3RzCi0gKiB0YWtlIHRoZSBmb3JtIG9mIGludGVudHMgaW4gYSBzaW1pbGFyIG1hbm5lciB0byBvdGhlciBpbnRlbnRzIHVzZWQgdG8gc3RhcnQgYWN0aXZpdGllcwotICogb3Igc2VuZCBicm9hZGNhc3RzLiAgVGhlIGRpZmZlcmVuY2UgaXMgdGhhdCBtZWRpYSBjb250cm9sIGludGVudHMgYXJlIGRpcmVjdGVkIHRvCi0gKiByb3V0ZXMgcmF0aGVyIHRoYW4gYWN0aXZpdHkgb3IgYnJvYWRjYXN0IHJlY2VpdmVyIGNvbXBvbmVudHMuCi0gKiA8L3A+PHA+Ci0gKiBFYWNoIG1lZGlhIHJvdXRlIGNvbnRyb2wgaW50ZW50IHNwZWNpZmllcyBhbiBhY3Rpb24sIGEgY2F0ZWdvcnkgYW5kIHNvbWUgbnVtYmVyIG9mIHBhcmFtZXRlcnMKLSAqIHRoYXQgYXJlIHN1cHBsaWVkIGFzIGV4dHJhcy4gIEFwcGxpY2F0aW9ucyBzZW5kIG1lZGlhIGNvbnRyb2wgcmVxdWVzdHMgdG8gcm91dGVzIHVzaW5nIHRoZQotICoge0BsaW5rIE1lZGlhUm91dGVyLlJvdXRlSW5mbyNzZW5kQ29udHJvbFJlcXVlc3QgTWVkaWFSb3V0ZXIuUm91dGVJbmZvLnNlbmRDb250cm9sUmVxdWVzdH0KLSAqIG1ldGhvZCBhbmQgcmVjZWl2ZSByZXN1bHRzIHZpYSBhIGNhbGxiYWNrLgotICogPC9wPjxwPgotICogQWxsIG1lZGlhIGNvbnRyb2wgaW50ZW50IGFjdGlvbnMgYXJlIGFzc29jaWF0ZWQgd2l0aCB0aGUgbWVkaWEgY29udHJvbCBpbnRlbnQgY2F0ZWdvcmllcwotICogdGhhdCBzdXBwb3J0IHRoZW0uICBUaHVzIG9ubHkgcmVtb3RlIHBsYXliYWNrIHJvdXRlcyBtYXkgcGVyZm9ybSByZW1vdGUgcGxheWJhY2sgYWN0aW9ucy4KLSAqIFRoZSBkb2N1bWVudGF0aW9uIG9mIGVhY2ggYWN0aW9uIHNwZWNpZmllcyB0aGUgY2F0ZWdvcnkgdG8gd2hpY2ggdGhlIGFjdGlvbiBiZWxvbmdzLAotICogdGhlIHBhcmFtZXRlcnMgaXQgcmVxdWlyZXMsIGFuZCB0aGUgcmVzdWx0cyBpdCByZXR1cm5zLgotICogPC9wPgotICoKLSAqIDxoMz5MaXZlIGF1ZGlvIGFuZCBsaXZlIHZpZGVvIHJvdXRlczwvaDM+Ci0gKiA8cD4KLSAqIHtAbGluayAjQ0FURUdPUllfTElWRV9BVURJTyBMaXZlIGF1ZGlvfSBhbmQge0BsaW5rICNDQVRFR09SWV9MSVZFX1ZJREVPIGxpdmUgdmlkZW99Ci0gKiByb3V0ZXMgcHJlc2VudCBtZWRpYSB1c2luZyBzdGFuZGFyZCBzeXN0ZW0gaW50ZXJmYWNlcyBzdWNoIGFzIGF1ZGlvIHN0cmVhbXMsCi0gKiB7QGxpbmsgYW5kcm9pZC5hcHAuUHJlc2VudGF0aW9uIHByZXNlbnRhdGlvbnN9IG9yIGRpc3BsYXkgbWlycm9yaW5nLiAgVGhlc2Ugcm91dGVzIGFyZQotICogdGhlIGVhc2llc3QgdG8gdXNlIGJlY2F1c2UgYXBwbGljYXRpb25zIHNpbXBseSByZW5kZXIgY29udGVudCBsb2NhbGx5IG9uIHRoZSBkZXZpY2UKLSAqIGFuZCB0aGUgc3lzdGVtIHN0cmVhbXMgaXQgdG8gdGhlIHJvdXRlIGRlc3RpbmF0aW9uIGF1dG9tYXRpY2FsbHkuCi0gKiA8L3A+PHA+Ci0gKiBJbiBtb3N0IGNhc2VzLCBhcHBsaWNhdGlvbnMgY2FuIHN0cmVhbSBjb250ZW50IHRvIGxpdmUgYXVkaW8gYW5kIGxpdmUgdmlkZW8gcm91dGVzIGluCi0gKiB0aGUgc2FtZSB3YXkgdGhleSB3b3VsZCBwbGF5IHRoZSBjb250ZW50IGxvY2FsbHkgd2l0aG91dCBhbnkgbW9kaWZpY2F0aW9uLiAgSG93ZXZlciwKLSAqIGFwcGxpY2F0aW9ucyBtYXkgYWxzbyBiZSBhYmxlIHRvIHRha2UgYWR2YW50YWdlIG9mIG1vcmUgc29waGlzdGljYXRlZCBmZWF0dXJlcyBzdWNoCi0gKiBhcyBzZWNvbmQtc2NyZWVuIHByZXNlbnRhdGlvbiBBUElzIHRoYXQgYXJlIHBhcnRpY3VsYXIgdG8gdGhlc2Ugcm91dGVzLgotICogPC9wPgotICoKLSAqIDxoMz5SZW1vdGUgcGxheWJhY2sgcm91dGVzPC9oMz4KLSAqIDxwPgotICoge0BsaW5rICNDQVRFR09SWV9SRU1PVEVfUExBWUJBQ0sgUmVtb3RlIHBsYXliYWNrfSByb3V0ZXMgcHJlc2VudCBtZWRpYSByZW1vdGVseQotICogYnkgcGxheWluZyBjb250ZW50IGZyb20gYSBVcmkuCi0gKiBUaGVzZSByb3V0ZXMgZGVzdGluYXRpb25zIHRha2UgcmVzcG9uc2liaWxpdHkgZm9yIGZldGNoaW5nIGFuZCByZW5kZXJpbmcgY29udGVudAotICogb24gdGhlaXIgb3duLiAgQXBwbGljYXRpb25zIGRvIG5vdCByZW5kZXIgdGhlIGNvbnRlbnQgdGhlbXNlbHZlczsgaW5zdGVhZCwgYXBwbGljYXRpb25zCi0gKiBzZW5kIGNvbnRyb2wgcmVxdWVzdHMgdG8gaW5pdGlhdGUgcGxheSwgcGF1c2UsIHJlc3VtZSwgb3Igc3RvcCBtZWRpYSBpdGVtcyBhbmQgcmVjZWl2ZQotICogc3RhdHVzIHVwZGF0ZXMgYXMgdGhleSBjaGFuZ2Ugc3RhdGUuCi0gKiA8L3A+Ci0gKgotICogPGg0PlNlc3Npb25zPC9oND4KLSAqIDxwPgotICogRWFjaCByZW1vdGUgbWVkaWEgcGxheWJhY2sgYWN0aW9uIGlzIGNvbmR1Y3RlZCB3aXRoaW4gdGhlIHNjb3BlIG9mIGEgc2Vzc2lvbi4KLSAqIFNlc3Npb25zIGFyZSB1c2VkIHRvIHByZXZlbnQgYXBwbGljYXRpb25zIGZyb20gYWNjaWRlbnRhbGx5IGludGVyZmVyaW5nIHdpdGggb25lCi0gKiBhbm90aGVyIGJlY2F1c2UgYXQgbW9zdCBvbmUgc2Vzc2lvbiBjYW4gYmUgdmFsaWQgYXQgYSB0aW1lLgotICogPC9wPjxwPgotICogQSBzZXNzaW9uIGNhbiBiZSBjcmVhdGVkIHVzaW5nIHRoZSB7QGxpbmsgI0FDVElPTl9TVEFSVF9TRVNTSU9OIHN0YXJ0IHNlc3Npb24gYWN0aW9ufQotICogYW5kIHRlcm1pbmF0ZWQgdXNpbmcgdGhlIHtAbGluayAjQUNUSU9OX0VORF9TRVNTSU9OIGVuZCBzZXNzaW9uIGFjdGlvbn0gd2hlbiB0aGUKLSAqIHJvdXRlIHByb3ZpZGVzIGV4cGxpY2l0IHNlc3Npb24gbWFuYWdlbWVudCBmZWF0dXJlcy4KLSAqIDwvcD48cD4KLSAqIEV4cGxpY2l0IHNlc3Npb24gbWFuYWdlbWVudCB3YXMgYWRkZWQgaW4gYSBsYXRlciByZXZpc2lvbiBvZiB0aGUgcHJvdG9jb2wgc28gbm90Ci0gKiBhbGwgcm91dGVzIHN1cHBvcnQgaXQuICBJZiB0aGUgcm91dGUgZG9lcyBub3Qgc3VwcG9ydCBleHBsaWNpdCBzZXNzaW9uIG1hbmFnZW1lbnQKLSAqIHRoZW4gaW1wbGljaXQgc2Vzc2lvbiBtYW5hZ2VtZW50IG1heSBzdGlsbCBiZSB1c2VkLiAgSW1wbGljaXQgc2Vzc2lvbiBtYW5hZ2VtZW50Ci0gKiByZWxpZXMgb24gdGhlIHVzZSBvZiB0aGUge0BsaW5rICNBQ1RJT05fUExBWSBwbGF5fSBhbmQge0BsaW5rICNBQ1RJT05fRU5RVUVVRSBlbnF1ZXVlfQotICogYWN0aW9ucyB3aGljaCBoYXZlIHRoZSBzaWRlLWVmZmVjdCBvZiBjcmVhdGluZyBhIG5ldyBzZXNzaW9uIGlmIG5vbmUgaXMgcHJvdmlkZWQKLSAqIGFzIGFyZ3VtZW50LgotICogPC9wPjxwPgotICogV2hlbiBhIG5ldyBzZXNzaW9uIGlzIGNyZWF0ZWQsIHRoZSBwcmV2aW91cyBzZXNzaW9uIGlzIGludmFsaWRhdGVkIGFuZCBhbnkgb25nb2luZwotICogbWVkaWEgcGxheWJhY2sgaXMgc3RvcHBlZCBiZWZvcmUgdGhlIHJlcXVlc3RlZCBhY3Rpb24gaXMgcGVyZm9ybWVkLiAgQW55IGF0dGVtcHQKLSAqIHRvIHVzZSBhbiBpbnZhbGlkYXRlZCBzZXNzaW9uIHdpbGwgcmVzdWx0IGluIGFuIGVycm9yLiAgKFByb3RvY29sIGltcGxlbWVudGF0aW9ucwotICogYXJlIGVuY291cmFnZWQgdG8gYWdncmVzc2l2ZWx5IGRpc2NhcmQgaW5mb3JtYXRpb24gYXNzb2NpYXRlZCB3aXRoIGludmFsaWRhdGVkIHNlc3Npb25zCi0gKiBzaW5jZSBpdCBpcyBubyBsb25nZXIgb2YgdXNlLikKLSAqIDwvcD48cD4KLSAqIEVhY2ggc2Vzc2lvbiBpcyBpZGVudGlmaWVkIGJ5IGEgdW5pcXVlIHNlc3Npb24gaWQgdGhhdCBtYXkgYmUgdXNlZCB0byBjb250cm9sCi0gKiB0aGUgc2Vzc2lvbiB1c2luZyBhY3Rpb25zIHN1Y2ggYXMgcGF1c2UsIHJlc3VtZSwgc3RvcCBhbmQgZW5kIHNlc3Npb24uCi0gKiA8L3A+Ci0gKgotICogPGg0Pk1lZGlhIGl0ZW1zPC9oND4KLSAqIDxwPgotICogRWFjaCBzdWNjZXNzZnVsIHtAbGluayAjQUNUSU9OX1BMQVkgcGxheX0gb3Ige0BsaW5rICNBQ1RJT05fRU5RVUVVRSBlbnF1ZXVlfSBhY3Rpb24KLSAqIHJldHVybnMgYSB1bmlxdWUgbWVkaWEgaXRlbSBpZCB0aGF0IGFuIGFwcGxpY2F0aW9uIGNhbiB1c2UgdG8gbW9uaXRvciBhbmQgY29udHJvbAotICogcGxheWJhY2suICBUaGUgbWVkaWEgaXRlbSBpZCBtYXkgYmUgcGFzc2VkIHRvIG90aGVyIGFjdGlvbnMgc3VjaCBhcwotICoge0BsaW5rICNBQ1RJT05fU0VFSyBzZWVrfSBvciB7QGxpbmsgI0FDVElPTl9HRVRfU1RBVFVTIGdldCBzdGF0dXN9LiAgSXQgd2lsbCBhbHNvIGFwcGVhcgotICogYXMgYSBwYXJhbWV0ZXIgaW4gc3RhdHVzIHVwZGF0ZSBicm9hZGNhc3RzIHRvIGlkZW50aWZ5IHRoZSBhc3NvY2lhdGVkIHBsYXliYWNrIHJlcXVlc3QuCi0gKiA8L3A+PHA+Ci0gKiBFYWNoIG1lZGlhIGl0ZW0gaXMgc2NvcGVkIHRvIHRoZSBzZXNzaW9uIGluIHdoaWNoIGl0IHdhcyBjcmVhdGVkLiAgVGhlcmVmb3JlIG1lZGlhIGl0ZW0KLSAqIGlkcyBhcmUgb25seSBldmVyIHVzZWQgdG9nZXRoZXIgd2l0aCBzZXNzaW9uIGlkcy4gIE1lZGlhIGl0ZW0gaWRzIGFyZSBtZWFuaW5nbGVzcwotICogb24gdGhlaXIgb3duLiAgV2hlbiB0aGUgc2Vzc2lvbiBpcyBpbnZhbGlkYXRlZCwgYWxsIG9mIGl0cyBtZWRpYSBpdGVtcyBhcmUgYWxzbwotICogaW52YWxpZGF0ZWQuCi0gKiA8L3A+Ci0gKgotICogPGg0PlRoZSBwbGF5YmFjayBxdWV1ZTwvaDQ+Ci0gKiA8cD4KLSAqIEVhY2ggc2Vzc2lvbiBoYXMgaXRzIG93biBwbGF5YmFjayBxdWV1ZSB0aGF0IGNvbnNpc3RzIG9mIHRoZSBtZWRpYSBpdGVtcyB0aGF0Ci0gKiBhcmUgcGVuZGluZywgcGxheWluZywgYnVmZmVyaW5nIG9yIHBhdXNlZC4gIEl0ZW1zIGFyZSBhZGRlZCB0byB0aGUgcXVldWUgd2hlbgotICogYSBwbGF5YmFjayByZXF1ZXN0IGlzIGlzc3VlZC4gIEl0ZW1zIGFyZSByZW1vdmVkIGZyb20gdGhlIHF1ZXVlIHdoZW4gdGhleSBhcmUgbm8KLSAqIGxvbmdlciBlbGlnaWJsZSBmb3IgcGxheWJhY2sgKGVudGVyIHRlcm1pbmFsIHN0YXRlcykuCi0gKiA8L3A+PHA+Ci0gKiBBcyBkZXNjcmliZWQgaW4gdGhlIHtAbGluayBNZWRpYUl0ZW1TdGF0dXN9IGNsYXNzLCBtZWRpYSBpdGVtcyBpbml0aWFsbHkKLSAqIHN0YXJ0IGluIGEgcGVuZGluZyBzdGF0ZSwgdHJhbnNpdGlvbiB0byB0aGUgcGxheWluZyAob3IgYnVmZmVyaW5nIG9yIHBhdXNlZCkgc3RhdGUKLSAqIGR1cmluZyBwbGF5YmFjaywgYW5kIGVuZCBpbiBhIGZpbmlzaGVkLCBjYW5jZWxlZCwgaW52YWxpZGF0ZWQgb3IgZXJyb3Igc3RhdGUuCi0gKiBPbmNlIHRoZSBjdXJyZW50IGl0ZW0gZW50ZXJzIGEgdGVybWluYWwgc3RhdGUsIHBsYXliYWNrIHByb2NlZWRzIG9uIHRvIHRoZQotICogbmV4dCBpdGVtLgotICogPC9wPjxwPgotICogVGhlIGFwcGxpY2F0aW9uIHNob3VsZCBkZXRlcm1pbmUgd2hldGhlciB0aGUgcm91dGUgc3VwcG9ydHMgcXVldWluZyBieSBjaGVja2luZwotICogd2hldGhlciB0aGUge0BsaW5rICNBQ1RJT05fRU5RVUVVRX0gYWN0aW9uIGlzIGRlY2xhcmVkIGluIHRoZSByb3V0ZSdzIGNvbnRyb2wgZmlsdGVyCi0gKiB1c2luZyB7QGxpbmsgTWVkaWFSb3V0ZXIuUm91dGVJbmZvI3N1cHBvcnRzQ29udHJvbFJlcXVlc3QgUm91dGVJbmZvLnN1cHBvcnRzQ29udHJvbFJlcXVlc3R9LgotICogPC9wPjxwPgotICogSWYgdGhlIHtAbGluayAjQUNUSU9OX0VOUVVFVUV9IGFjdGlvbiBpcyBzdXBwb3J0ZWQgYnkgdGhlIHJvdXRlLCB0aGVuIHRoZSByb3V0ZSBwcm9taXNlcwotICogdG8gYWxsb3cgYXQgbGVhc3QgdHdvIGl0ZW1zIChwb3NzaWJseSBtb3JlKSB0byBiZSBlbnF1ZXVlZCBhdCBhIHRpbWUuICBFbnF1ZXVlZCBpdGVtcyBwbGF5Ci0gKiBiYWNrIHRvIGJhY2sgb25lIGFmdGVyIHRoZSBvdGhlciBhcyB0aGUgcHJldmlvdXMgaXRlbSBjb21wbGV0ZXMuICBJZGVhbGx5IHRoZXJlIHNob3VsZAotICogYmUgbm8gYXVkaWJsZSBwYXVzZSBiZXR3ZWVuIGl0ZW1zIGZvciBzdGFuZGFyZCBhdWRpbyBjb250ZW50IHR5cGVzLgotICogPC9wPjxwPgotICogSWYgdGhlIHtAbGluayAjQUNUSU9OX0VOUVVFVUV9IGFjdGlvbiBpcyBub3Qgc3VwcG9ydGVkIGJ5IHRoZSByb3V0ZSwgdGhlbiB0aGUgcXVldWUKLSAqIGVmZmVjdGl2ZWx5IGNvbnRhaW5zIGF0IG1vc3Qgb25lIGl0ZW0gYXQgYSB0aW1lLiAgRWFjaCBwbGF5IGFjdGlvbiBoYXMgdGhlIGVmZmVjdCBvZgotICogY2xlYXJpbmcgdGhlIHF1ZXVlIGFuZCByZXNldHRpbmcgaXRzIHN0YXRlIGJlZm9yZSB0aGUgbmV4dCBpdGVtIGlzIHBsYXllZC4KLSAqIDwvcD4KLSAqCi0gKiA8aDQ+SW1wYWN0IG9mIHBhdXNlLCByZXN1bWUsIHN0b3AgYW5kIHBsYXkgYWN0aW9ucyBvbiB0aGUgcGxheWJhY2sgcXVldWU8L2g0PgotICogPHA+Ci0gKiBUaGUgcGF1c2UsIHJlc3VtZSBhbmQgc3RvcCBhY3Rpb25zIGFmZmVjdCB0aGUgc2Vzc2lvbidzIHdob2xlIHF1ZXVlLiAgUGF1c2UgY2F1c2VzCi0gKiB0aGUgcGxheWJhY2sgcXVldWUgdG8gYmUgc3VzcGVuZGVkIG5vIG1hdHRlciB3aGljaCBpdGVtIGlzIGN1cnJlbnRseSBwbGF5aW5nLgotICogUmVzdW1lIHJldmVyc2VzIHRoZSBlZmZlY3RzIG9mIHBhdXNlLiAgU3RvcCBjbGVhcnMgdGhlIHF1ZXVlIGFuZCBhbHNvIHJlc2V0cwotICogdGhlIHBhdXNlIGZsYWcganVzdCBsaWtlIHJlc3VtZS4KLSAqIDwvcD48cD4KLSAqIEFzIGRlc2NyaWJlZCBlYXJsaWVyLCB0aGUgcGxheSBhY3Rpb24gaGFzIHRoZSBlZmZlY3Qgb2YgY2xlYXJpbmcgdGhlIHF1ZXVlCi0gKiBhbmQgY29tcGxldGVseSByZXNldHRpbmcgaXRzIHN0YXRlIChsaWtlIHRoZSBzdG9wIGFjdGlvbikgdGhlbiBlbnF1ZXVpbmcgYQotICogbmV3IG1lZGlhIGl0ZW0gdG8gYmUgcGxheWVkIGltbWVkaWF0ZWx5LiAgUGxheSBpcyB0aGVyZWZvcmUgZXF1aXZhbGVudAotICogdG8gc3RvcCBmb2xsb3dlZCBieSBhbiBhY3Rpb24gdG8gZW5xdWV1ZSBhbiBpdGVtLgotICogPC9wPjxwPgotICogVGhlIHBsYXkgYWN0aW9uIGlzIGFsc28gc3BlY2lhbCBpbiB0aGF0IGl0IGNhbiBiZSB1c2VkIHRvIGNyZWF0ZSBuZXcgc2Vzc2lvbnMuCi0gKiBBbiBhcHBsaWNhdGlvbiB3aXRoIHNpbXBsZSBuZWVkcyBtYXkgZmluZCB0aGF0IGl0IG9ubHkgbmVlZHMgdG8gdXNlIHBsYXkKLSAqIChhbmQgb2NjYXNpb25hbGx5IHN0b3ApIHRvIGNvbnRyb2wgcGxheWJhY2suCi0gKiA8L3A+Ci0gKgotICogPGg0PlJlc29sdmluZyBjb25mbGljdHMgYmV0d2VlbiBhcHBsaWNhdGlvbnM8L2g0PgotICogPHA+Ci0gKiBXaGVuIGFuIGFwcGxpY2F0aW9uIGhhcyBhIHZhbGlkIHNlc3Npb24sIGl0IGlzIGVzc2VudGlhbGx5IGluIGNvbnRyb2wgb2YgcmVtb3RlIHBsYXliYWNrCi0gKiBvbiB0aGUgcm91dGUuICBObyBvdGhlciBhcHBsaWNhdGlvbiBjYW4gdmlldyBvciBtb2RpZnkgdGhlIHJlbW90ZSBwbGF5YmFjayBzdGF0ZQotICogb2YgdGhhdCBhcHBsaWNhdGlvbidzIHNlc3Npb24gd2l0aG91dCBrbm93aW5nIGl0cyBpZC4KLSAqIDwvcD48cD4KLSAqIEhvd2V2ZXIsIG90aGVyIGFwcGxpY2F0aW9ucyBjYW4gcGVyZm9ybSBhY3Rpb25zIHRoYXQgaGF2ZSB0aGUgZWZmZWN0IG9mIHN0b3BwaW5nCi0gKiBwbGF5YmFjayBhbmQgaW52YWxpZGF0aW5nIHRoZSBjdXJyZW50IHNlc3Npb24uICBXaGVuIHRoaXMgb2NjdXJzLCB0aGUgZm9ybWVyIGFwcGxpY2F0aW9uCi0gKiB3aWxsIGJlIGluZm9ybWVkIHRoYXQgaXQgaGFzIGxvc3QgY29udHJvbCBieSB3YXkgb2YgaW5kaXZpZHVhbCBtZWRpYSBpdGVtIHN0YXR1cwotICogdXBkYXRlIGJyb2FkY2FzdHMgdGhhdCBpbmRpY2F0ZSB0aGF0IGl0cyBxdWV1ZWQgbWVkaWEgaXRlbXMgaGF2ZSBiZWNvbWUKLSAqIHtAbGluayBNZWRpYUl0ZW1TdGF0dXMjUExBWUJBQ0tfU1RBVEVfSU5WQUxJREFURUQgaW52YWxpZGF0ZWR9LiAgVGhpcyBicm9hZGNhc3QKLSAqIGltcGxpZXMgdGhhdCBwbGF5YmFjayB3YXMgdGVybWluYXRlZCBhYm5vcm1hbGx5IGJ5IGFuIGV4dGVybmFsIGNhdXNlLgotICogPC9wPjxwPgotICogQXBwbGljYXRpb25zIHNob3VsZCBoYW5kbGUgY29uZmxpY3RzIGNvbnNlcnZhdGl2ZWx5IHRvIGFsbG93IG90aGVyIGFwcGxpY2F0aW9ucyB0bwotICogc21vb3RobHkgYXNzdW1lIGNvbnRyb2wgb3ZlciB0aGUgcm91dGUuICBXaGVuIGEgY29uZmxpY3Qgb2NjdXJzLCB0aGUgY3VycmVudGx5IHBsYXlpbmcKLSAqIGFwcGxpY2F0aW9uIHNob3VsZCByZWxlYXNlIGl0cyBzZXNzaW9uIGFuZCBhbGxvdyB0aGUgbmV3IGFwcGxpY2F0aW9uIHRvIHVzZSB0aGUKLSAqIHJvdXRlIHVudGlsIHN1Y2ggdGltZSBhcyB0aGUgdXNlciBpbnRlcnZlbmVzIHRvIHRha2Ugb3ZlciB0aGUgcm91dGUgYWdhaW4gYW5kIGJlZ2luCi0gKiBhIG5ldyBwbGF5YmFjayBzZXNzaW9uLgotICogPC9wPgotICoKLSAqIDxoND5CYXNpYyBhY3Rpb25zPC9oND4KLSAqIDxwPgotICogVGhlIGZvbGxvd2luZyBiYXNpYyBhY3Rpb25zIG11c3QgYmUgc3VwcG9ydGVkIChhbGwgb3Igbm90aGluZykgYnkgYWxsIHJlbW90ZQotICogcGxheWJhY2sgcm91dGVzLiAgVGhlc2UgYWN0aW9ucyBmb3JtIHRoZSBiYXNpcyBvZiB0aGUgcmVtb3RlIHBsYXliYWNrIHByb3RvY29sCi0gKiBhbmQgYXJlIHJlcXVpcmVkIGluIGFsbCBpbXBsZW1lbnRhdGlvbnMuCi0gKiA8L3A+PHVsPgotICogPGxpPntAbGluayAjQUNUSU9OX1BMQVkgUGxheX06IFN0YXJ0cyBwbGF5aW5nIGNvbnRlbnQgc3BlY2lmaWVkIGJ5IGEgZ2l2ZW4gVXJpCi0gKiBhbmQgcmV0dXJucyBhIG5ldyBtZWRpYSBpdGVtIGlkIHRvIGRlc2NyaWJlIHRoZSByZXF1ZXN0LiAgSW1wbGljaXRseSBjcmVhdGVzIGEgbmV3Ci0gKiBzZXNzaW9uIGlmIG5vIHNlc3Npb24gaWQgd2FzIHNwZWNpZmllZCBhcyBhIHBhcmFtZXRlci4KLSAqIDxsaT57QGxpbmsgI0FDVElPTl9TRUVLIFNlZWt9OiBTZXRzIHRoZSBjb250ZW50IHBsYXliYWNrIHBvc2l0aW9uIG9mIGEgc3BlY2lmaWMgbWVkaWEgaXRlbS4KLSAqIDxsaT57QGxpbmsgI0FDVElPTl9HRVRfU1RBVFVTIEdldCBzdGF0dXN9OiBHZXRzIHRoZSBzdGF0dXMgb2YgYSBtZWRpYSBpdGVtCi0gKiBpbmNsdWRpbmcgdGhlIGl0ZW0ncyBjdXJyZW50IHBsYXliYWNrIHBvc2l0aW9uIGFuZCBwcm9ncmVzcy4KLSAqIDxsaT57QGxpbmsgI0FDVElPTl9QQVVTRSBQYXVzZX06IFBhdXNlcyBwbGF5YmFjayBvZiB0aGUgcXVldWUuCi0gKiA8bGk+e0BsaW5rICNBQ1RJT05fUkVTVU1FIFJlc3VtZX06IFJlc3VtZXMgcGxheWJhY2sgb2YgdGhlIHF1ZXVlLgotICogPGxpPntAbGluayAjQUNUSU9OX1NUT1AgU3RvcH06IFN0b3BzIHBsYXliYWNrLCBjbGVhcnMgdGhlIHF1ZXVlLCBhbmQgcmVzZXRzIHRoZQotICogcGF1c2Ugc3RhdGUuCi0gKiA8L3VsPgotICoKLSAqIDxoND5RdWV1ZSBhY3Rpb25zPC9oND4KLSAqIDxwPgotICogVGhlIGZvbGxvd2luZyBxdWV1ZSBhY3Rpb25zIG11c3QgYmUgc3VwcG9ydGVkIChhbGwgb3Igbm90aGluZykgYnkgcmVtb3RlCi0gKiBwbGF5YmFjayByb3V0ZXMgdGhhdCBvZmZlciBvcHRpb25hbCBxdWV1aW5nIGNhcGFiaWxpdGllcy4KLSAqIDwvcD48dWw+Ci0gKiA8bGk+e0BsaW5rICNBQ1RJT05fRU5RVUVVRSBFbnF1ZXVlfTogRW5xdWV1ZXMgY29udGVudCBzcGVjaWZpZWQgYnkgYSBnaXZlbiBVcmkKLSAqIGFuZCByZXR1cm5zIGEgbmV3IG1lZGlhIGl0ZW0gaWQgdG8gZGVzY3JpYmUgdGhlIHJlcXVlc3QuICBJbXBsaWNpdGx5IGNyZWF0ZXMgYSBuZXcKLSAqIHNlc3Npb24gaWYgbm8gc2Vzc2lvbiBpZCB3YXMgc3BlY2lmaWVkIGFzIGEgcGFyYW1ldGVyLgotICogPGxpPntAbGluayAjQUNUSU9OX1JFTU9WRSBSZW1vdmV9OiBSZW1vdmVzIGEgc3BlY2lmaWVkIG1lZGlhIGl0ZW0gZnJvbSB0aGUgcXVldWUuCi0gKiA8L3VsPgotICoKLSAqIDxoND5TZXNzaW9uIGFjdGlvbnM8L2g0PgotICogPHA+Ci0gKiBUaGUgZm9sbG93aW5nIHNlc3Npb24gYWN0aW9ucyBtdXN0IGJlIHN1cHBvcnRlZCAoYWxsIG9yIG5vdGhpbmcpIGJ5IHJlbW90ZQotICogcGxheWJhY2sgcm91dGVzIHRoYXQgb2ZmZXIgb3B0aW9uYWwgc2Vzc2lvbiBtYW5hZ2VtZW50IGNhcGFiaWxpdGllcy4KLSAqIDwvcD48dWw+Ci0gKiA8bGk+e0BsaW5rICNBQ1RJT05fU1RBUlRfU0VTU0lPTiBTdGFydCBzZXNzaW9ufTogU3RhcnRzIGEgbmV3IHNlc3Npb24gZXhwbGljaXRseS4KLSAqIDxsaT57QGxpbmsgI0FDVElPTl9HRVRfU0VTU0lPTl9TVEFUVVMgR2V0IHNlc3Npb24gc3RhdHVzfTogR2V0cyB0aGUgc3RhdHVzIG9mIGEgc2Vzc2lvbi4KLSAqIDxsaT57QGxpbmsgI0FDVElPTl9FTkRfU0VTU0lPTiBFbmQgc2Vzc2lvbn06IEVuZHMgYSBzZXNzaW9uIGV4cGxpY2l0bHkuCi0gKiA8L3VsPgotICoKLSAqIDxoND5JbXBsZW1lbnRhdGlvbiBub3RlPC9oND4KLSAqIDxwPgotICogSW1wbGVtZW50YXRpb25zIG9mIHRoZSByZW1vdGUgcGxheWJhY2sgcHJvdG9jb2wgbXVzdCBpbXBsZW1lbnQgPGVtPmFsbDwvZW0+IG9mIHRoZQotICogZG9jdW1lbnRlZCBhY3Rpb25zLCBwYXJhbWV0ZXJzIGFuZCByZXN1bHRzLiAgTm90ZSB0aGF0IHRoZSBkb2N1bWVudGF0aW9uIGlzIHdyaXR0ZW4gZnJvbQotICogdGhlIHBlcnNwZWN0aXZlIG9mIGEgY2xpZW50IG9mIHRoZSBwcm90b2NvbC4gIEluIHBhcnRpY3VsYXIsIHdoZW5ldmVyIGEgcGFyYW1ldGVyCi0gKiBpcyBkZXNjcmliZWQgYXMgYmVpbmcgIm9wdGlvbmFsIiwgaXQgaXMgb25seSBmcm9tIHRoZSBwZXJzcGVjdGl2ZSBvZiB0aGUgY2xpZW50LgotICogQ29tcGxpYW50IG1lZGlhIHJvdXRlIHByb3ZpZGVyIGltcGxlbWVudGF0aW9ucyBvZiB0aGlzIHByb3RvY29sIG11c3Qgc3VwcG9ydCBhbGwKLSAqIG9mIHRoZSBmZWF0dXJlcyBkZXNjcmliZWQgaGVyZWluLgotICogPC9wPgotICovCi1wdWJsaWMgZmluYWwgY2xhc3MgTWVkaWFDb250cm9sSW50ZW50IHsKLSAgICAvKiBSb3V0ZSBjYXRlZ29yaWVzLiAqLwotCi0gICAgLyoqCi0gICAgICogTWVkaWEgY29udHJvbCBjYXRlZ29yeTogTGl2ZSBhdWRpby4KLSAgICAgKiA8cD4KLSAgICAgKiBBIHJvdXRlIHRoYXQgc3VwcG9ydHMgbGl2ZSBhdWRpbyByb3V0aW5nIHdpbGwgYWxsb3cgdGhlIG1lZGlhIGF1ZGlvIHN0cmVhbQotICAgICAqIHRvIGJlIHNlbnQgdG8gc3VwcG9ydGVkIGRlc3RpbmF0aW9ucy4gIFRoaXMgY2FuIGluY2x1ZGUgaW50ZXJuYWwgc3BlYWtlcnMgb3IKLSAgICAgKiBhdWRpbyBqYWNrcyBvbiB0aGUgZGV2aWNlIGl0c2VsZiwgQTJEUCBkZXZpY2VzLCBhbmQgbW9yZS4KLSAgICAgKiA8L3A+PHA+Ci0gICAgICogV2hlbiBhIGxpdmUgYXVkaW8gcm91dGUgaXMgc2VsZWN0ZWQsIGF1ZGlvIHJvdXRpbmcgaXMgdHJhbnNwYXJlbnQgdG8gdGhlIGFwcGxpY2F0aW9uLgotICAgICAqIEFsbCBhdWRpbyBwbGF5ZWQgb24gdGhlIG1lZGlhIHN0cmVhbSB3aWxsIGJlIHJvdXRlZCB0byB0aGUgc2VsZWN0ZWQgZGVzdGluYXRpb24uCi0gICAgICogPC9wPjxwPgotICAgICAqIFJlZmVyIHRvIHRoZSBjbGFzcyBkb2N1bWVudGF0aW9uIGZvciBkZXRhaWxzIGFib3V0IGxpdmUgYXVkaW8gcm91dGVzLgotICAgICAqIDwvcD4KLSAgICAgKi8KLSAgICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBDQVRFR09SWV9MSVZFX0FVRElPID0gImFuZHJvaWQubWVkaWEuaW50ZW50LmNhdGVnb3J5LkxJVkVfQVVESU8iOwotCi0gICAgLyoqCi0gICAgICogTWVkaWEgY29udHJvbCBjYXRlZ29yeTogTGl2ZSB2aWRlby4KLSAgICAgKiA8cD4KLSAgICAgKiBBIHJvdXRlIHRoYXQgc3VwcG9ydHMgbGl2ZSB2aWRlbyByb3V0aW5nIHdpbGwgYWxsb3cgYSBtaXJyb3JlZCB2ZXJzaW9uCi0gICAgICogb2YgdGhlIGRldmljZSdzIHByaW1hcnkgZGlzcGxheSBvciBhIGN1c3RvbWl6ZWQKLSAgICAgKiB7QGxpbmsgYW5kcm9pZC5hcHAuUHJlc2VudGF0aW9uIFByZXNlbnRhdGlvbn0gdG8gYmUgc2VudCB0byBzdXBwb3J0ZWQKLSAgICAgKiBkZXN0aW5hdGlvbnMuCi0gICAgICogPC9wPjxwPgotICAgICAqIFdoZW4gYSBsaXZlIHZpZGVvIHJvdXRlIGlzIHNlbGVjdGVkLCBhdWRpbyBhbmQgdmlkZW8gcm91dGluZyBpcyB0cmFuc3BhcmVudAotICAgICAqIHRvIHRoZSBhcHBsaWNhdGlvbi4gIEJ5IGRlZmF1bHQsIGF1ZGlvIGFuZCB2aWRlbyBpcyByb3V0ZWQgdG8gdGhlIHNlbGVjdGVkCi0gICAgICogZGVzdGluYXRpb24uICBGb3IgY2VydGFpbiBsaXZlIHZpZGVvIHJvdXRlcywgdGhlIGFwcGxpY2F0aW9uIG1heSBhbHNvIHVzZSBhCi0gICAgICoge0BsaW5rIGFuZHJvaWQuYXBwLlByZXNlbnRhdGlvbiBQcmVzZW50YXRpb259IHRvIHJlcGxhY2UgdGhlIG1pcnJvcmVkIHZpZXcKLSAgICAgKiBvbiB0aGUgZXh0ZXJuYWwgZGlzcGxheSB3aXRoIGRpZmZlcmVudCBjb250ZW50LgotICAgICAqIDwvcD48cD4KLSAgICAgKiBSZWZlciB0byB0aGUgY2xhc3MgZG9jdW1lbnRhdGlvbiBmb3IgZGV0YWlscyBhYm91dCBsaXZlIHZpZGVvIHJvdXRlcy4KLSAgICAgKiA8L3A+Ci0gICAgICoKLSAgICAgKiBAc2VlIE1lZGlhUm91dGVyLlJvdXRlSW5mbyNnZXRQcmVzZW50YXRpb25EaXNwbGF5KCkKLSAgICAgKiBAc2VlIGFuZHJvaWQuYXBwLlByZXNlbnRhdGlvbgotICAgICAqLwotICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIENBVEVHT1JZX0xJVkVfVklERU8gPSAiYW5kcm9pZC5tZWRpYS5pbnRlbnQuY2F0ZWdvcnkuTElWRV9WSURFTyI7Ci0KLSAgICAvKioKLSAgICAgKiBNZWRpYSBjb250cm9sIGNhdGVnb3J5OiBSZW1vdGUgcGxheWJhY2suCi0gICAgICogPHA+Ci0gICAgICogQSByb3V0ZSB0aGF0IHN1cHBvcnRzIHJlbW90ZSBwbGF5YmFjayByb3V0aW5nIHdpbGwgYWxsb3cgYW4gYXBwbGljYXRpb24gdG8gc2VuZAotICAgICAqIHJlcXVlc3RzIHRvIHBsYXkgY29udGVudCByZW1vdGVseSB0byBzdXBwb3J0ZWQgZGVzdGluYXRpb25zLgotICAgICAqIDwvcD48cD4KLSAgICAgKiBSZW1vdGUgcGxheWJhY2sgcm91dGVzIGRlc3RpbmF0aW9ucyBvcGVyYXRlIGluZGVwZW5kZW50bHkgb2YgdGhlIGxvY2FsIGRldmljZS4KLSAgICAgKiBXaGVuIGEgcmVtb3RlIHBsYXliYWNrIHJvdXRlIGlzIHNlbGVjdGVkLCB0aGUgYXBwbGljYXRpb24gY2FuIGNvbnRyb2wgdGhlIGNvbnRlbnQKLSAgICAgKiBwbGF5aW5nIG9uIHRoZSBkZXN0aW5hdGlvbiBieSBzZW5kaW5nIG1lZGlhIGNvbnRyb2wgYWN0aW9ucyB0byB0aGUgcm91dGUuCi0gICAgICogVGhlIGFwcGxpY2F0aW9uIG1heSBhbHNvIHJlY2VpdmUgc3RhdHVzIHVwZGF0ZXMgZnJvbSB0aGUgcm91dGUgcmVnYXJkaW5nCi0gICAgICogcmVtb3RlIHBsYXliYWNrLgotICAgICAqIDwvcD48cD4KLSAgICAgKiBSZWZlciB0byB0aGUgY2xhc3MgZG9jdW1lbnRhdGlvbiBmb3IgZGV0YWlscyBhYm91dCByZW1vdGUgcGxheWJhY2sgcm91dGVzLgotICAgICAqIDwvcD4KLSAgICAgKgotICAgICAqIEBzZWUgTWVkaWFSb3V0ZXIuUm91dGVJbmZvI3NlbmRDb250cm9sUmVxdWVzdAotICAgICAqLwotICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIENBVEVHT1JZX1JFTU9URV9QTEFZQkFDSyA9Ci0gICAgICAgICAgICAiYW5kcm9pZC5tZWRpYS5pbnRlbnQuY2F0ZWdvcnkuUkVNT1RFX1BMQVlCQUNLIjsKLQotICAgIC8qIFJlbW90ZSBwbGF5YmFjayBhY3Rpb25zIHRoYXQgYWZmZWN0IGluZGl2aWR1YWwgaXRlbXMuICovCi0KLSAgICAvKioKLSAgICAgKiBSZW1vdGUgcGxheWJhY2sgbWVkaWEgY29udHJvbCBhY3Rpb246IFBsYXkgbWVkaWEgaXRlbS4KLSAgICAgKiA8cD4KLSAgICAgKiBVc2VkIHdpdGggcm91dGVzIHRoYXQgc3VwcG9ydCB7QGxpbmsgI0NBVEVHT1JZX1JFTU9URV9QTEFZQkFDSyByZW1vdGUgcGxheWJhY2t9Ci0gICAgICogbWVkaWEgY29udHJvbC4KLSAgICAgKiA8L3A+PHA+Ci0gICAgICogVGhpcyBhY3Rpb24gY2F1c2VzIGEgcmVtb3RlIHBsYXliYWNrIHJvdXRlIHRvIHN0YXJ0IHBsYXlpbmcgY29udGVudCB3aXRoCi0gICAgICogdGhlIHtAbGluayBVcml9IHNwZWNpZmllZCBpbiB0aGUge0BsaW5rIEludGVudH0ncyB7QGxpbmsgSW50ZW50I2dldERhdGEoKSBkYXRhIHVyaX0uCi0gICAgICogVGhlIGFjdGlvbiByZXR1cm5zIGEgbWVkaWEgc2Vzc2lvbiBpZCBhbmQgbWVkaWEgaXRlbSBpZCB3aGljaCBjYW4gYmUgdXNlZAotICAgICAqIHRvIGNvbnRyb2wgcGxheWJhY2sgdXNpbmcgb3RoZXIgcmVtb3RlIHBsYXliYWNrIGFjdGlvbnMuCi0gICAgICogPC9wPjxwPgotICAgICAqIE9uY2UgaW5pdGlhdGVkLCBwbGF5YmFjayBvZiB0aGUgc3BlY2lmaWVkIGNvbnRlbnQgd2lsbCBiZSBtYW5hZ2VkIGluZGVwZW5kZW50bHkKLSAgICAgKiBieSB0aGUgZGVzdGluYXRpb24uICBUaGUgYXBwbGljYXRpb24gd2lsbCByZWNlaXZlIHN0YXR1cyB1cGRhdGVzIGFzIHRoZSBzdGF0ZQotICAgICAqIG9mIHRoZSBtZWRpYSBpdGVtIGNoYW5nZXMuCi0gICAgICogPC9wPjxwPgotICAgICAqIElmIHRoZSBkYXRhIHVyaSBzcGVjaWZpZXMgYW4gSFRUUCBvciBIVFRQUyBzY2hlbWUsIHRoZW4gdGhlIGRlc3RpbmF0aW9uIGlzCi0gICAgICogcmVzcG9uc2libGUgZm9yIGZvbGxvd2luZyBIVFRQIHJlZGlyZWN0cyB0byBhIHJlYXNvbmFibGUgZGVwdGggb2YgYXQgbGVhc3QgMwotICAgICAqIGxldmVscyBhcyBtaWdodCB0eXBpY2FsbHkgYmUgaGFuZGxlZCBieSBhIHdlYiBicm93c2VyLiAgSWYgYW4gSFRUUCBlcnJvcgotICAgICAqIG9jY3VycywgdGhlbiB0aGUgZGVzdGluYXRpb24gc2hvdWxkIHNlbmQgYSB7QGxpbmsgTWVkaWFJdGVtU3RhdHVzIHN0YXR1cyB1cGRhdGV9Ci0gICAgICogYmFjayB0byB0aGUgY2xpZW50IGluZGljYXRpbmcgdGhlIHtAbGluayBNZWRpYUl0ZW1TdGF0dXMjUExBWUJBQ0tfU1RBVEVfRVJST1IgZXJyb3J9Ci0gICAgICoge0BsaW5rIE1lZGlhSXRlbVN0YXR1cyNnZXRQbGF5YmFja1N0YXRlKCkgcGxheWJhY2sgc3RhdGV9LgotICAgICAqIDwvcD4KLSAgICAgKgotICAgICAqIDxoMz5PbmUgaXRlbSBhdCBhIHRpbWU8L2gzPgotICAgICAqIDxwPgotICAgICAqIEVhY2ggc3VjY2Vzc2Z1bCBwbGF5IGFjdGlvbiA8ZW0+cmVwbGFjZXM8L2VtPiB0aGUgcHJldmlvdXMgcGxheSBhY3Rpb24uCi0gICAgICogSWYgYW4gaXRlbSBpcyBhbHJlYWR5IHBsYXlpbmcsIHRoZW4gaXQgaXMgY2FuY2VsZWQsIHRoZSBzZXNzaW9uJ3MgcGxheWJhY2sgcXVldWUKLSAgICAgKiBpcyBjbGVhcmVkIGFuZCB0aGUgbmV3IGl0ZW0gYmVnaW5zIHBsYXlpbmcgaW1tZWRpYXRlbHkgKHJlZ2FyZGxlc3Mgb2YKLSAgICAgKiB3aGV0aGVyIHRoZSBwcmV2aW91c2x5IHBsYXlpbmcgaXRlbSBoYWQgYmVlbiBwYXVzZWQpLgotICAgICAqIDwvcD48cD4KLSAgICAgKiBQbGF5IGlzIHRoZXJlZm9yZSBlcXVpdmFsZW50IHRvIHtAbGluayAjQUNUSU9OX1NUT1Agc3RvcH0gZm9sbG93ZWQgYnkgYW4gYWN0aW9uCi0gICAgICogdG8gZW5xdWV1ZSBhIG5ldyBtZWRpYSBpdGVtIHRvIGJlIHBsYXllZCBpbW1lZGlhdGVseS4KLSAgICAgKiA8L3A+Ci0gICAgICoKLSAgICAgKiA8aDM+U2Vzc2lvbnM8L2gzPgotICAgICAqIDxwPgotICAgICAqIFRoaXMgcmVxdWVzdCBoYXMgdGhlIGVmZmVjdCBvZiBpbXBsaWNpdGx5IGNyZWF0aW5nIGEgbWVkaWEgc2Vzc2lvbiB3aGVuZXZlciB0aGUKLSAgICAgKiBhcHBsaWNhdGlvbiBkb2VzIG5vdCBzcGVjaWZ5IHRoZSB7QGxpbmsgI0VYVFJBX1NFU1NJT05fSUQgc2Vzc2lvbiBpZH0gcGFyYW1ldGVyLgotICAgICAqIEJlY2F1c2UgdGhlcmUgY2FuIG9ubHkgYmUgYXQgbW9zdCBvbmUgdmFsaWQgc2Vzc2lvbiBhdCBhIHRpbWUsIGNyZWF0aW5nIGEgbmV3IHNlc3Npb24KLSAgICAgKiBoYXMgdGhlIHNpZGUtZWZmZWN0IG9mIGludmFsaWRhdGluZyBhbnkgZXhpc3Rpbmcgc2Vzc2lvbnMgYW5kIHRoZWlyIG1lZGlhIGl0ZW1zLAotICAgICAqIHRoZW4gaGFuZGxpbmcgdGhlIHBsYXliYWNrIHJlcXVlc3Qgd2l0aCBhIG5ldyBzZXNzaW9uLgotICAgICAqIDwvcD48cD4KLSAgICAgKiBJZiB0aGUgYXBwbGljYXRpb24gc3BlY2lmaWVzIGFuIGludmFsaWQgc2Vzc2lvbiBpZCwgdGhlbiBhbiBlcnJvciBpcyByZXR1cm5lZC4KLSAgICAgKiBXaGVuIHRoaXMgaGFwcGVucywgdGhlIGFwcGxpY2F0aW9uIHNob3VsZCBhc3N1bWUgdGhhdCBpdHMgc2Vzc2lvbgotICAgICAqIGlzIG5vIGxvbmdlciB2YWxpZC4gIFRvIG9idGFpbiBhIG5ldyBzZXNzaW9uLCB0aGUgYXBwbGljYXRpb24gbWF5IHRyeSBhZ2FpbgotICAgICAqIGFuZCBvbWl0IHRoZSBzZXNzaW9uIGlkIHBhcmFtZXRlci4gIEhvd2V2ZXIsIHRoZSBhcHBsaWNhdGlvbiBzaG91bGQKLSAgICAgKiBvbmx5IHJldHJ5IHJlcXVlc3RzIGR1ZSB0byBhbiBleHBsaWNpdCBhY3Rpb24gcGVyZm9ybWVkIGJ5IHRoZSB1c2VyLAotICAgICAqIHN1Y2ggYXMgdGhlIHVzZXIgY2xpY2tpbmcgb24gYSAicGxheSIgYnV0dG9uIGluIHRoZSBVSSwgc2luY2UgYW5vdGhlcgotICAgICAqIGFwcGxpY2F0aW9uIG1heSBiZSB0cnlpbmcgdG8gdGFrZSBjb250cm9sIG9mIHRoZSByb3V0ZSBhbmQgdGhlIGZvcm1lcgotICAgICAqIGFwcGxpY2F0aW9uIHNob3VsZCB0cnkgdG8gc3RheSBvdXQgb2YgaXRzIHdheS4KLSAgICAgKiA8L3A+PHA+Ci0gICAgICogRm9yIG1vcmUgaW5mb3JtYXRpb24gb24gc2Vzc2lvbnMsIHF1ZXVlcyBhbmQgbWVkaWEgaXRlbXMsIHBsZWFzZSByZWZlciB0byB0aGUKLSAgICAgKiBjbGFzcyBkb2N1bWVudGF0aW9uLgotICAgICAqIDwvcD4KLSAgICAgKgotICAgICAqIDxoMz5SZXF1ZXN0IHBhcmFtZXRlcnM8L2gzPgotICAgICAqIDx1bD4KLSAgICAgKiA8bGk+e0BsaW5rICNFWFRSQV9TRVNTSU9OX0lEfSA8ZW0+KG9wdGlvbmFsKTwvZW0+OiBTcGVjaWZpZXMgdGhlIHNlc3Npb24gaWQgb2YgdGhlCi0gICAgICogc2Vzc2lvbiB0byB3aGljaCB0aGUgcGxheWJhY2sgcmVxdWVzdCBiZWxvbmdzLiAgSWYgb21pdHRlZCwgYSBuZXcgc2Vzc2lvbgotICAgICAqIGlzIGNyZWF0ZWQgaW1wbGljaXRseS4KLSAgICAgKiA8bGk+e0BsaW5rICNFWFRSQV9JVEVNX0NPTlRFTlRfUE9TSVRJT059IDxlbT4ob3B0aW9uYWwpPC9lbT46IFNwZWNpZmllcyB0aGUgaW5pdGlhbAotICAgICAqIGNvbnRlbnQgcGxheWJhY2sgcG9zaXRpb24gYXMgYSBsb25nIGludGVnZXIgbnVtYmVyIG9mIG1pbGxpc2Vjb25kcyBmcm9tCi0gICAgICogdGhlIGJlZ2lubmluZyBvZiB0aGUgY29udGVudC4KLSAgICAgKiA8bGk+e0BsaW5rICNFWFRSQV9JVEVNX01FVEFEQVRBfSA8ZW0+KG9wdGlvbmFsKTwvZW0+OiBTcGVjaWZpZXMgbWV0YWRhdGEgYXNzb2NpYXRlZAotICAgICAqIHdpdGggdGhlIGNvbnRlbnQgc3VjaCBhcyB0aGUgdGl0bGUgb2YgYSBzb25nLgotICAgICAqIDxsaT57QGxpbmsgI0VYVFJBX0lURU1fU1RBVFVTX1VQREFURV9SRUNFSVZFUn0gPGVtPihvcHRpb25hbCk8L2VtPjogU3BlY2lmaWVzIGEKLSAgICAgKiB7QGxpbmsgUGVuZGluZ0ludGVudH0gZm9yIGEgYnJvYWRjYXN0IHJlY2VpdmVyIHRoYXQgd2lsbCByZWNlaXZlIHN0YXR1cyB1cGRhdGVzCi0gICAgICogYWJvdXQgdGhlIG1lZGlhIGl0ZW0uCi0gICAgICogPC91bD4KLSAgICAgKgotICAgICAqIDxoMz5SZXN1bHQgZGF0YTwvaDM+Ci0gICAgICogPHVsPgotICAgICAqIDxsaT57QGxpbmsgI0VYVFJBX1NFU1NJT05fSUR9IDxlbT4oYWx3YXlzIHJldHVybmVkKTwvZW0+OiBTcGVjaWZpZXMgdGhlIHNlc3Npb24gaWQgb2YgdGhlCi0gICAgICogc2Vzc2lvbiB0aGF0IHdhcyBhZmZlY3RlZCBieSB0aGUgcmVxdWVzdC4gIFRoaXMgd2lsbCBiZSBhIG5ldyBzZXNzaW9uIGluCi0gICAgICogdGhlIGNhc2Ugd2hlcmUgbm8gc2Vzc2lvbiBpZCB3YXMgc3VwcGxpZWQgYXMgYSBwYXJhbWV0ZXIuCi0gICAgICogPGxpPntAbGluayAjRVhUUkFfU0VTU0lPTl9TVEFUVVN9IDxlbT4ob3B0aW9uYWwsIG9sZCBpbXBsZW1lbnRhdGlvbnMgbWF5Ci0gICAgICogb21pdCB0aGlzIGtleSk8L2VtPjogU3BlY2lmaWVzIHRoZSBzdGF0dXMgb2YgdGhlIG1lZGlhIHNlc3Npb24uCi0gICAgICogPGxpPntAbGluayAjRVhUUkFfSVRFTV9JRH0gPGVtPihhbHdheXMgcmV0dXJuZWQpPC9lbT46IFNwZWNpZmllcyBhbiBvcGFxdWUgc3RyaW5nIGlkZW50aWZpZXIKLSAgICAgKiB0byB1c2UgdG8gcmVmZXIgdG8gdGhlIG1lZGlhIGl0ZW0gaW4gc3Vic2VxdWVudCByZXF1ZXN0cyBzdWNoIGFzCi0gICAgICoge0BsaW5rICNBQ1RJT05fR0VUX1NUQVRVU30uCi0gICAgICogPGxpPntAbGluayAjRVhUUkFfSVRFTV9TVEFUVVN9IDxlbT4oYWx3YXlzIHJldHVybmVkKTwvZW0+OiBTcGVjaWZpZXMgdGhlIGluaXRpYWwgc3RhdHVzIG9mCi0gICAgICogdGhlIG5ldyBtZWRpYSBpdGVtLgotICAgICAqIDwvdWw+Ci0gICAgICoKLSAgICAgKiA8aDM+U3RhdHVzIHVwZGF0ZXM8L2gzPgotICAgICAqIDxwPgotICAgICAqIElmIHRoZSBjbGllbnQgc3VwcGxpZXMgYW4KLSAgICAgKiB7QGxpbmsgI0VYVFJBX0lURU1fU1RBVFVTX1VQREFURV9SRUNFSVZFUiBpdGVtIHN0YXR1cyB1cGRhdGUgcmVjZWl2ZXJ9Ci0gICAgICogdGhlbiB0aGUgbWVkaWEgcm91dGUgcHJvdmlkZXIgaXMgcmVzcG9uc2libGUgZm9yIHNlbmRpbmcgc3RhdHVzIHVwZGF0ZXMgdG8gdGhlIHJlY2VpdmVyCi0gICAgICogd2hlbiBzaWduaWZpY2FudCBtZWRpYSBpdGVtIHN0YXRlIGNoYW5nZXMgb2NjdXIgc3VjaCBhcyB3aGVuIHBsYXliYWNrIHN0YXJ0cyBvcgotICAgICAqIHN0b3BzLiAgVGhlIHJlY2VpdmVyIHdpbGwgbm90IGJlIGludm9rZWQgZm9yIGNvbnRlbnQgcGxheWJhY2sgcG9zaXRpb24gY2hhbmdlcy4KLSAgICAgKiBUaGUgYXBwbGljYXRpb24gbWF5IHJldHJpZXZlIHRoZSBjdXJyZW50IHBsYXliYWNrIHBvc2l0aW9uIHdoZW4gbmVjZXNzYXJ5Ci0gICAgICogdXNpbmcgdGhlIHtAbGluayAjQUNUSU9OX0dFVF9TVEFUVVN9IHJlcXVlc3QuCi0gICAgICogPC9wPjxwPgotICAgICAqIFJlZmVyIHRvIHtAbGluayBNZWRpYUl0ZW1TdGF0dXN9IGZvciBkZXRhaWxzLgotICAgICAqIDwvcD4KLSAgICAgKgotICAgICAqIDxoMz5FcnJvcnM8L2gzPgotICAgICAqIDxwPgotICAgICAqIFRoaXMgYWN0aW9uIHJldHVybnMgYW4gZXJyb3IgaWYgYSBzZXNzaW9uIGlkIHdhcyBwcm92aWRlZCBidXQgaXMgdW5rbm93biBvcgotICAgICAqIG5vIGxvbmdlciB2YWxpZCwgaWYgdGhlIGl0ZW0gVXJpIG9yIGNvbnRlbnQgdHlwZSBpcyBub3Qgc3VwcG9ydGVkLCBvciBpZgotICAgICAqIGFueSBvdGhlciBhcmd1bWVudHMgYXJlIGludmFsaWQuCi0gICAgICogPC9wPjx1bD4KLSAgICAgKiA8bGk+e0BsaW5rICNFWFRSQV9FUlJPUl9DT0RFfSA8ZW0+KG9wdGlvbmFsKTwvZW0+OiBTcGVjaWZpZXMgdGhlIGNhdXNlIG9mIHRoZSBlcnJvci4KLSAgICAgKiA8L3VsPgotICAgICAqCi0gICAgICogPGgzPkV4YW1wbGU8L2gzPgotICAgICAqIDxwcmU+Ci0gICAgICogTWVkaWFSb3V0ZXIgbWVkaWFSb3V0ZXIgPSBNZWRpYVJvdXRlci5nZXRJbnN0YW5jZShjb250ZXh0KTsKLSAgICAgKiBNZWRpYVJvdXRlci5Sb3V0ZUluZm8gcm91dGUgPSBtZWRpYVJvdXRlci5nZXRTZWxlY3RlZFJvdXRlKCk7Ci0gICAgICogSW50ZW50IGludGVudCA9IG5ldyBJbnRlbnQoTWVkaWFDb250cm9sSW50ZW50LkFDVElPTl9QTEFZKTsKLSAgICAgKiBpbnRlbnQuYWRkQ2F0ZWdvcnkoTWVkaWFDb250cm9sSW50ZW50LkNBVEVHT1JZX1JFTU9URV9QTEFZQkFDSyk7Ci0gICAgICogaW50ZW50LnNldERhdGFBbmRUeXBlKCJodHRwOi8vZXhhbXBsZS5jb20vdmlkZW9zL21vdmllLm1wNCIsICJ2aWRlby9tcDQiKTsKLSAgICAgKiBpZiAocm91dGUuc3VwcG9ydHNDb250cm9sUmVxdWVzdChpbnRlbnQpKSB7Ci0gICAgICogICAgIE1lZGlhUm91dGVyLkNvbnRyb2xSZXF1ZXN0Q2FsbGJhY2sgY2FsbGJhY2sgPSBuZXcgTWVkaWFSb3V0ZXIuQ29udHJvbFJlcXVlc3RDYWxsYmFjaygpIHsKLSAgICAgKiAgICAgICAgIHB1YmxpYyB2b2lkIG9uUmVzdWx0KEJ1bmRsZSBkYXRhKSB7Ci0gICAgICogICAgICAgICAgICAgLy8gVGhlIHJlcXVlc3Qgc3VjY2VlZGVkLgotICAgICAqICAgICAgICAgICAgIC8vIFBsYXliYWNrIG1heSBiZSBjb250cm9sbGVkIHVzaW5nIHRoZSByZXR1cm5lZCBzZXNzaW9uIGFuZCBpdGVtIGlkLgotICAgICAqICAgICAgICAgICAgIFN0cmluZyBzZXNzaW9uSWQgPSBkYXRhLmdldFN0cmluZyhNZWRpYUNvbnRyb2xJbnRlbnQuRVhUUkFfU0VTU0lPTl9JRCk7Ci0gICAgICogICAgICAgICAgICAgU3RyaW5nIGl0ZW1JZCA9IGRhdGEuZ2V0U3RyaW5nKE1lZGlhQ29udHJvbEludGVudC5FWFRSQV9JVEVNX0lEKTsKLSAgICAgKiAgICAgICAgICAgICBNZWRpYUl0ZW1TdGF0dXMgc3RhdHVzID0gTWVkaWFJdGVtU3RhdHVzLmZyb21CdW5kbGUoZGF0YS5nZXRCdW5kbGUoCi0gICAgICogICAgICAgICAgICAgICAgICAgICBNZWRpYUNvbnRyb2xJbnRlbnQuRVhUUkFfSVRFTV9TVEFUVVMpKTsKLSAgICAgKiAgICAgICAgICAgICAvLyAuLi4KLSAgICAgKiAgICAgICAgIH0KLSAgICAgKgotICAgICAqICAgICAgICAgcHVibGljIHZvaWQgb25FcnJvcihTdHJpbmcgbWVzc2FnZSwgQnVuZGxlIGRhdGEpIHsKLSAgICAgKiAgICAgICAgICAgICAvLyBBbiBlcnJvciBvY2N1cnJlZCEKLSAgICAgKiAgICAgICAgIH0KLSAgICAgKiAgICAgfTsKLSAgICAgKiAgICAgcm91dGUuc2VuZENvbnRyb2xSZXF1ZXN0KGludGVudCwgY2FsbGJhY2spOwotICAgICAqIH08L3ByZT4KLSAgICAgKgotICAgICAqIEBzZWUgTWVkaWFSb3V0ZXIuUm91dGVJbmZvI3NlbmRDb250cm9sUmVxdWVzdAotICAgICAqIEBzZWUgI0NBVEVHT1JZX1JFTU9URV9QTEFZQkFDSwotICAgICAqIEBzZWUgI0FDVElPTl9TRUVLCi0gICAgICogQHNlZSAjQUNUSU9OX0dFVF9TVEFUVVMKLSAgICAgKiBAc2VlICNBQ1RJT05fUEFVU0UKLSAgICAgKiBAc2VlICNBQ1RJT05fUkVTVU1FCi0gICAgICogQHNlZSAjQUNUSU9OX1NUT1AKLSAgICAgKi8KLSAgICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBBQ1RJT05fUExBWSA9ICJhbmRyb2lkLm1lZGlhLmludGVudC5hY3Rpb24uUExBWSI7Ci0KLSAgICAvKioKLSAgICAgKiBSZW1vdGUgcGxheWJhY2sgbWVkaWEgY29udHJvbCBhY3Rpb246IEVucXVldWUgbWVkaWEgaXRlbS4KLSAgICAgKiA8cD4KLSAgICAgKiBVc2VkIHdpdGggcm91dGVzIHRoYXQgc3VwcG9ydCB7QGxpbmsgI0NBVEVHT1JZX1JFTU9URV9QTEFZQkFDSyByZW1vdGUgcGxheWJhY2t9Ci0gICAgICogbWVkaWEgY29udHJvbC4KLSAgICAgKiA8L3A+PHA+Ci0gICAgICogVGhpcyBhY3Rpb24gd29ya3MganVzdCBsaWtlIHtAbGluayAjQUNUSU9OX1BMQVkgcGxheX0gZXhjZXB0IHRoYXQgaXQgZG9lcwotICAgICAqIG5vdCBjbGVhciB0aGUgcXVldWUgb3IgcmVzZXQgdGhlIHBhdXNlIHN0YXRlIHdoZW4gaXQgZW5xdWV1ZXMgdGhlCi0gICAgICogbmV3IG1lZGlhIGl0ZW0gaW50byB0aGUgc2Vzc2lvbidzIHBsYXliYWNrIHF1ZXVlLiAgVGhpcyBhY3Rpb24gb25seQotICAgICAqIGVucXVldWVzIGEgbWVkaWEgaXRlbSB3aXRoIG5vIG90aGVyIHNpZGUtZWZmZWN0cyBvbiB0aGUgcXVldWUuCi0gICAgICogPC9wPjxwPgotICAgICAqIElmIHRoZSBxdWV1ZSBpcyBjdXJyZW50bHkgZW1wdHkgYW5kIHRoZW4gdGhlIGl0ZW0gd2lsbCBwbGF5IGltbWVkaWF0ZWx5Ci0gICAgICogKGFzc3VtaW5nIHRoZSBxdWV1ZSBpcyBub3QgcGF1c2VkKS4gIE90aGVyd2lzZSwgdGhlIGl0ZW0gd2lsbCBwbGF5Ci0gICAgICogYWZ0ZXIgYWxsIGVhcmxpZXIgaXRlbXMgaW4gdGhlIHF1ZXVlIGhhdmUgZmluaXNoZWQgb3IgYmVlbiByZW1vdmVkLgotICAgICAqIDwvcD48cD4KLSAgICAgKiBUaGUgZW5xdWV1ZSBhY3Rpb24gY2FuIGJlIHVzZWQgdG8gY3JlYXRlIG5ldyBzZXNzaW9ucyBqdXN0IGxpa2UgcGxheS4KLSAgICAgKiBJdHMgcGFyYW1ldGVycyBhbmQgcmVzdWx0cyBhcmUgYWxzbyB0aGUgc2FtZS4gIE9ubHkgdGhlIHF1ZXVpbmcgYmVoYXZpb3IKLSAgICAgKiBpcyBkaWZmZXJlbnQuCi0gICAgICogPC9wPgotICAgICAqCi0gICAgICogQHNlZSAjQUNUSU9OX1BMQVkKLSAgICAgKi8KLSAgICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBBQ1RJT05fRU5RVUVVRSA9ICJhbmRyb2lkLm1lZGlhLmludGVudC5hY3Rpb24uRU5RVUVVRSI7Ci0KLSAgICAvKioKLSAgICAgKiBSZW1vdGUgcGxheWJhY2sgbWVkaWEgY29udHJvbCBhY3Rpb246IFNlZWsgbWVkaWEgaXRlbSB0byBhIG5ldyBwbGF5YmFjayBwb3NpdGlvbi4KLSAgICAgKiA8cD4KLSAgICAgKiBVc2VkIHdpdGggcm91dGVzIHRoYXQgc3VwcG9ydCB7QGxpbmsgI0NBVEVHT1JZX1JFTU9URV9QTEFZQkFDSyByZW1vdGUgcGxheWJhY2t9Ci0gICAgICogbWVkaWEgY29udHJvbC4KLSAgICAgKiA8L3A+PHA+Ci0gICAgICogVGhpcyBhY3Rpb24gY2F1c2VzIGEgcmVtb3RlIHBsYXliYWNrIHJvdXRlIHRvIG1vZGlmeSB0aGUgY3VycmVudCBwbGF5YmFjayBwb3NpdGlvbgotICAgICAqIG9mIHRoZSBzcGVjaWZpZWQgbWVkaWEgaXRlbS4KLSAgICAgKiA8L3A+PHA+Ci0gICAgICogVGhpcyBhY3Rpb24gb25seSBhZmZlY3RzIHRoZSBwbGF5YmFjayBwb3NpdGlvbiBvZiB0aGUgbWVkaWEgaXRlbTsgbm90IGl0cyBwbGF5YmFjayBzdGF0ZS4KLSAgICAgKiBJZiB0aGUgcGxheWJhY2sgcXVldWUgaXMgcGF1c2VkLCB0aGVuIHNlZWtpbmcgc2V0cyB0aGUgcG9zaXRpb24gYnV0IHRoZSBpdGVtCi0gICAgICogcmVtYWlucyBwYXVzZWQuICBMaWtld2lzZSBpZiB0aGUgaXRlbSBpcyBwbGF5aW5nLCB0aGVuIHNlZWtpbmcgd2lsbCBjYXVzZSBwbGF5YmFjawotICAgICAqIHRvIGp1bXAgdG8gdGhlIG5ldyBwb3NpdGlvbiBhbmQgY29udGludWUgcGxheWluZyBmcm9tIHRoYXQgcG9pbnQuICBJZiB0aGUgaXRlbSBoYXMKLSAgICAgKiBub3QgeWV0IHN0YXJ0ZWQgcGxheWluZywgdGhlbiB0aGUgbmV3IHBsYXliYWNrIHBvc2l0aW9uIGlzIHJlbWVtYmVyZWQgYnkgdGhlCi0gICAgICogcXVldWUgYW5kIHVzZWQgYXMgdGhlIGl0ZW0ncyBpbml0aWFsIGNvbnRlbnQgcG9zaXRpb24gd2hlbiBwbGF5YmFjayBldmVudHVhbGx5IGJlZ2lucy4KLSAgICAgKiA8L3A+PHA+Ci0gICAgICogSWYgc3VjY2Vzc2Z1bCwgdGhlIG1lZGlhIGl0ZW0ncyBwbGF5YmFjayBwb3NpdGlvbiBpcyBjaGFuZ2VkLgotICAgICAqIDwvcD4KLSAgICAgKgotICAgICAqIDxoMz5SZXF1ZXN0IHBhcmFtZXRlcnM8L2gzPgotICAgICAqIDx1bD4KLSAgICAgKiA8bGk+e0BsaW5rICNFWFRSQV9TRVNTSU9OX0lEfSA8ZW0+KHJlcXVpcmVkKTwvZW0+OiBTcGVjaWZpZXMgdGhlIHNlc3Npb24gaWQgb2YgdGhlIHNlc3Npb24KLSAgICAgKiB0byB3aGljaCB0aGUgbWVkaWEgaXRlbSBiZWxvbmdzLgotICAgICAqIDxsaT57QGxpbmsgI0VYVFJBX0lURU1fSUR9IDxlbT4ocmVxdWlyZWQpPC9lbT46IFNwZWNpZmllcyB0aGUgbWVkaWEgaXRlbSBpZCBvZgotICAgICAqIHRoZSBtZWRpYSBpdGVtIHRvIHNlZWsuCi0gICAgICogPGxpPntAbGluayAjRVhUUkFfSVRFTV9DT05URU5UX1BPU0lUSU9OfSA8ZW0+KHJlcXVpcmVkKTwvZW0+OiBTcGVjaWZpZXMgdGhlIG5ldwotICAgICAqIGNvbnRlbnQgcG9zaXRpb24gZm9yIHBsYXliYWNrIGFzIGEgbG9uZyBpbnRlZ2VyIG51bWJlciBvZiBtaWxsaXNlY29uZHMgZnJvbQotICAgICAqIHRoZSBiZWdpbm5pbmcgb2YgdGhlIGNvbnRlbnQuCi0gICAgICogPC91bD4KLSAgICAgKgotICAgICAqIDxoMz5SZXN1bHQgZGF0YTwvaDM+Ci0gICAgICogPHVsPgotICAgICAqIDxsaT57QGxpbmsgI0VYVFJBX1NFU1NJT05fU1RBVFVTfSA8ZW0+KG9wdGlvbmFsLCBvbGQgaW1wbGVtZW50YXRpb25zIG1heQotICAgICAqIG9taXQgdGhpcyBrZXkpPC9lbT46IFNwZWNpZmllcyB0aGUgc3RhdHVzIG9mIHRoZSBtZWRpYSBzZXNzaW9uLgotICAgICAqIDxsaT57QGxpbmsgI0VYVFJBX0lURU1fU1RBVFVTfSA8ZW0+KGFsd2F5cyByZXR1cm5lZCk8L2VtPjogU3BlY2lmaWVzIHRoZSBuZXcgc3RhdHVzIG9mCi0gICAgICogdGhlIG1lZGlhIGl0ZW0uCi0gICAgICogPC91bD4KLSAgICAgKgotICAgICAqIDxoMz5FcnJvcnM8L2gzPgotICAgICAqIDxwPgotICAgICAqIFRoaXMgYWN0aW9uIHJldHVybnMgYW4gZXJyb3IgaWYgdGhlIHNlc3Npb24gaWQgb3IgbWVkaWEgaXRlbSBpZCBhcmUgdW5rbm93bgotICAgICAqIG9yIG5vIGxvbmdlciB2YWxpZCwgaWYgdGhlIGNvbnRlbnQgcG9zaXRpb24gaXMgaW52YWxpZCwgb3IgaWYgdGhlIG1lZGlhIGl0ZW0KLSAgICAgKiBpcyBpbiBhIHRlcm1pbmFsIHN0YXRlLgotICAgICAqIDwvcD48dWw+Ci0gICAgICogPGxpPntAbGluayAjRVhUUkFfRVJST1JfQ09ERX0gPGVtPihvcHRpb25hbCk8L2VtPjogU3BlY2lmaWVzIHRoZSBjYXVzZSBvZiB0aGUgZXJyb3IuCi0gICAgICogPC91bD4KLSAgICAgKgotICAgICAqIEBzZWUgTWVkaWFSb3V0ZXIuUm91dGVJbmZvI3NlbmRDb250cm9sUmVxdWVzdAotICAgICAqIEBzZWUgI0NBVEVHT1JZX1JFTU9URV9QTEFZQkFDSwotICAgICAqLwotICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIEFDVElPTl9TRUVLID0gImFuZHJvaWQubWVkaWEuaW50ZW50LmFjdGlvbi5TRUVLIjsKLQotICAgIC8qKgotICAgICAqIFJlbW90ZSBwbGF5YmFjayBtZWRpYSBjb250cm9sIGFjdGlvbjogR2V0IG1lZGlhIGl0ZW0gcGxheWJhY2sgc3RhdHVzCi0gICAgICogYW5kIHByb2dyZXNzIGluZm9ybWF0aW9uLgotICAgICAqIDxwPgotICAgICAqIFVzZWQgd2l0aCByb3V0ZXMgdGhhdCBzdXBwb3J0IHtAbGluayAjQ0FURUdPUllfUkVNT1RFX1BMQVlCQUNLIHJlbW90ZSBwbGF5YmFja30KLSAgICAgKiBtZWRpYSBjb250cm9sLgotICAgICAqIDwvcD48cD4KLSAgICAgKiBUaGlzIGFjdGlvbiBhc2tzIGEgcmVtb3RlIHBsYXliYWNrIHJvdXRlIHRvIHByb3ZpZGUgdXBkYXRlZCBwbGF5YmFjayBzdGF0dXMgYW5kIHByb2dyZXNzCi0gICAgICogaW5mb3JtYXRpb24gYWJvdXQgdGhlIHNwZWNpZmllZCBtZWRpYSBpdGVtLgotICAgICAqIDwvcD4KLSAgICAgKgotICAgICAqIDxoMz5SZXF1ZXN0IHBhcmFtZXRlcnM8L2gzPgotICAgICAqIDx1bD4KLSAgICAgKiA8bGk+e0BsaW5rICNFWFRSQV9TRVNTSU9OX0lEfSA8ZW0+KHJlcXVpcmVkKTwvZW0+OiBTcGVjaWZpZXMgdGhlIHNlc3Npb24gaWQgb2YgdGhlIHNlc3Npb24KLSAgICAgKiB0byB3aGljaCB0aGUgbWVkaWEgaXRlbSBiZWxvbmdzLgotICAgICAqIDxsaT57QGxpbmsgI0VYVFJBX0lURU1fSUR9IDxlbT4ocmVxdWlyZWQpPC9lbT46IFNwZWNpZmllcyB0aGUgbWVkaWEgaXRlbSBpZCBvZgotICAgICAqIHRoZSBtZWRpYSBpdGVtIHRvIHF1ZXJ5LgotICAgICAqIDwvdWw+Ci0gICAgICoKLSAgICAgKiA8aDM+UmVzdWx0IGRhdGE8L2gzPgotICAgICAqIDx1bD4KLSAgICAgKiA8bGk+e0BsaW5rICNFWFRSQV9TRVNTSU9OX1NUQVRVU30gPGVtPihvcHRpb25hbCwgb2xkIGltcGxlbWVudGF0aW9ucyBtYXkKLSAgICAgKiBvbWl0IHRoaXMga2V5KTwvZW0+OiBTcGVjaWZpZXMgdGhlIHN0YXR1cyBvZiB0aGUgbWVkaWEgc2Vzc2lvbi4KLSAgICAgKiA8bGk+e0BsaW5rICNFWFRSQV9JVEVNX1NUQVRVU30gPGVtPihhbHdheXMgcmV0dXJuZWQpPC9lbT46IFNwZWNpZmllcyB0aGUgY3VycmVudCBzdGF0dXMgb2YKLSAgICAgKiB0aGUgbWVkaWEgaXRlbS4KLSAgICAgKiA8L3VsPgotICAgICAqCi0gICAgICogPGgzPkVycm9yczwvaDM+Ci0gICAgICogPHA+Ci0gICAgICogVGhpcyBhY3Rpb24gcmV0dXJucyBhbiBlcnJvciBpZiB0aGUgc2Vzc2lvbiBpZCBvciBtZWRpYSBpdGVtIGlkIGFyZSB1bmtub3duCi0gICAgICogb3Igbm8gbG9uZ2VyIHZhbGlkLgotICAgICAqIDwvcD48dWw+Ci0gICAgICogPGxpPntAbGluayAjRVhUUkFfRVJST1JfQ09ERX0gPGVtPihvcHRpb25hbCk8L2VtPjogU3BlY2lmaWVzIHRoZSBjYXVzZSBvZiB0aGUgZXJyb3IuCi0gICAgICogPC91bD4KLSAgICAgKgotICAgICAqIEBzZWUgTWVkaWFSb3V0ZXIuUm91dGVJbmZvI3NlbmRDb250cm9sUmVxdWVzdAotICAgICAqIEBzZWUgI0NBVEVHT1JZX1JFTU9URV9QTEFZQkFDSwotICAgICAqIEBzZWUgI0VYVFJBX0lURU1fU1RBVFVTX1VQREFURV9SRUNFSVZFUgotICAgICAqLwotICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIEFDVElPTl9HRVRfU1RBVFVTID0gImFuZHJvaWQubWVkaWEuaW50ZW50LmFjdGlvbi5HRVRfU1RBVFVTIjsKLQotICAgIC8qKgotICAgICAqIFJlbW90ZSBwbGF5YmFjayBtZWRpYSBjb250cm9sIGFjdGlvbjogUmVtb3ZlIG1lZGlhIGl0ZW0gZnJvbSBzZXNzaW9uJ3MgcXVldWUuCi0gICAgICogPHA+Ci0gICAgICogVXNlZCB3aXRoIHJvdXRlcyB0aGF0IHN1cHBvcnQge0BsaW5rICNDQVRFR09SWV9SRU1PVEVfUExBWUJBQ0sgcmVtb3RlIHBsYXliYWNrfQotICAgICAqIG1lZGlhIGNvbnRyb2wuCi0gICAgICogPC9wPjxwPgotICAgICAqIFRoaXMgYWN0aW9uIGFza3MgYSByZW1vdGUgcGxheWJhY2sgcm91dGUgdG8gcmVtb3ZlIHRoZSBzcGVjaWZpZWQgbWVkaWEgaXRlbQotICAgICAqIGZyb20gdGhlIHNlc3Npb24ncyBwbGF5YmFjayBxdWV1ZS4gIElmIHRoZSBjdXJyZW50IGl0ZW0gaXMgcmVtb3ZlZCwgdGhlbgotICAgICAqIHBsYXliYWNrIHdpbGwgcHJvY2VlZCB0byB0aGUgbmV4dCBtZWRpYSBpdGVtIChhc3N1bWluZyB0aGUgcXVldWUgaGFzIG5vdCBiZWVuCi0gICAgICogcGF1c2VkKS4KLSAgICAgKiA8L3A+PHA+Ci0gICAgICogVGhpcyBhY3Rpb24gZG9lcyBub3QgYWZmZWN0IHRoZSBwYXVzZSBzdGF0ZSBvZiB0aGUgcXVldWUuICBJZiB0aGUgcXVldWUgd2FzIHBhdXNlZAotICAgICAqIHRoZW4gaXQgcmVtYWlucyBwYXVzZWQgKGV2ZW4gaWYgaXQgaXMgbm93IGVtcHR5KSB1bnRpbCBhIHJlc3VtZSwgc3RvcCBvciBwbGF5Ci0gICAgICogYWN0aW9uIGlzIGlzc3VlZCB0aGF0IGNhdXNlcyB0aGUgcGF1c2Ugc3RhdGUgdG8gYmUgY2xlYXJlZC4KLSAgICAgKiA8L3A+Ci0gICAgICoKLSAgICAgKiA8aDM+UmVxdWVzdCBwYXJhbWV0ZXJzPC9oMz4KLSAgICAgKiA8dWw+Ci0gICAgICogPGxpPntAbGluayAjRVhUUkFfU0VTU0lPTl9JRH0gPGVtPihyZXF1aXJlZCk8L2VtPjogU3BlY2lmaWVzIHRoZSBzZXNzaW9uIGlkIG9mIHRoZSBzZXNzaW9uCi0gICAgICogdG8gd2hpY2ggdGhlIG1lZGlhIGl0ZW0gYmVsb25ncy4KLSAgICAgKiA8bGk+e0BsaW5rICNFWFRSQV9JVEVNX0lEfSA8ZW0+KHJlcXVpcmVkKTwvZW0+OiBTcGVjaWZpZXMgdGhlIG1lZGlhIGl0ZW0gaWQgb2YKLSAgICAgKiB0aGUgbWVkaWEgaXRlbSB0byByZW1vdmUuCi0gICAgICogPC91bD4KLSAgICAgKgotICAgICAqIDxoMz5SZXN1bHQgZGF0YTwvaDM+Ci0gICAgICogPHVsPgotICAgICAqIDxsaT57QGxpbmsgI0VYVFJBX1NFU1NJT05fU1RBVFVTfSA8ZW0+KG9wdGlvbmFsLCBvbGQgaW1wbGVtZW50YXRpb25zIG1heQotICAgICAqIG9taXQgdGhpcyBrZXkpPC9lbT46IFNwZWNpZmllcyB0aGUgc3RhdHVzIG9mIHRoZSBtZWRpYSBzZXNzaW9uLgotICAgICAqIDxsaT57QGxpbmsgI0VYVFJBX0lURU1fU1RBVFVTfSA8ZW0+KGFsd2F5cyByZXR1cm5lZCk8L2VtPjogU3BlY2lmaWVzIHRoZSBuZXcgc3RhdHVzIG9mCi0gICAgICogdGhlIG1lZGlhIGl0ZW0uCi0gICAgICogPC91bD4KLSAgICAgKgotICAgICAqIDxoMz5FcnJvcnM8L2gzPgotICAgICAqIDxwPgotICAgICAqIFRoaXMgYWN0aW9uIHJldHVybnMgYW4gZXJyb3IgaWYgdGhlIHNlc3Npb24gaWQgb3IgbWVkaWEgaXRlbSBpZCBhcmUgdW5rbm93bgotICAgICAqIG9yIG5vIGxvbmdlciB2YWxpZCwgb3IgaWYgdGhlIG1lZGlhIGl0ZW0gaXMgaW4gYSB0ZXJtaW5hbCBzdGF0ZSAoYW5kIHRoZXJlZm9yZQotICAgICAqIG5vIGxvbmdlciBpbiB0aGUgcXVldWUpLgotICAgICAqIDwvcD48dWw+Ci0gICAgICogPGxpPntAbGluayAjRVhUUkFfRVJST1JfQ09ERX0gPGVtPihvcHRpb25hbCk8L2VtPjogU3BlY2lmaWVzIHRoZSBjYXVzZSBvZiB0aGUgZXJyb3IuCi0gICAgICogPC91bD4KLSAgICAgKgotICAgICAqIEBzZWUgTWVkaWFSb3V0ZXIuUm91dGVJbmZvI3NlbmRDb250cm9sUmVxdWVzdAotICAgICAqIEBzZWUgI0NBVEVHT1JZX1JFTU9URV9QTEFZQkFDSwotICAgICAqLwotICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIEFDVElPTl9SRU1PVkUgPSAiYW5kcm9pZC5tZWRpYS5pbnRlbnQuYWN0aW9uLlJFTU9WRSI7Ci0KLSAgICAvKiBSZW1vdGUgcGxheWJhY2sgYWN0aW9ucyB0aGF0IGFmZmVjdCB0aGUgd2hvbGUgcGxheWJhY2sgcXVldWUuICovCi0KLSAgICAvKioKLSAgICAgKiBSZW1vdGUgcGxheWJhY2sgbWVkaWEgY29udHJvbCBhY3Rpb246IFBhdXNlIG1lZGlhIHBsYXliYWNrLgotICAgICAqIDxwPgotICAgICAqIFVzZWQgd2l0aCByb3V0ZXMgdGhhdCBzdXBwb3J0IHtAbGluayAjQ0FURUdPUllfUkVNT1RFX1BMQVlCQUNLIHJlbW90ZSBwbGF5YmFja30KLSAgICAgKiBtZWRpYSBjb250cm9sLgotICAgICAqIDwvcD48cD4KLSAgICAgKiBUaGlzIGFjdGlvbiBjYXVzZXMgdGhlIHBsYXliYWNrIHF1ZXVlIG9mIHRoZSBzcGVjaWZpZWQgc2Vzc2lvbiB0byBiZSBwYXVzZWQuCi0gICAgICogPC9wPgotICAgICAqCi0gICAgICogPGgzPlJlcXVlc3QgcGFyYW1ldGVyczwvaDM+Ci0gICAgICogPHVsPgotICAgICAqIDxsaT57QGxpbmsgI0VYVFJBX1NFU1NJT05fSUR9IDxlbT4ocmVxdWlyZWQpPC9lbT46IFNwZWNpZmllcyB0aGUgc2Vzc2lvbiBpZCBvZiB0aGUgc2Vzc2lvbgotICAgICAqIHdob3NlIHBsYXliYWNrIHF1ZXVlIGlzIHRvIGJlIHBhdXNlZC4KLSAgICAgKiA8L3VsPgotICAgICAqCi0gICAgICogPGgzPlJlc3VsdCBkYXRhPC9oMz4KLSAgICAgKiA8dWw+Ci0gICAgICogPGxpPntAbGluayAjRVhUUkFfU0VTU0lPTl9TVEFUVVN9IDxlbT4ob3B0aW9uYWwsIG9sZCBpbXBsZW1lbnRhdGlvbnMgbWF5Ci0gICAgICogb21pdCB0aGlzIGtleSk8L2VtPjogU3BlY2lmaWVzIHRoZSBzdGF0dXMgb2YgdGhlIG1lZGlhIHNlc3Npb24uCi0gICAgICogPC91bD4KLSAgICAgKgotICAgICAqIDxoMz5FcnJvcnM8L2gzPgotICAgICAqIDxwPgotICAgICAqIFRoaXMgYWN0aW9uIHJldHVybnMgYW4gZXJyb3IgaWYgdGhlIHNlc3Npb24gaWQgaXMgdW5rbm93biBvciBubyBsb25nZXIgdmFsaWQuCi0gICAgICogPC9wPjx1bD4KLSAgICAgKiA8bGk+e0BsaW5rICNFWFRSQV9FUlJPUl9DT0RFfSA8ZW0+KG9wdGlvbmFsKTwvZW0+OiBTcGVjaWZpZXMgdGhlIGNhdXNlIG9mIHRoZSBlcnJvci4KLSAgICAgKiA8L3VsPgotICAgICAqCi0gICAgICogQHNlZSBNZWRpYVJvdXRlci5Sb3V0ZUluZm8jc2VuZENvbnRyb2xSZXF1ZXN0Ci0gICAgICogQHNlZSAjQ0FURUdPUllfUkVNT1RFX1BMQVlCQUNLCi0gICAgICogQHNlZSAjQUNUSU9OX1JFU1VNRQotICAgICAqLwotICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIEFDVElPTl9QQVVTRSA9ICJhbmRyb2lkLm1lZGlhLmludGVudC5hY3Rpb24uUEFVU0UiOwotCi0gICAgLyoqCi0gICAgICogUmVtb3RlIHBsYXliYWNrIG1lZGlhIGNvbnRyb2wgYWN0aW9uOiBSZXN1bWUgbWVkaWEgcGxheWJhY2sgKHVucGF1c2UpLgotICAgICAqIDxwPgotICAgICAqIFVzZWQgd2l0aCByb3V0ZXMgdGhhdCBzdXBwb3J0IHtAbGluayAjQ0FURUdPUllfUkVNT1RFX1BMQVlCQUNLIHJlbW90ZSBwbGF5YmFja30KLSAgICAgKiBtZWRpYSBjb250cm9sLgotICAgICAqIDwvcD48cD4KLSAgICAgKiBUaGlzIGFjdGlvbiBjYXVzZXMgdGhlIHBsYXliYWNrIHF1ZXVlIG9mIHRoZSBzcGVjaWZpZWQgc2Vzc2lvbiB0byBiZSByZXN1bWVkLgotICAgICAqIFJldmVyc2VzIHRoZSBlZmZlY3RzIG9mIHtAbGluayAjQUNUSU9OX1BBVVNFfS4KLSAgICAgKiA8L3A+Ci0gICAgICoKLSAgICAgKiA8aDM+UmVxdWVzdCBwYXJhbWV0ZXJzPC9oMz4KLSAgICAgKiA8dWw+Ci0gICAgICogPGxpPntAbGluayAjRVhUUkFfU0VTU0lPTl9JRH0gPGVtPihyZXF1aXJlZCk8L2VtPjogU3BlY2lmaWVzIHRoZSBzZXNzaW9uIGlkIG9mIHRoZSBzZXNzaW9uCi0gICAgICogd2hvc2UgcGxheWJhY2sgcXVldWUgaXMgdG8gYmUgcmVzdW1lZC4KLSAgICAgKiA8L3VsPgotICAgICAqCi0gICAgICogPGgzPlJlc3VsdCBkYXRhPC9oMz4KLSAgICAgKiA8dWw+Ci0gICAgICogPGxpPntAbGluayAjRVhUUkFfU0VTU0lPTl9TVEFUVVN9IDxlbT4ob3B0aW9uYWwsIG9sZCBpbXBsZW1lbnRhdGlvbnMgbWF5Ci0gICAgICogb21pdCB0aGlzIGtleSk8L2VtPjogU3BlY2lmaWVzIHRoZSBzdGF0dXMgb2YgdGhlIG1lZGlhIHNlc3Npb24uCi0gICAgICogPC91bD4KLSAgICAgKgotICAgICAqIDxoMz5FcnJvcnM8L2gzPgotICAgICAqIDxwPgotICAgICAqIFRoaXMgYWN0aW9uIHJldHVybnMgYW4gZXJyb3IgaWYgdGhlIHNlc3Npb24gaWQgaXMgdW5rbm93biBvciBubyBsb25nZXIgdmFsaWQuCi0gICAgICogPC9wPjx1bD4KLSAgICAgKiA8bGk+e0BsaW5rICNFWFRSQV9FUlJPUl9DT0RFfSA8ZW0+KG9wdGlvbmFsKTwvZW0+OiBTcGVjaWZpZXMgdGhlIGNhdXNlIG9mIHRoZSBlcnJvci4KLSAgICAgKiA8L3VsPgotICAgICAqCi0gICAgICogQHNlZSBNZWRpYVJvdXRlci5Sb3V0ZUluZm8jc2VuZENvbnRyb2xSZXF1ZXN0Ci0gICAgICogQHNlZSAjQ0FURUdPUllfUkVNT1RFX1BMQVlCQUNLCi0gICAgICogQHNlZSAjQUNUSU9OX1BBVVNFCi0gICAgICovCi0gICAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgQUNUSU9OX1JFU1VNRSA9ICJhbmRyb2lkLm1lZGlhLmludGVudC5hY3Rpb24uUkVTVU1FIjsKLQotICAgIC8qKgotICAgICAqIFJlbW90ZSBwbGF5YmFjayBtZWRpYSBjb250cm9sIGFjdGlvbjogU3RvcCBtZWRpYSBwbGF5YmFjayAoY2xlYXIgcXVldWUgYW5kIHVucGF1c2UpLgotICAgICAqIDxwPgotICAgICAqIFVzZWQgd2l0aCByb3V0ZXMgdGhhdCBzdXBwb3J0IHtAbGluayAjQ0FURUdPUllfUkVNT1RFX1BMQVlCQUNLIHJlbW90ZSBwbGF5YmFja30KLSAgICAgKiBtZWRpYSBjb250cm9sLgotICAgICAqIDwvcD48cD4KLSAgICAgKiBUaGlzIGFjdGlvbiBjYXVzZXMgYSByZW1vdGUgcGxheWJhY2sgcm91dGUgdG8gc3RvcCBwbGF5YmFjaywgY2FuY2VsIGFuZCByZW1vdmUKLSAgICAgKiBhbGwgbWVkaWEgaXRlbXMgZnJvbSB0aGUgc2Vzc2lvbidzIG1lZGlhIGl0ZW0gcXVldWUgYW5kLCByZXNldCB0aGUgcXVldWUncwotICAgICAqIHBhdXNlIHN0YXRlLgotICAgICAqIDwvcD48cD4KLSAgICAgKiBJZiBzdWNjZXNzZnVsLCB0aGUgc3RhdHVzIG9mIGFsbCBtZWRpYSBpdGVtcyBpbiB0aGUgcXVldWUgaXMgc2V0IHRvCi0gICAgICoge0BsaW5rIE1lZGlhSXRlbVN0YXR1cyNQTEFZQkFDS19TVEFURV9DQU5DRUxFRCBjYW5jZWxlZH0gYW5kIGEgc3RhdHVzIHVwZGF0ZSBpcyBzZW50Ci0gICAgICogdG8gdGhlIGFwcHJvcHJpYXRlIHN0YXR1cyB1cGRhdGUgcmVjZWl2ZXJzIGluZGljYXRpbmcgdGhlIG5ldyBzdGF0dXMgb2YgZWFjaCBpdGVtLgotICAgICAqIDwvcD4KLSAgICAgKgotICAgICAqIDxoMz5SZXF1ZXN0IHBhcmFtZXRlcnM8L2gzPgotICAgICAqIDx1bD4KLSAgICAgKiA8bGk+e0BsaW5rICNFWFRSQV9TRVNTSU9OX0lEfSA8ZW0+KHJlcXVpcmVkKTwvZW0+OiBTcGVjaWZpZXMgdGhlIHNlc3Npb24gaWQgb2YKLSAgICAgKiB0aGUgc2Vzc2lvbiB3aG9zZSBwbGF5YmFjayBxdWV1ZSBpcyB0byBiZSBzdG9wcGVkIChjbGVhcmVkIGFuZCB1bnBhdXNlZCkuCi0gICAgICogPC91bD4KLSAgICAgKgotICAgICAqIDxoMz5SZXN1bHQgZGF0YTwvaDM+Ci0gICAgICogPHVsPgotICAgICAqIDxsaT57QGxpbmsgI0VYVFJBX1NFU1NJT05fU1RBVFVTfSA8ZW0+KG9wdGlvbmFsLCBvbGQgaW1wbGVtZW50YXRpb25zIG1heQotICAgICAqIG9taXQgdGhpcyBrZXkpPC9lbT46IFNwZWNpZmllcyB0aGUgc3RhdHVzIG9mIHRoZSBtZWRpYSBzZXNzaW9uLgotICAgICAqIDwvdWw+Ci0gICAgICoKLSAgICAgKiA8aDM+RXJyb3JzPC9oMz4KLSAgICAgKiA8cD4KLSAgICAgKiBUaGlzIGFjdGlvbiByZXR1cm5zIGFuIGVycm9yIGlmIHRoZSBzZXNzaW9uIGlkIGlzIHVua25vd24gb3Igbm8gbG9uZ2VyIHZhbGlkLgotICAgICAqIDwvcD48dWw+Ci0gICAgICogPGxpPntAbGluayAjRVhUUkFfRVJST1JfQ09ERX0gPGVtPihvcHRpb25hbCk8L2VtPjogU3BlY2lmaWVzIHRoZSBjYXVzZSBvZiB0aGUgZXJyb3IuCi0gICAgICogPC91bD4KLSAgICAgKgotICAgICAqIEBzZWUgTWVkaWFSb3V0ZXIuUm91dGVJbmZvI3NlbmRDb250cm9sUmVxdWVzdAotICAgICAqIEBzZWUgI0NBVEVHT1JZX1JFTU9URV9QTEFZQkFDSwotICAgICAqLwotICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIEFDVElPTl9TVE9QID0gImFuZHJvaWQubWVkaWEuaW50ZW50LmFjdGlvbi5TVE9QIjsKLQotICAgIC8qKgotICAgICAqIFJlbW90ZSBwbGF5YmFjayBtZWRpYSBjb250cm9sIGFjdGlvbjogU3RhcnQgc2Vzc2lvbi4KLSAgICAgKiA8cD4KLSAgICAgKiBVc2VkIHdpdGggcm91dGVzIHRoYXQgc3VwcG9ydCB7QGxpbmsgI0NBVEVHT1JZX1JFTU9URV9QTEFZQkFDSyByZW1vdGUgcGxheWJhY2t9Ci0gICAgICogbWVkaWEgY29udHJvbC4KLSAgICAgKiA8L3A+PHA+Ci0gICAgICogVGhpcyBhY3Rpb24gY2F1c2VzIGEgcmVtb3RlIHBsYXliYWNrIHJvdXRlIHRvIGludmFsaWRhdGUgdGhlIGN1cnJlbnQgc2Vzc2lvbgotICAgICAqIGFuZCBzdGFydCBhIG5ldyBzZXNzaW9uLiAgVGhlIG5ldyBzZXNzaW9uIGluaXRpYWxseSBoYXMgYW4gZW1wdHkgcXVldWUuCi0gICAgICogPC9wPjxwPgotICAgICAqIElmIHN1Y2Nlc3NmdWwsIHRoZSBzdGF0dXMgb2YgYWxsIG1lZGlhIGl0ZW1zIGluIHRoZSBwcmV2aW91cyBzZXNzaW9uJ3MgcXVldWUgaXMgc2V0IHRvCi0gICAgICoge0BsaW5rIE1lZGlhSXRlbVN0YXR1cyNQTEFZQkFDS19TVEFURV9JTlZBTElEQVRFRCBpbnZhbGlkYXRlZH0gYW5kIGEgc3RhdHVzIHVwZGF0ZQotICAgICAqIGlzIHNlbnQgdG8gdGhlIGFwcHJvcHJpYXRlIHN0YXR1cyB1cGRhdGUgcmVjZWl2ZXJzIGluZGljYXRpbmcgdGhlIG5ldyBzdGF0dXMKLSAgICAgKiBvZiBlYWNoIGl0ZW0uICBUaGUgcHJldmlvdXMgc2Vzc2lvbiBiZWNvbWVzIG5vIGxvbmdlciB2YWxpZCBhbmQgdGhlIG5ldyBzZXNzaW9uCi0gICAgICogdGFrZXMgY29udHJvbCBvZiB0aGUgcm91dGUuCi0gICAgICogPC9wPgotICAgICAqCi0gICAgICogPGgzPlJlcXVlc3QgcGFyYW1ldGVyczwvaDM+Ci0gICAgICogPHVsPgotICAgICAqIDxsaT57QGxpbmsgI0VYVFJBX1NFU1NJT05fU1RBVFVTX1VQREFURV9SRUNFSVZFUn0gPGVtPihvcHRpb25hbCk8L2VtPjogU3BlY2lmaWVzIGEKLSAgICAgKiB7QGxpbmsgUGVuZGluZ0ludGVudH0gZm9yIGEgYnJvYWRjYXN0IHJlY2VpdmVyIHRoYXQgd2lsbCByZWNlaXZlIHN0YXR1cyB1cGRhdGVzCi0gICAgICogYWJvdXQgdGhlIG1lZGlhIHNlc3Npb24uCi0gICAgICogPGxpPntAbGluayAjRVhUUkFfTUVTU0FHRV9SRUNFSVZFUn0gPGVtPihvcHRpb25hbCk8L2VtPjogU3BlY2lmaWVzIGEKLSAgICAgKiB7QGxpbmsgUGVuZGluZ0ludGVudH0gZm9yIGEgYnJvYWRjYXN0IHJlY2VpdmVyIHRoYXQgd2lsbCByZWNlaXZlIG1lc3NhZ2VzIGZyb20KLSAgICAgKiB0aGUgbWVkaWEgc2Vzc2lvbi4KLSAgICAgKiA8L3VsPgotICAgICAqCi0gICAgICogPGgzPlJlc3VsdCBkYXRhPC9oMz4KLSAgICAgKiA8dWw+Ci0gICAgICogPGxpPntAbGluayAjRVhUUkFfU0VTU0lPTl9JRH0gPGVtPihhbHdheXMgcmV0dXJuZWQpPC9lbT46IFNwZWNpZmllcyB0aGUgc2Vzc2lvbiBpZCBvZiB0aGUKLSAgICAgKiBzZXNzaW9uIHRoYXQgd2FzIHN0YXJ0ZWQgYnkgdGhlIHJlcXVlc3QuICBUaGlzIHdpbGwgYWx3YXlzIGJlIGEgYnJhbmQgbmV3IHNlc3Npb24KLSAgICAgKiBkaXN0aW5jdCBmcm9tIGFueSBvdGhlciBwcmV2aW91c2x5IGNyZWF0ZWQgc2Vzc2lvbnMuCi0gICAgICogPGxpPntAbGluayAjRVhUUkFfU0VTU0lPTl9TVEFUVVN9IDxlbT4oYWx3YXlzIHJldHVybmVkKTwvZW0+OiBTcGVjaWZpZXMgdGhlCi0gICAgICogc3RhdHVzIG9mIHRoZSBtZWRpYSBzZXNzaW9uLgotICAgICAqIDwvdWw+Ci0gICAgICoKLSAgICAgKiA8aDM+U3RhdHVzIHVwZGF0ZXM8L2gzPgotICAgICAqIDxwPgotICAgICAqIElmIHRoZSBjbGllbnQgc3VwcGxpZXMgYQotICAgICAqIHtAbGluayAjRVhUUkFfU0VTU0lPTl9TVEFUVVNfVVBEQVRFX1JFQ0VJVkVSIHN0YXR1cyB1cGRhdGUgcmVjZWl2ZXJ9Ci0gICAgICogdGhlbiB0aGUgbWVkaWEgcm91dGUgcHJvdmlkZXIgaXMgcmVzcG9uc2libGUgZm9yIHNlbmRpbmcgc3RhdHVzIHVwZGF0ZXMgdG8gdGhlIHJlY2VpdmVyCi0gICAgICogd2hlbiBzaWduaWZpY2FudCBtZWRpYSBzZXNzaW9uIHN0YXRlIGNoYW5nZXMgb2NjdXIgc3VjaCBhcyB3aGVuIHRoZSBzZXNzaW9uJ3MKLSAgICAgKiBxdWV1ZSBpcyBwYXVzZWQgb3IgcmVzdW1lZCBvciB3aGVuIHRoZSBzZXNzaW9uIGlzIHRlcm1pbmF0ZWQgb3IgaW52YWxpZGF0ZWQuCi0gICAgICogPC9wPjxwPgotICAgICAqIFJlZmVyIHRvIHtAbGluayBNZWRpYVNlc3Npb25TdGF0dXN9IGZvciBkZXRhaWxzLgotICAgICAqIDwvcD4KLSAgICAgKgotICAgICAqIDxoMz5DdXN0b20gbWVzc2FnZXM8L2gzPgotICAgICAqIDxwPgotICAgICAqIElmIHRoZSBjbGllbnQgc3VwcGxpZXMgYSB7QGxpbmsgI0VYVFJBX01FU1NBR0VfUkVDRUlWRVIgbWVzc2FnZSByZWNlaXZlcn0KLSAgICAgKiB0aGVuIHRoZSBtZWRpYSByb3V0ZSBwcm92aWRlciBpcyByZXNwb25zaWJsZSBmb3Igc2VuZGluZyBtZXNzYWdlcyB0byB0aGUgcmVjZWl2ZXIKLSAgICAgKiB3aGVuIHRoZSBzZXNzaW9uIGhhcyBhbnkgbWVzc2FnZXMgdG8gc2VuZC4KLSAgICAgKiA8L3A+PHA+Ci0gICAgICogUmVmZXIgdG8ge0BsaW5rICNFWFRSQV9NRVNTQUdFfSBmb3IgZGV0YWlscy4KLSAgICAgKiA8L3A+Ci0gICAgICoKLSAgICAgKiA8aDM+RXJyb3JzPC9oMz4KLSAgICAgKiA8cD4KLSAgICAgKiBUaGlzIGFjdGlvbiByZXR1cm5zIGFuIGVycm9yIGlmIHRoZSBzZXNzaW9uIGNvdWxkIG5vdCBiZSBjcmVhdGVkLgotICAgICAqIDwvcD48dWw+Ci0gICAgICogPGxpPntAbGluayAjRVhUUkFfRVJST1JfQ09ERX0gPGVtPihvcHRpb25hbCk8L2VtPjogU3BlY2lmaWVzIHRoZSBjYXVzZSBvZiB0aGUgZXJyb3IuCi0gICAgICogPC91bD4KLSAgICAgKgotICAgICAqIEBzZWUgTWVkaWFSb3V0ZXIuUm91dGVJbmZvI3NlbmRDb250cm9sUmVxdWVzdAotICAgICAqIEBzZWUgI0NBVEVHT1JZX1JFTU9URV9QTEFZQkFDSwotICAgICAqLwotICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIEFDVElPTl9TVEFSVF9TRVNTSU9OID0gImFuZHJvaWQubWVkaWEuaW50ZW50LmFjdGlvbi5TVEFSVF9TRVNTSU9OIjsKLQotICAgIC8qKgotICAgICAqIFJlbW90ZSBwbGF5YmFjayBtZWRpYSBjb250cm9sIGFjdGlvbjogR2V0IG1lZGlhIHNlc3Npb24gc3RhdHVzIGluZm9ybWF0aW9uLgotICAgICAqIDxwPgotICAgICAqIFVzZWQgd2l0aCByb3V0ZXMgdGhhdCBzdXBwb3J0IHtAbGluayAjQ0FURUdPUllfUkVNT1RFX1BMQVlCQUNLIHJlbW90ZSBwbGF5YmFja30KLSAgICAgKiBtZWRpYSBjb250cm9sLgotICAgICAqIDwvcD48cD4KLSAgICAgKiBUaGlzIGFjdGlvbiBhc2tzIGEgcmVtb3RlIHBsYXliYWNrIHJvdXRlIHRvIHByb3ZpZGUgdXBkYXRlZCBzdGF0dXMgaW5mb3JtYXRpb24KLSAgICAgKiBhYm91dCB0aGUgc3BlY2lmaWVkIG1lZGlhIHNlc3Npb24uCi0gICAgICogPC9wPgotICAgICAqCi0gICAgICogPGgzPlJlcXVlc3QgcGFyYW1ldGVyczwvaDM+Ci0gICAgICogPHVsPgotICAgICAqIDxsaT57QGxpbmsgI0VYVFJBX1NFU1NJT05fSUR9IDxlbT4ocmVxdWlyZWQpPC9lbT46IFNwZWNpZmllcyB0aGUgc2Vzc2lvbiBpZCBvZiB0aGUKLSAgICAgKiBzZXNzaW9uIHdob3NlIHN0YXR1cyBpcyB0byBiZSByZXRyaWV2ZWQuCi0gICAgICogPC91bD4KLSAgICAgKgotICAgICAqIDxoMz5SZXN1bHQgZGF0YTwvaDM+Ci0gICAgICogPHVsPgotICAgICAqIDxsaT57QGxpbmsgI0VYVFJBX1NFU1NJT05fU1RBVFVTfSA8ZW0+KGFsd2F5cyByZXR1cm5lZCk8L2VtPjogU3BlY2lmaWVzIHRoZQotICAgICAqIGN1cnJlbnQgc3RhdHVzIG9mIHRoZSBtZWRpYSBzZXNzaW9uLgotICAgICAqIDwvdWw+Ci0gICAgICoKLSAgICAgKiA8aDM+RXJyb3JzPC9oMz4KLSAgICAgKiA8cD4KLSAgICAgKiBUaGlzIGFjdGlvbiByZXR1cm5zIGFuIGVycm9yIGlmIHRoZSBzZXNzaW9uIGlkIGlzIHVua25vd24gb3Igbm8gbG9uZ2VyIHZhbGlkLgotICAgICAqIDwvcD48dWw+Ci0gICAgICogPGxpPntAbGluayAjRVhUUkFfRVJST1JfQ09ERX0gPGVtPihvcHRpb25hbCk8L2VtPjogU3BlY2lmaWVzIHRoZSBjYXVzZSBvZiB0aGUgZXJyb3IuCi0gICAgICogPC91bD4KLSAgICAgKgotICAgICAqIEBzZWUgTWVkaWFSb3V0ZXIuUm91dGVJbmZvI3NlbmRDb250cm9sUmVxdWVzdAotICAgICAqIEBzZWUgI0NBVEVHT1JZX1JFTU9URV9QTEFZQkFDSwotICAgICAqIEBzZWUgI0VYVFJBX1NFU1NJT05fU1RBVFVTX1VQREFURV9SRUNFSVZFUgotICAgICAqLwotICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIEFDVElPTl9HRVRfU0VTU0lPTl9TVEFUVVMgPQotICAgICAgICAgICAgImFuZHJvaWQubWVkaWEuaW50ZW50LmFjdGlvbi5HRVRfU0VTU0lPTl9TVEFUVVMiOwotCi0gICAgLyoqCi0gICAgICogUmVtb3RlIHBsYXliYWNrIG1lZGlhIGNvbnRyb2wgYWN0aW9uOiBFbmQgc2Vzc2lvbi4KLSAgICAgKiA8cD4KLSAgICAgKiBVc2VkIHdpdGggcm91dGVzIHRoYXQgc3VwcG9ydCB7QGxpbmsgI0NBVEVHT1JZX1JFTU9URV9QTEFZQkFDSyByZW1vdGUgcGxheWJhY2t9Ci0gICAgICogbWVkaWEgY29udHJvbC4KLSAgICAgKiA8L3A+PHA+Ci0gICAgICogVGhpcyBhY3Rpb24gY2F1c2VzIGEgcmVtb3RlIHBsYXliYWNrIHJvdXRlIHRvIGVuZCB0aGUgc3BlY2lmaWVkIHNlc3Npb24uCi0gICAgICogVGhlIHNlc3Npb24gYmVjb21lcyBubyBsb25nZXIgdmFsaWQgYW5kIHRoZSByb3V0ZSBjZWFzZXMgdG8gYmUgdW5kZXIgY29udHJvbAotICAgICAqIG9mIHRoZSBzZXNzaW9uLgotICAgICAqIDwvcD48cD4KLSAgICAgKiBJZiBzdWNjZXNzZnVsLCB0aGUgc3RhdHVzIG9mIHRoZSBzZXNzaW9uIGlzIHNldCB0bwotICAgICAqIHtAbGluayBNZWRpYVNlc3Npb25TdGF0dXMjU0VTU0lPTl9TVEFURV9FTkRFRH0gYW5kIGEgc3RhdHVzIHVwZGF0ZSBpcyBzZW50IHRvCi0gICAgICogdGhlIHNlc3Npb24ncyBzdGF0dXMgdXBkYXRlIHJlY2VpdmVyLgotICAgICAqIDwvcD48cD4KLSAgICAgKiBBZGRpdGlvbmFsbHksIHRoZSBzdGF0dXMgb2YgYWxsIG1lZGlhIGl0ZW1zIGluIHRoZSBxdWV1ZSBpcyBzZXQgdG8KLSAgICAgKiB7QGxpbmsgTWVkaWFJdGVtU3RhdHVzI1BMQVlCQUNLX1NUQVRFX0NBTkNFTEVEIGNhbmNlbGVkfSBhbmQgYSBzdGF0dXMgdXBkYXRlIGlzIHNlbnQKLSAgICAgKiB0byB0aGUgYXBwcm9wcmlhdGUgc3RhdHVzIHVwZGF0ZSByZWNlaXZlcnMgaW5kaWNhdGluZyB0aGUgbmV3IHN0YXR1cyBvZiBlYWNoIGl0ZW0uCi0gICAgICogPC9wPgotICAgICAqCi0gICAgICogPGgzPlJlcXVlc3QgcGFyYW1ldGVyczwvaDM+Ci0gICAgICogPHVsPgotICAgICAqIDxsaT57QGxpbmsgI0VYVFJBX1NFU1NJT05fSUR9IDxlbT4ocmVxdWlyZWQpPC9lbT46IFNwZWNpZmllcyB0aGUgc2Vzc2lvbiBpZCBvZgotICAgICAqIHRoZSBzZXNzaW9uIHRvIGVuZC4KLSAgICAgKiA8L3VsPgotICAgICAqCi0gICAgICogPGgzPlJlc3VsdCBkYXRhPC9oMz4KLSAgICAgKiA8dWw+Ci0gICAgICogPGxpPntAbGluayAjRVhUUkFfU0VTU0lPTl9TVEFUVVN9IDxlbT4oYWx3YXlzIHJldHVybmVkKTwvZW0+OiBTcGVjaWZpZXMgdGhlCi0gICAgICogc3RhdHVzIG9mIHRoZSBtZWRpYSBzZXNzaW9uLgotICAgICAqIDwvdWw+Ci0gICAgICoKLSAgICAgKiA8aDM+RXJyb3JzPC9oMz4KLSAgICAgKiA8cD4KLSAgICAgKiBUaGlzIGFjdGlvbiByZXR1cm5zIGFuIGVycm9yIGlmIHRoZSBzZXNzaW9uIGlkIGlzIHVua25vd24gb3Igbm8gbG9uZ2VyIHZhbGlkLgotICAgICAqIEluIG90aGVyIHdvcmRzLCBpdCBpcyBhbiBlcnJvciB0byBhdHRlbXB0IHRvIGVuZCBhIHNlc3Npb24gb3RoZXIgdGhhbiB0aGUKLSAgICAgKiBjdXJyZW50IHNlc3Npb24uCi0gICAgICogPC9wPjx1bD4KLSAgICAgKiA8bGk+e0BsaW5rICNFWFRSQV9FUlJPUl9DT0RFfSA8ZW0+KG9wdGlvbmFsKTwvZW0+OiBTcGVjaWZpZXMgdGhlIGNhdXNlIG9mIHRoZSBlcnJvci4KLSAgICAgKiA8L3VsPgotICAgICAqCi0gICAgICogQHNlZSBNZWRpYVJvdXRlci5Sb3V0ZUluZm8jc2VuZENvbnRyb2xSZXF1ZXN0Ci0gICAgICogQHNlZSAjQ0FURUdPUllfUkVNT1RFX1BMQVlCQUNLCi0gICAgICovCi0gICAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgQUNUSU9OX0VORF9TRVNTSU9OID0gImFuZHJvaWQubWVkaWEuaW50ZW50LmFjdGlvbi5FTkRfU0VTU0lPTiI7Ci0KLSAgICAvKioKLSAgICAgKiBDdXN0b20gbWVkaWEgY29udHJvbCBhY3Rpb246IFNlbmQge0BsaW5rICNFWFRSQV9NRVNTQUdFfS4KLSAgICAgKiA8cD4KLSAgICAgKiBUaGlzIGFjdGlvbiBhc2tzIGEgcm91dGUgdG8gaGFuZGxlIGEgbWVzc2FnZSBkZXNjcmliZWQgYnkgRVhUUkFfTUVTU0FHRS4KLSAgICAgKiA8L3A+Ci0gICAgICoKLSAgICAgKiA8aDM+UmVxdWVzdCBwYXJhbWV0ZXJzPC9oMz4KLSAgICAgKiA8dWw+Ci0gICAgICogPGxpPntAbGluayAjRVhUUkFfU0VTU0lPTl9JRH0gPGVtPihyZXF1aXJlZCk8L2VtPjogU3BlY2lmaWVzIHRoZSBzZXNzaW9uIGlkIG9mIHRoZSBzZXNzaW9uCi0gICAgICogdG8gd2hpY2ggd2lsbCBoYW5kbGUgdGhpcyBtZXNzYWdlLgotICAgICAqIDxsaT57QGxpbmsgI0VYVFJBX01FU1NBR0V9IDxlbT4ocmVxdWlyZWQpPC9lbT46IFNwZWNpZmllcyB0aGUgbWVzc2FnZSB0byBzZW5kLgotICAgICAqIDwvdWw+Ci0gICAgICoKLSAgICAgKiA8aDM+UmVzdWx0IGRhdGE8L2gzPgotICAgICAqIEFueSBtZXNzYWdlcyBkZWZpbmVkIGJ5IGVhY2ggbWVkaWEgcm91dGUgcHJvdmlkZXIuCi0gICAgICoKLSAgICAgKiA8aDM+RXJyb3JzPC9oMz4KLSAgICAgKiBBbnkgZXJyb3IgbWVzc2FnZXMgZGVmaW5lZCBieSBlYWNoIG1lZGlhIHJvdXRlIHByb3ZpZGVyLgotICAgICAqCi0gICAgICogQHNlZSBNZWRpYVJvdXRlci5Sb3V0ZUluZm8jc2VuZENvbnRyb2xSZXF1ZXN0Ci0gICAgICovCi0gICAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgQUNUSU9OX1NFTkRfTUVTU0FHRSA9ICJhbmRyb2lkLm1lZGlhLmludGVudC5hY3Rpb24uU0VORF9NRVNTQUdFIjsKLQotICAgIC8qIEV4dHJhcyBhbmQgcmVsYXRlZCBjb25zdGFudHMuICovCi0KLSAgICAvKioKLSAgICAgKiBCdW5kbGUgZXh0cmE6IE1lZGlhIHNlc3Npb24gaWQuCi0gICAgICogPHA+Ci0gICAgICogQW4gb3BhcXVlIHVuaXF1ZSBpZGVudGlmaWVyIHRoYXQgaWRlbnRpZmllcyB0aGUgcmVtb3RlIHBsYXliYWNrIG1lZGlhIHNlc3Npb24uCi0gICAgICogPC9wPjxwPgotICAgICAqIFVzZWQgd2l0aCB2YXJpb3VzIGFjdGlvbnMgdG8gc3BlY2lmeSB0aGUgaWQgb2YgdGhlIG1lZGlhIHNlc3Npb24gdG8gYmUgY29udHJvbGxlZC4KLSAgICAgKiA8L3A+PHA+Ci0gICAgICogSW5jbHVkZWQgaW4gYnJvYWRjYXN0IGludGVudHMgc2VudCB0bwotICAgICAqIHtAbGluayAjRVhUUkFfSVRFTV9TVEFUVVNfVVBEQVRFX1JFQ0VJVkVSIGl0ZW0gc3RhdHVzIHVwZGF0ZSByZWNlaXZlcnN9IHRvIGlkZW50aWZ5Ci0gICAgICogdGhlIHNlc3Npb24gdG8gd2hpY2ggdGhlIGl0ZW0gaW4gcXVlc3Rpb24gYmVsb25ncy4KLSAgICAgKiA8L3A+PHA+Ci0gICAgICogSW5jbHVkZWQgaW4gYnJvYWRjYXN0IGludGVudHMgc2VudCB0bwotICAgICAqIHtAbGluayAjRVhUUkFfU0VTU0lPTl9TVEFUVVNfVVBEQVRFX1JFQ0VJVkVSIHNlc3Npb24gc3RhdHVzIHVwZGF0ZSByZWNlaXZlcnN9IHRvIGlkZW50aWZ5Ci0gICAgICogdGhlIHNlc3Npb24uCi0gICAgICogPC9wPjxwPgotICAgICAqIFRoZSB2YWx1ZSBpcyBhIHVuaXF1ZSBzdHJpbmcgdmFsdWUgZ2VuZXJhdGVkIGJ5IHRoZSBtZWRpYSByb3V0ZSBwcm92aWRlcgotICAgICAqIHRvIHJlcHJlc2VudCBvbmUgcGFydGljdWxhciBtZWRpYSBzZXNzaW9uLgotICAgICAqIDwvcD4KLSAgICAgKgotICAgICAqIEBzZWUgI0FDVElPTl9QTEFZCi0gICAgICogQHNlZSAjQUNUSU9OX1NFRUsKLSAgICAgKiBAc2VlICNBQ1RJT05fR0VUX1NUQVRVUwotICAgICAqIEBzZWUgI0FDVElPTl9QQVVTRQotICAgICAqIEBzZWUgI0FDVElPTl9SRVNVTUUKLSAgICAgKiBAc2VlICNBQ1RJT05fU1RPUAotICAgICAqIEBzZWUgI0FDVElPTl9TVEFSVF9TRVNTSU9OCi0gICAgICogQHNlZSAjQUNUSU9OX0dFVF9TRVNTSU9OX1NUQVRVUwotICAgICAqIEBzZWUgI0FDVElPTl9FTkRfU0VTU0lPTgotICAgICAqLwotICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIEVYVFJBX1NFU1NJT05fSUQgPQotICAgICAgICAgICAgImFuZHJvaWQubWVkaWEuaW50ZW50LmV4dHJhLlNFU1NJT05fSUQiOwotCi0gICAgLyoqCi0gICAgICogQnVuZGxlIGV4dHJhOiBNZWRpYSBzZXNzaW9uIHN0YXR1cy4KLSAgICAgKiA8cD4KLSAgICAgKiBSZXR1cm5lZCBhcyBhIHJlc3VsdCBmcm9tIG1lZGlhIHNlc3Npb24gYWN0aW9ucyBzdWNoIGFzIHtAbGluayAjQUNUSU9OX1NUQVJUX1NFU1NJT059LAotICAgICAqIHtAbGluayAjQUNUSU9OX1BBVVNFfSwgYW5kIHtAbGluayAjQUNUSU9OX0dFVF9TRVNTSU9OX1NUQVRVU30KLSAgICAgKiB0byBkZXNjcmliZSB0aGUgc3RhdHVzIG9mIHRoZSBzcGVjaWZpZWQgbWVkaWEgc2Vzc2lvbi4KLSAgICAgKiA8L3A+PHA+Ci0gICAgICogSW5jbHVkZWQgaW4gYnJvYWRjYXN0IGludGVudHMgc2VudCB0bwotICAgICAqIHtAbGluayAjRVhUUkFfU0VTU0lPTl9TVEFUVVNfVVBEQVRFX1JFQ0VJVkVSIHNlc3Npb24gc3RhdHVzIHVwZGF0ZSByZWNlaXZlcnN9IHRvIHByb3ZpZGUKLSAgICAgKiB1cGRhdGVkIHN0YXR1cyBpbmZvcm1hdGlvbi4KLSAgICAgKiA8L3A+PHA+Ci0gICAgICogVGhlIHZhbHVlIGlzIGEge0BsaW5rIGFuZHJvaWQub3MuQnVuZGxlfSBvZiBkYXRhIHRoYXQgY2FuIGJlIGNvbnZlcnRlZCBpbnRvCi0gICAgICogYSB7QGxpbmsgTWVkaWFTZXNzaW9uU3RhdHVzfSBvYmplY3QgdXNpbmcKLSAgICAgKiB7QGxpbmsgTWVkaWFTZXNzaW9uU3RhdHVzI2Zyb21CdW5kbGUgTWVkaWFTZXNzaW9uU3RhdHVzLmZyb21CdW5kbGV9LgotICAgICAqIDwvcD4KLSAgICAgKgotICAgICAqIEBzZWUgI0FDVElPTl9QTEFZCi0gICAgICogQHNlZSAjQUNUSU9OX1NFRUsKLSAgICAgKiBAc2VlICNBQ1RJT05fR0VUX1NUQVRVUwotICAgICAqIEBzZWUgI0FDVElPTl9QQVVTRQotICAgICAqIEBzZWUgI0FDVElPTl9SRVNVTUUKLSAgICAgKiBAc2VlICNBQ1RJT05fU1RPUAotICAgICAqIEBzZWUgI0FDVElPTl9TVEFSVF9TRVNTSU9OCi0gICAgICogQHNlZSAjQUNUSU9OX0dFVF9TRVNTSU9OX1NUQVRVUwotICAgICAqIEBzZWUgI0FDVElPTl9FTkRfU0VTU0lPTgotICAgICAqLwotICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIEVYVFJBX1NFU1NJT05fU1RBVFVTID0KLSAgICAgICAgICAgICJhbmRyb2lkLm1lZGlhLmludGVudC5leHRyYS5TRVNTSU9OX1NUQVRVUyI7Ci0KLSAgICAvKioKLSAgICAgKiBCdW5kbGUgZXh0cmE6IE1lZGlhIHNlc3Npb24gc3RhdHVzIHVwZGF0ZSByZWNlaXZlci4KLSAgICAgKiA8cD4KLSAgICAgKiBVc2VkIHdpdGgge0BsaW5rICNBQ1RJT05fU1RBUlRfU0VTU0lPTn0gdG8gc3BlY2lmeSBhIHtAbGluayBQZW5kaW5nSW50ZW50fSBmb3IgYQotICAgICAqIGJyb2FkY2FzdCByZWNlaXZlciB0aGF0IHdpbGwgcmVjZWl2ZSBzdGF0dXMgdXBkYXRlcyBhYm91dCB0aGUgbWVkaWEgc2Vzc2lvbi4KLSAgICAgKiA8L3A+PHA+Ci0gICAgICogV2hlbmV2ZXIgdGhlIHN0YXR1cyBvZiB0aGUgbWVkaWEgc2Vzc2lvbiBjaGFuZ2VzLCB0aGUgbWVkaWEgcm91dGUgcHJvdmlkZXIgd2lsbAotICAgICAqIHNlbmQgYSBicm9hZGNhc3QgdG8gdGhlIHBlbmRpbmcgaW50ZW50IHdpdGggZXh0cmFzIHRoYXQgaWRlbnRpZnkgdGhlIHNlc3Npb24KLSAgICAgKiBpZCBhbmQgaXRzIHVwZGF0ZWQgc3RhdHVzLgotICAgICAqIDwvcD48cD4KLSAgICAgKiBUaGUgdmFsdWUgaXMgYSB7QGxpbmsgUGVuZGluZ0ludGVudH0uCi0gICAgICogPC9wPgotICAgICAqCi0gICAgICogPGgzPkJyb2FkY2FzdCBleHRyYXM8L2gzPgotICAgICAqIDx1bD4KLSAgICAgKiA8bGk+e0BsaW5rICNFWFRSQV9TRVNTSU9OX0lEfSA8ZW0+KHJlcXVpcmVkKTwvZW0+OiBTcGVjaWZpZXMgdGhlIHNlc3Npb24gaWQgb2YKLSAgICAgKiB0aGUgc2Vzc2lvbi4KLSAgICAgKiA8bGk+e0BsaW5rICNFWFRSQV9TRVNTSU9OX1NUQVRVU30gPGVtPihyZXF1aXJlZCk8L2VtPjogU3BlY2lmaWVzIHRoZSBzdGF0dXMgb2YgdGhlCi0gICAgICogc2Vzc2lvbiBhcyBhIGJ1bmRsZSB0aGF0IGNhbiBiZSBkZWNvZGVkIGludG8gYSB7QGxpbmsgTWVkaWFTZXNzaW9uU3RhdHVzfSBvYmplY3QuCi0gICAgICogPC91bD4KLSAgICAgKgotICAgICAqIEBzZWUgI0FDVElPTl9TVEFSVF9TRVNTSU9OCi0gICAgICovCi0gICAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgRVhUUkFfU0VTU0lPTl9TVEFUVVNfVVBEQVRFX1JFQ0VJVkVSID0KLSAgICAgICAgICAgICJhbmRyb2lkLm1lZGlhLmludGVudC5leHRyYS5TRVNTSU9OX1NUQVRVU19VUERBVEVfUkVDRUlWRVIiOwotCi0gICAgLyoqCi0gICAgICogQnVuZGxlIGV4dHJhOiBNZWRpYSBtZXNzYWdlIHJlY2VpdmVyLgotICAgICAqIDxwPgotICAgICAqIFVzZWQgd2l0aCB7QGxpbmsgI0FDVElPTl9TVEFSVF9TRVNTSU9OfSB0byBzcGVjaWZ5IGEge0BsaW5rIFBlbmRpbmdJbnRlbnR9IGZvciBhCi0gICAgICogYnJvYWRjYXN0IHJlY2VpdmVyIHRoYXQgd2lsbCByZWNlaXZlIG1lc3NhZ2VzIGZyb20gdGhlIG1lZGlhIHNlc3Npb24uCi0gICAgICogPC9wPjxwPgotICAgICAqIFdoZW4gdGhlIG1lZGlhIHNlc3Npb24gaGFzIGEgbWVzc2FnZSB0byBzZW5kLCB0aGUgbWVkaWEgcm91dGUgcHJvdmlkZXIgd2lsbAotICAgICAqIHNlbmQgYSBicm9hZGNhc3QgdG8gdGhlIHBlbmRpbmcgaW50ZW50IHdpdGggZXh0cmFzIHRoYXQgaWRlbnRpZnkgdGhlIHNlc3Npb24KLSAgICAgKiBpZCBhbmQgaXRzIG1lc3NhZ2UuCi0gICAgICogPC9wPjxwPgotICAgICAqIFRoZSB2YWx1ZSBpcyBhIHtAbGluayBQZW5kaW5nSW50ZW50fS4KLSAgICAgKiA8L3A+Ci0gICAgICoKLSAgICAgKiA8aDM+QnJvYWRjYXN0IGV4dHJhczwvaDM+Ci0gICAgICogPHVsPgotICAgICAqIDxsaT57QGxpbmsgI0VYVFJBX1NFU1NJT05fSUR9IDxlbT4ocmVxdWlyZWQpPC9lbT46IFNwZWNpZmllcyB0aGUgc2Vzc2lvbiBpZCBvZgotICAgICAqIHRoZSBzZXNzaW9uLgotICAgICAqIDxsaT57QGxpbmsgI0VYVFJBX01FU1NBR0V9IDxlbT4ocmVxdWlyZWQpPC9lbT46IFNwZWNpZmllcyB0aGUgbWVzc2FnZSBmcm9tCi0gICAgICogdGhlIHNlc3Npb24gYXMgYSBidW5kbGUgb2JqZWN0LgotICAgICAqIDwvdWw+Ci0gICAgICoKLSAgICAgKiBAc2VlICNBQ1RJT05fU1RBUlRfU0VTU0lPTgotICAgICAqLwotICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIEVYVFJBX01FU1NBR0VfUkVDRUlWRVIgPQotICAgICAgICAgICAgImFuZHJvaWQubWVkaWEuaW50ZW50LmV4dHJhLk1FU1NBR0VfUkVDRUlWRVIiOwotCi0gICAgLyoqCi0gICAgICogQnVuZGxlIGV4dHJhOiBNZWRpYSBpdGVtIGlkLgotICAgICAqIDxwPgotICAgICAqIEFuIG9wYXF1ZSB1bmlxdWUgaWRlbnRpZmllciByZXR1cm5lZCBhcyBhIHJlc3VsdCBmcm9tIHtAbGluayAjQUNUSU9OX1BMQVl9IG9yCi0gICAgICoge0BsaW5rICNBQ1RJT05fRU5RVUVVRX0gdGhhdCByZXByZXNlbnRzIHRoZSBtZWRpYSBpdGVtIHRoYXQgd2FzIGNyZWF0ZWQgYnkgdGhlCi0gICAgICogcGxheWJhY2sgcmVxdWVzdC4KLSAgICAgKiA8L3A+PHA+Ci0gICAgICogVXNlZCB3aXRoIHZhcmlvdXMgYWN0aW9ucyB0byBzcGVjaWZ5IHRoZSBpZCBvZiB0aGUgbWVkaWEgaXRlbSB0byBiZSBjb250cm9sbGVkLgotICAgICAqIDwvcD48cD4KLSAgICAgKiBJbmNsdWRlZCBpbiBicm9hZGNhc3QgaW50ZW50cyBzZW50IHRvCi0gICAgICoge0BsaW5rICNFWFRSQV9JVEVNX1NUQVRVU19VUERBVEVfUkVDRUlWRVIgc3RhdHVzIHVwZGF0ZSByZWNlaXZlcnN9IHRvIGlkZW50aWZ5Ci0gICAgICogdGhlIGl0ZW0gaW4gcXVlc3Rpb24uCi0gICAgICogPC9wPjxwPgotICAgICAqIFRoZSB2YWx1ZSBpcyBhIHVuaXF1ZSBzdHJpbmcgdmFsdWUgZ2VuZXJhdGVkIGJ5IHRoZSBtZWRpYSByb3V0ZSBwcm92aWRlcgotICAgICAqIHRvIHJlcHJlc2VudCBvbmUgcGFydGljdWxhciBtZWRpYSBpdGVtLgotICAgICAqIDwvcD4KLSAgICAgKgotICAgICAqIEBzZWUgI0FDVElPTl9QTEFZCi0gICAgICogQHNlZSAjQUNUSU9OX0VOUVVFVUUKLSAgICAgKiBAc2VlICNBQ1RJT05fU0VFSwotICAgICAqIEBzZWUgI0FDVElPTl9HRVRfU1RBVFVTCi0gICAgICovCi0gICAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgRVhUUkFfSVRFTV9JRCA9Ci0gICAgICAgICAgICAiYW5kcm9pZC5tZWRpYS5pbnRlbnQuZXh0cmEuSVRFTV9JRCI7Ci0KLSAgICAvKioKLSAgICAgKiBCdW5kbGUgZXh0cmE6IE1lZGlhIGl0ZW0gc3RhdHVzLgotICAgICAqIDxwPgotICAgICAqIFJldHVybmVkIGFzIGEgcmVzdWx0IGZyb20gbWVkaWEgaXRlbSBhY3Rpb25zIHN1Y2ggYXMge0BsaW5rICNBQ1RJT05fUExBWX0sCi0gICAgICoge0BsaW5rICNBQ1RJT05fRU5RVUVVRX0sIHtAbGluayAjQUNUSU9OX1NFRUt9LCBhbmQge0BsaW5rICNBQ1RJT05fR0VUX1NUQVRVU30KLSAgICAgKiB0byBkZXNjcmliZSB0aGUgc3RhdHVzIG9mIHRoZSBzcGVjaWZpZWQgbWVkaWEgaXRlbS4KLSAgICAgKiA8L3A+PHA+Ci0gICAgICogSW5jbHVkZWQgaW4gYnJvYWRjYXN0IGludGVudHMgc2VudCB0bwotICAgICAqIHtAbGluayAjRVhUUkFfSVRFTV9TVEFUVVNfVVBEQVRFX1JFQ0VJVkVSIGl0ZW0gc3RhdHVzIHVwZGF0ZSByZWNlaXZlcnN9IHRvIHByb3ZpZGUKLSAgICAgKiB1cGRhdGVkIHN0YXR1cyBpbmZvcm1hdGlvbi4KLSAgICAgKiA8L3A+PHA+Ci0gICAgICogVGhlIHZhbHVlIGlzIGEge0BsaW5rIGFuZHJvaWQub3MuQnVuZGxlfSBvZiBkYXRhIHRoYXQgY2FuIGJlIGNvbnZlcnRlZCBpbnRvCi0gICAgICogYSB7QGxpbmsgTWVkaWFJdGVtU3RhdHVzfSBvYmplY3QgdXNpbmcKLSAgICAgKiB7QGxpbmsgTWVkaWFJdGVtU3RhdHVzI2Zyb21CdW5kbGUgTWVkaWFJdGVtU3RhdHVzLmZyb21CdW5kbGV9LgotICAgICAqIDwvcD4KLSAgICAgKgotICAgICAqIEBzZWUgI0FDVElPTl9QTEFZCi0gICAgICogQHNlZSAjQUNUSU9OX0VOUVVFVUUKLSAgICAgKiBAc2VlICNBQ1RJT05fU0VFSwotICAgICAqIEBzZWUgI0FDVElPTl9HRVRfU1RBVFVTCi0gICAgICovCi0gICAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgRVhUUkFfSVRFTV9TVEFUVVMgPQotICAgICAgICAgICAgImFuZHJvaWQubWVkaWEuaW50ZW50LmV4dHJhLklURU1fU1RBVFVTIjsKLQotICAgIC8qKgotICAgICAqIExvbmcgZXh0cmE6IE1lZGlhIGl0ZW0gY29udGVudCBwb3NpdGlvbi4KLSAgICAgKiA8cD4KLSAgICAgKiBVc2VkIHdpdGgge0BsaW5rICNBQ1RJT05fUExBWX0gb3Ige0BsaW5rICNBQ1RJT05fRU5RVUVVRX0gdG8gc3BlY2lmeSB0aGUKLSAgICAgKiBzdGFydGluZyBwbGF5YmFjayBwb3NpdGlvbi4KLSAgICAgKiA8L3A+PHA+Ci0gICAgICogVXNlZCB3aXRoIHtAbGluayAjQUNUSU9OX1NFRUt9IHRvIHNldCBhIG5ldyBwbGF5YmFjayBwb3NpdGlvbi4KLSAgICAgKiA8L3A+PHA+Ci0gICAgICogVGhlIHZhbHVlIGlzIGEgbG9uZyBpbnRlZ2VyIG51bWJlciBvZiBtaWxsaXNlY29uZHMgZnJvbSB0aGUgYmVnaW5uaW5nIG9mIHRoZSBjb250ZW50LgotICAgICAqIDxwPgotICAgICAqCi0gICAgICogQHNlZSAjQUNUSU9OX1BMQVkKLSAgICAgKiBAc2VlICNBQ1RJT05fRU5RVUVVRQotICAgICAqIEBzZWUgI0FDVElPTl9TRUVLCi0gICAgICovCi0gICAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgRVhUUkFfSVRFTV9DT05URU5UX1BPU0lUSU9OID0KLSAgICAgICAgICAgICJhbmRyb2lkLm1lZGlhLmludGVudC5leHRyYS5JVEVNX1BPU0lUSU9OIjsKLQotICAgIC8qKgotICAgICAqIEJ1bmRsZSBleHRyYTogTWVkaWEgaXRlbSBtZXRhZGF0YS4KLSAgICAgKiA8cD4KLSAgICAgKiBVc2VkIHdpdGgge0BsaW5rICNBQ1RJT05fUExBWX0gb3Ige0BsaW5rICNBQ1RJT05fRU5RVUVVRX0gdG8gc3BlY2lmeSBtZXRhZGF0YQotICAgICAqIGFzc29jaWF0ZWQgd2l0aCB0aGUgY29udGVudCBvZiBhIG1lZGlhIGl0ZW0uCi0gICAgICogPC9wPjxwPgotICAgICAqIFRoZSB2YWx1ZSBpcyBhIHtAbGluayBhbmRyb2lkLm9zLkJ1bmRsZX0gb2YgbWV0YWRhdGEga2V5LXZhbHVlIHBhaXJzIGFzIGRlZmluZWQKLSAgICAgKiBpbiB7QGxpbmsgTWVkaWFJdGVtTWV0YWRhdGF9LgotICAgICAqIDwvcD4KLSAgICAgKgotICAgICAqIEBzZWUgI0FDVElPTl9QTEFZCi0gICAgICogQHNlZSAjQUNUSU9OX0VOUVVFVUUKLSAgICAgKi8KLSAgICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBFWFRSQV9JVEVNX01FVEFEQVRBID0KLSAgICAgICAgICAgICJhbmRyb2lkLm1lZGlhLmludGVudC5leHRyYS5JVEVNX01FVEFEQVRBIjsKLQotICAgIC8qKgotICAgICAqIEJ1bmRsZSBleHRyYTogSFRUUCByZXF1ZXN0IGhlYWRlcnMuCi0gICAgICogPHA+Ci0gICAgICogVXNlZCB3aXRoIHtAbGluayAjQUNUSU9OX1BMQVl9IG9yIHtAbGluayAjQUNUSU9OX0VOUVVFVUV9IHRvIHNwZWNpZnkgSFRUUCByZXF1ZXN0Ci0gICAgICogaGVhZGVycyB0byBiZSBpbmNsdWRlZCB3aGVuIGZldGNoaW5nIHRvIHRoZSBjb250ZW50IGluZGljYXRlZCBieSB0aGUgbWVkaWEKLSAgICAgKiBpdGVtJ3MgZGF0YSBVcmkuCi0gICAgICogPC9wPjxwPgotICAgICAqIFRoaXMgZXh0cmEgbWF5IGJlIHVzZWQgdG8gcHJvdmlkZSBhdXRoZW50aWNhdGlvbiB0b2tlbnMgYW5kIG90aGVyCi0gICAgICogcGFyYW1ldGVycyB0byB0aGUgc2VydmVyIHNlcGFyYXRlbHkgZnJvbSB0aGUgbWVkaWEgaXRlbSdzIGRhdGEgVXJpLgotICAgICAqIDwvcD48cD4KLSAgICAgKiBUaGUgdmFsdWUgaXMgYSB7QGxpbmsgYW5kcm9pZC5vcy5CdW5kbGV9IG9mIHN0cmluZyBiYXNlZCBrZXktdmFsdWUgcGFpcnMKLSAgICAgKiB0aGF0IGRlc2NyaWJlIHRoZSBIVFRQIHJlcXVlc3QgaGVhZGVycy4KLSAgICAgKiA8L3A+Ci0gICAgICoKLSAgICAgKiBAc2VlICNBQ1RJT05fUExBWQotICAgICAqIEBzZWUgI0FDVElPTl9FTlFVRVVFCi0gICAgICovCi0gICAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgRVhUUkFfSVRFTV9IVFRQX0hFQURFUlMgPQotICAgICAgICAgICAgImFuZHJvaWQubWVkaWEuaW50ZW50LmV4dHJhLkhUVFBfSEVBREVSUyI7Ci0KLSAgICAvKioKLSAgICAgKiBCdW5kbGUgZXh0cmE6IE1lZGlhIGl0ZW0gc3RhdHVzIHVwZGF0ZSByZWNlaXZlci4KLSAgICAgKiA8cD4KLSAgICAgKiBVc2VkIHdpdGgge0BsaW5rICNBQ1RJT05fUExBWX0gb3Ige0BsaW5rICNBQ1RJT05fRU5RVUVVRX0gdG8gc3BlY2lmeQotICAgICAqIGEge0BsaW5rIFBlbmRpbmdJbnRlbnR9IGZvciBhCi0gICAgICogYnJvYWRjYXN0IHJlY2VpdmVyIHRoYXQgd2lsbCByZWNlaXZlIHN0YXR1cyB1cGRhdGVzIGFib3V0IGEgcGFydGljdWxhcgotICAgICAqIG1lZGlhIGl0ZW0uCi0gICAgICogPC9wPjxwPgotICAgICAqIFdoZW5ldmVyIHRoZSBzdGF0dXMgb2YgdGhlIG1lZGlhIGl0ZW0gY2hhbmdlcywgdGhlIG1lZGlhIHJvdXRlIHByb3ZpZGVyIHdpbGwKLSAgICAgKiBzZW5kIGEgYnJvYWRjYXN0IHRvIHRoZSBwZW5kaW5nIGludGVudCB3aXRoIGV4dHJhcyB0aGF0IGlkZW50aWZ5IHRoZSBzZXNzaW9uCi0gICAgICogdG8gd2hpY2ggdGhlIGl0ZW0gYmVsb25ncywgdGhlIHNlc3Npb24gc3RhdHVzLCB0aGUgaXRlbSdzIGlkCi0gICAgICogYW5kIHRoZSBpdGVtJ3MgdXBkYXRlZCBzdGF0dXMuCi0gICAgICogPC9wPjxwPgotICAgICAqIFRoZSBzYW1lIHBlbmRpbmcgaW50ZW50IGFuZCBicm9hZGNhc3QgcmVjZWl2ZXIgbWF5IGJlIHNoYXJlZCBieSBhbnkgbnVtYmVyIG9mCi0gICAgICogbWVkaWEgaXRlbXMgc2luY2UgdGhlIGJyb2FkY2FzdCBpbnRlbnQgaW5jbHVkZXMgdGhlIG1lZGlhIHNlc3Npb24gaWQKLSAgICAgKiBhbmQgbWVkaWEgaXRlbSBpZC4KLSAgICAgKiA8L3A+PHA+Ci0gICAgICogVGhlIHZhbHVlIGlzIGEge0BsaW5rIFBlbmRpbmdJbnRlbnR9LgotICAgICAqIDwvcD4KLSAgICAgKgotICAgICAqIDxoMz5Ccm9hZGNhc3QgZXh0cmFzPC9oMz4KLSAgICAgKiA8dWw+Ci0gICAgICogPGxpPntAbGluayAjRVhUUkFfU0VTU0lPTl9JRH0gPGVtPihyZXF1aXJlZCk8L2VtPjogU3BlY2lmaWVzIHRoZSBzZXNzaW9uIGlkIG9mCi0gICAgICogdGhlIHNlc3Npb24gdG8gd2hpY2ggdGhlIGl0ZW0gaW4gcXVlc3Rpb24gYmVsb25ncy4KLSAgICAgKiA8bGk+e0BsaW5rICNFWFRSQV9TRVNTSU9OX1NUQVRVU30gPGVtPihvcHRpb25hbCwgb2xkIGltcGxlbWVudGF0aW9ucyBtYXkKLSAgICAgKiBvbWl0IHRoaXMga2V5KTwvZW0+OiBTcGVjaWZpZXMgdGhlIHN0YXR1cyBvZiB0aGUgbWVkaWEgc2Vzc2lvbi4KLSAgICAgKiA8bGk+e0BsaW5rICNFWFRSQV9JVEVNX0lEfSA8ZW0+KHJlcXVpcmVkKTwvZW0+OiBTcGVjaWZpZXMgdGhlIG1lZGlhIGl0ZW0gaWQgb2YgdGhlCi0gICAgICogbWVkaWEgaXRlbSBpbiBxdWVzdGlvbi4KLSAgICAgKiA8bGk+e0BsaW5rICNFWFRSQV9JVEVNX1NUQVRVU30gPGVtPihyZXF1aXJlZCk8L2VtPjogU3BlY2lmaWVzIHRoZSBzdGF0dXMgb2YgdGhlCi0gICAgICogaXRlbSBhcyBhIGJ1bmRsZSB0aGF0IGNhbiBiZSBkZWNvZGVkIGludG8gYSB7QGxpbmsgTWVkaWFJdGVtU3RhdHVzfSBvYmplY3QuCi0gICAgICogPC91bD4KLSAgICAgKgotICAgICAqIEBzZWUgI0FDVElPTl9QTEFZCi0gICAgICogQHNlZSAjQUNUSU9OX0VOUVVFVUUKLSAgICAgKi8KLSAgICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBFWFRSQV9JVEVNX1NUQVRVU19VUERBVEVfUkVDRUlWRVIgPQotICAgICAgICAgICAgImFuZHJvaWQubWVkaWEuaW50ZW50LmV4dHJhLklURU1fU1RBVFVTX1VQREFURV9SRUNFSVZFUiI7Ci0KLSAgICAvKioKLSAgICAgKiBCdW5kbGUgZXh0cmE6IE1lc3NhZ2UuCi0gICAgICogPHA+Ci0gICAgICogVXNlZCB3aXRoIHtAbGluayAjQUNUSU9OX1NFTkRfTUVTU0FHRX0sIGFuZCBpbmNsdWRlZCBpbiBicm9hZGNhc3QgaW50ZW50cyBzZW50IHRvCi0gICAgICoge0BsaW5rICNFWFRSQV9NRVNTQUdFX1JFQ0VJVkVSIG1lc3NhZ2UgcmVjZWl2ZXJzfSB0byBkZXNjcmliZSBhIG1lc3NhZ2UgYmV0d2VlbiBhCi0gICAgICogc2Vzc2lvbiBhbmQgYSBtZWRpYSByb3V0ZSBwcm92aWRlci4KLSAgICAgKiA8L3A+PHA+Ci0gICAgICogVGhlIHZhbHVlIGlzIGEge0BsaW5rIGFuZHJvaWQub3MuQnVuZGxlfS4KLSAgICAgKiA8L3A+Ci0gICAgICovCi0gICAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgRVhUUkFfTUVTU0FHRSA9ICJhbmRyb2lkLm1lZGlhLmludGVudC5leHRyYS5NRVNTQUdFIjsKLQotICAgIC8qKgotICAgICAqIEludGVnZXIgZXh0cmE6IEVycm9yIGNvZGUuCi0gICAgICogPHA+Ci0gICAgICogVXNlZCB3aXRoIGFsbCBtZWRpYSBjb250cm9sIHJlcXVlc3RzIHRvIGRlc2NyaWJlIHRoZSBjYXVzZSBvZiBhbiBlcnJvci4KLSAgICAgKiBUaGlzIGV4dHJhIG1heSBiZSBvbWl0dGVkIHdoZW4gdGhlIGVycm9yIGlzIHVua25vd24uCi0gICAgICogPC9wPjxwPgotICAgICAqIFRoZSB2YWx1ZSBpcyBvbmUgb2Y6IHtAbGluayAjRVJST1JfVU5LTk9XTn0sIHtAbGluayAjRVJST1JfVU5TVVBQT1JURURfT1BFUkFUSU9OfSwKLSAgICAgKiB7QGxpbmsgI0VSUk9SX0lOVkFMSURfU0VTU0lPTl9JRH0sIHtAbGluayAjRVJST1JfSU5WQUxJRF9JVEVNX0lEfS4KLSAgICAgKiA8L3A+Ci0gICAgICovCi0gICAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgRVhUUkFfRVJST1JfQ09ERSA9ICJhbmRyb2lkLm1lZGlhLmludGVudC5leHRyYS5FUlJPUl9DT0RFIjsKLQotICAgIC8qKgotICAgICAqIEVycm9yIGNvZGU6IEFuIHVua25vd24gZXJyb3Igb2NjdXJyZWQuCi0gICAgICoKLSAgICAgKiBAc2VlICNFWFRSQV9FUlJPUl9DT0RFCi0gICAgICovCi0gICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgRVJST1JfVU5LTk9XTiA9IDA7Ci0KLSAgICAvKioKLSAgICAgKiBFcnJvciBjb2RlOiBUaGUgb3BlcmF0aW9uIGlzIG5vdCBzdXBwb3J0ZWQuCi0gICAgICoKLSAgICAgKiBAc2VlICNFWFRSQV9FUlJPUl9DT0RFCi0gICAgICovCi0gICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgRVJST1JfVU5TVVBQT1JURURfT1BFUkFUSU9OID0gMTsKLQotICAgIC8qKgotICAgICAqIEVycm9yIGNvZGU6IFRoZSBzZXNzaW9uIGlkIHNwZWNpZmllZCBpbiB0aGUgcmVxdWVzdCB3YXMgaW52YWxpZC4KLSAgICAgKgotICAgICAqIEBzZWUgI0VYVFJBX0VSUk9SX0NPREUKLSAgICAgKi8KLSAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBFUlJPUl9JTlZBTElEX1NFU1NJT05fSUQgPSAyOwotCi0gICAgLyoqCi0gICAgICogRXJyb3IgY29kZTogVGhlIGl0ZW0gaWQgc3BlY2lmaWVkIGluIHRoZSByZXF1ZXN0IHdhcyBpbnZhbGlkLgotICAgICAqCi0gICAgICogQHNlZSAjRVhUUkFfRVJST1JfQ09ERQotICAgICAqLwotICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEVSUk9SX0lOVkFMSURfSVRFTV9JRCA9IDM7Ci0KLSAgICBwcml2YXRlIE1lZGlhQ29udHJvbEludGVudCgpIHsKLSAgICB9Ci19CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9NZWRpYUNvbXBvbmVudHMvc3JjL2NvbS9hbmRyb2lkL3N1cHBvcnQvbWVkaWFyb3V0ZXIvbWVkaWEvTWVkaWFJdGVtTWV0YWRhdGEuamF2YSBiL3BhY2thZ2VzL01lZGlhQ29tcG9uZW50cy9zcmMvY29tL2FuZHJvaWQvc3VwcG9ydC9tZWRpYXJvdXRlci9tZWRpYS9NZWRpYUl0ZW1NZXRhZGF0YS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkNTJkZGI2Li4wMDAwMDAwCi0tLSBhL3BhY2thZ2VzL01lZGlhQ29tcG9uZW50cy9zcmMvY29tL2FuZHJvaWQvc3VwcG9ydC9tZWRpYXJvdXRlci9tZWRpYS9NZWRpYUl0ZW1NZXRhZGF0YS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTM4ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgMjAxOCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0Ci0gKgotICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7Ci0gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCi0gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLSAqCi0gKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotICoKLSAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKLSAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCi0gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KLSAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKLSAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgotICovCi0KLXBhY2thZ2UgY29tLmFuZHJvaWQuc3VwcG9ydC5tZWRpYXJvdXRlci5tZWRpYTsKLQotaW1wb3J0IGFuZHJvaWQub3MuQnVuZGxlOwotCi0vKioKLSAqIENvbnN0YW50cyBmb3Igc3BlY2lmeWluZyBtZXRhZGF0YSBhYm91dCBhIG1lZGlhIGl0ZW0gYXMgYSB7QGxpbmsgQnVuZGxlfS4KLSAqIDxwPgotICogVGhpcyBjbGFzcyBpcyBwYXJ0IG9mIHRoZSByZW1vdGUgcGxheWJhY2sgcHJvdG9jb2wgZGVzY3JpYmVkIGJ5IHRoZQotICoge0BsaW5rIE1lZGlhQ29udHJvbEludGVudCBNZWRpYUNvbnRyb2xJbnRlbnR9IGNsYXNzLgotICogPC9wPjxwPgotICogTWVkaWEgaXRlbSBtZXRhZGF0YSBpcyBkZXNjcmliZWQgYXMgYSBidW5kbGUgb2Yga2V5L3ZhbHVlIHBhaXJzIGFzIGRlZmluZWQKLSAqIGluIHRoaXMgY2xhc3MuICBUaGUgZG9jdW1lbnRhdGlvbiBzcGVjaWZpZXMgdGhlIHR5cGUgb2YgdmFsdWUgYXNzb2NpYXRlZAotICogd2l0aCBlYWNoIGtleS4KLSAqIDwvcD48cD4KLSAqIEFuIGFwcGxpY2F0aW9uIG1heSBzcGVjaWZ5IGFkZGl0aW9uYWwgY3VzdG9tIG1ldGFkYXRhIGtleXMgYnV0IHRoZXJlIGlzIG5vIGd1YXJhbnRlZQotICogdGhhdCB0aGV5IHdpbGwgYmUgcmVjb2duaXplZCBieSB0aGUgZGVzdGluYXRpb24uCi0gKiA8L3A+Ci0gKi8KLXB1YmxpYyBmaW5hbCBjbGFzcyBNZWRpYUl0ZW1NZXRhZGF0YSB7Ci0gICAgLyoKLSAgICAgKiBOb3RlOiBNZWRpYU1ldGFkYXRhUmV0cmlldmVyIGFsc28gZGVmaW5lcyBhIGNvbGxlY3Rpb24gb2YgbWV0YWRhdGEga2V5cyB0aGF0IGNhbiBiZQotICAgICAqIHJldHJpZXZlZCBmcm9tIGEgY29udGVudCBzdHJlYW0gYWx0aG91Z2ggdGhlIHJlcHJlc2VudGF0aW9uIGlzIHNvbWV3aGF0IGRpZmZlcmVudCBoZXJlCi0gICAgICogc2luY2Ugd2UgYXJlIHNlbmRpbmcgdGhlIGRhdGEgdG8gYSByZW1vdGUgZW5kcG9pbnQuCi0gICAgICovCi0KLSAgICBwcml2YXRlIE1lZGlhSXRlbU1ldGFkYXRhKCkgewotICAgIH0KLQotICAgIC8qKgotICAgICAqIFN0cmluZyBrZXk6IEFsYnVtIGFydGlzdCBuYW1lLgotICAgICAqIDxwPgotICAgICAqIFRoZSB2YWx1ZSBpcyBhIHN0cmluZyBzdWl0YWJsZSBmb3IgZGlzcGxheS4KLSAgICAgKiA8L3A+Ci0gICAgICovCi0gICAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgS0VZX0FMQlVNX0FSVElTVCA9ICJhbmRyb2lkLm1lZGlhLm1ldGFkYXRhLkFMQlVNX0FSVElTVCI7Ci0KLSAgICAvKioKLSAgICAgKiBTdHJpbmcga2V5OiBBbGJ1bSB0aXRsZS4KLSAgICAgKiA8cD4KLSAgICAgKiBUaGUgdmFsdWUgaXMgYSBzdHJpbmcgc3VpdGFibGUgZm9yIGRpc3BsYXkuCi0gICAgICogPC9wPgotICAgICAqLwotICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIEtFWV9BTEJVTV9USVRMRSA9ICJhbmRyb2lkLm1lZGlhLm1ldGFkYXRhLkFMQlVNX1RJVExFIjsKLQotICAgIC8qKgotICAgICAqIFN0cmluZyBrZXk6IEFydHdvcmsgVXJpLgotICAgICAqIDxwPgotICAgICAqIFRoZSB2YWx1ZSBpcyBhIHN0cmluZyBVUkkgZm9yIGFuIGltYWdlIGZpbGUgYXNzb2NpYXRlZCB3aXRoIHRoZSBtZWRpYSBpdGVtLAotICAgICAqIHN1Y2ggYXMgYWxidW0gb3IgY292ZXIgYXJ0LgotICAgICAqIDwvcD4KLSAgICAgKi8KLSAgICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBLRVlfQVJUV09SS19VUkkgPSAiYW5kcm9pZC5tZWRpYS5tZXRhZGF0YS5BUlRXT1JLX1VSSSI7Ci0KLSAgICAvKioKLSAgICAgKiBTdHJpbmcga2V5OiBBcnRpc3QgbmFtZS4KLSAgICAgKiA8cD4KLSAgICAgKiBUaGUgdmFsdWUgaXMgYSBzdHJpbmcgc3VpdGFibGUgZm9yIGRpc3BsYXkuCi0gICAgICogPC9wPgotICAgICAqLwotICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIEtFWV9BUlRJU1QgPSAiYW5kcm9pZC5tZWRpYS5tZXRhZGF0YS5BUlRJU1QiOwotCi0gICAgLyoqCi0gICAgICogU3RyaW5nIGtleTogQXV0aG9yIG5hbWUuCi0gICAgICogPHA+Ci0gICAgICogVGhlIHZhbHVlIGlzIGEgc3RyaW5nIHN1aXRhYmxlIGZvciBkaXNwbGF5LgotICAgICAqIDwvcD4KLSAgICAgKi8KLSAgICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBLRVlfQVVUSE9SID0gImFuZHJvaWQubWVkaWEubWV0YWRhdGEuQVVUSE9SIjsKLQotICAgIC8qKgotICAgICAqIFN0cmluZyBrZXk6IENvbXBvc2VyIG5hbWUuCi0gICAgICogPHA+Ci0gICAgICogVGhlIHZhbHVlIGlzIGEgc3RyaW5nIHN1aXRhYmxlIGZvciBkaXNwbGF5LgotICAgICAqIDwvcD4KLSAgICAgKi8KLSAgICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBLRVlfQ09NUE9TRVIgPSAiYW5kcm9pZC5tZWRpYS5tZXRhZGF0YS5DT01QT1NFUiI7Ci0KLSAgICAvKioKLSAgICAgKiBTdHJpbmcga2V5OiBUcmFjayB0aXRsZS4KLSAgICAgKiA8cD4KLSAgICAgKiBUaGUgdmFsdWUgaXMgYSBzdHJpbmcgc3VpdGFibGUgZm9yIGRpc3BsYXkuCi0gICAgICogPC9wPgotICAgICAqLwotICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIEtFWV9USVRMRSA9ICJhbmRyb2lkLm1lZGlhLm1ldGFkYXRhLlRJVExFIjsKLQotICAgIC8qKgotICAgICAqIEludGVnZXIga2V5OiBZZWFyIG9mIHB1YmxpY2F0aW9uLgotICAgICAqIDxwPgotICAgICAqIFRoZSB2YWx1ZSBpcyBhbiBpbnRlZ2VyIHllYXIgbnVtYmVyLgotICAgICAqIDwvcD4KLSAgICAgKi8KLSAgICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBLRVlfWUVBUiA9ICJhbmRyb2lkLm1lZGlhLm1ldGFkYXRhLllFQVIiOwotCi0gICAgLyoqCi0gICAgICogSW50ZWdlciBrZXk6IFRyYWNrIG51bWJlciAoc3VjaCBhcyBhIHRyYWNrIG9uIGEgQ0QpLgotICAgICAqIDxwPgotICAgICAqIFRoZSB2YWx1ZSBpcyBhIG9uZS1iYXNlZCBpbnRlZ2VyIHRyYWNrIG51bWJlci4KLSAgICAgKiA8L3A+Ci0gICAgICovCi0gICAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgS0VZX1RSQUNLX05VTUJFUiA9ICJhbmRyb2lkLm1lZGlhLm1ldGFkYXRhLlRSQUNLX05VTUJFUiI7Ci0KLSAgICAvKioKLSAgICAgKiBJbnRlZ2VyIGtleTogRGlzYyBudW1iZXIgd2l0aGluIGEgY29sbGVjdGlvbi4KLSAgICAgKiA8cD4KLSAgICAgKiBUaGUgdmFsdWUgaXMgYSBvbmUtYmFzZWQgaW50ZWdlciBkaXNjIG51bWJlci4KLSAgICAgKiA8L3A+Ci0gICAgICovCi0gICAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgS0VZX0RJU0NfTlVNQkVSID0gImFuZHJvaWQubWVkaWEubWV0YWRhdGEuRElTQ19OVU1CRVIiOwotCi0gICAgLyoqCi0gICAgICogTG9uZyBrZXk6IEl0ZW0gcGxheWJhY2sgZHVyYXRpb24gaW4gbWlsbGlzZWNvbmRzLgotICAgICAqIDxwPgotICAgICAqIFRoZSB2YWx1ZSBpcyBhIDxjb2RlPmxvbmc8L2NvZGU+IG51bWJlciBvZiBtaWxsaXNlY29uZHMuCi0gICAgICogPC9wPjxwPgotICAgICAqIFRoZSBkdXJhdGlvbiBtZXRhZGF0YSBpcyBvbmx5IGEgaGludCB0byBlbmFibGUgYSByZW1vdGUgbWVkaWEgcGxheWVyIHRvCi0gICAgICogZ3Vlc3MgdGhlIGR1cmF0aW9uIG9mIHRoZSBjb250ZW50IGJlZm9yZSBpdCBhY3R1YWxseSBvcGVucyB0aGUgbWVkaWEgc3RyZWFtLgotICAgICAqIFRoZSByZW1vdGUgbWVkaWEgcGxheWVyIHNob3VsZCBzdGlsbCBkZXRlcm1pbmUgdGhlIGFjdHVhbCBjb250ZW50IGR1cmF0aW9uIGZyb20KLSAgICAgKiB0aGUgbWVkaWEgc3RyZWFtIGl0c2VsZiBpbmRlcGVuZGVudCBvZiB0aGUgdmFsdWUgdGhhdCBtYXkgYmUgc3BlY2lmaWVkIGJ5IHRoaXMga2V5LgotICAgICAqIDwvcD4KLSAgICAgKi8KLSAgICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBLRVlfRFVSQVRJT04gPSAiYW5kcm9pZC5tZWRpYS5tZXRhZGF0YS5EVVJBVElPTiI7Ci19CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9NZWRpYUNvbXBvbmVudHMvc3JjL2NvbS9hbmRyb2lkL3N1cHBvcnQvbWVkaWFyb3V0ZXIvbWVkaWEvTWVkaWFJdGVtU3RhdHVzLmphdmEgYi9wYWNrYWdlcy9NZWRpYUNvbXBvbmVudHMvc3JjL2NvbS9hbmRyb2lkL3N1cHBvcnQvbWVkaWFyb3V0ZXIvbWVkaWEvTWVkaWFJdGVtU3RhdHVzLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDkwZWEyZDUuLjAwMDAwMDAKLS0tIGEvcGFja2FnZXMvTWVkaWFDb21wb25lbnRzL3NyYy9jb20vYW5kcm9pZC9zdXBwb3J0L21lZGlhcm91dGVyL21lZGlhL01lZGlhSXRlbVN0YXR1cy5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMzkyICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgMjAxOCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0Ci0gKgotICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7Ci0gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCi0gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLSAqCi0gKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotICoKLSAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKLSAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCi0gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KLSAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKLSAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgotICovCi0KLXBhY2thZ2UgY29tLmFuZHJvaWQuc3VwcG9ydC5tZWRpYXJvdXRlci5tZWRpYTsKLQotaW1wb3J0IGFuZHJvaWQuYXBwLlBlbmRpbmdJbnRlbnQ7Ci1pbXBvcnQgYW5kcm9pZC5vcy5CdW5kbGU7Ci1pbXBvcnQgYW5kcm9pZC5vcy5TeXN0ZW1DbG9jazsKLWltcG9ydCBhbmRyb2lkLnN1cHBvcnQudjQudXRpbC5UaW1lVXRpbHM7Ci0KLS8qKgotICogRGVzY3JpYmVzIHRoZSBwbGF5YmFjayBzdGF0dXMgb2YgYSBtZWRpYSBpdGVtLgotICogPHA+Ci0gKiBUaGlzIGNsYXNzIGlzIHBhcnQgb2YgdGhlIHJlbW90ZSBwbGF5YmFjayBwcm90b2NvbCBkZXNjcmliZWQgYnkgdGhlCi0gKiB7QGxpbmsgTWVkaWFDb250cm9sSW50ZW50IE1lZGlhQ29udHJvbEludGVudH0gY2xhc3MuCi0gKiA8L3A+PHA+Ci0gKiBBcyBhIG1lZGlhIGl0ZW0gaXMgcGxheWVkLCBpdCB0cmFuc2l0aW9ucyB0aHJvdWdoIGEgc2VxdWVuY2Ugb2Ygc3RhdGVzIGluY2x1ZGluZzoKLSAqIHtAbGluayAjUExBWUJBQ0tfU1RBVEVfUEVORElORyBwZW5kaW5nfSwge0BsaW5rICNQTEFZQkFDS19TVEFURV9CVUZGRVJJTkcgYnVmZmVyaW5nfSwKLSAqIHtAbGluayAjUExBWUJBQ0tfU1RBVEVfUExBWUlORyBwbGF5aW5nfSwge0BsaW5rICNQTEFZQkFDS19TVEFURV9QQVVTRUQgcGF1c2VkfSwKLSAqIHtAbGluayAjUExBWUJBQ0tfU1RBVEVfRklOSVNIRUQgZmluaXNoZWR9LCB7QGxpbmsgI1BMQVlCQUNLX1NUQVRFX0NBTkNFTEVEIGNhbmNlbGVkfSwKLSAqIHtAbGluayAjUExBWUJBQ0tfU1RBVEVfSU5WQUxJREFURUQgaW52YWxpZGF0ZWR9LCBhbmQKLSAqIHtAbGluayAjUExBWUJBQ0tfU1RBVEVfRVJST1IgZXJyb3J9LiAgUmVmZXIgdG8gdGhlIGRvY3VtZW50YXRpb24gb2YgZWFjaCBzdGF0ZQotICogZm9yIGFuIGV4cGxhbmF0aW9uIG9mIGl0cyBtZWFuaW5nLgotICogPC9wPjxwPgotICogV2hpbGUgdGhlIGl0ZW0gaXMgcGxheWluZywgdGhlIHBsYXliYWNrIHN0YXR1cyBtYXkgYWxzbyBpbmNsdWRlIHByb2dyZXNzIGluZm9ybWF0aW9uCi0gKiBhYm91dCB0aGUge0BsaW5rICNnZXRDb250ZW50UG9zaXRpb24gY29udGVudCBwb3NpdGlvbn0gYW5kCi0gKiB7QGxpbmsgI2dldENvbnRlbnREdXJhdGlvbiBjb250ZW50IGR1cmF0aW9ufSBhbHRob3VnaCBub3QgYWxsIHJvdXRlIGRlc3RpbmF0aW9ucwotICogd2lsbCByZXBvcnQgaXQuCi0gKiA8L3A+PHA+Ci0gKiBUbyBtb25pdG9yIHBsYXliYWNrIHN0YXR1cywgdGhlIGFwcGxpY2F0aW9uIHNob3VsZCBzdXBwbHkgYSB7QGxpbmsgUGVuZGluZ0ludGVudH0gdG8gdXNlIGFzIHRoZQotICoge0BsaW5rIE1lZGlhQ29udHJvbEludGVudCNFWFRSQV9JVEVNX1NUQVRVU19VUERBVEVfUkVDRUlWRVIgaXRlbSBzdGF0dXMgdXBkYXRlIHJlY2VpdmVyfQotICogZm9yIGEgZ2l2ZW4ge0BsaW5rIE1lZGlhQ29udHJvbEludGVudCNBQ1RJT05fUExBWSBwbGF5YmFjayByZXF1ZXN0fS4gIE5vdGUgdGhhdAotICogdGhlIHN0YXR1cyB1cGRhdGUgcmVjZWl2ZXIgd2lsbCBvbmx5IGJlIGludm9rZWQgZm9yIG1ham9yIHN0YXR1cyBjaGFuZ2VzIHN1Y2ggYXMgYQotICogdHJhbnNpdGlvbiBmcm9tIHBsYXlpbmcgdG8gZmluaXNoZWQuCi0gKiA8L3A+PHAgY2xhc3M9Im5vdGUiPgotICogVGhlIHN0YXR1cyB1cGRhdGUgcmVjZWl2ZXIgd2lsbCBub3QgYmUgaW52b2tlZCBmb3IgbWlub3IgcHJvZ3Jlc3MgdXBkYXRlcyBzdWNoIGFzCi0gKiBjaGFuZ2VzIHRvIHBsYXliYWNrIHBvc2l0aW9uIG9yIGR1cmF0aW9uLiAgSWYgdGhlIGFwcGxpY2F0aW9uIHdhbnRzIHRvIG1vbml0b3IKLSAqIHBsYXliYWNrIHByb2dyZXNzLCB0aGVuIGl0IG11c3QgdXNlIHRoZQotICoge0BsaW5rIE1lZGlhQ29udHJvbEludGVudCNBQ1RJT05fR0VUX1NUQVRVUyBnZXQgc3RhdHVzIHJlcXVlc3R9IHRvIHBvbGwgZm9yIGNoYW5nZXMKLSAqIHBlcmlvZGljYWxseSBhbmQgZXN0aW1hdGUgdGhlIHBsYXliYWNrIHBvc2l0aW9uIHdoaWxlIHBsYXlpbmcuICBOb3RlIHRoYXQgdGhlcmUgbWF5Ci0gKiBiZSBhIHNpZ25pZmljYW50IHBvd2VyIGltcGFjdCB0byBwb2xsaW5nIHNvIHRoZSBhcHBsaWNhdGlvbiBpcyBhZHZpc2VkIG9ubHkKLSAqIHRvIHBvbGwgd2hlbiB0aGUgc2NyZWVuIGlzIG9uIGFuZCBuZXZlciBtb3JlIHRoYW4gYWJvdXQgb25jZSBldmVyeSA1IHNlY29uZHMgb3Igc28uCi0gKiA8L3A+PHA+Ci0gKiBUaGlzIG9iamVjdCBpcyBpbW11dGFibGUgb25jZSBjcmVhdGVkIHVzaW5nIGEge0BsaW5rIEJ1aWxkZXJ9IGluc3RhbmNlLgotICogPC9wPgotICovCi1wdWJsaWMgZmluYWwgY2xhc3MgTWVkaWFJdGVtU3RhdHVzIHsKLSAgICBzdGF0aWMgZmluYWwgU3RyaW5nIEtFWV9USU1FU1RBTVAgPSAidGltZXN0YW1wIjsKLSAgICBzdGF0aWMgZmluYWwgU3RyaW5nIEtFWV9QTEFZQkFDS19TVEFURSA9ICJwbGF5YmFja1N0YXRlIjsKLSAgICBzdGF0aWMgZmluYWwgU3RyaW5nIEtFWV9DT05URU5UX1BPU0lUSU9OID0gImNvbnRlbnRQb3NpdGlvbiI7Ci0gICAgc3RhdGljIGZpbmFsIFN0cmluZyBLRVlfQ09OVEVOVF9EVVJBVElPTiA9ICJjb250ZW50RHVyYXRpb24iOwotICAgIHN0YXRpYyBmaW5hbCBTdHJpbmcgS0VZX0VYVFJBUyA9ICJleHRyYXMiOwotCi0gICAgZmluYWwgQnVuZGxlIG1CdW5kbGU7Ci0KLSAgICAvKioKLSAgICAgKiBQbGF5YmFjayBzdGF0ZTogUGVuZGluZy4KLSAgICAgKiA8cD4KLSAgICAgKiBJbmRpY2F0ZXMgdGhhdCB0aGUgbWVkaWEgaXRlbSBoYXMgbm90IHlldCBzdGFydGVkIHBsYXliYWNrIGJ1dCB3aWxsIGJlIHBsYXllZCBldmVudHVhbGx5LgotICAgICAqIDwvcD4KLSAgICAgKi8KLSAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBQTEFZQkFDS19TVEFURV9QRU5ESU5HID0gMDsKLQotICAgIC8qKgotICAgICAqIFBsYXliYWNrIHN0YXRlOiBQbGF5aW5nLgotICAgICAqIDxwPgotICAgICAqIEluZGljYXRlcyB0aGF0IHRoZSBtZWRpYSBpdGVtIGlzIGN1cnJlbnRseSBwbGF5aW5nLgotICAgICAqIDwvcD4KLSAgICAgKi8KLSAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBQTEFZQkFDS19TVEFURV9QTEFZSU5HID0gMTsKLQotICAgIC8qKgotICAgICAqIFBsYXliYWNrIHN0YXRlOiBQYXVzZWQuCi0gICAgICogPHA+Ci0gICAgICogSW5kaWNhdGVzIHRoYXQgcGxheWJhY2sgb2YgdGhlIG1lZGlhIGl0ZW0gaGFzIGJlZW4gcGF1c2VkLiAgUGxheWJhY2sgY2FuIGJlCi0gICAgICogcmVzdW1lZCB1c2luZyB0aGUge0BsaW5rIE1lZGlhQ29udHJvbEludGVudCNBQ1RJT05fUkVTVU1FIHJlc3VtZX0gYWN0aW9uLgotICAgICAqIDwvcD4KLSAgICAgKi8KLSAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBQTEFZQkFDS19TVEFURV9QQVVTRUQgPSAyOwotCi0gICAgLyoqCi0gICAgICogUGxheWJhY2sgc3RhdGU6IEJ1ZmZlcmluZyBvciBzZWVraW5nIHRvIGEgbmV3IHBvc2l0aW9uLgotICAgICAqIDxwPgotICAgICAqIEluZGljYXRlcyB0aGF0IHRoZSBtZWRpYSBpdGVtIGhhcyBiZWVuIHRlbXBvcmFyaWx5IGludGVycnVwdGVkCi0gICAgICogdG8gZmV0Y2ggbW9yZSBjb250ZW50LiAgUGxheWJhY2sgd2lsbCBjb250aW51ZSBhdXRvbWF0aWNhbGx5Ci0gICAgICogd2hlbiBlbm91Z2ggY29udGVudCBoYXMgYmVlbiBidWZmZXJlZC4KLSAgICAgKiA8L3A+Ci0gICAgICovCi0gICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgUExBWUJBQ0tfU1RBVEVfQlVGRkVSSU5HID0gMzsKLQotICAgIC8qKgotICAgICAqIFBsYXliYWNrIHN0YXRlOiBGaW5pc2hlZC4KLSAgICAgKiA8cD4KLSAgICAgKiBJbmRpY2F0ZXMgdGhhdCB0aGUgbWVkaWEgaXRlbSBwbGF5ZWQgdG8gdGhlIGVuZCBvZiB0aGUgY29udGVudCBhbmQgZmluaXNoZWQgbm9ybWFsbHkuCi0gICAgICogPC9wPjxwPgotICAgICAqIEEgZmluaXNoZWQgbWVkaWEgaXRlbSBjYW5ub3QgYmUgcmVzdW1lZC4gIFRvIHBsYXkgdGhlIGNvbnRlbnQgYWdhaW4sIHRoZSBhcHBsaWNhdGlvbgotICAgICAqIG11c3Qgc2VuZCBhIG5ldyB7QGxpbmsgTWVkaWFDb250cm9sSW50ZW50I0FDVElPTl9QTEFZIHBsYXl9IG9yCi0gICAgICoge0BsaW5rIE1lZGlhQ29udHJvbEludGVudCNBQ1RJT05fRU5RVUVVRSBlbnF1ZXVlfSBhY3Rpb24uCi0gICAgICogPC9wPgotICAgICAqLwotICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFBMQVlCQUNLX1NUQVRFX0ZJTklTSEVEID0gNDsKLQotICAgIC8qKgotICAgICAqIFBsYXliYWNrIHN0YXRlOiBDYW5jZWxlZC4KLSAgICAgKiA8cD4KLSAgICAgKiBJbmRpY2F0ZXMgdGhhdCB0aGUgbWVkaWEgaXRlbSB3YXMgZXhwbGljaXRseSByZW1vdmVkIGZyb20gdGhlIHF1ZXVlIGJ5IHRoZQotICAgICAqIGFwcGxpY2F0aW9uLiAgSXRlbXMgbWF5IGJlIGNhbmNlbGVkIGFuZCByZW1vdmVkIGZyb20gdGhlIHF1ZXVlIHVzaW5nCi0gICAgICogdGhlIHtAbGluayBNZWRpYUNvbnRyb2xJbnRlbnQjQUNUSU9OX1JFTU9WRSByZW1vdmV9IG9yCi0gICAgICoge0BsaW5rIE1lZGlhQ29udHJvbEludGVudCNBQ1RJT05fU1RPUCBzdG9wfSBhY3Rpb24gb3IgYnkgaXNzdWluZwotICAgICAqIGFub3RoZXIge0BsaW5rIE1lZGlhQ29udHJvbEludGVudCNBQ1RJT05fUExBWSBwbGF5fSBhY3Rpb24gdGhhdCBoYXMgdGhlCi0gICAgICogc2lkZS1lZmZlY3Qgb2YgY2xlYXJpbmcgdGhlIHF1ZXVlLgotICAgICAqIDwvcD48cD4KLSAgICAgKiBBIGNhbmNlbGVkIG1lZGlhIGl0ZW0gY2Fubm90IGJlIHJlc3VtZWQuICBUbyBwbGF5IHRoZSBjb250ZW50IGFnYWluLCB0aGUKLSAgICAgKiBhcHBsaWNhdGlvbiBtdXN0IHNlbmQgYSBuZXcge0BsaW5rIE1lZGlhQ29udHJvbEludGVudCNBQ1RJT05fUExBWSBwbGF5fSBvcgotICAgICAqIHtAbGluayBNZWRpYUNvbnRyb2xJbnRlbnQjQUNUSU9OX0VOUVVFVUUgZW5xdWV1ZX0gYWN0aW9uLgotICAgICAqIDwvcD4KLSAgICAgKi8KLSAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBQTEFZQkFDS19TVEFURV9DQU5DRUxFRCA9IDU7Ci0KLSAgICAvKioKLSAgICAgKiBQbGF5YmFjayBzdGF0ZTogSW52YWxpZGF0ZWQuCi0gICAgICogPHA+Ci0gICAgICogSW5kaWNhdGVzIHRoYXQgdGhlIG1lZGlhIGl0ZW0gd2FzIGludmFsaWRhdGVkIHBlcm1hbmVudGx5IGFuZCBpbnZvbHVudGFyaWx5LgotICAgICAqIFRoaXMgc3RhdGUgaXMgdXNlZCB0byBpbmRpY2F0ZSB0aGF0IHRoZSBtZWRpYSBpdGVtIHdhcyBpbnZhbGlkYXRlZCBhbmQgcmVtb3ZlZAotICAgICAqIGZyb20gdGhlIHF1ZXVlIGJlY2F1c2UgdGhlIHNlc3Npb24gdG8gd2hpY2ggaXQgYmVsb25ncyB3YXMgaW52YWxpZGF0ZWQKLSAgICAgKiAodHlwaWNhbGx5IGJ5IGFub3RoZXIgYXBwbGljYXRpb24gdGFraW5nIGNvbnRyb2wgb2YgdGhlIHJvdXRlKS4KLSAgICAgKiA8L3A+PHA+Ci0gICAgICogV2hlbiBpbnZhbGlkYXRpb24gb2NjdXJzLCB0aGUgYXBwbGljYXRpb24gc2hvdWxkIGdlbmVyYWxseSB3YWl0IGZvciB0aGUgdXNlcgotICAgICAqIHRvIHBlcmZvcm0gYW4gZXhwbGljaXQgYWN0aW9uLCBzdWNoIGFzIGNsaWNraW5nIG9uIGEgcGxheSBidXR0b24gaW4gdGhlIFVJLAotICAgICAqIGJlZm9yZSBjcmVhdGluZyBhIG5ldyBtZWRpYSBzZXNzaW9uIHRvIGF2b2lkIHVubmVjZXNzYXJpbHkgaW50ZXJydXB0aW5nCi0gICAgICogYW5vdGhlciBhcHBsaWNhdGlvbiB0aGF0IG1heSBoYXZlIGp1c3Qgc3RhcnRlZCB1c2luZyB0aGUgcm91dGUuCi0gICAgICogPC9wPjxwPgotICAgICAqIEFuIGludmFsaWRhdGVkIG1lZGlhIGl0ZW0gY2Fubm90IGJlIHJlc3VtZWQuICBUbyBwbGF5IHRoZSBjb250ZW50IGFnYWluLCB0aGUgYXBwbGljYXRpb24KLSAgICAgKiBtdXN0IHNlbmQgYSBuZXcge0BsaW5rIE1lZGlhQ29udHJvbEludGVudCNBQ1RJT05fUExBWSBwbGF5fSBvcgotICAgICAqIHtAbGluayBNZWRpYUNvbnRyb2xJbnRlbnQjQUNUSU9OX0VOUVVFVUUgZW5xdWV1ZX0gYWN0aW9uLgotICAgICAqIDwvcD4KLSAgICAgKi8KLSAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBQTEFZQkFDS19TVEFURV9JTlZBTElEQVRFRCA9IDY7Ci0KLSAgICAvKioKLSAgICAgKiBQbGF5YmFjayBzdGF0ZTogUGxheWJhY2sgaGFsdGVkIG9yIGFib3J0ZWQgZHVlIHRvIGFuIGVycm9yLgotICAgICAqIDxwPgotICAgICAqIEV4YW1wbGVzIG9mIGVycm9ycyBhcmUgbm8gbmV0d29yayBjb25uZWN0aXZpdHkgd2hlbiBhdHRlbXB0aW5nIHRvIHJldHJpZXZlIGNvbnRlbnQKLSAgICAgKiBmcm9tIGEgc2VydmVyLCBvciBleHBpcmVkIHVzZXIgY3JlZGVudGlhbHMgd2hlbiB0cnlpbmcgdG8gcGxheSBzdWJzY3JpcHRpb24tYmFzZWQKLSAgICAgKiBjb250ZW50LgotICAgICAqIDwvcD48cD4KLSAgICAgKiBBIG1lZGlhIGl0ZW0gaW4gdGhlIGVycm9yIHN0YXRlIGNhbm5vdCBiZSByZXN1bWVkLiAgVG8gcGxheSB0aGUgY29udGVudCBhZ2FpbiwKLSAgICAgKiB0aGUgYXBwbGljYXRpb24gbXVzdCBzZW5kIGEgbmV3IHtAbGluayBNZWRpYUNvbnRyb2xJbnRlbnQjQUNUSU9OX1BMQVkgcGxheX0gb3IKLSAgICAgKiB7QGxpbmsgTWVkaWFDb250cm9sSW50ZW50I0FDVElPTl9FTlFVRVVFIGVucXVldWV9IGFjdGlvbi4KLSAgICAgKiA8L3A+Ci0gICAgICovCi0gICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgUExBWUJBQ0tfU1RBVEVfRVJST1IgPSA3OwotCi0gICAgLyoqCi0gICAgICogSW50ZWdlciBleHRyYTogSFRUUCBzdGF0dXMgY29kZS4KLSAgICAgKiA8cD4KLSAgICAgKiBTcGVjaWZpZXMgdGhlIEhUVFAgc3RhdHVzIGNvZGUgdGhhdCB3YXMgZW5jb3VudGVyZWQgd2hlbiB0aGUgY29udGVudAotICAgICAqIHdhcyByZXF1ZXN0ZWQgYWZ0ZXIgYWxsIHJlZGlyZWN0cyB3ZXJlIGZvbGxvd2VkLiAgVGhpcyBrZXkgb25seSBuZWVkcyB0bwotICAgICAqIHNwZWNpZmllZCB3aGVuIHRoZSBjb250ZW50IHVyaSB1c2VzIHRoZSBIVFRQIG9yIEhUVFBTIHNjaGVtZSBhbmQgYW4gZXJyb3IKLSAgICAgKiBvY2N1cnJlZC4gIFRoaXMga2V5IG1heSBiZSBvbWl0dGVkIGlmIHRoZSBjb250ZW50IHdhcyBhYmxlIHRvIGJlIHBsYXllZAotICAgICAqIHN1Y2Nlc3NmdWxseTsgdGhlcmUgaXMgbm8gbmVlZCB0byByZXBvcnQgYSAyMDAgKE9LKSBzdGF0dXMgY29kZS4KLSAgICAgKiA8L3A+PHA+Ci0gICAgICogVGhlIHZhbHVlIGlzIGFuIGludGVnZXIgSFRUUCBzdGF0dXMgY29kZSwgc3VjaCBhcyA0MDEgKFVuYXV0aG9yaXplZCksCi0gICAgICogNDA0IChOb3QgRm91bmQpLCBvciA1MDAgKFNlcnZlciBFcnJvciksIG9yIDAgaWYgbm9uZS4KLSAgICAgKiA8L3A+Ci0gICAgICovCi0gICAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgRVhUUkFfSFRUUF9TVEFUVVNfQ09ERSA9Ci0gICAgICAgICAgICAiYW5kcm9pZC5tZWRpYS5zdGF0dXMuZXh0cmEuSFRUUF9TVEFUVVNfQ09ERSI7Ci0KLSAgICAvKioKLSAgICAgKiBCdW5kbGUgZXh0cmE6IEhUVFAgcmVzcG9uc2UgaGVhZGVycy4KLSAgICAgKiA8cD4KLSAgICAgKiBTcGVjaWZpZXMgdGhlIEhUVFAgcmVzcG9uc2UgaGVhZGVycyB0aGF0IHdlcmUgcmV0dXJuZWQgd2hlbiB0aGUgY29udGVudCB3YXMKLSAgICAgKiByZXF1ZXN0ZWQgZnJvbSB0aGUgbmV0d29yay4gIFRoZSBoZWFkZXJzIG1heSBpbmNsdWRlIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KLSAgICAgKiBhYm91dCB0aGUgY29udGVudCBvciBhbnkgZXJyb3JzIGNvbmRpdGlvbnMgdGhhdCB3ZXJlIGVuY291bnRlcmVkIHdoaWxlCi0gICAgICogdHJ5aW5nIHRvIGZldGNoIHRoZSBjb250ZW50LgotICAgICAqIDwvcD48cD4KLSAgICAgKiBUaGUgdmFsdWUgaXMgYSB7QGxpbmsgYW5kcm9pZC5vcy5CdW5kbGV9IG9mIHN0cmluZyBiYXNlZCBrZXktdmFsdWUgcGFpcnMKLSAgICAgKiB0aGF0IGRlc2NyaWJlIHRoZSBIVFRQIHJlc3BvbnNlIGhlYWRlcnMuCi0gICAgICogPC9wPgotICAgICAqLwotICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIEVYVFJBX0hUVFBfUkVTUE9OU0VfSEVBREVSUyA9Ci0gICAgICAgICAgICAiYW5kcm9pZC5tZWRpYS5zdGF0dXMuZXh0cmEuSFRUUF9SRVNQT05TRV9IRUFERVJTIjsKLQotICAgIE1lZGlhSXRlbVN0YXR1cyhCdW5kbGUgYnVuZGxlKSB7Ci0gICAgICAgIG1CdW5kbGUgPSBidW5kbGU7Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogR2V0cyB0aGUgdGltZXN0YW1wIGFzc29jaWF0ZWQgd2l0aCB0aGUgc3RhdHVzIGluZm9ybWF0aW9uIGluCi0gICAgICogbWlsbGlzZWNvbmRzIHNpbmNlIGJvb3QgaW4gdGhlIHtAbGluayBTeXN0ZW1DbG9jayNlbGFwc2VkUmVhbHRpbWV9IHRpbWUgYmFzZS4KLSAgICAgKgotICAgICAqIEByZXR1cm4gVGhlIHN0YXR1cyB0aW1lc3RhbXAgaW4gdGhlIHtAbGluayBTeXN0ZW1DbG9jayNlbGFwc2VkUmVhbHRpbWUoKX0gdGltZSBiYXNlLgotICAgICAqLwotICAgIHB1YmxpYyBsb25nIGdldFRpbWVzdGFtcCgpIHsKLSAgICAgICAgcmV0dXJuIG1CdW5kbGUuZ2V0TG9uZyhLRVlfVElNRVNUQU1QKTsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBHZXRzIHRoZSBwbGF5YmFjayBzdGF0ZSBvZiB0aGUgbWVkaWEgaXRlbS4KLSAgICAgKgotICAgICAqIEByZXR1cm4gVGhlIHBsYXliYWNrIHN0YXRlLiAgT25lIG9mIHtAbGluayAjUExBWUJBQ0tfU1RBVEVfUEVORElOR30sCi0gICAgICoge0BsaW5rICNQTEFZQkFDS19TVEFURV9QTEFZSU5HfSwge0BsaW5rICNQTEFZQkFDS19TVEFURV9QQVVTRUR9LAotICAgICAqIHtAbGluayAjUExBWUJBQ0tfU1RBVEVfQlVGRkVSSU5HfSwge0BsaW5rICNQTEFZQkFDS19TVEFURV9GSU5JU0hFRH0sCi0gICAgICoge0BsaW5rICNQTEFZQkFDS19TVEFURV9DQU5DRUxFRH0sIHtAbGluayAjUExBWUJBQ0tfU1RBVEVfSU5WQUxJREFURUR9LAotICAgICAqIG9yIHtAbGluayAjUExBWUJBQ0tfU1RBVEVfRVJST1J9LgotICAgICAqLwotICAgIHB1YmxpYyBpbnQgZ2V0UGxheWJhY2tTdGF0ZSgpIHsKLSAgICAgICAgcmV0dXJuIG1CdW5kbGUuZ2V0SW50KEtFWV9QTEFZQkFDS19TVEFURSwgUExBWUJBQ0tfU1RBVEVfRVJST1IpOwotICAgIH0KLQotICAgIC8qKgotICAgICAqIEdldHMgdGhlIGNvbnRlbnQgcGxheWJhY2sgcG9zaXRpb24gYXMgYSBsb25nIGludGVnZXIgbnVtYmVyIG9mIG1pbGxpc2Vjb25kcwotICAgICAqIGZyb20gdGhlIGJlZ2lubmluZyBvZiB0aGUgY29udGVudC4KLSAgICAgKgotICAgICAqIEByZXR1cm4gVGhlIGNvbnRlbnQgcGxheWJhY2sgcG9zaXRpb24gaW4gbWlsbGlzZWNvbmRzLCBvciAtMSBpZiB1bmtub3duLgotICAgICAqLwotICAgIHB1YmxpYyBsb25nIGdldENvbnRlbnRQb3NpdGlvbigpIHsKLSAgICAgICAgcmV0dXJuIG1CdW5kbGUuZ2V0TG9uZyhLRVlfQ09OVEVOVF9QT1NJVElPTiwgLTEpOwotICAgIH0KLQotICAgIC8qKgotICAgICAqIEdldHMgdGhlIHRvdGFsIGR1cmF0aW9uIG9mIHRoZSBjb250ZW50IHRvIGJlIHBsYXllZCBhcyBhIGxvbmcgaW50ZWdlciBudW1iZXIgb2YKLSAgICAgKiBtaWxsaXNlY29uZHMuCi0gICAgICoKLSAgICAgKiBAcmV0dXJuIFRoZSBjb250ZW50IGR1cmF0aW9uIGluIG1pbGxpc2Vjb25kcywgb3IgLTEgaWYgdW5rbm93bi4KLSAgICAgKi8KLSAgICBwdWJsaWMgbG9uZyBnZXRDb250ZW50RHVyYXRpb24oKSB7Ci0gICAgICAgIHJldHVybiBtQnVuZGxlLmdldExvbmcoS0VZX0NPTlRFTlRfRFVSQVRJT04sIC0xKTsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBHZXRzIGEgYnVuZGxlIG9mIGV4dHJhcyBmb3IgdGhpcyBzdGF0dXMgb2JqZWN0LgotICAgICAqIFRoZSBleHRyYXMgd2lsbCBiZSBpZ25vcmVkIGJ5IHRoZSBtZWRpYSByb3V0ZXIgYnV0IHRoZXkgbWF5IGJlIHVzZWQKLSAgICAgKiBieSBhcHBsaWNhdGlvbnMuCi0gICAgICovCi0gICAgcHVibGljIEJ1bmRsZSBnZXRFeHRyYXMoKSB7Ci0gICAgICAgIHJldHVybiBtQnVuZGxlLmdldEJ1bmRsZShLRVlfRVhUUkFTKTsKLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgU3RyaW5nIHRvU3RyaW5nKCkgewotICAgICAgICBTdHJpbmdCdWlsZGVyIHJlc3VsdCA9IG5ldyBTdHJpbmdCdWlsZGVyKCk7Ci0gICAgICAgIHJlc3VsdC5hcHBlbmQoIk1lZGlhSXRlbVN0YXR1c3sgIik7Ci0gICAgICAgIHJlc3VsdC5hcHBlbmQoInRpbWVzdGFtcD0iKTsKLSAgICAgICAgVGltZVV0aWxzLmZvcm1hdER1cmF0aW9uKFN5c3RlbUNsb2NrLmVsYXBzZWRSZWFsdGltZSgpIC0gZ2V0VGltZXN0YW1wKCksIHJlc3VsdCk7Ci0gICAgICAgIHJlc3VsdC5hcHBlbmQoIiBtcyBhZ28iKTsKLSAgICAgICAgcmVzdWx0LmFwcGVuZCgiLCBwbGF5YmFja1N0YXRlPSIpLmFwcGVuZChwbGF5YmFja1N0YXRlVG9TdHJpbmcoZ2V0UGxheWJhY2tTdGF0ZSgpKSk7Ci0gICAgICAgIHJlc3VsdC5hcHBlbmQoIiwgY29udGVudFBvc2l0aW9uPSIpLmFwcGVuZChnZXRDb250ZW50UG9zaXRpb24oKSk7Ci0gICAgICAgIHJlc3VsdC5hcHBlbmQoIiwgY29udGVudER1cmF0aW9uPSIpLmFwcGVuZChnZXRDb250ZW50RHVyYXRpb24oKSk7Ci0gICAgICAgIHJlc3VsdC5hcHBlbmQoIiwgZXh0cmFzPSIpLmFwcGVuZChnZXRFeHRyYXMoKSk7Ci0gICAgICAgIHJlc3VsdC5hcHBlbmQoIiB9Iik7Ci0gICAgICAgIHJldHVybiByZXN1bHQudG9TdHJpbmcoKTsKLSAgICB9Ci0KLSAgICBwcml2YXRlIHN0YXRpYyBTdHJpbmcgcGxheWJhY2tTdGF0ZVRvU3RyaW5nKGludCBwbGF5YmFja1N0YXRlKSB7Ci0gICAgICAgIHN3aXRjaCAocGxheWJhY2tTdGF0ZSkgewotICAgICAgICAgICAgY2FzZSBQTEFZQkFDS19TVEFURV9QRU5ESU5HOgotICAgICAgICAgICAgICAgIHJldHVybiAicGVuZGluZyI7Ci0gICAgICAgICAgICBjYXNlIFBMQVlCQUNLX1NUQVRFX0JVRkZFUklORzoKLSAgICAgICAgICAgICAgICByZXR1cm4gImJ1ZmZlcmluZyI7Ci0gICAgICAgICAgICBjYXNlIFBMQVlCQUNLX1NUQVRFX1BMQVlJTkc6Ci0gICAgICAgICAgICAgICAgcmV0dXJuICJwbGF5aW5nIjsKLSAgICAgICAgICAgIGNhc2UgUExBWUJBQ0tfU1RBVEVfUEFVU0VEOgotICAgICAgICAgICAgICAgIHJldHVybiAicGF1c2VkIjsKLSAgICAgICAgICAgIGNhc2UgUExBWUJBQ0tfU1RBVEVfRklOSVNIRUQ6Ci0gICAgICAgICAgICAgICAgcmV0dXJuICJmaW5pc2hlZCI7Ci0gICAgICAgICAgICBjYXNlIFBMQVlCQUNLX1NUQVRFX0NBTkNFTEVEOgotICAgICAgICAgICAgICAgIHJldHVybiAiY2FuY2VsZWQiOwotICAgICAgICAgICAgY2FzZSBQTEFZQkFDS19TVEFURV9JTlZBTElEQVRFRDoKLSAgICAgICAgICAgICAgICByZXR1cm4gImludmFsaWRhdGVkIjsKLSAgICAgICAgICAgIGNhc2UgUExBWUJBQ0tfU1RBVEVfRVJST1I6Ci0gICAgICAgICAgICAgICAgcmV0dXJuICJlcnJvciI7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIEludGVnZXIudG9TdHJpbmcocGxheWJhY2tTdGF0ZSk7Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogQ29udmVydHMgdGhpcyBvYmplY3QgdG8gYSBidW5kbGUgZm9yIHNlcmlhbGl6YXRpb24uCi0gICAgICoKLSAgICAgKiBAcmV0dXJuIFRoZSBjb250ZW50cyBvZiB0aGUgb2JqZWN0IHJlcHJlc2VudGVkIGFzIGEgYnVuZGxlLgotICAgICAqLwotICAgIHB1YmxpYyBCdW5kbGUgYXNCdW5kbGUoKSB7Ci0gICAgICAgIHJldHVybiBtQnVuZGxlOwotICAgIH0KLQotICAgIC8qKgotICAgICAqIENyZWF0ZXMgYW4gaW5zdGFuY2UgZnJvbSBhIGJ1bmRsZS4KLSAgICAgKgotICAgICAqIEBwYXJhbSBidW5kbGUgVGhlIGJ1bmRsZSwgb3IgbnVsbCBpZiBub25lLgotICAgICAqIEByZXR1cm4gVGhlIG5ldyBpbnN0YW5jZSwgb3IgbnVsbCBpZiB0aGUgYnVuZGxlIHdhcyBudWxsLgotICAgICAqLwotICAgIHB1YmxpYyBzdGF0aWMgTWVkaWFJdGVtU3RhdHVzIGZyb21CdW5kbGUoQnVuZGxlIGJ1bmRsZSkgewotICAgICAgICByZXR1cm4gYnVuZGxlICE9IG51bGwgPyBuZXcgTWVkaWFJdGVtU3RhdHVzKGJ1bmRsZSkgOiBudWxsOwotICAgIH0KLQotICAgIC8qKgotICAgICAqIEJ1aWxkZXIgZm9yIHtAbGluayBNZWRpYUl0ZW1TdGF0dXMgbWVkaWEgaXRlbSBzdGF0dXMgb2JqZWN0c30uCi0gICAgICovCi0gICAgcHVibGljIHN0YXRpYyBmaW5hbCBjbGFzcyBCdWlsZGVyIHsKLSAgICAgICAgcHJpdmF0ZSBmaW5hbCBCdW5kbGUgbUJ1bmRsZTsKLQotICAgICAgICAvKioKLSAgICAgICAgICogQ3JlYXRlcyBhIG1lZGlhIGl0ZW0gc3RhdHVzIGJ1aWxkZXIgdXNpbmcgdGhlIGN1cnJlbnQgdGltZSBhcyB0aGUKLSAgICAgICAgICogcmVmZXJlbmNlIHRpbWVzdGFtcC4KLSAgICAgICAgICoKLSAgICAgICAgICogQHBhcmFtIHBsYXliYWNrU3RhdGUgVGhlIGl0ZW0gcGxheWJhY2sgc3RhdGUuCi0gICAgICAgICAqLwotICAgICAgICBwdWJsaWMgQnVpbGRlcihpbnQgcGxheWJhY2tTdGF0ZSkgewotICAgICAgICAgICAgbUJ1bmRsZSA9IG5ldyBCdW5kbGUoKTsKLSAgICAgICAgICAgIHNldFRpbWVzdGFtcChTeXN0ZW1DbG9jay5lbGFwc2VkUmVhbHRpbWUoKSk7Ci0gICAgICAgICAgICBzZXRQbGF5YmFja1N0YXRlKHBsYXliYWNrU3RhdGUpOwotICAgICAgICB9Ci0KLSAgICAgICAgLyoqCi0gICAgICAgICAqIENyZWF0ZXMgYSBtZWRpYSBpdGVtIHN0YXR1cyBidWlsZGVyIHdob3NlIGluaXRpYWwgY29udGVudHMgYXJlCi0gICAgICAgICAqIGNvcGllZCBmcm9tIGFuIGV4aXN0aW5nIHN0YXR1cy4KLSAgICAgICAgICovCi0gICAgICAgIHB1YmxpYyBCdWlsZGVyKE1lZGlhSXRlbVN0YXR1cyBzdGF0dXMpIHsKLSAgICAgICAgICAgIGlmIChzdGF0dXMgPT0gbnVsbCkgewotICAgICAgICAgICAgICAgIHRocm93IG5ldyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oInN0YXR1cyBtdXN0IG5vdCBiZSBudWxsIik7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIG1CdW5kbGUgPSBuZXcgQnVuZGxlKHN0YXR1cy5tQnVuZGxlKTsKLSAgICAgICAgfQotCi0gICAgICAgIC8qKgotICAgICAgICAgKiBTZXRzIHRoZSB0aW1lc3RhbXAgYXNzb2NpYXRlZCB3aXRoIHRoZSBzdGF0dXMgaW5mb3JtYXRpb24gaW4KLSAgICAgICAgICogbWlsbGlzZWNvbmRzIHNpbmNlIGJvb3QgaW4gdGhlIHtAbGluayBTeXN0ZW1DbG9jayNlbGFwc2VkUmVhbHRpbWV9IHRpbWUgYmFzZS4KLSAgICAgICAgICovCi0gICAgICAgIHB1YmxpYyBCdWlsZGVyIHNldFRpbWVzdGFtcChsb25nIGVsYXBzZWRSZWFsdGltZVRpbWVzdGFtcCkgewotICAgICAgICAgICAgbUJ1bmRsZS5wdXRMb25nKEtFWV9USU1FU1RBTVAsIGVsYXBzZWRSZWFsdGltZVRpbWVzdGFtcCk7Ci0gICAgICAgICAgICByZXR1cm4gdGhpczsKLSAgICAgICAgfQotCi0gICAgICAgIC8qKgotICAgICAgICAgKiBTZXRzIHRoZSBwbGF5YmFjayBzdGF0ZSBvZiB0aGUgbWVkaWEgaXRlbS4KLSAgICAgICAgICovCi0gICAgICAgIHB1YmxpYyBCdWlsZGVyIHNldFBsYXliYWNrU3RhdGUoaW50IHBsYXliYWNrU3RhdGUpIHsKLSAgICAgICAgICAgIG1CdW5kbGUucHV0SW50KEtFWV9QTEFZQkFDS19TVEFURSwgcGxheWJhY2tTdGF0ZSk7Ci0gICAgICAgICAgICByZXR1cm4gdGhpczsKLSAgICAgICAgfQotCi0gICAgICAgIC8qKgotICAgICAgICAgKiBTZXRzIHRoZSBjb250ZW50IHBsYXliYWNrIHBvc2l0aW9uIGFzIGEgbG9uZyBpbnRlZ2VyIG51bWJlciBvZiBtaWxsaXNlY29uZHMKLSAgICAgICAgICogZnJvbSB0aGUgYmVnaW5uaW5nIG9mIHRoZSBjb250ZW50LgotICAgICAgICAgKi8KLSAgICAgICAgcHVibGljIEJ1aWxkZXIgc2V0Q29udGVudFBvc2l0aW9uKGxvbmcgcG9zaXRpb25NaWxsaXNlY29uZHMpIHsKLSAgICAgICAgICAgIG1CdW5kbGUucHV0TG9uZyhLRVlfQ09OVEVOVF9QT1NJVElPTiwgcG9zaXRpb25NaWxsaXNlY29uZHMpOwotICAgICAgICAgICAgcmV0dXJuIHRoaXM7Ci0gICAgICAgIH0KLQotICAgICAgICAvKioKLSAgICAgICAgICogU2V0cyB0aGUgdG90YWwgZHVyYXRpb24gb2YgdGhlIGNvbnRlbnQgdG8gYmUgcGxheWVkIGFzIGEgbG9uZyBpbnRlZ2VyIG51bWJlcgotICAgICAgICAgKiBvZiBtaWxsaXNlY29uZHMuCi0gICAgICAgICAqLwotICAgICAgICBwdWJsaWMgQnVpbGRlciBzZXRDb250ZW50RHVyYXRpb24obG9uZyBkdXJhdGlvbk1pbGxpc2Vjb25kcykgewotICAgICAgICAgICAgbUJ1bmRsZS5wdXRMb25nKEtFWV9DT05URU5UX0RVUkFUSU9OLCBkdXJhdGlvbk1pbGxpc2Vjb25kcyk7Ci0gICAgICAgICAgICByZXR1cm4gdGhpczsKLSAgICAgICAgfQotCi0gICAgICAgIC8qKgotICAgICAgICAgKiBTZXRzIGEgYnVuZGxlIG9mIGV4dHJhcyBmb3IgdGhpcyBzdGF0dXMgb2JqZWN0LgotICAgICAgICAgKiBUaGUgZXh0cmFzIHdpbGwgYmUgaWdub3JlZCBieSB0aGUgbWVkaWEgcm91dGVyIGJ1dCB0aGV5IG1heSBiZSB1c2VkCi0gICAgICAgICAqIGJ5IGFwcGxpY2F0aW9ucy4KLSAgICAgICAgICovCi0gICAgICAgIHB1YmxpYyBCdWlsZGVyIHNldEV4dHJhcyhCdW5kbGUgZXh0cmFzKSB7Ci0gICAgICAgICAgICBtQnVuZGxlLnB1dEJ1bmRsZShLRVlfRVhUUkFTLCBleHRyYXMpOwotICAgICAgICAgICAgcmV0dXJuIHRoaXM7Ci0gICAgICAgIH0KLQotICAgICAgICAvKioKLSAgICAgICAgICogQnVpbGRzIHRoZSB7QGxpbmsgTWVkaWFJdGVtU3RhdHVzIG1lZGlhIGl0ZW0gc3RhdHVzIG9iamVjdH0uCi0gICAgICAgICAqLwotICAgICAgICBwdWJsaWMgTWVkaWFJdGVtU3RhdHVzIGJ1aWxkKCkgewotICAgICAgICAgICAgcmV0dXJuIG5ldyBNZWRpYUl0ZW1TdGF0dXMobUJ1bmRsZSk7Ci0gICAgICAgIH0KLSAgICB9Ci19CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9NZWRpYUNvbXBvbmVudHMvc3JjL2NvbS9hbmRyb2lkL3N1cHBvcnQvbWVkaWFyb3V0ZXIvbWVkaWEvTWVkaWFSb3V0ZURlc2NyaXB0b3IuamF2YSBiL3BhY2thZ2VzL01lZGlhQ29tcG9uZW50cy9zcmMvY29tL2FuZHJvaWQvc3VwcG9ydC9tZWRpYXJvdXRlci9tZWRpYS9NZWRpYVJvdXRlRGVzY3JpcHRvci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2YmM4NGZjLi4wMDAwMDAwCi0tLSBhL3BhY2thZ2VzL01lZGlhQ29tcG9uZW50cy9zcmMvY29tL2FuZHJvaWQvc3VwcG9ydC9tZWRpYXJvdXRlci9tZWRpYS9NZWRpYVJvdXRlRGVzY3JpcHRvci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNjkzICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgMjAxOCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0Ci0gKgotICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7Ci0gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCi0gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLSAqCi0gKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotICoKLSAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKLSAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCi0gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KLSAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKLSAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgotICovCi1wYWNrYWdlIGNvbS5hbmRyb2lkLnN1cHBvcnQubWVkaWFyb3V0ZXIubWVkaWE7Ci0KLWltcG9ydCBhbmRyb2lkLmNvbnRlbnQuSW50ZW50RmlsdGVyOwotaW1wb3J0IGFuZHJvaWQuY29udGVudC5JbnRlbnRTZW5kZXI7Ci1pbXBvcnQgYW5kcm9pZC5uZXQuVXJpOwotaW1wb3J0IGFuZHJvaWQub3MuQnVuZGxlOwotaW1wb3J0IGFuZHJvaWQudGV4dC5UZXh0VXRpbHM7Ci0KLWltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OwotaW1wb3J0IGphdmEudXRpbC5BcnJheXM7Ci1pbXBvcnQgamF2YS51dGlsLkNvbGxlY3Rpb247Ci1pbXBvcnQgamF2YS51dGlsLkNvbGxlY3Rpb25zOwotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotCi0vKioKLSAqIERlc2NyaWJlcyB0aGUgcHJvcGVydGllcyBvZiBhIHJvdXRlLgotICogPHA+Ci0gKiBFYWNoIHJvdXRlIGlzIHVuaXF1ZWx5IGlkZW50aWZpZWQgYnkgYW4gb3BhcXVlIGlkIHN0cmluZy4gIFRoaXMgdG9rZW4KLSAqIG1heSB0YWtlIGFueSBmb3JtIGFzIGxvbmcgYXMgaXQgaXMgdW5pcXVlIHdpdGhpbiB0aGUgbWVkaWEgcm91dGUgcHJvdmlkZXIuCi0gKiA8L3A+PHA+Ci0gKiBUaGlzIG9iamVjdCBpcyBpbW11dGFibGUgb25jZSBjcmVhdGVkIHVzaW5nIGEge0BsaW5rIEJ1aWxkZXJ9IGluc3RhbmNlLgotICogPC9wPgotICovCi1wdWJsaWMgZmluYWwgY2xhc3MgTWVkaWFSb3V0ZURlc2NyaXB0b3IgewotICAgIHN0YXRpYyBmaW5hbCBTdHJpbmcgS0VZX0lEID0gImlkIjsKLSAgICBzdGF0aWMgZmluYWwgU3RyaW5nIEtFWV9HUk9VUF9NRU1CRVJfSURTID0gImdyb3VwTWVtYmVySWRzIjsKLSAgICBzdGF0aWMgZmluYWwgU3RyaW5nIEtFWV9OQU1FID0gIm5hbWUiOwotICAgIHN0YXRpYyBmaW5hbCBTdHJpbmcgS0VZX0RFU0NSSVBUSU9OID0gInN0YXR1cyI7Ci0gICAgc3RhdGljIGZpbmFsIFN0cmluZyBLRVlfSUNPTl9VUkkgPSAiaWNvblVyaSI7Ci0gICAgc3RhdGljIGZpbmFsIFN0cmluZyBLRVlfRU5BQkxFRCA9ICJlbmFibGVkIjsKLSAgICBzdGF0aWMgZmluYWwgU3RyaW5nIEtFWV9DT05ORUNUSU5HID0gImNvbm5lY3RpbmciOwotICAgIHN0YXRpYyBmaW5hbCBTdHJpbmcgS0VZX0NPTk5FQ1RJT05fU1RBVEUgPSAiY29ubmVjdGlvblN0YXRlIjsKLSAgICBzdGF0aWMgZmluYWwgU3RyaW5nIEtFWV9DT05UUk9MX0ZJTFRFUlMgPSAiY29udHJvbEZpbHRlcnMiOwotICAgIHN0YXRpYyBmaW5hbCBTdHJpbmcgS0VZX1BMQVlCQUNLX1RZUEUgPSAicGxheWJhY2tUeXBlIjsKLSAgICBzdGF0aWMgZmluYWwgU3RyaW5nIEtFWV9QTEFZQkFDS19TVFJFQU0gPSAicGxheWJhY2tTdHJlYW0iOwotICAgIHN0YXRpYyBmaW5hbCBTdHJpbmcgS0VZX0RFVklDRV9UWVBFID0gImRldmljZVR5cGUiOwotICAgIHN0YXRpYyBmaW5hbCBTdHJpbmcgS0VZX1ZPTFVNRSA9ICJ2b2x1bWUiOwotICAgIHN0YXRpYyBmaW5hbCBTdHJpbmcgS0VZX1ZPTFVNRV9NQVggPSAidm9sdW1lTWF4IjsKLSAgICBzdGF0aWMgZmluYWwgU3RyaW5nIEtFWV9WT0xVTUVfSEFORExJTkcgPSAidm9sdW1lSGFuZGxpbmciOwotICAgIHN0YXRpYyBmaW5hbCBTdHJpbmcgS0VZX1BSRVNFTlRBVElPTl9ESVNQTEFZX0lEID0gInByZXNlbnRhdGlvbkRpc3BsYXlJZCI7Ci0gICAgc3RhdGljIGZpbmFsIFN0cmluZyBLRVlfRVhUUkFTID0gImV4dHJhcyI7Ci0gICAgc3RhdGljIGZpbmFsIFN0cmluZyBLRVlfQ0FOX0RJU0NPTk5FQ1QgPSAiY2FuRGlzY29ubmVjdCI7Ci0gICAgc3RhdGljIGZpbmFsIFN0cmluZyBLRVlfU0VUVElOR1NfSU5URU5UID0gInNldHRpbmdzSW50ZW50IjsKLSAgICBzdGF0aWMgZmluYWwgU3RyaW5nIEtFWV9NSU5fQ0xJRU5UX1ZFUlNJT04gPSAibWluQ2xpZW50VmVyc2lvbiI7Ci0gICAgc3RhdGljIGZpbmFsIFN0cmluZyBLRVlfTUFYX0NMSUVOVF9WRVJTSU9OID0gIm1heENsaWVudFZlcnNpb24iOwotCi0gICAgZmluYWwgQnVuZGxlIG1CdW5kbGU7Ci0gICAgTGlzdDxJbnRlbnRGaWx0ZXI+IG1Db250cm9sRmlsdGVyczsKLQotICAgIE1lZGlhUm91dGVEZXNjcmlwdG9yKEJ1bmRsZSBidW5kbGUsIExpc3Q8SW50ZW50RmlsdGVyPiBjb250cm9sRmlsdGVycykgewotICAgICAgICBtQnVuZGxlID0gYnVuZGxlOwotICAgICAgICBtQ29udHJvbEZpbHRlcnMgPSBjb250cm9sRmlsdGVyczsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBHZXRzIHRoZSB1bmlxdWUgaWQgb2YgdGhlIHJvdXRlLgotICAgICAqIDxwPgotICAgICAqIFRoZSByb3V0ZSBpZCBhc3NvY2lhdGVkIHdpdGggYSByb3V0ZSBkZXNjcmlwdG9yIGZ1bmN0aW9ucyBhcyBhIHN0YWJsZQotICAgICAqIGlkZW50aWZpZXIgZm9yIHRoZSByb3V0ZSBhbmQgbXVzdCBiZSB1bmlxdWUgYW1vbmcgYWxsIHJvdXRlcyBvZmZlcmVkCi0gICAgICogYnkgdGhlIHByb3ZpZGVyLgotICAgICAqIDwvcD4KLSAgICAgKi8KLSAgICBwdWJsaWMgU3RyaW5nIGdldElkKCkgewotICAgICAgICByZXR1cm4gbUJ1bmRsZS5nZXRTdHJpbmcoS0VZX0lEKTsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBHZXRzIHRoZSBncm91cCBtZW1iZXIgaWRzIG9mIHRoZSByb3V0ZS4KLSAgICAgKiA8cD4KLSAgICAgKiBBIHJvdXRlIGRlc2NyaXB0b3IgdGhhdCBoYXMgb25lIG9yIG1vcmUgZ3JvdXAgbWVtYmVyIHJvdXRlIGlkcwotICAgICAqIHJlcHJlc2VudHMgYSByb3V0ZSBncm91cC4gQSBtZW1iZXIgcm91dGUgbWF5IGJlbG9uZyB0byBhbm90aGVyIGdyb3VwLgotICAgICAqIDwvcD4KLSAgICAgKiBAaGlkZQotICAgICAqLwotICAgIC8vIEBSZXN0cmljdFRvKExJQlJBUllfR1JPVVApCi0gICAgcHVibGljIExpc3Q8U3RyaW5nPiBnZXRHcm91cE1lbWJlcklkcygpIHsKLSAgICAgICAgcmV0dXJuIG1CdW5kbGUuZ2V0U3RyaW5nQXJyYXlMaXN0KEtFWV9HUk9VUF9NRU1CRVJfSURTKTsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBHZXRzIHRoZSB1c2VyLXZpc2libGUgbmFtZSBvZiB0aGUgcm91dGUuCi0gICAgICogPHA+Ci0gICAgICogVGhlIHJvdXRlIG5hbWUgaWRlbnRpZmllcyB0aGUgZGVzdGluYXRpb24gcmVwcmVzZW50ZWQgYnkgdGhlIHJvdXRlLgotICAgICAqIEl0IG1heSBiZSBhIHVzZXItc3VwcGxpZWQgbmFtZSwgYW4gYWxpYXMsIG9yIGRldmljZSBzZXJpYWwgbnVtYmVyLgotICAgICAqIDwvcD4KLSAgICAgKi8KLSAgICBwdWJsaWMgU3RyaW5nIGdldE5hbWUoKSB7Ci0gICAgICAgIHJldHVybiBtQnVuZGxlLmdldFN0cmluZyhLRVlfTkFNRSk7Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogR2V0cyB0aGUgdXNlci12aXNpYmxlIGRlc2NyaXB0aW9uIG9mIHRoZSByb3V0ZS4KLSAgICAgKiA8cD4KLSAgICAgKiBUaGUgcm91dGUgZGVzY3JpcHRpb24gZGVzY3JpYmVzIHRoZSBraW5kIG9mIGRlc3RpbmF0aW9uIHJlcHJlc2VudGVkIGJ5IHRoZSByb3V0ZS4KLSAgICAgKiBJdCBtYXkgYmUgYSB1c2VyLXN1cHBsaWVkIHN0cmluZywgYSBtb2RlbCBudW1iZXIgb3IgYnJhbmQgb2YgZGV2aWNlLgotICAgICAqIDwvcD4KLSAgICAgKi8KLSAgICBwdWJsaWMgU3RyaW5nIGdldERlc2NyaXB0aW9uKCkgewotICAgICAgICByZXR1cm4gbUJ1bmRsZS5nZXRTdHJpbmcoS0VZX0RFU0NSSVBUSU9OKTsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBHZXRzIHRoZSBVUkkgb2YgdGhlIGljb24gcmVwcmVzZW50aW5nIHRoaXMgcm91dGUuCi0gICAgICogPHA+Ci0gICAgICogVGhpcyBpY29uIHdpbGwgYmUgdXNlZCBpbiBwaWNrZXIgVUlzIGlmIGF2YWlsYWJsZS4KLSAgICAgKiA8L3A+Ci0gICAgICovCi0gICAgcHVibGljIFVyaSBnZXRJY29uVXJpKCkgewotICAgICAgICBTdHJpbmcgaWNvblVyaSA9IG1CdW5kbGUuZ2V0U3RyaW5nKEtFWV9JQ09OX1VSSSk7Ci0gICAgICAgIHJldHVybiBpY29uVXJpID09IG51bGwgPyBudWxsIDogVXJpLnBhcnNlKGljb25VcmkpOwotICAgIH0KLQotICAgIC8qKgotICAgICAqIEdldHMgd2hldGhlciB0aGUgcm91dGUgaXMgZW5hYmxlZC4KLSAgICAgKi8KLSAgICBwdWJsaWMgYm9vbGVhbiBpc0VuYWJsZWQoKSB7Ci0gICAgICAgIHJldHVybiBtQnVuZGxlLmdldEJvb2xlYW4oS0VZX0VOQUJMRUQsIHRydWUpOwotICAgIH0KLQotICAgIC8qKgotICAgICAqIEdldHMgd2hldGhlciB0aGUgcm91dGUgaXMgY29ubmVjdGluZy4KLSAgICAgKiBAZGVwcmVjYXRlZCBVc2Uge0BsaW5rICNnZXRDb25uZWN0aW9uU3RhdGV9IGluc3RlYWQKLSAgICAgKi8KLSAgICBARGVwcmVjYXRlZAotICAgIHB1YmxpYyBib29sZWFuIGlzQ29ubmVjdGluZygpIHsKLSAgICAgICAgcmV0dXJuIG1CdW5kbGUuZ2V0Qm9vbGVhbihLRVlfQ09OTkVDVElORywgZmFsc2UpOwotICAgIH0KLQotICAgIC8qKgotICAgICAqIEdldHMgdGhlIGNvbm5lY3Rpb24gc3RhdGUgb2YgdGhlIHJvdXRlLgotICAgICAqCi0gICAgICogQHJldHVybiBUaGUgY29ubmVjdGlvbiBzdGF0ZSBvZiB0aGlzIHJvdXRlOgotICAgICAqIHtAbGluayBNZWRpYVJvdXRlci5Sb3V0ZUluZm8jQ09OTkVDVElPTl9TVEFURV9ESVNDT05ORUNURUR9LAotICAgICAqIHtAbGluayBNZWRpYVJvdXRlci5Sb3V0ZUluZm8jQ09OTkVDVElPTl9TVEFURV9DT05ORUNUSU5HfSwgb3IKLSAgICAgKiB7QGxpbmsgTWVkaWFSb3V0ZXIuUm91dGVJbmZvI0NPTk5FQ1RJT05fU1RBVEVfQ09OTkVDVEVEfS4KLSAgICAgKi8KLSAgICBwdWJsaWMgaW50IGdldENvbm5lY3Rpb25TdGF0ZSgpIHsKLSAgICAgICAgcmV0dXJuIG1CdW5kbGUuZ2V0SW50KEtFWV9DT05ORUNUSU9OX1NUQVRFLAotICAgICAgICAgICAgICAgIE1lZGlhUm91dGVyLlJvdXRlSW5mby5DT05ORUNUSU9OX1NUQVRFX0RJU0NPTk5FQ1RFRCk7Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogR2V0cyB3aGV0aGVyIHRoZSByb3V0ZSBjYW4gYmUgZGlzY29ubmVjdGVkIHdpdGhvdXQgc3RvcHBpbmcgcGxheWJhY2suCi0gICAgICogPHA+Ci0gICAgICogVGhlIHJvdXRlIGNhbiBub3JtYWxseSBiZSBkaXNjb25uZWN0ZWQgd2l0aG91dCBzdG9wcGluZyBwbGF5YmFjayB3aGVuCi0gICAgICogdGhlIGRlc3RpbmF0aW9uIGRldmljZSBvbiB0aGUgcm91dGUgaXMgY29ubmVjdGVkIHRvIHR3byBvciBtb3JlIHNvdXJjZQotICAgICAqIGRldmljZXMuIFRoZSByb3V0ZSBwcm92aWRlciBzaG91bGQgdXBkYXRlIHRoZSByb3V0ZSBpbW1lZGlhdGVseSB3aGVuIHRoZQotICAgICAqIG51bWJlciBvZiBjb25uZWN0ZWQgZGV2aWNlcyBjaGFuZ2VzLgotICAgICAqIDwvcD48cD4KLSAgICAgKiBUbyBzcGVjaWZ5IHRoYXQgdGhlIHJvdXRlIHNob3VsZCBkaXNjb25uZWN0IHdpdGhvdXQgc3RvcHBpbmcgdXNlCi0gICAgICoge0BsaW5rIE1lZGlhUm91dGVyI3Vuc2VsZWN0KGludCl9IHdpdGgKLSAgICAgKiB7QGxpbmsgTWVkaWFSb3V0ZXIjVU5TRUxFQ1RfUkVBU09OX0RJU0NPTk5FQ1RFRH0uCi0gICAgICogPC9wPgotICAgICAqLwotICAgIHB1YmxpYyBib29sZWFuIGNhbkRpc2Nvbm5lY3RBbmRLZWVwUGxheWluZygpIHsKLSAgICAgICAgcmV0dXJuIG1CdW5kbGUuZ2V0Qm9vbGVhbihLRVlfQ0FOX0RJU0NPTk5FQ1QsIGZhbHNlKTsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBHZXRzIGFuIHtAbGluayBJbnRlbnRTZW5kZXJ9IGZvciBzdGFydGluZyBhIHNldHRpbmdzIGFjdGl2aXR5IGZvciB0aGlzCi0gICAgICogcm91dGUuIFRoZSBhY3Rpdml0eSBtYXkgaGF2ZSBzcGVjaWZpYyByb3V0ZSBzZXR0aW5ncyBvciBnZW5lcmFsIHNldHRpbmdzCi0gICAgICogZm9yIHRoZSBjb25uZWN0ZWQgZGV2aWNlIG9yIHJvdXRlIHByb3ZpZGVyLgotICAgICAqCi0gICAgICogQHJldHVybiBBbiB7QGxpbmsgSW50ZW50U2VuZGVyfSB0byBzdGFydCBhIHNldHRpbmdzIGFjdGl2aXR5LgotICAgICAqLwotICAgIHB1YmxpYyBJbnRlbnRTZW5kZXIgZ2V0U2V0dGluZ3NBY3Rpdml0eSgpIHsKLSAgICAgICAgcmV0dXJuIG1CdW5kbGUuZ2V0UGFyY2VsYWJsZShLRVlfU0VUVElOR1NfSU5URU5UKTsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBHZXRzIHRoZSByb3V0ZSdzIHtAbGluayBNZWRpYUNvbnRyb2xJbnRlbnQgbWVkaWEgY29udHJvbCBpbnRlbnR9IGZpbHRlcnMuCi0gICAgICovCi0gICAgcHVibGljIExpc3Q8SW50ZW50RmlsdGVyPiBnZXRDb250cm9sRmlsdGVycygpIHsKLSAgICAgICAgZW5zdXJlQ29udHJvbEZpbHRlcnMoKTsKLSAgICAgICAgcmV0dXJuIG1Db250cm9sRmlsdGVyczsKLSAgICB9Ci0KLSAgICB2b2lkIGVuc3VyZUNvbnRyb2xGaWx0ZXJzKCkgewotICAgICAgICBpZiAobUNvbnRyb2xGaWx0ZXJzID09IG51bGwpIHsKLSAgICAgICAgICAgIG1Db250cm9sRmlsdGVycyA9IG1CdW5kbGUuPEludGVudEZpbHRlcj5nZXRQYXJjZWxhYmxlQXJyYXlMaXN0KEtFWV9DT05UUk9MX0ZJTFRFUlMpOwotICAgICAgICAgICAgaWYgKG1Db250cm9sRmlsdGVycyA9PSBudWxsKSB7Ci0gICAgICAgICAgICAgICAgbUNvbnRyb2xGaWx0ZXJzID0gQ29sbGVjdGlvbnMuPEludGVudEZpbHRlcj5lbXB0eUxpc3QoKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLQotICAgIC8qKgotICAgICAqIEdldHMgdGhlIHR5cGUgb2YgcGxheWJhY2sgYXNzb2NpYXRlZCB3aXRoIHRoaXMgcm91dGUuCi0gICAgICoKLSAgICAgKiBAcmV0dXJuIFRoZSB0eXBlIG9mIHBsYXliYWNrIGFzc29jaWF0ZWQgd2l0aCB0aGlzIHJvdXRlOgotICAgICAqIHtAbGluayBNZWRpYVJvdXRlci5Sb3V0ZUluZm8jUExBWUJBQ0tfVFlQRV9MT0NBTH0gb3IKLSAgICAgKiB7QGxpbmsgTWVkaWFSb3V0ZXIuUm91dGVJbmZvI1BMQVlCQUNLX1RZUEVfUkVNT1RFfS4KLSAgICAgKi8KLSAgICBwdWJsaWMgaW50IGdldFBsYXliYWNrVHlwZSgpIHsKLSAgICAgICAgcmV0dXJuIG1CdW5kbGUuZ2V0SW50KEtFWV9QTEFZQkFDS19UWVBFLCBNZWRpYVJvdXRlci5Sb3V0ZUluZm8uUExBWUJBQ0tfVFlQRV9SRU1PVEUpOwotICAgIH0KLQotICAgIC8qKgotICAgICAqIEdldHMgdGhlIHJvdXRlJ3MgcGxheWJhY2sgc3RyZWFtLgotICAgICAqLwotICAgIHB1YmxpYyBpbnQgZ2V0UGxheWJhY2tTdHJlYW0oKSB7Ci0gICAgICAgIHJldHVybiBtQnVuZGxlLmdldEludChLRVlfUExBWUJBQ0tfU1RSRUFNLCAtMSk7Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogR2V0cyB0aGUgdHlwZSBvZiB0aGUgcmVjZWl2ZXIgZGV2aWNlIGFzc29jaWF0ZWQgd2l0aCB0aGlzIHJvdXRlLgotICAgICAqCi0gICAgICogQHJldHVybiBUaGUgdHlwZSBvZiB0aGUgcmVjZWl2ZXIgZGV2aWNlIGFzc29jaWF0ZWQgd2l0aCB0aGlzIHJvdXRlOgotICAgICAqIHtAbGluayBNZWRpYVJvdXRlci5Sb3V0ZUluZm8jREVWSUNFX1RZUEVfVFZ9IG9yCi0gICAgICoge0BsaW5rIE1lZGlhUm91dGVyLlJvdXRlSW5mbyNERVZJQ0VfVFlQRV9TUEVBS0VSfS4KLSAgICAgKi8KLSAgICBwdWJsaWMgaW50IGdldERldmljZVR5cGUoKSB7Ci0gICAgICAgIHJldHVybiBtQnVuZGxlLmdldEludChLRVlfREVWSUNFX1RZUEUpOwotICAgIH0KLQotICAgIC8qKgotICAgICAqIEdldHMgdGhlIHJvdXRlJ3MgY3VycmVudCB2b2x1bWUsIG9yIDAgaWYgdW5rbm93bi4KLSAgICAgKi8KLSAgICBwdWJsaWMgaW50IGdldFZvbHVtZSgpIHsKLSAgICAgICAgcmV0dXJuIG1CdW5kbGUuZ2V0SW50KEtFWV9WT0xVTUUpOwotICAgIH0KLQotICAgIC8qKgotICAgICAqIEdldHMgdGhlIHJvdXRlJ3MgbWF4aW11bSB2b2x1bWUsIG9yIDAgaWYgdW5rbm93bi4KLSAgICAgKi8KLSAgICBwdWJsaWMgaW50IGdldFZvbHVtZU1heCgpIHsKLSAgICAgICAgcmV0dXJuIG1CdW5kbGUuZ2V0SW50KEtFWV9WT0xVTUVfTUFYKTsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBHZXRzIGluZm9ybWF0aW9uIGFib3V0IGhvdyB2b2x1bWUgaXMgaGFuZGxlZCBvbiB0aGUgcm91dGUuCi0gICAgICoKLSAgICAgKiBAcmV0dXJuIEhvdyB2b2x1bWUgaXMgaGFuZGxlZCBvbiB0aGUgcm91dGU6Ci0gICAgICoge0BsaW5rIE1lZGlhUm91dGVyLlJvdXRlSW5mbyNQTEFZQkFDS19WT0xVTUVfRklYRUR9IG9yCi0gICAgICoge0BsaW5rIE1lZGlhUm91dGVyLlJvdXRlSW5mbyNQTEFZQkFDS19WT0xVTUVfVkFSSUFCTEV9LgotICAgICAqLwotICAgIHB1YmxpYyBpbnQgZ2V0Vm9sdW1lSGFuZGxpbmcoKSB7Ci0gICAgICAgIHJldHVybiBtQnVuZGxlLmdldEludChLRVlfVk9MVU1FX0hBTkRMSU5HLAotICAgICAgICAgICAgICAgIE1lZGlhUm91dGVyLlJvdXRlSW5mby5QTEFZQkFDS19WT0xVTUVfRklYRUQpOwotICAgIH0KLQotICAgIC8qKgotICAgICAqIEdldHMgdGhlIHJvdXRlJ3MgcHJlc2VudGF0aW9uIGRpc3BsYXkgaWQsIG9yIC0xIGlmIG5vbmUuCi0gICAgICovCi0gICAgcHVibGljIGludCBnZXRQcmVzZW50YXRpb25EaXNwbGF5SWQoKSB7Ci0gICAgICAgIHJldHVybiBtQnVuZGxlLmdldEludCgKLSAgICAgICAgICAgICAgICBLRVlfUFJFU0VOVEFUSU9OX0RJU1BMQVlfSUQsIE1lZGlhUm91dGVyLlJvdXRlSW5mby5QUkVTRU5UQVRJT05fRElTUExBWV9JRF9OT05FKTsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBHZXRzIGEgYnVuZGxlIG9mIGV4dHJhcyBmb3IgdGhpcyByb3V0ZSBkZXNjcmlwdG9yLgotICAgICAqIFRoZSBleHRyYXMgd2lsbCBiZSBpZ25vcmVkIGJ5IHRoZSBtZWRpYSByb3V0ZXIgYnV0IHRoZXkgbWF5IGJlIHVzZWQKLSAgICAgKiBieSBhcHBsaWNhdGlvbnMuCi0gICAgICovCi0gICAgcHVibGljIEJ1bmRsZSBnZXRFeHRyYXMoKSB7Ci0gICAgICAgIHJldHVybiBtQnVuZGxlLmdldEJ1bmRsZShLRVlfRVhUUkFTKTsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBHZXRzIHRoZSBtaW5pbXVtIGNsaWVudCB2ZXJzaW9uIHJlcXVpcmVkIGZvciB0aGlzIHJvdXRlLgotICAgICAqIEBoaWRlCi0gICAgICovCi0gICAgLy8gQFJlc3RyaWN0VG8oTElCUkFSWV9HUk9VUCkKLSAgICBwdWJsaWMgaW50IGdldE1pbkNsaWVudFZlcnNpb24oKSB7Ci0gICAgICAgIHJldHVybiBtQnVuZGxlLmdldEludChLRVlfTUlOX0NMSUVOVF9WRVJTSU9OLAotICAgICAgICAgICAgICAgIE1lZGlhUm91dGVQcm92aWRlclByb3RvY29sLkNMSUVOVF9WRVJTSU9OX1NUQVJUKTsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBHZXRzIHRoZSBtYXhpbXVtIGNsaWVudCB2ZXJzaW9uIHJlcXVpcmVkIGZvciB0aGlzIHJvdXRlLgotICAgICAqIEBoaWRlCi0gICAgICovCi0gICAgLy8gQFJlc3RyaWN0VG8oTElCUkFSWV9HUk9VUCkKLSAgICBwdWJsaWMgaW50IGdldE1heENsaWVudFZlcnNpb24oKSB7Ci0gICAgICAgIHJldHVybiBtQnVuZGxlLmdldEludChLRVlfTUFYX0NMSUVOVF9WRVJTSU9OLCBJbnRlZ2VyLk1BWF9WQUxVRSk7Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogUmV0dXJucyB0cnVlIGlmIHRoZSByb3V0ZSBkZXNjcmlwdG9yIGhhcyBhbGwgb2YgdGhlIHJlcXVpcmVkIGZpZWxkcy4KLSAgICAgKi8KLSAgICBwdWJsaWMgYm9vbGVhbiBpc1ZhbGlkKCkgewotICAgICAgICBlbnN1cmVDb250cm9sRmlsdGVycygpOwotICAgICAgICBpZiAoVGV4dFV0aWxzLmlzRW1wdHkoZ2V0SWQoKSkKLSAgICAgICAgICAgICAgICB8fCBUZXh0VXRpbHMuaXNFbXB0eShnZXROYW1lKCkpCi0gICAgICAgICAgICAgICAgfHwgbUNvbnRyb2xGaWx0ZXJzLmNvbnRhaW5zKG51bGwpKSB7Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIFN0cmluZyB0b1N0cmluZygpIHsKLSAgICAgICAgU3RyaW5nQnVpbGRlciByZXN1bHQgPSBuZXcgU3RyaW5nQnVpbGRlcigpOwotICAgICAgICByZXN1bHQuYXBwZW5kKCJNZWRpYVJvdXRlRGVzY3JpcHRvcnsgIik7Ci0gICAgICAgIHJlc3VsdC5hcHBlbmQoImlkPSIpLmFwcGVuZChnZXRJZCgpKTsKLSAgICAgICAgcmVzdWx0LmFwcGVuZCgiLCBncm91cE1lbWJlcklkcz0iKS5hcHBlbmQoZ2V0R3JvdXBNZW1iZXJJZHMoKSk7Ci0gICAgICAgIHJlc3VsdC5hcHBlbmQoIiwgbmFtZT0iKS5hcHBlbmQoZ2V0TmFtZSgpKTsKLSAgICAgICAgcmVzdWx0LmFwcGVuZCgiLCBkZXNjcmlwdGlvbj0iKS5hcHBlbmQoZ2V0RGVzY3JpcHRpb24oKSk7Ci0gICAgICAgIHJlc3VsdC5hcHBlbmQoIiwgaWNvblVyaT0iKS5hcHBlbmQoZ2V0SWNvblVyaSgpKTsKLSAgICAgICAgcmVzdWx0LmFwcGVuZCgiLCBpc0VuYWJsZWQ9IikuYXBwZW5kKGlzRW5hYmxlZCgpKTsKLSAgICAgICAgcmVzdWx0LmFwcGVuZCgiLCBpc0Nvbm5lY3Rpbmc9IikuYXBwZW5kKGlzQ29ubmVjdGluZygpKTsKLSAgICAgICAgcmVzdWx0LmFwcGVuZCgiLCBjb25uZWN0aW9uU3RhdGU9IikuYXBwZW5kKGdldENvbm5lY3Rpb25TdGF0ZSgpKTsKLSAgICAgICAgcmVzdWx0LmFwcGVuZCgiLCBjb250cm9sRmlsdGVycz0iKS5hcHBlbmQoQXJyYXlzLnRvU3RyaW5nKGdldENvbnRyb2xGaWx0ZXJzKCkudG9BcnJheSgpKSk7Ci0gICAgICAgIHJlc3VsdC5hcHBlbmQoIiwgcGxheWJhY2tUeXBlPSIpLmFwcGVuZChnZXRQbGF5YmFja1R5cGUoKSk7Ci0gICAgICAgIHJlc3VsdC5hcHBlbmQoIiwgcGxheWJhY2tTdHJlYW09IikuYXBwZW5kKGdldFBsYXliYWNrU3RyZWFtKCkpOwotICAgICAgICByZXN1bHQuYXBwZW5kKCIsIGRldmljZVR5cGU9IikuYXBwZW5kKGdldERldmljZVR5cGUoKSk7Ci0gICAgICAgIHJlc3VsdC5hcHBlbmQoIiwgdm9sdW1lPSIpLmFwcGVuZChnZXRWb2x1bWUoKSk7Ci0gICAgICAgIHJlc3VsdC5hcHBlbmQoIiwgdm9sdW1lTWF4PSIpLmFwcGVuZChnZXRWb2x1bWVNYXgoKSk7Ci0gICAgICAgIHJlc3VsdC5hcHBlbmQoIiwgdm9sdW1lSGFuZGxpbmc9IikuYXBwZW5kKGdldFZvbHVtZUhhbmRsaW5nKCkpOwotICAgICAgICByZXN1bHQuYXBwZW5kKCIsIHByZXNlbnRhdGlvbkRpc3BsYXlJZD0iKS5hcHBlbmQoZ2V0UHJlc2VudGF0aW9uRGlzcGxheUlkKCkpOwotICAgICAgICByZXN1bHQuYXBwZW5kKCIsIGV4dHJhcz0iKS5hcHBlbmQoZ2V0RXh0cmFzKCkpOwotICAgICAgICByZXN1bHQuYXBwZW5kKCIsIGlzVmFsaWQ9IikuYXBwZW5kKGlzVmFsaWQoKSk7Ci0gICAgICAgIHJlc3VsdC5hcHBlbmQoIiwgbWluQ2xpZW50VmVyc2lvbj0iKS5hcHBlbmQoZ2V0TWluQ2xpZW50VmVyc2lvbigpKTsKLSAgICAgICAgcmVzdWx0LmFwcGVuZCgiLCBtYXhDbGllbnRWZXJzaW9uPSIpLmFwcGVuZChnZXRNYXhDbGllbnRWZXJzaW9uKCkpOwotICAgICAgICByZXN1bHQuYXBwZW5kKCIgfSIpOwotICAgICAgICByZXR1cm4gcmVzdWx0LnRvU3RyaW5nKCk7Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogQ29udmVydHMgdGhpcyBvYmplY3QgdG8gYSBidW5kbGUgZm9yIHNlcmlhbGl6YXRpb24uCi0gICAgICoKLSAgICAgKiBAcmV0dXJuIFRoZSBjb250ZW50cyBvZiB0aGUgb2JqZWN0IHJlcHJlc2VudGVkIGFzIGEgYnVuZGxlLgotICAgICAqLwotICAgIHB1YmxpYyBCdW5kbGUgYXNCdW5kbGUoKSB7Ci0gICAgICAgIHJldHVybiBtQnVuZGxlOwotICAgIH0KLQotICAgIC8qKgotICAgICAqIENyZWF0ZXMgYW4gaW5zdGFuY2UgZnJvbSBhIGJ1bmRsZS4KLSAgICAgKgotICAgICAqIEBwYXJhbSBidW5kbGUgVGhlIGJ1bmRsZSwgb3IgbnVsbCBpZiBub25lLgotICAgICAqIEByZXR1cm4gVGhlIG5ldyBpbnN0YW5jZSwgb3IgbnVsbCBpZiB0aGUgYnVuZGxlIHdhcyBudWxsLgotICAgICAqLwotICAgIHB1YmxpYyBzdGF0aWMgTWVkaWFSb3V0ZURlc2NyaXB0b3IgZnJvbUJ1bmRsZShCdW5kbGUgYnVuZGxlKSB7Ci0gICAgICAgIHJldHVybiBidW5kbGUgIT0gbnVsbCA/IG5ldyBNZWRpYVJvdXRlRGVzY3JpcHRvcihidW5kbGUsIG51bGwpIDogbnVsbDsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBCdWlsZGVyIGZvciB7QGxpbmsgTWVkaWFSb3V0ZURlc2NyaXB0b3IgbWVkaWEgcm91dGUgZGVzY3JpcHRvcnN9LgotICAgICAqLwotICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgY2xhc3MgQnVpbGRlciB7Ci0gICAgICAgIHByaXZhdGUgZmluYWwgQnVuZGxlIG1CdW5kbGU7Ci0gICAgICAgIHByaXZhdGUgQXJyYXlMaXN0PFN0cmluZz4gbUdyb3VwTWVtYmVySWRzOwotICAgICAgICBwcml2YXRlIEFycmF5TGlzdDxJbnRlbnRGaWx0ZXI+IG1Db250cm9sRmlsdGVyczsKLQotICAgICAgICAvKioKLSAgICAgICAgICogQ3JlYXRlcyBhIG1lZGlhIHJvdXRlIGRlc2NyaXB0b3IgYnVpbGRlci4KLSAgICAgICAgICoKLSAgICAgICAgICogQHBhcmFtIGlkIFRoZSB1bmlxdWUgaWQgb2YgdGhlIHJvdXRlLgotICAgICAgICAgKiBAcGFyYW0gbmFtZSBUaGUgdXNlci12aXNpYmxlIG5hbWUgb2YgdGhlIHJvdXRlLgotICAgICAgICAgKi8KLSAgICAgICAgcHVibGljIEJ1aWxkZXIoU3RyaW5nIGlkLCBTdHJpbmcgbmFtZSkgewotICAgICAgICAgICAgbUJ1bmRsZSA9IG5ldyBCdW5kbGUoKTsKLSAgICAgICAgICAgIHNldElkKGlkKTsKLSAgICAgICAgICAgIHNldE5hbWUobmFtZSk7Ci0gICAgICAgIH0KLQotICAgICAgICAvKioKLSAgICAgICAgICogQ3JlYXRlcyBhIG1lZGlhIHJvdXRlIGRlc2NyaXB0b3IgYnVpbGRlciB3aG9zZSBpbml0aWFsIGNvbnRlbnRzIGFyZQotICAgICAgICAgKiBjb3BpZWQgZnJvbSBhbiBleGlzdGluZyBkZXNjcmlwdG9yLgotICAgICAgICAgKi8KLSAgICAgICAgcHVibGljIEJ1aWxkZXIoTWVkaWFSb3V0ZURlc2NyaXB0b3IgZGVzY3JpcHRvcikgewotICAgICAgICAgICAgaWYgKGRlc2NyaXB0b3IgPT0gbnVsbCkgewotICAgICAgICAgICAgICAgIHRocm93IG5ldyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oImRlc2NyaXB0b3IgbXVzdCBub3QgYmUgbnVsbCIpOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBtQnVuZGxlID0gbmV3IEJ1bmRsZShkZXNjcmlwdG9yLm1CdW5kbGUpOwotCi0gICAgICAgICAgICBkZXNjcmlwdG9yLmVuc3VyZUNvbnRyb2xGaWx0ZXJzKCk7Ci0gICAgICAgICAgICBpZiAoIWRlc2NyaXB0b3IubUNvbnRyb2xGaWx0ZXJzLmlzRW1wdHkoKSkgewotICAgICAgICAgICAgICAgIG1Db250cm9sRmlsdGVycyA9IG5ldyBBcnJheUxpc3Q8SW50ZW50RmlsdGVyPihkZXNjcmlwdG9yLm1Db250cm9sRmlsdGVycyk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICAvKioKLSAgICAgICAgICogU2V0cyB0aGUgdW5pcXVlIGlkIG9mIHRoZSByb3V0ZS4KLSAgICAgICAgICogPHA+Ci0gICAgICAgICAqIFRoZSByb3V0ZSBpZCBhc3NvY2lhdGVkIHdpdGggYSByb3V0ZSBkZXNjcmlwdG9yIGZ1bmN0aW9ucyBhcyBhIHN0YWJsZQotICAgICAgICAgKiBpZGVudGlmaWVyIGZvciB0aGUgcm91dGUgYW5kIG11c3QgYmUgdW5pcXVlIGFtb25nIGFsbCByb3V0ZXMgb2ZmZXJlZAotICAgICAgICAgKiBieSB0aGUgcHJvdmlkZXIuCi0gICAgICAgICAqIDwvcD4KLSAgICAgICAgICovCi0gICAgICAgIHB1YmxpYyBCdWlsZGVyIHNldElkKFN0cmluZyBpZCkgewotICAgICAgICAgICAgbUJ1bmRsZS5wdXRTdHJpbmcoS0VZX0lELCBpZCk7Ci0gICAgICAgICAgICByZXR1cm4gdGhpczsKLSAgICAgICAgfQotCi0gICAgICAgIC8qKgotICAgICAgICAgKiBBZGRzIGEgZ3JvdXAgbWVtYmVyIGlkIG9mIHRoZSByb3V0ZS4KLSAgICAgICAgICogPHA+Ci0gICAgICAgICAqIEEgcm91dGUgZGVzY3JpcHRvciB0aGF0IGhhcyBvbmUgb3IgbW9yZSBncm91cCBtZW1iZXIgcm91dGUgaWRzCi0gICAgICAgICAqIHJlcHJlc2VudHMgYSByb3V0ZSBncm91cC4gQSBtZW1iZXIgcm91dGUgbWF5IGJlbG9uZyB0byBhbm90aGVyIGdyb3VwLgotICAgICAgICAgKiA8L3A+Ci0gICAgICAgICAqIEBoaWRlCi0gICAgICAgICAqLwotICAgICAgICAvLyBAUmVzdHJpY3RUbyhMSUJSQVJZX0dST1VQKQotICAgICAgICBwdWJsaWMgQnVpbGRlciBhZGRHcm91cE1lbWJlcklkKFN0cmluZyBncm91cE1lbWJlcklkKSB7Ci0gICAgICAgICAgICBpZiAoVGV4dFV0aWxzLmlzRW1wdHkoZ3JvdXBNZW1iZXJJZCkpIHsKLSAgICAgICAgICAgICAgICB0aHJvdyBuZXcgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKCJncm91cE1lbWJlcklkIG11c3Qgbm90IGJlIGVtcHR5Iik7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGlmIChtR3JvdXBNZW1iZXJJZHMgPT0gbnVsbCkgewotICAgICAgICAgICAgICAgIG1Hcm91cE1lbWJlcklkcyA9IG5ldyBBcnJheUxpc3Q8PigpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYgKCFtR3JvdXBNZW1iZXJJZHMuY29udGFpbnMoZ3JvdXBNZW1iZXJJZCkpIHsKLSAgICAgICAgICAgICAgICBtR3JvdXBNZW1iZXJJZHMuYWRkKGdyb3VwTWVtYmVySWQpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgcmV0dXJuIHRoaXM7Ci0gICAgICAgIH0KLQotICAgICAgICAvKioKLSAgICAgICAgICogQWRkcyBhIGxpc3Qgb2YgZ3JvdXAgbWVtYmVyIGlkcyBvZiB0aGUgcm91dGUuCi0gICAgICAgICAqIDxwPgotICAgICAgICAgKiBBIHJvdXRlIGRlc2NyaXB0b3IgdGhhdCBoYXMgb25lIG9yIG1vcmUgZ3JvdXAgbWVtYmVyIHJvdXRlIGlkcwotICAgICAgICAgKiByZXByZXNlbnRzIGEgcm91dGUgZ3JvdXAuIEEgbWVtYmVyIHJvdXRlIG1heSBiZWxvbmcgdG8gYW5vdGhlciBncm91cC4KLSAgICAgICAgICogPC9wPgotICAgICAgICAgKiBAaGlkZQotICAgICAgICAgKi8KLSAgICAgICAgLy8gQFJlc3RyaWN0VG8oTElCUkFSWV9HUk9VUCkKLSAgICAgICAgcHVibGljIEJ1aWxkZXIgYWRkR3JvdXBNZW1iZXJJZHMoQ29sbGVjdGlvbjxTdHJpbmc+IGdyb3VwTWVtYmVySWRzKSB7Ci0gICAgICAgICAgICBpZiAoZ3JvdXBNZW1iZXJJZHMgPT0gbnVsbCkgewotICAgICAgICAgICAgICAgIHRocm93IG5ldyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oImdyb3VwTWVtYmVySWRzIG11c3Qgbm90IGJlIG51bGwiKTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgaWYgKCFncm91cE1lbWJlcklkcy5pc0VtcHR5KCkpIHsKLSAgICAgICAgICAgICAgICBmb3IgKFN0cmluZyBncm91cE1lbWJlcklkIDogZ3JvdXBNZW1iZXJJZHMpIHsKLSAgICAgICAgICAgICAgICAgICAgYWRkR3JvdXBNZW1iZXJJZChncm91cE1lbWJlcklkKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICByZXR1cm4gdGhpczsKLSAgICAgICAgfQotCi0gICAgICAgIC8qKgotICAgICAgICAgKiBTZXRzIHRoZSB1c2VyLXZpc2libGUgbmFtZSBvZiB0aGUgcm91dGUuCi0gICAgICAgICAqIDxwPgotICAgICAgICAgKiBUaGUgcm91dGUgbmFtZSBpZGVudGlmaWVzIHRoZSBkZXN0aW5hdGlvbiByZXByZXNlbnRlZCBieSB0aGUgcm91dGUuCi0gICAgICAgICAqIEl0IG1heSBiZSBhIHVzZXItc3VwcGxpZWQgbmFtZSwgYW4gYWxpYXMsIG9yIGRldmljZSBzZXJpYWwgbnVtYmVyLgotICAgICAgICAgKiA8L3A+Ci0gICAgICAgICAqLwotICAgICAgICBwdWJsaWMgQnVpbGRlciBzZXROYW1lKFN0cmluZyBuYW1lKSB7Ci0gICAgICAgICAgICBtQnVuZGxlLnB1dFN0cmluZyhLRVlfTkFNRSwgbmFtZSk7Ci0gICAgICAgICAgICByZXR1cm4gdGhpczsKLSAgICAgICAgfQotCi0gICAgICAgIC8qKgotICAgICAgICAgKiBTZXRzIHRoZSB1c2VyLXZpc2libGUgZGVzY3JpcHRpb24gb2YgdGhlIHJvdXRlLgotICAgICAgICAgKiA8cD4KLSAgICAgICAgICogVGhlIHJvdXRlIGRlc2NyaXB0aW9uIGRlc2NyaWJlcyB0aGUga2luZCBvZiBkZXN0aW5hdGlvbiByZXByZXNlbnRlZCBieSB0aGUgcm91dGUuCi0gICAgICAgICAqIEl0IG1heSBiZSBhIHVzZXItc3VwcGxpZWQgc3RyaW5nLCBhIG1vZGVsIG51bWJlciBvciBicmFuZCBvZiBkZXZpY2UuCi0gICAgICAgICAqIDwvcD4KLSAgICAgICAgICovCi0gICAgICAgIHB1YmxpYyBCdWlsZGVyIHNldERlc2NyaXB0aW9uKFN0cmluZyBkZXNjcmlwdGlvbikgewotICAgICAgICAgICAgbUJ1bmRsZS5wdXRTdHJpbmcoS0VZX0RFU0NSSVBUSU9OLCBkZXNjcmlwdGlvbik7Ci0gICAgICAgICAgICByZXR1cm4gdGhpczsKLSAgICAgICAgfQotCi0gICAgICAgIC8qKgotICAgICAgICAgKiBTZXRzIHRoZSBVUkkgb2YgdGhlIGljb24gcmVwcmVzZW50aW5nIHRoaXMgcm91dGUuCi0gICAgICAgICAqIDxwPgotICAgICAgICAgKiBUaGlzIGljb24gd2lsbCBiZSB1c2VkIGluIHBpY2tlciBVSXMgaWYgYXZhaWxhYmxlLgotICAgICAgICAgKiA8L3A+PHA+Ci0gICAgICAgICAqIFRoZSBVUkkgbXVzdCBiZSBvbmUgb2YgdGhlIGZvbGxvd2luZyBmb3JtYXRzOgotICAgICAgICAgKiA8dWw+Ci0gICAgICAgICAqIDxsaT5jb250ZW50ICh7QGxpbmsgYW5kcm9pZC5jb250ZW50LkNvbnRlbnRSZXNvbHZlciNTQ0hFTUVfQ09OVEVOVH0pPC9saT4KLSAgICAgICAgICogPGxpPmFuZHJvaWQucmVzb3VyY2UgKHtAbGluayBhbmRyb2lkLmNvbnRlbnQuQ29udGVudFJlc29sdmVyI1NDSEVNRV9BTkRST0lEX1JFU09VUkNFfSkKLSAgICAgICAgICogPC9saT4KLSAgICAgICAgICogPGxpPmZpbGUgKHtAbGluayBhbmRyb2lkLmNvbnRlbnQuQ29udGVudFJlc29sdmVyI1NDSEVNRV9GSUxFfSk8L2xpPgotICAgICAgICAgKiA8L3VsPgotICAgICAgICAgKiA8L3A+Ci0gICAgICAgICAqLwotICAgICAgICBwdWJsaWMgQnVpbGRlciBzZXRJY29uVXJpKFVyaSBpY29uVXJpKSB7Ci0gICAgICAgICAgICBpZiAoaWNvblVyaSA9PSBudWxsKSB7Ci0gICAgICAgICAgICAgICAgdGhyb3cgbmV3IElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbigiaWNvblVyaSBtdXN0IG5vdCBiZSBudWxsIik7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBtQnVuZGxlLnB1dFN0cmluZyhLRVlfSUNPTl9VUkksIGljb25VcmkudG9TdHJpbmcoKSk7Ci0gICAgICAgICAgICByZXR1cm4gdGhpczsKLSAgICAgICAgfQotCi0gICAgICAgIC8qKgotICAgICAgICAgKiBTZXRzIHdoZXRoZXIgdGhlIHJvdXRlIGlzIGVuYWJsZWQuCi0gICAgICAgICAqIDxwPgotICAgICAgICAgKiBEaXNhYmxlZCByb3V0ZXMgcmVwcmVzZW50IHJvdXRlcyB0aGF0IGEgcm91dGUgcHJvdmlkZXIga25vd3MgYWJvdXQsIHN1Y2ggYXMgcGFpcmVkCi0gICAgICAgICAqIFdpZmkgRGlzcGxheSByZWNlaXZlcnMsIGJ1dCB0aGF0IGFyZSBub3QgY3VycmVudGx5IGF2YWlsYWJsZSBmb3IgdXNlLgotICAgICAgICAgKiA8L3A+Ci0gICAgICAgICAqLwotICAgICAgICBwdWJsaWMgQnVpbGRlciBzZXRFbmFibGVkKGJvb2xlYW4gZW5hYmxlZCkgewotICAgICAgICAgICAgbUJ1bmRsZS5wdXRCb29sZWFuKEtFWV9FTkFCTEVELCBlbmFibGVkKTsKLSAgICAgICAgICAgIHJldHVybiB0aGlzOwotICAgICAgICB9Ci0KLSAgICAgICAgLyoqCi0gICAgICAgICAqIFNldHMgd2hldGhlciB0aGUgcm91dGUgaXMgaW4gdGhlIHByb2Nlc3Mgb2YgY29ubmVjdGluZyBhbmQgaXMgbm90IHlldAotICAgICAgICAgKiByZWFkeSBmb3IgdXNlLgotICAgICAgICAgKiBAZGVwcmVjYXRlZCBVc2Uge0BsaW5rICNzZXRDb25uZWN0aW9uU3RhdGV9IGluc3RlYWQuCi0gICAgICAgICAqLwotICAgICAgICBARGVwcmVjYXRlZAotICAgICAgICBwdWJsaWMgQnVpbGRlciBzZXRDb25uZWN0aW5nKGJvb2xlYW4gY29ubmVjdGluZykgewotICAgICAgICAgICAgbUJ1bmRsZS5wdXRCb29sZWFuKEtFWV9DT05ORUNUSU5HLCBjb25uZWN0aW5nKTsKLSAgICAgICAgICAgIHJldHVybiB0aGlzOwotICAgICAgICB9Ci0KLSAgICAgICAgLyoqCi0gICAgICAgICAqIFNldHMgdGhlIHJvdXRlJ3MgY29ubmVjdGlvbiBzdGF0ZS4KLSAgICAgICAgICoKLSAgICAgICAgICogQHBhcmFtIGNvbm5lY3Rpb25TdGF0ZSBUaGUgY29ubmVjdGlvbiBzdGF0ZSBvZiB0aGUgcm91dGU6Ci0gICAgICAgICAqIHtAbGluayBNZWRpYVJvdXRlci5Sb3V0ZUluZm8jQ09OTkVDVElPTl9TVEFURV9ESVNDT05ORUNURUR9LAotICAgICAgICAgKiB7QGxpbmsgTWVkaWFSb3V0ZXIuUm91dGVJbmZvI0NPTk5FQ1RJT05fU1RBVEVfQ09OTkVDVElOR30sIG9yCi0gICAgICAgICAqIHtAbGluayBNZWRpYVJvdXRlci5Sb3V0ZUluZm8jQ09OTkVDVElPTl9TVEFURV9DT05ORUNURUR9LgotICAgICAgICAgKi8KLSAgICAgICAgcHVibGljIEJ1aWxkZXIgc2V0Q29ubmVjdGlvblN0YXRlKGludCBjb25uZWN0aW9uU3RhdGUpIHsKLSAgICAgICAgICAgIG1CdW5kbGUucHV0SW50KEtFWV9DT05ORUNUSU9OX1NUQVRFLCBjb25uZWN0aW9uU3RhdGUpOwotICAgICAgICAgICAgcmV0dXJuIHRoaXM7Ci0gICAgICAgIH0KLQotICAgICAgICAvKioKLSAgICAgICAgICogU2V0cyB3aGV0aGVyIHRoZSByb3V0ZSBjYW4gYmUgZGlzY29ubmVjdGVkIHdpdGhvdXQgc3RvcHBpbmcgcGxheWJhY2suCi0gICAgICAgICAqLwotICAgICAgICBwdWJsaWMgQnVpbGRlciBzZXRDYW5EaXNjb25uZWN0KGJvb2xlYW4gY2FuRGlzY29ubmVjdCkgewotICAgICAgICAgICAgbUJ1bmRsZS5wdXRCb29sZWFuKEtFWV9DQU5fRElTQ09OTkVDVCwgY2FuRGlzY29ubmVjdCk7Ci0gICAgICAgICAgICByZXR1cm4gdGhpczsKLSAgICAgICAgfQotCi0gICAgICAgIC8qKgotICAgICAgICAgKiBTZXRzIGFuIGludGVudCBzZW5kZXIgZm9yIGxhdW5jaGluZyB0aGUgc2V0dGluZ3MgYWN0aXZpdHkgZm9yIHRoaXMKLSAgICAgICAgICogcm91dGUuCi0gICAgICAgICAqLwotICAgICAgICBwdWJsaWMgQnVpbGRlciBzZXRTZXR0aW5nc0FjdGl2aXR5KEludGVudFNlbmRlciBpcykgewotICAgICAgICAgICAgbUJ1bmRsZS5wdXRQYXJjZWxhYmxlKEtFWV9TRVRUSU5HU19JTlRFTlQsIGlzKTsKLSAgICAgICAgICAgIHJldHVybiB0aGlzOwotICAgICAgICB9Ci0KLSAgICAgICAgLyoqCi0gICAgICAgICAqIEFkZHMgYSB7QGxpbmsgTWVkaWFDb250cm9sSW50ZW50IG1lZGlhIGNvbnRyb2wgaW50ZW50fSBmaWx0ZXIgZm9yIHRoZSByb3V0ZS4KLSAgICAgICAgICovCi0gICAgICAgIHB1YmxpYyBCdWlsZGVyIGFkZENvbnRyb2xGaWx0ZXIoSW50ZW50RmlsdGVyIGZpbHRlcikgewotICAgICAgICAgICAgaWYgKGZpbHRlciA9PSBudWxsKSB7Ci0gICAgICAgICAgICAgICAgdGhyb3cgbmV3IElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbigiZmlsdGVyIG11c3Qgbm90IGJlIG51bGwiKTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgaWYgKG1Db250cm9sRmlsdGVycyA9PSBudWxsKSB7Ci0gICAgICAgICAgICAgICAgbUNvbnRyb2xGaWx0ZXJzID0gbmV3IEFycmF5TGlzdDxJbnRlbnRGaWx0ZXI+KCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAoIW1Db250cm9sRmlsdGVycy5jb250YWlucyhmaWx0ZXIpKSB7Ci0gICAgICAgICAgICAgICAgbUNvbnRyb2xGaWx0ZXJzLmFkZChmaWx0ZXIpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgcmV0dXJuIHRoaXM7Ci0gICAgICAgIH0KLQotICAgICAgICAvKioKLSAgICAgICAgICogQWRkcyBhIGxpc3Qgb2Yge0BsaW5rIE1lZGlhQ29udHJvbEludGVudCBtZWRpYSBjb250cm9sIGludGVudH0gZmlsdGVycyBmb3IgdGhlIHJvdXRlLgotICAgICAgICAgKi8KLSAgICAgICAgcHVibGljIEJ1aWxkZXIgYWRkQ29udHJvbEZpbHRlcnMoQ29sbGVjdGlvbjxJbnRlbnRGaWx0ZXI+IGZpbHRlcnMpIHsKLSAgICAgICAgICAgIGlmIChmaWx0ZXJzID09IG51bGwpIHsKLSAgICAgICAgICAgICAgICB0aHJvdyBuZXcgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKCJmaWx0ZXJzIG11c3Qgbm90IGJlIG51bGwiKTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgaWYgKCFmaWx0ZXJzLmlzRW1wdHkoKSkgewotICAgICAgICAgICAgICAgIGZvciAoSW50ZW50RmlsdGVyIGZpbHRlciA6IGZpbHRlcnMpIHsKLSAgICAgICAgICAgICAgICAgICAgYWRkQ29udHJvbEZpbHRlcihmaWx0ZXIpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHJldHVybiB0aGlzOwotICAgICAgICB9Ci0KLSAgICAgICAgLyoqCi0gICAgICAgICAqIFNldHMgdGhlIHJvdXRlJ3MgcGxheWJhY2sgdHlwZS4KLSAgICAgICAgICoKLSAgICAgICAgICogQHBhcmFtIHBsYXliYWNrVHlwZSBUaGUgcGxheWJhY2sgdHlwZSBvZiB0aGUgcm91dGU6Ci0gICAgICAgICAqIHtAbGluayBNZWRpYVJvdXRlci5Sb3V0ZUluZm8jUExBWUJBQ0tfVFlQRV9MT0NBTH0gb3IKLSAgICAgICAgICoge0BsaW5rIE1lZGlhUm91dGVyLlJvdXRlSW5mbyNQTEFZQkFDS19UWVBFX1JFTU9URX0uCi0gICAgICAgICAqLwotICAgICAgICBwdWJsaWMgQnVpbGRlciBzZXRQbGF5YmFja1R5cGUoaW50IHBsYXliYWNrVHlwZSkgewotICAgICAgICAgICAgbUJ1bmRsZS5wdXRJbnQoS0VZX1BMQVlCQUNLX1RZUEUsIHBsYXliYWNrVHlwZSk7Ci0gICAgICAgICAgICByZXR1cm4gdGhpczsKLSAgICAgICAgfQotCi0gICAgICAgIC8qKgotICAgICAgICAgKiBTZXRzIHRoZSByb3V0ZSdzIHBsYXliYWNrIHN0cmVhbS4KLSAgICAgICAgICovCi0gICAgICAgIHB1YmxpYyBCdWlsZGVyIHNldFBsYXliYWNrU3RyZWFtKGludCBwbGF5YmFja1N0cmVhbSkgewotICAgICAgICAgICAgbUJ1bmRsZS5wdXRJbnQoS0VZX1BMQVlCQUNLX1NUUkVBTSwgcGxheWJhY2tTdHJlYW0pOwotICAgICAgICAgICAgcmV0dXJuIHRoaXM7Ci0gICAgICAgIH0KLQotICAgICAgICAvKioKLSAgICAgICAgICogU2V0cyB0aGUgcm91dGUncyByZWNlaXZlciBkZXZpY2UgdHlwZS4KLSAgICAgICAgICoKLSAgICAgICAgICogQHBhcmFtIGRldmljZVR5cGUgVGhlIHJlY2VpdmUgZGV2aWNlIHR5cGUgb2YgdGhlIHJvdXRlOgotICAgICAgICAgKiB7QGxpbmsgTWVkaWFSb3V0ZXIuUm91dGVJbmZvI0RFVklDRV9UWVBFX1RWfSBvcgotICAgICAgICAgKiB7QGxpbmsgTWVkaWFSb3V0ZXIuUm91dGVJbmZvI0RFVklDRV9UWVBFX1NQRUFLRVJ9LgotICAgICAgICAgKi8KLSAgICAgICAgcHVibGljIEJ1aWxkZXIgc2V0RGV2aWNlVHlwZShpbnQgZGV2aWNlVHlwZSkgewotICAgICAgICAgICAgbUJ1bmRsZS5wdXRJbnQoS0VZX0RFVklDRV9UWVBFLCBkZXZpY2VUeXBlKTsKLSAgICAgICAgICAgIHJldHVybiB0aGlzOwotICAgICAgICB9Ci0KLSAgICAgICAgLyoqCi0gICAgICAgICAqIFNldHMgdGhlIHJvdXRlJ3MgY3VycmVudCB2b2x1bWUsIG9yIDAgaWYgdW5rbm93bi4KLSAgICAgICAgICovCi0gICAgICAgIHB1YmxpYyBCdWlsZGVyIHNldFZvbHVtZShpbnQgdm9sdW1lKSB7Ci0gICAgICAgICAgICBtQnVuZGxlLnB1dEludChLRVlfVk9MVU1FLCB2b2x1bWUpOwotICAgICAgICAgICAgcmV0dXJuIHRoaXM7Ci0gICAgICAgIH0KLQotICAgICAgICAvKioKLSAgICAgICAgICogU2V0cyB0aGUgcm91dGUncyBtYXhpbXVtIHZvbHVtZSwgb3IgMCBpZiB1bmtub3duLgotICAgICAgICAgKi8KLSAgICAgICAgcHVibGljIEJ1aWxkZXIgc2V0Vm9sdW1lTWF4KGludCB2b2x1bWVNYXgpIHsKLSAgICAgICAgICAgIG1CdW5kbGUucHV0SW50KEtFWV9WT0xVTUVfTUFYLCB2b2x1bWVNYXgpOwotICAgICAgICAgICAgcmV0dXJuIHRoaXM7Ci0gICAgICAgIH0KLQotICAgICAgICAvKioKLSAgICAgICAgICogU2V0cyB0aGUgcm91dGUncyB2b2x1bWUgaGFuZGxpbmcuCi0gICAgICAgICAqCi0gICAgICAgICAqIEBwYXJhbSB2b2x1bWVIYW5kbGluZyBob3cgdm9sdW1lIGlzIGhhbmRsZWQgb24gdGhlIHJvdXRlOgotICAgICAgICAgKiB7QGxpbmsgTWVkaWFSb3V0ZXIuUm91dGVJbmZvI1BMQVlCQUNLX1ZPTFVNRV9GSVhFRH0gb3IKLSAgICAgICAgICoge0BsaW5rIE1lZGlhUm91dGVyLlJvdXRlSW5mbyNQTEFZQkFDS19WT0xVTUVfVkFSSUFCTEV9LgotICAgICAgICAgKi8KLSAgICAgICAgcHVibGljIEJ1aWxkZXIgc2V0Vm9sdW1lSGFuZGxpbmcoaW50IHZvbHVtZUhhbmRsaW5nKSB7Ci0gICAgICAgICAgICBtQnVuZGxlLnB1dEludChLRVlfVk9MVU1FX0hBTkRMSU5HLCB2b2x1bWVIYW5kbGluZyk7Ci0gICAgICAgICAgICByZXR1cm4gdGhpczsKLSAgICAgICAgfQotCi0gICAgICAgIC8qKgotICAgICAgICAgKiBTZXRzIHRoZSByb3V0ZSdzIHByZXNlbnRhdGlvbiBkaXNwbGF5IGlkLCBvciAtMSBpZiBub25lLgotICAgICAgICAgKi8KLSAgICAgICAgcHVibGljIEJ1aWxkZXIgc2V0UHJlc2VudGF0aW9uRGlzcGxheUlkKGludCBwcmVzZW50YXRpb25EaXNwbGF5SWQpIHsKLSAgICAgICAgICAgIG1CdW5kbGUucHV0SW50KEtFWV9QUkVTRU5UQVRJT05fRElTUExBWV9JRCwgcHJlc2VudGF0aW9uRGlzcGxheUlkKTsKLSAgICAgICAgICAgIHJldHVybiB0aGlzOwotICAgICAgICB9Ci0KLSAgICAgICAgLyoqCi0gICAgICAgICAqIFNldHMgYSBidW5kbGUgb2YgZXh0cmFzIGZvciB0aGlzIHJvdXRlIGRlc2NyaXB0b3IuCi0gICAgICAgICAqIFRoZSBleHRyYXMgd2lsbCBiZSBpZ25vcmVkIGJ5IHRoZSBtZWRpYSByb3V0ZXIgYnV0IHRoZXkgbWF5IGJlIHVzZWQKLSAgICAgICAgICogYnkgYXBwbGljYXRpb25zLgotICAgICAgICAgKi8KLSAgICAgICAgcHVibGljIEJ1aWxkZXIgc2V0RXh0cmFzKEJ1bmRsZSBleHRyYXMpIHsKLSAgICAgICAgICAgIG1CdW5kbGUucHV0QnVuZGxlKEtFWV9FWFRSQVMsIGV4dHJhcyk7Ci0gICAgICAgICAgICByZXR1cm4gdGhpczsKLSAgICAgICAgfQotCi0gICAgICAgIC8qKgotICAgICAgICAgKiBTZXRzIHRoZSByb3V0ZSdzIG1pbmltdW0gY2xpZW50IHZlcnNpb24uCi0gICAgICAgICAqIEEgcm91dGVyIHdob3NlIHZlcnNpb24gaXMgbG93ZXIgdGhhbiB0aGlzIHdpbGwgbm90IGJlIGFibGUgdG8gY29ubmVjdCB0byB0aGlzIHJvdXRlLgotICAgICAgICAgKiBAaGlkZQotICAgICAgICAgKi8KLSAgICAgICAgLy8gQFJlc3RyaWN0VG8oTElCUkFSWV9HUk9VUCkKLSAgICAgICAgcHVibGljIEJ1aWxkZXIgc2V0TWluQ2xpZW50VmVyc2lvbihpbnQgbWluVmVyc2lvbikgewotICAgICAgICAgICAgbUJ1bmRsZS5wdXRJbnQoS0VZX01JTl9DTElFTlRfVkVSU0lPTiwgbWluVmVyc2lvbik7Ci0gICAgICAgICAgICByZXR1cm4gdGhpczsKLSAgICAgICAgfQotCi0gICAgICAgIC8qKgotICAgICAgICAgKiBTZXRzIHRoZSByb3V0ZSdzIG1heGltdW0gY2xpZW50IHZlcnNpb24uCi0gICAgICAgICAqIEEgcm91dGVyIHdob3NlIHZlcnNpb24gaXMgaGlnaGVyIHRoYW4gdGhpcyB3aWxsIG5vdCBiZSBhYmxlIHRvIGNvbm5lY3QgdG8gdGhpcyByb3V0ZS4KLSAgICAgICAgICogQGhpZGUKLSAgICAgICAgICovCi0gICAgICAgIC8vIEBSZXN0cmljdFRvKExJQlJBUllfR1JPVVApCi0gICAgICAgIHB1YmxpYyBCdWlsZGVyIHNldE1heENsaWVudFZlcnNpb24oaW50IG1heFZlcnNpb24pIHsKLSAgICAgICAgICAgIG1CdW5kbGUucHV0SW50KEtFWV9NQVhfQ0xJRU5UX1ZFUlNJT04sIG1heFZlcnNpb24pOwotICAgICAgICAgICAgcmV0dXJuIHRoaXM7Ci0gICAgICAgIH0KLQotICAgICAgICAvKioKLSAgICAgICAgICogQnVpbGRzIHRoZSB7QGxpbmsgTWVkaWFSb3V0ZURlc2NyaXB0b3IgbWVkaWEgcm91dGUgZGVzY3JpcHRvcn0uCi0gICAgICAgICAqLwotICAgICAgICBwdWJsaWMgTWVkaWFSb3V0ZURlc2NyaXB0b3IgYnVpbGQoKSB7Ci0gICAgICAgICAgICBpZiAobUNvbnRyb2xGaWx0ZXJzICE9IG51bGwpIHsKLSAgICAgICAgICAgICAgICBtQnVuZGxlLnB1dFBhcmNlbGFibGVBcnJheUxpc3QoS0VZX0NPTlRST0xfRklMVEVSUywgbUNvbnRyb2xGaWx0ZXJzKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmIChtR3JvdXBNZW1iZXJJZHMgIT0gbnVsbCkgewotICAgICAgICAgICAgICAgIG1CdW5kbGUucHV0U3RyaW5nQXJyYXlMaXN0KEtFWV9HUk9VUF9NRU1CRVJfSURTLCBtR3JvdXBNZW1iZXJJZHMpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgcmV0dXJuIG5ldyBNZWRpYVJvdXRlRGVzY3JpcHRvcihtQnVuZGxlLCBtQ29udHJvbEZpbHRlcnMpOwotICAgICAgICB9Ci0gICAgfQotfQpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvTWVkaWFDb21wb25lbnRzL3NyYy9jb20vYW5kcm9pZC9zdXBwb3J0L21lZGlhcm91dGVyL21lZGlhL01lZGlhUm91dGVEaXNjb3ZlcnlSZXF1ZXN0LmphdmEgYi9wYWNrYWdlcy9NZWRpYUNvbXBvbmVudHMvc3JjL2NvbS9hbmRyb2lkL3N1cHBvcnQvbWVkaWFyb3V0ZXIvbWVkaWEvTWVkaWFSb3V0ZURpc2NvdmVyeVJlcXVlc3QuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDM5NjI3Zi4uMDAwMDAwMAotLS0gYS9wYWNrYWdlcy9NZWRpYUNvbXBvbmVudHMvc3JjL2NvbS9hbmRyb2lkL3N1cHBvcnQvbWVkaWFyb3V0ZXIvbWVkaWEvTWVkaWFSb3V0ZURpc2NvdmVyeVJlcXVlc3QuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDEzMiArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IDIwMTggVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAotICoKLSAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwotICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgotICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0gKgotICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLSAqCi0gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCi0gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAotICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCi0gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCi0gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KLSAqLwotcGFja2FnZSBjb20uYW5kcm9pZC5zdXBwb3J0Lm1lZGlhcm91dGVyLm1lZGlhOwotCi1pbXBvcnQgYW5kcm9pZC5vcy5CdW5kbGU7Ci0KLS8qKgotICogRGVzY3JpYmVzIHRoZSBraW5kcyBvZiByb3V0ZXMgdGhhdCB0aGUgbWVkaWEgcm91dGVyIHdvdWxkIGxpa2UgdG8gZGlzY292ZXIKLSAqIGFuZCB3aGV0aGVyIHRvIHBlcmZvcm0gYWN0aXZlIHNjYW5uaW5nLgotICogPHA+Ci0gKiBUaGlzIG9iamVjdCBpcyBpbW11dGFibGUgb25jZSBjcmVhdGVkLgotICogPC9wPgotICovCi1wdWJsaWMgZmluYWwgY2xhc3MgTWVkaWFSb3V0ZURpc2NvdmVyeVJlcXVlc3QgewotICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBLRVlfU0VMRUNUT1IgPSAic2VsZWN0b3IiOwotICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBLRVlfQUNUSVZFX1NDQU4gPSAiYWN0aXZlU2NhbiI7Ci0KLSAgICBwcml2YXRlIGZpbmFsIEJ1bmRsZSBtQnVuZGxlOwotICAgIHByaXZhdGUgTWVkaWFSb3V0ZVNlbGVjdG9yIG1TZWxlY3RvcjsKLQotICAgIC8qKgotICAgICAqIENyZWF0ZXMgYSBtZWRpYSByb3V0ZSBkaXNjb3ZlcnkgcmVxdWVzdC4KLSAgICAgKgotICAgICAqIEBwYXJhbSBzZWxlY3RvciBUaGUgcm91dGUgc2VsZWN0b3IgdGhhdCBzcGVjaWZpZXMgdGhlIGtpbmRzIG9mIHJvdXRlcyB0byBkaXNjb3Zlci4KLSAgICAgKiBAcGFyYW0gYWN0aXZlU2NhbiBUcnVlIGlmIGFjdGl2ZSBzY2FubmluZyBzaG91bGQgYmUgcGVyZm9ybWVkLgotICAgICAqLwotICAgIHB1YmxpYyBNZWRpYVJvdXRlRGlzY292ZXJ5UmVxdWVzdChNZWRpYVJvdXRlU2VsZWN0b3Igc2VsZWN0b3IsIGJvb2xlYW4gYWN0aXZlU2NhbikgewotICAgICAgICBpZiAoc2VsZWN0b3IgPT0gbnVsbCkgewotICAgICAgICAgICAgdGhyb3cgbmV3IElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbigic2VsZWN0b3IgbXVzdCBub3QgYmUgbnVsbCIpOwotICAgICAgICB9Ci0KLSAgICAgICAgbUJ1bmRsZSA9IG5ldyBCdW5kbGUoKTsKLSAgICAgICAgbVNlbGVjdG9yID0gc2VsZWN0b3I7Ci0gICAgICAgIG1CdW5kbGUucHV0QnVuZGxlKEtFWV9TRUxFQ1RPUiwgc2VsZWN0b3IuYXNCdW5kbGUoKSk7Ci0gICAgICAgIG1CdW5kbGUucHV0Qm9vbGVhbihLRVlfQUNUSVZFX1NDQU4sIGFjdGl2ZVNjYW4pOwotICAgIH0KLQotICAgIHByaXZhdGUgTWVkaWFSb3V0ZURpc2NvdmVyeVJlcXVlc3QoQnVuZGxlIGJ1bmRsZSkgewotICAgICAgICBtQnVuZGxlID0gYnVuZGxlOwotICAgIH0KLQotICAgIC8qKgotICAgICAqIEdldHMgdGhlIHJvdXRlIHNlbGVjdG9yIHRoYXQgc3BlY2lmaWVzIHRoZSBraW5kcyBvZiByb3V0ZXMgdG8gZGlzY292ZXIuCi0gICAgICovCi0gICAgcHVibGljIE1lZGlhUm91dGVTZWxlY3RvciBnZXRTZWxlY3RvcigpIHsKLSAgICAgICAgZW5zdXJlU2VsZWN0b3IoKTsKLSAgICAgICAgcmV0dXJuIG1TZWxlY3RvcjsKLSAgICB9Ci0KLSAgICBwcml2YXRlIHZvaWQgZW5zdXJlU2VsZWN0b3IoKSB7Ci0gICAgICAgIGlmIChtU2VsZWN0b3IgPT0gbnVsbCkgewotICAgICAgICAgICAgbVNlbGVjdG9yID0gTWVkaWFSb3V0ZVNlbGVjdG9yLmZyb21CdW5kbGUobUJ1bmRsZS5nZXRCdW5kbGUoS0VZX1NFTEVDVE9SKSk7Ci0gICAgICAgICAgICBpZiAobVNlbGVjdG9yID09IG51bGwpIHsKLSAgICAgICAgICAgICAgICBtU2VsZWN0b3IgPSBNZWRpYVJvdXRlU2VsZWN0b3IuRU1QVFk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBSZXR1cm5zIHRydWUgaWYgYWN0aXZlIHNjYW5uaW5nIHNob3VsZCBiZSBwZXJmb3JtZWQuCi0gICAgICoKLSAgICAgKiBAc2VlIE1lZGlhUm91dGVyI0NBTExCQUNLX0ZMQUdfUEVSRk9STV9BQ1RJVkVfU0NBTgotICAgICAqLwotICAgIHB1YmxpYyBib29sZWFuIGlzQWN0aXZlU2NhbigpIHsKLSAgICAgICAgcmV0dXJuIG1CdW5kbGUuZ2V0Qm9vbGVhbihLRVlfQUNUSVZFX1NDQU4pOwotICAgIH0KLQotICAgIC8qKgotICAgICAqIFJldHVybnMgdHJ1ZSBpZiB0aGUgZGlzY292ZXJ5IHJlcXVlc3QgaGFzIGFsbCBvZiB0aGUgcmVxdWlyZWQgZmllbGRzLgotICAgICAqLwotICAgIHB1YmxpYyBib29sZWFuIGlzVmFsaWQoKSB7Ci0gICAgICAgIGVuc3VyZVNlbGVjdG9yKCk7Ci0gICAgICAgIHJldHVybiBtU2VsZWN0b3IuaXNWYWxpZCgpOwotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyBib29sZWFuIGVxdWFscyhPYmplY3QgbykgewotICAgICAgICBpZiAobyBpbnN0YW5jZW9mIE1lZGlhUm91dGVEaXNjb3ZlcnlSZXF1ZXN0KSB7Ci0gICAgICAgICAgICBNZWRpYVJvdXRlRGlzY292ZXJ5UmVxdWVzdCBvdGhlciA9IChNZWRpYVJvdXRlRGlzY292ZXJ5UmVxdWVzdClvOwotICAgICAgICAgICAgcmV0dXJuIGdldFNlbGVjdG9yKCkuZXF1YWxzKG90aGVyLmdldFNlbGVjdG9yKCkpCi0gICAgICAgICAgICAgICAgICAgICYmIGlzQWN0aXZlU2NhbigpID09IG90aGVyLmlzQWN0aXZlU2NhbigpOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgaW50IGhhc2hDb2RlKCkgewotICAgICAgICByZXR1cm4gZ2V0U2VsZWN0b3IoKS5oYXNoQ29kZSgpIF4gKGlzQWN0aXZlU2NhbigpID8gMSA6IDApOwotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyBTdHJpbmcgdG9TdHJpbmcoKSB7Ci0gICAgICAgIFN0cmluZ0J1aWxkZXIgcmVzdWx0ID0gbmV3IFN0cmluZ0J1aWxkZXIoKTsKLSAgICAgICAgcmVzdWx0LmFwcGVuZCgiRGlzY292ZXJ5UmVxdWVzdHsgc2VsZWN0b3I9IikuYXBwZW5kKGdldFNlbGVjdG9yKCkpOwotICAgICAgICByZXN1bHQuYXBwZW5kKCIsIGFjdGl2ZVNjYW49IikuYXBwZW5kKGlzQWN0aXZlU2NhbigpKTsKLSAgICAgICAgcmVzdWx0LmFwcGVuZCgiLCBpc1ZhbGlkPSIpLmFwcGVuZChpc1ZhbGlkKCkpOwotICAgICAgICByZXN1bHQuYXBwZW5kKCIgfSIpOwotICAgICAgICByZXR1cm4gcmVzdWx0LnRvU3RyaW5nKCk7Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogQ29udmVydHMgdGhpcyBvYmplY3QgdG8gYSBidW5kbGUgZm9yIHNlcmlhbGl6YXRpb24uCi0gICAgICoKLSAgICAgKiBAcmV0dXJuIFRoZSBjb250ZW50cyBvZiB0aGUgb2JqZWN0IHJlcHJlc2VudGVkIGFzIGEgYnVuZGxlLgotICAgICAqLwotICAgIHB1YmxpYyBCdW5kbGUgYXNCdW5kbGUoKSB7Ci0gICAgICAgIHJldHVybiBtQnVuZGxlOwotICAgIH0KLQotICAgIC8qKgotICAgICAqIENyZWF0ZXMgYW4gaW5zdGFuY2UgZnJvbSBhIGJ1bmRsZS4KLSAgICAgKgotICAgICAqIEBwYXJhbSBidW5kbGUgVGhlIGJ1bmRsZSwgb3IgbnVsbCBpZiBub25lLgotICAgICAqIEByZXR1cm4gVGhlIG5ldyBpbnN0YW5jZSwgb3IgbnVsbCBpZiB0aGUgYnVuZGxlIHdhcyBudWxsLgotICAgICAqLwotICAgIHB1YmxpYyBzdGF0aWMgTWVkaWFSb3V0ZURpc2NvdmVyeVJlcXVlc3QgZnJvbUJ1bmRsZShCdW5kbGUgYnVuZGxlKSB7Ci0gICAgICAgIHJldHVybiBidW5kbGUgIT0gbnVsbCA/IG5ldyBNZWRpYVJvdXRlRGlzY292ZXJ5UmVxdWVzdChidW5kbGUpIDogbnVsbDsKLSAgICB9Ci19CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9NZWRpYUNvbXBvbmVudHMvc3JjL2NvbS9hbmRyb2lkL3N1cHBvcnQvbWVkaWFyb3V0ZXIvbWVkaWEvTWVkaWFSb3V0ZVByb3ZpZGVyLmphdmEgYi9wYWNrYWdlcy9NZWRpYUNvbXBvbmVudHMvc3JjL2NvbS9hbmRyb2lkL3N1cHBvcnQvbWVkaWFyb3V0ZXIvbWVkaWEvTWVkaWFSb3V0ZVByb3ZpZGVyLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDkxYTJlMWEuLjAwMDAwMDAKLS0tIGEvcGFja2FnZXMvTWVkaWFDb21wb25lbnRzL3NyYy9jb20vYW5kcm9pZC9zdXBwb3J0L21lZGlhcm91dGVyL21lZGlhL01lZGlhUm91dGVQcm92aWRlci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNDQ3ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgMjAxOCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0Ci0gKgotICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7Ci0gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCi0gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLSAqCi0gKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotICoKLSAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKLSAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCi0gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KLSAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKLSAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgotICovCi0KLXBhY2thZ2UgY29tLmFuZHJvaWQuc3VwcG9ydC5tZWRpYXJvdXRlci5tZWRpYTsKLQotaW1wb3J0IGFuZHJvaWQuYW5ub3RhdGlvbi5Ob25OdWxsOwotaW1wb3J0IGFuZHJvaWQuYW5ub3RhdGlvbi5OdWxsYWJsZTsKLWltcG9ydCBhbmRyb2lkLmNvbnRlbnQuQ29tcG9uZW50TmFtZTsKLWltcG9ydCBhbmRyb2lkLmNvbnRlbnQuQ29udGV4dDsKLWltcG9ydCBhbmRyb2lkLmNvbnRlbnQuSW50ZW50OwotaW1wb3J0IGFuZHJvaWQub3MuSGFuZGxlcjsKLWltcG9ydCBhbmRyb2lkLm9zLk1lc3NhZ2U7Ci1pbXBvcnQgYW5kcm9pZC5zdXBwb3J0LnY0LnV0aWwuT2JqZWN0c0NvbXBhdDsKLQotaW1wb3J0IGNvbS5hbmRyb2lkLnN1cHBvcnQubWVkaWFyb3V0ZXIubWVkaWEuTWVkaWFSb3V0ZXIuQ29udHJvbFJlcXVlc3RDYWxsYmFjazsKLQotLyoqCi0gKiBNZWRpYSByb3V0ZSBwcm92aWRlcnMgYXJlIHVzZWQgdG8gcHVibGlzaCBhZGRpdGlvbmFsIG1lZGlhIHJvdXRlcyBmb3IKLSAqIHVzZSB3aXRoaW4gYW4gYXBwbGljYXRpb24uICBNZWRpYSByb3V0ZSBwcm92aWRlcnMgbWF5IGFsc28gYmUgZGVjbGFyZWQKLSAqIGFzIGEgc2VydmljZSB0byBwdWJsaXNoIGFkZGl0aW9uYWwgbWVkaWEgcm91dGVzIHRvIGFsbCBhcHBsaWNhdGlvbnMKLSAqIGluIHRoZSBzeXN0ZW0uCi0gKiA8cD4KLSAqIFRoZSBwdXJwb3NlIG9mIGEgbWVkaWEgcm91dGUgcHJvdmlkZXIgaXMgdG8gZGlzY292ZXIgbWVkaWEgcm91dGVzIHRoYXQgc2F0aXNmeQotICogdGhlIGNyaXRlcmlhIHNwZWNpZmllZCBieSB0aGUgY3VycmVudCB7QGxpbmsgTWVkaWFSb3V0ZURpc2NvdmVyeVJlcXVlc3R9IGFuZCBwdWJsaXNoIGEKLSAqIHtAbGluayBNZWRpYVJvdXRlUHJvdmlkZXJEZXNjcmlwdG9yfSB3aXRoIGluZm9ybWF0aW9uIGFib3V0IGVhY2ggcm91dGUgYnkgY2FsbGluZwotICoge0BsaW5rICNzZXREZXNjcmlwdG9yfSB0byBub3RpZnkgdGhlIGN1cnJlbnRseSByZWdpc3RlcmVkIHtAbGluayBDYWxsYmFja30uCi0gKiA8L3A+PHA+Ci0gKiBUaGUgcHJvdmlkZXIgc2hvdWxkIHdhdGNoIGZvciBjaGFuZ2VzIHRvIHRoZSBkaXNjb3ZlcnkgcmVxdWVzdCBieSBpbXBsZW1lbnRpbmcKLSAqIHtAbGluayAjb25EaXNjb3ZlcnlSZXF1ZXN0Q2hhbmdlZH0gYW5kIHVwZGF0aW5nIHRoZSBzZXQgb2Ygcm91dGVzIHRoYXQgaXQgaXMKLSAqIGF0dGVtcHRpbmcgdG8gZGlzY292ZXIuICBJdCBzaG91bGQgYWxzbyBoYW5kbGUgcm91dGUgY29udHJvbCByZXF1ZXN0cyBzdWNoCi0gKiBhcyB2b2x1bWUgY2hhbmdlcyBvciB7QGxpbmsgTWVkaWFDb250cm9sSW50ZW50IG1lZGlhIGNvbnRyb2wgaW50ZW50c30KLSAqIGJ5IGltcGxlbWVudGluZyB7QGxpbmsgI29uQ3JlYXRlUm91dGVDb250cm9sbGVyfSB0byByZXR1cm4gYSB7QGxpbmsgUm91dGVDb250cm9sbGVyfQotICogZm9yIGEgcGFydGljdWxhciByb3V0ZS4KLSAqIDwvcD48cD4KLSAqIEEgbWVkaWEgcm91dGUgcHJvdmlkZXIgbWF5IGJlIHVzZWQgcHJpdmF0ZWx5IHdpdGhpbiB0aGUgc2NvcGUgb2YgYSBzaW5nbGUKLSAqIGFwcGxpY2F0aW9uIHByb2Nlc3MgYnkgY2FsbGluZyB7QGxpbmsgTWVkaWFSb3V0ZXIjYWRkUHJvdmlkZXIgTWVkaWFSb3V0ZXIuYWRkUHJvdmlkZXJ9Ci0gKiB0byBhZGQgaXQgdG8gdGhlIGxvY2FsIHtAbGluayBNZWRpYVJvdXRlcn0uICBBIG1lZGlhIHJvdXRlIHByb3ZpZGVyIG1heSBhbHNvIGJlIG1hZGUKLSAqIGF2YWlsYWJsZSBnbG9iYWxseSB0byBhbGwgYXBwbGljYXRpb25zIGJ5IHJlZ2lzdGVyaW5nIGEge0BsaW5rIE1lZGlhUm91dGVQcm92aWRlclNlcnZpY2V9Ci0gKiBpbiB0aGUgcHJvdmlkZXIncyBtYW5pZmVzdC4gIFdoZW4gdGhlIG1lZGlhIHJvdXRlIHByb3ZpZGVyIGlzIHJlZ2lzdGVyZWQKLSAqIGFzIGEgc2VydmljZSwgYWxsIGFwcGxpY2F0aW9ucyB0aGF0IHVzZSB0aGUgbWVkaWEgcm91dGVyIEFQSSB3aWxsIGJlIGFibGUgdG8KLSAqIGRpc2NvdmVyIGFuZCB1c2VkIHRoZSBwcm92aWRlcidzIHJvdXRlcyB3aXRob3V0IGhhdmluZyB0byBpbnN0YWxsIGFueXRoaW5nIGVsc2UuCi0gKiA8L3A+PHA+Ci0gKiBUaGlzIG9iamVjdCBtdXN0IG9ubHkgYmUgYWNjZXNzZWQgb24gdGhlIG1haW4gdGhyZWFkLgotICogPC9wPgotICovCi1wdWJsaWMgYWJzdHJhY3QgY2xhc3MgTWVkaWFSb3V0ZVByb3ZpZGVyIHsKLSAgICBzdGF0aWMgZmluYWwgaW50IE1TR19ERUxJVkVSX0RFU0NSSVBUT1JfQ0hBTkdFRCA9IDE7Ci0gICAgc3RhdGljIGZpbmFsIGludCBNU0dfREVMSVZFUl9ESVNDT1ZFUllfUkVRVUVTVF9DSEFOR0VEID0gMjsKLQotICAgIHByaXZhdGUgZmluYWwgQ29udGV4dCBtQ29udGV4dDsKLSAgICBwcml2YXRlIGZpbmFsIFByb3ZpZGVyTWV0YWRhdGEgbU1ldGFkYXRhOwotICAgIHByaXZhdGUgZmluYWwgUHJvdmlkZXJIYW5kbGVyIG1IYW5kbGVyID0gbmV3IFByb3ZpZGVySGFuZGxlcigpOwotCi0gICAgcHJpdmF0ZSBDYWxsYmFjayBtQ2FsbGJhY2s7Ci0KLSAgICBwcml2YXRlIE1lZGlhUm91dGVEaXNjb3ZlcnlSZXF1ZXN0IG1EaXNjb3ZlcnlSZXF1ZXN0OwotICAgIHByaXZhdGUgYm9vbGVhbiBtUGVuZGluZ0Rpc2NvdmVyeVJlcXVlc3RDaGFuZ2U7Ci0KLSAgICBwcml2YXRlIE1lZGlhUm91dGVQcm92aWRlckRlc2NyaXB0b3IgbURlc2NyaXB0b3I7Ci0gICAgcHJpdmF0ZSBib29sZWFuIG1QZW5kaW5nRGVzY3JpcHRvckNoYW5nZTsKLQotICAgIC8qKgotICAgICAqIENyZWF0ZXMgYSBtZWRpYSByb3V0ZSBwcm92aWRlci4KLSAgICAgKgotICAgICAqIEBwYXJhbSBjb250ZXh0IFRoZSBjb250ZXh0LgotICAgICAqLwotICAgIHB1YmxpYyBNZWRpYVJvdXRlUHJvdmlkZXIoQE5vbk51bGwgQ29udGV4dCBjb250ZXh0KSB7Ci0gICAgICAgIHRoaXMoY29udGV4dCwgbnVsbCk7Ci0gICAgfQotCi0gICAgTWVkaWFSb3V0ZVByb3ZpZGVyKENvbnRleHQgY29udGV4dCwgUHJvdmlkZXJNZXRhZGF0YSBtZXRhZGF0YSkgewotICAgICAgICBpZiAoY29udGV4dCA9PSBudWxsKSB7Ci0gICAgICAgICAgICB0aHJvdyBuZXcgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKCJjb250ZXh0IG11c3Qgbm90IGJlIG51bGwiKTsKLSAgICAgICAgfQotCi0gICAgICAgIG1Db250ZXh0ID0gY29udGV4dDsKLSAgICAgICAgaWYgKG1ldGFkYXRhID09IG51bGwpIHsKLSAgICAgICAgICAgIG1NZXRhZGF0YSA9IG5ldyBQcm92aWRlck1ldGFkYXRhKG5ldyBDb21wb25lbnROYW1lKGNvbnRleHQsIGdldENsYXNzKCkpKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIG1NZXRhZGF0YSA9IG1ldGFkYXRhOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogR2V0cyB0aGUgY29udGV4dCBvZiB0aGUgbWVkaWEgcm91dGUgcHJvdmlkZXIuCi0gICAgICovCi0gICAgcHVibGljIGZpbmFsIENvbnRleHQgZ2V0Q29udGV4dCgpIHsKLSAgICAgICAgcmV0dXJuIG1Db250ZXh0OwotICAgIH0KLQotICAgIC8qKgotICAgICAqIEdldHMgdGhlIHByb3ZpZGVyJ3MgaGFuZGxlciB3aGljaCBpcyBhc3NvY2lhdGVkIHdpdGggdGhlIG1haW4gdGhyZWFkLgotICAgICAqLwotICAgIHB1YmxpYyBmaW5hbCBIYW5kbGVyIGdldEhhbmRsZXIoKSB7Ci0gICAgICAgIHJldHVybiBtSGFuZGxlcjsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBHZXRzIHNvbWUgbWV0YWRhdGEgYWJvdXQgdGhlIHByb3ZpZGVyJ3MgaW1wbGVtZW50YXRpb24uCi0gICAgICovCi0gICAgcHVibGljIGZpbmFsIFByb3ZpZGVyTWV0YWRhdGEgZ2V0TWV0YWRhdGEoKSB7Ci0gICAgICAgIHJldHVybiBtTWV0YWRhdGE7Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogU2V0cyBhIGNhbGxiYWNrIHRvIGludm9rZSB3aGVuIHRoZSBwcm92aWRlcidzIGRlc2NyaXB0b3IgY2hhbmdlcy4KLSAgICAgKgotICAgICAqIEBwYXJhbSBjYWxsYmFjayBUaGUgY2FsbGJhY2sgdG8gdXNlLCBvciBudWxsIGlmIG5vbmUuCi0gICAgICovCi0gICAgcHVibGljIGZpbmFsIHZvaWQgc2V0Q2FsbGJhY2soQE51bGxhYmxlIENhbGxiYWNrIGNhbGxiYWNrKSB7Ci0gICAgICAgIE1lZGlhUm91dGVyLmNoZWNrQ2FsbGluZ1RocmVhZCgpOwotICAgICAgICBtQ2FsbGJhY2sgPSBjYWxsYmFjazsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBHZXRzIHRoZSBjdXJyZW50IGRpc2NvdmVyeSByZXF1ZXN0IHdoaWNoIGluZm9ybXMgdGhlIHByb3ZpZGVyIGFib3V0IHRoZQotICAgICAqIGtpbmRzIG9mIHJvdXRlcyB0byBkaXNjb3ZlciBhbmQgd2hldGhlciB0byBwZXJmb3JtIGFjdGl2ZSBzY2FubmluZy4KLSAgICAgKgotICAgICAqIEByZXR1cm4gVGhlIGN1cnJlbnQgZGlzY292ZXJ5IHJlcXVlc3QsIG9yIG51bGwgaWYgbm8gZGlzY292ZXJ5IGlzIG5lZWRlZCBhdCB0aGlzIHRpbWUuCi0gICAgICoKLSAgICAgKiBAc2VlICNvbkRpc2NvdmVyeVJlcXVlc3RDaGFuZ2VkCi0gICAgICovCi0gICAgQE51bGxhYmxlCi0gICAgcHVibGljIGZpbmFsIE1lZGlhUm91dGVEaXNjb3ZlcnlSZXF1ZXN0IGdldERpc2NvdmVyeVJlcXVlc3QoKSB7Ci0gICAgICAgIHJldHVybiBtRGlzY292ZXJ5UmVxdWVzdDsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBTZXRzIGEgZGlzY292ZXJ5IHJlcXVlc3QgdG8gaW5mb3JtIHRoZSBwcm92aWRlciBhYm91dCB0aGUga2luZHMgb2YKLSAgICAgKiByb3V0ZXMgdGhhdCBpdHMgY2xpZW50cyB3b3VsZCBsaWtlIHRvIGRpc2NvdmVyIGFuZCB3aGV0aGVyIHRvIHBlcmZvcm0gYWN0aXZlIHNjYW5uaW5nLgotICAgICAqCi0gICAgICogQHBhcmFtIHJlcXVlc3QgVGhlIGRpc2NvdmVyeSByZXF1ZXN0LCBvciBudWxsIGlmIG5vIGRpc2NvdmVyeSBpcyBuZWVkZWQgYXQgdGhpcyB0aW1lLgotICAgICAqCi0gICAgICogQHNlZSAjb25EaXNjb3ZlcnlSZXF1ZXN0Q2hhbmdlZAotICAgICAqLwotICAgIHB1YmxpYyBmaW5hbCB2b2lkIHNldERpc2NvdmVyeVJlcXVlc3QoTWVkaWFSb3V0ZURpc2NvdmVyeVJlcXVlc3QgcmVxdWVzdCkgewotICAgICAgICBNZWRpYVJvdXRlci5jaGVja0NhbGxpbmdUaHJlYWQoKTsKLQotICAgICAgICBpZiAoT2JqZWN0c0NvbXBhdC5lcXVhbHMobURpc2NvdmVyeVJlcXVlc3QsIHJlcXVlc3QpKSB7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLQotICAgICAgICBtRGlzY292ZXJ5UmVxdWVzdCA9IHJlcXVlc3Q7Ci0gICAgICAgIGlmICghbVBlbmRpbmdEaXNjb3ZlcnlSZXF1ZXN0Q2hhbmdlKSB7Ci0gICAgICAgICAgICBtUGVuZGluZ0Rpc2NvdmVyeVJlcXVlc3RDaGFuZ2UgPSB0cnVlOwotICAgICAgICAgICAgbUhhbmRsZXIuc2VuZEVtcHR5TWVzc2FnZShNU0dfREVMSVZFUl9ESVNDT1ZFUllfUkVRVUVTVF9DSEFOR0VEKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIHZvaWQgZGVsaXZlckRpc2NvdmVyeVJlcXVlc3RDaGFuZ2VkKCkgewotICAgICAgICBtUGVuZGluZ0Rpc2NvdmVyeVJlcXVlc3RDaGFuZ2UgPSBmYWxzZTsKLSAgICAgICAgb25EaXNjb3ZlcnlSZXF1ZXN0Q2hhbmdlZChtRGlzY292ZXJ5UmVxdWVzdCk7Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogQ2FsbGVkIGJ5IHRoZSBtZWRpYSByb3V0ZXIgd2hlbiB0aGUge0BsaW5rIE1lZGlhUm91dGVEaXNjb3ZlcnlSZXF1ZXN0IGRpc2NvdmVyeSByZXF1ZXN0fQotICAgICAqIGhhcyBjaGFuZ2VkLgotICAgICAqIDxwPgotICAgICAqIFdoZW5ldmVyIGFuIGFwcGxpY2F0aW9ucyBjYWxscyB7QGxpbmsgTWVkaWFSb3V0ZXIjYWRkQ2FsbGJhY2t9IHRvIHJlZ2lzdGVyCi0gICAgICogYSBjYWxsYmFjaywgaXQgYWxzbyBwcm92aWRlcyBhIHNlbGVjdG9yIHRvIHNwZWNpZnkgdGhlIGtpbmRzIG9mIHJvdXRlcyB0aGF0Ci0gICAgICogaXQgaXMgaW50ZXJlc3RlZCBpbi4gIFRoZSBtZWRpYSByb3V0ZXIgY29tYmluZXMgYWxsIG9mIHRoZXNlIHNlbGVjdG9ycyB0b2dldGhlcgotICAgICAqIHRvIGdlbmVyYXRlIGEge0BsaW5rIE1lZGlhUm91dGVEaXNjb3ZlcnlSZXF1ZXN0fSBhbmQgbm90aWZpZXMgZWFjaCBwcm92aWRlciB3aGVuIGEgY2hhbmdlCi0gICAgICogb2NjdXJzIGJ5IGNhbGxpbmcge0BsaW5rICNzZXREaXNjb3ZlcnlSZXF1ZXN0fSB3aGljaCBwb3N0cyBhIG1lc3NhZ2UgdG8gaW52b2tlCi0gICAgICogdGhpcyBtZXRob2QgYXN5bmNocm9ub3VzbHkuCi0gICAgICogPC9wPjxwPgotICAgICAqIFRoZSBwcm92aWRlciBzaG91bGQgZXhhbWluZSB0aGUge0BsaW5rIE1lZGlhQ29udHJvbEludGVudCBtZWRpYSBjb250cm9sIGNhdGVnb3JpZXN9Ci0gICAgICogaW4gdGhlIGRpc2NvdmVyeSByZXF1ZXN0J3Mge0BsaW5rIE1lZGlhUm91dGVTZWxlY3RvciBzZWxlY3Rvcn0gdG8gZGV0ZXJtaW5lIHdoYXQKLSAgICAgKiBraW5kcyBvZiByb3V0ZXMgaXQgc2hvdWxkIHRyeSB0byBkaXNjb3ZlciBhbmQgd2hldGhlciBpdCBzaG91bGQgcGVyZm9ybSBhY3RpdmUKLSAgICAgKiBvciBwYXNzaXZlIHNjYW5zLiAgSW4gbWFueSBjYXNlcywgdGhlIHByb3ZpZGVyIG1heSBiZSBhYmxlIHRvIHNhdmUgcG93ZXIgYnkKLSAgICAgKiBkZXRlcm1pbmluZyB0aGF0IHRoZSBzZWxlY3RvciBkb2VzIG5vdCBjb250YWluIGFueSBjYXRlZ29yaWVzIHRoYXQgaXQgc3VwcG9ydHMKLSAgICAgKiBhbmQgaXQgY2FuIHRoZXJlZm9yZSBhdm9pZCBwZXJmb3JtaW5nIGFueSBzY2FucyBhdCBhbGwuCi0gICAgICogPC9wPgotICAgICAqCi0gICAgICogQHBhcmFtIHJlcXVlc3QgVGhlIG5ldyBkaXNjb3ZlcnkgcmVxdWVzdCwgb3IgbnVsbCBpZiBubyBkaXNjb3ZlcnkgaXMgbmVlZGVkIGF0IHRoaXMgdGltZS4KLSAgICAgKgotICAgICAqIEBzZWUgTWVkaWFSb3V0ZXIjYWRkQ2FsbGJhY2sKLSAgICAgKi8KLSAgICBwdWJsaWMgdm9pZCBvbkRpc2NvdmVyeVJlcXVlc3RDaGFuZ2VkKEBOdWxsYWJsZSBNZWRpYVJvdXRlRGlzY292ZXJ5UmVxdWVzdCByZXF1ZXN0KSB7Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogR2V0cyB0aGUgcHJvdmlkZXIncyBkZXNjcmlwdG9yLgotICAgICAqIDxwPgotICAgICAqIFRoZSBkZXNjcmlwdG9yIGRlc2NyaWJlcyB0aGUgc3RhdGUgb2YgdGhlIG1lZGlhIHJvdXRlIHByb3ZpZGVyIGFuZAotICAgICAqIHRoZSByb3V0ZXMgdGhhdCBpdCBwdWJsaXNoZXMuICBXYXRjaCBmb3IgY2hhbmdlcyB0byB0aGUgZGVzY3JpcHRvcgotICAgICAqIGJ5IHJlZ2lzdGVyaW5nIGEge0BsaW5rIENhbGxiYWNrIGNhbGxiYWNrfSB3aXRoIHtAbGluayAjc2V0Q2FsbGJhY2t9LgotICAgICAqIDwvcD4KLSAgICAgKgotICAgICAqIEByZXR1cm4gVGhlIG1lZGlhIHJvdXRlIHByb3ZpZGVyIGRlc2NyaXB0b3IsIG9yIG51bGwgaWYgbm9uZS4KLSAgICAgKgotICAgICAqIEBzZWUgQ2FsbGJhY2sjb25EZXNjcmlwdG9yQ2hhbmdlZAotICAgICAqLwotICAgIEBOdWxsYWJsZQotICAgIHB1YmxpYyBmaW5hbCBNZWRpYVJvdXRlUHJvdmlkZXJEZXNjcmlwdG9yIGdldERlc2NyaXB0b3IoKSB7Ci0gICAgICAgIHJldHVybiBtRGVzY3JpcHRvcjsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBTZXRzIHRoZSBwcm92aWRlcidzIGRlc2NyaXB0b3IuCi0gICAgICogPHA+Ci0gICAgICogVGhlIHByb3ZpZGVyIG11c3QgY2FsbCB0aGlzIG1ldGhvZCB0byBub3RpZnkgdGhlIGN1cnJlbnRseSByZWdpc3RlcmVkCi0gICAgICoge0BsaW5rIENhbGxiYWNrIGNhbGxiYWNrfSBhYm91dCB0aGUgY2hhbmdlIHRvIHRoZSBwcm92aWRlcidzIGRlc2NyaXB0b3IuCi0gICAgICogPC9wPgotICAgICAqCi0gICAgICogQHBhcmFtIGRlc2NyaXB0b3IgVGhlIHVwZGF0ZWQgcm91dGUgcHJvdmlkZXIgZGVzY3JpcHRvciwgb3IgbnVsbCBpZiBub25lLgotICAgICAqCi0gICAgICogQHNlZSBDYWxsYmFjayNvbkRlc2NyaXB0b3JDaGFuZ2VkCi0gICAgICovCi0gICAgcHVibGljIGZpbmFsIHZvaWQgc2V0RGVzY3JpcHRvcihATnVsbGFibGUgTWVkaWFSb3V0ZVByb3ZpZGVyRGVzY3JpcHRvciBkZXNjcmlwdG9yKSB7Ci0gICAgICAgIE1lZGlhUm91dGVyLmNoZWNrQ2FsbGluZ1RocmVhZCgpOwotCi0gICAgICAgIGlmIChtRGVzY3JpcHRvciAhPSBkZXNjcmlwdG9yKSB7Ci0gICAgICAgICAgICBtRGVzY3JpcHRvciA9IGRlc2NyaXB0b3I7Ci0gICAgICAgICAgICBpZiAoIW1QZW5kaW5nRGVzY3JpcHRvckNoYW5nZSkgewotICAgICAgICAgICAgICAgIG1QZW5kaW5nRGVzY3JpcHRvckNoYW5nZSA9IHRydWU7Ci0gICAgICAgICAgICAgICAgbUhhbmRsZXIuc2VuZEVtcHR5TWVzc2FnZShNU0dfREVMSVZFUl9ERVNDUklQVE9SX0NIQU5HRUQpOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotCi0gICAgdm9pZCBkZWxpdmVyRGVzY3JpcHRvckNoYW5nZWQoKSB7Ci0gICAgICAgIG1QZW5kaW5nRGVzY3JpcHRvckNoYW5nZSA9IGZhbHNlOwotCi0gICAgICAgIGlmIChtQ2FsbGJhY2sgIT0gbnVsbCkgewotICAgICAgICAgICAgbUNhbGxiYWNrLm9uRGVzY3JpcHRvckNoYW5nZWQodGhpcywgbURlc2NyaXB0b3IpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogQ2FsbGVkIGJ5IHRoZSBtZWRpYSByb3V0ZXIgdG8gb2J0YWluIGEgcm91dGUgY29udHJvbGxlciBmb3IgYSBwYXJ0aWN1bGFyIHJvdXRlLgotICAgICAqIDxwPgotICAgICAqIFRoZSBtZWRpYSByb3V0ZXIgd2lsbCBpbnZva2UgdGhlIHtAbGluayBSb3V0ZUNvbnRyb2xsZXIjb25SZWxlYXNlfSBtZXRob2Qgb2YgdGhlIHJvdXRlCi0gICAgICogY29udHJvbGxlciB3aGVuIGl0IGlzIG5vIGxvbmdlciBuZWVkZWQgdG8gYWxsb3cgaXQgdG8gZnJlZSBpdHMgcmVzb3VyY2VzLgotICAgICAqIDwvcD4KLSAgICAgKgotICAgICAqIEBwYXJhbSByb3V0ZUlkIFRoZSB1bmlxdWUgaWQgb2YgdGhlIHJvdXRlLgotICAgICAqIEByZXR1cm4gVGhlIHJvdXRlIGNvbnRyb2xsZXIuICBSZXR1cm5zIG51bGwgaWYgdGhlcmUgaXMgbm8gc3VjaCByb3V0ZSBvciBpZiB0aGUgcm91dGUKLSAgICAgKiBjYW5ub3QgYmUgY29udHJvbGxlZCB1c2luZyB0aGUgcm91dGUgY29udHJvbGxlciBpbnRlcmZhY2UuCi0gICAgICovCi0gICAgQE51bGxhYmxlCi0gICAgcHVibGljIFJvdXRlQ29udHJvbGxlciBvbkNyZWF0ZVJvdXRlQ29udHJvbGxlcihATm9uTnVsbCBTdHJpbmcgcm91dGVJZCkgewotICAgICAgICBpZiAocm91dGVJZCA9PSBudWxsKSB7Ci0gICAgICAgICAgICB0aHJvdyBuZXcgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKCJyb3V0ZUlkIGNhbm5vdCBiZSBudWxsIik7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIG51bGw7Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogQ2FsbGVkIGJ5IHRoZSBtZWRpYSByb3V0ZXIgdG8gb2J0YWluIGEgcm91dGUgY29udHJvbGxlciBmb3IgYSBwYXJ0aWN1bGFyIHJvdXRlIHdoaWNoIGlzIGEKLSAgICAgKiBtZW1iZXIgb2Yge0BsaW5rIE1lZGlhUm91dGVyLlJvdXRlR3JvdXB9LgotICAgICAqIDxwPgotICAgICAqIFRoZSBtZWRpYSByb3V0ZXIgd2lsbCBpbnZva2UgdGhlIHtAbGluayBSb3V0ZUNvbnRyb2xsZXIjb25SZWxlYXNlfSBtZXRob2Qgb2YgdGhlIHJvdXRlCi0gICAgICogY29udHJvbGxlciB3aGVuIGl0IGlzIG5vIGxvbmdlciBuZWVkZWQgdG8gYWxsb3cgaXQgdG8gZnJlZSBpdHMgcmVzb3VyY2VzLgotICAgICAqIDwvcD4KLSAgICAgKgotICAgICAqIEBwYXJhbSByb3V0ZUlkIFRoZSB1bmlxdWUgaWQgb2YgdGhlIG1lbWJlciByb3V0ZS4KLSAgICAgKiBAcGFyYW0gcm91dGVHcm91cElkIFRoZSB1bmlxdWUgaWQgb2YgdGhlIHJvdXRlIGdyb3VwLgotICAgICAqIEByZXR1cm4gVGhlIHJvdXRlIGNvbnRyb2xsZXIuICBSZXR1cm5zIG51bGwgaWYgdGhlcmUgaXMgbm8gc3VjaCByb3V0ZSBvciBpZiB0aGUgcm91dGUKLSAgICAgKiBjYW5ub3QgYmUgY29udHJvbGxlZCB1c2luZyB0aGUgcm91dGUgY29udHJvbGxlciBpbnRlcmZhY2UuCi0gICAgICogQGhpZGUKLSAgICAgKi8KLSAgICAvLyBAUmVzdHJpY3RUbyhMSUJSQVJZX0dST1VQKQotICAgIEBOdWxsYWJsZQotICAgIHB1YmxpYyBSb3V0ZUNvbnRyb2xsZXIgb25DcmVhdGVSb3V0ZUNvbnRyb2xsZXIoQE5vbk51bGwgU3RyaW5nIHJvdXRlSWQsCi0gICAgICAgICAgICBATm9uTnVsbCBTdHJpbmcgcm91dGVHcm91cElkKSB7Ci0gICAgICAgIGlmIChyb3V0ZUlkID09IG51bGwpIHsKLSAgICAgICAgICAgIHRocm93IG5ldyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oInJvdXRlSWQgY2Fubm90IGJlIG51bGwiKTsKLSAgICAgICAgfQotICAgICAgICBpZiAocm91dGVHcm91cElkID09IG51bGwpIHsKLSAgICAgICAgICAgIHRocm93IG5ldyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oInJvdXRlR3JvdXBJZCBjYW5ub3QgYmUgbnVsbCIpOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiBvbkNyZWF0ZVJvdXRlQ29udHJvbGxlcihyb3V0ZUlkKTsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBEZXNjcmliZXMgcHJvcGVydGllcyBvZiB0aGUgcm91dGUgcHJvdmlkZXIncyBpbXBsZW1lbnRhdGlvbi4KLSAgICAgKiA8cD4KLSAgICAgKiBUaGlzIG9iamVjdCBpcyBpbW11dGFibGUgb25jZSBjcmVhdGVkLgotICAgICAqIDwvcD4KLSAgICAgKi8KLSAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGNsYXNzIFByb3ZpZGVyTWV0YWRhdGEgewotICAgICAgICBwcml2YXRlIGZpbmFsIENvbXBvbmVudE5hbWUgbUNvbXBvbmVudE5hbWU7Ci0KLSAgICAgICAgUHJvdmlkZXJNZXRhZGF0YShDb21wb25lbnROYW1lIGNvbXBvbmVudE5hbWUpIHsKLSAgICAgICAgICAgIGlmIChjb21wb25lbnROYW1lID09IG51bGwpIHsKLSAgICAgICAgICAgICAgICB0aHJvdyBuZXcgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKCJjb21wb25lbnROYW1lIG11c3Qgbm90IGJlIG51bGwiKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIG1Db21wb25lbnROYW1lID0gY29tcG9uZW50TmFtZTsKLSAgICAgICAgfQotCi0gICAgICAgIC8qKgotICAgICAgICAgKiBHZXRzIHRoZSBwcm92aWRlcidzIHBhY2thZ2UgbmFtZS4KLSAgICAgICAgICovCi0gICAgICAgIHB1YmxpYyBTdHJpbmcgZ2V0UGFja2FnZU5hbWUoKSB7Ci0gICAgICAgICAgICByZXR1cm4gbUNvbXBvbmVudE5hbWUuZ2V0UGFja2FnZU5hbWUoKTsKLSAgICAgICAgfQotCi0gICAgICAgIC8qKgotICAgICAgICAgKiBHZXRzIHRoZSBwcm92aWRlcidzIGNvbXBvbmVudCBuYW1lLgotICAgICAgICAgKi8KLSAgICAgICAgcHVibGljIENvbXBvbmVudE5hbWUgZ2V0Q29tcG9uZW50TmFtZSgpIHsKLSAgICAgICAgICAgIHJldHVybiBtQ29tcG9uZW50TmFtZTsKLSAgICAgICAgfQotCi0gICAgICAgIEBPdmVycmlkZQotICAgICAgICBwdWJsaWMgU3RyaW5nIHRvU3RyaW5nKCkgewotICAgICAgICAgICAgcmV0dXJuICJQcm92aWRlck1ldGFkYXRheyBjb21wb25lbnROYW1lPSIKLSAgICAgICAgICAgICAgICAgICAgKyBtQ29tcG9uZW50TmFtZS5mbGF0dGVuVG9TaG9ydFN0cmluZygpICsgIiB9IjsKLSAgICAgICAgfQotICAgIH0KLQotICAgIC8qKgotICAgICAqIFByb3ZpZGVzIGNvbnRyb2wgb3ZlciBhIHBhcnRpY3VsYXIgcm91dGUuCi0gICAgICogPHA+Ci0gICAgICogVGhlIG1lZGlhIHJvdXRlciBvYnRhaW5zIGEgcm91dGUgY29udHJvbGxlciBmb3IgYSByb3V0ZSB3aGVuZXZlciBpdCBuZWVkcwotICAgICAqIHRvIGNvbnRyb2wgYSByb3V0ZS4gIFdoZW4gYSByb3V0ZSBpcyBzZWxlY3RlZCwgdGhlIG1lZGlhIHJvdXRlciBpbnZva2VzCi0gICAgICogdGhlIHtAbGluayAjb25TZWxlY3R9IG1ldGhvZCBvZiBpdHMgcm91dGUgY29udHJvbGxlci4gIFdoaWxlIHNlbGVjdGVkLAotICAgICAqIHRoZSBtZWRpYSByb3V0ZXIgbWF5IGNhbGwgb3RoZXIgbWV0aG9kcyBvZiB0aGUgcm91dGUgY29udHJvbGxlciB0bwotICAgICAqIHJlcXVlc3QgdGhhdCBpdCBwZXJmb3JtIGNlcnRhaW4gYWN0aW9ucyB0byB0aGUgcm91dGUuICBXaGVuIGEgcm91dGUgaXMKLSAgICAgKiB1bnNlbGVjdGVkLCB0aGUgbWVkaWEgcm91dGVyIGludm9rZXMgdGhlIHtAbGluayAjb25VbnNlbGVjdH0gbWV0aG9kIG9mIGl0cwotICAgICAqIHJvdXRlIGNvbnRyb2xsZXIuICBXaGVuIHRoZSBtZWRpYSByb3V0ZSBubyBsb25nZXIgbmVlZHMgdGhlIHJvdXRlIGNvbnRyb2xsZXIKLSAgICAgKiBpdCB3aWxsIGludm9rZSB0aGUge0BsaW5rICNvblJlbGVhc2V9IG1ldGhvZCB0byBhbGxvdyB0aGUgcm91dGUgY29udHJvbGxlcgotICAgICAqIHRvIGZyZWUgaXRzIHJlc291cmNlcy4KLSAgICAgKiA8L3A+PHA+Ci0gICAgICogVGhlcmUgbWF5IGJlIG11bHRpcGxlIHJvdXRlIGNvbnRyb2xsZXJzIHNpbXVsdGFuZW91c2x5IGFjdGl2ZSBmb3IgdGhlCi0gICAgICogc2FtZSByb3V0ZS4gIEVhY2ggcm91dGUgY29udHJvbGxlciB3aWxsIGJlIHJlbGVhc2VkIHNlcGFyYXRlbHkuCi0gICAgICogPC9wPjxwPgotICAgICAqIEFsbCBvcGVyYXRpb25zIG9uIHRoZSByb3V0ZSBjb250cm9sbGVyIGFyZSBhc3luY2hyb25vdXMgYW5kCi0gICAgICogcmVzdWx0cyBhcmUgY29tbXVuaWNhdGVkIHZpYSBjYWxsYmFja3MuCi0gICAgICogPC9wPgotICAgICAqLwotICAgIHB1YmxpYyBzdGF0aWMgYWJzdHJhY3QgY2xhc3MgUm91dGVDb250cm9sbGVyIHsKLSAgICAgICAgLyoqCi0gICAgICAgICAqIFJlbGVhc2VzIHRoZSByb3V0ZSBjb250cm9sbGVyLCBhbGxvd2luZyBpdCB0byBmcmVlIGl0cyByZXNvdXJjZXMuCi0gICAgICAgICAqLwotICAgICAgICBwdWJsaWMgdm9pZCBvblJlbGVhc2UoKSB7Ci0gICAgICAgIH0KLQotICAgICAgICAvKioKLSAgICAgICAgICogU2VsZWN0cyB0aGUgcm91dGUuCi0gICAgICAgICAqLwotICAgICAgICBwdWJsaWMgdm9pZCBvblNlbGVjdCgpIHsKLSAgICAgICAgfQotCi0gICAgICAgIC8qKgotICAgICAgICAgKiBVbnNlbGVjdHMgdGhlIHJvdXRlLgotICAgICAgICAgKi8KLSAgICAgICAgcHVibGljIHZvaWQgb25VbnNlbGVjdCgpIHsKLSAgICAgICAgfQotCi0gICAgICAgIC8qKgotICAgICAgICAgKiBVbnNlbGVjdHMgdGhlIHJvdXRlIGFuZCBwcm92aWRlcyBhIHJlYXNvbi4gVGhlIGRlZmF1bHQgaW1wbGVtZW50YXRpb24KLSAgICAgICAgICogY2FsbHMge0BsaW5rICNvblVuc2VsZWN0KCl9LgotICAgICAgICAgKiA8cD4KLSAgICAgICAgICogVGhlIHJlYXNvbiBwcm92aWRlZCB3aWxsIGJlIG9uZSBvZiB0aGUgZm9sbG93aW5nOgotICAgICAgICAgKiA8dWw+Ci0gICAgICAgICAqIDxsaT57QGxpbmsgTWVkaWFSb3V0ZXIjVU5TRUxFQ1RfUkVBU09OX1VOS05PV059PC9saT4KLSAgICAgICAgICogPGxpPntAbGluayBNZWRpYVJvdXRlciNVTlNFTEVDVF9SRUFTT05fRElTQ09OTkVDVEVEfTwvbGk+Ci0gICAgICAgICAqIDxsaT57QGxpbmsgTWVkaWFSb3V0ZXIjVU5TRUxFQ1RfUkVBU09OX1NUT1BQRUR9PC9saT4KLSAgICAgICAgICogPGxpPntAbGluayBNZWRpYVJvdXRlciNVTlNFTEVDVF9SRUFTT05fUk9VVEVfQ0hBTkdFRH08L2xpPgotICAgICAgICAgKiA8L3VsPgotICAgICAgICAgKgotICAgICAgICAgKiBAcGFyYW0gcmVhc29uIFRoZSByZWFzb24gZm9yIHVuc2VsZWN0aW5nIHRoZSByb3V0ZS4KLSAgICAgICAgICovCi0gICAgICAgIHB1YmxpYyB2b2lkIG9uVW5zZWxlY3QoaW50IHJlYXNvbikgewotICAgICAgICAgICAgb25VbnNlbGVjdCgpOwotICAgICAgICB9Ci0KLSAgICAgICAgLyoqCi0gICAgICAgICAqIFJlcXVlc3RzIHRvIHNldCB0aGUgdm9sdW1lIG9mIHRoZSByb3V0ZS4KLSAgICAgICAgICoKLSAgICAgICAgICogQHBhcmFtIHZvbHVtZSBUaGUgbmV3IHZvbHVtZSB2YWx1ZSBiZXR3ZWVuIDAgYW5kIHtAbGluayBNZWRpYVJvdXRlRGVzY3JpcHRvciNnZXRWb2x1bWVNYXh9LgotICAgICAgICAgKi8KLSAgICAgICAgcHVibGljIHZvaWQgb25TZXRWb2x1bWUoaW50IHZvbHVtZSkgewotICAgICAgICB9Ci0KLSAgICAgICAgLyoqCi0gICAgICAgICAqIFJlcXVlc3RzIGFuIGluY3JlbWVudGFsIHZvbHVtZSB1cGRhdGUgZm9yIHRoZSByb3V0ZS4KLSAgICAgICAgICoKLSAgICAgICAgICogQHBhcmFtIGRlbHRhIFRoZSBkZWx0YSB0byBhZGQgdG8gdGhlIGN1cnJlbnQgdm9sdW1lLgotICAgICAgICAgKi8KLSAgICAgICAgcHVibGljIHZvaWQgb25VcGRhdGVWb2x1bWUoaW50IGRlbHRhKSB7Ci0gICAgICAgIH0KLQotICAgICAgICAvKioKLSAgICAgICAgICogUGVyZm9ybXMgYSB7QGxpbmsgTWVkaWFDb250cm9sSW50ZW50IG1lZGlhIGNvbnRyb2x9IHJlcXVlc3QKLSAgICAgICAgICogYXN5bmNocm9ub3VzbHkgb24gYmVoYWxmIG9mIHRoZSByb3V0ZS4KLSAgICAgICAgICoKLSAgICAgICAgICogQHBhcmFtIGludGVudCBBIHtAbGluayBNZWRpYUNvbnRyb2xJbnRlbnQgbWVkaWEgY29udHJvbCBpbnRlbnR9LgotICAgICAgICAgKiBAcGFyYW0gY2FsbGJhY2sgQSB7QGxpbmsgQ29udHJvbFJlcXVlc3RDYWxsYmFja30gdG8gaW52b2tlIHdpdGggdGhlIHJlc3VsdAotICAgICAgICAgKiBvZiB0aGUgcmVxdWVzdCwgb3IgbnVsbCBpZiBubyByZXN1bHQgaXMgcmVxdWlyZWQuCi0gICAgICAgICAqIEByZXR1cm4gVHJ1ZSBpZiB0aGUgY29udHJvbGxlciBpbnRlbmRzIHRvIGhhbmRsZSB0aGUgcmVxdWVzdCBhbmQgd2lsbAotICAgICAgICAgKiBpbnZva2UgdGhlIGNhbGxiYWNrIHdoZW4gZmluaXNoZWQuICBGYWxzZSBpZiB0aGUgY29udHJvbGxlciB3aWxsIG5vdAotICAgICAgICAgKiBoYW5kbGUgdGhlIHJlcXVlc3QgYW5kIHdpbGwgbm90IGludm9rZSB0aGUgY2FsbGJhY2suCi0gICAgICAgICAqCi0gICAgICAgICAqIEBzZWUgTWVkaWFDb250cm9sSW50ZW50Ci0gICAgICAgICAqLwotICAgICAgICBwdWJsaWMgYm9vbGVhbiBvbkNvbnRyb2xSZXF1ZXN0KEludGVudCBpbnRlbnQsIEBOdWxsYWJsZSBDb250cm9sUmVxdWVzdENhbGxiYWNrIGNhbGxiYWNrKSB7Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBDYWxsYmFjayB3aGljaCBpcyBpbnZva2VkIHdoZW4gcm91dGUgaW5mb3JtYXRpb24gYmVjb21lcyBhdmFpbGFibGUgb3IgY2hhbmdlcy4KLSAgICAgKi8KLSAgICBwdWJsaWMgc3RhdGljIGFic3RyYWN0IGNsYXNzIENhbGxiYWNrIHsKLSAgICAgICAgLyoqCi0gICAgICAgICAqIENhbGxlZCB3aGVuIGluZm9ybWF0aW9uIGFib3V0IGEgcm91dGUgcHJvdmlkZXIgYW5kIGl0cyByb3V0ZXMgY2hhbmdlcy4KLSAgICAgICAgICoKLSAgICAgICAgICogQHBhcmFtIHByb3ZpZGVyIFRoZSBtZWRpYSByb3V0ZSBwcm92aWRlciB0aGF0IGNoYW5nZWQsIG5ldmVyIG51bGwuCi0gICAgICAgICAqIEBwYXJhbSBkZXNjcmlwdG9yIFRoZSBuZXcgbWVkaWEgcm91dGUgcHJvdmlkZXIgZGVzY3JpcHRvciwgb3IgbnVsbCBpZiBub25lLgotICAgICAgICAgKi8KLSAgICAgICAgcHVibGljIHZvaWQgb25EZXNjcmlwdG9yQ2hhbmdlZChATm9uTnVsbCBNZWRpYVJvdXRlUHJvdmlkZXIgcHJvdmlkZXIsCi0gICAgICAgICAgICAgICAgQE51bGxhYmxlIE1lZGlhUm91dGVQcm92aWRlckRlc2NyaXB0b3IgZGVzY3JpcHRvcikgewotICAgICAgICB9Ci0gICAgfQotCi0gICAgcHJpdmF0ZSBmaW5hbCBjbGFzcyBQcm92aWRlckhhbmRsZXIgZXh0ZW5kcyBIYW5kbGVyIHsKLSAgICAgICAgUHJvdmlkZXJIYW5kbGVyKCkgewotICAgICAgICB9Ci0KLSAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgIHB1YmxpYyB2b2lkIGhhbmRsZU1lc3NhZ2UoTWVzc2FnZSBtc2cpIHsKLSAgICAgICAgICAgIHN3aXRjaCAobXNnLndoYXQpIHsKLSAgICAgICAgICAgICAgICBjYXNlIE1TR19ERUxJVkVSX0RFU0NSSVBUT1JfQ0hBTkdFRDoKLSAgICAgICAgICAgICAgICAgICAgZGVsaXZlckRlc2NyaXB0b3JDaGFuZ2VkKCk7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIGNhc2UgTVNHX0RFTElWRVJfRElTQ09WRVJZX1JFUVVFU1RfQ0hBTkdFRDoKLSAgICAgICAgICAgICAgICAgICAgZGVsaXZlckRpc2NvdmVyeVJlcXVlc3RDaGFuZ2VkKCk7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotfQpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvTWVkaWFDb21wb25lbnRzL3NyYy9jb20vYW5kcm9pZC9zdXBwb3J0L21lZGlhcm91dGVyL21lZGlhL01lZGlhUm91dGVQcm92aWRlckRlc2NyaXB0b3IuamF2YSBiL3BhY2thZ2VzL01lZGlhQ29tcG9uZW50cy9zcmMvY29tL2FuZHJvaWQvc3VwcG9ydC9tZWRpYXJvdXRlci9tZWRpYS9NZWRpYVJvdXRlUHJvdmlkZXJEZXNjcmlwdG9yLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGViMWNlMDkuLjAwMDAwMDAKLS0tIGEvcGFja2FnZXMvTWVkaWFDb21wb25lbnRzL3NyYy9jb20vYW5kcm9pZC9zdXBwb3J0L21lZGlhcm91dGVyL21lZGlhL01lZGlhUm91dGVQcm92aWRlckRlc2NyaXB0b3IuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDIwOCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IDIwMTggVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAotICoKLSAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwotICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgotICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0gKgotICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLSAqCi0gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCi0gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAotICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCi0gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCi0gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KLSAqLwotcGFja2FnZSBjb20uYW5kcm9pZC5zdXBwb3J0Lm1lZGlhcm91dGVyLm1lZGlhOwotCi1pbXBvcnQgYW5kcm9pZC5vcy5CdW5kbGU7Ci0KLWltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OwotaW1wb3J0IGphdmEudXRpbC5BcnJheXM7Ci1pbXBvcnQgamF2YS51dGlsLkNvbGxlY3Rpb247Ci1pbXBvcnQgamF2YS51dGlsLkNvbGxlY3Rpb25zOwotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotCi0vKioKLSAqIERlc2NyaWJlcyB0aGUgc3RhdGUgb2YgYSBtZWRpYSByb3V0ZSBwcm92aWRlciBhbmQgdGhlIHJvdXRlcyB0aGF0IGl0IHB1Ymxpc2hlcy4KLSAqIDxwPgotICogVGhpcyBvYmplY3QgaXMgaW1tdXRhYmxlIG9uY2UgY3JlYXRlZCB1c2luZyBhIHtAbGluayBCdWlsZGVyfSBpbnN0YW5jZS4KLSAqIDwvcD4KLSAqLwotcHVibGljIGZpbmFsIGNsYXNzIE1lZGlhUm91dGVQcm92aWRlckRlc2NyaXB0b3IgewotICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBLRVlfUk9VVEVTID0gInJvdXRlcyI7Ci0KLSAgICBwcml2YXRlIGZpbmFsIEJ1bmRsZSBtQnVuZGxlOwotICAgIHByaXZhdGUgTGlzdDxNZWRpYVJvdXRlRGVzY3JpcHRvcj4gbVJvdXRlczsKLQotICAgIHByaXZhdGUgTWVkaWFSb3V0ZVByb3ZpZGVyRGVzY3JpcHRvcihCdW5kbGUgYnVuZGxlLCBMaXN0PE1lZGlhUm91dGVEZXNjcmlwdG9yPiByb3V0ZXMpIHsKLSAgICAgICAgbUJ1bmRsZSA9IGJ1bmRsZTsKLSAgICAgICAgbVJvdXRlcyA9IHJvdXRlczsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBHZXRzIHRoZSBsaXN0IG9mIGFsbCByb3V0ZXMgdGhhdCB0aGlzIHByb3ZpZGVyIGhhcyBwdWJsaXNoZWQuCi0gICAgICovCi0gICAgcHVibGljIExpc3Q8TWVkaWFSb3V0ZURlc2NyaXB0b3I+IGdldFJvdXRlcygpIHsKLSAgICAgICAgZW5zdXJlUm91dGVzKCk7Ci0gICAgICAgIHJldHVybiBtUm91dGVzOwotICAgIH0KLQotICAgIHByaXZhdGUgdm9pZCBlbnN1cmVSb3V0ZXMoKSB7Ci0gICAgICAgIGlmIChtUm91dGVzID09IG51bGwpIHsKLSAgICAgICAgICAgIEFycmF5TGlzdDxCdW5kbGU+IHJvdXRlQnVuZGxlcyA9IG1CdW5kbGUuPEJ1bmRsZT5nZXRQYXJjZWxhYmxlQXJyYXlMaXN0KEtFWV9ST1VURVMpOwotICAgICAgICAgICAgaWYgKHJvdXRlQnVuZGxlcyA9PSBudWxsIHx8IHJvdXRlQnVuZGxlcy5pc0VtcHR5KCkpIHsKLSAgICAgICAgICAgICAgICBtUm91dGVzID0gQ29sbGVjdGlvbnMuPE1lZGlhUm91dGVEZXNjcmlwdG9yPmVtcHR5TGlzdCgpOwotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICBmaW5hbCBpbnQgY291bnQgPSByb3V0ZUJ1bmRsZXMuc2l6ZSgpOwotICAgICAgICAgICAgICAgIG1Sb3V0ZXMgPSBuZXcgQXJyYXlMaXN0PE1lZGlhUm91dGVEZXNjcmlwdG9yPihjb3VudCk7Ci0gICAgICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBjb3VudDsgaSsrKSB7Ci0gICAgICAgICAgICAgICAgICAgIG1Sb3V0ZXMuYWRkKE1lZGlhUm91dGVEZXNjcmlwdG9yLmZyb21CdW5kbGUocm91dGVCdW5kbGVzLmdldChpKSkpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLQotICAgIC8qKgotICAgICAqIFJldHVybnMgdHJ1ZSBpZiB0aGUgcm91dGUgcHJvdmlkZXIgZGVzY3JpcHRvciBhbmQgYWxsIG9mIHRoZSByb3V0ZXMgdGhhdAotICAgICAqIGl0IGNvbnRhaW5zIGhhdmUgYWxsIG9mIHRoZSByZXF1aXJlZCBmaWVsZHMuCi0gICAgICogPHA+Ci0gICAgICogVGhpcyB2ZXJpZmljYXRpb24gaXMgZGVlcC4gIElmIHRoZSBwcm92aWRlciBkZXNjcmlwdG9yIGlzIGtub3duIHRvIGJlCi0gICAgICogdmFsaWQgdGhlbiBpdCBpcyBub3QgbmVjZXNzYXJ5IHRvIGNhbGwge0BsaW5rICNpc1ZhbGlkfSBvbiBlYWNoIG9mIGl0cyByb3V0ZXMuCi0gICAgICogPC9wPgotICAgICAqLwotICAgIHB1YmxpYyBib29sZWFuIGlzVmFsaWQoKSB7Ci0gICAgICAgIGVuc3VyZVJvdXRlcygpOwotICAgICAgICBmaW5hbCBpbnQgcm91dGVDb3VudCA9IG1Sb3V0ZXMuc2l6ZSgpOwotICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IHJvdXRlQ291bnQ7IGkrKykgewotICAgICAgICAgICAgTWVkaWFSb3V0ZURlc2NyaXB0b3Igcm91dGUgPSBtUm91dGVzLmdldChpKTsKLSAgICAgICAgICAgIGlmIChyb3V0ZSA9PSBudWxsIHx8ICFyb3V0ZS5pc1ZhbGlkKCkpIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIFN0cmluZyB0b1N0cmluZygpIHsKLSAgICAgICAgU3RyaW5nQnVpbGRlciByZXN1bHQgPSBuZXcgU3RyaW5nQnVpbGRlcigpOwotICAgICAgICByZXN1bHQuYXBwZW5kKCJNZWRpYVJvdXRlUHJvdmlkZXJEZXNjcmlwdG9yeyAiKTsKLSAgICAgICAgcmVzdWx0LmFwcGVuZCgicm91dGVzPSIpLmFwcGVuZCgKLSAgICAgICAgICAgICAgICBBcnJheXMudG9TdHJpbmcoZ2V0Um91dGVzKCkudG9BcnJheSgpKSk7Ci0gICAgICAgIHJlc3VsdC5hcHBlbmQoIiwgaXNWYWxpZD0iKS5hcHBlbmQoaXNWYWxpZCgpKTsKLSAgICAgICAgcmVzdWx0LmFwcGVuZCgiIH0iKTsKLSAgICAgICAgcmV0dXJuIHJlc3VsdC50b1N0cmluZygpOwotICAgIH0KLQotICAgIC8qKgotICAgICAqIENvbnZlcnRzIHRoaXMgb2JqZWN0IHRvIGEgYnVuZGxlIGZvciBzZXJpYWxpemF0aW9uLgotICAgICAqCi0gICAgICogQHJldHVybiBUaGUgY29udGVudHMgb2YgdGhlIG9iamVjdCByZXByZXNlbnRlZCBhcyBhIGJ1bmRsZS4KLSAgICAgKi8KLSAgICBwdWJsaWMgQnVuZGxlIGFzQnVuZGxlKCkgewotICAgICAgICByZXR1cm4gbUJ1bmRsZTsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBDcmVhdGVzIGFuIGluc3RhbmNlIGZyb20gYSBidW5kbGUuCi0gICAgICoKLSAgICAgKiBAcGFyYW0gYnVuZGxlIFRoZSBidW5kbGUsIG9yIG51bGwgaWYgbm9uZS4KLSAgICAgKiBAcmV0dXJuIFRoZSBuZXcgaW5zdGFuY2UsIG9yIG51bGwgaWYgdGhlIGJ1bmRsZSB3YXMgbnVsbC4KLSAgICAgKi8KLSAgICBwdWJsaWMgc3RhdGljIE1lZGlhUm91dGVQcm92aWRlckRlc2NyaXB0b3IgZnJvbUJ1bmRsZShCdW5kbGUgYnVuZGxlKSB7Ci0gICAgICAgIHJldHVybiBidW5kbGUgIT0gbnVsbCA/IG5ldyBNZWRpYVJvdXRlUHJvdmlkZXJEZXNjcmlwdG9yKGJ1bmRsZSwgbnVsbCkgOiBudWxsOwotICAgIH0KLQotICAgIC8qKgotICAgICAqIEJ1aWxkZXIgZm9yIHtAbGluayBNZWRpYVJvdXRlUHJvdmlkZXJEZXNjcmlwdG9yIG1lZGlhIHJvdXRlIHByb3ZpZGVyIGRlc2NyaXB0b3JzfS4KLSAgICAgKi8KLSAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGNsYXNzIEJ1aWxkZXIgewotICAgICAgICBwcml2YXRlIGZpbmFsIEJ1bmRsZSBtQnVuZGxlOwotICAgICAgICBwcml2YXRlIEFycmF5TGlzdDxNZWRpYVJvdXRlRGVzY3JpcHRvcj4gbVJvdXRlczsKLQotICAgICAgICAvKioKLSAgICAgICAgICogQ3JlYXRlcyBhbiBlbXB0eSBtZWRpYSByb3V0ZSBwcm92aWRlciBkZXNjcmlwdG9yIGJ1aWxkZXIuCi0gICAgICAgICAqLwotICAgICAgICBwdWJsaWMgQnVpbGRlcigpIHsKLSAgICAgICAgICAgIG1CdW5kbGUgPSBuZXcgQnVuZGxlKCk7Ci0gICAgICAgIH0KLQotICAgICAgICAvKioKLSAgICAgICAgICogQ3JlYXRlcyBhIG1lZGlhIHJvdXRlIHByb3ZpZGVyIGRlc2NyaXB0b3IgYnVpbGRlciB3aG9zZSBpbml0aWFsIGNvbnRlbnRzIGFyZQotICAgICAgICAgKiBjb3BpZWQgZnJvbSBhbiBleGlzdGluZyBkZXNjcmlwdG9yLgotICAgICAgICAgKi8KLSAgICAgICAgcHVibGljIEJ1aWxkZXIoTWVkaWFSb3V0ZVByb3ZpZGVyRGVzY3JpcHRvciBkZXNjcmlwdG9yKSB7Ci0gICAgICAgICAgICBpZiAoZGVzY3JpcHRvciA9PSBudWxsKSB7Ci0gICAgICAgICAgICAgICAgdGhyb3cgbmV3IElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbigiZGVzY3JpcHRvciBtdXN0IG5vdCBiZSBudWxsIik7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIG1CdW5kbGUgPSBuZXcgQnVuZGxlKGRlc2NyaXB0b3IubUJ1bmRsZSk7Ci0KLSAgICAgICAgICAgIGRlc2NyaXB0b3IuZW5zdXJlUm91dGVzKCk7Ci0gICAgICAgICAgICBpZiAoIWRlc2NyaXB0b3IubVJvdXRlcy5pc0VtcHR5KCkpIHsKLSAgICAgICAgICAgICAgICBtUm91dGVzID0gbmV3IEFycmF5TGlzdDxNZWRpYVJvdXRlRGVzY3JpcHRvcj4oZGVzY3JpcHRvci5tUm91dGVzKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIC8qKgotICAgICAgICAgKiBBZGRzIGEgcm91dGUuCi0gICAgICAgICAqLwotICAgICAgICBwdWJsaWMgQnVpbGRlciBhZGRSb3V0ZShNZWRpYVJvdXRlRGVzY3JpcHRvciByb3V0ZSkgewotICAgICAgICAgICAgaWYgKHJvdXRlID09IG51bGwpIHsKLSAgICAgICAgICAgICAgICB0aHJvdyBuZXcgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKCJyb3V0ZSBtdXN0IG5vdCBiZSBudWxsIik7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGlmIChtUm91dGVzID09IG51bGwpIHsKLSAgICAgICAgICAgICAgICBtUm91dGVzID0gbmV3IEFycmF5TGlzdDxNZWRpYVJvdXRlRGVzY3JpcHRvcj4oKTsKLSAgICAgICAgICAgIH0gZWxzZSBpZiAobVJvdXRlcy5jb250YWlucyhyb3V0ZSkpIHsKLSAgICAgICAgICAgICAgICB0aHJvdyBuZXcgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKCJyb3V0ZSBkZXNjcmlwdG9yIGFscmVhZHkgYWRkZWQiKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIG1Sb3V0ZXMuYWRkKHJvdXRlKTsKLSAgICAgICAgICAgIHJldHVybiB0aGlzOwotICAgICAgICB9Ci0KLSAgICAgICAgLyoqCi0gICAgICAgICAqIEFkZHMgYSBsaXN0IG9mIHJvdXRlcy4KLSAgICAgICAgICovCi0gICAgICAgIHB1YmxpYyBCdWlsZGVyIGFkZFJvdXRlcyhDb2xsZWN0aW9uPE1lZGlhUm91dGVEZXNjcmlwdG9yPiByb3V0ZXMpIHsKLSAgICAgICAgICAgIGlmIChyb3V0ZXMgPT0gbnVsbCkgewotICAgICAgICAgICAgICAgIHRocm93IG5ldyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oInJvdXRlcyBtdXN0IG5vdCBiZSBudWxsIik7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGlmICghcm91dGVzLmlzRW1wdHkoKSkgewotICAgICAgICAgICAgICAgIGZvciAoTWVkaWFSb3V0ZURlc2NyaXB0b3Igcm91dGUgOiByb3V0ZXMpIHsKLSAgICAgICAgICAgICAgICAgICAgYWRkUm91dGUocm91dGUpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHJldHVybiB0aGlzOwotICAgICAgICB9Ci0KLSAgICAgICAgLyoqCi0gICAgICAgICAqIFNldHMgdGhlIGxpc3Qgb2Ygcm91dGVzLgotICAgICAgICAgKi8KLSAgICAgICAgQnVpbGRlciBzZXRSb3V0ZXMoQ29sbGVjdGlvbjxNZWRpYVJvdXRlRGVzY3JpcHRvcj4gcm91dGVzKSB7Ci0gICAgICAgICAgICBpZiAocm91dGVzID09IG51bGwgfHwgcm91dGVzLmlzRW1wdHkoKSkgewotICAgICAgICAgICAgICAgIG1Sb3V0ZXMgPSBudWxsOwotICAgICAgICAgICAgICAgIG1CdW5kbGUucmVtb3ZlKEtFWV9ST1VURVMpOwotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICBtUm91dGVzID0gbmV3IEFycmF5TGlzdDw+KHJvdXRlcyk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICByZXR1cm4gdGhpczsKLSAgICAgICAgfQotCi0gICAgICAgIC8qKgotICAgICAgICAgKiBCdWlsZHMgdGhlIHtAbGluayBNZWRpYVJvdXRlUHJvdmlkZXJEZXNjcmlwdG9yIG1lZGlhIHJvdXRlIHByb3ZpZGVyIGRlc2NyaXB0b3J9LgotICAgICAgICAgKi8KLSAgICAgICAgcHVibGljIE1lZGlhUm91dGVQcm92aWRlckRlc2NyaXB0b3IgYnVpbGQoKSB7Ci0gICAgICAgICAgICBpZiAobVJvdXRlcyAhPSBudWxsKSB7Ci0gICAgICAgICAgICAgICAgZmluYWwgaW50IGNvdW50ID0gbVJvdXRlcy5zaXplKCk7Ci0gICAgICAgICAgICAgICAgQXJyYXlMaXN0PEJ1bmRsZT4gcm91dGVCdW5kbGVzID0gbmV3IEFycmF5TGlzdDxCdW5kbGU+KGNvdW50KTsKLSAgICAgICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGNvdW50OyBpKyspIHsKLSAgICAgICAgICAgICAgICAgICAgcm91dGVCdW5kbGVzLmFkZChtUm91dGVzLmdldChpKS5hc0J1bmRsZSgpKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgbUJ1bmRsZS5wdXRQYXJjZWxhYmxlQXJyYXlMaXN0KEtFWV9ST1VURVMsIHJvdXRlQnVuZGxlcyk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICByZXR1cm4gbmV3IE1lZGlhUm91dGVQcm92aWRlckRlc2NyaXB0b3IobUJ1bmRsZSwgbVJvdXRlcyk7Ci0gICAgICAgIH0KLSAgICB9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvTWVkaWFDb21wb25lbnRzL3NyYy9jb20vYW5kcm9pZC9zdXBwb3J0L21lZGlhcm91dGVyL21lZGlhL01lZGlhUm91dGVQcm92aWRlclByb3RvY29sLmphdmEgYi9wYWNrYWdlcy9NZWRpYUNvbXBvbmVudHMvc3JjL2NvbS9hbmRyb2lkL3N1cHBvcnQvbWVkaWFyb3V0ZXIvbWVkaWEvTWVkaWFSb3V0ZVByb3ZpZGVyUHJvdG9jb2wuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNmJlOTM0My4uMDAwMDAwMAotLS0gYS9wYWNrYWdlcy9NZWRpYUNvbXBvbmVudHMvc3JjL2NvbS9hbmRyb2lkL3N1cHBvcnQvbWVkaWFyb3V0ZXIvbWVkaWEvTWVkaWFSb3V0ZVByb3ZpZGVyUHJvdG9jb2wuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDIzMCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IDIwMTggVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAotICoKLSAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwotICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgotICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0gKgotICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLSAqCi0gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCi0gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAotICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCi0gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCi0gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KLSAqLwotCi1wYWNrYWdlIGNvbS5hbmRyb2lkLnN1cHBvcnQubWVkaWFyb3V0ZXIubWVkaWE7Ci0KLWltcG9ydCBhbmRyb2lkLmNvbnRlbnQuSW50ZW50OwotaW1wb3J0IGFuZHJvaWQub3MuTWVzc2VuZ2VyOwotCi0vKioKLSAqIERlZmluZXMgdGhlIGNvbW11bmljYXRpb24gcHJvdG9jb2wgZm9yIG1lZGlhIHJvdXRlIHByb3ZpZGVyIHNlcnZpY2VzLgotICovCi1hYnN0cmFjdCBjbGFzcyBNZWRpYVJvdXRlUHJvdmlkZXJQcm90b2NvbCB7Ci0gICAgLyoqCi0gICAgICogVGhlIHtAbGluayBJbnRlbnR9IHRoYXQgbXVzdCBiZSBkZWNsYXJlZCBhcyBoYW5kbGVkIGJ5IHRoZSBzZXJ2aWNlLgotICAgICAqIFB1dCB0aGlzIGluIHlvdXIgbWFuaWZlc3QuCi0gICAgICovCi0gICAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgU0VSVklDRV9JTlRFUkZBQ0UgPQotICAgICAgICAgICAgImFuZHJvaWQubWVkaWEuTWVkaWFSb3V0ZVByb3ZpZGVyU2VydmljZSI7Ci0KLSAgICAvKgotICAgICAqIE1lc3NhZ2VzIHNlbnQgZnJvbSB0aGUgY2xpZW50IHRvIHRoZSBzZXJ2aWNlLgotICAgICAqIERPIE5PVCBSRU5VTUJFUiBUSEVTRSEKLSAgICAgKi8KLQotICAgIC8qKiAoY2xpZW50IHYxKQotICAgICAqIFJlZ2lzdGVyIGNsaWVudC4KLSAgICAgKiAtIHJlcGx5VG8gOiBjbGllbnQgbWVzc2VuZ2VyCi0gICAgICogLSBhcmcxICAgIDogcmVxdWVzdCBpZAotICAgICAqIC0gYXJnMiAgICA6IGNsaWVudCB2ZXJzaW9uCi0gICAgICovCi0gICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgQ0xJRU5UX01TR19SRUdJU1RFUiA9IDE7Ci0KLSAgICAvKiogKGNsaWVudCB2MSkKLSAgICAgKiBVbnJlZ2lzdGVyIGNsaWVudC4KLSAgICAgKiAtIHJlcGx5VG8gOiBjbGllbnQgbWVzc2VuZ2VyCi0gICAgICogLSBhcmcxICAgIDogcmVxdWVzdCBpZAotICAgICAqLwotICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IENMSUVOVF9NU0dfVU5SRUdJU1RFUiA9IDI7Ci0KLSAgICAvKiogKGNsaWVudCB2MSkKLSAgICAgKiBDcmVhdGUgcm91dGUgY29udHJvbGxlci4KLSAgICAgKiAtIHJlcGx5VG8gOiBjbGllbnQgbWVzc2VuZ2VyCi0gICAgICogLSBhcmcxICAgIDogcmVxdWVzdCBpZAotICAgICAqIC0gYXJnMiAgICA6IHJvdXRlIGNvbnRyb2xsZXIgaWQKLSAgICAgKiAtIENMSUVOVF9EQVRBX1JPVVRFX0lEIDogcm91dGUgaWQgc3RyaW5nCi0gICAgICovCi0gICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgQ0xJRU5UX01TR19DUkVBVEVfUk9VVEVfQ09OVFJPTExFUiA9IDM7Ci0KLSAgICAvKiogKGNsaWVudCB2MSkKLSAgICAgKiBSZWxlYXNlIHJvdXRlIGNvbnRyb2xsZXIuCi0gICAgICogLSByZXBseVRvIDogY2xpZW50IG1lc3NlbmdlcgotICAgICAqIC0gYXJnMSAgICA6IHJlcXVlc3QgaWQKLSAgICAgKiAtIGFyZzIgICAgOiByb3V0ZSBjb250cm9sbGVyIGlkCi0gICAgICovCi0gICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgQ0xJRU5UX01TR19SRUxFQVNFX1JPVVRFX0NPTlRST0xMRVIgPSA0OwotCi0gICAgLyoqIChjbGllbnQgdjEpCi0gICAgICogU2VsZWN0IHJvdXRlLgotICAgICAqIC0gcmVwbHlUbyA6IGNsaWVudCBtZXNzZW5nZXIKLSAgICAgKiAtIGFyZzEgICAgOiByZXF1ZXN0IGlkCi0gICAgICogLSBhcmcyICAgIDogcm91dGUgY29udHJvbGxlciBpZAotICAgICAqLwotICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IENMSUVOVF9NU0dfU0VMRUNUX1JPVVRFID0gNTsKLQotICAgIC8qKiAoY2xpZW50IHYxKQotICAgICAqIFVuc2VsZWN0IHJvdXRlLgotICAgICAqIC0gcmVwbHlUbyA6IGNsaWVudCBtZXNzZW5nZXIKLSAgICAgKiAtIGFyZzEgICAgOiByZXF1ZXN0IGlkCi0gICAgICogLSBhcmcyICAgIDogcm91dGUgY29udHJvbGxlciBpZAotICAgICAqLwotICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IENMSUVOVF9NU0dfVU5TRUxFQ1RfUk9VVEUgPSA2OwotCi0gICAgLyoqIChjbGllbnQgdjEpCi0gICAgICogU2V0IHJvdXRlIHZvbHVtZS4KLSAgICAgKiAtIHJlcGx5VG8gOiBjbGllbnQgbWVzc2VuZ2VyCi0gICAgICogLSBhcmcxICAgIDogcmVxdWVzdCBpZAotICAgICAqIC0gYXJnMiAgICA6IHJvdXRlIGNvbnRyb2xsZXIgaWQKLSAgICAgKiAtIENMSUVOVF9EQVRBX1ZPTFVNRSA6IHZvbHVtZSBpbnRlZ2VyCi0gICAgICovCi0gICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgQ0xJRU5UX01TR19TRVRfUk9VVEVfVk9MVU1FID0gNzsKLQotICAgIC8qKiAoY2xpZW50IHYxKQotICAgICAqIFVwZGF0ZSByb3V0ZSB2b2x1bWUuCi0gICAgICogLSByZXBseVRvIDogY2xpZW50IG1lc3NlbmdlcgotICAgICAqIC0gYXJnMSAgICA6IHJlcXVlc3QgaWQKLSAgICAgKiAtIGFyZzIgICAgOiByb3V0ZSBjb250cm9sbGVyIGlkCi0gICAgICogLSBDTElFTlRfREFUQV9WT0xVTUUgOiB2b2x1bWUgZGVsdGEgaW50ZWdlcgotICAgICAqLwotICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IENMSUVOVF9NU0dfVVBEQVRFX1JPVVRFX1ZPTFVNRSA9IDg7Ci0KLSAgICAvKiogKGNsaWVudCB2MSkKLSAgICAgKiBSb3V0ZSBjb250cm9sIHJlcXVlc3QuCi0gICAgICogLSByZXBseVRvIDogY2xpZW50IG1lc3NlbmdlcgotICAgICAqIC0gYXJnMSAgICA6IHJlcXVlc3QgaWQKLSAgICAgKiAtIGFyZzIgICAgOiByb3V0ZSBjb250cm9sbGVyIGlkCi0gICAgICogLSBvYmogICAgIDogbWVkaWEgY29udHJvbCBpbnRlbnQKLSAgICAgKi8KLSAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBDTElFTlRfTVNHX1JPVVRFX0NPTlRST0xfUkVRVUVTVCA9IDk7Ci0KLSAgICAvKiogKGNsaWVudCB2MSkKLSAgICAgKiBTZXRzIHRoZSBkaXNjb3ZlcnkgcmVxdWVzdC4KLSAgICAgKiAtIHJlcGx5VG8gOiBjbGllbnQgbWVzc2VuZ2VyCi0gICAgICogLSBhcmcxICAgIDogcmVxdWVzdCBpZAotICAgICAqIC0gb2JqICAgICA6IGRpc2NvdmVyeSByZXF1ZXN0IGJ1bmRsZSwgb3IgbnVsbCBpZiBub25lCi0gICAgICovCi0gICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgQ0xJRU5UX01TR19TRVRfRElTQ09WRVJZX1JFUVVFU1QgPSAxMDsKLQotICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIENMSUVOVF9EQVRBX1JPVVRFX0lEID0gInJvdXRlSWQiOwotICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIENMSUVOVF9EQVRBX1JPVVRFX0xJQlJBUllfR1JPVVAgPSAicm91dGVHcm91cElkIjsKLSAgICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBDTElFTlRfREFUQV9WT0xVTUUgPSAidm9sdW1lIjsKLSAgICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBDTElFTlRfREFUQV9VTlNFTEVDVF9SRUFTT04gPSAidW5zZWxlY3RSZWFzb24iOwotCi0gICAgLyoKLSAgICAgKiBNZXNzYWdlcyBzZW50IGZyb20gdGhlIHNlcnZpY2UgdG8gdGhlIGNsaWVudC4KLSAgICAgKiBETyBOT1QgUkVOVU1CRVIgVEhFU0UhCi0gICAgICovCi0KLSAgICAvKiogKHNlcnZpY2UgdjEpCi0gICAgICogR2VuZXJpYyBmYWlsdXJlIHNlbnQgaW4gcmVzcG9uc2UgdG8gYW55IHVucmVjb2duaXplZCBvciBtYWxmb3JtZWQgcmVxdWVzdC4KLSAgICAgKiAtIGFyZzEgICAgOiByZXF1ZXN0IGlkCi0gICAgICovCi0gICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgU0VSVklDRV9NU0dfR0VORVJJQ19GQUlMVVJFID0gMDsKLQotICAgIC8qKiAoc2VydmljZSB2MSkKLSAgICAgKiBHZW5lcmljIGZhaWx1cmUgc2VudCBpbiByZXNwb25zZSB0byBhIHN1Y2Nlc3NmdWwgbWVzc2FnZS4KLSAgICAgKiAtIGFyZzEgICAgOiByZXF1ZXN0IGlkCi0gICAgICovCi0gICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgU0VSVklDRV9NU0dfR0VORVJJQ19TVUNDRVNTID0gMTsKLQotICAgIC8qKiAoc2VydmljZSB2MSkKLSAgICAgKiBSZWdpc3RyYXRpb24gc3VjY2VlZGVkLgotICAgICAqIC0gYXJnMSAgICA6IHJlcXVlc3QgaWQKLSAgICAgKiAtIGFyZzIgICAgOiBzZXJ2ZXIgdmVyc2lvbgotICAgICAqIC0gb2JqICAgICA6IHJvdXRlIHByb3ZpZGVyIGRlc2NyaXB0b3IgYnVuZGxlLCBvciBudWxsCi0gICAgICovCi0gICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgU0VSVklDRV9NU0dfUkVHSVNURVJFRCA9IDI7Ci0KLSAgICAvKiogKHNlcnZpY2UgdjEpCi0gICAgICogUm91dGUgY29udHJvbCByZXF1ZXN0IHN1Y2Nlc3MgcmVzdWx0LgotICAgICAqIC0gYXJnMSAgICA6IHJlcXVlc3QgaWQKLSAgICAgKiAtIG9iaiAgICAgOiByZXN1bHQgZGF0YSBidW5kbGUsIG9yIG51bGwKLSAgICAgKi8KLSAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBTRVJWSUNFX01TR19DT05UUk9MX1JFUVVFU1RfU1VDQ0VFREVEID0gMzsKLQotICAgIC8qKiAoc2VydmljZSB2MSkKLSAgICAgKiBSb3V0ZSBjb250cm9sIHJlcXVlc3QgZmFpbHVyZSByZXN1bHQuCi0gICAgICogLSBhcmcxICAgIDogcmVxdWVzdCBpZAotICAgICAqIC0gb2JqICAgICA6IHJlc3VsdCBkYXRhIGJ1bmRsZSwgb3IgbnVsbAotICAgICAqIC0gU0VSVklDRV9EQVRBX0VSUk9SOiBlcnJvciBtZXNzYWdlCi0gICAgICovCi0gICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgU0VSVklDRV9NU0dfQ09OVFJPTF9SRVFVRVNUX0ZBSUxFRCA9IDQ7Ci0KLSAgICAvKiogKHNlcnZpY2UgdjEpCi0gICAgICogUm91dGUgcHJvdmlkZXIgZGVzY3JpcHRvciBjaGFuZ2VkLiAgKHVuc29saWNpdGVkIGV2ZW50KQotICAgICAqIC0gYXJnMSAgICA6IHJlc2VydmVkICgwKQotICAgICAqIC0gb2JqICAgICA6IHJvdXRlIHByb3ZpZGVyIGRlc2NyaXB0b3IgYnVuZGxlLCBvciBudWxsCi0gICAgICovCi0gICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgU0VSVklDRV9NU0dfREVTQ1JJUFRPUl9DSEFOR0VEID0gNTsKLQotICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFNFUlZJQ0VfREFUQV9FUlJPUiA9ICJlcnJvciI7Ci0KLSAgICAvKgotICAgICAqIFJlY29nbml6ZWQgY2xpZW50IHZlcnNpb24gbnVtYmVycy4gIChSZXNlcnZlZCBmb3IgZnV0dXJlIHVzZS4pCi0gICAgICogRE8gTk9UIFJFTlVNQkVSIFRIRVNFIQotICAgICAqLwotCi0gICAgLyoqCi0gICAgICogVGhlIGNsaWVudCB2ZXJzaW9uIHVzZWQgZnJvbSB0aGUgYmVnaW5uaW5nLgotICAgICAqLwotICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IENMSUVOVF9WRVJTSU9OXzEgPSAxOwotCi0gICAgLyoqCi0gICAgICogVGhlIGNsaWVudCB2ZXJzaW9uIHVzZWQgZnJvbSBzdXBwb3J0IGxpYnJhcnkgdjI0LjEuMC4KLSAgICAgKi8KLSAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBDTElFTlRfVkVSU0lPTl8yID0gMjsKLQotICAgIC8qKgotICAgICAqIFRoZSBjdXJyZW50IGNsaWVudCB2ZXJzaW9uLgotICAgICAqLwotICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IENMSUVOVF9WRVJTSU9OX0NVUlJFTlQgPSBDTElFTlRfVkVSU0lPTl8yOwotCi0gICAgLyoKLSAgICAgKiBSZWNvZ25pemVkIHNlcnZlciB2ZXJzaW9uIG51bWJlcnMuICAoUmVzZXJ2ZWQgZm9yIGZ1dHVyZSB1c2UuKQotICAgICAqIERPIE5PVCBSRU5VTUJFUiBUSEVTRSEKLSAgICAgKi8KLQotICAgIC8qKgotICAgICAqIFRoZSBzZXJ2aWNlIHZlcnNpb24gdXNlZCBmcm9tIHRoZSBiZWdpbm5pbmcuCi0gICAgICovCi0gICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgU0VSVklDRV9WRVJTSU9OXzEgPSAxOwotCi0gICAgLyoqCi0gICAgICogVGhlIGN1cnJlbnQgc2VydmljZSB2ZXJzaW9uLgotICAgICAqLwotICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFNFUlZJQ0VfVkVSU0lPTl9DVVJSRU5UID0gU0VSVklDRV9WRVJTSU9OXzE7Ci0KLSAgICBzdGF0aWMgZmluYWwgaW50IENMSUVOVF9WRVJTSU9OX1NUQVJUID0gQ0xJRU5UX1ZFUlNJT05fMTsKLQotICAgIC8qKgotICAgICAqIFJldHVybnMgdHJ1ZSBpZiB0aGUgbWVzc2VuZ2VyIG9iamVjdCBpcyB2YWxpZC4KLSAgICAgKiA8cD4KLSAgICAgKiBUaGUgbWVzc2VuZ2VyIGNvbnN0cnVjdG9yIGFuZCB1bnBhcmNlbGluZyBjb2RlIGRvZXMgbm90IGNoZWNrIHdoZXRoZXIgdGhlCi0gICAgICogcHJvdmlkZWQgSUJpbmRlciBpcyBhIHZhbGlkIElNZXNzZW5nZXIgb2JqZWN0LiAgQXMgYSByZXN1bHQsIGl0J3MgcG9zc2libGUKLSAgICAgKiBmb3IgYSBwZWVyIHRvIHNlbmQgYW4gaW52YWxpZCBJQmluZGVyIHRoYXQgd2lsbCByZXN1bHQgaW4gY3Jhc2hlcyBkb3duc3RyZWFtLgotICAgICAqIFRoaXMgbWV0aG9kIGNoZWNrcyB0aGF0IHRoZSBtZXNzZW5nZXIgaXMgaW4gYSB2YWxpZCBzdGF0ZS4KLSAgICAgKiA8L3A+Ci0gICAgICovCi0gICAgcHVibGljIHN0YXRpYyBib29sZWFuIGlzVmFsaWRSZW1vdGVNZXNzZW5nZXIoTWVzc2VuZ2VyIG1lc3NlbmdlcikgewotICAgICAgICB0cnkgewotICAgICAgICAgICAgcmV0dXJuIG1lc3NlbmdlciAhPSBudWxsICYmIG1lc3Nlbmdlci5nZXRCaW5kZXIoKSAhPSBudWxsOwotICAgICAgICB9IGNhdGNoIChOdWxsUG9pbnRlckV4Y2VwdGlvbiBleCkgewotICAgICAgICAgICAgLy8gSWYgdGhlIG1lc3NlbmdlciB3YXMgY29uc3RydWN0ZWQgd2l0aCBhIGJpbmRlciBpbnRlcmZhY2Ugb3RoZXIgdGhhbgotICAgICAgICAgICAgLy8gSU1lc3NlbmdlciB0aGVuIHRoZSBjYWxsIHRvIGdldEJpbmRlcigpIHdpbGwgY3Jhc2ggd2l0aCBhbiBOUEUuCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0KLSAgICB9Ci19CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9NZWRpYUNvbXBvbmVudHMvc3JjL2NvbS9hbmRyb2lkL3N1cHBvcnQvbWVkaWFyb3V0ZXIvbWVkaWEvTWVkaWFSb3V0ZVByb3ZpZGVyU2VydmljZS5qYXZhIGIvcGFja2FnZXMvTWVkaWFDb21wb25lbnRzL3NyYy9jb20vYW5kcm9pZC9zdXBwb3J0L21lZGlhcm91dGVyL21lZGlhL01lZGlhUm91dGVQcm92aWRlclNlcnZpY2UuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDNjZGUxMC4uMDAwMDAwMAotLS0gYS9wYWNrYWdlcy9NZWRpYUNvbXBvbmVudHMvc3JjL2NvbS9hbmRyb2lkL3N1cHBvcnQvbWVkaWFyb3V0ZXIvbWVkaWEvTWVkaWFSb3V0ZVByb3ZpZGVyU2VydmljZS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNzU5ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgMjAxOCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0Ci0gKgotICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7Ci0gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCi0gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLSAqCi0gKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotICoKLSAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKLSAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCi0gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KLSAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKLSAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgotICovCi0KLXBhY2thZ2UgY29tLmFuZHJvaWQuc3VwcG9ydC5tZWRpYXJvdXRlci5tZWRpYTsKLQotaW1wb3J0IHN0YXRpYyBjb20uYW5kcm9pZC5zdXBwb3J0Lm1lZGlhcm91dGVyLm1lZGlhLk1lZGlhUm91dGVQcm92aWRlclByb3RvY29sLkNMSUVOVF9EQVRBX1JPVVRFX0lEOwotaW1wb3J0IHN0YXRpYyBjb20uYW5kcm9pZC5zdXBwb3J0Lm1lZGlhcm91dGVyLm1lZGlhLk1lZGlhUm91dGVQcm92aWRlclByb3RvY29sCi0gICAgICAgIC5DTElFTlRfREFUQV9ST1VURV9MSUJSQVJZX0dST1VQOwotaW1wb3J0IHN0YXRpYyBjb20uYW5kcm9pZC5zdXBwb3J0Lm1lZGlhcm91dGVyLm1lZGlhLk1lZGlhUm91dGVQcm92aWRlclByb3RvY29sCi0gICAgICAgIC5DTElFTlRfREFUQV9VTlNFTEVDVF9SRUFTT047Ci1pbXBvcnQgc3RhdGljIGNvbS5hbmRyb2lkLnN1cHBvcnQubWVkaWFyb3V0ZXIubWVkaWEuTWVkaWFSb3V0ZVByb3ZpZGVyUHJvdG9jb2wuQ0xJRU5UX0RBVEFfVk9MVU1FOwotaW1wb3J0IHN0YXRpYyBjb20uYW5kcm9pZC5zdXBwb3J0Lm1lZGlhcm91dGVyLm1lZGlhLk1lZGlhUm91dGVQcm92aWRlclByb3RvY29sCi0gICAgICAgIC5DTElFTlRfTVNHX0NSRUFURV9ST1VURV9DT05UUk9MTEVSOwotaW1wb3J0IHN0YXRpYyBjb20uYW5kcm9pZC5zdXBwb3J0Lm1lZGlhcm91dGVyLm1lZGlhLk1lZGlhUm91dGVQcm92aWRlclByb3RvY29sLkNMSUVOVF9NU0dfUkVHSVNURVI7Ci1pbXBvcnQgc3RhdGljIGNvbS5hbmRyb2lkLnN1cHBvcnQubWVkaWFyb3V0ZXIubWVkaWEuTWVkaWFSb3V0ZVByb3ZpZGVyUHJvdG9jb2wKLSAgICAgICAgLkNMSUVOVF9NU0dfUkVMRUFTRV9ST1VURV9DT05UUk9MTEVSOwotaW1wb3J0IHN0YXRpYyBjb20uYW5kcm9pZC5zdXBwb3J0Lm1lZGlhcm91dGVyLm1lZGlhLk1lZGlhUm91dGVQcm92aWRlclByb3RvY29sCi0gICAgICAgIC5DTElFTlRfTVNHX1JPVVRFX0NPTlRST0xfUkVRVUVTVDsKLWltcG9ydCBzdGF0aWMgY29tLmFuZHJvaWQuc3VwcG9ydC5tZWRpYXJvdXRlci5tZWRpYS5NZWRpYVJvdXRlUHJvdmlkZXJQcm90b2NvbC5DTElFTlRfTVNHX1NFTEVDVF9ST1VURTsKLWltcG9ydCBzdGF0aWMgY29tLmFuZHJvaWQuc3VwcG9ydC5tZWRpYXJvdXRlci5tZWRpYS5NZWRpYVJvdXRlUHJvdmlkZXJQcm90b2NvbAotICAgICAgICAuQ0xJRU5UX01TR19TRVRfRElTQ09WRVJZX1JFUVVFU1Q7Ci1pbXBvcnQgc3RhdGljIGNvbS5hbmRyb2lkLnN1cHBvcnQubWVkaWFyb3V0ZXIubWVkaWEuTWVkaWFSb3V0ZVByb3ZpZGVyUHJvdG9jb2wKLSAgICAgICAgLkNMSUVOVF9NU0dfU0VUX1JPVVRFX1ZPTFVNRTsKLWltcG9ydCBzdGF0aWMgY29tLmFuZHJvaWQuc3VwcG9ydC5tZWRpYXJvdXRlci5tZWRpYS5NZWRpYVJvdXRlUHJvdmlkZXJQcm90b2NvbC5DTElFTlRfTVNHX1VOUkVHSVNURVI7Ci1pbXBvcnQgc3RhdGljIGNvbS5hbmRyb2lkLnN1cHBvcnQubWVkaWFyb3V0ZXIubWVkaWEuTWVkaWFSb3V0ZVByb3ZpZGVyUHJvdG9jb2wKLSAgICAgICAgLkNMSUVOVF9NU0dfVU5TRUxFQ1RfUk9VVEU7Ci1pbXBvcnQgc3RhdGljIGNvbS5hbmRyb2lkLnN1cHBvcnQubWVkaWFyb3V0ZXIubWVkaWEuTWVkaWFSb3V0ZVByb3ZpZGVyUHJvdG9jb2wKLSAgICAgICAgLkNMSUVOVF9NU0dfVVBEQVRFX1JPVVRFX1ZPTFVNRTsKLWltcG9ydCBzdGF0aWMgY29tLmFuZHJvaWQuc3VwcG9ydC5tZWRpYXJvdXRlci5tZWRpYS5NZWRpYVJvdXRlUHJvdmlkZXJQcm90b2NvbC5DTElFTlRfVkVSU0lPTl8xOwotaW1wb3J0IHN0YXRpYyBjb20uYW5kcm9pZC5zdXBwb3J0Lm1lZGlhcm91dGVyLm1lZGlhLk1lZGlhUm91dGVQcm92aWRlclByb3RvY29sLlNFUlZJQ0VfREFUQV9FUlJPUjsKLWltcG9ydCBzdGF0aWMgY29tLmFuZHJvaWQuc3VwcG9ydC5tZWRpYXJvdXRlci5tZWRpYS5NZWRpYVJvdXRlUHJvdmlkZXJQcm90b2NvbAotICAgICAgICAuU0VSVklDRV9NU0dfQ09OVFJPTF9SRVFVRVNUX0ZBSUxFRDsKLWltcG9ydCBzdGF0aWMgY29tLmFuZHJvaWQuc3VwcG9ydC5tZWRpYXJvdXRlci5tZWRpYS5NZWRpYVJvdXRlUHJvdmlkZXJQcm90b2NvbAotICAgICAgICAuU0VSVklDRV9NU0dfQ09OVFJPTF9SRVFVRVNUX1NVQ0NFRURFRDsKLWltcG9ydCBzdGF0aWMgY29tLmFuZHJvaWQuc3VwcG9ydC5tZWRpYXJvdXRlci5tZWRpYS5NZWRpYVJvdXRlUHJvdmlkZXJQcm90b2NvbAotICAgICAgICAuU0VSVklDRV9NU0dfREVTQ1JJUFRPUl9DSEFOR0VEOwotaW1wb3J0IHN0YXRpYyBjb20uYW5kcm9pZC5zdXBwb3J0Lm1lZGlhcm91dGVyLm1lZGlhLk1lZGlhUm91dGVQcm92aWRlclByb3RvY29sCi0gICAgICAgIC5TRVJWSUNFX01TR19HRU5FUklDX0ZBSUxVUkU7Ci1pbXBvcnQgc3RhdGljIGNvbS5hbmRyb2lkLnN1cHBvcnQubWVkaWFyb3V0ZXIubWVkaWEuTWVkaWFSb3V0ZVByb3ZpZGVyUHJvdG9jb2wKLSAgICAgICAgLlNFUlZJQ0VfTVNHX0dFTkVSSUNfU1VDQ0VTUzsKLWltcG9ydCBzdGF0aWMgY29tLmFuZHJvaWQuc3VwcG9ydC5tZWRpYXJvdXRlci5tZWRpYS5NZWRpYVJvdXRlUHJvdmlkZXJQcm90b2NvbC5TRVJWSUNFX01TR19SRUdJU1RFUkVEOwotaW1wb3J0IHN0YXRpYyBjb20uYW5kcm9pZC5zdXBwb3J0Lm1lZGlhcm91dGVyLm1lZGlhLk1lZGlhUm91dGVQcm92aWRlclByb3RvY29sLlNFUlZJQ0VfVkVSU0lPTl9DVVJSRU5UOwotaW1wb3J0IHN0YXRpYyBjb20uYW5kcm9pZC5zdXBwb3J0Lm1lZGlhcm91dGVyLm1lZGlhLk1lZGlhUm91dGVQcm92aWRlclByb3RvY29sLmlzVmFsaWRSZW1vdGVNZXNzZW5nZXI7Ci0KLWltcG9ydCBhbmRyb2lkLmFwcC5TZXJ2aWNlOwotaW1wb3J0IGFuZHJvaWQuY29udGVudC5JbnRlbnQ7Ci1pbXBvcnQgYW5kcm9pZC5vcy5CdW5kbGU7Ci1pbXBvcnQgYW5kcm9pZC5vcy5EZWFkT2JqZWN0RXhjZXB0aW9uOwotaW1wb3J0IGFuZHJvaWQub3MuSGFuZGxlcjsKLWltcG9ydCBhbmRyb2lkLm9zLklCaW5kZXI7Ci1pbXBvcnQgYW5kcm9pZC5vcy5JQmluZGVyLkRlYXRoUmVjaXBpZW50OwotaW1wb3J0IGFuZHJvaWQub3MuTWVzc2FnZTsKLWltcG9ydCBhbmRyb2lkLm9zLk1lc3NlbmdlcjsKLWltcG9ydCBhbmRyb2lkLm9zLlJlbW90ZUV4Y2VwdGlvbjsKLWltcG9ydCBhbmRyb2lkLnN1cHBvcnQuYW5ub3RhdGlvbi5WaXNpYmxlRm9yVGVzdGluZzsKLWltcG9ydCBhbmRyb2lkLnN1cHBvcnQudjQudXRpbC5PYmplY3RzQ29tcGF0OwotaW1wb3J0IGFuZHJvaWQudXRpbC5Mb2c7Ci1pbXBvcnQgYW5kcm9pZC51dGlsLlNwYXJzZUFycmF5OwotCi1pbXBvcnQgamF2YS5sYW5nLnJlZi5XZWFrUmVmZXJlbmNlOwotaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7Ci0KLS8qKgotICogQmFzZSBjbGFzcyBmb3IgbWVkaWEgcm91dGUgcHJvdmlkZXIgc2VydmljZXMuCi0gKiA8cD4KLSAqIEEgbWVkaWEgcm91dGVyIHdpbGwgYmluZCB0byBtZWRpYSByb3V0ZSBwcm92aWRlciBzZXJ2aWNlcyB3aGVuIGEgY2FsbGJhY2sgaXMgYWRkZWQgdmlhCi0gKiB7QGxpbmsgTWVkaWFSb3V0ZXIjYWRkQ2FsbGJhY2soTWVkaWFSb3V0ZVNlbGVjdG9yLCBNZWRpYVJvdXRlci5DYWxsYmFjaywgaW50KX0gd2l0aCBhIGRpc2NvdmVyeQotICogZmxhZzoge0BsaW5rIE1lZGlhUm91dGVyI0NBTExCQUNLX0ZMQUdfUkVRVUVTVF9ESVNDT1ZFUll9LAotICoge0BsaW5rIE1lZGlhUm91dGVyI0NBTExCQUNLX0ZMQUdfRk9SQ0VfRElTQ09WRVJZfSwgb3IKLSAqIHtAbGluayBNZWRpYVJvdXRlciNDQUxMQkFDS19GTEFHX1BFUkZPUk1fQUNUSVZFX1NDQU59LCBhbmQgd2lsbCB1bmJpbmQgd2hlbiB0aGUgY2FsbGJhY2sKLSAqIGlzIHJlbW92ZWQgdmlhIHtAbGluayBNZWRpYVJvdXRlciNyZW1vdmVDYWxsYmFjayhNZWRpYVJvdXRlci5DYWxsYmFjayl9LgotICogPC9wPjxwPgotICogVG8gaW1wbGVtZW50IHlvdXIgb3duIG1lZGlhIHJvdXRlIHByb3ZpZGVyIHNlcnZpY2UsIGV4dGVuZCB0aGlzIGNsYXNzIGFuZAotICogb3ZlcnJpZGUgdGhlIHtAbGluayAjb25DcmVhdGVNZWRpYVJvdXRlUHJvdmlkZXJ9IG1ldGhvZCB0byByZXR1cm4gYW4KLSAqIGluc3RhbmNlIG9mIHlvdXIge0BsaW5rIE1lZGlhUm91dGVQcm92aWRlcn0uCi0gKiA8L3A+PHA+Ci0gKiBEZWNsYXJlIHlvdXIgbWVkaWEgcm91dGUgcHJvdmlkZXIgc2VydmljZSBpbiB5b3VyIGFwcGxpY2F0aW9uIG1hbmlmZXN0Ci0gKiBsaWtlIHRoaXM6Ci0gKiA8L3A+Ci0gKiA8cHJlPgotICogICAmbHQ7c2VydmljZSBhbmRyb2lkOm5hbWU9Ii5NeU1lZGlhUm91dGVQcm92aWRlclNlcnZpY2UiCi0gKiAgICAgICAgICAgYW5kcm9pZDpsYWJlbD0iQHN0cmluZy9teV9tZWRpYV9yb3V0ZV9wcm92aWRlcl9zZXJ2aWNlIj4KLSAqICAgICAgICZsdDtpbnRlbnQtZmlsdGVyPgotICogICAgICAgICAgICZsdDthY3Rpb24gYW5kcm9pZDpuYW1lPSJhbmRyb2lkLm1lZGlhLk1lZGlhUm91dGVQcm92aWRlclNlcnZpY2UiIC8+Ci0gKiAgICAgICAmbHQ7L2ludGVudC1maWx0ZXI+Ci0gKiAgICZsdDsvc2VydmljZT4KLSAqIDwvcHJlPgotICovCi1wdWJsaWMgYWJzdHJhY3QgY2xhc3MgTWVkaWFSb3V0ZVByb3ZpZGVyU2VydmljZSBleHRlbmRzIFNlcnZpY2UgewotICAgIHN0YXRpYyBmaW5hbCBTdHJpbmcgVEFHID0gIk1lZGlhUm91dGVQcm92aWRlclNydiI7IC8vIG1heC4gMjMgY2hhcnMKLSAgICBzdGF0aWMgZmluYWwgYm9vbGVhbiBERUJVRyA9IExvZy5pc0xvZ2dhYmxlKFRBRywgTG9nLkRFQlVHKTsKLQotICAgIHByaXZhdGUgZmluYWwgQXJyYXlMaXN0PENsaWVudFJlY29yZD4gbUNsaWVudHMgPSBuZXcgQXJyYXlMaXN0PENsaWVudFJlY29yZD4oKTsKLSAgICBwcml2YXRlIGZpbmFsIFJlY2VpdmVIYW5kbGVyIG1SZWNlaXZlSGFuZGxlcjsKLSAgICBwcml2YXRlIGZpbmFsIE1lc3NlbmdlciBtUmVjZWl2ZU1lc3NlbmdlcjsKLSAgICBmaW5hbCBQcml2YXRlSGFuZGxlciBtUHJpdmF0ZUhhbmRsZXI7Ci0gICAgcHJpdmF0ZSBmaW5hbCBQcm92aWRlckNhbGxiYWNrIG1Qcm92aWRlckNhbGxiYWNrOwotCi0gICAgTWVkaWFSb3V0ZVByb3ZpZGVyIG1Qcm92aWRlcjsKLSAgICBwcml2YXRlIE1lZGlhUm91dGVEaXNjb3ZlcnlSZXF1ZXN0IG1Db21wb3NpdGVEaXNjb3ZlcnlSZXF1ZXN0OwotCi0gICAgLyoqCi0gICAgICogVGhlIHtAbGluayBJbnRlbnR9IHRoYXQgbXVzdCBiZSBkZWNsYXJlZCBhcyBoYW5kbGVkIGJ5IHRoZSBzZXJ2aWNlLgotICAgICAqIFB1dCB0aGlzIGluIHlvdXIgbWFuaWZlc3QuCi0gICAgICovCi0gICAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgU0VSVklDRV9JTlRFUkZBQ0UgPSBNZWRpYVJvdXRlUHJvdmlkZXJQcm90b2NvbC5TRVJWSUNFX0lOVEVSRkFDRTsKLQotICAgIC8qCi0gICAgICogUHJpdmF0ZSBtZXNzYWdlcyB1c2VkIGludGVybmFsbHkuICAoWWVzLCB5b3UgY2FuIHJlbnVtYmVyIHRoZXNlLikKLSAgICAgKi8KLQotICAgIHN0YXRpYyBmaW5hbCBpbnQgUFJJVkFURV9NU0dfQ0xJRU5UX0RJRUQgPSAxOwotCi0gICAgLyoqCi0gICAgICogQ3JlYXRlcyBhIG1lZGlhIHJvdXRlIHByb3ZpZGVyIHNlcnZpY2UuCi0gICAgICovCi0gICAgcHVibGljIE1lZGlhUm91dGVQcm92aWRlclNlcnZpY2UoKSB7Ci0gICAgICAgIG1SZWNlaXZlSGFuZGxlciA9IG5ldyBSZWNlaXZlSGFuZGxlcih0aGlzKTsKLSAgICAgICAgbVJlY2VpdmVNZXNzZW5nZXIgPSBuZXcgTWVzc2VuZ2VyKG1SZWNlaXZlSGFuZGxlcik7Ci0gICAgICAgIG1Qcml2YXRlSGFuZGxlciA9IG5ldyBQcml2YXRlSGFuZGxlcigpOwotICAgICAgICBtUHJvdmlkZXJDYWxsYmFjayA9IG5ldyBQcm92aWRlckNhbGxiYWNrKCk7Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogQ2FsbGVkIGJ5IHRoZSBzeXN0ZW0gd2hlbiBpdCBpcyB0aW1lIHRvIGNyZWF0ZSB0aGUgbWVkaWEgcm91dGUgcHJvdmlkZXIuCi0gICAgICoKLSAgICAgKiBAcmV0dXJuIFRoZSBtZWRpYSByb3V0ZSBwcm92aWRlciBvZmZlcmVkIGJ5IHRoaXMgc2VydmljZSwgb3IgbnVsbCBpZgotICAgICAqIHRoaXMgc2VydmljZSBoYXMgZGVjaWRlZCBub3QgdG8gb2ZmZXIgYSBtZWRpYSByb3V0ZSBwcm92aWRlci4KLSAgICAgKi8KLSAgICBwdWJsaWMgYWJzdHJhY3QgTWVkaWFSb3V0ZVByb3ZpZGVyIG9uQ3JlYXRlTWVkaWFSb3V0ZVByb3ZpZGVyKCk7Ci0KLSAgICAvKioKLSAgICAgKiBHZXRzIHRoZSBtZWRpYSByb3V0ZSBwcm92aWRlciBvZmZlcmVkIGJ5IHRoaXMgc2VydmljZS4KLSAgICAgKgotICAgICAqIEByZXR1cm4gVGhlIG1lZGlhIHJvdXRlIHByb3ZpZGVyIG9mZmVyZWQgYnkgdGhpcyBzZXJ2aWNlLCBvciBudWxsIGlmCi0gICAgICogaXQgaGFzIG5vdCB5ZXQgYmVlbiBjcmVhdGVkLgotICAgICAqCi0gICAgICogQHNlZSAjb25DcmVhdGVNZWRpYVJvdXRlUHJvdmlkZXIoKQotICAgICAqLwotICAgIHB1YmxpYyBNZWRpYVJvdXRlUHJvdmlkZXIgZ2V0TWVkaWFSb3V0ZVByb3ZpZGVyKCkgewotICAgICAgICByZXR1cm4gbVByb3ZpZGVyOwotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyBJQmluZGVyIG9uQmluZChJbnRlbnQgaW50ZW50KSB7Ci0gICAgICAgIGlmIChpbnRlbnQuZ2V0QWN0aW9uKCkuZXF1YWxzKFNFUlZJQ0VfSU5URVJGQUNFKSkgewotICAgICAgICAgICAgaWYgKG1Qcm92aWRlciA9PSBudWxsKSB7Ci0gICAgICAgICAgICAgICAgTWVkaWFSb3V0ZVByb3ZpZGVyIHByb3ZpZGVyID0gb25DcmVhdGVNZWRpYVJvdXRlUHJvdmlkZXIoKTsKLSAgICAgICAgICAgICAgICBpZiAocHJvdmlkZXIgIT0gbnVsbCkgewotICAgICAgICAgICAgICAgICAgICBTdHJpbmcgcHJvdmlkZXJQYWNrYWdlID0gcHJvdmlkZXIuZ2V0TWV0YWRhdGEoKS5nZXRQYWNrYWdlTmFtZSgpOwotICAgICAgICAgICAgICAgICAgICBpZiAoIXByb3ZpZGVyUGFja2FnZS5lcXVhbHMoZ2V0UGFja2FnZU5hbWUoKSkpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBJbGxlZ2FsU3RhdGVFeGNlcHRpb24oIm9uQ3JlYXRlTWVkaWFSb3V0ZVByb3ZpZGVyKCkgcmV0dXJuZWQgIgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArICJhIHByb3ZpZGVyIHdob3NlIHBhY2thZ2UgbmFtZSBkb2VzIG5vdCBtYXRjaCB0aGUgcGFja2FnZSAiCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsgIm5hbWUgb2YgdGhlIHNlcnZpY2UuICBBIG1lZGlhIHJvdXRlIHByb3ZpZGVyIHNlcnZpY2UgY2FuICIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKyAib25seSBleHBvcnQgaXRzIG93biBtZWRpYSByb3V0ZSBwcm92aWRlcnMuICAiCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsgIlByb3ZpZGVyIHBhY2thZ2UgbmFtZTogIiArIHByb3ZpZGVyUGFja2FnZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArICIuICBTZXJ2aWNlIHBhY2thZ2UgbmFtZTogIiArIGdldFBhY2thZ2VOYW1lKCkgKyAiLiIpOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIG1Qcm92aWRlciA9IHByb3ZpZGVyOwotICAgICAgICAgICAgICAgICAgICBtUHJvdmlkZXIuc2V0Q2FsbGJhY2sobVByb3ZpZGVyQ2FsbGJhY2spOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmIChtUHJvdmlkZXIgIT0gbnVsbCkgewotICAgICAgICAgICAgICAgIHJldHVybiBtUmVjZWl2ZU1lc3Nlbmdlci5nZXRCaW5kZXIoKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICByZXR1cm4gbnVsbDsKLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgYm9vbGVhbiBvblVuYmluZChJbnRlbnQgaW50ZW50KSB7Ci0gICAgICAgIGlmIChtUHJvdmlkZXIgIT0gbnVsbCkgewotICAgICAgICAgICAgbVByb3ZpZGVyLnNldENhbGxiYWNrKG51bGwpOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiBzdXBlci5vblVuYmluZChpbnRlbnQpOwotICAgIH0KLQotICAgIGJvb2xlYW4gb25SZWdpc3RlckNsaWVudChNZXNzZW5nZXIgbWVzc2VuZ2VyLCBpbnQgcmVxdWVzdElkLCBpbnQgdmVyc2lvbikgewotICAgICAgICBpZiAodmVyc2lvbiA+PSBDTElFTlRfVkVSU0lPTl8xKSB7Ci0gICAgICAgICAgICBpbnQgaW5kZXggPSBmaW5kQ2xpZW50KG1lc3Nlbmdlcik7Ci0gICAgICAgICAgICBpZiAoaW5kZXggPCAwKSB7Ci0gICAgICAgICAgICAgICAgQ2xpZW50UmVjb3JkIGNsaWVudCA9IG5ldyBDbGllbnRSZWNvcmQobWVzc2VuZ2VyLCB2ZXJzaW9uKTsKLSAgICAgICAgICAgICAgICBpZiAoY2xpZW50LnJlZ2lzdGVyKCkpIHsKLSAgICAgICAgICAgICAgICAgICAgbUNsaWVudHMuYWRkKGNsaWVudCk7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChERUJVRykgewotICAgICAgICAgICAgICAgICAgICAgICAgTG9nLmQoVEFHLCBjbGllbnQgKyAiOiBSZWdpc3RlcmVkLCB2ZXJzaW9uPSIgKyB2ZXJzaW9uKTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICBpZiAocmVxdWVzdElkICE9IDApIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIE1lZGlhUm91dGVQcm92aWRlckRlc2NyaXB0b3IgZGVzY3JpcHRvciA9IG1Qcm92aWRlci5nZXREZXNjcmlwdG9yKCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBzZW5kUmVwbHkobWVzc2VuZ2VyLCBTRVJWSUNFX01TR19SRUdJU1RFUkVELAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXF1ZXN0SWQsIFNFUlZJQ0VfVkVSU0lPTl9DVVJSRU5ULAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjcmVhdGVEZXNjcmlwdG9yQnVuZGxlRm9yQ2xpZW50VmVyc2lvbihkZXNjcmlwdG9yLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsaWVudC5tVmVyc2lvbiksIG51bGwpOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgYm9vbGVhbiBvblVucmVnaXN0ZXJDbGllbnQoTWVzc2VuZ2VyIG1lc3NlbmdlciwgaW50IHJlcXVlc3RJZCkgewotICAgICAgICBpbnQgaW5kZXggPSBmaW5kQ2xpZW50KG1lc3Nlbmdlcik7Ci0gICAgICAgIGlmIChpbmRleCA+PSAwKSB7Ci0gICAgICAgICAgICBDbGllbnRSZWNvcmQgY2xpZW50ID0gbUNsaWVudHMucmVtb3ZlKGluZGV4KTsKLSAgICAgICAgICAgIGlmIChERUJVRykgewotICAgICAgICAgICAgICAgIExvZy5kKFRBRywgY2xpZW50ICsgIjogVW5yZWdpc3RlcmVkIik7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBjbGllbnQuZGlzcG9zZSgpOwotICAgICAgICAgICAgc2VuZEdlbmVyaWNTdWNjZXNzKG1lc3NlbmdlciwgcmVxdWVzdElkKTsKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICB2b2lkIG9uQmluZGVyRGllZChNZXNzZW5nZXIgbWVzc2VuZ2VyKSB7Ci0gICAgICAgIGludCBpbmRleCA9IGZpbmRDbGllbnQobWVzc2VuZ2VyKTsKLSAgICAgICAgaWYgKGluZGV4ID49IDApIHsKLSAgICAgICAgICAgIENsaWVudFJlY29yZCBjbGllbnQgPSBtQ2xpZW50cy5yZW1vdmUoaW5kZXgpOwotICAgICAgICAgICAgaWYgKERFQlVHKSB7Ci0gICAgICAgICAgICAgICAgTG9nLmQoVEFHLCBjbGllbnQgKyAiOiBCaW5kZXIgZGllZCIpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgY2xpZW50LmRpc3Bvc2UoKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIGJvb2xlYW4gb25DcmVhdGVSb3V0ZUNvbnRyb2xsZXIoTWVzc2VuZ2VyIG1lc3NlbmdlciwgaW50IHJlcXVlc3RJZCwKLSAgICAgICAgICAgIGludCBjb250cm9sbGVySWQsIFN0cmluZyByb3V0ZUlkLCBTdHJpbmcgcm91dGVHcm91cElkKSB7Ci0gICAgICAgIENsaWVudFJlY29yZCBjbGllbnQgPSBnZXRDbGllbnQobWVzc2VuZ2VyKTsKLSAgICAgICAgaWYgKGNsaWVudCAhPSBudWxsKSB7Ci0gICAgICAgICAgICBpZiAoY2xpZW50LmNyZWF0ZVJvdXRlQ29udHJvbGxlcihyb3V0ZUlkLCByb3V0ZUdyb3VwSWQsIGNvbnRyb2xsZXJJZCkpIHsKLSAgICAgICAgICAgICAgICBpZiAoREVCVUcpIHsKLSAgICAgICAgICAgICAgICAgICAgTG9nLmQoVEFHLCBjbGllbnQgKyAiOiBSb3V0ZSBjb250cm9sbGVyIGNyZWF0ZWQsIGNvbnRyb2xsZXJJZD0iICsgY29udHJvbGxlcklkCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgKyAiLCByb3V0ZUlkPSIgKyByb3V0ZUlkICsgIiwgcm91dGVHcm91cElkPSIgKyByb3V0ZUdyb3VwSWQpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBzZW5kR2VuZXJpY1N1Y2Nlc3MobWVzc2VuZ2VyLCByZXF1ZXN0SWQpOwotICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICBib29sZWFuIG9uUmVsZWFzZVJvdXRlQ29udHJvbGxlcihNZXNzZW5nZXIgbWVzc2VuZ2VyLCBpbnQgcmVxdWVzdElkLAotICAgICAgICAgICAgaW50IGNvbnRyb2xsZXJJZCkgewotICAgICAgICBDbGllbnRSZWNvcmQgY2xpZW50ID0gZ2V0Q2xpZW50KG1lc3Nlbmdlcik7Ci0gICAgICAgIGlmIChjbGllbnQgIT0gbnVsbCkgewotICAgICAgICAgICAgaWYgKGNsaWVudC5yZWxlYXNlUm91dGVDb250cm9sbGVyKGNvbnRyb2xsZXJJZCkpIHsKLSAgICAgICAgICAgICAgICBpZiAoREVCVUcpIHsKLSAgICAgICAgICAgICAgICAgICAgTG9nLmQoVEFHLCBjbGllbnQgKyAiOiBSb3V0ZSBjb250cm9sbGVyIHJlbGVhc2VkIgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICsgIiwgY29udHJvbGxlcklkPSIgKyBjb250cm9sbGVySWQpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBzZW5kR2VuZXJpY1N1Y2Nlc3MobWVzc2VuZ2VyLCByZXF1ZXN0SWQpOwotICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICBib29sZWFuIG9uU2VsZWN0Um91dGUoTWVzc2VuZ2VyIG1lc3NlbmdlciwgaW50IHJlcXVlc3RJZCwKLSAgICAgICAgICAgIGludCBjb250cm9sbGVySWQpIHsKLSAgICAgICAgQ2xpZW50UmVjb3JkIGNsaWVudCA9IGdldENsaWVudChtZXNzZW5nZXIpOwotICAgICAgICBpZiAoY2xpZW50ICE9IG51bGwpIHsKLSAgICAgICAgICAgIE1lZGlhUm91dGVQcm92aWRlci5Sb3V0ZUNvbnRyb2xsZXIgY29udHJvbGxlciA9Ci0gICAgICAgICAgICAgICAgICAgIGNsaWVudC5nZXRSb3V0ZUNvbnRyb2xsZXIoY29udHJvbGxlcklkKTsKLSAgICAgICAgICAgIGlmIChjb250cm9sbGVyICE9IG51bGwpIHsKLSAgICAgICAgICAgICAgICBjb250cm9sbGVyLm9uU2VsZWN0KCk7Ci0gICAgICAgICAgICAgICAgaWYgKERFQlVHKSB7Ci0gICAgICAgICAgICAgICAgICAgIExvZy5kKFRBRywgY2xpZW50ICsgIjogUm91dGUgc2VsZWN0ZWQiCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgKyAiLCBjb250cm9sbGVySWQ9IiArIGNvbnRyb2xsZXJJZCk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIHNlbmRHZW5lcmljU3VjY2VzcyhtZXNzZW5nZXIsIHJlcXVlc3RJZCk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIGJvb2xlYW4gb25VbnNlbGVjdFJvdXRlKE1lc3NlbmdlciBtZXNzZW5nZXIsIGludCByZXF1ZXN0SWQsCi0gICAgICAgICAgICBpbnQgY29udHJvbGxlcklkLCBpbnQgcmVhc29uKSB7Ci0gICAgICAgIENsaWVudFJlY29yZCBjbGllbnQgPSBnZXRDbGllbnQobWVzc2VuZ2VyKTsKLSAgICAgICAgaWYgKGNsaWVudCAhPSBudWxsKSB7Ci0gICAgICAgICAgICBNZWRpYVJvdXRlUHJvdmlkZXIuUm91dGVDb250cm9sbGVyIGNvbnRyb2xsZXIgPQotICAgICAgICAgICAgICAgICAgICBjbGllbnQuZ2V0Um91dGVDb250cm9sbGVyKGNvbnRyb2xsZXJJZCk7Ci0gICAgICAgICAgICBpZiAoY29udHJvbGxlciAhPSBudWxsKSB7Ci0gICAgICAgICAgICAgICAgY29udHJvbGxlci5vblVuc2VsZWN0KHJlYXNvbik7Ci0gICAgICAgICAgICAgICAgaWYgKERFQlVHKSB7Ci0gICAgICAgICAgICAgICAgICAgIExvZy5kKFRBRywgY2xpZW50ICsgIjogUm91dGUgdW5zZWxlY3RlZCIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICArICIsIGNvbnRyb2xsZXJJZD0iICsgY29udHJvbGxlcklkKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgc2VuZEdlbmVyaWNTdWNjZXNzKG1lc3NlbmdlciwgcmVxdWVzdElkKTsKLSAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgYm9vbGVhbiBvblNldFJvdXRlVm9sdW1lKE1lc3NlbmdlciBtZXNzZW5nZXIsIGludCByZXF1ZXN0SWQsCi0gICAgICAgICAgICBpbnQgY29udHJvbGxlcklkLCBpbnQgdm9sdW1lKSB7Ci0gICAgICAgIENsaWVudFJlY29yZCBjbGllbnQgPSBnZXRDbGllbnQobWVzc2VuZ2VyKTsKLSAgICAgICAgaWYgKGNsaWVudCAhPSBudWxsKSB7Ci0gICAgICAgICAgICBNZWRpYVJvdXRlUHJvdmlkZXIuUm91dGVDb250cm9sbGVyIGNvbnRyb2xsZXIgPQotICAgICAgICAgICAgICAgICAgICBjbGllbnQuZ2V0Um91dGVDb250cm9sbGVyKGNvbnRyb2xsZXJJZCk7Ci0gICAgICAgICAgICBpZiAoY29udHJvbGxlciAhPSBudWxsKSB7Ci0gICAgICAgICAgICAgICAgY29udHJvbGxlci5vblNldFZvbHVtZSh2b2x1bWUpOwotICAgICAgICAgICAgICAgIGlmIChERUJVRykgewotICAgICAgICAgICAgICAgICAgICBMb2cuZChUQUcsIGNsaWVudCArICI6IFJvdXRlIHZvbHVtZSBjaGFuZ2VkIgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICsgIiwgY29udHJvbGxlcklkPSIgKyBjb250cm9sbGVySWQgKyAiLCB2b2x1bWU9IiArIHZvbHVtZSk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIHNlbmRHZW5lcmljU3VjY2VzcyhtZXNzZW5nZXIsIHJlcXVlc3RJZCk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIGJvb2xlYW4gb25VcGRhdGVSb3V0ZVZvbHVtZShNZXNzZW5nZXIgbWVzc2VuZ2VyLCBpbnQgcmVxdWVzdElkLAotICAgICAgICAgICAgaW50IGNvbnRyb2xsZXJJZCwgaW50IGRlbHRhKSB7Ci0gICAgICAgIENsaWVudFJlY29yZCBjbGllbnQgPSBnZXRDbGllbnQobWVzc2VuZ2VyKTsKLSAgICAgICAgaWYgKGNsaWVudCAhPSBudWxsKSB7Ci0gICAgICAgICAgICBNZWRpYVJvdXRlUHJvdmlkZXIuUm91dGVDb250cm9sbGVyIGNvbnRyb2xsZXIgPQotICAgICAgICAgICAgICAgICAgICBjbGllbnQuZ2V0Um91dGVDb250cm9sbGVyKGNvbnRyb2xsZXJJZCk7Ci0gICAgICAgICAgICBpZiAoY29udHJvbGxlciAhPSBudWxsKSB7Ci0gICAgICAgICAgICAgICAgY29udHJvbGxlci5vblVwZGF0ZVZvbHVtZShkZWx0YSk7Ci0gICAgICAgICAgICAgICAgaWYgKERFQlVHKSB7Ci0gICAgICAgICAgICAgICAgICAgIExvZy5kKFRBRywgY2xpZW50ICsgIjogUm91dGUgdm9sdW1lIHVwZGF0ZWQiCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgKyAiLCBjb250cm9sbGVySWQ9IiArIGNvbnRyb2xsZXJJZCArICIsIGRlbHRhPSIgKyBkZWx0YSk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIHNlbmRHZW5lcmljU3VjY2VzcyhtZXNzZW5nZXIsIHJlcXVlc3RJZCk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIGJvb2xlYW4gb25Sb3V0ZUNvbnRyb2xSZXF1ZXN0KGZpbmFsIE1lc3NlbmdlciBtZXNzZW5nZXIsIGZpbmFsIGludCByZXF1ZXN0SWQsCi0gICAgICAgICAgICBmaW5hbCBpbnQgY29udHJvbGxlcklkLCBmaW5hbCBJbnRlbnQgaW50ZW50KSB7Ci0gICAgICAgIGZpbmFsIENsaWVudFJlY29yZCBjbGllbnQgPSBnZXRDbGllbnQobWVzc2VuZ2VyKTsKLSAgICAgICAgaWYgKGNsaWVudCAhPSBudWxsKSB7Ci0gICAgICAgICAgICBNZWRpYVJvdXRlUHJvdmlkZXIuUm91dGVDb250cm9sbGVyIGNvbnRyb2xsZXIgPQotICAgICAgICAgICAgICAgICAgICBjbGllbnQuZ2V0Um91dGVDb250cm9sbGVyKGNvbnRyb2xsZXJJZCk7Ci0gICAgICAgICAgICBpZiAoY29udHJvbGxlciAhPSBudWxsKSB7Ci0gICAgICAgICAgICAgICAgTWVkaWFSb3V0ZXIuQ29udHJvbFJlcXVlc3RDYWxsYmFjayBjYWxsYmFjayA9IG51bGw7Ci0gICAgICAgICAgICAgICAgaWYgKHJlcXVlc3RJZCAhPSAwKSB7Ci0gICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrID0gbmV3IE1lZGlhUm91dGVyLkNvbnRyb2xSZXF1ZXN0Q2FsbGJhY2soKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgICAgICAgICAgICAgICAgIHB1YmxpYyB2b2lkIG9uUmVzdWx0KEJ1bmRsZSBkYXRhKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKERFQlVHKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExvZy5kKFRBRywgY2xpZW50ICsgIjogUm91dGUgY29udHJvbCByZXF1ZXN0IHN1Y2NlZWRlZCIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArICIsIGNvbnRyb2xsZXJJZD0iICsgY29udHJvbGxlcklkCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKyAiLCBpbnRlbnQ9IiArIGludGVudAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsgIiwgZGF0YT0iICsgZGF0YSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChmaW5kQ2xpZW50KG1lc3NlbmdlcikgPj0gMCkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZW5kUmVwbHkobWVzc2VuZ2VyLCBTRVJWSUNFX01TR19DT05UUk9MX1JFUVVFU1RfU1VDQ0VFREVELAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlcXVlc3RJZCwgMCwgZGF0YSwgbnVsbCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgICAgICAgICAgICAgICAgIHB1YmxpYyB2b2lkIG9uRXJyb3IoU3RyaW5nIGVycm9yLCBCdW5kbGUgZGF0YSkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChERUJVRykgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMb2cuZChUQUcsIGNsaWVudCArICI6IFJvdXRlIGNvbnRyb2wgcmVxdWVzdCBmYWlsZWQiCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKyAiLCBjb250cm9sbGVySWQ9IiArIGNvbnRyb2xsZXJJZAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsgIiwgaW50ZW50PSIgKyBpbnRlbnQKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArICIsIGVycm9yPSIgKyBlcnJvciArICIsIGRhdGE9IiArIGRhdGEpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZmluZENsaWVudChtZXNzZW5nZXIpID49IDApIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGVycm9yICE9IG51bGwpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJ1bmRsZSBidW5kbGUgPSBuZXcgQnVuZGxlKCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBidW5kbGUucHV0U3RyaW5nKFNFUlZJQ0VfREFUQV9FUlJPUiwgZXJyb3IpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VuZFJlcGx5KG1lc3NlbmdlciwgU0VSVklDRV9NU0dfQ09OVFJPTF9SRVFVRVNUX0ZBSUxFRCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVxdWVzdElkLCAwLCBkYXRhLCBidW5kbGUpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VuZFJlcGx5KG1lc3NlbmdlciwgU0VSVklDRV9NU0dfQ09OVFJPTF9SRVFVRVNUX0ZBSUxFRCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVxdWVzdElkLCAwLCBkYXRhLCBudWxsKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgfTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgaWYgKGNvbnRyb2xsZXIub25Db250cm9sUmVxdWVzdChpbnRlbnQsIGNhbGxiYWNrKSkgewotICAgICAgICAgICAgICAgICAgICBpZiAoREVCVUcpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIExvZy5kKFRBRywgY2xpZW50ICsgIjogUm91dGUgY29udHJvbCByZXF1ZXN0IGRlbGl2ZXJlZCIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKyAiLCBjb250cm9sbGVySWQ9IiArIGNvbnRyb2xsZXJJZCArICIsIGludGVudD0iICsgaW50ZW50KTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIGJvb2xlYW4gb25TZXREaXNjb3ZlcnlSZXF1ZXN0KE1lc3NlbmdlciBtZXNzZW5nZXIsIGludCByZXF1ZXN0SWQsCi0gICAgICAgICAgICBNZWRpYVJvdXRlRGlzY292ZXJ5UmVxdWVzdCByZXF1ZXN0KSB7Ci0gICAgICAgIENsaWVudFJlY29yZCBjbGllbnQgPSBnZXRDbGllbnQobWVzc2VuZ2VyKTsKLSAgICAgICAgaWYgKGNsaWVudCAhPSBudWxsKSB7Ci0gICAgICAgICAgICBib29sZWFuIGFjdHVhbGx5Q2hhbmdlZCA9IGNsaWVudC5zZXREaXNjb3ZlcnlSZXF1ZXN0KHJlcXVlc3QpOwotICAgICAgICAgICAgaWYgKERFQlVHKSB7Ci0gICAgICAgICAgICAgICAgTG9nLmQoVEFHLCBjbGllbnQgKyAiOiBTZXQgZGlzY292ZXJ5IHJlcXVlc3QsIHJlcXVlc3Q9IiArIHJlcXVlc3QKLSAgICAgICAgICAgICAgICAgICAgICAgICsgIiwgYWN0dWFsbHlDaGFuZ2VkPSIgKyBhY3R1YWxseUNoYW5nZWQKLSAgICAgICAgICAgICAgICAgICAgICAgICsgIiwgY29tcG9zaXRlRGlzY292ZXJ5UmVxdWVzdD0iICsgbUNvbXBvc2l0ZURpc2NvdmVyeVJlcXVlc3QpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgc2VuZEdlbmVyaWNTdWNjZXNzKG1lc3NlbmdlciwgcmVxdWVzdElkKTsKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICB2b2lkIHNlbmREZXNjcmlwdG9yQ2hhbmdlZChNZWRpYVJvdXRlUHJvdmlkZXJEZXNjcmlwdG9yIGRlc2NyaXB0b3IpIHsKLSAgICAgICAgZmluYWwgaW50IGNvdW50ID0gbUNsaWVudHMuc2l6ZSgpOwotICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGNvdW50OyBpKyspIHsKLSAgICAgICAgICAgIENsaWVudFJlY29yZCBjbGllbnQgPSBtQ2xpZW50cy5nZXQoaSk7Ci0gICAgICAgICAgICBzZW5kUmVwbHkoY2xpZW50Lm1NZXNzZW5nZXIsIFNFUlZJQ0VfTVNHX0RFU0NSSVBUT1JfQ0hBTkdFRCwgMCwgMCwKLSAgICAgICAgICAgICAgICAgICAgY3JlYXRlRGVzY3JpcHRvckJ1bmRsZUZvckNsaWVudFZlcnNpb24oZGVzY3JpcHRvciwgY2xpZW50Lm1WZXJzaW9uKSwgbnVsbCk7Ci0gICAgICAgICAgICBpZiAoREVCVUcpIHsKLSAgICAgICAgICAgICAgICBMb2cuZChUQUcsIGNsaWVudCArICI6IFNlbnQgZGVzY3JpcHRvciBjaGFuZ2UgZXZlbnQsIGRlc2NyaXB0b3I9IiArIGRlc2NyaXB0b3IpOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotCi0gICAgQFZpc2libGVGb3JUZXN0aW5nCi0gICAgc3RhdGljIEJ1bmRsZSBjcmVhdGVEZXNjcmlwdG9yQnVuZGxlRm9yQ2xpZW50VmVyc2lvbihNZWRpYVJvdXRlUHJvdmlkZXJEZXNjcmlwdG9yIGRlc2NyaXB0b3IsCi0gICAgICAgICAgICBpbnQgY2xpZW50VmVyc2lvbikgewotICAgICAgICBpZiAoZGVzY3JpcHRvciA9PSBudWxsKSB7Ci0gICAgICAgICAgICByZXR1cm4gbnVsbDsKLSAgICAgICAgfQotICAgICAgICBNZWRpYVJvdXRlUHJvdmlkZXJEZXNjcmlwdG9yLkJ1aWxkZXIgYnVpbGRlciA9Ci0gICAgICAgICAgICAgICAgbmV3IE1lZGlhUm91dGVQcm92aWRlckRlc2NyaXB0b3IuQnVpbGRlcihkZXNjcmlwdG9yKTsKLSAgICAgICAgYnVpbGRlci5zZXRSb3V0ZXMobnVsbCk7Ci0gICAgICAgIGZvciAoTWVkaWFSb3V0ZURlc2NyaXB0b3Igcm91dGUgOiBkZXNjcmlwdG9yLmdldFJvdXRlcygpKSB7Ci0gICAgICAgICAgICBpZiAoY2xpZW50VmVyc2lvbiA+PSByb3V0ZS5nZXRNaW5DbGllbnRWZXJzaW9uKCkKLSAgICAgICAgICAgICAgICAgICAgJiYgY2xpZW50VmVyc2lvbiA8PSByb3V0ZS5nZXRNYXhDbGllbnRWZXJzaW9uKCkpIHsKLSAgICAgICAgICAgICAgICBidWlsZGVyLmFkZFJvdXRlKHJvdXRlKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICByZXR1cm4gYnVpbGRlci5idWlsZCgpLmFzQnVuZGxlKCk7Ci0gICAgfQotCi0gICAgYm9vbGVhbiB1cGRhdGVDb21wb3NpdGVEaXNjb3ZlcnlSZXF1ZXN0KCkgewotICAgICAgICBNZWRpYVJvdXRlRGlzY292ZXJ5UmVxdWVzdCBjb21wb3NpdGUgPSBudWxsOwotICAgICAgICBNZWRpYVJvdXRlU2VsZWN0b3IuQnVpbGRlciBzZWxlY3RvckJ1aWxkZXIgPSBudWxsOwotICAgICAgICBib29sZWFuIGFjdGl2ZVNjYW4gPSBmYWxzZTsKLSAgICAgICAgZmluYWwgaW50IGNvdW50ID0gbUNsaWVudHMuc2l6ZSgpOwotICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGNvdW50OyBpKyspIHsKLSAgICAgICAgICAgIE1lZGlhUm91dGVEaXNjb3ZlcnlSZXF1ZXN0IHJlcXVlc3QgPSBtQ2xpZW50cy5nZXQoaSkubURpc2NvdmVyeVJlcXVlc3Q7Ci0gICAgICAgICAgICBpZiAocmVxdWVzdCAhPSBudWxsCi0gICAgICAgICAgICAgICAgICAgICYmICghcmVxdWVzdC5nZXRTZWxlY3RvcigpLmlzRW1wdHkoKSB8fCByZXF1ZXN0LmlzQWN0aXZlU2NhbigpKSkgewotICAgICAgICAgICAgICAgIGFjdGl2ZVNjYW4gfD0gcmVxdWVzdC5pc0FjdGl2ZVNjYW4oKTsKLSAgICAgICAgICAgICAgICBpZiAoY29tcG9zaXRlID09IG51bGwpIHsKLSAgICAgICAgICAgICAgICAgICAgY29tcG9zaXRlID0gcmVxdWVzdDsKLSAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICBpZiAoc2VsZWN0b3JCdWlsZGVyID09IG51bGwpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHNlbGVjdG9yQnVpbGRlciA9IG5ldyBNZWRpYVJvdXRlU2VsZWN0b3IuQnVpbGRlcihjb21wb3NpdGUuZ2V0U2VsZWN0b3IoKSk7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgc2VsZWN0b3JCdWlsZGVyLmFkZFNlbGVjdG9yKHJlcXVlc3QuZ2V0U2VsZWN0b3IoKSk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIGlmIChzZWxlY3RvckJ1aWxkZXIgIT0gbnVsbCkgewotICAgICAgICAgICAgY29tcG9zaXRlID0gbmV3IE1lZGlhUm91dGVEaXNjb3ZlcnlSZXF1ZXN0KHNlbGVjdG9yQnVpbGRlci5idWlsZCgpLCBhY3RpdmVTY2FuKTsKLSAgICAgICAgfQotICAgICAgICBpZiAoIU9iamVjdHNDb21wYXQuZXF1YWxzKG1Db21wb3NpdGVEaXNjb3ZlcnlSZXF1ZXN0LCBjb21wb3NpdGUpKSB7Ci0gICAgICAgICAgICBtQ29tcG9zaXRlRGlzY292ZXJ5UmVxdWVzdCA9IGNvbXBvc2l0ZTsKLSAgICAgICAgICAgIG1Qcm92aWRlci5zZXREaXNjb3ZlcnlSZXF1ZXN0KGNvbXBvc2l0ZSk7Ci0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgcHJpdmF0ZSBDbGllbnRSZWNvcmQgZ2V0Q2xpZW50KE1lc3NlbmdlciBtZXNzZW5nZXIpIHsKLSAgICAgICAgaW50IGluZGV4ID0gZmluZENsaWVudChtZXNzZW5nZXIpOwotICAgICAgICByZXR1cm4gaW5kZXggPj0gMCA/IG1DbGllbnRzLmdldChpbmRleCkgOiBudWxsOwotICAgIH0KLQotICAgIGludCBmaW5kQ2xpZW50KE1lc3NlbmdlciBtZXNzZW5nZXIpIHsKLSAgICAgICAgZmluYWwgaW50IGNvdW50ID0gbUNsaWVudHMuc2l6ZSgpOwotICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGNvdW50OyBpKyspIHsKLSAgICAgICAgICAgIENsaWVudFJlY29yZCBjbGllbnQgPSBtQ2xpZW50cy5nZXQoaSk7Ci0gICAgICAgICAgICBpZiAoY2xpZW50Lmhhc01lc3NlbmdlcihtZXNzZW5nZXIpKSB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIC0xOwotICAgIH0KLQotICAgIHN0YXRpYyB2b2lkIHNlbmRHZW5lcmljRmFpbHVyZShNZXNzZW5nZXIgbWVzc2VuZ2VyLCBpbnQgcmVxdWVzdElkKSB7Ci0gICAgICAgIGlmIChyZXF1ZXN0SWQgIT0gMCkgewotICAgICAgICAgICAgc2VuZFJlcGx5KG1lc3NlbmdlciwgU0VSVklDRV9NU0dfR0VORVJJQ19GQUlMVVJFLCByZXF1ZXN0SWQsIDAsIG51bGwsIG51bGwpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgcHJpdmF0ZSBzdGF0aWMgdm9pZCBzZW5kR2VuZXJpY1N1Y2Nlc3MoTWVzc2VuZ2VyIG1lc3NlbmdlciwgaW50IHJlcXVlc3RJZCkgewotICAgICAgICBpZiAocmVxdWVzdElkICE9IDApIHsKLSAgICAgICAgICAgIHNlbmRSZXBseShtZXNzZW5nZXIsIFNFUlZJQ0VfTVNHX0dFTkVSSUNfU1VDQ0VTUywgcmVxdWVzdElkLCAwLCBudWxsLCBudWxsKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIHN0YXRpYyB2b2lkIHNlbmRSZXBseShNZXNzZW5nZXIgbWVzc2VuZ2VyLCBpbnQgd2hhdCwKLSAgICAgICAgICAgIGludCByZXF1ZXN0SWQsIGludCBhcmcsIE9iamVjdCBvYmosIEJ1bmRsZSBkYXRhKSB7Ci0gICAgICAgIE1lc3NhZ2UgbXNnID0gTWVzc2FnZS5vYnRhaW4oKTsKLSAgICAgICAgbXNnLndoYXQgPSB3aGF0OwotICAgICAgICBtc2cuYXJnMSA9IHJlcXVlc3RJZDsKLSAgICAgICAgbXNnLmFyZzIgPSBhcmc7Ci0gICAgICAgIG1zZy5vYmogPSBvYmo7Ci0gICAgICAgIG1zZy5zZXREYXRhKGRhdGEpOwotICAgICAgICB0cnkgewotICAgICAgICAgICAgbWVzc2VuZ2VyLnNlbmQobXNnKTsKLSAgICAgICAgfSBjYXRjaCAoRGVhZE9iamVjdEV4Y2VwdGlvbiBleCkgewotICAgICAgICAgICAgLy8gVGhlIGNsaWVudCBkaWVkLgotICAgICAgICB9IGNhdGNoIChSZW1vdGVFeGNlcHRpb24gZXgpIHsKLSAgICAgICAgICAgIExvZy5lKFRBRywgIkNvdWxkIG5vdCBzZW5kIG1lc3NhZ2UgdG8gIiArIGdldENsaWVudElkKG1lc3NlbmdlciksIGV4KTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIHN0YXRpYyBTdHJpbmcgZ2V0Q2xpZW50SWQoTWVzc2VuZ2VyIG1lc3NlbmdlcikgewotICAgICAgICByZXR1cm4gIkNsaWVudCBjb25uZWN0aW9uICIgKyBtZXNzZW5nZXIuZ2V0QmluZGVyKCkudG9TdHJpbmcoKTsKLSAgICB9Ci0KLSAgICBwcml2YXRlIGZpbmFsIGNsYXNzIFByaXZhdGVIYW5kbGVyIGV4dGVuZHMgSGFuZGxlciB7Ci0gICAgICAgIFByaXZhdGVIYW5kbGVyKCkgewotICAgICAgICB9Ci0KLSAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgIHB1YmxpYyB2b2lkIGhhbmRsZU1lc3NhZ2UoTWVzc2FnZSBtc2cpIHsKLSAgICAgICAgICAgIHN3aXRjaCAobXNnLndoYXQpIHsKLSAgICAgICAgICAgICAgICBjYXNlIFBSSVZBVEVfTVNHX0NMSUVOVF9ESUVEOgotICAgICAgICAgICAgICAgICAgICBvbkJpbmRlckRpZWQoKE1lc3Nlbmdlciltc2cub2JqKTsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBwcml2YXRlIGZpbmFsIGNsYXNzIFByb3ZpZGVyQ2FsbGJhY2sgZXh0ZW5kcyBNZWRpYVJvdXRlUHJvdmlkZXIuQ2FsbGJhY2sgewotICAgICAgICBQcm92aWRlckNhbGxiYWNrKCkgewotICAgICAgICB9Ci0KLSAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgIHB1YmxpYyB2b2lkIG9uRGVzY3JpcHRvckNoYW5nZWQoTWVkaWFSb3V0ZVByb3ZpZGVyIHByb3ZpZGVyLAotICAgICAgICAgICAgICAgIE1lZGlhUm91dGVQcm92aWRlckRlc2NyaXB0b3IgZGVzY3JpcHRvcikgewotICAgICAgICAgICAgc2VuZERlc2NyaXB0b3JDaGFuZ2VkKGRlc2NyaXB0b3IpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgcHJpdmF0ZSBmaW5hbCBjbGFzcyBDbGllbnRSZWNvcmQgaW1wbGVtZW50cyBEZWF0aFJlY2lwaWVudCB7Ci0gICAgICAgIHB1YmxpYyBmaW5hbCBNZXNzZW5nZXIgbU1lc3NlbmdlcjsKLSAgICAgICAgcHVibGljIGZpbmFsIGludCBtVmVyc2lvbjsKLSAgICAgICAgcHVibGljIE1lZGlhUm91dGVEaXNjb3ZlcnlSZXF1ZXN0IG1EaXNjb3ZlcnlSZXF1ZXN0OwotCi0gICAgICAgIHByaXZhdGUgZmluYWwgU3BhcnNlQXJyYXk8TWVkaWFSb3V0ZVByb3ZpZGVyLlJvdXRlQ29udHJvbGxlcj4gbUNvbnRyb2xsZXJzID0KLSAgICAgICAgICAgICAgICBuZXcgU3BhcnNlQXJyYXk8TWVkaWFSb3V0ZVByb3ZpZGVyLlJvdXRlQ29udHJvbGxlcj4oKTsKLQotICAgICAgICBwdWJsaWMgQ2xpZW50UmVjb3JkKE1lc3NlbmdlciBtZXNzZW5nZXIsIGludCB2ZXJzaW9uKSB7Ci0gICAgICAgICAgICBtTWVzc2VuZ2VyID0gbWVzc2VuZ2VyOwotICAgICAgICAgICAgbVZlcnNpb24gPSB2ZXJzaW9uOwotICAgICAgICB9Ci0KLSAgICAgICAgcHVibGljIGJvb2xlYW4gcmVnaXN0ZXIoKSB7Ci0gICAgICAgICAgICB0cnkgewotICAgICAgICAgICAgICAgIG1NZXNzZW5nZXIuZ2V0QmluZGVyKCkubGlua1RvRGVhdGgodGhpcywgMCk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgICAgICB9IGNhdGNoIChSZW1vdGVFeGNlcHRpb24gZXgpIHsKLSAgICAgICAgICAgICAgICBiaW5kZXJEaWVkKCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0KLQotICAgICAgICBwdWJsaWMgdm9pZCBkaXNwb3NlKCkgewotICAgICAgICAgICAgaW50IGNvdW50ID0gbUNvbnRyb2xsZXJzLnNpemUoKTsKLSAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgY291bnQ7IGkrKykgewotICAgICAgICAgICAgICAgIG1Db250cm9sbGVycy52YWx1ZUF0KGkpLm9uUmVsZWFzZSgpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgbUNvbnRyb2xsZXJzLmNsZWFyKCk7Ci0KLSAgICAgICAgICAgIG1NZXNzZW5nZXIuZ2V0QmluZGVyKCkudW5saW5rVG9EZWF0aCh0aGlzLCAwKTsKLQotICAgICAgICAgICAgc2V0RGlzY292ZXJ5UmVxdWVzdChudWxsKTsKLSAgICAgICAgfQotCi0gICAgICAgIHB1YmxpYyBib29sZWFuIGhhc01lc3NlbmdlcihNZXNzZW5nZXIgb3RoZXIpIHsKLSAgICAgICAgICAgIHJldHVybiBtTWVzc2VuZ2VyLmdldEJpbmRlcigpID09IG90aGVyLmdldEJpbmRlcigpOwotICAgICAgICB9Ci0KLSAgICAgICAgcHVibGljIGJvb2xlYW4gY3JlYXRlUm91dGVDb250cm9sbGVyKFN0cmluZyByb3V0ZUlkLCBTdHJpbmcgcm91dGVHcm91cElkLAotICAgICAgICAgICAgICAgIGludCBjb250cm9sbGVySWQpIHsKLSAgICAgICAgICAgIGlmIChtQ29udHJvbGxlcnMuaW5kZXhPZktleShjb250cm9sbGVySWQpIDwgMCkgewotICAgICAgICAgICAgICAgIE1lZGlhUm91dGVQcm92aWRlci5Sb3V0ZUNvbnRyb2xsZXIgY29udHJvbGxlciA9IHJvdXRlR3JvdXBJZCA9PSBudWxsCi0gICAgICAgICAgICAgICAgICAgICAgICA/IG1Qcm92aWRlci5vbkNyZWF0ZVJvdXRlQ29udHJvbGxlcihyb3V0ZUlkKQotICAgICAgICAgICAgICAgICAgICAgICAgOiBtUHJvdmlkZXIub25DcmVhdGVSb3V0ZUNvbnRyb2xsZXIocm91dGVJZCwgcm91dGVHcm91cElkKTsKLSAgICAgICAgICAgICAgICBpZiAoY29udHJvbGxlciAhPSBudWxsKSB7Ci0gICAgICAgICAgICAgICAgICAgIG1Db250cm9sbGVycy5wdXQoY29udHJvbGxlcklkLCBjb250cm9sbGVyKTsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9Ci0KLSAgICAgICAgcHVibGljIGJvb2xlYW4gcmVsZWFzZVJvdXRlQ29udHJvbGxlcihpbnQgY29udHJvbGxlcklkKSB7Ci0gICAgICAgICAgICBNZWRpYVJvdXRlUHJvdmlkZXIuUm91dGVDb250cm9sbGVyIGNvbnRyb2xsZXIgPSBtQ29udHJvbGxlcnMuZ2V0KGNvbnRyb2xsZXJJZCk7Ci0gICAgICAgICAgICBpZiAoY29udHJvbGxlciAhPSBudWxsKSB7Ci0gICAgICAgICAgICAgICAgbUNvbnRyb2xsZXJzLnJlbW92ZShjb250cm9sbGVySWQpOwotICAgICAgICAgICAgICAgIGNvbnRyb2xsZXIub25SZWxlYXNlKCk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0KLQotICAgICAgICBwdWJsaWMgTWVkaWFSb3V0ZVByb3ZpZGVyLlJvdXRlQ29udHJvbGxlciBnZXRSb3V0ZUNvbnRyb2xsZXIoaW50IGNvbnRyb2xsZXJJZCkgewotICAgICAgICAgICAgcmV0dXJuIG1Db250cm9sbGVycy5nZXQoY29udHJvbGxlcklkKTsKLSAgICAgICAgfQotCi0gICAgICAgIHB1YmxpYyBib29sZWFuIHNldERpc2NvdmVyeVJlcXVlc3QoTWVkaWFSb3V0ZURpc2NvdmVyeVJlcXVlc3QgcmVxdWVzdCkgewotICAgICAgICAgICAgaWYgKCFPYmplY3RzQ29tcGF0LmVxdWFscyhtRGlzY292ZXJ5UmVxdWVzdCwgcmVxdWVzdCkpIHsKLSAgICAgICAgICAgICAgICBtRGlzY292ZXJ5UmVxdWVzdCA9IHJlcXVlc3Q7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHVwZGF0ZUNvbXBvc2l0ZURpc2NvdmVyeVJlcXVlc3QoKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgfQotCi0gICAgICAgIC8vIFJ1bnMgb24gYSBiaW5kZXIgdGhyZWFkLgotICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgcHVibGljIHZvaWQgYmluZGVyRGllZCgpIHsKLSAgICAgICAgICAgIG1Qcml2YXRlSGFuZGxlci5vYnRhaW5NZXNzYWdlKFBSSVZBVEVfTVNHX0NMSUVOVF9ESUVELCBtTWVzc2VuZ2VyKS5zZW5kVG9UYXJnZXQoKTsKLSAgICAgICAgfQotCi0gICAgICAgIEBPdmVycmlkZQotICAgICAgICBwdWJsaWMgU3RyaW5nIHRvU3RyaW5nKCkgewotICAgICAgICAgICAgcmV0dXJuIGdldENsaWVudElkKG1NZXNzZW5nZXIpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogSGFuZGxlciB0aGF0IHJlY2VpdmVzIG1lc3NhZ2VzIGZyb20gY2xpZW50cy4KLSAgICAgKiA8cD4KLSAgICAgKiBUaGlzIGlubmVyIGNsYXNzIGlzIHN0YXRpYyBhbmQgb25seSByZXRhaW5zIGEgd2VhayByZWZlcmVuY2UgdG8gdGhlIHNlcnZpY2UKLSAgICAgKiB0byBwcmV2ZW50IHRoZSBzZXJ2aWNlIGZyb20gYmVpbmcgbGVha2VkIGluIGNhc2Ugb25lIG9mIHRoZSBjbGllbnRzIGlzIGhvbGRpbmcgYW4KLSAgICAgKiBhY3RpdmUgcmVmZXJlbmNlIHRvIHRoZSBzZXJ2ZXIncyBtZXNzZW5nZXIuCi0gICAgICogPC9wPjxwPgotICAgICAqIFRoaXMgaGFuZGxlciBzaG91bGQgbm90IGJlIHVzZWQgdG8gaGFuZGxlIGFueSBtZXNzYWdlcyBvdGhlciB0aGFuIHRob3NlCi0gICAgICogdGhhdCBjb21lIGZyb20gdGhlIGNsaWVudC4KLSAgICAgKiA8L3A+Ci0gICAgICovCi0gICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgY2xhc3MgUmVjZWl2ZUhhbmRsZXIgZXh0ZW5kcyBIYW5kbGVyIHsKLSAgICAgICAgcHJpdmF0ZSBmaW5hbCBXZWFrUmVmZXJlbmNlPE1lZGlhUm91dGVQcm92aWRlclNlcnZpY2U+IG1TZXJ2aWNlUmVmOwotCi0gICAgICAgIHB1YmxpYyBSZWNlaXZlSGFuZGxlcihNZWRpYVJvdXRlUHJvdmlkZXJTZXJ2aWNlIHNlcnZpY2UpIHsKLSAgICAgICAgICAgIG1TZXJ2aWNlUmVmID0gbmV3IFdlYWtSZWZlcmVuY2U8TWVkaWFSb3V0ZVByb3ZpZGVyU2VydmljZT4oc2VydmljZSk7Ci0gICAgICAgIH0KLQotICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgcHVibGljIHZvaWQgaGFuZGxlTWVzc2FnZShNZXNzYWdlIG1zZykgewotICAgICAgICAgICAgZmluYWwgTWVzc2VuZ2VyIG1lc3NlbmdlciA9IG1zZy5yZXBseVRvOwotICAgICAgICAgICAgaWYgKGlzVmFsaWRSZW1vdGVNZXNzZW5nZXIobWVzc2VuZ2VyKSkgewotICAgICAgICAgICAgICAgIGZpbmFsIGludCB3aGF0ID0gbXNnLndoYXQ7Ci0gICAgICAgICAgICAgICAgZmluYWwgaW50IHJlcXVlc3RJZCA9IG1zZy5hcmcxOwotICAgICAgICAgICAgICAgIGZpbmFsIGludCBhcmcgPSBtc2cuYXJnMjsKLSAgICAgICAgICAgICAgICBmaW5hbCBPYmplY3Qgb2JqID0gbXNnLm9iajsKLSAgICAgICAgICAgICAgICBmaW5hbCBCdW5kbGUgZGF0YSA9IG1zZy5wZWVrRGF0YSgpOwotICAgICAgICAgICAgICAgIGlmICghcHJvY2Vzc01lc3NhZ2Uod2hhdCwgbWVzc2VuZ2VyLCByZXF1ZXN0SWQsIGFyZywgb2JqLCBkYXRhKSkgewotICAgICAgICAgICAgICAgICAgICBpZiAoREVCVUcpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIExvZy5kKFRBRywgZ2V0Q2xpZW50SWQobWVzc2VuZ2VyKSArICI6IE1lc3NhZ2UgZmFpbGVkLCB3aGF0PSIgKyB3aGF0Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsgIiwgcmVxdWVzdElkPSIgKyByZXF1ZXN0SWQgKyAiLCBhcmc9IiArIGFyZwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArICIsIG9iaj0iICsgb2JqICsgIiwgZGF0YT0iICsgZGF0YSk7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgc2VuZEdlbmVyaWNGYWlsdXJlKG1lc3NlbmdlciwgcmVxdWVzdElkKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIGlmIChERUJVRykgewotICAgICAgICAgICAgICAgICAgICBMb2cuZChUQUcsICJJZ25vcmluZyBtZXNzYWdlIHdpdGhvdXQgdmFsaWQgcmVwbHkgbWVzc2VuZ2VyLiIpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIHByaXZhdGUgYm9vbGVhbiBwcm9jZXNzTWVzc2FnZShpbnQgd2hhdCwKLSAgICAgICAgICAgICAgICBNZXNzZW5nZXIgbWVzc2VuZ2VyLCBpbnQgcmVxdWVzdElkLCBpbnQgYXJnLCBPYmplY3Qgb2JqLCBCdW5kbGUgZGF0YSkgewotICAgICAgICAgICAgTWVkaWFSb3V0ZVByb3ZpZGVyU2VydmljZSBzZXJ2aWNlID0gbVNlcnZpY2VSZWYuZ2V0KCk7Ci0gICAgICAgICAgICBpZiAoc2VydmljZSAhPSBudWxsKSB7Ci0gICAgICAgICAgICAgICAgc3dpdGNoICh3aGF0KSB7Ci0gICAgICAgICAgICAgICAgICAgIGNhc2UgQ0xJRU5UX01TR19SRUdJU1RFUjoKLSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBzZXJ2aWNlLm9uUmVnaXN0ZXJDbGllbnQobWVzc2VuZ2VyLCByZXF1ZXN0SWQsIGFyZyk7Ci0KLSAgICAgICAgICAgICAgICAgICAgY2FzZSBDTElFTlRfTVNHX1VOUkVHSVNURVI6Ci0gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gc2VydmljZS5vblVucmVnaXN0ZXJDbGllbnQobWVzc2VuZ2VyLCByZXF1ZXN0SWQpOwotCi0gICAgICAgICAgICAgICAgICAgIGNhc2UgQ0xJRU5UX01TR19DUkVBVEVfUk9VVEVfQ09OVFJPTExFUjogewotICAgICAgICAgICAgICAgICAgICAgICAgU3RyaW5nIHJvdXRlSWQgPSBkYXRhLmdldFN0cmluZyhDTElFTlRfREFUQV9ST1VURV9JRCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBTdHJpbmcgcm91dGVHcm91cElkID0gZGF0YS5nZXRTdHJpbmcoQ0xJRU5UX0RBVEFfUk9VVEVfTElCUkFSWV9HUk9VUCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAocm91dGVJZCAhPSBudWxsKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHNlcnZpY2Uub25DcmVhdGVSb3V0ZUNvbnRyb2xsZXIoCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXNzZW5nZXIsIHJlcXVlc3RJZCwgYXJnLCByb3V0ZUlkLCByb3V0ZUdyb3VwSWQpOwotICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgICAgICBjYXNlIENMSUVOVF9NU0dfUkVMRUFTRV9ST1VURV9DT05UUk9MTEVSOgotICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHNlcnZpY2Uub25SZWxlYXNlUm91dGVDb250cm9sbGVyKG1lc3NlbmdlciwgcmVxdWVzdElkLCBhcmcpOwotCi0gICAgICAgICAgICAgICAgICAgIGNhc2UgQ0xJRU5UX01TR19TRUxFQ1RfUk9VVEU6Ci0gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gc2VydmljZS5vblNlbGVjdFJvdXRlKG1lc3NlbmdlciwgcmVxdWVzdElkLCBhcmcpOwotCi0gICAgICAgICAgICAgICAgICAgIGNhc2UgQ0xJRU5UX01TR19VTlNFTEVDVF9ST1VURToKLSAgICAgICAgICAgICAgICAgICAgICAgIGludCByZWFzb24gPSBkYXRhID09IG51bGwgPwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNZWRpYVJvdXRlci5VTlNFTEVDVF9SRUFTT05fVU5LTk9XTgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IGRhdGEuZ2V0SW50KENMSUVOVF9EQVRBX1VOU0VMRUNUX1JFQVNPTiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNZWRpYVJvdXRlci5VTlNFTEVDVF9SRUFTT05fVU5LTk9XTik7Ci0gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gc2VydmljZS5vblVuc2VsZWN0Um91dGUobWVzc2VuZ2VyLCByZXF1ZXN0SWQsIGFyZywgcmVhc29uKTsKLQotICAgICAgICAgICAgICAgICAgICBjYXNlIENMSUVOVF9NU0dfU0VUX1JPVVRFX1ZPTFVNRTogewotICAgICAgICAgICAgICAgICAgICAgICAgaW50IHZvbHVtZSA9IGRhdGEuZ2V0SW50KENMSUVOVF9EQVRBX1ZPTFVNRSwgLTEpOwotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHZvbHVtZSA+PSAwKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHNlcnZpY2Uub25TZXRSb3V0ZVZvbHVtZSgKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NlbmdlciwgcmVxdWVzdElkLCBhcmcsIHZvbHVtZSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgICAgIGNhc2UgQ0xJRU5UX01TR19VUERBVEVfUk9VVEVfVk9MVU1FOiB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpbnQgZGVsdGEgPSBkYXRhLmdldEludChDTElFTlRfREFUQV9WT0xVTUUsIDApOwotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGRlbHRhICE9IDApIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gc2VydmljZS5vblVwZGF0ZVJvdXRlVm9sdW1lKAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2VuZ2VyLCByZXF1ZXN0SWQsIGFyZywgZGVsdGEpOwotICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgICAgICBjYXNlIENMSUVOVF9NU0dfUk9VVEVfQ09OVFJPTF9SRVFVRVNUOgotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG9iaiBpbnN0YW5jZW9mIEludGVudCkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBzZXJ2aWNlLm9uUm91dGVDb250cm9sUmVxdWVzdCgKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NlbmdlciwgcmVxdWVzdElkLCBhcmcsIChJbnRlbnQpb2JqKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgICAgICAgICAgICAgIGNhc2UgQ0xJRU5UX01TR19TRVRfRElTQ09WRVJZX1JFUVVFU1Q6IHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChvYmogPT0gbnVsbCB8fCBvYmogaW5zdGFuY2VvZiBCdW5kbGUpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBNZWRpYVJvdXRlRGlzY292ZXJ5UmVxdWVzdCByZXF1ZXN0ID0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1lZGlhUm91dGVEaXNjb3ZlcnlSZXF1ZXN0LmZyb21CdW5kbGUoKEJ1bmRsZSlvYmopOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBzZXJ2aWNlLm9uU2V0RGlzY292ZXJ5UmVxdWVzdCgKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NlbmdlciwgcmVxdWVzdElkLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVxdWVzdCAhPSBudWxsICYmIHJlcXVlc3QuaXNWYWxpZCgpID8gcmVxdWVzdCA6IG51bGwpOwotICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9Ci0gICAgfQotfQpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvTWVkaWFDb21wb25lbnRzL3NyYy9jb20vYW5kcm9pZC9zdXBwb3J0L21lZGlhcm91dGVyL21lZGlhL01lZGlhUm91dGVTZWxlY3Rvci5qYXZhIGIvcGFja2FnZXMvTWVkaWFDb21wb25lbnRzL3NyYy9jb20vYW5kcm9pZC9zdXBwb3J0L21lZGlhcm91dGVyL21lZGlhL01lZGlhUm91dGVTZWxlY3Rvci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1NjY5YjE5Li4wMDAwMDAwCi0tLSBhL3BhY2thZ2VzL01lZGlhQ29tcG9uZW50cy9zcmMvY29tL2FuZHJvaWQvc3VwcG9ydC9tZWRpYXJvdXRlci9tZWRpYS9NZWRpYVJvdXRlU2VsZWN0b3IuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDMwOCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IDIwMTggVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAotICoKLSAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwotICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgotICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0gKgotICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLSAqCi0gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCi0gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAotICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCi0gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCi0gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KLSAqLwotcGFja2FnZSBjb20uYW5kcm9pZC5zdXBwb3J0Lm1lZGlhcm91dGVyLm1lZGlhOwotCi1pbXBvcnQgYW5kcm9pZC5jb250ZW50LkludGVudEZpbHRlcjsKLWltcG9ydCBhbmRyb2lkLm9zLkJ1bmRsZTsKLWltcG9ydCBhbmRyb2lkLnN1cHBvcnQuYW5ub3RhdGlvbi5Ob25OdWxsOwotaW1wb3J0IGFuZHJvaWQuc3VwcG9ydC5hbm5vdGF0aW9uLk51bGxhYmxlOwotCi1pbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKLWltcG9ydCBqYXZhLnV0aWwuQXJyYXlzOwotaW1wb3J0IGphdmEudXRpbC5Db2xsZWN0aW9uOwotaW1wb3J0IGphdmEudXRpbC5Db2xsZWN0aW9uczsKLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLQotLyoqCi0gKiBEZXNjcmliZXMgdGhlIGNhcGFiaWxpdGllcyBvZiByb3V0ZXMgdGhhdCBhcHBsaWNhdGlvbnMgd291bGQgbGlrZSB0byBkaXNjb3ZlciBhbmQgdXNlLgotICogPHA+Ci0gKiBUaGlzIG9iamVjdCBpcyBpbW11dGFibGUgb25jZSBjcmVhdGVkIHVzaW5nIGEge0BsaW5rIEJ1aWxkZXJ9IGluc3RhbmNlLgotICogPC9wPgotICoKLSAqIDxoMz5FeGFtcGxlPC9oMz4KLSAqIDxwcmU+Ci0gKiBNZWRpYVJvdXRlU2VsZWN0b3Igc2VsZWN0b3JCdWlsZGVyID0gbmV3IE1lZGlhUm91dGVTZWxlY3Rvci5CdWlsZGVyKCkKLSAqICAgICAgICAgLmFkZENvbnRyb2xDYXRlZ29yeShNZWRpYUNvbnRyb2xJbnRlbnQuQ0FURUdPUllfTElWRV9WSURFTykKLSAqICAgICAgICAgLmFkZENvbnRyb2xDYXRlZ29yeShNZWRpYUNvbnRyb2xJbnRlbnQuQ0FURUdPUllfUkVNT1RFX1BMQVlCQUNLKQotICogICAgICAgICAuYnVpbGQoKTsKLSAqCi0gKiBNZWRpYVJvdXRlciByb3V0ZXIgPSBNZWRpYVJvdXRlci5nZXRJbnN0YW5jZShjb250ZXh0KTsKLSAqIHJvdXRlci5hZGRDYWxsYmFjayhzZWxlY3RvciwgY2FsbGJhY2ssIE1lZGlhUm91dGVyLkNBTExCQUNLX0ZMQUdfUkVRVUVTVF9ESVNDT1ZFUlkpOwotICogPC9wcmU+Ci0gKi8KLXB1YmxpYyBmaW5hbCBjbGFzcyBNZWRpYVJvdXRlU2VsZWN0b3IgewotICAgIHN0YXRpYyBmaW5hbCBTdHJpbmcgS0VZX0NPTlRST0xfQ0FURUdPUklFUyA9ICJjb250cm9sQ2F0ZWdvcmllcyI7Ci0KLSAgICBwcml2YXRlIGZpbmFsIEJ1bmRsZSBtQnVuZGxlOwotICAgIExpc3Q8U3RyaW5nPiBtQ29udHJvbENhdGVnb3JpZXM7Ci0KLSAgICAvKioKLSAgICAgKiBBbiBlbXB0eSBtZWRpYSByb3V0ZSBzZWxlY3RvciB0aGF0IHdpbGwgbm90IG1hdGNoIGFueSByb3V0ZXMuCi0gICAgICovCi0gICAgcHVibGljIHN0YXRpYyBmaW5hbCBNZWRpYVJvdXRlU2VsZWN0b3IgRU1QVFkgPSBuZXcgTWVkaWFSb3V0ZVNlbGVjdG9yKG5ldyBCdW5kbGUoKSwgbnVsbCk7Ci0KLSAgICBNZWRpYVJvdXRlU2VsZWN0b3IoQnVuZGxlIGJ1bmRsZSwgTGlzdDxTdHJpbmc+IGNvbnRyb2xDYXRlZ29yaWVzKSB7Ci0gICAgICAgIG1CdW5kbGUgPSBidW5kbGU7Ci0gICAgICAgIG1Db250cm9sQ2F0ZWdvcmllcyA9IGNvbnRyb2xDYXRlZ29yaWVzOwotICAgIH0KLQotICAgIC8qKgotICAgICAqIEdldHMgdGhlIGxpc3Qgb2Yge0BsaW5rIE1lZGlhQ29udHJvbEludGVudCBtZWRpYSBjb250cm9sIGNhdGVnb3JpZXN9IGluIHRoZSBzZWxlY3Rvci4KLSAgICAgKgotICAgICAqIEByZXR1cm4gVGhlIGxpc3Qgb2YgY2F0ZWdvcmllcy4KLSAgICAgKi8KLSAgICBwdWJsaWMgTGlzdDxTdHJpbmc+IGdldENvbnRyb2xDYXRlZ29yaWVzKCkgewotICAgICAgICBlbnN1cmVDb250cm9sQ2F0ZWdvcmllcygpOwotICAgICAgICByZXR1cm4gbUNvbnRyb2xDYXRlZ29yaWVzOwotICAgIH0KLQotICAgIHZvaWQgZW5zdXJlQ29udHJvbENhdGVnb3JpZXMoKSB7Ci0gICAgICAgIGlmIChtQ29udHJvbENhdGVnb3JpZXMgPT0gbnVsbCkgewotICAgICAgICAgICAgbUNvbnRyb2xDYXRlZ29yaWVzID0gbUJ1bmRsZS5nZXRTdHJpbmdBcnJheUxpc3QoS0VZX0NPTlRST0xfQ0FURUdPUklFUyk7Ci0gICAgICAgICAgICBpZiAobUNvbnRyb2xDYXRlZ29yaWVzID09IG51bGwgfHwgbUNvbnRyb2xDYXRlZ29yaWVzLmlzRW1wdHkoKSkgewotICAgICAgICAgICAgICAgIG1Db250cm9sQ2F0ZWdvcmllcyA9IENvbGxlY3Rpb25zLjxTdHJpbmc+ZW1wdHlMaXN0KCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBSZXR1cm5zIHRydWUgaWYgdGhlIHNlbGVjdG9yIGNvbnRhaW5zIHRoZSBzcGVjaWZpZWQgY2F0ZWdvcnkuCi0gICAgICoKLSAgICAgKiBAcGFyYW0gY2F0ZWdvcnkgVGhlIGNhdGVnb3J5IHRvIGNoZWNrLgotICAgICAqIEByZXR1cm4gVHJ1ZSBpZiB0aGUgY2F0ZWdvcnkgaXMgcHJlc2VudC4KLSAgICAgKi8KLSAgICBwdWJsaWMgYm9vbGVhbiBoYXNDb250cm9sQ2F0ZWdvcnkoU3RyaW5nIGNhdGVnb3J5KSB7Ci0gICAgICAgIGlmIChjYXRlZ29yeSAhPSBudWxsKSB7Ci0gICAgICAgICAgICBlbnN1cmVDb250cm9sQ2F0ZWdvcmllcygpOwotICAgICAgICAgICAgZmluYWwgaW50IGNhdGVnb3J5Q291bnQgPSBtQ29udHJvbENhdGVnb3JpZXMuc2l6ZSgpOwotICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBjYXRlZ29yeUNvdW50OyBpKyspIHsKLSAgICAgICAgICAgICAgICBpZiAobUNvbnRyb2xDYXRlZ29yaWVzLmdldChpKS5lcXVhbHMoY2F0ZWdvcnkpKSB7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogUmV0dXJucyB0cnVlIGlmIHRoZSBzZWxlY3RvciBtYXRjaGVzIGF0IGxlYXN0IG9uZSBvZiB0aGUgc3BlY2lmaWVkIGNvbnRyb2wgZmlsdGVycy4KLSAgICAgKgotICAgICAqIEBwYXJhbSBmaWx0ZXJzIFRoZSBsaXN0IG9mIGNvbnRyb2wgZmlsdGVycyB0byBjb25zaWRlci4KLSAgICAgKiBAcmV0dXJuIFRydWUgaWYgYSBtYXRjaCBpcyBmb3VuZC4KLSAgICAgKi8KLSAgICBwdWJsaWMgYm9vbGVhbiBtYXRjaGVzQ29udHJvbEZpbHRlcnMoTGlzdDxJbnRlbnRGaWx0ZXI+IGZpbHRlcnMpIHsKLSAgICAgICAgaWYgKGZpbHRlcnMgIT0gbnVsbCkgewotICAgICAgICAgICAgZW5zdXJlQ29udHJvbENhdGVnb3JpZXMoKTsKLSAgICAgICAgICAgIGZpbmFsIGludCBjYXRlZ29yeUNvdW50ID0gbUNvbnRyb2xDYXRlZ29yaWVzLnNpemUoKTsKLSAgICAgICAgICAgIGlmIChjYXRlZ29yeUNvdW50ICE9IDApIHsKLSAgICAgICAgICAgICAgICBmaW5hbCBpbnQgZmlsdGVyQ291bnQgPSBmaWx0ZXJzLnNpemUoKTsKLSAgICAgICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGZpbHRlckNvdW50OyBpKyspIHsKLSAgICAgICAgICAgICAgICAgICAgZmluYWwgSW50ZW50RmlsdGVyIGZpbHRlciA9IGZpbHRlcnMuZ2V0KGkpOwotICAgICAgICAgICAgICAgICAgICBpZiAoZmlsdGVyICE9IG51bGwpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoaW50IGogPSAwOyBqIDwgY2F0ZWdvcnlDb3VudDsgaisrKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGZpbHRlci5oYXNDYXRlZ29yeShtQ29udHJvbENhdGVnb3JpZXMuZ2V0KGopKSkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIC8qKgotICAgICAqIFJldHVybnMgdHJ1ZSBpZiB0aGlzIHNlbGVjdG9yIGNvbnRhaW5zIGFsbCBvZiB0aGUgY2FwYWJpbGl0aWVzIGRlc2NyaWJlZAotICAgICAqIGJ5IHRoZSBzcGVjaWZpZWQgc2VsZWN0b3IuCi0gICAgICoKLSAgICAgKiBAcGFyYW0gc2VsZWN0b3IgVGhlIHNlbGVjdG9yIHRvIGJlIGV4YW1pbmVkLgotICAgICAqIEByZXR1cm4gVHJ1ZSBpZiB0aGlzIHNlbGVjdG9yIGNvbnRhaW5zIGFsbCBvZiB0aGUgY2FwYWJpbGl0aWVzIGRlc2NyaWJlZAotICAgICAqIGJ5IHRoZSBzcGVjaWZpZWQgc2VsZWN0b3IuCi0gICAgICovCi0gICAgcHVibGljIGJvb2xlYW4gY29udGFpbnMoTWVkaWFSb3V0ZVNlbGVjdG9yIHNlbGVjdG9yKSB7Ci0gICAgICAgIGlmIChzZWxlY3RvciAhPSBudWxsKSB7Ci0gICAgICAgICAgICBlbnN1cmVDb250cm9sQ2F0ZWdvcmllcygpOwotICAgICAgICAgICAgc2VsZWN0b3IuZW5zdXJlQ29udHJvbENhdGVnb3JpZXMoKTsKLSAgICAgICAgICAgIHJldHVybiBtQ29udHJvbENhdGVnb3JpZXMuY29udGFpbnNBbGwoc2VsZWN0b3IubUNvbnRyb2xDYXRlZ29yaWVzKTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogUmV0dXJucyB0cnVlIGlmIHRoZSBzZWxlY3RvciBkb2VzIG5vdCBzcGVjaWZ5IGFueSBjYXBhYmlsaXRpZXMuCi0gICAgICovCi0gICAgcHVibGljIGJvb2xlYW4gaXNFbXB0eSgpIHsKLSAgICAgICAgZW5zdXJlQ29udHJvbENhdGVnb3JpZXMoKTsKLSAgICAgICAgcmV0dXJuIG1Db250cm9sQ2F0ZWdvcmllcy5pc0VtcHR5KCk7Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogUmV0dXJucyB0cnVlIGlmIHRoZSBzZWxlY3RvciBoYXMgYWxsIG9mIHRoZSByZXF1aXJlZCBmaWVsZHMuCi0gICAgICovCi0gICAgcHVibGljIGJvb2xlYW4gaXNWYWxpZCgpIHsKLSAgICAgICAgZW5zdXJlQ29udHJvbENhdGVnb3JpZXMoKTsKLSAgICAgICAgaWYgKG1Db250cm9sQ2F0ZWdvcmllcy5jb250YWlucyhudWxsKSkgewotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyBib29sZWFuIGVxdWFscyhPYmplY3QgbykgewotICAgICAgICBpZiAobyBpbnN0YW5jZW9mIE1lZGlhUm91dGVTZWxlY3RvcikgewotICAgICAgICAgICAgTWVkaWFSb3V0ZVNlbGVjdG9yIG90aGVyID0gKE1lZGlhUm91dGVTZWxlY3RvcilvOwotICAgICAgICAgICAgZW5zdXJlQ29udHJvbENhdGVnb3JpZXMoKTsKLSAgICAgICAgICAgIG90aGVyLmVuc3VyZUNvbnRyb2xDYXRlZ29yaWVzKCk7Ci0gICAgICAgICAgICByZXR1cm4gbUNvbnRyb2xDYXRlZ29yaWVzLmVxdWFscyhvdGhlci5tQ29udHJvbENhdGVnb3JpZXMpOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgaW50IGhhc2hDb2RlKCkgewotICAgICAgICBlbnN1cmVDb250cm9sQ2F0ZWdvcmllcygpOwotICAgICAgICByZXR1cm4gbUNvbnRyb2xDYXRlZ29yaWVzLmhhc2hDb2RlKCk7Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIFN0cmluZyB0b1N0cmluZygpIHsKLSAgICAgICAgU3RyaW5nQnVpbGRlciByZXN1bHQgPSBuZXcgU3RyaW5nQnVpbGRlcigpOwotICAgICAgICByZXN1bHQuYXBwZW5kKCJNZWRpYVJvdXRlU2VsZWN0b3J7ICIpOwotICAgICAgICByZXN1bHQuYXBwZW5kKCJjb250cm9sQ2F0ZWdvcmllcz0iKS5hcHBlbmQoCi0gICAgICAgICAgICAgICAgQXJyYXlzLnRvU3RyaW5nKGdldENvbnRyb2xDYXRlZ29yaWVzKCkudG9BcnJheSgpKSk7Ci0gICAgICAgIHJlc3VsdC5hcHBlbmQoIiB9Iik7Ci0gICAgICAgIHJldHVybiByZXN1bHQudG9TdHJpbmcoKTsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBDb252ZXJ0cyB0aGlzIG9iamVjdCB0byBhIGJ1bmRsZSBmb3Igc2VyaWFsaXphdGlvbi4KLSAgICAgKgotICAgICAqIEByZXR1cm4gVGhlIGNvbnRlbnRzIG9mIHRoZSBvYmplY3QgcmVwcmVzZW50ZWQgYXMgYSBidW5kbGUuCi0gICAgICovCi0gICAgcHVibGljIEJ1bmRsZSBhc0J1bmRsZSgpIHsKLSAgICAgICAgcmV0dXJuIG1CdW5kbGU7Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogQ3JlYXRlcyBhbiBpbnN0YW5jZSBmcm9tIGEgYnVuZGxlLgotICAgICAqCi0gICAgICogQHBhcmFtIGJ1bmRsZSBUaGUgYnVuZGxlLCBvciBudWxsIGlmIG5vbmUuCi0gICAgICogQHJldHVybiBUaGUgbmV3IGluc3RhbmNlLCBvciBudWxsIGlmIHRoZSBidW5kbGUgd2FzIG51bGwuCi0gICAgICovCi0gICAgcHVibGljIHN0YXRpYyBNZWRpYVJvdXRlU2VsZWN0b3IgZnJvbUJ1bmRsZShATnVsbGFibGUgQnVuZGxlIGJ1bmRsZSkgewotICAgICAgICByZXR1cm4gYnVuZGxlICE9IG51bGwgPyBuZXcgTWVkaWFSb3V0ZVNlbGVjdG9yKGJ1bmRsZSwgbnVsbCkgOiBudWxsOwotICAgIH0KLQotICAgIC8qKgotICAgICAqIEJ1aWxkZXIgZm9yIHtAbGluayBNZWRpYVJvdXRlU2VsZWN0b3IgbWVkaWEgcm91dGUgc2VsZWN0b3JzfS4KLSAgICAgKi8KLSAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGNsYXNzIEJ1aWxkZXIgewotICAgICAgICBwcml2YXRlIEFycmF5TGlzdDxTdHJpbmc+IG1Db250cm9sQ2F0ZWdvcmllczsKLQotICAgICAgICAvKioKLSAgICAgICAgICogQ3JlYXRlcyBhbiBlbXB0eSBtZWRpYSByb3V0ZSBzZWxlY3RvciBidWlsZGVyLgotICAgICAgICAgKi8KLSAgICAgICAgcHVibGljIEJ1aWxkZXIoKSB7Ci0gICAgICAgIH0KLQotICAgICAgICAvKioKLSAgICAgICAgICogQ3JlYXRlcyBhIG1lZGlhIHJvdXRlIHNlbGVjdG9yIGRlc2NyaXB0b3IgYnVpbGRlciB3aG9zZSBpbml0aWFsIGNvbnRlbnRzIGFyZQotICAgICAgICAgKiBjb3BpZWQgZnJvbSBhbiBleGlzdGluZyBzZWxlY3Rvci4KLSAgICAgICAgICovCi0gICAgICAgIHB1YmxpYyBCdWlsZGVyKEBOb25OdWxsIE1lZGlhUm91dGVTZWxlY3RvciBzZWxlY3RvcikgewotICAgICAgICAgICAgaWYgKHNlbGVjdG9yID09IG51bGwpIHsKLSAgICAgICAgICAgICAgICB0aHJvdyBuZXcgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKCJzZWxlY3RvciBtdXN0IG5vdCBiZSBudWxsIik7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIHNlbGVjdG9yLmVuc3VyZUNvbnRyb2xDYXRlZ29yaWVzKCk7Ci0gICAgICAgICAgICBpZiAoIXNlbGVjdG9yLm1Db250cm9sQ2F0ZWdvcmllcy5pc0VtcHR5KCkpIHsKLSAgICAgICAgICAgICAgICBtQ29udHJvbENhdGVnb3JpZXMgPSBuZXcgQXJyYXlMaXN0PFN0cmluZz4oc2VsZWN0b3IubUNvbnRyb2xDYXRlZ29yaWVzKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIC8qKgotICAgICAgICAgKiBBZGRzIGEge0BsaW5rIE1lZGlhQ29udHJvbEludGVudCBtZWRpYSBjb250cm9sIGNhdGVnb3J5fSB0byB0aGUgYnVpbGRlci4KLSAgICAgICAgICoKLSAgICAgICAgICogQHBhcmFtIGNhdGVnb3J5IFRoZSBjYXRlZ29yeSB0byBhZGQgdG8gdGhlIHNldCBvZiBkZXNpcmVkIGNhcGFiaWxpdGllcywgc3VjaCBhcwotICAgICAgICAgKiB7QGxpbmsgTWVkaWFDb250cm9sSW50ZW50I0NBVEVHT1JZX0xJVkVfQVVESU99LgotICAgICAgICAgKiBAcmV0dXJuIFRoZSBidWlsZGVyIGluc3RhbmNlIGZvciBjaGFpbmluZy4KLSAgICAgICAgICovCi0gICAgICAgIEBOb25OdWxsCi0gICAgICAgIHB1YmxpYyBCdWlsZGVyIGFkZENvbnRyb2xDYXRlZ29yeShATm9uTnVsbCBTdHJpbmcgY2F0ZWdvcnkpIHsKLSAgICAgICAgICAgIGlmIChjYXRlZ29yeSA9PSBudWxsKSB7Ci0gICAgICAgICAgICAgICAgdGhyb3cgbmV3IElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbigiY2F0ZWdvcnkgbXVzdCBub3QgYmUgbnVsbCIpOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBpZiAobUNvbnRyb2xDYXRlZ29yaWVzID09IG51bGwpIHsKLSAgICAgICAgICAgICAgICBtQ29udHJvbENhdGVnb3JpZXMgPSBuZXcgQXJyYXlMaXN0PFN0cmluZz4oKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmICghbUNvbnRyb2xDYXRlZ29yaWVzLmNvbnRhaW5zKGNhdGVnb3J5KSkgewotICAgICAgICAgICAgICAgIG1Db250cm9sQ2F0ZWdvcmllcy5hZGQoY2F0ZWdvcnkpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgcmV0dXJuIHRoaXM7Ci0gICAgICAgIH0KLQotICAgICAgICAvKioKLSAgICAgICAgICogQWRkcyBhIGxpc3Qgb2Yge0BsaW5rIE1lZGlhQ29udHJvbEludGVudCBtZWRpYSBjb250cm9sIGNhdGVnb3JpZXN9IHRvIHRoZSBidWlsZGVyLgotICAgICAgICAgKgotICAgICAgICAgKiBAcGFyYW0gY2F0ZWdvcmllcyBUaGUgbGlzdCBjYXRlZ29yaWVzIHRvIGFkZCB0byB0aGUgc2V0IG9mIGRlc2lyZWQgY2FwYWJpbGl0aWVzLAotICAgICAgICAgKiBzdWNoIGFzIHtAbGluayBNZWRpYUNvbnRyb2xJbnRlbnQjQ0FURUdPUllfTElWRV9BVURJT30uCi0gICAgICAgICAqIEByZXR1cm4gVGhlIGJ1aWxkZXIgaW5zdGFuY2UgZm9yIGNoYWluaW5nLgotICAgICAgICAgKi8KLSAgICAgICAgQE5vbk51bGwKLSAgICAgICAgcHVibGljIEJ1aWxkZXIgYWRkQ29udHJvbENhdGVnb3JpZXMoQE5vbk51bGwgQ29sbGVjdGlvbjxTdHJpbmc+IGNhdGVnb3JpZXMpIHsKLSAgICAgICAgICAgIGlmIChjYXRlZ29yaWVzID09IG51bGwpIHsKLSAgICAgICAgICAgICAgICB0aHJvdyBuZXcgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKCJjYXRlZ29yaWVzIG11c3Qgbm90IGJlIG51bGwiKTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgaWYgKCFjYXRlZ29yaWVzLmlzRW1wdHkoKSkgewotICAgICAgICAgICAgICAgIGZvciAoU3RyaW5nIGNhdGVnb3J5IDogY2F0ZWdvcmllcykgewotICAgICAgICAgICAgICAgICAgICBhZGRDb250cm9sQ2F0ZWdvcnkoY2F0ZWdvcnkpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHJldHVybiB0aGlzOwotICAgICAgICB9Ci0KLSAgICAgICAgLyoqCi0gICAgICAgICAqIEFkZHMgdGhlIGNvbnRlbnRzIG9mIGFuIGV4aXN0aW5nIG1lZGlhIHJvdXRlIHNlbGVjdG9yIHRvIHRoZSBidWlsZGVyLgotICAgICAgICAgKgotICAgICAgICAgKiBAcGFyYW0gc2VsZWN0b3IgVGhlIG1lZGlhIHJvdXRlIHNlbGVjdG9yIHdob3NlIGNvbnRlbnRzIGFyZSB0byBiZSBhZGRlZC4KLSAgICAgICAgICogQHJldHVybiBUaGUgYnVpbGRlciBpbnN0YW5jZSBmb3IgY2hhaW5pbmcuCi0gICAgICAgICAqLwotICAgICAgICBATm9uTnVsbAotICAgICAgICBwdWJsaWMgQnVpbGRlciBhZGRTZWxlY3RvcihATm9uTnVsbCBNZWRpYVJvdXRlU2VsZWN0b3Igc2VsZWN0b3IpIHsKLSAgICAgICAgICAgIGlmIChzZWxlY3RvciA9PSBudWxsKSB7Ci0gICAgICAgICAgICAgICAgdGhyb3cgbmV3IElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbigic2VsZWN0b3IgbXVzdCBub3QgYmUgbnVsbCIpOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBhZGRDb250cm9sQ2F0ZWdvcmllcyhzZWxlY3Rvci5nZXRDb250cm9sQ2F0ZWdvcmllcygpKTsKLSAgICAgICAgICAgIHJldHVybiB0aGlzOwotICAgICAgICB9Ci0KLSAgICAgICAgLyoqCi0gICAgICAgICAqIEJ1aWxkcyB0aGUge0BsaW5rIE1lZGlhUm91dGVTZWxlY3RvciBtZWRpYSByb3V0ZSBzZWxlY3Rvcn0uCi0gICAgICAgICAqLwotICAgICAgICBATm9uTnVsbAotICAgICAgICBwdWJsaWMgTWVkaWFSb3V0ZVNlbGVjdG9yIGJ1aWxkKCkgewotICAgICAgICAgICAgaWYgKG1Db250cm9sQ2F0ZWdvcmllcyA9PSBudWxsKSB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIEVNUFRZOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgQnVuZGxlIGJ1bmRsZSA9IG5ldyBCdW5kbGUoKTsKLSAgICAgICAgICAgIGJ1bmRsZS5wdXRTdHJpbmdBcnJheUxpc3QoS0VZX0NPTlRST0xfQ0FURUdPUklFUywgbUNvbnRyb2xDYXRlZ29yaWVzKTsKLSAgICAgICAgICAgIHJldHVybiBuZXcgTWVkaWFSb3V0ZVNlbGVjdG9yKGJ1bmRsZSwgbUNvbnRyb2xDYXRlZ29yaWVzKTsKLSAgICAgICAgfQotICAgIH0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9wYWNrYWdlcy9NZWRpYUNvbXBvbmVudHMvc3JjL2NvbS9hbmRyb2lkL3N1cHBvcnQvbWVkaWFyb3V0ZXIvbWVkaWEvTWVkaWFSb3V0ZXIuamF2YSBiL3BhY2thZ2VzL01lZGlhQ29tcG9uZW50cy9zcmMvY29tL2FuZHJvaWQvc3VwcG9ydC9tZWRpYXJvdXRlci9tZWRpYS9NZWRpYVJvdXRlci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkYjAwNTJlLi4wMDAwMDAwCi0tLSBhL3BhY2thZ2VzL01lZGlhQ29tcG9uZW50cy9zcmMvY29tL2FuZHJvaWQvc3VwcG9ydC9tZWRpYXJvdXRlci9tZWRpYS9NZWRpYVJvdXRlci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjk5OSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IDIwMTggVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAotICoKLSAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwotICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgotICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0gKgotICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLSAqCi0gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCi0gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAotICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCi0gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCi0gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KLSAqLwotCi1wYWNrYWdlIGNvbS5hbmRyb2lkLnN1cHBvcnQubWVkaWFyb3V0ZXIubWVkaWE7Ci0KLWltcG9ydCBhbmRyb2lkLmFubm90YXRpb24uSW50RGVmOwotaW1wb3J0IGFuZHJvaWQuYW5ub3RhdGlvbi5Ob25OdWxsOwotaW1wb3J0IGFuZHJvaWQuYW5ub3RhdGlvbi5OdWxsYWJsZTsKLWltcG9ydCBhbmRyb2lkLmFwcC5BY3Rpdml0eU1hbmFnZXI7Ci1pbXBvcnQgYW5kcm9pZC5jb250ZW50LkNvbXBvbmVudE5hbWU7Ci1pbXBvcnQgYW5kcm9pZC5jb250ZW50LkNvbnRlbnRSZXNvbHZlcjsKLWltcG9ydCBhbmRyb2lkLmNvbnRlbnQuQ29udGV4dDsKLWltcG9ydCBhbmRyb2lkLmNvbnRlbnQuSW50ZW50OwotaW1wb3J0IGFuZHJvaWQuY29udGVudC5JbnRlbnRGaWx0ZXI7Ci1pbXBvcnQgYW5kcm9pZC5jb250ZW50LkludGVudFNlbmRlcjsKLWltcG9ydCBhbmRyb2lkLmNvbnRlbnQucG0uUGFja2FnZU1hbmFnZXIuTmFtZU5vdEZvdW5kRXhjZXB0aW9uOwotaW1wb3J0IGFuZHJvaWQuY29udGVudC5yZXMuUmVzb3VyY2VzOwotaW1wb3J0IGFuZHJvaWQubmV0LlVyaTsKLWltcG9ydCBhbmRyb2lkLm9zLkJ1bmRsZTsKLWltcG9ydCBhbmRyb2lkLm9zLkhhbmRsZXI7Ci1pbXBvcnQgYW5kcm9pZC5vcy5Mb29wZXI7Ci1pbXBvcnQgYW5kcm9pZC5vcy5NZXNzYWdlOwotaW1wb3J0IGFuZHJvaWQuc3VwcG9ydC52NC5hcHAuQWN0aXZpdHlNYW5hZ2VyQ29tcGF0OwotaW1wb3J0IGFuZHJvaWQuc3VwcG9ydC52NC5oYXJkd2FyZS5kaXNwbGF5LkRpc3BsYXlNYW5hZ2VyQ29tcGF0OwotaW1wb3J0IGFuZHJvaWQuc3VwcG9ydC52NC5tZWRpYS5Wb2x1bWVQcm92aWRlckNvbXBhdDsKLWltcG9ydCBhbmRyb2lkLnN1cHBvcnQudjQubWVkaWEuc2Vzc2lvbi5NZWRpYVNlc3Npb25Db21wYXQ7Ci1pbXBvcnQgYW5kcm9pZC5zdXBwb3J0LnY0LnV0aWwuUGFpcjsKLWltcG9ydCBhbmRyb2lkLnRleHQuVGV4dFV0aWxzOwotaW1wb3J0IGFuZHJvaWQudXRpbC5Mb2c7Ci1pbXBvcnQgYW5kcm9pZC52aWV3LkRpc3BsYXk7Ci0KLWltcG9ydCBjb20uYW5kcm9pZC5zdXBwb3J0Lm1lZGlhcm91dGVyLm1lZGlhLk1lZGlhUm91dGVQcm92aWRlci5Qcm92aWRlck1ldGFkYXRhOwotaW1wb3J0IGNvbS5hbmRyb2lkLnN1cHBvcnQubWVkaWFyb3V0ZXIubWVkaWEuTWVkaWFSb3V0ZVByb3ZpZGVyLlJvdXRlQ29udHJvbGxlcjsKLQotaW1wb3J0IGphdmEubGFuZy5hbm5vdGF0aW9uLlJldGVudGlvbjsKLWltcG9ydCBqYXZhLmxhbmcuYW5ub3RhdGlvbi5SZXRlbnRpb25Qb2xpY3k7Ci1pbXBvcnQgamF2YS5sYW5nLnJlZi5XZWFrUmVmZXJlbmNlOwotaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLkNvbGxlY3Rpb25zOwotaW1wb3J0IGphdmEudXRpbC5IYXNoTWFwOwotaW1wb3J0IGphdmEudXRpbC5IYXNoU2V0OwotaW1wb3J0IGphdmEudXRpbC5JdGVyYXRvcjsKLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLWltcG9ydCBqYXZhLnV0aWwuTG9jYWxlOwotaW1wb3J0IGphdmEudXRpbC5NYXA7Ci1pbXBvcnQgamF2YS51dGlsLlNldDsKLQotLyoqCi0gKiBNZWRpYVJvdXRlciBhbGxvd3MgYXBwbGljYXRpb25zIHRvIGNvbnRyb2wgdGhlIHJvdXRpbmcgb2YgbWVkaWEgY2hhbm5lbHMKLSAqIGFuZCBzdHJlYW1zIGZyb20gdGhlIGN1cnJlbnQgZGV2aWNlIHRvIGV4dGVybmFsIHNwZWFrZXJzIGFuZCBkZXN0aW5hdGlvbiBkZXZpY2VzLgotICogPHA+Ci0gKiBBIE1lZGlhUm91dGVyIGluc3RhbmNlIGlzIHJldHJpZXZlZCB0aHJvdWdoIHtAbGluayAjZ2V0SW5zdGFuY2V9LiAgQXBwbGljYXRpb25zCi0gKiBjYW4gcXVlcnkgdGhlIG1lZGlhIHJvdXRlciBhYm91dCB0aGUgY3VycmVudGx5IHNlbGVjdGVkIHJvdXRlIGFuZCBpdHMgY2FwYWJpbGl0aWVzCi0gKiB0byBkZXRlcm1pbmUgaG93IHRvIHNlbmQgY29udGVudCB0byB0aGUgcm91dGUncyBkZXN0aW5hdGlvbi4gIEFwcGxpY2F0aW9ucyBjYW4KLSAqIGFsc28ge0BsaW5rIFJvdXRlSW5mbyNzZW5kQ29udHJvbFJlcXVlc3Qgc2VuZCBjb250cm9sIHJlcXVlc3RzfSB0byB0aGUgcm91dGUKLSAqIHRvIGFzayB0aGUgcm91dGUncyBkZXN0aW5hdGlvbiB0byBwZXJmb3JtIGNlcnRhaW4gcmVtb3RlIGNvbnRyb2wgZnVuY3Rpb25zCi0gKiBzdWNoIGFzIHBsYXlpbmcgbWVkaWEuCi0gKiA8L3A+PHA+Ci0gKiBTZWUgYWxzbyB7QGxpbmsgTWVkaWFSb3V0ZVByb3ZpZGVyfSBmb3IgaW5mb3JtYXRpb24gb24gaG93IGFuIGFwcGxpY2F0aW9uCi0gKiBjYW4gcHVibGlzaCBuZXcgbWVkaWEgcm91dGVzIHRvIHRoZSBtZWRpYSByb3V0ZXIuCi0gKiA8L3A+PHA+Ci0gKiBUaGUgbWVkaWEgcm91dGVyIEFQSSBpcyBub3QgdGhyZWFkLXNhZmU7IGFsbCBpbnRlcmFjdGlvbnMgd2l0aCBpdCBtdXN0IGJlCi0gKiBkb25lIGZyb20gdGhlIG1haW4gdGhyZWFkIG9mIHRoZSBwcm9jZXNzLgotICogPC9wPgotICovCi1wdWJsaWMgZmluYWwgY2xhc3MgTWVkaWFSb3V0ZXIgewotICAgIHN0YXRpYyBmaW5hbCBTdHJpbmcgVEFHID0gIk1lZGlhUm91dGVyIjsKLSAgICBzdGF0aWMgZmluYWwgYm9vbGVhbiBERUJVRyA9IExvZy5pc0xvZ2dhYmxlKFRBRywgTG9nLkRFQlVHKTsKLQotICAgIC8qKgotICAgICAqIFBhc3NlZCB0byB7QGxpbmsgYW5kcm9pZC5zdXBwb3J0LnY3Lm1lZGlhLk1lZGlhUm91dGVQcm92aWRlci5Sb3V0ZUNvbnRyb2xsZXIjb25VbnNlbGVjdChpbnQpfQotICAgICAqIGFuZCB7QGxpbmsgQ2FsbGJhY2sjb25Sb3V0ZVVuc2VsZWN0ZWQoTWVkaWFSb3V0ZXIsIFJvdXRlSW5mbywgaW50KX0gd2hlbiB0aGUgcmVhc29uIHRoZSByb3V0ZQotICAgICAqIHdhcyB1bnNlbGVjdGVkIGlzIHVua25vd24uCi0gICAgICovCi0gICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgVU5TRUxFQ1RfUkVBU09OX1VOS05PV04gPSAwOwotICAgIC8qKgotICAgICAqIFBhc3NlZCB0byB7QGxpbmsgYW5kcm9pZC5zdXBwb3J0LnY3Lm1lZGlhLk1lZGlhUm91dGVQcm92aWRlci5Sb3V0ZUNvbnRyb2xsZXIjb25VbnNlbGVjdChpbnQpfQotICAgICAqIGFuZCB7QGxpbmsgQ2FsbGJhY2sjb25Sb3V0ZVVuc2VsZWN0ZWQoTWVkaWFSb3V0ZXIsIFJvdXRlSW5mbywgaW50KX0gd2hlbiB0aGUgdXNlciBwcmVzc2VkCi0gICAgICogdGhlIGRpc2Nvbm5lY3QgYnV0dG9uIHRvIGRpc2Nvbm5lY3QgYW5kIGtlZXAgcGxheWluZy4KLSAgICAgKiA8cD4KLSAgICAgKgotICAgICAqIEBzZWUgTWVkaWFSb3V0ZURlc2NyaXB0b3IjY2FuRGlzY29ubmVjdEFuZEtlZXBQbGF5aW5nKCkKLSAgICAgKi8KLSAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBVTlNFTEVDVF9SRUFTT05fRElTQ09OTkVDVEVEID0gMTsKLSAgICAvKioKLSAgICAgKiBQYXNzZWQgdG8ge0BsaW5rIGFuZHJvaWQuc3VwcG9ydC52Ny5tZWRpYS5NZWRpYVJvdXRlUHJvdmlkZXIuUm91dGVDb250cm9sbGVyI29uVW5zZWxlY3QoaW50KX0KLSAgICAgKiBhbmQge0BsaW5rIENhbGxiYWNrI29uUm91dGVVbnNlbGVjdGVkKE1lZGlhUm91dGVyLCBSb3V0ZUluZm8sIGludCl9IHdoZW4gdGhlIHVzZXIgcHJlc3NlZAotICAgICAqIHRoZSBzdG9wIGNhc3RpbmcgYnV0dG9uLgotICAgICAqLwotICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFVOU0VMRUNUX1JFQVNPTl9TVE9QUEVEID0gMjsKLSAgICAvKioKLSAgICAgKiBQYXNzZWQgdG8ge0BsaW5rIGFuZHJvaWQuc3VwcG9ydC52Ny5tZWRpYS5NZWRpYVJvdXRlUHJvdmlkZXIuUm91dGVDb250cm9sbGVyI29uVW5zZWxlY3QoaW50KX0KLSAgICAgKiBhbmQge0BsaW5rIENhbGxiYWNrI29uUm91dGVVbnNlbGVjdGVkKE1lZGlhUm91dGVyLCBSb3V0ZUluZm8sIGludCl9IHdoZW4gdGhlIHVzZXIgc2VsZWN0ZWQKLSAgICAgKiBhIGRpZmZlcmVudCByb3V0ZS4KLSAgICAgKi8KLSAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBVTlNFTEVDVF9SRUFTT05fUk9VVEVfQ0hBTkdFRCA9IDM7Ci0KLSAgICAvLyBNYWludGFpbnMgZ2xvYmFsIG1lZGlhIHJvdXRlciBzdGF0ZSBmb3IgdGhlIHByb2Nlc3MuCi0gICAgLy8gVGhpcyBmaWVsZCBpcyBpbml0aWFsaXplZCBpbiBNZWRpYVJvdXRlci5nZXRJbnN0YW5jZSgpIGJlZm9yZSBhbnkKLSAgICAvLyBNZWRpYVJvdXRlciBvYmplY3RzIGFyZSBpbnN0YW50aWF0ZWQgc28gaXQgaXMgZ3VhcmFudGVlZCB0byBiZQotICAgIC8vIHZhbGlkIHdoZW5ldmVyIGFueSBpbnN0YW5jZSBtZXRob2QgaXMgaW52b2tlZC4KLSAgICBzdGF0aWMgR2xvYmFsTWVkaWFSb3V0ZXIgc0dsb2JhbDsKLQotICAgIC8vIENvbnRleHQtYm91bmQgc3RhdGUgb2YgdGhlIG1lZGlhIHJvdXRlci4KLSAgICBmaW5hbCBDb250ZXh0IG1Db250ZXh0OwotICAgIGZpbmFsIEFycmF5TGlzdDxDYWxsYmFja1JlY29yZD4gbUNhbGxiYWNrUmVjb3JkcyA9IG5ldyBBcnJheUxpc3Q8Q2FsbGJhY2tSZWNvcmQ+KCk7Ci0KLSAgICBASW50RGVmKGZsYWcgPSB0cnVlLAotICAgICAgICAgICAgdmFsdWUgPSB7Ci0gICAgICAgICAgICAgICAgICAgIENBTExCQUNLX0ZMQUdfUEVSRk9STV9BQ1RJVkVfU0NBTiwKLSAgICAgICAgICAgICAgICAgICAgQ0FMTEJBQ0tfRkxBR19SRVFVRVNUX0RJU0NPVkVSWSwKLSAgICAgICAgICAgICAgICAgICAgQ0FMTEJBQ0tfRkxBR19VTkZJTFRFUkVEX0VWRU5UUwotICAgICAgICAgICAgfQotICAgICkKLSAgICBAUmV0ZW50aW9uKFJldGVudGlvblBvbGljeS5TT1VSQ0UpCi0gICAgcHJpdmF0ZSBAaW50ZXJmYWNlIENhbGxiYWNrRmxhZ3Mge30KLQotICAgIC8qKgotICAgICAqIEZsYWcgZm9yIHtAbGluayAjYWRkQ2FsbGJhY2t9OiBBY3RpdmVseSBzY2FuIGZvciByb3V0ZXMgd2hpbGUgdGhpcyBjYWxsYmFjawotICAgICAqIGlzIHJlZ2lzdGVyZWQuCi0gICAgICogPHA+Ci0gICAgICogV2hlbiB0aGlzIGZsYWcgaXMgc3BlY2lmaWVkLCB0aGUgbWVkaWEgcm91dGVyIHdpbGwgYWN0aXZlbHkgc2NhbiBmb3IgbmV3Ci0gICAgICogcm91dGVzLiAgQ2VydGFpbiByb3V0ZXMsIHN1Y2ggYXMgd2lmaSBkaXNwbGF5IHJvdXRlcywgbWF5IG5vdCBiZSBkaXNjb3ZlcmFibGUKLSAgICAgKiBleGNlcHQgd2hlbiBhY3RpdmVseSBzY2FubmluZy4gIFRoaXMgZmxhZyBpcyB0eXBpY2FsbHkgdXNlZCB3aGVuIHRoZSByb3V0ZSBwaWNrZXIKLSAgICAgKiBkaWFsb2cgaGFzIGJlZW4gb3BlbmVkIGJ5IHRoZSB1c2VyIHRvIGVuc3VyZSB0aGF0IHRoZSByb3V0ZSBpbmZvcm1hdGlvbiBpcwotICAgICAqIHVwIHRvIGRhdGUuCi0gICAgICogPC9wPjxwPgotICAgICAqIEFjdGl2ZSBzY2FubmluZyBtYXkgY29uc3VtZSBhIHNpZ25pZmljYW50IGFtb3VudCBvZiBwb3dlciBhbmQgbWF5IGhhdmUgaW50cnVzaXZlCi0gICAgICogZWZmZWN0cyBvbiB3aXJlbGVzcyBjb25uZWN0aXZpdHkuICBUaGVyZWZvcmUgaXQgaXMgaW1wb3J0YW50IHRoYXQgYWN0aXZlIHNjYW5uaW5nCi0gICAgICogb25seSBiZSByZXF1ZXN0ZWQgd2hlbiBpdCBpcyBhY3R1YWxseSBuZWVkZWQgdG8gc2F0aXNmeSBhIHVzZXIgcmVxdWVzdCB0bwotICAgICAqIGRpc2NvdmVyIGFuZCBzZWxlY3QgYSBuZXcgcm91dGUuCi0gICAgICogPC9wPjxwPgotICAgICAqIFRoaXMgZmxhZyBpbXBsaWVzIHtAbGluayAjQ0FMTEJBQ0tfRkxBR19SRVFVRVNUX0RJU0NPVkVSWX0gYnV0IHBlcmZvcm1pbmcKLSAgICAgKiBhY3RpdmUgc2NhbnMgaXMgbXVjaCBtb3JlIGV4cGVuc2l2ZSB0aGFuIGEgbm9ybWFsIGRpc2NvdmVyeSByZXF1ZXN0LgotICAgICAqIDwvcD4KLSAgICAgKgotICAgICAqIEBzZWUgI0NBTExCQUNLX0ZMQUdfUkVRVUVTVF9ESVNDT1ZFUlkKLSAgICAgKi8KLSAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBDQUxMQkFDS19GTEFHX1BFUkZPUk1fQUNUSVZFX1NDQU4gPSAxIDw8IDA7Ci0KLSAgICAvKioKLSAgICAgKiBGbGFnIGZvciB7QGxpbmsgI2FkZENhbGxiYWNrfTogRG8gbm90IGZpbHRlciByb3V0ZSBldmVudHMuCi0gICAgICogPHA+Ci0gICAgICogV2hlbiB0aGlzIGZsYWcgaXMgc3BlY2lmaWVkLCB0aGUgY2FsbGJhY2sgd2lsbCBiZSBpbnZva2VkIGZvciBldmVudHMgdGhhdCBhZmZlY3QgYW55Ci0gICAgICogcm91dGUgZXZlbiBpZiB0aGV5IGRvIG5vdCBtYXRjaCB0aGUgY2FsbGJhY2sncyBmaWx0ZXIuCi0gICAgICogPC9wPgotICAgICAqLwotICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IENBTExCQUNLX0ZMQUdfVU5GSUxURVJFRF9FVkVOVFMgPSAxIDw8IDE7Ci0KLSAgICAvKioKLSAgICAgKiBGbGFnIGZvciB7QGxpbmsgI2FkZENhbGxiYWNrfTogUmVxdWVzdCBwYXNzaXZlIHJvdXRlIGRpc2NvdmVyeSB3aGlsZSB0aGlzCi0gICAgICogY2FsbGJhY2sgaXMgcmVnaXN0ZXJlZCwgZXhjZXB0IG9uIHtAbGluayBBY3Rpdml0eU1hbmFnZXIjaXNMb3dSYW1EZXZpY2UgbG93LVJBTSBkZXZpY2VzfS4KLSAgICAgKiA8cD4KLSAgICAgKiBXaGVuIHRoaXMgZmxhZyBpcyBzcGVjaWZpZWQsIHRoZSBtZWRpYSByb3V0ZXIgd2lsbCB0cnkgdG8gZGlzY292ZXIgcm91dGVzLgotICAgICAqIEFsdGhvdWdoIHJvdXRlIGRpc2NvdmVyeSBpcyBpbnRlbmRlZCB0byBiZSBlZmZpY2llbnQsIGNoZWNraW5nIGZvciBuZXcgcm91dGVzIG1heQotICAgICAqIHJlc3VsdCBpbiBzb21lIG5ldHdvcmsgYWN0aXZpdHkgYW5kIGNvdWxkIHNsb3dseSBkcmFpbiB0aGUgYmF0dGVyeS4gIFRoZXJlZm9yZQotICAgICAqIGFwcGxpY2F0aW9ucyBzaG91bGQgb25seSBzcGVjaWZ5IHtAbGluayAjQ0FMTEJBQ0tfRkxBR19SRVFVRVNUX0RJU0NPVkVSWX0gd2hlbgotICAgICAqIHRoZXkgYXJlIHJ1bm5pbmcgaW4gdGhlIGZvcmVncm91bmQgYW5kIHdvdWxkIGxpa2UgdG8gcHJvdmlkZSB0aGUgdXNlciB3aXRoIHRoZQotICAgICAqIG9wdGlvbiBvZiBjb25uZWN0aW5nIHRvIG5ldyByb3V0ZXMuCi0gICAgICogPC9wPjxwPgotICAgICAqIEFwcGxpY2F0aW9ucyBzaG91bGQgdHlwaWNhbGx5IGFkZCBhIGNhbGxiYWNrIHVzaW5nIHRoaXMgZmxhZyBpbiB0aGUKLSAgICAgKiB7QGxpbmsgYW5kcm9pZC5hcHAuQWN0aXZpdHkgYWN0aXZpdHknc30ge0BsaW5rIGFuZHJvaWQuYXBwLkFjdGl2aXR5I29uU3RhcnQgb25TdGFydH0KLSAgICAgKiBtZXRob2QgYW5kIHJlbW92ZSBpdCBpbiB0aGUge0BsaW5rIGFuZHJvaWQuYXBwLkFjdGl2aXR5I29uU3RvcCBvblN0b3B9IG1ldGhvZC4KLSAgICAgKiBUaGUge0BsaW5rIGFuZHJvaWQuc3VwcG9ydC52Ny5hcHAuTWVkaWFSb3V0ZURpc2NvdmVyeUZyYWdtZW50fSBmcmFnbWVudCBtYXkKLSAgICAgKiBhbHNvIGJlIHVzZWQgZm9yIHRoaXMgcHVycG9zZS4KLSAgICAgKiA8L3A+PHAgY2xhc3M9Im5vdGUiPgotICAgICAqIE9uIHtAbGluayBBY3Rpdml0eU1hbmFnZXIjaXNMb3dSYW1EZXZpY2UgbG93LVJBTSBkZXZpY2VzfSB0aGlzIGZsYWcKLSAgICAgKiB3aWxsIGJlIGlnbm9yZWQuICBSZWZlciB0bwotICAgICAqIHtAbGluayAjYWRkQ2FsbGJhY2soTWVkaWFSb3V0ZVNlbGVjdG9yLCBDYWxsYmFjaywgaW50KSBhZGRDYWxsYmFja30gZm9yIGRldGFpbHMuCi0gICAgICogPC9wPgotICAgICAqCi0gICAgICogQHNlZSBhbmRyb2lkLnN1cHBvcnQudjcuYXBwLk1lZGlhUm91dGVEaXNjb3ZlcnlGcmFnbWVudAotICAgICAqLwotICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IENBTExCQUNLX0ZMQUdfUkVRVUVTVF9ESVNDT1ZFUlkgPSAxIDw8IDI7Ci0KLSAgICAvKioKLSAgICAgKiBGbGFnIGZvciB7QGxpbmsgI2FkZENhbGxiYWNrfTogUmVxdWVzdCBwYXNzaXZlIHJvdXRlIGRpc2NvdmVyeSB3aGlsZSB0aGlzCi0gICAgICogY2FsbGJhY2sgaXMgcmVnaXN0ZXJlZCwgZXZlbiBvbiB7QGxpbmsgQWN0aXZpdHlNYW5hZ2VyI2lzTG93UmFtRGV2aWNlIGxvdy1SQU0gZGV2aWNlc30uCi0gICAgICogPHAgY2xhc3M9Im5vdGUiPgotICAgICAqIFRoaXMgZmxhZyBoYXMgYSBzaWduaWZpY2FudCBwZXJmb3JtYW5jZSBpbXBhY3Qgb24gbG93LVJBTSBkZXZpY2VzCi0gICAgICogc2luY2UgaXQgbWF5IGNhdXNlIG1hbnkgbWVkaWEgcm91dGUgcHJvdmlkZXJzIHRvIGJlIHN0YXJ0ZWQgc2ltdWx0YW5lb3VzbHkuCi0gICAgICogSXQgaXMgbXVjaCBiZXR0ZXIgdG8gdXNlIHtAbGluayAjQ0FMTEJBQ0tfRkxBR19SRVFVRVNUX0RJU0NPVkVSWX0gaW5zdGVhZCB0byBhdm9pZAotICAgICAqIHBlcmZvcm1pbmcgcGFzc2l2ZSBkaXNjb3Zlcnkgb24gdGhlc2UgZGV2aWNlcyBhbHRvZ2V0aGVyLiAgUmVmZXIgdG8KLSAgICAgKiB7QGxpbmsgI2FkZENhbGxiYWNrKE1lZGlhUm91dGVTZWxlY3RvciwgQ2FsbGJhY2ssIGludCkgYWRkQ2FsbGJhY2t9IGZvciBkZXRhaWxzLgotICAgICAqIDwvcD4KLSAgICAgKgotICAgICAqIEBzZWUgYW5kcm9pZC5zdXBwb3J0LnY3LmFwcC5NZWRpYVJvdXRlRGlzY292ZXJ5RnJhZ21lbnQKLSAgICAgKi8KLSAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBDQUxMQkFDS19GTEFHX0ZPUkNFX0RJU0NPVkVSWSA9IDEgPDwgMzsKLQotICAgIC8qKgotICAgICAqIEZsYWcgZm9yIHtAbGluayAjaXNSb3V0ZUF2YWlsYWJsZX06IElnbm9yZSB0aGUgZGVmYXVsdCByb3V0ZS4KLSAgICAgKiA8cD4KLSAgICAgKiBUaGlzIGZsYWcgaXMgdXNlZCB0byBkZXRlcm1pbmUgd2hldGhlciBhIG1hdGNoaW5nIG5vbi1kZWZhdWx0IHJvdXRlIGlzIGF2YWlsYWJsZS4KLSAgICAgKiBUaGlzIGNvbnN0cmFpbnQgbWF5IGJlIHVzZWQgdG8gZGVjaWRlIHdoZXRoZXIgdG8gb2ZmZXIgdGhlIHJvdXRlIGNob29zZXIgZGlhbG9nCi0gICAgICogdG8gdGhlIHVzZXIuICBUaGVyZSBpcyBubyBwb2ludCBvZmZlcmluZyB0aGUgY2hvb3NlciBpZiB0aGVyZSBhcmUgbm8KLSAgICAgKiBub24tZGVmYXVsdCBjaG9pY2VzLgotICAgICAqIDwvcD4KLSAgICAgKi8KLSAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBBVkFJTEFCSUxJVFlfRkxBR19JR05PUkVfREVGQVVMVF9ST1VURSA9IDEgPDwgMDsKLQotICAgIC8qKgotICAgICAqIEZsYWcgZm9yIHtAbGluayAjaXNSb3V0ZUF2YWlsYWJsZX06IFJlcXVpcmUgYW4gYWN0dWFsIHJvdXRlIHRvIGJlIG1hdGNoZWQuCi0gICAgICogPHA+Ci0gICAgICogSWYgdGhpcyBmbGFnIGlzIG5vdCBzZXQsIHRoZW4ge0BsaW5rICNpc1JvdXRlQXZhaWxhYmxlfSB3aWxsIHJldHVybiB0cnVlCi0gICAgICogaWYgaXQgaXMgcG9zc2libGUgdG8gZGlzY292ZXIgYSBtYXRjaGluZyByb3V0ZSBldmVuIGlmIGRpc2NvdmVyeSBpcyBub3QgaW4KLSAgICAgKiBwcm9ncmVzcyBvciBpZiBubyBtYXRjaGluZyByb3V0ZSBoYXMgeWV0IGJlZW4gZm91bmQuICBUaGlzIGZlYXR1cmUgaXMgdXNlZCB0bwotICAgICAqIHNhdmUgcmVzb3VyY2VzIGJ5IHJlbW92aW5nIHRoZSBuZWVkIHRvIHBlcmZvcm0gcGFzc2l2ZSByb3V0ZSBkaXNjb3Zlcnkgb24KLSAgICAgKiB7QGxpbmsgQWN0aXZpdHlNYW5hZ2VyI2lzTG93UmFtRGV2aWNlIGxvdy1SQU0gZGV2aWNlc30uCi0gICAgICogPC9wPjxwPgotICAgICAqIElmIHRoaXMgZmxhZyBpcyBzZXQsIHRoZW4ge0BsaW5rICNpc1JvdXRlQXZhaWxhYmxlfSB3aWxsIG9ubHkgcmV0dXJuIHRydWUgaWYKLSAgICAgKiBhIG1hdGNoaW5nIHJvdXRlIGhhcyBhY3R1YWxseSBiZWVuIGRpc2NvdmVyZWQuCi0gICAgICogPC9wPgotICAgICAqLwotICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEFWQUlMQUJJTElUWV9GTEFHX1JFUVVJUkVfTUFUQ0ggPSAxIDw8IDE7Ci0KLSAgICBwcml2YXRlIE1lZGlhUm91dGVyKENvbnRleHQgY29udGV4dCkgewotICAgICAgICBtQ29udGV4dCA9IGNvbnRleHQ7Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogR2V0cyBhbiBpbnN0YW5jZSBvZiB0aGUgbWVkaWEgcm91dGVyIHNlcnZpY2UgYXNzb2NpYXRlZCB3aXRoIHRoZSBjb250ZXh0LgotICAgICAqIDxwPgotICAgICAqIFRoZSBhcHBsaWNhdGlvbiBpcyByZXNwb25zaWJsZSBmb3IgaG9sZGluZyBhIHN0cm9uZyByZWZlcmVuY2UgdG8gdGhlIHJldHVybmVkCi0gICAgICoge0BsaW5rIE1lZGlhUm91dGVyfSBpbnN0YW5jZSwgc3VjaCBhcyBieSBzdG9yaW5nIHRoZSBpbnN0YW5jZSBpbiBhIGZpZWxkIG9mCi0gICAgICogdGhlIHtAbGluayBhbmRyb2lkLmFwcC5BY3Rpdml0eX0sIHRvIGVuc3VyZSB0aGF0IHRoZSBtZWRpYSByb3V0ZXIgcmVtYWlucyBhbGl2ZQotICAgICAqIGFzIGxvbmcgYXMgdGhlIGFwcGxpY2F0aW9uIGlzIHVzaW5nIGl0cyBmZWF0dXJlcy4KLSAgICAgKiA8L3A+PHA+Ci0gICAgICogSW4gb3RoZXIgd29yZHMsIHRoZSBzdXBwb3J0IGxpYnJhcnkgb25seSBob2xkcyBhIHtAbGluayBXZWFrUmVmZXJlbmNlIHdlYWsgcmVmZXJlbmNlfQotICAgICAqIHRvIGVhY2ggbWVkaWEgcm91dGVyIGluc3RhbmNlLiAgV2hlbiB0aGVyZSBhcmUgbm8gcmVtYWluaW5nIHN0cm9uZyByZWZlcmVuY2VzIHRvIHRoZQotICAgICAqIG1lZGlhIHJvdXRlciBpbnN0YW5jZSwgYWxsIG9mIGl0cyBjYWxsYmFja3Mgd2lsbCBiZSByZW1vdmVkIGFuZCByb3V0ZSBkaXNjb3ZlcnkKLSAgICAgKiB3aWxsIG5vIGxvbmdlciBiZSBwZXJmb3JtZWQgb24gaXRzIGJlaGFsZi4KLSAgICAgKiA8L3A+Ci0gICAgICoKLSAgICAgKiBAcmV0dXJuIFRoZSBtZWRpYSByb3V0ZXIgaW5zdGFuY2UgZm9yIHRoZSBjb250ZXh0LiAgVGhlIGFwcGxpY2F0aW9uIG11c3QgaG9sZAotICAgICAqIGEgc3Ryb25nIHJlZmVyZW5jZSB0byB0aGlzIG9iamVjdCBhcyBsb25nIGFzIGl0IGlzIGluIHVzZS4KLSAgICAgKi8KLSAgICBwdWJsaWMgc3RhdGljIE1lZGlhUm91dGVyIGdldEluc3RhbmNlKEBOb25OdWxsIENvbnRleHQgY29udGV4dCkgewotICAgICAgICBpZiAoY29udGV4dCA9PSBudWxsKSB7Ci0gICAgICAgICAgICB0aHJvdyBuZXcgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKCJjb250ZXh0IG11c3Qgbm90IGJlIG51bGwiKTsKLSAgICAgICAgfQotICAgICAgICBjaGVja0NhbGxpbmdUaHJlYWQoKTsKLQotICAgICAgICBpZiAoc0dsb2JhbCA9PSBudWxsKSB7Ci0gICAgICAgICAgICBzR2xvYmFsID0gbmV3IEdsb2JhbE1lZGlhUm91dGVyKGNvbnRleHQuZ2V0QXBwbGljYXRpb25Db250ZXh0KCkpOwotICAgICAgICAgICAgc0dsb2JhbC5zdGFydCgpOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiBzR2xvYmFsLmdldFJvdXRlcihjb250ZXh0KTsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBHZXRzIGluZm9ybWF0aW9uIGFib3V0IHRoZSB7QGxpbmsgTWVkaWFSb3V0ZXIuUm91dGVJbmZvIHJvdXRlc30gY3VycmVudGx5IGtub3duIHRvCi0gICAgICogdGhpcyBtZWRpYSByb3V0ZXIuCi0gICAgICovCi0gICAgcHVibGljIExpc3Q8Um91dGVJbmZvPiBnZXRSb3V0ZXMoKSB7Ci0gICAgICAgIGNoZWNrQ2FsbGluZ1RocmVhZCgpOwotICAgICAgICByZXR1cm4gc0dsb2JhbC5nZXRSb3V0ZXMoKTsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBHZXRzIGluZm9ybWF0aW9uIGFib3V0IHRoZSB7QGxpbmsgTWVkaWFSb3V0ZXIuUHJvdmlkZXJJbmZvIHJvdXRlIHByb3ZpZGVyc30KLSAgICAgKiBjdXJyZW50bHkga25vd24gdG8gdGhpcyBtZWRpYSByb3V0ZXIuCi0gICAgICovCi0gICAgcHVibGljIExpc3Q8UHJvdmlkZXJJbmZvPiBnZXRQcm92aWRlcnMoKSB7Ci0gICAgICAgIGNoZWNrQ2FsbGluZ1RocmVhZCgpOwotICAgICAgICByZXR1cm4gc0dsb2JhbC5nZXRQcm92aWRlcnMoKTsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBHZXRzIHRoZSBkZWZhdWx0IHJvdXRlIGZvciBwbGF5aW5nIG1lZGlhIGNvbnRlbnQgb24gdGhlIHN5c3RlbS4KLSAgICAgKiA8cD4KLSAgICAgKiBUaGUgc3lzdGVtIGFsd2F5cyBwcm92aWRlcyBhIGRlZmF1bHQgcm91dGUuCi0gICAgICogPC9wPgotICAgICAqCi0gICAgICogQHJldHVybiBUaGUgZGVmYXVsdCByb3V0ZSwgd2hpY2ggaXMgZ3VhcmFudGVlZCB0byBuZXZlciBiZSBudWxsLgotICAgICAqLwotICAgIEBOb25OdWxsCi0gICAgcHVibGljIFJvdXRlSW5mbyBnZXREZWZhdWx0Um91dGUoKSB7Ci0gICAgICAgIGNoZWNrQ2FsbGluZ1RocmVhZCgpOwotICAgICAgICByZXR1cm4gc0dsb2JhbC5nZXREZWZhdWx0Um91dGUoKTsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBHZXRzIGEgYmx1ZXRvb3RoIHJvdXRlIGZvciBwbGF5aW5nIG1lZGlhIGNvbnRlbnQgb24gdGhlIHN5c3RlbS4KLSAgICAgKgotICAgICAqIEByZXR1cm4gQSBibHVldG9vdGggcm91dGUsIGlmIGV4aXN0LCBvdGhlcndpc2UgbnVsbC4KLSAgICAgKi8KLSAgICBwdWJsaWMgUm91dGVJbmZvIGdldEJsdWV0b290aFJvdXRlKCkgewotICAgICAgICBjaGVja0NhbGxpbmdUaHJlYWQoKTsKLSAgICAgICAgcmV0dXJuIHNHbG9iYWwuZ2V0Qmx1ZXRvb3RoUm91dGUoKTsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBHZXRzIHRoZSBjdXJyZW50bHkgc2VsZWN0ZWQgcm91dGUuCi0gICAgICogPHA+Ci0gICAgICogVGhlIGFwcGxpY2F0aW9uIHNob3VsZCBleGFtaW5lIHRoZSByb3V0ZSdzCi0gICAgICoge0BsaW5rIFJvdXRlSW5mbyNnZXRDb250cm9sRmlsdGVycyBtZWRpYSBjb250cm9sIGludGVudCBmaWx0ZXJzfSB0byBhc3Nlc3MgdGhlCi0gICAgICogY2FwYWJpbGl0aWVzIG9mIHRoZSByb3V0ZSBiZWZvcmUgYXR0ZW1wdGluZyB0byB1c2UgaXQuCi0gICAgICogPC9wPgotICAgICAqCi0gICAgICogPGgzPkV4YW1wbGU8L2gzPgotICAgICAqIDxwcmU+Ci0gICAgICogcHVibGljIGJvb2xlYW4gcGxheU1vdmllKCkgewotICAgICAqICAgICBNZWRpYVJvdXRlciBtZWRpYVJvdXRlciA9IE1lZGlhUm91dGVyLmdldEluc3RhbmNlKGNvbnRleHQpOwotICAgICAqICAgICBNZWRpYVJvdXRlci5Sb3V0ZUluZm8gcm91dGUgPSBtZWRpYVJvdXRlci5nZXRTZWxlY3RlZFJvdXRlKCk7Ci0gICAgICoKLSAgICAgKiAgICAgLy8gRmlyc3QgdHJ5IHVzaW5nIHRoZSByZW1vdGUgcGxheWJhY2sgaW50ZXJmYWNlLCBpZiBzdXBwb3J0ZWQuCi0gICAgICogICAgIGlmIChyb3V0ZS5zdXBwb3J0c0NvbnRyb2xDYXRlZ29yeShNZWRpYUNvbnRyb2xJbnRlbnQuQ0FURUdPUllfUkVNT1RFX1BMQVlCQUNLKSkgewotICAgICAqICAgICAgICAgLy8gVGhlIHJvdXRlIHN1cHBvcnRzIHJlbW90ZSBwbGF5YmFjay4KLSAgICAgKiAgICAgICAgIC8vIFRyeSB0byBzZW5kIGl0IHRoZSBVcmkgb2YgdGhlIG1vdmllIHRvIHBsYXkuCi0gICAgICogICAgICAgICBJbnRlbnQgaW50ZW50ID0gbmV3IEludGVudChNZWRpYUNvbnRyb2xJbnRlbnQuQUNUSU9OX1BMQVkpOwotICAgICAqICAgICAgICAgaW50ZW50LmFkZENhdGVnb3J5KE1lZGlhQ29udHJvbEludGVudC5DQVRFR09SWV9SRU1PVEVfUExBWUJBQ0spOwotICAgICAqICAgICAgICAgaW50ZW50LnNldERhdGFBbmRUeXBlKCJodHRwOi8vZXhhbXBsZS5jb20vdmlkZW9zL21vdmllLm1wNCIsICJ2aWRlby9tcDQiKTsKLSAgICAgKiAgICAgICAgIGlmIChyb3V0ZS5zdXBwb3J0c0NvbnRyb2xSZXF1ZXN0KGludGVudCkpIHsKLSAgICAgKiAgICAgICAgICAgICByb3V0ZS5zZW5kQ29udHJvbFJlcXVlc3QoaW50ZW50LCBudWxsKTsKLSAgICAgKiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsgLy8gc2VudCB0aGUgcmVxdWVzdCB0byBwbGF5IHRoZSBtb3ZpZQotICAgICAqICAgICAgICAgfQotICAgICAqICAgICB9Ci0gICAgICoKLSAgICAgKiAgICAgLy8gSWYgcmVtb3RlIHBsYXliYWNrIHdhcyBub3QgcG9zc2libGUsIHRoZW4gcGxheSBsb2NhbGx5LgotICAgICAqICAgICBpZiAocm91dGUuc3VwcG9ydHNDb250cm9sQ2F0ZWdvcnkoTWVkaWFDb250cm9sSW50ZW50LkNBVEVHT1JZX0xJVkVfVklERU8pKSB7Ci0gICAgICogICAgICAgICAvLyBUaGUgcm91dGUgc3VwcG9ydHMgbGl2ZSB2aWRlbyBzdHJlYW1pbmcuCi0gICAgICogICAgICAgICAvLyBQcmVwYXJlIHRvIHBsYXkgY29udGVudCBsb2NhbGx5IGluIGEgd2luZG93IG9yIGluIGEgcHJlc2VudGF0aW9uLgotICAgICAqICAgICAgICAgcmV0dXJuIHBsYXlNb3ZpZUluV2luZG93KCk7Ci0gICAgICogICAgIH0KLSAgICAgKgotICAgICAqICAgICAvLyBOZWl0aGVyIGludGVyZmFjZSBpcyBzdXBwb3J0ZWQsIHNvIHdlIGNhbid0IHBsYXkgdGhlIG1vdmllIHRvIHRoaXMgcm91dGUuCi0gICAgICogICAgIHJldHVybiBmYWxzZTsKLSAgICAgKiB9Ci0gICAgICogPC9wcmU+Ci0gICAgICoKLSAgICAgKiBAcmV0dXJuIFRoZSBzZWxlY3RlZCByb3V0ZSwgd2hpY2ggaXMgZ3VhcmFudGVlZCB0byBuZXZlciBiZSBudWxsLgotICAgICAqCi0gICAgICogQHNlZSBSb3V0ZUluZm8jZ2V0Q29udHJvbEZpbHRlcnMKLSAgICAgKiBAc2VlIFJvdXRlSW5mbyNzdXBwb3J0c0NvbnRyb2xDYXRlZ29yeQotICAgICAqIEBzZWUgUm91dGVJbmZvI3N1cHBvcnRzQ29udHJvbFJlcXVlc3QKLSAgICAgKi8KLSAgICBATm9uTnVsbAotICAgIHB1YmxpYyBSb3V0ZUluZm8gZ2V0U2VsZWN0ZWRSb3V0ZSgpIHsKLSAgICAgICAgY2hlY2tDYWxsaW5nVGhyZWFkKCk7Ci0gICAgICAgIHJldHVybiBzR2xvYmFsLmdldFNlbGVjdGVkUm91dGUoKTsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBSZXR1cm5zIHRoZSBzZWxlY3RlZCByb3V0ZSBpZiBpdCBtYXRjaGVzIHRoZSBzcGVjaWZpZWQgc2VsZWN0b3IsIG90aGVyd2lzZQotICAgICAqIHNlbGVjdHMgdGhlIGRlZmF1bHQgcm91dGUgYW5kIHJldHVybnMgaXQuIElmIHRoZXJlIGlzIG9uZSBsaXZlIGF1ZGlvIHJvdXRlCi0gICAgICogKHVzdWFsbHkgQmx1ZXRvb3RoIEEyRFApLCBpdCB3aWxsIGJlIHNlbGVjdGVkIGluc3RlYWQgb2YgZGVmYXVsdCByb3V0ZS4KLSAgICAgKgotICAgICAqIEBwYXJhbSBzZWxlY3RvciBUaGUgc2VsZWN0b3IgdG8gbWF0Y2guCi0gICAgICogQHJldHVybiBUaGUgcHJldmlvdXNseSBzZWxlY3RlZCByb3V0ZSBpZiBpdCBtYXRjaGVkIHRoZSBzZWxlY3Rvciwgb3RoZXJ3aXNlIHRoZQotICAgICAqIG5ld2x5IHNlbGVjdGVkIGRlZmF1bHQgcm91dGUgd2hpY2ggaXMgZ3VhcmFudGVlZCB0byBuZXZlciBiZSBudWxsLgotICAgICAqCi0gICAgICogQHNlZSBNZWRpYVJvdXRlU2VsZWN0b3IKLSAgICAgKiBAc2VlIFJvdXRlSW5mbyNtYXRjaGVzU2VsZWN0b3IKLSAgICAgKi8KLSAgICBATm9uTnVsbAotICAgIHB1YmxpYyBSb3V0ZUluZm8gdXBkYXRlU2VsZWN0ZWRSb3V0ZShATm9uTnVsbCBNZWRpYVJvdXRlU2VsZWN0b3Igc2VsZWN0b3IpIHsKLSAgICAgICAgaWYgKHNlbGVjdG9yID09IG51bGwpIHsKLSAgICAgICAgICAgIHRocm93IG5ldyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oInNlbGVjdG9yIG11c3Qgbm90IGJlIG51bGwiKTsKLSAgICAgICAgfQotICAgICAgICBjaGVja0NhbGxpbmdUaHJlYWQoKTsKLQotICAgICAgICBpZiAoREVCVUcpIHsKLSAgICAgICAgICAgIExvZy5kKFRBRywgInVwZGF0ZVNlbGVjdGVkUm91dGU6ICIgKyBzZWxlY3Rvcik7Ci0gICAgICAgIH0KLSAgICAgICAgUm91dGVJbmZvIHJvdXRlID0gc0dsb2JhbC5nZXRTZWxlY3RlZFJvdXRlKCk7Ci0gICAgICAgIGlmICghcm91dGUuaXNEZWZhdWx0T3JCbHVldG9vdGgoKSAmJiAhcm91dGUubWF0Y2hlc1NlbGVjdG9yKHNlbGVjdG9yKSkgewotICAgICAgICAgICAgcm91dGUgPSBzR2xvYmFsLmNob29zZUZhbGxiYWNrUm91dGUoKTsKLSAgICAgICAgICAgIHNHbG9iYWwuc2VsZWN0Um91dGUocm91dGUpOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiByb3V0ZTsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBTZWxlY3RzIHRoZSBzcGVjaWZpZWQgcm91dGUuCi0gICAgICoKLSAgICAgKiBAcGFyYW0gcm91dGUgVGhlIHJvdXRlIHRvIHNlbGVjdC4KLSAgICAgKi8KLSAgICBwdWJsaWMgdm9pZCBzZWxlY3RSb3V0ZShATm9uTnVsbCBSb3V0ZUluZm8gcm91dGUpIHsKLSAgICAgICAgaWYgKHJvdXRlID09IG51bGwpIHsKLSAgICAgICAgICAgIHRocm93IG5ldyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oInJvdXRlIG11c3Qgbm90IGJlIG51bGwiKTsKLSAgICAgICAgfQotICAgICAgICBjaGVja0NhbGxpbmdUaHJlYWQoKTsKLQotICAgICAgICBpZiAoREVCVUcpIHsKLSAgICAgICAgICAgIExvZy5kKFRBRywgInNlbGVjdFJvdXRlOiAiICsgcm91dGUpOwotICAgICAgICB9Ci0gICAgICAgIHNHbG9iYWwuc2VsZWN0Um91dGUocm91dGUpOwotICAgIH0KLQotICAgIC8qKgotICAgICAqIFVuc2VsZWN0cyB0aGUgY3VycmVudCByb3VuZCBhbmQgc2VsZWN0cyB0aGUgZGVmYXVsdCByb3V0ZSBpbnN0ZWFkLgotICAgICAqIDxwPgotICAgICAqIFRoZSByZWFzb24gZ2l2ZW4gbXVzdCBiZSBvbmUgb2Y6Ci0gICAgICogPHVsPgotICAgICAqIDxsaT57QGxpbmsgTWVkaWFSb3V0ZXIjVU5TRUxFQ1RfUkVBU09OX1VOS05PV059PC9saT4KLSAgICAgKiA8bGk+e0BsaW5rIE1lZGlhUm91dGVyI1VOU0VMRUNUX1JFQVNPTl9ESVNDT05ORUNURUR9PC9saT4KLSAgICAgKiA8bGk+e0BsaW5rIE1lZGlhUm91dGVyI1VOU0VMRUNUX1JFQVNPTl9TVE9QUEVEfTwvbGk+Ci0gICAgICogPGxpPntAbGluayBNZWRpYVJvdXRlciNVTlNFTEVDVF9SRUFTT05fUk9VVEVfQ0hBTkdFRH08L2xpPgotICAgICAqIDwvdWw+Ci0gICAgICoKLSAgICAgKiBAcGFyYW0gcmVhc29uIFRoZSByZWFzb24gZm9yIGRpc2Nvbm5lY3RpbmcgdGhlIGN1cnJlbnQgcm91dGUuCi0gICAgICovCi0gICAgcHVibGljIHZvaWQgdW5zZWxlY3QoaW50IHJlYXNvbikgewotICAgICAgICBpZiAocmVhc29uIDwgTWVkaWFSb3V0ZXIuVU5TRUxFQ1RfUkVBU09OX1VOS05PV04gfHwKLSAgICAgICAgICAgICAgICByZWFzb24gPiBNZWRpYVJvdXRlci5VTlNFTEVDVF9SRUFTT05fUk9VVEVfQ0hBTkdFRCkgewotICAgICAgICAgICAgdGhyb3cgbmV3IElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbigiVW5zdXBwb3J0ZWQgcmVhc29uIHRvIHVuc2VsZWN0IHJvdXRlIik7Ci0gICAgICAgIH0KLSAgICAgICAgY2hlY2tDYWxsaW5nVGhyZWFkKCk7Ci0KLSAgICAgICAgLy8gQ2hvb3NlIHRoZSBmYWxsYmFjayByb3V0ZSBpZiBpdCdzIG5vdCBhbHJlYWR5IHNlbGVjdGVkLgotICAgICAgICAvLyBPdGhlcndpc2UsIHNlbGVjdCB0aGUgZGVmYXVsdCByb3V0ZS4KLSAgICAgICAgUm91dGVJbmZvIGZhbGxiYWNrUm91dGUgPSBzR2xvYmFsLmNob29zZUZhbGxiYWNrUm91dGUoKTsKLSAgICAgICAgaWYgKHNHbG9iYWwuZ2V0U2VsZWN0ZWRSb3V0ZSgpICE9IGZhbGxiYWNrUm91dGUpIHsKLSAgICAgICAgICAgIHNHbG9iYWwuc2VsZWN0Um91dGUoZmFsbGJhY2tSb3V0ZSwgcmVhc29uKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIHNHbG9iYWwuc2VsZWN0Um91dGUoc0dsb2JhbC5nZXREZWZhdWx0Um91dGUoKSwgcmVhc29uKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIC8qKgotICAgICAqIFJldHVybnMgdHJ1ZSBpZiB0aGVyZSBpcyBhIHJvdXRlIHRoYXQgbWF0Y2hlcyB0aGUgc3BlY2lmaWVkIHNlbGVjdG9yLgotICAgICAqIDxwPgotICAgICAqIFRoaXMgbWV0aG9kIHJldHVybnMgdHJ1ZSBpZiB0aGVyZSBhcmUgYW55IGF2YWlsYWJsZSByb3V0ZXMgdGhhdCBtYXRjaCB0aGUKLSAgICAgKiBzZWxlY3RvciByZWdhcmRsZXNzIG9mIHdoZXRoZXIgdGhleSBhcmUgZW5hYmxlZCBvciBkaXNhYmxlZC4gSWYgdGhlCi0gICAgICoge0BsaW5rICNBVkFJTEFCSUxJVFlfRkxBR19JR05PUkVfREVGQVVMVF9ST1VURX0gZmxhZyBpcyBzcGVjaWZpZWQsIHRoZW4KLSAgICAgKiB0aGUgbWV0aG9kIHdpbGwgb25seSBjb25zaWRlciBub24tZGVmYXVsdCByb3V0ZXMuCi0gICAgICogPC9wPgotICAgICAqIDxwIGNsYXNzPSJub3RlIj4KLSAgICAgKiBPbiB7QGxpbmsgQWN0aXZpdHlNYW5hZ2VyI2lzTG93UmFtRGV2aWNlIGxvdy1SQU0gZGV2aWNlc30gdGhpcyBtZXRob2QKLSAgICAgKiB3aWxsIHJldHVybiB0cnVlIGlmIGl0IGlzIHBvc3NpYmxlIHRvIGRpc2NvdmVyIGEgbWF0Y2hpbmcgcm91dGUgZXZlbiBpZgotICAgICAqIGRpc2NvdmVyeSBpcyBub3QgaW4gcHJvZ3Jlc3Mgb3IgaWYgbm8gbWF0Y2hpbmcgcm91dGUgaGFzIHlldCBiZWVuIGZvdW5kLgotICAgICAqIFVzZSB7QGxpbmsgI0FWQUlMQUJJTElUWV9GTEFHX1JFUVVJUkVfTUFUQ0h9IHRvIHJlcXVpcmUgYW4gYWN0dWFsIG1hdGNoLgotICAgICAqIDwvcD4KLSAgICAgKgotICAgICAqIEBwYXJhbSBzZWxlY3RvciBUaGUgc2VsZWN0b3IgdG8gbWF0Y2guCi0gICAgICogQHBhcmFtIGZsYWdzIEZsYWdzIHRvIGNvbnRyb2wgdGhlIGRldGVybWluYXRpb24gb2Ygd2hldGhlciBhIHJvdXRlIG1heSBiZQotICAgICAqICAgICAgICAgICAgYXZhaWxhYmxlLiBNYXkgYmUgemVybyBvciBzb21lIGNvbWJpbmF0aW9uIG9mCi0gICAgICogICAgICAgICAgICB7QGxpbmsgI0FWQUlMQUJJTElUWV9GTEFHX0lHTk9SRV9ERUZBVUxUX1JPVVRFfSBhbmQKLSAgICAgKiAgICAgICAgICAgIHtAbGluayAjQVZBSUxBQklMSVRZX0ZMQUdfUkVRVUlSRV9NQVRDSH0uCi0gICAgICogQHJldHVybiBUcnVlIGlmIGEgbWF0Y2hpbmcgcm91dGUgbWF5IGJlIGF2YWlsYWJsZS4KLSAgICAgKi8KLSAgICBwdWJsaWMgYm9vbGVhbiBpc1JvdXRlQXZhaWxhYmxlKEBOb25OdWxsIE1lZGlhUm91dGVTZWxlY3RvciBzZWxlY3RvciwgaW50IGZsYWdzKSB7Ci0gICAgICAgIGlmIChzZWxlY3RvciA9PSBudWxsKSB7Ci0gICAgICAgICAgICB0aHJvdyBuZXcgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKCJzZWxlY3RvciBtdXN0IG5vdCBiZSBudWxsIik7Ci0gICAgICAgIH0KLSAgICAgICAgY2hlY2tDYWxsaW5nVGhyZWFkKCk7Ci0KLSAgICAgICAgcmV0dXJuIHNHbG9iYWwuaXNSb3V0ZUF2YWlsYWJsZShzZWxlY3RvciwgZmxhZ3MpOwotICAgIH0KLQotICAgIC8qKgotICAgICAqIFJlZ2lzdGVycyBhIGNhbGxiYWNrIHRvIGRpc2NvdmVyIHJvdXRlcyB0aGF0IG1hdGNoIHRoZSBzZWxlY3RvciBhbmQgdG8gcmVjZWl2ZQotICAgICAqIGV2ZW50cyB3aGVuIHRoZXkgY2hhbmdlLgotICAgICAqIDxwPgotICAgICAqIFRoaXMgaXMgYSBjb252ZW5pZW5jZSBtZXRob2QgdGhhdCBoYXMgdGhlIHNhbWUgZWZmZWN0IGFzIGNhbGxpbmcKLSAgICAgKiB7QGxpbmsgI2FkZENhbGxiYWNrKE1lZGlhUm91dGVTZWxlY3RvciwgQ2FsbGJhY2ssIGludCl9IHdpdGhvdXQgZmxhZ3MuCi0gICAgICogPC9wPgotICAgICAqCi0gICAgICogQHBhcmFtIHNlbGVjdG9yIEEgcm91dGUgc2VsZWN0b3IgdGhhdCBpbmRpY2F0ZXMgdGhlIGtpbmRzIG9mIHJvdXRlcyB0aGF0IHRoZQotICAgICAqIGNhbGxiYWNrIHdvdWxkIGxpa2UgdG8gZGlzY292ZXIuCi0gICAgICogQHBhcmFtIGNhbGxiYWNrIFRoZSBjYWxsYmFjayB0byBhZGQuCi0gICAgICogQHNlZSAjcmVtb3ZlQ2FsbGJhY2sKLSAgICAgKi8KLSAgICBwdWJsaWMgdm9pZCBhZGRDYWxsYmFjayhNZWRpYVJvdXRlU2VsZWN0b3Igc2VsZWN0b3IsIENhbGxiYWNrIGNhbGxiYWNrKSB7Ci0gICAgICAgIGFkZENhbGxiYWNrKHNlbGVjdG9yLCBjYWxsYmFjaywgMCk7Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogUmVnaXN0ZXJzIGEgY2FsbGJhY2sgdG8gZGlzY292ZXIgcm91dGVzIHRoYXQgbWF0Y2ggdGhlIHNlbGVjdG9yIGFuZCB0byByZWNlaXZlCi0gICAgICogZXZlbnRzIHdoZW4gdGhleSBjaGFuZ2UuCi0gICAgICogPHA+Ci0gICAgICogVGhlIHNlbGVjdG9yIGRlc2NyaWJlcyB0aGUga2luZHMgb2Ygcm91dGVzIHRoYXQgdGhlIGFwcGxpY2F0aW9uIHdhbnRzIHRvCi0gICAgICogZGlzY292ZXIuICBGb3IgZXhhbXBsZSwgaWYgdGhlIGFwcGxpY2F0aW9uIHdhbnRzIHRvIHVzZQotICAgICAqIGxpdmUgYXVkaW8gcm91dGVzIHRoZW4gaXQgc2hvdWxkIGluY2x1ZGUgdGhlCi0gICAgICoge0BsaW5rIE1lZGlhQ29udHJvbEludGVudCNDQVRFR09SWV9MSVZFX0FVRElPIGxpdmUgYXVkaW8gbWVkaWEgY29udHJvbCBpbnRlbnQgY2F0ZWdvcnl9Ci0gICAgICogaW4gaXRzIHNlbGVjdG9yIHdoZW4gaXQgYWRkcyBhIGNhbGxiYWNrIHRvIHRoZSBtZWRpYSByb3V0ZXIuCi0gICAgICogVGhlIHNlbGVjdG9yIG1heSBpbmNsdWRlIGFueSBudW1iZXIgb2YgY2F0ZWdvcmllcy4KLSAgICAgKiA8L3A+PHA+Ci0gICAgICogSWYgdGhlIGNhbGxiYWNrIGhhcyBhbHJlYWR5IGJlZW4gcmVnaXN0ZXJlZCwgdGhlbiB0aGUgc2VsZWN0b3IgaXMgYWRkZWQgdG8KLSAgICAgKiB0aGUgc2V0IG9mIHNlbGVjdG9ycyBiZWluZyBtb25pdG9yZWQgYnkgdGhlIGNhbGxiYWNrLgotICAgICAqIDwvcD48cD4KLSAgICAgKiBCeSBkZWZhdWx0LCB0aGUgY2FsbGJhY2sgd2lsbCBvbmx5IGJlIGludm9rZWQgZm9yIGV2ZW50cyB0aGF0IGFmZmVjdCByb3V0ZXMKLSAgICAgKiB0aGF0IG1hdGNoIHRoZSBzcGVjaWZpZWQgc2VsZWN0b3IuICBFdmVudCBmaWx0ZXJpbmcgbWF5IGJlIGRpc2FibGVkIGJ5IHNwZWNpZnlpbmcKLSAgICAgKiB0aGUge0BsaW5rICNDQUxMQkFDS19GTEFHX1VORklMVEVSRURfRVZFTlRTfSBmbGFnIHdoZW4gdGhlIGNhbGxiYWNrIGlzIHJlZ2lzdGVyZWQuCi0gICAgICogPC9wPjxwPgotICAgICAqIEFwcGxpY2F0aW9ucyBzaG91bGQgdXNlIHRoZSB7QGxpbmsgI2lzUm91dGVBdmFpbGFibGV9IG1ldGhvZCB0byBkZXRlcm1pbmUKLSAgICAgKiB3aGV0aGVyIGlzIGl0IHBvc3NpYmxlIHRvIGRpc2NvdmVyIGEgcm91dGUgd2l0aCB0aGUgZGVzaXJlZCBjYXBhYmlsaXRpZXMKLSAgICAgKiBhbmQgdGhlcmVmb3JlIHdoZXRoZXIgdGhlIG1lZGlhIHJvdXRlIGJ1dHRvbiBzaG91bGQgYmUgc2hvd24gdG8gdGhlIHVzZXIuCi0gICAgICogPC9wPjxwPgotICAgICAqIFRoZSB7QGxpbmsgI0NBTExCQUNLX0ZMQUdfUkVRVUVTVF9ESVNDT1ZFUll9IGZsYWcgc2hvdWxkIGJlIHVzZWQgd2hpbGUgdGhlIGFwcGxpY2F0aW9uCi0gICAgICogaXMgaW4gdGhlIGZvcmVncm91bmQgdG8gcmVxdWVzdCB0aGF0IHBhc3NpdmUgZGlzY292ZXJ5IGJlIHBlcmZvcm1lZCBpZiB0aGVyZSBhcmUKLSAgICAgKiBzdWZmaWNpZW50IHJlc291cmNlcyB0byBhbGxvdyBjb250aW51b3VzIHBhc3NpdmUgZGlzY292ZXJ5LgotICAgICAqIE9uIHtAbGluayBBY3Rpdml0eU1hbmFnZXIjaXNMb3dSYW1EZXZpY2UgbG93LVJBTSBkZXZpY2VzfSB0aGlzIGZsYWcgd2lsbCBiZQotICAgICAqIGlnbm9yZWQgdG8gY29uc2VydmUgcmVzb3VyY2VzLgotICAgICAqIDwvcD48cD4KLSAgICAgKiBUaGUge0BsaW5rICNDQUxMQkFDS19GTEFHX0ZPUkNFX0RJU0NPVkVSWX0gZmxhZyBzaG91bGQgYmUgdXNlZCB3aGVuCi0gICAgICogcGFzc2l2ZSBkaXNjb3ZlcnkgYWJzb2x1dGVseSBtdXN0IGJlIHBlcmZvcm1lZCwgZXZlbiBvbiBsb3ctUkFNIGRldmljZXMuCi0gICAgICogVGhpcyBmbGFnIGhhcyBhIHNpZ25pZmljYW50IHBlcmZvcm1hbmNlIGltcGFjdCBvbiBsb3ctUkFNIGRldmljZXMKLSAgICAgKiBzaW5jZSBpdCBtYXkgY2F1c2UgbWFueSBtZWRpYSByb3V0ZSBwcm92aWRlcnMgdG8gYmUgc3RhcnRlZCBzaW11bHRhbmVvdXNseS4KLSAgICAgKiBJdCBpcyBtdWNoIGJldHRlciB0byB1c2Uge0BsaW5rICNDQUxMQkFDS19GTEFHX1JFUVVFU1RfRElTQ09WRVJZfSBpbnN0ZWFkIHRvIGF2b2lkCi0gICAgICogcGVyZm9ybWluZyBwYXNzaXZlIGRpc2NvdmVyeSBvbiB0aGVzZSBkZXZpY2VzIGFsdG9nZXRoZXIuCi0gICAgICogPC9wPjxwPgotICAgICAqIFRoZSB7QGxpbmsgI0NBTExCQUNLX0ZMQUdfUEVSRk9STV9BQ1RJVkVfU0NBTn0gZmxhZyBzaG91bGQgYmUgdXNlZCB3aGVuIHRoZQotICAgICAqIG1lZGlhIHJvdXRlIGNob29zZXIgZGlhbG9nIGlzIHNob3dpbmcgdG8gY29uZmlybSB0aGUgcHJlc2VuY2Ugb2YgYXZhaWxhYmxlCi0gICAgICogcm91dGVzIHRoYXQgdGhlIHVzZXIgbWF5IGNvbm5lY3QgdG8uICBUaGlzIGZsYWcgbWF5IHVzZSBzdWJzdGFudGlhbGx5IG1vcmUKLSAgICAgKiBwb3dlci4KLSAgICAgKiA8L3A+Ci0gICAgICoKLSAgICAgKiA8aDM+RXhhbXBsZTwvaDM+Ci0gICAgICogPHByZT4KLSAgICAgKiBwdWJsaWMgY2xhc3MgTXlBY3Rpdml0eSBleHRlbmRzIEFjdGl2aXR5IHsKLSAgICAgKiAgICAgcHJpdmF0ZSBNZWRpYVJvdXRlciBtUm91dGVyOwotICAgICAqICAgICBwcml2YXRlIE1lZGlhUm91dGVyLkNhbGxiYWNrIG1DYWxsYmFjazsKLSAgICAgKiAgICAgcHJpdmF0ZSBNZWRpYVJvdXRlU2VsZWN0b3IgbVNlbGVjdG9yOwotICAgICAqCi0gICAgICogICAgIHByb3RlY3RlZCB2b2lkIG9uQ3JlYXRlKEJ1bmRsZSBzYXZlZEluc3RhbmNlU3RhdGUpIHsKLSAgICAgKiAgICAgICAgIHN1cGVyLm9uQ3JlYXRlKHNhdmVkSW5zdGFuY2VTdGF0ZSk7Ci0gICAgICoKLSAgICAgKiAgICAgICAgIG1Sb3V0ZXIgPSBNZWRpYXJvdXRlci5nZXRJbnN0YW5jZSh0aGlzKTsKLSAgICAgKiAgICAgICAgIG1DYWxsYmFjayA9IG5ldyBNeUNhbGxiYWNrKCk7Ci0gICAgICogICAgICAgICBtU2VsZWN0b3IgPSBuZXcgTWVkaWFSb3V0ZVNlbGVjdG9yLkJ1aWxkZXIoKQotICAgICAqICAgICAgICAgICAgICAgICAuYWRkQ29udHJvbENhdGVnb3J5KE1lZGlhQ29udHJvbEludGVudC5DQVRFR09SWV9MSVZFX0FVRElPKQotICAgICAqICAgICAgICAgICAgICAgICAuYWRkQ29udHJvbENhdGVnb3J5KE1lZGlhQ29udHJvbEludGVudC5DQVRFR09SWV9SRU1PVEVfUExBWUJBQ0spCi0gICAgICogICAgICAgICAgICAgICAgIC5idWlsZCgpOwotICAgICAqICAgICB9Ci0gICAgICoKLSAgICAgKiAgICAgLy8gQWRkIHRoZSBjYWxsYmFjayBvbiBzdGFydCB0byB0ZWxsIHRoZSBtZWRpYSByb3V0ZXIgd2hhdCBraW5kcyBvZiByb3V0ZXMKLSAgICAgKiAgICAgLy8gdGhlIGFwcGxpY2F0aW9uIGlzIGludGVyZXN0ZWQgaW4gc28gdGhhdCBpdCBjYW4gdHJ5IHRvIGRpc2NvdmVyIHN1aXRhYmxlIG9uZXMuCi0gICAgICogICAgIHB1YmxpYyB2b2lkIG9uU3RhcnQoKSB7Ci0gICAgICogICAgICAgICBzdXBlci5vblN0YXJ0KCk7Ci0gICAgICoKLSAgICAgKiAgICAgICAgIG1lZGlhUm91dGVyLmFkZENhbGxiYWNrKG1TZWxlY3RvciwgbUNhbGxiYWNrLAotICAgICAqICAgICAgICAgICAgICAgICBNZWRpYVJvdXRlci5DQUxMQkFDS19GTEFHX1JFUVVFU1RfRElTQ09WRVJZKTsKLSAgICAgKgotICAgICAqICAgICAgICAgTWVkaWFSb3V0ZXIuUm91dGVJbmZvIHJvdXRlID0gbWVkaWFSb3V0ZXIudXBkYXRlU2VsZWN0ZWRSb3V0ZShtU2VsZWN0b3IpOwotICAgICAqICAgICAgICAgLy8gZG8gc29tZXRoaW5nIHdpdGggdGhlIHJvdXRlLi4uCi0gICAgICogICAgIH0KLSAgICAgKgotICAgICAqICAgICAvLyBSZW1vdmUgdGhlIHNlbGVjdG9yIG9uIHN0b3AgdG8gdGVsbCB0aGUgbWVkaWEgcm91dGVyIHRoYXQgaXQgbm8gbG9uZ2VyCi0gICAgICogICAgIC8vIG5lZWRzIHRvIGludmVzdCBlZmZvcnQgdHJ5aW5nIHRvIGRpc2NvdmVyIHJvdXRlcyBvZiB0aGVzZSBraW5kcyBmb3Igbm93LgotICAgICAqICAgICBwdWJsaWMgdm9pZCBvblN0b3AoKSB7Ci0gICAgICogICAgICAgICBzdXBlci5vblN0b3AoKTsKLSAgICAgKgotICAgICAqICAgICAgICAgbWVkaWFSb3V0ZXIucmVtb3ZlQ2FsbGJhY2sobUNhbGxiYWNrKTsKLSAgICAgKiAgICAgfQotICAgICAqCi0gICAgICogICAgIHByaXZhdGUgZmluYWwgY2xhc3MgTXlDYWxsYmFjayBleHRlbmRzIE1lZGlhUm91dGVyLkNhbGxiYWNrIHsKLSAgICAgKiAgICAgICAgIC8vIEltcGxlbWVudCBjYWxsYmFjayBtZXRob2RzIGFzIG5lZWRlZC4KLSAgICAgKiAgICAgfQotICAgICAqIH0KLSAgICAgKiA8L3ByZT4KLSAgICAgKgotICAgICAqIEBwYXJhbSBzZWxlY3RvciBBIHJvdXRlIHNlbGVjdG9yIHRoYXQgaW5kaWNhdGVzIHRoZSBraW5kcyBvZiByb3V0ZXMgdGhhdCB0aGUKLSAgICAgKiBjYWxsYmFjayB3b3VsZCBsaWtlIHRvIGRpc2NvdmVyLgotICAgICAqIEBwYXJhbSBjYWxsYmFjayBUaGUgY2FsbGJhY2sgdG8gYWRkLgotICAgICAqIEBwYXJhbSBmbGFncyBGbGFncyB0byBjb250cm9sIHRoZSBiZWhhdmlvciBvZiB0aGUgY2FsbGJhY2suCi0gICAgICogTWF5IGJlIHplcm8gb3IgYSBjb21iaW5hdGlvbiBvZiB7QGxpbmsgI0NBTExCQUNLX0ZMQUdfUEVSRk9STV9BQ1RJVkVfU0NBTn0gYW5kCi0gICAgICoge0BsaW5rICNDQUxMQkFDS19GTEFHX1VORklMVEVSRURfRVZFTlRTfS4KLSAgICAgKiBAc2VlICNyZW1vdmVDYWxsYmFjawotICAgICAqLwotICAgIHB1YmxpYyB2b2lkIGFkZENhbGxiYWNrKEBOb25OdWxsIE1lZGlhUm91dGVTZWxlY3RvciBzZWxlY3RvciwgQE5vbk51bGwgQ2FsbGJhY2sgY2FsbGJhY2ssCi0gICAgICAgICAgICBAQ2FsbGJhY2tGbGFncyBpbnQgZmxhZ3MpIHsKLSAgICAgICAgaWYgKHNlbGVjdG9yID09IG51bGwpIHsKLSAgICAgICAgICAgIHRocm93IG5ldyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oInNlbGVjdG9yIG11c3Qgbm90IGJlIG51bGwiKTsKLSAgICAgICAgfQotICAgICAgICBpZiAoY2FsbGJhY2sgPT0gbnVsbCkgewotICAgICAgICAgICAgdGhyb3cgbmV3IElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbigiY2FsbGJhY2sgbXVzdCBub3QgYmUgbnVsbCIpOwotICAgICAgICB9Ci0gICAgICAgIGNoZWNrQ2FsbGluZ1RocmVhZCgpOwotCi0gICAgICAgIGlmIChERUJVRykgewotICAgICAgICAgICAgTG9nLmQoVEFHLCAiYWRkQ2FsbGJhY2s6IHNlbGVjdG9yPSIgKyBzZWxlY3RvcgotICAgICAgICAgICAgICAgICAgICArICIsIGNhbGxiYWNrPSIgKyBjYWxsYmFjayArICIsIGZsYWdzPSIgKyBJbnRlZ2VyLnRvSGV4U3RyaW5nKGZsYWdzKSk7Ci0gICAgICAgIH0KLQotICAgICAgICBDYWxsYmFja1JlY29yZCByZWNvcmQ7Ci0gICAgICAgIGludCBpbmRleCA9IGZpbmRDYWxsYmFja1JlY29yZChjYWxsYmFjayk7Ci0gICAgICAgIGlmIChpbmRleCA8IDApIHsKLSAgICAgICAgICAgIHJlY29yZCA9IG5ldyBDYWxsYmFja1JlY29yZCh0aGlzLCBjYWxsYmFjayk7Ci0gICAgICAgICAgICBtQ2FsbGJhY2tSZWNvcmRzLmFkZChyZWNvcmQpOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgcmVjb3JkID0gbUNhbGxiYWNrUmVjb3Jkcy5nZXQoaW5kZXgpOwotICAgICAgICB9Ci0gICAgICAgIGJvb2xlYW4gdXBkYXRlTmVlZGVkID0gZmFsc2U7Ci0gICAgICAgIGlmICgoZmxhZ3MgJiB+cmVjb3JkLm1GbGFncykgIT0gMCkgewotICAgICAgICAgICAgcmVjb3JkLm1GbGFncyB8PSBmbGFnczsKLSAgICAgICAgICAgIHVwZGF0ZU5lZWRlZCA9IHRydWU7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKCFyZWNvcmQubVNlbGVjdG9yLmNvbnRhaW5zKHNlbGVjdG9yKSkgewotICAgICAgICAgICAgcmVjb3JkLm1TZWxlY3RvciA9IG5ldyBNZWRpYVJvdXRlU2VsZWN0b3IuQnVpbGRlcihyZWNvcmQubVNlbGVjdG9yKQotICAgICAgICAgICAgICAgICAgICAuYWRkU2VsZWN0b3Ioc2VsZWN0b3IpCi0gICAgICAgICAgICAgICAgICAgIC5idWlsZCgpOwotICAgICAgICAgICAgdXBkYXRlTmVlZGVkID0gdHJ1ZTsKLSAgICAgICAgfQotICAgICAgICBpZiAodXBkYXRlTmVlZGVkKSB7Ci0gICAgICAgICAgICBzR2xvYmFsLnVwZGF0ZURpc2NvdmVyeVJlcXVlc3QoKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIC8qKgotICAgICAqIFJlbW92ZXMgdGhlIHNwZWNpZmllZCBjYWxsYmFjay4gIEl0IHdpbGwgbm8gbG9uZ2VyIHJlY2VpdmUgZXZlbnRzIGFib3V0Ci0gICAgICogY2hhbmdlcyB0byBtZWRpYSByb3V0ZXMuCi0gICAgICoKLSAgICAgKiBAcGFyYW0gY2FsbGJhY2sgVGhlIGNhbGxiYWNrIHRvIHJlbW92ZS4KLSAgICAgKiBAc2VlICNhZGRDYWxsYmFjawotICAgICAqLwotICAgIHB1YmxpYyB2b2lkIHJlbW92ZUNhbGxiYWNrKEBOb25OdWxsIENhbGxiYWNrIGNhbGxiYWNrKSB7Ci0gICAgICAgIGlmIChjYWxsYmFjayA9PSBudWxsKSB7Ci0gICAgICAgICAgICB0aHJvdyBuZXcgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKCJjYWxsYmFjayBtdXN0IG5vdCBiZSBudWxsIik7Ci0gICAgICAgIH0KLSAgICAgICAgY2hlY2tDYWxsaW5nVGhyZWFkKCk7Ci0KLSAgICAgICAgaWYgKERFQlVHKSB7Ci0gICAgICAgICAgICBMb2cuZChUQUcsICJyZW1vdmVDYWxsYmFjazogY2FsbGJhY2s9IiArIGNhbGxiYWNrKTsKLSAgICAgICAgfQotCi0gICAgICAgIGludCBpbmRleCA9IGZpbmRDYWxsYmFja1JlY29yZChjYWxsYmFjayk7Ci0gICAgICAgIGlmIChpbmRleCA+PSAwKSB7Ci0gICAgICAgICAgICBtQ2FsbGJhY2tSZWNvcmRzLnJlbW92ZShpbmRleCk7Ci0gICAgICAgICAgICBzR2xvYmFsLnVwZGF0ZURpc2NvdmVyeVJlcXVlc3QoKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIHByaXZhdGUgaW50IGZpbmRDYWxsYmFja1JlY29yZChDYWxsYmFjayBjYWxsYmFjaykgewotICAgICAgICBmaW5hbCBpbnQgY291bnQgPSBtQ2FsbGJhY2tSZWNvcmRzLnNpemUoKTsKLSAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBjb3VudDsgaSsrKSB7Ci0gICAgICAgICAgICBpZiAobUNhbGxiYWNrUmVjb3Jkcy5nZXQoaSkubUNhbGxiYWNrID09IGNhbGxiYWNrKSB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIC0xOwotICAgIH0KLQotICAgIC8qKgotICAgICAqIFJlZ2lzdGVycyBhIG1lZGlhIHJvdXRlIHByb3ZpZGVyIHdpdGhpbiB0aGlzIGFwcGxpY2F0aW9uIHByb2Nlc3MuCi0gICAgICogPHA+Ci0gICAgICogVGhlIHByb3ZpZGVyIHdpbGwgYmUgYWRkZWQgdG8gdGhlIGxpc3Qgb2YgcHJvdmlkZXJzIHRoYXQgYWxsIHtAbGluayBNZWRpYVJvdXRlcn0KLSAgICAgKiBpbnN0YW5jZXMgd2l0aGluIHRoaXMgcHJvY2VzcyBjYW4gdXNlIHRvIGRpc2NvdmVyIHJvdXRlcy4KLSAgICAgKiA8L3A+Ci0gICAgICoKLSAgICAgKiBAcGFyYW0gcHJvdmlkZXJJbnN0YW5jZSBUaGUgbWVkaWEgcm91dGUgcHJvdmlkZXIgaW5zdGFuY2UgdG8gYWRkLgotICAgICAqCi0gICAgICogQHNlZSBNZWRpYVJvdXRlUHJvdmlkZXIKLSAgICAgKiBAc2VlICNyZW1vdmVDYWxsYmFjawotICAgICAqLwotICAgIHB1YmxpYyB2b2lkIGFkZFByb3ZpZGVyKEBOb25OdWxsIE1lZGlhUm91dGVQcm92aWRlciBwcm92aWRlckluc3RhbmNlKSB7Ci0gICAgICAgIGlmIChwcm92aWRlckluc3RhbmNlID09IG51bGwpIHsKLSAgICAgICAgICAgIHRocm93IG5ldyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oInByb3ZpZGVySW5zdGFuY2UgbXVzdCBub3QgYmUgbnVsbCIpOwotICAgICAgICB9Ci0gICAgICAgIGNoZWNrQ2FsbGluZ1RocmVhZCgpOwotCi0gICAgICAgIGlmIChERUJVRykgewotICAgICAgICAgICAgTG9nLmQoVEFHLCAiYWRkUHJvdmlkZXI6ICIgKyBwcm92aWRlckluc3RhbmNlKTsKLSAgICAgICAgfQotICAgICAgICBzR2xvYmFsLmFkZFByb3ZpZGVyKHByb3ZpZGVySW5zdGFuY2UpOwotICAgIH0KLQotICAgIC8qKgotICAgICAqIFVucmVnaXN0ZXJzIGEgbWVkaWEgcm91dGUgcHJvdmlkZXIgd2l0aGluIHRoaXMgYXBwbGljYXRpb24gcHJvY2Vzcy4KLSAgICAgKiA8cD4KLSAgICAgKiBUaGUgcHJvdmlkZXIgd2lsbCBiZSByZW1vdmVkIGZyb20gdGhlIGxpc3Qgb2YgcHJvdmlkZXJzIHRoYXQgYWxsIHtAbGluayBNZWRpYVJvdXRlcn0KLSAgICAgKiBpbnN0YW5jZXMgd2l0aGluIHRoaXMgcHJvY2VzcyBjYW4gdXNlIHRvIGRpc2NvdmVyIHJvdXRlcy4KLSAgICAgKiA8L3A+Ci0gICAgICoKLSAgICAgKiBAcGFyYW0gcHJvdmlkZXJJbnN0YW5jZSBUaGUgbWVkaWEgcm91dGUgcHJvdmlkZXIgaW5zdGFuY2UgdG8gcmVtb3ZlLgotICAgICAqCi0gICAgICogQHNlZSBNZWRpYVJvdXRlUHJvdmlkZXIKLSAgICAgKiBAc2VlICNhZGRDYWxsYmFjawotICAgICAqLwotICAgIHB1YmxpYyB2b2lkIHJlbW92ZVByb3ZpZGVyKEBOb25OdWxsIE1lZGlhUm91dGVQcm92aWRlciBwcm92aWRlckluc3RhbmNlKSB7Ci0gICAgICAgIGlmIChwcm92aWRlckluc3RhbmNlID09IG51bGwpIHsKLSAgICAgICAgICAgIHRocm93IG5ldyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oInByb3ZpZGVySW5zdGFuY2UgbXVzdCBub3QgYmUgbnVsbCIpOwotICAgICAgICB9Ci0gICAgICAgIGNoZWNrQ2FsbGluZ1RocmVhZCgpOwotCi0gICAgICAgIGlmIChERUJVRykgewotICAgICAgICAgICAgTG9nLmQoVEFHLCAicmVtb3ZlUHJvdmlkZXI6ICIgKyBwcm92aWRlckluc3RhbmNlKTsKLSAgICAgICAgfQotICAgICAgICBzR2xvYmFsLnJlbW92ZVByb3ZpZGVyKHByb3ZpZGVySW5zdGFuY2UpOwotICAgIH0KLQotICAgIC8qKgotICAgICAqIEFkZHMgYSByZW1vdGUgY29udHJvbCBjbGllbnQgdG8gZW5hYmxlIHJlbW90ZSBjb250cm9sIG9mIHRoZSB2b2x1bWUKLSAgICAgKiBvZiB0aGUgc2VsZWN0ZWQgcm91dGUuCi0gICAgICogPHA+Ci0gICAgICogVGhlIHJlbW90ZSBjb250cm9sIGNsaWVudCBtdXN0IGhhdmUgcHJldmlvdXNseSBiZWVuIHJlZ2lzdGVyZWQgd2l0aAotICAgICAqIHRoZSBhdWRpbyBtYW5hZ2VyIHVzaW5nIHRoZSB7QGxpbmsgYW5kcm9pZC5tZWRpYS5BdWRpb01hbmFnZXIjcmVnaXN0ZXJSZW1vdGVDb250cm9sQ2xpZW50Ci0gICAgICogQXVkaW9NYW5hZ2VyLnJlZ2lzdGVyUmVtb3RlQ29udHJvbENsaWVudH0gbWV0aG9kLgotICAgICAqIDwvcD4KLSAgICAgKgotICAgICAqIEBwYXJhbSByZW1vdGVDb250cm9sQ2xpZW50IFRoZSB7QGxpbmsgYW5kcm9pZC5tZWRpYS5SZW1vdGVDb250cm9sQ2xpZW50fSB0byByZWdpc3Rlci4KLSAgICAgKi8KLSAgICBwdWJsaWMgdm9pZCBhZGRSZW1vdGVDb250cm9sQ2xpZW50KEBOb25OdWxsIE9iamVjdCByZW1vdGVDb250cm9sQ2xpZW50KSB7Ci0gICAgICAgIGlmIChyZW1vdGVDb250cm9sQ2xpZW50ID09IG51bGwpIHsKLSAgICAgICAgICAgIHRocm93IG5ldyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oInJlbW90ZUNvbnRyb2xDbGllbnQgbXVzdCBub3QgYmUgbnVsbCIpOwotICAgICAgICB9Ci0gICAgICAgIGNoZWNrQ2FsbGluZ1RocmVhZCgpOwotCi0gICAgICAgIGlmIChERUJVRykgewotICAgICAgICAgICAgTG9nLmQoVEFHLCAiYWRkUmVtb3RlQ29udHJvbENsaWVudDogIiArIHJlbW90ZUNvbnRyb2xDbGllbnQpOwotICAgICAgICB9Ci0gICAgICAgIHNHbG9iYWwuYWRkUmVtb3RlQ29udHJvbENsaWVudChyZW1vdGVDb250cm9sQ2xpZW50KTsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBSZW1vdmVzIGEgcmVtb3RlIGNvbnRyb2wgY2xpZW50LgotICAgICAqCi0gICAgICogQHBhcmFtIHJlbW90ZUNvbnRyb2xDbGllbnQgVGhlIHtAbGluayBhbmRyb2lkLm1lZGlhLlJlbW90ZUNvbnRyb2xDbGllbnR9Ci0gICAgICogICAgICAgICAgICB0byB1bnJlZ2lzdGVyLgotICAgICAqLwotICAgIHB1YmxpYyB2b2lkIHJlbW92ZVJlbW90ZUNvbnRyb2xDbGllbnQoQE5vbk51bGwgT2JqZWN0IHJlbW90ZUNvbnRyb2xDbGllbnQpIHsKLSAgICAgICAgaWYgKHJlbW90ZUNvbnRyb2xDbGllbnQgPT0gbnVsbCkgewotICAgICAgICAgICAgdGhyb3cgbmV3IElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbigicmVtb3RlQ29udHJvbENsaWVudCBtdXN0IG5vdCBiZSBudWxsIik7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoREVCVUcpIHsKLSAgICAgICAgICAgIExvZy5kKFRBRywgInJlbW92ZVJlbW90ZUNvbnRyb2xDbGllbnQ6ICIgKyByZW1vdGVDb250cm9sQ2xpZW50KTsKLSAgICAgICAgfQotICAgICAgICBzR2xvYmFsLnJlbW92ZVJlbW90ZUNvbnRyb2xDbGllbnQocmVtb3RlQ29udHJvbENsaWVudCk7Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogU2V0cyB0aGUgbWVkaWEgc2Vzc2lvbiB0byBlbmFibGUgcmVtb3RlIGNvbnRyb2wgb2YgdGhlIHZvbHVtZSBvZiB0aGUKLSAgICAgKiBzZWxlY3RlZCByb3V0ZS4gVGhpcyBzaG91bGQgYmUgdXNlZCBpbnN0ZWFkIG9mCi0gICAgICoge0BsaW5rICNhZGRSZW1vdGVDb250cm9sQ2xpZW50fSB3aGVuIHVzaW5nIG1lZGlhIHNlc3Npb25zLiBTZXQgdGhlCi0gICAgICogc2Vzc2lvbiB0byBudWxsIHRvIGNsZWFyIGl0LgotICAgICAqCi0gICAgICogQHBhcmFtIG1lZGlhU2Vzc2lvbiBUaGUge0BsaW5rIGFuZHJvaWQubWVkaWEuc2Vzc2lvbi5NZWRpYVNlc3Npb259IHRvCi0gICAgICogICAgICAgICAgICB1c2UuCi0gICAgICovCi0gICAgcHVibGljIHZvaWQgc2V0TWVkaWFTZXNzaW9uKE9iamVjdCBtZWRpYVNlc3Npb24pIHsKLSAgICAgICAgaWYgKERFQlVHKSB7Ci0gICAgICAgICAgICBMb2cuZChUQUcsICJhZGRNZWRpYVNlc3Npb246ICIgKyBtZWRpYVNlc3Npb24pOwotICAgICAgICB9Ci0gICAgICAgIHNHbG9iYWwuc2V0TWVkaWFTZXNzaW9uKG1lZGlhU2Vzc2lvbik7Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogU2V0cyBhIGNvbXBhdCBtZWRpYSBzZXNzaW9uIHRvIGVuYWJsZSByZW1vdGUgY29udHJvbCBvZiB0aGUgdm9sdW1lIG9mIHRoZQotICAgICAqIHNlbGVjdGVkIHJvdXRlLiBUaGlzIHNob3VsZCBiZSB1c2VkIGluc3RlYWQgb2YKLSAgICAgKiB7QGxpbmsgI2FkZFJlbW90ZUNvbnRyb2xDbGllbnR9IHdoZW4gdXNpbmcge0BsaW5rIE1lZGlhU2Vzc2lvbkNvbXBhdH0uCi0gICAgICogU2V0IHRoZSBzZXNzaW9uIHRvIG51bGwgdG8gY2xlYXIgaXQuCi0gICAgICoKLSAgICAgKiBAcGFyYW0gbWVkaWFTZXNzaW9uCi0gICAgICovCi0gICAgcHVibGljIHZvaWQgc2V0TWVkaWFTZXNzaW9uQ29tcGF0KE1lZGlhU2Vzc2lvbkNvbXBhdCBtZWRpYVNlc3Npb24pIHsKLSAgICAgICAgaWYgKERFQlVHKSB7Ci0gICAgICAgICAgICBMb2cuZChUQUcsICJhZGRNZWRpYVNlc3Npb25Db21wYXQ6ICIgKyBtZWRpYVNlc3Npb24pOwotICAgICAgICB9Ci0gICAgICAgIHNHbG9iYWwuc2V0TWVkaWFTZXNzaW9uQ29tcGF0KG1lZGlhU2Vzc2lvbik7Ci0gICAgfQotCi0gICAgcHVibGljIE1lZGlhU2Vzc2lvbkNvbXBhdC5Ub2tlbiBnZXRNZWRpYVNlc3Npb25Ub2tlbigpIHsKLSAgICAgICAgcmV0dXJuIHNHbG9iYWwuZ2V0TWVkaWFTZXNzaW9uVG9rZW4oKTsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBFbnN1cmVzIHRoYXQgY2FsbHMgaW50byB0aGUgbWVkaWEgcm91dGVyIGFyZSBvbiB0aGUgY29ycmVjdCB0aHJlYWQuCi0gICAgICogSXQgcGF5cyB0byBiZSBhIGxpdHRsZSBwYXJhbm9pZCB3aGVuIGdsb2JhbCBzdGF0ZSBpbnZhcmlhbnRzIGFyZSBhdCByaXNrLgotICAgICAqLwotICAgIHN0YXRpYyB2b2lkIGNoZWNrQ2FsbGluZ1RocmVhZCgpIHsKLSAgICAgICAgaWYgKExvb3Blci5teUxvb3BlcigpICE9IExvb3Blci5nZXRNYWluTG9vcGVyKCkpIHsKLSAgICAgICAgICAgIHRocm93IG5ldyBJbGxlZ2FsU3RhdGVFeGNlcHRpb24oIlRoZSBtZWRpYSByb3V0ZXIgc2VydmljZSBtdXN0IG9ubHkgYmUgIgotICAgICAgICAgICAgICAgICAgICArICJhY2Nlc3NlZCBvbiB0aGUgYXBwbGljYXRpb24ncyBtYWluIHRocmVhZC4iKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIHN0YXRpYyA8VD4gYm9vbGVhbiBlcXVhbChUIGEsIFQgYikgewotICAgICAgICByZXR1cm4gYSA9PSBiIHx8IChhICE9IG51bGwgJiYgYiAhPSBudWxsICYmIGEuZXF1YWxzKGIpKTsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBQcm92aWRlcyBpbmZvcm1hdGlvbiBhYm91dCBhIG1lZGlhIHJvdXRlLgotICAgICAqIDxwPgotICAgICAqIEVhY2ggbWVkaWEgcm91dGUgaGFzIGEgbGlzdCBvZiB7QGxpbmsgTWVkaWFDb250cm9sSW50ZW50IG1lZGlhIGNvbnRyb2x9Ci0gICAgICoge0BsaW5rICNnZXRDb250cm9sRmlsdGVycyBpbnRlbnQgZmlsdGVyc30gdGhhdCBkZXNjcmliZSB0aGUgY2FwYWJpbGl0aWVzIG9mIHRoZQotICAgICAqIHJvdXRlIGFuZCB0aGUgbWFubmVyIGluIHdoaWNoIGl0IGlzIHVzZWQgYW5kIGNvbnRyb2xsZWQuCi0gICAgICogPC9wPgotICAgICAqLwotICAgIHB1YmxpYyBzdGF0aWMgY2xhc3MgUm91dGVJbmZvIHsKLSAgICAgICAgcHJpdmF0ZSBmaW5hbCBQcm92aWRlckluZm8gbVByb3ZpZGVyOwotICAgICAgICBwcml2YXRlIGZpbmFsIFN0cmluZyBtRGVzY3JpcHRvcklkOwotICAgICAgICBwcml2YXRlIGZpbmFsIFN0cmluZyBtVW5pcXVlSWQ7Ci0gICAgICAgIHByaXZhdGUgU3RyaW5nIG1OYW1lOwotICAgICAgICBwcml2YXRlIFN0cmluZyBtRGVzY3JpcHRpb247Ci0gICAgICAgIHByaXZhdGUgVXJpIG1JY29uVXJpOwotICAgICAgICBwcml2YXRlIGJvb2xlYW4gbUVuYWJsZWQ7Ci0gICAgICAgIHByaXZhdGUgYm9vbGVhbiBtQ29ubmVjdGluZzsKLSAgICAgICAgcHJpdmF0ZSBpbnQgbUNvbm5lY3Rpb25TdGF0ZTsKLSAgICAgICAgcHJpdmF0ZSBib29sZWFuIG1DYW5EaXNjb25uZWN0OwotICAgICAgICBwcml2YXRlIGZpbmFsIEFycmF5TGlzdDxJbnRlbnRGaWx0ZXI+IG1Db250cm9sRmlsdGVycyA9IG5ldyBBcnJheUxpc3Q8PigpOwotICAgICAgICBwcml2YXRlIGludCBtUGxheWJhY2tUeXBlOwotICAgICAgICBwcml2YXRlIGludCBtUGxheWJhY2tTdHJlYW07Ci0gICAgICAgIHByaXZhdGUgaW50IG1EZXZpY2VUeXBlOwotICAgICAgICBwcml2YXRlIGludCBtVm9sdW1lSGFuZGxpbmc7Ci0gICAgICAgIHByaXZhdGUgaW50IG1Wb2x1bWU7Ci0gICAgICAgIHByaXZhdGUgaW50IG1Wb2x1bWVNYXg7Ci0gICAgICAgIHByaXZhdGUgRGlzcGxheSBtUHJlc2VudGF0aW9uRGlzcGxheTsKLSAgICAgICAgcHJpdmF0ZSBpbnQgbVByZXNlbnRhdGlvbkRpc3BsYXlJZCA9IFBSRVNFTlRBVElPTl9ESVNQTEFZX0lEX05PTkU7Ci0gICAgICAgIHByaXZhdGUgQnVuZGxlIG1FeHRyYXM7Ci0gICAgICAgIHByaXZhdGUgSW50ZW50U2VuZGVyIG1TZXR0aW5nc0ludGVudDsKLSAgICAgICAgTWVkaWFSb3V0ZURlc2NyaXB0b3IgbURlc2NyaXB0b3I7Ci0KLSAgICAgICAgQEludERlZih7Q09OTkVDVElPTl9TVEFURV9ESVNDT05ORUNURUQsIENPTk5FQ1RJT05fU1RBVEVfQ09OTkVDVElORywKLSAgICAgICAgICAgICAgICBDT05ORUNUSU9OX1NUQVRFX0NPTk5FQ1RFRH0pCi0gICAgICAgIEBSZXRlbnRpb24oUmV0ZW50aW9uUG9saWN5LlNPVVJDRSkKLSAgICAgICAgcHJpdmF0ZSBAaW50ZXJmYWNlIENvbm5lY3Rpb25TdGF0ZSB7fQotCi0gICAgICAgIC8qKgotICAgICAgICAgKiBUaGUgZGVmYXVsdCBjb25uZWN0aW9uIHN0YXRlIGluZGljYXRpbmcgdGhlIHJvdXRlIGlzIGRpc2Nvbm5lY3RlZC4KLSAgICAgICAgICoKLSAgICAgICAgICogQHNlZSAjZ2V0Q29ubmVjdGlvblN0YXRlCi0gICAgICAgICAqLwotICAgICAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBDT05ORUNUSU9OX1NUQVRFX0RJU0NPTk5FQ1RFRCA9IDA7Ci0KLSAgICAgICAgLyoqCi0gICAgICAgICAqIEEgY29ubmVjdGlvbiBzdGF0ZSBpbmRpY2F0aW5nIHRoZSByb3V0ZSBpcyBpbiB0aGUgcHJvY2VzcyBvZiBjb25uZWN0aW5nIGFuZCBpcyBub3QgeWV0Ci0gICAgICAgICAqIHJlYWR5IGZvciB1c2UuCi0gICAgICAgICAqCi0gICAgICAgICAqIEBzZWUgI2dldENvbm5lY3Rpb25TdGF0ZQotICAgICAgICAgKi8KLSAgICAgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgQ09OTkVDVElPTl9TVEFURV9DT05ORUNUSU5HID0gMTsKLQotICAgICAgICAvKioKLSAgICAgICAgICogQSBjb25uZWN0aW9uIHN0YXRlIGluZGljYXRpbmcgdGhlIHJvdXRlIGlzIGNvbm5lY3RlZC4KLSAgICAgICAgICoKLSAgICAgICAgICogQHNlZSAjZ2V0Q29ubmVjdGlvblN0YXRlCi0gICAgICAgICAqLwotICAgICAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBDT05ORUNUSU9OX1NUQVRFX0NPTk5FQ1RFRCA9IDI7Ci0KLSAgICAgICAgQEludERlZih7UExBWUJBQ0tfVFlQRV9MT0NBTCxQTEFZQkFDS19UWVBFX1JFTU9URX0pCi0gICAgICAgIEBSZXRlbnRpb24oUmV0ZW50aW9uUG9saWN5LlNPVVJDRSkKLSAgICAgICAgcHJpdmF0ZSBAaW50ZXJmYWNlIFBsYXliYWNrVHlwZSB7fQotCi0gICAgICAgIC8qKgotICAgICAgICAgKiBUaGUgZGVmYXVsdCBwbGF5YmFjayB0eXBlLCAibG9jYWwiLCBpbmRpY2F0aW5nIHRoZSBwcmVzZW50YXRpb24gb2YgdGhlIG1lZGlhCi0gICAgICAgICAqIGlzIGhhcHBlbmluZyBvbiB0aGUgc2FtZSBkZXZpY2UgKGUuZy4gYSBwaG9uZSwgYSB0YWJsZXQpIGFzIHdoZXJlIGl0IGlzCi0gICAgICAgICAqIGNvbnRyb2xsZWQgZnJvbS4KLSAgICAgICAgICoKLSAgICAgICAgICogQHNlZSAjZ2V0UGxheWJhY2tUeXBlCi0gICAgICAgICAqLwotICAgICAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBQTEFZQkFDS19UWVBFX0xPQ0FMID0gMDsKLQotICAgICAgICAvKioKLSAgICAgICAgICogQSBwbGF5YmFjayB0eXBlIGluZGljYXRpbmcgdGhlIHByZXNlbnRhdGlvbiBvZiB0aGUgbWVkaWEgaXMgaGFwcGVuaW5nIG9uCi0gICAgICAgICAqIGEgZGlmZmVyZW50IGRldmljZSAoaS5lLiB0aGUgcmVtb3RlIGRldmljZSkgdGhhbiB3aGVyZSBpdCBpcyBjb250cm9sbGVkIGZyb20uCi0gICAgICAgICAqCi0gICAgICAgICAqIEBzZWUgI2dldFBsYXliYWNrVHlwZQotICAgICAgICAgKi8KLSAgICAgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgUExBWUJBQ0tfVFlQRV9SRU1PVEUgPSAxOwotCi0gICAgICAgIEBJbnREZWYoe0RFVklDRV9UWVBFX1VOS05PV04sIERFVklDRV9UWVBFX1RWLCBERVZJQ0VfVFlQRV9TUEVBS0VSLCBERVZJQ0VfVFlQRV9CTFVFVE9PVEh9KQotICAgICAgICBAUmV0ZW50aW9uKFJldGVudGlvblBvbGljeS5TT1VSQ0UpCi0gICAgICAgIHByaXZhdGUgQGludGVyZmFjZSBEZXZpY2VUeXBlIHt9Ci0KLSAgICAgICAgLyoqCi0gICAgICAgICAqIFRoZSBkZWZhdWx0IHJlY2VpdmVyIGRldmljZSB0eXBlIG9mIHRoZSByb3V0ZSBpbmRpY2F0aW5nIHRoZSB0eXBlIGlzIHVua25vd24uCi0gICAgICAgICAqCi0gICAgICAgICAqIEBzZWUgI2dldERldmljZVR5cGUKLSAgICAgICAgICogQGhpZGUKLSAgICAgICAgICovCi0gICAgICAgIC8vIEBSZXN0cmljdFRvKExJQlJBUllfR1JPVVApCi0gICAgICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IERFVklDRV9UWVBFX1VOS05PV04gPSAwOwotCi0gICAgICAgIC8qKgotICAgICAgICAgKiBBIHJlY2VpdmVyIGRldmljZSB0eXBlIG9mIHRoZSByb3V0ZSBpbmRpY2F0aW5nIHRoZSBwcmVzZW50YXRpb24gb2YgdGhlIG1lZGlhIGlzIGhhcHBlbmluZwotICAgICAgICAgKiBvbiBhIFRWLgotICAgICAgICAgKgotICAgICAgICAgKiBAc2VlICNnZXREZXZpY2VUeXBlCi0gICAgICAgICAqLwotICAgICAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBERVZJQ0VfVFlQRV9UViA9IDE7Ci0KLSAgICAgICAgLyoqCi0gICAgICAgICAqIEEgcmVjZWl2ZXIgZGV2aWNlIHR5cGUgb2YgdGhlIHJvdXRlIGluZGljYXRpbmcgdGhlIHByZXNlbnRhdGlvbiBvZiB0aGUgbWVkaWEgaXMgaGFwcGVuaW5nCi0gICAgICAgICAqIG9uIGEgc3BlYWtlci4KLSAgICAgICAgICoKLSAgICAgICAgICogQHNlZSAjZ2V0RGV2aWNlVHlwZQotICAgICAgICAgKi8KLSAgICAgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgREVWSUNFX1RZUEVfU1BFQUtFUiA9IDI7Ci0KLSAgICAgICAgLyoqCi0gICAgICAgICAqIEEgcmVjZWl2ZXIgZGV2aWNlIHR5cGUgb2YgdGhlIHJvdXRlIGluZGljYXRpbmcgdGhlIHByZXNlbnRhdGlvbiBvZiB0aGUgbWVkaWEgaXMgaGFwcGVuaW5nCi0gICAgICAgICAqIG9uIGEgYmx1ZXRvb3RoIGRldmljZSBzdWNoIGFzIGEgYmx1ZXRvb3RoIHNwZWFrZXIuCi0gICAgICAgICAqCi0gICAgICAgICAqIEBzZWUgI2dldERldmljZVR5cGUKLSAgICAgICAgICogQGhpZGUKLSAgICAgICAgICovCi0gICAgICAgIC8vIEBSZXN0cmljdFRvKExJQlJBUllfR1JPVVApCi0gICAgICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IERFVklDRV9UWVBFX0JMVUVUT09USCA9IDM7Ci0KLSAgICAgICAgQEludERlZih7UExBWUJBQ0tfVk9MVU1FX0ZJWEVELFBMQVlCQUNLX1ZPTFVNRV9WQVJJQUJMRX0pCi0gICAgICAgIEBSZXRlbnRpb24oUmV0ZW50aW9uUG9saWN5LlNPVVJDRSkKLSAgICAgICAgcHJpdmF0ZSBAaW50ZXJmYWNlIFBsYXliYWNrVm9sdW1lIHt9Ci0KLSAgICAgICAgLyoqCi0gICAgICAgICAqIFBsYXliYWNrIGluZm9ybWF0aW9uIGluZGljYXRpbmcgdGhlIHBsYXliYWNrIHZvbHVtZSBpcyBmaXhlZCwgaS5lLiBpdCBjYW5ub3QgYmUKLSAgICAgICAgICogY29udHJvbGxlZCBmcm9tIHRoaXMgb2JqZWN0LiBBbiBleGFtcGxlIG9mIGZpeGVkIHBsYXliYWNrIHZvbHVtZSBpcyBhIHJlbW90ZSBwbGF5ZXIsCi0gICAgICAgICAqIHBsYXlpbmcgb3ZlciBIRE1JIHdoZXJlIHRoZSB1c2VyIHByZWZlcnMgdG8gY29udHJvbCB0aGUgdm9sdW1lIG9uIHRoZSBIRE1JIHNpbmssIHJhdGhlcgotICAgICAgICAgKiB0aGFuIGF0dGVudWF0ZSBhdCB0aGUgc291cmNlLgotICAgICAgICAgKgotICAgICAgICAgKiBAc2VlICNnZXRWb2x1bWVIYW5kbGluZwotICAgICAgICAgKi8KLSAgICAgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgUExBWUJBQ0tfVk9MVU1FX0ZJWEVEID0gMDsKLQotICAgICAgICAvKioKLSAgICAgICAgICogUGxheWJhY2sgaW5mb3JtYXRpb24gaW5kaWNhdGluZyB0aGUgcGxheWJhY2sgdm9sdW1lIGlzIHZhcmlhYmxlIGFuZCBjYW4gYmUgY29udHJvbGxlZAotICAgICAgICAgKiBmcm9tIHRoaXMgb2JqZWN0LgotICAgICAgICAgKgotICAgICAgICAgKiBAc2VlICNnZXRWb2x1bWVIYW5kbGluZwotICAgICAgICAgKi8KLSAgICAgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgUExBWUJBQ0tfVk9MVU1FX1ZBUklBQkxFID0gMTsKLQotICAgICAgICAvKioKLSAgICAgICAgICogVGhlIGRlZmF1bHQgcHJlc2VudGF0aW9uIGRpc3BsYXkgaWQgaW5kaWNhdGluZyBubyBwcmVzZW50YXRpb24gZGlzcGxheSBpcyBhc3NvY2lhdGVkCi0gICAgICAgICAqIHdpdGggdGhlIHJvdXRlLgotICAgICAgICAgKiBAaGlkZQotICAgICAgICAgKi8KLSAgICAgICAgLy8gQFJlc3RyaWN0VG8oTElCUkFSWV9HUk9VUCkKLSAgICAgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgUFJFU0VOVEFUSU9OX0RJU1BMQVlfSURfTk9ORSA9IC0xOwotCi0gICAgICAgIHN0YXRpYyBmaW5hbCBpbnQgQ0hBTkdFX0dFTkVSQUwgPSAxIDw8IDA7Ci0gICAgICAgIHN0YXRpYyBmaW5hbCBpbnQgQ0hBTkdFX1ZPTFVNRSA9IDEgPDwgMTsKLSAgICAgICAgc3RhdGljIGZpbmFsIGludCBDSEFOR0VfUFJFU0VOVEFUSU9OX0RJU1BMQVkgPSAxIDw8IDI7Ci0KLSAgICAgICAgLy8gU2hvdWxkIG1hdGNoIHRvIFN5c3RlbU1lZGlhUm91dGVQcm92aWRlci5QQUNLQUdFX05BTUUuCi0gICAgICAgIHN0YXRpYyBmaW5hbCBTdHJpbmcgU1lTVEVNX01FRElBX1JPVVRFX1BST1ZJREVSX1BBQ0tBR0VfTkFNRSA9ICJhbmRyb2lkIjsKLQotICAgICAgICBSb3V0ZUluZm8oUHJvdmlkZXJJbmZvIHByb3ZpZGVyLCBTdHJpbmcgZGVzY3JpcHRvcklkLCBTdHJpbmcgdW5pcXVlSWQpIHsKLSAgICAgICAgICAgIG1Qcm92aWRlciA9IHByb3ZpZGVyOwotICAgICAgICAgICAgbURlc2NyaXB0b3JJZCA9IGRlc2NyaXB0b3JJZDsKLSAgICAgICAgICAgIG1VbmlxdWVJZCA9IHVuaXF1ZUlkOwotICAgICAgICB9Ci0KLSAgICAgICAgLyoqCi0gICAgICAgICAqIEdldHMgaW5mb3JtYXRpb24gYWJvdXQgdGhlIHByb3ZpZGVyIG9mIHRoaXMgbWVkaWEgcm91dGUuCi0gICAgICAgICAqLwotICAgICAgICBwdWJsaWMgUHJvdmlkZXJJbmZvIGdldFByb3ZpZGVyKCkgewotICAgICAgICAgICAgcmV0dXJuIG1Qcm92aWRlcjsKLSAgICAgICAgfQotCi0gICAgICAgIC8qKgotICAgICAgICAgKiBHZXRzIHRoZSB1bmlxdWUgaWQgb2YgdGhlIHJvdXRlLgotICAgICAgICAgKiA8cD4KLSAgICAgICAgICogVGhlIHJvdXRlIHVuaXF1ZSBpZCBmdW5jdGlvbnMgYXMgYSBzdGFibGUgaWRlbnRpZmllciBieSB3aGljaCB0aGUgcm91dGUgaXMga25vd24uCi0gICAgICAgICAqIEZvciBleGFtcGxlLCBhbiBhcHBsaWNhdGlvbiBjYW4gdXNlIHRoaXMgaWQgYXMgYSB0b2tlbiB0byByZW1lbWJlciB0aGUKLSAgICAgICAgICogc2VsZWN0ZWQgcm91dGUgYWNyb3NzIHJlc3RhcnRzIG9yIHRvIGNvbW11bmljYXRlIGl0cyBpZGVudGl0eSB0byBhIHNlcnZpY2UuCi0gICAgICAgICAqIDwvcD4KLSAgICAgICAgICoKLSAgICAgICAgICogQHJldHVybiBUaGUgdW5pcXVlIGlkIG9mIHRoZSByb3V0ZSwgbmV2ZXIgbnVsbC4KLSAgICAgICAgICovCi0gICAgICAgIEBOb25OdWxsCi0gICAgICAgIHB1YmxpYyBTdHJpbmcgZ2V0SWQoKSB7Ci0gICAgICAgICAgICByZXR1cm4gbVVuaXF1ZUlkOwotICAgICAgICB9Ci0KLSAgICAgICAgLyoqCi0gICAgICAgICAqIEdldHMgdGhlIHVzZXItdmlzaWJsZSBuYW1lIG9mIHRoZSByb3V0ZS4KLSAgICAgICAgICogPHA+Ci0gICAgICAgICAqIFRoZSByb3V0ZSBuYW1lIGlkZW50aWZpZXMgdGhlIGRlc3RpbmF0aW9uIHJlcHJlc2VudGVkIGJ5IHRoZSByb3V0ZS4KLSAgICAgICAgICogSXQgbWF5IGJlIGEgdXNlci1zdXBwbGllZCBuYW1lLCBhbiBhbGlhcywgb3IgZGV2aWNlIHNlcmlhbCBudW1iZXIuCi0gICAgICAgICAqIDwvcD4KLSAgICAgICAgICoKLSAgICAgICAgICogQHJldHVybiBUaGUgdXNlci12aXNpYmxlIG5hbWUgb2YgYSBtZWRpYSByb3V0ZS4gIFRoaXMgaXMgdGhlIHN0cmluZyBwcmVzZW50ZWQKLSAgICAgICAgICogdG8gdXNlcnMgd2hvIG1heSBzZWxlY3QgdGhpcyBhcyB0aGUgYWN0aXZlIHJvdXRlLgotICAgICAgICAgKi8KLSAgICAgICAgcHVibGljIFN0cmluZyBnZXROYW1lKCkgewotICAgICAgICAgICAgcmV0dXJuIG1OYW1lOwotICAgICAgICB9Ci0KLSAgICAgICAgLyoqCi0gICAgICAgICAqIEdldHMgdGhlIHVzZXItdmlzaWJsZSBkZXNjcmlwdGlvbiBvZiB0aGUgcm91dGUuCi0gICAgICAgICAqIDxwPgotICAgICAgICAgKiBUaGUgcm91dGUgZGVzY3JpcHRpb24gZGVzY3JpYmVzIHRoZSBraW5kIG9mIGRlc3RpbmF0aW9uIHJlcHJlc2VudGVkIGJ5IHRoZSByb3V0ZS4KLSAgICAgICAgICogSXQgbWF5IGJlIGEgdXNlci1zdXBwbGllZCBzdHJpbmcsIGEgbW9kZWwgbnVtYmVyIG9yIGJyYW5kIG9mIGRldmljZS4KLSAgICAgICAgICogPC9wPgotICAgICAgICAgKgotICAgICAgICAgKiBAcmV0dXJuIFRoZSBkZXNjcmlwdGlvbiBvZiB0aGUgcm91dGUsIG9yIG51bGwgaWYgbm9uZS4KLSAgICAgICAgICovCi0gICAgICAgIEBOdWxsYWJsZQotICAgICAgICBwdWJsaWMgU3RyaW5nIGdldERlc2NyaXB0aW9uKCkgewotICAgICAgICAgICAgcmV0dXJuIG1EZXNjcmlwdGlvbjsKLSAgICAgICAgfQotCi0gICAgICAgIC8qKgotICAgICAgICAgKiBHZXRzIHRoZSBVUkkgb2YgdGhlIGljb24gcmVwcmVzZW50aW5nIHRoaXMgcm91dGUuCi0gICAgICAgICAqIDxwPgotICAgICAgICAgKiBUaGlzIGljb24gd2lsbCBiZSB1c2VkIGluIHBpY2tlciBVSXMgaWYgYXZhaWxhYmxlLgotICAgICAgICAgKiA8L3A+Ci0gICAgICAgICAqCi0gICAgICAgICAqIEByZXR1cm4gVGhlIFVSSSBvZiB0aGUgaWNvbiByZXByZXNlbnRpbmcgdGhpcyByb3V0ZSwgb3IgbnVsbCBpZiBub25lLgotICAgICAgICAgKi8KLSAgICAgICAgcHVibGljIFVyaSBnZXRJY29uVXJpKCkgewotICAgICAgICAgICAgcmV0dXJuIG1JY29uVXJpOwotICAgICAgICB9Ci0KLSAgICAgICAgLyoqCi0gICAgICAgICAqIFJldHVybnMgdHJ1ZSBpZiB0aGlzIHJvdXRlIGlzIGVuYWJsZWQgYW5kIG1heSBiZSBzZWxlY3RlZC4KLSAgICAgICAgICoKLSAgICAgICAgICogQHJldHVybiBUcnVlIGlmIHRoaXMgcm91dGUgaXMgZW5hYmxlZC4KLSAgICAgICAgICovCi0gICAgICAgIHB1YmxpYyBib29sZWFuIGlzRW5hYmxlZCgpIHsKLSAgICAgICAgICAgIHJldHVybiBtRW5hYmxlZDsKLSAgICAgICAgfQotCi0gICAgICAgIC8qKgotICAgICAgICAgKiBSZXR1cm5zIHRydWUgaWYgdGhlIHJvdXRlIGlzIGluIHRoZSBwcm9jZXNzIG9mIGNvbm5lY3RpbmcgYW5kIGlzIG5vdAotICAgICAgICAgKiB5ZXQgcmVhZHkgZm9yIHVzZS4KLSAgICAgICAgICoKLSAgICAgICAgICogQHJldHVybiBUcnVlIGlmIHRoaXMgcm91dGUgaXMgaW4gdGhlIHByb2Nlc3Mgb2YgY29ubmVjdGluZy4KLSAgICAgICAgICovCi0gICAgICAgIHB1YmxpYyBib29sZWFuIGlzQ29ubmVjdGluZygpIHsKLSAgICAgICAgICAgIHJldHVybiBtQ29ubmVjdGluZzsKLSAgICAgICAgfQotCi0gICAgICAgIC8qKgotICAgICAgICAgKiBHZXRzIHRoZSBjb25uZWN0aW9uIHN0YXRlIG9mIHRoZSByb3V0ZS4KLSAgICAgICAgICoKLSAgICAgICAgICogQHJldHVybiBUaGUgY29ubmVjdGlvbiBzdGF0ZSBvZiB0aGlzIHJvdXRlOiB7QGxpbmsgI0NPTk5FQ1RJT05fU1RBVEVfRElTQ09OTkVDVEVEfSwKLSAgICAgICAgICoge0BsaW5rICNDT05ORUNUSU9OX1NUQVRFX0NPTk5FQ1RJTkd9LCBvciB7QGxpbmsgI0NPTk5FQ1RJT05fU1RBVEVfQ09OTkVDVEVEfS4KLSAgICAgICAgICovCi0gICAgICAgIEBDb25uZWN0aW9uU3RhdGUKLSAgICAgICAgcHVibGljIGludCBnZXRDb25uZWN0aW9uU3RhdGUoKSB7Ci0gICAgICAgICAgICByZXR1cm4gbUNvbm5lY3Rpb25TdGF0ZTsKLSAgICAgICAgfQotCi0gICAgICAgIC8qKgotICAgICAgICAgKiBSZXR1cm5zIHRydWUgaWYgdGhpcyByb3V0ZSBpcyBjdXJyZW50bHkgc2VsZWN0ZWQuCi0gICAgICAgICAqCi0gICAgICAgICAqIEByZXR1cm4gVHJ1ZSBpZiB0aGlzIHJvdXRlIGlzIGN1cnJlbnRseSBzZWxlY3RlZC4KLSAgICAgICAgICoKLSAgICAgICAgICogQHNlZSBNZWRpYVJvdXRlciNnZXRTZWxlY3RlZFJvdXRlCi0gICAgICAgICAqLwotICAgICAgICBwdWJsaWMgYm9vbGVhbiBpc1NlbGVjdGVkKCkgewotICAgICAgICAgICAgY2hlY2tDYWxsaW5nVGhyZWFkKCk7Ci0gICAgICAgICAgICByZXR1cm4gc0dsb2JhbC5nZXRTZWxlY3RlZFJvdXRlKCkgPT0gdGhpczsKLSAgICAgICAgfQotCi0gICAgICAgIC8qKgotICAgICAgICAgKiBSZXR1cm5zIHRydWUgaWYgdGhpcyByb3V0ZSBpcyB0aGUgZGVmYXVsdCByb3V0ZS4KLSAgICAgICAgICoKLSAgICAgICAgICogQHJldHVybiBUcnVlIGlmIHRoaXMgcm91dGUgaXMgdGhlIGRlZmF1bHQgcm91dGUuCi0gICAgICAgICAqCi0gICAgICAgICAqIEBzZWUgTWVkaWFSb3V0ZXIjZ2V0RGVmYXVsdFJvdXRlCi0gICAgICAgICAqLwotICAgICAgICBwdWJsaWMgYm9vbGVhbiBpc0RlZmF1bHQoKSB7Ci0gICAgICAgICAgICBjaGVja0NhbGxpbmdUaHJlYWQoKTsKLSAgICAgICAgICAgIHJldHVybiBzR2xvYmFsLmdldERlZmF1bHRSb3V0ZSgpID09IHRoaXM7Ci0gICAgICAgIH0KLQotICAgICAgICAvKioKLSAgICAgICAgICogUmV0dXJucyB0cnVlIGlmIHRoaXMgcm91dGUgaXMgYSBibHVldG9vdGggcm91dGUuCi0gICAgICAgICAqCi0gICAgICAgICAqIEByZXR1cm4gVHJ1ZSBpZiB0aGlzIHJvdXRlIGlzIGEgYmx1ZXRvb3RoIHJvdXRlLgotICAgICAgICAgKgotICAgICAgICAgKiBAc2VlIE1lZGlhUm91dGVyI2dldEJsdWV0b290aFJvdXRlCi0gICAgICAgICAqLwotICAgICAgICBwdWJsaWMgYm9vbGVhbiBpc0JsdWV0b290aCgpIHsKLSAgICAgICAgICAgIGNoZWNrQ2FsbGluZ1RocmVhZCgpOwotICAgICAgICAgICAgcmV0dXJuIHNHbG9iYWwuZ2V0Qmx1ZXRvb3RoUm91dGUoKSA9PSB0aGlzOwotICAgICAgICB9Ci0KLSAgICAgICAgLyoqCi0gICAgICAgICAqIFJldHVybnMgdHJ1ZSBpZiB0aGlzIHJvdXRlIGlzIHRoZSBkZWZhdWx0IHJvdXRlIGFuZCB0aGUgZGV2aWNlIHNwZWFrZXIuCi0gICAgICAgICAqCi0gICAgICAgICAqIEByZXR1cm4gVHJ1ZSBpZiB0aGlzIHJvdXRlIGlzIHRoZSBkZWZhdWx0IHJvdXRlIGFuZCB0aGUgZGV2aWNlIHNwZWFrZXIuCi0gICAgICAgICAqLwotICAgICAgICBwdWJsaWMgYm9vbGVhbiBpc0RldmljZVNwZWFrZXIoKSB7Ci0gICAgICAgICAgICBpbnQgZGVmYXVsdEF1ZGlvUm91dGVOYW1lUmVzb3VyY2VJZCA9IFJlc291cmNlcy5nZXRTeXN0ZW0oKS5nZXRJZGVudGlmaWVyKAotICAgICAgICAgICAgICAgICAgICAiZGVmYXVsdF9hdWRpb19yb3V0ZV9uYW1lIiwgInN0cmluZyIsICJhbmRyb2lkIik7Ci0gICAgICAgICAgICByZXR1cm4gaXNEZWZhdWx0KCkKLSAgICAgICAgICAgICAgICAgICAgJiYgUmVzb3VyY2VzLmdldFN5c3RlbSgpLmdldFRleHQoZGVmYXVsdEF1ZGlvUm91dGVOYW1lUmVzb3VyY2VJZCkuZXF1YWxzKG1OYW1lKTsKLSAgICAgICAgfQotCi0gICAgICAgIC8qKgotICAgICAgICAgKiBHZXRzIGEgbGlzdCBvZiB7QGxpbmsgTWVkaWFDb250cm9sSW50ZW50IG1lZGlhIGNvbnRyb2wgaW50ZW50fSBmaWx0ZXJzIHRoYXQKLSAgICAgICAgICogZGVzY3JpYmUgdGhlIGNhcGFiaWxpdGllcyBvZiB0aGlzIHJvdXRlIGFuZCB0aGUgbWVkaWEgY29udHJvbCBhY3Rpb25zIHRoYXQKLSAgICAgICAgICogaXQgc3VwcG9ydHMuCi0gICAgICAgICAqCi0gICAgICAgICAqIEByZXR1cm4gQSBsaXN0IG9mIGludGVudCBmaWx0ZXJzIHRoYXQgc3BlY2lmaWVzIHRoZSBtZWRpYSBjb250cm9sIGludGVudHMgdGhhdAotICAgICAgICAgKiB0aGlzIHJvdXRlIHN1cHBvcnRzLgotICAgICAgICAgKgotICAgICAgICAgKiBAc2VlIE1lZGlhQ29udHJvbEludGVudAotICAgICAgICAgKiBAc2VlICNzdXBwb3J0c0NvbnRyb2xDYXRlZ29yeQotICAgICAgICAgKiBAc2VlICNzdXBwb3J0c0NvbnRyb2xSZXF1ZXN0Ci0gICAgICAgICAqLwotICAgICAgICBwdWJsaWMgTGlzdDxJbnRlbnRGaWx0ZXI+IGdldENvbnRyb2xGaWx0ZXJzKCkgewotICAgICAgICAgICAgcmV0dXJuIG1Db250cm9sRmlsdGVyczsKLSAgICAgICAgfQotCi0gICAgICAgIC8qKgotICAgICAgICAgKiBSZXR1cm5zIHRydWUgaWYgdGhlIHJvdXRlIHN1cHBvcnRzIGF0IGxlYXN0IG9uZSBvZiB0aGUgY2FwYWJpbGl0aWVzCi0gICAgICAgICAqIGRlc2NyaWJlZCBieSBhIG1lZGlhIHJvdXRlIHNlbGVjdG9yLgotICAgICAgICAgKgotICAgICAgICAgKiBAcGFyYW0gc2VsZWN0b3IgVGhlIHNlbGVjdG9yIHRoYXQgc3BlY2lmaWVzIHRoZSBjYXBhYmlsaXRpZXMgdG8gY2hlY2suCi0gICAgICAgICAqIEByZXR1cm4gVHJ1ZSBpZiB0aGUgcm91dGUgc3VwcG9ydHMgYXQgbGVhc3Qgb25lIG9mIHRoZSBjYXBhYmlsaXRpZXMKLSAgICAgICAgICogZGVzY3JpYmVkIGluIHRoZSBtZWRpYSByb3V0ZSBzZWxlY3Rvci4KLSAgICAgICAgICovCi0gICAgICAgIHB1YmxpYyBib29sZWFuIG1hdGNoZXNTZWxlY3RvcihATm9uTnVsbCBNZWRpYVJvdXRlU2VsZWN0b3Igc2VsZWN0b3IpIHsKLSAgICAgICAgICAgIGlmIChzZWxlY3RvciA9PSBudWxsKSB7Ci0gICAgICAgICAgICAgICAgdGhyb3cgbmV3IElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbigic2VsZWN0b3IgbXVzdCBub3QgYmUgbnVsbCIpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgY2hlY2tDYWxsaW5nVGhyZWFkKCk7Ci0gICAgICAgICAgICByZXR1cm4gc2VsZWN0b3IubWF0Y2hlc0NvbnRyb2xGaWx0ZXJzKG1Db250cm9sRmlsdGVycyk7Ci0gICAgICAgIH0KLQotICAgICAgICAvKioKLSAgICAgICAgICogUmV0dXJucyB0cnVlIGlmIHRoZSByb3V0ZSBzdXBwb3J0cyB0aGUgc3BlY2lmaWVkCi0gICAgICAgICAqIHtAbGluayBNZWRpYUNvbnRyb2xJbnRlbnQgbWVkaWEgY29udHJvbH0gY2F0ZWdvcnkuCi0gICAgICAgICAqIDxwPgotICAgICAgICAgKiBNZWRpYSBjb250cm9sIGNhdGVnb3JpZXMgZGVzY3JpYmUgdGhlIGNhcGFiaWxpdGllcyBvZiB0aGlzIHJvdXRlCi0gICAgICAgICAqIHN1Y2ggYXMgd2hldGhlciBpdCBzdXBwb3J0cyBsaXZlIGF1ZGlvIHN0cmVhbWluZyBvciByZW1vdGUgcGxheWJhY2suCi0gICAgICAgICAqIDwvcD4KLSAgICAgICAgICoKLSAgICAgICAgICogQHBhcmFtIGNhdGVnb3J5IEEge0BsaW5rIE1lZGlhQ29udHJvbEludGVudCBtZWRpYSBjb250cm9sfSBjYXRlZ29yeQotICAgICAgICAgKiBzdWNoIGFzIHtAbGluayBNZWRpYUNvbnRyb2xJbnRlbnQjQ0FURUdPUllfTElWRV9BVURJT30sCi0gICAgICAgICAqIHtAbGluayBNZWRpYUNvbnRyb2xJbnRlbnQjQ0FURUdPUllfTElWRV9WSURFT30sCi0gICAgICAgICAqIHtAbGluayBNZWRpYUNvbnRyb2xJbnRlbnQjQ0FURUdPUllfUkVNT1RFX1BMQVlCQUNLfSwgb3IgYSBwcm92aWRlci1kZWZpbmVkCi0gICAgICAgICAqIG1lZGlhIGNvbnRyb2wgY2F0ZWdvcnkuCi0gICAgICAgICAqIEByZXR1cm4gVHJ1ZSBpZiB0aGUgcm91dGUgc3VwcG9ydHMgdGhlIHNwZWNpZmllZCBpbnRlbnQgY2F0ZWdvcnkuCi0gICAgICAgICAqCi0gICAgICAgICAqIEBzZWUgTWVkaWFDb250cm9sSW50ZW50Ci0gICAgICAgICAqIEBzZWUgI2dldENvbnRyb2xGaWx0ZXJzCi0gICAgICAgICAqLwotICAgICAgICBwdWJsaWMgYm9vbGVhbiBzdXBwb3J0c0NvbnRyb2xDYXRlZ29yeShATm9uTnVsbCBTdHJpbmcgY2F0ZWdvcnkpIHsKLSAgICAgICAgICAgIGlmIChjYXRlZ29yeSA9PSBudWxsKSB7Ci0gICAgICAgICAgICAgICAgdGhyb3cgbmV3IElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbigiY2F0ZWdvcnkgbXVzdCBub3QgYmUgbnVsbCIpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgY2hlY2tDYWxsaW5nVGhyZWFkKCk7Ci0KLSAgICAgICAgICAgIGludCBjb3VudCA9IG1Db250cm9sRmlsdGVycy5zaXplKCk7Ci0gICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGNvdW50OyBpKyspIHsKLSAgICAgICAgICAgICAgICBpZiAobUNvbnRyb2xGaWx0ZXJzLmdldChpKS5oYXNDYXRlZ29yeShjYXRlZ29yeSkpIHsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9Ci0KLSAgICAgICAgLyoqCi0gICAgICAgICAqIFJldHVybnMgdHJ1ZSBpZiB0aGUgcm91dGUgc3VwcG9ydHMgdGhlIHNwZWNpZmllZAotICAgICAgICAgKiB7QGxpbmsgTWVkaWFDb250cm9sSW50ZW50IG1lZGlhIGNvbnRyb2x9IGNhdGVnb3J5IGFuZCBhY3Rpb24uCi0gICAgICAgICAqIDxwPgotICAgICAgICAgKiBNZWRpYSBjb250cm9sIGFjdGlvbnMgZGVzY3JpYmUgc3BlY2lmaWMgcmVxdWVzdHMgdGhhdCBhbiBhcHBsaWNhdGlvbgotICAgICAgICAgKiBjYW4gYXNrIGEgcm91dGUgdG8gcGVyZm9ybS4KLSAgICAgICAgICogPC9wPgotICAgICAgICAgKgotICAgICAgICAgKiBAcGFyYW0gY2F0ZWdvcnkgQSB7QGxpbmsgTWVkaWFDb250cm9sSW50ZW50IG1lZGlhIGNvbnRyb2x9IGNhdGVnb3J5Ci0gICAgICAgICAqIHN1Y2ggYXMge0BsaW5rIE1lZGlhQ29udHJvbEludGVudCNDQVRFR09SWV9MSVZFX0FVRElPfSwKLSAgICAgICAgICoge0BsaW5rIE1lZGlhQ29udHJvbEludGVudCNDQVRFR09SWV9MSVZFX1ZJREVPfSwKLSAgICAgICAgICoge0BsaW5rIE1lZGlhQ29udHJvbEludGVudCNDQVRFR09SWV9SRU1PVEVfUExBWUJBQ0t9LCBvciBhIHByb3ZpZGVyLWRlZmluZWQKLSAgICAgICAgICogbWVkaWEgY29udHJvbCBjYXRlZ29yeS4KLSAgICAgICAgICogQHBhcmFtIGFjdGlvbiBBIHtAbGluayBNZWRpYUNvbnRyb2xJbnRlbnQgbWVkaWEgY29udHJvbH0gYWN0aW9uCi0gICAgICAgICAqIHN1Y2ggYXMge0BsaW5rIE1lZGlhQ29udHJvbEludGVudCNBQ1RJT05fUExBWX0uCi0gICAgICAgICAqIEByZXR1cm4gVHJ1ZSBpZiB0aGUgcm91dGUgc3VwcG9ydHMgdGhlIHNwZWNpZmllZCBpbnRlbnQgYWN0aW9uLgotICAgICAgICAgKgotICAgICAgICAgKiBAc2VlIE1lZGlhQ29udHJvbEludGVudAotICAgICAgICAgKiBAc2VlICNnZXRDb250cm9sRmlsdGVycwotICAgICAgICAgKi8KLSAgICAgICAgcHVibGljIGJvb2xlYW4gc3VwcG9ydHNDb250cm9sQWN0aW9uKEBOb25OdWxsIFN0cmluZyBjYXRlZ29yeSwgQE5vbk51bGwgU3RyaW5nIGFjdGlvbikgewotICAgICAgICAgICAgaWYgKGNhdGVnb3J5ID09IG51bGwpIHsKLSAgICAgICAgICAgICAgICB0aHJvdyBuZXcgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKCJjYXRlZ29yeSBtdXN0IG5vdCBiZSBudWxsIik7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAoYWN0aW9uID09IG51bGwpIHsKLSAgICAgICAgICAgICAgICB0aHJvdyBuZXcgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKCJhY3Rpb24gbXVzdCBub3QgYmUgbnVsbCIpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgY2hlY2tDYWxsaW5nVGhyZWFkKCk7Ci0KLSAgICAgICAgICAgIGludCBjb3VudCA9IG1Db250cm9sRmlsdGVycy5zaXplKCk7Ci0gICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGNvdW50OyBpKyspIHsKLSAgICAgICAgICAgICAgICBJbnRlbnRGaWx0ZXIgZmlsdGVyID0gbUNvbnRyb2xGaWx0ZXJzLmdldChpKTsKLSAgICAgICAgICAgICAgICBpZiAoZmlsdGVyLmhhc0NhdGVnb3J5KGNhdGVnb3J5KSAmJiBmaWx0ZXIuaGFzQWN0aW9uKGFjdGlvbikpIHsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9Ci0KLSAgICAgICAgLyoqCi0gICAgICAgICAqIFJldHVybnMgdHJ1ZSBpZiB0aGUgcm91dGUgc3VwcG9ydHMgdGhlIHNwZWNpZmllZAotICAgICAgICAgKiB7QGxpbmsgTWVkaWFDb250cm9sSW50ZW50IG1lZGlhIGNvbnRyb2x9IHJlcXVlc3QuCi0gICAgICAgICAqIDxwPgotICAgICAgICAgKiBNZWRpYSBjb250cm9sIHJlcXVlc3RzIGFyZSB1c2VkIHRvIHJlcXVlc3QgdGhlIHJvdXRlIHRvIHBlcmZvcm0KLSAgICAgICAgICogYWN0aW9ucyBzdWNoIGFzIHN0YXJ0aW5nIHJlbW90ZSBwbGF5YmFjayBvZiBhIG1lZGlhIGl0ZW0uCi0gICAgICAgICAqIDwvcD4KLSAgICAgICAgICoKLSAgICAgICAgICogQHBhcmFtIGludGVudCBBIHtAbGluayBNZWRpYUNvbnRyb2xJbnRlbnQgbWVkaWEgY29udHJvbCBpbnRlbnR9LgotICAgICAgICAgKiBAcmV0dXJuIFRydWUgaWYgdGhlIHJvdXRlIGNhbiBoYW5kbGUgdGhlIHNwZWNpZmllZCBpbnRlbnQuCi0gICAgICAgICAqCi0gICAgICAgICAqIEBzZWUgTWVkaWFDb250cm9sSW50ZW50Ci0gICAgICAgICAqIEBzZWUgI2dldENvbnRyb2xGaWx0ZXJzCi0gICAgICAgICAqLwotICAgICAgICBwdWJsaWMgYm9vbGVhbiBzdXBwb3J0c0NvbnRyb2xSZXF1ZXN0KEBOb25OdWxsIEludGVudCBpbnRlbnQpIHsKLSAgICAgICAgICAgIGlmIChpbnRlbnQgPT0gbnVsbCkgewotICAgICAgICAgICAgICAgIHRocm93IG5ldyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oImludGVudCBtdXN0IG5vdCBiZSBudWxsIik7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBjaGVja0NhbGxpbmdUaHJlYWQoKTsKLQotICAgICAgICAgICAgQ29udGVudFJlc29sdmVyIGNvbnRlbnRSZXNvbHZlciA9IHNHbG9iYWwuZ2V0Q29udGVudFJlc29sdmVyKCk7Ci0gICAgICAgICAgICBpbnQgY291bnQgPSBtQ29udHJvbEZpbHRlcnMuc2l6ZSgpOwotICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBjb3VudDsgaSsrKSB7Ci0gICAgICAgICAgICAgICAgaWYgKG1Db250cm9sRmlsdGVycy5nZXQoaSkubWF0Y2goY29udGVudFJlc29sdmVyLCBpbnRlbnQsIHRydWUsIFRBRykgPj0gMCkgewotICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0KLQotICAgICAgICAvKioKLSAgICAgICAgICogU2VuZHMgYSB7QGxpbmsgTWVkaWFDb250cm9sSW50ZW50IG1lZGlhIGNvbnRyb2x9IHJlcXVlc3QgdG8gYmUgcGVyZm9ybWVkCi0gICAgICAgICAqIGFzeW5jaHJvbm91c2x5IGJ5IHRoZSByb3V0ZSdzIGRlc3RpbmF0aW9uLgotICAgICAgICAgKiA8cD4KLSAgICAgICAgICogTWVkaWEgY29udHJvbCByZXF1ZXN0cyBhcmUgdXNlZCB0byByZXF1ZXN0IHRoZSByb3V0ZSB0byBwZXJmb3JtCi0gICAgICAgICAqIGFjdGlvbnMgc3VjaCBhcyBzdGFydGluZyByZW1vdGUgcGxheWJhY2sgb2YgYSBtZWRpYSBpdGVtLgotICAgICAgICAgKiA8L3A+PHA+Ci0gICAgICAgICAqIFRoaXMgZnVuY3Rpb24gbWF5IG9ubHkgYmUgY2FsbGVkIG9uIGEgc2VsZWN0ZWQgcm91dGUuICBDb250cm9sIHJlcXVlc3RzCi0gICAgICAgICAqIHNlbnQgdG8gdW5zZWxlY3RlZCByb3V0ZXMgd2lsbCBmYWlsLgotICAgICAgICAgKiA8L3A+Ci0gICAgICAgICAqCi0gICAgICAgICAqIEBwYXJhbSBpbnRlbnQgQSB7QGxpbmsgTWVkaWFDb250cm9sSW50ZW50IG1lZGlhIGNvbnRyb2wgaW50ZW50fS4KLSAgICAgICAgICogQHBhcmFtIGNhbGxiYWNrIEEge0BsaW5rIENvbnRyb2xSZXF1ZXN0Q2FsbGJhY2t9IHRvIGludm9rZSB3aXRoIHRoZSByZXN1bHQKLSAgICAgICAgICogb2YgdGhlIHJlcXVlc3QsIG9yIG51bGwgaWYgbm8gcmVzdWx0IGlzIHJlcXVpcmVkLgotICAgICAgICAgKgotICAgICAgICAgKiBAc2VlIE1lZGlhQ29udHJvbEludGVudAotICAgICAgICAgKi8KLSAgICAgICAgcHVibGljIHZvaWQgc2VuZENvbnRyb2xSZXF1ZXN0KEBOb25OdWxsIEludGVudCBpbnRlbnQsCi0gICAgICAgICAgICAgICAgQE51bGxhYmxlIENvbnRyb2xSZXF1ZXN0Q2FsbGJhY2sgY2FsbGJhY2spIHsKLSAgICAgICAgICAgIGlmIChpbnRlbnQgPT0gbnVsbCkgewotICAgICAgICAgICAgICAgIHRocm93IG5ldyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oImludGVudCBtdXN0IG5vdCBiZSBudWxsIik7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBjaGVja0NhbGxpbmdUaHJlYWQoKTsKLQotICAgICAgICAgICAgc0dsb2JhbC5zZW5kQ29udHJvbFJlcXVlc3QodGhpcywgaW50ZW50LCBjYWxsYmFjayk7Ci0gICAgICAgIH0KLQotICAgICAgICAvKioKLSAgICAgICAgICogR2V0cyB0aGUgdHlwZSBvZiBwbGF5YmFjayBhc3NvY2lhdGVkIHdpdGggdGhpcyByb3V0ZS4KLSAgICAgICAgICoKLSAgICAgICAgICogQHJldHVybiBUaGUgdHlwZSBvZiBwbGF5YmFjayBhc3NvY2lhdGVkIHdpdGggdGhpcyByb3V0ZToge0BsaW5rICNQTEFZQkFDS19UWVBFX0xPQ0FMfQotICAgICAgICAgKiBvciB7QGxpbmsgI1BMQVlCQUNLX1RZUEVfUkVNT1RFfS4KLSAgICAgICAgICovCi0gICAgICAgIEBQbGF5YmFja1R5cGUKLSAgICAgICAgcHVibGljIGludCBnZXRQbGF5YmFja1R5cGUoKSB7Ci0gICAgICAgICAgICByZXR1cm4gbVBsYXliYWNrVHlwZTsKLSAgICAgICAgfQotCi0gICAgICAgIC8qKgotICAgICAgICAgKiBHZXRzIHRoZSBhdWRpbyBzdHJlYW0gb3ZlciB3aGljaCB0aGUgcGxheWJhY2sgYXNzb2NpYXRlZCB3aXRoIHRoaXMgcm91dGUgaXMgcGVyZm9ybWVkLgotICAgICAgICAgKgotICAgICAgICAgKiBAcmV0dXJuIFRoZSBzdHJlYW0gb3ZlciB3aGljaCB0aGUgcGxheWJhY2sgYXNzb2NpYXRlZCB3aXRoIHRoaXMgcm91dGUgaXMgcGVyZm9ybWVkLgotICAgICAgICAgKi8KLSAgICAgICAgcHVibGljIGludCBnZXRQbGF5YmFja1N0cmVhbSgpIHsKLSAgICAgICAgICAgIHJldHVybiBtUGxheWJhY2tTdHJlYW07Ci0gICAgICAgIH0KLQotICAgICAgICAvKioKLSAgICAgICAgICogR2V0cyB0aGUgdHlwZSBvZiB0aGUgcmVjZWl2ZXIgZGV2aWNlIGFzc29jaWF0ZWQgd2l0aCB0aGlzIHJvdXRlLgotICAgICAgICAgKgotICAgICAgICAgKiBAcmV0dXJuIFRoZSB0eXBlIG9mIHRoZSByZWNlaXZlciBkZXZpY2UgYXNzb2NpYXRlZCB3aXRoIHRoaXMgcm91dGU6Ci0gICAgICAgICAqIHtAbGluayAjREVWSUNFX1RZUEVfVFZ9IG9yIHtAbGluayAjREVWSUNFX1RZUEVfU1BFQUtFUn0uCi0gICAgICAgICAqLwotICAgICAgICBwdWJsaWMgaW50IGdldERldmljZVR5cGUoKSB7Ci0gICAgICAgICAgICByZXR1cm4gbURldmljZVR5cGU7Ci0gICAgICAgIH0KLQotCi0gICAgICAgIC8qKgotICAgICAgICAgKiBAaGlkZQotICAgICAgICAgKi8KLSAgICAgICAgLy8gQFJlc3RyaWN0VG8oTElCUkFSWV9HUk9VUCkKLSAgICAgICAgcHVibGljIGJvb2xlYW4gaXNEZWZhdWx0T3JCbHVldG9vdGgoKSB7Ci0gICAgICAgICAgICBpZiAoaXNEZWZhdWx0KCkgfHwgbURldmljZVR5cGUgPT0gREVWSUNFX1RZUEVfQkxVRVRPT1RIKSB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICAvLyBUaGlzIGlzIGEgd29ya2Fyb3VuZCBmb3IgcGxhdGZvcm0gdmVyc2lvbiAyMyBvciBiZWxvdyB3aGVyZSB0aGUgc3lzdGVtIHJvdXRlCi0gICAgICAgICAgICAvLyBwcm92aWRlciBkb2Vzbid0IHNwZWNpZnkgZGV2aWNlIHR5cGUgZm9yIGJsdWV0b290aCBtZWRpYSByb3V0ZXMuCi0gICAgICAgICAgICByZXR1cm4gaXNTeXN0ZW1NZWRpYVJvdXRlUHJvdmlkZXIodGhpcykKLSAgICAgICAgICAgICAgICAgICAgJiYgc3VwcG9ydHNDb250cm9sQ2F0ZWdvcnkoTWVkaWFDb250cm9sSW50ZW50LkNBVEVHT1JZX0xJVkVfQVVESU8pCi0gICAgICAgICAgICAgICAgICAgICYmICFzdXBwb3J0c0NvbnRyb2xDYXRlZ29yeShNZWRpYUNvbnRyb2xJbnRlbnQuQ0FURUdPUllfTElWRV9WSURFTyk7Ci0gICAgICAgIH0KLQotICAgICAgICAvKioKLSAgICAgICAgICogUmV0dXJucyB7QGNvZGUgdHJ1ZX0gaWYgdGhlIHJvdXRlIGlzIHNlbGVjdGFibGUuCi0gICAgICAgICAqLwotICAgICAgICBib29sZWFuIGlzU2VsZWN0YWJsZSgpIHsKLSAgICAgICAgICAgIC8vIFRoaXMgdGVzdHMgd2hldGhlciB0aGUgcm91dGUgaXMgc3RpbGwgdmFsaWQgYW5kIGVuYWJsZWQuCi0gICAgICAgICAgICAvLyBUaGUgcm91dGUgZGVzY3JpcHRvciBmaWVsZCBpcyBzZXQgdG8gbnVsbCB3aGVuIHRoZSByb3V0ZSBpcyByZW1vdmVkLgotICAgICAgICAgICAgcmV0dXJuIG1EZXNjcmlwdG9yICE9IG51bGwgJiYgbUVuYWJsZWQ7Ci0gICAgICAgIH0KLQotICAgICAgICBwcml2YXRlIHN0YXRpYyBib29sZWFuIGlzU3lzdGVtTWVkaWFSb3V0ZVByb3ZpZGVyKE1lZGlhUm91dGVyLlJvdXRlSW5mbyByb3V0ZSkgewotICAgICAgICAgICAgcmV0dXJuIFRleHRVdGlscy5lcXVhbHMocm91dGUuZ2V0UHJvdmlkZXJJbnN0YW5jZSgpLmdldE1ldGFkYXRhKCkuZ2V0UGFja2FnZU5hbWUoKSwKLSAgICAgICAgICAgICAgICAgICAgU1lTVEVNX01FRElBX1JPVVRFX1BST1ZJREVSX1BBQ0tBR0VfTkFNRSk7Ci0gICAgICAgIH0KLQotICAgICAgICAvKioKLSAgICAgICAgICogR2V0cyBpbmZvcm1hdGlvbiBhYm91dCBob3cgdm9sdW1lIGlzIGhhbmRsZWQgb24gdGhlIHJvdXRlLgotICAgICAgICAgKgotICAgICAgICAgKiBAcmV0dXJuIEhvdyB2b2x1bWUgaXMgaGFuZGxlZCBvbiB0aGUgcm91dGU6IHtAbGluayAjUExBWUJBQ0tfVk9MVU1FX0ZJWEVEfQotICAgICAgICAgKiBvciB7QGxpbmsgI1BMQVlCQUNLX1ZPTFVNRV9WQVJJQUJMRX0uCi0gICAgICAgICAqLwotICAgICAgICBAUGxheWJhY2tWb2x1bWUKLSAgICAgICAgcHVibGljIGludCBnZXRWb2x1bWVIYW5kbGluZygpIHsKLSAgICAgICAgICAgIHJldHVybiBtVm9sdW1lSGFuZGxpbmc7Ci0gICAgICAgIH0KLQotICAgICAgICAvKioKLSAgICAgICAgICogR2V0cyB0aGUgY3VycmVudCB2b2x1bWUgZm9yIHRoaXMgcm91dGUuIERlcGVuZGluZyBvbiB0aGUgcm91dGUsIHRoaXMgbWF5IG9ubHkKLSAgICAgICAgICogYmUgdmFsaWQgaWYgdGhlIHJvdXRlIGlzIGN1cnJlbnRseSBzZWxlY3RlZC4KLSAgICAgICAgICoKLSAgICAgICAgICogQHJldHVybiBUaGUgdm9sdW1lIGF0IHdoaWNoIHRoZSBwbGF5YmFjayBhc3NvY2lhdGVkIHdpdGggdGhpcyByb3V0ZSBpcyBwZXJmb3JtZWQuCi0gICAgICAgICAqLwotICAgICAgICBwdWJsaWMgaW50IGdldFZvbHVtZSgpIHsKLSAgICAgICAgICAgIHJldHVybiBtVm9sdW1lOwotICAgICAgICB9Ci0KLSAgICAgICAgLyoqCi0gICAgICAgICAqIEdldHMgdGhlIG1heGltdW0gdm9sdW1lIGF0IHdoaWNoIHRoZSBwbGF5YmFjayBhc3NvY2lhdGVkIHdpdGggdGhpcyByb3V0ZSBpcyBwZXJmb3JtZWQuCi0gICAgICAgICAqCi0gICAgICAgICAqIEByZXR1cm4gVGhlIG1heGltdW0gdm9sdW1lIGF0IHdoaWNoIHRoZSBwbGF5YmFjayBhc3NvY2lhdGVkIHdpdGgKLSAgICAgICAgICogdGhpcyByb3V0ZSBpcyBwZXJmb3JtZWQuCi0gICAgICAgICAqLwotICAgICAgICBwdWJsaWMgaW50IGdldFZvbHVtZU1heCgpIHsKLSAgICAgICAgICAgIHJldHVybiBtVm9sdW1lTWF4OwotICAgICAgICB9Ci0KLSAgICAgICAgLyoqCi0gICAgICAgICAqIEdldHMgd2hldGhlciB0aGlzIHJvdXRlIHN1cHBvcnRzIGRpc2Nvbm5lY3Rpbmcgd2l0aG91dCBpbnRlcnJ1cHRpbmcKLSAgICAgICAgICogcGxheWJhY2suCi0gICAgICAgICAqCi0gICAgICAgICAqIEByZXR1cm4gVHJ1ZSBpZiB0aGlzIHJvdXRlIGNhbiBkaXNjb25uZWN0IHdpdGhvdXQgc3RvcHBpbmcgcGxheWJhY2ssCi0gICAgICAgICAqICAgICAgICAgZmFsc2Ugb3RoZXJ3aXNlLgotICAgICAgICAgKi8KLSAgICAgICAgcHVibGljIGJvb2xlYW4gY2FuRGlzY29ubmVjdCgpIHsKLSAgICAgICAgICAgIHJldHVybiBtQ2FuRGlzY29ubmVjdDsKLSAgICAgICAgfQotCi0gICAgICAgIC8qKgotICAgICAgICAgKiBSZXF1ZXN0cyBhIHZvbHVtZSBjaGFuZ2UgZm9yIHRoaXMgcm91dGUgYXN5bmNocm9ub3VzbHkuCi0gICAgICAgICAqIDxwPgotICAgICAgICAgKiBUaGlzIGZ1bmN0aW9uIG1heSBvbmx5IGJlIGNhbGxlZCBvbiBhIHNlbGVjdGVkIHJvdXRlLiAgSXQgd2lsbCBoYXZlCi0gICAgICAgICAqIG5vIGVmZmVjdCBpZiB0aGUgcm91dGUgaXMgY3VycmVudGx5IHVuc2VsZWN0ZWQuCi0gICAgICAgICAqIDwvcD4KLSAgICAgICAgICoKLSAgICAgICAgICogQHBhcmFtIHZvbHVtZSBUaGUgbmV3IHZvbHVtZSB2YWx1ZSBiZXR3ZWVuIDAgYW5kIHtAbGluayAjZ2V0Vm9sdW1lTWF4fS4KLSAgICAgICAgICovCi0gICAgICAgIHB1YmxpYyB2b2lkIHJlcXVlc3RTZXRWb2x1bWUoaW50IHZvbHVtZSkgewotICAgICAgICAgICAgY2hlY2tDYWxsaW5nVGhyZWFkKCk7Ci0gICAgICAgICAgICBzR2xvYmFsLnJlcXVlc3RTZXRWb2x1bWUodGhpcywgTWF0aC5taW4obVZvbHVtZU1heCwgTWF0aC5tYXgoMCwgdm9sdW1lKSkpOwotICAgICAgICB9Ci0KLSAgICAgICAgLyoqCi0gICAgICAgICAqIFJlcXVlc3RzIGFuIGluY3JlbWVudGFsIHZvbHVtZSB1cGRhdGUgZm9yIHRoaXMgcm91dGUgYXN5bmNocm9ub3VzbHkuCi0gICAgICAgICAqIDxwPgotICAgICAgICAgKiBUaGlzIGZ1bmN0aW9uIG1heSBvbmx5IGJlIGNhbGxlZCBvbiBhIHNlbGVjdGVkIHJvdXRlLiAgSXQgd2lsbCBoYXZlCi0gICAgICAgICAqIG5vIGVmZmVjdCBpZiB0aGUgcm91dGUgaXMgY3VycmVudGx5IHVuc2VsZWN0ZWQuCi0gICAgICAgICAqIDwvcD4KLSAgICAgICAgICoKLSAgICAgICAgICogQHBhcmFtIGRlbHRhIFRoZSBkZWx0YSB0byBhZGQgdG8gdGhlIGN1cnJlbnQgdm9sdW1lLgotICAgICAgICAgKi8KLSAgICAgICAgcHVibGljIHZvaWQgcmVxdWVzdFVwZGF0ZVZvbHVtZShpbnQgZGVsdGEpIHsKLSAgICAgICAgICAgIGNoZWNrQ2FsbGluZ1RocmVhZCgpOwotICAgICAgICAgICAgaWYgKGRlbHRhICE9IDApIHsKLSAgICAgICAgICAgICAgICBzR2xvYmFsLnJlcXVlc3RVcGRhdGVWb2x1bWUodGhpcywgZGVsdGEpOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgLyoqCi0gICAgICAgICAqIEdldHMgdGhlIHtAbGluayBEaXNwbGF5fSB0aGF0IHNob3VsZCBiZSB1c2VkIGJ5IHRoZSBhcHBsaWNhdGlvbiB0byBzaG93Ci0gICAgICAgICAqIGEge0BsaW5rIGFuZHJvaWQuYXBwLlByZXNlbnRhdGlvbn0gb24gYW4gZXh0ZXJuYWwgZGlzcGxheSB3aGVuIHRoaXMgcm91dGUgaXMgc2VsZWN0ZWQuCi0gICAgICAgICAqIERlcGVuZGluZyBvbiB0aGUgcm91dGUsIHRoaXMgbWF5IG9ubHkgYmUgdmFsaWQgaWYgdGhlIHJvdXRlIGlzIGN1cnJlbnRseQotICAgICAgICAgKiBzZWxlY3RlZC4KLSAgICAgICAgICogPHA+Ci0gICAgICAgICAqIFRoZSBwcmVmZXJyZWQgcHJlc2VudGF0aW9uIGRpc3BsYXkgbWF5IGNoYW5nZSBpbmRlcGVuZGVudGx5IG9mIHRoZSByb3V0ZQotICAgICAgICAgKiBiZWluZyBzZWxlY3RlZCBvciB1bnNlbGVjdGVkLiAgRm9yIGV4YW1wbGUsIHRoZSBwcmVzZW50YXRpb24gZGlzcGxheQotICAgICAgICAgKiBvZiB0aGUgZGVmYXVsdCBzeXN0ZW0gcm91dGUgbWF5IGNoYW5nZSB3aGVuIGFuIGV4dGVybmFsIEhETUkgZGlzcGxheSBpcyBjb25uZWN0ZWQKLSAgICAgICAgICogb3IgZGlzY29ubmVjdGVkIGV2ZW4gdGhvdWdoIHRoZSByb3V0ZSBpdHNlbGYgaGFzIG5vdCBjaGFuZ2VkLgotICAgICAgICAgKiA8L3A+PHA+Ci0gICAgICAgICAqIFRoaXMgbWV0aG9kIG1heSByZXR1cm4gbnVsbCBpZiB0aGVyZSBpcyBubyBleHRlcm5hbCBkaXNwbGF5IGFzc29jaWF0ZWQgd2l0aAotICAgICAgICAgKiB0aGUgcm91dGUgb3IgaWYgdGhlIGRpc3BsYXkgaXMgbm90IHJlYWR5IHRvIHNob3cgVUkgeWV0LgotICAgICAgICAgKiA8L3A+PHA+Ci0gICAgICAgICAqIFRoZSBhcHBsaWNhdGlvbiBzaG91bGQgbGlzdGVuIGZvciBjaGFuZ2VzIHRvIHRoZSBwcmVzZW50YXRpb24gZGlzcGxheQotICAgICAgICAgKiB1c2luZyB0aGUge0BsaW5rIENhbGxiYWNrI29uUm91dGVQcmVzZW50YXRpb25EaXNwbGF5Q2hhbmdlZH0gY2FsbGJhY2sgYW5kCi0gICAgICAgICAqIHNob3cgb3IgZGlzbWlzcyBpdHMge0BsaW5rIGFuZHJvaWQuYXBwLlByZXNlbnRhdGlvbn0gYWNjb3JkaW5nbHkgd2hlbiB0aGUgZGlzcGxheQotICAgICAgICAgKiBiZWNvbWVzIGF2YWlsYWJsZSBvciBpcyByZW1vdmVkLgotICAgICAgICAgKiA8L3A+PHA+Ci0gICAgICAgICAqIFRoaXMgbWV0aG9kIG9ubHkgbWFrZXMgc2Vuc2UgZm9yCi0gICAgICAgICAqIHtAbGluayBNZWRpYUNvbnRyb2xJbnRlbnQjQ0FURUdPUllfTElWRV9WSURFTyBsaXZlIHZpZGVvfSByb3V0ZXMuCi0gICAgICAgICAqIDwvcD4KLSAgICAgICAgICoKLSAgICAgICAgICogQHJldHVybiBUaGUgcHJlZmVycmVkIHByZXNlbnRhdGlvbiBkaXNwbGF5IHRvIHVzZSB3aGVuIHRoaXMgcm91dGUgaXMKLSAgICAgICAgICogc2VsZWN0ZWQgb3IgbnVsbCBpZiBub25lLgotICAgICAgICAgKgotICAgICAgICAgKiBAc2VlIE1lZGlhQ29udHJvbEludGVudCNDQVRFR09SWV9MSVZFX1ZJREVPCi0gICAgICAgICAqIEBzZWUgYW5kcm9pZC5hcHAuUHJlc2VudGF0aW9uCi0gICAgICAgICAqLwotICAgICAgICBATnVsbGFibGUKLSAgICAgICAgcHVibGljIERpc3BsYXkgZ2V0UHJlc2VudGF0aW9uRGlzcGxheSgpIHsKLSAgICAgICAgICAgIGNoZWNrQ2FsbGluZ1RocmVhZCgpOwotICAgICAgICAgICAgaWYgKG1QcmVzZW50YXRpb25EaXNwbGF5SWQgPj0gMCAmJiBtUHJlc2VudGF0aW9uRGlzcGxheSA9PSBudWxsKSB7Ci0gICAgICAgICAgICAgICAgbVByZXNlbnRhdGlvbkRpc3BsYXkgPSBzR2xvYmFsLmdldERpc3BsYXkobVByZXNlbnRhdGlvbkRpc3BsYXlJZCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICByZXR1cm4gbVByZXNlbnRhdGlvbkRpc3BsYXk7Ci0gICAgICAgIH0KLQotICAgICAgICAvKioKLSAgICAgICAgICogR2V0cyB0aGUgcm91dGUncyBwcmVzZW50YXRpb24gZGlzcGxheSBpZCwgb3IgLTEgaWYgbm9uZS4KLSAgICAgICAgICogQGhpZGUKLSAgICAgICAgICovCi0gICAgICAgIC8vIEBSZXN0cmljdFRvKExJQlJBUllfR1JPVVApCi0gICAgICAgIHB1YmxpYyBpbnQgZ2V0UHJlc2VudGF0aW9uRGlzcGxheUlkKCkgewotICAgICAgICAgICAgcmV0dXJuIG1QcmVzZW50YXRpb25EaXNwbGF5SWQ7Ci0gICAgICAgIH0KLQotICAgICAgICAvKioKLSAgICAgICAgICogR2V0cyBhIGNvbGxlY3Rpb24gb2YgZXh0cmEgcHJvcGVydGllcyBhYm91dCB0aGlzIHJvdXRlIHRoYXQgd2VyZSBzdXBwbGllZAotICAgICAgICAgKiBieSBpdHMgbWVkaWEgcm91dGUgcHJvdmlkZXIsIG9yIG51bGwgaWYgbm9uZS4KLSAgICAgICAgICovCi0gICAgICAgIEBOdWxsYWJsZQotICAgICAgICBwdWJsaWMgQnVuZGxlIGdldEV4dHJhcygpIHsKLSAgICAgICAgICAgIHJldHVybiBtRXh0cmFzOwotICAgICAgICB9Ci0KLSAgICAgICAgLyoqCi0gICAgICAgICAqIEdldHMgYW4gaW50ZW50IHNlbmRlciBmb3IgbGF1bmNoaW5nIGEgc2V0dGluZ3MgYWN0aXZpdHkgZm9yIHRoaXMKLSAgICAgICAgICogcm91dGUuCi0gICAgICAgICAqLwotICAgICAgICBATnVsbGFibGUKLSAgICAgICAgcHVibGljIEludGVudFNlbmRlciBnZXRTZXR0aW5nc0ludGVudCgpIHsKLSAgICAgICAgICAgIHJldHVybiBtU2V0dGluZ3NJbnRlbnQ7Ci0gICAgICAgIH0KLQotICAgICAgICAvKioKLSAgICAgICAgICogU2VsZWN0cyB0aGlzIG1lZGlhIHJvdXRlLgotICAgICAgICAgKi8KLSAgICAgICAgcHVibGljIHZvaWQgc2VsZWN0KCkgewotICAgICAgICAgICAgY2hlY2tDYWxsaW5nVGhyZWFkKCk7Ci0gICAgICAgICAgICBzR2xvYmFsLnNlbGVjdFJvdXRlKHRoaXMpOwotICAgICAgICB9Ci0KLSAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgIHB1YmxpYyBTdHJpbmcgdG9TdHJpbmcoKSB7Ci0gICAgICAgICAgICByZXR1cm4gIk1lZGlhUm91dGVyLlJvdXRlSW5mb3sgdW5pcXVlSWQ9IiArIG1VbmlxdWVJZAotICAgICAgICAgICAgICAgICAgICArICIsIG5hbWU9IiArIG1OYW1lCi0gICAgICAgICAgICAgICAgICAgICsgIiwgZGVzY3JpcHRpb249IiArIG1EZXNjcmlwdGlvbgotICAgICAgICAgICAgICAgICAgICArICIsIGljb25Vcmk9IiArIG1JY29uVXJpCi0gICAgICAgICAgICAgICAgICAgICsgIiwgZW5hYmxlZD0iICsgbUVuYWJsZWQKLSAgICAgICAgICAgICAgICAgICAgKyAiLCBjb25uZWN0aW5nPSIgKyBtQ29ubmVjdGluZwotICAgICAgICAgICAgICAgICAgICArICIsIGNvbm5lY3Rpb25TdGF0ZT0iICsgbUNvbm5lY3Rpb25TdGF0ZQotICAgICAgICAgICAgICAgICAgICArICIsIGNhbkRpc2Nvbm5lY3Q9IiArIG1DYW5EaXNjb25uZWN0Ci0gICAgICAgICAgICAgICAgICAgICsgIiwgcGxheWJhY2tUeXBlPSIgKyBtUGxheWJhY2tUeXBlCi0gICAgICAgICAgICAgICAgICAgICsgIiwgcGxheWJhY2tTdHJlYW09IiArIG1QbGF5YmFja1N0cmVhbQotICAgICAgICAgICAgICAgICAgICArICIsIGRldmljZVR5cGU9IiArIG1EZXZpY2VUeXBlCi0gICAgICAgICAgICAgICAgICAgICsgIiwgdm9sdW1lSGFuZGxpbmc9IiArIG1Wb2x1bWVIYW5kbGluZwotICAgICAgICAgICAgICAgICAgICArICIsIHZvbHVtZT0iICsgbVZvbHVtZQotICAgICAgICAgICAgICAgICAgICArICIsIHZvbHVtZU1heD0iICsgbVZvbHVtZU1heAotICAgICAgICAgICAgICAgICAgICArICIsIHByZXNlbnRhdGlvbkRpc3BsYXlJZD0iICsgbVByZXNlbnRhdGlvbkRpc3BsYXlJZAotICAgICAgICAgICAgICAgICAgICArICIsIGV4dHJhcz0iICsgbUV4dHJhcwotICAgICAgICAgICAgICAgICAgICArICIsIHNldHRpbmdzSW50ZW50PSIgKyBtU2V0dGluZ3NJbnRlbnQKLSAgICAgICAgICAgICAgICAgICAgKyAiLCBwcm92aWRlclBhY2thZ2VOYW1lPSIgKyBtUHJvdmlkZXIuZ2V0UGFja2FnZU5hbWUoKQotICAgICAgICAgICAgICAgICAgICArICIgfSI7Ci0gICAgICAgIH0KLQotICAgICAgICBpbnQgbWF5YmVVcGRhdGVEZXNjcmlwdG9yKE1lZGlhUm91dGVEZXNjcmlwdG9yIGRlc2NyaXB0b3IpIHsKLSAgICAgICAgICAgIGludCBjaGFuZ2VzID0gMDsKLSAgICAgICAgICAgIGlmIChtRGVzY3JpcHRvciAhPSBkZXNjcmlwdG9yKSB7Ci0gICAgICAgICAgICAgICAgY2hhbmdlcyA9IHVwZGF0ZURlc2NyaXB0b3IoZGVzY3JpcHRvcik7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICByZXR1cm4gY2hhbmdlczsKLSAgICAgICAgfQotCi0gICAgICAgIGludCB1cGRhdGVEZXNjcmlwdG9yKE1lZGlhUm91dGVEZXNjcmlwdG9yIGRlc2NyaXB0b3IpIHsKLSAgICAgICAgICAgIGludCBjaGFuZ2VzID0gMDsKLSAgICAgICAgICAgIG1EZXNjcmlwdG9yID0gZGVzY3JpcHRvcjsKLSAgICAgICAgICAgIGlmIChkZXNjcmlwdG9yICE9IG51bGwpIHsKLSAgICAgICAgICAgICAgICBpZiAoIWVxdWFsKG1OYW1lLCBkZXNjcmlwdG9yLmdldE5hbWUoKSkpIHsKLSAgICAgICAgICAgICAgICAgICAgbU5hbWUgPSBkZXNjcmlwdG9yLmdldE5hbWUoKTsKLSAgICAgICAgICAgICAgICAgICAgY2hhbmdlcyB8PSBDSEFOR0VfR0VORVJBTDsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgaWYgKCFlcXVhbChtRGVzY3JpcHRpb24sIGRlc2NyaXB0b3IuZ2V0RGVzY3JpcHRpb24oKSkpIHsKLSAgICAgICAgICAgICAgICAgICAgbURlc2NyaXB0aW9uID0gZGVzY3JpcHRvci5nZXREZXNjcmlwdGlvbigpOwotICAgICAgICAgICAgICAgICAgICBjaGFuZ2VzIHw9IENIQU5HRV9HRU5FUkFMOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBpZiAoIWVxdWFsKG1JY29uVXJpLCBkZXNjcmlwdG9yLmdldEljb25VcmkoKSkpIHsKLSAgICAgICAgICAgICAgICAgICAgbUljb25VcmkgPSBkZXNjcmlwdG9yLmdldEljb25VcmkoKTsKLSAgICAgICAgICAgICAgICAgICAgY2hhbmdlcyB8PSBDSEFOR0VfR0VORVJBTDsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgaWYgKG1FbmFibGVkICE9IGRlc2NyaXB0b3IuaXNFbmFibGVkKCkpIHsKLSAgICAgICAgICAgICAgICAgICAgbUVuYWJsZWQgPSBkZXNjcmlwdG9yLmlzRW5hYmxlZCgpOwotICAgICAgICAgICAgICAgICAgICBjaGFuZ2VzIHw9IENIQU5HRV9HRU5FUkFMOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBpZiAobUNvbm5lY3RpbmcgIT0gZGVzY3JpcHRvci5pc0Nvbm5lY3RpbmcoKSkgewotICAgICAgICAgICAgICAgICAgICBtQ29ubmVjdGluZyA9IGRlc2NyaXB0b3IuaXNDb25uZWN0aW5nKCk7Ci0gICAgICAgICAgICAgICAgICAgIGNoYW5nZXMgfD0gQ0hBTkdFX0dFTkVSQUw7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGlmIChtQ29ubmVjdGlvblN0YXRlICE9IGRlc2NyaXB0b3IuZ2V0Q29ubmVjdGlvblN0YXRlKCkpIHsKLSAgICAgICAgICAgICAgICAgICAgbUNvbm5lY3Rpb25TdGF0ZSA9IGRlc2NyaXB0b3IuZ2V0Q29ubmVjdGlvblN0YXRlKCk7Ci0gICAgICAgICAgICAgICAgICAgIGNoYW5nZXMgfD0gQ0hBTkdFX0dFTkVSQUw7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGlmICghbUNvbnRyb2xGaWx0ZXJzLmVxdWFscyhkZXNjcmlwdG9yLmdldENvbnRyb2xGaWx0ZXJzKCkpKSB7Ci0gICAgICAgICAgICAgICAgICAgIG1Db250cm9sRmlsdGVycy5jbGVhcigpOwotICAgICAgICAgICAgICAgICAgICBtQ29udHJvbEZpbHRlcnMuYWRkQWxsKGRlc2NyaXB0b3IuZ2V0Q29udHJvbEZpbHRlcnMoKSk7Ci0gICAgICAgICAgICAgICAgICAgIGNoYW5nZXMgfD0gQ0hBTkdFX0dFTkVSQUw7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGlmIChtUGxheWJhY2tUeXBlICE9IGRlc2NyaXB0b3IuZ2V0UGxheWJhY2tUeXBlKCkpIHsKLSAgICAgICAgICAgICAgICAgICAgbVBsYXliYWNrVHlwZSA9IGRlc2NyaXB0b3IuZ2V0UGxheWJhY2tUeXBlKCk7Ci0gICAgICAgICAgICAgICAgICAgIGNoYW5nZXMgfD0gQ0hBTkdFX0dFTkVSQUw7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGlmIChtUGxheWJhY2tTdHJlYW0gIT0gZGVzY3JpcHRvci5nZXRQbGF5YmFja1N0cmVhbSgpKSB7Ci0gICAgICAgICAgICAgICAgICAgIG1QbGF5YmFja1N0cmVhbSA9IGRlc2NyaXB0b3IuZ2V0UGxheWJhY2tTdHJlYW0oKTsKLSAgICAgICAgICAgICAgICAgICAgY2hhbmdlcyB8PSBDSEFOR0VfR0VORVJBTDsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgaWYgKG1EZXZpY2VUeXBlICE9IGRlc2NyaXB0b3IuZ2V0RGV2aWNlVHlwZSgpKSB7Ci0gICAgICAgICAgICAgICAgICAgIG1EZXZpY2VUeXBlID0gZGVzY3JpcHRvci5nZXREZXZpY2VUeXBlKCk7Ci0gICAgICAgICAgICAgICAgICAgIGNoYW5nZXMgfD0gQ0hBTkdFX0dFTkVSQUw7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGlmIChtVm9sdW1lSGFuZGxpbmcgIT0gZGVzY3JpcHRvci5nZXRWb2x1bWVIYW5kbGluZygpKSB7Ci0gICAgICAgICAgICAgICAgICAgIG1Wb2x1bWVIYW5kbGluZyA9IGRlc2NyaXB0b3IuZ2V0Vm9sdW1lSGFuZGxpbmcoKTsKLSAgICAgICAgICAgICAgICAgICAgY2hhbmdlcyB8PSBDSEFOR0VfR0VORVJBTCB8IENIQU5HRV9WT0xVTUU7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGlmIChtVm9sdW1lICE9IGRlc2NyaXB0b3IuZ2V0Vm9sdW1lKCkpIHsKLSAgICAgICAgICAgICAgICAgICAgbVZvbHVtZSA9IGRlc2NyaXB0b3IuZ2V0Vm9sdW1lKCk7Ci0gICAgICAgICAgICAgICAgICAgIGNoYW5nZXMgfD0gQ0hBTkdFX0dFTkVSQUwgfCBDSEFOR0VfVk9MVU1FOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBpZiAobVZvbHVtZU1heCAhPSBkZXNjcmlwdG9yLmdldFZvbHVtZU1heCgpKSB7Ci0gICAgICAgICAgICAgICAgICAgIG1Wb2x1bWVNYXggPSBkZXNjcmlwdG9yLmdldFZvbHVtZU1heCgpOwotICAgICAgICAgICAgICAgICAgICBjaGFuZ2VzIHw9IENIQU5HRV9HRU5FUkFMIHwgQ0hBTkdFX1ZPTFVNRTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgaWYgKG1QcmVzZW50YXRpb25EaXNwbGF5SWQgIT0gZGVzY3JpcHRvci5nZXRQcmVzZW50YXRpb25EaXNwbGF5SWQoKSkgewotICAgICAgICAgICAgICAgICAgICBtUHJlc2VudGF0aW9uRGlzcGxheUlkID0gZGVzY3JpcHRvci5nZXRQcmVzZW50YXRpb25EaXNwbGF5SWQoKTsKLSAgICAgICAgICAgICAgICAgICAgbVByZXNlbnRhdGlvbkRpc3BsYXkgPSBudWxsOwotICAgICAgICAgICAgICAgICAgICBjaGFuZ2VzIHw9IENIQU5HRV9HRU5FUkFMIHwgQ0hBTkdFX1BSRVNFTlRBVElPTl9ESVNQTEFZOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBpZiAoIWVxdWFsKG1FeHRyYXMsIGRlc2NyaXB0b3IuZ2V0RXh0cmFzKCkpKSB7Ci0gICAgICAgICAgICAgICAgICAgIG1FeHRyYXMgPSBkZXNjcmlwdG9yLmdldEV4dHJhcygpOwotICAgICAgICAgICAgICAgICAgICBjaGFuZ2VzIHw9IENIQU5HRV9HRU5FUkFMOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBpZiAoIWVxdWFsKG1TZXR0aW5nc0ludGVudCwgZGVzY3JpcHRvci5nZXRTZXR0aW5nc0FjdGl2aXR5KCkpKSB7Ci0gICAgICAgICAgICAgICAgICAgIG1TZXR0aW5nc0ludGVudCA9IGRlc2NyaXB0b3IuZ2V0U2V0dGluZ3NBY3Rpdml0eSgpOwotICAgICAgICAgICAgICAgICAgICBjaGFuZ2VzIHw9IENIQU5HRV9HRU5FUkFMOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBpZiAobUNhbkRpc2Nvbm5lY3QgIT0gZGVzY3JpcHRvci5jYW5EaXNjb25uZWN0QW5kS2VlcFBsYXlpbmcoKSkgewotICAgICAgICAgICAgICAgICAgICBtQ2FuRGlzY29ubmVjdCA9IGRlc2NyaXB0b3IuY2FuRGlzY29ubmVjdEFuZEtlZXBQbGF5aW5nKCk7Ci0gICAgICAgICAgICAgICAgICAgIGNoYW5nZXMgfD0gQ0hBTkdFX0dFTkVSQUwgfCBDSEFOR0VfUFJFU0VOVEFUSU9OX0RJU1BMQVk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICAgICAgcmV0dXJuIGNoYW5nZXM7Ci0gICAgICAgIH0KLQotICAgICAgICBTdHJpbmcgZ2V0RGVzY3JpcHRvcklkKCkgewotICAgICAgICAgICAgcmV0dXJuIG1EZXNjcmlwdG9ySWQ7Ci0gICAgICAgIH0KLQotICAgICAgICAvKiogQGhpZGUgKi8KLSAgICAgICAgLy8gQFJlc3RyaWN0VG8oTElCUkFSWV9HUk9VUCkKLSAgICAgICAgcHVibGljIE1lZGlhUm91dGVQcm92aWRlciBnZXRQcm92aWRlckluc3RhbmNlKCkgewotICAgICAgICAgICAgcmV0dXJuIG1Qcm92aWRlci5nZXRQcm92aWRlckluc3RhbmNlKCk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBJbmZvcm1hdGlvbiBhYm91dCBhIHJvdXRlIHRoYXQgY29uc2lzdHMgb2YgbXVsdGlwbGUgb3RoZXIgcm91dGVzIGluIGEgZ3JvdXAuCi0gICAgICogQGhpZGUKLSAgICAgKi8KLSAgICAvLyBAUmVzdHJpY3RUbyhMSUJSQVJZX0dST1VQKQotICAgIHB1YmxpYyBzdGF0aWMgY2xhc3MgUm91dGVHcm91cCBleHRlbmRzIFJvdXRlSW5mbyB7Ci0gICAgICAgIHByaXZhdGUgTGlzdDxSb3V0ZUluZm8+IG1Sb3V0ZXMgPSBuZXcgQXJyYXlMaXN0PD4oKTsKLQotICAgICAgICBSb3V0ZUdyb3VwKFByb3ZpZGVySW5mbyBwcm92aWRlciwgU3RyaW5nIGRlc2NyaXB0b3JJZCwgU3RyaW5nIHVuaXF1ZUlkKSB7Ci0gICAgICAgICAgICBzdXBlcihwcm92aWRlciwgZGVzY3JpcHRvcklkLCB1bmlxdWVJZCk7Ci0gICAgICAgIH0KLQotICAgICAgICAvKioKLSAgICAgICAgICogQHJldHVybiBUaGUgbnVtYmVyIG9mIHJvdXRlcyBpbiB0aGlzIGdyb3VwCi0gICAgICAgICAqLwotICAgICAgICBwdWJsaWMgaW50IGdldFJvdXRlQ291bnQoKSB7Ci0gICAgICAgICAgICByZXR1cm4gbVJvdXRlcy5zaXplKCk7Ci0gICAgICAgIH0KLQotICAgICAgICAvKioKLSAgICAgICAgICogUmV0dXJucyB0aGUgcm91dGUgaW4gdGhpcyBncm91cCBhdCB0aGUgc3BlY2lmaWVkIGluZGV4Ci0gICAgICAgICAqCi0gICAgICAgICAqIEBwYXJhbSBpbmRleCBJbmRleCB0byBmZXRjaAotICAgICAgICAgKiBAcmV0dXJuIFRoZSByb3V0ZSBhdCBpbmRleAotICAgICAgICAgKi8KLSAgICAgICAgcHVibGljIFJvdXRlSW5mbyBnZXRSb3V0ZUF0KGludCBpbmRleCkgewotICAgICAgICAgICAgcmV0dXJuIG1Sb3V0ZXMuZ2V0KGluZGV4KTsKLSAgICAgICAgfQotCi0gICAgICAgIC8qKgotICAgICAgICAgKiBSZXR1cm5zIHRoZSByb3V0ZXMgaW4gdGhpcyBncm91cAotICAgICAgICAgKgotICAgICAgICAgKiBAcmV0dXJuIFRoZSBsaXN0IG9mIHRoZSByb3V0ZXMgaW4gdGhpcyBncm91cAotICAgICAgICAgKi8KLSAgICAgICAgcHVibGljIExpc3Q8Um91dGVJbmZvPiBnZXRSb3V0ZXMoKSB7Ci0gICAgICAgICAgICByZXR1cm4gbVJvdXRlczsKLSAgICAgICAgfQotCi0gICAgICAgIEBPdmVycmlkZQotICAgICAgICBwdWJsaWMgU3RyaW5nIHRvU3RyaW5nKCkgewotICAgICAgICAgICAgU3RyaW5nQnVpbGRlciBzYiA9IG5ldyBTdHJpbmdCdWlsZGVyKHN1cGVyLnRvU3RyaW5nKCkpOwotICAgICAgICAgICAgc2IuYXBwZW5kKCdbJyk7Ci0gICAgICAgICAgICBmaW5hbCBpbnQgY291bnQgPSBtUm91dGVzLnNpemUoKTsKLSAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgY291bnQ7IGkrKykgewotICAgICAgICAgICAgICAgIGlmIChpID4gMCkgc2IuYXBwZW5kKCIsICIpOwotICAgICAgICAgICAgICAgIHNiLmFwcGVuZChtUm91dGVzLmdldChpKSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBzYi5hcHBlbmQoJ10nKTsKLSAgICAgICAgICAgIHJldHVybiBzYi50b1N0cmluZygpOwotICAgICAgICB9Ci0KLSAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgIGludCBtYXliZVVwZGF0ZURlc2NyaXB0b3IoTWVkaWFSb3V0ZURlc2NyaXB0b3IgZGVzY3JpcHRvcikgewotICAgICAgICAgICAgYm9vbGVhbiBjaGFuZ2VkID0gZmFsc2U7Ci0gICAgICAgICAgICBpZiAobURlc2NyaXB0b3IgIT0gZGVzY3JpcHRvcikgewotICAgICAgICAgICAgICAgIG1EZXNjcmlwdG9yID0gZGVzY3JpcHRvcjsKLSAgICAgICAgICAgICAgICBpZiAoZGVzY3JpcHRvciAhPSBudWxsKSB7Ci0gICAgICAgICAgICAgICAgICAgIExpc3Q8U3RyaW5nPiBncm91cE1lbWJlcklkcyA9IGRlc2NyaXB0b3IuZ2V0R3JvdXBNZW1iZXJJZHMoKTsKLSAgICAgICAgICAgICAgICAgICAgTGlzdDxSb3V0ZUluZm8+IHJvdXRlcyA9IG5ldyBBcnJheUxpc3Q8PigpOwotICAgICAgICAgICAgICAgICAgICBjaGFuZ2VkID0gZ3JvdXBNZW1iZXJJZHMuc2l6ZSgpICE9IG1Sb3V0ZXMuc2l6ZSgpOwotICAgICAgICAgICAgICAgICAgICBmb3IgKFN0cmluZyBncm91cE1lbWJlcklkIDogZ3JvdXBNZW1iZXJJZHMpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIFN0cmluZyB1bmlxdWVJZCA9IHNHbG9iYWwuZ2V0VW5pcXVlSWQoZ2V0UHJvdmlkZXIoKSwgZ3JvdXBNZW1iZXJJZCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBSb3V0ZUluZm8gZ3JvdXBNZW1iZXIgPSBzR2xvYmFsLmdldFJvdXRlKHVuaXF1ZUlkKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChncm91cE1lbWJlciAhPSBudWxsKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgcm91dGVzLmFkZChncm91cE1lbWJlcik7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFjaGFuZ2VkICYmICFtUm91dGVzLmNvbnRhaW5zKGdyb3VwTWVtYmVyKSkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFuZ2VkID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgaWYgKGNoYW5nZWQpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIG1Sb3V0ZXMgPSByb3V0ZXM7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICByZXR1cm4gKGNoYW5nZWQgPyBDSEFOR0VfR0VORVJBTCA6IDApIHwgc3VwZXIudXBkYXRlRGVzY3JpcHRvcihkZXNjcmlwdG9yKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIC8qKgotICAgICAqIFByb3ZpZGVzIGluZm9ybWF0aW9uIGFib3V0IGEgbWVkaWEgcm91dGUgcHJvdmlkZXIuCi0gICAgICogPHA+Ci0gICAgICogVGhpcyBvYmplY3QgbWF5IGJlIHVzZWQgdG8gZGV0ZXJtaW5lIHdoaWNoIG1lZGlhIHJvdXRlIHByb3ZpZGVyIGhhcwotICAgICAqIHB1Ymxpc2hlZCBhIHBhcnRpY3VsYXIgcm91dGUuCi0gICAgICogPC9wPgotICAgICAqLwotICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgY2xhc3MgUHJvdmlkZXJJbmZvIHsKLSAgICAgICAgcHJpdmF0ZSBmaW5hbCBNZWRpYVJvdXRlUHJvdmlkZXIgbVByb3ZpZGVySW5zdGFuY2U7Ci0gICAgICAgIHByaXZhdGUgZmluYWwgTGlzdDxSb3V0ZUluZm8+IG1Sb3V0ZXMgPSBuZXcgQXJyYXlMaXN0PD4oKTsKLQotICAgICAgICBwcml2YXRlIGZpbmFsIFByb3ZpZGVyTWV0YWRhdGEgbU1ldGFkYXRhOwotICAgICAgICBwcml2YXRlIE1lZGlhUm91dGVQcm92aWRlckRlc2NyaXB0b3IgbURlc2NyaXB0b3I7Ci0gICAgICAgIHByaXZhdGUgUmVzb3VyY2VzIG1SZXNvdXJjZXM7Ci0gICAgICAgIHByaXZhdGUgYm9vbGVhbiBtUmVzb3VyY2VzTm90QXZhaWxhYmxlOwotCi0gICAgICAgIFByb3ZpZGVySW5mbyhNZWRpYVJvdXRlUHJvdmlkZXIgcHJvdmlkZXIpIHsKLSAgICAgICAgICAgIG1Qcm92aWRlckluc3RhbmNlID0gcHJvdmlkZXI7Ci0gICAgICAgICAgICBtTWV0YWRhdGEgPSBwcm92aWRlci5nZXRNZXRhZGF0YSgpOwotICAgICAgICB9Ci0KLSAgICAgICAgLyoqCi0gICAgICAgICAqIEdldHMgdGhlIHByb3ZpZGVyJ3MgdW5kZXJseWluZyB7QGxpbmsgTWVkaWFSb3V0ZVByb3ZpZGVyfSBpbnN0YW5jZS4KLSAgICAgICAgICovCi0gICAgICAgIHB1YmxpYyBNZWRpYVJvdXRlUHJvdmlkZXIgZ2V0UHJvdmlkZXJJbnN0YW5jZSgpIHsKLSAgICAgICAgICAgIGNoZWNrQ2FsbGluZ1RocmVhZCgpOwotICAgICAgICAgICAgcmV0dXJuIG1Qcm92aWRlckluc3RhbmNlOwotICAgICAgICB9Ci0KLSAgICAgICAgLyoqCi0gICAgICAgICAqIEdldHMgdGhlIHBhY2thZ2UgbmFtZSBvZiB0aGUgbWVkaWEgcm91dGUgcHJvdmlkZXIuCi0gICAgICAgICAqLwotICAgICAgICBwdWJsaWMgU3RyaW5nIGdldFBhY2thZ2VOYW1lKCkgewotICAgICAgICAgICAgcmV0dXJuIG1NZXRhZGF0YS5nZXRQYWNrYWdlTmFtZSgpOwotICAgICAgICB9Ci0KLSAgICAgICAgLyoqCi0gICAgICAgICAqIEdldHMgdGhlIGNvbXBvbmVudCBuYW1lIG9mIHRoZSBtZWRpYSByb3V0ZSBwcm92aWRlci4KLSAgICAgICAgICovCi0gICAgICAgIHB1YmxpYyBDb21wb25lbnROYW1lIGdldENvbXBvbmVudE5hbWUoKSB7Ci0gICAgICAgICAgICByZXR1cm4gbU1ldGFkYXRhLmdldENvbXBvbmVudE5hbWUoKTsKLSAgICAgICAgfQotCi0gICAgICAgIC8qKgotICAgICAgICAgKiBHZXRzIHRoZSB7QGxpbmsgTWVkaWFSb3V0ZXIuUm91dGVJbmZvIHJvdXRlc30gcHVibGlzaGVkIGJ5IHRoaXMgcm91dGUgcHJvdmlkZXIuCi0gICAgICAgICAqLwotICAgICAgICBwdWJsaWMgTGlzdDxSb3V0ZUluZm8+IGdldFJvdXRlcygpIHsKLSAgICAgICAgICAgIGNoZWNrQ2FsbGluZ1RocmVhZCgpOwotICAgICAgICAgICAgcmV0dXJuIG1Sb3V0ZXM7Ci0gICAgICAgIH0KLQotICAgICAgICBSZXNvdXJjZXMgZ2V0UmVzb3VyY2VzKCkgewotICAgICAgICAgICAgaWYgKG1SZXNvdXJjZXMgPT0gbnVsbCAmJiAhbVJlc291cmNlc05vdEF2YWlsYWJsZSkgewotICAgICAgICAgICAgICAgIFN0cmluZyBwYWNrYWdlTmFtZSA9IGdldFBhY2thZ2VOYW1lKCk7Ci0gICAgICAgICAgICAgICAgQ29udGV4dCBjb250ZXh0ID0gc0dsb2JhbC5nZXRQcm92aWRlckNvbnRleHQocGFja2FnZU5hbWUpOwotICAgICAgICAgICAgICAgIGlmIChjb250ZXh0ICE9IG51bGwpIHsKLSAgICAgICAgICAgICAgICAgICAgbVJlc291cmNlcyA9IGNvbnRleHQuZ2V0UmVzb3VyY2VzKCk7Ci0gICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgTG9nLncoVEFHLCAiVW5hYmxlIHRvIG9idGFpbiByZXNvdXJjZXMgZm9yIHJvdXRlIHByb3ZpZGVyIHBhY2thZ2U6ICIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICArIHBhY2thZ2VOYW1lKTsKLSAgICAgICAgICAgICAgICAgICAgbVJlc291cmNlc05vdEF2YWlsYWJsZSA9IHRydWU7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICAgICAgcmV0dXJuIG1SZXNvdXJjZXM7Ci0gICAgICAgIH0KLQotICAgICAgICBib29sZWFuIHVwZGF0ZURlc2NyaXB0b3IoTWVkaWFSb3V0ZVByb3ZpZGVyRGVzY3JpcHRvciBkZXNjcmlwdG9yKSB7Ci0gICAgICAgICAgICBpZiAobURlc2NyaXB0b3IgIT0gZGVzY3JpcHRvcikgewotICAgICAgICAgICAgICAgIG1EZXNjcmlwdG9yID0gZGVzY3JpcHRvcjsKLSAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgfQotCi0gICAgICAgIGludCBmaW5kUm91dGVCeURlc2NyaXB0b3JJZChTdHJpbmcgaWQpIHsKLSAgICAgICAgICAgIGZpbmFsIGludCBjb3VudCA9IG1Sb3V0ZXMuc2l6ZSgpOwotICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBjb3VudDsgaSsrKSB7Ci0gICAgICAgICAgICAgICAgaWYgKG1Sb3V0ZXMuZ2V0KGkpLm1EZXNjcmlwdG9ySWQuZXF1YWxzKGlkKSkgewotICAgICAgICAgICAgICAgICAgICByZXR1cm4gaTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICByZXR1cm4gLTE7Ci0gICAgICAgIH0KLQotICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgcHVibGljIFN0cmluZyB0b1N0cmluZygpIHsKLSAgICAgICAgICAgIHJldHVybiAiTWVkaWFSb3V0ZXIuUm91dGVQcm92aWRlckluZm97IHBhY2thZ2VOYW1lPSIgKyBnZXRQYWNrYWdlTmFtZSgpCi0gICAgICAgICAgICAgICAgICAgICsgIiB9IjsKLSAgICAgICAgfQotICAgIH0KLQotICAgIC8qKgotICAgICAqIEludGVyZmFjZSBmb3IgcmVjZWl2aW5nIGV2ZW50cyBhYm91dCBtZWRpYSByb3V0aW5nIGNoYW5nZXMuCi0gICAgICogQWxsIG1ldGhvZHMgb2YgdGhpcyBpbnRlcmZhY2Ugd2lsbCBiZSBjYWxsZWQgZnJvbSB0aGUgYXBwbGljYXRpb24ncyBtYWluIHRocmVhZC4KLSAgICAgKiA8cD4KLSAgICAgKiBBIENhbGxiYWNrIHdpbGwgb25seSByZWNlaXZlIGV2ZW50cyByZWxldmFudCB0byByb3V0ZXMgdGhhdCB0aGUgY2FsbGJhY2sKLSAgICAgKiB3YXMgcmVnaXN0ZXJlZCBmb3IgdW5sZXNzIHRoZSB7QGxpbmsgTWVkaWFSb3V0ZXIjQ0FMTEJBQ0tfRkxBR19VTkZJTFRFUkVEX0VWRU5UU30KLSAgICAgKiBmbGFnIHdhcyBzcGVjaWZpZWQgaW4ge0BsaW5rIE1lZGlhUm91dGVyI2FkZENhbGxiYWNrKE1lZGlhUm91dGVTZWxlY3RvciwgQ2FsbGJhY2ssIGludCl9LgotICAgICAqIDwvcD4KLSAgICAgKgotICAgICAqIEBzZWUgTWVkaWFSb3V0ZXIjYWRkQ2FsbGJhY2soTWVkaWFSb3V0ZVNlbGVjdG9yLCBDYWxsYmFjaywgaW50KQotICAgICAqIEBzZWUgTWVkaWFSb3V0ZXIjcmVtb3ZlQ2FsbGJhY2soQ2FsbGJhY2spCi0gICAgICovCi0gICAgcHVibGljIHN0YXRpYyBhYnN0cmFjdCBjbGFzcyBDYWxsYmFjayB7Ci0gICAgICAgIC8qKgotICAgICAgICAgKiBDYWxsZWQgd2hlbiB0aGUgc3VwcGxpZWQgbWVkaWEgcm91dGUgYmVjb21lcyBzZWxlY3RlZCBhcyB0aGUgYWN0aXZlIHJvdXRlLgotICAgICAgICAgKgotICAgICAgICAgKiBAcGFyYW0gcm91dGVyIFRoZSBtZWRpYSByb3V0ZXIgcmVwb3J0aW5nIHRoZSBldmVudC4KLSAgICAgICAgICogQHBhcmFtIHJvdXRlIFRoZSByb3V0ZSB0aGF0IGhhcyBiZWVuIHNlbGVjdGVkLgotICAgICAgICAgKi8KLSAgICAgICAgcHVibGljIHZvaWQgb25Sb3V0ZVNlbGVjdGVkKE1lZGlhUm91dGVyIHJvdXRlciwgUm91dGVJbmZvIHJvdXRlKSB7Ci0gICAgICAgIH0KLQotICAgICAgICAvKioKLSAgICAgICAgICogQ2FsbGVkIHdoZW4gdGhlIHN1cHBsaWVkIG1lZGlhIHJvdXRlIGJlY29tZXMgdW5zZWxlY3RlZCBhcyB0aGUgYWN0aXZlIHJvdXRlLgotICAgICAgICAgKiBGb3IgZGV0YWlsZWQgcmVhc29uLCBvdmVycmlkZSB7QGxpbmsgI29uUm91dGVVbnNlbGVjdGVkKE1lZGlhUm91dGVyLCBSb3V0ZUluZm8sIGludCl9Ci0gICAgICAgICAqIGluc3RlYWQuCi0gICAgICAgICAqCi0gICAgICAgICAqIEBwYXJhbSByb3V0ZXIgVGhlIG1lZGlhIHJvdXRlciByZXBvcnRpbmcgdGhlIGV2ZW50LgotICAgICAgICAgKiBAcGFyYW0gcm91dGUgVGhlIHJvdXRlIHRoYXQgaGFzIGJlZW4gdW5zZWxlY3RlZC4KLSAgICAgICAgICovCi0gICAgICAgIHB1YmxpYyB2b2lkIG9uUm91dGVVbnNlbGVjdGVkKE1lZGlhUm91dGVyIHJvdXRlciwgUm91dGVJbmZvIHJvdXRlKSB7Ci0gICAgICAgIH0KLQotICAgICAgICAvKioKLSAgICAgICAgICogQ2FsbGVkIHdoZW4gdGhlIHN1cHBsaWVkIG1lZGlhIHJvdXRlIGJlY29tZXMgdW5zZWxlY3RlZCBhcyB0aGUgYWN0aXZlIHJvdXRlLgotICAgICAgICAgKiBUaGUgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiBjYWxscyB7QGxpbmsgI29uUm91dGVVbnNlbGVjdGVkfS4KLSAgICAgICAgICogPHA+Ci0gICAgICAgICAqIFRoZSByZWFzb24gcHJvdmlkZWQgd2lsbCBiZSBvbmUgb2YgdGhlIGZvbGxvd2luZzoKLSAgICAgICAgICogPHVsPgotICAgICAgICAgKiA8bGk+e0BsaW5rIE1lZGlhUm91dGVyI1VOU0VMRUNUX1JFQVNPTl9VTktOT1dOfTwvbGk+Ci0gICAgICAgICAqIDxsaT57QGxpbmsgTWVkaWFSb3V0ZXIjVU5TRUxFQ1RfUkVBU09OX0RJU0NPTk5FQ1RFRH08L2xpPgotICAgICAgICAgKiA8bGk+e0BsaW5rIE1lZGlhUm91dGVyI1VOU0VMRUNUX1JFQVNPTl9TVE9QUEVEfTwvbGk+Ci0gICAgICAgICAqIDxsaT57QGxpbmsgTWVkaWFSb3V0ZXIjVU5TRUxFQ1RfUkVBU09OX1JPVVRFX0NIQU5HRUR9PC9saT4KLSAgICAgICAgICogPC91bD4KLSAgICAgICAgICoKLSAgICAgICAgICogQHBhcmFtIHJvdXRlciBUaGUgbWVkaWEgcm91dGVyIHJlcG9ydGluZyB0aGUgZXZlbnQuCi0gICAgICAgICAqIEBwYXJhbSByb3V0ZSBUaGUgcm91dGUgdGhhdCBoYXMgYmVlbiB1bnNlbGVjdGVkLgotICAgICAgICAgKiBAcGFyYW0gcmVhc29uIFRoZSByZWFzb24gZm9yIHVuc2VsZWN0aW5nIHRoZSByb3V0ZS4KLSAgICAgICAgICovCi0gICAgICAgIHB1YmxpYyB2b2lkIG9uUm91dGVVbnNlbGVjdGVkKE1lZGlhUm91dGVyIHJvdXRlciwgUm91dGVJbmZvIHJvdXRlLCBpbnQgcmVhc29uKSB7Ci0gICAgICAgICAgICBvblJvdXRlVW5zZWxlY3RlZChyb3V0ZXIsIHJvdXRlKTsKLSAgICAgICAgfQotCi0gICAgICAgIC8qKgotICAgICAgICAgKiBDYWxsZWQgd2hlbiBhIG1lZGlhIHJvdXRlIGhhcyBiZWVuIGFkZGVkLgotICAgICAgICAgKgotICAgICAgICAgKiBAcGFyYW0gcm91dGVyIFRoZSBtZWRpYSByb3V0ZXIgcmVwb3J0aW5nIHRoZSBldmVudC4KLSAgICAgICAgICogQHBhcmFtIHJvdXRlIFRoZSByb3V0ZSB0aGF0IGhhcyBiZWNvbWUgYXZhaWxhYmxlIGZvciB1c2UuCi0gICAgICAgICAqLwotICAgICAgICBwdWJsaWMgdm9pZCBvblJvdXRlQWRkZWQoTWVkaWFSb3V0ZXIgcm91dGVyLCBSb3V0ZUluZm8gcm91dGUpIHsKLSAgICAgICAgfQotCi0gICAgICAgIC8qKgotICAgICAgICAgKiBDYWxsZWQgd2hlbiBhIG1lZGlhIHJvdXRlIGhhcyBiZWVuIHJlbW92ZWQuCi0gICAgICAgICAqCi0gICAgICAgICAqIEBwYXJhbSByb3V0ZXIgVGhlIG1lZGlhIHJvdXRlciByZXBvcnRpbmcgdGhlIGV2ZW50LgotICAgICAgICAgKiBAcGFyYW0gcm91dGUgVGhlIHJvdXRlIHRoYXQgaGFzIGJlZW4gcmVtb3ZlZCBmcm9tIGF2YWlsYWJpbGl0eS4KLSAgICAgICAgICovCi0gICAgICAgIHB1YmxpYyB2b2lkIG9uUm91dGVSZW1vdmVkKE1lZGlhUm91dGVyIHJvdXRlciwgUm91dGVJbmZvIHJvdXRlKSB7Ci0gICAgICAgIH0KLQotICAgICAgICAvKioKLSAgICAgICAgICogQ2FsbGVkIHdoZW4gYSBwcm9wZXJ0eSBvZiB0aGUgaW5kaWNhdGVkIG1lZGlhIHJvdXRlIGhhcyBjaGFuZ2VkLgotICAgICAgICAgKgotICAgICAgICAgKiBAcGFyYW0gcm91dGVyIFRoZSBtZWRpYSByb3V0ZXIgcmVwb3J0aW5nIHRoZSBldmVudC4KLSAgICAgICAgICogQHBhcmFtIHJvdXRlIFRoZSByb3V0ZSB0aGF0IHdhcyBjaGFuZ2VkLgotICAgICAgICAgKi8KLSAgICAgICAgcHVibGljIHZvaWQgb25Sb3V0ZUNoYW5nZWQoTWVkaWFSb3V0ZXIgcm91dGVyLCBSb3V0ZUluZm8gcm91dGUpIHsKLSAgICAgICAgfQotCi0gICAgICAgIC8qKgotICAgICAgICAgKiBDYWxsZWQgd2hlbiBhIG1lZGlhIHJvdXRlJ3Mgdm9sdW1lIGNoYW5nZXMuCi0gICAgICAgICAqCi0gICAgICAgICAqIEBwYXJhbSByb3V0ZXIgVGhlIG1lZGlhIHJvdXRlciByZXBvcnRpbmcgdGhlIGV2ZW50LgotICAgICAgICAgKiBAcGFyYW0gcm91dGUgVGhlIHJvdXRlIHdob3NlIHZvbHVtZSBjaGFuZ2VkLgotICAgICAgICAgKi8KLSAgICAgICAgcHVibGljIHZvaWQgb25Sb3V0ZVZvbHVtZUNoYW5nZWQoTWVkaWFSb3V0ZXIgcm91dGVyLCBSb3V0ZUluZm8gcm91dGUpIHsKLSAgICAgICAgfQotCi0gICAgICAgIC8qKgotICAgICAgICAgKiBDYWxsZWQgd2hlbiBhIG1lZGlhIHJvdXRlJ3MgcHJlc2VudGF0aW9uIGRpc3BsYXkgY2hhbmdlcy4KLSAgICAgICAgICogPHA+Ci0gICAgICAgICAqIFRoaXMgbWV0aG9kIGlzIGNhbGxlZCB3aGVuZXZlciB0aGUgcm91dGUncyBwcmVzZW50YXRpb24gZGlzcGxheSBiZWNvbWVzCi0gICAgICAgICAqIGF2YWlsYWJsZSwgaXMgcmVtb3ZlZCBvciBoYXMgY2hhbmdlcyB0byBzb21lIG9mIGl0cyBwcm9wZXJ0aWVzIChzdWNoIGFzIGl0cyBzaXplKS4KLSAgICAgICAgICogPC9wPgotICAgICAgICAgKgotICAgICAgICAgKiBAcGFyYW0gcm91dGVyIFRoZSBtZWRpYSByb3V0ZXIgcmVwb3J0aW5nIHRoZSBldmVudC4KLSAgICAgICAgICogQHBhcmFtIHJvdXRlIFRoZSByb3V0ZSB3aG9zZSBwcmVzZW50YXRpb24gZGlzcGxheSBjaGFuZ2VkLgotICAgICAgICAgKgotICAgICAgICAgKiBAc2VlIFJvdXRlSW5mbyNnZXRQcmVzZW50YXRpb25EaXNwbGF5KCkKLSAgICAgICAgICovCi0gICAgICAgIHB1YmxpYyB2b2lkIG9uUm91dGVQcmVzZW50YXRpb25EaXNwbGF5Q2hhbmdlZChNZWRpYVJvdXRlciByb3V0ZXIsIFJvdXRlSW5mbyByb3V0ZSkgewotICAgICAgICB9Ci0KLSAgICAgICAgLyoqCi0gICAgICAgICAqIENhbGxlZCB3aGVuIGEgbWVkaWEgcm91dGUgcHJvdmlkZXIgaGFzIGJlZW4gYWRkZWQuCi0gICAgICAgICAqCi0gICAgICAgICAqIEBwYXJhbSByb3V0ZXIgVGhlIG1lZGlhIHJvdXRlciByZXBvcnRpbmcgdGhlIGV2ZW50LgotICAgICAgICAgKiBAcGFyYW0gcHJvdmlkZXIgVGhlIHByb3ZpZGVyIHRoYXQgaGFzIGJlY29tZSBhdmFpbGFibGUgZm9yIHVzZS4KLSAgICAgICAgICovCi0gICAgICAgIHB1YmxpYyB2b2lkIG9uUHJvdmlkZXJBZGRlZChNZWRpYVJvdXRlciByb3V0ZXIsIFByb3ZpZGVySW5mbyBwcm92aWRlcikgewotICAgICAgICB9Ci0KLSAgICAgICAgLyoqCi0gICAgICAgICAqIENhbGxlZCB3aGVuIGEgbWVkaWEgcm91dGUgcHJvdmlkZXIgaGFzIGJlZW4gcmVtb3ZlZC4KLSAgICAgICAgICoKLSAgICAgICAgICogQHBhcmFtIHJvdXRlciBUaGUgbWVkaWEgcm91dGVyIHJlcG9ydGluZyB0aGUgZXZlbnQuCi0gICAgICAgICAqIEBwYXJhbSBwcm92aWRlciBUaGUgcHJvdmlkZXIgdGhhdCBoYXMgYmVlbiByZW1vdmVkIGZyb20gYXZhaWxhYmlsaXR5LgotICAgICAgICAgKi8KLSAgICAgICAgcHVibGljIHZvaWQgb25Qcm92aWRlclJlbW92ZWQoTWVkaWFSb3V0ZXIgcm91dGVyLCBQcm92aWRlckluZm8gcHJvdmlkZXIpIHsKLSAgICAgICAgfQotCi0gICAgICAgIC8qKgotICAgICAgICAgKiBDYWxsZWQgd2hlbiBhIHByb3BlcnR5IG9mIHRoZSBpbmRpY2F0ZWQgbWVkaWEgcm91dGUgcHJvdmlkZXIgaGFzIGNoYW5nZWQuCi0gICAgICAgICAqCi0gICAgICAgICAqIEBwYXJhbSByb3V0ZXIgVGhlIG1lZGlhIHJvdXRlciByZXBvcnRpbmcgdGhlIGV2ZW50LgotICAgICAgICAgKiBAcGFyYW0gcHJvdmlkZXIgVGhlIHByb3ZpZGVyIHRoYXQgd2FzIGNoYW5nZWQuCi0gICAgICAgICAqLwotICAgICAgICBwdWJsaWMgdm9pZCBvblByb3ZpZGVyQ2hhbmdlZChNZWRpYVJvdXRlciByb3V0ZXIsIFByb3ZpZGVySW5mbyBwcm92aWRlcikgewotICAgICAgICB9Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogQ2FsbGJhY2sgd2hpY2ggaXMgaW52b2tlZCB3aXRoIHRoZSByZXN1bHQgb2YgYSBtZWRpYSBjb250cm9sIHJlcXVlc3QuCi0gICAgICoKLSAgICAgKiBAc2VlIFJvdXRlSW5mbyNzZW5kQ29udHJvbFJlcXVlc3QKLSAgICAgKi8KLSAgICBwdWJsaWMgc3RhdGljIGFic3RyYWN0IGNsYXNzIENvbnRyb2xSZXF1ZXN0Q2FsbGJhY2sgewotICAgICAgICAvKioKLSAgICAgICAgICogQ2FsbGVkIHdoZW4gYSBtZWRpYSBjb250cm9sIHJlcXVlc3Qgc3VjY2VlZHMuCi0gICAgICAgICAqCi0gICAgICAgICAqIEBwYXJhbSBkYXRhIFJlc3VsdCBkYXRhLCBvciBudWxsIGlmIG5vbmUuCi0gICAgICAgICAqIENvbnRlbnRzIGRlcGVuZCBvbiB0aGUge0BsaW5rIE1lZGlhQ29udHJvbEludGVudCBtZWRpYSBjb250cm9sIGFjdGlvbn0uCi0gICAgICAgICAqLwotICAgICAgICBwdWJsaWMgdm9pZCBvblJlc3VsdChCdW5kbGUgZGF0YSkgewotICAgICAgICB9Ci0KLSAgICAgICAgLyoqCi0gICAgICAgICAqIENhbGxlZCB3aGVuIGEgbWVkaWEgY29udHJvbCByZXF1ZXN0IGZhaWxzLgotICAgICAgICAgKgotICAgICAgICAgKiBAcGFyYW0gZXJyb3IgQSBsb2NhbGl6ZWQgZXJyb3IgbWVzc2FnZSB3aGljaCBtYXkgYmUgc2hvd24gdG8gdGhlIHVzZXIsIG9yIG51bGwKLSAgICAgICAgICogaWYgdGhlIGNhdXNlIG9mIHRoZSBlcnJvciBpcyB1bmNsZWFyLgotICAgICAgICAgKiBAcGFyYW0gZGF0YSBFcnJvciBkYXRhLCBvciBudWxsIGlmIG5vbmUuCi0gICAgICAgICAqIENvbnRlbnRzIGRlcGVuZCBvbiB0aGUge0BsaW5rIE1lZGlhQ29udHJvbEludGVudCBtZWRpYSBjb250cm9sIGFjdGlvbn0uCi0gICAgICAgICAqLwotICAgICAgICBwdWJsaWMgdm9pZCBvbkVycm9yKFN0cmluZyBlcnJvciwgQnVuZGxlIGRhdGEpIHsKLSAgICAgICAgfQotICAgIH0KLQotICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGNsYXNzIENhbGxiYWNrUmVjb3JkIHsKLSAgICAgICAgcHVibGljIGZpbmFsIE1lZGlhUm91dGVyIG1Sb3V0ZXI7Ci0gICAgICAgIHB1YmxpYyBmaW5hbCBDYWxsYmFjayBtQ2FsbGJhY2s7Ci0gICAgICAgIHB1YmxpYyBNZWRpYVJvdXRlU2VsZWN0b3IgbVNlbGVjdG9yOwotICAgICAgICBwdWJsaWMgaW50IG1GbGFnczsKLQotICAgICAgICBwdWJsaWMgQ2FsbGJhY2tSZWNvcmQoTWVkaWFSb3V0ZXIgcm91dGVyLCBDYWxsYmFjayBjYWxsYmFjaykgewotICAgICAgICAgICAgbVJvdXRlciA9IHJvdXRlcjsKLSAgICAgICAgICAgIG1DYWxsYmFjayA9IGNhbGxiYWNrOwotICAgICAgICAgICAgbVNlbGVjdG9yID0gTWVkaWFSb3V0ZVNlbGVjdG9yLkVNUFRZOwotICAgICAgICB9Ci0KLSAgICAgICAgcHVibGljIGJvb2xlYW4gZmlsdGVyUm91dGVFdmVudChSb3V0ZUluZm8gcm91dGUpIHsKLSAgICAgICAgICAgIHJldHVybiAobUZsYWdzICYgQ0FMTEJBQ0tfRkxBR19VTkZJTFRFUkVEX0VWRU5UUykgIT0gMAotICAgICAgICAgICAgICAgICAgICB8fCByb3V0ZS5tYXRjaGVzU2VsZWN0b3IobVNlbGVjdG9yKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIC8qKgotICAgICAqIEdsb2JhbCBzdGF0ZSBmb3IgdGhlIG1lZGlhIHJvdXRlci4KLSAgICAgKiA8cD4KLSAgICAgKiBNZWRpYSByb3V0ZXMgYW5kIG1lZGlhIHJvdXRlIHByb3ZpZGVycyBhcmUgZ2xvYmFsIHRvIHRoZSBwcm9jZXNzOyB0aGVpcgotICAgICAqIHN0YXRlIGFuZCB0aGUgYnVsayBvZiB0aGUgbWVkaWEgcm91dGVyIGltcGxlbWVudGF0aW9uIGxpdmVzIGhlcmUuCi0gICAgICogPC9wPgotICAgICAqLwotICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGNsYXNzIEdsb2JhbE1lZGlhUm91dGVyCi0gICAgICAgICAgICBpbXBsZW1lbnRzIFN5c3RlbU1lZGlhUm91dGVQcm92aWRlci5TeW5jQ2FsbGJhY2ssCi0gICAgICAgICAgICBSZWdpc3RlcmVkTWVkaWFSb3V0ZVByb3ZpZGVyV2F0Y2hlci5DYWxsYmFjayB7Ci0gICAgICAgIGZpbmFsIENvbnRleHQgbUFwcGxpY2F0aW9uQ29udGV4dDsKLSAgICAgICAgZmluYWwgQXJyYXlMaXN0PFdlYWtSZWZlcmVuY2U8TWVkaWFSb3V0ZXI+PiBtUm91dGVycyA9IG5ldyBBcnJheUxpc3Q8PigpOwotICAgICAgICBwcml2YXRlIGZpbmFsIEFycmF5TGlzdDxSb3V0ZUluZm8+IG1Sb3V0ZXMgPSBuZXcgQXJyYXlMaXN0PD4oKTsKLSAgICAgICAgcHJpdmF0ZSBmaW5hbCBNYXA8UGFpcjxTdHJpbmcsIFN0cmluZz4sIFN0cmluZz4gbVVuaXF1ZUlkTWFwID0gbmV3IEhhc2hNYXA8PigpOwotICAgICAgICBwcml2YXRlIGZpbmFsIEFycmF5TGlzdDxQcm92aWRlckluZm8+IG1Qcm92aWRlcnMgPSBuZXcgQXJyYXlMaXN0PD4oKTsKLSAgICAgICAgcHJpdmF0ZSBmaW5hbCBBcnJheUxpc3Q8UmVtb3RlQ29udHJvbENsaWVudFJlY29yZD4gbVJlbW90ZUNvbnRyb2xDbGllbnRzID0KLSAgICAgICAgICAgICAgICBuZXcgQXJyYXlMaXN0PD4oKTsKLSAgICAgICAgZmluYWwgUmVtb3RlQ29udHJvbENsaWVudENvbXBhdC5QbGF5YmFja0luZm8gbVBsYXliYWNrSW5mbyA9Ci0gICAgICAgICAgICAgICAgbmV3IFJlbW90ZUNvbnRyb2xDbGllbnRDb21wYXQuUGxheWJhY2tJbmZvKCk7Ci0gICAgICAgIHByaXZhdGUgZmluYWwgUHJvdmlkZXJDYWxsYmFjayBtUHJvdmlkZXJDYWxsYmFjayA9IG5ldyBQcm92aWRlckNhbGxiYWNrKCk7Ci0gICAgICAgIGZpbmFsIENhbGxiYWNrSGFuZGxlciBtQ2FsbGJhY2tIYW5kbGVyID0gbmV3IENhbGxiYWNrSGFuZGxlcigpOwotICAgICAgICBwcml2YXRlIGZpbmFsIERpc3BsYXlNYW5hZ2VyQ29tcGF0IG1EaXNwbGF5TWFuYWdlcjsKLSAgICAgICAgZmluYWwgU3lzdGVtTWVkaWFSb3V0ZVByb3ZpZGVyIG1TeXN0ZW1Qcm92aWRlcjsKLSAgICAgICAgcHJpdmF0ZSBmaW5hbCBib29sZWFuIG1Mb3dSYW07Ci0KLSAgICAgICAgcHJpdmF0ZSBSZWdpc3RlcmVkTWVkaWFSb3V0ZVByb3ZpZGVyV2F0Y2hlciBtUmVnaXN0ZXJlZFByb3ZpZGVyV2F0Y2hlcjsKLSAgICAgICAgcHJpdmF0ZSBSb3V0ZUluZm8gbURlZmF1bHRSb3V0ZTsKLSAgICAgICAgcHJpdmF0ZSBSb3V0ZUluZm8gbUJsdWV0b290aFJvdXRlOwotICAgICAgICBSb3V0ZUluZm8gbVNlbGVjdGVkUm91dGU7Ci0gICAgICAgIHByaXZhdGUgUm91dGVDb250cm9sbGVyIG1TZWxlY3RlZFJvdXRlQ29udHJvbGxlcjsKLSAgICAgICAgLy8gQSBtYXAgZnJvbSByb3V0ZSBkZXNjcmlwdG9yIElEIHRvIFJvdXRlQ29udHJvbGxlciBmb3IgdGhlIG1lbWJlciByb3V0ZXMgaW4gdGhlIGN1cnJlbnRseQotICAgICAgICAvLyBzZWxlY3RlZCByb3V0ZSBncm91cC4KLSAgICAgICAgcHJpdmF0ZSBmaW5hbCBNYXA8U3RyaW5nLCBSb3V0ZUNvbnRyb2xsZXI+IG1Sb3V0ZUNvbnRyb2xsZXJNYXAgPSBuZXcgSGFzaE1hcDw+KCk7Ci0gICAgICAgIHByaXZhdGUgTWVkaWFSb3V0ZURpc2NvdmVyeVJlcXVlc3QgbURpc2NvdmVyeVJlcXVlc3Q7Ci0gICAgICAgIHByaXZhdGUgTWVkaWFTZXNzaW9uUmVjb3JkIG1NZWRpYVNlc3Npb247Ci0gICAgICAgIE1lZGlhU2Vzc2lvbkNvbXBhdCBtUmNjTWVkaWFTZXNzaW9uOwotICAgICAgICBwcml2YXRlIE1lZGlhU2Vzc2lvbkNvbXBhdCBtQ29tcGF0U2Vzc2lvbjsKLSAgICAgICAgcHJpdmF0ZSBNZWRpYVNlc3Npb25Db21wYXQuT25BY3RpdmVDaGFuZ2VMaXN0ZW5lciBtU2Vzc2lvbkFjdGl2ZUxpc3RlbmVyID0KLSAgICAgICAgICAgICAgICBuZXcgTWVkaWFTZXNzaW9uQ29tcGF0Lk9uQWN0aXZlQ2hhbmdlTGlzdGVuZXIoKSB7Ci0gICAgICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgICAgIHB1YmxpYyB2b2lkIG9uQWN0aXZlQ2hhbmdlZCgpIHsKLSAgICAgICAgICAgICAgICBpZihtUmNjTWVkaWFTZXNzaW9uICE9IG51bGwpIHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKG1SY2NNZWRpYVNlc3Npb24uaXNBY3RpdmUoKSkgewotICAgICAgICAgICAgICAgICAgICAgICAgYWRkUmVtb3RlQ29udHJvbENsaWVudChtUmNjTWVkaWFTZXNzaW9uLmdldFJlbW90ZUNvbnRyb2xDbGllbnQoKSk7Ci0gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICByZW1vdmVSZW1vdGVDb250cm9sQ2xpZW50KG1SY2NNZWRpYVNlc3Npb24uZ2V0UmVtb3RlQ29udHJvbENsaWVudCgpKTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgfTsKLQotICAgICAgICBHbG9iYWxNZWRpYVJvdXRlcihDb250ZXh0IGFwcGxpY2F0aW9uQ29udGV4dCkgewotICAgICAgICAgICAgbUFwcGxpY2F0aW9uQ29udGV4dCA9IGFwcGxpY2F0aW9uQ29udGV4dDsKLSAgICAgICAgICAgIG1EaXNwbGF5TWFuYWdlciA9IERpc3BsYXlNYW5hZ2VyQ29tcGF0LmdldEluc3RhbmNlKGFwcGxpY2F0aW9uQ29udGV4dCk7Ci0gICAgICAgICAgICBtTG93UmFtID0gQWN0aXZpdHlNYW5hZ2VyQ29tcGF0LmlzTG93UmFtRGV2aWNlKAotICAgICAgICAgICAgICAgICAgICAoQWN0aXZpdHlNYW5hZ2VyKWFwcGxpY2F0aW9uQ29udGV4dC5nZXRTeXN0ZW1TZXJ2aWNlKAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIENvbnRleHQuQUNUSVZJVFlfU0VSVklDRSkpOwotCi0gICAgICAgICAgICAvLyBBZGQgdGhlIHN5c3RlbSBtZWRpYSByb3V0ZSBwcm92aWRlciBmb3IgaW50ZXJvcGVyYXRpbmcgd2l0aAotICAgICAgICAgICAgLy8gdGhlIGZyYW1ld29yayBtZWRpYSByb3V0ZXIuICBUaGlzIG9uZSBpcyBzcGVjaWFsIGFuZCByZWNlaXZlcwotICAgICAgICAgICAgLy8gc3luY2hyb25pemF0aW9uIG1lc3NhZ2VzIGZyb20gdGhlIG1lZGlhIHJvdXRlci4KLSAgICAgICAgICAgIG1TeXN0ZW1Qcm92aWRlciA9IFN5c3RlbU1lZGlhUm91dGVQcm92aWRlci5vYnRhaW4oYXBwbGljYXRpb25Db250ZXh0LCB0aGlzKTsKLSAgICAgICAgfQotCi0gICAgICAgIHB1YmxpYyB2b2lkIHN0YXJ0KCkgewotICAgICAgICAgICAgYWRkUHJvdmlkZXIobVN5c3RlbVByb3ZpZGVyKTsKLQotICAgICAgICAgICAgLy8gU3RhcnQgd2F0Y2hpbmcgZm9yIHJvdXRlcyBwdWJsaXNoZWQgYnkgcmVnaXN0ZXJlZCBtZWRpYSByb3V0ZQotICAgICAgICAgICAgLy8gcHJvdmlkZXIgc2VydmljZXMuCi0gICAgICAgICAgICBtUmVnaXN0ZXJlZFByb3ZpZGVyV2F0Y2hlciA9IG5ldyBSZWdpc3RlcmVkTWVkaWFSb3V0ZVByb3ZpZGVyV2F0Y2hlcigKLSAgICAgICAgICAgICAgICAgICAgbUFwcGxpY2F0aW9uQ29udGV4dCwgdGhpcyk7Ci0gICAgICAgICAgICBtUmVnaXN0ZXJlZFByb3ZpZGVyV2F0Y2hlci5zdGFydCgpOwotICAgICAgICB9Ci0KLSAgICAgICAgcHVibGljIE1lZGlhUm91dGVyIGdldFJvdXRlcihDb250ZXh0IGNvbnRleHQpIHsKLSAgICAgICAgICAgIE1lZGlhUm91dGVyIHJvdXRlcjsKLSAgICAgICAgICAgIGZvciAoaW50IGkgPSBtUm91dGVycy5zaXplKCk7IC0taSA+PSAwOyApIHsKLSAgICAgICAgICAgICAgICByb3V0ZXIgPSBtUm91dGVycy5nZXQoaSkuZ2V0KCk7Ci0gICAgICAgICAgICAgICAgaWYgKHJvdXRlciA9PSBudWxsKSB7Ci0gICAgICAgICAgICAgICAgICAgIG1Sb3V0ZXJzLnJlbW92ZShpKTsKLSAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHJvdXRlci5tQ29udGV4dCA9PSBjb250ZXh0KSB7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiByb3V0ZXI7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICAgICAgcm91dGVyID0gbmV3IE1lZGlhUm91dGVyKGNvbnRleHQpOwotICAgICAgICAgICAgbVJvdXRlcnMuYWRkKG5ldyBXZWFrUmVmZXJlbmNlPE1lZGlhUm91dGVyPihyb3V0ZXIpKTsKLSAgICAgICAgICAgIHJldHVybiByb3V0ZXI7Ci0gICAgICAgIH0KLQotICAgICAgICBwdWJsaWMgQ29udGVudFJlc29sdmVyIGdldENvbnRlbnRSZXNvbHZlcigpIHsKLSAgICAgICAgICAgIHJldHVybiBtQXBwbGljYXRpb25Db250ZXh0LmdldENvbnRlbnRSZXNvbHZlcigpOwotICAgICAgICB9Ci0KLSAgICAgICAgcHVibGljIENvbnRleHQgZ2V0UHJvdmlkZXJDb250ZXh0KFN0cmluZyBwYWNrYWdlTmFtZSkgewotICAgICAgICAgICAgaWYgKHBhY2thZ2VOYW1lLmVxdWFscyhTeXN0ZW1NZWRpYVJvdXRlUHJvdmlkZXIuUEFDS0FHRV9OQU1FKSkgewotICAgICAgICAgICAgICAgIHJldHVybiBtQXBwbGljYXRpb25Db250ZXh0OwotICAgICAgICAgICAgfQotICAgICAgICAgICAgdHJ5IHsKLSAgICAgICAgICAgICAgICByZXR1cm4gbUFwcGxpY2F0aW9uQ29udGV4dC5jcmVhdGVQYWNrYWdlQ29udGV4dCgKLSAgICAgICAgICAgICAgICAgICAgICAgIHBhY2thZ2VOYW1lLCBDb250ZXh0LkNPTlRFWFRfUkVTVFJJQ1RFRCk7Ci0gICAgICAgICAgICB9IGNhdGNoIChOYW1lTm90Rm91bmRFeGNlcHRpb24gZXgpIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIHB1YmxpYyBEaXNwbGF5IGdldERpc3BsYXkoaW50IGRpc3BsYXlJZCkgewotICAgICAgICAgICAgcmV0dXJuIG1EaXNwbGF5TWFuYWdlci5nZXREaXNwbGF5KGRpc3BsYXlJZCk7Ci0gICAgICAgIH0KLQotICAgICAgICBwdWJsaWMgdm9pZCBzZW5kQ29udHJvbFJlcXVlc3QoUm91dGVJbmZvIHJvdXRlLAotICAgICAgICAgICAgICAgIEludGVudCBpbnRlbnQsIENvbnRyb2xSZXF1ZXN0Q2FsbGJhY2sgY2FsbGJhY2spIHsKLSAgICAgICAgICAgIGlmIChyb3V0ZSA9PSBtU2VsZWN0ZWRSb3V0ZSAmJiBtU2VsZWN0ZWRSb3V0ZUNvbnRyb2xsZXIgIT0gbnVsbCkgewotICAgICAgICAgICAgICAgIGlmIChtU2VsZWN0ZWRSb3V0ZUNvbnRyb2xsZXIub25Db250cm9sUmVxdWVzdChpbnRlbnQsIGNhbGxiYWNrKSkgewotICAgICAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYgKGNhbGxiYWNrICE9IG51bGwpIHsKLSAgICAgICAgICAgICAgICBjYWxsYmFjay5vbkVycm9yKG51bGwsIG51bGwpOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgcHVibGljIHZvaWQgcmVxdWVzdFNldFZvbHVtZShSb3V0ZUluZm8gcm91dGUsIGludCB2b2x1bWUpIHsKLSAgICAgICAgICAgIGlmIChyb3V0ZSA9PSBtU2VsZWN0ZWRSb3V0ZSAmJiBtU2VsZWN0ZWRSb3V0ZUNvbnRyb2xsZXIgIT0gbnVsbCkgewotICAgICAgICAgICAgICAgIG1TZWxlY3RlZFJvdXRlQ29udHJvbGxlci5vblNldFZvbHVtZSh2b2x1bWUpOwotICAgICAgICAgICAgfSBlbHNlIGlmICghbVJvdXRlQ29udHJvbGxlck1hcC5pc0VtcHR5KCkpIHsKLSAgICAgICAgICAgICAgICBSb3V0ZUNvbnRyb2xsZXIgY29udHJvbGxlciA9IG1Sb3V0ZUNvbnRyb2xsZXJNYXAuZ2V0KHJvdXRlLm1EZXNjcmlwdG9ySWQpOwotICAgICAgICAgICAgICAgIGlmIChjb250cm9sbGVyICE9IG51bGwpIHsKLSAgICAgICAgICAgICAgICAgICAgY29udHJvbGxlci5vblNldFZvbHVtZSh2b2x1bWUpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIHB1YmxpYyB2b2lkIHJlcXVlc3RVcGRhdGVWb2x1bWUoUm91dGVJbmZvIHJvdXRlLCBpbnQgZGVsdGEpIHsKLSAgICAgICAgICAgIGlmIChyb3V0ZSA9PSBtU2VsZWN0ZWRSb3V0ZSAmJiBtU2VsZWN0ZWRSb3V0ZUNvbnRyb2xsZXIgIT0gbnVsbCkgewotICAgICAgICAgICAgICAgIG1TZWxlY3RlZFJvdXRlQ29udHJvbGxlci5vblVwZGF0ZVZvbHVtZShkZWx0YSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICBwdWJsaWMgUm91dGVJbmZvIGdldFJvdXRlKFN0cmluZyB1bmlxdWVJZCkgewotICAgICAgICAgICAgZm9yIChSb3V0ZUluZm8gaW5mbyA6IG1Sb3V0ZXMpIHsKLSAgICAgICAgICAgICAgICBpZiAoaW5mby5tVW5pcXVlSWQuZXF1YWxzKHVuaXF1ZUlkKSkgewotICAgICAgICAgICAgICAgICAgICByZXR1cm4gaW5mbzsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICByZXR1cm4gbnVsbDsKLSAgICAgICAgfQotCi0gICAgICAgIHB1YmxpYyBMaXN0PFJvdXRlSW5mbz4gZ2V0Um91dGVzKCkgewotICAgICAgICAgICAgcmV0dXJuIG1Sb3V0ZXM7Ci0gICAgICAgIH0KLQotICAgICAgICBMaXN0PFByb3ZpZGVySW5mbz4gZ2V0UHJvdmlkZXJzKCkgewotICAgICAgICAgICAgcmV0dXJuIG1Qcm92aWRlcnM7Ci0gICAgICAgIH0KLQotICAgICAgICBATm9uTnVsbCBSb3V0ZUluZm8gZ2V0RGVmYXVsdFJvdXRlKCkgewotICAgICAgICAgICAgaWYgKG1EZWZhdWx0Um91dGUgPT0gbnVsbCkgewotICAgICAgICAgICAgICAgIC8vIFRoaXMgc2hvdWxkIG5ldmVyIGhhcHBlbiBvbmNlIHRoZSBtZWRpYSByb3V0ZXIgaGFzIGJlZW4gZnVsbHkKLSAgICAgICAgICAgICAgICAvLyBpbml0aWFsaXplZCBidXQgaXQgaXMgZ29vZCB0byBjaGVjayBmb3IgdGhlIGVycm9yIGluIGNhc2UgdGhlcmUKLSAgICAgICAgICAgICAgICAvLyBpcyBhIGJ1ZyBpbiBwcm92aWRlciBpbml0aWFsaXphdGlvbi4KLSAgICAgICAgICAgICAgICB0aHJvdyBuZXcgSWxsZWdhbFN0YXRlRXhjZXB0aW9uKCJUaGVyZSBpcyBubyBkZWZhdWx0IHJvdXRlLiAgIgotICAgICAgICAgICAgICAgICAgICAgICAgKyAiVGhlIG1lZGlhIHJvdXRlciBoYXMgbm90IHlldCBiZWVuIGZ1bGx5IGluaXRpYWxpemVkLiIpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgcmV0dXJuIG1EZWZhdWx0Um91dGU7Ci0gICAgICAgIH0KLQotICAgICAgICBSb3V0ZUluZm8gZ2V0Qmx1ZXRvb3RoUm91dGUoKSB7Ci0gICAgICAgICAgICByZXR1cm4gbUJsdWV0b290aFJvdXRlOwotICAgICAgICB9Ci0KLSAgICAgICAgQE5vbk51bGwgUm91dGVJbmZvIGdldFNlbGVjdGVkUm91dGUoKSB7Ci0gICAgICAgICAgICBpZiAobVNlbGVjdGVkUm91dGUgPT0gbnVsbCkgewotICAgICAgICAgICAgICAgIC8vIFRoaXMgc2hvdWxkIG5ldmVyIGhhcHBlbiBvbmNlIHRoZSBtZWRpYSByb3V0ZXIgaGFzIGJlZW4gZnVsbHkKLSAgICAgICAgICAgICAgICAvLyBpbml0aWFsaXplZCBidXQgaXQgaXMgZ29vZCB0byBjaGVjayBmb3IgdGhlIGVycm9yIGluIGNhc2UgdGhlcmUKLSAgICAgICAgICAgICAgICAvLyBpcyBhIGJ1ZyBpbiBwcm92aWRlciBpbml0aWFsaXphdGlvbi4KLSAgICAgICAgICAgICAgICB0aHJvdyBuZXcgSWxsZWdhbFN0YXRlRXhjZXB0aW9uKCJUaGVyZSBpcyBubyBjdXJyZW50bHkgc2VsZWN0ZWQgcm91dGUuICAiCi0gICAgICAgICAgICAgICAgICAgICAgICArICJUaGUgbWVkaWEgcm91dGVyIGhhcyBub3QgeWV0IGJlZW4gZnVsbHkgaW5pdGlhbGl6ZWQuIik7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICByZXR1cm4gbVNlbGVjdGVkUm91dGU7Ci0gICAgICAgIH0KLQotICAgICAgICB2b2lkIHNlbGVjdFJvdXRlKEBOb25OdWxsIFJvdXRlSW5mbyByb3V0ZSkgewotICAgICAgICAgICAgc2VsZWN0Um91dGUocm91dGUsIE1lZGlhUm91dGVyLlVOU0VMRUNUX1JFQVNPTl9ST1VURV9DSEFOR0VEKTsKLSAgICAgICAgfQotCi0gICAgICAgIHZvaWQgc2VsZWN0Um91dGUoQE5vbk51bGwgUm91dGVJbmZvIHJvdXRlLCBpbnQgdW5zZWxlY3RSZWFzb24pIHsKLSAgICAgICAgICAgIGlmICghbVJvdXRlcy5jb250YWlucyhyb3V0ZSkpIHsKLSAgICAgICAgICAgICAgICBMb2cudyhUQUcsICJJZ25vcmluZyBhdHRlbXB0IHRvIHNlbGVjdCByZW1vdmVkIHJvdXRlOiAiICsgcm91dGUpOwotICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmICghcm91dGUubUVuYWJsZWQpIHsKLSAgICAgICAgICAgICAgICBMb2cudyhUQUcsICJJZ25vcmluZyBhdHRlbXB0IHRvIHNlbGVjdCBkaXNhYmxlZCByb3V0ZTogIiArIHJvdXRlKTsKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBzZXRTZWxlY3RlZFJvdXRlSW50ZXJuYWwocm91dGUsIHVuc2VsZWN0UmVhc29uKTsKLSAgICAgICAgfQotCi0gICAgICAgIHB1YmxpYyBib29sZWFuIGlzUm91dGVBdmFpbGFibGUoTWVkaWFSb3V0ZVNlbGVjdG9yIHNlbGVjdG9yLCBpbnQgZmxhZ3MpIHsKLSAgICAgICAgICAgIGlmIChzZWxlY3Rvci5pc0VtcHR5KCkpIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIC8vIE9uIGxvdy1SQU0gZGV2aWNlcywgZG8gbm90IHJlbHkgb24gYWN0dWFsIGRpc2NvdmVyeSByZXN1bHRzIHVubGVzcyBhc2tlZCB0by4KLSAgICAgICAgICAgIGlmICgoZmxhZ3MgJiBBVkFJTEFCSUxJVFlfRkxBR19SRVFVSVJFX01BVENIKSA9PSAwICYmIG1Mb3dSYW0pIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgLy8gQ2hlY2sgd2hldGhlciBhbnkgZXhpc3Rpbmcgcm91dGVzIG1hdGNoIHRoZSBzZWxlY3Rvci4KLSAgICAgICAgICAgIGZpbmFsIGludCByb3V0ZUNvdW50ID0gbVJvdXRlcy5zaXplKCk7Ci0gICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IHJvdXRlQ291bnQ7IGkrKykgewotICAgICAgICAgICAgICAgIFJvdXRlSW5mbyByb3V0ZSA9IG1Sb3V0ZXMuZ2V0KGkpOwotICAgICAgICAgICAgICAgIGlmICgoZmxhZ3MgJiBBVkFJTEFCSUxJVFlfRkxBR19JR05PUkVfREVGQVVMVF9ST1VURSkgIT0gMAotICAgICAgICAgICAgICAgICAgICAgICAgJiYgcm91dGUuaXNEZWZhdWx0T3JCbHVldG9vdGgoKSkgewotICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgaWYgKHJvdXRlLm1hdGNoZXNTZWxlY3RvcihzZWxlY3RvcikpIHsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAvLyBJdCBkb2Vzbid0IGxvb2sgbGlrZSB3ZSBjYW4gZmluZCBhIG1hdGNoaW5nIHJvdXRlIHJpZ2h0IG5vdy4KLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgfQotCi0gICAgICAgIHB1YmxpYyB2b2lkIHVwZGF0ZURpc2NvdmVyeVJlcXVlc3QoKSB7Ci0gICAgICAgICAgICAvLyBDb21iaW5lIGFsbCBvZiB0aGUgY2FsbGJhY2sgc2VsZWN0b3JzIGFuZCBhY3RpdmUgc2NhbiBmbGFncy4KLSAgICAgICAgICAgIGJvb2xlYW4gZGlzY292ZXIgPSBmYWxzZTsKLSAgICAgICAgICAgIGJvb2xlYW4gYWN0aXZlU2NhbiA9IGZhbHNlOwotICAgICAgICAgICAgTWVkaWFSb3V0ZVNlbGVjdG9yLkJ1aWxkZXIgYnVpbGRlciA9IG5ldyBNZWRpYVJvdXRlU2VsZWN0b3IuQnVpbGRlcigpOwotICAgICAgICAgICAgZm9yIChpbnQgaSA9IG1Sb3V0ZXJzLnNpemUoKTsgLS1pID49IDA7ICkgewotICAgICAgICAgICAgICAgIE1lZGlhUm91dGVyIHJvdXRlciA9IG1Sb3V0ZXJzLmdldChpKS5nZXQoKTsKLSAgICAgICAgICAgICAgICBpZiAocm91dGVyID09IG51bGwpIHsKLSAgICAgICAgICAgICAgICAgICAgbVJvdXRlcnMucmVtb3ZlKGkpOwotICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgIGZpbmFsIGludCBjb3VudCA9IHJvdXRlci5tQ2FsbGJhY2tSZWNvcmRzLnNpemUoKTsKLSAgICAgICAgICAgICAgICAgICAgZm9yIChpbnQgaiA9IDA7IGogPCBjb3VudDsgaisrKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBDYWxsYmFja1JlY29yZCBjYWxsYmFjayA9IHJvdXRlci5tQ2FsbGJhY2tSZWNvcmRzLmdldChqKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGJ1aWxkZXIuYWRkU2VsZWN0b3IoY2FsbGJhY2subVNlbGVjdG9yKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmICgoY2FsbGJhY2subUZsYWdzICYgQ0FMTEJBQ0tfRkxBR19QRVJGT1JNX0FDVElWRV9TQ0FOKSAhPSAwKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgYWN0aXZlU2NhbiA9IHRydWU7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlzY292ZXIgPSB0cnVlOyAvLyBwZXJmb3JtIGFjdGl2ZSBzY2FuIGltcGxpZXMgcmVxdWVzdCBkaXNjb3ZlcnkKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgIGlmICgoY2FsbGJhY2subUZsYWdzICYgQ0FMTEJBQ0tfRkxBR19SRVFVRVNUX0RJU0NPVkVSWSkgIT0gMCkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghbUxvd1JhbSkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXNjb3ZlciA9IHRydWU7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKChjYWxsYmFjay5tRmxhZ3MgJiBDQUxMQkFDS19GTEFHX0ZPUkNFX0RJU0NPVkVSWSkgIT0gMCkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpc2NvdmVyID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIE1lZGlhUm91dGVTZWxlY3RvciBzZWxlY3RvciA9IGRpc2NvdmVyID8gYnVpbGRlci5idWlsZCgpIDogTWVkaWFSb3V0ZVNlbGVjdG9yLkVNUFRZOwotCi0gICAgICAgICAgICAvLyBDcmVhdGUgYSBuZXcgZGlzY292ZXJ5IHJlcXVlc3QuCi0gICAgICAgICAgICBpZiAobURpc2NvdmVyeVJlcXVlc3QgIT0gbnVsbAotICAgICAgICAgICAgICAgICAgICAmJiBtRGlzY292ZXJ5UmVxdWVzdC5nZXRTZWxlY3RvcigpLmVxdWFscyhzZWxlY3RvcikKLSAgICAgICAgICAgICAgICAgICAgJiYgbURpc2NvdmVyeVJlcXVlc3QuaXNBY3RpdmVTY2FuKCkgPT0gYWN0aXZlU2NhbikgewotICAgICAgICAgICAgICAgIHJldHVybjsgLy8gbm8gY2hhbmdlCi0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAoc2VsZWN0b3IuaXNFbXB0eSgpICYmICFhY3RpdmVTY2FuKSB7Ci0gICAgICAgICAgICAgICAgLy8gRGlzY292ZXJ5IGlzIG5vdCBuZWVkZWQuCi0gICAgICAgICAgICAgICAgaWYgKG1EaXNjb3ZlcnlSZXF1ZXN0ID09IG51bGwpIHsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuOyAvLyBubyBjaGFuZ2UKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgbURpc2NvdmVyeVJlcXVlc3QgPSBudWxsOwotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAvLyBEaXNjb3ZlcnkgaXMgbmVlZGVkLgotICAgICAgICAgICAgICAgIG1EaXNjb3ZlcnlSZXF1ZXN0ID0gbmV3IE1lZGlhUm91dGVEaXNjb3ZlcnlSZXF1ZXN0KHNlbGVjdG9yLCBhY3RpdmVTY2FuKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmIChERUJVRykgewotICAgICAgICAgICAgICAgIExvZy5kKFRBRywgIlVwZGF0ZWQgZGlzY292ZXJ5IHJlcXVlc3Q6ICIgKyBtRGlzY292ZXJ5UmVxdWVzdCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAoZGlzY292ZXIgJiYgIWFjdGl2ZVNjYW4gJiYgbUxvd1JhbSkgewotICAgICAgICAgICAgICAgIExvZy5pKFRBRywgIkZvcmNpbmcgcGFzc2l2ZSByb3V0ZSBkaXNjb3Zlcnkgb24gYSBsb3ctUkFNIGRldmljZSwgIgotICAgICAgICAgICAgICAgICAgICAgICAgKyAic3lzdGVtIHBlcmZvcm1hbmNlIG1heSBiZSBhZmZlY3RlZC4gIFBsZWFzZSBjb25zaWRlciB1c2luZyAiCi0gICAgICAgICAgICAgICAgICAgICAgICArICJDQUxMQkFDS19GTEFHX1JFUVVFU1RfRElTQ09WRVJZIGluc3RlYWQgb2YgIgotICAgICAgICAgICAgICAgICAgICAgICAgKyAiQ0FMTEJBQ0tfRkxBR19GT1JDRV9ESVNDT1ZFUlkuIik7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIC8vIE5vdGlmeSBwcm92aWRlcnMuCi0gICAgICAgICAgICBmaW5hbCBpbnQgcHJvdmlkZXJDb3VudCA9IG1Qcm92aWRlcnMuc2l6ZSgpOwotICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBwcm92aWRlckNvdW50OyBpKyspIHsKLSAgICAgICAgICAgICAgICBtUHJvdmlkZXJzLmdldChpKS5tUHJvdmlkZXJJbnN0YW5jZS5zZXREaXNjb3ZlcnlSZXF1ZXN0KG1EaXNjb3ZlcnlSZXF1ZXN0KTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIEBPdmVycmlkZQotICAgICAgICBwdWJsaWMgdm9pZCBhZGRQcm92aWRlcihNZWRpYVJvdXRlUHJvdmlkZXIgcHJvdmlkZXJJbnN0YW5jZSkgewotICAgICAgICAgICAgaW50IGluZGV4ID0gZmluZFByb3ZpZGVySW5mbyhwcm92aWRlckluc3RhbmNlKTsKLSAgICAgICAgICAgIGlmIChpbmRleCA8IDApIHsKLSAgICAgICAgICAgICAgICAvLyAxLiBBZGQgdGhlIHByb3ZpZGVyIHRvIHRoZSBsaXN0LgotICAgICAgICAgICAgICAgIFByb3ZpZGVySW5mbyBwcm92aWRlciA9IG5ldyBQcm92aWRlckluZm8ocHJvdmlkZXJJbnN0YW5jZSk7Ci0gICAgICAgICAgICAgICAgbVByb3ZpZGVycy5hZGQocHJvdmlkZXIpOwotICAgICAgICAgICAgICAgIGlmIChERUJVRykgewotICAgICAgICAgICAgICAgICAgICBMb2cuZChUQUcsICJQcm92aWRlciBhZGRlZDogIiArIHByb3ZpZGVyKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgbUNhbGxiYWNrSGFuZGxlci5wb3N0KENhbGxiYWNrSGFuZGxlci5NU0dfUFJPVklERVJfQURERUQsIHByb3ZpZGVyKTsKLSAgICAgICAgICAgICAgICAvLyAyLiBDcmVhdGUgdGhlIHByb3ZpZGVyJ3MgY29udGVudHMuCi0gICAgICAgICAgICAgICAgdXBkYXRlUHJvdmlkZXJDb250ZW50cyhwcm92aWRlciwgcHJvdmlkZXJJbnN0YW5jZS5nZXREZXNjcmlwdG9yKCkpOwotICAgICAgICAgICAgICAgIC8vIDMuIFJlZ2lzdGVyIHRoZSBwcm92aWRlciBjYWxsYmFjay4KLSAgICAgICAgICAgICAgICBwcm92aWRlckluc3RhbmNlLnNldENhbGxiYWNrKG1Qcm92aWRlckNhbGxiYWNrKTsKLSAgICAgICAgICAgICAgICAvLyA0LiBTZXQgdGhlIGRpc2NvdmVyeSByZXF1ZXN0LgotICAgICAgICAgICAgICAgIHByb3ZpZGVySW5zdGFuY2Uuc2V0RGlzY292ZXJ5UmVxdWVzdChtRGlzY292ZXJ5UmVxdWVzdCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgcHVibGljIHZvaWQgcmVtb3ZlUHJvdmlkZXIoTWVkaWFSb3V0ZVByb3ZpZGVyIHByb3ZpZGVySW5zdGFuY2UpIHsKLSAgICAgICAgICAgIGludCBpbmRleCA9IGZpbmRQcm92aWRlckluZm8ocHJvdmlkZXJJbnN0YW5jZSk7Ci0gICAgICAgICAgICBpZiAoaW5kZXggPj0gMCkgewotICAgICAgICAgICAgICAgIC8vIDEuIFVucmVnaXN0ZXIgdGhlIHByb3ZpZGVyIGNhbGxiYWNrLgotICAgICAgICAgICAgICAgIHByb3ZpZGVySW5zdGFuY2Uuc2V0Q2FsbGJhY2sobnVsbCk7Ci0gICAgICAgICAgICAgICAgLy8gMi4gQ2xlYXIgdGhlIGRpc2NvdmVyeSByZXF1ZXN0LgotICAgICAgICAgICAgICAgIHByb3ZpZGVySW5zdGFuY2Uuc2V0RGlzY292ZXJ5UmVxdWVzdChudWxsKTsKLSAgICAgICAgICAgICAgICAvLyAzLiBEZWxldGUgdGhlIHByb3ZpZGVyJ3MgY29udGVudHMuCi0gICAgICAgICAgICAgICAgUHJvdmlkZXJJbmZvIHByb3ZpZGVyID0gbVByb3ZpZGVycy5nZXQoaW5kZXgpOwotICAgICAgICAgICAgICAgIHVwZGF0ZVByb3ZpZGVyQ29udGVudHMocHJvdmlkZXIsIG51bGwpOwotICAgICAgICAgICAgICAgIC8vIDQuIFJlbW92ZSB0aGUgcHJvdmlkZXIgZnJvbSB0aGUgbGlzdC4KLSAgICAgICAgICAgICAgICBpZiAoREVCVUcpIHsKLSAgICAgICAgICAgICAgICAgICAgTG9nLmQoVEFHLCAiUHJvdmlkZXIgcmVtb3ZlZDogIiArIHByb3ZpZGVyKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgbUNhbGxiYWNrSGFuZGxlci5wb3N0KENhbGxiYWNrSGFuZGxlci5NU0dfUFJPVklERVJfUkVNT1ZFRCwgcHJvdmlkZXIpOwotICAgICAgICAgICAgICAgIG1Qcm92aWRlcnMucmVtb3ZlKGluZGV4KTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIHZvaWQgdXBkYXRlUHJvdmlkZXJEZXNjcmlwdG9yKE1lZGlhUm91dGVQcm92aWRlciBwcm92aWRlckluc3RhbmNlLAotICAgICAgICAgICAgICAgIE1lZGlhUm91dGVQcm92aWRlckRlc2NyaXB0b3IgZGVzY3JpcHRvcikgewotICAgICAgICAgICAgaW50IGluZGV4ID0gZmluZFByb3ZpZGVySW5mbyhwcm92aWRlckluc3RhbmNlKTsKLSAgICAgICAgICAgIGlmIChpbmRleCA+PSAwKSB7Ci0gICAgICAgICAgICAgICAgLy8gVXBkYXRlIHRoZSBwcm92aWRlcidzIGNvbnRlbnRzLgotICAgICAgICAgICAgICAgIFByb3ZpZGVySW5mbyBwcm92aWRlciA9IG1Qcm92aWRlcnMuZ2V0KGluZGV4KTsKLSAgICAgICAgICAgICAgICB1cGRhdGVQcm92aWRlckNvbnRlbnRzKHByb3ZpZGVyLCBkZXNjcmlwdG9yKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIHByaXZhdGUgaW50IGZpbmRQcm92aWRlckluZm8oTWVkaWFSb3V0ZVByb3ZpZGVyIHByb3ZpZGVySW5zdGFuY2UpIHsKLSAgICAgICAgICAgIGZpbmFsIGludCBjb3VudCA9IG1Qcm92aWRlcnMuc2l6ZSgpOwotICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBjb3VudDsgaSsrKSB7Ci0gICAgICAgICAgICAgICAgaWYgKG1Qcm92aWRlcnMuZ2V0KGkpLm1Qcm92aWRlckluc3RhbmNlID09IHByb3ZpZGVySW5zdGFuY2UpIHsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICAgICAgcmV0dXJuIC0xOwotICAgICAgICB9Ci0KLSAgICAgICAgcHJpdmF0ZSB2b2lkIHVwZGF0ZVByb3ZpZGVyQ29udGVudHMoUHJvdmlkZXJJbmZvIHByb3ZpZGVyLAotICAgICAgICAgICAgICAgIE1lZGlhUm91dGVQcm92aWRlckRlc2NyaXB0b3IgcHJvdmlkZXJEZXNjcmlwdG9yKSB7Ci0gICAgICAgICAgICBpZiAocHJvdmlkZXIudXBkYXRlRGVzY3JpcHRvcihwcm92aWRlckRlc2NyaXB0b3IpKSB7Ci0gICAgICAgICAgICAgICAgLy8gVXBkYXRlIGFsbCBleGlzdGluZyByb3V0ZXMgYW5kIHJlb3JkZXIgdGhlbSB0byBtYXRjaAotICAgICAgICAgICAgICAgIC8vIHRoZSBvcmRlciBvZiB0aGVpciBkZXNjcmlwdG9ycy4KLSAgICAgICAgICAgICAgICBpbnQgdGFyZ2V0SW5kZXggPSAwOwotICAgICAgICAgICAgICAgIGJvb2xlYW4gc2VsZWN0ZWRSb3V0ZURlc2NyaXB0b3JDaGFuZ2VkID0gZmFsc2U7Ci0gICAgICAgICAgICAgICAgaWYgKHByb3ZpZGVyRGVzY3JpcHRvciAhPSBudWxsKSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChwcm92aWRlckRlc2NyaXB0b3IuaXNWYWxpZCgpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBmaW5hbCBMaXN0PE1lZGlhUm91dGVEZXNjcmlwdG9yPiByb3V0ZURlc2NyaXB0b3JzID0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvdmlkZXJEZXNjcmlwdG9yLmdldFJvdXRlcygpOwotICAgICAgICAgICAgICAgICAgICAgICAgZmluYWwgaW50IHJvdXRlQ291bnQgPSByb3V0ZURlc2NyaXB0b3JzLnNpemUoKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIC8vIFVwZGF0aW5nIHJvdXRlIGdyb3VwJ3MgY29udGVudHMgcmVxdWlyZXMgYWxsIG1lbWJlciByb3V0ZXMnIGluZm9ybWF0aW9uLgotICAgICAgICAgICAgICAgICAgICAgICAgLy8gQWRkIHRoZSBncm91cHMgdG8gdGhlIGxpc3RzIGFuZCB1cGRhdGUgdGhlbSBsYXRlci4KLSAgICAgICAgICAgICAgICAgICAgICAgIExpc3Q8UGFpcjxSb3V0ZUluZm8sIE1lZGlhUm91dGVEZXNjcmlwdG9yPj4gYWRkZWRHcm91cHMgPSBuZXcgQXJyYXlMaXN0PD4oKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIExpc3Q8UGFpcjxSb3V0ZUluZm8sIE1lZGlhUm91dGVEZXNjcmlwdG9yPj4gdXBkYXRlZEdyb3VwcyA9Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldyBBcnJheUxpc3Q8PigpOwotICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCByb3V0ZUNvdW50OyBpKyspIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaW5hbCBNZWRpYVJvdXRlRGVzY3JpcHRvciByb3V0ZURlc2NyaXB0b3IgPSByb3V0ZURlc2NyaXB0b3JzLmdldChpKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaW5hbCBTdHJpbmcgaWQgPSByb3V0ZURlc2NyaXB0b3IuZ2V0SWQoKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaW5hbCBpbnQgc291cmNlSW5kZXggPSBwcm92aWRlci5maW5kUm91dGVCeURlc2NyaXB0b3JJZChpZCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHNvdXJjZUluZGV4IDwgMCkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAxLiBBZGQgdGhlIHJvdXRlIHRvIHRoZSBsaXN0LgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdHJpbmcgdW5pcXVlSWQgPSBhc3NpZ25Sb3V0ZVVuaXF1ZUlkKHByb3ZpZGVyLCBpZCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2xlYW4gaXNHcm91cCA9IHJvdXRlRGVzY3JpcHRvci5nZXRHcm91cE1lbWJlcklkcygpICE9IG51bGw7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJvdXRlSW5mbyByb3V0ZSA9IGlzR3JvdXAgPyBuZXcgUm91dGVHcm91cChwcm92aWRlciwgaWQsIHVuaXF1ZUlkKSA6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3IFJvdXRlSW5mbyhwcm92aWRlciwgaWQsIHVuaXF1ZUlkKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvdmlkZXIubVJvdXRlcy5hZGQodGFyZ2V0SW5kZXgrKywgcm91dGUpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtUm91dGVzLmFkZChyb3V0ZSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIDIuIENyZWF0ZSB0aGUgcm91dGUncyBjb250ZW50cy4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGlzR3JvdXApIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFkZGVkR3JvdXBzLmFkZChuZXcgUGFpcjw+KHJvdXRlLCByb3V0ZURlc2NyaXB0b3IpKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJvdXRlLm1heWJlVXBkYXRlRGVzY3JpcHRvcihyb3V0ZURlc2NyaXB0b3IpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gMy4gTm90aWZ5IGNsaWVudHMgYWJvdXQgYWRkaXRpb24uCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoREVCVUcpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMb2cuZChUQUcsICJSb3V0ZSBhZGRlZDogIiArIHJvdXRlKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1DYWxsYmFja0hhbmRsZXIucG9zdChDYWxsYmFja0hhbmRsZXIuTVNHX1JPVVRFX0FEREVELCByb3V0ZSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoc291cmNlSW5kZXggPCB0YXJnZXRJbmRleCkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMb2cudyhUQUcsICJJZ25vcmluZyByb3V0ZSBkZXNjcmlwdG9yIHdpdGggZHVwbGljYXRlIGlkOiAiCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKyByb3V0ZURlc2NyaXB0b3IpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIDEuIFJlb3JkZXIgdGhlIHJvdXRlIHdpdGhpbiB0aGUgbGlzdC4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUm91dGVJbmZvIHJvdXRlID0gcHJvdmlkZXIubVJvdXRlcy5nZXQoc291cmNlSW5kZXgpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDb2xsZWN0aW9ucy5zd2FwKHByb3ZpZGVyLm1Sb3V0ZXMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc291cmNlSW5kZXgsIHRhcmdldEluZGV4KyspOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAyLiBVcGRhdGUgdGhlIHJvdXRlJ3MgY29udGVudHMuCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyb3V0ZSBpbnN0YW5jZW9mIFJvdXRlR3JvdXApIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVwZGF0ZWRHcm91cHMuYWRkKG5ldyBQYWlyPD4ocm91dGUsIHJvdXRlRGVzY3JpcHRvcikpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gMy4gTm90aWZ5IGNsaWVudHMgYWJvdXQgY2hhbmdlcy4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh1cGRhdGVSb3V0ZURlc2NyaXB0b3JBbmROb3RpZnkocm91dGUsIHJvdXRlRGVzY3JpcHRvcikKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIT0gMCkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyb3V0ZSA9PSBtU2VsZWN0ZWRSb3V0ZSkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxlY3RlZFJvdXRlRGVzY3JpcHRvckNoYW5nZWQgPSB0cnVlOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgIC8vIFVwZGF0ZSB0aGUgbmV3IGFuZC9vciBleGlzdGluZyBncm91cHMuCi0gICAgICAgICAgICAgICAgICAgICAgICBmb3IgKFBhaXI8Um91dGVJbmZvLCBNZWRpYVJvdXRlRGVzY3JpcHRvcj4gcGFpciA6IGFkZGVkR3JvdXBzKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgUm91dGVJbmZvIHJvdXRlID0gcGFpci5maXJzdDsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICByb3V0ZS5tYXliZVVwZGF0ZURlc2NyaXB0b3IocGFpci5zZWNvbmQpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChERUJVRykgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMb2cuZChUQUcsICJSb3V0ZSBhZGRlZDogIiArIHJvdXRlKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgbUNhbGxiYWNrSGFuZGxlci5wb3N0KENhbGxiYWNrSGFuZGxlci5NU0dfUk9VVEVfQURERUQsIHJvdXRlKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoUGFpcjxSb3V0ZUluZm8sIE1lZGlhUm91dGVEZXNjcmlwdG9yPiBwYWlyIDogdXBkYXRlZEdyb3VwcykgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJvdXRlSW5mbyByb3V0ZSA9IHBhaXIuZmlyc3Q7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHVwZGF0ZVJvdXRlRGVzY3JpcHRvckFuZE5vdGlmeShyb3V0ZSwgcGFpci5zZWNvbmQpICE9IDApIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJvdXRlID09IG1TZWxlY3RlZFJvdXRlKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxlY3RlZFJvdXRlRGVzY3JpcHRvckNoYW5nZWQgPSB0cnVlOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICAgICAgTG9nLncoVEFHLCAiSWdub3JpbmcgaW52YWxpZCBwcm92aWRlciBkZXNjcmlwdG9yOiAiICsgcHJvdmlkZXJEZXNjcmlwdG9yKTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIC8vIERpc3Bvc2UgYWxsIHJlbWFpbmluZyByb3V0ZXMgdGhhdCBkbyBub3QgaGF2ZSBtYXRjaGluZyBkZXNjcmlwdG9ycy4KLSAgICAgICAgICAgICAgICBmb3IgKGludCBpID0gcHJvdmlkZXIubVJvdXRlcy5zaXplKCkgLSAxOyBpID49IHRhcmdldEluZGV4OyBpLS0pIHsKLSAgICAgICAgICAgICAgICAgICAgLy8gMS4gRGVsZXRlIHRoZSByb3V0ZSdzIGNvbnRlbnRzLgotICAgICAgICAgICAgICAgICAgICBSb3V0ZUluZm8gcm91dGUgPSBwcm92aWRlci5tUm91dGVzLmdldChpKTsKLSAgICAgICAgICAgICAgICAgICAgcm91dGUubWF5YmVVcGRhdGVEZXNjcmlwdG9yKG51bGwpOwotICAgICAgICAgICAgICAgICAgICAvLyAyLiBSZW1vdmUgdGhlIHJvdXRlIGZyb20gdGhlIGxpc3QuCi0gICAgICAgICAgICAgICAgICAgIG1Sb3V0ZXMucmVtb3ZlKHJvdXRlKTsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICAvLyBVcGRhdGUgdGhlIHNlbGVjdGVkIHJvdXRlIGlmIG5lZWRlZC4KLSAgICAgICAgICAgICAgICB1cGRhdGVTZWxlY3RlZFJvdXRlSWZOZWVkZWQoc2VsZWN0ZWRSb3V0ZURlc2NyaXB0b3JDaGFuZ2VkKTsKLQotICAgICAgICAgICAgICAgIC8vIE5vdyBub3RpZnkgY2xpZW50cyBhYm91dCByb3V0ZXMgdGhhdCB3ZXJlIHJlbW92ZWQuCi0gICAgICAgICAgICAgICAgLy8gV2UgZG8gdGhpcyBhZnRlciB1cGRhdGluZyB0aGUgc2VsZWN0ZWQgcm91dGUgdG8gZW5zdXJlCi0gICAgICAgICAgICAgICAgLy8gdGhhdCB0aGUgZnJhbWV3b3JrIG1lZGlhIHJvdXRlciBvYnNlcnZlcyB0aGUgbmV3IHJvdXRlCi0gICAgICAgICAgICAgICAgLy8gc2VsZWN0aW9uIGJlZm9yZSB0aGUgcmVtb3ZhbCBzaW5jZSByZW1vdmluZyB0aGUgY3VycmVudGx5Ci0gICAgICAgICAgICAgICAgLy8gc2VsZWN0ZWQgcm91dGUgbWF5IGhhdmUgc2lkZS1lZmZlY3RzLgotICAgICAgICAgICAgICAgIGZvciAoaW50IGkgPSBwcm92aWRlci5tUm91dGVzLnNpemUoKSAtIDE7IGkgPj0gdGFyZ2V0SW5kZXg7IGktLSkgewotICAgICAgICAgICAgICAgICAgICBSb3V0ZUluZm8gcm91dGUgPSBwcm92aWRlci5tUm91dGVzLnJlbW92ZShpKTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKERFQlVHKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBMb2cuZChUQUcsICJSb3V0ZSByZW1vdmVkOiAiICsgcm91dGUpOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIG1DYWxsYmFja0hhbmRsZXIucG9zdChDYWxsYmFja0hhbmRsZXIuTVNHX1JPVVRFX1JFTU9WRUQsIHJvdXRlKTsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICAvLyBOb3RpZnkgcHJvdmlkZXIgY2hhbmdlZC4KLSAgICAgICAgICAgICAgICBpZiAoREVCVUcpIHsKLSAgICAgICAgICAgICAgICAgICAgTG9nLmQoVEFHLCAiUHJvdmlkZXIgY2hhbmdlZDogIiArIHByb3ZpZGVyKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgbUNhbGxiYWNrSGFuZGxlci5wb3N0KENhbGxiYWNrSGFuZGxlci5NU0dfUFJPVklERVJfQ0hBTkdFRCwgcHJvdmlkZXIpOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgcHJpdmF0ZSBpbnQgdXBkYXRlUm91dGVEZXNjcmlwdG9yQW5kTm90aWZ5KFJvdXRlSW5mbyByb3V0ZSwKLSAgICAgICAgICAgICAgICBNZWRpYVJvdXRlRGVzY3JpcHRvciByb3V0ZURlc2NyaXB0b3IpIHsKLSAgICAgICAgICAgIGludCBjaGFuZ2VzID0gcm91dGUubWF5YmVVcGRhdGVEZXNjcmlwdG9yKHJvdXRlRGVzY3JpcHRvcik7Ci0gICAgICAgICAgICBpZiAoY2hhbmdlcyAhPSAwKSB7Ci0gICAgICAgICAgICAgICAgaWYgKChjaGFuZ2VzICYgUm91dGVJbmZvLkNIQU5HRV9HRU5FUkFMKSAhPSAwKSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChERUJVRykgewotICAgICAgICAgICAgICAgICAgICAgICAgTG9nLmQoVEFHLCAiUm91dGUgY2hhbmdlZDogIiArIHJvdXRlKTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICBtQ2FsbGJhY2tIYW5kbGVyLnBvc3QoCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgQ2FsbGJhY2tIYW5kbGVyLk1TR19ST1VURV9DSEFOR0VELCByb3V0ZSk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGlmICgoY2hhbmdlcyAmIFJvdXRlSW5mby5DSEFOR0VfVk9MVU1FKSAhPSAwKSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChERUJVRykgewotICAgICAgICAgICAgICAgICAgICAgICAgTG9nLmQoVEFHLCAiUm91dGUgdm9sdW1lIGNoYW5nZWQ6ICIgKyByb3V0ZSk7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgbUNhbGxiYWNrSGFuZGxlci5wb3N0KAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIENhbGxiYWNrSGFuZGxlci5NU0dfUk9VVEVfVk9MVU1FX0NIQU5HRUQsIHJvdXRlKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgaWYgKChjaGFuZ2VzICYgUm91dGVJbmZvLkNIQU5HRV9QUkVTRU5UQVRJT05fRElTUExBWSkgIT0gMCkgewotICAgICAgICAgICAgICAgICAgICBpZiAoREVCVUcpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIExvZy5kKFRBRywgIlJvdXRlIHByZXNlbnRhdGlvbiBkaXNwbGF5IGNoYW5nZWQ6ICIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKyByb3V0ZSk7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgbUNhbGxiYWNrSGFuZGxlci5wb3N0KENhbGxiYWNrSGFuZGxlci4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBNU0dfUk9VVEVfUFJFU0VOVEFUSU9OX0RJU1BMQVlfQ0hBTkdFRCwgcm91dGUpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHJldHVybiBjaGFuZ2VzOwotICAgICAgICB9Ci0KLSAgICAgICAgcHJpdmF0ZSBTdHJpbmcgYXNzaWduUm91dGVVbmlxdWVJZChQcm92aWRlckluZm8gcHJvdmlkZXIsIFN0cmluZyByb3V0ZURlc2NyaXB0b3JJZCkgewotICAgICAgICAgICAgLy8gQWx0aG91Z2ggcm91dGUgZGVzY3JpcHRvciBpZHMgYXJlIHVuaXF1ZSB3aXRoaW4gYSBwcm92aWRlciwgaXQncwotICAgICAgICAgICAgLy8gcG9zc2libGUgZm9yIHRoZXJlIHRvIGJlIHR3byBwcm92aWRlcnMgd2l0aCB0aGUgc2FtZSBwYWNrYWdlIG5hbWUuCi0gICAgICAgICAgICAvLyBUaGVyZWZvcmUgd2UgbXVzdCBkZWR1cGUgdGhlIGNvbXBvc2l0ZSBpZC4KLSAgICAgICAgICAgIFN0cmluZyBjb21wb25lbnROYW1lID0gcHJvdmlkZXIuZ2V0Q29tcG9uZW50TmFtZSgpLmZsYXR0ZW5Ub1Nob3J0U3RyaW5nKCk7Ci0gICAgICAgICAgICBTdHJpbmcgdW5pcXVlSWQgPSBjb21wb25lbnROYW1lICsgIjoiICsgcm91dGVEZXNjcmlwdG9ySWQ7Ci0gICAgICAgICAgICBpZiAoZmluZFJvdXRlQnlVbmlxdWVJZCh1bmlxdWVJZCkgPCAwKSB7Ci0gICAgICAgICAgICAgICAgbVVuaXF1ZUlkTWFwLnB1dChuZXcgUGFpcjw+KGNvbXBvbmVudE5hbWUsIHJvdXRlRGVzY3JpcHRvcklkKSwgdW5pcXVlSWQpOwotICAgICAgICAgICAgICAgIHJldHVybiB1bmlxdWVJZDsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIExvZy53KFRBRywgIkVpdGhlciAiICsgcm91dGVEZXNjcmlwdG9ySWQgKyAiIGlzbid0IHVuaXF1ZSBpbiAiICsgY29tcG9uZW50TmFtZQotICAgICAgICAgICAgICAgICAgICArICIgb3Igd2UncmUgdHJ5aW5nIHRvIGFzc2lnbiBhIHVuaXF1ZSBJRCBmb3IgYW4gYWxyZWFkeSBhZGRlZCByb3V0ZSIpOwotICAgICAgICAgICAgZm9yIChpbnQgaSA9IDI7IDsgaSsrKSB7Ci0gICAgICAgICAgICAgICAgU3RyaW5nIG5ld1VuaXF1ZUlkID0gU3RyaW5nLmZvcm1hdChMb2NhbGUuVVMsICIlc18lZCIsIHVuaXF1ZUlkLCBpKTsKLSAgICAgICAgICAgICAgICBpZiAoZmluZFJvdXRlQnlVbmlxdWVJZChuZXdVbmlxdWVJZCkgPCAwKSB7Ci0gICAgICAgICAgICAgICAgICAgIG1VbmlxdWVJZE1hcC5wdXQobmV3IFBhaXI8Pihjb21wb25lbnROYW1lLCByb3V0ZURlc2NyaXB0b3JJZCksIG5ld1VuaXF1ZUlkKTsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5ld1VuaXF1ZUlkOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIHByaXZhdGUgaW50IGZpbmRSb3V0ZUJ5VW5pcXVlSWQoU3RyaW5nIHVuaXF1ZUlkKSB7Ci0gICAgICAgICAgICBmaW5hbCBpbnQgY291bnQgPSBtUm91dGVzLnNpemUoKTsKLSAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgY291bnQ7IGkrKykgewotICAgICAgICAgICAgICAgIGlmIChtUm91dGVzLmdldChpKS5tVW5pcXVlSWQuZXF1YWxzKHVuaXF1ZUlkKSkgewotICAgICAgICAgICAgICAgICAgICByZXR1cm4gaTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICByZXR1cm4gLTE7Ci0gICAgICAgIH0KLQotICAgICAgICBwcml2YXRlIFN0cmluZyBnZXRVbmlxdWVJZChQcm92aWRlckluZm8gcHJvdmlkZXIsIFN0cmluZyByb3V0ZURlc2NyaXB0b3JJZCkgewotICAgICAgICAgICAgU3RyaW5nIGNvbXBvbmVudE5hbWUgPSBwcm92aWRlci5nZXRDb21wb25lbnROYW1lKCkuZmxhdHRlblRvU2hvcnRTdHJpbmcoKTsKLSAgICAgICAgICAgIHJldHVybiBtVW5pcXVlSWRNYXAuZ2V0KG5ldyBQYWlyPD4oY29tcG9uZW50TmFtZSwgcm91dGVEZXNjcmlwdG9ySWQpKTsKLSAgICAgICAgfQotCi0gICAgICAgIHByaXZhdGUgdm9pZCB1cGRhdGVTZWxlY3RlZFJvdXRlSWZOZWVkZWQoYm9vbGVhbiBzZWxlY3RlZFJvdXRlRGVzY3JpcHRvckNoYW5nZWQpIHsKLSAgICAgICAgICAgIC8vIFVwZGF0ZSBkZWZhdWx0IHJvdXRlLgotICAgICAgICAgICAgaWYgKG1EZWZhdWx0Um91dGUgIT0gbnVsbCAmJiAhbURlZmF1bHRSb3V0ZS5pc1NlbGVjdGFibGUoKSkgewotICAgICAgICAgICAgICAgIExvZy5pKFRBRywgIkNsZWFyaW5nIHRoZSBkZWZhdWx0IHJvdXRlIGJlY2F1c2UgaXQgIgotICAgICAgICAgICAgICAgICAgICAgICAgKyAiaXMgbm8gbG9uZ2VyIHNlbGVjdGFibGU6ICIgKyBtRGVmYXVsdFJvdXRlKTsKLSAgICAgICAgICAgICAgICBtRGVmYXVsdFJvdXRlID0gbnVsbDsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmIChtRGVmYXVsdFJvdXRlID09IG51bGwgJiYgIW1Sb3V0ZXMuaXNFbXB0eSgpKSB7Ci0gICAgICAgICAgICAgICAgZm9yIChSb3V0ZUluZm8gcm91dGUgOiBtUm91dGVzKSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChpc1N5c3RlbURlZmF1bHRSb3V0ZShyb3V0ZSkgJiYgcm91dGUuaXNTZWxlY3RhYmxlKCkpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIG1EZWZhdWx0Um91dGUgPSByb3V0ZTsKLSAgICAgICAgICAgICAgICAgICAgICAgIExvZy5pKFRBRywgIkZvdW5kIGRlZmF1bHQgcm91dGU6ICIgKyBtRGVmYXVsdFJvdXRlKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAvLyBVcGRhdGUgYmx1ZXRvb3RoIHJvdXRlLgotICAgICAgICAgICAgaWYgKG1CbHVldG9vdGhSb3V0ZSAhPSBudWxsICYmICFtQmx1ZXRvb3RoUm91dGUuaXNTZWxlY3RhYmxlKCkpIHsKLSAgICAgICAgICAgICAgICBMb2cuaShUQUcsICJDbGVhcmluZyB0aGUgYmx1ZXRvb3RoIHJvdXRlIGJlY2F1c2UgaXQgIgotICAgICAgICAgICAgICAgICAgICAgICAgKyAiaXMgbm8gbG9uZ2VyIHNlbGVjdGFibGU6ICIgKyBtQmx1ZXRvb3RoUm91dGUpOwotICAgICAgICAgICAgICAgIG1CbHVldG9vdGhSb3V0ZSA9IG51bGw7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAobUJsdWV0b290aFJvdXRlID09IG51bGwgJiYgIW1Sb3V0ZXMuaXNFbXB0eSgpKSB7Ci0gICAgICAgICAgICAgICAgZm9yIChSb3V0ZUluZm8gcm91dGUgOiBtUm91dGVzKSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChpc1N5c3RlbUxpdmVBdWRpb09ubHlSb3V0ZShyb3V0ZSkgJiYgcm91dGUuaXNTZWxlY3RhYmxlKCkpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIG1CbHVldG9vdGhSb3V0ZSA9IHJvdXRlOwotICAgICAgICAgICAgICAgICAgICAgICAgTG9nLmkoVEFHLCAiRm91bmQgYmx1ZXRvb3RoIHJvdXRlOiAiICsgbUJsdWV0b290aFJvdXRlKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAvLyBVcGRhdGUgc2VsZWN0ZWQgcm91dGUuCi0gICAgICAgICAgICBpZiAobVNlbGVjdGVkUm91dGUgPT0gbnVsbCB8fCAhbVNlbGVjdGVkUm91dGUuaXNTZWxlY3RhYmxlKCkpIHsKLSAgICAgICAgICAgICAgICBMb2cuaShUQUcsICJVbnNlbGVjdGluZyB0aGUgY3VycmVudCByb3V0ZSBiZWNhdXNlIGl0ICIKLSAgICAgICAgICAgICAgICAgICAgICAgICsgImlzIG5vIGxvbmdlciBzZWxlY3RhYmxlOiAiICsgbVNlbGVjdGVkUm91dGUpOwotICAgICAgICAgICAgICAgIHNldFNlbGVjdGVkUm91dGVJbnRlcm5hbChjaG9vc2VGYWxsYmFja1JvdXRlKCksCi0gICAgICAgICAgICAgICAgICAgICAgICBNZWRpYVJvdXRlci5VTlNFTEVDVF9SRUFTT05fVU5LTk9XTik7Ci0gICAgICAgICAgICB9IGVsc2UgaWYgKHNlbGVjdGVkUm91dGVEZXNjcmlwdG9yQ2hhbmdlZCkgewotICAgICAgICAgICAgICAgIC8vIEluIGNhc2UgdGhlIHNlbGVjdGVkIHJvdXRlIGlzIGEgcm91dGUgZ3JvdXAsIHNlbGVjdC91bnNlbGVjdCByb3V0ZSBjb250cm9sbGVycwotICAgICAgICAgICAgICAgIC8vIGZvciB0aGUgYWRkZWQvcmVtb3ZlZCByb3V0ZSBtZW1iZXJzLgotICAgICAgICAgICAgICAgIGlmIChtU2VsZWN0ZWRSb3V0ZSBpbnN0YW5jZW9mIFJvdXRlR3JvdXApIHsKLSAgICAgICAgICAgICAgICAgICAgTGlzdDxSb3V0ZUluZm8+IHJvdXRlcyA9ICgoUm91dGVHcm91cCkgbVNlbGVjdGVkUm91dGUpLmdldFJvdXRlcygpOwotICAgICAgICAgICAgICAgICAgICAvLyBCdWlsZCBhIHNldCBvZiBkZXNjcmlwdG9yIElEcyBmb3IgdGhlIG5ldyByb3V0ZSBncm91cC4KLSAgICAgICAgICAgICAgICAgICAgU2V0PFN0cmluZz4gaWRTZXQgPSBuZXcgSGFzaFNldDw+KCk7Ci0gICAgICAgICAgICAgICAgICAgIGZvciAoUm91dGVJbmZvIHJvdXRlIDogcm91dGVzKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZFNldC5hZGQocm91dGUubURlc2NyaXB0b3JJZCk7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgLy8gVW5zZWxlY3Qgcm91dGUgY29udHJvbGxlcnMgZm9yIHRoZSByZW1vdmVkIHJvdXRlcy4KLSAgICAgICAgICAgICAgICAgICAgSXRlcmF0b3I8TWFwLkVudHJ5PFN0cmluZywgUm91dGVDb250cm9sbGVyPj4gaXRlciA9Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgbVJvdXRlQ29udHJvbGxlck1hcC5lbnRyeVNldCgpLml0ZXJhdG9yKCk7Ci0gICAgICAgICAgICAgICAgICAgIHdoaWxlIChpdGVyLmhhc05leHQoKSkgewotICAgICAgICAgICAgICAgICAgICAgICAgTWFwLkVudHJ5PFN0cmluZywgUm91dGVDb250cm9sbGVyPiBlbnRyeSA9IGl0ZXIubmV4dCgpOwotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFpZFNldC5jb250YWlucyhlbnRyeS5nZXRLZXkoKSkpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBSb3V0ZUNvbnRyb2xsZXIgY29udHJvbGxlciA9IGVudHJ5LmdldFZhbHVlKCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udHJvbGxlci5vblVuc2VsZWN0KCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udHJvbGxlci5vblJlbGVhc2UoKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBpdGVyLnJlbW92ZSgpOwotICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIC8vIFNlbGVjdCByb3V0ZSBjb250cm9sbGVycyBmb3IgdGhlIGFkZGVkIHJvdXRlcy4KLSAgICAgICAgICAgICAgICAgICAgZm9yIChSb3V0ZUluZm8gcm91dGUgOiByb3V0ZXMpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmICghbVJvdXRlQ29udHJvbGxlck1hcC5jb250YWluc0tleShyb3V0ZS5tRGVzY3JpcHRvcklkKSkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJvdXRlQ29udHJvbGxlciBjb250cm9sbGVyID0gcm91dGUuZ2V0UHJvdmlkZXJJbnN0YW5jZSgpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAub25DcmVhdGVSb3V0ZUNvbnRyb2xsZXIoCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJvdXRlLm1EZXNjcmlwdG9ySWQsIG1TZWxlY3RlZFJvdXRlLm1EZXNjcmlwdG9ySWQpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRyb2xsZXIub25TZWxlY3QoKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBtUm91dGVDb250cm9sbGVyTWFwLnB1dChyb3V0ZS5tRGVzY3JpcHRvcklkLCBjb250cm9sbGVyKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAvLyBVcGRhdGUgdGhlIHBsYXliYWNrIGluZm8gYmVjYXVzZSB0aGUgcHJvcGVydGllcyBvZiB0aGUgcm91dGUgaGF2ZSBjaGFuZ2VkLgotICAgICAgICAgICAgICAgIHVwZGF0ZVBsYXliYWNrSW5mb0Zyb21TZWxlY3RlZFJvdXRlKCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICBSb3V0ZUluZm8gY2hvb3NlRmFsbGJhY2tSb3V0ZSgpIHsKLSAgICAgICAgICAgIC8vIFdoZW4gdGhlIGN1cnJlbnQgcm91dGUgaXMgcmVtb3ZlZCBvciBubyBsb25nZXIgc2VsZWN0YWJsZSwKLSAgICAgICAgICAgIC8vIHdlIHdhbnQgdG8gcmV2ZXJ0IHRvIGEgbGl2ZSBhdWRpbyByb3V0ZSBpZiB0aGVyZSBpcwotICAgICAgICAgICAgLy8gb25lICh1c3VhbGx5IEJsdWV0b290aCBBMkRQKS4gIEZhaWxpbmcgdGhhdCwgdXNlCi0gICAgICAgICAgICAvLyB0aGUgZGVmYXVsdCByb3V0ZS4KLSAgICAgICAgICAgIGZvciAoUm91dGVJbmZvIHJvdXRlIDogbVJvdXRlcykgewotICAgICAgICAgICAgICAgIGlmIChyb3V0ZSAhPSBtRGVmYXVsdFJvdXRlCi0gICAgICAgICAgICAgICAgICAgICAgICAmJiBpc1N5c3RlbUxpdmVBdWRpb09ubHlSb3V0ZShyb3V0ZSkKLSAgICAgICAgICAgICAgICAgICAgICAgICYmIHJvdXRlLmlzU2VsZWN0YWJsZSgpKSB7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiByb3V0ZTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICByZXR1cm4gbURlZmF1bHRSb3V0ZTsKLSAgICAgICAgfQotCi0gICAgICAgIHByaXZhdGUgYm9vbGVhbiBpc1N5c3RlbUxpdmVBdWRpb09ubHlSb3V0ZShSb3V0ZUluZm8gcm91dGUpIHsKLSAgICAgICAgICAgIHJldHVybiByb3V0ZS5nZXRQcm92aWRlckluc3RhbmNlKCkgPT0gbVN5c3RlbVByb3ZpZGVyCi0gICAgICAgICAgICAgICAgICAgICYmIHJvdXRlLnN1cHBvcnRzQ29udHJvbENhdGVnb3J5KE1lZGlhQ29udHJvbEludGVudC5DQVRFR09SWV9MSVZFX0FVRElPKQotICAgICAgICAgICAgICAgICAgICAmJiAhcm91dGUuc3VwcG9ydHNDb250cm9sQ2F0ZWdvcnkoTWVkaWFDb250cm9sSW50ZW50LkNBVEVHT1JZX0xJVkVfVklERU8pOwotICAgICAgICB9Ci0KLSAgICAgICAgcHJpdmF0ZSBib29sZWFuIGlzU3lzdGVtRGVmYXVsdFJvdXRlKFJvdXRlSW5mbyByb3V0ZSkgewotICAgICAgICAgICAgcmV0dXJuIHJvdXRlLmdldFByb3ZpZGVySW5zdGFuY2UoKSA9PSBtU3lzdGVtUHJvdmlkZXIKLSAgICAgICAgICAgICAgICAgICAgJiYgcm91dGUubURlc2NyaXB0b3JJZC5lcXVhbHMoCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgU3lzdGVtTWVkaWFSb3V0ZVByb3ZpZGVyLkRFRkFVTFRfUk9VVEVfSUQpOwotICAgICAgICB9Ci0KLSAgICAgICAgcHJpdmF0ZSB2b2lkIHNldFNlbGVjdGVkUm91dGVJbnRlcm5hbChATm9uTnVsbCBSb3V0ZUluZm8gcm91dGUsIGludCB1bnNlbGVjdFJlYXNvbikgewotICAgICAgICAgICAgLy8gVE9ETzogUmVtb3ZlIHRoZSBmb2xsb3dpbmcgbG9nZ2luZyB3aGVuIG5vIGxvbmdlciBuZWVkZWQuCi0gICAgICAgICAgICBpZiAoc0dsb2JhbCA9PSBudWxsIHx8IChtQmx1ZXRvb3RoUm91dGUgIT0gbnVsbCAmJiByb3V0ZS5pc0RlZmF1bHQoKSkpIHsKLSAgICAgICAgICAgICAgICBmaW5hbCBTdGFja1RyYWNlRWxlbWVudFtdIGNhbGxTdGFjayA9IFRocmVhZC5jdXJyZW50VGhyZWFkKCkuZ2V0U3RhY2tUcmFjZSgpOwotICAgICAgICAgICAgICAgIFN0cmluZ0J1aWxkZXIgc2IgPSBuZXcgU3RyaW5nQnVpbGRlcigpOwotICAgICAgICAgICAgICAgIC8vIGNhbGxTdGFja1szXSBpcyB0aGUgY2FsbGVyIG9mIHRoaXMgbWV0aG9kLgotICAgICAgICAgICAgICAgIGZvciAoaW50IGkgPSAzOyBpIDwgY2FsbFN0YWNrLmxlbmd0aDsgaSsrKSB7Ci0gICAgICAgICAgICAgICAgICAgIFN0YWNrVHJhY2VFbGVtZW50IGNhbGxlciA9IGNhbGxTdGFja1tpXTsKLSAgICAgICAgICAgICAgICAgICAgc2IuYXBwZW5kKGNhbGxlci5nZXRDbGFzc05hbWUoKSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAuYXBwZW5kKCIuIikKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAuYXBwZW5kKGNhbGxlci5nZXRNZXRob2ROYW1lKCkpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgLmFwcGVuZCgiOiIpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgLmFwcGVuZChjYWxsZXIuZ2V0TGluZU51bWJlcigpKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5hcHBlbmQoIiAgIik7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGlmIChzR2xvYmFsID09IG51bGwpIHsKLSAgICAgICAgICAgICAgICAgICAgTG9nLncoVEFHLCAic2V0U2VsZWN0ZWRSb3V0ZUludGVybmFsIGlzIGNhbGxlZCB3aGlsZSBzR2xvYmFsIGlzIG51bGw6IHBrZ05hbWU9IgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICsgbUFwcGxpY2F0aW9uQ29udGV4dC5nZXRQYWNrYWdlTmFtZSgpICsgIiwgY2FsbGVycz0iICsgc2IudG9TdHJpbmcoKSk7Ci0gICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgTG9nLncoVEFHLCAiRGVmYXVsdCByb3V0ZSBpcyBzZWxlY3RlZCB3aGlsZSBhIEJUIHJvdXRlIGlzIGF2YWlsYWJsZTogcGtnTmFtZT0iCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgKyBtQXBwbGljYXRpb25Db250ZXh0LmdldFBhY2thZ2VOYW1lKCkgKyAiLCBjYWxsZXJzPSIgKyBzYi50b1N0cmluZygpKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGlmIChtU2VsZWN0ZWRSb3V0ZSAhPSByb3V0ZSkgewotICAgICAgICAgICAgICAgIGlmIChtU2VsZWN0ZWRSb3V0ZSAhPSBudWxsKSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChERUJVRykgewotICAgICAgICAgICAgICAgICAgICAgICAgTG9nLmQoVEFHLCAiUm91dGUgdW5zZWxlY3RlZDogIiArIG1TZWxlY3RlZFJvdXRlICsgIiByZWFzb246ICIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKyB1bnNlbGVjdFJlYXNvbik7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgbUNhbGxiYWNrSGFuZGxlci5wb3N0KENhbGxiYWNrSGFuZGxlci5NU0dfUk9VVEVfVU5TRUxFQ1RFRCwgbVNlbGVjdGVkUm91dGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zZWxlY3RSZWFzb24pOwotICAgICAgICAgICAgICAgICAgICBpZiAobVNlbGVjdGVkUm91dGVDb250cm9sbGVyICE9IG51bGwpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIG1TZWxlY3RlZFJvdXRlQ29udHJvbGxlci5vblVuc2VsZWN0KHVuc2VsZWN0UmVhc29uKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIG1TZWxlY3RlZFJvdXRlQ29udHJvbGxlci5vblJlbGVhc2UoKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIG1TZWxlY3RlZFJvdXRlQ29udHJvbGxlciA9IG51bGw7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgaWYgKCFtUm91dGVDb250cm9sbGVyTWFwLmlzRW1wdHkoKSkgewotICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChSb3V0ZUNvbnRyb2xsZXIgY29udHJvbGxlciA6IG1Sb3V0ZUNvbnRyb2xsZXJNYXAudmFsdWVzKCkpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250cm9sbGVyLm9uVW5zZWxlY3QodW5zZWxlY3RSZWFzb24pOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRyb2xsZXIub25SZWxlYXNlKCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICBtUm91dGVDb250cm9sbGVyTWFwLmNsZWFyKCk7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICBtU2VsZWN0ZWRSb3V0ZSA9IHJvdXRlOwotICAgICAgICAgICAgICAgIG1TZWxlY3RlZFJvdXRlQ29udHJvbGxlciA9IHJvdXRlLmdldFByb3ZpZGVySW5zdGFuY2UoKS5vbkNyZWF0ZVJvdXRlQ29udHJvbGxlcigKLSAgICAgICAgICAgICAgICAgICAgICAgIHJvdXRlLm1EZXNjcmlwdG9ySWQpOwotICAgICAgICAgICAgICAgIGlmIChtU2VsZWN0ZWRSb3V0ZUNvbnRyb2xsZXIgIT0gbnVsbCkgewotICAgICAgICAgICAgICAgICAgICBtU2VsZWN0ZWRSb3V0ZUNvbnRyb2xsZXIub25TZWxlY3QoKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgaWYgKERFQlVHKSB7Ci0gICAgICAgICAgICAgICAgICAgIExvZy5kKFRBRywgIlJvdXRlIHNlbGVjdGVkOiAiICsgbVNlbGVjdGVkUm91dGUpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBtQ2FsbGJhY2tIYW5kbGVyLnBvc3QoQ2FsbGJhY2tIYW5kbGVyLk1TR19ST1VURV9TRUxFQ1RFRCwgbVNlbGVjdGVkUm91dGUpOwotCi0gICAgICAgICAgICAgICAgaWYgKG1TZWxlY3RlZFJvdXRlIGluc3RhbmNlb2YgUm91dGVHcm91cCkgewotICAgICAgICAgICAgICAgICAgICBMaXN0PFJvdXRlSW5mbz4gcm91dGVzID0gKChSb3V0ZUdyb3VwKSBtU2VsZWN0ZWRSb3V0ZSkuZ2V0Um91dGVzKCk7Ci0gICAgICAgICAgICAgICAgICAgIG1Sb3V0ZUNvbnRyb2xsZXJNYXAuY2xlYXIoKTsKLSAgICAgICAgICAgICAgICAgICAgZm9yIChSb3V0ZUluZm8gciA6IHJvdXRlcykgewotICAgICAgICAgICAgICAgICAgICAgICAgUm91dGVDb250cm9sbGVyIGNvbnRyb2xsZXIgPQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByLmdldFByb3ZpZGVySW5zdGFuY2UoKS5vbkNyZWF0ZVJvdXRlQ29udHJvbGxlcigKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByLm1EZXNjcmlwdG9ySWQsIG1TZWxlY3RlZFJvdXRlLm1EZXNjcmlwdG9ySWQpOwotICAgICAgICAgICAgICAgICAgICAgICAgY29udHJvbGxlci5vblNlbGVjdCgpOwotICAgICAgICAgICAgICAgICAgICAgICAgbVJvdXRlQ29udHJvbGxlck1hcC5wdXQoci5tRGVzY3JpcHRvcklkLCBjb250cm9sbGVyKTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIHVwZGF0ZVBsYXliYWNrSW5mb0Zyb21TZWxlY3RlZFJvdXRlKCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgcHVibGljIHZvaWQgb25TeXN0ZW1Sb3V0ZVNlbGVjdGVkQnlEZXNjcmlwdG9ySWQoU3RyaW5nIGlkKSB7Ci0gICAgICAgICAgICAvLyBTeXN0ZW0gcm91dGUgaXMgc2VsZWN0ZWQsIGRvIG5vdCBzeW5jIHRoZSByb3V0ZSB3ZSBzZWxlY3RlZCBiZWZvcmUuCi0gICAgICAgICAgICBtQ2FsbGJhY2tIYW5kbGVyLnJlbW92ZU1lc3NhZ2VzKENhbGxiYWNrSGFuZGxlci5NU0dfUk9VVEVfU0VMRUNURUQpOwotICAgICAgICAgICAgaW50IHByb3ZpZGVySW5kZXggPSBmaW5kUHJvdmlkZXJJbmZvKG1TeXN0ZW1Qcm92aWRlcik7Ci0gICAgICAgICAgICBpZiAocHJvdmlkZXJJbmRleCA+PSAwKSB7Ci0gICAgICAgICAgICAgICAgUHJvdmlkZXJJbmZvIHByb3ZpZGVyID0gbVByb3ZpZGVycy5nZXQocHJvdmlkZXJJbmRleCk7Ci0gICAgICAgICAgICAgICAgaW50IHJvdXRlSW5kZXggPSBwcm92aWRlci5maW5kUm91dGVCeURlc2NyaXB0b3JJZChpZCk7Ci0gICAgICAgICAgICAgICAgaWYgKHJvdXRlSW5kZXggPj0gMCkgewotICAgICAgICAgICAgICAgICAgICBwcm92aWRlci5tUm91dGVzLmdldChyb3V0ZUluZGV4KS5zZWxlY3QoKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICBwdWJsaWMgdm9pZCBhZGRSZW1vdGVDb250cm9sQ2xpZW50KE9iamVjdCByY2MpIHsKLSAgICAgICAgICAgIGludCBpbmRleCA9IGZpbmRSZW1vdGVDb250cm9sQ2xpZW50UmVjb3JkKHJjYyk7Ci0gICAgICAgICAgICBpZiAoaW5kZXggPCAwKSB7Ci0gICAgICAgICAgICAgICAgUmVtb3RlQ29udHJvbENsaWVudFJlY29yZCByZWNvcmQgPSBuZXcgUmVtb3RlQ29udHJvbENsaWVudFJlY29yZChyY2MpOwotICAgICAgICAgICAgICAgIG1SZW1vdGVDb250cm9sQ2xpZW50cy5hZGQocmVjb3JkKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIHB1YmxpYyB2b2lkIHJlbW92ZVJlbW90ZUNvbnRyb2xDbGllbnQoT2JqZWN0IHJjYykgewotICAgICAgICAgICAgaW50IGluZGV4ID0gZmluZFJlbW90ZUNvbnRyb2xDbGllbnRSZWNvcmQocmNjKTsKLSAgICAgICAgICAgIGlmIChpbmRleCA+PSAwKSB7Ci0gICAgICAgICAgICAgICAgUmVtb3RlQ29udHJvbENsaWVudFJlY29yZCByZWNvcmQgPSBtUmVtb3RlQ29udHJvbENsaWVudHMucmVtb3ZlKGluZGV4KTsKLSAgICAgICAgICAgICAgICByZWNvcmQuZGlzY29ubmVjdCgpOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgcHVibGljIHZvaWQgc2V0TWVkaWFTZXNzaW9uKE9iamVjdCBzZXNzaW9uKSB7Ci0gICAgICAgICAgICBzZXRNZWRpYVNlc3Npb25SZWNvcmQoc2Vzc2lvbiAhPSBudWxsID8gbmV3IE1lZGlhU2Vzc2lvblJlY29yZChzZXNzaW9uKSA6IG51bGwpOwotICAgICAgICB9Ci0KLSAgICAgICAgcHVibGljIHZvaWQgc2V0TWVkaWFTZXNzaW9uQ29tcGF0KGZpbmFsIE1lZGlhU2Vzc2lvbkNvbXBhdCBzZXNzaW9uKSB7Ci0gICAgICAgICAgICBtQ29tcGF0U2Vzc2lvbiA9IHNlc3Npb247Ci0gICAgICAgICAgICBpZiAoYW5kcm9pZC5vcy5CdWlsZC5WRVJTSU9OLlNES19JTlQgPj0gMjEpIHsKLSAgICAgICAgICAgICAgICBzZXRNZWRpYVNlc3Npb25SZWNvcmQoc2Vzc2lvbiAhPSBudWxsID8gbmV3IE1lZGlhU2Vzc2lvblJlY29yZChzZXNzaW9uKSA6IG51bGwpOwotICAgICAgICAgICAgfSBlbHNlIGlmIChhbmRyb2lkLm9zLkJ1aWxkLlZFUlNJT04uU0RLX0lOVCA+PSAxNCkgewotICAgICAgICAgICAgICAgIGlmIChtUmNjTWVkaWFTZXNzaW9uICE9IG51bGwpIHsKLSAgICAgICAgICAgICAgICAgICAgcmVtb3ZlUmVtb3RlQ29udHJvbENsaWVudChtUmNjTWVkaWFTZXNzaW9uLmdldFJlbW90ZUNvbnRyb2xDbGllbnQoKSk7Ci0gICAgICAgICAgICAgICAgICAgIG1SY2NNZWRpYVNlc3Npb24ucmVtb3ZlT25BY3RpdmVDaGFuZ2VMaXN0ZW5lcihtU2Vzc2lvbkFjdGl2ZUxpc3RlbmVyKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgbVJjY01lZGlhU2Vzc2lvbiA9IHNlc3Npb247Ci0gICAgICAgICAgICAgICAgaWYgKHNlc3Npb24gIT0gbnVsbCkgewotICAgICAgICAgICAgICAgICAgICBzZXNzaW9uLmFkZE9uQWN0aXZlQ2hhbmdlTGlzdGVuZXIobVNlc3Npb25BY3RpdmVMaXN0ZW5lcik7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChzZXNzaW9uLmlzQWN0aXZlKCkpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGFkZFJlbW90ZUNvbnRyb2xDbGllbnQoc2Vzc2lvbi5nZXRSZW1vdGVDb250cm9sQ2xpZW50KCkpOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgcHJpdmF0ZSB2b2lkIHNldE1lZGlhU2Vzc2lvblJlY29yZChNZWRpYVNlc3Npb25SZWNvcmQgbWVkaWFTZXNzaW9uUmVjb3JkKSB7Ci0gICAgICAgICAgICBpZiAobU1lZGlhU2Vzc2lvbiAhPSBudWxsKSB7Ci0gICAgICAgICAgICAgICAgbU1lZGlhU2Vzc2lvbi5jbGVhclZvbHVtZUhhbmRsaW5nKCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBtTWVkaWFTZXNzaW9uID0gbWVkaWFTZXNzaW9uUmVjb3JkOwotICAgICAgICAgICAgaWYgKG1lZGlhU2Vzc2lvblJlY29yZCAhPSBudWxsKSB7Ci0gICAgICAgICAgICAgICAgdXBkYXRlUGxheWJhY2tJbmZvRnJvbVNlbGVjdGVkUm91dGUoKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIHB1YmxpYyBNZWRpYVNlc3Npb25Db21wYXQuVG9rZW4gZ2V0TWVkaWFTZXNzaW9uVG9rZW4oKSB7Ci0gICAgICAgICAgICBpZiAobU1lZGlhU2Vzc2lvbiAhPSBudWxsKSB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIG1NZWRpYVNlc3Npb24uZ2V0VG9rZW4oKTsKLSAgICAgICAgICAgIH0gZWxzZSBpZiAobUNvbXBhdFNlc3Npb24gIT0gbnVsbCkgewotICAgICAgICAgICAgICAgIHJldHVybiBtQ29tcGF0U2Vzc2lvbi5nZXRTZXNzaW9uVG9rZW4oKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHJldHVybiBudWxsOwotICAgICAgICB9Ci0KLSAgICAgICAgcHJpdmF0ZSBpbnQgZmluZFJlbW90ZUNvbnRyb2xDbGllbnRSZWNvcmQoT2JqZWN0IHJjYykgewotICAgICAgICAgICAgZmluYWwgaW50IGNvdW50ID0gbVJlbW90ZUNvbnRyb2xDbGllbnRzLnNpemUoKTsKLSAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgY291bnQ7IGkrKykgewotICAgICAgICAgICAgICAgIFJlbW90ZUNvbnRyb2xDbGllbnRSZWNvcmQgcmVjb3JkID0gbVJlbW90ZUNvbnRyb2xDbGllbnRzLmdldChpKTsKLSAgICAgICAgICAgICAgICBpZiAocmVjb3JkLmdldFJlbW90ZUNvbnRyb2xDbGllbnQoKSA9PSByY2MpIHsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICAgICAgcmV0dXJuIC0xOwotICAgICAgICB9Ci0KLSAgICAgICAgcHJpdmF0ZSB2b2lkIHVwZGF0ZVBsYXliYWNrSW5mb0Zyb21TZWxlY3RlZFJvdXRlKCkgewotICAgICAgICAgICAgaWYgKG1TZWxlY3RlZFJvdXRlICE9IG51bGwpIHsKLSAgICAgICAgICAgICAgICBtUGxheWJhY2tJbmZvLnZvbHVtZSA9IG1TZWxlY3RlZFJvdXRlLmdldFZvbHVtZSgpOwotICAgICAgICAgICAgICAgIG1QbGF5YmFja0luZm8udm9sdW1lTWF4ID0gbVNlbGVjdGVkUm91dGUuZ2V0Vm9sdW1lTWF4KCk7Ci0gICAgICAgICAgICAgICAgbVBsYXliYWNrSW5mby52b2x1bWVIYW5kbGluZyA9IG1TZWxlY3RlZFJvdXRlLmdldFZvbHVtZUhhbmRsaW5nKCk7Ci0gICAgICAgICAgICAgICAgbVBsYXliYWNrSW5mby5wbGF5YmFja1N0cmVhbSA9IG1TZWxlY3RlZFJvdXRlLmdldFBsYXliYWNrU3RyZWFtKCk7Ci0gICAgICAgICAgICAgICAgbVBsYXliYWNrSW5mby5wbGF5YmFja1R5cGUgPSBtU2VsZWN0ZWRSb3V0ZS5nZXRQbGF5YmFja1R5cGUoKTsKLQotICAgICAgICAgICAgICAgIGZpbmFsIGludCBjb3VudCA9IG1SZW1vdGVDb250cm9sQ2xpZW50cy5zaXplKCk7Ci0gICAgICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBjb3VudDsgaSsrKSB7Ci0gICAgICAgICAgICAgICAgICAgIFJlbW90ZUNvbnRyb2xDbGllbnRSZWNvcmQgcmVjb3JkID0gbVJlbW90ZUNvbnRyb2xDbGllbnRzLmdldChpKTsKLSAgICAgICAgICAgICAgICAgICAgcmVjb3JkLnVwZGF0ZVBsYXliYWNrSW5mbygpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBpZiAobU1lZGlhU2Vzc2lvbiAhPSBudWxsKSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChtU2VsZWN0ZWRSb3V0ZSA9PSBnZXREZWZhdWx0Um91dGUoKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHx8IG1TZWxlY3RlZFJvdXRlID09IGdldEJsdWV0b290aFJvdXRlKCkpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIC8vIExvY2FsIHJvdXRlCi0gICAgICAgICAgICAgICAgICAgICAgICBtTWVkaWFTZXNzaW9uLmNsZWFyVm9sdW1lSGFuZGxpbmcoKTsKLSAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIEBWb2x1bWVQcm92aWRlckNvbXBhdC5Db250cm9sVHlwZSBpbnQgY29udHJvbFR5cGUgPQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBWb2x1bWVQcm92aWRlckNvbXBhdC5WT0xVTUVfQ09OVFJPTF9GSVhFRDsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtUGxheWJhY2tJbmZvLnZvbHVtZUhhbmRsaW5nCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID09IE1lZGlhUm91dGVyLlJvdXRlSW5mby5QTEFZQkFDS19WT0xVTUVfVkFSSUFCTEUpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250cm9sVHlwZSA9IFZvbHVtZVByb3ZpZGVyQ29tcGF0LlZPTFVNRV9DT05UUk9MX0FCU09MVVRFOwotICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgbU1lZGlhU2Vzc2lvbi5jb25maWd1cmVWb2x1bWUoY29udHJvbFR5cGUsIG1QbGF5YmFja0luZm8udm9sdW1lTWF4LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtUGxheWJhY2tJbmZvLnZvbHVtZSk7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIGlmIChtTWVkaWFTZXNzaW9uICE9IG51bGwpIHsKLSAgICAgICAgICAgICAgICAgICAgbU1lZGlhU2Vzc2lvbi5jbGVhclZvbHVtZUhhbmRsaW5nKCk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgcHJpdmF0ZSBmaW5hbCBjbGFzcyBQcm92aWRlckNhbGxiYWNrIGV4dGVuZHMgTWVkaWFSb3V0ZVByb3ZpZGVyLkNhbGxiYWNrIHsKLSAgICAgICAgICAgIFByb3ZpZGVyQ2FsbGJhY2soKSB7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIEBPdmVycmlkZQotICAgICAgICAgICAgcHVibGljIHZvaWQgb25EZXNjcmlwdG9yQ2hhbmdlZChNZWRpYVJvdXRlUHJvdmlkZXIgcHJvdmlkZXIsCi0gICAgICAgICAgICAgICAgICAgIE1lZGlhUm91dGVQcm92aWRlckRlc2NyaXB0b3IgZGVzY3JpcHRvcikgewotICAgICAgICAgICAgICAgIHVwZGF0ZVByb3ZpZGVyRGVzY3JpcHRvcihwcm92aWRlciwgZGVzY3JpcHRvcik7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICBwcml2YXRlIGZpbmFsIGNsYXNzIE1lZGlhU2Vzc2lvblJlY29yZCB7Ci0gICAgICAgICAgICBwcml2YXRlIGZpbmFsIE1lZGlhU2Vzc2lvbkNvbXBhdCBtTXNDb21wYXQ7Ci0KLSAgICAgICAgICAgIHByaXZhdGUgQFZvbHVtZVByb3ZpZGVyQ29tcGF0LkNvbnRyb2xUeXBlIGludCBtQ29udHJvbFR5cGU7Ci0gICAgICAgICAgICBwcml2YXRlIGludCBtTWF4Vm9sdW1lOwotICAgICAgICAgICAgcHJpdmF0ZSBWb2x1bWVQcm92aWRlckNvbXBhdCBtVnBDb21wYXQ7Ci0KLSAgICAgICAgICAgIHB1YmxpYyBNZWRpYVNlc3Npb25SZWNvcmQoT2JqZWN0IG1lZGlhU2Vzc2lvbikgewotICAgICAgICAgICAgICAgIG1Nc0NvbXBhdCA9IE1lZGlhU2Vzc2lvbkNvbXBhdC5mcm9tTWVkaWFTZXNzaW9uKG1BcHBsaWNhdGlvbkNvbnRleHQsIG1lZGlhU2Vzc2lvbik7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIHB1YmxpYyBNZWRpYVNlc3Npb25SZWNvcmQoTWVkaWFTZXNzaW9uQ29tcGF0IG1lZGlhU2Vzc2lvbkNvbXBhdCkgewotICAgICAgICAgICAgICAgIG1Nc0NvbXBhdCA9IG1lZGlhU2Vzc2lvbkNvbXBhdDsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgcHVibGljIHZvaWQgY29uZmlndXJlVm9sdW1lKEBWb2x1bWVQcm92aWRlckNvbXBhdC5Db250cm9sVHlwZSBpbnQgY29udHJvbFR5cGUsCi0gICAgICAgICAgICAgICAgICAgIGludCBtYXgsIGludCBjdXJyZW50KSB7Ci0gICAgICAgICAgICAgICAgaWYgKG1WcENvbXBhdCAhPSBudWxsICYmIGNvbnRyb2xUeXBlID09IG1Db250cm9sVHlwZSAmJiBtYXggPT0gbU1heFZvbHVtZSkgewotICAgICAgICAgICAgICAgICAgICAvLyBJZiB3ZSBoYXZlbid0IGNoYW5nZWQgY29udHJvbCB0eXBlIG9yIG1heCBqdXN0IHNldCB0aGUKLSAgICAgICAgICAgICAgICAgICAgLy8gbmV3IGN1cnJlbnQgdm9sdW1lCi0gICAgICAgICAgICAgICAgICAgIG1WcENvbXBhdC5zZXRDdXJyZW50Vm9sdW1lKGN1cnJlbnQpOwotICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgIC8vIE90aGVyd2lzZSBjcmVhdGUgYSBuZXcgcHJvdmlkZXIgYW5kIHVwZGF0ZQotICAgICAgICAgICAgICAgICAgICBtVnBDb21wYXQgPSBuZXcgVm9sdW1lUHJvdmlkZXJDb21wYXQoY29udHJvbFR5cGUsIG1heCwgY3VycmVudCkgewotICAgICAgICAgICAgICAgICAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgICAgICAgICAgICAgICAgICBwdWJsaWMgdm9pZCBvblNldFZvbHVtZVRvKGZpbmFsIGludCB2b2x1bWUpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBtQ2FsbGJhY2tIYW5kbGVyLnBvc3QobmV3IFJ1bm5hYmxlKCkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHVibGljIHZvaWQgcnVuKCkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1TZWxlY3RlZFJvdXRlICE9IG51bGwpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtU2VsZWN0ZWRSb3V0ZS5yZXF1ZXN0U2V0Vm9sdW1lKHZvbHVtZSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgICAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgICAgICAgICAgICAgICAgICBwdWJsaWMgdm9pZCBvbkFkanVzdFZvbHVtZShmaW5hbCBpbnQgZGlyZWN0aW9uKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgbUNhbGxiYWNrSGFuZGxlci5wb3N0KG5ldyBSdW5uYWJsZSgpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHB1YmxpYyB2b2lkIHJ1bigpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtU2VsZWN0ZWRSb3V0ZSAhPSBudWxsKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbVNlbGVjdGVkUm91dGUucmVxdWVzdFVwZGF0ZVZvbHVtZShkaXJlY3Rpb24pOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIH07Ci0gICAgICAgICAgICAgICAgICAgIG1Nc0NvbXBhdC5zZXRQbGF5YmFja1RvUmVtb3RlKG1WcENvbXBhdCk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBwdWJsaWMgdm9pZCBjbGVhclZvbHVtZUhhbmRsaW5nKCkgewotICAgICAgICAgICAgICAgIG1Nc0NvbXBhdC5zZXRQbGF5YmFja1RvTG9jYWwobVBsYXliYWNrSW5mby5wbGF5YmFja1N0cmVhbSk7Ci0gICAgICAgICAgICAgICAgbVZwQ29tcGF0ID0gbnVsbDsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgcHVibGljIE1lZGlhU2Vzc2lvbkNvbXBhdC5Ub2tlbiBnZXRUb2tlbigpIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gbU1zQ29tcGF0LmdldFNlc3Npb25Ub2tlbigpOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgcHJpdmF0ZSBmaW5hbCBjbGFzcyBSZW1vdGVDb250cm9sQ2xpZW50UmVjb3JkCi0gICAgICAgICAgICAgICAgaW1wbGVtZW50cyBSZW1vdGVDb250cm9sQ2xpZW50Q29tcGF0LlZvbHVtZUNhbGxiYWNrIHsKLSAgICAgICAgICAgIHByaXZhdGUgZmluYWwgUmVtb3RlQ29udHJvbENsaWVudENvbXBhdCBtUmNjQ29tcGF0OwotICAgICAgICAgICAgcHJpdmF0ZSBib29sZWFuIG1EaXNjb25uZWN0ZWQ7Ci0KLSAgICAgICAgICAgIHB1YmxpYyBSZW1vdGVDb250cm9sQ2xpZW50UmVjb3JkKE9iamVjdCByY2MpIHsKLSAgICAgICAgICAgICAgICBtUmNjQ29tcGF0ID0gUmVtb3RlQ29udHJvbENsaWVudENvbXBhdC5vYnRhaW4obUFwcGxpY2F0aW9uQ29udGV4dCwgcmNjKTsKLSAgICAgICAgICAgICAgICBtUmNjQ29tcGF0LnNldFZvbHVtZUNhbGxiYWNrKHRoaXMpOwotICAgICAgICAgICAgICAgIHVwZGF0ZVBsYXliYWNrSW5mbygpOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBwdWJsaWMgT2JqZWN0IGdldFJlbW90ZUNvbnRyb2xDbGllbnQoKSB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIG1SY2NDb21wYXQuZ2V0UmVtb3RlQ29udHJvbENsaWVudCgpOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBwdWJsaWMgdm9pZCBkaXNjb25uZWN0KCkgewotICAgICAgICAgICAgICAgIG1EaXNjb25uZWN0ZWQgPSB0cnVlOwotICAgICAgICAgICAgICAgIG1SY2NDb21wYXQuc2V0Vm9sdW1lQ2FsbGJhY2sobnVsbCk7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIHB1YmxpYyB2b2lkIHVwZGF0ZVBsYXliYWNrSW5mbygpIHsKLSAgICAgICAgICAgICAgICBtUmNjQ29tcGF0LnNldFBsYXliYWNrSW5mbyhtUGxheWJhY2tJbmZvKTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgICAgICBwdWJsaWMgdm9pZCBvblZvbHVtZVNldFJlcXVlc3QoaW50IHZvbHVtZSkgewotICAgICAgICAgICAgICAgIGlmICghbURpc2Nvbm5lY3RlZCAmJiBtU2VsZWN0ZWRSb3V0ZSAhPSBudWxsKSB7Ci0gICAgICAgICAgICAgICAgICAgIG1TZWxlY3RlZFJvdXRlLnJlcXVlc3RTZXRWb2x1bWUodm9sdW1lKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIEBPdmVycmlkZQotICAgICAgICAgICAgcHVibGljIHZvaWQgb25Wb2x1bWVVcGRhdGVSZXF1ZXN0KGludCBkaXJlY3Rpb24pIHsKLSAgICAgICAgICAgICAgICBpZiAoIW1EaXNjb25uZWN0ZWQgJiYgbVNlbGVjdGVkUm91dGUgIT0gbnVsbCkgewotICAgICAgICAgICAgICAgICAgICBtU2VsZWN0ZWRSb3V0ZS5yZXF1ZXN0VXBkYXRlVm9sdW1lKGRpcmVjdGlvbik7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgcHJpdmF0ZSBmaW5hbCBjbGFzcyBDYWxsYmFja0hhbmRsZXIgZXh0ZW5kcyBIYW5kbGVyIHsKLSAgICAgICAgICAgIHByaXZhdGUgZmluYWwgQXJyYXlMaXN0PENhbGxiYWNrUmVjb3JkPiBtVGVtcENhbGxiYWNrUmVjb3JkcyA9Ci0gICAgICAgICAgICAgICAgICAgIG5ldyBBcnJheUxpc3Q8Q2FsbGJhY2tSZWNvcmQ+KCk7Ci0KLSAgICAgICAgICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGludCBNU0dfVFlQRV9NQVNLID0gMHhmZjAwOwotICAgICAgICAgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IE1TR19UWVBFX1JPVVRFID0gMHgwMTAwOwotICAgICAgICAgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IE1TR19UWVBFX1BST1ZJREVSID0gMHgwMjAwOwotCi0gICAgICAgICAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBNU0dfUk9VVEVfQURERUQgPSBNU0dfVFlQRV9ST1VURSB8IDE7Ci0gICAgICAgICAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBNU0dfUk9VVEVfUkVNT1ZFRCA9IE1TR19UWVBFX1JPVVRFIHwgMjsKLSAgICAgICAgICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IE1TR19ST1VURV9DSEFOR0VEID0gTVNHX1RZUEVfUk9VVEUgfCAzOwotICAgICAgICAgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgTVNHX1JPVVRFX1ZPTFVNRV9DSEFOR0VEID0gTVNHX1RZUEVfUk9VVEUgfCA0OwotICAgICAgICAgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgTVNHX1JPVVRFX1BSRVNFTlRBVElPTl9ESVNQTEFZX0NIQU5HRUQgPSBNU0dfVFlQRV9ST1VURSB8IDU7Ci0gICAgICAgICAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBNU0dfUk9VVEVfU0VMRUNURUQgPSBNU0dfVFlQRV9ST1VURSB8IDY7Ci0gICAgICAgICAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBNU0dfUk9VVEVfVU5TRUxFQ1RFRCA9IE1TR19UWVBFX1JPVVRFIHwgNzsKLQotICAgICAgICAgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgTVNHX1BST1ZJREVSX0FEREVEID0gTVNHX1RZUEVfUFJPVklERVIgfCAxOwotICAgICAgICAgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgTVNHX1BST1ZJREVSX1JFTU9WRUQgPSBNU0dfVFlQRV9QUk9WSURFUiB8IDI7Ci0gICAgICAgICAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBNU0dfUFJPVklERVJfQ0hBTkdFRCA9IE1TR19UWVBFX1BST1ZJREVSIHwgMzsKLQotICAgICAgICAgICAgQ2FsbGJhY2tIYW5kbGVyKCkgewotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBwdWJsaWMgdm9pZCBwb3N0KGludCBtc2csIE9iamVjdCBvYmopIHsKLSAgICAgICAgICAgICAgICBvYnRhaW5NZXNzYWdlKG1zZywgb2JqKS5zZW5kVG9UYXJnZXQoKTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgcHVibGljIHZvaWQgcG9zdChpbnQgbXNnLCBPYmplY3Qgb2JqLCBpbnQgYXJnKSB7Ci0gICAgICAgICAgICAgICAgTWVzc2FnZSBtZXNzYWdlID0gb2J0YWluTWVzc2FnZShtc2csIG9iaik7Ci0gICAgICAgICAgICAgICAgbWVzc2FnZS5hcmcxID0gYXJnOwotICAgICAgICAgICAgICAgIG1lc3NhZ2Uuc2VuZFRvVGFyZ2V0KCk7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIEBPdmVycmlkZQotICAgICAgICAgICAgcHVibGljIHZvaWQgaGFuZGxlTWVzc2FnZShNZXNzYWdlIG1zZykgewotICAgICAgICAgICAgICAgIGZpbmFsIGludCB3aGF0ID0gbXNnLndoYXQ7Ci0gICAgICAgICAgICAgICAgZmluYWwgT2JqZWN0IG9iaiA9IG1zZy5vYmo7Ci0gICAgICAgICAgICAgICAgZmluYWwgaW50IGFyZyA9IG1zZy5hcmcxOwotCi0gICAgICAgICAgICAgICAgaWYgKHdoYXQgPT0gTVNHX1JPVVRFX0NIQU5HRUQKLSAgICAgICAgICAgICAgICAgICAgICAgICYmIGdldFNlbGVjdGVkUm91dGUoKS5nZXRJZCgpLmVxdWFscygoKFJvdXRlSW5mbykgb2JqKS5nZXRJZCgpKSkgewotICAgICAgICAgICAgICAgICAgICB1cGRhdGVTZWxlY3RlZFJvdXRlSWZOZWVkZWQodHJ1ZSk7Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgLy8gU3luY2hyb25pemUgc3RhdGUgd2l0aCB0aGUgc3lzdGVtIG1lZGlhIHJvdXRlci4KLSAgICAgICAgICAgICAgICBzeW5jV2l0aFN5c3RlbVByb3ZpZGVyKHdoYXQsIG9iaik7Ci0KLSAgICAgICAgICAgICAgICAvLyBJbnZva2UgYWxsIHJlZ2lzdGVyZWQgY2FsbGJhY2tzLgotICAgICAgICAgICAgICAgIC8vIEJ1aWxkIGEgbGlzdCBvZiBjYWxsYmFja3MgYmVmb3JlIGludm9raW5nIHRoZW0gaW4gY2FzZSBjYWxsYmFja3MKLSAgICAgICAgICAgICAgICAvLyBhcmUgYWRkZWQgb3IgcmVtb3ZlZCBkdXJpbmcgZGlzcGF0Y2guCi0gICAgICAgICAgICAgICAgdHJ5IHsKLSAgICAgICAgICAgICAgICAgICAgZm9yIChpbnQgaSA9IG1Sb3V0ZXJzLnNpemUoKTsgLS1pID49IDA7ICkgewotICAgICAgICAgICAgICAgICAgICAgICAgTWVkaWFSb3V0ZXIgcm91dGVyID0gbVJvdXRlcnMuZ2V0KGkpLmdldCgpOwotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJvdXRlciA9PSBudWxsKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgbVJvdXRlcnMucmVtb3ZlKGkpOwotICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBtVGVtcENhbGxiYWNrUmVjb3Jkcy5hZGRBbGwocm91dGVyLm1DYWxsYmFja1JlY29yZHMpOwotICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICAgICAgZmluYWwgaW50IGNhbGxiYWNrQ291bnQgPSBtVGVtcENhbGxiYWNrUmVjb3Jkcy5zaXplKCk7Ci0gICAgICAgICAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgY2FsbGJhY2tDb3VudDsgaSsrKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpbnZva2VDYWxsYmFjayhtVGVtcENhbGxiYWNrUmVjb3Jkcy5nZXQoaSksIHdoYXQsIG9iaiwgYXJnKTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0gZmluYWxseSB7Ci0gICAgICAgICAgICAgICAgICAgIG1UZW1wQ2FsbGJhY2tSZWNvcmRzLmNsZWFyKCk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBwcml2YXRlIHZvaWQgc3luY1dpdGhTeXN0ZW1Qcm92aWRlcihpbnQgd2hhdCwgT2JqZWN0IG9iaikgewotICAgICAgICAgICAgICAgIHN3aXRjaCAod2hhdCkgewotICAgICAgICAgICAgICAgICAgICBjYXNlIE1TR19ST1VURV9BRERFRDoKLSAgICAgICAgICAgICAgICAgICAgICAgIG1TeXN0ZW1Qcm92aWRlci5vblN5bmNSb3V0ZUFkZGVkKChSb3V0ZUluZm8pIG9iaik7Ci0gICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgY2FzZSBNU0dfUk9VVEVfUkVNT1ZFRDoKLSAgICAgICAgICAgICAgICAgICAgICAgIG1TeXN0ZW1Qcm92aWRlci5vblN5bmNSb3V0ZVJlbW92ZWQoKFJvdXRlSW5mbykgb2JqKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICBjYXNlIE1TR19ST1VURV9DSEFOR0VEOgotICAgICAgICAgICAgICAgICAgICAgICAgbVN5c3RlbVByb3ZpZGVyLm9uU3luY1JvdXRlQ2hhbmdlZCgoUm91dGVJbmZvKSBvYmopOwotICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgIGNhc2UgTVNHX1JPVVRFX1NFTEVDVEVEOgotICAgICAgICAgICAgICAgICAgICAgICAgbVN5c3RlbVByb3ZpZGVyLm9uU3luY1JvdXRlU2VsZWN0ZWQoKFJvdXRlSW5mbykgb2JqKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgcHJpdmF0ZSB2b2lkIGludm9rZUNhbGxiYWNrKENhbGxiYWNrUmVjb3JkIHJlY29yZCwgaW50IHdoYXQsIE9iamVjdCBvYmosIGludCBhcmcpIHsKLSAgICAgICAgICAgICAgICBmaW5hbCBNZWRpYVJvdXRlciByb3V0ZXIgPSByZWNvcmQubVJvdXRlcjsKLSAgICAgICAgICAgICAgICBmaW5hbCBNZWRpYVJvdXRlci5DYWxsYmFjayBjYWxsYmFjayA9IHJlY29yZC5tQ2FsbGJhY2s7Ci0gICAgICAgICAgICAgICAgc3dpdGNoICh3aGF0ICYgTVNHX1RZUEVfTUFTSykgewotICAgICAgICAgICAgICAgICAgICBjYXNlIE1TR19UWVBFX1JPVVRFOiB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBmaW5hbCBSb3V0ZUluZm8gcm91dGUgPSAoUm91dGVJbmZvKW9iajsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmICghcmVjb3JkLmZpbHRlclJvdXRlRXZlbnQocm91dGUpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICBzd2l0Y2ggKHdoYXQpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIE1TR19ST1VURV9BRERFRDoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2sub25Sb3V0ZUFkZGVkKHJvdXRlciwgcm91dGUpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIE1TR19ST1VURV9SRU1PVkVEOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYWxsYmFjay5vblJvdXRlUmVtb3ZlZChyb3V0ZXIsIHJvdXRlKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBNU0dfUk9VVEVfQ0hBTkdFRDoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2sub25Sb3V0ZUNoYW5nZWQocm91dGVyLCByb3V0ZSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgTVNHX1JPVVRFX1ZPTFVNRV9DSEFOR0VEOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYWxsYmFjay5vblJvdXRlVm9sdW1lQ2hhbmdlZChyb3V0ZXIsIHJvdXRlKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBNU0dfUk9VVEVfUFJFU0VOVEFUSU9OX0RJU1BMQVlfQ0hBTkdFRDoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2sub25Sb3V0ZVByZXNlbnRhdGlvbkRpc3BsYXlDaGFuZ2VkKHJvdXRlciwgcm91dGUpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIE1TR19ST1VURV9TRUxFQ1RFRDoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2sub25Sb3V0ZVNlbGVjdGVkKHJvdXRlciwgcm91dGUpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIE1TR19ST1VURV9VTlNFTEVDVEVEOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYWxsYmFjay5vblJvdXRlVW5zZWxlY3RlZChyb3V0ZXIsIHJvdXRlLCBhcmcpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIGNhc2UgTVNHX1RZUEVfUFJPVklERVI6IHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGZpbmFsIFByb3ZpZGVySW5mbyBwcm92aWRlciA9IChQcm92aWRlckluZm8pb2JqOwotICAgICAgICAgICAgICAgICAgICAgICAgc3dpdGNoICh3aGF0KSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBNU0dfUFJPVklERVJfQURERUQ6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrLm9uUHJvdmlkZXJBZGRlZChyb3V0ZXIsIHByb3ZpZGVyKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBNU0dfUFJPVklERVJfUkVNT1ZFRDoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2sub25Qcm92aWRlclJlbW92ZWQocm91dGVyLCBwcm92aWRlcik7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgTVNHX1BST1ZJREVSX0NIQU5HRUQ6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrLm9uUHJvdmlkZXJDaGFuZ2VkKHJvdXRlciwgcHJvdmlkZXIpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLX0KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL01lZGlhQ29tcG9uZW50cy9zcmMvY29tL2FuZHJvaWQvc3VwcG9ydC9tZWRpYXJvdXRlci9tZWRpYS9NZWRpYVNlc3Npb25TdGF0dXMuamF2YSBiL3BhY2thZ2VzL01lZGlhQ29tcG9uZW50cy9zcmMvY29tL2FuZHJvaWQvc3VwcG9ydC9tZWRpYXJvdXRlci9tZWRpYS9NZWRpYVNlc3Npb25TdGF0dXMuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzIwNjU5Ni4uMDAwMDAwMAotLS0gYS9wYWNrYWdlcy9NZWRpYUNvbXBvbmVudHMvc3JjL2NvbS9hbmRyb2lkL3N1cHBvcnQvbWVkaWFyb3V0ZXIvbWVkaWEvTWVkaWFTZXNzaW9uU3RhdHVzLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyNDQgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAyMDE4IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKLSAqCi0gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKLSAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KLSAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotICoKLSAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0gKgotICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQotICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKLSAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgotICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAotICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCi0gKi8KLQotcGFja2FnZSBjb20uYW5kcm9pZC5zdXBwb3J0Lm1lZGlhcm91dGVyLm1lZGlhOwotCi1pbXBvcnQgYW5kcm9pZC5hcHAuUGVuZGluZ0ludGVudDsKLWltcG9ydCBhbmRyb2lkLm9zLkJ1bmRsZTsKLWltcG9ydCBhbmRyb2lkLm9zLlN5c3RlbUNsb2NrOwotaW1wb3J0IGFuZHJvaWQuc3VwcG9ydC52NC51dGlsLlRpbWVVdGlsczsKLQotLyoqCi0gKiBEZXNjcmliZXMgdGhlIHBsYXliYWNrIHN0YXR1cyBvZiBhIG1lZGlhIHNlc3Npb24uCi0gKiA8cD4KLSAqIFRoaXMgY2xhc3MgaXMgcGFydCBvZiB0aGUgcmVtb3RlIHBsYXliYWNrIHByb3RvY29sIGRlc2NyaWJlZCBieSB0aGUKLSAqIHtAbGluayBNZWRpYUNvbnRyb2xJbnRlbnQgTWVkaWFDb250cm9sSW50ZW50fSBjbGFzcy4KLSAqIDwvcD48cD4KLSAqIFdoZW4gYSBtZWRpYSBzZXNzaW9uIGlzIGNyZWF0ZWQsIGl0IGlzIGluaXRpYWxseSBpbiB0aGUKLSAqIHtAbGluayAjU0VTU0lPTl9TVEFURV9BQ1RJVkUgYWN0aXZlfSBzdGF0ZS4gIFdoZW4gdGhlIG1lZGlhIHNlc3Npb24gZW5kcwotICogbm9ybWFsbHksIGl0IHRyYW5zaXRpb25zIHRvIHRoZSB7QGxpbmsgI1NFU1NJT05fU1RBVEVfRU5ERUQgZW5kZWR9IHN0YXRlLgotICogSWYgdGhlIG1lZGlhIHNlc3Npb24gaXMgaW52YWxpZGF0ZWQgZHVlIHRvIGFub3RoZXIgc2Vzc2lvbiBmb3JjaWJseSB0YWtpbmcKLSAqIGNvbnRyb2wgb2YgdGhlIHJvdXRlLCB0aGVuIGl0IHRyYW5zaXRpb25zIHRvIHRoZQotICoge0BsaW5rICNTRVNTSU9OX1NUQVRFX0lOVkFMSURBVEVEIGludmFsaWRhdGVkfSBzdGF0ZS4KLSAqIFJlZmVyIHRvIHRoZSBkb2N1bWVudGF0aW9uIG9mIGVhY2ggc3RhdGUgZm9yIGFuIGV4cGxhbmF0aW9uIG9mIGl0cyBtZWFuaW5nLgotICogPC9wPjxwPgotICogVG8gbW9uaXRvciBzZXNzaW9uIHN0YXR1cywgdGhlIGFwcGxpY2F0aW9uIHNob3VsZCBzdXBwbHkgYSB7QGxpbmsgUGVuZGluZ0ludGVudH0gdG8gdXNlIGFzIHRoZQotICoge0BsaW5rIE1lZGlhQ29udHJvbEludGVudCNFWFRSQV9TRVNTSU9OX1NUQVRVU19VUERBVEVfUkVDRUlWRVIgc2Vzc2lvbiBzdGF0dXMgdXBkYXRlIHJlY2VpdmVyfQotICogZm9yIGEgZ2l2ZW4ge0BsaW5rIE1lZGlhQ29udHJvbEludGVudCNBQ1RJT05fU1RBUlRfU0VTU0lPTiBzZXNzaW9uIHN0YXJ0IHJlcXVlc3R9LgotICogPC9wPjxwPgotICogVGhpcyBvYmplY3QgaXMgaW1tdXRhYmxlIG9uY2UgY3JlYXRlZCB1c2luZyBhIHtAbGluayBCdWlsZGVyfSBpbnN0YW5jZS4KLSAqIDwvcD4KLSAqLwotcHVibGljIGZpbmFsIGNsYXNzIE1lZGlhU2Vzc2lvblN0YXR1cyB7Ci0gICAgc3RhdGljIGZpbmFsIFN0cmluZyBLRVlfVElNRVNUQU1QID0gInRpbWVzdGFtcCI7Ci0gICAgc3RhdGljIGZpbmFsIFN0cmluZyBLRVlfU0VTU0lPTl9TVEFURSA9ICJzZXNzaW9uU3RhdGUiOwotICAgIHN0YXRpYyBmaW5hbCBTdHJpbmcgS0VZX1FVRVVFX1BBVVNFRCA9ICJxdWV1ZVBhdXNlZCI7Ci0gICAgc3RhdGljIGZpbmFsIFN0cmluZyBLRVlfRVhUUkFTID0gImV4dHJhcyI7Ci0KLSAgICBmaW5hbCBCdW5kbGUgbUJ1bmRsZTsKLQotICAgIC8qKgotICAgICAqIFNlc3Npb24gc3RhdGU6IEFjdGl2ZS4KLSAgICAgKiA8cD4KLSAgICAgKiBJbmRpY2F0ZXMgdGhhdCB0aGUgbWVkaWEgc2Vzc2lvbiBpcyBhY3RpdmUgYW5kIGluIGNvbnRyb2wgb2YgdGhlIHJvdXRlLgotICAgICAqIDwvcD4KLSAgICAgKi8KLSAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBTRVNTSU9OX1NUQVRFX0FDVElWRSA9IDA7Ci0KLSAgICAvKioKLSAgICAgKiBTZXNzaW9uIHN0YXRlOiBFbmRlZC4KLSAgICAgKiA8cD4KLSAgICAgKiBJbmRpY2F0ZXMgdGhhdCB0aGUgbWVkaWEgc2Vzc2lvbiB3YXMgZW5kZWQgbm9ybWFsbHkgdXNpbmcgdGhlCi0gICAgICoge0BsaW5rIE1lZGlhQ29udHJvbEludGVudCNBQ1RJT05fRU5EX1NFU1NJT04gZW5kIHNlc3Npb259IGFjdGlvbi4KLSAgICAgKiA8L3A+PHA+Ci0gICAgICogQSB0ZXJtaW5hdGVkIG1lZGlhIHNlc3Npb24gY2Fubm90IGJlIHVzZWQgYW55bW9yZS4gIFRvIHBsYXkgbW9yZSBtZWRpYSwgdGhlCi0gICAgICogYXBwbGljYXRpb24gbXVzdCBzdGFydCBhIG5ldyBzZXNzaW9uLgotICAgICAqIDwvcD4KLSAgICAgKi8KLSAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBTRVNTSU9OX1NUQVRFX0VOREVEID0gMTsKLQotICAgIC8qKgotICAgICAqIFNlc3Npb24gc3RhdGU6IEludmFsaWRhdGVkLgotICAgICAqIDxwPgotICAgICAqIEluZGljYXRlcyB0aGF0IHRoZSBtZWRpYSBzZXNzaW9uIHdhcyBpbnZhbGlkYXRlZCBpbnZvbHVudGFyaWx5IGR1ZSB0bwotICAgICAqIGFub3RoZXIgc2Vzc2lvbiB0YWtpbmcgY29udHJvbCBvZiB0aGUgcm91dGUuCi0gICAgICogPC9wPjxwPgotICAgICAqIEFuIGludmFsaWRhdGVkIG1lZGlhIHNlc3Npb24gY2Fubm90IGJlIHVzZWQgYW55bW9yZS4gIFRvIHBsYXkgbW9yZSBtZWRpYSwgdGhlCi0gICAgICogYXBwbGljYXRpb24gbXVzdCBzdGFydCBhIG5ldyBzZXNzaW9uLgotICAgICAqIDwvcD4KLSAgICAgKi8KLSAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBTRVNTSU9OX1NUQVRFX0lOVkFMSURBVEVEID0gMjsKLQotICAgIE1lZGlhU2Vzc2lvblN0YXR1cyhCdW5kbGUgYnVuZGxlKSB7Ci0gICAgICAgIG1CdW5kbGUgPSBidW5kbGU7Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogR2V0cyB0aGUgdGltZXN0YW1wIGFzc29jaWF0ZWQgd2l0aCB0aGUgc3RhdHVzIGluZm9ybWF0aW9uIGluCi0gICAgICogbWlsbGlzZWNvbmRzIHNpbmNlIGJvb3QgaW4gdGhlIHtAbGluayBTeXN0ZW1DbG9jayNlbGFwc2VkUmVhbHRpbWV9IHRpbWUgYmFzZS4KLSAgICAgKgotICAgICAqIEByZXR1cm4gVGhlIHN0YXR1cyB0aW1lc3RhbXAgaW4gdGhlIHtAbGluayBTeXN0ZW1DbG9jayNlbGFwc2VkUmVhbHRpbWUoKX0gdGltZSBiYXNlLgotICAgICAqLwotICAgIHB1YmxpYyBsb25nIGdldFRpbWVzdGFtcCgpIHsKLSAgICAgICAgcmV0dXJuIG1CdW5kbGUuZ2V0TG9uZyhLRVlfVElNRVNUQU1QKTsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBHZXRzIHRoZSBzZXNzaW9uIHN0YXRlLgotICAgICAqCi0gICAgICogQHJldHVybiBUaGUgc2Vzc2lvbiBzdGF0ZS4gIE9uZSBvZiB7QGxpbmsgI1NFU1NJT05fU1RBVEVfQUNUSVZFfSwKLSAgICAgKiB7QGxpbmsgI1NFU1NJT05fU1RBVEVfRU5ERUR9LCBvciB7QGxpbmsgI1NFU1NJT05fU1RBVEVfSU5WQUxJREFURUR9LgotICAgICAqLwotICAgIHB1YmxpYyBpbnQgZ2V0U2Vzc2lvblN0YXRlKCkgewotICAgICAgICByZXR1cm4gbUJ1bmRsZS5nZXRJbnQoS0VZX1NFU1NJT05fU1RBVEUsIFNFU1NJT05fU1RBVEVfSU5WQUxJREFURUQpOwotICAgIH0KLQotICAgIC8qKgotICAgICAqIFJldHVybnMgdHJ1ZSBpZiB0aGUgc2Vzc2lvbidzIHF1ZXVlIGlzIHBhdXNlZC4KLSAgICAgKgotICAgICAqIEByZXR1cm4gVHJ1ZSBpZiB0aGUgc2Vzc2lvbidzIHF1ZXVlIGlzIHBhdXNlZC4KLSAgICAgKi8KLSAgICBwdWJsaWMgYm9vbGVhbiBpc1F1ZXVlUGF1c2VkKCkgewotICAgICAgICByZXR1cm4gbUJ1bmRsZS5nZXRCb29sZWFuKEtFWV9RVUVVRV9QQVVTRUQpOwotICAgIH0KLQotICAgIC8qKgotICAgICAqIEdldHMgYSBidW5kbGUgb2YgZXh0cmFzIGZvciB0aGlzIHN0YXR1cyBvYmplY3QuCi0gICAgICogVGhlIGV4dHJhcyB3aWxsIGJlIGlnbm9yZWQgYnkgdGhlIG1lZGlhIHJvdXRlciBidXQgdGhleSBtYXkgYmUgdXNlZAotICAgICAqIGJ5IGFwcGxpY2F0aW9ucy4KLSAgICAgKi8KLSAgICBwdWJsaWMgQnVuZGxlIGdldEV4dHJhcygpIHsKLSAgICAgICAgcmV0dXJuIG1CdW5kbGUuZ2V0QnVuZGxlKEtFWV9FWFRSQVMpOwotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyBTdHJpbmcgdG9TdHJpbmcoKSB7Ci0gICAgICAgIFN0cmluZ0J1aWxkZXIgcmVzdWx0ID0gbmV3IFN0cmluZ0J1aWxkZXIoKTsKLSAgICAgICAgcmVzdWx0LmFwcGVuZCgiTWVkaWFTZXNzaW9uU3RhdHVzeyAiKTsKLSAgICAgICAgcmVzdWx0LmFwcGVuZCgidGltZXN0YW1wPSIpOwotICAgICAgICBUaW1lVXRpbHMuZm9ybWF0RHVyYXRpb24oU3lzdGVtQ2xvY2suZWxhcHNlZFJlYWx0aW1lKCkgLSBnZXRUaW1lc3RhbXAoKSwgcmVzdWx0KTsKLSAgICAgICAgcmVzdWx0LmFwcGVuZCgiIG1zIGFnbyIpOwotICAgICAgICByZXN1bHQuYXBwZW5kKCIsIHNlc3Npb25TdGF0ZT0iKS5hcHBlbmQoc2Vzc2lvblN0YXRlVG9TdHJpbmcoZ2V0U2Vzc2lvblN0YXRlKCkpKTsKLSAgICAgICAgcmVzdWx0LmFwcGVuZCgiLCBxdWV1ZVBhdXNlZD0iKS5hcHBlbmQoaXNRdWV1ZVBhdXNlZCgpKTsKLSAgICAgICAgcmVzdWx0LmFwcGVuZCgiLCBleHRyYXM9IikuYXBwZW5kKGdldEV4dHJhcygpKTsKLSAgICAgICAgcmVzdWx0LmFwcGVuZCgiIH0iKTsKLSAgICAgICAgcmV0dXJuIHJlc3VsdC50b1N0cmluZygpOwotICAgIH0KLQotICAgIHByaXZhdGUgc3RhdGljIFN0cmluZyBzZXNzaW9uU3RhdGVUb1N0cmluZyhpbnQgc2Vzc2lvblN0YXRlKSB7Ci0gICAgICAgIHN3aXRjaCAoc2Vzc2lvblN0YXRlKSB7Ci0gICAgICAgICAgICBjYXNlIFNFU1NJT05fU1RBVEVfQUNUSVZFOgotICAgICAgICAgICAgICAgIHJldHVybiAiYWN0aXZlIjsKLSAgICAgICAgICAgIGNhc2UgU0VTU0lPTl9TVEFURV9FTkRFRDoKLSAgICAgICAgICAgICAgICByZXR1cm4gImVuZGVkIjsKLSAgICAgICAgICAgIGNhc2UgU0VTU0lPTl9TVEFURV9JTlZBTElEQVRFRDoKLSAgICAgICAgICAgICAgICByZXR1cm4gImludmFsaWRhdGVkIjsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gSW50ZWdlci50b1N0cmluZyhzZXNzaW9uU3RhdGUpOwotICAgIH0KLQotICAgIC8qKgotICAgICAqIENvbnZlcnRzIHRoaXMgb2JqZWN0IHRvIGEgYnVuZGxlIGZvciBzZXJpYWxpemF0aW9uLgotICAgICAqCi0gICAgICogQHJldHVybiBUaGUgY29udGVudHMgb2YgdGhlIG9iamVjdCByZXByZXNlbnRlZCBhcyBhIGJ1bmRsZS4KLSAgICAgKi8KLSAgICBwdWJsaWMgQnVuZGxlIGFzQnVuZGxlKCkgewotICAgICAgICByZXR1cm4gbUJ1bmRsZTsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBDcmVhdGVzIGFuIGluc3RhbmNlIGZyb20gYSBidW5kbGUuCi0gICAgICoKLSAgICAgKiBAcGFyYW0gYnVuZGxlIFRoZSBidW5kbGUsIG9yIG51bGwgaWYgbm9uZS4KLSAgICAgKiBAcmV0dXJuIFRoZSBuZXcgaW5zdGFuY2UsIG9yIG51bGwgaWYgdGhlIGJ1bmRsZSB3YXMgbnVsbC4KLSAgICAgKi8KLSAgICBwdWJsaWMgc3RhdGljIE1lZGlhU2Vzc2lvblN0YXR1cyBmcm9tQnVuZGxlKEJ1bmRsZSBidW5kbGUpIHsKLSAgICAgICAgcmV0dXJuIGJ1bmRsZSAhPSBudWxsID8gbmV3IE1lZGlhU2Vzc2lvblN0YXR1cyhidW5kbGUpIDogbnVsbDsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBCdWlsZGVyIGZvciB7QGxpbmsgTWVkaWFTZXNzaW9uU3RhdHVzIG1lZGlhIHNlc3Npb24gc3RhdHVzIG9iamVjdHN9LgotICAgICAqLwotICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgY2xhc3MgQnVpbGRlciB7Ci0gICAgICAgIHByaXZhdGUgZmluYWwgQnVuZGxlIG1CdW5kbGU7Ci0KLSAgICAgICAgLyoqCi0gICAgICAgICAqIENyZWF0ZXMgYSBtZWRpYSBzZXNzaW9uIHN0YXR1cyBidWlsZGVyIHVzaW5nIHRoZSBjdXJyZW50IHRpbWUgYXMgdGhlCi0gICAgICAgICAqIHJlZmVyZW5jZSB0aW1lc3RhbXAuCi0gICAgICAgICAqCi0gICAgICAgICAqIEBwYXJhbSBzZXNzaW9uU3RhdGUgVGhlIHNlc3Npb24gc3RhdGUuCi0gICAgICAgICAqLwotICAgICAgICBwdWJsaWMgQnVpbGRlcihpbnQgc2Vzc2lvblN0YXRlKSB7Ci0gICAgICAgICAgICBtQnVuZGxlID0gbmV3IEJ1bmRsZSgpOwotICAgICAgICAgICAgc2V0VGltZXN0YW1wKFN5c3RlbUNsb2NrLmVsYXBzZWRSZWFsdGltZSgpKTsKLSAgICAgICAgICAgIHNldFNlc3Npb25TdGF0ZShzZXNzaW9uU3RhdGUpOwotICAgICAgICB9Ci0KLSAgICAgICAgLyoqCi0gICAgICAgICAqIENyZWF0ZXMgYSBtZWRpYSBzZXNzaW9uIHN0YXR1cyBidWlsZGVyIHdob3NlIGluaXRpYWwgY29udGVudHMgYXJlCi0gICAgICAgICAqIGNvcGllZCBmcm9tIGFuIGV4aXN0aW5nIHN0YXR1cy4KLSAgICAgICAgICovCi0gICAgICAgIHB1YmxpYyBCdWlsZGVyKE1lZGlhU2Vzc2lvblN0YXR1cyBzdGF0dXMpIHsKLSAgICAgICAgICAgIGlmIChzdGF0dXMgPT0gbnVsbCkgewotICAgICAgICAgICAgICAgIHRocm93IG5ldyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oInN0YXR1cyBtdXN0IG5vdCBiZSBudWxsIik7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIG1CdW5kbGUgPSBuZXcgQnVuZGxlKHN0YXR1cy5tQnVuZGxlKTsKLSAgICAgICAgfQotCi0gICAgICAgIC8qKgotICAgICAgICAgKiBTZXRzIHRoZSB0aW1lc3RhbXAgYXNzb2NpYXRlZCB3aXRoIHRoZSBzdGF0dXMgaW5mb3JtYXRpb24gaW4KLSAgICAgICAgICogbWlsbGlzZWNvbmRzIHNpbmNlIGJvb3QgaW4gdGhlIHtAbGluayBTeXN0ZW1DbG9jayNlbGFwc2VkUmVhbHRpbWV9IHRpbWUgYmFzZS4KLSAgICAgICAgICovCi0gICAgICAgIHB1YmxpYyBCdWlsZGVyIHNldFRpbWVzdGFtcChsb25nIGVsYXBzZWRSZWFsdGltZVRpbWVzdGFtcCkgewotICAgICAgICAgICAgbUJ1bmRsZS5wdXRMb25nKEtFWV9USU1FU1RBTVAsIGVsYXBzZWRSZWFsdGltZVRpbWVzdGFtcCk7Ci0gICAgICAgICAgICByZXR1cm4gdGhpczsKLSAgICAgICAgfQotCi0gICAgICAgIC8qKgotICAgICAgICAgKiBTZXRzIHRoZSBzZXNzaW9uIHN0YXRlLgotICAgICAgICAgKi8KLSAgICAgICAgcHVibGljIEJ1aWxkZXIgc2V0U2Vzc2lvblN0YXRlKGludCBzZXNzaW9uU3RhdGUpIHsKLSAgICAgICAgICAgIG1CdW5kbGUucHV0SW50KEtFWV9TRVNTSU9OX1NUQVRFLCBzZXNzaW9uU3RhdGUpOwotICAgICAgICAgICAgcmV0dXJuIHRoaXM7Ci0gICAgICAgIH0KLQotICAgICAgICAvKioKLSAgICAgICAgICogU2V0cyB3aGV0aGVyIHRoZSBxdWV1ZSBpcyBwYXVzZWQuCi0gICAgICAgICAqLwotICAgICAgICBwdWJsaWMgQnVpbGRlciBzZXRRdWV1ZVBhdXNlZChib29sZWFuIHF1ZXVlUGF1c2VkKSB7Ci0gICAgICAgICAgICBtQnVuZGxlLnB1dEJvb2xlYW4oS0VZX1FVRVVFX1BBVVNFRCwgcXVldWVQYXVzZWQpOwotICAgICAgICAgICAgcmV0dXJuIHRoaXM7Ci0gICAgICAgIH0KLQotICAgICAgICAvKioKLSAgICAgICAgICogU2V0cyBhIGJ1bmRsZSBvZiBleHRyYXMgZm9yIHRoaXMgc3RhdHVzIG9iamVjdC4KLSAgICAgICAgICogVGhlIGV4dHJhcyB3aWxsIGJlIGlnbm9yZWQgYnkgdGhlIG1lZGlhIHJvdXRlciBidXQgdGhleSBtYXkgYmUgdXNlZAotICAgICAgICAgKiBieSBhcHBsaWNhdGlvbnMuCi0gICAgICAgICAqLwotICAgICAgICBwdWJsaWMgQnVpbGRlciBzZXRFeHRyYXMoQnVuZGxlIGV4dHJhcykgewotICAgICAgICAgICAgbUJ1bmRsZS5wdXRCdW5kbGUoS0VZX0VYVFJBUywgZXh0cmFzKTsKLSAgICAgICAgICAgIHJldHVybiB0aGlzOwotICAgICAgICB9Ci0KLSAgICAgICAgLyoqCi0gICAgICAgICAqIEJ1aWxkcyB0aGUge0BsaW5rIE1lZGlhU2Vzc2lvblN0YXR1cyBtZWRpYSBzZXNzaW9uIHN0YXR1cyBvYmplY3R9LgotICAgICAgICAgKi8KLSAgICAgICAgcHVibGljIE1lZGlhU2Vzc2lvblN0YXR1cyBidWlsZCgpIHsKLSAgICAgICAgICAgIHJldHVybiBuZXcgTWVkaWFTZXNzaW9uU3RhdHVzKG1CdW5kbGUpOwotICAgICAgICB9Ci0gICAgfQotfQpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvTWVkaWFDb21wb25lbnRzL3NyYy9jb20vYW5kcm9pZC9zdXBwb3J0L21lZGlhcm91dGVyL21lZGlhL1JlZ2lzdGVyZWRNZWRpYVJvdXRlUHJvdmlkZXIuamF2YSBiL3BhY2thZ2VzL01lZGlhQ29tcG9uZW50cy9zcmMvY29tL2FuZHJvaWQvc3VwcG9ydC9tZWRpYXJvdXRlci9tZWRpYS9SZWdpc3RlcmVkTWVkaWFSb3V0ZVByb3ZpZGVyLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDk4ZTRlMjguLjAwMDAwMDAKLS0tIGEvcGFja2FnZXMvTWVkaWFDb21wb25lbnRzL3NyYy9jb20vYW5kcm9pZC9zdXBwb3J0L21lZGlhcm91dGVyL21lZGlhL1JlZ2lzdGVyZWRNZWRpYVJvdXRlUHJvdmlkZXIuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDc0MSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IDIwMTggVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAotICoKLSAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwotICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgotICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0gKgotICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLSAqCi0gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCi0gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAotICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCi0gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCi0gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KLSAqLwotCi1wYWNrYWdlIGNvbS5hbmRyb2lkLnN1cHBvcnQubWVkaWFyb3V0ZXIubWVkaWE7Ci0KLWltcG9ydCBzdGF0aWMgY29tLmFuZHJvaWQuc3VwcG9ydC5tZWRpYXJvdXRlci5tZWRpYS5NZWRpYVJvdXRlUHJvdmlkZXJQcm90b2NvbC5DTElFTlRfREFUQV9ST1VURV9JRDsKLWltcG9ydCBzdGF0aWMgY29tLmFuZHJvaWQuc3VwcG9ydC5tZWRpYXJvdXRlci5tZWRpYS5NZWRpYVJvdXRlUHJvdmlkZXJQcm90b2NvbAotICAgICAgICAuQ0xJRU5UX0RBVEFfUk9VVEVfTElCUkFSWV9HUk9VUDsKLWltcG9ydCBzdGF0aWMgY29tLmFuZHJvaWQuc3VwcG9ydC5tZWRpYXJvdXRlci5tZWRpYS5NZWRpYVJvdXRlUHJvdmlkZXJQcm90b2NvbAotICAgICAgICAuQ0xJRU5UX0RBVEFfVU5TRUxFQ1RfUkVBU09OOwotaW1wb3J0IHN0YXRpYyBjb20uYW5kcm9pZC5zdXBwb3J0Lm1lZGlhcm91dGVyLm1lZGlhLk1lZGlhUm91dGVQcm92aWRlclByb3RvY29sLkNMSUVOVF9EQVRBX1ZPTFVNRTsKLWltcG9ydCBzdGF0aWMgY29tLmFuZHJvaWQuc3VwcG9ydC5tZWRpYXJvdXRlci5tZWRpYS5NZWRpYVJvdXRlUHJvdmlkZXJQcm90b2NvbAotICAgICAgICAuQ0xJRU5UX01TR19DUkVBVEVfUk9VVEVfQ09OVFJPTExFUjsKLWltcG9ydCBzdGF0aWMgY29tLmFuZHJvaWQuc3VwcG9ydC5tZWRpYXJvdXRlci5tZWRpYS5NZWRpYVJvdXRlUHJvdmlkZXJQcm90b2NvbC5DTElFTlRfTVNHX1JFR0lTVEVSOwotaW1wb3J0IHN0YXRpYyBjb20uYW5kcm9pZC5zdXBwb3J0Lm1lZGlhcm91dGVyLm1lZGlhLk1lZGlhUm91dGVQcm92aWRlclByb3RvY29sCi0gICAgICAgIC5DTElFTlRfTVNHX1JFTEVBU0VfUk9VVEVfQ09OVFJPTExFUjsKLWltcG9ydCBzdGF0aWMgY29tLmFuZHJvaWQuc3VwcG9ydC5tZWRpYXJvdXRlci5tZWRpYS5NZWRpYVJvdXRlUHJvdmlkZXJQcm90b2NvbAotICAgICAgICAuQ0xJRU5UX01TR19ST1VURV9DT05UUk9MX1JFUVVFU1Q7Ci1pbXBvcnQgc3RhdGljIGNvbS5hbmRyb2lkLnN1cHBvcnQubWVkaWFyb3V0ZXIubWVkaWEuTWVkaWFSb3V0ZVByb3ZpZGVyUHJvdG9jb2wuQ0xJRU5UX01TR19TRUxFQ1RfUk9VVEU7Ci1pbXBvcnQgc3RhdGljIGNvbS5hbmRyb2lkLnN1cHBvcnQubWVkaWFyb3V0ZXIubWVkaWEuTWVkaWFSb3V0ZVByb3ZpZGVyUHJvdG9jb2wKLSAgICAgICAgLkNMSUVOVF9NU0dfU0VUX0RJU0NPVkVSWV9SRVFVRVNUOwotaW1wb3J0IHN0YXRpYyBjb20uYW5kcm9pZC5zdXBwb3J0Lm1lZGlhcm91dGVyLm1lZGlhLk1lZGlhUm91dGVQcm92aWRlclByb3RvY29sCi0gICAgICAgIC5DTElFTlRfTVNHX1NFVF9ST1VURV9WT0xVTUU7Ci1pbXBvcnQgc3RhdGljIGNvbS5hbmRyb2lkLnN1cHBvcnQubWVkaWFyb3V0ZXIubWVkaWEuTWVkaWFSb3V0ZVByb3ZpZGVyUHJvdG9jb2wuQ0xJRU5UX01TR19VTlJFR0lTVEVSOwotaW1wb3J0IHN0YXRpYyBjb20uYW5kcm9pZC5zdXBwb3J0Lm1lZGlhcm91dGVyLm1lZGlhLk1lZGlhUm91dGVQcm92aWRlclByb3RvY29sCi0gICAgICAgIC5DTElFTlRfTVNHX1VOU0VMRUNUX1JPVVRFOwotaW1wb3J0IHN0YXRpYyBjb20uYW5kcm9pZC5zdXBwb3J0Lm1lZGlhcm91dGVyLm1lZGlhLk1lZGlhUm91dGVQcm92aWRlclByb3RvY29sCi0gICAgICAgIC5DTElFTlRfTVNHX1VQREFURV9ST1VURV9WT0xVTUU7Ci1pbXBvcnQgc3RhdGljIGNvbS5hbmRyb2lkLnN1cHBvcnQubWVkaWFyb3V0ZXIubWVkaWEuTWVkaWFSb3V0ZVByb3ZpZGVyUHJvdG9jb2wuQ0xJRU5UX1ZFUlNJT05fQ1VSUkVOVDsKLWltcG9ydCBzdGF0aWMgY29tLmFuZHJvaWQuc3VwcG9ydC5tZWRpYXJvdXRlci5tZWRpYS5NZWRpYVJvdXRlUHJvdmlkZXJQcm90b2NvbC5TRVJWSUNFX0RBVEFfRVJST1I7Ci1pbXBvcnQgc3RhdGljIGNvbS5hbmRyb2lkLnN1cHBvcnQubWVkaWFyb3V0ZXIubWVkaWEuTWVkaWFSb3V0ZVByb3ZpZGVyUHJvdG9jb2wKLSAgICAgICAgLlNFUlZJQ0VfTVNHX0NPTlRST0xfUkVRVUVTVF9GQUlMRUQ7Ci1pbXBvcnQgc3RhdGljIGNvbS5hbmRyb2lkLnN1cHBvcnQubWVkaWFyb3V0ZXIubWVkaWEuTWVkaWFSb3V0ZVByb3ZpZGVyUHJvdG9jb2wKLSAgICAgICAgLlNFUlZJQ0VfTVNHX0NPTlRST0xfUkVRVUVTVF9TVUNDRUVERUQ7Ci1pbXBvcnQgc3RhdGljIGNvbS5hbmRyb2lkLnN1cHBvcnQubWVkaWFyb3V0ZXIubWVkaWEuTWVkaWFSb3V0ZVByb3ZpZGVyUHJvdG9jb2wKLSAgICAgICAgLlNFUlZJQ0VfTVNHX0RFU0NSSVBUT1JfQ0hBTkdFRDsKLWltcG9ydCBzdGF0aWMgY29tLmFuZHJvaWQuc3VwcG9ydC5tZWRpYXJvdXRlci5tZWRpYS5NZWRpYVJvdXRlUHJvdmlkZXJQcm90b2NvbAotICAgICAgICAuU0VSVklDRV9NU0dfR0VORVJJQ19GQUlMVVJFOwotaW1wb3J0IHN0YXRpYyBjb20uYW5kcm9pZC5zdXBwb3J0Lm1lZGlhcm91dGVyLm1lZGlhLk1lZGlhUm91dGVQcm92aWRlclByb3RvY29sCi0gICAgICAgIC5TRVJWSUNFX01TR19HRU5FUklDX1NVQ0NFU1M7Ci1pbXBvcnQgc3RhdGljIGNvbS5hbmRyb2lkLnN1cHBvcnQubWVkaWFyb3V0ZXIubWVkaWEuTWVkaWFSb3V0ZVByb3ZpZGVyUHJvdG9jb2wuU0VSVklDRV9NU0dfUkVHSVNURVJFRDsKLWltcG9ydCBzdGF0aWMgY29tLmFuZHJvaWQuc3VwcG9ydC5tZWRpYXJvdXRlci5tZWRpYS5NZWRpYVJvdXRlUHJvdmlkZXJQcm90b2NvbC5TRVJWSUNFX1ZFUlNJT05fMTsKLWltcG9ydCBzdGF0aWMgY29tLmFuZHJvaWQuc3VwcG9ydC5tZWRpYXJvdXRlci5tZWRpYS5NZWRpYVJvdXRlUHJvdmlkZXJQcm90b2NvbC5pc1ZhbGlkUmVtb3RlTWVzc2VuZ2VyOwotCi1pbXBvcnQgYW5kcm9pZC5hbm5vdGF0aW9uLk5vbk51bGw7Ci1pbXBvcnQgYW5kcm9pZC5jb250ZW50LkNvbXBvbmVudE5hbWU7Ci1pbXBvcnQgYW5kcm9pZC5jb250ZW50LkNvbnRleHQ7Ci1pbXBvcnQgYW5kcm9pZC5jb250ZW50LkludGVudDsKLWltcG9ydCBhbmRyb2lkLmNvbnRlbnQuU2VydmljZUNvbm5lY3Rpb247Ci1pbXBvcnQgYW5kcm9pZC5vcy5CdW5kbGU7Ci1pbXBvcnQgYW5kcm9pZC5vcy5EZWFkT2JqZWN0RXhjZXB0aW9uOwotaW1wb3J0IGFuZHJvaWQub3MuSGFuZGxlcjsKLWltcG9ydCBhbmRyb2lkLm9zLklCaW5kZXI7Ci1pbXBvcnQgYW5kcm9pZC5vcy5JQmluZGVyLkRlYXRoUmVjaXBpZW50OwotaW1wb3J0IGFuZHJvaWQub3MuTWVzc2FnZTsKLWltcG9ydCBhbmRyb2lkLm9zLk1lc3NlbmdlcjsKLWltcG9ydCBhbmRyb2lkLm9zLlJlbW90ZUV4Y2VwdGlvbjsKLWltcG9ydCBhbmRyb2lkLnV0aWwuTG9nOwotaW1wb3J0IGFuZHJvaWQudXRpbC5TcGFyc2VBcnJheTsKLQotaW1wb3J0IGNvbS5hbmRyb2lkLnN1cHBvcnQubWVkaWFyb3V0ZXIubWVkaWEuTWVkaWFSb3V0ZXIuQ29udHJvbFJlcXVlc3RDYWxsYmFjazsKLQotaW1wb3J0IGphdmEubGFuZy5yZWYuV2Vha1JlZmVyZW5jZTsKLWltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OwotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotCi0vKioKLSAqIE1haW50YWlucyBhIGNvbm5lY3Rpb24gdG8gYSBwYXJ0aWN1bGFyIG1lZGlhIHJvdXRlIHByb3ZpZGVyIHNlcnZpY2UuCi0gKi8KLWZpbmFsIGNsYXNzIFJlZ2lzdGVyZWRNZWRpYVJvdXRlUHJvdmlkZXIgZXh0ZW5kcyBNZWRpYVJvdXRlUHJvdmlkZXIKLSAgICAgICAgaW1wbGVtZW50cyBTZXJ2aWNlQ29ubmVjdGlvbiB7Ci0gICAgc3RhdGljIGZpbmFsIFN0cmluZyBUQUcgPSAiTWVkaWFSb3V0ZVByb3ZpZGVyUHJveHkiOyAgLy8gbWF4LiAyMyBjaGFycwotICAgIHN0YXRpYyBmaW5hbCBib29sZWFuIERFQlVHID0gTG9nLmlzTG9nZ2FibGUoVEFHLCBMb2cuREVCVUcpOwotCi0gICAgcHJpdmF0ZSBmaW5hbCBDb21wb25lbnROYW1lIG1Db21wb25lbnROYW1lOwotICAgIGZpbmFsIFByaXZhdGVIYW5kbGVyIG1Qcml2YXRlSGFuZGxlcjsKLSAgICBwcml2YXRlIGZpbmFsIEFycmF5TGlzdDxDb250cm9sbGVyPiBtQ29udHJvbGxlcnMgPSBuZXcgQXJyYXlMaXN0PENvbnRyb2xsZXI+KCk7Ci0KLSAgICBwcml2YXRlIGJvb2xlYW4gbVN0YXJ0ZWQ7Ci0gICAgcHJpdmF0ZSBib29sZWFuIG1Cb3VuZDsKLSAgICBwcml2YXRlIENvbm5lY3Rpb24gbUFjdGl2ZUNvbm5lY3Rpb247Ci0gICAgcHJpdmF0ZSBib29sZWFuIG1Db25uZWN0aW9uUmVhZHk7Ci0KLSAgICBwdWJsaWMgUmVnaXN0ZXJlZE1lZGlhUm91dGVQcm92aWRlcihDb250ZXh0IGNvbnRleHQsIENvbXBvbmVudE5hbWUgY29tcG9uZW50TmFtZSkgewotICAgICAgICBzdXBlcihjb250ZXh0LCBuZXcgUHJvdmlkZXJNZXRhZGF0YShjb21wb25lbnROYW1lKSk7Ci0KLSAgICAgICAgbUNvbXBvbmVudE5hbWUgPSBjb21wb25lbnROYW1lOwotICAgICAgICBtUHJpdmF0ZUhhbmRsZXIgPSBuZXcgUHJpdmF0ZUhhbmRsZXIoKTsKLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgUm91dGVDb250cm9sbGVyIG9uQ3JlYXRlUm91dGVDb250cm9sbGVyKEBOb25OdWxsIFN0cmluZyByb3V0ZUlkKSB7Ci0gICAgICAgIGlmIChyb3V0ZUlkID09IG51bGwpIHsKLSAgICAgICAgICAgIHRocm93IG5ldyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oInJvdXRlSWQgY2Fubm90IGJlIG51bGwiKTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gY3JlYXRlUm91dGVDb250cm9sbGVyKHJvdXRlSWQsIG51bGwpOwotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyBSb3V0ZUNvbnRyb2xsZXIgb25DcmVhdGVSb3V0ZUNvbnRyb2xsZXIoCi0gICAgICAgICAgICBATm9uTnVsbCBTdHJpbmcgcm91dGVJZCwgQE5vbk51bGwgU3RyaW5nIHJvdXRlR3JvdXBJZCkgewotICAgICAgICBpZiAocm91dGVJZCA9PSBudWxsKSB7Ci0gICAgICAgICAgICB0aHJvdyBuZXcgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKCJyb3V0ZUlkIGNhbm5vdCBiZSBudWxsIik7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKHJvdXRlR3JvdXBJZCA9PSBudWxsKSB7Ci0gICAgICAgICAgICB0aHJvdyBuZXcgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKCJyb3V0ZUdyb3VwSWQgY2Fubm90IGJlIG51bGwiKTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gY3JlYXRlUm91dGVDb250cm9sbGVyKHJvdXRlSWQsIHJvdXRlR3JvdXBJZCk7Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIHZvaWQgb25EaXNjb3ZlcnlSZXF1ZXN0Q2hhbmdlZChNZWRpYVJvdXRlRGlzY292ZXJ5UmVxdWVzdCByZXF1ZXN0KSB7Ci0gICAgICAgIGlmIChtQ29ubmVjdGlvblJlYWR5KSB7Ci0gICAgICAgICAgICBtQWN0aXZlQ29ubmVjdGlvbi5zZXREaXNjb3ZlcnlSZXF1ZXN0KHJlcXVlc3QpOwotICAgICAgICB9Ci0gICAgICAgIHVwZGF0ZUJpbmRpbmcoKTsKLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgdm9pZCBvblNlcnZpY2VDb25uZWN0ZWQoQ29tcG9uZW50TmFtZSBuYW1lLCBJQmluZGVyIHNlcnZpY2UpIHsKLSAgICAgICAgaWYgKERFQlVHKSB7Ci0gICAgICAgICAgICBMb2cuZChUQUcsIHRoaXMgKyAiOiBDb25uZWN0ZWQiKTsKLSAgICAgICAgfQotCi0gICAgICAgIGlmIChtQm91bmQpIHsKLSAgICAgICAgICAgIGRpc2Nvbm5lY3QoKTsKLQotICAgICAgICAgICAgTWVzc2VuZ2VyIG1lc3NlbmdlciA9IChzZXJ2aWNlICE9IG51bGwgPyBuZXcgTWVzc2VuZ2VyKHNlcnZpY2UpIDogbnVsbCk7Ci0gICAgICAgICAgICBpZiAoaXNWYWxpZFJlbW90ZU1lc3NlbmdlcihtZXNzZW5nZXIpKSB7Ci0gICAgICAgICAgICAgICAgQ29ubmVjdGlvbiBjb25uZWN0aW9uID0gbmV3IENvbm5lY3Rpb24obWVzc2VuZ2VyKTsKLSAgICAgICAgICAgICAgICBpZiAoY29ubmVjdGlvbi5yZWdpc3RlcigpKSB7Ci0gICAgICAgICAgICAgICAgICAgIG1BY3RpdmVDb25uZWN0aW9uID0gY29ubmVjdGlvbjsKLSAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICBpZiAoREVCVUcpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIExvZy5kKFRBRywgdGhpcyArICI6IFJlZ2lzdHJhdGlvbiBmYWlsZWQiKTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgTG9nLmUoVEFHLCB0aGlzICsgIjogU2VydmljZSByZXR1cm5lZCBpbnZhbGlkIG1lc3NlbmdlciBiaW5kZXIiKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyB2b2lkIG9uU2VydmljZURpc2Nvbm5lY3RlZChDb21wb25lbnROYW1lIG5hbWUpIHsKLSAgICAgICAgaWYgKERFQlVHKSB7Ci0gICAgICAgICAgICBMb2cuZChUQUcsIHRoaXMgKyAiOiBTZXJ2aWNlIGRpc2Nvbm5lY3RlZCIpOwotICAgICAgICB9Ci0gICAgICAgIGRpc2Nvbm5lY3QoKTsKLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgU3RyaW5nIHRvU3RyaW5nKCkgewotICAgICAgICByZXR1cm4gIlNlcnZpY2UgY29ubmVjdGlvbiAiICsgbUNvbXBvbmVudE5hbWUuZmxhdHRlblRvU2hvcnRTdHJpbmcoKTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgYm9vbGVhbiBoYXNDb21wb25lbnROYW1lKFN0cmluZyBwYWNrYWdlTmFtZSwgU3RyaW5nIGNsYXNzTmFtZSkgewotICAgICAgICByZXR1cm4gbUNvbXBvbmVudE5hbWUuZ2V0UGFja2FnZU5hbWUoKS5lcXVhbHMocGFja2FnZU5hbWUpCi0gICAgICAgICAgICAgICAgJiYgbUNvbXBvbmVudE5hbWUuZ2V0Q2xhc3NOYW1lKCkuZXF1YWxzKGNsYXNzTmFtZSk7Ci0gICAgfQotCi0gICAgcHVibGljIHZvaWQgc3RhcnQoKSB7Ci0gICAgICAgIGlmICghbVN0YXJ0ZWQpIHsKLSAgICAgICAgICAgIGlmIChERUJVRykgewotICAgICAgICAgICAgICAgIExvZy5kKFRBRywgdGhpcyArICI6IFN0YXJ0aW5nIik7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIG1TdGFydGVkID0gdHJ1ZTsKLSAgICAgICAgICAgIHVwZGF0ZUJpbmRpbmcoKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIHB1YmxpYyB2b2lkIHN0b3AoKSB7Ci0gICAgICAgIGlmIChtU3RhcnRlZCkgewotICAgICAgICAgICAgaWYgKERFQlVHKSB7Ci0gICAgICAgICAgICAgICAgTG9nLmQoVEFHLCB0aGlzICsgIjogU3RvcHBpbmciKTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgbVN0YXJ0ZWQgPSBmYWxzZTsKLSAgICAgICAgICAgIHVwZGF0ZUJpbmRpbmcoKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIHB1YmxpYyB2b2lkIHJlYmluZElmRGlzY29ubmVjdGVkKCkgewotICAgICAgICBpZiAobUFjdGl2ZUNvbm5lY3Rpb24gPT0gbnVsbCAmJiBzaG91bGRCaW5kKCkpIHsKLSAgICAgICAgICAgIHVuYmluZCgpOwotICAgICAgICAgICAgYmluZCgpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgcHJpdmF0ZSB2b2lkIHVwZGF0ZUJpbmRpbmcoKSB7Ci0gICAgICAgIGlmIChzaG91bGRCaW5kKCkpIHsKLSAgICAgICAgICAgIGJpbmQoKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIHVuYmluZCgpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgcHJpdmF0ZSBib29sZWFuIHNob3VsZEJpbmQoKSB7Ci0gICAgICAgIGlmIChtU3RhcnRlZCkgewotICAgICAgICAgICAgLy8gQmluZCB3aGVuZXZlciB0aGVyZSBpcyBhIGRpc2NvdmVyeSByZXF1ZXN0LgotICAgICAgICAgICAgaWYgKGdldERpc2NvdmVyeVJlcXVlc3QoKSAhPSBudWxsKSB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIC8vIEJpbmQgd2hlbmV2ZXIgdGhlIGFwcGxpY2F0aW9uIGhhcyBhbiBhY3RpdmUgcm91dGUgY29udHJvbGxlci4KLSAgICAgICAgICAgIC8vIFRoaXMgbWVhbnMgdGhhdCBvbmUgb2YgdGhpcyBwcm92aWRlcidzIHJvdXRlcyBpcyBzZWxlY3RlZC4KLSAgICAgICAgICAgIGlmICghbUNvbnRyb2xsZXJzLmlzRW1wdHkoKSkgewotICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICBwcml2YXRlIHZvaWQgYmluZCgpIHsKLSAgICAgICAgaWYgKCFtQm91bmQpIHsKLSAgICAgICAgICAgIGlmIChERUJVRykgewotICAgICAgICAgICAgICAgIExvZy5kKFRBRywgdGhpcyArICI6IEJpbmRpbmciKTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgSW50ZW50IHNlcnZpY2UgPSBuZXcgSW50ZW50KE1lZGlhUm91dGVQcm92aWRlclByb3RvY29sLlNFUlZJQ0VfSU5URVJGQUNFKTsKLSAgICAgICAgICAgIHNlcnZpY2Uuc2V0Q29tcG9uZW50KG1Db21wb25lbnROYW1lKTsKLSAgICAgICAgICAgIHRyeSB7Ci0gICAgICAgICAgICAgICAgbUJvdW5kID0gZ2V0Q29udGV4dCgpLmJpbmRTZXJ2aWNlKHNlcnZpY2UsIHRoaXMsIENvbnRleHQuQklORF9BVVRPX0NSRUFURSk7Ci0gICAgICAgICAgICAgICAgaWYgKCFtQm91bmQgJiYgREVCVUcpIHsKLSAgICAgICAgICAgICAgICAgICAgTG9nLmQoVEFHLCB0aGlzICsgIjogQmluZCBmYWlsZWQiKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9IGNhdGNoIChTZWN1cml0eUV4Y2VwdGlvbiBleCkgewotICAgICAgICAgICAgICAgIGlmIChERUJVRykgewotICAgICAgICAgICAgICAgICAgICBMb2cuZChUQUcsIHRoaXMgKyAiOiBCaW5kIGZhaWxlZCIsIGV4KTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBwcml2YXRlIHZvaWQgdW5iaW5kKCkgewotICAgICAgICBpZiAobUJvdW5kKSB7Ci0gICAgICAgICAgICBpZiAoREVCVUcpIHsKLSAgICAgICAgICAgICAgICBMb2cuZChUQUcsIHRoaXMgKyAiOiBVbmJpbmRpbmciKTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgbUJvdW5kID0gZmFsc2U7Ci0gICAgICAgICAgICBkaXNjb25uZWN0KCk7Ci0gICAgICAgICAgICBnZXRDb250ZXh0KCkudW5iaW5kU2VydmljZSh0aGlzKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIHByaXZhdGUgUm91dGVDb250cm9sbGVyIGNyZWF0ZVJvdXRlQ29udHJvbGxlcihTdHJpbmcgcm91dGVJZCwgU3RyaW5nIHJvdXRlR3JvdXBJZCkgewotICAgICAgICBNZWRpYVJvdXRlUHJvdmlkZXJEZXNjcmlwdG9yIGRlc2NyaXB0b3IgPSBnZXREZXNjcmlwdG9yKCk7Ci0gICAgICAgIGlmIChkZXNjcmlwdG9yICE9IG51bGwpIHsKLSAgICAgICAgICAgIExpc3Q8TWVkaWFSb3V0ZURlc2NyaXB0b3I+IHJvdXRlcyA9IGRlc2NyaXB0b3IuZ2V0Um91dGVzKCk7Ci0gICAgICAgICAgICBmaW5hbCBpbnQgY291bnQgPSByb3V0ZXMuc2l6ZSgpOwotICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBjb3VudDsgaSsrKSB7Ci0gICAgICAgICAgICAgICAgZmluYWwgTWVkaWFSb3V0ZURlc2NyaXB0b3Igcm91dGUgPSByb3V0ZXMuZ2V0KGkpOwotICAgICAgICAgICAgICAgIGlmIChyb3V0ZS5nZXRJZCgpLmVxdWFscyhyb3V0ZUlkKSkgewotICAgICAgICAgICAgICAgICAgICBDb250cm9sbGVyIGNvbnRyb2xsZXIgPSBuZXcgQ29udHJvbGxlcihyb3V0ZUlkLCByb3V0ZUdyb3VwSWQpOwotICAgICAgICAgICAgICAgICAgICBtQ29udHJvbGxlcnMuYWRkKGNvbnRyb2xsZXIpOwotICAgICAgICAgICAgICAgICAgICBpZiAobUNvbm5lY3Rpb25SZWFkeSkgewotICAgICAgICAgICAgICAgICAgICAgICAgY29udHJvbGxlci5hdHRhY2hDb25uZWN0aW9uKG1BY3RpdmVDb25uZWN0aW9uKTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICB1cGRhdGVCaW5kaW5nKCk7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBjb250cm9sbGVyOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICByZXR1cm4gbnVsbDsKLSAgICB9Ci0KLSAgICB2b2lkIG9uQ29ubmVjdGlvblJlYWR5KENvbm5lY3Rpb24gY29ubmVjdGlvbikgewotICAgICAgICBpZiAobUFjdGl2ZUNvbm5lY3Rpb24gPT0gY29ubmVjdGlvbikgewotICAgICAgICAgICAgbUNvbm5lY3Rpb25SZWFkeSA9IHRydWU7Ci0gICAgICAgICAgICBhdHRhY2hDb250cm9sbGVyc1RvQ29ubmVjdGlvbigpOwotCi0gICAgICAgICAgICBNZWRpYVJvdXRlRGlzY292ZXJ5UmVxdWVzdCByZXF1ZXN0ID0gZ2V0RGlzY292ZXJ5UmVxdWVzdCgpOwotICAgICAgICAgICAgaWYgKHJlcXVlc3QgIT0gbnVsbCkgewotICAgICAgICAgICAgICAgIG1BY3RpdmVDb25uZWN0aW9uLnNldERpc2NvdmVyeVJlcXVlc3QocmVxdWVzdCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICB2b2lkIG9uQ29ubmVjdGlvbkRpZWQoQ29ubmVjdGlvbiBjb25uZWN0aW9uKSB7Ci0gICAgICAgIGlmIChtQWN0aXZlQ29ubmVjdGlvbiA9PSBjb25uZWN0aW9uKSB7Ci0gICAgICAgICAgICBpZiAoREVCVUcpIHsKLSAgICAgICAgICAgICAgICBMb2cuZChUQUcsIHRoaXMgKyAiOiBTZXJ2aWNlIGNvbm5lY3Rpb24gZGllZCIpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgZGlzY29ubmVjdCgpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgdm9pZCBvbkNvbm5lY3Rpb25FcnJvcihDb25uZWN0aW9uIGNvbm5lY3Rpb24sIFN0cmluZyBlcnJvcikgewotICAgICAgICBpZiAobUFjdGl2ZUNvbm5lY3Rpb24gPT0gY29ubmVjdGlvbikgewotICAgICAgICAgICAgaWYgKERFQlVHKSB7Ci0gICAgICAgICAgICAgICAgTG9nLmQoVEFHLCB0aGlzICsgIjogU2VydmljZSBjb25uZWN0aW9uIGVycm9yIC0gIiArIGVycm9yKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHVuYmluZCgpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgdm9pZCBvbkNvbm5lY3Rpb25EZXNjcmlwdG9yQ2hhbmdlZChDb25uZWN0aW9uIGNvbm5lY3Rpb24sCi0gICAgICAgICAgICBNZWRpYVJvdXRlUHJvdmlkZXJEZXNjcmlwdG9yIGRlc2NyaXB0b3IpIHsKLSAgICAgICAgaWYgKG1BY3RpdmVDb25uZWN0aW9uID09IGNvbm5lY3Rpb24pIHsKLSAgICAgICAgICAgIGlmIChERUJVRykgewotICAgICAgICAgICAgICAgIExvZy5kKFRBRywgdGhpcyArICI6IERlc2NyaXB0b3IgY2hhbmdlZCwgZGVzY3JpcHRvcj0iICsgZGVzY3JpcHRvcik7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBzZXREZXNjcmlwdG9yKGRlc2NyaXB0b3IpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgcHJpdmF0ZSB2b2lkIGRpc2Nvbm5lY3QoKSB7Ci0gICAgICAgIGlmIChtQWN0aXZlQ29ubmVjdGlvbiAhPSBudWxsKSB7Ci0gICAgICAgICAgICBzZXREZXNjcmlwdG9yKG51bGwpOwotICAgICAgICAgICAgbUNvbm5lY3Rpb25SZWFkeSA9IGZhbHNlOwotICAgICAgICAgICAgZGV0YWNoQ29udHJvbGxlcnNGcm9tQ29ubmVjdGlvbigpOwotICAgICAgICAgICAgbUFjdGl2ZUNvbm5lY3Rpb24uZGlzcG9zZSgpOwotICAgICAgICAgICAgbUFjdGl2ZUNvbm5lY3Rpb24gPSBudWxsOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgdm9pZCBvbkNvbnRyb2xsZXJSZWxlYXNlZChDb250cm9sbGVyIGNvbnRyb2xsZXIpIHsKLSAgICAgICAgbUNvbnRyb2xsZXJzLnJlbW92ZShjb250cm9sbGVyKTsKLSAgICAgICAgY29udHJvbGxlci5kZXRhY2hDb25uZWN0aW9uKCk7Ci0gICAgICAgIHVwZGF0ZUJpbmRpbmcoKTsKLSAgICB9Ci0KLSAgICBwcml2YXRlIHZvaWQgYXR0YWNoQ29udHJvbGxlcnNUb0Nvbm5lY3Rpb24oKSB7Ci0gICAgICAgIGludCBjb3VudCA9IG1Db250cm9sbGVycy5zaXplKCk7Ci0gICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgY291bnQ7IGkrKykgewotICAgICAgICAgICAgbUNvbnRyb2xsZXJzLmdldChpKS5hdHRhY2hDb25uZWN0aW9uKG1BY3RpdmVDb25uZWN0aW9uKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIHByaXZhdGUgdm9pZCBkZXRhY2hDb250cm9sbGVyc0Zyb21Db25uZWN0aW9uKCkgewotICAgICAgICBpbnQgY291bnQgPSBtQ29udHJvbGxlcnMuc2l6ZSgpOwotICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGNvdW50OyBpKyspIHsKLSAgICAgICAgICAgIG1Db250cm9sbGVycy5nZXQoaSkuZGV0YWNoQ29ubmVjdGlvbigpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgcHJpdmF0ZSBmaW5hbCBjbGFzcyBDb250cm9sbGVyIGV4dGVuZHMgUm91dGVDb250cm9sbGVyIHsKLSAgICAgICAgcHJpdmF0ZSBmaW5hbCBTdHJpbmcgbVJvdXRlSWQ7Ci0gICAgICAgIHByaXZhdGUgZmluYWwgU3RyaW5nIG1Sb3V0ZUdyb3VwSWQ7Ci0KLSAgICAgICAgcHJpdmF0ZSBib29sZWFuIG1TZWxlY3RlZDsKLSAgICAgICAgcHJpdmF0ZSBpbnQgbVBlbmRpbmdTZXRWb2x1bWUgPSAtMTsKLSAgICAgICAgcHJpdmF0ZSBpbnQgbVBlbmRpbmdVcGRhdGVWb2x1bWVEZWx0YTsKLQotICAgICAgICBwcml2YXRlIENvbm5lY3Rpb24gbUNvbm5lY3Rpb247Ci0gICAgICAgIHByaXZhdGUgaW50IG1Db250cm9sbGVySWQ7Ci0KLSAgICAgICAgcHVibGljIENvbnRyb2xsZXIoU3RyaW5nIHJvdXRlSWQsIFN0cmluZyByb3V0ZUdyb3VwSWQpIHsKLSAgICAgICAgICAgIG1Sb3V0ZUlkID0gcm91dGVJZDsKLSAgICAgICAgICAgIG1Sb3V0ZUdyb3VwSWQgPSByb3V0ZUdyb3VwSWQ7Ci0gICAgICAgIH0KLQotICAgICAgICBwdWJsaWMgdm9pZCBhdHRhY2hDb25uZWN0aW9uKENvbm5lY3Rpb24gY29ubmVjdGlvbikgewotICAgICAgICAgICAgbUNvbm5lY3Rpb24gPSBjb25uZWN0aW9uOwotICAgICAgICAgICAgbUNvbnRyb2xsZXJJZCA9IGNvbm5lY3Rpb24uY3JlYXRlUm91dGVDb250cm9sbGVyKG1Sb3V0ZUlkLCBtUm91dGVHcm91cElkKTsKLSAgICAgICAgICAgIGlmIChtU2VsZWN0ZWQpIHsKLSAgICAgICAgICAgICAgICBjb25uZWN0aW9uLnNlbGVjdFJvdXRlKG1Db250cm9sbGVySWQpOwotICAgICAgICAgICAgICAgIGlmIChtUGVuZGluZ1NldFZvbHVtZSA+PSAwKSB7Ci0gICAgICAgICAgICAgICAgICAgIGNvbm5lY3Rpb24uc2V0Vm9sdW1lKG1Db250cm9sbGVySWQsIG1QZW5kaW5nU2V0Vm9sdW1lKTsKLSAgICAgICAgICAgICAgICAgICAgbVBlbmRpbmdTZXRWb2x1bWUgPSAtMTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgaWYgKG1QZW5kaW5nVXBkYXRlVm9sdW1lRGVsdGEgIT0gMCkgewotICAgICAgICAgICAgICAgICAgICBjb25uZWN0aW9uLnVwZGF0ZVZvbHVtZShtQ29udHJvbGxlcklkLCBtUGVuZGluZ1VwZGF0ZVZvbHVtZURlbHRhKTsKLSAgICAgICAgICAgICAgICAgICAgbVBlbmRpbmdVcGRhdGVWb2x1bWVEZWx0YSA9IDA7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgcHVibGljIHZvaWQgZGV0YWNoQ29ubmVjdGlvbigpIHsKLSAgICAgICAgICAgIGlmIChtQ29ubmVjdGlvbiAhPSBudWxsKSB7Ci0gICAgICAgICAgICAgICAgbUNvbm5lY3Rpb24ucmVsZWFzZVJvdXRlQ29udHJvbGxlcihtQ29udHJvbGxlcklkKTsKLSAgICAgICAgICAgICAgICBtQ29ubmVjdGlvbiA9IG51bGw7Ci0gICAgICAgICAgICAgICAgbUNvbnRyb2xsZXJJZCA9IDA7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgcHVibGljIHZvaWQgb25SZWxlYXNlKCkgewotICAgICAgICAgICAgb25Db250cm9sbGVyUmVsZWFzZWQodGhpcyk7Ci0gICAgICAgIH0KLQotICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgcHVibGljIHZvaWQgb25TZWxlY3QoKSB7Ci0gICAgICAgICAgICBtU2VsZWN0ZWQgPSB0cnVlOwotICAgICAgICAgICAgaWYgKG1Db25uZWN0aW9uICE9IG51bGwpIHsKLSAgICAgICAgICAgICAgICBtQ29ubmVjdGlvbi5zZWxlY3RSb3V0ZShtQ29udHJvbGxlcklkKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIEBPdmVycmlkZQotICAgICAgICBwdWJsaWMgdm9pZCBvblVuc2VsZWN0KCkgewotICAgICAgICAgICAgb25VbnNlbGVjdChNZWRpYVJvdXRlci5VTlNFTEVDVF9SRUFTT05fVU5LTk9XTik7Ci0gICAgICAgIH0KLQotICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgcHVibGljIHZvaWQgb25VbnNlbGVjdChpbnQgcmVhc29uKSB7Ci0gICAgICAgICAgICBtU2VsZWN0ZWQgPSBmYWxzZTsKLSAgICAgICAgICAgIGlmIChtQ29ubmVjdGlvbiAhPSBudWxsKSB7Ci0gICAgICAgICAgICAgICAgbUNvbm5lY3Rpb24udW5zZWxlY3RSb3V0ZShtQ29udHJvbGxlcklkLCByZWFzb24pOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgIHB1YmxpYyB2b2lkIG9uU2V0Vm9sdW1lKGludCB2b2x1bWUpIHsKLSAgICAgICAgICAgIGlmIChtQ29ubmVjdGlvbiAhPSBudWxsKSB7Ci0gICAgICAgICAgICAgICAgbUNvbm5lY3Rpb24uc2V0Vm9sdW1lKG1Db250cm9sbGVySWQsIHZvbHVtZSk7Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIG1QZW5kaW5nU2V0Vm9sdW1lID0gdm9sdW1lOwotICAgICAgICAgICAgICAgIG1QZW5kaW5nVXBkYXRlVm9sdW1lRGVsdGEgPSAwOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgIHB1YmxpYyB2b2lkIG9uVXBkYXRlVm9sdW1lKGludCBkZWx0YSkgewotICAgICAgICAgICAgaWYgKG1Db25uZWN0aW9uICE9IG51bGwpIHsKLSAgICAgICAgICAgICAgICBtQ29ubmVjdGlvbi51cGRhdGVWb2x1bWUobUNvbnRyb2xsZXJJZCwgZGVsdGEpOwotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICBtUGVuZGluZ1VwZGF0ZVZvbHVtZURlbHRhICs9IGRlbHRhOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgIHB1YmxpYyBib29sZWFuIG9uQ29udHJvbFJlcXVlc3QoSW50ZW50IGludGVudCwgQ29udHJvbFJlcXVlc3RDYWxsYmFjayBjYWxsYmFjaykgewotICAgICAgICAgICAgaWYgKG1Db25uZWN0aW9uICE9IG51bGwpIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gbUNvbm5lY3Rpb24uc2VuZENvbnRyb2xSZXF1ZXN0KG1Db250cm9sbGVySWQsIGludGVudCwgY2FsbGJhY2spOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgcHJpdmF0ZSBmaW5hbCBjbGFzcyBDb25uZWN0aW9uIGltcGxlbWVudHMgRGVhdGhSZWNpcGllbnQgewotICAgICAgICBwcml2YXRlIGZpbmFsIE1lc3NlbmdlciBtU2VydmljZU1lc3NlbmdlcjsKLSAgICAgICAgcHJpdmF0ZSBmaW5hbCBSZWNlaXZlSGFuZGxlciBtUmVjZWl2ZUhhbmRsZXI7Ci0gICAgICAgIHByaXZhdGUgZmluYWwgTWVzc2VuZ2VyIG1SZWNlaXZlTWVzc2VuZ2VyOwotCi0gICAgICAgIHByaXZhdGUgaW50IG1OZXh0UmVxdWVzdElkID0gMTsKLSAgICAgICAgcHJpdmF0ZSBpbnQgbU5leHRDb250cm9sbGVySWQgPSAxOwotICAgICAgICBwcml2YXRlIGludCBtU2VydmljZVZlcnNpb247IC8vIG5vbi16ZXJvIHdoZW4gcmVnaXN0cmF0aW9uIGNvbXBsZXRlCi0KLSAgICAgICAgcHJpdmF0ZSBpbnQgbVBlbmRpbmdSZWdpc3RlclJlcXVlc3RJZDsKLSAgICAgICAgcHJpdmF0ZSBmaW5hbCBTcGFyc2VBcnJheTxDb250cm9sUmVxdWVzdENhbGxiYWNrPiBtUGVuZGluZ0NhbGxiYWNrcyA9Ci0gICAgICAgICAgICAgICAgbmV3IFNwYXJzZUFycmF5PENvbnRyb2xSZXF1ZXN0Q2FsbGJhY2s+KCk7Ci0KLSAgICAgICAgcHVibGljIENvbm5lY3Rpb24oTWVzc2VuZ2VyIHNlcnZpY2VNZXNzZW5nZXIpIHsKLSAgICAgICAgICAgIG1TZXJ2aWNlTWVzc2VuZ2VyID0gc2VydmljZU1lc3NlbmdlcjsKLSAgICAgICAgICAgIG1SZWNlaXZlSGFuZGxlciA9IG5ldyBSZWNlaXZlSGFuZGxlcih0aGlzKTsKLSAgICAgICAgICAgIG1SZWNlaXZlTWVzc2VuZ2VyID0gbmV3IE1lc3NlbmdlcihtUmVjZWl2ZUhhbmRsZXIpOwotICAgICAgICB9Ci0KLSAgICAgICAgcHVibGljIGJvb2xlYW4gcmVnaXN0ZXIoKSB7Ci0gICAgICAgICAgICBtUGVuZGluZ1JlZ2lzdGVyUmVxdWVzdElkID0gbU5leHRSZXF1ZXN0SWQrKzsKLSAgICAgICAgICAgIGlmICghc2VuZFJlcXVlc3QoQ0xJRU5UX01TR19SRUdJU1RFUiwKLSAgICAgICAgICAgICAgICAgICAgbVBlbmRpbmdSZWdpc3RlclJlcXVlc3RJZCwKLSAgICAgICAgICAgICAgICAgICAgQ0xJRU5UX1ZFUlNJT05fQ1VSUkVOVCwgbnVsbCwgbnVsbCkpIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIHRyeSB7Ci0gICAgICAgICAgICAgICAgbVNlcnZpY2VNZXNzZW5nZXIuZ2V0QmluZGVyKCkubGlua1RvRGVhdGgodGhpcywgMCk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgICAgICB9IGNhdGNoIChSZW1vdGVFeGNlcHRpb24gZXgpIHsKLSAgICAgICAgICAgICAgICBiaW5kZXJEaWVkKCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0KLQotICAgICAgICBwdWJsaWMgdm9pZCBkaXNwb3NlKCkgewotICAgICAgICAgICAgc2VuZFJlcXVlc3QoQ0xJRU5UX01TR19VTlJFR0lTVEVSLCAwLCAwLCBudWxsLCBudWxsKTsKLSAgICAgICAgICAgIG1SZWNlaXZlSGFuZGxlci5kaXNwb3NlKCk7Ci0gICAgICAgICAgICBtU2VydmljZU1lc3Nlbmdlci5nZXRCaW5kZXIoKS51bmxpbmtUb0RlYXRoKHRoaXMsIDApOwotCi0gICAgICAgICAgICBtUHJpdmF0ZUhhbmRsZXIucG9zdChuZXcgUnVubmFibGUoKSB7Ci0gICAgICAgICAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgICAgICAgICAgcHVibGljIHZvaWQgcnVuKCkgewotICAgICAgICAgICAgICAgICAgICBmYWlsUGVuZGluZ0NhbGxiYWNrcygpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0pOwotICAgICAgICB9Ci0KLSAgICAgICAgdm9pZCBmYWlsUGVuZGluZ0NhbGxiYWNrcygpIHsKLSAgICAgICAgICAgIGludCBjb3VudCA9IDA7Ci0gICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IG1QZW5kaW5nQ2FsbGJhY2tzLnNpemUoKTsgaSsrKSB7Ci0gICAgICAgICAgICAgICAgbVBlbmRpbmdDYWxsYmFja3MudmFsdWVBdChpKS5vbkVycm9yKG51bGwsIG51bGwpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgbVBlbmRpbmdDYWxsYmFja3MuY2xlYXIoKTsKLSAgICAgICAgfQotCi0gICAgICAgIHB1YmxpYyBib29sZWFuIG9uR2VuZXJpY0ZhaWx1cmUoaW50IHJlcXVlc3RJZCkgewotICAgICAgICAgICAgaWYgKHJlcXVlc3RJZCA9PSBtUGVuZGluZ1JlZ2lzdGVyUmVxdWVzdElkKSB7Ci0gICAgICAgICAgICAgICAgbVBlbmRpbmdSZWdpc3RlclJlcXVlc3RJZCA9IDA7Ci0gICAgICAgICAgICAgICAgb25Db25uZWN0aW9uRXJyb3IodGhpcywgIlJlZ2lzdHJhdGlvbiBmYWlsZWQiKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIENvbnRyb2xSZXF1ZXN0Q2FsbGJhY2sgY2FsbGJhY2sgPSBtUGVuZGluZ0NhbGxiYWNrcy5nZXQocmVxdWVzdElkKTsKLSAgICAgICAgICAgIGlmIChjYWxsYmFjayAhPSBudWxsKSB7Ci0gICAgICAgICAgICAgICAgbVBlbmRpbmdDYWxsYmFja3MucmVtb3ZlKHJlcXVlc3RJZCk7Ci0gICAgICAgICAgICAgICAgY2FsbGJhY2sub25FcnJvcihudWxsLCBudWxsKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICB9Ci0KLSAgICAgICAgcHVibGljIGJvb2xlYW4gb25HZW5lcmljU3VjY2VzcyhpbnQgcmVxdWVzdElkKSB7Ci0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgfQotCi0gICAgICAgIHB1YmxpYyBib29sZWFuIG9uUmVnaXN0ZXJlZChpbnQgcmVxdWVzdElkLCBpbnQgc2VydmljZVZlcnNpb24sCi0gICAgICAgICAgICAgICAgQnVuZGxlIGRlc2NyaXB0b3JCdW5kbGUpIHsKLSAgICAgICAgICAgIGlmIChtU2VydmljZVZlcnNpb24gPT0gMAotICAgICAgICAgICAgICAgICAgICAmJiByZXF1ZXN0SWQgPT0gbVBlbmRpbmdSZWdpc3RlclJlcXVlc3RJZAotICAgICAgICAgICAgICAgICAgICAmJiBzZXJ2aWNlVmVyc2lvbiA+PSBTRVJWSUNFX1ZFUlNJT05fMSkgewotICAgICAgICAgICAgICAgIG1QZW5kaW5nUmVnaXN0ZXJSZXF1ZXN0SWQgPSAwOwotICAgICAgICAgICAgICAgIG1TZXJ2aWNlVmVyc2lvbiA9IHNlcnZpY2VWZXJzaW9uOwotICAgICAgICAgICAgICAgIG9uQ29ubmVjdGlvbkRlc2NyaXB0b3JDaGFuZ2VkKHRoaXMsCi0gICAgICAgICAgICAgICAgICAgICAgICBNZWRpYVJvdXRlUHJvdmlkZXJEZXNjcmlwdG9yLmZyb21CdW5kbGUoZGVzY3JpcHRvckJ1bmRsZSkpOwotICAgICAgICAgICAgICAgIG9uQ29ubmVjdGlvblJlYWR5KHRoaXMpOwotICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9Ci0KLSAgICAgICAgcHVibGljIGJvb2xlYW4gb25EZXNjcmlwdG9yQ2hhbmdlZChCdW5kbGUgZGVzY3JpcHRvckJ1bmRsZSkgewotICAgICAgICAgICAgaWYgKG1TZXJ2aWNlVmVyc2lvbiAhPSAwKSB7Ci0gICAgICAgICAgICAgICAgb25Db25uZWN0aW9uRGVzY3JpcHRvckNoYW5nZWQodGhpcywKLSAgICAgICAgICAgICAgICAgICAgICAgIE1lZGlhUm91dGVQcm92aWRlckRlc2NyaXB0b3IuZnJvbUJ1bmRsZShkZXNjcmlwdG9yQnVuZGxlKSk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0KLQotICAgICAgICBwdWJsaWMgYm9vbGVhbiBvbkNvbnRyb2xSZXF1ZXN0U3VjY2VlZGVkKGludCByZXF1ZXN0SWQsIEJ1bmRsZSBkYXRhKSB7Ci0gICAgICAgICAgICBDb250cm9sUmVxdWVzdENhbGxiYWNrIGNhbGxiYWNrID0gbVBlbmRpbmdDYWxsYmFja3MuZ2V0KHJlcXVlc3RJZCk7Ci0gICAgICAgICAgICBpZiAoY2FsbGJhY2sgIT0gbnVsbCkgewotICAgICAgICAgICAgICAgIG1QZW5kaW5nQ2FsbGJhY2tzLnJlbW92ZShyZXF1ZXN0SWQpOwotICAgICAgICAgICAgICAgIGNhbGxiYWNrLm9uUmVzdWx0KGRhdGEpOwotICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9Ci0KLSAgICAgICAgcHVibGljIGJvb2xlYW4gb25Db250cm9sUmVxdWVzdEZhaWxlZChpbnQgcmVxdWVzdElkLCBTdHJpbmcgZXJyb3IsIEJ1bmRsZSBkYXRhKSB7Ci0gICAgICAgICAgICBDb250cm9sUmVxdWVzdENhbGxiYWNrIGNhbGxiYWNrID0gbVBlbmRpbmdDYWxsYmFja3MuZ2V0KHJlcXVlc3RJZCk7Ci0gICAgICAgICAgICBpZiAoY2FsbGJhY2sgIT0gbnVsbCkgewotICAgICAgICAgICAgICAgIG1QZW5kaW5nQ2FsbGJhY2tzLnJlbW92ZShyZXF1ZXN0SWQpOwotICAgICAgICAgICAgICAgIGNhbGxiYWNrLm9uRXJyb3IoZXJyb3IsIGRhdGEpOwotICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9Ci0KLSAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgIHB1YmxpYyB2b2lkIGJpbmRlckRpZWQoKSB7Ci0gICAgICAgICAgICBtUHJpdmF0ZUhhbmRsZXIucG9zdChuZXcgUnVubmFibGUoKSB7Ci0gICAgICAgICAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgICAgICAgICAgcHVibGljIHZvaWQgcnVuKCkgewotICAgICAgICAgICAgICAgICAgICBvbkNvbm5lY3Rpb25EaWVkKENvbm5lY3Rpb24udGhpcyk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfSk7Ci0gICAgICAgIH0KLQotICAgICAgICBwdWJsaWMgaW50IGNyZWF0ZVJvdXRlQ29udHJvbGxlcihTdHJpbmcgcm91dGVJZCwgU3RyaW5nIHJvdXRlR3JvdXBJZCkgewotICAgICAgICAgICAgaW50IGNvbnRyb2xsZXJJZCA9IG1OZXh0Q29udHJvbGxlcklkKys7Ci0gICAgICAgICAgICBCdW5kbGUgZGF0YSA9IG5ldyBCdW5kbGUoKTsKLSAgICAgICAgICAgIGRhdGEucHV0U3RyaW5nKENMSUVOVF9EQVRBX1JPVVRFX0lELCByb3V0ZUlkKTsKLSAgICAgICAgICAgIGRhdGEucHV0U3RyaW5nKENMSUVOVF9EQVRBX1JPVVRFX0xJQlJBUllfR1JPVVAsIHJvdXRlR3JvdXBJZCk7Ci0gICAgICAgICAgICBzZW5kUmVxdWVzdChDTElFTlRfTVNHX0NSRUFURV9ST1VURV9DT05UUk9MTEVSLAotICAgICAgICAgICAgICAgICAgICBtTmV4dFJlcXVlc3RJZCsrLCBjb250cm9sbGVySWQsIG51bGwsIGRhdGEpOwotICAgICAgICAgICAgcmV0dXJuIGNvbnRyb2xsZXJJZDsKLSAgICAgICAgfQotCi0gICAgICAgIHB1YmxpYyB2b2lkIHJlbGVhc2VSb3V0ZUNvbnRyb2xsZXIoaW50IGNvbnRyb2xsZXJJZCkgewotICAgICAgICAgICAgc2VuZFJlcXVlc3QoQ0xJRU5UX01TR19SRUxFQVNFX1JPVVRFX0NPTlRST0xMRVIsCi0gICAgICAgICAgICAgICAgICAgIG1OZXh0UmVxdWVzdElkKyssIGNvbnRyb2xsZXJJZCwgbnVsbCwgbnVsbCk7Ci0gICAgICAgIH0KLQotICAgICAgICBwdWJsaWMgdm9pZCBzZWxlY3RSb3V0ZShpbnQgY29udHJvbGxlcklkKSB7Ci0gICAgICAgICAgICBzZW5kUmVxdWVzdChDTElFTlRfTVNHX1NFTEVDVF9ST1VURSwKLSAgICAgICAgICAgICAgICAgICAgbU5leHRSZXF1ZXN0SWQrKywgY29udHJvbGxlcklkLCBudWxsLCBudWxsKTsKLSAgICAgICAgfQotCi0gICAgICAgIHB1YmxpYyB2b2lkIHVuc2VsZWN0Um91dGUoaW50IGNvbnRyb2xsZXJJZCwgaW50IHJlYXNvbikgewotICAgICAgICAgICAgQnVuZGxlIGV4dHJhcyA9IG5ldyBCdW5kbGUoKTsKLSAgICAgICAgICAgIGV4dHJhcy5wdXRJbnQoQ0xJRU5UX0RBVEFfVU5TRUxFQ1RfUkVBU09OLCByZWFzb24pOwotICAgICAgICAgICAgc2VuZFJlcXVlc3QoQ0xJRU5UX01TR19VTlNFTEVDVF9ST1VURSwKLSAgICAgICAgICAgICAgICAgICAgbU5leHRSZXF1ZXN0SWQrKywgY29udHJvbGxlcklkLCBudWxsLCBleHRyYXMpOwotICAgICAgICB9Ci0KLSAgICAgICAgcHVibGljIHZvaWQgc2V0Vm9sdW1lKGludCBjb250cm9sbGVySWQsIGludCB2b2x1bWUpIHsKLSAgICAgICAgICAgIEJ1bmRsZSBkYXRhID0gbmV3IEJ1bmRsZSgpOwotICAgICAgICAgICAgZGF0YS5wdXRJbnQoQ0xJRU5UX0RBVEFfVk9MVU1FLCB2b2x1bWUpOwotICAgICAgICAgICAgc2VuZFJlcXVlc3QoQ0xJRU5UX01TR19TRVRfUk9VVEVfVk9MVU1FLAotICAgICAgICAgICAgICAgICAgICBtTmV4dFJlcXVlc3RJZCsrLCBjb250cm9sbGVySWQsIG51bGwsIGRhdGEpOwotICAgICAgICB9Ci0KLSAgICAgICAgcHVibGljIHZvaWQgdXBkYXRlVm9sdW1lKGludCBjb250cm9sbGVySWQsIGludCBkZWx0YSkgewotICAgICAgICAgICAgQnVuZGxlIGRhdGEgPSBuZXcgQnVuZGxlKCk7Ci0gICAgICAgICAgICBkYXRhLnB1dEludChDTElFTlRfREFUQV9WT0xVTUUsIGRlbHRhKTsKLSAgICAgICAgICAgIHNlbmRSZXF1ZXN0KENMSUVOVF9NU0dfVVBEQVRFX1JPVVRFX1ZPTFVNRSwKLSAgICAgICAgICAgICAgICAgICAgbU5leHRSZXF1ZXN0SWQrKywgY29udHJvbGxlcklkLCBudWxsLCBkYXRhKTsKLSAgICAgICAgfQotCi0gICAgICAgIHB1YmxpYyBib29sZWFuIHNlbmRDb250cm9sUmVxdWVzdChpbnQgY29udHJvbGxlcklkLCBJbnRlbnQgaW50ZW50LAotICAgICAgICAgICAgICAgIENvbnRyb2xSZXF1ZXN0Q2FsbGJhY2sgY2FsbGJhY2spIHsKLSAgICAgICAgICAgIGludCByZXF1ZXN0SWQgPSBtTmV4dFJlcXVlc3RJZCsrOwotICAgICAgICAgICAgaWYgKHNlbmRSZXF1ZXN0KENMSUVOVF9NU0dfUk9VVEVfQ09OVFJPTF9SRVFVRVNULAotICAgICAgICAgICAgICAgICAgICByZXF1ZXN0SWQsIGNvbnRyb2xsZXJJZCwgaW50ZW50LCBudWxsKSkgewotICAgICAgICAgICAgICAgIGlmIChjYWxsYmFjayAhPSBudWxsKSB7Ci0gICAgICAgICAgICAgICAgICAgIG1QZW5kaW5nQ2FsbGJhY2tzLnB1dChyZXF1ZXN0SWQsIGNhbGxiYWNrKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0KLQotICAgICAgICBwdWJsaWMgdm9pZCBzZXREaXNjb3ZlcnlSZXF1ZXN0KE1lZGlhUm91dGVEaXNjb3ZlcnlSZXF1ZXN0IHJlcXVlc3QpIHsKLSAgICAgICAgICAgIHNlbmRSZXF1ZXN0KENMSUVOVF9NU0dfU0VUX0RJU0NPVkVSWV9SRVFVRVNULAotICAgICAgICAgICAgICAgICAgICBtTmV4dFJlcXVlc3RJZCsrLCAwLCByZXF1ZXN0ICE9IG51bGwgPyByZXF1ZXN0LmFzQnVuZGxlKCkgOiBudWxsLCBudWxsKTsKLSAgICAgICAgfQotCi0gICAgICAgIHByaXZhdGUgYm9vbGVhbiBzZW5kUmVxdWVzdChpbnQgd2hhdCwgaW50IHJlcXVlc3RJZCwgaW50IGFyZywgT2JqZWN0IG9iaiwgQnVuZGxlIGRhdGEpIHsKLSAgICAgICAgICAgIE1lc3NhZ2UgbXNnID0gTWVzc2FnZS5vYnRhaW4oKTsKLSAgICAgICAgICAgIG1zZy53aGF0ID0gd2hhdDsKLSAgICAgICAgICAgIG1zZy5hcmcxID0gcmVxdWVzdElkOwotICAgICAgICAgICAgbXNnLmFyZzIgPSBhcmc7Ci0gICAgICAgICAgICBtc2cub2JqID0gb2JqOwotICAgICAgICAgICAgbXNnLnNldERhdGEoZGF0YSk7Ci0gICAgICAgICAgICBtc2cucmVwbHlUbyA9IG1SZWNlaXZlTWVzc2VuZ2VyOwotICAgICAgICAgICAgdHJ5IHsKLSAgICAgICAgICAgICAgICBtU2VydmljZU1lc3Nlbmdlci5zZW5kKG1zZyk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgICAgICB9IGNhdGNoIChEZWFkT2JqZWN0RXhjZXB0aW9uIGV4KSB7Ci0gICAgICAgICAgICAgICAgLy8gVGhlIHNlcnZpY2UgZGllZC4KLSAgICAgICAgICAgIH0gY2F0Y2ggKFJlbW90ZUV4Y2VwdGlvbiBleCkgewotICAgICAgICAgICAgICAgIGlmICh3aGF0ICE9IENMSUVOVF9NU0dfVU5SRUdJU1RFUikgewotICAgICAgICAgICAgICAgICAgICBMb2cuZShUQUcsICJDb3VsZCBub3Qgc2VuZCBtZXNzYWdlIHRvIHNlcnZpY2UuIiwgZXgpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGNsYXNzIFByaXZhdGVIYW5kbGVyIGV4dGVuZHMgSGFuZGxlciB7Ci0gICAgICAgIFByaXZhdGVIYW5kbGVyKCkgewotICAgICAgICB9Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogSGFuZGxlciB0aGF0IHJlY2VpdmVzIG1lc3NhZ2VzIGZyb20gdGhlIHNlcnZlci4KLSAgICAgKiA8cD4KLSAgICAgKiBUaGlzIGlubmVyIGNsYXNzIGlzIHN0YXRpYyBhbmQgb25seSByZXRhaW5zIGEgd2VhayByZWZlcmVuY2UgdG8gdGhlIGNvbm5lY3Rpb24KLSAgICAgKiB0byBwcmV2ZW50IHRoZSBjbGllbnQgZnJvbSBiZWluZyBsZWFrZWQgaW4gY2FzZSB0aGUgc2VydmljZSBpcyBob2xkaW5nIGFuCi0gICAgICogYWN0aXZlIHJlZmVyZW5jZSB0byB0aGUgY2xpZW50J3MgbWVzc2VuZ2VyLgotICAgICAqIDwvcD48cD4KLSAgICAgKiBUaGlzIGhhbmRsZXIgc2hvdWxkIG5vdCBiZSB1c2VkIHRvIGhhbmRsZSBhbnkgbWVzc2FnZXMgb3RoZXIgdGhhbiB0aG9zZQotICAgICAqIHRoYXQgY29tZSBmcm9tIHRoZSBzZXJ2aWNlLgotICAgICAqIDwvcD4KLSAgICAgKi8KLSAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBjbGFzcyBSZWNlaXZlSGFuZGxlciBleHRlbmRzIEhhbmRsZXIgewotICAgICAgICBwcml2YXRlIGZpbmFsIFdlYWtSZWZlcmVuY2U8Q29ubmVjdGlvbj4gbUNvbm5lY3Rpb25SZWY7Ci0KLSAgICAgICAgcHVibGljIFJlY2VpdmVIYW5kbGVyKENvbm5lY3Rpb24gY29ubmVjdGlvbikgewotICAgICAgICAgICAgbUNvbm5lY3Rpb25SZWYgPSBuZXcgV2Vha1JlZmVyZW5jZTxDb25uZWN0aW9uPihjb25uZWN0aW9uKTsKLSAgICAgICAgfQotCi0gICAgICAgIHB1YmxpYyB2b2lkIGRpc3Bvc2UoKSB7Ci0gICAgICAgICAgICBtQ29ubmVjdGlvblJlZi5jbGVhcigpOwotICAgICAgICB9Ci0KLSAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgIHB1YmxpYyB2b2lkIGhhbmRsZU1lc3NhZ2UoTWVzc2FnZSBtc2cpIHsKLSAgICAgICAgICAgIENvbm5lY3Rpb24gY29ubmVjdGlvbiA9IG1Db25uZWN0aW9uUmVmLmdldCgpOwotICAgICAgICAgICAgaWYgKGNvbm5lY3Rpb24gIT0gbnVsbCkgewotICAgICAgICAgICAgICAgIGZpbmFsIGludCB3aGF0ID0gbXNnLndoYXQ7Ci0gICAgICAgICAgICAgICAgZmluYWwgaW50IHJlcXVlc3RJZCA9IG1zZy5hcmcxOwotICAgICAgICAgICAgICAgIGZpbmFsIGludCBhcmcgPSBtc2cuYXJnMjsKLSAgICAgICAgICAgICAgICBmaW5hbCBPYmplY3Qgb2JqID0gbXNnLm9iajsKLSAgICAgICAgICAgICAgICBmaW5hbCBCdW5kbGUgZGF0YSA9IG1zZy5wZWVrRGF0YSgpOwotICAgICAgICAgICAgICAgIGlmICghcHJvY2Vzc01lc3NhZ2UoY29ubmVjdGlvbiwgd2hhdCwgcmVxdWVzdElkLCBhcmcsIG9iaiwgZGF0YSkpIHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKERFQlVHKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBMb2cuZChUQUcsICJVbmhhbmRsZWQgbWVzc2FnZSBmcm9tIHNlcnZlcjogIiArIG1zZyk7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICBwcml2YXRlIGJvb2xlYW4gcHJvY2Vzc01lc3NhZ2UoQ29ubmVjdGlvbiBjb25uZWN0aW9uLAotICAgICAgICAgICAgICAgIGludCB3aGF0LCBpbnQgcmVxdWVzdElkLCBpbnQgYXJnLCBPYmplY3Qgb2JqLCBCdW5kbGUgZGF0YSkgewotICAgICAgICAgICAgc3dpdGNoICh3aGF0KSB7Ci0gICAgICAgICAgICAgICAgY2FzZSBTRVJWSUNFX01TR19HRU5FUklDX0ZBSUxVUkU6Ci0gICAgICAgICAgICAgICAgICAgIGNvbm5lY3Rpb24ub25HZW5lcmljRmFpbHVyZShyZXF1ZXN0SWQpOwotICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLQotICAgICAgICAgICAgICAgIGNhc2UgU0VSVklDRV9NU0dfR0VORVJJQ19TVUNDRVNTOgotICAgICAgICAgICAgICAgICAgICBjb25uZWN0aW9uLm9uR2VuZXJpY1N1Y2Nlc3MocmVxdWVzdElkKTsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0KLSAgICAgICAgICAgICAgICBjYXNlIFNFUlZJQ0VfTVNHX1JFR0lTVEVSRUQ6Ci0gICAgICAgICAgICAgICAgICAgIGlmIChvYmogPT0gbnVsbCB8fCBvYmogaW5zdGFuY2VvZiBCdW5kbGUpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBjb25uZWN0aW9uLm9uUmVnaXN0ZXJlZChyZXF1ZXN0SWQsIGFyZywgKEJ1bmRsZSlvYmopOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgICAgICAgICAgY2FzZSBTRVJWSUNFX01TR19ERVNDUklQVE9SX0NIQU5HRUQ6Ci0gICAgICAgICAgICAgICAgICAgIGlmIChvYmogPT0gbnVsbCB8fCBvYmogaW5zdGFuY2VvZiBCdW5kbGUpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBjb25uZWN0aW9uLm9uRGVzY3JpcHRvckNoYW5nZWQoKEJ1bmRsZSlvYmopOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgICAgICAgICAgY2FzZSBTRVJWSUNFX01TR19DT05UUk9MX1JFUVVFU1RfU1VDQ0VFREVEOgotICAgICAgICAgICAgICAgICAgICBpZiAob2JqID09IG51bGwgfHwgb2JqIGluc3RhbmNlb2YgQnVuZGxlKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gY29ubmVjdGlvbi5vbkNvbnRyb2xSZXF1ZXN0U3VjY2VlZGVkKAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXF1ZXN0SWQsIChCdW5kbGUpb2JqKTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICBicmVhazsKLQotICAgICAgICAgICAgICAgIGNhc2UgU0VSVklDRV9NU0dfQ09OVFJPTF9SRVFVRVNUX0ZBSUxFRDoKLSAgICAgICAgICAgICAgICAgICAgaWYgKG9iaiA9PSBudWxsIHx8IG9iaiBpbnN0YW5jZW9mIEJ1bmRsZSkgewotICAgICAgICAgICAgICAgICAgICAgICAgU3RyaW5nIGVycm9yID0gKGRhdGEgPT0gbnVsbCA/IG51bGwgOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhLmdldFN0cmluZyhTRVJWSUNFX0RBVEFfRVJST1IpKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBjb25uZWN0aW9uLm9uQ29udHJvbFJlcXVlc3RGYWlsZWQoCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlcXVlc3RJZCwgZXJyb3IsIChCdW5kbGUpb2JqKTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgfQotICAgIH0KLX0KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL01lZGlhQ29tcG9uZW50cy9zcmMvY29tL2FuZHJvaWQvc3VwcG9ydC9tZWRpYXJvdXRlci9tZWRpYS9SZWdpc3RlcmVkTWVkaWFSb3V0ZVByb3ZpZGVyV2F0Y2hlci5qYXZhIGIvcGFja2FnZXMvTWVkaWFDb21wb25lbnRzL3NyYy9jb20vYW5kcm9pZC9zdXBwb3J0L21lZGlhcm91dGVyL21lZGlhL1JlZ2lzdGVyZWRNZWRpYVJvdXRlUHJvdmlkZXJXYXRjaGVyLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGJhMWY2NDcuLjAwMDAwMDAKLS0tIGEvcGFja2FnZXMvTWVkaWFDb21wb25lbnRzL3NyYy9jb20vYW5kcm9pZC9zdXBwb3J0L21lZGlhcm91dGVyL21lZGlhL1JlZ2lzdGVyZWRNZWRpYVJvdXRlUHJvdmlkZXJXYXRjaGVyLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxNTcgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAyMDE4IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKLSAqCi0gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKLSAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KLSAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotICoKLSAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0gKgotICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQotICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKLSAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgotICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAotICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCi0gKi8KLQotcGFja2FnZSBjb20uYW5kcm9pZC5zdXBwb3J0Lm1lZGlhcm91dGVyLm1lZGlhOwotCi1pbXBvcnQgYW5kcm9pZC5jb250ZW50LkJyb2FkY2FzdFJlY2VpdmVyOwotaW1wb3J0IGFuZHJvaWQuY29udGVudC5Db21wb25lbnROYW1lOwotaW1wb3J0IGFuZHJvaWQuY29udGVudC5Db250ZXh0OwotaW1wb3J0IGFuZHJvaWQuY29udGVudC5JbnRlbnQ7Ci1pbXBvcnQgYW5kcm9pZC5jb250ZW50LkludGVudEZpbHRlcjsKLWltcG9ydCBhbmRyb2lkLmNvbnRlbnQucG0uUGFja2FnZU1hbmFnZXI7Ci1pbXBvcnQgYW5kcm9pZC5jb250ZW50LnBtLlJlc29sdmVJbmZvOwotaW1wb3J0IGFuZHJvaWQuY29udGVudC5wbS5TZXJ2aWNlSW5mbzsKLWltcG9ydCBhbmRyb2lkLm9zLkhhbmRsZXI7Ci0KLWltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OwotaW1wb3J0IGphdmEudXRpbC5Db2xsZWN0aW9uczsKLQotLyoqCi0gKiBXYXRjaGVzIGZvciBtZWRpYSByb3V0ZSBwcm92aWRlciBzZXJ2aWNlcyB0byBiZSBpbnN0YWxsZWQuCi0gKiBBZGRzIGEgcHJvdmlkZXIgdG8gdGhlIG1lZGlhIHJvdXRlciBmb3IgZWFjaCByZWdpc3RlcmVkIHNlcnZpY2UuCi0gKgotICogQHNlZSBSZWdpc3RlcmVkTWVkaWFSb3V0ZVByb3ZpZGVyCi0gKi8KLWZpbmFsIGNsYXNzIFJlZ2lzdGVyZWRNZWRpYVJvdXRlUHJvdmlkZXJXYXRjaGVyIHsKLSAgICBwcml2YXRlIGZpbmFsIENvbnRleHQgbUNvbnRleHQ7Ci0gICAgcHJpdmF0ZSBmaW5hbCBDYWxsYmFjayBtQ2FsbGJhY2s7Ci0gICAgcHJpdmF0ZSBmaW5hbCBIYW5kbGVyIG1IYW5kbGVyOwotICAgIHByaXZhdGUgZmluYWwgUGFja2FnZU1hbmFnZXIgbVBhY2thZ2VNYW5hZ2VyOwotCi0gICAgcHJpdmF0ZSBmaW5hbCBBcnJheUxpc3Q8UmVnaXN0ZXJlZE1lZGlhUm91dGVQcm92aWRlcj4gbVByb3ZpZGVycyA9Ci0gICAgICAgICAgICBuZXcgQXJyYXlMaXN0PFJlZ2lzdGVyZWRNZWRpYVJvdXRlUHJvdmlkZXI+KCk7Ci0gICAgcHJpdmF0ZSBib29sZWFuIG1SdW5uaW5nOwotCi0gICAgcHVibGljIFJlZ2lzdGVyZWRNZWRpYVJvdXRlUHJvdmlkZXJXYXRjaGVyKENvbnRleHQgY29udGV4dCwgQ2FsbGJhY2sgY2FsbGJhY2spIHsKLSAgICAgICAgbUNvbnRleHQgPSBjb250ZXh0OwotICAgICAgICBtQ2FsbGJhY2sgPSBjYWxsYmFjazsKLSAgICAgICAgbUhhbmRsZXIgPSBuZXcgSGFuZGxlcigpOwotICAgICAgICBtUGFja2FnZU1hbmFnZXIgPSBjb250ZXh0LmdldFBhY2thZ2VNYW5hZ2VyKCk7Ci0gICAgfQotCi0gICAgcHVibGljIHZvaWQgc3RhcnQoKSB7Ci0gICAgICAgIGlmICghbVJ1bm5pbmcpIHsKLSAgICAgICAgICAgIG1SdW5uaW5nID0gdHJ1ZTsKLQotICAgICAgICAgICAgSW50ZW50RmlsdGVyIGZpbHRlciA9IG5ldyBJbnRlbnRGaWx0ZXIoKTsKLSAgICAgICAgICAgIGZpbHRlci5hZGRBY3Rpb24oSW50ZW50LkFDVElPTl9QQUNLQUdFX0FEREVEKTsKLSAgICAgICAgICAgIGZpbHRlci5hZGRBY3Rpb24oSW50ZW50LkFDVElPTl9QQUNLQUdFX1JFTU9WRUQpOwotICAgICAgICAgICAgZmlsdGVyLmFkZEFjdGlvbihJbnRlbnQuQUNUSU9OX1BBQ0tBR0VfQ0hBTkdFRCk7Ci0gICAgICAgICAgICBmaWx0ZXIuYWRkQWN0aW9uKEludGVudC5BQ1RJT05fUEFDS0FHRV9SRVBMQUNFRCk7Ci0gICAgICAgICAgICBmaWx0ZXIuYWRkQWN0aW9uKEludGVudC5BQ1RJT05fUEFDS0FHRV9SRVNUQVJURUQpOwotICAgICAgICAgICAgZmlsdGVyLmFkZERhdGFTY2hlbWUoInBhY2thZ2UiKTsKLSAgICAgICAgICAgIG1Db250ZXh0LnJlZ2lzdGVyUmVjZWl2ZXIobVNjYW5QYWNrYWdlc1JlY2VpdmVyLCBmaWx0ZXIsIG51bGwsIG1IYW5kbGVyKTsKLQotICAgICAgICAgICAgLy8gU2NhbiBwYWNrYWdlcy4KLSAgICAgICAgICAgIC8vIEFsc28gaGFzIHRoZSBzaWRlLWVmZmVjdCBvZiByZXN0YXJ0aW5nIHByb3ZpZGVycyBpZiBuZWVkZWQuCi0gICAgICAgICAgICBtSGFuZGxlci5wb3N0KG1TY2FuUGFja2FnZXNSdW5uYWJsZSk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBwdWJsaWMgdm9pZCBzdG9wKCkgewotICAgICAgICBpZiAobVJ1bm5pbmcpIHsKLSAgICAgICAgICAgIG1SdW5uaW5nID0gZmFsc2U7Ci0KLSAgICAgICAgICAgIG1Db250ZXh0LnVucmVnaXN0ZXJSZWNlaXZlcihtU2NhblBhY2thZ2VzUmVjZWl2ZXIpOwotICAgICAgICAgICAgbUhhbmRsZXIucmVtb3ZlQ2FsbGJhY2tzKG1TY2FuUGFja2FnZXNSdW5uYWJsZSk7Ci0KLSAgICAgICAgICAgIC8vIFN0b3AgYWxsIHByb3ZpZGVycy4KLSAgICAgICAgICAgIGZvciAoaW50IGkgPSBtUHJvdmlkZXJzLnNpemUoKSAtIDE7IGkgPj0gMDsgaS0tKSB7Ci0gICAgICAgICAgICAgICAgbVByb3ZpZGVycy5nZXQoaSkuc3RvcCgpOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotCi0gICAgdm9pZCBzY2FuUGFja2FnZXMoKSB7Ci0gICAgICAgIGlmICghbVJ1bm5pbmcpIHsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotCi0gICAgICAgIC8vIEFkZCBwcm92aWRlcnMgZm9yIGFsbCBuZXcgc2VydmljZXMuCi0gICAgICAgIC8vIFJlb3JkZXIgdGhlIGxpc3Qgc28gdGhhdCBwcm92aWRlcnMgbGVmdCBhdCB0aGUgZW5kIHdpbGwgYmUgdGhlIG9uZXMgdG8gcmVtb3ZlLgotICAgICAgICBpbnQgdGFyZ2V0SW5kZXggPSAwOwotICAgICAgICBJbnRlbnQgaW50ZW50ID0gbmV3IEludGVudChNZWRpYVJvdXRlUHJvdmlkZXJTZXJ2aWNlLlNFUlZJQ0VfSU5URVJGQUNFKTsKLSAgICAgICAgZm9yIChSZXNvbHZlSW5mbyByZXNvbHZlSW5mbyA6IG1QYWNrYWdlTWFuYWdlci5xdWVyeUludGVudFNlcnZpY2VzKGludGVudCwgMCkpIHsKLSAgICAgICAgICAgIFNlcnZpY2VJbmZvIHNlcnZpY2VJbmZvID0gcmVzb2x2ZUluZm8uc2VydmljZUluZm87Ci0gICAgICAgICAgICBpZiAoc2VydmljZUluZm8gIT0gbnVsbCkgewotICAgICAgICAgICAgICAgIGludCBzb3VyY2VJbmRleCA9IGZpbmRQcm92aWRlcihzZXJ2aWNlSW5mby5wYWNrYWdlTmFtZSwgc2VydmljZUluZm8ubmFtZSk7Ci0gICAgICAgICAgICAgICAgaWYgKHNvdXJjZUluZGV4IDwgMCkgewotICAgICAgICAgICAgICAgICAgICBSZWdpc3RlcmVkTWVkaWFSb3V0ZVByb3ZpZGVyIHByb3ZpZGVyID0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXcgUmVnaXN0ZXJlZE1lZGlhUm91dGVQcm92aWRlcihtQ29udGV4dCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXcgQ29tcG9uZW50TmFtZShzZXJ2aWNlSW5mby5wYWNrYWdlTmFtZSwgc2VydmljZUluZm8ubmFtZSkpOwotICAgICAgICAgICAgICAgICAgICBwcm92aWRlci5zdGFydCgpOwotICAgICAgICAgICAgICAgICAgICBtUHJvdmlkZXJzLmFkZCh0YXJnZXRJbmRleCsrLCBwcm92aWRlcik7Ci0gICAgICAgICAgICAgICAgICAgIG1DYWxsYmFjay5hZGRQcm92aWRlcihwcm92aWRlcik7Ci0gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChzb3VyY2VJbmRleCA+PSB0YXJnZXRJbmRleCkgewotICAgICAgICAgICAgICAgICAgICBSZWdpc3RlcmVkTWVkaWFSb3V0ZVByb3ZpZGVyIHByb3ZpZGVyID0gbVByb3ZpZGVycy5nZXQoc291cmNlSW5kZXgpOwotICAgICAgICAgICAgICAgICAgICBwcm92aWRlci5zdGFydCgpOyAvLyByZXN0YXJ0IHRoZSBwcm92aWRlciBpZiBuZWVkZWQKLSAgICAgICAgICAgICAgICAgICAgcHJvdmlkZXIucmViaW5kSWZEaXNjb25uZWN0ZWQoKTsKLSAgICAgICAgICAgICAgICAgICAgQ29sbGVjdGlvbnMuc3dhcChtUHJvdmlkZXJzLCBzb3VyY2VJbmRleCwgdGFyZ2V0SW5kZXgrKyk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgLy8gUmVtb3ZlIHByb3ZpZGVycyBmb3IgbWlzc2luZyBzZXJ2aWNlcy4KLSAgICAgICAgaWYgKHRhcmdldEluZGV4IDwgbVByb3ZpZGVycy5zaXplKCkpIHsKLSAgICAgICAgICAgIGZvciAoaW50IGkgPSBtUHJvdmlkZXJzLnNpemUoKSAtIDE7IGkgPj0gdGFyZ2V0SW5kZXg7IGktLSkgewotICAgICAgICAgICAgICAgIFJlZ2lzdGVyZWRNZWRpYVJvdXRlUHJvdmlkZXIgcHJvdmlkZXIgPSBtUHJvdmlkZXJzLmdldChpKTsKLSAgICAgICAgICAgICAgICBtQ2FsbGJhY2sucmVtb3ZlUHJvdmlkZXIocHJvdmlkZXIpOwotICAgICAgICAgICAgICAgIG1Qcm92aWRlcnMucmVtb3ZlKHByb3ZpZGVyKTsKLSAgICAgICAgICAgICAgICBwcm92aWRlci5zdG9wKCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBwcml2YXRlIGludCBmaW5kUHJvdmlkZXIoU3RyaW5nIHBhY2thZ2VOYW1lLCBTdHJpbmcgY2xhc3NOYW1lKSB7Ci0gICAgICAgIGludCBjb3VudCA9IG1Qcm92aWRlcnMuc2l6ZSgpOwotICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGNvdW50OyBpKyspIHsKLSAgICAgICAgICAgIFJlZ2lzdGVyZWRNZWRpYVJvdXRlUHJvdmlkZXIgcHJvdmlkZXIgPSBtUHJvdmlkZXJzLmdldChpKTsKLSAgICAgICAgICAgIGlmIChwcm92aWRlci5oYXNDb21wb25lbnROYW1lKHBhY2thZ2VOYW1lLCBjbGFzc05hbWUpKSB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIC0xOwotICAgIH0KLQotICAgIHByaXZhdGUgZmluYWwgQnJvYWRjYXN0UmVjZWl2ZXIgbVNjYW5QYWNrYWdlc1JlY2VpdmVyID0gbmV3IEJyb2FkY2FzdFJlY2VpdmVyKCkgewotICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgcHVibGljIHZvaWQgb25SZWNlaXZlKENvbnRleHQgY29udGV4dCwgSW50ZW50IGludGVudCkgewotICAgICAgICAgICAgc2NhblBhY2thZ2VzKCk7Ci0gICAgICAgIH0KLSAgICB9OwotCi0gICAgcHJpdmF0ZSBmaW5hbCBSdW5uYWJsZSBtU2NhblBhY2thZ2VzUnVubmFibGUgPSBuZXcgUnVubmFibGUoKSB7Ci0gICAgICAgIEBPdmVycmlkZQotICAgICAgICBwdWJsaWMgdm9pZCBydW4oKSB7Ci0gICAgICAgICAgICBzY2FuUGFja2FnZXMoKTsKLSAgICAgICAgfQotICAgIH07Ci0KLSAgICBwdWJsaWMgaW50ZXJmYWNlIENhbGxiYWNrIHsKLSAgICAgICAgdm9pZCBhZGRQcm92aWRlcihNZWRpYVJvdXRlUHJvdmlkZXIgcHJvdmlkZXIpOwotICAgICAgICB2b2lkIHJlbW92ZVByb3ZpZGVyKE1lZGlhUm91dGVQcm92aWRlciBwcm92aWRlcik7Ci0gICAgfQotfQpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvTWVkaWFDb21wb25lbnRzL3NyYy9jb20vYW5kcm9pZC9zdXBwb3J0L21lZGlhcm91dGVyL21lZGlhL1JlbW90ZUNvbnRyb2xDbGllbnRDb21wYXQuamF2YSBiL3BhY2thZ2VzL01lZGlhQ29tcG9uZW50cy9zcmMvY29tL2FuZHJvaWQvc3VwcG9ydC9tZWRpYXJvdXRlci9tZWRpYS9SZW1vdGVDb250cm9sQ2xpZW50Q29tcGF0LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDgyNjQ0OWIuLjAwMDAwMDAKLS0tIGEvcGFja2FnZXMvTWVkaWFDb21wb25lbnRzL3NyYy9jb20vYW5kcm9pZC9zdXBwb3J0L21lZGlhcm91dGVyL21lZGlhL1JlbW90ZUNvbnRyb2xDbGllbnRDb21wYXQuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDE5MCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IDIwMTggVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAotICoKLSAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwotICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgotICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0gKgotICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLSAqCi0gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCi0gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAotICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCi0gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCi0gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KLSAqLwotcGFja2FnZSBjb20uYW5kcm9pZC5zdXBwb3J0Lm1lZGlhcm91dGVyLm1lZGlhOwotCi1pbXBvcnQgYW5kcm9pZC5jb250ZW50LkNvbnRleHQ7Ci1pbXBvcnQgYW5kcm9pZC5tZWRpYS5BdWRpb01hbmFnZXI7Ci1pbXBvcnQgYW5kcm9pZC5vcy5CdWlsZDsKLWltcG9ydCBhbmRyb2lkLnN1cHBvcnQuYW5ub3RhdGlvbi5SZXF1aXJlc0FwaTsKLQotaW1wb3J0IGphdmEubGFuZy5yZWYuV2Vha1JlZmVyZW5jZTsKLQotLyoqCi0gKiBQcm92aWRlcyBhY2Nlc3MgdG8gZmVhdHVyZXMgb2YgdGhlIHJlbW90ZSBjb250cm9sIGNsaWVudC4KLSAqCi0gKiBIaWRkZW4gZm9yIG5vdyBidXQgd2UgbWlnaHQgd2FudCB0byBtYWtlIHRoaXMgYXZhaWxhYmxlIHRvIGFwcGxpY2F0aW9ucwotICogaW4gdGhlIGZ1dHVyZS4KLSAqLwotYWJzdHJhY3QgY2xhc3MgUmVtb3RlQ29udHJvbENsaWVudENvbXBhdCB7Ci0gICAgcHJvdGVjdGVkIGZpbmFsIENvbnRleHQgbUNvbnRleHQ7Ci0gICAgcHJvdGVjdGVkIGZpbmFsIE9iamVjdCBtUmNjOwotICAgIHByb3RlY3RlZCBWb2x1bWVDYWxsYmFjayBtVm9sdW1lQ2FsbGJhY2s7Ci0KLSAgICBwcm90ZWN0ZWQgUmVtb3RlQ29udHJvbENsaWVudENvbXBhdChDb250ZXh0IGNvbnRleHQsIE9iamVjdCByY2MpIHsKLSAgICAgICAgbUNvbnRleHQgPSBjb250ZXh0OwotICAgICAgICBtUmNjID0gcmNjOwotICAgIH0KLQotICAgIHB1YmxpYyBzdGF0aWMgUmVtb3RlQ29udHJvbENsaWVudENvbXBhdCBvYnRhaW4oQ29udGV4dCBjb250ZXh0LCBPYmplY3QgcmNjKSB7Ci0gICAgICAgIGlmIChCdWlsZC5WRVJTSU9OLlNES19JTlQgPj0gMTYpIHsKLSAgICAgICAgICAgIHJldHVybiBuZXcgSmVsbHliZWFuSW1wbChjb250ZXh0LCByY2MpOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiBuZXcgTGVnYWN5SW1wbChjb250ZXh0LCByY2MpOwotICAgIH0KLQotICAgIHB1YmxpYyBPYmplY3QgZ2V0UmVtb3RlQ29udHJvbENsaWVudCgpIHsKLSAgICAgICAgcmV0dXJuIG1SY2M7Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogU2V0cyB0aGUgY3VycmVudCBwbGF5YmFjayBpbmZvcm1hdGlvbi4KLSAgICAgKiBNdXN0IGJlIGNhbGxlZCBhdCBsZWFzdCBvbmNlIHRvIGF0dGFjaCB0byB0aGUgcmVtb3RlIGNvbnRyb2wgY2xpZW50LgotICAgICAqCi0gICAgICogQHBhcmFtIGluZm8gVGhlIHBsYXliYWNrIGluZm9ybWF0aW9uLiAgTXVzdCBub3QgYmUgbnVsbC4KLSAgICAgKi8KLSAgICBwdWJsaWMgdm9pZCBzZXRQbGF5YmFja0luZm8oUGxheWJhY2tJbmZvIGluZm8pIHsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBTZXRzIGEgY2FsbGJhY2sgdG8gcmVjZWl2ZSB2b2x1bWUgY2hhbmdlIHJlcXVlc3RzIGZyb20gdGhlIHJlbW90ZSBjb250cm9sIGNsaWVudC4KLSAgICAgKgotICAgICAqIEBwYXJhbSBjYWxsYmFjayBUaGUgdm9sdW1lIGNhbGxiYWNrIHRvIHVzZSBvciBudWxsIGlmIG5vbmUuCi0gICAgICovCi0gICAgcHVibGljIHZvaWQgc2V0Vm9sdW1lQ2FsbGJhY2soVm9sdW1lQ2FsbGJhY2sgY2FsbGJhY2spIHsKLSAgICAgICAgbVZvbHVtZUNhbGxiYWNrID0gY2FsbGJhY2s7Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogU3BlY2lmaWVzIGluZm9ybWF0aW9uIGFib3V0IHRoZSBwbGF5YmFjay4KLSAgICAgKi8KLSAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGNsYXNzIFBsYXliYWNrSW5mbyB7Ci0gICAgICAgIHB1YmxpYyBpbnQgdm9sdW1lOwotICAgICAgICBwdWJsaWMgaW50IHZvbHVtZU1heDsKLSAgICAgICAgcHVibGljIGludCB2b2x1bWVIYW5kbGluZyA9IE1lZGlhUm91dGVyLlJvdXRlSW5mby5QTEFZQkFDS19WT0xVTUVfRklYRUQ7Ci0gICAgICAgIHB1YmxpYyBpbnQgcGxheWJhY2tTdHJlYW0gPSBBdWRpb01hbmFnZXIuU1RSRUFNX01VU0lDOwotICAgICAgICBwdWJsaWMgaW50IHBsYXliYWNrVHlwZSA9IE1lZGlhUm91dGVyLlJvdXRlSW5mby5QTEFZQkFDS19UWVBFX1JFTU9URTsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBDYWxsZWQgd2hlbiB2b2x1bWUgdXBkYXRlcyBhcmUgcmVxdWVzdGVkIGJ5IHRoZSByZW1vdGUgY29udHJvbCBjbGllbnQuCi0gICAgICovCi0gICAgcHVibGljIGludGVyZmFjZSBWb2x1bWVDYWxsYmFjayB7Ci0gICAgICAgIC8qKgotICAgICAgICAgKiBDYWxsZWQgd2hlbiB0aGUgdm9sdW1lIHNob3VsZCBiZSBpbmNyZWFzZWQgb3IgZGVjcmVhc2VkLgotICAgICAgICAgKgotICAgICAgICAgKiBAcGFyYW0gZGlyZWN0aW9uIEFuIGludGVnZXIgaW5kaWNhdGluZyB3aGV0aGVyIHRoZSB2b2x1bWUgaXMgdG8gYmUgaW5jcmVhc2VkCi0gICAgICAgICAqIChwb3NpdGl2ZSB2YWx1ZSkgb3IgZGVjcmVhc2VkIChuZWdhdGl2ZSB2YWx1ZSkuCi0gICAgICAgICAqIEZvciBidW5kbGVkIGNoYW5nZXMsIHRoZSBhYnNvbHV0ZSB2YWx1ZSBpbmRpY2F0ZXMgdGhlIG51bWJlciBvZiBjaGFuZ2VzCi0gICAgICAgICAqIGluIHRoZSBzYW1lIGRpcmVjdGlvbiwgZS5nLiArMyBjb3JyZXNwb25kcyB0byB0aHJlZSAidm9sdW1lIHVwIiBjaGFuZ2VzLgotICAgICAgICAgKi8KLSAgICAgICAgcHVibGljIHZvaWQgb25Wb2x1bWVVcGRhdGVSZXF1ZXN0KGludCBkaXJlY3Rpb24pOwotCi0gICAgICAgIC8qKgotICAgICAgICAgKiBDYWxsZWQgd2hlbiB0aGUgdm9sdW1lIGZvciB0aGUgcm91dGUgc2hvdWxkIGJlIHNldCB0byB0aGUgZ2l2ZW4gdmFsdWUuCi0gICAgICAgICAqCi0gICAgICAgICAqIEBwYXJhbSB2b2x1bWUgQW4gaW50ZWdlciBpbmRpY2F0aW5nIHRoZSBuZXcgdm9sdW1lIHZhbHVlIHRoYXQgc2hvdWxkIGJlIHVzZWQsCi0gICAgICAgICAqIGFsd2F5cyBiZXR3ZWVuIDAgYW5kIHRoZSB2YWx1ZSBzZXQgYnkge0BsaW5rIFBsYXliYWNrSW5mbyN2b2x1bWVNYXh9LgotICAgICAgICAgKi8KLSAgICAgICAgcHVibGljIHZvaWQgb25Wb2x1bWVTZXRSZXF1ZXN0KGludCB2b2x1bWUpOwotICAgIH0KLQotICAgIC8qKgotICAgICAqIExlZ2FjeSBpbXBsZW1lbnRhdGlvbiBmb3IgcGxhdGZvcm0gdmVyc2lvbnMgcHJpb3IgdG8gSmVsbHliZWFuLgotICAgICAqIERvZXMgbm90aGluZy4KLSAgICAgKi8KLSAgICBzdGF0aWMgY2xhc3MgTGVnYWN5SW1wbCBleHRlbmRzIFJlbW90ZUNvbnRyb2xDbGllbnRDb21wYXQgewotICAgICAgICBwdWJsaWMgTGVnYWN5SW1wbChDb250ZXh0IGNvbnRleHQsIE9iamVjdCByY2MpIHsKLSAgICAgICAgICAgIHN1cGVyKGNvbnRleHQsIHJjYyk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBJbXBsZW1lbnRhdGlvbiBmb3IgSmVsbHliZWFuLgotICAgICAqCi0gICAgICogVGhlIGJhc2ljIGlkZWEgb2YgdGhpcyBpbXBsZW1lbnRhdGlvbiBpcyB0byBhdHRhY2ggdGhlIFJDQyB0byBhIFVzZXJSb3V0ZUluZm8KLSAgICAgKiBpbiBvcmRlciB0byBob29rIHVwIHN0cmVhbSBtZXRhZGF0YSBhbmQgdm9sdW1lIGNhbGxiYWNrcyBiZWNhdXNlIHRoZXJlIGlzIG5vCi0gICAgICogb3RoZXIgQVBJIGF2YWlsYWJsZSB0byBkbyBzbyBpbiB0aGlzIHBsYXRmb3JtIHZlcnNpb24uICBUaGUgVXNlclJvdXRlSW5mbyBpdHNlbGYKLSAgICAgKiBpcyBub3QgYXR0YWNoZWQgdG8gdGhlIE1lZGlhUm91dGVyIHNvIGl0IGlzIHRyYW5zcGFyZW50IHRvIHRoZSB1c2VyLgotICAgICAqLwotICAgIC8vIEBAUmVxdWlyZXNBcGkoMTYpCi0gICAgc3RhdGljIGNsYXNzIEplbGx5YmVhbkltcGwgZXh0ZW5kcyBSZW1vdGVDb250cm9sQ2xpZW50Q29tcGF0IHsKLSAgICAgICAgcHJpdmF0ZSBmaW5hbCBPYmplY3QgbVJvdXRlck9iajsKLSAgICAgICAgcHJpdmF0ZSBmaW5hbCBPYmplY3QgbVVzZXJSb3V0ZUNhdGVnb3J5T2JqOwotICAgICAgICBwcml2YXRlIGZpbmFsIE9iamVjdCBtVXNlclJvdXRlT2JqOwotICAgICAgICBwcml2YXRlIGJvb2xlYW4gbVJlZ2lzdGVyZWQ7Ci0KLSAgICAgICAgcHVibGljIEplbGx5YmVhbkltcGwoQ29udGV4dCBjb250ZXh0LCBPYmplY3QgcmNjKSB7Ci0gICAgICAgICAgICBzdXBlcihjb250ZXh0LCByY2MpOwotCi0gICAgICAgICAgICBtUm91dGVyT2JqID0gTWVkaWFSb3V0ZXJKZWxseWJlYW4uZ2V0TWVkaWFSb3V0ZXIoY29udGV4dCk7Ci0gICAgICAgICAgICBtVXNlclJvdXRlQ2F0ZWdvcnlPYmogPSBNZWRpYVJvdXRlckplbGx5YmVhbi5jcmVhdGVSb3V0ZUNhdGVnb3J5KAotICAgICAgICAgICAgICAgICAgICBtUm91dGVyT2JqLCAiIiwgZmFsc2UpOwotICAgICAgICAgICAgbVVzZXJSb3V0ZU9iaiA9IE1lZGlhUm91dGVySmVsbHliZWFuLmNyZWF0ZVVzZXJSb3V0ZSgKLSAgICAgICAgICAgICAgICAgICAgbVJvdXRlck9iaiwgbVVzZXJSb3V0ZUNhdGVnb3J5T2JqKTsKLSAgICAgICAgfQotCi0gICAgICAgIEBPdmVycmlkZQotICAgICAgICBwdWJsaWMgdm9pZCBzZXRQbGF5YmFja0luZm8oUGxheWJhY2tJbmZvIGluZm8pIHsKLSAgICAgICAgICAgIE1lZGlhUm91dGVySmVsbHliZWFuLlVzZXJSb3V0ZUluZm8uc2V0Vm9sdW1lKAotICAgICAgICAgICAgICAgICAgICBtVXNlclJvdXRlT2JqLCBpbmZvLnZvbHVtZSk7Ci0gICAgICAgICAgICBNZWRpYVJvdXRlckplbGx5YmVhbi5Vc2VyUm91dGVJbmZvLnNldFZvbHVtZU1heCgKLSAgICAgICAgICAgICAgICAgICAgbVVzZXJSb3V0ZU9iaiwgaW5mby52b2x1bWVNYXgpOwotICAgICAgICAgICAgTWVkaWFSb3V0ZXJKZWxseWJlYW4uVXNlclJvdXRlSW5mby5zZXRWb2x1bWVIYW5kbGluZygKLSAgICAgICAgICAgICAgICAgICAgbVVzZXJSb3V0ZU9iaiwgaW5mby52b2x1bWVIYW5kbGluZyk7Ci0gICAgICAgICAgICBNZWRpYVJvdXRlckplbGx5YmVhbi5Vc2VyUm91dGVJbmZvLnNldFBsYXliYWNrU3RyZWFtKAotICAgICAgICAgICAgICAgICAgICBtVXNlclJvdXRlT2JqLCBpbmZvLnBsYXliYWNrU3RyZWFtKTsKLSAgICAgICAgICAgIE1lZGlhUm91dGVySmVsbHliZWFuLlVzZXJSb3V0ZUluZm8uc2V0UGxheWJhY2tUeXBlKAotICAgICAgICAgICAgICAgICAgICBtVXNlclJvdXRlT2JqLCBpbmZvLnBsYXliYWNrVHlwZSk7Ci0KLSAgICAgICAgICAgIGlmICghbVJlZ2lzdGVyZWQpIHsKLSAgICAgICAgICAgICAgICBtUmVnaXN0ZXJlZCA9IHRydWU7Ci0gICAgICAgICAgICAgICAgTWVkaWFSb3V0ZXJKZWxseWJlYW4uVXNlclJvdXRlSW5mby5zZXRWb2x1bWVDYWxsYmFjayhtVXNlclJvdXRlT2JqLAotICAgICAgICAgICAgICAgICAgICAgICAgTWVkaWFSb3V0ZXJKZWxseWJlYW4uY3JlYXRlVm9sdW1lQ2FsbGJhY2soCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldyBWb2x1bWVDYWxsYmFja1dyYXBwZXIodGhpcykpKTsKLSAgICAgICAgICAgICAgICBNZWRpYVJvdXRlckplbGx5YmVhbi5Vc2VyUm91dGVJbmZvLnNldFJlbW90ZUNvbnRyb2xDbGllbnQobVVzZXJSb3V0ZU9iaiwgbVJjYyk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBjbGFzcyBWb2x1bWVDYWxsYmFja1dyYXBwZXIKLSAgICAgICAgICAgICAgICBpbXBsZW1lbnRzIE1lZGlhUm91dGVySmVsbHliZWFuLlZvbHVtZUNhbGxiYWNrIHsKLSAgICAgICAgICAgIC8vIFVuZm9ydHVuYXRlbHksIHRoZSBmcmFtZXdvcmsgbmV2ZXIgdW5yZWdpc3RlcnMgaXRzIHZvbHVtZSBvYnNlcnZlciBmcm9tCi0gICAgICAgICAgICAvLyB0aGUgYXVkaW8gc2VydmljZSBzbyB0aGUgVXNlclJvdXRlSW5mbyBvYmplY3QgbWF5IGxlYWsgYWxvbmcgd2l0aAotICAgICAgICAgICAgLy8gYW55IGNhbGxiYWNrcyB0aGF0IHdlIGF0dGFjaCB0byBpdC4gIFVzZSBhIHdlYWsgcmVmZXJlbmNlIHRvIHByZXZlbnQKLSAgICAgICAgICAgIC8vIHRoZSB2b2x1bWUgY2FsbGJhY2sgZnJvbSBob2xkaW5nIHN0cm9uZyByZWZlcmVuY2VzIHRvIGFueXRoaW5nIGltcG9ydGFudC4KLSAgICAgICAgICAgIHByaXZhdGUgZmluYWwgV2Vha1JlZmVyZW5jZTxKZWxseWJlYW5JbXBsPiBtSW1wbFdlYWs7Ci0KLSAgICAgICAgICAgIHB1YmxpYyBWb2x1bWVDYWxsYmFja1dyYXBwZXIoSmVsbHliZWFuSW1wbCBpbXBsKSB7Ci0gICAgICAgICAgICAgICAgbUltcGxXZWFrID0gbmV3IFdlYWtSZWZlcmVuY2U8SmVsbHliZWFuSW1wbD4oaW1wbCk7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIEBPdmVycmlkZQotICAgICAgICAgICAgcHVibGljIHZvaWQgb25Wb2x1bWVVcGRhdGVSZXF1ZXN0KE9iamVjdCByb3V0ZU9iaiwgaW50IGRpcmVjdGlvbikgewotICAgICAgICAgICAgICAgIEplbGx5YmVhbkltcGwgaW1wbCA9IG1JbXBsV2Vhay5nZXQoKTsKLSAgICAgICAgICAgICAgICBpZiAoaW1wbCAhPSBudWxsICYmIGltcGwubVZvbHVtZUNhbGxiYWNrICE9IG51bGwpIHsKLSAgICAgICAgICAgICAgICAgICAgaW1wbC5tVm9sdW1lQ2FsbGJhY2sub25Wb2x1bWVVcGRhdGVSZXF1ZXN0KGRpcmVjdGlvbik7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgICAgIHB1YmxpYyB2b2lkIG9uVm9sdW1lU2V0UmVxdWVzdChPYmplY3Qgcm91dGVPYmosIGludCB2b2x1bWUpIHsKLSAgICAgICAgICAgICAgICBKZWxseWJlYW5JbXBsIGltcGwgPSBtSW1wbFdlYWsuZ2V0KCk7Ci0gICAgICAgICAgICAgICAgaWYgKGltcGwgIT0gbnVsbCAmJiBpbXBsLm1Wb2x1bWVDYWxsYmFjayAhPSBudWxsKSB7Ci0gICAgICAgICAgICAgICAgICAgIGltcGwubVZvbHVtZUNhbGxiYWNrLm9uVm9sdW1lU2V0UmVxdWVzdCh2b2x1bWUpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLX0KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL01lZGlhQ29tcG9uZW50cy9zcmMvY29tL2FuZHJvaWQvc3VwcG9ydC9tZWRpYXJvdXRlci9tZWRpYS9SZW1vdGVQbGF5YmFja0NsaWVudC5qYXZhIGIvcGFja2FnZXMvTWVkaWFDb21wb25lbnRzL3NyYy9jb20vYW5kcm9pZC9zdXBwb3J0L21lZGlhcm91dGVyL21lZGlhL1JlbW90ZVBsYXliYWNrQ2xpZW50LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGY2ZTE0OTcuLjAwMDAwMDAKLS0tIGEvcGFja2FnZXMvTWVkaWFDb21wb25lbnRzL3NyYy9jb20vYW5kcm9pZC9zdXBwb3J0L21lZGlhcm91dGVyL21lZGlhL1JlbW90ZVBsYXliYWNrQ2xpZW50LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxMDQ0ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgMjAxOCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0Ci0gKgotICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7Ci0gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCi0gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLSAqCi0gKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotICoKLSAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKLSAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCi0gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KLSAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKLSAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgotICovCi1wYWNrYWdlIGNvbS5hbmRyb2lkLnN1cHBvcnQubWVkaWFyb3V0ZXIubWVkaWE7Ci0KLWltcG9ydCBhbmRyb2lkLmFwcC5QZW5kaW5nSW50ZW50OwotaW1wb3J0IGFuZHJvaWQuY29udGVudC5Ccm9hZGNhc3RSZWNlaXZlcjsKLWltcG9ydCBhbmRyb2lkLmNvbnRlbnQuQ29udGV4dDsKLWltcG9ydCBhbmRyb2lkLmNvbnRlbnQuSW50ZW50OwotaW1wb3J0IGFuZHJvaWQuY29udGVudC5JbnRlbnRGaWx0ZXI7Ci1pbXBvcnQgYW5kcm9pZC5uZXQuVXJpOwotaW1wb3J0IGFuZHJvaWQub3MuQnVuZGxlOwotaW1wb3J0IGFuZHJvaWQuc3VwcG9ydC52NC51dGlsLk9iamVjdHNDb21wYXQ7Ci1pbXBvcnQgYW5kcm9pZC51dGlsLkxvZzsKLQotLyoqCi0gKiBBIGhlbHBlciBjbGFzcyBmb3IgcGxheWluZyBtZWRpYSBvbiByZW1vdGUgcm91dGVzIHVzaW5nIHRoZSByZW1vdGUgcGxheWJhY2sgcHJvdG9jb2wKLSAqIGRlZmluZWQgYnkge0BsaW5rIE1lZGlhQ29udHJvbEludGVudH0uCi0gKiA8cD4KLSAqIFRoZSBjbGllbnQgbWFpbnRhaW5zIHNlc3Npb24gc3RhdGUgYW5kIG9mZmVycyBhIHNpbXBsaWZpZWQgaW50ZXJmYWNlIGZvciBpc3N1aW5nCi0gKiByZW1vdGUgcGxheWJhY2sgbWVkaWEgY29udHJvbCBpbnRlbnRzIHRvIGEgc2luZ2xlIHJvdXRlLgotICogPC9wPgotICovCi1wdWJsaWMgY2xhc3MgUmVtb3RlUGxheWJhY2tDbGllbnQgewotICAgIHN0YXRpYyBmaW5hbCBTdHJpbmcgVEFHID0gIlJlbW90ZVBsYXliYWNrQ2xpZW50IjsKLSAgICBzdGF0aWMgZmluYWwgYm9vbGVhbiBERUJVRyA9IExvZy5pc0xvZ2dhYmxlKFRBRywgTG9nLkRFQlVHKTsKLQotICAgIHByaXZhdGUgZmluYWwgQ29udGV4dCBtQ29udGV4dDsKLSAgICBwcml2YXRlIGZpbmFsIE1lZGlhUm91dGVyLlJvdXRlSW5mbyBtUm91dGU7Ci0gICAgcHJpdmF0ZSBmaW5hbCBBY3Rpb25SZWNlaXZlciBtQWN0aW9uUmVjZWl2ZXI7Ci0gICAgcHJpdmF0ZSBmaW5hbCBQZW5kaW5nSW50ZW50IG1JdGVtU3RhdHVzUGVuZGluZ0ludGVudDsKLSAgICBwcml2YXRlIGZpbmFsIFBlbmRpbmdJbnRlbnQgbVNlc3Npb25TdGF0dXNQZW5kaW5nSW50ZW50OwotICAgIHByaXZhdGUgZmluYWwgUGVuZGluZ0ludGVudCBtTWVzc2FnZVBlbmRpbmdJbnRlbnQ7Ci0KLSAgICBwcml2YXRlIGJvb2xlYW4gbVJvdXRlU3VwcG9ydHNSZW1vdGVQbGF5YmFjazsKLSAgICBwcml2YXRlIGJvb2xlYW4gbVJvdXRlU3VwcG9ydHNRdWV1aW5nOwotICAgIHByaXZhdGUgYm9vbGVhbiBtUm91dGVTdXBwb3J0c1Nlc3Npb25NYW5hZ2VtZW50OwotICAgIHByaXZhdGUgYm9vbGVhbiBtUm91dGVTdXBwb3J0c01lc3NhZ2luZzsKLQotICAgIFN0cmluZyBtU2Vzc2lvbklkOwotICAgIFN0YXR1c0NhbGxiYWNrIG1TdGF0dXNDYWxsYmFjazsKLSAgICBPbk1lc3NhZ2VSZWNlaXZlZExpc3RlbmVyIG1Pbk1lc3NhZ2VSZWNlaXZlZExpc3RlbmVyOwotCi0gICAgLyoqCi0gICAgICogQ3JlYXRlcyBhIHJlbW90ZSBwbGF5YmFjayBjbGllbnQgZm9yIGEgcm91dGUuCi0gICAgICoKLSAgICAgKiBAcGFyYW0gcm91dGUgVGhlIG1lZGlhIHJvdXRlLgotICAgICAqLwotICAgIHB1YmxpYyBSZW1vdGVQbGF5YmFja0NsaWVudChDb250ZXh0IGNvbnRleHQsIE1lZGlhUm91dGVyLlJvdXRlSW5mbyByb3V0ZSkgewotICAgICAgICBpZiAoY29udGV4dCA9PSBudWxsKSB7Ci0gICAgICAgICAgICB0aHJvdyBuZXcgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKCJjb250ZXh0IG11c3Qgbm90IGJlIG51bGwiKTsKLSAgICAgICAgfQotICAgICAgICBpZiAocm91dGUgPT0gbnVsbCkgewotICAgICAgICAgICAgdGhyb3cgbmV3IElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbigicm91dGUgbXVzdCBub3QgYmUgbnVsbCIpOwotICAgICAgICB9Ci0KLSAgICAgICAgbUNvbnRleHQgPSBjb250ZXh0OwotICAgICAgICBtUm91dGUgPSByb3V0ZTsKLQotICAgICAgICBJbnRlbnRGaWx0ZXIgYWN0aW9uRmlsdGVyID0gbmV3IEludGVudEZpbHRlcigpOwotICAgICAgICBhY3Rpb25GaWx0ZXIuYWRkQWN0aW9uKEFjdGlvblJlY2VpdmVyLkFDVElPTl9JVEVNX1NUQVRVU19DSEFOR0VEKTsKLSAgICAgICAgYWN0aW9uRmlsdGVyLmFkZEFjdGlvbihBY3Rpb25SZWNlaXZlci5BQ1RJT05fU0VTU0lPTl9TVEFUVVNfQ0hBTkdFRCk7Ci0gICAgICAgIGFjdGlvbkZpbHRlci5hZGRBY3Rpb24oQWN0aW9uUmVjZWl2ZXIuQUNUSU9OX01FU1NBR0VfUkVDRUlWRUQpOwotICAgICAgICBtQWN0aW9uUmVjZWl2ZXIgPSBuZXcgQWN0aW9uUmVjZWl2ZXIoKTsKLSAgICAgICAgY29udGV4dC5yZWdpc3RlclJlY2VpdmVyKG1BY3Rpb25SZWNlaXZlciwgYWN0aW9uRmlsdGVyKTsKLQotICAgICAgICBJbnRlbnQgaXRlbVN0YXR1c0ludGVudCA9IG5ldyBJbnRlbnQoQWN0aW9uUmVjZWl2ZXIuQUNUSU9OX0lURU1fU1RBVFVTX0NIQU5HRUQpOwotICAgICAgICBpdGVtU3RhdHVzSW50ZW50LnNldFBhY2thZ2UoY29udGV4dC5nZXRQYWNrYWdlTmFtZSgpKTsKLSAgICAgICAgbUl0ZW1TdGF0dXNQZW5kaW5nSW50ZW50ID0gUGVuZGluZ0ludGVudC5nZXRCcm9hZGNhc3QoCi0gICAgICAgICAgICAgICAgY29udGV4dCwgMCwgaXRlbVN0YXR1c0ludGVudCwgMCk7Ci0KLSAgICAgICAgSW50ZW50IHNlc3Npb25TdGF0dXNJbnRlbnQgPSBuZXcgSW50ZW50KEFjdGlvblJlY2VpdmVyLkFDVElPTl9TRVNTSU9OX1NUQVRVU19DSEFOR0VEKTsKLSAgICAgICAgc2Vzc2lvblN0YXR1c0ludGVudC5zZXRQYWNrYWdlKGNvbnRleHQuZ2V0UGFja2FnZU5hbWUoKSk7Ci0gICAgICAgIG1TZXNzaW9uU3RhdHVzUGVuZGluZ0ludGVudCA9IFBlbmRpbmdJbnRlbnQuZ2V0QnJvYWRjYXN0KAotICAgICAgICAgICAgICAgIGNvbnRleHQsIDAsIHNlc3Npb25TdGF0dXNJbnRlbnQsIDApOwotCi0gICAgICAgIEludGVudCBtZXNzYWdlSW50ZW50ID0gbmV3IEludGVudChBY3Rpb25SZWNlaXZlci5BQ1RJT05fTUVTU0FHRV9SRUNFSVZFRCk7Ci0gICAgICAgIG1lc3NhZ2VJbnRlbnQuc2V0UGFja2FnZShjb250ZXh0LmdldFBhY2thZ2VOYW1lKCkpOwotICAgICAgICBtTWVzc2FnZVBlbmRpbmdJbnRlbnQgPSBQZW5kaW5nSW50ZW50LmdldEJyb2FkY2FzdCgKLSAgICAgICAgICAgICAgICBjb250ZXh0LCAwLCBtZXNzYWdlSW50ZW50LCAwKTsKLSAgICAgICAgZGV0ZWN0RmVhdHVyZXMoKTsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBSZWxlYXNlcyByZXNvdXJjZXMgb3duZWQgYnkgdGhlIGNsaWVudC4KLSAgICAgKi8KLSAgICBwdWJsaWMgdm9pZCByZWxlYXNlKCkgewotICAgICAgICBtQ29udGV4dC51bnJlZ2lzdGVyUmVjZWl2ZXIobUFjdGlvblJlY2VpdmVyKTsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBSZXR1cm5zIHRydWUgaWYgdGhlIHJvdXRlIHN1cHBvcnRzIHJlbW90ZSBwbGF5YmFjay4KLSAgICAgKiA8cD4KLSAgICAgKiBJZiB0aGUgcm91dGUgZG9lcyBub3Qgc3VwcG9ydCByZW1vdGUgcGxheWJhY2ssIHRoZW4gbm9uZSBvZiB0aGUgZnVuY3Rpb25hbGl0eQotICAgICAqIG9mZmVyZWQgYnkgdGhlIGNsaWVudCB3aWxsIGJlIGF2YWlsYWJsZS4KLSAgICAgKiA8L3A+PHA+Ci0gICAgICogVGhpcyBtZXRob2QgcmV0dXJucyB0cnVlIGlmIHRoZSByb3V0ZSBzdXBwb3J0cyBhbGwgb2YgdGhlIGZvbGxvd2luZwotICAgICAqIGFjdGlvbnM6IHtAbGluayBNZWRpYUNvbnRyb2xJbnRlbnQjQUNUSU9OX1BMQVkgcGxheX0sCi0gICAgICoge0BsaW5rIE1lZGlhQ29udHJvbEludGVudCNBQ1RJT05fU0VFSyBzZWVrfSwKLSAgICAgKiB7QGxpbmsgTWVkaWFDb250cm9sSW50ZW50I0FDVElPTl9HRVRfU1RBVFVTIGdldCBzdGF0dXN9LAotICAgICAqIHtAbGluayBNZWRpYUNvbnRyb2xJbnRlbnQjQUNUSU9OX1BBVVNFIHBhdXNlfSwKLSAgICAgKiB7QGxpbmsgTWVkaWFDb250cm9sSW50ZW50I0FDVElPTl9SRVNVTUUgcmVzdW1lfSwKLSAgICAgKiB7QGxpbmsgTWVkaWFDb250cm9sSW50ZW50I0FDVElPTl9TVE9QIHN0b3B9LgotICAgICAqIDwvcD4KLSAgICAgKgotICAgICAqIEByZXR1cm4gVHJ1ZSBpZiByZW1vdGUgcGxheWJhY2sgaXMgc3VwcG9ydGVkLgotICAgICAqLwotICAgIHB1YmxpYyBib29sZWFuIGlzUmVtb3RlUGxheWJhY2tTdXBwb3J0ZWQoKSB7Ci0gICAgICAgIHJldHVybiBtUm91dGVTdXBwb3J0c1JlbW90ZVBsYXliYWNrOwotICAgIH0KLQotICAgIC8qKgotICAgICAqIFJldHVybnMgdHJ1ZSBpZiB0aGUgcm91dGUgc3VwcG9ydHMgcXVldWluZyBmZWF0dXJlcy4KLSAgICAgKiA8cD4KLSAgICAgKiBJZiB0aGUgcm91dGUgZG9lcyBub3Qgc3VwcG9ydCBxdWV1aW5nLCB0aGVuIGF0IG1vc3Qgb25lIG1lZGlhIGl0ZW0gY2FuIGJlIHBsYXllZAotICAgICAqIGF0IGEgdGltZSBhbmQgdGhlIHtAbGluayAjZW5xdWV1ZX0gbWV0aG9kIHdpbGwgbm90IGJlIGF2YWlsYWJsZS4KLSAgICAgKiA8L3A+PHA+Ci0gICAgICogVGhpcyBtZXRob2QgcmV0dXJucyB0cnVlIGlmIHRoZSByb3V0ZSBzdXBwb3J0cyBhbGwgb2YgdGhlIGJhc2ljIHJlbW90ZSBwbGF5YmFjawotICAgICAqIGFjdGlvbnMgYW5kIGFsbCBvZiB0aGUgZm9sbG93aW5nIGFjdGlvbnM6Ci0gICAgICoge0BsaW5rIE1lZGlhQ29udHJvbEludGVudCNBQ1RJT05fRU5RVUVVRSBlbnF1ZXVlfSwKLSAgICAgKiB7QGxpbmsgTWVkaWFDb250cm9sSW50ZW50I0FDVElPTl9SRU1PVkUgcmVtb3ZlfS4KLSAgICAgKiA8L3A+Ci0gICAgICoKLSAgICAgKiBAcmV0dXJuIFRydWUgaWYgcXVldWluZyBpcyBzdXBwb3J0ZWQuICBJbXBsaWVzIHtAbGluayAjaXNSZW1vdGVQbGF5YmFja1N1cHBvcnRlZH0KLSAgICAgKiBpcyBhbHNvIHRydWUuCi0gICAgICoKLSAgICAgKiBAc2VlICNpc1JlbW90ZVBsYXliYWNrU3VwcG9ydGVkCi0gICAgICovCi0gICAgcHVibGljIGJvb2xlYW4gaXNRdWV1aW5nU3VwcG9ydGVkKCkgewotICAgICAgICByZXR1cm4gbVJvdXRlU3VwcG9ydHNRdWV1aW5nOwotICAgIH0KLQotICAgIC8qKgotICAgICAqIFJldHVybnMgdHJ1ZSBpZiB0aGUgcm91dGUgc3VwcG9ydHMgc2Vzc2lvbiBtYW5hZ2VtZW50IGZlYXR1cmVzLgotICAgICAqIDxwPgotICAgICAqIElmIHRoZSByb3V0ZSBkb2VzIG5vdCBzdXBwb3J0IHNlc3Npb24gbWFuYWdlbWVudCwgdGhlbiB0aGUgc2Vzc2lvbiB3aWxsCi0gICAgICogbm90IGJlIGNyZWF0ZWQgdW50aWwgdGhlIGZpcnN0IG1lZGlhIGl0ZW0gaXMgcGxheWVkLgotICAgICAqIDwvcD48cD4KLSAgICAgKiBUaGlzIG1ldGhvZCByZXR1cm5zIHRydWUgaWYgdGhlIHJvdXRlIHN1cHBvcnRzIGFsbCBvZiB0aGUgYmFzaWMgcmVtb3RlIHBsYXliYWNrCi0gICAgICogYWN0aW9ucyBhbmQgYWxsIG9mIHRoZSBmb2xsb3dpbmcgYWN0aW9uczoKLSAgICAgKiB7QGxpbmsgTWVkaWFDb250cm9sSW50ZW50I0FDVElPTl9TVEFSVF9TRVNTSU9OIHN0YXJ0IHNlc3Npb259LAotICAgICAqIHtAbGluayBNZWRpYUNvbnRyb2xJbnRlbnQjQUNUSU9OX0dFVF9TRVNTSU9OX1NUQVRVUyBnZXQgc2Vzc2lvbiBzdGF0dXN9LAotICAgICAqIHtAbGluayBNZWRpYUNvbnRyb2xJbnRlbnQjQUNUSU9OX0VORF9TRVNTSU9OIGVuZCBzZXNzaW9ufS4KLSAgICAgKiA8L3A+Ci0gICAgICoKLSAgICAgKiBAcmV0dXJuIFRydWUgaWYgc2Vzc2lvbiBtYW5hZ2VtZW50IGlzIHN1cHBvcnRlZC4KLSAgICAgKiBJbXBsaWVzIHtAbGluayAjaXNSZW1vdGVQbGF5YmFja1N1cHBvcnRlZH0gaXMgYWxzbyB0cnVlLgotICAgICAqCi0gICAgICogQHNlZSAjaXNSZW1vdGVQbGF5YmFja1N1cHBvcnRlZAotICAgICAqLwotICAgIHB1YmxpYyBib29sZWFuIGlzU2Vzc2lvbk1hbmFnZW1lbnRTdXBwb3J0ZWQoKSB7Ci0gICAgICAgIHJldHVybiBtUm91dGVTdXBwb3J0c1Nlc3Npb25NYW5hZ2VtZW50OwotICAgIH0KLQotICAgIC8qKgotICAgICAqIFJldHVybnMgdHJ1ZSBpZiB0aGUgcm91dGUgc3VwcG9ydHMgbWVzc2FnZXMuCi0gICAgICogPHA+Ci0gICAgICogVGhpcyBtZXRob2QgcmV0dXJucyB0cnVlIGlmIHRoZSByb3V0ZSBzdXBwb3J0cyBhbGwgb2YgdGhlIGJhc2ljIHJlbW90ZSBwbGF5YmFjawotICAgICAqIGFjdGlvbnMgYW5kIGFsbCBvZiB0aGUgZm9sbG93aW5nIGFjdGlvbnM6Ci0gICAgICoge0BsaW5rIE1lZGlhQ29udHJvbEludGVudCNBQ1RJT05fU1RBUlRfU0VTU0lPTiBzdGFydCBzZXNzaW9ufSwKLSAgICAgKiB7QGxpbmsgTWVkaWFDb250cm9sSW50ZW50I0FDVElPTl9TRU5EX01FU1NBR0Ugc2VuZCBtZXNzYWdlfSwKLSAgICAgKiB7QGxpbmsgTWVkaWFDb250cm9sSW50ZW50I0FDVElPTl9FTkRfU0VTU0lPTiBlbmQgc2Vzc2lvbn0uCi0gICAgICogPC9wPgotICAgICAqCi0gICAgICogQHJldHVybiBUcnVlIGlmIHNlc3Npb24gbWFuYWdlbWVudCBpcyBzdXBwb3J0ZWQuCi0gICAgICogSW1wbGllcyB7QGxpbmsgI2lzUmVtb3RlUGxheWJhY2tTdXBwb3J0ZWR9IGlzIGFsc28gdHJ1ZS4KLSAgICAgKgotICAgICAqIEBzZWUgI2lzUmVtb3RlUGxheWJhY2tTdXBwb3J0ZWQKLSAgICAgKi8KLSAgICBwdWJsaWMgYm9vbGVhbiBpc01lc3NhZ2luZ1N1cHBvcnRlZCgpIHsKLSAgICAgICAgcmV0dXJuIG1Sb3V0ZVN1cHBvcnRzTWVzc2FnaW5nOwotICAgIH0KLQotICAgIC8qKgotICAgICAqIEdldHMgdGhlIGN1cnJlbnQgc2Vzc2lvbiBpZCBpZiB0aGVyZSBpcyBvbmUuCi0gICAgICoKLSAgICAgKiBAcmV0dXJuIFRoZSBjdXJyZW50IHNlc3Npb24gaWQsIG9yIG51bGwgaWYgbm9uZS4KLSAgICAgKi8KLSAgICBwdWJsaWMgU3RyaW5nIGdldFNlc3Npb25JZCgpIHsKLSAgICAgICAgcmV0dXJuIG1TZXNzaW9uSWQ7Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogU2V0cyB0aGUgY3VycmVudCBzZXNzaW9uIGlkLgotICAgICAqIDxwPgotICAgICAqIEl0IGlzIHVzdWFsbHkgbm90IG5lY2Vzc2FyeSB0byBzZXQgdGhlIHNlc3Npb24gaWQgZXhwbGljaXRseSBzaW5jZQotICAgICAqIGl0IGlzIGNyZWF0ZWQgYXMgYSBzaWRlLWVmZmVjdCBvZiBvdGhlciByZXF1ZXN0cyBzdWNoIGFzCi0gICAgICoge0BsaW5rICNwbGF5fSwge0BsaW5rICNlbnF1ZXVlfSwgYW5kIHtAbGluayAjc3RhcnRTZXNzaW9ufS4KLSAgICAgKiA8L3A+Ci0gICAgICoKLSAgICAgKiBAcGFyYW0gc2Vzc2lvbklkIFRoZSBuZXcgc2Vzc2lvbiBpZCwgb3IgbnVsbCBpZiBub25lLgotICAgICAqLwotICAgIHB1YmxpYyB2b2lkIHNldFNlc3Npb25JZChTdHJpbmcgc2Vzc2lvbklkKSB7Ci0gICAgICAgIGlmICghT2JqZWN0c0NvbXBhdC5lcXVhbHMobVNlc3Npb25JZCwgc2Vzc2lvbklkKSkgewotICAgICAgICAgICAgaWYgKERFQlVHKSB7Ci0gICAgICAgICAgICAgICAgTG9nLmQoVEFHLCAiU2Vzc2lvbiBpZCBpcyBub3c6ICIgKyBzZXNzaW9uSWQpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgbVNlc3Npb25JZCA9IHNlc3Npb25JZDsKLSAgICAgICAgICAgIGlmIChtU3RhdHVzQ2FsbGJhY2sgIT0gbnVsbCkgewotICAgICAgICAgICAgICAgIG1TdGF0dXNDYWxsYmFjay5vblNlc3Npb25DaGFuZ2VkKHNlc3Npb25JZCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBSZXR1cm5zIHRydWUgaWYgdGhlIGNsaWVudCBjdXJyZW50bHkgaGFzIGEgc2Vzc2lvbi4KLSAgICAgKiA8cD4KLSAgICAgKiBFcXVpdmFsZW50IHRvIGNoZWNraW5nIHdoZXRoZXIge0BsaW5rICNnZXRTZXNzaW9uSWR9IHJldHVybnMgYSBub24tbnVsbCByZXN1bHQuCi0gICAgICogPC9wPgotICAgICAqCi0gICAgICogQHJldHVybiBUcnVlIGlmIHRoZXJlIGlzIGEgY3VycmVudCBzZXNzaW9uLgotICAgICAqLwotICAgIHB1YmxpYyBib29sZWFuIGhhc1Nlc3Npb24oKSB7Ci0gICAgICAgIHJldHVybiBtU2Vzc2lvbklkICE9IG51bGw7Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogU2V0cyBhIGNhbGxiYWNrIHRoYXQgc2hvdWxkIHJlY2VpdmUgc3RhdHVzIHVwZGF0ZXMgd2hlbiB0aGUgc3RhdGUgb2YKLSAgICAgKiBtZWRpYSBzZXNzaW9ucyBvciBtZWRpYSBpdGVtcyBjcmVhdGVkIGJ5IHRoaXMgaW5zdGFuY2Ugb2YgdGhlIHJlbW90ZQotICAgICAqIHBsYXliYWNrIGNsaWVudCBjaGFuZ2VzLgotICAgICAqIDxwPgotICAgICAqIFRoZSBjYWxsYmFjayBzaG91bGQgYmUgc2V0IGJlZm9yZSB0aGUgc2Vzc2lvbiBpcyBjcmVhdGVkIG9yIGFueSBwbGF5Ci0gICAgICogY29tbWFuZHMgYXJlIGlzc3VlZC4KLSAgICAgKiA8L3A+Ci0gICAgICoKLSAgICAgKiBAcGFyYW0gY2FsbGJhY2sgVGhlIGNhbGxiYWNrIHRvIHNldC4gIE1heSBiZSBudWxsIHRvIHJlbW92ZSB0aGUgcHJldmlvdXMgY2FsbGJhY2suCi0gICAgICovCi0gICAgcHVibGljIHZvaWQgc2V0U3RhdHVzQ2FsbGJhY2soU3RhdHVzQ2FsbGJhY2sgY2FsbGJhY2spIHsKLSAgICAgICAgbVN0YXR1c0NhbGxiYWNrID0gY2FsbGJhY2s7Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogU2V0cyBhIGNhbGxiYWNrIHRoYXQgc2hvdWxkIHJlY2VpdmUgbWVzc2FnZXMgd2hlbiBhIG1lc3NhZ2UgaXMgc2VudCBmcm9tCi0gICAgICogbWVkaWEgc2Vzc2lvbnMgY3JlYXRlZCBieSB0aGlzIGluc3RhbmNlIG9mIHRoZSByZW1vdGUgcGxheWJhY2sgY2xpZW50IGNoYW5nZXMuCi0gICAgICogPHA+Ci0gICAgICogVGhlIGNhbGxiYWNrIHNob3VsZCBiZSBzZXQgYmVmb3JlIHRoZSBzZXNzaW9uIGlzIGNyZWF0ZWQuCi0gICAgICogPC9wPgotICAgICAqCi0gICAgICogQHBhcmFtIGxpc3RlbmVyIFRoZSBjYWxsYmFjayB0byBzZXQuICBNYXkgYmUgbnVsbCB0byByZW1vdmUgdGhlIHByZXZpb3VzIGNhbGxiYWNrLgotICAgICAqLwotICAgIHB1YmxpYyB2b2lkIHNldE9uTWVzc2FnZVJlY2VpdmVkTGlzdGVuZXIoT25NZXNzYWdlUmVjZWl2ZWRMaXN0ZW5lciBsaXN0ZW5lcikgewotICAgICAgICBtT25NZXNzYWdlUmVjZWl2ZWRMaXN0ZW5lciA9IGxpc3RlbmVyOwotICAgIH0KLQotICAgIC8qKgotICAgICAqIFNlbmRzIGEgcmVxdWVzdCB0byBwbGF5IGEgbWVkaWEgaXRlbS4KLSAgICAgKiA8cD4KLSAgICAgKiBDbGVhcnMgdGhlIHF1ZXVlIGFuZCBzdGFydHMgcGxheWluZyB0aGUgbmV3IGl0ZW0gaW1tZWRpYXRlbHkuICBJZiB0aGUgcXVldWUKLSAgICAgKiB3YXMgcHJldmlvdXNseSBwYXVzZWQsIHRoZW4gaXQgaXMgcmVzdW1lZCBhcyBhIHNpZGUtZWZmZWN0IG9mIHRoaXMgcmVxdWVzdC4KLSAgICAgKiA8L3A+PHA+Ci0gICAgICogVGhlIHJlcXVlc3QgaXMgaXNzdWVkIGluIHRoZSBjdXJyZW50IHNlc3Npb24uICBJZiBubyBzZXNzaW9uIGlzIGF2YWlsYWJsZSwgdGhlbgotICAgICAqIG9uZSBpcyBjcmVhdGVkIGltcGxpY2l0bHkuCi0gICAgICogPC9wPjxwPgotICAgICAqIFBsZWFzZSByZWZlciB0byB7QGxpbmsgTWVkaWFDb250cm9sSW50ZW50I0FDVElPTl9QTEFZIEFDVElPTl9QTEFZfSBmb3IKLSAgICAgKiBtb3JlIGluZm9ybWF0aW9uIGFib3V0IHRoZSBzZW1hbnRpY3Mgb2YgdGhpcyByZXF1ZXN0LgotICAgICAqIDwvcD4KLSAgICAgKgotICAgICAqIEBwYXJhbSBjb250ZW50VXJpIFRoZSBjb250ZW50IFVyaSB0byBwbGF5LgotICAgICAqIEBwYXJhbSBtaW1lVHlwZSBUaGUgbWltZSB0eXBlIG9mIHRoZSBjb250ZW50LCBvciBudWxsIGlmIHVua25vd24uCi0gICAgICogQHBhcmFtIHBvc2l0aW9uTWlsbGlzIFRoZSBpbml0aWFsIGNvbnRlbnQgcG9zaXRpb24gZm9yIHRoZSBpdGVtIGluIG1pbGxpc2Vjb25kcywKLSAgICAgKiBvciA8Y29kZT4wPC9jb2RlPiB0byBzdGFydCBhdCB0aGUgYmVnaW5uaW5nLgotICAgICAqIEBwYXJhbSBtZXRhZGF0YSBUaGUgbWVkaWEgaXRlbSBtZXRhZGF0YSBidW5kbGUsIG9yIG51bGwgaWYgbm9uZS4KLSAgICAgKiBAcGFyYW0gZXh0cmFzIEEgYnVuZGxlIG9mIGV4dHJhIGFyZ3VtZW50cyB0byBiZSBhZGRlZCB0byB0aGUKLSAgICAgKiB7QGxpbmsgTWVkaWFDb250cm9sSW50ZW50I0FDVElPTl9QTEFZfSBpbnRlbnQsIG9yIG51bGwgaWYgbm9uZS4KLSAgICAgKiBAcGFyYW0gY2FsbGJhY2sgQSBjYWxsYmFjayB0byBpbnZva2Ugd2hlbiB0aGUgcmVxdWVzdCBoYXMgYmVlbgotICAgICAqIHByb2Nlc3NlZCwgb3IgbnVsbCBpZiBub25lLgotICAgICAqCi0gICAgICogQHRocm93cyBVbnN1cHBvcnRlZE9wZXJhdGlvbkV4Y2VwdGlvbiBpZiB0aGUgcm91dGUgZG9lcyBub3Qgc3VwcG9ydCByZW1vdGUgcGxheWJhY2suCi0gICAgICoKLSAgICAgKiBAc2VlIE1lZGlhQ29udHJvbEludGVudCNBQ1RJT05fUExBWQotICAgICAqIEBzZWUgI2lzUmVtb3RlUGxheWJhY2tTdXBwb3J0ZWQKLSAgICAgKi8KLSAgICBwdWJsaWMgdm9pZCBwbGF5KFVyaSBjb250ZW50VXJpLCBTdHJpbmcgbWltZVR5cGUsIEJ1bmRsZSBtZXRhZGF0YSwKLSAgICAgICAgICAgIGxvbmcgcG9zaXRpb25NaWxsaXMsIEJ1bmRsZSBleHRyYXMsIEl0ZW1BY3Rpb25DYWxsYmFjayBjYWxsYmFjaykgewotICAgICAgICBwbGF5T3JFbnF1ZXVlKGNvbnRlbnRVcmksIG1pbWVUeXBlLCBtZXRhZGF0YSwgcG9zaXRpb25NaWxsaXMsCi0gICAgICAgICAgICAgICAgZXh0cmFzLCBjYWxsYmFjaywgTWVkaWFDb250cm9sSW50ZW50LkFDVElPTl9QTEFZKTsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBTZW5kcyBhIHJlcXVlc3QgdG8gZW5xdWV1ZSBhIG1lZGlhIGl0ZW0uCi0gICAgICogPHA+Ci0gICAgICogRW5xdWV1ZXMgYSBuZXcgaXRlbSB0byBwbGF5LiAgSWYgdGhlIHF1ZXVlIHdhcyBwcmV2aW91c2x5IHBhdXNlZCwgdGhlbiB3aWxsCi0gICAgICogcmVtYWluIHBhdXNlZC4KLSAgICAgKiA8L3A+PHA+Ci0gICAgICogVGhlIHJlcXVlc3QgaXMgaXNzdWVkIGluIHRoZSBjdXJyZW50IHNlc3Npb24uICBJZiBubyBzZXNzaW9uIGlzIGF2YWlsYWJsZSwgdGhlbgotICAgICAqIG9uZSBpcyBjcmVhdGVkIGltcGxpY2l0bHkuCi0gICAgICogPC9wPjxwPgotICAgICAqIFBsZWFzZSByZWZlciB0byB7QGxpbmsgTWVkaWFDb250cm9sSW50ZW50I0FDVElPTl9FTlFVRVVFIEFDVElPTl9FTlFVRVVFfSBmb3IKLSAgICAgKiBtb3JlIGluZm9ybWF0aW9uIGFib3V0IHRoZSBzZW1hbnRpY3Mgb2YgdGhpcyByZXF1ZXN0LgotICAgICAqIDwvcD4KLSAgICAgKgotICAgICAqIEBwYXJhbSBjb250ZW50VXJpIFRoZSBjb250ZW50IFVyaSB0byBlbnF1ZXVlLgotICAgICAqIEBwYXJhbSBtaW1lVHlwZSBUaGUgbWltZSB0eXBlIG9mIHRoZSBjb250ZW50LCBvciBudWxsIGlmIHVua25vd24uCi0gICAgICogQHBhcmFtIHBvc2l0aW9uTWlsbGlzIFRoZSBpbml0aWFsIGNvbnRlbnQgcG9zaXRpb24gZm9yIHRoZSBpdGVtIGluIG1pbGxpc2Vjb25kcywKLSAgICAgKiBvciA8Y29kZT4wPC9jb2RlPiB0byBzdGFydCBhdCB0aGUgYmVnaW5uaW5nLgotICAgICAqIEBwYXJhbSBtZXRhZGF0YSBUaGUgbWVkaWEgaXRlbSBtZXRhZGF0YSBidW5kbGUsIG9yIG51bGwgaWYgbm9uZS4KLSAgICAgKiBAcGFyYW0gZXh0cmFzIEEgYnVuZGxlIG9mIGV4dHJhIGFyZ3VtZW50cyB0byBiZSBhZGRlZCB0byB0aGUKLSAgICAgKiB7QGxpbmsgTWVkaWFDb250cm9sSW50ZW50I0FDVElPTl9FTlFVRVVFfSBpbnRlbnQsIG9yIG51bGwgaWYgbm9uZS4KLSAgICAgKiBAcGFyYW0gY2FsbGJhY2sgQSBjYWxsYmFjayB0byBpbnZva2Ugd2hlbiB0aGUgcmVxdWVzdCBoYXMgYmVlbgotICAgICAqIHByb2Nlc3NlZCwgb3IgbnVsbCBpZiBub25lLgotICAgICAqCi0gICAgICogQHRocm93cyBVbnN1cHBvcnRlZE9wZXJhdGlvbkV4Y2VwdGlvbiBpZiB0aGUgcm91dGUgZG9lcyBub3Qgc3VwcG9ydCBxdWV1aW5nLgotICAgICAqCi0gICAgICogQHNlZSBNZWRpYUNvbnRyb2xJbnRlbnQjQUNUSU9OX0VOUVVFVUUKLSAgICAgKiBAc2VlICNpc1JlbW90ZVBsYXliYWNrU3VwcG9ydGVkCi0gICAgICogQHNlZSAjaXNRdWV1aW5nU3VwcG9ydGVkCi0gICAgICovCi0gICAgcHVibGljIHZvaWQgZW5xdWV1ZShVcmkgY29udGVudFVyaSwgU3RyaW5nIG1pbWVUeXBlLCBCdW5kbGUgbWV0YWRhdGEsCi0gICAgICAgICAgICBsb25nIHBvc2l0aW9uTWlsbGlzLCBCdW5kbGUgZXh0cmFzLCBJdGVtQWN0aW9uQ2FsbGJhY2sgY2FsbGJhY2spIHsKLSAgICAgICAgcGxheU9yRW5xdWV1ZShjb250ZW50VXJpLCBtaW1lVHlwZSwgbWV0YWRhdGEsIHBvc2l0aW9uTWlsbGlzLAotICAgICAgICAgICAgICAgIGV4dHJhcywgY2FsbGJhY2ssIE1lZGlhQ29udHJvbEludGVudC5BQ1RJT05fRU5RVUVVRSk7Ci0gICAgfQotCi0gICAgcHJpdmF0ZSB2b2lkIHBsYXlPckVucXVldWUoVXJpIGNvbnRlbnRVcmksIFN0cmluZyBtaW1lVHlwZSwgQnVuZGxlIG1ldGFkYXRhLAotICAgICAgICAgICAgbG9uZyBwb3NpdGlvbk1pbGxpcywgQnVuZGxlIGV4dHJhcywKLSAgICAgICAgICAgIGZpbmFsIEl0ZW1BY3Rpb25DYWxsYmFjayBjYWxsYmFjaywgU3RyaW5nIGFjdGlvbikgewotICAgICAgICBpZiAoY29udGVudFVyaSA9PSBudWxsKSB7Ci0gICAgICAgICAgICB0aHJvdyBuZXcgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKCJjb250ZW50VXJpIG11c3Qgbm90IGJlIG51bGwiKTsKLSAgICAgICAgfQotICAgICAgICB0aHJvd0lmUmVtb3RlUGxheWJhY2tOb3RTdXBwb3J0ZWQoKTsKLSAgICAgICAgaWYgKGFjdGlvbi5lcXVhbHMoTWVkaWFDb250cm9sSW50ZW50LkFDVElPTl9FTlFVRVVFKSkgewotICAgICAgICAgICAgdGhyb3dJZlF1ZXVpbmdOb3RTdXBwb3J0ZWQoKTsKLSAgICAgICAgfQotCi0gICAgICAgIEludGVudCBpbnRlbnQgPSBuZXcgSW50ZW50KGFjdGlvbik7Ci0gICAgICAgIGludGVudC5zZXREYXRhQW5kVHlwZShjb250ZW50VXJpLCBtaW1lVHlwZSk7Ci0gICAgICAgIGludGVudC5wdXRFeHRyYShNZWRpYUNvbnRyb2xJbnRlbnQuRVhUUkFfSVRFTV9TVEFUVVNfVVBEQVRFX1JFQ0VJVkVSLAotICAgICAgICAgICAgICAgIG1JdGVtU3RhdHVzUGVuZGluZ0ludGVudCk7Ci0gICAgICAgIGlmIChtZXRhZGF0YSAhPSBudWxsKSB7Ci0gICAgICAgICAgICBpbnRlbnQucHV0RXh0cmEoTWVkaWFDb250cm9sSW50ZW50LkVYVFJBX0lURU1fTUVUQURBVEEsIG1ldGFkYXRhKTsKLSAgICAgICAgfQotICAgICAgICBpZiAocG9zaXRpb25NaWxsaXMgIT0gMCkgewotICAgICAgICAgICAgaW50ZW50LnB1dEV4dHJhKE1lZGlhQ29udHJvbEludGVudC5FWFRSQV9JVEVNX0NPTlRFTlRfUE9TSVRJT04sIHBvc2l0aW9uTWlsbGlzKTsKLSAgICAgICAgfQotICAgICAgICBwZXJmb3JtSXRlbUFjdGlvbihpbnRlbnQsIG1TZXNzaW9uSWQsIG51bGwsIGV4dHJhcywgY2FsbGJhY2spOwotICAgIH0KLQotICAgIC8qKgotICAgICAqIFNlbmRzIGEgcmVxdWVzdCB0byBzZWVrIHRvIGEgbmV3IHBvc2l0aW9uIGluIGEgbWVkaWEgaXRlbS4KLSAgICAgKiA8cD4KLSAgICAgKiBTZWVrcyB0byBhIG5ldyBwb3NpdGlvbi4gIElmIHRoZSBxdWV1ZSB3YXMgcHJldmlvdXNseSBwYXVzZWQgdGhlbiBpdAotICAgICAqIHJlbWFpbnMgcGF1c2VkIGJ1dCB0aGUgaXRlbSdzIG5ldyBwb3NpdGlvbiBpcyBzdGlsbCByZW1lbWJlcmVkLgotICAgICAqIDwvcD48cD4KLSAgICAgKiBUaGUgcmVxdWVzdCBpcyBpc3N1ZWQgaW4gdGhlIGN1cnJlbnQgc2Vzc2lvbi4KLSAgICAgKiA8L3A+PHA+Ci0gICAgICogUGxlYXNlIHJlZmVyIHRvIHtAbGluayBNZWRpYUNvbnRyb2xJbnRlbnQjQUNUSU9OX1NFRUsgQUNUSU9OX1NFRUt9IGZvcgotICAgICAqIG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgdGhlIHNlbWFudGljcyBvZiB0aGlzIHJlcXVlc3QuCi0gICAgICogPC9wPgotICAgICAqCi0gICAgICogQHBhcmFtIGl0ZW1JZCBUaGUgaXRlbSBpZC4KLSAgICAgKiBAcGFyYW0gcG9zaXRpb25NaWxsaXMgVGhlIG5ldyBjb250ZW50IHBvc2l0aW9uIGZvciB0aGUgaXRlbSBpbiBtaWxsaXNlY29uZHMsCi0gICAgICogb3IgPGNvZGU+MDwvY29kZT4gdG8gc3RhcnQgYXQgdGhlIGJlZ2lubmluZy4KLSAgICAgKiBAcGFyYW0gZXh0cmFzIEEgYnVuZGxlIG9mIGV4dHJhIGFyZ3VtZW50cyB0byBiZSBhZGRlZCB0byB0aGUKLSAgICAgKiB7QGxpbmsgTWVkaWFDb250cm9sSW50ZW50I0FDVElPTl9TRUVLfSBpbnRlbnQsIG9yIG51bGwgaWYgbm9uZS4KLSAgICAgKiBAcGFyYW0gY2FsbGJhY2sgQSBjYWxsYmFjayB0byBpbnZva2Ugd2hlbiB0aGUgcmVxdWVzdCBoYXMgYmVlbgotICAgICAqIHByb2Nlc3NlZCwgb3IgbnVsbCBpZiBub25lLgotICAgICAqCi0gICAgICogQHRocm93cyBJbGxlZ2FsU3RhdGVFeGNlcHRpb24gaWYgdGhlcmUgaXMgbm8gY3VycmVudCBzZXNzaW9uLgotICAgICAqCi0gICAgICogQHNlZSBNZWRpYUNvbnRyb2xJbnRlbnQjQUNUSU9OX1NFRUsKLSAgICAgKiBAc2VlICNpc1JlbW90ZVBsYXliYWNrU3VwcG9ydGVkCi0gICAgICovCi0gICAgcHVibGljIHZvaWQgc2VlayhTdHJpbmcgaXRlbUlkLCBsb25nIHBvc2l0aW9uTWlsbGlzLCBCdW5kbGUgZXh0cmFzLAotICAgICAgICAgICAgSXRlbUFjdGlvbkNhbGxiYWNrIGNhbGxiYWNrKSB7Ci0gICAgICAgIGlmIChpdGVtSWQgPT0gbnVsbCkgewotICAgICAgICAgICAgdGhyb3cgbmV3IElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbigiaXRlbUlkIG11c3Qgbm90IGJlIG51bGwiKTsKLSAgICAgICAgfQotICAgICAgICB0aHJvd0lmTm9DdXJyZW50U2Vzc2lvbigpOwotCi0gICAgICAgIEludGVudCBpbnRlbnQgPSBuZXcgSW50ZW50KE1lZGlhQ29udHJvbEludGVudC5BQ1RJT05fU0VFSyk7Ci0gICAgICAgIGludGVudC5wdXRFeHRyYShNZWRpYUNvbnRyb2xJbnRlbnQuRVhUUkFfSVRFTV9DT05URU5UX1BPU0lUSU9OLCBwb3NpdGlvbk1pbGxpcyk7Ci0gICAgICAgIHBlcmZvcm1JdGVtQWN0aW9uKGludGVudCwgbVNlc3Npb25JZCwgaXRlbUlkLCBleHRyYXMsIGNhbGxiYWNrKTsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBTZW5kcyBhIHJlcXVlc3QgdG8gZ2V0IHRoZSBzdGF0dXMgb2YgYSBtZWRpYSBpdGVtLgotICAgICAqIDxwPgotICAgICAqIFRoZSByZXF1ZXN0IGlzIGlzc3VlZCBpbiB0aGUgY3VycmVudCBzZXNzaW9uLgotICAgICAqIDwvcD48cD4KLSAgICAgKiBQbGVhc2UgcmVmZXIgdG8ge0BsaW5rIE1lZGlhQ29udHJvbEludGVudCNBQ1RJT05fR0VUX1NUQVRVUyBBQ1RJT05fR0VUX1NUQVRVU30gZm9yCi0gICAgICogbW9yZSBpbmZvcm1hdGlvbiBhYm91dCB0aGUgc2VtYW50aWNzIG9mIHRoaXMgcmVxdWVzdC4KLSAgICAgKiA8L3A+Ci0gICAgICoKLSAgICAgKiBAcGFyYW0gaXRlbUlkIFRoZSBpdGVtIGlkLgotICAgICAqIEBwYXJhbSBleHRyYXMgQSBidW5kbGUgb2YgZXh0cmEgYXJndW1lbnRzIHRvIGJlIGFkZGVkIHRvIHRoZQotICAgICAqIHtAbGluayBNZWRpYUNvbnRyb2xJbnRlbnQjQUNUSU9OX0dFVF9TVEFUVVN9IGludGVudCwgb3IgbnVsbCBpZiBub25lLgotICAgICAqIEBwYXJhbSBjYWxsYmFjayBBIGNhbGxiYWNrIHRvIGludm9rZSB3aGVuIHRoZSByZXF1ZXN0IGhhcyBiZWVuCi0gICAgICogcHJvY2Vzc2VkLCBvciBudWxsIGlmIG5vbmUuCi0gICAgICoKLSAgICAgKiBAdGhyb3dzIElsbGVnYWxTdGF0ZUV4Y2VwdGlvbiBpZiB0aGVyZSBpcyBubyBjdXJyZW50IHNlc3Npb24uCi0gICAgICoKLSAgICAgKiBAc2VlIE1lZGlhQ29udHJvbEludGVudCNBQ1RJT05fR0VUX1NUQVRVUwotICAgICAqIEBzZWUgI2lzUmVtb3RlUGxheWJhY2tTdXBwb3J0ZWQKLSAgICAgKi8KLSAgICBwdWJsaWMgdm9pZCBnZXRTdGF0dXMoU3RyaW5nIGl0ZW1JZCwgQnVuZGxlIGV4dHJhcywgSXRlbUFjdGlvbkNhbGxiYWNrIGNhbGxiYWNrKSB7Ci0gICAgICAgIGlmIChpdGVtSWQgPT0gbnVsbCkgewotICAgICAgICAgICAgdGhyb3cgbmV3IElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbigiaXRlbUlkIG11c3Qgbm90IGJlIG51bGwiKTsKLSAgICAgICAgfQotICAgICAgICB0aHJvd0lmTm9DdXJyZW50U2Vzc2lvbigpOwotCi0gICAgICAgIEludGVudCBpbnRlbnQgPSBuZXcgSW50ZW50KE1lZGlhQ29udHJvbEludGVudC5BQ1RJT05fR0VUX1NUQVRVUyk7Ci0gICAgICAgIHBlcmZvcm1JdGVtQWN0aW9uKGludGVudCwgbVNlc3Npb25JZCwgaXRlbUlkLCBleHRyYXMsIGNhbGxiYWNrKTsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBTZW5kcyBhIHJlcXVlc3QgdG8gcmVtb3ZlIGEgbWVkaWEgaXRlbSBmcm9tIHRoZSBxdWV1ZS4KLSAgICAgKiA8cD4KLSAgICAgKiBUaGUgcmVxdWVzdCBpcyBpc3N1ZWQgaW4gdGhlIGN1cnJlbnQgc2Vzc2lvbi4KLSAgICAgKiA8L3A+PHA+Ci0gICAgICogUGxlYXNlIHJlZmVyIHRvIHtAbGluayBNZWRpYUNvbnRyb2xJbnRlbnQjQUNUSU9OX1JFTU9WRSBBQ1RJT05fUkVNT1ZFfSBmb3IKLSAgICAgKiBtb3JlIGluZm9ybWF0aW9uIGFib3V0IHRoZSBzZW1hbnRpY3Mgb2YgdGhpcyByZXF1ZXN0LgotICAgICAqIDwvcD4KLSAgICAgKgotICAgICAqIEBwYXJhbSBpdGVtSWQgVGhlIGl0ZW0gaWQuCi0gICAgICogQHBhcmFtIGV4dHJhcyBBIGJ1bmRsZSBvZiBleHRyYSBhcmd1bWVudHMgdG8gYmUgYWRkZWQgdG8gdGhlCi0gICAgICoge0BsaW5rIE1lZGlhQ29udHJvbEludGVudCNBQ1RJT05fUkVNT1ZFfSBpbnRlbnQsIG9yIG51bGwgaWYgbm9uZS4KLSAgICAgKiBAcGFyYW0gY2FsbGJhY2sgQSBjYWxsYmFjayB0byBpbnZva2Ugd2hlbiB0aGUgcmVxdWVzdCBoYXMgYmVlbgotICAgICAqIHByb2Nlc3NlZCwgb3IgbnVsbCBpZiBub25lLgotICAgICAqCi0gICAgICogQHRocm93cyBJbGxlZ2FsU3RhdGVFeGNlcHRpb24gaWYgdGhlcmUgaXMgbm8gY3VycmVudCBzZXNzaW9uLgotICAgICAqIEB0aHJvd3MgVW5zdXBwb3J0ZWRPcGVyYXRpb25FeGNlcHRpb24gaWYgdGhlIHJvdXRlIGRvZXMgbm90IHN1cHBvcnQgcXVldWluZy4KLSAgICAgKgotICAgICAqIEBzZWUgTWVkaWFDb250cm9sSW50ZW50I0FDVElPTl9SRU1PVkUKLSAgICAgKiBAc2VlICNpc1JlbW90ZVBsYXliYWNrU3VwcG9ydGVkCi0gICAgICogQHNlZSAjaXNRdWV1aW5nU3VwcG9ydGVkCi0gICAgICovCi0gICAgcHVibGljIHZvaWQgcmVtb3ZlKFN0cmluZyBpdGVtSWQsIEJ1bmRsZSBleHRyYXMsIEl0ZW1BY3Rpb25DYWxsYmFjayBjYWxsYmFjaykgewotICAgICAgICBpZiAoaXRlbUlkID09IG51bGwpIHsKLSAgICAgICAgICAgIHRocm93IG5ldyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oIml0ZW1JZCBtdXN0IG5vdCBiZSBudWxsIik7Ci0gICAgICAgIH0KLSAgICAgICAgdGhyb3dJZlF1ZXVpbmdOb3RTdXBwb3J0ZWQoKTsKLSAgICAgICAgdGhyb3dJZk5vQ3VycmVudFNlc3Npb24oKTsKLQotICAgICAgICBJbnRlbnQgaW50ZW50ID0gbmV3IEludGVudChNZWRpYUNvbnRyb2xJbnRlbnQuQUNUSU9OX1JFTU9WRSk7Ci0gICAgICAgIHBlcmZvcm1JdGVtQWN0aW9uKGludGVudCwgbVNlc3Npb25JZCwgaXRlbUlkLCBleHRyYXMsIGNhbGxiYWNrKTsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBTZW5kcyBhIHJlcXVlc3QgdG8gcGF1c2UgbWVkaWEgcGxheWJhY2suCi0gICAgICogPHA+Ci0gICAgICogVGhlIHJlcXVlc3QgaXMgaXNzdWVkIGluIHRoZSBjdXJyZW50IHNlc3Npb24uICBJZiBwbGF5YmFjayBpcyBhbHJlYWR5IHBhdXNlZAotICAgICAqIHRoZW4gdGhlIHJlcXVlc3QgaGFzIG5vIGVmZmVjdC4KLSAgICAgKiA8L3A+PHA+Ci0gICAgICogUGxlYXNlIHJlZmVyIHRvIHtAbGluayBNZWRpYUNvbnRyb2xJbnRlbnQjQUNUSU9OX1BBVVNFIEFDVElPTl9QQVVTRX0gZm9yCi0gICAgICogbW9yZSBpbmZvcm1hdGlvbiBhYm91dCB0aGUgc2VtYW50aWNzIG9mIHRoaXMgcmVxdWVzdC4KLSAgICAgKiA8L3A+Ci0gICAgICoKLSAgICAgKiBAcGFyYW0gZXh0cmFzIEEgYnVuZGxlIG9mIGV4dHJhIGFyZ3VtZW50cyB0byBiZSBhZGRlZCB0byB0aGUKLSAgICAgKiB7QGxpbmsgTWVkaWFDb250cm9sSW50ZW50I0FDVElPTl9QQVVTRX0gaW50ZW50LCBvciBudWxsIGlmIG5vbmUuCi0gICAgICogQHBhcmFtIGNhbGxiYWNrIEEgY2FsbGJhY2sgdG8gaW52b2tlIHdoZW4gdGhlIHJlcXVlc3QgaGFzIGJlZW4KLSAgICAgKiBwcm9jZXNzZWQsIG9yIG51bGwgaWYgbm9uZS4KLSAgICAgKgotICAgICAqIEB0aHJvd3MgSWxsZWdhbFN0YXRlRXhjZXB0aW9uIGlmIHRoZXJlIGlzIG5vIGN1cnJlbnQgc2Vzc2lvbi4KLSAgICAgKgotICAgICAqIEBzZWUgTWVkaWFDb250cm9sSW50ZW50I0FDVElPTl9QQVVTRQotICAgICAqIEBzZWUgI2lzUmVtb3RlUGxheWJhY2tTdXBwb3J0ZWQKLSAgICAgKi8KLSAgICBwdWJsaWMgdm9pZCBwYXVzZShCdW5kbGUgZXh0cmFzLCBTZXNzaW9uQWN0aW9uQ2FsbGJhY2sgY2FsbGJhY2spIHsKLSAgICAgICAgdGhyb3dJZk5vQ3VycmVudFNlc3Npb24oKTsKLQotICAgICAgICBJbnRlbnQgaW50ZW50ID0gbmV3IEludGVudChNZWRpYUNvbnRyb2xJbnRlbnQuQUNUSU9OX1BBVVNFKTsKLSAgICAgICAgcGVyZm9ybVNlc3Npb25BY3Rpb24oaW50ZW50LCBtU2Vzc2lvbklkLCBleHRyYXMsIGNhbGxiYWNrKTsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBTZW5kcyBhIHJlcXVlc3QgdG8gcmVzdW1lICh1bnBhdXNlKSBtZWRpYSBwbGF5YmFjay4KLSAgICAgKiA8cD4KLSAgICAgKiBUaGUgcmVxdWVzdCBpcyBpc3N1ZWQgaW4gdGhlIGN1cnJlbnQgc2Vzc2lvbi4gIElmIHBsYXliYWNrIGlzIG5vdCBwYXVzZWQKLSAgICAgKiB0aGVuIHRoZSByZXF1ZXN0IGhhcyBubyBlZmZlY3QuCi0gICAgICogPC9wPjxwPgotICAgICAqIFBsZWFzZSByZWZlciB0byB7QGxpbmsgTWVkaWFDb250cm9sSW50ZW50I0FDVElPTl9SRVNVTUUgQUNUSU9OX1JFU1VNRX0gZm9yCi0gICAgICogbW9yZSBpbmZvcm1hdGlvbiBhYm91dCB0aGUgc2VtYW50aWNzIG9mIHRoaXMgcmVxdWVzdC4KLSAgICAgKiA8L3A+Ci0gICAgICoKLSAgICAgKiBAcGFyYW0gZXh0cmFzIEEgYnVuZGxlIG9mIGV4dHJhIGFyZ3VtZW50cyB0byBiZSBhZGRlZCB0byB0aGUKLSAgICAgKiB7QGxpbmsgTWVkaWFDb250cm9sSW50ZW50I0FDVElPTl9SRVNVTUV9IGludGVudCwgb3IgbnVsbCBpZiBub25lLgotICAgICAqIEBwYXJhbSBjYWxsYmFjayBBIGNhbGxiYWNrIHRvIGludm9rZSB3aGVuIHRoZSByZXF1ZXN0IGhhcyBiZWVuCi0gICAgICogcHJvY2Vzc2VkLCBvciBudWxsIGlmIG5vbmUuCi0gICAgICoKLSAgICAgKiBAdGhyb3dzIElsbGVnYWxTdGF0ZUV4Y2VwdGlvbiBpZiB0aGVyZSBpcyBubyBjdXJyZW50IHNlc3Npb24uCi0gICAgICoKLSAgICAgKiBAc2VlIE1lZGlhQ29udHJvbEludGVudCNBQ1RJT05fUkVTVU1FCi0gICAgICogQHNlZSAjaXNSZW1vdGVQbGF5YmFja1N1cHBvcnRlZAotICAgICAqLwotICAgIHB1YmxpYyB2b2lkIHJlc3VtZShCdW5kbGUgZXh0cmFzLCBTZXNzaW9uQWN0aW9uQ2FsbGJhY2sgY2FsbGJhY2spIHsKLSAgICAgICAgdGhyb3dJZk5vQ3VycmVudFNlc3Npb24oKTsKLQotICAgICAgICBJbnRlbnQgaW50ZW50ID0gbmV3IEludGVudChNZWRpYUNvbnRyb2xJbnRlbnQuQUNUSU9OX1JFU1VNRSk7Ci0gICAgICAgIHBlcmZvcm1TZXNzaW9uQWN0aW9uKGludGVudCwgbVNlc3Npb25JZCwgZXh0cmFzLCBjYWxsYmFjayk7Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogU2VuZHMgYSByZXF1ZXN0IHRvIHN0b3AgbWVkaWEgcGxheWJhY2sgYW5kIGNsZWFyIHRoZSBtZWRpYSBwbGF5YmFjayBxdWV1ZS4KLSAgICAgKiA8cD4KLSAgICAgKiBUaGUgcmVxdWVzdCBpcyBpc3N1ZWQgaW4gdGhlIGN1cnJlbnQgc2Vzc2lvbi4gIElmIHRoZSBxdWV1ZSBpcyBhbHJlYWR5Ci0gICAgICogZW1wdHkgdGhlbiB0aGUgcmVxdWVzdCBoYXMgbm8gZWZmZWN0LgotICAgICAqIDwvcD48cD4KLSAgICAgKiBQbGVhc2UgcmVmZXIgdG8ge0BsaW5rIE1lZGlhQ29udHJvbEludGVudCNBQ1RJT05fU1RPUCBBQ1RJT05fU1RPUH0gZm9yCi0gICAgICogbW9yZSBpbmZvcm1hdGlvbiBhYm91dCB0aGUgc2VtYW50aWNzIG9mIHRoaXMgcmVxdWVzdC4KLSAgICAgKiA8L3A+Ci0gICAgICoKLSAgICAgKiBAcGFyYW0gZXh0cmFzIEEgYnVuZGxlIG9mIGV4dHJhIGFyZ3VtZW50cyB0byBiZSBhZGRlZCB0byB0aGUKLSAgICAgKiB7QGxpbmsgTWVkaWFDb250cm9sSW50ZW50I0FDVElPTl9TVE9QfSBpbnRlbnQsIG9yIG51bGwgaWYgbm9uZS4KLSAgICAgKiBAcGFyYW0gY2FsbGJhY2sgQSBjYWxsYmFjayB0byBpbnZva2Ugd2hlbiB0aGUgcmVxdWVzdCBoYXMgYmVlbgotICAgICAqIHByb2Nlc3NlZCwgb3IgbnVsbCBpZiBub25lLgotICAgICAqCi0gICAgICogQHRocm93cyBJbGxlZ2FsU3RhdGVFeGNlcHRpb24gaWYgdGhlcmUgaXMgbm8gY3VycmVudCBzZXNzaW9uLgotICAgICAqCi0gICAgICogQHNlZSBNZWRpYUNvbnRyb2xJbnRlbnQjQUNUSU9OX1NUT1AKLSAgICAgKiBAc2VlICNpc1JlbW90ZVBsYXliYWNrU3VwcG9ydGVkCi0gICAgICovCi0gICAgcHVibGljIHZvaWQgc3RvcChCdW5kbGUgZXh0cmFzLCBTZXNzaW9uQWN0aW9uQ2FsbGJhY2sgY2FsbGJhY2spIHsKLSAgICAgICAgdGhyb3dJZk5vQ3VycmVudFNlc3Npb24oKTsKLQotICAgICAgICBJbnRlbnQgaW50ZW50ID0gbmV3IEludGVudChNZWRpYUNvbnRyb2xJbnRlbnQuQUNUSU9OX1NUT1ApOwotICAgICAgICBwZXJmb3JtU2Vzc2lvbkFjdGlvbihpbnRlbnQsIG1TZXNzaW9uSWQsIGV4dHJhcywgY2FsbGJhY2spOwotICAgIH0KLQotICAgIC8qKgotICAgICAqIFNlbmRzIGEgcmVxdWVzdCB0byBzdGFydCBhIG5ldyBtZWRpYSBwbGF5YmFjayBzZXNzaW9uLgotICAgICAqIDxwPgotICAgICAqIFRoZSBhcHBsaWNhdGlvbiBtdXN0IHdhaXQgZm9yIHRoZSBjYWxsYmFjayB0byBpbmRpY2F0ZSB0aGF0IHRoaXMgcmVxdWVzdAotICAgICAqIGlzIGNvbXBsZXRlIGJlZm9yZSBpc3N1aW5nIG90aGVyIHJlcXVlc3RzIHRoYXQgYWZmZWN0IHRoZSBzZXNzaW9uLiAgSWYgdGhpcwotICAgICAqIHJlcXVlc3QgaXMgc3VjY2Vzc2Z1bCB0aGVuIHRoZSBwcmV2aW91cyBzZXNzaW9uIHdpbGwgYmUgaW52YWxpZGF0ZWQuCi0gICAgICogPC9wPjxwPgotICAgICAqIFBsZWFzZSByZWZlciB0byB7QGxpbmsgTWVkaWFDb250cm9sSW50ZW50I0FDVElPTl9TVEFSVF9TRVNTSU9OIEFDVElPTl9TVEFSVF9TRVNTSU9OfQotICAgICAqIGZvciBtb3JlIGluZm9ybWF0aW9uIGFib3V0IHRoZSBzZW1hbnRpY3Mgb2YgdGhpcyByZXF1ZXN0LgotICAgICAqIDwvcD4KLSAgICAgKgotICAgICAqIEBwYXJhbSBleHRyYXMgQSBidW5kbGUgb2YgZXh0cmEgYXJndW1lbnRzIHRvIGJlIGFkZGVkIHRvIHRoZQotICAgICAqIHtAbGluayBNZWRpYUNvbnRyb2xJbnRlbnQjQUNUSU9OX1NUQVJUX1NFU1NJT059IGludGVudCwgb3IgbnVsbCBpZiBub25lLgotICAgICAqIEBwYXJhbSBjYWxsYmFjayBBIGNhbGxiYWNrIHRvIGludm9rZSB3aGVuIHRoZSByZXF1ZXN0IGhhcyBiZWVuCi0gICAgICogcHJvY2Vzc2VkLCBvciBudWxsIGlmIG5vbmUuCi0gICAgICoKLSAgICAgKiBAdGhyb3dzIFVuc3VwcG9ydGVkT3BlcmF0aW9uRXhjZXB0aW9uIGlmIHRoZSByb3V0ZSBkb2VzIG5vdCBzdXBwb3J0IHNlc3Npb24gbWFuYWdlbWVudC4KLSAgICAgKgotICAgICAqIEBzZWUgTWVkaWFDb250cm9sSW50ZW50I0FDVElPTl9TVEFSVF9TRVNTSU9OCi0gICAgICogQHNlZSAjaXNSZW1vdGVQbGF5YmFja1N1cHBvcnRlZAotICAgICAqIEBzZWUgI2lzU2Vzc2lvbk1hbmFnZW1lbnRTdXBwb3J0ZWQKLSAgICAgKi8KLSAgICBwdWJsaWMgdm9pZCBzdGFydFNlc3Npb24oQnVuZGxlIGV4dHJhcywgU2Vzc2lvbkFjdGlvbkNhbGxiYWNrIGNhbGxiYWNrKSB7Ci0gICAgICAgIHRocm93SWZTZXNzaW9uTWFuYWdlbWVudE5vdFN1cHBvcnRlZCgpOwotCi0gICAgICAgIEludGVudCBpbnRlbnQgPSBuZXcgSW50ZW50KE1lZGlhQ29udHJvbEludGVudC5BQ1RJT05fU1RBUlRfU0VTU0lPTik7Ci0gICAgICAgIGludGVudC5wdXRFeHRyYShNZWRpYUNvbnRyb2xJbnRlbnQuRVhUUkFfU0VTU0lPTl9TVEFUVVNfVVBEQVRFX1JFQ0VJVkVSLAotICAgICAgICAgICAgICAgIG1TZXNzaW9uU3RhdHVzUGVuZGluZ0ludGVudCk7Ci0gICAgICAgIGlmIChtUm91dGVTdXBwb3J0c01lc3NhZ2luZykgewotICAgICAgICAgICAgaW50ZW50LnB1dEV4dHJhKE1lZGlhQ29udHJvbEludGVudC5FWFRSQV9NRVNTQUdFX1JFQ0VJVkVSLCBtTWVzc2FnZVBlbmRpbmdJbnRlbnQpOwotICAgICAgICB9Ci0gICAgICAgIHBlcmZvcm1TZXNzaW9uQWN0aW9uKGludGVudCwgbnVsbCwgZXh0cmFzLCBjYWxsYmFjayk7Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogU2VuZHMgYSBtZXNzYWdlLgotICAgICAqIDxwPgotICAgICAqIFRoZSByZXF1ZXN0IGlzIGlzc3VlZCBpbiB0aGUgY3VycmVudCBzZXNzaW9uLgotICAgICAqIDwvcD48cD4KLSAgICAgKiBQbGVhc2UgcmVmZXIgdG8ge0BsaW5rIE1lZGlhQ29udHJvbEludGVudCNBQ1RJT05fU0VORF9NRVNTQUdFfSBmb3IKLSAgICAgKiBtb3JlIGluZm9ybWF0aW9uIGFib3V0IHRoZSBzZW1hbnRpY3Mgb2YgdGhpcyByZXF1ZXN0LgotICAgICAqIDwvcD4KLSAgICAgKgotICAgICAqIEBwYXJhbSBtZXNzYWdlIEEgYnVuZGxlIG1lc3NhZ2UgZGVub3Rpbmcge0BsaW5rIE1lZGlhQ29udHJvbEludGVudCNFWFRSQV9NRVNTQUdFfS4KLSAgICAgKiBAcGFyYW0gY2FsbGJhY2sgQSBjYWxsYmFjayB0byBpbnZva2Ugd2hlbiB0aGUgcmVxdWVzdCBoYXMgYmVlbiBwcm9jZXNzZWQsIG9yIG51bGwgaWYgbm9uZS4KLSAgICAgKgotICAgICAqIEB0aHJvd3MgSWxsZWdhbFN0YXRlRXhjZXB0aW9uIGlmIHRoZXJlIGlzIG5vIGN1cnJlbnQgc2Vzc2lvbi4KLSAgICAgKiBAdGhyb3dzIFVuc3VwcG9ydGVkT3BlcmF0aW9uRXhjZXB0aW9uIGlmIHRoZSByb3V0ZSBkb2VzIG5vdCBzdXBwb3J0IG1lc3NhZ2VzLgotICAgICAqCi0gICAgICogQHNlZSBNZWRpYUNvbnRyb2xJbnRlbnQjQUNUSU9OX1NFTkRfTUVTU0FHRQotICAgICAqIEBzZWUgI2lzTWVzc2FnaW5nU3VwcG9ydGVkCi0gICAgICovCi0gICAgcHVibGljIHZvaWQgc2VuZE1lc3NhZ2UoQnVuZGxlIG1lc3NhZ2UsIFNlc3Npb25BY3Rpb25DYWxsYmFjayBjYWxsYmFjaykgewotICAgICAgICB0aHJvd0lmTm9DdXJyZW50U2Vzc2lvbigpOwotICAgICAgICB0aHJvd0lmTWVzc2FnZU5vdFN1cHBvcnRlZCgpOwotCi0gICAgICAgIEludGVudCBpbnRlbnQgPSBuZXcgSW50ZW50KE1lZGlhQ29udHJvbEludGVudC5BQ1RJT05fU0VORF9NRVNTQUdFKTsKLSAgICAgICAgcGVyZm9ybVNlc3Npb25BY3Rpb24oaW50ZW50LCBtU2Vzc2lvbklkLCBtZXNzYWdlLCBjYWxsYmFjayk7Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogU2VuZHMgYSByZXF1ZXN0IHRvIGdldCB0aGUgc3RhdHVzIG9mIHRoZSBtZWRpYSBwbGF5YmFjayBzZXNzaW9uLgotICAgICAqIDxwPgotICAgICAqIFRoZSByZXF1ZXN0IGlzIGlzc3VlZCBpbiB0aGUgY3VycmVudCBzZXNzaW9uLgotICAgICAqIDwvcD48cD4KLSAgICAgKiBQbGVhc2UgcmVmZXIgdG8ge0BsaW5rIE1lZGlhQ29udHJvbEludGVudCNBQ1RJT05fR0VUX1NFU1NJT05fU1RBVFVTCi0gICAgICogQUNUSU9OX0dFVF9TRVNTSU9OX1NUQVRVU30gZm9yIG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgdGhlIHNlbWFudGljcyBvZiB0aGlzIHJlcXVlc3QuCi0gICAgICogPC9wPgotICAgICAqCi0gICAgICogQHBhcmFtIGV4dHJhcyBBIGJ1bmRsZSBvZiBleHRyYSBhcmd1bWVudHMgdG8gYmUgYWRkZWQgdG8gdGhlCi0gICAgICoge0BsaW5rIE1lZGlhQ29udHJvbEludGVudCNBQ1RJT05fR0VUX1NFU1NJT05fU1RBVFVTfSBpbnRlbnQsIG9yIG51bGwgaWYgbm9uZS4KLSAgICAgKiBAcGFyYW0gY2FsbGJhY2sgQSBjYWxsYmFjayB0byBpbnZva2Ugd2hlbiB0aGUgcmVxdWVzdCBoYXMgYmVlbgotICAgICAqIHByb2Nlc3NlZCwgb3IgbnVsbCBpZiBub25lLgotICAgICAqCi0gICAgICogQHRocm93cyBJbGxlZ2FsU3RhdGVFeGNlcHRpb24gaWYgdGhlcmUgaXMgbm8gY3VycmVudCBzZXNzaW9uLgotICAgICAqIEB0aHJvd3MgVW5zdXBwb3J0ZWRPcGVyYXRpb25FeGNlcHRpb24gaWYgdGhlIHJvdXRlIGRvZXMgbm90IHN1cHBvcnQgc2Vzc2lvbiBtYW5hZ2VtZW50LgotICAgICAqCi0gICAgICogQHNlZSBNZWRpYUNvbnRyb2xJbnRlbnQjQUNUSU9OX0dFVF9TRVNTSU9OX1NUQVRVUwotICAgICAqIEBzZWUgI2lzUmVtb3RlUGxheWJhY2tTdXBwb3J0ZWQKLSAgICAgKiBAc2VlICNpc1Nlc3Npb25NYW5hZ2VtZW50U3VwcG9ydGVkCi0gICAgICovCi0gICAgcHVibGljIHZvaWQgZ2V0U2Vzc2lvblN0YXR1cyhCdW5kbGUgZXh0cmFzLCBTZXNzaW9uQWN0aW9uQ2FsbGJhY2sgY2FsbGJhY2spIHsKLSAgICAgICAgdGhyb3dJZlNlc3Npb25NYW5hZ2VtZW50Tm90U3VwcG9ydGVkKCk7Ci0gICAgICAgIHRocm93SWZOb0N1cnJlbnRTZXNzaW9uKCk7Ci0KLSAgICAgICAgSW50ZW50IGludGVudCA9IG5ldyBJbnRlbnQoTWVkaWFDb250cm9sSW50ZW50LkFDVElPTl9HRVRfU0VTU0lPTl9TVEFUVVMpOwotICAgICAgICBwZXJmb3JtU2Vzc2lvbkFjdGlvbihpbnRlbnQsIG1TZXNzaW9uSWQsIGV4dHJhcywgY2FsbGJhY2spOwotICAgIH0KLQotICAgIC8qKgotICAgICAqIFNlbmRzIGEgcmVxdWVzdCB0byBlbmQgdGhlIG1lZGlhIHBsYXliYWNrIHNlc3Npb24uCi0gICAgICogPHA+Ci0gICAgICogVGhlIHJlcXVlc3QgaXMgaXNzdWVkIGluIHRoZSBjdXJyZW50IHNlc3Npb24uICBJZiB0aGlzIHJlcXVlc3QgaXMgc3VjY2Vzc2Z1bCwKLSAgICAgKiB0aGUge0BsaW5rICNnZXRTZXNzaW9uSWQgc2Vzc2lvbiBpZCBwcm9wZXJ0eX0gd2lsbCBiZSBzZXQgdG8gbnVsbCBhZnRlcgotICAgICAqIHRoZSBjYWxsYmFjayBpcyBpbnZva2VkLgotICAgICAqIDwvcD48cD4KLSAgICAgKiBQbGVhc2UgcmVmZXIgdG8ge0BsaW5rIE1lZGlhQ29udHJvbEludGVudCNBQ1RJT05fRU5EX1NFU1NJT04gQUNUSU9OX0VORF9TRVNTSU9OfQotICAgICAqIGZvciBtb3JlIGluZm9ybWF0aW9uIGFib3V0IHRoZSBzZW1hbnRpY3Mgb2YgdGhpcyByZXF1ZXN0LgotICAgICAqIDwvcD4KLSAgICAgKgotICAgICAqIEBwYXJhbSBleHRyYXMgQSBidW5kbGUgb2YgZXh0cmEgYXJndW1lbnRzIHRvIGJlIGFkZGVkIHRvIHRoZQotICAgICAqIHtAbGluayBNZWRpYUNvbnRyb2xJbnRlbnQjQUNUSU9OX0VORF9TRVNTSU9OfSBpbnRlbnQsIG9yIG51bGwgaWYgbm9uZS4KLSAgICAgKiBAcGFyYW0gY2FsbGJhY2sgQSBjYWxsYmFjayB0byBpbnZva2Ugd2hlbiB0aGUgcmVxdWVzdCBoYXMgYmVlbgotICAgICAqIHByb2Nlc3NlZCwgb3IgbnVsbCBpZiBub25lLgotICAgICAqCi0gICAgICogQHRocm93cyBJbGxlZ2FsU3RhdGVFeGNlcHRpb24gaWYgdGhlcmUgaXMgbm8gY3VycmVudCBzZXNzaW9uLgotICAgICAqIEB0aHJvd3MgVW5zdXBwb3J0ZWRPcGVyYXRpb25FeGNlcHRpb24gaWYgdGhlIHJvdXRlIGRvZXMgbm90IHN1cHBvcnQgc2Vzc2lvbiBtYW5hZ2VtZW50LgotICAgICAqCi0gICAgICogQHNlZSBNZWRpYUNvbnRyb2xJbnRlbnQjQUNUSU9OX0VORF9TRVNTSU9OCi0gICAgICogQHNlZSAjaXNSZW1vdGVQbGF5YmFja1N1cHBvcnRlZAotICAgICAqIEBzZWUgI2lzU2Vzc2lvbk1hbmFnZW1lbnRTdXBwb3J0ZWQKLSAgICAgKi8KLSAgICBwdWJsaWMgdm9pZCBlbmRTZXNzaW9uKEJ1bmRsZSBleHRyYXMsIFNlc3Npb25BY3Rpb25DYWxsYmFjayBjYWxsYmFjaykgewotICAgICAgICB0aHJvd0lmU2Vzc2lvbk1hbmFnZW1lbnROb3RTdXBwb3J0ZWQoKTsKLSAgICAgICAgdGhyb3dJZk5vQ3VycmVudFNlc3Npb24oKTsKLQotICAgICAgICBJbnRlbnQgaW50ZW50ID0gbmV3IEludGVudChNZWRpYUNvbnRyb2xJbnRlbnQuQUNUSU9OX0VORF9TRVNTSU9OKTsKLSAgICAgICAgcGVyZm9ybVNlc3Npb25BY3Rpb24oaW50ZW50LCBtU2Vzc2lvbklkLCBleHRyYXMsIGNhbGxiYWNrKTsKLSAgICB9Ci0KLSAgICBwcml2YXRlIHZvaWQgcGVyZm9ybUl0ZW1BY3Rpb24oZmluYWwgSW50ZW50IGludGVudCwKLSAgICAgICAgICAgIGZpbmFsIFN0cmluZyBzZXNzaW9uSWQsIGZpbmFsIFN0cmluZyBpdGVtSWQsCi0gICAgICAgICAgICBCdW5kbGUgZXh0cmFzLCBmaW5hbCBJdGVtQWN0aW9uQ2FsbGJhY2sgY2FsbGJhY2spIHsKLSAgICAgICAgaW50ZW50LmFkZENhdGVnb3J5KE1lZGlhQ29udHJvbEludGVudC5DQVRFR09SWV9SRU1PVEVfUExBWUJBQ0spOwotICAgICAgICBpZiAoc2Vzc2lvbklkICE9IG51bGwpIHsKLSAgICAgICAgICAgIGludGVudC5wdXRFeHRyYShNZWRpYUNvbnRyb2xJbnRlbnQuRVhUUkFfU0VTU0lPTl9JRCwgc2Vzc2lvbklkKTsKLSAgICAgICAgfQotICAgICAgICBpZiAoaXRlbUlkICE9IG51bGwpIHsKLSAgICAgICAgICAgIGludGVudC5wdXRFeHRyYShNZWRpYUNvbnRyb2xJbnRlbnQuRVhUUkFfSVRFTV9JRCwgaXRlbUlkKTsKLSAgICAgICAgfQotICAgICAgICBpZiAoZXh0cmFzICE9IG51bGwpIHsKLSAgICAgICAgICAgIGludGVudC5wdXRFeHRyYXMoZXh0cmFzKTsKLSAgICAgICAgfQotICAgICAgICBsb2dSZXF1ZXN0KGludGVudCk7Ci0gICAgICAgIG1Sb3V0ZS5zZW5kQ29udHJvbFJlcXVlc3QoaW50ZW50LCBuZXcgTWVkaWFSb3V0ZXIuQ29udHJvbFJlcXVlc3RDYWxsYmFjaygpIHsKLSAgICAgICAgICAgIEBPdmVycmlkZQotICAgICAgICAgICAgcHVibGljIHZvaWQgb25SZXN1bHQoQnVuZGxlIGRhdGEpIHsKLSAgICAgICAgICAgICAgICBpZiAoZGF0YSAhPSBudWxsKSB7Ci0gICAgICAgICAgICAgICAgICAgIFN0cmluZyBzZXNzaW9uSWRSZXN1bHQgPSBpbmZlck1pc3NpbmdSZXN1bHQoc2Vzc2lvbklkLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEuZ2V0U3RyaW5nKE1lZGlhQ29udHJvbEludGVudC5FWFRSQV9TRVNTSU9OX0lEKSk7Ci0gICAgICAgICAgICAgICAgICAgIE1lZGlhU2Vzc2lvblN0YXR1cyBzZXNzaW9uU3RhdHVzID0gTWVkaWFTZXNzaW9uU3RhdHVzLmZyb21CdW5kbGUoCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YS5nZXRCdW5kbGUoTWVkaWFDb250cm9sSW50ZW50LkVYVFJBX1NFU1NJT05fU1RBVFVTKSk7Ci0gICAgICAgICAgICAgICAgICAgIFN0cmluZyBpdGVtSWRSZXN1bHQgPSBpbmZlck1pc3NpbmdSZXN1bHQoaXRlbUlkLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEuZ2V0U3RyaW5nKE1lZGlhQ29udHJvbEludGVudC5FWFRSQV9JVEVNX0lEKSk7Ci0gICAgICAgICAgICAgICAgICAgIE1lZGlhSXRlbVN0YXR1cyBpdGVtU3RhdHVzID0gTWVkaWFJdGVtU3RhdHVzLmZyb21CdW5kbGUoCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YS5nZXRCdW5kbGUoTWVkaWFDb250cm9sSW50ZW50LkVYVFJBX0lURU1fU1RBVFVTKSk7Ci0gICAgICAgICAgICAgICAgICAgIGFkb3B0U2Vzc2lvbihzZXNzaW9uSWRSZXN1bHQpOwotICAgICAgICAgICAgICAgICAgICBpZiAoc2Vzc2lvbklkUmVzdWx0ICE9IG51bGwgJiYgaXRlbUlkUmVzdWx0ICE9IG51bGwgJiYgaXRlbVN0YXR1cyAhPSBudWxsKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoREVCVUcpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBMb2cuZChUQUcsICJSZWNlaXZlZCByZXN1bHQgZnJvbSAiICsgaW50ZW50LmdldEFjdGlvbigpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArICI6IGRhdGE9IiArIGJ1bmRsZVRvU3RyaW5nKGRhdGEpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArICIsIHNlc3Npb25JZD0iICsgc2Vzc2lvbklkUmVzdWx0Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArICIsIHNlc3Npb25TdGF0dXM9IiArIHNlc3Npb25TdGF0dXMKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsgIiwgaXRlbUlkPSIgKyBpdGVtSWRSZXN1bHQKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsgIiwgaXRlbVN0YXR1cz0iICsgaXRlbVN0YXR1cyk7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICBjYWxsYmFjay5vblJlc3VsdChkYXRhLCBzZXNzaW9uSWRSZXN1bHQsIHNlc3Npb25TdGF0dXMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW1JZFJlc3VsdCwgaXRlbVN0YXR1cyk7Ci0gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgaGFuZGxlSW52YWxpZFJlc3VsdChpbnRlbnQsIGNhbGxiYWNrLCBkYXRhKTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgICAgICBwdWJsaWMgdm9pZCBvbkVycm9yKFN0cmluZyBlcnJvciwgQnVuZGxlIGRhdGEpIHsKLSAgICAgICAgICAgICAgICBoYW5kbGVFcnJvcihpbnRlbnQsIGNhbGxiYWNrLCBlcnJvciwgZGF0YSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0pOwotICAgIH0KLQotICAgIHByaXZhdGUgdm9pZCBwZXJmb3JtU2Vzc2lvbkFjdGlvbihmaW5hbCBJbnRlbnQgaW50ZW50LCBmaW5hbCBTdHJpbmcgc2Vzc2lvbklkLAotICAgICAgICAgICAgQnVuZGxlIGV4dHJhcywgZmluYWwgU2Vzc2lvbkFjdGlvbkNhbGxiYWNrIGNhbGxiYWNrKSB7Ci0gICAgICAgIGludGVudC5hZGRDYXRlZ29yeShNZWRpYUNvbnRyb2xJbnRlbnQuQ0FURUdPUllfUkVNT1RFX1BMQVlCQUNLKTsKLSAgICAgICAgaWYgKHNlc3Npb25JZCAhPSBudWxsKSB7Ci0gICAgICAgICAgICBpbnRlbnQucHV0RXh0cmEoTWVkaWFDb250cm9sSW50ZW50LkVYVFJBX1NFU1NJT05fSUQsIHNlc3Npb25JZCk7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKGV4dHJhcyAhPSBudWxsKSB7Ci0gICAgICAgICAgICBpbnRlbnQucHV0RXh0cmFzKGV4dHJhcyk7Ci0gICAgICAgIH0KLSAgICAgICAgbG9nUmVxdWVzdChpbnRlbnQpOwotICAgICAgICBtUm91dGUuc2VuZENvbnRyb2xSZXF1ZXN0KGludGVudCwgbmV3IE1lZGlhUm91dGVyLkNvbnRyb2xSZXF1ZXN0Q2FsbGJhY2soKSB7Ci0gICAgICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgICAgIHB1YmxpYyB2b2lkIG9uUmVzdWx0KEJ1bmRsZSBkYXRhKSB7Ci0gICAgICAgICAgICAgICAgaWYgKGRhdGEgIT0gbnVsbCkgewotICAgICAgICAgICAgICAgICAgICBTdHJpbmcgc2Vzc2lvbklkUmVzdWx0ID0gaW5mZXJNaXNzaW5nUmVzdWx0KHNlc3Npb25JZCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhLmdldFN0cmluZyhNZWRpYUNvbnRyb2xJbnRlbnQuRVhUUkFfU0VTU0lPTl9JRCkpOwotICAgICAgICAgICAgICAgICAgICBNZWRpYVNlc3Npb25TdGF0dXMgc2Vzc2lvblN0YXR1cyA9IE1lZGlhU2Vzc2lvblN0YXR1cy5mcm9tQnVuZGxlKAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEuZ2V0QnVuZGxlKE1lZGlhQ29udHJvbEludGVudC5FWFRSQV9TRVNTSU9OX1NUQVRVUykpOwotICAgICAgICAgICAgICAgICAgICBhZG9wdFNlc3Npb24oc2Vzc2lvbklkUmVzdWx0KTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKHNlc3Npb25JZFJlc3VsdCAhPSBudWxsKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoREVCVUcpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBMb2cuZChUQUcsICJSZWNlaXZlZCByZXN1bHQgZnJvbSAiICsgaW50ZW50LmdldEFjdGlvbigpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArICI6IGRhdGE9IiArIGJ1bmRsZVRvU3RyaW5nKGRhdGEpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArICIsIHNlc3Npb25JZD0iICsgc2Vzc2lvbklkUmVzdWx0Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArICIsIHNlc3Npb25TdGF0dXM9IiArIHNlc3Npb25TdGF0dXMpOwotICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgdHJ5IHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYWxsYmFjay5vblJlc3VsdChkYXRhLCBzZXNzaW9uSWRSZXN1bHQsIHNlc3Npb25TdGF0dXMpOwotICAgICAgICAgICAgICAgICAgICAgICAgfSBmaW5hbGx5IHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaW50ZW50LmdldEFjdGlvbigpLmVxdWFscyhNZWRpYUNvbnRyb2xJbnRlbnQuQUNUSU9OX0VORF9TRVNTSU9OKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJiYgc2Vzc2lvbklkUmVzdWx0LmVxdWFscyhtU2Vzc2lvbklkKSkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXRTZXNzaW9uSWQobnVsbCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGhhbmRsZUludmFsaWRSZXN1bHQoaW50ZW50LCBjYWxsYmFjaywgZGF0YSk7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIEBPdmVycmlkZQotICAgICAgICAgICAgcHVibGljIHZvaWQgb25FcnJvcihTdHJpbmcgZXJyb3IsIEJ1bmRsZSBkYXRhKSB7Ci0gICAgICAgICAgICAgICAgaGFuZGxlRXJyb3IoaW50ZW50LCBjYWxsYmFjaywgZXJyb3IsIGRhdGEpOwotICAgICAgICAgICAgfQotICAgICAgICB9KTsKLSAgICB9Ci0KLSAgICB2b2lkIGFkb3B0U2Vzc2lvbihTdHJpbmcgc2Vzc2lvbklkKSB7Ci0gICAgICAgIGlmIChzZXNzaW9uSWQgIT0gbnVsbCkgewotICAgICAgICAgICAgc2V0U2Vzc2lvbklkKHNlc3Npb25JZCk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICB2b2lkIGhhbmRsZUludmFsaWRSZXN1bHQoSW50ZW50IGludGVudCwgQWN0aW9uQ2FsbGJhY2sgY2FsbGJhY2ssCi0gICAgICAgICAgICBCdW5kbGUgZGF0YSkgewotICAgICAgICBMb2cudyhUQUcsICJSZWNlaXZlZCBpbnZhbGlkIHJlc3VsdCBkYXRhIGZyb20gIiArIGludGVudC5nZXRBY3Rpb24oKQotICAgICAgICAgICAgICAgICsgIjogZGF0YT0iICsgYnVuZGxlVG9TdHJpbmcoZGF0YSkpOwotICAgICAgICBjYWxsYmFjay5vbkVycm9yKG51bGwsIE1lZGlhQ29udHJvbEludGVudC5FUlJPUl9VTktOT1dOLCBkYXRhKTsKLSAgICB9Ci0KLSAgICB2b2lkIGhhbmRsZUVycm9yKEludGVudCBpbnRlbnQsIEFjdGlvbkNhbGxiYWNrIGNhbGxiYWNrLAotICAgICAgICAgICAgU3RyaW5nIGVycm9yLCBCdW5kbGUgZGF0YSkgewotICAgICAgICBmaW5hbCBpbnQgY29kZTsKLSAgICAgICAgaWYgKGRhdGEgIT0gbnVsbCkgewotICAgICAgICAgICAgY29kZSA9IGRhdGEuZ2V0SW50KE1lZGlhQ29udHJvbEludGVudC5FWFRSQV9FUlJPUl9DT0RFLAotICAgICAgICAgICAgICAgICAgICBNZWRpYUNvbnRyb2xJbnRlbnQuRVJST1JfVU5LTk9XTik7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBjb2RlID0gTWVkaWFDb250cm9sSW50ZW50LkVSUk9SX1VOS05PV047Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKERFQlVHKSB7Ci0gICAgICAgICAgICBMb2cudyhUQUcsICJSZWNlaXZlZCBlcnJvciBmcm9tICIgKyBpbnRlbnQuZ2V0QWN0aW9uKCkKLSAgICAgICAgICAgICAgICAgICAgKyAiOiBlcnJvcj0iICsgZXJyb3IKLSAgICAgICAgICAgICAgICAgICAgKyAiLCBjb2RlPSIgKyBjb2RlCi0gICAgICAgICAgICAgICAgICAgICsgIiwgZGF0YT0iICsgYnVuZGxlVG9TdHJpbmcoZGF0YSkpOwotICAgICAgICB9Ci0gICAgICAgIGNhbGxiYWNrLm9uRXJyb3IoZXJyb3IsIGNvZGUsIGRhdGEpOwotICAgIH0KLQotICAgIHByaXZhdGUgdm9pZCBkZXRlY3RGZWF0dXJlcygpIHsKLSAgICAgICAgbVJvdXRlU3VwcG9ydHNSZW1vdGVQbGF5YmFjayA9IHJvdXRlU3VwcG9ydHNBY3Rpb24oTWVkaWFDb250cm9sSW50ZW50LkFDVElPTl9QTEFZKQotICAgICAgICAgICAgICAgICYmIHJvdXRlU3VwcG9ydHNBY3Rpb24oTWVkaWFDb250cm9sSW50ZW50LkFDVElPTl9TRUVLKQotICAgICAgICAgICAgICAgICYmIHJvdXRlU3VwcG9ydHNBY3Rpb24oTWVkaWFDb250cm9sSW50ZW50LkFDVElPTl9HRVRfU1RBVFVTKQotICAgICAgICAgICAgICAgICYmIHJvdXRlU3VwcG9ydHNBY3Rpb24oTWVkaWFDb250cm9sSW50ZW50LkFDVElPTl9QQVVTRSkKLSAgICAgICAgICAgICAgICAmJiByb3V0ZVN1cHBvcnRzQWN0aW9uKE1lZGlhQ29udHJvbEludGVudC5BQ1RJT05fUkVTVU1FKQotICAgICAgICAgICAgICAgICYmIHJvdXRlU3VwcG9ydHNBY3Rpb24oTWVkaWFDb250cm9sSW50ZW50LkFDVElPTl9TVE9QKTsKLSAgICAgICAgbVJvdXRlU3VwcG9ydHNRdWV1aW5nID0gbVJvdXRlU3VwcG9ydHNSZW1vdGVQbGF5YmFjawotICAgICAgICAgICAgICAgICYmIHJvdXRlU3VwcG9ydHNBY3Rpb24oTWVkaWFDb250cm9sSW50ZW50LkFDVElPTl9FTlFVRVVFKQotICAgICAgICAgICAgICAgICYmIHJvdXRlU3VwcG9ydHNBY3Rpb24oTWVkaWFDb250cm9sSW50ZW50LkFDVElPTl9SRU1PVkUpOwotICAgICAgICBtUm91dGVTdXBwb3J0c1Nlc3Npb25NYW5hZ2VtZW50ID0gbVJvdXRlU3VwcG9ydHNSZW1vdGVQbGF5YmFjawotICAgICAgICAgICAgICAgICYmIHJvdXRlU3VwcG9ydHNBY3Rpb24oTWVkaWFDb250cm9sSW50ZW50LkFDVElPTl9TVEFSVF9TRVNTSU9OKQotICAgICAgICAgICAgICAgICYmIHJvdXRlU3VwcG9ydHNBY3Rpb24oTWVkaWFDb250cm9sSW50ZW50LkFDVElPTl9HRVRfU0VTU0lPTl9TVEFUVVMpCi0gICAgICAgICAgICAgICAgJiYgcm91dGVTdXBwb3J0c0FjdGlvbihNZWRpYUNvbnRyb2xJbnRlbnQuQUNUSU9OX0VORF9TRVNTSU9OKTsKLSAgICAgICAgbVJvdXRlU3VwcG9ydHNNZXNzYWdpbmcgPSBkb2VzUm91dGVTdXBwb3J0TWVzc2FnaW5nKCk7Ci0gICAgfQotCi0gICAgcHJpdmF0ZSBib29sZWFuIHJvdXRlU3VwcG9ydHNBY3Rpb24oU3RyaW5nIGFjdGlvbikgewotICAgICAgICByZXR1cm4gbVJvdXRlLnN1cHBvcnRzQ29udHJvbEFjdGlvbihNZWRpYUNvbnRyb2xJbnRlbnQuQ0FURUdPUllfUkVNT1RFX1BMQVlCQUNLLCBhY3Rpb24pOwotICAgIH0KLQotICAgIHByaXZhdGUgYm9vbGVhbiBkb2VzUm91dGVTdXBwb3J0TWVzc2FnaW5nKCkgewotICAgICAgICBmb3IgKEludGVudEZpbHRlciBmaWx0ZXIgOiBtUm91dGUuZ2V0Q29udHJvbEZpbHRlcnMoKSkgewotICAgICAgICAgICAgaWYgKGZpbHRlci5oYXNBY3Rpb24oTWVkaWFDb250cm9sSW50ZW50LkFDVElPTl9TRU5EX01FU1NBR0UpKSB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIHByaXZhdGUgdm9pZCB0aHJvd0lmUmVtb3RlUGxheWJhY2tOb3RTdXBwb3J0ZWQoKSB7Ci0gICAgICAgIGlmICghbVJvdXRlU3VwcG9ydHNSZW1vdGVQbGF5YmFjaykgewotICAgICAgICAgICAgdGhyb3cgbmV3IFVuc3VwcG9ydGVkT3BlcmF0aW9uRXhjZXB0aW9uKCJUaGUgcm91dGUgZG9lcyBub3Qgc3VwcG9ydCByZW1vdGUgcGxheWJhY2suIik7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBwcml2YXRlIHZvaWQgdGhyb3dJZlF1ZXVpbmdOb3RTdXBwb3J0ZWQoKSB7Ci0gICAgICAgIGlmICghbVJvdXRlU3VwcG9ydHNRdWV1aW5nKSB7Ci0gICAgICAgICAgICB0aHJvdyBuZXcgVW5zdXBwb3J0ZWRPcGVyYXRpb25FeGNlcHRpb24oIlRoZSByb3V0ZSBkb2VzIG5vdCBzdXBwb3J0IHF1ZXVpbmcuIik7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBwcml2YXRlIHZvaWQgdGhyb3dJZlNlc3Npb25NYW5hZ2VtZW50Tm90U3VwcG9ydGVkKCkgewotICAgICAgICBpZiAoIW1Sb3V0ZVN1cHBvcnRzU2Vzc2lvbk1hbmFnZW1lbnQpIHsKLSAgICAgICAgICAgIHRocm93IG5ldyBVbnN1cHBvcnRlZE9wZXJhdGlvbkV4Y2VwdGlvbigiVGhlIHJvdXRlIGRvZXMgbm90IHN1cHBvcnQgIgotICAgICAgICAgICAgICAgICAgICArICJzZXNzaW9uIG1hbmFnZW1lbnQuIik7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBwcml2YXRlIHZvaWQgdGhyb3dJZk1lc3NhZ2VOb3RTdXBwb3J0ZWQoKSB7Ci0gICAgICAgIGlmICghbVJvdXRlU3VwcG9ydHNNZXNzYWdpbmcpIHsKLSAgICAgICAgICAgIHRocm93IG5ldyBVbnN1cHBvcnRlZE9wZXJhdGlvbkV4Y2VwdGlvbigiVGhlIHJvdXRlIGRvZXMgbm90IHN1cHBvcnQgbWVzc2FnZS4iKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIHByaXZhdGUgdm9pZCB0aHJvd0lmTm9DdXJyZW50U2Vzc2lvbigpIHsKLSAgICAgICAgaWYgKG1TZXNzaW9uSWQgPT0gbnVsbCkgewotICAgICAgICAgICAgdGhyb3cgbmV3IElsbGVnYWxTdGF0ZUV4Y2VwdGlvbigiVGhlcmUgaXMgbm8gY3VycmVudCBzZXNzaW9uLiIpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgc3RhdGljIFN0cmluZyBpbmZlck1pc3NpbmdSZXN1bHQoU3RyaW5nIHJlcXVlc3QsIFN0cmluZyByZXN1bHQpIHsKLSAgICAgICAgaWYgKHJlc3VsdCA9PSBudWxsKSB7Ci0gICAgICAgICAgICAvLyBSZXN1bHQgaXMgbWlzc2luZy4KLSAgICAgICAgICAgIHJldHVybiByZXF1ZXN0OwotICAgICAgICB9Ci0gICAgICAgIGlmIChyZXF1ZXN0ID09IG51bGwgfHwgcmVxdWVzdC5lcXVhbHMocmVzdWx0KSkgewotICAgICAgICAgICAgLy8gUmVxdWVzdCBkaWRuJ3Qgc3BlY2lmeSBhIHZhbHVlIG9yIHJlc3VsdCBtYXRjaGVzIHJlcXVlc3QuCi0gICAgICAgICAgICByZXR1cm4gcmVzdWx0OwotICAgICAgICB9Ci0gICAgICAgIC8vIFJlc3VsdCBjb25mbGljdHMgd2l0aCByZXF1ZXN0LgotICAgICAgICByZXR1cm4gbnVsbDsKLSAgICB9Ci0KLSAgICBwcml2YXRlIHN0YXRpYyB2b2lkIGxvZ1JlcXVlc3QoSW50ZW50IGludGVudCkgewotICAgICAgICBpZiAoREVCVUcpIHsKLSAgICAgICAgICAgIExvZy5kKFRBRywgIlNlbmRpbmcgcmVxdWVzdDogIiArIGludGVudCk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBzdGF0aWMgU3RyaW5nIGJ1bmRsZVRvU3RyaW5nKEJ1bmRsZSBidW5kbGUpIHsKLSAgICAgICAgaWYgKGJ1bmRsZSAhPSBudWxsKSB7Ci0gICAgICAgICAgICBidW5kbGUuc2l6ZSgpOyAvLyBmb3JjZSBidW5kbGUgdG8gYmUgdW5wYXJjZWxsZWQKLSAgICAgICAgICAgIHJldHVybiBidW5kbGUudG9TdHJpbmcoKTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gIm51bGwiOwotICAgIH0KLQotICAgIHByaXZhdGUgZmluYWwgY2xhc3MgQWN0aW9uUmVjZWl2ZXIgZXh0ZW5kcyBCcm9hZGNhc3RSZWNlaXZlciB7Ci0gICAgICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIEFDVElPTl9JVEVNX1NUQVRVU19DSEFOR0VEID0KLSAgICAgICAgICAgICAgICAiYW5kcm9pZC5zdXBwb3J0LnY3Lm1lZGlhLmFjdGlvbnMuQUNUSU9OX0lURU1fU1RBVFVTX0NIQU5HRUQiOwotICAgICAgICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBBQ1RJT05fU0VTU0lPTl9TVEFUVVNfQ0hBTkdFRCA9Ci0gICAgICAgICAgICAgICAgImFuZHJvaWQuc3VwcG9ydC52Ny5tZWRpYS5hY3Rpb25zLkFDVElPTl9TRVNTSU9OX1NUQVRVU19DSEFOR0VEIjsKLSAgICAgICAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgQUNUSU9OX01FU1NBR0VfUkVDRUlWRUQgPQotICAgICAgICAgICAgICAgICJhbmRyb2lkLnN1cHBvcnQudjcubWVkaWEuYWN0aW9ucy5BQ1RJT05fTUVTU0FHRV9SRUNFSVZFRCI7Ci0KLSAgICAgICAgQWN0aW9uUmVjZWl2ZXIoKSB7Ci0gICAgICAgIH0KLQotICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgcHVibGljIHZvaWQgb25SZWNlaXZlKENvbnRleHQgY29udGV4dCwgSW50ZW50IGludGVudCkgewotICAgICAgICAgICAgU3RyaW5nIHNlc3Npb25JZCA9IGludGVudC5nZXRTdHJpbmdFeHRyYShNZWRpYUNvbnRyb2xJbnRlbnQuRVhUUkFfU0VTU0lPTl9JRCk7Ci0gICAgICAgICAgICBpZiAoc2Vzc2lvbklkID09IG51bGwgfHwgIXNlc3Npb25JZC5lcXVhbHMobVNlc3Npb25JZCkpIHsKLSAgICAgICAgICAgICAgICBMb2cudyhUQUcsICJEaXNjYXJkaW5nIHNwdXJpb3VzIHN0YXR1cyBjYWxsYmFjayAiCi0gICAgICAgICAgICAgICAgICAgICAgICArICJ3aXRoIG1pc3Npbmcgb3IgaW52YWxpZCBzZXNzaW9uIGlkOiBzZXNzaW9uSWQ9IiArIHNlc3Npb25JZCk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBNZWRpYVNlc3Npb25TdGF0dXMgc2Vzc2lvblN0YXR1cyA9IE1lZGlhU2Vzc2lvblN0YXR1cy5mcm9tQnVuZGxlKAotICAgICAgICAgICAgICAgICAgICBpbnRlbnQuZ2V0QnVuZGxlRXh0cmEoTWVkaWFDb250cm9sSW50ZW50LkVYVFJBX1NFU1NJT05fU1RBVFVTKSk7Ci0gICAgICAgICAgICBTdHJpbmcgYWN0aW9uID0gaW50ZW50LmdldEFjdGlvbigpOwotICAgICAgICAgICAgaWYgKGFjdGlvbi5lcXVhbHMoQUNUSU9OX0lURU1fU1RBVFVTX0NIQU5HRUQpKSB7Ci0gICAgICAgICAgICAgICAgU3RyaW5nIGl0ZW1JZCA9IGludGVudC5nZXRTdHJpbmdFeHRyYShNZWRpYUNvbnRyb2xJbnRlbnQuRVhUUkFfSVRFTV9JRCk7Ci0gICAgICAgICAgICAgICAgaWYgKGl0ZW1JZCA9PSBudWxsKSB7Ci0gICAgICAgICAgICAgICAgICAgIExvZy53KFRBRywgIkRpc2NhcmRpbmcgc3B1cmlvdXMgc3RhdHVzIGNhbGxiYWNrIHdpdGggbWlzc2luZyBpdGVtIGlkLiIpOwotICAgICAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgTWVkaWFJdGVtU3RhdHVzIGl0ZW1TdGF0dXMgPSBNZWRpYUl0ZW1TdGF0dXMuZnJvbUJ1bmRsZSgKLSAgICAgICAgICAgICAgICAgICAgICAgIGludGVudC5nZXRCdW5kbGVFeHRyYShNZWRpYUNvbnRyb2xJbnRlbnQuRVhUUkFfSVRFTV9TVEFUVVMpKTsKLSAgICAgICAgICAgICAgICBpZiAoaXRlbVN0YXR1cyA9PSBudWxsKSB7Ci0gICAgICAgICAgICAgICAgICAgIExvZy53KFRBRywgIkRpc2NhcmRpbmcgc3B1cmlvdXMgc3RhdHVzIGNhbGxiYWNrIHdpdGggbWlzc2luZyBpdGVtIHN0YXR1cy4iKTsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIGlmIChERUJVRykgewotICAgICAgICAgICAgICAgICAgICBMb2cuZChUQUcsICJSZWNlaXZlZCBpdGVtIHN0YXR1cyBjYWxsYmFjazogc2Vzc2lvbklkPSIgKyBzZXNzaW9uSWQKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICArICIsIHNlc3Npb25TdGF0dXM9IiArIHNlc3Npb25TdGF0dXMKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICArICIsIGl0ZW1JZD0iICsgaXRlbUlkCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgKyAiLCBpdGVtU3RhdHVzPSIgKyBpdGVtU3RhdHVzKTsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICBpZiAobVN0YXR1c0NhbGxiYWNrICE9IG51bGwpIHsKLSAgICAgICAgICAgICAgICAgICAgbVN0YXR1c0NhbGxiYWNrLm9uSXRlbVN0YXR1c0NoYW5nZWQoaW50ZW50LmdldEV4dHJhcygpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlc3Npb25JZCwgc2Vzc2lvblN0YXR1cywgaXRlbUlkLCBpdGVtU3RhdHVzKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9IGVsc2UgaWYgKGFjdGlvbi5lcXVhbHMoQUNUSU9OX1NFU1NJT05fU1RBVFVTX0NIQU5HRUQpKSB7Ci0gICAgICAgICAgICAgICAgaWYgKHNlc3Npb25TdGF0dXMgPT0gbnVsbCkgewotICAgICAgICAgICAgICAgICAgICBMb2cudyhUQUcsICJEaXNjYXJkaW5nIHNwdXJpb3VzIG1lZGlhIHN0YXR1cyBjYWxsYmFjayB3aXRoICIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICArIm1pc3Npbmcgc2Vzc2lvbiBzdGF0dXMuIik7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICBpZiAoREVCVUcpIHsKLSAgICAgICAgICAgICAgICAgICAgTG9nLmQoVEFHLCAiUmVjZWl2ZWQgc2Vzc2lvbiBzdGF0dXMgY2FsbGJhY2s6IHNlc3Npb25JZD0iICsgc2Vzc2lvbklkCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgKyAiLCBzZXNzaW9uU3RhdHVzPSIgKyBzZXNzaW9uU3RhdHVzKTsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICBpZiAobVN0YXR1c0NhbGxiYWNrICE9IG51bGwpIHsKLSAgICAgICAgICAgICAgICAgICAgbVN0YXR1c0NhbGxiYWNrLm9uU2Vzc2lvblN0YXR1c0NoYW5nZWQoaW50ZW50LmdldEV4dHJhcygpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlc3Npb25JZCwgc2Vzc2lvblN0YXR1cyk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfSBlbHNlIGlmIChhY3Rpb24uZXF1YWxzKEFDVElPTl9NRVNTQUdFX1JFQ0VJVkVEKSkgewotICAgICAgICAgICAgICAgIGlmIChERUJVRykgewotICAgICAgICAgICAgICAgICAgICBMb2cuZChUQUcsICJSZWNlaXZlZCBtZXNzYWdlIGNhbGxiYWNrOiBzZXNzaW9uSWQ9IiArIHNlc3Npb25JZCk7Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgaWYgKG1Pbk1lc3NhZ2VSZWNlaXZlZExpc3RlbmVyICE9IG51bGwpIHsKLSAgICAgICAgICAgICAgICAgICAgbU9uTWVzc2FnZVJlY2VpdmVkTGlzdGVuZXIub25NZXNzYWdlUmVjZWl2ZWQoc2Vzc2lvbklkLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludGVudC5nZXRCdW5kbGVFeHRyYShNZWRpYUNvbnRyb2xJbnRlbnQuRVhUUkFfTUVTU0FHRSkpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLQotICAgIC8qKgotICAgICAqIEEgY2FsbGJhY2sgdGhhdCB3aWxsIHJlY2VpdmUgbWVkaWEgc3RhdHVzIHVwZGF0ZXMuCi0gICAgICovCi0gICAgcHVibGljIHN0YXRpYyBhYnN0cmFjdCBjbGFzcyBTdGF0dXNDYWxsYmFjayB7Ci0gICAgICAgIC8qKgotICAgICAgICAgKiBDYWxsZWQgd2hlbiB0aGUgc3RhdHVzIG9mIGEgbWVkaWEgaXRlbSBjaGFuZ2VzLgotICAgICAgICAgKgotICAgICAgICAgKiBAcGFyYW0gZGF0YSBUaGUgcmVzdWx0IGRhdGEgYnVuZGxlLgotICAgICAgICAgKiBAcGFyYW0gc2Vzc2lvbklkIFRoZSBzZXNzaW9uIGlkLgotICAgICAgICAgKiBAcGFyYW0gc2Vzc2lvblN0YXR1cyBUaGUgc2Vzc2lvbiBzdGF0dXMsIG9yIG51bGwgaWYgdW5rbm93bi4KLSAgICAgICAgICogQHBhcmFtIGl0ZW1JZCBUaGUgaXRlbSBpZC4KLSAgICAgICAgICogQHBhcmFtIGl0ZW1TdGF0dXMgVGhlIGl0ZW0gc3RhdHVzLgotICAgICAgICAgKi8KLSAgICAgICAgcHVibGljIHZvaWQgb25JdGVtU3RhdHVzQ2hhbmdlZChCdW5kbGUgZGF0YSwKLSAgICAgICAgICAgICAgICBTdHJpbmcgc2Vzc2lvbklkLCBNZWRpYVNlc3Npb25TdGF0dXMgc2Vzc2lvblN0YXR1cywKLSAgICAgICAgICAgICAgICBTdHJpbmcgaXRlbUlkLCBNZWRpYUl0ZW1TdGF0dXMgaXRlbVN0YXR1cykgewotICAgICAgICB9Ci0KLSAgICAgICAgLyoqCi0gICAgICAgICAqIENhbGxlZCB3aGVuIHRoZSBzdGF0dXMgb2YgYSBtZWRpYSBzZXNzaW9uIGNoYW5nZXMuCi0gICAgICAgICAqCi0gICAgICAgICAqIEBwYXJhbSBkYXRhIFRoZSByZXN1bHQgZGF0YSBidW5kbGUuCi0gICAgICAgICAqIEBwYXJhbSBzZXNzaW9uSWQgVGhlIHNlc3Npb24gaWQuCi0gICAgICAgICAqIEBwYXJhbSBzZXNzaW9uU3RhdHVzIFRoZSBzZXNzaW9uIHN0YXR1cywgb3IgbnVsbCBpZiB1bmtub3duLgotICAgICAgICAgKi8KLSAgICAgICAgcHVibGljIHZvaWQgb25TZXNzaW9uU3RhdHVzQ2hhbmdlZChCdW5kbGUgZGF0YSwKLSAgICAgICAgICAgICAgICBTdHJpbmcgc2Vzc2lvbklkLCBNZWRpYVNlc3Npb25TdGF0dXMgc2Vzc2lvblN0YXR1cykgewotICAgICAgICB9Ci0KLSAgICAgICAgLyoqCi0gICAgICAgICAqIENhbGxlZCB3aGVuIHRoZSBzZXNzaW9uIG9mIHRoZSByZW1vdGUgcGxheWJhY2sgY2xpZW50IGNoYW5nZXMuCi0gICAgICAgICAqCi0gICAgICAgICAqIEBwYXJhbSBzZXNzaW9uSWQgVGhlIG5ldyBzZXNzaW9uIGlkLgotICAgICAgICAgKi8KLSAgICAgICAgcHVibGljIHZvaWQgb25TZXNzaW9uQ2hhbmdlZChTdHJpbmcgc2Vzc2lvbklkKSB7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBCYXNlIGNhbGxiYWNrIHR5cGUgZm9yIHJlbW90ZSBwbGF5YmFjayByZXF1ZXN0cy4KLSAgICAgKi8KLSAgICBwdWJsaWMgc3RhdGljIGFic3RyYWN0IGNsYXNzIEFjdGlvbkNhbGxiYWNrIHsKLSAgICAgICAgLyoqCi0gICAgICAgICAqIENhbGxlZCB3aGVuIGEgbWVkaWEgY29udHJvbCByZXF1ZXN0IGZhaWxzLgotICAgICAgICAgKgotICAgICAgICAgKiBAcGFyYW0gZXJyb3IgQSBsb2NhbGl6ZWQgZXJyb3IgbWVzc2FnZSB3aGljaCBtYXkgYmUgc2hvd24gdG8gdGhlIHVzZXIsIG9yIG51bGwKLSAgICAgICAgICogaWYgdGhlIGNhdXNlIG9mIHRoZSBlcnJvciBpcyB1bmNsZWFyLgotICAgICAgICAgKiBAcGFyYW0gY29kZSBUaGUgZXJyb3IgY29kZSwgb3Ige0BsaW5rIE1lZGlhQ29udHJvbEludGVudCNFUlJPUl9VTktOT1dOfSBpZiB1bmtub3duLgotICAgICAgICAgKiBAcGFyYW0gZGF0YSBUaGUgZXJyb3IgZGF0YSBidW5kbGUsIG9yIG51bGwgaWYgbm9uZS4KLSAgICAgICAgICovCi0gICAgICAgIHB1YmxpYyB2b2lkIG9uRXJyb3IoU3RyaW5nIGVycm9yLCBpbnQgY29kZSwgQnVuZGxlIGRhdGEpIHsKLSAgICAgICAgfQotICAgIH0KLQotICAgIC8qKgotICAgICAqIENhbGxiYWNrIGZvciByZW1vdGUgcGxheWJhY2sgcmVxdWVzdHMgdGhhdCBvcGVyYXRlIG9uIGl0ZW1zLgotICAgICAqLwotICAgIHB1YmxpYyBzdGF0aWMgYWJzdHJhY3QgY2xhc3MgSXRlbUFjdGlvbkNhbGxiYWNrIGV4dGVuZHMgQWN0aW9uQ2FsbGJhY2sgewotICAgICAgICAvKioKLSAgICAgICAgICogQ2FsbGVkIHdoZW4gdGhlIHJlcXVlc3Qgc3VjY2VlZHMuCi0gICAgICAgICAqCi0gICAgICAgICAqIEBwYXJhbSBkYXRhIFRoZSByZXN1bHQgZGF0YSBidW5kbGUuCi0gICAgICAgICAqIEBwYXJhbSBzZXNzaW9uSWQgVGhlIHNlc3Npb24gaWQuCi0gICAgICAgICAqIEBwYXJhbSBzZXNzaW9uU3RhdHVzIFRoZSBzZXNzaW9uIHN0YXR1cywgb3IgbnVsbCBpZiB1bmtub3duLgotICAgICAgICAgKiBAcGFyYW0gaXRlbUlkIFRoZSBpdGVtIGlkLgotICAgICAgICAgKiBAcGFyYW0gaXRlbVN0YXR1cyBUaGUgaXRlbSBzdGF0dXMuCi0gICAgICAgICAqLwotICAgICAgICBwdWJsaWMgdm9pZCBvblJlc3VsdChCdW5kbGUgZGF0YSwgU3RyaW5nIHNlc3Npb25JZCwgTWVkaWFTZXNzaW9uU3RhdHVzIHNlc3Npb25TdGF0dXMsCi0gICAgICAgICAgICAgICAgU3RyaW5nIGl0ZW1JZCwgTWVkaWFJdGVtU3RhdHVzIGl0ZW1TdGF0dXMpIHsKLSAgICAgICAgfQotICAgIH0KLQotICAgIC8qKgotICAgICAqIENhbGxiYWNrIGZvciByZW1vdGUgcGxheWJhY2sgcmVxdWVzdHMgdGhhdCBvcGVyYXRlIG9uIHNlc3Npb25zLgotICAgICAqLwotICAgIHB1YmxpYyBzdGF0aWMgYWJzdHJhY3QgY2xhc3MgU2Vzc2lvbkFjdGlvbkNhbGxiYWNrIGV4dGVuZHMgQWN0aW9uQ2FsbGJhY2sgewotICAgICAgICAvKioKLSAgICAgICAgICogQ2FsbGVkIHdoZW4gdGhlIHJlcXVlc3Qgc3VjY2VlZHMuCi0gICAgICAgICAqCi0gICAgICAgICAqIEBwYXJhbSBkYXRhIFRoZSByZXN1bHQgZGF0YSBidW5kbGUuCi0gICAgICAgICAqIEBwYXJhbSBzZXNzaW9uSWQgVGhlIHNlc3Npb24gaWQuCi0gICAgICAgICAqIEBwYXJhbSBzZXNzaW9uU3RhdHVzIFRoZSBzZXNzaW9uIHN0YXR1cywgb3IgbnVsbCBpZiB1bmtub3duLgotICAgICAgICAgKi8KLSAgICAgICAgcHVibGljIHZvaWQgb25SZXN1bHQoQnVuZGxlIGRhdGEsIFN0cmluZyBzZXNzaW9uSWQsIE1lZGlhU2Vzc2lvblN0YXR1cyBzZXNzaW9uU3RhdHVzKSB7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBBIGNhbGxiYWNrIHRoYXQgd2lsbCByZWNlaXZlIG1lc3NhZ2VzIGZyb20gbWVkaWEgc2Vzc2lvbnMuCi0gICAgICovCi0gICAgcHVibGljIGludGVyZmFjZSBPbk1lc3NhZ2VSZWNlaXZlZExpc3RlbmVyIHsKLSAgICAgICAgLyoqCi0gICAgICAgICAqIENhbGxlZCB3aGVuIGEgbWVzc2FnZSByZWNlaXZlZC4KLSAgICAgICAgICoKLSAgICAgICAgICogQHBhcmFtIHNlc3Npb25JZCBUaGUgc2Vzc2lvbiBpZC4KLSAgICAgICAgICogQHBhcmFtIG1lc3NhZ2UgQSBidW5kbGUgbWVzc2FnZSBkZW5vdGluZyB7QGxpbmsgTWVkaWFDb250cm9sSW50ZW50I0VYVFJBX01FU1NBR0V9LgotICAgICAgICAgKi8KLSAgICAgICAgdm9pZCBvbk1lc3NhZ2VSZWNlaXZlZChTdHJpbmcgc2Vzc2lvbklkLCBCdW5kbGUgbWVzc2FnZSk7Ci0gICAgfQotfQpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvTWVkaWFDb21wb25lbnRzL3NyYy9jb20vYW5kcm9pZC9zdXBwb3J0L21lZGlhcm91dGVyL21lZGlhL1N5c3RlbU1lZGlhUm91dGVQcm92aWRlci5qYXZhIGIvcGFja2FnZXMvTWVkaWFDb21wb25lbnRzL3NyYy9jb20vYW5kcm9pZC9zdXBwb3J0L21lZGlhcm91dGVyL21lZGlhL1N5c3RlbU1lZGlhUm91dGVQcm92aWRlci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhMzg0OTFmLi4wMDAwMDAwCi0tLSBhL3BhY2thZ2VzL01lZGlhQ29tcG9uZW50cy9zcmMvY29tL2FuZHJvaWQvc3VwcG9ydC9tZWRpYXJvdXRlci9tZWRpYS9TeXN0ZW1NZWRpYVJvdXRlUHJvdmlkZXIuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDg4MyArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IDIwMTggVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAotICoKLSAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwotICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgotICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0gKgotICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLSAqCi0gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCi0gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAotICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCi0gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCi0gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KLSAqLwotCi1wYWNrYWdlIGNvbS5hbmRyb2lkLnN1cHBvcnQubWVkaWFyb3V0ZXIubWVkaWE7Ci0KLWltcG9ydCBhbmRyb2lkLmNvbnRlbnQuQnJvYWRjYXN0UmVjZWl2ZXI7Ci1pbXBvcnQgYW5kcm9pZC5jb250ZW50LkNvbXBvbmVudE5hbWU7Ci1pbXBvcnQgYW5kcm9pZC5jb250ZW50LkNvbnRleHQ7Ci1pbXBvcnQgYW5kcm9pZC5jb250ZW50LkludGVudDsKLWltcG9ydCBhbmRyb2lkLmNvbnRlbnQuSW50ZW50RmlsdGVyOwotaW1wb3J0IGFuZHJvaWQuY29udGVudC5yZXMuUmVzb3VyY2VzOwotaW1wb3J0IGFuZHJvaWQubWVkaWEuQXVkaW9NYW5hZ2VyOwotaW1wb3J0IGFuZHJvaWQub3MuQnVpbGQ7Ci1pbXBvcnQgYW5kcm9pZC5zdXBwb3J0LmFubm90YXRpb24uUmVxdWlyZXNBcGk7Ci1pbXBvcnQgYW5kcm9pZC52aWV3LkRpc3BsYXk7Ci0KLWltcG9ydCBjb20uYW5kcm9pZC5tZWRpYS51cGRhdGUuQXBpSGVscGVyOwotaW1wb3J0IGNvbS5hbmRyb2lkLm1lZGlhLnVwZGF0ZS5SOwotCi1pbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLWltcG9ydCBqYXZhLnV0aWwuTG9jYWxlOwotCi0vKioKLSAqIFByb3ZpZGVzIHJvdXRlcyBmb3IgYnVpbHQtaW4gc3lzdGVtIGRlc3RpbmF0aW9ucyBzdWNoIGFzIHRoZSBsb2NhbCBkaXNwbGF5Ci0gKiBhbmQgc3BlYWtlci4gIE9uIEplbGx5YmVhbiBhbmQgbmV3ZXIgcGxhdGZvcm0gcmVsZWFzZXMsIHF1ZXJpZXMgdGhlIGZyYW1ld29yawotICogTWVkaWFSb3V0ZXIgZm9yIGZyYW1ld29yay1wcm92aWRlZCByb3V0ZXMgYW5kIHJlZ2lzdGVycyBub24tZnJhbWV3b3JrLXByb3ZpZGVkCi0gKiByb3V0ZXMgYXMgdXNlciByb3V0ZXMuCi0gKi8KLWFic3RyYWN0IGNsYXNzIFN5c3RlbU1lZGlhUm91dGVQcm92aWRlciBleHRlbmRzIE1lZGlhUm91dGVQcm92aWRlciB7Ci0gICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFRBRyA9ICJTeXN0ZW1NZWRpYVJvdXRlUHJvdmlkZXIiOwotCi0gICAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgUEFDS0FHRV9OQU1FID0gImFuZHJvaWQiOwotICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIERFRkFVTFRfUk9VVEVfSUQgPSAiREVGQVVMVF9ST1VURSI7Ci0KLSAgICBwcm90ZWN0ZWQgU3lzdGVtTWVkaWFSb3V0ZVByb3ZpZGVyKENvbnRleHQgY29udGV4dCkgewotICAgICAgICBzdXBlcihjb250ZXh0LCBuZXcgUHJvdmlkZXJNZXRhZGF0YShuZXcgQ29tcG9uZW50TmFtZShQQUNLQUdFX05BTUUsCi0gICAgICAgICAgICAgICAgU3lzdGVtTWVkaWFSb3V0ZVByb3ZpZGVyLmNsYXNzLmdldE5hbWUoKSkpKTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgc3RhdGljIFN5c3RlbU1lZGlhUm91dGVQcm92aWRlciBvYnRhaW4oQ29udGV4dCBjb250ZXh0LCBTeW5jQ2FsbGJhY2sgc3luY0NhbGxiYWNrKSB7Ci0gICAgICAgIGlmIChCdWlsZC5WRVJTSU9OLlNES19JTlQgPj0gMjQpIHsKLSAgICAgICAgICAgIHJldHVybiBuZXcgQXBpMjRJbXBsKGNvbnRleHQsIHN5bmNDYWxsYmFjayk7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKEJ1aWxkLlZFUlNJT04uU0RLX0lOVCA+PSAxOCkgewotICAgICAgICAgICAgcmV0dXJuIG5ldyBKZWxseWJlYW5NcjJJbXBsKGNvbnRleHQsIHN5bmNDYWxsYmFjayk7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKEJ1aWxkLlZFUlNJT04uU0RLX0lOVCA+PSAxNykgewotICAgICAgICAgICAgcmV0dXJuIG5ldyBKZWxseWJlYW5NcjFJbXBsKGNvbnRleHQsIHN5bmNDYWxsYmFjayk7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKEJ1aWxkLlZFUlNJT04uU0RLX0lOVCA+PSAxNikgewotICAgICAgICAgICAgcmV0dXJuIG5ldyBKZWxseWJlYW5JbXBsKGNvbnRleHQsIHN5bmNDYWxsYmFjayk7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIG5ldyBMZWdhY3lJbXBsKGNvbnRleHQpOwotICAgIH0KLQotICAgIC8qKgotICAgICAqIENhbGxlZCBieSB0aGUgbWVkaWEgcm91dGVyIHdoZW4gYSByb3V0ZSBpcyBhZGRlZCB0byBzeW5jaHJvbml6ZSBzdGF0ZSB3aXRoCi0gICAgICogdGhlIGZyYW1ld29yayBtZWRpYSByb3V0ZXIuCi0gICAgICovCi0gICAgcHVibGljIHZvaWQgb25TeW5jUm91dGVBZGRlZChNZWRpYVJvdXRlci5Sb3V0ZUluZm8gcm91dGUpIHsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBDYWxsZWQgYnkgdGhlIG1lZGlhIHJvdXRlciB3aGVuIGEgcm91dGUgaXMgcmVtb3ZlZCB0byBzeW5jaHJvbml6ZSBzdGF0ZSB3aXRoCi0gICAgICogdGhlIGZyYW1ld29yayBtZWRpYSByb3V0ZXIuCi0gICAgICovCi0gICAgcHVibGljIHZvaWQgb25TeW5jUm91dGVSZW1vdmVkKE1lZGlhUm91dGVyLlJvdXRlSW5mbyByb3V0ZSkgewotICAgIH0KLQotICAgIC8qKgotICAgICAqIENhbGxlZCBieSB0aGUgbWVkaWEgcm91dGVyIHdoZW4gYSByb3V0ZSBpcyBjaGFuZ2VkIHRvIHN5bmNocm9uaXplIHN0YXRlIHdpdGgKLSAgICAgKiB0aGUgZnJhbWV3b3JrIG1lZGlhIHJvdXRlci4KLSAgICAgKi8KLSAgICBwdWJsaWMgdm9pZCBvblN5bmNSb3V0ZUNoYW5nZWQoTWVkaWFSb3V0ZXIuUm91dGVJbmZvIHJvdXRlKSB7Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogQ2FsbGVkIGJ5IHRoZSBtZWRpYSByb3V0ZXIgd2hlbiBhIHJvdXRlIGlzIHNlbGVjdGVkIHRvIHN5bmNocm9uaXplIHN0YXRlIHdpdGgKLSAgICAgKiB0aGUgZnJhbWV3b3JrIG1lZGlhIHJvdXRlci4KLSAgICAgKi8KLSAgICBwdWJsaWMgdm9pZCBvblN5bmNSb3V0ZVNlbGVjdGVkKE1lZGlhUm91dGVyLlJvdXRlSW5mbyByb3V0ZSkgewotICAgIH0KLQotICAgIC8qKgotICAgICAqIENhbGxiYWNrcyBpbnRvIHRoZSBtZWRpYSByb3V0ZXIgdG8gc3luY2hyb25pemUgc3RhdGUgd2l0aCB0aGUgZnJhbWV3b3JrIG1lZGlhIHJvdXRlci4KLSAgICAgKi8KLSAgICBwdWJsaWMgaW50ZXJmYWNlIFN5bmNDYWxsYmFjayB7Ci0gICAgICAgIHZvaWQgb25TeXN0ZW1Sb3V0ZVNlbGVjdGVkQnlEZXNjcmlwdG9ySWQoU3RyaW5nIGlkKTsKLSAgICB9Ci0KLSAgICBwcm90ZWN0ZWQgT2JqZWN0IGdldERlZmF1bHRSb3V0ZSgpIHsKLSAgICAgICAgcmV0dXJuIG51bGw7Ci0gICAgfQotCi0gICAgcHJvdGVjdGVkIE9iamVjdCBnZXRTeXN0ZW1Sb3V0ZShNZWRpYVJvdXRlci5Sb3V0ZUluZm8gcm91dGUpIHsKLSAgICAgICAgcmV0dXJuIG51bGw7Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogTGVnYWN5IGltcGxlbWVudGF0aW9uIGZvciBwbGF0Zm9ybSB2ZXJzaW9ucyBwcmlvciB0byBKZWxseWJlYW4uCi0gICAgICovCi0gICAgc3RhdGljIGNsYXNzIExlZ2FjeUltcGwgZXh0ZW5kcyBTeXN0ZW1NZWRpYVJvdXRlUHJvdmlkZXIgewotICAgICAgICBzdGF0aWMgZmluYWwgaW50IFBMQVlCQUNLX1NUUkVBTSA9IEF1ZGlvTWFuYWdlci5TVFJFQU1fTVVTSUM7Ci0KLSAgICAgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgQXJyYXlMaXN0PEludGVudEZpbHRlcj4gQ09OVFJPTF9GSUxURVJTOwotICAgICAgICBzdGF0aWMgewotICAgICAgICAgICAgSW50ZW50RmlsdGVyIGYgPSBuZXcgSW50ZW50RmlsdGVyKCk7Ci0gICAgICAgICAgICBmLmFkZENhdGVnb3J5KE1lZGlhQ29udHJvbEludGVudC5DQVRFR09SWV9MSVZFX0FVRElPKTsKLSAgICAgICAgICAgIGYuYWRkQ2F0ZWdvcnkoTWVkaWFDb250cm9sSW50ZW50LkNBVEVHT1JZX0xJVkVfVklERU8pOwotCi0gICAgICAgICAgICBDT05UUk9MX0ZJTFRFUlMgPSBuZXcgQXJyYXlMaXN0PEludGVudEZpbHRlcj4oKTsKLSAgICAgICAgICAgIENPTlRST0xfRklMVEVSUy5hZGQoZik7Ci0gICAgICAgIH0KLQotICAgICAgICBmaW5hbCBBdWRpb01hbmFnZXIgbUF1ZGlvTWFuYWdlcjsKLSAgICAgICAgcHJpdmF0ZSBmaW5hbCBWb2x1bWVDaGFuZ2VSZWNlaXZlciBtVm9sdW1lQ2hhbmdlUmVjZWl2ZXI7Ci0gICAgICAgIGludCBtTGFzdFJlcG9ydGVkVm9sdW1lID0gLTE7Ci0KLSAgICAgICAgcHVibGljIExlZ2FjeUltcGwoQ29udGV4dCBjb250ZXh0KSB7Ci0gICAgICAgICAgICBzdXBlcihjb250ZXh0KTsKLSAgICAgICAgICAgIG1BdWRpb01hbmFnZXIgPSAoQXVkaW9NYW5hZ2VyKWNvbnRleHQuZ2V0U3lzdGVtU2VydmljZShDb250ZXh0LkFVRElPX1NFUlZJQ0UpOwotICAgICAgICAgICAgbVZvbHVtZUNoYW5nZVJlY2VpdmVyID0gbmV3IFZvbHVtZUNoYW5nZVJlY2VpdmVyKCk7Ci0KLSAgICAgICAgICAgIGNvbnRleHQucmVnaXN0ZXJSZWNlaXZlcihtVm9sdW1lQ2hhbmdlUmVjZWl2ZXIsCi0gICAgICAgICAgICAgICAgICAgIG5ldyBJbnRlbnRGaWx0ZXIoVm9sdW1lQ2hhbmdlUmVjZWl2ZXIuVk9MVU1FX0NIQU5HRURfQUNUSU9OKSk7Ci0gICAgICAgICAgICBwdWJsaXNoUm91dGVzKCk7Ci0gICAgICAgIH0KLQotICAgICAgICB2b2lkIHB1Ymxpc2hSb3V0ZXMoKSB7Ci0gICAgICAgICAgICBSZXNvdXJjZXMgciA9IGdldENvbnRleHQoKS5nZXRSZXNvdXJjZXMoKTsKLSAgICAgICAgICAgIGludCBtYXhWb2x1bWUgPSBtQXVkaW9NYW5hZ2VyLmdldFN0cmVhbU1heFZvbHVtZShQTEFZQkFDS19TVFJFQU0pOwotICAgICAgICAgICAgbUxhc3RSZXBvcnRlZFZvbHVtZSA9IG1BdWRpb01hbmFnZXIuZ2V0U3RyZWFtVm9sdW1lKFBMQVlCQUNLX1NUUkVBTSk7Ci0gICAgICAgICAgICBNZWRpYVJvdXRlRGVzY3JpcHRvciBkZWZhdWx0Um91dGUgPSBuZXcgTWVkaWFSb3V0ZURlc2NyaXB0b3IuQnVpbGRlcigKLSAgICAgICAgICAgICAgICAgICAgREVGQVVMVF9ST1VURV9JRCwgci5nZXRTdHJpbmcoUi5zdHJpbmcubXJfc3lzdGVtX3JvdXRlX25hbWUpKQotICAgICAgICAgICAgICAgICAgICAuYWRkQ29udHJvbEZpbHRlcnMoQ09OVFJPTF9GSUxURVJTKQotICAgICAgICAgICAgICAgICAgICAuc2V0UGxheWJhY2tTdHJlYW0oUExBWUJBQ0tfU1RSRUFNKQotICAgICAgICAgICAgICAgICAgICAuc2V0UGxheWJhY2tUeXBlKE1lZGlhUm91dGVyLlJvdXRlSW5mby5QTEFZQkFDS19UWVBFX0xPQ0FMKQotICAgICAgICAgICAgICAgICAgICAuc2V0Vm9sdW1lSGFuZGxpbmcoTWVkaWFSb3V0ZXIuUm91dGVJbmZvLlBMQVlCQUNLX1ZPTFVNRV9WQVJJQUJMRSkKLSAgICAgICAgICAgICAgICAgICAgLnNldFZvbHVtZU1heChtYXhWb2x1bWUpCi0gICAgICAgICAgICAgICAgICAgIC5zZXRWb2x1bWUobUxhc3RSZXBvcnRlZFZvbHVtZSkKLSAgICAgICAgICAgICAgICAgICAgLmJ1aWxkKCk7Ci0KLSAgICAgICAgICAgIE1lZGlhUm91dGVQcm92aWRlckRlc2NyaXB0b3IgcHJvdmlkZXJEZXNjcmlwdG9yID0KLSAgICAgICAgICAgICAgICAgICAgbmV3IE1lZGlhUm91dGVQcm92aWRlckRlc2NyaXB0b3IuQnVpbGRlcigpCi0gICAgICAgICAgICAgICAgICAgIC5hZGRSb3V0ZShkZWZhdWx0Um91dGUpCi0gICAgICAgICAgICAgICAgICAgIC5idWlsZCgpOwotICAgICAgICAgICAgc2V0RGVzY3JpcHRvcihwcm92aWRlckRlc2NyaXB0b3IpOwotICAgICAgICB9Ci0KLSAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgIHB1YmxpYyBSb3V0ZUNvbnRyb2xsZXIgb25DcmVhdGVSb3V0ZUNvbnRyb2xsZXIoU3RyaW5nIHJvdXRlSWQpIHsKLSAgICAgICAgICAgIGlmIChyb3V0ZUlkLmVxdWFscyhERUZBVUxUX1JPVVRFX0lEKSkgewotICAgICAgICAgICAgICAgIHJldHVybiBuZXcgRGVmYXVsdFJvdXRlQ29udHJvbGxlcigpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgcmV0dXJuIG51bGw7Ci0gICAgICAgIH0KLQotICAgICAgICBmaW5hbCBjbGFzcyBEZWZhdWx0Um91dGVDb250cm9sbGVyIGV4dGVuZHMgUm91dGVDb250cm9sbGVyIHsKLSAgICAgICAgICAgIEBPdmVycmlkZQotICAgICAgICAgICAgcHVibGljIHZvaWQgb25TZXRWb2x1bWUoaW50IHZvbHVtZSkgewotICAgICAgICAgICAgICAgIG1BdWRpb01hbmFnZXIuc2V0U3RyZWFtVm9sdW1lKFBMQVlCQUNLX1NUUkVBTSwgdm9sdW1lLCAwKTsKLSAgICAgICAgICAgICAgICBwdWJsaXNoUm91dGVzKCk7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIEBPdmVycmlkZQotICAgICAgICAgICAgcHVibGljIHZvaWQgb25VcGRhdGVWb2x1bWUoaW50IGRlbHRhKSB7Ci0gICAgICAgICAgICAgICAgaW50IHZvbHVtZSA9IG1BdWRpb01hbmFnZXIuZ2V0U3RyZWFtVm9sdW1lKFBMQVlCQUNLX1NUUkVBTSk7Ci0gICAgICAgICAgICAgICAgaW50IG1heFZvbHVtZSA9IG1BdWRpb01hbmFnZXIuZ2V0U3RyZWFtTWF4Vm9sdW1lKFBMQVlCQUNLX1NUUkVBTSk7Ci0gICAgICAgICAgICAgICAgaW50IG5ld1ZvbHVtZSA9IE1hdGgubWluKG1heFZvbHVtZSwgTWF0aC5tYXgoMCwgdm9sdW1lICsgZGVsdGEpKTsKLSAgICAgICAgICAgICAgICBpZiAobmV3Vm9sdW1lICE9IHZvbHVtZSkgewotICAgICAgICAgICAgICAgICAgICBtQXVkaW9NYW5hZ2VyLnNldFN0cmVhbVZvbHVtZShQTEFZQkFDS19TVFJFQU0sIHZvbHVtZSwgMCk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIHB1Ymxpc2hSb3V0ZXMoKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIGZpbmFsIGNsYXNzIFZvbHVtZUNoYW5nZVJlY2VpdmVyIGV4dGVuZHMgQnJvYWRjYXN0UmVjZWl2ZXIgewotICAgICAgICAgICAgLy8gVGhlc2UgY29uc3RhbnRzIGNvbWUgZnJvbSBBdWRpb01hbmFnZXIuCi0gICAgICAgICAgICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBWT0xVTUVfQ0hBTkdFRF9BQ1RJT04gPQotICAgICAgICAgICAgICAgICAgICAiYW5kcm9pZC5tZWRpYS5WT0xVTUVfQ0hBTkdFRF9BQ1RJT04iOwotICAgICAgICAgICAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgRVhUUkFfVk9MVU1FX1NUUkVBTV9UWVBFID0KLSAgICAgICAgICAgICAgICAgICAgImFuZHJvaWQubWVkaWEuRVhUUkFfVk9MVU1FX1NUUkVBTV9UWVBFIjsKLSAgICAgICAgICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIEVYVFJBX1ZPTFVNRV9TVFJFQU1fVkFMVUUgPQotICAgICAgICAgICAgICAgICAgICAiYW5kcm9pZC5tZWRpYS5FWFRSQV9WT0xVTUVfU1RSRUFNX1ZBTFVFIjsKLQotICAgICAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgICAgICBwdWJsaWMgdm9pZCBvblJlY2VpdmUoQ29udGV4dCBjb250ZXh0LCBJbnRlbnQgaW50ZW50KSB7Ci0gICAgICAgICAgICAgICAgaWYgKGludGVudC5nZXRBY3Rpb24oKS5lcXVhbHMoVk9MVU1FX0NIQU5HRURfQUNUSU9OKSkgewotICAgICAgICAgICAgICAgICAgICBmaW5hbCBpbnQgc3RyZWFtVHlwZSA9IGludGVudC5nZXRJbnRFeHRyYShFWFRSQV9WT0xVTUVfU1RSRUFNX1RZUEUsIC0xKTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKHN0cmVhbVR5cGUgPT0gUExBWUJBQ0tfU1RSRUFNKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBmaW5hbCBpbnQgdm9sdW1lID0gaW50ZW50LmdldEludEV4dHJhKEVYVFJBX1ZPTFVNRV9TVFJFQU1fVkFMVUUsIC0xKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmICh2b2x1bWUgPj0gMCAmJiB2b2x1bWUgIT0gbUxhc3RSZXBvcnRlZFZvbHVtZSkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHB1Ymxpc2hSb3V0ZXMoKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLQotICAgIC8qKgotICAgICAqIEplbGx5YmVhbiBpbXBsZW1lbnRhdGlvbi4KLSAgICAgKi8KLSAgICAvLyBAQFJlcXVpcmVzQXBpKDE2KQotICAgIHN0YXRpYyBjbGFzcyBKZWxseWJlYW5JbXBsIGV4dGVuZHMgU3lzdGVtTWVkaWFSb3V0ZVByb3ZpZGVyCi0gICAgICAgICAgICBpbXBsZW1lbnRzIE1lZGlhUm91dGVySmVsbHliZWFuLkNhbGxiYWNrLCBNZWRpYVJvdXRlckplbGx5YmVhbi5Wb2x1bWVDYWxsYmFjayB7Ci0gICAgICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIEFycmF5TGlzdDxJbnRlbnRGaWx0ZXI+IExJVkVfQVVESU9fQ09OVFJPTF9GSUxURVJTOwotICAgICAgICBzdGF0aWMgewotICAgICAgICAgICAgSW50ZW50RmlsdGVyIGYgPSBuZXcgSW50ZW50RmlsdGVyKCk7Ci0gICAgICAgICAgICBmLmFkZENhdGVnb3J5KE1lZGlhQ29udHJvbEludGVudC5DQVRFR09SWV9MSVZFX0FVRElPKTsKLQotICAgICAgICAgICAgTElWRV9BVURJT19DT05UUk9MX0ZJTFRFUlMgPSBuZXcgQXJyYXlMaXN0PEludGVudEZpbHRlcj4oKTsKLSAgICAgICAgICAgIExJVkVfQVVESU9fQ09OVFJPTF9GSUxURVJTLmFkZChmKTsKLSAgICAgICAgfQotCi0gICAgICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIEFycmF5TGlzdDxJbnRlbnRGaWx0ZXI+IExJVkVfVklERU9fQ09OVFJPTF9GSUxURVJTOwotICAgICAgICBzdGF0aWMgewotICAgICAgICAgICAgSW50ZW50RmlsdGVyIGYgPSBuZXcgSW50ZW50RmlsdGVyKCk7Ci0gICAgICAgICAgICBmLmFkZENhdGVnb3J5KE1lZGlhQ29udHJvbEludGVudC5DQVRFR09SWV9MSVZFX1ZJREVPKTsKLQotICAgICAgICAgICAgTElWRV9WSURFT19DT05UUk9MX0ZJTFRFUlMgPSBuZXcgQXJyYXlMaXN0PEludGVudEZpbHRlcj4oKTsKLSAgICAgICAgICAgIExJVkVfVklERU9fQ09OVFJPTF9GSUxURVJTLmFkZChmKTsKLSAgICAgICAgfQotCi0gICAgICAgIHByaXZhdGUgZmluYWwgU3luY0NhbGxiYWNrIG1TeW5jQ2FsbGJhY2s7Ci0KLSAgICAgICAgcHJvdGVjdGVkIGZpbmFsIE9iamVjdCBtUm91dGVyT2JqOwotICAgICAgICBwcm90ZWN0ZWQgZmluYWwgT2JqZWN0IG1DYWxsYmFja09iajsKLSAgICAgICAgcHJvdGVjdGVkIGZpbmFsIE9iamVjdCBtVm9sdW1lQ2FsbGJhY2tPYmo7Ci0gICAgICAgIHByb3RlY3RlZCBmaW5hbCBPYmplY3QgbVVzZXJSb3V0ZUNhdGVnb3J5T2JqOwotICAgICAgICBwcm90ZWN0ZWQgaW50IG1Sb3V0ZVR5cGVzOwotICAgICAgICBwcm90ZWN0ZWQgYm9vbGVhbiBtQWN0aXZlU2NhbjsKLSAgICAgICAgcHJvdGVjdGVkIGJvb2xlYW4gbUNhbGxiYWNrUmVnaXN0ZXJlZDsKLQotICAgICAgICAvLyBNYWludGFpbnMgYW4gYXNzb2NpYXRpb24gZnJvbSBmcmFtZXdvcmsgcm91dGVzIHRvIHN1cHBvcnQgbGlicmFyeSByb3V0ZXMuCi0gICAgICAgIC8vIE5vdGUgdGhhdCB3ZSBjYW5ub3QgdXNlIHRoZSB0YWcgZmllbGQgZm9yIHRoaXMgYmVjYXVzZSBhbiBhcHBsaWNhdGlvbiBtYXkKLSAgICAgICAgLy8gaGF2ZSBwdWJsaXNoZWQgaXRzIG93biB1c2VyIHJvdXRlcyB0byB0aGUgZnJhbWV3b3JrIG1lZGlhIHJvdXRlciBhbmQgYWxyZWFkeQotICAgICAgICAvLyB1c2VkIHRoZSB0YWcgZm9yIGl0cyBvd24gcHVycG9zZXMuCi0gICAgICAgIHByb3RlY3RlZCBmaW5hbCBBcnJheUxpc3Q8U3lzdGVtUm91dGVSZWNvcmQ+IG1TeXN0ZW1Sb3V0ZVJlY29yZHMgPQotICAgICAgICAgICAgICAgIG5ldyBBcnJheUxpc3Q8U3lzdGVtUm91dGVSZWNvcmQ+KCk7Ci0KLSAgICAgICAgLy8gTWFpbnRhaW5zIGFuIGFzc29jaWF0aW9uIGZyb20gc3VwcG9ydCBsaWJyYXJ5IHJvdXRlcyB0byBmcmFtZXdvcmsgcm91dGVzLgotICAgICAgICBwcm90ZWN0ZWQgZmluYWwgQXJyYXlMaXN0PFVzZXJSb3V0ZVJlY29yZD4gbVVzZXJSb3V0ZVJlY29yZHMgPQotICAgICAgICAgICAgICAgIG5ldyBBcnJheUxpc3Q8VXNlclJvdXRlUmVjb3JkPigpOwotCi0gICAgICAgIHByaXZhdGUgTWVkaWFSb3V0ZXJKZWxseWJlYW4uU2VsZWN0Um91dGVXb3JrYXJvdW5kIG1TZWxlY3RSb3V0ZVdvcmthcm91bmQ7Ci0gICAgICAgIHByaXZhdGUgTWVkaWFSb3V0ZXJKZWxseWJlYW4uR2V0RGVmYXVsdFJvdXRlV29ya2Fyb3VuZCBtR2V0RGVmYXVsdFJvdXRlV29ya2Fyb3VuZDsKLQotICAgICAgICBwdWJsaWMgSmVsbHliZWFuSW1wbChDb250ZXh0IGNvbnRleHQsIFN5bmNDYWxsYmFjayBzeW5jQ2FsbGJhY2spIHsKLSAgICAgICAgICAgIHN1cGVyKGNvbnRleHQpOwotICAgICAgICAgICAgbVN5bmNDYWxsYmFjayA9IHN5bmNDYWxsYmFjazsKLSAgICAgICAgICAgIG1Sb3V0ZXJPYmogPSBNZWRpYVJvdXRlckplbGx5YmVhbi5nZXRNZWRpYVJvdXRlcihjb250ZXh0KTsKLSAgICAgICAgICAgIG1DYWxsYmFja09iaiA9IGNyZWF0ZUNhbGxiYWNrT2JqKCk7Ci0gICAgICAgICAgICBtVm9sdW1lQ2FsbGJhY2tPYmogPSBjcmVhdGVWb2x1bWVDYWxsYmFja09iaigpOwotCi0gICAgICAgICAgICBSZXNvdXJjZXMgciA9IEFwaUhlbHBlci5nZXRMaWJSZXNvdXJjZXMoY29udGV4dCk7Ci0gICAgICAgICAgICBtVXNlclJvdXRlQ2F0ZWdvcnlPYmogPSBNZWRpYVJvdXRlckplbGx5YmVhbi5jcmVhdGVSb3V0ZUNhdGVnb3J5KAotICAgICAgICAgICAgICAgICAgICBtUm91dGVyT2JqLCByLmdldFN0cmluZyhSLnN0cmluZy5tcl91c2VyX3JvdXRlX2NhdGVnb3J5X25hbWUpLCBmYWxzZSk7Ci0KLSAgICAgICAgICAgIHVwZGF0ZVN5c3RlbVJvdXRlcygpOwotICAgICAgICB9Ci0KLSAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgIHB1YmxpYyBSb3V0ZUNvbnRyb2xsZXIgb25DcmVhdGVSb3V0ZUNvbnRyb2xsZXIoU3RyaW5nIHJvdXRlSWQpIHsKLSAgICAgICAgICAgIGludCBpbmRleCA9IGZpbmRTeXN0ZW1Sb3V0ZVJlY29yZEJ5RGVzY3JpcHRvcklkKHJvdXRlSWQpOwotICAgICAgICAgICAgaWYgKGluZGV4ID49IDApIHsKLSAgICAgICAgICAgICAgICBTeXN0ZW1Sb3V0ZVJlY29yZCByZWNvcmQgPSBtU3lzdGVtUm91dGVSZWNvcmRzLmdldChpbmRleCk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBTeXN0ZW1Sb3V0ZUNvbnRyb2xsZXIocmVjb3JkLm1Sb3V0ZU9iaik7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICByZXR1cm4gbnVsbDsKLSAgICAgICAgfQotCi0gICAgICAgIEBPdmVycmlkZQotICAgICAgICBwdWJsaWMgdm9pZCBvbkRpc2NvdmVyeVJlcXVlc3RDaGFuZ2VkKE1lZGlhUm91dGVEaXNjb3ZlcnlSZXF1ZXN0IHJlcXVlc3QpIHsKLSAgICAgICAgICAgIGludCBuZXdSb3V0ZVR5cGVzID0gMDsKLSAgICAgICAgICAgIGJvb2xlYW4gbmV3QWN0aXZlU2NhbiA9IGZhbHNlOwotICAgICAgICAgICAgaWYgKHJlcXVlc3QgIT0gbnVsbCkgewotICAgICAgICAgICAgICAgIGZpbmFsIE1lZGlhUm91dGVTZWxlY3RvciBzZWxlY3RvciA9IHJlcXVlc3QuZ2V0U2VsZWN0b3IoKTsKLSAgICAgICAgICAgICAgICBmaW5hbCBMaXN0PFN0cmluZz4gY2F0ZWdvcmllcyA9IHNlbGVjdG9yLmdldENvbnRyb2xDYXRlZ29yaWVzKCk7Ci0gICAgICAgICAgICAgICAgZmluYWwgaW50IGNvdW50ID0gY2F0ZWdvcmllcy5zaXplKCk7Ci0gICAgICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBjb3VudDsgaSsrKSB7Ci0gICAgICAgICAgICAgICAgICAgIFN0cmluZyBjYXRlZ29yeSA9IGNhdGVnb3JpZXMuZ2V0KGkpOwotICAgICAgICAgICAgICAgICAgICBpZiAoY2F0ZWdvcnkuZXF1YWxzKE1lZGlhQ29udHJvbEludGVudC5DQVRFR09SWV9MSVZFX0FVRElPKSkgewotICAgICAgICAgICAgICAgICAgICAgICAgbmV3Um91dGVUeXBlcyB8PSBNZWRpYVJvdXRlckplbGx5YmVhbi5ST1VURV9UWVBFX0xJVkVfQVVESU87Ci0gICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoY2F0ZWdvcnkuZXF1YWxzKE1lZGlhQ29udHJvbEludGVudC5DQVRFR09SWV9MSVZFX1ZJREVPKSkgewotICAgICAgICAgICAgICAgICAgICAgICAgbmV3Um91dGVUeXBlcyB8PSBNZWRpYVJvdXRlckplbGx5YmVhbi5ST1VURV9UWVBFX0xJVkVfVklERU87Ci0gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBuZXdSb3V0ZVR5cGVzIHw9IE1lZGlhUm91dGVySmVsbHliZWFuLlJPVVRFX1RZUEVfVVNFUjsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBuZXdBY3RpdmVTY2FuID0gcmVxdWVzdC5pc0FjdGl2ZVNjYW4oKTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgaWYgKG1Sb3V0ZVR5cGVzICE9IG5ld1JvdXRlVHlwZXMgfHwgbUFjdGl2ZVNjYW4gIT0gbmV3QWN0aXZlU2NhbikgewotICAgICAgICAgICAgICAgIG1Sb3V0ZVR5cGVzID0gbmV3Um91dGVUeXBlczsKLSAgICAgICAgICAgICAgICBtQWN0aXZlU2NhbiA9IG5ld0FjdGl2ZVNjYW47Ci0gICAgICAgICAgICAgICAgdXBkYXRlU3lzdGVtUm91dGVzKCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgcHVibGljIHZvaWQgb25Sb3V0ZUFkZGVkKE9iamVjdCByb3V0ZU9iaikgewotICAgICAgICAgICAgaWYgKGFkZFN5c3RlbVJvdXRlTm9QdWJsaXNoKHJvdXRlT2JqKSkgewotICAgICAgICAgICAgICAgIHB1Ymxpc2hSb3V0ZXMoKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIHByaXZhdGUgdm9pZCB1cGRhdGVTeXN0ZW1Sb3V0ZXMoKSB7Ci0gICAgICAgICAgICB1cGRhdGVDYWxsYmFjaygpOwotICAgICAgICAgICAgYm9vbGVhbiBjaGFuZ2VkID0gZmFsc2U7Ci0gICAgICAgICAgICBmb3IgKE9iamVjdCByb3V0ZU9iaiA6IE1lZGlhUm91dGVySmVsbHliZWFuLmdldFJvdXRlcyhtUm91dGVyT2JqKSkgewotICAgICAgICAgICAgICAgIGNoYW5nZWQgfD0gYWRkU3lzdGVtUm91dGVOb1B1Ymxpc2gocm91dGVPYmopOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYgKGNoYW5nZWQpIHsKLSAgICAgICAgICAgICAgICBwdWJsaXNoUm91dGVzKCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICBwcml2YXRlIGJvb2xlYW4gYWRkU3lzdGVtUm91dGVOb1B1Ymxpc2goT2JqZWN0IHJvdXRlT2JqKSB7Ci0gICAgICAgICAgICBpZiAoZ2V0VXNlclJvdXRlUmVjb3JkKHJvdXRlT2JqKSA9PSBudWxsCi0gICAgICAgICAgICAgICAgICAgICYmIGZpbmRTeXN0ZW1Sb3V0ZVJlY29yZChyb3V0ZU9iaikgPCAwKSB7Ci0gICAgICAgICAgICAgICAgU3RyaW5nIGlkID0gYXNzaWduUm91dGVJZChyb3V0ZU9iaik7Ci0gICAgICAgICAgICAgICAgU3lzdGVtUm91dGVSZWNvcmQgcmVjb3JkID0gbmV3IFN5c3RlbVJvdXRlUmVjb3JkKHJvdXRlT2JqLCBpZCk7Ci0gICAgICAgICAgICAgICAgdXBkYXRlU3lzdGVtUm91dGVEZXNjcmlwdG9yKHJlY29yZCk7Ci0gICAgICAgICAgICAgICAgbVN5c3RlbVJvdXRlUmVjb3Jkcy5hZGQocmVjb3JkKTsKLSAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgfQotCi0gICAgICAgIHByaXZhdGUgU3RyaW5nIGFzc2lnblJvdXRlSWQoT2JqZWN0IHJvdXRlT2JqKSB7Ci0gICAgICAgICAgICAvLyBUT0RPOiBUaGUgZnJhbWV3b3JrIG1lZGlhIHJvdXRlciBzaG91bGQgc3VwcGx5IGEgdW5pcXVlIHJvdXRlIGlkIHRoYXQKLSAgICAgICAgICAgIC8vIHdlIGNhbiB1c2UgaGVyZS4gIEZvciBub3cgd2UgdXNlIGEgaGFzaCBvZiB0aGUgcm91dGUgbmFtZSBhbmQgdGFrZSBjYXJlCi0gICAgICAgICAgICAvLyB0byBkZWR1cGUgaXQuCi0gICAgICAgICAgICBib29sZWFuIGlzRGVmYXVsdCA9IChnZXREZWZhdWx0Um91dGUoKSA9PSByb3V0ZU9iaik7Ci0gICAgICAgICAgICBTdHJpbmcgaWQgPSBpc0RlZmF1bHQgPyBERUZBVUxUX1JPVVRFX0lEIDoKLSAgICAgICAgICAgICAgICAgICAgU3RyaW5nLmZvcm1hdChMb2NhbGUuVVMsICJST1VURV8lMDh4IiwgZ2V0Um91dGVOYW1lKHJvdXRlT2JqKS5oYXNoQ29kZSgpKTsKLSAgICAgICAgICAgIGlmIChmaW5kU3lzdGVtUm91dGVSZWNvcmRCeURlc2NyaXB0b3JJZChpZCkgPCAwKSB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGlkOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgZm9yIChpbnQgaSA9IDI7IDsgaSsrKSB7Ci0gICAgICAgICAgICAgICAgU3RyaW5nIG5ld0lkID0gU3RyaW5nLmZvcm1hdChMb2NhbGUuVVMsICIlc18lZCIsIGlkLCBpKTsKLSAgICAgICAgICAgICAgICBpZiAoZmluZFN5c3RlbVJvdXRlUmVjb3JkQnlEZXNjcmlwdG9ySWQobmV3SWQpIDwgMCkgewotICAgICAgICAgICAgICAgICAgICByZXR1cm4gbmV3SWQ7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgIHB1YmxpYyB2b2lkIG9uUm91dGVSZW1vdmVkKE9iamVjdCByb3V0ZU9iaikgewotICAgICAgICAgICAgaWYgKGdldFVzZXJSb3V0ZVJlY29yZChyb3V0ZU9iaikgPT0gbnVsbCkgewotICAgICAgICAgICAgICAgIGludCBpbmRleCA9IGZpbmRTeXN0ZW1Sb3V0ZVJlY29yZChyb3V0ZU9iaik7Ci0gICAgICAgICAgICAgICAgaWYgKGluZGV4ID49IDApIHsKLSAgICAgICAgICAgICAgICAgICAgbVN5c3RlbVJvdXRlUmVjb3Jkcy5yZW1vdmUoaW5kZXgpOwotICAgICAgICAgICAgICAgICAgICBwdWJsaXNoUm91dGVzKCk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgIHB1YmxpYyB2b2lkIG9uUm91dGVDaGFuZ2VkKE9iamVjdCByb3V0ZU9iaikgewotICAgICAgICAgICAgaWYgKGdldFVzZXJSb3V0ZVJlY29yZChyb3V0ZU9iaikgPT0gbnVsbCkgewotICAgICAgICAgICAgICAgIGludCBpbmRleCA9IGZpbmRTeXN0ZW1Sb3V0ZVJlY29yZChyb3V0ZU9iaik7Ci0gICAgICAgICAgICAgICAgaWYgKGluZGV4ID49IDApIHsKLSAgICAgICAgICAgICAgICAgICAgU3lzdGVtUm91dGVSZWNvcmQgcmVjb3JkID0gbVN5c3RlbVJvdXRlUmVjb3Jkcy5nZXQoaW5kZXgpOwotICAgICAgICAgICAgICAgICAgICB1cGRhdGVTeXN0ZW1Sb3V0ZURlc2NyaXB0b3IocmVjb3JkKTsKLSAgICAgICAgICAgICAgICAgICAgcHVibGlzaFJvdXRlcygpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIEBPdmVycmlkZQotICAgICAgICBwdWJsaWMgdm9pZCBvblJvdXRlVm9sdW1lQ2hhbmdlZChPYmplY3Qgcm91dGVPYmopIHsKLSAgICAgICAgICAgIGlmIChnZXRVc2VyUm91dGVSZWNvcmQocm91dGVPYmopID09IG51bGwpIHsKLSAgICAgICAgICAgICAgICBpbnQgaW5kZXggPSBmaW5kU3lzdGVtUm91dGVSZWNvcmQocm91dGVPYmopOwotICAgICAgICAgICAgICAgIGlmIChpbmRleCA+PSAwKSB7Ci0gICAgICAgICAgICAgICAgICAgIFN5c3RlbVJvdXRlUmVjb3JkIHJlY29yZCA9IG1TeXN0ZW1Sb3V0ZVJlY29yZHMuZ2V0KGluZGV4KTsKLSAgICAgICAgICAgICAgICAgICAgaW50IG5ld1ZvbHVtZSA9IE1lZGlhUm91dGVySmVsbHliZWFuLlJvdXRlSW5mby5nZXRWb2x1bWUocm91dGVPYmopOwotICAgICAgICAgICAgICAgICAgICBpZiAobmV3Vm9sdW1lICE9IHJlY29yZC5tUm91dGVEZXNjcmlwdG9yLmdldFZvbHVtZSgpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICByZWNvcmQubVJvdXRlRGVzY3JpcHRvciA9Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldyBNZWRpYVJvdXRlRGVzY3JpcHRvci5CdWlsZGVyKHJlY29yZC5tUm91dGVEZXNjcmlwdG9yKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuc2V0Vm9sdW1lKG5ld1ZvbHVtZSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLmJ1aWxkKCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBwdWJsaXNoUm91dGVzKCk7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgcHVibGljIHZvaWQgb25Sb3V0ZVNlbGVjdGVkKGludCB0eXBlLCBPYmplY3Qgcm91dGVPYmopIHsKLSAgICAgICAgICAgIGlmIChyb3V0ZU9iaiAhPSBNZWRpYVJvdXRlckplbGx5YmVhbi5nZXRTZWxlY3RlZFJvdXRlKG1Sb3V0ZXJPYmosCi0gICAgICAgICAgICAgICAgICAgIE1lZGlhUm91dGVySmVsbHliZWFuLkFMTF9ST1VURV9UWVBFUykpIHsKLSAgICAgICAgICAgICAgICAvLyBUaGUgY3VycmVudGx5IHNlbGVjdGVkIHJvdXRlIGhhcyBhbHJlYWR5IGNoYW5nZWQgc28gdGhpcyBjYWxsYmFjawotICAgICAgICAgICAgICAgIC8vIGlzIHN0YWxlLiAgRHJvcCBpdCB0byBwcmV2ZW50IGdldHRpbmcgaW50byBzeW5jIGxvb3BzLgotICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgVXNlclJvdXRlUmVjb3JkIHVzZXJSb3V0ZVJlY29yZCA9IGdldFVzZXJSb3V0ZVJlY29yZChyb3V0ZU9iaik7Ci0gICAgICAgICAgICBpZiAodXNlclJvdXRlUmVjb3JkICE9IG51bGwpIHsKLSAgICAgICAgICAgICAgICB1c2VyUm91dGVSZWNvcmQubVJvdXRlLnNlbGVjdCgpOwotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAvLyBTZWxlY3QgdGhlIHJvdXRlIGlmIGl0IGFscmVhZHkgZXhpc3RzIGluIHRoZSBjb21wYXQgbWVkaWEgcm91dGVyLgotICAgICAgICAgICAgICAgIC8vIElmIG5vdCwgd2Ugd2lsbCBzZWxlY3QgaXQgaW5zdGVhZCB3aGVuIHRoZSByb3V0ZSBpcyBhZGRlZC4KLSAgICAgICAgICAgICAgICBpbnQgaW5kZXggPSBmaW5kU3lzdGVtUm91dGVSZWNvcmQocm91dGVPYmopOwotICAgICAgICAgICAgICAgIGlmIChpbmRleCA+PSAwKSB7Ci0gICAgICAgICAgICAgICAgICAgIFN5c3RlbVJvdXRlUmVjb3JkIHJlY29yZCA9IG1TeXN0ZW1Sb3V0ZVJlY29yZHMuZ2V0KGluZGV4KTsKLSAgICAgICAgICAgICAgICAgICAgbVN5bmNDYWxsYmFjay5vblN5c3RlbVJvdXRlU2VsZWN0ZWRCeURlc2NyaXB0b3JJZChyZWNvcmQubVJvdXRlRGVzY3JpcHRvcklkKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgcHVibGljIHZvaWQgb25Sb3V0ZVVuc2VsZWN0ZWQoaW50IHR5cGUsIE9iamVjdCByb3V0ZU9iaikgewotICAgICAgICAgICAgLy8gTm90aGluZyB0byBkbyB3aGVuIGEgcm91dGUgaXMgdW5zZWxlY3RlZC4KLSAgICAgICAgICAgIC8vIFdlIG9ubHkgbmVlZCB0byBoYW5kbGUgd2hlbiBhIHJvdXRlIGlzIHNlbGVjdGVkLgotICAgICAgICB9Ci0KLSAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgIHB1YmxpYyB2b2lkIG9uUm91dGVHcm91cGVkKE9iamVjdCByb3V0ZU9iaiwgT2JqZWN0IGdyb3VwT2JqLCBpbnQgaW5kZXgpIHsKLSAgICAgICAgICAgIC8vIFJvdXRlIGdyb3VwaW5nIGlzIGRlcHJlY2F0ZWQgYW5kIG5vIGxvbmdlciBzdXBwb3J0ZWQuCi0gICAgICAgIH0KLQotICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgcHVibGljIHZvaWQgb25Sb3V0ZVVuZ3JvdXBlZChPYmplY3Qgcm91dGVPYmosIE9iamVjdCBncm91cE9iaikgewotICAgICAgICAgICAgLy8gUm91dGUgZ3JvdXBpbmcgaXMgZGVwcmVjYXRlZCBhbmQgbm8gbG9uZ2VyIHN1cHBvcnRlZC4KLSAgICAgICAgfQotCi0gICAgICAgIEBPdmVycmlkZQotICAgICAgICBwdWJsaWMgdm9pZCBvblZvbHVtZVNldFJlcXVlc3QoT2JqZWN0IHJvdXRlT2JqLCBpbnQgdm9sdW1lKSB7Ci0gICAgICAgICAgICBVc2VyUm91dGVSZWNvcmQgcmVjb3JkID0gZ2V0VXNlclJvdXRlUmVjb3JkKHJvdXRlT2JqKTsKLSAgICAgICAgICAgIGlmIChyZWNvcmQgIT0gbnVsbCkgewotICAgICAgICAgICAgICAgIHJlY29yZC5tUm91dGUucmVxdWVzdFNldFZvbHVtZSh2b2x1bWUpOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgIHB1YmxpYyB2b2lkIG9uVm9sdW1lVXBkYXRlUmVxdWVzdChPYmplY3Qgcm91dGVPYmosIGludCBkaXJlY3Rpb24pIHsKLSAgICAgICAgICAgIFVzZXJSb3V0ZVJlY29yZCByZWNvcmQgPSBnZXRVc2VyUm91dGVSZWNvcmQocm91dGVPYmopOwotICAgICAgICAgICAgaWYgKHJlY29yZCAhPSBudWxsKSB7Ci0gICAgICAgICAgICAgICAgcmVjb3JkLm1Sb3V0ZS5yZXF1ZXN0VXBkYXRlVm9sdW1lKGRpcmVjdGlvbik7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgcHVibGljIHZvaWQgb25TeW5jUm91dGVBZGRlZChNZWRpYVJvdXRlci5Sb3V0ZUluZm8gcm91dGUpIHsKLSAgICAgICAgICAgIGlmIChyb3V0ZS5nZXRQcm92aWRlckluc3RhbmNlKCkgIT0gdGhpcykgewotICAgICAgICAgICAgICAgIE9iamVjdCByb3V0ZU9iaiA9IE1lZGlhUm91dGVySmVsbHliZWFuLmNyZWF0ZVVzZXJSb3V0ZSgKLSAgICAgICAgICAgICAgICAgICAgICAgIG1Sb3V0ZXJPYmosIG1Vc2VyUm91dGVDYXRlZ29yeU9iaik7Ci0gICAgICAgICAgICAgICAgVXNlclJvdXRlUmVjb3JkIHJlY29yZCA9IG5ldyBVc2VyUm91dGVSZWNvcmQocm91dGUsIHJvdXRlT2JqKTsKLSAgICAgICAgICAgICAgICBNZWRpYVJvdXRlckplbGx5YmVhbi5Sb3V0ZUluZm8uc2V0VGFnKHJvdXRlT2JqLCByZWNvcmQpOwotICAgICAgICAgICAgICAgIE1lZGlhUm91dGVySmVsbHliZWFuLlVzZXJSb3V0ZUluZm8uc2V0Vm9sdW1lQ2FsbGJhY2socm91dGVPYmosIG1Wb2x1bWVDYWxsYmFja09iaik7Ci0gICAgICAgICAgICAgICAgdXBkYXRlVXNlclJvdXRlUHJvcGVydGllcyhyZWNvcmQpOwotICAgICAgICAgICAgICAgIG1Vc2VyUm91dGVSZWNvcmRzLmFkZChyZWNvcmQpOwotICAgICAgICAgICAgICAgIE1lZGlhUm91dGVySmVsbHliZWFuLmFkZFVzZXJSb3V0ZShtUm91dGVyT2JqLCByb3V0ZU9iaik7Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIC8vIElmIHRoZSBuZXdseSBhZGRlZCByb3V0ZSBpcyB0aGUgY291bnRlcnBhcnQgb2YgdGhlIGN1cnJlbnRseSBzZWxlY3RlZAotICAgICAgICAgICAgICAgIC8vIHJvdXRlIGluIHRoZSBmcmFtZXdvcmsgbWVkaWEgcm91dGVyIHRoZW4gZW5zdXJlIGl0IGlzIHNlbGVjdGVkIGluCi0gICAgICAgICAgICAgICAgLy8gdGhlIGNvbXBhdCBtZWRpYSByb3V0ZXIuCi0gICAgICAgICAgICAgICAgT2JqZWN0IHJvdXRlT2JqID0gTWVkaWFSb3V0ZXJKZWxseWJlYW4uZ2V0U2VsZWN0ZWRSb3V0ZSgKLSAgICAgICAgICAgICAgICAgICAgICAgIG1Sb3V0ZXJPYmosIE1lZGlhUm91dGVySmVsbHliZWFuLkFMTF9ST1VURV9UWVBFUyk7Ci0gICAgICAgICAgICAgICAgaW50IGluZGV4ID0gZmluZFN5c3RlbVJvdXRlUmVjb3JkKHJvdXRlT2JqKTsKLSAgICAgICAgICAgICAgICBpZiAoaW5kZXggPj0gMCkgewotICAgICAgICAgICAgICAgICAgICBTeXN0ZW1Sb3V0ZVJlY29yZCByZWNvcmQgPSBtU3lzdGVtUm91dGVSZWNvcmRzLmdldChpbmRleCk7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChyZWNvcmQubVJvdXRlRGVzY3JpcHRvcklkLmVxdWFscyhyb3V0ZS5nZXREZXNjcmlwdG9ySWQoKSkpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHJvdXRlLnNlbGVjdCgpOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgIHB1YmxpYyB2b2lkIG9uU3luY1JvdXRlUmVtb3ZlZChNZWRpYVJvdXRlci5Sb3V0ZUluZm8gcm91dGUpIHsKLSAgICAgICAgICAgIGlmIChyb3V0ZS5nZXRQcm92aWRlckluc3RhbmNlKCkgIT0gdGhpcykgewotICAgICAgICAgICAgICAgIGludCBpbmRleCA9IGZpbmRVc2VyUm91dGVSZWNvcmQocm91dGUpOwotICAgICAgICAgICAgICAgIGlmIChpbmRleCA+PSAwKSB7Ci0gICAgICAgICAgICAgICAgICAgIFVzZXJSb3V0ZVJlY29yZCByZWNvcmQgPSBtVXNlclJvdXRlUmVjb3Jkcy5yZW1vdmUoaW5kZXgpOwotICAgICAgICAgICAgICAgICAgICBNZWRpYVJvdXRlckplbGx5YmVhbi5Sb3V0ZUluZm8uc2V0VGFnKHJlY29yZC5tUm91dGVPYmosIG51bGwpOwotICAgICAgICAgICAgICAgICAgICBNZWRpYVJvdXRlckplbGx5YmVhbi5Vc2VyUm91dGVJbmZvLnNldFZvbHVtZUNhbGxiYWNrKHJlY29yZC5tUm91dGVPYmosIG51bGwpOwotICAgICAgICAgICAgICAgICAgICBNZWRpYVJvdXRlckplbGx5YmVhbi5yZW1vdmVVc2VyUm91dGUobVJvdXRlck9iaiwgcmVjb3JkLm1Sb3V0ZU9iaik7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgIHB1YmxpYyB2b2lkIG9uU3luY1JvdXRlQ2hhbmdlZChNZWRpYVJvdXRlci5Sb3V0ZUluZm8gcm91dGUpIHsKLSAgICAgICAgICAgIGlmIChyb3V0ZS5nZXRQcm92aWRlckluc3RhbmNlKCkgIT0gdGhpcykgewotICAgICAgICAgICAgICAgIGludCBpbmRleCA9IGZpbmRVc2VyUm91dGVSZWNvcmQocm91dGUpOwotICAgICAgICAgICAgICAgIGlmIChpbmRleCA+PSAwKSB7Ci0gICAgICAgICAgICAgICAgICAgIFVzZXJSb3V0ZVJlY29yZCByZWNvcmQgPSBtVXNlclJvdXRlUmVjb3Jkcy5nZXQoaW5kZXgpOwotICAgICAgICAgICAgICAgICAgICB1cGRhdGVVc2VyUm91dGVQcm9wZXJ0aWVzKHJlY29yZCk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgIHB1YmxpYyB2b2lkIG9uU3luY1JvdXRlU2VsZWN0ZWQoTWVkaWFSb3V0ZXIuUm91dGVJbmZvIHJvdXRlKSB7Ci0gICAgICAgICAgICBpZiAoIXJvdXRlLmlzU2VsZWN0ZWQoKSkgewotICAgICAgICAgICAgICAgIC8vIFRoZSBjdXJyZW50bHkgc2VsZWN0ZWQgcm91dGUgaGFzIGFscmVhZHkgY2hhbmdlZCBzbyB0aGlzIGNhbGxiYWNrCi0gICAgICAgICAgICAgICAgLy8gaXMgc3RhbGUuICBEcm9wIGl0IHRvIHByZXZlbnQgZ2V0dGluZyBpbnRvIHN5bmMgbG9vcHMuCi0gICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBpZiAocm91dGUuZ2V0UHJvdmlkZXJJbnN0YW5jZSgpICE9IHRoaXMpIHsKLSAgICAgICAgICAgICAgICBpbnQgaW5kZXggPSBmaW5kVXNlclJvdXRlUmVjb3JkKHJvdXRlKTsKLSAgICAgICAgICAgICAgICBpZiAoaW5kZXggPj0gMCkgewotICAgICAgICAgICAgICAgICAgICBVc2VyUm91dGVSZWNvcmQgcmVjb3JkID0gbVVzZXJSb3V0ZVJlY29yZHMuZ2V0KGluZGV4KTsKLSAgICAgICAgICAgICAgICAgICAgc2VsZWN0Um91dGUocmVjb3JkLm1Sb3V0ZU9iaik7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICBpbnQgaW5kZXggPSBmaW5kU3lzdGVtUm91dGVSZWNvcmRCeURlc2NyaXB0b3JJZChyb3V0ZS5nZXREZXNjcmlwdG9ySWQoKSk7Ci0gICAgICAgICAgICAgICAgaWYgKGluZGV4ID49IDApIHsKLSAgICAgICAgICAgICAgICAgICAgU3lzdGVtUm91dGVSZWNvcmQgcmVjb3JkID0gbVN5c3RlbVJvdXRlUmVjb3Jkcy5nZXQoaW5kZXgpOwotICAgICAgICAgICAgICAgICAgICBzZWxlY3RSb3V0ZShyZWNvcmQubVJvdXRlT2JqKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICBwcm90ZWN0ZWQgdm9pZCBwdWJsaXNoUm91dGVzKCkgewotICAgICAgICAgICAgTWVkaWFSb3V0ZVByb3ZpZGVyRGVzY3JpcHRvci5CdWlsZGVyIGJ1aWxkZXIgPQotICAgICAgICAgICAgICAgICAgICBuZXcgTWVkaWFSb3V0ZVByb3ZpZGVyRGVzY3JpcHRvci5CdWlsZGVyKCk7Ci0gICAgICAgICAgICBpbnQgY291bnQgPSBtU3lzdGVtUm91dGVSZWNvcmRzLnNpemUoKTsKLSAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgY291bnQ7IGkrKykgewotICAgICAgICAgICAgICAgIGJ1aWxkZXIuYWRkUm91dGUobVN5c3RlbVJvdXRlUmVjb3Jkcy5nZXQoaSkubVJvdXRlRGVzY3JpcHRvcik7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIHNldERlc2NyaXB0b3IoYnVpbGRlci5idWlsZCgpKTsKLSAgICAgICAgfQotCi0gICAgICAgIHByb3RlY3RlZCBpbnQgZmluZFN5c3RlbVJvdXRlUmVjb3JkKE9iamVjdCByb3V0ZU9iaikgewotICAgICAgICAgICAgZmluYWwgaW50IGNvdW50ID0gbVN5c3RlbVJvdXRlUmVjb3Jkcy5zaXplKCk7Ci0gICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGNvdW50OyBpKyspIHsKLSAgICAgICAgICAgICAgICBpZiAobVN5c3RlbVJvdXRlUmVjb3Jkcy5nZXQoaSkubVJvdXRlT2JqID09IHJvdXRlT2JqKSB7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHJldHVybiAtMTsKLSAgICAgICAgfQotCi0gICAgICAgIHByb3RlY3RlZCBpbnQgZmluZFN5c3RlbVJvdXRlUmVjb3JkQnlEZXNjcmlwdG9ySWQoU3RyaW5nIGlkKSB7Ci0gICAgICAgICAgICBmaW5hbCBpbnQgY291bnQgPSBtU3lzdGVtUm91dGVSZWNvcmRzLnNpemUoKTsKLSAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgY291bnQ7IGkrKykgewotICAgICAgICAgICAgICAgIGlmIChtU3lzdGVtUm91dGVSZWNvcmRzLmdldChpKS5tUm91dGVEZXNjcmlwdG9ySWQuZXF1YWxzKGlkKSkgewotICAgICAgICAgICAgICAgICAgICByZXR1cm4gaTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICByZXR1cm4gLTE7Ci0gICAgICAgIH0KLQotICAgICAgICBwcm90ZWN0ZWQgaW50IGZpbmRVc2VyUm91dGVSZWNvcmQoTWVkaWFSb3V0ZXIuUm91dGVJbmZvIHJvdXRlKSB7Ci0gICAgICAgICAgICBmaW5hbCBpbnQgY291bnQgPSBtVXNlclJvdXRlUmVjb3Jkcy5zaXplKCk7Ci0gICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGNvdW50OyBpKyspIHsKLSAgICAgICAgICAgICAgICBpZiAobVVzZXJSb3V0ZVJlY29yZHMuZ2V0KGkpLm1Sb3V0ZSA9PSByb3V0ZSkgewotICAgICAgICAgICAgICAgICAgICByZXR1cm4gaTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICByZXR1cm4gLTE7Ci0gICAgICAgIH0KLQotICAgICAgICBwcm90ZWN0ZWQgVXNlclJvdXRlUmVjb3JkIGdldFVzZXJSb3V0ZVJlY29yZChPYmplY3Qgcm91dGVPYmopIHsKLSAgICAgICAgICAgIE9iamVjdCB0YWcgPSBNZWRpYVJvdXRlckplbGx5YmVhbi5Sb3V0ZUluZm8uZ2V0VGFnKHJvdXRlT2JqKTsKLSAgICAgICAgICAgIHJldHVybiB0YWcgaW5zdGFuY2VvZiBVc2VyUm91dGVSZWNvcmQgPyAoVXNlclJvdXRlUmVjb3JkKXRhZyA6IG51bGw7Ci0gICAgICAgIH0KLQotICAgICAgICBwcm90ZWN0ZWQgdm9pZCB1cGRhdGVTeXN0ZW1Sb3V0ZURlc2NyaXB0b3IoU3lzdGVtUm91dGVSZWNvcmQgcmVjb3JkKSB7Ci0gICAgICAgICAgICAvLyBXZSBtdXN0IGFsd2F5cyByZWNyZWF0ZSB0aGUgcm91dGUgZGVzY3JpcHRvciB3aGVuIG1ha2luZyBhbnkgY2hhbmdlcwotICAgICAgICAgICAgLy8gYmVjYXVzZSB0aGV5IGFyZSBpbnRlbmRlZCB0byBiZSBpbW11dGFibGUgb25jZSBwdWJsaXNoZWQuCi0gICAgICAgICAgICBNZWRpYVJvdXRlRGVzY3JpcHRvci5CdWlsZGVyIGJ1aWxkZXIgPSBuZXcgTWVkaWFSb3V0ZURlc2NyaXB0b3IuQnVpbGRlcigKLSAgICAgICAgICAgICAgICAgICAgcmVjb3JkLm1Sb3V0ZURlc2NyaXB0b3JJZCwgZ2V0Um91dGVOYW1lKHJlY29yZC5tUm91dGVPYmopKTsKLSAgICAgICAgICAgIG9uQnVpbGRTeXN0ZW1Sb3V0ZURlc2NyaXB0b3IocmVjb3JkLCBidWlsZGVyKTsKLSAgICAgICAgICAgIHJlY29yZC5tUm91dGVEZXNjcmlwdG9yID0gYnVpbGRlci5idWlsZCgpOwotICAgICAgICB9Ci0KLSAgICAgICAgcHJvdGVjdGVkIFN0cmluZyBnZXRSb3V0ZU5hbWUoT2JqZWN0IHJvdXRlT2JqKSB7Ci0gICAgICAgICAgICAvLyBSb3V0ZXMgc2hvdWxkIG5vdCBoYXZlIG51bGwgbmFtZXMgYnV0IGl0IG1heSBoYXBwZW4gZm9yIGJhZGx5IGNvbmZpZ3VyZWQKLSAgICAgICAgICAgIC8vIHVzZXIgcm91dGVzLiAgV2UgdG9sZXJhdGUgdGhpcyBieSB1c2luZyBhbiBlbXB0eSBuYW1lIHN0cmluZyBoZXJlIGJ1dAotICAgICAgICAgICAgLy8gc3VjaCB1bm5hbWVkIHJvdXRlcyB3aWxsIGJlIGRpc2NhcmRlZCBieSB0aGUgbWVkaWEgcm91dGVyIHVwc3RyZWFtCi0gICAgICAgICAgICAvLyAod2l0aCBhIGxvZyBtZXNzYWdlIHNvIHdlIGNhbiB0cmFjayBkb3duIHRoZSBwcm9ibGVtKS4KLSAgICAgICAgICAgIENoYXJTZXF1ZW5jZSBuYW1lID0gTWVkaWFSb3V0ZXJKZWxseWJlYW4uUm91dGVJbmZvLmdldE5hbWUocm91dGVPYmosIGdldENvbnRleHQoKSk7Ci0gICAgICAgICAgICByZXR1cm4gbmFtZSAhPSBudWxsID8gbmFtZS50b1N0cmluZygpIDogIiI7Ci0gICAgICAgIH0KLQotICAgICAgICBwcm90ZWN0ZWQgdm9pZCBvbkJ1aWxkU3lzdGVtUm91dGVEZXNjcmlwdG9yKFN5c3RlbVJvdXRlUmVjb3JkIHJlY29yZCwKLSAgICAgICAgICAgICAgICBNZWRpYVJvdXRlRGVzY3JpcHRvci5CdWlsZGVyIGJ1aWxkZXIpIHsKLSAgICAgICAgICAgIGludCBzdXBwb3J0ZWRUeXBlcyA9IE1lZGlhUm91dGVySmVsbHliZWFuLlJvdXRlSW5mby5nZXRTdXBwb3J0ZWRUeXBlcygKLSAgICAgICAgICAgICAgICAgICAgcmVjb3JkLm1Sb3V0ZU9iaik7Ci0gICAgICAgICAgICBpZiAoKHN1cHBvcnRlZFR5cGVzICYgTWVkaWFSb3V0ZXJKZWxseWJlYW4uUk9VVEVfVFlQRV9MSVZFX0FVRElPKSAhPSAwKSB7Ci0gICAgICAgICAgICAgICAgYnVpbGRlci5hZGRDb250cm9sRmlsdGVycyhMSVZFX0FVRElPX0NPTlRST0xfRklMVEVSUyk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAoKHN1cHBvcnRlZFR5cGVzICYgTWVkaWFSb3V0ZXJKZWxseWJlYW4uUk9VVEVfVFlQRV9MSVZFX1ZJREVPKSAhPSAwKSB7Ci0gICAgICAgICAgICAgICAgYnVpbGRlci5hZGRDb250cm9sRmlsdGVycyhMSVZFX1ZJREVPX0NPTlRST0xfRklMVEVSUyk7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGJ1aWxkZXIuc2V0UGxheWJhY2tUeXBlKAotICAgICAgICAgICAgICAgICAgICBNZWRpYVJvdXRlckplbGx5YmVhbi5Sb3V0ZUluZm8uZ2V0UGxheWJhY2tUeXBlKHJlY29yZC5tUm91dGVPYmopKTsKLSAgICAgICAgICAgIGJ1aWxkZXIuc2V0UGxheWJhY2tTdHJlYW0oCi0gICAgICAgICAgICAgICAgICAgIE1lZGlhUm91dGVySmVsbHliZWFuLlJvdXRlSW5mby5nZXRQbGF5YmFja1N0cmVhbShyZWNvcmQubVJvdXRlT2JqKSk7Ci0gICAgICAgICAgICBidWlsZGVyLnNldFZvbHVtZSgKLSAgICAgICAgICAgICAgICAgICAgTWVkaWFSb3V0ZXJKZWxseWJlYW4uUm91dGVJbmZvLmdldFZvbHVtZShyZWNvcmQubVJvdXRlT2JqKSk7Ci0gICAgICAgICAgICBidWlsZGVyLnNldFZvbHVtZU1heCgKLSAgICAgICAgICAgICAgICAgICAgTWVkaWFSb3V0ZXJKZWxseWJlYW4uUm91dGVJbmZvLmdldFZvbHVtZU1heChyZWNvcmQubVJvdXRlT2JqKSk7Ci0gICAgICAgICAgICBidWlsZGVyLnNldFZvbHVtZUhhbmRsaW5nKAotICAgICAgICAgICAgICAgICAgICBNZWRpYVJvdXRlckplbGx5YmVhbi5Sb3V0ZUluZm8uZ2V0Vm9sdW1lSGFuZGxpbmcocmVjb3JkLm1Sb3V0ZU9iaikpOwotICAgICAgICB9Ci0KLSAgICAgICAgcHJvdGVjdGVkIHZvaWQgdXBkYXRlVXNlclJvdXRlUHJvcGVydGllcyhVc2VyUm91dGVSZWNvcmQgcmVjb3JkKSB7Ci0gICAgICAgICAgICBNZWRpYVJvdXRlckplbGx5YmVhbi5Vc2VyUm91dGVJbmZvLnNldE5hbWUoCi0gICAgICAgICAgICAgICAgICAgIHJlY29yZC5tUm91dGVPYmosIHJlY29yZC5tUm91dGUuZ2V0TmFtZSgpKTsKLSAgICAgICAgICAgIE1lZGlhUm91dGVySmVsbHliZWFuLlVzZXJSb3V0ZUluZm8uc2V0UGxheWJhY2tUeXBlKAotICAgICAgICAgICAgICAgICAgICByZWNvcmQubVJvdXRlT2JqLCByZWNvcmQubVJvdXRlLmdldFBsYXliYWNrVHlwZSgpKTsKLSAgICAgICAgICAgIE1lZGlhUm91dGVySmVsbHliZWFuLlVzZXJSb3V0ZUluZm8uc2V0UGxheWJhY2tTdHJlYW0oCi0gICAgICAgICAgICAgICAgICAgIHJlY29yZC5tUm91dGVPYmosIHJlY29yZC5tUm91dGUuZ2V0UGxheWJhY2tTdHJlYW0oKSk7Ci0gICAgICAgICAgICBNZWRpYVJvdXRlckplbGx5YmVhbi5Vc2VyUm91dGVJbmZvLnNldFZvbHVtZSgKLSAgICAgICAgICAgICAgICAgICAgcmVjb3JkLm1Sb3V0ZU9iaiwgcmVjb3JkLm1Sb3V0ZS5nZXRWb2x1bWUoKSk7Ci0gICAgICAgICAgICBNZWRpYVJvdXRlckplbGx5YmVhbi5Vc2VyUm91dGVJbmZvLnNldFZvbHVtZU1heCgKLSAgICAgICAgICAgICAgICAgICAgcmVjb3JkLm1Sb3V0ZU9iaiwgcmVjb3JkLm1Sb3V0ZS5nZXRWb2x1bWVNYXgoKSk7Ci0gICAgICAgICAgICBNZWRpYVJvdXRlckplbGx5YmVhbi5Vc2VyUm91dGVJbmZvLnNldFZvbHVtZUhhbmRsaW5nKAotICAgICAgICAgICAgICAgICAgICByZWNvcmQubVJvdXRlT2JqLCByZWNvcmQubVJvdXRlLmdldFZvbHVtZUhhbmRsaW5nKCkpOwotICAgICAgICB9Ci0KLSAgICAgICAgcHJvdGVjdGVkIHZvaWQgdXBkYXRlQ2FsbGJhY2soKSB7Ci0gICAgICAgICAgICBpZiAobUNhbGxiYWNrUmVnaXN0ZXJlZCkgewotICAgICAgICAgICAgICAgIG1DYWxsYmFja1JlZ2lzdGVyZWQgPSBmYWxzZTsKLSAgICAgICAgICAgICAgICBNZWRpYVJvdXRlckplbGx5YmVhbi5yZW1vdmVDYWxsYmFjayhtUm91dGVyT2JqLCBtQ2FsbGJhY2tPYmopOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBpZiAobVJvdXRlVHlwZXMgIT0gMCkgewotICAgICAgICAgICAgICAgIG1DYWxsYmFja1JlZ2lzdGVyZWQgPSB0cnVlOwotICAgICAgICAgICAgICAgIE1lZGlhUm91dGVySmVsbHliZWFuLmFkZENhbGxiYWNrKG1Sb3V0ZXJPYmosIG1Sb3V0ZVR5cGVzLCBtQ2FsbGJhY2tPYmopOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgcHJvdGVjdGVkIE9iamVjdCBjcmVhdGVDYWxsYmFja09iaigpIHsKLSAgICAgICAgICAgIHJldHVybiBNZWRpYVJvdXRlckplbGx5YmVhbi5jcmVhdGVDYWxsYmFjayh0aGlzKTsKLSAgICAgICAgfQotCi0gICAgICAgIHByb3RlY3RlZCBPYmplY3QgY3JlYXRlVm9sdW1lQ2FsbGJhY2tPYmooKSB7Ci0gICAgICAgICAgICByZXR1cm4gTWVkaWFSb3V0ZXJKZWxseWJlYW4uY3JlYXRlVm9sdW1lQ2FsbGJhY2sodGhpcyk7Ci0gICAgICAgIH0KLQotICAgICAgICBwcm90ZWN0ZWQgdm9pZCBzZWxlY3RSb3V0ZShPYmplY3Qgcm91dGVPYmopIHsKLSAgICAgICAgICAgIGlmIChtU2VsZWN0Um91dGVXb3JrYXJvdW5kID09IG51bGwpIHsKLSAgICAgICAgICAgICAgICBtU2VsZWN0Um91dGVXb3JrYXJvdW5kID0gbmV3IE1lZGlhUm91dGVySmVsbHliZWFuLlNlbGVjdFJvdXRlV29ya2Fyb3VuZCgpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgbVNlbGVjdFJvdXRlV29ya2Fyb3VuZC5zZWxlY3RSb3V0ZShtUm91dGVyT2JqLAotICAgICAgICAgICAgICAgICAgICBNZWRpYVJvdXRlckplbGx5YmVhbi5BTExfUk9VVEVfVFlQRVMsIHJvdXRlT2JqKTsKLSAgICAgICAgfQotCi0gICAgICAgIEBPdmVycmlkZQotICAgICAgICBwcm90ZWN0ZWQgT2JqZWN0IGdldERlZmF1bHRSb3V0ZSgpIHsKLSAgICAgICAgICAgIGlmIChtR2V0RGVmYXVsdFJvdXRlV29ya2Fyb3VuZCA9PSBudWxsKSB7Ci0gICAgICAgICAgICAgICAgbUdldERlZmF1bHRSb3V0ZVdvcmthcm91bmQgPSBuZXcgTWVkaWFSb3V0ZXJKZWxseWJlYW4uR2V0RGVmYXVsdFJvdXRlV29ya2Fyb3VuZCgpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgcmV0dXJuIG1HZXREZWZhdWx0Um91dGVXb3JrYXJvdW5kLmdldERlZmF1bHRSb3V0ZShtUm91dGVyT2JqKTsKLSAgICAgICAgfQotCi0gICAgICAgIEBPdmVycmlkZQotICAgICAgICBwcm90ZWN0ZWQgT2JqZWN0IGdldFN5c3RlbVJvdXRlKE1lZGlhUm91dGVyLlJvdXRlSW5mbyByb3V0ZSkgewotICAgICAgICAgICAgaWYgKHJvdXRlID09IG51bGwpIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGludCBpbmRleCA9IGZpbmRTeXN0ZW1Sb3V0ZVJlY29yZEJ5RGVzY3JpcHRvcklkKHJvdXRlLmdldERlc2NyaXB0b3JJZCgpKTsKLSAgICAgICAgICAgIGlmIChpbmRleCA+PSAwKSB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIG1TeXN0ZW1Sb3V0ZVJlY29yZHMuZ2V0KGluZGV4KS5tUm91dGVPYmo7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICByZXR1cm4gbnVsbDsKLSAgICAgICAgfQotCi0gICAgICAgIC8qKgotICAgICAgICAgKiBSZXByZXNlbnRzIGEgcm91dGUgdGhhdCBpcyBwcm92aWRlZCBieSB0aGUgZnJhbWV3b3JrIG1lZGlhIHJvdXRlcgotICAgICAgICAgKiBhbmQgcHVibGlzaGVkIGJ5IHRoaXMgcm91dGUgcHJvdmlkZXIgdG8gdGhlIHN1cHBvcnQgbGlicmFyeSBtZWRpYSByb3V0ZXIuCi0gICAgICAgICAqLwotICAgICAgICBwcm90ZWN0ZWQgc3RhdGljIGZpbmFsIGNsYXNzIFN5c3RlbVJvdXRlUmVjb3JkIHsKLSAgICAgICAgICAgIHB1YmxpYyBmaW5hbCBPYmplY3QgbVJvdXRlT2JqOwotICAgICAgICAgICAgcHVibGljIGZpbmFsIFN0cmluZyBtUm91dGVEZXNjcmlwdG9ySWQ7Ci0gICAgICAgICAgICBwdWJsaWMgTWVkaWFSb3V0ZURlc2NyaXB0b3IgbVJvdXRlRGVzY3JpcHRvcjsgLy8gYXNzaWduZWQgaW1tZWRpYXRlbHkgYWZ0ZXIgY3JlYXRpb24KLQotICAgICAgICAgICAgcHVibGljIFN5c3RlbVJvdXRlUmVjb3JkKE9iamVjdCByb3V0ZU9iaiwgU3RyaW5nIGlkKSB7Ci0gICAgICAgICAgICAgICAgbVJvdXRlT2JqID0gcm91dGVPYmo7Ci0gICAgICAgICAgICAgICAgbVJvdXRlRGVzY3JpcHRvcklkID0gaWQ7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICAvKioKLSAgICAgICAgICogUmVwcmVzZW50cyBhIHJvdXRlIHRoYXQgaXMgcHJvdmlkZWQgYnkgdGhlIHN1cHBvcnQgbGlicmFyeSBtZWRpYSByb3V0ZXIKLSAgICAgICAgICogYW5kIHB1Ymxpc2hlZCBieSB0aGlzIHJvdXRlIHByb3ZpZGVyIHRvIHRoZSBmcmFtZXdvcmsgbWVkaWEgcm91dGVyLgotICAgICAgICAgKi8KLSAgICAgICAgcHJvdGVjdGVkIHN0YXRpYyBmaW5hbCBjbGFzcyBVc2VyUm91dGVSZWNvcmQgewotICAgICAgICAgICAgcHVibGljIGZpbmFsIE1lZGlhUm91dGVyLlJvdXRlSW5mbyBtUm91dGU7Ci0gICAgICAgICAgICBwdWJsaWMgZmluYWwgT2JqZWN0IG1Sb3V0ZU9iajsKLQotICAgICAgICAgICAgcHVibGljIFVzZXJSb3V0ZVJlY29yZChNZWRpYVJvdXRlci5Sb3V0ZUluZm8gcm91dGUsIE9iamVjdCByb3V0ZU9iaikgewotICAgICAgICAgICAgICAgIG1Sb3V0ZSA9IHJvdXRlOwotICAgICAgICAgICAgICAgIG1Sb3V0ZU9iaiA9IHJvdXRlT2JqOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgcHJvdGVjdGVkIHN0YXRpYyBmaW5hbCBjbGFzcyBTeXN0ZW1Sb3V0ZUNvbnRyb2xsZXIgZXh0ZW5kcyBSb3V0ZUNvbnRyb2xsZXIgewotICAgICAgICAgICAgcHJpdmF0ZSBmaW5hbCBPYmplY3QgbVJvdXRlT2JqOwotCi0gICAgICAgICAgICBwdWJsaWMgU3lzdGVtUm91dGVDb250cm9sbGVyKE9iamVjdCByb3V0ZU9iaikgewotICAgICAgICAgICAgICAgIG1Sb3V0ZU9iaiA9IHJvdXRlT2JqOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgICAgIHB1YmxpYyB2b2lkIG9uU2V0Vm9sdW1lKGludCB2b2x1bWUpIHsKLSAgICAgICAgICAgICAgICBNZWRpYVJvdXRlckplbGx5YmVhbi5Sb3V0ZUluZm8ucmVxdWVzdFNldFZvbHVtZShtUm91dGVPYmosIHZvbHVtZSk7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIEBPdmVycmlkZQotICAgICAgICAgICAgcHVibGljIHZvaWQgb25VcGRhdGVWb2x1bWUoaW50IGRlbHRhKSB7Ci0gICAgICAgICAgICAgICAgTWVkaWFSb3V0ZXJKZWxseWJlYW4uUm91dGVJbmZvLnJlcXVlc3RVcGRhdGVWb2x1bWUobVJvdXRlT2JqLCBkZWx0YSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBKZWxseWJlYW4gTVIxIGltcGxlbWVudGF0aW9uLgotICAgICAqLwotICAgIC8vIEBAUmVxdWlyZXNBcGkoMTcpCi0gICAgcHJpdmF0ZSBzdGF0aWMgY2xhc3MgSmVsbHliZWFuTXIxSW1wbCBleHRlbmRzIEplbGx5YmVhbkltcGwKLSAgICAgICAgICAgIGltcGxlbWVudHMgTWVkaWFSb3V0ZXJKZWxseWJlYW5NcjEuQ2FsbGJhY2sgewotICAgICAgICBwcml2YXRlIE1lZGlhUm91dGVySmVsbHliZWFuTXIxLkFjdGl2ZVNjYW5Xb3JrYXJvdW5kIG1BY3RpdmVTY2FuV29ya2Fyb3VuZDsKLSAgICAgICAgcHJpdmF0ZSBNZWRpYVJvdXRlckplbGx5YmVhbk1yMS5Jc0Nvbm5lY3RpbmdXb3JrYXJvdW5kIG1Jc0Nvbm5lY3RpbmdXb3JrYXJvdW5kOwotCi0gICAgICAgIHB1YmxpYyBKZWxseWJlYW5NcjFJbXBsKENvbnRleHQgY29udGV4dCwgU3luY0NhbGxiYWNrIHN5bmNDYWxsYmFjaykgewotICAgICAgICAgICAgc3VwZXIoY29udGV4dCwgc3luY0NhbGxiYWNrKTsKLSAgICAgICAgfQotCi0gICAgICAgIEBPdmVycmlkZQotICAgICAgICBwdWJsaWMgdm9pZCBvblJvdXRlUHJlc2VudGF0aW9uRGlzcGxheUNoYW5nZWQoT2JqZWN0IHJvdXRlT2JqKSB7Ci0gICAgICAgICAgICBpbnQgaW5kZXggPSBmaW5kU3lzdGVtUm91dGVSZWNvcmQocm91dGVPYmopOwotICAgICAgICAgICAgaWYgKGluZGV4ID49IDApIHsKLSAgICAgICAgICAgICAgICBTeXN0ZW1Sb3V0ZVJlY29yZCByZWNvcmQgPSBtU3lzdGVtUm91dGVSZWNvcmRzLmdldChpbmRleCk7Ci0gICAgICAgICAgICAgICAgRGlzcGxheSBuZXdQcmVzZW50YXRpb25EaXNwbGF5ID0KLSAgICAgICAgICAgICAgICAgICAgICAgIE1lZGlhUm91dGVySmVsbHliZWFuTXIxLlJvdXRlSW5mby5nZXRQcmVzZW50YXRpb25EaXNwbGF5KHJvdXRlT2JqKTsKLSAgICAgICAgICAgICAgICBpbnQgbmV3UHJlc2VudGF0aW9uRGlzcGxheUlkID0gKG5ld1ByZXNlbnRhdGlvbkRpc3BsYXkgIT0gbnVsbAotICAgICAgICAgICAgICAgICAgICAgICAgPyBuZXdQcmVzZW50YXRpb25EaXNwbGF5LmdldERpc3BsYXlJZCgpIDogLTEpOwotICAgICAgICAgICAgICAgIGlmIChuZXdQcmVzZW50YXRpb25EaXNwbGF5SWQKLSAgICAgICAgICAgICAgICAgICAgICAgICE9IHJlY29yZC5tUm91dGVEZXNjcmlwdG9yLmdldFByZXNlbnRhdGlvbkRpc3BsYXlJZCgpKSB7Ci0gICAgICAgICAgICAgICAgICAgIHJlY29yZC5tUm91dGVEZXNjcmlwdG9yID0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXcgTWVkaWFSb3V0ZURlc2NyaXB0b3IuQnVpbGRlcihyZWNvcmQubVJvdXRlRGVzY3JpcHRvcikKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAuc2V0UHJlc2VudGF0aW9uRGlzcGxheUlkKG5ld1ByZXNlbnRhdGlvbkRpc3BsYXlJZCkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAuYnVpbGQoKTsKLSAgICAgICAgICAgICAgICAgICAgcHVibGlzaFJvdXRlcygpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIEBPdmVycmlkZQotICAgICAgICBwcm90ZWN0ZWQgdm9pZCBvbkJ1aWxkU3lzdGVtUm91dGVEZXNjcmlwdG9yKFN5c3RlbVJvdXRlUmVjb3JkIHJlY29yZCwKLSAgICAgICAgICAgICAgICBNZWRpYVJvdXRlRGVzY3JpcHRvci5CdWlsZGVyIGJ1aWxkZXIpIHsKLSAgICAgICAgICAgIHN1cGVyLm9uQnVpbGRTeXN0ZW1Sb3V0ZURlc2NyaXB0b3IocmVjb3JkLCBidWlsZGVyKTsKLQotICAgICAgICAgICAgaWYgKCFNZWRpYVJvdXRlckplbGx5YmVhbk1yMS5Sb3V0ZUluZm8uaXNFbmFibGVkKHJlY29yZC5tUm91dGVPYmopKSB7Ci0gICAgICAgICAgICAgICAgYnVpbGRlci5zZXRFbmFibGVkKGZhbHNlKTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgaWYgKGlzQ29ubmVjdGluZyhyZWNvcmQpKSB7Ci0gICAgICAgICAgICAgICAgYnVpbGRlci5zZXRDb25uZWN0aW5nKHRydWUpOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBEaXNwbGF5IHByZXNlbnRhdGlvbkRpc3BsYXkgPQotICAgICAgICAgICAgICAgICAgICBNZWRpYVJvdXRlckplbGx5YmVhbk1yMS5Sb3V0ZUluZm8uZ2V0UHJlc2VudGF0aW9uRGlzcGxheShyZWNvcmQubVJvdXRlT2JqKTsKLSAgICAgICAgICAgIGlmIChwcmVzZW50YXRpb25EaXNwbGF5ICE9IG51bGwpIHsKLSAgICAgICAgICAgICAgICBidWlsZGVyLnNldFByZXNlbnRhdGlvbkRpc3BsYXlJZChwcmVzZW50YXRpb25EaXNwbGF5LmdldERpc3BsYXlJZCgpKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIEBPdmVycmlkZQotICAgICAgICBwcm90ZWN0ZWQgdm9pZCB1cGRhdGVDYWxsYmFjaygpIHsKLSAgICAgICAgICAgIHN1cGVyLnVwZGF0ZUNhbGxiYWNrKCk7Ci0KLSAgICAgICAgICAgIGlmIChtQWN0aXZlU2Nhbldvcmthcm91bmQgPT0gbnVsbCkgewotICAgICAgICAgICAgICAgIG1BY3RpdmVTY2FuV29ya2Fyb3VuZCA9IG5ldyBNZWRpYVJvdXRlckplbGx5YmVhbk1yMS5BY3RpdmVTY2FuV29ya2Fyb3VuZCgKLSAgICAgICAgICAgICAgICAgICAgICAgIGdldENvbnRleHQoKSwgZ2V0SGFuZGxlcigpKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIG1BY3RpdmVTY2FuV29ya2Fyb3VuZC5zZXRBY3RpdmVTY2FuUm91dGVUeXBlcyhtQWN0aXZlU2NhbiA/IG1Sb3V0ZVR5cGVzIDogMCk7Ci0gICAgICAgIH0KLQotICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgcHJvdGVjdGVkIE9iamVjdCBjcmVhdGVDYWxsYmFja09iaigpIHsKLSAgICAgICAgICAgIHJldHVybiBNZWRpYVJvdXRlckplbGx5YmVhbk1yMS5jcmVhdGVDYWxsYmFjayh0aGlzKTsKLSAgICAgICAgfQotCi0gICAgICAgIHByb3RlY3RlZCBib29sZWFuIGlzQ29ubmVjdGluZyhTeXN0ZW1Sb3V0ZVJlY29yZCByZWNvcmQpIHsKLSAgICAgICAgICAgIGlmIChtSXNDb25uZWN0aW5nV29ya2Fyb3VuZCA9PSBudWxsKSB7Ci0gICAgICAgICAgICAgICAgbUlzQ29ubmVjdGluZ1dvcmthcm91bmQgPSBuZXcgTWVkaWFSb3V0ZXJKZWxseWJlYW5NcjEuSXNDb25uZWN0aW5nV29ya2Fyb3VuZCgpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgcmV0dXJuIG1Jc0Nvbm5lY3RpbmdXb3JrYXJvdW5kLmlzQ29ubmVjdGluZyhyZWNvcmQubVJvdXRlT2JqKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIC8qKgotICAgICAqIEplbGx5YmVhbiBNUjIgaW1wbGVtZW50YXRpb24uCi0gICAgICovCi0gICAgLy8gQEBSZXF1aXJlc0FwaSgxOCkKLSAgICBwcml2YXRlIHN0YXRpYyBjbGFzcyBKZWxseWJlYW5NcjJJbXBsIGV4dGVuZHMgSmVsbHliZWFuTXIxSW1wbCB7Ci0gICAgICAgIHB1YmxpYyBKZWxseWJlYW5NcjJJbXBsKENvbnRleHQgY29udGV4dCwgU3luY0NhbGxiYWNrIHN5bmNDYWxsYmFjaykgewotICAgICAgICAgICAgc3VwZXIoY29udGV4dCwgc3luY0NhbGxiYWNrKTsKLSAgICAgICAgfQotCi0gICAgICAgIEBPdmVycmlkZQotICAgICAgICBwcm90ZWN0ZWQgdm9pZCBvbkJ1aWxkU3lzdGVtUm91dGVEZXNjcmlwdG9yKFN5c3RlbVJvdXRlUmVjb3JkIHJlY29yZCwKLSAgICAgICAgICAgICAgICBNZWRpYVJvdXRlRGVzY3JpcHRvci5CdWlsZGVyIGJ1aWxkZXIpIHsKLSAgICAgICAgICAgIHN1cGVyLm9uQnVpbGRTeXN0ZW1Sb3V0ZURlc2NyaXB0b3IocmVjb3JkLCBidWlsZGVyKTsKLQotICAgICAgICAgICAgQ2hhclNlcXVlbmNlIGRlc2NyaXB0aW9uID0KLSAgICAgICAgICAgICAgICAgICAgTWVkaWFSb3V0ZXJKZWxseWJlYW5NcjIuUm91dGVJbmZvLmdldERlc2NyaXB0aW9uKHJlY29yZC5tUm91dGVPYmopOwotICAgICAgICAgICAgaWYgKGRlc2NyaXB0aW9uICE9IG51bGwpIHsKLSAgICAgICAgICAgICAgICBidWlsZGVyLnNldERlc2NyaXB0aW9uKGRlc2NyaXB0aW9uLnRvU3RyaW5nKCkpOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgIHByb3RlY3RlZCB2b2lkIHNlbGVjdFJvdXRlKE9iamVjdCByb3V0ZU9iaikgewotICAgICAgICAgICAgTWVkaWFSb3V0ZXJKZWxseWJlYW4uc2VsZWN0Um91dGUobVJvdXRlck9iaiwKLSAgICAgICAgICAgICAgICAgICAgTWVkaWFSb3V0ZXJKZWxseWJlYW4uQUxMX1JPVVRFX1RZUEVTLCByb3V0ZU9iaik7Ci0gICAgICAgIH0KLQotICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgcHJvdGVjdGVkIE9iamVjdCBnZXREZWZhdWx0Um91dGUoKSB7Ci0gICAgICAgICAgICByZXR1cm4gTWVkaWFSb3V0ZXJKZWxseWJlYW5NcjIuZ2V0RGVmYXVsdFJvdXRlKG1Sb3V0ZXJPYmopOwotICAgICAgICB9Ci0KLSAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgIHByb3RlY3RlZCB2b2lkIHVwZGF0ZVVzZXJSb3V0ZVByb3BlcnRpZXMoVXNlclJvdXRlUmVjb3JkIHJlY29yZCkgewotICAgICAgICAgICAgc3VwZXIudXBkYXRlVXNlclJvdXRlUHJvcGVydGllcyhyZWNvcmQpOwotCi0gICAgICAgICAgICBNZWRpYVJvdXRlckplbGx5YmVhbk1yMi5Vc2VyUm91dGVJbmZvLnNldERlc2NyaXB0aW9uKAotICAgICAgICAgICAgICAgICAgICByZWNvcmQubVJvdXRlT2JqLCByZWNvcmQubVJvdXRlLmdldERlc2NyaXB0aW9uKCkpOwotICAgICAgICB9Ci0KLSAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgIHByb3RlY3RlZCB2b2lkIHVwZGF0ZUNhbGxiYWNrKCkgewotICAgICAgICAgICAgaWYgKG1DYWxsYmFja1JlZ2lzdGVyZWQpIHsKLSAgICAgICAgICAgICAgICBNZWRpYVJvdXRlckplbGx5YmVhbi5yZW1vdmVDYWxsYmFjayhtUm91dGVyT2JqLCBtQ2FsbGJhY2tPYmopOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBtQ2FsbGJhY2tSZWdpc3RlcmVkID0gdHJ1ZTsKLSAgICAgICAgICAgIE1lZGlhUm91dGVySmVsbHliZWFuTXIyLmFkZENhbGxiYWNrKG1Sb3V0ZXJPYmosIG1Sb3V0ZVR5cGVzLCBtQ2FsbGJhY2tPYmosCi0gICAgICAgICAgICAgICAgICAgIE1lZGlhUm91dGVyLkNBTExCQUNLX0ZMQUdfVU5GSUxURVJFRF9FVkVOVFMKLSAgICAgICAgICAgICAgICAgICAgfCAobUFjdGl2ZVNjYW4gPyBNZWRpYVJvdXRlci5DQUxMQkFDS19GTEFHX1BFUkZPUk1fQUNUSVZFX1NDQU4gOiAwKSk7Ci0gICAgICAgIH0KLQotICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgcHJvdGVjdGVkIGJvb2xlYW4gaXNDb25uZWN0aW5nKFN5c3RlbVJvdXRlUmVjb3JkIHJlY29yZCkgewotICAgICAgICAgICAgcmV0dXJuIE1lZGlhUm91dGVySmVsbHliZWFuTXIyLlJvdXRlSW5mby5pc0Nvbm5lY3RpbmcocmVjb3JkLm1Sb3V0ZU9iaik7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBBcGkyNCBpbXBsZW1lbnRhdGlvbi4KLSAgICAgKi8KLSAgICAvLyBAQFJlcXVpcmVzQXBpKDI0KQotICAgIHByaXZhdGUgc3RhdGljIGNsYXNzIEFwaTI0SW1wbCBleHRlbmRzIEplbGx5YmVhbk1yMkltcGwgewotICAgICAgICBwdWJsaWMgQXBpMjRJbXBsKENvbnRleHQgY29udGV4dCwgU3luY0NhbGxiYWNrIHN5bmNDYWxsYmFjaykgewotICAgICAgICAgICAgc3VwZXIoY29udGV4dCwgc3luY0NhbGxiYWNrKTsKLSAgICAgICAgfQotCi0gICAgICAgIEBPdmVycmlkZQotICAgICAgICBwcm90ZWN0ZWQgdm9pZCBvbkJ1aWxkU3lzdGVtUm91dGVEZXNjcmlwdG9yKFN5c3RlbVJvdXRlUmVjb3JkIHJlY29yZCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNZWRpYVJvdXRlRGVzY3JpcHRvci5CdWlsZGVyIGJ1aWxkZXIpIHsKLSAgICAgICAgICAgIHN1cGVyLm9uQnVpbGRTeXN0ZW1Sb3V0ZURlc2NyaXB0b3IocmVjb3JkLCBidWlsZGVyKTsKLQotICAgICAgICAgICAgYnVpbGRlci5zZXREZXZpY2VUeXBlKE1lZGlhUm91dGVyQXBpMjQuUm91dGVJbmZvLmdldERldmljZVR5cGUocmVjb3JkLm1Sb3V0ZU9iaikpOwotICAgICAgICB9Ci0gICAgfQotfQpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvTWVkaWFDb21wb25lbnRzL3NyYy9jb20vYW5kcm9pZC9zdXBwb3J0L21lZGlhcm91dGVyL21lZGlhL3BhY2thZ2UuaHRtbCBiL3BhY2thZ2VzL01lZGlhQ29tcG9uZW50cy9zcmMvY29tL2FuZHJvaWQvc3VwcG9ydC9tZWRpYXJvdXRlci9tZWRpYS9wYWNrYWdlLmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGJlMmFhZjIuLjAwMDAwMDAKLS0tIGEvcGFja2FnZXMvTWVkaWFDb21wb25lbnRzL3NyYy9jb20vYW5kcm9pZC9zdXBwb3J0L21lZGlhcm91dGVyL21lZGlhL3BhY2thZ2UuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDkgKzAsMCBAQAotPGh0bWw+Ci0KLTxib2R5PgotCi08cD5Db250YWlucyBBUElzIHRoYXQgY29udHJvbCB0aGUgcm91dGluZyBvZiBtZWRpYSBjaGFubmVscyBhbmQgc3RyZWFtcyBmcm9tIHRoZSBjdXJyZW50IGRldmljZQotICB0byBleHRlcm5hbCBzcGVha2VycyBhbmQgZGVzdGluYXRpb24gZGV2aWNlcy48L3A+Ci0KLTwvYm9keT4KLTwvaHRtbD4KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL01lZGlhQ29tcG9uZW50cy9zcmMvY29tL2FuZHJvaWQvd2lkZ2V0L0Jhc2VMYXlvdXQuamF2YSBiL3BhY2thZ2VzL01lZGlhQ29tcG9uZW50cy9zcmMvY29tL2FuZHJvaWQvd2lkZ2V0L0Jhc2VMYXlvdXQuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZmI2NDcxZC4uMDAwMDAwMAotLS0gYS9wYWNrYWdlcy9NZWRpYUNvbXBvbmVudHMvc3JjL2NvbS9hbmRyb2lkL3dpZGdldC9CYXNlTGF5b3V0LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyMTUgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAyMDE4IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKLSAqCi0gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKLSAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KLSAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotICoKLSAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0gKgotICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQotICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKLSAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgotICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAotICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCi0gKi8KLQotcGFja2FnZSBjb20uYW5kcm9pZC53aWRnZXQ7Ci0KLWltcG9ydCBhbmRyb2lkLmdyYXBoaWNzLmRyYXdhYmxlLkRyYXdhYmxlOwotaW1wb3J0IGFuZHJvaWQubWVkaWEudXBkYXRlLlZpZXdHcm91cFByb3ZpZGVyOwotaW1wb3J0IGFuZHJvaWQudXRpbC5BdHRyaWJ1dGVTZXQ7Ci1pbXBvcnQgYW5kcm9pZC52aWV3LlZpZXc7Ci1pbXBvcnQgYW5kcm9pZC52aWV3LlZpZXdHcm91cDsKLWltcG9ydCBhbmRyb2lkLnZpZXcuVmlld0dyb3VwLkxheW91dFBhcmFtczsKLWltcG9ydCBhbmRyb2lkLnZpZXcuVmlld0dyb3VwLk1hcmdpbkxheW91dFBhcmFtczsKLQotaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7Ci0KLXB1YmxpYyBjbGFzcyBCYXNlTGF5b3V0IGV4dGVuZHMgVmlld0dyb3VwSW1wbCB7Ci0gICAgcHJpdmF0ZSBmaW5hbCBWaWV3R3JvdXAgbUluc3RhbmNlOwotICAgIHByaXZhdGUgZmluYWwgVmlld0dyb3VwUHJvdmlkZXIgbVN1cGVyUHJvdmlkZXI7Ci0gICAgcHJpdmF0ZSBmaW5hbCBWaWV3R3JvdXBQcm92aWRlciBtUHJpdmF0ZVByb3ZpZGVyOwotCi0gICAgcHJpdmF0ZSBmaW5hbCBBcnJheUxpc3Q8Vmlldz4gbU1hdGNoUGFyZW50Q2hpbGRyZW4gPSBuZXcgQXJyYXlMaXN0PD4oMSk7Ci0KLSAgICBwdWJsaWMgQmFzZUxheW91dChWaWV3R3JvdXAgaW5zdGFuY2UsCi0gICAgICAgICAgICBWaWV3R3JvdXBQcm92aWRlciBzdXBlclByb3ZpZGVyLCBWaWV3R3JvdXBQcm92aWRlciBwcml2YXRlUHJvdmlkZXIpIHsKLSAgICAgICAgc3VwZXIoaW5zdGFuY2UsIHN1cGVyUHJvdmlkZXIsIHByaXZhdGVQcm92aWRlcik7Ci0gICAgICAgIG1JbnN0YW5jZSA9IGluc3RhbmNlOwotICAgICAgICBtU3VwZXJQcm92aWRlciA9IHN1cGVyUHJvdmlkZXI7Ci0gICAgICAgIG1Qcml2YXRlUHJvdmlkZXIgPSBwcml2YXRlUHJvdmlkZXI7Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIGJvb2xlYW4gY2hlY2tMYXlvdXRQYXJhbXNfaW1wbChMYXlvdXRQYXJhbXMgcCkgewotICAgICAgICByZXR1cm4gcCBpbnN0YW5jZW9mIE1hcmdpbkxheW91dFBhcmFtczsKLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgTGF5b3V0UGFyYW1zIGdlbmVyYXRlRGVmYXVsdExheW91dFBhcmFtc19pbXBsKCkgewotICAgICAgICByZXR1cm4gbmV3IE1hcmdpbkxheW91dFBhcmFtcyhMYXlvdXRQYXJhbXMuTUFUQ0hfUEFSRU5ULCBMYXlvdXRQYXJhbXMuTUFUQ0hfUEFSRU5UKTsKLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgTGF5b3V0UGFyYW1zIGdlbmVyYXRlTGF5b3V0UGFyYW1zX2ltcGwoQXR0cmlidXRlU2V0IGF0dHJzKSB7Ci0gICAgICAgIHJldHVybiBuZXcgTWFyZ2luTGF5b3V0UGFyYW1zKG1JbnN0YW5jZS5nZXRDb250ZXh0KCksIGF0dHJzKTsKLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgTGF5b3V0UGFyYW1zIGdlbmVyYXRlTGF5b3V0UGFyYW1zX2ltcGwoTGF5b3V0UGFyYW1zIGxwKSB7Ci0gICAgICAgIGlmIChscCBpbnN0YW5jZW9mIE1hcmdpbkxheW91dFBhcmFtcykgewotICAgICAgICAgICAgcmV0dXJuIGxwOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiBuZXcgTWFyZ2luTGF5b3V0UGFyYW1zKGxwKTsKLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgdm9pZCBvbk1lYXN1cmVfaW1wbChpbnQgd2lkdGhNZWFzdXJlU3BlYywgaW50IGhlaWdodE1lYXN1cmVTcGVjKSB7Ci0gICAgICAgIGludCBjb3VudCA9IG1JbnN0YW5jZS5nZXRDaGlsZENvdW50KCk7Ci0KLSAgICAgICAgZmluYWwgYm9vbGVhbiBtZWFzdXJlTWF0Y2hQYXJlbnRDaGlsZHJlbiA9Ci0gICAgICAgICAgICAgICAgVmlldy5NZWFzdXJlU3BlYy5nZXRNb2RlKHdpZHRoTWVhc3VyZVNwZWMpICE9IFZpZXcuTWVhc3VyZVNwZWMuRVhBQ1RMWSB8fAotICAgICAgICAgICAgICAgICAgICAgICAgVmlldy5NZWFzdXJlU3BlYy5nZXRNb2RlKGhlaWdodE1lYXN1cmVTcGVjKSAhPSBWaWV3Lk1lYXN1cmVTcGVjLkVYQUNUTFk7Ci0gICAgICAgIG1NYXRjaFBhcmVudENoaWxkcmVuLmNsZWFyKCk7Ci0KLSAgICAgICAgaW50IG1heEhlaWdodCA9IDA7Ci0gICAgICAgIGludCBtYXhXaWR0aCA9IDA7Ci0gICAgICAgIGludCBjaGlsZFN0YXRlID0gMDsKLQotICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGNvdW50OyBpKyspIHsKLSAgICAgICAgICAgIGZpbmFsIFZpZXcgY2hpbGQgPSBtSW5zdGFuY2UuZ2V0Q2hpbGRBdChpKTsKLSAgICAgICAgICAgIGlmIChjaGlsZC5nZXRWaXNpYmlsaXR5KCkgIT0gVmlldy5HT05FKSB7Ci0gICAgICAgICAgICAgICAgbVByaXZhdGVQcm92aWRlci5tZWFzdXJlQ2hpbGRXaXRoTWFyZ2luc19pbXBsKAotICAgICAgICAgICAgICAgICAgICAgICAgY2hpbGQsIHdpZHRoTWVhc3VyZVNwZWMsIDAsIGhlaWdodE1lYXN1cmVTcGVjLCAwKTsKLSAgICAgICAgICAgICAgICBmaW5hbCBNYXJnaW5MYXlvdXRQYXJhbXMgbHAgPSAoTWFyZ2luTGF5b3V0UGFyYW1zKSBjaGlsZC5nZXRMYXlvdXRQYXJhbXMoKTsKLSAgICAgICAgICAgICAgICBtYXhXaWR0aCA9IE1hdGgubWF4KG1heFdpZHRoLAotICAgICAgICAgICAgICAgICAgICAgICAgY2hpbGQuZ2V0TWVhc3VyZWRXaWR0aCgpICsgbHAubGVmdE1hcmdpbiArIGxwLnJpZ2h0TWFyZ2luKTsKLSAgICAgICAgICAgICAgICBtYXhIZWlnaHQgPSBNYXRoLm1heChtYXhIZWlnaHQsCi0gICAgICAgICAgICAgICAgICAgICAgICBjaGlsZC5nZXRNZWFzdXJlZEhlaWdodCgpICsgbHAudG9wTWFyZ2luICsgbHAuYm90dG9tTWFyZ2luKTsKLSAgICAgICAgICAgICAgICBjaGlsZFN0YXRlID0gY2hpbGRTdGF0ZSB8IGNoaWxkLmdldE1lYXN1cmVkU3RhdGUoKTsKLSAgICAgICAgICAgICAgICBpZiAobWVhc3VyZU1hdGNoUGFyZW50Q2hpbGRyZW4pIHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKGxwLndpZHRoID09IExheW91dFBhcmFtcy5NQVRDSF9QQVJFTlQgfHwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBscC5oZWlnaHQgPT0gTGF5b3V0UGFyYW1zLk1BVENIX1BBUkVOVCkgewotICAgICAgICAgICAgICAgICAgICAgICAgbU1hdGNoUGFyZW50Q2hpbGRyZW4uYWRkKGNoaWxkKTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIC8vIEFjY291bnQgZm9yIHBhZGRpbmcgdG9vCi0gICAgICAgIG1heFdpZHRoICs9IGdldFBhZGRpbmdMZWZ0V2l0aEZvcmVncm91bmQoKSArIGdldFBhZGRpbmdSaWdodFdpdGhGb3JlZ3JvdW5kKCk7Ci0gICAgICAgIG1heEhlaWdodCArPSBnZXRQYWRkaW5nVG9wV2l0aEZvcmVncm91bmQoKSArIGdldFBhZGRpbmdCb3R0b21XaXRoRm9yZWdyb3VuZCgpOwotCi0gICAgICAgIC8vIENoZWNrIGFnYWluc3Qgb3VyIG1pbmltdW0gaGVpZ2h0IGFuZCB3aWR0aAotICAgICAgICBtYXhIZWlnaHQgPSBNYXRoLm1heChtYXhIZWlnaHQsIG1Qcml2YXRlUHJvdmlkZXIuZ2V0U3VnZ2VzdGVkTWluaW11bUhlaWdodF9pbXBsKCkpOwotICAgICAgICBtYXhXaWR0aCA9IE1hdGgubWF4KG1heFdpZHRoLCBtUHJpdmF0ZVByb3ZpZGVyLmdldFN1Z2dlc3RlZE1pbmltdW1XaWR0aF9pbXBsKCkpOwotCi0gICAgICAgIC8vIENoZWNrIGFnYWluc3Qgb3VyIGZvcmVncm91bmQncyBtaW5pbXVtIGhlaWdodCBhbmQgd2lkdGgKLSAgICAgICAgZmluYWwgRHJhd2FibGUgZHJhd2FibGUgPSBtSW5zdGFuY2UuZ2V0Rm9yZWdyb3VuZCgpOwotICAgICAgICBpZiAoZHJhd2FibGUgIT0gbnVsbCkgewotICAgICAgICAgICAgbWF4SGVpZ2h0ID0gTWF0aC5tYXgobWF4SGVpZ2h0LCBkcmF3YWJsZS5nZXRNaW5pbXVtSGVpZ2h0KCkpOwotICAgICAgICAgICAgbWF4V2lkdGggPSBNYXRoLm1heChtYXhXaWR0aCwgZHJhd2FibGUuZ2V0TWluaW11bVdpZHRoKCkpOwotICAgICAgICB9Ci0KLSAgICAgICAgbVByaXZhdGVQcm92aWRlci5zZXRNZWFzdXJlZERpbWVuc2lvbl9pbXBsKAotICAgICAgICAgICAgICAgIG1JbnN0YW5jZS5yZXNvbHZlU2l6ZUFuZFN0YXRlKG1heFdpZHRoLCB3aWR0aE1lYXN1cmVTcGVjLCBjaGlsZFN0YXRlKSwKLSAgICAgICAgICAgICAgICBtSW5zdGFuY2UucmVzb2x2ZVNpemVBbmRTdGF0ZShtYXhIZWlnaHQsIGhlaWdodE1lYXN1cmVTcGVjLAotICAgICAgICAgICAgICAgICAgICAgICAgY2hpbGRTdGF0ZSA8PCBWaWV3Lk1FQVNVUkVEX0hFSUdIVF9TVEFURV9TSElGVCkpOwotCi0gICAgICAgIGNvdW50ID0gbU1hdGNoUGFyZW50Q2hpbGRyZW4uc2l6ZSgpOwotICAgICAgICBpZiAoY291bnQgPiAxKSB7Ci0gICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGNvdW50OyBpKyspIHsKLSAgICAgICAgICAgICAgICBmaW5hbCBWaWV3IGNoaWxkID0gbU1hdGNoUGFyZW50Q2hpbGRyZW4uZ2V0KGkpOwotICAgICAgICAgICAgICAgIGZpbmFsIE1hcmdpbkxheW91dFBhcmFtcyBscCA9IChNYXJnaW5MYXlvdXRQYXJhbXMpIGNoaWxkLmdldExheW91dFBhcmFtcygpOwotCi0gICAgICAgICAgICAgICAgZmluYWwgaW50IGNoaWxkV2lkdGhNZWFzdXJlU3BlYzsKLSAgICAgICAgICAgICAgICBpZiAobHAud2lkdGggPT0gTGF5b3V0UGFyYW1zLk1BVENIX1BBUkVOVCkgewotICAgICAgICAgICAgICAgICAgICBmaW5hbCBpbnQgd2lkdGggPSBNYXRoLm1heCgwLCBtSW5zdGFuY2UuZ2V0TWVhc3VyZWRXaWR0aCgpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgLSBnZXRQYWRkaW5nTGVmdFdpdGhGb3JlZ3JvdW5kKCkgLSBnZXRQYWRkaW5nUmlnaHRXaXRoRm9yZWdyb3VuZCgpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgLSBscC5sZWZ0TWFyZ2luIC0gbHAucmlnaHRNYXJnaW4pOwotICAgICAgICAgICAgICAgICAgICBjaGlsZFdpZHRoTWVhc3VyZVNwZWMgPSBWaWV3Lk1lYXN1cmVTcGVjLm1ha2VNZWFzdXJlU3BlYygKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aWR0aCwgVmlldy5NZWFzdXJlU3BlYy5FWEFDVExZKTsKLSAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICBjaGlsZFdpZHRoTWVhc3VyZVNwZWMgPSBtSW5zdGFuY2UuZ2V0Q2hpbGRNZWFzdXJlU3BlYyh3aWR0aE1lYXN1cmVTcGVjLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdldFBhZGRpbmdMZWZ0V2l0aEZvcmVncm91bmQoKSArIGdldFBhZGRpbmdSaWdodFdpdGhGb3JlZ3JvdW5kKCkgKwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbHAubGVmdE1hcmdpbiArIGxwLnJpZ2h0TWFyZ2luLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxwLndpZHRoKTsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICBmaW5hbCBpbnQgY2hpbGRIZWlnaHRNZWFzdXJlU3BlYzsKLSAgICAgICAgICAgICAgICBpZiAobHAuaGVpZ2h0ID09IExheW91dFBhcmFtcy5NQVRDSF9QQVJFTlQpIHsKLSAgICAgICAgICAgICAgICAgICAgZmluYWwgaW50IGhlaWdodCA9IE1hdGgubWF4KDAsIG1JbnN0YW5jZS5nZXRNZWFzdXJlZEhlaWdodCgpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgLSBnZXRQYWRkaW5nVG9wV2l0aEZvcmVncm91bmQoKSAtIGdldFBhZGRpbmdCb3R0b21XaXRoRm9yZWdyb3VuZCgpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgLSBscC50b3BNYXJnaW4gLSBscC5ib3R0b21NYXJnaW4pOwotICAgICAgICAgICAgICAgICAgICBjaGlsZEhlaWdodE1lYXN1cmVTcGVjID0gVmlldy5NZWFzdXJlU3BlYy5tYWtlTWVhc3VyZVNwZWMoCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVpZ2h0LCBWaWV3Lk1lYXN1cmVTcGVjLkVYQUNUTFkpOwotICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgIGNoaWxkSGVpZ2h0TWVhc3VyZVNwZWMgPSBtSW5zdGFuY2UuZ2V0Q2hpbGRNZWFzdXJlU3BlYyhoZWlnaHRNZWFzdXJlU3BlYywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZXRQYWRkaW5nVG9wV2l0aEZvcmVncm91bmQoKSArIGdldFBhZGRpbmdCb3R0b21XaXRoRm9yZWdyb3VuZCgpICsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxwLnRvcE1hcmdpbiArIGxwLmJvdHRvbU1hcmdpbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBscC5oZWlnaHQpOwotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIGNoaWxkLm1lYXN1cmUoY2hpbGRXaWR0aE1lYXN1cmVTcGVjLCBjaGlsZEhlaWdodE1lYXN1cmVTcGVjKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyB2b2lkIG9uTGF5b3V0X2ltcGwoYm9vbGVhbiBjaGFuZ2VkLCBpbnQgbGVmdCwgaW50IHRvcCwgaW50IHJpZ2h0LCBpbnQgYm90dG9tKSB7Ci0gICAgICAgIGZpbmFsIGludCBjb3VudCA9IG1JbnN0YW5jZS5nZXRDaGlsZENvdW50KCk7Ci0KLSAgICAgICAgZmluYWwgaW50IHBhcmVudExlZnQgPSBnZXRQYWRkaW5nTGVmdFdpdGhGb3JlZ3JvdW5kKCk7Ci0gICAgICAgIGZpbmFsIGludCBwYXJlbnRSaWdodCA9IHJpZ2h0IC0gbGVmdCAtIGdldFBhZGRpbmdSaWdodFdpdGhGb3JlZ3JvdW5kKCk7Ci0KLSAgICAgICAgZmluYWwgaW50IHBhcmVudFRvcCA9IGdldFBhZGRpbmdUb3BXaXRoRm9yZWdyb3VuZCgpOwotICAgICAgICBmaW5hbCBpbnQgcGFyZW50Qm90dG9tID0gYm90dG9tIC0gdG9wIC0gZ2V0UGFkZGluZ0JvdHRvbVdpdGhGb3JlZ3JvdW5kKCk7Ci0KLSAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBjb3VudDsgaSsrKSB7Ci0gICAgICAgICAgICBmaW5hbCBWaWV3IGNoaWxkID0gbUluc3RhbmNlLmdldENoaWxkQXQoaSk7Ci0gICAgICAgICAgICBpZiAoY2hpbGQuZ2V0VmlzaWJpbGl0eSgpICE9IFZpZXcuR09ORSkgewotICAgICAgICAgICAgICAgIGZpbmFsIE1hcmdpbkxheW91dFBhcmFtcyBscCA9IChNYXJnaW5MYXlvdXRQYXJhbXMpIGNoaWxkLmdldExheW91dFBhcmFtcygpOwotCi0gICAgICAgICAgICAgICAgZmluYWwgaW50IHdpZHRoID0gY2hpbGQuZ2V0TWVhc3VyZWRXaWR0aCgpOwotICAgICAgICAgICAgICAgIGZpbmFsIGludCBoZWlnaHQgPSBjaGlsZC5nZXRNZWFzdXJlZEhlaWdodCgpOwotCi0gICAgICAgICAgICAgICAgaW50IGNoaWxkTGVmdDsKLSAgICAgICAgICAgICAgICBpbnQgY2hpbGRUb3A7Ci0KLSAgICAgICAgICAgICAgICBjaGlsZExlZnQgPSBwYXJlbnRMZWZ0ICsgKHBhcmVudFJpZ2h0IC0gcGFyZW50TGVmdCAtIHdpZHRoKSAvIDIgKwotICAgICAgICAgICAgICAgICAgICAgICAgbHAubGVmdE1hcmdpbiAtIGxwLnJpZ2h0TWFyZ2luOwotCi0gICAgICAgICAgICAgICAgY2hpbGRUb3AgPSBwYXJlbnRUb3AgKyAocGFyZW50Qm90dG9tIC0gcGFyZW50VG9wIC0gaGVpZ2h0KSAvIDIgKwotICAgICAgICAgICAgICAgICAgICAgICAgbHAudG9wTWFyZ2luIC0gbHAuYm90dG9tTWFyZ2luOwotCi0gICAgICAgICAgICAgICAgY2hpbGQubGF5b3V0KGNoaWxkTGVmdCwgY2hpbGRUb3AsIGNoaWxkTGVmdCArIHdpZHRoLCBjaGlsZFRvcCArIGhlaWdodCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgYm9vbGVhbiBzaG91bGREZWxheUNoaWxkUHJlc3NlZFN0YXRlX2ltcGwoKSB7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICBwcml2YXRlIGludCBnZXRQYWRkaW5nTGVmdFdpdGhGb3JlZ3JvdW5kKCkgewotICAgICAgICByZXR1cm4gbUluc3RhbmNlLmlzRm9yZWdyb3VuZEluc2lkZVBhZGRpbmcoKSA/IE1hdGgubWF4KG1JbnN0YW5jZS5nZXRQYWRkaW5nTGVmdCgpLCAwKSA6Ci0gICAgICAgICAgICAgICAgbUluc3RhbmNlLmdldFBhZGRpbmdMZWZ0KCkgKyAwOwotICAgIH0KLQotICAgIHByaXZhdGUgaW50IGdldFBhZGRpbmdSaWdodFdpdGhGb3JlZ3JvdW5kKCkgewotICAgICAgICByZXR1cm4gbUluc3RhbmNlLmlzRm9yZWdyb3VuZEluc2lkZVBhZGRpbmcoKSA/IE1hdGgubWF4KG1JbnN0YW5jZS5nZXRQYWRkaW5nUmlnaHQoKSwgMCkgOgotICAgICAgICAgICAgICAgIG1JbnN0YW5jZS5nZXRQYWRkaW5nUmlnaHQoKSArIDA7Ci0gICAgfQotCi0gICAgcHJpdmF0ZSBpbnQgZ2V0UGFkZGluZ1RvcFdpdGhGb3JlZ3JvdW5kKCkgewotICAgICAgICByZXR1cm4gbUluc3RhbmNlLmlzRm9yZWdyb3VuZEluc2lkZVBhZGRpbmcoKSA/IE1hdGgubWF4KG1JbnN0YW5jZS5nZXRQYWRkaW5nVG9wKCksIDApIDoKLSAgICAgICAgICAgICAgICBtSW5zdGFuY2UuZ2V0UGFkZGluZ1RvcCgpICsgMDsKLSAgICB9Ci0KLSAgICBwcml2YXRlIGludCBnZXRQYWRkaW5nQm90dG9tV2l0aEZvcmVncm91bmQoKSB7Ci0gICAgICAgIHJldHVybiBtSW5zdGFuY2UuaXNGb3JlZ3JvdW5kSW5zaWRlUGFkZGluZygpID8gTWF0aC5tYXgobUluc3RhbmNlLmdldFBhZGRpbmdCb3R0b20oKSwgMCkgOgotICAgICAgICAgICAgICAgIG1JbnN0YW5jZS5nZXRQYWRkaW5nQm90dG9tKCkgKyAwOwotICAgIH0KLX0KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL01lZGlhQ29tcG9uZW50cy9zcmMvY29tL2FuZHJvaWQvd2lkZ2V0L01lZGlhQ29udHJvbFZpZXcySW1wbC5qYXZhIGIvcGFja2FnZXMvTWVkaWFDb21wb25lbnRzL3NyYy9jb20vYW5kcm9pZC93aWRnZXQvTWVkaWFDb250cm9sVmlldzJJbXBsLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDNhZmYxNTAuLjAwMDAwMDAKLS0tIGEvcGFja2FnZXMvTWVkaWFDb21wb25lbnRzL3NyYy9jb20vYW5kcm9pZC93aWRnZXQvTWVkaWFDb250cm9sVmlldzJJbXBsLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxNzIyICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgMjAxNyBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0Ci0gKgotICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7Ci0gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCi0gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLSAqCi0gKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotICoKLSAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKLSAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCi0gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KLSAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKLSAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgotICovCi0KLXBhY2thZ2UgY29tLmFuZHJvaWQud2lkZ2V0OwotCi1pbXBvcnQgYW5kcm9pZC5jb250ZW50LkNvbnRleHQ7Ci1pbXBvcnQgYW5kcm9pZC5jb250ZW50LnJlcy5SZXNvdXJjZXM7Ci1pbXBvcnQgYW5kcm9pZC5ncmFwaGljcy5Qb2ludDsKLWltcG9ydCBhbmRyb2lkLm1lZGlhLk1lZGlhTWV0YWRhdGE7Ci1pbXBvcnQgYW5kcm9pZC5tZWRpYS5zZXNzaW9uLk1lZGlhQ29udHJvbGxlcjsKLWltcG9ydCBhbmRyb2lkLm1lZGlhLnNlc3Npb24uUGxheWJhY2tTdGF0ZTsKLWltcG9ydCBhbmRyb2lkLm1lZGlhLlNlc3Npb25Ub2tlbjI7Ci1pbXBvcnQgYW5kcm9pZC5tZWRpYS51cGRhdGUuTWVkaWFDb250cm9sVmlldzJQcm92aWRlcjsKLWltcG9ydCBhbmRyb2lkLm1lZGlhLnVwZGF0ZS5WaWV3R3JvdXBQcm92aWRlcjsKLWltcG9ydCBhbmRyb2lkLm9zLkJ1bmRsZTsKLWltcG9ydCBhbmRyb2lkLnN1cHBvcnQuYW5ub3RhdGlvbi5OdWxsYWJsZTsKLWltcG9ydCBhbmRyb2lkLnV0aWwuQXR0cmlidXRlU2V0OwotaW1wb3J0IGFuZHJvaWQudXRpbC5Mb2c7Ci1pbXBvcnQgYW5kcm9pZC52aWV3LkdyYXZpdHk7Ci1pbXBvcnQgYW5kcm9pZC52aWV3Lk1vdGlvbkV2ZW50OwotaW1wb3J0IGFuZHJvaWQudmlldy5WaWV3OwotaW1wb3J0IGFuZHJvaWQudmlldy5WaWV3R3JvdXA7Ci1pbXBvcnQgYW5kcm9pZC52aWV3LldpbmRvd01hbmFnZXI7Ci1pbXBvcnQgYW5kcm9pZC53aWRnZXQuQWRhcHRlclZpZXc7Ci1pbXBvcnQgYW5kcm9pZC53aWRnZXQuQmFzZUFkYXB0ZXI7Ci1pbXBvcnQgYW5kcm9pZC53aWRnZXQuQnV0dG9uOwotaW1wb3J0IGFuZHJvaWQud2lkZ2V0LkltYWdlQnV0dG9uOwotaW1wb3J0IGFuZHJvaWQud2lkZ2V0LkltYWdlVmlldzsKLWltcG9ydCBhbmRyb2lkLndpZGdldC5MaW5lYXJMYXlvdXQ7Ci1pbXBvcnQgYW5kcm9pZC53aWRnZXQuTGlzdFZpZXc7Ci1pbXBvcnQgYW5kcm9pZC53aWRnZXQuTWVkaWFDb250cm9sVmlldzI7Ci1pbXBvcnQgYW5kcm9pZC53aWRnZXQuUHJvZ3Jlc3NCYXI7Ci1pbXBvcnQgYW5kcm9pZC53aWRnZXQuUG9wdXBXaW5kb3c7Ci1pbXBvcnQgYW5kcm9pZC53aWRnZXQuUmVsYXRpdmVMYXlvdXQ7Ci1pbXBvcnQgYW5kcm9pZC53aWRnZXQuU2Vla0JhcjsKLWltcG9ydCBhbmRyb2lkLndpZGdldC5TZWVrQmFyLk9uU2Vla0JhckNoYW5nZUxpc3RlbmVyOwotaW1wb3J0IGFuZHJvaWQud2lkZ2V0LlRleHRWaWV3OwotCi1pbXBvcnQgY29tLmFuZHJvaWQubWVkaWEudXBkYXRlLkFwaUhlbHBlcjsKLWltcG9ydCBjb20uYW5kcm9pZC5tZWRpYS51cGRhdGUuUjsKLWltcG9ydCBjb20uYW5kcm9pZC5zdXBwb3J0Lm1lZGlhcm91dGVyLmFwcC5NZWRpYVJvdXRlQnV0dG9uOwotaW1wb3J0IGNvbS5hbmRyb2lkLnN1cHBvcnQubWVkaWFyb3V0ZXIubWVkaWEuTWVkaWFSb3V0ZXI7Ci1pbXBvcnQgY29tLmFuZHJvaWQuc3VwcG9ydC5tZWRpYXJvdXRlci5tZWRpYS5NZWRpYVJvdXRlU2VsZWN0b3I7Ci0KLWltcG9ydCBqYXZhLnV0aWwuQXJyYXlzOwotaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLkZvcm1hdHRlcjsKLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLWltcG9ydCBqYXZhLnV0aWwuTG9jYWxlOwotCi1wdWJsaWMgY2xhc3MgTWVkaWFDb250cm9sVmlldzJJbXBsIGV4dGVuZHMgQmFzZUxheW91dCBpbXBsZW1lbnRzIE1lZGlhQ29udHJvbFZpZXcyUHJvdmlkZXIgewotICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBUQUcgPSAiTWVkaWFDb250cm9sVmlldzIiOwotCi0gICAgcHJpdmF0ZSBmaW5hbCBNZWRpYUNvbnRyb2xWaWV3MiBtSW5zdGFuY2U7Ci0KLSAgICBzdGF0aWMgZmluYWwgU3RyaW5nIEFSR1VNRU5UX0tFWV9GVUxMU0NSRUVOID0gImZ1bGxTY3JlZW4iOwotCi0gICAgLy8gVE9ETzogTW92ZSB0aGVzZSBjb25zdGFudHMgdG8gcHVibGljIGFwaSB0byBzdXBwb3J0IGN1c3RvbSB2aWRlbyB2aWV3LgotICAgIC8vIFRPRE86IENvbWJpbmUgdGhlc2UgY29uc3RhbnRzIGludG8gb25lIHJlZ2FyZGluZyBUcmFja0luZm8uCi0gICAgc3RhdGljIGZpbmFsIFN0cmluZyBLRVlfVklERU9fVFJBQ0tfQ09VTlQgPSAiVmlkZW9UcmFja0NvdW50IjsKLSAgICBzdGF0aWMgZmluYWwgU3RyaW5nIEtFWV9BVURJT19UUkFDS19DT1VOVCA9ICJBdWRpb1RyYWNrQ291bnQiOwotICAgIHN0YXRpYyBmaW5hbCBTdHJpbmcgS0VZX1NVQlRJVExFX1RSQUNLX0NPVU5UID0gIlN1YnRpdGxlVHJhY2tDb3VudCI7Ci0gICAgc3RhdGljIGZpbmFsIFN0cmluZyBLRVlfUExBWUJBQ0tfU1BFRUQgPSAiUGxheWJhY2tTcGVlZCI7Ci0gICAgc3RhdGljIGZpbmFsIFN0cmluZyBLRVlfU0VMRUNURURfQVVESU9fSU5ERVggPSAiU2VsZWN0ZWRBdWRpb0luZGV4IjsKLSAgICBzdGF0aWMgZmluYWwgU3RyaW5nIEtFWV9TRUxFQ1RFRF9TVUJUSVRMRV9JTkRFWCA9ICJTZWxlY3RlZFN1YnRpdGxlSW5kZXgiOwotICAgIHN0YXRpYyBmaW5hbCBTdHJpbmcgRVZFTlRfVVBEQVRFX1RSQUNLX1NUQVRVUyA9ICJVcGRhdGVUcmFja1N0YXR1cyI7Ci0KLSAgICAvLyBUT0RPOiBSZW1vdmUgdGhpcyBvbmNlIGludGVncmF0aW5nIHdpdGggTWVkaWFTZXNzaW9uMiAmIE1lZGlhTWV0YWRhdGEyCi0gICAgc3RhdGljIGZpbmFsIFN0cmluZyBLRVlfU1RBVEVfSVNfQURWRVJUSVNFTUVOVCA9ICJNZWRpYVR5cGVBZHZlcnRpc2VtZW50IjsKLSAgICBzdGF0aWMgZmluYWwgU3RyaW5nIEVWRU5UX1VQREFURV9NRURJQV9UWVBFX1NUQVRVUyA9ICJVcGRhdGVNZWRpYVR5cGVTdGF0dXMiOwotCi0gICAgLy8gU3RyaW5nIGZvciBzZW5kaW5nIGNvbW1hbmQgdG8gc2hvdyBzdWJ0aXRsZSB0byBNZWRpYVNlc3Npb24uCi0gICAgc3RhdGljIGZpbmFsIFN0cmluZyBDT01NQU5EX1NIT1dfU1VCVElUTEUgPSAic2hvd1N1YnRpdGxlIjsKLSAgICAvLyBTdHJpbmcgZm9yIHNlbmRpbmcgY29tbWFuZCB0byBoaWRlIHN1YnRpdGxlIHRvIE1lZGlhU2Vzc2lvbi4KLSAgICBzdGF0aWMgZmluYWwgU3RyaW5nIENPTU1BTkRfSElERV9TVUJUSVRMRSA9ICJoaWRlU3VidGl0bGUiOwotICAgIC8vIFRPRE86IHJlbW92ZSBvbmNlIHRoZSBpbXBsZW1lbnRhdGlvbiBpcyByZXZpc2VkCi0gICAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgQ09NTUFORF9TRVRfRlVMTFNDUkVFTiA9ICJzZXRGdWxsc2NyZWVuIjsKLSAgICAvLyBTdHJpbmcgZm9yIHNlbmRpbmcgY29tbWFuZCB0byBzZWxlY3QgYXVkaW8gdHJhY2sgdG8gTWVkaWFTZXNzaW9uLgotICAgIHN0YXRpYyBmaW5hbCBTdHJpbmcgQ09NTUFORF9TRUxFQ1RfQVVESU9fVFJBQ0sgPSAiU2VsZWN0VHJhY2siOwotICAgIC8vIFN0cmluZyBmb3Igc2VuZGluZyBjb21tYW5kIHRvIHNldCBwbGF5YmFjayBzcGVlZCB0byBNZWRpYVNlc3Npb24uCi0gICAgc3RhdGljIGZpbmFsIFN0cmluZyBDT01NQU5EX1NFVF9QTEFZQkFDS19TUEVFRCA9ICJTZXRQbGF5YmFja1NwZWVkIjsKLSAgICAvLyBTdHJpbmcgZm9yIHNlbmRpbmcgY29tbWFuZCB0byBtdXRlIGF1ZGlvIHRvIE1lZGlhU2Vzc2lvbi4KLSAgICBzdGF0aWMgZmluYWwgU3RyaW5nIENPTU1BTkRfTVVURT0gIk11dGUiOwotICAgIC8vIFN0cmluZyBmb3Igc2VuZGluZyBjb21tYW5kIHRvIHVubXV0ZSBhdWRpbyB0byBNZWRpYVNlc3Npb24uCi0gICAgc3RhdGljIGZpbmFsIFN0cmluZyBDT01NQU5EX1VOTVVURSA9ICJVbm11dGUiOwotCi0gICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IFNFVFRJTkdTX01PREVfQVVESU9fVFJBQ0sgPSAwOwotICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGludCBTRVRUSU5HU19NT0RFX1BMQVlCQUNLX1NQRUVEID0gMTsKLSAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgU0VUVElOR1NfTU9ERV9IRUxQID0gMjsKLSAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgU0VUVElOR1NfTU9ERV9TVUJUSVRMRV9UUkFDSyA9IDM7Ci0gICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IFNFVFRJTkdTX01PREVfVklERU9fUVVBTElUWSA9IDQ7Ci0gICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IFNFVFRJTkdTX01PREVfTUFJTiA9IDU7Ci0gICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IFBMQVlCQUNLX1NQRUVEXzF4X0lOREVYID0gMzsKLQotICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGludCBNRURJQV9UWVBFX0RFRkFVTFQgPSAwOwotICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGludCBNRURJQV9UWVBFX01VU0lDID0gMTsKLSAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgTUVESUFfVFlQRV9BRFZFUlRJU0VNRU5UID0gMjsKLQotICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGludCBTSVpFX1RZUEVfRU1CRURERUQgPSAwOwotICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGludCBTSVpFX1RZUEVfRlVMTCA9IDE7Ci0gICAgLy8gVE9ETzogYWRkIHN1cHBvcnQgZm9yIE1pbmltYWwgc2l6ZSB0eXBlLgotICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGludCBTSVpFX1RZUEVfTUlOSU1BTCA9IDI7Ci0KLSAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgTUFYX1BST0dSRVNTID0gMTAwMDsKLSAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgREVGQVVMVF9QUk9HUkVTU19VUERBVEVfVElNRV9NUyA9IDEwMDA7Ci0gICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IFJFV0lORF9USU1FX01TID0gMTAwMDA7Ci0gICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IEZPUldBUkRfVElNRV9NUyA9IDMwMDAwOwotICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGludCBBRF9TS0lQX1dBSVRfVElNRV9NUyA9IDUwMDA7Ci0gICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IFJFU09VUkNFX05PTl9FWElTVEVOVCA9IC0xOwotICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBSRVNPVVJDRV9FTVBUWSA9ICIiOwotCi0gICAgcHJpdmF0ZSBSZXNvdXJjZXMgbVJlc291cmNlczsKLSAgICBwcml2YXRlIE1lZGlhQ29udHJvbGxlciBtQ29udHJvbGxlcjsKLSAgICBwcml2YXRlIE1lZGlhQ29udHJvbGxlci5UcmFuc3BvcnRDb250cm9scyBtQ29udHJvbHM7Ci0gICAgcHJpdmF0ZSBQbGF5YmFja1N0YXRlIG1QbGF5YmFja1N0YXRlOwotICAgIHByaXZhdGUgTWVkaWFNZXRhZGF0YSBtTWV0YWRhdGE7Ci0gICAgcHJpdmF0ZSBpbnQgbUR1cmF0aW9uOwotICAgIHByaXZhdGUgaW50IG1QcmV2U3RhdGU7Ci0gICAgcHJpdmF0ZSBpbnQgbVByZXZXaWR0aDsKLSAgICBwcml2YXRlIGludCBtUHJldkhlaWdodDsKLSAgICBwcml2YXRlIGludCBtT3JpZ2luYWxMZWZ0QmFyV2lkdGg7Ci0gICAgcHJpdmF0ZSBpbnQgbVZpZGVvVHJhY2tDb3VudDsKLSAgICBwcml2YXRlIGludCBtQXVkaW9UcmFja0NvdW50OwotICAgIHByaXZhdGUgaW50IG1TdWJ0aXRsZVRyYWNrQ291bnQ7Ci0gICAgcHJpdmF0ZSBpbnQgbVNldHRpbmdzTW9kZTsKLSAgICBwcml2YXRlIGludCBtU2VsZWN0ZWRTdWJ0aXRsZVRyYWNrSW5kZXg7Ci0gICAgcHJpdmF0ZSBpbnQgbVNlbGVjdGVkQXVkaW9UcmFja0luZGV4OwotICAgIHByaXZhdGUgaW50IG1TZWxlY3RlZFZpZGVvUXVhbGl0eUluZGV4OwotICAgIHByaXZhdGUgaW50IG1TZWxlY3RlZFNwZWVkSW5kZXg7Ci0gICAgcHJpdmF0ZSBpbnQgbUVtYmVkZGVkU2V0dGluZ3NJdGVtV2lkdGg7Ci0gICAgcHJpdmF0ZSBpbnQgbUZ1bGxTZXR0aW5nc0l0ZW1XaWR0aDsKLSAgICBwcml2YXRlIGludCBtRW1iZWRkZWRTZXR0aW5nc0l0ZW1IZWlnaHQ7Ci0gICAgcHJpdmF0ZSBpbnQgbUZ1bGxTZXR0aW5nc0l0ZW1IZWlnaHQ7Ci0gICAgcHJpdmF0ZSBpbnQgbVNldHRpbmdzV2luZG93TWFyZ2luOwotICAgIHByaXZhdGUgaW50IG1NZWRpYVR5cGU7Ci0gICAgcHJpdmF0ZSBpbnQgbVNpemVUeXBlOwotICAgIHByaXZhdGUgbG9uZyBtUGxheWJhY2tBY3Rpb25zOwotICAgIHByaXZhdGUgYm9vbGVhbiBtRHJhZ2dpbmc7Ci0gICAgcHJpdmF0ZSBib29sZWFuIG1Jc0Z1bGxTY3JlZW47Ci0gICAgcHJpdmF0ZSBib29sZWFuIG1PdmVyZmxvd0V4cGFuZGVkOwotICAgIHByaXZhdGUgYm9vbGVhbiBtSXNTdG9wcGVkOwotICAgIHByaXZhdGUgYm9vbGVhbiBtU3VidGl0bGVJc0VuYWJsZWQ7Ci0gICAgcHJpdmF0ZSBib29sZWFuIG1TZWVrQXZhaWxhYmxlOwotICAgIHByaXZhdGUgYm9vbGVhbiBtSXNBZHZlcnRpc2VtZW50OwotICAgIHByaXZhdGUgYm9vbGVhbiBtSXNNdXRlOwotICAgIHByaXZhdGUgYm9vbGVhbiBtTmVlZFVYVXBkYXRlOwotCi0gICAgLy8gUmVsYXRpbmcgdG8gVGl0bGUgQmFyIFZpZXcKLSAgICBwcml2YXRlIFZpZXdHcm91cCBtUm9vdDsKLSAgICBwcml2YXRlIFZpZXcgbVRpdGxlQmFyOwotICAgIHByaXZhdGUgVGV4dFZpZXcgbVRpdGxlVmlldzsKLSAgICBwcml2YXRlIFZpZXcgbUFkRXh0ZXJuYWxMaW5rOwotICAgIHByaXZhdGUgSW1hZ2VCdXR0b24gbUJhY2tCdXR0b247Ci0gICAgcHJpdmF0ZSBNZWRpYVJvdXRlQnV0dG9uIG1Sb3V0ZUJ1dHRvbjsKLSAgICBwcml2YXRlIE1lZGlhUm91dGVTZWxlY3RvciBtUm91dGVTZWxlY3RvcjsKLQotICAgIC8vIFJlbGF0aW5nIHRvIENlbnRlciBWaWV3Ci0gICAgcHJpdmF0ZSBWaWV3R3JvdXAgbUNlbnRlclZpZXc7Ci0gICAgcHJpdmF0ZSBWaWV3IG1UcmFuc3BvcnRDb250cm9sczsKLSAgICBwcml2YXRlIEltYWdlQnV0dG9uIG1QbGF5UGF1c2VCdXR0b247Ci0gICAgcHJpdmF0ZSBJbWFnZUJ1dHRvbiBtRmZ3ZEJ1dHRvbjsKLSAgICBwcml2YXRlIEltYWdlQnV0dG9uIG1SZXdCdXR0b247Ci0gICAgcHJpdmF0ZSBJbWFnZUJ1dHRvbiBtTmV4dEJ1dHRvbjsKLSAgICBwcml2YXRlIEltYWdlQnV0dG9uIG1QcmV2QnV0dG9uOwotCi0gICAgLy8gUmVsYXRpbmcgdG8gTWluaW1hbCBFeHRyYSBWaWV3Ci0gICAgcHJpdmF0ZSBMaW5lYXJMYXlvdXQgbU1pbmltYWxFeHRyYVZpZXc7Ci0KLSAgICAvLyBSZWxhdGluZyB0byBQcm9ncmVzcyBCYXIgVmlldwotICAgIHByaXZhdGUgUHJvZ3Jlc3NCYXIgbVByb2dyZXNzOwotICAgIHByaXZhdGUgVmlldyBtUHJvZ3Jlc3NCdWZmZXI7Ci0KLSAgICAvLyBSZWxhdGluZyB0byBCb3R0b20gQmFyIFZpZXcKLSAgICBwcml2YXRlIFZpZXdHcm91cCBtQm90dG9tQmFyOwotCi0gICAgLy8gUmVsYXRpbmcgdG8gQm90dG9tIEJhciBMZWZ0IFZpZXcKLSAgICBwcml2YXRlIFZpZXdHcm91cCBtQm90dG9tQmFyTGVmdFZpZXc7Ci0gICAgcHJpdmF0ZSBWaWV3R3JvdXAgbVRpbWVWaWV3OwotICAgIHByaXZhdGUgVGV4dFZpZXcgbUVuZFRpbWU7Ci0gICAgcHJpdmF0ZSBUZXh0VmlldyBtQ3VycmVudFRpbWU7Ci0gICAgcHJpdmF0ZSBUZXh0VmlldyBtQWRTa2lwVmlldzsKLSAgICBwcml2YXRlIFN0cmluZ0J1aWxkZXIgbUZvcm1hdEJ1aWxkZXI7Ci0gICAgcHJpdmF0ZSBGb3JtYXR0ZXIgbUZvcm1hdHRlcjsKLQotICAgIC8vIFJlbGF0aW5nIHRvIEJvdHRvbSBCYXIgUmlnaHQgVmlldwotICAgIHByaXZhdGUgVmlld0dyb3VwIG1Cb3R0b21CYXJSaWdodFZpZXc7Ci0gICAgcHJpdmF0ZSBWaWV3R3JvdXAgbUJhc2ljQ29udHJvbHM7Ci0gICAgcHJpdmF0ZSBWaWV3R3JvdXAgbUV4dHJhQ29udHJvbHM7Ci0gICAgcHJpdmF0ZSBWaWV3R3JvdXAgbUN1c3RvbUJ1dHRvbnM7Ci0gICAgcHJpdmF0ZSBJbWFnZUJ1dHRvbiBtU3VidGl0bGVCdXR0b247Ci0gICAgcHJpdmF0ZSBJbWFnZUJ1dHRvbiBtRnVsbFNjcmVlbkJ1dHRvbjsKLSAgICBwcml2YXRlIEltYWdlQnV0dG9uIG1PdmVyZmxvd0J1dHRvblJpZ2h0OwotICAgIHByaXZhdGUgSW1hZ2VCdXR0b24gbU92ZXJmbG93QnV0dG9uTGVmdDsKLSAgICBwcml2YXRlIEltYWdlQnV0dG9uIG1NdXRlQnV0dG9uOwotICAgIHByaXZhdGUgSW1hZ2VCdXR0b24gbVZpZGVvUXVhbGl0eUJ1dHRvbjsKLSAgICBwcml2YXRlIEltYWdlQnV0dG9uIG1TZXR0aW5nc0J1dHRvbjsKLSAgICBwcml2YXRlIFRleHRWaWV3IG1BZFJlbWFpbmluZ1ZpZXc7Ci0KLSAgICAvLyBSZWxhdGluZyB0byBTZXR0aW5ncyBMaXN0IFZpZXcKLSAgICBwcml2YXRlIExpc3RWaWV3IG1TZXR0aW5nc0xpc3RWaWV3OwotICAgIHByaXZhdGUgUG9wdXBXaW5kb3cgbVNldHRpbmdzV2luZG93OwotICAgIHByaXZhdGUgU2V0dGluZ3NBZGFwdGVyIG1TZXR0aW5nc0FkYXB0ZXI7Ci0gICAgcHJpdmF0ZSBTdWJTZXR0aW5nc0FkYXB0ZXIgbVN1YlNldHRpbmdzQWRhcHRlcjsKLSAgICBwcml2YXRlIExpc3Q8U3RyaW5nPiBtU2V0dGluZ3NNYWluVGV4dHNMaXN0OwotICAgIHByaXZhdGUgTGlzdDxTdHJpbmc+IG1TZXR0aW5nc1N1YlRleHRzTGlzdDsKLSAgICBwcml2YXRlIExpc3Q8SW50ZWdlcj4gbVNldHRpbmdzSWNvbklkc0xpc3Q7Ci0gICAgcHJpdmF0ZSBMaXN0PFN0cmluZz4gbVN1YnRpdGxlRGVzY3JpcHRpb25zTGlzdDsKLSAgICBwcml2YXRlIExpc3Q8U3RyaW5nPiBtQXVkaW9UcmFja0xpc3Q7Ci0gICAgcHJpdmF0ZSBMaXN0PFN0cmluZz4gbVZpZGVvUXVhbGl0eUxpc3Q7Ci0gICAgcHJpdmF0ZSBMaXN0PFN0cmluZz4gbVBsYXliYWNrU3BlZWRUZXh0TGlzdDsKLSAgICBwcml2YXRlIExpc3Q8RmxvYXQ+IG1QbGF5YmFja1NwZWVkTGlzdDsKLQotICAgIHB1YmxpYyBNZWRpYUNvbnRyb2xWaWV3MkltcGwoTWVkaWFDb250cm9sVmlldzIgaW5zdGFuY2UsCi0gICAgICAgICAgICBWaWV3R3JvdXBQcm92aWRlciBzdXBlclByb3ZpZGVyLCBWaWV3R3JvdXBQcm92aWRlciBwcml2YXRlUHJvdmlkZXIpIHsKLSAgICAgICAgc3VwZXIoaW5zdGFuY2UsIHN1cGVyUHJvdmlkZXIsIHByaXZhdGVQcm92aWRlcik7Ci0gICAgICAgIG1JbnN0YW5jZSA9IGluc3RhbmNlOwotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyB2b2lkIGluaXRpYWxpemUoQE51bGxhYmxlIEF0dHJpYnV0ZVNldCBhdHRycywgaW50IGRlZlN0eWxlQXR0ciwgaW50IGRlZlN0eWxlUmVzKSB7Ci0gICAgICAgIG1SZXNvdXJjZXMgPSBBcGlIZWxwZXIuZ2V0TGliUmVzb3VyY2VzKG1JbnN0YW5jZS5nZXRDb250ZXh0KCkpOwotICAgICAgICAvLyBJbmZsYXRlIE1lZGlhQ29udHJvbFZpZXcyIGZyb20gWE1MCi0gICAgICAgIG1Sb290ID0gbWFrZUNvbnRyb2xsZXJWaWV3KCk7Ci0gICAgICAgIG1JbnN0YW5jZS5hZGRWaWV3KG1Sb290KTsKLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgdm9pZCBzZXRNZWRpYVNlc3Npb25Ub2tlbl9pbXBsKFNlc3Npb25Ub2tlbjIgdG9rZW4pIHsKLSAgICAgICAgLy8gVE9ETzogaW1wbGVtZW50IHRoaXMKLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgdm9pZCBzZXRPbkZ1bGxTY3JlZW5MaXN0ZW5lcl9pbXBsKE1lZGlhQ29udHJvbFZpZXcyLk9uRnVsbFNjcmVlbkxpc3RlbmVyIGwpIHsKLSAgICAgICAgLy8gVE9ETzogaW1wbGVtZW50IHRoaXMKLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgdm9pZCBzZXRDb250cm9sbGVyX2ltcGwoTWVkaWFDb250cm9sbGVyIGNvbnRyb2xsZXIpIHsKLSAgICAgICAgbUNvbnRyb2xsZXIgPSBjb250cm9sbGVyOwotICAgICAgICBpZiAoY29udHJvbGxlciAhPSBudWxsKSB7Ci0gICAgICAgICAgICBtQ29udHJvbHMgPSBjb250cm9sbGVyLmdldFRyYW5zcG9ydENvbnRyb2xzKCk7Ci0gICAgICAgICAgICAvLyBTZXQgbU1ldGFkYXRhIGFuZCBtUGxheWJhY2tTdGF0ZSB0byBleGlzdGluZyBNZWRpYVNlc3Npb24gdmFyaWFibGVzIHNpbmNlIHRoZXkgbWF5Ci0gICAgICAgICAgICAvLyBiZSBjYWxsZWQgYmVmb3JlIHRoZSBjYWxsYmFjayBpcyBjYWxsZWQKLSAgICAgICAgICAgIG1QbGF5YmFja1N0YXRlID0gbUNvbnRyb2xsZXIuZ2V0UGxheWJhY2tTdGF0ZSgpOwotICAgICAgICAgICAgbU1ldGFkYXRhID0gbUNvbnRyb2xsZXIuZ2V0TWV0YWRhdGEoKTsKLSAgICAgICAgICAgIHVwZGF0ZUR1cmF0aW9uKCk7Ci0gICAgICAgICAgICB1cGRhdGVUaXRsZSgpOwotCi0gICAgICAgICAgICBtQ29udHJvbGxlci5yZWdpc3RlckNhbGxiYWNrKG5ldyBNZWRpYUNvbnRyb2xsZXJDYWxsYmFjaygpKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyB2b2lkIHNldEJ1dHRvblZpc2liaWxpdHlfaW1wbChpbnQgYnV0dG9uLCBpbnQgdmlzaWJpbGl0eSkgewotICAgICAgICAvLyBUT0RPOiBhZGQgbWVtYmVyIHZhcmlhYmxlcyBmb3IgRmFzdC1Gb3J3YXJkL1BydmlvdXMvUmV3aW5kIGJ1dHRvbnMgdG8gc2F2ZSB2aXNpYmlsaXR5IGluCi0gICAgICAgIC8vIG9yZGVyIHRvIHByZXZlbnQgYmVpbmcgb3ZlcnJpZGVuIGluc2lkZSB1cGRhdGVMYXlvdXQoKS4KLSAgICAgICAgc3dpdGNoIChidXR0b24pIHsKLSAgICAgICAgICAgIGNhc2UgTWVkaWFDb250cm9sVmlldzIuQlVUVE9OX1BMQVlfUEFVU0U6Ci0gICAgICAgICAgICAgICAgaWYgKG1QbGF5UGF1c2VCdXR0b24gIT0gbnVsbCAmJiBjYW5QYXVzZSgpKSB7Ci0gICAgICAgICAgICAgICAgICAgIG1QbGF5UGF1c2VCdXR0b24uc2V0VmlzaWJpbGl0eSh2aXNpYmlsaXR5KTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlIE1lZGlhQ29udHJvbFZpZXcyLkJVVFRPTl9GRldEOgotICAgICAgICAgICAgICAgIGlmIChtRmZ3ZEJ1dHRvbiAhPSBudWxsICYmIGNhblNlZWtGb3J3YXJkKCkpIHsKLSAgICAgICAgICAgICAgICAgICAgbUZmd2RCdXR0b24uc2V0VmlzaWJpbGl0eSh2aXNpYmlsaXR5KTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlIE1lZGlhQ29udHJvbFZpZXcyLkJVVFRPTl9SRVc6Ci0gICAgICAgICAgICAgICAgaWYgKG1SZXdCdXR0b24gIT0gbnVsbCAmJiBjYW5TZWVrQmFja3dhcmQoKSkgewotICAgICAgICAgICAgICAgICAgICBtUmV3QnV0dG9uLnNldFZpc2liaWxpdHkodmlzaWJpbGl0eSk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgY2FzZSBNZWRpYUNvbnRyb2xWaWV3Mi5CVVRUT05fTkVYVDoKLSAgICAgICAgICAgICAgICBpZiAobU5leHRCdXR0b24gIT0gbnVsbCkgewotICAgICAgICAgICAgICAgICAgICBtTmV4dEJ1dHRvbi5zZXRWaXNpYmlsaXR5KHZpc2liaWxpdHkpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGNhc2UgTWVkaWFDb250cm9sVmlldzIuQlVUVE9OX1BSRVY6Ci0gICAgICAgICAgICAgICAgaWYgKG1QcmV2QnV0dG9uICE9IG51bGwpIHsKLSAgICAgICAgICAgICAgICAgICAgbVByZXZCdXR0b24uc2V0VmlzaWJpbGl0eSh2aXNpYmlsaXR5KTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlIE1lZGlhQ29udHJvbFZpZXcyLkJVVFRPTl9TVUJUSVRMRToKLSAgICAgICAgICAgICAgICBpZiAobVN1YnRpdGxlQnV0dG9uICE9IG51bGwgJiYgbVN1YnRpdGxlVHJhY2tDb3VudCA+IDApIHsKLSAgICAgICAgICAgICAgICAgICAgbVN1YnRpdGxlQnV0dG9uLnNldFZpc2liaWxpdHkodmlzaWJpbGl0eSk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgY2FzZSBNZWRpYUNvbnRyb2xWaWV3Mi5CVVRUT05fRlVMTF9TQ1JFRU46Ci0gICAgICAgICAgICAgICAgaWYgKG1GdWxsU2NyZWVuQnV0dG9uICE9IG51bGwpIHsKLSAgICAgICAgICAgICAgICAgICAgbUZ1bGxTY3JlZW5CdXR0b24uc2V0VmlzaWJpbGl0eSh2aXNpYmlsaXR5KTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlIE1lZGlhQ29udHJvbFZpZXcyLkJVVFRPTl9PVkVSRkxPVzoKLSAgICAgICAgICAgICAgICBpZiAobU92ZXJmbG93QnV0dG9uUmlnaHQgIT0gbnVsbCkgewotICAgICAgICAgICAgICAgICAgICBtT3ZlcmZsb3dCdXR0b25SaWdodC5zZXRWaXNpYmlsaXR5KHZpc2liaWxpdHkpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGNhc2UgTWVkaWFDb250cm9sVmlldzIuQlVUVE9OX01VVEU6Ci0gICAgICAgICAgICAgICAgaWYgKG1NdXRlQnV0dG9uICE9IG51bGwpIHsKLSAgICAgICAgICAgICAgICAgICAgbU11dGVCdXR0b24uc2V0VmlzaWJpbGl0eSh2aXNpYmlsaXR5KTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlIE1lZGlhQ29udHJvbFZpZXcyLkJVVFRPTl9TRVRUSU5HUzoKLSAgICAgICAgICAgICAgICBpZiAobVNldHRpbmdzQnV0dG9uICE9IG51bGwpIHsKLSAgICAgICAgICAgICAgICAgICAgbVNldHRpbmdzQnV0dG9uLnNldFZpc2liaWxpdHkodmlzaWJpbGl0eSk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyB2b2lkIHJlcXVlc3RQbGF5QnV0dG9uRm9jdXNfaW1wbCgpIHsKLSAgICAgICAgaWYgKG1QbGF5UGF1c2VCdXR0b24gIT0gbnVsbCkgewotICAgICAgICAgICAgbVBsYXlQYXVzZUJ1dHRvbi5yZXF1ZXN0Rm9jdXMoKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyBDaGFyU2VxdWVuY2UgZ2V0QWNjZXNzaWJpbGl0eUNsYXNzTmFtZV9pbXBsKCkgewotICAgICAgICByZXR1cm4gTWVkaWFDb250cm9sVmlldzIuY2xhc3MuZ2V0TmFtZSgpOwotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyBib29sZWFuIG9uVG91Y2hFdmVudF9pbXBsKE1vdGlvbkV2ZW50IGV2KSB7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICAvLyBUT0RPOiBTaG91bGQgdGhpcyBmdW5jdGlvbiBiZSByZW1vdmVkPwotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyBib29sZWFuIG9uVHJhY2tiYWxsRXZlbnRfaW1wbChNb3Rpb25FdmVudCBldikgewotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIHZvaWQgb25NZWFzdXJlX2ltcGwoaW50IHdpZHRoTWVhc3VyZVNwZWMsIGludCBoZWlnaHRNZWFzdXJlU3BlYykgewotICAgICAgICBzdXBlci5vbk1lYXN1cmVfaW1wbCh3aWR0aE1lYXN1cmVTcGVjLCBoZWlnaHRNZWFzdXJlU3BlYyk7Ci0KLSAgICAgICAgLy8gVXBkYXRlIGxheW91dCB3aGVuIHRoaXMgdmlldydzIHdpZHRoIGNoYW5nZXMgaW4gb3JkZXIgdG8gYXZvaWQgYW55IFVJIG92ZXJsYXAgYmV0d2VlbgotICAgICAgICAvLyB0cmFuc3BvcnQgY29udHJvbHMuCi0gICAgICAgIGlmIChtUHJldldpZHRoICE9IG1JbnN0YW5jZS5nZXRNZWFzdXJlZFdpZHRoKCkKLSAgICAgICAgICAgICAgICB8fCBtUHJldkhlaWdodCAhPSBtSW5zdGFuY2UuZ2V0TWVhc3VyZWRIZWlnaHQoKSB8fCBtTmVlZFVYVXBkYXRlKSB7Ci0gICAgICAgICAgICAvLyBEaXNtaXNzIFNldHRpbmdzV2luZG93IGlmIGl0IGlzIHNob3dpbmcuCi0gICAgICAgICAgICBtU2V0dGluZ3NXaW5kb3cuZGlzbWlzcygpOwotCi0gICAgICAgICAgICAvLyBUaGVzZSB2aWV3cyBtYXkgbm90IGhhdmUgYmVlbiBpbml0aWFsaXplZCB5ZXQuCi0gICAgICAgICAgICBpZiAobVRyYW5zcG9ydENvbnRyb2xzLmdldFdpZHRoKCkgPT0gMCB8fCBtVGltZVZpZXcuZ2V0V2lkdGgoKSA9PSAwKSB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBpbnQgY3VycldpZHRoID0gbUluc3RhbmNlLmdldE1lYXN1cmVkV2lkdGgoKTsKLSAgICAgICAgICAgIGludCBjdXJySGVpZ2h0ID0gbUluc3RhbmNlLmdldE1lYXN1cmVkSGVpZ2h0KCk7Ci0gICAgICAgICAgICBXaW5kb3dNYW5hZ2VyIG1hbmFnZXIgPSAoV2luZG93TWFuYWdlcikgbUluc3RhbmNlLmdldENvbnRleHQoKS5nZXRBcHBsaWNhdGlvbkNvbnRleHQoKQotICAgICAgICAgICAgICAgICAgICAuZ2V0U3lzdGVtU2VydmljZShDb250ZXh0LldJTkRPV19TRVJWSUNFKTsKLSAgICAgICAgICAgIFBvaW50IHNjcmVlblNpemUgPSBuZXcgUG9pbnQoKTsKLSAgICAgICAgICAgIG1hbmFnZXIuZ2V0RGVmYXVsdERpc3BsYXkoKS5nZXRTaXplKHNjcmVlblNpemUpOwotICAgICAgICAgICAgaW50IHNjcmVlbldpZHRoID0gc2NyZWVuU2l6ZS54OwotICAgICAgICAgICAgaW50IHNjcmVlbkhlaWdodCA9IHNjcmVlblNpemUueTsKLSAgICAgICAgICAgIGludCBmdWxsSWNvblNpemUgPSBtUmVzb3VyY2VzLmdldERpbWVuc2lvblBpeGVsU2l6ZShSLmRpbWVuLm1jdjJfZnVsbF9pY29uX3NpemUpOwotICAgICAgICAgICAgaW50IGVtYmVkZGVkSWNvblNpemUgPSBtUmVzb3VyY2VzLmdldERpbWVuc2lvblBpeGVsU2l6ZSgKLSAgICAgICAgICAgICAgICAgICAgUi5kaW1lbi5tY3YyX2VtYmVkZGVkX2ljb25fc2l6ZSk7Ci0gICAgICAgICAgICBpbnQgbWFyZ2luU2l6ZSA9IG1SZXNvdXJjZXMuZ2V0RGltZW5zaW9uUGl4ZWxTaXplKFIuZGltZW4ubWN2Ml9pY29uX21hcmdpbik7Ci0KLSAgICAgICAgICAgIC8vIFRPRE86IGFkZCBzdXBwb3J0IGZvciBBZHZlcnRpc2VtZW50IE1vZGUuCi0gICAgICAgICAgICBpZiAobU1lZGlhVHlwZSA9PSBNRURJQV9UWVBFX0RFRkFVTFQpIHsKLSAgICAgICAgICAgICAgICAvLyBNYXggbnVtYmVyIG9mIGljb25zIGluc2lkZSBCb3R0b21CYXJSaWdodFZpZXcgZm9yIE11c2ljIG1vZGUgaXMgNC4KLSAgICAgICAgICAgICAgICBpbnQgbWF4SWNvbkNvdW50ID0gNDsKLSAgICAgICAgICAgICAgICB1cGRhdGVMYXlvdXQobWF4SWNvbkNvdW50LCBmdWxsSWNvblNpemUsIGVtYmVkZGVkSWNvblNpemUsIG1hcmdpblNpemUsIGN1cnJXaWR0aCwKLSAgICAgICAgICAgICAgICAgICAgICAgIGN1cnJIZWlnaHQsIHNjcmVlbldpZHRoLCBzY3JlZW5IZWlnaHQpOwotICAgICAgICAgICAgfSBlbHNlIGlmIChtTWVkaWFUeXBlID09IE1FRElBX1RZUEVfTVVTSUMpIHsKLSAgICAgICAgICAgICAgICBpZiAobU5lZWRVWFVwZGF0ZSkgewotICAgICAgICAgICAgICAgICAgICAvLyBPbmUtdGltZSBvcGVyYXRpb24gZm9yIE11c2ljIG1lZGlhIHR5cGUKLSAgICAgICAgICAgICAgICAgICAgbUJhc2ljQ29udHJvbHMucmVtb3ZlVmlldyhtTXV0ZUJ1dHRvbik7Ci0gICAgICAgICAgICAgICAgICAgIG1FeHRyYUNvbnRyb2xzLmFkZFZpZXcobU11dGVCdXR0b24sIDApOwotICAgICAgICAgICAgICAgICAgICBtVmlkZW9RdWFsaXR5QnV0dG9uLnNldFZpc2liaWxpdHkoVmlldy5HT05FKTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKG1GZndkQnV0dG9uICE9IG51bGwpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIG1GZndkQnV0dG9uLnNldFZpc2liaWxpdHkoVmlldy5HT05FKTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICBpZiAobVJld0J1dHRvbiAhPSBudWxsKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBtUmV3QnV0dG9uLnNldFZpc2liaWxpdHkoVmlldy5HT05FKTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBtTmVlZFVYVXBkYXRlID0gZmFsc2U7Ci0KLSAgICAgICAgICAgICAgICAvLyBNYXggbnVtYmVyIG9mIGljb25zIGluc2lkZSBCb3R0b21CYXJSaWdodFZpZXcgZm9yIE11c2ljIG1vZGUgaXMgMy4KLSAgICAgICAgICAgICAgICBpbnQgbWF4SWNvbkNvdW50ID0gMzsKLSAgICAgICAgICAgICAgICB1cGRhdGVMYXlvdXQobWF4SWNvbkNvdW50LCBmdWxsSWNvblNpemUsIGVtYmVkZGVkSWNvblNpemUsIG1hcmdpblNpemUsIGN1cnJXaWR0aCwKLSAgICAgICAgICAgICAgICAgICAgICAgIGN1cnJIZWlnaHQsIHNjcmVlbldpZHRoLCBzY3JlZW5IZWlnaHQpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgbVByZXZXaWR0aCA9IGN1cnJXaWR0aDsKLSAgICAgICAgICAgIG1QcmV2SGVpZ2h0ID0gY3VyckhlaWdodDsKLSAgICAgICAgfQotICAgICAgICAvLyBUT0RPOiBtb3ZlIHRoaXMgdG8gYSBkaWZmZXJlbnQgbG9jYXRpb24uCi0gICAgICAgIC8vIFVwZGF0ZSB0aXRsZSBiYXIgcGFyYW1ldGVycyBpbiBvcmRlciB0byBhdm9pZCBvdmVybGFwIGJldHdlZW4gdGl0bGUgdmlldyBhbmQgdGhlIHJpZ2h0Ci0gICAgICAgIC8vIHNpZGUgb2YgdGhlIHRpdGxlIGJhci4KLSAgICAgICAgdXBkYXRlVGl0bGVCYXJMYXlvdXQoKTsKLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgdm9pZCBzZXRFbmFibGVkX2ltcGwoYm9vbGVhbiBlbmFibGVkKSB7Ci0gICAgICAgIHN1cGVyLnNldEVuYWJsZWRfaW1wbChlbmFibGVkKTsKLQotICAgICAgICAvLyBUT0RPOiBNZXJnZSB0aGUgYmVsb3cgY29kZSB3aXRoIGRpc2FibGVVbnN1cHBvcnRlZEJ1dHRvbnMoKS4KLSAgICAgICAgaWYgKG1QbGF5UGF1c2VCdXR0b24gIT0gbnVsbCkgewotICAgICAgICAgICAgbVBsYXlQYXVzZUJ1dHRvbi5zZXRFbmFibGVkKGVuYWJsZWQpOwotICAgICAgICB9Ci0gICAgICAgIGlmIChtRmZ3ZEJ1dHRvbiAhPSBudWxsKSB7Ci0gICAgICAgICAgICBtRmZ3ZEJ1dHRvbi5zZXRFbmFibGVkKGVuYWJsZWQpOwotICAgICAgICB9Ci0gICAgICAgIGlmIChtUmV3QnV0dG9uICE9IG51bGwpIHsKLSAgICAgICAgICAgIG1SZXdCdXR0b24uc2V0RW5hYmxlZChlbmFibGVkKTsKLSAgICAgICAgfQotICAgICAgICBpZiAobU5leHRCdXR0b24gIT0gbnVsbCkgewotICAgICAgICAgICAgbU5leHRCdXR0b24uc2V0RW5hYmxlZChlbmFibGVkKTsKLSAgICAgICAgfQotICAgICAgICBpZiAobVByZXZCdXR0b24gIT0gbnVsbCkgewotICAgICAgICAgICAgbVByZXZCdXR0b24uc2V0RW5hYmxlZChlbmFibGVkKTsKLSAgICAgICAgfQotICAgICAgICBpZiAobVByb2dyZXNzICE9IG51bGwpIHsKLSAgICAgICAgICAgIG1Qcm9ncmVzcy5zZXRFbmFibGVkKGVuYWJsZWQpOwotICAgICAgICB9Ci0gICAgICAgIGRpc2FibGVVbnN1cHBvcnRlZEJ1dHRvbnMoKTsKLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgdm9pZCBvblZpc2liaWxpdHlBZ2dyZWdhdGVkX2ltcGwoYm9vbGVhbiBpc1Zpc2libGUpIHsKLSAgICAgICAgc3VwZXIub25WaXNpYmlsaXR5QWdncmVnYXRlZF9pbXBsKGlzVmlzaWJsZSk7Ci0KLSAgICAgICAgaWYgKGlzVmlzaWJsZSkgewotICAgICAgICAgICAgZGlzYWJsZVVuc3VwcG9ydGVkQnV0dG9ucygpOwotICAgICAgICAgICAgbUluc3RhbmNlLnJlbW92ZUNhbGxiYWNrcyhtVXBkYXRlUHJvZ3Jlc3MpOwotICAgICAgICAgICAgbUluc3RhbmNlLnBvc3QobVVwZGF0ZVByb2dyZXNzKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIG1JbnN0YW5jZS5yZW1vdmVDYWxsYmFja3MobVVwZGF0ZVByb2dyZXNzKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIHB1YmxpYyB2b2lkIHNldFJvdXRlU2VsZWN0b3IoTWVkaWFSb3V0ZVNlbGVjdG9yIHNlbGVjdG9yKSB7Ci0gICAgICAgIG1Sb3V0ZVNlbGVjdG9yID0gc2VsZWN0b3I7Ci0gICAgICAgIGlmIChtUm91dGVTZWxlY3RvciAhPSBudWxsICYmICFtUm91dGVTZWxlY3Rvci5pc0VtcHR5KCkpIHsKLSAgICAgICAgICAgIG1Sb3V0ZUJ1dHRvbi5zZXRSb3V0ZVNlbGVjdG9yKHNlbGVjdG9yLCBNZWRpYVJvdXRlci5DQUxMQkFDS19GTEFHX1BFUkZPUk1fQUNUSVZFX1NDQU4pOwotICAgICAgICAgICAgbVJvdXRlQnV0dG9uLnNldFZpc2liaWxpdHkoVmlldy5WSVNJQkxFKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIG1Sb3V0ZUJ1dHRvbi5zZXRSb3V0ZVNlbGVjdG9yKE1lZGlhUm91dGVTZWxlY3Rvci5FTVBUWSk7Ci0gICAgICAgICAgICBtUm91dGVCdXR0b24uc2V0VmlzaWJpbGl0eShWaWV3LkdPTkUpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCi0gICAgLy8gUHJvdGVjdGVkIG9yIHByaXZhdGUgbWV0aG9kcwotICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLwotCi0gICAgcHJpdmF0ZSBib29sZWFuIGlzUGxheWluZygpIHsKLSAgICAgICAgaWYgKG1QbGF5YmFja1N0YXRlICE9IG51bGwpIHsKLSAgICAgICAgICAgIHJldHVybiBtUGxheWJhY2tTdGF0ZS5nZXRTdGF0ZSgpID09IFBsYXliYWNrU3RhdGUuU1RBVEVfUExBWUlORzsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgcHJpdmF0ZSBpbnQgZ2V0Q3VycmVudFBvc2l0aW9uKCkgewotICAgICAgICBtUGxheWJhY2tTdGF0ZSA9IG1Db250cm9sbGVyLmdldFBsYXliYWNrU3RhdGUoKTsKLSAgICAgICAgaWYgKG1QbGF5YmFja1N0YXRlICE9IG51bGwpIHsKLSAgICAgICAgICAgIHJldHVybiAoaW50KSBtUGxheWJhY2tTdGF0ZS5nZXRQb3NpdGlvbigpOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiAwOwotICAgIH0KLQotICAgIHByaXZhdGUgaW50IGdldEJ1ZmZlclBlcmNlbnRhZ2UoKSB7Ci0gICAgICAgIGlmIChtRHVyYXRpb24gPT0gMCkgewotICAgICAgICAgICAgcmV0dXJuIDA7Ci0gICAgICAgIH0KLSAgICAgICAgbVBsYXliYWNrU3RhdGUgPSBtQ29udHJvbGxlci5nZXRQbGF5YmFja1N0YXRlKCk7Ci0gICAgICAgIGlmIChtUGxheWJhY2tTdGF0ZSAhPSBudWxsKSB7Ci0gICAgICAgICAgICBsb25nIGJ1ZmZlcmVkUG9zID0gbVBsYXliYWNrU3RhdGUuZ2V0QnVmZmVyZWRQb3NpdGlvbigpOwotICAgICAgICAgICAgcmV0dXJuIChidWZmZXJlZFBvcyA9PSAtMSkgPyAtMSA6IChpbnQpIChidWZmZXJlZFBvcyAqIDEwMCAvIG1EdXJhdGlvbik7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgfQotCi0gICAgcHJpdmF0ZSBib29sZWFuIGNhblBhdXNlKCkgewotICAgICAgICBpZiAobVBsYXliYWNrU3RhdGUgIT0gbnVsbCkgewotICAgICAgICAgICAgcmV0dXJuIChtUGxheWJhY2tTdGF0ZS5nZXRBY3Rpb25zKCkgJiBQbGF5YmFja1N0YXRlLkFDVElPTl9QQVVTRSkgIT0gMDsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0KLSAgICBwcml2YXRlIGJvb2xlYW4gY2FuU2Vla0JhY2t3YXJkKCkgewotICAgICAgICBpZiAobVBsYXliYWNrU3RhdGUgIT0gbnVsbCkgewotICAgICAgICAgICAgcmV0dXJuIChtUGxheWJhY2tTdGF0ZS5nZXRBY3Rpb25zKCkgJiBQbGF5YmFja1N0YXRlLkFDVElPTl9SRVdJTkQpICE9IDA7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotCi0gICAgcHJpdmF0ZSBib29sZWFuIGNhblNlZWtGb3J3YXJkKCkgewotICAgICAgICBpZiAobVBsYXliYWNrU3RhdGUgIT0gbnVsbCkgewotICAgICAgICAgICAgcmV0dXJuIChtUGxheWJhY2tTdGF0ZS5nZXRBY3Rpb25zKCkgJiBQbGF5YmFja1N0YXRlLkFDVElPTl9GQVNUX0ZPUldBUkQpICE9IDA7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogQ3JlYXRlIHRoZSB2aWV3IHRoYXQgaG9sZHMgdGhlIHdpZGdldHMgdGhhdCBjb250cm9sIHBsYXliYWNrLgotICAgICAqIERlcml2ZWQgY2xhc3NlcyBjYW4gb3ZlcnJpZGUgdGhpcyB0byBjcmVhdGUgdGhlaXIgb3duLgotICAgICAqCi0gICAgICogQHJldHVybiBUaGUgY29udHJvbGxlciB2aWV3LgotICAgICAqIEBoaWRlIFRoaXMgZG9lc24ndCB3b3JrIGFzIGFkdmVydGlzZWQKLSAgICAgKi8KLSAgICBwcm90ZWN0ZWQgVmlld0dyb3VwIG1ha2VDb250cm9sbGVyVmlldygpIHsKLSAgICAgICAgVmlld0dyb3VwIHJvb3QgPSAoVmlld0dyb3VwKSBBcGlIZWxwZXIuaW5mbGF0ZUxpYkxheW91dChtSW5zdGFuY2UuZ2V0Q29udGV4dCgpLAotICAgICAgICAgICAgICAgIFIubGF5b3V0Lm1lZGlhX2NvbnRyb2xsZXIpOwotICAgICAgICBpbml0Q29udHJvbGxlclZpZXcocm9vdCk7Ci0gICAgICAgIHJldHVybiByb290OwotICAgIH0KLQotICAgIHByaXZhdGUgdm9pZCBpbml0Q29udHJvbGxlclZpZXcoVmlld0dyb3VwIHYpIHsKLSAgICAgICAgLy8gUmVsYXRpbmcgdG8gVGl0bGUgQmFyIFZpZXcKLSAgICAgICAgbVRpdGxlQmFyID0gdi5maW5kVmlld0J5SWQoUi5pZC50aXRsZV9iYXIpOwotICAgICAgICBtVGl0bGVWaWV3ID0gdi5maW5kVmlld0J5SWQoUi5pZC50aXRsZV90ZXh0KTsKLSAgICAgICAgbUFkRXh0ZXJuYWxMaW5rID0gdi5maW5kVmlld0J5SWQoUi5pZC5hZF9leHRlcm5hbF9saW5rKTsKLSAgICAgICAgbUJhY2tCdXR0b24gPSB2LmZpbmRWaWV3QnlJZChSLmlkLmJhY2spOwotICAgICAgICBpZiAobUJhY2tCdXR0b24gIT0gbnVsbCkgewotICAgICAgICAgICAgbUJhY2tCdXR0b24uc2V0T25DbGlja0xpc3RlbmVyKG1CYWNrTGlzdGVuZXIpOwotICAgICAgICAgICAgbUJhY2tCdXR0b24uc2V0VmlzaWJpbGl0eShWaWV3LkdPTkUpOwotICAgICAgICB9Ci0gICAgICAgIG1Sb3V0ZUJ1dHRvbiA9IHYuZmluZFZpZXdCeUlkKFIuaWQuY2FzdCk7Ci0KLSAgICAgICAgLy8gUmVsYXRpbmcgdG8gQ2VudGVyIFZpZXcKLSAgICAgICAgbUNlbnRlclZpZXcgPSB2LmZpbmRWaWV3QnlJZChSLmlkLmNlbnRlcl92aWV3KTsKLSAgICAgICAgbVRyYW5zcG9ydENvbnRyb2xzID0gaW5mbGF0ZVRyYW5zcG9ydENvbnRyb2xzKFIubGF5b3V0LmVtYmVkZGVkX3RyYW5zcG9ydF9jb250cm9scyk7Ci0gICAgICAgIG1DZW50ZXJWaWV3LmFkZFZpZXcobVRyYW5zcG9ydENvbnRyb2xzKTsKLQotICAgICAgICAvLyBSZWxhdGluZyB0byBNaW5pbWFsIEV4dHJhIFZpZXcKLSAgICAgICAgbU1pbmltYWxFeHRyYVZpZXcgPSAoTGluZWFyTGF5b3V0KSB2LmZpbmRWaWV3QnlJZChSLmlkLm1pbmltYWxfZXh0cmFfdmlldyk7Ci0gICAgICAgIExpbmVhckxheW91dC5MYXlvdXRQYXJhbXMgcGFyYW1zID0KLSAgICAgICAgICAgICAgICAoTGluZWFyTGF5b3V0LkxheW91dFBhcmFtcykgbU1pbmltYWxFeHRyYVZpZXcuZ2V0TGF5b3V0UGFyYW1zKCk7Ci0gICAgICAgIGludCBpY29uU2l6ZSA9IG1SZXNvdXJjZXMuZ2V0RGltZW5zaW9uUGl4ZWxTaXplKFIuZGltZW4ubWN2Ml9lbWJlZGRlZF9pY29uX3NpemUpOwotICAgICAgICBpbnQgbWFyZ2luU2l6ZSA9IG1SZXNvdXJjZXMuZ2V0RGltZW5zaW9uUGl4ZWxTaXplKFIuZGltZW4ubWN2Ml9pY29uX21hcmdpbik7Ci0gICAgICAgIHBhcmFtcy5zZXRNYXJnaW5zKDAsIChpY29uU2l6ZSArIG1hcmdpblNpemUgKiAyKSAqICgtMSksIDAsIDApOwotICAgICAgICBtTWluaW1hbEV4dHJhVmlldy5zZXRMYXlvdXRQYXJhbXMocGFyYW1zKTsKLSAgICAgICAgbU1pbmltYWxFeHRyYVZpZXcuc2V0VmlzaWJpbGl0eShWaWV3LkdPTkUpOwotCi0gICAgICAgIC8vIFJlbGF0aW5nIHRvIFByb2dyZXNzIEJhciBWaWV3Ci0gICAgICAgIG1Qcm9ncmVzcyA9IHYuZmluZFZpZXdCeUlkKFIuaWQucHJvZ3Jlc3MpOwotICAgICAgICBpZiAobVByb2dyZXNzICE9IG51bGwpIHsKLSAgICAgICAgICAgIGlmIChtUHJvZ3Jlc3MgaW5zdGFuY2VvZiBTZWVrQmFyKSB7Ci0gICAgICAgICAgICAgICAgU2Vla0JhciBzZWVrZXIgPSAoU2Vla0JhcikgbVByb2dyZXNzOwotICAgICAgICAgICAgICAgIHNlZWtlci5zZXRPblNlZWtCYXJDaGFuZ2VMaXN0ZW5lcihtU2Vla0xpc3RlbmVyKTsKLSAgICAgICAgICAgICAgICBzZWVrZXIuc2V0UHJvZ3Jlc3NEcmF3YWJsZShtUmVzb3VyY2VzLmdldERyYXdhYmxlKFIuZHJhd2FibGUuY3VzdG9tX3Byb2dyZXNzKSk7Ci0gICAgICAgICAgICAgICAgc2Vla2VyLnNldFRodW1iKG1SZXNvdXJjZXMuZ2V0RHJhd2FibGUoUi5kcmF3YWJsZS5jdXN0b21fcHJvZ3Jlc3NfdGh1bWIpKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIG1Qcm9ncmVzcy5zZXRNYXgoTUFYX1BST0dSRVNTKTsKLSAgICAgICAgfQotICAgICAgICBtUHJvZ3Jlc3NCdWZmZXIgPSB2LmZpbmRWaWV3QnlJZChSLmlkLnByb2dyZXNzX2J1ZmZlcik7Ci0KLSAgICAgICAgLy8gUmVsYXRpbmcgdG8gQm90dG9tIEJhciBWaWV3Ci0gICAgICAgIG1Cb3R0b21CYXIgPSB2LmZpbmRWaWV3QnlJZChSLmlkLmJvdHRvbV9iYXIpOwotCi0gICAgICAgIC8vIFJlbGF0aW5nIHRvIEJvdHRvbSBCYXIgTGVmdCBWaWV3Ci0gICAgICAgIG1Cb3R0b21CYXJMZWZ0VmlldyA9IHYuZmluZFZpZXdCeUlkKFIuaWQuYm90dG9tX2Jhcl9sZWZ0KTsKLSAgICAgICAgbVRpbWVWaWV3ID0gdi5maW5kVmlld0J5SWQoUi5pZC50aW1lKTsKLSAgICAgICAgbUVuZFRpbWUgPSB2LmZpbmRWaWV3QnlJZChSLmlkLnRpbWVfZW5kKTsKLSAgICAgICAgbUN1cnJlbnRUaW1lID0gdi5maW5kVmlld0J5SWQoUi5pZC50aW1lX2N1cnJlbnQpOwotICAgICAgICBtQWRTa2lwVmlldyA9IHYuZmluZFZpZXdCeUlkKFIuaWQuYWRfc2tpcF90aW1lKTsKLSAgICAgICAgbUZvcm1hdEJ1aWxkZXIgPSBuZXcgU3RyaW5nQnVpbGRlcigpOwotICAgICAgICBtRm9ybWF0dGVyID0gbmV3IEZvcm1hdHRlcihtRm9ybWF0QnVpbGRlciwgTG9jYWxlLmdldERlZmF1bHQoKSk7Ci0KLSAgICAgICAgLy8gUmVsYXRpbmcgdG8gQm90dG9tIEJhciBSaWdodCBWaWV3Ci0gICAgICAgIG1Cb3R0b21CYXJSaWdodFZpZXcgPSB2LmZpbmRWaWV3QnlJZChSLmlkLmJvdHRvbV9iYXJfcmlnaHQpOwotICAgICAgICBtQmFzaWNDb250cm9scyA9IHYuZmluZFZpZXdCeUlkKFIuaWQuYmFzaWNfY29udHJvbHMpOwotICAgICAgICBtRXh0cmFDb250cm9scyA9IHYuZmluZFZpZXdCeUlkKFIuaWQuZXh0cmFfY29udHJvbHMpOwotICAgICAgICBtQ3VzdG9tQnV0dG9ucyA9IHYuZmluZFZpZXdCeUlkKFIuaWQuY3VzdG9tX2J1dHRvbnMpOwotICAgICAgICBtU3VidGl0bGVCdXR0b24gPSB2LmZpbmRWaWV3QnlJZChSLmlkLnN1YnRpdGxlKTsKLSAgICAgICAgaWYgKG1TdWJ0aXRsZUJ1dHRvbiAhPSBudWxsKSB7Ci0gICAgICAgICAgICBtU3VidGl0bGVCdXR0b24uc2V0T25DbGlja0xpc3RlbmVyKG1TdWJ0aXRsZUxpc3RlbmVyKTsKLSAgICAgICAgfQotICAgICAgICBtRnVsbFNjcmVlbkJ1dHRvbiA9IHYuZmluZFZpZXdCeUlkKFIuaWQuZnVsbHNjcmVlbik7Ci0gICAgICAgIGlmIChtRnVsbFNjcmVlbkJ1dHRvbiAhPSBudWxsKSB7Ci0gICAgICAgICAgICBtRnVsbFNjcmVlbkJ1dHRvbi5zZXRPbkNsaWNrTGlzdGVuZXIobUZ1bGxTY3JlZW5MaXN0ZW5lcik7Ci0gICAgICAgICAgICAvLyBUT0RPOiBTaG93IEZ1bGxzY3JlZW4gYnV0dG9uIHdoZW4gb25seSBpdCBpcyBwb3NzaWJsZS4KLSAgICAgICAgfQotICAgICAgICBtT3ZlcmZsb3dCdXR0b25SaWdodCA9IHYuZmluZFZpZXdCeUlkKFIuaWQub3ZlcmZsb3dfcmlnaHQpOwotICAgICAgICBpZiAobU92ZXJmbG93QnV0dG9uUmlnaHQgIT0gbnVsbCkgewotICAgICAgICAgICAgbU92ZXJmbG93QnV0dG9uUmlnaHQuc2V0T25DbGlja0xpc3RlbmVyKG1PdmVyZmxvd1JpZ2h0TGlzdGVuZXIpOwotICAgICAgICB9Ci0gICAgICAgIG1PdmVyZmxvd0J1dHRvbkxlZnQgPSB2LmZpbmRWaWV3QnlJZChSLmlkLm92ZXJmbG93X2xlZnQpOwotICAgICAgICBpZiAobU92ZXJmbG93QnV0dG9uTGVmdCAhPSBudWxsKSB7Ci0gICAgICAgICAgICBtT3ZlcmZsb3dCdXR0b25MZWZ0LnNldE9uQ2xpY2tMaXN0ZW5lcihtT3ZlcmZsb3dMZWZ0TGlzdGVuZXIpOwotICAgICAgICB9Ci0gICAgICAgIG1NdXRlQnV0dG9uID0gdi5maW5kVmlld0J5SWQoUi5pZC5tdXRlKTsKLSAgICAgICAgaWYgKG1NdXRlQnV0dG9uICE9IG51bGwpIHsKLSAgICAgICAgICAgIG1NdXRlQnV0dG9uLnNldE9uQ2xpY2tMaXN0ZW5lcihtTXV0ZUJ1dHRvbkxpc3RlbmVyKTsKLSAgICAgICAgfQotICAgICAgICBtU2V0dGluZ3NCdXR0b24gPSB2LmZpbmRWaWV3QnlJZChSLmlkLnNldHRpbmdzKTsKLSAgICAgICAgaWYgKG1TZXR0aW5nc0J1dHRvbiAhPSBudWxsKSB7Ci0gICAgICAgICAgICBtU2V0dGluZ3NCdXR0b24uc2V0T25DbGlja0xpc3RlbmVyKG1TZXR0aW5nc0J1dHRvbkxpc3RlbmVyKTsKLSAgICAgICAgfQotICAgICAgICBtVmlkZW9RdWFsaXR5QnV0dG9uID0gdi5maW5kVmlld0J5SWQoUi5pZC52aWRlb19xdWFsaXR5KTsKLSAgICAgICAgaWYgKG1WaWRlb1F1YWxpdHlCdXR0b24gIT0gbnVsbCkgewotICAgICAgICAgICAgbVZpZGVvUXVhbGl0eUJ1dHRvbi5zZXRPbkNsaWNrTGlzdGVuZXIobVZpZGVvUXVhbGl0eUxpc3RlbmVyKTsKLSAgICAgICAgfQotICAgICAgICBtQWRSZW1haW5pbmdWaWV3ID0gdi5maW5kVmlld0J5SWQoUi5pZC5hZF9yZW1haW5pbmcpOwotCi0gICAgICAgIC8vIFJlbGF0aW5nIHRvIFNldHRpbmdzIExpc3QgVmlldwotICAgICAgICBpbml0aWFsaXplU2V0dGluZ3NMaXN0cygpOwotICAgICAgICBtU2V0dGluZ3NMaXN0VmlldyA9IChMaXN0VmlldykgQXBpSGVscGVyLmluZmxhdGVMaWJMYXlvdXQobUluc3RhbmNlLmdldENvbnRleHQoKSwKLSAgICAgICAgICAgICAgICBSLmxheW91dC5zZXR0aW5nc19saXN0KTsKLSAgICAgICAgbVNldHRpbmdzQWRhcHRlciA9IG5ldyBTZXR0aW5nc0FkYXB0ZXIobVNldHRpbmdzTWFpblRleHRzTGlzdCwgbVNldHRpbmdzU3ViVGV4dHNMaXN0LAotICAgICAgICAgICAgICAgIG1TZXR0aW5nc0ljb25JZHNMaXN0KTsKLSAgICAgICAgbVN1YlNldHRpbmdzQWRhcHRlciA9IG5ldyBTdWJTZXR0aW5nc0FkYXB0ZXIobnVsbCwgMCk7Ci0gICAgICAgIG1TZXR0aW5nc0xpc3RWaWV3LnNldEFkYXB0ZXIobVNldHRpbmdzQWRhcHRlcik7Ci0gICAgICAgIG1TZXR0aW5nc0xpc3RWaWV3LnNldENob2ljZU1vZGUoTGlzdFZpZXcuQ0hPSUNFX01PREVfU0lOR0xFKTsKLSAgICAgICAgbVNldHRpbmdzTGlzdFZpZXcuc2V0T25JdGVtQ2xpY2tMaXN0ZW5lcihtU2V0dGluZ3NJdGVtQ2xpY2tMaXN0ZW5lcik7Ci0KLSAgICAgICAgbUVtYmVkZGVkU2V0dGluZ3NJdGVtV2lkdGggPSBtUmVzb3VyY2VzLmdldERpbWVuc2lvblBpeGVsU2l6ZSgKLSAgICAgICAgICAgICAgICBSLmRpbWVuLm1jdjJfZW1iZWRkZWRfc2V0dGluZ3Nfd2lkdGgpOwotICAgICAgICBtRnVsbFNldHRpbmdzSXRlbVdpZHRoID0gbVJlc291cmNlcy5nZXREaW1lbnNpb25QaXhlbFNpemUoUi5kaW1lbi5tY3YyX2Z1bGxfc2V0dGluZ3Nfd2lkdGgpOwotICAgICAgICBtRW1iZWRkZWRTZXR0aW5nc0l0ZW1IZWlnaHQgPSBtUmVzb3VyY2VzLmdldERpbWVuc2lvblBpeGVsU2l6ZSgKLSAgICAgICAgICAgICAgICBSLmRpbWVuLm1jdjJfZW1iZWRkZWRfc2V0dGluZ3NfaGVpZ2h0KTsKLSAgICAgICAgbUZ1bGxTZXR0aW5nc0l0ZW1IZWlnaHQgPSBtUmVzb3VyY2VzLmdldERpbWVuc2lvblBpeGVsU2l6ZSgKLSAgICAgICAgICAgICAgICBSLmRpbWVuLm1jdjJfZnVsbF9zZXR0aW5nc19oZWlnaHQpOwotICAgICAgICBtU2V0dGluZ3NXaW5kb3dNYXJnaW4gPSAoLTEpICogbVJlc291cmNlcy5nZXREaW1lbnNpb25QaXhlbFNpemUoCi0gICAgICAgICAgICAgICAgUi5kaW1lbi5tY3YyX3NldHRpbmdzX29mZnNldCk7Ci0gICAgICAgIG1TZXR0aW5nc1dpbmRvdyA9IG5ldyBQb3B1cFdpbmRvdyhtU2V0dGluZ3NMaXN0VmlldywgbUVtYmVkZGVkU2V0dGluZ3NJdGVtV2lkdGgsCi0gICAgICAgICAgICAgICAgVmlld0dyb3VwLkxheW91dFBhcmFtcy5XUkFQX0NPTlRFTlQsIHRydWUpOwotICAgIH0KLQotICAgIC8qKgotICAgICAqIERpc2FibGUgcGF1c2Ugb3Igc2VlayBidXR0b25zIGlmIHRoZSBzdHJlYW0gY2Fubm90IGJlIHBhdXNlZCBvciBzZWVrZWQuCi0gICAgICogVGhpcyByZXF1aXJlcyB0aGUgY29udHJvbCBpbnRlcmZhY2UgdG8gYmUgYSBNZWRpYVBsYXllckNvbnRyb2xFeHQKLSAgICAgKi8KLSAgICBwcml2YXRlIHZvaWQgZGlzYWJsZVVuc3VwcG9ydGVkQnV0dG9ucygpIHsKLSAgICAgICAgdHJ5IHsKLSAgICAgICAgICAgIGlmIChtUGxheVBhdXNlQnV0dG9uICE9IG51bGwgJiYgIWNhblBhdXNlKCkpIHsKLSAgICAgICAgICAgICAgICBtUGxheVBhdXNlQnV0dG9uLnNldEVuYWJsZWQoZmFsc2UpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYgKG1SZXdCdXR0b24gIT0gbnVsbCAmJiAhY2FuU2Vla0JhY2t3YXJkKCkpIHsKLSAgICAgICAgICAgICAgICBtUmV3QnV0dG9uLnNldEVuYWJsZWQoZmFsc2UpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYgKG1GZndkQnV0dG9uICE9IG51bGwgJiYgIWNhblNlZWtGb3J3YXJkKCkpIHsKLSAgICAgICAgICAgICAgICBtRmZ3ZEJ1dHRvbi5zZXRFbmFibGVkKGZhbHNlKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIC8vIFRPRE8gV2hhdCB3ZSByZWFsbHkgc2hvdWxkIGRvIGlzIGFkZCBhIGNhblNlZWsgdG8gdGhlIE1lZGlhUGxheWVyQ29udHJvbCBpbnRlcmZhY2U7Ci0gICAgICAgICAgICAvLyB0aGlzIHNjaGVtZSBjYW4gYnJlYWsgdGhlIGNhc2Ugd2hlbiBhcHBsaWNhdGlvbnMgd2FudCB0byBhbGxvdyBzZWVrIHRocm91Z2ggdGhlCi0gICAgICAgICAgICAvLyBwcm9ncmVzcyBiYXIgYnV0IGRpc2FibGUgZm9yd2FyZC9iYWNrd2FyZCBidXR0b25zLgotICAgICAgICAgICAgLy8KLSAgICAgICAgICAgIC8vIEhvd2V2ZXIsIGN1cnJlbnRseSB0aGUgZmxhZ3MgU0VFS19CQUNLV0FSRF9BVkFJTEFCTEUsIFNFRUtfRk9SV0FSRF9BVkFJTEFCTEUsCi0gICAgICAgICAgICAvLyBhbmQgU0VFS19BVkFJTEFCTEUgYXJlIGFsbCAodW4pc2V0IHRvZ2V0aGVyOyBhcyBzdWNoIHRoZSBhZm9yZW1lbnRpb25lZCBpc3N1ZQotICAgICAgICAgICAgLy8gc2hvdWxkbid0IGFyaXNlIGluIGV4aXN0aW5nIGFwcGxpY2F0aW9ucy4KLSAgICAgICAgICAgIGlmIChtUHJvZ3Jlc3MgIT0gbnVsbCAmJiAhY2FuU2Vla0JhY2t3YXJkKCkgJiYgIWNhblNlZWtGb3J3YXJkKCkpIHsKLSAgICAgICAgICAgICAgICBtUHJvZ3Jlc3Muc2V0RW5hYmxlZChmYWxzZSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0gY2F0Y2ggKEluY29tcGF0aWJsZUNsYXNzQ2hhbmdlRXJyb3IgZXgpIHsKLSAgICAgICAgICAgIC8vIFdlIHdlcmUgZ2l2ZW4gYW4gb2xkIHZlcnNpb24gb2YgdGhlIGludGVyZmFjZSwgdGhhdCBkb2Vzbid0IGhhdmUKLSAgICAgICAgICAgIC8vIHRoZSBjYW5QYXVzZS9jYW5TZWVrWFlaIG1ldGhvZHMuIFRoaXMgaXMgT0ssIGl0IGp1c3QgbWVhbnMgd2UKLSAgICAgICAgICAgIC8vIGFzc3VtZSB0aGUgbWVkaWEgY2FuIGJlIHBhdXNlZCBhbmQgc2Vla2VkLCBhbmQgc28gd2UgZG9uJ3QgZGlzYWJsZQotICAgICAgICAgICAgLy8gdGhlIGJ1dHRvbnMuCi0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBwcml2YXRlIGZpbmFsIFJ1bm5hYmxlIG1VcGRhdGVQcm9ncmVzcyA9IG5ldyBSdW5uYWJsZSgpIHsKLSAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgIHB1YmxpYyB2b2lkIHJ1bigpIHsKLSAgICAgICAgICAgIGludCBwb3MgPSBzZXRQcm9ncmVzcygpOwotICAgICAgICAgICAgYm9vbGVhbiBpc1Nob3dpbmcgPSBtSW5zdGFuY2UuZ2V0VmlzaWJpbGl0eSgpID09IFZpZXcuVklTSUJMRTsKLSAgICAgICAgICAgIGlmICghbURyYWdnaW5nICYmIGlzU2hvd2luZyAmJiBpc1BsYXlpbmcoKSkgewotICAgICAgICAgICAgICAgIG1JbnN0YW5jZS5wb3N0RGVsYXllZChtVXBkYXRlUHJvZ3Jlc3MsCi0gICAgICAgICAgICAgICAgICAgICAgICBERUZBVUxUX1BST0dSRVNTX1VQREFURV9USU1FX01TIC0gKHBvcyAlIERFRkFVTFRfUFJPR1JFU1NfVVBEQVRFX1RJTUVfTVMpKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH07Ci0KLSAgICBwcml2YXRlIFN0cmluZyBzdHJpbmdGb3JUaW1lKGludCB0aW1lTXMpIHsKLSAgICAgICAgaW50IHRvdGFsU2Vjb25kcyA9IHRpbWVNcyAvIDEwMDA7Ci0KLSAgICAgICAgaW50IHNlY29uZHMgPSB0b3RhbFNlY29uZHMgJSA2MDsKLSAgICAgICAgaW50IG1pbnV0ZXMgPSAodG90YWxTZWNvbmRzIC8gNjApICUgNjA7Ci0gICAgICAgIGludCBob3VycyA9IHRvdGFsU2Vjb25kcyAvIDM2MDA7Ci0KLSAgICAgICAgbUZvcm1hdEJ1aWxkZXIuc2V0TGVuZ3RoKDApOwotICAgICAgICBpZiAoaG91cnMgPiAwKSB7Ci0gICAgICAgICAgICByZXR1cm4gbUZvcm1hdHRlci5mb3JtYXQoIiVkOiUwMmQ6JTAyZCIsIGhvdXJzLCBtaW51dGVzLCBzZWNvbmRzKS50b1N0cmluZygpOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgcmV0dXJuIG1Gb3JtYXR0ZXIuZm9ybWF0KCIlMDJkOiUwMmQiLCBtaW51dGVzLCBzZWNvbmRzKS50b1N0cmluZygpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgcHJpdmF0ZSBpbnQgc2V0UHJvZ3Jlc3MoKSB7Ci0gICAgICAgIGlmIChtQ29udHJvbGxlciA9PSBudWxsIHx8IG1EcmFnZ2luZykgewotICAgICAgICAgICAgcmV0dXJuIDA7Ci0gICAgICAgIH0KLSAgICAgICAgaW50IHBvc2l0aW9uT25Qcm9ncmVzc0JhciA9IDA7Ci0gICAgICAgIGludCBjdXJyZW50UG9zaXRpb24gPSBnZXRDdXJyZW50UG9zaXRpb24oKTsKLSAgICAgICAgaWYgKG1EdXJhdGlvbiA+IDApIHsKLSAgICAgICAgICAgIHBvc2l0aW9uT25Qcm9ncmVzc0JhciA9IChpbnQpIChNQVhfUFJPR1JFU1MgKiAobG9uZykgY3VycmVudFBvc2l0aW9uIC8gbUR1cmF0aW9uKTsKLSAgICAgICAgfQotICAgICAgICBpZiAobVByb2dyZXNzICE9IG51bGwgJiYgY3VycmVudFBvc2l0aW9uICE9IG1EdXJhdGlvbikgewotICAgICAgICAgICAgbVByb2dyZXNzLnNldFByb2dyZXNzKHBvc2l0aW9uT25Qcm9ncmVzc0Jhcik7Ci0gICAgICAgICAgICAvLyBJZiB0aGUgbWVkaWEgaXMgYSBsb2NhbCBmaWxlLCB0aGVyZSBpcyBubyBuZWVkIHRvIHNldCBhIGJ1ZmZlciwgc28gc2V0IHNlY29uZGFyeQotICAgICAgICAgICAgLy8gcHJvZ3Jlc3MgdG8gbWF4aW11bS4KLSAgICAgICAgICAgIGlmIChnZXRCdWZmZXJQZXJjZW50YWdlKCkgPCAwKSB7Ci0gICAgICAgICAgICAgICAgbVByb2dyZXNzLnNldFNlY29uZGFyeVByb2dyZXNzKE1BWF9QUk9HUkVTUyk7Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIG1Qcm9ncmVzcy5zZXRTZWNvbmRhcnlQcm9ncmVzcyhnZXRCdWZmZXJQZXJjZW50YWdlKCkgKiAxMCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAobUVuZFRpbWUgIT0gbnVsbCkgewotICAgICAgICAgICAgbUVuZFRpbWUuc2V0VGV4dChzdHJpbmdGb3JUaW1lKG1EdXJhdGlvbikpOwotCi0gICAgICAgIH0KLSAgICAgICAgaWYgKG1DdXJyZW50VGltZSAhPSBudWxsKSB7Ci0gICAgICAgICAgICBtQ3VycmVudFRpbWUuc2V0VGV4dChzdHJpbmdGb3JUaW1lKGN1cnJlbnRQb3NpdGlvbikpOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKG1Jc0FkdmVydGlzZW1lbnQpIHsKLSAgICAgICAgICAgIC8vIFVwZGF0ZSB0aGUgcmVtYWluaW5nIG51bWJlciBvZiBzZWNvbmRzIHVudGlsIHRoZSBmaXJzdCA1IHNlY29uZHMgb2YgdGhlCi0gICAgICAgICAgICAvLyBhZHZlcnRpc2VtZW50LgotICAgICAgICAgICAgaWYgKG1BZFNraXBWaWV3ICE9IG51bGwpIHsKLSAgICAgICAgICAgICAgICBpZiAoY3VycmVudFBvc2l0aW9uIDw9IEFEX1NLSVBfV0FJVF9USU1FX01TKSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChtQWRTa2lwVmlldy5nZXRWaXNpYmlsaXR5KCkgPT0gVmlldy5HT05FKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBtQWRTa2lwVmlldy5zZXRWaXNpYmlsaXR5KFZpZXcuVklTSUJMRSk7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgU3RyaW5nIHNraXBUaW1lVGV4dCA9IG1SZXNvdXJjZXMuZ2V0U3RyaW5nKAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIFIuc3RyaW5nLk1lZGlhQ29udHJvbFZpZXcyX2FkX3NraXBfd2FpdF90aW1lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoQURfU0tJUF9XQUlUX1RJTUVfTVMgLSBjdXJyZW50UG9zaXRpb24pIC8gMTAwMCArIDEpKTsKLSAgICAgICAgICAgICAgICAgICAgbUFkU2tpcFZpZXcuc2V0VGV4dChza2lwVGltZVRleHQpOwotICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChtQWRTa2lwVmlldy5nZXRWaXNpYmlsaXR5KCkgPT0gVmlldy5WSVNJQkxFKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBtQWRTa2lwVmlldy5zZXRWaXNpYmlsaXR5KFZpZXcuR09ORSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBtTmV4dEJ1dHRvbi5zZXRFbmFibGVkKHRydWUpOwotICAgICAgICAgICAgICAgICAgICAgICAgbU5leHRCdXR0b24uY2xlYXJDb2xvckZpbHRlcigpOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICAgICAgLy8gVXBkYXRlIHRoZSByZW1haW5pbmcgbnVtYmVyIG9mIHNlY29uZHMgb2YgdGhlIGFkdmVydGlzZW1lbnQuCi0gICAgICAgICAgICBpZiAobUFkUmVtYWluaW5nVmlldyAhPSBudWxsKSB7Ci0gICAgICAgICAgICAgICAgaW50IHJlbWFpbmluZ1RpbWUgPQotICAgICAgICAgICAgICAgICAgICAgICAgKG1EdXJhdGlvbiAtIGN1cnJlbnRQb3NpdGlvbiA8IDApID8gMCA6IChtRHVyYXRpb24gLSBjdXJyZW50UG9zaXRpb24pOwotICAgICAgICAgICAgICAgIFN0cmluZyByZW1haW5pbmdUaW1lVGV4dCA9IG1SZXNvdXJjZXMuZ2V0U3RyaW5nKAotICAgICAgICAgICAgICAgICAgICAgICAgUi5zdHJpbmcuTWVkaWFDb250cm9sVmlldzJfYWRfcmVtYWluaW5nX3RpbWUsCi0gICAgICAgICAgICAgICAgICAgICAgICBzdHJpbmdGb3JUaW1lKHJlbWFpbmluZ1RpbWUpKTsKLSAgICAgICAgICAgICAgICBtQWRSZW1haW5pbmdWaWV3LnNldFRleHQocmVtYWluaW5nVGltZVRleHQpOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIHJldHVybiBjdXJyZW50UG9zaXRpb247Ci0gICAgfQotCi0gICAgcHJpdmF0ZSB2b2lkIHRvZ2dsZVBhdXNlUGxheVN0YXRlKCkgewotICAgICAgICBpZiAoaXNQbGF5aW5nKCkpIHsKLSAgICAgICAgICAgIG1Db250cm9scy5wYXVzZSgpOwotICAgICAgICAgICAgbVBsYXlQYXVzZUJ1dHRvbi5zZXRJbWFnZURyYXdhYmxlKAotICAgICAgICAgICAgICAgICAgICBtUmVzb3VyY2VzLmdldERyYXdhYmxlKFIuZHJhd2FibGUuaWNfcGxheV9jaXJjbGVfZmlsbGVkLCBudWxsKSk7Ci0gICAgICAgICAgICBtUGxheVBhdXNlQnV0dG9uLnNldENvbnRlbnREZXNjcmlwdGlvbigKLSAgICAgICAgICAgICAgICAgICAgbVJlc291cmNlcy5nZXRTdHJpbmcoUi5zdHJpbmcubWN2Ml9wbGF5X2J1dHRvbl9kZXNjKSk7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBtQ29udHJvbHMucGxheSgpOwotICAgICAgICAgICAgbVBsYXlQYXVzZUJ1dHRvbi5zZXRJbWFnZURyYXdhYmxlKAotICAgICAgICAgICAgICAgICAgICBtUmVzb3VyY2VzLmdldERyYXdhYmxlKFIuZHJhd2FibGUuaWNfcGF1c2VfY2lyY2xlX2ZpbGxlZCwgbnVsbCkpOwotICAgICAgICAgICAgbVBsYXlQYXVzZUJ1dHRvbi5zZXRDb250ZW50RGVzY3JpcHRpb24oCi0gICAgICAgICAgICAgICAgICAgIG1SZXNvdXJjZXMuZ2V0U3RyaW5nKFIuc3RyaW5nLm1jdjJfcGF1c2VfYnV0dG9uX2Rlc2MpKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIC8vIFRoZXJlIGFyZSB0d28gc2NlbmFyaW9zIHRoYXQgY2FuIHRyaWdnZXIgdGhlIHNlZWtiYXIgbGlzdGVuZXIgdG8gdHJpZ2dlcjoKLSAgICAvLwotICAgIC8vIFRoZSBmaXJzdCBpcyB0aGUgdXNlciB1c2luZyB0aGUgdG91Y2hwYWQgdG8gYWRqdXN0IHRoZSBwb3NpdGl0b24gb2YgdGhlCi0gICAgLy8gc2Vla2JhcidzIHRodW1iLiBJbiB0aGlzIGNhc2Ugb25TdGFydFRyYWNraW5nVG91Y2ggaXMgY2FsbGVkIGZvbGxvd2VkIGJ5Ci0gICAgLy8gYSBudW1iZXIgb2Ygb25Qcm9ncmVzc0NoYW5nZWQgbm90aWZpY2F0aW9ucywgY29uY2x1ZGVkIGJ5IG9uU3RvcFRyYWNraW5nVG91Y2guCi0gICAgLy8gV2UncmUgc2V0dGluZyB0aGUgZmllbGQgIm1EcmFnZ2luZyIgdG8gdHJ1ZSBmb3IgdGhlIGR1cmF0aW9uIG9mIHRoZSBkcmFnZ2luZwotICAgIC8vIHNlc3Npb24gdG8gYXZvaWQganVtcHMgaW4gdGhlIHBvc2l0aW9uIGluIGNhc2Ugb2Ygb25nb2luZyBwbGF5YmFjay4KLSAgICAvLwotICAgIC8vIFRoZSBzZWNvbmQgc2NlbmFyaW8gaW52b2x2ZXMgdGhlIHVzZXIgb3BlcmF0aW5nIHRoZSBzY3JvbGwgYmFsbCwgaW4gdGhpcwotICAgIC8vIGNhc2UgdGhlcmUgV09OJ1QgQkUgb25TdGFydFRyYWNraW5nVG91Y2gvb25TdG9wVHJhY2tpbmdUb3VjaCBub3RpZmljYXRpb25zLAotICAgIC8vIHdlIHdpbGwgc2ltcGx5IGFwcGx5IHRoZSB1cGRhdGVkIHBvc2l0aW9uIHdpdGhvdXQgc3VzcGVuZGluZyByZWd1bGFyIHVwZGF0ZXMuCi0gICAgcHJpdmF0ZSBmaW5hbCBPblNlZWtCYXJDaGFuZ2VMaXN0ZW5lciBtU2Vla0xpc3RlbmVyID0gbmV3IE9uU2Vla0JhckNoYW5nZUxpc3RlbmVyKCkgewotICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgcHVibGljIHZvaWQgb25TdGFydFRyYWNraW5nVG91Y2goU2Vla0JhciBiYXIpIHsKLSAgICAgICAgICAgIGlmICghbVNlZWtBdmFpbGFibGUpIHsKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIG1EcmFnZ2luZyA9IHRydWU7Ci0KLSAgICAgICAgICAgIC8vIEJ5IHJlbW92aW5nIHRoZXNlIHBlbmRpbmcgcHJvZ3Jlc3MgbWVzc2FnZXMgd2UgbWFrZSBzdXJlCi0gICAgICAgICAgICAvLyB0aGF0IGEpIHdlIHdvbid0IHVwZGF0ZSB0aGUgcHJvZ3Jlc3Mgd2hpbGUgdGhlIHVzZXIgYWRqdXN0cwotICAgICAgICAgICAgLy8gdGhlIHNlZWtiYXIgYW5kIGIpIG9uY2UgdGhlIHVzZXIgaXMgZG9uZSBkcmFnZ2luZyB0aGUgdGh1bWIKLSAgICAgICAgICAgIC8vIHdlIHdpbGwgcG9zdCBvbmUgb2YgdGhlc2UgbWVzc2FnZXMgdG8gdGhlIHF1ZXVlIGFnYWluIGFuZAotICAgICAgICAgICAgLy8gdGhpcyBlbnN1cmVzIHRoYXQgdGhlcmUgd2lsbCBiZSBleGFjdGx5IG9uZSBtZXNzYWdlIHF1ZXVlZCB1cC4KLSAgICAgICAgICAgIG1JbnN0YW5jZS5yZW1vdmVDYWxsYmFja3MobVVwZGF0ZVByb2dyZXNzKTsKLQotICAgICAgICAgICAgLy8gQ2hlY2sgaWYgcGxheWJhY2sgaXMgY3VycmVudGx5IHN0b3BwZWQuIEluIHRoaXMgY2FzZSwgdXBkYXRlIHRoZSBwYXVzZSBidXR0b24gdG8KLSAgICAgICAgICAgIC8vIHNob3cgdGhlIHBsYXkgaW1hZ2UgaW5zdGVhZCBvZiB0aGUgcmVwbGF5IGltYWdlLgotICAgICAgICAgICAgaWYgKG1Jc1N0b3BwZWQpIHsKLSAgICAgICAgICAgICAgICBtUGxheVBhdXNlQnV0dG9uLnNldEltYWdlRHJhd2FibGUoCi0gICAgICAgICAgICAgICAgICAgICAgICBtUmVzb3VyY2VzLmdldERyYXdhYmxlKFIuZHJhd2FibGUuaWNfcGxheV9jaXJjbGVfZmlsbGVkLCBudWxsKSk7Ci0gICAgICAgICAgICAgICAgbVBsYXlQYXVzZUJ1dHRvbi5zZXRDb250ZW50RGVzY3JpcHRpb24oCi0gICAgICAgICAgICAgICAgICAgICAgICBtUmVzb3VyY2VzLmdldFN0cmluZyhSLnN0cmluZy5tY3YyX3BsYXlfYnV0dG9uX2Rlc2MpKTsKLSAgICAgICAgICAgICAgICBtSXNTdG9wcGVkID0gZmFsc2U7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgcHVibGljIHZvaWQgb25Qcm9ncmVzc0NoYW5nZWQoU2Vla0JhciBiYXIsIGludCBwcm9ncmVzcywgYm9vbGVhbiBmcm9tVXNlcikgewotICAgICAgICAgICAgaWYgKCFtU2Vla0F2YWlsYWJsZSkgewotICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmICghZnJvbVVzZXIpIHsKLSAgICAgICAgICAgICAgICAvLyBXZSdyZSBub3QgaW50ZXJlc3RlZCBpbiBwcm9ncmFtbWF0aWNhbGx5IGdlbmVyYXRlZCBjaGFuZ2VzIHRvCi0gICAgICAgICAgICAgICAgLy8gdGhlIHByb2dyZXNzIGJhcidzIHBvc2l0aW9uLgotICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmIChtRHVyYXRpb24gPiAwKSB7Ci0gICAgICAgICAgICAgICAgaW50IHBvc2l0aW9uID0gKGludCkgKCgobG9uZykgbUR1cmF0aW9uICogcHJvZ3Jlc3MpIC8gTUFYX1BST0dSRVNTKTsKLSAgICAgICAgICAgICAgICBtQ29udHJvbHMuc2Vla1RvKHBvc2l0aW9uKTsKLQotICAgICAgICAgICAgICAgIGlmIChtQ3VycmVudFRpbWUgIT0gbnVsbCkgewotICAgICAgICAgICAgICAgICAgICBtQ3VycmVudFRpbWUuc2V0VGV4dChzdHJpbmdGb3JUaW1lKHBvc2l0aW9uKSk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgIHB1YmxpYyB2b2lkIG9uU3RvcFRyYWNraW5nVG91Y2goU2Vla0JhciBiYXIpIHsKLSAgICAgICAgICAgIGlmICghbVNlZWtBdmFpbGFibGUpIHsKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBtRHJhZ2dpbmcgPSBmYWxzZTsKLQotICAgICAgICAgICAgc2V0UHJvZ3Jlc3MoKTsKLQotICAgICAgICAgICAgLy8gRW5zdXJlIHRoYXQgcHJvZ3Jlc3MgaXMgcHJvcGVybHkgdXBkYXRlZCBpbiB0aGUgZnV0dXJlLAotICAgICAgICAgICAgLy8gdGhlIGNhbGwgdG8gc2hvdygpIGRvZXMgbm90IGd1YXJhbnRlZSB0aGlzIGJlY2F1c2UgaXQgaXMgYQotICAgICAgICAgICAgLy8gbm8tb3AgaWYgd2UgYXJlIGFscmVhZHkgc2hvd2luZy4KLSAgICAgICAgICAgIG1JbnN0YW5jZS5wb3N0KG1VcGRhdGVQcm9ncmVzcyk7Ci0gICAgICAgIH0KLSAgICB9OwotCi0gICAgcHJpdmF0ZSBmaW5hbCBWaWV3Lk9uQ2xpY2tMaXN0ZW5lciBtUGxheVBhdXNlTGlzdGVuZXIgPSBuZXcgVmlldy5PbkNsaWNrTGlzdGVuZXIoKSB7Ci0gICAgICAgIEBPdmVycmlkZQotICAgICAgICBwdWJsaWMgdm9pZCBvbkNsaWNrKFZpZXcgdikgewotICAgICAgICAgICAgdG9nZ2xlUGF1c2VQbGF5U3RhdGUoKTsKLSAgICAgICAgfQotICAgIH07Ci0KLSAgICBwcml2YXRlIGZpbmFsIFZpZXcuT25DbGlja0xpc3RlbmVyIG1SZXdMaXN0ZW5lciA9IG5ldyBWaWV3Lk9uQ2xpY2tMaXN0ZW5lcigpIHsKLSAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgIHB1YmxpYyB2b2lkIG9uQ2xpY2soVmlldyB2KSB7Ci0gICAgICAgICAgICBpbnQgcG9zID0gZ2V0Q3VycmVudFBvc2l0aW9uKCkgLSBSRVdJTkRfVElNRV9NUzsKLSAgICAgICAgICAgIG1Db250cm9scy5zZWVrVG8ocG9zKTsKLSAgICAgICAgICAgIHNldFByb2dyZXNzKCk7Ci0gICAgICAgIH0KLSAgICB9OwotCi0gICAgcHJpdmF0ZSBmaW5hbCBWaWV3Lk9uQ2xpY2tMaXN0ZW5lciBtRmZ3ZExpc3RlbmVyID0gbmV3IFZpZXcuT25DbGlja0xpc3RlbmVyKCkgewotICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgcHVibGljIHZvaWQgb25DbGljayhWaWV3IHYpIHsKLSAgICAgICAgICAgIGludCBwb3MgPSBnZXRDdXJyZW50UG9zaXRpb24oKSArIEZPUldBUkRfVElNRV9NUzsKLSAgICAgICAgICAgIG1Db250cm9scy5zZWVrVG8ocG9zKTsKLSAgICAgICAgICAgIHNldFByb2dyZXNzKCk7Ci0gICAgICAgIH0KLSAgICB9OwotCi0gICAgcHJpdmF0ZSBmaW5hbCBWaWV3Lk9uQ2xpY2tMaXN0ZW5lciBtTmV4dExpc3RlbmVyID0gbmV3IFZpZXcuT25DbGlja0xpc3RlbmVyKCkgewotICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgcHVibGljIHZvaWQgb25DbGljayhWaWV3IHYpIHsKLSAgICAgICAgICAgIG1Db250cm9scy5za2lwVG9OZXh0KCk7Ci0gICAgICAgIH0KLSAgICB9OwotCi0gICAgcHJpdmF0ZSBmaW5hbCBWaWV3Lk9uQ2xpY2tMaXN0ZW5lciBtUHJldkxpc3RlbmVyID0gbmV3IFZpZXcuT25DbGlja0xpc3RlbmVyKCkgewotICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgcHVibGljIHZvaWQgb25DbGljayhWaWV3IHYpIHsKLSAgICAgICAgICAgIG1Db250cm9scy5za2lwVG9QcmV2aW91cygpOwotICAgICAgICB9Ci0gICAgfTsKLQotICAgIHByaXZhdGUgZmluYWwgVmlldy5PbkNsaWNrTGlzdGVuZXIgbUJhY2tMaXN0ZW5lciA9IG5ldyBWaWV3Lk9uQ2xpY2tMaXN0ZW5lcigpIHsKLSAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgIHB1YmxpYyB2b2lkIG9uQ2xpY2soVmlldyB2KSB7Ci0gICAgICAgICAgICAvLyBUT0RPOiBpbXBsZW1lbnQKLSAgICAgICAgfQotICAgIH07Ci0KLSAgICBwcml2YXRlIGZpbmFsIFZpZXcuT25DbGlja0xpc3RlbmVyIG1TdWJ0aXRsZUxpc3RlbmVyID0gbmV3IFZpZXcuT25DbGlja0xpc3RlbmVyKCkgewotICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgcHVibGljIHZvaWQgb25DbGljayhWaWV3IHYpIHsKLSAgICAgICAgICAgIG1TZXR0aW5nc01vZGUgPSBTRVRUSU5HU19NT0RFX1NVQlRJVExFX1RSQUNLOwotICAgICAgICAgICAgbVN1YlNldHRpbmdzQWRhcHRlci5zZXRUZXh0cyhtU3VidGl0bGVEZXNjcmlwdGlvbnNMaXN0KTsKLSAgICAgICAgICAgIG1TdWJTZXR0aW5nc0FkYXB0ZXIuc2V0Q2hlY2tQb3NpdGlvbihtU2VsZWN0ZWRTdWJ0aXRsZVRyYWNrSW5kZXgpOwotICAgICAgICAgICAgZGlzcGxheVNldHRpbmdzV2luZG93KG1TdWJTZXR0aW5nc0FkYXB0ZXIpOwotICAgICAgICB9Ci0gICAgfTsKLQotICAgIHByaXZhdGUgZmluYWwgVmlldy5PbkNsaWNrTGlzdGVuZXIgbVZpZGVvUXVhbGl0eUxpc3RlbmVyID0gbmV3IFZpZXcuT25DbGlja0xpc3RlbmVyKCkgewotICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgcHVibGljIHZvaWQgb25DbGljayhWaWV3IHYpIHsKLSAgICAgICAgICAgIG1TZXR0aW5nc01vZGUgPSBTRVRUSU5HU19NT0RFX1ZJREVPX1FVQUxJVFk7Ci0gICAgICAgICAgICBtU3ViU2V0dGluZ3NBZGFwdGVyLnNldFRleHRzKG1WaWRlb1F1YWxpdHlMaXN0KTsKLSAgICAgICAgICAgIG1TdWJTZXR0aW5nc0FkYXB0ZXIuc2V0Q2hlY2tQb3NpdGlvbihtU2VsZWN0ZWRWaWRlb1F1YWxpdHlJbmRleCk7Ci0gICAgICAgICAgICBkaXNwbGF5U2V0dGluZ3NXaW5kb3cobVN1YlNldHRpbmdzQWRhcHRlcik7Ci0gICAgICAgIH0KLSAgICB9OwotCi0gICAgcHJpdmF0ZSBmaW5hbCBWaWV3Lk9uQ2xpY2tMaXN0ZW5lciBtRnVsbFNjcmVlbkxpc3RlbmVyID0gbmV3IFZpZXcuT25DbGlja0xpc3RlbmVyKCkgewotICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgcHVibGljIHZvaWQgb25DbGljayhWaWV3IHYpIHsKLSAgICAgICAgICAgIGZpbmFsIGJvb2xlYW4gaXNFbnRlcmluZ0Z1bGxTY3JlZW4gPSAhbUlzRnVsbFNjcmVlbjsKLSAgICAgICAgICAgIC8vIFRPRE86IFJlLWFycmFuZ2UgdGhlIGJ1dHRvbiBsYXlvdXRzIGFjY29yZGluZyB0byB0aGUgVVguCi0gICAgICAgICAgICBpZiAoaXNFbnRlcmluZ0Z1bGxTY3JlZW4pIHsKLSAgICAgICAgICAgICAgICBtRnVsbFNjcmVlbkJ1dHRvbi5zZXRJbWFnZURyYXdhYmxlKAotICAgICAgICAgICAgICAgICAgICAgICAgbVJlc291cmNlcy5nZXREcmF3YWJsZShSLmRyYXdhYmxlLmljX2Z1bGxzY3JlZW5fZXhpdCwgbnVsbCkpOwotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICBtRnVsbFNjcmVlbkJ1dHRvbi5zZXRJbWFnZURyYXdhYmxlKAotICAgICAgICAgICAgICAgICAgICAgICAgbVJlc291cmNlcy5nZXREcmF3YWJsZShSLmRyYXdhYmxlLmljX2Z1bGxzY3JlZW4sIG51bGwpKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIEJ1bmRsZSBhcmdzID0gbmV3IEJ1bmRsZSgpOwotICAgICAgICAgICAgYXJncy5wdXRCb29sZWFuKEFSR1VNRU5UX0tFWV9GVUxMU0NSRUVOLCBpc0VudGVyaW5nRnVsbFNjcmVlbik7Ci0gICAgICAgICAgICBtQ29udHJvbGxlci5zZW5kQ29tbWFuZChDT01NQU5EX1NFVF9GVUxMU0NSRUVOLCBhcmdzLCBudWxsKTsKLQotICAgICAgICAgICAgbUlzRnVsbFNjcmVlbiA9IGlzRW50ZXJpbmdGdWxsU2NyZWVuOwotICAgICAgICB9Ci0gICAgfTsKLQotICAgIHByaXZhdGUgZmluYWwgVmlldy5PbkNsaWNrTGlzdGVuZXIgbU92ZXJmbG93UmlnaHRMaXN0ZW5lciA9IG5ldyBWaWV3Lk9uQ2xpY2tMaXN0ZW5lcigpIHsKLSAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgIHB1YmxpYyB2b2lkIG9uQ2xpY2soVmlldyB2KSB7Ci0gICAgICAgICAgICBtQmFzaWNDb250cm9scy5zZXRWaXNpYmlsaXR5KFZpZXcuR09ORSk7Ci0gICAgICAgICAgICBtRXh0cmFDb250cm9scy5zZXRWaXNpYmlsaXR5KFZpZXcuVklTSUJMRSk7Ci0gICAgICAgIH0KLSAgICB9OwotCi0gICAgcHJpdmF0ZSBmaW5hbCBWaWV3Lk9uQ2xpY2tMaXN0ZW5lciBtT3ZlcmZsb3dMZWZ0TGlzdGVuZXIgPSBuZXcgVmlldy5PbkNsaWNrTGlzdGVuZXIoKSB7Ci0gICAgICAgIEBPdmVycmlkZQotICAgICAgICBwdWJsaWMgdm9pZCBvbkNsaWNrKFZpZXcgdikgewotICAgICAgICAgICAgbUJhc2ljQ29udHJvbHMuc2V0VmlzaWJpbGl0eShWaWV3LlZJU0lCTEUpOwotICAgICAgICAgICAgbUV4dHJhQ29udHJvbHMuc2V0VmlzaWJpbGl0eShWaWV3LkdPTkUpOwotICAgICAgICB9Ci0gICAgfTsKLQotICAgIHByaXZhdGUgZmluYWwgVmlldy5PbkNsaWNrTGlzdGVuZXIgbU11dGVCdXR0b25MaXN0ZW5lciA9IG5ldyBWaWV3Lk9uQ2xpY2tMaXN0ZW5lcigpIHsKLSAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgIHB1YmxpYyB2b2lkIG9uQ2xpY2soVmlldyB2KSB7Ci0gICAgICAgICAgICBpZiAoIW1Jc011dGUpIHsKLSAgICAgICAgICAgICAgICBtTXV0ZUJ1dHRvbi5zZXRJbWFnZURyYXdhYmxlKAotICAgICAgICAgICAgICAgICAgICAgICAgbVJlc291cmNlcy5nZXREcmF3YWJsZShSLmRyYXdhYmxlLmljX211dGUsIG51bGwpKTsKLSAgICAgICAgICAgICAgICBtTXV0ZUJ1dHRvbi5zZXRDb250ZW50RGVzY3JpcHRpb24oCi0gICAgICAgICAgICAgICAgICAgICAgICBtUmVzb3VyY2VzLmdldFN0cmluZyhSLnN0cmluZy5tY3YyX211dGVkX2J1dHRvbl9kZXNjKSk7Ci0gICAgICAgICAgICAgICAgbUlzTXV0ZSA9IHRydWU7Ci0gICAgICAgICAgICAgICAgbUNvbnRyb2xsZXIuc2VuZENvbW1hbmQoQ09NTUFORF9NVVRFLCBudWxsLCBudWxsKTsKLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgbU11dGVCdXR0b24uc2V0SW1hZ2VEcmF3YWJsZSgKLSAgICAgICAgICAgICAgICAgICAgICAgIG1SZXNvdXJjZXMuZ2V0RHJhd2FibGUoUi5kcmF3YWJsZS5pY191bm11dGUsIG51bGwpKTsKLSAgICAgICAgICAgICAgICBtTXV0ZUJ1dHRvbi5zZXRDb250ZW50RGVzY3JpcHRpb24oCi0gICAgICAgICAgICAgICAgICAgICAgICBtUmVzb3VyY2VzLmdldFN0cmluZyhSLnN0cmluZy5tY3YyX3VubXV0ZWRfYnV0dG9uX2Rlc2MpKTsKLSAgICAgICAgICAgICAgICBtSXNNdXRlID0gZmFsc2U7Ci0gICAgICAgICAgICAgICAgbUNvbnRyb2xsZXIuc2VuZENvbW1hbmQoQ09NTUFORF9VTk1VVEUsIG51bGwsIG51bGwpOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfTsKLQotICAgIHByaXZhdGUgZmluYWwgVmlldy5PbkNsaWNrTGlzdGVuZXIgbVNldHRpbmdzQnV0dG9uTGlzdGVuZXIgPSBuZXcgVmlldy5PbkNsaWNrTGlzdGVuZXIoKSB7Ci0gICAgICAgIEBPdmVycmlkZQotICAgICAgICBwdWJsaWMgdm9pZCBvbkNsaWNrKFZpZXcgdikgewotICAgICAgICAgICAgbVNldHRpbmdzTW9kZSA9IFNFVFRJTkdTX01PREVfTUFJTjsKLSAgICAgICAgICAgIG1TZXR0aW5nc0FkYXB0ZXIuc2V0U3ViVGV4dHMobVNldHRpbmdzU3ViVGV4dHNMaXN0KTsKLSAgICAgICAgICAgIGRpc3BsYXlTZXR0aW5nc1dpbmRvdyhtU2V0dGluZ3NBZGFwdGVyKTsKLSAgICAgICAgfQotICAgIH07Ci0KLSAgICBwcml2YXRlIGZpbmFsIEFkYXB0ZXJWaWV3Lk9uSXRlbUNsaWNrTGlzdGVuZXIgbVNldHRpbmdzSXRlbUNsaWNrTGlzdGVuZXIKLSAgICAgICAgICAgID0gbmV3IEFkYXB0ZXJWaWV3Lk9uSXRlbUNsaWNrTGlzdGVuZXIoKSB7Ci0gICAgICAgIEBPdmVycmlkZQotICAgICAgICBwdWJsaWMgdm9pZCBvbkl0ZW1DbGljayhBZGFwdGVyVmlldzw/PiBwYXJlbnQsIFZpZXcgdmlldywgaW50IHBvc2l0aW9uLCBsb25nIGlkKSB7Ci0gICAgICAgICAgICBzd2l0Y2ggKG1TZXR0aW5nc01vZGUpIHsKLSAgICAgICAgICAgICAgICBjYXNlIFNFVFRJTkdTX01PREVfTUFJTjoKLSAgICAgICAgICAgICAgICAgICAgaWYgKHBvc2l0aW9uID09IFNFVFRJTkdTX01PREVfQVVESU9fVFJBQ0spIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIG1TdWJTZXR0aW5nc0FkYXB0ZXIuc2V0VGV4dHMobUF1ZGlvVHJhY2tMaXN0KTsKLSAgICAgICAgICAgICAgICAgICAgICAgIG1TdWJTZXR0aW5nc0FkYXB0ZXIuc2V0Q2hlY2tQb3NpdGlvbihtU2VsZWN0ZWRBdWRpb1RyYWNrSW5kZXgpOwotICAgICAgICAgICAgICAgICAgICAgICAgbVNldHRpbmdzTW9kZSA9IFNFVFRJTkdTX01PREVfQVVESU9fVFJBQ0s7Ci0gICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAocG9zaXRpb24gPT0gU0VUVElOR1NfTU9ERV9QTEFZQkFDS19TUEVFRCkgewotICAgICAgICAgICAgICAgICAgICAgICAgbVN1YlNldHRpbmdzQWRhcHRlci5zZXRUZXh0cyhtUGxheWJhY2tTcGVlZFRleHRMaXN0KTsKLSAgICAgICAgICAgICAgICAgICAgICAgIG1TdWJTZXR0aW5nc0FkYXB0ZXIuc2V0Q2hlY2tQb3NpdGlvbihtU2VsZWN0ZWRTcGVlZEluZGV4KTsKLSAgICAgICAgICAgICAgICAgICAgICAgIG1TZXR0aW5nc01vZGUgPSBTRVRUSU5HU19NT0RFX1BMQVlCQUNLX1NQRUVEOwotICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHBvc2l0aW9uID09IFNFVFRJTkdTX01PREVfSEVMUCkgewotICAgICAgICAgICAgICAgICAgICAgICAgLy8gVE9ETzogaW1wbGVtZW50IHRoaXMuCi0gICAgICAgICAgICAgICAgICAgICAgICBtU2V0dGluZ3NXaW5kb3cuZGlzbWlzcygpOwotICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIGRpc3BsYXlTZXR0aW5nc1dpbmRvdyhtU3ViU2V0dGluZ3NBZGFwdGVyKTsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgY2FzZSBTRVRUSU5HU19NT0RFX0FVRElPX1RSQUNLOgotICAgICAgICAgICAgICAgICAgICBpZiAocG9zaXRpb24gIT0gbVNlbGVjdGVkQXVkaW9UcmFja0luZGV4KSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBtU2VsZWN0ZWRBdWRpb1RyYWNrSW5kZXggPSBwb3NpdGlvbjsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtQXVkaW9UcmFja0NvdW50ID4gMCkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJ1bmRsZSBleHRyYSA9IG5ldyBCdW5kbGUoKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHRyYS5wdXRJbnQoS0VZX1NFTEVDVEVEX0FVRElPX0lOREVYLCBwb3NpdGlvbik7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgbUNvbnRyb2xsZXIuc2VuZENvbW1hbmQoQ09NTUFORF9TRUxFQ1RfQVVESU9fVFJBQ0ssIGV4dHJhLCBudWxsKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgIG1TZXR0aW5nc1N1YlRleHRzTGlzdC5zZXQoU0VUVElOR1NfTU9ERV9BVURJT19UUkFDSywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbVN1YlNldHRpbmdzQWRhcHRlci5nZXRNYWluVGV4dChwb3NpdGlvbikpOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIG1TZXR0aW5nc1dpbmRvdy5kaXNtaXNzKCk7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIGNhc2UgU0VUVElOR1NfTU9ERV9QTEFZQkFDS19TUEVFRDoKLSAgICAgICAgICAgICAgICAgICAgaWYgKHBvc2l0aW9uICE9IG1TZWxlY3RlZFNwZWVkSW5kZXgpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIG1TZWxlY3RlZFNwZWVkSW5kZXggPSBwb3NpdGlvbjsKLSAgICAgICAgICAgICAgICAgICAgICAgIEJ1bmRsZSBleHRyYSA9IG5ldyBCdW5kbGUoKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGV4dHJhLnB1dEZsb2F0KEtFWV9QTEFZQkFDS19TUEVFRCwgbVBsYXliYWNrU3BlZWRMaXN0LmdldChwb3NpdGlvbikpOwotICAgICAgICAgICAgICAgICAgICAgICAgbUNvbnRyb2xsZXIuc2VuZENvbW1hbmQoQ09NTUFORF9TRVRfUExBWUJBQ0tfU1BFRUQsIGV4dHJhLCBudWxsKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIG1TZXR0aW5nc1N1YlRleHRzTGlzdC5zZXQoU0VUVElOR1NfTU9ERV9QTEFZQkFDS19TUEVFRCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbVN1YlNldHRpbmdzQWRhcHRlci5nZXRNYWluVGV4dChwb3NpdGlvbikpOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIG1TZXR0aW5nc1dpbmRvdy5kaXNtaXNzKCk7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIGNhc2UgU0VUVElOR1NfTU9ERV9IRUxQOgotICAgICAgICAgICAgICAgICAgICAvLyBUT0RPOiBpbXBsZW1lbnQgdGhpcy4KLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgY2FzZSBTRVRUSU5HU19NT0RFX1NVQlRJVExFX1RSQUNLOgotICAgICAgICAgICAgICAgICAgICBpZiAocG9zaXRpb24gIT0gbVNlbGVjdGVkU3VidGl0bGVUcmFja0luZGV4KSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBtU2VsZWN0ZWRTdWJ0aXRsZVRyYWNrSW5kZXggPSBwb3NpdGlvbjsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwb3NpdGlvbiA+IDApIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBCdW5kbGUgZXh0cmEgPSBuZXcgQnVuZGxlKCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgZXh0cmEucHV0SW50KEtFWV9TRUxFQ1RFRF9TVUJUSVRMRV9JTkRFWCwgcG9zaXRpb24gLSAxKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBtQ29udHJvbGxlci5zZW5kQ29tbWFuZCgKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1lZGlhQ29udHJvbFZpZXcySW1wbC5DT01NQU5EX1NIT1dfU1VCVElUTEUsIGV4dHJhLCBudWxsKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBtU3VidGl0bGVCdXR0b24uc2V0SW1hZ2VEcmF3YWJsZSgKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1SZXNvdXJjZXMuZ2V0RHJhd2FibGUoUi5kcmF3YWJsZS5pY19zdWJ0aXRsZV9vbiwgbnVsbCkpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1TdWJ0aXRsZUJ1dHRvbi5zZXRDb250ZW50RGVzY3JpcHRpb24oCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtUmVzb3VyY2VzLmdldFN0cmluZyhSLnN0cmluZy5tY3YyX2NjX2lzX29uKSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgbVN1YnRpdGxlSXNFbmFibGVkID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgbUNvbnRyb2xsZXIuc2VuZENvbW1hbmQoCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNZWRpYUNvbnRyb2xWaWV3MkltcGwuQ09NTUFORF9ISURFX1NVQlRJVExFLCBudWxsLCBudWxsKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBtU3VidGl0bGVCdXR0b24uc2V0SW1hZ2VEcmF3YWJsZSgKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1SZXNvdXJjZXMuZ2V0RHJhd2FibGUoUi5kcmF3YWJsZS5pY19zdWJ0aXRsZV9vZmYsIG51bGwpKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBtU3VidGl0bGVCdXR0b24uc2V0Q29udGVudERlc2NyaXB0aW9uKAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbVJlc291cmNlcy5nZXRTdHJpbmcoUi5zdHJpbmcubWN2Ml9jY19pc19vZmYpKTsKLQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1TdWJ0aXRsZUlzRW5hYmxlZCA9IGZhbHNlOwotICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIG1TZXR0aW5nc1dpbmRvdy5kaXNtaXNzKCk7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIGNhc2UgU0VUVElOR1NfTU9ERV9WSURFT19RVUFMSVRZOgotICAgICAgICAgICAgICAgICAgICAvLyBUT0RPOiBhZGQgc3VwcG9ydCBmb3IgdmlkZW8gcXVhbGl0eQotICAgICAgICAgICAgICAgICAgICBtU2VsZWN0ZWRWaWRlb1F1YWxpdHlJbmRleCA9IHBvc2l0aW9uOwotICAgICAgICAgICAgICAgICAgICBtU2V0dGluZ3NXaW5kb3cuZGlzbWlzcygpOwotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH07Ci0KLSAgICBwcml2YXRlIHZvaWQgdXBkYXRlRHVyYXRpb24oKSB7Ci0gICAgICAgIGlmIChtTWV0YWRhdGEgIT0gbnVsbCkgewotICAgICAgICAgICAgaWYgKG1NZXRhZGF0YS5jb250YWluc0tleShNZWRpYU1ldGFkYXRhLk1FVEFEQVRBX0tFWV9EVVJBVElPTikpIHsKLSAgICAgICAgICAgICAgICBtRHVyYXRpb24gPSAoaW50KSBtTWV0YWRhdGEuZ2V0TG9uZyhNZWRpYU1ldGFkYXRhLk1FVEFEQVRBX0tFWV9EVVJBVElPTik7Ci0gICAgICAgICAgICAgICAgLy8gdXBkYXRlIHByb2dyZXNzIGJhcgotICAgICAgICAgICAgICAgIHNldFByb2dyZXNzKCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBwcml2YXRlIHZvaWQgdXBkYXRlVGl0bGUoKSB7Ci0gICAgICAgIGlmIChtTWV0YWRhdGEgIT0gbnVsbCkgewotICAgICAgICAgICAgaWYgKG1NZXRhZGF0YS5jb250YWluc0tleShNZWRpYU1ldGFkYXRhLk1FVEFEQVRBX0tFWV9USVRMRSkpIHsKLSAgICAgICAgICAgICAgICBtVGl0bGVWaWV3LnNldFRleHQobU1ldGFkYXRhLmdldFN0cmluZyhNZWRpYU1ldGFkYXRhLk1FVEFEQVRBX0tFWV9USVRMRSkpOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotCi0gICAgLy8gVGhlIHRpdGxlIGJhciBpcyBtYWRlIHVwIG9mIHR3byBzZXBhcmF0ZSBMaW5lYXJMYXlvdXRzLiBJZiB0aGUgc3VtIG9mIHRoZSB0d28gYmFycyBhcmUKLSAgICAvLyBncmVhdGVyIHRoYW4gdGhlIGxlbmd0aCBvZiB0aGUgdGl0bGUgYmFyLCByZWR1Y2UgdGhlIHNpemUgb2YgdGhlIGxlZnQgYmFyICh3aGljaCBtYWtlcyB0aGUKLSAgICAvLyBUZXh0VmlldyB0aGF0IGNvbnRhaW5zIHRoZSB0aXRsZSBvZiB0aGUgbWVkaWEgZmlsZSBzaHJpbmspLgotICAgIHByaXZhdGUgdm9pZCB1cGRhdGVUaXRsZUJhckxheW91dCgpIHsKLSAgICAgICAgaWYgKG1UaXRsZUJhciAhPSBudWxsKSB7Ci0gICAgICAgICAgICBpbnQgdGl0bGVCYXJXaWR0aCA9IG1UaXRsZUJhci5nZXRXaWR0aCgpOwotCi0gICAgICAgICAgICBWaWV3IGxlZnRCYXIgPSBtVGl0bGVCYXIuZmluZFZpZXdCeUlkKFIuaWQudGl0bGVfYmFyX2xlZnQpOwotICAgICAgICAgICAgVmlldyByaWdodEJhciA9IG1UaXRsZUJhci5maW5kVmlld0J5SWQoUi5pZC50aXRsZV9iYXJfcmlnaHQpOwotICAgICAgICAgICAgaW50IGxlZnRCYXJXaWR0aCA9IGxlZnRCYXIuZ2V0V2lkdGgoKTsKLSAgICAgICAgICAgIGludCByaWdodEJhcldpZHRoID0gcmlnaHRCYXIuZ2V0V2lkdGgoKTsKLQotICAgICAgICAgICAgUmVsYXRpdmVMYXlvdXQuTGF5b3V0UGFyYW1zIHBhcmFtcyA9Ci0gICAgICAgICAgICAgICAgICAgIChSZWxhdGl2ZUxheW91dC5MYXlvdXRQYXJhbXMpIGxlZnRCYXIuZ2V0TGF5b3V0UGFyYW1zKCk7Ci0gICAgICAgICAgICBpZiAobGVmdEJhcldpZHRoICsgcmlnaHRCYXJXaWR0aCA+IHRpdGxlQmFyV2lkdGgpIHsKLSAgICAgICAgICAgICAgICBwYXJhbXMud2lkdGggPSB0aXRsZUJhcldpZHRoIC0gcmlnaHRCYXJXaWR0aDsKLSAgICAgICAgICAgICAgICBtT3JpZ2luYWxMZWZ0QmFyV2lkdGggPSBsZWZ0QmFyV2lkdGg7Ci0gICAgICAgICAgICB9IGVsc2UgaWYgKGxlZnRCYXJXaWR0aCArIHJpZ2h0QmFyV2lkdGggPCB0aXRsZUJhcldpZHRoICYmIG1PcmlnaW5hbExlZnRCYXJXaWR0aCAhPSAwKSB7Ci0gICAgICAgICAgICAgICAgcGFyYW1zLndpZHRoID0gbU9yaWdpbmFsTGVmdEJhcldpZHRoOwotICAgICAgICAgICAgICAgIG1PcmlnaW5hbExlZnRCYXJXaWR0aCA9IDA7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBsZWZ0QmFyLnNldExheW91dFBhcmFtcyhwYXJhbXMpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgcHJpdmF0ZSB2b2lkIHVwZGF0ZUF1ZGlvTWV0YWRhdGEoKSB7Ci0gICAgICAgIGlmIChtTWVkaWFUeXBlICE9IE1FRElBX1RZUEVfTVVTSUMpIHsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotCi0gICAgICAgIGlmIChtTWV0YWRhdGEgIT0gbnVsbCkgewotICAgICAgICAgICAgU3RyaW5nIHRpdGxlVGV4dCA9ICIiOwotICAgICAgICAgICAgU3RyaW5nIGFydGlzdFRleHQgPSAiIjsKLSAgICAgICAgICAgIGlmIChtTWV0YWRhdGEuY29udGFpbnNLZXkoTWVkaWFNZXRhZGF0YS5NRVRBREFUQV9LRVlfVElUTEUpKSB7Ci0gICAgICAgICAgICAgICAgdGl0bGVUZXh0ID0gbU1ldGFkYXRhLmdldFN0cmluZyhNZWRpYU1ldGFkYXRhLk1FVEFEQVRBX0tFWV9USVRMRSk7Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIHRpdGxlVGV4dCA9IG1SZXNvdXJjZXMuZ2V0U3RyaW5nKFIuc3RyaW5nLm1jdjJfbXVzaWNfdGl0bGVfdW5rbm93bl90ZXh0KTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgaWYgKG1NZXRhZGF0YS5jb250YWluc0tleShNZWRpYU1ldGFkYXRhLk1FVEFEQVRBX0tFWV9BUlRJU1QpKSB7Ci0gICAgICAgICAgICAgICAgYXJ0aXN0VGV4dCA9IG1NZXRhZGF0YS5nZXRTdHJpbmcoTWVkaWFNZXRhZGF0YS5NRVRBREFUQV9LRVlfQVJUSVNUKTsKLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgYXJ0aXN0VGV4dCA9IG1SZXNvdXJjZXMuZ2V0U3RyaW5nKFIuc3RyaW5nLm1jdjJfbXVzaWNfYXJ0aXN0X3Vua25vd25fdGV4dCk7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIC8vIFVwZGF0ZSB0aXRsZSBmb3IgRW1iZWRkZWQgc2l6ZSB0eXBlCi0gICAgICAgICAgICBtVGl0bGVWaWV3LnNldFRleHQodGl0bGVUZXh0ICsgIiAtICIgKyBhcnRpc3RUZXh0KTsKLQotICAgICAgICAgICAgLy8gU2V0IHRvIHRydWUgdG8gdXBkYXRlIGxheW91dCBpbnNpZGUgb25NZWFzdXJlKCkKLSAgICAgICAgICAgIG1OZWVkVVhVcGRhdGUgPSB0cnVlOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgcHJpdmF0ZSB2b2lkIHVwZGF0ZUxheW91dCgpIHsKLSAgICAgICAgaWYgKG1Jc0FkdmVydGlzZW1lbnQpIHsKLSAgICAgICAgICAgIG1SZXdCdXR0b24uc2V0VmlzaWJpbGl0eShWaWV3LkdPTkUpOwotICAgICAgICAgICAgbUZmd2RCdXR0b24uc2V0VmlzaWJpbGl0eShWaWV3LkdPTkUpOwotICAgICAgICAgICAgbVByZXZCdXR0b24uc2V0VmlzaWJpbGl0eShWaWV3LkdPTkUpOwotICAgICAgICAgICAgbVRpbWVWaWV3LnNldFZpc2liaWxpdHkoVmlldy5HT05FKTsKLQotICAgICAgICAgICAgbUFkU2tpcFZpZXcuc2V0VmlzaWJpbGl0eShWaWV3LlZJU0lCTEUpOwotICAgICAgICAgICAgbUFkUmVtYWluaW5nVmlldy5zZXRWaXNpYmlsaXR5KFZpZXcuVklTSUJMRSk7Ci0gICAgICAgICAgICBtQWRFeHRlcm5hbExpbmsuc2V0VmlzaWJpbGl0eShWaWV3LlZJU0lCTEUpOwotCi0gICAgICAgICAgICBtUHJvZ3Jlc3Muc2V0RW5hYmxlZChmYWxzZSk7Ci0gICAgICAgICAgICBtTmV4dEJ1dHRvbi5zZXRFbmFibGVkKGZhbHNlKTsKLSAgICAgICAgICAgIG1OZXh0QnV0dG9uLnNldENvbG9yRmlsdGVyKFIuY29sb3IuZ3JheSk7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBtUmV3QnV0dG9uLnNldFZpc2liaWxpdHkoVmlldy5WSVNJQkxFKTsKLSAgICAgICAgICAgIG1GZndkQnV0dG9uLnNldFZpc2liaWxpdHkoVmlldy5WSVNJQkxFKTsKLSAgICAgICAgICAgIG1QcmV2QnV0dG9uLnNldFZpc2liaWxpdHkoVmlldy5WSVNJQkxFKTsKLSAgICAgICAgICAgIG1UaW1lVmlldy5zZXRWaXNpYmlsaXR5KFZpZXcuVklTSUJMRSk7Ci0KLSAgICAgICAgICAgIG1BZFNraXBWaWV3LnNldFZpc2liaWxpdHkoVmlldy5HT05FKTsKLSAgICAgICAgICAgIG1BZFJlbWFpbmluZ1ZpZXcuc2V0VmlzaWJpbGl0eShWaWV3LkdPTkUpOwotICAgICAgICAgICAgbUFkRXh0ZXJuYWxMaW5rLnNldFZpc2liaWxpdHkoVmlldy5HT05FKTsKLQotICAgICAgICAgICAgbVByb2dyZXNzLnNldEVuYWJsZWQodHJ1ZSk7Ci0gICAgICAgICAgICBtTmV4dEJ1dHRvbi5zZXRFbmFibGVkKHRydWUpOwotICAgICAgICAgICAgbU5leHRCdXR0b24uY2xlYXJDb2xvckZpbHRlcigpOwotICAgICAgICAgICAgZGlzYWJsZVVuc3VwcG9ydGVkQnV0dG9ucygpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgcHJpdmF0ZSB2b2lkIHVwZGF0ZUxheW91dChpbnQgbWF4SWNvbkNvdW50LCBpbnQgZnVsbEljb25TaXplLCBpbnQgZW1iZWRkZWRJY29uU2l6ZSwKLSAgICAgICAgICAgICBpbnQgbWFyZ2luU2l6ZSwgaW50IGN1cnJXaWR0aCwgaW50IGN1cnJIZWlnaHQsIGludCBzY3JlZW5XaWR0aCwgaW50IHNjcmVlbkhlaWdodCkgewotICAgICAgICBpbnQgZnVsbEJvdHRvbUJhclJpZ2h0V2lkdGhNYXggPSBmdWxsSWNvblNpemUgKiBtYXhJY29uQ291bnQKLSAgICAgICAgICAgICAgICArIG1hcmdpblNpemUgKiAobWF4SWNvbkNvdW50ICogMik7Ci0gICAgICAgIGludCBlbWJlZGRlZEJvdHRvbUJhclJpZ2h0V2lkdGhNYXggPSBlbWJlZGRlZEljb25TaXplICogbWF4SWNvbkNvdW50Ci0gICAgICAgICAgICAgICAgKyBtYXJnaW5TaXplICogKG1heEljb25Db3VudCAqIDIpOwotICAgICAgICBpbnQgZnVsbFdpZHRoID0gbVRyYW5zcG9ydENvbnRyb2xzLmdldFdpZHRoKCkgKyBtVGltZVZpZXcuZ2V0V2lkdGgoKQotICAgICAgICAgICAgICAgICsgZnVsbEJvdHRvbUJhclJpZ2h0V2lkdGhNYXg7Ci0gICAgICAgIGludCBlbWJlZGRlZFdpZHRoID0gbVRpbWVWaWV3LmdldFdpZHRoKCkgKyBlbWJlZGRlZEJvdHRvbUJhclJpZ2h0V2lkdGhNYXg7Ci0gICAgICAgIGludCBzY3JlZW5NYXhMZW5ndGggPSBNYXRoLm1heChzY3JlZW5XaWR0aCwgc2NyZWVuSGVpZ2h0KTsKLQotICAgICAgICBpZiAoZnVsbFdpZHRoID4gc2NyZWVuTWF4TGVuZ3RoKSB7Ci0gICAgICAgICAgICAvLyBUT0RPOiBzY3JlZW4gbWF5IGJlIHNtYWxsZXIgdGhhbiB0aGUgbGVuZ3RoIG5lZWRlZCBmb3IgRnVsbCBzaXplLgotICAgICAgICB9Ci0KLSAgICAgICAgYm9vbGVhbiBpc0Z1bGxTaXplID0gKG1NZWRpYVR5cGUgPT0gTUVESUFfVFlQRV9ERUZBVUxUKSA/IChjdXJyV2lkdGggPT0gc2NyZWVuTWF4TGVuZ3RoKSA6Ci0gICAgICAgICAgICAgICAgKGN1cnJXaWR0aCA9PSBzY3JlZW5XaWR0aCAmJiBjdXJySGVpZ2h0ID09IHNjcmVlbkhlaWdodCk7Ci0KLSAgICAgICAgaWYgKGlzRnVsbFNpemUpIHsKLSAgICAgICAgICAgIGlmIChtU2l6ZVR5cGUgIT0gU0laRV9UWVBFX0ZVTEwpIHsKLSAgICAgICAgICAgICAgICB1cGRhdGVMYXlvdXRGb3JTaXplQ2hhbmdlKFNJWkVfVFlQRV9GVUxMKTsKLSAgICAgICAgICAgICAgICBpZiAobU1lZGlhVHlwZSA9PSBNRURJQV9UWVBFX01VU0lDKSB7Ci0gICAgICAgICAgICAgICAgICAgIG1UaXRsZVZpZXcuc2V0VmlzaWJpbGl0eShWaWV3LkdPTkUpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgfSBlbHNlIGlmIChlbWJlZGRlZFdpZHRoIDw9IGN1cnJXaWR0aCkgewotICAgICAgICAgICAgaWYgKG1TaXplVHlwZSAhPSBTSVpFX1RZUEVfRU1CRURERUQpIHsKLSAgICAgICAgICAgICAgICB1cGRhdGVMYXlvdXRGb3JTaXplQ2hhbmdlKFNJWkVfVFlQRV9FTUJFRERFRCk7Ci0gICAgICAgICAgICAgICAgaWYgKG1NZWRpYVR5cGUgPT0gTUVESUFfVFlQRV9NVVNJQykgewotICAgICAgICAgICAgICAgICAgICBtVGl0bGVWaWV3LnNldFZpc2liaWxpdHkoVmlldy5WSVNJQkxFKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBpZiAobVNpemVUeXBlICE9IFNJWkVfVFlQRV9NSU5JTUFMKSB7Ci0gICAgICAgICAgICAgICAgdXBkYXRlTGF5b3V0Rm9yU2l6ZUNoYW5nZShTSVpFX1RZUEVfTUlOSU1BTCk7Ci0gICAgICAgICAgICAgICAgaWYgKG1NZWRpYVR5cGUgPT0gTUVESUFfVFlQRV9NVVNJQykgewotICAgICAgICAgICAgICAgICAgICBtVGl0bGVWaWV3LnNldFZpc2liaWxpdHkoVmlldy5HT05FKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBwcml2YXRlIHZvaWQgdXBkYXRlTGF5b3V0Rm9yU2l6ZUNoYW5nZShpbnQgc2l6ZVR5cGUpIHsKLSAgICAgICAgbVNpemVUeXBlID0gc2l6ZVR5cGU7Ci0gICAgICAgIFJlbGF0aXZlTGF5b3V0LkxheW91dFBhcmFtcyB0aW1lVmlld1BhcmFtcyA9Ci0gICAgICAgICAgICAgICAgKFJlbGF0aXZlTGF5b3V0LkxheW91dFBhcmFtcykgbVRpbWVWaWV3LmdldExheW91dFBhcmFtcygpOwotICAgICAgICBTZWVrQmFyIHNlZWtlciA9IChTZWVrQmFyKSBtUHJvZ3Jlc3M7Ci0gICAgICAgIHN3aXRjaCAobVNpemVUeXBlKSB7Ci0gICAgICAgICAgICBjYXNlIFNJWkVfVFlQRV9FTUJFRERFRDoKLSAgICAgICAgICAgICAgICAvLyBSZWxhdGluZyB0byBUaXRsZSBCYXIKLSAgICAgICAgICAgICAgICBtVGl0bGVCYXIuc2V0VmlzaWJpbGl0eShWaWV3LlZJU0lCTEUpOwotICAgICAgICAgICAgICAgIG1CYWNrQnV0dG9uLnNldFZpc2liaWxpdHkoVmlldy5HT05FKTsKLQotICAgICAgICAgICAgICAgIC8vIFJlbGF0aW5nIHRvIEZ1bGwgU2NyZWVuIEJ1dHRvbgotICAgICAgICAgICAgICAgIG1NaW5pbWFsRXh0cmFWaWV3LnNldFZpc2liaWxpdHkoVmlldy5HT05FKTsKLSAgICAgICAgICAgICAgICBtRnVsbFNjcmVlbkJ1dHRvbiA9IG1Cb3R0b21CYXJSaWdodFZpZXcuZmluZFZpZXdCeUlkKFIuaWQuZnVsbHNjcmVlbik7Ci0gICAgICAgICAgICAgICAgbUZ1bGxTY3JlZW5CdXR0b24uc2V0T25DbGlja0xpc3RlbmVyKG1GdWxsU2NyZWVuTGlzdGVuZXIpOwotCi0gICAgICAgICAgICAgICAgLy8gUmVsYXRpbmcgdG8gQ2VudGVyIFZpZXcKLSAgICAgICAgICAgICAgICBtQ2VudGVyVmlldy5yZW1vdmVBbGxWaWV3cygpOwotICAgICAgICAgICAgICAgIG1Cb3R0b21CYXJMZWZ0Vmlldy5yZW1vdmVWaWV3KG1UcmFuc3BvcnRDb250cm9scyk7Ci0gICAgICAgICAgICAgICAgbUJvdHRvbUJhckxlZnRWaWV3LnNldFZpc2liaWxpdHkoVmlldy5HT05FKTsKLSAgICAgICAgICAgICAgICBtVHJhbnNwb3J0Q29udHJvbHMgPSBpbmZsYXRlVHJhbnNwb3J0Q29udHJvbHMoUi5sYXlvdXQuZW1iZWRkZWRfdHJhbnNwb3J0X2NvbnRyb2xzKTsKLSAgICAgICAgICAgICAgICBtQ2VudGVyVmlldy5hZGRWaWV3KG1UcmFuc3BvcnRDb250cm9scyk7Ci0KLSAgICAgICAgICAgICAgICAvLyBSZWxhdGluZyB0byBQcm9ncmVzcyBCYXIKLSAgICAgICAgICAgICAgICBzZWVrZXIuc2V0VGh1bWIobVJlc291cmNlcy5nZXREcmF3YWJsZShSLmRyYXdhYmxlLmN1c3RvbV9wcm9ncmVzc190aHVtYikpOwotICAgICAgICAgICAgICAgIG1Qcm9ncmVzc0J1ZmZlci5zZXRWaXNpYmlsaXR5KFZpZXcuVklTSUJMRSk7Ci0KLSAgICAgICAgICAgICAgICAvLyBSZWxhdGluZyB0byBCb3R0b20gQmFyCi0gICAgICAgICAgICAgICAgbUJvdHRvbUJhci5zZXRWaXNpYmlsaXR5KFZpZXcuVklTSUJMRSk7Ci0gICAgICAgICAgICAgICAgaWYgKHRpbWVWaWV3UGFyYW1zLmdldFJ1bGUoUmVsYXRpdmVMYXlvdXQuTEVGVF9PRikgIT0gMCkgewotICAgICAgICAgICAgICAgICAgICB0aW1lVmlld1BhcmFtcy5yZW1vdmVSdWxlKFJlbGF0aXZlTGF5b3V0LkxFRlRfT0YpOwotICAgICAgICAgICAgICAgICAgICB0aW1lVmlld1BhcmFtcy5hZGRSdWxlKFJlbGF0aXZlTGF5b3V0LlJJR0hUX09GLCBSLmlkLmJvdHRvbV9iYXJfbGVmdCk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgY2FzZSBTSVpFX1RZUEVfRlVMTDoKLSAgICAgICAgICAgICAgICAvLyBSZWxhdGluZyB0byBUaXRsZSBCYXIKLSAgICAgICAgICAgICAgICBtVGl0bGVCYXIuc2V0VmlzaWJpbGl0eShWaWV3LlZJU0lCTEUpOwotICAgICAgICAgICAgICAgIG1CYWNrQnV0dG9uLnNldFZpc2liaWxpdHkoVmlldy5WSVNJQkxFKTsKLQotICAgICAgICAgICAgICAgIC8vIFJlbGF0aW5nIHRvIEZ1bGwgU2NyZWVuIEJ1dHRvbgotICAgICAgICAgICAgICAgIG1NaW5pbWFsRXh0cmFWaWV3LnNldFZpc2liaWxpdHkoVmlldy5HT05FKTsKLSAgICAgICAgICAgICAgICBtRnVsbFNjcmVlbkJ1dHRvbiA9IG1Cb3R0b21CYXJSaWdodFZpZXcuZmluZFZpZXdCeUlkKFIuaWQuZnVsbHNjcmVlbik7Ci0gICAgICAgICAgICAgICAgbUZ1bGxTY3JlZW5CdXR0b24uc2V0T25DbGlja0xpc3RlbmVyKG1GdWxsU2NyZWVuTGlzdGVuZXIpOwotCi0gICAgICAgICAgICAgICAgLy8gUmVsYXRpbmcgdG8gQ2VudGVyIFZpZXcKLSAgICAgICAgICAgICAgICBtQ2VudGVyVmlldy5yZW1vdmVBbGxWaWV3cygpOwotICAgICAgICAgICAgICAgIG1Cb3R0b21CYXJMZWZ0Vmlldy5yZW1vdmVWaWV3KG1UcmFuc3BvcnRDb250cm9scyk7Ci0gICAgICAgICAgICAgICAgbVRyYW5zcG9ydENvbnRyb2xzID0gaW5mbGF0ZVRyYW5zcG9ydENvbnRyb2xzKFIubGF5b3V0LmZ1bGxfdHJhbnNwb3J0X2NvbnRyb2xzKTsKLSAgICAgICAgICAgICAgICBtQm90dG9tQmFyTGVmdFZpZXcuYWRkVmlldyhtVHJhbnNwb3J0Q29udHJvbHMsIDApOwotICAgICAgICAgICAgICAgIG1Cb3R0b21CYXJMZWZ0Vmlldy5zZXRWaXNpYmlsaXR5KFZpZXcuVklTSUJMRSk7Ci0KLSAgICAgICAgICAgICAgICAvLyBSZWxhdGluZyB0byBQcm9ncmVzcyBCYXIKLSAgICAgICAgICAgICAgICBzZWVrZXIuc2V0VGh1bWIobVJlc291cmNlcy5nZXREcmF3YWJsZShSLmRyYXdhYmxlLmN1c3RvbV9wcm9ncmVzc190aHVtYikpOwotICAgICAgICAgICAgICAgIG1Qcm9ncmVzc0J1ZmZlci5zZXRWaXNpYmlsaXR5KFZpZXcuVklTSUJMRSk7Ci0KLSAgICAgICAgICAgICAgICAvLyBSZWxhdGluZyB0byBCb3R0b20gQmFyCi0gICAgICAgICAgICAgICAgbUJvdHRvbUJhci5zZXRWaXNpYmlsaXR5KFZpZXcuVklTSUJMRSk7Ci0gICAgICAgICAgICAgICAgaWYgKHRpbWVWaWV3UGFyYW1zLmdldFJ1bGUoUmVsYXRpdmVMYXlvdXQuUklHSFRfT0YpICE9IDApIHsKLSAgICAgICAgICAgICAgICAgICAgdGltZVZpZXdQYXJhbXMucmVtb3ZlUnVsZShSZWxhdGl2ZUxheW91dC5SSUdIVF9PRik7Ci0gICAgICAgICAgICAgICAgICAgIHRpbWVWaWV3UGFyYW1zLmFkZFJ1bGUoUmVsYXRpdmVMYXlvdXQuTEVGVF9PRiwgUi5pZC5ib3R0b21fYmFyX3JpZ2h0KTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlIFNJWkVfVFlQRV9NSU5JTUFMOgotICAgICAgICAgICAgICAgIC8vIFJlbGF0aW5nIHRvIFRpdGxlIEJhcgotICAgICAgICAgICAgICAgIG1UaXRsZUJhci5zZXRWaXNpYmlsaXR5KFZpZXcuR09ORSk7Ci0gICAgICAgICAgICAgICAgbUJhY2tCdXR0b24uc2V0VmlzaWJpbGl0eShWaWV3LkdPTkUpOwotCi0gICAgICAgICAgICAgICAgLy8gUmVsYXRpbmcgdG8gRnVsbCBTY3JlZW4gQnV0dG9uCi0gICAgICAgICAgICAgICAgbU1pbmltYWxFeHRyYVZpZXcuc2V0VmlzaWJpbGl0eShWaWV3LlZJU0lCTEUpOwotICAgICAgICAgICAgICAgIG1GdWxsU2NyZWVuQnV0dG9uID0gbU1pbmltYWxFeHRyYVZpZXcuZmluZFZpZXdCeUlkKFIuaWQuZnVsbHNjcmVlbik7Ci0gICAgICAgICAgICAgICAgbUZ1bGxTY3JlZW5CdXR0b24uc2V0T25DbGlja0xpc3RlbmVyKG1GdWxsU2NyZWVuTGlzdGVuZXIpOwotCi0gICAgICAgICAgICAgICAgLy8gUmVsYXRpbmcgdG8gQ2VudGVyIFZpZXcKLSAgICAgICAgICAgICAgICBtQ2VudGVyVmlldy5yZW1vdmVBbGxWaWV3cygpOwotICAgICAgICAgICAgICAgIG1Cb3R0b21CYXJMZWZ0Vmlldy5yZW1vdmVWaWV3KG1UcmFuc3BvcnRDb250cm9scyk7Ci0gICAgICAgICAgICAgICAgbVRyYW5zcG9ydENvbnRyb2xzID0gaW5mbGF0ZVRyYW5zcG9ydENvbnRyb2xzKFIubGF5b3V0Lm1pbmltYWxfdHJhbnNwb3J0X2NvbnRyb2xzKTsKLSAgICAgICAgICAgICAgICBtQ2VudGVyVmlldy5hZGRWaWV3KG1UcmFuc3BvcnRDb250cm9scyk7Ci0KLSAgICAgICAgICAgICAgICAvLyBSZWxhdGluZyB0byBQcm9ncmVzcyBCYXIKLSAgICAgICAgICAgICAgICBzZWVrZXIuc2V0VGh1bWIobnVsbCk7Ci0gICAgICAgICAgICAgICAgbVByb2dyZXNzQnVmZmVyLnNldFZpc2liaWxpdHkoVmlldy5HT05FKTsKLQotICAgICAgICAgICAgICAgIC8vIFJlbGF0aW5nIHRvIEJvdHRvbSBCYXIKLSAgICAgICAgICAgICAgICBtQm90dG9tQmFyLnNldFZpc2liaWxpdHkoVmlldy5HT05FKTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBtVGltZVZpZXcuc2V0TGF5b3V0UGFyYW1zKHRpbWVWaWV3UGFyYW1zKTsKLQotICAgICAgICBpZiAoaXNQbGF5aW5nKCkpIHsKLSAgICAgICAgICAgIG1QbGF5UGF1c2VCdXR0b24uc2V0SW1hZ2VEcmF3YWJsZSgKLSAgICAgICAgICAgICAgICAgICAgbVJlc291cmNlcy5nZXREcmF3YWJsZShSLmRyYXdhYmxlLmljX3BhdXNlX2NpcmNsZV9maWxsZWQsIG51bGwpKTsKLSAgICAgICAgICAgIG1QbGF5UGF1c2VCdXR0b24uc2V0Q29udGVudERlc2NyaXB0aW9uKAotICAgICAgICAgICAgICAgICAgICBtUmVzb3VyY2VzLmdldFN0cmluZyhSLnN0cmluZy5tY3YyX3BhdXNlX2J1dHRvbl9kZXNjKSk7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBtUGxheVBhdXNlQnV0dG9uLnNldEltYWdlRHJhd2FibGUoCi0gICAgICAgICAgICAgICAgICAgIG1SZXNvdXJjZXMuZ2V0RHJhd2FibGUoUi5kcmF3YWJsZS5pY19wbGF5X2NpcmNsZV9maWxsZWQsIG51bGwpKTsKLSAgICAgICAgICAgIG1QbGF5UGF1c2VCdXR0b24uc2V0Q29udGVudERlc2NyaXB0aW9uKAotICAgICAgICAgICAgICAgICAgICBtUmVzb3VyY2VzLmdldFN0cmluZyhSLnN0cmluZy5tY3YyX3BsYXlfYnV0dG9uX2Rlc2MpKTsKLSAgICAgICAgfQotCi0gICAgICAgIGlmIChtSXNGdWxsU2NyZWVuKSB7Ci0gICAgICAgICAgICBtRnVsbFNjcmVlbkJ1dHRvbi5zZXRJbWFnZURyYXdhYmxlKAotICAgICAgICAgICAgICAgICAgICBtUmVzb3VyY2VzLmdldERyYXdhYmxlKFIuZHJhd2FibGUuaWNfZnVsbHNjcmVlbl9leGl0LCBudWxsKSk7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBtRnVsbFNjcmVlbkJ1dHRvbi5zZXRJbWFnZURyYXdhYmxlKAotICAgICAgICAgICAgICAgICAgICBtUmVzb3VyY2VzLmdldERyYXdhYmxlKFIuZHJhd2FibGUuaWNfZnVsbHNjcmVlbiwgbnVsbCkpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgcHJpdmF0ZSBWaWV3IGluZmxhdGVUcmFuc3BvcnRDb250cm9scyhpbnQgbGF5b3V0SWQpIHsKLSAgICAgICAgVmlldyB2ID0gQXBpSGVscGVyLmluZmxhdGVMaWJMYXlvdXQobUluc3RhbmNlLmdldENvbnRleHQoKSwgbGF5b3V0SWQpOwotICAgICAgICBtUGxheVBhdXNlQnV0dG9uID0gdi5maW5kVmlld0J5SWQoUi5pZC5wYXVzZSk7Ci0gICAgICAgIGlmIChtUGxheVBhdXNlQnV0dG9uICE9IG51bGwpIHsKLSAgICAgICAgICAgIG1QbGF5UGF1c2VCdXR0b24ucmVxdWVzdEZvY3VzKCk7Ci0gICAgICAgICAgICBtUGxheVBhdXNlQnV0dG9uLnNldE9uQ2xpY2tMaXN0ZW5lcihtUGxheVBhdXNlTGlzdGVuZXIpOwotICAgICAgICB9Ci0gICAgICAgIG1GZndkQnV0dG9uID0gdi5maW5kVmlld0J5SWQoUi5pZC5mZndkKTsKLSAgICAgICAgaWYgKG1GZndkQnV0dG9uICE9IG51bGwpIHsKLSAgICAgICAgICAgIG1GZndkQnV0dG9uLnNldE9uQ2xpY2tMaXN0ZW5lcihtRmZ3ZExpc3RlbmVyKTsKLSAgICAgICAgICAgIGlmIChtTWVkaWFUeXBlID09IE1FRElBX1RZUEVfTVVTSUMpIHsKLSAgICAgICAgICAgICAgICBtRmZ3ZEJ1dHRvbi5zZXRWaXNpYmlsaXR5KFZpZXcuR09ORSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgbVJld0J1dHRvbiA9IHYuZmluZFZpZXdCeUlkKFIuaWQucmV3KTsKLSAgICAgICAgaWYgKG1SZXdCdXR0b24gIT0gbnVsbCkgewotICAgICAgICAgICAgbVJld0J1dHRvbi5zZXRPbkNsaWNrTGlzdGVuZXIobVJld0xpc3RlbmVyKTsKLSAgICAgICAgICAgIGlmIChtTWVkaWFUeXBlID09IE1FRElBX1RZUEVfTVVTSUMpIHsKLSAgICAgICAgICAgICAgICBtUmV3QnV0dG9uLnNldFZpc2liaWxpdHkoVmlldy5HT05FKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICAvLyBUT0RPOiBBZGQgc3VwcG9ydCBmb3IgTmV4dCBhbmQgUHJldmlvdXMgYnV0dG9ucwotICAgICAgICBtTmV4dEJ1dHRvbiA9IHYuZmluZFZpZXdCeUlkKFIuaWQubmV4dCk7Ci0gICAgICAgIGlmIChtTmV4dEJ1dHRvbiAhPSBudWxsKSB7Ci0gICAgICAgICAgICBtTmV4dEJ1dHRvbi5zZXRPbkNsaWNrTGlzdGVuZXIobU5leHRMaXN0ZW5lcik7Ci0gICAgICAgICAgICBtTmV4dEJ1dHRvbi5zZXRWaXNpYmlsaXR5KFZpZXcuR09ORSk7Ci0gICAgICAgIH0KLSAgICAgICAgbVByZXZCdXR0b24gPSB2LmZpbmRWaWV3QnlJZChSLmlkLnByZXYpOwotICAgICAgICBpZiAobVByZXZCdXR0b24gIT0gbnVsbCkgewotICAgICAgICAgICAgbVByZXZCdXR0b24uc2V0T25DbGlja0xpc3RlbmVyKG1QcmV2TGlzdGVuZXIpOwotICAgICAgICAgICAgbVByZXZCdXR0b24uc2V0VmlzaWJpbGl0eShWaWV3LkdPTkUpOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiB2OwotICAgIH0KLQotICAgIHByaXZhdGUgdm9pZCBpbml0aWFsaXplU2V0dGluZ3NMaXN0cygpIHsKLSAgICAgICAgbVNldHRpbmdzTWFpblRleHRzTGlzdCA9IG5ldyBBcnJheUxpc3Q8U3RyaW5nPigpOwotICAgICAgICBtU2V0dGluZ3NNYWluVGV4dHNMaXN0LmFkZCgKLSAgICAgICAgICAgICAgICBtUmVzb3VyY2VzLmdldFN0cmluZyhSLnN0cmluZy5NZWRpYUNvbnRyb2xWaWV3Ml9hdWRpb190cmFja190ZXh0KSk7Ci0gICAgICAgIG1TZXR0aW5nc01haW5UZXh0c0xpc3QuYWRkKAotICAgICAgICAgICAgICAgIG1SZXNvdXJjZXMuZ2V0U3RyaW5nKFIuc3RyaW5nLk1lZGlhQ29udHJvbFZpZXcyX3BsYXliYWNrX3NwZWVkX3RleHQpKTsKLSAgICAgICAgbVNldHRpbmdzTWFpblRleHRzTGlzdC5hZGQoCi0gICAgICAgICAgICAgICAgbVJlc291cmNlcy5nZXRTdHJpbmcoUi5zdHJpbmcuTWVkaWFDb250cm9sVmlldzJfaGVscF90ZXh0KSk7Ci0KLSAgICAgICAgbVNldHRpbmdzU3ViVGV4dHNMaXN0ID0gbmV3IEFycmF5TGlzdDxTdHJpbmc+KCk7Ci0gICAgICAgIG1TZXR0aW5nc1N1YlRleHRzTGlzdC5hZGQoCi0gICAgICAgICAgICAgICAgbVJlc291cmNlcy5nZXRTdHJpbmcoUi5zdHJpbmcuTWVkaWFDb250cm9sVmlldzJfYXVkaW9fdHJhY2tfbm9uZV90ZXh0KSk7Ci0gICAgICAgIG1TZXR0aW5nc1N1YlRleHRzTGlzdC5hZGQoCi0gICAgICAgICAgICAgICAgbVJlc291cmNlcy5nZXRTdHJpbmdBcnJheSgKLSAgICAgICAgICAgICAgICAgICAgICAgIFIuYXJyYXkuTWVkaWFDb250cm9sVmlldzJfcGxheWJhY2tfc3BlZWRzKVtQTEFZQkFDS19TUEVFRF8xeF9JTkRFWF0pOwotICAgICAgICBtU2V0dGluZ3NTdWJUZXh0c0xpc3QuYWRkKFJFU09VUkNFX0VNUFRZKTsKLQotICAgICAgICBtU2V0dGluZ3NJY29uSWRzTGlzdCA9IG5ldyBBcnJheUxpc3Q8SW50ZWdlcj4oKTsKLSAgICAgICAgbVNldHRpbmdzSWNvbklkc0xpc3QuYWRkKFIuZHJhd2FibGUuaWNfYXVkaW90cmFjayk7Ci0gICAgICAgIG1TZXR0aW5nc0ljb25JZHNMaXN0LmFkZChSLmRyYXdhYmxlLmljX3BsYXlfY2lyY2xlX2ZpbGxlZCk7Ci0gICAgICAgIG1TZXR0aW5nc0ljb25JZHNMaXN0LmFkZChSLmRyYXdhYmxlLmljX2hlbHApOwotCi0gICAgICAgIG1BdWRpb1RyYWNrTGlzdCA9IG5ldyBBcnJheUxpc3Q8U3RyaW5nPigpOwotICAgICAgICBtQXVkaW9UcmFja0xpc3QuYWRkKAotICAgICAgICAgICAgICAgIG1SZXNvdXJjZXMuZ2V0U3RyaW5nKFIuc3RyaW5nLk1lZGlhQ29udHJvbFZpZXcyX2F1ZGlvX3RyYWNrX25vbmVfdGV4dCkpOwotCi0gICAgICAgIG1WaWRlb1F1YWxpdHlMaXN0ID0gbmV3IEFycmF5TGlzdDxTdHJpbmc+KCk7Ci0gICAgICAgIG1WaWRlb1F1YWxpdHlMaXN0LmFkZCgKLSAgICAgICAgICAgICAgICBtUmVzb3VyY2VzLmdldFN0cmluZyhSLnN0cmluZy5NZWRpYUNvbnRyb2xWaWV3Ml92aWRlb19xdWFsaXR5X2F1dG9fdGV4dCkpOwotCi0gICAgICAgIG1QbGF5YmFja1NwZWVkVGV4dExpc3QgPSBuZXcgQXJyYXlMaXN0PFN0cmluZz4oQXJyYXlzLmFzTGlzdCgKLSAgICAgICAgICAgICAgICBtUmVzb3VyY2VzLmdldFN0cmluZ0FycmF5KFIuYXJyYXkuTWVkaWFDb250cm9sVmlldzJfcGxheWJhY2tfc3BlZWRzKSkpOwotICAgICAgICAvLyBTZWxlY3QgdGhlICIxeCIgc3BlZWQgYXMgdGhlIGRlZmF1bHQgdmFsdWUuCi0gICAgICAgIG1TZWxlY3RlZFNwZWVkSW5kZXggPSBQTEFZQkFDS19TUEVFRF8xeF9JTkRFWDsKLQotICAgICAgICBtUGxheWJhY2tTcGVlZExpc3QgPSBuZXcgQXJyYXlMaXN0PEZsb2F0PigpOwotICAgICAgICBpbnRbXSBzcGVlZHMgPSBtUmVzb3VyY2VzLmdldEludEFycmF5KFIuYXJyYXkuc3BlZWRfbXVsdGlwbGllZF9ieV8xMDApOwotICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IHNwZWVkcy5sZW5ndGg7IGkrKykgewotICAgICAgICAgICAgZmxvYXQgc3BlZWQgPSAoZmxvYXQpIHNwZWVkc1tpXSAvIDEwMC4wZjsKLSAgICAgICAgICAgIG1QbGF5YmFja1NwZWVkTGlzdC5hZGQoc3BlZWQpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgcHJpdmF0ZSB2b2lkIGRpc3BsYXlTZXR0aW5nc1dpbmRvdyhCYXNlQWRhcHRlciBhZGFwdGVyKSB7Ci0gICAgICAgIC8vIFNldCBBZGFwdGVyCi0gICAgICAgIG1TZXR0aW5nc0xpc3RWaWV3LnNldEFkYXB0ZXIoYWRhcHRlcik7Ci0KLSAgICAgICAgLy8gU2V0IHdpZHRoIG9mIHdpbmRvdwotICAgICAgICBpbnQgaXRlbVdpZHRoID0gKG1TaXplVHlwZSA9PSBTSVpFX1RZUEVfRU1CRURERUQpCi0gICAgICAgICAgICAgICAgPyBtRW1iZWRkZWRTZXR0aW5nc0l0ZW1XaWR0aCA6IG1GdWxsU2V0dGluZ3NJdGVtV2lkdGg7Ci0gICAgICAgIG1TZXR0aW5nc1dpbmRvdy5zZXRXaWR0aChpdGVtV2lkdGgpOwotCi0gICAgICAgIC8vIENhbGN1bGF0ZSBoZWlnaHQgb2Ygd2luZG93IGFuZCBzaG93Ci0gICAgICAgIGludCBpdGVtSGVpZ2h0ID0gKG1TaXplVHlwZSA9PSBTSVpFX1RZUEVfRU1CRURERUQpCi0gICAgICAgICAgICAgICAgPyBtRW1iZWRkZWRTZXR0aW5nc0l0ZW1IZWlnaHQgOiBtRnVsbFNldHRpbmdzSXRlbUhlaWdodDsKLSAgICAgICAgaW50IHRvdGFsSGVpZ2h0ID0gYWRhcHRlci5nZXRDb3VudCgpICogaXRlbUhlaWdodDsKLSAgICAgICAgbVNldHRpbmdzV2luZG93LmRpc21pc3MoKTsKLSAgICAgICAgbVNldHRpbmdzV2luZG93LnNob3dBc0Ryb3BEb3duKG1JbnN0YW5jZSwgbVNldHRpbmdzV2luZG93TWFyZ2luLAotICAgICAgICAgICAgICAgIG1TZXR0aW5nc1dpbmRvd01hcmdpbiAtIHRvdGFsSGVpZ2h0LCBHcmF2aXR5LkJPVFRPTSB8IEdyYXZpdHkuUklHSFQpOwotICAgIH0KLQotICAgIHByaXZhdGUgY2xhc3MgTWVkaWFDb250cm9sbGVyQ2FsbGJhY2sgZXh0ZW5kcyBNZWRpYUNvbnRyb2xsZXIuQ2FsbGJhY2sgewotICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgcHVibGljIHZvaWQgb25QbGF5YmFja1N0YXRlQ2hhbmdlZChQbGF5YmFja1N0YXRlIHN0YXRlKSB7Ci0gICAgICAgICAgICBtUGxheWJhY2tTdGF0ZSA9IHN0YXRlOwotCi0gICAgICAgICAgICAvLyBVcGRhdGUgcGF1c2UgYnV0dG9uIGRlcGVuZGluZyBvbiBwbGF5YmFjayBzdGF0ZSBmb3IgdGhlIGZvbGxvd2luZyB0d28gcmVhc29uczoKLSAgICAgICAgICAgIC8vICAgMSkgTmVlZCB0byBoYW5kbGUgY2FzZSB3aGVyZSBhcHAgY3VzdG9taXplcyBwbGF5YmFjayBzdGF0ZSBiZWhhdmlvciB3aGVuIGFwcAotICAgICAgICAgICAgLy8gICAgICBhY3Rpdml0eSBpcyByZXN1bWVkLgotICAgICAgICAgICAgLy8gICAyKSBOZWVkIHRvIGhhbmRsZSBjYXNlIHdoZXJlIHRoZSBtZWRpYSBmaWxlIHJlYWNoZXMgZW5kIG9mIGR1cmF0aW9uLgotICAgICAgICAgICAgaWYgKG1QbGF5YmFja1N0YXRlLmdldFN0YXRlKCkgIT0gbVByZXZTdGF0ZSkgewotICAgICAgICAgICAgICAgIHN3aXRjaCAobVBsYXliYWNrU3RhdGUuZ2V0U3RhdGUoKSkgewotICAgICAgICAgICAgICAgICAgICBjYXNlIFBsYXliYWNrU3RhdGUuU1RBVEVfUExBWUlORzoKLSAgICAgICAgICAgICAgICAgICAgICAgIG1QbGF5UGF1c2VCdXR0b24uc2V0SW1hZ2VEcmF3YWJsZSgKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbVJlc291cmNlcy5nZXREcmF3YWJsZShSLmRyYXdhYmxlLmljX3BhdXNlX2NpcmNsZV9maWxsZWQsIG51bGwpKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIG1QbGF5UGF1c2VCdXR0b24uc2V0Q29udGVudERlc2NyaXB0aW9uKAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtUmVzb3VyY2VzLmdldFN0cmluZyhSLnN0cmluZy5tY3YyX3BhdXNlX2J1dHRvbl9kZXNjKSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBtSW5zdGFuY2UucmVtb3ZlQ2FsbGJhY2tzKG1VcGRhdGVQcm9ncmVzcyk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBtSW5zdGFuY2UucG9zdChtVXBkYXRlUHJvZ3Jlc3MpOwotICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgIGNhc2UgUGxheWJhY2tTdGF0ZS5TVEFURV9QQVVTRUQ6Ci0gICAgICAgICAgICAgICAgICAgICAgICBtUGxheVBhdXNlQnV0dG9uLnNldEltYWdlRHJhd2FibGUoCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1SZXNvdXJjZXMuZ2V0RHJhd2FibGUoUi5kcmF3YWJsZS5pY19wbGF5X2NpcmNsZV9maWxsZWQsIG51bGwpKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIG1QbGF5UGF1c2VCdXR0b24uc2V0Q29udGVudERlc2NyaXB0aW9uKAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtUmVzb3VyY2VzLmdldFN0cmluZyhSLnN0cmluZy5tY3YyX3BsYXlfYnV0dG9uX2Rlc2MpKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICBjYXNlIFBsYXliYWNrU3RhdGUuU1RBVEVfU1RPUFBFRDoKLSAgICAgICAgICAgICAgICAgICAgICAgIG1QbGF5UGF1c2VCdXR0b24uc2V0SW1hZ2VEcmF3YWJsZSgKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbVJlc291cmNlcy5nZXREcmF3YWJsZShSLmRyYXdhYmxlLmljX3JlcGxheV9jaXJjbGVfZmlsbGVkLCBudWxsKSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBtUGxheVBhdXNlQnV0dG9uLnNldENvbnRlbnREZXNjcmlwdGlvbigKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbVJlc291cmNlcy5nZXRTdHJpbmcoUi5zdHJpbmcubWN2Ml9yZXBsYXlfYnV0dG9uX2Rlc2MpKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIG1Jc1N0b3BwZWQgPSB0cnVlOwotICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgbVByZXZTdGF0ZSA9IG1QbGF5YmFja1N0YXRlLmdldFN0YXRlKCk7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGlmIChtUGxheWJhY2tBY3Rpb25zICE9IG1QbGF5YmFja1N0YXRlLmdldEFjdGlvbnMoKSkgewotICAgICAgICAgICAgICAgIGxvbmcgbmV3QWN0aW9ucyA9IG1QbGF5YmFja1N0YXRlLmdldEFjdGlvbnMoKTsKLSAgICAgICAgICAgICAgICBpZiAoKG5ld0FjdGlvbnMgJiBQbGF5YmFja1N0YXRlLkFDVElPTl9QQVVTRSkgIT0gMCkgewotICAgICAgICAgICAgICAgICAgICBtUGxheVBhdXNlQnV0dG9uLnNldFZpc2liaWxpdHkoVmlldy5WSVNJQkxFKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgaWYgKChuZXdBY3Rpb25zICYgUGxheWJhY2tTdGF0ZS5BQ1RJT05fUkVXSU5EKSAhPSAwCi0gICAgICAgICAgICAgICAgICAgICAgICAmJiBtTWVkaWFUeXBlICE9IE1FRElBX1RZUEVfTVVTSUMpIHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKG1SZXdCdXR0b24gIT0gbnVsbCkgewotICAgICAgICAgICAgICAgICAgICAgICAgbVJld0J1dHRvbi5zZXRWaXNpYmlsaXR5KFZpZXcuVklTSUJMRSk7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgaWYgKChuZXdBY3Rpb25zICYgUGxheWJhY2tTdGF0ZS5BQ1RJT05fRkFTVF9GT1JXQVJEKSAhPSAwCi0gICAgICAgICAgICAgICAgICAgICAgICAmJiBtTWVkaWFUeXBlICE9IE1FRElBX1RZUEVfTVVTSUMpIHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKG1GZndkQnV0dG9uICE9IG51bGwpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIG1GZndkQnV0dG9uLnNldFZpc2liaWxpdHkoVmlldy5WSVNJQkxFKTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBpZiAoKG5ld0FjdGlvbnMgJiBQbGF5YmFja1N0YXRlLkFDVElPTl9TRUVLX1RPKSAhPSAwKSB7Ci0gICAgICAgICAgICAgICAgICAgIG1TZWVrQXZhaWxhYmxlID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICBtU2Vla0F2YWlsYWJsZSA9IGZhbHNlOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBtUGxheWJhY2tBY3Rpb25zID0gbmV3QWN0aW9uczsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgLy8gQWRkIGJ1dHRvbnMgaWYgY3VzdG9tIGFjdGlvbnMgYXJlIHByZXNlbnQuCi0gICAgICAgICAgICBMaXN0PFBsYXliYWNrU3RhdGUuQ3VzdG9tQWN0aW9uPiBjdXN0b21BY3Rpb25zID0gbVBsYXliYWNrU3RhdGUuZ2V0Q3VzdG9tQWN0aW9ucygpOwotICAgICAgICAgICAgbUN1c3RvbUJ1dHRvbnMucmVtb3ZlQWxsVmlld3MoKTsKLSAgICAgICAgICAgIGlmIChjdXN0b21BY3Rpb25zLnNpemUoKSA+IDApIHsKLSAgICAgICAgICAgICAgICBmb3IgKFBsYXliYWNrU3RhdGUuQ3VzdG9tQWN0aW9uIGFjdGlvbiA6IGN1c3RvbUFjdGlvbnMpIHsKLSAgICAgICAgICAgICAgICAgICAgSW1hZ2VCdXR0b24gYnV0dG9uID0gbmV3IEltYWdlQnV0dG9uKG1JbnN0YW5jZS5nZXRDb250ZXh0KCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgbnVsbCAvKiBBdHRyaWJ1dGVTZXQgKi8sIDAgLyogU3R5bGUgKi8pOwotICAgICAgICAgICAgICAgICAgICAvLyBUT0RPOiBBcHBseSBSLnN0eWxlLkJvdHRvbUJhckJ1dHRvbiB0byB0aGlzIGJ1dHRvbiB1c2luZyBsaWJyYXJ5IGNvbnRleHQuCi0gICAgICAgICAgICAgICAgICAgIC8vIFJlZmVyIENvbnN0cnVjdG9yIHdpdGggYXJndW1lbnQgKGludCBkZWZTdHlsZVJlcykgb2YgVmlldy5qYXZhCi0gICAgICAgICAgICAgICAgICAgIGJ1dHRvbi5zZXRJbWFnZVJlc291cmNlKGFjdGlvbi5nZXRJY29uKCkpOwotICAgICAgICAgICAgICAgICAgICBidXR0b24uc2V0VG9vbHRpcFRleHQoYWN0aW9uLmdldE5hbWUoKSk7Ci0gICAgICAgICAgICAgICAgICAgIGZpbmFsIFN0cmluZyBhY3Rpb25TdHJpbmcgPSBhY3Rpb24uZ2V0QWN0aW9uKCkudG9TdHJpbmcoKTsKLSAgICAgICAgICAgICAgICAgICAgYnV0dG9uLnNldE9uQ2xpY2tMaXN0ZW5lcihuZXcgVmlldy5PbkNsaWNrTGlzdGVuZXIoKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgICAgICAgICAgICAgICAgIHB1YmxpYyB2b2lkIG9uQ2xpY2soVmlldyB2KSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gVE9ETzogQ3VycmVudGx5LCB3ZSBhcmUganVzdCBzZW5kaW5nIGV4dHJhcyB0aGF0IGNhbWUgZnJvbSBzZXNzaW9uLgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIElzIGl0IHRoZSByaWdodCBiZWhhdmlvcj8KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBtQ29udHJvbHMuc2VuZEN1c3RvbUFjdGlvbihhY3Rpb25TdHJpbmcsIGFjdGlvbi5nZXRFeHRyYXMoKSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgbUluc3RhbmNlLnNldFZpc2liaWxpdHkoVmlldy5WSVNJQkxFKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgfSk7Ci0gICAgICAgICAgICAgICAgICAgIG1DdXN0b21CdXR0b25zLmFkZFZpZXcoYnV0dG9uKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgcHVibGljIHZvaWQgb25NZXRhZGF0YUNoYW5nZWQoTWVkaWFNZXRhZGF0YSBtZXRhZGF0YSkgewotICAgICAgICAgICAgbU1ldGFkYXRhID0gbWV0YWRhdGE7Ci0gICAgICAgICAgICB1cGRhdGVEdXJhdGlvbigpOwotICAgICAgICAgICAgdXBkYXRlVGl0bGUoKTsKLSAgICAgICAgICAgIHVwZGF0ZUF1ZGlvTWV0YWRhdGEoKTsKLSAgICAgICAgfQotCi0gICAgICAgIEBPdmVycmlkZQotICAgICAgICBwdWJsaWMgdm9pZCBvblNlc3Npb25FdmVudChTdHJpbmcgZXZlbnQsIEJ1bmRsZSBleHRyYXMpIHsKLSAgICAgICAgICAgIHN3aXRjaCAoZXZlbnQpIHsKLSAgICAgICAgICAgICAgICBjYXNlIEVWRU5UX1VQREFURV9UUkFDS19TVEFUVVM6Ci0gICAgICAgICAgICAgICAgICAgIG1WaWRlb1RyYWNrQ291bnQgPSBleHRyYXMuZ2V0SW50KEtFWV9WSURFT19UUkFDS19DT1VOVCk7Ci0gICAgICAgICAgICAgICAgICAgIC8vIElmIHRoZXJlIGlzIG9uZSBvciBtb3JlIGF1ZGlvIHRyYWNrcywgYW5kIHRoaXMgaW5mb3JtYXRpb24gaGFzIG5vdCBiZWVuCi0gICAgICAgICAgICAgICAgICAgIC8vIHJlZmxlY3RlZCBpbnRvIHRoZSBTZXR0aW5ncyB3aW5kb3cgeWV0LCBhdXRvbWF0aWNhbGx5IGNoZWNrIHRoZSBmaXJzdCB0cmFjay4KLSAgICAgICAgICAgICAgICAgICAgLy8gT3RoZXJ3aXNlLCB0aGUgQXVkaW8gVHJhY2sgc2VsZWN0aW9uIHdpbGwgYmUgZGVmYXVsdGVkIHRvICJOb25lIi4KLSAgICAgICAgICAgICAgICAgICAgbUF1ZGlvVHJhY2tDb3VudCA9IGV4dHJhcy5nZXRJbnQoS0VZX0FVRElPX1RSQUNLX0NPVU5UKTsKLSAgICAgICAgICAgICAgICAgICAgbUF1ZGlvVHJhY2tMaXN0ID0gbmV3IEFycmF5TGlzdDxTdHJpbmc+KCk7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChtQXVkaW9UcmFja0NvdW50ID4gMCkgewotICAgICAgICAgICAgICAgICAgICAgICAgLy8gVE9ETzogYWRkIG1vcmUgdGV4dCBhYm91dCB0cmFjayBpbmZvLgotICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBtQXVkaW9UcmFja0NvdW50OyBpKyspIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdHJpbmcgdHJhY2sgPSBtUmVzb3VyY2VzLmdldFN0cmluZygKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFIuc3RyaW5nLk1lZGlhQ29udHJvbFZpZXcyX2F1ZGlvX3RyYWNrX251bWJlcl90ZXh0LCBpICsgMSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgbUF1ZGlvVHJhY2tMaXN0LmFkZCh0cmFjayk7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICAvLyBDaGFuZ2Ugc3ViIHRleHQgaW5zaWRlIHRoZSBTZXR0aW5ncyB3aW5kb3cuCi0gICAgICAgICAgICAgICAgICAgICAgICBtU2V0dGluZ3NTdWJUZXh0c0xpc3Quc2V0KFNFVFRJTkdTX01PREVfQVVESU9fVFJBQ0ssCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1BdWRpb1RyYWNrTGlzdC5nZXQoMCkpOwotICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICAgICAgbUF1ZGlvVHJhY2tMaXN0LmFkZChtUmVzb3VyY2VzLmdldFN0cmluZygKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUi5zdHJpbmcuTWVkaWFDb250cm9sVmlldzJfYXVkaW9fdHJhY2tfbm9uZV90ZXh0KSk7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgaWYgKG1WaWRlb1RyYWNrQ291bnQgPT0gMCAmJiBtQXVkaW9UcmFja0NvdW50ID4gMCkgewotICAgICAgICAgICAgICAgICAgICAgICAgbU1lZGlhVHlwZSA9IE1FRElBX1RZUEVfTVVTSUM7Ci0gICAgICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgICAgICBtU3VidGl0bGVUcmFja0NvdW50ID0gZXh0cmFzLmdldEludChLRVlfU1VCVElUTEVfVFJBQ0tfQ09VTlQpOwotICAgICAgICAgICAgICAgICAgICBtU3VidGl0bGVEZXNjcmlwdGlvbnNMaXN0ID0gbmV3IEFycmF5TGlzdDxTdHJpbmc+KCk7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChtU3VidGl0bGVUcmFja0NvdW50ID4gMCkgewotICAgICAgICAgICAgICAgICAgICAgICAgbVN1YnRpdGxlQnV0dG9uLnNldFZpc2liaWxpdHkoVmlldy5WSVNJQkxFKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIG1TdWJ0aXRsZUJ1dHRvbi5zZXRFbmFibGVkKHRydWUpOwotICAgICAgICAgICAgICAgICAgICAgICAgbVN1YnRpdGxlRGVzY3JpcHRpb25zTGlzdC5hZGQobVJlc291cmNlcy5nZXRTdHJpbmcoCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFIuc3RyaW5nLk1lZGlhQ29udHJvbFZpZXcyX3N1YnRpdGxlX29mZl90ZXh0KSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IG1TdWJ0aXRsZVRyYWNrQ291bnQ7IGkrKykgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN0cmluZyB0cmFjayA9IG1SZXNvdXJjZXMuZ2V0U3RyaW5nKAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUi5zdHJpbmcuTWVkaWFDb250cm9sVmlldzJfc3VidGl0bGVfdHJhY2tfbnVtYmVyX3RleHQsIGkgKyAxKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBtU3VidGl0bGVEZXNjcmlwdGlvbnNMaXN0LmFkZCh0cmFjayk7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBtU3VidGl0bGVCdXR0b24uc2V0VmlzaWJpbGl0eShWaWV3LkdPTkUpOwotICAgICAgICAgICAgICAgICAgICAgICAgbVN1YnRpdGxlQnV0dG9uLnNldEVuYWJsZWQoZmFsc2UpOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIGNhc2UgRVZFTlRfVVBEQVRFX01FRElBX1RZUEVfU1RBVFVTOgotICAgICAgICAgICAgICAgICAgICBib29sZWFuIG5ld1N0YXR1cyA9IGV4dHJhcy5nZXRCb29sZWFuKEtFWV9TVEFURV9JU19BRFZFUlRJU0VNRU5UKTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKG5ld1N0YXR1cyAhPSBtSXNBZHZlcnRpc2VtZW50KSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBtSXNBZHZlcnRpc2VtZW50ID0gbmV3U3RhdHVzOwotICAgICAgICAgICAgICAgICAgICAgICAgdXBkYXRlTGF5b3V0KCk7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBwcml2YXRlIGNsYXNzIFNldHRpbmdzQWRhcHRlciBleHRlbmRzIEJhc2VBZGFwdGVyIHsKLSAgICAgICAgcHJpdmF0ZSBMaXN0PEludGVnZXI+IG1JY29uSWRzOwotICAgICAgICBwcml2YXRlIExpc3Q8U3RyaW5nPiBtTWFpblRleHRzOwotICAgICAgICBwcml2YXRlIExpc3Q8U3RyaW5nPiBtU3ViVGV4dHM7Ci0KLSAgICAgICAgcHVibGljIFNldHRpbmdzQWRhcHRlcihMaXN0PFN0cmluZz4gbWFpblRleHRzLCBATnVsbGFibGUgTGlzdDxTdHJpbmc+IHN1YlRleHRzLAotICAgICAgICAgICAgICAgIEBOdWxsYWJsZSBMaXN0PEludGVnZXI+IGljb25JZHMpIHsKLSAgICAgICAgICAgIG1NYWluVGV4dHMgPSBtYWluVGV4dHM7Ci0gICAgICAgICAgICBtU3ViVGV4dHMgPSBzdWJUZXh0czsKLSAgICAgICAgICAgIG1JY29uSWRzID0gaWNvbklkczsKLSAgICAgICAgfQotCi0gICAgICAgIHB1YmxpYyB2b2lkIHVwZGF0ZVN1YlRleHRzKExpc3Q8U3RyaW5nPiBzdWJUZXh0cykgewotICAgICAgICAgICAgbVN1YlRleHRzID0gc3ViVGV4dHM7Ci0gICAgICAgICAgICBub3RpZnlEYXRhU2V0Q2hhbmdlZCgpOwotICAgICAgICB9Ci0KLSAgICAgICAgcHVibGljIFN0cmluZyBnZXRNYWluVGV4dChpbnQgcG9zaXRpb24pIHsKLSAgICAgICAgICAgIGlmIChtTWFpblRleHRzICE9IG51bGwpIHsKLSAgICAgICAgICAgICAgICBpZiAocG9zaXRpb24gPCBtTWFpblRleHRzLnNpemUoKSkgewotICAgICAgICAgICAgICAgICAgICByZXR1cm4gbU1haW5UZXh0cy5nZXQocG9zaXRpb24pOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHJldHVybiBSRVNPVVJDRV9FTVBUWTsKLSAgICAgICAgfQotCi0gICAgICAgIEBPdmVycmlkZQotICAgICAgICBwdWJsaWMgaW50IGdldENvdW50KCkgewotICAgICAgICAgICAgcmV0dXJuIChtTWFpblRleHRzID09IG51bGwpID8gMCA6IG1NYWluVGV4dHMuc2l6ZSgpOwotICAgICAgICB9Ci0KLSAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgIHB1YmxpYyBsb25nIGdldEl0ZW1JZChpbnQgcG9zaXRpb24pIHsKLSAgICAgICAgICAgIC8vIEF1dG8tZ2VuZXJhdGVkIG1ldGhvZCBzdHViLS1kb2VzIG5vdCBoYXZlIGFueSBwdXJwb3NlIGhlcmUKLSAgICAgICAgICAgIC8vIFRPRE86IGltcGxlbWVudCB0aGlzLgotICAgICAgICAgICAgcmV0dXJuIDA7Ci0gICAgICAgIH0KLQotICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgcHVibGljIE9iamVjdCBnZXRJdGVtKGludCBwb3NpdGlvbikgewotICAgICAgICAgICAgLy8gQXV0by1nZW5lcmF0ZWQgbWV0aG9kIHN0dWItLWRvZXMgbm90IGhhdmUgYW55IHB1cnBvc2UgaGVyZQotICAgICAgICAgICAgLy8gVE9ETzogaW1wbGVtZW50IHRoaXMuCi0gICAgICAgICAgICByZXR1cm4gbnVsbDsKLSAgICAgICAgfQotCi0gICAgICAgIEBPdmVycmlkZQotICAgICAgICBwdWJsaWMgVmlldyBnZXRWaWV3KGludCBwb3NpdGlvbiwgVmlldyBjb252ZXJ0VmlldywgVmlld0dyb3VwIGNvbnRhaW5lcikgewotICAgICAgICAgICAgVmlldyByb3c7Ci0gICAgICAgICAgICBpZiAobVNpemVUeXBlID09IFNJWkVfVFlQRV9GVUxMKSB7Ci0gICAgICAgICAgICAgICAgcm93ID0gQXBpSGVscGVyLmluZmxhdGVMaWJMYXlvdXQobUluc3RhbmNlLmdldENvbnRleHQoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgIFIubGF5b3V0LmZ1bGxfc2V0dGluZ3NfbGlzdF9pdGVtKTsKLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgcm93ID0gQXBpSGVscGVyLmluZmxhdGVMaWJMYXlvdXQobUluc3RhbmNlLmdldENvbnRleHQoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgIFIubGF5b3V0LmVtYmVkZGVkX3NldHRpbmdzX2xpc3RfaXRlbSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBUZXh0VmlldyBtYWluVGV4dFZpZXcgPSAoVGV4dFZpZXcpIHJvdy5maW5kVmlld0J5SWQoUi5pZC5tYWluX3RleHQpOwotICAgICAgICAgICAgVGV4dFZpZXcgc3ViVGV4dFZpZXcgPSAoVGV4dFZpZXcpIHJvdy5maW5kVmlld0J5SWQoUi5pZC5zdWJfdGV4dCk7Ci0gICAgICAgICAgICBJbWFnZVZpZXcgaWNvblZpZXcgPSAoSW1hZ2VWaWV3KSByb3cuZmluZFZpZXdCeUlkKFIuaWQuaWNvbik7Ci0KLSAgICAgICAgICAgIC8vIFNldCBtYWluIHRleHQKLSAgICAgICAgICAgIG1haW5UZXh0Vmlldy5zZXRUZXh0KG1NYWluVGV4dHMuZ2V0KHBvc2l0aW9uKSk7Ci0KLSAgICAgICAgICAgIC8vIFJlbW92ZSBzdWIgdGV4dCBhbmQgY2VudGVyIHRoZSBtYWluIHRleHQgaWYgc3ViIHRleHRzIGRvIG5vdCBleGlzdCBhdCBhbGwgb3IgdGhlIHN1YgotICAgICAgICAgICAgLy8gdGV4dCBhdCB0aGlzIHBhcnRpY3VsYXIgcG9zaXRpb24gaXMgZW1wdHkuCi0gICAgICAgICAgICBpZiAobVN1YlRleHRzID09IG51bGwgfHwgbVN1YlRleHRzLmdldChwb3NpdGlvbikgPT0gUkVTT1VSQ0VfRU1QVFkpIHsKLSAgICAgICAgICAgICAgICBzdWJUZXh0Vmlldy5zZXRWaXNpYmlsaXR5KFZpZXcuR09ORSk7Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIC8vIE90aGVyd2lzZSwgc2V0IHN1YiB0ZXh0LgotICAgICAgICAgICAgICAgIHN1YlRleHRWaWV3LnNldFRleHQobVN1YlRleHRzLmdldChwb3NpdGlvbikpOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAvLyBSZW1vdmUgbWFpbiBpY29uIGFuZCBzZXQgdmlzaWJpbGl0eSB0byBnb25lIGlmIGljb25zIGFyZSBzZXQgdG8gbnVsbCBvciB0aGUgaWNvbiBhdAotICAgICAgICAgICAgLy8gdGhpcyBwYXJ0aWN1bGFyIHBvc2l0aW9uIGlzIHNldCB0byBSRVNPVVJDRV9OT05fRVhJU1RFTlQuCi0gICAgICAgICAgICBpZiAobUljb25JZHMgPT0gbnVsbCB8fCBtSWNvbklkcy5nZXQocG9zaXRpb24pID09IFJFU09VUkNFX05PTl9FWElTVEVOVCkgewotICAgICAgICAgICAgICAgIGljb25WaWV3LnNldFZpc2liaWxpdHkoVmlldy5HT05FKTsKLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgLy8gT3RoZXJ3aXNlLCBzZXQgbWFpbiBpY29uLgotICAgICAgICAgICAgICAgIGljb25WaWV3LnNldEltYWdlRHJhd2FibGUobVJlc291cmNlcy5nZXREcmF3YWJsZShtSWNvbklkcy5nZXQocG9zaXRpb24pLCBudWxsKSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICByZXR1cm4gcm93OwotICAgICAgICB9Ci0KLSAgICAgICAgcHVibGljIHZvaWQgc2V0U3ViVGV4dHMoTGlzdDxTdHJpbmc+IHN1YlRleHRzKSB7Ci0gICAgICAgICAgICBtU3ViVGV4dHMgPSBzdWJUZXh0czsKLSAgICAgICAgfQotICAgIH0KLQotICAgIC8vIFRPRE86IGV4dGVuZCB0aGlzIGNsYXNzIGZyb20gU2V0dGluZ3NBZGFwdGVyCi0gICAgcHJpdmF0ZSBjbGFzcyBTdWJTZXR0aW5nc0FkYXB0ZXIgZXh0ZW5kcyBCYXNlQWRhcHRlciB7Ci0gICAgICAgIHByaXZhdGUgTGlzdDxTdHJpbmc+IG1UZXh0czsKLSAgICAgICAgcHJpdmF0ZSBpbnQgbUNoZWNrUG9zaXRpb247Ci0KLSAgICAgICAgcHVibGljIFN1YlNldHRpbmdzQWRhcHRlcihMaXN0PFN0cmluZz4gdGV4dHMsIGludCBjaGVja1Bvc2l0aW9uKSB7Ci0gICAgICAgICAgICBtVGV4dHMgPSB0ZXh0czsKLSAgICAgICAgICAgIG1DaGVja1Bvc2l0aW9uID0gY2hlY2tQb3NpdGlvbjsKLSAgICAgICAgfQotCi0gICAgICAgIHB1YmxpYyBTdHJpbmcgZ2V0TWFpblRleHQoaW50IHBvc2l0aW9uKSB7Ci0gICAgICAgICAgICBpZiAobVRleHRzICE9IG51bGwpIHsKLSAgICAgICAgICAgICAgICBpZiAocG9zaXRpb24gPCBtVGV4dHMuc2l6ZSgpKSB7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBtVGV4dHMuZ2V0KHBvc2l0aW9uKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICByZXR1cm4gUkVTT1VSQ0VfRU1QVFk7Ci0gICAgICAgIH0KLQotICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgcHVibGljIGludCBnZXRDb3VudCgpIHsKLSAgICAgICAgICAgIHJldHVybiAobVRleHRzID09IG51bGwpID8gMCA6IG1UZXh0cy5zaXplKCk7Ci0gICAgICAgIH0KLQotICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgcHVibGljIGxvbmcgZ2V0SXRlbUlkKGludCBwb3NpdGlvbikgewotICAgICAgICAgICAgLy8gQXV0by1nZW5lcmF0ZWQgbWV0aG9kIHN0dWItLWRvZXMgbm90IGhhdmUgYW55IHB1cnBvc2UgaGVyZQotICAgICAgICAgICAgLy8gVE9ETzogaW1wbGVtZW50IHRoaXMuCi0gICAgICAgICAgICByZXR1cm4gMDsKLSAgICAgICAgfQotCi0gICAgICAgIEBPdmVycmlkZQotICAgICAgICBwdWJsaWMgT2JqZWN0IGdldEl0ZW0oaW50IHBvc2l0aW9uKSB7Ci0gICAgICAgICAgICAvLyBBdXRvLWdlbmVyYXRlZCBtZXRob2Qgc3R1Yi0tZG9lcyBub3QgaGF2ZSBhbnkgcHVycG9zZSBoZXJlCi0gICAgICAgICAgICAvLyBUT0RPOiBpbXBsZW1lbnQgdGhpcy4KLSAgICAgICAgICAgIHJldHVybiBudWxsOwotICAgICAgICB9Ci0KLSAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgIHB1YmxpYyBWaWV3IGdldFZpZXcoaW50IHBvc2l0aW9uLCBWaWV3IGNvbnZlcnRWaWV3LCBWaWV3R3JvdXAgY29udGFpbmVyKSB7Ci0gICAgICAgICAgICBWaWV3IHJvdzsKLSAgICAgICAgICAgIGlmIChtU2l6ZVR5cGUgPT0gU0laRV9UWVBFX0ZVTEwpIHsKLSAgICAgICAgICAgICAgICByb3cgPSBBcGlIZWxwZXIuaW5mbGF0ZUxpYkxheW91dChtSW5zdGFuY2UuZ2V0Q29udGV4dCgpLAotICAgICAgICAgICAgICAgICAgICAgICAgUi5sYXlvdXQuZnVsbF9zdWJfc2V0dGluZ3NfbGlzdF9pdGVtKTsKLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgcm93ID0gQXBpSGVscGVyLmluZmxhdGVMaWJMYXlvdXQobUluc3RhbmNlLmdldENvbnRleHQoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgIFIubGF5b3V0LmVtYmVkZGVkX3N1Yl9zZXR0aW5nc19saXN0X2l0ZW0pOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgVGV4dFZpZXcgdGV4dFZpZXcgPSAoVGV4dFZpZXcpIHJvdy5maW5kVmlld0J5SWQoUi5pZC50ZXh0KTsKLSAgICAgICAgICAgIEltYWdlVmlldyBjaGVja1ZpZXcgPSAoSW1hZ2VWaWV3KSByb3cuZmluZFZpZXdCeUlkKFIuaWQuY2hlY2spOwotCi0gICAgICAgICAgICB0ZXh0Vmlldy5zZXRUZXh0KG1UZXh0cy5nZXQocG9zaXRpb24pKTsKLSAgICAgICAgICAgIGlmIChwb3NpdGlvbiAhPSBtQ2hlY2tQb3NpdGlvbikgewotICAgICAgICAgICAgICAgIGNoZWNrVmlldy5zZXRWaXNpYmlsaXR5KFZpZXcuSU5WSVNJQkxFKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHJldHVybiByb3c7Ci0gICAgICAgIH0KLQotICAgICAgICBwdWJsaWMgdm9pZCBzZXRUZXh0cyhMaXN0PFN0cmluZz4gdGV4dHMpIHsKLSAgICAgICAgICAgIG1UZXh0cyA9IHRleHRzOwotICAgICAgICB9Ci0KLSAgICAgICAgcHVibGljIHZvaWQgc2V0Q2hlY2tQb3NpdGlvbihpbnQgY2hlY2tQb3NpdGlvbikgewotICAgICAgICAgICAgbUNoZWNrUG9zaXRpb24gPSBjaGVja1Bvc2l0aW9uOwotICAgICAgICB9Ci0gICAgfQotfQpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvTWVkaWFDb21wb25lbnRzL3NyYy9jb20vYW5kcm9pZC93aWRnZXQvU3VidGl0bGVWaWV3LmphdmEgYi9wYWNrYWdlcy9NZWRpYUNvbXBvbmVudHMvc3JjL2NvbS9hbmRyb2lkL3dpZGdldC9TdWJ0aXRsZVZpZXcuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjdiMmNkMS4uMDAwMDAwMAotLS0gYS9wYWNrYWdlcy9NZWRpYUNvbXBvbmVudHMvc3JjL2NvbS9hbmRyb2lkL3dpZGdldC9TdWJ0aXRsZVZpZXcuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDE0MyArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IDIwMTggVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAotICoKLSAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwotICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgotICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0gKgotICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLSAqCi0gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCi0gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAotICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCi0gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCi0gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KLSAqLwotCi1wYWNrYWdlIGNvbS5hbmRyb2lkLndpZGdldDsKLQotaW1wb3J0IGFuZHJvaWQuY29udGVudC5Db250ZXh0OwotaW1wb3J0IGFuZHJvaWQuZ3JhcGhpY3MuQ2FudmFzOwotaW1wb3J0IGFuZHJvaWQub3MuTG9vcGVyOwotaW1wb3J0IGFuZHJvaWQuc3VwcG9ydC5hbm5vdGF0aW9uLk51bGxhYmxlOwotaW1wb3J0IGFuZHJvaWQudXRpbC5BdHRyaWJ1dGVTZXQ7Ci1pbXBvcnQgYW5kcm9pZC53aWRnZXQuRnJhbWVMYXlvdXQ7Ci0KLWltcG9ydCBjb20uYW5kcm9pZC5tZWRpYS5zdWJ0aXRsZS5TdWJ0aXRsZUNvbnRyb2xsZXIuQW5jaG9yOwotaW1wb3J0IGNvbS5hbmRyb2lkLm1lZGlhLnN1YnRpdGxlLlN1YnRpdGxlVHJhY2suUmVuZGVyaW5nV2lkZ2V0OwotCi1jbGFzcyBTdWJ0aXRsZVZpZXcgZXh0ZW5kcyBGcmFtZUxheW91dCBpbXBsZW1lbnRzIEFuY2hvciB7Ci0gICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFRBRyA9ICJTdWJ0aXRsZVZpZXciOwotCi0gICAgcHJpdmF0ZSBSZW5kZXJpbmdXaWRnZXQgbVN1YnRpdGxlV2lkZ2V0OwotICAgIHByaXZhdGUgUmVuZGVyaW5nV2lkZ2V0Lk9uQ2hhbmdlZExpc3RlbmVyIG1TdWJ0aXRsZXNDaGFuZ2VkTGlzdGVuZXI7Ci0KLSAgICBwdWJsaWMgU3VidGl0bGVWaWV3KENvbnRleHQgY29udGV4dCkgewotICAgICAgICB0aGlzKGNvbnRleHQsIG51bGwpOwotICAgIH0KLQotICAgIHB1YmxpYyBTdWJ0aXRsZVZpZXcoQ29udGV4dCBjb250ZXh0LCBATnVsbGFibGUgQXR0cmlidXRlU2V0IGF0dHJzKSB7Ci0gICAgICAgIHRoaXMoY29udGV4dCwgYXR0cnMsIDApOwotICAgIH0KLQotICAgIHB1YmxpYyBTdWJ0aXRsZVZpZXcoQ29udGV4dCBjb250ZXh0LCBATnVsbGFibGUgQXR0cmlidXRlU2V0IGF0dHJzLCBpbnQgZGVmU3R5bGVBdHRyKSB7Ci0gICAgICAgIHRoaXMoY29udGV4dCwgYXR0cnMsIGRlZlN0eWxlQXR0ciwgMCk7Ci0gICAgfQotCi0gICAgcHVibGljIFN1YnRpdGxlVmlldygKLSAgICAgICAgICAgIENvbnRleHQgY29udGV4dCwgQE51bGxhYmxlIEF0dHJpYnV0ZVNldCBhdHRycywgaW50IGRlZlN0eWxlQXR0ciwgaW50IGRlZlN0eWxlUmVzKSB7Ci0gICAgICAgIHN1cGVyKGNvbnRleHQsIGF0dHJzLCBkZWZTdHlsZUF0dHIsIGRlZlN0eWxlUmVzKTsKLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgdm9pZCBzZXRTdWJ0aXRsZVdpZGdldChSZW5kZXJpbmdXaWRnZXQgc3VidGl0bGVXaWRnZXQpIHsKLSAgICAgICAgaWYgKG1TdWJ0aXRsZVdpZGdldCA9PSBzdWJ0aXRsZVdpZGdldCkgewotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0KLSAgICAgICAgZmluYWwgYm9vbGVhbiBhdHRhY2hlZFRvV2luZG93ID0gaXNBdHRhY2hlZFRvV2luZG93KCk7Ci0gICAgICAgIGlmIChtU3VidGl0bGVXaWRnZXQgIT0gbnVsbCkgewotICAgICAgICAgICAgaWYgKGF0dGFjaGVkVG9XaW5kb3cpIHsKLSAgICAgICAgICAgICAgICBtU3VidGl0bGVXaWRnZXQub25EZXRhY2hlZEZyb21XaW5kb3coKTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgbVN1YnRpdGxlV2lkZ2V0LnNldE9uQ2hhbmdlZExpc3RlbmVyKG51bGwpOwotICAgICAgICB9Ci0gICAgICAgIG1TdWJ0aXRsZVdpZGdldCA9IHN1YnRpdGxlV2lkZ2V0OwotCi0gICAgICAgIGlmIChzdWJ0aXRsZVdpZGdldCAhPSBudWxsKSB7Ci0gICAgICAgICAgICBpZiAobVN1YnRpdGxlc0NoYW5nZWRMaXN0ZW5lciA9PSBudWxsKSB7Ci0gICAgICAgICAgICAgICAgbVN1YnRpdGxlc0NoYW5nZWRMaXN0ZW5lciA9IG5ldyBSZW5kZXJpbmdXaWRnZXQuT25DaGFuZ2VkTGlzdGVuZXIoKSB7Ci0gICAgICAgICAgICAgICAgICAgIEBPdmVycmlkZQotICAgICAgICAgICAgICAgICAgICBwdWJsaWMgdm9pZCBvbkNoYW5nZWQoUmVuZGVyaW5nV2lkZ2V0IHJlbmRlcmluZ1dpZGdldCkgewotICAgICAgICAgICAgICAgICAgICAgICAgaW52YWxpZGF0ZSgpOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgc2V0V2lsbE5vdERyYXcoZmFsc2UpOwotICAgICAgICAgICAgc3VidGl0bGVXaWRnZXQuc2V0T25DaGFuZ2VkTGlzdGVuZXIobVN1YnRpdGxlc0NoYW5nZWRMaXN0ZW5lcik7Ci0KLSAgICAgICAgICAgIGlmIChhdHRhY2hlZFRvV2luZG93KSB7Ci0gICAgICAgICAgICAgICAgc3VidGl0bGVXaWRnZXQub25BdHRhY2hlZFRvV2luZG93KCk7Ci0gICAgICAgICAgICAgICAgcmVxdWVzdExheW91dCgpOwotICAgICAgICAgICAgfQotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgc2V0V2lsbE5vdERyYXcodHJ1ZSk7Ci0gICAgICAgIH0KLQotICAgICAgICBpbnZhbGlkYXRlKCk7Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIExvb3BlciBnZXRTdWJ0aXRsZUxvb3BlcigpIHsKLSAgICAgICAgcmV0dXJuIExvb3Blci5nZXRNYWluTG9vcGVyKCk7Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIHZvaWQgb25BdHRhY2hlZFRvV2luZG93KCkgewotICAgICAgICBzdXBlci5vbkF0dGFjaGVkVG9XaW5kb3coKTsKLQotICAgICAgICBpZiAobVN1YnRpdGxlV2lkZ2V0ICE9IG51bGwpIHsKLSAgICAgICAgICAgIG1TdWJ0aXRsZVdpZGdldC5vbkF0dGFjaGVkVG9XaW5kb3coKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyB2b2lkIG9uRGV0YWNoZWRGcm9tV2luZG93KCkgewotICAgICAgICBzdXBlci5vbkRldGFjaGVkRnJvbVdpbmRvdygpOwotCi0gICAgICAgIGlmIChtU3VidGl0bGVXaWRnZXQgIT0gbnVsbCkgewotICAgICAgICAgICAgbVN1YnRpdGxlV2lkZ2V0Lm9uRGV0YWNoZWRGcm9tV2luZG93KCk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgdm9pZCBvbkxheW91dChib29sZWFuIGNoYW5nZWQsIGludCBsZWZ0LCBpbnQgdG9wLCBpbnQgcmlnaHQsIGludCBib3R0b20pIHsKLSAgICAgICAgc3VwZXIub25MYXlvdXQoY2hhbmdlZCwgbGVmdCwgdG9wLCByaWdodCwgYm90dG9tKTsKLQotICAgICAgICBpZiAobVN1YnRpdGxlV2lkZ2V0ICE9IG51bGwpIHsKLSAgICAgICAgICAgIGZpbmFsIGludCB3aWR0aCA9IGdldFdpZHRoKCkgLSBnZXRQYWRkaW5nTGVmdCgpIC0gZ2V0UGFkZGluZ1JpZ2h0KCk7Ci0gICAgICAgICAgICBmaW5hbCBpbnQgaGVpZ2h0ID0gZ2V0SGVpZ2h0KCkgLSBnZXRQYWRkaW5nVG9wKCkgLSBnZXRQYWRkaW5nQm90dG9tKCk7Ci0KLSAgICAgICAgICAgIG1TdWJ0aXRsZVdpZGdldC5zZXRTaXplKHdpZHRoLCBoZWlnaHQpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIHZvaWQgZHJhdyhDYW52YXMgY2FudmFzKSB7Ci0gICAgICAgIHN1cGVyLmRyYXcoY2FudmFzKTsKLQotICAgICAgICBpZiAobVN1YnRpdGxlV2lkZ2V0ICE9IG51bGwpIHsKLSAgICAgICAgICAgIGZpbmFsIGludCBzYXZlQ291bnQgPSBjYW52YXMuc2F2ZSgpOwotICAgICAgICAgICAgY2FudmFzLnRyYW5zbGF0ZShnZXRQYWRkaW5nTGVmdCgpLCBnZXRQYWRkaW5nVG9wKCkpOwotICAgICAgICAgICAgbVN1YnRpdGxlV2lkZ2V0LmRyYXcoY2FudmFzKTsKLSAgICAgICAgICAgIGNhbnZhcy5yZXN0b3JlVG9Db3VudChzYXZlQ291bnQpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIENoYXJTZXF1ZW5jZSBnZXRBY2Nlc3NpYmlsaXR5Q2xhc3NOYW1lKCkgewotICAgICAgICByZXR1cm4gU3VidGl0bGVWaWV3LmNsYXNzLmdldE5hbWUoKTsKLSAgICB9Ci19CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9NZWRpYUNvbXBvbmVudHMvc3JjL2NvbS9hbmRyb2lkL3dpZGdldC9WaWRlb1N1cmZhY2VWaWV3LmphdmEgYi9wYWNrYWdlcy9NZWRpYUNvbXBvbmVudHMvc3JjL2NvbS9hbmRyb2lkL3dpZGdldC9WaWRlb1N1cmZhY2VWaWV3LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGZjOTJlODUuLjAwMDAwMDAKLS0tIGEvcGFja2FnZXMvTWVkaWFDb21wb25lbnRzL3NyYy9jb20vYW5kcm9pZC93aWRnZXQvVmlkZW9TdXJmYWNlVmlldy5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTk4ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgMjAxOCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0Ci0gKgotICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7Ci0gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCi0gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLSAqCi0gKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotICoKLSAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKLSAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCi0gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KLSAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKLSAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgotICovCi0KLXBhY2thZ2UgY29tLmFuZHJvaWQud2lkZ2V0OwotCi1pbXBvcnQgYW5kcm9pZC5jb250ZW50LkNvbnRleHQ7Ci1pbXBvcnQgYW5kcm9pZC5ncmFwaGljcy5SZWN0OwotaW1wb3J0IGFuZHJvaWQubWVkaWEuTWVkaWFQbGF5ZXIyOwotaW1wb3J0IGFuZHJvaWQuc3VwcG9ydC5hbm5vdGF0aW9uLk5vbk51bGw7Ci1pbXBvcnQgYW5kcm9pZC51dGlsLkF0dHJpYnV0ZVNldDsKLWltcG9ydCBhbmRyb2lkLnV0aWwuTG9nOwotaW1wb3J0IGFuZHJvaWQudmlldy5TdXJmYWNlSG9sZGVyOwotaW1wb3J0IGFuZHJvaWQudmlldy5TdXJmYWNlVmlldzsKLWltcG9ydCBhbmRyb2lkLnZpZXcuVmlldzsKLQotaW1wb3J0IHN0YXRpYyBhbmRyb2lkLndpZGdldC5WaWRlb1ZpZXcyLlZJRVdfVFlQRV9TVVJGQUNFVklFVzsKLQotY2xhc3MgVmlkZW9TdXJmYWNlVmlldyBleHRlbmRzIFN1cmZhY2VWaWV3IGltcGxlbWVudHMgVmlkZW9WaWV3SW50ZXJmYWNlLCBTdXJmYWNlSG9sZGVyLkNhbGxiYWNrIHsKLSAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgVEFHID0gIlZpZGVvU3VyZmFjZVZpZXciOwotICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGJvb2xlYW4gREVCVUcgPSB0cnVlOyAvLyBTVE9QU0hJUDogTG9nLmlzTG9nZ2FibGUoVEFHLCBMb2cuREVCVUcpOwotICAgIHByaXZhdGUgU3VyZmFjZUhvbGRlciBtU3VyZmFjZUhvbGRlciA9IG51bGw7Ci0gICAgcHJpdmF0ZSBTdXJmYWNlTGlzdGVuZXIgbVN1cmZhY2VMaXN0ZW5lciA9IG51bGw7Ci0gICAgcHJpdmF0ZSBNZWRpYVBsYXllcjIgbU1lZGlhUGxheWVyOwotICAgIC8vIEEgZmxhZyB0byBpbmRpY2F0ZSB0YWtpbmcgb3ZlciBvdGhlciB2aWV3IHNob3VsZCBiZSBwcm9jZWVkLgotICAgIHByaXZhdGUgYm9vbGVhbiBtSXNUYWtpbmdPdmVyT2xkVmlldzsKLSAgICBwcml2YXRlIFZpZGVvVmlld0ludGVyZmFjZSBtT2xkVmlldzsKLQotCi0gICAgcHVibGljIFZpZGVvU3VyZmFjZVZpZXcoQ29udGV4dCBjb250ZXh0KSB7Ci0gICAgICAgIHRoaXMoY29udGV4dCwgbnVsbCk7Ci0gICAgfQotCi0gICAgcHVibGljIFZpZGVvU3VyZmFjZVZpZXcoQ29udGV4dCBjb250ZXh0LCBBdHRyaWJ1dGVTZXQgYXR0cnMpIHsKLSAgICAgICAgdGhpcyhjb250ZXh0LCBhdHRycywgMCk7Ci0gICAgfQotCi0gICAgcHVibGljIFZpZGVvU3VyZmFjZVZpZXcoQ29udGV4dCBjb250ZXh0LCBBdHRyaWJ1dGVTZXQgYXR0cnMsIGludCBkZWZTdHlsZUF0dHIpIHsKLSAgICAgICAgdGhpcyhjb250ZXh0LCBhdHRycywgZGVmU3R5bGVBdHRyLCAwKTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgVmlkZW9TdXJmYWNlVmlldyhDb250ZXh0IGNvbnRleHQsIEF0dHJpYnV0ZVNldCBhdHRycywgaW50IGRlZlN0eWxlQXR0ciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgZGVmU3R5bGVSZXMpIHsKLSAgICAgICAgc3VwZXIoY29udGV4dCwgYXR0cnMsIGRlZlN0eWxlQXR0ciwgZGVmU3R5bGVSZXMpOwotICAgICAgICBnZXRIb2xkZXIoKS5hZGRDYWxsYmFjayh0aGlzKTsKLSAgICB9Ci0KLSAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCi0gICAgLy8gaW1wbGVtZW50cyBWaWRlb1ZpZXdJbnRlcmZhY2UKLSAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCi0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgYm9vbGVhbiBhc3NpZ25TdXJmYWNlVG9NZWRpYVBsYXllcihNZWRpYVBsYXllcjIgbXApIHsKLSAgICAgICAgTG9nLmQoVEFHLCAiYXNzaWduU3VyZmFjZVRvTWVkaWFQbGF5ZXIoKTogbVN1cmZhY2VIb2xkZXI6ICIgKyBtU3VyZmFjZUhvbGRlcik7Ci0gICAgICAgIGlmIChtcCA9PSBudWxsIHx8ICFoYXNBdmFpbGFibGVTdXJmYWNlKCkpIHsKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgfQotICAgICAgICBtcC5zZXREaXNwbGF5KG1TdXJmYWNlSG9sZGVyKTsKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIHZvaWQgc2V0U3VyZmFjZUxpc3RlbmVyKFN1cmZhY2VMaXN0ZW5lciBsKSB7Ci0gICAgICAgIG1TdXJmYWNlTGlzdGVuZXIgPSBsOwotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyBpbnQgZ2V0Vmlld1R5cGUoKSB7Ci0gICAgICAgIHJldHVybiBWSUVXX1RZUEVfU1VSRkFDRVZJRVc7Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIHZvaWQgc2V0TWVkaWFQbGF5ZXIoTWVkaWFQbGF5ZXIyIG1wKSB7Ci0gICAgICAgIG1NZWRpYVBsYXllciA9IG1wOwotICAgICAgICBpZiAobUlzVGFraW5nT3Zlck9sZFZpZXcpIHsKLSAgICAgICAgICAgIHRha2VPdmVyKG1PbGRWaWV3KTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyB2b2lkIHRha2VPdmVyKEBOb25OdWxsIFZpZGVvVmlld0ludGVyZmFjZSBvbGRWaWV3KSB7Ci0gICAgICAgIGlmIChhc3NpZ25TdXJmYWNlVG9NZWRpYVBsYXllcihtTWVkaWFQbGF5ZXIpKSB7Ci0gICAgICAgICAgICAoKFZpZXcpIG9sZFZpZXcpLnNldFZpc2liaWxpdHkoR09ORSk7Ci0gICAgICAgICAgICBtSXNUYWtpbmdPdmVyT2xkVmlldyA9IGZhbHNlOwotICAgICAgICAgICAgbU9sZFZpZXcgPSBudWxsOwotICAgICAgICAgICAgaWYgKG1TdXJmYWNlTGlzdGVuZXIgIT0gbnVsbCkgewotICAgICAgICAgICAgICAgIG1TdXJmYWNlTGlzdGVuZXIub25TdXJmYWNlVGFrZU92ZXJEb25lKHRoaXMpOwotICAgICAgICAgICAgfQotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgbUlzVGFraW5nT3Zlck9sZFZpZXcgPSB0cnVlOwotICAgICAgICAgICAgbU9sZFZpZXcgPSBvbGRWaWV3OwotICAgICAgICB9Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIGJvb2xlYW4gaGFzQXZhaWxhYmxlU3VyZmFjZSgpIHsKLSAgICAgICAgcmV0dXJuIChtU3VyZmFjZUhvbGRlciAhPSBudWxsICYmIG1TdXJmYWNlSG9sZGVyLmdldFN1cmZhY2UoKSAhPSBudWxsKTsKLSAgICB9Ci0KLSAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCi0gICAgLy8gaW1wbGVtZW50cyBTdXJmYWNlSG9sZGVyLkNhbGxiYWNrCi0gICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLwotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIHZvaWQgc3VyZmFjZUNyZWF0ZWQoU3VyZmFjZUhvbGRlciBob2xkZXIpIHsKLSAgICAgICAgTG9nLmQoVEFHLCAic3VyZmFjZUNyZWF0ZWQ6IG1TdXJmYWNlSG9sZGVyOiAiICsgbVN1cmZhY2VIb2xkZXIgKyAiLCBuZXcgaG9sZGVyOiAiICsgaG9sZGVyKTsKLSAgICAgICAgbVN1cmZhY2VIb2xkZXIgPSBob2xkZXI7Ci0gICAgICAgIGlmIChtSXNUYWtpbmdPdmVyT2xkVmlldykgewotICAgICAgICAgICAgdGFrZU92ZXIobU9sZFZpZXcpOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgYXNzaWduU3VyZmFjZVRvTWVkaWFQbGF5ZXIobU1lZGlhUGxheWVyKTsKLSAgICAgICAgfQotCi0gICAgICAgIGlmIChtU3VyZmFjZUxpc3RlbmVyICE9IG51bGwpIHsKLSAgICAgICAgICAgIFJlY3QgcmVjdCA9IG1TdXJmYWNlSG9sZGVyLmdldFN1cmZhY2VGcmFtZSgpOwotICAgICAgICAgICAgbVN1cmZhY2VMaXN0ZW5lci5vblN1cmZhY2VDcmVhdGVkKHRoaXMsIHJlY3Qud2lkdGgoKSwgcmVjdC5oZWlnaHQoKSk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgdm9pZCBzdXJmYWNlQ2hhbmdlZChTdXJmYWNlSG9sZGVyIGhvbGRlciwgaW50IGZvcm1hdCwgaW50IHdpZHRoLCBpbnQgaGVpZ2h0KSB7Ci0gICAgICAgIGlmIChtU3VyZmFjZUxpc3RlbmVyICE9IG51bGwpIHsKLSAgICAgICAgICAgIG1TdXJmYWNlTGlzdGVuZXIub25TdXJmYWNlQ2hhbmdlZCh0aGlzLCB3aWR0aCwgaGVpZ2h0KTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyB2b2lkIHN1cmZhY2VEZXN0cm95ZWQoU3VyZmFjZUhvbGRlciBob2xkZXIpIHsKLSAgICAgICAgLy8gQWZ0ZXIgd2UgcmV0dXJuIGZyb20gdGhpcyB3ZSBjYW4ndCB1c2UgdGhlIHN1cmZhY2UgYW55IG1vcmUKLSAgICAgICAgbVN1cmZhY2VIb2xkZXIgPSBudWxsOwotICAgICAgICBpZiAobVN1cmZhY2VMaXN0ZW5lciAhPSBudWxsKSB7Ci0gICAgICAgICAgICBtU3VyZmFjZUxpc3RlbmVyLm9uU3VyZmFjZURlc3Ryb3llZCh0aGlzKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIC8vIFRPRE86IEludmVzdGlnYXRlIHRoZSB3YXkgdG8gbW92ZSBvbk1lYXN1cmUoKSBjb2RlIGludG8gRnJhbWVMYXlvdXQuCi0gICAgQE92ZXJyaWRlCi0gICAgcHJvdGVjdGVkIHZvaWQgb25NZWFzdXJlKGludCB3aWR0aE1lYXN1cmVTcGVjLCBpbnQgaGVpZ2h0TWVhc3VyZVNwZWMpIHsKLSAgICAgICAgaW50IHZpZGVvV2lkdGggPSAobU1lZGlhUGxheWVyID09IG51bGwpID8gMCA6IG1NZWRpYVBsYXllci5nZXRWaWRlb1dpZHRoKCk7Ci0gICAgICAgIGludCB2aWRlb0hlaWdodCA9IChtTWVkaWFQbGF5ZXIgPT0gbnVsbCkgPyAwIDogbU1lZGlhUGxheWVyLmdldFZpZGVvSGVpZ2h0KCk7Ci0gICAgICAgIGlmIChERUJVRykgewotICAgICAgICAgICAgTG9nLmQoVEFHLCAib25NZWFzdXJlKCIgKyBNZWFzdXJlU3BlYy50b1N0cmluZyh3aWR0aE1lYXN1cmVTcGVjKSArICIsICIKLSAgICAgICAgICAgICAgICAgICAgKyBNZWFzdXJlU3BlYy50b1N0cmluZyhoZWlnaHRNZWFzdXJlU3BlYykgKyAiKSIpOwotICAgICAgICAgICAgTG9nLmkoVEFHLCAiIG1lYXN1cmVkU2l6ZTogIiArIGdldE1lYXN1cmVkV2lkdGgoKSArICIvIiArIGdldE1lYXN1cmVkSGVpZ2h0KCkpOwotICAgICAgICAgICAgTG9nLmkoVEFHLCAiIHZpZXdTaXplOiAiICsgZ2V0V2lkdGgoKSArICIvIiArIGdldEhlaWdodCgpKTsKLSAgICAgICAgICAgIExvZy5pKFRBRywgIiBtVmlkZW9XaWR0aC9oZWlnaHQ6ICIgKyB2aWRlb1dpZHRoICsgIiwgIiArIHZpZGVvSGVpZ2h0KTsKLSAgICAgICAgfQotCi0gICAgICAgIGludCB3aWR0aCA9IGdldERlZmF1bHRTaXplKHZpZGVvV2lkdGgsIHdpZHRoTWVhc3VyZVNwZWMpOwotICAgICAgICBpbnQgaGVpZ2h0ID0gZ2V0RGVmYXVsdFNpemUodmlkZW9IZWlnaHQsIGhlaWdodE1lYXN1cmVTcGVjKTsKLQotICAgICAgICBpZiAodmlkZW9XaWR0aCA+IDAgJiYgdmlkZW9IZWlnaHQgPiAwKSB7Ci0gICAgICAgICAgICBpbnQgd2lkdGhTcGVjU2l6ZSA9IE1lYXN1cmVTcGVjLmdldFNpemUod2lkdGhNZWFzdXJlU3BlYyk7Ci0gICAgICAgICAgICBpbnQgaGVpZ2h0U3BlY1NpemUgPSBNZWFzdXJlU3BlYy5nZXRTaXplKGhlaWdodE1lYXN1cmVTcGVjKTsKLQotICAgICAgICAgICAgd2lkdGggPSB3aWR0aFNwZWNTaXplOwotICAgICAgICAgICAgaGVpZ2h0ID0gaGVpZ2h0U3BlY1NpemU7Ci0KLSAgICAgICAgICAgIC8vIGZvciBjb21wYXRpYmlsaXR5LCB3ZSBhZGp1c3Qgc2l6ZSBiYXNlZCBvbiBhc3BlY3QgcmF0aW8KLSAgICAgICAgICAgIGlmICh2aWRlb1dpZHRoICogaGVpZ2h0IDwgd2lkdGggKiB2aWRlb0hlaWdodCkgewotICAgICAgICAgICAgICAgIHdpZHRoID0gaGVpZ2h0ICogdmlkZW9XaWR0aCAvIHZpZGVvSGVpZ2h0OwotICAgICAgICAgICAgICAgIGlmIChERUJVRykgewotICAgICAgICAgICAgICAgICAgICBMb2cuZChUQUcsICJpbWFnZSB0b28gd2lkZSwgY29ycmVjdGluZy4gd2lkdGg6ICIgKyB3aWR0aCk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfSBlbHNlIGlmICh2aWRlb1dpZHRoICogaGVpZ2h0ID4gd2lkdGggKiB2aWRlb0hlaWdodCkgewotICAgICAgICAgICAgICAgIGhlaWdodCA9IHdpZHRoICogdmlkZW9IZWlnaHQgLyB2aWRlb1dpZHRoOwotICAgICAgICAgICAgICAgIGlmIChERUJVRykgewotICAgICAgICAgICAgICAgICAgICBMb2cuZChUQUcsICJpbWFnZSB0b28gdGFsbCwgY29ycmVjdGluZy4gaGVpZ2h0OiAiICsgaGVpZ2h0KTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAvLyBubyBzaXplIHlldCwganVzdCBhZG9wdCB0aGUgZ2l2ZW4gc3BlYyBzaXplcwotICAgICAgICB9Ci0gICAgICAgIHNldE1lYXN1cmVkRGltZW5zaW9uKHdpZHRoLCBoZWlnaHQpOwotICAgICAgICBpZiAoREVCVUcpIHsKLSAgICAgICAgICAgIExvZy5pKFRBRywgImVuZCBvZiBvbk1lYXN1cmUoKSIpOwotICAgICAgICAgICAgTG9nLmkoVEFHLCAiIG1lYXN1cmVkU2l6ZTogIiArIGdldE1lYXN1cmVkV2lkdGgoKSArICIvIiArIGdldE1lYXN1cmVkSGVpZ2h0KCkpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIFN0cmluZyB0b1N0cmluZygpIHsKLSAgICAgICAgcmV0dXJuICJWaWV3VHlwZTogU3VyZmFjZVZpZXcgLyBWaXNpYmlsaXR5OiAiICsgZ2V0VmlzaWJpbGl0eSgpCi0gICAgICAgICAgICAgICAgKyAiIC8gc3VyZmFjZUhvbGRlcjogIiArIG1TdXJmYWNlSG9sZGVyOwotICAgIH0KLX0KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL01lZGlhQ29tcG9uZW50cy9zcmMvY29tL2FuZHJvaWQvd2lkZ2V0L1ZpZGVvVGV4dHVyZVZpZXcuamF2YSBiL3BhY2thZ2VzL01lZGlhQ29tcG9uZW50cy9zcmMvY29tL2FuZHJvaWQvd2lkZ2V0L1ZpZGVvVGV4dHVyZVZpZXcuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDI0YTNhYS4uMDAwMDAwMAotLS0gYS9wYWNrYWdlcy9NZWRpYUNvbXBvbmVudHMvc3JjL2NvbS9hbmRyb2lkL3dpZGdldC9WaWRlb1RleHR1cmVWaWV3LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyMTAgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAyMDE4IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKLSAqCi0gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKLSAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KLSAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotICoKLSAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0gKgotICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQotICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKLSAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgotICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAotICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCi0gKi8KLQotcGFja2FnZSBjb20uYW5kcm9pZC53aWRnZXQ7Ci0KLWltcG9ydCBhbmRyb2lkLmNvbnRlbnQuQ29udGV4dDsKLWltcG9ydCBhbmRyb2lkLmdyYXBoaWNzLlN1cmZhY2VUZXh0dXJlOwotaW1wb3J0IGFuZHJvaWQubWVkaWEuTWVkaWFQbGF5ZXIyOwotaW1wb3J0IGFuZHJvaWQuc3VwcG9ydC5hbm5vdGF0aW9uLk5vbk51bGw7Ci1pbXBvcnQgYW5kcm9pZC5zdXBwb3J0LmFubm90YXRpb24uUmVxdWlyZXNBcGk7Ci1pbXBvcnQgYW5kcm9pZC51dGlsLkF0dHJpYnV0ZVNldDsKLWltcG9ydCBhbmRyb2lkLnV0aWwuTG9nOwotaW1wb3J0IGFuZHJvaWQudmlldy5TdXJmYWNlOwotaW1wb3J0IGFuZHJvaWQudmlldy5UZXh0dXJlVmlldzsKLWltcG9ydCBhbmRyb2lkLnZpZXcuVmlldzsKLQotaW1wb3J0IHN0YXRpYyBhbmRyb2lkLndpZGdldC5WaWRlb1ZpZXcyLlZJRVdfVFlQRV9URVhUVVJFVklFVzsKLQotQFJlcXVpcmVzQXBpKDI2KQotY2xhc3MgVmlkZW9UZXh0dXJlVmlldyBleHRlbmRzIFRleHR1cmVWaWV3Ci0gICAgICAgIGltcGxlbWVudHMgVmlkZW9WaWV3SW50ZXJmYWNlLCBUZXh0dXJlVmlldy5TdXJmYWNlVGV4dHVyZUxpc3RlbmVyIHsKLSAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgVEFHID0gIlZpZGVvVGV4dHVyZVZpZXciOwotICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGJvb2xlYW4gREVCVUcgPSB0cnVlOyAvLyBTVE9QU0hJUDogTG9nLmlzTG9nZ2FibGUoVEFHLCBMb2cuREVCVUcpOwotCi0gICAgcHJpdmF0ZSBTdXJmYWNlVGV4dHVyZSBtU3VyZmFjZVRleHR1cmU7Ci0gICAgcHJpdmF0ZSBTdXJmYWNlIG1TdXJmYWNlOwotICAgIHByaXZhdGUgU3VyZmFjZUxpc3RlbmVyIG1TdXJmYWNlTGlzdGVuZXI7Ci0gICAgcHJpdmF0ZSBNZWRpYVBsYXllcjIgbU1lZGlhUGxheWVyOwotICAgIC8vIEEgZmxhZyB0byBpbmRpY2F0ZSB0YWtpbmcgb3ZlciBvdGhlciB2aWV3IHNob3VsZCBiZSBwcm9jZWVkLgotICAgIHByaXZhdGUgYm9vbGVhbiBtSXNUYWtpbmdPdmVyT2xkVmlldzsKLSAgICBwcml2YXRlIFZpZGVvVmlld0ludGVyZmFjZSBtT2xkVmlldzsKLQotICAgIHB1YmxpYyBWaWRlb1RleHR1cmVWaWV3KENvbnRleHQgY29udGV4dCkgewotICAgICAgICB0aGlzKGNvbnRleHQsIG51bGwpOwotICAgIH0KLQotICAgIHB1YmxpYyBWaWRlb1RleHR1cmVWaWV3KENvbnRleHQgY29udGV4dCwgQXR0cmlidXRlU2V0IGF0dHJzKSB7Ci0gICAgICAgIHRoaXMoY29udGV4dCwgYXR0cnMsIDApOwotICAgIH0KLQotICAgIHB1YmxpYyBWaWRlb1RleHR1cmVWaWV3KENvbnRleHQgY29udGV4dCwgQXR0cmlidXRlU2V0IGF0dHJzLCBpbnQgZGVmU3R5bGVBdHRyKSB7Ci0gICAgICAgIHRoaXMoY29udGV4dCwgYXR0cnMsIGRlZlN0eWxlQXR0ciwgMCk7Ci0gICAgfQotCi0gICAgcHVibGljIFZpZGVvVGV4dHVyZVZpZXcoCi0gICAgICAgICAgICBDb250ZXh0IGNvbnRleHQsIEF0dHJpYnV0ZVNldCBhdHRycywgaW50IGRlZlN0eWxlQXR0ciwgaW50IGRlZlN0eWxlUmVzKSB7Ci0gICAgICAgIHN1cGVyKGNvbnRleHQsIGF0dHJzLCBkZWZTdHlsZUF0dHIsIGRlZlN0eWxlUmVzKTsKLSAgICAgICAgc2V0U3VyZmFjZVRleHR1cmVMaXN0ZW5lcih0aGlzKTsKLSAgICB9Ci0KLSAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCi0gICAgLy8gaW1wbGVtZW50cyBWaWRlb1ZpZXdJbnRlcmZhY2UKLSAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCi0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgYm9vbGVhbiBhc3NpZ25TdXJmYWNlVG9NZWRpYVBsYXllcihNZWRpYVBsYXllcjIgbXApIHsKLSAgICAgICAgTG9nLmQoVEFHLCAiYXNzaWduU3VyZmFjZVRvTWVkaWFQbGF5ZXIoKTogbVN1cmZhY2VUZXh0dXJlOiAiICsgbVN1cmZhY2VUZXh0dXJlKTsKLSAgICAgICAgaWYgKG1wID09IG51bGwgfHwgIWhhc0F2YWlsYWJsZVN1cmZhY2UoKSkgewotICAgICAgICAgICAgLy8gU3VyZmFjZSBpcyBub3QgcmVhZHkuCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0KLSAgICAgICAgbXAuc2V0U3VyZmFjZShtU3VyZmFjZSk7Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyB2b2lkIHNldFN1cmZhY2VMaXN0ZW5lcihTdXJmYWNlTGlzdGVuZXIgbCkgewotICAgICAgICBtU3VyZmFjZUxpc3RlbmVyID0gbDsKLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgaW50IGdldFZpZXdUeXBlKCkgewotICAgICAgICByZXR1cm4gVklFV19UWVBFX1RFWFRVUkVWSUVXOwotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyB2b2lkIHNldE1lZGlhUGxheWVyKE1lZGlhUGxheWVyMiBtcCkgewotICAgICAgICBtTWVkaWFQbGF5ZXIgPSBtcDsKLSAgICAgICAgaWYgKG1Jc1Rha2luZ092ZXJPbGRWaWV3KSB7Ci0gICAgICAgICAgICB0YWtlT3ZlcihtT2xkVmlldyk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgdm9pZCB0YWtlT3ZlcihATm9uTnVsbCBWaWRlb1ZpZXdJbnRlcmZhY2Ugb2xkVmlldykgewotICAgICAgICBpZiAoYXNzaWduU3VyZmFjZVRvTWVkaWFQbGF5ZXIobU1lZGlhUGxheWVyKSkgewotICAgICAgICAgICAgKChWaWV3KSBvbGRWaWV3KS5zZXRWaXNpYmlsaXR5KEdPTkUpOwotICAgICAgICAgICAgbUlzVGFraW5nT3Zlck9sZFZpZXcgPSBmYWxzZTsKLSAgICAgICAgICAgIG1PbGRWaWV3ID0gbnVsbDsKLSAgICAgICAgICAgIGlmIChtU3VyZmFjZUxpc3RlbmVyICE9IG51bGwpIHsKLSAgICAgICAgICAgICAgICBtU3VyZmFjZUxpc3RlbmVyLm9uU3VyZmFjZVRha2VPdmVyRG9uZSh0aGlzKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIG1Jc1Rha2luZ092ZXJPbGRWaWV3ID0gdHJ1ZTsKLSAgICAgICAgICAgIG1PbGRWaWV3ID0gb2xkVmlldzsKLSAgICAgICAgfQotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyBib29sZWFuIGhhc0F2YWlsYWJsZVN1cmZhY2UoKSB7Ci0gICAgICAgIHJldHVybiAobVN1cmZhY2VUZXh0dXJlICE9IG51bGwgJiYgIW1TdXJmYWNlVGV4dHVyZS5pc1JlbGVhc2VkKCkgJiYgbVN1cmZhY2UgIT0gbnVsbCk7Ci0gICAgfQotCi0gICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLwotICAgIC8vIGltcGxlbWVudHMgVGV4dHVyZVZpZXcuU3VyZmFjZVRleHR1cmVMaXN0ZW5lcgotICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyB2b2lkIG9uU3VyZmFjZVRleHR1cmVBdmFpbGFibGUoU3VyZmFjZVRleHR1cmUgc3VyZmFjZVRleHR1cmUsIGludCB3aWR0aCwgaW50IGhlaWdodCkgewotICAgICAgICBMb2cuZChUQUcsICJvblN1cmZhY2VUZXh0dXJlQXZhaWxhYmxlOiBtU3VyZmFjZVRleHR1cmU6ICIgKyBtU3VyZmFjZVRleHR1cmUKLSAgICAgICAgICAgICAgICArICIsIG5ldyBzdXJmYWNlOiAiICsgc3VyZmFjZVRleHR1cmUpOwotICAgICAgICBtU3VyZmFjZVRleHR1cmUgPSBzdXJmYWNlVGV4dHVyZTsKLSAgICAgICAgbVN1cmZhY2UgPSBuZXcgU3VyZmFjZShtU3VyZmFjZVRleHR1cmUpOwotICAgICAgICBpZiAobUlzVGFraW5nT3Zlck9sZFZpZXcpIHsKLSAgICAgICAgICAgIHRha2VPdmVyKG1PbGRWaWV3KTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIGFzc2lnblN1cmZhY2VUb01lZGlhUGxheWVyKG1NZWRpYVBsYXllcik7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKG1TdXJmYWNlTGlzdGVuZXIgIT0gbnVsbCkgewotICAgICAgICAgICAgbVN1cmZhY2VMaXN0ZW5lci5vblN1cmZhY2VDcmVhdGVkKHRoaXMsIHdpZHRoLCBoZWlnaHQpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIHZvaWQgb25TdXJmYWNlVGV4dHVyZVNpemVDaGFuZ2VkKFN1cmZhY2VUZXh0dXJlIHN1cmZhY2VUZXh0dXJlLCBpbnQgd2lkdGgsIGludCBoZWlnaHQpIHsKLSAgICAgICAgaWYgKG1TdXJmYWNlTGlzdGVuZXIgIT0gbnVsbCkgewotICAgICAgICAgICAgbVN1cmZhY2VMaXN0ZW5lci5vblN1cmZhY2VDaGFuZ2VkKHRoaXMsIHdpZHRoLCBoZWlnaHQpOwotICAgICAgICB9Ci0gICAgICAgIC8vIHJlcXVlc3RMYXlvdXQoKTsgIC8vIFRPRE86IGZpZ3VyZSBvdXQgaWYgaXQgc2hvdWxkIGJlIGNhbGxlZCBoZXJlPwotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyB2b2lkIG9uU3VyZmFjZVRleHR1cmVVcGRhdGVkKFN1cmZhY2VUZXh0dXJlIHN1cmZhY2UpIHsKLSAgICAgICAgLy8gbm8tb3AKLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgYm9vbGVhbiBvblN1cmZhY2VUZXh0dXJlRGVzdHJveWVkKFN1cmZhY2VUZXh0dXJlIHN1cmZhY2VUZXh0dXJlKSB7Ci0gICAgICAgIGlmIChtU3VyZmFjZUxpc3RlbmVyICE9IG51bGwpIHsKLSAgICAgICAgICAgIG1TdXJmYWNlTGlzdGVuZXIub25TdXJmYWNlRGVzdHJveWVkKHRoaXMpOwotICAgICAgICB9Ci0gICAgICAgIG1TdXJmYWNlVGV4dHVyZSA9IG51bGw7Ci0gICAgICAgIG1TdXJmYWNlID0gbnVsbDsKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHJvdGVjdGVkIHZvaWQgb25NZWFzdXJlKGludCB3aWR0aE1lYXN1cmVTcGVjLCBpbnQgaGVpZ2h0TWVhc3VyZVNwZWMpIHsKLSAgICAgICAgaW50IHZpZGVvV2lkdGggPSAobU1lZGlhUGxheWVyID09IG51bGwpID8gMCA6IG1NZWRpYVBsYXllci5nZXRWaWRlb1dpZHRoKCk7Ci0gICAgICAgIGludCB2aWRlb0hlaWdodCA9IChtTWVkaWFQbGF5ZXIgPT0gbnVsbCkgPyAwIDogbU1lZGlhUGxheWVyLmdldFZpZGVvSGVpZ2h0KCk7Ci0gICAgICAgIGlmIChERUJVRykgewotICAgICAgICAgICAgTG9nLmQoVEFHLCAib25NZWFzdXJlKCIgKyBNZWFzdXJlU3BlYy50b1N0cmluZyh3aWR0aE1lYXN1cmVTcGVjKSArICIsICIKLSAgICAgICAgICAgICAgICAgICAgKyBNZWFzdXJlU3BlYy50b1N0cmluZyhoZWlnaHRNZWFzdXJlU3BlYykgKyAiKSIpOwotICAgICAgICAgICAgTG9nLmkoVEFHLCAiIG1lYXN1cmVkU2l6ZTogIiArIGdldE1lYXN1cmVkV2lkdGgoKSArICIvIiArIGdldE1lYXN1cmVkSGVpZ2h0KCkpOwotICAgICAgICAgICAgTG9nLmkoVEFHLCAiIHZpZXdTaXplOiAiICsgZ2V0V2lkdGgoKSArICIvIiArIGdldEhlaWdodCgpKTsKLSAgICAgICAgICAgIExvZy5pKFRBRywgIiBtVmlkZW9XaWR0aC9oZWlnaHQ6ICIgKyB2aWRlb1dpZHRoICsgIiwgIiArIHZpZGVvSGVpZ2h0KTsKLSAgICAgICAgfQotCi0gICAgICAgIGludCB3aWR0aCA9IGdldERlZmF1bHRTaXplKHZpZGVvV2lkdGgsIHdpZHRoTWVhc3VyZVNwZWMpOwotICAgICAgICBpbnQgaGVpZ2h0ID0gZ2V0RGVmYXVsdFNpemUodmlkZW9IZWlnaHQsIGhlaWdodE1lYXN1cmVTcGVjKTsKLQotICAgICAgICBpZiAodmlkZW9XaWR0aCA+IDAgJiYgdmlkZW9IZWlnaHQgPiAwKSB7Ci0gICAgICAgICAgICBpbnQgd2lkdGhTcGVjU2l6ZSA9IE1lYXN1cmVTcGVjLmdldFNpemUod2lkdGhNZWFzdXJlU3BlYyk7Ci0gICAgICAgICAgICBpbnQgaGVpZ2h0U3BlY1NpemUgPSBNZWFzdXJlU3BlYy5nZXRTaXplKGhlaWdodE1lYXN1cmVTcGVjKTsKLQotICAgICAgICAgICAgd2lkdGggPSB3aWR0aFNwZWNTaXplOwotICAgICAgICAgICAgaGVpZ2h0ID0gaGVpZ2h0U3BlY1NpemU7Ci0KLSAgICAgICAgICAgIC8vIGZvciBjb21wYXRpYmlsaXR5LCB3ZSBhZGp1c3Qgc2l6ZSBiYXNlZCBvbiBhc3BlY3QgcmF0aW8KLSAgICAgICAgICAgIGlmICh2aWRlb1dpZHRoICogaGVpZ2h0IDwgd2lkdGggKiB2aWRlb0hlaWdodCkgewotICAgICAgICAgICAgICAgIHdpZHRoID0gaGVpZ2h0ICogdmlkZW9XaWR0aCAvIHZpZGVvSGVpZ2h0OwotICAgICAgICAgICAgICAgIGlmIChERUJVRykgewotICAgICAgICAgICAgICAgICAgICBMb2cuZChUQUcsICJpbWFnZSB0b28gd2lkZSwgY29ycmVjdGluZy4gd2lkdGg6ICIgKyB3aWR0aCk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfSBlbHNlIGlmICh2aWRlb1dpZHRoICogaGVpZ2h0ID4gd2lkdGggKiB2aWRlb0hlaWdodCkgewotICAgICAgICAgICAgICAgIGhlaWdodCA9IHdpZHRoICogdmlkZW9IZWlnaHQgLyB2aWRlb1dpZHRoOwotICAgICAgICAgICAgICAgIGlmIChERUJVRykgewotICAgICAgICAgICAgICAgICAgICBMb2cuZChUQUcsICJpbWFnZSB0b28gdGFsbCwgY29ycmVjdGluZy4gaGVpZ2h0OiAiICsgaGVpZ2h0KTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAvLyBubyBzaXplIHlldCwganVzdCBhZG9wdCB0aGUgZ2l2ZW4gc3BlYyBzaXplcwotICAgICAgICB9Ci0gICAgICAgIHNldE1lYXN1cmVkRGltZW5zaW9uKHdpZHRoLCBoZWlnaHQpOwotICAgICAgICBpZiAoREVCVUcpIHsKLSAgICAgICAgICAgIExvZy5pKFRBRywgImVuZCBvZiBvbk1lYXN1cmUoKSIpOwotICAgICAgICAgICAgTG9nLmkoVEFHLCAiIG1lYXN1cmVkU2l6ZTogIiArIGdldE1lYXN1cmVkV2lkdGgoKSArICIvIiArIGdldE1lYXN1cmVkSGVpZ2h0KCkpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIFN0cmluZyB0b1N0cmluZygpIHsKLSAgICAgICAgcmV0dXJuICJWaWV3VHlwZTogVGV4dHVyZVZpZXcgLyBWaXNpYmlsaXR5OiAiICsgZ2V0VmlzaWJpbGl0eSgpCi0gICAgICAgICAgICAgICAgKyAiIC8gc3VyZmFjZVRleHR1cmU6ICIgKyBtU3VyZmFjZVRleHR1cmU7Ci0KLSAgICB9Ci19CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9NZWRpYUNvbXBvbmVudHMvc3JjL2NvbS9hbmRyb2lkL3dpZGdldC9WaWRlb1ZpZXcySW1wbC5qYXZhIGIvcGFja2FnZXMvTWVkaWFDb21wb25lbnRzL3NyYy9jb20vYW5kcm9pZC93aWRnZXQvVmlkZW9WaWV3MkltcGwuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTcyNzlkNi4uMDAwMDAwMAotLS0gYS9wYWNrYWdlcy9NZWRpYUNvbXBvbmVudHMvc3JjL2NvbS9hbmRyb2lkL3dpZGdldC9WaWRlb1ZpZXcySW1wbC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTQwNSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IDIwMTggVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAotICoKLSAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwotICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgotICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0gKgotICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLSAqCi0gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCi0gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAotICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCi0gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCi0gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KLSAqLwotCi1wYWNrYWdlIGNvbS5hbmRyb2lkLndpZGdldDsKLQotaW1wb3J0IGFuZHJvaWQuY29udGVudC5Db250ZXh0OwotaW1wb3J0IGFuZHJvaWQuY29udGVudC5wbS5BY3Rpdml0eUluZm87Ci1pbXBvcnQgYW5kcm9pZC5jb250ZW50LnJlcy5SZXNvdXJjZXM7Ci1pbXBvcnQgYW5kcm9pZC5ncmFwaGljcy5CaXRtYXA7Ci1pbXBvcnQgYW5kcm9pZC5ncmFwaGljcy5CaXRtYXBGYWN0b3J5OwotaW1wb3J0IGFuZHJvaWQuZ3JhcGhpY3MuUG9pbnQ7Ci1pbXBvcnQgYW5kcm9pZC5ncmFwaGljcy5kcmF3YWJsZS5CaXRtYXBEcmF3YWJsZTsKLWltcG9ydCBhbmRyb2lkLmdyYXBoaWNzLmRyYXdhYmxlLkRyYXdhYmxlOwotaW1wb3J0IGFuZHJvaWQubWVkaWEuQXVkaW9BdHRyaWJ1dGVzOwotaW1wb3J0IGFuZHJvaWQubWVkaWEuQXVkaW9Gb2N1c1JlcXVlc3Q7Ci1pbXBvcnQgYW5kcm9pZC5tZWRpYS5BdWRpb01hbmFnZXI7Ci1pbXBvcnQgYW5kcm9pZC5tZWRpYS5EYXRhU291cmNlRGVzYzsKLWltcG9ydCBhbmRyb2lkLm1lZGlhLk1lZGlhTWV0YWRhdGE7Ci1pbXBvcnQgYW5kcm9pZC5tZWRpYS5NZWRpYVBsYXllcjI7Ci1pbXBvcnQgYW5kcm9pZC5tZWRpYS5NZWRpYVBsYXllcjIuTWVkaWFQbGF5ZXIyRXZlbnRDYWxsYmFjazsKLWltcG9ydCBhbmRyb2lkLm1lZGlhLk1lZGlhUGxheWVyMi5PblN1YnRpdGxlRGF0YUxpc3RlbmVyOwotaW1wb3J0IGFuZHJvaWQubWVkaWEuTWVkaWFQbGF5ZXIySW1wbDsKLWltcG9ydCBhbmRyb2lkLm1lZGlhLlN1YnRpdGxlRGF0YTsKLWltcG9ydCBhbmRyb2lkLm1lZGlhLk1lZGlhSXRlbTI7Ci1pbXBvcnQgYW5kcm9pZC5tZWRpYS5NZWRpYU1ldGFkYXRhMjsKLWltcG9ydCBhbmRyb2lkLm1lZGlhLk1lZGlhTWV0YWRhdGFSZXRyaWV2ZXI7Ci1pbXBvcnQgYW5kcm9pZC5tZWRpYS5NZXRhZGF0YTsKLWltcG9ydCBhbmRyb2lkLm1lZGlhLlBsYXliYWNrUGFyYW1zOwotaW1wb3J0IGFuZHJvaWQubWVkaWEuVGltZWRUZXh0OwotaW1wb3J0IGFuZHJvaWQubWVkaWEuc2Vzc2lvbi5NZWRpYUNvbnRyb2xsZXI7Ci1pbXBvcnQgYW5kcm9pZC5tZWRpYS5zZXNzaW9uLk1lZGlhQ29udHJvbGxlci5QbGF5YmFja0luZm87Ci1pbXBvcnQgYW5kcm9pZC5tZWRpYS5zZXNzaW9uLk1lZGlhU2Vzc2lvbjsKLWltcG9ydCBhbmRyb2lkLm1lZGlhLnNlc3Npb24uUGxheWJhY2tTdGF0ZTsKLWltcG9ydCBhbmRyb2lkLm1lZGlhLlNlc3Npb25Ub2tlbjI7Ci1pbXBvcnQgYW5kcm9pZC5tZWRpYS51cGRhdGUuVmlkZW9WaWV3MlByb3ZpZGVyOwotaW1wb3J0IGFuZHJvaWQubWVkaWEudXBkYXRlLlZpZXdHcm91cFByb3ZpZGVyOwotaW1wb3J0IGFuZHJvaWQubmV0LlVyaTsKLWltcG9ydCBhbmRyb2lkLm9zLkFzeW5jVGFzazsKLWltcG9ydCBhbmRyb2lkLm9zLkJ1bmRsZTsKLWltcG9ydCBhbmRyb2lkLm9zLlJlc3VsdFJlY2VpdmVyOwotaW1wb3J0IGFuZHJvaWQuc3VwcG9ydC5hbm5vdGF0aW9uLk51bGxhYmxlOwotaW1wb3J0IGFuZHJvaWQudXRpbC5BdHRyaWJ1dGVTZXQ7Ci1pbXBvcnQgYW5kcm9pZC51dGlsLkRpc3BsYXlNZXRyaWNzOwotaW1wb3J0IGFuZHJvaWQudXRpbC5Mb2c7Ci1pbXBvcnQgYW5kcm9pZC51dGlsLlBhaXI7Ci1pbXBvcnQgYW5kcm9pZC52aWV3Lk1vdGlvbkV2ZW50OwotaW1wb3J0IGFuZHJvaWQudmlldy5WaWV3OwotaW1wb3J0IGFuZHJvaWQudmlldy5WaWV3R3JvdXAuTGF5b3V0UGFyYW1zOwotaW1wb3J0IGFuZHJvaWQudmlldy5XaW5kb3dNYW5hZ2VyOwotaW1wb3J0IGFuZHJvaWQudmlldy5hY2Nlc3NpYmlsaXR5LkFjY2Vzc2liaWxpdHlNYW5hZ2VyOwotaW1wb3J0IGFuZHJvaWQud2lkZ2V0LkltYWdlVmlldzsKLWltcG9ydCBhbmRyb2lkLndpZGdldC5NZWRpYUNvbnRyb2xWaWV3MjsKLWltcG9ydCBhbmRyb2lkLndpZGdldC5UZXh0VmlldzsKLWltcG9ydCBhbmRyb2lkLndpZGdldC5WaWRlb1ZpZXcyOwotCi1pbXBvcnQgY29tLmFuZHJvaWQuaW50ZXJuYWwuZ3JhcGhpY3MucGFsZXR0ZS5QYWxldHRlOwotaW1wb3J0IGNvbS5hbmRyb2lkLm1lZGlhLlJvdXRlUGxheWVyOwotaW1wb3J0IGNvbS5hbmRyb2lkLm1lZGlhLnN1YnRpdGxlLkNsb3NlZENhcHRpb25SZW5kZXJlcjsKLWltcG9ydCBjb20uYW5kcm9pZC5tZWRpYS5zdWJ0aXRsZS5TdWJ0aXRsZUNvbnRyb2xsZXI7Ci1pbXBvcnQgY29tLmFuZHJvaWQubWVkaWEuc3VidGl0bGUuU3VidGl0bGVUcmFjazsKLWltcG9ydCBjb20uYW5kcm9pZC5tZWRpYS51cGRhdGUuQXBpSGVscGVyOwotaW1wb3J0IGNvbS5hbmRyb2lkLm1lZGlhLnVwZGF0ZS5SOwotaW1wb3J0IGNvbS5hbmRyb2lkLnN1cHBvcnQubWVkaWFyb3V0ZXIubWVkaWEuTWVkaWFJdGVtU3RhdHVzOwotaW1wb3J0IGNvbS5hbmRyb2lkLnN1cHBvcnQubWVkaWFyb3V0ZXIubWVkaWEuTWVkaWFDb250cm9sSW50ZW50OwotaW1wb3J0IGNvbS5hbmRyb2lkLnN1cHBvcnQubWVkaWFyb3V0ZXIubWVkaWEuTWVkaWFSb3V0ZXI7Ci1pbXBvcnQgY29tLmFuZHJvaWQuc3VwcG9ydC5tZWRpYXJvdXRlci5tZWRpYS5NZWRpYVJvdXRlU2VsZWN0b3I7Ci0KLWltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OwotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotaW1wb3J0IGphdmEudXRpbC5NYXA7Ci1pbXBvcnQgamF2YS51dGlsLmNvbmN1cnJlbnQuRXhlY3V0b3I7Ci0KLXB1YmxpYyBjbGFzcyBWaWRlb1ZpZXcySW1wbCBleHRlbmRzIEJhc2VMYXlvdXQKLSAgICAgICAgaW1wbGVtZW50cyBWaWRlb1ZpZXcyUHJvdmlkZXIsIFZpZGVvVmlld0ludGVyZmFjZS5TdXJmYWNlTGlzdGVuZXIgewotICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBUQUcgPSAiVmlkZW9WaWV3MiI7Ci0gICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgYm9vbGVhbiBERUJVRyA9IHRydWU7IC8vIFNUT1BTSElQOiBMb2cuaXNMb2dnYWJsZShUQUcsIExvZy5ERUJVRyk7Ci0gICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgbG9uZyBERUZBVUxUX1NIT1dfQ09OVFJPTExFUl9JTlRFUlZBTF9NUyA9IDIwMDA7Ci0KLSAgICBwcml2YXRlIGZpbmFsIFZpZGVvVmlldzIgbUluc3RhbmNlOwotCi0gICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IFNUQVRFX0VSUk9SID0gLTE7Ci0gICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IFNUQVRFX0lETEUgPSAwOwotICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGludCBTVEFURV9QUkVQQVJJTkcgPSAxOwotICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGludCBTVEFURV9QUkVQQVJFRCA9IDI7Ci0gICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IFNUQVRFX1BMQVlJTkcgPSAzOwotICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGludCBTVEFURV9QQVVTRUQgPSA0OwotICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGludCBTVEFURV9QTEFZQkFDS19DT01QTEVURUQgPSA1OwotCi0gICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IElOVkFMSURfVFJBQ0tfSU5ERVggPSAtMTsKLSAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBmbG9hdCBJTlZBTElEX1NQRUVEID0gMGY7Ci0KLSAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgU0laRV9UWVBFX0VNQkVEREVEID0gMDsKLSAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgU0laRV9UWVBFX0ZVTEwgPSAxOwotICAgIC8vIFRPRE86IGFkZCBzdXBwb3J0IGZvciBNaW5pbWFsIHNpemUgdHlwZS4KLSAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgU0laRV9UWVBFX01JTklNQUwgPSAyOwotCi0gICAgcHJpdmF0ZSBBY2Nlc3NpYmlsaXR5TWFuYWdlciBtQWNjZXNzaWJpbGl0eU1hbmFnZXI7Ci0gICAgcHJpdmF0ZSBBdWRpb01hbmFnZXIgbUF1ZGlvTWFuYWdlcjsKLSAgICBwcml2YXRlIEF1ZGlvQXR0cmlidXRlcyBtQXVkaW9BdHRyaWJ1dGVzOwotICAgIHByaXZhdGUgaW50IG1BdWRpb0ZvY3VzVHlwZSA9IEF1ZGlvTWFuYWdlci5BVURJT0ZPQ1VTX0dBSU47IC8vIGxlZ2FjeSBmb2N1cyBnYWluCi0KLSAgICBwcml2YXRlIFBhaXI8RXhlY3V0b3IsIFZpZGVvVmlldzIuT25DdXN0b21BY3Rpb25MaXN0ZW5lcj4gbUN1c3RvbUFjdGlvbkxpc3RlbmVyUmVjb3JkOwotICAgIHByaXZhdGUgVmlkZW9WaWV3Mi5PblZpZXdUeXBlQ2hhbmdlZExpc3RlbmVyIG1WaWV3VHlwZUNoYW5nZWRMaXN0ZW5lcjsKLSAgICBwcml2YXRlIFZpZGVvVmlldzIuT25GdWxsU2NyZWVuUmVxdWVzdExpc3RlbmVyIG1GdWxsU2NyZWVuUmVxdWVzdExpc3RlbmVyOwotCi0gICAgcHJpdmF0ZSBWaWRlb1ZpZXdJbnRlcmZhY2UgbUN1cnJlbnRWaWV3OwotICAgIHByaXZhdGUgVmlkZW9UZXh0dXJlVmlldyBtVGV4dHVyZVZpZXc7Ci0gICAgcHJpdmF0ZSBWaWRlb1N1cmZhY2VWaWV3IG1TdXJmYWNlVmlldzsKLQotICAgIHByaXZhdGUgTWVkaWFQbGF5ZXIyIG1NZWRpYVBsYXllcjsKLSAgICBwcml2YXRlIERhdGFTb3VyY2VEZXNjIG1Ec2Q7Ci0gICAgcHJpdmF0ZSBNZWRpYUNvbnRyb2xWaWV3MiBtTWVkaWFDb250cm9sVmlldzsKLSAgICBwcml2YXRlIE1lZGlhU2Vzc2lvbiBtTWVkaWFTZXNzaW9uOwotICAgIHByaXZhdGUgTWVkaWFDb250cm9sbGVyIG1NZWRpYUNvbnRyb2xsZXI7Ci0gICAgcHJpdmF0ZSBNZXRhZGF0YSBtTWV0YWRhdGE7Ci0gICAgcHJpdmF0ZSBNZWRpYU1ldGFkYXRhMiBtTWVkaWFNZXRhZGF0YTsKLSAgICBwcml2YXRlIE1lZGlhTWV0YWRhdGFSZXRyaWV2ZXIgbVJldHJpZXZlcjsKLSAgICBwcml2YXRlIGJvb2xlYW4gbU5lZWRVcGRhdGVNZWRpYVR5cGU7Ci0gICAgcHJpdmF0ZSBCdW5kbGUgbU1lZGlhVHlwZURhdGE7Ci0gICAgcHJpdmF0ZSBTdHJpbmcgbVRpdGxlOwotCi0gICAgLy8gVE9ETzogbW92ZSBtdXNpYyB2aWV3IGluc2lkZSBTdXJmYWNlVmlldy9UZXh0dXJlVmlldyBvciBpbXBsZW1lbnQgVmlkZW9WaWV3SW50ZXJmYWNlLgotICAgIHByaXZhdGUgV2luZG93TWFuYWdlciBtTWFuYWdlcjsKLSAgICBwcml2YXRlIFJlc291cmNlcyBtUmVzb3VyY2VzOwotICAgIHByaXZhdGUgVmlldyBtTXVzaWNWaWV3OwotICAgIHByaXZhdGUgRHJhd2FibGUgbU11c2ljQWxidW1EcmF3YWJsZTsKLSAgICBwcml2YXRlIFN0cmluZyBtTXVzaWNUaXRsZVRleHQ7Ci0gICAgcHJpdmF0ZSBTdHJpbmcgbU11c2ljQXJ0aXN0VGV4dDsKLSAgICBwcml2YXRlIGJvb2xlYW4gbUlzTXVzaWNNZWRpYVR5cGU7Ci0gICAgcHJpdmF0ZSBpbnQgbVByZXZXaWR0aDsKLSAgICBwcml2YXRlIGludCBtUHJldkhlaWdodDsKLSAgICBwcml2YXRlIGludCBtRG9taW5hbnRDb2xvcjsKLSAgICBwcml2YXRlIGludCBtU2l6ZVR5cGU7Ci0KLSAgICBwcml2YXRlIFBsYXliYWNrU3RhdGUuQnVpbGRlciBtU3RhdGVCdWlsZGVyOwotICAgIHByaXZhdGUgTGlzdDxQbGF5YmFja1N0YXRlLkN1c3RvbUFjdGlvbj4gbUN1c3RvbUFjdGlvbkxpc3Q7Ci0gICAgcHJpdmF0ZSBpbnQgbVRhcmdldFN0YXRlID0gU1RBVEVfSURMRTsKLSAgICBwcml2YXRlIGludCBtQ3VycmVudFN0YXRlID0gU1RBVEVfSURMRTsKLSAgICBwcml2YXRlIGludCBtQ3VycmVudEJ1ZmZlclBlcmNlbnRhZ2U7Ci0gICAgcHJpdmF0ZSBsb25nIG1TZWVrV2hlblByZXBhcmVkOyAgLy8gcmVjb3JkaW5nIHRoZSBzZWVrIHBvc2l0aW9uIHdoaWxlIHByZXBhcmluZwotCi0gICAgcHJpdmF0ZSBpbnQgbVZpZGVvV2lkdGg7Ci0gICAgcHJpdmF0ZSBpbnQgbVZpZGVvSGVpZ2h0OwotCi0gICAgcHJpdmF0ZSBBcnJheUxpc3Q8SW50ZWdlcj4gbVZpZGVvVHJhY2tJbmRpY2VzOwotICAgIHByaXZhdGUgQXJyYXlMaXN0PEludGVnZXI+IG1BdWRpb1RyYWNrSW5kaWNlczsKLSAgICBwcml2YXRlIEFycmF5TGlzdDxQYWlyPEludGVnZXIsIFN1YnRpdGxlVHJhY2s+PiBtU3VidGl0bGVUcmFja0luZGljZXM7Ci0gICAgcHJpdmF0ZSBTdWJ0aXRsZUNvbnRyb2xsZXIgbVN1YnRpdGxlQ29udHJvbGxlcjsKLQotICAgIC8vIHNlbGVjdGVkIHZpZGVvL2F1ZGlvL3N1YnRpdGxlIHRyYWNrIGluZGV4IGFzIE1lZGlhUGxheWVyMiByZXR1cm5zCi0gICAgcHJpdmF0ZSBpbnQgbVNlbGVjdGVkVmlkZW9UcmFja0luZGV4OwotICAgIHByaXZhdGUgaW50IG1TZWxlY3RlZEF1ZGlvVHJhY2tJbmRleDsKLSAgICBwcml2YXRlIGludCBtU2VsZWN0ZWRTdWJ0aXRsZVRyYWNrSW5kZXg7Ci0KLSAgICBwcml2YXRlIFN1YnRpdGxlVmlldyBtU3VidGl0bGVWaWV3OwotICAgIHByaXZhdGUgYm9vbGVhbiBtU3VidGl0bGVFbmFibGVkOwotCi0gICAgcHJpdmF0ZSBmbG9hdCBtU3BlZWQ7Ci0gICAgLy8gVE9ETzogUmVtb3ZlIG1GYWxsYmFja1NwZWVkIHdoZW4gaW50ZWdyYXRpb24gd2l0aCBNZWRpYVBsYXllcjIncyBuZXcgc2V0UGxheWJhY2tQYXJhbXMoKS4KLSAgICAvLyBSZWZlcjogaHR0cHM6Ly9kb2NzLmdvb2dsZS5jb20vZG9jdW1lbnQvZC8xbnpBZm5zNmkyaEozUmthVXJlM1FNVDZ3c0RlZEo1T05MaUFfT09CRkZYOC9lZGl0Ci0gICAgcHJpdmF0ZSBmbG9hdCBtRmFsbGJhY2tTcGVlZDsgIC8vIGtlZXAgdGhlIG9yaWdpbmFsIHNwZWVkIGJlZm9yZSAncGF1c2UnIGlzIGNhbGxlZC4KLSAgICBwcml2YXRlIGZsb2F0IG1Wb2x1bWVMZXZlbEZsb2F0OwotICAgIHByaXZhdGUgaW50IG1Wb2x1bWVMZXZlbDsKLQotICAgIHByaXZhdGUgbG9uZyBtU2hvd0NvbnRyb2xsZXJJbnRlcnZhbE1zOwotCi0gICAgcHJpdmF0ZSBNZWRpYVJvdXRlciBtTWVkaWFSb3V0ZXI7Ci0gICAgcHJpdmF0ZSBNZWRpYVJvdXRlU2VsZWN0b3IgbVJvdXRlU2VsZWN0b3I7Ci0gICAgcHJpdmF0ZSBNZWRpYVJvdXRlci5Sb3V0ZUluZm8gbVJvdXRlOwotICAgIHByaXZhdGUgUm91dGVQbGF5ZXIgbVJvdXRlUGxheWVyOwotCi0gICAgcHJpdmF0ZSBmaW5hbCBNZWRpYVJvdXRlci5DYWxsYmFjayBtUm91dGVyQ2FsbGJhY2sgPSBuZXcgTWVkaWFSb3V0ZXIuQ2FsbGJhY2soKSB7Ci0gICAgICAgIEBPdmVycmlkZQotICAgICAgICBwdWJsaWMgdm9pZCBvblJvdXRlU2VsZWN0ZWQoTWVkaWFSb3V0ZXIgcm91dGVyLCBNZWRpYVJvdXRlci5Sb3V0ZUluZm8gcm91dGUpIHsKLSAgICAgICAgICAgIGlmIChyb3V0ZS5zdXBwb3J0c0NvbnRyb2xDYXRlZ29yeShNZWRpYUNvbnRyb2xJbnRlbnQuQ0FURUdPUllfUkVNT1RFX1BMQVlCQUNLKSkgewotICAgICAgICAgICAgICAgIC8vIFN0b3AgbG9jYWwgcGxheWJhY2sgKGlmIG5lY2Vzc2FyeSkKLSAgICAgICAgICAgICAgICByZXNldFBsYXllcigpOwotICAgICAgICAgICAgICAgIG1Sb3V0ZSA9IHJvdXRlOwotICAgICAgICAgICAgICAgIG1Sb3V0ZVBsYXllciA9IG5ldyBSb3V0ZVBsYXllcihtSW5zdGFuY2UuZ2V0Q29udGV4dCgpLCByb3V0ZSk7Ci0gICAgICAgICAgICAgICAgbVJvdXRlUGxheWVyLnNldFBsYXllckV2ZW50Q2FsbGJhY2sobmV3IFJvdXRlUGxheWVyLlBsYXllckV2ZW50Q2FsbGJhY2soKSB7Ci0gICAgICAgICAgICAgICAgICAgIEBPdmVycmlkZQotICAgICAgICAgICAgICAgICAgICBwdWJsaWMgdm9pZCBvblBsYXllclN0YXRlQ2hhbmdlZChNZWRpYUl0ZW1TdGF0dXMgaXRlbVN0YXR1cykgewotICAgICAgICAgICAgICAgICAgICAgICAgUGxheWJhY2tTdGF0ZS5CdWlsZGVyIHBzQnVpbGRlciA9IG5ldyBQbGF5YmFja1N0YXRlLkJ1aWxkZXIoKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIHBzQnVpbGRlci5zZXRBY3Rpb25zKFJvdXRlUGxheWVyLlBMQVlCQUNLX0FDVElPTlMpOwotICAgICAgICAgICAgICAgICAgICAgICAgbG9uZyBwb3NpdGlvbiA9IGl0ZW1TdGF0dXMuZ2V0Q29udGVudFBvc2l0aW9uKCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBzd2l0Y2ggKGl0ZW1TdGF0dXMuZ2V0UGxheWJhY2tTdGF0ZSgpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBNZWRpYUl0ZW1TdGF0dXMuUExBWUJBQ0tfU1RBVEVfUEVORElORzoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHNCdWlsZGVyLnNldFN0YXRlKFBsYXliYWNrU3RhdGUuU1RBVEVfTk9ORSwgcG9zaXRpb24sIDApOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtQ3VycmVudFN0YXRlID0gU1RBVEVfSURMRTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBNZWRpYUl0ZW1TdGF0dXMuUExBWUJBQ0tfU1RBVEVfUExBWUlORzoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHNCdWlsZGVyLnNldFN0YXRlKFBsYXliYWNrU3RhdGUuU1RBVEVfUExBWUlORywgcG9zaXRpb24sIDEpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtQ3VycmVudFN0YXRlID0gU1RBVEVfUExBWUlORzsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBNZWRpYUl0ZW1TdGF0dXMuUExBWUJBQ0tfU1RBVEVfUEFVU0VEOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwc0J1aWxkZXIuc2V0U3RhdGUoUGxheWJhY2tTdGF0ZS5TVEFURV9QQVVTRUQsIHBvc2l0aW9uLCAwKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbUN1cnJlbnRTdGF0ZSA9IFNUQVRFX1BBVVNFRDsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBNZWRpYUl0ZW1TdGF0dXMuUExBWUJBQ0tfU1RBVEVfQlVGRkVSSU5HOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwc0J1aWxkZXIuc2V0U3RhdGUoUGxheWJhY2tTdGF0ZS5TVEFURV9CVUZGRVJJTkcsIHBvc2l0aW9uLCAwKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbUN1cnJlbnRTdGF0ZSA9IFNUQVRFX1BBVVNFRDsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBNZWRpYUl0ZW1TdGF0dXMuUExBWUJBQ0tfU1RBVEVfRklOSVNIRUQ6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBzQnVpbGRlci5zZXRTdGF0ZShQbGF5YmFja1N0YXRlLlNUQVRFX1NUT1BQRUQsIHBvc2l0aW9uLCAwKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbUN1cnJlbnRTdGF0ZSA9IFNUQVRFX1BMQVlCQUNLX0NPTVBMRVRFRDsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgIFBsYXliYWNrU3RhdGUgcGJTdGF0ZSA9IHBzQnVpbGRlci5idWlsZCgpOwotICAgICAgICAgICAgICAgICAgICAgICAgbU1lZGlhU2Vzc2lvbi5zZXRQbGF5YmFja1N0YXRlKHBiU3RhdGUpOwotCi0gICAgICAgICAgICAgICAgICAgICAgICBNZWRpYU1ldGFkYXRhLkJ1aWxkZXIgbW1CdWlsZGVyID0gbmV3IE1lZGlhTWV0YWRhdGEuQnVpbGRlcigpOwotICAgICAgICAgICAgICAgICAgICAgICAgbW1CdWlsZGVyLnB1dExvbmcoTWVkaWFNZXRhZGF0YS5NRVRBREFUQV9LRVlfRFVSQVRJT04sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW1TdGF0dXMuZ2V0Q29udGVudER1cmF0aW9uKCkpOwotICAgICAgICAgICAgICAgICAgICAgICAgbU1lZGlhU2Vzc2lvbi5zZXRNZXRhZGF0YShtbUJ1aWxkZXIuYnVpbGQoKSk7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9KTsKLSAgICAgICAgICAgICAgICAvLyBTdGFydCByZW1vdGUgcGxheWJhY2sgKGlmIG5lY2Vzc2FyeSkKLSAgICAgICAgICAgICAgICBtUm91dGVQbGF5ZXIub3BlblZpZGVvKG1Ec2QpOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgIHB1YmxpYyB2b2lkIG9uUm91dGVVbnNlbGVjdGVkKE1lZGlhUm91dGVyIHJvdXRlciwgTWVkaWFSb3V0ZXIuUm91dGVJbmZvIHJvdXRlLCBpbnQgcmVhc29uKSB7Ci0gICAgICAgICAgICBpZiAobVJvdXRlICE9IG51bGwgJiYgbVJvdXRlUGxheWVyICE9IG51bGwpIHsKLSAgICAgICAgICAgICAgICBtUm91dGVQbGF5ZXIucmVsZWFzZSgpOwotICAgICAgICAgICAgICAgIG1Sb3V0ZVBsYXllciA9IG51bGw7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAobVJvdXRlID09IHJvdXRlKSB7Ci0gICAgICAgICAgICAgICAgbVJvdXRlID0gbnVsbDsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmIChyZWFzb24gIT0gTWVkaWFSb3V0ZXIuVU5TRUxFQ1RfUkVBU09OX1JPVVRFX0NIQU5HRUQpIHsKLSAgICAgICAgICAgICAgICAvLyBUT0RPOiBSZXN1bWUgbG9jYWwgcGxheWJhY2sgIChpZiBuZWNlc3NhcnkpCi0gICAgICAgICAgICAgICAgb3BlblZpZGVvKG1Ec2QpOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfTsKLQotICAgIHB1YmxpYyBWaWRlb1ZpZXcySW1wbChWaWRlb1ZpZXcyIGluc3RhbmNlLAotICAgICAgICAgICAgVmlld0dyb3VwUHJvdmlkZXIgc3VwZXJQcm92aWRlciwgVmlld0dyb3VwUHJvdmlkZXIgcHJpdmF0ZVByb3ZpZGVyKSB7Ci0gICAgICAgIHN1cGVyKGluc3RhbmNlLCBzdXBlclByb3ZpZGVyLCBwcml2YXRlUHJvdmlkZXIpOwotICAgICAgICBtSW5zdGFuY2UgPSBpbnN0YW5jZTsKLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgdm9pZCBpbml0aWFsaXplKEBOdWxsYWJsZSBBdHRyaWJ1dGVTZXQgYXR0cnMsIGludCBkZWZTdHlsZUF0dHIsIGludCBkZWZTdHlsZVJlcykgewotICAgICAgICBtVmlkZW9XaWR0aCA9IDA7Ci0gICAgICAgIG1WaWRlb0hlaWdodCA9IDA7Ci0gICAgICAgIG1TcGVlZCA9IDEuMGY7Ci0gICAgICAgIG1GYWxsYmFja1NwZWVkID0gbVNwZWVkOwotICAgICAgICBtU2VsZWN0ZWRTdWJ0aXRsZVRyYWNrSW5kZXggPSBJTlZBTElEX1RSQUNLX0lOREVYOwotICAgICAgICAvLyBUT0RPOiBhZGQgYXR0cmlidXRlcyB0byBnZXQgdGhpcyB2YWx1ZS4KLSAgICAgICAgbVNob3dDb250cm9sbGVySW50ZXJ2YWxNcyA9IERFRkFVTFRfU0hPV19DT05UUk9MTEVSX0lOVEVSVkFMX01TOwotCi0gICAgICAgIG1BY2Nlc3NpYmlsaXR5TWFuYWdlciA9IEFjY2Vzc2liaWxpdHlNYW5hZ2VyLmdldEluc3RhbmNlKG1JbnN0YW5jZS5nZXRDb250ZXh0KCkpOwotCi0gICAgICAgIG1BdWRpb01hbmFnZXIgPSAoQXVkaW9NYW5hZ2VyKSBtSW5zdGFuY2UuZ2V0Q29udGV4dCgpCi0gICAgICAgICAgICAgICAgLmdldFN5c3RlbVNlcnZpY2UoQ29udGV4dC5BVURJT19TRVJWSUNFKTsKLSAgICAgICAgbUF1ZGlvQXR0cmlidXRlcyA9IG5ldyBBdWRpb0F0dHJpYnV0ZXMuQnVpbGRlcigpLnNldFVzYWdlKEF1ZGlvQXR0cmlidXRlcy5VU0FHRV9NRURJQSkKLSAgICAgICAgICAgICAgICAuc2V0Q29udGVudFR5cGUoQXVkaW9BdHRyaWJ1dGVzLkNPTlRFTlRfVFlQRV9NT1ZJRSkuYnVpbGQoKTsKLSAgICAgICAgbUluc3RhbmNlLnNldEZvY3VzYWJsZSh0cnVlKTsKLSAgICAgICAgbUluc3RhbmNlLnNldEZvY3VzYWJsZUluVG91Y2hNb2RlKHRydWUpOwotICAgICAgICBtSW5zdGFuY2UucmVxdWVzdEZvY3VzKCk7Ci0KLSAgICAgICAgLy8gVE9ETzogdHJ5IHRvIGtlZXAgYSBzaW5nbGUgY2hpbGQgYXQgYSB0aW1lIHJhdGhlciB0aGFuIGFsd2F5cyBoYXZpbmcgYm90aC4KLSAgICAgICAgbVRleHR1cmVWaWV3ID0gbmV3IFZpZGVvVGV4dHVyZVZpZXcobUluc3RhbmNlLmdldENvbnRleHQoKSk7Ci0gICAgICAgIG1TdXJmYWNlVmlldyA9IG5ldyBWaWRlb1N1cmZhY2VWaWV3KG1JbnN0YW5jZS5nZXRDb250ZXh0KCkpOwotICAgICAgICBMYXlvdXRQYXJhbXMgcGFyYW1zID0gbmV3IExheW91dFBhcmFtcyhMYXlvdXRQYXJhbXMuTUFUQ0hfUEFSRU5ULAotICAgICAgICAgICAgICAgIExheW91dFBhcmFtcy5NQVRDSF9QQVJFTlQpOwotICAgICAgICBtVGV4dHVyZVZpZXcuc2V0TGF5b3V0UGFyYW1zKHBhcmFtcyk7Ci0gICAgICAgIG1TdXJmYWNlVmlldy5zZXRMYXlvdXRQYXJhbXMocGFyYW1zKTsKLSAgICAgICAgbVRleHR1cmVWaWV3LnNldFN1cmZhY2VMaXN0ZW5lcih0aGlzKTsKLSAgICAgICAgbVN1cmZhY2VWaWV3LnNldFN1cmZhY2VMaXN0ZW5lcih0aGlzKTsKLSAgICAgICAgbUluc3RhbmNlLmFkZFZpZXcobVRleHR1cmVWaWV3KTsKLSAgICAgICAgbUluc3RhbmNlLmFkZFZpZXcobVN1cmZhY2VWaWV3KTsKLQotICAgICAgICBtU3VidGl0bGVWaWV3ID0gbmV3IFN1YnRpdGxlVmlldyhtSW5zdGFuY2UuZ2V0Q29udGV4dCgpKTsKLSAgICAgICAgbVN1YnRpdGxlVmlldy5zZXRMYXlvdXRQYXJhbXMocGFyYW1zKTsKLSAgICAgICAgbVN1YnRpdGxlVmlldy5zZXRCYWNrZ3JvdW5kQ29sb3IoMCk7Ci0gICAgICAgIG1JbnN0YW5jZS5hZGRWaWV3KG1TdWJ0aXRsZVZpZXcpOwotCi0gICAgICAgIGJvb2xlYW4gZW5hYmxlQ29udHJvbFZpZXcgPSAoYXR0cnMgPT0gbnVsbCkgfHwgYXR0cnMuZ2V0QXR0cmlidXRlQm9vbGVhblZhbHVlKAotICAgICAgICAgICAgICAgICJodHRwOi8vc2NoZW1hcy5hbmRyb2lkLmNvbS9hcGsvcmVzL2FuZHJvaWQiLAotICAgICAgICAgICAgICAgICJlbmFibGVDb250cm9sVmlldyIsIHRydWUpOwotICAgICAgICBpZiAoZW5hYmxlQ29udHJvbFZpZXcpIHsKLSAgICAgICAgICAgIG1NZWRpYUNvbnRyb2xWaWV3ID0gbmV3IE1lZGlhQ29udHJvbFZpZXcyKG1JbnN0YW5jZS5nZXRDb250ZXh0KCkpOwotICAgICAgICB9Ci0KLSAgICAgICAgbVN1YnRpdGxlRW5hYmxlZCA9IChhdHRycyA9PSBudWxsKSB8fCBhdHRycy5nZXRBdHRyaWJ1dGVCb29sZWFuVmFsdWUoCi0gICAgICAgICAgICAgICAgImh0dHA6Ly9zY2hlbWFzLmFuZHJvaWQuY29tL2Fway9yZXMvYW5kcm9pZCIsCi0gICAgICAgICAgICAgICAgImVuYWJsZVN1YnRpdGxlIiwgZmFsc2UpOwotCi0gICAgICAgIC8vIFRPRE86IENob29zZSBUZXh0dXJlVmlldyB3aGVuIFN1cmZhY2VWaWV3IGNhbm5vdCBiZSBjcmVhdGVkLgotICAgICAgICAvLyBDaG9vc2Ugc3VyZmFjZSB2aWV3IGJ5IGRlZmF1bHQKLSAgICAgICAgaW50IHZpZXdUeXBlID0gKGF0dHJzID09IG51bGwpID8gVmlkZW9WaWV3Mi5WSUVXX1RZUEVfU1VSRkFDRVZJRVcKLSAgICAgICAgICAgICAgICA6IGF0dHJzLmdldEF0dHJpYnV0ZUludFZhbHVlKAotICAgICAgICAgICAgICAgICJodHRwOi8vc2NoZW1hcy5hbmRyb2lkLmNvbS9hcGsvcmVzL2FuZHJvaWQiLAotICAgICAgICAgICAgICAgICJ2aWV3VHlwZSIsIFZpZGVvVmlldzIuVklFV19UWVBFX1NVUkZBQ0VWSUVXKTsKLSAgICAgICAgaWYgKHZpZXdUeXBlID09IFZpZGVvVmlldzIuVklFV19UWVBFX1NVUkZBQ0VWSUVXKSB7Ci0gICAgICAgICAgICBMb2cuZChUQUcsICJ2aWV3VHlwZSBhdHRyaWJ1dGUgaXMgc3VyZmFjZVZpZXcuIik7Ci0gICAgICAgICAgICBtVGV4dHVyZVZpZXcuc2V0VmlzaWJpbGl0eShWaWV3LkdPTkUpOwotICAgICAgICAgICAgbVN1cmZhY2VWaWV3LnNldFZpc2liaWxpdHkoVmlldy5WSVNJQkxFKTsKLSAgICAgICAgICAgIG1DdXJyZW50VmlldyA9IG1TdXJmYWNlVmlldzsKLSAgICAgICAgfSBlbHNlIGlmICh2aWV3VHlwZSA9PSBWaWRlb1ZpZXcyLlZJRVdfVFlQRV9URVhUVVJFVklFVykgewotICAgICAgICAgICAgTG9nLmQoVEFHLCAidmlld1R5cGUgYXR0cmlidXRlIGlzIHRleHR1cmVWaWV3LiIpOwotICAgICAgICAgICAgbVRleHR1cmVWaWV3LnNldFZpc2liaWxpdHkoVmlldy5WSVNJQkxFKTsKLSAgICAgICAgICAgIG1TdXJmYWNlVmlldy5zZXRWaXNpYmlsaXR5KFZpZXcuR09ORSk7Ci0gICAgICAgICAgICBtQ3VycmVudFZpZXcgPSBtVGV4dHVyZVZpZXc7Ci0gICAgICAgIH0KLQotICAgICAgICBNZWRpYVJvdXRlU2VsZWN0b3IuQnVpbGRlciBidWlsZGVyID0gbmV3IE1lZGlhUm91dGVTZWxlY3Rvci5CdWlsZGVyKCk7Ci0gICAgICAgIGJ1aWxkZXIuYWRkQ29udHJvbENhdGVnb3J5KE1lZGlhQ29udHJvbEludGVudC5DQVRFR09SWV9SRU1PVEVfUExBWUJBQ0spOwotICAgICAgICBidWlsZGVyLmFkZENvbnRyb2xDYXRlZ29yeShNZWRpYUNvbnRyb2xJbnRlbnQuQ0FURUdPUllfTElWRV9BVURJTyk7Ci0gICAgICAgIGJ1aWxkZXIuYWRkQ29udHJvbENhdGVnb3J5KE1lZGlhQ29udHJvbEludGVudC5DQVRFR09SWV9MSVZFX1ZJREVPKTsKLSAgICAgICAgbVJvdXRlU2VsZWN0b3IgPSBidWlsZGVyLmJ1aWxkKCk7Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIHZvaWQgc2V0TWVkaWFDb250cm9sVmlldzJfaW1wbChNZWRpYUNvbnRyb2xWaWV3MiBtZWRpYUNvbnRyb2xWaWV3LCBsb25nIGludGVydmFsTXMpIHsKLSAgICAgICAgbU1lZGlhQ29udHJvbFZpZXcgPSBtZWRpYUNvbnRyb2xWaWV3OwotICAgICAgICBtU2hvd0NvbnRyb2xsZXJJbnRlcnZhbE1zID0gaW50ZXJ2YWxNczsKLSAgICAgICAgLy8gVE9ETzogQ2FsbCBNZWRpYUNvbnRyb2xWaWV3Mi5zZXRSb3V0ZVNlbGVjdG9yIG9ubHkgd2hlbiBjYXN0IGF2YWlsYWxiZS4KLSAgICAgICAgKChNZWRpYUNvbnRyb2xWaWV3MkltcGwpIG1NZWRpYUNvbnRyb2xWaWV3LmdldFByb3ZpZGVyKCkpLnNldFJvdXRlU2VsZWN0b3IobVJvdXRlU2VsZWN0b3IpOwotCi0gICAgICAgIGlmIChtSW5zdGFuY2UuaXNBdHRhY2hlZFRvV2luZG93KCkpIHsKLSAgICAgICAgICAgIGF0dGFjaE1lZGlhQ29udHJvbFZpZXcoKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyBNZWRpYUNvbnRyb2xsZXIgZ2V0TWVkaWFDb250cm9sbGVyX2ltcGwoKSB7Ci0gICAgICAgIGlmIChtTWVkaWFTZXNzaW9uID09IG51bGwpIHsKLSAgICAgICAgICAgIHRocm93IG5ldyBJbGxlZ2FsU3RhdGVFeGNlcHRpb24oIk1lZGlhU2Vzc2lvbiBpbnN0YW5jZSBpcyBub3QgYXZhaWxhYmxlLiIpOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiBtTWVkaWFDb250cm9sbGVyOwotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyBTZXNzaW9uVG9rZW4yIGdldE1lZGlhU2Vzc2lvblRva2VuX2ltcGwoKSB7Ci0gICAgICAgIC8vIFRPRE86IGltcGxlbWVudCB0aGlzCi0gICAgICAgIHJldHVybiBudWxsOwotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyBNZWRpYUNvbnRyb2xWaWV3MiBnZXRNZWRpYUNvbnRyb2xWaWV3Ml9pbXBsKCkgewotICAgICAgICByZXR1cm4gbU1lZGlhQ29udHJvbFZpZXc7Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIE1lZGlhTWV0YWRhdGEyIGdldE1lZGlhTWV0YWRhdGFfaW1wbCgpIHsKLSAgICAgICAgcmV0dXJuIG1NZWRpYU1ldGFkYXRhOwotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyB2b2lkIHNldE1lZGlhTWV0YWRhdGFfaW1wbChNZWRpYU1ldGFkYXRhMiBtZXRhZGF0YSkgewotICAgICAgICAvLyBUT0RPOiBpbnRlZ3JhdGUgdGhpcyB3aXRoIE1lZGlhU2Vzc2lvbjIjTWVkaWFJdGVtMgotICAgICAgICBtTWVkaWFNZXRhZGF0YSA9IG1ldGFkYXRhOwotCi0gICAgICAgIC8vIFRPRE86IGFkZCBzdXBwb3J0IGZvciBoYW5kbGluZyB3ZWJzaXRlIGxpbmsKLSAgICAgICAgbU1lZGlhVHlwZURhdGEgPSBuZXcgQnVuZGxlKCk7Ci0gICAgICAgIGJvb2xlYW4gaXNBZCA9IG1ldGFkYXRhID09IG51bGwgPwotICAgICAgICAgICAgICAgIGZhbHNlIDogbWV0YWRhdGEuZ2V0TG9uZyhNZWRpYU1ldGFkYXRhMi5NRVRBREFUQV9LRVlfQURWRVJUSVNFTUVOVCkgIT0gMDsKLSAgICAgICAgbU1lZGlhVHlwZURhdGEucHV0Qm9vbGVhbigKLSAgICAgICAgICAgICAgICBNZWRpYUNvbnRyb2xWaWV3MkltcGwuS0VZX1NUQVRFX0lTX0FEVkVSVElTRU1FTlQsIGlzQWQpOwotCi0gICAgICAgIGlmIChtTWVkaWFTZXNzaW9uICE9IG51bGwpIHsKLSAgICAgICAgICAgIG1NZWRpYVNlc3Npb24uc2VuZFNlc3Npb25FdmVudCgKLSAgICAgICAgICAgICAgICAgICAgTWVkaWFDb250cm9sVmlldzJJbXBsLkVWRU5UX1VQREFURV9NRURJQV9UWVBFX1NUQVRVUywgbU1lZGlhVHlwZURhdGEpOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgLy8gVXBkYXRlIGxhdGVyIGluc2lkZSBPblByZXBhcmVkTGlzdGVuZXIgYWZ0ZXIgTWVkaWFTZXNzaW9uIGlzIGluaXRpYWxpemVkLgotICAgICAgICAgICAgbU5lZWRVcGRhdGVNZWRpYVR5cGUgPSB0cnVlOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIHZvaWQgc2V0U3VidGl0bGVFbmFibGVkX2ltcGwoYm9vbGVhbiBlbmFibGUpIHsKLSAgICAgICAgaWYgKGVuYWJsZSAhPSBtU3VidGl0bGVFbmFibGVkKSB7Ci0gICAgICAgICAgICBzZWxlY3RPckRlc2VsZWN0U3VidGl0bGUoZW5hYmxlKTsKLSAgICAgICAgfQotICAgICAgICBtU3VidGl0bGVFbmFibGVkID0gZW5hYmxlOwotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyBib29sZWFuIGlzU3VidGl0bGVFbmFibGVkX2ltcGwoKSB7Ci0gICAgICAgIHJldHVybiBtU3VidGl0bGVFbmFibGVkOwotICAgIH0KLQotICAgIC8vIFRPRE86IHJlbW92ZSBzZXRTcGVlZF9pbXBsIG9uY2UgTWVkaWFDb250cm9sbGVyMiBpcyByZWFkeS4KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgdm9pZCBzZXRTcGVlZF9pbXBsKGZsb2F0IHNwZWVkKSB7Ci0gICAgICAgIGlmIChzcGVlZCA8PSAwLjBmKSB7Ci0gICAgICAgICAgICBMb2cuZShUQUcsICJVbnN1cHBvcnRlZCBzcGVlZCAoIiArIHNwZWVkICsgIikgaXMgaWdub3JlZC4iKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAgICAgICBtU3BlZWQgPSBzcGVlZDsKLSAgICAgICAgaWYgKG1NZWRpYVBsYXllciAhPSBudWxsICYmIG1NZWRpYVBsYXllci5pc1BsYXlpbmcoKSkgewotICAgICAgICAgICAgYXBwbHlTcGVlZCgpOwotICAgICAgICB9Ci0gICAgICAgIHVwZGF0ZVBsYXliYWNrU3RhdGUoKTsKLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgdm9pZCBzZXRBdWRpb0ZvY3VzUmVxdWVzdF9pbXBsKGludCBmb2N1c0dhaW4pIHsKLSAgICAgICAgaWYgKGZvY3VzR2FpbiAhPSBBdWRpb01hbmFnZXIuQVVESU9GT0NVU19OT05FCi0gICAgICAgICAgICAgICAgJiYgZm9jdXNHYWluICE9IEF1ZGlvTWFuYWdlci5BVURJT0ZPQ1VTX0dBSU4KLSAgICAgICAgICAgICAgICAmJiBmb2N1c0dhaW4gIT0gQXVkaW9NYW5hZ2VyLkFVRElPRk9DVVNfR0FJTl9UUkFOU0lFTlQKLSAgICAgICAgICAgICAgICAmJiBmb2N1c0dhaW4gIT0gQXVkaW9NYW5hZ2VyLkFVRElPRk9DVVNfR0FJTl9UUkFOU0lFTlRfTUFZX0RVQ0sKLSAgICAgICAgICAgICAgICAmJiBmb2N1c0dhaW4gIT0gQXVkaW9NYW5hZ2VyLkFVRElPRk9DVVNfR0FJTl9UUkFOU0lFTlRfRVhDTFVTSVZFKSB7Ci0gICAgICAgICAgICB0aHJvdyBuZXcgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKCJJbGxlZ2FsIGF1ZGlvIGZvY3VzIHR5cGUgIiArIGZvY3VzR2Fpbik7Ci0gICAgICAgIH0KLSAgICAgICAgbUF1ZGlvRm9jdXNUeXBlID0gZm9jdXNHYWluOwotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyB2b2lkIHNldEF1ZGlvQXR0cmlidXRlc19pbXBsKEF1ZGlvQXR0cmlidXRlcyBhdHRyaWJ1dGVzKSB7Ci0gICAgICAgIGlmIChhdHRyaWJ1dGVzID09IG51bGwpIHsKLSAgICAgICAgICAgIHRocm93IG5ldyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oIklsbGVnYWwgbnVsbCBBdWRpb0F0dHJpYnV0ZXMiKTsKLSAgICAgICAgfQotICAgICAgICBtQXVkaW9BdHRyaWJ1dGVzID0gYXR0cmlidXRlczsKLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgdm9pZCBzZXRWaWRlb1BhdGhfaW1wbChTdHJpbmcgcGF0aCkgewotICAgICAgICBtSW5zdGFuY2Uuc2V0VmlkZW9VcmkoVXJpLnBhcnNlKHBhdGgpKTsKLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgdm9pZCBzZXRWaWRlb1VyaV9pbXBsKFVyaSB1cmkpIHsKLSAgICAgICAgbUluc3RhbmNlLnNldFZpZGVvVXJpKHVyaSwgbnVsbCk7Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIHZvaWQgc2V0VmlkZW9VcmlfaW1wbChVcmkgdXJpLCBNYXA8U3RyaW5nLCBTdHJpbmc+IGhlYWRlcnMpIHsKLSAgICAgICAgRGF0YVNvdXJjZURlc2MuQnVpbGRlciBidWlsZGVyID0gbmV3IERhdGFTb3VyY2VEZXNjLkJ1aWxkZXIoKTsKLSAgICAgICAgYnVpbGRlci5zZXREYXRhU291cmNlKG1JbnN0YW5jZS5nZXRDb250ZXh0KCksIHVyaSwgaGVhZGVycywgbnVsbCk7Ci0gICAgICAgIG1JbnN0YW5jZS5zZXREYXRhU291cmNlKGJ1aWxkZXIuYnVpbGQoKSk7Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIHZvaWQgc2V0TWVkaWFJdGVtX2ltcGwoTWVkaWFJdGVtMiBtZWRpYUl0ZW0pIHsKLSAgICAgICAgLy8gVE9ETzogaW1wbGVtZW50IHRoaXMKLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgdm9pZCBzZXREYXRhU291cmNlX2ltcGwoRGF0YVNvdXJjZURlc2MgZHNkKSB7Ci0gICAgICAgIG1Ec2QgPSBkc2Q7Ci0gICAgICAgIG1TZWVrV2hlblByZXBhcmVkID0gMDsKLSAgICAgICAgb3BlblZpZGVvKGRzZCk7Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIHZvaWQgc2V0Vmlld1R5cGVfaW1wbChpbnQgdmlld1R5cGUpIHsKLSAgICAgICAgaWYgKHZpZXdUeXBlID09IG1DdXJyZW50Vmlldy5nZXRWaWV3VHlwZSgpKSB7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICAgICAgVmlkZW9WaWV3SW50ZXJmYWNlIHRhcmdldFZpZXc7Ci0gICAgICAgIGlmICh2aWV3VHlwZSA9PSBWaWRlb1ZpZXcyLlZJRVdfVFlQRV9URVhUVVJFVklFVykgewotICAgICAgICAgICAgTG9nLmQoVEFHLCAic3dpdGNoaW5nIHRvIFRleHR1cmVWaWV3Iik7Ci0gICAgICAgICAgICB0YXJnZXRWaWV3ID0gbVRleHR1cmVWaWV3OwotICAgICAgICB9IGVsc2UgaWYgKHZpZXdUeXBlID09IFZpZGVvVmlldzIuVklFV19UWVBFX1NVUkZBQ0VWSUVXKSB7Ci0gICAgICAgICAgICBMb2cuZChUQUcsICJzd2l0Y2hpbmcgdG8gU3VyZmFjZVZpZXciKTsKLSAgICAgICAgICAgIHRhcmdldFZpZXcgPSBtU3VyZmFjZVZpZXc7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICB0aHJvdyBuZXcgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKCJVbmtub3duIHZpZXcgdHlwZTogIiArIHZpZXdUeXBlKTsKLSAgICAgICAgfQotICAgICAgICAoKFZpZXcpIHRhcmdldFZpZXcpLnNldFZpc2liaWxpdHkoVmlldy5WSVNJQkxFKTsKLSAgICAgICAgdGFyZ2V0Vmlldy50YWtlT3ZlcihtQ3VycmVudFZpZXcpOwotICAgICAgICBtSW5zdGFuY2UucmVxdWVzdExheW91dCgpOwotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyBpbnQgZ2V0Vmlld1R5cGVfaW1wbCgpIHsKLSAgICAgICAgcmV0dXJuIG1DdXJyZW50Vmlldy5nZXRWaWV3VHlwZSgpOwotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyB2b2lkIHNldEN1c3RvbUFjdGlvbnNfaW1wbCgKLSAgICAgICAgICAgIExpc3Q8UGxheWJhY2tTdGF0ZS5DdXN0b21BY3Rpb24+IGFjdGlvbkxpc3QsCi0gICAgICAgICAgICBFeGVjdXRvciBleGVjdXRvciwgVmlkZW9WaWV3Mi5PbkN1c3RvbUFjdGlvbkxpc3RlbmVyIGxpc3RlbmVyKSB7Ci0gICAgICAgIG1DdXN0b21BY3Rpb25MaXN0ID0gYWN0aW9uTGlzdDsKLSAgICAgICAgbUN1c3RvbUFjdGlvbkxpc3RlbmVyUmVjb3JkID0gbmV3IFBhaXI8PihleGVjdXRvciwgbGlzdGVuZXIpOwotCi0gICAgICAgIC8vIENyZWF0ZSBhIG5ldyBwbGF5YmFjayBidWlsZGVyIGluIG9yZGVyIHRvIGNsZWFyIGV4aXN0aW5nIHRoZSBjdXN0b20gYWN0aW9ucy4KLSAgICAgICAgbVN0YXRlQnVpbGRlciA9IG51bGw7Ci0gICAgICAgIHVwZGF0ZVBsYXliYWNrU3RhdGUoKTsKLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgdm9pZCBzZXRPblZpZXdUeXBlQ2hhbmdlZExpc3RlbmVyX2ltcGwoVmlkZW9WaWV3Mi5PblZpZXdUeXBlQ2hhbmdlZExpc3RlbmVyIGwpIHsKLSAgICAgICAgbVZpZXdUeXBlQ2hhbmdlZExpc3RlbmVyID0gbDsKLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgdm9pZCBzZXRGdWxsU2NyZWVuUmVxdWVzdExpc3RlbmVyX2ltcGwoVmlkZW9WaWV3Mi5PbkZ1bGxTY3JlZW5SZXF1ZXN0TGlzdGVuZXIgbCkgewotICAgICAgICBtRnVsbFNjcmVlblJlcXVlc3RMaXN0ZW5lciA9IGw7Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIHZvaWQgb25BdHRhY2hlZFRvV2luZG93X2ltcGwoKSB7Ci0gICAgICAgIHN1cGVyLm9uQXR0YWNoZWRUb1dpbmRvd19pbXBsKCk7Ci0KLSAgICAgICAgLy8gQ3JlYXRlIE1lZGlhU2Vzc2lvbgotICAgICAgICBtTWVkaWFTZXNzaW9uID0gbmV3IE1lZGlhU2Vzc2lvbihtSW5zdGFuY2UuZ2V0Q29udGV4dCgpLCAiVmlkZW9WaWV3Mk1lZGlhU2Vzc2lvbiIpOwotICAgICAgICBtTWVkaWFTZXNzaW9uLnNldENhbGxiYWNrKG5ldyBNZWRpYVNlc3Npb25DYWxsYmFjaygpKTsKLSAgICAgICAgbU1lZGlhU2Vzc2lvbi5zZXRBY3RpdmUodHJ1ZSk7Ci0gICAgICAgIG1NZWRpYUNvbnRyb2xsZXIgPSBtTWVkaWFTZXNzaW9uLmdldENvbnRyb2xsZXIoKTsKLSAgICAgICAgbU1lZGlhUm91dGVyID0gTWVkaWFSb3V0ZXIuZ2V0SW5zdGFuY2UobUluc3RhbmNlLmdldENvbnRleHQoKSk7Ci0gICAgICAgIG1NZWRpYVJvdXRlci5zZXRNZWRpYVNlc3Npb24obU1lZGlhU2Vzc2lvbik7Ci0gICAgICAgIG1NZWRpYVJvdXRlci5hZGRDYWxsYmFjayhtUm91dGVTZWxlY3RvciwgbVJvdXRlckNhbGxiYWNrKTsKLSAgICAgICAgYXR0YWNoTWVkaWFDb250cm9sVmlldygpOwotICAgICAgICAvLyBUT0RPOiByZW1vdmUgdGhpcyBhZnRlciBtb3ZpbmcgTWVkaWFTZXNzaW9uIGNyZWF0aW5nIGNvZGUgaW5zaWRlIGluaXRpYWxpemluZyBWaWRlb1ZpZXcyCi0gICAgICAgIGlmIChtQ3VycmVudFN0YXRlID09IFNUQVRFX1BSRVBBUkVEKSB7Ci0gICAgICAgICAgICBleHRyYWN0VHJhY2tzKCk7Ci0gICAgICAgICAgICBleHRyYWN0TWV0YWRhdGEoKTsKLSAgICAgICAgICAgIGV4dHJhY3RBdWRpb01ldGFkYXRhKCk7Ci0gICAgICAgICAgICBpZiAobU5lZWRVcGRhdGVNZWRpYVR5cGUpIHsKLSAgICAgICAgICAgICAgICBtTWVkaWFTZXNzaW9uLnNlbmRTZXNzaW9uRXZlbnQoCi0gICAgICAgICAgICAgICAgICAgICAgICBNZWRpYUNvbnRyb2xWaWV3MkltcGwuRVZFTlRfVVBEQVRFX01FRElBX1RZUEVfU1RBVFVTLAotICAgICAgICAgICAgICAgICAgICAgICAgbU1lZGlhVHlwZURhdGEpOwotICAgICAgICAgICAgICAgIG1OZWVkVXBkYXRlTWVkaWFUeXBlID0gZmFsc2U7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgdm9pZCBvbkRldGFjaGVkRnJvbVdpbmRvd19pbXBsKCkgewotICAgICAgICBzdXBlci5vbkRldGFjaGVkRnJvbVdpbmRvd19pbXBsKCk7Ci0KLSAgICAgICAgbU1lZGlhU2Vzc2lvbi5yZWxlYXNlKCk7Ci0gICAgICAgIG1NZWRpYVNlc3Npb24gPSBudWxsOwotICAgICAgICBtTWVkaWFDb250cm9sbGVyID0gbnVsbDsKLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgQ2hhclNlcXVlbmNlIGdldEFjY2Vzc2liaWxpdHlDbGFzc05hbWVfaW1wbCgpIHsKLSAgICAgICAgcmV0dXJuIFZpZGVvVmlldzIuY2xhc3MuZ2V0TmFtZSgpOwotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyBib29sZWFuIG9uVG91Y2hFdmVudF9pbXBsKE1vdGlvbkV2ZW50IGV2KSB7Ci0gICAgICAgIGlmIChERUJVRykgewotICAgICAgICAgICAgTG9nLmQoVEFHLCAib25Ub3VjaEV2ZW50KCkuIG1DdXJyZW50U3RhdGU9IiArIG1DdXJyZW50U3RhdGUKLSAgICAgICAgICAgICAgICAgICAgKyAiLCBtVGFyZ2V0U3RhdGU9IiArIG1UYXJnZXRTdGF0ZSk7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKGV2LmdldEFjdGlvbigpID09IE1vdGlvbkV2ZW50LkFDVElPTl9VUCAmJiBtTWVkaWFDb250cm9sVmlldyAhPSBudWxsKSB7Ci0gICAgICAgICAgICBpZiAoIW1Jc011c2ljTWVkaWFUeXBlIHx8IG1TaXplVHlwZSAhPSBTSVpFX1RZUEVfRlVMTCkgewotICAgICAgICAgICAgICAgIHRvZ2dsZU1lZGlhQ29udHJvbFZpZXdWaXNpYmlsaXR5KCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICByZXR1cm4gc3VwZXIub25Ub3VjaEV2ZW50X2ltcGwoZXYpOwotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyBib29sZWFuIG9uVHJhY2tiYWxsRXZlbnRfaW1wbChNb3Rpb25FdmVudCBldikgewotICAgICAgICBpZiAoZXYuZ2V0QWN0aW9uKCkgPT0gTW90aW9uRXZlbnQuQUNUSU9OX1VQICYmIG1NZWRpYUNvbnRyb2xWaWV3ICE9IG51bGwpIHsKLSAgICAgICAgICAgIGlmICghbUlzTXVzaWNNZWRpYVR5cGUgfHwgbVNpemVUeXBlICE9IFNJWkVfVFlQRV9GVUxMKSB7Ci0gICAgICAgICAgICAgICAgdG9nZ2xlTWVkaWFDb250cm9sVmlld1Zpc2liaWxpdHkoKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIHJldHVybiBzdXBlci5vblRyYWNrYmFsbEV2ZW50X2ltcGwoZXYpOwotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyBib29sZWFuIGRpc3BhdGNoVG91Y2hFdmVudF9pbXBsKE1vdGlvbkV2ZW50IGV2KSB7Ci0gICAgICAgIC8vIFRPRE86IFRlc3QgdG91Y2ggZXZlbnQgaGFuZGxpbmcgbG9naWMgdGhvcm91Z2hseSBhbmQgc2ltcGxpZnkgdGhlIGxvZ2ljLgotICAgICAgICByZXR1cm4gc3VwZXIuZGlzcGF0Y2hUb3VjaEV2ZW50X2ltcGwoZXYpOwotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyB2b2lkIG9uTWVhc3VyZV9pbXBsKGludCB3aWR0aE1lYXN1cmVTcGVjLCBpbnQgaGVpZ2h0TWVhc3VyZVNwZWMpIHsKLSAgICAgICAgc3VwZXIub25NZWFzdXJlX2ltcGwod2lkdGhNZWFzdXJlU3BlYywgaGVpZ2h0TWVhc3VyZVNwZWMpOwotCi0gICAgICAgIGlmIChtSXNNdXNpY01lZGlhVHlwZSkgewotICAgICAgICAgICAgaWYgKG1QcmV2V2lkdGggIT0gbUluc3RhbmNlLmdldE1lYXN1cmVkV2lkdGgoKQotICAgICAgICAgICAgICAgICAgICB8fCBtUHJldkhlaWdodCAhPSBtSW5zdGFuY2UuZ2V0TWVhc3VyZWRIZWlnaHQoKSkgewotICAgICAgICAgICAgICAgIGludCBjdXJyV2lkdGggPSBtSW5zdGFuY2UuZ2V0TWVhc3VyZWRXaWR0aCgpOwotICAgICAgICAgICAgICAgIGludCBjdXJySGVpZ2h0ID0gbUluc3RhbmNlLmdldE1lYXN1cmVkSGVpZ2h0KCk7Ci0gICAgICAgICAgICAgICAgUG9pbnQgc2NyZWVuU2l6ZSA9IG5ldyBQb2ludCgpOwotICAgICAgICAgICAgICAgIG1NYW5hZ2VyLmdldERlZmF1bHREaXNwbGF5KCkuZ2V0U2l6ZShzY3JlZW5TaXplKTsKLSAgICAgICAgICAgICAgICBpbnQgc2NyZWVuV2lkdGggPSBzY3JlZW5TaXplLng7Ci0gICAgICAgICAgICAgICAgaW50IHNjcmVlbkhlaWdodCA9IHNjcmVlblNpemUueTsKLQotICAgICAgICAgICAgICAgIGlmIChjdXJyV2lkdGggPT0gc2NyZWVuV2lkdGggJiYgY3VyckhlaWdodCA9PSBzY3JlZW5IZWlnaHQpIHsKLSAgICAgICAgICAgICAgICAgICAgaW50IG9yaWVudGF0aW9uID0gcmV0cmlldmVPcmllbnRhdGlvbigpOwotICAgICAgICAgICAgICAgICAgICBpZiAob3JpZW50YXRpb24gPT0gQWN0aXZpdHlJbmZvLlNDUkVFTl9PUklFTlRBVElPTl9MQU5EU0NBUEUpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGluZmxhdGVNdXNpY1ZpZXcoUi5sYXlvdXQuZnVsbF9sYW5kc2NhcGVfbXVzaWMpOwotICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICAgICAgaW5mbGF0ZU11c2ljVmlldyhSLmxheW91dC5mdWxsX3BvcnRyYWl0X211c2ljKTsKLSAgICAgICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgICAgIGlmIChtU2l6ZVR5cGUgIT0gU0laRV9UWVBFX0ZVTEwpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIG1TaXplVHlwZSA9IFNJWkVfVFlQRV9GVUxMOwotICAgICAgICAgICAgICAgICAgICAgICAgLy8gUmVtb3ZlIGV4aXN0aW5nIG1GYWRlT3V0IGNhbGxiYWNrCi0gICAgICAgICAgICAgICAgICAgICAgICBtTWVkaWFDb250cm9sVmlldy5yZW1vdmVDYWxsYmFja3MobUZhZGVPdXQpOwotICAgICAgICAgICAgICAgICAgICAgICAgbU1lZGlhQ29udHJvbFZpZXcuc2V0VmlzaWJpbGl0eShWaWV3LlZJU0lCTEUpOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKG1TaXplVHlwZSAhPSBTSVpFX1RZUEVfRU1CRURERUQpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIG1TaXplVHlwZSA9IFNJWkVfVFlQRV9FTUJFRERFRDsKLSAgICAgICAgICAgICAgICAgICAgICAgIGluZmxhdGVNdXNpY1ZpZXcoUi5sYXlvdXQuZW1iZWRkZWRfbXVzaWMpOwotICAgICAgICAgICAgICAgICAgICAgICAgLy8gQWRkIG5ldyBtRmFkZU91dCBjYWxsYmFjawotICAgICAgICAgICAgICAgICAgICAgICAgbU1lZGlhQ29udHJvbFZpZXcucG9zdERlbGF5ZWQobUZhZGVPdXQsIG1TaG93Q29udHJvbGxlckludGVydmFsTXMpOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIG1QcmV2V2lkdGggPSBjdXJyV2lkdGg7Ci0gICAgICAgICAgICAgICAgbVByZXZIZWlnaHQgPSBjdXJySGVpZ2h0OwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotCi0gICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCi0gICAgLy8gSW1wbGVtZW50cyBWaWRlb1ZpZXdJbnRlcmZhY2UuU3VyZmFjZUxpc3RlbmVyCi0gICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCi0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgdm9pZCBvblN1cmZhY2VDcmVhdGVkKFZpZXcgdmlldywgaW50IHdpZHRoLCBpbnQgaGVpZ2h0KSB7Ci0gICAgICAgIGlmIChERUJVRykgewotICAgICAgICAgICAgTG9nLmQoVEFHLCAib25TdXJmYWNlQ3JlYXRlZCgpLiBtQ3VycmVudFN0YXRlPSIgKyBtQ3VycmVudFN0YXRlCi0gICAgICAgICAgICAgICAgICAgICsgIiwgbVRhcmdldFN0YXRlPSIgKyBtVGFyZ2V0U3RhdGUgKyAiLCB3aWR0aC9oZWlnaHQ6ICIgKyB3aWR0aCArICIvIiArIGhlaWdodAotICAgICAgICAgICAgICAgICAgICArICIsICIgKyB2aWV3LnRvU3RyaW5nKCkpOwotICAgICAgICB9Ci0gICAgICAgIGlmIChuZWVkVG9TdGFydCgpKSB7Ci0gICAgICAgICAgICBtTWVkaWFDb250cm9sbGVyLmdldFRyYW5zcG9ydENvbnRyb2xzKCkucGxheSgpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIHZvaWQgb25TdXJmYWNlRGVzdHJveWVkKFZpZXcgdmlldykgewotICAgICAgICBpZiAoREVCVUcpIHsKLSAgICAgICAgICAgIExvZy5kKFRBRywgIm9uU3VyZmFjZURlc3Ryb3llZCgpLiBtQ3VycmVudFN0YXRlPSIgKyBtQ3VycmVudFN0YXRlCi0gICAgICAgICAgICAgICAgICAgICsgIiwgbVRhcmdldFN0YXRlPSIgKyBtVGFyZ2V0U3RhdGUgKyAiLCAiICsgdmlldy50b1N0cmluZygpKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyB2b2lkIG9uU3VyZmFjZUNoYW5nZWQoVmlldyB2aWV3LCBpbnQgd2lkdGgsIGludCBoZWlnaHQpIHsKLSAgICAgICAgLy8gVE9ETzogRG8gd2UgbmVlZCB0byBjYWxsIHJlcXVlc3RMYXlvdXQgaGVyZT8KLSAgICAgICAgaWYgKERFQlVHKSB7Ci0gICAgICAgICAgICBMb2cuZChUQUcsICJvblN1cmZhY2VDaGFuZ2VkKCkuIHdpZHRoL2hlaWdodDogIiArIHdpZHRoICsgIi8iICsgaGVpZ2h0Ci0gICAgICAgICAgICAgICAgICAgICsgIiwgIiArIHZpZXcudG9TdHJpbmcoKSk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgdm9pZCBvblN1cmZhY2VUYWtlT3ZlckRvbmUoVmlkZW9WaWV3SW50ZXJmYWNlIHZpZXcpIHsKLSAgICAgICAgaWYgKERFQlVHKSB7Ci0gICAgICAgICAgICBMb2cuZChUQUcsICJvblN1cmZhY2VUYWtlT3ZlckRvbmUoKS4gTm93IGN1cnJlbnQgdmlldyBpczogIiArIHZpZXcpOwotICAgICAgICB9Ci0gICAgICAgIG1DdXJyZW50VmlldyA9IHZpZXc7Ci0gICAgICAgIGlmIChtVmlld1R5cGVDaGFuZ2VkTGlzdGVuZXIgIT0gbnVsbCkgewotICAgICAgICAgICAgbVZpZXdUeXBlQ2hhbmdlZExpc3RlbmVyLm9uVmlld1R5cGVDaGFuZ2VkKG1JbnN0YW5jZSwgdmlldy5nZXRWaWV3VHlwZSgpKTsKLSAgICAgICAgfQotICAgICAgICBpZiAobmVlZFRvU3RhcnQoKSkgewotICAgICAgICAgICAgbU1lZGlhQ29udHJvbGxlci5nZXRUcmFuc3BvcnRDb250cm9scygpLnBsYXkoKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLwotICAgIC8vIFByb3RlY3RlZCBvciBwcml2YXRlIG1ldGhvZHMKLSAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KLQotICAgIHByaXZhdGUgdm9pZCBhdHRhY2hNZWRpYUNvbnRyb2xWaWV3KCkgewotICAgICAgICAvLyBHZXQgTWVkaWFDb250cm9sbGVyIGZyb20gTWVkaWFTZXNzaW9uIGFuZCBzZXQgaXQgaW5zaWRlIE1lZGlhQ29udHJvbFZpZXcKLSAgICAgICAgbU1lZGlhQ29udHJvbFZpZXcuc2V0Q29udHJvbGxlcihtTWVkaWFTZXNzaW9uLmdldENvbnRyb2xsZXIoKSk7Ci0KLSAgICAgICAgTGF5b3V0UGFyYW1zIHBhcmFtcyA9Ci0gICAgICAgICAgICAgICAgbmV3IExheW91dFBhcmFtcyhMYXlvdXRQYXJhbXMuTUFUQ0hfUEFSRU5ULCBMYXlvdXRQYXJhbXMuTUFUQ0hfUEFSRU5UKTsKLSAgICAgICAgbUluc3RhbmNlLmFkZFZpZXcobU1lZGlhQ29udHJvbFZpZXcsIHBhcmFtcyk7Ci0gICAgfQotCi0gICAgcHJpdmF0ZSBib29sZWFuIGlzSW5QbGF5YmFja1N0YXRlKCkgewotICAgICAgICByZXR1cm4gKG1NZWRpYVBsYXllciAhPSBudWxsIHx8IG1Sb3V0ZVBsYXllciAhPSBudWxsKQotICAgICAgICAgICAgICAgICYmIG1DdXJyZW50U3RhdGUgIT0gU1RBVEVfRVJST1IKLSAgICAgICAgICAgICAgICAmJiBtQ3VycmVudFN0YXRlICE9IFNUQVRFX0lETEUKLSAgICAgICAgICAgICAgICAmJiBtQ3VycmVudFN0YXRlICE9IFNUQVRFX1BSRVBBUklORzsKLSAgICB9Ci0KLSAgICBwcml2YXRlIGJvb2xlYW4gbmVlZFRvU3RhcnQoKSB7Ci0gICAgICAgIHJldHVybiAobU1lZGlhUGxheWVyICE9IG51bGwgfHwgbVJvdXRlUGxheWVyICE9IG51bGwpCi0gICAgICAgICAgICAgICAgJiYgbUN1cnJlbnRTdGF0ZSAhPSBTVEFURV9QTEFZSU5HCi0gICAgICAgICAgICAgICAgJiYgbVRhcmdldFN0YXRlID09IFNUQVRFX1BMQVlJTkc7Ci0gICAgfQotCi0gICAgLy8gQ3JlYXRlcyBhIE1lZGlhUGxheWVyMiBpbnN0YW5jZSBhbmQgcHJlcGFyZSBwbGF5YmFjay4KLSAgICBwcml2YXRlIHZvaWQgb3BlblZpZGVvKERhdGFTb3VyY2VEZXNjIGRzZCkgewotICAgICAgICBVcmkgdXJpID0gZHNkLmdldFVyaSgpOwotICAgICAgICBNYXA8U3RyaW5nLCBTdHJpbmc+IGhlYWRlcnMgPSBkc2QuZ2V0VXJpSGVhZGVycygpOwotICAgICAgICByZXNldFBsYXllcigpOwotICAgICAgICBpZiAoaXNSZW1vdGVQbGF5YmFjaygpKSB7Ci0gICAgICAgICAgICBtUm91dGVQbGF5ZXIub3BlblZpZGVvKGRzZCk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKG1BdWRpb0ZvY3VzVHlwZSAhPSBBdWRpb01hbmFnZXIuQVVESU9GT0NVU19OT05FKSB7Ci0gICAgICAgICAgICAvLyBUT0RPIHRoaXMgc2hvdWxkIGhhdmUgYSBmb2N1cyBsaXN0ZW5lcgotICAgICAgICAgICAgQXVkaW9Gb2N1c1JlcXVlc3QgZm9jdXNSZXF1ZXN0OwotICAgICAgICAgICAgZm9jdXNSZXF1ZXN0ID0gbmV3IEF1ZGlvRm9jdXNSZXF1ZXN0LkJ1aWxkZXIobUF1ZGlvRm9jdXNUeXBlKQotICAgICAgICAgICAgICAgICAgICAuc2V0QXVkaW9BdHRyaWJ1dGVzKG1BdWRpb0F0dHJpYnV0ZXMpCi0gICAgICAgICAgICAgICAgICAgIC5idWlsZCgpOwotICAgICAgICAgICAgbUF1ZGlvTWFuYWdlci5yZXF1ZXN0QXVkaW9Gb2N1cyhmb2N1c1JlcXVlc3QpOwotICAgICAgICB9Ci0KLSAgICAgICAgdHJ5IHsKLSAgICAgICAgICAgIExvZy5kKFRBRywgIm9wZW5WaWRlbygpOiBjcmVhdGluZyBuZXcgTWVkaWFQbGF5ZXIyIGluc3RhbmNlLiIpOwotICAgICAgICAgICAgbU1lZGlhUGxheWVyID0gbmV3IE1lZGlhUGxheWVyMkltcGwoKTsKLSAgICAgICAgICAgIG1TdXJmYWNlVmlldy5zZXRNZWRpYVBsYXllcihtTWVkaWFQbGF5ZXIpOwotICAgICAgICAgICAgbVRleHR1cmVWaWV3LnNldE1lZGlhUGxheWVyKG1NZWRpYVBsYXllcik7Ci0gICAgICAgICAgICBtQ3VycmVudFZpZXcuYXNzaWduU3VyZmFjZVRvTWVkaWFQbGF5ZXIobU1lZGlhUGxheWVyKTsKLQotICAgICAgICAgICAgZmluYWwgQ29udGV4dCBjb250ZXh0ID0gbUluc3RhbmNlLmdldENvbnRleHQoKTsKLSAgICAgICAgICAgIC8vIFRPRE86IEFkZCB0aW1lbHkgZmlyaW5nIGxvZ2ljIGZvciBtb3JlIGFjY3VyYXRlIHN5bmMgYmV0d2VlbiBDQyBhbmQgdmlkZW8gZnJhbWUKLSAgICAgICAgICAgIG1TdWJ0aXRsZUNvbnRyb2xsZXIgPSBuZXcgU3VidGl0bGVDb250cm9sbGVyKGNvbnRleHQpOwotICAgICAgICAgICAgbVN1YnRpdGxlQ29udHJvbGxlci5yZWdpc3RlclJlbmRlcmVyKG5ldyBDbG9zZWRDYXB0aW9uUmVuZGVyZXIoY29udGV4dCkpOwotICAgICAgICAgICAgbVN1YnRpdGxlQ29udHJvbGxlci5zZXRBbmNob3IoKFN1YnRpdGxlQ29udHJvbGxlci5BbmNob3IpIG1TdWJ0aXRsZVZpZXcpOwotICAgICAgICAgICAgRXhlY3V0b3IgZXhlY3V0b3IgPSBuZXcgRXhlY3V0b3IoKSB7Ci0gICAgICAgICAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgICAgICAgICAgcHVibGljIHZvaWQgZXhlY3V0ZShSdW5uYWJsZSBydW5uYWJsZSkgewotICAgICAgICAgICAgICAgICAgICBydW5uYWJsZS5ydW4oKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9OwotICAgICAgICAgICAgbU1lZGlhUGxheWVyLnNldE1lZGlhUGxheWVyMkV2ZW50Q2FsbGJhY2soZXhlY3V0b3IsIG1NZWRpYVBsYXllcjJDYWxsYmFjayk7Ci0KLSAgICAgICAgICAgIG1DdXJyZW50QnVmZmVyUGVyY2VudGFnZSA9IC0xOwotICAgICAgICAgICAgbU1lZGlhUGxheWVyLnNldERhdGFTb3VyY2UoZHNkKTsKLSAgICAgICAgICAgIG1NZWRpYVBsYXllci5zZXRBdWRpb0F0dHJpYnV0ZXMobUF1ZGlvQXR0cmlidXRlcyk7Ci0gICAgICAgICAgICBtTWVkaWFQbGF5ZXIuc2V0T25TdWJ0aXRsZURhdGFMaXN0ZW5lcihtU3VidGl0bGVMaXN0ZW5lcik7Ci0gICAgICAgICAgICAvLyB3ZSBkb24ndCBzZXQgdGhlIHRhcmdldCBzdGF0ZSBoZXJlIGVpdGhlciwgYnV0IHByZXNlcnZlIHRoZQotICAgICAgICAgICAgLy8gdGFyZ2V0IHN0YXRlIHRoYXQgd2FzIHRoZXJlIGJlZm9yZS4KLSAgICAgICAgICAgIG1DdXJyZW50U3RhdGUgPSBTVEFURV9QUkVQQVJJTkc7Ci0gICAgICAgICAgICBtTWVkaWFQbGF5ZXIucHJlcGFyZSgpOwotCi0gICAgICAgICAgICAvLyBTYXZlIGZpbGUgbmFtZSBhcyB0aXRsZSBzaW5jZSB0aGUgZmlsZSBtYXkgbm90IGhhdmUgYSB0aXRsZSBNZXRhZGF0YS4KLSAgICAgICAgICAgIG1UaXRsZSA9IHVyaS5nZXRQYXRoKCk7Ci0gICAgICAgICAgICBTdHJpbmcgc2NoZW1lID0gdXJpLmdldFNjaGVtZSgpOwotICAgICAgICAgICAgaWYgKHNjaGVtZSAhPSBudWxsICYmIHNjaGVtZS5lcXVhbHMoImZpbGUiKSkgewotICAgICAgICAgICAgICAgIG1UaXRsZSA9IHVyaS5nZXRMYXN0UGF0aFNlZ21lbnQoKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIG1SZXRyaWV2ZXIgPSBuZXcgTWVkaWFNZXRhZGF0YVJldHJpZXZlcigpOwotICAgICAgICAgICAgbVJldHJpZXZlci5zZXREYXRhU291cmNlKG1JbnN0YW5jZS5nZXRDb250ZXh0KCksIHVyaSk7Ci0KLSAgICAgICAgICAgIGlmIChERUJVRykgewotICAgICAgICAgICAgICAgIExvZy5kKFRBRywgIm9wZW5WaWRlbygpLiBtQ3VycmVudFN0YXRlPSIgKyBtQ3VycmVudFN0YXRlCi0gICAgICAgICAgICAgICAgICAgICAgICArICIsIG1UYXJnZXRTdGF0ZT0iICsgbVRhcmdldFN0YXRlKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfSBjYXRjaCAoSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uIGV4KSB7Ci0gICAgICAgICAgICBMb2cudyhUQUcsICJVbmFibGUgdG8gb3BlbiBjb250ZW50OiAiICsgdXJpLCBleCk7Ci0gICAgICAgICAgICBtQ3VycmVudFN0YXRlID0gU1RBVEVfRVJST1I7Ci0gICAgICAgICAgICBtVGFyZ2V0U3RhdGUgPSBTVEFURV9FUlJPUjsKLSAgICAgICAgICAgIG1NZWRpYVBsYXllcjJDYWxsYmFjay5vbkVycm9yKG1NZWRpYVBsYXllciwgZHNkLAotICAgICAgICAgICAgICAgICAgICBNZWRpYVBsYXllcjIuTUVESUFfRVJST1JfVU5LTk9XTiwgTWVkaWFQbGF5ZXIyLk1FRElBX0VSUk9SX0lPKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIC8qCi0gICAgICogUmVzZXQgdGhlIG1lZGlhIHBsYXllciBpbiBhbnkgc3RhdGUKLSAgICAgKi8KLSAgICBwcml2YXRlIHZvaWQgcmVzZXRQbGF5ZXIoKSB7Ci0gICAgICAgIGlmIChtTWVkaWFQbGF5ZXIgIT0gbnVsbCkgewotICAgICAgICAgICAgZmluYWwgTWVkaWFQbGF5ZXIyIHBsYXllciA9IG1NZWRpYVBsYXllcjsKLSAgICAgICAgICAgIG5ldyBBc3luY1Rhc2s8TWVkaWFQbGF5ZXIyLCBWb2lkLCBWb2lkPigpIHsKLSAgICAgICAgICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgICAgICAgICBwcm90ZWN0ZWQgVm9pZCBkb0luQmFja2dyb3VuZChNZWRpYVBsYXllcjIuLi4gcGxheWVycykgewotICAgICAgICAgICAgICAgICAgICAvLyBUT0RPOiBGaXggTlBFIHdoaWxlIE1lZGlhUGxheWVyMi5jbG9zZSgpCi0gICAgICAgICAgICAgICAgICAgIC8vcGxheWVyc1swXS5jbG9zZSgpOwotICAgICAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9LmV4ZWN1dGVPbkV4ZWN1dG9yKEFzeW5jVGFzay5TRVJJQUxfRVhFQ1VUT1IsIHBsYXllcik7Ci0gICAgICAgICAgICBtTWVkaWFQbGF5ZXIgPSBudWxsOwotICAgICAgICAgICAgbVRleHR1cmVWaWV3LnNldE1lZGlhUGxheWVyKG51bGwpOwotICAgICAgICAgICAgbVN1cmZhY2VWaWV3LnNldE1lZGlhUGxheWVyKG51bGwpOwotICAgICAgICAgICAgLy9tUGVuZGluZ1N1YnRpdGxlVHJhY2tzLmNsZWFyKCk7Ci0gICAgICAgICAgICBtQ3VycmVudFN0YXRlID0gU1RBVEVfSURMRTsKLSAgICAgICAgICAgIG1UYXJnZXRTdGF0ZSA9IFNUQVRFX0lETEU7Ci0gICAgICAgICAgICBpZiAobUF1ZGlvRm9jdXNUeXBlICE9IEF1ZGlvTWFuYWdlci5BVURJT0ZPQ1VTX05PTkUpIHsKLSAgICAgICAgICAgICAgICBtQXVkaW9NYW5hZ2VyLmFiYW5kb25BdWRpb0ZvY3VzKG51bGwpOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIG1WaWRlb1dpZHRoID0gMDsKLSAgICAgICAgbVZpZGVvSGVpZ2h0ID0gMDsKLSAgICB9Ci0KLSAgICBwcml2YXRlIHZvaWQgdXBkYXRlUGxheWJhY2tTdGF0ZSgpIHsKLSAgICAgICAgaWYgKG1TdGF0ZUJ1aWxkZXIgPT0gbnVsbCkgewotICAgICAgICAgICAgLy8gR2V0IHRoZSBjYXBhYmlsaXRpZXMgb2YgdGhlIHBsYXllciBmb3IgdGhpcyBzdHJlYW0KLSAgICAgICAgICAgIG1NZXRhZGF0YSA9IG1NZWRpYVBsYXllci5nZXRNZXRhZGF0YShNZWRpYVBsYXllcjIuTUVUQURBVEFfQUxMLAotICAgICAgICAgICAgICAgICAgICBNZWRpYVBsYXllcjIuQllQQVNTX01FVEFEQVRBX0ZJTFRFUik7Ci0KLSAgICAgICAgICAgIC8vIEFkZCBQbGF5IGFjdGlvbiBhcyBkZWZhdWx0Ci0gICAgICAgICAgICBsb25nIHBsYXliYWNrQWN0aW9ucyA9IFBsYXliYWNrU3RhdGUuQUNUSU9OX1BMQVk7Ci0gICAgICAgICAgICBpZiAobU1ldGFkYXRhICE9IG51bGwpIHsKLSAgICAgICAgICAgICAgICBpZiAoIW1NZXRhZGF0YS5oYXMoTWV0YWRhdGEuUEFVU0VfQVZBSUxBQkxFKQotICAgICAgICAgICAgICAgICAgICAgICAgfHwgbU1ldGFkYXRhLmdldEJvb2xlYW4oTWV0YWRhdGEuUEFVU0VfQVZBSUxBQkxFKSkgewotICAgICAgICAgICAgICAgICAgICBwbGF5YmFja0FjdGlvbnMgfD0gUGxheWJhY2tTdGF0ZS5BQ1RJT05fUEFVU0U7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGlmICghbU1ldGFkYXRhLmhhcyhNZXRhZGF0YS5TRUVLX0JBQ0tXQVJEX0FWQUlMQUJMRSkKLSAgICAgICAgICAgICAgICAgICAgICAgIHx8IG1NZXRhZGF0YS5nZXRCb29sZWFuKE1ldGFkYXRhLlNFRUtfQkFDS1dBUkRfQVZBSUxBQkxFKSkgewotICAgICAgICAgICAgICAgICAgICBwbGF5YmFja0FjdGlvbnMgfD0gUGxheWJhY2tTdGF0ZS5BQ1RJT05fUkVXSU5EOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBpZiAoIW1NZXRhZGF0YS5oYXMoTWV0YWRhdGEuU0VFS19GT1JXQVJEX0FWQUlMQUJMRSkKLSAgICAgICAgICAgICAgICAgICAgICAgIHx8IG1NZXRhZGF0YS5nZXRCb29sZWFuKE1ldGFkYXRhLlNFRUtfRk9SV0FSRF9BVkFJTEFCTEUpKSB7Ci0gICAgICAgICAgICAgICAgICAgIHBsYXliYWNrQWN0aW9ucyB8PSBQbGF5YmFja1N0YXRlLkFDVElPTl9GQVNUX0ZPUldBUkQ7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGlmICghbU1ldGFkYXRhLmhhcyhNZXRhZGF0YS5TRUVLX0FWQUlMQUJMRSkKLSAgICAgICAgICAgICAgICAgICAgICAgIHx8IG1NZXRhZGF0YS5nZXRCb29sZWFuKE1ldGFkYXRhLlNFRUtfQVZBSUxBQkxFKSkgewotICAgICAgICAgICAgICAgICAgICBwbGF5YmFja0FjdGlvbnMgfD0gUGxheWJhY2tTdGF0ZS5BQ1RJT05fU0VFS19UTzsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIHBsYXliYWNrQWN0aW9ucyB8PSAoUGxheWJhY2tTdGF0ZS5BQ1RJT05fUEFVU0UgfAotICAgICAgICAgICAgICAgICAgICAgICAgUGxheWJhY2tTdGF0ZS5BQ1RJT05fUkVXSU5EIHwgUGxheWJhY2tTdGF0ZS5BQ1RJT05fRkFTVF9GT1JXQVJEIHwKLSAgICAgICAgICAgICAgICAgICAgICAgIFBsYXliYWNrU3RhdGUuQUNUSU9OX1NFRUtfVE8pOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgbVN0YXRlQnVpbGRlciA9IG5ldyBQbGF5YmFja1N0YXRlLkJ1aWxkZXIoKTsKLSAgICAgICAgICAgIG1TdGF0ZUJ1aWxkZXIuc2V0QWN0aW9ucyhwbGF5YmFja0FjdGlvbnMpOwotCi0gICAgICAgICAgICBpZiAobUN1c3RvbUFjdGlvbkxpc3QgIT0gbnVsbCkgewotICAgICAgICAgICAgICAgIGZvciAoUGxheWJhY2tTdGF0ZS5DdXN0b21BY3Rpb24gYWN0aW9uIDogbUN1c3RvbUFjdGlvbkxpc3QpIHsKLSAgICAgICAgICAgICAgICAgICAgbVN0YXRlQnVpbGRlci5hZGRDdXN0b21BY3Rpb24oYWN0aW9uKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgbVN0YXRlQnVpbGRlci5zZXRTdGF0ZShnZXRDb3JyZXNwb25kaW5nUGxheWJhY2tTdGF0ZSgpLAotICAgICAgICAgICAgICAgIG1NZWRpYVBsYXllci5nZXRDdXJyZW50UG9zaXRpb24oKSwgbVNwZWVkKTsKLSAgICAgICAgaWYgKG1DdXJyZW50U3RhdGUgIT0gU1RBVEVfRVJST1IKLSAgICAgICAgICAgICYmIG1DdXJyZW50U3RhdGUgIT0gU1RBVEVfSURMRQotICAgICAgICAgICAgJiYgbUN1cnJlbnRTdGF0ZSAhPSBTVEFURV9QUkVQQVJJTkcpIHsKLSAgICAgICAgICAgIC8vIFRPRE86IHRoaXMgc2hvdWxkIGJlIHJlcGxhY2VkIHdpdGggTWVkaWFQbGF5ZXIyLmdldEJ1ZmZlcmVkUG9zaXRpb24oKSBvbmNlIGl0IGlzCi0gICAgICAgICAgICAvLyBpbXBsZW1lbnRlZC4KLSAgICAgICAgICAgIGlmIChtQ3VycmVudEJ1ZmZlclBlcmNlbnRhZ2UgPT0gLTEpIHsKLSAgICAgICAgICAgICAgICBtU3RhdGVCdWlsZGVyLnNldEJ1ZmZlcmVkUG9zaXRpb24oLTEpOwotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICBtU3RhdGVCdWlsZGVyLnNldEJ1ZmZlcmVkUG9zaXRpb24oCi0gICAgICAgICAgICAgICAgICAgICAgICAobG9uZykgKG1DdXJyZW50QnVmZmVyUGVyY2VudGFnZSAvIDEwMC4wICogbU1lZGlhUGxheWVyLmdldER1cmF0aW9uKCkpKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIC8vIFNldCBQbGF5YmFja1N0YXRlIGZvciBNZWRpYVNlc3Npb24KLSAgICAgICAgaWYgKG1NZWRpYVNlc3Npb24gIT0gbnVsbCkgewotICAgICAgICAgICAgUGxheWJhY2tTdGF0ZSBzdGF0ZSA9IG1TdGF0ZUJ1aWxkZXIuYnVpbGQoKTsKLSAgICAgICAgICAgIG1NZWRpYVNlc3Npb24uc2V0UGxheWJhY2tTdGF0ZShzdGF0ZSk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBwcml2YXRlIGludCBnZXRDb3JyZXNwb25kaW5nUGxheWJhY2tTdGF0ZSgpIHsKLSAgICAgICAgc3dpdGNoIChtQ3VycmVudFN0YXRlKSB7Ci0gICAgICAgICAgICBjYXNlIFNUQVRFX0VSUk9SOgotICAgICAgICAgICAgICAgIHJldHVybiBQbGF5YmFja1N0YXRlLlNUQVRFX0VSUk9SOwotICAgICAgICAgICAgY2FzZSBTVEFURV9JRExFOgotICAgICAgICAgICAgICAgIHJldHVybiBQbGF5YmFja1N0YXRlLlNUQVRFX05PTkU7Ci0gICAgICAgICAgICBjYXNlIFNUQVRFX1BSRVBBUklORzoKLSAgICAgICAgICAgICAgICByZXR1cm4gUGxheWJhY2tTdGF0ZS5TVEFURV9DT05ORUNUSU5HOwotICAgICAgICAgICAgY2FzZSBTVEFURV9QUkVQQVJFRDoKLSAgICAgICAgICAgICAgICByZXR1cm4gUGxheWJhY2tTdGF0ZS5TVEFURV9QQVVTRUQ7Ci0gICAgICAgICAgICBjYXNlIFNUQVRFX1BMQVlJTkc6Ci0gICAgICAgICAgICAgICAgcmV0dXJuIFBsYXliYWNrU3RhdGUuU1RBVEVfUExBWUlORzsKLSAgICAgICAgICAgIGNhc2UgU1RBVEVfUEFVU0VEOgotICAgICAgICAgICAgICAgIHJldHVybiBQbGF5YmFja1N0YXRlLlNUQVRFX1BBVVNFRDsKLSAgICAgICAgICAgIGNhc2UgU1RBVEVfUExBWUJBQ0tfQ09NUExFVEVEOgotICAgICAgICAgICAgICAgIHJldHVybiBQbGF5YmFja1N0YXRlLlNUQVRFX1NUT1BQRUQ7Ci0gICAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgICAgIHJldHVybiAtMTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIHByaXZhdGUgZmluYWwgUnVubmFibGUgbUZhZGVPdXQgPSBuZXcgUnVubmFibGUoKSB7Ci0gICAgICAgIEBPdmVycmlkZQotICAgICAgICBwdWJsaWMgdm9pZCBydW4oKSB7Ci0gICAgICAgICAgICBpZiAobUN1cnJlbnRTdGF0ZSA9PSBTVEFURV9QTEFZSU5HKSB7Ci0gICAgICAgICAgICAgICAgbU1lZGlhQ29udHJvbFZpZXcuc2V0VmlzaWJpbGl0eShWaWV3LkdPTkUpOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfTsKLQotICAgIHByaXZhdGUgdm9pZCBzaG93Q29udHJvbGxlcigpIHsKLSAgICAgICAgLy8gVE9ETzogRGVjaWRlIHdoYXQgdG8gc2hvdyB3aGVuIHRoZSBzdGF0ZSBpcyBub3QgaW4gcGxheWJhY2sgc3RhdGUKLSAgICAgICAgaWYgKG1NZWRpYUNvbnRyb2xWaWV3ID09IG51bGwgfHwgIWlzSW5QbGF5YmFja1N0YXRlKCkKLSAgICAgICAgICAgICAgICB8fCAobUlzTXVzaWNNZWRpYVR5cGUgJiYgbVNpemVUeXBlID09IFNJWkVfVFlQRV9GVUxMKSkgewotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgICAgIG1NZWRpYUNvbnRyb2xWaWV3LnJlbW92ZUNhbGxiYWNrcyhtRmFkZU91dCk7Ci0gICAgICAgIG1NZWRpYUNvbnRyb2xWaWV3LnNldFZpc2liaWxpdHkoVmlldy5WSVNJQkxFKTsKLSAgICAgICAgaWYgKG1TaG93Q29udHJvbGxlckludGVydmFsTXMgIT0gMAotICAgICAgICAgICAgJiYgIW1BY2Nlc3NpYmlsaXR5TWFuYWdlci5pc1RvdWNoRXhwbG9yYXRpb25FbmFibGVkKCkpIHsKLSAgICAgICAgICAgIG1NZWRpYUNvbnRyb2xWaWV3LnBvc3REZWxheWVkKG1GYWRlT3V0LCBtU2hvd0NvbnRyb2xsZXJJbnRlcnZhbE1zKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIHByaXZhdGUgdm9pZCB0b2dnbGVNZWRpYUNvbnRyb2xWaWV3VmlzaWJpbGl0eSgpIHsKLSAgICAgICAgaWYgKG1NZWRpYUNvbnRyb2xWaWV3LmdldFZpc2liaWxpdHkoKSA9PSBWaWV3LlZJU0lCTEUpIHsKLSAgICAgICAgICAgIG1NZWRpYUNvbnRyb2xWaWV3LnJlbW92ZUNhbGxiYWNrcyhtRmFkZU91dCk7Ci0gICAgICAgICAgICBtTWVkaWFDb250cm9sVmlldy5zZXRWaXNpYmlsaXR5KFZpZXcuR09ORSk7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBzaG93Q29udHJvbGxlcigpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgcHJpdmF0ZSB2b2lkIGFwcGx5U3BlZWQoKSB7Ci0gICAgICAgIFBsYXliYWNrUGFyYW1zIHBhcmFtcyA9IG1NZWRpYVBsYXllci5nZXRQbGF5YmFja1BhcmFtcygpLmFsbG93RGVmYXVsdHMoKTsKLSAgICAgICAgaWYgKG1TcGVlZCAhPSBwYXJhbXMuZ2V0U3BlZWQoKSkgewotICAgICAgICAgICAgdHJ5IHsKLSAgICAgICAgICAgICAgICBwYXJhbXMuc2V0U3BlZWQobVNwZWVkKTsKLSAgICAgICAgICAgICAgICBtTWVkaWFQbGF5ZXIuc2V0UGxheWJhY2tQYXJhbXMocGFyYW1zKTsKLSAgICAgICAgICAgICAgICBtRmFsbGJhY2tTcGVlZCA9IG1TcGVlZDsKLSAgICAgICAgICAgIH0gY2F0Y2ggKElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbiBlKSB7Ci0gICAgICAgICAgICAgICAgTG9nLmUoVEFHLCAiUGxheWJhY2tQYXJhbXMgaGFzIHVuc3VwcG9ydGVkIHZhbHVlOiAiICsgZSk7Ci0gICAgICAgICAgICAgICAgLy8gVE9ETzogc2hvdWxkIHJldmlzZSB0aGlzIHBhcnQgYWZ0ZXIgaW50ZWdyYXRpbmcgd2l0aCBNUDIuCi0gICAgICAgICAgICAgICAgLy8gSWYgbVNwZWVkIGhhZCBhbiBpbGxlZ2FsIHZhbHVlIGZvciBzcGVlZCByYXRlLCBzeXN0ZW0gd2lsbCBkZXRlcm1pbmUgYmVzdAotICAgICAgICAgICAgICAgIC8vIGhhbmRsaW5nIChzZWUgUGxheWJhY2tQYXJhbXMuQVVESU9fRkFMTEJBQ0tfTU9ERV9ERUZBVUxUKS4KLSAgICAgICAgICAgICAgICAvLyBOb3RlOiBUaGUgcHJlLU1QMiByZXR1cm5zIDAuMGYgd2hlbiBpdCBpcyBwYXVzZWQuIEluIHRoaXMgY2FzZSwgVmlkZW9WaWV3MiB3aWxsCi0gICAgICAgICAgICAgICAgLy8gdXNlIG1GYWxsYmFja1NwZWVkIGluc3RlYWQuCi0gICAgICAgICAgICAgICAgZmxvYXQgZmFsbGJhY2tTcGVlZCA9IG1NZWRpYVBsYXllci5nZXRQbGF5YmFja1BhcmFtcygpLmFsbG93RGVmYXVsdHMoKS5nZXRTcGVlZCgpOwotICAgICAgICAgICAgICAgIGlmIChmYWxsYmFja1NwZWVkID4gMC4wZikgewotICAgICAgICAgICAgICAgICAgICBtRmFsbGJhY2tTcGVlZCA9IGZhbGxiYWNrU3BlZWQ7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIG1TcGVlZCA9IG1GYWxsYmFja1NwZWVkOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotCi0gICAgcHJpdmF0ZSBib29sZWFuIGlzUmVtb3RlUGxheWJhY2soKSB7Ci0gICAgICAgIGlmIChtTWVkaWFDb250cm9sbGVyID09IG51bGwpIHsKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgfQotICAgICAgICBQbGF5YmFja0luZm8gcGxheWJhY2tJbmZvID0gbU1lZGlhQ29udHJvbGxlci5nZXRQbGF5YmFja0luZm8oKTsKLSAgICAgICAgcmV0dXJuIHBsYXliYWNrSW5mbyAhPSBudWxsCi0gICAgICAgICAgICAgICAgJiYgcGxheWJhY2tJbmZvLmdldFBsYXliYWNrVHlwZSgpID09IFBsYXliYWNrSW5mby5QTEFZQkFDS19UWVBFX1JFTU9URTsKLSAgICB9Ci0KLSAgICBwcml2YXRlIHZvaWQgc2VsZWN0T3JEZXNlbGVjdFN1YnRpdGxlKGJvb2xlYW4gc2VsZWN0KSB7Ci0gICAgICAgIGlmICghaXNJblBsYXliYWNrU3RhdGUoKSkgewotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgICAgIGlmIChzZWxlY3QpIHsKLSAgICAgICAgICAgIGlmIChtU3VidGl0bGVUcmFja0luZGljZXMuc2l6ZSgpID4gMCkgewotICAgICAgICAgICAgICAgIC8vIFRPRE86IG1ha2UgdGhpcyBzZWxlY3Rpb24gZHluYW1pYwotICAgICAgICAgICAgICAgIG1TZWxlY3RlZFN1YnRpdGxlVHJhY2tJbmRleCA9IG1TdWJ0aXRsZVRyYWNrSW5kaWNlcy5nZXQoMCkuZmlyc3Q7Ci0gICAgICAgICAgICAgICAgbVN1YnRpdGxlQ29udHJvbGxlci5zZWxlY3RUcmFjayhtU3VidGl0bGVUcmFja0luZGljZXMuZ2V0KDApLnNlY29uZCk7Ci0gICAgICAgICAgICAgICAgbU1lZGlhUGxheWVyLnNlbGVjdFRyYWNrKG1TZWxlY3RlZFN1YnRpdGxlVHJhY2tJbmRleCk7Ci0gICAgICAgICAgICAgICAgbVN1YnRpdGxlVmlldy5zZXRWaXNpYmlsaXR5KFZpZXcuVklTSUJMRSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBpZiAobVNlbGVjdGVkU3VidGl0bGVUcmFja0luZGV4ICE9IElOVkFMSURfVFJBQ0tfSU5ERVgpIHsKLSAgICAgICAgICAgICAgICBtTWVkaWFQbGF5ZXIuZGVzZWxlY3RUcmFjayhtU2VsZWN0ZWRTdWJ0aXRsZVRyYWNrSW5kZXgpOwotICAgICAgICAgICAgICAgIG1TZWxlY3RlZFN1YnRpdGxlVHJhY2tJbmRleCA9IElOVkFMSURfVFJBQ0tfSU5ERVg7Ci0gICAgICAgICAgICAgICAgbVN1YnRpdGxlVmlldy5zZXRWaXNpYmlsaXR5KFZpZXcuR09ORSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBwcml2YXRlIHZvaWQgZXh0cmFjdFRyYWNrcygpIHsKLSAgICAgICAgTGlzdDxNZWRpYVBsYXllcjIuVHJhY2tJbmZvPiB0cmFja0luZm9zID0gbU1lZGlhUGxheWVyLmdldFRyYWNrSW5mbygpOwotICAgICAgICBtVmlkZW9UcmFja0luZGljZXMgPSBuZXcgQXJyYXlMaXN0PD4oKTsKLSAgICAgICAgbUF1ZGlvVHJhY2tJbmRpY2VzID0gbmV3IEFycmF5TGlzdDw+KCk7Ci0gICAgICAgIG1TdWJ0aXRsZVRyYWNrSW5kaWNlcyA9IG5ldyBBcnJheUxpc3Q8PigpOwotICAgICAgICBtU3VidGl0bGVDb250cm9sbGVyLnJlc2V0KCk7Ci0gICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgdHJhY2tJbmZvcy5zaXplKCk7ICsraSkgewotICAgICAgICAgICAgaW50IHRyYWNrVHlwZSA9IHRyYWNrSW5mb3MuZ2V0KGkpLmdldFRyYWNrVHlwZSgpOwotICAgICAgICAgICAgaWYgKHRyYWNrVHlwZSA9PSBNZWRpYVBsYXllcjIuVHJhY2tJbmZvLk1FRElBX1RSQUNLX1RZUEVfVklERU8pIHsKLSAgICAgICAgICAgICAgICBtVmlkZW9UcmFja0luZGljZXMuYWRkKGkpOwotICAgICAgICAgICAgfSBlbHNlIGlmICh0cmFja1R5cGUgPT0gTWVkaWFQbGF5ZXIyLlRyYWNrSW5mby5NRURJQV9UUkFDS19UWVBFX0FVRElPKSB7Ci0gICAgICAgICAgICAgICAgbUF1ZGlvVHJhY2tJbmRpY2VzLmFkZChpKTsKLSAgICAgICAgICAgIH0gZWxzZSBpZiAodHJhY2tUeXBlID09IE1lZGlhUGxheWVyMi5UcmFja0luZm8uTUVESUFfVFJBQ0tfVFlQRV9TVUJUSVRMRQotICAgICAgICAgICAgICAgICAgICB8fCB0cmFja1R5cGUgPT0gTWVkaWFQbGF5ZXIyLlRyYWNrSW5mby5NRURJQV9UUkFDS19UWVBFX1RJTUVEVEVYVCkgewotICAgICAgICAgICAgICAgIFN1YnRpdGxlVHJhY2sgdHJhY2sgPSBtU3VidGl0bGVDb250cm9sbGVyLmFkZFRyYWNrKHRyYWNrSW5mb3MuZ2V0KGkpLmdldEZvcm1hdCgpKTsKLSAgICAgICAgICAgICAgICBpZiAodHJhY2sgIT0gbnVsbCkgewotICAgICAgICAgICAgICAgICAgICBtU3VidGl0bGVUcmFja0luZGljZXMuYWRkKG5ldyBQYWlyPD4oaSwgdHJhY2spKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgLy8gU2VsZWN0IGZpcnN0IHRyYWNrcyBhcyBkZWZhdWx0Ci0gICAgICAgIGlmIChtVmlkZW9UcmFja0luZGljZXMuc2l6ZSgpID4gMCkgewotICAgICAgICAgICAgbVNlbGVjdGVkVmlkZW9UcmFja0luZGV4ID0gMDsKLSAgICAgICAgfQotICAgICAgICBpZiAobUF1ZGlvVHJhY2tJbmRpY2VzLnNpemUoKSA+IDApIHsKLSAgICAgICAgICAgIG1TZWxlY3RlZEF1ZGlvVHJhY2tJbmRleCA9IDA7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKG1WaWRlb1RyYWNrSW5kaWNlcy5zaXplKCkgPT0gMCAmJiBtQXVkaW9UcmFja0luZGljZXMuc2l6ZSgpID4gMCkgewotICAgICAgICAgICAgbUlzTXVzaWNNZWRpYVR5cGUgPSB0cnVlOwotICAgICAgICB9Ci0KLSAgICAgICAgQnVuZGxlIGRhdGEgPSBuZXcgQnVuZGxlKCk7Ci0gICAgICAgIGRhdGEucHV0SW50KE1lZGlhQ29udHJvbFZpZXcySW1wbC5LRVlfVklERU9fVFJBQ0tfQ09VTlQsIG1WaWRlb1RyYWNrSW5kaWNlcy5zaXplKCkpOwotICAgICAgICBkYXRhLnB1dEludChNZWRpYUNvbnRyb2xWaWV3MkltcGwuS0VZX0FVRElPX1RSQUNLX0NPVU5ULCBtQXVkaW9UcmFja0luZGljZXMuc2l6ZSgpKTsKLSAgICAgICAgZGF0YS5wdXRJbnQoTWVkaWFDb250cm9sVmlldzJJbXBsLktFWV9TVUJUSVRMRV9UUkFDS19DT1VOVCwgbVN1YnRpdGxlVHJhY2tJbmRpY2VzLnNpemUoKSk7Ci0gICAgICAgIGlmIChtU3VidGl0bGVUcmFja0luZGljZXMuc2l6ZSgpID4gMCkgewotICAgICAgICAgICAgc2VsZWN0T3JEZXNlbGVjdFN1YnRpdGxlKG1TdWJ0aXRsZUVuYWJsZWQpOwotICAgICAgICB9Ci0gICAgICAgIG1NZWRpYVNlc3Npb24uc2VuZFNlc3Npb25FdmVudChNZWRpYUNvbnRyb2xWaWV3MkltcGwuRVZFTlRfVVBEQVRFX1RSQUNLX1NUQVRVUywgZGF0YSk7Ci0gICAgfQotCi0gICAgcHJpdmF0ZSB2b2lkIGV4dHJhY3RNZXRhZGF0YSgpIHsKLSAgICAgICAgLy8gR2V0IGFuZCBzZXQgZHVyYXRpb24gYW5kIHRpdGxlIHZhbHVlcyBhcyBNZWRpYU1ldGFkYXRhIGZvciBNZWRpYUNvbnRyb2xWaWV3MgotICAgICAgICBNZWRpYU1ldGFkYXRhLkJ1aWxkZXIgYnVpbGRlciA9IG5ldyBNZWRpYU1ldGFkYXRhLkJ1aWxkZXIoKTsKLSAgICAgICAgaWYgKG1NZXRhZGF0YSAhPSBudWxsICYmIG1NZXRhZGF0YS5oYXMoTWV0YWRhdGEuVElUTEUpKSB7Ci0gICAgICAgICAgICBtVGl0bGUgPSBtTWV0YWRhdGEuZ2V0U3RyaW5nKE1ldGFkYXRhLlRJVExFKTsKLSAgICAgICAgfQotICAgICAgICBidWlsZGVyLnB1dFN0cmluZyhNZWRpYU1ldGFkYXRhLk1FVEFEQVRBX0tFWV9USVRMRSwgbVRpdGxlKTsKLSAgICAgICAgYnVpbGRlci5wdXRMb25nKAotICAgICAgICAgICAgICAgIE1lZGlhTWV0YWRhdGEuTUVUQURBVEFfS0VZX0RVUkFUSU9OLCBtTWVkaWFQbGF5ZXIuZ2V0RHVyYXRpb24oKSk7Ci0KLSAgICAgICAgaWYgKG1NZWRpYVNlc3Npb24gIT0gbnVsbCkgewotICAgICAgICAgICAgbU1lZGlhU2Vzc2lvbi5zZXRNZXRhZGF0YShidWlsZGVyLmJ1aWxkKCkpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgcHJpdmF0ZSB2b2lkIGV4dHJhY3RBdWRpb01ldGFkYXRhKCkgewotICAgICAgICBpZiAoIW1Jc011c2ljTWVkaWFUeXBlKSB7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLQotICAgICAgICBtUmVzb3VyY2VzID0gQXBpSGVscGVyLmdldExpYlJlc291cmNlcyhtSW5zdGFuY2UuZ2V0Q29udGV4dCgpKTsKLSAgICAgICAgbU1hbmFnZXIgPSAoV2luZG93TWFuYWdlcikgbUluc3RhbmNlLmdldENvbnRleHQoKS5nZXRBcHBsaWNhdGlvbkNvbnRleHQoKQotICAgICAgICAgICAgICAgIC5nZXRTeXN0ZW1TZXJ2aWNlKENvbnRleHQuV0lORE9XX1NFUlZJQ0UpOwotCi0gICAgICAgIGJ5dGVbXSBhbGJ1bSA9IG1SZXRyaWV2ZXIuZ2V0RW1iZWRkZWRQaWN0dXJlKCk7Ci0gICAgICAgIGlmIChhbGJ1bSAhPSBudWxsKSB7Ci0gICAgICAgICAgICBCaXRtYXAgYml0bWFwID0gQml0bWFwRmFjdG9yeS5kZWNvZGVCeXRlQXJyYXkoYWxidW0sIDAsIGFsYnVtLmxlbmd0aCk7Ci0gICAgICAgICAgICBtTXVzaWNBbGJ1bURyYXdhYmxlID0gbmV3IEJpdG1hcERyYXdhYmxlKGJpdG1hcCk7Ci0KLSAgICAgICAgICAgIC8vIFRPRE86IHJlcGxhY2Ugd2l0aCB2aXN1YWxpemVyCi0gICAgICAgICAgICBQYWxldHRlLmdlbmVyYXRlQXN5bmMoYml0bWFwLCBuZXcgUGFsZXR0ZS5QYWxldHRlQXN5bmNMaXN0ZW5lcigpIHsKLSAgICAgICAgICAgICAgICBwdWJsaWMgdm9pZCBvbkdlbmVyYXRlZChQYWxldHRlIHBhbGV0dGUpIHsKLSAgICAgICAgICAgICAgICAgICAgLy8gVE9ETzogYWRkIGRvbWluYW50IGNvbG9yIGZvciBkZWZhdWx0IGFsYnVtIGltYWdlLgotICAgICAgICAgICAgICAgICAgICBtRG9taW5hbnRDb2xvciA9IHBhbGV0dGUuZ2V0RG9taW5hbnRDb2xvcigwKTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKG1NdXNpY1ZpZXcgIT0gbnVsbCkgewotICAgICAgICAgICAgICAgICAgICAgICAgbU11c2ljVmlldy5zZXRCYWNrZ3JvdW5kQ29sb3IobURvbWluYW50Q29sb3IpOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfSk7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBtTXVzaWNBbGJ1bURyYXdhYmxlID0gbVJlc291cmNlcy5nZXREcmF3YWJsZShSLmRyYXdhYmxlLmljX2RlZmF1bHRfYWxidW1faW1hZ2UpOwotICAgICAgICB9Ci0KLSAgICAgICAgU3RyaW5nIHRpdGxlID0gbVJldHJpZXZlci5leHRyYWN0TWV0YWRhdGEoTWVkaWFNZXRhZGF0YVJldHJpZXZlci5NRVRBREFUQV9LRVlfVElUTEUpOwotICAgICAgICBpZiAodGl0bGUgIT0gbnVsbCkgewotICAgICAgICAgICAgbU11c2ljVGl0bGVUZXh0ID0gdGl0bGU7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBtTXVzaWNUaXRsZVRleHQgPSBtUmVzb3VyY2VzLmdldFN0cmluZyhSLnN0cmluZy5tY3YyX211c2ljX3RpdGxlX3Vua25vd25fdGV4dCk7Ci0gICAgICAgIH0KLQotICAgICAgICBTdHJpbmcgYXJ0aXN0ID0gbVJldHJpZXZlci5leHRyYWN0TWV0YWRhdGEoTWVkaWFNZXRhZGF0YVJldHJpZXZlci5NRVRBREFUQV9LRVlfQVJUSVNUKTsKLSAgICAgICAgaWYgKGFydGlzdCAhPSBudWxsKSB7Ci0gICAgICAgICAgICBtTXVzaWNBcnRpc3RUZXh0ID0gYXJ0aXN0OwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgbU11c2ljQXJ0aXN0VGV4dCA9IG1SZXNvdXJjZXMuZ2V0U3RyaW5nKFIuc3RyaW5nLm1jdjJfbXVzaWNfYXJ0aXN0X3Vua25vd25fdGV4dCk7Ci0gICAgICAgIH0KLQotICAgICAgICAvLyBTZW5kIHRpdGxlIGFuZCBhcnRpc3Qgc3RyaW5nIHRvIE1lZGlhQ29udHJvbFZpZXcyCi0gICAgICAgIE1lZGlhTWV0YWRhdGEuQnVpbGRlciBidWlsZGVyID0gbmV3IE1lZGlhTWV0YWRhdGEuQnVpbGRlcigpOwotICAgICAgICBidWlsZGVyLnB1dFN0cmluZyhNZWRpYU1ldGFkYXRhLk1FVEFEQVRBX0tFWV9USVRMRSwgbU11c2ljVGl0bGVUZXh0KTsKLSAgICAgICAgYnVpbGRlci5wdXRTdHJpbmcoTWVkaWFNZXRhZGF0YS5NRVRBREFUQV9LRVlfQVJUSVNULCBtTXVzaWNBcnRpc3RUZXh0KTsKLSAgICAgICAgbU1lZGlhU2Vzc2lvbi5zZXRNZXRhZGF0YShidWlsZGVyLmJ1aWxkKCkpOwotCi0gICAgICAgIC8vIERpc3BsYXkgRW1iZWRkZWQgbW9kZSBhcyBkZWZhdWx0Ci0gICAgICAgIG1JbnN0YW5jZS5yZW1vdmVWaWV3KG1TdXJmYWNlVmlldyk7Ci0gICAgICAgIG1JbnN0YW5jZS5yZW1vdmVWaWV3KG1UZXh0dXJlVmlldyk7Ci0gICAgICAgIGluZmxhdGVNdXNpY1ZpZXcoUi5sYXlvdXQuZW1iZWRkZWRfbXVzaWMpOwotICAgIH0KLQotICAgIHByaXZhdGUgaW50IHJldHJpZXZlT3JpZW50YXRpb24oKSB7Ci0gICAgICAgIERpc3BsYXlNZXRyaWNzIGRtID0gUmVzb3VyY2VzLmdldFN5c3RlbSgpLmdldERpc3BsYXlNZXRyaWNzKCk7Ci0gICAgICAgIGludCB3aWR0aCA9IGRtLndpZHRoUGl4ZWxzOwotICAgICAgICBpbnQgaGVpZ2h0ID0gZG0uaGVpZ2h0UGl4ZWxzOwotCi0gICAgICAgIHJldHVybiAoaGVpZ2h0ID4gd2lkdGgpID8KLSAgICAgICAgICAgICAgICBBY3Rpdml0eUluZm8uU0NSRUVOX09SSUVOVEFUSU9OX1BPUlRSQUlUIDoKLSAgICAgICAgICAgICAgICBBY3Rpdml0eUluZm8uU0NSRUVOX09SSUVOVEFUSU9OX0xBTkRTQ0FQRTsKLSAgICB9Ci0KLSAgICBwcml2YXRlIHZvaWQgaW5mbGF0ZU11c2ljVmlldyhpbnQgbGF5b3V0SWQpIHsKLSAgICAgICAgbUluc3RhbmNlLnJlbW92ZVZpZXcobU11c2ljVmlldyk7Ci0KLSAgICAgICAgVmlldyB2ID0gQXBpSGVscGVyLmluZmxhdGVMaWJMYXlvdXQobUluc3RhbmNlLmdldENvbnRleHQoKSwgbGF5b3V0SWQpOwotICAgICAgICB2LnNldEJhY2tncm91bmRDb2xvcihtRG9taW5hbnRDb2xvcik7Ci0KLSAgICAgICAgSW1hZ2VWaWV3IGFsYnVtVmlldyA9IHYuZmluZFZpZXdCeUlkKFIuaWQuYWxidW0pOwotICAgICAgICBpZiAoYWxidW1WaWV3ICE9IG51bGwpIHsKLSAgICAgICAgICAgIGFsYnVtVmlldy5zZXRJbWFnZURyYXdhYmxlKG1NdXNpY0FsYnVtRHJhd2FibGUpOwotICAgICAgICB9Ci0KLSAgICAgICAgVGV4dFZpZXcgdGl0bGVWaWV3ID0gdi5maW5kVmlld0J5SWQoUi5pZC50aXRsZSk7Ci0gICAgICAgIGlmICh0aXRsZVZpZXcgIT0gbnVsbCkgewotICAgICAgICAgICAgdGl0bGVWaWV3LnNldFRleHQobU11c2ljVGl0bGVUZXh0KTsKLSAgICAgICAgfQotCi0gICAgICAgIFRleHRWaWV3IGFydGlzdFZpZXcgPSB2LmZpbmRWaWV3QnlJZChSLmlkLmFydGlzdCk7Ci0gICAgICAgIGlmIChhcnRpc3RWaWV3ICE9IG51bGwpIHsKLSAgICAgICAgICAgIGFydGlzdFZpZXcuc2V0VGV4dChtTXVzaWNBcnRpc3RUZXh0KTsKLSAgICAgICAgfQotCi0gICAgICAgIG1NdXNpY1ZpZXcgPSB2OwotICAgICAgICBtSW5zdGFuY2UuYWRkVmlldyhtTXVzaWNWaWV3LCAwKTsKLSAgICB9Ci0KLSAgICBPblN1YnRpdGxlRGF0YUxpc3RlbmVyIG1TdWJ0aXRsZUxpc3RlbmVyID0KLSAgICAgICAgICAgIG5ldyBPblN1YnRpdGxlRGF0YUxpc3RlbmVyKCkgewotICAgICAgICAgICAgICAgIEBPdmVycmlkZQotICAgICAgICAgICAgICAgIHB1YmxpYyB2b2lkIG9uU3VidGl0bGVEYXRhKE1lZGlhUGxheWVyMiBtcCwgU3VidGl0bGVEYXRhIGRhdGEpIHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKERFQlVHKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBMb2cuZChUQUcsICJvblN1YnRpdGxlRGF0YSgpOiBnZXRUcmFja0luZGV4OiAiICsgZGF0YS5nZXRUcmFja0luZGV4KCkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKyAiLCBnZXRDdXJyZW50UG9zaXRpb246ICIgKyBtcC5nZXRDdXJyZW50UG9zaXRpb24oKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArICIsIGdldFN0YXJ0VGltZVVzKCk6ICIgKyBkYXRhLmdldFN0YXJ0VGltZVVzKCkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKyAiLCBkaWZmOiAiCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsgKGRhdGEuZ2V0U3RhcnRUaW1lVXMoKS8xMDAwIC0gbXAuZ2V0Q3VycmVudFBvc2l0aW9uKCkpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsgIm1zLCBnZXREdXJhdGlvblVzKCk6ICIgKyBkYXRhLmdldER1cmF0aW9uVXMoKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApOwotCi0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgZmluYWwgaW50IGluZGV4ID0gZGF0YS5nZXRUcmFja0luZGV4KCk7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChpbmRleCAhPSBtU2VsZWN0ZWRTdWJ0aXRsZVRyYWNrSW5kZXgpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIExvZy5kKFRBRywgIm9uU3VidGl0bGVEYXRhKCk6IGdldFRyYWNrSW5kZXg6ICIgKyBkYXRhLmdldFRyYWNrSW5kZXgoKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArICIsIHNlbGVjdGVkIHRyYWNrIGluZGV4OiAiICsgbVNlbGVjdGVkU3VidGl0bGVUcmFja0luZGV4KTsKLSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICBmb3IgKFBhaXI8SW50ZWdlciwgU3VidGl0bGVUcmFjaz4gcCA6IG1TdWJ0aXRsZVRyYWNrSW5kaWNlcykgewotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHAuZmlyc3QgPT0gaW5kZXgpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdWJ0aXRsZVRyYWNrIHRyYWNrID0gcC5zZWNvbmQ7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJhY2sub25EYXRhKGRhdGEpOwotICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfTsKLQotICAgIE1lZGlhUGxheWVyMkV2ZW50Q2FsbGJhY2sgbU1lZGlhUGxheWVyMkNhbGxiYWNrID0KLSAgICAgICAgICAgIG5ldyBNZWRpYVBsYXllcjJFdmVudENhbGxiYWNrKCkgewotICAgICAgICAgICAgICAgIEBPdmVycmlkZQotICAgICAgICAgICAgICAgIHB1YmxpYyB2b2lkIG9uVmlkZW9TaXplQ2hhbmdlZCgKLSAgICAgICAgICAgICAgICAgICAgICAgIE1lZGlhUGxheWVyMiBtcCwgRGF0YVNvdXJjZURlc2MgZHNkLCBpbnQgd2lkdGgsIGludCBoZWlnaHQpIHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKERFQlVHKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBMb2cuZChUQUcsICJvblZpZGVvU2l6ZUNoYW5nZWQoKTogc2l6ZTogIiArIHdpZHRoICsgIi8iICsgaGVpZ2h0KTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICBtVmlkZW9XaWR0aCA9IG1wLmdldFZpZGVvV2lkdGgoKTsKLSAgICAgICAgICAgICAgICAgICAgbVZpZGVvSGVpZ2h0ID0gbXAuZ2V0VmlkZW9IZWlnaHQoKTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKERFQlVHKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBMb2cuZChUQUcsICJvblZpZGVvU2l6ZUNoYW5nZWQoKTogbVZpZGVvU2l6ZToiICsgbVZpZGVvV2lkdGggKyAiLyIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKyBtVmlkZW9IZWlnaHQpOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIGlmIChtVmlkZW9XaWR0aCAhPSAwICYmIG1WaWRlb0hlaWdodCAhPSAwKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBtSW5zdGFuY2UucmVxdWVzdExheW91dCgpOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgLy8gVE9ETzogUmVtb3ZlIHRpbWVkIHRleHQgcmVsYXRlZCBjb2RlIGxhdGVyIG9uY2UgcmVsZXZhbnQgUmVuZGVyZXIgaXMgZGVmaW5lZC4KLSAgICAgICAgICAgICAgICAvLyBUaGlzIGlzIGp1c3QgZm9yIGRlYnVnZ2luZyBwdXJwb3NlLgotICAgICAgICAgICAgICAgIEBPdmVycmlkZQotICAgICAgICAgICAgICAgIHB1YmxpYyB2b2lkIG9uVGltZWRUZXh0KAotICAgICAgICAgICAgICAgICAgICAgICAgTWVkaWFQbGF5ZXIyIG1wLCBEYXRhU291cmNlRGVzYyBkc2QsIFRpbWVkVGV4dCB0ZXh0KSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBMb2cuZChUQUcsICJUaW1lZFRleHQ6ICIgKyB0ZXh0LmdldFRleHQoKSk7Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgICAgICAgICAgcHVibGljIHZvaWQgb25JbmZvKAotICAgICAgICAgICAgICAgICAgICAgICAgTWVkaWFQbGF5ZXIyIG1wLCBEYXRhU291cmNlRGVzYyBkc2QsIGludCB3aGF0LCBpbnQgZXh0cmEpIHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKHdoYXQgPT0gTWVkaWFQbGF5ZXIyLk1FRElBX0lORk9fTUVUQURBVEFfVVBEQVRFKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBleHRyYWN0VHJhY2tzKCk7Ci0gICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAod2hhdCA9PSBNZWRpYVBsYXllcjIuTUVESUFfSU5GT19QUkVQQVJFRCkgewotICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5vblByZXBhcmVkKG1wLCBkc2QpOwotICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHdoYXQgPT0gTWVkaWFQbGF5ZXIyLk1FRElBX0lORk9fUExBWUJBQ0tfQ09NUExFVEUpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMub25Db21wbGV0aW9uKG1wLCBkc2QpOwotICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHdoYXQgPT0gTWVkaWFQbGF5ZXIyLk1FRElBX0lORk9fQlVGRkVSSU5HX1VQREFURSkgewotICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5vbkJ1ZmZlcmluZ1VwZGF0ZShtcCwgZHNkLCBleHRyYSk7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgICAgICAgICBwdWJsaWMgdm9pZCBvbkVycm9yKAotICAgICAgICAgICAgICAgICAgICAgICAgTWVkaWFQbGF5ZXIyIG1wLCBEYXRhU291cmNlRGVzYyBkc2QsIGludCBmcmFtZXdvcmtFcnIsIGludCBpbXBsRXJyKSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChERUJVRykgewotICAgICAgICAgICAgICAgICAgICAgICAgTG9nLmQoVEFHLCAiRXJyb3I6ICIgKyBmcmFtZXdvcmtFcnIgKyAiLCIgKyBpbXBsRXJyKTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICBtQ3VycmVudFN0YXRlID0gU1RBVEVfRVJST1I7Ci0gICAgICAgICAgICAgICAgICAgIG1UYXJnZXRTdGF0ZSA9IFNUQVRFX0VSUk9SOwotICAgICAgICAgICAgICAgICAgICB1cGRhdGVQbGF5YmFja1N0YXRlKCk7Ci0KLSAgICAgICAgICAgICAgICAgICAgaWYgKG1NZWRpYUNvbnRyb2xWaWV3ICE9IG51bGwpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIG1NZWRpYUNvbnRyb2xWaWV3LnNldFZpc2liaWxpdHkoVmlldy5HT05FKTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIEBPdmVycmlkZQotICAgICAgICAgICAgICAgIHB1YmxpYyB2b2lkIG9uQ2FsbENvbXBsZXRlZChNZWRpYVBsYXllcjIgbXAsIERhdGFTb3VyY2VEZXNjIGRzZCwgaW50IHdoYXQsCi0gICAgICAgICAgICAgICAgICAgICAgICBpbnQgc3RhdHVzKSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmICh3aGF0ID09IE1lZGlhUGxheWVyMi5DQUxMX0NPTVBMRVRFRF9TRUVLX1RPICYmIHN0YXR1cyA9PSAwKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICB1cGRhdGVQbGF5YmFja1N0YXRlKCk7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICBwcml2YXRlIHZvaWQgb25QcmVwYXJlZChNZWRpYVBsYXllcjIgbXAsIERhdGFTb3VyY2VEZXNjIGRzZCkgewotICAgICAgICAgICAgICAgICAgICBpZiAoREVCVUcpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIExvZy5kKFRBRywgIk9uUHJlcGFyZWRMaXN0ZW5lcigpLiBtQ3VycmVudFN0YXRlPSIgKyBtQ3VycmVudFN0YXRlCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsgIiwgbVRhcmdldFN0YXRlPSIgKyBtVGFyZ2V0U3RhdGUpOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIG1DdXJyZW50U3RhdGUgPSBTVEFURV9QUkVQQVJFRDsKLSAgICAgICAgICAgICAgICAgICAgLy8gQ3JlYXRlIGFuZCBzZXQgcGxheWJhY2sgc3RhdGUgZm9yIE1lZGlhQ29udHJvbFZpZXcyCi0gICAgICAgICAgICAgICAgICAgIHVwZGF0ZVBsYXliYWNrU3RhdGUoKTsKLQotICAgICAgICAgICAgICAgICAgICAvLyBUT0RPOiBjaGFuZ2UgdGhpcyB0byBzZW5kIFRyYWNrSW5mb3MgdG8gTWVkaWFDb250cm9sVmlldzIKLSAgICAgICAgICAgICAgICAgICAgLy8gVE9ETzogY3JlYXRlIE1lZGlhU2Vzc2lvbiB3aGVuIGluaXRpYWxpemluZyBWaWRlb1ZpZXcyCi0gICAgICAgICAgICAgICAgICAgIGlmIChtTWVkaWFTZXNzaW9uICE9IG51bGwpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGV4dHJhY3RUcmFja3MoKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGV4dHJhY3RNZXRhZGF0YSgpOwotICAgICAgICAgICAgICAgICAgICAgICAgZXh0cmFjdEF1ZGlvTWV0YWRhdGEoKTsKLSAgICAgICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgICAgIGlmIChtTWVkaWFDb250cm9sVmlldyAhPSBudWxsKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBtTWVkaWFDb250cm9sVmlldy5zZXRFbmFibGVkKHRydWUpOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIGludCB2aWRlb1dpZHRoID0gbXAuZ2V0VmlkZW9XaWR0aCgpOwotICAgICAgICAgICAgICAgICAgICBpbnQgdmlkZW9IZWlnaHQgPSBtcC5nZXRWaWRlb0hlaWdodCgpOwotCi0gICAgICAgICAgICAgICAgICAgIC8vIG1TZWVrV2hlblByZXBhcmVkIG1heSBiZSBjaGFuZ2VkIGFmdGVyIHNlZWtUbygpIGNhbGwKLSAgICAgICAgICAgICAgICAgICAgbG9uZyBzZWVrVG9Qb3NpdGlvbiA9IG1TZWVrV2hlblByZXBhcmVkOwotICAgICAgICAgICAgICAgICAgICBpZiAoc2Vla1RvUG9zaXRpb24gIT0gMCkgewotICAgICAgICAgICAgICAgICAgICAgICAgbU1lZGlhQ29udHJvbGxlci5nZXRUcmFuc3BvcnRDb250cm9scygpLnNlZWtUbyhzZWVrVG9Qb3NpdGlvbik7Ci0gICAgICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgICAgICBpZiAodmlkZW9XaWR0aCAhPSAwICYmIHZpZGVvSGVpZ2h0ICE9IDApIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmICh2aWRlb1dpZHRoICE9IG1WaWRlb1dpZHRoIHx8IHZpZGVvSGVpZ2h0ICE9IG1WaWRlb0hlaWdodCkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChERUJVRykgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMb2cuaShUQUcsICJPblByZXBhcmVkTGlzdGVuZXIoKSA6ICIpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMb2cuaShUQUcsICIgdmlkZW8gc2l6ZTogIiArIHZpZGVvV2lkdGggKyAiLyIgKyB2aWRlb0hlaWdodCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExvZy5pKFRBRywgIiBtZWFzdXJlZFNpemU6ICIgKyBtSW5zdGFuY2UuZ2V0TWVhc3VyZWRXaWR0aCgpICsgIi8iCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKyBtSW5zdGFuY2UuZ2V0TWVhc3VyZWRIZWlnaHQoKSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExvZy5pKFRBRywgIiB2aWV3U2l6ZTogIiArIG1JbnN0YW5jZS5nZXRXaWR0aCgpICsgIi8iCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKyBtSW5zdGFuY2UuZ2V0SGVpZ2h0KCkpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBtVmlkZW9XaWR0aCA9IHZpZGVvV2lkdGg7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgbVZpZGVvSGVpZ2h0ID0gdmlkZW9IZWlnaHQ7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgbUluc3RhbmNlLnJlcXVlc3RMYXlvdXQoKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG5lZWRUb1N0YXJ0KCkpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBtTWVkaWFDb250cm9sbGVyLmdldFRyYW5zcG9ydENvbnRyb2xzKCkucGxheSgpOwotICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICAgICAgLy8gV2UgZG9uJ3Qga25vdyB0aGUgdmlkZW8gc2l6ZSB5ZXQsIGJ1dCBzaG91bGQgc3RhcnQgYW55d2F5LgotICAgICAgICAgICAgICAgICAgICAgICAgLy8gVGhlIHZpZGVvIHNpemUgbWlnaHQgYmUgcmVwb3J0ZWQgdG8gdXMgbGF0ZXIuCi0gICAgICAgICAgICAgICAgICAgICAgICBpZiAobmVlZFRvU3RhcnQoKSkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1NZWRpYUNvbnRyb2xsZXIuZ2V0VHJhbnNwb3J0Q29udHJvbHMoKS5wbGF5KCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICBwcml2YXRlIHZvaWQgb25Db21wbGV0aW9uKE1lZGlhUGxheWVyMiBtcCwgRGF0YVNvdXJjZURlc2MgZHNkKSB7Ci0gICAgICAgICAgICAgICAgICAgIG1DdXJyZW50U3RhdGUgPSBTVEFURV9QTEFZQkFDS19DT01QTEVURUQ7Ci0gICAgICAgICAgICAgICAgICAgIG1UYXJnZXRTdGF0ZSA9IFNUQVRFX1BMQVlCQUNLX0NPTVBMRVRFRDsKLSAgICAgICAgICAgICAgICAgICAgdXBkYXRlUGxheWJhY2tTdGF0ZSgpOwotICAgICAgICAgICAgICAgICAgICBpZiAobUF1ZGlvRm9jdXNUeXBlICE9IEF1ZGlvTWFuYWdlci5BVURJT0ZPQ1VTX05PTkUpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIG1BdWRpb01hbmFnZXIuYWJhbmRvbkF1ZGlvRm9jdXMobnVsbCk7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICBwcml2YXRlIHZvaWQgb25CdWZmZXJpbmdVcGRhdGUoTWVkaWFQbGF5ZXIyIG1wLCBEYXRhU291cmNlRGVzYyBkc2QsIGludCBwZXJjZW50KSB7Ci0gICAgICAgICAgICAgICAgICAgIG1DdXJyZW50QnVmZmVyUGVyY2VudGFnZSA9IHBlcmNlbnQ7Ci0gICAgICAgICAgICAgICAgICAgIHVwZGF0ZVBsYXliYWNrU3RhdGUoKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9OwotCi0gICAgcHJpdmF0ZSBjbGFzcyBNZWRpYVNlc3Npb25DYWxsYmFjayBleHRlbmRzIE1lZGlhU2Vzc2lvbi5DYWxsYmFjayB7Ci0gICAgICAgIEBPdmVycmlkZQotICAgICAgICBwdWJsaWMgdm9pZCBvbkNvbW1hbmQoU3RyaW5nIGNvbW1hbmQsIEJ1bmRsZSBhcmdzLCBSZXN1bHRSZWNlaXZlciByZWNlaXZlcikgewotICAgICAgICAgICAgaWYgKGlzUmVtb3RlUGxheWJhY2soKSkgewotICAgICAgICAgICAgICAgIG1Sb3V0ZVBsYXllci5vbkNvbW1hbmQoY29tbWFuZCwgYXJncywgcmVjZWl2ZXIpOwotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICBzd2l0Y2ggKGNvbW1hbmQpIHsKLSAgICAgICAgICAgICAgICAgICAgY2FzZSBNZWRpYUNvbnRyb2xWaWV3MkltcGwuQ09NTUFORF9TSE9XX1NVQlRJVExFOgotICAgICAgICAgICAgICAgICAgICAgICAgaW50IHN1YnRpdGxlSW5kZXggPSBhcmdzLmdldEludCgKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTWVkaWFDb250cm9sVmlldzJJbXBsLktFWV9TRUxFQ1RFRF9TVUJUSVRMRV9JTkRFWCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSU5WQUxJRF9UUkFDS19JTkRFWCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoc3VidGl0bGVJbmRleCAhPSBJTlZBTElEX1RSQUNLX0lOREVYKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHN1YnRpdGxlVHJhY2tJbmRleCA9IG1TdWJ0aXRsZVRyYWNrSW5kaWNlcy5nZXQoc3VidGl0bGVJbmRleCkuZmlyc3Q7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHN1YnRpdGxlVHJhY2tJbmRleCAhPSBtU2VsZWN0ZWRTdWJ0aXRsZVRyYWNrSW5kZXgpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbVNlbGVjdGVkU3VidGl0bGVUcmFja0luZGV4ID0gc3VidGl0bGVUcmFja0luZGV4OwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtSW5zdGFuY2Uuc2V0U3VidGl0bGVFbmFibGVkKHRydWUpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICBjYXNlIE1lZGlhQ29udHJvbFZpZXcySW1wbC5DT01NQU5EX0hJREVfU1VCVElUTEU6Ci0gICAgICAgICAgICAgICAgICAgICAgICBtSW5zdGFuY2Uuc2V0U3VidGl0bGVFbmFibGVkKGZhbHNlKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICBjYXNlIE1lZGlhQ29udHJvbFZpZXcySW1wbC5DT01NQU5EX1NFVF9GVUxMU0NSRUVOOgotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1GdWxsU2NyZWVuUmVxdWVzdExpc3RlbmVyICE9IG51bGwpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBtRnVsbFNjcmVlblJlcXVlc3RMaXN0ZW5lci5vbkZ1bGxTY3JlZW5SZXF1ZXN0KAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbUluc3RhbmNlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJncy5nZXRCb29sZWFuKE1lZGlhQ29udHJvbFZpZXcySW1wbC5BUkdVTUVOVF9LRVlfRlVMTFNDUkVFTikpOwotICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgIGNhc2UgTWVkaWFDb250cm9sVmlldzJJbXBsLkNPTU1BTkRfU0VMRUNUX0FVRElPX1RSQUNLOgotICAgICAgICAgICAgICAgICAgICAgICAgaW50IGF1ZGlvSW5kZXggPSBhcmdzLmdldEludChNZWRpYUNvbnRyb2xWaWV3MkltcGwuS0VZX1NFTEVDVEVEX0FVRElPX0lOREVYLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJTlZBTElEX1RSQUNLX0lOREVYKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChhdWRpb0luZGV4ICE9IElOVkFMSURfVFJBQ0tfSU5ERVgpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgYXVkaW9UcmFja0luZGV4ID0gbUF1ZGlvVHJhY2tJbmRpY2VzLmdldChhdWRpb0luZGV4KTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoYXVkaW9UcmFja0luZGV4ICE9IG1TZWxlY3RlZEF1ZGlvVHJhY2tJbmRleCkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtU2VsZWN0ZWRBdWRpb1RyYWNrSW5kZXggPSBhdWRpb1RyYWNrSW5kZXg7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1NZWRpYVBsYXllci5zZWxlY3RUcmFjayhtU2VsZWN0ZWRBdWRpb1RyYWNrSW5kZXgpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICBjYXNlIE1lZGlhQ29udHJvbFZpZXcySW1wbC5DT01NQU5EX1NFVF9QTEFZQkFDS19TUEVFRDoKLSAgICAgICAgICAgICAgICAgICAgICAgIGZsb2F0IHNwZWVkID0gYXJncy5nZXRGbG9hdCgKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTWVkaWFDb250cm9sVmlldzJJbXBsLktFWV9QTEFZQkFDS19TUEVFRCwgSU5WQUxJRF9TUEVFRCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoc3BlZWQgIT0gSU5WQUxJRF9TUEVFRCAmJiBzcGVlZCAhPSBtU3BlZWQpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBtSW5zdGFuY2Uuc2V0U3BlZWQoc3BlZWQpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1TcGVlZCA9IHNwZWVkOwotICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgIGNhc2UgTWVkaWFDb250cm9sVmlldzJJbXBsLkNPTU1BTkRfTVVURToKLSAgICAgICAgICAgICAgICAgICAgICAgIG1Wb2x1bWVMZXZlbCA9IG1BdWRpb01hbmFnZXIuZ2V0U3RyZWFtVm9sdW1lKEF1ZGlvTWFuYWdlci5TVFJFQU1fTVVTSUMpOwotICAgICAgICAgICAgICAgICAgICAgICAgbUF1ZGlvTWFuYWdlci5zZXRTdHJlYW1Wb2x1bWUoQXVkaW9NYW5hZ2VyLlNUUkVBTV9NVVNJQywgMCwgMCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgY2FzZSBNZWRpYUNvbnRyb2xWaWV3MkltcGwuQ09NTUFORF9VTk1VVEU6Ci0gICAgICAgICAgICAgICAgICAgICAgICBtQXVkaW9NYW5hZ2VyLnNldFN0cmVhbVZvbHVtZShBdWRpb01hbmFnZXIuU1RSRUFNX01VU0lDLCBtVm9sdW1lTGV2ZWwsIDApOwotICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICAgICAgc2hvd0NvbnRyb2xsZXIoKTsKLSAgICAgICAgfQotCi0gICAgICAgIEBPdmVycmlkZQotICAgICAgICBwdWJsaWMgdm9pZCBvbkN1c3RvbUFjdGlvbihTdHJpbmcgYWN0aW9uLCBCdW5kbGUgZXh0cmFzKSB7Ci0gICAgICAgICAgICBtQ3VzdG9tQWN0aW9uTGlzdGVuZXJSZWNvcmQuZmlyc3QuZXhlY3V0ZSgoKSAtPgotICAgICAgICAgICAgICAgICAgICBtQ3VzdG9tQWN0aW9uTGlzdGVuZXJSZWNvcmQuc2Vjb25kLm9uQ3VzdG9tQWN0aW9uKGFjdGlvbiwgZXh0cmFzKSk7Ci0gICAgICAgICAgICBzaG93Q29udHJvbGxlcigpOwotICAgICAgICB9Ci0KLSAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgIHB1YmxpYyB2b2lkIG9uUGxheSgpIHsKLSAgICAgICAgICAgIGlmIChpc0luUGxheWJhY2tTdGF0ZSgpICYmIChtQ3VycmVudFZpZXcuaGFzQXZhaWxhYmxlU3VyZmFjZSgpIHx8IG1Jc011c2ljTWVkaWFUeXBlKSkgewotICAgICAgICAgICAgICAgIGlmIChpc1JlbW90ZVBsYXliYWNrKCkpIHsKLSAgICAgICAgICAgICAgICAgICAgbVJvdXRlUGxheWVyLm9uUGxheSgpOwotICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgIGFwcGx5U3BlZWQoKTsKLSAgICAgICAgICAgICAgICAgICAgbU1lZGlhUGxheWVyLnBsYXkoKTsKLSAgICAgICAgICAgICAgICAgICAgbUN1cnJlbnRTdGF0ZSA9IFNUQVRFX1BMQVlJTkc7Ci0gICAgICAgICAgICAgICAgICAgIHVwZGF0ZVBsYXliYWNrU3RhdGUoKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgbUN1cnJlbnRTdGF0ZSA9IFNUQVRFX1BMQVlJTkc7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBtVGFyZ2V0U3RhdGUgPSBTVEFURV9QTEFZSU5HOwotICAgICAgICAgICAgaWYgKERFQlVHKSB7Ci0gICAgICAgICAgICAgICAgTG9nLmQoVEFHLCAib25QbGF5KCkuIG1DdXJyZW50U3RhdGU9IiArIG1DdXJyZW50U3RhdGUKLSAgICAgICAgICAgICAgICAgICAgICAgICsgIiwgbVRhcmdldFN0YXRlPSIgKyBtVGFyZ2V0U3RhdGUpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgc2hvd0NvbnRyb2xsZXIoKTsKLSAgICAgICAgfQotCi0gICAgICAgIEBPdmVycmlkZQotICAgICAgICBwdWJsaWMgdm9pZCBvblBhdXNlKCkgewotICAgICAgICAgICAgaWYgKGlzSW5QbGF5YmFja1N0YXRlKCkpIHsKLSAgICAgICAgICAgICAgICBpZiAoaXNSZW1vdGVQbGF5YmFjaygpKSB7Ci0gICAgICAgICAgICAgICAgICAgIG1Sb3V0ZVBsYXllci5vblBhdXNlKCk7Ci0gICAgICAgICAgICAgICAgICAgIG1DdXJyZW50U3RhdGUgPSBTVEFURV9QQVVTRUQ7Ci0gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChtTWVkaWFQbGF5ZXIuaXNQbGF5aW5nKCkpIHsKLSAgICAgICAgICAgICAgICAgICAgbU1lZGlhUGxheWVyLnBhdXNlKCk7Ci0gICAgICAgICAgICAgICAgICAgIG1DdXJyZW50U3RhdGUgPSBTVEFURV9QQVVTRUQ7Ci0gICAgICAgICAgICAgICAgICAgIHVwZGF0ZVBsYXliYWNrU3RhdGUoKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBtVGFyZ2V0U3RhdGUgPSBTVEFURV9QQVVTRUQ7Ci0gICAgICAgICAgICBpZiAoREVCVUcpIHsKLSAgICAgICAgICAgICAgICBMb2cuZChUQUcsICJvblBhdXNlKCkuIG1DdXJyZW50U3RhdGU9IiArIG1DdXJyZW50U3RhdGUKLSAgICAgICAgICAgICAgICAgICAgICAgICsgIiwgbVRhcmdldFN0YXRlPSIgKyBtVGFyZ2V0U3RhdGUpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgc2hvd0NvbnRyb2xsZXIoKTsKLSAgICAgICAgfQotCi0gICAgICAgIEBPdmVycmlkZQotICAgICAgICBwdWJsaWMgdm9pZCBvblNlZWtUbyhsb25nIHBvcykgewotICAgICAgICAgICAgaWYgKGlzSW5QbGF5YmFja1N0YXRlKCkpIHsKLSAgICAgICAgICAgICAgICBpZiAoaXNSZW1vdGVQbGF5YmFjaygpKSB7Ci0gICAgICAgICAgICAgICAgICAgIG1Sb3V0ZVBsYXllci5vblNlZWtUbyhwb3MpOwotICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgIG1NZWRpYVBsYXllci5zZWVrVG8ocG9zLCBNZWRpYVBsYXllcjIuU0VFS19QUkVWSU9VU19TWU5DKTsKLSAgICAgICAgICAgICAgICAgICAgbVNlZWtXaGVuUHJlcGFyZWQgPSAwOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgbVNlZWtXaGVuUHJlcGFyZWQgPSBwb3M7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBzaG93Q29udHJvbGxlcigpOwotICAgICAgICB9Ci0KLSAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgIHB1YmxpYyB2b2lkIG9uU3RvcCgpIHsKLSAgICAgICAgICAgIGlmIChpc1JlbW90ZVBsYXliYWNrKCkpIHsKLSAgICAgICAgICAgICAgICBtUm91dGVQbGF5ZXIub25TdG9wKCk7Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIHJlc2V0UGxheWVyKCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBzaG93Q29udHJvbGxlcigpOwotICAgICAgICB9Ci0gICAgfQotfQpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvTWVkaWFDb21wb25lbnRzL3NyYy9jb20vYW5kcm9pZC93aWRnZXQvVmlkZW9WaWV3SW50ZXJmYWNlLmphdmEgYi9wYWNrYWdlcy9NZWRpYUNvbXBvbmVudHMvc3JjL2NvbS9hbmRyb2lkL3dpZGdldC9WaWRlb1ZpZXdJbnRlcmZhY2UuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODU0ZDQ3ZS4uMDAwMDAwMAotLS0gYS9wYWNrYWdlcy9NZWRpYUNvbXBvbmVudHMvc3JjL2NvbS9hbmRyb2lkL3dpZGdldC9WaWRlb1ZpZXdJbnRlcmZhY2UuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDY1ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgMjAxOCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0Ci0gKgotICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7Ci0gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCi0gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLSAqCi0gKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotICoKLSAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKLSAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCi0gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KLSAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKLSAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgotICovCi0KLXBhY2thZ2UgY29tLmFuZHJvaWQud2lkZ2V0OwotCi1pbXBvcnQgYW5kcm9pZC5hbm5vdGF0aW9uLk5vbk51bGw7Ci1pbXBvcnQgYW5kcm9pZC5tZWRpYS5NZWRpYVBsYXllcjI7Ci1pbXBvcnQgYW5kcm9pZC52aWV3LlZpZXc7Ci0KLWludGVyZmFjZSBWaWRlb1ZpZXdJbnRlcmZhY2UgewotICAgIC8qKgotICAgICAqIEFzc2lnbnMgdGhlIHZpZXcncyBzdXJmYWNlIHRvIHRoZSBnaXZlbiBNZWRpYVBsYXllcjIgaW5zdGFuY2UuCi0gICAgICoKLSAgICAgKiBAcGFyYW0gbXAgTWVkaWFQbGF5ZXIyCi0gICAgICogQHJldHVybiB0cnVlIGlmIHRoZSBzdXJmYWNlIGlzIHN1Y2Nlc3NmdWxseSBhc3NpZ25lZCwgZmFsc2UgaWYgbm90LiBJdCB3aWxsIGZhaWwgdG8gYXNzaWduCi0gICAgICogICAgICAgICBpZiBhbnkgb2YgTWVkaWFQbGF5ZXIyIG9yIHN1cmZhY2UgaXMgdW5hdmFpbGFibGUuCi0gICAgICovCi0gICAgYm9vbGVhbiBhc3NpZ25TdXJmYWNlVG9NZWRpYVBsYXllcihNZWRpYVBsYXllcjIgbXApOwotICAgIHZvaWQgc2V0U3VyZmFjZUxpc3RlbmVyKFN1cmZhY2VMaXN0ZW5lciBsKTsKLSAgICBpbnQgZ2V0Vmlld1R5cGUoKTsKLSAgICB2b2lkIHNldE1lZGlhUGxheWVyKE1lZGlhUGxheWVyMiBtcCk7Ci0KLSAgICAvKioKLSAgICAgKiBUYWtlcyBvdmVyIG9sZFZpZXcuIEl0IG1lYW5zIHRoYXQgdGhlIE1lZGlhUGxheWVyMiB3aWxsIHN0YXJ0IHJlbmRlcmluZyBvbiB0aGlzIHZpZXcuCi0gICAgICogVGhlIHZpc2liaWxpdHkgb2Ygb2xkVmlldyB3aWxsIGJlIHNldCBhcyB7QGxpbmsgVmlldy5HT05FfS4gSWYgdGhlIHZpZXcgZG9lc24ndCBoYXZlIGEKLSAgICAgKiBNZWRpYVBsYXllcjIgaW5zdGFuY2Ugb3IgaXRzIHN1cmZhY2UgaXMgbm90IGF2YWlsYWJsZSwgdGhlIGFjdHVhbCBleGVjdXRpb24gaXMgZGVmZXJyZWQgdW50aWwKLSAgICAgKiBhIE1lZGlhUGxheWVyMiBpbnN0YW5jZSBpcyBzZXQgYnkge0BsaW5rICNzZXRNZWRpYVBsYXllcn0gb3IgaXRzIHN1cmZhY2UgYmVjb21lcyBhdmFpbGFibGUuCi0gICAgICoge0BsaW5rIFN1cmZhY2VMaXN0ZW5lci5vblN1cmZhY2VUYWtlT3ZlckRvbmV9IHdpbGwgYmUgY2FsbGVkIHdoZW4gdGhlIGFjdHVhbCBleGVjdXRpb24gaXMKLSAgICAgKiBkb25lLgotICAgICAqCi0gICAgICogQHBhcmFtIG9sZFZpZXcgVGhlIHZpZXcgdGhhdCBNZWRpYVBsYXllcjIgaXMgY3VycmVudGx5IHJlbmRlcmluZyBvbi4KLSAgICAgKi8KLSAgICB2b2lkIHRha2VPdmVyKEBOb25OdWxsIFZpZGVvVmlld0ludGVyZmFjZSBvbGRWaWV3KTsKLQotICAgIC8qKgotICAgICAqIEluZGljYXRlcyBpZiB0aGUgdmlldydzIHN1cmZhY2UgaXMgYXZhaWxhYmxlLgotICAgICAqCi0gICAgICogQHJldHVybiB0cnVlIGlmIHRoZSBzdXJmYWNlIGlzIGF2YWlsYWJsZS4KLSAgICAgKi8KLSAgICBib29sZWFuIGhhc0F2YWlsYWJsZVN1cmZhY2UoKTsKLQotICAgIC8qKgotICAgICAqIEFuIGluc3RhbmNlIG9mIFZpZGVvVmlld0ludGVyZmFjZSBjYWxscyB0aGVzZSBzdXJmYWNlIG5vdGlmaWNhdGlvbiBtZXRob2RzIGFjY29yZGluZ2x5IGlmCi0gICAgICogYSBsaXN0ZW5lciBoYXMgYmVlbiByZWdpc3RlcmVkIHZpYSB7QGxpbmsgI3NldFN1cmZhY2VMaXN0ZW5lcihTdXJmYWNlTGlzdGVuZXIpfS4KLSAgICAgKi8KLSAgICBpbnRlcmZhY2UgU3VyZmFjZUxpc3RlbmVyIHsKLSAgICAgICAgdm9pZCBvblN1cmZhY2VDcmVhdGVkKFZpZXcgdmlldywgaW50IHdpZHRoLCBpbnQgaGVpZ2h0KTsKLSAgICAgICAgdm9pZCBvblN1cmZhY2VEZXN0cm95ZWQoVmlldyB2aWV3KTsKLSAgICAgICAgdm9pZCBvblN1cmZhY2VDaGFuZ2VkKFZpZXcgdmlldywgaW50IHdpZHRoLCBpbnQgaGVpZ2h0KTsKLSAgICAgICAgdm9pZCBvblN1cmZhY2VUYWtlT3ZlckRvbmUoVmlkZW9WaWV3SW50ZXJmYWNlIHZpZXcpOwotICAgIH0KLX0KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL01lZGlhQ29tcG9uZW50cy9zcmMvY29tL2FuZHJvaWQvd2lkZ2V0L1ZpZXdHcm91cEltcGwuamF2YSBiL3BhY2thZ2VzL01lZGlhQ29tcG9uZW50cy9zcmMvY29tL2FuZHJvaWQvd2lkZ2V0L1ZpZXdHcm91cEltcGwuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNWEwNjgyNi4uMDAwMDAwMAotLS0gYS9wYWNrYWdlcy9NZWRpYUNvbXBvbmVudHMvc3JjL2NvbS9hbmRyb2lkL3dpZGdldC9WaWV3R3JvdXBJbXBsLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxMzQgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAyMDE4IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKLSAqCi0gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKLSAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KLSAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotICoKLSAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0gKgotICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQotICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKLSAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgotICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAotICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCi0gKi8KLQotcGFja2FnZSBjb20uYW5kcm9pZC53aWRnZXQ7Ci0KLWltcG9ydCBhbmRyb2lkLm1lZGlhLnVwZGF0ZS5WaWV3R3JvdXBQcm92aWRlcjsKLWltcG9ydCBhbmRyb2lkLnV0aWwuQXR0cmlidXRlU2V0OwotaW1wb3J0IGFuZHJvaWQudmlldy5Nb3Rpb25FdmVudDsKLWltcG9ydCBhbmRyb2lkLnZpZXcuVmlldzsKLWltcG9ydCBhbmRyb2lkLnZpZXcuVmlld0dyb3VwOwotCi1wdWJsaWMgYWJzdHJhY3QgY2xhc3MgVmlld0dyb3VwSW1wbCBpbXBsZW1lbnRzIFZpZXdHcm91cFByb3ZpZGVyIHsKLSAgICBwcml2YXRlIGZpbmFsIFZpZXdHcm91cFByb3ZpZGVyIG1TdXBlclByb3ZpZGVyOwotCi0gICAgcHVibGljIFZpZXdHcm91cEltcGwoVmlld0dyb3VwIGluc3RhbmNlLAotICAgICAgICAgICAgVmlld0dyb3VwUHJvdmlkZXIgc3VwZXJQcm92aWRlciwgVmlld0dyb3VwUHJvdmlkZXIgcHJpdmF0ZVByb3ZpZGVyKSB7Ci0gICAgICAgIG1TdXBlclByb3ZpZGVyID0gc3VwZXJQcm92aWRlcjsKLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgdm9pZCBvbkF0dGFjaGVkVG9XaW5kb3dfaW1wbCgpIHsKLSAgICAgICAgbVN1cGVyUHJvdmlkZXIub25BdHRhY2hlZFRvV2luZG93X2ltcGwoKTsKLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgdm9pZCBvbkRldGFjaGVkRnJvbVdpbmRvd19pbXBsKCkgewotICAgICAgICBtU3VwZXJQcm92aWRlci5vbkRldGFjaGVkRnJvbVdpbmRvd19pbXBsKCk7Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIENoYXJTZXF1ZW5jZSBnZXRBY2Nlc3NpYmlsaXR5Q2xhc3NOYW1lX2ltcGwoKSB7Ci0gICAgICAgIHJldHVybiBtU3VwZXJQcm92aWRlci5nZXRBY2Nlc3NpYmlsaXR5Q2xhc3NOYW1lX2ltcGwoKTsKLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgYm9vbGVhbiBvblRvdWNoRXZlbnRfaW1wbChNb3Rpb25FdmVudCBldikgewotICAgICAgICByZXR1cm4gbVN1cGVyUHJvdmlkZXIub25Ub3VjaEV2ZW50X2ltcGwoZXYpOwotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyBib29sZWFuIG9uVHJhY2tiYWxsRXZlbnRfaW1wbChNb3Rpb25FdmVudCBldikgewotICAgICAgICByZXR1cm4gbVN1cGVyUHJvdmlkZXIub25UcmFja2JhbGxFdmVudF9pbXBsKGV2KTsKLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgdm9pZCBvbkZpbmlzaEluZmxhdGVfaW1wbCgpIHsKLSAgICAgICAgbVN1cGVyUHJvdmlkZXIub25GaW5pc2hJbmZsYXRlX2ltcGwoKTsKLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgdm9pZCBzZXRFbmFibGVkX2ltcGwoYm9vbGVhbiBlbmFibGVkKSB7Ci0gICAgICAgIG1TdXBlclByb3ZpZGVyLnNldEVuYWJsZWRfaW1wbChlbmFibGVkKTsKLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgdm9pZCBvblZpc2liaWxpdHlBZ2dyZWdhdGVkX2ltcGwoYm9vbGVhbiBpc1Zpc2libGUpIHsKLSAgICAgICAgbVN1cGVyUHJvdmlkZXIub25WaXNpYmlsaXR5QWdncmVnYXRlZF9pbXBsKGlzVmlzaWJsZSk7Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIHZvaWQgb25MYXlvdXRfaW1wbChib29sZWFuIGNoYW5nZWQsIGludCBsZWZ0LCBpbnQgdG9wLCBpbnQgcmlnaHQsIGludCBib3R0b20pIHsKLSAgICAgICAgbVN1cGVyUHJvdmlkZXIub25MYXlvdXRfaW1wbChjaGFuZ2VkLCBsZWZ0LCB0b3AsIHJpZ2h0LCBib3R0b20pOwotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyB2b2lkIG9uTWVhc3VyZV9pbXBsKGludCB3aWR0aE1lYXN1cmVTcGVjLCBpbnQgaGVpZ2h0TWVhc3VyZVNwZWMpIHsKLSAgICAgICAgbVN1cGVyUHJvdmlkZXIub25NZWFzdXJlX2ltcGwod2lkdGhNZWFzdXJlU3BlYywgaGVpZ2h0TWVhc3VyZVNwZWMpOwotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyBpbnQgZ2V0U3VnZ2VzdGVkTWluaW11bVdpZHRoX2ltcGwoKSB7Ci0gICAgICAgIHJldHVybiBtU3VwZXJQcm92aWRlci5nZXRTdWdnZXN0ZWRNaW5pbXVtV2lkdGhfaW1wbCgpOwotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyBpbnQgZ2V0U3VnZ2VzdGVkTWluaW11bUhlaWdodF9pbXBsKCkgewotICAgICAgICByZXR1cm4gbVN1cGVyUHJvdmlkZXIuZ2V0U3VnZ2VzdGVkTWluaW11bUhlaWdodF9pbXBsKCk7Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIHZvaWQgc2V0TWVhc3VyZWREaW1lbnNpb25faW1wbChpbnQgbWVhc3VyZWRXaWR0aCwgaW50IG1lYXN1cmVkSGVpZ2h0KSB7Ci0gICAgICAgIG1TdXBlclByb3ZpZGVyLnNldE1lYXN1cmVkRGltZW5zaW9uX2ltcGwobWVhc3VyZWRXaWR0aCwgbWVhc3VyZWRIZWlnaHQpOwotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyBib29sZWFuIGRpc3BhdGNoVG91Y2hFdmVudF9pbXBsKE1vdGlvbkV2ZW50IGV2KSB7Ci0gICAgICAgIHJldHVybiBtU3VwZXJQcm92aWRlci5kaXNwYXRjaFRvdWNoRXZlbnRfaW1wbChldik7Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIGJvb2xlYW4gY2hlY2tMYXlvdXRQYXJhbXNfaW1wbChWaWV3R3JvdXAuTGF5b3V0UGFyYW1zIHApIHsKLSAgICAgICAgcmV0dXJuIG1TdXBlclByb3ZpZGVyLmNoZWNrTGF5b3V0UGFyYW1zX2ltcGwocCk7Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIFZpZXdHcm91cC5MYXlvdXRQYXJhbXMgZ2VuZXJhdGVEZWZhdWx0TGF5b3V0UGFyYW1zX2ltcGwoKSB7Ci0gICAgICAgIHJldHVybiBtU3VwZXJQcm92aWRlci5nZW5lcmF0ZURlZmF1bHRMYXlvdXRQYXJhbXNfaW1wbCgpOwotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyBWaWV3R3JvdXAuTGF5b3V0UGFyYW1zIGdlbmVyYXRlTGF5b3V0UGFyYW1zX2ltcGwoQXR0cmlidXRlU2V0IGF0dHJzKSB7Ci0gICAgICAgIHJldHVybiBtU3VwZXJQcm92aWRlci5nZW5lcmF0ZUxheW91dFBhcmFtc19pbXBsKGF0dHJzKTsKLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgVmlld0dyb3VwLkxheW91dFBhcmFtcyBnZW5lcmF0ZUxheW91dFBhcmFtc19pbXBsKFZpZXdHcm91cC5MYXlvdXRQYXJhbXMgbHApIHsKLSAgICAgICAgcmV0dXJuIG1TdXBlclByb3ZpZGVyLmdlbmVyYXRlTGF5b3V0UGFyYW1zX2ltcGwobHApOwotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyBib29sZWFuIHNob3VsZERlbGF5Q2hpbGRQcmVzc2VkU3RhdGVfaW1wbCgpIHsKLSAgICAgICAgcmV0dXJuIG1TdXBlclByb3ZpZGVyLnNob3VsZERlbGF5Q2hpbGRQcmVzc2VkU3RhdGVfaW1wbCgpOwotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyB2b2lkIG1lYXN1cmVDaGlsZFdpdGhNYXJnaW5zX2ltcGwoVmlldyBjaGlsZCwKLSAgICAgICAgaW50IHBhcmVudFdpZHRoTWVhc3VyZVNwZWMsIGludCB3aWR0aFVzZWQsIGludCBwYXJlbnRIZWlnaHRNZWFzdXJlU3BlYywgaW50IGhlaWdodFVzZWQpIHsKLSAgICAgICAgbVN1cGVyUHJvdmlkZXIubWVhc3VyZUNoaWxkV2l0aE1hcmdpbnNfaW1wbChjaGlsZCwKLSAgICAgICAgICAgICAgICBwYXJlbnRXaWR0aE1lYXN1cmVTcGVjLCB3aWR0aFVzZWQsIHBhcmVudEhlaWdodE1lYXN1cmVTcGVjLCBoZWlnaHRVc2VkKTsKLSAgICB9Ci19CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9NZWRpYUNvbXBvbmVudHMvdGVzdHMvQW5kcm9pZC5tayBiL3BhY2thZ2VzL01lZGlhQ29tcG9uZW50cy90ZXN0cy9BbmRyb2lkLm1rCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkZGRmZDJhLi4wMDAwMDAwCi0tLSBhL3BhY2thZ2VzL01lZGlhQ29tcG9uZW50cy90ZXN0cy9BbmRyb2lkLm1rCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotIyBDb3B5cmlnaHQgMjAxOCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0Ci0jCi0jIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwotIyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCi0jIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotIwotIyAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotIwotIyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCi0jIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCi0jIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgotIyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCi0jIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgotCi1MT0NBTF9QQVRIOj0gJChjYWxsIG15LWRpcikKLWluY2x1ZGUgJChDTEVBUl9WQVJTKQotCi1MT0NBTF9NT0RVTEVfVEFHUyA6PSB0ZXN0cwotCi1MT0NBTF9TVEFUSUNfSkFWQV9MSUJSQVJJRVMgOj0gXAotICAgIGFuZHJvaWQudGVzdC5ydW5uZXIuc3R1YnMgXAotICAgIGFuZHJvaWQudGVzdC5iYXNlLnN0dWJzIFwKLSAgICBtb2NraXRvLXRhcmdldC1taW51cy1qdW5pdDQgXAotICAgIGp1bml0Ci0KLUxPQ0FMX1NSQ19GSUxFUyA6PSAkKGNhbGwgYWxsLWphdmEtZmlsZXMtdW5kZXIsIHNyYykKLQotTE9DQUxfUEFDS0FHRV9OQU1FIDo9IE1lZGlhQ29tcG9uZW50c1Rlc3QKLQotTE9DQUxfSU5TVFJVTUVOVEFUSU9OX0ZPUiA6PSBNZWRpYUNvbXBvbmVudHMKLQotTE9DQUxfUFJJVkFURV9QTEFURk9STV9BUElTIDo9IHRydWUKLQotTE9DQUxfQ0VSVElGSUNBVEUgOj0gcGxhdGZvcm0KLQotaW5jbHVkZSAkKEJVSUxEX1BBQ0tBR0UpCmRpZmYgLS1naXQgYS9wYWNrYWdlcy9NZWRpYUNvbXBvbmVudHMvdGVzdHMvQW5kcm9pZE1hbmlmZXN0LnhtbCBiL3BhY2thZ2VzL01lZGlhQ29tcG9uZW50cy90ZXN0cy9BbmRyb2lkTWFuaWZlc3QueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3MjU1MjY1Li4wMDAwMDAwCi0tLSBhL3BhY2thZ2VzL01lZGlhQ29tcG9uZW50cy90ZXN0cy9BbmRyb2lkTWFuaWZlc3QueG1sCisrKyAvZGV2L251bGwKQEAgLTEsMzMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KLTwhLS0gQ29weXJpZ2h0IDIwMTggVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAotCi0gICAgIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwotICAgICB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCi0gICAgIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotCi0gICAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotCi0gICAgIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKLSAgICAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKLSAgICAgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCi0gICAgIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKLSAgICAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCi0tLT4KLQotPG1hbmlmZXN0IHhtbG5zOmFuZHJvaWQ9Imh0dHA6Ly9zY2hlbWFzLmFuZHJvaWQuY29tL2Fway9yZXMvYW5kcm9pZCIKLSAgICAgICAgICBwYWNrYWdlPSJjb20uYW5kcm9pZC5tZWRpYS50ZXN0cyI+Ci0KLSAgICA8YXBwbGljYXRpb24gYW5kcm9pZDpsYWJlbD0iTWVkaWEgQVBJIFRlc3QiPgotICAgICAgICA8dXNlcy1saWJyYXJ5IGFuZHJvaWQ6bmFtZT0iYW5kcm9pZC50ZXN0LnJ1bm5lciIgLz4KLSAgICA8L2FwcGxpY2F0aW9uPgotCi0gICAgPCEtLQotICAgIFRvIHJ1biB0aGUgdGVzdHMgdXNlIHRoZSBjb21tYW5kOgotICAgICJhZGIgc2hlbGwgYW0gaW5zdHJ1bWVudCAtdyBjb20uYW5kcm9pZC5tZWRpYS50ZXN0cy9hbmRyb2lkLnRlc3QuSW5zdHJ1bWVudGF0aW9uVGVzdFJ1bm5lciIKLSAgICAtLT4KLSAgICA8aW5zdHJ1bWVudGF0aW9uCi0gICAgICAgIGFuZHJvaWQ6bmFtZT0iYW5kcm9pZC50ZXN0Lkluc3RydW1lbnRhdGlvblRlc3RSdW5uZXIiCi0gICAgICAgIGFuZHJvaWQ6dGFyZ2V0UGFja2FnZT0iY29tLmFuZHJvaWQubWVkaWEudXBkYXRlIgotICAgICAgICBhbmRyb2lkOmxhYmVsPSJNZWRpYSBBUEkgdGVzdCIgLz4KLQotPC9tYW5pZmVzdD4KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL01lZGlhQ29tcG9uZW50cy90ZXN0cy9zcmMvY29tL2FuZHJvaWQvbWVkaWEvU2Vzc2lvblBsYXlsaXN0QWdlbnRUZXN0LmphdmEgYi9wYWNrYWdlcy9NZWRpYUNvbXBvbmVudHMvdGVzdHMvc3JjL2NvbS9hbmRyb2lkL21lZGlhL1Nlc3Npb25QbGF5bGlzdEFnZW50VGVzdC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiZWIwODQ4Li4wMDAwMDAwCi0tLSBhL3BhY2thZ2VzL01lZGlhQ29tcG9uZW50cy90ZXN0cy9zcmMvY29tL2FuZHJvaWQvbWVkaWEvU2Vzc2lvblBsYXlsaXN0QWdlbnRUZXN0LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw2NDIgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAyMDE4IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKLSAqCi0gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKLSAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KLSAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotICoKLSAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0gKgotICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQotICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKLSAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgotICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAotICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCi0gKi8KLQotcGFja2FnZSBjb20uYW5kcm9pZC5tZWRpYTsKLQotaW1wb3J0IHN0YXRpYyBvcmcubW9ja2l0by5Nb2NraXRvLio7Ci0KLWltcG9ydCBhbmRyb2lkLmNvbnRlbnQuQ29udGV4dDsKLWltcG9ydCBhbmRyb2lkLm1lZGlhLkF1ZGlvQXR0cmlidXRlczsKLWltcG9ydCBhbmRyb2lkLm1lZGlhLkRhdGFTb3VyY2VEZXNjOwotaW1wb3J0IGFuZHJvaWQubWVkaWEuTWVkaWFJdGVtMjsKLWltcG9ydCBhbmRyb2lkLm1lZGlhLk1lZGlhTWV0YWRhdGEyOwotaW1wb3J0IGFuZHJvaWQubWVkaWEuTWVkaWFQbGF5ZXJCYXNlOwotaW1wb3J0IGFuZHJvaWQubWVkaWEuTWVkaWFQbGF5ZXJCYXNlLlBsYXllckV2ZW50Q2FsbGJhY2s7Ci1pbXBvcnQgYW5kcm9pZC5tZWRpYS5NZWRpYVBsYXlsaXN0QWdlbnQ7Ci1pbXBvcnQgYW5kcm9pZC5tZWRpYS5NZWRpYVNlc3Npb24yOwotaW1wb3J0IGFuZHJvaWQubWVkaWEuTWVkaWFTZXNzaW9uMi5PbkRhdGFTb3VyY2VNaXNzaW5nSGVscGVyOwotaW1wb3J0IGFuZHJvaWQubmV0LlVyaTsKLWltcG9ydCBhbmRyb2lkLm9zLkhhbmRsZXI7Ci1pbXBvcnQgYW5kcm9pZC5vcy5IYW5kbGVyVGhyZWFkOwotaW1wb3J0IGFuZHJvaWQudGVzdC5BbmRyb2lkVGVzdENhc2U7Ci0KLWltcG9ydCBvcmcuanVuaXQuQWZ0ZXI7Ci1pbXBvcnQgb3JnLmp1bml0LkJlZm9yZTsKLWltcG9ydCBvcmcuanVuaXQuVGVzdDsKLWltcG9ydCBvcmcubW9ja2l0by5NYXRjaGVyczsKLQotaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLmNvbmN1cnJlbnQuRXhlY3V0b3I7Ci0KLS8qKgotICogVGVzdHMge0BsaW5rIFNlc3Npb25QbGF5bGlzdEFnZW50fS4KLSAqLwotcHVibGljIGNsYXNzIFNlc3Npb25QbGF5bGlzdEFnZW50VGVzdCBleHRlbmRzIEFuZHJvaWRUZXN0Q2FzZSB7Ci0gICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFRBRyA9ICJTZXNzaW9uUGxheWxpc3RBZ2VudFRlc3QiOwotICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGludCBXQUlUX1RJTUVfTVMgPSAxMDAwOwotICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGludCBJTlZBTElEX1JFUEVBVF9NT0RFID0gLTEwMDsKLSAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgSU5WQUxJRF9TSFVGRkxFX01PREUgPSAtMTAwOwotCi0gICAgcHJpdmF0ZSBIYW5kbGVyIG1IYW5kbGVyOwotICAgIHByaXZhdGUgRXhlY3V0b3IgbUhhbmRsZXJFeGVjdXRvcjsKLQotICAgIHByaXZhdGUgT2JqZWN0IG1XYWl0TG9jayA9IG5ldyBPYmplY3QoKTsKLSAgICBwcml2YXRlIENvbnRleHQgbUNvbnRleHQ7Ci0gICAgcHJpdmF0ZSBNZWRpYVNlc3Npb24ySW1wbCBtU2Vzc2lvbkltcGw7Ci0gICAgcHJpdmF0ZSBNZWRpYVBsYXllckJhc2UgbVBsYXllcjsKLSAgICBwcml2YXRlIFBsYXllckV2ZW50Q2FsbGJhY2sgbVBsYXllckV2ZW50Q2FsbGJhY2s7Ci0gICAgcHJpdmF0ZSBTZXNzaW9uUGxheWxpc3RBZ2VudCBtQWdlbnQ7Ci0gICAgcHJpdmF0ZSBPbkRhdGFTb3VyY2VNaXNzaW5nSGVscGVyIG1EYXRhU291cmNlSGVscGVyOwotICAgIHByaXZhdGUgTXlQbGF5bGlzdEV2ZW50Q2FsbGJhY2sgbUV2ZW50Q2FsbGJhY2s7Ci0KLSAgICBwdWJsaWMgY2xhc3MgTXlQbGF5bGlzdEV2ZW50Q2FsbGJhY2sgZXh0ZW5kcyBNZWRpYVBsYXlsaXN0QWdlbnQuUGxheWxpc3RFdmVudENhbGxiYWNrIHsKLSAgICAgICAgYm9vbGVhbiBvblBsYXlsaXN0Q2hhbmdlZENhbGxlZDsKLSAgICAgICAgYm9vbGVhbiBvblBsYXlsaXN0TWV0YWRhdGFDaGFuZ2VkQ2FsbGVkOwotICAgICAgICBib29sZWFuIG9uUmVwZWF0TW9kZUNoYW5nZWRDYWxsZWQ7Ci0gICAgICAgIGJvb2xlYW4gb25TaHVmZmxlTW9kZUNoYW5nZWRDYWxsZWQ7Ci0KLSAgICAgICAgcHJpdmF0ZSBPYmplY3QgbVdhaXRMb2NrOwotCi0gICAgICAgIHB1YmxpYyBNeVBsYXlsaXN0RXZlbnRDYWxsYmFjayhPYmplY3Qgd2FpdExvY2spIHsKLSAgICAgICAgICAgIG1XYWl0TG9jayA9IHdhaXRMb2NrOwotICAgICAgICB9Ci0KLSAgICAgICAgcHVibGljIHZvaWQgY2xlYXIoKSB7Ci0gICAgICAgICAgICBvblBsYXlsaXN0Q2hhbmdlZENhbGxlZCA9IGZhbHNlOwotICAgICAgICAgICAgb25QbGF5bGlzdE1ldGFkYXRhQ2hhbmdlZENhbGxlZCA9IGZhbHNlOwotICAgICAgICAgICAgb25SZXBlYXRNb2RlQ2hhbmdlZENhbGxlZCA9IGZhbHNlOwotICAgICAgICAgICAgb25TaHVmZmxlTW9kZUNoYW5nZWRDYWxsZWQgPSBmYWxzZTsKLSAgICAgICAgfQotCi0gICAgICAgIHB1YmxpYyB2b2lkIG9uUGxheWxpc3RDaGFuZ2VkKE1lZGlhUGxheWxpc3RBZ2VudCBwbGF5bGlzdEFnZW50LCBMaXN0PE1lZGlhSXRlbTI+IGxpc3QsCi0gICAgICAgICAgICAgICAgTWVkaWFNZXRhZGF0YTIgbWV0YWRhdGEpIHsKLSAgICAgICAgICAgIHN5bmNocm9uaXplZCAobVdhaXRMb2NrKSB7Ci0gICAgICAgICAgICAgICAgb25QbGF5bGlzdENoYW5nZWRDYWxsZWQgPSB0cnVlOwotICAgICAgICAgICAgICAgIG1XYWl0TG9jay5ub3RpZnkoKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIHB1YmxpYyB2b2lkIG9uUGxheWxpc3RNZXRhZGF0YUNoYW5nZWQoTWVkaWFQbGF5bGlzdEFnZW50IHBsYXlsaXN0QWdlbnQsCi0gICAgICAgICAgICAgICAgTWVkaWFNZXRhZGF0YTIgbWV0YWRhdGEpIHsKLSAgICAgICAgICAgIHN5bmNocm9uaXplZCAobVdhaXRMb2NrKSB7Ci0gICAgICAgICAgICAgICAgb25QbGF5bGlzdE1ldGFkYXRhQ2hhbmdlZENhbGxlZCA9IHRydWU7Ci0gICAgICAgICAgICAgICAgbVdhaXRMb2NrLm5vdGlmeSgpOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgcHVibGljIHZvaWQgb25SZXBlYXRNb2RlQ2hhbmdlZChNZWRpYVBsYXlsaXN0QWdlbnQgcGxheWxpc3RBZ2VudCwgaW50IHJlcGVhdE1vZGUpIHsKLSAgICAgICAgICAgIHN5bmNocm9uaXplZCAobVdhaXRMb2NrKSB7Ci0gICAgICAgICAgICAgICAgb25SZXBlYXRNb2RlQ2hhbmdlZENhbGxlZCA9IHRydWU7Ci0gICAgICAgICAgICAgICAgbVdhaXRMb2NrLm5vdGlmeSgpOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgcHVibGljIHZvaWQgb25TaHVmZmxlTW9kZUNoYW5nZWQoTWVkaWFQbGF5bGlzdEFnZW50IHBsYXlsaXN0QWdlbnQsIGludCBzaHVmZmxlTW9kZSkgewotICAgICAgICAgICAgc3luY2hyb25pemVkIChtV2FpdExvY2spIHsKLSAgICAgICAgICAgICAgICBvblNodWZmbGVNb2RlQ2hhbmdlZENhbGxlZCA9IHRydWU7Ci0gICAgICAgICAgICAgICAgbVdhaXRMb2NrLm5vdGlmeSgpOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotCi0gICAgcHVibGljIGNsYXNzIE15RGF0YVNvdXJjZUhlbHBlciBpbXBsZW1lbnRzIE9uRGF0YVNvdXJjZU1pc3NpbmdIZWxwZXIgewotICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgcHVibGljIERhdGFTb3VyY2VEZXNjIG9uRGF0YVNvdXJjZU1pc3NpbmcoTWVkaWFTZXNzaW9uMiBzZXNzaW9uLCBNZWRpYUl0ZW0yIGl0ZW0pIHsKLSAgICAgICAgICAgIGlmIChpdGVtLmdldE1lZGlhSWQoKS5jb250YWlucygiV0lUSE9VVF9EU0QiKSkgewotICAgICAgICAgICAgICAgIHJldHVybiBudWxsOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgcmV0dXJuIG5ldyBEYXRhU291cmNlRGVzYy5CdWlsZGVyKCkKLSAgICAgICAgICAgICAgICAgICAgLnNldERhdGFTb3VyY2UoZ2V0Q29udGV4dCgpLCBVcmkucGFyc2UoImRzZDovL3Rlc3QiKSkKLSAgICAgICAgICAgICAgICAgICAgLnNldE1lZGlhSWQoaXRlbS5nZXRNZWRpYUlkKCkpCi0gICAgICAgICAgICAgICAgICAgIC5idWlsZCgpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgcHVibGljIGNsYXNzIE1vY2tQbGF5ZXIgZXh0ZW5kcyBNZWRpYVBsYXllckJhc2UgewotICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgcHVibGljIHZvaWQgcGxheSgpIHsKLSAgICAgICAgfQotCi0gICAgICAgIEBPdmVycmlkZQotICAgICAgICBwdWJsaWMgdm9pZCBwcmVwYXJlKCkgewotICAgICAgICB9Ci0KLSAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgIHB1YmxpYyB2b2lkIHBhdXNlKCkgewotICAgICAgICB9Ci0KLSAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgIHB1YmxpYyB2b2lkIHJlc2V0KCkgewotICAgICAgICB9Ci0KLSAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgIHB1YmxpYyB2b2lkIHNraXBUb05leHQoKSB7Ci0gICAgICAgIH0KLQotICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgcHVibGljIHZvaWQgc2Vla1RvKGxvbmcgcG9zKSB7Ci0gICAgICAgIH0KLQotICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgcHVibGljIGludCBnZXRQbGF5ZXJTdGF0ZSgpIHsKLSAgICAgICAgICAgIHJldHVybiAwOwotICAgICAgICB9Ci0KLSAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgIHB1YmxpYyBpbnQgZ2V0QnVmZmVyaW5nU3RhdGUoKSB7Ci0gICAgICAgICAgICByZXR1cm4gMDsKLSAgICAgICAgfQotCi0gICAgICAgIEBPdmVycmlkZQotICAgICAgICBwdWJsaWMgdm9pZCBzZXRBdWRpb0F0dHJpYnV0ZXMoQXVkaW9BdHRyaWJ1dGVzIGF0dHJpYnV0ZXMpIHsKLSAgICAgICAgfQotCi0gICAgICAgIEBPdmVycmlkZQotICAgICAgICBwdWJsaWMgQXVkaW9BdHRyaWJ1dGVzIGdldEF1ZGlvQXR0cmlidXRlcygpIHsKLSAgICAgICAgICAgIHJldHVybiBudWxsOwotICAgICAgICB9Ci0KLSAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgIHB1YmxpYyB2b2lkIHNldERhdGFTb3VyY2UoRGF0YVNvdXJjZURlc2MgZHNkKSB7Ci0gICAgICAgIH0KLQotICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgcHVibGljIHZvaWQgc2V0TmV4dERhdGFTb3VyY2UoRGF0YVNvdXJjZURlc2MgZHNkKSB7Ci0gICAgICAgIH0KLQotICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgcHVibGljIHZvaWQgc2V0TmV4dERhdGFTb3VyY2VzKExpc3Q8RGF0YVNvdXJjZURlc2M+IGRzZHMpIHsKLSAgICAgICAgfQotCi0gICAgICAgIEBPdmVycmlkZQotICAgICAgICBwdWJsaWMgRGF0YVNvdXJjZURlc2MgZ2V0Q3VycmVudERhdGFTb3VyY2UoKSB7Ci0gICAgICAgICAgICByZXR1cm4gbnVsbDsKLSAgICAgICAgfQotCi0gICAgICAgIEBPdmVycmlkZQotICAgICAgICBwdWJsaWMgdm9pZCBsb29wQ3VycmVudChib29sZWFuIGxvb3ApIHsKLSAgICAgICAgfQotCi0gICAgICAgIEBPdmVycmlkZQotICAgICAgICBwdWJsaWMgdm9pZCBzZXRQbGF5YmFja1NwZWVkKGZsb2F0IHNwZWVkKSB7Ci0gICAgICAgIH0KLQotICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgcHVibGljIHZvaWQgc2V0UGxheWVyVm9sdW1lKGZsb2F0IHZvbHVtZSkgewotICAgICAgICB9Ci0KLSAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgIHB1YmxpYyBmbG9hdCBnZXRQbGF5ZXJWb2x1bWUoKSB7Ci0gICAgICAgICAgICByZXR1cm4gMDsKLSAgICAgICAgfQotCi0gICAgICAgIEBPdmVycmlkZQotICAgICAgICBwdWJsaWMgdm9pZCByZWdpc3RlclBsYXllckV2ZW50Q2FsbGJhY2soRXhlY3V0b3IgZSwgUGxheWVyRXZlbnRDYWxsYmFjayBjYikgewotICAgICAgICB9Ci0KLSAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgIHB1YmxpYyB2b2lkIHVucmVnaXN0ZXJQbGF5ZXJFdmVudENhbGxiYWNrKFBsYXllckV2ZW50Q2FsbGJhY2sgY2IpIHsKLSAgICAgICAgfQotCi0gICAgICAgIEBPdmVycmlkZQotICAgICAgICBwdWJsaWMgdm9pZCBjbG9zZSgpIHRocm93cyBFeGNlcHRpb24gewotICAgICAgICB9Ci0gICAgfQotCi0gICAgQEJlZm9yZQotICAgIHB1YmxpYyB2b2lkIHNldFVwKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0gICAgICAgIG1Db250ZXh0ID0gZ2V0Q29udGV4dCgpOwotICAgICAgICAvLyBXb3JrYXJvdW5kIGZvciBkZXhtYWtlciBidWc6IGh0dHBzOi8vY29kZS5nb29nbGUuY29tL3AvZGV4bWFrZXIvaXNzdWVzL2RldGFpbD9pZD0yCi0gICAgICAgIC8vIERleG1ha2VyIGlzIHVzZWQgYnkgbW9ja2l0by4KLSAgICAgICAgU3lzdGVtLnNldFByb3BlcnR5KCJkZXhtYWtlci5kZXhjYWNoZSIsIG1Db250ZXh0LmdldENhY2hlRGlyKCkuZ2V0UGF0aCgpKTsKLQotICAgICAgICBIYW5kbGVyVGhyZWFkIGhhbmRsZXJUaHJlYWQgPSBuZXcgSGFuZGxlclRocmVhZCgiU2Vzc2lvblBsYXlsaXN0QWdlbnQiKTsKLSAgICAgICAgaGFuZGxlclRocmVhZC5zdGFydCgpOwotICAgICAgICBtSGFuZGxlciA9IG5ldyBIYW5kbGVyKGhhbmRsZXJUaHJlYWQuZ2V0TG9vcGVyKCkpOwotICAgICAgICBtSGFuZGxlckV4ZWN1dG9yID0gKHJ1bm5hYmxlKSAtPiB7Ci0gICAgICAgICAgICBtSGFuZGxlci5wb3N0KHJ1bm5hYmxlKTsKLSAgICAgICAgfTsKLQotICAgICAgICBtUGxheWVyID0gbW9jayhNb2NrUGxheWVyLmNsYXNzKTsKLSAgICAgICAgZG9BbnN3ZXIoaW52b2NhdGlvbiAtPiB7Ci0gICAgICAgICAgICBPYmplY3RbXSBhcmdzID0gaW52b2NhdGlvbi5nZXRBcmd1bWVudHMoKTsKLSAgICAgICAgICAgIG1QbGF5ZXJFdmVudENhbGxiYWNrID0gKFBsYXllckV2ZW50Q2FsbGJhY2spIGFyZ3NbMV07Ci0gICAgICAgICAgICByZXR1cm4gbnVsbDsKLSAgICAgICAgfSkud2hlbihtUGxheWVyKS5yZWdpc3RlclBsYXllckV2ZW50Q2FsbGJhY2soTWF0Y2hlcnMuYW55KCksIE1hdGNoZXJzLmFueSgpKTsKLQotICAgICAgICBtU2Vzc2lvbkltcGwgPSBtb2NrKE1lZGlhU2Vzc2lvbjJJbXBsLmNsYXNzKTsKLSAgICAgICAgbURhdGFTb3VyY2VIZWxwZXIgPSBuZXcgTXlEYXRhU291cmNlSGVscGVyKCk7Ci0gICAgICAgIG1BZ2VudCA9IG5ldyBTZXNzaW9uUGxheWxpc3RBZ2VudChtU2Vzc2lvbkltcGwsIG1QbGF5ZXIpOwotICAgICAgICBtQWdlbnQuc2V0T25EYXRhU291cmNlTWlzc2luZ0hlbHBlcihtRGF0YVNvdXJjZUhlbHBlcik7Ci0gICAgICAgIG1FdmVudENhbGxiYWNrID0gbmV3IE15UGxheWxpc3RFdmVudENhbGxiYWNrKG1XYWl0TG9jayk7Ci0gICAgICAgIG1BZ2VudC5yZWdpc3RlclBsYXlsaXN0RXZlbnRDYWxsYmFjayhtSGFuZGxlckV4ZWN1dG9yLCBtRXZlbnRDYWxsYmFjayk7Ci0gICAgfQotCi0gICAgQEFmdGVyCi0gICAgcHVibGljIHZvaWQgdGVhckRvd24oKSB0aHJvd3MgRXhjZXB0aW9uIHsKLSAgICAgICAgbUhhbmRsZXIuZ2V0TG9vcGVyKCkucXVpdFNhZmVseSgpOwotICAgICAgICBtSGFuZGxlciA9IG51bGw7Ci0gICAgICAgIG1IYW5kbGVyRXhlY3V0b3IgPSBudWxsOwotICAgIH0KLQotICAgIEBUZXN0Ci0gICAgcHVibGljIHZvaWQgdGVzdFNldEFuZEdldFNodWZsbGVNb2RlKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0gICAgICAgIGludCBzaHVmZmxlTW9kZSA9IG1BZ2VudC5nZXRTaHVmZmxlTW9kZSgpOwotICAgICAgICBpZiAoc2h1ZmZsZU1vZGUgIT0gTWVkaWFQbGF5bGlzdEFnZW50LlNIVUZGTEVfTU9ERV9OT05FKSB7Ci0gICAgICAgICAgICBtRXZlbnRDYWxsYmFjay5jbGVhcigpOwotICAgICAgICAgICAgc3luY2hyb25pemVkIChtV2FpdExvY2spIHsKLSAgICAgICAgICAgICAgICBtQWdlbnQuc2V0U2h1ZmZsZU1vZGUoTWVkaWFQbGF5bGlzdEFnZW50LlNIVUZGTEVfTU9ERV9OT05FKTsKLSAgICAgICAgICAgICAgICBtV2FpdExvY2sud2FpdChXQUlUX1RJTUVfTVMpOwotICAgICAgICAgICAgICAgIGFzc2VydFRydWUobUV2ZW50Q2FsbGJhY2sub25TaHVmZmxlTW9kZUNoYW5nZWRDYWxsZWQpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgYXNzZXJ0RXF1YWxzKE1lZGlhUGxheWxpc3RBZ2VudC5TSFVGRkxFX01PREVfTk9ORSwgbUFnZW50LmdldFNodWZmbGVNb2RlKCkpOwotICAgICAgICB9Ci0KLSAgICAgICAgbUV2ZW50Q2FsbGJhY2suY2xlYXIoKTsKLSAgICAgICAgc3luY2hyb25pemVkIChtV2FpdExvY2spIHsKLSAgICAgICAgICAgIG1BZ2VudC5zZXRTaHVmZmxlTW9kZShNZWRpYVBsYXlsaXN0QWdlbnQuU0hVRkZMRV9NT0RFX0FMTCk7Ci0gICAgICAgICAgICBtV2FpdExvY2sud2FpdChXQUlUX1RJTUVfTVMpOwotICAgICAgICAgICAgYXNzZXJ0VHJ1ZShtRXZlbnRDYWxsYmFjay5vblNodWZmbGVNb2RlQ2hhbmdlZENhbGxlZCk7Ci0gICAgICAgIH0KLSAgICAgICAgYXNzZXJ0RXF1YWxzKE1lZGlhUGxheWxpc3RBZ2VudC5TSFVGRkxFX01PREVfQUxMLCBtQWdlbnQuZ2V0U2h1ZmZsZU1vZGUoKSk7Ci0KLSAgICAgICAgbUV2ZW50Q2FsbGJhY2suY2xlYXIoKTsKLSAgICAgICAgc3luY2hyb25pemVkIChtV2FpdExvY2spIHsKLSAgICAgICAgICAgIG1BZ2VudC5zZXRTaHVmZmxlTW9kZShNZWRpYVBsYXlsaXN0QWdlbnQuU0hVRkZMRV9NT0RFX0dST1VQKTsKLSAgICAgICAgICAgIG1XYWl0TG9jay53YWl0KFdBSVRfVElNRV9NUyk7Ci0gICAgICAgICAgICBhc3NlcnRUcnVlKG1FdmVudENhbGxiYWNrLm9uU2h1ZmZsZU1vZGVDaGFuZ2VkQ2FsbGVkKTsKLSAgICAgICAgfQotICAgICAgICBhc3NlcnRFcXVhbHMoTWVkaWFQbGF5bGlzdEFnZW50LlNIVUZGTEVfTU9ERV9HUk9VUCwgbUFnZW50LmdldFNodWZmbGVNb2RlKCkpOwotCi0gICAgICAgIC8vIElOVkFMSURfU0hVRkZMRV9NT0RFIHdpbGwgbm90IGNoYW5nZSB0aGUgc2h1ZmZsZSBtb2RlLgotICAgICAgICBtRXZlbnRDYWxsYmFjay5jbGVhcigpOwotICAgICAgICBzeW5jaHJvbml6ZWQgKG1XYWl0TG9jaykgewotICAgICAgICAgICAgbUFnZW50LnNldFNodWZmbGVNb2RlKElOVkFMSURfU0hVRkZMRV9NT0RFKTsKLSAgICAgICAgICAgIG1XYWl0TG9jay53YWl0KFdBSVRfVElNRV9NUyk7Ci0gICAgICAgICAgICBhc3NlcnRGYWxzZShtRXZlbnRDYWxsYmFjay5vblNodWZmbGVNb2RlQ2hhbmdlZENhbGxlZCk7Ci0gICAgICAgIH0KLSAgICAgICAgYXNzZXJ0RXF1YWxzKE1lZGlhUGxheWxpc3RBZ2VudC5TSFVGRkxFX01PREVfR1JPVVAsIG1BZ2VudC5nZXRTaHVmZmxlTW9kZSgpKTsKLSAgICB9Ci0KLSAgICBAVGVzdAotICAgIHB1YmxpYyB2b2lkIHRlc3RTZXRBbmRHZXRSZXBlYXRNb2RlKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0gICAgICAgIGludCByZXBlYXRNb2RlID0gbUFnZW50LmdldFJlcGVhdE1vZGUoKTsKLSAgICAgICAgaWYgKHJlcGVhdE1vZGUgIT0gTWVkaWFQbGF5bGlzdEFnZW50LlJFUEVBVF9NT0RFX05PTkUpIHsKLSAgICAgICAgICAgIG1FdmVudENhbGxiYWNrLmNsZWFyKCk7Ci0gICAgICAgICAgICBzeW5jaHJvbml6ZWQgKG1XYWl0TG9jaykgewotICAgICAgICAgICAgICAgIG1BZ2VudC5zZXRSZXBlYXRNb2RlKE1lZGlhUGxheWxpc3RBZ2VudC5SRVBFQVRfTU9ERV9OT05FKTsKLSAgICAgICAgICAgICAgICBtV2FpdExvY2sud2FpdChXQUlUX1RJTUVfTVMpOwotICAgICAgICAgICAgICAgIGFzc2VydFRydWUobUV2ZW50Q2FsbGJhY2sub25SZXBlYXRNb2RlQ2hhbmdlZENhbGxlZCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBhc3NlcnRFcXVhbHMoTWVkaWFQbGF5bGlzdEFnZW50LlJFUEVBVF9NT0RFX05PTkUsIG1BZ2VudC5nZXRSZXBlYXRNb2RlKCkpOwotICAgICAgICB9Ci0KLSAgICAgICAgbUV2ZW50Q2FsbGJhY2suY2xlYXIoKTsKLSAgICAgICAgc3luY2hyb25pemVkIChtV2FpdExvY2spIHsKLSAgICAgICAgICAgIG1BZ2VudC5zZXRSZXBlYXRNb2RlKE1lZGlhUGxheWxpc3RBZ2VudC5SRVBFQVRfTU9ERV9PTkUpOwotICAgICAgICAgICAgbVdhaXRMb2NrLndhaXQoV0FJVF9USU1FX01TKTsKLSAgICAgICAgICAgIGFzc2VydFRydWUobUV2ZW50Q2FsbGJhY2sub25SZXBlYXRNb2RlQ2hhbmdlZENhbGxlZCk7Ci0gICAgICAgIH0KLSAgICAgICAgYXNzZXJ0RXF1YWxzKE1lZGlhUGxheWxpc3RBZ2VudC5SRVBFQVRfTU9ERV9PTkUsIG1BZ2VudC5nZXRSZXBlYXRNb2RlKCkpOwotCi0gICAgICAgIG1FdmVudENhbGxiYWNrLmNsZWFyKCk7Ci0gICAgICAgIHN5bmNocm9uaXplZCAobVdhaXRMb2NrKSB7Ci0gICAgICAgICAgICBtQWdlbnQuc2V0UmVwZWF0TW9kZShNZWRpYVBsYXlsaXN0QWdlbnQuUkVQRUFUX01PREVfQUxMKTsKLSAgICAgICAgICAgIG1XYWl0TG9jay53YWl0KFdBSVRfVElNRV9NUyk7Ci0gICAgICAgICAgICBhc3NlcnRUcnVlKG1FdmVudENhbGxiYWNrLm9uUmVwZWF0TW9kZUNoYW5nZWRDYWxsZWQpOwotICAgICAgICB9Ci0gICAgICAgIGFzc2VydEVxdWFscyhNZWRpYVBsYXlsaXN0QWdlbnQuUkVQRUFUX01PREVfQUxMLCBtQWdlbnQuZ2V0UmVwZWF0TW9kZSgpKTsKLQotICAgICAgICBtRXZlbnRDYWxsYmFjay5jbGVhcigpOwotICAgICAgICBzeW5jaHJvbml6ZWQgKG1XYWl0TG9jaykgewotICAgICAgICAgICAgbUFnZW50LnNldFJlcGVhdE1vZGUoTWVkaWFQbGF5bGlzdEFnZW50LlJFUEVBVF9NT0RFX0dST1VQKTsKLSAgICAgICAgICAgIG1XYWl0TG9jay53YWl0KFdBSVRfVElNRV9NUyk7Ci0gICAgICAgICAgICBhc3NlcnRUcnVlKG1FdmVudENhbGxiYWNrLm9uUmVwZWF0TW9kZUNoYW5nZWRDYWxsZWQpOwotICAgICAgICB9Ci0gICAgICAgIGFzc2VydEVxdWFscyhNZWRpYVBsYXlsaXN0QWdlbnQuUkVQRUFUX01PREVfR1JPVVAsIG1BZ2VudC5nZXRSZXBlYXRNb2RlKCkpOwotCi0gICAgICAgIC8vIElOVkFMSURfU0hVRkZMRV9NT0RFIHdpbGwgbm90IGNoYW5nZSB0aGUgc2h1ZmZsZSBtb2RlLgotICAgICAgICBtRXZlbnRDYWxsYmFjay5jbGVhcigpOwotICAgICAgICBzeW5jaHJvbml6ZWQgKG1XYWl0TG9jaykgewotICAgICAgICAgICAgbUFnZW50LnNldFJlcGVhdE1vZGUoSU5WQUxJRF9SRVBFQVRfTU9ERSk7Ci0gICAgICAgICAgICBtV2FpdExvY2sud2FpdChXQUlUX1RJTUVfTVMpOwotICAgICAgICAgICAgYXNzZXJ0RmFsc2UobUV2ZW50Q2FsbGJhY2sub25SZXBlYXRNb2RlQ2hhbmdlZENhbGxlZCk7Ci0gICAgICAgIH0KLSAgICAgICAgYXNzZXJ0RXF1YWxzKE1lZGlhUGxheWxpc3RBZ2VudC5SRVBFQVRfTU9ERV9HUk9VUCwgbUFnZW50LmdldFJlcGVhdE1vZGUoKSk7Ci0gICAgfQotCi0gICAgQFRlc3QKLSAgICBwdWJsaWMgdm9pZCB0ZXN0U2V0UGxheWxpc3QoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLSAgICAgICAgaW50IGxpc3RTaXplID0gMTA7Ci0gICAgICAgIGNyZWF0ZUFuZFNldFBsYXlsaXN0KDEwKTsKLSAgICAgICAgYXNzZXJ0RXF1YWxzKGxpc3RTaXplLCBtQWdlbnQuZ2V0UGxheWxpc3QoKS5zaXplKCkpOwotICAgICAgICBhc3NlcnRFcXVhbHMoMCwgbUFnZW50LmdldEN1clNodWZmbGVkSW5kZXgoKSk7Ci0gICAgfQotCi0gICAgQFRlc3QKLSAgICBwdWJsaWMgdm9pZCB0ZXN0U2tpcEl0ZW1zKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0gICAgICAgIGludCBsaXN0U2l6ZSA9IDU7Ci0gICAgICAgIExpc3Q8TWVkaWFJdGVtMj4gcGxheWxpc3QgPSBjcmVhdGVBbmRTZXRQbGF5bGlzdChsaXN0U2l6ZSk7Ci0KLSAgICAgICAgbUFnZW50LnNldFJlcGVhdE1vZGUoTWVkaWFQbGF5bGlzdEFnZW50LlJFUEVBVF9NT0RFX05PTkUpOwotICAgICAgICAvLyBUZXN0IHNraXBUb1BsYXlsaXN0SXRlbQotICAgICAgICBmb3IgKGludCBpID0gbGlzdFNpemUgLSAxOyBpID49IDA7IC0taSkgewotICAgICAgICAgICAgbUFnZW50LnNraXBUb1BsYXlsaXN0SXRlbShwbGF5bGlzdC5nZXQoaSkpOwotICAgICAgICAgICAgYXNzZXJ0RXF1YWxzKGksIG1BZ2VudC5nZXRDdXJTaHVmZmxlZEluZGV4KCkpOwotICAgICAgICB9Ci0KLSAgICAgICAgLy8gVGVzdCBza2lwVG9OZXh0SXRlbQotICAgICAgICAvLyBjdXJQbGF5UG9zID0gMAotICAgICAgICBmb3IgKGludCBjdXJQbGF5UG9zID0gMDsgY3VyUGxheVBvcyA8IGxpc3RTaXplIC0gMTsgKytjdXJQbGF5UG9zKSB7Ci0gICAgICAgICAgICBtQWdlbnQuc2tpcFRvTmV4dEl0ZW0oKTsKLSAgICAgICAgICAgIGFzc2VydEVxdWFscyhjdXJQbGF5UG9zICsgMSwgbUFnZW50LmdldEN1clNodWZmbGVkSW5kZXgoKSk7Ci0gICAgICAgIH0KLSAgICAgICAgbUFnZW50LnNraXBUb05leHRJdGVtKCk7Ci0gICAgICAgIGFzc2VydEVxdWFscyhsaXN0U2l6ZSAtIDEsIG1BZ2VudC5nZXRDdXJTaHVmZmxlZEluZGV4KCkpOwotCi0gICAgICAgIC8vIFRlc3Qgc2tpcFRvUHJldmlvdXMKLSAgICAgICAgLy8gY3VyUGxheVBvcyA9IGxpc3RTaXplIC0gMQotICAgICAgICBmb3IgKGludCBjdXJQbGF5UG9zID0gbGlzdFNpemUgLSAxOyBjdXJQbGF5UG9zID4gMDsgLS1jdXJQbGF5UG9zKSB7Ci0gICAgICAgICAgICBtQWdlbnQuc2tpcFRvUHJldmlvdXNJdGVtKCk7Ci0gICAgICAgICAgICBhc3NlcnRFcXVhbHMoY3VyUGxheVBvcyAtIDEsIG1BZ2VudC5nZXRDdXJTaHVmZmxlZEluZGV4KCkpOwotICAgICAgICB9Ci0gICAgICAgIG1BZ2VudC5za2lwVG9QcmV2aW91c0l0ZW0oKTsKLSAgICAgICAgYXNzZXJ0RXF1YWxzKDAsIG1BZ2VudC5nZXRDdXJTaHVmZmxlZEluZGV4KCkpOwotCi0gICAgICAgIG1BZ2VudC5zZXRSZXBlYXRNb2RlKE1lZGlhUGxheWxpc3RBZ2VudC5SRVBFQVRfTU9ERV9BTEwpOwotICAgICAgICAvLyBUZXN0IHNraXBUb1ByZXZpb3VzIHdpdGggcmVwZWF0IG1vZGUgYWxsCi0gICAgICAgIC8vIGN1clBsYXlQb3MgPSAwCi0gICAgICAgIG1BZ2VudC5za2lwVG9QcmV2aW91c0l0ZW0oKTsKLSAgICAgICAgYXNzZXJ0RXF1YWxzKGxpc3RTaXplIC0gMSwgbUFnZW50LmdldEN1clNodWZmbGVkSW5kZXgoKSk7Ci0KLSAgICAgICAgLy8gVGVzdCBza2lwVG9OZXh0IHdpdGggcmVwZWF0IG1vZGUgYWxsCi0gICAgICAgIC8vIGN1clBsYXlQb3MgPSBsaXN0U2l6ZSAtIDEKLSAgICAgICAgbUFnZW50LnNraXBUb05leHRJdGVtKCk7Ci0gICAgICAgIGFzc2VydEVxdWFscygwLCBtQWdlbnQuZ2V0Q3VyU2h1ZmZsZWRJbmRleCgpKTsKLQotICAgICAgICBtQWdlbnQuc2tpcFRvUHJldmlvdXNJdGVtKCk7Ci0gICAgICAgIC8vIGN1clBsYXlQb3MgPSBsaXN0U2l6ZSAtIDEsIG5leHRQbGF5UG9zID0gMAotICAgICAgICAvLyBUZXN0IG5leHQgcGxheSBwb3MgYWZ0ZXIgc2V0dGluZyByZXBlYXQgbW9kZSBub25lLgotICAgICAgICBtQWdlbnQuc2V0UmVwZWF0TW9kZShNZWRpYVBsYXlsaXN0QWdlbnQuUkVQRUFUX01PREVfTk9ORSk7Ci0gICAgICAgIGFzc2VydEVxdWFscyhsaXN0U2l6ZSAtIDEsIG1BZ2VudC5nZXRDdXJTaHVmZmxlZEluZGV4KCkpOwotICAgIH0KLQotICAgIEBUZXN0Ci0gICAgcHVibGljIHZvaWQgdGVzdEVkaXRQbGF5bGlzdCgpIHRocm93cyBFeGNlcHRpb24gewotICAgICAgICBpbnQgbGlzdFNpemUgPSA1OwotICAgICAgICBMaXN0PE1lZGlhSXRlbTI+IHBsYXlsaXN0ID0gY3JlYXRlQW5kU2V0UGxheWxpc3QobGlzdFNpemUpOwotCi0gICAgICAgIC8vIFRlc3QgYWRkIGl0ZW06IFswIChjdXIpLCAxLCAyLCAzLCA0XSAtPiBbMCAoY3VyKSwgMSwgNSwgMiwgMywgNF0KLSAgICAgICAgbUV2ZW50Q2FsbGJhY2suY2xlYXIoKTsKLSAgICAgICAgTWVkaWFJdGVtMiBpdGVtXzUgPSBnZW5lcmF0ZU1lZGlhSXRlbSg1KTsKLSAgICAgICAgc3luY2hyb25pemVkIChtV2FpdExvY2spIHsKLSAgICAgICAgICAgIHBsYXlsaXN0LmFkZCgyLCBpdGVtXzUpOwotICAgICAgICAgICAgbUFnZW50LmFkZFBsYXlsaXN0SXRlbSgyLCBpdGVtXzUpOwotICAgICAgICAgICAgbVdhaXRMb2NrLndhaXQoV0FJVF9USU1FX01TKTsKLSAgICAgICAgICAgIGFzc2VydFRydWUobUV2ZW50Q2FsbGJhY2sub25QbGF5bGlzdENoYW5nZWRDYWxsZWQpOwotICAgICAgICB9Ci0gICAgICAgIGFzc2VydFBsYXlsaXN0RXF1YWxzKHBsYXlsaXN0LCBtQWdlbnQuZ2V0UGxheWxpc3QoKSk7Ci0KLSAgICAgICAgbUV2ZW50Q2FsbGJhY2suY2xlYXIoKTsKLSAgICAgICAgLy8gTW92ZSBjdXJyZW50OiBbMCAoY3VyKSwgMSwgNSwgMiwgMywgNF0gLT4gWzAsIDEsIDUgKGN1ciksIDIsIDMsIDRdCi0gICAgICAgIG1BZ2VudC5za2lwVG9QbGF5bGlzdEl0ZW0oaXRlbV81KTsKLSAgICAgICAgLy8gUmVtb3ZlIGN1cnJlbnQgaXRlbTogWzAsIDEsIDUgKGN1ciksIDIsIDMsIDRdIC0+IFswLCAxLCAyIChjdXIpLCAzLCA0XQotICAgICAgICBzeW5jaHJvbml6ZWQgKG1XYWl0TG9jaykgewotICAgICAgICAgICAgcGxheWxpc3QucmVtb3ZlKGl0ZW1fNSk7Ci0gICAgICAgICAgICBtQWdlbnQucmVtb3ZlUGxheWxpc3RJdGVtKGl0ZW1fNSk7Ci0gICAgICAgICAgICBtV2FpdExvY2sud2FpdChXQUlUX1RJTUVfTVMpOwotICAgICAgICAgICAgYXNzZXJ0VHJ1ZShtRXZlbnRDYWxsYmFjay5vblBsYXlsaXN0Q2hhbmdlZENhbGxlZCk7Ci0gICAgICAgIH0KLSAgICAgICAgYXNzZXJ0UGxheWxpc3RFcXVhbHMocGxheWxpc3QsIG1BZ2VudC5nZXRQbGF5bGlzdCgpKTsKLSAgICAgICAgYXNzZXJ0RXF1YWxzKDIsIG1BZ2VudC5nZXRDdXJTaHVmZmxlZEluZGV4KCkpOwotCi0gICAgICAgIC8vIFJlbW92ZSBwcmV2aW91cyBpdGVtOiBbMCwgMSwgMiAoY3VyKSwgMywgNF0gLT4gWzAsIDIgKGN1ciksIDMsIDRdCi0gICAgICAgIG1FdmVudENhbGxiYWNrLmNsZWFyKCk7Ci0gICAgICAgIE1lZGlhSXRlbTIgcHJldmlvdXNJdGVtID0gcGxheWxpc3QuZ2V0KDEpOwotICAgICAgICBzeW5jaHJvbml6ZWQgKG1XYWl0TG9jaykgewotICAgICAgICAgICAgcGxheWxpc3QucmVtb3ZlKHByZXZpb3VzSXRlbSk7Ci0gICAgICAgICAgICBtQWdlbnQucmVtb3ZlUGxheWxpc3RJdGVtKHByZXZpb3VzSXRlbSk7Ci0gICAgICAgICAgICBtV2FpdExvY2sud2FpdChXQUlUX1RJTUVfTVMpOwotICAgICAgICAgICAgYXNzZXJ0VHJ1ZShtRXZlbnRDYWxsYmFjay5vblBsYXlsaXN0Q2hhbmdlZENhbGxlZCk7Ci0gICAgICAgIH0KLSAgICAgICAgYXNzZXJ0UGxheWxpc3RFcXVhbHMocGxheWxpc3QsIG1BZ2VudC5nZXRQbGF5bGlzdCgpKTsKLSAgICAgICAgYXNzZXJ0RXF1YWxzKDEsIG1BZ2VudC5nZXRDdXJTaHVmZmxlZEluZGV4KCkpOwotCi0gICAgICAgIC8vIFJlbW92ZSBuZXh0IGl0ZW06IFswLCAyIChjdXIpLCAzLCA0XSAtPiBbMCwgMiAoY3VyKSwgNF0KLSAgICAgICAgbUV2ZW50Q2FsbGJhY2suY2xlYXIoKTsKLSAgICAgICAgTWVkaWFJdGVtMiBuZXh0SXRlbSA9IHBsYXlsaXN0LmdldCgyKTsKLSAgICAgICAgc3luY2hyb25pemVkIChtV2FpdExvY2spIHsKLSAgICAgICAgICAgIHBsYXlsaXN0LnJlbW92ZShuZXh0SXRlbSk7Ci0gICAgICAgICAgICBtQWdlbnQucmVtb3ZlUGxheWxpc3RJdGVtKG5leHRJdGVtKTsKLSAgICAgICAgICAgIG1XYWl0TG9jay53YWl0KFdBSVRfVElNRV9NUyk7Ci0gICAgICAgICAgICBhc3NlcnRUcnVlKG1FdmVudENhbGxiYWNrLm9uUGxheWxpc3RDaGFuZ2VkQ2FsbGVkKTsKLSAgICAgICAgfQotICAgICAgICBhc3NlcnRQbGF5bGlzdEVxdWFscyhwbGF5bGlzdCwgbUFnZW50LmdldFBsYXlsaXN0KCkpOwotICAgICAgICBhc3NlcnRFcXVhbHMoMSwgbUFnZW50LmdldEN1clNodWZmbGVkSW5kZXgoKSk7Ci0KLSAgICAgICAgLy8gUmVwbGFjZSBpdGVtOiBbMCwgMiAoY3VyKSwgNF0gLT4gWzAsIDIgKGN1ciksIDVdCi0gICAgICAgIG1FdmVudENhbGxiYWNrLmNsZWFyKCk7Ci0gICAgICAgIHN5bmNocm9uaXplZCAobVdhaXRMb2NrKSB7Ci0gICAgICAgICAgICBwbGF5bGlzdC5zZXQoMiwgaXRlbV81KTsKLSAgICAgICAgICAgIG1BZ2VudC5yZXBsYWNlUGxheWxpc3RJdGVtKDIsIGl0ZW1fNSk7Ci0gICAgICAgICAgICBtV2FpdExvY2sud2FpdChXQUlUX1RJTUVfTVMpOwotICAgICAgICAgICAgYXNzZXJ0VHJ1ZShtRXZlbnRDYWxsYmFjay5vblBsYXlsaXN0Q2hhbmdlZENhbGxlZCk7Ci0gICAgICAgIH0KLSAgICAgICAgYXNzZXJ0UGxheWxpc3RFcXVhbHMocGxheWxpc3QsIG1BZ2VudC5nZXRQbGF5bGlzdCgpKTsKLSAgICAgICAgYXNzZXJ0RXF1YWxzKDEsIG1BZ2VudC5nZXRDdXJTaHVmZmxlZEluZGV4KCkpOwotCi0gICAgICAgIC8vIE1vdmUgbGFzdCBhbmQgcmVtb3ZlIHRoZSBsYXN0IGl0ZW06IFswLCAyIChjdXIpLCA1XSAtPiBbMCwgMiwgNSAoY3VyKV0gLT4gWzAsIDIgKGN1cildCi0gICAgICAgIE1lZGlhSXRlbTIgbGFzdEl0ZW0gPSBwbGF5bGlzdC5nZXQoMSk7Ci0gICAgICAgIG1BZ2VudC5za2lwVG9QbGF5bGlzdEl0ZW0obGFzdEl0ZW0pOwotICAgICAgICBtRXZlbnRDYWxsYmFjay5jbGVhcigpOwotICAgICAgICBzeW5jaHJvbml6ZWQgKG1XYWl0TG9jaykgewotICAgICAgICAgICAgcGxheWxpc3QucmVtb3ZlKGxhc3RJdGVtKTsKLSAgICAgICAgICAgIG1BZ2VudC5yZW1vdmVQbGF5bGlzdEl0ZW0obGFzdEl0ZW0pOwotICAgICAgICAgICAgbVdhaXRMb2NrLndhaXQoV0FJVF9USU1FX01TKTsKLSAgICAgICAgICAgIGFzc2VydFRydWUobUV2ZW50Q2FsbGJhY2sub25QbGF5bGlzdENoYW5nZWRDYWxsZWQpOwotICAgICAgICB9Ci0gICAgICAgIGFzc2VydFBsYXlsaXN0RXF1YWxzKHBsYXlsaXN0LCBtQWdlbnQuZ2V0UGxheWxpc3QoKSk7Ci0gICAgICAgIGFzc2VydEVxdWFscygxLCBtQWdlbnQuZ2V0Q3VyU2h1ZmZsZWRJbmRleCgpKTsKLQotICAgICAgICAvLyBSZW1vdmUgYWxsIGl0ZW1zCi0gICAgICAgIGZvciAoaW50IGkgPSBwbGF5bGlzdC5zaXplKCkgLSAxOyBpID49IDA7IC0taSkgewotICAgICAgICAgICAgTWVkaWFJdGVtMiBpdGVtID0gcGxheWxpc3QuZ2V0KGkpOwotICAgICAgICAgICAgbUFnZW50LnNraXBUb1BsYXlsaXN0SXRlbShpdGVtKTsKLSAgICAgICAgICAgIG1FdmVudENhbGxiYWNrLmNsZWFyKCk7Ci0gICAgICAgICAgICBzeW5jaHJvbml6ZWQgKG1XYWl0TG9jaykgewotICAgICAgICAgICAgICAgIHBsYXlsaXN0LnJlbW92ZShpdGVtKTsKLSAgICAgICAgICAgICAgICBtQWdlbnQucmVtb3ZlUGxheWxpc3RJdGVtKGl0ZW0pOwotICAgICAgICAgICAgICAgIG1XYWl0TG9jay53YWl0KFdBSVRfVElNRV9NUyk7Ci0gICAgICAgICAgICAgICAgYXNzZXJ0VHJ1ZShtRXZlbnRDYWxsYmFjay5vblBsYXlsaXN0Q2hhbmdlZENhbGxlZCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBhc3NlcnRQbGF5bGlzdEVxdWFscyhwbGF5bGlzdCwgbUFnZW50LmdldFBsYXlsaXN0KCkpOwotICAgICAgICB9Ci0gICAgICAgIGFzc2VydEVxdWFscyhTZXNzaW9uUGxheWxpc3RBZ2VudC5OT19WQUxJRF9JVEVNUywgbUFnZW50LmdldEN1clNodWZmbGVkSW5kZXgoKSk7Ci0gICAgfQotCi0KLSAgICBAVGVzdAotICAgIHB1YmxpYyB2b2lkIHRlc3RQbGF5bGlzdFdpdGhJbnZhbGlkSXRlbSgpIHRocm93cyBFeGNlcHRpb24gewotICAgICAgICBpbnQgbGlzdFNpemUgPSAyOwotICAgICAgICBMaXN0PE1lZGlhSXRlbTI+IHBsYXlsaXN0ID0gY3JlYXRlQW5kU2V0UGxheWxpc3QobGlzdFNpemUpOwotCi0gICAgICAgIC8vIEFkZCBpdGVtOiBbMCAoY3VyKSwgMV0gLT4gWzAgKGN1ciksIDMgKG5vX2RzZCksIDFdCi0gICAgICAgIG1FdmVudENhbGxiYWNrLmNsZWFyKCk7Ci0gICAgICAgIE1lZGlhSXRlbTIgaW52YWxpZEl0ZW0yID0gZ2VuZXJhdGVNZWRpYUl0ZW1XaXRob3V0RGF0YVNvdXJjZURlc2MoMik7Ci0gICAgICAgIHN5bmNocm9uaXplZCAobVdhaXRMb2NrKSB7Ci0gICAgICAgICAgICBwbGF5bGlzdC5hZGQoMSwgaW52YWxpZEl0ZW0yKTsKLSAgICAgICAgICAgIG1BZ2VudC5hZGRQbGF5bGlzdEl0ZW0oMSwgaW52YWxpZEl0ZW0yKTsKLSAgICAgICAgICAgIG1XYWl0TG9jay53YWl0KFdBSVRfVElNRV9NUyk7Ci0gICAgICAgICAgICBhc3NlcnRUcnVlKG1FdmVudENhbGxiYWNrLm9uUGxheWxpc3RDaGFuZ2VkQ2FsbGVkKTsKLSAgICAgICAgfQotICAgICAgICBhc3NlcnRQbGF5bGlzdEVxdWFscyhwbGF5bGlzdCwgbUFnZW50LmdldFBsYXlsaXN0KCkpOwotICAgICAgICBhc3NlcnRFcXVhbHMoMCwgbUFnZW50LmdldEN1clNodWZmbGVkSW5kZXgoKSk7Ci0KLSAgICAgICAgLy8gVGVzdCBza2lwIHRvIG5leHQgaXRlbTogIFswIChjdXIpLCAyIChub19kc2QpLCAxXSAtPiBbMCwgMiAobm9fZHNkKSwgMSAoY3VyKV0KLSAgICAgICAgbUFnZW50LnNraXBUb05leHRJdGVtKCk7Ci0gICAgICAgIGFzc2VydEVxdWFscygyLCBtQWdlbnQuZ2V0Q3VyU2h1ZmZsZWRJbmRleCgpKTsKLQotICAgICAgICAvLyBUZXN0IHNraXAgdG8gcHJldmlvdXMgaXRlbTogWzAsIDIgKG5vX2RzZCksIDEgKGN1cildIC0+IFswIChjdXIpLCAyIChub19kc2QpLCAxXQotICAgICAgICBtQWdlbnQuc2tpcFRvUHJldmlvdXNJdGVtKCk7Ci0gICAgICAgIGFzc2VydEVxdWFscygwLCBtQWdlbnQuZ2V0Q3VyU2h1ZmZsZWRJbmRleCgpKTsKLQotICAgICAgICAvLyBSZW1vdmUgY3VycmVudCBpdGVtOiBbMCAoY3VyKSwgMiAobm9fZHNkKSwgMV0gLT4gWzIgKG5vX2RzZCksIDEgKGN1cildCi0gICAgICAgIG1FdmVudENhbGxiYWNrLmNsZWFyKCk7Ci0gICAgICAgIE1lZGlhSXRlbTIgaXRlbSA9IHBsYXlsaXN0LmdldCgwKTsKLSAgICAgICAgc3luY2hyb25pemVkIChtV2FpdExvY2spIHsKLSAgICAgICAgICAgIHBsYXlsaXN0LnJlbW92ZShpdGVtKTsKLSAgICAgICAgICAgIG1BZ2VudC5yZW1vdmVQbGF5bGlzdEl0ZW0oaXRlbSk7Ci0gICAgICAgICAgICBtV2FpdExvY2sud2FpdChXQUlUX1RJTUVfTVMpOwotICAgICAgICAgICAgYXNzZXJ0VHJ1ZShtRXZlbnRDYWxsYmFjay5vblBsYXlsaXN0Q2hhbmdlZENhbGxlZCk7Ci0gICAgICAgIH0KLSAgICAgICAgYXNzZXJ0UGxheWxpc3RFcXVhbHMocGxheWxpc3QsIG1BZ2VudC5nZXRQbGF5bGlzdCgpKTsKLSAgICAgICAgYXNzZXJ0RXF1YWxzKDEsIG1BZ2VudC5nZXRDdXJTaHVmZmxlZEluZGV4KCkpOwotCi0gICAgICAgIC8vIFJlbW92ZSBjdXJyZW50IGl0ZW06IFsyIChub19kc2QpLCAxIChjdXIpXSAtPiBbMiAobm9fZHNkKV0KLSAgICAgICAgbUV2ZW50Q2FsbGJhY2suY2xlYXIoKTsKLSAgICAgICAgaXRlbSA9IHBsYXlsaXN0LmdldCgxKTsKLSAgICAgICAgc3luY2hyb25pemVkIChtV2FpdExvY2spIHsKLSAgICAgICAgICAgIHBsYXlsaXN0LnJlbW92ZShpdGVtKTsKLSAgICAgICAgICAgIG1BZ2VudC5yZW1vdmVQbGF5bGlzdEl0ZW0oaXRlbSk7Ci0gICAgICAgICAgICBtV2FpdExvY2sud2FpdChXQUlUX1RJTUVfTVMpOwotICAgICAgICAgICAgYXNzZXJ0VHJ1ZShtRXZlbnRDYWxsYmFjay5vblBsYXlsaXN0Q2hhbmdlZENhbGxlZCk7Ci0gICAgICAgIH0KLSAgICAgICAgYXNzZXJ0UGxheWxpc3RFcXVhbHMocGxheWxpc3QsIG1BZ2VudC5nZXRQbGF5bGlzdCgpKTsKLSAgICAgICAgYXNzZXJ0RXF1YWxzKFNlc3Npb25QbGF5bGlzdEFnZW50Lk5PX1ZBTElEX0lURU1TLCBtQWdlbnQuZ2V0Q3VyU2h1ZmZsZWRJbmRleCgpKTsKLQotICAgICAgICAvLyBBZGQgaW52YWxpZCBpdGVtOiBbMiAobm9fZHNkKV0gLT4gWzAgKG5vX2RzZCksIDIgKG5vX2RzZCldCi0gICAgICAgIE1lZGlhSXRlbTIgaW52YWxpZEl0ZW0wID0gZ2VuZXJhdGVNZWRpYUl0ZW1XaXRob3V0RGF0YVNvdXJjZURlc2MoMCk7Ci0gICAgICAgIG1FdmVudENhbGxiYWNrLmNsZWFyKCk7Ci0gICAgICAgIHN5bmNocm9uaXplZCAobVdhaXRMb2NrKSB7Ci0gICAgICAgICAgICBwbGF5bGlzdC5hZGQoMCwgaW52YWxpZEl0ZW0wKTsKLSAgICAgICAgICAgIG1BZ2VudC5hZGRQbGF5bGlzdEl0ZW0oMCwgaW52YWxpZEl0ZW0wKTsKLSAgICAgICAgICAgIG1XYWl0TG9jay53YWl0KFdBSVRfVElNRV9NUyk7Ci0gICAgICAgICAgICBhc3NlcnRUcnVlKG1FdmVudENhbGxiYWNrLm9uUGxheWxpc3RDaGFuZ2VkQ2FsbGVkKTsKLSAgICAgICAgfQotICAgICAgICBhc3NlcnRQbGF5bGlzdEVxdWFscyhwbGF5bGlzdCwgbUFnZW50LmdldFBsYXlsaXN0KCkpOwotICAgICAgICBhc3NlcnRFcXVhbHMoU2Vzc2lvblBsYXlsaXN0QWdlbnQuTk9fVkFMSURfSVRFTVMsIG1BZ2VudC5nZXRDdXJTaHVmZmxlZEluZGV4KCkpOwotCi0gICAgICAgIC8vIEFkZCB2YWxpZCBpdGVtOiBbMCAobm9fZHNkKSwgMiAobm9fZHNkKV0gLT4gWzAgKG5vX2RzZCksIDEsIDIgKG5vX2RzZCldCi0gICAgICAgIE1lZGlhSXRlbTIgaW52YWxpZEl0ZW0xID0gZ2VuZXJhdGVNZWRpYUl0ZW0oMSk7Ci0gICAgICAgIG1FdmVudENhbGxiYWNrLmNsZWFyKCk7Ci0gICAgICAgIHN5bmNocm9uaXplZCAobVdhaXRMb2NrKSB7Ci0gICAgICAgICAgICBwbGF5bGlzdC5hZGQoMSwgaW52YWxpZEl0ZW0xKTsKLSAgICAgICAgICAgIG1BZ2VudC5hZGRQbGF5bGlzdEl0ZW0oMSwgaW52YWxpZEl0ZW0xKTsKLSAgICAgICAgICAgIG1XYWl0TG9jay53YWl0KFdBSVRfVElNRV9NUyk7Ci0gICAgICAgICAgICBhc3NlcnRUcnVlKG1FdmVudENhbGxiYWNrLm9uUGxheWxpc3RDaGFuZ2VkQ2FsbGVkKTsKLSAgICAgICAgfQotICAgICAgICBhc3NlcnRQbGF5bGlzdEVxdWFscyhwbGF5bGlzdCwgbUFnZW50LmdldFBsYXlsaXN0KCkpOwotICAgICAgICBhc3NlcnRFcXVhbHMoMSwgbUFnZW50LmdldEN1clNodWZmbGVkSW5kZXgoKSk7Ci0KLSAgICAgICAgLy8gUmVwbGFjZSB0aGUgdmFsaWQgaXRlbSB3aXRoIGFuIGludmFsaWQgaXRlbToKLSAgICAgICAgLy8gWzAgKG5vX2RzZCksIDEgKGN1ciksIDIgKG5vX2RzZCldIC0+IFswIChub19kc2QpLCAzIChub19kc2QpLCAyIChub19kc2QpXQotICAgICAgICBNZWRpYUl0ZW0yIGludmFsaWRJdGVtMyA9IGdlbmVyYXRlTWVkaWFJdGVtV2l0aG91dERhdGFTb3VyY2VEZXNjKDMpOwotICAgICAgICBtRXZlbnRDYWxsYmFjay5jbGVhcigpOwotICAgICAgICBzeW5jaHJvbml6ZWQgKG1XYWl0TG9jaykgewotICAgICAgICAgICAgcGxheWxpc3Quc2V0KDEsIGludmFsaWRJdGVtMyk7Ci0gICAgICAgICAgICBtQWdlbnQucmVwbGFjZVBsYXlsaXN0SXRlbSgxLCBpbnZhbGlkSXRlbTMpOwotICAgICAgICAgICAgbVdhaXRMb2NrLndhaXQoV0FJVF9USU1FX01TKTsKLSAgICAgICAgICAgIGFzc2VydFRydWUobUV2ZW50Q2FsbGJhY2sub25QbGF5bGlzdENoYW5nZWRDYWxsZWQpOwotICAgICAgICB9Ci0gICAgICAgIGFzc2VydFBsYXlsaXN0RXF1YWxzKHBsYXlsaXN0LCBtQWdlbnQuZ2V0UGxheWxpc3QoKSk7Ci0gICAgICAgIGFzc2VydEVxdWFscyhTZXNzaW9uUGxheWxpc3RBZ2VudC5FTkRfT0ZfUExBWUxJU1QsIG1BZ2VudC5nZXRDdXJTaHVmZmxlZEluZGV4KCkpOwotICAgIH0KLQotICAgIEBUZXN0Ci0gICAgcHVibGljIHZvaWQgdGVzdFBsYXlsaXN0QWZ0ZXJPbkN1cnJlbnREYXRhU291cmNlQ2hhbmdlZCgpIHRocm93cyBFeGNlcHRpb24gewotICAgICAgICBpbnQgbGlzdFNpemUgPSAyOwotICAgICAgICB2ZXJpZnkobVBsYXllcikucmVnaXN0ZXJQbGF5ZXJFdmVudENhbGxiYWNrKE1hdGNoZXJzLmFueSgpLCBNYXRjaGVycy5hbnkoKSk7Ci0KLSAgICAgICAgY3JlYXRlQW5kU2V0UGxheWxpc3QobGlzdFNpemUpOwotICAgICAgICBhc3NlcnRFcXVhbHMoMCwgbUFnZW50LmdldEN1clNodWZmbGVkSW5kZXgoKSk7Ci0KLSAgICAgICAgbVBsYXllckV2ZW50Q2FsbGJhY2sub25DdXJyZW50RGF0YVNvdXJjZUNoYW5nZWQobVBsYXllciwgbnVsbCk7Ci0gICAgICAgIGFzc2VydEVxdWFscygxLCBtQWdlbnQuZ2V0Q3VyU2h1ZmZsZWRJbmRleCgpKTsKLSAgICAgICAgbVBsYXllckV2ZW50Q2FsbGJhY2sub25DdXJyZW50RGF0YVNvdXJjZUNoYW5nZWQobVBsYXllciwgbnVsbCk7Ci0gICAgICAgIGFzc2VydEVxdWFscyhTZXNzaW9uUGxheWxpc3RBZ2VudC5FTkRfT0ZfUExBWUxJU1QsIG1BZ2VudC5nZXRDdXJTaHVmZmxlZEluZGV4KCkpOwotCi0gICAgICAgIG1BZ2VudC5za2lwVG9OZXh0SXRlbSgpOwotICAgICAgICBhc3NlcnRFcXVhbHMoU2Vzc2lvblBsYXlsaXN0QWdlbnQuRU5EX09GX1BMQVlMSVNULCBtQWdlbnQuZ2V0Q3VyU2h1ZmZsZWRJbmRleCgpKTsKLQotICAgICAgICBtQWdlbnQuc2V0UmVwZWF0TW9kZShNZWRpYVBsYXlsaXN0QWdlbnQuUkVQRUFUX01PREVfT05FKTsKLSAgICAgICAgYXNzZXJ0RXF1YWxzKFNlc3Npb25QbGF5bGlzdEFnZW50LkVORF9PRl9QTEFZTElTVCwgbUFnZW50LmdldEN1clNodWZmbGVkSW5kZXgoKSk7Ci0KLSAgICAgICAgbUFnZW50LnNldFJlcGVhdE1vZGUoTWVkaWFQbGF5bGlzdEFnZW50LlJFUEVBVF9NT0RFX0FMTCk7Ci0gICAgICAgIGFzc2VydEVxdWFscygwLCBtQWdlbnQuZ2V0Q3VyU2h1ZmZsZWRJbmRleCgpKTsKLSAgICAgICAgbVBsYXllckV2ZW50Q2FsbGJhY2sub25DdXJyZW50RGF0YVNvdXJjZUNoYW5nZWQobVBsYXllciwgbnVsbCk7Ci0gICAgICAgIGFzc2VydEVxdWFscygxLCBtQWdlbnQuZ2V0Q3VyU2h1ZmZsZWRJbmRleCgpKTsKLSAgICAgICAgbVBsYXllckV2ZW50Q2FsbGJhY2sub25DdXJyZW50RGF0YVNvdXJjZUNoYW5nZWQobVBsYXllciwgbnVsbCk7Ci0gICAgICAgIGFzc2VydEVxdWFscygwLCBtQWdlbnQuZ2V0Q3VyU2h1ZmZsZWRJbmRleCgpKTsKLSAgICB9Ci0KLSAgICBwcml2YXRlIExpc3Q8TWVkaWFJdGVtMj4gY3JlYXRlQW5kU2V0UGxheWxpc3QoaW50IGxpc3RTaXplKSB0aHJvd3MgRXhjZXB0aW9uIHsKLSAgICAgICAgTGlzdDxNZWRpYUl0ZW0yPiBpdGVtcyA9IG5ldyBBcnJheUxpc3Q8PigpOwotICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGxpc3RTaXplOyArK2kpIHsKLSAgICAgICAgICAgIGl0ZW1zLmFkZChnZW5lcmF0ZU1lZGlhSXRlbShpKSk7Ci0gICAgICAgIH0KLSAgICAgICAgbUV2ZW50Q2FsbGJhY2suY2xlYXIoKTsKLSAgICAgICAgc3luY2hyb25pemVkIChtV2FpdExvY2spIHsKLSAgICAgICAgICAgIG1BZ2VudC5zZXRQbGF5bGlzdChpdGVtcywgbnVsbCk7Ci0gICAgICAgICAgICBtV2FpdExvY2sud2FpdChXQUlUX1RJTUVfTVMpOwotICAgICAgICAgICAgYXNzZXJ0VHJ1ZShtRXZlbnRDYWxsYmFjay5vblBsYXlsaXN0Q2hhbmdlZENhbGxlZCk7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIGl0ZW1zOwotICAgIH0KLQotICAgIHByaXZhdGUgdm9pZCBhc3NlcnRQbGF5bGlzdEVxdWFscyhMaXN0PE1lZGlhSXRlbTI+IGV4cGVjdGVkLCBMaXN0PE1lZGlhSXRlbTI+IGFjdHVhbCkgewotICAgICAgICBpZiAoZXhwZWN0ZWQgPT0gYWN0dWFsKSB7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICAgICAgYXNzZXJ0VHJ1ZShleHBlY3RlZCAhPSBudWxsICYmIGFjdHVhbCAhPSBudWxsKTsKLSAgICAgICAgYXNzZXJ0RXF1YWxzKGV4cGVjdGVkLnNpemUoKSwgYWN0dWFsLnNpemUoKSk7Ci0gICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgZXhwZWN0ZWQuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgICAgIGFzc2VydFRydWUoZXhwZWN0ZWQuZ2V0KGkpLmVxdWFscyhhY3R1YWwuZ2V0KGkpKSk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBwcml2YXRlIE1lZGlhSXRlbTIgZ2VuZXJhdGVNZWRpYUl0ZW1XaXRob3V0RGF0YVNvdXJjZURlc2MoaW50IGtleSkgewotICAgICAgICByZXR1cm4gbmV3IE1lZGlhSXRlbTIuQnVpbGRlcigwKQotICAgICAgICAgICAgICAgIC5zZXRNZWRpYUlkKCJURVNUX01FRElBX0lEX1dJVEhPVVRfRFNEXyIgKyBrZXkpCi0gICAgICAgICAgICAgICAgLmJ1aWxkKCk7Ci0gICAgfQotCi0gICAgcHJpdmF0ZSBNZWRpYUl0ZW0yIGdlbmVyYXRlTWVkaWFJdGVtKGludCBrZXkpIHsKLSAgICAgICAgcmV0dXJuIG5ldyBNZWRpYUl0ZW0yLkJ1aWxkZXIoMCkKLSAgICAgICAgICAgICAgICAuc2V0TWVkaWFJZCgiVEVTVF9NRURJQV9JRF8iICsga2V5KQotICAgICAgICAgICAgICAgIC5idWlsZCgpOwotICAgIH0KLX0KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL09XTkVSUyBiL3BhY2thZ2VzL09XTkVSUwppbmRleCBiYmM0Y2VmLi4zYjlmZDJiIDEwMDY0NAotLS0gYS9wYWNrYWdlcy9PV05FUlMKKysrIGIvcGFja2FnZXMvT1dORVJTCkBAIC0xLDYgKzEsOSBAQAogYWtlcnN0ZW5AZ29vZ2xlLmNvbQogZHdrYW5nQGdvb2dsZS5jb20KK2hkbW9vbkBnb29nbGUuY29tCitpbnN1bkBnb29nbGUuY29tCiBqYWV3YW5AZ29vZ2xlLmNvbQoramlucGFya0Bnb29nbGUuY29tCiBtYXJjb25lQGdvb2dsZS5jb20KIHN1bmdzb29AZ29vZ2xlLmNvbQogd2ppYUBnb29nbGUuY29tCmRpZmYgLS1naXQgYS9zZXJ2aWNlcy9hdWRpb2ZsaW5nZXIvQW5kcm9pZC5tayBiL3NlcnZpY2VzL2F1ZGlvZmxpbmdlci9BbmRyb2lkLm1rCmluZGV4IDc0MTllNjQuLmMwYWE0NzcgMTAwNjQ0Ci0tLSBhL3NlcnZpY2VzL2F1ZGlvZmxpbmdlci9BbmRyb2lkLm1rCisrKyBiL3NlcnZpY2VzL2F1ZGlvZmxpbmdlci9BbmRyb2lkLm1rCkBAIC0yLDI0ICsyLDYgQEAKIAogaW5jbHVkZSAkKENMRUFSX1ZBUlMpCiAKLUxPQ0FMX1NSQ19GSUxFUyA6PSBcCi0gICAgU2VydmljZVV0aWxpdGllcy5jcHAKLQotIyBGSVhNRSBNb3ZlIHRoaXMgbGlicmFyeSB0byBmcmFtZXdvcmtzL25hdGl2ZQotTE9DQUxfTU9EVUxFIDo9IGxpYnNlcnZpY2V1dGlsaXR5Ci0KLUxPQ0FMX1NIQVJFRF9MSUJSQVJJRVMgOj0gXAotICAgIGxpYmN1dGlscyBcCi0gICAgbGlidXRpbHMgXAotICAgIGxpYmxvZyBcCi0gICAgbGliYmluZGVyCi0KLUxPQ0FMX0NGTEFHUyA6PSAtV2FsbCAtV2Vycm9yCi0KLWluY2x1ZGUgJChCVUlMRF9TSEFSRURfTElCUkFSWSkKLQotaW5jbHVkZSAkKENMRUFSX1ZBUlMpCi0KIExPQ0FMX1NSQ19GSUxFUzo9ICAgICAgICAgICAgICAgXAogICAgIEF1ZGlvRmxpbmdlci5jcHAgICAgICAgICAgICBcCiAgICAgVGhyZWFkcy5jcHAgICAgICAgICAgICAgICAgIFwKQEAgLTMxLDcgKzEzLDggQEAKICAgICBQYXRjaFBhbmVsLmNwcCAgICAgICAgICAgICAgXAogICAgIFN0YXRlUXVldWUuY3BwICAgICAgICAgICAgICBcCiAgICAgQnVmTG9nLmNwcCAgICAgICAgICAgICAgICAgIFwKLSAgICBUeXBlZExvZ2dlci5jcHAKKyAgICBUeXBlZExvZ2dlci5jcHAgICAgICAgICAgICAgXAorICAgIE5CQUlPX1RlZS5jcHAgICAgICAgICAgICAgICBcCiAKIExPQ0FMX0NfSU5DTFVERVMgOj0gXAogICAgIGZyYW1ld29ya3MvYXYvc2VydmljZXMvYXVkaW9wb2xpY3kgXApAQCAtNTMsMTMgKzM2LDEzIEBACiAgICAgbGlibmJhaW8gXAogICAgIGxpYm5ibG9nIFwKICAgICBsaWJwb3dlcm1hbmFnZXIgXAotICAgIGxpYnNlcnZpY2V1dGlsaXR5IFwKICAgICBsaWJtZWRpYXV0aWxzIFwKICAgICBsaWJtZW11bnJlYWNoYWJsZSBcCiAgICAgbGlibWVkaWFfaGVscGVyCiAKIExPQ0FMX1NUQVRJQ19MSUJSQVJJRVMgOj0gXAogICAgIGxpYmNwdXN0YXRzIFwKKyAgICBsaWJzbmRmaWxlIFwKIAogTE9DQUxfTVVMVElMSUIgOj0gJChBVURJT1NFUlZFUl9NVUxUSUxJQikKIApAQCAtODIsNiArNjUsNyBAQAogTE9DQUxfQ0ZMQUdTICs9IC1mdmlzaWJpbGl0eT1oaWRkZW4KIAogTE9DQUxfQ0ZMQUdTICs9IC1XZXJyb3IgLVdhbGwKK0xPQ0FMX1NBTklUSVpFIDo9IGludGVnZXJfb3ZlcmZsb3cKIAogaW5jbHVkZSAkKEJVSUxEX1NIQVJFRF9MSUJSQVJZKQogCmRpZmYgLS1naXQgYS9zZXJ2aWNlcy9hdWRpb2ZsaW5nZXIvQXVkaW9GbGluZ2VyLmNwcCBiL3NlcnZpY2VzL2F1ZGlvZmxpbmdlci9BdWRpb0ZsaW5nZXIuY3BwCmluZGV4IGJkZDM5YzYuLjA2OTc1YWMgMTAwNjQ0Ci0tLSBhL3NlcnZpY2VzL2F1ZGlvZmxpbmdlci9BdWRpb0ZsaW5nZXIuY3BwCisrKyBiL3NlcnZpY2VzL2F1ZGlvZmxpbmdlci9BdWRpb0ZsaW5nZXIuY3BwCkBAIC0yMywxMiArMjMsMTIgQEAKICNpbmNsdWRlIDxkaXJlbnQuaD4KICNpbmNsdWRlIDxtYXRoLmg+CiAjaW5jbHVkZSA8c2lnbmFsLmg+CisjaW5jbHVkZSA8c3RyaW5nPgogI2luY2x1ZGUgPHN5cy90aW1lLmg+CiAjaW5jbHVkZSA8c3lzL3Jlc291cmNlLmg+CiAKICNpbmNsdWRlIDxiaW5kZXIvSVBDVGhyZWFkU3RhdGUuaD4KICNpbmNsdWRlIDxiaW5kZXIvSVNlcnZpY2VNYW5hZ2VyLmg+Ci0jaW5jbHVkZSA8Y3V0aWxzL211bHRpdXNlci5oPgogI2luY2x1ZGUgPHV0aWxzL0xvZy5oPgogI2luY2x1ZGUgPHV0aWxzL1RyYWNlLmg+CiAjaW5jbHVkZSA8YmluZGVyL1BhcmNlbC5oPgpAQCAtNDcsNyArNDcsNyBAQAogI2luY2x1ZGUgPHN5c3RlbS9hdWRpby5oPgogCiAjaW5jbHVkZSAiQXVkaW9GbGluZ2VyLmgiCi0jaW5jbHVkZSAiU2VydmljZVV0aWxpdGllcy5oIgorI2luY2x1ZGUgIk5CQUlPX1RlZS5oIgogCiAjaW5jbHVkZSA8bWVkaWEvQXVkaW9SZXNhbXBsZXJQdWJsaWMuaD4KIApAQCAtNTYsNyArNTYsNiBAQAogI2luY2x1ZGUgPHN5c3RlbS9hdWRpb19lZmZlY3RzL2VmZmVjdF9hZWMuaD4KIAogI2luY2x1ZGUgPGF1ZGlvX3V0aWxzL3ByaW1pdGl2ZXMuaD4KLSNpbmNsdWRlIDxhdWRpb191dGlscy9zdHJpbmcuaD4KIAogI2luY2x1ZGUgPHBvd2VybWFuYWdlci9Qb3dlck1hbmFnZXIuaD4KIApAQCAtNjQsOCArNjMsOCBAQAogI2luY2x1ZGUgPG1lZGlhL01lbW9yeUxlYWtUcmFja1V0aWwuaD4KICNpbmNsdWRlIDxtZWRpYS9uYmFpby9QaXBlLmg+CiAjaW5jbHVkZSA8bWVkaWEvbmJhaW8vUGlwZVJlYWRlci5oPgotI2luY2x1ZGUgPG1lZGlhL0F1ZGlvUGFyYW1ldGVyLmg+CiAjaW5jbHVkZSA8bWVkaWF1dGlscy9CYXR0ZXJ5Tm90aWZpZXIuaD4KKyNpbmNsdWRlIDxtZWRpYXV0aWxzL1NlcnZpY2VVdGlsaXRpZXMuaD4KICNpbmNsdWRlIDxwcml2YXRlL2FuZHJvaWRfZmlsZXN5c3RlbV9jb25maWcuaD4KIAogLy8jZGVmaW5lIEJVRkxPR19OREVCVUcgMApAQCAtMTAwLDE3ICs5OSw2IEBACiAKIHVpbnQzMl90IEF1ZGlvRmxpbmdlcjo6bVNjcmVlblN0YXRlOwogCi0KLSNpZmRlZiBURUVfU0lOSwotYm9vbCBBdWRpb0ZsaW5nZXI6Om1UZWVTaW5rSW5wdXRFbmFibGVkID0gZmFsc2U7Ci1ib29sIEF1ZGlvRmxpbmdlcjo6bVRlZVNpbmtPdXRwdXRFbmFibGVkID0gZmFsc2U7Ci1ib29sIEF1ZGlvRmxpbmdlcjo6bVRlZVNpbmtUcmFja0VuYWJsZWQgPSBmYWxzZTsKLQotc2l6ZV90IEF1ZGlvRmxpbmdlcjo6bVRlZVNpbmtJbnB1dEZyYW1lcyA9IGtUZWVTaW5rSW5wdXRGcmFtZXNEZWZhdWx0Owotc2l6ZV90IEF1ZGlvRmxpbmdlcjo6bVRlZVNpbmtPdXRwdXRGcmFtZXMgPSBrVGVlU2lua091dHB1dEZyYW1lc0RlZmF1bHQ7Ci1zaXplX3QgQXVkaW9GbGluZ2VyOjptVGVlU2lua1RyYWNrRnJhbWVzID0ga1RlZVNpbmtUcmFja0ZyYW1lc0RlZmF1bHQ7Ci0jZW5kaWYKLQogLy8gSW4gb3JkZXIgdG8gYXZvaWQgaW52YWxpZGF0aW5nIG9mZmxvYWRlZCB0cmFja3MgZWFjaCB0aW1lIGEgVmlzdWFsaXplciBpcyB0dXJuZWQgb24gYW5kIG9mZgogLy8gd2UgZGVmaW5lIGEgbWluaW11bSB0aW1lIGR1cmluZyB3aGljaCBhIGdsb2JhbCBlZmZlY3QgaXMgY29uc2lkZXJlZCBlbmFibGVkLgogc3RhdGljIGNvbnN0IG5zZWNzX3Qga01pbkdsb2JhbEVmZmVjdEVuYWJsZXRpbWVOcyA9IHNlY29uZHMoNzIwMCk7CkBAIC0xNjAsNiArMTQ4LDcgQEAKICAgICAgIG1Ub3RhbE1lbW9yeSgwKSwKICAgICAgIG1DbGllbnRTaGFyZWRIZWFwU2l6ZShrTWluaW11bUNsaWVudFNoYXJlZEhlYXBTaXplQnl0ZXMpLAogICAgICAgbUdsb2JhbEVmZmVjdEVuYWJsZVRpbWUoMCksCisgICAgICBtUGF0Y2hQYW5lbCh0aGlzKSwKICAgICAgIG1TeXN0ZW1SZWFkeShmYWxzZSkKIHsKICAgICAvLyB1bnNpZ25lZCBpbnN0ZWFkIG9mIGF1ZGlvX3VuaXF1ZV9pZF91c2VfdCwgYmVjYXVzZSArKyBvcGVyYXRvciBpcyB1bmF2YWlsYWJsZSBmb3IgZW51bQpAQCAtMTY4LDcgKzE1Nyw2IEBACiAgICAgICAgIG1OZXh0VW5pcXVlSWRzW3VzZV0gPSBBVURJT19VTklRVUVfSURfVVNFX01BWDsKICAgICB9CiAKLSAgICBnZXRwaWRfY2FjaGVkID0gZ2V0cGlkKCk7CiAgICAgY29uc3QgYm9vbCBkb0xvZyA9IHByb3BlcnR5X2dldF9ib29sKCJyby50ZXN0X2hhcm5lc3MiLCBmYWxzZSk7CiAgICAgaWYgKGRvTG9nKSB7CiAgICAgICAgIG1Mb2dNZW1vcnlEZWFsZXIgPSBuZXcgTWVtb3J5RGVhbGVyKGtMb2dNZW1vcnlTaXplLCAiTG9nV3JpdGVycyIsCkBAIC0xODUsMjcgKzE3Myw2IEBACiAgICAgbUVmZmVjdHNGYWN0b3J5SGFsID0gRWZmZWN0c0ZhY3RvcnlIYWxJbnRlcmZhY2U6OmNyZWF0ZSgpOwogCiAgICAgbU1lZGlhTG9nTm90aWZpZXItPnJ1bigiTWVkaWFMb2dOb3RpZmllciIpOwotCi0jaWZkZWYgVEVFX1NJTksKLSAgICBjaGFyIHZhbHVlW1BST1BFUlRZX1ZBTFVFX01BWF07Ci0gICAgKHZvaWQpIHByb3BlcnR5X2dldCgicm8uZGVidWdnYWJsZSIsIHZhbHVlLCAiMCIpOwotICAgIGludCBkZWJ1Z2dhYmxlID0gYXRvaSh2YWx1ZSk7Ci0gICAgaW50IHRlZUVuYWJsZWQgPSAwOwotICAgIGlmIChkZWJ1Z2dhYmxlKSB7Ci0gICAgICAgICh2b2lkKSBwcm9wZXJ0eV9nZXQoImFmLnRlZSIsIHZhbHVlLCAiMCIpOwotICAgICAgICB0ZWVFbmFibGVkID0gYXRvaSh2YWx1ZSk7Ci0gICAgfQotICAgIC8vIEZJWE1FIHN5bWJvbGljIGNvbnN0YW50cyBoZXJlCi0gICAgaWYgKHRlZUVuYWJsZWQgJiAxKSB7Ci0gICAgICAgIG1UZWVTaW5rSW5wdXRFbmFibGVkID0gdHJ1ZTsKLSAgICB9Ci0gICAgaWYgKHRlZUVuYWJsZWQgJiAyKSB7Ci0gICAgICAgIG1UZWVTaW5rT3V0cHV0RW5hYmxlZCA9IHRydWU7Ci0gICAgfQotICAgIGlmICh0ZWVFbmFibGVkICYgNCkgewotICAgICAgICBtVGVlU2lua1RyYWNrRW5hYmxlZCA9IHRydWU7Ci0gICAgfQotI2VuZGlmCiB9CiAKIHZvaWQgQXVkaW9GbGluZ2VyOjpvbkZpcnN0UmVmKCkKQEAgLTIyNiw4ICsxOTMsNiBAQAogICAgICAgICB9CiAgICAgfQogCi0gICAgbVBhdGNoUGFuZWwgPSBuZXcgUGF0Y2hQYW5lbCh0aGlzKTsKLQogICAgIG1Nb2RlID0gQVVESU9fTU9ERV9OT1JNQUw7CiAKICAgICBnQXVkaW9GbGluZ2VyID0gdGhpczsKQEAgLTM0MSw3ICszMDYsNyBAQAogICAgICAgICAqc2Vzc2lvbklkID0gYWN0dWFsU2Vzc2lvbklkOwogICAgIH0gZWxzZSB7CiAgICAgICAgIGlmIChkaXJlY3Rpb24gPT0gTW1hcFN0cmVhbUludGVyZmFjZTo6RElSRUNUSU9OX09VVFBVVCkgewotICAgICAgICAgICAgQXVkaW9TeXN0ZW06OnJlbGVhc2VPdXRwdXQoaW8sIHN0cmVhbVR5cGUsIGFjdHVhbFNlc3Npb25JZCk7CisgICAgICAgICAgICBBdWRpb1N5c3RlbTo6cmVsZWFzZU91dHB1dChwb3J0SWQpOwogICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgQXVkaW9TeXN0ZW06OnJlbGVhc2VJbnB1dChwb3J0SWQpOwogICAgICAgICB9CkBAIC00NzgsNyArNDQzLDcgQEAKICAgICAgICAgICAgIG1IYXJkd2FyZUxvY2sudW5sb2NrKCk7CiAgICAgICAgIH0KIAotICAgICAgICBib29sIGxvY2tlZCA9IGR1bXBUcnlMb2NrKG1Mb2NrKTsKKyAgICAgICAgY29uc3QgYm9vbCBsb2NrZWQgPSBkdW1wVHJ5TG9jayhtTG9jayk7CiAKICAgICAgICAgLy8gZmFpbGVkIHRvIGxvY2sgLSBBdWRpb0ZsaW5nZXIgaXMgcHJvYmFibHkgZGVhZGxvY2tlZAogICAgICAgICBpZiAoIWxvY2tlZCkgewpAQCAtNTM0LDEyICs0OTksMjIgQEAKICAgICAgICAgICAgIGRldi0+ZHVtcChmZCk7CiAgICAgICAgIH0KIAotI2lmZGVmIFRFRV9TSU5LCi0gICAgICAgIC8vIGR1bXAgdGhlIHNlcmlhbGx5IHNoYXJlZCByZWNvcmQgdGVlIHNpbmsKLSAgICAgICAgaWYgKG1SZWNvcmRUZWVTb3VyY2UgIT0gMCkgewotICAgICAgICAgICAgZHVtcFRlZShmZCwgbVJlY29yZFRlZVNvdXJjZSwgQVVESU9fSU9fSEFORExFX05PTkUsICdDJyk7Ci0gICAgICAgIH0KLSNlbmRpZgorICAgICAgICBtUGF0Y2hQYW5lbC5kdW1wKGZkKTsKKworICAgICAgICAvLyBkdW1wIGV4dGVybmFsIHNldFBhcmFtZXRlcnMKKyAgICAgICAgYXV0byBkdW1wTG9nZ2VyID0gW2ZkXShTaW1wbGVMb2cmIGxvZ2dlciwgY29uc3QgY2hhciogbmFtZSkgeworICAgICAgICAgICAgZHByaW50ZihmZCwgIlxuJXMgc2V0UGFyYW1ldGVyczpcbiIsIG5hbWUpOworICAgICAgICAgICAgbG9nZ2VyLmR1bXAoZmQsICIgICAgIiAvKiBwcmVmaXggKi8pOworICAgICAgICB9OworICAgICAgICBkdW1wTG9nZ2VyKG1SZWplY3RlZFNldFBhcmFtZXRlckxvZywgIlJlamVjdGVkIik7CisgICAgICAgIGR1bXBMb2dnZXIobUFwcFNldFBhcmFtZXRlckxvZywgIkFwcCIpOworICAgICAgICBkdW1wTG9nZ2VyKG1TeXN0ZW1TZXRQYXJhbWV0ZXJMb2csICJTeXN0ZW0iKTsKKworICAgICAgICAvLyBkdW1wIGhpc3RvcmljYWwgdGhyZWFkcyBpbiB0aGUgbGFzdCAxMCBzZWNvbmRzCisgICAgICAgIGNvbnN0IHN0ZDo6c3RyaW5nIHRocmVhZExvZyA9IG1UaHJlYWRMb2cuZHVtcFRvU3RyaW5nKAorICAgICAgICAgICAgICAgICJIaXN0b3JpY2FsIFRocmVhZCBMb2cgIiwgMCAvKiBsaW5lcyAqLywKKyAgICAgICAgICAgICAgICBhdWRpb191dGlsc19nZXRfcmVhbF90aW1lX25zKCkgLSAxMCAqIDYwICogTkFOT1NfUEVSX1NFQ09ORCk7CisgICAgICAgIHdyaXRlKGZkLCB0aHJlYWRMb2cuY19zdHIoKSwgdGhyZWFkTG9nLnNpemUoKSk7CiAKICAgICAgICAgQlVGTE9HX1JFU0VUOwogCkBAIC01NDcsNiArNTIyLDEwIEBACiAgICAgICAgICAgICBtTG9jay51bmxvY2soKTsKICAgICAgICAgfQogCisjaWZkZWYgVEVFX1NJTksKKyAgICAgICAgLy8gTkJBSU9fVGVlIGR1bXAgaXMgc2FmZSB0byBjYWxsIG91dHNpZGUgb2YgQUYgbG9jay4KKyAgICAgICAgTkJBSU9fVGVlOjpkdW1wQWxsKGZkLCAiX0RVTVAiKTsKKyNlbmRpZgogICAgICAgICAvLyBhcHBlbmQgYSBjb3B5IG9mIG1lZGlhLmxvZyBoZXJlIGJ5IGZvcndhcmRpbmcgZmQgdG8gaXQsIGJ1dCBkb24ndCBhdHRlbXB0CiAgICAgICAgIC8vIHRvIGxvb2t1cCB0aGUgc2VydmljZSBpZiBpdCdzIG5vdCBydW5uaW5nLCBhcyBpdCB3aWxsIGJsb2NrIGZvciBhIHNlY29uZAogICAgICAgICBpZiAoc01lZGlhTG9nU2VydmljZUFzQmluZGVyICE9IDApIHsKQEAgLTY2Niw3ICs2NDUsNyBAQAogICAgIGJvb2wgdXBkYXRlUGlkID0gKGlucHV0LmNsaWVudEluZm8uY2xpZW50UGlkID09IC0xKTsKICAgICBjb25zdCB1aWRfdCBjYWxsaW5nVWlkID0gSVBDVGhyZWFkU3RhdGU6OnNlbGYoKS0+Z2V0Q2FsbGluZ1VpZCgpOwogICAgIHVpZF90IGNsaWVudFVpZCA9IGlucHV0LmNsaWVudEluZm8uY2xpZW50VWlkOwotICAgIGlmICghaXNUcnVzdGVkQ2FsbGluZ1VpZChjYWxsaW5nVWlkKSkgeworICAgIGlmICghaXNBdWRpb1NlcnZlck9yTWVkaWFTZXJ2ZXJVaWQoY2FsbGluZ1VpZCkpIHsKICAgICAgICAgQUxPR1dfSUYoY2xpZW50VWlkICE9IGNhbGxpbmdVaWQsCiAgICAgICAgICAgICAgICAgIiVzIHVpZCAlZCB0cmllZCB0byBwYXNzIGl0c2VsZiBvZmYgYXMgJWQiLAogICAgICAgICAgICAgICAgIF9fRlVOQ1RJT05fXywgY2FsbGluZ1VpZCwgY2xpZW50VWlkKTsKQEAgLTc2Nyw2ICs3NDYsNyBAQAogICAgICAgICBvdXRwdXQuYWZGcmFtZUNvdW50ID0gdGhyZWFkLT5mcmFtZUNvdW50KCk7CiAgICAgICAgIG91dHB1dC5hZlNhbXBsZVJhdGUgPSB0aHJlYWQtPnNhbXBsZVJhdGUoKTsKICAgICAgICAgb3V0cHV0LmFmTGF0ZW5jeU1zID0gdGhyZWFkLT5sYXRlbmN5KCk7CisgICAgICAgIG91dHB1dC50cmFja0lkID0gdHJhY2sgPT0gbnVsbHB0ciA/IC0xIDogdHJhY2stPmlkKCk7CiAKICAgICAgICAgLy8gbW92ZSBlZmZlY3QgY2hhaW4gdG8gdGhpcyBvdXRwdXQgdGhyZWFkIGlmIGFuIGVmZmVjdCBvbiBzYW1lIHNlc3Npb24gd2FzIHdhaXRpbmcKICAgICAgICAgLy8gZm9yIGEgdHJhY2sgdG8gYmUgY3JlYXRlZApAQCAtODEzLDcgKzc5Myw3IEBACiAKIEV4aXQ6CiAgICAgaWYgKGxTdGF0dXMgIT0gTk9fRVJST1IgJiYgb3V0cHV0Lm91dHB1dElkICE9IEFVRElPX0lPX0hBTkRMRV9OT05FKSB7Ci0gICAgICAgIEF1ZGlvU3lzdGVtOjpyZWxlYXNlT3V0cHV0KG91dHB1dC5vdXRwdXRJZCwgc3RyZWFtVHlwZSwgc2Vzc2lvbklkKTsKKyAgICAgICAgQXVkaW9TeXN0ZW06OnJlbGVhc2VPdXRwdXQocG9ydElkKTsKICAgICB9CiAgICAgKnN0YXR1cyA9IGxTdGF0dXM7CiAgICAgcmV0dXJuIHRyYWNrSGFuZGxlOwpAQCAtMTA3OCw5ICsxMDU4LDkgQEAKICAgICAgICAgQUxPR1coImNoZWNrU3RyZWFtVHlwZSgpIGludmFsaWQgc3RyZWFtICVkIiwgc3RyZWFtKTsKICAgICAgICAgcmV0dXJuIEJBRF9WQUxVRTsKICAgICB9Ci0gICAgcGlkX3QgY2FsbGVyID0gSVBDVGhyZWFkU3RhdGU6OnNlbGYoKS0+Z2V0Q2FsbGluZ1BpZCgpOwotICAgIGlmICh1aW50MzJfdChzdHJlYW0pID49IEFVRElPX1NUUkVBTV9QVUJMSUNfQ05UICYmIGNhbGxlciAhPSBnZXRwaWRfY2FjaGVkKSB7Ci0gICAgICAgIEFMT0dXKCJjaGVja1N0cmVhbVR5cGUoKSBwaWQgJWQgY2Fubm90IHVzZSBpbnRlcm5hbCBzdHJlYW0gdHlwZSAlZCIsIGNhbGxlciwgc3RyZWFtKTsKKyAgICBjb25zdCB1aWRfdCBjYWxsZXJVaWQgPSBJUENUaHJlYWRTdGF0ZTo6c2VsZigpLT5nZXRDYWxsaW5nVWlkKCk7CisgICAgaWYgKHVpbnQzMl90KHN0cmVhbSkgPj0gQVVESU9fU1RSRUFNX1BVQkxJQ19DTlQgJiYgIWlzQXVkaW9TZXJ2ZXJVaWQoY2FsbGVyVWlkKSkgeworICAgICAgICBBTE9HVygiY2hlY2tTdHJlYW1UeXBlKCkgdWlkICVkIGNhbm5vdCB1c2UgaW50ZXJuYWwgc3RyZWFtIHR5cGUgJWQiLCBjYWxsZXJVaWQsIHN0cmVhbSk7CiAgICAgICAgIHJldHVybiBQRVJNSVNTSU9OX0RFTklFRDsKICAgICB9CiAKQEAgLTExODAsNiArMTE2MCwyMyBAQAogICAgIH0KIH0KIAorLy8gZm9yd2FyZEF1ZGlvSHdTeW5jVG9Eb3duc3RyZWFtUGF0Y2hlc19sKCkgbXVzdCBiZSBjYWxsZWQgd2l0aCBBdWRpb0ZsaW5nZXI6Om1Mb2NrIGhlbGQKK3ZvaWQgQXVkaW9GbGluZ2VyOjpmb3J3YXJkUGFyYW1ldGVyc1RvRG93bnN0cmVhbVBhdGNoZXNfbCgKKyAgICAgICAgYXVkaW9faW9faGFuZGxlX3QgdXBTdHJlYW0sIGNvbnN0IFN0cmluZzgmIGtleVZhbHVlUGFpcnMsCisgICAgICAgIHN0ZDo6ZnVuY3Rpb248Ym9vbChjb25zdCBzcDxQbGF5YmFja1RocmVhZD4mKT4gdXNlVGhyZWFkKQoreworICAgIHN0ZDo6dmVjdG9yPFBhdGNoUGFuZWw6OlNvZnR3YXJlUGF0Y2g+IHN3UGF0Y2hlczsKKyAgICBpZiAobVBhdGNoUGFuZWwuZ2V0RG93bnN0cmVhbVNvZnR3YXJlUGF0Y2hlcyh1cFN0cmVhbSwgJnN3UGF0Y2hlcykgIT0gT0spIHJldHVybjsKKyAgICBBTE9HVl9JRighc3dQYXRjaGVzLmVtcHR5KCksICIlcyBmb3VuZCAlenUgZG93bnN0cmVhbSBwYXRjaGVzIGZvciBzdHJlYW0gSUQgJWQiLAorICAgICAgICAgICAgX19mdW5jX18sIHN3UGF0Y2hlcy5zaXplKCksIHVwU3RyZWFtKTsKKyAgICBmb3IgKGNvbnN0IGF1dG8mIHN3UGF0Y2ggOiBzd1BhdGNoZXMpIHsKKyAgICAgICAgc3A8UGxheWJhY2tUaHJlYWQ+IGRvd25TdHJlYW0gPSBjaGVja1BsYXliYWNrVGhyZWFkX2woc3dQYXRjaC5nZXRQbGF5YmFja1RocmVhZEhhbmRsZSgpKTsKKyAgICAgICAgaWYgKGRvd25TdHJlYW0gIT0gTlVMTCAmJiAodXNlVGhyZWFkID09IG51bGxwdHIgfHwgdXNlVGhyZWFkKGRvd25TdHJlYW0pKSkgeworICAgICAgICAgICAgZG93blN0cmVhbS0+c2V0UGFyYW1ldGVycyhrZXlWYWx1ZVBhaXJzKTsKKyAgICAgICAgfQorICAgIH0KK30KKwogLy8gRmlsdGVyIHJlc2VydmVkIGtleXMgZnJvbSBzZXRQYXJhbWV0ZXJzKCkgYmVmb3JlIGZvcndhcmRpbmcgdG8gYXVkaW8gSEFMIG9yIGFjdGluZyB1cG9uLgogLy8gU29tZSBrZXlzIGFyZSB1c2VkIGZvciBhdWRpbyByb3V0aW5nIGFuZCBhdWRpbyBwYXRoIGNvbmZpZ3VyYXRpb24gYW5kIHNob3VsZCBiZSByZXNlcnZlZCBmb3IgdXNlCiAvLyBieSBhdWRpbyBwb2xpY3kgYW5kIGF1ZGlvIGZsaW5nZXIgZm9yIGZ1bmN0aW9uYWwsIHByaXZhY3kgYW5kIHNlY3VyaXR5IHJlYXNvbnMuCkBAIC0xMjAwLDIzICsxMTk3LDM5IEBACiAgICAgICAgIFN0cmluZzgoQXVkaW9QYXJhbWV0ZXI6OmtleVN0cmVhbVN1cHBvcnRlZFNhbXBsaW5nUmF0ZXMpLAogICAgIH07CiAKLSAgICAvLyBtdWx0aXVzZXIgZnJpZW5kbHkgYXBwIElEIGNoZWNrIGZvciByZXF1ZXN0cyBjb21pbmcgZnJvbSBhdWRpb3NlcnZlcgotICAgIGlmIChtdWx0aXVzZXJfZ2V0X2FwcF9pZChjYWxsaW5nVWlkKSA9PSBBSURfQVVESU9TRVJWRVIpIHsKLSAgICAgICAgcmV0dXJuOworICAgIGlmIChpc0F1ZGlvU2VydmVyVWlkKGNhbGxpbmdVaWQpKSB7CisgICAgICAgIHJldHVybjsgLy8gbm8gbmVlZCB0byBmaWx0ZXIgaWYgYXVkaW9zZXJ2ZXIuCiAgICAgfQogCiAgICAgQXVkaW9QYXJhbWV0ZXIgcGFyYW0gPSBBdWRpb1BhcmFtZXRlcihrZXlWYWx1ZVBhaXJzKTsKICAgICBTdHJpbmc4IHZhbHVlOworICAgIEF1ZGlvUGFyYW1ldGVyIHJlamVjdGVkUGFyYW07CiAgICAgZm9yIChhdXRvJiBrZXkgOiBrUmVzZXJ2ZWRQYXJhbWV0ZXJzKSB7CiAgICAgICAgIGlmIChwYXJhbS5nZXQoa2V5LCB2YWx1ZSkgPT0gTk9fRVJST1IpIHsKLSAgICAgICAgICAgIEFMT0dXKCIlczogZmlsdGVyaW5nIGtleSAlcyB2YWx1ZSAlcyBmcm9tIHVpZCAlZCIsCi0gICAgICAgICAgICAgICAgICBfX2Z1bmNfXywga2V5LnN0cmluZygpLCB2YWx1ZS5zdHJpbmcoKSwgY2FsbGluZ1VpZCk7CisgICAgICAgICAgICByZWplY3RlZFBhcmFtLmFkZChrZXksIHZhbHVlKTsKICAgICAgICAgICAgIHBhcmFtLnJlbW92ZShrZXkpOwogICAgICAgICB9CiAgICAgfQorICAgIGxvZ0ZpbHRlcmVkUGFyYW1ldGVycyhwYXJhbS5zaXplKCkgKyByZWplY3RlZFBhcmFtLnNpemUoKSwga2V5VmFsdWVQYWlycywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgcmVqZWN0ZWRQYXJhbS5zaXplKCksIHJlamVjdGVkUGFyYW0udG9TdHJpbmcoKSwgY2FsbGluZ1VpZCk7CiAgICAga2V5VmFsdWVQYWlycyA9IHBhcmFtLnRvU3RyaW5nKCk7CiB9CiAKK3ZvaWQgQXVkaW9GbGluZ2VyOjpsb2dGaWx0ZXJlZFBhcmFtZXRlcnMoc2l6ZV90IG9yaWdpbmFsS1ZQU2l6ZSwgY29uc3QgU3RyaW5nOCYgb3JpZ2luYWxLVlBzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgcmVqZWN0ZWRLVlBTaXplLCBjb25zdCBTdHJpbmc4JiByZWplY3RlZEtWUHMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpZF90IGNhbGxpbmdVaWQpIHsKKyAgICBhdXRvIHByZWZpeCA9IFN0cmluZzg6OmZvcm1hdCgiVUlEICU1ZCIsIGNhbGxpbmdVaWQpOworICAgIGF1dG8gc3VmZml4ID0gU3RyaW5nODo6Zm9ybWF0KCIlenUgS1ZQIHJlY2VpdmVkOiAlcyIsIG9yaWdpbmFsS1ZQU2l6ZSwgb3JpZ2luYWxLVlBzLmNfc3RyKCkpOworICAgIGlmIChyZWplY3RlZEtWUFNpemUgIT0gMCkgeworICAgICAgICBhdXRvIGVycm9yID0gU3RyaW5nODo6Zm9ybWF0KCIlenUgS1ZQIHJlamVjdGVkOiAlcyIsIHJlamVjdGVkS1ZQU2l6ZSwgcmVqZWN0ZWRLVlBzLmNfc3RyKCkpOworICAgICAgICBBTE9HVygiJXM6ICVzLCAlcywgJXMiLCBfX2Z1bmNfXywgcHJlZml4LmNfc3RyKCksIGVycm9yLmNfc3RyKCksIHN1ZmZpeC5jX3N0cigpKTsKKyAgICAgICAgbVJlamVjdGVkU2V0UGFyYW1ldGVyTG9nLmxvZygiJXMsICVzLCAlcyIsIHByZWZpeC5jX3N0cigpLCBlcnJvci5jX3N0cigpLCBzdWZmaXguY19zdHIoKSk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgYXV0byYgbG9nZ2VyID0gKGlzU2VydmljZVVpZChjYWxsaW5nVWlkKSA/IG1TeXN0ZW1TZXRQYXJhbWV0ZXJMb2cgOiBtQXBwU2V0UGFyYW1ldGVyTG9nKTsKKyAgICAgICAgbG9nZ2VyLmxvZygiJXMsICVzIiwgcHJlZml4LmNfc3RyKCksIHN1ZmZpeC5jX3N0cigpKTsKKyAgICB9Cit9CisKIHN0YXR1c190IEF1ZGlvRmxpbmdlcjo6c2V0UGFyYW1ldGVycyhhdWRpb19pb19oYW5kbGVfdCBpb0hhbmRsZSwgY29uc3QgU3RyaW5nOCYga2V5VmFsdWVQYWlycykKIHsKICAgICBBTE9HVigic2V0UGFyYW1ldGVycygpOiBpbyAlZCwga2V5dmFsdWUgJXMsIGNhbGxpbmcgcGlkICVkIGNhbGxpbmcgdWlkICVkIiwKQEAgLTEyOTYsNyArMTMwOSw5IEBACiAgICAgICAgIH0KICAgICB9CiAgICAgaWYgKHRocmVhZCAhPSAwKSB7Ci0gICAgICAgIHJldHVybiB0aHJlYWQtPnNldFBhcmFtZXRlcnMoZmlsdGVyZWRLZXlWYWx1ZVBhaXJzKTsKKyAgICAgICAgc3RhdHVzX3QgcmVzdWx0ID0gdGhyZWFkLT5zZXRQYXJhbWV0ZXJzKGZpbHRlcmVkS2V5VmFsdWVQYWlycyk7CisgICAgICAgIGZvcndhcmRQYXJhbWV0ZXJzVG9Eb3duc3RyZWFtUGF0Y2hlc19sKHRocmVhZC0+aWQoKSwgZmlsdGVyZWRLZXlWYWx1ZVBhaXJzKTsKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICB9CiAgICAgcmV0dXJuIEJBRF9WQUxVRTsKIH0KQEAgLTE2MzYsNyArMTY1MSw3IEBACiAgICAgYm9vbCB1cGRhdGVQaWQgPSAoaW5wdXQuY2xpZW50SW5mby5jbGllbnRQaWQgPT0gLTEpOwogICAgIGNvbnN0IHVpZF90IGNhbGxpbmdVaWQgPSBJUENUaHJlYWRTdGF0ZTo6c2VsZigpLT5nZXRDYWxsaW5nVWlkKCk7CiAgICAgdWlkX3QgY2xpZW50VWlkID0gaW5wdXQuY2xpZW50SW5mby5jbGllbnRVaWQ7Ci0gICAgaWYgKCFpc1RydXN0ZWRDYWxsaW5nVWlkKGNhbGxpbmdVaWQpKSB7CisgICAgaWYgKCFpc0F1ZGlvU2VydmVyT3JNZWRpYVNlcnZlclVpZChjYWxsaW5nVWlkKSkgewogICAgICAgICBBTE9HV19JRihjbGllbnRVaWQgIT0gY2FsbGluZ1VpZCwKICAgICAgICAgICAgICAgICAiJXMgdWlkICVkIHRyaWVkIHRvIHBhc3MgaXRzZWxmIG9mZiBhcyAlZCIsCiAgICAgICAgICAgICAgICAgX19GVU5DVElPTl9fLCBjYWxsaW5nVWlkLCBjbGllbnRVaWQpOwpAQCAtMTc1MSw2ICsxNzY2LDcgQEAKIAogICAgIG91dHB1dC5jYmxrID0gcmVjb3JkVHJhY2stPmdldENibGsoKTsKICAgICBvdXRwdXQuYnVmZmVycyA9IHJlY29yZFRyYWNrLT5nZXRCdWZmZXJzKCk7CisgICAgb3V0cHV0LnRyYWNrSWQgPSByZWNvcmRUcmFjay0+aWQoKTsKIAogICAgIC8vIHJldHVybiBoYW5kbGUgdG8gY2xpZW50CiAgICAgcmVjb3JkSGFuZGxlID0gbmV3IFJlY29yZEhhbmRsZShyZWNvcmRUcmFjayk7CkBAIC0xODU0LDYgKzE4NzAsMTAgQEAKIAogICAgICAgICBtSGFyZHdhcmVTdGF0dXMgPSBBVURJT19IV19JRExFOwogICAgIH0KKyAgICBpZiAoc3RyY21wKG5hbWUsIEFVRElPX0hBUkRXQVJFX01PRFVMRV9JRF9NU0QpID09IDApIHsKKyAgICAgICAgLy8gQW4gTVNEIG1vZHVsZSBpcyBpbnNlcnRlZCBiZWZvcmUgaGFyZHdhcmUgbW9kdWxlcyBpbiBvcmRlciB0byBtaXggZW5jb2RlZCBzdHJlYW1zLgorICAgICAgICBmbGFncyA9IHN0YXRpY19jYXN0PEF1ZGlvSHdEZXZpY2U6OkZsYWdzPihmbGFncyB8IEF1ZGlvSHdEZXZpY2U6OkFIV0RfSVNfSU5TRVJUKTsKKyAgICB9CiAKICAgICBhdWRpb19tb2R1bGVfaGFuZGxlX3QgaGFuZGxlID0gKGF1ZGlvX21vZHVsZV9oYW5kbGVfdCkgbmV4dFVuaXF1ZUlkKEFVRElPX1VOSVFVRV9JRF9VU0VfTU9EVUxFKTsKICAgICBtQXVkaW9Id0RldnMuYWRkKGhhbmRsZSwgbmV3IEF1ZGlvSHdEZXZpY2UoaGFuZGxlLCBuYW1lLCBkZXYsIGZsYWdzKSk7CkBAIC0xODg1LDcgKzE5MDUsNyBAQAogc3RhdHVzX3QgQXVkaW9GbGluZ2VyOjpzZXRMb3dSYW1EZXZpY2UoYm9vbCBpc0xvd1JhbURldmljZSwgaW50NjRfdCB0b3RhbE1lbW9yeSkKIHsKICAgICB1aWRfdCB1aWQgPSBJUENUaHJlYWRTdGF0ZTo6c2VsZigpLT5nZXRDYWxsaW5nVWlkKCk7Ci0gICAgaWYgKHVpZCAhPSBBSURfU1lTVEVNKSB7CisgICAgaWYgKCFpc0F1ZGlvU2VydmVyT3JTeXN0ZW1TZXJ2ZXJVaWQodWlkKSkgewogICAgICAgICByZXR1cm4gUEVSTUlTU0lPTl9ERU5JRUQ7CiAgICAgfQogICAgIE11dGV4OjpBdXRvbG9jayBfbChtTG9jayk7CkBAIC0xOTMwLDYgKzE5NTAsMjggQEAKICAgICByZXR1cm4gbUNsaWVudFNoYXJlZEhlYXBTaXplOwogfQogCitzdGF0dXNfdCBBdWRpb0ZsaW5nZXI6OnNldEF1ZGlvUG9ydENvbmZpZyhjb25zdCBzdHJ1Y3QgYXVkaW9fcG9ydF9jb25maWcgKmNvbmZpZykKK3sKKyAgICBBTE9HVihfX2Z1bmNfXyk7CisKKyAgICBhdWRpb19tb2R1bGVfaGFuZGxlX3QgbW9kdWxlOworICAgIGlmIChjb25maWctPnR5cGUgPT0gQVVESU9fUE9SVF9UWVBFX0RFVklDRSkgeworICAgICAgICBtb2R1bGUgPSBjb25maWctPmV4dC5kZXZpY2UuaHdfbW9kdWxlOworICAgIH0gZWxzZSB7CisgICAgICAgIG1vZHVsZSA9IGNvbmZpZy0+ZXh0Lm1peC5od19tb2R1bGU7CisgICAgfQorCisgICAgTXV0ZXg6OkF1dG9sb2NrIF9sKG1Mb2NrKTsKKyAgICBzc2l6ZV90IGluZGV4ID0gbUF1ZGlvSHdEZXZzLmluZGV4T2ZLZXkobW9kdWxlKTsKKyAgICBpZiAoaW5kZXggPCAwKSB7CisgICAgICAgIEFMT0dXKCIlcygpIGJhZCBodyBtb2R1bGUgJWQiLCBfX2Z1bmNfXywgbW9kdWxlKTsKKyAgICAgICAgcmV0dXJuIEJBRF9WQUxVRTsKKyAgICB9CisKKyAgICBBdWRpb0h3RGV2aWNlICphdWRpb0h3RGV2aWNlID0gbUF1ZGlvSHdEZXZzLnZhbHVlQXQoaW5kZXgpOworICAgIHJldHVybiBhdWRpb0h3RGV2aWNlLT5od0RldmljZSgpLT5zZXRBdWRpb1BvcnRDb25maWcoY29uZmlnKTsKK30KKwogYXVkaW9faHdfc3luY190IEF1ZGlvRmxpbmdlcjo6Z2V0QXVkaW9Id1N5bmNGb3JTZXNzaW9uKGF1ZGlvX3Nlc3Npb25fdCBzZXNzaW9uSWQpCiB7CiAgICAgTXV0ZXg6OkF1dG9sb2NrIF9sKG1Mb2NrKTsKQEAgLTE5NzUsNyArMjAxNywxMCBAQAogICAgICAgICBpZiAoc2Vzc2lvbnMgJiBUaHJlYWRCYXNlOjpUUkFDS19TRVNTSU9OKSB7CiAgICAgICAgICAgICBBdWRpb1BhcmFtZXRlciBwYXJhbSA9IEF1ZGlvUGFyYW1ldGVyKCk7CiAgICAgICAgICAgICBwYXJhbS5hZGRJbnQoU3RyaW5nOChBdWRpb1BhcmFtZXRlcjo6a2V5U3RyZWFtSHdBdlN5bmMpLCB2YWx1ZSk7Ci0gICAgICAgICAgICB0aHJlYWQtPnNldFBhcmFtZXRlcnMocGFyYW0udG9TdHJpbmcoKSk7CisgICAgICAgICAgICBTdHJpbmc4IGtleVZhbHVlUGFpcnMgPSBwYXJhbS50b1N0cmluZygpOworICAgICAgICAgICAgdGhyZWFkLT5zZXRQYXJhbWV0ZXJzKGtleVZhbHVlUGFpcnMpOworICAgICAgICAgICAgZm9yd2FyZFBhcmFtZXRlcnNUb0Rvd25zdHJlYW1QYXRjaGVzX2wodGhyZWFkLT5pZCgpLCBrZXlWYWx1ZVBhaXJzLAorICAgICAgICAgICAgICAgICAgICBbXShjb25zdCBzcDxQbGF5YmFja1RocmVhZD4mIHRocmVhZCkgeyByZXR1cm4gdGhyZWFkLT51c2VzSHdBdlN5bmMoKTsgfSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgIH0KQEAgLTIwMjEsNyArMjA2NiwxMCBAQAogICAgICAgICBBTE9HVigic2V0QXVkaW9Id1N5bmNGb3JTZXNzaW9uX2wgZm91bmQgSUQgJWQgZm9yIHNlc3Npb24gJWQiLCBzeW5jSWQsIHNlc3Npb25JZCk7CiAgICAgICAgIEF1ZGlvUGFyYW1ldGVyIHBhcmFtID0gQXVkaW9QYXJhbWV0ZXIoKTsKICAgICAgICAgcGFyYW0uYWRkSW50KFN0cmluZzgoQXVkaW9QYXJhbWV0ZXI6OmtleVN0cmVhbUh3QXZTeW5jKSwgc3luY0lkKTsKLSAgICAgICAgdGhyZWFkLT5zZXRQYXJhbWV0ZXJzKHBhcmFtLnRvU3RyaW5nKCkpOworICAgICAgICBTdHJpbmc4IGtleVZhbHVlUGFpcnMgPSBwYXJhbS50b1N0cmluZygpOworICAgICAgICB0aHJlYWQtPnNldFBhcmFtZXRlcnMoa2V5VmFsdWVQYWlycyk7CisgICAgICAgIGZvcndhcmRQYXJhbWV0ZXJzVG9Eb3duc3RyZWFtUGF0Y2hlc19sKHRocmVhZC0+aWQoKSwga2V5VmFsdWVQYWlycywKKyAgICAgICAgICAgICAgICBbXShjb25zdCBzcDxQbGF5YmFja1RocmVhZD4mIHRocmVhZCkgeyByZXR1cm4gdGhyZWFkLT51c2VzSHdBdlN5bmMoKTsgfSk7CiAgICAgfQogfQogCkBAIC0yMTExLDYgKzIxNTksNyBAQAogICAgICAgICAgICAgICAgICAgICAgICpvdXRwdXQsIHRocmVhZC5nZXQoKSk7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBtUGxheWJhY2tUaHJlYWRzLmFkZCgqb3V0cHV0LCB0aHJlYWQpOworICAgICAgICAgICAgbVBhdGNoUGFuZWwubm90aWZ5U3RyZWFtT3BlbmVkKG91dEh3RGV2LCAqb3V0cHV0KTsKICAgICAgICAgICAgIHJldHVybiB0aHJlYWQ7CiAgICAgICAgIH0KICAgICB9CkBAIC0yMjA5LDYgKzIyNTgsOCBAQAogICAgICAgICBpZiAocGxheWJhY2tUaHJlYWQgIT0gTlVMTCkgewogICAgICAgICAgICAgQUxPR1YoImNsb3NlT3V0cHV0KCkgJWQiLCBvdXRwdXQpOwogCisgICAgICAgICAgICBkdW1wVG9UaHJlYWRMb2dfbChwbGF5YmFja1RocmVhZCk7CisKICAgICAgICAgICAgIGlmIChwbGF5YmFja1RocmVhZC0+dHlwZSgpID09IFRocmVhZEJhc2U6Ok1JWEVSKSB7CiAgICAgICAgICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtUGxheWJhY2tUaHJlYWRzLnNpemUoKTsgaSsrKSB7CiAgICAgICAgICAgICAgICAgICAgIGlmIChtUGxheWJhY2tUaHJlYWRzLnZhbHVlQXQoaSktPmlzRHVwbGljYXRpbmcoKSkgewpAQCAtMjI0MCwxMiArMjI5MSwxNCBAQAogICAgICAgICAgICAgaWYgKG1tYXBUaHJlYWQgPT0gMCkgewogICAgICAgICAgICAgICAgIHJldHVybiBCQURfVkFMVUU7CiAgICAgICAgICAgICB9CisgICAgICAgICAgICBkdW1wVG9UaHJlYWRMb2dfbChtbWFwVGhyZWFkKTsKICAgICAgICAgICAgIG1NbWFwVGhyZWFkcy5yZW1vdmVJdGVtKG91dHB1dCk7CiAgICAgICAgICAgICBBTE9HRCgiY2xvc2luZyBtbWFwVGhyZWFkICVwIiwgbW1hcFRocmVhZC5nZXQoKSk7CiAgICAgICAgIH0KICAgICAgICAgY29uc3Qgc3A8QXVkaW9Jb0Rlc2NyaXB0b3I+IGlvRGVzYyA9IG5ldyBBdWRpb0lvRGVzY3JpcHRvcigpOwogICAgICAgICBpb0Rlc2MtPm1Jb0hhbmRsZSA9IG91dHB1dDsKICAgICAgICAgaW9Db25maWdDaGFuZ2VkKEFVRElPX09VVFBVVF9DTE9TRUQsIGlvRGVzYyk7CisgICAgICAgIG1QYXRjaFBhbmVsLm5vdGlmeVN0cmVhbUNsb3NlZChvdXRwdXQpOwogICAgIH0KICAgICAvLyBUaGUgdGhyZWFkIGVudGl0eSAoYWN0aXZlIHVuaXQgb2YgZXhlY3V0aW9uKSBpcyBubyBsb25nZXIgcnVubmluZyBoZXJlLAogICAgIC8vIGJ1dCB0aGUgVGhyZWFkQmFzZSBjb250YWluZXIgc3RpbGwgZXhpc3RzLgpAQCAtMjI3NCw3ICsyMzI3LDcgQEAKICAgICBkZWxldGUgb3V0OwogfQogCi12b2lkIEF1ZGlvRmxpbmdlcjo6Y2xvc2VPdXRwdXRJbnRlcm5hbF9sKGNvbnN0IHNwPFBsYXliYWNrVGhyZWFkPiYgdGhyZWFkKQordm9pZCBBdWRpb0ZsaW5nZXI6OmNsb3NlVGhyZWFkSW50ZXJuYWxfbChjb25zdCBzcDxQbGF5YmFja1RocmVhZD4mIHRocmVhZCkKIHsKICAgICBtUGxheWJhY2tUaHJlYWRzLnJlbW92ZUl0ZW0odGhyZWFkLT5tSWQpOwogICAgIHRocmVhZC0+ZXhpdCgpOwpAQCAtMjM1MCw2ICsyNDAzLDkgQEAKICAgICAgICAgcmV0dXJuIDA7CiAgICAgfQogCisgICAgLy8gU29tZSBmbGFncyBhcmUgc3BlY2lmaWMgdG8gZnJhbWV3b3JrIGFuZCBtdXN0IG5vdCBsZWFrIHRvIHRoZSBIQUwuCisgICAgZmxhZ3MgPSBzdGF0aWNfY2FzdDxhdWRpb19pbnB1dF9mbGFnc190PihmbGFncyAmIH5BVURJT19JTlBVVF9GUkFNRVdPUktfRkxBR1MpOworCiAgICAgLy8gQXVkaW8gUG9saWN5IGNhbiByZXF1ZXN0IGEgc3BlY2lmaWMgaGFuZGxlIGZvciBoYXJkd2FyZSBob3R3b3JkLgogICAgIC8vIFRoZSBnb2FsIGhlcmUgaXMgbm90IHRvIHJlLW9wZW4gYW4gYWxyZWFkeSBvcGVuZWQgaW5wdXQuCiAgICAgLy8gSXQgaXMgdG8gdXNlIGEgcHJlLWFzc2lnbmVkIEkvTyBoYW5kbGUuCkBAIC0yNDA3LDU1ICsyNDYzLDYgQEAKICAgICAgICAgICAgICAgICAgICAgdGhyZWFkLmdldCgpKTsKICAgICAgICAgICAgIHJldHVybiB0aHJlYWQ7CiAgICAgICAgIH0gZWxzZSB7Ci0jaWZkZWYgVEVFX1NJTksKLSAgICAgICAgICAgIC8vIFRyeSB0byByZS11c2UgbW9zdCByZWNlbnRseSB1c2VkIFBpcGUgdG8gYXJjaGl2ZSBhIGNvcHkgb2YgaW5wdXQgZm9yIGR1bXBzeXMsCi0gICAgICAgICAgICAvLyBvciAocmUtKWNyZWF0ZSBpZiBjdXJyZW50IFBpcGUgaXMgaWRsZSBhbmQgZG9lcyBub3QgbWF0Y2ggdGhlIG5ldyBmb3JtYXQKLSAgICAgICAgICAgIHNwPE5CQUlPX1Npbms+IHRlZVNpbms7Ci0gICAgICAgICAgICBlbnVtIHsKLSAgICAgICAgICAgICAgICBURUVfU0lOS19OTywgICAgLy8gZG9uJ3QgY29weSBpbnB1dAotICAgICAgICAgICAgICAgIFRFRV9TSU5LX05FVywgICAvLyBjb3B5IGlucHV0IHVzaW5nIGEgbmV3IHBpcGUKLSAgICAgICAgICAgICAgICBURUVfU0lOS19PTEQsICAgLy8gY29weSBpbnB1dCB1c2luZyBhbiBleGlzdGluZyBwaXBlCi0gICAgICAgICAgICB9IGtpbmQ7Ci0gICAgICAgICAgICBOQkFJT19Gb3JtYXQgZm9ybWF0ID0gRm9ybWF0X2Zyb21fU1JfQyhoYWxjb25maWcuc2FtcGxlX3JhdGUsCi0gICAgICAgICAgICAgICAgICAgIGF1ZGlvX2NoYW5uZWxfY291bnRfZnJvbV9pbl9tYXNrKGhhbGNvbmZpZy5jaGFubmVsX21hc2spLCBoYWxjb25maWcuZm9ybWF0KTsKLSAgICAgICAgICAgIGlmICghbVRlZVNpbmtJbnB1dEVuYWJsZWQpIHsKLSAgICAgICAgICAgICAgICBraW5kID0gVEVFX1NJTktfTk87Ci0gICAgICAgICAgICB9IGVsc2UgaWYgKCFGb3JtYXRfaXNWYWxpZChmb3JtYXQpKSB7Ci0gICAgICAgICAgICAgICAga2luZCA9IFRFRV9TSU5LX05POwotICAgICAgICAgICAgfSBlbHNlIGlmIChtUmVjb3JkVGVlU2luayA9PSAwKSB7Ci0gICAgICAgICAgICAgICAga2luZCA9IFRFRV9TSU5LX05FVzsKLSAgICAgICAgICAgIH0gZWxzZSBpZiAobVJlY29yZFRlZVNpbmstPmdldFN0cm9uZ0NvdW50KCkgIT0gMSkgewotICAgICAgICAgICAgICAgIGtpbmQgPSBURUVfU0lOS19OTzsKLSAgICAgICAgICAgIH0gZWxzZSBpZiAoRm9ybWF0X2lzRXF1YWwoZm9ybWF0LCBtUmVjb3JkVGVlU2luay0+Zm9ybWF0KCkpKSB7Ci0gICAgICAgICAgICAgICAga2luZCA9IFRFRV9TSU5LX09MRDsKLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAga2luZCA9IFRFRV9TSU5LX05FVzsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHN3aXRjaCAoa2luZCkgewotICAgICAgICAgICAgY2FzZSBURUVfU0lOS19ORVc6IHsKLSAgICAgICAgICAgICAgICBQaXBlICpwaXBlID0gbmV3IFBpcGUobVRlZVNpbmtJbnB1dEZyYW1lcywgZm9ybWF0KTsKLSAgICAgICAgICAgICAgICBzaXplX3QgbnVtQ291bnRlck9mZmVycyA9IDA7Ci0gICAgICAgICAgICAgICAgY29uc3QgTkJBSU9fRm9ybWF0IG9mZmVyc1sxXSA9IHtmb3JtYXR9OwotICAgICAgICAgICAgICAgIHNzaXplX3QgaW5kZXggPSBwaXBlLT5uZWdvdGlhdGUob2ZmZXJzLCAxLCBOVUxMLCBudW1Db3VudGVyT2ZmZXJzKTsKLSAgICAgICAgICAgICAgICBBTE9HX0FTU0VSVChpbmRleCA9PSAwKTsKLSAgICAgICAgICAgICAgICBQaXBlUmVhZGVyICpwaXBlUmVhZGVyID0gbmV3IFBpcGVSZWFkZXIoKnBpcGUpOwotICAgICAgICAgICAgICAgIG51bUNvdW50ZXJPZmZlcnMgPSAwOwotICAgICAgICAgICAgICAgIGluZGV4ID0gcGlwZVJlYWRlci0+bmVnb3RpYXRlKG9mZmVycywgMSwgTlVMTCwgbnVtQ291bnRlck9mZmVycyk7Ci0gICAgICAgICAgICAgICAgQUxPR19BU1NFUlQoaW5kZXggPT0gMCk7Ci0gICAgICAgICAgICAgICAgbVJlY29yZFRlZVNpbmsgPSBwaXBlOwotICAgICAgICAgICAgICAgIG1SZWNvcmRUZWVTb3VyY2UgPSBwaXBlUmVhZGVyOwotICAgICAgICAgICAgICAgIHRlZVNpbmsgPSBwaXBlOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGNhc2UgVEVFX1NJTktfT0xEOgotICAgICAgICAgICAgICAgIHRlZVNpbmsgPSBtUmVjb3JkVGVlU2luazsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGNhc2UgVEVFX1NJTktfTk86Ci0gICAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotI2VuZGlmCi0KICAgICAgICAgICAgIC8vIFN0YXJ0IHJlY29yZCB0aHJlYWQKICAgICAgICAgICAgIC8vIFJlY29yZFRocmVhZCByZXF1aXJlcyBib3RoIGlucHV0IGFuZCBvdXRwdXQgZGV2aWNlIGluZGljYXRpb24gdG8gZm9yd2FyZCB0byBhdWRpbwogICAgICAgICAgICAgLy8gcHJlIHByb2Nlc3NpbmcgbW9kdWxlcwpAQCAtMjQ2NSw5ICsyNDcyLDYgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJpbWFyeU91dHB1dERldmljZV9sKCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRldmljZXMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1TeXN0ZW1SZWFkeQotI2lmZGVmIFRFRV9TSU5LCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICwgdGVlU2luawotI2VuZGlmCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgICBtUmVjb3JkVGhyZWFkcy5hZGQoKmlucHV0LCB0aHJlYWQpOwogICAgICAgICAgICAgQUxPR1YoIm9wZW5JbnB1dF9sKCkgY3JlYXRlZCByZWNvcmQgdGhyZWFkOiBJRCAlZCB0aHJlYWQgJXAiLCAqaW5wdXQsIHRocmVhZC5nZXQoKSk7CkBAIC0yNDk2LDYgKzI1MDAsOCBAQAogICAgICAgICBpZiAocmVjb3JkVGhyZWFkICE9IDApIHsKICAgICAgICAgICAgIEFMT0dWKCJjbG9zZUlucHV0KCkgJWQiLCBpbnB1dCk7CiAKKyAgICAgICAgICAgIGR1bXBUb1RocmVhZExvZ19sKHJlY29yZFRocmVhZCk7CisKICAgICAgICAgICAgIC8vIElmIHdlIHN0aWxsIGhhdmUgZWZmZWN0IGNoYWlucywgaXQgbWVhbnMgdGhhdCBhIGNsaWVudCBzdGlsbCBob2xkcyBhIGhhbmRsZQogICAgICAgICAgICAgLy8gb24gYXQgbGVhc3Qgb25lIGVmZmVjdC4gV2UgbXVzdCBlaXRoZXIgbW92ZSB0aGUgY2hhaW4gdG8gYW4gZXhpc3RpbmcgdGhyZWFkIHdpdGggdGhlCiAgICAgICAgICAgICAvLyBzYW1lIHNlc3Npb24gSUQgb3IgcHV0IGl0IGFzaWRlIGluIGNhc2UgYSBuZXcgcmVjb3JkIHRocmVhZCBpcyBvcGVuZWQgZm9yIGEKQEAgLTI1MzgsNiArMjU0NCw3IEBACiAgICAgICAgICAgICBpZiAobW1hcFRocmVhZCA9PSAwKSB7CiAgICAgICAgICAgICAgICAgcmV0dXJuIEJBRF9WQUxVRTsKICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGR1bXBUb1RocmVhZExvZ19sKG1tYXBUaHJlYWQpOwogICAgICAgICAgICAgbU1tYXBUaHJlYWRzLnJlbW92ZUl0ZW0oaW5wdXQpOwogICAgICAgICB9CiAgICAgICAgIGNvbnN0IHNwPEF1ZGlvSW9EZXNjcmlwdG9yPiBpb0Rlc2MgPSBuZXcgQXVkaW9Jb0Rlc2NyaXB0b3IoKTsKQEAgLTI1NjcsNyArMjU3NCw3IEBACiAgICAgZGVsZXRlIGluOwogfQogCi12b2lkIEF1ZGlvRmxpbmdlcjo6Y2xvc2VJbnB1dEludGVybmFsX2woY29uc3Qgc3A8UmVjb3JkVGhyZWFkPiYgdGhyZWFkKQordm9pZCBBdWRpb0ZsaW5nZXI6OmNsb3NlVGhyZWFkSW50ZXJuYWxfbChjb25zdCBzcDxSZWNvcmRUaHJlYWQ+JiB0aHJlYWQpCiB7CiAgICAgbVJlY29yZFRocmVhZHMucmVtb3ZlSXRlbSh0aHJlYWQtPm1JZCk7CiAgICAgY2xvc2VJbnB1dEZpbmlzaCh0aHJlYWQpOwpAQCAtMjYwNSw3ICsyNjEyLDggQEAKICAgICBNdXRleDo6QXV0b2xvY2sgX2wobUxvY2spOwogICAgIHBpZF90IGNhbGxlciA9IElQQ1RocmVhZFN0YXRlOjpzZWxmKCktPmdldENhbGxpbmdQaWQoKTsKICAgICBBTE9HVigiYWNxdWlyaW5nICVkIGZyb20gJWQsIGZvciAlZCIsIGF1ZGlvU2Vzc2lvbiwgY2FsbGVyLCBwaWQpOwotICAgIGlmIChwaWQgIT0gLTEgJiYgKGNhbGxlciA9PSBnZXRwaWRfY2FjaGVkKSkgeworICAgIGNvbnN0IHVpZF90IGNhbGxlclVpZCA9IElQQ1RocmVhZFN0YXRlOjpzZWxmKCktPmdldENhbGxpbmdVaWQoKTsKKyAgICBpZiAocGlkICE9IC0xICYmIGlzQXVkaW9TZXJ2ZXJVaWQoY2FsbGVyVWlkKSkgeyAvLyBjaGVjayBtdXN0IG1hdGNoIHJlbGVhc2VBdWRpb1Nlc3Npb25JZCgpCiAgICAgICAgIGNhbGxlciA9IHBpZDsKICAgICB9CiAKQEAgLTI2MzksNyArMjY0Nyw4IEBACiAgICAgTXV0ZXg6OkF1dG9sb2NrIF9sKG1Mb2NrKTsKICAgICBwaWRfdCBjYWxsZXIgPSBJUENUaHJlYWRTdGF0ZTo6c2VsZigpLT5nZXRDYWxsaW5nUGlkKCk7CiAgICAgQUxPR1YoInJlbGVhc2luZyAlZCBmcm9tICVkIGZvciAlZCIsIGF1ZGlvU2Vzc2lvbiwgY2FsbGVyLCBwaWQpOwotICAgIGlmIChwaWQgIT0gLTEgJiYgKGNhbGxlciA9PSBnZXRwaWRfY2FjaGVkKSkgeworICAgIGNvbnN0IHVpZF90IGNhbGxlclVpZCA9IElQQ1RocmVhZFN0YXRlOjpzZWxmKCktPmdldENhbGxpbmdVaWQoKTsKKyAgICBpZiAocGlkICE9IC0xICYmIGlzQXVkaW9TZXJ2ZXJVaWQoY2FsbGVyVWlkKSkgeyAvLyBjaGVjayBtdXN0IG1hdGNoIGFjcXVpcmVBdWRpb1Nlc3Npb25JZCgpCiAgICAgICAgIGNhbGxlciA9IHBpZDsKICAgICB9CiAgICAgc2l6ZV90IG51bSA9IG1BdWRpb1Nlc3Npb25SZWZzLnNpemUoKTsKQEAgLTI2NTYsOSArMjY2NSwxMCBAQAogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAgICAgfQotICAgIC8vIElmIHRoZSBjYWxsZXIgaXMgbWVkaWFzZXJ2ZXIgaXQgaXMgbGlrZWx5IHRoYXQgdGhlIHNlc3Npb24gYmVpbmcgcmVsZWFzZWQgd2FzIGFjcXVpcmVkCisgICAgLy8gSWYgdGhlIGNhbGxlciBpcyBhdWRpb3NlcnZlciBpdCBpcyBsaWtlbHkgdGhhdCB0aGUgc2Vzc2lvbiBiZWluZyByZWxlYXNlZCB3YXMgYWNxdWlyZWQKICAgICAvLyBvbiBiZWhhbGYgb2YgYSBwcm9jZXNzIG5vdCBpbiBub3RpZmljYXRpb24gY2xpZW50cyBhbmQgd2UgaWdub3JlIHRoZSB3YXJuaW5nLgotICAgIEFMT0dXX0lGKGNhbGxlciAhPSBnZXRwaWRfY2FjaGVkLCAic2Vzc2lvbiBpZCAlZCBub3QgZm91bmQgZm9yIHBpZCAlZCIsIGF1ZGlvU2Vzc2lvbiwgY2FsbGVyKTsKKyAgICBBTE9HV19JRighaXNBdWRpb1NlcnZlclVpZChjYWxsZXJVaWQpLAorICAgICAgICAgICAgInNlc3Npb24gaWQgJWQgbm90IGZvdW5kIGZvciBwaWQgJWQiLCBhdWRpb1Nlc3Npb24sIGNhbGxlcik7CiB9CiAKIGJvb2wgQXVkaW9GbGluZ2VyOjppc1Nlc3Npb25BY3F1aXJlZF9sKGF1ZGlvX3Nlc3Npb25fdCBhdWRpb1Nlc3Npb24pCkBAIC0yNzMzLDYgKzI3NDMsMTcgQEAKICAgICByZXR1cm47CiB9CiAKKy8vIGR1bXBUb1RocmVhZExvZ19sKCkgbXVzdCBiZSBjYWxsZWQgd2l0aCBBdWRpb0ZsaW5nZXI6Om1Mb2NrIGhlbGQKK3ZvaWQgQXVkaW9GbGluZ2VyOjpkdW1wVG9UaHJlYWRMb2dfbChjb25zdCBzcDxUaHJlYWRCYXNlPiAmdGhyZWFkKQoreworICAgIGF1ZGlvX3V0aWxzOjpGZFRvU3RyaW5nIGZkVG9TdHJpbmc7CisgICAgY29uc3QgaW50IGZkID0gZmRUb1N0cmluZy5mZCgpOworICAgIGlmIChmZCA+PSAwKSB7CisgICAgICAgIHRocmVhZC0+ZHVtcChmZCwge30gLyogYXJncyAqLyk7CisgICAgICAgIG1UaHJlYWRMb2cubG9ncygtMSAvKiB0aW1lICovLCBmZFRvU3RyaW5nLmdldFN0cmluZ0FuZENsb3NlKCkpOworICAgIH0KK30KKwogLy8gY2hlY2tUaHJlYWRfbCgpIG11c3QgYmUgY2FsbGVkIHdpdGggQXVkaW9GbGluZ2VyOjptTG9jayBoZWxkCiBBdWRpb0ZsaW5nZXI6OlRocmVhZEJhc2UgKkF1ZGlvRmxpbmdlcjo6Y2hlY2tUaHJlYWRfbChhdWRpb19pb19oYW5kbGVfdCBpb0hhbmRsZSkgY29uc3QKIHsKQEAgLTI5MzgsMTYgKzI5NTksNzQgQEAKIH0KIAogc3RhdHVzX3QgQXVkaW9GbGluZ2VyOjpnZXRFZmZlY3REZXNjcmlwdG9yKGNvbnN0IGVmZmVjdF91dWlkX3QgKnBVdWlkLAotICAgICAgICBlZmZlY3RfZGVzY3JpcHRvcl90ICpkZXNjcmlwdG9yKSBjb25zdAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGVmZmVjdF91dWlkX3QgKnBUeXBlVXVpZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCBwcmVmZXJyZWRUeXBlRmxhZywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlZmZlY3RfZGVzY3JpcHRvcl90ICpkZXNjcmlwdG9yKSBjb25zdAogeworICAgIGlmIChwVXVpZCA9PSBOVUxMIHx8IHBUeXBlVXVpZCA9PSBOVUxMIHx8IGRlc2NyaXB0b3IgPT0gTlVMTCkgeworICAgICAgICByZXR1cm4gQkFEX1ZBTFVFOworICAgIH0KKwogICAgIE11dGV4OjpBdXRvbG9jayBfbChtTG9jayk7Ci0gICAgaWYgKG1FZmZlY3RzRmFjdG9yeUhhbC5nZXQoKSkgewotICAgICAgICByZXR1cm4gbUVmZmVjdHNGYWN0b3J5SGFsLT5nZXREZXNjcmlwdG9yKHBVdWlkLCBkZXNjcmlwdG9yKTsKLSAgICB9IGVsc2UgeworCisgICAgaWYgKCFtRWZmZWN0c0ZhY3RvcnlIYWwuZ2V0KCkpIHsKICAgICAgICAgcmV0dXJuIC1FTk9ERVY7CiAgICAgfQotfQogCisgICAgc3RhdHVzX3Qgc3RhdHVzID0gTk9fRVJST1I7CisgICAgaWYgKCFFZmZlY3RzRmFjdG9yeUhhbEludGVyZmFjZTo6aXNOdWxsVXVpZChwVXVpZCkpIHsKKyAgICAgICAgLy8gSWYgdXVpZCBpcyBzcGVjaWZpZWQsIHJlcXVlc3QgZWZmZWN0IGRlc2NyaXB0b3IgZnJvbSB0aGF0LgorICAgICAgICBzdGF0dXMgPSBtRWZmZWN0c0ZhY3RvcnlIYWwtPmdldERlc2NyaXB0b3IocFV1aWQsIGRlc2NyaXB0b3IpOworICAgIH0gZWxzZSBpZiAoIUVmZmVjdHNGYWN0b3J5SGFsSW50ZXJmYWNlOjppc051bGxVdWlkKHBUeXBlVXVpZCkpIHsKKyAgICAgICAgLy8gSWYgdXVpZCBpcyBub3Qgc3BlY2lmaWVkLCBsb29rIGZvciBhbiBhdmFpbGFibGUgaW1wbGVtZW50YXRpb24KKyAgICAgICAgLy8gb2YgdGhlIHJlcXVpcmVkIHR5cGUgaW5zdGVhZC4KKworICAgICAgICAvLyBVc2UgYSB0ZW1wb3JhcnkgZGVzY3JpcHRvciB0byBhdm9pZCBtb2RpZnlpbmcgfGRlc2NyaXB0b3J8IGluIHRoZSBmYWlsdXJlIGNhc2UuCisgICAgICAgIGVmZmVjdF9kZXNjcmlwdG9yX3QgZGVzYzsKKyAgICAgICAgZGVzYy5mbGFncyA9IDA7IC8vIHByZXZlbnQgY29tcGlsZXIgd2FybmluZworCisgICAgICAgIHVpbnQzMl90IG51bUVmZmVjdHMgPSAwOworICAgICAgICBzdGF0dXMgPSBtRWZmZWN0c0ZhY3RvcnlIYWwtPnF1ZXJ5TnVtYmVyRWZmZWN0cygmbnVtRWZmZWN0cyk7CisgICAgICAgIGlmIChzdGF0dXMgPCAwKSB7CisgICAgICAgICAgICBBTE9HVygiZ2V0RWZmZWN0RGVzY3JpcHRvcigpIGVycm9yICVkIGZyb20gRmFjdG9yeUhhbCBxdWVyeU51bWJlckVmZmVjdHMiLCBzdGF0dXMpOworICAgICAgICAgICAgcmV0dXJuIHN0YXR1czsKKyAgICAgICAgfQorCisgICAgICAgIGJvb2wgZm91bmQgPSBmYWxzZTsKKyAgICAgICAgZm9yICh1aW50MzJfdCBpID0gMDsgaSA8IG51bUVmZmVjdHM7IGkrKykgeworICAgICAgICAgICAgc3RhdHVzID0gbUVmZmVjdHNGYWN0b3J5SGFsLT5nZXREZXNjcmlwdG9yKGksICZkZXNjKTsKKyAgICAgICAgICAgIGlmIChzdGF0dXMgPCAwKSB7CisgICAgICAgICAgICAgICAgQUxPR1coImdldEVmZmVjdERlc2NyaXB0b3IoKSBlcnJvciAlZCBmcm9tIEZhY3RvcnlIYWwgZ2V0RGVzY3JpcHRvciIsIHN0YXR1cyk7CisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAobWVtY21wKCZkZXNjLnR5cGUsIHBUeXBlVXVpZCwgc2l6ZW9mKGVmZmVjdF91dWlkX3QpKSA9PSAwKSB7CisgICAgICAgICAgICAgICAgLy8gSWYgbWF0Y2hpbmcgdHlwZSBmb3VuZCBzYXZlIGVmZmVjdCBkZXNjcmlwdG9yLgorICAgICAgICAgICAgICAgIGZvdW5kID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICAqZGVzY3JpcHRvciA9IGRlc2M7CisKKyAgICAgICAgICAgICAgICAvLyBJZiB0aGVyZSdzIG5vIHByZWZlcnJlZCBmbGFnIG9yIHRoaXMgZGVzY3JpcHRvciBtYXRjaGVzIHRoZSBwcmVmZXJyZWQKKyAgICAgICAgICAgICAgICAvLyBmbGFnLCBzdWNjZXNzISBJZiB0aGlzIGRlc2NyaXB0b3IgZG9lc24ndCBtYXRjaCB0aGUgcHJlZmVycmVkCisgICAgICAgICAgICAgICAgLy8gZmxhZywgY29udGludWUgZW51bWVyYXRpb24gaW4gY2FzZSBhIGJldHRlciBtYXRjaGluZyB2ZXJzaW9uIG9mIHRoaXMKKyAgICAgICAgICAgICAgICAvLyBlZmZlY3QgdHlwZSBpcyBhdmFpbGFibGUuIE5vdGUgdGhhdCB0aGlzIG1lYW5zIGlmIG5vIGVmZmVjdCB3aXRoIGEKKyAgICAgICAgICAgICAgICAvLyBjb3JyZWN0IGZsYWcgaXMgZm91bmQsIHRoZSBkZXNjcmlwdG9yIHJldHVybmVkIHdpbGwgY29ycmVzcG9uZCB0byB0aGUKKyAgICAgICAgICAgICAgICAvLyBsYXN0IGVmZmVjdCB0aGF0IGF0IGxlYXN0IGhhZCBhIG1hdGNoaW5nIHR5cGUgdXVpZCAoaWYgYW55KS4KKyAgICAgICAgICAgICAgICBpZiAocHJlZmVycmVkVHlwZUZsYWcgPT0gRUZGRUNUX0ZMQUdfVFlQRV9NQVNLIHx8CisgICAgICAgICAgICAgICAgICAgIChkZXNjLmZsYWdzICYgRUZGRUNUX0ZMQUdfVFlQRV9NQVNLKSA9PSBwcmVmZXJyZWRUeXBlRmxhZykgeworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBpZiAoIWZvdW5kKSB7CisgICAgICAgICAgICBzdGF0dXMgPSBOQU1FX05PVF9GT1VORDsKKyAgICAgICAgICAgIEFMT0dXKCJnZXRFZmZlY3REZXNjcmlwdG9yKCk6IEVmZmVjdCBub3QgZm91bmQgYnkgdHlwZS4iKTsKKyAgICAgICAgfQorICAgIH0gZWxzZSB7CisgICAgICAgIHN0YXR1cyA9IEJBRF9WQUxVRTsKKyAgICAgICAgQUxPR0UoImdldEVmZmVjdERlc2NyaXB0b3IoKTogRWl0aGVyIHV1aWQgb3IgdHlwZSB1dWlkIG11c3QgYmUgbm9uLW51bGwgVVVJRHMuIik7CisgICAgfQorICAgIHJldHVybiBzdGF0dXM7Cit9CiAKIHNwPElFZmZlY3Q+IEF1ZGlvRmxpbmdlcjo6Y3JlYXRlRWZmZWN0KAogICAgICAgICBlZmZlY3RfZGVzY3JpcHRvcl90ICpwRGVzYywKQEAgLTI5NjYsNyArMzA0NSw3IEBACiAgICAgZWZmZWN0X2Rlc2NyaXB0b3JfdCBkZXNjOwogCiAgICAgY29uc3QgdWlkX3QgY2FsbGluZ1VpZCA9IElQQ1RocmVhZFN0YXRlOjpzZWxmKCktPmdldENhbGxpbmdVaWQoKTsKLSAgICBpZiAocGlkID09IC0xIHx8ICFpc1RydXN0ZWRDYWxsaW5nVWlkKGNhbGxpbmdVaWQpKSB7CisgICAgaWYgKHBpZCA9PSAtMSB8fCAhaXNBdWRpb1NlcnZlck9yTWVkaWFTZXJ2ZXJVaWQoY2FsbGluZ1VpZCkpIHsKICAgICAgICAgY29uc3QgcGlkX3QgY2FsbGluZ1BpZCA9IElQQ1RocmVhZFN0YXRlOjpzZWxmKCktPmdldENhbGxpbmdQaWQoKTsKICAgICAgICAgQUxPR1dfSUYocGlkICE9IC0xICYmIHBpZCAhPSBjYWxsaW5nUGlkLAogICAgICAgICAgICAgICAgICAiJXMgdWlkICVkIHBpZCAlZCB0cmllZCB0byBwYXNzIGl0c2VsZiBvZmYgYXMgcGlkICVkIiwKQEAgLTI5ODksOCArMzA2OCw4IEBACiAgICAgfQogCiAgICAgLy8gU2Vzc2lvbiBBVURJT19TRVNTSU9OX09VVFBVVF9TVEFHRSBpcyByZXNlcnZlZCBmb3Igb3V0cHV0IHN0YWdlIGVmZmVjdHMKLSAgICAvLyB0aGF0IGNhbiBvbmx5IGJlIGNyZWF0ZWQgYnkgYXVkaW8gcG9saWN5IG1hbmFnZXIgKHJ1bm5pbmcgaW4gc2FtZSBwcm9jZXNzKQotICAgIGlmIChzZXNzaW9uSWQgPT0gQVVESU9fU0VTU0lPTl9PVVRQVVRfU1RBR0UgJiYgZ2V0cGlkX2NhY2hlZCAhPSBwaWQpIHsKKyAgICAvLyB0aGF0IGNhbiBvbmx5IGJlIGNyZWF0ZWQgYnkgYXVkaW8gcG9saWN5IG1hbmFnZXIKKyAgICBpZiAoc2Vzc2lvbklkID09IEFVRElPX1NFU1NJT05fT1VUUFVUX1NUQUdFICYmICFpc0F1ZGlvU2VydmVyVWlkKGNhbGxpbmdVaWQpKSB7CiAgICAgICAgIGxTdGF0dXMgPSBQRVJNSVNTSU9OX0RFTklFRDsKICAgICAgICAgZ290byBFeGl0OwogICAgIH0KQEAgLTMwMDEsNjAgKzMwODAsMTUgQEAKICAgICB9CiAKICAgICB7Ci0gICAgICAgIGlmICghRWZmZWN0c0ZhY3RvcnlIYWxJbnRlcmZhY2U6OmlzTnVsbFV1aWQoJnBEZXNjLT51dWlkKSkgewotICAgICAgICAgICAgLy8gaWYgdXVpZCBpcyBzcGVjaWZpZWQsIHJlcXVlc3QgZWZmZWN0IGRlc2NyaXB0b3IKLSAgICAgICAgICAgIGxTdGF0dXMgPSBtRWZmZWN0c0ZhY3RvcnlIYWwtPmdldERlc2NyaXB0b3IoJnBEZXNjLT51dWlkLCAmZGVzYyk7Ci0gICAgICAgICAgICBpZiAobFN0YXR1cyA8IDApIHsKLSAgICAgICAgICAgICAgICBBTE9HVygiY3JlYXRlRWZmZWN0KCkgZXJyb3IgJWQgZnJvbSBFZmZlY3RHZXREZXNjcmlwdG9yIiwgbFN0YXR1cyk7Ci0gICAgICAgICAgICAgICAgZ290byBFeGl0OwotICAgICAgICAgICAgfQotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgLy8gaWYgdXVpZCBpcyBub3Qgc3BlY2lmaWVkLCBsb29rIGZvciBhbiBhdmFpbGFibGUgaW1wbGVtZW50YXRpb24KLSAgICAgICAgICAgIC8vIG9mIHRoZSByZXF1aXJlZCB0eXBlIGluIGVmZmVjdCBmYWN0b3J5Ci0gICAgICAgICAgICBpZiAoRWZmZWN0c0ZhY3RvcnlIYWxJbnRlcmZhY2U6OmlzTnVsbFV1aWQoJnBEZXNjLT50eXBlKSkgewotICAgICAgICAgICAgICAgIEFMT0dXKCJjcmVhdGVFZmZlY3QoKSBubyBlZmZlY3QgdHlwZSIpOwotICAgICAgICAgICAgICAgIGxTdGF0dXMgPSBCQURfVkFMVUU7Ci0gICAgICAgICAgICAgICAgZ290byBFeGl0OwotICAgICAgICAgICAgfQotICAgICAgICAgICAgdWludDMyX3QgbnVtRWZmZWN0cyA9IDA7Ci0gICAgICAgICAgICBlZmZlY3RfZGVzY3JpcHRvcl90IGQ7Ci0gICAgICAgICAgICBkLmZsYWdzID0gMDsgLy8gcHJldmVudCBjb21waWxlciB3YXJuaW5nCi0gICAgICAgICAgICBib29sIGZvdW5kID0gZmFsc2U7Ci0KLSAgICAgICAgICAgIGxTdGF0dXMgPSBtRWZmZWN0c0ZhY3RvcnlIYWwtPnF1ZXJ5TnVtYmVyRWZmZWN0cygmbnVtRWZmZWN0cyk7Ci0gICAgICAgICAgICBpZiAobFN0YXR1cyA8IDApIHsKLSAgICAgICAgICAgICAgICBBTE9HVygiY3JlYXRlRWZmZWN0KCkgZXJyb3IgJWQgZnJvbSBFZmZlY3RRdWVyeU51bWJlckVmZmVjdHMiLCBsU3RhdHVzKTsKLSAgICAgICAgICAgICAgICBnb3RvIEV4aXQ7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBmb3IgKHVpbnQzMl90IGkgPSAwOyBpIDwgbnVtRWZmZWN0czsgaSsrKSB7Ci0gICAgICAgICAgICAgICAgbFN0YXR1cyA9IG1FZmZlY3RzRmFjdG9yeUhhbC0+Z2V0RGVzY3JpcHRvcihpLCAmZGVzYyk7Ci0gICAgICAgICAgICAgICAgaWYgKGxTdGF0dXMgPCAwKSB7Ci0gICAgICAgICAgICAgICAgICAgIEFMT0dXKCJjcmVhdGVFZmZlY3QoKSBlcnJvciAlZCBmcm9tIEVmZmVjdFF1ZXJ5RWZmZWN0IiwgbFN0YXR1cyk7Ci0gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBpZiAobWVtY21wKCZkZXNjLnR5cGUsICZwRGVzYy0+dHlwZSwgc2l6ZW9mKGVmZmVjdF91dWlkX3QpKSA9PSAwKSB7Ci0gICAgICAgICAgICAgICAgICAgIC8vIElmIG1hdGNoaW5nIHR5cGUgZm91bmQgc2F2ZSBlZmZlY3QgZGVzY3JpcHRvci4gSWYgdGhlIHNlc3Npb24gaXMKLSAgICAgICAgICAgICAgICAgICAgLy8gMCBhbmQgdGhlIGVmZmVjdCBpcyBub3QgYXV4aWxpYXJ5LCBjb250aW51ZSBlbnVtZXJhdGlvbiBpbiBjYXNlCi0gICAgICAgICAgICAgICAgICAgIC8vIGFuIGF1eGlsaWFyeSB2ZXJzaW9uIG9mIHRoaXMgZWZmZWN0IHR5cGUgaXMgYXZhaWxhYmxlCi0gICAgICAgICAgICAgICAgICAgIGZvdW5kID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICAgICAgZCA9IGRlc2M7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChzZXNzaW9uSWQgIT0gQVVESU9fU0VTU0lPTl9PVVRQVVRfTUlYIHx8Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgKGRlc2MuZmxhZ3MgJiBFRkZFQ1RfRkxBR19UWVBFX01BU0spID09IEVGRkVDVF9GTEFHX1RZUEVfQVVYSUxJQVJZKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmICghZm91bmQpIHsKLSAgICAgICAgICAgICAgICBsU3RhdHVzID0gQkFEX1ZBTFVFOwotICAgICAgICAgICAgICAgIEFMT0dXKCJjcmVhdGVFZmZlY3QoKSBlZmZlY3Qgbm90IGZvdW5kIik7Ci0gICAgICAgICAgICAgICAgZ290byBFeGl0OwotICAgICAgICAgICAgfQotICAgICAgICAgICAgLy8gRm9yIHNhbWUgZWZmZWN0IHR5cGUsIGNob3NlIGF1eGlsaWFyeSB2ZXJzaW9uIG92ZXIgaW5zZXJ0IHZlcnNpb24gaWYKLSAgICAgICAgICAgIC8vIGNvbm5lY3QgdG8gb3V0cHV0IG1peCAoQ29tcGxpYW5jZSB0byBPcGVuU0wgRVMpCi0gICAgICAgICAgICBpZiAoc2Vzc2lvbklkID09IEFVRElPX1NFU1NJT05fT1VUUFVUX01JWCAmJgotICAgICAgICAgICAgICAgICAgICAoZC5mbGFncyAmIEVGRkVDVF9GTEFHX1RZUEVfTUFTSykgIT0gRUZGRUNUX0ZMQUdfVFlQRV9BVVhJTElBUlkpIHsKLSAgICAgICAgICAgICAgICBkZXNjID0gZDsKLSAgICAgICAgICAgIH0KKyAgICAgICAgLy8gR2V0IHRoZSBmdWxsIGVmZmVjdCBkZXNjcmlwdG9yIGZyb20gdGhlIHV1aWQvdHlwZS4KKyAgICAgICAgLy8gSWYgdGhlIHNlc3Npb24gaXMgdGhlIG91dHB1dCBtaXgsIHByZWZlciBhbiBhdXhpbGlhcnkgZWZmZWN0LAorICAgICAgICAvLyBvdGhlcndpc2Ugbm8gcHJlZmVyZW5jZS4KKyAgICAgICAgdWludDMyX3QgcHJlZmVycmVkVHlwZSA9IChzZXNzaW9uSWQgPT0gQVVESU9fU0VTU0lPTl9PVVRQVVRfTUlYID8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBFRkZFQ1RfRkxBR19UWVBFX0FVWElMSUFSWSA6IEVGRkVDVF9GTEFHX1RZUEVfTUFTSyk7CisgICAgICAgIGxTdGF0dXMgPSBnZXRFZmZlY3REZXNjcmlwdG9yKCZwRGVzYy0+dXVpZCwgJnBEZXNjLT50eXBlLCBwcmVmZXJyZWRUeXBlLCAmZGVzYyk7CisgICAgICAgIGlmIChsU3RhdHVzIDwgMCkgeworICAgICAgICAgICAgQUxPR1coImNyZWF0ZUVmZmVjdCgpIGVycm9yICVkIGZyb20gZ2V0RWZmZWN0RGVzY3JpcHRvciIsIGxTdGF0dXMpOworICAgICAgICAgICAgZ290byBFeGl0OwogICAgICAgICB9CiAKICAgICAgICAgLy8gRG8gbm90IGFsbG93IGF1eGlsaWFyeSBlZmZlY3RzIG9uIGEgc2Vzc2lvbiBkaWZmZXJlbnQgZnJvbSAwIChvdXRwdXQgbWl4KQpAQCAtMzM3MCwxMzYgKzM0MDQsNiBAQAogfQogCiAKLXN0cnVjdCBFbnRyeSB7Ci0jZGVmaW5lIFRFRV9NQVhfRklMRU5BTUUgMzIgLy8gJVklbSVkJUglTSVTXyVkLndhdiA9IDQrMisyKzIrMisyKzErMSs0KzEgPSAyMQotICAgIGNoYXIgbUZpbGVOYW1lW1RFRV9NQVhfRklMRU5BTUVdOwotfTsKLQotaW50IGNvbXBhckVudHJ5KGNvbnN0IHZvaWQgKnAxLCBjb25zdCB2b2lkICpwMikKLXsKLSAgICByZXR1cm4gc3RyY21wKCgoY29uc3QgRW50cnkgKikgcDEpLT5tRmlsZU5hbWUsICgoY29uc3QgRW50cnkgKikgcDIpLT5tRmlsZU5hbWUpOwotfQotCi0jaWZkZWYgVEVFX1NJTksKLXZvaWQgQXVkaW9GbGluZ2VyOjpkdW1wVGVlKGludCBmZCwgY29uc3Qgc3A8TkJBSU9fU291cmNlPiYgc291cmNlLCBhdWRpb19pb19oYW5kbGVfdCBpZCwgY2hhciBzdWZmaXgpCi17Ci0gICAgTkJBSU9fU291cmNlICp0ZWVTb3VyY2UgPSBzb3VyY2UuZ2V0KCk7Ci0gICAgaWYgKHRlZVNvdXJjZSAhPSBOVUxMKSB7Ci0gICAgICAgIC8vIC53YXYgcm90YXRpb24KLSAgICAgICAgLy8gVGhlcmUgaXMgYSBiZW5pZ24gcmFjZSBjb25kaXRpb24gaWYgMiB0aHJlYWRzIGNhbGwgdGhpcyBzaW11bHRhbmVvdXNseS4KLSAgICAgICAgLy8gVGhleSB3b3VsZCBib3RoIHRyYXZlcnNlIHRoZSBkaXJlY3RvcnksIGJ1dCB0aGUgcmVzdWx0IHdvdWxkIHNpbXBseSBiZQotICAgICAgICAvLyBmYWlsdXJlcyBhdCB1bmxpbmsoKSB3aGljaCBhcmUgaWdub3JlZC4gIEl0J3MgYWxzbyB1bmxpa2VseSBzaW5jZQotICAgICAgICAvLyBub3JtYWxseSBkdW1wc3lzIGlzIG9ubHkgZG9uZSBieSBidWdyZXBvcnQgb3IgZnJvbSB0aGUgY29tbWFuZCBsaW5lLgotICAgICAgICBjaGFyIHRlZVBhdGhbUEFUSF9NQVhdID0gIi9kYXRhL21pc2MvYXVkaW9zZXJ2ZXIiOwotICAgICAgICBzaXplX3QgdGVlUGF0aExlbiA9IHN0cmxlbih0ZWVQYXRoKTsKLSAgICAgICAgRElSICpkaXIgPSBvcGVuZGlyKHRlZVBhdGgpOwotICAgICAgICB0ZWVQYXRoW3RlZVBhdGhMZW4rK10gPSAnLyc7Ci0gICAgICAgIGlmIChkaXIgIT0gTlVMTCkgewotI2RlZmluZSBURUVfTUFYX1NPUlQgMjAgLy8gbnVtYmVyIG9mIGVudHJpZXMgdG8gc29ydAotI2RlZmluZSBURUVfTUFYX0tFRVAgMTAgLy8gbnVtYmVyIG9mIGVudHJpZXMgdG8ga2VlcAotICAgICAgICAgICAgc3RydWN0IEVudHJ5IGVudHJpZXNbVEVFX01BWF9TT1JUXTsKLSAgICAgICAgICAgIHNpemVfdCBlbnRyeUNvdW50ID0gMDsKLSAgICAgICAgICAgIHdoaWxlIChlbnRyeUNvdW50IDwgVEVFX01BWF9TT1JUKSB7Ci0gICAgICAgICAgICAgICAgZXJybm8gPSAwOyAvLyBjbGVhciBlcnJubyBiZWZvcmUgcmVhZGRpcigpIHRvIHRyYWNrIHBvdGVudGlhbCBlcnJvcnMuCi0gICAgICAgICAgICAgICAgY29uc3Qgc3RydWN0IGRpcmVudCAqcmVzdWx0ID0gcmVhZGRpcihkaXIpOwotICAgICAgICAgICAgICAgIGlmIChyZXN1bHQgPT0gbnVsbHB0cikgewotICAgICAgICAgICAgICAgICAgICBBTE9HV19JRihlcnJubyAhPSAwLCAidGVlIHJlYWRkaXIoKSBmYWlsdXJlICVzIiwgc3RyZXJyb3IoZXJybm8pKTsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIC8vIGlnbm9yZSBub24gLndhdiBmaWxlIGVudHJpZXMKLSAgICAgICAgICAgICAgICBjb25zdCBzaXplX3QgbmFtZUxlbiA9IHN0cmxlbihyZXN1bHQtPmRfbmFtZSk7Ci0gICAgICAgICAgICAgICAgaWYgKG5hbWVMZW4gPD0gNCB8fCBuYW1lTGVuID49IFRFRV9NQVhfRklMRU5BTUUgfHwKLSAgICAgICAgICAgICAgICAgICAgICAgIHN0cmNtcCgmcmVzdWx0LT5kX25hbWVbbmFtZUxlbiAtIDRdLCAiLndhdiIpKSB7Ci0gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAodm9pZClhdWRpb191dGlsc19zdHJsY3B5KGVudHJpZXNbZW50cnlDb3VudCsrXS5tRmlsZU5hbWUsIHJlc3VsdC0+ZF9uYW1lKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgICh2b2lkKSBjbG9zZWRpcihkaXIpOwotICAgICAgICAgICAgaWYgKGVudHJ5Q291bnQgPiBURUVfTUFYX0tFRVApIHsKLSAgICAgICAgICAgICAgICBxc29ydChlbnRyaWVzLCBlbnRyeUNvdW50LCBzaXplb2YoRW50cnkpLCBjb21wYXJFbnRyeSk7Ci0gICAgICAgICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBlbnRyeUNvdW50IC0gVEVFX01BWF9LRUVQOyArK2kpIHsKLSAgICAgICAgICAgICAgICAgICAgc3RyY3B5KCZ0ZWVQYXRoW3RlZVBhdGhMZW5dLCBlbnRyaWVzW2ldLm1GaWxlTmFtZSk7Ci0gICAgICAgICAgICAgICAgICAgICh2b2lkKSB1bmxpbmsodGVlUGF0aCk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgaWYgKGZkID49IDApIHsKLSAgICAgICAgICAgICAgICBkcHJpbnRmKGZkLCAidW5hYmxlIHRvIHJvdGF0ZSB0ZWVzIGluICUuKnM6ICVzXG4iLCAoaW50KSB0ZWVQYXRoTGVuLCB0ZWVQYXRoLAotICAgICAgICAgICAgICAgICAgICAgICAgc3RyZXJyb3IoZXJybm8pKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICBjaGFyIHRlZVRpbWVbMTZdOwotICAgICAgICBzdHJ1Y3QgdGltZXZhbCB0djsKLSAgICAgICAgZ2V0dGltZW9mZGF5KCZ0diwgTlVMTCk7Ci0gICAgICAgIHN0cnVjdCB0bSB0bTsKLSAgICAgICAgbG9jYWx0aW1lX3IoJnR2LnR2X3NlYywgJnRtKTsKLSAgICAgICAgc3RyZnRpbWUodGVlVGltZSwgc2l6ZW9mKHRlZVRpbWUpLCAiJVklbSVkJUglTSVTIiwgJnRtKTsKLSAgICAgICAgc25wcmludGYoJnRlZVBhdGhbdGVlUGF0aExlbl0sIHNpemVvZih0ZWVQYXRoKSAtIHRlZVBhdGhMZW4sICIlc18lZF8lYy53YXYiLCB0ZWVUaW1lLCBpZCwKLSAgICAgICAgICAgICAgICBzdWZmaXgpOwotICAgICAgICAvLyBpZiAyIGR1bXBzeXMgYXJlIGRvbmUgd2l0aGluIDEgc2Vjb25kLCBhbmQgcm90YXRpb24gZGlkbid0IHdvcmssIHRoZW4gZGlzY2FyZCAybmQKLSAgICAgICAgaW50IHRlZUZkID0gb3Blbih0ZWVQYXRoLCBPX1dST05MWSB8IE9fQ1JFQVQgfCBPX0VYQ0wgfCBPX05PRk9MTE9XLCBTX0lSVVNSIHwgU19JV1VTUik7Ci0gICAgICAgIGlmICh0ZWVGZCA+PSAwKSB7Ci0gICAgICAgICAgICAvLyBGSVhNRSB1c2UgbGlic25kZmlsZQotICAgICAgICAgICAgY2hhciB3YXZIZWFkZXJbNDRdOwotICAgICAgICAgICAgbWVtY3B5KHdhdkhlYWRlciwKLSAgICAgICAgICAgICAgICAiUklGRlwwXDBcMFwwV0FWRWZtdCBcMjBcMFwwXDBcMVwwXDJcMFwxMDRcMjU0XDBcMFwwXDBcMFwwXDRcMFwyMFwwZGF0YVwwXDBcMFwwIiwKLSAgICAgICAgICAgICAgICBzaXplb2Yod2F2SGVhZGVyKSk7Ci0gICAgICAgICAgICBOQkFJT19Gb3JtYXQgZm9ybWF0ID0gdGVlU291cmNlLT5mb3JtYXQoKTsKLSAgICAgICAgICAgIHVuc2lnbmVkIGNoYW5uZWxDb3VudCA9IEZvcm1hdF9jaGFubmVsQ291bnQoZm9ybWF0KTsKLSAgICAgICAgICAgIHVpbnQzMl90IHNhbXBsZVJhdGUgPSBGb3JtYXRfc2FtcGxlUmF0ZShmb3JtYXQpOwotICAgICAgICAgICAgc2l6ZV90IGZyYW1lU2l6ZSA9IEZvcm1hdF9mcmFtZVNpemUoZm9ybWF0KTsKLSAgICAgICAgICAgIHdhdkhlYWRlclsyMl0gPSBjaGFubmVsQ291bnQ7ICAgICAgIC8vIG51bWJlciBvZiBjaGFubmVscwotICAgICAgICAgICAgd2F2SGVhZGVyWzI0XSA9IHNhbXBsZVJhdGU7ICAgICAgICAgLy8gc2FtcGxlIHJhdGUKLSAgICAgICAgICAgIHdhdkhlYWRlclsyNV0gPSBzYW1wbGVSYXRlID4+IDg7Ci0gICAgICAgICAgICB3YXZIZWFkZXJbMzJdID0gZnJhbWVTaXplOyAgICAgICAgICAvLyBibG9jayBhbGlnbm1lbnQKLSAgICAgICAgICAgIHdhdkhlYWRlclszM10gPSBmcmFtZVNpemUgPj4gODsKLSAgICAgICAgICAgIHdyaXRlKHRlZUZkLCB3YXZIZWFkZXIsIHNpemVvZih3YXZIZWFkZXIpKTsKLSAgICAgICAgICAgIHNpemVfdCB0b3RhbCA9IDA7Ci0gICAgICAgICAgICBib29sIGZpcnN0UmVhZCA9IHRydWU7Ci0jZGVmaW5lIFRFRV9TSU5LX1JFQUQgMTAyNCAgICAgICAgICAgICAgICAgICAgICAvLyBmcmFtZXMgcGVyIEkvTyBvcGVyYXRpb24KLSAgICAgICAgICAgIHZvaWQgKmJ1ZmZlciA9IG1hbGxvYyhURUVfU0lOS19SRUFEICogZnJhbWVTaXplKTsKLSAgICAgICAgICAgIGZvciAoOzspIHsKLSAgICAgICAgICAgICAgICBzaXplX3QgY291bnQgPSBURUVfU0lOS19SRUFEOwotICAgICAgICAgICAgICAgIHNzaXplX3QgYWN0dWFsID0gdGVlU291cmNlLT5yZWFkKGJ1ZmZlciwgY291bnQpOwotICAgICAgICAgICAgICAgIGJvb2wgd2FzRmlyc3RSZWFkID0gZmlyc3RSZWFkOwotICAgICAgICAgICAgICAgIGZpcnN0UmVhZCA9IGZhbHNlOwotICAgICAgICAgICAgICAgIGlmIChhY3R1YWwgPD0gMCkgewotICAgICAgICAgICAgICAgICAgICBpZiAoYWN0dWFsID09IChzc2l6ZV90KSBPVkVSUlVOICYmIHdhc0ZpcnN0UmVhZCkgewotICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIEFMT0dfQVNTRVJUKGFjdHVhbCA8PSAoc3NpemVfdCljb3VudCk7Ci0gICAgICAgICAgICAgICAgd3JpdGUodGVlRmQsIGJ1ZmZlciwgYWN0dWFsICogZnJhbWVTaXplKTsKLSAgICAgICAgICAgICAgICB0b3RhbCArPSBhY3R1YWw7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBmcmVlKGJ1ZmZlcik7Ci0gICAgICAgICAgICBsc2Vlayh0ZWVGZCwgKG9mZl90KSA0LCBTRUVLX1NFVCk7Ci0gICAgICAgICAgICB1aW50MzJfdCB0ZW1wID0gNDQgKyB0b3RhbCAqIGZyYW1lU2l6ZSAtIDg7Ci0gICAgICAgICAgICAvLyBGSVhNRSBub3QgYmlnLWVuZGlhbiBzYWZlCi0gICAgICAgICAgICB3cml0ZSh0ZWVGZCwgJnRlbXAsIHNpemVvZih0ZW1wKSk7Ci0gICAgICAgICAgICBsc2Vlayh0ZWVGZCwgKG9mZl90KSA0MCwgU0VFS19TRVQpOwotICAgICAgICAgICAgdGVtcCA9ICB0b3RhbCAqIGZyYW1lU2l6ZTsKLSAgICAgICAgICAgIC8vIEZJWE1FIG5vdCBiaWctZW5kaWFuIHNhZmUKLSAgICAgICAgICAgIHdyaXRlKHRlZUZkLCAmdGVtcCwgc2l6ZW9mKHRlbXApKTsKLSAgICAgICAgICAgIGNsb3NlKHRlZUZkKTsKLSAgICAgICAgICAgIC8vIFRPRE8gU2hvdWxkIGNyZWF0ZSBmaWxlIHdpdGggdGVtcG9yYXJ5IG5hbWUgYW5kIHRoZW4gcmVuYW1lIHRvIGZpbmFsIGlmIG5vbi1lbXB0eS4KLSAgICAgICAgICAgIGlmICh0b3RhbCA+IDApIHsKLSAgICAgICAgICAgICAgICBpZiAoZmQgPj0gMCkgewotICAgICAgICAgICAgICAgICAgICBkcHJpbnRmKGZkLCAidGVlIGNvcGllZCB0byAlc1xuIiwgdGVlUGF0aCk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICB1bmxpbmsodGVlUGF0aCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBpZiAoZmQgPj0gMCkgewotICAgICAgICAgICAgICAgIGRwcmludGYoZmQsICJ1bmFibGUgdG8gY3JlYXRlIHRlZSAlczogJXNcbiIsIHRlZVBhdGgsIHN0cmVycm9yKGVycm5vKSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci19Ci0jZW5kaWYKLQogLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCiBzdGF0dXNfdCBBdWRpb0ZsaW5nZXI6Om9uVHJhbnNhY3QoCmRpZmYgLS1naXQgYS9zZXJ2aWNlcy9hdWRpb2ZsaW5nZXIvQXVkaW9GbGluZ2VyLmggYi9zZXJ2aWNlcy9hdWRpb2ZsaW5nZXIvQXVkaW9GbGluZ2VyLmgKaW5kZXggOTYzYTg3ZC4uYjZiMzgxNSAxMDA2NDQKLS0tIGEvc2VydmljZXMvYXVkaW9mbGluZ2VyL0F1ZGlvRmxpbmdlci5oCisrKyBiL3NlcnZpY2VzL2F1ZGlvZmxpbmdlci9BdWRpb0ZsaW5nZXIuaApAQCAtMjMsNiArMjMsOCBAQAogI2luY2x1ZGUgPG11dGV4PgogI2luY2x1ZGUgPGRlcXVlPgogI2luY2x1ZGUgPG1hcD4KKyNpbmNsdWRlIDxzZXQ+CisjaW5jbHVkZSA8c3RyaW5nPgogI2luY2x1ZGUgPHZlY3Rvcj4KICNpbmNsdWRlIDxzdGRpbnQuaD4KICNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KQEAgLTYyLDcgKzY0LDEwIEBACiAjaW5jbHVkZSA8bWVkaWEvTGluZWFyTWFwLmg+CiAjaW5jbHVkZSA8bWVkaWEvVm9sdW1lU2hhcGVyLmg+CiAKKyNpbmNsdWRlIDxhdWRpb191dGlscy9jbG9jay5oPgorI2luY2x1ZGUgPGF1ZGlvX3V0aWxzL0ZkVG9TdHJpbmcuaD4KICNpbmNsdWRlIDxhdWRpb191dGlscy9TaW1wbGVMb2cuaD4KKyNpbmNsdWRlIDxhdWRpb191dGlscy9UaW1lc3RhbXBWZXJpZmllci5oPgogCiAjaW5jbHVkZSAiRmFzdENhcHR1cmUuaCIKICNpbmNsdWRlICJGYXN0TWl4ZXIuaCIKQEAgLTcxLDYgKzc2LDcgQEAKICNpbmNsdWRlICJBdWRpb1N0cmVhbU91dC5oIgogI2luY2x1ZGUgIlNwZGlmU3RyZWFtT3V0LmgiCiAjaW5jbHVkZSAiQXVkaW9Id0RldmljZS5oIgorI2luY2x1ZGUgIk5CQUlPX1RlZS5oIgogCiAjaW5jbHVkZSA8cG93ZXJtYW5hZ2VyL0lQb3dlck1hbmFnZXIuaD4KIApAQCAtMjAyLDYgKzIwOCw4IEBACiAgICAgdmlydHVhbCBzdGF0dXNfdCBxdWVyeUVmZmVjdCh1aW50MzJfdCBpbmRleCwgZWZmZWN0X2Rlc2NyaXB0b3JfdCAqZGVzY3JpcHRvcikgY29uc3Q7CiAKICAgICB2aXJ0dWFsIHN0YXR1c190IGdldEVmZmVjdERlc2NyaXB0b3IoY29uc3QgZWZmZWN0X3V1aWRfdCAqcFV1aWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGVmZmVjdF91dWlkX3QgKnBUeXBlVXVpZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3QgcHJlZmVycmVkVHlwZUZsYWcsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVmZmVjdF9kZXNjcmlwdG9yX3QgKmRlc2NyaXB0b3IpIGNvbnN0OwogCiAgICAgdmlydHVhbCBzcDxJRWZmZWN0PiBjcmVhdGVFZmZlY3QoCkBAIC00MTYsNiArNDI0LDExIEBACiAgICAgdm9pZCBkdW1wQ2xpZW50cyhpbnQgZmQsIGNvbnN0IFZlY3RvcjxTdHJpbmcxNj4mIGFyZ3MpOwogICAgIHZvaWQgZHVtcEludGVybmFscyhpbnQgZmQsIGNvbnN0IFZlY3RvcjxTdHJpbmcxNj4mIGFyZ3MpOwogCisgICAgU2ltcGxlTG9nIG1UaHJlYWRMb2d7MTZ9OyAvLyAxNiBUaHJlYWQgaGlzdG9yeSBsaW1pdAorCisgICAgY2xhc3MgVGhyZWFkQmFzZTsKKyAgICB2b2lkIGR1bXBUb1RocmVhZExvZ19sKGNvbnN0IHNwPFRocmVhZEJhc2U+ICZ0aHJlYWQpOworCiAgICAgLy8gLS0tIENsaWVudCAtLS0KICAgICBjbGFzcyBDbGllbnQgOiBwdWJsaWMgUmVmQmFzZSB7CiAgICAgcHVibGljOgpAQCAtNjc1LDYgKzY4OCw5IEBACiAgICAgICAgICAgICAgICAgYm9vbCAgICAgICAgICAgIHVwZGF0ZU9ycGhhbkVmZmVjdENoYWlucyhjb25zdCBzcDxFZmZlY3RNb2R1bGU+JiBlZmZlY3QpOwogCiAgICAgICAgICAgICAgICAgdm9pZCBicm9hY2FzdFBhcmFtZXRlcnNUb1JlY29yZFRocmVhZHNfbChjb25zdCBTdHJpbmc4JiBrZXlWYWx1ZVBhaXJzKTsKKyAgICAgICAgICAgICAgICB2b2lkIGZvcndhcmRQYXJhbWV0ZXJzVG9Eb3duc3RyZWFtUGF0Y2hlc19sKAorICAgICAgICAgICAgICAgICAgICAgICAgYXVkaW9faW9faGFuZGxlX3QgdXBTdHJlYW0sIGNvbnN0IFN0cmluZzgmIGtleVZhbHVlUGFpcnMsCisgICAgICAgICAgICAgICAgICAgICAgICBzdGQ6OmZ1bmN0aW9uPGJvb2woY29uc3Qgc3A8UGxheWJhY2tUaHJlYWQ+Jik+IHVzZVRocmVhZCA9IG51bGxwdHIpOwogCiAgICAgLy8gQXVkaW9TdHJlYW1JbiBpcyBpbW11dGFibGUsIHNvIHRoZWlyIGZpZWxkcyBhcmUgY29uc3QuCiAgICAgLy8gRm9yIGVtcGhhc2lzLCB3ZSBjb3VsZCBhbHNvIG1ha2UgYWxsIHBvaW50ZXJzIHRvIHRoZW0gYmUgImNvbnN0ICoiLApAQCAtNzkxLDQ0ICs4MDcsMTkgQEAKIAogICAgIC8vIGZvciB1c2UgZnJvbSBkZXN0cnVjdG9yCiAgICAgc3RhdHVzX3QgICAgY2xvc2VPdXRwdXRfbm9udmlydHVhbChhdWRpb19pb19oYW5kbGVfdCBvdXRwdXQpOwotICAgIHZvaWQgICAgICAgIGNsb3NlT3V0cHV0SW50ZXJuYWxfbChjb25zdCBzcDxQbGF5YmFja1RocmVhZD4mIHRocmVhZCk7CisgICAgdm9pZCAgICAgICAgY2xvc2VUaHJlYWRJbnRlcm5hbF9sKGNvbnN0IHNwPFBsYXliYWNrVGhyZWFkPiYgdGhyZWFkKTsKICAgICBzdGF0dXNfdCAgICBjbG9zZUlucHV0X25vbnZpcnR1YWwoYXVkaW9faW9faGFuZGxlX3QgaW5wdXQpOwotICAgIHZvaWQgICAgICAgIGNsb3NlSW5wdXRJbnRlcm5hbF9sKGNvbnN0IHNwPFJlY29yZFRocmVhZD4mIHRocmVhZCk7CisgICAgdm9pZCAgICAgICAgY2xvc2VUaHJlYWRJbnRlcm5hbF9sKGNvbnN0IHNwPFJlY29yZFRocmVhZD4mIHRocmVhZCk7CiAgICAgdm9pZCAgICAgICAgc2V0QXVkaW9Id1N5bmNGb3JTZXNzaW9uX2woUGxheWJhY2tUaHJlYWQgKnRocmVhZCwgYXVkaW9fc2Vzc2lvbl90IHNlc3Npb25JZCk7CiAKICAgICBzdGF0dXNfdCAgICBjaGVja1N0cmVhbVR5cGUoYXVkaW9fc3RyZWFtX3R5cGVfdCBzdHJlYW0pIGNvbnN0OwogCiAgICAgdm9pZCAgICAgICAgZmlsdGVyUmVzZXJ2ZWRQYXJhbWV0ZXJzKFN0cmluZzgmIGtleVZhbHVlUGFpcnMsIHVpZF90IGNhbGxpbmdVaWQpOwotCi0jaWZkZWYgVEVFX1NJTksKLSAgICAvLyBhbGwgcmVjb3JkIHRocmVhZHMgc2VyaWFsbHkgc2hhcmUgYSBjb21tb24gdGVlIHNpbmssIHdoaWNoIGlzIHJlLWNyZWF0ZWQgb24gZm9ybWF0IGNoYW5nZQotICAgIHNwPE5CQUlPX1Npbms+ICAgbVJlY29yZFRlZVNpbms7Ci0gICAgc3A8TkJBSU9fU291cmNlPiBtUmVjb3JkVGVlU291cmNlOwotI2VuZGlmCisgICAgdm9pZCAgICAgICAgbG9nRmlsdGVyZWRQYXJhbWV0ZXJzKHNpemVfdCBvcmlnaW5hbEtWUFNpemUsIGNvbnN0IFN0cmluZzgmIG9yaWdpbmFsS1ZQcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IHJlamVjdGVkS1ZQU2l6ZSwgY29uc3QgU3RyaW5nOCYgcmVqZWN0ZWRLVlBzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aWRfdCBjYWxsaW5nVWlkKTsKIAogcHVibGljOgotCi0jaWZkZWYgVEVFX1NJTksKLSAgICAvLyB0ZWUgc2luaywgaWYgZW5hYmxlZCBieSBwcm9wZXJ0eSwgYWxsb3dzIGR1bXBzeXMgdG8gd3JpdGUgbW9zdCByZWNlbnQgYXVkaW8gdG8gLndhdiBmaWxlCi0gICAgc3RhdGljIHZvaWQgZHVtcFRlZShpbnQgZmQsIGNvbnN0IHNwPE5CQUlPX1NvdXJjZT4mIHNvdXJjZSwgYXVkaW9faW9faGFuZGxlX3QgaWQsIGNoYXIgc3VmZml4KTsKLQotICAgIC8vIHdoZXRoZXIgdGVlIHNpbmsgaXMgZW5hYmxlZCBieSBwcm9wZXJ0eQotICAgIHN0YXRpYyBib29sIG1UZWVTaW5rSW5wdXRFbmFibGVkOwotICAgIHN0YXRpYyBib29sIG1UZWVTaW5rT3V0cHV0RW5hYmxlZDsKLSAgICBzdGF0aWMgYm9vbCBtVGVlU2lua1RyYWNrRW5hYmxlZDsKLQotICAgIC8vIHJ1bnRpbWUgY29uZmlndXJlZCBzaXplIG9mIGVhY2ggdGVlIHNpbmsgcGlwZSwgaW4gZnJhbWVzCi0gICAgc3RhdGljIHNpemVfdCBtVGVlU2lua0lucHV0RnJhbWVzOwotICAgIHN0YXRpYyBzaXplX3QgbVRlZVNpbmtPdXRwdXRGcmFtZXM7Ci0gICAgc3RhdGljIHNpemVfdCBtVGVlU2lua1RyYWNrRnJhbWVzOwotCi0gICAgLy8gY29tcGlsZS10aW1lIGRlZmF1bHQgc2l6ZSBvZiB0ZWUgc2luayBwaXBlcywgaW4gZnJhbWVzCi0gICAgLy8gMHgyMDAwMDAgc3RlcmVvIDE2LWJpdCBQQ00gZnJhbWVzID0gNDcuNSBzZWNvbmRzIGF0IDQ0LjEga0h6LCA4IG1lZ2FieXRlcwotICAgIHN0YXRpYyBjb25zdCBzaXplX3Qga1RlZVNpbmtJbnB1dEZyYW1lc0RlZmF1bHQgPSAweDIwMDAwMDsKLSAgICBzdGF0aWMgY29uc3Qgc2l6ZV90IGtUZWVTaW5rT3V0cHV0RnJhbWVzRGVmYXVsdCA9IDB4MjAwMDAwOwotICAgIHN0YXRpYyBjb25zdCBzaXplX3Qga1RlZVNpbmtUcmFja0ZyYW1lc0RlZmF1bHQgPSAweDIwMDAwMDsKLSNlbmRpZgotCiAgICAgLy8gVGhlc2UgbWV0aG9kcyByZWFkIHZhcmlhYmxlcyBhdG9taWNhbGx5IHdpdGhvdXQgbUxvY2ssCiAgICAgLy8gdGhvdWdoIHRoZSB2YXJpYWJsZXMgYXJlIHVwZGF0ZWQgd2l0aCBtTG9jay4KICAgICBib29sICAgIGlzTG93UmFtRGV2aWNlKCkgY29uc3QgeyByZXR1cm4gbUlzTG93UmFtRGV2aWNlOyB9CkBAIC04NDMsMTAgKzgzNCwxNSBAQAogCiAgICAgbnNlY3NfdCBtR2xvYmFsRWZmZWN0RW5hYmxlVGltZTsgIC8vIHdoZW4gYSBnbG9iYWwgZWZmZWN0IHdhcyBsYXN0IGVuYWJsZWQKIAotICAgIHNwPFBhdGNoUGFuZWw+IG1QYXRjaFBhbmVsOworICAgIC8vIHByb3RlY3RlZCBieSBtTG9jaworICAgIFBhdGNoUGFuZWwgbVBhdGNoUGFuZWw7CiAgICAgc3A8RWZmZWN0c0ZhY3RvcnlIYWxJbnRlcmZhY2U+IG1FZmZlY3RzRmFjdG9yeUhhbDsKIAotICAgIGJvb2wgICAgICAgIG1TeXN0ZW1SZWFkeTsKKyAgICBib29sICAgICAgIG1TeXN0ZW1SZWFkeTsKKworICAgIFNpbXBsZUxvZyAgbVJlamVjdGVkU2V0UGFyYW1ldGVyTG9nOworICAgIFNpbXBsZUxvZyAgbUFwcFNldFBhcmFtZXRlckxvZzsKKyAgICBTaW1wbGVMb2cgIG1TeXN0ZW1TZXRQYXJhbWV0ZXJMb2c7CiB9OwogCiAjdW5kZWYgSU5DTFVESU5HX0ZST01fQVVESU9GTElOR0VSX0gKZGlmZiAtLWdpdCBhL3NlcnZpY2VzL2F1ZGlvZmxpbmdlci9BdWRpb0h3RGV2aWNlLmggYi9zZXJ2aWNlcy9hdWRpb2ZsaW5nZXIvQXVkaW9Id0RldmljZS5oCmluZGV4IGViODI2YzYuLmQ0Mjk5YjAgMTAwNjQ0Ci0tLSBhL3NlcnZpY2VzL2F1ZGlvZmxpbmdlci9BdWRpb0h3RGV2aWNlLmgKKysrIGIvc2VydmljZXMvYXVkaW9mbGluZ2VyL0F1ZGlvSHdEZXZpY2UuaApAQCAtMzUsNiArMzUsOSBAQAogICAgIGVudW0gRmxhZ3MgewogICAgICAgICBBSFdEX0NBTl9TRVRfTUFTVEVSX1ZPTFVNRSAgPSAweDEsCiAgICAgICAgIEFIV0RfQ0FOX1NFVF9NQVNURVJfTVVURSAgICA9IDB4MiwKKyAgICAgICAgLy8gTWVhbnMgdGhhdCB0aGlzIGlzbid0IGEgdGVybWluYWwgbW9kdWxlLCBhbmQgc29mdHdhcmUgcGF0Y2hlcworICAgICAgICAvLyBhcmUgdXNlZCB0byB0cmFuc3BvcnQgYXVkaW8gZGF0YSBmdXJ0aGVyLgorICAgICAgICBBSFdEX0lTX0lOU0VSVCAgICAgICAgICAgICAgPSAweDQsCiAgICAgfTsKIAogICAgIEF1ZGlvSHdEZXZpY2UoYXVkaW9fbW9kdWxlX2hhbmRsZV90IGhhbmRsZSwKQEAgLTU1LDYgKzU4LDEwIEBACiAgICAgICAgIHJldHVybiAoMCAhPSAobUZsYWdzICYgQUhXRF9DQU5fU0VUX01BU1RFUl9NVVRFKSk7CiAgICAgfQogCisgICAgYm9vbCBpc0luc2VydCgpIGNvbnN0IHsKKyAgICAgICAgcmV0dXJuICgwICE9IChtRmxhZ3MgJiBBSFdEX0lTX0lOU0VSVCkpOworICAgIH0KKwogICAgIGF1ZGlvX21vZHVsZV9oYW5kbGVfdCBoYW5kbGUoKSBjb25zdCB7IHJldHVybiBtSGFuZGxlOyB9CiAgICAgY29uc3QgY2hhciAqbW9kdWxlTmFtZSgpIGNvbnN0IHsgcmV0dXJuIG1Nb2R1bGVOYW1lOyB9CiAgICAgc3A8RGV2aWNlSGFsSW50ZXJmYWNlPiBod0RldmljZSgpIGNvbnN0IHsgcmV0dXJuIG1Id0RldmljZTsgfQpkaWZmIC0tZ2l0IGEvc2VydmljZXMvYXVkaW9mbGluZ2VyL0VmZmVjdHMuY3BwIGIvc2VydmljZXMvYXVkaW9mbGluZ2VyL0VmZmVjdHMuY3BwCmluZGV4IGIzZjVlZmQuLjZhYjYzNjkgMTAwNjQ0Ci0tLSBhL3NlcnZpY2VzL2F1ZGlvZmxpbmdlci9FZmZlY3RzLmNwcAorKysgYi9zZXJ2aWNlcy9hdWRpb2ZsaW5nZXIvRWZmZWN0cy5jcHAKQEAgLTMxLDkgKzMxLDkgQEAKICNpbmNsdWRlIDxtZWRpYS9BdWRpb0VmZmVjdC5oPgogI2luY2x1ZGUgPG1lZGlhL2F1ZGlvaGFsL0VmZmVjdEhhbEludGVyZmFjZS5oPgogI2luY2x1ZGUgPG1lZGlhL2F1ZGlvaGFsL0VmZmVjdHNGYWN0b3J5SGFsSW50ZXJmYWNlLmg+CisjaW5jbHVkZSA8bWVkaWF1dGlscy9TZXJ2aWNlVXRpbGl0aWVzLmg+CiAKICNpbmNsdWRlICJBdWRpb0ZsaW5nZXIuaCIKLSNpbmNsdWRlICJTZXJ2aWNlVXRpbGl0aWVzLmgiCiAKIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIApAQCAtMzA5LDggKzMwOSw4IEBACiAgICAgLy8gaW5wdXQgYW5kIG91dHB1dCBlZmZlY3QgYnVmZmVycyB3aXRob3V0IGFuIGludGVybWVkaWFyeSBlZmZlY3QgcHJvY2Vzcy4KICAgICAvLyBUT0RPOiBjb25zaWRlciBpbXBsZW1lbnRpbmcgY2hhbm5lbCBjb252ZXJzaW9uLgogICAgIGNvbnN0IHNpemVfdCBzYWZlSW5wdXRPdXRwdXRTYW1wbGVDb3VudCA9Ci0gICAgICAgICAgICBpbkNoYW5uZWxDb3VudCAhPSBvdXRDaGFubmVsQ291bnQgPyAwCi0gICAgICAgICAgICAgICAgICAgIDogb3V0Q2hhbm5lbENvdW50ICogc3RkOjptaW4oCisgICAgICAgICAgICBtSW5DaGFubmVsQ291bnRSZXF1ZXN0ZWQgIT0gbU91dENoYW5uZWxDb3VudFJlcXVlc3RlZCA/IDAKKyAgICAgICAgICAgICAgICAgICAgOiBtT3V0Q2hhbm5lbENvdW50UmVxdWVzdGVkICogc3RkOjptaW4oCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbUNvbmZpZy5pbnB1dENmZy5idWZmZXIuZnJhbWVDb3VudCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtQ29uZmlnLm91dHB1dENmZy5idWZmZXIuZnJhbWVDb3VudCk7CiAgICAgY29uc3QgYXV0byBhY2N1bXVsYXRlSW5wdXRUb091dHB1dCA9IFt0aGlzLCBzYWZlSW5wdXRPdXRwdXRTYW1wbGVDb3VudF0oKSB7CkBAIC00ODAsNyArNDgwLDEyIEBACiAgICAgICAgIC8vIGFjY3VtdWxhdGUgaW5wdXQgb250byBvdXRwdXQKICAgICAgICAgc3A8RWZmZWN0Q2hhaW4+IGNoYWluID0gbUNoYWluLnByb21vdGUoKTsKICAgICAgICAgaWYgKGNoYWluLmdldCgpICE9IG51bGxwdHIgJiYgY2hhaW4tPmFjdGl2ZVRyYWNrQ250KCkgIT0gMCkgewotICAgICAgICAgICAgYWNjdW11bGF0ZUlucHV0VG9PdXRwdXQoKTsKKyAgICAgICAgICAgIC8vIHNpbWlsYXIgaGFuZGxpbmcgd2l0aCBkYXRhX2J5cGFzcyBhYm92ZS4KKyAgICAgICAgICAgIGlmIChtQ29uZmlnLm91dHB1dENmZy5hY2Nlc3NNb2RlID09IEVGRkVDVF9CVUZGRVJfQUNDRVNTX0FDQ1VNVUxBVEUpIHsKKyAgICAgICAgICAgICAgICBhY2N1bXVsYXRlSW5wdXRUb091dHB1dCgpOworICAgICAgICAgICAgfSBlbHNlIHsgLy8gRUZGRUNUX0JVRkZFUl9BQ0NFU1NfV1JJVEUKKyAgICAgICAgICAgICAgICBjb3B5SW5wdXRUb091dHB1dCgpOworICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgfQogfQpAQCAtMTg1OSw3ICsxODY0LDcgQEAKICAgICBib29sIGxvY2tlZCA9IG1DYmxrICE9IE5VTEwgJiYgQXVkaW9GbGluZ2VyOjpkdW1wVHJ5TG9jayhtQ2Jsay0+bG9jayk7CiAKICAgICBzbnByaW50ZihidWZmZXIsIHNpemUsICJcdFx0XHQlNWQgICAgJTVkICAlM3MgICAgJTNzICAlNXUgICU1dVxuIiwKLSAgICAgICAgICAgIChtQ2xpZW50ID09IDApID8gZ2V0cGlkX2NhY2hlZCA6IG1DbGllbnQtPnBpZCgpLAorICAgICAgICAgICAgKG1DbGllbnQgPT0gMCkgPyBnZXRwaWQoKSA6IG1DbGllbnQtPnBpZCgpLAogICAgICAgICAgICAgbVByaW9yaXR5LAogICAgICAgICAgICAgbUhhc0NvbnRyb2wgPyAieWVzIiA6ICJubyIsCiAgICAgICAgICAgICBsb2NrZWQgPyAieWVzIiA6ICJubyIsCmRpZmYgLS1naXQgYS9zZXJ2aWNlcy9hdWRpb2ZsaW5nZXIvRmFzdENhcHR1cmUuY3BwIGIvc2VydmljZXMvYXVkaW9mbGluZ2VyL0Zhc3RDYXB0dXJlLmNwcAppbmRleCBkMDYzNzcyLi5kZDg0YmYyIDEwMDY0NAotLS0gYS9zZXJ2aWNlcy9hdWRpb2ZsaW5nZXIvRmFzdENhcHR1cmUuY3BwCisrKyBiL3NlcnZpY2VzL2F1ZGlvZmxpbmdlci9GYXN0Q2FwdHVyZS5jcHAKQEAgLTIwLDYgKzIwLDcgQEAKICNkZWZpbmUgQVRSQUNFX1RBRyBBVFJBQ0VfVEFHX0FVRElPCiAKICNpbmNsdWRlICJDb25maWd1cmF0aW9uLmgiCisjaW5jbHVkZSA8YXVkaW9fdXRpbHMvZm9ybWF0Lmg+CiAjaW5jbHVkZSA8bGludXgvZnV0ZXguaD4KICNpbmNsdWRlIDxzeXMvc3lzY2FsbC5oPgogI2luY2x1ZGUgPG1lZGlhL0F1ZGlvQnVmZmVyUHJvdmlkZXIuaD4KQEAgLTE2MSw3ICsxNjIsMjEgQEAKICAgICBjb25zdCBGYXN0Q2FwdHVyZVN0YXRlICogY29uc3QgY3VycmVudCA9IChjb25zdCBGYXN0Q2FwdHVyZVN0YXRlICopIG1DdXJyZW50OwogICAgIEZhc3RDYXB0dXJlRHVtcFN0YXRlICogY29uc3QgZHVtcFN0YXRlID0gKEZhc3RDYXB0dXJlRHVtcFN0YXRlICopIG1EdW1wU3RhdGU7CiAgICAgY29uc3QgRmFzdENhcHR1cmVTdGF0ZTo6Q29tbWFuZCBjb21tYW5kID0gbUNvbW1hbmQ7Ci0gICAgY29uc3Qgc2l6ZV90IGZyYW1lQ291bnQgPSBjdXJyZW50LT5tRnJhbWVDb3VudDsKKyAgICBzaXplX3QgZnJhbWVDb3VudCA9IGN1cnJlbnQtPm1GcmFtZUNvdW50OworICAgIEF1ZGlvQnVmZmVyUHJvdmlkZXIqIGZhc3RQYXRjaFJlY29yZEJ1ZmZlclByb3ZpZGVyID0gY3VycmVudC0+bUZhc3RQYXRjaFJlY29yZEJ1ZmZlclByb3ZpZGVyOworICAgIEF1ZGlvQnVmZmVyUHJvdmlkZXI6OkJ1ZmZlciBwYXRjaEJ1ZmZlcjsKKworICAgIGlmIChmYXN0UGF0Y2hSZWNvcmRCdWZmZXJQcm92aWRlciAhPSAwKSB7CisgICAgICAgIHBhdGNoQnVmZmVyLmZyYW1lQ291bnQgPSB+MDsKKyAgICAgICAgc3RhdHVzX3Qgc3RhdHVzID0gZmFzdFBhdGNoUmVjb3JkQnVmZmVyUHJvdmlkZXItPmdldE5leHRCdWZmZXIoJnBhdGNoQnVmZmVyKTsKKyAgICAgICAgaWYgKHN0YXR1cyAhPSBOT19FUlJPUikgeworICAgICAgICAgICAgZnJhbWVDb3VudCA9IDA7CisgICAgICAgIH0gZWxzZSBpZiAocGF0Y2hCdWZmZXIuZnJhbWVDb3VudCA8IGZyYW1lQ291bnQpIHsKKyAgICAgICAgICAgIC8vIFRPRE86IE1ha2Ugc3VyZSB0aGF0IGl0IGRvZXNuJ3QgY2F1c2UgYW55IGlzc3VlcyBpZiB3ZSBqdXN0IGdldCBhIHNtYWxsIGF2YWlsYWJsZQorICAgICAgICAgICAgLy8gYnVmZmVyIGZyb20gdGhlIGJ1ZmZlciBwcm92aWRlci4KKyAgICAgICAgICAgIGZyYW1lQ291bnQgPSBwYXRjaEJ1ZmZlci5mcmFtZUNvdW50OworICAgICAgICB9CisgICAgfQogCiAgICAgaWYgKChjb21tYW5kICYgRmFzdENhcHR1cmVTdGF0ZTo6UkVBRCkgLyomJiBpc1dhcm0qLykgewogICAgICAgICBBTE9HX0FTU0VSVChtSW5wdXRTb3VyY2UgIT0gTlVMTCk7CkBAIC0xNzYsNiArMTkxLDcgQEAKICAgICAgICAgICAgIG1Ub3RhbE5hdGl2ZUZyYW1lc1JlYWQgKz0gZnJhbWVzUmVhZDsKICAgICAgICAgICAgIGR1bXBTdGF0ZS0+bUZyYW1lc1JlYWQgPSBtVG90YWxOYXRpdmVGcmFtZXNSZWFkOwogICAgICAgICAgICAgbVJlYWRCdWZmZXJTdGF0ZSA9IGZyYW1lc1JlYWQ7CisgICAgICAgICAgICBwYXRjaEJ1ZmZlci5mcmFtZUNvdW50ID0gZnJhbWVzUmVhZDsKICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIGR1bXBTdGF0ZS0+bVJlYWRFcnJvcnMrKzsKICAgICAgICAgICAgIG1SZWFkQnVmZmVyU3RhdGUgPSAwOwpAQCAtMTkzLDExICsyMDksMTggQEAKICAgICAgICAgfQogICAgICAgICBpZiAobVJlYWRCdWZmZXJTdGF0ZSA+IDApIHsKICAgICAgICAgICAgIHNzaXplX3QgZnJhbWVzV3JpdHRlbiA9IG1QaXBlU2luay0+d3JpdGUobVJlYWRCdWZmZXIsIG1SZWFkQnVmZmVyU3RhdGUpOwotICAgICAgICAgICAgLy8gRklYTUUgVGhpcyBzdXBwb3J0cyBhdCBtb3N0IG9uZSBmYXN0IGNhcHR1cmUgY2xpZW50LgotICAgICAgICAgICAgLy8gICAgICAgVG8gaGFuZGxlIG11bHRpcGxlIGNsaWVudHMgdGhpcyBjb3VsZCBiZSBjb252ZXJ0ZWQgdG8gYW4gYXJyYXksCi0gICAgICAgICAgICAvLyAgICAgICBvciB3aXRoIGEgbG90IG1vcmUgd29yayB0aGUgY29udHJvbCBibG9jayBjb3VsZCBiZSBzaGFyZWQgYnkgYWxsIGNsaWVudHMuCiAgICAgICAgICAgICBhdWRpb190cmFja19jYmxrX3QqIGNibGsgPSBjdXJyZW50LT5tQ2JsazsKLSAgICAgICAgICAgIGlmIChjYmxrICE9IE5VTEwgJiYgZnJhbWVzV3JpdHRlbiA+IDApIHsKKyAgICAgICAgICAgIGlmIChmYXN0UGF0Y2hSZWNvcmRCdWZmZXJQcm92aWRlciAhPSAwKSB7CisgICAgICAgICAgICAgICAgLy8gVGhpcyBpbmRpY2F0ZXMgdGhlIGZhc3QgdHJhY2sgaXMgYSBwYXRjaCByZWNvcmQsIHVwZGF0ZSB0aGUgY2JsayBieQorICAgICAgICAgICAgICAgIC8vIGNhbGxpbmcgcmVsZWFzZUJ1ZmZlcigpLgorICAgICAgICAgICAgICAgIG1lbWNweV9ieV9hdWRpb19mb3JtYXQocGF0Y2hCdWZmZXIucmF3LCBjdXJyZW50LT5tRmFzdFBhdGNoUmVjb3JkRm9ybWF0LAorICAgICAgICAgICAgICAgICAgICAgICAgbVJlYWRCdWZmZXIsIG1Gb3JtYXQubUZvcm1hdCwgZnJhbWVzV3JpdHRlbiAqIG1Gb3JtYXQubUNoYW5uZWxDb3VudCk7CisgICAgICAgICAgICAgICAgcGF0Y2hCdWZmZXIuZnJhbWVDb3VudCA9IGZyYW1lc1dyaXR0ZW47CisgICAgICAgICAgICAgICAgZmFzdFBhdGNoUmVjb3JkQnVmZmVyUHJvdmlkZXItPnJlbGVhc2VCdWZmZXIoJnBhdGNoQnVmZmVyKTsKKyAgICAgICAgICAgIH0gZWxzZSBpZiAoY2JsayAhPSBOVUxMICYmIGZyYW1lc1dyaXR0ZW4gPiAwKSB7CisgICAgICAgICAgICAgICAgLy8gRklYTUUgVGhpcyBzdXBwb3J0cyBhdCBtb3N0IG9uZSBmYXN0IGNhcHR1cmUgY2xpZW50LgorICAgICAgICAgICAgICAgIC8vICAgICAgIFRvIGhhbmRsZSBtdWx0aXBsZSBjbGllbnRzIHRoaXMgY291bGQgYmUgY29udmVydGVkIHRvIGFuIGFycmF5LAorICAgICAgICAgICAgICAgIC8vICAgICAgIG9yIHdpdGggYSBsb3QgbW9yZSB3b3JrIHRoZSBjb250cm9sIGJsb2NrIGNvdWxkIGJlIHNoYXJlZCBieSBhbGwgY2xpZW50cy4KICAgICAgICAgICAgICAgICBpbnQzMl90IHJlYXIgPSBjYmxrLT51Lm1TdHJlYW1pbmcubVJlYXI7CiAgICAgICAgICAgICAgICAgYW5kcm9pZF9hdG9taWNfcmVsZWFzZV9zdG9yZShmcmFtZXNXcml0dGVuICsgcmVhciwgJmNibGstPnUubVN0cmVhbWluZy5tUmVhcik7CiAgICAgICAgICAgICAgICAgY2Jsay0+bVNlcnZlciArPSBmcmFtZXNXcml0dGVuOwpkaWZmIC0tZ2l0IGEvc2VydmljZXMvYXVkaW9mbGluZ2VyL0Zhc3RDYXB0dXJlU3RhdGUuaCBiL3NlcnZpY2VzL2F1ZGlvZmxpbmdlci9GYXN0Q2FwdHVyZVN0YXRlLmgKaW5kZXggOWJjYTJkNC4uZDI4NzIzMiAxMDA2NDQKLS0tIGEvc2VydmljZXMvYXVkaW9mbGluZ2VyL0Zhc3RDYXB0dXJlU3RhdGUuaAorKysgYi9zZXJ2aWNlcy9hdWRpb2ZsaW5nZXIvRmFzdENhcHR1cmVTdGF0ZS5oCkBAIC0xOCw2ICsxOCw3IEBACiAjZGVmaW5lIEFORFJPSURfQVVESU9fRkFTVF9DQVBUVVJFX1NUQVRFX0gKIAogI2luY2x1ZGUgPG1lZGlhL25iYWlvL05CQUlPLmg+CisjaW5jbHVkZSA8bWVkaWEvQXVkaW9CdWZmZXJQcm92aWRlci5oPgogI2luY2x1ZGUgIkZhc3RUaHJlYWRTdGF0ZS5oIgogI2luY2x1ZGUgPHByaXZhdGUvbWVkaWEvQXVkaW9UcmFja1NoYXJlZC5oPgogCkBAIC0zNyw2ICszOCwxMCBAQAogICAgIHNpemVfdCAgICAgICAgICBtRnJhbWVDb3VudDsgICAgICAgIC8vIG51bWJlciBvZiBmcmFtZXMgcGVyIGZhc3QgY2FwdHVyZSBidWZmZXIKICAgICBhdWRpb190cmFja19jYmxrX3QqIG1DYmxrOyAgICAgICAgICAvLyBjb250cm9sIGJsb2NrIGZvciB0aGUgc2luZ2xlIGZhc3QgY2xpZW50LCBvciBOVUxMCiAKKyAgICBhdWRpb19mb3JtYXRfdCAgbUZhc3RQYXRjaFJlY29yZEZvcm1hdCA9IEFVRElPX0ZPUk1BVF9JTlZBTElEOworICAgIEF1ZGlvQnVmZmVyUHJvdmlkZXIqIG1GYXN0UGF0Y2hSZWNvcmRCdWZmZXJQcm92aWRlciA9IG51bGxwdHI7ICAgLy8gYSByZWZlcmVuY2UgdG8gYSBwYXRjaAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gcmVjb3JkIGluIGZhc3QgbW9kZQorCiAgICAgLy8gRXh0ZW5kcyBGYXN0VGhyZWFkU3RhdGU6OkNvbW1hbmQKICAgICBzdGF0aWMgY29uc3QgQ29tbWFuZAogICAgICAgICAvLyBUaGUgZm9sbG93aW5nIGNvbW1hbmRzIGFsc28gcHJvY2VzcyBjb25maWd1cmF0aW9uIGNoYW5nZXMsIGFuZCBjYW4gYmUgIm9yImVkOgpkaWZmIC0tZ2l0IGEvc2VydmljZXMvYXVkaW9mbGluZ2VyL0Zhc3RNaXhlci5jcHAgYi9zZXJ2aWNlcy9hdWRpb2ZsaW5nZXIvRmFzdE1peGVyLmNwcAppbmRleCA3OWJiOWZlLi5kMTU4NDFmIDEwMDY0NAotLS0gYS9zZXJ2aWNlcy9hdWRpb2ZsaW5nZXIvRmFzdE1peGVyLmNwcAorKysgYi9zZXJ2aWNlcy9hdWRpb2ZsaW5nZXIvRmFzdE1peGVyLmNwcApAQCAtMzIsNyArMzIsNyBAQAogI2luY2x1ZGUgPHV0aWxzL1RyYWNlLmg+CiAjaW5jbHVkZSA8c3lzdGVtL2F1ZGlvLmg+CiAjaWZkZWYgRkFTVF9USFJFQURfU1RBVElTVElDUwotI2luY2x1ZGUgPGNwdXN0YXRzL0NlbnRyYWxUZW5kZW5jeVN0YXRpc3RpY3MuaD4KKyNpbmNsdWRlIDxhdWRpb191dGlscy9TdGF0aXN0aWNzLmg+CiAjaWZkZWYgQ1BVX0ZSRVFVRU5DWV9TVEFUSVNUSUNTCiAjaW5jbHVkZSA8Y3B1c3RhdHMvVGhyZWFkQ3B1VXNhZ2UuaD4KICNlbmRpZgpAQCAtNDcsNyArNDcsOCBAQAogCiAvKnN0YXRpYyovIGNvbnN0IEZhc3RNaXhlclN0YXRlIEZhc3RNaXhlcjo6c0luaXRpYWw7CiAKLUZhc3RNaXhlcjo6RmFzdE1peGVyKCkgOiBGYXN0VGhyZWFkKCJjeWNsZV9tcyIsICJsb2FkX3VzIiksCitGYXN0TWl4ZXI6OkZhc3RNaXhlcihhdWRpb19pb19oYW5kbGVfdCBwYXJlbnRJb0hhbmRsZSkKKyAgICA6IEZhc3RUaHJlYWQoImN5Y2xlX21zIiwgImxvYWRfdXMiKSwKICAgICAvLyBtRmFzdFRyYWNrTmFtZXMKICAgICAvLyBtR2VuZXJhdGlvbnMKICAgICBtT3V0cHV0U2luayhOVUxMKSwKQEAgLTY2LDggKzY3LDExIEBACiAgICAgbVRvdGFsTmF0aXZlRnJhbWVzV3JpdHRlbigwKSwKICAgICAvLyB0aW1lc3RhbXAKICAgICBtTmF0aXZlRnJhbWVzV3JpdHRlbkJ1dE5vdFByZXNlbnRlZCgwKSwgICAvLyB0aGUgPSAwIGlzIHRvIHNpbGVuY2UgdGhlIGNvbXBpbGVyCi0gICAgbU1hc3Rlck1vbm8oZmFsc2UpCisgICAgbU1hc3Rlck1vbm8oZmFsc2UpLAorICAgIG1UaHJlYWRJb0hhbmRsZShwYXJlbnRJb0hhbmRsZSkKIHsKKyAgICAodm9pZCltVGhyZWFkSW9IYW5kbGU7IC8vIHByZXZlbnQgdW51c2VkIHdhcm5pbmcsIHNlZSBDKysxNyBbW21heWJlX3VudXNlZF1dCisKICAgICAvLyBGSVhNRSBwYXNzIHNJbml0aWFsIGFzIHBhcmFtZXRlciB0byBiYXNlIGNsYXNzIGNvbnN0cnVjdG9yLCBhbmQgbWFrZSBpdCBzdGF0aWMgbG9jYWwKICAgICBtUHJldmlvdXMgPSAmc0luaXRpYWw7CiAgICAgbUN1cnJlbnQgPSAmc0luaXRpYWw7CkBAIC0xOTEsNiArMTk1LDEwIEBACiAgICAgICAgICAgICAvLyAgICAgICB0byBhdm9pZCBibG9ja2luZyBoZXJlIGFuZCB0byBwcmV2ZW50IHBvc3NpYmxlIHByaW9yaXR5IGludmVyc2lvbgogICAgICAgICAgICAgbU1peGVyID0gbmV3IEF1ZGlvTWl4ZXIoZnJhbWVDb3VudCwgbVNhbXBsZVJhdGUpOwogICAgICAgICAgICAgLy8gRklYTUUgU2VlIHRoZSBvdGhlciBGSVhNRSBhdCBGYXN0TWl4ZXI6OnNldE5CTG9nV3JpdGVyKCkKKyAgICAgICAgICAgIE5CTG9nOjp0aHJlYWRfcGFyYW1zX3QgcGFyYW1zOworICAgICAgICAgICAgcGFyYW1zLmZyYW1lQ291bnQgPSBmcmFtZUNvdW50OworICAgICAgICAgICAgcGFyYW1zLnNhbXBsZVJhdGUgPSBtU2FtcGxlUmF0ZTsKKyAgICAgICAgICAgIExPR19USFJFQURfUEFSQU1TKHBhcmFtcyk7CiAgICAgICAgICAgICBjb25zdCBzaXplX3QgbWl4ZXJGcmFtZVNpemUgPSBtU2lua0NoYW5uZWxDb3VudAogICAgICAgICAgICAgICAgICAgICAqIGF1ZGlvX2J5dGVzX3Blcl9zYW1wbGUobU1peGVyQnVmZmVyRm9ybWF0KTsKICAgICAgICAgICAgIG1NaXhlckJ1ZmZlclNpemUgPSBtaXhlckZyYW1lU2l6ZSAqIGZyYW1lQ291bnQ7CkBAIC0yMjAsNiArMjI4LDEwIEBACiAgICAgICAgIHByZXZpb3VzVHJhY2tNYXNrID0gMDsKICAgICAgICAgbUZhc3RUcmFja3NHZW4gPSBjdXJyZW50LT5tRmFzdFRyYWNrc0dlbiAtIDE7CiAgICAgICAgIGR1bXBTdGF0ZS0+bUZyYW1lQ291bnQgPSBmcmFtZUNvdW50OworI2lmZGVmIFRFRV9TSU5LCisgICAgICAgIG1UZWUuc2V0KG1Gb3JtYXQsIE5CQUlPX1RlZTo6VEVFX0ZMQUdfT1VUUFVUX1RIUkVBRCk7CisgICAgICAgIG1UZWUuc2V0SWQoc3RkOjpzdHJpbmcoIl8iKSArIHN0ZDo6dG9fc3RyaW5nKG1UaHJlYWRJb0hhbmRsZSkgKyAiX0YiKTsKKyNlbmRpZgogICAgIH0gZWxzZSB7CiAgICAgICAgIHByZXZpb3VzVHJhY2tNYXNrID0gcHJldmlvdXMtPm1UcmFja01hc2s7CiAgICAgfQpAQCAtMzI4LDEzICszNDAsMjQgQEAKIHsKICAgICAvLyBUT0RPOiBwYXNzIGFuIElEIHBhcmFtZXRlciB0byBpbmRpY2F0ZSB3aGljaCB0aW1lIHNlcmllcyB3ZSB3YW50IHRvIHdyaXRlIHRvIGluIE5CTG9nLmNwcAogICAgIC8vIE9yOiBwYXNzIGJvdGggb2YgdGhlc2UgaW50byBhIHNpbmdsZSBjYWxsIHdpdGggYSBib29sZWFuCi0gICAgaWYgKG1Jc1dhcm0pIHsKLSAgICAgICAgTE9HX0hJU1RfVFMoKTsKLSAgICB9IGVsc2UgewotICAgICAgICBMT0dfQVVESU9fU1RBVEUoKTsKLSAgICB9CiAgICAgY29uc3QgRmFzdE1peGVyU3RhdGUgKiBjb25zdCBjdXJyZW50ID0gKGNvbnN0IEZhc3RNaXhlclN0YXRlICopIG1DdXJyZW50OwogICAgIEZhc3RNaXhlckR1bXBTdGF0ZSAqIGNvbnN0IGR1bXBTdGF0ZSA9IChGYXN0TWl4ZXJEdW1wU3RhdGUgKikgbUR1bXBTdGF0ZTsKKworICAgIGlmIChtSXNXYXJtKSB7CisgICAgICAgIC8vIExvZ2dpbmcgdGltZXN0YW1wcyBmb3IgRmFzdE1peGVyIGlzIGN1cnJlbnRseSBkaXNhYmxlZCB0byBtYWtlIG1lbW9yeSByb29tIGZvciBsb2dnaW5nCisgICAgICAgIC8vIG90aGVyIHN0YXRpc3RpY3MgaW4gRmFzdE1peGVyLgorICAgICAgICAvLyBUbyByZS1lbmFibGUsIGRlbGV0ZSB0aGUgI2lmZGVmIEZBU1RNSVhFUl9MT0dfSElTVF9UUyBsaW5lcyAoYW5kIHRoZSAjZW5kaWYgbGluZXMpLgorI2lmZGVmIEZBU1RNSVhFUl9MT0dfSElTVF9UUworICAgICAgICBMT0dfSElTVF9UUygpOworI2VuZGlmCisgICAgICAgIC8vQUxPR0QoIkVyaWMgRmFzdE1peGVyOjpvbldvcmsoKSBtSXNXYXJtIik7CisgICAgfSBlbHNlIHsKKyAgICAgICAgZHVtcFN0YXRlLT5tVGltZXN0YW1wVmVyaWZpZXIuZGlzY29udGludWl0eSgpOworICAgICAgICAvLyBTZWUgY29tbWVudCBpbiBpZiBibG9jay4KKyNpZmRlZiBGQVNUTUlYRVJfTE9HX0hJU1RfVFMKKyAgICAgICAgTE9HX0FVRElPX1NUQVRFKCk7CisjZW5kaWYKKyAgICB9CiAgICAgY29uc3QgRmFzdE1peGVyU3RhdGU6OkNvbW1hbmQgY29tbWFuZCA9IG1Db21tYW5kOwogICAgIGNvbnN0IHNpemVfdCBmcmFtZUNvdW50ID0gY3VycmVudC0+bUZyYW1lQ291bnQ7CiAKQEAgLTQ0NiwxMCArNDY5LDkgQEAKICAgICAgICAgICAgICAgICAgICAgZnJhbWVDb3VudCAqIEZvcm1hdF9jaGFubmVsQ291bnQobUZvcm1hdCkpOwogICAgICAgICB9CiAgICAgICAgIC8vIGlmIG5vbi1OVUxMLCB0aGVuIGR1cGxpY2F0ZSB3cml0ZSgpIHRvIHRoaXMgbm9uLWJsb2NraW5nIHNpbmsKLSAgICAgICAgTkJBSU9fU2luayogdGVlU2luazsKLSAgICAgICAgaWYgKCh0ZWVTaW5rID0gY3VycmVudC0+bVRlZVNpbmspICE9IE5VTEwpIHsKLSAgICAgICAgICAgICh2b2lkKSB0ZWVTaW5rLT53cml0ZShidWZmZXIsIGZyYW1lQ291bnQpOwotICAgICAgICB9CisjaWZkZWYgVEVFX1NJTksKKyAgICAgICAgbVRlZS53cml0ZShidWZmZXIsIGZyYW1lQ291bnQpOworI2VuZGlmCiAgICAgICAgIC8vIEZJWE1FIHdyaXRlKCkgaXMgbm9uLWJsb2NraW5nIGFuZCBsb2NrLWZyZWUgZm9yIGEgcHJvcGVybHkgaW1wbGVtZW50ZWQgTkJBSU8gc2luaywKICAgICAgICAgLy8gICAgICAgYnV0IHRoaXMgY29kZSBzaG91bGQgYmUgbW9kaWZpZWQgdG8gaGFuZGxlIGJvdGggbm9uLWJsb2NraW5nIGFuZCBibG9ja2luZyBzaW5rcwogICAgICAgICBkdW1wU3RhdGUtPm1Xcml0ZVNlcXVlbmNlKys7CkBAIC00NzAsMzUgKzQ5Miw0OSBAQAogICAgICAgICBtQXR0ZW1wdGVkV3JpdGUgPSB0cnVlOwogICAgICAgICAvLyBGSVhNRSBjb3VudCAjIG9mIHdyaXRlcyBibG9ja2VkIGV4Y2Vzc2l2ZWx5LCBDUFUgdXNhZ2UsIGV0Yy4gZm9yIGR1bXAKIAotICAgICAgICBFeHRlbmRlZFRpbWVzdGFtcCB0aW1lc3RhbXA7IC8vIGxvY2FsCi0gICAgICAgIHN0YXR1c190IHN0YXR1cyA9IG1PdXRwdXRTaW5rLT5nZXRUaW1lc3RhbXAodGltZXN0YW1wKTsKLSAgICAgICAgaWYgKHN0YXR1cyA9PSBOT19FUlJPUikgewotICAgICAgICAgICAgY29uc3QgaW50NjRfdCB0b3RhbE5hdGl2ZUZyYW1lc1ByZXNlbnRlZCA9Ci0gICAgICAgICAgICAgICAgICAgIHRpbWVzdGFtcC5tUG9zaXRpb25bRXh0ZW5kZWRUaW1lc3RhbXA6OkxPQ0FUSU9OX0tFUk5FTF07Ci0gICAgICAgICAgICBpZiAodG90YWxOYXRpdmVGcmFtZXNQcmVzZW50ZWQgPD0gbVRvdGFsTmF0aXZlRnJhbWVzV3JpdHRlbikgewotICAgICAgICAgICAgICAgIG1OYXRpdmVGcmFtZXNXcml0dGVuQnV0Tm90UHJlc2VudGVkID0KLSAgICAgICAgICAgICAgICAgICAgbVRvdGFsTmF0aXZlRnJhbWVzV3JpdHRlbiAtIHRvdGFsTmF0aXZlRnJhbWVzUHJlc2VudGVkOwotICAgICAgICAgICAgICAgIG1UaW1lc3RhbXAubVBvc2l0aW9uW0V4dGVuZGVkVGltZXN0YW1wOjpMT0NBVElPTl9LRVJORUxdID0KKyAgICAgICAgaWYgKG1Jc1dhcm0pIHsKKyAgICAgICAgICAgIEV4dGVuZGVkVGltZXN0YW1wIHRpbWVzdGFtcDsgLy8gbG9jYWwKKyAgICAgICAgICAgIHN0YXR1c190IHN0YXR1cyA9IG1PdXRwdXRTaW5rLT5nZXRUaW1lc3RhbXAodGltZXN0YW1wKTsKKyAgICAgICAgICAgIGlmIChzdGF0dXMgPT0gTk9fRVJST1IpIHsKKyAgICAgICAgICAgICAgICBkdW1wU3RhdGUtPm1UaW1lc3RhbXBWZXJpZmllci5hZGQoCisgICAgICAgICAgICAgICAgICAgICAgICB0aW1lc3RhbXAubVBvc2l0aW9uW0V4dGVuZGVkVGltZXN0YW1wOjpMT0NBVElPTl9LRVJORUxdLAorICAgICAgICAgICAgICAgICAgICAgICAgdGltZXN0YW1wLm1UaW1lTnNbRXh0ZW5kZWRUaW1lc3RhbXA6OkxPQ0FUSU9OX0tFUk5FTF0sCisgICAgICAgICAgICAgICAgICAgICAgICBtU2FtcGxlUmF0ZSk7CisgICAgICAgICAgICAgICAgY29uc3QgaW50NjRfdCB0b3RhbE5hdGl2ZUZyYW1lc1ByZXNlbnRlZCA9CiAgICAgICAgICAgICAgICAgICAgICAgICB0aW1lc3RhbXAubVBvc2l0aW9uW0V4dGVuZGVkVGltZXN0YW1wOjpMT0NBVElPTl9LRVJORUxdOwotICAgICAgICAgICAgICAgIG1UaW1lc3RhbXAubVRpbWVOc1tFeHRlbmRlZFRpbWVzdGFtcDo6TE9DQVRJT05fS0VSTkVMXSA9Ci0gICAgICAgICAgICAgICAgICAgICAgICB0aW1lc3RhbXAubVRpbWVOc1tFeHRlbmRlZFRpbWVzdGFtcDo6TE9DQVRJT05fS0VSTkVMXTsKKyAgICAgICAgICAgICAgICBpZiAodG90YWxOYXRpdmVGcmFtZXNQcmVzZW50ZWQgPD0gbVRvdGFsTmF0aXZlRnJhbWVzV3JpdHRlbikgeworICAgICAgICAgICAgICAgICAgICBtTmF0aXZlRnJhbWVzV3JpdHRlbkJ1dE5vdFByZXNlbnRlZCA9CisgICAgICAgICAgICAgICAgICAgICAgICBtVG90YWxOYXRpdmVGcmFtZXNXcml0dGVuIC0gdG90YWxOYXRpdmVGcmFtZXNQcmVzZW50ZWQ7CisgICAgICAgICAgICAgICAgICAgIG1UaW1lc3RhbXAubVBvc2l0aW9uW0V4dGVuZGVkVGltZXN0YW1wOjpMT0NBVElPTl9LRVJORUxdID0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aW1lc3RhbXAubVBvc2l0aW9uW0V4dGVuZGVkVGltZXN0YW1wOjpMT0NBVElPTl9LRVJORUxdOworICAgICAgICAgICAgICAgICAgICBtVGltZXN0YW1wLm1UaW1lTnNbRXh0ZW5kZWRUaW1lc3RhbXA6OkxPQ0FUSU9OX0tFUk5FTF0gPQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRpbWVzdGFtcC5tVGltZU5zW0V4dGVuZGVkVGltZXN0YW1wOjpMT0NBVElPTl9LRVJORUxdOworICAgICAgICAgICAgICAgICAgICAvLyBXZSBkb24ndCBjb21wZW5zYXRlIGZvciBzZXJ2ZXIgLSBrZXJuZWwgdGltZSBkaWZmZXJlbmNlIGFuZAorICAgICAgICAgICAgICAgICAgICAvLyBvbmx5IHVwZGF0ZSBsYXRlbmN5IGlmIHdlIGhhdmUgdmFsaWQgaW5mby4KKyAgICAgICAgICAgICAgICAgICAgY29uc3QgZG91YmxlIGxhdGVuY3lNcyA9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGRvdWJsZSltTmF0aXZlRnJhbWVzV3JpdHRlbkJ1dE5vdFByZXNlbnRlZCAqIDEwMDAgLyBtU2FtcGxlUmF0ZTsKKyAgICAgICAgICAgICAgICAgICAgZHVtcFN0YXRlLT5tTGF0ZW5jeU1zID0gbGF0ZW5jeU1zOworICAgICAgICAgICAgICAgICAgICBMT0dfTEFURU5DWShsYXRlbmN5TXMpOworICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIC8vIEhBTCByZXBvcnRlZCB0aGF0IG1vcmUgZnJhbWVzIHdlcmUgcHJlc2VudGVkIHRoYW4gd2VyZSB3cml0dGVuCisgICAgICAgICAgICAgICAgICAgIG1OYXRpdmVGcmFtZXNXcml0dGVuQnV0Tm90UHJlc2VudGVkID0gMDsKKyAgICAgICAgICAgICAgICAgICAgc3RhdHVzID0gSU5WQUxJRF9PUEVSQVRJT047CisgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAvLyBIQUwgcmVwb3J0ZWQgdGhhdCBtb3JlIGZyYW1lcyB3ZXJlIHByZXNlbnRlZCB0aGFuIHdlcmUgd3JpdHRlbgotICAgICAgICAgICAgICAgIG1OYXRpdmVGcmFtZXNXcml0dGVuQnV0Tm90UHJlc2VudGVkID0gMDsKLSAgICAgICAgICAgICAgICBzdGF0dXMgPSBJTlZBTElEX09QRVJBVElPTjsKKyAgICAgICAgICAgICAgICBkdW1wU3RhdGUtPm1UaW1lc3RhbXBWZXJpZmllci5lcnJvcigpOwogICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIGlmIChzdGF0dXMgPT0gTk9fRVJST1IpIHsKLSAgICAgICAgICAgIG1UaW1lc3RhbXAubVRpbWVOc1tFeHRlbmRlZFRpbWVzdGFtcDo6TE9DQVRJT05fU0VSVkVSXSA9Ci0gICAgICAgICAgICAgICAgICAgIG1UaW1lc3RhbXAubVRpbWVOc1tFeHRlbmRlZFRpbWVzdGFtcDo6TE9DQVRJT05fS0VSTkVMXTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIC8vIGZldGNoIHNlcnZlciB0aW1lIGlmIHdlIGNhbid0IGdldCB0aW1lc3RhbXAKLSAgICAgICAgICAgIG1UaW1lc3RhbXAubVRpbWVOc1tFeHRlbmRlZFRpbWVzdGFtcDo6TE9DQVRJT05fU0VSVkVSXSA9Ci0gICAgICAgICAgICAgICAgICAgIHN5c3RlbVRpbWUoU1lTVEVNX1RJTUVfTU9OT1RPTklDKTsKLSAgICAgICAgICAgIC8vIGNsZWFyIG91dCBrZXJuZWwgY2FjaGVkIHBvc2l0aW9uIGFzIHRoaXMgbWF5IGdldCByYXBpZGx5IHN0YWxlCi0gICAgICAgICAgICAvLyBpZiB3ZSBuZXZlciBnZXQgYSBuZXcgdmFsaWQgdGltZXN0YW1wCi0gICAgICAgICAgICBtVGltZXN0YW1wLm1Qb3NpdGlvbltFeHRlbmRlZFRpbWVzdGFtcDo6TE9DQVRJT05fS0VSTkVMXSA9IDA7Ci0gICAgICAgICAgICBtVGltZXN0YW1wLm1UaW1lTnNbRXh0ZW5kZWRUaW1lc3RhbXA6OkxPQ0FUSU9OX0tFUk5FTF0gPSAtMTsKKyAgICAgICAgICAgIGlmIChzdGF0dXMgPT0gTk9fRVJST1IpIHsKKyAgICAgICAgICAgICAgICBtVGltZXN0YW1wLm1UaW1lTnNbRXh0ZW5kZWRUaW1lc3RhbXA6OkxPQ0FUSU9OX1NFUlZFUl0gPQorICAgICAgICAgICAgICAgICAgICAgICAgbVRpbWVzdGFtcC5tVGltZU5zW0V4dGVuZGVkVGltZXN0YW1wOjpMT0NBVElPTl9LRVJORUxdOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAvLyBmZXRjaCBzZXJ2ZXIgdGltZSBpZiB3ZSBjYW4ndCBnZXQgdGltZXN0YW1wCisgICAgICAgICAgICAgICAgbVRpbWVzdGFtcC5tVGltZU5zW0V4dGVuZGVkVGltZXN0YW1wOjpMT0NBVElPTl9TRVJWRVJdID0KKyAgICAgICAgICAgICAgICAgICAgICAgIHN5c3RlbVRpbWUoU1lTVEVNX1RJTUVfTU9OT1RPTklDKTsKKyAgICAgICAgICAgICAgICAvLyBjbGVhciBvdXQga2VybmVsIGNhY2hlZCBwb3NpdGlvbiBhcyB0aGlzIG1heSBnZXQgcmFwaWRseSBzdGFsZQorICAgICAgICAgICAgICAgIC8vIGlmIHdlIG5ldmVyIGdldCBhIG5ldyB2YWxpZCB0aW1lc3RhbXAKKyAgICAgICAgICAgICAgICBtVGltZXN0YW1wLm1Qb3NpdGlvbltFeHRlbmRlZFRpbWVzdGFtcDo6TE9DQVRJT05fS0VSTkVMXSA9IDA7CisgICAgICAgICAgICAgICAgbVRpbWVzdGFtcC5tVGltZU5zW0V4dGVuZGVkVGltZXN0YW1wOjpMT0NBVElPTl9LRVJORUxdID0gLTE7CisgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICB9CiB9CmRpZmYgLS1naXQgYS9zZXJ2aWNlcy9hdWRpb2ZsaW5nZXIvRmFzdE1peGVyLmggYi9zZXJ2aWNlcy9hdWRpb2ZsaW5nZXIvRmFzdE1peGVyLmgKaW5kZXggMjM1ZDIzZi4uMWM4NmQ5YSAxMDA2NDQKLS0tIGEvc2VydmljZXMvYXVkaW9mbGluZ2VyL0Zhc3RNaXhlci5oCisrKyBiL3NlcnZpY2VzL2F1ZGlvZmxpbmdlci9GYXN0TWl4ZXIuaApAQCAtMjIsNiArMjIsNyBAQAogI2luY2x1ZGUgIlN0YXRlUXVldWUuaCIKICNpbmNsdWRlICJGYXN0TWl4ZXJTdGF0ZS5oIgogI2luY2x1ZGUgIkZhc3RNaXhlckR1bXBTdGF0ZS5oIgorI2luY2x1ZGUgIk5CQUlPX1RlZS5oIgogCiBuYW1lc3BhY2UgYW5kcm9pZCB7CiAKQEAgLTMyLDcgKzMzLDkgQEAKIGNsYXNzIEZhc3RNaXhlciA6IHB1YmxpYyBGYXN0VGhyZWFkIHsKIAogcHVibGljOgotICAgICAgICAgICAgRmFzdE1peGVyKCk7CisgICAgLyoqIEZhc3RNaXhlciBjb25zdHJ1Y3RvciB0YWtlcyBhcyBwYXJhbSB0aGUgcGFyZW50IE1peGVyVGhyZWFkJ3MgaW8gaGFuZGxlIChpZCkKKyAgICAgICAgZm9yIHB1cnBvc2VzIG9mIGlkZW50aWZpY2F0aW9uLiAqLworICAgIGV4cGxpY2l0IEZhc3RNaXhlcihhdWRpb19pb19oYW5kbGVfdCB0aHJlYWRJb0hhbmRsZSk7CiAgICAgdmlydHVhbCB+RmFzdE1peGVyKCk7CiAKICAgICAgICAgICAgIEZhc3RNaXhlclN0YXRlUXVldWUqIHNxKCk7CkBAIC04Nyw2ICs5MCwxMSBAQAogICAgIC8vIGFjY2Vzc2VkIHdpdGhvdXQgbG9jayBiZXR3ZWVuIG11bHRpcGxlIHRocmVhZHMuCiAgICAgc3RkOjphdG9taWNfYm9vbCBtTWFzdGVyTW9ubzsKICAgICBzdGQ6OmF0b21pY19pbnRfZmFzdDY0X3QgbUJvb3R0aW1lT2Zmc2V0OworCisgICAgY29uc3QgYXVkaW9faW9faGFuZGxlX3QgbVRocmVhZElvSGFuZGxlOyAvLyBwYXJlbnQgdGhyZWFkIGlkIGZvciBkZWJ1Z2dpbmcgcHVycG9zZXMKKyNpZmRlZiBURUVfU0lOSworICAgIE5CQUlPX1RlZSAgICAgICBtVGVlOworI2VuZGlmCiB9OyAgLy8gY2xhc3MgRmFzdE1peGVyCiAKIH0gICAvLyBuYW1lc3BhY2UgYW5kcm9pZApkaWZmIC0tZ2l0IGEvc2VydmljZXMvYXVkaW9mbGluZ2VyL0Zhc3RNaXhlckR1bXBTdGF0ZS5jcHAgYi9zZXJ2aWNlcy9hdWRpb2ZsaW5nZXIvRmFzdE1peGVyRHVtcFN0YXRlLmNwcAppbmRleCAyZTRmYjhjLi5hNDJlMDljIDEwMDY0NAotLS0gYS9zZXJ2aWNlcy9hdWRpb2ZsaW5nZXIvRmFzdE1peGVyRHVtcFN0YXRlLmNwcAorKysgYi9zZXJ2aWNlcy9hdWRpb2ZsaW5nZXIvRmFzdE1peGVyRHVtcFN0YXRlLmNwcApAQCAtMTksNyArMTksNyBAQAogCiAjaW5jbHVkZSAiQ29uZmlndXJhdGlvbi5oIgogI2lmZGVmIEZBU1RfVEhSRUFEX1NUQVRJU1RJQ1MKLSNpbmNsdWRlIDxjcHVzdGF0cy9DZW50cmFsVGVuZGVuY3lTdGF0aXN0aWNzLmg+CisjaW5jbHVkZSA8YXVkaW9fdXRpbHMvU3RhdGlzdGljcy5oPgogI2lmZGVmIENQVV9GUkVRVUVOQ1lfU1RBVElTVElDUwogI2luY2x1ZGUgPGNwdXN0YXRzL1RocmVhZENwdVVzYWdlLmg+CiAjZW5kaWYKQEAgLTY4LDIxICs2OCwyMiBAQAogICAgIGRwcmludGYoZmQsICIgIEZhc3RNaXhlciBjb21tYW5kPSVzIHdyaXRlU2VxdWVuY2U9JXUgZnJhbWVzV3JpdHRlbj0ldVxuIgogICAgICAgICAgICAgICAgICIgICAgICAgICAgICBudW1UcmFja3M9JXUgd3JpdGVFcnJvcnM9JXUgdW5kZXJydW5zPSV1IG92ZXJydW5zPSV1XG4iCiAgICAgICAgICAgICAgICAgIiAgICAgICAgICAgIHNhbXBsZVJhdGU9JXUgZnJhbWVDb3VudD0lenUgbWVhc3VyZWRXYXJtdXA9JS4zZyBtcywgd2FybXVwQ3ljbGVzPSV1XG4iCi0gICAgICAgICAgICAgICAgIiAgICAgICAgICAgIG1peFBlcmlvZD0lLjJmIG1zXG4iLAorICAgICAgICAgICAgICAgICIgICAgICAgICAgICBtaXhQZXJpb2Q9JS4yZiBtcyBsYXRlbmN5PSUuMmYgbXNcbiIsCiAgICAgICAgICAgICAgICAgRmFzdE1peGVyU3RhdGU6OmNvbW1hbmRUb1N0cmluZyhtQ29tbWFuZCksIG1Xcml0ZVNlcXVlbmNlLCBtRnJhbWVzV3JpdHRlbiwKICAgICAgICAgICAgICAgICBtTnVtVHJhY2tzLCBtV3JpdGVFcnJvcnMsIG1VbmRlcnJ1bnMsIG1PdmVycnVucywKICAgICAgICAgICAgICAgICBtU2FtcGxlUmF0ZSwgbUZyYW1lQ291bnQsIG1lYXN1cmVkV2FybXVwTXMsIG1XYXJtdXBDeWNsZXMsCi0gICAgICAgICAgICAgICAgbWl4UGVyaW9kU2VjICogMWUzKTsKKyAgICAgICAgICAgICAgICBtaXhQZXJpb2RTZWMgKiAxZTMsIG1MYXRlbmN5TXMpOworICAgIGRwcmludGYoZmQsICIgIEZhc3RNaXhlciBUaW1lc3RhbXAgc3RhdHM6ICVzXG4iLCBtVGltZXN0YW1wVmVyaWZpZXIudG9TdHJpbmcoKS5jX3N0cigpKTsKICNpZmRlZiBGQVNUX1RIUkVBRF9TVEFUSVNUSUNTCiAgICAgLy8gZmluZCB0aGUgaW50ZXJ2YWwgb2YgdmFsaWQgc2FtcGxlcwotICAgIHVpbnQzMl90IGJvdW5kcyA9IG1Cb3VuZHM7Ci0gICAgdWludDMyX3QgbmV3ZXN0T3BlbiA9IGJvdW5kcyAmIDB4RkZGRjsKKyAgICBjb25zdCB1aW50MzJfdCBib3VuZHMgPSBtQm91bmRzOworICAgIGNvbnN0IHVpbnQzMl90IG5ld2VzdE9wZW4gPSBib3VuZHMgJiAweEZGRkY7CiAgICAgdWludDMyX3Qgb2xkZXN0Q2xvc2VkID0gYm91bmRzID4+IDE2OwogCiAgICAgLy91aW50MzJfdCBuID0gKG5ld2VzdE9wZW4gLSBvbGRlc3RDbG9zZWQpICYgMHhGRkZGOwogICAgIHVpbnQzMl90IG47CiAgICAgX19idWlsdGluX3N1Yl9vdmVyZmxvdyhuZXdlc3RPcGVuLCBvbGRlc3RDbG9zZWQsICZuKTsKLSAgICBuID0gbiAmIDB4RkZGRjsKKyAgICBuICY9IDB4RkZGRjsKIAogICAgIGlmIChuID4gbVNhbXBsaW5nTikgewogICAgICAgICBBTE9HRSgidG9vIG1hbnkgc2FtcGxlcyAldSIsIG4pOwpAQCAtOTAsOSArOTEsOSBAQAogICAgIH0KICAgICAvLyBzdGF0aXN0aWNzIGZvciBtb25vdG9uaWMgKHdhbGwgY2xvY2spIHRpbWUsIHRocmVhZCByYXcgQ1BVIGxvYWQgaW4gdGltZSwgQ1BVIGNsb2NrIGZyZXF1ZW5jeSwKICAgICAvLyBhbmQgYWRqdXN0ZWQgQ1BVIGxvYWQgaW4gTUh6IG5vcm1hbGl6ZWQgZm9yIENQVSBjbG9jayBmcmVxdWVuY3kKLSAgICBDZW50cmFsVGVuZGVuY3lTdGF0aXN0aWNzIHdhbGwsIGxvYWROczsKKyAgICBhdWRpb191dGlsczo6U3RhdGlzdGljczxkb3VibGU+IHdhbGwsIGxvYWROczsKICNpZmRlZiBDUFVfRlJFUVVFTkNZX1NUQVRJU1RJQ1MKLSAgICBDZW50cmFsVGVuZGVuY3lTdGF0aXN0aWNzIGtIeiwgbG9hZE1IejsKKyAgICBhdWRpb191dGlsczo6U3RhdGlzdGljczxkb3VibGU+IGtIeiwgbG9hZE1IejsKICAgICB1aW50MzJfdCBwcmV2aW91c0NwdWtIeiA9IDA7CiAjZW5kaWYKICAgICAvLyBBc3N1bWluZyBhIG5vcm1hbCBkaXN0cmlidXRpb24gZm9yIGN5Y2xlIHRpbWVzLCB0aHJlZSBzdGFuZGFyZCBkZXZpYXRpb25zIG9uIGVpdGhlciBzaWRlIG9mCkBAIC0xMDcsMTggKzEwOCwxOCBAQAogICAgICAgICBpZiAodGFpbCAhPSBOVUxMKSB7CiAgICAgICAgICAgICB0YWlsW2pdID0gd2FsbE5zOwogICAgICAgICB9Ci0gICAgICAgIHdhbGwuc2FtcGxlKHdhbGxOcyk7CisgICAgICAgIHdhbGwuYWRkKHdhbGxOcyk7CiAgICAgICAgIHVpbnQzMl90IHNhbXBsZUxvYWROcyA9IG1Mb2FkTnNbaV07Ci0gICAgICAgIGxvYWROcy5zYW1wbGUoc2FtcGxlTG9hZE5zKTsKKyAgICAgICAgbG9hZE5zLmFkZChzYW1wbGVMb2FkTnMpOwogI2lmZGVmIENQVV9GUkVRVUVOQ1lfU1RBVElTVElDUwogICAgICAgICB1aW50MzJfdCBzYW1wbGVDcHVrSHogPSBtQ3B1a0h6W2ldOwogICAgICAgICAvLyBza2lwIGJhZCBrSHogc2FtcGxlcwogICAgICAgICBpZiAoKHNhbXBsZUNwdWtIeiAmIH4weEYpICE9IDApIHsKLSAgICAgICAgICAgIGtIei5zYW1wbGUoc2FtcGxlQ3B1a0h6ID4+IDQpOworICAgICAgICAgICAga0h6LmFkZChzYW1wbGVDcHVrSHogPj4gNCk7CiAgICAgICAgICAgICBpZiAoc2FtcGxlQ3B1a0h6ID09IHByZXZpb3VzQ3B1a0h6KSB7CiAgICAgICAgICAgICAgICAgZG91YmxlIG1lZ2FjeWNsZXMgPSAoZG91YmxlKSBzYW1wbGVMb2FkTnMgKiAoZG91YmxlKSAoc2FtcGxlQ3B1a0h6ID4+IDQpICogMWUtMTI7CiAgICAgICAgICAgICAgICAgZG91YmxlIGFkak1IeiA9IG1lZ2FjeWNsZXMgLyBtaXhQZXJpb2RTZWM7ICAvLyBfbm90XyB3YWxsTnMgKiAxZTkKLSAgICAgICAgICAgICAgICBsb2FkTUh6LnNhbXBsZShhZGpNSHopOworICAgICAgICAgICAgICAgIGxvYWRNSHouYWRkKGFkak1Ieik7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICAgICAgcHJldmlvdXNDcHVrSHogPSBzYW1wbGVDcHVrSHo7CkBAIC0xMjYsNDIgKzEyNyw0MiBAQAogICAgIH0KICAgICBpZiAobikgewogICAgICAgICBkcHJpbnRmKGZkLCAiICBTaW1wbGUgbW92aW5nIHN0YXRpc3RpY3Mgb3ZlciBsYXN0ICUuMWYgc2Vjb25kczpcbiIsCi0gICAgICAgICAgICAgICAgICAgIHdhbGwubigpICogbWl4UGVyaW9kU2VjKTsKKyAgICAgICAgICAgICAgICAgICAgd2FsbC5nZXROKCkgKiBtaXhQZXJpb2RTZWMpOwogICAgICAgICBkcHJpbnRmKGZkLCAiICAgIHdhbGwgY2xvY2sgdGltZSBpbiBtcyBwZXIgbWl4IGN5Y2xlOlxuIgogICAgICAgICAgICAgICAgICAgICAiICAgICAgbWVhbj0lLjJmIG1pbj0lLjJmIG1heD0lLjJmIHN0ZGRldj0lLjJmXG4iLAotICAgICAgICAgICAgICAgICAgICB3YWxsLm1lYW4oKSoxZS02LCB3YWxsLm1pbmltdW0oKSoxZS02LCB3YWxsLm1heGltdW0oKSoxZS02LAotICAgICAgICAgICAgICAgICAgICB3YWxsLnN0ZGRldigpKjFlLTYpOworICAgICAgICAgICAgICAgICAgICB3YWxsLmdldE1lYW4oKSoxZS02LCB3YWxsLmdldE1pbigpKjFlLTYsIHdhbGwuZ2V0TWF4KCkqMWUtNiwKKyAgICAgICAgICAgICAgICAgICAgd2FsbC5nZXRTdGREZXYoKSoxZS02KTsKICAgICAgICAgZHByaW50ZihmZCwgIiAgICByYXcgQ1BVIGxvYWQgaW4gdXMgcGVyIG1peCBjeWNsZTpcbiIKICAgICAgICAgICAgICAgICAgICAgIiAgICAgIG1lYW49JS4wZiBtaW49JS4wZiBtYXg9JS4wZiBzdGRkZXY9JS4wZlxuIiwKLSAgICAgICAgICAgICAgICAgICAgbG9hZE5zLm1lYW4oKSoxZS0zLCBsb2FkTnMubWluaW11bSgpKjFlLTMsIGxvYWROcy5tYXhpbXVtKCkqMWUtMywKLSAgICAgICAgICAgICAgICAgICAgbG9hZE5zLnN0ZGRldigpKjFlLTMpOworICAgICAgICAgICAgICAgICAgICBsb2FkTnMuZ2V0TWVhbigpKjFlLTMsIGxvYWROcy5nZXRNaW4oKSoxZS0zLCBsb2FkTnMuZ2V0TWF4KCkqMWUtMywKKyAgICAgICAgICAgICAgICAgICAgbG9hZE5zLmdldFN0ZERldigpKjFlLTMpOwogICAgIH0gZWxzZSB7CiAgICAgICAgIGRwcmludGYoZmQsICIgIE5vIEZhc3RNaXhlciBzdGF0aXN0aWNzIGF2YWlsYWJsZSBjdXJyZW50bHlcbiIpOwogICAgIH0KICNpZmRlZiBDUFVfRlJFUVVFTkNZX1NUQVRJU1RJQ1MKICAgICBkcHJpbnRmKGZkLCAiICBDUFUgY2xvY2sgZnJlcXVlbmN5IGluIE1IejpcbiIKICAgICAgICAgICAgICAgICAiICAgIG1lYW49JS4wZiBtaW49JS4wZiBtYXg9JS4wZiBzdGRkZXY9JS4wZlxuIiwKLSAgICAgICAgICAgICAgICBrSHoubWVhbigpKjFlLTMsIGtIei5taW5pbXVtKCkqMWUtMywga0h6Lm1heGltdW0oKSoxZS0zLCBrSHouc3RkZGV2KCkqMWUtMyk7CisgICAgICAgICAgICAgICAga0h6LmdldE1lYW4oKSoxZS0zLCBrSHouZ2V0TWluKCkqMWUtMywga0h6LmdldE1heCgpKjFlLTMsIGtIei5nZXRTdGREZXYoKSoxZS0zKTsKICAgICBkcHJpbnRmKGZkLCAiICBhZGp1c3RlZCBDUFUgbG9hZCBpbiBNSHogKGkuZS4gbm9ybWFsaXplZCBmb3IgQ1BVIGNsb2NrIGZyZXF1ZW5jeSk6XG4iCiAgICAgICAgICAgICAgICAgIiAgICBtZWFuPSUuMWYgbWluPSUuMWYgbWF4PSUuMWYgc3RkZGV2PSUuMWZcbiIsCi0gICAgICAgICAgICAgICAgbG9hZE1Iei5tZWFuKCksIGxvYWRNSHoubWluaW11bSgpLCBsb2FkTUh6Lm1heGltdW0oKSwgbG9hZE1Iei5zdGRkZXYoKSk7CisgICAgICAgICAgICAgICAgbG9hZE1Iei5nZXRNZWFuKCksIGxvYWRNSHouZ2V0TWluKCksIGxvYWRNSHouZ2V0TWF4KCksIGxvYWRNSHouZ2V0U3RkRGV2KCkpOwogI2VuZGlmCiAgICAgaWYgKHRhaWwgIT0gTlVMTCkgewogICAgICAgICBxc29ydCh0YWlsLCBuLCBzaXplb2YodWludDMyX3QpLCBjb21wYXJlX3VpbnQzMl90KTsKICAgICAgICAgLy8gYXNzdW1lIHNhbWUgbnVtYmVyIG9mIHRhaWwgc2FtcGxlcyBvbiBlYWNoIHNpZGUsIGxlZnQgYW5kIHJpZ2h0CiAgICAgICAgIHVpbnQzMl90IGNvdW50ID0gbiAvIGtUYWlsRGVub21pbmF0b3I7Ci0gICAgICAgIENlbnRyYWxUZW5kZW5jeVN0YXRpc3RpY3MgbGVmdCwgcmlnaHQ7CisgICAgICAgIGF1ZGlvX3V0aWxzOjpTdGF0aXN0aWNzPGRvdWJsZT4gbGVmdCwgcmlnaHQ7CiAgICAgICAgIGZvciAodWludDMyX3QgaSA9IDA7IGkgPCBjb3VudDsgKytpKSB7Ci0gICAgICAgICAgICBsZWZ0LnNhbXBsZSh0YWlsW2ldKTsKLSAgICAgICAgICAgIHJpZ2h0LnNhbXBsZSh0YWlsW24gLSAoaSArIDEpXSk7CisgICAgICAgICAgICBsZWZ0LmFkZCh0YWlsW2ldKTsKKyAgICAgICAgICAgIHJpZ2h0LmFkZCh0YWlsW24gLSAoaSArIDEpXSk7CiAgICAgICAgIH0KICAgICAgICAgZHByaW50ZihmZCwgIiAgRGlzdHJpYnV0aW9uIG9mIG1peCBjeWNsZSB0aW1lcyBpbiBtcyBmb3IgdGhlIHRhaWxzICIKICAgICAgICAgICAgICAgICAgICAgIig+IH4zIHN0ZGRldiBvdXRsaWVycyk6XG4iCiAgICAgICAgICAgICAgICAgICAgICIgICAgbGVmdCB0YWlsOiBtZWFuPSUuMmYgbWluPSUuMmYgbWF4PSUuMmYgc3RkZGV2PSUuMmZcbiIKICAgICAgICAgICAgICAgICAgICAgIiAgICByaWdodCB0YWlsOiBtZWFuPSUuMmYgbWluPSUuMmYgbWF4PSUuMmYgc3RkZGV2PSUuMmZcbiIsCi0gICAgICAgICAgICAgICAgICAgIGxlZnQubWVhbigpKjFlLTYsIGxlZnQubWluaW11bSgpKjFlLTYsIGxlZnQubWF4aW11bSgpKjFlLTYsIGxlZnQuc3RkZGV2KCkqMWUtNiwKLSAgICAgICAgICAgICAgICAgICAgcmlnaHQubWVhbigpKjFlLTYsIHJpZ2h0Lm1pbmltdW0oKSoxZS02LCByaWdodC5tYXhpbXVtKCkqMWUtNiwKLSAgICAgICAgICAgICAgICAgICAgcmlnaHQuc3RkZGV2KCkqMWUtNik7CisgICAgICAgICAgICAgICAgICAgIGxlZnQuZ2V0TWVhbigpKjFlLTYsIGxlZnQuZ2V0TWluKCkqMWUtNiwgbGVmdC5nZXRNYXgoKSoxZS02LCBsZWZ0LmdldFN0ZERldigpKjFlLTYsCisgICAgICAgICAgICAgICAgICAgIHJpZ2h0LmdldE1lYW4oKSoxZS02LCByaWdodC5nZXRNaW4oKSoxZS02LCByaWdodC5nZXRNYXgoKSoxZS02LAorICAgICAgICAgICAgICAgICAgICByaWdodC5nZXRTdGREZXYoKSoxZS02KTsKICAgICAgICAgZGVsZXRlW10gdGFpbDsKICAgICB9CiAjZW5kaWYKZGlmZiAtLWdpdCBhL3NlcnZpY2VzL2F1ZGlvZmxpbmdlci9GYXN0TWl4ZXJEdW1wU3RhdGUuaCBiL3NlcnZpY2VzL2F1ZGlvZmxpbmdlci9GYXN0TWl4ZXJEdW1wU3RhdGUuaAppbmRleCA4ZWYzMWQxLi45YjkxY2JjIDEwMDY0NAotLS0gYS9zZXJ2aWNlcy9hdWRpb2ZsaW5nZXIvRmFzdE1peGVyRHVtcFN0YXRlLmgKKysrIGIvc2VydmljZXMvYXVkaW9mbGluZ2VyL0Zhc3RNaXhlckR1bXBTdGF0ZS5oCkBAIC0xOCw2ICsxOCw3IEBACiAjZGVmaW5lIEFORFJPSURfQVVESU9fRkFTVF9NSVhFUl9EVU1QX1NUQVRFX0gKIAogI2luY2x1ZGUgPHN0ZGludC5oPgorI2luY2x1ZGUgPGF1ZGlvX3V0aWxzL1RpbWVzdGFtcFZlcmlmaWVyLmg+CiAjaW5jbHVkZSAiQ29uZmlndXJhdGlvbi5oIgogI2luY2x1ZGUgIkZhc3RUaHJlYWREdW1wU3RhdGUuaCIKICNpbmNsdWRlICJGYXN0TWl4ZXJTdGF0ZS5oIgpAQCAtNjYsNiArNjcsNyBAQAogCiAgICAgdm9pZCBkdW1wKGludCBmZCkgY29uc3Q7ICAgIC8vIHNob3VsZCBvbmx5IGJlIGNhbGxlZCBvbiBhIHN0YWJsZSBjb3B5LCBub3QgdGhlIG9yaWdpbmFsCiAKKyAgICBkb3VibGUgICBtTGF0ZW5jeU1zID0gMC47ICAgLy8gbWVhc3VyZWQgbGF0ZW5jeSwgZGVmYXVsdCBvZiAwIGlmIG5vIHZhbGlkIHRpbWVzdGFtcCByZWFkLgogICAgIHVpbnQzMl90IG1Xcml0ZVNlcXVlbmNlOyAgICAvLyBpbmNyZW1lbnRlZCBiZWZvcmUgYW5kIGFmdGVyIGVhY2ggd3JpdGUoKQogICAgIHVpbnQzMl90IG1GcmFtZXNXcml0dGVuOyAgICAvLyB0b3RhbCBudW1iZXIgb2YgZnJhbWVzIHdyaXR0ZW4gc3VjY2Vzc2Z1bGx5CiAgICAgdWludDMyX3QgbU51bVRyYWNrczsgICAgICAgIC8vIHRvdGFsIG51bWJlciBvZiBhY3RpdmUgZmFzdCB0cmFja3MKQEAgLTc0LDYgKzc2LDkgQEAKICAgICBzaXplX3QgICBtRnJhbWVDb3VudDsKICAgICB1aW50MzJfdCBtVHJhY2tNYXNrOyAgICAgICAgLy8gbWFzayBvZiBhY3RpdmUgdHJhY2tzCiAgICAgRmFzdFRyYWNrRHVtcCAgIG1UcmFja3NbRmFzdE1peGVyU3RhdGU6OmtNYXhGYXN0VHJhY2tzXTsKKworICAgIC8vIEZvciB0aW1lc3RhbXAgc3RhdGlzdGljcy4KKyAgICBUaW1lc3RhbXBWZXJpZmllcjxpbnQ2NF90IC8qIGZyYW1lIGNvdW50ICovLCBpbnQ2NF90IC8qIHRpbWUgbnMgKi8+IG1UaW1lc3RhbXBWZXJpZmllcjsKIH07CiAKIH0gICAvLyBhbmRyb2lkCmRpZmYgLS1naXQgYS9zZXJ2aWNlcy9hdWRpb2ZsaW5nZXIvRmFzdE1peGVyU3RhdGUuY3BwIGIvc2VydmljZXMvYXVkaW9mbGluZ2VyL0Zhc3RNaXhlclN0YXRlLmNwcAppbmRleCAzNmQ4ZWVmLi5iOTg4NDJkIDEwMDY0NAotLS0gYS9zZXJ2aWNlcy9hdWRpb2ZsaW5nZXIvRmFzdE1peGVyU3RhdGUuY3BwCisrKyBiL3NlcnZpY2VzL2F1ZGlvZmxpbmdlci9GYXN0TWl4ZXJTdGF0ZS5jcHAKQEAgLTM1LDcgKzM1LDcgQEAKIEZhc3RNaXhlclN0YXRlOjpGYXN0TWl4ZXJTdGF0ZSgpIDogRmFzdFRocmVhZFN0YXRlKCksCiAgICAgLy8gbUZhc3RUcmFja3MKICAgICBtRmFzdFRyYWNrc0dlbigwKSwgbVRyYWNrTWFzaygwKSwgbU91dHB1dFNpbmsoTlVMTCksIG1PdXRwdXRTaW5rR2VuKDApLAotICAgIG1GcmFtZUNvdW50KDApLCBtVGVlU2luayhOVUxMKQorICAgIG1GcmFtZUNvdW50KDApCiB7CiAgICAgaW50IG9rID0gcHRocmVhZF9vbmNlKCZzTWF4RmFzdFRyYWNrc09uY2UsIHNNYXhGYXN0VHJhY2tzSW5pdCk7CiAgICAgaWYgKG9rICE9IDApIHsKZGlmZiAtLWdpdCBhL3NlcnZpY2VzL2F1ZGlvZmxpbmdlci9GYXN0TWl4ZXJTdGF0ZS5oIGIvc2VydmljZXMvYXVkaW9mbGluZ2VyL0Zhc3RNaXhlclN0YXRlLmgKaW5kZXggMmJlMWU5MS4uYzdmY2JkOCAxMDA2NDQKLS0tIGEvc2VydmljZXMvYXVkaW9mbGluZ2VyL0Zhc3RNaXhlclN0YXRlLmgKKysrIGIvc2VydmljZXMvYXVkaW9mbGluZ2VyL0Zhc3RNaXhlclN0YXRlLmgKQEAgLTc3LDkgKzc3LDYgQEAKICAgICAgICAgV1JJVEUgPSAweDEwLCAgICAgICAgICAgLy8gd3JpdGUgdG8gb3V0cHV0IHNpbmsKICAgICAgICAgTUlYX1dSSVRFID0gMHgxODsgICAgICAgLy8gbWl4IHRyYWNrcyBhbmQgd3JpdGUgdG8gb3V0cHV0IHNpbmsKIAotICAgIC8vIFRoaXMgbWlnaHQgYmUgYSBvbmUtdGltZSBjb25maWd1cmF0aW9uIHJhdGhlciB0aGFuIHBlci1zdGF0ZQotICAgIE5CQUlPX1NpbmsqIG1UZWVTaW5rOyAgICAgICAvLyBpZiBub24tTlVMTCwgdGhlbiBkdXBsaWNhdGUgd3JpdGUoKXMgdG8gdGhpcyBub24tYmxvY2tpbmcgc2luawotCiAgICAgLy8gbmV2ZXIgcmV0dXJucyBOVUxMOyBhc3NlcnRzIGlmIGNvbW1hbmQgaXMgaW52YWxpZAogICAgIHN0YXRpYyBjb25zdCBjaGFyICpjb21tYW5kVG9TdHJpbmcoQ29tbWFuZCBjb21tYW5kKTsKIApkaWZmIC0tZ2l0IGEvc2VydmljZXMvYXVkaW9mbGluZ2VyL0Zhc3RUaHJlYWQuY3BwIGIvc2VydmljZXMvYXVkaW9mbGluZ2VyL0Zhc3RUaHJlYWQuY3BwCmluZGV4IGRjMTU0ODcuLjA0YjMyYzIgMTAwNjQ0Ci0tLSBhL3NlcnZpY2VzL2F1ZGlvZmxpbmdlci9GYXN0VGhyZWFkLmNwcAorKysgYi9zZXJ2aWNlcy9hdWRpb2ZsaW5nZXIvRmFzdFRocmVhZC5jcHAKQEAgLTIyLDYgKzIyLDcgQEAKICNpbmNsdWRlICJDb25maWd1cmF0aW9uLmgiCiAjaW5jbHVkZSA8bGludXgvZnV0ZXguaD4KICNpbmNsdWRlIDxzeXMvc3lzY2FsbC5oPgorI2luY2x1ZGUgPGF1ZGlvX3V0aWxzL2Nsb2NrLmg+CiAjaW5jbHVkZSA8Y3V0aWxzL2F0b21pYy5oPgogI2luY2x1ZGUgPHV0aWxzL0xvZy5oPgogI2luY2x1ZGUgPHV0aWxzL1RyYWNlLmg+CkBAIC02NSw4ICs2Niw2IEBACiAgICAgLyogbU1lYXN1cmVkV2FybXVwVHMoezAsIDB9KSwgKi8KICAgICBtV2FybXVwQ3ljbGVzKDApLAogICAgIG1XYXJtdXBDb25zZWN1dGl2ZUluUmFuZ2VDeWNsZXMoMCksCi0gICAgLy8gbUR1bW15TkJMb2dXcml0ZXIKLSAgICBtTkJMb2dXcml0ZXIoJm1EdW1teU5CTG9nV3JpdGVyKSwKICAgICBtVGltZXN0YW1wU3RhdHVzKElOVkFMSURfT1BFUkFUSU9OKSwKIAogICAgIG1Db21tYW5kKEZhc3RUaHJlYWRTdGF0ZTo6SU5JVElBTCksCkBAIC05Myw3ICs5Miw3IEBACiB7CiAgICAgLy8gTE9HVCBub3cgd29ya3MgZXZlbiBpZiB0bE5CTG9nV3JpdGVyIGlzIG51bGxwdHIsIGJ1dCB3ZSdyZSBjb25zaWRlcmluZyBjaGFuZ2luZyB0aGF0LAogICAgIC8vIHNvIHRoaXMgaW5pdGlhbGl6YXRpb24gcGVybWl0cyBhIGZ1dHVyZSBjaGFuZ2UgdG8gcmVtb3ZlIHRoZSBjaGVjayBmb3IgbnVsbHB0ci4KLSAgICB0bE5CTG9nV3JpdGVyID0gJm1EdW1teU5CTG9nV3JpdGVyOworICAgIHRsTkJMb2dXcml0ZXIgPSBtRHVtbXlOQkxvZ1dyaXRlci5nZXQoKTsKICAgICBmb3IgKDs7KSB7CiAKICAgICAgICAgLy8gZWl0aGVyIG5hbm9zbGVlcCwgc2NoZWRfeWllbGQsIG9yIGJ1c3kgd2FpdApAQCAtMTIzLDkgKzEyMiw5IEBACiAKICAgICAgICAgICAgIC8vIEFzIHNvb24gYXMgcG9zc2libGUgb2YgbGVhcm5pbmcgb2YgYSBuZXcgZHVtcCBhcmVhLCBzdGFydCB1c2luZyBpdAogICAgICAgICAgICAgbUR1bXBTdGF0ZSA9IG5leHQtPm1EdW1wU3RhdGUgIT0gTlVMTCA/IG5leHQtPm1EdW1wU3RhdGUgOiBtRHVtbXlEdW1wU3RhdGU7Ci0gICAgICAgICAgICBtTkJMb2dXcml0ZXIgPSBuZXh0LT5tTkJMb2dXcml0ZXIgIT0gTlVMTCA/IG5leHQtPm1OQkxvZ1dyaXRlciA6ICZtRHVtbXlOQkxvZ1dyaXRlcjsKLSAgICAgICAgICAgIHNldE5CTG9nV3JpdGVyKG1OQkxvZ1dyaXRlcik7ICAgLy8gRmFzdE1peGVyIGluZm9ybXMgaXRzIEF1ZGlvTWl4ZXIsIEZhc3RDYXB0dXJlIGlnbm9yZXMKLSAgICAgICAgICAgIHRsTkJMb2dXcml0ZXIgPSBtTkJMb2dXcml0ZXI7CisgICAgICAgICAgICB0bE5CTG9nV3JpdGVyID0gbmV4dC0+bU5CTG9nV3JpdGVyICE9IE5VTEwgPworICAgICAgICAgICAgICAgICAgICBuZXh0LT5tTkJMb2dXcml0ZXIgOiBtRHVtbXlOQkxvZ1dyaXRlci5nZXQoKTsKKyAgICAgICAgICAgIHNldE5CTG9nV3JpdGVyKHRsTkJMb2dXcml0ZXIpOyAvLyBGYXN0TWl4ZXIgaW5mb3JtcyBpdHMgQXVkaW9NaXhlciwgRmFzdENhcHR1cmUgaWdub3JlcwogCiAgICAgICAgICAgICAvLyBXZSB3YW50IHRvIGFsd2F5cyBoYXZlIGEgdmFsaWQgcmVmZXJlbmNlIHRvIHRoZSBwcmV2aW91cyAobm9uLWlkbGUpIHN0YXRlLgogICAgICAgICAgICAgLy8gSG93ZXZlciwgdGhlIHN0YXRlIHF1ZXVlIG9ubHkgZ3VhcmFudGVlcyBhY2Nlc3MgdG8gY3VycmVudCBhbmQgcHJldmlvdXMgc3RhdGVzLgpAQCAtMjYwLDYgKzI1OSw5IEBACiAgICAgICAgICAgICAgICAgICAgICAgICBtSXNXYXJtID0gdHJ1ZTsKICAgICAgICAgICAgICAgICAgICAgICAgIG1EdW1wU3RhdGUtPm1NZWFzdXJlZFdhcm11cFRzID0gbU1lYXN1cmVkV2FybXVwVHM7CiAgICAgICAgICAgICAgICAgICAgICAgICBtRHVtcFN0YXRlLT5tV2FybXVwQ3ljbGVzID0gbVdhcm11cEN5Y2xlczsKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGRvdWJsZSBtZWFzdXJlZFdhcm11cE1zID0gKG1NZWFzdXJlZFdhcm11cFRzLnR2X3NlYyAqIDFlMykgKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobU1lYXN1cmVkV2FybXVwVHMudHZfbnNlYyAqIDFlLTYpOworICAgICAgICAgICAgICAgICAgICAgICAgTE9HX1dBUk1VUF9USU1FKG1lYXN1cmVkV2FybXVwTXMpOwogICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIG1TbGVlcE5zID0gLTE7CkBAIC0yNzAsNiArMjcyLDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgIEFMT0dWKCJ1bmRlcnJ1bjogdGltZSBzaW5jZSBsYXN0IGN5Y2xlICVkLiUwM2xkIHNlYyIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChpbnQpIHNlYywgbnNlYyAvIDEwMDAwMDBMKTsKICAgICAgICAgICAgICAgICAgICAgICAgIG1EdW1wU3RhdGUtPm1VbmRlcnJ1bnMrKzsKKyAgICAgICAgICAgICAgICAgICAgICAgIExPR19VTkRFUlJVTihhdWRpb191dGlsc19uc19mcm9tX3RpbWVzcGVjKCZuZXdUcykpOwogICAgICAgICAgICAgICAgICAgICAgICAgbUlnbm9yZU5leHRPdmVycnVuID0gdHJ1ZTsKICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChuc2VjIDwgbU92ZXJydW5OcykgewogICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1JZ25vcmVOZXh0T3ZlcnJ1bikgewpAQCAtMjc5LDYgKzI4Miw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQUxPR1YoIm92ZXJydW46IHRpbWUgc2luY2UgbGFzdCBjeWNsZSAlZC4lMDNsZCBzZWMiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGludCkgc2VjLCBuc2VjIC8gMTAwMDAwMEwpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1EdW1wU3RhdGUtPm1PdmVycnVucysrOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIExPR19PVkVSUlVOKGF1ZGlvX3V0aWxzX25zX2Zyb21fdGltZXNwZWMoJm5ld1RzKSk7CiAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAvLyBUaGlzIGZvcmNlcyBhIG1pbmltdW0gY3ljbGUgdGltZS4gSXQ6CiAgICAgICAgICAgICAgICAgICAgICAgICAvLyAgLSBjb21wZW5zYXRlcyBmb3IgYW4gYXVkaW8gSEFMIHdpdGggaml0dGVyIGR1ZSB0byBzYW1wbGUgcmF0ZSBjb252ZXJzaW9uCkBAIC0zMzksNiArMzQzLDcgQEAKICAgICAgICAgICAgICAgICAgICAgLy8gdGhlc2Ugc3RvcmVzICMxLCAjMiwgIzMgYXJlIG5vdCBhdG9taWMgd2l0aCByZXNwZWN0IHRvIGVhY2ggb3RoZXIsCiAgICAgICAgICAgICAgICAgICAgIC8vIG9yIHdpdGggcmVzcGVjdCB0byBzdG9yZSAjNCBiZWxvdwogICAgICAgICAgICAgICAgICAgICBtRHVtcFN0YXRlLT5tTW9ub3RvbmljTnNbaV0gPSBtb25vdG9uaWNOczsKKyAgICAgICAgICAgICAgICAgICAgTE9HX1dPUktfVElNRShtb25vdG9uaWNOcyk7CiAgICAgICAgICAgICAgICAgICAgIG1EdW1wU3RhdGUtPm1Mb2FkTnNbaV0gPSBsb2FkTnM7CiAjaWZkZWYgQ1BVX0ZSRVFVRU5DWV9TVEFUSVNUSUNTCiAgICAgICAgICAgICAgICAgICAgIG1EdW1wU3RhdGUtPm1DcHVrSHpbaV0gPSBrSHo7CmRpZmYgLS1naXQgYS9zZXJ2aWNlcy9hdWRpb2ZsaW5nZXIvRmFzdFRocmVhZC5oIGIvc2VydmljZXMvYXVkaW9mbGluZ2VyL0Zhc3RUaHJlYWQuaAppbmRleCAyYTcxNDE0Li4zZjZiMjA2IDEwMDY0NAotLS0gYS9zZXJ2aWNlcy9hdWRpb2ZsaW5nZXIvRmFzdFRocmVhZC5oCisrKyBiL3NlcnZpY2VzL2F1ZGlvZmxpbmdlci9GYXN0VGhyZWFkLmgKQEAgLTc4LDEyICs3OCwxMSBAQAogICAgIHVuc2lnbmVkICAgICAgICBtQ29sZEdlbjsgICAgICAgLy8gbGFzdCBvYnNlcnZlZCBtQ29sZEdlbgogICAgIGJvb2wgICAgICAgICAgICBtSXNXYXJtOyAgICAgICAgLy8gdHJ1ZSBtZWFucyByZWFkeSB0byBtaXgsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBmYWxzZSBtZWFucyB3YWl0IGZvciB3YXJtdXAgYmVmb3JlIG1peGluZwotICAgIHN0cnVjdCB0aW1lc3BlYyBtTWVhc3VyZWRXYXJtdXBUczsgIC8vIGhvdyBsb25nIGRpZCBpdCB0YWtlIGZvciB3YXJtdXAgdG8gY29tcGxldGUKLSAgICB1aW50MzJfdCAgICAgICAgbVdhcm11cEN5Y2xlczsgIC8vIGNvdW50ZXIgb2YgbnVtYmVyIG9mIGxvb3AgY3ljbGVzIGR1cmluZyB3YXJtdXAgcGhhc2UKLSAgICB1aW50MzJfdCAgICAgICAgbVdhcm11cENvbnNlY3V0aXZlSW5SYW5nZUN5Y2xlczsgICAgLy8gbnVtYmVyIG9mIGNvbnNlY3V0aXZlIGN5Y2xlcyBpbiByYW5nZQotICAgIE5CTG9nOjpXcml0ZXIgICBtRHVtbXlOQkxvZ1dyaXRlcjsKLSAgICBOQkxvZzo6V3JpdGVyKiAgbU5CTG9nV3JpdGVyOyAgIC8vIGFsd2F5cyBub24tbnVsbHB0cjogcmVhbCBOQkxvZzo6V3JpdGVyKiBvciAmbUR1bW15TkJMb2dXcml0ZXIKLSAgICBzdGF0dXNfdCAgICAgICAgbVRpbWVzdGFtcFN0YXR1czsKKyAgICBzdHJ1Y3QgdGltZXNwZWMgICBtTWVhc3VyZWRXYXJtdXBUczsgIC8vIGhvdyBsb25nIGRpZCBpdCB0YWtlIGZvciB3YXJtdXAgdG8gY29tcGxldGUKKyAgICB1aW50MzJfdCAgICAgICAgICBtV2FybXVwQ3ljbGVzOyAgLy8gY291bnRlciBvZiBudW1iZXIgb2YgbG9vcCBjeWNsZXMgZHVyaW5nIHdhcm11cCBwaGFzZQorICAgIHVpbnQzMl90ICAgICAgICAgIG1XYXJtdXBDb25zZWN1dGl2ZUluUmFuZ2VDeWNsZXM7ICAgIC8vIG51bWJlciBvZiBjb25zZWN1dGl2ZSBjeWNsZXMgaW4gcmFuZ2UKKyAgICBjb25zdCBzcDxOQkxvZzo6V3JpdGVyPiBtRHVtbXlOQkxvZ1dyaXRlcntuZXcgTkJMb2c6OldyaXRlcigpfTsKKyAgICBzdGF0dXNfdCAgICAgICAgICBtVGltZXN0YW1wU3RhdHVzOwogCiAgICAgRmFzdFRocmVhZFN0YXRlOjpDb21tYW5kIG1Db21tYW5kOwogICAgIGJvb2wgICAgICAgICAgICBtQXR0ZW1wdGVkV3JpdGU7CmRpZmYgLS1naXQgYS9zZXJ2aWNlcy9hdWRpb2ZsaW5nZXIvTW1hcFRyYWNrcy5oIGIvc2VydmljZXMvYXVkaW9mbGluZ2VyL01tYXBUcmFja3MuaAppbmRleCA2ZjU0NmMzLi45NjhkNWFhIDEwMDY0NAotLS0gYS9zZXJ2aWNlcy9hdWRpb2ZsaW5nZXIvTW1hcFRyYWNrcy5oCisrKyBiL3NlcnZpY2VzL2F1ZGlvZmxpbmdlci9NbWFwVHJhY2tzLmgKQEAgLTI4LDYgKzI4LDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdWRpb19mb3JtYXRfdCBmb3JtYXQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXVkaW9fY2hhbm5lbF9tYXNrX3QgY2hhbm5lbE1hc2ssCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXVkaW9fc2Vzc2lvbl90IHNlc3Npb25JZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIGlzT3V0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpZF90IHVpZCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwaWRfdCBwaWQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXVkaW9fcG9ydF9oYW5kbGVfdCBwb3J0SWQgPSBBVURJT19QT1JUX0hBTkRMRV9OT05FKTsKQEAgLTM5LDggKzQwLDkgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF1ZGlvX3Nlc3Npb25fdCB0cmlnZ2VyU2Vzc2lvbik7CiAgICAgdmlydHVhbCB2b2lkICAgICAgICBzdG9wKCk7CiAgICAgdmlydHVhbCBib29sICAgICAgICBpc0Zhc3RUcmFjaygpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CisgICAgICAgICAgICBib29sICAgICAgICBpc0RpcmVjdCgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIHRydWU7IH0KIAotICAgICBzdGF0aWMgdm9pZCAgICAgICAgYXBwZW5kRHVtcEhlYWRlcihTdHJpbmc4JiByZXN1bHQpOworICAgICAgICAgICAgdm9pZCAgICAgICAgYXBwZW5kRHVtcEhlYWRlcihTdHJpbmc4JiByZXN1bHQpOwogICAgICAgICAgICAgdm9pZCAgICAgICAgYXBwZW5kRHVtcChTdHJpbmc4JiByZXN1bHQsIGJvb2wgYWN0aXZlKTsKIAogICAgICAgICAgICAgICAgICAgICAgICAgLy8gcHJvdGVjdGVkIGJ5IE1NYXBUaHJlYWQ6Om1Mb2NrCmRpZmYgLS1naXQgYS9zZXJ2aWNlcy9hdWRpb2ZsaW5nZXIvTkJBSU9fVGVlLmNwcCBiL3NlcnZpY2VzL2F1ZGlvZmxpbmdlci9OQkFJT19UZWUuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUzMDgzZDUKLS0tIC9kZXYvbnVsbAorKysgYi9zZXJ2aWNlcy9hdWRpb2ZsaW5nZXIvTkJBSU9fVGVlLmNwcApAQCAtMCwwICsxLDUxNyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxOCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCisKKyNkZWZpbmUgTE9HX1RBRyAiTkJBSU9fVGVlIgorLy8jZGVmaW5lIExPR19OREVCVUcgMAorCisjaW5jbHVkZSA8dXRpbHMvTG9nLmg+CisKKyNpbmNsdWRlIDxkZXF1ZT4KKyNpbmNsdWRlIDxkaXJlbnQuaD4KKyNpbmNsdWRlIDxmdXR1cmU+CisjaW5jbHVkZSA8bGlzdD4KKyNpbmNsdWRlIDx2ZWN0b3I+CisKKyNpbmNsdWRlIDxhdWRpb191dGlscy9mb3JtYXQuaD4KKyNpbmNsdWRlIDxhdWRpb191dGlscy9zbmRmaWxlLmg+CisjaW5jbHVkZSA8bWVkaWEvbmJhaW8vUGlwZVJlYWRlci5oPgorCisjaW5jbHVkZSAiQ29uZmlndXJhdGlvbi5oIgorI2luY2x1ZGUgIk5CQUlPX1RlZS5oIgorCisvLyBFbmFibGVkIHdpdGggVEVFX1NJTksgaW4gQ29uZmlndXJhdGlvbi5oCisjaWZkZWYgVEVFX1NJTksKKworbmFtZXNwYWNlIGFuZHJvaWQgeworCisvKgorIFRlZSBmaWxlbmFtZXMgZ2VuZXJhdGVkIGFzIGZvbGxvd3M6CisKKyAiYWZ0ZWVfRGF0ZV9UaHJlYWRJZF9DX3JlYXNvbi53YXYiIFJlY29yZFRocmVhZAorICJhZnRlZV9EYXRlX1RocmVhZElkX01fcmVhc29uLndhdiIgTWl4ZXJUaHJlYWQgKE5vcm1hbCkKKyAiYWZ0ZWVfRGF0ZV9UaHJlYWRJZF9GX3JlYXNvbi53YXYiIE1peGVyVGhyZWFkIChGYXN0KQorICJhZnRlZV9EYXRlX1RocmVhZElkX1RyYWNrSWRfUl9yZWFzb24ud2F2IiBSZWNvcmRUcmFjaworICJhZnRlZV9EYXRlX1RocmVhZElkX1RyYWNrSWRfVHJhY2tOYW1lX1RfcmVhc29uLndhdiIgUGxheWJhY2tUcmFjaworCisgd2hlcmUgRGF0ZSA9IFlZWVltbWRkX0hITU1TU19NU0VDCisKKyB3aGVyZSBSZWFzb24gPSBbIERUT1IgfCBEVU1QIHwgUkVNT1ZFIF0KKworIEV4YW1wbGVzOgorICBhZnRlZV8yMDE4MDQyNF8xNTM4MTFfMDM4XzEzXzU3XzJfVF9SRU1PVkUud2F2CisgIGFmdGVlXzIwMTgwNDI0XzE1MzgxMV8yMThfMTNfNTdfMl9UX1JFTU9WRS53YXYKKyAgYWZ0ZWVfMjAxODA0MjRfMTUzODExXzM3OF8xM181N18yX1RfUkVNT1ZFLndhdgorICBhZnRlZV8yMDE4MDQyNF8xNTM4MjVfMTQ3XzYyX0NfRFVNUC53YXYKKyAgYWZ0ZWVfMjAxODA0MjRfMTUzODI1XzE0OF82Ml81OV9SX0RVTVAud2F2CisgIGFmdGVlXzIwMTgwNDI0XzE1MzgyNV8xNDlfMTNfRl9EVU1QLndhdgorICBhZnRlZV8yMDE4MDQyNF8xNTM4NDJfMTI1XzYyXzU5X1JfUkVNT1ZFLndhdgorICBhZnRlZV8yMDE4MDQyNF8xNTM4NDJfMTY4XzYyX0NfRFRPUi53YXYKKyovCisKK3N0YXRpYyBjb25zdGV4cHIgY2hhciBERUZBVUxUX1BSRUZJWFtdID0gImFmdGVlXyI7CitzdGF0aWMgY29uc3RleHByIGNoYXIgREVGQVVMVF9ESVJFQ1RPUllbXSA9ICIvZGF0YS9taXNjL2F1ZGlvc2VydmVyIjsKK3N0YXRpYyBjb25zdGV4cHIgc2l6ZV90IERFRkFVTFRfVEhSRUFEUE9PTF9TSVpFID0gODsKKworLyoqIEF1ZGlvRmlsZUhhbmRsZXIgbWFuYWdlcyB0ZW1wb3JhcnkgYXVkaW8gd2F2IGZpbGVzIHdpdGggYSBsZWFzdCByZWNlbnRseSBjcmVhdGVkCisgICAgcmV0ZW50aW9uIHBvbGljeS4KKworICAgIFRoZSB0ZW1wb3JhcnkgZmlsZW5hbWVzIGFyZSBzeXN0ZW1hdGljYWxseSBnZW5lcmF0ZWQuIEEgY29tbW9uIGZpbGVuYW1lIHByZWZpeCwKKyAgICBzdG9yYWdlIGRpcmVjdG9yeSwgYW5kIGNvbmN1cnJlbmN5IHBvb2wgYXJlIHBhc3NlZCBpbiBvbiBjcmVhdGluZyB0aGUgb2JqZWN0LgorCisgICAgVGVtcG9yYXJ5IGZpbGVzIGFyZSBjcmVhdGVkIGJ5ICJjcmVhdGUiLCB3aGljaCByZXR1cm5zIGEgZmlsZW5hbWUgZ2VuZXJhdGVkIGJ5CisKKyAgICBwcmVmaXggKyAxNCBjaGFyIGRhdGUgKyBzdWZmaXgKKworICAgIFRPRE8gTW92ZSB0byBhdWRpb191dGlscy4KKyAgICBUT0RPIEF2b2lkIHBvaW50aW5nIHR3byBBdWRpb0ZpbGVIYW5kbGVycyB0byB0aGUgc2FtZSBkaXJlY3RvcnkgYW5kIHByZWZpeAorICAgIGFzIHdlIGRvbid0IGhhdmUgYSBwcmVmaXggc3BlY2lmaWMgbG9jayBmaWxlLiAqLworCitjbGFzcyBBdWRpb0ZpbGVIYW5kbGVyIHsKK3B1YmxpYzoKKworICAgIEF1ZGlvRmlsZUhhbmRsZXIoY29uc3Qgc3RkOjpzdHJpbmcgJnByZWZpeCwgY29uc3Qgc3RkOjpzdHJpbmcgJmRpcmVjdG9yeSwgc2l6ZV90IHBvb2wpCisgICAgICAgIDogbVRocmVhZFBvb2wocG9vbCkKKyAgICAgICAgLCBtUHJlZml4KHByZWZpeCkKKyAgICB7CisgICAgICAgICh2b2lkKXNldERpcmVjdG9yeShkaXJlY3RvcnkpOworICAgIH0KKworICAgIC8qKiByZXR1cm5zIGZpbGVuYW1lIG9mIGNyZWF0ZWQgYXVkaW8gZmlsZSwgZWxzZSBlbXB0eSBzdHJpbmcgb24gZmFpbHVyZS4gKi8KKyAgICBzdGQ6OnN0cmluZyBjcmVhdGUoCisgICAgICAgICAgICBzdGQ6OmZ1bmN0aW9uPHNzaXplX3QgLyogZnJhbWVzX3JlYWQgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICh2b2lkICogLyogYnVmZmVyICovLCBzaXplX3QgLyogc2l6ZV9pbl9mcmFtZXMgKi8pPiByZWFkZXIsCisgICAgICAgICAgICB1aW50MzJfdCBzYW1wbGVSYXRlLAorICAgICAgICAgICAgdWludDMyX3QgY2hhbm5lbENvdW50LAorICAgICAgICAgICAgYXVkaW9fZm9ybWF0X3QgZm9ybWF0LAorICAgICAgICAgICAgY29uc3Qgc3RkOjpzdHJpbmcgJnN1ZmZpeCk7CisKK3ByaXZhdGU6CisgICAgLyoqIHNldHMgdGhlIGN1cnJlbnQgZGlyZWN0b3J5LiB0aGlzIGlzIGN1cnJlbnRseSBwcml2YXRlIHRvIGF2b2lkIGNvbmZ1c2lvbgorICAgICAgICB3aGVuIGNoYW5naW5nIHdoaWxlIHBlbmRpbmcgb3BlcmF0aW9ucyBhcmUgb2NjdXJyaW5nIChpdCdzIG9rYXksIGJ1dAorICAgICAgICB3ZWFrbHkgc3luY2hyb25pemVkKS4gKi8KKyAgICBzdGF0dXNfdCBzZXREaXJlY3RvcnkoY29uc3Qgc3RkOjpzdHJpbmcgJmRpcmVjdG9yeSk7CisKKyAgICAvKiogY2xlYW5zIGN1cnJlbnQgZGlyZWN0b3J5IGFuZCByZXR1cm5zIHRoZSBkaXJlY3RvcnkgbmFtZSBkb25lLiAqLworICAgIHN0YXR1c190IGNsZWFuKHN0ZDo6c3RyaW5nICpkaXIgPSBudWxscHRyKTsKKworICAgIC8qKiBjcmVhdGVzIGFuIGF1ZGlvIGZpbGUgZnJvbSBhIHJlYWRlciBmdW5jdG9yIHBhc3NlZCBpbi4gKi8KKyAgICBzdGF0dXNfdCBjcmVhdGVJbnRlcm5hbCgKKyAgICAgICAgICAgIHN0ZDo6ZnVuY3Rpb248c3NpemVfdCAvKiBmcmFtZXNfcmVhZCAqLworICAgICAgICAgICAgICAgICAgICAgICAgKHZvaWQgKiAvKiBidWZmZXIgKi8sIHNpemVfdCAvKiBzaXplX2luX2ZyYW1lcyAqLyk+IHJlYWRlciwKKyAgICAgICAgICAgIHVpbnQzMl90IHNhbXBsZVJhdGUsCisgICAgICAgICAgICB1aW50MzJfdCBjaGFubmVsQ291bnQsCisgICAgICAgICAgICBhdWRpb19mb3JtYXRfdCBmb3JtYXQsCisgICAgICAgICAgICBjb25zdCBzdGQ6OnN0cmluZyAmZmlsZW5hbWUpOworCisgICAgc3RhdGljIGJvb2wgaXNEaXJlY3RvcnlWYWxpZChjb25zdCBzdGQ6OnN0cmluZyAmZGlyZWN0b3J5KSB7CisgICAgICAgIHJldHVybiBkaXJlY3Rvcnkuc2l6ZSgpID4gMCAmJiBkaXJlY3RvcnlbMF0gPT0gJy8nOworICAgIH0KKworICAgIHN0ZDo6c3RyaW5nIGdlbmVyYXRlRmlsZW5hbWUoY29uc3Qgc3RkOjpzdHJpbmcgJnN1ZmZpeCkgY29uc3QgeworICAgICAgICBjaGFyIGZpbGVUaW1lW3NpemVvZigiWVlZWW1tZGRfSEhNTVNTX1wwIildOworICAgICAgICBzdHJ1Y3QgdGltZXZhbCB0djsKKyAgICAgICAgZ2V0dGltZW9mZGF5KCZ0diwgTlVMTCk7CisgICAgICAgIHN0cnVjdCB0bSB0bTsKKyAgICAgICAgbG9jYWx0aW1lX3IoJnR2LnR2X3NlYywgJnRtKTsKKyAgICAgICAgTE9HX0FMV0FZU19GQVRBTF9JRihzdHJmdGltZShmaWxlVGltZSwgc2l6ZW9mKGZpbGVUaW1lKSwgIiVZJW0lZF8lSCVNJVNfIiwgJnRtKSA9PSAwLAorICAgICAgICAgICAgImluY29ycmVjdCBmaWxlVGltZSBidWZmZXIiKTsKKyAgICAgICAgY2hhciBtc2VjWzRdOworICAgICAgICAodm9pZClzbnByaW50Zihtc2VjLCBzaXplb2YobXNlYyksICIlMDNkIiwgKGludCkodHYudHZfdXNlYyAvIDEwMDApKTsKKyAgICAgICAgcmV0dXJuIG1QcmVmaXggKyBmaWxlVGltZSArIG1zZWMgKyBzdWZmaXggKyAiLndhdiI7CisgICAgfQorCisgICAgYm9vbCBpc01hbmFnZWRGaWxlbmFtZShjb25zdCBjaGFyICpuYW1lKSB7CisgICAgICAgIGNvbnN0ZXhwciBzaXplX3QgRklMRU5BTUVfTEVOX0RBVEUgPSA0ICsgMiArIDIgLy8gJVklbSVkJQorICAgICAgICAgICAgKyAxICsgMiArIDIgKyAyIC8vIF9IJU0lUworICAgICAgICAgICAgKyAxICsgMzsgLy9fTVNFQworICAgICAgICBjb25zdCBzaXplX3QgcHJlZml4TGVuID0gbVByZWZpeC5zaXplKCk7CisgICAgICAgIGNvbnN0IHNpemVfdCBuYW1lTGVuID0gc3RybGVuKG5hbWUpOworCisgICAgICAgIC8vIHJlamVjdCBvbiBzaXplLCBwcmVmaXgsIGFuZCAud2F2CisgICAgICAgIGlmIChuYW1lTGVuIDwgcHJlZml4TGVuICsgRklMRU5BTUVfTEVOX0RBVEUgKyA0IC8qIC53YXYgKi8KKyAgICAgICAgICAgICB8fCBzdHJuY21wKG5hbWUsIG1QcmVmaXguY19zdHIoKSwgcHJlZml4TGVuKSAhPSAwCisgICAgICAgICAgICAgfHwgc3RyY21wKG5hbWUgKyBuYW1lTGVuIC0gNCwgIi53YXYiKSAhPSAwKSB7CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKworICAgICAgICAvLyB2YWxpZGF0ZSBkYXRlIHBvcnRpb24KKyAgICAgICAgY29uc3QgY2hhciAqZGF0ZSA9IG5hbWUgKyBwcmVmaXhMZW47CisgICAgICAgIHJldHVybiBzdGQ6OmFsbF9vZihkYXRlLCBkYXRlICsgOCwgaXNkaWdpdCkKKyAgICAgICAgICAgICYmIGRhdGVbOF0gPT0gJ18nCisgICAgICAgICAgICAmJiBzdGQ6OmFsbF9vZihkYXRlICsgOSwgZGF0ZSArIDE1LCBpc2RpZ2l0KQorICAgICAgICAgICAgJiYgZGF0ZVsxNV0gPT0gJ18nCisgICAgICAgICAgICAmJiBzdGQ6OmFsbF9vZihkYXRlICsgMTYsIGRhdGUgKyAxOSwgaXNkaWdpdCk7CisgICAgfQorCisgICAgLy8geWV0IGFub3RoZXIgVGhyZWFkUG9vbCBpbXBsZW1lbnRhdGlvbi4KKyAgICBjbGFzcyBUaHJlYWRQb29sIHsKKyAgICBwdWJsaWM6CisgICAgICAgIFRocmVhZFBvb2woc2l6ZV90IHNpemUpCisgICAgICAgICAgICA6IG1UaHJlYWRQb29sU2l6ZShzaXplKQorICAgICAgICB7IH0KKworICAgICAgICAvKiogbGF1bmNoZXMgdGFzayAibmFtZSIgd2l0aCBhc3NvY2lhdGVkIGZ1bmN0aW9uICJmdW5jIi4KKyAgICAgICAgICAgIGlmIHRoZSB0aHJlYWRwb29sIGlzIGV4aGF1c3RlZCwgaXQgd2lsbCBsYXVuY2ggb24gY2FsbGluZyBmdW5jdGlvbiAqLworICAgICAgICBzdGF0dXNfdCBsYXVuY2goY29uc3Qgc3RkOjpzdHJpbmcgJm5hbWUsIHN0ZDo6ZnVuY3Rpb248c3RhdHVzX3QoKT4gZnVuYyk7CisKKyAgICBwcml2YXRlOgorICAgICAgICBzdGQ6Om11dGV4IG1Mb2NrOworICAgICAgICBzdGQ6Omxpc3Q8c3RkOjpwYWlyPAorICAgICAgICAgICAgICAgIHN0ZDo6c3RyaW5nLCBzdGQ6OmZ1dHVyZTxzdGF0dXNfdD4+PiBtRnV0dXJlczsgLy8gR1VBUkRFRF9CWShtTG9jaykKKworICAgICAgICBjb25zdCBzaXplX3QgbVRocmVhZFBvb2xTaXplOworICAgIH0gbVRocmVhZFBvb2w7CisKKyAgICBjb25zdCBzdGQ6OnN0cmluZyBtUHJlZml4OworICAgIHN0ZDo6bXV0ZXggbUxvY2s7CisgICAgc3RkOjpzdHJpbmcgbURpcmVjdG9yeTsgICAgICAgICAvLyBHVUFSREVEX0JZKG1Mb2NrKQorICAgIHN0ZDo6ZGVxdWU8c3RkOjpzdHJpbmc+IG1GaWxlczsgLy8gR1VBUkRFRF9CWShtTG9jaykgIHNvcnRlZCBsaXN0IG9mIGZpbGVzIGJ5IGNyZWF0aW9uIHRpbWUKKworICAgIHN0YXRpYyBjb25zdGV4cHIgc2l6ZV90IEZSQU1FU19QRVJfUkVBRCA9IDEwMjQ7CisgICAgc3RhdGljIGNvbnN0ZXhwciBzaXplX3QgTUFYX0ZJTEVTX1JFQUQgPSAxMDI0OworICAgIHN0YXRpYyBjb25zdGV4cHIgc2l6ZV90IE1BWF9GSUxFU19LRUVQID0gMzI7Cit9OworCisvKiBzdGF0aWMgKi8KK3ZvaWQgTkJBSU9fVGVlOjpOQkFJT19UZWVJbXBsOjpkdW1wVGVlKAorICAgICAgICBpbnQgZmQsIGNvbnN0IE5CQUlPX1NpbmtTb3VyY2UgJnNpbmtTb3VyY2UsIGNvbnN0IHN0ZDo6c3RyaW5nICZzdWZmaXgpCit7CisgICAgLy8gU2luZ2xldG9uLiBDb25zdHJ1Y3RlZCB0aHJlYWQtc2FmZSBvbiBmaXJzdCBjYWxsLCBuZXZlciBkZXN0cm95ZWQuCisgICAgc3RhdGljIEF1ZGlvRmlsZUhhbmRsZXIgYXVkaW9GaWxlSGFuZGxlcigKKyAgICAgICAgICAgIERFRkFVTFRfUFJFRklYLCBERUZBVUxUX0RJUkVDVE9SWSwgREVGQVVMVF9USFJFQURQT09MX1NJWkUpOworCisgICAgYXV0byAmc291cmNlID0gc2lua1NvdXJjZS5zZWNvbmQ7CisgICAgaWYgKHNvdXJjZS5nZXQoKSA9PSBudWxscHRyKSB7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBjb25zdCBOQkFJT19Gb3JtYXQgZm9ybWF0ID0gc291cmNlLT5mb3JtYXQoKTsKKyAgICBib29sIGZpcnN0UmVhZCA9IHRydWU7CisgICAgc3RkOjpzdHJpbmcgZmlsZW5hbWUgPSBhdWRpb0ZpbGVIYW5kbGVyLmNyZWF0ZSgKKyAgICAgICAgICAgIC8vIHRoaXMgZnVuY3RvciBtdXN0IG5vdCBob2xkIHJlZmVyZW5jZXMgdG8gc3RhY2sKKyAgICAgICAgICAgIFtmaXJzdFJlYWQsIHNpbmtTb3VyY2VdICh2b2lkICpidWZmZXIsIHNpemVfdCBmcmFtZXMpIG11dGFibGUgeworICAgICAgICAgICAgICAgICAgICBhdXRvICZzb3VyY2UgPSBzaW5rU291cmNlLnNlY29uZDsKKyAgICAgICAgICAgICAgICAgICAgc3NpemVfdCBhY3R1YWxSZWFkID0gc291cmNlLT5yZWFkKGJ1ZmZlciwgZnJhbWVzKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGFjdHVhbFJlYWQgPT0gKHNzaXplX3QpT1ZFUlJVTiAmJiBmaXJzdFJlYWQpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIHJlY2hlY2sgb25jZQorICAgICAgICAgICAgICAgICAgICAgICAgYWN0dWFsUmVhZCA9IHNvdXJjZS0+cmVhZChidWZmZXIsIGZyYW1lcyk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgZmlyc3RSZWFkID0gZmFsc2U7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBhY3R1YWxSZWFkOworICAgICAgICAgICAgICAgIH0sCisgICAgICAgICAgICBGb3JtYXRfc2FtcGxlUmF0ZShmb3JtYXQpLAorICAgICAgICAgICAgRm9ybWF0X2NoYW5uZWxDb3VudChmb3JtYXQpLAorICAgICAgICAgICAgZm9ybWF0Lm1Gb3JtYXQsCisgICAgICAgICAgICBzdWZmaXgpOworCisgICAgaWYgKGZkID49IDAgJiYgZmlsZW5hbWUuc2l6ZSgpID4gMCkgeworICAgICAgICBkcHJpbnRmKGZkLCAidGVlIHdyb3RlIHRvICVzXG4iLCBmaWxlbmFtZS5jX3N0cigpKTsKKyAgICB9Cit9CisKKy8qIHN0YXRpYyAqLworTkJBSU9fVGVlOjpOQkFJT19UZWVJbXBsOjpOQkFJT19TaW5rU291cmNlIE5CQUlPX1RlZTo6TkJBSU9fVGVlSW1wbDo6bWFrZVNpbmtTb3VyY2UoCisgICAgICAgIGNvbnN0IE5CQUlPX0Zvcm1hdCAmZm9ybWF0LCBzaXplX3QgZnJhbWVzLCBib29sICplbmFibGVkKQoreworICAgIGlmIChGb3JtYXRfaXNWYWxpZChmb3JtYXQpICYmIGF1ZGlvX2lzX2xpbmVhcl9wY20oZm9ybWF0Lm1Gb3JtYXQpKSB7CisgICAgICAgIFBpcGUgKnBpcGUgPSBuZXcgUGlwZShmcmFtZXMsIGZvcm1hdCk7CisgICAgICAgIHNpemVfdCBudW1Db3VudGVyT2ZmZXJzID0gMDsKKyAgICAgICAgY29uc3QgTkJBSU9fRm9ybWF0IG9mZmVyc1sxXSA9IHtmb3JtYXR9OworICAgICAgICBzc2l6ZV90IGluZGV4ID0gcGlwZS0+bmVnb3RpYXRlKG9mZmVycywgMSwgTlVMTCwgbnVtQ291bnRlck9mZmVycyk7CisgICAgICAgIGlmIChpbmRleCAhPSAwKSB7CisgICAgICAgICAgICBBTE9HVygicGlwZSBmYWlsdXJlIHRvIG5lZ290aWF0ZTogJXpkIiwgaW5kZXgpOworICAgICAgICAgICAgZ290byBleGl0OworICAgICAgICB9CisgICAgICAgIFBpcGVSZWFkZXIgKnBpcGVSZWFkZXIgPSBuZXcgUGlwZVJlYWRlcigqcGlwZSk7CisgICAgICAgIG51bUNvdW50ZXJPZmZlcnMgPSAwOworICAgICAgICBpbmRleCA9IHBpcGVSZWFkZXItPm5lZ290aWF0ZShvZmZlcnMsIDEsIE5VTEwsIG51bUNvdW50ZXJPZmZlcnMpOworICAgICAgICBpZiAoaW5kZXggIT0gMCkgeworICAgICAgICAgICAgQUxPR1coInBpcGVSZWFkZXIgZmFpbHVyZSB0byBuZWdvdGlhdGU6ICV6ZCIsIGluZGV4KTsKKyAgICAgICAgICAgIGdvdG8gZXhpdDsKKyAgICAgICAgfQorICAgICAgICBpZiAoZW5hYmxlZCAhPSBudWxscHRyKSAqZW5hYmxlZCA9IHRydWU7CisgICAgICAgIHJldHVybiB7cGlwZSwgcGlwZVJlYWRlcn07CisgICAgfQorZXhpdDoKKyAgICBpZiAoZW5hYmxlZCAhPSBudWxscHRyKSAqZW5hYmxlZCA9IGZhbHNlOworICAgIHJldHVybiB7bnVsbHB0ciwgbnVsbHB0cn07Cit9CisKK3N0ZDo6c3RyaW5nIEF1ZGlvRmlsZUhhbmRsZXI6OmNyZWF0ZSgKKyAgICAgICAgc3RkOjpmdW5jdGlvbjxzc2l6ZV90IC8qIGZyYW1lc19yZWFkICovCisgICAgICAgICAgICAgICAgICAgICh2b2lkICogLyogYnVmZmVyICovLCBzaXplX3QgLyogc2l6ZV9pbl9mcmFtZXMgKi8pPiByZWFkZXIsCisgICAgICAgIHVpbnQzMl90IHNhbXBsZVJhdGUsCisgICAgICAgIHVpbnQzMl90IGNoYW5uZWxDb3VudCwKKyAgICAgICAgYXVkaW9fZm9ybWF0X3QgZm9ybWF0LAorICAgICAgICBjb25zdCBzdGQ6OnN0cmluZyAmc3VmZml4KQoreworICAgIGNvbnN0IHN0ZDo6c3RyaW5nIGZpbGVuYW1lID0gZ2VuZXJhdGVGaWxlbmFtZShzdWZmaXgpOworCisgICAgaWYgKG1UaHJlYWRQb29sLmxhdW5jaChzdGQ6OnN0cmluZygiY3JlYXRlICIpICsgZmlsZW5hbWUsCisgICAgICAgICAgICBbPV0oKSB7IHJldHVybiBjcmVhdGVJbnRlcm5hbChyZWFkZXIsIHNhbXBsZVJhdGUsIGNoYW5uZWxDb3VudCwgZm9ybWF0LCBmaWxlbmFtZSk7IH0pCisgICAgICAgICAgICA9PSBOT19FUlJPUikgeworICAgICAgICByZXR1cm4gZmlsZW5hbWU7CisgICAgfQorICAgIHJldHVybiAiIjsKK30KKworc3RhdHVzX3QgQXVkaW9GaWxlSGFuZGxlcjo6c2V0RGlyZWN0b3J5KGNvbnN0IHN0ZDo6c3RyaW5nICZkaXJlY3RvcnkpCit7CisgICAgaWYgKCFpc0RpcmVjdG9yeVZhbGlkKGRpcmVjdG9yeSkpIHJldHVybiBCQURfVkFMVUU7CisKKyAgICAvLyBUT0RPOiBjb25zaWRlciB1c2luZyBzdGQ6OmZpbGVzeXN0ZW0gaW4gQysrMTcKKyAgICBESVIgKmRpciA9IG9wZW5kaXIoZGlyZWN0b3J5LmNfc3RyKCkpOworCisgICAgaWYgKGRpciA9PSBudWxscHRyKSB7CisgICAgICAgIEFMT0dXKCIlczogY2Fubm90IG9wZW4gZGlyZWN0b3J5ICVzIiwgX19mdW5jX18sIGRpcmVjdG9yeS5jX3N0cigpKTsKKyAgICAgICAgcmV0dXJuIEJBRF9WQUxVRTsKKyAgICB9CisKKyAgICBzaXplX3QgdG9SZW1vdmUgPSAwOworICAgIGRlY2x0eXBlKG1GaWxlcykgZmlsZXM7CisKKyAgICB3aGlsZSAoZmlsZXMuc2l6ZSgpIDwgTUFYX0ZJTEVTX1JFQUQpIHsKKyAgICAgICAgZXJybm8gPSAwOworICAgICAgICBjb25zdCBzdHJ1Y3QgZGlyZW50ICpyZXN1bHQgPSByZWFkZGlyKGRpcik7CisgICAgICAgIGlmIChyZXN1bHQgPT0gbnVsbHB0cikgeworICAgICAgICAgICAgQUxPR1dfSUYoZXJybm8gIT0gMCwgIiVzOiByZWFkZGlyIGZhaWx1cmUgJXMiLCBfX2Z1bmNfXywgc3RyZXJyb3IoZXJybm8pKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIC8vIGlzIGl0IGEgbWFuYWdlZCBmaWxlbmFtZT8KKyAgICAgICAgaWYgKCFpc01hbmFnZWRGaWxlbmFtZShyZXN1bHQtPmRfbmFtZSkpIHsKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB9CisgICAgICAgIGZpbGVzLmVtcGxhY2VfYmFjayhyZXN1bHQtPmRfbmFtZSk7CisgICAgfQorICAgICh2b2lkKWNsb3NlZGlyKGRpcik7CisKKyAgICAvLyBPUFRJTUlaQVRJT046IHdlIGRvbid0IG5lZWQgdG8gc3RhdCBlYWNoIGZpbGUsIHRoZSBmaWxlbmFtZXMgbmFtZXMgYXJlCisgICAgLy8gYWxyZWFkeSAocm91Z2hseSkgb3JkZXJlZCBieSBjcmVhdGlvbiBkYXRlLiAgd2UgdXNlIHN0ZDo6ZGVxdWUgaW5zdGVhZAorICAgIC8vIG9mIHN0ZDo6c2V0IGZvciBmYXN0ZXIgaW5zZXJ0aW9uIGFuZCBzb3J0aW5nIHRpbWVzLgorCisgICAgaWYgKGZpbGVzLnNpemUoKSA+IE1BWF9GSUxFU19LRUVQKSB7CisgICAgICAgIC8vIHJlbW92ZWQgZmlsZXMgY2FuIHVzZSBhIHBhcnRpdGlvbiAobm8gbmVlZCB0byBkbyBhIGZ1bGwgc29ydCkuCisgICAgICAgIHRvUmVtb3ZlID0gZmlsZXMuc2l6ZSgpIC0gTUFYX0ZJTEVTX0tFRVA7CisgICAgICAgIHN0ZDo6bnRoX2VsZW1lbnQoZmlsZXMuYmVnaW4oKSwgZmlsZXMuYmVnaW4oKSArIHRvUmVtb3ZlIC0gMSwgZmlsZXMuZW5kKCkpOworICAgIH0KKworICAgIC8vIGtlcHQgZmlsZXMgbXVzdCBiZSBzb3J0ZWQuCisgICAgc3RkOjpzb3J0KGZpbGVzLmJlZ2luKCkgKyB0b1JlbW92ZSwgZmlsZXMuZW5kKCkpOworCisgICAgeworICAgICAgICBzdGQ6OmxvY2tfZ3VhcmQ8c3RkOjptdXRleD4gX2wobUxvY2spOworCisgICAgICAgIG1EaXJlY3RvcnkgPSBkaXJlY3Rvcnk7CisgICAgICAgIG1GaWxlcyA9IHN0ZDo6bW92ZShmaWxlcyk7CisgICAgfQorCisgICAgaWYgKHRvUmVtb3ZlID4gMCkgeyAvLyBsYXVuY2ggYSBjbGVhbiBpbiBiYWNrZ3JvdW5kLgorICAgICAgICAodm9pZCltVGhyZWFkUG9vbC5sYXVuY2goCisgICAgICAgICAgICAgICAgc3RkOjpzdHJpbmcoImNsZWFuaW5nICIpICsgZGlyZWN0b3J5LCBbdGhpc10oKSB7IHJldHVybiBjbGVhbigpOyB9KTsKKyAgICB9CisgICAgcmV0dXJuIE5PX0VSUk9SOworfQorCitzdGF0dXNfdCBBdWRpb0ZpbGVIYW5kbGVyOjpjbGVhbihzdGQ6OnN0cmluZyAqZGlyZWN0b3J5KQoreworICAgIHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiBmaWxlc1RvUmVtb3ZlOworICAgIHN0ZDo6c3RyaW5nIGRpcjsKKyAgICB7CisgICAgICAgIHN0ZDo6bG9ja19ndWFyZDxzdGQ6Om11dGV4PiBfbChtTG9jayk7CisKKyAgICAgICAgaWYgKCFpc0RpcmVjdG9yeVZhbGlkKG1EaXJlY3RvcnkpKSByZXR1cm4gTk9fSU5JVDsKKworICAgICAgICBkaXIgPSBtRGlyZWN0b3J5OworICAgICAgICBpZiAobUZpbGVzLnNpemUoKSA+IE1BWF9GSUxFU19LRUVQKSB7CisgICAgICAgICAgICBzaXplX3QgdG9SZW1vdmUgPSBtRmlsZXMuc2l6ZSgpIC0gTUFYX0ZJTEVTX0tFRVA7CisKKyAgICAgICAgICAgIC8vIHVzZSBtb3ZlIGFuZCBlcmFzZSB0byBlZmZpY2llbnRseSB0cmFuc2ZlciBzdGQ6OnN0cmluZworICAgICAgICAgICAgc3RkOjptb3ZlKG1GaWxlcy5iZWdpbigpLAorICAgICAgICAgICAgICAgICAgICBtRmlsZXMuYmVnaW4oKSArIHRvUmVtb3ZlLAorICAgICAgICAgICAgICAgICAgICBzdGQ6OmJhY2tfaW5zZXJ0ZXIoZmlsZXNUb1JlbW92ZSkpOworICAgICAgICAgICAgbUZpbGVzLmVyYXNlKG1GaWxlcy5iZWdpbigpLCBtRmlsZXMuYmVnaW4oKSArIHRvUmVtb3ZlKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHN0ZDo6c3RyaW5nIGRpcnAgPSBkaXIgKyAiLyI7CisgICAgLy8gcmVtb3ZlIGZpbGVzIG91dHNpZGUgb2YgbG9jayBmb3IgYmV0dGVyIGNvbmN1cnJlbmN5LgorICAgIGZvciAoY29uc3QgYXV0byAmZmlsZSA6IGZpbGVzVG9SZW1vdmUpIHsKKyAgICAgICAgKHZvaWQpdW5saW5rKChkaXJwICsgZmlsZSkuY19zdHIoKSk7CisgICAgfQorCisgICAgLy8gcmV0dXJuIHRoZSBkaXJlY3RvcnkgaWYgcmVxdWVzdGVkLgorICAgIGlmIChkaXJlY3RvcnkgIT0gbnVsbHB0cikgeworICAgICAgICAqZGlyZWN0b3J5ID0gZGlyOworICAgIH0KKyAgICByZXR1cm4gTk9fRVJST1I7Cit9CisKK3N0YXR1c190IEF1ZGlvRmlsZUhhbmRsZXI6OlRocmVhZFBvb2w6OmxhdW5jaCgKKyAgICAgICAgY29uc3Qgc3RkOjpzdHJpbmcgJm5hbWUsIHN0ZDo6ZnVuY3Rpb248c3RhdHVzX3QoKT4gZnVuYykKK3sKKyAgICBpZiAobVRocmVhZFBvb2xTaXplID4gMSkgeworICAgICAgICBzdGQ6OmxvY2tfZ3VhcmQ8c3RkOjptdXRleD4gX2wobUxvY2spOworICAgICAgICBpZiAobUZ1dHVyZXMuc2l6ZSgpID49IG1UaHJlYWRQb29sU2l6ZSkgeworICAgICAgICAgICAgZm9yIChhdXRvIGl0ID0gbUZ1dHVyZXMuYmVnaW4oKTsgaXQgIT0gbUZ1dHVyZXMuZW5kKCk7KSB7CisgICAgICAgICAgICAgICAgY29uc3Qgc3RkOjpzdHJpbmcgJmZpbGVuYW1lID0gaXQtPmZpcnN0OworICAgICAgICAgICAgICAgIHN0ZDo6ZnV0dXJlPHN0YXR1c190PiAmZnV0dXJlID0gaXQtPnNlY29uZDsKKyAgICAgICAgICAgICAgICBpZiAoIWZ1dHVyZS52YWxpZCgpIHx8CisgICAgICAgICAgICAgICAgICAgICAgICBmdXR1cmUud2FpdF9mb3Ioc3RkOjpjaHJvbm86OnNlY29uZHMoMCkpID09IHN0ZDo6ZnV0dXJlX3N0YXR1czo6cmVhZHkpIHsKKyAgICAgICAgICAgICAgICAgICAgQUxPR1YoIiVzOiBmdXR1cmUgJXMgcmVhZHkiLCBfX2Z1bmNfXywgZmlsZW5hbWUuY19zdHIoKSk7CisgICAgICAgICAgICAgICAgICAgIGl0ID0gbUZ1dHVyZXMuZXJhc2UoaXQpOworICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIEFMT0dWKCIlczogZnV0dXJlICVzIG5vdCByZWFkeSIsIF9fZnVuY19fLCBmaWxlbmFtZS5jX3N0cigpKTsKKyAgICAgICAgICAgICAgICAgICAgKytpdDsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgaWYgKG1GdXR1cmVzLnNpemUoKSA8IG1UaHJlYWRQb29sU2l6ZSkgeworICAgICAgICAgICAgQUxPR1YoIiVzOiBkZWZlcnJlZCBjYWxsaW5nICVzIiwgX19mdW5jX18sIG5hbWUuY19zdHIoKSk7CisgICAgICAgICAgICBtRnV0dXJlcy5lbXBsYWNlX2JhY2sobmFtZSwgc3RkOjphc3luYyhzdGQ6OmxhdW5jaDo6YXN5bmMsIGZ1bmMpKTsKKyAgICAgICAgICAgIHJldHVybiBOT19FUlJPUjsKKyAgICAgICAgfQorICAgIH0KKyAgICBBTE9HVigiJXM6IGltbWVkaWF0ZSBjYWxsaW5nICVzIiwgX19mdW5jX18sIG5hbWUuY19zdHIoKSk7CisgICAgcmV0dXJuIGZ1bmMoKTsKK30KKworc3RhdHVzX3QgQXVkaW9GaWxlSGFuZGxlcjo6Y3JlYXRlSW50ZXJuYWwoCisgICAgICAgIHN0ZDo6ZnVuY3Rpb248c3NpemVfdCAvKiBmcmFtZXNfcmVhZCAqLworICAgICAgICAgICAgICAgICAgICAodm9pZCAqIC8qIGJ1ZmZlciAqLywgc2l6ZV90IC8qIHNpemVfaW5fZnJhbWVzICovKT4gcmVhZGVyLAorICAgICAgICB1aW50MzJfdCBzYW1wbGVSYXRlLAorICAgICAgICB1aW50MzJfdCBjaGFubmVsQ291bnQsCisgICAgICAgIGF1ZGlvX2Zvcm1hdF90IGZvcm1hdCwKKyAgICAgICAgY29uc3Qgc3RkOjpzdHJpbmcgJmZpbGVuYW1lKQoreworICAgIC8vIEF0dGVtcHQgdG8gY2hvb3NlIHRoZSBiZXN0IG1hdGNoaW5nIGZpbGUgZm9ybWF0LgorICAgIC8vIFdlIGNhbiBjaG9vc2UgYW55IHNmX2Zvcm1hdAorICAgIC8vIGJ1dCB3cml0ZUZvcm1hdCBtdXN0IGJlIG9uZSBvZiAxNiwgMzIsIGZsb2F0CisgICAgLy8gZHVlIHRvIHNmX3dyaXRlZiBjb21wYXRpYmlsaXR5LgorICAgIGludCBzZl9mb3JtYXQ7CisgICAgYXVkaW9fZm9ybWF0X3Qgd3JpdGVGb3JtYXQ7CisgICAgc3dpdGNoIChmb3JtYXQpIHsKKyAgICBjYXNlIEFVRElPX0ZPUk1BVF9QQ01fOF9CSVQ6CisgICAgY2FzZSBBVURJT19GT1JNQVRfUENNXzE2X0JJVDoKKyAgICAgICAgc2ZfZm9ybWF0ID0gU0ZfRk9STUFUX1BDTV8xNjsKKyAgICAgICAgd3JpdGVGb3JtYXQgPSBBVURJT19GT1JNQVRfUENNXzE2X0JJVDsKKyAgICAgICAgQUxPR1YoIiVzOiAlcyB1c2luZyBQQ01fMTYgZm9yIGZvcm1hdCAlI3giLCBfX2Z1bmNfXywgZmlsZW5hbWUuY19zdHIoKSwgZm9ybWF0KTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBBVURJT19GT1JNQVRfUENNXzhfMjRfQklUOgorICAgIGNhc2UgQVVESU9fRk9STUFUX1BDTV8yNF9CSVRfUEFDS0VEOgorICAgIGNhc2UgQVVESU9fRk9STUFUX1BDTV8zMl9CSVQ6CisgICAgICAgIHNmX2Zvcm1hdCA9IFNGX0ZPUk1BVF9QQ01fMzI7CisgICAgICAgIHdyaXRlRm9ybWF0ID0gQVVESU9fRk9STUFUX1BDTV8zMl9CSVQ7CisgICAgICAgIEFMT0dWKCIlczogJXMgdXNpbmcgUENNXzMyIGZvciBmb3JtYXQgJSN4IiwgX19mdW5jX18sIGZpbGVuYW1lLmNfc3RyKCksIGZvcm1hdCk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQVVESU9fRk9STUFUX1BDTV9GTE9BVDoKKyAgICAgICAgc2ZfZm9ybWF0ID0gU0ZfRk9STUFUX0ZMT0FUOworICAgICAgICB3cml0ZUZvcm1hdCA9IEFVRElPX0ZPUk1BVF9QQ01fRkxPQVQ7CisgICAgICAgIEFMT0dWKCIlczogJXMgdXNpbmcgUENNX0ZMT0FUIGZvciBmb3JtYXQgJSN4IiwgX19mdW5jX18sIGZpbGVuYW1lLmNfc3RyKCksIGZvcm1hdCk7CisgICAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICAgIC8vIFRPRE86CisgICAgICAgIC8vIGhhbmRsZSBhdWRpb19oYXNfcHJvcG9ydGlvbmFsX2ZyYW1lcygpIGZvcm1hdHMuCisgICAgICAgIC8vIGhhbmRsZSBjb21wcmVzc2VkIGZvcm1hdHMgYXMgc2luZ2xlIGJ5dGUgZmlsZXMuCisgICAgICAgIHJldHVybiBCQURfVkFMVUU7CisgICAgfQorCisgICAgc3RkOjpzdHJpbmcgZGlyZWN0b3J5OworICAgIHN0YXR1c190IHN0YXR1cyA9IGNsZWFuKCZkaXJlY3RvcnkpOworICAgIGlmIChzdGF0dXMgIT0gTk9fRVJST1IpIHJldHVybiBzdGF0dXM7CisgICAgc3RkOjpzdHJpbmcgZGlyUHJlZml4ID0gZGlyZWN0b3J5ICsgIi8iOworCisgICAgY29uc3Qgc3RkOjpzdHJpbmcgcGF0aCA9IGRpclByZWZpeCArIGZpbGVuYW1lOworCisgICAgLyogY29uc3QgKi8gU0ZfSU5GTyBpbmZvID0geworICAgICAgICAuZnJhbWVzID0gMCwKKyAgICAgICAgLnNhbXBsZXJhdGUgPSAoaW50KXNhbXBsZVJhdGUsCisgICAgICAgIC5jaGFubmVscyA9IChpbnQpY2hhbm5lbENvdW50LAorICAgICAgICAuZm9ybWF0ID0gU0ZfRk9STUFUX1dBViB8IHNmX2Zvcm1hdCwKKyAgICB9OworICAgIFNOREZJTEUgKnNmID0gc2Zfb3BlbihwYXRoLmNfc3RyKCksIFNGTV9XUklURSwgJmluZm8pOworICAgIGlmIChzZiA9PSBudWxscHRyKSB7CisgICAgICAgIHJldHVybiBJTlZBTElEX09QRVJBVElPTjsKKyAgICB9CisKKyAgICBzaXplX3QgdG90YWwgPSAwOworICAgIHZvaWQgKmJ1ZmZlciA9IG1hbGxvYyhGUkFNRVNfUEVSX1JFQUQgKiBzdGQ6Om1heCgKKyAgICAgICAgICAgIGNoYW5uZWxDb3VudCAqIGF1ZGlvX2J5dGVzX3Blcl9zYW1wbGUod3JpdGVGb3JtYXQpLCAvL291dHB1dCBmcmFtZXNpemUKKyAgICAgICAgICAgIGNoYW5uZWxDb3VudCAqIGF1ZGlvX2J5dGVzX3Blcl9zYW1wbGUoZm9ybWF0KSkpOyAvLyBpbnB1dCBmcmFtZXNpemUKKyAgICBpZiAoYnVmZmVyID09IG51bGxwdHIpIHsKKyAgICAgICAgc2ZfY2xvc2Uoc2YpOworICAgICAgICByZXR1cm4gTk9fTUVNT1JZOworICAgIH0KKworICAgIGZvciAoOzspIHsKKyAgICAgICAgY29uc3Qgc3NpemVfdCBhY3R1YWxSZWFkID0gcmVhZGVyKGJ1ZmZlciwgRlJBTUVTX1BFUl9SRUFEKTsKKyAgICAgICAgaWYgKGFjdHVhbFJlYWQgPD0gMCkgeworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgICAvLyBDb252ZXJ0IGlucHV0IGZvcm1hdCB0byB3cml0ZUZvcm1hdCBhcyBuZWVkZWQuCisgICAgICAgIGlmIChmb3JtYXQgIT0gd3JpdGVGb3JtYXQpIHsKKyAgICAgICAgICAgIG1lbWNweV9ieV9hdWRpb19mb3JtYXQoCisgICAgICAgICAgICAgICAgICAgIGJ1ZmZlciwgd3JpdGVGb3JtYXQsIGJ1ZmZlciwgZm9ybWF0LCBhY3R1YWxSZWFkICogaW5mby5jaGFubmVscyk7CisgICAgICAgIH0KKworICAgICAgICBzc2l6ZV90IHJlYWxseVdyaXR0ZW47CisgICAgICAgIHN3aXRjaCAod3JpdGVGb3JtYXQpIHsKKyAgICAgICAgY2FzZSBBVURJT19GT1JNQVRfUENNXzE2X0JJVDoKKyAgICAgICAgICAgIHJlYWxseVdyaXR0ZW4gPSBzZl93cml0ZWZfc2hvcnQoc2YsIChjb25zdCBpbnQxNl90ICopYnVmZmVyLCBhY3R1YWxSZWFkKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEFVRElPX0ZPUk1BVF9QQ01fMzJfQklUOgorICAgICAgICAgICAgcmVhbGx5V3JpdHRlbiA9IHNmX3dyaXRlZl9pbnQoc2YsIChjb25zdCBpbnQzMl90ICopYnVmZmVyLCBhY3R1YWxSZWFkKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEFVRElPX0ZPUk1BVF9QQ01fRkxPQVQ6CisgICAgICAgICAgICByZWFsbHlXcml0dGVuID0gc2Zfd3JpdGVmX2Zsb2F0KHNmLCAoY29uc3QgZmxvYXQgKilidWZmZXIsIGFjdHVhbFJlYWQpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBMT0dfQUxXQVlTX0ZBVEFMKCIlczogJXMgd3JpdGVGb3JtYXQ6ICUjeCIsIF9fZnVuY19fLCBmaWxlbmFtZS5jX3N0cigpLCB3cml0ZUZvcm1hdCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChyZWFsbHlXcml0dGVuIDwgMCkgeworICAgICAgICAgICAgQUxPR1coIiVzOiAlcyB3cml0ZSBlcnJvcjogJXpkIiwgX19mdW5jX18sIGZpbGVuYW1lLmNfc3RyKCksIHJlYWxseVdyaXR0ZW4pOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgdG90YWwgKz0gcmVhbGx5V3JpdHRlbjsKKyAgICAgICAgaWYgKHJlYWxseVdyaXR0ZW4gPCBhY3R1YWxSZWFkKSB7CisgICAgICAgICAgICBBTE9HVygiJXM6ICVzIHdyaXRlIHNob3J0IGNvdW50OiAlemQgPCAlemQiLAorICAgICAgICAgICAgICAgICAgICAgX19mdW5jX18sIGZpbGVuYW1lLmNfc3RyKCksIHJlYWxseVdyaXR0ZW4sIGFjdHVhbFJlYWQpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICB9CisgICAgc2ZfY2xvc2Uoc2YpOworICAgIGZyZWUoYnVmZmVyKTsKKyAgICBpZiAodG90YWwgPT0gMCkgeworICAgICAgICAodm9pZCl1bmxpbmsocGF0aC5jX3N0cigpKTsKKyAgICAgICAgcmV0dXJuIE5PVF9FTk9VR0hfREFUQTsKKyAgICB9CisKKyAgICAvLyBTdWNjZXNzOiBhZGQgb3VyIG5hbWUgdG8gbWFuYWdlZCBmaWxlcy4KKyAgICB7CisgICAgICAgIHN0ZDo6bG9ja19ndWFyZDxzdGQ6Om11dGV4PiBfbChtTG9jayk7CisgICAgICAgIC8vIHdlYWsgc3luY2hyb25pemF0aW9uIC0gb25seSB1cGRhdGUgbUZpbGVzIGlmIHRoZSBkaXJlY3RvcnkgaGFzbid0IGNoYW5nZWQuCisgICAgICAgIGlmIChtRGlyZWN0b3J5ID09IGRpcmVjdG9yeSkgeworICAgICAgICAgICAgbUZpbGVzLmVtcGxhY2VfYmFjayhmaWxlbmFtZSk7ICAvLyBhZGQgdG8gdGhlIGVuZCB0byBwcmVzZXJ2ZSBzb3J0LgorICAgICAgICB9CisgICAgfQorICAgIHJldHVybiBOT19FUlJPUjsgLy8gcmV0dXJuIGZ1bGwgcGF0aAorfQorCit9IC8vIG5hbWVzcGFjZSBhbmRyb2lkCisKKyNlbmRpZiAvLyBURUVfU0lOSwpkaWZmIC0tZ2l0IGEvc2VydmljZXMvYXVkaW9mbGluZ2VyL05CQUlPX1RlZS5oIGIvc2VydmljZXMvYXVkaW9mbGluZ2VyL05CQUlPX1RlZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZlZDhjYzgKLS0tIC9kZXYvbnVsbAorKysgYi9zZXJ2aWNlcy9hdWRpb2ZsaW5nZXIvTkJBSU9fVGVlLmgKQEAgLTAsMCArMSwzMjYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTggVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworCisvLyBFbmFibGVkIHdpdGggVEVFX1NJTksgaW4gQ29uZmlndXJhdGlvbi5oCisjaWZuZGVmIEFORFJPSURfTkJBSU9fVEVFX0gKKyNkZWZpbmUgQU5EUk9JRF9OQkFJT19URUVfSAorCisjaWZkZWYgVEVFX1NJTksKKworI2luY2x1ZGUgPGF0b21pYz4KKyNpbmNsdWRlIDxtdXRleD4KKyNpbmNsdWRlIDxzZXQ+CisKKyNpbmNsdWRlIDxjdXRpbHMvcHJvcGVydGllcy5oPgorI2luY2x1ZGUgPG1lZGlhL25iYWlvL05CQUlPLmg+CisKK25hbWVzcGFjZSBhbmRyb2lkIHsKKworLyoqCisgKiBUaGUgTkJBSU9fVGVlIHVzZXMgdGhlIE5CQUlPIFBpcGUgYW5kIFBpcGVSZWFkZXIgZm9yIG5vbmJsb2NraW5nCisgKiBkYXRhIGNvbGxlY3Rpb24sIGZvciBldmVudHVhbCBkdW1wIHRvIGxvZyBmaWxlcy4KKyAqIFNlZSBodHRwczovL3NvdXJjZS5hbmRyb2lkLmNvbS9kZXZpY2VzL2F1ZGlvL2RlYnVnZ2luZyBmb3IgaG93IHRvCisgKiBlbmFibGUgYnkgcm8uZGVidWdnYWJsZSBhbmQgYWYudGVlIHByb3BlcnRpZXMuCisgKgorICogVGhlIHdyaXRlKCkgaW50byB0aGUgTkJBSU9fVGVlIGlzIHRoZXJlZm9yZSBub25ibG9ja2luZywKKyAqIGJ1dCBjaGFuZ2luZyBOQkFJT19UZWUgZm9ybWF0cyB3aXRoIHNldCgpIGNhbm5vdCBiZSBkb25lIGR1cmluZyBhIHdyaXRlKCk7CisgKiB1c3VhbGx5IHRoZSBjYWxsZXIgYWxyZWFkeSBpbXBsZW1lbnRzIHRoaXMgbXV0dWFsIGV4Y2x1c2lvbi4KKyAqCisgKiBBbGwgb3RoZXIgY2FsbHMgZXhjZXB0IHNldCgpIHZzIHdyaXRlKCkgbWF5IG9jY3VyIGF0IGFueSB0aW1lLgorICoKKyAqIGR1bXAoKSBkaXNydXB0aW9uIGlzIG1pbmltaXplZCB0byB0aGUgY2FsbGVyIHNpbmNlIHN5c3RlbSBjYWxscyBhcmUgZXhlY3V0ZWQKKyAqIGluIGFuIGFzeW5jaHJvbm91cyB0aHJlYWQgKHdoZW4gcG9zc2libGUpLgorICoKKyAqIEN1cnJlbnRseSB0aGUgTkJBSU9fVGVlIGlzICJoYXJkd2lyZWQiIGZvciBBdWRpb0ZsaW5nZXIgc3VwcG9ydC4KKyAqCisgKiBTb21lIEF1ZGlvRmxpbmdlciBzcGVjaWZpYyBub3RlczoKKyAqCisgKiAxKSBUZWVzIGNhcHR1cmUgb25seSBsaW5lYXIgUENNIGRhdGEuCisgKiAyKSBUZWVzIHdpdGhvdXQgYW55IGRhdGEgd3JpdHRlbiBhcmUgY29uc2lkZXJlZCBlbXB0eSBhbmQgZG8gbm90IGdlbmVyYXRlCisgKiAgICBhbnkgb3V0cHV0IGZpbGVzLgorICogMikgT25jZSBhIFRlZSBkdW1wcyBkYXRhLCBpdCBpcyBjb25zaWRlcmVkICJlbXB0aWVkIiBhbmQgbmV3IGRhdGEKKyAqICAgIG5lZWRzIHRvIGJlIHdyaXR0ZW4gYmVmb3JlIGFub3RoZXIgVGVlIGZpbGUgaXMgZ2VuZXJhdGVkLgorICogMykgVGVlIGZpbGUgZm9ybWF0IGlzCisgKiAgICBXQVYgaW50ZWdlciBQQ00gMTYgYml0IGZvciBBVURJT19GT1JNQVRfUENNXzhfQklULCBBVURJT19GT1JNQVRfUENNXzE2X0JJVC4KKyAqICAgIFdBViBpbnRlZ2VyIFBDTSAzMiBiaXQgZm9yIEFVRElPX0ZPUk1BVF9QQ01fOF8yNF9CSVQsIEFVRElPX0ZPUk1BVF9QQ01fMjRfQklUX1BBQ0tFRAorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQVVESU9fRk9STUFUX1BDTV8zMl9CSVQuCisgKiAgICBXQVYgZmxvYXQgUENNIDMyIGJpdCBmb3IgQVVESU9fRk9STUFUX1BDTV9GTE9BVC4KKyAqCisgKiBJbnB1dF9UaHJlYWQ6CisgKiAxKSBDYXB0dXJlIGJ1ZmZlciBpcyB0ZWVkIHdoZW4gcmVhZCBmcm9tIHRoZSBIQUwsIGJlZm9yZSByZXNhbXBsaW5nIGZvciB0aGUgQXVkaW9SZWNvcmQKKyAqICAgIGNsaWVudC4KKyAqCisgKiBPdXRwdXRfVGhyZWFkOgorICogMSkgTWl4ZXJUaHJlYWRzIHdpbGwgdGVlIGF0IHRoZSBGYXN0TWl4ZXIgb3V0cHV0IChpZiBpdCBoYXMgb25lKSBvciBhdCB0aGUKKyAqICAgIE5vcm1hbE1peGVyIG91dHB1dCAoaWYgbm8gRmFzdE1peGVyKS4KKyAqIDIpIER1cGxpY2F0aW5nVGhyZWFkcyBkbyBub3QgdGVlIGFueSBtaXhlZCBkYXRhLiBBcHBseSBhIHRlZSBvbiB0aGUgZG93bnN0cmVhbSBPdXRwdXRUcmFjaworICogICAgb3Igb24gdGhlIHVwc3RyZWFtIHBsYXliYWNrIFRyYWNrcy4KKyAqIDMpIERpcmVjdFRocmVhZHMgYW5kIE9mZmxvYWRUaHJlYWRzIGRvIG5vdCB0ZWUgYW55IGRhdGEuIFRoZSB1cHN0cmVhbSB0cmFjaworICogICAgKGlmIGxpbmVhciBQQ00gZm9ybWF0KSBtYXkgYmUgdGVlZCB0byBkaXNjb3ZlciBkYXRhLgorICogNCkgTW1hcFRocmVhZHMgYXJlIG5vdCBzdXBwb3J0ZWQuCisgKgorICogVHJhY2tzOgorICogMSkgUmVjb3JkVHJhY2tzIGFuZCBwbGF5YmFjayBUcmFja3MgdGVlIGFzIGRhdGEgaXMgYmVpbmcgd3JpdHRlbiB0byBvcgorICogICAgcmVhZCBmcm9tIHRoZSBzaGFyZWQgY2xpZW50LXNlcnZlciB0cmFjayBidWZmZXIgYnkgdGhlIGFzc29jaWF0ZWQgVGhyZWFkcy4KKyAqIDIpIFRoZSBtZWNoYW5pc20gaXMgb24gdGhlIEF1ZGlvQnVmZmVyUHJvdmlkZXIgcmVsZWFzZSgpIHNvIGxhcmdlIHN0YXRpYyBUcmFjaworICogICAgcGxheWJhY2sgbWF5IG5vdCBzaG93IGFueSBUZWUgZGF0YSBkZXBlbmRpbmcgb24gd2hlbiBpdCBpcyByZWxlYXNlZC4KKyAqIDMpIFdoZW4gYSB0cmFjayBiZWNvbWVzIGluYWN0aXZlLCB0aGUgVGhyZWFkIHdpbGwgdHJpZ2dlciBhIGR1bXAuCisgKi8KKworY2xhc3MgTkJBSU9fVGVlIHsKK3B1YmxpYzoKKyAgICAvKiBURUVfRkxBRyBpcyB1c2VkIGluIHNldCgpIGFuZCBtdXN0IG1hdGNoIHRoZSBmbGFncyBmb3IgdGhlIGFmLnRlZSBwcm9wZXJ0eQorICAgICAgIGdpdmVuIGluIGh0dHBzOi8vc291cmNlLmFuZHJvaWQuY29tL2RldmljZXMvYXVkaW8vZGVidWdnaW5nCisgICAgKi8KKyAgICBlbnVtIFRFRV9GTEFHIHsKKyAgICAgICAgVEVFX0ZMQUdfTk9ORSA9IDAsCisgICAgICAgIFRFRV9GTEFHX0lOUFVUX1RIUkVBRCA9ICgxIDw8IDApLCAgLy8gdHJlYXQgYXMgYSBUZWUgZm9yIGlucHV0IChDYXB0dXJlKSBUaHJlYWRzCisgICAgICAgIFRFRV9GTEFHX09VVFBVVF9USFJFQUQgPSAoMSA8PCAxKSwgLy8gdHJlYXQgYXMgYSBUZWUgZm9yIG91dHB1dCAoUGxheWJhY2spIFRocmVhZHMKKyAgICAgICAgVEVFX0ZMQUdfVFJBQ0sgPSAoMSA8PCAyKSwgICAgICAgICAvLyB0cmVhdCBhcyBhIFRlZSBmb3IgdHJhY2tzIChSZWNvcmQgYW5kIFBsYXliYWNrKQorICAgIH07CisKKyAgICBOQkFJT19UZWUoKQorICAgICAgICA6IG1UZWUoc3RkOjptYWtlX3NoYXJlZDxOQkFJT19UZWVJbXBsPigpKQorICAgIHsKKyAgICAgICAgZ2V0UnVubmluZ1RlZXMoKS5hZGQobVRlZSk7CisgICAgfQorCisgICAgfk5CQUlPX1RlZSgpIHsKKyAgICAgICAgZ2V0UnVubmluZ1RlZXMoKS5yZW1vdmUobVRlZSk7CisgICAgICAgIGR1bXAoLTEsICJfRFRPUiIpOyAvLyBsb2cgYW55IGRhdGEgcmVtYWluaW5nIGluIFRlZS4KKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBcYnJpZWYgc2V0IGlzIHVzZWQgZm9yIGRlZmVycmVkIGNvbmZpZ3VyYXRpb24gb2YgVGVlLgorICAgICAqCisgICAgICogIE1heSBiZSBjYWxsZWQgYW55dGltZSBleGNlcHQgY29uY3VycmVudGx5IHdpdGggd3JpdGUoKS4KKyAgICAgKgorICAgICAqIFxwYXJhbSBmb3JtYXQgTkJBSU9fRm9ybWF0IHVzZWQgdG8gb3BlbiBOQkFJTyBwaXBlcworICAgICAqIFxwYXJhbSBmbGFncyAoaHR0cHM6Ly9zb3VyY2UuYW5kcm9pZC5jb20vZGV2aWNlcy9hdWRpby9kZWJ1Z2dpbmcpCisgICAgICogICAgICAgICAgICAgIC0gVEVFX0ZMQUdfTk9ORSB0byBieXBhc3MgYWYudGVlIHByb3BlcnR5IGNoZWNrcyAoZGVmYXVsdCk7CisgICAgICogICAgICAgICAgICAgIC0gVEVFX0ZMQUdfSU5QVVRfVEhSRUFEIHRvIGNoZWNrIGFmLnRlZSBpZiBpbnB1dCB0aHJlYWQgbG9nZ2luZyBzZXQ7CisgICAgICogICAgICAgICAgICAgIC0gVEVFX0ZMQUdfT1VUUFVUX1RIUkVBRCB0byBjaGVjayBhZi50ZWUgaWYgb3V0cHV0IHRocmVhZCBsb2dnaW5nIHNldDsKKyAgICAgKiAgICAgICAgICAgICAgLSBURUVfRkxBR19UUkFDSyB0byBjaGVjayBhZi50ZWUgaWYgdHJhY2sgbG9nZ2luZyBzZXQuCisgICAgICogXHBhcmFtIGZyYW1lcyBudW1iZXIgb2YgZnJhbWVzIHRvIG9wZW4gdGhlIE5CQUlPIHBpcGUgKHNldCB0byAwIHRvIHVzZSBkZWZhdWx0KS4KKyAgICAgKgorICAgICAqIFxyZXR1cm4KKyAgICAgKiAgICAgICAgIC0gTk9fRVJST1Igb24gc3VjY2VzcyAob3IgZm9ybWF0IHVuY2hhbmdlZCkKKyAgICAgKiAgICAgICAgIC0gQkFEX1ZBTFVFIGlmIGZvcm1hdCBvciBmbGFncyBpbnZhbGlkLgorICAgICAqICAgICAgICAgLSBQRVJNSVNTSU9OX0RFTklFRCBpZiBmbGFncyBub3QgYWxsb3dlZCBieSBhZi50ZWUKKyAgICAgKi8KKworICAgIHN0YXR1c190IHNldChjb25zdCBOQkFJT19Gb3JtYXQgJmZvcm1hdCwKKyAgICAgICAgICAgIFRFRV9GTEFHIGZsYWdzID0gVEVFX0ZMQUdfTk9ORSwgc2l6ZV90IGZyYW1lcyA9IDApIGNvbnN0IHsKKyAgICAgICAgcmV0dXJuIG1UZWUtPnNldChmb3JtYXQsIGZsYWdzLCBmcmFtZXMpOworICAgIH0KKworICAgIHN0YXR1c190IHNldCh1aW50MzJfdCBzYW1wbGVSYXRlLCB1aW50MzJfdCBjaGFubmVsQ291bnQsIGF1ZGlvX2Zvcm1hdF90IGZvcm1hdCwKKyAgICAgICAgICAgIFRFRV9GTEFHIGZsYWdzID0gVEVFX0ZMQUdfTk9ORSwgc2l6ZV90IGZyYW1lcyA9IDApIGNvbnN0IHsKKyAgICAgICAgcmV0dXJuIG1UZWUtPnNldChGb3JtYXRfZnJvbV9TUl9DKHNhbXBsZVJhdGUsIGNoYW5uZWxDb3VudCwgZm9ybWF0KSwgZmxhZ3MsIGZyYW1lcyk7CisgICAgfQorCisgICAgLyoqCisgICAgICogXGJyaWVmIHdyaXRlIGRhdGEgdG8gdGhlIHRlZS4KKyAgICAgKgorICAgICAqIFRoaXMgY2FsbCBpcyBsb2NrIGZyZWUgKGFzIHNoYXJlZCBwb2ludGVyIGFuZCBOQkFJTyBpcyBsb2NrIGZyZWUpOworICAgICAqIG1heSBiZSBjYWxsZWQgc2ltdWx0YW5lb3VzIHRvIGFsbCBtZXRob2RzIGV4Y2VwdCBzZXQoKS4KKyAgICAgKgorICAgICAqIFxwYXJhbSBidWZmZXIgdG8gd3JpdGUgdG8gcGlwZS4KKyAgICAgKiBccGFyYW0gZnJhbWVDb3VudCBpbiBmcmFtZXMgYXMgc3BlY2lmaWVkIGJ5IHRoZSBmb3JtYXQgcGFzc2VkIHRvIHNldCgpCisgICAgICovCisKKyAgICB2b2lkIHdyaXRlKGNvbnN0IHZvaWQgKmJ1ZmZlciwgc2l6ZV90IGZyYW1lQ291bnQpIGNvbnN0IHsKKyAgICAgICAgbVRlZS0+d3JpdGUoYnVmZmVyLCBmcmFtZUNvdW50KTsKKyAgICB9CisKKyAgICAvKiogc2V0cyBUZWUgaWQgc3RyaW5nIHdoaWNoIGlkZW50aWZpZXMgdGhlIGdlbmVyYXRlZCBmaWxlIChzaG91bGQgYmUgdW5pcXVlKS4gKi8KKyAgICB2b2lkIHNldElkKGNvbnN0IHN0ZDo6c3RyaW5nICZpZCkgY29uc3QgeworICAgICAgICBtVGVlLT5zZXRJZChpZCk7CisgICAgfQorCisgICAgLyoqCisgICAgICogXGJyaWVmIGR1bXAgdGhlIGF1ZGlvIGNvbnRlbnQgd3JpdHRlbiB0byB0aGUgVGVlLgorICAgICAqCisgICAgICogXHBhcmFtIGZkIGZpbGUgZGVzY3JpcHRvciB0byB3cml0ZSBkdW1wZWQgZmlsZW5hbWUgZm9yIGxvZ2dpbmcsIHVzZSAtMSB0byBpZ25vcmUuCisgICAgICogXHBhcmFtIHJlYXNvbiBzdHJpbmcgc3VmZml4IHRvIGFwcGVuZCB0byB0aGUgZ2VuZXJhdGVkIGZpbGUuCisgICAgICovCisgICAgdm9pZCBkdW1wKGludCBmZCwgY29uc3Qgc3RkOjpzdHJpbmcgJnJlYXNvbiA9ICIiKSBjb25zdCB7CisgICAgICAgIG1UZWUtPmR1bXAoZmQsIHJlYXNvbik7CisgICAgfQorCisgICAgLyoqCisgICAgICogXGJyaWVmIGR1bXAgYWxsIFRlZXMgY3VycmVudGx5IGFsaXZlLgorICAgICAqCisgICAgICogXHBhcmFtIGZkIGZpbGUgZGVzY3JpcHRvciB0byB3cml0ZSBkdW1wZWQgZmlsZW5hbWUgZm9yIGxvZ2dpbmcsIHVzZSAtMSB0byBpZ25vcmUuCisgICAgICogXHBhcmFtIHJlYXNvbiBzdHJpbmcgc3VmZml4IHRvIGFwcGVuZCB0byB0aGUgZ2VuZXJhdGVkIGZpbGUuCisgICAgICovCisgICAgc3RhdGljIHZvaWQgZHVtcEFsbChpbnQgZmQsIGNvbnN0IHN0ZDo6c3RyaW5nICZyZWFzb24gPSAiIikgeworICAgICAgICBnZXRSdW5uaW5nVGVlcygpLmR1bXAoZmQsIHJlYXNvbik7CisgICAgfQorCitwcml2YXRlOgorCisgICAgLyoqIFRoZSB1bmRlcmx5aW5nIGltcGxlbWVudGF0aW9uIG9mIHRoZSBUZWUgLSB0aGUgbGlmZXRpbWUgaXMgdGhyb3VnaAorICAgICAgICBhIHNoYXJlZCBwb2ludGVyIHNvIGRlc3RydWN0aW9uIG9mIHRoZSBOQkFJT19UZWUgY29udGFpbmVyIG1heSBwcm9jZWVkCisgICAgICAgIGV2ZW4gdGhvdWdoIGR1bXBpbmcgaXMgb2NjdXJyaW5nLiAqLworICAgIGNsYXNzIE5CQUlPX1RlZUltcGwgeworICAgIHB1YmxpYzoKKyAgICAgICAgc3RhdHVzX3Qgc2V0KGNvbnN0IE5CQUlPX0Zvcm1hdCAmZm9ybWF0LCBURUVfRkxBRyBmbGFncywgc2l6ZV90IGZyYW1lcykgeworICAgICAgICAgICAgc3RhdGljIGNvbnN0IGludCB0ZWVDb25maWcgPSBwcm9wZXJ0eV9nZXRfYm9vbCgicm8uZGVidWdnYWJsZSIsIGZhbHNlKQorICAgICAgICAgICAgICAgICAgID8gcHJvcGVydHlfZ2V0X2ludDMyKCJhZi50ZWUiLCAwKSA6IDA7CisKKyAgICAgICAgICAgIC8vIGNoZWNrIHRoZSB0eXBlIG9mIFRlZQorICAgICAgICAgICAgY29uc3QgVEVFX0ZMQUcgdHlwZSA9IFRFRV9GTEFHKAorICAgICAgICAgICAgICAgICAgICBmbGFncyAmIChURUVfRkxBR19JTlBVVF9USFJFQUQgfCBURUVfRkxBR19PVVRQVVRfVEhSRUFEIHwgVEVFX0ZMQUdfVFJBQ0spKTsKKworICAgICAgICAgICAgLy8gcGFyYW1ldGVyIGZsYWdzIGNhbid0IHNlbGVjdCBtdWx0aXBsZSB0eXBlcy4KKyAgICAgICAgICAgIGlmIChfX2J1aWx0aW5fcG9wY291bnQodHlwZSkgPiAxKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIEJBRF9WQUxVRTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgLy8gaWYgdHlwZSBpcyBzZXQsIHdlIGNoZWNrIHRvIHNlZSBpZiBpdCBpcyBwZXJtaXR0ZWQgYnkgY29uZmlndXJhdGlvbi4KKyAgICAgICAgICAgIGlmICh0eXBlICE9IDAgJiYgKHR5cGUgJiB0ZWVDb25maWcpID09IDApIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gUEVSTUlTU0lPTl9ERU5JRUQ7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIC8vIGRldGVybWluZSBudW1iZXIgb2YgZnJhbWVzIGZvciBUZWUKKyAgICAgICAgICAgIGlmIChmcmFtZXMgPT0gMCkgeworICAgICAgICAgICAgICAgIC8vIFRPRE86IGNvbnNpZGVyIHZhcnlpbmcgZnJhbWUgY291bnQgYmFzZWQgb24gdHlwZS4KKyAgICAgICAgICAgICAgICBmcmFtZXMgPSBERUZBVUxUX1RFRV9GUkFNRVM7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIC8vIFRPRE86IHNob3VsZCB3ZSBjaGVjayBtaW5pbXVtIG51bWJlciBvZiBmcmFtZXM/CisKKyAgICAgICAgICAgIC8vIGRvbid0IGRvIGFueXRoaW5nIGlmIGZvcm1hdCBhbmQgZnJhbWVzIGFyZSB0aGUgc2FtZS4KKyAgICAgICAgICAgIGlmIChGb3JtYXRfaXNFcXVhbChmb3JtYXQsIG1Gb3JtYXQpICYmIGZyYW1lcyA9PSBtRnJhbWVzKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIE5PX0VSUk9SOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBib29sIGVuYWJsZWQgPSBmYWxzZTsKKyAgICAgICAgICAgIGF1dG8gc2lua3NvdXJjZSA9IG1ha2VTaW5rU291cmNlKGZvcm1hdCwgZnJhbWVzLCAmZW5hYmxlZCk7CisKKyAgICAgICAgICAgIC8vIGVuYWJsZWQgaXMgc2V0IGlmIG1ha2VTaW5rU291cmNlIGlzIHN1Y2Nlc3NmdWwuCisgICAgICAgICAgICAvLyBOb3RlOiBhcyBtZW50aW9uZWQgaW4gTkJBSU9fVGVlOjpzZXQoKSwgZG9uJ3QgY2FsbCBzZXQoKSB3aGlsZSB3cml0ZSgpIGlzCisgICAgICAgICAgICAvLyBvbmdvaW5nLgorICAgICAgICAgICAgaWYgKGVuYWJsZWQpIHsKKyAgICAgICAgICAgICAgICBzdGQ6OmxvY2tfZ3VhcmQ8c3RkOjptdXRleD4gX2wobUxvY2spOworICAgICAgICAgICAgICAgIG1GbGFncyA9IGZsYWdzOworICAgICAgICAgICAgICAgIG1Gb3JtYXQgPSBmb3JtYXQ7IC8vIGNvdWxkIGdldCB0aGlzIGZyb20gdGhlIFNpbmsuCisgICAgICAgICAgICAgICAgbUZyYW1lcyA9IGZyYW1lczsKKyAgICAgICAgICAgICAgICBtU2lua1NvdXJjZSA9IHN0ZDo6bW92ZShzaW5rc291cmNlKTsKKyAgICAgICAgICAgICAgICBtRW5hYmxlZC5zdG9yZSh0cnVlKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gTk9fRVJST1I7CisgICAgICAgICAgICB9CisgICAgICAgICAgICByZXR1cm4gQkFEX1ZBTFVFOworICAgICAgICB9CisKKyAgICAgICAgdm9pZCBzZXRJZChjb25zdCBzdGQ6OnN0cmluZyAmaWQpIHsKKyAgICAgICAgICAgIHN0ZDo6bG9ja19ndWFyZDxzdGQ6Om11dGV4PiBfbChtTG9jayk7CisgICAgICAgICAgICBtSWQgPSBpZDsKKyAgICAgICAgfQorCisgICAgICAgIHZvaWQgZHVtcChpbnQgZmQsIGNvbnN0IHN0ZDo6c3RyaW5nICZyZWFzb24pIHsKKyAgICAgICAgICAgIGlmICghbURhdGFSZWFkeS5leGNoYW5nZShmYWxzZSkpIHJldHVybjsKKyAgICAgICAgICAgIHN0ZDo6c3RyaW5nIHN1ZmZpeDsKKyAgICAgICAgICAgIE5CQUlPX1NpbmtTb3VyY2Ugc2lua1NvdXJjZTsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBzdGQ6OmxvY2tfZ3VhcmQ8c3RkOjptdXRleD4gX2wobUxvY2spOworICAgICAgICAgICAgICAgIHN1ZmZpeCA9IG1JZCArIHJlYXNvbjsKKyAgICAgICAgICAgICAgICBzaW5rU291cmNlID0gbVNpbmtTb3VyY2U7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBkdW1wVGVlKGZkLCBzaW5rU291cmNlLCBzdWZmaXgpOworICAgICAgICB9CisKKyAgICAgICAgdm9pZCB3cml0ZShjb25zdCB2b2lkICpidWZmZXIsIHNpemVfdCBmcmFtZUNvdW50KSB7CisgICAgICAgICAgICBpZiAoIW1FbmFibGVkLmxvYWQoKSB8fCBmcmFtZUNvdW50ID09IDApIHJldHVybjsKKyAgICAgICAgICAgICh2b2lkKW1TaW5rU291cmNlLmZpcnN0LT53cml0ZShidWZmZXIsIGZyYW1lQ291bnQpOworICAgICAgICAgICAgbURhdGFSZWFkeS5zdG9yZSh0cnVlKTsKKyAgICAgICAgfQorCisgICAgcHJpdmF0ZToKKyAgICAgICAgLy8gVFJJQ0tZOiBXZSBuZWVkIHRvIGtlZXAgdGhlIE5CQUlPX1NpbmsgYW5kIE5CQUlPX1NvdXJjZSBib3RoIGFsaXZlIGF0IHRoZSBzYW1lIHRpbWUKKyAgICAgICAgLy8gYmVjYXVzZSBQaXBlUmVhZGVyIGhvbGRzIGEgbmFrZWQgcmVmZXJlbmNlIChub3QgYSBzdHJvbmcgb3Igd2VhayBwb2ludGVyKSB0byBQaXBlLgorICAgICAgICB1c2luZyBOQkFJT19TaW5rU291cmNlID0gc3RkOjpwYWlyPHNwPE5CQUlPX1Npbms+LCBzcDxOQkFJT19Tb3VyY2U+PjsKKworICAgICAgICBzdGF0aWMgdm9pZCBkdW1wVGVlKGludCBmZCwgY29uc3QgTkJBSU9fU2lua1NvdXJjZSYgc2lua1NvdXJjZSwgY29uc3Qgc3RkOjpzdHJpbmcmIHN1ZmZpeCk7CisKKyAgICAgICAgc3RhdGljIE5CQUlPX1NpbmtTb3VyY2UgbWFrZVNpbmtTb3VyY2UoCisgICAgICAgICAgICAgICAgY29uc3QgTkJBSU9fRm9ybWF0ICZmb3JtYXQsIHNpemVfdCBmcmFtZXMsIGJvb2wgKmVuYWJsZWQpOworCisgICAgICAgIC8vIDB4MjAwMDAwIHN0ZXJlbyAxNi1iaXQgUENNIGZyYW1lcyA9IDQ3LjUgc2Vjb25kcyBhdCA0NC4xIGtIeiwgOCBtZWdhYnl0ZXMKKyAgICAgICAgc3RhdGljIGNvbnN0ZXhwciBzaXplX3QgREVGQVVMVF9URUVfRlJBTUVTID0gMHgyMDAwMDA7CisKKyAgICAgICAgLy8gYXRvbWljIHN0YXR1cyBjaGVja2luZworICAgICAgICBzdGQ6OmF0b21pYzxib29sPiBtRW5hYmxlZHtmYWxzZX07CisgICAgICAgIHN0ZDo6YXRvbWljPGJvb2w+IG1EYXRhUmVhZHl7ZmFsc2V9OworCisgICAgICAgIC8vIGxvY2tlZCBkdW1wIGluZm9ybWF0aW9uCisgICAgICAgIG11dGFibGUgc3RkOjptdXRleCBtTG9jazsKKyAgICAgICAgc3RkOjpzdHJpbmcgbUlkOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gR1VBUkRFRF9CWShtTG9jaykKKyAgICAgICAgVEVFX0ZMQUcgbUZsYWdzID0gVEVFX0ZMQUdfTk9ORTsgICAgICAgICAgICAgICAgICAgICAgICAgLy8gR1VBUkRFRF9CWShtTG9jaykKKyAgICAgICAgTkJBSU9fRm9ybWF0IG1Gb3JtYXQgPSBGb3JtYXRfSW52YWxpZDsgICAgICAgICAgICAgICAgICAgLy8gR1VBUkRFRF9CWShtTG9jaykKKyAgICAgICAgc2l6ZV90IG1GcmFtZXMgPSAwOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gR1VBUkRFRF9CWShtTG9jaykKKyAgICAgICAgTkJBSU9fU2lua1NvdXJjZSBtU2lua1NvdXJjZTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gR1VBUkRFRF9CWShtTG9jaykKKyAgICB9OworCisgICAgLyoqIFJ1bm5pbmdUZWVzIHRyYWNrcyBjdXJyZW50IHJ1bm5pbmcgdGVlcyBmb3IgZHVtcCBwdXJwb3Nlcy4KKyAgICAgICAgSXQgaXMgaW1wbGVtZW50ZWQgdG8gaGF2ZSBtaW5pbWFsIGxvY2tlZCByZWdpb25zLCB0byBiZSB0cmFuc3BhcmVudCB0byB0aGUgY2FsbGVyLiAqLworICAgIGNsYXNzIFJ1bm5pbmdUZWVzIHsKKyAgICBwdWJsaWM6CisgICAgICAgIHZvaWQgYWRkKGNvbnN0IHN0ZDo6c2hhcmVkX3B0cjxOQkFJT19UZWVJbXBsPiAmdGVlKSB7CisgICAgICAgICAgICBzdGQ6OmxvY2tfZ3VhcmQ8c3RkOjptdXRleD4gX2wobUxvY2spOworICAgICAgICAgICAgQUxPR1dfSUYoIW1UZWVzLmVtcGxhY2UodGVlKS5zZWNvbmQsCisgICAgICAgICAgICAgICAgICAgICIlczogJXAgYWxyZWFkeSBleGlzdHMgaW4gbVRlZXMiLCBfX2Z1bmNfXywgdGVlLmdldCgpKTsKKyAgICAgICAgfQorCisgICAgICAgIHZvaWQgcmVtb3ZlKGNvbnN0IHN0ZDo6c2hhcmVkX3B0cjxOQkFJT19UZWVJbXBsPiAmdGVlKSB7CisgICAgICAgICAgICBzdGQ6OmxvY2tfZ3VhcmQ8c3RkOjptdXRleD4gX2wobUxvY2spOworICAgICAgICAgICAgQUxPR1dfSUYobVRlZXMuZXJhc2UodGVlKSAhPSAxLAorICAgICAgICAgICAgICAgICAgICAiJXM6ICVwIGRvZXNuJ3QgZXhpc3QgaW4gbVRlZXMiLCBfX2Z1bmNfXywgdGVlLmdldCgpKTsKKyAgICAgICAgfQorCisgICAgICAgIHZvaWQgZHVtcChpbnQgZmQsIGNvbnN0IHN0ZDo6c3RyaW5nICZyZWFzb24pIHsKKyAgICAgICAgICAgIHN0ZDo6dmVjdG9yPHN0ZDo6c2hhcmVkX3B0cjxOQkFJT19UZWVJbXBsPj4gdGVlczsgLy8gc2FmZSBzbmFwc2hvdCBvZiB0ZWVzCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgc3RkOjpsb2NrX2d1YXJkPHN0ZDo6bXV0ZXg+IF9sKG1Mb2NrKTsKKyAgICAgICAgICAgICAgICB0ZWVzLmluc2VydCh0ZWVzLmVuZCgpLCBtVGVlcy5iZWdpbigpLCBtVGVlcy5lbmQoKSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBmb3IgKGNvbnN0IGF1dG8gJnRlZSA6IHRlZXMpIHsKKyAgICAgICAgICAgICAgICB0ZWUtPmR1bXAoZmQsIHJlYXNvbik7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgIHByaXZhdGU6CisgICAgICAgIHN0ZDo6bXV0ZXggbUxvY2s7CisgICAgICAgIHN0ZDo6c2V0PHN0ZDo6c2hhcmVkX3B0cjxOQkFJT19UZWVJbXBsPj4gbVRlZXM7IC8vIEdVQVJERURfQlkobUxvY2spCisgICAgfTsKKworICAgIC8vIHNpbmdsZXRvbgorICAgIHN0YXRpYyBSdW5uaW5nVGVlcyAmZ2V0UnVubmluZ1RlZXMoKSB7CisgICAgICAgIHN0YXRpYyBSdW5uaW5nVGVlcyBydW5uaW5nVGVlczsKKyAgICAgICAgcmV0dXJuIHJ1bm5pbmdUZWVzOworICAgIH0KKworICAgIC8vIFRoZSBOQkFJTyBUZWVJbXBsIG1heSBoYXZlIGxpZmV0aW1lIGxvbmdlciB0aGFuIE5CQUlPX1RlZSBpZgorICAgIC8vIFJ1bm5pbmdUZWVzOjpkdW1wKCkgaXMgYmVpbmcgY2FsbGVkIHNpbXVsdGFuZW91cyB0byB+TkJBSU9fVGVlKCkuCisgICAgLy8gVGhpcyBpcyBhbGxvd2VkIGZvciBtYXhpbXVtIGNvbmN1cnJlbmN5LgorICAgIGNvbnN0IHN0ZDo6c2hhcmVkX3B0cjxOQkFJT19UZWVJbXBsPiBtVGVlOworfTsgLy8gTkJBSU9fVGVlCisKK30gLy8gbmFtZXNwYWNlIGFuZHJvaWQKKworI2VuZGlmIC8vIFRFRV9TSU5LCisjZW5kaWYgLy8gIUFORFJPSURfTkJBSU9fVEVFX0gKZGlmZiAtLWdpdCBhL3NlcnZpY2VzL2F1ZGlvZmxpbmdlci9QYXRjaFBhbmVsLmNwcCBiL3NlcnZpY2VzL2F1ZGlvZmxpbmdlci9QYXRjaFBhbmVsLmNwcAppbmRleCBlNWNiOGEyLi41MzhhMGViIDEwMDY0NAotLS0gYS9zZXJ2aWNlcy9hdWRpb2ZsaW5nZXIvUGF0Y2hQYW5lbC5jcHAKKysrIGIvc2VydmljZXMvYXVkaW9mbGluZ2VyL1BhdGNoUGFuZWwuY3BwCkBAIC0yNCw4ICsyNCw5IEBACiAjaW5jbHVkZSA8YXVkaW9fdXRpbHMvcHJpbWl0aXZlcy5oPgogCiAjaW5jbHVkZSAiQXVkaW9GbGluZ2VyLmgiCi0jaW5jbHVkZSAiU2VydmljZVV0aWxpdGllcy5oIgogI2luY2x1ZGUgPG1lZGlhL0F1ZGlvUGFyYW1ldGVyLmg+CisjaW5jbHVkZSA8bWVkaWEvUGF0Y2hCdWlsZGVyLmg+CisjaW5jbHVkZSA8bWVkaWF1dGlscy9TZXJ2aWNlVXRpbGl0aWVzLmg+CiAKIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIApAQCAtNDksMTExICs1MCw3NyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgYXVkaW9fcG9ydCAqcG9ydHMpCiB7CiAgICAgTXV0ZXg6OkF1dG9sb2NrIF9sKG1Mb2NrKTsKLSAgICBpZiAobVBhdGNoUGFuZWwgIT0gMCkgewotICAgICAgICByZXR1cm4gbVBhdGNoUGFuZWwtPmxpc3RBdWRpb1BvcnRzKG51bV9wb3J0cywgcG9ydHMpOwotICAgIH0KLSAgICByZXR1cm4gTk9fSU5JVDsKKyAgICByZXR1cm4gbVBhdGNoUGFuZWwubGlzdEF1ZGlvUG9ydHMobnVtX3BvcnRzLCBwb3J0cyk7CiB9CiAKIC8qIEdldCBzdXBwb3J0ZWQgYXR0cmlidXRlcyBmb3IgYSBnaXZlbiBhdWRpbyBwb3J0ICovCiBzdGF0dXNfdCBBdWRpb0ZsaW5nZXI6OmdldEF1ZGlvUG9ydChzdHJ1Y3QgYXVkaW9fcG9ydCAqcG9ydCkKIHsKICAgICBNdXRleDo6QXV0b2xvY2sgX2wobUxvY2spOwotICAgIGlmIChtUGF0Y2hQYW5lbCAhPSAwKSB7Ci0gICAgICAgIHJldHVybiBtUGF0Y2hQYW5lbC0+Z2V0QXVkaW9Qb3J0KHBvcnQpOwotICAgIH0KLSAgICByZXR1cm4gTk9fSU5JVDsKKyAgICByZXR1cm4gbVBhdGNoUGFuZWwuZ2V0QXVkaW9Qb3J0KHBvcnQpOwogfQogCi0KIC8qIENvbm5lY3QgYSBwYXRjaCBiZXR3ZWVuIHNldmVyYWwgc291cmNlIGFuZCBzaW5rIHBvcnRzICovCiBzdGF0dXNfdCBBdWRpb0ZsaW5nZXI6OmNyZWF0ZUF1ZGlvUGF0Y2goY29uc3Qgc3RydWN0IGF1ZGlvX3BhdGNoICpwYXRjaCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXVkaW9fcGF0Y2hfaGFuZGxlX3QgKmhhbmRsZSkKIHsKICAgICBNdXRleDo6QXV0b2xvY2sgX2wobUxvY2spOwotICAgIGlmIChtUGF0Y2hQYW5lbCAhPSAwKSB7Ci0gICAgICAgIHJldHVybiBtUGF0Y2hQYW5lbC0+Y3JlYXRlQXVkaW9QYXRjaChwYXRjaCwgaGFuZGxlKTsKLSAgICB9Ci0gICAgcmV0dXJuIE5PX0lOSVQ7CisgICAgcmV0dXJuIG1QYXRjaFBhbmVsLmNyZWF0ZUF1ZGlvUGF0Y2gocGF0Y2gsIGhhbmRsZSk7CiB9CiAKIC8qIERpc2Nvbm5lY3QgYSBwYXRjaCAqLwogc3RhdHVzX3QgQXVkaW9GbGluZ2VyOjpyZWxlYXNlQXVkaW9QYXRjaChhdWRpb19wYXRjaF9oYW5kbGVfdCBoYW5kbGUpCiB7CiAgICAgTXV0ZXg6OkF1dG9sb2NrIF9sKG1Mb2NrKTsKLSAgICBpZiAobVBhdGNoUGFuZWwgIT0gMCkgewotICAgICAgICByZXR1cm4gbVBhdGNoUGFuZWwtPnJlbGVhc2VBdWRpb1BhdGNoKGhhbmRsZSk7Ci0gICAgfQotICAgIHJldHVybiBOT19JTklUOworICAgIHJldHVybiBtUGF0Y2hQYW5lbC5yZWxlYXNlQXVkaW9QYXRjaChoYW5kbGUpOwogfQogCi0KIC8qIExpc3QgY29ubmVjdGVkIGF1ZGlvIHBvcnRzIGFuZCB0aGV5IGF0dHJpYnV0ZXMgKi8KIHN0YXR1c190IEF1ZGlvRmxpbmdlcjo6bGlzdEF1ZGlvUGF0Y2hlcyh1bnNpZ25lZCBpbnQgKm51bV9wYXRjaGVzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBhdWRpb19wYXRjaCAqcGF0Y2hlcykKIHsKICAgICBNdXRleDo6QXV0b2xvY2sgX2wobUxvY2spOwotICAgIGlmIChtUGF0Y2hQYW5lbCAhPSAwKSB7Ci0gICAgICAgIHJldHVybiBtUGF0Y2hQYW5lbC0+bGlzdEF1ZGlvUGF0Y2hlcyhudW1fcGF0Y2hlcywgcGF0Y2hlcyk7CisgICAgcmV0dXJuIG1QYXRjaFBhbmVsLmxpc3RBdWRpb1BhdGNoZXMobnVtX3BhdGNoZXMsIHBhdGNoZXMpOworfQorCitzdGF0dXNfdCBBdWRpb0ZsaW5nZXI6OlBhdGNoUGFuZWw6OlNvZnR3YXJlUGF0Y2g6OmdldExhdGVuY3lNc19sKGRvdWJsZSAqbGF0ZW5jeU1zKSBjb25zdAoreworICAgIGNvbnN0IGF1dG8mIGl0ZXIgPSBtUGF0Y2hQYW5lbC5tUGF0Y2hlcy5maW5kKG1QYXRjaEhhbmRsZSk7CisgICAgaWYgKGl0ZXIgIT0gbVBhdGNoUGFuZWwubVBhdGNoZXMuZW5kKCkpIHsKKyAgICAgICAgcmV0dXJuIGl0ZXItPnNlY29uZC5nZXRMYXRlbmN5TXMobGF0ZW5jeU1zKTsKKyAgICB9IGVsc2UgeworICAgICAgICByZXR1cm4gQkFEX1ZBTFVFOwogICAgIH0KLSAgICByZXR1cm4gTk9fSU5JVDsKLX0KLQotLyogU2V0IGF1ZGlvIHBvcnQgY29uZmlndXJhdGlvbiAqLwotc3RhdHVzX3QgQXVkaW9GbGluZ2VyOjpzZXRBdWRpb1BvcnRDb25maWcoY29uc3Qgc3RydWN0IGF1ZGlvX3BvcnRfY29uZmlnICpjb25maWcpCi17Ci0gICAgTXV0ZXg6OkF1dG9sb2NrIF9sKG1Mb2NrKTsKLSAgICBpZiAobVBhdGNoUGFuZWwgIT0gMCkgewotICAgICAgICByZXR1cm4gbVBhdGNoUGFuZWwtPnNldEF1ZGlvUG9ydENvbmZpZyhjb25maWcpOwotICAgIH0KLSAgICByZXR1cm4gTk9fSU5JVDsKLX0KLQotCi1BdWRpb0ZsaW5nZXI6OlBhdGNoUGFuZWw6OlBhdGNoUGFuZWwoY29uc3Qgc3A8QXVkaW9GbGluZ2VyPiYgYXVkaW9GbGluZ2VyKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IG1BdWRpb0ZsaW5nZXIoYXVkaW9GbGluZ2VyKQotewotfQotCi1BdWRpb0ZsaW5nZXI6OlBhdGNoUGFuZWw6On5QYXRjaFBhbmVsKCkKLXsKIH0KIAogLyogTGlzdCBjb25uZWN0ZWQgYXVkaW8gcG9ydHMgYW5kIHRoZWlyIGF0dHJpYnV0ZXMgKi8KIHN0YXR1c190IEF1ZGlvRmxpbmdlcjo6UGF0Y2hQYW5lbDo6bGlzdEF1ZGlvUG9ydHModW5zaWduZWQgaW50ICpudW1fcG9ydHMgX191bnVzZWQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBhdWRpb19wb3J0ICpwb3J0cyBfX3VudXNlZCkKIHsKLSAgICBBTE9HVigibGlzdEF1ZGlvUG9ydHMiKTsKKyAgICBBTE9HVihfX2Z1bmNfXyk7CiAgICAgcmV0dXJuIE5PX0VSUk9SOwogfQogCiAvKiBHZXQgc3VwcG9ydGVkIGF0dHJpYnV0ZXMgZm9yIGEgZ2l2ZW4gYXVkaW8gcG9ydCAqLwogc3RhdHVzX3QgQXVkaW9GbGluZ2VyOjpQYXRjaFBhbmVsOjpnZXRBdWRpb1BvcnQoc3RydWN0IGF1ZGlvX3BvcnQgKnBvcnQgX191bnVzZWQpCiB7Ci0gICAgQUxPR1YoImdldEF1ZGlvUG9ydCIpOworICAgIEFMT0dWKF9fZnVuY19fKTsKICAgICByZXR1cm4gTk9fRVJST1I7CiB9CiAKLQogLyogQ29ubmVjdCBhIHBhdGNoIGJldHdlZW4gc2V2ZXJhbCBzb3VyY2UgYW5kIHNpbmsgcG9ydHMgKi8KIHN0YXR1c190IEF1ZGlvRmxpbmdlcjo6UGF0Y2hQYW5lbDo6Y3JlYXRlQXVkaW9QYXRjaChjb25zdCBzdHJ1Y3QgYXVkaW9fcGF0Y2ggKnBhdGNoLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdWRpb19wYXRjaF9oYW5kbGVfdCAqaGFuZGxlKQogewotICAgIHN0YXR1c190IHN0YXR1cyA9IE5PX0VSUk9SOwotICAgIGF1ZGlvX3BhdGNoX2hhbmRsZV90IGhhbEhhbmRsZSA9IEFVRElPX1BBVENIX0hBTkRMRV9OT05FOwotICAgIHNwPEF1ZGlvRmxpbmdlcj4gYXVkaW9mbGluZ2VyID0gbUF1ZGlvRmxpbmdlci5wcm9tb3RlKCk7CiAgICAgaWYgKGhhbmRsZSA9PSBOVUxMIHx8IHBhdGNoID09IE5VTEwpIHsKICAgICAgICAgcmV0dXJuIEJBRF9WQUxVRTsKICAgICB9Ci0gICAgQUxPR1YoImNyZWF0ZUF1ZGlvUGF0Y2goKSBudW1fc291cmNlcyAlZCBudW1fc2lua3MgJWQgaGFuZGxlICVkIiwKLSAgICAgICAgICBwYXRjaC0+bnVtX3NvdXJjZXMsIHBhdGNoLT5udW1fc2lua3MsICpoYW5kbGUpOwotICAgIGlmIChhdWRpb2ZsaW5nZXIgPT0gMCkgewotICAgICAgICByZXR1cm4gTk9fSU5JVDsKLSAgICB9CisgICAgQUxPR1YoIiVzKCkgbnVtX3NvdXJjZXMgJWQgbnVtX3NpbmtzICVkIGhhbmRsZSAlZCIsCisgICAgICAgICAgICBfX2Z1bmNfXywgcGF0Y2gtPm51bV9zb3VyY2VzLCBwYXRjaC0+bnVtX3NpbmtzLCAqaGFuZGxlKTsKKyAgICBzdGF0dXNfdCBzdGF0dXMgPSBOT19FUlJPUjsKKyAgICBhdWRpb19wYXRjaF9oYW5kbGVfdCBoYWxIYW5kbGUgPSBBVURJT19QQVRDSF9IQU5ETEVfTk9ORTsKIAotICAgIGlmIChwYXRjaC0+bnVtX3NvdXJjZXMgPT0gMCB8fCBwYXRjaC0+bnVtX3NvdXJjZXMgPiBBVURJT19QQVRDSF9QT1JUU19NQVggfHwKLSAgICAgICAgICAgIChwYXRjaC0+bnVtX3NpbmtzID09IDAgJiYgcGF0Y2gtPm51bV9zb3VyY2VzICE9IDIpIHx8Ci0gICAgICAgICAgICBwYXRjaC0+bnVtX3NpbmtzID4gQVVESU9fUEFUQ0hfUE9SVFNfTUFYKSB7CisgICAgaWYgKCFhdWRpb19wYXRjaF9pc192YWxpZChwYXRjaCkgfHwgKHBhdGNoLT5udW1fc2lua3MgPT0gMCAmJiBwYXRjaC0+bnVtX3NvdXJjZXMgIT0gMikpIHsKICAgICAgICAgcmV0dXJuIEJBRF9WQUxVRTsKICAgICB9CiAgICAgLy8gbGltaXQgbnVtYmVyIG9mIHNvdXJjZXMgdG8gMSBmb3Igbm93IG9yIDIgc291cmNlcyBmb3Igc3BlY2lhbCBjcm9zcyBodyBtb2R1bGUgY2FzZS4KQEAgLTE2Myw4MSArMTMwLDczIEBACiAgICAgfQogCiAgICAgaWYgKCpoYW5kbGUgIT0gQVVESU9fUEFUQ0hfSEFORExFX05PTkUpIHsKLSAgICAgICAgZm9yIChzaXplX3QgaW5kZXggPSAwOyAqaGFuZGxlICE9IDAgJiYgaW5kZXggPCBtUGF0Y2hlcy5zaXplKCk7IGluZGV4KyspIHsKLSAgICAgICAgICAgIGlmICgqaGFuZGxlID09IG1QYXRjaGVzW2luZGV4XS0+bUhhbmRsZSkgewotICAgICAgICAgICAgICAgIEFMT0dWKCJjcmVhdGVBdWRpb1BhdGNoKCkgcmVtb3ZpbmcgcGF0Y2ggaGFuZGxlICVkIiwgKmhhbmRsZSk7Ci0gICAgICAgICAgICAgICAgaGFsSGFuZGxlID0gbVBhdGNoZXNbaW5kZXhdLT5tSGFsSGFuZGxlOwotICAgICAgICAgICAgICAgIFBhdGNoICpyZW1vdmVkUGF0Y2ggPSBtUGF0Y2hlc1tpbmRleF07Ci0gICAgICAgICAgICAgICAgLy8gZnJlZSByZXNvdXJjZXMgb3duZWQgYnkgdGhlIHJlbW92ZWQgcGF0Y2ggaWYgYXBwbGljYWJsZQotICAgICAgICAgICAgICAgIC8vIDEpIGlmIGEgc29mdHdhcmUgcGF0Y2ggaXMgcHJlc2VudCwgcmVsZWFzZSB0aGUgcGxheWJhY2sgYW5kIGNhcHR1cmUgdGhyZWFkcyBhbmQKLSAgICAgICAgICAgICAgICAvLyB0cmFja3MgY3JlYXRlZC4gVGhpcyB3aWxsIGFsc28gcmVsZWFzZSB0aGUgY29ycmVzcG9uZGluZyBhdWRpbyBIQUwgcGF0Y2hlcwotICAgICAgICAgICAgICAgIGlmICgocmVtb3ZlZFBhdGNoLT5tUmVjb3JkUGF0Y2hIYW5kbGUKLSAgICAgICAgICAgICAgICAgICAgICAgICE9IEFVRElPX1BBVENIX0hBTkRMRV9OT05FKSB8fAotICAgICAgICAgICAgICAgICAgICAgICAgKHJlbW92ZWRQYXRjaC0+bVBsYXliYWNrUGF0Y2hIYW5kbGUgIT0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQVVESU9fUEFUQ0hfSEFORExFX05PTkUpKSB7Ci0gICAgICAgICAgICAgICAgICAgIGNsZWFyUGF0Y2hDb25uZWN0aW9ucyhyZW1vdmVkUGF0Y2gpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAvLyAyKSBpZiB0aGUgbmV3IHBhdGNoIGFuZCBvbGQgcGF0Y2ggc291cmNlIG9yIHNpbmsgYXJlIGRldmljZXMgZnJvbSBkaWZmZXJlbnQKLSAgICAgICAgICAgICAgICAvLyBodyBtb2R1bGVzLCAgY2xlYXIgdGhlIGF1ZGlvIEhBTCBwYXRjaGVzIG5vdyBiZWNhdXNlIHRoZXkgd2lsbCBub3QgYmUgdXBkYXRlZAotICAgICAgICAgICAgICAgIC8vIGJ5IGNhbGwgdG8gY3JlYXRlX2F1ZGlvX3BhdGNoKCkgYmVsb3cgd2hpY2ggd2lsbCBoYXBwZW4gb24gYSBkaWZmZXJlbnQgSFcgbW9kdWxlCi0gICAgICAgICAgICAgICAgaWYgKGhhbEhhbmRsZSAhPSBBVURJT19QQVRDSF9IQU5ETEVfTk9ORSkgewotICAgICAgICAgICAgICAgICAgICBhdWRpb19tb2R1bGVfaGFuZGxlX3QgaHdNb2R1bGUgPSBBVURJT19NT0RVTEVfSEFORExFX05PTkU7Ci0gICAgICAgICAgICAgICAgICAgIGlmICgocmVtb3ZlZFBhdGNoLT5tQXVkaW9QYXRjaC5zb3VyY2VzWzBdLnR5cGUgPT0gQVVESU9fUE9SVF9UWVBFX0RFVklDRSkgJiYKLSAgICAgICAgICAgICAgICAgICAgICAgICgocGF0Y2gtPnNvdXJjZXNbMF0udHlwZSAhPSBBVURJT19QT1JUX1RZUEVfREVWSUNFKSB8fAotICAgICAgICAgICAgICAgICAgICAgICAgICAocmVtb3ZlZFBhdGNoLT5tQXVkaW9QYXRjaC5zb3VyY2VzWzBdLmV4dC5kZXZpY2UuaHdfbW9kdWxlICE9Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICBwYXRjaC0+c291cmNlc1swXS5leHQuZGV2aWNlLmh3X21vZHVsZSkpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBod01vZHVsZSA9IHJlbW92ZWRQYXRjaC0+bUF1ZGlvUGF0Y2guc291cmNlc1swXS5leHQuZGV2aWNlLmh3X21vZHVsZTsKLSAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmICgocGF0Y2gtPm51bV9zaW5rcyA9PSAwKSB8fAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICgocmVtb3ZlZFBhdGNoLT5tQXVkaW9QYXRjaC5zaW5rc1swXS50eXBlID09IEFVRElPX1BPUlRfVFlQRV9ERVZJQ0UpICYmCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICgocGF0Y2gtPnNpbmtzWzBdLnR5cGUgIT0gQVVESU9fUE9SVF9UWVBFX0RFVklDRSkgfHwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChyZW1vdmVkUGF0Y2gtPm1BdWRpb1BhdGNoLnNpbmtzWzBdLmV4dC5kZXZpY2UuaHdfbW9kdWxlICE9Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGF0Y2gtPnNpbmtzWzBdLmV4dC5kZXZpY2UuaHdfbW9kdWxlKSkpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAvLyBOb3RlIG9uIChwYXRjaC0+bnVtX3NpbmtzID09IDApOiB0aGlzIHNpdHVhdGlvbiBzaG91bGQgbm90IGhhcHBlbiBhcwotICAgICAgICAgICAgICAgICAgICAgICAgLy8gdGhlc2Ugc3BlY2lhbCBwYXRjaGVzIGFyZSBvbmx5IGNyZWF0ZWQgYnkgdGhlIHBvbGljeSBtYW5hZ2VyIGJ1dCBqdXN0Ci0gICAgICAgICAgICAgICAgICAgICAgICAvLyBpbiBjYXNlLCBzeXN0ZW1hdGljYWxseSBjbGVhciB0aGUgSEFMIHBhdGNoLgotICAgICAgICAgICAgICAgICAgICAgICAgLy8gTm90ZSB0aGF0IHJlbW92ZWRQYXRjaC0+bUF1ZGlvUGF0Y2gubnVtX3NpbmtzIGNhbm5vdCBiZSAwIGhlcmUgYmVjYXVzZQotICAgICAgICAgICAgICAgICAgICAgICAgLy8gaGFsSGFuZGxlIHdvdWxkIGJlIEFVRElPX1BBVENIX0hBTkRMRV9OT05FIGluIHRoaXMgY2FzZS4KLSAgICAgICAgICAgICAgICAgICAgICAgIGh3TW9kdWxlID0gcmVtb3ZlZFBhdGNoLT5tQXVkaW9QYXRjaC5zaW5rc1swXS5leHQuZGV2aWNlLmh3X21vZHVsZTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICBpZiAoaHdNb2R1bGUgIT0gQVVESU9fTU9EVUxFX0hBTkRMRV9OT05FKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBzc2l6ZV90IGluZGV4ID0gYXVkaW9mbGluZ2VyLT5tQXVkaW9Id0RldnMuaW5kZXhPZktleShod01vZHVsZSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoaW5kZXggPj0gMCkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNwPERldmljZUhhbEludGVyZmFjZT4gaHdEZXZpY2UgPQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXVkaW9mbGluZ2VyLT5tQXVkaW9Id0RldnMudmFsdWVBdChpbmRleCktPmh3RGV2aWNlKCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgaHdEZXZpY2UtPnJlbGVhc2VBdWRpb1BhdGNoKGhhbEhhbmRsZSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgbVBhdGNoZXMucmVtb3ZlQXQoaW5kZXgpOwotICAgICAgICAgICAgICAgIGRlbGV0ZSByZW1vdmVkUGF0Y2g7Ci0gICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGF1dG8gaXRlciA9IG1QYXRjaGVzLmZpbmQoKmhhbmRsZSk7CisgICAgICAgIGlmIChpdGVyICE9IG1QYXRjaGVzLmVuZCgpKSB7CisgICAgICAgICAgICBBTE9HVigiJXMoKSByZW1vdmluZyBwYXRjaCBoYW5kbGUgJWQiLCBfX2Z1bmNfXywgKmhhbmRsZSk7CisgICAgICAgICAgICBQYXRjaCAmcmVtb3ZlZFBhdGNoID0gaXRlci0+c2Vjb25kOworICAgICAgICAgICAgLy8gZnJlZSByZXNvdXJjZXMgb3duZWQgYnkgdGhlIHJlbW92ZWQgcGF0Y2ggaWYgYXBwbGljYWJsZQorICAgICAgICAgICAgLy8gMSkgaWYgYSBzb2Z0d2FyZSBwYXRjaCBpcyBwcmVzZW50LCByZWxlYXNlIHRoZSBwbGF5YmFjayBhbmQgY2FwdHVyZSB0aHJlYWRzIGFuZAorICAgICAgICAgICAgLy8gdHJhY2tzIGNyZWF0ZWQuIFRoaXMgd2lsbCBhbHNvIHJlbGVhc2UgdGhlIGNvcnJlc3BvbmRpbmcgYXVkaW8gSEFMIHBhdGNoZXMKKyAgICAgICAgICAgIGlmIChyZW1vdmVkUGF0Y2guaXNTb2Z0d2FyZSgpKSB7CisgICAgICAgICAgICAgICAgcmVtb3ZlZFBhdGNoLmNsZWFyQ29ubmVjdGlvbnModGhpcyk7CiAgICAgICAgICAgICB9CisgICAgICAgICAgICAvLyAyKSBpZiB0aGUgbmV3IHBhdGNoIGFuZCBvbGQgcGF0Y2ggc291cmNlIG9yIHNpbmsgYXJlIGRldmljZXMgZnJvbSBkaWZmZXJlbnQKKyAgICAgICAgICAgIC8vIGh3IG1vZHVsZXMsICBjbGVhciB0aGUgYXVkaW8gSEFMIHBhdGNoZXMgbm93IGJlY2F1c2UgdGhleSB3aWxsIG5vdCBiZSB1cGRhdGVkCisgICAgICAgICAgICAvLyBieSBjYWxsIHRvIGNyZWF0ZV9hdWRpb19wYXRjaCgpIGJlbG93IHdoaWNoIHdpbGwgaGFwcGVuIG9uIGEgZGlmZmVyZW50IEhXIG1vZHVsZQorICAgICAgICAgICAgaWYgKHJlbW92ZWRQYXRjaC5tSGFsSGFuZGxlICE9IEFVRElPX1BBVENIX0hBTkRMRV9OT05FKSB7CisgICAgICAgICAgICAgICAgYXVkaW9fbW9kdWxlX2hhbmRsZV90IGh3TW9kdWxlID0gQVVESU9fTU9EVUxFX0hBTkRMRV9OT05FOworICAgICAgICAgICAgICAgIGNvbnN0IHN0cnVjdCBhdWRpb19wYXRjaCAmb2xkUGF0Y2ggPSByZW1vdmVkUGF0Y2gubUF1ZGlvUGF0Y2g7CisgICAgICAgICAgICAgICAgaWYgKG9sZFBhdGNoLnNvdXJjZXNbMF0udHlwZSA9PSBBVURJT19QT1JUX1RZUEVfREVWSUNFICYmCisgICAgICAgICAgICAgICAgICAgICAgICAocGF0Y2gtPnNvdXJjZXNbMF0udHlwZSAhPSBBVURJT19QT1JUX1RZUEVfREVWSUNFIHx8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9sZFBhdGNoLnNvdXJjZXNbMF0uZXh0LmRldmljZS5od19tb2R1bGUgIT0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGF0Y2gtPnNvdXJjZXNbMF0uZXh0LmRldmljZS5od19tb2R1bGUpKSB7CisgICAgICAgICAgICAgICAgICAgIGh3TW9kdWxlID0gb2xkUGF0Y2guc291cmNlc1swXS5leHQuZGV2aWNlLmh3X21vZHVsZTsKKyAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHBhdGNoLT5udW1fc2lua3MgPT0gMCB8fAorICAgICAgICAgICAgICAgICAgICAgICAgKG9sZFBhdGNoLnNpbmtzWzBdLnR5cGUgPT0gQVVESU9fUE9SVF9UWVBFX0RFVklDRSAmJgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAocGF0Y2gtPnNpbmtzWzBdLnR5cGUgIT0gQVVESU9fUE9SVF9UWVBFX0RFVklDRSB8fAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9sZFBhdGNoLnNpbmtzWzBdLmV4dC5kZXZpY2UuaHdfbW9kdWxlICE9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGF0Y2gtPnNpbmtzWzBdLmV4dC5kZXZpY2UuaHdfbW9kdWxlKSkpIHsKKyAgICAgICAgICAgICAgICAgICAgLy8gTm90ZSBvbiAocGF0Y2gtPm51bV9zaW5rcyA9PSAwKTogdGhpcyBzaXR1YXRpb24gc2hvdWxkIG5vdCBoYXBwZW4gYXMKKyAgICAgICAgICAgICAgICAgICAgLy8gdGhlc2Ugc3BlY2lhbCBwYXRjaGVzIGFyZSBvbmx5IGNyZWF0ZWQgYnkgdGhlIHBvbGljeSBtYW5hZ2VyIGJ1dCBqdXN0CisgICAgICAgICAgICAgICAgICAgIC8vIGluIGNhc2UsIHN5c3RlbWF0aWNhbGx5IGNsZWFyIHRoZSBIQUwgcGF0Y2guCisgICAgICAgICAgICAgICAgICAgIC8vIE5vdGUgdGhhdCByZW1vdmVkUGF0Y2gubUF1ZGlvUGF0Y2gubnVtX3NpbmtzIGNhbm5vdCBiZSAwIGhlcmUgYmVjYXVzZQorICAgICAgICAgICAgICAgICAgICAvLyByZW1vdmVkUGF0Y2gubUhhbEhhbmRsZSB3b3VsZCBiZSBBVURJT19QQVRDSF9IQU5ETEVfTk9ORSBpbiB0aGlzIGNhc2UuCisgICAgICAgICAgICAgICAgICAgIGh3TW9kdWxlID0gb2xkUGF0Y2guc2lua3NbMF0uZXh0LmRldmljZS5od19tb2R1bGU7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIHNwPERldmljZUhhbEludGVyZmFjZT4gaHdEZXZpY2UgPSBmaW5kSHdEZXZpY2VCeU1vZHVsZShod01vZHVsZSk7CisgICAgICAgICAgICAgICAgaWYgKGh3RGV2aWNlICE9IDApIHsKKyAgICAgICAgICAgICAgICAgICAgaHdEZXZpY2UtPnJlbGVhc2VBdWRpb1BhdGNoKHJlbW92ZWRQYXRjaC5tSGFsSGFuZGxlKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICBtUGF0Y2hlcy5lcmFzZShpdGVyKTsKKyAgICAgICAgICAgIHJlbW92ZVNvZnR3YXJlUGF0Y2hGcm9tSW5zZXJ0ZWRNb2R1bGVzKCpoYW5kbGUpOwogICAgICAgICB9CiAgICAgfQogCi0gICAgUGF0Y2ggKm5ld1BhdGNoID0gbmV3IFBhdGNoKHBhdGNoKTsKKyAgICBQYXRjaCBuZXdQYXRjaHsqcGF0Y2h9OworICAgIGF1ZGlvX21vZHVsZV9oYW5kbGVfdCBpbnNlcnRlZE1vZHVsZSA9IEFVRElPX01PRFVMRV9IQU5ETEVfTk9ORTsKIAogICAgIHN3aXRjaCAocGF0Y2gtPnNvdXJjZXNbMF0udHlwZSkgewogICAgICAgICBjYXNlIEFVRElPX1BPUlRfVFlQRV9ERVZJQ0U6IHsKICAgICAgICAgICAgIGF1ZGlvX21vZHVsZV9oYW5kbGVfdCBzcmNNb2R1bGUgPSBwYXRjaC0+c291cmNlc1swXS5leHQuZGV2aWNlLmh3X21vZHVsZTsKLSAgICAgICAgICAgIHNzaXplX3QgaW5kZXggPSBhdWRpb2ZsaW5nZXItPm1BdWRpb0h3RGV2cy5pbmRleE9mS2V5KHNyY01vZHVsZSk7Ci0gICAgICAgICAgICBpZiAoaW5kZXggPCAwKSB7Ci0gICAgICAgICAgICAgICAgQUxPR1coImNyZWF0ZUF1ZGlvUGF0Y2goKSBiYWQgc3JjIGh3IG1vZHVsZSAlZCIsIHNyY01vZHVsZSk7CisgICAgICAgICAgICBBdWRpb0h3RGV2aWNlICphdWRpb0h3RGV2aWNlID0gZmluZEF1ZGlvSHdEZXZpY2VCeU1vZHVsZShzcmNNb2R1bGUpOworICAgICAgICAgICAgaWYgKCFhdWRpb0h3RGV2aWNlKSB7CiAgICAgICAgICAgICAgICAgc3RhdHVzID0gQkFEX1ZBTFVFOwogICAgICAgICAgICAgICAgIGdvdG8gZXhpdDsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIEF1ZGlvSHdEZXZpY2UgKmF1ZGlvSHdEZXZpY2UgPSBhdWRpb2ZsaW5nZXItPm1BdWRpb0h3RGV2cy52YWx1ZUF0KGluZGV4KTsKICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpIDwgcGF0Y2gtPm51bV9zaW5rczsgaSsrKSB7CiAgICAgICAgICAgICAgICAgLy8gc3VwcG9ydCBvbmx5IG9uZSBzaW5rIGlmIGNvbm5lY3Rpb24gdG8gYSBtaXggb3IgYWNyb3NzIEhXIG1vZHVsZXMKICAgICAgICAgICAgICAgICBpZiAoKHBhdGNoLT5zaW5rc1tpXS50eXBlID09IEFVRElPX1BPUlRfVFlQRV9NSVggfHwKLSAgICAgICAgICAgICAgICAgICAgICAgIHBhdGNoLT5zaW5rc1tpXS5leHQubWl4Lmh3X21vZHVsZSAhPSBzcmNNb2R1bGUpICYmCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChwYXRjaC0+c2lua3NbaV0udHlwZSA9PSBBVURJT19QT1JUX1RZUEVfREVWSUNFICYmCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGF0Y2gtPnNpbmtzW2ldLmV4dC5kZXZpY2UuaHdfbW9kdWxlICE9IHNyY01vZHVsZSkpICYmCiAgICAgICAgICAgICAgICAgICAgICAgICBwYXRjaC0+bnVtX3NpbmtzID4gMSkgeworICAgICAgICAgICAgICAgICAgICBBTE9HVygiJXMoKSBtdWx0aXBsZSBzaW5rcyBmb3IgbWl4IG9yIGFjcm9zcyBtb2R1bGVzIG5vdCBzdXBwb3J0ZWQiLCBfX2Z1bmNfXyk7CiAgICAgICAgICAgICAgICAgICAgIHN0YXR1cyA9IElOVkFMSURfT1BFUkFUSU9OOwogICAgICAgICAgICAgICAgICAgICBnb3RvIGV4aXQ7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIC8vIHJlamVjdCBjb25uZWN0aW9uIHRvIGRpZmZlcmVudCBzaW5rIHR5cGVzCiAgICAgICAgICAgICAgICAgaWYgKHBhdGNoLT5zaW5rc1tpXS50eXBlICE9IHBhdGNoLT5zaW5rc1swXS50eXBlKSB7Ci0gICAgICAgICAgICAgICAgICAgIEFMT0dXKCJjcmVhdGVBdWRpb1BhdGNoKCkgZGlmZmVyZW50IHNpbmsgdHlwZXMgaW4gc2FtZSBwYXRjaCBub3Qgc3VwcG9ydGVkIik7CisgICAgICAgICAgICAgICAgICAgIEFMT0dXKCIlcygpIGRpZmZlcmVudCBzaW5rIHR5cGVzIGluIHNhbWUgcGF0Y2ggbm90IHN1cHBvcnRlZCIsIF9fZnVuY19fKTsKICAgICAgICAgICAgICAgICAgICAgc3RhdHVzID0gQkFEX1ZBTFVFOwogICAgICAgICAgICAgICAgICAgICBnb3RvIGV4aXQ7CiAgICAgICAgICAgICAgICAgfQpAQCAtMjU2LDM4ICsyMTUsNTIgQEAKICAgICAgICAgICAgICAgICAgICAgaWYgKHBhdGNoLT5zb3VyY2VzWzFdLnR5cGUgIT0gQVVESU9fUE9SVF9UWVBFX01JWCB8fAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIChwYXRjaC0+bnVtX3NpbmtzICE9IDAgJiYgcGF0Y2gtPnNpbmtzWzBdLmV4dC5kZXZpY2UuaHdfbW9kdWxlICE9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXRjaC0+c291cmNlc1sxXS5leHQubWl4Lmh3X21vZHVsZSkpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIEFMT0dXKCJjcmVhdGVBdWRpb1BhdGNoKCkgaW52YWxpZCBzb3VyY2UgY29tYmluYXRpb24iKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIEFMT0dXKCIlcygpIGludmFsaWQgc291cmNlIGNvbWJpbmF0aW9uIiwgX19mdW5jX18pOwogICAgICAgICAgICAgICAgICAgICAgICAgc3RhdHVzID0gSU5WQUxJRF9PUEVSQVRJT047CiAgICAgICAgICAgICAgICAgICAgICAgICBnb3RvIGV4aXQ7CiAgICAgICAgICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgICAgICAgICBzcDxUaHJlYWRCYXNlPiB0aHJlYWQgPQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF1ZGlvZmxpbmdlci0+Y2hlY2tQbGF5YmFja1RocmVhZF9sKHBhdGNoLT5zb3VyY2VzWzFdLmV4dC5taXguaGFuZGxlKTsKLSAgICAgICAgICAgICAgICAgICAgbmV3UGF0Y2gtPm1QbGF5YmFja1RocmVhZCA9IChNaXhlclRocmVhZCAqKXRocmVhZC5nZXQoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBtQXVkaW9GbGluZ2VyLmNoZWNrUGxheWJhY2tUaHJlYWRfbChwYXRjaC0+c291cmNlc1sxXS5leHQubWl4LmhhbmRsZSk7CiAgICAgICAgICAgICAgICAgICAgIGlmICh0aHJlYWQgPT0gMCkgewotICAgICAgICAgICAgICAgICAgICAgICAgQUxPR1coImNyZWF0ZUF1ZGlvUGF0Y2goKSBjYW5ub3QgZ2V0IHBsYXliYWNrIHRocmVhZCIpOworICAgICAgICAgICAgICAgICAgICAgICAgQUxPR1coIiVzKCkgY2Fubm90IGdldCBwbGF5YmFjayB0aHJlYWQiLCBfX2Z1bmNfXyk7CiAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0dXMgPSBJTlZBTElEX09QRVJBVElPTjsKICAgICAgICAgICAgICAgICAgICAgICAgIGdvdG8gZXhpdDsKICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAvLyBleGlzdGluZyBwbGF5YmFjayB0aHJlYWQgaXMgcmV1c2VkLCBzbyBpdCBpcyBub3QgY2xvc2VkIHdoZW4gcGF0Y2ggaXMgY2xlYXJlZAorICAgICAgICAgICAgICAgICAgICBuZXdQYXRjaC5tUGxheWJhY2suc2V0VGhyZWFkKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlaW50ZXJwcmV0X2Nhc3Q8UGxheWJhY2tUaHJlYWQqPih0aHJlYWQuZ2V0KCkpLCBmYWxzZSAvKmNsb3NlVGhyZWFkKi8pOwogICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgIGF1ZGlvX2NvbmZpZ190IGNvbmZpZyA9IEFVRElPX0NPTkZJR19JTklUSUFMSVpFUjsKICAgICAgICAgICAgICAgICAgICAgYXVkaW9fZGV2aWNlc190IGRldmljZSA9IHBhdGNoLT5zaW5rc1swXS5leHQuZGV2aWNlLnR5cGU7CiAgICAgICAgICAgICAgICAgICAgIFN0cmluZzggYWRkcmVzcyA9IFN0cmluZzgocGF0Y2gtPnNpbmtzWzBdLmV4dC5kZXZpY2UuYWRkcmVzcyk7CiAgICAgICAgICAgICAgICAgICAgIGF1ZGlvX2lvX2hhbmRsZV90IG91dHB1dCA9IEFVRElPX0lPX0hBTkRMRV9OT05FOwotICAgICAgICAgICAgICAgICAgICBzcDxUaHJlYWRCYXNlPiB0aHJlYWQgPSBhdWRpb2ZsaW5nZXItPm9wZW5PdXRwdXRfbCgKKyAgICAgICAgICAgICAgICAgICAgYXVkaW9fb3V0cHV0X2ZsYWdzX3QgZmxhZ3MgPSBBVURJT19PVVRQVVRfRkxBR19OT05FOworICAgICAgICAgICAgICAgICAgICBpZiAocGF0Y2gtPnNpbmtzWzBdLmNvbmZpZ19tYXNrICYgQVVESU9fUE9SVF9DT05GSUdfU0FNUExFX1JBVEUpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbmZpZy5zYW1wbGVfcmF0ZSA9IHBhdGNoLT5zaW5rc1swXS5zYW1wbGVfcmF0ZTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBpZiAocGF0Y2gtPnNpbmtzWzBdLmNvbmZpZ19tYXNrICYgQVVESU9fUE9SVF9DT05GSUdfQ0hBTk5FTF9NQVNLKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBjb25maWcuY2hhbm5lbF9tYXNrID0gcGF0Y2gtPnNpbmtzWzBdLmNoYW5uZWxfbWFzazsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBpZiAocGF0Y2gtPnNpbmtzWzBdLmNvbmZpZ19tYXNrICYgQVVESU9fUE9SVF9DT05GSUdfRk9STUFUKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBjb25maWcuZm9ybWF0ID0gcGF0Y2gtPnNpbmtzWzBdLmZvcm1hdDsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBpZiAocGF0Y2gtPnNpbmtzWzBdLmNvbmZpZ19tYXNrICYgQVVESU9fUE9SVF9DT05GSUdfRkxBR1MpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGZsYWdzID0gcGF0Y2gtPnNpbmtzWzBdLmZsYWdzLm91dHB1dDsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBzcDxUaHJlYWRCYXNlPiB0aHJlYWQgPSBtQXVkaW9GbGluZ2VyLm9wZW5PdXRwdXRfbCgKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhdGNoLT5zaW5rc1swXS5leHQuZGV2aWNlLmh3X21vZHVsZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZvdXRwdXQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmY29uZmlnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGV2aWNlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWRkcmVzcywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFVRElPX09VVFBVVF9GTEFHX05PTkUpOwotICAgICAgICAgICAgICAgICAgICBuZXdQYXRjaC0+bVBsYXliYWNrVGhyZWFkID0gKFBsYXliYWNrVGhyZWFkICopdGhyZWFkLmdldCgpOwotICAgICAgICAgICAgICAgICAgICBBTE9HVigiYXVkaW9mbGluZ2VyLT5vcGVuT3V0cHV0X2woKSByZXR1cm5lZCAlcCIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXdQYXRjaC0+bVBsYXliYWNrVGhyZWFkLmdldCgpKTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKG5ld1BhdGNoLT5tUGxheWJhY2tUaHJlYWQgPT0gMCkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmxhZ3MpOworICAgICAgICAgICAgICAgICAgICBBTE9HVigibUF1ZGlvRmxpbmdlci5vcGVuT3V0cHV0X2woKSByZXR1cm5lZCAlcCIsIHRocmVhZC5nZXQoKSk7CisgICAgICAgICAgICAgICAgICAgIGlmICh0aHJlYWQgPT0gMCkgewogICAgICAgICAgICAgICAgICAgICAgICAgc3RhdHVzID0gTk9fTUVNT1JZOwogICAgICAgICAgICAgICAgICAgICAgICAgZ290byBleGl0OwogICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIG5ld1BhdGNoLm1QbGF5YmFjay5zZXRUaHJlYWQocmVpbnRlcnByZXRfY2FzdDxQbGF5YmFja1RocmVhZCo+KHRocmVhZC5nZXQoKSkpOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICBhdWRpb19kZXZpY2VzX3QgZGV2aWNlID0gcGF0Y2gtPnNvdXJjZXNbMF0uZXh0LmRldmljZS50eXBlOwogICAgICAgICAgICAgICAgIFN0cmluZzggYWRkcmVzcyA9IFN0cmluZzgocGF0Y2gtPnNvdXJjZXNbMF0uZXh0LmRldmljZS5hZGRyZXNzKTsKQEAgLTI5Nyw0NyArMjcwLDUzIEBACiAgICAgICAgICAgICAgICAgaWYgKHBhdGNoLT5zb3VyY2VzWzBdLmNvbmZpZ19tYXNrICYgQVVESU9fUE9SVF9DT05GSUdfU0FNUExFX1JBVEUpIHsKICAgICAgICAgICAgICAgICAgICAgY29uZmlnLnNhbXBsZV9yYXRlID0gcGF0Y2gtPnNvdXJjZXNbMF0uc2FtcGxlX3JhdGU7CiAgICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgY29uZmlnLnNhbXBsZV9yYXRlID0gbmV3UGF0Y2gtPm1QbGF5YmFja1RocmVhZC0+c2FtcGxlUmF0ZSgpOworICAgICAgICAgICAgICAgICAgICBjb25maWcuc2FtcGxlX3JhdGUgPSBuZXdQYXRjaC5tUGxheWJhY2sudGhyZWFkKCktPnNhbXBsZVJhdGUoKTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgaWYgKHBhdGNoLT5zb3VyY2VzWzBdLmNvbmZpZ19tYXNrICYgQVVESU9fUE9SVF9DT05GSUdfQ0hBTk5FTF9NQVNLKSB7CiAgICAgICAgICAgICAgICAgICAgIGNvbmZpZy5jaGFubmVsX21hc2sgPSBwYXRjaC0+c291cmNlc1swXS5jaGFubmVsX21hc2s7CiAgICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgY29uZmlnLmNoYW5uZWxfbWFzayA9Ci0gICAgICAgICAgICAgICAgICAgICAgICBhdWRpb19jaGFubmVsX2luX21hc2tfZnJvbV9jb3VudChuZXdQYXRjaC0+bVBsYXliYWNrVGhyZWFkLT5jaGFubmVsQ291bnQoKSk7CisgICAgICAgICAgICAgICAgICAgIGNvbmZpZy5jaGFubmVsX21hc2sgPSBhdWRpb19jaGFubmVsX2luX21hc2tfZnJvbV9jb3VudCgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXdQYXRjaC5tUGxheWJhY2sudGhyZWFkKCktPmNoYW5uZWxDb3VudCgpKTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgaWYgKHBhdGNoLT5zb3VyY2VzWzBdLmNvbmZpZ19tYXNrICYgQVVESU9fUE9SVF9DT05GSUdfRk9STUFUKSB7CiAgICAgICAgICAgICAgICAgICAgIGNvbmZpZy5mb3JtYXQgPSBwYXRjaC0+c291cmNlc1swXS5mb3JtYXQ7CiAgICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgY29uZmlnLmZvcm1hdCA9IG5ld1BhdGNoLT5tUGxheWJhY2tUaHJlYWQtPmZvcm1hdCgpOworICAgICAgICAgICAgICAgICAgICBjb25maWcuZm9ybWF0ID0gbmV3UGF0Y2gubVBsYXliYWNrLnRocmVhZCgpLT5mb3JtYXQoKTsKICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYXVkaW9faW5wdXRfZmxhZ3NfdCBmbGFncyA9CisgICAgICAgICAgICAgICAgICAgICAgICBwYXRjaC0+c291cmNlc1swXS5jb25maWdfbWFzayAmIEFVRElPX1BPUlRfQ09ORklHX0ZMQUdTID8KKyAgICAgICAgICAgICAgICAgICAgICAgIHBhdGNoLT5zb3VyY2VzWzBdLmZsYWdzLmlucHV0IDogQVVESU9fSU5QVVRfRkxBR19OT05FOwogICAgICAgICAgICAgICAgIGF1ZGlvX2lvX2hhbmRsZV90IGlucHV0ID0gQVVESU9fSU9fSEFORExFX05PTkU7Ci0gICAgICAgICAgICAgICAgc3A8VGhyZWFkQmFzZT4gdGhyZWFkID0gYXVkaW9mbGluZ2VyLT5vcGVuSW5wdXRfbChzcmNNb2R1bGUsCisgICAgICAgICAgICAgICAgc3A8VGhyZWFkQmFzZT4gdGhyZWFkID0gbUF1ZGlvRmxpbmdlci5vcGVuSW5wdXRfbChzcmNNb2R1bGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZpbnB1dCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmNvbmZpZywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGV2aWNlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZGRyZXNzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBVURJT19TT1VSQ0VfTUlDLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBVURJT19JTlBVVF9GTEFHX05PTkUpOwotICAgICAgICAgICAgICAgIG5ld1BhdGNoLT5tUmVjb3JkVGhyZWFkID0gKFJlY29yZFRocmVhZCAqKXRocmVhZC5nZXQoKTsKLSAgICAgICAgICAgICAgICBBTE9HVigiYXVkaW9mbGluZ2VyLT5vcGVuSW5wdXRfbCgpIHJldHVybmVkICVwIGluQ2hhbm5lbE1hc2sgJTA4eCIsCi0gICAgICAgICAgICAgICAgICAgICAgbmV3UGF0Y2gtPm1SZWNvcmRUaHJlYWQuZ2V0KCksIGNvbmZpZy5jaGFubmVsX21hc2spOwotICAgICAgICAgICAgICAgIGlmIChuZXdQYXRjaC0+bVJlY29yZFRocmVhZCA9PSAwKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZsYWdzKTsKKyAgICAgICAgICAgICAgICBBTE9HVigibUF1ZGlvRmxpbmdlci5vcGVuSW5wdXRfbCgpIHJldHVybmVkICVwIGluQ2hhbm5lbE1hc2sgJTA4eCIsCisgICAgICAgICAgICAgICAgICAgICAgdGhyZWFkLmdldCgpLCBjb25maWcuY2hhbm5lbF9tYXNrKTsKKyAgICAgICAgICAgICAgICBpZiAodGhyZWFkID09IDApIHsKICAgICAgICAgICAgICAgICAgICAgc3RhdHVzID0gTk9fTUVNT1JZOwogICAgICAgICAgICAgICAgICAgICBnb3RvIGV4aXQ7CiAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIHN0YXR1cyA9IGNyZWF0ZVBhdGNoQ29ubmVjdGlvbnMobmV3UGF0Y2gsIHBhdGNoKTsKKyAgICAgICAgICAgICAgICBuZXdQYXRjaC5tUmVjb3JkLnNldFRocmVhZChyZWludGVycHJldF9jYXN0PFJlY29yZFRocmVhZCo+KHRocmVhZC5nZXQoKSkpOworICAgICAgICAgICAgICAgIHN0YXR1cyA9IG5ld1BhdGNoLmNyZWF0ZUNvbm5lY3Rpb25zKHRoaXMpOwogICAgICAgICAgICAgICAgIGlmIChzdGF0dXMgIT0gTk9fRVJST1IpIHsKICAgICAgICAgICAgICAgICAgICAgZ290byBleGl0OwogICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBpZiAoYXVkaW9Id0RldmljZS0+aXNJbnNlcnQoKSkgeworICAgICAgICAgICAgICAgICAgICBpbnNlcnRlZE1vZHVsZSA9IGF1ZGlvSHdEZXZpY2UtPmhhbmRsZSgpOworICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgaWYgKHBhdGNoLT5zaW5rc1swXS50eXBlID09IEFVRElPX1BPUlRfVFlQRV9NSVgpIHsKLSAgICAgICAgICAgICAgICAgICAgc3A8VGhyZWFkQmFzZT4gdGhyZWFkID0gYXVkaW9mbGluZ2VyLT5jaGVja1JlY29yZFRocmVhZF9sKAorICAgICAgICAgICAgICAgICAgICBzcDxUaHJlYWRCYXNlPiB0aHJlYWQgPSBtQXVkaW9GbGluZ2VyLmNoZWNrUmVjb3JkVGhyZWFkX2woCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhdGNoLT5zaW5rc1swXS5leHQubWl4LmhhbmRsZSk7CiAgICAgICAgICAgICAgICAgICAgIGlmICh0aHJlYWQgPT0gMCkgewotICAgICAgICAgICAgICAgICAgICAgICAgdGhyZWFkID0gYXVkaW9mbGluZ2VyLT5jaGVja01tYXBUaHJlYWRfbChwYXRjaC0+c2lua3NbMF0uZXh0Lm1peC5oYW5kbGUpOworICAgICAgICAgICAgICAgICAgICAgICAgdGhyZWFkID0gbUF1ZGlvRmxpbmdlci5jaGVja01tYXBUaHJlYWRfbChwYXRjaC0+c2lua3NbMF0uZXh0Lm1peC5oYW5kbGUpOwogICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRocmVhZCA9PSAwKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgQUxPR1coImNyZWF0ZUF1ZGlvUGF0Y2goKSBiYWQgY2FwdHVyZSBJL08gaGFuZGxlICVkIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhdGNoLT5zaW5rc1swXS5leHQubWl4LmhhbmRsZSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgQUxPR1coIiVzKCkgYmFkIGNhcHR1cmUgSS9PIGhhbmRsZSAlZCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2Z1bmNfXywgcGF0Y2gtPnNpbmtzWzBdLmV4dC5taXguaGFuZGxlKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0dXMgPSBCQURfVkFMVUU7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ290byBleGl0OwogICAgICAgICAgICAgICAgICAgICAgICAgfQpAQCAtMzU2LDkgKzMzNSw5IEBACiAgICAgICAgIH0gYnJlYWs7CiAgICAgICAgIGNhc2UgQVVESU9fUE9SVF9UWVBFX01JWDogewogICAgICAgICAgICAgYXVkaW9fbW9kdWxlX2hhbmRsZV90IHNyY01vZHVsZSA9ICBwYXRjaC0+c291cmNlc1swXS5leHQubWl4Lmh3X21vZHVsZTsKLSAgICAgICAgICAgIHNzaXplX3QgaW5kZXggPSBhdWRpb2ZsaW5nZXItPm1BdWRpb0h3RGV2cy5pbmRleE9mS2V5KHNyY01vZHVsZSk7CisgICAgICAgICAgICBzc2l6ZV90IGluZGV4ID0gbUF1ZGlvRmxpbmdlci5tQXVkaW9Id0RldnMuaW5kZXhPZktleShzcmNNb2R1bGUpOwogICAgICAgICAgICAgaWYgKGluZGV4IDwgMCkgewotICAgICAgICAgICAgICAgIEFMT0dXKCJjcmVhdGVBdWRpb1BhdGNoKCkgYmFkIHNyYyBodyBtb2R1bGUgJWQiLCBzcmNNb2R1bGUpOworICAgICAgICAgICAgICAgIEFMT0dXKCIlcygpIGJhZCBzcmMgaHcgbW9kdWxlICVkIiwgX19mdW5jX18sIHNyY01vZHVsZSk7CiAgICAgICAgICAgICAgICAgc3RhdHVzID0gQkFEX1ZBTFVFOwogICAgICAgICAgICAgICAgIGdvdG8gZXhpdDsKICAgICAgICAgICAgIH0KQEAgLTM2Niw4ICszNDUsOCBAQAogICAgICAgICAgICAgYXVkaW9fZGV2aWNlc190IHR5cGUgPSBBVURJT19ERVZJQ0VfTk9ORTsKICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpIDwgcGF0Y2gtPm51bV9zaW5rczsgaSsrKSB7CiAgICAgICAgICAgICAgICAgaWYgKHBhdGNoLT5zaW5rc1tpXS50eXBlICE9IEFVRElPX1BPUlRfVFlQRV9ERVZJQ0UpIHsKLSAgICAgICAgICAgICAgICAgICAgQUxPR1coImNyZWF0ZUF1ZGlvUGF0Y2goKSBpbnZhbGlkIHNpbmsgdHlwZSAlZCBmb3IgbWl4IHNvdXJjZSIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgIHBhdGNoLT5zaW5rc1tpXS50eXBlKTsKKyAgICAgICAgICAgICAgICAgICAgQUxPR1coIiVzKCkgaW52YWxpZCBzaW5rIHR5cGUgJWQgZm9yIG1peCBzb3VyY2UiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fZnVuY19fLCBwYXRjaC0+c2lua3NbaV0udHlwZSk7CiAgICAgICAgICAgICAgICAgICAgIHN0YXR1cyA9IEJBRF9WQUxVRTsKICAgICAgICAgICAgICAgICAgICAgZ290byBleGl0OwogICAgICAgICAgICAgICAgIH0KQEAgLTM3OSwyMSArMzU4LDIxIEBACiAgICAgICAgICAgICAgICAgdHlwZSB8PSBwYXRjaC0+c2lua3NbaV0uZXh0LmRldmljZS50eXBlOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgc3A8VGhyZWFkQmFzZT4gdGhyZWFkID0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdWRpb2ZsaW5nZXItPmNoZWNrUGxheWJhY2tUaHJlYWRfbChwYXRjaC0+c291cmNlc1swXS5leHQubWl4LmhhbmRsZSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbUF1ZGlvRmxpbmdlci5jaGVja1BsYXliYWNrVGhyZWFkX2wocGF0Y2gtPnNvdXJjZXNbMF0uZXh0Lm1peC5oYW5kbGUpOwogICAgICAgICAgICAgaWYgKHRocmVhZCA9PSAwKSB7Ci0gICAgICAgICAgICAgICAgdGhyZWFkID0gYXVkaW9mbGluZ2VyLT5jaGVja01tYXBUaHJlYWRfbChwYXRjaC0+c291cmNlc1swXS5leHQubWl4LmhhbmRsZSk7CisgICAgICAgICAgICAgICAgdGhyZWFkID0gbUF1ZGlvRmxpbmdlci5jaGVja01tYXBUaHJlYWRfbChwYXRjaC0+c291cmNlc1swXS5leHQubWl4LmhhbmRsZSk7CiAgICAgICAgICAgICAgICAgaWYgKHRocmVhZCA9PSAwKSB7Ci0gICAgICAgICAgICAgICAgICAgIEFMT0dXKCJjcmVhdGVBdWRpb1BhdGNoKCkgYmFkIHBsYXliYWNrIEkvTyBoYW5kbGUgJWQiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGF0Y2gtPnNvdXJjZXNbMF0uZXh0Lm1peC5oYW5kbGUpOworICAgICAgICAgICAgICAgICAgICBBTE9HVygiJXMoKSBiYWQgcGxheWJhY2sgSS9PIGhhbmRsZSAlZCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19mdW5jX18sIHBhdGNoLT5zb3VyY2VzWzBdLmV4dC5taXguaGFuZGxlKTsKICAgICAgICAgICAgICAgICAgICAgc3RhdHVzID0gQkFEX1ZBTFVFOwogICAgICAgICAgICAgICAgICAgICBnb3RvIGV4aXQ7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYgKHRocmVhZCA9PSBhdWRpb2ZsaW5nZXItPnByaW1hcnlQbGF5YmFja1RocmVhZF9sKCkpIHsKKyAgICAgICAgICAgIGlmICh0aHJlYWQgPT0gbUF1ZGlvRmxpbmdlci5wcmltYXJ5UGxheWJhY2tUaHJlYWRfbCgpKSB7CiAgICAgICAgICAgICAgICAgQXVkaW9QYXJhbWV0ZXIgcGFyYW0gPSBBdWRpb1BhcmFtZXRlcigpOwogICAgICAgICAgICAgICAgIHBhcmFtLmFkZEludChTdHJpbmc4KEF1ZGlvUGFyYW1ldGVyOjprZXlSb3V0aW5nKSwgKGludCl0eXBlKTsKIAotICAgICAgICAgICAgICAgIGF1ZGlvZmxpbmdlci0+YnJvYWNhc3RQYXJhbWV0ZXJzVG9SZWNvcmRUaHJlYWRzX2wocGFyYW0udG9TdHJpbmcoKSk7CisgICAgICAgICAgICAgICAgbUF1ZGlvRmxpbmdlci5icm9hY2FzdFBhcmFtZXRlcnNUb1JlY29yZFRocmVhZHNfbChwYXJhbS50b1N0cmluZygpKTsKICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgc3RhdHVzID0gdGhyZWFkLT5zZW5kQ3JlYXRlQXVkaW9QYXRjaENvbmZpZ0V2ZW50KHBhdGNoLCAmaGFsSGFuZGxlKTsKQEAgLTQwMywyOTUgKzM4Miw0MTUgQEAKICAgICAgICAgICAgIGdvdG8gZXhpdDsKICAgICB9CiBleGl0OgotICAgIEFMT0dWKCJjcmVhdGVBdWRpb1BhdGNoKCkgc3RhdHVzICVkIiwgc3RhdHVzKTsKKyAgICBBTE9HVigiJXMoKSBzdGF0dXMgJWQiLCBfX2Z1bmNfXywgc3RhdHVzKTsKICAgICBpZiAoc3RhdHVzID09IE5PX0VSUk9SKSB7Ci0gICAgICAgICpoYW5kbGUgPSAoYXVkaW9fcGF0Y2hfaGFuZGxlX3QpIGF1ZGlvZmxpbmdlci0+bmV4dFVuaXF1ZUlkKEFVRElPX1VOSVFVRV9JRF9VU0VfUEFUQ0gpOwotICAgICAgICBuZXdQYXRjaC0+bUhhbmRsZSA9ICpoYW5kbGU7Ci0gICAgICAgIG5ld1BhdGNoLT5tSGFsSGFuZGxlID0gaGFsSGFuZGxlOwotICAgICAgICBtUGF0Y2hlcy5hZGQobmV3UGF0Y2gpOwotICAgICAgICBBTE9HVigiY3JlYXRlQXVkaW9QYXRjaCgpIGFkZGVkIG5ldyBwYXRjaCBoYW5kbGUgJWQgaGFsSGFuZGxlICVkIiwgKmhhbmRsZSwgaGFsSGFuZGxlKTsKKyAgICAgICAgKmhhbmRsZSA9IChhdWRpb19wYXRjaF9oYW5kbGVfdCkgbUF1ZGlvRmxpbmdlci5uZXh0VW5pcXVlSWQoQVVESU9fVU5JUVVFX0lEX1VTRV9QQVRDSCk7CisgICAgICAgIG5ld1BhdGNoLm1IYWxIYW5kbGUgPSBoYWxIYW5kbGU7CisgICAgICAgIG1QYXRjaGVzLmluc2VydChzdGQ6Om1ha2VfcGFpcigqaGFuZGxlLCBzdGQ6Om1vdmUobmV3UGF0Y2gpKSk7CisgICAgICAgIGlmIChpbnNlcnRlZE1vZHVsZSAhPSBBVURJT19NT0RVTEVfSEFORExFX05PTkUpIHsKKyAgICAgICAgICAgIGFkZFNvZnR3YXJlUGF0Y2hUb0luc2VydGVkTW9kdWxlcyhpbnNlcnRlZE1vZHVsZSwgKmhhbmRsZSk7CisgICAgICAgIH0KKyAgICAgICAgQUxPR1YoIiVzKCkgYWRkZWQgbmV3IHBhdGNoIGhhbmRsZSAlZCBoYWxIYW5kbGUgJWQiLCBfX2Z1bmNfXywgKmhhbmRsZSwgaGFsSGFuZGxlKTsKICAgICB9IGVsc2UgewotICAgICAgICBjbGVhclBhdGNoQ29ubmVjdGlvbnMobmV3UGF0Y2gpOwotICAgICAgICBkZWxldGUgbmV3UGF0Y2g7CisgICAgICAgIG5ld1BhdGNoLmNsZWFyQ29ubmVjdGlvbnModGhpcyk7CiAgICAgfQogICAgIHJldHVybiBzdGF0dXM7CiB9CiAKLXN0YXR1c190IEF1ZGlvRmxpbmdlcjo6UGF0Y2hQYW5lbDo6Y3JlYXRlUGF0Y2hDb25uZWN0aW9ucyhQYXRjaCAqcGF0Y2gsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RydWN0IGF1ZGlvX3BhdGNoICphdWRpb1BhdGNoKQorQXVkaW9GbGluZ2VyOjpQYXRjaFBhbmVsOjpQYXRjaDo6flBhdGNoKCkKK3sKKyAgICBBTE9HRV9JRihpc1NvZnR3YXJlKCksICJTb2Z0d2FyZSBwYXRjaCBjb25uZWN0aW9ucyBsZWFrZWQgJWQgJWQiLAorICAgICAgICAgICAgbVJlY29yZC5oYW5kbGUoKSwgbVBsYXliYWNrLmhhbmRsZSgpKTsKK30KKworc3RhdHVzX3QgQXVkaW9GbGluZ2VyOjpQYXRjaFBhbmVsOjpQYXRjaDo6Y3JlYXRlQ29ubmVjdGlvbnMoUGF0Y2hQYW5lbCAqcGFuZWwpCiB7CiAgICAgLy8gY3JlYXRlIHBhdGNoIGZyb20gc291cmNlIGRldmljZSB0byByZWNvcmQgdGhyZWFkIGlucHV0Ci0gICAgc3RydWN0IGF1ZGlvX3BhdGNoIHN1YlBhdGNoOwotICAgIHN1YlBhdGNoLm51bV9zb3VyY2VzID0gMTsKLSAgICBzdWJQYXRjaC5zb3VyY2VzWzBdID0gYXVkaW9QYXRjaC0+c291cmNlc1swXTsKLSAgICBzdWJQYXRjaC5udW1fc2lua3MgPSAxOwotCi0gICAgcGF0Y2gtPm1SZWNvcmRUaHJlYWQtPmdldEF1ZGlvUG9ydENvbmZpZygmc3ViUGF0Y2guc2lua3NbMF0pOwotICAgIHN1YlBhdGNoLnNpbmtzWzBdLmV4dC5taXgudXNlY2FzZS5zb3VyY2UgPSBBVURJT19TT1VSQ0VfTUlDOwotCi0gICAgc3RhdHVzX3Qgc3RhdHVzID0gY3JlYXRlQXVkaW9QYXRjaCgmc3ViUGF0Y2gsICZwYXRjaC0+bVJlY29yZFBhdGNoSGFuZGxlKTsKKyAgICBzdGF0dXNfdCBzdGF0dXMgPSBwYW5lbC0+Y3JlYXRlQXVkaW9QYXRjaCgKKyAgICAgICAgICAgIFBhdGNoQnVpbGRlcigpLmFkZFNvdXJjZShtQXVkaW9QYXRjaC5zb3VyY2VzWzBdKS4KKyAgICAgICAgICAgICAgICBhZGRTaW5rKG1SZWNvcmQudGhyZWFkKCksIHsgLnNvdXJjZSA9IEFVRElPX1NPVVJDRV9NSUMgfSkucGF0Y2goKSwKKyAgICAgICAgICAgIG1SZWNvcmQuaGFuZGxlUHRyKCkpOwogICAgIGlmIChzdGF0dXMgIT0gTk9fRVJST1IpIHsKLSAgICAgICAgcGF0Y2gtPm1SZWNvcmRQYXRjaEhhbmRsZSA9IEFVRElPX1BBVENIX0hBTkRMRV9OT05FOworICAgICAgICAqbVJlY29yZC5oYW5kbGVQdHIoKSA9IEFVRElPX1BBVENIX0hBTkRMRV9OT05FOwogICAgICAgICByZXR1cm4gc3RhdHVzOwogICAgIH0KIAogICAgIC8vIGNyZWF0ZSBwYXRjaCBmcm9tIHBsYXliYWNrIHRocmVhZCBvdXRwdXQgdG8gc2luayBkZXZpY2UKLSAgICBpZiAoYXVkaW9QYXRjaC0+bnVtX3NpbmtzICE9IDApIHsKLSAgICAgICAgcGF0Y2gtPm1QbGF5YmFja1RocmVhZC0+Z2V0QXVkaW9Qb3J0Q29uZmlnKCZzdWJQYXRjaC5zb3VyY2VzWzBdKTsKLSAgICAgICAgc3ViUGF0Y2guc2lua3NbMF0gPSBhdWRpb1BhdGNoLT5zaW5rc1swXTsKLSAgICAgICAgc3RhdHVzID0gY3JlYXRlQXVkaW9QYXRjaCgmc3ViUGF0Y2gsICZwYXRjaC0+bVBsYXliYWNrUGF0Y2hIYW5kbGUpOworICAgIGlmIChtQXVkaW9QYXRjaC5udW1fc2lua3MgIT0gMCkgeworICAgICAgICBzdGF0dXMgPSBwYW5lbC0+Y3JlYXRlQXVkaW9QYXRjaCgKKyAgICAgICAgICAgICAgICBQYXRjaEJ1aWxkZXIoKS5hZGRTb3VyY2UobVBsYXliYWNrLnRocmVhZCgpKS5hZGRTaW5rKG1BdWRpb1BhdGNoLnNpbmtzWzBdKS5wYXRjaCgpLAorICAgICAgICAgICAgICAgIG1QbGF5YmFjay5oYW5kbGVQdHIoKSk7CiAgICAgICAgIGlmIChzdGF0dXMgIT0gTk9fRVJST1IpIHsKLSAgICAgICAgICAgIHBhdGNoLT5tUGxheWJhY2tQYXRjaEhhbmRsZSA9IEFVRElPX1BBVENIX0hBTkRMRV9OT05FOworICAgICAgICAgICAgKm1QbGF5YmFjay5oYW5kbGVQdHIoKSA9IEFVRElPX1BBVENIX0hBTkRMRV9OT05FOwogICAgICAgICAgICAgcmV0dXJuIHN0YXR1czsKICAgICAgICAgfQogICAgIH0gZWxzZSB7Ci0gICAgICAgIHBhdGNoLT5tUGxheWJhY2tQYXRjaEhhbmRsZSA9IEFVRElPX1BBVENIX0hBTkRMRV9OT05FOworICAgICAgICAqbVBsYXliYWNrLmhhbmRsZVB0cigpID0gQVVESU9fUEFUQ0hfSEFORExFX05PTkU7CiAgICAgfQogCiAgICAgLy8gdXNlIGEgcHNldWRvIExDTSBiZXR3ZWVuIGlucHV0IGFuZCBvdXRwdXQgZnJhbWVjb3VudAotICAgIHNpemVfdCBwbGF5YmFja0ZyYW1lQ291bnQgPSBwYXRjaC0+bVBsYXliYWNrVGhyZWFkLT5mcmFtZUNvdW50KCk7CisgICAgc2l6ZV90IHBsYXliYWNrRnJhbWVDb3VudCA9IG1QbGF5YmFjay50aHJlYWQoKS0+ZnJhbWVDb3VudCgpOwogICAgIGludCBwbGF5YmFja1NoaWZ0ID0gX19idWlsdGluX2N0eihwbGF5YmFja0ZyYW1lQ291bnQpOwotICAgIHNpemVfdCByZWNvcmRGcmFtZWNvdW50ID0gcGF0Y2gtPm1SZWNvcmRUaHJlYWQtPmZyYW1lQ291bnQoKTsKLSAgICBpbnQgc2hpZnQgPSBfX2J1aWx0aW5fY3R6KHJlY29yZEZyYW1lY291bnQpOworICAgIHNpemVfdCByZWNvcmRGcmFtZUNvdW50ID0gbVJlY29yZC50aHJlYWQoKS0+ZnJhbWVDb3VudCgpOworICAgIGludCBzaGlmdCA9IF9fYnVpbHRpbl9jdHoocmVjb3JkRnJhbWVDb3VudCk7CiAgICAgaWYgKHBsYXliYWNrU2hpZnQgPCBzaGlmdCkgewogICAgICAgICBzaGlmdCA9IHBsYXliYWNrU2hpZnQ7CiAgICAgfQotICAgIHNpemVfdCBmcmFtZUNvdW50ID0gKHBsYXliYWNrRnJhbWVDb3VudCAqIHJlY29yZEZyYW1lY291bnQpID4+IHNoaWZ0OwotICAgIEFMT0dWKCJjcmVhdGVQYXRjaENvbm5lY3Rpb25zKCkgcGxheWZyYW1lQ291bnQgJXp1IHJlY29yZEZyYW1lY291bnQgJXp1IGZyYW1lQ291bnQgJXp1IiwKLSAgICAgICAgICBwbGF5YmFja0ZyYW1lQ291bnQsIHJlY29yZEZyYW1lY291bnQsIGZyYW1lQ291bnQpOworICAgIHNpemVfdCBmcmFtZUNvdW50ID0gKHBsYXliYWNrRnJhbWVDb3VudCAqIHJlY29yZEZyYW1lQ291bnQpID4+IHNoaWZ0OworICAgIEFMT0dWKCIlcygpIHBsYXlmcmFtZUNvdW50ICV6dSByZWNvcmRGcmFtZUNvdW50ICV6dSBmcmFtZUNvdW50ICV6dSIsCisgICAgICAgICAgICBfX2Z1bmNfXywgcGxheWJhY2tGcmFtZUNvdW50LCByZWNvcmRGcmFtZUNvdW50LCBmcmFtZUNvdW50KTsKIAogICAgIC8vIGNyZWF0ZSBhIHNwZWNpYWwgcmVjb3JkIHRyYWNrIHRvIGNhcHR1cmUgZnJvbSByZWNvcmQgdGhyZWFkCi0gICAgdWludDMyX3QgY2hhbm5lbENvdW50ID0gcGF0Y2gtPm1QbGF5YmFja1RocmVhZC0+Y2hhbm5lbENvdW50KCk7CisgICAgdWludDMyX3QgY2hhbm5lbENvdW50ID0gbVBsYXliYWNrLnRocmVhZCgpLT5jaGFubmVsQ291bnQoKTsKICAgICBhdWRpb19jaGFubmVsX21hc2tfdCBpbkNoYW5uZWxNYXNrID0gYXVkaW9fY2hhbm5lbF9pbl9tYXNrX2Zyb21fY291bnQoY2hhbm5lbENvdW50KTsKLSAgICBhdWRpb19jaGFubmVsX21hc2tfdCBvdXRDaGFubmVsTWFzayA9IHBhdGNoLT5tUGxheWJhY2tUaHJlYWQtPmNoYW5uZWxNYXNrKCk7Ci0gICAgdWludDMyX3Qgc2FtcGxlUmF0ZSA9IHBhdGNoLT5tUGxheWJhY2tUaHJlYWQtPnNhbXBsZVJhdGUoKTsKLSAgICBhdWRpb19mb3JtYXRfdCBmb3JtYXQgPSBwYXRjaC0+bVBsYXliYWNrVGhyZWFkLT5mb3JtYXQoKTsKKyAgICBhdWRpb19jaGFubmVsX21hc2tfdCBvdXRDaGFubmVsTWFzayA9IG1QbGF5YmFjay50aHJlYWQoKS0+Y2hhbm5lbE1hc2soKTsKKyAgICB1aW50MzJfdCBzYW1wbGVSYXRlID0gbVBsYXliYWNrLnRocmVhZCgpLT5zYW1wbGVSYXRlKCk7CisgICAgYXVkaW9fZm9ybWF0X3QgZm9ybWF0ID0gbVBsYXliYWNrLnRocmVhZCgpLT5mb3JtYXQoKTsKIAotICAgIHBhdGNoLT5tUGF0Y2hSZWNvcmQgPSBuZXcgUmVjb3JkVGhyZWFkOjpQYXRjaFJlY29yZCgKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhdGNoLT5tUmVjb3JkVGhyZWFkLmdldCgpLAorICAgIGF1ZGlvX2Zvcm1hdF90IGlucHV0Rm9ybWF0ID0gbVJlY29yZC50aHJlYWQoKS0+Zm9ybWF0KCk7CisgICAgaWYgKCFhdWRpb19pc19saW5lYXJfcGNtKGlucHV0Rm9ybWF0KSkgeworICAgICAgICAvLyBUaGUgcGxheWJhY2tUaHJlYWQgZm9ybWF0IHdpbGwgc2F5IFBDTSBmb3IgSUVDNjE5MzcgcGFja2V0aXplZCBzdHJlYW0uCisgICAgICAgIC8vIFVzZSByZWNvcmRUaHJlYWQgZm9ybWF0LgorICAgICAgICBmb3JtYXQgPSBpbnB1dEZvcm1hdDsKKyAgICB9CisgICAgYXVkaW9faW5wdXRfZmxhZ3NfdCBpbnB1dEZsYWdzID0gbUF1ZGlvUGF0Y2guc291cmNlc1swXS5jb25maWdfbWFzayAmIEFVRElPX1BPUlRfQ09ORklHX0ZMQUdTID8KKyAgICAgICAgICAgIG1BdWRpb1BhdGNoLnNvdXJjZXNbMF0uZmxhZ3MuaW5wdXQgOiBBVURJT19JTlBVVF9GTEFHX05PTkU7CisgICAgaWYgKHNhbXBsZVJhdGUgPT0gbVJlY29yZC50aHJlYWQoKS0+c2FtcGxlUmF0ZSgpICYmCisgICAgICAgICAgICBpbkNoYW5uZWxNYXNrID09IG1SZWNvcmQudGhyZWFkKCktPmNoYW5uZWxNYXNrKCkgJiYKKyAgICAgICAgICAgIG1SZWNvcmQudGhyZWFkKCktPmZhc3RUcmFja0F2YWlsYWJsZSgpICYmCisgICAgICAgICAgICBtUmVjb3JkLnRocmVhZCgpLT5oYXNGYXN0Q2FwdHVyZSgpKSB7CisgICAgICAgIC8vIENyZWF0ZSBhIGZhc3QgdHJhY2sgaWYgdGhlIHJlY29yZCB0aHJlYWQgaGFzIGZhc3QgY2FwdHVyZSB0byBnZXQgYmV0dGVyIHBlcmZvcm1hbmNlLgorICAgICAgICAvLyBPbmx5IGVuYWJsZSBmYXN0IG1vZGUgd2hlbiB0aGVyZSBpcyBubyByZXNhbXBsZSBuZWVkZWQuCisgICAgICAgIGlucHV0RmxhZ3MgPSAoYXVkaW9faW5wdXRfZmxhZ3NfdCkgKGlucHV0RmxhZ3MgfCBBVURJT19JTlBVVF9GTEFHX0ZBU1QpOworICAgIH0gZWxzZSB7CisgICAgICAgIC8vIEZhc3QgbW9kZSBpcyBub3QgYXZhaWxhYmxlIGluIHRoaXMgY2FzZS4KKyAgICAgICAgaW5wdXRGbGFncyA9IChhdWRpb19pbnB1dF9mbGFnc190KSAoaW5wdXRGbGFncyAmIH5BVURJT19JTlBVVF9GTEFHX0ZBU1QpOworICAgIH0KKyAgICBzcDxSZWNvcmRUaHJlYWQ6OlBhdGNoUmVjb3JkPiB0ZW1wUmVjb3JkVHJhY2sgPSBuZXcgKHN0ZDo6bm90aHJvdykgUmVjb3JkVGhyZWFkOjpQYXRjaFJlY29yZCgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1SZWNvcmQudGhyZWFkKCkuZ2V0KCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzYW1wbGVSYXRlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5DaGFubmVsTWFzaywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1hdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZyYW1lQ291bnQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOVUxMLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHNpemVfdCkwIC8qIGJ1ZmZlclNpemUgKi8sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBVURJT19JTlBVVF9GTEFHX05PTkUpOwotICAgIGlmIChwYXRjaC0+bVBhdGNoUmVjb3JkID09IDApIHsKLSAgICAgICAgcmV0dXJuIE5PX01FTU9SWTsKLSAgICB9Ci0gICAgc3RhdHVzID0gcGF0Y2gtPm1QYXRjaFJlY29yZC0+aW5pdENoZWNrKCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnB1dEZsYWdzKTsKKyAgICBzdGF0dXMgPSBtUmVjb3JkLmNoZWNrVHJhY2sodGVtcFJlY29yZFRyYWNrLmdldCgpKTsKICAgICBpZiAoc3RhdHVzICE9IE5PX0VSUk9SKSB7CiAgICAgICAgIHJldHVybiBzdGF0dXM7CiAgICAgfQotICAgIHBhdGNoLT5tUmVjb3JkVGhyZWFkLT5hZGRQYXRjaFJlY29yZChwYXRjaC0+bVBhdGNoUmVjb3JkKTsKKworICAgIGF1ZGlvX291dHB1dF9mbGFnc190IG91dHB1dEZsYWdzID0gbUF1ZGlvUGF0Y2guc2lua3NbMF0uY29uZmlnX21hc2sgJiBBVURJT19QT1JUX0NPTkZJR19GTEFHUyA/CisgICAgICAgICAgICBtQXVkaW9QYXRjaC5zaW5rc1swXS5mbGFncy5vdXRwdXQgOiBBVURJT19PVVRQVVRfRkxBR19OT05FOworICAgIGF1ZGlvX3N0cmVhbV90eXBlX3Qgc3RyZWFtVHlwZSA9IEFVRElPX1NUUkVBTV9QQVRDSDsKKyAgICBpZiAobUF1ZGlvUGF0Y2gubnVtX3NvdXJjZXMgPT0gMiAmJiBtQXVkaW9QYXRjaC5zb3VyY2VzWzFdLnR5cGUgPT0gQVVESU9fUE9SVF9UWVBFX01JWCkgeworICAgICAgICAvLyAicmV1c2Ugb25lIGV4aXN0aW5nIG91dHB1dCBtaXgiIGNhc2UKKyAgICAgICAgc3RyZWFtVHlwZSA9IG1BdWRpb1BhdGNoLnNvdXJjZXNbMV0uZXh0Lm1peC51c2VjYXNlLnN0cmVhbTsKKyAgICB9CisgICAgaWYgKG1QbGF5YmFjay50aHJlYWQoKS0+aGFzRmFzdE1peGVyKCkpIHsKKyAgICAgICAgLy8gQ3JlYXRlIGEgZmFzdCB0cmFjayBpZiB0aGUgcGxheWJhY2sgdGhyZWFkIGhhcyBmYXN0IG1peGVyIHRvIGdldCBiZXR0ZXIgcGVyZm9ybWFuY2UuCisgICAgICAgIG91dHB1dEZsYWdzID0gKGF1ZGlvX291dHB1dF9mbGFnc190KSAob3V0cHV0RmxhZ3MgfCBBVURJT19PVVRQVVRfRkxBR19GQVNUKTsKKyAgICB9CiAKICAgICAvLyBjcmVhdGUgYSBzcGVjaWFsIHBsYXliYWNrIHRyYWNrIHRvIHJlbmRlciB0byBwbGF5YmFjayB0aHJlYWQuCiAgICAgLy8gdGhpcyB0cmFjayBpcyBnaXZlbiB0aGUgc2FtZSBidWZmZXIgYXMgdGhlIFBhdGNoUmVjb3JkIGJ1ZmZlcgotICAgIHBhdGNoLT5tUGF0Y2hUcmFjayA9IG5ldyBQbGF5YmFja1RocmVhZDo6UGF0Y2hUcmFjaygKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXRjaC0+bVBsYXliYWNrVGhyZWFkLmdldCgpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF1ZGlvUGF0Y2gtPnNvdXJjZXNbMV0uZXh0Lm1peC51c2VjYXNlLnN0cmVhbSwKKyAgICBzcDxQbGF5YmFja1RocmVhZDo6UGF0Y2hUcmFjaz4gdGVtcFBhdGNoVHJhY2sgPSBuZXcgKHN0ZDo6bm90aHJvdykgUGxheWJhY2tUaHJlYWQ6OlBhdGNoVHJhY2soCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbVBsYXliYWNrLnRocmVhZCgpLmdldCgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cmVhbVR5cGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2FtcGxlUmF0ZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdXRDaGFubmVsTWFzaywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JtYXQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnJhbWVDb3VudCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXRjaC0+bVBhdGNoUmVjb3JkLT5idWZmZXIoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXRjaC0+bVBhdGNoUmVjb3JkLT5idWZmZXJTaXplKCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQVVESU9fT1VUUFVUX0ZMQUdfTk9ORSk7Ci0gICAgc3RhdHVzID0gcGF0Y2gtPm1QYXRjaFRyYWNrLT5pbml0Q2hlY2soKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZW1wUmVjb3JkVHJhY2stPmJ1ZmZlcigpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRlbXBSZWNvcmRUcmFjay0+YnVmZmVyU2l6ZSgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG91dHB1dEZsYWdzKTsKKyAgICBzdGF0dXMgPSBtUGxheWJhY2suY2hlY2tUcmFjayh0ZW1wUGF0Y2hUcmFjay5nZXQoKSk7CiAgICAgaWYgKHN0YXR1cyAhPSBOT19FUlJPUikgewogICAgICAgICByZXR1cm4gc3RhdHVzOwogICAgIH0KLSAgICBwYXRjaC0+bVBsYXliYWNrVGhyZWFkLT5hZGRQYXRjaFRyYWNrKHBhdGNoLT5tUGF0Y2hUcmFjayk7CiAKICAgICAvLyB0aWUgcGxheWJhY2sgYW5kIHJlY29yZCB0cmFja3MgdG9nZXRoZXIKLSAgICBwYXRjaC0+bVBhdGNoUmVjb3JkLT5zZXRQZWVyUHJveHkocGF0Y2gtPm1QYXRjaFRyYWNrLmdldCgpKTsKLSAgICBwYXRjaC0+bVBhdGNoVHJhY2stPnNldFBlZXJQcm94eShwYXRjaC0+bVBhdGNoUmVjb3JkLmdldCgpKTsKKyAgICBtUmVjb3JkLnNldFRyYWNrQW5kUGVlcih0ZW1wUmVjb3JkVHJhY2ssIHRlbXBQYXRjaFRyYWNrLmdldCgpKTsKKyAgICBtUGxheWJhY2suc2V0VHJhY2tBbmRQZWVyKHRlbXBQYXRjaFRyYWNrLCB0ZW1wUmVjb3JkVHJhY2suZ2V0KCkpOwogCiAgICAgLy8gc3RhcnQgY2FwdHVyZSBhbmQgcGxheWJhY2sKLSAgICBwYXRjaC0+bVBhdGNoUmVjb3JkLT5zdGFydChBdWRpb1N5c3RlbTo6U1lOQ19FVkVOVF9OT05FLCBBVURJT19TRVNTSU9OX05PTkUpOwotICAgIHBhdGNoLT5tUGF0Y2hUcmFjay0+c3RhcnQoKTsKKyAgICBtUmVjb3JkLnRyYWNrKCktPnN0YXJ0KEF1ZGlvU3lzdGVtOjpTWU5DX0VWRU5UX05PTkUsIEFVRElPX1NFU1NJT05fTk9ORSk7CisgICAgbVBsYXliYWNrLnRyYWNrKCktPnN0YXJ0KCk7CiAKICAgICByZXR1cm4gc3RhdHVzOwogfQogCi12b2lkIEF1ZGlvRmxpbmdlcjo6UGF0Y2hQYW5lbDo6Y2xlYXJQYXRjaENvbm5lY3Rpb25zKFBhdGNoICpwYXRjaCkKK3ZvaWQgQXVkaW9GbGluZ2VyOjpQYXRjaFBhbmVsOjpQYXRjaDo6Y2xlYXJDb25uZWN0aW9ucyhQYXRjaFBhbmVsICpwYW5lbCkKIHsKLSAgICBzcDxBdWRpb0ZsaW5nZXI+IGF1ZGlvZmxpbmdlciA9IG1BdWRpb0ZsaW5nZXIucHJvbW90ZSgpOwotICAgIGlmIChhdWRpb2ZsaW5nZXIgPT0gMCkgewotICAgICAgICByZXR1cm47CisgICAgQUxPR1YoIiVzKCkgbVJlY29yZC5oYW5kbGUgJWQgbVBsYXliYWNrLmhhbmRsZSAlZCIsCisgICAgICAgICAgICBfX2Z1bmNfXywgbVJlY29yZC5oYW5kbGUoKSwgbVBsYXliYWNrLmhhbmRsZSgpKTsKKyAgICBtUmVjb3JkLnN0b3BUcmFjaygpOworICAgIG1QbGF5YmFjay5zdG9wVHJhY2soKTsKKyAgICBtUmVjb3JkLmNsb3NlQ29ubmVjdGlvbnMocGFuZWwpOworICAgIG1QbGF5YmFjay5jbG9zZUNvbm5lY3Rpb25zKHBhbmVsKTsKK30KKworc3RhdHVzX3QgQXVkaW9GbGluZ2VyOjpQYXRjaFBhbmVsOjpQYXRjaDo6Z2V0TGF0ZW5jeU1zKGRvdWJsZSAqbGF0ZW5jeU1zKSBjb25zdAoreworICAgIGlmICghaXNTb2Z0d2FyZSgpKSByZXR1cm4gSU5WQUxJRF9PUEVSQVRJT047CisKKyAgICBhdXRvIHJlY29yZFRyYWNrID0gbVJlY29yZC5jb25zdF90cmFjaygpOworICAgIGlmIChyZWNvcmRUcmFjay5nZXQoKSA9PSBudWxscHRyKSByZXR1cm4gSU5WQUxJRF9PUEVSQVRJT047CisKKyAgICBhdXRvIHBsYXliYWNrVHJhY2sgPSBtUGxheWJhY2suY29uc3RfdHJhY2soKTsKKyAgICBpZiAocGxheWJhY2tUcmFjay5nZXQoKSA9PSBudWxscHRyKSByZXR1cm4gSU5WQUxJRF9PUEVSQVRJT047CisKKyAgICAvLyBMYXRlbmN5IGluZm9ybWF0aW9uIGZvciB0cmFja3MgbWF5IGJlIGNhbGxlZCB3aXRob3V0IG9idGFpbmluZworICAgIC8vIHRoZSB1bmRlcmx5aW5nIHRocmVhZCBsb2NrLgorICAgIC8vCisgICAgLy8gV2UgdXNlIHJlY29yZCBzZXJ2ZXIgbGF0ZW5jeSArIHBsYXliYWNrIHRyYWNrIGxhdGVuY3kgKGdlbmVyYWxseSBzbWFsbGVyIHRoYW4gdGhlCisgICAgLy8gcmV2ZXJzZSBkdWUgdG8gaW50ZXJuYWwgYmlhc2VzKS4KKyAgICAvLworICAgIC8vIFRPRE86IGlzIHRoaXMgc3RhYmxlIGVub3VnaD8gQ29uc2lkZXIgYSBQYXRjaFRyYWNrIHN5bmNocm9uaXplZCB2ZXJzaW9uIG9mIHRoaXMuCisKKyAgICAvLyBGb3IgUENNIHRyYWNrcyBnZXQgc2VydmVyIGxhdGVuY3kuCisgICAgaWYgKGF1ZGlvX2lzX2xpbmVhcl9wY20ocmVjb3JkVHJhY2stPmZvcm1hdCgpKSkgeworICAgICAgICBkb3VibGUgcmVjb3JkU2VydmVyTGF0ZW5jeU1zLCBwbGF5YmFja1RyYWNrTGF0ZW5jeU1zOworICAgICAgICBpZiAocmVjb3JkVHJhY2stPmdldFNlcnZlckxhdGVuY3lNcygmcmVjb3JkU2VydmVyTGF0ZW5jeU1zKSA9PSBPSworICAgICAgICAgICAgICAgICYmIHBsYXliYWNrVHJhY2stPmdldFRyYWNrTGF0ZW5jeU1zKCZwbGF5YmFja1RyYWNrTGF0ZW5jeU1zKSA9PSBPSykgeworICAgICAgICAgICAgKmxhdGVuY3lNcyA9IHJlY29yZFNlcnZlckxhdGVuY3lNcyArIHBsYXliYWNrVHJhY2tMYXRlbmN5TXM7CisgICAgICAgICAgICByZXR1cm4gT0s7CisgICAgICAgIH0KICAgICB9CiAKLSAgICBBTE9HVigiY2xlYXJQYXRjaENvbm5lY3Rpb25zKCkgcGF0Y2gtPm1SZWNvcmRQYXRjaEhhbmRsZSAlZCBwYXRjaC0+bVBsYXliYWNrUGF0Y2hIYW5kbGUgJWQiLAotICAgICAgICAgIHBhdGNoLT5tUmVjb3JkUGF0Y2hIYW5kbGUsIHBhdGNoLT5tUGxheWJhY2tQYXRjaEhhbmRsZSk7CisgICAgLy8gU2VlIGlmIGtlcm5lbCBsYXRlbmNpZXMgYXJlIGF2YWlsYWJsZS4KKyAgICAvLyBJZiBzbywgZG8gYSBmcmFtZSBkaWZmIGFuZCB0aW1lIGRpZmZlcmVuY2UgY29tcHV0YXRpb24gdG8gZXN0aW1hdGUKKyAgICAvLyB0aGUgdG90YWwgcGF0Y2ggbGF0ZW5jeS4gVGhpcyByZXF1aXJlcyB0aGF0IGZyYW1lIGNvdW50cyBhcmUgcmVwb3J0ZWQgYnkgdGhlCisgICAgLy8gSEFMIGFyZSBtYXRjaGVkIHByb3Blcmx5IGluIHRoZSBjYXNlIG9mIHJlY29yZCBvdmVycnVucyBhbmQgcGxheWJhY2sgdW5kZXJydW5zLgorICAgIFRocmVhZEJhc2U6OlRyYWNrQmFzZTo6RnJhbWVUaW1lIHJlY29yZEZUe30sIHBsYXlGVHt9OworICAgIHJlY29yZFRyYWNrLT5nZXRLZXJuZWxGcmFtZVRpbWUoJnJlY29yZEZUKTsKKyAgICBwbGF5YmFja1RyYWNrLT5nZXRLZXJuZWxGcmFtZVRpbWUoJnBsYXlGVCk7CisgICAgaWYgKHJlY29yZEZULnRpbWVOcyA+IDAgJiYgcGxheUZULnRpbWVOcyA+IDApIHsKKyAgICAgICAgY29uc3QgaW50NjRfdCBmcmFtZURpZmYgPSByZWNvcmRGVC5mcmFtZXMgLSBwbGF5RlQuZnJhbWVzOworICAgICAgICBjb25zdCBpbnQ2NF90IHRpbWVEaWZmTnMgPSByZWNvcmRGVC50aW1lTnMgLSBwbGF5RlQudGltZU5zOwogCi0gICAgaWYgKHBhdGNoLT5tUGF0Y2hSZWNvcmQgIT0gMCkgewotICAgICAgICBwYXRjaC0+bVBhdGNoUmVjb3JkLT5zdG9wKCk7Ci0gICAgfQotICAgIGlmIChwYXRjaC0+bVBhdGNoVHJhY2sgIT0gMCkgewotICAgICAgICBwYXRjaC0+bVBhdGNoVHJhY2stPnN0b3AoKTsKLSAgICB9Ci0gICAgaWYgKHBhdGNoLT5tUmVjb3JkUGF0Y2hIYW5kbGUgIT0gQVVESU9fUEFUQ0hfSEFORExFX05PTkUpIHsKLSAgICAgICAgcmVsZWFzZUF1ZGlvUGF0Y2gocGF0Y2gtPm1SZWNvcmRQYXRjaEhhbmRsZSk7Ci0gICAgICAgIHBhdGNoLT5tUmVjb3JkUGF0Y2hIYW5kbGUgPSBBVURJT19QQVRDSF9IQU5ETEVfTk9ORTsKLSAgICB9Ci0gICAgaWYgKHBhdGNoLT5tUGxheWJhY2tQYXRjaEhhbmRsZSAhPSBBVURJT19QQVRDSF9IQU5ETEVfTk9ORSkgewotICAgICAgICByZWxlYXNlQXVkaW9QYXRjaChwYXRjaC0+bVBsYXliYWNrUGF0Y2hIYW5kbGUpOwotICAgICAgICBwYXRjaC0+bVBsYXliYWNrUGF0Y2hIYW5kbGUgPSBBVURJT19QQVRDSF9IQU5ETEVfTk9ORTsKLSAgICB9Ci0gICAgaWYgKHBhdGNoLT5tUmVjb3JkVGhyZWFkICE9IDApIHsKLSAgICAgICAgaWYgKHBhdGNoLT5tUGF0Y2hSZWNvcmQgIT0gMCkgewotICAgICAgICAgICAgcGF0Y2gtPm1SZWNvcmRUaHJlYWQtPmRlbGV0ZVBhdGNoUmVjb3JkKHBhdGNoLT5tUGF0Y2hSZWNvcmQpOworICAgICAgICAvLyBJdCBpcyBwb3NzaWJsZSB0aGF0IHRoZSBwYXRjaCB0cmFjayBhbmQgcGF0Y2ggcmVjb3JkIGhhdmUgYSBsYXJnZSB0aW1lIGRpc3Bhcml0eSBiZWNhdXNlCisgICAgICAgIC8vIG9uZSB0aHJlYWQgcnVucyBidXQgYW5vdGhlciBpcyBzdG9wcGVkLiAgV2UgYXJiaXRyYXJpbHkgY2hvb3NlIHRoZSBtYXhpbXVtIHRpbWVzdGFtcAorICAgICAgICAvLyB0aW1lIGRpZmZlcmVuY2UgYmFzZWQgb24gaG93IG9mdGVuIHdlIGV4cGVjdCB0aGUgdGltZXN0YW1wcyB0byB1cGRhdGUgaW4gbm9ybWFsIG9wZXJhdGlvbgorICAgICAgICAvLyAodHlwaWNhbCBzaG91bGQgYmUgbm8gbW9yZSB0aGFuIDUwIG1zKS4KKyAgICAgICAgLy8KKyAgICAgICAgLy8gSWYgdGhlIHRpbWVzdGFtcHMgYXJlbid0IHNhbXBsZWQgY2xvc2UgZW5vdWdoLCB0aGUgcGF0Y2ggbGF0ZW5jeSBpcyBub3QKKyAgICAgICAgLy8gY29uc2lkZXJlZCB2YWxpZC4KKyAgICAgICAgLy8KKyAgICAgICAgLy8gVE9ETzogY2hhbmdlIHRoaXMgYmFzZWQgb24gbW9yZSBleHBlcmltZW50cy4KKyAgICAgICAgY29uc3RleHByIGludDY0X3QgbWF4VmFsaWRUaW1lRGlmZk5zID0gMjAwICogTkFOT1NfUEVSX01JTExJU0VDT05EOworICAgICAgICBpZiAoc3RkOjphYnModGltZURpZmZOcykgPCBtYXhWYWxpZFRpbWVEaWZmTnMpIHsKKyAgICAgICAgICAgICpsYXRlbmN5TXMgPSBmcmFtZURpZmYgKiAxZTMgLyByZWNvcmRUcmFjay0+c2FtcGxlUmF0ZSgpCisgICAgICAgICAgICAgICAgICAgLSB0aW1lRGlmZk5zICogMWUtNjsKKyAgICAgICAgICAgIHJldHVybiBPSzsKICAgICAgICAgfQotICAgICAgICBhdWRpb2ZsaW5nZXItPmNsb3NlSW5wdXRJbnRlcm5hbF9sKHBhdGNoLT5tUmVjb3JkVGhyZWFkKTsKLSAgICB9Ci0gICAgaWYgKHBhdGNoLT5tUGxheWJhY2tUaHJlYWQgIT0gMCkgewotICAgICAgICBpZiAocGF0Y2gtPm1QYXRjaFRyYWNrICE9IDApIHsKLSAgICAgICAgICAgIHBhdGNoLT5tUGxheWJhY2tUaHJlYWQtPmRlbGV0ZVBhdGNoVHJhY2socGF0Y2gtPm1QYXRjaFRyYWNrKTsKLSAgICAgICAgfQotICAgICAgICAvLyBpZiBudW0gc291cmNlcyA9PSAyIHdlIGFyZSByZXVzaW5nIGFuIGV4aXN0aW5nIHBsYXliYWNrIHRocmVhZCBzbyB3ZSBkbyBub3QgY2xvc2UgaXQKLSAgICAgICAgaWYgKHBhdGNoLT5tQXVkaW9QYXRjaC5udW1fc291cmNlcyAhPSAyKSB7Ci0gICAgICAgICAgICBhdWRpb2ZsaW5nZXItPmNsb3NlT3V0cHV0SW50ZXJuYWxfbChwYXRjaC0+bVBsYXliYWNrVGhyZWFkKTsKLSAgICAgICAgfQotICAgIH0KLSAgICBpZiAocGF0Y2gtPm1SZWNvcmRUaHJlYWQgIT0gMCkgewotICAgICAgICBpZiAocGF0Y2gtPm1QYXRjaFJlY29yZCAhPSAwKSB7Ci0gICAgICAgICAgICBwYXRjaC0+bVBhdGNoUmVjb3JkLmNsZWFyKCk7Ci0gICAgICAgIH0KLSAgICAgICAgcGF0Y2gtPm1SZWNvcmRUaHJlYWQuY2xlYXIoKTsKLSAgICB9Ci0gICAgaWYgKHBhdGNoLT5tUGxheWJhY2tUaHJlYWQgIT0gMCkgewotICAgICAgICBpZiAocGF0Y2gtPm1QYXRjaFRyYWNrICE9IDApIHsKLSAgICAgICAgICAgIHBhdGNoLT5tUGF0Y2hUcmFjay5jbGVhcigpOwotICAgICAgICB9Ci0gICAgICAgIHBhdGNoLT5tUGxheWJhY2tUaHJlYWQuY2xlYXIoKTsKICAgICB9CiAKKyAgICByZXR1cm4gSU5WQUxJRF9PUEVSQVRJT047Cit9CisKK1N0cmluZzggQXVkaW9GbGluZ2VyOjpQYXRjaFBhbmVsOjpQYXRjaDo6ZHVtcChhdWRpb19wYXRjaF9oYW5kbGVfdCBteUhhbmRsZSkgY29uc3QKK3sKKyAgICAvLyBUT0RPOiBDb25zaWRlciB0YWJsZSBkdW1wIGZvcm0gZm9yIHBhdGNoZXMsIGp1c3QgbGlrZSB0cmFja3MuCisgICAgU3RyaW5nOCByZXN1bHQgPSBTdHJpbmc4Ojpmb3JtYXQoIlBhdGNoICVkOiB0aHJlYWQgJXAgPT4gdGhyZWFkICVwIiwKKyAgICAgICAgICAgIG15SGFuZGxlLCBtUmVjb3JkLmNvbnN0X3RocmVhZCgpLmdldCgpLCBtUGxheWJhY2suY29uc3RfdGhyZWFkKCkuZ2V0KCkpOworCisgICAgLy8gYWRkIGxhdGVuY3kgaWYgaXQgZXhpc3RzCisgICAgZG91YmxlIGxhdGVuY3lNczsKKyAgICBpZiAoZ2V0TGF0ZW5jeU1zKCZsYXRlbmN5TXMpID09IE9LKSB7CisgICAgICAgIHJlc3VsdC5hcHBlbmRGb3JtYXQoIiAgbGF0ZW5jeTogJS4ybGYgbXMiLCBsYXRlbmN5TXMpOworICAgIH0KKyAgICByZXR1cm4gcmVzdWx0OwogfQogCiAvKiBEaXNjb25uZWN0IGEgcGF0Y2ggKi8KIHN0YXR1c190IEF1ZGlvRmxpbmdlcjo6UGF0Y2hQYW5lbDo6cmVsZWFzZUF1ZGlvUGF0Y2goYXVkaW9fcGF0Y2hfaGFuZGxlX3QgaGFuZGxlKQogewotICAgIEFMT0dWKCJyZWxlYXNlQXVkaW9QYXRjaCBoYW5kbGUgJWQiLCBoYW5kbGUpOworICAgIEFMT0dWKCIlcyBoYW5kbGUgJWQiLCBfX2Z1bmNfXywgaGFuZGxlKTsKICAgICBzdGF0dXNfdCBzdGF0dXMgPSBOT19FUlJPUjsKLSAgICBzaXplX3QgaW5kZXg7CiAKLSAgICBzcDxBdWRpb0ZsaW5nZXI+IGF1ZGlvZmxpbmdlciA9IG1BdWRpb0ZsaW5nZXIucHJvbW90ZSgpOwotICAgIGlmIChhdWRpb2ZsaW5nZXIgPT0gMCkgewotICAgICAgICByZXR1cm4gTk9fSU5JVDsKLSAgICB9Ci0KLSAgICBmb3IgKGluZGV4ID0gMDsgaW5kZXggPCBtUGF0Y2hlcy5zaXplKCk7IGluZGV4KyspIHsKLSAgICAgICAgaWYgKGhhbmRsZSA9PSBtUGF0Y2hlc1tpbmRleF0tPm1IYW5kbGUpIHsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgfQotICAgIGlmIChpbmRleCA9PSBtUGF0Y2hlcy5zaXplKCkpIHsKKyAgICBhdXRvIGl0ZXIgPSBtUGF0Y2hlcy5maW5kKGhhbmRsZSk7CisgICAgaWYgKGl0ZXIgPT0gbVBhdGNoZXMuZW5kKCkpIHsKICAgICAgICAgcmV0dXJuIEJBRF9WQUxVRTsKICAgICB9Ci0gICAgUGF0Y2ggKnJlbW92ZWRQYXRjaCA9IG1QYXRjaGVzW2luZGV4XTsKLSAgICBtUGF0Y2hlcy5yZW1vdmVBdChpbmRleCk7CisgICAgUGF0Y2ggJnJlbW92ZWRQYXRjaCA9IGl0ZXItPnNlY29uZDsKKyAgICBjb25zdCBzdHJ1Y3QgYXVkaW9fcGF0Y2ggJnBhdGNoID0gcmVtb3ZlZFBhdGNoLm1BdWRpb1BhdGNoOwogCi0gICAgc3RydWN0IGF1ZGlvX3BhdGNoICpwYXRjaCA9ICZyZW1vdmVkUGF0Y2gtPm1BdWRpb1BhdGNoOwotCi0gICAgc3dpdGNoIChwYXRjaC0+c291cmNlc1swXS50eXBlKSB7CisgICAgY29uc3Qgc3RydWN0IGF1ZGlvX3BvcnRfY29uZmlnICZzcmMgPSBwYXRjaC5zb3VyY2VzWzBdOworICAgIHN3aXRjaCAoc3JjLnR5cGUpIHsKICAgICAgICAgY2FzZSBBVURJT19QT1JUX1RZUEVfREVWSUNFOiB7Ci0gICAgICAgICAgICBhdWRpb19tb2R1bGVfaGFuZGxlX3Qgc3JjTW9kdWxlID0gcGF0Y2gtPnNvdXJjZXNbMF0uZXh0LmRldmljZS5od19tb2R1bGU7Ci0gICAgICAgICAgICBzc2l6ZV90IGluZGV4ID0gYXVkaW9mbGluZ2VyLT5tQXVkaW9Id0RldnMuaW5kZXhPZktleShzcmNNb2R1bGUpOwotICAgICAgICAgICAgaWYgKGluZGV4IDwgMCkgewotICAgICAgICAgICAgICAgIEFMT0dXKCJyZWxlYXNlQXVkaW9QYXRjaCgpIGJhZCBzcmMgaHcgbW9kdWxlICVkIiwgc3JjTW9kdWxlKTsKKyAgICAgICAgICAgIHNwPERldmljZUhhbEludGVyZmFjZT4gaHdEZXZpY2UgPSBmaW5kSHdEZXZpY2VCeU1vZHVsZShzcmMuZXh0LmRldmljZS5od19tb2R1bGUpOworICAgICAgICAgICAgaWYgKGh3RGV2aWNlID09IDApIHsKKyAgICAgICAgICAgICAgICBBTE9HVygiJXMoKSBiYWQgc3JjIGh3IG1vZHVsZSAlZCIsIF9fZnVuY19fLCBzcmMuZXh0LmRldmljZS5od19tb2R1bGUpOwogICAgICAgICAgICAgICAgIHN0YXR1cyA9IEJBRF9WQUxVRTsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgaWYgKHJlbW92ZWRQYXRjaC0+bVJlY29yZFBhdGNoSGFuZGxlICE9IEFVRElPX1BBVENIX0hBTkRMRV9OT05FIHx8Ci0gICAgICAgICAgICAgICAgICAgIHJlbW92ZWRQYXRjaC0+bVBsYXliYWNrUGF0Y2hIYW5kbGUgIT0gQVVESU9fUEFUQ0hfSEFORExFX05PTkUpIHsKLSAgICAgICAgICAgICAgICBjbGVhclBhdGNoQ29ubmVjdGlvbnMocmVtb3ZlZFBhdGNoKTsKKyAgICAgICAgICAgIGlmIChyZW1vdmVkUGF0Y2guaXNTb2Z0d2FyZSgpKSB7CisgICAgICAgICAgICAgICAgcmVtb3ZlZFBhdGNoLmNsZWFyQ29ubmVjdGlvbnModGhpcyk7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgIGlmIChwYXRjaC0+c2lua3NbMF0udHlwZSA9PSBBVURJT19QT1JUX1RZUEVfTUlYKSB7Ci0gICAgICAgICAgICAgICAgc3A8VGhyZWFkQmFzZT4gdGhyZWFkID0gYXVkaW9mbGluZ2VyLT5jaGVja1JlY29yZFRocmVhZF9sKAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhdGNoLT5zaW5rc1swXS5leHQubWl4LmhhbmRsZSk7CisgICAgICAgICAgICBpZiAocGF0Y2guc2lua3NbMF0udHlwZSA9PSBBVURJT19QT1JUX1RZUEVfTUlYKSB7CisgICAgICAgICAgICAgICAgYXVkaW9faW9faGFuZGxlX3QgaW9IYW5kbGUgPSBwYXRjaC5zaW5rc1swXS5leHQubWl4LmhhbmRsZTsKKyAgICAgICAgICAgICAgICBzcDxUaHJlYWRCYXNlPiB0aHJlYWQgPSBtQXVkaW9GbGluZ2VyLmNoZWNrUmVjb3JkVGhyZWFkX2woaW9IYW5kbGUpOwogICAgICAgICAgICAgICAgIGlmICh0aHJlYWQgPT0gMCkgewotICAgICAgICAgICAgICAgICAgICB0aHJlYWQgPSBhdWRpb2ZsaW5nZXItPmNoZWNrTW1hcFRocmVhZF9sKHBhdGNoLT5zaW5rc1swXS5leHQubWl4LmhhbmRsZSk7CisgICAgICAgICAgICAgICAgICAgIHRocmVhZCA9IG1BdWRpb0ZsaW5nZXIuY2hlY2tNbWFwVGhyZWFkX2woaW9IYW5kbGUpOwogICAgICAgICAgICAgICAgICAgICBpZiAodGhyZWFkID09IDApIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIEFMT0dXKCJyZWxlYXNlQXVkaW9QYXRjaCgpIGJhZCBjYXB0dXJlIEkvTyBoYW5kbGUgJWQiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGF0Y2gtPnNpbmtzWzBdLmV4dC5taXguaGFuZGxlKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIEFMT0dXKCIlcygpIGJhZCBjYXB0dXJlIEkvTyBoYW5kbGUgJWQiLCBfX2Z1bmNfXywgaW9IYW5kbGUpOwogICAgICAgICAgICAgICAgICAgICAgICAgc3RhdHVzID0gQkFEX1ZBTFVFOwogICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgc3RhdHVzID0gdGhyZWFkLT5zZW5kUmVsZWFzZUF1ZGlvUGF0Y2hDb25maWdFdmVudChyZW1vdmVkUGF0Y2gtPm1IYWxIYW5kbGUpOworICAgICAgICAgICAgICAgIHN0YXR1cyA9IHRocmVhZC0+c2VuZFJlbGVhc2VBdWRpb1BhdGNoQ29uZmlnRXZlbnQocmVtb3ZlZFBhdGNoLm1IYWxIYW5kbGUpOwogICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICBBdWRpb0h3RGV2aWNlICphdWRpb0h3RGV2aWNlID0gYXVkaW9mbGluZ2VyLT5tQXVkaW9Id0RldnMudmFsdWVBdChpbmRleCk7Ci0gICAgICAgICAgICAgICAgc3A8RGV2aWNlSGFsSW50ZXJmYWNlPiBod0RldmljZSA9IGF1ZGlvSHdEZXZpY2UtPmh3RGV2aWNlKCk7Ci0gICAgICAgICAgICAgICAgc3RhdHVzID0gaHdEZXZpY2UtPnJlbGVhc2VBdWRpb1BhdGNoKHJlbW92ZWRQYXRjaC0+bUhhbEhhbmRsZSk7CisgICAgICAgICAgICAgICAgc3RhdHVzID0gaHdEZXZpY2UtPnJlbGVhc2VBdWRpb1BhdGNoKHJlbW92ZWRQYXRjaC5tSGFsSGFuZGxlKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfSBicmVhazsKICAgICAgICAgY2FzZSBBVURJT19QT1JUX1RZUEVfTUlYOiB7Ci0gICAgICAgICAgICBhdWRpb19tb2R1bGVfaGFuZGxlX3Qgc3JjTW9kdWxlID0gIHBhdGNoLT5zb3VyY2VzWzBdLmV4dC5taXguaHdfbW9kdWxlOwotICAgICAgICAgICAgc3NpemVfdCBpbmRleCA9IGF1ZGlvZmxpbmdlci0+bUF1ZGlvSHdEZXZzLmluZGV4T2ZLZXkoc3JjTW9kdWxlKTsKLSAgICAgICAgICAgIGlmIChpbmRleCA8IDApIHsKLSAgICAgICAgICAgICAgICBBTE9HVygicmVsZWFzZUF1ZGlvUGF0Y2goKSBiYWQgc3JjIGh3IG1vZHVsZSAlZCIsIHNyY01vZHVsZSk7CisgICAgICAgICAgICBpZiAoZmluZEh3RGV2aWNlQnlNb2R1bGUoc3JjLmV4dC5taXguaHdfbW9kdWxlKSA9PSAwKSB7CisgICAgICAgICAgICAgICAgQUxPR1coIiVzKCkgYmFkIHNyYyBodyBtb2R1bGUgJWQiLCBfX2Z1bmNfXywgc3JjLmV4dC5taXguaHdfbW9kdWxlKTsKICAgICAgICAgICAgICAgICBzdGF0dXMgPSBCQURfVkFMVUU7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBzcDxUaHJlYWRCYXNlPiB0aHJlYWQgPQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF1ZGlvZmxpbmdlci0+Y2hlY2tQbGF5YmFja1RocmVhZF9sKHBhdGNoLT5zb3VyY2VzWzBdLmV4dC5taXguaGFuZGxlKTsKKyAgICAgICAgICAgIGF1ZGlvX2lvX2hhbmRsZV90IGlvSGFuZGxlID0gc3JjLmV4dC5taXguaGFuZGxlOworICAgICAgICAgICAgc3A8VGhyZWFkQmFzZT4gdGhyZWFkID0gbUF1ZGlvRmxpbmdlci5jaGVja1BsYXliYWNrVGhyZWFkX2woaW9IYW5kbGUpOwogICAgICAgICAgICAgaWYgKHRocmVhZCA9PSAwKSB7Ci0gICAgICAgICAgICAgICAgdGhyZWFkID0gYXVkaW9mbGluZ2VyLT5jaGVja01tYXBUaHJlYWRfbChwYXRjaC0+c291cmNlc1swXS5leHQubWl4LmhhbmRsZSk7CisgICAgICAgICAgICAgICAgdGhyZWFkID0gbUF1ZGlvRmxpbmdlci5jaGVja01tYXBUaHJlYWRfbChpb0hhbmRsZSk7CiAgICAgICAgICAgICAgICAgaWYgKHRocmVhZCA9PSAwKSB7Ci0gICAgICAgICAgICAgICAgICAgIEFMT0dXKCJyZWxlYXNlQXVkaW9QYXRjaCgpIGJhZCBwbGF5YmFjayBJL08gaGFuZGxlICVkIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhdGNoLT5zb3VyY2VzWzBdLmV4dC5taXguaGFuZGxlKTsKKyAgICAgICAgICAgICAgICAgICAgQUxPR1coIiVzKCkgYmFkIHBsYXliYWNrIEkvTyBoYW5kbGUgJWQiLCBfX2Z1bmNfXywgaW9IYW5kbGUpOwogICAgICAgICAgICAgICAgICAgICBzdGF0dXMgPSBCQURfVkFMVUU7CiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHN0YXR1cyA9IHRocmVhZC0+c2VuZFJlbGVhc2VBdWRpb1BhdGNoQ29uZmlnRXZlbnQocmVtb3ZlZFBhdGNoLT5tSGFsSGFuZGxlKTsKKyAgICAgICAgICAgIHN0YXR1cyA9IHRocmVhZC0+c2VuZFJlbGVhc2VBdWRpb1BhdGNoQ29uZmlnRXZlbnQocmVtb3ZlZFBhdGNoLm1IYWxIYW5kbGUpOwogICAgICAgICB9IGJyZWFrOwogICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgc3RhdHVzID0gQkFEX1ZBTFVFOwotICAgICAgICAgICAgYnJlYWs7CiAgICAgfQogCi0gICAgZGVsZXRlIHJlbW92ZWRQYXRjaDsKKyAgICBtUGF0Y2hlcy5lcmFzZShpdGVyKTsKKyAgICByZW1vdmVTb2Z0d2FyZVBhdGNoRnJvbUluc2VydGVkTW9kdWxlcyhoYW5kbGUpOwogICAgIHJldHVybiBzdGF0dXM7CiB9CiAKLQogLyogTGlzdCBjb25uZWN0ZWQgYXVkaW8gcG9ydHMgYW5kIHRoZXkgYXR0cmlidXRlcyAqLwogc3RhdHVzX3QgQXVkaW9GbGluZ2VyOjpQYXRjaFBhbmVsOjpsaXN0QXVkaW9QYXRjaGVzKHVuc2lnbmVkIGludCAqbnVtX3BhdGNoZXMgX191bnVzZWQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGF1ZGlvX3BhdGNoICpwYXRjaGVzIF9fdW51c2VkKQogewotICAgIEFMT0dWKCJsaXN0QXVkaW9QYXRjaGVzIik7CisgICAgQUxPR1YoX19mdW5jX18pOwogICAgIHJldHVybiBOT19FUlJPUjsKIH0KIAotLyogU2V0IGF1ZGlvIHBvcnQgY29uZmlndXJhdGlvbiAqLwotc3RhdHVzX3QgQXVkaW9GbGluZ2VyOjpQYXRjaFBhbmVsOjpzZXRBdWRpb1BvcnRDb25maWcoY29uc3Qgc3RydWN0IGF1ZGlvX3BvcnRfY29uZmlnICpjb25maWcpCitzdGF0dXNfdCBBdWRpb0ZsaW5nZXI6OlBhdGNoUGFuZWw6OmdldERvd25zdHJlYW1Tb2Z0d2FyZVBhdGNoZXMoCisgICAgICAgIGF1ZGlvX2lvX2hhbmRsZV90IHN0cmVhbSwKKyAgICAgICAgc3RkOjp2ZWN0b3I8QXVkaW9GbGluZ2VyOjpQYXRjaFBhbmVsOjpTb2Z0d2FyZVBhdGNoPiAqcGF0Y2hlcykgY29uc3QKIHsKLSAgICBBTE9HVigic2V0QXVkaW9Qb3J0Q29uZmlnIik7Ci0KLSAgICBzcDxBdWRpb0ZsaW5nZXI+IGF1ZGlvZmxpbmdlciA9IG1BdWRpb0ZsaW5nZXIucHJvbW90ZSgpOwotICAgIGlmIChhdWRpb2ZsaW5nZXIgPT0gMCkgewotICAgICAgICByZXR1cm4gTk9fSU5JVDsKKyAgICBmb3IgKGNvbnN0IGF1dG8mIG1vZHVsZSA6IG1JbnNlcnRlZE1vZHVsZXMpIHsKKyAgICAgICAgaWYgKG1vZHVsZS5zZWNvbmQuc3RyZWFtcy5jb3VudChzdHJlYW0pKSB7CisgICAgICAgICAgICBmb3IgKGNvbnN0IGF1dG8mIHBhdGNoSGFuZGxlIDogbW9kdWxlLnNlY29uZC5zd19wYXRjaGVzKSB7CisgICAgICAgICAgICAgICAgY29uc3QgYXV0byYgcGF0Y2hfaXRlciA9IG1QYXRjaGVzLmZpbmQocGF0Y2hIYW5kbGUpOworICAgICAgICAgICAgICAgIGlmIChwYXRjaF9pdGVyICE9IG1QYXRjaGVzLmVuZCgpKSB7CisgICAgICAgICAgICAgICAgICAgIGNvbnN0IFBhdGNoICZwYXRjaCA9IHBhdGNoX2l0ZXItPnNlY29uZDsKKyAgICAgICAgICAgICAgICAgICAgcGF0Y2hlcy0+ZW1wbGFjZV9iYWNrKCp0aGlzLCBwYXRjaEhhbmRsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXRjaC5tUGxheWJhY2suY29uc3RfdGhyZWFkKCktPmlkKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGF0Y2gubVJlY29yZC5jb25zdF90aHJlYWQoKS0+aWQoKSk7CisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgQUxPR0UoIlN0YWxlIHBhdGNoIGhhbmRsZSBpbiB0aGUgY2FjaGU6ICVkIiwgcGF0Y2hIYW5kbGUpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJldHVybiBPSzsKKyAgICAgICAgfQogICAgIH0KKyAgICAvLyBUaGUgc3RyZWFtIGlzIG5vdCBhc3NvY2lhdGVkIHdpdGggYW55IG9mIGluc2VydGVkIG1vZHVsZXMuCisgICAgcmV0dXJuIEJBRF9WQUxVRTsKK30KIAotICAgIGF1ZGlvX21vZHVsZV9oYW5kbGVfdCBtb2R1bGU7Ci0gICAgaWYgKGNvbmZpZy0+dHlwZSA9PSBBVURJT19QT1JUX1RZUEVfREVWSUNFKSB7Ci0gICAgICAgIG1vZHVsZSA9IGNvbmZpZy0+ZXh0LmRldmljZS5od19tb2R1bGU7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgbW9kdWxlID0gY29uZmlnLT5leHQubWl4Lmh3X21vZHVsZTsKK3ZvaWQgQXVkaW9GbGluZ2VyOjpQYXRjaFBhbmVsOjpub3RpZnlTdHJlYW1PcGVuZWQoCisgICAgICAgIEF1ZGlvSHdEZXZpY2UgKmF1ZGlvSHdEZXZpY2UsIGF1ZGlvX2lvX2hhbmRsZV90IHN0cmVhbSkKK3sKKyAgICBpZiAoYXVkaW9Id0RldmljZS0+aXNJbnNlcnQoKSkgeworICAgICAgICBtSW5zZXJ0ZWRNb2R1bGVzW2F1ZGlvSHdEZXZpY2UtPmhhbmRsZSgpXS5zdHJlYW1zLmluc2VydChzdHJlYW0pOwogICAgIH0KK30KIAotICAgIHNzaXplX3QgaW5kZXggPSBhdWRpb2ZsaW5nZXItPm1BdWRpb0h3RGV2cy5pbmRleE9mS2V5KG1vZHVsZSk7Cit2b2lkIEF1ZGlvRmxpbmdlcjo6UGF0Y2hQYW5lbDo6bm90aWZ5U3RyZWFtQ2xvc2VkKGF1ZGlvX2lvX2hhbmRsZV90IHN0cmVhbSkKK3sKKyAgICBmb3IgKGF1dG8mIG1vZHVsZSA6IG1JbnNlcnRlZE1vZHVsZXMpIHsKKyAgICAgICAgbW9kdWxlLnNlY29uZC5zdHJlYW1zLmVyYXNlKHN0cmVhbSk7CisgICAgfQorfQorCitBdWRpb0h3RGV2aWNlKiBBdWRpb0ZsaW5nZXI6OlBhdGNoUGFuZWw6OmZpbmRBdWRpb0h3RGV2aWNlQnlNb2R1bGUoYXVkaW9fbW9kdWxlX2hhbmRsZV90IG1vZHVsZSkKK3sKKyAgICBpZiAobW9kdWxlID09IEFVRElPX01PRFVMRV9IQU5ETEVfTk9ORSkgcmV0dXJuIG51bGxwdHI7CisgICAgc3NpemVfdCBpbmRleCA9IG1BdWRpb0ZsaW5nZXIubUF1ZGlvSHdEZXZzLmluZGV4T2ZLZXkobW9kdWxlKTsKICAgICBpZiAoaW5kZXggPCAwKSB7Ci0gICAgICAgIEFMT0dXKCJzZXRBdWRpb1BvcnRDb25maWcoKSBiYWQgaHcgbW9kdWxlICVkIiwgbW9kdWxlKTsKLSAgICAgICAgcmV0dXJuIEJBRF9WQUxVRTsKKyAgICAgICAgQUxPR1coIiVzKCkgYmFkIGh3IG1vZHVsZSAlZCIsIF9fZnVuY19fLCBtb2R1bGUpOworICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICB9CisgICAgcmV0dXJuIG1BdWRpb0ZsaW5nZXIubUF1ZGlvSHdEZXZzLnZhbHVlQXQoaW5kZXgpOworfQorCitzcDxEZXZpY2VIYWxJbnRlcmZhY2U+IEF1ZGlvRmxpbmdlcjo6UGF0Y2hQYW5lbDo6ZmluZEh3RGV2aWNlQnlNb2R1bGUoYXVkaW9fbW9kdWxlX2hhbmRsZV90IG1vZHVsZSkKK3sKKyAgICBBdWRpb0h3RGV2aWNlICphdWRpb0h3RGV2aWNlID0gZmluZEF1ZGlvSHdEZXZpY2VCeU1vZHVsZShtb2R1bGUpOworICAgIHJldHVybiBhdWRpb0h3RGV2aWNlID8gYXVkaW9Id0RldmljZS0+aHdEZXZpY2UoKSA6IG51bGxwdHI7Cit9CisKK3ZvaWQgQXVkaW9GbGluZ2VyOjpQYXRjaFBhbmVsOjphZGRTb2Z0d2FyZVBhdGNoVG9JbnNlcnRlZE1vZHVsZXMoCisgICAgICAgIGF1ZGlvX21vZHVsZV9oYW5kbGVfdCBtb2R1bGUsIGF1ZGlvX3BhdGNoX2hhbmRsZV90IGhhbmRsZSkKK3sKKyAgICBtSW5zZXJ0ZWRNb2R1bGVzW21vZHVsZV0uc3dfcGF0Y2hlcy5pbnNlcnQoaGFuZGxlKTsKK30KKwordm9pZCBBdWRpb0ZsaW5nZXI6OlBhdGNoUGFuZWw6OnJlbW92ZVNvZnR3YXJlUGF0Y2hGcm9tSW5zZXJ0ZWRNb2R1bGVzKAorICAgICAgICBhdWRpb19wYXRjaF9oYW5kbGVfdCBoYW5kbGUpCit7CisgICAgZm9yIChhdXRvJiBtb2R1bGUgOiBtSW5zZXJ0ZWRNb2R1bGVzKSB7CisgICAgICAgIG1vZHVsZS5zZWNvbmQuc3dfcGF0Y2hlcy5lcmFzZShoYW5kbGUpOworICAgIH0KK30KKwordm9pZCBBdWRpb0ZsaW5nZXI6OlBhdGNoUGFuZWw6OmR1bXAoaW50IGZkKSBjb25zdAoreworICAgIFN0cmluZzggcGF0Y2hQYW5lbER1bXA7CisgICAgY29uc3QgY2hhciAqaW5kZW50ID0gIiAgIjsKKworICAgIC8vIE9ubHkgZHVtcCBzb2Z0d2FyZSBwYXRjaGVzLgorICAgIGJvb2wgaGVhZGVyUHJpbnRlZCA9IGZhbHNlOworICAgIGZvciAoY29uc3QgYXV0byYgaXRlciA6IG1QYXRjaGVzKSB7CisgICAgICAgIGlmIChpdGVyLnNlY29uZC5pc1NvZnR3YXJlKCkpIHsKKyAgICAgICAgICAgIGlmICghaGVhZGVyUHJpbnRlZCkgeworICAgICAgICAgICAgICAgIHBhdGNoUGFuZWxEdW1wICs9ICJcblNvZnR3YXJlIHBhdGNoZXM6XG4iOworICAgICAgICAgICAgICAgIGhlYWRlclByaW50ZWQgPSB0cnVlOworICAgICAgICAgICAgfQorICAgICAgICAgICAgcGF0Y2hQYW5lbER1bXAuYXBwZW5kRm9ybWF0KCIlcyVzXG4iLCBpbmRlbnQsIGl0ZXIuc2Vjb25kLmR1bXAoaXRlci5maXJzdCkuc3RyaW5nKCkpOworICAgICAgICB9CiAgICAgfQogCi0gICAgQXVkaW9Id0RldmljZSAqYXVkaW9Id0RldmljZSA9IGF1ZGlvZmxpbmdlci0+bUF1ZGlvSHdEZXZzLnZhbHVlQXQoaW5kZXgpOwotICAgIHJldHVybiBhdWRpb0h3RGV2aWNlLT5od0RldmljZSgpLT5zZXRBdWRpb1BvcnRDb25maWcoY29uZmlnKTsKKyAgICBoZWFkZXJQcmludGVkID0gZmFsc2U7CisgICAgZm9yIChjb25zdCBhdXRvJiBtb2R1bGUgOiBtSW5zZXJ0ZWRNb2R1bGVzKSB7CisgICAgICAgIGlmICghbW9kdWxlLnNlY29uZC5zdHJlYW1zLmVtcHR5KCkgfHwgIW1vZHVsZS5zZWNvbmQuc3dfcGF0Y2hlcy5lbXB0eSgpKSB7CisgICAgICAgICAgICBpZiAoIWhlYWRlclByaW50ZWQpIHsKKyAgICAgICAgICAgICAgICBwYXRjaFBhbmVsRHVtcCArPSAiXG5UcmFja2VkIGluc2VydGVkIG1vZHVsZXM6XG4iOworICAgICAgICAgICAgICAgIGhlYWRlclByaW50ZWQgPSB0cnVlOworICAgICAgICAgICAgfQorICAgICAgICAgICAgU3RyaW5nOCBtb2R1bGVEdW1wID0gU3RyaW5nODo6Zm9ybWF0KCJNb2R1bGUgJWQ6IEkvTyBoYW5kbGVzOiAiLCBtb2R1bGUuZmlyc3QpOworICAgICAgICAgICAgZm9yIChjb25zdCBhdXRvJiBzdHJlYW0gOiBtb2R1bGUuc2Vjb25kLnN0cmVhbXMpIHsKKyAgICAgICAgICAgICAgICBtb2R1bGVEdW1wLmFwcGVuZEZvcm1hdCgiJWQgIiwgc3RyZWFtKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIG1vZHVsZUR1bXAuYXBwZW5kKCI7IFNXIFBhdGNoZXM6ICIpOworICAgICAgICAgICAgZm9yIChjb25zdCBhdXRvJiBwYXRjaCA6IG1vZHVsZS5zZWNvbmQuc3dfcGF0Y2hlcykgeworICAgICAgICAgICAgICAgIG1vZHVsZUR1bXAuYXBwZW5kRm9ybWF0KCIlZCAiLCBwYXRjaCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBwYXRjaFBhbmVsRHVtcC5hcHBlbmRGb3JtYXQoIiVzJXNcbiIsIGluZGVudCwgbW9kdWxlRHVtcC5zdHJpbmcoKSk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBpZiAoIXBhdGNoUGFuZWxEdW1wLmlzRW1wdHkoKSkgeworICAgICAgICB3cml0ZShmZCwgcGF0Y2hQYW5lbER1bXAuc3RyaW5nKCksIHBhdGNoUGFuZWxEdW1wLnNpemUoKSk7CisgICAgfQogfQogCiB9IC8vIG5hbWVzcGFjZSBhbmRyb2lkCmRpZmYgLS1naXQgYS9zZXJ2aWNlcy9hdWRpb2ZsaW5nZXIvUGF0Y2hQYW5lbC5oIGIvc2VydmljZXMvYXVkaW9mbGluZ2VyL1BhdGNoUGFuZWwuaAppbmRleCBkMzdjMGQzLi4yZDliZDhlIDEwMDY0NAotLS0gYS9zZXJ2aWNlcy9hdWRpb2ZsaW5nZXIvUGF0Y2hQYW5lbC5oCisrKyBiL3NlcnZpY2VzL2F1ZGlvZmxpbmdlci9QYXRjaFBhbmVsLmgKQEAgLTE5LDEzICsxOSwzMyBAQAogICAgICNlcnJvciBUaGlzIGhlYWRlciBmaWxlIHNob3VsZCBvbmx5IGJlIGluY2x1ZGVkIGZyb20gQXVkaW9GbGluZ2VyLmgKICNlbmRpZgogCi1jbGFzcyBQYXRjaFBhbmVsIDogcHVibGljIFJlZkJhc2UgeworCisvLyBQYXRjaFBhbmVsIGlzIGNvbmNlYWxlZCB3aXRoaW4gQXVkaW9GbGluZ2VyLCB0aGVpciBsaWZldGltZXMgYXJlIHRoZSBzYW1lLgorY2xhc3MgUGF0Y2hQYW5lbCB7CiBwdWJsaWM6CisgICAgY2xhc3MgU29mdHdhcmVQYXRjaCB7CisgICAgICBwdWJsaWM6CisgICAgICAgIFNvZnR3YXJlUGF0Y2goY29uc3QgUGF0Y2hQYW5lbCAmcGF0Y2hQYW5lbCwgYXVkaW9fcGF0Y2hfaGFuZGxlX3QgcGF0Y2hIYW5kbGUsCisgICAgICAgICAgICAgICAgYXVkaW9faW9faGFuZGxlX3QgcGxheWJhY2tUaHJlYWRIYW5kbGUsIGF1ZGlvX2lvX2hhbmRsZV90IHJlY29yZFRocmVhZEhhbmRsZSkKKyAgICAgICAgICAgICAgICA6IG1QYXRjaFBhbmVsKHBhdGNoUGFuZWwpLCBtUGF0Y2hIYW5kbGUocGF0Y2hIYW5kbGUpLAorICAgICAgICAgICAgICAgICAgbVBsYXliYWNrVGhyZWFkSGFuZGxlKHBsYXliYWNrVGhyZWFkSGFuZGxlKSwKKyAgICAgICAgICAgICAgICAgIG1SZWNvcmRUaHJlYWRIYW5kbGUocmVjb3JkVGhyZWFkSGFuZGxlKSB7fQorICAgICAgICBTb2Z0d2FyZVBhdGNoKGNvbnN0IFNvZnR3YXJlUGF0Y2gmKSA9IGRlZmF1bHQ7CisgICAgICAgIFNvZnR3YXJlUGF0Y2gmIG9wZXJhdG9yPShjb25zdCBTb2Z0d2FyZVBhdGNoJikgPSBkZWZhdWx0OwogCi0gICAgY2xhc3MgUGF0Y2g7CisgICAgICAgIC8vIE11c3QgYmUgY2FsbGVkIHVuZGVyIEF1ZGlvRmxpbmdlcjo6bUxvY2sKKyAgICAgICAgc3RhdHVzX3QgZ2V0TGF0ZW5jeU1zX2woZG91YmxlICpsYXRlbmN5TXMpIGNvbnN0OworICAgICAgICBhdWRpb19wYXRjaF9oYW5kbGVfdCBnZXRQYXRjaEhhbmRsZSgpIGNvbnN0IHsgcmV0dXJuIG1QYXRjaEhhbmRsZTsgfTsKKyAgICAgICAgYXVkaW9faW9faGFuZGxlX3QgZ2V0UGxheWJhY2tUaHJlYWRIYW5kbGUoKSBjb25zdCB7IHJldHVybiBtUGxheWJhY2tUaHJlYWRIYW5kbGU7IH07CisgICAgICAgIGF1ZGlvX2lvX2hhbmRsZV90IGdldFJlY29yZFRocmVhZEhhbmRsZSgpIGNvbnN0IHsgcmV0dXJuIG1SZWNvcmRUaHJlYWRIYW5kbGU7IH07CisgICAgICBwcml2YXRlOgorICAgICAgICBjb25zdCBQYXRjaFBhbmVsICZtUGF0Y2hQYW5lbDsKKyAgICAgICAgY29uc3QgYXVkaW9fcGF0Y2hfaGFuZGxlX3QgbVBhdGNoSGFuZGxlOworICAgICAgICBjb25zdCBhdWRpb19pb19oYW5kbGVfdCBtUGxheWJhY2tUaHJlYWRIYW5kbGU7CisgICAgICAgIGNvbnN0IGF1ZGlvX2lvX2hhbmRsZV90IG1SZWNvcmRUaHJlYWRIYW5kbGU7CisgICAgfTsKIAotICAgIGV4cGxpY2l0IFBhdGNoUGFuZWwoY29uc3Qgc3A8QXVkaW9GbGluZ2VyPiYgYXVkaW9GbGluZ2VyKTsKLSAgICB2aXJ0dWFsIH5QYXRjaFBhbmVsKCk7CisgICAgZXhwbGljaXQgUGF0Y2hQYW5lbChBdWRpb0ZsaW5nZXIqIGF1ZGlvRmxpbmdlcikgOiBtQXVkaW9GbGluZ2VyKCphdWRpb0ZsaW5nZXIpIHt9CiAKICAgICAvKiBMaXN0IGNvbm5lY3RlZCBhdWRpbyBwb3J0cyBhbmQgdGhlaXIgYXR0cmlidXRlcyAqLwogICAgIHN0YXR1c190IGxpc3RBdWRpb1BvcnRzKHVuc2lnbmVkIGludCAqbnVtX3BvcnRzLApAQCAtNDUsNDYgKzY1LDE0NCBAQAogICAgIHN0YXR1c190IGxpc3RBdWRpb1BhdGNoZXModW5zaWduZWQgaW50ICpudW1fcGF0Y2hlcywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGF1ZGlvX3BhdGNoICpwYXRjaGVzKTsKIAotICAgIC8qIFNldCBhdWRpbyBwb3J0IGNvbmZpZ3VyYXRpb24gKi8KLSAgICBzdGF0dXNfdCBzZXRBdWRpb1BvcnRDb25maWcoY29uc3Qgc3RydWN0IGF1ZGlvX3BvcnRfY29uZmlnICpjb25maWcpOworICAgIC8vIFJldHJpZXZlcyBhbGwgY3VycmVudGx5IGVzdHJhYmxpc2hlZCBzb2Z0d2FyZSBwYXRjaGVzIGZvciBhIHN0cmVhbQorICAgIC8vIG9wZW5lZCBvbiBhbiBpbnRlcm1lZGlhdGUgbW9kdWxlLgorICAgIHN0YXR1c190IGdldERvd25zdHJlYW1Tb2Z0d2FyZVBhdGNoZXMoYXVkaW9faW9faGFuZGxlX3Qgc3RyZWFtLAorICAgICAgICAgICAgc3RkOjp2ZWN0b3I8U29mdHdhcmVQYXRjaD4gKnBhdGNoZXMpIGNvbnN0OwogCi0gICAgc3RhdHVzX3QgY3JlYXRlUGF0Y2hDb25uZWN0aW9ucyhQYXRjaCAqcGF0Y2gsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdHJ1Y3QgYXVkaW9fcGF0Y2ggKmF1ZGlvUGF0Y2gpOwotICAgIHZvaWQgY2xlYXJQYXRjaENvbm5lY3Rpb25zKFBhdGNoICpwYXRjaCk7CisgICAgLy8gTm90aWZpZXMgcGF0Y2ggcGFuZWwgYWJvdXQgYWxsIG9wZW5lZCBhbmQgY2xvc2VkIHN0cmVhbXMuCisgICAgdm9pZCBub3RpZnlTdHJlYW1PcGVuZWQoQXVkaW9Id0RldmljZSAqYXVkaW9Id0RldmljZSwgYXVkaW9faW9faGFuZGxlX3Qgc3RyZWFtKTsKKyAgICB2b2lkIG5vdGlmeVN0cmVhbUNsb3NlZChhdWRpb19pb19oYW5kbGVfdCBzdHJlYW0pOworCisgICAgdm9pZCBkdW1wKGludCBmZCkgY29uc3Q7CisKK3ByaXZhdGU6CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVGhyZWFkVHlwZSwgdHlwZW5hbWUgVHJhY2tUeXBlPgorICAgIGNsYXNzIEVuZHBvaW50IHsKKyAgICBwdWJsaWM6CisgICAgICAgIEVuZHBvaW50KCkgPSBkZWZhdWx0OworICAgICAgICBFbmRwb2ludChFbmRwb2ludCYmIG90aGVyKSB7ICp0aGlzID0gc3RkOjptb3ZlKG90aGVyKTsgfQorICAgICAgICBFbmRwb2ludCYgb3BlcmF0b3I9KEVuZHBvaW50JiYgb3RoZXIpIHsKKyAgICAgICAgICAgIEFMT0dFX0lGKG1IYW5kbGUgIT0gQVVESU9fUEFUQ0hfSEFORExFX05PTkUsCisgICAgICAgICAgICAgICAgICAgICJBIG5vbiBlbXB0eSBQYXRjaCBFbmRwb2ludCBsZWFrZWQsIGhhbmRsZSAlZCIsIG1IYW5kbGUpOworICAgICAgICAgICAgKnRoaXMgPSBvdGhlcjsKKyAgICAgICAgICAgIG90aGVyLm1IYW5kbGUgPSBBVURJT19QQVRDSF9IQU5ETEVfTk9ORTsKKyAgICAgICAgICAgIHJldHVybiAqdGhpczsKKyAgICAgICAgfQorCisgICAgICAgIHN0YXR1c190IGNoZWNrVHJhY2soVHJhY2tUeXBlICp0cmFja09yTnVsbCkgY29uc3QgeworICAgICAgICAgICAgaWYgKHRyYWNrT3JOdWxsID09IG51bGxwdHIpIHJldHVybiBOT19NRU1PUlk7CisgICAgICAgICAgICByZXR1cm4gdHJhY2tPck51bGwtPmluaXRDaGVjaygpOworICAgICAgICB9CisgICAgICAgIGF1ZGlvX3BhdGNoX2hhbmRsZV90IGhhbmRsZSgpIGNvbnN0IHsgcmV0dXJuIG1IYW5kbGU7IH0KKyAgICAgICAgc3A8VGhyZWFkVHlwZT4gdGhyZWFkKCkgeyByZXR1cm4gbVRocmVhZDsgfQorICAgICAgICBzcDxUcmFja1R5cGU+IHRyYWNrKCkgeyByZXR1cm4gbVRyYWNrOyB9CisgICAgICAgIHNwPGNvbnN0IFRocmVhZFR5cGU+IGNvbnN0X3RocmVhZCgpIGNvbnN0IHsgcmV0dXJuIG1UaHJlYWQ7IH0KKyAgICAgICAgc3A8Y29uc3QgVHJhY2tUeXBlPiBjb25zdF90cmFjaygpIGNvbnN0IHsgcmV0dXJuIG1UcmFjazsgfQorCisgICAgICAgIHZvaWQgY2xvc2VDb25uZWN0aW9ucyhQYXRjaFBhbmVsICpwYW5lbCkgeworICAgICAgICAgICAgaWYgKG1IYW5kbGUgIT0gQVVESU9fUEFUQ0hfSEFORExFX05PTkUpIHsKKyAgICAgICAgICAgICAgICBwYW5lbC0+cmVsZWFzZUF1ZGlvUGF0Y2gobUhhbmRsZSk7CisgICAgICAgICAgICAgICAgbUhhbmRsZSA9IEFVRElPX1BBVENIX0hBTkRMRV9OT05FOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKG1UaHJlYWQgIT0gMCkgeworICAgICAgICAgICAgICAgIGlmIChtVHJhY2sgIT0gMCkgeworICAgICAgICAgICAgICAgICAgICBtVGhyZWFkLT5kZWxldGVQYXRjaFRyYWNrKG1UcmFjayk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGlmIChtQ2xvc2VUaHJlYWQpIHsKKyAgICAgICAgICAgICAgICAgICAgcGFuZWwtPm1BdWRpb0ZsaW5nZXIuY2xvc2VUaHJlYWRJbnRlcm5hbF9sKG1UaHJlYWQpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBhdWRpb19wYXRjaF9oYW5kbGVfdCogaGFuZGxlUHRyKCkgeyByZXR1cm4gJm1IYW5kbGU7IH0KKyAgICAgICAgdm9pZCBzZXRUaHJlYWQoY29uc3Qgc3A8VGhyZWFkVHlwZT4mIHRocmVhZCwgYm9vbCBjbG9zZVRocmVhZCA9IHRydWUpIHsKKyAgICAgICAgICAgIG1UaHJlYWQgPSB0aHJlYWQ7CisgICAgICAgICAgICBtQ2xvc2VUaHJlYWQgPSBjbG9zZVRocmVhZDsKKyAgICAgICAgfQorICAgICAgICB2b2lkIHNldFRyYWNrQW5kUGVlcihjb25zdCBzcDxUcmFja1R5cGU+JiB0cmFjaywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhyZWFkQmFzZTo6UGF0Y2hQcm94eUJ1ZmZlclByb3ZpZGVyICpwZWVyKSB7CisgICAgICAgICAgICBtVHJhY2sgPSB0cmFjazsKKyAgICAgICAgICAgIG1UaHJlYWQtPmFkZFBhdGNoVHJhY2sobVRyYWNrKTsKKyAgICAgICAgICAgIG1UcmFjay0+c2V0UGVlclByb3h5KHBlZXIpOworICAgICAgICB9CisgICAgICAgIHZvaWQgc3RvcFRyYWNrKCkgeyBpZiAobVRyYWNrKSBtVHJhY2stPnN0b3AoKTsgfQorCisgICAgcHJpdmF0ZToKKyAgICAgICAgRW5kcG9pbnQoY29uc3QgRW5kcG9pbnQmKSA9IGRlZmF1bHQ7CisgICAgICAgIEVuZHBvaW50JiBvcGVyYXRvcj0oY29uc3QgRW5kcG9pbnQmKSA9IGRlZmF1bHQ7CisKKyAgICAgICAgc3A8VGhyZWFkVHlwZT4gbVRocmVhZDsKKyAgICAgICAgYm9vbCBtQ2xvc2VUaHJlYWQgPSB0cnVlOworICAgICAgICBhdWRpb19wYXRjaF9oYW5kbGVfdCBtSGFuZGxlID0gQVVESU9fUEFUQ0hfSEFORExFX05PTkU7CisgICAgICAgIHNwPFRyYWNrVHlwZT4gbVRyYWNrOworICAgIH07CiAKICAgICBjbGFzcyBQYXRjaCB7CiAgICAgcHVibGljOgotICAgICAgICBleHBsaWNpdCBQYXRjaChjb25zdCBzdHJ1Y3QgYXVkaW9fcGF0Y2ggKnBhdGNoKSA6Ci0gICAgICAgICAgICBtQXVkaW9QYXRjaCgqcGF0Y2gpLCBtSGFuZGxlKEFVRElPX1BBVENIX0hBTkRMRV9OT05FKSwKLSAgICAgICAgICAgIG1IYWxIYW5kbGUoQVVESU9fUEFUQ0hfSEFORExFX05PTkUpLCBtUmVjb3JkUGF0Y2hIYW5kbGUoQVVESU9fUEFUQ0hfSEFORExFX05PTkUpLAotICAgICAgICAgICAgbVBsYXliYWNrUGF0Y2hIYW5kbGUoQVVESU9fUEFUQ0hfSEFORExFX05PTkUpIHt9Ci0gICAgICAgIH5QYXRjaCgpIHt9CisgICAgICAgIGV4cGxpY2l0IFBhdGNoKGNvbnN0IHN0cnVjdCBhdWRpb19wYXRjaCAmcGF0Y2gpIDogbUF1ZGlvUGF0Y2gocGF0Y2gpIHt9CisgICAgICAgIH5QYXRjaCgpOworICAgICAgICBQYXRjaChjb25zdCBQYXRjaCYpID0gZGVsZXRlOworICAgICAgICBQYXRjaChQYXRjaCYmKSA9IGRlZmF1bHQ7CisgICAgICAgIFBhdGNoJiBvcGVyYXRvcj0oY29uc3QgUGF0Y2gmKSA9IGRlbGV0ZTsKKyAgICAgICAgUGF0Y2gmIG9wZXJhdG9yPShQYXRjaCYmKSA9IGRlZmF1bHQ7CiAKKyAgICAgICAgc3RhdHVzX3QgY3JlYXRlQ29ubmVjdGlvbnMoUGF0Y2hQYW5lbCAqcGFuZWwpOworICAgICAgICB2b2lkIGNsZWFyQ29ubmVjdGlvbnMoUGF0Y2hQYW5lbCAqcGFuZWwpOworICAgICAgICBib29sIGlzU29mdHdhcmUoKSBjb25zdCB7CisgICAgICAgICAgICByZXR1cm4gbVJlY29yZC5oYW5kbGUoKSAhPSBBVURJT19QQVRDSF9IQU5ETEVfTk9ORSB8fAorICAgICAgICAgICAgICAgICAgICBtUGxheWJhY2suaGFuZGxlKCkgIT0gQVVESU9fUEFUQ0hfSEFORExFX05PTkU7IH0KKworICAgICAgICAvLyByZXR1cm5zIHRoZSBsYXRlbmN5IG9mIHRoZSBwYXRjaCAoZnJvbSByZWNvcmQgdG8gcGxheWJhY2spLgorICAgICAgICBzdGF0dXNfdCBnZXRMYXRlbmN5TXMoZG91YmxlICpsYXRlbmN5TXMpIGNvbnN0OworCisgICAgICAgIFN0cmluZzggZHVtcChhdWRpb19wYXRjaF9oYW5kbGVfdCBteUhhbmRsZSkgY29uc3Q7CisKKyAgICAgICAgLy8gTm90ZSB0aGF0IGF1ZGlvX3BhdGNoOjppZCBpcyBvbmx5IHVuaXF1ZSB3aXRoaW4gYSBIQUwgbW9kdWxlCiAgICAgICAgIHN0cnVjdCBhdWRpb19wYXRjaCAgICAgICAgICAgICAgbUF1ZGlvUGF0Y2g7Ci0gICAgICAgIGF1ZGlvX3BhdGNoX2hhbmRsZV90ICAgICAgICAgICAgbUhhbmRsZTsKICAgICAgICAgLy8gaGFuZGxlIGZvciBhdWRpbyBIQUwgcGF0Y2ggaGFuZGxlIHByZXNlbnQgb25seSB3aGVuIHRoZSBhdWRpbyBIQUwgdmVyc2lvbiBpcyA+PSAzLjAKLSAgICAgICAgYXVkaW9fcGF0Y2hfaGFuZGxlX3QgICAgICAgICAgICBtSGFsSGFuZGxlOworICAgICAgICBhdWRpb19wYXRjaF9oYW5kbGVfdCAgICAgICAgICAgIG1IYWxIYW5kbGUgPSBBVURJT19QQVRDSF9IQU5ETEVfTk9ORTsKICAgICAgICAgLy8gYmVsb3cgbWVtYmVycyBhcmUgdXNlZCBieSBhIHNvZnR3YXJlIGF1ZGlvIHBhdGNoIGNvbm5lY3RpbmcgYSBzb3VyY2UgZGV2aWNlIGZyb20gYQogICAgICAgICAvLyBnaXZlbiBhdWRpbyBIVyBtb2R1bGUgdG8gYSBzaW5rIGRldmljZSBvbiBhbiBvdGhlciBhdWRpbyBIVyBtb2R1bGUuCi0gICAgICAgIC8vIHBsYXliYWNrIHRocmVhZCBjcmVhdGVkIGJ5IGNyZWF0ZUF1ZGlvUGF0Y2goKSBhbmQgcmVsZWFzZWQgYnkgY2xlYXJQYXRjaENvbm5lY3Rpb25zKCkgaWYKLSAgICAgICAgLy8gbm8gZXhpc3RpbmcgcGxheWJhY2sgdGhyZWFkIGNhbiBiZSB1c2VkIGJ5IHRoZSBzb2Z0d2FyZSBwYXRjaAotICAgICAgICBzcDxQbGF5YmFja1RocmVhZD4gICAgICAgICAgICAgIG1QbGF5YmFja1RocmVhZDsKLSAgICAgICAgLy8gYXVkaW8gdHJhY2sgY3JlYXRlZCBieSBjcmVhdGVQYXRjaENvbm5lY3Rpb25zKCkgYW5kIHJlbGVhc2VkIGJ5IGNsZWFyUGF0Y2hDb25uZWN0aW9ucygpCi0gICAgICAgIHNwPFBsYXliYWNrVGhyZWFkOjpQYXRjaFRyYWNrPiAgbVBhdGNoVHJhY2s7Ci0gICAgICAgIC8vIHJlY29yZCB0aHJlYWQgY3JlYXRlZCBieSBjcmVhdGVBdWRpb1BhdGNoKCkgYW5kIHJlbGVhc2VkIGJ5IGNsZWFyUGF0Y2hDb25uZWN0aW9ucygpCi0gICAgICAgIHNwPFJlY29yZFRocmVhZD4gICAgICAgICAgICAgICAgbVJlY29yZFRocmVhZDsKLSAgICAgICAgLy8gYXVkaW8gcmVjb3JkIGNyZWF0ZWQgYnkgY3JlYXRlUGF0Y2hDb25uZWN0aW9ucygpIGFuZCByZWxlYXNlZCBieSBjbGVhclBhdGNoQ29ubmVjdGlvbnMoKQotICAgICAgICBzcDxSZWNvcmRUaHJlYWQ6OlBhdGNoUmVjb3JkPiAgIG1QYXRjaFJlY29yZDsKLSAgICAgICAgLy8gaGFuZGxlIGZvciBhdWRpbyBwYXRjaCBjb25uZWN0aW5nIHNvdXJjZSBkZXZpY2UgdG8gcmVjb3JkIHRocmVhZCBpbnB1dC4KLSAgICAgICAgLy8gY3JlYXRlZCBieSBjcmVhdGVQYXRjaENvbm5lY3Rpb25zKCkgYW5kIHJlbGVhc2VkIGJ5IGNsZWFyUGF0Y2hDb25uZWN0aW9ucygpCi0gICAgICAgIGF1ZGlvX3BhdGNoX2hhbmRsZV90ICAgICAgICAgICAgbVJlY29yZFBhdGNoSGFuZGxlOwotICAgICAgICAvLyBoYW5kbGUgZm9yIGF1ZGlvIHBhdGNoIGNvbm5lY3RpbmcgcGxheWJhY2sgdGhyZWFkIG91dHB1dCB0byBzaW5rIGRldmljZQotICAgICAgICAvLyBjcmVhdGVkIGJ5IGNyZWF0ZVBhdGNoQ29ubmVjdGlvbnMoKSBhbmQgcmVsZWFzZWQgYnkgY2xlYXJQYXRjaENvbm5lY3Rpb25zKCkKLSAgICAgICAgYXVkaW9fcGF0Y2hfaGFuZGxlX3QgICAgICAgICAgICBtUGxheWJhY2tQYXRjaEhhbmRsZTsKLQorICAgICAgICAvLyB0aGUgb2JqZWN0cyBhcmUgY3JlYXRlZCBieSBjcmVhdGVDb25uZWN0aW9ucygpIGFuZCByZWxlYXNlZCBieSBjbGVhckNvbm5lY3Rpb25zKCkKKyAgICAgICAgLy8gcGxheWJhY2sgdGhyZWFkIGlzIGNyZWF0ZWQgaWYgbm8gZXhpc3RpbmcgcGxheWJhY2sgdGhyZWFkIGNhbiBiZSB1c2VkCisgICAgICAgIC8vIGNvbm5lY3RzIHBsYXliYWNrIHRocmVhZCBvdXRwdXQgdG8gc2luayBkZXZpY2UKKyAgICAgICAgRW5kcG9pbnQ8UGxheWJhY2tUaHJlYWQsIFBsYXliYWNrVGhyZWFkOjpQYXRjaFRyYWNrPiBtUGxheWJhY2s7CisgICAgICAgIC8vIGNvbm5lY3RzIHNvdXJjZSBkZXZpY2UgdG8gcmVjb3JkIHRocmVhZCBpbnB1dAorICAgICAgICBFbmRwb2ludDxSZWNvcmRUaHJlYWQsIFJlY29yZFRocmVhZDo6UGF0Y2hSZWNvcmQ+IG1SZWNvcmQ7CiAgICAgfTsKIAotcHJpdmF0ZToKLSAgICBjb25zdCB3cDxBdWRpb0ZsaW5nZXI+ICAgICAgbUF1ZGlvRmxpbmdlcjsKLSAgICBTb3J0ZWRWZWN0b3IgPFBhdGNoICo+ICAgICAgbVBhdGNoZXM7CisgICAgQXVkaW9Id0RldmljZSogZmluZEF1ZGlvSHdEZXZpY2VCeU1vZHVsZShhdWRpb19tb2R1bGVfaGFuZGxlX3QgbW9kdWxlKTsKKyAgICBzcDxEZXZpY2VIYWxJbnRlcmZhY2U+IGZpbmRId0RldmljZUJ5TW9kdWxlKGF1ZGlvX21vZHVsZV9oYW5kbGVfdCBtb2R1bGUpOworICAgIHZvaWQgYWRkU29mdHdhcmVQYXRjaFRvSW5zZXJ0ZWRNb2R1bGVzKAorICAgICAgICAgICAgYXVkaW9fbW9kdWxlX2hhbmRsZV90IG1vZHVsZSwgYXVkaW9fcGF0Y2hfaGFuZGxlX3QgaGFuZGxlKTsKKyAgICB2b2lkIHJlbW92ZVNvZnR3YXJlUGF0Y2hGcm9tSW5zZXJ0ZWRNb2R1bGVzKGF1ZGlvX3BhdGNoX2hhbmRsZV90IGhhbmRsZSk7CisKKyAgICBBdWRpb0ZsaW5nZXIgJm1BdWRpb0ZsaW5nZXI7CisgICAgc3RkOjptYXA8YXVkaW9fcGF0Y2hfaGFuZGxlX3QsIFBhdGNoPiBtUGF0Y2hlczsKKworICAgIC8vIFRoaXMgbWFwIGFsbG93cyBnb2luZyBmcm9tIGEgdGhyZWFkIHRvICJkb3duc3RyZWFtIiBzb2Z0d2FyZSBwYXRjaGVzCisgICAgLy8gd2hlbiBhIHByb2Nlc3NpbmcgbW9kdWxlIGluc2VydGVkIGluIGJldHdlZW4uIEV4YW1wbGU6CisgICAgLy8KKyAgICAvLyAgZnJvbSBtYXAgdmFsdWUuc3RyZWFtcyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXAga2V5CisgICAgLy8gIFtNaXhlciB0aHJlYWRdIC0tPiBbVmlydHVhbCBvdXRwdXQgZGV2aWNlXSAtLT4gW1Byb2Nlc3NpbmcgbW9kdWxlXSAtLS1cCisgICAgLy8gICAgICAgW0hhcndhcmUgbW9kdWxlXSA8LS0gW1BoeXNpY2FsIG91dHB1dCBkZXZpY2VdIDwtLSBbUy9XIFBhdGNoXSA8LS0vCisgICAgLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnJvbSBtYXAgdmFsdWUuc3dfcGF0Y2hlcworICAgIC8vCisgICAgLy8gVGhpcyBhbGxvd3MgdGhlIG1peGVyIHRocmVhZCB0byBsb29rIHVwIHRoZSB0aHJlYWRzIG9mIHRoZSBzb2Z0d2FyZSBwYXRjaAorICAgIC8vIGZvciBwcm9wYWdhdGluZyB0aW1pbmcgaW5mbywgcGFyYW1ldGVycywgZXRjLgorICAgIC8vCisgICAgLy8gVGhlIGN1cnJlbnQgYXNzdW1wdGlvbnMgYXJlOgorICAgIC8vICAgMSkgVGhlIHByb2Nlc3NpbmcgbW9kdWxlIGFjdHMgYXMgYSBtaXhlciB3aXRoIHNldmVyYWwgb3V0cHV0cyB3aGljaAorICAgIC8vICAgICAgcmVwcmVzZW50IGRpZmZlcmVudGx5IGRvd25taXhlZCBhbmQgLyBvciBlbmNvZGVkIHZlcnNpb25zIG9mIHRoZSBzYW1lCisgICAgLy8gICAgICBtaXhlZCBzdHJlYW0uIFRoZXJlIGlzIG5vIDE6MSBjb3JyZXNwb25kZW5jZSBiZXR3ZWVuIHRoZSBpbnB1dCBzdHJlYW1zCisgICAgLy8gICAgICBhbmQgdGhlIHNvZnR3YXJlIHBhdGNoZXMsIGJ1dCByYXRoZXIgYSBOOk4gY29ycmVzcG9uZGVuY2UgYmV0d2VlbgorICAgIC8vICAgICAgYSBncm91cCBvZiBzdHJlYW1zIGFuZCBhIGdyb3VwIG9mIHBhdGNoZXMuCisgICAgLy8gICAyKSBUaGVyZSBhcmUgb25seSBhIGNvdXBsZSBvZiBpbnNlcnRlZCBwcm9jZXNzaW5nIG1vZHVsZXMgaW4gdGhlIHN5c3RlbSwKKyAgICAvLyAgICAgIHNvIHdoZW4gbG9va2luZyBmb3IgYSBzdHJlYW0gb3IgcGF0Y2ggaGFuZGxlIHdlIGNhbiBpdGVyYXRlIG92ZXIKKyAgICAvLyAgICAgIGFsbCBtb2R1bGVzLgorICAgIHN0cnVjdCBNb2R1bGVDb25uZWN0aW9ucyB7CisgICAgICAgIHN0ZDo6c2V0PGF1ZGlvX2lvX2hhbmRsZV90PiBzdHJlYW1zOworICAgICAgICBzdGQ6OnNldDxhdWRpb19wYXRjaF9oYW5kbGVfdD4gc3dfcGF0Y2hlczsKKyAgICB9OworICAgIHN0ZDo6bWFwPGF1ZGlvX21vZHVsZV9oYW5kbGVfdCwgTW9kdWxlQ29ubmVjdGlvbnM+IG1JbnNlcnRlZE1vZHVsZXM7CiB9OwpkaWZmIC0tZ2l0IGEvc2VydmljZXMvYXVkaW9mbGluZ2VyL1BsYXliYWNrVHJhY2tzLmggYi9zZXJ2aWNlcy9hdWRpb2ZsaW5nZXIvUGxheWJhY2tUcmFja3MuaAppbmRleCBhNzhiZTk5Li41M2VhOWE0IDEwMDY0NAotLS0gYS9zZXJ2aWNlcy9hdWRpb2ZsaW5nZXIvUGxheWJhY2tUcmFja3MuaAorKysgYi9zZXJ2aWNlcy9hdWRpb2ZsaW5nZXIvUGxheWJhY2tUcmFja3MuaApAQCAtNDEsNyArNDEsNyBAQAogICAgIHZpcnR1YWwgICAgICAgICAgICAgflRyYWNrKCk7CiAgICAgdmlydHVhbCBzdGF0dXNfdCAgICBpbml0Q2hlY2soKSBjb25zdDsKIAotICAgIHN0YXRpYyAgdm9pZCAgICAgICAgYXBwZW5kRHVtcEhlYWRlcihTdHJpbmc4JiByZXN1bHQpOworICAgICAgICAgICAgdm9pZCAgICAgICAgYXBwZW5kRHVtcEhlYWRlcihTdHJpbmc4JiByZXN1bHQpOwogICAgICAgICAgICAgdm9pZCAgICAgICAgYXBwZW5kRHVtcChTdHJpbmc4JiByZXN1bHQsIGJvb2wgYWN0aXZlKTsKICAgICB2aXJ0dWFsIHN0YXR1c190ICAgIHN0YXJ0KEF1ZGlvU3lzdGVtOjpzeW5jX2V2ZW50X3QgZXZlbnQgPQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQXVkaW9TeXN0ZW06OlNZTkNfRVZFTlRfTk9ORSwKQEAgLTUxLDEyICs1MSw2IEBACiAKICAgICAgICAgICAgIHZvaWQgICAgICAgIGZsdXNoKCk7CiAgICAgICAgICAgICB2b2lkICAgICAgICBkZXN0cm95KCk7Ci0gICAgICAgICAgICBpbnQgICAgICAgICBuYW1lKCkgY29uc3QgeyByZXR1cm4gbU5hbWU7IH0KLSAgICAgICAgICAgIHZvaWQgICAgICAgIHNldE5hbWUoaW50IG5hbWUpIHsKLSAgICAgICAgICAgICAgICBMT0dfQUxXQVlTX0ZBVEFMX0lGKG1OYW1lID49IDAgJiYgbmFtZSA+PSAwLAotICAgICAgICAgICAgICAgICAgICAgICAgIiVzIGJvdGggb2xkIG5hbWUgJWQgYW5kIG5ldyBuYW1lICVkIGFyZSB2YWxpZCIsIF9fZnVuY19fLCBtTmFtZSwgbmFtZSk7Ci0gICAgICAgICAgICAgICAgbU5hbWUgPSBuYW1lOwotICAgICAgICAgICAgfQogCiAgICAgdmlydHVhbCB1aW50MzJfdCAgICBzYW1wbGVSYXRlKCkgY29uc3Q7CiAKQEAgLTY1LDEwICs1OSwxMiBAQAogICAgICAgICAgICAgfQogICAgICAgICAgICAgYm9vbCAgICAgICAgaXNPZmZsb2FkZWQoKSBjb25zdAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7IHJldHVybiAobUZsYWdzICYgQVVESU9fT1VUUFVUX0ZMQUdfQ09NUFJFU1NfT0ZGTE9BRCkgIT0gMDsgfQotICAgICAgICAgICAgYm9vbCAgICAgICAgaXNEaXJlY3QoKSBjb25zdCB7IHJldHVybiAobUZsYWdzICYgQVVESU9fT1VUUFVUX0ZMQUdfRElSRUNUKSAhPSAwOyB9CisgICAgICAgICAgICBib29sICAgICAgICBpc0RpcmVjdCgpIGNvbnN0IG92ZXJyaWRlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgcmV0dXJuIChtRmxhZ3MgJiBBVURJT19PVVRQVVRfRkxBR19ESVJFQ1QpICE9IDA7IH0KICAgICAgICAgICAgIGJvb2wgICAgICAgIGlzT2ZmbG9hZGVkT3JEaXJlY3QoKSBjb25zdCB7IHJldHVybiAobUZsYWdzCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJiAoQVVESU9fT1VUUFVUX0ZMQUdfQ09NUFJFU1NfT0ZGTE9BRAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBBVURJT19PVVRQVVRfRkxBR19ESVJFQ1QpKSAhPSAwOyB9CisgICAgICAgICAgICBib29sICAgICAgICBpc1N0YXRpYygpIGNvbnN0IHsgcmV0dXJuICBtU2hhcmVkQnVmZmVyLmdldCgpICE9IG51bGxwdHI7IH0KIAogICAgICAgICAgICAgc3RhdHVzX3QgICAgc2V0UGFyYW1ldGVycyhjb25zdCBTdHJpbmc4JiBrZXlWYWx1ZVBhaXJzKTsKICAgICAgICAgICAgIHN0YXR1c190ICAgIGF0dGFjaEF1eEVmZmVjdChpbnQgRWZmZWN0SWQpOwpAQCAtODcsNiArODMsMTAgQEAKIAogICAgIHZpcnR1YWwgYm9vbCAgICAgICAgaXNGYXN0VHJhY2soKSBjb25zdCB7IHJldHVybiAobUZsYWdzICYgQVVESU9fT1VUUFVUX0ZMQUdfRkFTVCkgIT0gMDsgfQogCisgICAgICAgICAgICBkb3VibGUgICAgICBidWZmZXJMYXRlbmN5TXMoKSBjb25zdCBvdmVycmlkZSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGlzU3RhdGljKCkgPyAwLiA6IFRyYWNrQmFzZTo6YnVmZmVyTGF0ZW5jeU1zKCk7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisKIC8vIGltcGxlbWVudCB2b2x1bWUgaGFuZGxpbmcuCiAgICAgbWVkaWE6OlZvbHVtZVNoYXBlcjo6U3RhdHVzIGFwcGx5Vm9sdW1lU2hhcGVyKAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzcDxtZWRpYTo6Vm9sdW1lU2hhcGVyOjpDb25maWd1cmF0aW9uPiYgY29uZmlndXJhdGlvbiwKQEAgLTE0MCw3ICsxNDAsNyBAQAogICAgIGJvb2wgaXNSZXN1bWVQZW5kaW5nKCk7CiAgICAgdm9pZCByZXN1bWVBY2soKTsKICAgICB2b2lkIHVwZGF0ZVRyYWNrRnJhbWVJbmZvKGludDY0X3QgdHJhY2tGcmFtZXNSZWxlYXNlZCwgaW50NjRfdCBzaW5rRnJhbWVzV3JpdHRlbiwKLSAgICAgICAgICAgIGNvbnN0IEV4dGVuZGVkVGltZXN0YW1wICZ0aW1lU3RhbXApOworICAgICAgICAgICAgdWludDMyX3QgaGFsU2FtcGxlUmF0ZSwgY29uc3QgRXh0ZW5kZWRUaW1lc3RhbXAgJnRpbWVTdGFtcCk7CiAKICAgICBzcDxJTWVtb3J5PiBzaGFyZWRCdWZmZXIoKSBjb25zdCB7IHJldHVybiBtU2hhcmVkQnVmZmVyOyB9CiAKQEAgLTE3MSw3ICsxNzEsNiBAQAogCiAgICAgYm9vbCAgICAgICAgICAgICAgICBtUmVzZXREb25lOwogICAgIGNvbnN0IGF1ZGlvX3N0cmVhbV90eXBlX3QgbVN0cmVhbVR5cGU7Ci0gICAgaW50ICAgICAgICAgICAgICAgICBtTmFtZTsKICAgICBlZmZlY3RfYnVmZmVyX3QgICAgICptTWFpbkJ1ZmZlcjsKIAogICAgIGludDMyX3QgICAgICAgICAgICAgKm1BdXhCdWZmZXI7CkBAIC0yMzMsNyArMjMyLDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEF1ZGlvU3lzdGVtOjpTWU5DX0VWRU5UX05PTkUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF1ZGlvX3Nlc3Npb25fdCB0cmlnZ2VyU2Vzc2lvbiA9IEFVRElPX1NFU1NJT05fTk9ORSk7CiAgICAgdmlydHVhbCB2b2lkICAgICAgICBzdG9wKCk7Ci0gICAgICAgICAgICBib29sICAgICAgICB3cml0ZSh2b2lkKiBkYXRhLCB1aW50MzJfdCBmcmFtZXMpOworICAgICAgICAgICAgc3NpemVfdCAgICAgd3JpdGUodm9pZCogZGF0YSwgdWludDMyX3QgZnJhbWVzKTsKICAgICAgICAgICAgIGJvb2wgICAgICAgIGJ1ZmZlclF1ZXVlRW1wdHkoKSBjb25zdCB7IHJldHVybiBtQnVmZmVyUXVldWUuc2l6ZSgpID09IDA7IH0KICAgICAgICAgICAgIGJvb2wgICAgICAgIGlzQWN0aXZlKCkgY29uc3QgeyByZXR1cm4gbUFjdGl2ZTsgfQogICAgIGNvbnN0IHdwPFRocmVhZEJhc2U+JiB0aHJlYWQoKSBjb25zdCB7IHJldHVybiBtVGhyZWFkOyB9CkBAIC0yNDEsNiArMjQwLDE4IEBACiAgICAgICAgICAgICB2b2lkICAgICAgICBjb3B5TWV0YWRhdGFUbyhNZXRhZGF0YUluc2VydGVyJiBiYWNrSW5zZXJ0ZXIpIGNvbnN0IG92ZXJyaWRlOwogICAgIC8qKiBTZXQgdGhlIG1ldGFkYXRhcyBvZiB0aGUgdXBzdHJlYW0gdHJhY2tzLiBUaHJlYWQgc2FmZS4gKi8KICAgICAgICAgICAgIHZvaWQgICAgICAgIHNldE1ldGFkYXRhcyhjb25zdCBTb3VyY2VNZXRhZGF0YXMmIG1ldGFkYXRhcyk7CisgICAgLyoqIHJldHVybnMgY2xpZW50IHRpbWVzdGFtcCB0byB0aGUgdXBzdHJlYW0gZHVwbGljYXRpbmcgdGhyZWFkLiAqLworICAgIEV4dGVuZGVkVGltZXN0YW1wICAgZ2V0Q2xpZW50UHJveHlUaW1lc3RhbXAoKSBjb25zdCB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gc2VydmVyIC0ga2VybmVsIGRpZmZlcmVuY2UgaXMgbm90IHRydWUgbGF0ZW5jeSB3aGVuIGRyYWluZWQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBpLmUuIG1TZXJ2ZXJQcm94eS0+aXNEcmFpbmVkKCkuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgRXh0ZW5kZWRUaW1lc3RhbXAgdGltZXN0YW1wOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2b2lkKSBtQ2xpZW50UHJveHktPmdldFRpbWVzdGFtcCgmdGltZXN0YW1wKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBPbiBzdWNjZXNzLCB0aGUgdGltZXN0YW1wIExPQ0FUSU9OX1NFUlZFUiBhbmQgTE9DQVRJT05fS0VSTkVMCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gZW50cmllcyB3aWxsIGJlIHByb3Blcmx5IGZpbGxlZC4gSWYgZ2V0VGltZXN0YW1wKCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBpcyB1bnN1Y2Nlc3NmdWwsIHRoZW4gYSBkZWZhdWx0IGluaXRpYWxpemVkIHRpbWVzdGFtcAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vICh3aXRoIG1UaW1lTnNbXSBmaWxsZWQgd2l0aCAtMSdzKSBpcyByZXR1cm5lZC4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGltZXN0YW1wOworICAgICAgICAgICAgICAgICAgICAgICAgfQogCiBwcml2YXRlOgogICAgIHN0YXR1c190ICAgICAgICAgICAgb2J0YWluQnVmZmVyKEF1ZGlvQnVmZmVyUHJvdmlkZXI6OkJ1ZmZlciogYnVmZmVyLApAQCAtMjU3LDYgKzI2OCw3IEBACiAgICAgYm9vbCAgICAgICAgICAgICAgICAgICAgICAgIG1BY3RpdmU7CiAgICAgRHVwbGljYXRpbmdUaHJlYWQqIGNvbnN0ICAgIG1Tb3VyY2VUaHJlYWQ7IC8vIGZvciB3YWl0VGltZU1zKCkgaW4gd3JpdGUoKQogICAgIHNwPEF1ZGlvVHJhY2tDbGllbnRQcm94eT4gICBtQ2xpZW50UHJveHk7CisKICAgICAvKiogQXR0cmlidXRlcyBvZiB0aGUgc291cmNlIHRyYWNrcy4KICAgICAgKgogICAgICAqIFRoaXMgbWVtYmVyIG11c3QgYmUgYWNjZXNzZWQgd2l0aCBtVHJhY2tNZXRhZGF0YXNNdXRleCB0YWtlbi4KZGlmZiAtLWdpdCBhL3NlcnZpY2VzL2F1ZGlvZmxpbmdlci9SZWNvcmRUcmFja3MuaCBiL3NlcnZpY2VzL2F1ZGlvZmxpbmdlci9SZWNvcmRUcmFja3MuaAppbmRleCBmYzJkYmJiLi5iMGM5ZmRhIDEwMDY0NAotLS0gYS9zZXJ2aWNlcy9hdWRpb2ZsaW5nZXIvUmVjb3JkVHJhY2tzLmgKKysrIGIvc2VydmljZXMvYXVkaW9mbGluZ2VyL1JlY29yZFRyYWNrcy5oCkBAIC01MSw3ICs1MSw3IEBACiAgICAgICAgICAgICBib29sICAgICAgICBzZXRPdmVyZmxvdygpIHsgYm9vbCB0bXAgPSBtT3ZlcmZsb3c7IG1PdmVyZmxvdyA9IHRydWU7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdG1wOyB9CiAKLSAgICBzdGF0aWMgIHZvaWQgICAgICAgIGFwcGVuZER1bXBIZWFkZXIoU3RyaW5nOCYgcmVzdWx0KTsKKyAgICAgICAgICAgIHZvaWQgICAgICAgIGFwcGVuZER1bXBIZWFkZXIoU3RyaW5nOCYgcmVzdWx0KTsKICAgICAgICAgICAgIHZvaWQgICAgICAgIGFwcGVuZER1bXAoU3RyaW5nOCYgcmVzdWx0LCBib29sIGFjdGl2ZSk7CiAKICAgICAgICAgICAgIHZvaWQgICAgICAgIGhhbmRsZVN5bmNTdGFydEV2ZW50KGNvbnN0IHNwPFN5bmNFdmVudD4mIGV2ZW50KTsKQEAgLTYzLDYgKzYzLDggQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEV4dGVuZGVkVGltZXN0YW1wICZ0aW1lc3RhbXApOwogCiAgICAgdmlydHVhbCBib29sICAgICAgICBpc0Zhc3RUcmFjaygpIGNvbnN0IHsgcmV0dXJuIChtRmxhZ3MgJiBBVURJT19JTlBVVF9GTEFHX0ZBU1QpICE9IDA7IH0KKyAgICAgICAgICAgIGJvb2wgICAgICAgIGlzRGlyZWN0KCkgY29uc3Qgb3ZlcnJpZGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeyByZXR1cm4gKG1GbGFncyAmIEFVRElPX0lOUFVUX0ZMQUdfRElSRUNUKSAhPSAwOyB9CiAKICAgICAgICAgICAgIHZvaWQgICAgICAgIHNldFNpbGVuY2VkKGJvb2wgc2lsZW5jZWQpIHsgaWYgKCFpc1BhdGNoVHJhY2soKSkgbVNpbGVuY2VkID0gc2lsZW5jZWQ7IH0KICAgICAgICAgICAgIGJvb2wgICAgICAgIGlzU2lsZW5jZWQoKSBjb25zdCB7IHJldHVybiBtU2lsZW5jZWQ7IH0KZGlmZiAtLWdpdCBhL3NlcnZpY2VzL2F1ZGlvZmxpbmdlci9TZXJ2aWNlVXRpbGl0aWVzLmNwcCBiL3NlcnZpY2VzL2F1ZGlvZmxpbmdlci9TZXJ2aWNlVXRpbGl0aWVzLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYWEyNjdlYS4uMDAwMDAwMAotLS0gYS9zZXJ2aWNlcy9hdWRpb2ZsaW5nZXIvU2VydmljZVV0aWxpdGllcy5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSwxOTkgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMiBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0Ci0gKgotICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7Ci0gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCi0gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLSAqCi0gKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotICoKLSAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKLSAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCi0gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KLSAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKLSAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgotICovCi0KLSNpbmNsdWRlIDxiaW5kZXIvQXBwT3BzTWFuYWdlci5oPgotI2luY2x1ZGUgPGJpbmRlci9JUENUaHJlYWRTdGF0ZS5oPgotI2luY2x1ZGUgPGJpbmRlci9JU2VydmljZU1hbmFnZXIuaD4KLSNpbmNsdWRlIDxiaW5kZXIvUGVybWlzc2lvbkNhY2hlLmg+Ci0jaW5jbHVkZSA8cHJpdmF0ZS9hbmRyb2lkX2ZpbGVzeXN0ZW1fY29uZmlnLmg+Ci0jaW5jbHVkZSAiU2VydmljZVV0aWxpdGllcy5oIgotCi0vKiBXaGVuIHBlcmZvcm1pbmcgcGVybWlzc2lvbiBjaGVja3Mgd2UgZG8gbm90IHVzZSBwZXJtaXNzaW9uIGNhY2hlIGZvcgotICogcnVudGltZSBwZXJtaXNzaW9ucyAocHJvdGVjdGlvbiBsZXZlbCBkYW5nZXJvdXMpIGFzIHRoZXkgbWF5IGNoYW5nZSBhdAotICogcnVudGltZS4gQWxsIG90aGVyIHBlcm1pc3Npb25zIChwcm90ZWN0aW9uIGxldmVsIG5vcm1hbCBhbmQgZGFuZ2Vyb3VzKQotICogY2FuIGJlIGNhY2hlZCBhcyB0aGV5IG5ldmVyIGNoYW5nZS4gT2YgY291cnNlIGFsbCBwZXJtaXNzaW9uIGNoZWNrZWQKLSAqIGhlcmUgYXJlIHBsYXRmb3JtIGRlZmluZWQuCi0gKi8KLQotbmFtZXNwYWNlIGFuZHJvaWQgewotCi1zdGF0aWMgY29uc3QgU3RyaW5nMTYgc0FuZHJvaWRQZXJtaXNzaW9uUmVjb3JkQXVkaW8oImFuZHJvaWQucGVybWlzc2lvbi5SRUNPUkRfQVVESU8iKTsKLQotLy8gTm90IHZhbGlkIHVudGlsIGluaXRpYWxpemVkIGJ5IEF1ZGlvRmxpbmdlciBjb25zdHJ1Y3Rvci4gIEl0IHdvdWxkIGhhdmUgdG8gYmUKLS8vIHJlLWluaXRpYWxpemVkIGlmIHRoZSBwcm9jZXNzIGNvbnRhaW5pbmcgQXVkaW9GbGluZ2VyIHNlcnZpY2UgZm9ya3MgKHdoaWNoIGl0IGRvZXNuJ3QpLgotLy8gVGhpcyBpcyBvZnRlbiB1c2VkIHRvIHZhbGlkYXRlIGJpbmRlciBpbnRlcmZhY2UgY2FsbHMgd2l0aGluIGF1ZGlvc2VydmVyCi0vLyAoZS5nLiBBdWRpb1BvbGljeU1hbmFnZXIgdG8gQXVkaW9GbGluZ2VyKS4KLXBpZF90IGdldHBpZF9jYWNoZWQ7Ci0KLS8vIEEgdHJ1c3RlZCBjYWxsaW5nIFVJRCBtYXkgc3BlY2lmeSB0aGUgY2xpZW50IFVJRCBhcyBwYXJ0IG9mIGEgYmluZGVyIGludGVyZmFjZSBjYWxsLgotLy8gb3RoZXJ3aXNlIHRoZSBjYWxsaW5nIFVJRCBtdXN0IGJlIGVxdWFsIHRvIHRoZSBjbGllbnQgVUlELgotYm9vbCBpc1RydXN0ZWRDYWxsaW5nVWlkKHVpZF90IHVpZCkgewotICAgIHN3aXRjaCAodWlkKSB7Ci0gICAgY2FzZSBBSURfTUVESUE6Ci0gICAgY2FzZSBBSURfQVVESU9TRVJWRVI6Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgIGRlZmF1bHQ6Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci19Ci0KLXN0YXRpYyBTdHJpbmcxNiByZXNvbHZlQ2FsbGluZ1BhY2thZ2UoUGVybWlzc2lvbkNvbnRyb2xsZXImIHBlcm1pc3Npb25Db250cm9sbGVyLAotICAgICAgICBjb25zdCBTdHJpbmcxNiYgb3BQYWNrYWdlTmFtZSwgdWlkX3QgdWlkKSB7Ci0gICAgaWYgKG9wUGFja2FnZU5hbWUuc2l6ZSgpID4gMCkgewotICAgICAgICByZXR1cm4gb3BQYWNrYWdlTmFtZTsKLSAgICB9Ci0gICAgLy8gSW4gc29tZSBjYXNlcyB0aGUgY2FsbGluZyBjb2RlIGhhcyBubyBhY2Nlc3MgdG8gdGhlIHBhY2thZ2UgaXQgcnVucyB1bmRlci4KLSAgICAvLyBGb3IgZXhhbXBsZSwgY29kZSB1c2luZyB0aGUgd2lsaGVsbSBmcmFtZXdvcmsncyBPcGVuU0wtRVMgQVBJcy4gSW4gdGhpcwotICAgIC8vIGNhc2Ugd2Ugd2lsbCBnZXQgdGhlIHBhY2thZ2VzIGZvciB0aGUgY2FsbGluZyBVSUQgYW5kIHBpY2sgdGhlIGZpcnN0IG9uZQotICAgIC8vIGZvciBhdHRyaWJ1dGluZyB0aGUgYXBwIG9wLiBUaGlzIHdpbGwgd29yayBjb3JyZWN0bHkgZm9yIHJ1bnRpbWUgcGVybWlzc2lvbnMKLSAgICAvLyBhcyBmb3IgbGVnYWN5IGFwcHMgd2Ugd2lsbCB0b2dnbGUgdGhlIGFwcCBvcCBmb3IgYWxsIHBhY2thZ2VzIGluIHRoZSBVSUQuCi0gICAgLy8gVGhlIGNhdmVhdCBpcyB0aGF0IHRoZSBvcGVyYXRpb24gbWF5IGJlIGF0dHJpYnV0ZWQgdG8gdGhlIHdyb25nIHBhY2thZ2UgYW5kCi0gICAgLy8gc3RhdHMgYmFzZWQgb24gYXBwIG9wcyBtYXkgYmUgc2xpZ2h0bHkgb2ZmLgotICAgIFZlY3RvcjxTdHJpbmcxNj4gcGFja2FnZXM7Ci0gICAgcGVybWlzc2lvbkNvbnRyb2xsZXIuZ2V0UGFja2FnZXNGb3JVaWQodWlkLCBwYWNrYWdlcyk7Ci0gICAgaWYgKHBhY2thZ2VzLmlzRW1wdHkoKSkgewotICAgICAgICBBTE9HRSgiTm8gcGFja2FnZXMgZm9yIHVpZCAlZCIsIHVpZCk7Ci0gICAgICAgIHJldHVybiBvcFBhY2thZ2VOYW1lOyAvLyBlbXB0eSBzdHJpbmcKLSAgICB9Ci0gICAgcmV0dXJuIHBhY2thZ2VzWzBdOwotfQotCi1zdGF0aWMgaW5saW5lIGJvb2wgaXNBdWRpb1NlcnZlck9yUm9vdCh1aWRfdCB1aWQpIHsKLSAgICAvLyBBSURfUk9PVCBpcyBPSyBmb3IgY29tbWFuZC1saW5lIHRlc3RzLiAgTmF0aXZlIHVuZm9ya2VkIGF1ZGlvc2VydmVyIGFsd2F5cyBPSy4KLSAgICByZXR1cm4gdWlkID09IEFJRF9ST09UIHx8IHVpZCA9PSBBSURfQVVESU9TRVJWRVIgOwotfQotCi1zdGF0aWMgYm9vbCBjaGVja1JlY29yZGluZ0ludGVybmFsKGNvbnN0IFN0cmluZzE2JiBvcFBhY2thZ2VOYW1lLCBwaWRfdCBwaWQsCi0gICAgICAgIHVpZF90IHVpZCwgYm9vbCBzdGFydCkgewotICAgIC8vIE9rYXkgdG8gbm90IHRyYWNrIGluIGFwcCBvcHMgYXMgYXVkaW8gc2VydmVyIGlzIHVzIGFuZCBpZgotICAgIC8vIGRldmljZSBpcyByb290ZWQgc2VjdXJpdHkgbW9kZWwgaXMgY29uc2lkZXJlZCBjb21wcm9taXNlZC4KLSAgICBpZiAoaXNBdWRpb1NlcnZlck9yUm9vdCh1aWQpKSByZXR1cm4gdHJ1ZTsKLQotICAgIC8vIFdlIHNwZWNpZnkgYSBwaWQgYW5kIHVpZCBoZXJlIGFzIG1lZGlhc2VydmVyIChha2EgTWVkaWFSZWNvcmRlciBvciBTdGFnZUZyaWdodFJlY29yZGVyKQotICAgIC8vIG1heSBvcGVuIGEgcmVjb3JkIHRyYWNrIG9uIGJlaGFsZiBvZiBhIGNsaWVudC4gIE5vdGUgdGhhdCBwaWQgbWF5IGJlIGEgdGlkLgotICAgIC8vIElNUE9SVEFOVDogRE9OJ1QgVVNFIFBlcm1pc3Npb25DYWNoZSAtIFJVTlRJTUUgUEVSTUlTU0lPTlMgQ0hBTkdFLgotICAgIFBlcm1pc3Npb25Db250cm9sbGVyIHBlcm1pc3Npb25Db250cm9sbGVyOwotICAgIGNvbnN0IGJvb2wgb2sgPSBwZXJtaXNzaW9uQ29udHJvbGxlci5jaGVja1Blcm1pc3Npb24oc0FuZHJvaWRQZXJtaXNzaW9uUmVjb3JkQXVkaW8sIHBpZCwgdWlkKTsKLSAgICBpZiAoIW9rKSB7Ci0gICAgICAgIEFMT0dFKCJSZXF1ZXN0IHJlcXVpcmVzICVzIiwgU3RyaW5nOChzQW5kcm9pZFBlcm1pc3Npb25SZWNvcmRBdWRpbykuY19zdHIoKSk7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICBTdHJpbmcxNiByZXNvbHZlZE9wUGFja2FnZU5hbWUgPSByZXNvbHZlQ2FsbGluZ1BhY2thZ2UoCi0gICAgICAgICAgICBwZXJtaXNzaW9uQ29udHJvbGxlciwgb3BQYWNrYWdlTmFtZSwgdWlkKTsKLSAgICBpZiAocmVzb2x2ZWRPcFBhY2thZ2VOYW1lLnNpemUoKSA9PSAwKSB7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICBBcHBPcHNNYW5hZ2VyIGFwcE9wczsKLSAgICBjb25zdCBpbnQzMl90IG9wID0gYXBwT3BzLnBlcm1pc3Npb25Ub09wQ29kZShzQW5kcm9pZFBlcm1pc3Npb25SZWNvcmRBdWRpbyk7Ci0gICAgaWYgKHN0YXJ0KSB7Ci0gICAgICAgIGlmIChhcHBPcHMuc3RhcnRPcE5vVGhyb3cob3AsIHVpZCwgcmVzb2x2ZWRPcFBhY2thZ2VOYW1lLCAvKnN0YXJ0SWZNb2RlRGVmYXVsdCovIGZhbHNlKQotICAgICAgICAgICAgICAgICE9IEFwcE9wc01hbmFnZXI6Ok1PREVfQUxMT1dFRCkgewotICAgICAgICAgICAgQUxPR0UoIlJlcXVlc3QgZGVuaWVkIGJ5IGFwcCBvcDogJWQiLCBvcCk7Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0KLSAgICB9IGVsc2UgewotICAgICAgICBpZiAoYXBwT3BzLm5vdGVPcChvcCwgdWlkLCByZXNvbHZlZE9wUGFja2FnZU5hbWUpICE9IEFwcE9wc01hbmFnZXI6Ok1PREVfQUxMT1dFRCkgewotICAgICAgICAgICAgQUxPR0UoIlJlcXVlc3QgZGVuaWVkIGJ5IGFwcCBvcDogJWQiLCBvcCk7Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotYm9vbCByZWNvcmRpbmdBbGxvd2VkKGNvbnN0IFN0cmluZzE2JiBvcFBhY2thZ2VOYW1lLCBwaWRfdCBwaWQsIHVpZF90IHVpZCkgewotICAgIHJldHVybiBjaGVja1JlY29yZGluZ0ludGVybmFsKG9wUGFja2FnZU5hbWUsIHBpZCwgdWlkLCAvKnN0YXJ0Ki8gZmFsc2UpOwotfQotCi1ib29sIHN0YXJ0UmVjb3JkaW5nKGNvbnN0IFN0cmluZzE2JiBvcFBhY2thZ2VOYW1lLCBwaWRfdCBwaWQsIHVpZF90IHVpZCkgewotICAgICByZXR1cm4gY2hlY2tSZWNvcmRpbmdJbnRlcm5hbChvcFBhY2thZ2VOYW1lLCBwaWQsIHVpZCwgLypzdGFydCovIHRydWUpOwotfQotCi12b2lkIGZpbmlzaFJlY29yZGluZyhjb25zdCBTdHJpbmcxNiYgb3BQYWNrYWdlTmFtZSwgdWlkX3QgdWlkKSB7Ci0gICAgLy8gT2theSB0byBub3QgdHJhY2sgaW4gYXBwIG9wcyBhcyBhdWRpbyBzZXJ2ZXIgaXMgdXMgYW5kIGlmCi0gICAgLy8gZGV2aWNlIGlzIHJvb3RlZCBzZWN1cml0eSBtb2RlbCBpcyBjb25zaWRlcmVkIGNvbXByb21pc2VkLgotICAgIGlmIChpc0F1ZGlvU2VydmVyT3JSb290KHVpZCkpIHJldHVybjsKLQotICAgIFBlcm1pc3Npb25Db250cm9sbGVyIHBlcm1pc3Npb25Db250cm9sbGVyOwotICAgIFN0cmluZzE2IHJlc29sdmVkT3BQYWNrYWdlTmFtZSA9IHJlc29sdmVDYWxsaW5nUGFja2FnZSgKLSAgICAgICAgICAgIHBlcm1pc3Npb25Db250cm9sbGVyLCBvcFBhY2thZ2VOYW1lLCB1aWQpOwotICAgIGlmIChyZXNvbHZlZE9wUGFja2FnZU5hbWUuc2l6ZSgpID09IDApIHsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIEFwcE9wc01hbmFnZXIgYXBwT3BzOwotICAgIGNvbnN0IGludDMyX3Qgb3AgPSBhcHBPcHMucGVybWlzc2lvblRvT3BDb2RlKHNBbmRyb2lkUGVybWlzc2lvblJlY29yZEF1ZGlvKTsKLSAgICBhcHBPcHMuZmluaXNoT3Aob3AsIHVpZCwgcmVzb2x2ZWRPcFBhY2thZ2VOYW1lKTsKLX0KLQotYm9vbCBjYXB0dXJlQXVkaW9PdXRwdXRBbGxvd2VkKHBpZF90IHBpZCwgdWlkX3QgdWlkKSB7Ci0gICAgaWYgKGdldHBpZF9jYWNoZWQgPT0gSVBDVGhyZWFkU3RhdGU6OnNlbGYoKS0+Z2V0Q2FsbGluZ1BpZCgpKSByZXR1cm4gdHJ1ZTsKLSAgICBzdGF0aWMgY29uc3QgU3RyaW5nMTYgc0NhcHR1cmVBdWRpb091dHB1dCgiYW5kcm9pZC5wZXJtaXNzaW9uLkNBUFRVUkVfQVVESU9fT1VUUFVUIik7Ci0gICAgYm9vbCBvayA9IFBlcm1pc3Npb25DYWNoZTo6Y2hlY2tQZXJtaXNzaW9uKHNDYXB0dXJlQXVkaW9PdXRwdXQsIHBpZCwgdWlkKTsKLSAgICBpZiAoIW9rKSBBTE9HRSgiUmVxdWVzdCByZXF1aXJlcyBhbmRyb2lkLnBlcm1pc3Npb24uQ0FQVFVSRV9BVURJT19PVVRQVVQiKTsKLSAgICByZXR1cm4gb2s7Ci19Ci0KLWJvb2wgY2FwdHVyZUhvdHdvcmRBbGxvd2VkKHBpZF90IHBpZCwgdWlkX3QgdWlkKSB7Ci0gICAgLy8gQ0FQVFVSRV9BVURJT19IT1RXT1JEIHBlcm1pc3Npb24gaW1wbGllcyBSRUNPUkRfQVVESU8gcGVybWlzc2lvbgotICAgIGJvb2wgb2sgPSByZWNvcmRpbmdBbGxvd2VkKFN0cmluZzE2KCIiKSwgcGlkLCB1aWQpOwotCi0gICAgaWYgKG9rKSB7Ci0gICAgICAgIHN0YXRpYyBjb25zdCBTdHJpbmcxNiBzQ2FwdHVyZUhvdHdvcmRBbGxvd2VkKCJhbmRyb2lkLnBlcm1pc3Npb24uQ0FQVFVSRV9BVURJT19IT1RXT1JEIik7Ci0gICAgICAgIC8vIElNUE9SVEFOVDogVXNlIFBlcm1pc3Npb25DYWNoZSAtIG5vdCBhIHJ1bnRpbWUgcGVybWlzc2lvbiBhbmQgbWF5IG5vdCBjaGFuZ2UuCi0gICAgICAgIG9rID0gUGVybWlzc2lvbkNhY2hlOjpjaGVja0NhbGxpbmdQZXJtaXNzaW9uKHNDYXB0dXJlSG90d29yZEFsbG93ZWQpOwotICAgIH0KLSAgICBpZiAoIW9rKSBBTE9HRSgiYW5kcm9pZC5wZXJtaXNzaW9uLkNBUFRVUkVfQVVESU9fSE9UV09SRCIpOwotICAgIHJldHVybiBvazsKLX0KLQotYm9vbCBzZXR0aW5nc0FsbG93ZWQoKSB7Ci0gICAgaWYgKGdldHBpZF9jYWNoZWQgPT0gSVBDVGhyZWFkU3RhdGU6OnNlbGYoKS0+Z2V0Q2FsbGluZ1BpZCgpKSByZXR1cm4gdHJ1ZTsKLSAgICBzdGF0aWMgY29uc3QgU3RyaW5nMTYgc0F1ZGlvU2V0dGluZ3MoImFuZHJvaWQucGVybWlzc2lvbi5NT0RJRllfQVVESU9fU0VUVElOR1MiKTsKLSAgICAvLyBJTVBPUlRBTlQ6IFVzZSBQZXJtaXNzaW9uQ2FjaGUgLSBub3QgYSBydW50aW1lIHBlcm1pc3Npb24gYW5kIG1heSBub3QgY2hhbmdlLgotICAgIGJvb2wgb2sgPSBQZXJtaXNzaW9uQ2FjaGU6OmNoZWNrQ2FsbGluZ1Blcm1pc3Npb24oc0F1ZGlvU2V0dGluZ3MpOwotICAgIGlmICghb2spIEFMT0dFKCJSZXF1ZXN0IHJlcXVpcmVzIGFuZHJvaWQucGVybWlzc2lvbi5NT0RJRllfQVVESU9fU0VUVElOR1MiKTsKLSAgICByZXR1cm4gb2s7Ci19Ci0KLWJvb2wgbW9kaWZ5QXVkaW9Sb3V0aW5nQWxsb3dlZCgpIHsKLSAgICBzdGF0aWMgY29uc3QgU3RyaW5nMTYgc01vZGlmeUF1ZGlvUm91dGluZ0FsbG93ZWQoImFuZHJvaWQucGVybWlzc2lvbi5NT0RJRllfQVVESU9fUk9VVElORyIpOwotICAgIC8vIElNUE9SVEFOVDogVXNlIFBlcm1pc3Npb25DYWNoZSAtIG5vdCBhIHJ1bnRpbWUgcGVybWlzc2lvbiBhbmQgbWF5IG5vdCBjaGFuZ2UuCi0gICAgYm9vbCBvayA9IFBlcm1pc3Npb25DYWNoZTo6Y2hlY2tDYWxsaW5nUGVybWlzc2lvbihzTW9kaWZ5QXVkaW9Sb3V0aW5nQWxsb3dlZCk7Ci0gICAgaWYgKCFvaykgQUxPR0UoImFuZHJvaWQucGVybWlzc2lvbi5NT0RJRllfQVVESU9fUk9VVElORyIpOwotICAgIHJldHVybiBvazsKLX0KLQotYm9vbCBkdW1wQWxsb3dlZCgpIHsKLSAgICAvLyBkb24ndCBvcHRpbWl6ZSBmb3Igc2FtZSBwaWQsIHNpbmNlIG1lZGlhc2VydmVyIG5ldmVyIGR1bXBzIGl0c2VsZgotICAgIHN0YXRpYyBjb25zdCBTdHJpbmcxNiBzRHVtcCgiYW5kcm9pZC5wZXJtaXNzaW9uLkRVTVAiKTsKLSAgICAvLyBJTVBPUlRBTlQ6IFVzZSBQZXJtaXNzaW9uQ2FjaGUgLSBub3QgYSBydW50aW1lIHBlcm1pc3Npb24gYW5kIG1heSBub3QgY2hhbmdlLgotICAgIGJvb2wgb2sgPSBQZXJtaXNzaW9uQ2FjaGU6OmNoZWNrQ2FsbGluZ1Blcm1pc3Npb24oc0R1bXApOwotICAgIC8vIGNvbnZlbnRpb24gaXMgZm9yIGNhbGxlciB0byBkdW1wIGFuIGVycm9yIG1lc3NhZ2UgdG8gZmQgaW5zdGVhZCBvZiBsb2dnaW5nIGhlcmUKLSAgICAvL2lmICghb2spIEFMT0dFKCJSZXF1ZXN0IHJlcXVpcmVzIGFuZHJvaWQucGVybWlzc2lvbi5EVU1QIik7Ci0gICAgcmV0dXJuIG9rOwotfQotCi1ib29sIG1vZGlmeVBob25lU3RhdGVBbGxvd2VkKHBpZF90IHBpZCwgdWlkX3QgdWlkKSB7Ci0gICAgc3RhdGljIGNvbnN0IFN0cmluZzE2IHNNb2RpZnlQaG9uZVN0YXRlKCJhbmRyb2lkLnBlcm1pc3Npb24uTU9ESUZZX1BIT05FX1NUQVRFIik7Ci0gICAgYm9vbCBvayA9IFBlcm1pc3Npb25DYWNoZTo6Y2hlY2tQZXJtaXNzaW9uKHNNb2RpZnlQaG9uZVN0YXRlLCBwaWQsIHVpZCk7Ci0gICAgaWYgKCFvaykgQUxPR0UoIlJlcXVlc3QgcmVxdWlyZXMgYW5kcm9pZC5wZXJtaXNzaW9uLk1PRElGWV9QSE9ORV9TVEFURSIpOwotICAgIHJldHVybiBvazsKLX0KLQotfSAvLyBuYW1lc3BhY2UgYW5kcm9pZApkaWZmIC0tZ2l0IGEvc2VydmljZXMvYXVkaW9mbGluZ2VyL1NlcnZpY2VVdGlsaXRpZXMuaCBiL3NlcnZpY2VzL2F1ZGlvZmxpbmdlci9TZXJ2aWNlVXRpbGl0aWVzLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGY0NWFkYTEuLjAwMDAwMDAKLS0tIGEvc2VydmljZXMvYXVkaW9mbGluZ2VyL1NlcnZpY2VVdGlsaXRpZXMuaAorKysgL2Rldi9udWxsCkBAIC0xLDM0ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTIgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAotICoKLSAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwotICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgotICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0gKgotICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLSAqCi0gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCi0gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAotICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCi0gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCi0gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KLSAqLwotCi0jaW5jbHVkZSA8dW5pc3RkLmg+Ci0KLSNpbmNsdWRlIDxiaW5kZXIvUGVybWlzc2lvbkNvbnRyb2xsZXIuaD4KLQotbmFtZXNwYWNlIGFuZHJvaWQgewotCi1leHRlcm4gcGlkX3QgZ2V0cGlkX2NhY2hlZDsKLWJvb2wgaXNUcnVzdGVkQ2FsbGluZ1VpZCh1aWRfdCB1aWQpOwotYm9vbCByZWNvcmRpbmdBbGxvd2VkKGNvbnN0IFN0cmluZzE2JiBvcFBhY2thZ2VOYW1lLCBwaWRfdCBwaWQsIHVpZF90IHVpZCk7Ci1ib29sIHN0YXJ0UmVjb3JkaW5nKGNvbnN0IFN0cmluZzE2JiBvcFBhY2thZ2VOYW1lLCBwaWRfdCBwaWQsIHVpZF90IHVpZCk7Ci12b2lkIGZpbmlzaFJlY29yZGluZyhjb25zdCBTdHJpbmcxNiYgb3BQYWNrYWdlTmFtZSwgdWlkX3QgdWlkKTsKLWJvb2wgY2FwdHVyZUF1ZGlvT3V0cHV0QWxsb3dlZChwaWRfdCBwaWQsIHVpZF90IHVpZCk7Ci1ib29sIGNhcHR1cmVIb3R3b3JkQWxsb3dlZChwaWRfdCBwaWQsIHVpZF90IHVpZCk7Ci1ib29sIHNldHRpbmdzQWxsb3dlZCgpOwotYm9vbCBtb2RpZnlBdWRpb1JvdXRpbmdBbGxvd2VkKCk7Ci1ib29sIGR1bXBBbGxvd2VkKCk7Ci1ib29sIG1vZGlmeVBob25lU3RhdGVBbGxvd2VkKHBpZF90IHBpZCwgdWlkX3QgdWlkKTsKLX0KZGlmZiAtLWdpdCBhL3NlcnZpY2VzL2F1ZGlvZmxpbmdlci9UaHJlYWRzLmNwcCBiL3NlcnZpY2VzL2F1ZGlvZmxpbmdlci9UaHJlYWRzLmNwcAppbmRleCBjMjMyMGJjLi5mODMzY2Y3IDEwMDY0NAotLS0gYS9zZXJ2aWNlcy9hdWRpb2ZsaW5nZXIvVGhyZWFkcy5jcHAKKysrIGIvc2VydmljZXMvYXVkaW9mbGluZ2VyL1RocmVhZHMuY3BwCkBAIC0yMyw2ICsyMyw4IEBACiAjaW5jbHVkZSAiQ29uZmlndXJhdGlvbi5oIgogI2luY2x1ZGUgPG1hdGguaD4KICNpbmNsdWRlIDxmY250bC5oPgorI2luY2x1ZGUgPG1lbW9yeT4KKyNpbmNsdWRlIDxzdHJpbmc+CiAjaW5jbHVkZSA8bGludXgvZnV0ZXguaD4KICNpbmNsdWRlIDxzeXMvc3RhdC5oPgogI2luY2x1ZGUgPHN5cy9zeXNjYWxsLmg+CkBAIC02Miw4ICs2NCw4IEBACiAjaW5jbHVkZSAiQXVkaW9GbGluZ2VyLmgiCiAjaW5jbHVkZSAiRmFzdE1peGVyLmgiCiAjaW5jbHVkZSAiRmFzdENhcHR1cmUuaCIKLSNpbmNsdWRlICJTZXJ2aWNlVXRpbGl0aWVzLmgiCi0jaW5jbHVkZSAibWVkaWF1dGlscy9TY2hlZHVsaW5nUG9saWN5U2VydmljZS5oIgorI2luY2x1ZGUgPG1lZGlhdXRpbHMvU2NoZWR1bGluZ1BvbGljeVNlcnZpY2UuaD4KKyNpbmNsdWRlIDxtZWRpYXV0aWxzL1NlcnZpY2VVdGlsaXRpZXMuaD4KIAogI2lmZGVmIEFERF9CQVRURVJZX0RBVEEKICNpbmNsdWRlIDxtZWRpYS9JTWVkaWFQbGF5ZXJTZXJ2aWNlLmg+CkBAIC03MSw3ICs3Myw3IEBACiAjZW5kaWYKIAogI2lmZGVmIERFQlVHX0NQVV9VU0FHRQotI2luY2x1ZGUgPGNwdXN0YXRzL0NlbnRyYWxUZW5kZW5jeVN0YXRpc3RpY3MuaD4KKyNpbmNsdWRlIDxhdWRpb191dGlscy9TdGF0aXN0aWNzLmg+CiAjaW5jbHVkZSA8Y3B1c3RhdHMvVGhyZWFkQ3B1VXNhZ2UuaD4KICNlbmRpZgogCkBAIC0yMDAsNyArMjAyLDcgQEAKIC8vIEluaXRpYWxseSB0aGlzIGhlYXAgaXMgdXNlZCB0byBhbGxvY2F0ZSBjbGllbnQgYnVmZmVycyBmb3IgImZhc3QiIEF1ZGlvUmVjb3JkLgogLy8gRXZlbnR1YWxseSBpdCB3aWxsIGJlIHRoZSBzaW5nbGUgYnVmZmVyIHRoYXQgRmFzdENhcHR1cmUgd3JpdGVzIGludG8gdmlhIEhBTCByZWFkKCksCiAvLyBhbmQgdGhhdCBhbGwgImZhc3QiIEF1ZGlvUmVjb3JkIGNsaWVudHMgcmVhZCBmcm9tLiAgSW4gZWl0aGVyIGNhc2UsIHRoZSBzaXplIGNhbiBiZSBzbWFsbC4KLXN0YXRpYyBjb25zdCBzaXplX3Qga1JlY29yZFRocmVhZFJlYWRPbmx5SGVhcFNpemUgPSAweDQwMDA7CitzdGF0aWMgY29uc3Qgc2l6ZV90IGtSZWNvcmRUaHJlYWRSZWFkT25seUhlYXBTaXplID0gMHhEMDAwOwogCiAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKQEAgLTMzMyw5ICszMzUsOSBAQAogI2lmZGVmIERFQlVHX0NQVV9VU0FHRQogcHJpdmF0ZToKICAgICBUaHJlYWRDcHVVc2FnZSBtQ3B1VXNhZ2U7ICAgICAgICAgICAvLyBpbnN0YW50YW5lb3VzIHRocmVhZCBDUFUgdXNhZ2UgaW4gd2FsbCBjbG9jayBucwotICAgIENlbnRyYWxUZW5kZW5jeVN0YXRpc3RpY3MgbVdjU3RhdHM7IC8vIHN0YXRpc3RpY3Mgb24gdGhyZWFkIENQVSB1c2FnZSBpbiB3YWxsIGNsb2NrIG5zCisgICAgYXVkaW9fdXRpbHM6OlN0YXRpc3RpY3M8ZG91YmxlPiBtV2NTdGF0czsgLy8gc3RhdGlzdGljcyBvbiB0aHJlYWQgQ1BVIHVzYWdlIGluIHdhbGwgY2xvY2sgbnMKIAotICAgIENlbnRyYWxUZW5kZW5jeVN0YXRpc3RpY3MgbUh6U3RhdHM7IC8vIHN0YXRpc3RpY3Mgb24gdGhyZWFkIENQVSB1c2FnZSBpbiBjeWNsZXMKKyAgICBhdWRpb191dGlsczo6U3RhdGlzdGljczxkb3VibGU+IG1IelN0YXRzOyAvLyBzdGF0aXN0aWNzIG9uIHRocmVhZCBDUFUgdXNhZ2UgaW4gY3ljbGVzCiAKICAgICBpbnQgbUNwdU51bTsgICAgICAgICAgICAgICAgICAgICAgICAvLyB0aHJlYWQncyBjdXJyZW50IENQVSBudW1iZXIKICAgICBpbnQgbUNwdWtIejsgICAgICAgICAgICAgICAgICAgICAgICAvLyBmcmVxdWVuY3kgb2YgdGhyZWFkJ3MgY3VycmVudCBDUFUgaW4ga0h6CkBAIC0zNjEsNyArMzYzLDcgQEAKIAogICAgIC8vIHJlY29yZCBzYW1wbGUgZm9yIHdhbGwgY2xvY2sgc3RhdGlzdGljcwogICAgIGlmICh2YWxpZCkgewotICAgICAgICBtV2NTdGF0cy5zYW1wbGUod2NOcyk7CisgICAgICAgIG1XY1N0YXRzLmFkZCh3Y05zKTsKICAgICB9CiAKICAgICAvLyBnZXQgdGhlIGN1cnJlbnQgQ1BVIG51bWJlcgpAQCAtMzgwLDI2ICszODIsMjYgQEAKIAogICAgIC8vIGlmIG5vIGNoYW5nZSBpbiBDUFUgbnVtYmVyIG9yIGZyZXF1ZW5jeSwgdGhlbiByZWNvcmQgc2FtcGxlIGZvciBjeWNsZSBzdGF0aXN0aWNzCiAgICAgaWYgKHZhbGlkICYmIG1DcHVrSHogPiAwKSB7Ci0gICAgICAgIGRvdWJsZSBjeWNsZXMgPSB3Y05zICogY3B1a0h6ICogMC4wMDAwMDE7Ci0gICAgICAgIG1IelN0YXRzLnNhbXBsZShjeWNsZXMpOworICAgICAgICBjb25zdCBkb3VibGUgY3ljbGVzID0gd2NOcyAqIGNwdWtIeiAqIDAuMDAwMDAxOworICAgICAgICBtSHpTdGF0cy5hZGQoY3ljbGVzKTsKICAgICB9CiAKLSAgICB1bnNpZ25lZCBuID0gbVdjU3RhdHMubigpOworICAgIGNvbnN0IHVuc2lnbmVkIG4gPSBtV2NTdGF0cy5nZXROKCk7CiAgICAgLy8gbUNwdVVzYWdlLmVsYXBzZWQoKSBpcyBleHBlbnNpdmUsIHNvIGRvbid0IGNhbGwgaXQgZXZlcnkgbG9vcAogICAgIGlmICgobiAmIDEyNykgPT0gMSkgewotICAgICAgICBsb25nIGxvbmcgZWxhcHNlZCA9IG1DcHVVc2FnZS5lbGFwc2VkKCk7CisgICAgICAgIGNvbnN0IGxvbmcgbG9uZyBlbGFwc2VkID0gbUNwdVVzYWdlLmVsYXBzZWQoKTsKICAgICAgICAgaWYgKGVsYXBzZWQgPj0gREVCVUdfQ1BVX1VTQUdFICogMTAwMDAwMDAwMExMKSB7Ci0gICAgICAgICAgICBkb3VibGUgcGVyTG9vcCA9IGVsYXBzZWQgLyAoZG91YmxlKSBuOwotICAgICAgICAgICAgZG91YmxlIHBlckxvb3AxMDAgPSBwZXJMb29wICogMC4wMTsKLSAgICAgICAgICAgIGRvdWJsZSBwZXJMb29wMWsgPSBwZXJMb29wICogMC4wMDE7Ci0gICAgICAgICAgICBkb3VibGUgbWVhbiA9IG1XY1N0YXRzLm1lYW4oKTsKLSAgICAgICAgICAgIGRvdWJsZSBzdGRkZXYgPSBtV2NTdGF0cy5zdGRkZXYoKTsKLSAgICAgICAgICAgIGRvdWJsZSBtaW5pbXVtID0gbVdjU3RhdHMubWluaW11bSgpOwotICAgICAgICAgICAgZG91YmxlIG1heGltdW0gPSBtV2NTdGF0cy5tYXhpbXVtKCk7Ci0gICAgICAgICAgICBkb3VibGUgbWVhbkN5Y2xlcyA9IG1IelN0YXRzLm1lYW4oKTsKLSAgICAgICAgICAgIGRvdWJsZSBzdGRkZXZDeWNsZXMgPSBtSHpTdGF0cy5zdGRkZXYoKTsKLSAgICAgICAgICAgIGRvdWJsZSBtaW5DeWNsZXMgPSBtSHpTdGF0cy5taW5pbXVtKCk7Ci0gICAgICAgICAgICBkb3VibGUgbWF4Q3ljbGVzID0gbUh6U3RhdHMubWF4aW11bSgpOworICAgICAgICAgICAgY29uc3QgZG91YmxlIHBlckxvb3AgPSBlbGFwc2VkIC8gKGRvdWJsZSkgbjsKKyAgICAgICAgICAgIGNvbnN0IGRvdWJsZSBwZXJMb29wMTAwID0gcGVyTG9vcCAqIDAuMDE7CisgICAgICAgICAgICBjb25zdCBkb3VibGUgcGVyTG9vcDFrID0gcGVyTG9vcCAqIDAuMDAxOworICAgICAgICAgICAgY29uc3QgZG91YmxlIG1lYW4gPSBtV2NTdGF0cy5nZXRNZWFuKCk7CisgICAgICAgICAgICBjb25zdCBkb3VibGUgc3RkZGV2ID0gbVdjU3RhdHMuZ2V0U3RkRGV2KCk7CisgICAgICAgICAgICBjb25zdCBkb3VibGUgbWluaW11bSA9IG1XY1N0YXRzLmdldE1pbigpOworICAgICAgICAgICAgY29uc3QgZG91YmxlIG1heGltdW0gPSBtV2NTdGF0cy5nZXRNYXgoKTsKKyAgICAgICAgICAgIGNvbnN0IGRvdWJsZSBtZWFuQ3ljbGVzID0gbUh6U3RhdHMuZ2V0TWVhbigpOworICAgICAgICAgICAgY29uc3QgZG91YmxlIHN0ZGRldkN5Y2xlcyA9IG1IelN0YXRzLmdldFN0ZERldigpOworICAgICAgICAgICAgY29uc3QgZG91YmxlIG1pbkN5Y2xlcyA9IG1IelN0YXRzLmdldE1pbigpOworICAgICAgICAgICAgY29uc3QgZG91YmxlIG1heEN5Y2xlcyA9IG1IelN0YXRzLmdldE1heCgpOwogICAgICAgICAgICAgbUNwdVVzYWdlLnJlc2V0RWxhcHNlZCgpOwogICAgICAgICAgICAgbVdjU3RhdHMucmVzZXQoKTsKICAgICAgICAgICAgIG1IelN0YXRzLnJlc2V0KCk7CkBAIC03NjksNiArNzcxLDggQEAKICAgICAgICAgICAgIGlmIChtYXNrICYgQVVESU9fQ0hBTk5FTF9PVVRfVE9QX0JBQ0tfTEVGVCkgcy5hcHBlbmQoInRvcC1iYWNrLWxlZnQsICIpOwogICAgICAgICAgICAgaWYgKG1hc2sgJiBBVURJT19DSEFOTkVMX09VVF9UT1BfQkFDS19DRU5URVIpIHMuYXBwZW5kKCJ0b3AtYmFjay1jZW50ZXIsICIgKTsKICAgICAgICAgICAgIGlmIChtYXNrICYgQVVESU9fQ0hBTk5FTF9PVVRfVE9QX0JBQ0tfUklHSFQpIHMuYXBwZW5kKCJ0b3AtYmFjay1yaWdodCwgIiApOworICAgICAgICAgICAgaWYgKG1hc2sgJiBBVURJT19DSEFOTkVMX09VVF9UT1BfU0lERV9MRUZUKSBzLmFwcGVuZCgidG9wLXNpZGUtbGVmdCwgIiApOworICAgICAgICAgICAgaWYgKG1hc2sgJiBBVURJT19DSEFOTkVMX09VVF9UT1BfU0lERV9SSUdIVCkgcy5hcHBlbmQoInRvcC1zaWRlLXJpZ2h0LCAiICk7CiAgICAgICAgICAgICBpZiAobWFzayAmIH5BVURJT19DSEFOTkVMX09VVF9BTEwpIHMuYXBwZW5kKCJ1bmtub3duLCAgIik7CiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICBpZiAobWFzayAmIEFVRElPX0NIQU5ORUxfSU5fTEVGVCkgcy5hcHBlbmQoImxlZnQsICIpOwpAQCAtNzgzLDYgKzc4NywxMiBAQAogICAgICAgICAgICAgaWYgKG1hc2sgJiBBVURJT19DSEFOTkVMX0lOX1hfQVhJUykgcy5hcHBlbmQoIlgsICIpOwogICAgICAgICAgICAgaWYgKG1hc2sgJiBBVURJT19DSEFOTkVMX0lOX1lfQVhJUykgcy5hcHBlbmQoIlksICIpOwogICAgICAgICAgICAgaWYgKG1hc2sgJiBBVURJT19DSEFOTkVMX0lOX1pfQVhJUykgcy5hcHBlbmQoIlosICIpOworICAgICAgICAgICAgaWYgKG1hc2sgJiBBVURJT19DSEFOTkVMX0lOX0JBQ0tfTEVGVCkgcy5hcHBlbmQoImJhY2stbGVmdCwgIik7CisgICAgICAgICAgICBpZiAobWFzayAmIEFVRElPX0NIQU5ORUxfSU5fQkFDS19SSUdIVCkgcy5hcHBlbmQoImJhY2stcmlnaHQsICIpOworICAgICAgICAgICAgaWYgKG1hc2sgJiBBVURJT19DSEFOTkVMX0lOX0NFTlRFUikgcy5hcHBlbmQoImNlbnRlciwgIik7CisgICAgICAgICAgICBpZiAobWFzayAmIEFVRElPX0NIQU5ORUxfSU5fTE9XX0ZSRVFVRU5DWSkgcy5hcHBlbmQoImxvdyBmcmVxLCAiKTsKKyAgICAgICAgICAgIGlmIChtYXNrICYgQVVESU9fQ0hBTk5FTF9JTl9UT1BfTEVGVCkgcy5hcHBlbmQoInRvcC1sZWZ0LCAiICk7CisgICAgICAgICAgICBpZiAobWFzayAmIEFVRElPX0NIQU5ORUxfSU5fVE9QX1JJR0hUKSBzLmFwcGVuZCgidG9wLXJpZ2h0LCAiICk7CiAgICAgICAgICAgICBpZiAobWFzayAmIEFVRElPX0NIQU5ORUxfSU5fVk9JQ0VfVVBMSU5LKSBzLmFwcGVuZCgidm9pY2UtdXBsaW5rLCAiKTsKICAgICAgICAgICAgIGlmIChtYXNrICYgQVVESU9fQ0hBTk5FTF9JTl9WT0lDRV9ETkxJTkspIHMuYXBwZW5kKCJ2b2ljZS1kbmxpbmssICIpOwogICAgICAgICAgICAgaWYgKG1hc2sgJiB+QVVESU9fQ0hBTk5FTF9JTl9BTEwpIHMuYXBwZW5kKCJ1bmtub3duLCAgIik7CkBAIC04NDUsNiArODU1LDE2IEBACiAgICAgZHByaW50ZihmZCwgIiAgSW5wdXQgZGV2aWNlOiAlI3ggKCVzKVxuIiwgbUluRGV2aWNlLCBkZXZpY2VzVG9TdHJpbmcobUluRGV2aWNlKS5jX3N0cigpKTsKICAgICBkcHJpbnRmKGZkLCAiICBBdWRpbyBzb3VyY2U6ICVkICglcylcbiIsIG1BdWRpb1NvdXJjZSwgc291cmNlVG9TdHJpbmcobUF1ZGlvU291cmNlKSk7CiAKKyAgICAvLyBEdW1wIHRpbWVzdGFtcCBzdGF0aXN0aWNzIGZvciB0aGUgVGhyZWFkIHR5cGVzIHRoYXQgc3VwcG9ydCBpdC4KKyAgICBpZiAobVR5cGUgPT0gUkVDT1JECisgICAgICAgICAgICB8fCBtVHlwZSA9PSBNSVhFUgorICAgICAgICAgICAgfHwgbVR5cGUgPT0gRFVQTElDQVRJTkcKKyAgICAgICAgICAgIHx8IG1UeXBlID09IERJUkVDVAorICAgICAgICAgICAgfHwgbVR5cGUgPT0gT0ZGTE9BRCkgeworICAgICAgICBkcHJpbnRmKGZkLCAiICBUaW1lc3RhbXAgc3RhdHM6ICVzXG4iLCBtVGltZXN0YW1wVmVyaWZpZXIudG9TdHJpbmcoKS5jX3N0cigpKTsKKyAgICAgICAgZHByaW50ZihmZCwgIiAgVGltZXN0YW1wIGNvcnJlY3RlZDogJXNcbiIsIGlzVGltZXN0YW1wQ29ycmVjdGlvbkVuYWJsZWQoKSA/ICJ5ZXMiIDogIm5vIik7CisgICAgfQorCiAgICAgaWYgKGxvY2tlZCkgewogICAgICAgICBtTG9jay51bmxvY2soKTsKICAgICB9CkBAIC0xNTE5LDcgKzE1MzksNyBAQAogICAgIH0KIH0KIAotdm9pZCBBdWRpb0ZsaW5nZXI6OlRocmVhZEJhc2U6OmdldEF1ZGlvUG9ydENvbmZpZyhzdHJ1Y3QgYXVkaW9fcG9ydF9jb25maWcgKmNvbmZpZykKK3ZvaWQgQXVkaW9GbGluZ2VyOjpUaHJlYWRCYXNlOjp0b0F1ZGlvUG9ydENvbmZpZyhzdHJ1Y3QgYXVkaW9fcG9ydF9jb25maWcgKmNvbmZpZykKIHsKICAgICBjb25maWctPnR5cGUgPSBBVURJT19QT1JUX1RZUEVfTUlYOwogICAgIGNvbmZpZy0+ZXh0Lm1peC5oYW5kbGUgPSBtSWQ7CkBAIC0xNTcxLDYgKzE1OTEsOSBAQAogICAgIC0tbUJhdHRlcnlDb3VudGVyW3RyYWNrLT51aWQoKV0uc2Vjb25kOwogICAgIC8vIG1MYXRlc3RBY3RpdmVUcmFjayBpcyBub3QgY2xlYXJlZCBldmVuIGlmIGlzIHRoZSBzYW1lIGFzIHRyYWNrLgogICAgIG1IYXNDaGFuZ2VkID0gdHJ1ZTsKKyNpZmRlZiBURUVfU0lOSworICAgIHRyYWNrLT5kdW1wVGVlKC0xIC8qIGZkICovLCAiX1JFTU9WRSIpOworI2VuZGlmCiAgICAgcmV0dXJuIGluZGV4OwogfQogCkBAIC0xNzA5LDEwICsxNzMyLDIxIEBACiAgICAgICAgIGlmIChtT3V0cHV0LT5hdWRpb0h3RGV2LT5jYW5TZXRNYXN0ZXJNdXRlKCkpIHsKICAgICAgICAgICAgIG1NYXN0ZXJNdXRlID0gZmFsc2U7CiAgICAgICAgIH0KKyAgICAgICAgbUlzTXNkRGV2aWNlID0gc3RyY21wKAorICAgICAgICAgICAgICAgIG1PdXRwdXQtPmF1ZGlvSHdEZXYtPm1vZHVsZU5hbWUoKSwgQVVESU9fSEFSRFdBUkVfTU9EVUxFX0lEX01TRCkgPT0gMDsKICAgICB9CiAKICAgICByZWFkT3V0cHV0UGFyYW1ldGVyc19sKCk7CiAKKyAgICAvLyBUT0RPOiBXZSBtYXkgYWxzbyBtYXRjaCBvbiBhZGRyZXNzIGFzIHdlbGwgYXMgZGV2aWNlIHR5cGUgZm9yCisgICAgLy8gQVVESU9fREVWSUNFX09VVF9CVVMsIEFVRElPX0RFVklDRV9PVVRfQUxMX0EyRFAsIEFVRElPX0RFVklDRV9PVVRfUkVNT1RFX1NVQk1JWAorICAgIGlmICh0eXBlID09IE1JWEVSIHx8IHR5cGUgPT0gRElSRUNUKSB7CisgICAgICAgIG1UaW1lc3RhbXBDb3JyZWN0ZWREZXZpY2VzID0gKGF1ZGlvX2RldmljZXNfdClwcm9wZXJ0eV9nZXRfaW50NjQoCisgICAgICAgICAgICAgICAgImF1ZGlvLnRpbWVzdGFtcC5jb3JyZWN0ZWRfb3V0cHV0X2RldmljZXMiLAorICAgICAgICAgICAgICAgIChpbnQ2NF90KShtSXNNc2REZXZpY2UgPyBBVURJT19ERVZJQ0VfT1VUX0JVUyAvLyB0dXJuIG9uIGJ5IGRlZmF1bHQgZm9yIE1TRAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBBVURJT19ERVZJQ0VfTk9ORSkpOworICAgIH0KKwogICAgIC8vICsrIG9wZXJhdG9yIGRvZXMgbm90IGNvbXBpbGUKICAgICBmb3IgKGF1ZGlvX3N0cmVhbV90eXBlX3Qgc3RyZWFtID0gQVVESU9fU1RSRUFNX01JTjsgc3RyZWFtIDwgQVVESU9fU1RSRUFNX0ZPUl9QT0xJQ1lfQ05UOwogICAgICAgICAgICAgc3RyZWFtID0gKGF1ZGlvX3N0cmVhbV90eXBlX3QpIChzdHJlYW0gKyAxKSkgewpAQCAtMTc3Myw3ICsxODA3LDcgQEAKICAgICBpZiAobnVtdHJhY2tzKSB7CiAgICAgICAgIGRwcmludGYoZmQsICIgb2Ygd2hpY2ggJXp1IGFyZSBhY3RpdmVcbiIsIG51bWFjdGl2ZSk7CiAgICAgICAgIHJlc3VsdC5hcHBlbmQocHJlZml4KTsKLSAgICAgICAgVHJhY2s6OmFwcGVuZER1bXBIZWFkZXIocmVzdWx0KTsKKyAgICAgICAgbVRyYWNrc1swXS0+YXBwZW5kRHVtcEhlYWRlcihyZXN1bHQpOwogICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG51bXRyYWNrczsgKytpKSB7CiAgICAgICAgICAgICBzcDxUcmFjaz4gdHJhY2sgPSBtVHJhY2tzW2ldOwogICAgICAgICAgICAgaWYgKHRyYWNrICE9IDApIHsKQEAgLTE3OTMsNyArMTgyNyw3IEBACiAgICAgICAgIHJlc3VsdC5hcHBlbmQoIiAgVGhlIGZvbGxvd2luZyB0cmFja3MgYXJlIGluIHRoZSBhY3RpdmUgbGlzdCBidXQiCiAgICAgICAgICAgICAgICAgIiBub3QgaW4gdGhlIHRyYWNrIGxpc3RcbiIpOwogICAgICAgICByZXN1bHQuYXBwZW5kKHByZWZpeCk7Ci0gICAgICAgIFRyYWNrOjphcHBlbmREdW1wSGVhZGVyKHJlc3VsdCk7CisgICAgICAgIG1BY3RpdmVUcmFja3NbMF0tPmFwcGVuZER1bXBIZWFkZXIocmVzdWx0KTsKICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBudW1hY3RpdmU7ICsraSkgewogICAgICAgICAgICAgc3A8VHJhY2s+IHRyYWNrID0gbUFjdGl2ZVRyYWNrc1tpXTsKICAgICAgICAgICAgIGlmIChtVHJhY2tzLmluZGV4T2YodHJhY2spIDwgMCkgewpAQCAtMTgxMCw2ICsxODQ0LDcgQEAKIHsKICAgICBkdW1wQmFzZShmZCwgYXJncyk7CiAKKyAgICBkcHJpbnRmKGZkLCAiICBNYXN0ZXIgbXV0ZTogJXNcbiIsIG1NYXN0ZXJNdXRlID8gIm9uIiA6ICJvZmYiKTsKICAgICBkcHJpbnRmKGZkLCAiICBOb3JtYWwgZnJhbWUgY291bnQ6ICV6dVxuIiwgbU5vcm1hbEZyYW1lQ291bnQpOwogICAgIGRwcmludGYoZmQsICIgIExhc3Qgd3JpdGUgb2NjdXJyZWQgKG1zZWNzKTogJWxsdVxuIiwKICAgICAgICAgICAgICh1bnNpZ25lZCBsb25nIGxvbmcpIG5zMm1zKHN5c3RlbVRpbWUoKSAtIG1MYXN0V3JpdGVUaW1lKSk7CkBAIC0xODgwLDExICsxOTE1LDE3IEBACiAgICAgc3RhdHVzX3QgbFN0YXR1czsKICAgICBhdWRpb19vdXRwdXRfZmxhZ3NfdCBvdXRwdXRGbGFncyA9IG1PdXRwdXQtPmZsYWdzOwogICAgIGF1ZGlvX291dHB1dF9mbGFnc190IHJlcXVlc3RlZEZsYWdzID0gKmZsYWdzOworICAgIHVpbnQzMl90IHNhbXBsZVJhdGU7CisKKyAgICBpZiAoc2hhcmVkQnVmZmVyICE9IDAgJiYgY2hlY2tJTWVtb3J5KHNoYXJlZEJ1ZmZlcikgIT0gTk9fRVJST1IpIHsKKyAgICAgICAgbFN0YXR1cyA9IEJBRF9WQUxVRTsKKyAgICAgICAgZ290byBFeGl0OworICAgIH0KIAogICAgIGlmICgqcFNhbXBsZVJhdGUgPT0gMCkgewogICAgICAgICAqcFNhbXBsZVJhdGUgPSBtU2FtcGxlUmF0ZTsKICAgICB9Ci0gICAgdWludDMyX3Qgc2FtcGxlUmF0ZSA9ICpwU2FtcGxlUmF0ZTsKKyAgICBzYW1wbGVSYXRlID0gKnBTYW1wbGVSYXRlOwogCiAgICAgLy8gc3BlY2lhbCBjYXNlIGZvciBGQVNUIGZsYWcgY29uc2lkZXJlZCBPSyBpZiBmYXN0IG1peGVyIGlzIHByZXNlbnQKICAgICBpZiAoaGFzRmFzdE1peGVyKCkpIHsKQEAgLTIxNzQsNDggKzIyMTUsMTcgQEAKIH0KIAogdGVtcGxhdGU8dHlwZW5hbWUgVD4KLXNzaXplX3QgQXVkaW9GbGluZ2VyOjpQbGF5YmFja1RocmVhZDo6VHJhY2tzPFQ+OjphZGQoY29uc3Qgc3A8VD4gJnRyYWNrKQotewotICAgIGNvbnN0IHNzaXplX3QgaW5kZXggPSBtVHJhY2tzLmFkZCh0cmFjayk7Ci0gICAgaWYgKGluZGV4ID49IDApIHsKLSAgICAgICAgLy8gc2V0IG5hbWUgZm9yIHRyYWNrIHdoZW4gYWRkaW5nLgotICAgICAgICBpbnQgbmFtZTsKLSAgICAgICAgaWYgKG1VbnVzZWRUcmFja05hbWVzLmVtcHR5KCkpIHsKLSAgICAgICAgICAgIG5hbWUgPSBtVHJhY2tzLnNpemUoKSAtIDE7IC8vIG5ldyBuYW1lIHswIC4uLiBzaXplLTF9LgotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgLy8gcmV1c2Ugc21hbGxlc3QgbmFtZSBmb3IgZGVsZXRlZCB0cmFjay4KLSAgICAgICAgICAgIGF1dG8gaXQgPSBtVW51c2VkVHJhY2tOYW1lcy5iZWdpbigpOwotICAgICAgICAgICAgbmFtZSA9ICppdDsKLSAgICAgICAgICAgICh2b2lkKW1VbnVzZWRUcmFja05hbWVzLmVyYXNlKGl0KTsKLSAgICAgICAgfQotICAgICAgICB0cmFjay0+c2V0TmFtZShuYW1lKTsKLSAgICB9IGVsc2UgewotICAgICAgICBMT0dfQUxXQVlTX0ZBVEFMKCJjYW5ub3QgYWRkIHRyYWNrIik7Ci0gICAgfQotICAgIHJldHVybiBpbmRleDsKLX0KLQotdGVtcGxhdGU8dHlwZW5hbWUgVD4KIHNzaXplX3QgQXVkaW9GbGluZ2VyOjpQbGF5YmFja1RocmVhZDo6VHJhY2tzPFQ+OjpyZW1vdmUoY29uc3Qgc3A8VD4gJnRyYWNrKQogewotICAgIGNvbnN0IGludCBuYW1lID0gdHJhY2stPm5hbWUoKTsKKyAgICBjb25zdCBpbnQgdHJhY2tJZCA9IHRyYWNrLT5pZCgpOwogICAgIGNvbnN0IHNzaXplX3QgaW5kZXggPSBtVHJhY2tzLnJlbW92ZSh0cmFjayk7CiAgICAgaWYgKGluZGV4ID49IDApIHsKLSAgICAgICAgLy8gaW52YWxpZGF0ZSBuYW1lIHdoZW4gcmVtb3ZpbmcgZnJvbSBtVHJhY2tzLgotICAgICAgICBMT0dfQUxXQVlTX0ZBVEFMX0lGKG5hbWUgPCAwLCAiaW52YWxpZCBuYW1lICVkIGZvciB0cmFjayBvbiBtVHJhY2tzIiwgbmFtZSk7Ci0KLSAgICAgICAgaWYgKG1TYXZlRGVsZXRlZFRyYWNrTmFtZXMpIHsKKyAgICAgICAgaWYgKG1TYXZlRGVsZXRlZFRyYWNrSWRzKSB7CiAgICAgICAgICAgICAvLyBXZSBjYW4ndCBkaXJlY3RseSBhY2Nlc3MgbUF1ZGlvTWl4ZXIgc2luY2UgdGhlIGNhbGxlciBtYXkgYmUgb3V0c2lkZSBvZiB0aHJlYWRMb29wLgotICAgICAgICAgICAgLy8gSW5zdGVhZCwgd2UgYWRkIHRvIG1EZWxldGVkVHJhY2tOYW1lcyB3aGljaCBpcyBzb2xlbHkgdXNlZCBmb3IgbUF1ZGlvTWl4ZXIgdXBkYXRlLAorICAgICAgICAgICAgLy8gSW5zdGVhZCwgd2UgYWRkIHRvIG1EZWxldGVkVHJhY2tJZHMgd2hpY2ggaXMgc29sZWx5IHVzZWQgZm9yIG1BdWRpb01peGVyIHVwZGF0ZSwKICAgICAgICAgICAgIC8vIHRvIGJlIGhhbmRsZWQgd2hlbiBNaXhlclRocmVhZDo6cHJlcGFyZVRyYWNrc19sKCkgbmV4dCBjaGFuZ2VzIG1BdWRpb01peGVyLgotICAgICAgICAgICAgbURlbGV0ZWRUcmFja05hbWVzLmVtcGxhY2UobmFtZSk7CisgICAgICAgICAgICBtRGVsZXRlZFRyYWNrSWRzLmVtcGxhY2UodHJhY2tJZCk7CiAgICAgICAgIH0KLQotICAgICAgICBtVW51c2VkVHJhY2tOYW1lcy5lbXBsYWNlKG5hbWUpOwotICAgICAgICB0cmFjay0+c2V0TmFtZShUOjpUUkFDS19OQU1FX1BFTkRJTkcpOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIExPR19BTFdBWVNfRkFUQUxfSUYobmFtZSA+PSAwLAotICAgICAgICAgICAgICAgICJ2YWxpZCBuYW1lICVkIGZvciB0cmFjayBub3QgaW4gbVRyYWNrcyAocmV0dXJuZWQgJXpkKSIsIG5hbWUsIGluZGV4KTsKICAgICB9CiAgICAgcmV0dXJuIGluZGV4OwogfQpAQCAtMjMwMywxNSArMjMxMywxMyBAQAogICAgICAgICBpZiAodHJhY2stPmlzRXh0ZXJuYWxUcmFjaygpKSB7CiAgICAgICAgICAgICBUcmFja0Jhc2U6OnRyYWNrX3N0YXRlIHN0YXRlID0gdHJhY2stPm1TdGF0ZTsKICAgICAgICAgICAgIG1Mb2NrLnVubG9jaygpOwotICAgICAgICAgICAgc3RhdHVzID0gQXVkaW9TeXN0ZW06OnN0YXJ0T3V0cHV0KG1JZCwgdHJhY2stPnN0cmVhbVR5cGUoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cmFjay0+c2Vzc2lvbklkKCkpOworICAgICAgICAgICAgc3RhdHVzID0gQXVkaW9TeXN0ZW06OnN0YXJ0T3V0cHV0KHRyYWNrLT5wb3J0SWQoKSk7CiAgICAgICAgICAgICBtTG9jay5sb2NrKCk7CiAgICAgICAgICAgICAvLyBhYm9ydCB0cmFjayB3YXMgc3RvcHBlZC9wYXVzZWQgd2hpbGUgd2UgcmVsZWFzZWQgdGhlIGxvY2sKICAgICAgICAgICAgIGlmIChzdGF0ZSAhPSB0cmFjay0+bVN0YXRlKSB7CiAgICAgICAgICAgICAgICAgaWYgKHN0YXR1cyA9PSBOT19FUlJPUikgewogICAgICAgICAgICAgICAgICAgICBtTG9jay51bmxvY2soKTsKLSAgICAgICAgICAgICAgICAgICAgQXVkaW9TeXN0ZW06OnN0b3BPdXRwdXQobUlkLCB0cmFjay0+c3RyZWFtVHlwZSgpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cmFjay0+c2Vzc2lvbklkKCkpOworICAgICAgICAgICAgICAgICAgICBBdWRpb1N5c3RlbTo6c3RvcE91dHB1dCh0cmFjay0+cG9ydElkKCkpOwogICAgICAgICAgICAgICAgICAgICBtTG9jay5sb2NrKCk7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIHJldHVybiBJTlZBTElEX09QRVJBVElPTjsKQEAgLTI0NjIsNiArMjQ3MCwxMSBAQAogICAgIE11dGV4OjpBdXRvbG9jayBfbChtTG9jayk7CiAgICAgLy8gcmVqZWN0IG91dCBvZiBzZXF1ZW5jZSByZXF1ZXN0cwogICAgIGlmICgobURyYWluU2VxdWVuY2UgJiAxKSAmJiAoc2VxdWVuY2UgPT0gbURyYWluU2VxdWVuY2UpKSB7CisgICAgICAgIC8vIFJlZ2lzdGVyIGRpc2NvbnRpbnVpdHkgd2hlbiBIVyBkcmFpbiBpcyBjb21wbGV0ZWQgYmVjYXVzZSB0aGF0IGNhbiBjYXVzZQorICAgICAgICAvLyB0aGUgdGltZXN0YW1wIGZyYW1lIHBvc2l0aW9uIHRvIHJlc2V0IHRvIDAgZm9yIGRpcmVjdCBhbmQgb2ZmbG9hZCB0aHJlYWRzLgorICAgICAgICAvLyAoT3V0IG9mIHNlcXVlbmNlIHJlcXVlc3RzIGFyZSBpZ25vcmVkLCBzaW5jZSB0aGUgZGlzY29udGludWl0eSB3b3VsZCBiZSBoYW5kbGVkCisgICAgICAgIC8vIGVsc2V3aGVyZSwgZS5nLiBpbiBmbHVzaCkuCisgICAgICAgIG1UaW1lc3RhbXBWZXJpZmllci5kaXNjb250aW51aXR5KCk7CiAgICAgICAgIG1EcmFpblNlcXVlbmNlICY9IH4xOwogICAgICAgICBtV2FpdFdvcmtDVi5zaWduYWwoKTsKICAgICB9CkBAIC0yNzgxLDI0ICsyNzk0LDE4IEBACiB2b2lkIEF1ZGlvRmxpbmdlcjo6UGxheWJhY2tUaHJlYWQ6OnRocmVhZExvb3BfcmVtb3ZlVHJhY2tzKAogICAgICAgICBjb25zdCBWZWN0b3I8IHNwPFRyYWNrPiA+JiB0cmFja3NUb1JlbW92ZSkKIHsKLSAgICBzaXplX3QgY291bnQgPSB0cmFja3NUb1JlbW92ZS5zaXplKCk7Ci0gICAgaWYgKGNvdW50ID4gMCkgewotICAgICAgICBmb3IgKHNpemVfdCBpID0gMCA7IGkgPCBjb3VudCA7IGkrKykgewotICAgICAgICAgICAgY29uc3Qgc3A8VHJhY2s+JiB0cmFjayA9IHRyYWNrc1RvUmVtb3ZlLml0ZW1BdChpKTsKLSAgICAgICAgICAgIGlmICh0cmFjay0+aXNFeHRlcm5hbFRyYWNrKCkpIHsKLSAgICAgICAgICAgICAgICBBdWRpb1N5c3RlbTo6c3RvcE91dHB1dChtSWQsIHRyYWNrLT5zdHJlYW1UeXBlKCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJhY2stPnNlc3Npb25JZCgpKTsKKyAgICAvLyBNaXNjZWxsYW5lb3VzIHRyYWNrIGNsZWFudXAgd2hlbiByZW1vdmVkIGZyb20gdGhlIGFjdGl2ZSBsaXN0LAorICAgIC8vIGNhbGxlZCB3aXRob3V0IFRocmVhZCBsb2NrIGJ1dCBzeW5jaHJvbml6ZWQgd2l0aCB0aHJlYWRMb29wIHByb2Nlc3NpbmcuCiAjaWZkZWYgQUREX0JBVFRFUllfREFUQQotICAgICAgICAgICAgICAgIC8vIHRvIHRyYWNrIHRoZSBzcGVha2VyIHVzYWdlCi0gICAgICAgICAgICAgICAgYWRkQmF0dGVyeURhdGEoSU1lZGlhUGxheWVyU2VydmljZTo6a0JhdHRlcnlEYXRhQXVkaW9GbGluZ2VyU3RvcCk7Ci0jZW5kaWYKLSAgICAgICAgICAgICAgICBpZiAodHJhY2stPmlzVGVybWluYXRlZCgpKSB7Ci0gICAgICAgICAgICAgICAgICAgIEF1ZGlvU3lzdGVtOjpyZWxlYXNlT3V0cHV0KG1JZCwgdHJhY2stPnN0cmVhbVR5cGUoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJhY2stPnNlc3Npb25JZCgpKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9CisgICAgZm9yIChjb25zdCBhdXRvJiB0cmFjayA6IHRyYWNrc1RvUmVtb3ZlKSB7CisgICAgICAgIGlmICh0cmFjay0+aXNFeHRlcm5hbFRyYWNrKCkpIHsKKyAgICAgICAgICAgIC8vIHRvIHRyYWNrIHRoZSBzcGVha2VyIHVzYWdlCisgICAgICAgICAgICBhZGRCYXR0ZXJ5RGF0YShJTWVkaWFQbGF5ZXJTZXJ2aWNlOjprQmF0dGVyeURhdGFBdWRpb0ZsaW5nZXJTdG9wKTsKICAgICAgICAgfQogICAgIH0KKyNlbHNlCisgICAgKHZvaWQpdHJhY2tzVG9SZW1vdmU7IC8vIHN1cHByZXNzIHVudXNlZCB3YXJuaW5nCisjZW5kaWYKIH0KIAogdm9pZCBBdWRpb0ZsaW5nZXI6OlBsYXliYWNrVGhyZWFkOjpjaGVja1NpbGVudE1vZGVfbCgpCkBAIC0yODUwLDYgKzI4NTcsOSBAQAogICAgICAgICBBVFJBQ0VfRU5EKCk7CiAgICAgICAgIGlmIChmcmFtZXNXcml0dGVuID4gMCkgewogICAgICAgICAgICAgYnl0ZXNXcml0dGVuID0gZnJhbWVzV3JpdHRlbiAqIG1GcmFtZVNpemU7CisjaWZkZWYgVEVFX1NJTksKKyAgICAgICAgICAgIG1UZWUud3JpdGUoKGNoYXIgKiltU2lua0J1ZmZlciArIG9mZnNldCwgZnJhbWVzV3JpdHRlbik7CisjZW5kaWYKICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIGJ5dGVzV3JpdHRlbiA9IGZyYW1lc1dyaXR0ZW47CiAgICAgICAgIH0KQEAgLTMxNjcsNiArMzE3NywxNiBAQAogCiAgICAgY2hlY2tTaWxlbnRNb2RlX2woKTsKIAorICAgIC8vIERJUkVDVCBhbmQgT0ZGTE9BRCB0aHJlYWRzIHNob3VsZCByZXNldCBmcmFtZSBjb3VudCB0byB6ZXJvIG9uIHN0b3AvZmx1c2gKKyAgICAvLyBUT0RPOiBhZGQgY29uZmlybWF0aW9uIGNoZWNrczoKKyAgICAvLyAxKSBESVJFQ1QgdGhyZWFkcyBhbmQgbGluZWFyIFBDTSBmb3JtYXQgcmVhbGx5IHJlc2V0cyB0byAwPworICAgIC8vIDIpIElzIGZyYW1lIGNvdW50IHJlYWxseSB2YWxpZCBpZiBub3QgbGluZWFyIHBjbT8KKyAgICAvLyAzKSBBcmUgYWxsIDY0IGJpdHMgb2YgcG9zaXRpb24gcmV0dXJuZWQsIG5vdCBqdXN0IGxvd2VzdCAzMiBiaXRzPworICAgIGlmIChtVHlwZSA9PSBPRkZMT0FEIHx8IG1UeXBlID09IERJUkVDVCkgeworICAgICAgICBtVGltZXN0YW1wVmVyaWZpZXIuc2V0RGlzY29udGludWl0eU1vZGUobVRpbWVzdGFtcFZlcmlmaWVyLkRJU0NPTlRJTlVJVFlfTU9ERV9aRVJPKTsKKyAgICB9CisgICAgYXVkaW9fcGF0Y2hfaGFuZGxlX3QgbGFzdERvd25zdHJlYW1QYXRjaEhhbmRsZSA9IEFVRElPX1BBVENIX0hBTkRMRV9OT05FOworCiAgICAgd2hpbGUgKCFleGl0UGVuZGluZygpKQogICAgIHsKICAgICAgICAgLy8gTG9nIG1lcmdlIHJlcXVlc3RzIGFyZSBwZXJmb3JtZWQgZHVyaW5nIEF1ZGlvRmxpbmdlciBiaW5kZXIgdHJhbnNhY3Rpb25zLCBidXQKQEAgLTMxNzcsNiArMzE5Nyw0OSBAQAogCiAgICAgICAgIFZlY3Rvcjwgc3A8RWZmZWN0Q2hhaW4+ID4gZWZmZWN0Q2hhaW5zOwogCisgICAgICAgIC8vIElmIHRoZSBkZXZpY2UgaXMgQVVESU9fREVWSUNFX09VVF9CVVMsIGNoZWNrIGZvciBkb3duc3RyZWFtIGxhdGVuY3kuCisgICAgICAgIC8vCisgICAgICAgIC8vIE5vdGU6IHdlIGFjY2VzcyBvdXREZXZpY2UoKSBvdXRzaWRlIG9mIG1Mb2NrLgorICAgICAgICBpZiAoaXNNc2REZXZpY2UoKSAmJiAob3V0RGV2aWNlKCkgJiBBVURJT19ERVZJQ0VfT1VUX0JVUykgIT0gMCkgeworICAgICAgICAgICAgLy8gSGVyZSwgd2UgdHJ5IGZvciB0aGUgQUYgbG9jaywgYnV0IGRvIG5vdCBibG9jayBvbiBpdCBhcyB0aGUgbGF0ZW5jeQorICAgICAgICAgICAgLy8gaXMgbW9yZSBpbmZvcm1hdGlvbmFsLgorICAgICAgICAgICAgaWYgKG1BdWRpb0ZsaW5nZXItPm1Mb2NrLnRyeUxvY2soKSA9PSBOT19FUlJPUikgeworICAgICAgICAgICAgICAgIHN0ZDo6dmVjdG9yPFBhdGNoUGFuZWw6OlNvZnR3YXJlUGF0Y2g+IHN3UGF0Y2hlczsKKyAgICAgICAgICAgICAgICBkb3VibGUgbGF0ZW5jeU1zOworICAgICAgICAgICAgICAgIHN0YXR1c190IHN0YXR1cyA9IElOVkFMSURfT1BFUkFUSU9OOworICAgICAgICAgICAgICAgIGF1ZGlvX3BhdGNoX2hhbmRsZV90IGRvd25zdHJlYW1QYXRjaEhhbmRsZSA9IEFVRElPX1BBVENIX0hBTkRMRV9OT05FOworICAgICAgICAgICAgICAgIGlmIChtQXVkaW9GbGluZ2VyLT5tUGF0Y2hQYW5lbC5nZXREb3duc3RyZWFtU29mdHdhcmVQYXRjaGVzKGlkKCksICZzd1BhdGNoZXMpID09IE9LCisgICAgICAgICAgICAgICAgICAgICAgICAmJiBzd1BhdGNoZXMuc2l6ZSgpID4gMCkgeworICAgICAgICAgICAgICAgICAgICAgICAgc3RhdHVzID0gc3dQYXRjaGVzWzBdLmdldExhdGVuY3lNc19sKCZsYXRlbmN5TXMpOworICAgICAgICAgICAgICAgICAgICAgICAgZG93bnN0cmVhbVBhdGNoSGFuZGxlID0gc3dQYXRjaGVzWzBdLmdldFBhdGNoSGFuZGxlKCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGlmIChkb3duc3RyZWFtUGF0Y2hIYW5kbGUgIT0gbGFzdERvd25zdHJlYW1QYXRjaEhhbmRsZSkgeworICAgICAgICAgICAgICAgICAgICBtRG93bnN0cmVhbUxhdGVuY3lTdGF0TXMucmVzZXQoKTsKKyAgICAgICAgICAgICAgICAgICAgbGFzdERvd25zdHJlYW1QYXRjaEhhbmRsZSA9IGRvd25zdHJlYW1QYXRjaEhhbmRsZTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgaWYgKHN0YXR1cyA9PSBPSykgeworICAgICAgICAgICAgICAgICAgICAvLyB2ZXJpZnkgZG93bnN0cmVhbSBsYXRlbmN5ICh3ZSBhc3N1bWUgYSBtYXggcmVhc29uYWJsZQorICAgICAgICAgICAgICAgICAgICAvLyBsYXRlbmN5IG9mIDUgc2Vjb25kcykuCisgICAgICAgICAgICAgICAgICAgIGNvbnN0IGRvdWJsZSBtaW5MYXRlbmN5ID0gMC4sIG1heExhdGVuY3kgPSA1MDAwLjsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGxhdGVuY3lNcyA+PSBtaW5MYXRlbmN5ICYmIGxhdGVuY3lNcyA8PSBtYXhMYXRlbmN5KSB7CisgICAgICAgICAgICAgICAgICAgICAgICBBTE9HVigibmV3IGRvd25zdHJlYW0gbGF0ZW5jeSAlbGYgbXMiLCBsYXRlbmN5TXMpOworICAgICAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICAgICAgQUxPR0QoIm91dCBvZiByYW5nZSBkb3duc3RyZWFtIGxhdGVuY3kgJWxmIG1zIiwgbGF0ZW5jeU1zKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChsYXRlbmN5TXMgPCBtaW5MYXRlbmN5KSBsYXRlbmN5TXMgPSBtaW5MYXRlbmN5OworICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAobGF0ZW5jeU1zID4gbWF4TGF0ZW5jeSkgbGF0ZW5jeU1zID0gbWF4TGF0ZW5jeTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBtRG93bnN0cmVhbUxhdGVuY3lTdGF0TXMuYWRkKGxhdGVuY3lNcyk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIG1BdWRpb0ZsaW5nZXItPm1Mb2NrLnVubG9jaygpOworICAgICAgICAgICAgfQorICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgaWYgKGxhc3REb3duc3RyZWFtUGF0Y2hIYW5kbGUgIT0gQVVESU9fUEFUQ0hfSEFORExFX05PTkUpIHsKKyAgICAgICAgICAgICAgICAvLyBvdXIgZGV2aWNlIGlzIG5vIGxvbmdlciBBVURJT19ERVZJQ0VfT1VUX0JVUywgcmVzZXQgcGF0Y2ggaGFuZGxlIGFuZCBzdGF0cy4KKyAgICAgICAgICAgICAgICBtRG93bnN0cmVhbUxhdGVuY3lTdGF0TXMucmVzZXQoKTsKKyAgICAgICAgICAgICAgICBsYXN0RG93bnN0cmVhbVBhdGNoSGFuZGxlID0gQVVESU9fUEFUQ0hfSEFORExFX05PTkU7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKwogICAgICAgICB7IC8vIHNjb3BlIGZvciBtTG9jawogCiAgICAgICAgICAgICBNdXRleDo6QXV0b2xvY2sgX2wobUxvY2spOwpAQCAtMzE5MCwxNiArMzI1Myw1MSBAQAogICAgICAgICAgICAgICAgIGxvZ1N0cmluZyA9IE5VTEw7CiAgICAgICAgICAgICB9CiAKKyAgICAgICAgICAgIC8vIENvbGxlY3QgdGltZXN0YW1wIHN0YXRpc3RpY3MgZm9yIHRoZSBQbGF5YmFjayBUaHJlYWQgdHlwZXMgdGhhdCBzdXBwb3J0IGl0LgorICAgICAgICAgICAgaWYgKG1UeXBlID09IE1JWEVSCisgICAgICAgICAgICAgICAgICAgIHx8IG1UeXBlID09IERVUExJQ0FUSU5HCisgICAgICAgICAgICAgICAgICAgIHx8IG1UeXBlID09IERJUkVDVAorICAgICAgICAgICAgICAgICAgICB8fCBtVHlwZSA9PSBPRkZMT0FEKSB7IC8vIG5vIGluZGVudGF0aW9uCiAgICAgICAgICAgICAvLyBHYXRoZXIgdGhlIGZyYW1lc1JlbGVhc2VkIGNvdW50ZXJzIGZvciBhbGwgYWN0aXZlIHRyYWNrcywKICAgICAgICAgICAgIC8vIGFuZCBhc3NvY2lhdGUgd2l0aCB0aGUgc2luayBmcmFtZXMgd3JpdHRlbiBvdXQuICBXZSBuZWVkCiAgICAgICAgICAgICAvLyB0aGlzIHRvIGNvbnZlcnQgdGhlIHNpbmsgdGltZXN0YW1wIHRvIHRoZSB0cmFjayB0aW1lc3RhbXAuCiAgICAgICAgICAgICBib29sIGtlcm5lbExvY2F0aW9uVXBkYXRlID0gZmFsc2U7Ci0gICAgICAgICAgICBpZiAobU5vcm1hbFNpbmsgIT0gMCkgewotICAgICAgICAgICAgICAgIC8vIE5vdGU6IFRoZSBEdXBsaWNhdGluZ1RocmVhZCBtYXkgbm90IGhhdmUgYSBtTm9ybWFsU2luay4KKyAgICAgICAgICAgIEV4dGVuZGVkVGltZXN0YW1wIHRpbWVzdGFtcDsgLy8gdXNlIHByaXZhdGUgY29weSB0byBmZXRjaAorICAgICAgICAgICAgaWYgKG1TdGFuZGJ5KSB7CisgICAgICAgICAgICAgICAgbVRpbWVzdGFtcFZlcmlmaWVyLmRpc2NvbnRpbnVpdHkoKTsKKyAgICAgICAgICAgIH0gZWxzZSBpZiAodGhyZWFkbG9vcF9nZXRIYWxUaW1lc3RhbXBfbCgmdGltZXN0YW1wKSA9PSBPSykgeworICAgICAgICAgICAgICAgIG1UaW1lc3RhbXBWZXJpZmllci5hZGQodGltZXN0YW1wLm1Qb3NpdGlvbltFeHRlbmRlZFRpbWVzdGFtcDo6TE9DQVRJT05fS0VSTkVMXSwKKyAgICAgICAgICAgICAgICAgICAgICAgIHRpbWVzdGFtcC5tVGltZU5zW0V4dGVuZGVkVGltZXN0YW1wOjpMT0NBVElPTl9LRVJORUxdLAorICAgICAgICAgICAgICAgICAgICAgICAgbVNhbXBsZVJhdGUpOworCisgICAgICAgICAgICAgICAgaWYgKGlzVGltZXN0YW1wQ29ycmVjdGlvbkVuYWJsZWQoKSkgeworICAgICAgICAgICAgICAgICAgICBBTE9HVigiVFNfQkVGT1JFOiAlZCAlbGxkICVsbGQiLCBpZCgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsb25nIGxvbmcpdGltZXN0YW1wLm1UaW1lTnNbRXh0ZW5kZWRUaW1lc3RhbXA6OkxPQ0FUSU9OX0tFUk5FTF0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxvbmcgbG9uZyl0aW1lc3RhbXAubVBvc2l0aW9uW0V4dGVuZGVkVGltZXN0YW1wOjpMT0NBVElPTl9LRVJORUxdKTsKKyAgICAgICAgICAgICAgICAgICAgYXV0byBjb3JyZWN0ZWRUaW1lc3RhbXAgPSBtVGltZXN0YW1wVmVyaWZpZXIuZ2V0TGFzdENvcnJlY3RlZFRpbWVzdGFtcCgpOworICAgICAgICAgICAgICAgICAgICB0aW1lc3RhbXAubVBvc2l0aW9uW0V4dGVuZGVkVGltZXN0YW1wOjpMT0NBVElPTl9LRVJORUxdCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPSBjb3JyZWN0ZWRUaW1lc3RhbXAubUZyYW1lczsKKyAgICAgICAgICAgICAgICAgICAgdGltZXN0YW1wLm1UaW1lTnNbRXh0ZW5kZWRUaW1lc3RhbXA6OkxPQ0FUSU9OX0tFUk5FTF0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA9IGNvcnJlY3RlZFRpbWVzdGFtcC5tVGltZU5zOworICAgICAgICAgICAgICAgICAgICBBTE9HVigiVFNfQUZURVI6ICVkICVsbGQgJWxsZCIsIGlkKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxvbmcgbG9uZyl0aW1lc3RhbXAubVRpbWVOc1tFeHRlbmRlZFRpbWVzdGFtcDo6TE9DQVRJT05fS0VSTkVMXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAobG9uZyBsb25nKXRpbWVzdGFtcC5tUG9zaXRpb25bRXh0ZW5kZWRUaW1lc3RhbXA6OkxPQ0FUSU9OX0tFUk5FTF0pOworCisgICAgICAgICAgICAgICAgICAgIC8vIE5vdGU6IERvd25zdHJlYW0gbGF0ZW5jeSBvbmx5IGFkZGVkIGlmIHRpbWVzdGFtcCBjb3JyZWN0aW9uIGVuYWJsZWQuCisgICAgICAgICAgICAgICAgICAgIGlmIChtRG93bnN0cmVhbUxhdGVuY3lTdGF0TXMuZ2V0TigpID4gMCkgeyAvLyB3ZSBoYXZlIGxhdGVuY3kgaW5mby4KKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGludDY0X3QgbmV3UG9zaXRpb24gPQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aW1lc3RhbXAubVBvc2l0aW9uW0V4dGVuZGVkVGltZXN0YW1wOjpMT0NBVElPTl9LRVJORUxdCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0gaW50NjRfdChtRG93bnN0cmVhbUxhdGVuY3lTdGF0TXMuZ2V0TWVhbigpICogbVNhbXBsZVJhdGUgKiAxZS0zKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIHByZXZlbnQgcmV0cm9ncmFkZQorICAgICAgICAgICAgICAgICAgICAgICAgdGltZXN0YW1wLm1Qb3NpdGlvbltFeHRlbmRlZFRpbWVzdGFtcDo6TE9DQVRJT05fS0VSTkVMXSA9IG1heCgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3UG9zaXRpb24sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChtVGltZXN0YW1wLm1Qb3NpdGlvbltFeHRlbmRlZFRpbWVzdGFtcDo6TE9DQVRJT05fS0VSTkVMXQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0gbVN1c3BlbmRlZEZyYW1lcykpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorCiAgICAgICAgICAgICAgICAgLy8gV2UgYWx3YXlzIGZldGNoIHRoZSB0aW1lc3RhbXAgaGVyZSBiZWNhdXNlIG9mdGVuIHRoZSBkb3duc3RyZWFtCiAgICAgICAgICAgICAgICAgLy8gc2luayB3aWxsIGJsb2NrIHdoaWxlIHdyaXRpbmcuCi0gICAgICAgICAgICAgICAgRXh0ZW5kZWRUaW1lc3RhbXAgdGltZXN0YW1wOyAvLyB1c2UgcHJpdmF0ZSBjb3B5IHRvIGZldGNoCi0gICAgICAgICAgICAgICAgKHZvaWQpIG1Ob3JtYWxTaW5rLT5nZXRUaW1lc3RhbXAodGltZXN0YW1wKTsKIAogICAgICAgICAgICAgICAgIC8vIFdlIGtlZXAgdHJhY2sgb2YgdGhlIGxhc3QgdmFsaWQga2VybmVsIHBvc2l0aW9uIGluIGNhc2Ugd2UgYXJlIGluIHVuZGVycnVuCiAgICAgICAgICAgICAgICAgLy8gYW5kIHRoZSBub3JtYWwgbWl4ZXIgcGVyaW9kIGlzIHRoZSBzYW1lIGFzIHRoZSBmYXN0IG1peGVyIHBlcmlvZCwgb3IgdGhlcmUKQEAgLTMyMjgsNyArMzMyNiwxMCBAQAogICAgICAgICAgICAgICAgICAgICAgICAgKyBtU3VzcGVuZGVkRnJhbWVzOyAvLyBhZGQgZnJhbWVzIGRpc2NhcmRlZCB3aGVuIHN1c3BlbmRlZAogICAgICAgICAgICAgICAgIG1UaW1lc3RhbXAubVRpbWVOc1tFeHRlbmRlZFRpbWVzdGFtcDo6TE9DQVRJT05fS0VSTkVMXSA9CiAgICAgICAgICAgICAgICAgICAgICAgICB0aW1lc3RhbXAubVRpbWVOc1tFeHRlbmRlZFRpbWVzdGFtcDo6TE9DQVRJT05fS0VSTkVMXTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgbVRpbWVzdGFtcFZlcmlmaWVyLmVycm9yKCk7CiAgICAgICAgICAgICB9CisKICAgICAgICAgICAgIC8vIG1GcmFtZXNXcml0dGVuIGZvciBub24tb2ZmbG9hZGVkIHRyYWNrcyBhcmUgY29udGlndW91cwogICAgICAgICAgICAgLy8gZXZlbiBhZnRlciBzdGFuZGJ5KCkgaXMgY2FsbGVkLiBUaGlzIGlzIHVzZWZ1bCBmb3IgdGhlIHRyYWNrIGZyYW1lCiAgICAgICAgICAgICAvLyB0byBzaW5rIGZyYW1lIG1hcHBpbmcuCkBAIC0zMjU2LDEwICszMzU3LDEyIEBACiAgICAgICAgICAgICAgICAgICAgICAgICB0LT51cGRhdGVUcmFja0ZyYW1lSW5mbygKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdC0+bUF1ZGlvVHJhY2tTZXJ2ZXJQcm94eS0+ZnJhbWVzUmVsZWFzZWQoKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbUZyYW1lc1dyaXR0ZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1TYW1wbGVSYXRlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtVGltZXN0YW1wKTsKICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0gLy8gaWYgKG1UeXBlIC4uLiApIHsgLy8gbm8gaW5kZW50YXRpb24KICNpZiAwCiAgICAgICAgICAgICAvLyBsb2dGb3JtYXQgZXhhbXBsZQogICAgICAgICAgICAgaWYgKHogJSAxMDAgPT0gMCkgewpAQCAtMzMwMCw3ICszNDAzLDcgQEAKIAogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYgKCghbUFjdGl2ZVRyYWNrcy5zaXplKCkgJiYgc3lzdGVtVGltZSgpID4gbVN0YW5kYnlUaW1lTnMpIHx8CisgICAgICAgICAgICBpZiAoKG1BY3RpdmVUcmFja3MuaXNFbXB0eSgpICYmIHN5c3RlbVRpbWUoKSA+IG1TdGFuZGJ5VGltZU5zKSB8fAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpc1N1c3BlbmRlZCgpKSB7CiAgICAgICAgICAgICAgICAgLy8gcHV0IGF1ZGlvIGhhcmR3YXJlIGludG8gc3RhbmRieSBhZnRlciBzaG9ydCBkZWxheQogICAgICAgICAgICAgICAgIGlmIChzaG91bGRTdGFuZGJ5X2woKSkgewpAQCAtMzMxNCw3ICszNDE3LDcgQEAKICAgICAgICAgICAgICAgICAgICAgbVN0YW5kYnkgPSB0cnVlOwogICAgICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgICAgIGlmICghbUFjdGl2ZVRyYWNrcy5zaXplKCkgJiYgbUNvbmZpZ0V2ZW50cy5pc0VtcHR5KCkpIHsKKyAgICAgICAgICAgICAgICBpZiAobUFjdGl2ZVRyYWNrcy5pc0VtcHR5KCkgJiYgbUNvbmZpZ0V2ZW50cy5pc0VtcHR5KCkpIHsKICAgICAgICAgICAgICAgICAgICAgLy8gd2UncmUgYWJvdXQgdG8gd2FpdCwgZmx1c2ggdGhlIGJpbmRlciBjb21tYW5kIGJ1ZmZlcgogICAgICAgICAgICAgICAgICAgICBJUENUaHJlYWRTdGF0ZTo6c2VsZigpLT5mbHVzaENvbW1hbmRzKCk7CiAKQEAgLTM2MDUsMjQgKzM3MDgsMjggQEAKIC8vIHJlbW92ZVRyYWNrc19sKCkgbXVzdCBiZSBjYWxsZWQgd2l0aCBUaHJlYWRCYXNlOjptTG9jayBoZWxkCiB2b2lkIEF1ZGlvRmxpbmdlcjo6UGxheWJhY2tUaHJlYWQ6OnJlbW92ZVRyYWNrc19sKGNvbnN0IFZlY3Rvcjwgc3A8VHJhY2s+ID4mIHRyYWNrc1RvUmVtb3ZlKQogewotICAgIHNpemVfdCBjb3VudCA9IHRyYWNrc1RvUmVtb3ZlLnNpemUoKTsKLSAgICBpZiAoY291bnQgPiAwKSB7Ci0gICAgICAgIGZvciAoc2l6ZV90IGk9MCA7IGk8Y291bnQgOyBpKyspIHsKLSAgICAgICAgICAgIGNvbnN0IHNwPFRyYWNrPiYgdHJhY2sgPSB0cmFja3NUb1JlbW92ZS5pdGVtQXQoaSk7Ci0gICAgICAgICAgICBtQWN0aXZlVHJhY2tzLnJlbW92ZSh0cmFjayk7Ci0gICAgICAgICAgICBBTE9HVigicmVtb3ZlVHJhY2tzX2wgcmVtb3ZpbmcgdHJhY2sgb24gc2Vzc2lvbiAlZCIsIHRyYWNrLT5zZXNzaW9uSWQoKSk7Ci0gICAgICAgICAgICBzcDxFZmZlY3RDaGFpbj4gY2hhaW4gPSBnZXRFZmZlY3RDaGFpbl9sKHRyYWNrLT5zZXNzaW9uSWQoKSk7Ci0gICAgICAgICAgICBpZiAoY2hhaW4gIT0gMCkgewotICAgICAgICAgICAgICAgIEFMT0dWKCJzdG9wcGluZyB0cmFjayBvbiBjaGFpbiAlcCBmb3Igc2Vzc2lvbiBJZDogJWQiLCBjaGFpbi5nZXQoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgIHRyYWNrLT5zZXNzaW9uSWQoKSk7Ci0gICAgICAgICAgICAgICAgY2hhaW4tPmRlY0FjdGl2ZVRyYWNrQ250KCk7Ci0gICAgICAgICAgICB9CisgICAgZm9yIChjb25zdCBhdXRvJiB0cmFjayA6IHRyYWNrc1RvUmVtb3ZlKSB7CisgICAgICAgIG1BY3RpdmVUcmFja3MucmVtb3ZlKHRyYWNrKTsKKyAgICAgICAgQUxPR1YoIiVzKCVkKTogcmVtb3ZpbmcgdHJhY2sgb24gc2Vzc2lvbiAlZCIsIF9fZnVuY19fLCB0cmFjay0+aWQoKSwgdHJhY2stPnNlc3Npb25JZCgpKTsKKyAgICAgICAgc3A8RWZmZWN0Q2hhaW4+IGNoYWluID0gZ2V0RWZmZWN0Q2hhaW5fbCh0cmFjay0+c2Vzc2lvbklkKCkpOworICAgICAgICBpZiAoY2hhaW4gIT0gMCkgeworICAgICAgICAgICAgQUxPR1YoIiVzKCVkKTogc3RvcHBpbmcgdHJhY2sgb24gY2hhaW4gJXAgZm9yIHNlc3Npb24gSWQ6ICVkIiwKKyAgICAgICAgICAgICAgICAgICAgX19mdW5jX18sIHRyYWNrLT5pZCgpLCBjaGFpbi5nZXQoKSwgdHJhY2stPnNlc3Npb25JZCgpKTsKKyAgICAgICAgICAgIGNoYWluLT5kZWNBY3RpdmVUcmFja0NudCgpOworICAgICAgICB9CisgICAgICAgIC8vIElmIGFuIGV4dGVybmFsIGNsaWVudCB0cmFjaywgaW5mb3JtIEFQTSB3ZSdyZSBubyBsb25nZXIgYWN0aXZlLCBhbmQgcmVtb3ZlIGlmIG5lZWRlZC4KKyAgICAgICAgLy8gV2UgZG8gdGhpcyB1bmRlciBsb2NrIHNvIHRoYXQgdGhlIHN0YXRlIGlzIGNvbnNpc3RlbnQgaWYgdGhlIFRyYWNrIGlzIGRlc3Ryb3llZC4KKyAgICAgICAgaWYgKHRyYWNrLT5pc0V4dGVybmFsVHJhY2soKSkgeworICAgICAgICAgICAgQXVkaW9TeXN0ZW06OnN0b3BPdXRwdXQodHJhY2stPnBvcnRJZCgpKTsKICAgICAgICAgICAgIGlmICh0cmFjay0+aXNUZXJtaW5hdGVkKCkpIHsKLSAgICAgICAgICAgICAgICByZW1vdmVUcmFja19sKHRyYWNrKTsKKyAgICAgICAgICAgICAgICBBdWRpb1N5c3RlbTo6cmVsZWFzZU91dHB1dCh0cmFjay0+cG9ydElkKCkpOwogICAgICAgICAgICAgfQogICAgICAgICB9CisgICAgICAgIGlmICh0cmFjay0+aXNUZXJtaW5hdGVkKCkpIHsKKyAgICAgICAgICAgIC8vIHJlbW92ZSBmcm9tIG91ciB0cmFja3MgdmVjdG9yCisgICAgICAgICAgICByZW1vdmVUcmFja19sKHRyYWNrKTsKKyAgICAgICAgfQogICAgIH0KLQogfQogCiBzdGF0dXNfdCBBdWRpb0ZsaW5nZXI6OlBsYXliYWNrVGhyZWFkOjpnZXRUaW1lc3RhbXBfbChBdWRpb1RpbWVzdGFtcCYgdGltZXN0YW1wKQpAQCAtMzYzOSw2ICszNzQ2LDE1IEBACiAgICAgICAgIHVpbnQ2NF90IHBvc2l0aW9uNjQ7CiAgICAgICAgIGlmIChtT3V0cHV0LT5nZXRQcmVzZW50YXRpb25Qb3NpdGlvbigmcG9zaXRpb242NCwgJnRpbWVzdGFtcC5tVGltZSkgPT0gT0spIHsKICAgICAgICAgICAgIHRpbWVzdGFtcC5tUG9zaXRpb24gPSAodWludDMyX3QpcG9zaXRpb242NDsKKyAgICAgICAgICAgIGlmIChtRG93bnN0cmVhbUxhdGVuY3lTdGF0TXMuZ2V0TigpID4gMCkgeworICAgICAgICAgICAgICAgIGNvbnN0IHVpbnQzMl90IHBvc2l0aW9uT2Zmc2V0ID0KKyAgICAgICAgICAgICAgICAgICAgKHVpbnQzMl90KShtRG93bnN0cmVhbUxhdGVuY3lTdGF0TXMuZ2V0TWVhbigpICogbVNhbXBsZVJhdGUgKiAxZS0zKTsKKyAgICAgICAgICAgICAgICBpZiAocG9zaXRpb25PZmZzZXQgPiB0aW1lc3RhbXAubVBvc2l0aW9uKSB7CisgICAgICAgICAgICAgICAgICAgIHRpbWVzdGFtcC5tUG9zaXRpb24gPSAwOworICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIHRpbWVzdGFtcC5tUG9zaXRpb24gLT0gcG9zaXRpb25PZmZzZXQ7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQogICAgICAgICAgICAgcmV0dXJuIE5PX0VSUk9SOwogICAgICAgICB9CiAgICAgfQpAQCAtMzc3NywxMiArMzg5MywxNiBAQAogICAgIGRlc3Ryb3lUcmFja19sKHRyYWNrKTsKIH0KIAotdm9pZCBBdWRpb0ZsaW5nZXI6OlBsYXliYWNrVGhyZWFkOjpnZXRBdWRpb1BvcnRDb25maWcoc3RydWN0IGF1ZGlvX3BvcnRfY29uZmlnICpjb25maWcpCit2b2lkIEF1ZGlvRmxpbmdlcjo6UGxheWJhY2tUaHJlYWQ6OnRvQXVkaW9Qb3J0Q29uZmlnKHN0cnVjdCBhdWRpb19wb3J0X2NvbmZpZyAqY29uZmlnKQogewotICAgIFRocmVhZEJhc2U6OmdldEF1ZGlvUG9ydENvbmZpZyhjb25maWcpOworICAgIFRocmVhZEJhc2U6OnRvQXVkaW9Qb3J0Q29uZmlnKGNvbmZpZyk7CiAgICAgY29uZmlnLT5yb2xlID0gQVVESU9fUE9SVF9ST0xFX1NPVVJDRTsKICAgICBjb25maWctPmV4dC5taXguaHdfbW9kdWxlID0gbU91dHB1dC0+YXVkaW9Id0Rldi0+aGFuZGxlKCk7CiAgICAgY29uZmlnLT5leHQubWl4LnVzZWNhc2Uuc3RyZWFtID0gQVVESU9fU1RSRUFNX0RFRkFVTFQ7CisgICAgaWYgKG1PdXRwdXQgJiYgbU91dHB1dC0+ZmxhZ3MgIT0gQVVESU9fT1VUUFVUX0ZMQUdfTk9ORSkgeworICAgICAgICBjb25maWctPmNvbmZpZ19tYXNrIHw9IEFVRElPX1BPUlRfQ09ORklHX0ZMQUdTOworICAgICAgICBjb25maWctPmZsYWdzLm91dHB1dCA9IG1PdXRwdXQtPmZsYWdzOworICAgIH0KIH0KIAogLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpAQCAtMzg2Myw5ICszOTgzLDcgQEAKIAogICAgICAgICAvLyBjcmVhdGUgYSBNb25vUGlwZSB0byBjb25uZWN0IG91ciBzdWJtaXggdG8gRmFzdE1peGVyCiAgICAgICAgIE5CQUlPX0Zvcm1hdCBmb3JtYXQgPSBtT3V0cHV0U2luay0+Zm9ybWF0KCk7Ci0jaWZkZWYgVEVFX1NJTksKLSAgICAgICAgTkJBSU9fRm9ybWF0IG9yaWdmb3JtYXQgPSBmb3JtYXQ7Ci0jZW5kaWYKKwogICAgICAgICAvLyBhZGp1c3QgZm9ybWF0IHRvIG1hdGNoIHRoYXQgb2YgdGhlIEZhc3QgTWl4ZXIKICAgICAgICAgQUxPR1YoImZvcm1hdCBjaGFuZ2VkIGZyb20gJSN4IHRvICUjeCIsIGZvcm1hdC5tRm9ybWF0LCBmYXN0TWl4ZXJGb3JtYXQpOwogICAgICAgICBmb3JtYXQubUZvcm1hdCA9IGZhc3RNaXhlckZvcm1hdDsKQEAgLTM4NzcsNyArMzk5NSw3IEBACiAgICAgICAgIE1vbm9QaXBlICptb25vUGlwZSA9IG5ldyBNb25vUGlwZShtTm9ybWFsRnJhbWVDb3VudCAqIDQsIGZvcm1hdCwgdHJ1ZSAvKndyaXRlQ2FuQmxvY2sqLyk7CiAgICAgICAgIGNvbnN0IE5CQUlPX0Zvcm1hdCBvZmZlcnNbMV0gPSB7Zm9ybWF0fTsKICAgICAgICAgc2l6ZV90IG51bUNvdW50ZXJPZmZlcnMgPSAwOwotI2lmICFMT0dfTkRFQlVHIHx8IGRlZmluZWQoVEVFX1NJTkspCisjaWYgIUxPR19OREVCVUcKICAgICAgICAgc3NpemVfdCBpbmRleCA9CiAjZWxzZQogICAgICAgICAodm9pZCkKQEAgLTM4ODgsMjUgKzQwMDYsOCBAQAogICAgICAgICAgICAgICAgIChtb25vUGlwZS0+bWF4RnJhbWVzKCkgKiA3KSAvIDggOiBtTm9ybWFsRnJhbWVDb3VudCAqIDIpOwogICAgICAgICBtUGlwZVNpbmsgPSBtb25vUGlwZTsKIAotI2lmZGVmIFRFRV9TSU5LCi0gICAgICAgIGlmIChtVGVlU2lua091dHB1dEVuYWJsZWQpIHsKLSAgICAgICAgICAgIC8vIGNyZWF0ZSBhIFBpcGUgdG8gYXJjaGl2ZSBhIGNvcHkgb2YgRmFzdE1peGVyJ3Mgb3V0cHV0IGZvciBkdW1wc3lzCi0gICAgICAgICAgICBQaXBlICp0ZWVTaW5rID0gbmV3IFBpcGUobVRlZVNpbmtPdXRwdXRGcmFtZXMsIG9yaWdmb3JtYXQpOwotICAgICAgICAgICAgY29uc3QgTkJBSU9fRm9ybWF0IG9mZmVyczJbMV0gPSB7b3JpZ2Zvcm1hdH07Ci0gICAgICAgICAgICBudW1Db3VudGVyT2ZmZXJzID0gMDsKLSAgICAgICAgICAgIGluZGV4ID0gdGVlU2luay0+bmVnb3RpYXRlKG9mZmVyczIsIDEsIE5VTEwsIG51bUNvdW50ZXJPZmZlcnMpOwotICAgICAgICAgICAgQUxPR19BU1NFUlQoaW5kZXggPT0gMCk7Ci0gICAgICAgICAgICBtVGVlU2luayA9IHRlZVNpbms7Ci0gICAgICAgICAgICBQaXBlUmVhZGVyICp0ZWVTb3VyY2UgPSBuZXcgUGlwZVJlYWRlcigqdGVlU2luayk7Ci0gICAgICAgICAgICBudW1Db3VudGVyT2ZmZXJzID0gMDsKLSAgICAgICAgICAgIGluZGV4ID0gdGVlU291cmNlLT5uZWdvdGlhdGUob2ZmZXJzMiwgMSwgTlVMTCwgbnVtQ291bnRlck9mZmVycyk7Ci0gICAgICAgICAgICBBTE9HX0FTU0VSVChpbmRleCA9PSAwKTsKLSAgICAgICAgICAgIG1UZWVTb3VyY2UgPSB0ZWVTb3VyY2U7Ci0gICAgICAgIH0KLSNlbmRpZgotCiAgICAgICAgIC8vIGNyZWF0ZSBmYXN0IG1peGVyIGFuZCBjb25maWd1cmUgaXQgaW5pdGlhbGx5IHdpdGgganVzdCBvbmUgZmFzdCB0cmFjayBmb3Igb3VyIHN1Ym1peAotICAgICAgICBtRmFzdE1peGVyID0gbmV3IEZhc3RNaXhlcigpOworICAgICAgICBtRmFzdE1peGVyID0gbmV3IEZhc3RNaXhlcihtSWQpOwogICAgICAgICBGYXN0TWl4ZXJTdGF0ZVF1ZXVlICpzcSA9IG1GYXN0TWl4ZXItPnNxKCk7CiAjaWZkZWYgU1RBVEVfUVVFVUVfRFVNUAogICAgICAgICBzcS0+c2V0T2JzZXJ2ZXJEdW1wKCZtU3RhdGVRdWV1ZU9ic2VydmVyRHVtcCk7CkBAIC0zOTMyLDE4ICs0MDMzLDIwIEBACiAgICAgICAgIHN0YXRlLT5tQ29sZEZ1dGV4QWRkciA9ICZtRmFzdE1peGVyRnV0ZXg7CiAgICAgICAgIHN0YXRlLT5tQ29sZEdlbisrOwogICAgICAgICBzdGF0ZS0+bUR1bXBTdGF0ZSA9ICZtRmFzdE1peGVyRHVtcFN0YXRlOwotI2lmZGVmIFRFRV9TSU5LCi0gICAgICAgIHN0YXRlLT5tVGVlU2luayA9IG1UZWVTaW5rLmdldCgpOwotI2VuZGlmCiAgICAgICAgIG1GYXN0TWl4ZXJOQkxvZ1dyaXRlciA9IGF1ZGlvRmxpbmdlci0+bmV3V3JpdGVyX2woa0Zhc3RNaXhlckxvZ1NpemUsICJGYXN0TWl4ZXIiKTsKICAgICAgICAgc3RhdGUtPm1OQkxvZ1dyaXRlciA9IG1GYXN0TWl4ZXJOQkxvZ1dyaXRlci5nZXQoKTsKICAgICAgICAgc3EtPmVuZCgpOwogICAgICAgICBzcS0+cHVzaChGYXN0TWl4ZXJTdGF0ZVF1ZXVlOjpCTE9DS19VTlRJTF9QVVNIRUQpOwogCisgICAgICAgIE5CTG9nOjp0aHJlYWRfaW5mb190IGluZm87CisgICAgICAgIGluZm8uaWQgPSBtSWQ7CisgICAgICAgIGluZm8udHlwZSA9IE5CTG9nOjpGQVNUTUlYRVI7CisgICAgICAgIG1GYXN0TWl4ZXJOQkxvZ1dyaXRlci0+bG9nPE5CTG9nOjpFVkVOVF9USFJFQURfSU5GTz4oaW5mbyk7CisKICAgICAgICAgLy8gc3RhcnQgdGhlIGZhc3QgbWl4ZXIKICAgICAgICAgbUZhc3RNaXhlci0+cnVuKCJGYXN0TWl4ZXIiLCBQUklPUklUWV9VUkdFTlRfQVVESU8pOwogICAgICAgICBwaWRfdCB0aWQgPSBtRmFzdE1peGVyLT5nZXRUaWQoKTsKLSAgICAgICAgc2VuZFByaW9Db25maWdFdmVudChnZXRwaWRfY2FjaGVkLCB0aWQsIGtQcmlvcml0eUZhc3RNaXhlciwgZmFsc2UgLypmb3JBcHAqLyk7CisgICAgICAgIHNlbmRQcmlvQ29uZmlnRXZlbnQoZ2V0cGlkKCksIHRpZCwga1ByaW9yaXR5RmFzdE1peGVyLCBmYWxzZSAvKmZvckFwcCovKTsKICAgICAgICAgc3RyZWFtKCktPnNldEhhbFRocmVhZFByaW9yaXR5KGtQcmlvcml0eUZhc3RNaXhlcik7CiAKICNpZmRlZiBBVURJT19XQVRDSERPRwpAQCAtMzk1Miw5ICs0MDU1LDE0IEBACiAgICAgICAgIG1BdWRpb1dhdGNoZG9nLT5zZXREdW1wKCZtQXVkaW9XYXRjaGRvZ0R1bXApOwogICAgICAgICBtQXVkaW9XYXRjaGRvZy0+cnVuKCJBdWRpb1dhdGNoZG9nIiwgUFJJT1JJVFlfVVJHRU5UX0FVRElPKTsKICAgICAgICAgdGlkID0gbUF1ZGlvV2F0Y2hkb2ctPmdldFRpZCgpOwotICAgICAgICBzZW5kUHJpb0NvbmZpZ0V2ZW50KGdldHBpZF9jYWNoZWQsIHRpZCwga1ByaW9yaXR5RmFzdE1peGVyLCBmYWxzZSAvKmZvckFwcCovKTsKKyAgICAgICAgc2VuZFByaW9Db25maWdFdmVudChnZXRwaWQoKSwgdGlkLCBrUHJpb3JpdHlGYXN0TWl4ZXIsIGZhbHNlIC8qZm9yQXBwKi8pOwogI2VuZGlmCi0KKyAgICB9IGVsc2UgeworI2lmZGVmIFRFRV9TSU5LCisgICAgICAgIC8vIE9ubHkgdXNlIHRoZSBNaXhlclRocmVhZCB0ZWUgaWYgdGhlcmUgaXMgbm8gRmFzdE1peGVyLgorICAgICAgICBtVGVlLnNldChtT3V0cHV0U2luay0+Zm9ybWF0KCksIE5CQUlPX1RlZTo6VEVFX0ZMQUdfT1VUUFVUX1RIUkVBRCk7CisgICAgICAgIG1UZWUuc2V0SWQoc3RkOjpzdHJpbmcoIl8iKSArIHN0ZDo6dG9fc3RyaW5nKG1JZCkgKyAiX00iKTsKKyNlbmRpZgogICAgIH0KIAogICAgIHN3aXRjaCAoa1VzZUZhc3RNaXhlcikgewpAQCAtNDAxOCwxMiArNDEyNiw2IEBACiAgICAgcmV0dXJuIGxhdGVuY3k7CiB9CiAKLQotdm9pZCBBdWRpb0ZsaW5nZXI6Ok1peGVyVGhyZWFkOjp0aHJlYWRMb29wX3JlbW92ZVRyYWNrcyhjb25zdCBWZWN0b3I8IHNwPFRyYWNrPiA+JiB0cmFja3NUb1JlbW92ZSkKLXsKLSAgICBQbGF5YmFja1RocmVhZDo6dGhyZWFkTG9vcF9yZW1vdmVUcmFja3ModHJhY2tzVG9SZW1vdmUpOwotfQotCiBzc2l6ZV90IEF1ZGlvRmxpbmdlcjo6TWl4ZXJUaHJlYWQ6OnRocmVhZExvb3Bfd3JpdGUoKQogewogICAgIC8vIEZJWE1FIHdlIHNob3VsZCBvbmx5IGRvIG9uZSBwdXNoIHBlciBjeWNsZTsgY29uZmlybSB0aGlzIGlzIHRydWUKQEAgLTQyMjIsMTQgKzQzMjQsMTQgQEAKIEF1ZGlvRmxpbmdlcjo6UGxheWJhY2tUaHJlYWQ6Om1peGVyX3N0YXRlIEF1ZGlvRmxpbmdlcjo6TWl4ZXJUaHJlYWQ6OnByZXBhcmVUcmFja3NfbCgKICAgICAgICAgVmVjdG9yPCBzcDxUcmFjaz4gPiAqdHJhY2tzVG9SZW1vdmUpCiB7Ci0gICAgLy8gY2xlYW4gdXAgZGVsZXRlZCB0cmFjayBuYW1lcyBpbiBBdWRpb01peGVyIGJlZm9yZSBhbGxvY2F0aW5nIG5ldyB0cmFja3MKLSAgICAodm9pZCltVHJhY2tzLnByb2Nlc3NEZWxldGVkVHJhY2tOYW1lcyhbdGhpc10oaW50IG5hbWUpIHsKLSAgICAgICAgLy8gZm9yIGVhY2ggbmFtZSwgZGVzdHJveSBpdCBpbiB0aGUgQXVkaW9NaXhlcgotICAgICAgICBpZiAobUF1ZGlvTWl4ZXItPmV4aXN0cyhuYW1lKSkgewotICAgICAgICAgICAgbUF1ZGlvTWl4ZXItPmRlc3Ryb3kobmFtZSk7CisgICAgLy8gY2xlYW4gdXAgZGVsZXRlZCB0cmFjayBpZHMgaW4gQXVkaW9NaXhlciBiZWZvcmUgYWxsb2NhdGluZyBuZXcgdHJhY2tzCisgICAgKHZvaWQpbVRyYWNrcy5wcm9jZXNzRGVsZXRlZFRyYWNrSWRzKFt0aGlzXShpbnQgdHJhY2tJZCkgeworICAgICAgICAvLyBmb3IgZWFjaCB0cmFja0lkLCBkZXN0cm95IGl0IGluIHRoZSBBdWRpb01peGVyCisgICAgICAgIGlmIChtQXVkaW9NaXhlci0+ZXhpc3RzKHRyYWNrSWQpKSB7CisgICAgICAgICAgICBtQXVkaW9NaXhlci0+ZGVzdHJveSh0cmFja0lkKTsKICAgICAgICAgfQogICAgIH0pOwotICAgIG1UcmFja3MuY2xlYXJEZWxldGVkVHJhY2tOYW1lcygpOworICAgIG1UcmFja3MuY2xlYXJEZWxldGVkVHJhY2tJZHMoKTsKIAogICAgIG1peGVyX3N0YXRlIG1peGVyU3RhdHVzID0gTUlYRVJfSURMRTsKICAgICAvLyBmaW5kIG91dCB3aGljaCB0cmFja3MgbmVlZCB0byBiZSBwcm9jZXNzZWQKQEAgLTQyNzAsNiArNDM3MiwzNyBAQAogICAgIG1NaXhlckJ1ZmZlclZhbGlkID0gZmFsc2U7ICAvLyBtTWl4ZXJCdWZmZXIgaGFzIG5vIHZhbGlkIGRhdGEgdW50aWwgYXBwcm9wcmlhdGUgdHJhY2tzIGZvdW5kLgogICAgIG1FZmZlY3RCdWZmZXJWYWxpZCA9IGZhbHNlOyAvLyBtRWZmZWN0QnVmZmVyIGhhcyBubyB2YWxpZCBkYXRhIHVudGlsIHRyYWNrcyBmb3VuZC4KIAorICAgIC8vIERlZmVycmVkT3BlcmF0aW9ucyBoYW5kbGVzIHN0YXRpc3RpY3MgYWZ0ZXIgc2V0dGluZyBtaXhlclN0YXR1cy4KKyAgICBjbGFzcyBEZWZlcnJlZE9wZXJhdGlvbnMgeworICAgIHB1YmxpYzoKKyAgICAgICAgRGVmZXJyZWRPcGVyYXRpb25zKG1peGVyX3N0YXRlICptaXhlclN0YXR1cykKKyAgICAgICAgICAgIDogbU1peGVyU3RhdHVzKG1peGVyU3RhdHVzKSB7IH0KKworICAgICAgICAvLyB3aGVuIGxlYXZpbmcgc2NvcGUsIHRhbGx5IGZyYW1lcyBwcm9wZXJseS4KKyAgICAgICAgfkRlZmVycmVkT3BlcmF0aW9ucygpIHsKKyAgICAgICAgICAgIC8vIFRhbGx5IHVuZGVycnVuIGZyYW1lcyBvbmx5IGlmIHdlIGFyZSBhY3R1YWxseSBtaXhpbmcgKE1JWEVSX1RSQUNLU19SRUFEWSkKKyAgICAgICAgICAgIC8vIGJlY2F1c2UgdGhhdCBpcyB3aGVuIHRoZSB1bmRlcnJ1biBvY2N1cnMuCisgICAgICAgICAgICAvLyBXZSBkbyBub3QgZGlzdGluZ3Vpc2ggYmV0d2VlbiBGYXN0VHJhY2tzIGFuZCBOb3JtYWxUcmFja3MgaGVyZS4KKyAgICAgICAgICAgIGlmICgqbU1peGVyU3RhdHVzID09IE1JWEVSX1RSQUNLU19SRUFEWSkgeworICAgICAgICAgICAgICAgIGZvciAoY29uc3QgYXV0byAmdW5kZXJydW4gOiBtVW5kZXJydW5GcmFtZXMpIHsKKyAgICAgICAgICAgICAgICAgICAgdW5kZXJydW4uZmlyc3QtPm1BdWRpb1RyYWNrU2VydmVyUHJveHktPnRhbGx5VW5kZXJydW5GcmFtZXMoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5kZXJydW4uc2Vjb25kKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICAvLyB0YWxseVVuZGVycnVuRnJhbWVzKCkgaXMgY2FsbGVkIHRvIHVwZGF0ZSB0aGUgdHJhY2sgY291bnRlcnMKKyAgICAgICAgLy8gd2l0aCB0aGUgbnVtYmVyIG9mIHVuZGVycnVuIGZyYW1lcyBmb3IgYSBwYXJ0aWN1bGFyIG1peGVyIHBlcmlvZC4KKyAgICAgICAgLy8gV2UgZGVmZXIgdGFsbHlpbmcgdW50aWwgd2Uga25vdyB0aGUgZmluYWwgbWl4ZXIgc3RhdHVzLgorICAgICAgICB2b2lkIHRhbGx5VW5kZXJydW5GcmFtZXMoc3A8VHJhY2s+IHRyYWNrLCBzaXplX3QgdW5kZXJydW5GcmFtZXMpIHsKKyAgICAgICAgICAgIG1VbmRlcnJ1bkZyYW1lcy5lbXBsYWNlX2JhY2sodHJhY2ssIHVuZGVycnVuRnJhbWVzKTsKKyAgICAgICAgfQorCisgICAgcHJpdmF0ZToKKyAgICAgICAgY29uc3QgbWl4ZXJfc3RhdGUgKiBjb25zdCBtTWl4ZXJTdGF0dXM7CisgICAgICAgIHN0ZDo6dmVjdG9yPHN0ZDo6cGFpcjxzcDxUcmFjaz4sIHNpemVfdD4+IG1VbmRlcnJ1bkZyYW1lczsKKyAgICB9IGRlZmVycmVkT3BlcmF0aW9ucygmbWl4ZXJTdGF0dXMpOyAvLyBpbXBsaWNpdCBuZXN0ZWQgc2NvcGUgZm9yIHZhcmlhYmxlIGNhcHR1cmUKKwogICAgIGZvciAoc2l6ZV90IGk9MCA7IGk8Y291bnQgOyBpKyspIHsKICAgICAgICAgY29uc3Qgc3A8VHJhY2s+IHQgPSBtQWN0aXZlVHJhY2tzW2ldOwogCkBAIC00MzA0LDEzICs0NDM3LDE0IEBACiAgICAgICAgICAgICB0cmFjay0+bU9ic2VydmVkVW5kZXJydW5zID0gdW5kZXJydW5zOwogICAgICAgICAgICAgLy8gZG9uJ3QgY291bnQgdW5kZXJydW5zIHRoYXQgb2NjdXIgd2hpbGUgc3RvcHBpbmcgb3IgcGF1c2luZwogICAgICAgICAgICAgLy8gb3Igc3RvcHBlZCB3aGljaCBjYW4gb2NjdXIgd2hlbiBmbHVzaCgpIGlzIGNhbGxlZCB3aGlsZSBhY3RpdmUKKyAgICAgICAgICAgIHNpemVfdCB1bmRlcnJ1bkZyYW1lcyA9IDA7CiAgICAgICAgICAgICBpZiAoISh0cmFjay0+aXNTdG9wcGluZygpIHx8IHRyYWNrLT5pc1BhdXNpbmcoKSB8fCB0cmFjay0+aXNTdG9wcGVkKCkpICYmCiAgICAgICAgICAgICAgICAgICAgIHJlY2VudFVuZGVycnVucyA+IDApIHsKICAgICAgICAgICAgICAgICAvLyBGSVhNRSBmYXN0IG1peGVyIHdpbGwgcHVsbCAmIG1peCBwYXJ0aWFsIGJ1ZmZlcnMsIGJ1dCB3ZSBjb3VudCBhcyBhIGZ1bGwgdW5kZXJydW4KLSAgICAgICAgICAgICAgICB0cmFjay0+bUF1ZGlvVHJhY2tTZXJ2ZXJQcm94eS0+dGFsbHlVbmRlcnJ1bkZyYW1lcyhyZWNlbnRVbmRlcnJ1bnMgKiBtRnJhbWVDb3VudCk7Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIHRyYWNrLT5tQXVkaW9UcmFja1NlcnZlclByb3h5LT50YWxseVVuZGVycnVuRnJhbWVzKDApOworICAgICAgICAgICAgICAgIHVuZGVycnVuRnJhbWVzID0gcmVjZW50VW5kZXJydW5zICogbUZyYW1lQ291bnQ7CiAgICAgICAgICAgICB9CisgICAgICAgICAgICAvLyBJbW1lZGlhdGVseSBhY2NvdW50IGZvciBGYXN0VHJhY2sgdW5kZXJydW5zLgorICAgICAgICAgICAgdHJhY2stPm1BdWRpb1RyYWNrU2VydmVyUHJveHktPnRhbGx5VW5kZXJydW5GcmFtZXModW5kZXJydW5GcmFtZXMpOwogCiAgICAgICAgICAgICAvLyBUaGlzIGlzIHNpbWlsYXIgdG8gdGhlIHN0YXRlIG1hY2hpbmUgZm9yIG5vcm1hbCB0cmFja3MsCiAgICAgICAgICAgICAvLyB3aXRoIGEgZmV3IG1vZGlmaWNhdGlvbnMgZm9yIGZhc3QgdHJhY2tzLgpAQCAtNDQ1NiwxOSArNDU5MCwyMSBAQAogCiAgICAgICAgIC8vIFRoZSBmaXJzdCB0aW1lIGEgdHJhY2sgaXMgYWRkZWQgd2Ugd2FpdAogICAgICAgICAvLyBmb3IgYWxsIGl0cyBidWZmZXJzIHRvIGJlIGZpbGxlZCBiZWZvcmUgcHJvY2Vzc2luZyBpdAotICAgICAgICBpbnQgbmFtZSA9IHRyYWNrLT5uYW1lKCk7CisgICAgICAgIGNvbnN0IGludCB0cmFja0lkID0gdHJhY2stPmlkKCk7CiAKICAgICAgICAgLy8gaWYgYW4gYWN0aXZlIHRyYWNrIGRvZXNuJ3QgZXhpc3QgaW4gdGhlIEF1ZGlvTWl4ZXIsIGNyZWF0ZSBpdC4KLSAgICAgICAgaWYgKCFtQXVkaW9NaXhlci0+ZXhpc3RzKG5hbWUpKSB7CisgICAgICAgIC8vIHVzZSB0aGUgdHJhY2tJZCBhcyB0aGUgQXVkaW9NaXhlciBuYW1lLgorICAgICAgICBpZiAoIW1BdWRpb01peGVyLT5leGlzdHModHJhY2tJZCkpIHsKICAgICAgICAgICAgIHN0YXR1c190IHN0YXR1cyA9IG1BdWRpb01peGVyLT5jcmVhdGUoCi0gICAgICAgICAgICAgICAgICAgIG5hbWUsCisgICAgICAgICAgICAgICAgICAgIHRyYWNrSWQsCiAgICAgICAgICAgICAgICAgICAgIHRyYWNrLT5tQ2hhbm5lbE1hc2ssCiAgICAgICAgICAgICAgICAgICAgIHRyYWNrLT5tRm9ybWF0LAogICAgICAgICAgICAgICAgICAgICB0cmFjay0+bVNlc3Npb25JZCk7CiAgICAgICAgICAgICBpZiAoc3RhdHVzICE9IE9LKSB7Ci0gICAgICAgICAgICAgICAgQUxPR1coIiVzOiBjYW5ub3QgY3JlYXRlIHRyYWNrIG5hbWUiCi0gICAgICAgICAgICAgICAgICAgICAgICAiICVkLCBtYXNrICUjeCwgZm9ybWF0ICUjeCwgc2Vzc2lvbklkICVkIGluIEF1ZGlvTWl4ZXIiLAotICAgICAgICAgICAgICAgICAgICAgICAgX19mdW5jX18sIG5hbWUsIHRyYWNrLT5tQ2hhbm5lbE1hc2ssIHRyYWNrLT5tRm9ybWF0LCB0cmFjay0+bVNlc3Npb25JZCk7CisgICAgICAgICAgICAgICAgQUxPR1coIiVzKCk6IEF1ZGlvTWl4ZXIgY2Fubm90IGNyZWF0ZSB0cmFjayglZCkiCisgICAgICAgICAgICAgICAgICAgICAgICAiIG1hc2sgJSN4LCBmb3JtYXQgJSN4LCBzZXNzaW9uSWQgJWQiLAorICAgICAgICAgICAgICAgICAgICAgICAgX19mdW5jX18sIHRyYWNrSWQsCisgICAgICAgICAgICAgICAgICAgICAgICB0cmFjay0+bUNoYW5uZWxNYXNrLCB0cmFjay0+bUZvcm1hdCwgdHJhY2stPm1TZXNzaW9uSWQpOwogICAgICAgICAgICAgICAgIHRyYWNrc1RvUmVtb3ZlLT5hZGQodHJhY2spOwogICAgICAgICAgICAgICAgIHRyYWNrLT5pbnZhbGlkYXRlKCk7IC8vIGNvbnNpZGVyIGl0IGRlYWQuCiAgICAgICAgICAgICAgICAgY29udGludWU7CkBAIC00NDg5LDcgKzQ2MjUsNyBAQAogICAgICAgICAvLyBUT0RPOiBPTkxZIFVTRUQgRk9SIExFR0FDWSBSRVNBTVBMRVJTLCByZW1vdmUgd2hlbiB0aGV5IGFyZSByZW1vdmVkLgogICAgICAgICAvLyBhZGQgZnJhbWVzIGFscmVhZHkgY29uc3VtZWQgYnV0IG5vdCB5ZXQgcmVsZWFzZWQgYnkgdGhlIHJlc2FtcGxlcgogICAgICAgICAvLyBiZWNhdXNlIG1BdWRpb1RyYWNrU2VydmVyUHJveHktPmZyYW1lc1JlYWR5KCkgd2lsbCBpbmNsdWRlIHRoZXNlIGZyYW1lcwotICAgICAgICBkZXNpcmVkRnJhbWVzICs9IG1BdWRpb01peGVyLT5nZXRVbnJlbGVhc2VkRnJhbWVzKHRyYWNrLT5uYW1lKCkpOworICAgICAgICBkZXNpcmVkRnJhbWVzICs9IG1BdWRpb01peGVyLT5nZXRVbnJlbGVhc2VkRnJhbWVzKHRyYWNrSWQpOwogCiAgICAgICAgIHVpbnQzMl90IG1pbkZyYW1lcyA9IDE7CiAgICAgICAgIGlmICgodHJhY2stPnNoYXJlZEJ1ZmZlcigpID09IDApICYmICF0cmFjay0+aXNTdG9wcGVkKCkgJiYgIXRyYWNrLT5pc1BhdXNpbmcoKSAmJgpAQCAtNDUwMSwxMyArNDYzNywxMyBAQAogICAgICAgICBpZiAoQVRSQUNFX0VOQUJMRUQoKSkgewogICAgICAgICAgICAgLy8gSSB3aXNoIHdlIGhhZCBmb3JtYXR0ZWQgdHJhY2UgbmFtZXMKICAgICAgICAgICAgIHN0ZDo6c3RyaW5nIHRyYWNlTmFtZSgiblJkeSIpOwotICAgICAgICAgICAgdHJhY2VOYW1lICs9IHN0ZDo6dG9fc3RyaW5nKHRyYWNrLT5uYW1lKCkpOworICAgICAgICAgICAgdHJhY2VOYW1lICs9IHN0ZDo6dG9fc3RyaW5nKHRyYWNrSWQpOwogICAgICAgICAgICAgQVRSQUNFX0lOVCh0cmFjZU5hbWUuY19zdHIoKSwgZnJhbWVzUmVhZHkpOwogICAgICAgICB9CiAgICAgICAgIGlmICgoZnJhbWVzUmVhZHkgPj0gbWluRnJhbWVzKSAmJiB0cmFjay0+aXNSZWFkeSgpICYmCiAgICAgICAgICAgICAgICAgIXRyYWNrLT5pc1BhdXNlZCgpICYmICF0cmFjay0+aXNUZXJtaW5hdGVkKCkpCiAgICAgICAgIHsKLSAgICAgICAgICAgIEFMT0dWVigidHJhY2sgJWQgcz0lMDh4IFtPS10gb24gdGhyZWFkICVwIiwgbmFtZSwgY2Jsay0+bVNlcnZlciwgdGhpcyk7CisgICAgICAgICAgICBBTE9HVlYoInRyYWNrKCVkKSBzPSUwOHggW09LXSBvbiB0aHJlYWQgJXAiLCB0cmFja0lkLCBjYmxrLT5tU2VydmVyLCB0aGlzKTsKIAogICAgICAgICAgICAgbWl4ZWRUcmFja3MrKzsKIApAQCAtNDUyNCw5ICs0NjYwLDkgQEAKICAgICAgICAgICAgICAgICBpZiAoY2hhaW4gIT0gMCkgewogICAgICAgICAgICAgICAgICAgICB0cmFja3NXaXRoRWZmZWN0Kys7CiAgICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgQUxPR1coInByZXBhcmVUcmFja3NfbCgpOiB0cmFjayAlZCBhdHRhY2hlZCB0byBlZmZlY3QgYnV0IG5vIGNoYWluIGZvdW5kIG9uICIKKyAgICAgICAgICAgICAgICAgICAgQUxPR1coInByZXBhcmVUcmFja3NfbCgpOiB0cmFjayglZCkgYXR0YWNoZWQgdG8gZWZmZWN0IGJ1dCBubyBjaGFpbiBmb3VuZCBvbiAiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInNlc3Npb24gJWQiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWUsIHRyYWNrLT5zZXNzaW9uSWQoKSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJhY2tJZCwgdHJhY2stPnNlc3Npb25JZCgpKTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9CiAKQEAgLTQ1MzksNyArNDY3NSw3IEBACiAgICAgICAgICAgICAgICAgICAgIHRyYWNrLT5tU3RhdGUgPSBUcmFja0Jhc2U6OkFDVElWRTsKICAgICAgICAgICAgICAgICAgICAgcGFyYW0gPSBBdWRpb01peGVyOjpSQU1QX1ZPTFVNRTsKICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgbUF1ZGlvTWl4ZXItPnNldFBhcmFtZXRlcihuYW1lLCBBdWRpb01peGVyOjpSRVNBTVBMRSwgQXVkaW9NaXhlcjo6UkVTRVQsIE5VTEwpOworICAgICAgICAgICAgICAgIG1BdWRpb01peGVyLT5zZXRQYXJhbWV0ZXIodHJhY2tJZCwgQXVkaW9NaXhlcjo6UkVTQU1QTEUsIEF1ZGlvTWl4ZXI6OlJFU0VULCBOVUxMKTsKICAgICAgICAgICAgICAgICBtTGVmdFZvbEZsb2F0ID0gLTEuMDsKICAgICAgICAgICAgIC8vIEZJWE1FIHNob3VsZCBub3QgbWFrZSBhIGRlY2lzaW9uIGJhc2VkIG9uIG1TZXJ2ZXIKICAgICAgICAgICAgIH0gZWxzZSBpZiAoY2Jsay0+bVNlcnZlciAhPSAwKSB7CkBAIC00NjM1LDIyICs0NzcxLDIyIEBACiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICAvLyBYWFg6IHRoZXNlIHRoaW5ncyBET04nVCBuZWVkIHRvIGJlIGRvbmUgZWFjaCB0aW1lCi0gICAgICAgICAgICBtQXVkaW9NaXhlci0+c2V0QnVmZmVyUHJvdmlkZXIobmFtZSwgdHJhY2spOwotICAgICAgICAgICAgbUF1ZGlvTWl4ZXItPmVuYWJsZShuYW1lKTsKKyAgICAgICAgICAgIG1BdWRpb01peGVyLT5zZXRCdWZmZXJQcm92aWRlcih0cmFja0lkLCB0cmFjayk7CisgICAgICAgICAgICBtQXVkaW9NaXhlci0+ZW5hYmxlKHRyYWNrSWQpOwogCi0gICAgICAgICAgICBtQXVkaW9NaXhlci0+c2V0UGFyYW1ldGVyKG5hbWUsIHBhcmFtLCBBdWRpb01peGVyOjpWT0xVTUUwLCAmdmxmKTsKLSAgICAgICAgICAgIG1BdWRpb01peGVyLT5zZXRQYXJhbWV0ZXIobmFtZSwgcGFyYW0sIEF1ZGlvTWl4ZXI6OlZPTFVNRTEsICZ2cmYpOwotICAgICAgICAgICAgbUF1ZGlvTWl4ZXItPnNldFBhcmFtZXRlcihuYW1lLCBwYXJhbSwgQXVkaW9NaXhlcjo6QVVYTEVWRUwsICZ2YWYpOworICAgICAgICAgICAgbUF1ZGlvTWl4ZXItPnNldFBhcmFtZXRlcih0cmFja0lkLCBwYXJhbSwgQXVkaW9NaXhlcjo6Vk9MVU1FMCwgJnZsZik7CisgICAgICAgICAgICBtQXVkaW9NaXhlci0+c2V0UGFyYW1ldGVyKHRyYWNrSWQsIHBhcmFtLCBBdWRpb01peGVyOjpWT0xVTUUxLCAmdnJmKTsKKyAgICAgICAgICAgIG1BdWRpb01peGVyLT5zZXRQYXJhbWV0ZXIodHJhY2tJZCwgcGFyYW0sIEF1ZGlvTWl4ZXI6OkFVWExFVkVMLCAmdmFmKTsKICAgICAgICAgICAgIG1BdWRpb01peGVyLT5zZXRQYXJhbWV0ZXIoCi0gICAgICAgICAgICAgICAgbmFtZSwKKyAgICAgICAgICAgICAgICB0cmFja0lkLAogICAgICAgICAgICAgICAgIEF1ZGlvTWl4ZXI6OlRSQUNLLAogICAgICAgICAgICAgICAgIEF1ZGlvTWl4ZXI6OkZPUk1BVCwgKHZvaWQgKil0cmFjay0+Zm9ybWF0KCkpOwogICAgICAgICAgICAgbUF1ZGlvTWl4ZXItPnNldFBhcmFtZXRlcigKLSAgICAgICAgICAgICAgICBuYW1lLAorICAgICAgICAgICAgICAgIHRyYWNrSWQsCiAgICAgICAgICAgICAgICAgQXVkaW9NaXhlcjo6VFJBQ0ssCiAgICAgICAgICAgICAgICAgQXVkaW9NaXhlcjo6Q0hBTk5FTF9NQVNLLCAodm9pZCAqKSh1aW50cHRyX3QpdHJhY2stPmNoYW5uZWxNYXNrKCkpOwogICAgICAgICAgICAgbUF1ZGlvTWl4ZXItPnNldFBhcmFtZXRlcigKLSAgICAgICAgICAgICAgICBuYW1lLAorICAgICAgICAgICAgICAgIHRyYWNrSWQsCiAgICAgICAgICAgICAgICAgQXVkaW9NaXhlcjo6VFJBQ0ssCiAgICAgICAgICAgICAgICAgQXVkaW9NaXhlcjo6TUlYRVJfQ0hBTk5FTF9NQVNLLCAodm9pZCAqKSh1aW50cHRyX3QpbUNoYW5uZWxNYXNrKTsKICAgICAgICAgICAgIC8vIGxpbWl0IHRyYWNrIHNhbXBsZSByYXRlIHRvIDIgeCBvdXRwdXQgc2FtcGxlIHJhdGUsIHdoaWNoIGNoYW5nZXMgYXQgcmUtY29uZmlndXJhdGlvbgpAQCAtNDY2MiwxNCArNDc5OCwxNCBAQAogICAgICAgICAgICAgICAgIHJlcVNhbXBsZVJhdGUgPSBtYXhTYW1wbGVSYXRlOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgbUF1ZGlvTWl4ZXItPnNldFBhcmFtZXRlcigKLSAgICAgICAgICAgICAgICBuYW1lLAorICAgICAgICAgICAgICAgIHRyYWNrSWQsCiAgICAgICAgICAgICAgICAgQXVkaW9NaXhlcjo6UkVTQU1QTEUsCiAgICAgICAgICAgICAgICAgQXVkaW9NaXhlcjo6U0FNUExFX1JBVEUsCiAgICAgICAgICAgICAgICAgKHZvaWQgKikodWludHB0cl90KXJlcVNhbXBsZVJhdGUpOwogCiAgICAgICAgICAgICBBdWRpb1BsYXliYWNrUmF0ZSBwbGF5YmFja1JhdGUgPSB0cmFjay0+bUF1ZGlvVHJhY2tTZXJ2ZXJQcm94eS0+Z2V0UGxheWJhY2tSYXRlKCk7CiAgICAgICAgICAgICBtQXVkaW9NaXhlci0+c2V0UGFyYW1ldGVyKAotICAgICAgICAgICAgICAgIG5hbWUsCisgICAgICAgICAgICAgICAgdHJhY2tJZCwKICAgICAgICAgICAgICAgICBBdWRpb01peGVyOjpUSU1FU1RSRVRDSCwKICAgICAgICAgICAgICAgICBBdWRpb01peGVyOjpQTEFZQkFDS19SQVRFLAogICAgICAgICAgICAgICAgICZwbGF5YmFja1JhdGUpOwpAQCAtNDY5MCwyNyArNDgyNiwyNyBAQAogICAgICAgICAgICAgICAgICAgICAmJiAodHJhY2stPm1haW5CdWZmZXIoKSA9PSBtU2lua0J1ZmZlcgogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHx8IHRyYWNrLT5tYWluQnVmZmVyKCkgPT0gbU1peGVyQnVmZmVyKSkgewogICAgICAgICAgICAgICAgIG1BdWRpb01peGVyLT5zZXRQYXJhbWV0ZXIoCi0gICAgICAgICAgICAgICAgICAgICAgICBuYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgdHJhY2tJZCwKICAgICAgICAgICAgICAgICAgICAgICAgIEF1ZGlvTWl4ZXI6OlRSQUNLLAogICAgICAgICAgICAgICAgICAgICAgICAgQXVkaW9NaXhlcjo6TUlYRVJfRk9STUFULCAodm9pZCAqKW1NaXhlckJ1ZmZlckZvcm1hdCk7CiAgICAgICAgICAgICAgICAgbUF1ZGlvTWl4ZXItPnNldFBhcmFtZXRlcigKLSAgICAgICAgICAgICAgICAgICAgICAgIG5hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICB0cmFja0lkLAogICAgICAgICAgICAgICAgICAgICAgICAgQXVkaW9NaXhlcjo6VFJBQ0ssCiAgICAgICAgICAgICAgICAgICAgICAgICBBdWRpb01peGVyOjpNQUlOX0JVRkZFUiwgKHZvaWQgKiltTWl4ZXJCdWZmZXIpOwogICAgICAgICAgICAgICAgIC8vIFRPRE86IG92ZXJyaWRlIHRyYWNrLT5tYWluQnVmZmVyKCk/CiAgICAgICAgICAgICAgICAgbU1peGVyQnVmZmVyVmFsaWQgPSB0cnVlOwogICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICBtQXVkaW9NaXhlci0+c2V0UGFyYW1ldGVyKAotICAgICAgICAgICAgICAgICAgICAgICAgbmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgIHRyYWNrSWQsCiAgICAgICAgICAgICAgICAgICAgICAgICBBdWRpb01peGVyOjpUUkFDSywKICAgICAgICAgICAgICAgICAgICAgICAgIEF1ZGlvTWl4ZXI6Ok1JWEVSX0ZPUk1BVCwgKHZvaWQgKilFRkZFQ1RfQlVGRkVSX0ZPUk1BVCk7CiAgICAgICAgICAgICAgICAgbUF1ZGlvTWl4ZXItPnNldFBhcmFtZXRlcigKLSAgICAgICAgICAgICAgICAgICAgICAgIG5hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICB0cmFja0lkLAogICAgICAgICAgICAgICAgICAgICAgICAgQXVkaW9NaXhlcjo6VFJBQ0ssCiAgICAgICAgICAgICAgICAgICAgICAgICBBdWRpb01peGVyOjpNQUlOX0JVRkZFUiwgKHZvaWQgKil0cmFjay0+bWFpbkJ1ZmZlcigpKTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIG1BdWRpb01peGVyLT5zZXRQYXJhbWV0ZXIoCi0gICAgICAgICAgICAgICAgbmFtZSwKKyAgICAgICAgICAgICAgICB0cmFja0lkLAogICAgICAgICAgICAgICAgIEF1ZGlvTWl4ZXI6OlRSQUNLLAogICAgICAgICAgICAgICAgIEF1ZGlvTWl4ZXI6OkFVWF9CVUZGRVIsICh2b2lkICopdHJhY2stPmF1eEJ1ZmZlcigpKTsKIApAQCAtNDcyNSwxMyArNDg2MSwxMyBAQAogICAgICAgICAgICAgICAgIG1peGVyU3RhdHVzID0gTUlYRVJfVFJBQ0tTX1JFQURZOwogICAgICAgICAgICAgfQogICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgc2l6ZV90IHVuZGVycnVuRnJhbWVzID0gMDsKICAgICAgICAgICAgIGlmIChmcmFtZXNSZWFkeSA8IGRlc2lyZWRGcmFtZXMgJiYgIXRyYWNrLT5pc1N0b3BwZWQoKSAmJiAhdHJhY2stPmlzUGF1c2VkKCkpIHsKLSAgICAgICAgICAgICAgICBBTE9HVigidHJhY2soJXApIHVuZGVycnVuLCAgZnJhbWVzUmVhZHkoJXp1KSA8IGZyYW1lc0Rlc2lyZWQoJXpkKSIsCi0gICAgICAgICAgICAgICAgICAgICAgICB0cmFjaywgZnJhbWVzUmVhZHksIGRlc2lyZWRGcmFtZXMpOwotICAgICAgICAgICAgICAgIHRyYWNrLT5tQXVkaW9UcmFja1NlcnZlclByb3h5LT50YWxseVVuZGVycnVuRnJhbWVzKGRlc2lyZWRGcmFtZXMpOwotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICB0cmFjay0+bUF1ZGlvVHJhY2tTZXJ2ZXJQcm94eS0+dGFsbHlVbmRlcnJ1bkZyYW1lcygwKTsKKyAgICAgICAgICAgICAgICBBTE9HVigidHJhY2soJWQpIHVuZGVycnVuLCAgZnJhbWVzUmVhZHkoJXp1KSA8IGZyYW1lc0Rlc2lyZWQoJXpkKSIsCisgICAgICAgICAgICAgICAgICAgICAgICB0cmFja0lkLCBmcmFtZXNSZWFkeSwgZGVzaXJlZEZyYW1lcyk7CisgICAgICAgICAgICAgICAgdW5kZXJydW5GcmFtZXMgPSBkZXNpcmVkRnJhbWVzOwogICAgICAgICAgICAgfQorICAgICAgICAgICAgZGVmZXJyZWRPcGVyYXRpb25zLnRhbGx5VW5kZXJydW5GcmFtZXModHJhY2ssIHVuZGVycnVuRnJhbWVzKTsKIAogICAgICAgICAgICAgLy8gY2xlYXIgZWZmZWN0IGNoYWluIGlucHV0IGJ1ZmZlciBpZiBhbiBhY3RpdmUgdHJhY2sgdW5kZXJydW5zIHRvIGF2b2lkIHNlbmRpbmcKICAgICAgICAgICAgIC8vIHByZXZpb3VzIGF1ZGlvIGJ1ZmZlciBhZ2FpbiB0byBlZmZlY3RzCkBAIC00NzQwLDcgKzQ4NzYsNyBAQAogICAgICAgICAgICAgICAgIGNoYWluLT5jbGVhcklucHV0QnVmZmVyKCk7CiAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgIEFMT0dWVigidHJhY2sgJWQgcz0lMDh4IFtOT1QgUkVBRFldIG9uIHRocmVhZCAlcCIsIG5hbWUsIGNibGstPm1TZXJ2ZXIsIHRoaXMpOworICAgICAgICAgICAgQUxPR1ZWKCJ0cmFjayglZCkgcz0lMDh4IFtOT1QgUkVBRFldIG9uIHRocmVhZCAlcCIsIHRyYWNrSWQsIGNibGstPm1TZXJ2ZXIsIHRoaXMpOwogICAgICAgICAgICAgaWYgKCh0cmFjay0+c2hhcmVkQnVmZmVyKCkgIT0gMCkgfHwgdHJhY2stPmlzVGVybWluYXRlZCgpIHx8CiAgICAgICAgICAgICAgICAgICAgIHRyYWNrLT5pc1N0b3BwZWQoKSB8fCB0cmFjay0+aXNQYXVzZWQoKSkgewogICAgICAgICAgICAgICAgIC8vIFdlIGhhdmUgY29uc3VtZWQgYWxsIHRoZSBidWZmZXJzIG9mIHRoaXMgdHJhY2suCkBAIC00NzU5LDcgKzQ4OTUsOCBAQAogICAgICAgICAgICAgICAgIC8vIE5vIGJ1ZmZlcnMgZm9yIHRoaXMgdHJhY2suIEdpdmUgaXQgYSBmZXcgY2hhbmNlcyB0bwogICAgICAgICAgICAgICAgIC8vIGZpbGwgYSBidWZmZXIsIHRoZW4gcmVtb3ZlIGl0IGZyb20gYWN0aXZlIGxpc3QuCiAgICAgICAgICAgICAgICAgaWYgKC0tKHRyYWNrLT5tUmV0cnlDb3VudCkgPD0gMCkgewotICAgICAgICAgICAgICAgICAgICBBTE9HSSgiQlVGRkVSIFRJTUVPVVQ6IHJlbW92ZSglZCkgZnJvbSBhY3RpdmUgbGlzdCBvbiB0aHJlYWQgJXAiLCBuYW1lLCB0aGlzKTsKKyAgICAgICAgICAgICAgICAgICAgQUxPR0koIkJVRkZFUiBUSU1FT1VUOiByZW1vdmUoJWQpIGZyb20gYWN0aXZlIGxpc3Qgb24gdGhyZWFkICVwIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cmFja0lkLCB0aGlzKTsKICAgICAgICAgICAgICAgICAgICAgdHJhY2tzVG9SZW1vdmUtPmFkZCh0cmFjayk7CiAgICAgICAgICAgICAgICAgICAgIC8vIGluZGljYXRlIHRvIGNsaWVudCBwcm9jZXNzIHRoYXQgdGhlIHRyYWNrIHdhcyBkaXNhYmxlZCBiZWNhdXNlIG9mIHVuZGVycnVuOwogICAgICAgICAgICAgICAgICAgICAvLyBpdCB3aWxsIHRoZW4gYXV0b21hdGljYWxseSBjYWxsIHN0YXJ0KCkgd2hlbiBkYXRhIGlzIGF2YWlsYWJsZQpAQCAtNDc3Miw3ICs0OTA5LDcgQEAKICAgICAgICAgICAgICAgICAgICAgbWl4ZXJTdGF0dXMgPSBNSVhFUl9UUkFDS1NfRU5BQkxFRDsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBtQXVkaW9NaXhlci0+ZGlzYWJsZShuYW1lKTsKKyAgICAgICAgICAgIG1BdWRpb01peGVyLT5kaXNhYmxlKHRyYWNrSWQpOwogICAgICAgICB9CiAKICAgICAgICAgfSAgIC8vIGxvY2FsIHZhcmlhYmxlIHNjb3BlIHRvIGF2b2lkIGdvdG8gd2FybmluZwpAQCAtNDgzMyw5ICs0OTcwLDkgQEAKICAgICAvLyBvZiBwcmVwYXJlVHJhY2tzX2woKTsgdGhpcyByZWxlYXNlcyBhbnkgb3V0c3RhbmRpbmcgYnVmZmVyIGJhY2sgdG8gdGhlIHRyYWNrLgogICAgIC8vIFNlZSBhbHNvIHRoZSBpbXBsZW1lbnRhdGlvbiBvZiBkZXN0cm95VHJhY2tfbCgpLgogICAgIGZvciAoY29uc3QgYXV0byAmdHJhY2sgOiAqdHJhY2tzVG9SZW1vdmUpIHsKLSAgICAgICAgY29uc3QgaW50IG5hbWUgPSB0cmFjay0+bmFtZSgpOwotICAgICAgICBpZiAobUF1ZGlvTWl4ZXItPmV4aXN0cyhuYW1lKSkgeyAvLyBOb3JtYWwgdHJhY2tzIGhlcmUsIGZhc3QgdHJhY2tzIGluIEZhc3RNaXhlci4KLSAgICAgICAgICAgIG1BdWRpb01peGVyLT5zZXRCdWZmZXJQcm92aWRlcihuYW1lLCBudWxscHRyIC8qIGJ1ZmZlclByb3ZpZGVyICovKTsKKyAgICAgICAgY29uc3QgaW50IHRyYWNrSWQgPSB0cmFjay0+aWQoKTsKKyAgICAgICAgaWYgKG1BdWRpb01peGVyLT5leGlzdHModHJhY2tJZCkpIHsgLy8gTm9ybWFsIHRyYWNrcyBoZXJlLCBmYXN0IHRyYWNrcyBpbiBGYXN0TWl4ZXIuCisgICAgICAgICAgICBtQXVkaW9NaXhlci0+c2V0QnVmZmVyUHJvdmlkZXIodHJhY2tJZCwgbnVsbHB0ciAvKiBidWZmZXJQcm92aWRlciAqLyk7CiAgICAgICAgIH0KICAgICB9CiAKQEAgLTUwMDQsMTcgKzUxNDEsMTcgQEAKICAgICAgICAgICAgIGRlbGV0ZSBtQXVkaW9NaXhlcjsKICAgICAgICAgICAgIG1BdWRpb01peGVyID0gbmV3IEF1ZGlvTWl4ZXIobU5vcm1hbEZyYW1lQ291bnQsIG1TYW1wbGVSYXRlKTsKICAgICAgICAgICAgIGZvciAoY29uc3QgYXV0byAmdHJhY2sgOiBtVHJhY2tzKSB7Ci0gICAgICAgICAgICAgICAgY29uc3QgaW50IG5hbWUgPSB0cmFjay0+bmFtZSgpOworICAgICAgICAgICAgICAgIGNvbnN0IGludCB0cmFja0lkID0gdHJhY2stPmlkKCk7CiAgICAgICAgICAgICAgICAgc3RhdHVzX3Qgc3RhdHVzID0gbUF1ZGlvTWl4ZXItPmNyZWF0ZSgKLSAgICAgICAgICAgICAgICAgICAgICAgIG5hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICB0cmFja0lkLAogICAgICAgICAgICAgICAgICAgICAgICAgdHJhY2stPm1DaGFubmVsTWFzaywKICAgICAgICAgICAgICAgICAgICAgICAgIHRyYWNrLT5tRm9ybWF0LAogICAgICAgICAgICAgICAgICAgICAgICAgdHJhY2stPm1TZXNzaW9uSWQpOwogICAgICAgICAgICAgICAgIEFMT0dXX0lGKHN0YXR1cyAhPSBOT19FUlJPUiwKLSAgICAgICAgICAgICAgICAgICAgICAgICIlczogY2Fubm90IGNyZWF0ZSB0cmFjayBuYW1lIgotICAgICAgICAgICAgICAgICAgICAgICAgIiAlZCwgbWFzayAlI3gsIGZvcm1hdCAlI3gsIHNlc3Npb25JZCAlZCBpbiBBdWRpb01peGVyIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICIlcygpOiBBdWRpb01peGVyIGNhbm5vdCBjcmVhdGUgdHJhY2soJWQpIgorICAgICAgICAgICAgICAgICAgICAgICAgIiBtYXNrICUjeCwgZm9ybWF0ICUjeCwgc2Vzc2lvbklkICVkIiwKICAgICAgICAgICAgICAgICAgICAgICAgIF9fZnVuY19fLAotICAgICAgICAgICAgICAgICAgICAgICAgbmFtZSwgdHJhY2stPm1DaGFubmVsTWFzaywgdHJhY2stPm1Gb3JtYXQsIHRyYWNrLT5tU2Vzc2lvbklkKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHRyYWNrSWQsIHRyYWNrLT5tQ2hhbm5lbE1hc2ssIHRyYWNrLT5tRm9ybWF0LCB0cmFjay0+bVNlc3Npb25JZCk7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBzZW5kSW9Db25maWdFdmVudF9sKEFVRElPX09VVFBVVF9DT05GSUdfQ0hBTkdFRCk7CiAgICAgICAgIH0KQEAgLTUwMzAsNiArNTE2NywxMiBAQAogICAgIGRwcmludGYoZmQsICIgIFRocmVhZCB0aHJvdHRsZSB0aW1lIChtc2Vjcyk6ICV1XG4iLCBtVGhyZWFkVGhyb3R0bGVUaW1lTXMpOwogICAgIGRwcmludGYoZmQsICIgIEF1ZGlvTWl4ZXIgdHJhY2tzOiAlc1xuIiwgbUF1ZGlvTWl4ZXItPnRyYWNrTmFtZXMoKS5jX3N0cigpKTsKICAgICBkcHJpbnRmKGZkLCAiICBNYXN0ZXIgbW9ubzogJXNcbiIsIG1NYXN0ZXJNb25vID8gIm9uIiA6ICJvZmYiKTsKKyAgICBjb25zdCBkb3VibGUgbGF0ZW5jeU1zID0gbVRpbWVzdGFtcC5nZXRPdXRwdXRTZXJ2ZXJMYXRlbmN5TXMobVNhbXBsZVJhdGUpOworICAgIGlmIChsYXRlbmN5TXMgIT0gMC4pIHsKKyAgICAgICAgZHByaW50ZihmZCwgIiAgTm9ybWFsTWl4ZXIgbGF0ZW5jeSBtczogJS4ybGZcbiIsIGxhdGVuY3lNcyk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgZHByaW50ZihmZCwgIiAgTm9ybWFsTWl4ZXIgbGF0ZW5jeSBtczogdW5hdmFpbFxuIik7CisgICAgfQogCiAgICAgaWYgKGhhc0Zhc3RNaXhlcigpKSB7CiAgICAgICAgIGRwcmludGYoZmQsICIgIEZhc3RNaXhlciB0aHJlYWQgJXAgdGlkPSVkIiwgbUZhc3RNaXhlci5nZXQoKSwgbUZhc3RNaXhlci0+Z2V0VGlkKCkpOwpAQCAtNTAzOCw5ICs1MTgxLDkgQEAKICAgICAgICAgLy8gd2hpbGUgd2UgYXJlIGR1bXBpbmcgaXQuICBJdCBtYXkgYmUgaW5jb25zaXN0ZW50LCBidXQgaXQgd29uJ3QgbXV0YXRlIQogICAgICAgICAvLyBUaGlzIGlzIGEgbGFyZ2Ugb2JqZWN0IHNvIHdlIHBsYWNlIGl0IG9uIHRoZSBoZWFwLgogICAgICAgICAvLyBGSVhNRSAyNTk3Mjk1ODogTmVlZCBhbiBpbnRlbGxpZ2VudCBjb3B5IGNvbnN0cnVjdG9yIHRoYXQgZG9lcyBub3QgdG91Y2ggdW51c2VkIHBhZ2VzLgotICAgICAgICBjb25zdCBGYXN0TWl4ZXJEdW1wU3RhdGUgKmNvcHkgPSBuZXcgRmFzdE1peGVyRHVtcFN0YXRlKG1GYXN0TWl4ZXJEdW1wU3RhdGUpOworICAgICAgICBjb25zdCBzdGQ6OnVuaXF1ZV9wdHI8RmFzdE1peGVyRHVtcFN0YXRlPiBjb3B5ID0KKyAgICAgICAgICAgICAgICBzdGQ6Om1ha2VfdW5pcXVlPEZhc3RNaXhlckR1bXBTdGF0ZT4obUZhc3RNaXhlckR1bXBTdGF0ZSk7CiAgICAgICAgIGNvcHktPmR1bXAoZmQpOwotICAgICAgICBkZWxldGUgY29weTsKIAogI2lmZGVmIFNUQVRFX1FVRVVFX0RVTVAKICAgICAgICAgLy8gU2ltaWxhciBmb3Igc3RhdGUgcXVldWUKQEAgLTUwNjEsMTIgKzUyMDQsNiBAQAogICAgIH0gZWxzZSB7CiAgICAgICAgIGRwcmludGYoZmQsICIgIE5vIEZhc3RNaXhlclxuIik7CiAgICAgfQotCi0jaWZkZWYgVEVFX1NJTksKLSAgICAvLyBXcml0ZSB0aGUgdGVlIG91dHB1dCB0byBhIC53YXYgZmlsZQotICAgIGR1bXBUZWUoZmQsIG1UZWVTb3VyY2UsIG1JZCwgJ00nKTsKLSNlbmRpZgotCiB9CiAKIHVpbnQzMl90IEF1ZGlvRmxpbmdlcjo6TWl4ZXJUaHJlYWQ6OmlkbGVTbGVlcFRpbWVVcygpIGNvbnN0CkBAIC01MjUzLDcgKzUzOTAsNyBAQAogICAgICAgICBpZiAoKHRyYWNrLT5mcmFtZXNSZWFkeSgpID49IG1pbkZyYW1lcykgJiYgdHJhY2stPmlzUmVhZHkoKSAmJiAhdHJhY2stPmlzUGF1c2VkKCkgJiYKICAgICAgICAgICAgICAgICAhdHJhY2stPmlzU3RvcHBpbmdfMigpICYmICF0cmFjay0+aXNTdG9wcGVkKCkpCiAgICAgICAgIHsKLSAgICAgICAgICAgIEFMT0dWVigidHJhY2sgJWQgcz0lMDh4IFtPS10iLCB0cmFjay0+bmFtZSgpLCBjYmxrLT5tU2VydmVyKTsKKyAgICAgICAgICAgIEFMT0dWVigidHJhY2soJWQpIHM9JTA4eCBbT0tdIiwgdHJhY2stPmlkKCksIGNibGstPm1TZXJ2ZXIpOwogCiAgICAgICAgICAgICBpZiAodHJhY2stPm1GaWxsaW5nVXBTdGF0dXMgPT0gVHJhY2s6OkZTX0ZJTExFRCkgewogICAgICAgICAgICAgICAgIHRyYWNrLT5tRmlsbGluZ1VwU3RhdHVzID0gVHJhY2s6OkZTX0FDVElWRTsKQEAgLTUzMjksNyArNTQ2Niw3IEBACiAgICAgICAgICAgICAgICAgLy8gZmlsbCBhIGJ1ZmZlciwgdGhlbiByZW1vdmUgaXQgZnJvbSBhY3RpdmUgbGlzdC4KICAgICAgICAgICAgICAgICAvLyBPbmx5IGNvbnNpZGVyIGxhc3QgdHJhY2sgc3RhcnRlZCBmb3IgbWl4ZXIgc3RhdGUgY29udHJvbAogICAgICAgICAgICAgICAgIGlmICgtLSh0cmFjay0+bVJldHJ5Q291bnQpIDw9IDApIHsKLSAgICAgICAgICAgICAgICAgICAgQUxPR1YoIkJVRkZFUiBUSU1FT1VUOiByZW1vdmUoJWQpIGZyb20gYWN0aXZlIGxpc3QiLCB0cmFjay0+bmFtZSgpKTsKKyAgICAgICAgICAgICAgICAgICAgQUxPR1YoIkJVRkZFUiBUSU1FT1VUOiByZW1vdmUgdHJhY2soJWQpIGZyb20gYWN0aXZlIGxpc3QiLCB0cmFjay0+aWQoKSk7CiAgICAgICAgICAgICAgICAgICAgIHRyYWNrc1RvUmVtb3ZlLT5hZGQodHJhY2spOwogICAgICAgICAgICAgICAgICAgICAvLyBpbmRpY2F0ZSB0byBjbGllbnQgcHJvY2VzcyB0aGF0IHRoZSB0cmFjayB3YXMgZGlzYWJsZWQgYmVjYXVzZSBvZiB1bmRlcnJ1bjsKICAgICAgICAgICAgICAgICAgICAgLy8gaXQgd2lsbCB0aGVuIGF1dG9tYXRpY2FsbHkgY2FsbCBzdGFydCgpIHdoZW4gZGF0YSBpcyBhdmFpbGFibGUKQEAgLTU1NjgsNiArNTcwNSw3IEBACiAgICAgbU91dHB1dC0+Zmx1c2goKTsKICAgICBtSHdQYXVzZWQgPSBmYWxzZTsKICAgICBtRmx1c2hQZW5kaW5nID0gZmFsc2U7CisgICAgbVRpbWVzdGFtcFZlcmlmaWVyLmRpc2NvbnRpbnVpdHkoKTsgLy8gRElSRUNUIGFuZCBPRkZMT0FERUQgZmx1c2ggcmVzZXRzIGZyYW1lIGNvdW50LgogfQogCiBpbnQ2NF90IEF1ZGlvRmxpbmdlcjo6RGlyZWN0T3V0cHV0VGhyZWFkOjpjb21wdXRlV2FpdFRpbWVOc19sKCkgY29uc3QgewpAQCAtNTgxMSw3ICs1OTQ5LDcgQEAKICAgICAgICAgICAgIH0KICAgICAgICAgfSAgZWxzZSBpZiAodHJhY2stPmZyYW1lc1JlYWR5KCkgJiYgdHJhY2stPmlzUmVhZHkoKSAmJgogICAgICAgICAgICAgICAgICF0cmFjay0+aXNQYXVzZWQoKSAmJiAhdHJhY2stPmlzVGVybWluYXRlZCgpICYmICF0cmFjay0+aXNTdG9wcGluZ18yKCkpIHsKLSAgICAgICAgICAgIEFMT0dWVigiT2ZmbG9hZFRocmVhZDogdHJhY2sgJWQgcz0lMDh4IFtPS10iLCB0cmFjay0+bmFtZSgpLCBjYmxrLT5tU2VydmVyKTsKKyAgICAgICAgICAgIEFMT0dWVigiT2ZmbG9hZFRocmVhZDogdHJhY2soJWQpIHM9JTA4eCBbT0tdIiwgdHJhY2stPmlkKCksIGNibGstPm1TZXJ2ZXIpOwogICAgICAgICAgICAgaWYgKHRyYWNrLT5tRmlsbGluZ1VwU3RhdHVzID09IFRyYWNrOjpGU19GSUxMRUQpIHsKICAgICAgICAgICAgICAgICB0cmFjay0+bUZpbGxpbmdVcFN0YXR1cyA9IFRyYWNrOjpGU19BQ1RJVkU7CiAgICAgICAgICAgICAgICAgaWYgKGxhc3QpIHsKQEAgLTU4NTUsNyArNTk5Myw3IEBACiAgICAgICAgICAgICAgICAgbWl4ZXJTdGF0dXMgPSBNSVhFUl9UUkFDS1NfUkVBRFk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBBTE9HVlYoIk9mZmxvYWRUaHJlYWQ6IHRyYWNrICVkIHM9JTA4eCBbTk9UIFJFQURZXSIsIHRyYWNrLT5uYW1lKCksIGNibGstPm1TZXJ2ZXIpOworICAgICAgICAgICAgQUxPR1ZWKCJPZmZsb2FkVGhyZWFkOiB0cmFjayglZCkgcz0lMDh4IFtOT1QgUkVBRFldIiwgdHJhY2stPmlkKCksIGNibGstPm1TZXJ2ZXIpOwogICAgICAgICAgICAgaWYgKHRyYWNrLT5pc1N0b3BwaW5nXzEoKSkgewogICAgICAgICAgICAgICAgIGlmICgtLSh0cmFjay0+bVJldHJ5Q291bnQpIDw9IDApIHsKICAgICAgICAgICAgICAgICAgICAgLy8gSGFyZHdhcmUgYnVmZmVyIGNhbiBob2xkIGEgbGFyZ2UgYW1vdW50IG9mIGF1ZGlvIHNvIHdlIG11c3QKQEAgLTU5MDIsNiArNjA0MCwxNCBAQAogICAgICAgICAgICAgICAgICAgICB0cmFjay0+cHJlc2VudGF0aW9uQ29tcGxldGUoZnJhbWVzV3JpdHRlbiwgYXVkaW9IQUxGcmFtZXMpOwogICAgICAgICAgICAgICAgICAgICB0cmFjay0+cmVzZXQoKTsKICAgICAgICAgICAgICAgICAgICAgdHJhY2tzVG9SZW1vdmUtPmFkZCh0cmFjayk7CisgICAgICAgICAgICAgICAgICAgIC8vIERJUkVDVCBhbmQgT0ZGTE9BREVEIHN0b3AgcmVzZXRzIGZyYW1lIGNvdW50cy4KKyAgICAgICAgICAgICAgICAgICAgaWYgKCFtVXNlQXN5bmNXcml0ZSkgeworICAgICAgICAgICAgICAgICAgICAgICAgLy8gSWYgd2UgZG9uJ3QgZ2V0IGV4cGxpY2l0IGRyYWluIG5vdGlmaWNhdGlvbiB3ZSBtdXN0CisgICAgICAgICAgICAgICAgICAgICAgICAvLyByZWdpc3RlciBkaXNjb250aW51aXR5IHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciB0aGlzIGlzCisgICAgICAgICAgICAgICAgICAgICAgICAvLyB0aGUgcHJldmlvdXMgKCFsYXN0KSBvciB0aGUgdXBjb21pbmcgKGxhc3QpIHRyYWNrCisgICAgICAgICAgICAgICAgICAgICAgICAvLyB0byBhdm9pZCBza2lwcGluZyB0aGUgZGlzY29udGludWl0eS4KKyAgICAgICAgICAgICAgICAgICAgICAgIG1UaW1lc3RhbXBWZXJpZmllci5kaXNjb250aW51aXR5KCk7CisgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgIC8vIE5vIGJ1ZmZlcnMgZm9yIHRoaXMgdHJhY2suIEdpdmUgaXQgYSBmZXcgY2hhbmNlcyB0bwpAQCAtNTkyMyw4ICs2MDY5LDggQEAKICAgICAgICAgICAgICAgICAgICAgaWYgKHJ1bm5pbmcpIHsgLy8gc3RpbGwgcnVubmluZywgZ2l2ZSB1cyBtb3JlIHRpbWUuCiAgICAgICAgICAgICAgICAgICAgICAgICB0cmFjay0+bVJldHJ5Q291bnQgPSBrTWF4VHJhY2tSZXRyaWVzT2ZmbG9hZDsKICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIEFMT0dWKCJPZmZsb2FkVGhyZWFkOiBCVUZGRVIgVElNRU9VVDogcmVtb3ZlKCVkKSBmcm9tIGFjdGl2ZSBsaXN0IiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJhY2stPm5hbWUoKSk7CisgICAgICAgICAgICAgICAgICAgICAgICBBTE9HVigiT2ZmbG9hZFRocmVhZDogQlVGRkVSIFRJTUVPVVQ6IHJlbW92ZSB0cmFjayglZCkgZnJvbSBhY3RpdmUgbGlzdCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyYWNrLT5pZCgpKTsKICAgICAgICAgICAgICAgICAgICAgICAgIHRyYWNrc1RvUmVtb3ZlLT5hZGQodHJhY2spOwogICAgICAgICAgICAgICAgICAgICAgICAgLy8gdGVsbCBjbGllbnQgcHJvY2VzcyB0aGF0IHRoZSB0cmFjayB3YXMgZGlzYWJsZWQgYmVjYXVzZSBvZiB1bmRlcnJ1bjsKICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGl0IHdpbGwgdGhlbiBhdXRvbWF0aWNhbGx5IGNhbGwgc3RhcnQoKSB3aGVuIGRhdGEgaXMgYXZhaWxhYmxlCkBAIC02MDY3LDcgKzYyMTMsMjIgQEAKIHNzaXplX3QgQXVkaW9GbGluZ2VyOjpEdXBsaWNhdGluZ1RocmVhZDo6dGhyZWFkTG9vcF93cml0ZSgpCiB7CiAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBvdXRwdXRUcmFja3Muc2l6ZSgpOyBpKyspIHsKLSAgICAgICAgb3V0cHV0VHJhY2tzW2ldLT53cml0ZShtU2lua0J1ZmZlciwgd3JpdGVGcmFtZXMpOworICAgICAgICBjb25zdCBzc2l6ZV90IGFjdHVhbFdyaXR0ZW4gPSBvdXRwdXRUcmFja3NbaV0tPndyaXRlKG1TaW5rQnVmZmVyLCB3cml0ZUZyYW1lcyk7CisKKyAgICAgICAgLy8gQ29uc2lkZXIgdGhlIGZpcnN0IE91dHB1dFRyYWNrIGZvciB0aW1lc3RhbXAgYW5kIGZyYW1lIGNvdW50aW5nLgorCisgICAgICAgIC8vIFRoZSB0aHJlYWRMb29wKCkgZ2VuZXJhbGx5IGFzc3VtZXMgd3JpdGluZyBhIGZ1bGwgc2luayBidWZmZXIgc2l6ZSBhdCBhIHRpbWUuCisgICAgICAgIC8vIEhlcmUsIHdlIGNvcnJlY3QgZm9yIHdyaXRlRnJhbWVzIG9mIDAgKGEgc3RvcCkgb3IgdW5kZXJydW5zIGJlY2F1c2UKKyAgICAgICAgLy8gd2UgYWx3YXlzIGNsYWltIHN1Y2Nlc3MuCisgICAgICAgIGlmIChpID09IDApIHsKKyAgICAgICAgICAgIGNvbnN0IHNzaXplX3QgY29ycmVjdGlvbiA9IG1TaW5rQnVmZmVyU2l6ZSAvIG1GcmFtZVNpemUgLSBhY3R1YWxXcml0dGVuOworICAgICAgICAgICAgQUxPR0RfSUYoY29ycmVjdGlvbiAhPSAwICYmIHdyaXRlRnJhbWVzICE9IDAsCisgICAgICAgICAgICAgICAgICAgICIlczogd3JpdGVGcmFtZXM6JXUgIGFjdHVhbFdyaXR0ZW46JXpkICBjb3JyZWN0aW9uOiV6ZCAgbUZyYW1lc1dyaXR0ZW46JWxsZCIsCisgICAgICAgICAgICAgICAgICAgIF9fZnVuY19fLCB3cml0ZUZyYW1lcywgYWN0dWFsV3JpdHRlbiwgY29ycmVjdGlvbiwgKGxvbmcgbG9uZyltRnJhbWVzV3JpdHRlbik7CisgICAgICAgICAgICBtRnJhbWVzV3JpdHRlbiAtPSBjb3JyZWN0aW9uOworICAgICAgICB9CisKKyAgICAgICAgLy8gVE9ETzogUmVwb3J0IGNvcnJlY3Rpb24gZm9yIHRoZSBvdGhlciBvdXRwdXQgdHJhY2tzIGFuZCBzaG93IGluIHRoZSBkdW1wLgogICAgIH0KICAgICBtU3RhbmRieSA9IGZhbHNlOwogICAgIHJldHVybiAoc3NpemVfdCltU2lua0J1ZmZlclNpemU7CkBAIC02MDkyLDcgKzYyNTMsNyBAQAogICAgICAgICBzcyA8PCAiOiI7CiAgICAgICAgIGZvciAoY29uc3QgYXV0byAmdHJhY2sgOiBtT3V0cHV0VHJhY2tzKSB7CiAgICAgICAgICAgICBjb25zdCBzcDxUaHJlYWRCYXNlPiB0aHJlYWQgPSB0cmFjay0+dGhyZWFkKCkucHJvbW90ZSgpOwotICAgICAgICAgICAgc3MgPDwgIiAoIiA8PCB0cmFjay0+bmFtZSgpIDw8ICIgOiAiOworICAgICAgICAgICAgc3MgPDwgIiAoIiA8PCB0cmFjay0+aWQoKSA8PCAiIDogIjsKICAgICAgICAgICAgIGlmICh0aHJlYWQuZ2V0KCkgIT0gbnVsbHB0cikgewogICAgICAgICAgICAgICAgIHNzIDw8IHRocmVhZC5nZXQoKSA8PCAiLCAiIDw8IHRocmVhZC0+aWQoKTsKICAgICAgICAgICAgIH0gZWxzZSB7CkBAIC02MjMyLDkgKzYzOTMsNiBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdWRpb19kZXZpY2VzX3Qgb3V0RGV2aWNlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdWRpb19kZXZpY2VzX3QgaW5EZXZpY2UsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgc3lzdGVtUmVhZHkKLSNpZmRlZiBURUVfU0lOSwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAsIGNvbnN0IHNwPE5CQUlPX1Npbms+JiB0ZWVTaW5rCi0jZW5kaWYKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKSA6CiAgICAgVGhyZWFkQmFzZShhdWRpb0ZsaW5nZXIsIGlkLCBvdXREZXZpY2UsIGluRGV2aWNlLCBSRUNPUkQsIHN5c3RlbVJlYWR5KSwKICAgICBtSW5wdXQoaW5wdXQpLApAQCAtNjI0Miw5ICs2NDAwLDYgQEAKICAgICBtUnNtcEluQnVmZmVyKE5VTEwpLAogICAgIC8vIG1Sc21wSW5GcmFtZXMsIG1Sc21wSW5GcmFtZXNQMiwgYW5kIG1Sc21wSW5GcmFtZXNPQSBhcmUgc2V0IGJ5IHJlYWRJbnB1dFBhcmFtZXRlcnNfbCgpCiAgICAgbVJzbXBJblJlYXIoMCkKLSNpZmRlZiBURUVfU0lOSwotICAgICwgbVRlZVNpbmsodGVlU2luaykKLSNlbmRpZgogICAgICwgbVJlYWRPbmx5SGVhcChuZXcgTWVtb3J5RGVhbGVyKGtSZWNvcmRUaHJlYWRSZWFkT25seUhlYXBTaXplLAogICAgICAgICAgICAgIlJlY29yZFRocmVhZFJPIiwgTWVtb3J5SGVhcEJhc2U6OlJFQURfT05MWSkpCiAgICAgLy8gbUZhc3RDYXB0dXJlIGJlbG93CkBAIC02MjYxLDggKzY0MTYsMjAgQEAKICAgICBzbnByaW50ZihtVGhyZWFkTmFtZSwga1RocmVhZE5hbWVMZW5ndGgsICJBdWRpb0luXyVYIiwgaWQpOwogICAgIG1OQkxvZ1dyaXRlciA9IGF1ZGlvRmxpbmdlci0+bmV3V3JpdGVyX2woa0xvZ1NpemUsIG1UaHJlYWROYW1lKTsKIAorICAgIGlmIChtSW5wdXQgIT0gbnVsbHB0ciAmJiBtSW5wdXQtPmF1ZGlvSHdEZXYgIT0gbnVsbHB0cikgeworICAgICAgICBtSXNNc2REZXZpY2UgPSBzdHJjbXAoCisgICAgICAgICAgICAgICAgbUlucHV0LT5hdWRpb0h3RGV2LT5tb2R1bGVOYW1lKCksIEFVRElPX0hBUkRXQVJFX01PRFVMRV9JRF9NU0QpID09IDA7CisgICAgfQorCiAgICAgcmVhZElucHV0UGFyYW1ldGVyc19sKCk7CiAKKyAgICAvLyBUT0RPOiBXZSBtYXkgYWxzbyBtYXRjaCBvbiBhZGRyZXNzIGFzIHdlbGwgYXMgZGV2aWNlIHR5cGUgZm9yCisgICAgLy8gQVVESU9fREVWSUNFX0lOX0JVUywgQVVESU9fREVWSUNFX0lOX0JMVUVUT09USF9BMkRQLCBBVURJT19ERVZJQ0VfSU5fUkVNT1RFX1NVQk1JWAorICAgIG1UaW1lc3RhbXBDb3JyZWN0ZWREZXZpY2VzID0gKGF1ZGlvX2RldmljZXNfdClwcm9wZXJ0eV9nZXRfaW50NjQoCisgICAgICAgICAgICAiYXVkaW8udGltZXN0YW1wLmNvcnJlY3RlZF9pbnB1dF9kZXZpY2VzIiwKKyAgICAgICAgICAgIChpbnQ2NF90KShtSXNNc2REZXZpY2UgPyBBVURJT19ERVZJQ0VfSU5fQlVTIC8vIHR1cm4gb24gYnkgZGVmYXVsdCBmb3IgTVNECisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogQVVESU9fREVWSUNFX05PTkUpKTsKKwogICAgIC8vIGNyZWF0ZSBhbiBOQkFJTyBzb3VyY2UgZm9yIHRoZSBIQUwgaW5wdXQgc3RyZWFtLCBhbmQgbmVnb3RpYXRlCiAgICAgbUlucHV0U291cmNlID0gbmV3IEF1ZGlvU3RyZWFtSW5Tb3VyY2UoaW5wdXQtPnN0cmVhbSk7CiAgICAgc2l6ZV90IG51bUNvdW50ZXJPZmZlcnMgPSAwOwpAQCAtNjM1OSw3ICs2NTI2LDcgQEAKICAgICAgICAgLy8gc3RhcnQgdGhlIGZhc3QgY2FwdHVyZQogICAgICAgICBtRmFzdENhcHR1cmUtPnJ1bigiRmFzdENhcHR1cmUiLCBBTkRST0lEX1BSSU9SSVRZX1VSR0VOVF9BVURJTyk7CiAgICAgICAgIHBpZF90IHRpZCA9IG1GYXN0Q2FwdHVyZS0+Z2V0VGlkKCk7Ci0gICAgICAgIHNlbmRQcmlvQ29uZmlnRXZlbnQoZ2V0cGlkX2NhY2hlZCwgdGlkLCBrUHJpb3JpdHlGYXN0Q2FwdHVyZSwgZmFsc2UgLypmb3JBcHAqLyk7CisgICAgICAgIHNlbmRQcmlvQ29uZmlnRXZlbnQoZ2V0cGlkKCksIHRpZCwga1ByaW9yaXR5RmFzdENhcHR1cmUsIGZhbHNlIC8qZm9yQXBwKi8pOwogICAgICAgICBzdHJlYW0oKS0+c2V0SGFsVGhyZWFkUHJpb3JpdHkoa1ByaW9yaXR5RmFzdENhcHR1cmUpOwogI2lmZGVmIEFVRElPX1dBVENIRE9HCiAgICAgICAgIC8vIEZJWE1FCkBAIC02MzY3LDYgKzY1MzQsMTAgQEAKIAogICAgICAgICBtRmFzdFRyYWNrQXZhaWwgPSB0cnVlOwogICAgIH0KKyNpZmRlZiBURUVfU0lOSworICAgIG1UZWUuc2V0KG1JbnB1dFNvdXJjZS0+Zm9ybWF0KCksIE5CQUlPX1RlZTo6VEVFX0ZMQUdfSU5QVVRfVEhSRUFEKTsKKyAgICBtVGVlLnNldElkKHN0ZDo6c3RyaW5nKCJfIikgKyBzdGQ6OnRvX3N0cmluZyhtSWQpICsgIl9DIik7CisjZW5kaWYKIGZhaWxlZDogOwogCiAgICAgLy8gRklYTUUgbU5vcm1hbFNvdXJjZQpAQCAtNjQ5NCw2ICs2NjY1LDcgQEAKIAogICAgICAgICAgICAgICAgIGNhc2UgVHJhY2tCYXNlOjpQQVVTSU5HOgogICAgICAgICAgICAgICAgICAgICBtQWN0aXZlVHJhY2tzLnJlbW92ZShhY3RpdmVUcmFjayk7CisgICAgICAgICAgICAgICAgICAgIGFjdGl2ZVRyYWNrLT5tU3RhdGUgPSBUcmFja0Jhc2U6OlBBVVNFRDsKICAgICAgICAgICAgICAgICAgICAgZG9Ccm9hZGNhc3QgPSB0cnVlOwogICAgICAgICAgICAgICAgICAgICBzaXplLS07CiAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwpAQCAtNjUxNSwxMiArNjY4NywxMiBAQAogICAgICAgICAgICAgICAgICAgICBhbGxTdG9wcGVkID0gZmFsc2U7CiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogCi0gICAgICAgICAgICAgICAgY2FzZSBUcmFja0Jhc2U6OklETEU6Ci0gICAgICAgICAgICAgICAgICAgIGkrKzsKLSAgICAgICAgICAgICAgICAgICAgY29udGludWU7Ci0KKyAgICAgICAgICAgICAgICBjYXNlIFRyYWNrQmFzZTo6SURMRTogICAgLy8gY2Fubm90IGJlIG9uIEFjdGl2ZVRyYWNrcyBpZiBpZGxlCisgICAgICAgICAgICAgICAgY2FzZSBUcmFja0Jhc2U6OlBBVVNFRDogIC8vIGNhbm5vdCBiZSBvbiBBY3RpdmVUcmFja3MgaWYgcGF1c2VkCisgICAgICAgICAgICAgICAgY2FzZSBUcmFja0Jhc2U6OlNUT1BQRUQ6IC8vIGNhbm5vdCBiZSBvbiBBY3RpdmVUcmFja3MgaWYgZGVzdHJveWVkL3Rlcm1pbmF0ZWQKICAgICAgICAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgICAgICAgICBMT0dfQUxXQVlTX0ZBVEFMKCJVbmV4cGVjdGVkIGFjdGl2ZVRyYWNrU3RhdGUgJWQiLCBhY3RpdmVUcmFja1N0YXRlKTsKKyAgICAgICAgICAgICAgICAgICAgTE9HX0FMV0FZU19GQVRBTCgiJXM6IFVuZXhwZWN0ZWQgYWN0aXZlIHRyYWNrIHN0YXRlOiVkLCBpZDolZCwgdHJhY2tzOiV6dSIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19mdW5jX18sIGFjdGl2ZVRyYWNrU3RhdGUsIGFjdGl2ZVRyYWNrLT5pZCgpLCBzaXplKTsKICAgICAgICAgICAgICAgICB9CiAKICAgICAgICAgICAgICAgICBhY3RpdmVUcmFja3MuYWRkKGFjdGl2ZVRyYWNrKTsKQEAgLTY1NDUsNyArNjcxNyw3IEBACiAgICAgICAgICAgICB9CiAKICAgICAgICAgICAgIC8vIHNsZWVwIGlmIHRoZXJlIGFyZSBubyBhY3RpdmUgdHJhY2tzIHRvIHByb2Nlc3MKLSAgICAgICAgICAgIGlmIChhY3RpdmVUcmFja3Muc2l6ZSgpID09IDApIHsKKyAgICAgICAgICAgIGlmIChhY3RpdmVUcmFja3MuaXNFbXB0eSgpKSB7CiAgICAgICAgICAgICAgICAgaWYgKHNsZWVwVXMgPT0gMCkgewogICAgICAgICAgICAgICAgICAgICBzbGVlcFVzID0ga1JlY29yZFRocmVhZFNsZWVwVXM7CiAgICAgICAgICAgICAgICAgfQpAQCAtNjU5Niw2ICs2NzY4LDE0IEBACiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIGRpZE1vZGlmeSA9IHRydWU7CiAgICAgICAgICAgICB9CisgICAgICAgICAgICBBdWRpb0J1ZmZlclByb3ZpZGVyKiBhYnAgPSAoZmFzdFRyYWNrICE9IDAgJiYgZmFzdFRyYWNrLT5pc1BhdGNoVHJhY2soKSkgPworICAgICAgICAgICAgICAgICAgICByZWludGVycHJldF9jYXN0PEF1ZGlvQnVmZmVyUHJvdmlkZXIqPihmYXN0VHJhY2suZ2V0KCkpIDogbnVsbHB0cjsKKyAgICAgICAgICAgIGlmIChzdGF0ZS0+bUZhc3RQYXRjaFJlY29yZEJ1ZmZlclByb3ZpZGVyICE9IGFicCkgeworICAgICAgICAgICAgICAgIHN0YXRlLT5tRmFzdFBhdGNoUmVjb3JkQnVmZmVyUHJvdmlkZXIgPSBhYnA7CisgICAgICAgICAgICAgICAgc3RhdGUtPm1GYXN0UGF0Y2hSZWNvcmRGb3JtYXQgPSBmYXN0VHJhY2sgPT0gMCA/CisgICAgICAgICAgICAgICAgICAgICAgICBBVURJT19GT1JNQVRfSU5WQUxJRCA6IGZhc3RUcmFjay0+Zm9ybWF0KCk7CisgICAgICAgICAgICAgICAgZGlkTW9kaWZ5ID0gdHJ1ZTsKKyAgICAgICAgICAgIH0KICAgICAgICAgICAgIHNxLT5lbmQoZGlkTW9kaWZ5KTsKICAgICAgICAgICAgIGlmIChkaWRNb2RpZnkpIHsKICAgICAgICAgICAgICAgICBzcS0+cHVzaChibG9jayk7CkBAIC02NjIxLDggKzY4MDEsNyBAQAogCiAgICAgICAgIC8vIElmIGFuIE5CQUlPIHNvdXJjZSBpcyBwcmVzZW50LCB1c2UgaXQgdG8gcmVhZCB0aGUgbm9ybWFsIGNhcHR1cmUncyBkYXRhCiAgICAgICAgIGlmIChtUGlwZVNvdXJjZSAhPSAwKSB7Ci0gICAgICAgICAgICBzaXplX3QgZnJhbWVzVG9SZWFkID0gbUJ1ZmZlclNpemUgLyBtRnJhbWVTaXplOwotICAgICAgICAgICAgZnJhbWVzVG9SZWFkID0gbWluKG1Sc21wSW5GcmFtZXNPQSAtIHJlYXIsIG1Sc21wSW5GcmFtZXNQMiAvIDIpOworICAgICAgICAgICAgc2l6ZV90IGZyYW1lc1RvUmVhZCA9IG1pbihtUnNtcEluRnJhbWVzT0EgLSByZWFyLCBtUnNtcEluRnJhbWVzUDIgLyAyKTsKIAogICAgICAgICAgICAgLy8gVGhlIGF1ZGlvIGZpZm8gcmVhZCgpIHJldHVybnMgT1ZFUlJVTiBvbiBvdmVyZmxvdywgYW5kIGFkdmFuY2VzIHRoZSByZWFkIHBvaW50ZXIKICAgICAgICAgICAgIC8vIHRvIHRoZSBmdWxsIGJ1ZmZlciBwb2ludCAoY2xlYXJpbmcgdGhlIG92ZXJmbG93IGNvbmRpdGlvbikuICBVcG9uIE9WRVJSVU4gZXJyb3IsCkBAIC02Njg0LDggKzY4NjMsMjQgQEAKICAgICAgICAgLy8gVXBkYXRlIHNlcnZlciB0aW1lc3RhbXAgd2l0aCBrZXJuZWwgc3RhdHMKICAgICAgICAgaWYgKG1QaXBlU291cmNlLmdldCgpID09IG51bGxwdHIgLyogZG9uJ3Qgb2J0YWluIGZvciBGYXN0Q2FwdHVyZSwgY291bGQgYmxvY2sgKi8pIHsKICAgICAgICAgICAgIGludDY0X3QgcG9zaXRpb24sIHRpbWU7Ci0gICAgICAgICAgICBpbnQgcmV0ID0gbUlucHV0LT5zdHJlYW0tPmdldENhcHR1cmVQb3NpdGlvbigmcG9zaXRpb24sICZ0aW1lKTsKLSAgICAgICAgICAgIGlmIChyZXQgPT0gTk9fRVJST1IpIHsKKyAgICAgICAgICAgIGlmIChtU3RhbmRieSkgeworICAgICAgICAgICAgICAgIG1UaW1lc3RhbXBWZXJpZmllci5kaXNjb250aW51aXR5KCk7CisgICAgICAgICAgICB9IGVsc2UgaWYgKG1JbnB1dC0+c3RyZWFtLT5nZXRDYXB0dXJlUG9zaXRpb24oJnBvc2l0aW9uLCAmdGltZSkgPT0gTk9fRVJST1IKKyAgICAgICAgICAgICAgICAgICAgJiYgdGltZSA+IG1UaW1lc3RhbXAubVRpbWVOc1tFeHRlbmRlZFRpbWVzdGFtcDo6TE9DQVRJT05fS0VSTkVMXSkgeworCisgICAgICAgICAgICAgICAgbVRpbWVzdGFtcFZlcmlmaWVyLmFkZChwb3NpdGlvbiwgdGltZSwgbVNhbXBsZVJhdGUpOworCisgICAgICAgICAgICAgICAgLy8gQ29ycmVjdCB0aW1lc3RhbXBzCisgICAgICAgICAgICAgICAgaWYgKGlzVGltZXN0YW1wQ29ycmVjdGlvbkVuYWJsZWQoKSkgeworICAgICAgICAgICAgICAgICAgICBBTE9HVigiVFNfQkVGT1JFOiAlZCAlbGxkICVsbGQiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkKCksIChsb25nIGxvbmcpdGltZSwgKGxvbmcgbG9uZylwb3NpdGlvbik7CisgICAgICAgICAgICAgICAgICAgIGF1dG8gY29ycmVjdGVkVGltZXN0YW1wID0gbVRpbWVzdGFtcFZlcmlmaWVyLmdldExhc3RDb3JyZWN0ZWRUaW1lc3RhbXAoKTsKKyAgICAgICAgICAgICAgICAgICAgcG9zaXRpb24gPSBjb3JyZWN0ZWRUaW1lc3RhbXAubUZyYW1lczsKKyAgICAgICAgICAgICAgICAgICAgdGltZSA9IGNvcnJlY3RlZFRpbWVzdGFtcC5tVGltZU5zOworICAgICAgICAgICAgICAgICAgICBBTE9HVigiVFNfQUZURVI6ICVkICVsbGQgJWxsZCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWQoKSwgKGxvbmcgbG9uZyl0aW1lLCAobG9uZyBsb25nKXBvc2l0aW9uKTsKKyAgICAgICAgICAgICAgICB9CisKICAgICAgICAgICAgICAgICBtVGltZXN0YW1wLm1Qb3NpdGlvbltFeHRlbmRlZFRpbWVzdGFtcDo6TE9DQVRJT05fS0VSTkVMXSA9IHBvc2l0aW9uOwogICAgICAgICAgICAgICAgIG1UaW1lc3RhbXAubVRpbWVOc1tFeHRlbmRlZFRpbWVzdGFtcDo6TE9DQVRJT05fS0VSTkVMXSA9IHRpbWU7CiAgICAgICAgICAgICAgICAgLy8gTm90ZTogSW4gZ2VuZXJhbCByZWNvcmQgYnVmZmVycyBzaG91bGQgdGVuZCB0byBiZSBlbXB0eSBpbgpAQCAtNjY5Myw2ICs2ODg4LDggQEAKICAgICAgICAgICAgICAgICAvLwogICAgICAgICAgICAgICAgIC8vIEFsc28sIGl0IGlzIG5vdCBhZHZhbnRhZ2VvdXMgdG8gY2FsbCBnZXRfcHJlc2VudGF0aW9uX3Bvc2l0aW9uIGR1cmluZyB0aGUgcmVhZAogICAgICAgICAgICAgICAgIC8vIGFzIHRoZSByZWFkIG9idGFpbnMgYSBsb2NrLCBwcmV2ZW50aW5nIHRoZSB0aW1lc3RhbXAgY2FsbCBmcm9tIGV4ZWN1dGluZy4KKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgbVRpbWVzdGFtcFZlcmlmaWVyLmVycm9yKCk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICAgICAgLy8gVXNlIHRoaXMgdG8gdHJhY2sgdGltZXN0YW1wIGluZm9ybWF0aW9uCkBAIC02NzA4LDEwICs2OTA1LDExIEBACiAgICAgICAgICAgICBnb3RvIHVubG9jazsKICAgICAgICAgfQogICAgICAgICBBTE9HX0FTU0VSVChmcmFtZXNSZWFkID4gMCk7CisgICAgICAgIG1GcmFtZXNSZWFkICs9IGZyYW1lc1JlYWQ7CiAKLSAgICAgICAgaWYgKG1UZWVTaW5rICE9IDApIHsKLSAgICAgICAgICAgICh2b2lkKSBtVGVlU2luay0+d3JpdGUoKHVpbnQ4X3QqKW1Sc21wSW5CdWZmZXIgKyByZWFyICogbUZyYW1lU2l6ZSwgZnJhbWVzUmVhZCk7Ci0gICAgICAgIH0KKyNpZmRlZiBURUVfU0lOSworICAgICAgICAodm9pZCltVGVlLndyaXRlKCh1aW50OF90KiltUnNtcEluQnVmZmVyICsgcmVhciAqIG1GcmFtZVNpemUsIGZyYW1lc1JlYWQpOworI2VuZGlmCiAgICAgICAgIC8vIElmIGRlc3RpbmF0aW9uIGlzIG5vbi1jb250aWd1b3VzLCB3ZSBub3cgY29ycmVjdCBmb3IgcmVhZGluZyBwYXN0IGVuZCBvZiBidWZmZXIuCiAgICAgICAgIHsKICAgICAgICAgICAgIHNpemVfdCBwYXJ0MSA9IG1Sc21wSW5GcmFtZXNQMiAtIHJlYXI7CkBAIC02NzY5LDkgKzY5NjcsMzMgQEAKICAgICAgICAgICAgICAgICBmcmFtZXNPdXQgPSBtaW4oZnJhbWVzT3V0LAogICAgICAgICAgICAgICAgICAgICAgICAgZGVzdGluYXRpb25GcmFtZXNQb3NzaWJsZSgKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnJhbWVzSW4sIG1TYW1wbGVSYXRlLCBhY3RpdmVUcmFjay0+bVNhbXBsZVJhdGUpKTsKLSAgICAgICAgICAgICAgICAvLyBwcm9jZXNzIGZyYW1lcyBmcm9tIHRoZSBSZWNvcmRUaHJlYWQgYnVmZmVyIHByb3ZpZGVyIHRvIHRoZSBSZWNvcmRUcmFjayBidWZmZXIKLSAgICAgICAgICAgICAgICBmcmFtZXNPdXQgPSBhY3RpdmVUcmFjay0+bVJlY29yZEJ1ZmZlckNvbnZlcnRlci0+Y29udmVydCgKLSAgICAgICAgICAgICAgICAgICAgICAgIGFjdGl2ZVRyYWNrLT5tU2luay5yYXcsIGFjdGl2ZVRyYWNrLT5tUmVzYW1wbGVyQnVmZmVyUHJvdmlkZXIsIGZyYW1lc091dCk7CisKKyAgICAgICAgICAgICAgICBpZiAoYWN0aXZlVHJhY2stPmlzRGlyZWN0KCkpIHsKKyAgICAgICAgICAgICAgICAgICAgLy8gTm8gUmVjb3JkQnVmZmVyQ29udmVydGVyIHVzZWQgZm9yIGRpcmVjdCBzdHJlYW1zLiBQYXNzCisgICAgICAgICAgICAgICAgICAgIC8vIHN0cmFpZ2h0IGZyb20gUmVjb3JkVGhyZWFkIGJ1ZmZlciB0byBSZWNvcmRUcmFjayBidWZmZXIuCisgICAgICAgICAgICAgICAgICAgIEF1ZGlvQnVmZmVyUHJvdmlkZXI6OkJ1ZmZlciBidWZmZXI7CisgICAgICAgICAgICAgICAgICAgIGJ1ZmZlci5mcmFtZUNvdW50ID0gZnJhbWVzT3V0OworICAgICAgICAgICAgICAgICAgICBzdGF0dXNfdCBzdGF0dXMgPSBhY3RpdmVUcmFjay0+bVJlc2FtcGxlckJ1ZmZlclByb3ZpZGVyLT5nZXROZXh0QnVmZmVyKCZidWZmZXIpOworICAgICAgICAgICAgICAgICAgICBpZiAoc3RhdHVzID09IE9LICYmIGJ1ZmZlci5mcmFtZUNvdW50ICE9IDApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIEFMT0dWX0lGKGJ1ZmZlci5mcmFtZUNvdW50ICE9IGZyYW1lc091dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiVzKCkgcmVhZCBsZXNzIHRoYW4gZXhwZWN0ZWQgKCV6dSB2cyAlenUpIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19mdW5jX18sIGJ1ZmZlci5mcmFtZUNvdW50LCBmcmFtZXNPdXQpOworICAgICAgICAgICAgICAgICAgICAgICAgZnJhbWVzT3V0ID0gYnVmZmVyLmZyYW1lQ291bnQ7CisgICAgICAgICAgICAgICAgICAgICAgICBtZW1jcHkoYWN0aXZlVHJhY2stPm1TaW5rLnJhdywgYnVmZmVyLnJhdywgYnVmZmVyLmZyYW1lQ291bnQgKiBtRnJhbWVTaXplKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGFjdGl2ZVRyYWNrLT5tUmVzYW1wbGVyQnVmZmVyUHJvdmlkZXItPnJlbGVhc2VCdWZmZXIoJmJ1ZmZlcik7CisgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgICAgICBmcmFtZXNPdXQgPSAwOworICAgICAgICAgICAgICAgICAgICAgICAgQUxPR0UoIiVzKCkgY2Fubm90IGZpbGwgcmVxdWVzdCwgc3RhdHVzOiAlZCwgZnJhbWVDb3VudDogJXp1IiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2Z1bmNfXywgc3RhdHVzLCBidWZmZXIuZnJhbWVDb3VudCk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICAvLyBwcm9jZXNzIGZyYW1lcyBmcm9tIHRoZSBSZWNvcmRUaHJlYWQgYnVmZmVyIHByb3ZpZGVyIHRvIHRoZSBSZWNvcmRUcmFjaworICAgICAgICAgICAgICAgICAgICAvLyBidWZmZXIKKyAgICAgICAgICAgICAgICAgICAgZnJhbWVzT3V0ID0gYWN0aXZlVHJhY2stPm1SZWNvcmRCdWZmZXJDb252ZXJ0ZXItPmNvbnZlcnQoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWN0aXZlVHJhY2stPm1TaW5rLnJhdywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBhY3RpdmVUcmFjay0+bVJlc2FtcGxlckJ1ZmZlclByb3ZpZGVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZyYW1lc091dCk7CisgICAgICAgICAgICAgICAgfQogCiAgICAgICAgICAgICAgICAgaWYgKGZyYW1lc091dCA+IDAgJiYgKG92ZXJydW4gPT0gT1ZFUlJVTl9VTktOT1dOKSkgewogICAgICAgICAgICAgICAgICAgICBvdmVycnVuID0gT1ZFUlJVTl9GQUxTRTsKQEAgLTY5NDIsNiArNzE2NCwxMiBAQAogICAgICAgICBnb3RvIEV4aXQ7CiAgICAgfQogCisgICAgaWYgKCFhdWRpb19pc19saW5lYXJfcGNtKG1Gb3JtYXQpICYmICgqZmxhZ3MgJiBBVURJT19JTlBVVF9GTEFHX0RJUkVDVCkgPT0gMCkgeworICAgICAgICBBTE9HRSgiY3JlYXRlUmVjb3JkVHJhY2tfbCgpIG9uIGFuIGVuY29kZWQgc3RyZWFtIHJlcXVpcmVzIEFVRElPX0lOUFVUX0ZMQUdfRElSRUNUIik7CisgICAgICAgIGxTdGF0dXMgPSBCQURfVkFMVUU7CisgICAgICAgIGdvdG8gRXhpdDsKKyAgICB9CisKICAgICBpZiAoKnBTYW1wbGVSYXRlID09IDApIHsKICAgICAgICAgKnBTYW1wbGVSYXRlID0gbVNhbXBsZVJhdGU7CiAgICAgfQpAQCAtNzEwNyw4ICs3MzM1LDE0IEBACiAgICAgewogICAgICAgICAvLyBUaGlzIHNlY3Rpb24gaXMgYSByZW5kZXp2b3VzIGJldHdlZW4gYmluZGVyIHRocmVhZCBleGVjdXRpbmcgc3RhcnQoKSBhbmQgUmVjb3JkVGhyZWFkCiAgICAgICAgIEF1dG9NdXRleCBsb2NrKG1Mb2NrKTsKKyAgICAgICAgaWYgKHJlY29yZFRyYWNrLT5pc0ludmFsaWQoKSkgeworICAgICAgICAgICAgcmVjb3JkVHJhY2stPmNsZWFyU3luY1N0YXJ0RXZlbnQoKTsKKyAgICAgICAgICAgIHJldHVybiBJTlZBTElEX09QRVJBVElPTjsKKyAgICAgICAgfQogICAgICAgICBpZiAobUFjdGl2ZVRyYWNrcy5pbmRleE9mKHJlY29yZFRyYWNrKSA+PSAwKSB7CiAgICAgICAgICAgICBpZiAocmVjb3JkVHJhY2stPm1TdGF0ZSA9PSBUcmFja0Jhc2U6OlBBVVNJTkcpIHsKKyAgICAgICAgICAgICAgICAvLyBXZSBoYXZlbid0IHN0b3BwZWQgeWV0IChtb3ZlZCB0byBQQVVTRUQgYW5kIG5vdCBpbiBtQWN0aXZlVHJhY2tzKQorICAgICAgICAgICAgICAgIC8vIHNvIG5vIG5lZWQgdG8gc3RhcnRJbnB1dCgpLgogICAgICAgICAgICAgICAgIEFMT0dWKCJhY3RpdmUgcmVjb3JkIHRyYWNrIFBBVVNJTkcgLT4gQUNUSVZFIik7CiAgICAgICAgICAgICAgICAgcmVjb3JkVHJhY2stPm1TdGF0ZSA9IFRyYWNrQmFzZTo6QUNUSVZFOwogICAgICAgICAgICAgfSBlbHNlIHsKQEAgLTcxMjgsMTEgKzczNjIsMzAgQEAKICAgICAgICAgICAgIGJvb2wgc2lsZW5jZWQ7CiAgICAgICAgICAgICBzdGF0dXMgPSBBdWRpb1N5c3RlbTo6c3RhcnRJbnB1dChyZWNvcmRUcmFjay0+cG9ydElkKCksICZzaWxlbmNlZCk7CiAgICAgICAgICAgICBtTG9jay5sb2NrKCk7Ci0gICAgICAgICAgICAvLyBGSVhNRSBzaG91bGQgdmVyaWZ5IHRoYXQgcmVjb3JkVHJhY2sgaXMgc3RpbGwgaW4gbUFjdGl2ZVRyYWNrcworICAgICAgICAgICAgaWYgKHJlY29yZFRyYWNrLT5pc0ludmFsaWQoKSkgeworICAgICAgICAgICAgICAgIHJlY29yZFRyYWNrLT5jbGVhclN5bmNTdGFydEV2ZW50KCk7CisgICAgICAgICAgICAgICAgaWYgKHN0YXR1cyA9PSBOT19FUlJPUiAmJiByZWNvcmRUcmFjay0+bVN0YXRlID09IFRyYWNrQmFzZTo6U1RBUlRJTkdfMSkgeworICAgICAgICAgICAgICAgICAgICByZWNvcmRUcmFjay0+bVN0YXRlID0gVHJhY2tCYXNlOjpTVEFSVElOR18yOworICAgICAgICAgICAgICAgICAgICAvLyBTVEFSVElOR18yIGZvcmNlcyBkZXN0cm95IHRvIGNhbGwgc3RvcElucHV0LgorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICByZXR1cm4gSU5WQUxJRF9PUEVSQVRJT047CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAocmVjb3JkVHJhY2stPm1TdGF0ZSAhPSBUcmFja0Jhc2U6OlNUQVJUSU5HXzEpIHsKKyAgICAgICAgICAgICAgICBBTE9HVygiJXMoJWQpOiB1bnN5bmNocm9uaXplZCBtU3RhdGU6JWQgY2hhbmdlIiwKKyAgICAgICAgICAgICAgICAgICAgX19mdW5jX18sIHJlY29yZFRyYWNrLT5pZCgpLCByZWNvcmRUcmFjay0+bVN0YXRlKTsKKyAgICAgICAgICAgICAgICAvLyBTb21lb25lIGVsc2UgaGFzIGNoYW5nZWQgc3RhdGUsIGxldCB0aGVtIHRha2Ugb3ZlciwKKyAgICAgICAgICAgICAgICAvLyBsZWF2ZSBtU3RhdGUgaW4gdGhlIG5ldyBzdGF0ZS4KKyAgICAgICAgICAgICAgICByZWNvcmRUcmFjay0+Y2xlYXJTeW5jU3RhcnRFdmVudCgpOworICAgICAgICAgICAgICAgIHJldHVybiBJTlZBTElEX09QRVJBVElPTjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIC8vIHdlJ3JlIG9rLCBidXQgcGVyaGFwcyBzdGFydElucHV0IGhhcyBmYWlsZWQKICAgICAgICAgICAgIGlmIChzdGF0dXMgIT0gTk9fRVJST1IpIHsKKyAgICAgICAgICAgICAgICBBTE9HVygiJXMoJWQpOiBzdGFydElucHV0IGZhaWxlZCwgc3RhdHVzICVkIiwKKyAgICAgICAgICAgICAgICAgICAgX19mdW5jX18sIHJlY29yZFRyYWNrLT5pZCgpLCBzdGF0dXMpOworICAgICAgICAgICAgICAgIC8vIFdlIGFyZSBpbiBBY3RpdmVUcmFja3MgaWYgU1RBUlRJTkdfMSBhbmQgdmFsaWQsIHNvIHJlbW92ZSBmcm9tIEFjdGl2ZVRyYWNrcywKKyAgICAgICAgICAgICAgICAvLyBsZWF2ZSBpbiBTVEFSVElOR18xLCBzbyBkZXN0cm95KCkgd2lsbCBub3QgY2FsbCBzdG9wSW5wdXQuCiAgICAgICAgICAgICAgICAgbUFjdGl2ZVRyYWNrcy5yZW1vdmUocmVjb3JkVHJhY2spOwogICAgICAgICAgICAgICAgIHJlY29yZFRyYWNrLT5jbGVhclN5bmNTdGFydEV2ZW50KCk7Ci0gICAgICAgICAgICAgICAgQUxPR1YoIlJlY29yZFRocmVhZDo6c3RhcnQgZXJyb3IgJWQiLCBzdGF0dXMpOwogICAgICAgICAgICAgICAgIHJldHVybiBzdGF0dXM7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICByZWNvcmRUcmFjay0+c2V0U2lsZW5jZWQoc2lsZW5jZWQpOwpAQCAtNzE0MywyNiArNzM5NiwxNSBAQAogICAgICAgICAvLyBzZWUgcHJldmlvdXNseSBidWZmZXJlZCBkYXRhIGJlZm9yZSBpdCBjYWxsZWQgc3RhcnQoKSwgYnV0IHdpdGggZ3JlYXRlciByaXNrIG9mIG92ZXJydW4uCiAKICAgICAgICAgcmVjb3JkVHJhY2stPm1SZXNhbXBsZXJCdWZmZXJQcm92aWRlci0+cmVzZXQoKTsKLSAgICAgICAgLy8gY2xlYXIgYW55IGNvbnZlcnRlciBzdGF0ZSBhcyBuZXcgZGF0YSB3aWxsIGJlIGRpc2NvbnRpbnVvdXMKLSAgICAgICAgcmVjb3JkVHJhY2stPm1SZWNvcmRCdWZmZXJDb252ZXJ0ZXItPnJlc2V0KCk7CisgICAgICAgIGlmICghcmVjb3JkVHJhY2stPmlzRGlyZWN0KCkpIHsKKyAgICAgICAgICAgIC8vIGNsZWFyIGFueSBjb252ZXJ0ZXIgc3RhdGUgYXMgbmV3IGRhdGEgd2lsbCBiZSBkaXNjb250aW51b3VzCisgICAgICAgICAgICByZWNvcmRUcmFjay0+bVJlY29yZEJ1ZmZlckNvbnZlcnRlci0+cmVzZXQoKTsKKyAgICAgICAgfQogICAgICAgICByZWNvcmRUcmFjay0+bVN0YXRlID0gVHJhY2tCYXNlOjpTVEFSVElOR18yOwogICAgICAgICAvLyBzaWduYWwgdGhyZWFkIHRvIHN0YXJ0CiAgICAgICAgIG1XYWl0V29ya0NWLmJyb2FkY2FzdCgpOwotICAgICAgICBpZiAobUFjdGl2ZVRyYWNrcy5pbmRleE9mKHJlY29yZFRyYWNrKSA8IDApIHsKLSAgICAgICAgICAgIEFMT0dWKCJSZWNvcmQgZmFpbGVkIHRvIHN0YXJ0Iik7Ci0gICAgICAgICAgICBzdGF0dXMgPSBCQURfVkFMVUU7Ci0gICAgICAgICAgICBnb3RvIHN0YXJ0RXJyb3I7Ci0gICAgICAgIH0KICAgICAgICAgcmV0dXJuIHN0YXR1czsKICAgICB9Ci0KLXN0YXJ0RXJyb3I6Ci0gICAgaWYgKHJlY29yZFRyYWNrLT5pc0V4dGVybmFsVHJhY2soKSkgewotICAgICAgICBBdWRpb1N5c3RlbTo6c3RvcElucHV0KHJlY29yZFRyYWNrLT5wb3J0SWQoKSk7Ci0gICAgfQotICAgIHJlY29yZFRyYWNrLT5jbGVhclN5bmNTdGFydEV2ZW50KCk7Ci0gICAgLy8gRklYTUUgSSB3b25kZXIgd2h5IHdlIGRvIG5vdCByZXNldCB0aGUgc3RhdGUgaGVyZT8KLSAgICByZXR1cm4gc3RhdHVzOwogfQogCiB2b2lkIEF1ZGlvRmxpbmdlcjo6UmVjb3JkVGhyZWFkOjpzeW5jU3RhcnRFdmVudENhbGxiYWNrKGNvbnN0IHdwPFN5bmNFdmVudD4mIGV2ZW50KQpAQCAtNzE4MSwyNCArNzQyMywyNiBAQAogYm9vbCBBdWRpb0ZsaW5nZXI6OlJlY29yZFRocmVhZDo6c3RvcChSZWNvcmRUaHJlYWQ6OlJlY29yZFRyYWNrKiByZWNvcmRUcmFjaykgewogICAgIEFMT0dWKCJSZWNvcmRUaHJlYWQ6OnN0b3AiKTsKICAgICBBdXRvTXV0ZXggX2wobUxvY2spOworICAgIC8vIGlmIHdlJ3JlIGludmFsaWQsIHdlIGNhbid0IGJlIG9uIHRoZSBBY3RpdmVUcmFja3MuCiAgICAgaWYgKG1BY3RpdmVUcmFja3MuaW5kZXhPZihyZWNvcmRUcmFjaykgPCAwIHx8IHJlY29yZFRyYWNrLT5tU3RhdGUgPT0gVHJhY2tCYXNlOjpQQVVTSU5HKSB7CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAgICAgLy8gbm90ZSB0aGF0IHRocmVhZExvb3AgbWF5IHN0aWxsIGJlIHByb2Nlc3NpbmcgdGhlIHRyYWNrIGF0IHRoaXMgcG9pbnQgW3dpdGhvdXQgbG9ja10KICAgICByZWNvcmRUcmFjay0+bVN0YXRlID0gVHJhY2tCYXNlOjpQQVVTSU5HOwotICAgIC8vIHNpZ25hbCB0aHJlYWQgdG8gc3RvcAotICAgIG1XYWl0V29ya0NWLmJyb2FkY2FzdCgpOwotICAgIC8vIGRvIG5vdCB3YWl0IGZvciBtU3RhcnRTdG9wQ29uZCBpZiBleGl0aW5nCi0gICAgaWYgKGV4aXRQZW5kaW5nKCkpIHsKLSAgICAgICAgcmV0dXJuIHRydWU7CisKKyAgICB3aGlsZSAocmVjb3JkVHJhY2stPm1TdGF0ZSA9PSBUcmFja0Jhc2U6OlBBVVNJTkcgJiYgIXJlY29yZFRyYWNrLT5pc0ludmFsaWQoKSkgeworICAgICAgICBtV2FpdFdvcmtDVi5icm9hZGNhc3QoKTsgLy8gc2lnbmFsIHRocmVhZCB0byBzdG9wCisgICAgICAgIG1TdGFydFN0b3BDb25kLndhaXQobUxvY2spOwogICAgIH0KLSAgICAvLyBGSVhNRSBpbmNvcnJlY3QgdXNhZ2Ugb2Ygd2FpdDogbm8gZXhwbGljaXQgcHJlZGljYXRlIG9yIGxvb3AKLSAgICBtU3RhcnRTdG9wQ29uZC53YWl0KG1Mb2NrKTsKLSAgICAvLyBpZiB3ZSBoYXZlIGJlZW4gcmVzdGFydGVkLCByZWNvcmRUcmFjayBpcyBpbiBtQWN0aXZlVHJhY2tzIGhlcmUKLSAgICBpZiAoZXhpdFBlbmRpbmcoKSB8fCBtQWN0aXZlVHJhY2tzLmluZGV4T2YocmVjb3JkVHJhY2spIDwgMCkgeworCisgICAgaWYgKHJlY29yZFRyYWNrLT5tU3RhdGUgPT0gVHJhY2tCYXNlOjpQQVVTRUQpIHsgLy8gc3VjY2Vzc2Z1bCBzdG9wCiAgICAgICAgIEFMT0dWKCJSZWNvcmQgc3RvcHBlZCBPSyIpOwogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CisKKyAgICAvLyBkb24ndCBoYW5kbGUgYW55dGhpbmcgLSB3ZSd2ZSBiZWVuIGludmFsaWRhdGVkIG9yIHJlc3RhcnRlZCBhbmQgaW4gYSBkaWZmZXJlbnQgc3RhdGUKKyAgICBBTE9HV19JRigiJXMoJWQpOiB1bnN5bmNocm9uaXplZCBzdG9wLCBzdGF0ZTogJWQiLAorICAgICAgICAgICAgX19mdW5jX18sIHJlY29yZFRyYWNrLT5pZCgpLCByZWNvcmRUcmFjay0+bVN0YXRlKTsKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKQEAgLTczMDAsNyArNzU0NCw4IEBACiAgICAgYXVkaW9faW5wdXRfZmxhZ3NfdCBmbGFncyA9IGlucHV0ICE9IE5VTEwgPyBpbnB1dC0+ZmxhZ3MgOiBBVURJT19JTlBVVF9GTEFHX05PTkU7CiAgICAgZHByaW50ZihmZCwgIiAgQXVkaW9TdHJlYW1JbjogJXAgZmxhZ3MgJSN4ICglcylcbiIsCiAgICAgICAgICAgICBpbnB1dCwgZmxhZ3MsIGlucHV0RmxhZ3NUb1N0cmluZyhmbGFncykuY19zdHIoKSk7Ci0gICAgaWYgKG1BY3RpdmVUcmFja3Muc2l6ZSgpID09IDApIHsKKyAgICBkcHJpbnRmKGZkLCAiICBGcmFtZXMgcmVhZDogJWxsZFxuIiwgKGxvbmcgbG9uZyltRnJhbWVzUmVhZCk7CisgICAgaWYgKG1BY3RpdmVUcmFja3MuaXNFbXB0eSgpKSB7CiAgICAgICAgIGRwcmludGYoZmQsICIgIE5vIGFjdGl2ZSByZWNvcmQgY2xpZW50c1xuIik7CiAgICAgfQogCkBAIC03MzA5LDYgKzc1NTQsMTQgQEAKICAgICAgICAgKHZvaWQpaW5wdXQtPnN0cmVhbS0+ZHVtcChmZCk7CiAgICAgfQogCisgICAgY29uc3QgZG91YmxlIGxhdGVuY3lNcyA9IGF1ZGlvX2lzX2xpbmVhcl9wY20obUZvcm1hdCkKKyAgICAgICAgICAgID8gLSBtVGltZXN0YW1wLmdldE91dHB1dFNlcnZlckxhdGVuY3lNcyhtU2FtcGxlUmF0ZSkgOiAwLjsKKyAgICBpZiAobGF0ZW5jeU1zICE9IDAuKSB7CisgICAgICAgIGRwcmludGYoZmQsICIgIE5vcm1hbFJlY29yZCBsYXRlbmN5IG1zOiAlLjJsZlxuIiwgbGF0ZW5jeU1zKTsKKyAgICB9IGVsc2UgeworICAgICAgICBkcHJpbnRmKGZkLCAiICBOb3JtYWxSZWNvcmQgbGF0ZW5jeSBtczogdW5hdmFpbFxuIik7CisgICAgfQorCiAgICAgZHByaW50ZihmZCwgIiAgRmFzdCBjYXB0dXJlIHRocmVhZDogJXNcbiIsIGhhc0Zhc3RDYXB0dXJlKCkgPyAieWVzIiA6ICJubyIpOwogICAgIGRwcmludGYoZmQsICIgIEZhc3QgdHJhY2sgYXZhaWxhYmxlOiAlc1xuIiwgbUZhc3RUcmFja0F2YWlsID8gInllcyIgOiAibm8iKTsKIApAQCAtNzMxNiw5ICs3NTY5LDkgQEAKICAgICAvLyB3aGlsZSB3ZSBhcmUgZHVtcGluZyBpdC4gIEl0IG1heSBiZSBpbmNvbnNpc3RlbnQsIGJ1dCBpdCB3b24ndCBtdXRhdGUhCiAgICAgLy8gVGhpcyBpcyBhIGxhcmdlIG9iamVjdCBzbyB3ZSBwbGFjZSBpdCBvbiB0aGUgaGVhcC4KICAgICAvLyBGSVhNRSAyNTk3Mjk1ODogTmVlZCBhbiBpbnRlbGxpZ2VudCBjb3B5IGNvbnN0cnVjdG9yIHRoYXQgZG9lcyBub3QgdG91Y2ggdW51c2VkIHBhZ2VzLgotICAgIGNvbnN0IEZhc3RDYXB0dXJlRHVtcFN0YXRlICpjb3B5ID0gbmV3IEZhc3RDYXB0dXJlRHVtcFN0YXRlKG1GYXN0Q2FwdHVyZUR1bXBTdGF0ZSk7CisgICAgY29uc3Qgc3RkOjp1bmlxdWVfcHRyPEZhc3RDYXB0dXJlRHVtcFN0YXRlPiBjb3B5ID0KKyAgICAgICAgICAgIHN0ZDo6bWFrZV91bmlxdWU8RmFzdENhcHR1cmVEdW1wU3RhdGU+KG1GYXN0Q2FwdHVyZUR1bXBTdGF0ZSk7CiAgICAgY29weS0+ZHVtcChmZCk7Ci0gICAgZGVsZXRlIGNvcHk7CiB9CiAKIHZvaWQgQXVkaW9GbGluZ2VyOjpSZWNvcmRUaHJlYWQ6OmR1bXBUcmFja3MoaW50IGZkLCBjb25zdCBWZWN0b3I8U3RyaW5nMTY+JiBhcmdzIF9fdW51c2VkKQpAQCAtNzMzMiw3ICs3NTg1LDcgQEAKICAgICBpZiAobnVtdHJhY2tzKSB7CiAgICAgICAgIGRwcmludGYoZmQsICIgb2Ygd2hpY2ggJXp1IGFyZSBhY3RpdmVcbiIsIG51bWFjdGl2ZSk7CiAgICAgICAgIHJlc3VsdC5hcHBlbmQocHJlZml4KTsKLSAgICAgICAgUmVjb3JkVHJhY2s6OmFwcGVuZER1bXBIZWFkZXIocmVzdWx0KTsKKyAgICAgICAgbVRyYWNrc1swXS0+YXBwZW5kRHVtcEhlYWRlcihyZXN1bHQpOwogICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG51bXRyYWNrcyA7ICsraSkgewogICAgICAgICAgICAgc3A8UmVjb3JkVHJhY2s+IHRyYWNrID0gbVRyYWNrc1tpXTsKICAgICAgICAgICAgIGlmICh0cmFjayAhPSAwKSB7CkBAIC03MzUyLDcgKzc2MDUsNyBAQAogICAgICAgICByZXN1bHQuYXBwZW5kKCIgIFRoZSBmb2xsb3dpbmcgdHJhY2tzIGFyZSBpbiB0aGUgYWN0aXZlIGxpc3QgYnV0IgogICAgICAgICAgICAgICAgICIgbm90IGluIHRoZSB0cmFjayBsaXN0XG4iKTsKICAgICAgICAgcmVzdWx0LmFwcGVuZChwcmVmaXgpOwotICAgICAgICBSZWNvcmRUcmFjazo6YXBwZW5kRHVtcEhlYWRlcihyZXN1bHQpOworICAgICAgICBtQWN0aXZlVHJhY2tzWzBdLT5hcHBlbmREdW1wSGVhZGVyKHJlc3VsdCk7CiAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbnVtYWN0aXZlOyArK2kpIHsKICAgICAgICAgICAgIHNwPFJlY29yZFRyYWNrPiB0cmFjayA9IG1BY3RpdmVUcmFja3NbaV07CiAgICAgICAgICAgICBpZiAobVRyYWNrcy5pbmRleE9mKHRyYWNrKSA8IDApIHsKQEAgLTc2NDcsMTAgKzc5MDAsMTUgQEAKIHsKICAgICBzdGF0dXNfdCByZXN1bHQgPSBtSW5wdXQtPnN0cmVhbS0+Z2V0QXVkaW9Qcm9wZXJ0aWVzKCZtU2FtcGxlUmF0ZSwgJm1DaGFubmVsTWFzaywgJm1IQUxGb3JtYXQpOwogICAgIExPR19BTFdBWVNfRkFUQUxfSUYocmVzdWx0ICE9IE9LLCAiRXJyb3IgcmV0cmlldmluZyBhdWRpbyBwcm9wZXJ0aWVzIGZyb20gSEFMOiAlZCIsIHJlc3VsdCk7Ci0gICAgbUNoYW5uZWxDb3VudCA9IGF1ZGlvX2NoYW5uZWxfY291bnRfZnJvbV9pbl9tYXNrKG1DaGFubmVsTWFzayk7Ci0gICAgTE9HX0FMV0FZU19GQVRBTF9JRihtQ2hhbm5lbENvdW50ID4gRkNDXzgsICJIQUwgY2hhbm5lbCBjb3VudCAlZCA+ICVkIiwgbUNoYW5uZWxDb3VudCwgRkNDXzgpOwogICAgIG1Gb3JtYXQgPSBtSEFMRm9ybWF0OwotICAgIExPR19BTFdBWVNfRkFUQUxfSUYoIWF1ZGlvX2lzX2xpbmVhcl9wY20obUZvcm1hdCksICJIQUwgZm9ybWF0ICUjeCBpcyBub3QgbGluZWFyIHBjbSIsIG1Gb3JtYXQpOworICAgIG1DaGFubmVsQ291bnQgPSBhdWRpb19jaGFubmVsX2NvdW50X2Zyb21faW5fbWFzayhtQ2hhbm5lbE1hc2spOworICAgIGlmIChhdWRpb19pc19saW5lYXJfcGNtKG1Gb3JtYXQpKSB7CisgICAgICAgIExPR19BTFdBWVNfRkFUQUxfSUYobUNoYW5uZWxDb3VudCA+IEZDQ184LCAiSEFMIGNoYW5uZWwgY291bnQgJWQgPiAlZCIsCisgICAgICAgICAgICAgICAgbUNoYW5uZWxDb3VudCwgRkNDXzgpOworICAgIH0gZWxzZSB7CisgICAgICAgIC8vIENhbiBoYXZlIG1vcmUgdGhhdCBGQ0NfOCBjaGFubmVscyBpbiBlbmNvZGVkIHN0cmVhbXMuCisgICAgICAgIEFMT0dJKCJIQUwgZm9ybWF0ICUjeCBpcyBub3QgbGluZWFyIHBjbSIsIG1Gb3JtYXQpOworICAgIH0KICAgICByZXN1bHQgPSBtSW5wdXQtPnN0cmVhbS0+Z2V0RnJhbWVTaXplKCZtRnJhbWVTaXplKTsKICAgICBMT0dfQUxXQVlTX0ZBVEFMX0lGKHJlc3VsdCAhPSBPSywgIkVycm9yIHJldHJpZXZpbmcgZnJhbWUgc2l6ZSBmcm9tIEhBTDogJWQiLCByZXN1bHQpOwogICAgIHJlc3VsdCA9IG1JbnB1dC0+c3RyZWFtLT5nZXRCdWZmZXJTaXplKCZtQnVmZmVyU2l6ZSk7CkBAIC03NzU1LDcgKzgwMTMsNyBAQAogc3RhdHVzX3QgQXVkaW9GbGluZ2VyOjpSZWNvcmRUaHJlYWQ6OmFkZEVmZmVjdENoYWluX2woY29uc3Qgc3A8RWZmZWN0Q2hhaW4+JiBjaGFpbikKIHsKICAgICAvLyBvbmx5IG9uZSBjaGFpbiBwZXIgaW5wdXQgdGhyZWFkCi0gICAgaWYgKG1FZmZlY3RDaGFpbnMuc2l6ZSgpICE9IDApIHsKKyAgICBpZiAoIW1FZmZlY3RDaGFpbnMuaXNFbXB0eSgpKSB7CiAgICAgICAgIEFMT0dXKCJhZGRFZmZlY3RDaGFpbl9sKCkgYWxyZWFkeSBvbmUgY2hhaW4gJXAgb24gdGhyZWFkICVwIiwgY2hhaW4uZ2V0KCksIHRoaXMpOwogICAgICAgICByZXR1cm4gSU5WQUxJRF9PUEVSQVRJT047CiAgICAgfQpAQCAtNzg2MCwyNCArODExOCwyOCBAQAogICAgIHJldHVybiBzdGF0dXM7CiB9CiAKLXZvaWQgQXVkaW9GbGluZ2VyOjpSZWNvcmRUaHJlYWQ6OmFkZFBhdGNoUmVjb3JkKGNvbnN0IHNwPFBhdGNoUmVjb3JkPiYgcmVjb3JkKQordm9pZCBBdWRpb0ZsaW5nZXI6OlJlY29yZFRocmVhZDo6YWRkUGF0Y2hUcmFjayhjb25zdCBzcDxQYXRjaFJlY29yZD4mIHJlY29yZCkKIHsKICAgICBNdXRleDo6QXV0b2xvY2sgX2wobUxvY2spOwogICAgIG1UcmFja3MuYWRkKHJlY29yZCk7CiB9CiAKLXZvaWQgQXVkaW9GbGluZ2VyOjpSZWNvcmRUaHJlYWQ6OmRlbGV0ZVBhdGNoUmVjb3JkKGNvbnN0IHNwPFBhdGNoUmVjb3JkPiYgcmVjb3JkKQordm9pZCBBdWRpb0ZsaW5nZXI6OlJlY29yZFRocmVhZDo6ZGVsZXRlUGF0Y2hUcmFjayhjb25zdCBzcDxQYXRjaFJlY29yZD4mIHJlY29yZCkKIHsKICAgICBNdXRleDo6QXV0b2xvY2sgX2wobUxvY2spOwogICAgIGRlc3Ryb3lUcmFja19sKHJlY29yZCk7CiB9CiAKLXZvaWQgQXVkaW9GbGluZ2VyOjpSZWNvcmRUaHJlYWQ6OmdldEF1ZGlvUG9ydENvbmZpZyhzdHJ1Y3QgYXVkaW9fcG9ydF9jb25maWcgKmNvbmZpZykKK3ZvaWQgQXVkaW9GbGluZ2VyOjpSZWNvcmRUaHJlYWQ6OnRvQXVkaW9Qb3J0Q29uZmlnKHN0cnVjdCBhdWRpb19wb3J0X2NvbmZpZyAqY29uZmlnKQogewotICAgIFRocmVhZEJhc2U6OmdldEF1ZGlvUG9ydENvbmZpZyhjb25maWcpOworICAgIFRocmVhZEJhc2U6OnRvQXVkaW9Qb3J0Q29uZmlnKGNvbmZpZyk7CiAgICAgY29uZmlnLT5yb2xlID0gQVVESU9fUE9SVF9ST0xFX1NJTks7CiAgICAgY29uZmlnLT5leHQubWl4Lmh3X21vZHVsZSA9IG1JbnB1dC0+YXVkaW9Id0Rldi0+aGFuZGxlKCk7CiAgICAgY29uZmlnLT5leHQubWl4LnVzZWNhc2Uuc291cmNlID0gbUF1ZGlvU291cmNlOworICAgIGlmIChtSW5wdXQgJiYgbUlucHV0LT5mbGFncyAhPSBBVURJT19JTlBVVF9GTEFHX05PTkUpIHsKKyAgICAgICAgY29uZmlnLT5jb25maWdfbWFzayB8PSBBVURJT19QT1JUX0NPTkZJR19GTEFHUzsKKyAgICAgICAgY29uZmlnLT5mbGFncy5pbnB1dCA9IG1JbnB1dC0+ZmxhZ3M7CisgICAgfQogfQogCiAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCkBAIC03OTY0LDcgKzgyMjYsNyBAQAogICAgIH0KICAgICAvLyBUaGlzIHdpbGwgZGVjcmVtZW50IHJlZmVyZW5jZXMgYW5kIG1heSBjYXVzZSB0aGUgZGVzdHJ1Y3Rpb24gb2YgdGhpcyB0aHJlYWQuCiAgICAgaWYgKGlzT3V0cHV0KCkpIHsKLSAgICAgICAgQXVkaW9TeXN0ZW06OnJlbGVhc2VPdXRwdXQobUlkLCBzdHJlYW1UeXBlKCksIG1TZXNzaW9uSWQpOworICAgICAgICBBdWRpb1N5c3RlbTo6cmVsZWFzZU91dHB1dChtUG9ydElkKTsKICAgICB9IGVsc2UgewogICAgICAgICBBdWRpb1N5c3RlbTo6cmVsZWFzZUlucHV0KG1Qb3J0SWQpOwogICAgIH0KQEAgLTgwNzgsNyArODM0MCw3IEBACiAKICAgICBib29sIHNpbGVuY2VkID0gZmFsc2U7CiAgICAgaWYgKGlzT3V0cHV0KCkpIHsKLSAgICAgICAgcmV0ID0gQXVkaW9TeXN0ZW06OnN0YXJ0T3V0cHV0KG1JZCwgc3RyZWFtVHlwZSgpLCBtU2Vzc2lvbklkKTsKKyAgICAgICAgcmV0ID0gQXVkaW9TeXN0ZW06OnN0YXJ0T3V0cHV0KHBvcnRJZCk7CiAgICAgfSBlbHNlIHsKICAgICAgICAgcmV0ID0gQXVkaW9TeXN0ZW06OnN0YXJ0SW5wdXQocG9ydElkLCAmc2lsZW5jZWQpOwogICAgIH0KQEAgLTgwODcsMTAgKzgzNDksMTAgQEAKICAgICAvLyBhYm9ydCBpZiBzdGFydCBpcyByZWplY3RlZCBieSBhdWRpbyBwb2xpY3kgbWFuYWdlcgogICAgIGlmIChyZXQgIT0gTk9fRVJST1IpIHsKICAgICAgICAgQUxPR0UoIiVzOiBlcnJvciBzdGFydCByZWplY3RlZCBieSBBdWRpb1BvbGljeU1hbmFnZXIgPSAlZCIsIF9fRlVOQ1RJT05fXywgcmV0KTsKLSAgICAgICAgaWYgKG1BY3RpdmVUcmFja3Muc2l6ZSgpICE9IDApIHsKKyAgICAgICAgaWYgKCFtQWN0aXZlVHJhY2tzLmlzRW1wdHkoKSkgewogICAgICAgICAgICAgbUxvY2sudW5sb2NrKCk7CiAgICAgICAgICAgICBpZiAoaXNPdXRwdXQoKSkgewotICAgICAgICAgICAgICAgIEF1ZGlvU3lzdGVtOjpyZWxlYXNlT3V0cHV0KG1JZCwgc3RyZWFtVHlwZSgpLCBtU2Vzc2lvbklkKTsKKyAgICAgICAgICAgICAgICBBdWRpb1N5c3RlbTo6cmVsZWFzZU91dHB1dChwb3J0SWQpOwogICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICBBdWRpb1N5c3RlbTo6cmVsZWFzZUlucHV0KHBvcnRJZCk7CiAgICAgICAgICAgICB9CkBAIC04MTEzLDcgKzgzNzUsNyBAQAogCiAgICAgLy8gR2l2ZW4gdGhhdCBNbWFwVGhyZWFkOjptQXR0ciBpcyBtdXRhYmxlLCBzaG91bGQgYSBNbWFwVHJhY2sgaGF2ZSBhdHRyaWJ1dGVzID8KICAgICBzcDxNbWFwVHJhY2s+IHRyYWNrID0gbmV3IE1tYXBUcmFjayh0aGlzLCBtQXR0ciwgbVNhbXBsZVJhdGUsIG1Gb3JtYXQsIG1DaGFubmVsTWFzaywgbVNlc3Npb25JZCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGllbnQuY2xpZW50VWlkLCBjbGllbnQuY2xpZW50UGlkLCBwb3J0SWQpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlzT3V0cHV0KCksIGNsaWVudC5jbGllbnRVaWQsIGNsaWVudC5jbGllbnRQaWQsIHBvcnRJZCk7CiAKICAgICB0cmFjay0+c2V0U2lsZW5jZWRfbChzaWxlbmNlZCk7CiAgICAgbUFjdGl2ZVRyYWNrcy5hZGQodHJhY2spOwpAQCAtODE2Miw4ICs4NDI0LDggQEAKIAogICAgIG1Mb2NrLnVubG9jaygpOwogICAgIGlmIChpc091dHB1dCgpKSB7Ci0gICAgICAgIEF1ZGlvU3lzdGVtOjpzdG9wT3V0cHV0KG1JZCwgc3RyZWFtVHlwZSgpLCB0cmFjay0+c2Vzc2lvbklkKCkpOwotICAgICAgICBBdWRpb1N5c3RlbTo6cmVsZWFzZU91dHB1dChtSWQsIHN0cmVhbVR5cGUoKSwgdHJhY2stPnNlc3Npb25JZCgpKTsKKyAgICAgICAgQXVkaW9TeXN0ZW06OnN0b3BPdXRwdXQodHJhY2stPnBvcnRJZCgpKTsKKyAgICAgICAgQXVkaW9TeXN0ZW06OnJlbGVhc2VPdXRwdXQodHJhY2stPnBvcnRJZCgpKTsKICAgICB9IGVsc2UgewogICAgICAgICBBdWRpb1N5c3RlbTo6c3RvcElucHV0KHRyYWNrLT5wb3J0SWQoKSk7CiAgICAgICAgIEF1ZGlvU3lzdGVtOjpyZWxlYXNlSW5wdXQodHJhY2stPnBvcnRJZCgpKTsKQEAgLTgxODgsNyArODQ1MCw3IEBACiAgICAgaWYgKG1IYWxTdHJlYW0gPT0gMCkgewogICAgICAgICByZXR1cm4gTk9fSU5JVDsKICAgICB9Ci0gICAgaWYgKG1BY3RpdmVUcmFja3Muc2l6ZSgpICE9IDApIHsKKyAgICBpZiAoIW1BY3RpdmVUcmFja3MuaXNFbXB0eSgpKSB7CiAgICAgICAgIHJldHVybiBJTlZBTElEX09QRVJBVElPTjsKICAgICB9CiAgICAgbUhhbFN0cmVhbS0+c3RhbmRieSgpOwpAQCAtODQ1OSw5ICs4NzIxLDkgQEAKICAgICByZXR1cm4gc3RhdHVzOwogfQogCi12b2lkIEF1ZGlvRmxpbmdlcjo6TW1hcFRocmVhZDo6Z2V0QXVkaW9Qb3J0Q29uZmlnKHN0cnVjdCBhdWRpb19wb3J0X2NvbmZpZyAqY29uZmlnKQordm9pZCBBdWRpb0ZsaW5nZXI6Ok1tYXBUaHJlYWQ6OnRvQXVkaW9Qb3J0Q29uZmlnKHN0cnVjdCBhdWRpb19wb3J0X2NvbmZpZyAqY29uZmlnKQogewotICAgIFRocmVhZEJhc2U6OmdldEF1ZGlvUG9ydENvbmZpZyhjb25maWcpOworICAgIFRocmVhZEJhc2U6OnRvQXVkaW9Qb3J0Q29uZmlnKGNvbmZpZyk7CiAgICAgaWYgKGlzT3V0cHV0KCkpIHsKICAgICAgICAgY29uZmlnLT5yb2xlID0gQVVESU9fUE9SVF9ST0xFX1NPVVJDRTsKICAgICAgICAgY29uZmlnLT5leHQubWl4Lmh3X21vZHVsZSA9IG1BdWRpb0h3RGV2LT5oYW5kbGUoKTsKQEAgLTg2MjYsNyArODg4OCw3IEBACiAgICAgZHByaW50ZihmZCwgIiAgQXR0cmlidXRlczogY29udGVudCB0eXBlICVkIHVzYWdlICVkIHNvdXJjZSAlZFxuIiwKICAgICAgICAgICAgIG1BdHRyLmNvbnRlbnRfdHlwZSwgbUF0dHIudXNhZ2UsIG1BdHRyLnNvdXJjZSk7CiAgICAgZHByaW50ZihmZCwgIiAgU2Vzc2lvbjogJWQgcG9ydCBJZDogJWRcbiIsIG1TZXNzaW9uSWQsIG1Qb3J0SWQpOwotICAgIGlmIChtQWN0aXZlVHJhY2tzLnNpemUoKSA9PSAwKSB7CisgICAgaWYgKG1BY3RpdmVUcmFja3MuaXNFbXB0eSgpKSB7CiAgICAgICAgIGRwcmludGYoZmQsICIgIE5vIGFjdGl2ZSBjbGllbnRzXG4iKTsKICAgICB9CiB9CkBAIC04NjM5LDcgKzg5MDEsNyBAQAogICAgIGNvbnN0IGNoYXIgKnByZWZpeCA9ICIgICAgIjsKICAgICBpZiAobnVtdHJhY2tzKSB7CiAgICAgICAgIHJlc3VsdC5hcHBlbmQocHJlZml4KTsKLSAgICAgICAgTW1hcFRyYWNrOjphcHBlbmREdW1wSGVhZGVyKHJlc3VsdCk7CisgICAgICAgIG1BY3RpdmVUcmFja3NbMF0tPmFwcGVuZER1bXBIZWFkZXIocmVzdWx0KTsKICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBudW10cmFja3MgOyArK2kpIHsKICAgICAgICAgICAgIHNwPE1tYXBUcmFjaz4gdHJhY2sgPSBtQWN0aXZlVHJhY2tzW2ldOwogICAgICAgICAgICAgcmVzdWx0LmFwcGVuZChwcmVmaXgpOwpAQCAtODg0NSw2ICs5MTA3LDE1IEBACiAgICAgfQogfQogCit2b2lkIEF1ZGlvRmxpbmdlcjo6TW1hcFBsYXliYWNrVGhyZWFkOjp0b0F1ZGlvUG9ydENvbmZpZyhzdHJ1Y3QgYXVkaW9fcG9ydF9jb25maWcgKmNvbmZpZykKK3sKKyAgICBNbWFwVGhyZWFkOjp0b0F1ZGlvUG9ydENvbmZpZyhjb25maWcpOworICAgIGlmIChtT3V0cHV0ICYmIG1PdXRwdXQtPmZsYWdzICE9IEFVRElPX09VVFBVVF9GTEFHX05PTkUpIHsKKyAgICAgICAgY29uZmlnLT5jb25maWdfbWFzayB8PSBBVURJT19QT1JUX0NPTkZJR19GTEFHUzsKKyAgICAgICAgY29uZmlnLT5mbGFncy5vdXRwdXQgPSBtT3V0cHV0LT5mbGFnczsKKyAgICB9Cit9CisKIHZvaWQgQXVkaW9GbGluZ2VyOjpNbWFwUGxheWJhY2tUaHJlYWQ6OmR1bXBJbnRlcm5hbHMoaW50IGZkLCBjb25zdCBWZWN0b3I8U3RyaW5nMTY+JiBhcmdzKQogewogICAgIE1tYXBUaHJlYWQ6OmR1bXBJbnRlcm5hbHMoZmQsIGFyZ3MpOwpAQCAtODkzNSw0ICs5MjA2LDEzIEBACiAgICAgfQogfQogCit2b2lkIEF1ZGlvRmxpbmdlcjo6TW1hcENhcHR1cmVUaHJlYWQ6OnRvQXVkaW9Qb3J0Q29uZmlnKHN0cnVjdCBhdWRpb19wb3J0X2NvbmZpZyAqY29uZmlnKQoreworICAgIE1tYXBUaHJlYWQ6OnRvQXVkaW9Qb3J0Q29uZmlnKGNvbmZpZyk7CisgICAgaWYgKG1JbnB1dCAmJiBtSW5wdXQtPmZsYWdzICE9IEFVRElPX0lOUFVUX0ZMQUdfTk9ORSkgeworICAgICAgICBjb25maWctPmNvbmZpZ19tYXNrIHw9IEFVRElPX1BPUlRfQ09ORklHX0ZMQUdTOworICAgICAgICBjb25maWctPmZsYWdzLmlucHV0ID0gbUlucHV0LT5mbGFnczsKKyAgICB9Cit9CisKIH0gLy8gbmFtZXNwYWNlIGFuZHJvaWQKZGlmZiAtLWdpdCBhL3NlcnZpY2VzL2F1ZGlvZmxpbmdlci9UaHJlYWRzLmggYi9zZXJ2aWNlcy9hdWRpb2ZsaW5nZXIvVGhyZWFkcy5oCmluZGV4IGVhMjk0NTUuLjQ5ZmMyMzQgMTAwNjQ0Ci0tLSBhL3NlcnZpY2VzL2F1ZGlvZmxpbmdlci9UaHJlYWRzLmgKKysrIGIvc2VydmljZXMvYXVkaW9mbGluZ2VyL1RocmVhZHMuaApAQCAtMjgxLDcgKzI4MSw3IEBACiAgICAgdmlydHVhbCAgICAgc3RhdHVzX3QgICAgY3JlYXRlQXVkaW9QYXRjaF9sKGNvbnN0IHN0cnVjdCBhdWRpb19wYXRjaCAqcGF0Y2gsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF1ZGlvX3BhdGNoX2hhbmRsZV90ICpoYW5kbGUpID0gMDsKICAgICB2aXJ0dWFsICAgICBzdGF0dXNfdCAgICByZWxlYXNlQXVkaW9QYXRjaF9sKGNvbnN0IGF1ZGlvX3BhdGNoX2hhbmRsZV90IGhhbmRsZSkgPSAwOwotICAgIHZpcnR1YWwgICAgIHZvaWQgICAgICAgIGdldEF1ZGlvUG9ydENvbmZpZyhzdHJ1Y3QgYXVkaW9fcG9ydF9jb25maWcgKmNvbmZpZykgPSAwOworICAgIHZpcnR1YWwgICAgIHZvaWQgICAgICAgIHRvQXVkaW9Qb3J0Q29uZmlnKHN0cnVjdCBhdWRpb19wb3J0X2NvbmZpZyAqY29uZmlnKSA9IDA7CiAKIAogICAgICAgICAgICAgICAgIC8vIHNlZSBub3RlIGF0IGRlY2xhcmF0aW9uIG9mIG1TdGFuZGJ5LCBtT3V0RGV2aWNlIGFuZCBtSW5EZXZpY2UKQEAgLTM5Myw2ICszOTMsMTIgQEAKIAogICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAgICAgICAgYnJvYWRjYXN0X2woKTsKIAorICAgICAgICAgICAgICAgIHZpcnR1YWwgYm9vbCAgICAgICAgaXNUaW1lc3RhbXBDb3JyZWN0aW9uRW5hYmxlZCgpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CisKKyAgICAgICAgICAgICAgICBib29sICAgICAgICAgICAgICAgIGlzTXNkRGV2aWNlKCkgY29uc3QgeyByZXR1cm4gbUlzTXNkRGV2aWNlOyB9CisKKyAgICB2aXJ0dWFsICAgICB2b2lkICAgICAgICAgICAgICAgIGR1bXAoaW50IGZkLCBjb25zdCBWZWN0b3I8U3RyaW5nMTY+JiBhcmdzKSA9IDA7CisKICAgICBtdXRhYmxlICAgICBNdXRleCAgICAgICAgICAgICAgICAgICBtTG9jazsKIAogcHJvdGVjdGVkOgpAQCAtNDM0LDYgKzQ0MCwxMiBAQAogICAgIHZpcnR1YWwgICAgIHZvaWQgICAgICAgIHNldE1hc3Rlck1vbm9fbChib29sIG1vbm8gX191bnVzZWQpIHsgfQogICAgIHZpcnR1YWwgICAgIGJvb2wgICAgICAgIHJlcXVpcmVNb25vQmxlbmQoKSB7IHJldHVybiBmYWxzZTsgfQogCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gY2FsbGVkIHdpdGhpbiB0aGUgdGhyZWFkTG9vcCB0byBvYnRhaW4gdGltZXN0YW1wIGZyb20gdGhlIEhBTC4KKyAgICB2aXJ0dWFsICAgICBzdGF0dXNfdCAgICB0aHJlYWRsb29wX2dldEhhbFRpbWVzdGFtcF9sKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRXh0ZW5kZWRUaW1lc3RhbXAgKnRpbWVzdGFtcCBfX3VudXNlZCkgY29uc3QgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gSU5WQUxJRF9PUEVSQVRJT047CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorCiAgICAgZnJpZW5kIGNsYXNzIEF1ZGlvRmxpbmdlcjsgICAgICAvLyBmb3IgbUVmZmVjdENoYWlucwogCiAgICAgICAgICAgICAgICAgY29uc3QgdHlwZV90ICAgICAgICAgICAgbVR5cGU7CkBAIC00OTMsMTAgKzUwNSwxNyBAQAogICAgICAgICAgICAgICAgIHNwPE5CTG9nOjpXcml0ZXI+ICAgICAgIG1OQkxvZ1dyaXRlcjsKICAgICAgICAgICAgICAgICBib29sICAgICAgICAgICAgICAgICAgICBtU3lzdGVtUmVhZHk7CiAgICAgICAgICAgICAgICAgRXh0ZW5kZWRUaW1lc3RhbXAgICAgICAgbVRpbWVzdGFtcDsKKyAgICAgICAgICAgICAgICBUaW1lc3RhbXBWZXJpZmllcjwgLy8gRm9yIHRpbWVzdGFtcCBzdGF0aXN0aWNzLgorICAgICAgICAgICAgICAgICAgICAgICAgaW50NjRfdCAvKiBmcmFtZSBjb3VudCAqLywgaW50NjRfdCAvKiB0aW1lIG5zICovPiBtVGltZXN0YW1wVmVyaWZpZXI7CisgICAgICAgICAgICAgICAgYXVkaW9fZGV2aWNlc190ICAgICAgICAgbVRpbWVzdGFtcENvcnJlY3RlZERldmljZXMgPSBBVURJT19ERVZJQ0VfTk9ORTsKKyAgICAgICAgICAgICAgICBib29sICAgICAgICAgICAgICAgICAgICBtSXNNc2REZXZpY2UgPSBmYWxzZTsKICAgICAgICAgICAgICAgICAvLyBBIGNvbmRpdGlvbiB0aGF0IG11c3QgYmUgZXZhbHVhdGVkIGJ5IHRoZSB0aHJlYWQgbG9vcCBoYXMgY2hhbmdlZCBhbmQKICAgICAgICAgICAgICAgICAvLyB3ZSBtdXN0IG5vdCB3YWl0IGZvciBhc3luYyB3cml0ZSBjYWxsYmFjayBpbiB0aGUgdGhyZWFkIGxvb3AgYmVmb3JlIGV2YWx1YXRpbmcgaXQKICAgICAgICAgICAgICAgICBib29sICAgICAgICAgICAgICAgICAgICBtU2lnbmFsUGVuZGluZzsKIAorI2lmZGVmIFRFRV9TSU5LCisgICAgICAgICAgICAgICAgTkJBSU9fVGVlICAgICAgICAgICAgICAgbVRlZTsKKyNlbmRpZgogICAgICAgICAgICAgICAgIC8vIEFjdGl2ZVRyYWNrcyBpcyBhIHNvcnRlZCB2ZWN0b3Igb2YgdHJhY2sgdHlwZSBUIHJlcHJlc2VudGluZyB0aGUKICAgICAgICAgICAgICAgICAvLyBhY3RpdmUgdHJhY2tzIG9mIHRocmVhZExvb3AoKSB0byBiZSBjb25zaWRlcmVkIGJ5IHRoZSBsb2NrZWQgcHJlcGFyZSBwb3J0aW9uLgogICAgICAgICAgICAgICAgIC8vIEFjdGl2ZVRyYWNrcyBzaG91bGQgYmUgYWNjZXNzZWQgd2l0aCB0aGUgVGhyZWFkQmFzZSBsb2NrIGhlbGQuCkBAIC01NDMsNiArNTYyLDkgQEAKICAgICAgICAgICAgICAgICAgICAgc2l6ZV90ICAgICAgICAgIHNpemUoKSBjb25zdCB7CiAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbUFjdGl2ZVRyYWNrcy5zaXplKCk7CiAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgYm9vbCAgICAgICAgICAgIGlzRW1wdHkoKSBjb25zdCB7CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbUFjdGl2ZVRyYWNrcy5pc0VtcHR5KCk7CisgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgc3NpemVfdCAgICAgICAgIGluZGV4T2YoY29uc3Qgc3A8VD4mIGl0ZW0pIHsKICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBtQWN0aXZlVHJhY2tzLmluZGV4T2YoaXRlbSk7CiAgICAgICAgICAgICAgICAgICAgIH0KQEAgLTY0NSw3ICs2NjcsNyBAQAogICAgICAgICAgICAgICAgICAgIGF1ZGlvX2lvX2hhbmRsZV90IGlkLCBhdWRpb19kZXZpY2VzX3QgZGV2aWNlLCB0eXBlX3QgdHlwZSwgYm9vbCBzeXN0ZW1SZWFkeSk7CiAgICAgdmlydHVhbCAgICAgICAgICAgICB+UGxheWJhY2tUaHJlYWQoKTsKIAotICAgICAgICAgICAgICAgIHZvaWQgICAgICAgIGR1bXAoaW50IGZkLCBjb25zdCBWZWN0b3I8U3RyaW5nMTY+JiBhcmdzKTsKKyAgICAgICAgICAgICAgICB2b2lkICAgICAgICBkdW1wKGludCBmZCwgY29uc3QgVmVjdG9yPFN0cmluZzE2PiYgYXJncykgb3ZlcnJpZGU7CiAKICAgICAvLyBUaHJlYWQgdmlydHVhbHMKICAgICB2aXJ0dWFsICAgICBib29sICAgICAgICB0aHJlYWRMb29wKCk7CkBAIC03ODQsNyArODA2LDcgQEAKICAgICAgICAgICAgICAgICB2b2lkICAgICAgICBhZGRQYXRjaFRyYWNrKGNvbnN0IHNwPFBhdGNoVHJhY2s+JiB0cmFjayk7CiAgICAgICAgICAgICAgICAgdm9pZCAgICAgICAgZGVsZXRlUGF0Y2hUcmFjayhjb25zdCBzcDxQYXRjaFRyYWNrPiYgdHJhY2spOwogCi0gICAgdmlydHVhbCAgICAgdm9pZCAgICAgICAgZ2V0QXVkaW9Qb3J0Q29uZmlnKHN0cnVjdCBhdWRpb19wb3J0X2NvbmZpZyAqY29uZmlnKTsKKyAgICB2aXJ0dWFsICAgICB2b2lkICAgICAgICB0b0F1ZGlvUG9ydENvbmZpZyhzdHJ1Y3QgYXVkaW9fcG9ydF9jb25maWcgKmNvbmZpZyk7CiAKICAgICAgICAgICAgICAgICAvLyBSZXR1cm4gdGhlIGFzeW5jaHJvbm91cyBzaWduYWwgd2FpdCB0aW1lLgogICAgIHZpcnR1YWwgICAgIGludDY0X3QgICAgIGNvbXB1dGVXYWl0VGltZU5zX2woKSBjb25zdCB7IHJldHVybiBJTlQ2NF9NQVg7IH0KQEAgLTgwMSw2ICs4MjMsMTEgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICYmIG1UcmFja3Muc2l6ZSgpIDwgUGxheWJhY2tUaHJlYWQ6OmtNYXhUcmFja3M7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogCisgICAgICAgICAgICAgICAgYm9vbCAgICAgICAgaXNUaW1lc3RhbXBDb3JyZWN0aW9uRW5hYmxlZCgpIGNvbnN0IG92ZXJyaWRlIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgYXVkaW9fZGV2aWNlc190IGRldmljZSA9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbU91dERldmljZSAmIG1UaW1lc3RhbXBDb3JyZWN0ZWREZXZpY2VzOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gYXVkaW9faXNfb3V0cHV0X2RldmljZXMoZGV2aWNlKSAmJiBwb3Bjb3VudChkZXZpY2UpID4gMDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiBwcm90ZWN0ZWQ6CiAgICAgLy8gdXBkYXRlZCBieSByZWFkT3V0cHV0UGFyYW1ldGVyc19sKCkKICAgICBzaXplX3QgICAgICAgICAgICAgICAgICAgICAgICAgIG1Ob3JtYWxGcmFtZUNvdW50OyAgLy8gbm9ybWFsIG1peGVyIGFuZCBlZmZlY3RzCkBAIC05MzUsMTYgKzk2MiwxOSBAQAogICAgIHZpcnR1YWwgdm9pZCBkdW1wSW50ZXJuYWxzKGludCBmZCwgY29uc3QgVmVjdG9yPFN0cmluZzE2PiYgYXJncyk7CiAgICAgdm9pZCAgICAgICAgZHVtcFRyYWNrcyhpbnQgZmQsIGNvbnN0IFZlY3RvcjxTdHJpbmcxNj4mIGFyZ3MpOwogCi0gICAgLy8gVGhlIFRyYWNrcyBjbGFzcyBtYW5hZ2VzIG5hbWVzIGZvciBhbGwgdHJhY2tzCi0gICAgLy8gYWRkZWQgYW5kIHJlbW92ZWQgZnJvbSB0aGUgVGhyZWFkLgorICAgIC8vIFRoZSBUcmFja3MgY2xhc3MgbWFuYWdlcyB0cmFja3MgYWRkZWQgYW5kIHJlbW92ZWQgZnJvbSB0aGUgVGhyZWFkLgogICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBUPgogICAgIGNsYXNzIFRyYWNrcyB7CiAgICAgcHVibGljOgotICAgICAgICBUcmFja3MoYm9vbCBzYXZlRGVsZXRlZFRyYWNrTmFtZXMpIDoKLSAgICAgICAgICAgIG1TYXZlRGVsZXRlZFRyYWNrTmFtZXMoc2F2ZURlbGV0ZWRUcmFja05hbWVzKSB7IH0KKyAgICAgICAgVHJhY2tzKGJvb2wgc2F2ZURlbGV0ZWRUcmFja0lkcykgOgorICAgICAgICAgICAgbVNhdmVEZWxldGVkVHJhY2tJZHMoc2F2ZURlbGV0ZWRUcmFja0lkcykgeyB9CiAKICAgICAgICAgLy8gU29ydGVkVmVjdG9yIG1ldGhvZHMKLSAgICAgICAgc3NpemVfdCAgICAgICAgIGFkZChjb25zdCBzcDxUPiAmdHJhY2spOworICAgICAgICBzc2l6ZV90ICAgICAgICAgYWRkKGNvbnN0IHNwPFQ+ICZ0cmFjaykgeworICAgICAgICAgICAgY29uc3Qgc3NpemVfdCBpbmRleCA9IG1UcmFja3MuYWRkKHRyYWNrKTsKKyAgICAgICAgICAgIExPR19BTFdBWVNfRkFUQUxfSUYoaW5kZXggPCAwLCAiY2Fubm90IGFkZCB0cmFjayIpOworICAgICAgICAgICAgcmV0dXJuIGluZGV4OworICAgICAgICB9CiAgICAgICAgIHNzaXplX3QgICAgICAgICByZW1vdmUoY29uc3Qgc3A8VD4gJnRyYWNrKTsKICAgICAgICAgc2l6ZV90ICAgICAgICAgIHNpemUoKSBjb25zdCB7CiAgICAgICAgICAgICByZXR1cm4gbVRyYWNrcy5zaXplKCk7CkBAIC05NjUsMjggKzk5NSwxOSBAQAogICAgICAgICAgICAgcmV0dXJuIG1UcmFja3MuZW5kKCk7CiAgICAgICAgIH0KIAotICAgICAgICBzaXplX3QgICAgICAgICAgcHJvY2Vzc0RlbGV0ZWRUcmFja05hbWVzKHN0ZDo6ZnVuY3Rpb248dm9pZChpbnQpPiBmKSB7Ci0gICAgICAgICAgICBjb25zdCBzaXplX3Qgc2l6ZSA9IG1EZWxldGVkVHJhY2tOYW1lcy5zaXplKCk7Ci0gICAgICAgICAgICBpZiAoc2l6ZSA+IDApIHsKLSAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IGludCBuYW1lIDogbURlbGV0ZWRUcmFja05hbWVzKSB7Ci0gICAgICAgICAgICAgICAgICAgIGYobmFtZSk7Ci0gICAgICAgICAgICAgICAgfQorICAgICAgICBzaXplX3QgICAgICAgICAgcHJvY2Vzc0RlbGV0ZWRUcmFja0lkcyhzdGQ6OmZ1bmN0aW9uPHZvaWQoaW50KT4gZikgeworICAgICAgICAgICAgZm9yIChjb25zdCBpbnQgdHJhY2tJZCA6IG1EZWxldGVkVHJhY2tJZHMpIHsKKyAgICAgICAgICAgICAgICBmKHRyYWNrSWQpOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgcmV0dXJuIHNpemU7CisgICAgICAgICAgICByZXR1cm4gbURlbGV0ZWRUcmFja0lkcy5zaXplKCk7CiAgICAgICAgIH0KIAotICAgICAgICB2b2lkICAgICAgICAgICAgY2xlYXJEZWxldGVkVHJhY2tOYW1lcygpIHsgbURlbGV0ZWRUcmFja05hbWVzLmNsZWFyKCk7IH0KKyAgICAgICAgdm9pZCAgICAgICAgICAgIGNsZWFyRGVsZXRlZFRyYWNrSWRzKCkgeyBtRGVsZXRlZFRyYWNrSWRzLmNsZWFyKCk7IH0KIAogICAgIHByaXZhdGU6Ci0gICAgICAgIC8vIFRyYWNrIG5hbWVzIHBlbmRpbmcgZGVsZXRpb24gZm9yIE1JWEVSIHR5cGUgdGhyZWFkcwotICAgICAgICBjb25zdCBib29sIG1TYXZlRGVsZXRlZFRyYWNrTmFtZXM7IC8vIHRydWUgdG8gZW5hYmxlIHRyYWNraW5nCi0gICAgICAgIHN0ZDo6c2V0PGludD4gbURlbGV0ZWRUcmFja05hbWVzOwotCi0gICAgICAgIC8vIEZhc3QgbG9va3VwIG9mIHByZXZpb3VzbHkgZGVsZXRlZCB0cmFjayBuYW1lcyBmb3IgcmV1c2UuCi0gICAgICAgIC8vIFRoaXMgaXMgYW4gYXJiaXRyYXJ5IGRlY2lzaW9uIChhY3R1YWxseSBhbnkgbm9uLW5lZ2F0aXZlCi0gICAgICAgIC8vIGludGVnZXIgdGhhdCBpc24ndCBpbiBtVHJhY2tzWypdLT5uYW1lcygpIGNvdWxkIGJlIHVzZWQpIC0gd2UgYXR0ZW1wdAotICAgICAgICAvLyB0byB1c2UgdGhlIHNtYWxsZXN0IHBvc3NpYmxlIGF2YWlsYWJsZSBuYW1lLgotICAgICAgICBzdGQ6OnNldDxpbnQ+IG1VbnVzZWRUcmFja05hbWVzOworICAgICAgICAvLyBUcmFja3MgcGVuZGluZyBkZWxldGlvbiBmb3IgTUlYRVIgdHlwZSB0aHJlYWRzCisgICAgICAgIGNvbnN0IGJvb2wgbVNhdmVEZWxldGVkVHJhY2tJZHM7IC8vIHRydWUgdG8gZW5hYmxlIHRyYWNraW5nCisgICAgICAgIHN0ZDo6c2V0PGludD4gbURlbGV0ZWRUcmFja0lkczsKIAogICAgICAgICBTb3J0ZWRWZWN0b3I8c3A8VD4+IG1UcmFja3M7IC8vIHdyYXBwZWQgU29ydGVkVmVjdG9yLgogICAgIH07CkBAIC0xMDU2LDE2ICsxMDc3LDEzIEBACiAgICAgc3A8TkJBSU9fU2luaz4gICAgICAgICAgbVBpcGVTaW5rOwogICAgIC8vIFRoZSBjdXJyZW50IHNpbmsgZm9yIHRoZSBub3JtYWwgbWl4ZXIgdG8gd3JpdGUgaXQncyAoc3ViKW1peCwgbU91dHB1dFNpbmsgb3IgbVBpcGVTaW5rCiAgICAgc3A8TkJBSU9fU2luaz4gICAgICAgICAgbU5vcm1hbFNpbms7Ci0jaWZkZWYgVEVFX1NJTksKLSAgICAvLyBGb3IgZHVtcHN5cwotICAgIHNwPE5CQUlPX1Npbms+ICAgICAgICAgIG1UZWVTaW5rOwotICAgIHNwPE5CQUlPX1NvdXJjZT4gICAgICAgIG1UZWVTb3VyY2U7Ci0jZW5kaWYKICAgICB1aW50MzJfdCAgICAgICAgICAgICAgICBtU2NyZWVuU3RhdGU7ICAgLy8gY2FjaGVkIGNvcHkgb2YgZ1NjcmVlblN0YXRlCiAgICAgLy8gVE9ETzogYWRkIGNvbW1lbnQgYW5kIGFkanVzdCBzaXplIGFzIG5lZWRlZAogICAgIHN0YXRpYyBjb25zdCBzaXplX3QgICAgIGtGYXN0TWl4ZXJMb2dTaXplID0gOCAqIDEwMjQ7CiAgICAgc3A8TkJMb2c6OldyaXRlcj4gICAgICAgbUZhc3RNaXhlck5CTG9nV3JpdGVyOwogCisgICAgLy8gRG93bnN0cmVhbSBwYXRjaCBsYXRlbmN5LCBhdmFpbGFibGUgaWYgbURvd25zdHJlYW1MYXRlbmN5U3RhdE1zLmdldE4oKSA+IDAuCisgICAgYXVkaW9fdXRpbHM6OlN0YXRpc3RpY3M8ZG91YmxlPiBtRG93bnN0cmVhbUxhdGVuY3lTdGF0TXN7MC45OTl9OwogCiBwdWJsaWM6CiAgICAgdmlydHVhbCAgICAgYm9vbCAgICAgICAgaGFzRmFzdE1peGVyKCkgY29uc3QgPSAwOwpAQCAtMTEyMSw3ICsxMTM5LDYgQEAKICAgICB2aXJ0dWFsICAgICB2b2lkICAgICAgICB0aHJlYWRMb29wX3N0YW5kYnkoKTsKICAgICB2aXJ0dWFsICAgICB2b2lkICAgICAgICB0aHJlYWRMb29wX21peCgpOwogICAgIHZpcnR1YWwgICAgIHZvaWQgICAgICAgIHRocmVhZExvb3Bfc2xlZXBUaW1lKCk7Ci0gICAgdmlydHVhbCAgICAgdm9pZCAgICAgICAgdGhyZWFkTG9vcF9yZW1vdmVUcmFja3MoY29uc3QgVmVjdG9yPCBzcDxUcmFjaz4gPiYgdHJhY2tzVG9SZW1vdmUpOwogICAgIHZpcnR1YWwgICAgIHVpbnQzMl90ICAgIGNvcnJlY3RMYXRlbmN5X2wodWludDMyX3QgbGF0ZW5jeSkgY29uc3Q7CiAKICAgICB2aXJ0dWFsICAgICBzdGF0dXNfdCAgICBjcmVhdGVBdWRpb1BhdGNoX2woY29uc3Qgc3RydWN0IGF1ZGlvX3BhdGNoICpwYXRjaCwKQEAgLTExNTQsNiArMTE3MSwxNCBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG1GYXN0TWl4ZXJEdW1wU3RhdGUubVRyYWNrc1tmYXN0SW5kZXhdLm1VbmRlcnJ1bnM7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogCisgICAgICAgICAgICAgICAgc3RhdHVzX3QgICAgdGhyZWFkbG9vcF9nZXRIYWxUaW1lc3RhbXBfbCgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEV4dGVuZGVkVGltZXN0YW1wICp0aW1lc3RhbXApIGNvbnN0IG92ZXJyaWRlIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1Ob3JtYWxTaW5rLmdldCgpICE9IG51bGxwdHIpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBtTm9ybWFsU2luay0+Z2V0VGltZXN0YW1wKCp0aW1lc3RhbXApOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBJTlZBTElEX09QRVJBVElPTjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisKIHByb3RlY3RlZDoKICAgICB2aXJ0dWFsICAgICB2b2lkICAgICAgIHNldE1hc3Rlck1vbm9fbChib29sIG1vbm8pIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtTWFzdGVyTW9uby5zdG9yZShtb25vKTsKQEAgLTEyMTEsNiArMTIzNiwyMyBAQAogICAgIHZpcnR1YWwgICAgIGJvb2wgICAgICAgIGhhc0Zhc3RNaXhlcigpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CiAKICAgICB2aXJ0dWFsICAgICBpbnQ2NF90ICAgICBjb21wdXRlV2FpdFRpbWVOc19sKCkgY29uc3Qgb3ZlcnJpZGU7CisKKyAgICBzdGF0dXNfdCAgICB0aHJlYWRsb29wX2dldEhhbFRpbWVzdGFtcF9sKEV4dGVuZGVkVGltZXN0YW1wICp0aW1lc3RhbXApIGNvbnN0IG92ZXJyaWRlIHsKKyAgICAgICAgICAgICAgICAgICAgLy8gRm9yIERJUkVDVCBhbmQgT0ZGTE9BRCB0aHJlYWRzLCBxdWVyeSB0aGUgb3V0cHV0IHNpbmsgZGlyZWN0bHkuCisgICAgICAgICAgICAgICAgICAgIGlmIChtT3V0cHV0ICE9IG51bGxwdHIpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQ2NF90IHVwb3NpdGlvbjY0OworICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHRpbWVzcGVjIHRpbWU7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAobU91dHB1dC0+Z2V0UHJlc2VudGF0aW9uUG9zaXRpb24oCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZ1cG9zaXRpb242NCwgJnRpbWUpID09IE9LKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGltZXN0YW1wLT5tUG9zaXRpb25bRXh0ZW5kZWRUaW1lc3RhbXA6OkxPQ0FUSU9OX0tFUk5FTF0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gKGludDY0X3QpdXBvc2l0aW9uNjQ7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGltZXN0YW1wLT5tVGltZU5zW0V4dGVuZGVkVGltZXN0YW1wOjpMT0NBVElPTl9LRVJORUxdCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9IGF1ZGlvX3V0aWxzX25zX2Zyb21fdGltZXNwZWMoJnRpbWUpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBOT19FUlJPUjsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gSU5WQUxJRF9PUEVSQVRJT047CisgICAgICAgICAgICAgICAgfQogfTsKIAogY2xhc3MgT2ZmbG9hZFRocmVhZCA6IHB1YmxpYyBEaXJlY3RPdXRwdXRUaHJlYWQgewpAQCAtMTMxOCw2ICsxMzYwLDIyIEBACiAgICAgU29ydGVkVmVjdG9yIDwgc3A8T3V0cHV0VHJhY2s+ID4gIG1PdXRwdXRUcmFja3M7CiBwdWJsaWM6CiAgICAgdmlydHVhbCAgICAgYm9vbCAgICAgICAgaGFzRmFzdE1peGVyKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KKyAgICAgICAgICAgICAgICBzdGF0dXNfdCAgICB0aHJlYWRsb29wX2dldEhhbFRpbWVzdGFtcF9sKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRXh0ZW5kZWRUaW1lc3RhbXAgKnRpbWVzdGFtcCkgY29uc3Qgb3ZlcnJpZGUgeworICAgICAgICBpZiAobU91dHB1dFRyYWNrcy5zaXplKCkgPiAwKSB7CisgICAgICAgICAgICAvLyBmb3J3YXJkIHRoZSBmaXJzdCBPdXRwdXRUcmFjaydzIGtlcm5lbCBpbmZvcm1hdGlvbiBmb3IgdGltZXN0YW1wLgorICAgICAgICAgICAgY29uc3QgRXh0ZW5kZWRUaW1lc3RhbXAgdHJhY2tUaW1lc3RhbXAgPQorICAgICAgICAgICAgICAgICAgICBtT3V0cHV0VHJhY2tzWzBdLT5nZXRDbGllbnRQcm94eVRpbWVzdGFtcCgpOworICAgICAgICAgICAgaWYgKHRyYWNrVGltZXN0YW1wLm1UaW1lTnNbRXh0ZW5kZWRUaW1lc3RhbXA6OkxPQ0FUSU9OX0tFUk5FTF0gPiAwKSB7CisgICAgICAgICAgICAgICAgdGltZXN0YW1wLT5tVGltZU5zW0V4dGVuZGVkVGltZXN0YW1wOjpMT0NBVElPTl9LRVJORUxdID0KKyAgICAgICAgICAgICAgICAgICAgICAgIHRyYWNrVGltZXN0YW1wLm1UaW1lTnNbRXh0ZW5kZWRUaW1lc3RhbXA6OkxPQ0FUSU9OX0tFUk5FTF07CisgICAgICAgICAgICAgICAgdGltZXN0YW1wLT5tUG9zaXRpb25bRXh0ZW5kZWRUaW1lc3RhbXA6OkxPQ0FUSU9OX0tFUk5FTF0gPQorICAgICAgICAgICAgICAgICAgICAgICAgdHJhY2tUaW1lc3RhbXAubVBvc2l0aW9uW0V4dGVuZGVkVGltZXN0YW1wOjpMT0NBVElPTl9LRVJORUxdOworICAgICAgICAgICAgICAgIHJldHVybiBPSzsgIC8vIGRpc2NhcmQgc2VydmVyIHRpbWVzdGFtcCAtIHRoYXQncyBpZ25vcmVkLgorICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIHJldHVybiBJTlZBTElEX09QRVJBVElPTjsKKyAgICB9CiB9OwogCiAvLyByZWNvcmQgdGhyZWFkCkBAIC0xMzc2LDkgKzE0MzQsNiBAQAogICAgICAgICAgICAgICAgICAgICBhdWRpb19kZXZpY2VzX3Qgb3V0RGV2aWNlLAogICAgICAgICAgICAgICAgICAgICBhdWRpb19kZXZpY2VzX3QgaW5EZXZpY2UsCiAgICAgICAgICAgICAgICAgICAgIGJvb2wgc3lzdGVtUmVhZHkKLSNpZmRlZiBURUVfU0lOSwotICAgICAgICAgICAgICAgICAgICAsIGNvbnN0IHNwPE5CQUlPX1Npbms+JiB0ZWVTaW5rCi0jZW5kaWYKICAgICAgICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgIHZpcnR1YWwgICAgIH5SZWNvcmRUaHJlYWQoKTsKIApAQCAtMTQyNSw3ICsxNDgwLDcgQEAKICAgICAgICAgICAgIC8vIHJldHVybiB0cnVlIGlmIHRoZSBjYWxsZXIgc2hvdWxkIHRoZW4gZG8gaXQncyBwYXJ0IG9mIHRoZSBzdG9wcGluZyBwcm9jZXNzCiAgICAgICAgICAgICBib29sICAgICAgICBzdG9wKFJlY29yZFRyYWNrKiByZWNvcmRUcmFjayk7CiAKLSAgICAgICAgICAgIHZvaWQgICAgICAgIGR1bXAoaW50IGZkLCBjb25zdCBWZWN0b3I8U3RyaW5nMTY+JiBhcmdzKTsKKyAgICAgICAgICAgIHZvaWQgICAgICAgIGR1bXAoaW50IGZkLCBjb25zdCBWZWN0b3I8U3RyaW5nMTY+JiBhcmdzKSBvdmVycmlkZTsKICAgICAgICAgICAgIEF1ZGlvU3RyZWFtSW4qIGNsZWFySW5wdXQoKTsKICAgICAgICAgICAgIHZpcnR1YWwgc3A8U3RyZWFtSGFsSW50ZXJmYWNlPiBzdHJlYW0oKSBjb25zdDsKIApAQCAtMTQzOSw4ICsxNDk0LDggQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdWRpb19wYXRjaF9oYW5kbGVfdCAqaGFuZGxlKTsKICAgICB2aXJ0dWFsIHN0YXR1c190ICAgIHJlbGVhc2VBdWRpb1BhdGNoX2woY29uc3QgYXVkaW9fcGF0Y2hfaGFuZGxlX3QgaGFuZGxlKTsKIAotICAgICAgICAgICAgdm9pZCAgICAgICAgYWRkUGF0Y2hSZWNvcmQoY29uc3Qgc3A8UGF0Y2hSZWNvcmQ+JiByZWNvcmQpOwotICAgICAgICAgICAgdm9pZCAgICAgICAgZGVsZXRlUGF0Y2hSZWNvcmQoY29uc3Qgc3A8UGF0Y2hSZWNvcmQ+JiByZWNvcmQpOworICAgICAgICAgICAgdm9pZCAgICAgICAgYWRkUGF0Y2hUcmFjayhjb25zdCBzcDxQYXRjaFJlY29yZD4mIHJlY29yZCk7CisgICAgICAgICAgICB2b2lkICAgICAgICBkZWxldGVQYXRjaFRyYWNrKGNvbnN0IHNwPFBhdGNoUmVjb3JkPiYgcmVjb3JkKTsKIAogICAgICAgICAgICAgdm9pZCAgICAgICAgcmVhZElucHV0UGFyYW1ldGVyc19sKCk7CiAgICAgdmlydHVhbCB1aW50MzJfdCAgICBnZXRJbnB1dEZyYW1lc0xvc3QoKTsKQEAgLTE0NjEsNyArMTUxNiw3IEBACiAKICAgICB2aXJ0dWFsIHNpemVfdCAgICAgIGZyYW1lQ291bnQoKSBjb25zdCB7IHJldHVybiBtRnJhbWVDb3VudDsgfQogICAgICAgICAgICAgYm9vbCAgICAgICAgaGFzRmFzdENhcHR1cmUoKSBjb25zdCB7IHJldHVybiBtRmFzdENhcHR1cmUgIT0gMDsgfQotICAgIHZpcnR1YWwgdm9pZCAgICAgICAgZ2V0QXVkaW9Qb3J0Q29uZmlnKHN0cnVjdCBhdWRpb19wb3J0X2NvbmZpZyAqY29uZmlnKTsKKyAgICB2aXJ0dWFsIHZvaWQgICAgICAgIHRvQXVkaW9Qb3J0Q29uZmlnKHN0cnVjdCBhdWRpb19wb3J0X2NvbmZpZyAqY29uZmlnKTsKIAogICAgIHZpcnR1YWwgc3RhdHVzX3QgICAgY2hlY2tFZmZlY3RDb21wYXRpYmlsaXR5X2woY29uc3QgZWZmZWN0X2Rlc2NyaXB0b3JfdCAqZGVzYywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF1ZGlvX3Nlc3Npb25fdCBzZXNzaW9uSWQpOwpAQCAtMTQ4MSw2ICsxNTM2LDEzIEBACiAKICAgICAgICAgICAgIHZvaWQgICAgICAgIHVwZGF0ZU1ldGFkYXRhX2woKSBvdmVycmlkZTsKIAorICAgICAgICAgICAgYm9vbCAgICAgICAgZmFzdFRyYWNrQXZhaWxhYmxlKCkgY29uc3QgeyByZXR1cm4gbUZhc3RUcmFja0F2YWlsOyB9CisKKyAgICAgICAgICAgIGJvb2wgICAgICAgIGlzVGltZXN0YW1wQ29ycmVjdGlvbkVuYWJsZWQoKSBjb25zdCBvdmVycmlkZSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gY2hlY2tzIHBvcGNvdW50IGZvciBleGFjdGx5IG9uZSBkZXZpY2UuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGF1ZGlvX2lzX2lucHV0X2RldmljZSgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1JbkRldmljZSAmIG1UaW1lc3RhbXBDb3JyZWN0ZWREZXZpY2VzKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KIHByaXZhdGU6CiAgICAgICAgICAgICAvLyBFbnRlciBzdGFuZGJ5IGlmIG5vdCBhbHJlYWR5IGluIHN0YW5kYnksIGFuZCBzZXQgbVN0YW5kYnkgZmxhZwogICAgICAgICAgICAgdm9pZCAgICBzdGFuZGJ5SWZOb3RBbHJlYWR5SW5TdGFuZGJ5KCk7CkBAIC0xNTA4LDggKzE1NzAsNiBAQAogICAgICAgICAgICAgaW50MzJfdCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbVJzbXBJblJlYXI7ICAgIC8vIGxhc3QgZmlsbGVkIGZyYW1lICsgMQogCiAgICAgICAgICAgICAvLyBGb3IgZHVtcHN5cwotICAgICAgICAgICAgY29uc3Qgc3A8TkJBSU9fU2luaz4gICAgICAgICAgICAgICAgbVRlZVNpbms7Ci0KICAgICAgICAgICAgIGNvbnN0IHNwPE1lbW9yeURlYWxlcj4gICAgICAgICAgICAgIG1SZWFkT25seUhlYXA7CiAKICAgICAgICAgICAgIC8vIG9uZS10aW1lIGluaXRpYWxpemF0aW9uLCBubyBsb2NrcyByZXF1aXJlZApAQCAtMTU1Miw2ICsxNjEyLDggQEAKICAgICAgICAgICAgIGJvb2wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1GYXN0VHJhY2tBdmFpbDsgICAgLy8gdHJ1ZSBpZiBmYXN0IHRyYWNrIGF2YWlsYWJsZQogICAgICAgICAgICAgLy8gY29tbW9uIHN0YXRlIHRvIGFsbCByZWNvcmQgdGhyZWFkcwogICAgICAgICAgICAgc3RkOjphdG9taWNfYm9vbCAgICAgICAgICAgICAgICAgICAgbUJ0TnJlY1N1c3BlbmRlZDsKKworICAgICAgICAgICAgaW50NjRfdCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbUZyYW1lc1JlYWQgPSAwOyAgICAvLyBjb250aW51b3VzIHJ1bm5pbmcgY291bnRlci4KIH07CiAKIGNsYXNzIE1tYXBUaHJlYWQgOiBwdWJsaWMgVGhyZWFkQmFzZQpAQCAtMTYwNCw3ICsxNjY2LDcgQEAKICAgICB2aXJ0dWFsICAgICBzdGF0dXNfdCAgICBjcmVhdGVBdWRpb1BhdGNoX2woY29uc3Qgc3RydWN0IGF1ZGlvX3BhdGNoICpwYXRjaCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXVkaW9fcGF0Y2hfaGFuZGxlX3QgKmhhbmRsZSk7CiAgICAgdmlydHVhbCAgICAgc3RhdHVzX3QgICAgcmVsZWFzZUF1ZGlvUGF0Y2hfbChjb25zdCBhdWRpb19wYXRjaF9oYW5kbGVfdCBoYW5kbGUpOwotICAgIHZpcnR1YWwgICAgIHZvaWQgICAgICAgIGdldEF1ZGlvUG9ydENvbmZpZyhzdHJ1Y3QgYXVkaW9fcG9ydF9jb25maWcgKmNvbmZpZyk7CisgICAgdmlydHVhbCAgICAgdm9pZCAgICAgICAgdG9BdWRpb1BvcnRDb25maWcoc3RydWN0IGF1ZGlvX3BvcnRfY29uZmlnICpjb25maWcpOwogCiAgICAgdmlydHVhbCAgICAgc3A8U3RyZWFtSGFsSW50ZXJmYWNlPiBzdHJlYW0oKSBjb25zdCB7IHJldHVybiBtSGFsU3RyZWFtOyB9CiAgICAgdmlydHVhbCAgICAgc3RhdHVzX3QgICAgYWRkRWZmZWN0Q2hhaW5fbChjb25zdCBzcDxFZmZlY3RDaGFpbj4mIGNoYWluKTsKQEAgLTE2MjcsNyArMTY4OSw3IEBACiAgICAgICAgICAgICAgICAgLy8gU2V0cyB0aGUgVUlEIHJlY29yZHMgc2lsZW5jZQogICAgIHZpcnR1YWwgICAgIHZvaWQgICAgICAgIHNldFJlY29yZFNpbGVuY2VkKHVpZF90IHVpZCBfX3VudXNlZCwgYm9vbCBzaWxlbmNlZCBfX3VudXNlZCkge30KIAotICAgICAgICAgICAgICAgIHZvaWQgICAgICAgIGR1bXAoaW50IGZkLCBjb25zdCBWZWN0b3I8U3RyaW5nMTY+JiBhcmdzKTsKKyAgICAgICAgICAgICAgICB2b2lkICAgICAgICBkdW1wKGludCBmZCwgY29uc3QgVmVjdG9yPFN0cmluZzE2PiYgYXJncykgb3ZlcnJpZGU7CiAgICAgdmlydHVhbCAgICAgdm9pZCAgICAgICAgZHVtcEludGVybmFscyhpbnQgZmQsIGNvbnN0IFZlY3RvcjxTdHJpbmcxNj4mIGFyZ3MpOwogICAgICAgICAgICAgICAgIHZvaWQgICAgICAgIGR1bXBUcmFja3MoaW50IGZkLCBjb25zdCBWZWN0b3I8U3RyaW5nMTY+JiBhcmdzKTsKIApAQCAtMTY4OCw2ICsxNzUwLDggQEAKIAogICAgICAgICAgICAgICAgIHZvaWQgICAgICAgIHVwZGF0ZU1ldGFkYXRhX2woKSBvdmVycmlkZTsKIAorICAgIHZpcnR1YWwgICAgIHZvaWQgICAgICAgIHRvQXVkaW9Qb3J0Q29uZmlnKHN0cnVjdCBhdWRpb19wb3J0X2NvbmZpZyAqY29uZmlnKTsKKwogcHJvdGVjdGVkOgogCiAgICAgICAgICAgICAgICAgYXVkaW9fc3RyZWFtX3R5cGVfdCAgICAgICAgIG1TdHJlYW1UeXBlOwpAQCAtMTcxNiw2ICsxNzgwLDggQEAKICAgICAgICAgICAgICAgICB2b2lkICAgICAgICAgICBwcm9jZXNzVm9sdW1lX2woKSBvdmVycmlkZTsKICAgICAgICAgICAgICAgICB2b2lkICAgICAgICAgICBzZXRSZWNvcmRTaWxlbmNlZCh1aWRfdCB1aWQsIGJvb2wgc2lsZW5jZWQpIG92ZXJyaWRlOwogCisgICAgdmlydHVhbCAgICAgdm9pZCAgICAgICAgICAgdG9BdWRpb1BvcnRDb25maWcoc3RydWN0IGF1ZGlvX3BvcnRfY29uZmlnICpjb25maWcpOworCiBwcm90ZWN0ZWQ6CiAKICAgICAgICAgICAgICAgICBBdWRpb1N0cmVhbUluKiAgbUlucHV0OwpkaWZmIC0tZ2l0IGEvc2VydmljZXMvYXVkaW9mbGluZ2VyL1RyYWNrQmFzZS5oIGIvc2VydmljZXMvYXVkaW9mbGluZ2VyL1RyYWNrQmFzZS5oCmluZGV4IGNjZmI2OWYuLmM5NDYzOWIgMTAwNjQ0Ci0tLSBhL3NlcnZpY2VzL2F1ZGlvZmxpbmdlci9UcmFja0Jhc2UuaAorKysgYi9zZXJ2aWNlcy9hdWRpb2ZsaW5nZXIvVHJhY2tCYXNlLmgKQEAgLTI1LDEzICsyNSwxMyBAQAogcHVibGljOgogICAgIGVudW0gdHJhY2tfc3RhdGUgewogICAgICAgICBJRExFLAotICAgICAgICBGTFVTSEVELAorICAgICAgICBGTFVTSEVELCAgICAgICAgLy8gZm9yIFBsYXliYWNrVHJhY2tzIG9ubHkKICAgICAgICAgU1RPUFBFRCwKICAgICAgICAgLy8gbmV4dCAyIHN0YXRlcyBhcmUgY3VycmVudGx5IHVzZWQgZm9yIGZhc3QgdHJhY2tzCiAgICAgICAgIC8vIGFuZCBvZmZsb2FkZWQgdHJhY2tzIG9ubHkKICAgICAgICAgU1RPUFBJTkdfMSwgICAgIC8vIHdhaXRpbmcgZm9yIGZpcnN0IHVuZGVycnVuCiAgICAgICAgIFNUT1BQSU5HXzIsICAgICAvLyB3YWl0aW5nIGZvciBwcmVzZW50YXRpb24gY29tcGxldGUKLSAgICAgICAgUkVTVU1JTkcsCisgICAgICAgIFJFU1VNSU5HLCAgICAgICAvLyBmb3IgUGxheWJhY2tUcmFja3Mgb25seQogICAgICAgICBBQ1RJVkUsCiAgICAgICAgIFBBVVNJTkcsCiAgICAgICAgIFBBVVNFRCwKQEAgLTU0LDExICs1NCw2IEBACiAgICAgICAgIFRZUEVfUEFUQ0gsCiAgICAgfTsKIAotICAgIGVudW0gewotICAgICAgICBUUkFDS19OQU1FX1BFTkRJTkcgPSAtMSwKLSAgICAgICAgVFJBQ0tfTkFNRV9GQUlMVVJFID0gLTIsCi0gICAgfTsKLQogICAgICAgICAgICAgICAgICAgICAgICAgVHJhY2tCYXNlKFRocmVhZEJhc2UgKnRocmVhZCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3A8Q2xpZW50PiYgY2xpZW50LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBhdWRpb19hdHRyaWJ1dGVzX3QmIG1BdHRyLApAQCAtOTEsNiArODYsNyBAQAogICAgICAgICAgICAgdm9pZCogICAgICAgYnVmZmVyKCkgY29uc3QgeyByZXR1cm4gbUJ1ZmZlcjsgfQogICAgICAgICAgICAgc2l6ZV90ICAgICAgYnVmZmVyU2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1CdWZmZXJTaXplOyB9CiAgICAgdmlydHVhbCBib29sICAgICAgICBpc0Zhc3RUcmFjaygpIGNvbnN0ID0gMDsKKyAgICB2aXJ0dWFsIGJvb2wgICAgICAgIGlzRGlyZWN0KCkgY29uc3QgPSAwOwogICAgICAgICAgICAgYm9vbCAgICAgICAgaXNPdXRwdXRUcmFjaygpIGNvbnN0IHsgcmV0dXJuIChtVHlwZSA9PSBUWVBFX09VVFBVVCk7IH0KICAgICAgICAgICAgIGJvb2wgICAgICAgIGlzUGF0Y2hUcmFjaygpIGNvbnN0IHsgcmV0dXJuIChtVHlwZSA9PSBUWVBFX1BBVENIKTsgfQogICAgICAgICAgICAgYm9vbCAgICAgICAgaXNFeHRlcm5hbFRyYWNrKCkgY29uc3QgeyByZXR1cm4gIWlzT3V0cHV0VHJhY2soKSAmJiAhaXNQYXRjaFRyYWNrKCk7IH0KQEAgLTEwMCw2ICs5NiwxMDYgQEAKIAogICAgIGF1ZGlvX2F0dHJpYnV0ZXNfdCAgYXR0cmlidXRlcygpIGNvbnN0IHsgcmV0dXJuIG1BdHRyOyB9CiAKKyNpZmRlZiBURUVfU0lOSworICAgICAgICAgICB2b2lkICAgICAgICAgZHVtcFRlZShpbnQgZmQsIGNvbnN0IHN0ZDo6c3RyaW5nICZyZWFzb24pIGNvbnN0IHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbVRlZS5kdW1wKGZkLCByZWFzb24pOworICAgICAgICAgICAgICAgICAgICAgICAgfQorI2VuZGlmCisKKyAgICAgICAgICAgIC8qKiByZXR1cm5zIHRoZSBidWZmZXIgY29udGVudHMgc2l6ZSBjb252ZXJ0ZWQgdG8gdGltZSBpbiBtaWxsaXNlY29uZHMKKyAgICAgICAgICAgICAqIGZvciBQQ00gUGxheWJhY2sgb3IgUmVjb3JkIHN0cmVhbWluZyB0cmFja3MuIFRoZSByZXR1cm4gdmFsdWUgaXMgemVybyBmb3IKKyAgICAgICAgICAgICAqIFBDTSBzdGF0aWMgdHJhY2tzIGFuZCBub3QgZGVmaW5lZCBmb3Igbm9uLVBDTSB0cmFja3MuCisgICAgICAgICAgICAgKgorICAgICAgICAgICAgICogVGhpcyBtYXkgYmUgY2FsbGVkIHdpdGhvdXQgdGhlIHRocmVhZCBsb2NrLgorICAgICAgICAgICAgICovCisgICAgdmlydHVhbCBkb3VibGUgICAgICBidWZmZXJMYXRlbmN5TXMoKSBjb25zdCB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG1TZXJ2ZXJQcm94eS0+ZnJhbWVzUmVhZHlTYWZlKCkgKiAxMDAwIC8gc2FtcGxlUmF0ZSgpOworICAgICAgICAgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAvKiogcmV0dXJucyB3aGV0aGVyIHRoZSB0cmFjayBzdXBwb3J0cyBzZXJ2ZXIgbGF0ZW5jeSBjb21wdXRhdGlvbi4KKyAgICAgICAgICAgICAqIFRoaXMgaXMgc2V0IGluIHRoZSBjb25zdHJ1Y3RvciBhbmQgY29uc3RhbnQgdGhyb3VnaG91dCB0aGUgdHJhY2sgbGlmZXRpbWUuCisgICAgICAgICAgICAgKi8KKworICAgICAgICAgICAgYm9vbCAgICAgICAgaXNTZXJ2ZXJMYXRlbmN5U3VwcG9ydGVkKCkgY29uc3QgeyByZXR1cm4gbVNlcnZlckxhdGVuY3lTdXBwb3J0ZWQ7IH0KKworICAgICAgICAgICAgLyoqIGNvbXB1dGVzIHRoZSBzZXJ2ZXIgbGF0ZW5jeSBmb3IgUENNIFBsYXliYWNrIG9yIFJlY29yZCB0cmFjaworICAgICAgICAgICAgICogdG8gdGhlIGRldmljZSBzaW5rL3NvdXJjZS4gIFRoaXMgaXMgdGhlIHRpbWUgZm9yIHRoZSBuZXh0IGZyYW1lIGluIHRoZSB0cmFjayBidWZmZXIKKyAgICAgICAgICAgICAqIHdyaXR0ZW4gb3IgcmVhZCBmcm9tIHRoZSBzZXJ2ZXIgdGhyZWFkIHRvIHRoZSBkZXZpY2Ugc291cmNlIG9yIHNpbmsuCisgICAgICAgICAgICAgKgorICAgICAgICAgICAgICogVGhpcyBtYXkgYmUgY2FsbGVkIHdpdGhvdXQgdGhlIHRocmVhZCBsb2NrLCBidXQgbGF0ZW5jeU1zIGFuZCBmcm9tVHJhY2sKKyAgICAgICAgICAgICAqIG1heSBiZSBub3QgYmUgc3luY2hyb25pemVkLiBGb3IgZXhhbXBsZSBQYXRjaFBhbmVsIG1heSBub3Qgb2J0YWluIHRoZQorICAgICAgICAgICAgICogdGhyZWFkIGxvY2sgYmVmb3JlIGNhbGxpbmcuCisgICAgICAgICAgICAgKgorICAgICAgICAgICAgICogXHBhcmFtIGxhdGVuY3lNcyBvbiBzdWNjZXNzIGlzIHNldCB0byB0aGUgbGF0ZW5jeSBpbiBtaWxsaXNlY29uZHMgb2YgdGhlCisgICAgICAgICAgICAgKiAgICAgICAgbmV4dCBmcmFtZSB3cml0dGVuL3JlYWQgYnkgdGhlIHNlcnZlciB0aHJlYWQgdG8vZnJvbSB0aGUgdHJhY2sgYnVmZmVyCisgICAgICAgICAgICAgKiAgICAgICAgZnJvbSB0aGUgZGV2aWNlIHNvdXJjZS9zaW5rLgorICAgICAgICAgICAgICogXHBhcmFtIGZyb21UcmFjayBvbiBzdWNjZXNzIGlzIHNldCB0byB0cnVlIGlmIGxhdGVuY3kgd2FzIGNvbXB1dGVkIGRpcmVjdGx5CisgICAgICAgICAgICAgKiAgICAgICAgZnJvbSB0aGUgdHJhY2sgdGltZXN0YW1wOyBvdGhlcndpc2Ugc2V0IHRvIGZhbHNlIGlmIGxhdGVuY3kgd2FzCisgICAgICAgICAgICAgKiAgICAgICAgZXN0aW1hdGVkIGZyb20gdGhlIHNlcnZlciB0aW1lc3RhbXAuCisgICAgICAgICAgICAgKiAgICAgICAgZnJvbVRyYWNrIG1heSBiZSBudWxscHRyIG9yIG9taXR0ZWQgaWYgbm90IHJlcXVpcmVkLgorICAgICAgICAgICAgICoKKyAgICAgICAgICAgICAqIFxyZXR1cm5zIE9LIG9yIElOVkFMSURfT1BFUkFUSU9OIG9uIGZhaWx1cmUuCisgICAgICAgICAgICAgKi8KKyAgICAgICAgICAgIHN0YXR1c190ICAgIGdldFNlcnZlckxhdGVuY3lNcyhkb3VibGUgKmxhdGVuY3lNcywgYm9vbCAqZnJvbVRyYWNrID0gbnVsbHB0cikgY29uc3QgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghaXNTZXJ2ZXJMYXRlbmN5U3VwcG9ydGVkKCkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIElOVkFMSURfT1BFUkFUSU9OOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGlmIG5vIHRocmVhZCBsb2NrIGlzIGFjcXVpcmVkLCB0aGVzZSBhdG9taWNzIGFyZSBub3QKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBzeW5jaHJvbml6ZWQgd2l0aCBlYWNoIG90aGVyLCBjb25zaWRlcmVkIGEgYmVuaWduIHJhY2UuCisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBkb3VibGUgc2VydmVyTGF0ZW5jeU1zID0gbVNlcnZlckxhdGVuY3lNcy5sb2FkKCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHNlcnZlckxhdGVuY3lNcyA9PSAwLikgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gSU5WQUxJRF9PUEVSQVRJT047CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChmcm9tVHJhY2sgIT0gbnVsbHB0cikgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqZnJvbVRyYWNrID0gbVNlcnZlckxhdGVuY3lGcm9tVHJhY2subG9hZCgpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbGF0ZW5jeU1zID0gc2VydmVyTGF0ZW5jeU1zOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBPSzsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgLyoqIGNvbXB1dGVzIHRoZSB0b3RhbCBjbGllbnQgbGF0ZW5jeSBmb3IgUENNIFBsYXliYWNrIG9yIFJlY29yZCB0cmFja3MKKyAgICAgICAgICAgICAqIGZvciB0aGUgbmV4dCBjbGllbnQgYXBwIGFjY2VzcyB0byB0aGUgZGV2aWNlIHNpbmsvc291cmNlOyBpLmUuIHRoZQorICAgICAgICAgICAgICogc2VydmVyIGxhdGVuY3kgcGx1cyB0aGUgYnVmZmVyIGxhdGVuY3kuCisgICAgICAgICAgICAgKgorICAgICAgICAgICAgICogVGhpcyBtYXkgYmUgY2FsbGVkIHdpdGhvdXQgdGhlIHRocmVhZCBsb2NrLCBidXQgbGF0ZW5jeU1zIGFuZCBmcm9tVHJhY2sKKyAgICAgICAgICAgICAqIG1heSBiZSBub3QgYmUgc3luY2hyb25pemVkLiBGb3IgZXhhbXBsZSBQYXRjaFBhbmVsIG1heSBub3Qgb2J0YWluIHRoZQorICAgICAgICAgICAgICogdGhyZWFkIGxvY2sgYmVmb3JlIGNhbGxpbmcuCisgICAgICAgICAgICAgKgorICAgICAgICAgICAgICogXHBhcmFtIGxhdGVuY3lNcyBvbiBzdWNjZXNzIGlzIHNldCB0byB0aGUgbGF0ZW5jeSBpbiBtaWxsaXNlY29uZHMgb2YgdGhlCisgICAgICAgICAgICAgKiAgICAgICAgbmV4dCBmcmFtZSB3cml0dGVuL3JlYWQgYnkgdGhlIGNsaWVudCBhcHAgdG8vZnJvbSB0aGUgdHJhY2sgYnVmZmVyCisgICAgICAgICAgICAgKiAgICAgICAgZnJvbSB0aGUgZGV2aWNlIHNpbmsvc291cmNlLgorICAgICAgICAgICAgICogXHBhcmFtIGZyb21UcmFjayBvbiBzdWNjZXNzIGlzIHNldCB0byB0cnVlIGlmIGxhdGVuY3kgd2FzIGNvbXB1dGVkIGRpcmVjdGx5CisgICAgICAgICAgICAgKiAgICAgICAgZnJvbSB0aGUgdHJhY2sgdGltZXN0YW1wOyBvdGhlcndpc2Ugc2V0IHRvIGZhbHNlIGlmIGxhdGVuY3kgd2FzCisgICAgICAgICAgICAgKiAgICAgICAgZXN0aW1hdGVkIGZyb20gdGhlIHNlcnZlciB0aW1lc3RhbXAuCisgICAgICAgICAgICAgKiAgICAgICAgZnJvbVRyYWNrIG1heSBiZSBudWxscHRyIG9yIG9taXR0ZWQgaWYgbm90IHJlcXVpcmVkLgorICAgICAgICAgICAgICoKKyAgICAgICAgICAgICAqIFxyZXR1cm5zIE9LIG9yIElOVkFMSURfT1BFUkFUSU9OIG9uIGZhaWx1cmUuCisgICAgICAgICAgICAgKi8KKyAgICAgICAgICAgIHN0YXR1c190ICAgIGdldFRyYWNrTGF0ZW5jeU1zKGRvdWJsZSAqbGF0ZW5jeU1zLCBib29sICpmcm9tVHJhY2sgPSBudWxscHRyKSBjb25zdCB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG91YmxlIHNlcnZlckxhdGVuY3lNczsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0dXNfdCBzdGF0dXMgPSBnZXRTZXJ2ZXJMYXRlbmN5TXMoJnNlcnZlckxhdGVuY3lNcywgZnJvbVRyYWNrKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoc3RhdHVzID09IE9LKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpsYXRlbmN5TXMgPSBzZXJ2ZXJMYXRlbmN5TXMgKyBidWZmZXJMYXRlbmN5TXMoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHN0YXR1czsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAvLyBUT0RPOiBDb25zaWRlciBtYWtpbmcgdGhpcyBleHRlcm5hbC4KKyAgICAgICAgICAgc3RydWN0IEZyYW1lVGltZSB7CisgICAgICAgICAgICAgICBpbnQ2NF90IGZyYW1lczsKKyAgICAgICAgICAgICAgIGludDY0X3QgdGltZU5zOworICAgICAgICAgICB9OworCisgICAgICAgICAgIC8vIEtlcm5lbEZyYW1lVGltZSBpcyB1cGRhdGVkIHBlciAibWl4IiBwZXJpb2QgZXZlbiBmb3Igbm9uLXBjbSB0cmFja3MuCisgICAgICAgICAgIHZvaWQgICAgICAgICBnZXRLZXJuZWxGcmFtZVRpbWUoRnJhbWVUaW1lICpmdCkgY29uc3QgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgKmZ0ID0gbUtlcm5lbEZyYW1lVGltZS5sb2FkKCk7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgYXVkaW9fZm9ybWF0X3QgZm9ybWF0KCkgY29uc3QgeyByZXR1cm4gbUZvcm1hdDsgfQorICAgICAgICAgICBpbnQgaWQoKSBjb25zdCB7IHJldHVybiBtSWQ7IH0KKwogcHJvdGVjdGVkOgogICAgIERJU0FMTE9XX0NPUFlfQU5EX0FTU0lHTihUcmFja0Jhc2UpOwogCkBAIC0xMTEsOCArMjA3LDYgQEAKICAgICAvLyBidXQgcHV0dGluZyBpdCBpbiBUcmFja0Jhc2UgYXZvaWRzIHRoZSBjb21wbGV4aXR5IG9mIHZpcnR1YWwgaW5oZXJpdGFuY2UKICAgICB2aXJ0dWFsIHNpemVfdCAgZnJhbWVzUmVhZHkoKSBjb25zdCB7IHJldHVybiBTSVpFX01BWDsgfQogCi0gICAgYXVkaW9fZm9ybWF0X3QgZm9ybWF0KCkgY29uc3QgeyByZXR1cm4gbUZvcm1hdDsgfQotCiAgICAgdWludDMyX3QgY2hhbm5lbENvdW50KCkgY29uc3QgeyByZXR1cm4gbUNoYW5uZWxDb3VudDsgfQogCiAgICAgYXVkaW9fY2hhbm5lbF9tYXNrX3QgY2hhbm5lbE1hc2soKSBjb25zdCB7IHJldHVybiBtQ2hhbm5lbE1hc2s7IH0KQEAgLTIwOCwxMyArMzAyLDE5IEBACiAgICAgY29uc3QgYm9vbCAgICAgICAgICBtSXNPdXQ7CiAgICAgc3A8U2VydmVyUHJveHk+ICAgICBtU2VydmVyUHJveHk7CiAgICAgY29uc3QgaW50ICAgICAgICAgICBtSWQ7Ci0gICAgc3A8TkJBSU9fU2luaz4gICAgICBtVGVlU2luazsKLSAgICBzcDxOQkFJT19Tb3VyY2U+ICAgIG1UZWVTb3VyY2U7CisjaWZkZWYgVEVFX1NJTksKKyAgICBOQkFJT19UZWUgICAgICAgICAgIG1UZWU7CisjZW5kaWYKICAgICBib29sICAgICAgICAgICAgICAgIG1UZXJtaW5hdGVkOwogICAgIHRyYWNrX3R5cGUgICAgICAgICAgbVR5cGU7ICAgICAgLy8gbXVzdCBiZSBvbmUgb2YgVFlQRV9ERUZBVUxULCBUWVBFX09VVFBVVCwgVFlQRV9QQVRDSCAuLi4KICAgICBhdWRpb19pb19oYW5kbGVfdCAgIG1UaHJlYWRJb0hhbmRsZTsgLy8gSS9PIGhhbmRsZSBvZiB0aGUgdGhyZWFkIHRoZSB0cmFjayBpcyBhdHRhY2hlZCB0bwogICAgIGF1ZGlvX3BvcnRfaGFuZGxlX3QgbVBvcnRJZDsgLy8gdW5pcXVlIElEIGZvciB0aGlzIHRyYWNrIHVzZWQgYnkgYXVkaW8gcG9saWN5CiAgICAgYm9vbCAgICAgICAgICAgICAgICBtSXNJbnZhbGlkOyAvLyBub24tcmVzZXR0YWJsZSBsYXRjaCwgc2V0IGJ5IGludmFsaWRhdGUoKQorCisgICAgYm9vbCAgICAgICAgICAgICAgICBtU2VydmVyTGF0ZW5jeVN1cHBvcnRlZCA9IGZhbHNlOworICAgIHN0ZDo6YXRvbWljPGJvb2w+ICAgbVNlcnZlckxhdGVuY3lGcm9tVHJhY2t7fTsgLy8gbGF0ZW5jeSBmcm9tIHRyYWNrIG9yIHNlcnZlciB0aW1lc3RhbXAuCisgICAgc3RkOjphdG9taWM8ZG91YmxlPiBtU2VydmVyTGF0ZW5jeU1ze307ICAgICAgICAvLyBsYXN0IGxhdGVuY3kgcHVzaGVkIGZyb20gc2VydmVyIHRocmVhZC4KKyAgICBzdGQ6OmF0b21pYzxGcmFtZVRpbWU+IG1LZXJuZWxGcmFtZVRpbWV7fTsgICAgIC8vIGxhc3QgZnJhbWUgdGltZSBvbiBrZXJuZWwgc2lkZS4KIH07CiAKIC8vIFBhdGNoUHJveHlCdWZmZXJQcm92aWRlciBpbnRlcmZhY2UgaXMgaW1wbGVtZW50ZWQgYnkgUGF0Y2hUcmFjayBhbmQgUGF0Y2hSZWNvcmQuCmRpZmYgLS1naXQgYS9zZXJ2aWNlcy9hdWRpb2ZsaW5nZXIvVHJhY2tzLmNwcCBiL3NlcnZpY2VzL2F1ZGlvZmxpbmdlci9UcmFja3MuY3BwCmluZGV4IDZkMjVmYjkuLmYyNjE3YWUgMTAwNjQ0Ci0tLSBhL3NlcnZpY2VzL2F1ZGlvZmxpbmdlci9UcmFja3MuY3BwCisrKyBiL3NlcnZpY2VzL2F1ZGlvZmxpbmdlci9UcmFja3MuY3BwCkBAIC0yOCwxMSArMjgsMTEgQEAKICNpbmNsdWRlIDxwcml2YXRlL21lZGlhL0F1ZGlvVHJhY2tTaGFyZWQuaD4KIAogI2luY2x1ZGUgIkF1ZGlvRmxpbmdlci5oIgotI2luY2x1ZGUgIlNlcnZpY2VVdGlsaXRpZXMuaCIKIAogI2luY2x1ZGUgPG1lZGlhL25iYWlvL1BpcGUuaD4KICNpbmNsdWRlIDxtZWRpYS9uYmFpby9QaXBlUmVhZGVyLmg+CiAjaW5jbHVkZSA8bWVkaWEvUmVjb3JkQnVmZmVyQ29udmVydGVyLmg+CisjaW5jbHVkZSA8bWVkaWF1dGlscy9TZXJ2aWNlVXRpbGl0aWVzLmg+CiAjaW5jbHVkZSA8YXVkaW9fdXRpbHMvbWluaWZsb2F0Lmg+CiAKIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KQEAgLTU2LDYgKzU2LDggQEAKIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIC8vICAgICAgVHJhY2tCYXNlCiAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjdW5kZWYgTE9HX1RBRworI2RlZmluZSBMT0dfVEFHICJBRjo6VHJhY2tCYXNlIgogCiBzdGF0aWMgdm9sYXRpbGUgaW50MzJfdCBuZXh0VHJhY2tJZCA9IDU1OwogCkBAIC0xMDIsOSArMTA0LDEwIEBACiAgICAgICAgIG1Jc0ludmFsaWQoZmFsc2UpCiB7CiAgICAgY29uc3QgdWlkX3QgY2FsbGluZ1VpZCA9IElQQ1RocmVhZFN0YXRlOjpzZWxmKCktPmdldENhbGxpbmdVaWQoKTsKLSAgICBpZiAoIWlzVHJ1c3RlZENhbGxpbmdVaWQoY2FsbGluZ1VpZCkgfHwgY2xpZW50VWlkID09IEFVRElPX1VJRF9JTlZBTElEKSB7CisgICAgaWYgKCFpc0F1ZGlvU2VydmVyT3JNZWRpYVNlcnZlclVpZChjYWxsaW5nVWlkKSB8fCBjbGllbnRVaWQgPT0gQVVESU9fVUlEX0lOVkFMSUQpIHsKICAgICAgICAgQUxPR1dfSUYoY2xpZW50VWlkICE9IEFVRElPX1VJRF9JTlZBTElEICYmIGNsaWVudFVpZCAhPSBjYWxsaW5nVWlkLAotICAgICAgICAgICAgICAgICIlcyB1aWQgJWQgdHJpZWQgdG8gcGFzcyBpdHNlbGYgb2ZmIGFzICVkIiwgX19GVU5DVElPTl9fLCBjYWxsaW5nVWlkLCBjbGllbnRVaWQpOworICAgICAgICAgICAgICAgICIlcyglZCk6IHVpZCAlZCB0cmllZCB0byBwYXNzIGl0c2VsZiBvZmYgYXMgJWQiLAorICAgICAgICAgICAgICAgICBfX2Z1bmNfXywgbUlkLCBjYWxsaW5nVWlkLCBjbGllbnRVaWQpOwogICAgICAgICBjbGllbnRVaWQgPSBjYWxsaW5nVWlkOwogICAgIH0KICAgICAvLyBjbGllbnRVaWQgY29udGFpbnMgdGhlIHVpZCBvZiB0aGUgYXBwIHRoYXQgaXMgcmVzcG9uc2libGUgZm9yIHRoaXMgdHJhY2ssIHNvIHdlIGNhbiBibGFtZQpAQCAtMTQ0LDcgKzE0Nyw3IEBACiAgICAgICAgIG1DYmxrTWVtb3J5ID0gY2xpZW50LT5oZWFwKCktPmFsbG9jYXRlKHNpemUpOwogICAgICAgICBpZiAobUNibGtNZW1vcnkgPT0gMCB8fAogICAgICAgICAgICAgICAgIChtQ2JsayA9IHN0YXRpY19jYXN0PGF1ZGlvX3RyYWNrX2NibGtfdCAqPihtQ2Jsa01lbW9yeS0+cG9pbnRlcigpKSkgPT0gTlVMTCkgewotICAgICAgICAgICAgQUxPR0UoIm5vdCBlbm91Z2ggbWVtb3J5IGZvciBBdWRpb1RyYWNrIHNpemU9JXp1Iiwgc2l6ZSk7CisgICAgICAgICAgICBBTE9HRSgiJXMoJWQpOiBub3QgZW5vdWdoIG1lbW9yeSBmb3IgQXVkaW9UcmFjayBzaXplPSV6dSIsIF9fZnVuY19fLCBtSWQsIHNpemUpOwogICAgICAgICAgICAgY2xpZW50LT5oZWFwKCktPmR1bXAoIkF1ZGlvVHJhY2siKTsKICAgICAgICAgICAgIG1DYmxrTWVtb3J5LmNsZWFyKCk7CiAgICAgICAgICAgICByZXR1cm47CkBAIC0xNTIsNyArMTU1LDcgQEAKICAgICB9IGVsc2UgewogICAgICAgICBtQ2JsayA9IChhdWRpb190cmFja19jYmxrX3QgKikgbWFsbG9jKHNpemUpOwogICAgICAgICBpZiAobUNibGsgPT0gTlVMTCkgewotICAgICAgICAgICAgQUxPR0UoIm5vdCBlbm91Z2ggbWVtb3J5IGZvciBBdWRpb1RyYWNrIHNpemU9JXp1Iiwgc2l6ZSk7CisgICAgICAgICAgICBBTE9HRSgiJXMoJWQpOiBub3QgZW5vdWdoIG1lbW9yeSBmb3IgQXVkaW9UcmFjayBzaXplPSV6dSIsIF9fZnVuY19fLCBtSWQsIHNpemUpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAgICAgfQpAQCAtMTY2LDcgKzE2OSw4IEBACiAgICAgICAgICAgICBpZiAocm9IZWFwID09IDAgfHwKICAgICAgICAgICAgICAgICAgICAgKG1CdWZmZXJNZW1vcnkgPSByb0hlYXAtPmFsbG9jYXRlKGJ1ZmZlclNpemUpKSA9PSAwIHx8CiAgICAgICAgICAgICAgICAgICAgIChtQnVmZmVyID0gbUJ1ZmZlck1lbW9yeS0+cG9pbnRlcigpKSA9PSBOVUxMKSB7Ci0gICAgICAgICAgICAgICAgQUxPR0UoIm5vdCBlbm91Z2ggbWVtb3J5IGZvciByZWFkLW9ubHkgYnVmZmVyIHNpemU9JXp1IiwgYnVmZmVyU2l6ZSk7CisgICAgICAgICAgICAgICAgQUxPR0UoIiVzKCVkKTogbm90IGVub3VnaCBtZW1vcnkgZm9yIHJlYWQtb25seSBidWZmZXIgc2l6ZT0lenUiLAorICAgICAgICAgICAgICAgICAgICAgICAgX19mdW5jX18sIG1JZCwgYnVmZmVyU2l6ZSk7CiAgICAgICAgICAgICAgICAgaWYgKHJvSGVhcCAhPSAwKSB7CiAgICAgICAgICAgICAgICAgICAgIHJvSGVhcC0+ZHVtcCgiYnVmZmVyIik7CiAgICAgICAgICAgICAgICAgfQpAQCAtMjA1LDI3ICsyMDksMTIgQEAKICAgICAgICAgICAgIG1CdWZmZXIgPSBidWZmZXI7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIExPR19BTFdBWVNfRkFUQUwoImludmFsaWQgYWxsb2NhdGlvbiB0eXBlOiAlZCIsIChpbnQpYWxsb2MpOworICAgICAgICAgICAgTE9HX0FMV0FZU19GQVRBTCgiJXMoJWQpOiBpbnZhbGlkIGFsbG9jYXRpb24gdHlwZTogJWQiLCBfX2Z1bmNfXywgbUlkLCAoaW50KWFsbG9jKTsKICAgICAgICAgfQogICAgICAgICBtQnVmZmVyU2l6ZSA9IGJ1ZmZlclNpemU7CiAKICNpZmRlZiBURUVfU0lOSwotICAgICAgICBpZiAobVRlZVNpbmtUcmFja0VuYWJsZWQpIHsKLSAgICAgICAgICAgIE5CQUlPX0Zvcm1hdCBwaXBlRm9ybWF0ID0gRm9ybWF0X2Zyb21fU1JfQyhtU2FtcGxlUmF0ZSwgbUNoYW5uZWxDb3VudCwgbUZvcm1hdCk7Ci0gICAgICAgICAgICBpZiAoRm9ybWF0X2lzVmFsaWQocGlwZUZvcm1hdCkpIHsKLSAgICAgICAgICAgICAgICBQaXBlICpwaXBlID0gbmV3IFBpcGUobVRlZVNpbmtUcmFja0ZyYW1lcywgcGlwZUZvcm1hdCk7Ci0gICAgICAgICAgICAgICAgc2l6ZV90IG51bUNvdW50ZXJPZmZlcnMgPSAwOwotICAgICAgICAgICAgICAgIGNvbnN0IE5CQUlPX0Zvcm1hdCBvZmZlcnNbMV0gPSB7cGlwZUZvcm1hdH07Ci0gICAgICAgICAgICAgICAgc3NpemVfdCBpbmRleCA9IHBpcGUtPm5lZ290aWF0ZShvZmZlcnMsIDEsIE5VTEwsIG51bUNvdW50ZXJPZmZlcnMpOwotICAgICAgICAgICAgICAgIEFMT0dfQVNTRVJUKGluZGV4ID09IDApOwotICAgICAgICAgICAgICAgIFBpcGVSZWFkZXIgKnBpcGVSZWFkZXIgPSBuZXcgUGlwZVJlYWRlcigqcGlwZSk7Ci0gICAgICAgICAgICAgICAgbnVtQ291bnRlck9mZmVycyA9IDA7Ci0gICAgICAgICAgICAgICAgaW5kZXggPSBwaXBlUmVhZGVyLT5uZWdvdGlhdGUob2ZmZXJzLCAxLCBOVUxMLCBudW1Db3VudGVyT2ZmZXJzKTsKLSAgICAgICAgICAgICAgICBBTE9HX0FTU0VSVChpbmRleCA9PSAwKTsKLSAgICAgICAgICAgICAgICBtVGVlU2luayA9IHBpcGU7Ci0gICAgICAgICAgICAgICAgbVRlZVNvdXJjZSA9IHBpcGVSZWFkZXI7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KKyAgICAgICAgbVRlZS5zZXQoc2FtcGxlUmF0ZSwgbUNoYW5uZWxDb3VudCwgZm9ybWF0LCBOQkFJT19UZWU6OlRFRV9GTEFHX1RSQUNLKTsKICNlbmRpZgogCiAgICAgfQpAQCAtMjQ0LDkgKzIzMyw2IEBACiAKIEF1ZGlvRmxpbmdlcjo6VGhyZWFkQmFzZTo6VHJhY2tCYXNlOjp+VHJhY2tCYXNlKCkKIHsKLSNpZmRlZiBURUVfU0lOSwotICAgIGR1bXBUZWUoLTEsIG1UZWVTb3VyY2UsIG1JZCwgJ1QnKTsKLSNlbmRpZgogICAgIC8vIGRlbGV0ZSB0aGUgcHJveHkgYmVmb3JlIGRlbGV0aW5nIHRoZSBzaGFyZWQgbWVtb3J5IGl0IHJlZmVycyB0bywgdG8gYXZvaWQgZGFuZ2xpbmcgcmVmZXJlbmNlCiAgICAgbVNlcnZlclByb3h5LmNsZWFyKCk7CiAgICAgaWYgKG1DYmxrICE9IE5VTEwpIHsKQEAgLTI3NCw5ICsyNjAsNyBAQAogdm9pZCBBdWRpb0ZsaW5nZXI6OlRocmVhZEJhc2U6OlRyYWNrQmFzZTo6cmVsZWFzZUJ1ZmZlcihBdWRpb0J1ZmZlclByb3ZpZGVyOjpCdWZmZXIqIGJ1ZmZlcikKIHsKICNpZmRlZiBURUVfU0lOSwotICAgIGlmIChtVGVlU2luayAhPSAwKSB7Ci0gICAgICAgICh2b2lkKSBtVGVlU2luay0+d3JpdGUoYnVmZmVyLT5yYXcsIGJ1ZmZlci0+ZnJhbWVDb3VudCk7Ci0gICAgfQorICAgIG1UZWUud3JpdGUoYnVmZmVyLT5yYXcsIGJ1ZmZlci0+ZnJhbWVDb3VudCk7CiAjZW5kaWYKIAogICAgIFNlcnZlclByb3h5OjpCdWZmZXIgYnVmOwpAQCAtMjk2LDYgKzI4MCw4IEBACiAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAvLyAgICAgIFBsYXliYWNrCiAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjdW5kZWYgTE9HX1RBRworI2RlZmluZSBMT0dfVEFHICJBRjo6VHJhY2tIYW5kbGUiCiAKIEF1ZGlvRmxpbmdlcjo6VHJhY2tIYW5kbGU6OlRyYWNrSGFuZGxlKGNvbnN0IHNwPEF1ZGlvRmxpbmdlcjo6UGxheWJhY2tUaHJlYWQ6OlRyYWNrPiYgdHJhY2spCiAgICAgOiBCbkF1ZGlvVHJhY2soKSwKQEAgLTM2OCw2ICszNTQsOCBAQAogfQogCiAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjdW5kZWYgTE9HX1RBRworI2RlZmluZSBMT0dfVEFHICJBRjo6VHJhY2siCiAKIC8vIFRyYWNrIGNvbnN0cnVjdG9yIG11c3QgYmUgY2FsbGVkIHdpdGggQXVkaW9GbGluZ2VyOjptTG9jayBhbmQgVGhyZWFkQmFzZTo6bUxvY2sgaGVsZAogQXVkaW9GbGluZ2VyOjpQbGF5YmFja1RocmVhZDo6VHJhY2s6OlRyYWNrKApAQCAtMzk3LDcgKzM4NSw2IEBACiAgICAgLy8gbVJldHJ5Q291bnQgaW5pdGlhbGl6ZWQgbGF0ZXIgd2hlbiBuZWVkZWQKICAgICBtU2hhcmVkQnVmZmVyKHNoYXJlZEJ1ZmZlciksCiAgICAgbVN0cmVhbVR5cGUoc3RyZWFtVHlwZSksCi0gICAgbU5hbWUoVFJBQ0tfTkFNRV9GQUlMVVJFKSwgIC8vIHNldCB0byBUUkFDS19OQU1FX1BFTkRJTkcgb24gY29uc3RydWN0b3Igc3VjY2Vzcy4KICAgICBtTWFpbkJ1ZmZlcih0aHJlYWQtPnNpbmtCdWZmZXIoKSksCiAgICAgbUF1eEJ1ZmZlcihOVUxMKSwKICAgICBtQXV4RWZmZWN0SWQoMCksIG1IYXNWb2x1bWVDb250cm9sbGVyKGZhbHNlKSwKQEAgLTQxNyw4ICs0MDQsOCBAQAogICAgIC8vIGNsaWVudCA9PSAwIGltcGxpZXMgc2hhcmVkQnVmZmVyID09IDAKICAgICBBTE9HX0FTU0VSVCghKGNsaWVudCA9PSAwICYmIHNoYXJlZEJ1ZmZlciAhPSAwKSk7CiAKLSAgICBBTE9HVl9JRihzaGFyZWRCdWZmZXIgIT0gMCwgInNoYXJlZEJ1ZmZlcjogJXAsIHNpemU6ICV6dSIsIHNoYXJlZEJ1ZmZlci0+cG9pbnRlcigpLAotICAgICAgICAgICAgc2hhcmVkQnVmZmVyLT5zaXplKCkpOworICAgIEFMT0dWX0lGKHNoYXJlZEJ1ZmZlciAhPSAwLCAiJXMoJWQpOiBzaGFyZWRCdWZmZXI6ICVwLCBzaXplOiAlenUiLAorICAgICAgICAgICAgX19mdW5jX18sIG1JZCwgc2hhcmVkQnVmZmVyLT5wb2ludGVyKCksIHNoYXJlZEJ1ZmZlci0+c2l6ZSgpKTsKIAogICAgIGlmIChtQ2JsayA9PSBOVUxMKSB7CiAgICAgICAgIHJldHVybjsKQEAgLTQzNCw3ICs0MjEsNyBAQAogICAgIG1TZXJ2ZXJQcm94eSA9IG1BdWRpb1RyYWNrU2VydmVyUHJveHk7CiAKICAgICBpZiAoIXRocmVhZC0+aXNUcmFja0FsbG93ZWRfbChjaGFubmVsTWFzaywgZm9ybWF0LCBzZXNzaW9uSWQsIHVpZCkpIHsKLSAgICAgICAgQUxPR0UoIm5vIG1vcmUgdHJhY2tzIGF2YWlsYWJsZSIpOworICAgICAgICBBTE9HRSgiJXMoJWQpOiBubyBtb3JlIHRyYWNrcyBhdmFpbGFibGUiLCBfX2Z1bmNfXywgbUlkKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICAvLyBvbmx5IGFsbG9jYXRlIGEgZmFzdCB0cmFjayBpbmRleCBpZiB3ZSB3ZXJlIGFibGUgdG8gYWxsb2NhdGUgYSBub3JtYWwgdHJhY2sgbmFtZQpAQCAtNDUzLDEyICs0NDAsMTggQEAKICAgICAgICAgbUZhc3RJbmRleCA9IGk7CiAgICAgICAgIHRocmVhZC0+bUZhc3RUcmFja0F2YWlsTWFzayAmPSB+KDEgPDwgaSk7CiAgICAgfQotICAgIG1OYW1lID0gVFJBQ0tfTkFNRV9QRU5ESU5HOworCisgICAgbVNlcnZlckxhdGVuY3lTdXBwb3J0ZWQgPSB0aHJlYWQtPnR5cGUoKSA9PSBUaHJlYWRCYXNlOjpNSVhFUgorICAgICAgICAgICAgfHwgdGhyZWFkLT50eXBlKCkgPT0gVGhyZWFkQmFzZTo6RFVQTElDQVRJTkc7CisjaWZkZWYgVEVFX1NJTksKKyAgICBtVGVlLnNldElkKHN0ZDo6c3RyaW5nKCJfIikgKyBzdGQ6OnRvX3N0cmluZyhtVGhyZWFkSW9IYW5kbGUpCisgICAgICAgICAgICArICJfIiArIHN0ZDo6dG9fc3RyaW5nKG1JZCkpOworI2VuZGlmCiB9CiAKIEF1ZGlvRmxpbmdlcjo6UGxheWJhY2tUaHJlYWQ6OlRyYWNrOjp+VHJhY2soKQogewotICAgIEFMT0dWKCJQbGF5YmFja1RocmVhZDo6VHJhY2sgZGVzdHJ1Y3RvciIpOworICAgIEFMT0dWKCIlcyglZCkiLCBfX2Z1bmNfXywgbUlkKTsKIAogICAgIC8vIFRoZSBkZXN0cnVjdG9yIHdvdWxkIGNsZWFyIG1TaGFyZWRCdWZmZXIsCiAgICAgLy8gYnV0IGl0IHdpbGwgbm90IHB1c2ggdGhlIGRlY3JlbWVudGVkIHJlZmVyZW5jZSBjb3VudCwKQEAgLTQ3Miw3ICs0NjUsNyBAQAogc3RhdHVzX3QgQXVkaW9GbGluZ2VyOjpQbGF5YmFja1RocmVhZDo6VHJhY2s6OmluaXRDaGVjaygpIGNvbnN0CiB7CiAgICAgc3RhdHVzX3Qgc3RhdHVzID0gVHJhY2tCYXNlOjppbml0Q2hlY2soKTsKLSAgICBpZiAoc3RhdHVzID09IE5PX0VSUk9SICYmIG1OYW1lID09IFRSQUNLX05BTUVfRkFJTFVSRSkgeworICAgIGlmIChzdGF0dXMgPT0gTk9fRVJST1IgJiYgbUNibGsgPT0gbnVsbHB0cikgewogICAgICAgICBzdGF0dXMgPSBOT19NRU1PUlk7CiAgICAgfQogICAgIHJldHVybiBzdGF0dXM7CkBAIC00OTgsMTggKzQ5MSwyMCBAQAogICAgICAgICAgICAgd2FzQWN0aXZlID0gcGxheWJhY2tUaHJlYWQtPmRlc3Ryb3lUcmFja19sKHRoaXMpOwogICAgICAgICB9CiAgICAgICAgIGlmIChpc0V4dGVybmFsVHJhY2soKSAmJiAhd2FzQWN0aXZlKSB7Ci0gICAgICAgICAgICBBdWRpb1N5c3RlbTo6cmVsZWFzZU91dHB1dChtVGhyZWFkSW9IYW5kbGUsIG1TdHJlYW1UeXBlLCBtU2Vzc2lvbklkKTsKKyAgICAgICAgICAgIEF1ZGlvU3lzdGVtOjpyZWxlYXNlT3V0cHV0KG1Qb3J0SWQpOwogICAgICAgICB9CiAgICAgfQogfQogCi0vKnN0YXRpYyovIHZvaWQgQXVkaW9GbGluZ2VyOjpQbGF5YmFja1RocmVhZDo6VHJhY2s6OmFwcGVuZER1bXBIZWFkZXIoU3RyaW5nOCYgcmVzdWx0KQordm9pZCBBdWRpb0ZsaW5nZXI6OlBsYXliYWNrVGhyZWFkOjpUcmFjazo6YXBwZW5kRHVtcEhlYWRlcihTdHJpbmc4JiByZXN1bHQpCiB7Ci0gICAgcmVzdWx0LmFwcGVuZCgiVCBOYW1lIEFjdGl2ZSBDbGllbnQgU2Vzc2lvbiBTICBGbGFncyAiCi0gICAgICAgICAgICAgICAgICAiICBGb3JtYXQgQ2huIG1hc2sgIFNSYXRlICIKLSAgICAgICAgICAgICAgICAgICJTVCAgTCBkQiAgUiBkQiAgVlMgZEIgIgotICAgICAgICAgICAgICAgICAgIiAgU2VydmVyIEZybUNudCAgRnJtUmR5IEYgVW5kZXJydW5zICBGbHVzaGVkICIKLSAgICAgICAgICAgICAgICAgICJNYWluIEJ1ZiAgQXV4IEJ1ZlxuIik7CisgICAgcmVzdWx0LmFwcGVuZEZvcm1hdCgiVHlwZSAgICAgSWQgQWN0aXZlIENsaWVudCBTZXNzaW9uIFMgIEZsYWdzICIKKyAgICAgICAgICAgICAgICAgICAgICAgICIgIEZvcm1hdCBDaG4gbWFzayAgU1JhdGUgIgorICAgICAgICAgICAgICAgICAgICAgICAgIlNUIFVzZyBDVCAiCisgICAgICAgICAgICAgICAgICAgICAgICAiIEcgZGIgIEwgZEIgIFIgZEIgIFZTIGRCICIKKyAgICAgICAgICAgICAgICAgICAgICAgICIgIFNlcnZlciBGcm1DbnQgIEZybVJkeSBGIFVuZGVycnVucyAgRmx1c2hlZCIKKyAgICAgICAgICAgICAgICAgICAgICAgICIlc1xuIiwKKyAgICAgICAgICAgICAgICAgICAgICAgIGlzU2VydmVyTGF0ZW5jeVN1cHBvcnRlZCgpID8gIiAgIExhdGVuY3kiIDogIiIpOwogfQogCiB2b2lkIEF1ZGlvRmxpbmdlcjo6UGxheWJhY2tUaHJlYWQ6OlRyYWNrOjphcHBlbmREdW1wKFN0cmluZzgmIHJlc3VsdCwgYm9vbCBhY3RpdmUpCkBAIC01MTgsNyArNTEzLDcgQEAKICAgICBzd2l0Y2ggKG1UeXBlKSB7CiAgICAgY2FzZSBUWVBFX0RFRkFVTFQ6CiAgICAgY2FzZSBUWVBFX09VVFBVVDoKLSAgICAgICAgaWYgKG1TaGFyZWRCdWZmZXIuZ2V0KCkgIT0gbnVsbHB0cikgeworICAgICAgICBpZiAoaXNTdGF0aWMoKSkgewogICAgICAgICAgICAgdHJhY2tUeXBlID0gJ1MnOyAvLyBzdGF0aWMKICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIHRyYWNrVHlwZSA9ICcgJzsgLy8gbm9ybWFsCkBAIC01MzIsMTMgKzUyNyw5IEBACiAgICAgfQogCiAgICAgaWYgKGlzRmFzdFRyYWNrKCkpIHsKLSAgICAgICAgcmVzdWx0LmFwcGVuZEZvcm1hdCgiRiVjICUzZCIsIHRyYWNrVHlwZSwgbUZhc3RJbmRleCk7Ci0gICAgfSBlbHNlIGlmIChtTmFtZSA9PSBUUkFDS19OQU1FX1BFTkRJTkcpIHsKLSAgICAgICAgcmVzdWx0LmFwcGVuZEZvcm1hdCgiJWMgcGVuZCIsIHRyYWNrVHlwZSk7Ci0gICAgfSBlbHNlIGlmIChtTmFtZSA9PSBUUkFDS19OQU1FX0ZBSUxVUkUpIHsKLSAgICAgICAgcmVzdWx0LmFwcGVuZEZvcm1hdCgiJWMgZmFpbCIsIHRyYWNrVHlwZSk7CisgICAgICAgIHJlc3VsdC5hcHBlbmRGb3JtYXQoIkYlZCAlYyAlNmQiLCBtRmFzdEluZGV4LCB0cmFja1R5cGUsIG1JZCk7CiAgICAgfSBlbHNlIHsKLSAgICAgICAgcmVzdWx0LmFwcGVuZEZvcm1hdCgiJWMgJTRkIiwgdHJhY2tUeXBlLCBtTmFtZSk7CisgICAgICAgIHJlc3VsdC5hcHBlbmRGb3JtYXQoIiAgICVjICU2ZCIsIHRyYWNrVHlwZSwgbUlkKTsKICAgICB9CiAKICAgICBjaGFyIG5vd0luVW5kZXJydW47CkBAIC01OTQsMjEgKzU4NSwyNSBAQAogICAgICAgICAgICAgICAgICAgICA/ICdlJyAvKiBlcnJvciAqLyA6ICcgJyAvKiBpZGVudGljYWwgKi87CiAKICAgICByZXN1bHQuYXBwZW5kRm9ybWF0KCIlN3MgJTZ1ICU3dSAlMnMgMHglMDNYICIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICIlMDhYICUwOFggJTZ1ICIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICIlMnUgJTUuMmcgJTUuMmcgJTUuMmclYyAiCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAiJTA4WCAlNnp1JWMgJTZ6dSAlYyAlOXUlYyAlN3UgIgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIiUwOHpYICUwOHpYXG4iLAorICAgICAgICAgICAgICAgICAgICAgICAgIiUwOFggJTA4WCAlNnUgIgorICAgICAgICAgICAgICAgICAgICAgICAgIiUydSAlM3ggJTJ4ICIKKyAgICAgICAgICAgICAgICAgICAgICAgICIlNS4yZyAlNS4yZyAlNS4yZyAlNS4yZyVjICIKKyAgICAgICAgICAgICAgICAgICAgICAgICIlMDhYICU2enUlYyAlNnp1ICVjICU5dSVjICU3dSIsCiAgICAgICAgICAgICBhY3RpdmUgPyAieWVzIiA6ICJubyIsCi0gICAgICAgICAgICAobUNsaWVudCA9PSAwKSA/IGdldHBpZF9jYWNoZWQgOiBtQ2xpZW50LT5waWQoKSwKKyAgICAgICAgICAgIChtQ2xpZW50ID09IDApID8gZ2V0cGlkKCkgOiBtQ2xpZW50LT5waWQoKSwKICAgICAgICAgICAgIG1TZXNzaW9uSWQsCiAgICAgICAgICAgICBnZXRUcmFja1N0YXRlU3RyaW5nKCksCiAgICAgICAgICAgICBtQ2Jsay0+bUZsYWdzLAogCiAgICAgICAgICAgICBtRm9ybWF0LAogICAgICAgICAgICAgbUNoYW5uZWxNYXNrLAotICAgICAgICAgICAgbUF1ZGlvVHJhY2tTZXJ2ZXJQcm94eS0+Z2V0U2FtcGxlUmF0ZSgpLAorICAgICAgICAgICAgc2FtcGxlUmF0ZSgpLAogCiAgICAgICAgICAgICBtU3RyZWFtVHlwZSwKKyAgICAgICAgICAgIG1BdHRyLnVzYWdlLAorICAgICAgICAgICAgbUF0dHIuY29udGVudF90eXBlLAorCisgICAgICAgICAgICAyMC4wICogbG9nMTAobUZpbmFsVm9sdW1lKSwKICAgICAgICAgICAgIDIwLjAgKiBsb2cxMChmbG9hdF9mcm9tX2dhaW4oZ2Fpbl9taW5pZmxvYXRfdW5wYWNrX2xlZnQodmxyKSkpLAogICAgICAgICAgICAgMjAuMCAqIGxvZzEwKGZsb2F0X2Zyb21fZ2FpbihnYWluX21pbmlmbG9hdF91bnBhY2tfcmlnaHQodmxyKSkpLAogICAgICAgICAgICAgMjAuMCAqIGxvZzEwKHZzVm9sdW1lLmZpcnN0KSwgLy8gVm9sdW1lU2hhcGVyKHMpIHRvdGFsIHZvbHVtZQpAQCAtNjIxLDExICs2MTYsMjEgQEAKICAgICAgICAgICAgIGZpbGxpbmdTdGF0dXMsCiAgICAgICAgICAgICBtQXVkaW9UcmFja1NlcnZlclByb3h5LT5nZXRVbmRlcnJ1bkZyYW1lcygpLAogICAgICAgICAgICAgbm93SW5VbmRlcnJ1biwKLSAgICAgICAgICAgICh1bnNpZ25lZCltQXVkaW9UcmFja1NlcnZlclByb3h5LT5mcmFtZXNGbHVzaGVkKCkgJSAxMDAwMDAwMCwKLQotICAgICAgICAgICAgKHNpemVfdCltTWFpbkJ1ZmZlciwgLy8gdXNlICV6WCBhcyAlcCBhcHBlbmRzIDB4Ci0gICAgICAgICAgICAoc2l6ZV90KW1BdXhCdWZmZXIgICAvLyB1c2UgJXpYIGFzICVwIGFwcGVuZHMgMHgKKyAgICAgICAgICAgICh1bnNpZ25lZCltQXVkaW9UcmFja1NlcnZlclByb3h5LT5mcmFtZXNGbHVzaGVkKCkgJSAxMDAwMDAwMAogICAgICAgICAgICAgKTsKKworICAgIGlmIChpc1NlcnZlckxhdGVuY3lTdXBwb3J0ZWQoKSkgeworICAgICAgICBkb3VibGUgbGF0ZW5jeU1zOworICAgICAgICBib29sIGZyb21UcmFjazsKKyAgICAgICAgaWYgKGdldFRyYWNrTGF0ZW5jeU1zKCZsYXRlbmN5TXMsICZmcm9tVHJhY2spID09IE9LKSB7CisgICAgICAgICAgICAvLyBTaG93IGxhdGVuY3kgaW4gbXNlYywgZm9sbG93ZWQgYnkgJ3QnIGlmIGZyb20gdHJhY2sgdGltZXN0YW1wICh0aGUgbW9zdCBhY2N1cmF0ZSkKKyAgICAgICAgICAgIC8vIG9yICdrJyBpZiBlc3RpbWF0ZWQgZnJvbSBrZXJuZWwgYmVjYXVzZSB0cmFjayBmcmFtZXMgaGF2ZW4ndCBiZWVuIHByZXNlbnRlZCB5ZXQuCisgICAgICAgICAgICByZXN1bHQuYXBwZW5kRm9ybWF0KCIgJTcuMmxmICVjIiwgbGF0ZW5jeU1zLCBmcm9tVHJhY2sgPyAndCcgOiAnaycpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgcmVzdWx0LmFwcGVuZEZvcm1hdCgiJTEwcyIsIG1DYmxrLT5tU2VydmVyICE9IDAgPyAidW5hdmFpbCIgOiAibmV3Iik7CisgICAgICAgIH0KKyAgICB9CisgICAgcmVzdWx0LmFwcGVuZCgiXG4iKTsKIH0KIAogdWludDMyX3QgQXVkaW9GbGluZ2VyOjpQbGF5YmFja1RocmVhZDo6VHJhY2s6OnNhbXBsZVJhdGUoKSBjb25zdCB7CkBAIC02NDMsOCArNjQ4LDggQEAKICAgICBidWZmZXItPmZyYW1lQ291bnQgPSBidWYubUZyYW1lQ291bnQ7CiAgICAgYnVmZmVyLT5yYXcgPSBidWYubVJhdzsKICAgICBpZiAoYnVmLm1GcmFtZUNvdW50ID09IDAgJiYgIWlzU3RvcHBpbmcoKSAmJiAhaXNTdG9wcGVkKCkgJiYgIWlzUGF1c2VkKCkpIHsKLSAgICAgICAgQUxPR1YoInVuZGVycnVuLCAgZnJhbWVzUmVhZHkoJXp1KSA8IGZyYW1lc0Rlc2lyZWQoJXpkKSwgc3RhdGU6ICVkIiwKLSAgICAgICAgICAgICAgICBidWYubUZyYW1lQ291bnQsIGRlc2lyZWRGcmFtZXMsIG1TdGF0ZSk7CisgICAgICAgIEFMT0dWKCIlcyglZCk6IHVuZGVycnVuLCAgZnJhbWVzUmVhZHkoJXp1KSA8IGZyYW1lc0Rlc2lyZWQoJXpkKSwgc3RhdGU6ICVkIiwKKyAgICAgICAgICAgICAgICBfX2Z1bmNfXywgbUlkLCBidWYubUZyYW1lQ291bnQsIGRlc2lyZWRGcmFtZXMsIG1TdGF0ZSk7CiAgICAgICAgIG1BdWRpb1RyYWNrU2VydmVyUHJveHktPnRhbGx5VW5kZXJydW5GcmFtZXMoZGVzaXJlZEZyYW1lcyk7CiAgICAgfSBlbHNlIHsKICAgICAgICAgbUF1ZGlvVHJhY2tTZXJ2ZXJQcm94eS0+dGFsbHlVbmRlcnJ1bkZyYW1lcygwKTsKQEAgLTY4Miw2ICs2ODcsMTMgQEAKICAgICBtQXVkaW9UcmFja1NlcnZlclByb3h5LT5zZXRUaW1lc3RhbXAodGltZXN0YW1wKTsKIAogICAgIC8vIFdlIGRvIG5vdCBzZXQgZHJhaW5lZCBoZXJlLCBhcyBGYXN0VHJhY2sgdGltZXN0YW1wIG1heSBub3QgZ28gdG8gdmVyeSBsYXN0IGZyYW1lLgorCisgICAgLy8gQ29tcHV0ZSBsYXRlbmN5LgorICAgIC8vIFRPRE86IENvbnNpZGVyIHdoZXRoZXIgdGhlIHNlcnZlciBsYXRlbmN5IG1heSBiZSBwYXNzZWQgaW4gYnkgRmFzdE1peGVyCisgICAgLy8gYXMgYSBjb25zdGFudCBmb3IgYWxsIGFjdGl2ZSBGYXN0VHJhY2tzLgorICAgIGNvbnN0IGRvdWJsZSBsYXRlbmN5TXMgPSB0aW1lc3RhbXAuZ2V0T3V0cHV0U2VydmVyTGF0ZW5jeU1zKHNhbXBsZVJhdGUoKSk7CisgICAgbVNlcnZlckxhdGVuY3lGcm9tVHJhY2suc3RvcmUodHJ1ZSk7CisgICAgbVNlcnZlckxhdGVuY3lNcy5zdG9yZShsYXRlbmN5TXMpOwogfQogCiAvLyBEb24ndCBjYWxsIGZvciBmYXN0IHRyYWNrczsgdGhlIGZyYW1lc1JlYWR5KCkgY291bGQgcmVzdWx0IGluIHByaW9yaXR5IGludmVyc2lvbgpAQCAtNzEwLDggKzcyMiw4IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXVkaW9fc2Vzc2lvbl90IHRyaWdnZXJTZXNzaW9uIF9fdW51c2VkKQogewogICAgIHN0YXR1c190IHN0YXR1cyA9IE5PX0VSUk9SOwotICAgIEFMT0dWKCJzdGFydCglZCksIGNhbGxpbmcgcGlkICVkIHNlc3Npb24gJWQiLAotICAgICAgICAgICAgbU5hbWUsIElQQ1RocmVhZFN0YXRlOjpzZWxmKCktPmdldENhbGxpbmdQaWQoKSwgbVNlc3Npb25JZCk7CisgICAgQUxPR1YoIiVzKCVkKTogY2FsbGluZyBwaWQgJWQgc2Vzc2lvbiAlZCIsCisgICAgICAgICAgICBfX2Z1bmNfXywgbUlkLCBJUENUaHJlYWRTdGF0ZTo6c2VsZigpLT5nZXRDYWxsaW5nUGlkKCksIG1TZXNzaW9uSWQpOwogCiAgICAgc3A8VGhyZWFkQmFzZT4gdGhyZWFkID0gbVRocmVhZC5wcm9tb3RlKCk7CiAgICAgaWYgKHRocmVhZCAhPSAwKSB7CkBAIC03MzcsMTQgKzc0OSwxNyBAQAogICAgICAgICAgICAgaWYgKG1SZXN1bWVUb1N0b3BwaW5nKSB7CiAgICAgICAgICAgICAgICAgLy8gaGFwcGVuZWQgd2UgbmVlZCB0byByZXN1bWUgdG8gU1RPUFBJTkdfMQogICAgICAgICAgICAgICAgIG1TdGF0ZSA9IFRyYWNrQmFzZTo6U1RPUFBJTkdfMTsKLSAgICAgICAgICAgICAgICBBTE9HVigiUEFVU0VEID0+IFNUT1BQSU5HXzEgKCVkKSBvbiB0aHJlYWQgJXAiLCBtTmFtZSwgdGhpcyk7CisgICAgICAgICAgICAgICAgQUxPR1YoIiVzKCVkKTogUEFVU0VEID0+IFNUT1BQSU5HXzEgb24gdGhyZWFkICVkIiwKKyAgICAgICAgICAgICAgICAgICAgICAgIF9fZnVuY19fLCBtSWQsIChpbnQpbVRocmVhZElvSGFuZGxlKTsKICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgbVN0YXRlID0gVHJhY2tCYXNlOjpSRVNVTUlORzsKLSAgICAgICAgICAgICAgICBBTE9HVigiUEFVU0VEID0+IFJFU1VNSU5HICglZCkgb24gdGhyZWFkICVwIiwgbU5hbWUsIHRoaXMpOworICAgICAgICAgICAgICAgIEFMT0dWKCIlcyglZCk6IFBBVVNFRCA9PiBSRVNVTUlORyBvbiB0aHJlYWQgJWQiLAorICAgICAgICAgICAgICAgICAgICAgICAgX19mdW5jX18sICBtSWQsIChpbnQpbVRocmVhZElvSGFuZGxlKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIG1TdGF0ZSA9IFRyYWNrQmFzZTo6QUNUSVZFOwotICAgICAgICAgICAgQUxPR1YoIj8gPT4gQUNUSVZFICglZCkgb24gdGhyZWFkICVwIiwgbU5hbWUsIHRoaXMpOworICAgICAgICAgICAgQUxPR1YoIiVzKCVkKTogPyA9PiBBQ1RJVkUgb24gdGhyZWFkICVkIiwKKyAgICAgICAgICAgICAgICAgICAgX19mdW5jX18sIG1JZCwgKGludCltVGhyZWFkSW9IYW5kbGUpOwogICAgICAgICB9CiAKICAgICAgICAgLy8gc3RhdGVzIHRvIHJlc2V0IHBvc2l0aW9uIGluZm8gZm9yIG5vbi1vZmZsb2FkZWQvZGlyZWN0IHRyYWNrcwpAQCAtNzk1LDcgKzgxMCw3IEBACiAKIHZvaWQgQXVkaW9GbGluZ2VyOjpQbGF5YmFja1RocmVhZDo6VHJhY2s6OnN0b3AoKQogewotICAgIEFMT0dWKCJzdG9wKCVkKSwgY2FsbGluZyBwaWQgJWQiLCBtTmFtZSwgSVBDVGhyZWFkU3RhdGU6OnNlbGYoKS0+Z2V0Q2FsbGluZ1BpZCgpKTsKKyAgICBBTE9HVigiJXMoJWQpOiBjYWxsaW5nIHBpZCAlZCIsIF9fZnVuY19fLCBtSWQsIElQQ1RocmVhZFN0YXRlOjpzZWxmKCktPmdldENhbGxpbmdQaWQoKSk7CiAgICAgc3A8VGhyZWFkQmFzZT4gdGhyZWFkID0gbVRocmVhZC5wcm9tb3RlKCk7CiAgICAgaWYgKHRocmVhZCAhPSAwKSB7CiAgICAgICAgIE11dGV4OjpBdXRvbG9jayBfbCh0aHJlYWQtPm1Mb2NrKTsKQEAgLTgxOSwxNSArODM0LDE1IEBACiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQogICAgICAgICAgICAgcGxheWJhY2tUaHJlYWQtPmJyb2FkY2FzdF9sKCk7Ci0gICAgICAgICAgICBBTE9HVigibm90IHN0b3BwaW5nL3N0b3BwZWQgPT4gc3RvcHBpbmcvc3RvcHBlZCAoJWQpIG9uIHRocmVhZCAlcCIsIG1OYW1lLAotICAgICAgICAgICAgICAgICAgICBwbGF5YmFja1RocmVhZCk7CisgICAgICAgICAgICBBTE9HVigiJXMoJWQpOiBub3Qgc3RvcHBpbmcvc3RvcHBlZCA9PiBzdG9wcGluZy9zdG9wcGVkIG9uIHRocmVhZCAlZCIsCisgICAgICAgICAgICAgICAgICAgIF9fZnVuY19fLCBtSWQsIChpbnQpbVRocmVhZElvSGFuZGxlKTsKICAgICAgICAgfQogICAgIH0KIH0KIAogdm9pZCBBdWRpb0ZsaW5nZXI6OlBsYXliYWNrVGhyZWFkOjpUcmFjazo6cGF1c2UoKQogewotICAgIEFMT0dWKCJwYXVzZSglZCksIGNhbGxpbmcgcGlkICVkIiwgbU5hbWUsIElQQ1RocmVhZFN0YXRlOjpzZWxmKCktPmdldENhbGxpbmdQaWQoKSk7CisgICAgQUxPR1YoIiVzKCVkKTogY2FsbGluZyBwaWQgJWQiLCBfX2Z1bmNfXywgbUlkLCBJUENUaHJlYWRTdGF0ZTo6c2VsZigpLT5nZXRDYWxsaW5nUGlkKCkpOwogICAgIHNwPFRocmVhZEJhc2U+IHRocmVhZCA9IG1UaHJlYWQucHJvbW90ZSgpOwogICAgIGlmICh0aHJlYWQgIT0gMCkgewogICAgICAgICBNdXRleDo6QXV0b2xvY2sgX2wodGhyZWFkLT5tTG9jayk7CkBAIC04NDYsNyArODYxLDggQEAKICAgICAgICAgY2FzZSBBQ1RJVkU6CiAgICAgICAgIGNhc2UgUkVTVU1JTkc6CiAgICAgICAgICAgICBtU3RhdGUgPSBQQVVTSU5HOwotICAgICAgICAgICAgQUxPR1YoIkFDVElWRS9SRVNVTUlORyA9PiBQQVVTSU5HICglZCkgb24gdGhyZWFkICVwIiwgbU5hbWUsIHRocmVhZC5nZXQoKSk7CisgICAgICAgICAgICBBTE9HVigiJXMoJWQpOiBBQ1RJVkUvUkVTVU1JTkcgPT4gUEFVU0lORyBvbiB0aHJlYWQgJWQiLAorICAgICAgICAgICAgICAgICAgICBfX2Z1bmNfXywgbUlkLCAoaW50KW1UaHJlYWRJb0hhbmRsZSk7CiAgICAgICAgICAgICBwbGF5YmFja1RocmVhZC0+YnJvYWRjYXN0X2woKTsKICAgICAgICAgICAgIGJyZWFrOwogCkBAIC04NTgsNyArODc0LDcgQEAKIAogdm9pZCBBdWRpb0ZsaW5nZXI6OlBsYXliYWNrVGhyZWFkOjpUcmFjazo6Zmx1c2goKQogewotICAgIEFMT0dWKCJmbHVzaCglZCkiLCBtTmFtZSk7CisgICAgQUxPR1YoIiVzKCVkKSIsIF9fZnVuY19fLCBtSWQpOwogICAgIHNwPFRocmVhZEJhc2U+IHRocmVhZCA9IG1UaHJlYWQucHJvbW90ZSgpOwogICAgIGlmICh0aHJlYWQgIT0gMCkgewogICAgICAgICBNdXRleDo6QXV0b2xvY2sgX2wodGhyZWFkLT5tTG9jayk7CkBAIC04ODAsMTEgKzg5NiwxMiBAQAogICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgQUxPR1YoImZsdXNoOiBvZmZsb2FkIGZsdXNoIik7CisgICAgICAgICAgICBBTE9HVigiJXMoJWQpOiBvZmZsb2FkIGZsdXNoIiwgX19mdW5jX18sIG1JZCk7CiAgICAgICAgICAgICByZXNldCgpOwogCiAgICAgICAgICAgICBpZiAobVN0YXRlID09IFNUT1BQSU5HXzEgfHwgbVN0YXRlID09IFNUT1BQSU5HXzIpIHsKLSAgICAgICAgICAgICAgICBBTE9HVigiZmx1c2hlZCBpbiBTVE9QUElOR18xIG9yIDIgc3RhdGUsIGNoYW5nZSBzdGF0ZSB0byBBQ1RJVkUiKTsKKyAgICAgICAgICAgICAgICBBTE9HVigiJXMoJWQpOiBmbHVzaGVkIGluIFNUT1BQSU5HXzEgb3IgMiBzdGF0ZSwgY2hhbmdlIHN0YXRlIHRvIEFDVElWRSIsCisgICAgICAgICAgICAgICAgICAgICAgICBfX2Z1bmNfXywgbUlkKTsKICAgICAgICAgICAgICAgICBtU3RhdGUgPSBBQ1RJVkU7CiAgICAgICAgICAgICB9CiAKQEAgLTk0OSw3ICs5NjYsNyBAQAogewogICAgIHNwPFRocmVhZEJhc2U+IHRocmVhZCA9IG1UaHJlYWQucHJvbW90ZSgpOwogICAgIGlmICh0aHJlYWQgPT0gMCkgewotICAgICAgICBBTE9HRSgidGhyZWFkIGlzIGRlYWQiKTsKKyAgICAgICAgQUxPR0UoIiVzKCVkKTogdGhyZWFkIGlzIGRlYWQiLCBfX2Z1bmNfXywgbUlkKTsKICAgICAgICAgcmV0dXJuIEZBSUxFRF9UUkFOU0FDVElPTjsKICAgICB9IGVsc2UgaWYgKCh0aHJlYWQtPnR5cGUoKSA9PSBUaHJlYWRCYXNlOjpESVJFQ1QpIHx8CiAgICAgICAgICAgICAgICAgICAgICh0aHJlYWQtPnR5cGUoKSA9PSBUaHJlYWRCYXNlOjpPRkZMT0FEKSkgewpAQCAtOTY5LDggKzk4NiwxMCBAQAogICAgICAgICBjb25zdCBWb2x1bWVTaGFwZXI6OkNvbmZpZ3VyYXRpb246Ok9wdGlvbkZsYWcgb3B0aW9uRmxhZwogICAgICAgICAgICAgPSBjb25maWd1cmF0aW9uLT5nZXRPcHRpb25GbGFncygpOwogICAgICAgICBpZiAoKG9wdGlvbkZsYWcgJiBWb2x1bWVTaGFwZXI6OkNvbmZpZ3VyYXRpb246Ok9QVElPTl9GTEFHX0NMT0NLX1RJTUUpID09IDApIHsKLSAgICAgICAgICAgIEFMT0dXKCIlcyB0cmFja3MgZG8gbm90IHN1cHBvcnQgZnJhbWUgY291bnRlZCBWb2x1bWVTaGFwZXIsIgotICAgICAgICAgICAgICAgICAgICAiIHVzaW5nIGNsb2NrIHRpbWUgaW5zdGVhZCIsIGlzT2ZmbG9hZGVkKCkgPyAiT2ZmbG9hZCIgOiAiRGlyZWN0Iik7CisgICAgICAgICAgICBBTE9HVygiJXMoJWQpOiAlcyB0cmFja3MgZG8gbm90IHN1cHBvcnQgZnJhbWUgY291bnRlZCBWb2x1bWVTaGFwZXIsIgorICAgICAgICAgICAgICAgICAgICAiIHVzaW5nIGNsb2NrIHRpbWUgaW5zdGVhZCIsCisgICAgICAgICAgICAgICAgICAgIF9fZnVuY19fLCBtSWQsCisgICAgICAgICAgICAgICAgICAgIGlzT2ZmbG9hZGVkKCkgPyAiT2ZmbG9hZCIgOiAiRGlyZWN0Iik7CiAgICAgICAgICAgICBuZXdDb25maWd1cmF0aW9uID0gbmV3IFZvbHVtZVNoYXBlcjo6Q29uZmlndXJhdGlvbigqY29uZmlndXJhdGlvbik7CiAgICAgICAgICAgICBuZXdDb25maWd1cmF0aW9uLT5zZXRPcHRpb25GbGFncygKICAgICAgICAgICAgICAgICBWb2x1bWVTaGFwZXI6OkNvbmZpZ3VyYXRpb246Ok9wdGlvbkZsYWcob3B0aW9uRmxhZwpAQCAtOTg1LDcgKzEwMDQsNyBAQAogICAgICAgICAvLyBTaWduYWwgdGhyZWFkIHRvIGZldGNoIG5ldyB2b2x1bWUuCiAgICAgICAgIHNwPFRocmVhZEJhc2U+IHRocmVhZCA9IG1UaHJlYWQucHJvbW90ZSgpOwogICAgICAgICBpZiAodGhyZWFkICE9IDApIHsKLSAgICAgICAgICAgICBNdXRleDo6QXV0b2xvY2sgX2wodGhyZWFkLT5tTG9jayk7CisgICAgICAgICAgICBNdXRleDo6QXV0b2xvY2sgX2wodGhyZWFkLT5tTG9jayk7CiAgICAgICAgICAgICB0aHJlYWQtPmJyb2FkY2FzdF9sKCk7CiAgICAgICAgIH0KICAgICB9CkBAIC0xMTA1LDExICsxMTI0LDE0IEBACiAgICAgLy8gdG8gZGV0ZWN0IHdoZW4gYWxsIGZyYW1lcyBoYXZlIGJlZW4gcGxheWVkLiBJbiB0aGlzIGNhc2UgZnJhbWVzV3JpdHRlbiBpc24ndAogICAgIC8vIHVzZWZ1bCBiZWNhdXNlIGl0IGRvZXNuJ3QgYWx3YXlzIHJlZmxlY3Qgd2hldGhlciB0aGVyZSBpcyBkYXRhIGluIHRoZSBoL3cKICAgICAvLyBidWZmZXJzLCBwYXJ0aWN1bGFybHkgaWYgYSB0cmFjayBoYXMgYmVlbiBwYXVzZWQgYW5kIHJlc3VtZWQgZHVyaW5nIGRyYWluaW5nCi0gICAgQUxPR1YoInByZXNlbnRhdGlvbkNvbXBsZXRlKCkgbVByZXNlbnRhdGlvbkNvbXBsZXRlRnJhbWVzICVsbGQgZnJhbWVzV3JpdHRlbiAlbGxkIiwKKyAgICBBTE9HVigiJXMoJWQpOiBwcmVzZW50YXRpb25Db21wbGV0ZSgpIG1QcmVzZW50YXRpb25Db21wbGV0ZUZyYW1lcyAlbGxkIGZyYW1lc1dyaXR0ZW4gJWxsZCIsCisgICAgICAgICAgICBfX2Z1bmNfXywgbUlkLAogICAgICAgICAgICAgKGxvbmcgbG9uZyltUHJlc2VudGF0aW9uQ29tcGxldGVGcmFtZXMsIChsb25nIGxvbmcpZnJhbWVzV3JpdHRlbik7CiAgICAgaWYgKG1QcmVzZW50YXRpb25Db21wbGV0ZUZyYW1lcyA9PSAwKSB7CiAgICAgICAgIG1QcmVzZW50YXRpb25Db21wbGV0ZUZyYW1lcyA9IGZyYW1lc1dyaXR0ZW4gKyBhdWRpb0hhbEZyYW1lczsKLSAgICAgICAgQUxPR1YoInByZXNlbnRhdGlvbkNvbXBsZXRlKCkgcmVzZXQ6IG1QcmVzZW50YXRpb25Db21wbGV0ZUZyYW1lcyAlbGxkIGF1ZGlvSGFsRnJhbWVzICV6dSIsCisgICAgICAgIEFMT0dWKCIlcyglZCk6IHByZXNlbnRhdGlvbkNvbXBsZXRlKCkgcmVzZXQ6IgorICAgICAgICAgICAgICAgICIgbVByZXNlbnRhdGlvbkNvbXBsZXRlRnJhbWVzICVsbGQgYXVkaW9IYWxGcmFtZXMgJXp1IiwKKyAgICAgICAgICAgICAgICBfX2Z1bmNfXywgbUlkLAogICAgICAgICAgICAgICAgIChsb25nIGxvbmcpbVByZXNlbnRhdGlvbkNvbXBsZXRlRnJhbWVzLCBhdWRpb0hhbEZyYW1lcyk7CiAgICAgfQogCkBAIC0xMTc1LDcgKzExOTcsOCBAQAogICAgIGlmIChpc1Rlcm1pbmF0ZWQoKSB8fCBtU3RhdGUgPT0gUEFVU0VEIHx8CiAgICAgICAgICAgICAoKGZyYW1lc1JlYWR5KCkgPT0gMCkgJiYgKChtU2hhcmVkQnVmZmVyICE9IDApIHx8CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChtU3RhdGUgPT0gU1RPUFBFRCkpKSkgewotICAgICAgICBBTE9HVygiVHJhY2s6OnNldFN5bmNFdmVudCgpIGluIGludmFsaWQgc3RhdGUgJWQgb24gc2Vzc2lvbiAlZCAlcyBtb2RlLCBmcmFtZXNSZWFkeSAlenUiLAorICAgICAgICBBTE9HVygiJXMoJWQpOiBpbiBpbnZhbGlkIHN0YXRlICVkIG9uIHNlc3Npb24gJWQgJXMgbW9kZSwgZnJhbWVzUmVhZHkgJXp1IiwKKyAgICAgICAgICAgICAgX19mdW5jX18sIG1JZCwKICAgICAgICAgICAgICAgbVN0YXRlLCBtU2Vzc2lvbklkLCAobVNoYXJlZEJ1ZmZlciAhPSAwKSA/ICJzdGF0aWMiIDogInN0cmVhbSIsIGZyYW1lc1JlYWR5KCkpOwogICAgICAgICBldmVudC0+Y2FuY2VsKCk7CiAgICAgICAgIHJldHVybiBJTlZBTElEX09QRVJBVElPTjsKQEAgLTEyNDYsNyArMTI2OSwxNyBAQAogLy9UbyBiZSBjYWxsZWQgd2l0aCB0aHJlYWQgbG9jayBoZWxkCiB2b2lkIEF1ZGlvRmxpbmdlcjo6UGxheWJhY2tUaHJlYWQ6OlRyYWNrOjp1cGRhdGVUcmFja0ZyYW1lSW5mbygKICAgICAgICAgaW50NjRfdCB0cmFja0ZyYW1lc1JlbGVhc2VkLCBpbnQ2NF90IHNpbmtGcmFtZXNXcml0dGVuLAotICAgICAgICBjb25zdCBFeHRlbmRlZFRpbWVzdGFtcCAmdGltZVN0YW1wKSB7CisgICAgICAgIHVpbnQzMl90IGhhbFNhbXBsZVJhdGUsIGNvbnN0IEV4dGVuZGVkVGltZXN0YW1wICZ0aW1lU3RhbXApIHsKKyAgIC8vIE1ha2UgdGhlIGtlcm5lbCBmcmFtZXRpbWUgYXZhaWxhYmxlLgorICAgIGNvbnN0IEZyYW1lVGltZSBmdHsKKyAgICAgICAgICAgIHRpbWVTdGFtcC5tUG9zaXRpb25bRXh0ZW5kZWRUaW1lc3RhbXA6OkxPQ0FUSU9OX0tFUk5FTF0sCisgICAgICAgICAgICB0aW1lU3RhbXAubVRpbWVOc1tFeHRlbmRlZFRpbWVzdGFtcDo6TE9DQVRJT05fS0VSTkVMXX07CisgICAgLy8gQUxPR0QoIkZyYW1lVGltZTogJWxsZCAlbGxkIiwgKGxvbmcgbG9uZylmdC5mcmFtZXMsIChsb25nIGxvbmcpZnQudGltZU5zKTsKKyAgICBtS2VybmVsRnJhbWVUaW1lLnN0b3JlKGZ0KTsKKyAgICBpZiAoIWF1ZGlvX2lzX2xpbmVhcl9wY20obUZvcm1hdCkpIHsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKwogICAgIC8vdXBkYXRlIGZyYW1lIG1hcAogICAgIG1GcmFtZU1hcC5wdXNoKHRyYWNrRnJhbWVzUmVsZWFzZWQsIHNpbmtGcmFtZXNXcml0dGVuKTsKIApAQCAtMTI1NSw2ICsxMjg4LDcgQEAKICAgICAvLyBPdXIgdGltZXN0YW1wcyBhcmUgb25seSB1cGRhdGVkIHdoZW4gdGhlIHRyYWNrIGlzIG9uIHRoZSBUaHJlYWQgYWN0aXZlIGxpc3QuCiAgICAgLy8gV2UgbmVlZCB0byBlbnN1cmUgdGhhdCB0cmFja3MgYXJlIG5vdCByZW1vdmVkIGJlZm9yZSBmdWxsIGRyYWluLgogICAgIEV4dGVuZGVkVGltZXN0YW1wIGxvY2FsID0gdGltZVN0YW1wOworICAgIGJvb2wgZHJhaW5lZCA9IHRydWU7IC8vIGRlZmF1bHQgYXNzdW1lIGRyYWluZWQsIGlmIG5vIHNlcnZlciBpbmZvIGZvdW5kCiAgICAgYm9vbCBjaGVja2VkID0gZmFsc2U7CiAgICAgZm9yIChpbnQgaSA9IEV4dGVuZGVkVGltZXN0YW1wOjpMT0NBVElPTl9NQVggLSAxOwogICAgICAgICAgICAgaSA+PSBFeHRlbmRlZFRpbWVzdGFtcDo6TE9DQVRJT05fU0VSVkVSOyAtLWkpIHsKQEAgLTEyNjMsMjEgKzEyOTcsMzAgQEAKICAgICAgICAgICAgIGxvY2FsLm1Qb3NpdGlvbltpXSA9IG1GcmFtZU1hcC5maW5kWChsb2NhbC5tUG9zaXRpb25baV0pOwogICAgICAgICAgICAgLy8gY2hlY2sgZHJhaW4gc3RhdGUgZnJvbSB0aGUgbGF0ZXN0IHN0YWdlIGluIHRoZSBwaXBlbGluZS4KICAgICAgICAgICAgIGlmICghY2hlY2tlZCAmJiBpIDw9IEV4dGVuZGVkVGltZXN0YW1wOjpMT0NBVElPTl9LRVJORUwpIHsKLSAgICAgICAgICAgICAgICBtQXVkaW9UcmFja1NlcnZlclByb3h5LT5zZXREcmFpbmVkKAotICAgICAgICAgICAgICAgICAgICAgICAgbG9jYWwubVBvc2l0aW9uW2ldID49IG1BdWRpb1RyYWNrU2VydmVyUHJveHktPmZyYW1lc1JlbGVhc2VkKCkpOworICAgICAgICAgICAgICAgIGRyYWluZWQgPSBsb2NhbC5tUG9zaXRpb25baV0gPj0gbUF1ZGlvVHJhY2tTZXJ2ZXJQcm94eS0+ZnJhbWVzUmVsZWFzZWQoKTsKICAgICAgICAgICAgICAgICBjaGVja2VkID0gdHJ1ZTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgIH0KLSAgICBpZiAoIWNoZWNrZWQpIHsgLy8gbm8gc2VydmVyIGluZm8sIGFzc3VtZSBkcmFpbmVkLgotICAgICAgICBtQXVkaW9UcmFja1NlcnZlclByb3h5LT5zZXREcmFpbmVkKHRydWUpOwotICAgIH0KKworICAgIG1BdWRpb1RyYWNrU2VydmVyUHJveHktPnNldERyYWluZWQoZHJhaW5lZCk7CiAgICAgLy8gU2V0IGNvcnJlY3Rpb24gZm9yIGZsdXNoZWQgZnJhbWVzIHRoYXQgYXJlIG5vdCBhY2NvdW50ZWQgZm9yIGluIHJlbGVhc2VkLgogICAgIGxvY2FsLm1GbHVzaGVkID0gbUF1ZGlvVHJhY2tTZXJ2ZXJQcm94eS0+ZnJhbWVzRmx1c2hlZCgpOwogICAgIG1TZXJ2ZXJQcm94eS0+c2V0VGltZXN0YW1wKGxvY2FsKTsKKworICAgIC8vIENvbXB1dGUgbGF0ZW5jeSBpbmZvLgorICAgIGNvbnN0IGJvb2wgdXNlVHJhY2tUaW1lc3RhbXAgPSAhZHJhaW5lZDsKKyAgICBjb25zdCBkb3VibGUgbGF0ZW5jeU1zID0gdXNlVHJhY2tUaW1lc3RhbXAKKyAgICAgICAgICAgID8gbG9jYWwuZ2V0T3V0cHV0U2VydmVyTGF0ZW5jeU1zKHNhbXBsZVJhdGUoKSkKKyAgICAgICAgICAgIDogdGltZVN0YW1wLmdldE91dHB1dFNlcnZlckxhdGVuY3lNcyhoYWxTYW1wbGVSYXRlKTsKKworICAgIG1TZXJ2ZXJMYXRlbmN5RnJvbVRyYWNrLnN0b3JlKHVzZVRyYWNrVGltZXN0YW1wKTsKKyAgICBtU2VydmVyTGF0ZW5jeU1zLnN0b3JlKGxhdGVuY3lNcyk7CiB9CiAKIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyN1bmRlZiBMT0dfVEFHCisjZGVmaW5lIExPR19UQUcgIkFGOjpPdXRwdXRUcmFjayIKIAogQXVkaW9GbGluZ2VyOjpQbGF5YmFja1RocmVhZDo6T3V0cHV0VHJhY2s6Ok91dHB1dFRyYWNrKAogICAgICAgICAgICAgUGxheWJhY2tUaHJlYWQgKnBsYXliYWNrVGhyZWFkLApAQCAtMTI5OSw5ICsxMzQyLDkgQEAKICAgICBpZiAobUNibGsgIT0gTlVMTCkgewogICAgICAgICBtT3V0QnVmZmVyLmZyYW1lQ291bnQgPSAwOwogICAgICAgICBwbGF5YmFja1RocmVhZC0+bVRyYWNrcy5hZGQodGhpcyk7Ci0gICAgICAgIEFMT0dWKCJPdXRwdXRUcmFjayBjb25zdHJ1Y3RvciBtQ2JsayAlcCwgbUJ1ZmZlciAlcCwgIgorICAgICAgICBBTE9HVigiJXMoKTogbUNibGsgJXAsIG1CdWZmZXIgJXAsICIKICAgICAgICAgICAgICAgICAiZnJhbWVDb3VudCAlenUsIG1DaGFubmVsTWFzayAweCUwOHgiLAotICAgICAgICAgICAgICAgIG1DYmxrLCBtQnVmZmVyLAorICAgICAgICAgICAgICAgIF9fZnVuY19fLCBtQ2JsaywgbUJ1ZmZlciwKICAgICAgICAgICAgICAgICBmcmFtZUNvdW50LCBtQ2hhbm5lbE1hc2spOwogICAgICAgICAvLyBzaW5jZSBjbGllbnQgYW5kIHNlcnZlciBhcmUgaW4gdGhlIHNhbWUgcHJvY2VzcywKICAgICAgICAgLy8gdGhlIGJ1ZmZlciBoYXMgdGhlIHNhbWUgdmlydHVhbCBhZGRyZXNzIG9uIGJvdGggc2lkZXMKQEAgLTEzMTEsNyArMTM1NCw4IEBACiAgICAgICAgIG1DbGllbnRQcm94eS0+c2V0U2VuZExldmVsKDAuMCk7CiAgICAgICAgIG1DbGllbnRQcm94eS0+c2V0U2FtcGxlUmF0ZShzYW1wbGVSYXRlKTsKICAgICB9IGVsc2UgewotICAgICAgICBBTE9HVygiRXJyb3IgY3JlYXRpbmcgb3V0cHV0IHRyYWNrIG9uIHRocmVhZCAlcCIsIHBsYXliYWNrVGhyZWFkKTsKKyAgICAgICAgQUxPR1coIiVzKCVkKTogRXJyb3IgY3JlYXRpbmcgb3V0cHV0IHRyYWNrIG9uIHRocmVhZCAlZCIsCisgICAgICAgICAgICAgICAgX19mdW5jX18sIG1JZCwgKGludCltVGhyZWFkSW9IYW5kbGUpOwogICAgIH0KIH0KIApAQCAtMTM0Miw3ICsxMzg2LDcgQEAKICAgICBtQWN0aXZlID0gZmFsc2U7CiB9CiAKLWJvb2wgQXVkaW9GbGluZ2VyOjpQbGF5YmFja1RocmVhZDo6T3V0cHV0VHJhY2s6OndyaXRlKHZvaWQqIGRhdGEsIHVpbnQzMl90IGZyYW1lcykKK3NzaXplX3QgQXVkaW9GbGluZ2VyOjpQbGF5YmFja1RocmVhZDo6T3V0cHV0VHJhY2s6OndyaXRlKHZvaWQqIGRhdGEsIHVpbnQzMl90IGZyYW1lcykKIHsKICAgICBCdWZmZXIgKnBJbkJ1ZmZlcjsKICAgICBCdWZmZXIgaW5CdWZmZXI7CkBAIC0xMzczLDggKzE0MTcsOSBAQAogICAgICAgICAgICAgbnNlY3NfdCBzdGFydFRpbWUgPSBzeXN0ZW1UaW1lKCk7CiAgICAgICAgICAgICBzdGF0dXNfdCBzdGF0dXMgPSBvYnRhaW5CdWZmZXIoJm1PdXRCdWZmZXIsIHdhaXRUaW1lTGVmdE1zKTsKICAgICAgICAgICAgIGlmIChzdGF0dXMgIT0gTk9fRVJST1IgJiYgc3RhdHVzICE9IE5PVF9FTk9VR0hfREFUQSkgewotICAgICAgICAgICAgICAgIEFMT0dWKCJPdXRwdXRUcmFjazo6d3JpdGUoKSAlcCB0aHJlYWQgJXAgbm8gbW9yZSBvdXRwdXQgYnVmZmVyczsgc3RhdHVzICVkIiwgdGhpcywKLSAgICAgICAgICAgICAgICAgICAgICAgIG1UaHJlYWQudW5zYWZlX2dldCgpLCBzdGF0dXMpOworICAgICAgICAgICAgICAgIEFMT0dWKCIlcyglZCk6IHRocmVhZCAlZCBubyBtb3JlIG91dHB1dCBidWZmZXJzOyBzdGF0dXMgJWQiLAorICAgICAgICAgICAgICAgICAgICAgICAgX19mdW5jX18sIG1JZCwKKyAgICAgICAgICAgICAgICAgICAgICAgIChpbnQpbVRocmVhZElvSGFuZGxlLCBzdGF0dXMpOwogICAgICAgICAgICAgICAgIG91dHB1dEJ1ZmZlckZ1bGwgPSB0cnVlOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQpAQCAtMTQxMCw4ICsxNDU1LDkgQEAKICAgICAgICAgICAgICAgICBpZiAocEluQnVmZmVyICE9ICZpbkJ1ZmZlcikgewogICAgICAgICAgICAgICAgICAgICBkZWxldGUgcEluQnVmZmVyOwogICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBBTE9HVigiT3V0cHV0VHJhY2s6OndyaXRlKCkgJXAgdGhyZWFkICVwIHJlbGVhc2VkIG92ZXJmbG93IGJ1ZmZlciAlenUiLCB0aGlzLAotICAgICAgICAgICAgICAgICAgICAgICAgbVRocmVhZC51bnNhZmVfZ2V0KCksIG1CdWZmZXJRdWV1ZS5zaXplKCkpOworICAgICAgICAgICAgICAgIEFMT0dWKCIlcyglZCk6IHRocmVhZCAlZCByZWxlYXNlZCBvdmVyZmxvdyBidWZmZXIgJXp1IiwKKyAgICAgICAgICAgICAgICAgICAgICAgIF9fZnVuY19fLCBtSWQsCisgICAgICAgICAgICAgICAgICAgICAgICAoaW50KW1UaHJlYWRJb0hhbmRsZSwgbUJ1ZmZlclF1ZXVlLnNpemUoKSk7CiAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQpAQCAtMTQyOSwxMSArMTQ3NSwxNCBAQAogICAgICAgICAgICAgICAgIHBJbkJ1ZmZlci0+cmF3ID0gcEluQnVmZmVyLT5tQnVmZmVyOwogICAgICAgICAgICAgICAgIG1lbWNweShwSW5CdWZmZXItPnJhdywgaW5CdWZmZXIucmF3LCBpbkJ1ZmZlci5mcmFtZUNvdW50ICogbUZyYW1lU2l6ZSk7CiAgICAgICAgICAgICAgICAgbUJ1ZmZlclF1ZXVlLmFkZChwSW5CdWZmZXIpOwotICAgICAgICAgICAgICAgIEFMT0dWKCJPdXRwdXRUcmFjazo6d3JpdGUoKSAlcCB0aHJlYWQgJXAgYWRkaW5nIG92ZXJmbG93IGJ1ZmZlciAlenUiLCB0aGlzLAotICAgICAgICAgICAgICAgICAgICAgICAgbVRocmVhZC51bnNhZmVfZ2V0KCksIG1CdWZmZXJRdWV1ZS5zaXplKCkpOworICAgICAgICAgICAgICAgIEFMT0dWKCIlcyglZCk6IHRocmVhZCAlZCBhZGRpbmcgb3ZlcmZsb3cgYnVmZmVyICV6dSIsIF9fZnVuY19fLCBtSWQsCisgICAgICAgICAgICAgICAgICAgICAgICAoaW50KW1UaHJlYWRJb0hhbmRsZSwgbUJ1ZmZlclF1ZXVlLnNpemUoKSk7CisgICAgICAgICAgICAgICAgLy8gYXVkaW8gZGF0YSBpcyBjb25zdW1lZCAoc3RvcmVkIGxvY2FsbHkpOyBzZXQgZnJhbWVDb3VudCB0byAwLgorICAgICAgICAgICAgICAgIGluQnVmZmVyLmZyYW1lQ291bnQgPSAwOwogICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICBBTE9HVygiT3V0cHV0VHJhY2s6OndyaXRlKCkgJXAgdGhyZWFkICVwIG5vIG1vcmUgb3ZlcmZsb3cgYnVmZmVycyIsCi0gICAgICAgICAgICAgICAgICAgICAgICBtVGhyZWFkLnVuc2FmZV9nZXQoKSwgdGhpcyk7CisgICAgICAgICAgICAgICAgQUxPR1coIiVzKCVkKTogdGhyZWFkICVkIG5vIG1vcmUgb3ZlcmZsb3cgYnVmZmVycyIsCisgICAgICAgICAgICAgICAgICAgICAgICBfX2Z1bmNfXywgbUlkLCAoaW50KW1UaHJlYWRJb0hhbmRsZSk7CisgICAgICAgICAgICAgICAgLy8gVE9ETzogcmV0dXJuIGVycm9yIGZvciB0aGlzLgogICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgfQpAQCAtMTQ0NCw3ICsxNDkzLDcgQEAKICAgICAgICAgc3RvcCgpOwogICAgIH0KIAotICAgIHJldHVybiBvdXRwdXRCdWZmZXJGdWxsOworICAgIHJldHVybiBmcmFtZXMgLSBpbkJ1ZmZlci5mcmFtZUNvdW50OyAgLy8gbnVtYmVyIG9mIGZyYW1lcyBjb25zdW1lZC4KIH0KIAogdm9pZCBBdWRpb0ZsaW5nZXI6OlBsYXliYWNrVGhyZWFkOjpPdXRwdXRUcmFjazo6Y29weU1ldGFkYXRhVG8oTWV0YWRhdGFJbnNlcnRlciYgYmFja0luc2VydGVyKSBjb25zdApAQCAtMTQ5Niw2ICsxNTQ1LDEwIEBACiAgICAgfQogfQogCisvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjdW5kZWYgTE9HX1RBRworI2RlZmluZSBMT0dfVEFHICJBRjo6UGF0Y2hUcmFjayIKKwogQXVkaW9GbGluZ2VyOjpQbGF5YmFja1RocmVhZDo6UGF0Y2hUcmFjazo6UGF0Y2hUcmFjayhQbGF5YmFja1RocmVhZCAqcGxheWJhY2tUaHJlYWQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF1ZGlvX3N0cmVhbV90eXBlX3Qgc3RyZWFtVHlwZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3Qgc2FtcGxlUmF0ZSwKQEAgLTE1MDksNyArMTU2Miw3IEBACiAgICAgICAgICAgICAgIGF1ZGlvX2F0dHJpYnV0ZXNfdHt9IC8qIGN1cnJlbnRseSB1bnVzZWQgZm9yIHBhdGNoIHRyYWNrICovLAogICAgICAgICAgICAgICBzYW1wbGVSYXRlLCBmb3JtYXQsIGNoYW5uZWxNYXNrLCBmcmFtZUNvdW50LAogICAgICAgICAgICAgICBidWZmZXIsIGJ1ZmZlclNpemUsIG51bGxwdHIgLyogc2hhcmVkQnVmZmVyICovLAotICAgICAgICAgICAgICBBVURJT19TRVNTSU9OX05PTkUsIGdldHVpZCgpLCBmbGFncywgVFlQRV9QQVRDSCksCisgICAgICAgICAgICAgIEFVRElPX1NFU1NJT05fTk9ORSwgQUlEX0FVRElPU0VSVkVSLCBmbGFncywgVFlQRV9QQVRDSCksCiAgICAgICAgICAgICAgIG1Qcm94eShuZXcgQ2xpZW50UHJveHkobUNibGssIG1CdWZmZXIsIGZyYW1lQ291bnQsIG1GcmFtZVNpemUsIHRydWUsIHRydWUpKQogewogICAgIHVpbnQ2NF90IG1peEJ1ZmZlck5zID0gKCh1aW50NjRfdCkyICogcGxheWJhY2tUaHJlYWQtPmZyYW1lQ291bnQoKSAqIDEwMDAwMDAwMDApIC8KQEAgLTE1MTcsOCArMTU3MCw4IEBACiAgICAgbVBlZXJUaW1lb3V0LnR2X3NlYyA9IG1peEJ1ZmZlck5zIC8gMTAwMDAwMDAwMDsKICAgICBtUGVlclRpbWVvdXQudHZfbnNlYyA9IChpbnQpIChtaXhCdWZmZXJOcyAlIDEwMDAwMDAwMDApOwogCi0gICAgQUxPR1YoIlBhdGNoVHJhY2sgJXAgc2FtcGxlUmF0ZSAlZCBtUGVlclRpbWVvdXQgJWQuJTAzZCBzZWMiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLCBzYW1wbGVSYXRlLAorICAgIEFMT0dWKCIlcyglZCk6IHNhbXBsZVJhdGUgJWQgbVBlZXJUaW1lb3V0ICVkLiUwM2Qgc2VjIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19mdW5jX18sIG1JZCwgc2FtcGxlUmF0ZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGludCltUGVlclRpbWVvdXQudHZfc2VjLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoaW50KShtUGVlclRpbWVvdXQudHZfbnNlYyAvIDEwMDAwMDApKTsKIH0KQEAgLTE1MjgsNyArMTU4MSw3IEBACiB9CiAKIHN0YXR1c190IEF1ZGlvRmxpbmdlcjo6UGxheWJhY2tUaHJlYWQ6OlBhdGNoVHJhY2s6OnN0YXJ0KEF1ZGlvU3lzdGVtOjpzeW5jX2V2ZW50X3QgZXZlbnQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXVkaW9fc2Vzc2lvbl90IHRyaWdnZXJTZXNzaW9uKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXVkaW9fc2Vzc2lvbl90IHRyaWdnZXJTZXNzaW9uKQogewogICAgIHN0YXR1c190IHN0YXR1cyA9IFRyYWNrOjpzdGFydChldmVudCwgdHJpZ2dlclNlc3Npb24pOwogICAgIGlmIChzdGF0dXMgIT0gTk9fRVJST1IpIHsKQEAgLTE1NDIsMTEgKzE1OTUsMTEgQEAKIHN0YXR1c190IEF1ZGlvRmxpbmdlcjo6UGxheWJhY2tUaHJlYWQ6OlBhdGNoVHJhY2s6OmdldE5leHRCdWZmZXIoCiAgICAgICAgIEF1ZGlvQnVmZmVyUHJvdmlkZXI6OkJ1ZmZlciogYnVmZmVyKQogewotICAgIEFMT0dfQVNTRVJUKG1QZWVyUHJveHkgIT0gMCwgIlBhdGNoVHJhY2s6OmdldE5leHRCdWZmZXIoKSBjYWxsZWQgd2l0aG91dCBwZWVyIHByb3h5Iik7CisgICAgQUxPR19BU1NFUlQobVBlZXJQcm94eSAhPSAwLCAiJXMoJWQpOiBjYWxsZWQgd2l0aG91dCBwZWVyIHByb3h5IiwgX19mdW5jX18sIG1JZCk7CiAgICAgUHJveHk6OkJ1ZmZlciBidWY7CiAgICAgYnVmLm1GcmFtZUNvdW50ID0gYnVmZmVyLT5mcmFtZUNvdW50OwogICAgIHN0YXR1c190IHN0YXR1cyA9IG1QZWVyUHJveHktPm9idGFpbkJ1ZmZlcigmYnVmLCAmbVBlZXJUaW1lb3V0KTsKLSAgICBBTE9HVl9JRihzdGF0dXMgIT0gTk9fRVJST1IsICJQYXRjaFRyYWNrKCkgJXAgZ2V0TmV4dEJ1ZmZlciBzdGF0dXMgJWQiLCB0aGlzLCBzdGF0dXMpOworICAgIEFMT0dWX0lGKHN0YXR1cyAhPSBOT19FUlJPUiwgIiVzKCVkKTogZ2V0TmV4dEJ1ZmZlciBzdGF0dXMgJWQiLCBfX2Z1bmNfXywgbUlkLCBzdGF0dXMpOwogICAgIGJ1ZmZlci0+ZnJhbWVDb3VudCA9IGJ1Zi5tRnJhbWVDb3VudDsKICAgICBpZiAoYnVmLm1GcmFtZUNvdW50ID09IDApIHsKICAgICAgICAgcmV0dXJuIFdPVUxEX0JMT0NLOwpAQCAtMTU1Nyw3ICsxNjEwLDcgQEAKIAogdm9pZCBBdWRpb0ZsaW5nZXI6OlBsYXliYWNrVGhyZWFkOjpQYXRjaFRyYWNrOjpyZWxlYXNlQnVmZmVyKEF1ZGlvQnVmZmVyUHJvdmlkZXI6OkJ1ZmZlciogYnVmZmVyKQogewotICAgIEFMT0dfQVNTRVJUKG1QZWVyUHJveHkgIT0gMCwgIlBhdGNoVHJhY2s6OnJlbGVhc2VCdWZmZXIoKSBjYWxsZWQgd2l0aG91dCBwZWVyIHByb3h5Iik7CisgICAgQUxPR19BU1NFUlQobVBlZXJQcm94eSAhPSAwLCAiJXMoJWQpOiBjYWxsZWQgd2l0aG91dCBwZWVyIHByb3h5IiwgX19mdW5jX18sIG1JZCk7CiAgICAgUHJveHk6OkJ1ZmZlciBidWY7CiAgICAgYnVmLm1GcmFtZUNvdW50ID0gYnVmZmVyLT5mcmFtZUNvdW50OwogICAgIGJ1Zi5tUmF3ID0gYnVmZmVyLT5yYXc7CkBAIC0xNTkyLDcgKzE2NDUsNyBAQAogdm9pZCBBdWRpb0ZsaW5nZXI6OlBsYXliYWNrVGhyZWFkOjpQYXRjaFRyYWNrOjpyZXN0YXJ0SWZEaXNhYmxlZCgpCiB7CiAgICAgaWYgKGFuZHJvaWRfYXRvbWljX2FuZCh+Q0JMS19ESVNBQkxFRCwgJm1DYmxrLT5tRmxhZ3MpICYgQ0JMS19ESVNBQkxFRCkgewotICAgICAgICBBTE9HVygiUGF0Y2hUcmFjazo6cmVsZWFzZUJ1ZmZlcigpIGRpc2FibGVkIGR1ZSB0byBwcmV2aW91cyB1bmRlcnJ1biwgcmVzdGFydGluZyIpOworICAgICAgICBBTE9HVygiJXMoJWQpOiBkaXNhYmxlZCBkdWUgdG8gcHJldmlvdXMgdW5kZXJydW4sIHJlc3RhcnRpbmciLCBfX2Z1bmNfXywgbUlkKTsKICAgICAgICAgc3RhcnQoKTsKICAgICB9CiB9CkBAIC0xNjAwLDYgKzE2NTMsOCBAQAogLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogLy8gICAgICBSZWNvcmQKIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyN1bmRlZiBMT0dfVEFHCisjZGVmaW5lIExPR19UQUcgIkFGOjpSZWNvcmRIYW5kbGUiCiAKIEF1ZGlvRmxpbmdlcjo6UmVjb3JkSGFuZGxlOjpSZWNvcmRIYW5kbGUoCiAgICAgICAgIGNvbnN0IHNwPEF1ZGlvRmxpbmdlcjo6UmVjb3JkVGhyZWFkOjpSZWNvcmRUcmFjaz4mIHJlY29yZFRyYWNrKQpAQCAtMTYxNSw3ICsxNjcwLDcgQEAKIAogYmluZGVyOjpTdGF0dXMgQXVkaW9GbGluZ2VyOjpSZWNvcmRIYW5kbGU6OnN0YXJ0KGludCAvKkF1ZGlvU3lzdGVtOjpzeW5jX2V2ZW50X3QqLyBldmVudCwKICAgICAgICAgaW50IC8qYXVkaW9fc2Vzc2lvbl90Ki8gdHJpZ2dlclNlc3Npb24pIHsKLSAgICBBTE9HVigiUmVjb3JkSGFuZGxlOjpzdGFydCgpIik7CisgICAgQUxPR1YoIiVzKCkiLCBfX2Z1bmNfXyk7CiAgICAgcmV0dXJuIGJpbmRlcjo6U3RhdHVzOjpmcm9tU3RhdHVzVCgKICAgICAgICAgbVJlY29yZFRyYWNrLT5zdGFydCgoQXVkaW9TeXN0ZW06OnN5bmNfZXZlbnRfdClldmVudCwgKGF1ZGlvX3Nlc3Npb25fdCkgdHJpZ2dlclNlc3Npb24pKTsKIH0KQEAgLTE2MjYsMTggKzE2ODEsMjAgQEAKIH0KIAogdm9pZCBBdWRpb0ZsaW5nZXI6OlJlY29yZEhhbmRsZTo6c3RvcF9ub252aXJ0dWFsKCkgewotICAgIEFMT0dWKCJSZWNvcmRIYW5kbGU6OnN0b3AoKSIpOworICAgIEFMT0dWKCIlcygpIiwgX19mdW5jX18pOwogICAgIG1SZWNvcmRUcmFjay0+c3RvcCgpOwogfQogCiBiaW5kZXI6OlN0YXR1cyBBdWRpb0ZsaW5nZXI6OlJlY29yZEhhbmRsZTo6Z2V0QWN0aXZlTWljcm9waG9uZXMoCiAgICAgICAgIHN0ZDo6dmVjdG9yPG1lZGlhOjpNaWNyb3Bob25lSW5mbz4qIGFjdGl2ZU1pY3JvcGhvbmVzKSB7Ci0gICAgQUxPR1YoIlJlY29yZEhhbmRsZTo6Z2V0QWN0aXZlTWljcm9waG9uZXMoKSIpOworICAgIEFMT0dWKCIlcygpIiwgX19mdW5jX18pOwogICAgIHJldHVybiBiaW5kZXI6OlN0YXR1czo6ZnJvbVN0YXR1c1QoCiAgICAgICAgICAgICBtUmVjb3JkVHJhY2stPmdldEFjdGl2ZU1pY3JvcGhvbmVzKGFjdGl2ZU1pY3JvcGhvbmVzKSk7CiB9CiAKIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyN1bmRlZiBMT0dfVEFHCisjZGVmaW5lIExPR19UQUcgIkFGOjpSZWNvcmRUcmFjayIKIAogLy8gUmVjb3JkVHJhY2sgY29uc3RydWN0b3IgbXVzdCBiZSBjYWxsZWQgd2l0aCBBdWRpb0ZsaW5nZXI6Om1Mb2NrIGFuZCBUaHJlYWRCYXNlOjptTG9jayBoZWxkCiBBdWRpb0ZsaW5nZXI6OlJlY29yZFRocmVhZDo6UmVjb3JkVHJhY2s6OlJlY29yZFRyYWNrKApAQCAtMTY3MiwxOCArMTcyOSwyMCBAQAogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgbVJlY29yZEJ1ZmZlckNvbnZlcnRlciA9IG5ldyBSZWNvcmRCdWZmZXJDb252ZXJ0ZXIoCi0gICAgICAgICAgICB0aHJlYWQtPm1DaGFubmVsTWFzaywgdGhyZWFkLT5tRm9ybWF0LCB0aHJlYWQtPm1TYW1wbGVSYXRlLAotICAgICAgICAgICAgY2hhbm5lbE1hc2ssIGZvcm1hdCwgc2FtcGxlUmF0ZSk7Ci0gICAgLy8gQ2hlY2sgaWYgdGhlIFJlY29yZEJ1ZmZlckNvbnZlcnRlciBjb25zdHJ1Y3Rpb24gd2FzIHN1Y2Nlc3NmdWwuCi0gICAgLy8gSWYgbm90LCBkb24ndCBjb250aW51ZSB3aXRoIGNvbnN0cnVjdGlvbi4KLSAgICAvLwotICAgIC8vIE5PVEU6IEl0IHdvdWxkIGJlIGV4dHJlbWVseSByYXJlIHRoYXQgdGhlIHJlY29yZCB0cmFjayBjYW5ub3QgYmUgY3JlYXRlZAotICAgIC8vIGZvciB0aGUgY3VycmVudCBkZXZpY2UsIGJ1dCBhIHBlbmRpbmcgb3IgZnV0dXJlIGRldmljZSBjaGFuZ2Ugd291bGQgbWFrZQotICAgIC8vIHRoZSByZWNvcmQgdHJhY2sgY29uZmlndXJhdGlvbiB2YWxpZC4KLSAgICBpZiAobVJlY29yZEJ1ZmZlckNvbnZlcnRlci0+aW5pdENoZWNrKCkgIT0gTk9fRVJST1IpIHsKLSAgICAgICAgQUxPR0UoIlJlY29yZFRyYWNrIHVuYWJsZSB0byBjcmVhdGUgcmVjb3JkIGJ1ZmZlciBjb252ZXJ0ZXIiKTsKLSAgICAgICAgcmV0dXJuOworICAgIGlmICghaXNEaXJlY3QoKSkgeworICAgICAgICBtUmVjb3JkQnVmZmVyQ29udmVydGVyID0gbmV3IFJlY29yZEJ1ZmZlckNvbnZlcnRlcigKKyAgICAgICAgICAgICAgICB0aHJlYWQtPm1DaGFubmVsTWFzaywgdGhyZWFkLT5tRm9ybWF0LCB0aHJlYWQtPm1TYW1wbGVSYXRlLAorICAgICAgICAgICAgICAgIGNoYW5uZWxNYXNrLCBmb3JtYXQsIHNhbXBsZVJhdGUpOworICAgICAgICAvLyBDaGVjayBpZiB0aGUgUmVjb3JkQnVmZmVyQ29udmVydGVyIGNvbnN0cnVjdGlvbiB3YXMgc3VjY2Vzc2Z1bC4KKyAgICAgICAgLy8gSWYgbm90LCBkb24ndCBjb250aW51ZSB3aXRoIGNvbnN0cnVjdGlvbi4KKyAgICAgICAgLy8KKyAgICAgICAgLy8gTk9URTogSXQgd291bGQgYmUgZXh0cmVtZWx5IHJhcmUgdGhhdCB0aGUgcmVjb3JkIHRyYWNrIGNhbm5vdCBiZSBjcmVhdGVkCisgICAgICAgIC8vIGZvciB0aGUgY3VycmVudCBkZXZpY2UsIGJ1dCBhIHBlbmRpbmcgb3IgZnV0dXJlIGRldmljZSBjaGFuZ2Ugd291bGQgbWFrZQorICAgICAgICAvLyB0aGUgcmVjb3JkIHRyYWNrIGNvbmZpZ3VyYXRpb24gdmFsaWQuCisgICAgICAgIGlmIChtUmVjb3JkQnVmZmVyQ29udmVydGVyLT5pbml0Q2hlY2soKSAhPSBOT19FUlJPUikgeworICAgICAgICAgICAgQUxPR0UoIiVzKCVkKTogUmVjb3JkVHJhY2sgdW5hYmxlIHRvIGNyZWF0ZSByZWNvcmQgYnVmZmVyIGNvbnZlcnRlciIsIF9fZnVuY19fLCBtSWQpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CiAgICAgfQogCiAgICAgbVNlcnZlclByb3h5ID0gbmV3IEF1ZGlvUmVjb3JkU2VydmVyUHJveHkobUNibGssIG1CdWZmZXIsIGZyYW1lQ291bnQsCkBAIC0xNjk0LDEyICsxNzUzLDIwIEBACiAgICAgaWYgKGZsYWdzICYgQVVESU9fSU5QVVRfRkxBR19GQVNUKSB7CiAgICAgICAgIEFMT0dfQVNTRVJUKHRocmVhZC0+bUZhc3RUcmFja0F2YWlsKTsKICAgICAgICAgdGhyZWFkLT5tRmFzdFRyYWNrQXZhaWwgPSBmYWxzZTsKKyAgICB9IGVsc2UgeworICAgICAgICAvLyBUT0RPOiBvbmx5IE5vcm1hbCBSZWNvcmQgaGFzIHRpbWVzdGFtcHMgKEZhc3QgUmVjb3JkIGRvZXMgbm90KS4KKyAgICAgICAgbVNlcnZlckxhdGVuY3lTdXBwb3J0ZWQgPSBhdWRpb19pc19saW5lYXJfcGNtKG1Gb3JtYXQpOwogICAgIH0KKyNpZmRlZiBURUVfU0lOSworICAgIG1UZWUuc2V0SWQoc3RkOjpzdHJpbmcoIl8iKSArIHN0ZDo6dG9fc3RyaW5nKG1UaHJlYWRJb0hhbmRsZSkKKyAgICAgICAgICAgICsgIl8iICsgc3RkOjp0b19zdHJpbmcobUlkKQorICAgICAgICAgICAgKyAiX1IiKTsKKyNlbmRpZgogfQogCiBBdWRpb0ZsaW5nZXI6OlJlY29yZFRocmVhZDo6UmVjb3JkVHJhY2s6On5SZWNvcmRUcmFjaygpCiB7Ci0gICAgQUxPR1YoIiVzIiwgX19mdW5jX18pOworICAgIEFMT0dWKCIlcygpIiwgX19mdW5jX18pOwogICAgIGRlbGV0ZSBtUmVjb3JkQnVmZmVyQ29udmVydGVyOwogICAgIGRlbGV0ZSBtUmVzYW1wbGVyQnVmZmVyUHJvdmlkZXI7CiB9CkBAIC0xNzU2LDE3ICsxODIzLDM0IEBACiAgICAgLy8gc2VlIGNvbW1lbnRzIGF0IEF1ZGlvRmxpbmdlcjo6UGxheWJhY2tUaHJlYWQ6OlRyYWNrOjpkZXN0cm95KCkKICAgICBzcDxSZWNvcmRUcmFjaz4ga2VlcCh0aGlzKTsKICAgICB7Ci0gICAgICAgIGlmIChpc0V4dGVybmFsVHJhY2soKSkgewotICAgICAgICAgICAgaWYgKG1TdGF0ZSA9PSBBQ1RJVkUgfHwgbVN0YXRlID09IFJFU1VNSU5HKSB7Ci0gICAgICAgICAgICAgICAgQXVkaW9TeXN0ZW06OnN0b3BJbnB1dChtUG9ydElkKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIEF1ZGlvU3lzdGVtOjpyZWxlYXNlSW5wdXQobVBvcnRJZCk7Ci0gICAgICAgIH0KKyAgICAgICAgdHJhY2tfc3RhdGUgcHJpb3JTdGF0ZSA9IG1TdGF0ZTsKICAgICAgICAgc3A8VGhyZWFkQmFzZT4gdGhyZWFkID0gbVRocmVhZC5wcm9tb3RlKCk7CiAgICAgICAgIGlmICh0aHJlYWQgIT0gMCkgewogICAgICAgICAgICAgTXV0ZXg6OkF1dG9sb2NrIF9sKHRocmVhZC0+bUxvY2spOwogICAgICAgICAgICAgUmVjb3JkVGhyZWFkICpyZWNvcmRUaHJlYWQgPSAoUmVjb3JkVGhyZWFkICopIHRocmVhZC5nZXQoKTsKLSAgICAgICAgICAgIHJlY29yZFRocmVhZC0+ZGVzdHJveVRyYWNrX2wodGhpcyk7CisgICAgICAgICAgICBwcmlvclN0YXRlID0gbVN0YXRlOworICAgICAgICAgICAgcmVjb3JkVGhyZWFkLT5kZXN0cm95VHJhY2tfbCh0aGlzKTsgLy8gbW92ZSBtU3RhdGUgdG8gU1RPUFBFRCwgdGVybWluYXRlCisgICAgICAgIH0KKyAgICAgICAgLy8gQVBNIHBvcnRpZC9jbGllbnQgbWFuYWdlbWVudCBkb25lIG91dHNpZGUgb2YgbG9jay4KKyAgICAgICAgLy8gTk9URTogaWYgdGhyZWFkIGRvZXNuJ3QgZXhpc3QsIHRoZSBpbnB1dCBkZXNjcmlwdG9yIHByb2JhYmx5IGRvZXNuJ3QgZWl0aGVyLgorICAgICAgICBpZiAoaXNFeHRlcm5hbFRyYWNrKCkpIHsKKyAgICAgICAgICAgIHN3aXRjaCAocHJpb3JTdGF0ZSkgeworICAgICAgICAgICAgY2FzZSBBQ1RJVkU6ICAgICAvLyBpbnZhbGlkYXRlZCB3aGlsZSBzdGlsbCBhY3RpdmUKKyAgICAgICAgICAgIGNhc2UgU1RBUlRJTkdfMjogLy8gaW52YWxpZGF0ZWQvc3RhcnQtYWJvcnRlZCBhZnRlciBzdGFydElucHV0IHN1Y2Nlc3NmdWxseSBjYWxsZWQKKyAgICAgICAgICAgIGNhc2UgUEFVU0lORzogICAgLy8gaW52YWxpZGF0ZWQgd2hpbGUgaW4gdGhlIG1pZGRsZSBvZiBzdG9wKCkgcGF1c2luZyAoc3RpbGwgYWN0aXZlKQorICAgICAgICAgICAgICAgIEF1ZGlvU3lzdGVtOjpzdG9wSW5wdXQobVBvcnRJZCk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgIGNhc2UgU1RBUlRJTkdfMTogLy8gaW52YWxpZGF0ZWQvc3RhcnQtYWJvcnRlZCBhbmQgc3RhcnRJbnB1dCBub3Qgc3VjY2Vzc2Z1bAorICAgICAgICAgICAgY2FzZSBQQVVTRUQ6ICAgICAvLyBPSywgbm90IGFjdGl2ZQorICAgICAgICAgICAgY2FzZSBJRExFOiAgICAgICAvLyBPSywgbm90IGFjdGl2ZQorICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICBjYXNlIFNUT1BQRUQ6ICAgIC8vIHVuZXhwZWN0ZWQgKGRlc3Ryb3llZCkKKyAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgTE9HX0FMV0FZU19GQVRBTCgiJXMoJWQpOiBpbnZhbGlkIHByaW9yIHN0YXRlOiAlZCIsIF9fZnVuY19fLCBtSWQsIHByaW9yU3RhdGUpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgQXVkaW9TeXN0ZW06OnJlbGVhc2VJbnB1dChtUG9ydElkKTsKICAgICAgICAgfQogICAgIH0KIH0KQEAgLTE3ODMsMTkgKzE4NjcsMjMgQEAKIH0KIAogCi0vKnN0YXRpYyovIHZvaWQgQXVkaW9GbGluZ2VyOjpSZWNvcmRUaHJlYWQ6OlJlY29yZFRyYWNrOjphcHBlbmREdW1wSGVhZGVyKFN0cmluZzgmIHJlc3VsdCkKK3ZvaWQgQXVkaW9GbGluZ2VyOjpSZWNvcmRUaHJlYWQ6OlJlY29yZFRyYWNrOjphcHBlbmREdW1wSGVhZGVyKFN0cmluZzgmIHJlc3VsdCkKIHsKLSAgICByZXN1bHQuYXBwZW5kKCJBY3RpdmUgQ2xpZW50IFNlc3Npb24gUyAgRmxhZ3MgICBGb3JtYXQgQ2huIG1hc2sgIFNSYXRlICAgU2VydmVyIEZybUNudCBTaWxcbiIpOworICAgIHJlc3VsdC5hcHBlbmRGb3JtYXQoIkFjdGl2ZSAgICAgSWQgQ2xpZW50IFNlc3Npb24gUyAgRmxhZ3MgICIKKyAgICAgICAgICAgICAgICAgICAgICAgICIgRm9ybWF0IENobiBtYXNrICBTUmF0ZSBTb3VyY2UgICIKKyAgICAgICAgICAgICAgICAgICAgICAgICIgU2VydmVyIEZybUNudCBGcm1SZHkgU2lsJXNcbiIsCisgICAgICAgICAgICAgICAgICAgICAgICBpc1NlcnZlckxhdGVuY3lTdXBwb3J0ZWQoKSA/ICIgICBMYXRlbmN5IiA6ICIiKTsKIH0KIAogdm9pZCBBdWRpb0ZsaW5nZXI6OlJlY29yZFRocmVhZDo6UmVjb3JkVHJhY2s6OmFwcGVuZER1bXAoU3RyaW5nOCYgcmVzdWx0LCBib29sIGFjdGl2ZSkKIHsKLSAgICByZXN1bHQuYXBwZW5kRm9ybWF0KCIlYyU1cyAlNnUgJTd1ICUycyAweCUwM1ggIgotICAgICAgICAgICAgIiUwOFggJTA4WCAlNnUgIgotICAgICAgICAgICAgIiUwOFggJTZ6dSAlM2NcbiIsCisgICAgcmVzdWx0LmFwcGVuZEZvcm1hdCgiJWMlNXMgJTZkICU2dSAlN3UgJTJzIDB4JTAzWCAiCisgICAgICAgICAgICAiJTA4WCAlMDhYICU2dSAlNlggIgorICAgICAgICAgICAgIiUwOFggJTZ6dSAlNnp1ICUzYyIsCiAgICAgICAgICAgICBpc0Zhc3RUcmFjaygpID8gJ0YnIDogJyAnLAogICAgICAgICAgICAgYWN0aXZlID8gInllcyIgOiAibm8iLAotICAgICAgICAgICAgKG1DbGllbnQgPT0gMCkgPyBnZXRwaWRfY2FjaGVkIDogbUNsaWVudC0+cGlkKCksCisgICAgICAgICAgICBtSWQsCisgICAgICAgICAgICAobUNsaWVudCA9PSAwKSA/IGdldHBpZCgpIDogbUNsaWVudC0+cGlkKCksCiAgICAgICAgICAgICBtU2Vzc2lvbklkLAogICAgICAgICAgICAgZ2V0VHJhY2tTdGF0ZVN0cmluZygpLAogICAgICAgICAgICAgbUNibGstPm1GbGFncywKQEAgLTE4MDMsMTEgKzE4OTEsMjUgQEAKICAgICAgICAgICAgIG1Gb3JtYXQsCiAgICAgICAgICAgICBtQ2hhbm5lbE1hc2ssCiAgICAgICAgICAgICBtU2FtcGxlUmF0ZSwKKyAgICAgICAgICAgIG1BdHRyLnNvdXJjZSwKIAogICAgICAgICAgICAgbUNibGstPm1TZXJ2ZXIsCiAgICAgICAgICAgICBtRnJhbWVDb3VudCwKKyAgICAgICAgICAgIG1TZXJ2ZXJQcm94eS0+ZnJhbWVzUmVhZHlTYWZlKCksCiAgICAgICAgICAgICBpc1NpbGVuY2VkKCkgPyAncycgOiAnbicKICAgICAgICAgICAgICk7CisgICAgaWYgKGlzU2VydmVyTGF0ZW5jeVN1cHBvcnRlZCgpKSB7CisgICAgICAgIGRvdWJsZSBsYXRlbmN5TXM7CisgICAgICAgIGJvb2wgZnJvbVRyYWNrOworICAgICAgICBpZiAoZ2V0VHJhY2tMYXRlbmN5TXMoJmxhdGVuY3lNcywgJmZyb21UcmFjaykgPT0gT0spIHsKKyAgICAgICAgICAgIC8vIFNob3cgbGF0ZW5jeSBpbiBtc2VjLCBmb2xsb3dlZCBieSAndCcgaWYgZnJvbSB0cmFjayB0aW1lc3RhbXAgKHRoZSBtb3N0IGFjY3VyYXRlKQorICAgICAgICAgICAgLy8gb3IgJ2snIGlmIGVzdGltYXRlZCBmcm9tIGtlcm5lbCAodXN1YWxseSBmb3IgZGVidWdnaW5nKS4KKyAgICAgICAgICAgIHJlc3VsdC5hcHBlbmRGb3JtYXQoIiAlNy4ybGYgJWMiLCBsYXRlbmN5TXMsIGZyb21UcmFjayA/ICd0JyA6ICdrJyk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICByZXN1bHQuYXBwZW5kRm9ybWF0KCIlMTBzIiwgbUNibGstPm1TZXJ2ZXIgIT0gMCA/ICJ1bmF2YWlsIiA6ICJuZXciKTsKKyAgICAgICAgfQorICAgIH0KKyAgICByZXN1bHQuYXBwZW5kKCJcbiIpOwogfQogCiB2b2lkIEF1ZGlvRmxpbmdlcjo6UmVjb3JkVGhyZWFkOjpSZWNvcmRUcmFjazo6aGFuZGxlU3luY1N0YXJ0RXZlbnQoY29uc3Qgc3A8U3luY0V2ZW50PiYgZXZlbnQpCkBAIC0xODM3LDYgKzE5MzksMTYgQEAKICAgICAgICAgaW50NjRfdCB0cmFja0ZyYW1lc1JlbGVhc2VkLCBpbnQ2NF90IHNvdXJjZUZyYW1lc1JlYWQsCiAgICAgICAgIHVpbnQzMl90IGhhbFNhbXBsZVJhdGUsIGNvbnN0IEV4dGVuZGVkVGltZXN0YW1wICZ0aW1lc3RhbXApCiB7CisgICAvLyBNYWtlIHRoZSBrZXJuZWwgZnJhbWV0aW1lIGF2YWlsYWJsZS4KKyAgICBjb25zdCBGcmFtZVRpbWUgZnR7CisgICAgICAgICAgICB0aW1lc3RhbXAubVBvc2l0aW9uW0V4dGVuZGVkVGltZXN0YW1wOjpMT0NBVElPTl9LRVJORUxdLAorICAgICAgICAgICAgdGltZXN0YW1wLm1UaW1lTnNbRXh0ZW5kZWRUaW1lc3RhbXA6OkxPQ0FUSU9OX0tFUk5FTF19OworICAgIC8vIEFMT0dEKCJGcmFtZVRpbWU6ICVsbGQgJWxsZCIsIChsb25nIGxvbmcpZnQuZnJhbWVzLCAobG9uZyBsb25nKWZ0LnRpbWVOcyk7CisgICAgbUtlcm5lbEZyYW1lVGltZS5zdG9yZShmdCk7CisgICAgaWYgKCFhdWRpb19pc19saW5lYXJfcGNtKG1Gb3JtYXQpKSB7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKICAgICBFeHRlbmRlZFRpbWVzdGFtcCBsb2NhbCA9IHRpbWVzdGFtcDsKIAogICAgIC8vIENvbnZlcnQgSEFMIGZyYW1lcyB0byBzZXJ2ZXItc2lkZSB0cmFjayBmcmFtZXMgYXQgdHJhY2sgc2FtcGxlIHJhdGUuCkBAIC0xODUwLDYgKzE5NjIsMTUgQEAKICAgICAgICAgfQogICAgIH0KICAgICBtU2VydmVyUHJveHktPnNldFRpbWVzdGFtcChsb2NhbCk7CisKKyAgICAvLyBDb21wdXRlIGxhdGVuY3kgaW5mby4KKyAgICBjb25zdCBib29sIHVzZVRyYWNrVGltZXN0YW1wID0gdHJ1ZTsgLy8gdXNlIHRyYWNrIHVubGVzcyBkZWJ1Z2dpbmcuCisgICAgY29uc3QgZG91YmxlIGxhdGVuY3lNcyA9IC0gKHVzZVRyYWNrVGltZXN0YW1wCisgICAgICAgICAgICA/IGxvY2FsLmdldE91dHB1dFNlcnZlckxhdGVuY3lNcyhzYW1wbGVSYXRlKCkpCisgICAgICAgICAgICA6IHRpbWVzdGFtcC5nZXRPdXRwdXRTZXJ2ZXJMYXRlbmN5TXMoaGFsU2FtcGxlUmF0ZSkpOworCisgICAgbVNlcnZlckxhdGVuY3lGcm9tVHJhY2suc3RvcmUodXNlVHJhY2tUaW1lc3RhbXApOworICAgIG1TZXJ2ZXJMYXRlbmN5TXMuc3RvcmUobGF0ZW5jeU1zKTsKIH0KIAogc3RhdHVzX3QgQXVkaW9GbGluZ2VyOjpSZWNvcmRUaHJlYWQ6OlJlY29yZFRyYWNrOjpnZXRBY3RpdmVNaWNyb3Bob25lcygKQEAgLTE4NjQsNiArMTk4NSwxMCBAQAogICAgIH0KIH0KIAorLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorI3VuZGVmIExPR19UQUcKKyNkZWZpbmUgTE9HX1RBRyAiQUY6OlBhdGNoUmVjb3JkIgorCiBBdWRpb0ZsaW5nZXI6OlJlY29yZFRocmVhZDo6UGF0Y2hSZWNvcmQ6OlBhdGNoUmVjb3JkKFJlY29yZFRocmVhZCAqcmVjb3JkVGhyZWFkLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCBzYW1wbGVSYXRlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdWRpb19jaGFubmVsX21hc2tfdCBjaGFubmVsTWFzaywKQEAgLTE4NzUsNyArMjAwMCw4IEBACiAgICAgOiAgIFJlY29yZFRyYWNrKHJlY29yZFRocmVhZCwgTlVMTCwKICAgICAgICAgICAgICAgICBhdWRpb19hdHRyaWJ1dGVzX3R7fSAvKiBjdXJyZW50bHkgdW51c2VkIGZvciBwYXRjaCB0cmFjayAqLywKICAgICAgICAgICAgICAgICBzYW1wbGVSYXRlLCBmb3JtYXQsIGNoYW5uZWxNYXNrLCBmcmFtZUNvdW50LAotICAgICAgICAgICAgICAgIGJ1ZmZlciwgYnVmZmVyU2l6ZSwgQVVESU9fU0VTU0lPTl9OT05FLCBnZXR1aWQoKSwgZmxhZ3MsIFRZUEVfUEFUQ0gpLAorICAgICAgICAgICAgICAgIGJ1ZmZlciwgYnVmZmVyU2l6ZSwgQVVESU9fU0VTU0lPTl9OT05FLCBBSURfQVVESU9TRVJWRVIsCisgICAgICAgICAgICAgICAgZmxhZ3MsIFRZUEVfUEFUQ0gpLAogICAgICAgICAgICAgICAgIG1Qcm94eShuZXcgQ2xpZW50UHJveHkobUNibGssIG1CdWZmZXIsIGZyYW1lQ291bnQsIG1GcmFtZVNpemUsIGZhbHNlLCB0cnVlKSkKIHsKICAgICB1aW50NjRfdCBtaXhCdWZmZXJOcyA9ICgodWludDY0X3QpMiAqIHJlY29yZFRocmVhZC0+ZnJhbWVDb3VudCgpICogMTAwMDAwMDAwMCkgLwpAQCAtMTg4Myw4ICsyMDA5LDggQEAKICAgICBtUGVlclRpbWVvdXQudHZfc2VjID0gbWl4QnVmZmVyTnMgLyAxMDAwMDAwMDAwOwogICAgIG1QZWVyVGltZW91dC50dl9uc2VjID0gKGludCkgKG1peEJ1ZmZlck5zICUgMTAwMDAwMDAwMCk7CiAKLSAgICBBTE9HVigiUGF0Y2hSZWNvcmQgJXAgc2FtcGxlUmF0ZSAlZCBtUGVlclRpbWVvdXQgJWQuJTAzZCBzZWMiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLCBzYW1wbGVSYXRlLAorICAgIEFMT0dWKCIlcyglZCk6IHNhbXBsZVJhdGUgJWQgbVBlZXJUaW1lb3V0ICVkLiUwM2Qgc2VjIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19mdW5jX18sIG1JZCwgc2FtcGxlUmF0ZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGludCltUGVlclRpbWVvdXQudHZfc2VjLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoaW50KShtUGVlclRpbWVvdXQudHZfbnNlYyAvIDEwMDAwMDApKTsKIH0KQEAgLTE4OTcsMTIgKzIwMjMsMTIgQEAKIHN0YXR1c190IEF1ZGlvRmxpbmdlcjo6UmVjb3JkVGhyZWFkOjpQYXRjaFJlY29yZDo6Z2V0TmV4dEJ1ZmZlcigKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQXVkaW9CdWZmZXJQcm92aWRlcjo6QnVmZmVyKiBidWZmZXIpCiB7Ci0gICAgQUxPR19BU1NFUlQobVBlZXJQcm94eSAhPSAwLCAiUGF0Y2hSZWNvcmQ6OmdldE5leHRCdWZmZXIoKSBjYWxsZWQgd2l0aG91dCBwZWVyIHByb3h5Iik7CisgICAgQUxPR19BU1NFUlQobVBlZXJQcm94eSAhPSAwLCAiJXMoJWQpOiBjYWxsZWQgd2l0aG91dCBwZWVyIHByb3h5IiwgX19mdW5jX18sIG1JZCk7CiAgICAgUHJveHk6OkJ1ZmZlciBidWY7CiAgICAgYnVmLm1GcmFtZUNvdW50ID0gYnVmZmVyLT5mcmFtZUNvdW50OwogICAgIHN0YXR1c190IHN0YXR1cyA9IG1QZWVyUHJveHktPm9idGFpbkJ1ZmZlcigmYnVmLCAmbVBlZXJUaW1lb3V0KTsKICAgICBBTE9HVl9JRihzdGF0dXMgIT0gTk9fRVJST1IsCi0gICAgICAgICAgICAgIlBhdGNoUmVjb3JkKCkgJXAgbVBlZXJQcm94eS0+b2J0YWluQnVmZmVyIHN0YXR1cyAlZCIsIHRoaXMsIHN0YXR1cyk7CisgICAgICAgICAgICAgIiVzKCVkKTogbVBlZXJQcm94eS0+b2J0YWluQnVmZmVyIHN0YXR1cyAlZCIsIF9fZnVuY19fLCBtSWQsIHN0YXR1cyk7CiAgICAgYnVmZmVyLT5mcmFtZUNvdW50ID0gYnVmLm1GcmFtZUNvdW50OwogICAgIGlmIChidWYubUZyYW1lQ291bnQgPT0gMCkgewogICAgICAgICByZXR1cm4gV09VTERfQkxPQ0s7CkBAIC0xOTEzLDcgKzIwMzksNyBAQAogCiB2b2lkIEF1ZGlvRmxpbmdlcjo6UmVjb3JkVGhyZWFkOjpQYXRjaFJlY29yZDo6cmVsZWFzZUJ1ZmZlcihBdWRpb0J1ZmZlclByb3ZpZGVyOjpCdWZmZXIqIGJ1ZmZlcikKIHsKLSAgICBBTE9HX0FTU0VSVChtUGVlclByb3h5ICE9IDAsICJQYXRjaFJlY29yZDo6cmVsZWFzZUJ1ZmZlcigpIGNhbGxlZCB3aXRob3V0IHBlZXIgcHJveHkiKTsKKyAgICBBTE9HX0FTU0VSVChtUGVlclByb3h5ICE9IDAsICIlcyglZCk6IGNhbGxlZCB3aXRob3V0IHBlZXIgcHJveHkiLCBfX2Z1bmNfXywgbUlkKTsKICAgICBQcm94eTo6QnVmZmVyIGJ1ZjsKICAgICBidWYubUZyYW1lQ291bnQgPSBidWZmZXItPmZyYW1lQ291bnQ7CiAgICAgYnVmLm1SYXcgPSBidWZmZXItPnJhdzsKQEAgLTE5MzIsNyArMjA1OCw5IEBACiAgICAgbVByb3h5LT5yZWxlYXNlQnVmZmVyKGJ1ZmZlcik7CiB9CiAKLQorLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorI3VuZGVmIExPR19UQUcKKyNkZWZpbmUgTE9HX1RBRyAiQUY6Ok1tYXBUcmFjayIKIAogQXVkaW9GbGluZ2VyOjpNbWFwVGhyZWFkOjpNbWFwVHJhY2s6Ok1tYXBUcmFjayhUaHJlYWRCYXNlICp0aHJlYWQsCiAgICAgICAgIGNvbnN0IGF1ZGlvX2F0dHJpYnV0ZXNfdCYgYXR0ciwKQEAgLTE5NDAsMTMgKzIwNjgsMTQgQEAKICAgICAgICAgYXVkaW9fZm9ybWF0X3QgZm9ybWF0LAogICAgICAgICBhdWRpb19jaGFubmVsX21hc2tfdCBjaGFubmVsTWFzaywKICAgICAgICAgYXVkaW9fc2Vzc2lvbl90IHNlc3Npb25JZCwKKyAgICAgICAgYm9vbCBpc091dCwKICAgICAgICAgdWlkX3QgdWlkLAogICAgICAgICBwaWRfdCBwaWQsCiAgICAgICAgIGF1ZGlvX3BvcnRfaGFuZGxlX3QgcG9ydElkKQogICAgIDogICBUcmFja0Jhc2UodGhyZWFkLCBOVUxMLCBhdHRyLCBzYW1wbGVSYXRlLCBmb3JtYXQsCiAgICAgICAgICAgICAgICAgICBjaGFubmVsTWFzaywgKHNpemVfdCkwIC8qIGZyYW1lQ291bnQgKi8sCiAgICAgICAgICAgICAgICAgICBudWxscHRyIC8qIGJ1ZmZlciAqLywgKHNpemVfdCkwIC8qIGJ1ZmZlclNpemUgKi8sCi0gICAgICAgICAgICAgICAgICBzZXNzaW9uSWQsIHVpZCwgZmFsc2UgLyogaXNPdXQgKi8sCisgICAgICAgICAgICAgICAgICBzZXNzaW9uSWQsIHVpZCwgaXNPdXQsCiAgICAgICAgICAgICAgICAgICBBTExPQ19OT05FLAogICAgICAgICAgICAgICAgICAgVFlQRV9ERUZBVUxULCBwb3J0SWQpLAogICAgICAgICBtUGlkKHBpZCksIG1TaWxlbmNlZChmYWxzZSksIG1TaWxlbmNlZE5vdGlmaWVkKGZhbHNlKQpAQCAtMTk2Myw3ICsyMDkyLDcgQEAKIH0KIAogc3RhdHVzX3QgQXVkaW9GbGluZ2VyOjpNbWFwVGhyZWFkOjpNbWFwVHJhY2s6OnN0YXJ0KEF1ZGlvU3lzdGVtOjpzeW5jX2V2ZW50X3QgZXZlbnQgX191bnVzZWQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF1ZGlvX3Nlc3Npb25fdCB0cmlnZ2VyU2Vzc2lvbiBfX3VudXNlZCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdWRpb19zZXNzaW9uX3QgdHJpZ2dlclNlc3Npb24gX191bnVzZWQpCiB7CiAgICAgcmV0dXJuIE5PX0VSUk9SOwogfQpAQCAtMTk5NCwxOSArMjEyMywyNyBAQAogewogfQogCi0vKnN0YXRpYyovIHZvaWQgQXVkaW9GbGluZ2VyOjpNbWFwVGhyZWFkOjpNbWFwVHJhY2s6OmFwcGVuZER1bXBIZWFkZXIoU3RyaW5nOCYgcmVzdWx0KQordm9pZCBBdWRpb0ZsaW5nZXI6Ok1tYXBUaHJlYWQ6Ok1tYXBUcmFjazo6YXBwZW5kRHVtcEhlYWRlcihTdHJpbmc4JiByZXN1bHQpCiB7Ci0gICAgcmVzdWx0LmFwcGVuZCgiQ2xpZW50IFNlc3Npb24gICBGb3JtYXQgQ2huIG1hc2sgIFNSYXRlXG4iKTsKKyAgICByZXN1bHQuYXBwZW5kRm9ybWF0KCJDbGllbnQgU2Vzc2lvbiAgIEZvcm1hdCBDaG4gbWFzayAgU1JhdGUgRmxhZ3MgJXNcbiIsCisgICAgICAgICAgICAgICAgICAgICAgICBpc091dCgpID8gIlVzZyBDVCI6ICJTb3VyY2UiKTsKIH0KIAogdm9pZCBBdWRpb0ZsaW5nZXI6Ok1tYXBUaHJlYWQ6Ok1tYXBUcmFjazo6YXBwZW5kRHVtcChTdHJpbmc4JiByZXN1bHQsIGJvb2wgYWN0aXZlIF9fdW51c2VkKQogewotICAgIHJlc3VsdC5hcHBlbmRGb3JtYXQoIiU2dSAlN3UgJTA4WCAlMDhYICU2dVxuIiwKKyAgICByZXN1bHQuYXBwZW5kRm9ybWF0KCIlNnUgJTd1ICUwOFggJTA4WCAlNnUgMHglMDNYICIsCiAgICAgICAgICAgICBtUGlkLAogICAgICAgICAgICAgbVNlc3Npb25JZCwKICAgICAgICAgICAgIG1Gb3JtYXQsCiAgICAgICAgICAgICBtQ2hhbm5lbE1hc2ssCi0gICAgICAgICAgICBtU2FtcGxlUmF0ZSk7CisgICAgICAgICAgICBtU2FtcGxlUmF0ZSwKKyAgICAgICAgICAgIG1BdHRyLmZsYWdzKTsKKyAgICBpZiAoaXNPdXQoKSkgeworICAgICAgICByZXN1bHQuYXBwZW5kRm9ybWF0KCIlM3ggJTJ4IiwgbUF0dHIudXNhZ2UsIG1BdHRyLmNvbnRlbnRfdHlwZSk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgcmVzdWx0LmFwcGVuZEZvcm1hdCgiJTZ4IiwgbUF0dHIuc291cmNlKTsKKyAgICB9CisgICAgcmVzdWx0LmFwcGVuZCgiXG4iKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgYW5kcm9pZApkaWZmIC0tZ2l0IGEvc2VydmljZXMvYXVkaW9mbGluZ2VyL1R5cGVkTG9nZ2VyLmggYi9zZXJ2aWNlcy9hdWRpb2ZsaW5nZXIvVHlwZWRMb2dnZXIuaAppbmRleCAzOGMzYzAyLi42ZWYxOWJmIDEwMDY0NAotLS0gYS9zZXJ2aWNlcy9hdWRpb2ZsaW5nZXIvVHlwZWRMb2dnZXIuaAorKysgYi9zZXJ2aWNlcy9hdWRpb2ZsaW5nZXIvVHlwZWRMb2dnZXIuaApAQCAtOTcsOCArOTcsNDIgQEAKICNkZWZpbmUgTE9HX0FVRElPX1NUQVRFKCkgZG8geyBOQkxvZzo6V3JpdGVyICp4ID0gdGxOQkxvZ1dyaXRlcjsgaWYgKHggIT0gbnVsbHB0cikgXAogICAgICAgICB4LT5sb2dFdmVudEhpc3RUcyhOQkxvZzo6RVZFTlRfQVVESU9fU1RBVEUsIGhhc2goX19GSUxFX18sIF9fTElORV9fKSk7IH0gd2hpbGUoMCkKIAorLy8gTG9nIHRoZSBkaWZmZXJlbmNlIGJld3RlZW4gZnJhbWVzIHByZXNlbnRlZCBieSBIQUwgYW5kIGZyYW1lcyB3cml0dGVuIHRvIEhBTCBvdXRwdXQgc2luaywKKy8vIGRpdmlkZWQgYnkgdGhlIHNhbXBsZSByYXRlLiBQYXJhbWV0ZXIgbXMgaXMgb2YgdHlwZSBkb3VibGUuCisjZGVmaW5lIExPR19MQVRFTkNZKG1zKSBkbyB7IE5CTG9nOjpXcml0ZXIgKnggPSB0bE5CTG9nV3JpdGVyOyBpZiAoeCAhPSBudWxscHRyKSBcCisgICAgICAgIHgtPmxvZzxOQkxvZzo6RVZFTlRfTEFURU5DWT4obXMpOyB9IHdoaWxlICgwKQorCisvLyBSZWNvcmQgdGhyZWFkIG92ZXJydW4gZXZlbnQgbmFub3NlY29uZCB0aW1lc3RhbXAuIFBhcmFtZXRlciBucyBpcyBhbiBpbnQ2NF90LgorI2RlZmluZSBMT0dfT1ZFUlJVTihucykgZG8geyBOQkxvZzo6V3JpdGVyICp4ID0gdGxOQkxvZ1dyaXRlcjsgaWYgKHggIT0gbnVsbHB0cikgXAorICAgICAgICB4LT5sb2c8TkJMb2c6OkVWRU5UX09WRVJSVU4+KG5zKTsgfSB3aGlsZSAoMCkKKworLy8gUmVjb3JkIHRocmVhZCBpbmZvLiBUaGlzIGN1cnJlbnRseSBpbmNsdWRlcyB0eXBlLCBmcmFtZUNvdW50LCBhbmQgc2FtcGxlUmF0ZS4KKy8vIFBhcmFtZXRlciB0eXBlIGlzIHRocmVhZF9pbmZvX3QgYXMgZGVmaW5lZCBpbiBOQkxvZy5oLgorI2RlZmluZSBMT0dfVEhSRUFEX0lORk8oaW5mbykgZG8geyBOQkxvZzo6V3JpdGVyICp4ID0gdGxOQkxvZ1dyaXRlcjsgXAorICAgICAgICBpZiAoeCAhPSBudWxscHRyKSB4LT5sb2c8TkJMb2c6OkVWRU5UX1RIUkVBRF9JTkZPPihpbmZvKTsgfSB3aGlsZSAoMCkKKworI2RlZmluZSBMT0dfVEhSRUFEX1BBUkFNUyhwYXJhbXMpIGRvIHtOQkxvZzo6V3JpdGVyICp4ID0gdGxOQkxvZ1dyaXRlcjsgXAorICAgICAgICBpZiAoeCAhPSBudWxscHRyKSB4LT5sb2c8TkJMb2c6OkVWRU5UX1RIUkVBRF9QQVJBTVM+KHBhcmFtcyk7IH0gd2hpbGUgKDApCisKKy8vIFJlY29yZCB0aHJlYWQgdW5kZXJydW4gZXZlbnQgbmFub3NlY29uZCB0aW1lc3RhbXAuIFBhcmFtZXRlciBucyBpcyBhbiBpbnQ2NF90LgorI2RlZmluZSBMT0dfVU5ERVJSVU4obnMpIGRvIHsgTkJMb2c6OldyaXRlciAqeCA9IHRsTkJMb2dXcml0ZXI7IGlmICh4ICE9IG51bGxwdHIpIFwKKyAgICAgICAgeC0+bG9nPE5CTG9nOjpFVkVOVF9VTkRFUlJVTj4obnMpOyB9IHdoaWxlICgwKQorCisvLyBSZWNvcmQgdGhyZWFkIHdhcm11cCB0aW1lIGluIG1pbGxpc2Vjb25kcy4gUGFyYW1ldGVyIG1zIGlzIG9mIHR5cGUgZG91YmxlLgorI2RlZmluZSBMT0dfV0FSTVVQX1RJTUUobXMpIGRvIHsgTkJMb2c6OldyaXRlciAqeCA9IHRsTkJMb2dXcml0ZXI7IGlmICh4ICE9IG51bGxwdHIpIFwKKyAgICAgICAgeC0+bG9nPE5CTG9nOjpFVkVOVF9XQVJNVVBfVElNRT4obXMpOyB9IHdoaWxlICgwKQorCisvLyBSZWNvcmQgYSB0eXBlZCBlbnRyeSB0aGF0IHJlcHJlc2VudHMgYSB0aHJlYWQncyB3b3JrIHRpbWUgaW4gbmFub3NlY29uZHMuCisvLyBQYXJhbWV0ZXIgbnMgc2hvdWxkIGJlIG9mIHR5cGUgdWludDMyX3QuCisjZGVmaW5lIExPR19XT1JLX1RJTUUobnMpIGRvIHsgTkJMb2c6OldyaXRlciAqeCA9IHRsTkJMb2dXcml0ZXI7IGlmICh4ICE9IG51bGxwdHIpIFwKKyAgICAgICAgeC0+bG9nPE5CTG9nOjpFVkVOVF9XT1JLX1RJTUU+KG5zKTsgfSB3aGlsZSAoMCkKKwogbmFtZXNwYWNlIGFuZHJvaWQgewogZXh0ZXJuICJDIiB7CisvLyBUT0RPIGNvbnNpZGVyIGFkZGluZyBhIHRocmVhZF9sb2NhbCBOQkxvZzo6V3JpdGVyIHRsRHVtbXlOQkxvZ1dyaXRlciBhbmQgdGhlbgorLy8gaW5pdGlhbGl6ZSBiZWxvdyB0bE5CTG9nV3JpdGVyIHRvICZ0bER1bW15TkJMb2dXcml0ZXIgdG8gcmVtb3ZlIHRoZSBuZWVkIHRvCisvLyBjaGVjayBmb3IgbnVsbHB0ciBldmVyeSB0aW1lLiBBbHNvIHJlZHVjZXMgdGhlIG5lZWQgdG8gYWRkIGEgbmV3IGxvZ2dpbmcgbWFjcm8gYWJvdmUKKy8vIGVhY2ggdGltZSB3ZSB3YW50IHRvIGxvZyBhIG5ldyB0eXBlLgogZXh0ZXJuIHRocmVhZF9sb2NhbCBOQkxvZzo6V3JpdGVyICp0bE5CTG9nV3JpdGVyOwogfQogfSAvLyBuYW1lc3BhY2UgYW5kcm9pZApkaWZmIC0tZ2l0IGEvc2VydmljZXMvYXVkaW9wb2xpY3kvQW5kcm9pZC5tayBiL3NlcnZpY2VzL2F1ZGlvcG9saWN5L0FuZHJvaWQubWsKaW5kZXggZDI5Y2FlMS4uZjIzZTQyNiAxMDA2NDQKLS0tIGEvc2VydmljZXMvYXVkaW9wb2xpY3kvQW5kcm9pZC5taworKysgYi9zZXJ2aWNlcy9hdWRpb3BvbGljeS9BbmRyb2lkLm1rCkBAIC0xMyw3ICsxMyw2IEBACiAgICAgJChjYWxsIGluY2x1ZGUtcGF0aC1mb3IsIGF1ZGlvLXV0aWxzKSBcCiAgICAgZnJhbWV3b3Jrcy9hdi9zZXJ2aWNlcy9hdWRpb3BvbGljeS9jb21tb24vaW5jbHVkZSBcCiAgICAgZnJhbWV3b3Jrcy9hdi9zZXJ2aWNlcy9hdWRpb3BvbGljeS9lbmdpbmUvaW50ZXJmYWNlIFwKLSAgICBmcmFtZXdvcmtzL2F2L3NlcnZpY2VzL2F1ZGlvcG9saWN5L3V0aWxpdGllcwogCiBMT0NBTF9TSEFSRURfTElCUkFSSUVTIDo9IFwKICAgICBsaWJjdXRpbHMgXApAQCAtMjIsMTAgKzIxLDEwIEBACiAgICAgbGliYmluZGVyIFwKICAgICBsaWJhdWRpb2NsaWVudCBcCiAgICAgbGliaGFyZHdhcmVfbGVnYWN5IFwKLSAgICBsaWJzZXJ2aWNldXRpbGl0eSBcCiAgICAgbGliYXVkaW9wb2xpY3ltYW5hZ2VyIFwKICAgICBsaWJtZWRpYV9oZWxwZXIgXAogICAgIGxpYm1lZGlhbWV0cmljcyBcCisgICAgbGlibWVkaWF1dGlscyBcCiAgICAgbGliZWZmZWN0c2NvbmZpZwogCiBMT0NBTF9TVEFUSUNfTElCUkFSSUVTIDo9IFwKQEAgLTc0LDcgKzczLDcgQEAKIExPQ0FMX0NfSU5DTFVERVMgKz0gXAogICAgIGZyYW1ld29ya3MvYXYvc2VydmljZXMvYXVkaW9wb2xpY3kvY29tbW9uL2luY2x1ZGUgXAogICAgIGZyYW1ld29ya3MvYXYvc2VydmljZXMvYXVkaW9wb2xpY3kvZW5naW5lL2ludGVyZmFjZSBcCi0gICAgZnJhbWV3b3Jrcy9hdi9zZXJ2aWNlcy9hdWRpb3BvbGljeS91dGlsaXRpZXMKKyAgICAkKGNhbGwgaW5jbHVkZS1wYXRoLWZvciwgYXVkaW8tdXRpbHMpIFwKIAogTE9DQUxfU1RBVElDX0xJQlJBUklFUyA6PSBcCiAgICAgbGliYXVkaW9wb2xpY3ljb21wb25lbnRzCkBAIC04Myw3ICs4Miw3IEBACiBMT0NBTF9TSEFSRURfTElCUkFSSUVTICs9IGxpYm1lZGlhbWV0cmljcwogCiBpZmVxICgkKFVTRV9YTUxfQVVESU9fUE9MSUNZX0NPTkYpLCAxKQotTE9DQUxfU0hBUkVEX0xJQlJBUklFUyArPSBsaWJpY3V1YyBsaWJ4bWwyCitMT0NBTF9TSEFSRURfTElCUkFSSUVTICs9IGxpYmhpZGxiYXNlIGxpYmljdXVjIGxpYnhtbDIKIAogTE9DQUxfQ0ZMQUdTICs9IC1EVVNFX1hNTF9BVURJT19QT0xJQ1lfQ09ORgogZW5kaWYgI2lmZXEgKCQoVVNFX1hNTF9BVURJT19QT0xJQ1lfQ09ORiksIDEpCkBAIC0xMTEsNyArMTEwLDggQEAKIAogTE9DQUxfQ19JTkNMVURFUyArPSBcCiAgICAgZnJhbWV3b3Jrcy9hdi9zZXJ2aWNlcy9hdWRpb3BvbGljeS9jb21tb24vaW5jbHVkZSBcCi0gICAgZnJhbWV3b3Jrcy9hdi9zZXJ2aWNlcy9hdWRpb3BvbGljeS9lbmdpbmUvaW50ZXJmYWNlCisgICAgZnJhbWV3b3Jrcy9hdi9zZXJ2aWNlcy9hdWRpb3BvbGljeS9lbmdpbmUvaW50ZXJmYWNlIFwKKyAgICAkKGNhbGwgaW5jbHVkZS1wYXRoLWZvciwgYXVkaW8tdXRpbHMpIFwKIAogTE9DQUxfQ0ZMQUdTIDo9IC1XYWxsIC1XZXJyb3IKIApkaWZmIC0tZ2l0IGEvc2VydmljZXMvYXVkaW9wb2xpY3kvQXVkaW9Qb2xpY3lJbnRlcmZhY2UuaCBiL3NlcnZpY2VzL2F1ZGlvcG9saWN5L0F1ZGlvUG9saWN5SW50ZXJmYWNlLmgKaW5kZXggNDgxMmIxZi4uM2MzYTgyYiAxMDA2NDQKLS0tIGEvc2VydmljZXMvYXVkaW9wb2xpY3kvQXVkaW9Qb2xpY3lJbnRlcmZhY2UuaAorKysgYi9zZXJ2aWNlcy9hdWRpb3BvbGljeS9BdWRpb1BvbGljeUludGVyZmFjZS5oCkBAIC0xMjQsMTcgKzEyNCwxMSBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF1ZGlvX3BvcnRfaGFuZGxlX3QgKnNlbGVjdGVkRGV2aWNlSWQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXVkaW9fcG9ydF9oYW5kbGVfdCAqcG9ydElkKSA9IDA7CiAgICAgLy8gaW5kaWNhdGVzIHRvIHRoZSBhdWRpbyBwb2xpY3kgbWFuYWdlciB0aGF0IHRoZSBvdXRwdXQgc3RhcnRzIGJlaW5nIHVzZWQgYnkgY29ycmVzcG9uZGluZyBzdHJlYW0uCi0gICAgdmlydHVhbCBzdGF0dXNfdCBzdGFydE91dHB1dChhdWRpb19pb19oYW5kbGVfdCBvdXRwdXQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdWRpb19zdHJlYW1fdHlwZV90IHN0cmVhbSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF1ZGlvX3Nlc3Npb25fdCBzZXNzaW9uKSA9IDA7CisgICAgdmlydHVhbCBzdGF0dXNfdCBzdGFydE91dHB1dChhdWRpb19wb3J0X2hhbmRsZV90IHBvcnRJZCkgPSAwOwogICAgIC8vIGluZGljYXRlcyB0byB0aGUgYXVkaW8gcG9saWN5IG1hbmFnZXIgdGhhdCB0aGUgb3V0cHV0IHN0b3BzIGJlaW5nIHVzZWQgYnkgY29ycmVzcG9uZGluZyBzdHJlYW0uCi0gICAgdmlydHVhbCBzdGF0dXNfdCBzdG9wT3V0cHV0KGF1ZGlvX2lvX2hhbmRsZV90IG91dHB1dCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXVkaW9fc3RyZWFtX3R5cGVfdCBzdHJlYW0sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF1ZGlvX3Nlc3Npb25fdCBzZXNzaW9uKSA9IDA7CisgICAgdmlydHVhbCBzdGF0dXNfdCBzdG9wT3V0cHV0KGF1ZGlvX3BvcnRfaGFuZGxlX3QgcG9ydElkKSA9IDA7CiAgICAgLy8gcmVsZWFzZXMgdGhlIG91dHB1dC4KLSAgICB2aXJ0dWFsIHZvaWQgcmVsZWFzZU91dHB1dChhdWRpb19pb19oYW5kbGVfdCBvdXRwdXQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXVkaW9fc3RyZWFtX3R5cGVfdCBzdHJlYW0sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXVkaW9fc2Vzc2lvbl90IHNlc3Npb24pID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgcmVsZWFzZU91dHB1dChhdWRpb19wb3J0X2hhbmRsZV90IHBvcnRJZCkgPSAwOwogCiAgICAgLy8gcmVxdWVzdCBhbiBpbnB1dCBhcHByb3ByaWF0ZSBmb3IgcmVjb3JkIGZyb20gdGhlIHN1cHBsaWVkIGRldmljZSB3aXRoIHN1cHBsaWVkIHBhcmFtZXRlcnMuCiAgICAgdmlydHVhbCBzdGF0dXNfdCBnZXRJbnB1dEZvckF0dHIoY29uc3QgYXVkaW9fYXR0cmlidXRlc190ICphdHRyLApAQCAtMTQ3LDE2ICsxNDEsMTMgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnB1dF90eXBlX3QgKmlucHV0VHlwZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdWRpb19wb3J0X2hhbmRsZV90ICpwb3J0SWQpID0gMDsKICAgICAvLyBpbmRpY2F0ZXMgdG8gdGhlIGF1ZGlvIHBvbGljeSBtYW5hZ2VyIHRoYXQgdGhlIGlucHV0IHN0YXJ0cyBiZWluZyB1c2VkLgotICAgIHZpcnR1YWwgc3RhdHVzX3Qgc3RhcnRJbnB1dChhdWRpb19pb19oYW5kbGVfdCBpbnB1dCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXVkaW9fc2Vzc2lvbl90IHNlc3Npb24sCisgICAgdmlydHVhbCBzdGF0dXNfdCBzdGFydElucHV0KGF1ZGlvX3BvcnRfaGFuZGxlX3QgcG9ydElkLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIHNpbGVuY2VkLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25jdXJyZW5jeV90eXBlX19tYXNrX3QgKmNvbmN1cnJlbmN5KSA9IDA7CiAgICAgLy8gaW5kaWNhdGVzIHRvIHRoZSBhdWRpbyBwb2xpY3kgbWFuYWdlciB0aGF0IHRoZSBpbnB1dCBzdG9wcyBiZWluZyB1c2VkLgotICAgIHZpcnR1YWwgc3RhdHVzX3Qgc3RvcElucHV0KGF1ZGlvX2lvX2hhbmRsZV90IGlucHV0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF1ZGlvX3Nlc3Npb25fdCBzZXNzaW9uKSA9IDA7CisgICAgdmlydHVhbCBzdGF0dXNfdCBzdG9wSW5wdXQoYXVkaW9fcG9ydF9oYW5kbGVfdCBwb3J0SWQpID0gMDsKICAgICAvLyByZWxlYXNlcyB0aGUgaW5wdXQuCi0gICAgdmlydHVhbCB2b2lkIHJlbGVhc2VJbnB1dChhdWRpb19pb19oYW5kbGVfdCBpbnB1dCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF1ZGlvX3Nlc3Npb25fdCBzZXNzaW9uKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIHJlbGVhc2VJbnB1dChhdWRpb19wb3J0X2hhbmRsZV90IHBvcnRJZCkgPSAwOwogCiAgICAgLy8KICAgICAvLyB2b2x1bWUgY29udHJvbCBmdW5jdGlvbnMKQEAgLTIzNSw5ICsyMjYsOSBAQAogCiAgICAgdmlydHVhbCBzdGF0dXNfdCBzdGFydEF1ZGlvU291cmNlKGNvbnN0IHN0cnVjdCBhdWRpb19wb3J0X2NvbmZpZyAqc291cmNlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBhdWRpb19hdHRyaWJ1dGVzX3QgKmF0dHJpYnV0ZXMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF1ZGlvX3BhdGNoX2hhbmRsZV90ICpoYW5kbGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF1ZGlvX3BvcnRfaGFuZGxlX3QgKnBvcnRJZCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWlkX3QgdWlkKSA9IDA7Ci0gICAgdmlydHVhbCBzdGF0dXNfdCBzdG9wQXVkaW9Tb3VyY2UoYXVkaW9fcGF0Y2hfaGFuZGxlX3QgaGFuZGxlKSA9IDA7CisgICAgdmlydHVhbCBzdGF0dXNfdCBzdG9wQXVkaW9Tb3VyY2UoYXVkaW9fcG9ydF9oYW5kbGVfdCBwb3J0SWQpID0gMDsKIAogICAgIHZpcnR1YWwgc3RhdHVzX3Qgc2V0TWFzdGVyTW9ubyhib29sIG1vbm8pID0gMDsKICAgICB2aXJ0dWFsIHN0YXR1c190IGdldE1hc3Rlck1vbm8oYm9vbCAqbW9ubykgPSAwOwpAQCAtMjUxLDcgKzI0Miw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCByZXBvcnRlZCkgPSAwOwogICAgIHZpcnR1YWwgc3RhdHVzX3Qgc2V0U3Vycm91bmRGb3JtYXRFbmFibGVkKGF1ZGlvX2Zvcm1hdF90IGF1ZGlvRm9ybWF0LCBib29sIGVuYWJsZWQpID0gMDsKIAotICAgIHZpcnR1YWwgdm9pZCAgICAgc2V0UmVjb3JkU2lsZW5jZWQodWlkX3QgdWlkLCBib29sIHNpbGVuY2VkKTsKKyAgICB2aXJ0dWFsIHZvaWQgICAgIHNldEFwcFN0YXRlKHVpZF90IHVpZCwgYXBwX3N0YXRlX3Qgc3RhdGUpOwogfTsKIAogCkBAIC0zMjQsMTEgKzMxNSw2IEBACiAgICAgLy8gZnVuY3Rpb24gZW5hYmxpbmcgdG8gcmVjZWl2ZSBwcm9wcmlldGFyeSBpbmZvcm1hdGlvbnMgZGlyZWN0bHkgZnJvbSBhdWRpbyBoYXJkd2FyZSBpbnRlcmZhY2UgdG8gYXVkaW8gcG9saWN5IG1hbmFnZXIuCiAgICAgdmlydHVhbCBTdHJpbmc4IGdldFBhcmFtZXRlcnMoYXVkaW9faW9faGFuZGxlX3QgaW9IYW5kbGUsIGNvbnN0IFN0cmluZzgmIGtleXMpID0gMDsKIAotICAgIC8vIHJlcXVlc3QgdGhlIHBsYXliYWNrIG9mIGEgdG9uZSBvbiB0aGUgc3BlY2lmaWVkIHN0cmVhbTogdXNlZCBmb3IgaW5zdGFuY2UgdG8gcmVwbGFjZSBub3RpZmljYXRpb24gc291bmRzIHdoZW4gcGxheWluZwotICAgIC8vIG92ZXIgYSB0ZWxlcGhvbnkgZGV2aWNlIGR1cmluZyBhIHBob25lIGNhbGwuCi0gICAgdmlydHVhbCBzdGF0dXNfdCBzdGFydFRvbmUoYXVkaW9fcG9saWN5X3RvbmVfdCB0b25lLCBhdWRpb19zdHJlYW1fdHlwZV90IHN0cmVhbSkgPSAwOwotICAgIHZpcnR1YWwgc3RhdHVzX3Qgc3RvcFRvbmUoKSA9IDA7Ci0KICAgICAvLyBzZXQgZG93biBsaW5rIGF1ZGlvIHZvbHVtZS4KICAgICB2aXJ0dWFsIHN0YXR1c190IHNldFZvaWNlVm9sdW1lKGZsb2F0IHZvbHVtZSwgaW50IGRlbGF5TXMgPSAwKSA9IDA7CiAKZGlmZiAtLWdpdCBhL3NlcnZpY2VzL2F1ZGlvcG9saWN5L2NvbW1vbi9pbmNsdWRlL1JvdXRpbmdTdHJhdGVneS5oIGIvc2VydmljZXMvYXVkaW9wb2xpY3kvY29tbW9uL2luY2x1ZGUvUm91dGluZ1N0cmF0ZWd5LmgKaW5kZXggZDM4OTY3ZS4uZjhhMWNkNiAxMDA2NDQKLS0tIGEvc2VydmljZXMvYXVkaW9wb2xpY3kvY29tbW9uL2luY2x1ZGUvUm91dGluZ1N0cmF0ZWd5LmgKKysrIGIvc2VydmljZXMvYXVkaW9wb2xpY3kvY29tbW9uL2luY2x1ZGUvUm91dGluZ1N0cmF0ZWd5LmgKQEAgLTIzLDYgKzIzLDcgQEAKICNkZWZpbmUgU09OSUZJQ0FUSU9OX1JFU1BFQ1RGVUxfQUZURVJfTVVTSUNfREVMQVkgNTAwMAogCiBlbnVtIHJvdXRpbmdfc3RyYXRlZ3kgeworICAgIFNUUkFURUdZX05PTkUgPSAtMSwKICAgICBTVFJBVEVHWV9NRURJQSwKICAgICBTVFJBVEVHWV9QSE9ORSwKICAgICBTVFJBVEVHWV9TT05JRklDQVRJT04sCmRpZmYgLS1naXQgYS9zZXJ2aWNlcy9hdWRpb3BvbGljeS9jb21tb24vaW5jbHVkZS9Wb2x1bWUuaCBiL3NlcnZpY2VzL2F1ZGlvcG9saWN5L2NvbW1vbi9pbmNsdWRlL1ZvbHVtZS5oCmluZGV4IGZjMDEyYTIuLjVjY2M4ZmQgMTAwNjQ0Ci0tLSBhL3NlcnZpY2VzL2F1ZGlvcG9saWN5L2NvbW1vbi9pbmNsdWRlL1ZvbHVtZS5oCisrKyBiL3NlcnZpY2VzL2F1ZGlvcG9saWN5L2NvbW1vbi9pbmNsdWRlL1ZvbHVtZS5oCkBAIC0xMzQsNiArMTM0LDcgQEAKICAgICAgICAgY2FzZSBBVURJT19ERVZJQ0VfT1VUX1VTQl9ERVZJQ0U6CiAgICAgICAgICAgICByZXR1cm4gREVWSUNFX0NBVEVHT1JZX0VYVF9NRURJQTsKICAgICAgICAgY2FzZSBBVURJT19ERVZJQ0VfT1VUX1NQRUFLRVI6CisgICAgICAgIGNhc2UgQVVESU9fREVWSUNFX09VVF9TUEVBS0VSX1NBRkU6CiAgICAgICAgIGNhc2UgQVVESU9fREVWSUNFX09VVF9CTFVFVE9PVEhfU0NPX0NBUktJVDoKICAgICAgICAgY2FzZSBBVURJT19ERVZJQ0VfT1VUX0JMVUVUT09USF9BMkRQX1NQRUFLRVI6CiAgICAgICAgIGNhc2UgQVVESU9fREVWSUNFX09VVF9VU0JfQUNDRVNTT1JZOgpkaWZmIC0tZ2l0IGEvc2VydmljZXMvYXVkaW9wb2xpY3kvY29tbW9uL21hbmFnZXJkZWZpbml0aW9ucy9BbmRyb2lkLm1rIGIvc2VydmljZXMvYXVkaW9wb2xpY3kvY29tbW9uL21hbmFnZXJkZWZpbml0aW9ucy9BbmRyb2lkLm1rCmluZGV4IGU2OWU2ODcuLjMzMzZiNzkgMTAwNjQ0Ci0tLSBhL3NlcnZpY2VzL2F1ZGlvcG9saWN5L2NvbW1vbi9tYW5hZ2VyZGVmaW5pdGlvbnMvQW5kcm9pZC5taworKysgYi9zZXJ2aWNlcy9hdWRpb3BvbGljeS9jb21tb24vbWFuYWdlcmRlZmluaXRpb25zL0FuZHJvaWQubWsKQEAgLTE3LDExICsxNyw5IEBACiAgICAgc3JjL0F1ZGlvQ29sbGVjdGlvbnMuY3BwIFwKICAgICBzcmMvRWZmZWN0RGVzY3JpcHRvci5jcHAgXAogICAgIHNyYy9Tb3VuZFRyaWdnZXJTZXNzaW9uLmNwcCBcCi0gICAgc3JjL1Nlc3Npb25Sb3V0ZS5jcHAgXAotICAgIHNyYy9BdWRpb1NvdXJjZURlc2NyaXB0b3IuY3BwIFwKICAgICBzcmMvVm9sdW1lQ3VydmUuY3BwIFwKICAgICBzcmMvVHlwZUNvbnZlcnRlci5jcHAgXAotICAgIHNyYy9BdWRpb1Nlc3Npb24uY3BwCisgICAgc3JjL0NsaWVudERlc2NyaXB0b3IuY3BwCiAKIExPQ0FMX1NIQVJFRF9MSUJSQVJJRVMgOj0gXAogICAgIGxpYmN1dGlscyBcCkBAIC0zNSwxNCArMzMsMTMgQEAKICAgICAkKExPQ0FMX1BBVEgpL2luY2x1ZGUgXAogICAgIGZyYW1ld29ya3MvYXYvc2VydmljZXMvYXVkaW9wb2xpY3kvY29tbW9uL2luY2x1ZGUgXAogICAgIGZyYW1ld29ya3MvYXYvc2VydmljZXMvYXVkaW9wb2xpY3kgXAotICAgIGZyYW1ld29ya3MvYXYvc2VydmljZXMvYXVkaW9wb2xpY3kvdXRpbGl0aWVzIFwKLSAgICBzeXN0ZW0vbWVkaWEvYXVkaW9fdXRpbHMvaW5jbHVkZSBcCisgICAgJChjYWxsIGluY2x1ZGUtcGF0aC1mb3IsIGF1ZGlvLXV0aWxzKSBcCiAKIGlmZXEgKCQoVVNFX1hNTF9BVURJT19QT0xJQ1lfQ09ORiksIDEpCiAKIExPQ0FMX1NSQ19GSUxFUyArPSBzcmMvU2VyaWFsaXplci5jcHAKIAotTE9DQUxfU0hBUkVEX0xJQlJBUklFUyArPSBsaWJpY3V1YyBsaWJ4bWwyCitMT0NBTF9TSEFSRURfTElCUkFSSUVTICs9IGxpYmhpZGxiYXNlIGxpYmljdXVjIGxpYnhtbDIKIAogTE9DQUxfQ19JTkNMVURFUyArPSBcCiAgICAgZXh0ZXJuYWwvbGlieG1sMi9pbmNsdWRlIFwKZGlmZiAtLWdpdCBhL3NlcnZpY2VzL2F1ZGlvcG9saWN5L2NvbW1vbi9tYW5hZ2VyZGVmaW5pdGlvbnMvaW5jbHVkZS9BdWRpb0NvbGxlY3Rpb25zLmggYi9zZXJ2aWNlcy9hdWRpb3BvbGljeS9jb21tb24vbWFuYWdlcmRlZmluaXRpb25zL2luY2x1ZGUvQXVkaW9Db2xsZWN0aW9ucy5oCmluZGV4IGY4NmU3NWEuLmE5NDhlYTkgMTAwNjQ0Ci0tLSBhL3NlcnZpY2VzL2F1ZGlvcG9saWN5L2NvbW1vbi9tYW5hZ2VyZGVmaW5pdGlvbnMvaW5jbHVkZS9BdWRpb0NvbGxlY3Rpb25zLmgKKysrIGIvc2VydmljZXMvYXVkaW9wb2xpY3kvY29tbW9uL21hbmFnZXJkZWZpbml0aW9ucy9pbmNsdWRlL0F1ZGlvQ29sbGVjdGlvbnMuaApAQCAtMzgsNyArMzgsNyBAQAogY2xhc3MgQXVkaW9Sb3V0ZVZlY3RvciA6IHB1YmxpYyBWZWN0b3I8c3A8QXVkaW9Sb3V0ZT4gPgogewogcHVibGljOgotICAgIHN0YXR1c190IGR1bXAoaW50IGZkLCBpbnQgc3BhY2VzKSBjb25zdDsKKyAgICB2b2lkIGR1bXAoU3RyaW5nOCAqZHN0LCBpbnQgc3BhY2VzKSBjb25zdDsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIGFuZHJvaWQKZGlmZiAtLWdpdCBhL3NlcnZpY2VzL2F1ZGlvcG9saWN5L2NvbW1vbi9tYW5hZ2VyZGVmaW5pdGlvbnMvaW5jbHVkZS9BdWRpb0dhaW4uaCBiL3NlcnZpY2VzL2F1ZGlvcG9saWN5L2NvbW1vbi9tYW5hZ2VyZGVmaW5pdGlvbnMvaW5jbHVkZS9BdWRpb0dhaW4uaAppbmRleCA0YWM1MDhmLi45OTYzNDdiIDEwMDY0NAotLS0gYS9zZXJ2aWNlcy9hdWRpb3BvbGljeS9jb21tb24vbWFuYWdlcmRlZmluaXRpb25zL2luY2x1ZGUvQXVkaW9HYWluLmgKKysrIGIvc2VydmljZXMvYXVkaW9wb2xpY3kvY29tbW9uL21hbmFnZXJkZWZpbml0aW9ucy9pbmNsdWRlL0F1ZGlvR2Fpbi5oCkBAIC0xOCw2ICsxOCw3IEBACiAKICNpbmNsdWRlIDx1dGlscy9FcnJvcnMuaD4KICNpbmNsdWRlIDx1dGlscy9SZWZCYXNlLmg+CisjaW5jbHVkZSA8dXRpbHMvU3RyaW5nOC5oPgogI2luY2x1ZGUgPHN5c3RlbS9hdWRpby5oPgogCiBuYW1lc3BhY2UgYW5kcm9pZCB7CkBAIC01Myw3ICs1NCw3IEBACiAgICAgaW50IGdldE1heFJhbXBJbk1zKCkgY29uc3QgeyByZXR1cm4gbUdhaW4ubWF4X3JhbXBfbXM7IH0KIAogICAgIC8vIFRPRE86IHJlbW92ZSBkdW1wIGZyb20gaGVyZSAoc3BsaXQgc2VyaWFsaXphdGlvbikKLSAgICB2b2lkIGR1bXAoaW50IGZkLCBpbnQgc3BhY2VzLCBpbnQgaW5kZXgpIGNvbnN0OworICAgIHZvaWQgZHVtcChTdHJpbmc4ICpkc3QsIGludCBzcGFjZXMsIGludCBpbmRleCkgY29uc3Q7CiAKICAgICB2b2lkIGdldERlZmF1bHRDb25maWcoc3RydWN0IGF1ZGlvX2dhaW5fY29uZmlnICpjb25maWcpOwogICAgIHN0YXR1c190IGNoZWNrQ29uZmlnKGNvbnN0IHN0cnVjdCBhdWRpb19nYWluX2NvbmZpZyAqY29uZmlnKTsKZGlmZiAtLWdpdCBhL3NlcnZpY2VzL2F1ZGlvcG9saWN5L2NvbW1vbi9tYW5hZ2VyZGVmaW5pdGlvbnMvaW5jbHVkZS9BdWRpb0lPRGVzY3JpcHRvckludGVyZmFjZS5oIGIvc2VydmljZXMvYXVkaW9wb2xpY3kvY29tbW9uL21hbmFnZXJkZWZpbml0aW9ucy9pbmNsdWRlL0F1ZGlvSU9EZXNjcmlwdG9ySW50ZXJmYWNlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTU1NDEyZQotLS0gL2Rldi9udWxsCisrKyBiL3NlcnZpY2VzL2F1ZGlvcG9saWN5L2NvbW1vbi9tYW5hZ2VyZGVmaW5pdGlvbnMvaW5jbHVkZS9BdWRpb0lPRGVzY3JpcHRvckludGVyZmFjZS5oCkBAIC0wLDAgKzEsMzcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworbmFtZXNwYWNlIGFuZHJvaWQgeworCisvKioKKyAqIEludGVyZmFjZSBmb3IgSS9PIGRlc2NyaXB0b3JzIHRvIGltcGxlbWVudCBzbyBpbmZvcm1hdGlvbiBhYm91dCB0aGVpciBjb250ZXh0CisgKiBjYW4gYmUgcXVlcmllZCBhbmQgdXBkYXRlZC4KKyAqLworY2xhc3MgQXVkaW9JT0Rlc2NyaXB0b3JJbnRlcmZhY2UKK3sKK3B1YmxpYzoKKyAgICB2aXJ0dWFsIH5BdWRpb0lPRGVzY3JpcHRvckludGVyZmFjZSgpIHt9OworCisgICAgdmlydHVhbCBhdWRpb19jb25maWdfYmFzZV90IGdldENvbmZpZygpIGNvbnN0ID0gMDsKKworICAgIHZpcnR1YWwgYXVkaW9fcGF0Y2hfaGFuZGxlX3QgZ2V0UGF0Y2hIYW5kbGUoKSBjb25zdCA9IDA7CisKKyAgICB2aXJ0dWFsIHZvaWQgc2V0UGF0Y2hIYW5kbGUoYXVkaW9fcGF0Y2hfaGFuZGxlX3QgaGFuZGxlKSA9IDA7Cit9OworCit9IC8vIG5hbWVzcGFjZSBhbmRyb2lkCmRpZmYgLS1naXQgYS9zZXJ2aWNlcy9hdWRpb3BvbGljeS9jb21tb24vbWFuYWdlcmRlZmluaXRpb25zL2luY2x1ZGUvQXVkaW9JbnB1dERlc2NyaXB0b3IuaCBiL3NlcnZpY2VzL2F1ZGlvcG9saWN5L2NvbW1vbi9tYW5hZ2VyZGVmaW5pdGlvbnMvaW5jbHVkZS9BdWRpb0lucHV0RGVzY3JpcHRvci5oCmluZGV4IGIyNWQ2ZDQuLjZlNGMwNDQgMTAwNjQ0Ci0tLSBhL3NlcnZpY2VzL2F1ZGlvcG9saWN5L2NvbW1vbi9tYW5hZ2VyZGVmaW5pdGlvbnMvaW5jbHVkZS9BdWRpb0lucHV0RGVzY3JpcHRvci5oCisrKyBiL3NlcnZpY2VzL2F1ZGlvcG9saWN5L2NvbW1vbi9tYW5hZ2VyZGVmaW5pdGlvbnMvaW5jbHVkZS9BdWRpb0lucHV0RGVzY3JpcHRvci5oCkBAIC0xNiwzNiArMTYsMzcgQEAKIAogI3ByYWdtYSBvbmNlCiAKLSNpbmNsdWRlICJBdWRpb1BvcnQuaCIKLSNpbmNsdWRlICJBdWRpb1Nlc3Npb24uaCIKLSNpbmNsdWRlICJBdWRpb1Nlc3Npb25JbmZvUHJvdmlkZXIuaCIKLSNpbmNsdWRlIDx1dGlscy9FcnJvcnMuaD4KICNpbmNsdWRlIDxzeXN0ZW0vYXVkaW8uaD4KKyNpbmNsdWRlIDx1dGlscy9FcnJvcnMuaD4KICNpbmNsdWRlIDx1dGlscy9Tb3J0ZWRWZWN0b3IuaD4KICNpbmNsdWRlIDx1dGlscy9LZXllZFZlY3Rvci5oPgorI2luY2x1ZGUgIkF1ZGlvSU9EZXNjcmlwdG9ySW50ZXJmYWNlLmgiCisjaW5jbHVkZSAiQXVkaW9Qb3J0LmgiCisjaW5jbHVkZSAiQ2xpZW50RGVzY3JpcHRvci5oIgogCiBuYW1lc3BhY2UgYW5kcm9pZCB7CiAKIGNsYXNzIElPUHJvZmlsZTsKIGNsYXNzIEF1ZGlvTWl4OworY2xhc3MgQXVkaW9Qb2xpY3lDbGllbnRJbnRlcmZhY2U7CiAKIC8vIGRlc2NyaXB0b3IgZm9yIGF1ZGlvIGlucHV0cy4gVXNlZCB0byBtYWludGFpbiBjdXJyZW50IGNvbmZpZ3VyYXRpb24gb2YgZWFjaCBvcGVuZWQgYXVkaW8gaW5wdXQKIC8vIGFuZCBrZWVwIHRyYWNrIG9mIHRoZSB1c2FnZSBvZiB0aGlzIGlucHV0LgotY2xhc3MgQXVkaW9JbnB1dERlc2NyaXB0b3I6IHB1YmxpYyBBdWRpb1BvcnRDb25maWcsIHB1YmxpYyBBdWRpb1Nlc3Npb25JbmZvUHJvdmlkZXIKK2NsYXNzIEF1ZGlvSW5wdXREZXNjcmlwdG9yOiBwdWJsaWMgQXVkaW9Qb3J0Q29uZmlnLCBwdWJsaWMgQXVkaW9JT0Rlc2NyaXB0b3JJbnRlcmZhY2UKKyAgICAsIHB1YmxpYyBDbGllbnRNYXBIYW5kbGVyPFJlY29yZENsaWVudERlc2NyaXB0b3I+CiB7CiBwdWJsaWM6CiAgICAgZXhwbGljaXQgQXVkaW9JbnB1dERlc2NyaXB0b3IoY29uc3Qgc3A8SU9Qcm9maWxlPiYgcHJvZmlsZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBdWRpb1BvbGljeUNsaWVudEludGVyZmFjZSAqY2xpZW50SW50ZXJmYWNlKTsKICAgICBhdWRpb19wb3J0X2hhbmRsZV90IGdldElkKCkgY29uc3Q7CiAgICAgYXVkaW9fbW9kdWxlX2hhbmRsZV90IGdldE1vZHVsZUhhbmRsZSgpIGNvbnN0OwotICAgIHVpbnQzMl90IGdldE9wZW5SZWZDb3VudCgpIGNvbnN0OwogCi0gICAgc3RhdHVzX3QgICAgZHVtcChpbnQgZmQpOworICAgIHZvaWQgZHVtcChTdHJpbmc4ICpkc3QpIGNvbnN0IG92ZXJyaWRlOwogCi0gICAgYXVkaW9faW9faGFuZGxlX3QgICAgICAgICAgICAgbUlvSGFuZGxlOyAgICAgICAvLyBpbnB1dCBoYW5kbGUKLSAgICBhdWRpb19kZXZpY2VzX3QgICAgICAgICAgICAgICBtRGV2aWNlOyAgICAgICAgIC8vIGN1cnJlbnQgZGV2aWNlIHRoaXMgaW5wdXQgaXMgcm91dGVkIHRvCi0gICAgQXVkaW9NaXggICAgICAgICAgICAgICAgICAgICAgKm1Qb2xpY3lNaXg7ICAgICAvLyBub24gTlVMTCB3aGVuIHVzZWQgYnkgYSBkeW5hbWljIHBvbGljeQotICAgIGNvbnN0IHNwPElPUHJvZmlsZT4gICAgICAgICAgIG1Qcm9maWxlOyAgICAgICAgLy8gSS9PIHByb2ZpbGUgdGhpcyBvdXRwdXQgZGVyaXZlcyBmcm9tCisgICAgYXVkaW9faW9faGFuZGxlX3QgICBtSW9IYW5kbGUgPSBBVURJT19JT19IQU5ETEVfTk9ORTsgLy8gaW5wdXQgaGFuZGxlCisgICAgYXVkaW9fZGV2aWNlc190ICAgICBtRGV2aWNlID0gQVVESU9fREVWSUNFX05PTkU7ICAvLyBjdXJyZW50IGRldmljZSB0aGlzIGlucHV0IGlzIHJvdXRlZCB0bworICAgIEF1ZGlvTWl4ICAgICAgICAgICAgKm1Qb2xpY3lNaXggPSBudWxscHRyOyAgICAgICAgLy8gbm9uIE5VTEwgd2hlbiB1c2VkIGJ5IGEgZHluYW1pYyBwb2xpY3kKKyAgICBjb25zdCBzcDxJT1Byb2ZpbGU+IG1Qcm9maWxlOyAgICAgICAgICAgICAgICAgICAgIC8vIEkvTyBwcm9maWxlIHRoaXMgb3V0cHV0IGRlcml2ZXMgZnJvbQogCiAgICAgdmlydHVhbCB2b2lkIHRvQXVkaW9Qb3J0Q29uZmlnKHN0cnVjdCBhdWRpb19wb3J0X2NvbmZpZyAqZHN0Q29uZmlnLAogICAgICAgICAgICAgY29uc3Qgc3RydWN0IGF1ZGlvX3BvcnRfY29uZmlnICpzcmNDb25maWcgPSBOVUxMKSBjb25zdDsKQEAgLTU1LDIzICs1NiwxOCBAQAogICAgIFNvcnRlZFZlY3RvcjxhdWRpb19zZXNzaW9uX3Q+IGdldFByZWVtcHRlZFNlc3Npb25zKCkgY29uc3Q7CiAgICAgYm9vbCBoYXNQcmVlbXB0ZWRTZXNzaW9uKGF1ZGlvX3Nlc3Npb25fdCBzZXNzaW9uKSBjb25zdDsKICAgICB2b2lkIGNsZWFyUHJlZW1wdGVkU2Vzc2lvbnMoKTsKLSAgICBib29sIGlzQWN0aXZlKCkgY29uc3Q7CisgICAgYm9vbCBpc0FjdGl2ZSgpIGNvbnN0IHsgcmV0dXJuIG1HbG9iYWxBY3RpdmVDb3VudCA+IDA7IH0KICAgICBib29sIGlzU291cmNlQWN0aXZlKGF1ZGlvX3NvdXJjZV90IHNvdXJjZSkgY29uc3Q7CiAgICAgYXVkaW9fc291cmNlX3QgaW5wdXRTb3VyY2UoYm9vbCBhY3RpdmVPbmx5ID0gZmFsc2UpIGNvbnN0OwogICAgIGJvb2wgaXNTb3VuZFRyaWdnZXIoKSBjb25zdDsKLSAgICBzdGF0dXNfdCBhZGRBdWRpb1Nlc3Npb24oYXVkaW9fc2Vzc2lvbl90IHNlc3Npb24sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHNwPEF1ZGlvU2Vzc2lvbj4mIGF1ZGlvU2Vzc2lvbik7Ci0gICAgc3RhdHVzX3QgcmVtb3ZlQXVkaW9TZXNzaW9uKGF1ZGlvX3Nlc3Npb25fdCBzZXNzaW9uKTsKLSAgICBzcDxBdWRpb1Nlc3Npb24+IGdldEF1ZGlvU2Vzc2lvbihhdWRpb19zZXNzaW9uX3Qgc2Vzc2lvbikgY29uc3Q7Ci0gICAgQXVkaW9TZXNzaW9uQ29sbGVjdGlvbiBnZXRBdWRpb1Nlc3Npb25zKGJvb2wgYWN0aXZlT25seSkgY29uc3Q7Ci0gICAgc2l6ZV90IGdldEF1ZGlvU2Vzc2lvbkNvdW50KGJvb2wgYWN0aXZlT25seSkgY29uc3Q7CiAgICAgYXVkaW9fc291cmNlX3QgZ2V0SGlnaGVzdFByaW9yaXR5U291cmNlKGJvb2wgYWN0aXZlT25seSkgY29uc3Q7CisgICAgdm9pZCBzZXRDbGllbnRBY3RpdmUoY29uc3Qgc3A8UmVjb3JkQ2xpZW50RGVzY3JpcHRvcj4mIGNsaWVudCwgYm9vbCBhY3RpdmUpOworICAgIGludDMyX3QgYWN0aXZlQ291bnQoKSB7IHJldHVybiBtR2xvYmFsQWN0aXZlQ291bnQ7IH0KIAotICAgIC8vIGltcGxlbWVudGF0aW9uIG9mIEF1ZGlvU2Vzc2lvbkluZm9Qcm92aWRlcgotICAgIHZpcnR1YWwgYXVkaW9fY29uZmlnX2Jhc2VfdCBnZXRDb25maWcoKSBjb25zdDsKLSAgICB2aXJ0dWFsIGF1ZGlvX3BhdGNoX2hhbmRsZV90IGdldFBhdGNoSGFuZGxlKCkgY29uc3Q7Ci0KLSAgICB2b2lkIHNldFBhdGNoSGFuZGxlKGF1ZGlvX3BhdGNoX2hhbmRsZV90IGhhbmRsZSk7CisgICAgLy8gaW1wbGVtZW50YXRpb24gb2YgQXVkaW9JT0Rlc2NyaXB0b3JJbnRlcmZhY2UKKyAgICBhdWRpb19jb25maWdfYmFzZV90IGdldENvbmZpZygpIGNvbnN0IG92ZXJyaWRlOworICAgIGF1ZGlvX3BhdGNoX2hhbmRsZV90IGdldFBhdGNoSGFuZGxlKCkgY29uc3Qgb3ZlcnJpZGU7CisgICAgdm9pZCBzZXRQYXRjaEhhbmRsZShhdWRpb19wYXRjaF9oYW5kbGVfdCBoYW5kbGUpIG92ZXJyaWRlOwogCiAgICAgc3RhdHVzX3Qgb3Blbihjb25zdCBhdWRpb19jb25maWdfdCAqY29uZmlnLAogICAgICAgICAgICAgICAgICAgYXVkaW9fZGV2aWNlc190IGRldmljZSwKQEAgLTgwLDE4ICs3NiwyMyBAQAogICAgICAgICAgICAgICAgICAgYXVkaW9faW5wdXRfZmxhZ3NfdCBmbGFncywKICAgICAgICAgICAgICAgICAgIGF1ZGlvX2lvX2hhbmRsZV90ICppbnB1dCk7CiAgICAgLy8gQ2FsbGVkIHdoZW4gYSBzdHJlYW0gaXMgYWJvdXQgdG8gYmUgc3RhcnRlZC4KLSAgICAvLyBOb3RlOiBjYWxsZWQgYWZ0ZXIgQXVkaW9TZXNzaW9uOjpjaGFuZ2VBY3RpdmVDb3VudCgxKQorICAgIC8vIE5vdGU6IGNhbGxlZCBhZnRlciBzZXRDbGllbnRBY3RpdmUoY2xpZW50LCB0cnVlKQogICAgIHN0YXR1c190IHN0YXJ0KCk7CiAgICAgLy8gQ2FsbGVkIGFmdGVyIGEgc3RyZWFtIGlzIHN0b3BwZWQKLSAgICAvLyBOb3RlOiBjYWxsZWQgYWZ0ZXIgQXVkaW9TZXNzaW9uOjpjaGFuZ2VBY3RpdmVDb3VudCgtMSkKKyAgICAvLyBOb3RlOiBjYWxsZWQgYWZ0ZXIgc2V0Q2xpZW50QWN0aXZlKGNsaWVudCwgZmFsc2UpCiAgICAgdm9pZCBzdG9wKCk7CiAgICAgdm9pZCBjbG9zZSgpOwogCi1wcml2YXRlOgotICAgIGF1ZGlvX3BhdGNoX2hhbmRsZV90ICAgICAgICAgIG1QYXRjaEhhbmRsZTsKLSAgICBhdWRpb19wb3J0X2hhbmRsZV90ICAgICAgICAgICBtSWQ7Ci0gICAgLy8gYXVkaW8gc2Vzc2lvbnMgYXR0YWNoZWQgdG8gdGhpcyBpbnB1dAotICAgIEF1ZGlvU2Vzc2lvbkNvbGxlY3Rpb24gICAgICAgIG1TZXNzaW9uczsKKyAgICBSZWNvcmRDbGllbnRWZWN0b3IgZ2V0Q2xpZW50c0ZvclNlc3Npb24oYXVkaW9fc2Vzc2lvbl90IHNlc3Npb24pOworICAgIFJlY29yZENsaWVudFZlY3RvciBjbGllbnRzTGlzdChib29sIGFjdGl2ZU9ubHkgPSBmYWxzZSwKKyAgICAgICAgYXVkaW9fc291cmNlX3Qgc291cmNlID0gQVVESU9fU09VUkNFX0RFRkFVTFQsIGJvb2wgcHJlZmVycmVkRGV2aWNlT25seSA9IGZhbHNlKSBjb25zdDsKKworIHByaXZhdGU6CisKKyAgICB2b2lkIHVwZGF0ZUNsaWVudFJlY29yZGluZ0NvbmZpZ3VyYXRpb24oaW50IGV2ZW50LCBjb25zdCBzcDxSZWNvcmRDbGllbnREZXNjcmlwdG9yPiYgY2xpZW50KTsKKworICAgIGF1ZGlvX3BhdGNoX2hhbmRsZV90IG1QYXRjaEhhbmRsZSA9IEFVRElPX1BBVENIX0hBTkRMRV9OT05FOworICAgIGF1ZGlvX3BvcnRfaGFuZGxlX3QgIG1JZCA9IEFVRElPX1BPUlRfSEFORExFX05PTkU7CiAgICAgLy8gQmVjYXVzZSBhIHByZWVtcHRpYmxlIGNhcHR1cmUgc2Vzc2lvbiBjYW4gcHJlZW1wdCBhbm90aGVyIG9uZSwgd2UgZW5kIHVwIGluIGFuIGVuZGxlc3MgbG9vcAogICAgIC8vIHNpdHVhdGlvbiB3ZXJlIGVhY2ggc2Vzc2lvbiBpcyBhbGxvd2VkIHRvIHJlc3RhcnQgYWZ0ZXIgYmVpbmcgcHJlZW1wdGVkLAogICAgIC8vIHRodXMgcHJlZW1wdGluZyB0aGUgb3RoZXIgb25lIHdoaWNoIHJlc3RhcnRzIGFuZCBzbyBvbi4KQEAgLTk5LDcgKzEwMCw4IEBACiAgICAgLy8gYSBwYXJ0aWN1bGFyIGlucHV0IHN0YXJ0ZWQgYW5kIHByZXZlbnQgcHJlZW1wdGlvbiBvZiB0aGlzIGFjdGl2ZSBpbnB1dCBieSB0aGlzIHNlc3Npb24uCiAgICAgLy8gV2UgYWxzbyBpbmhlcml0IHNlc3Npb25zIGZyb20gdGhlIHByZWVtcHRlZCBpbnB1dCB0byBhdm9pZCBhIDMgd2F5IHByZWVtcHRpb24gbG9vcCBldGMuLi4KICAgICBTb3J0ZWRWZWN0b3I8YXVkaW9fc2Vzc2lvbl90PiBtUHJlZW1wdGVkU2Vzc2lvbnM7Ci0gICAgQXVkaW9Qb2xpY3lDbGllbnRJbnRlcmZhY2UgKm1DbGllbnRJbnRlcmZhY2U7CisgICAgQXVkaW9Qb2xpY3lDbGllbnRJbnRlcmZhY2UgKiBjb25zdCBtQ2xpZW50SW50ZXJmYWNlOworICAgIGludDMyX3QgbUdsb2JhbEFjdGl2ZUNvdW50ID0gMDsgIC8vIG5vbi1jbGllbnQtc3BlY2lmaWMgYWN0aXZpdHkgcmVmIGNvdW50CiB9OwogCiBjbGFzcyBBdWRpb0lucHV0Q29sbGVjdGlvbiA6CkBAIC0xMjMsNyArMTI1LDkgQEAKIAogICAgIGF1ZGlvX2RldmljZXNfdCBnZXRTdXBwb3J0ZWREZXZpY2VzKGF1ZGlvX2lvX2hhbmRsZV90IGhhbmRsZSkgY29uc3Q7CiAKLSAgICBzdGF0dXNfdCBkdW1wKGludCBmZCkgY29uc3Q7CisgICAgc3A8QXVkaW9JbnB1dERlc2NyaXB0b3I+IGdldElucHV0Rm9yQ2xpZW50KGF1ZGlvX3BvcnRfaGFuZGxlX3QgcG9ydElkKTsKKworICAgIHZvaWQgZHVtcChTdHJpbmc4ICpkc3QpIGNvbnN0OwogfTsKIAogCmRpZmYgLS1naXQgYS9zZXJ2aWNlcy9hdWRpb3BvbGljeS9jb21tb24vbWFuYWdlcmRlZmluaXRpb25zL2luY2x1ZGUvQXVkaW9PdXRwdXREZXNjcmlwdG9yLmggYi9zZXJ2aWNlcy9hdWRpb3BvbGljeS9jb21tb24vbWFuYWdlcmRlZmluaXRpb25zL2luY2x1ZGUvQXVkaW9PdXRwdXREZXNjcmlwdG9yLmgKaW5kZXggNWU1ZDM4Yi4uZWQ5OTVlMCAxMDA2NDQKLS0tIGEvc2VydmljZXMvYXVkaW9wb2xpY3kvY29tbW9uL21hbmFnZXJkZWZpbml0aW9ucy9pbmNsdWRlL0F1ZGlvT3V0cHV0RGVzY3JpcHRvci5oCisrKyBiL3NlcnZpY2VzL2F1ZGlvcG9saWN5L2NvbW1vbi9tYW5hZ2VyZGVmaW5pdGlvbnMvaW5jbHVkZS9BdWRpb091dHB1dERlc2NyaXB0b3IuaApAQCAtMTgsMTMgKzE4LDE0IEBACiAKICNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KIAotI2luY2x1ZGUgIkF1ZGlvUG9ydC5oIgotI2luY2x1ZGUgPFJvdXRpbmdTdHJhdGVneS5oPgogI2luY2x1ZGUgPHV0aWxzL0Vycm9ycy5oPgogI2luY2x1ZGUgPHV0aWxzL1RpbWVycy5oPgogI2luY2x1ZGUgPHV0aWxzL0tleWVkVmVjdG9yLmg+CiAjaW5jbHVkZSA8c3lzdGVtL2F1ZGlvLmg+Ci0jaW5jbHVkZSAiQXVkaW9Tb3VyY2VEZXNjcmlwdG9yLmgiCisjaW5jbHVkZSA8Um91dGluZ1N0cmF0ZWd5Lmg+CisjaW5jbHVkZSAiQXVkaW9JT0Rlc2NyaXB0b3JJbnRlcmZhY2UuaCIKKyNpbmNsdWRlICJBdWRpb1BvcnQuaCIKKyNpbmNsdWRlICJDbGllbnREZXNjcmlwdG9yLmgiCiAKIG5hbWVzcGFjZSBhbmRyb2lkIHsKIApAQCAtMzUsMTQgKzM2LDE1IEBACiAKIC8vIGRlc2NyaXB0b3IgZm9yIGF1ZGlvIG91dHB1dHMuIFVzZWQgdG8gbWFpbnRhaW4gY3VycmVudCBjb25maWd1cmF0aW9uIG9mIGVhY2ggb3BlbmVkIGF1ZGlvIG91dHB1dAogLy8gYW5kIGtlZXAgdHJhY2sgb2YgdGhlIHVzYWdlIG9mIHRoaXMgb3V0cHV0IGJ5IGVhY2ggYXVkaW8gc3RyZWFtIHR5cGUuCi1jbGFzcyBBdWRpb091dHB1dERlc2NyaXB0b3I6IHB1YmxpYyBBdWRpb1BvcnRDb25maWcKK2NsYXNzIEF1ZGlvT3V0cHV0RGVzY3JpcHRvcjogcHVibGljIEF1ZGlvUG9ydENvbmZpZywgcHVibGljIEF1ZGlvSU9EZXNjcmlwdG9ySW50ZXJmYWNlCisgICAgLCBwdWJsaWMgQ2xpZW50TWFwSGFuZGxlcjxUcmFja0NsaWVudERlc2NyaXB0b3I+CiB7CiBwdWJsaWM6CiAgICAgQXVkaW9PdXRwdXREZXNjcmlwdG9yKGNvbnN0IHNwPEF1ZGlvUG9ydD4mIHBvcnQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIEF1ZGlvUG9saWN5Q2xpZW50SW50ZXJmYWNlICpjbGllbnRJbnRlcmZhY2UpOwogICAgIHZpcnR1YWwgfkF1ZGlvT3V0cHV0RGVzY3JpcHRvcigpIHt9CiAKLSAgICBzdGF0dXNfdCAgICBkdW1wKGludCBmZCk7CisgICAgdm9pZCBkdW1wKFN0cmluZzggKmRzdCkgY29uc3Qgb3ZlcnJpZGU7CiAgICAgdm9pZCAgICAgICAgbG9nKGNvbnN0IGNoYXIqIGluZGVudCk7CiAKICAgICBhdWRpb19wb3J0X2hhbmRsZV90IGdldElkKCkgY29uc3Q7CkBAIC01OSw3ICs2MSwyMiBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgYXVkaW9fZGV2aWNlc190IGRldmljZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90IGRlbGF5TXMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIGZvcmNlKTsKLSAgICB2aXJ0dWFsIHZvaWQgY2hhbmdlUmVmQ291bnQoYXVkaW9fc3RyZWFtX3R5cGVfdCBzdHJlYW0sIGludCBkZWx0YSk7CisKKyAgICAvKioKKyAgICAgKiBDaGFuZ2VzIHRoZSBzdHJlYW0gYWN0aXZlIGNvdW50IGFuZCBtQWN0aXZlQ2xpZW50cyBvbmx5LgorICAgICAqIFRoaXMgZG9lcyBub3QgY2hhbmdlIHRoZSBjbGllbnQtPmFjdGl2ZSgpIHN0YXRlIG9yIHRoZSBvdXRwdXQgZGVzY3JpcHRvcidzCisgICAgICogZ2xvYmFsIGFjdGl2ZSBjb3VudC4KKyAgICAgKi8KKyAgICB2aXJ0dWFsIHZvaWQgY2hhbmdlU3RyZWFtQWN0aXZlQ291bnQoY29uc3Qgc3A8VHJhY2tDbGllbnREZXNjcmlwdG9yPiYgY2xpZW50LCBpbnQgZGVsdGEpOworICAgICAgICAgICAgdWludDMyX3Qgc3RyZWFtQWN0aXZlQ291bnQoYXVkaW9fc3RyZWFtX3R5cGVfdCBzdHJlYW0pIGNvbnN0CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgeyByZXR1cm4gbUFjdGl2ZUNvdW50W3N0cmVhbV07IH0KKworICAgIC8qKgorICAgICAqIENoYW5nZXMgdGhlIGNsaWVudC0+YWN0aXZlKCkgc3RhdGUgYW5kIHRoZSBvdXRwdXQgZGVzY3JpcHRvcidzIGdsb2JhbCBhY3RpdmUgY291bnQsCisgICAgICogYWxvbmcgd2l0aCB0aGUgc3RyZWFtIGFjdGl2ZSBjb3VudCBhbmQgbUFjdGl2ZUNsaWVudHMuCisgICAgICogVGhlIGNsaWVudCBtdXN0IGJlIHByZXZpb3VzbHkgYWRkZWQgYnkgdGhlIGJhc2UgY2xhc3MgYWRkQ2xpZW50KCkuCisgICAgICovCisgICAgICAgICAgICB2b2lkIHNldENsaWVudEFjdGl2ZShjb25zdCBzcDxUcmFja0NsaWVudERlc2NyaXB0b3I+JiBjbGllbnQsIGJvb2wgYWN0aXZlKTsKIAogICAgIGJvb2wgaXNBY3RpdmUodWludDMyX3QgaW5QYXN0TXMgPSAwKSBjb25zdDsKICAgICBib29sIGlzU3RyZWFtQWN0aXZlKGF1ZGlvX3N0cmVhbV90eXBlX3Qgc3RyZWFtLApAQCAtNzMsMjIgKzkwLDU2IEBACiAKICAgICBhdWRpb19tb2R1bGVfaGFuZGxlX3QgZ2V0TW9kdWxlSGFuZGxlKCkgY29uc3Q7CiAKLSAgICBhdWRpb19wYXRjaF9oYW5kbGVfdCBnZXRQYXRjaEhhbmRsZSgpIGNvbnN0IHsgcmV0dXJuIG1QYXRjaEhhbmRsZTsgfTsKLSAgICB2b2lkIHNldFBhdGNoSGFuZGxlKGF1ZGlvX3BhdGNoX2hhbmRsZV90IGhhbmRsZSkgeyBtUGF0Y2hIYW5kbGUgPSBoYW5kbGU7IH07CisgICAgLy8gaW1wbGVtZW50YXRpb24gb2YgQXVkaW9JT0Rlc2NyaXB0b3JJbnRlcmZhY2UKKyAgICBhdWRpb19jb25maWdfYmFzZV90IGdldENvbmZpZygpIGNvbnN0IG92ZXJyaWRlOworICAgIGF1ZGlvX3BhdGNoX2hhbmRsZV90IGdldFBhdGNoSGFuZGxlKCkgY29uc3Qgb3ZlcnJpZGU7CisgICAgdm9pZCBzZXRQYXRjaEhhbmRsZShhdWRpb19wYXRjaF9oYW5kbGVfdCBoYW5kbGUpIG92ZXJyaWRlOwogCi0gICAgc3A8QXVkaW9Qb3J0PiAgICAgICBtUG9ydDsKLSAgICBhdWRpb19kZXZpY2VzX3QgbURldmljZTsgICAgICAgICAgICAgICAgICAgLy8gY3VycmVudCBkZXZpY2UgdGhpcyBvdXRwdXQgaXMgcm91dGVkIHRvCi0gICAgdWludDMyX3QgbVJlZkNvdW50W0FVRElPX1NUUkVBTV9DTlRdOyAvLyBudW1iZXIgb2Ygc3RyZWFtcyBvZiBlYWNoIHR5cGUgdXNpbmcgdGhpcyBvdXRwdXQKKyAgICBUcmFja0NsaWVudFZlY3RvciBjbGllbnRzTGlzdChib29sIGFjdGl2ZU9ubHkgPSBmYWxzZSwKKyAgICAgICAgcm91dGluZ19zdHJhdGVneSBzdHJhdGVneSA9IFNUUkFURUdZX05PTkUsIGJvb2wgcHJlZmVycmVkRGV2aWNlT25seSA9IGZhbHNlKSBjb25zdDsKKworICAgIC8vIG92ZXJyaWRlIENsaWVudE1hcEhhbmRsZXIgdG8gYWJvcnQgd2hlbiByZW1vdmluZyBhIGNsaWVudCB3aGVuIGFjdGl2ZS4KKyAgICB2b2lkIHJlbW92ZUNsaWVudChhdWRpb19wb3J0X2hhbmRsZV90IHBvcnRJZCkgb3ZlcnJpZGUgeworICAgICAgICBhdXRvIGNsaWVudCA9IGdldENsaWVudChwb3J0SWQpOworICAgICAgICBMT0dfQUxXQVlTX0ZBVEFMX0lGKGNsaWVudC5nZXQoKSA9PSBudWxscHRyLAorICAgICAgICAgICAgICAgICIlcyglZCk6IG5vbmV4aXN0ZW50IGNsaWVudCBwb3J0SWQgJWQiLCBfX2Z1bmNfXywgbUlkLCBwb3J0SWQpOworICAgICAgICAvLyBpdCBpcyBwb3NzaWJsZSB0aGF0IHdoZW4gYSBjbGllbnQgaXMgcmVtb3ZlZCwgd2UgY291bGQgcmVtb3ZlIGl0cworICAgICAgICAvLyBhc3NvY2lhdGVkIGFjdGl2ZSBjb3VudCBieSBjYWxsaW5nIGNoYW5nZVN0cmVhbUFjdGl2ZUNvdW50KCksCisgICAgICAgIC8vIGJ1dCB0aGF0IHdvdWxkIGJlIGhpZGluZyBhIHByb2JsZW0sIHNvIHdlIGxvZyBmYXRhbCBpbnN0ZWFkLgorICAgICAgICBhdXRvIGl0MiA9IG1BY3RpdmVDbGllbnRzLmZpbmQoY2xpZW50KTsKKyAgICAgICAgTE9HX0FMV0FZU19GQVRBTF9JRihpdDIgIT0gbUFjdGl2ZUNsaWVudHMuZW5kKCksCisgICAgICAgICAgICAgICAgIiVzKCVkKSByZW1vdmluZyBjbGllbnQgcG9ydElkICVkIHdoaWNoIGlzIGFjdGl2ZSAoY291bnQgJXp1KSIsCisgICAgICAgICAgICAgICAgX19mdW5jX18sIG1JZCwgcG9ydElkLCBpdDItPnNlY29uZCk7CisgICAgICAgIENsaWVudE1hcEhhbmRsZXI8VHJhY2tDbGllbnREZXNjcmlwdG9yPjo6cmVtb3ZlQ2xpZW50KHBvcnRJZCk7CisgICAgfQorCisgICAgdXNpbmcgQWN0aXZlQ2xpZW50TWFwID0gc3RkOjptYXA8c3A8VHJhY2tDbGllbnREZXNjcmlwdG9yPiwgc2l6ZV90IC8qIGNvdW50ICovPjsKKyAgICAvLyByZXF1aXJlZCBmb3IgZHVwbGljYXRpbmcgdGhyZWFkCisgICAgY29uc3QgQWN0aXZlQ2xpZW50TWFwJiBnZXRBY3RpdmVDbGllbnRzKCkgY29uc3QgeworICAgICAgICByZXR1cm4gbUFjdGl2ZUNsaWVudHM7CisgICAgfQorCisgICAgYXVkaW9fZGV2aWNlc190IG1EZXZpY2UgPSBBVURJT19ERVZJQ0VfTk9ORTsgLy8gY3VycmVudCBkZXZpY2UgdGhpcyBvdXRwdXQgaXMgcm91dGVkIHRvCiAgICAgbnNlY3NfdCBtU3RvcFRpbWVbQVVESU9fU1RSRUFNX0NOVF07Ci0gICAgZmxvYXQgbUN1clZvbHVtZVtBVURJT19TVFJFQU1fQ05UXTsgICAvLyBjdXJyZW50IHN0cmVhbSB2b2x1bWUgaW4gZEIKLSAgICBpbnQgbU11dGVDb3VudFtBVURJT19TVFJFQU1fQ05UXTsgICAgIC8vIG11dGUgcmVxdWVzdCBjb3VudGVyCisgICAgaW50IG1NdXRlQ291bnRbQVVESU9fU1RSRUFNX0NOVF07ICAgICAgICAgICAgLy8gbXV0ZSByZXF1ZXN0IGNvdW50ZXIKICAgICBib29sIG1TdHJhdGVneU11dGVkQnlEZXZpY2VbTlVNX1NUUkFURUdJRVNdOyAvLyBzdHJhdGVnaWVzIG11dGVkIGJlY2F1c2Ugb2YgaW5jb21wYXRpYmxlCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gZGV2aWNlIHNlbGVjdGlvbi4gU2VlIGNoZWNrRGV2aWNlTXV0ZVN0cmF0ZWdpZXMoKQotICAgIEF1ZGlvUG9saWN5Q2xpZW50SW50ZXJmYWNlICptQ2xpZW50SW50ZXJmYWNlOworICAgIEF1ZGlvTWl4ICptUG9saWN5TWl4ID0gbnVsbHB0cjsgICAgICAgICAgICAgIC8vIG5vbiBOVUxMIHdoZW4gdXNlZCBieSBhIGR5bmFtaWMgcG9saWN5CiAKIHByb3RlY3RlZDoKLSAgICBhdWRpb19wYXRjaF9oYW5kbGVfdCBtUGF0Y2hIYW5kbGU7Ci0gICAgYXVkaW9fcG9ydF9oYW5kbGVfdCBtSWQ7CisgICAgY29uc3Qgc3A8QXVkaW9Qb3J0PiBtUG9ydDsKKyAgICBBdWRpb1BvbGljeUNsaWVudEludGVyZmFjZSAqIGNvbnN0IG1DbGllbnRJbnRlcmZhY2U7CisgICAgZmxvYXQgbUN1clZvbHVtZVtBVURJT19TVFJFQU1fQ05UXTsgICAvLyBjdXJyZW50IHN0cmVhbSB2b2x1bWUgaW4gZEIKKyAgICB1aW50MzJfdCBtQWN0aXZlQ291bnRbQVVESU9fU1RSRUFNX0NOVF07IC8vIG51bWJlciBvZiBzdHJlYW1zIG9mIGVhY2ggdHlwZSBhY3RpdmUgb24gdGhpcyBvdXRwdXQKKyAgICB1aW50MzJfdCBtR2xvYmFsQWN0aXZlQ291bnQgPSAwOyAgLy8gbm9uLWNsaWVudC1zcGVjaWZpYyBhY3RpdmUgY291bnQKKyAgICBhdWRpb19wYXRjaF9oYW5kbGVfdCBtUGF0Y2hIYW5kbGUgPSBBVURJT19QQVRDSF9IQU5ETEVfTk9ORTsKKyAgICBhdWRpb19wb3J0X2hhbmRsZV90IG1JZCA9IEFVRElPX1BPUlRfSEFORExFX05PTkU7CisKKyAgICAvLyBUaGUgQWN0aXZlQ2xpZW50TWFwIHNob3dzIHRoZSBjbGllbnRzIHRoYXQgY29udHJpYnV0ZSB0byB0aGUgc3RyZWFtcyBjb3VudHMKKyAgICAvLyBhbmQgbWF5IGluY2x1ZGUgdXBzdHJlYW0gY2xpZW50cyBmcm9tIGEgZHVwbGljYXRpbmcgdGhyZWFkLgorICAgIC8vIENvbXBhcmUgd2l0aCB0aGUgQ2xpZW50TWFwIChtQ2xpZW50cykgd2hpY2ggYXJlIGV4dGVybmFsIEF1ZGlvVHJhY2sgY2xpZW50cyBvZiB0aGUKKyAgICAvLyBvdXRwdXQgZGVzY3JpcHRvciAoYW5kIGRvIG5vdCBjb3VudCBpbnRlcm5hbCBQYXRjaFRyYWNrcykuCisgICAgQWN0aXZlQ2xpZW50TWFwIG1BY3RpdmVDbGllbnRzOwogfTsKIAogLy8gQXVkaW8gb3V0cHV0IGRyaXZlbiBieSBhIHNvZnR3YXJlIG1peGVyIGluIGF1ZGlvIGZsaW5nZXIuCkBAIC05OSw4ICsxNTAsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIEF1ZGlvUG9saWN5Q2xpZW50SW50ZXJmYWNlICpjbGllbnRJbnRlcmZhY2UpOwogICAgIHZpcnR1YWwgflN3QXVkaW9PdXRwdXREZXNjcmlwdG9yKCkge30KIAotICAgIHN0YXR1c190ICAgIGR1bXAoaW50IGZkKTsKLQorICAgICAgICAgICAgdm9pZCBkdW1wKFN0cmluZzggKmRzdCkgY29uc3Qgb3ZlcnJpZGU7CiAgICAgdmlydHVhbCBhdWRpb19kZXZpY2VzX3QgZGV2aWNlKCkgY29uc3Q7CiAgICAgdmlydHVhbCBib29sIHNoYXJlc0h3TW9kdWxlV2l0aChjb25zdCBzcDxBdWRpb091dHB1dERlc2NyaXB0b3I+JiBvdXRwdXREZXNjKTsKICAgICB2aXJ0dWFsIGF1ZGlvX2RldmljZXNfdCBzdXBwb3J0ZWREZXZpY2VzKCk7CkBAIC0xMDksNyArMTU5LDggQEAKICAgICB2aXJ0dWFsIGJvb2wgaXNGaXhlZFZvbHVtZShhdWRpb19kZXZpY2VzX3QgZGV2aWNlKTsKICAgICB2aXJ0dWFsIHNwPEF1ZGlvT3V0cHV0RGVzY3JpcHRvcj4gc3ViT3V0cHV0MSgpIHsgcmV0dXJuIG1PdXRwdXQxOyB9CiAgICAgdmlydHVhbCBzcDxBdWRpb091dHB1dERlc2NyaXB0b3I+IHN1Yk91dHB1dDIoKSB7IHJldHVybiBtT3V0cHV0MjsgfQotICAgIHZpcnR1YWwgdm9pZCBjaGFuZ2VSZWZDb3VudChhdWRpb19zdHJlYW1fdHlwZV90IHN0cmVhbSwgaW50IGRlbHRhKTsKKyAgICAgICAgICAgIHZvaWQgY2hhbmdlU3RyZWFtQWN0aXZlQ291bnQoCisgICAgICAgICAgICAgICAgICAgIGNvbnN0IHNwPFRyYWNrQ2xpZW50RGVzY3JpcHRvcj4mIGNsaWVudCwgaW50IGRlbHRhKSBvdmVycmlkZTsKICAgICB2aXJ0dWFsIGJvb2wgc2V0Vm9sdW1lKGZsb2F0IHZvbHVtZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF1ZGlvX3N0cmVhbV90eXBlX3Qgc3RyZWFtLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgYXVkaW9fZGV2aWNlc190IGRldmljZSwKQEAgLTEyNywxMCArMTc4LDEwIEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgIGF1ZGlvX291dHB1dF9mbGFnc190IGZsYWdzLAogICAgICAgICAgICAgICAgICAgICAgICAgICBhdWRpb19pb19oYW5kbGVfdCAqb3V0cHV0KTsKICAgICAgICAgICAgIC8vIENhbGxlZCB3aGVuIGEgc3RyZWFtIGlzIGFib3V0IHRvIGJlIHN0YXJ0ZWQKLSAgICAgICAgICAgIC8vIE5vdGU6IGNhbGxlZCBiZWZvcmUgY2hhbmdlUmVmQ291bnQoMSk7CisgICAgICAgICAgICAvLyBOb3RlOiBjYWxsZWQgYmVmb3JlIHNldENsaWVudEFjdGl2ZSh0cnVlKTsKICAgICAgICAgICAgIHN0YXR1c190IHN0YXJ0KCk7CiAgICAgICAgICAgICAvLyBDYWxsZWQgYWZ0ZXIgYSBzdHJlYW0gaXMgc3RvcHBlZC4KLSAgICAgICAgICAgIC8vIE5vdGU6IGNhbGxlZCBhZnRlciBjaGFuZ2VSZWZDb3VudCgtMSk7CisgICAgICAgICAgICAvLyBOb3RlOiBjYWxsZWQgYWZ0ZXIgc2V0Q2xpZW50QWN0aXZlKGZhbHNlKTsKICAgICAgICAgICAgIHZvaWQgc3RvcCgpOwogICAgICAgICAgICAgdm9pZCBjbG9zZSgpOwogICAgICAgICAgICAgc3RhdHVzX3Qgb3BlbkR1cGxpY2F0aW5nKGNvbnN0IHNwPFN3QXVkaW9PdXRwdXREZXNjcmlwdG9yPiYgb3V0cHV0MSwKQEAgLTE0MSwyMyArMTkyLDIxIEBACiAgICAgYXVkaW9faW9faGFuZGxlX3QgbUlvSGFuZGxlOyAgICAgICAgICAgLy8gb3V0cHV0IGhhbmRsZQogICAgIHVpbnQzMl90IG1MYXRlbmN5OyAgICAgICAgICAgICAgICAgIC8vCiAgICAgYXVkaW9fb3V0cHV0X2ZsYWdzX3QgbUZsYWdzOyAgIC8vCi0gICAgQXVkaW9NaXggKm1Qb2xpY3lNaXg7ICAgICAgICAgICAgIC8vIG5vbiBOVUxMIHdoZW4gdXNlZCBieSBhIGR5bmFtaWMgcG9saWN5CiAgICAgc3A8U3dBdWRpb091dHB1dERlc2NyaXB0b3I+IG1PdXRwdXQxOyAgICAvLyB1c2VkIGJ5IGR1cGxpY2F0ZWQgb3V0cHV0czogZmlyc3Qgb3V0cHV0CiAgICAgc3A8U3dBdWRpb091dHB1dERlc2NyaXB0b3I+IG1PdXRwdXQyOyAgICAvLyB1c2VkIGJ5IGR1cGxpY2F0ZWQgb3V0cHV0czogc2Vjb25kIG91dHB1dAogICAgIHVpbnQzMl90IG1EaXJlY3RPcGVuQ291bnQ7IC8vIG51bWJlciBvZiBjbGllbnRzIHVzaW5nIHRoaXMgb3V0cHV0IChkaXJlY3Qgb3V0cHV0cyBvbmx5KQogICAgIGF1ZGlvX3Nlc3Npb25fdCBtRGlyZWN0Q2xpZW50U2Vzc2lvbjsgLy8gc2Vzc2lvbiBpZCBvZiB0aGUgZGlyZWN0IG91dHB1dCBjbGllbnQKLSAgICB1aW50MzJfdCBtR2xvYmFsUmVmQ291bnQ7ICAvLyBub24tc3RyZWFtLXNwZWNpZmljIHJlZiBjb3VudAogfTsKIAogLy8gQXVkaW8gb3V0cHV0IGRyaXZlbiBieSBhbiBpbnB1dCBkZXZpY2UgZGlyZWN0bHkuCiBjbGFzcyBId0F1ZGlvT3V0cHV0RGVzY3JpcHRvcjogcHVibGljIEF1ZGlvT3V0cHV0RGVzY3JpcHRvcgogewogcHVibGljOgotICAgIEh3QXVkaW9PdXRwdXREZXNjcmlwdG9yKGNvbnN0IHNwPEF1ZGlvU291cmNlRGVzY3JpcHRvcj4mIHNvdXJjZSwKKyAgICBId0F1ZGlvT3V0cHV0RGVzY3JpcHRvcihjb25zdCBzcDxTb3VyY2VDbGllbnREZXNjcmlwdG9yPiYgc291cmNlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIEF1ZGlvUG9saWN5Q2xpZW50SW50ZXJmYWNlICpjbGllbnRJbnRlcmZhY2UpOwogICAgIHZpcnR1YWwgfkh3QXVkaW9PdXRwdXREZXNjcmlwdG9yKCkge30KIAotICAgIHN0YXR1c190ICAgIGR1bXAoaW50IGZkKTsKKyAgICAgICAgICAgIHZvaWQgZHVtcChTdHJpbmc4ICpkc3QpIGNvbnN0IG92ZXJyaWRlOwogCiAgICAgdmlydHVhbCBhdWRpb19kZXZpY2VzX3Qgc3VwcG9ydGVkRGV2aWNlcygpOwogICAgIHZpcnR1YWwgYm9vbCBzZXRWb2x1bWUoZmxvYXQgdm9sdW1lLApAQCAtMTcwLDcgKzIxOSw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdHJ1Y3QgYXVkaW9fcG9ydF9jb25maWcgKnNyY0NvbmZpZyA9IE5VTEwpIGNvbnN0OwogICAgIHZpcnR1YWwgdm9pZCB0b0F1ZGlvUG9ydChzdHJ1Y3QgYXVkaW9fcG9ydCAqcG9ydCkgY29uc3Q7CiAKLSAgICBjb25zdCBzcDxBdWRpb1NvdXJjZURlc2NyaXB0b3I+IG1Tb3VyY2U7CisgICAgY29uc3Qgc3A8U291cmNlQ2xpZW50RGVzY3JpcHRvcj4gbVNvdXJjZTsKIAogfTsKIApAQCAtMjI0LDcgKzI3Myw5IEBACiAKICAgICBhdWRpb19kZXZpY2VzX3QgZ2V0U3VwcG9ydGVkRGV2aWNlcyhhdWRpb19pb19oYW5kbGVfdCBoYW5kbGUpIGNvbnN0OwogCi0gICAgc3RhdHVzX3QgZHVtcChpbnQgZmQpIGNvbnN0OworICAgIHNwPFN3QXVkaW9PdXRwdXREZXNjcmlwdG9yPiBnZXRPdXRwdXRGb3JDbGllbnQoYXVkaW9fcG9ydF9oYW5kbGVfdCBwb3J0SWQpOworCisgICAgdm9pZCBkdW1wKFN0cmluZzggKmRzdCkgY29uc3Q7CiB9OwogCiBjbGFzcyBId0F1ZGlvT3V0cHV0Q29sbGVjdGlvbiA6CkBAIC0yMzgsNyArMjg5LDcgQEAKICAgICAgKi8KICAgICBib29sIGlzQW55T3V0cHV0QWN0aXZlKGF1ZGlvX3N0cmVhbV90eXBlX3Qgc3RyZWFtVG9JZ25vcmUpIGNvbnN0OwogCi0gICAgc3RhdHVzX3QgZHVtcChpbnQgZmQpIGNvbnN0OworICAgIHZvaWQgZHVtcChTdHJpbmc4ICpkc3QpIGNvbnN0OwogfTsKIAogCmRpZmYgLS1naXQgYS9zZXJ2aWNlcy9hdWRpb3BvbGljeS9jb21tb24vbWFuYWdlcmRlZmluaXRpb25zL2luY2x1ZGUvQXVkaW9QYXRjaC5oIGIvc2VydmljZXMvYXVkaW9wb2xpY3kvY29tbW9uL21hbmFnZXJkZWZpbml0aW9ucy9pbmNsdWRlL0F1ZGlvUGF0Y2guaAppbmRleCBjMWMzZjNjLi4wODQzZmVhIDEwMDY0NAotLS0gYS9zZXJ2aWNlcy9hdWRpb3BvbGljeS9jb21tb24vbWFuYWdlcmRlZmluaXRpb25zL2luY2x1ZGUvQXVkaW9QYXRjaC5oCisrKyBiL3NlcnZpY2VzL2F1ZGlvcG9saWN5L2NvbW1vbi9tYW5hZ2VyZGVmaW5pdGlvbnMvaW5jbHVkZS9BdWRpb1BhdGNoLmgKQEAgLTIyLDYgKzIyLDcgQEAKICNpbmNsdWRlIDx1dGlscy9SZWZCYXNlLmg+CiAjaW5jbHVkZSA8dXRpbHMvRXJyb3JzLmg+CiAjaW5jbHVkZSA8dXRpbHMvS2V5ZWRWZWN0b3IuaD4KKyNpbmNsdWRlIDx1dGlscy9TdHJpbmc4Lmg+CiAKIG5hbWVzcGFjZSBhbmRyb2lkIHsKIApAQCAtMzAsNyArMzEsNyBAQAogcHVibGljOgogICAgIEF1ZGlvUGF0Y2goY29uc3Qgc3RydWN0IGF1ZGlvX3BhdGNoICpwYXRjaCwgdWlkX3QgdWlkKTsKIAotICAgIHN0YXR1c190IGR1bXAoaW50IGZkLCBpbnQgc3BhY2VzLCBpbnQgaW5kZXgpIGNvbnN0OworICAgIHZvaWQgZHVtcChTdHJpbmc4ICpkc3QsIGludCBzcGFjZXMsIGludCBpbmRleCkgY29uc3Q7CiAKICAgICBhdWRpb19wYXRjaF9oYW5kbGVfdCBtSGFuZGxlOwogICAgIHN0cnVjdCBhdWRpb19wYXRjaCBtUGF0Y2g7CkBAIC00Nyw3ICs0OCw3IEBACiAKICAgICBzdGF0dXNfdCBsaXN0QXVkaW9QYXRjaGVzKHVuc2lnbmVkIGludCAqbnVtX3BhdGNoZXMsIHN0cnVjdCBhdWRpb19wYXRjaCAqcGF0Y2hlcykgY29uc3Q7CiAKLSAgICBzdGF0dXNfdCBkdW1wKGludCBmZCkgY29uc3Q7CisgICAgdm9pZCBkdW1wKFN0cmluZzggKmRzdCkgY29uc3Q7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBhbmRyb2lkCmRpZmYgLS1naXQgYS9zZXJ2aWNlcy9hdWRpb3BvbGljeS9jb21tb24vbWFuYWdlcmRlZmluaXRpb25zL2luY2x1ZGUvQXVkaW9Qb2xpY3lDb25maWcuaCBiL3NlcnZpY2VzL2F1ZGlvcG9saWN5L2NvbW1vbi9tYW5hZ2VyZGVmaW5pdGlvbnMvaW5jbHVkZS9BdWRpb1BvbGljeUNvbmZpZy5oCmluZGV4IDQzZjZlZDYuLmQxYTBmOWIgMTAwNjQ0Ci0tLSBhL3NlcnZpY2VzL2F1ZGlvcG9saWN5L2NvbW1vbi9tYW5hZ2VyZGVmaW5pdGlvbnMvaW5jbHVkZS9BdWRpb1BvbGljeUNvbmZpZy5oCisrKyBiL3NlcnZpY2VzL2F1ZGlvcG9saWN5L2NvbW1vbi9tYW5hZ2VyZGVmaW5pdGlvbnMvaW5jbHVkZS9BdWRpb1BvbGljeUNvbmZpZy5oCkBAIC0xNiw2ICsxNiw5IEBACiAKICNwcmFnbWEgb25jZQogCisjaW5jbHVkZSA8dW5vcmRlcmVkX21hcD4KKyNpbmNsdWRlIDx1bm9yZGVyZWRfc2V0PgorCiAjaW5jbHVkZSA8QXVkaW9HYWluLmg+CiAjaW5jbHVkZSA8Vm9sdW1lQ3VydmUuaD4KICNpbmNsdWRlIDxBdWRpb1BvcnQuaD4KQEAgLTI4LDcgKzMxLDYgQEAKICNpbmNsdWRlIDxBdWRpb1BvbGljeU1peC5oPgogI2luY2x1ZGUgPEVmZmVjdERlc2NyaXB0b3IuaD4KICNpbmNsdWRlIDxTb3VuZFRyaWdnZXJTZXNzaW9uLmg+Ci0jaW5jbHVkZSA8U2Vzc2lvblJvdXRlLmg+CiAKIG5hbWVzcGFjZSBhbmRyb2lkIHsKIApAQCAtMzgsMTYgKzQwLDI0IEBACiAgICAgQXVkaW9Qb2xpY3lDb25maWcoSHdNb2R1bGVDb2xsZWN0aW9uICZod01vZHVsZXMsCiAgICAgICAgICAgICAgICAgICAgICAgRGV2aWNlVmVjdG9yICZhdmFpbGFibGVPdXRwdXREZXZpY2VzLAogICAgICAgICAgICAgICAgICAgICAgIERldmljZVZlY3RvciAmYXZhaWxhYmxlSW5wdXREZXZpY2VzLAotICAgICAgICAgICAgICAgICAgICAgIHNwPERldmljZURlc2NyaXB0b3I+ICZkZWZhdWx0T3V0cHV0RGV2aWNlcywKKyAgICAgICAgICAgICAgICAgICAgICBzcDxEZXZpY2VEZXNjcmlwdG9yPiAmZGVmYXVsdE91dHB1dERldmljZSwKICAgICAgICAgICAgICAgICAgICAgICBWb2x1bWVDdXJ2ZXNDb2xsZWN0aW9uICp2b2x1bWVzID0gbnVsbHB0cikKICAgICAgICAgOiBtSHdNb2R1bGVzKGh3TW9kdWxlcyksCiAgICAgICAgICAgbUF2YWlsYWJsZU91dHB1dERldmljZXMoYXZhaWxhYmxlT3V0cHV0RGV2aWNlcyksCiAgICAgICAgICAgbUF2YWlsYWJsZUlucHV0RGV2aWNlcyhhdmFpbGFibGVJbnB1dERldmljZXMpLAotICAgICAgICAgIG1EZWZhdWx0T3V0cHV0RGV2aWNlcyhkZWZhdWx0T3V0cHV0RGV2aWNlcyksCisgICAgICAgICAgbURlZmF1bHRPdXRwdXREZXZpY2UoZGVmYXVsdE91dHB1dERldmljZSksCiAgICAgICAgICAgbVZvbHVtZUN1cnZlcyh2b2x1bWVzKSwKICAgICAgICAgICBtSXNTcGVha2VyRHJjRW5hYmxlZChmYWxzZSkKICAgICB7fQogCisgICAgY29uc3Qgc3RkOjpzdHJpbmcmIGdldFNvdXJjZSgpIGNvbnN0IHsKKyAgICAgICAgcmV0dXJuIG1Tb3VyY2U7CisgICAgfQorCisgICAgdm9pZCBzZXRTb3VyY2UoY29uc3Qgc3RkOjpzdHJpbmcmIGZpbGUpIHsKKyAgICAgICAgbVNvdXJjZSA9IGZpbGU7CisgICAgfQorCiAgICAgdm9pZCBzZXRWb2x1bWVzKGNvbnN0IFZvbHVtZUN1cnZlc0NvbGxlY3Rpb24gJnZvbHVtZXMpCiAgICAgewogICAgICAgICBpZiAobVZvbHVtZUN1cnZlcyAhPSBudWxscHRyKSB7CkBAIC0xMDAsNTEgKzExMCw4NyBAQAogCiAgICAgdm9pZCBzZXREZWZhdWx0T3V0cHV0RGV2aWNlKGNvbnN0IHNwPERldmljZURlc2NyaXB0b3I+ICZkZWZhdWx0RGV2aWNlKQogICAgIHsKLSAgICAgICAgbURlZmF1bHRPdXRwdXREZXZpY2VzID0gZGVmYXVsdERldmljZTsKKyAgICAgICAgbURlZmF1bHRPdXRwdXREZXZpY2UgPSBkZWZhdWx0RGV2aWNlOwogICAgIH0KIAotICAgIGNvbnN0IHNwPERldmljZURlc2NyaXB0b3I+ICZnZXREZWZhdWx0T3V0cHV0RGV2aWNlKCkgY29uc3QgeyByZXR1cm4gbURlZmF1bHRPdXRwdXREZXZpY2VzOyB9CisgICAgY29uc3Qgc3A8RGV2aWNlRGVzY3JpcHRvcj4gJmdldERlZmF1bHRPdXRwdXREZXZpY2UoKSBjb25zdCB7IHJldHVybiBtRGVmYXVsdE91dHB1dERldmljZTsgfQogCiAgICAgdm9pZCBzZXREZWZhdWx0KHZvaWQpCiAgICAgewotICAgICAgICBtRGVmYXVsdE91dHB1dERldmljZXMgPSBuZXcgRGV2aWNlRGVzY3JpcHRvcihBVURJT19ERVZJQ0VfT1VUX1NQRUFLRVIpOwotICAgICAgICBzcDxId01vZHVsZT4gbW9kdWxlOworICAgICAgICBtU291cmNlID0gIkF1ZGlvUG9saWN5Q29uZmlnOjpzZXREZWZhdWx0IjsKKyAgICAgICAgbURlZmF1bHRPdXRwdXREZXZpY2UgPSBuZXcgRGV2aWNlRGVzY3JpcHRvcihBVURJT19ERVZJQ0VfT1VUX1NQRUFLRVIpOworICAgICAgICBtRGVmYXVsdE91dHB1dERldmljZS0+YWRkQXVkaW9Qcm9maWxlKEF1ZGlvUHJvZmlsZTo6Y3JlYXRlRnVsbER5bmFtaWMoKSk7CiAgICAgICAgIHNwPERldmljZURlc2NyaXB0b3I+IGRlZmF1bHRJbnB1dERldmljZSA9IG5ldyBEZXZpY2VEZXNjcmlwdG9yKEFVRElPX0RFVklDRV9JTl9CVUlMVElOX01JQyk7Ci0gICAgICAgIG1BdmFpbGFibGVPdXRwdXREZXZpY2VzLmFkZChtRGVmYXVsdE91dHB1dERldmljZXMpOworICAgICAgICBkZWZhdWx0SW5wdXREZXZpY2UtPmFkZEF1ZGlvUHJvZmlsZShBdWRpb1Byb2ZpbGU6OmNyZWF0ZUZ1bGxEeW5hbWljKCkpOworICAgICAgICBzcDxBdWRpb1Byb2ZpbGU+IG1pY1Byb2ZpbGUgPSBuZXcgQXVkaW9Qcm9maWxlKAorICAgICAgICAgICAgICAgIEFVRElPX0ZPUk1BVF9QQ01fMTZfQklULCBBVURJT19DSEFOTkVMX0lOX01PTk8sIDgwMDApOworICAgICAgICBkZWZhdWx0SW5wdXREZXZpY2UtPmFkZEF1ZGlvUHJvZmlsZShtaWNQcm9maWxlKTsKKyAgICAgICAgbUF2YWlsYWJsZU91dHB1dERldmljZXMuYWRkKG1EZWZhdWx0T3V0cHV0RGV2aWNlKTsKICAgICAgICAgbUF2YWlsYWJsZUlucHV0RGV2aWNlcy5hZGQoZGVmYXVsdElucHV0RGV2aWNlKTsKIAotICAgICAgICBtb2R1bGUgPSBuZXcgSHdNb2R1bGUoQVVESU9fSEFSRFdBUkVfTU9EVUxFX0lEX1BSSU1BUlkpOworICAgICAgICBzcDxId01vZHVsZT4gbW9kdWxlID0gbmV3IEh3TW9kdWxlKEFVRElPX0hBUkRXQVJFX01PRFVMRV9JRF9QUklNQVJZLCAyIC8qaGFsVmVyc2lvbk1ham9yKi8pOworICAgICAgICBtSHdNb2R1bGVzLmFkZChtb2R1bGUpOworICAgICAgICBtRGVmYXVsdE91dHB1dERldmljZS0+YXR0YWNoKG1vZHVsZSk7CisgICAgICAgIGRlZmF1bHRJbnB1dERldmljZS0+YXR0YWNoKG1vZHVsZSk7CiAKICAgICAgICAgc3A8T3V0cHV0UHJvZmlsZT4gb3V0UHJvZmlsZTsKICAgICAgICAgb3V0UHJvZmlsZSA9IG5ldyBPdXRwdXRQcm9maWxlKFN0cmluZzgoInByaW1hcnkiKSk7CiAgICAgICAgIG91dFByb2ZpbGUtPmF0dGFjaChtb2R1bGUpOwogICAgICAgICBvdXRQcm9maWxlLT5hZGRBdWRpb1Byb2ZpbGUoCiAgICAgICAgICAgICAgICAgbmV3IEF1ZGlvUHJvZmlsZShBVURJT19GT1JNQVRfUENNXzE2X0JJVCwgQVVESU9fQ0hBTk5FTF9PVVRfU1RFUkVPLCA0NDEwMCkpOwotICAgICAgICBvdXRQcm9maWxlLT5hZGRTdXBwb3J0ZWREZXZpY2UobURlZmF1bHRPdXRwdXREZXZpY2VzKTsKKyAgICAgICAgb3V0UHJvZmlsZS0+YWRkU3VwcG9ydGVkRGV2aWNlKG1EZWZhdWx0T3V0cHV0RGV2aWNlKTsKICAgICAgICAgb3V0UHJvZmlsZS0+c2V0RmxhZ3MoQVVESU9fT1VUUFVUX0ZMQUdfUFJJTUFSWSk7CiAgICAgICAgIG1vZHVsZS0+YWRkT3V0cHV0UHJvZmlsZShvdXRQcm9maWxlKTsKIAogICAgICAgICBzcDxJbnB1dFByb2ZpbGU+IGluUHJvZmlsZTsKICAgICAgICAgaW5Qcm9maWxlID0gbmV3IElucHV0UHJvZmlsZShTdHJpbmc4KCJwcmltYXJ5IikpOwogICAgICAgICBpblByb2ZpbGUtPmF0dGFjaChtb2R1bGUpOwotICAgICAgICBpblByb2ZpbGUtPmFkZEF1ZGlvUHJvZmlsZSgKLSAgICAgICAgICAgICAgICBuZXcgQXVkaW9Qcm9maWxlKEFVRElPX0ZPUk1BVF9QQ01fMTZfQklULCBBVURJT19DSEFOTkVMX0lOX01PTk8sIDgwMDApKTsKKyAgICAgICAgaW5Qcm9maWxlLT5hZGRBdWRpb1Byb2ZpbGUobWljUHJvZmlsZSk7CiAgICAgICAgIGluUHJvZmlsZS0+YWRkU3VwcG9ydGVkRGV2aWNlKGRlZmF1bHRJbnB1dERldmljZSk7CiAgICAgICAgIG1vZHVsZS0+YWRkSW5wdXRQcm9maWxlKGluUHJvZmlsZSk7CiAKLSAgICAgICAgbUh3TW9kdWxlcy5hZGQobW9kdWxlKTsKKyAgICAgICAgc2V0RGVmYXVsdFN1cnJvdW5kRm9ybWF0cygpOworICAgIH0KKworICAgIC8vIFN1cnJvdW5kIGZvcm1hdHMsIHdpdGggYW4gb3B0aW9uYWwgbGlzdCBvZiBzdWJmb3JtYXRzIHRoYXQgYXJlIGVxdWl2YWxlbnQgZnJvbSB1c2VycycgUE9WLgorICAgIHVzaW5nIFN1cnJvdW5kRm9ybWF0cyA9IHN0ZDo6dW5vcmRlcmVkX21hcDxhdWRpb19mb3JtYXRfdCwgc3RkOjp1bm9yZGVyZWRfc2V0PGF1ZGlvX2Zvcm1hdF90Pj47CisKKyAgICBjb25zdCBTdXJyb3VuZEZvcm1hdHMgJmdldFN1cnJvdW5kRm9ybWF0cygpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gbVN1cnJvdW5kRm9ybWF0czsKKyAgICB9CisKKyAgICB2b2lkIHNldFN1cnJvdW5kRm9ybWF0cyhjb25zdCBTdXJyb3VuZEZvcm1hdHMgJnN1cnJvdW5kRm9ybWF0cykKKyAgICB7CisgICAgICAgIG1TdXJyb3VuZEZvcm1hdHMgPSBzdXJyb3VuZEZvcm1hdHM7CisgICAgfQorCisgICAgdm9pZCBzZXREZWZhdWx0U3Vycm91bmRGb3JtYXRzKCkKKyAgICB7CisgICAgICAgIG1TdXJyb3VuZEZvcm1hdHMgPSB7CisgICAgICAgICAgICB7QVVESU9fRk9STUFUX0FDMywge319LAorICAgICAgICAgICAge0FVRElPX0ZPUk1BVF9FX0FDMywge319LAorICAgICAgICAgICAge0FVRElPX0ZPUk1BVF9EVFMsIHt9fSwKKyAgICAgICAgICAgIHtBVURJT19GT1JNQVRfRFRTX0hELCB7fX0sCisgICAgICAgICAgICB7QVVESU9fRk9STUFUX0FBQ19MQywgeworICAgICAgICAgICAgICAgICAgICBBVURJT19GT1JNQVRfQUFDX0hFX1YxLCBBVURJT19GT1JNQVRfQUFDX0hFX1YyLCBBVURJT19GT1JNQVRfQUFDX0VMRCwKKyAgICAgICAgICAgICAgICAgICAgQVVESU9fRk9STUFUX0FBQ19YSEV9fSwKKyAgICAgICAgICAgIHtBVURJT19GT1JNQVRfRE9MQllfVFJVRUhELCB7fX0sCisgICAgICAgICAgICB7QVVESU9fRk9STUFUX0VfQUMzX0pPQywge319fTsKICAgICB9CiAKIHByaXZhdGU6CisgICAgc3RkOjpzdHJpbmcgbVNvdXJjZTsKICAgICBId01vZHVsZUNvbGxlY3Rpb24gJm1Id01vZHVsZXM7IC8qKjwgQ29sbGVjdGlvbiBvZiBNb2R1bGUsIHdpdGggUHJvZmlsZXMsIGkuZS4gTWl4IFBvcnRzLiAqLwogICAgIERldmljZVZlY3RvciAmbUF2YWlsYWJsZU91dHB1dERldmljZXM7CiAgICAgRGV2aWNlVmVjdG9yICZtQXZhaWxhYmxlSW5wdXREZXZpY2VzOwotICAgIHNwPERldmljZURlc2NyaXB0b3I+ICZtRGVmYXVsdE91dHB1dERldmljZXM7CisgICAgc3A8RGV2aWNlRGVzY3JpcHRvcj4gJm1EZWZhdWx0T3V0cHV0RGV2aWNlOwogICAgIFZvbHVtZUN1cnZlc0NvbGxlY3Rpb24gKm1Wb2x1bWVDdXJ2ZXM7CiAgICAgLy8gVE9ETzogcmVtb3ZlIHdoZW4gbGVnYWN5IGNvbmYgZmlsZSBpcyByZW1vdmVkLiB0cnVlIG9uIGRldmljZXMgdGhhdCB1c2UgRFJDIG9uIHRoZQogICAgIC8vIERFVklDRV9DQVRFR09SWV9TUEVBS0VSIHBhdGggdG8gYm9vc3Qgc29mdCBzb3VuZHMsIHVzZWQgdG8gYWRqdXN0IHZvbHVtZSBjdXJ2ZXMgYWNjb3JkaW5nbHkuCiAgICAgLy8gTm90ZTogcmVtb3ZlIGFsc28gc3BlYWtlcl9kcmNfZW5hYmxlZCBmcm9tIGdsb2JhbCBjb25maWd1cmF0aW9uIG9mIFhNTCBjb25maWcgZmlsZS4KICAgICBib29sIG1Jc1NwZWFrZXJEcmNFbmFibGVkOworICAgIFN1cnJvdW5kRm9ybWF0cyBtU3Vycm91bmRGb3JtYXRzOwogfTsKIAogfSAvLyBuYW1lc3BhY2UgYW5kcm9pZApkaWZmIC0tZ2l0IGEvc2VydmljZXMvYXVkaW9wb2xpY3kvY29tbW9uL21hbmFnZXJkZWZpbml0aW9ucy9pbmNsdWRlL0F1ZGlvUG9saWN5TWl4LmggYi9zZXJ2aWNlcy9hdWRpb3BvbGljeS9jb21tb24vbWFuYWdlcmRlZmluaXRpb25zL2luY2x1ZGUvQXVkaW9Qb2xpY3lNaXguaAppbmRleCA4ZmM2ZmU5Li45NmMwMGVhIDEwMDY0NAotLS0gYS9zZXJ2aWNlcy9hdWRpb3BvbGljeS9jb21tb24vbWFuYWdlcmRlZmluaXRpb25zL2luY2x1ZGUvQXVkaW9Qb2xpY3lNaXguaAorKysgYi9zZXJ2aWNlcy9hdWRpb3BvbGljeS9jb21tb24vbWFuYWdlcmRlZmluaXRpb25zL2luY2x1ZGUvQXVkaW9Qb2xpY3lNaXguaApAQCAtNDMsNyArNDMsNyBAQAogCiAgICAgdm9pZCBzZXRNaXgoQXVkaW9NaXggJm1peCk7CiAKLSAgICBzdGF0dXNfdCBkdW1wKGludCBmZCwgaW50IHNwYWNlcywgaW50IGluZGV4KSBjb25zdDsKKyAgICB2b2lkIGR1bXAoU3RyaW5nOCAqZHN0LCBpbnQgc3BhY2VzLCBpbnQgaW5kZXgpIGNvbnN0OwogCiBwcml2YXRlOgogICAgIEF1ZGlvTWl4ICAgIG1NaXg7ICAgICAgICAgICAgICAgICAgIC8vIEF1ZGlvIHBvbGljeSBtaXggZGVzY3JpcHRvcgpAQCAtODAsNyArODAsNyBAQAogCiAgICAgc3RhdHVzX3QgZ2V0SW5wdXRNaXhGb3JBdHRyKGF1ZGlvX2F0dHJpYnV0ZXNfdCBhdHRyLCBBdWRpb01peCAqKnBvbGljeU1peCk7CiAKLSAgICBzdGF0dXNfdCBkdW1wKGludCBmZCkgY29uc3Q7CisgICAgdm9pZCBkdW1wKFN0cmluZzggKmRzdCkgY29uc3Q7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBhbmRyb2lkCmRpZmYgLS1naXQgYS9zZXJ2aWNlcy9hdWRpb3BvbGljeS9jb21tb24vbWFuYWdlcmRlZmluaXRpb25zL2luY2x1ZGUvQXVkaW9Qb3J0LmggYi9zZXJ2aWNlcy9hdWRpb3BvbGljeS9jb21tb24vbWFuYWdlcmRlZmluaXRpb25zL2luY2x1ZGUvQXVkaW9Qb3J0LmgKaW5kZXggMDlhODZkZC4uZWJiOTM1MiAxMDA2NDQKLS0tIGEvc2VydmljZXMvYXVkaW9wb2xpY3kvY29tbW9uL21hbmFnZXJkZWZpbml0aW9ucy9pbmNsdWRlL0F1ZGlvUG9ydC5oCisrKyBiL3NlcnZpY2VzL2F1ZGlvcG9saWN5L2NvbW1vbi9tYW5hZ2VyZGVmaW5pdGlvbnMvaW5jbHVkZS9BdWRpb1BvcnQuaApAQCAtMTMyLDcgKzEzMiw4IEBACiAgICAgdm9pZCBhZGRSb3V0ZShjb25zdCBzcDxBdWRpb1JvdXRlPiAmcm91dGUpIHsgbVJvdXRlcy5hZGQocm91dGUpOyB9CiAgICAgY29uc3QgQXVkaW9Sb3V0ZVZlY3RvciAmZ2V0Um91dGVzKCkgY29uc3QgeyByZXR1cm4gbVJvdXRlczsgfQogCi0gICAgdm9pZCBkdW1wKGludCBmZCwgaW50IHNwYWNlcywgYm9vbCB2ZXJib3NlID0gdHJ1ZSkgY29uc3Q7CisgICAgdm9pZCBkdW1wKFN0cmluZzggKmRzdCwgaW50IHNwYWNlcywgYm9vbCB2ZXJib3NlID0gdHJ1ZSkgY29uc3Q7CisKICAgICB2b2lkIGxvZyhjb25zdCBjaGFyKiBpbmRlbnQpIGNvbnN0OwogCiAgICAgQXVkaW9HYWluQ29sbGVjdGlvbiBtR2FpbnM7IC8vIGdhaW4gY29udHJvbGxlcnMKQEAgLTE1Myw5ICsxNTQsNiBAQAogY2xhc3MgQXVkaW9Qb3J0Q29uZmlnIDogcHVibGljIHZpcnR1YWwgUmVmQmFzZQogewogcHVibGljOgotICAgIEF1ZGlvUG9ydENvbmZpZygpOwotICAgIHZpcnR1YWwgfkF1ZGlvUG9ydENvbmZpZygpIHt9Ci0KICAgICBzdGF0dXNfdCBhcHBseUF1ZGlvUG9ydENvbmZpZyhjb25zdCBzdHJ1Y3QgYXVkaW9fcG9ydF9jb25maWcgKmNvbmZpZywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgYXVkaW9fcG9ydF9jb25maWcgKmJhY2t1cENvbmZpZyA9IE5VTEwpOwogICAgIHZpcnR1YWwgdm9pZCB0b0F1ZGlvUG9ydENvbmZpZyhzdHJ1Y3QgYXVkaW9fcG9ydF9jb25maWcgKmRzdENvbmZpZywKQEAgLTE2NSwxMCArMTYzLDExIEBACiAgICAgICAgIHJldHVybiAob3RoZXIgIT0gMCkgJiYKICAgICAgICAgICAgICAgICAob3RoZXItPmdldEF1ZGlvUG9ydCgpLT5nZXRNb2R1bGVIYW5kbGUoKSA9PSBnZXRBdWRpb1BvcnQoKS0+Z2V0TW9kdWxlSGFuZGxlKCkpOwogICAgIH0KLSAgICB1aW50MzJfdCBtU2FtcGxpbmdSYXRlOwotICAgIGF1ZGlvX2Zvcm1hdF90IG1Gb3JtYXQ7Ci0gICAgYXVkaW9fY2hhbm5lbF9tYXNrX3QgbUNoYW5uZWxNYXNrOwotICAgIHN0cnVjdCBhdWRpb19nYWluX2NvbmZpZyBtR2FpbjsKKyAgICB1bnNpZ25lZCBpbnQgbVNhbXBsaW5nUmF0ZSA9IDB1OworICAgIGF1ZGlvX2Zvcm1hdF90IG1Gb3JtYXQgPSBBVURJT19GT1JNQVRfSU5WQUxJRDsKKyAgICBhdWRpb19jaGFubmVsX21hc2tfdCBtQ2hhbm5lbE1hc2sgPSBBVURJT19DSEFOTkVMX05PTkU7CisgICAgc3RydWN0IGF1ZGlvX2dhaW5fY29uZmlnIG1HYWluID0geyAuaW5kZXggPSAtMSB9OworICAgIHVuaW9uIGF1ZGlvX2lvX2ZsYWdzIG1GbGFncyA9IHsgQVVESU9fSU5QVVRfRkxBR19OT05FIH07CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBhbmRyb2lkCmRpZmYgLS1naXQgYS9zZXJ2aWNlcy9hdWRpb3BvbGljeS9jb21tb24vbWFuYWdlcmRlZmluaXRpb25zL2luY2x1ZGUvQXVkaW9Qcm9maWxlLmggYi9zZXJ2aWNlcy9hdWRpb3BvbGljeS9jb21tb24vbWFuYWdlcmRlZmluaXRpb25zL2luY2x1ZGUvQXVkaW9Qcm9maWxlLmgKaW5kZXggODc0MWM2Ni4uYjU4OGQ1NyAxMDA2NDQKLS0tIGEvc2VydmljZXMvYXVkaW9wb2xpY3kvY29tbW9uL21hbmFnZXJkZWZpbml0aW9ucy9pbmNsdWRlL0F1ZGlvUHJvZmlsZS5oCisrKyBiL3NlcnZpY2VzL2F1ZGlvcG9saWN5L2NvbW1vbi9tYW5hZ2VyZGVmaW5pdGlvbnMvaW5jbHVkZS9BdWRpb1Byb2ZpbGUuaApAQCAtMTYsOTEgKzE2LDg0IEBACiAKICNwcmFnbWEgb25jZQogCi0jaW5jbHVkZSAicG9saWN5LmgiCi0jaW5jbHVkZSA8dXRpbHMvU3RyaW5nOC5oPgotI2luY2x1ZGUgPHV0aWxzL1NvcnRlZFZlY3Rvci5oPgotI2luY2x1ZGUgPHV0aWxzL1JlZkJhc2UuaD4KLSNpbmNsdWRlIDx1dGlscy9FcnJvcnMuaD4KKyNpbmNsdWRlIDx2ZWN0b3I+CisKICNpbmNsdWRlIDxzeXN0ZW0vYXVkaW8uaD4KLSNpbmNsdWRlIDxjdXRpbHMvY29uZmlnX3V0aWxzLmg+CisjaW5jbHVkZSA8dXRpbHMvUmVmQmFzZS5oPgorI2luY2x1ZGUgPHV0aWxzL1NvcnRlZFZlY3Rvci5oPgorI2luY2x1ZGUgPHV0aWxzL1N0cmluZzguaD4KKworI2luY2x1ZGUgInBvbGljeS5oIgogCiBuYW1lc3BhY2UgYW5kcm9pZCB7CiAKIHR5cGVkZWYgU29ydGVkVmVjdG9yPHVpbnQzMl90PiBTYW1wbGVSYXRlVmVjdG9yOwotdHlwZWRlZiBTb3J0ZWRWZWN0b3I8YXVkaW9fY2hhbm5lbF9tYXNrX3Q+IENoYW5uZWxzVmVjdG9yOwogdHlwZWRlZiBWZWN0b3I8YXVkaW9fZm9ybWF0X3Q+IEZvcm1hdFZlY3RvcjsKIAogdGVtcGxhdGUgPHR5cGVuYW1lIFQ+Ci1ib29sIG9wZXJhdG9yID09IChjb25zdCBTb3J0ZWRWZWN0b3I8VD4gJmxlZnQsIGNvbnN0IFNvcnRlZFZlY3RvcjxUPiAmcmlnaHQpOworYm9vbCBvcGVyYXRvcj09IChjb25zdCBTb3J0ZWRWZWN0b3I8VD4gJmxlZnQsIGNvbnN0IFNvcnRlZFZlY3RvcjxUPiAmcmlnaHQpCit7CisgICAgaWYgKGxlZnQuc2l6ZSgpICE9IHJpZ2h0LnNpemUoKSkgeworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorICAgIGZvciAoc2l6ZV90IGluZGV4ID0gMDsgaW5kZXggPCByaWdodC5zaXplKCk7IGluZGV4KyspIHsKKyAgICAgICAgaWYgKGxlZnRbaW5kZXhdICE9IHJpZ2h0W2luZGV4XSkgeworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgfQorICAgIHJldHVybiB0cnVlOworfQorCit0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KK2Jvb2wgb3BlcmF0b3IhPSAoY29uc3QgU29ydGVkVmVjdG9yPFQ+ICZsZWZ0LCBjb25zdCBTb3J0ZWRWZWN0b3I8VD4gJnJpZ2h0KQoreworICAgIHJldHVybiAhKGxlZnQgPT0gcmlnaHQpOworfQorCitjbGFzcyBDaGFubmVsc1ZlY3RvciA6IHB1YmxpYyBTb3J0ZWRWZWN0b3I8YXVkaW9fY2hhbm5lbF9tYXNrX3Q+Cit7CitwdWJsaWM6CisgICAgQ2hhbm5lbHNWZWN0b3IoKSA9IGRlZmF1bHQ7CisgICAgQ2hhbm5lbHNWZWN0b3IoY29uc3QgQ2hhbm5lbHNWZWN0b3ImKSA9IGRlZmF1bHQ7CisgICAgQ2hhbm5lbHNWZWN0b3IoY29uc3QgU29ydGVkVmVjdG9yPGF1ZGlvX2NoYW5uZWxfbWFza190PiYgc3YpIDoKKyAgICAgICAgICAgIFNvcnRlZFZlY3RvcjxhdWRpb19jaGFubmVsX21hc2tfdD4oc3YpIHt9CisgICAgQ2hhbm5lbHNWZWN0b3ImIG9wZXJhdG9yPShjb25zdCBDaGFubmVsc1ZlY3RvciYpID0gZGVmYXVsdDsKKworICAgIC8vIEFwcGxpZXMgYXVkaW9fY2hhbm5lbF9tYXNrX291dF90b19pbiB0byBhbGwgZWxlbWVudHMgYW5kIHJldHVybnMgdGhlIHJlc3VsdC4KKyAgICBDaGFubmVsc1ZlY3RvciBhc0luTWFzaygpIGNvbnN0OworICAgIC8vIEFwcGxpZXMgYXVkaW9fY2hhbm5lbF9tYXNrX2luX3RvX291dCB0byBhbGwgZWxlbWVudHMgYW5kIHJldHVybnMgdGhlIHJlc3VsdC4KKyAgICBDaGFubmVsc1ZlY3RvciBhc091dE1hc2soKSBjb25zdDsKK307CiAKIGNsYXNzIEF1ZGlvUHJvZmlsZSA6IHB1YmxpYyB2aXJ0dWFsIFJlZkJhc2UKIHsKIHB1YmxpYzoKLSAgICBBdWRpb1Byb2ZpbGUoYXVkaW9fZm9ybWF0X3QgZm9ybWF0LAotICAgICAgICAgICAgICAgICBhdWRpb19jaGFubmVsX21hc2tfdCBjaGFubmVsTWFza3MsCi0gICAgICAgICAgICAgICAgIHVpbnQzMl90IHNhbXBsaW5nUmF0ZSkgOgotICAgICAgICBtTmFtZShTdHJpbmc4KCIiKSksCi0gICAgICAgIG1Gb3JtYXQoZm9ybWF0KQotICAgIHsKLSAgICAgICAgbUNoYW5uZWxNYXNrcy5hZGQoY2hhbm5lbE1hc2tzKTsKLSAgICAgICAgbVNhbXBsaW5nUmF0ZXMuYWRkKHNhbXBsaW5nUmF0ZSk7Ci0gICAgfQorICAgIHN0YXRpYyBzcDxBdWRpb1Byb2ZpbGU+IGNyZWF0ZUZ1bGxEeW5hbWljKCk7CiAKKyAgICBBdWRpb1Byb2ZpbGUoYXVkaW9fZm9ybWF0X3QgZm9ybWF0LCBhdWRpb19jaGFubmVsX21hc2tfdCBjaGFubmVsTWFza3MsIHVpbnQzMl90IHNhbXBsaW5nUmF0ZSk7CiAgICAgQXVkaW9Qcm9maWxlKGF1ZGlvX2Zvcm1hdF90IGZvcm1hdCwKICAgICAgICAgICAgICAgICAgY29uc3QgQ2hhbm5lbHNWZWN0b3IgJmNoYW5uZWxNYXNrcywKLSAgICAgICAgICAgICAgICAgY29uc3QgU2FtcGxlUmF0ZVZlY3RvciAmc2FtcGxpbmdSYXRlQ29sbGVjdGlvbikgOgotICAgICAgICBtTmFtZShTdHJpbmc4KCIiKSksCi0gICAgICAgIG1Gb3JtYXQoZm9ybWF0KSwKLSAgICAgICAgbUNoYW5uZWxNYXNrcyhjaGFubmVsTWFza3MpLAotICAgICAgICBtU2FtcGxpbmdSYXRlcyhzYW1wbGluZ1JhdGVDb2xsZWN0aW9uKQotICAgIHt9CisgICAgICAgICAgICAgICAgIGNvbnN0IFNhbXBsZVJhdGVWZWN0b3IgJnNhbXBsaW5nUmF0ZUNvbGxlY3Rpb24pOwogCiAgICAgYXVkaW9fZm9ybWF0X3QgZ2V0Rm9ybWF0KCkgY29uc3QgeyByZXR1cm4gbUZvcm1hdDsgfQotCi0gICAgdm9pZCBzZXRDaGFubmVscyhjb25zdCBDaGFubmVsc1ZlY3RvciAmY2hhbm5lbE1hc2tzKQotICAgIHsKLSAgICAgICAgaWYgKG1Jc0R5bmFtaWNDaGFubmVscykgewotICAgICAgICAgICAgbUNoYW5uZWxNYXNrcyA9IGNoYW5uZWxNYXNrczsKLSAgICAgICAgfQotICAgIH0KICAgICBjb25zdCBDaGFubmVsc1ZlY3RvciAmZ2V0Q2hhbm5lbHMoKSBjb25zdCB7IHJldHVybiBtQ2hhbm5lbE1hc2tzOyB9Ci0KLSAgICB2b2lkIHNldFNhbXBsZVJhdGVzKGNvbnN0IFNhbXBsZVJhdGVWZWN0b3IgJnNhbXBsZVJhdGVzKQotICAgIHsKLSAgICAgICAgaWYgKG1Jc0R5bmFtaWNSYXRlKSB7Ci0gICAgICAgICAgICBtU2FtcGxpbmdSYXRlcyA9IHNhbXBsZVJhdGVzOwotICAgICAgICB9Ci0gICAgfQogICAgIGNvbnN0IFNhbXBsZVJhdGVWZWN0b3IgJmdldFNhbXBsZVJhdGVzKCkgY29uc3QgeyByZXR1cm4gbVNhbXBsaW5nUmF0ZXM7IH0KKyAgICB2b2lkIHNldENoYW5uZWxzKGNvbnN0IENoYW5uZWxzVmVjdG9yICZjaGFubmVsTWFza3MpOworICAgIHZvaWQgc2V0U2FtcGxlUmF0ZXMoY29uc3QgU2FtcGxlUmF0ZVZlY3RvciAmc2FtcGxlUmF0ZXMpOwogCisgICAgdm9pZCBjbGVhcigpOwogICAgIGJvb2wgaXNWYWxpZCgpIGNvbnN0IHsgcmV0dXJuIGhhc1ZhbGlkRm9ybWF0KCkgJiYgaGFzVmFsaWRSYXRlcygpICYmIGhhc1ZhbGlkQ2hhbm5lbHMoKTsgfQotCi0gICAgdm9pZCBjbGVhcigpCi0gICAgewotICAgICAgICBpZiAobUlzRHluYW1pY0NoYW5uZWxzKSB7Ci0gICAgICAgICAgICBtQ2hhbm5lbE1hc2tzLmNsZWFyKCk7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKG1Jc0R5bmFtaWNSYXRlKSB7Ci0gICAgICAgICAgICBtU2FtcGxpbmdSYXRlcy5jbGVhcigpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgaW5saW5lIGJvb2wgc3VwcG9ydHNDaGFubmVscyhhdWRpb19jaGFubmVsX21hc2tfdCBjaGFubmVscykgY29uc3QKKyAgICBib29sIHN1cHBvcnRzQ2hhbm5lbHMoYXVkaW9fY2hhbm5lbF9tYXNrX3QgY2hhbm5lbHMpIGNvbnN0CiAgICAgewogICAgICAgICByZXR1cm4gbUNoYW5uZWxNYXNrcy5pbmRleE9mKGNoYW5uZWxzKSA+PSAwOwogICAgIH0KLSAgICBpbmxpbmUgYm9vbCBzdXBwb3J0c1JhdGUodWludDMyX3QgcmF0ZSkgY29uc3QKLSAgICB7Ci0gICAgICAgIHJldHVybiBtU2FtcGxpbmdSYXRlcy5pbmRleE9mKHJhdGUpID49IDA7Ci0gICAgfQorICAgIGJvb2wgc3VwcG9ydHNSYXRlKHVpbnQzMl90IHJhdGUpIGNvbnN0IHsgcmV0dXJuIG1TYW1wbGluZ1JhdGVzLmluZGV4T2YocmF0ZSkgPj0gMDsgfQogCiAgICAgc3RhdHVzX3QgY2hlY2tFeGFjdCh1aW50MzJfdCByYXRlLCBhdWRpb19jaGFubmVsX21hc2tfdCBjaGFubmVscywgYXVkaW9fZm9ybWF0X3QgZm9ybWF0KSBjb25zdDsKLQogICAgIHN0YXR1c190IGNoZWNrQ29tcGF0aWJsZUNoYW5uZWxNYXNrKGF1ZGlvX2NoYW5uZWxfbWFza190IGNoYW5uZWxNYXNrLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF1ZGlvX2NoYW5uZWxfbWFza190ICZ1cGRhdGVkQ2hhbm5lbE1hc2ssCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXVkaW9fcG9ydF90eXBlX3QgcG9ydFR5cGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXVkaW9fcG9ydF9yb2xlX3QgcG9ydFJvbGUpIGNvbnN0OwotCiAgICAgc3RhdHVzX3QgY2hlY2tDb21wYXRpYmxlU2FtcGxpbmdSYXRlKHVpbnQzMl90IHNhbXBsaW5nUmF0ZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3QgJnVwZGF0ZWRTYW1wbGluZ1JhdGUpIGNvbnN0OwogCkBAIC0xMTksNyArMTEyLDcgQEAKIAogICAgIGJvb2wgaXNEeW5hbWljKCkgeyByZXR1cm4gbUlzRHluYW1pY0Zvcm1hdCB8fCBtSXNEeW5hbWljQ2hhbm5lbHMgfHwgbUlzRHluYW1pY1JhdGU7IH0KIAotICAgIHZvaWQgZHVtcChpbnQgZmQsIGludCBzcGFjZXMpIGNvbnN0OworICAgIHZvaWQgZHVtcChTdHJpbmc4ICpkc3QsIGludCBzcGFjZXMpIGNvbnN0OwogCiBwcml2YXRlOgogICAgIFN0cmluZzggIG1OYW1lOwpAQCAtMTM2LDIxMyArMTI5LDQ4IEBACiBjbGFzcyBBdWRpb1Byb2ZpbGVWZWN0b3IgOiBwdWJsaWMgVmVjdG9yPHNwPEF1ZGlvUHJvZmlsZT4gPgogewogcHVibGljOgotICAgIHNzaXplX3QgYWRkKGNvbnN0IHNwPEF1ZGlvUHJvZmlsZT4gJnByb2ZpbGUpCi0gICAgewotICAgICAgICBzc2l6ZV90IGluZGV4ID0gVmVjdG9yOjphZGQocHJvZmlsZSk7Ci0gICAgICAgIC8vIHdlIHNvcnQgZnJvbSB3b3JzdCB0byBiZXN0LCBzbyB0aGF0IEFVRElPX0ZPUk1BVF9ERUZBVUxUIGlzIGFsd2F5cyB0aGUgZmlyc3QgZW50cnkuCi0gICAgICAgIC8vIFRPRE86IGNvbXBhcmVGb3JtYXRzIGNvdWxkIGJlIGEgbGFtYmRhIHRvIGNvbnZlcnQgYmV0d2VlbiBwb2ludGVyLXRvLWZvcm1hdCB0byBmb3JtYXQ6Ci0gICAgICAgIC8vIFtdKGNvbnN0IGF1ZGlvX2Zvcm1hdF90ICpmb3JtYXQxLCBjb25zdCBhdWRpb19mb3JtYXRfdCAqZm9ybWF0MikgewotICAgICAgICAvLyAgICAgcmV0dXJuIGNvbXBhcmVGb3JtYXRzKCpmb3JtYXQxLCAqZm9ybWF0Mik7Ci0gICAgICAgIC8vIH0KLSAgICAgICAgc29ydChjb21wYXJlRm9ybWF0cyk7Ci0gICAgICAgIHJldHVybiBpbmRleDsKLSAgICB9Ci0KKyAgICBzc2l6ZV90IGFkZChjb25zdCBzcDxBdWRpb1Byb2ZpbGU+ICZwcm9maWxlKTsKICAgICAvLyBUaGlzIEFQSSBpcyBpbnRlbmRlZCB0byBiZSB1c2VkIGJ5IHRoZSBwb2xpY3kgbWFuYWdlciBvbmNlIHJldHJpZXZpbmcgY2FwYWJpbGl0aWVzCiAgICAgLy8gZm9yIGEgcHJvZmlsZSB3aXRoIGR5bmFtaWMgZm9ybWF0LCByYXRlIGFuZCBjaGFubmVscyBhdHRyaWJ1dGVzCi0gICAgc3NpemVfdCBhZGRQcm9maWxlRnJvbUhhbChjb25zdCBzcDxBdWRpb1Byb2ZpbGU+ICZwcm9maWxlVG9BZGQpCi0gICAgewotICAgICAgICAvLyBDaGVjayB2YWxpZCBwcm9maWxlIHRvIGFkZDoKLSAgICAgICAgaWYgKCFwcm9maWxlVG9BZGQtPmhhc1ZhbGlkRm9ybWF0KCkpIHsKLSAgICAgICAgICAgIHJldHVybiAtMTsKLSAgICAgICAgfQotICAgICAgICBpZiAoIXByb2ZpbGVUb0FkZC0+aGFzVmFsaWRDaGFubmVscygpICYmICFwcm9maWxlVG9BZGQtPmhhc1ZhbGlkUmF0ZXMoKSkgewotICAgICAgICAgICAgRm9ybWF0VmVjdG9yIGZvcm1hdHM7Ci0gICAgICAgICAgICBmb3JtYXRzLmFkZChwcm9maWxlVG9BZGQtPmdldEZvcm1hdCgpKTsKLSAgICAgICAgICAgIHNldEZvcm1hdHMoRm9ybWF0VmVjdG9yKGZvcm1hdHMpKTsKLSAgICAgICAgICAgIHJldHVybiAwOwotICAgICAgICB9Ci0gICAgICAgIGlmICghcHJvZmlsZVRvQWRkLT5oYXNWYWxpZENoYW5uZWxzKCkgJiYgcHJvZmlsZVRvQWRkLT5oYXNWYWxpZFJhdGVzKCkpIHsKLSAgICAgICAgICAgIHNldFNhbXBsZVJhdGVzRm9yKHByb2ZpbGVUb0FkZC0+Z2V0U2FtcGxlUmF0ZXMoKSwgcHJvZmlsZVRvQWRkLT5nZXRGb3JtYXQoKSk7Ci0gICAgICAgICAgICByZXR1cm4gMDsKLSAgICAgICAgfQotICAgICAgICBpZiAocHJvZmlsZVRvQWRkLT5oYXNWYWxpZENoYW5uZWxzKCkgJiYgIXByb2ZpbGVUb0FkZC0+aGFzVmFsaWRSYXRlcygpKSB7Ci0gICAgICAgICAgICBzZXRDaGFubmVsc0Zvcihwcm9maWxlVG9BZGQtPmdldENoYW5uZWxzKCksIHByb2ZpbGVUb0FkZC0+Z2V0Rm9ybWF0KCkpOwotICAgICAgICAgICAgcmV0dXJuIDA7Ci0gICAgICAgIH0KLSAgICAgICAgLy8gR28gdGhyb3VnaCB0aGUgbGlzdCBvZiBwcm9maWxlIHRvIGF2b2lkIGR1cGxpY2F0ZXMKLSAgICAgICAgZm9yIChzaXplX3QgcHJvZmlsZUluZGV4ID0gMDsgcHJvZmlsZUluZGV4IDwgc2l6ZSgpOyBwcm9maWxlSW5kZXgrKykgewotICAgICAgICAgICAgY29uc3Qgc3A8QXVkaW9Qcm9maWxlPiAmcHJvZmlsZSA9IGl0ZW1BdChwcm9maWxlSW5kZXgpOwotICAgICAgICAgICAgaWYgKHByb2ZpbGUtPmlzVmFsaWQoKSAmJiBwcm9maWxlID09IHByb2ZpbGVUb0FkZCkgewotICAgICAgICAgICAgICAgIC8vIE5vdGhpbmcgdG8gZG8KLSAgICAgICAgICAgICAgICByZXR1cm4gcHJvZmlsZUluZGV4OwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIHByb2ZpbGVUb0FkZC0+c2V0RHluYW1pY0Zvcm1hdCh0cnVlKTsgLy8gc2V0IHRoZSBmb3JtYXQgYXMgZHluYW1pYyB0byBhbGxvdyByZW1vdmFsCi0gICAgICAgIHJldHVybiBhZGQocHJvZmlsZVRvQWRkKTsKLSAgICB9Ci0KLSAgICBzcDxBdWRpb1Byb2ZpbGU+IGdldEZpcnN0VmFsaWRQcm9maWxlKCkgY29uc3QKLSAgICB7Ci0gICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgc2l6ZSgpOyBpKyspIHsKLSAgICAgICAgICAgIGlmIChpdGVtQXQoaSktPmlzVmFsaWQoKSkgewotICAgICAgICAgICAgICAgIHJldHVybiBpdGVtQXQoaSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgfQotCi0gICAgYm9vbCBoYXNWYWxpZFByb2ZpbGUoKSBjb25zdCB7IHJldHVybiBnZXRGaXJzdFZhbGlkUHJvZmlsZSgpICE9IDA7IH0KKyAgICBzc2l6ZV90IGFkZFByb2ZpbGVGcm9tSGFsKGNvbnN0IHNwPEF1ZGlvUHJvZmlsZT4gJnByb2ZpbGVUb0FkZCk7CiAKICAgICBzdGF0dXNfdCBjaGVja0V4YWN0UHJvZmlsZSh1aW50MzJfdCBzYW1wbGluZ1JhdGUsIGF1ZGlvX2NoYW5uZWxfbWFza190IGNoYW5uZWxNYXNrLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF1ZGlvX2Zvcm1hdF90IGZvcm1hdCkgY29uc3Q7Ci0KICAgICBzdGF0dXNfdCBjaGVja0NvbXBhdGlibGVQcm9maWxlKHVpbnQzMl90ICZzYW1wbGluZ1JhdGUsIGF1ZGlvX2NoYW5uZWxfbWFza190ICZjaGFubmVsTWFzaywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF1ZGlvX2Zvcm1hdF90ICZmb3JtYXQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdWRpb19wb3J0X3R5cGVfdCBwb3J0VHlwZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF1ZGlvX3BvcnRfcm9sZV90IHBvcnRSb2xlKSBjb25zdDsKKyAgICB2b2lkIGNsZWFyUHJvZmlsZXMoKTsKKyAgICAvLyBBc3N1bWluZyB0aGF0IHRoaXMgcHJvZmlsZSB2ZWN0b3IgY29udGFpbnMgaW5wdXQgcHJvZmlsZXMsCisgICAgLy8gZmluZCB0aGUgYmVzdCBtYXRjaGluZyBjb25maWcgZnJvbSAnb3V0cHV0UHJvZmlsZXMnLCBhY2NvcmRpbmcgdG8KKyAgICAvLyB0aGUgZ2l2ZW4gcHJlZmVyZW5jZXMgZm9yIGF1ZGlvIGZvcm1hdHMgYW5kIGNoYW5uZWwgbWFza3MuCisgICAgLy8gTm90ZTogc3RkOjp2ZWN0b3JzIGFyZSB1c2VkIGJlY2F1c2Ugc3BlY2lhbGl6ZWQgY29udGFpbmVycyBmb3IgZm9ybWF0cworICAgIC8vICAgICAgIGFuZCBjaGFubmVscyBjYW4gYmUgc29ydGVkIGFuZCB1c2UgdGhlaXIgb3duIG9yZGVyaW5nLgorICAgIHN0YXR1c190IGZpbmRCZXN0TWF0Y2hpbmdPdXRwdXRDb25maWcoY29uc3QgQXVkaW9Qcm9maWxlVmVjdG9yJiBvdXRwdXRQcm9maWxlcywKKyAgICAgICAgICAgIGNvbnN0IHN0ZDo6dmVjdG9yPGF1ZGlvX2Zvcm1hdF90PiYgcHJlZmVycmVkRm9ybWF0cywgLy8gb3JkZXI6IG1vc3QgcHJlZiAtPiBsZWFzdCBwcmVmCisgICAgICAgICAgICBjb25zdCBzdGQ6OnZlY3RvcjxhdWRpb19jaGFubmVsX21hc2tfdD4mIHByZWZlcnJlZE91dHB1dENoYW5uZWxzLAorICAgICAgICAgICAgYm9vbCBwcmVmZXJIaWdoZXJTYW1wbGluZ1JhdGVzLAorICAgICAgICAgICAgYXVkaW9fY29uZmlnX2Jhc2UgKmJlc3RPdXRwdXRDb25maWcpIGNvbnN0OwogCi0gICAgRm9ybWF0VmVjdG9yIGdldFN1cHBvcnRlZEZvcm1hdHMoKSBjb25zdAotICAgIHsKLSAgICAgICAgRm9ybWF0VmVjdG9yIHN1cHBvcnRlZEZvcm1hdHM7Ci0gICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgc2l6ZSgpOyBpKyspIHsKLSAgICAgICAgICAgIGlmIChpdGVtQXQoaSktPmhhc1ZhbGlkRm9ybWF0KCkpIHsKLSAgICAgICAgICAgICAgICBzdXBwb3J0ZWRGb3JtYXRzLmFkZChpdGVtQXQoaSktPmdldEZvcm1hdCgpKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICByZXR1cm4gc3VwcG9ydGVkRm9ybWF0czsKLSAgICB9CisgICAgc3A8QXVkaW9Qcm9maWxlPiBnZXRGaXJzdFZhbGlkUHJvZmlsZSgpIGNvbnN0OworICAgIHNwPEF1ZGlvUHJvZmlsZT4gZ2V0Rmlyc3RWYWxpZFByb2ZpbGVGb3IoYXVkaW9fZm9ybWF0X3QgZm9ybWF0KSBjb25zdDsKKyAgICBib29sIGhhc1ZhbGlkUHJvZmlsZSgpIGNvbnN0IHsgcmV0dXJuIGdldEZpcnN0VmFsaWRQcm9maWxlKCkgIT0gMDsgfQogCi0gICAgYm9vbCBoYXNEeW5hbWljUHJvZmlsZSgpIGNvbnN0Ci0gICAgewotICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHNpemUoKTsgaSsrKSB7Ci0gICAgICAgICAgICBpZiAoaXRlbUF0KGkpLT5pc0R5bmFtaWMoKSkgewotICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICBib29sIGhhc0R5bmFtaWNGb3JtYXQoKSBjb25zdAotICAgIHsKLSAgICAgICAgcmV0dXJuIGdldFByb2ZpbGVGb3IoZ0R5bmFtaWNGb3JtYXQpICE9IDA7Ci0gICAgfQotCi0gICAgYm9vbCBoYXNEeW5hbWljQ2hhbm5lbHNGb3IoYXVkaW9fZm9ybWF0X3QgZm9ybWF0KSBjb25zdAotICAgIHsKLSAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHNpemUoKTsgaSsrKSB7Ci0gICAgICAgICAgIHNwPEF1ZGlvUHJvZmlsZT4gcHJvZmlsZSA9IGl0ZW1BdChpKTsKLSAgICAgICAgICAgaWYgKHByb2ZpbGUtPmdldEZvcm1hdCgpID09IGZvcm1hdCAmJiBwcm9maWxlLT5pc0R5bmFtaWNDaGFubmVscygpKSB7Ci0gICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgICAgfQotICAgICAgIH0KLSAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgYm9vbCBoYXNEeW5hbWljUmF0ZUZvcihhdWRpb19mb3JtYXRfdCBmb3JtYXQpIGNvbnN0Ci0gICAgewotICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHNpemUoKTsgaSsrKSB7Ci0gICAgICAgICAgICBzcDxBdWRpb1Byb2ZpbGU+IHByb2ZpbGUgPSBpdGVtQXQoaSk7Ci0gICAgICAgICAgICBpZiAocHJvZmlsZS0+Z2V0Rm9ybWF0KCkgPT0gZm9ybWF0ICYmIHByb2ZpbGUtPmlzRHluYW1pY1JhdGUoKSkgewotICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9CisgICAgRm9ybWF0VmVjdG9yIGdldFN1cHBvcnRlZEZvcm1hdHMoKSBjb25zdDsKKyAgICBib29sIGhhc0R5bmFtaWNDaGFubmVsc0ZvcihhdWRpb19mb3JtYXRfdCBmb3JtYXQpIGNvbnN0OworICAgIGJvb2wgaGFzRHluYW1pY0Zvcm1hdCgpIGNvbnN0IHsgcmV0dXJuIGdldFByb2ZpbGVGb3IoZ0R5bmFtaWNGb3JtYXQpICE9IDA7IH0KKyAgICBib29sIGhhc0R5bmFtaWNQcm9maWxlKCkgY29uc3Q7CisgICAgYm9vbCBoYXNEeW5hbWljUmF0ZUZvcihhdWRpb19mb3JtYXRfdCBmb3JtYXQpIGNvbnN0OwogCiAgICAgLy8gT25lIGF1ZGlvIHByb2ZpbGUgd2lsbCBiZSBhZGRlZCBmb3IgZWFjaCBmb3JtYXQgc3VwcG9ydGVkIGJ5IEF1ZGlvIEhBTAotICAgIHZvaWQgc2V0Rm9ybWF0cyhjb25zdCBGb3JtYXRWZWN0b3IgJmZvcm1hdHMpCi0gICAgewotICAgICAgICAvLyBPbmx5IGFsbG93IHRvIGNoYW5nZSB0aGUgZm9ybWF0IG9mIGR5bmFtaWMgcHJvZmlsZQotICAgICAgICBzcDxBdWRpb1Byb2ZpbGU+IGR5bmFtaWNGb3JtYXRQcm9maWxlID0gZ2V0UHJvZmlsZUZvcihnRHluYW1pY0Zvcm1hdCk7Ci0gICAgICAgIGlmIChkeW5hbWljRm9ybWF0UHJvZmlsZSA9PSAwKSB7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBmb3JtYXRzLnNpemUoKTsgaSsrKSB7Ci0gICAgICAgICAgICBzcDxBdWRpb1Byb2ZpbGU+IHByb2ZpbGUgPSBuZXcgQXVkaW9Qcm9maWxlKGZvcm1hdHNbaV0sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGR5bmFtaWNGb3JtYXRQcm9maWxlLT5nZXRDaGFubmVscygpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkeW5hbWljRm9ybWF0UHJvZmlsZS0+Z2V0U2FtcGxlUmF0ZXMoKSk7Ci0gICAgICAgICAgICBwcm9maWxlLT5zZXREeW5hbWljRm9ybWF0KHRydWUpOwotICAgICAgICAgICAgcHJvZmlsZS0+c2V0RHluYW1pY0NoYW5uZWxzKGR5bmFtaWNGb3JtYXRQcm9maWxlLT5pc0R5bmFtaWNDaGFubmVscygpKTsKLSAgICAgICAgICAgIHByb2ZpbGUtPnNldER5bmFtaWNSYXRlKGR5bmFtaWNGb3JtYXRQcm9maWxlLT5pc0R5bmFtaWNSYXRlKCkpOwotICAgICAgICAgICAgYWRkKHByb2ZpbGUpOwotICAgICAgICB9Ci0gICAgfQorICAgIHZvaWQgc2V0Rm9ybWF0cyhjb25zdCBGb3JtYXRWZWN0b3IgJmZvcm1hdHMpOwogCi0gICAgdm9pZCBjbGVhclByb2ZpbGVzKCkKLSAgICB7Ci0gICAgICAgIGZvciAoc2l6ZV90IGkgPSBzaXplKCk7IGkgIT0gMDsgKSB7Ci0gICAgICAgICAgICBzcDxBdWRpb1Byb2ZpbGU+IHByb2ZpbGUgPSBpdGVtQXQoLS1pKTsKLSAgICAgICAgICAgIGlmIChwcm9maWxlLT5pc0R5bmFtaWNGb3JtYXQoKSAmJiBwcm9maWxlLT5oYXNWYWxpZEZvcm1hdCgpKSB7Ci0gICAgICAgICAgICAgICAgcmVtb3ZlQXQoaSk7Ci0gICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBwcm9maWxlLT5jbGVhcigpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgdm9pZCBkdW1wKGludCBmZCwgaW50IHNwYWNlcykgY29uc3QKLSAgICB7Ci0gICAgICAgIGNvbnN0IHNpemVfdCBTSVpFID0gMjU2OwotICAgICAgICBjaGFyIGJ1ZmZlcltTSVpFXTsKLQotICAgICAgICBzbnByaW50ZihidWZmZXIsIFNJWkUsICIlKnMtIFByb2ZpbGVzOlxuIiwgc3BhY2VzLCAiIik7Ci0gICAgICAgIHdyaXRlKGZkLCBidWZmZXIsIHN0cmxlbihidWZmZXIpKTsKLSAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBzaXplKCk7IGkrKykgewotICAgICAgICAgICAgc25wcmludGYoYnVmZmVyLCBTSVpFLCAiJSpzUHJvZmlsZSAlenU6Iiwgc3BhY2VzICsgNCwgIiIsIGkpOwotICAgICAgICAgICAgd3JpdGUoZmQsIGJ1ZmZlciwgc3RybGVuKGJ1ZmZlcikpOwotICAgICAgICAgICAgaXRlbUF0KGkpLT5kdW1wKGZkLCBzcGFjZXMgKyA4KTsKLSAgICAgICAgfQotICAgIH0KKyAgICB2b2lkIGR1bXAoU3RyaW5nOCAqZHN0LCBpbnQgc3BhY2VzKSBjb25zdDsKIAogcHJpdmF0ZToKLSAgICB2b2lkIHNldFNhbXBsZVJhdGVzRm9yKGNvbnN0IFNhbXBsZVJhdGVWZWN0b3IgJnNhbXBsZVJhdGVzLCBhdWRpb19mb3JtYXRfdCBmb3JtYXQpCi0gICAgewotICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHNpemUoKTsgaSsrKSB7Ci0gICAgICAgICAgICBzcDxBdWRpb1Byb2ZpbGU+IHByb2ZpbGUgPSBpdGVtQXQoaSk7Ci0gICAgICAgICAgICBpZiAocHJvZmlsZS0+Z2V0Rm9ybWF0KCkgPT0gZm9ybWF0ICYmIHByb2ZpbGUtPmlzRHluYW1pY1JhdGUoKSkgewotICAgICAgICAgICAgICAgIGlmIChwcm9maWxlLT5oYXNWYWxpZFJhdGVzKCkpIHsKLSAgICAgICAgICAgICAgICAgICAgLy8gTmVlZCB0byBjcmVhdGUgYSBuZXcgcHJvZmlsZSB3aXRoIHNhbWUgZm9ybWF0Ci0gICAgICAgICAgICAgICAgICAgIHNwPEF1ZGlvUHJvZmlsZT4gcHJvZmlsZVRvQWRkID0gbmV3IEF1ZGlvUHJvZmlsZShmb3JtYXQsIHByb2ZpbGUtPmdldENoYW5uZWxzKCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzYW1wbGVSYXRlcyk7Ci0gICAgICAgICAgICAgICAgICAgIHByb2ZpbGVUb0FkZC0+c2V0RHluYW1pY0Zvcm1hdCh0cnVlKTsgLy8gbmVlZCB0byBzZXQgdG8gYWxsb3cgY2xlYW5pbmcKLSAgICAgICAgICAgICAgICAgICAgYWRkKHByb2ZpbGVUb0FkZCk7Ci0gICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgcHJvZmlsZS0+c2V0U2FtcGxlUmF0ZXMoc2FtcGxlUmF0ZXMpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICB2b2lkIHNldENoYW5uZWxzRm9yKGNvbnN0IENoYW5uZWxzVmVjdG9yICZjaGFubmVsTWFza3MsIGF1ZGlvX2Zvcm1hdF90IGZvcm1hdCkKLSAgICB7Ci0gICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgc2l6ZSgpOyBpKyspIHsKLSAgICAgICAgICAgIHNwPEF1ZGlvUHJvZmlsZT4gcHJvZmlsZSA9IGl0ZW1BdChpKTsKLSAgICAgICAgICAgIGlmIChwcm9maWxlLT5nZXRGb3JtYXQoKSA9PSBmb3JtYXQgJiYgcHJvZmlsZS0+aXNEeW5hbWljQ2hhbm5lbHMoKSkgewotICAgICAgICAgICAgICAgIGlmIChwcm9maWxlLT5oYXNWYWxpZENoYW5uZWxzKCkpIHsKLSAgICAgICAgICAgICAgICAgICAgLy8gTmVlZCB0byBjcmVhdGUgYSBuZXcgcHJvZmlsZSB3aXRoIHNhbWUgZm9ybWF0Ci0gICAgICAgICAgICAgICAgICAgIHNwPEF1ZGlvUHJvZmlsZT4gcHJvZmlsZVRvQWRkID0gbmV3IEF1ZGlvUHJvZmlsZShmb3JtYXQsIGNoYW5uZWxNYXNrcywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb2ZpbGUtPmdldFNhbXBsZVJhdGVzKCkpOwotICAgICAgICAgICAgICAgICAgICBwcm9maWxlVG9BZGQtPnNldER5bmFtaWNGb3JtYXQodHJ1ZSk7IC8vIG5lZWQgdG8gc2V0IHRvIGFsbG93IGNsZWFuaW5nCi0gICAgICAgICAgICAgICAgICAgIGFkZChwcm9maWxlVG9BZGQpOwotICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgIHByb2ZpbGUtPnNldENoYW5uZWxzKGNoYW5uZWxNYXNrcyk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLQotICAgIHNwPEF1ZGlvUHJvZmlsZT4gZ2V0UHJvZmlsZUZvcihhdWRpb19mb3JtYXRfdCBmb3JtYXQpIGNvbnN0Ci0gICAgewotICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHNpemUoKTsgaSsrKSB7Ci0gICAgICAgICAgICBpZiAoaXRlbUF0KGkpLT5nZXRGb3JtYXQoKSA9PSBmb3JtYXQpIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gaXRlbUF0KGkpOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIHJldHVybiAwOwotICAgIH0KKyAgICBzcDxBdWRpb1Byb2ZpbGU+IGdldFByb2ZpbGVGb3IoYXVkaW9fZm9ybWF0X3QgZm9ybWF0KSBjb25zdDsKKyAgICB2b2lkIHNldFNhbXBsZVJhdGVzRm9yKGNvbnN0IFNhbXBsZVJhdGVWZWN0b3IgJnNhbXBsZVJhdGVzLCBhdWRpb19mb3JtYXRfdCBmb3JtYXQpOworICAgIHZvaWQgc2V0Q2hhbm5lbHNGb3IoY29uc3QgQ2hhbm5lbHNWZWN0b3IgJmNoYW5uZWxNYXNrcywgYXVkaW9fZm9ybWF0X3QgZm9ybWF0KTsKIAogICAgIHN0YXRpYyBpbnQgY29tcGFyZUZvcm1hdHMoY29uc3Qgc3A8QXVkaW9Qcm9maWxlPiAqcHJvZmlsZTEsIGNvbnN0IHNwPEF1ZGlvUHJvZmlsZT4gKnByb2ZpbGUyKTsKIH07CmRpZmYgLS1naXQgYS9zZXJ2aWNlcy9hdWRpb3BvbGljeS9jb21tb24vbWFuYWdlcmRlZmluaXRpb25zL2luY2x1ZGUvQXVkaW9Sb3V0ZS5oIGIvc2VydmljZXMvYXVkaW9wb2xpY3kvY29tbW9uL21hbmFnZXJkZWZpbml0aW9ucy9pbmNsdWRlL0F1ZGlvUm91dGUuaAppbmRleCA2YjI0ZmRlLi4zMzBmMWQ0IDEwMDY0NAotLS0gYS9zZXJ2aWNlcy9hdWRpb3BvbGljeS9jb21tb24vbWFuYWdlcmRlZmluaXRpb25zL2luY2x1ZGUvQXVkaW9Sb3V0ZS5oCisrKyBiL3NlcnZpY2VzL2F1ZGlvcG9saWN5L2NvbW1vbi9tYW5hZ2VyZGVmaW5pdGlvbnMvaW5jbHVkZS9BdWRpb1JvdXRlLmgKQEAgLTQ2LDcgKzQ2LDcgQEAKIAogICAgIGF1ZGlvX3JvdXRlX3R5cGVfdCBnZXRUeXBlKCkgY29uc3QgeyByZXR1cm4gbVR5cGU7IH0KIAotICAgIHZvaWQgZHVtcChpbnQgZmQsIGludCBzcGFjZXMpIGNvbnN0OworICAgIHZvaWQgZHVtcChTdHJpbmc4ICpkc3QsIGludCBzcGFjZXMpIGNvbnN0OwogCiBwcml2YXRlOgogICAgIEF1ZGlvUG9ydFZlY3RvciBtU291cmNlczsKZGlmZiAtLWdpdCBhL3NlcnZpY2VzL2F1ZGlvcG9saWN5L2NvbW1vbi9tYW5hZ2VyZGVmaW5pdGlvbnMvaW5jbHVkZS9BdWRpb1Nlc3Npb24uaCBiL3NlcnZpY2VzL2F1ZGlvcG9saWN5L2NvbW1vbi9tYW5hZ2VyZGVmaW5pdGlvbnMvaW5jbHVkZS9BdWRpb1Nlc3Npb24uaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZGQ1MjQ3ZC4uMDAwMDAwMAotLS0gYS9zZXJ2aWNlcy9hdWRpb3BvbGljeS9jb21tb24vbWFuYWdlcmRlZmluaXRpb25zL2luY2x1ZGUvQXVkaW9TZXNzaW9uLmgKKysrIC9kZXYvbnVsbApAQCAtMSwxMDggKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNSBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0Ci0gKgotICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7Ci0gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCi0gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLSAqCi0gKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotICoKLSAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKLSAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCi0gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KLSAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKLSAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgotICovCi0KLSNwcmFnbWEgb25jZQotCi0jaW5jbHVkZSA8c3lzdGVtL2F1ZGlvLmg+Ci0jaW5jbHVkZSA8dXRpbHMvRXJyb3JzLmg+Ci0jaW5jbHVkZSA8dXRpbHMvUmVmQmFzZS5oPgotI2luY2x1ZGUgPHV0aWxzL0Vycm9ycy5oPgotI2luY2x1ZGUgPHV0aWxzL0tleWVkVmVjdG9yLmg+Ci0jaW5jbHVkZSA8bWVkaWEvQXVkaW9Qb2xpY3kuaD4KLSNpbmNsdWRlIDxtZWRpYS9JQXVkaW9Qb2xpY3lTZXJ2aWNlQ2xpZW50Lmg+Ci0jaW5jbHVkZSAiQXVkaW9TZXNzaW9uSW5mb1Byb3ZpZGVyLmgiCi0KLW5hbWVzcGFjZSBhbmRyb2lkIHsKLQotY2xhc3MgQXVkaW9Qb2xpY3lDbGllbnRJbnRlcmZhY2U7Ci0KLWNsYXNzIEF1ZGlvU2Vzc2lvbiA6IHB1YmxpYyBSZWZCYXNlLCBwdWJsaWMgQXVkaW9TZXNzaW9uSW5mb1VwZGF0ZUxpc3RlbmVyCi17Ci1wdWJsaWM6Ci0gICAgQXVkaW9TZXNzaW9uKGF1ZGlvX3Nlc3Npb25fdCBzZXNzaW9uLAotICAgICAgICAgICAgICAgICBhdWRpb19zb3VyY2VfdCBpbnB1dFNvdXJjZSwKLSAgICAgICAgICAgICAgICAgYXVkaW9fZm9ybWF0X3QgZm9ybWF0LAotICAgICAgICAgICAgICAgICB1aW50MzJfdCBzYW1wbGVSYXRlLAotICAgICAgICAgICAgICAgICBhdWRpb19jaGFubmVsX21hc2tfdCBjaGFubmVsTWFzaywKLSAgICAgICAgICAgICAgICAgYXVkaW9faW5wdXRfZmxhZ3NfdCBmbGFncywKLSAgICAgICAgICAgICAgICAgdWlkX3QgdWlkLAotICAgICAgICAgICAgICAgICBib29sIGlzU291bmRUcmlnZ2VyLAotICAgICAgICAgICAgICAgICBBdWRpb01peCogcG9saWN5TWl4LAotICAgICAgICAgICAgICAgICBBdWRpb1BvbGljeUNsaWVudEludGVyZmFjZSAqY2xpZW50SW50ZXJmYWNlKTsKLQotICAgIHN0YXR1c190IGR1bXAoaW50IGZkLCBpbnQgc3BhY2VzLCBpbnQgaW5kZXgpIGNvbnN0OwotCi0gICAgYXVkaW9fc2Vzc2lvbl90IHNlc3Npb24oKSBjb25zdCB7IHJldHVybiBtUmVjb3JkQ2xpZW50SW5mby5zZXNzaW9uOyB9Ci0gICAgYXVkaW9fc291cmNlX3QgaW5wdXRTb3VyY2UoKWNvbnN0IHsgcmV0dXJuIG1SZWNvcmRDbGllbnRJbmZvLnNvdXJjZTsgfQotICAgIGF1ZGlvX2Zvcm1hdF90IGZvcm1hdCgpIGNvbnN0IHsgcmV0dXJuIG1Db25maWcuZm9ybWF0OyB9Ci0gICAgdWludDMyX3Qgc2FtcGxlUmF0ZSgpIGNvbnN0IHsgcmV0dXJuIG1Db25maWcuc2FtcGxlX3JhdGU7IH0KLSAgICBhdWRpb19jaGFubmVsX21hc2tfdCBjaGFubmVsTWFzaygpIGNvbnN0IHsgcmV0dXJuIG1Db25maWcuY2hhbm5lbF9tYXNrOyB9Ci0gICAgYXVkaW9faW5wdXRfZmxhZ3NfdCBmbGFncygpIGNvbnN0IHsgcmV0dXJuIG1GbGFnczsgfQotICAgIHVpZF90IHVpZCgpIGNvbnN0IHsgcmV0dXJuIG1SZWNvcmRDbGllbnRJbmZvLnVpZDsgfQotICAgIHZvaWQgc2V0VWlkKHVpZF90IHVpZCkgeyBtUmVjb3JkQ2xpZW50SW5mby51aWQgPSB1aWQ7IH0KLSAgICBib29sIG1hdGNoZXMoY29uc3Qgc3A8QXVkaW9TZXNzaW9uPiAmb3RoZXIpIGNvbnN0OwotICAgIGJvb2wgaXNTb3VuZFRyaWdnZXIoKSBjb25zdCB7IHJldHVybiBtSXNTb3VuZFRyaWdnZXI7IH0KLSAgICB2b2lkIHNldFNpbGVuY2VkKGJvb2wgc2lsZW5jZWQpIHsgbVNpbGVuY2VkID0gc2lsZW5jZWQ7IH0KLSAgICBib29sIGlzU2lsZW5jZWQoKSBjb25zdCB7IHJldHVybiBtU2lsZW5jZWQ7IH0KLSAgICB1aW50MzJfdCBvcGVuQ291bnQoKSBjb25zdCB7IHJldHVybiBtT3BlbkNvdW50OyB9IDsKLSAgICB1aW50MzJfdCBhY3RpdmVDb3VudCgpIGNvbnN0IHsgcmV0dXJuIG1BY3RpdmVDb3VudDsgfSA7Ci0KLSAgICB1aW50MzJfdCBjaGFuZ2VPcGVuQ291bnQoaW50IGRlbHRhKTsKLSAgICB1aW50MzJfdCBjaGFuZ2VBY3RpdmVDb3VudChpbnQgZGVsdGEpOwotCi0gICAgdm9pZCBzZXRJbmZvUHJvdmlkZXIoQXVkaW9TZXNzaW9uSW5mb1Byb3ZpZGVyICpwcm92aWRlcik7Ci0gICAgLy8gaW1wbGVtZW50YXRpb24gb2YgQXVkaW9TZXNzaW9uSW5mb1VwZGF0ZUxpc3RlbmVyCi0gICAgdmlydHVhbCB2b2lkIG9uU2Vzc2lvbkluZm9VcGRhdGUoKSBjb25zdDsKLQotcHJpdmF0ZToKLSAgICByZWNvcmRfY2xpZW50X2luZm9fdCBtUmVjb3JkQ2xpZW50SW5mbzsKLSAgICBjb25zdCBzdHJ1Y3QgYXVkaW9fY29uZmlnX2Jhc2UgbUNvbmZpZzsKLSAgICBjb25zdCBhdWRpb19pbnB1dF9mbGFnc190IG1GbGFnczsKLSAgICBib29sICBtSXNTb3VuZFRyaWdnZXI7Ci0gICAgYm9vbCBtU2lsZW5jZWQ7Ci0gICAgdWludDMyX3QgIG1PcGVuQ291bnQ7Ci0gICAgdWludDMyX3QgIG1BY3RpdmVDb3VudDsKLSAgICBBdWRpb01peCogbVBvbGljeU1peDsgLy8gbm9uIE5VTEwgd2hlbiB1c2VkIGJ5IGEgZHluYW1pYyBwb2xpY3kKLSAgICBBdWRpb1BvbGljeUNsaWVudEludGVyZmFjZSogbUNsaWVudEludGVyZmFjZTsKLSAgICBjb25zdCBBdWRpb1Nlc3Npb25JbmZvUHJvdmlkZXIqIG1JbmZvUHJvdmlkZXI7Ci19OwotCi1jbGFzcyBBdWRpb1Nlc3Npb25Db2xsZWN0aW9uIDoKLSAgICBwdWJsaWMgRGVmYXVsdEtleWVkVmVjdG9yPGF1ZGlvX3Nlc3Npb25fdCwgc3A8QXVkaW9TZXNzaW9uPiA+LAotICAgIHB1YmxpYyBBdWRpb1Nlc3Npb25JbmZvVXBkYXRlTGlzdGVuZXIKLXsKLXB1YmxpYzoKLSAgICBzdGF0dXNfdCBhZGRTZXNzaW9uKGF1ZGlvX3Nlc3Npb25fdCBzZXNzaW9uLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzcDxBdWRpb1Nlc3Npb24+JiBhdWRpb1Nlc3Npb24sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIEF1ZGlvU2Vzc2lvbkluZm9Qcm92aWRlciAqcHJvdmlkZXIpOwotCi0gICAgc3RhdHVzX3QgcmVtb3ZlU2Vzc2lvbihhdWRpb19zZXNzaW9uX3Qgc2Vzc2lvbik7Ci0KLSAgICB1aW50MzJfdCBnZXRPcGVuQ291bnQoKSBjb25zdDsKLQotICAgIEF1ZGlvU2Vzc2lvbkNvbGxlY3Rpb24gZ2V0QWN0aXZlU2Vzc2lvbnMoKSBjb25zdDsKLSAgICBzaXplX3QgZ2V0QWN0aXZlU2Vzc2lvbkNvdW50KCkgY29uc3Q7Ci0gICAgYm9vbCBoYXNBY3RpdmVTZXNzaW9uKCkgY29uc3Q7Ci0gICAgYm9vbCBpc1NvdXJjZUFjdGl2ZShhdWRpb19zb3VyY2VfdCBzb3VyY2UpIGNvbnN0OwotICAgIGF1ZGlvX3NvdXJjZV90IGdldEhpZ2hlc3RQcmlvcml0eVNvdXJjZShib29sIGFjdGl2ZU9ubHkpIGNvbnN0OwotCi0gICAgLy8gaW1wbGVtZW50YXRpb24gb2YgQXVkaW9TZXNzaW9uSW5mb1VwZGF0ZUxpc3RlbmVyCi0gICAgdmlydHVhbCB2b2lkIG9uU2Vzc2lvbkluZm9VcGRhdGUoKSBjb25zdDsKLQotICAgIHN0YXR1c190IGR1bXAoaW50IGZkLCBpbnQgc3BhY2VzKSBjb25zdDsKLX07Ci0KLX0gLy8gbmFtZXNwYWNlIGFuZHJvaWQKZGlmZiAtLWdpdCBhL3NlcnZpY2VzL2F1ZGlvcG9saWN5L2NvbW1vbi9tYW5hZ2VyZGVmaW5pdGlvbnMvaW5jbHVkZS9BdWRpb1Nlc3Npb25JbmZvUHJvdmlkZXIuaCBiL3NlcnZpY2VzL2F1ZGlvcG9saWN5L2NvbW1vbi9tYW5hZ2VyZGVmaW5pdGlvbnMvaW5jbHVkZS9BdWRpb1Nlc3Npb25JbmZvUHJvdmlkZXIuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTAwMzdmYy4uMDAwMDAwMAotLS0gYS9zZXJ2aWNlcy9hdWRpb3BvbGljeS9jb21tb24vbWFuYWdlcmRlZmluaXRpb25zL2luY2x1ZGUvQXVkaW9TZXNzaW9uSW5mb1Byb3ZpZGVyLmgKKysrIC9kZXYvbnVsbApAQCAtMSw0NCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDE2IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKLSAqCi0gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKLSAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KLSAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotICoKLSAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0gKgotICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQotICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKLSAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgotICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAotICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCi0gKi8KLQotI3ByYWdtYSBvbmNlCi0KLW5hbWVzcGFjZSBhbmRyb2lkIHsKLQotLyoqCi0gKiBJbnRlcmZhY2UgZm9yIGlucHV0IGRlc2NyaXB0b3JzIHRvIGltcGxlbWVudCBzbyBkZXBlbmRlbnQgYXVkaW8gc2Vzc2lvbnMgY2FuIHF1ZXJ5IGluZm9ybWF0aW9uCi0gKiBhYm91dCB0aGVpciBjb250ZXh0Ci0gKi8KLWNsYXNzIEF1ZGlvU2Vzc2lvbkluZm9Qcm92aWRlcgotewotcHVibGljOgotICAgIHZpcnR1YWwgfkF1ZGlvU2Vzc2lvbkluZm9Qcm92aWRlcigpIHt9OwotCi0gICAgdmlydHVhbCBhdWRpb19jb25maWdfYmFzZV90IGdldENvbmZpZygpIGNvbnN0ID0gMDsKLQotICAgIHZpcnR1YWwgYXVkaW9fcGF0Y2hfaGFuZGxlX3QgZ2V0UGF0Y2hIYW5kbGUoKSBjb25zdCA9IDA7Ci0KLX07Ci0KLWNsYXNzIEF1ZGlvU2Vzc2lvbkluZm9VcGRhdGVMaXN0ZW5lcgotewotcHVibGljOgotICAgIHZpcnR1YWwgfkF1ZGlvU2Vzc2lvbkluZm9VcGRhdGVMaXN0ZW5lcigpIHt9OwotCi0gICAgdmlydHVhbCB2b2lkIG9uU2Vzc2lvbkluZm9VcGRhdGUoKSBjb25zdCA9IDA7OwotfTsKLQotfSAvLyBuYW1lc3BhY2UgYW5kcm9pZApkaWZmIC0tZ2l0IGEvc2VydmljZXMvYXVkaW9wb2xpY3kvY29tbW9uL21hbmFnZXJkZWZpbml0aW9ucy9pbmNsdWRlL0F1ZGlvU291cmNlRGVzY3JpcHRvci5oIGIvc2VydmljZXMvYXVkaW9wb2xpY3kvY29tbW9uL21hbmFnZXJkZWZpbml0aW9ucy9pbmNsdWRlL0F1ZGlvU291cmNlRGVzY3JpcHRvci5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwZDkwZjQyLi4wMDAwMDAwCi0tLSBhL3NlcnZpY2VzL2F1ZGlvcG9saWN5L2NvbW1vbi9tYW5hZ2VyZGVmaW5pdGlvbnMvaW5jbHVkZS9BdWRpb1NvdXJjZURlc2NyaXB0b3IuaAorKysgL2Rldi9udWxsCkBAIC0xLDU5ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTUgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAotICoKLSAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwotICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgotICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0gKgotICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLSAqCi0gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCi0gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAotICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCi0gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCi0gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KLSAqLwotCi0jcHJhZ21hIG9uY2UKLQotI2luY2x1ZGUgPHN5c3RlbS9hdWRpby5oPgotI2luY2x1ZGUgPHV0aWxzL0Vycm9ycy5oPgotI2luY2x1ZGUgPHV0aWxzL0tleWVkVmVjdG9yLmg+Ci0jaW5jbHVkZSA8dXRpbHMvUmVmQmFzZS5oPgotI2luY2x1ZGUgPFJvdXRpbmdTdHJhdGVneS5oPgotI2luY2x1ZGUgPEF1ZGlvUGF0Y2guaD4KLQotbmFtZXNwYWNlIGFuZHJvaWQgewotCi1jbGFzcyBTd0F1ZGlvT3V0cHV0RGVzY3JpcHRvcjsKLWNsYXNzIEh3QXVkaW9PdXRwdXREZXNjcmlwdG9yOwotY2xhc3MgRGV2aWNlRGVzY3JpcHRvcjsKLQotY2xhc3MgQXVkaW9Tb3VyY2VEZXNjcmlwdG9yOiBwdWJsaWMgUmVmQmFzZQotewotcHVibGljOgotICAgIEF1ZGlvU291cmNlRGVzY3JpcHRvcihjb25zdCBzcDxEZXZpY2VEZXNjcmlwdG9yPiBkZXZpY2UsIGNvbnN0IGF1ZGlvX2F0dHJpYnV0ZXNfdCAqYXR0cmlidXRlcywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgdWlkX3QgdWlkKSA6Ci0gICAgICAgIG1EZXZpY2UoZGV2aWNlKSwgbUF0dHJpYnV0ZXMoKmF0dHJpYnV0ZXMpLCBtVWlkKHVpZCkge30KLSAgICB2aXJ0dWFsIH5BdWRpb1NvdXJjZURlc2NyaXB0b3IoKSB7fQotCi0gICAgYXVkaW9fcGF0Y2hfaGFuZGxlX3QgZ2V0SGFuZGxlKCkgY29uc3QgeyByZXR1cm4gbVBhdGNoRGVzYy0+bUhhbmRsZTsgfQotCi0gICAgc3RhdHVzX3QgICAgZHVtcChpbnQgZmQpOwotCi0gICAgY29uc3Qgc3A8RGV2aWNlRGVzY3JpcHRvcj4gbURldmljZTsKLSAgICBjb25zdCBhdWRpb19hdHRyaWJ1dGVzX3QgbUF0dHJpYnV0ZXM7Ci0gICAgdWlkX3QgbVVpZDsKLSAgICBzcDxBdWRpb1BhdGNoPiBtUGF0Y2hEZXNjOwotICAgIHdwPFN3QXVkaW9PdXRwdXREZXNjcmlwdG9yPiBtU3dPdXRwdXQ7Ci0gICAgd3A8SHdBdWRpb091dHB1dERlc2NyaXB0b3I+IG1Id091dHB1dDsKLX07Ci0KLWNsYXNzIEF1ZGlvU291cmNlQ29sbGVjdGlvbiA6Ci0gICAgICAgIHB1YmxpYyBEZWZhdWx0S2V5ZWRWZWN0b3I8IGF1ZGlvX3BhdGNoX2hhbmRsZV90LCBzcDxBdWRpb1NvdXJjZURlc2NyaXB0b3I+ID4KLXsKLXB1YmxpYzoKLSAgICBzdGF0dXNfdCBkdW1wKGludCBmZCkgY29uc3Q7Ci19OwotCi19IC8vIG5hbWVzcGFjZSBhbmRyb2lkCmRpZmYgLS1naXQgYS9zZXJ2aWNlcy9hdWRpb3BvbGljeS9jb21tb24vbWFuYWdlcmRlZmluaXRpb25zL2luY2x1ZGUvQ2xpZW50RGVzY3JpcHRvci5oIGIvc2VydmljZXMvYXVkaW9wb2xpY3kvY29tbW9uL21hbmFnZXJkZWZpbml0aW9ucy9pbmNsdWRlL0NsaWVudERlc2NyaXB0b3IuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMzBiZjRiCi0tLSAvZGV2L251bGwKKysrIGIvc2VydmljZXMvYXVkaW9wb2xpY3kvY29tbW9uL21hbmFnZXJkZWZpbml0aW9ucy9pbmNsdWRlL0NsaWVudERlc2NyaXB0b3IuaApAQCAtMCwwICsxLDI0NiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxOCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSA8dmVjdG9yPgorI2luY2x1ZGUgPG1hcD4KKyNpbmNsdWRlIDx1bmlzdGQuaD4KKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKworI2luY2x1ZGUgPHN5c3RlbS9hdWRpby5oPgorI2luY2x1ZGUgPHV0aWxzL0Vycm9ycy5oPgorI2luY2x1ZGUgPHV0aWxzL0tleWVkVmVjdG9yLmg+CisjaW5jbHVkZSA8dXRpbHMvUmVmQmFzZS5oPgorI2luY2x1ZGUgPHV0aWxzL1N0cmluZzguaD4KKyNpbmNsdWRlICJBdWRpb1BhdGNoLmgiCisjaW5jbHVkZSAiUm91dGluZ1N0cmF0ZWd5LmgiCisKK25hbWVzcGFjZSBhbmRyb2lkIHsKKworY2xhc3MgRGV2aWNlRGVzY3JpcHRvcjsKK2NsYXNzIEh3QXVkaW9PdXRwdXREZXNjcmlwdG9yOworY2xhc3MgU3dBdWRpb091dHB1dERlc2NyaXB0b3I7CisKK2NsYXNzIENsaWVudERlc2NyaXB0b3I6IHB1YmxpYyBSZWZCYXNlCit7CitwdWJsaWM6CisgICAgQ2xpZW50RGVzY3JpcHRvcihhdWRpb19wb3J0X2hhbmRsZV90IHBvcnRJZCwgdWlkX3QgdWlkLCBhdWRpb19zZXNzaW9uX3Qgc2Vzc2lvbklkLAorICAgICAgICAgICAgICAgICAgIGF1ZGlvX2F0dHJpYnV0ZXNfdCBhdHRyaWJ1dGVzLCBhdWRpb19jb25maWdfYmFzZV90IGNvbmZpZywKKyAgICAgICAgICAgICAgICAgICBhdWRpb19wb3J0X2hhbmRsZV90IHByZWZlcnJlZERldmljZUlkKSA6CisgICAgICAgIG1Qb3J0SWQocG9ydElkKSwgbVVpZCh1aWQpLCBtU2Vzc2lvbklkKHNlc3Npb25JZCksIG1BdHRyaWJ1dGVzKGF0dHJpYnV0ZXMpLAorICAgICAgICBtQ29uZmlnKGNvbmZpZyksIG1QcmVmZXJyZWREZXZpY2VJZChwcmVmZXJyZWREZXZpY2VJZCksIG1BY3RpdmUoZmFsc2UpIHt9CisgICAgfkNsaWVudERlc2NyaXB0b3IoKSBvdmVycmlkZSA9IGRlZmF1bHQ7CisKKyAgICB2aXJ0dWFsIHZvaWQgZHVtcChTdHJpbmc4ICpkc3QsIGludCBzcGFjZXMsIGludCBpbmRleCkgY29uc3Q7CisgICAgdmlydHVhbCBzdGQ6OnN0cmluZyB0b1Nob3J0U3RyaW5nKCkgY29uc3Q7CisKKyAgICBhdWRpb19wb3J0X2hhbmRsZV90IHBvcnRJZCgpIGNvbnN0IHsgcmV0dXJuIG1Qb3J0SWQ7IH0KKyAgICB1aWRfdCB1aWQoKSBjb25zdCB7IHJldHVybiBtVWlkOyB9CisgICAgYXVkaW9fc2Vzc2lvbl90IHNlc3Npb24oKSBjb25zdCB7IHJldHVybiBtU2Vzc2lvbklkOyB9OworICAgIGF1ZGlvX2F0dHJpYnV0ZXNfdCBhdHRyaWJ1dGVzKCkgY29uc3QgeyByZXR1cm4gbUF0dHJpYnV0ZXM7IH0KKyAgICBhdWRpb19jb25maWdfYmFzZV90IGNvbmZpZygpIGNvbnN0IHsgcmV0dXJuIG1Db25maWc7IH0KKyAgICBhdWRpb19wb3J0X2hhbmRsZV90IHByZWZlcnJlZERldmljZUlkKCkgY29uc3QgeyByZXR1cm4gbVByZWZlcnJlZERldmljZUlkOyB9OworICAgIHZvaWQgc2V0UHJlZmVycmVkRGV2aWNlSWQoYXVkaW9fcG9ydF9oYW5kbGVfdCBwcmVmZXJyZWREZXZpY2VJZCkgeworICAgICAgICBtUHJlZmVycmVkRGV2aWNlSWQgPSBwcmVmZXJyZWREZXZpY2VJZDsKKyAgICB9OworICAgIHZvaWQgc2V0QWN0aXZlKGJvb2wgYWN0aXZlKSB7IG1BY3RpdmUgPSBhY3RpdmU7IH0KKyAgICBib29sIGFjdGl2ZSgpIGNvbnN0IHsgcmV0dXJuIG1BY3RpdmU7IH0KKyAgICBib29sIGhhc1ByZWZlcnJlZERldmljZShib29sIGFjdGl2ZU9ubHkgPSBmYWxzZSkgY29uc3QgeworICAgICAgICByZXR1cm4gbVByZWZlcnJlZERldmljZUlkICE9IEFVRElPX1BPUlRfSEFORExFX05PTkUgJiYgKCFhY3RpdmVPbmx5IHx8IG1BY3RpdmUpOworICAgIH0KKworcHJpdmF0ZToKKyAgICBjb25zdCBhdWRpb19wb3J0X2hhbmRsZV90IG1Qb3J0SWQ7ICAvLyB1bmlxdWUgSWQgZm9yIHRoaXMgY2xpZW50CisgICAgY29uc3QgdWlkX3QgbVVpZDsgICAgICAgICAgICAgICAgICAgICAvLyBjbGllbnQgVUlECisgICAgY29uc3QgYXVkaW9fc2Vzc2lvbl90IG1TZXNzaW9uSWQ7ICAgICAgIC8vIGF1ZGlvIHNlc3Npb24gSUQKKyAgICBjb25zdCBhdWRpb19hdHRyaWJ1dGVzX3QgbUF0dHJpYnV0ZXM7IC8vIHVzYWdlLi4uCisgICAgY29uc3QgYXVkaW9fY29uZmlnX2Jhc2VfdCBtQ29uZmlnOworICAgICAgICAgIGF1ZGlvX3BvcnRfaGFuZGxlX3QgbVByZWZlcnJlZERldmljZUlkOyAgLy8gc2VsZWN0ZWQgaW5wdXQgZGV2aWNlIHBvcnQgSUQKKyAgICAgICAgICBib29sIG1BY3RpdmU7Cit9OworCitjbGFzcyBUcmFja0NsaWVudERlc2NyaXB0b3I6IHB1YmxpYyBDbGllbnREZXNjcmlwdG9yCit7CitwdWJsaWM6CisgICAgVHJhY2tDbGllbnREZXNjcmlwdG9yKGF1ZGlvX3BvcnRfaGFuZGxlX3QgcG9ydElkLCB1aWRfdCB1aWQsIGF1ZGlvX3Nlc3Npb25fdCBzZXNzaW9uSWQsCisgICAgICAgICAgICAgICAgICAgYXVkaW9fYXR0cmlidXRlc190IGF0dHJpYnV0ZXMsIGF1ZGlvX2NvbmZpZ19iYXNlX3QgY29uZmlnLAorICAgICAgICAgICAgICAgICAgIGF1ZGlvX3BvcnRfaGFuZGxlX3QgcHJlZmVycmVkRGV2aWNlSWQsIGF1ZGlvX3N0cmVhbV90eXBlX3Qgc3RyZWFtLAorICAgICAgICAgICAgICAgICAgICAgICAgICByb3V0aW5nX3N0cmF0ZWd5IHN0cmF0ZWd5LCBhdWRpb19vdXRwdXRfZmxhZ3NfdCBmbGFncykgOgorICAgICAgICBDbGllbnREZXNjcmlwdG9yKHBvcnRJZCwgdWlkLCBzZXNzaW9uSWQsIGF0dHJpYnV0ZXMsIGNvbmZpZywgcHJlZmVycmVkRGV2aWNlSWQpLAorICAgICAgICBtU3RyZWFtKHN0cmVhbSksIG1TdHJhdGVneShzdHJhdGVneSksIG1GbGFncyhmbGFncykge30KKyAgICB+VHJhY2tDbGllbnREZXNjcmlwdG9yKCkgb3ZlcnJpZGUgPSBkZWZhdWx0OworCisgICAgdXNpbmcgQ2xpZW50RGVzY3JpcHRvcjo6ZHVtcDsKKyAgICB2b2lkIGR1bXAoU3RyaW5nOCAqZHN0LCBpbnQgc3BhY2VzLCBpbnQgaW5kZXgpIGNvbnN0IG92ZXJyaWRlOworICAgIHN0ZDo6c3RyaW5nIHRvU2hvcnRTdHJpbmcoKSBjb25zdCBvdmVycmlkZTsKKworICAgIGF1ZGlvX291dHB1dF9mbGFnc190IGZsYWdzKCkgY29uc3QgeyByZXR1cm4gbUZsYWdzOyB9CisgICAgYXVkaW9fc3RyZWFtX3R5cGVfdCBzdHJlYW0oKSBjb25zdCB7IHJldHVybiBtU3RyZWFtOyB9CisgICAgcm91dGluZ19zdHJhdGVneSBzdHJhdGVneSgpIGNvbnN0IHsgcmV0dXJuIG1TdHJhdGVneTsgfQorCitwcml2YXRlOgorICAgIGNvbnN0IGF1ZGlvX3N0cmVhbV90eXBlX3QgbVN0cmVhbTsKKyAgICBjb25zdCByb3V0aW5nX3N0cmF0ZWd5IG1TdHJhdGVneTsKKyAgICBjb25zdCBhdWRpb19vdXRwdXRfZmxhZ3NfdCBtRmxhZ3M7Cit9OworCitjbGFzcyBSZWNvcmRDbGllbnREZXNjcmlwdG9yOiBwdWJsaWMgQ2xpZW50RGVzY3JpcHRvcgoreworcHVibGljOgorICAgIFJlY29yZENsaWVudERlc2NyaXB0b3IoYXVkaW9fcG9ydF9oYW5kbGVfdCBwb3J0SWQsIHVpZF90IHVpZCwgYXVkaW9fc2Vzc2lvbl90IHNlc3Npb25JZCwKKyAgICAgICAgICAgICAgICAgICAgICAgIGF1ZGlvX2F0dHJpYnV0ZXNfdCBhdHRyaWJ1dGVzLCBhdWRpb19jb25maWdfYmFzZV90IGNvbmZpZywKKyAgICAgICAgICAgICAgICAgICAgICAgIGF1ZGlvX3BvcnRfaGFuZGxlX3QgcHJlZmVycmVkRGV2aWNlSWQsCisgICAgICAgICAgICAgICAgICAgICAgICBhdWRpb19zb3VyY2VfdCBzb3VyY2UsIGF1ZGlvX2lucHV0X2ZsYWdzX3QgZmxhZ3MsIGJvb2wgaXNTb3VuZFRyaWdnZXIpIDoKKyAgICAgICAgQ2xpZW50RGVzY3JpcHRvcihwb3J0SWQsIHVpZCwgc2Vzc2lvbklkLCBhdHRyaWJ1dGVzLCBjb25maWcsIHByZWZlcnJlZERldmljZUlkKSwKKyAgICAgICAgbVNvdXJjZShzb3VyY2UpLCBtRmxhZ3MoZmxhZ3MpLCBtSXNTb3VuZFRyaWdnZXIoaXNTb3VuZFRyaWdnZXIpLCBtU2lsZW5jZWQoZmFsc2UpIHt9CisgICAgflJlY29yZENsaWVudERlc2NyaXB0b3IoKSBvdmVycmlkZSA9IGRlZmF1bHQ7CisKKyAgICB1c2luZyBDbGllbnREZXNjcmlwdG9yOjpkdW1wOworICAgIHZvaWQgZHVtcChTdHJpbmc4ICpkc3QsIGludCBzcGFjZXMsIGludCBpbmRleCkgY29uc3Qgb3ZlcnJpZGU7CisKKyAgICBhdWRpb19zb3VyY2VfdCBzb3VyY2UoKSBjb25zdCB7IHJldHVybiBtU291cmNlOyB9CisgICAgYXVkaW9faW5wdXRfZmxhZ3NfdCBmbGFncygpIGNvbnN0IHsgcmV0dXJuIG1GbGFnczsgfQorICAgIGJvb2wgaXNTb3VuZFRyaWdnZXIoKSBjb25zdCB7IHJldHVybiBtSXNTb3VuZFRyaWdnZXI7IH0KKyAgICB2b2lkIHNldFNpbGVuY2VkKGJvb2wgc2lsZW5jZWQpIHsgbVNpbGVuY2VkID0gc2lsZW5jZWQ7IH0KKyAgICBib29sIGlzU2lsZW5jZWQoKSBjb25zdCB7IHJldHVybiBtU2lsZW5jZWQ7IH0KKworcHJpdmF0ZToKKyAgICBjb25zdCBhdWRpb19zb3VyY2VfdCBtU291cmNlOworICAgIGNvbnN0IGF1ZGlvX2lucHV0X2ZsYWdzX3QgbUZsYWdzOworICAgIGNvbnN0IGJvb2wgbUlzU291bmRUcmlnZ2VyOworICAgICAgICAgIGJvb2wgbVNpbGVuY2VkOworfTsKKworY2xhc3MgU291cmNlQ2xpZW50RGVzY3JpcHRvcjogcHVibGljIFRyYWNrQ2xpZW50RGVzY3JpcHRvcgoreworcHVibGljOgorICAgIFNvdXJjZUNsaWVudERlc2NyaXB0b3IoYXVkaW9fcG9ydF9oYW5kbGVfdCBwb3J0SWQsIHVpZF90IHVpZCwgYXVkaW9fYXR0cmlidXRlc190IGF0dHJpYnV0ZXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzcDxBdWRpb1BhdGNoPiYgcGF0Y2hEZXNjLCBjb25zdCBzcDxEZXZpY2VEZXNjcmlwdG9yPiYgc3JjRGV2aWNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgYXVkaW9fc3RyZWFtX3R5cGVfdCBzdHJlYW0sIHJvdXRpbmdfc3RyYXRlZ3kgc3RyYXRlZ3kpOworICAgIH5Tb3VyY2VDbGllbnREZXNjcmlwdG9yKCkgb3ZlcnJpZGUgPSBkZWZhdWx0OworCisgICAgc3A8QXVkaW9QYXRjaD4gcGF0Y2hEZXNjKCkgY29uc3QgeyByZXR1cm4gbVBhdGNoRGVzYzsgfQorICAgIHNwPERldmljZURlc2NyaXB0b3I+IHNyY0RldmljZSgpIGNvbnN0IHsgcmV0dXJuIG1TcmNEZXZpY2U7IH07CisgICAgd3A8U3dBdWRpb091dHB1dERlc2NyaXB0b3I+IHN3T3V0cHV0KCkgY29uc3QgeyByZXR1cm4gbVN3T3V0cHV0OyB9CisgICAgdm9pZCBzZXRTd091dHB1dChjb25zdCBzcDxTd0F1ZGlvT3V0cHV0RGVzY3JpcHRvcj4mIHN3T3V0cHV0KTsKKyAgICB3cDxId0F1ZGlvT3V0cHV0RGVzY3JpcHRvcj4gaHdPdXRwdXQoKSBjb25zdCB7IHJldHVybiBtSHdPdXRwdXQ7IH0KKyAgICB2b2lkIHNldEh3T3V0cHV0KGNvbnN0IHNwPEh3QXVkaW9PdXRwdXREZXNjcmlwdG9yPiYgaHdPdXRwdXQpOworCisgICAgdXNpbmcgQ2xpZW50RGVzY3JpcHRvcjo6ZHVtcDsKKyAgICB2b2lkIGR1bXAoU3RyaW5nOCAqZHN0LCBpbnQgc3BhY2VzLCBpbnQgaW5kZXgpIGNvbnN0IG92ZXJyaWRlOworCisgcHJpdmF0ZToKKyAgICBjb25zdCBzcDxBdWRpb1BhdGNoPiBtUGF0Y2hEZXNjOworICAgIGNvbnN0IHNwPERldmljZURlc2NyaXB0b3I+IG1TcmNEZXZpY2U7CisgICAgd3A8U3dBdWRpb091dHB1dERlc2NyaXB0b3I+IG1Td091dHB1dDsKKyAgICB3cDxId0F1ZGlvT3V0cHV0RGVzY3JpcHRvcj4gbUh3T3V0cHV0OworfTsKKworY2xhc3MgU291cmNlQ2xpZW50Q29sbGVjdGlvbiA6CisgICAgcHVibGljIERlZmF1bHRLZXllZFZlY3RvcjwgYXVkaW9fcG9ydF9oYW5kbGVfdCwgc3A8U291cmNlQ2xpZW50RGVzY3JpcHRvcj4gPgoreworcHVibGljOgorICAgIHZvaWQgZHVtcChTdHJpbmc4ICpkc3QpIGNvbnN0OworfTsKKwordHlwZWRlZiBzdGQ6OnZlY3Rvcjwgc3A8VHJhY2tDbGllbnREZXNjcmlwdG9yPiA+IFRyYWNrQ2xpZW50VmVjdG9yOwordHlwZWRlZiBzdGQ6OnZlY3Rvcjwgc3A8UmVjb3JkQ2xpZW50RGVzY3JpcHRvcj4gPiBSZWNvcmRDbGllbnRWZWN0b3I7CisKKy8vIEEgTWFwIHRoYXQgYXNzb2NpYXRlcyBhIHBvcnRJZCB3aXRoIGEgY2xpZW50ICh0eXBlIFQpCisvLyB3aGljaCBpcyBlaXRoZXIgVHJhY2tDbGllbnREZXNjcmlwdG9yIG9yIFJlY29yZENsaWVudERlc2NyaXB0b3IuCisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+CitjbGFzcyBDbGllbnRNYXBIYW5kbGVyIHsKK3B1YmxpYzoKKyAgICB2aXJ0dWFsIH5DbGllbnRNYXBIYW5kbGVyKCkgPSBkZWZhdWx0OworCisgICAgLy8gVHJhY2sgY2xpZW50IG1hbmFnZW1lbnQKKyAgICB2b2lkIGFkZENsaWVudChjb25zdCBzcDxUPiAmY2xpZW50KSB7CisgICAgICAgIGNvbnN0IGF1ZGlvX3BvcnRfaGFuZGxlX3QgcG9ydElkID0gY2xpZW50LT5wb3J0SWQoKTsKKyAgICAgICAgTE9HX0FMV0FZU19GQVRBTF9JRighbUNsaWVudHMuZW1wbGFjZShwb3J0SWQsIGNsaWVudCkuc2Vjb25kLAorICAgICAgICAgICAgICAgICIlcyglZCk6IGF0dGVtcHRpbmcgdG8gYWRkIGNsaWVudCB0aGF0IGFscmVhZHkgZXhpc3RzIiwgX19mdW5jX18sIHBvcnRJZCk7CisgICAgfQorICAgIHNwPFQ+IGdldENsaWVudChhdWRpb19wb3J0X2hhbmRsZV90IHBvcnRJZCkgY29uc3QgeworICAgICAgICBhdXRvIGl0ID0gbUNsaWVudHMuZmluZChwb3J0SWQpOworICAgICAgICBpZiAoaXQgPT0gbUNsaWVudHMuZW5kKCkpIHJldHVybiBudWxscHRyOworICAgICAgICByZXR1cm4gaXQtPnNlY29uZDsKKyAgICB9CisgICAgdmlydHVhbCB2b2lkIHJlbW92ZUNsaWVudChhdWRpb19wb3J0X2hhbmRsZV90IHBvcnRJZCkgeworICAgICAgICBhdXRvIGl0ID0gbUNsaWVudHMuZmluZChwb3J0SWQpOworICAgICAgICBMT0dfQUxXQVlTX0ZBVEFMX0lGKGl0ID09IG1DbGllbnRzLmVuZCgpLAorICAgICAgICAgICAgICAgICIlcyglZCk6IGNsaWVudCBkb2VzIG5vdCBleGlzdCIsIF9fZnVuY19fLCBwb3J0SWQpOworICAgICAgICBMT0dfQUxXQVlTX0ZBVEFMX0lGKGl0LT5zZWNvbmQtPmFjdGl2ZSgpLAorICAgICAgICAgICAgICAgICIlcyglZCk6IHJlbW92aW5nIGNsaWVudCBzdGlsbCBhY3RpdmUhIiwgX19mdW5jX18sIHBvcnRJZCk7CisgICAgICAgICh2b2lkKW1DbGllbnRzLmVyYXNlKGl0KTsKKyAgICB9CisgICAgc2l6ZV90IGdldENsaWVudENvdW50KCkgY29uc3QgeworICAgICAgICByZXR1cm4gbUNsaWVudHMuc2l6ZSgpOworICAgIH0KKyAgICB2aXJ0dWFsIHZvaWQgZHVtcChTdHJpbmc4ICpkc3QpIGNvbnN0IHsKKyAgICAgICAgc2l6ZV90IGluZGV4ID0gMDsKKyAgICAgICAgZm9yIChjb25zdCBhdXRvJiBjbGllbnQ6IGdldENsaWVudEl0ZXJhYmxlKCkpIHsKKyAgICAgICAgICAgIGNsaWVudC0+ZHVtcChkc3QsIDIsIGluZGV4KyspOworICAgICAgICB9CisgICAgfQorCisgICAgLy8gaGVscGVyIHR5cGVzCisgICAgdXNpbmcgQ2xpZW50TWFwID0gc3RkOjptYXA8YXVkaW9fcG9ydF9oYW5kbGVfdCwgc3A8VD4+OworICAgIHVzaW5nIENsaWVudE1hcEl0ZXJhdG9yID0gdHlwZW5hbWUgQ2xpZW50TWFwOjpjb25zdF9pdGVyYXRvcjsgIC8vIENsaWVudE1hcCBpcyBjb25zdCBxdWFsaWZpZWQKKyAgICBjbGFzcyBDbGllbnRJdGVyYWJsZSB7CisgICAgcHVibGljOgorICAgICAgICBleHBsaWNpdCBDbGllbnRJdGVyYWJsZShjb25zdCBDbGllbnRNYXBIYW5kbGVyPFQ+ICZyZWYpIDogbUNsaWVudE1hcEhhbmRsZXIocmVmKSB7IH0KKworICAgICAgICBjbGFzcyBpdGVyYXRvciB7CisgICAgICAgIHB1YmxpYzoKKyAgICAgICAgICAgIC8vIHRyYWl0cworICAgICAgICAgICAgdXNpbmcgaXRlcmF0b3JfY2F0ZWdvcnkgPSBzdGQ6OmZvcndhcmRfaXRlcmF0b3JfdGFnOworICAgICAgICAgICAgdXNpbmcgdmFsdWVfdHlwZSA9IHNwPFQ+OworICAgICAgICAgICAgdXNpbmcgZGlmZmVyZW5jZV90eXBlID0gcHRyZGlmZl90OworICAgICAgICAgICAgdXNpbmcgcG9pbnRlciA9IGNvbnN0IHNwPFQ+KjsgICAgLy8gTm90ZTogY29uc3QKKyAgICAgICAgICAgIHVzaW5nIHJlZmVyZW5jZSA9IGNvbnN0IHNwPFQ+JjsgIC8vIE5vdGU6IGNvbnN0CisKKyAgICAgICAgICAgIC8vIGltcGxlbWVudGF0aW9uCisgICAgICAgICAgICBleHBsaWNpdCBpdGVyYXRvcihjb25zdCBDbGllbnRNYXBJdGVyYXRvciAmaXQpIDogbUl0KGl0KSB7IH0KKyAgICAgICAgICAgIGl0ZXJhdG9yJiBvcGVyYXRvcisrKCkgICAgLyogcHJlZml4ICovICAgICB7ICsrbUl0OyByZXR1cm4gKnRoaXM7IH0KKyAgICAgICAgICAgIHJlZmVyZW5jZSBvcGVyYXRvciogKCkgY29uc3QgICAgICAgICAgICAgICB7IHJldHVybiBtSXQtPnNlY29uZDsgfQorICAgICAgICAgICAgcmVmZXJlbmNlIG9wZXJhdG9yLT4oKSBjb25zdCAgICAgICAgICAgICAgIHsgcmV0dXJuIG1JdC0+c2Vjb25kOyB9IC8vIGFzIGlmIHNwPD4KKyAgICAgICAgICAgIGRpZmZlcmVuY2VfdHlwZSBvcGVyYXRvci0oY29uc3QgaXRlcmF0b3ImIHJocykge3JldHVybiBtSXQgLSByaHMubUl0OyB9CisgICAgICAgICAgICBib29sIG9wZXJhdG9yPT0oY29uc3QgaXRlcmF0b3ImIHJocykgY29uc3QgeyByZXR1cm4gbUl0ID09IHJocy5tSXQ7IH0KKyAgICAgICAgICAgIGJvb2wgb3BlcmF0b3IhPShjb25zdCBpdGVyYXRvciYgcmhzKSBjb25zdCB7IHJldHVybiBtSXQgIT0gcmhzLm1JdDsgfQorICAgICAgICBwcml2YXRlOgorICAgICAgICAgICAgQ2xpZW50TWFwSXRlcmF0b3IgbUl0OworICAgICAgICB9OworCisgICAgICAgIGl0ZXJhdG9yIGJlZ2luKCkgY29uc3QgeyByZXR1cm4gaXRlcmF0b3J7bUNsaWVudE1hcEhhbmRsZXIubUNsaWVudHMuYmVnaW4oKX07IH0KKyAgICAgICAgaXRlcmF0b3IgZW5kKCkgY29uc3QgeyByZXR1cm4gaXRlcmF0b3J7bUNsaWVudE1hcEhhbmRsZXIubUNsaWVudHMuZW5kKCl9OyB9CisKKyAgICBwcml2YXRlOgorICAgICAgICBjb25zdCBDbGllbnRNYXBIYW5kbGVyPFQ+JiBtQ2xpZW50TWFwSGFuZGxlcjsgLy8gaXRlcmF0aW5nIGRvZXMgbm90IG1vZGlmeSBtYXAuCisgICAgfTsKKworICAgIC8vIHJldHVybiBhbiBpdGVyYWJsZSBvYmplY3QgdGhhdCBjYW4gYmUgdXNlZCBpbiBhIHJhbmdlLWJhc2VkLWZvciB0byBlbnVtZXJhdGUgY2xpZW50cy4KKyAgICAvLyB0aGlzIGl0ZXJhYmxlIGRvZXMgbm90IGFsbG93IG1vZGlmaWNhdGlvbiwgaXQgc2hvdWxkIGJlIHVzZWQgYXMgYSB0ZW1wb3JhcnkuCisgICAgQ2xpZW50SXRlcmFibGUgZ2V0Q2xpZW50SXRlcmFibGUoKSBjb25zdCB7CisgICAgICAgIHJldHVybiBDbGllbnRJdGVyYWJsZXsqdGhpc307CisgICAgfQorCitwcml2YXRlOgorICAgIC8vIENsaWVudE1hcCBtYXBzIGEgcG9ydElkIHRvIGEgY2xpZW50IGRlc2NyaXB0b3IgKGJvdGggdW5pcXVlbHkgaWRlbnRpZnkgZWFjaCBvdGhlcikuCisgICAgQ2xpZW50TWFwIG1DbGllbnRzOworfTsKKworfSAvLyBuYW1lc3BhY2UgYW5kcm9pZApkaWZmIC0tZ2l0IGEvc2VydmljZXMvYXVkaW9wb2xpY3kvY29tbW9uL21hbmFnZXJkZWZpbml0aW9ucy9pbmNsdWRlL0RldmljZURlc2NyaXB0b3IuaCBiL3NlcnZpY2VzL2F1ZGlvcG9saWN5L2NvbW1vbi9tYW5hZ2VyZGVmaW5pdGlvbnMvaW5jbHVkZS9EZXZpY2VEZXNjcmlwdG9yLmgKaW5kZXggOTJhNGMzZS4uODNmYjEwYyAxMDA2NDQKLS0tIGEvc2VydmljZXMvYXVkaW9wb2xpY3kvY29tbW9uL21hbmFnZXJkZWZpbml0aW9ucy9pbmNsdWRlL0RldmljZURlc2NyaXB0b3IuaAorKysgYi9zZXJ2aWNlcy9hdWRpb3BvbGljeS9jb21tb24vbWFuYWdlcmRlZmluaXRpb25zL2luY2x1ZGUvRGV2aWNlRGVzY3JpcHRvci5oCkBAIC01MSw3ICs1MSw3IEBACiAgICAgdmlydHVhbCB2b2lkIGltcG9ydEF1ZGlvUG9ydChjb25zdCBzcDxBdWRpb1BvcnQ+JiBwb3J0LCBib29sIGZvcmNlID0gZmFsc2UpOwogCiAgICAgYXVkaW9fcG9ydF9oYW5kbGVfdCBnZXRJZCgpIGNvbnN0OwotICAgIHN0YXR1c190IGR1bXAoaW50IGZkLCBpbnQgc3BhY2VzLCBpbnQgaW5kZXgsIGJvb2wgdmVyYm9zZSA9IHRydWUpIGNvbnN0OworICAgIHZvaWQgZHVtcChTdHJpbmc4ICpkc3QsIGludCBzcGFjZXMsIGludCBpbmRleCwgYm9vbCB2ZXJib3NlID0gdHJ1ZSkgY29uc3Q7CiAgICAgdm9pZCBsb2coKSBjb25zdDsKIAogICAgIFN0cmluZzggbUFkZHJlc3M7CkBAIC03NiwxNSArNzYsMTYgQEAKIAogICAgIGF1ZGlvX2RldmljZXNfdCB0eXBlcygpIGNvbnN0IHsgcmV0dXJuIG1EZXZpY2VUeXBlczsgfQogCi0gICAgc3A8RGV2aWNlRGVzY3JpcHRvcj4gZ2V0RGV2aWNlKGF1ZGlvX2RldmljZXNfdCB0eXBlLCBjb25zdCBTdHJpbmc4JiBhZGRyZXNzKSBjb25zdDsKLSAgICBEZXZpY2VWZWN0b3IgZ2V0RGV2aWNlc0Zyb21UeXBlKGF1ZGlvX2RldmljZXNfdCB0eXBlcykgY29uc3Q7CisgICAgLy8gSWYgJ2FkZHJlc3MnIGlzIGVtcHR5LCBhIGRldmljZSB3aXRoIGEgbm9uLWVtcHR5IGFkZHJlc3MgbWF5IGJlIHJldHVybmVkCisgICAgLy8gaWYgdGhlcmUgaXMgbm8gZGV2aWNlIHdpdGggdGhlIHNwZWNpZmllZCAndHlwZScgYW5kIGVtcHR5IGFkZHJlc3MuCisgICAgc3A8RGV2aWNlRGVzY3JpcHRvcj4gZ2V0RGV2aWNlKGF1ZGlvX2RldmljZXNfdCB0eXBlLCBjb25zdCBTdHJpbmc4ICZhZGRyZXNzKSBjb25zdDsKKyAgICBEZXZpY2VWZWN0b3IgZ2V0RGV2aWNlc0Zyb21UeXBlTWFzayhhdWRpb19kZXZpY2VzX3QgdHlwZXMpIGNvbnN0OwogICAgIHNwPERldmljZURlc2NyaXB0b3I+IGdldERldmljZUZyb21JZChhdWRpb19wb3J0X2hhbmRsZV90IGlkKSBjb25zdDsKICAgICBzcDxEZXZpY2VEZXNjcmlwdG9yPiBnZXREZXZpY2VGcm9tVGFnTmFtZShjb25zdCBTdHJpbmc4ICZ0YWdOYW1lKSBjb25zdDsKLSAgICBEZXZpY2VWZWN0b3IgZ2V0RGV2aWNlc0Zyb21UeXBlQWRkcihhdWRpb19kZXZpY2VzX3QgdHlwZSwgY29uc3QgU3RyaW5nOCYgYWRkcmVzcykgY29uc3Q7CisgICAgRGV2aWNlVmVjdG9yIGdldERldmljZXNGcm9tSHdNb2R1bGUoYXVkaW9fbW9kdWxlX2hhbmRsZV90IG1vZHVsZUhhbmRsZSkgY29uc3Q7CisgICAgYXVkaW9fZGV2aWNlc190IGdldERldmljZVR5cGVzRnJvbUh3TW9kdWxlKGF1ZGlvX21vZHVsZV9oYW5kbGVfdCBtb2R1bGVIYW5kbGUpIGNvbnN0OwogCi0gICAgYXVkaW9fZGV2aWNlc190IGdldERldmljZXNGcm9tSHdNb2R1bGUoYXVkaW9fbW9kdWxlX2hhbmRsZV90IG1vZHVsZUhhbmRsZSkgY29uc3Q7Ci0KLSAgICBzdGF0dXNfdCBkdW1wKGludCBmZCwgY29uc3QgU3RyaW5nOCAmdGFnLCBpbnQgc3BhY2VzID0gMCwgYm9vbCB2ZXJib3NlID0gdHJ1ZSkgY29uc3Q7CisgICAgdm9pZCBkdW1wKFN0cmluZzggKmRzdCwgY29uc3QgU3RyaW5nOCAmdGFnLCBpbnQgc3BhY2VzID0gMCwgYm9vbCB2ZXJib3NlID0gdHJ1ZSkgY29uc3Q7CiAKIHByaXZhdGU6CiAgICAgdm9pZCByZWZyZXNoVHlwZXMoKTsKZGlmZiAtLWdpdCBhL3NlcnZpY2VzL2F1ZGlvcG9saWN5L2NvbW1vbi9tYW5hZ2VyZGVmaW5pdGlvbnMvaW5jbHVkZS9FZmZlY3REZXNjcmlwdG9yLmggYi9zZXJ2aWNlcy9hdWRpb3BvbGljeS9jb21tb24vbWFuYWdlcmRlZmluaXRpb25zL2luY2x1ZGUvRWZmZWN0RGVzY3JpcHRvci5oCmluZGV4IDA0ODMxYzYuLjlmYTc0ODYgMTAwNjQ0Ci0tLSBhL3NlcnZpY2VzL2F1ZGlvcG9saWN5L2NvbW1vbi9tYW5hZ2VyZGVmaW5pdGlvbnMvaW5jbHVkZS9FZmZlY3REZXNjcmlwdG9yLmgKKysrIGIvc2VydmljZXMvYXVkaW9wb2xpY3kvY29tbW9uL21hbmFnZXJkZWZpbml0aW9ucy9pbmNsdWRlL0VmZmVjdERlc2NyaXB0b3IuaApAQCAtMjEsNiArMjEsNyBAQAogI2luY2x1ZGUgPHV0aWxzL0tleWVkVmVjdG9yLmg+CiAjaW5jbHVkZSA8dXRpbHMvUmVmQmFzZS5oPgogI2luY2x1ZGUgPHV0aWxzL0Vycm9ycy5oPgorI2luY2x1ZGUgPHV0aWxzL1N0cmluZzguaD4KIAogbmFtZXNwYWNlIGFuZHJvaWQgewogCkBAIC0yOCw3ICsyOSw3IEBACiBjbGFzcyBFZmZlY3REZXNjcmlwdG9yIDogcHVibGljIFJlZkJhc2UKIHsKIHB1YmxpYzoKLSAgICBzdGF0dXNfdCBkdW1wKGludCBmZCk7CisgICAgdm9pZCBkdW1wKFN0cmluZzggKmRzdCkgY29uc3Q7CiAKICAgICBpbnQgbUlvOyAgICAgICAgICAgICAgICAvLyBpbyB0aGUgZWZmZWN0IGlzIGF0dGFjaGVkIHRvCiAgICAgcm91dGluZ19zdHJhdGVneSBtU3RyYXRlZ3k7IC8vIHJvdXRpbmcgc3RyYXRlZ3kgdGhlIGVmZmVjdCBpcyBhc3NvY2lhdGVkIHRvCkBAIC01MCw3ICs1MSw3IEBACiAgICAgdWludDMyX3QgZ2V0TWF4RWZmZWN0c01lbW9yeSgpIGNvbnN0OwogICAgIGJvb2wgaXNOb25PZmZsb2FkYWJsZUVmZmVjdEVuYWJsZWQoKTsKIAotICAgIHN0YXR1c190IGR1bXAoaW50IGZkKTsKKyAgICB2b2lkIGR1bXAoU3RyaW5nOCAqZHN0KSBjb25zdDsKIAogcHJpdmF0ZToKICAgICBzdGF0dXNfdCBzZXRFZmZlY3RFbmFibGVkKGNvbnN0IHNwPEVmZmVjdERlc2NyaXB0b3I+ICZlZmZlY3REZXNjLCBib29sIGVuYWJsZWQpOwpkaWZmIC0tZ2l0IGEvc2VydmljZXMvYXVkaW9wb2xpY3kvY29tbW9uL21hbmFnZXJkZWZpbml0aW9ucy9pbmNsdWRlL0h3TW9kdWxlLmggYi9zZXJ2aWNlcy9hdWRpb3BvbGljeS9jb21tb24vbWFuYWdlcmRlZmluaXRpb25zL2luY2x1ZGUvSHdNb2R1bGUuaAppbmRleCBjYjlmNDllLi42NTYwNDMxIDEwMDY0NAotLS0gYS9zZXJ2aWNlcy9hdWRpb3BvbGljeS9jb21tb24vbWFuYWdlcmRlZmluaXRpb25zL2luY2x1ZGUvSHdNb2R1bGUuaAorKysgYi9zZXJ2aWNlcy9hdWRpb3BvbGljeS9jb21tb24vbWFuYWdlcmRlZmluaXRpb25zL2luY2x1ZGUvSHdNb2R1bGUuaApAQCAtODIsNyArODIsNyBAQAogICAgIH0KIAogICAgIC8vIFRPRE8gcmVtb3ZlIGZyb20gaGVyZSAoc3BsaXQgc2VyaWFsaXphdGlvbikKLSAgICB2b2lkIGR1bXAoaW50IGZkKTsKKyAgICB2b2lkIGR1bXAoU3RyaW5nOCAqZHN0KSBjb25zdDsKIAogcHJpdmF0ZToKICAgICB2b2lkIHJlZnJlc2hTdXBwb3J0ZWREZXZpY2VzKCk7CkBAIC0xMDcsOSArMTA3LDkgQEAKICAgICBzcDxEZXZpY2VEZXNjcmlwdG9yPiBnZXREZXZpY2VEZXNjcmlwdG9yKGNvbnN0IGF1ZGlvX2RldmljZXNfdCBkZXZpY2UsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpkZXZpY2VfYWRkcmVzcywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKmRldmljZV9uYW1lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBtYXRjaEFkcmVzcyA9IHRydWUpIGNvbnN0OworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBtYXRjaEFkZHJlc3MgPSB0cnVlKSBjb25zdDsKIAotICAgIHN0YXR1c190IGR1bXAoaW50IGZkKSBjb25zdDsKKyAgICB2b2lkIGR1bXAoU3RyaW5nOCAqZHN0KSBjb25zdDsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIGFuZHJvaWQKZGlmZiAtLWdpdCBhL3NlcnZpY2VzL2F1ZGlvcG9saWN5L2NvbW1vbi9tYW5hZ2VyZGVmaW5pdGlvbnMvaW5jbHVkZS9JT1Byb2ZpbGUuaCBiL3NlcnZpY2VzL2F1ZGlvcG9saWN5L2NvbW1vbi9tYW5hZ2VyZGVmaW5pdGlvbnMvaW5jbHVkZS9JT1Byb2ZpbGUuaAppbmRleCA2N2FjOWJjLi5lYjMyOTU5IDEwMDY0NAotLS0gYS9zZXJ2aWNlcy9hdWRpb3BvbGljeS9jb21tb24vbWFuYWdlcmRlZmluaXRpb25zL2luY2x1ZGUvSU9Qcm9maWxlLmgKKysrIGIvc2VydmljZXMvYXVkaW9wb2xpY3kvY29tbW9uL21hbmFnZXJkZWZpbml0aW9ucy9pbmNsdWRlL0lPUHJvZmlsZS5oCkBAIC03Myw3ICs3Myw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90IGZsYWdzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIGV4YWN0TWF0Y2hSZXF1aXJlZEZvcklucHV0RmxhZ3MgPSBmYWxzZSkgY29uc3Q7CiAKLSAgICB2b2lkIGR1bXAoaW50IGZkKTsKKyAgICB2b2lkIGR1bXAoU3RyaW5nOCAqZHN0KSBjb25zdDsKICAgICB2b2lkIGxvZygpOwogCiAgICAgYm9vbCBoYXNTdXBwb3J0ZWREZXZpY2VzKCkgY29uc3QgeyByZXR1cm4gIW1TdXBwb3J0ZWREZXZpY2VzLmlzRW1wdHkoKTsgfQpkaWZmIC0tZ2l0IGEvc2VydmljZXMvYXVkaW9wb2xpY3kvY29tbW9uL21hbmFnZXJkZWZpbml0aW9ucy9pbmNsdWRlL0lWb2x1bWVDdXJ2ZXNDb2xsZWN0aW9uLmggYi9zZXJ2aWNlcy9hdWRpb3BvbGljeS9jb21tb24vbWFuYWdlcmRlZmluaXRpb25zL2luY2x1ZGUvSVZvbHVtZUN1cnZlc0NvbGxlY3Rpb24uaAppbmRleCBlMWY2YjA4Li43NTBkYTU1IDEwMDY0NAotLS0gYS9zZXJ2aWNlcy9hdWRpb3BvbGljeS9jb21tb24vbWFuYWdlcmRlZmluaXRpb25zL2luY2x1ZGUvSVZvbHVtZUN1cnZlc0NvbGxlY3Rpb24uaAorKysgYi9zZXJ2aWNlcy9hdWRpb3BvbGljeS9jb21tb24vbWFuYWdlcmRlZmluaXRpb25zL2luY2x1ZGUvSVZvbHVtZUN1cnZlc0NvbGxlY3Rpb24uaApAQCAtMTksNiArMTksNyBAQAogI2luY2x1ZGUgPHN5c3RlbS9hdWRpby5oPgogI2luY2x1ZGUgPFZvbHVtZS5oPgogI2luY2x1ZGUgPHV0aWxzL0Vycm9ycy5oPgorI2luY2x1ZGUgPHV0aWxzL1N0cmluZzguaD4KIAogbmFtZXNwYWNlIGFuZHJvaWQgewogCkBAIC00Nyw3ICs0OCw3IEBACiAgICAgdmlydHVhbCBib29sIGhhc1ZvbHVtZUluZGV4Rm9yRGV2aWNlKGF1ZGlvX3N0cmVhbV90eXBlX3Qgc3RyZWFtLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdWRpb19kZXZpY2VzX3QgZGV2aWNlKSBjb25zdCA9IDA7CiAKLSAgICB2aXJ0dWFsIHN0YXR1c190IGR1bXAoaW50IGZkKSBjb25zdCA9IDA7CisgICAgdmlydHVhbCB2b2lkIGR1bXAoU3RyaW5nOCAqZHN0KSBjb25zdCA9IDA7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBhbmRyb2lkCmRpZmYgLS1naXQgYS9zZXJ2aWNlcy9hdWRpb3BvbGljeS9jb21tb24vbWFuYWdlcmRlZmluaXRpb25zL2luY2x1ZGUvU2VyaWFsaXplci5oIGIvc2VydmljZXMvYXVkaW9wb2xpY3kvY29tbW9uL21hbmFnZXJkZWZpbml0aW9ucy9pbmNsdWRlL1NlcmlhbGl6ZXIuaAppbmRleCAyOWRlODQ4Li40OGM0MTQ3IDEwMDY0NAotLS0gYS9zZXJ2aWNlcy9hdWRpb3BvbGljeS9jb21tb24vbWFuYWdlcmRlZmluaXRpb25zL2luY2x1ZGUvU2VyaWFsaXplci5oCisrKyBiL3NlcnZpY2VzL2F1ZGlvcG9saWN5L2NvbW1vbi9tYW5hZ2VyZGVmaW5pdGlvbnMvaW5jbHVkZS9TZXJpYWxpemVyLmgKQEAgLTE3LDIyMyArMTcsOSBAQAogI3ByYWdtYSBvbmNlCiAKICNpbmNsdWRlICJBdWRpb1BvbGljeUNvbmZpZy5oIgotI2luY2x1ZGUgPHV0aWxzL1N0cm9uZ1BvaW50ZXIuaD4KLSNpbmNsdWRlIDx1dGlscy9FcnJvcnMuaD4KLSNpbmNsdWRlIDx1dGlscy9SZWZCYXNlLmg+Ci0jaW5jbHVkZSA8c3RyaW5nPgotI2luY2x1ZGUgPHNzdHJlYW0+Ci0jaW5jbHVkZSA8ZnN0cmVhbT4KLQotc3RydWN0IF94bWxOb2RlOwotc3RydWN0IF94bWxEb2M7CiAKIG5hbWVzcGFjZSBhbmRyb2lkIHsKIAotc3RydWN0IEF1ZGlvR2FpblRyYWl0cwotewotICAgIHN0YXRpYyBjb25zdCBjaGFyICpjb25zdCB0YWc7Ci0gICAgc3RhdGljIGNvbnN0IGNoYXIgKmNvbnN0IGNvbGxlY3Rpb25UYWc7Ci0KLSAgICBzdHJ1Y3QgQXR0cmlidXRlcwotICAgIHsKLSAgICAgICAgc3RhdGljIGNvbnN0IGNoYXIgbW9kZVtdOyAvKio8IGdhaW4gbW9kZXMgc3VwcG9ydGVkLCBlLmcuIEFVRElPX0dBSU5fTU9ERV9DSEFOTkVMUy4gKi8KLSAgICAgICAgLyoqIGNvbnRyb2xsZWQgY2hhbm5lbHMsIG5lZWRlZCBpZiBtb2RlIEFVRElPX0dBSU5fTU9ERV9DSEFOTkVMUy4gKi8KLSAgICAgICAgc3RhdGljIGNvbnN0IGNoYXIgY2hhbm5lbE1hc2tbXTsKLSAgICAgICAgc3RhdGljIGNvbnN0IGNoYXIgbWluVmFsdWVNQltdOyAvKio8IG1pbiB2YWx1ZSBpbiBtaWxsaWJlbC4gKi8KLSAgICAgICAgc3RhdGljIGNvbnN0IGNoYXIgbWF4VmFsdWVNQltdOyAvKio8IG1heCB2YWx1ZSBpbiBtaWxsaWJlbC4gKi8KLSAgICAgICAgc3RhdGljIGNvbnN0IGNoYXIgZGVmYXVsdFZhbHVlTUJbXTsgLyoqPCBkZWZhdWx0IHZhbHVlIGluIG1pbGxpYmVsLiAqLwotICAgICAgICBzdGF0aWMgY29uc3QgY2hhciBzdGVwVmFsdWVNQltdOyAvKio8IHN0ZXAgdmFsdWUgaW4gbWlsbGliZWwuICovCi0gICAgICAgIHN0YXRpYyBjb25zdCBjaGFyIG1pblJhbXBNc1tdOyAvKio8IG5lZWRlZCBpZiBtb2RlIEFVRElPX0dBSU5fTU9ERV9SQU1QLiAqLwotICAgICAgICBzdGF0aWMgY29uc3QgY2hhciBtYXhSYW1wTXNbXTsgLyoqPCAubmVlZGVkIGlmIG1vZGUgQVVESU9fR0FJTl9NT0RFX1JBTVAgKi8KLSAgICB9OwotCi0gICAgdHlwZWRlZiBBdWRpb0dhaW4gRWxlbWVudDsKLSAgICB0eXBlZGVmIHNwPEVsZW1lbnQ+IFB0ckVsZW1lbnQ7Ci0gICAgdHlwZWRlZiBBdWRpb0dhaW5Db2xsZWN0aW9uIENvbGxlY3Rpb247Ci0gICAgdHlwZWRlZiB2b2lkICpQdHJTZXJpYWxpemluZ0N0eDsKLQotICAgIHN0YXRpYyBzdGF0dXNfdCBkZXNlcmlhbGl6ZShfeG1sRG9jICpkb2MsIGNvbnN0IF94bWxOb2RlICpyb290LCBQdHJFbGVtZW50ICZlbGVtZW50LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQdHJTZXJpYWxpemluZ0N0eCBzZXJpYWxpemluZ0NvbnRleHQpOwotCi0gICAgLy8gR2FpbiBoYXMgbm8gY2hpbGQKLX07Ci0KLS8vIEEgcHJvZmlsZSBzZWN0aW9uIGNvbnRhaW5zIGEgbmFtZSwgIG9uZSBhdWRpbyBmb3JtYXQgYW5kIHRoZSBsaXN0IG9mIHN1cHBvcnRlZCBzYW1wbGluZyByYXRlcwotLy8gYW5kIGNoYW5uZWwgbWFza3MgZm9yIHRoaXMgZm9ybWF0Ci1zdHJ1Y3QgQXVkaW9Qcm9maWxlVHJhaXRzCi17Ci0gICAgc3RhdGljIGNvbnN0IGNoYXIgKmNvbnN0IHRhZzsKLSAgICBzdGF0aWMgY29uc3QgY2hhciAqY29uc3QgY29sbGVjdGlvblRhZzsKLQotICAgIHN0cnVjdCBBdHRyaWJ1dGVzCi0gICAgewotICAgICAgICBzdGF0aWMgY29uc3QgY2hhciBuYW1lW107Ci0gICAgICAgIHN0YXRpYyBjb25zdCBjaGFyIHNhbXBsaW5nUmF0ZXNbXTsKLSAgICAgICAgc3RhdGljIGNvbnN0IGNoYXIgZm9ybWF0W107Ci0gICAgICAgIHN0YXRpYyBjb25zdCBjaGFyIGNoYW5uZWxNYXNrc1tdOwotICAgIH07Ci0KLSAgICB0eXBlZGVmIEF1ZGlvUHJvZmlsZSBFbGVtZW50OwotICAgIHR5cGVkZWYgc3A8QXVkaW9Qcm9maWxlPiBQdHJFbGVtZW50OwotICAgIHR5cGVkZWYgQXVkaW9Qcm9maWxlVmVjdG9yIENvbGxlY3Rpb247Ci0gICAgdHlwZWRlZiB2b2lkICpQdHJTZXJpYWxpemluZ0N0eDsKLQotICAgIHN0YXRpYyBzdGF0dXNfdCBkZXNlcmlhbGl6ZShfeG1sRG9jICpkb2MsIGNvbnN0IF94bWxOb2RlICpyb290LCBQdHJFbGVtZW50ICZlbGVtZW50LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQdHJTZXJpYWxpemluZ0N0eCBzZXJpYWxpemluZ0NvbnRleHQpOwotfTsKLQotc3RydWN0IE1peFBvcnRUcmFpdHMKLXsKLSAgICBzdGF0aWMgY29uc3QgY2hhciAqY29uc3QgdGFnOwotICAgIHN0YXRpYyBjb25zdCBjaGFyICpjb25zdCBjb2xsZWN0aW9uVGFnOwotCi0gICAgc3RydWN0IEF0dHJpYnV0ZXMKLSAgICB7Ci0gICAgICAgIHN0YXRpYyBjb25zdCBjaGFyIG5hbWVbXTsKLSAgICAgICAgc3RhdGljIGNvbnN0IGNoYXIgcm9sZVtdOwotICAgICAgICBzdGF0aWMgY29uc3QgY2hhciBmbGFnc1tdOwotICAgICAgICBzdGF0aWMgY29uc3QgY2hhciBtYXhPcGVuQ291bnRbXTsKLSAgICAgICAgc3RhdGljIGNvbnN0IGNoYXIgbWF4QWN0aXZlQ291bnRbXTsKLSAgICB9OwotCi0gICAgdHlwZWRlZiBJT1Byb2ZpbGUgRWxlbWVudDsKLSAgICB0eXBlZGVmIHNwPEVsZW1lbnQ+IFB0ckVsZW1lbnQ7Ci0gICAgdHlwZWRlZiBJT1Byb2ZpbGVDb2xsZWN0aW9uIENvbGxlY3Rpb247Ci0gICAgdHlwZWRlZiB2b2lkICpQdHJTZXJpYWxpemluZ0N0eDsKLQotICAgIHN0YXRpYyBzdGF0dXNfdCBkZXNlcmlhbGl6ZShfeG1sRG9jICpkb2MsIGNvbnN0IF94bWxOb2RlICpyb290LCBQdHJFbGVtZW50ICZlbGVtZW50LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQdHJTZXJpYWxpemluZ0N0eCBzZXJpYWxpemluZ0NvbnRleHQpOwotCi0gICAgLy8gQ2hpbGRyZW4gYXJlOiBHYWluVHJhaXRzCi19OwotCi1zdHJ1Y3QgRGV2aWNlUG9ydFRyYWl0cwotewotICAgIHN0YXRpYyBjb25zdCBjaGFyICpjb25zdCB0YWc7Ci0gICAgc3RhdGljIGNvbnN0IGNoYXIgKmNvbnN0IGNvbGxlY3Rpb25UYWc7Ci0KLSAgICBzdHJ1Y3QgQXR0cmlidXRlcwotICAgIHsKLSAgICAgICAgc3RhdGljIGNvbnN0IGNoYXIgdGFnTmFtZVtdOyAvKio8ICA8ZGV2aWNlIHRhZyBuYW1lPjogYW55IHN0cmluZyB3aXRob3V0IHNwYWNlLiAqLwotICAgICAgICBzdGF0aWMgY29uc3QgY2hhciB0eXBlW107IC8qKjwgPGRldmljZSB0eXBlPi4gKi8KLSAgICAgICAgc3RhdGljIGNvbnN0IGNoYXIgcm9sZVtdOyAvKio8IDxkZXZpY2Ugcm9sZTogc2luayBvciBzb3VyY2U+LiAqLwotICAgICAgICBzdGF0aWMgY29uc3QgY2hhciByb2xlU291cmNlW107IC8qKjwgPGF0dHJpYnV0ZSByb2xlIHNvdXJjZSB2YWx1ZT4uICovCi0gICAgICAgIHN0YXRpYyBjb25zdCBjaGFyIGFkZHJlc3NbXTsgLyoqPCBvcHRpb25hbDogZGV2aWNlIGFkZHJlc3MsIGNoYXIgc3RyaW5nIGxlc3MgdGhhbiA2NC4gKi8KLSAgICB9OwotICAgIHR5cGVkZWYgRGV2aWNlRGVzY3JpcHRvciBFbGVtZW50OwotICAgIHR5cGVkZWYgc3A8RGV2aWNlRGVzY3JpcHRvcj4gUHRyRWxlbWVudDsKLSAgICB0eXBlZGVmIERldmljZVZlY3RvciBDb2xsZWN0aW9uOwotICAgIHR5cGVkZWYgdm9pZCAqUHRyU2VyaWFsaXppbmdDdHg7Ci0KLSAgICBzdGF0aWMgc3RhdHVzX3QgZGVzZXJpYWxpemUoX3htbERvYyAqZG9jLCBjb25zdCBfeG1sTm9kZSAqcm9vdCwgUHRyRWxlbWVudCAmZWxlbWVudCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHRyU2VyaWFsaXppbmdDdHggc2VyaWFsaXppbmdDb250ZXh0KTsKLSAgICAvLyBDaGlsZHJlbiBhcmU6IEdhaW5UcmFpdHMgKG9wdGlvbm5hbCkKLX07Ci0KLXN0cnVjdCBSb3V0ZVRyYWl0cwotewotICAgIHN0YXRpYyBjb25zdCBjaGFyICpjb25zdCB0YWc7Ci0gICAgc3RhdGljIGNvbnN0IGNoYXIgKmNvbnN0IGNvbGxlY3Rpb25UYWc7Ci0KLSAgICBzdHJ1Y3QgQXR0cmlidXRlcwotICAgIHsKLSAgICAgICAgc3RhdGljIGNvbnN0IGNoYXIgdHlwZVtdOyAvKio8IDxyb3V0ZSB0eXBlPjogbWl4IG9yIG11eC4gKi8KLSAgICAgICAgc3RhdGljIGNvbnN0IGNoYXIgdHlwZU1peFtdOyAvKio8IHR5cGUgYXR0cmlidXRlIG1peCB2YWx1ZS4gKi8KLSAgICAgICAgc3RhdGljIGNvbnN0IGNoYXIgc2lua1tdOyAvKio8IDxzaW5rOiBpbnZvbHZlZCBpbiB0aGlzIHJvdXRlPi4gKi8KLSAgICAgICAgc3RhdGljIGNvbnN0IGNoYXIgc291cmNlc1tdOyAvKio8IHNvdXJjZXM6IGFsbCBzb3VyY2UgdGhhdCBjYW4gYmUgaW52b2x2ZWQgaW4gdGhpcyByb3V0ZS4gKi8KLSAgICB9OwotICAgIHR5cGVkZWYgQXVkaW9Sb3V0ZSBFbGVtZW50OwotICAgIHR5cGVkZWYgc3A8QXVkaW9Sb3V0ZT4gUHRyRWxlbWVudDsKLSAgICB0eXBlZGVmIEF1ZGlvUm91dGVWZWN0b3IgQ29sbGVjdGlvbjsKLSAgICB0eXBlZGVmIEh3TW9kdWxlICpQdHJTZXJpYWxpemluZ0N0eDsKLQotICAgIHN0YXRpYyBzdGF0dXNfdCBkZXNlcmlhbGl6ZShfeG1sRG9jICpkb2MsIGNvbnN0IF94bWxOb2RlICpyb290LCBQdHJFbGVtZW50ICZlbGVtZW50LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQdHJTZXJpYWxpemluZ0N0eCBjdHgpOwotfTsKLQotc3RydWN0IE1vZHVsZVRyYWl0cwotewotICAgIHN0YXRpYyBjb25zdCBjaGFyICpjb25zdCB0YWc7Ci0gICAgc3RhdGljIGNvbnN0IGNoYXIgKmNvbnN0IGNvbGxlY3Rpb25UYWc7Ci0KLSAgICBzdGF0aWMgY29uc3QgY2hhciAqY29uc3QgY2hpbGRBdHRhY2hlZERldmljZXNUYWc7Ci0gICAgc3RhdGljIGNvbnN0IGNoYXIgKmNvbnN0IGNoaWxkQXR0YWNoZWREZXZpY2VUYWc7Ci0gICAgc3RhdGljIGNvbnN0IGNoYXIgKmNvbnN0IGNoaWxkRGVmYXVsdE91dHB1dERldmljZVRhZzsKLQotICAgIHN0cnVjdCBBdHRyaWJ1dGVzCi0gICAgewotICAgICAgICBzdGF0aWMgY29uc3QgY2hhciBuYW1lW107Ci0gICAgICAgIHN0YXRpYyBjb25zdCBjaGFyIHZlcnNpb25bXTsKLSAgICB9OwotCi0gICAgdHlwZWRlZiBId01vZHVsZSBFbGVtZW50OwotICAgIHR5cGVkZWYgc3A8RWxlbWVudD4gUHRyRWxlbWVudDsKLSAgICB0eXBlZGVmIEh3TW9kdWxlQ29sbGVjdGlvbiBDb2xsZWN0aW9uOwotICAgIHR5cGVkZWYgQXVkaW9Qb2xpY3lDb25maWcgKlB0clNlcmlhbGl6aW5nQ3R4OwotCi0gICAgc3RhdGljIHN0YXR1c190IGRlc2VyaWFsaXplKF94bWxEb2MgKmRvYywgY29uc3QgX3htbE5vZGUgKnJvb3QsIFB0ckVsZW1lbnQgJmVsZW1lbnQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB0clNlcmlhbGl6aW5nQ3R4IHNlcmlhbGl6aW5nQ29udGV4dCk7Ci0KLSAgICAvLyBDaGlsZHJlbiBhcmU6IG1peFBvcnRUcmFpdHMsIGRldmljZVBvcnRUcmFpdHMgYW5kIHJvdXRlVHJhaXRzCi0gICAgLy8gTmVlZCB0byBjYWxsIGRlc2VyaWFsaXplIG9uIGVhY2ggY2hpbGQKLX07Ci0KLXN0cnVjdCBHbG9iYWxDb25maWdUcmFpdHMKLXsKLSAgICBzdGF0aWMgY29uc3QgY2hhciAqY29uc3QgdGFnOwotCi0gICAgc3RydWN0IEF0dHJpYnV0ZXMKLSAgICB7Ci0gICAgICAgIHN0YXRpYyBjb25zdCBjaGFyIHNwZWFrZXJEcmNFbmFibGVkW107Ci0gICAgfTsKLQotICAgIHN0YXRpYyBzdGF0dXNfdCBkZXNlcmlhbGl6ZShjb25zdCBfeG1sTm9kZSAqcm9vdCwgQXVkaW9Qb2xpY3lDb25maWcgJmNvbmZpZyk7Ci19OwotCi1zdHJ1Y3QgVm9sdW1lVHJhaXRzCi17Ci0gICAgc3RhdGljIGNvbnN0IGNoYXIgKmNvbnN0IHRhZzsKLSAgICBzdGF0aWMgY29uc3QgY2hhciAqY29uc3QgY29sbGVjdGlvblRhZzsKLSAgICBzdGF0aWMgY29uc3QgY2hhciAqY29uc3Qgdm9sdW1lUG9pbnRUYWc7Ci0KLSAgICBzdHJ1Y3QgQXR0cmlidXRlcwotICAgIHsKLSAgICAgICAgc3RhdGljIGNvbnN0IGNoYXIgc3RyZWFtW107Ci0gICAgICAgIHN0YXRpYyBjb25zdCBjaGFyIGRldmljZUNhdGVnb3J5W107Ci0gICAgICAgIHN0YXRpYyBjb25zdCBjaGFyIHJlZmVyZW5jZVtdOwotICAgIH07Ci0KLSAgICB0eXBlZGVmIFZvbHVtZUN1cnZlIEVsZW1lbnQ7Ci0gICAgdHlwZWRlZiBzcDxWb2x1bWVDdXJ2ZT4gUHRyRWxlbWVudDsKLSAgICB0eXBlZGVmIFZvbHVtZUN1cnZlc0NvbGxlY3Rpb24gQ29sbGVjdGlvbjsKLSAgICB0eXBlZGVmIHZvaWQgKlB0clNlcmlhbGl6aW5nQ3R4OwotCi0gICAgc3RhdGljIHN0YXR1c190IGRlc2VyaWFsaXplKF94bWxEb2MgKmRvYywgY29uc3QgX3htbE5vZGUgKnJvb3QsIFB0ckVsZW1lbnQgJmVsZW1lbnQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB0clNlcmlhbGl6aW5nQ3R4IHNlcmlhbGl6aW5nQ29udGV4dCk7Ci0KLSAgICAvLyBObyBDaGlsZAotfTsKLQotY2xhc3MgUG9saWN5U2VyaWFsaXplcgotewotcHJpdmF0ZToKLSAgICBzdGF0aWMgY29uc3QgY2hhciAqY29uc3Qgcm9vdE5hbWU7Ci0KLSAgICBzdGF0aWMgY29uc3QgY2hhciAqY29uc3QgdmVyc2lvbkF0dHJpYnV0ZTsKLSAgICBzdGF0aWMgY29uc3QgdWludDMyX3QgZ01ham9yOyAvKio8IHRoZSBtYWpvciBudW1iZXIgb2YgdGhlIHBvbGljeSB4bWwgZm9ybWF0IHZlcnNpb24uICovCi0gICAgc3RhdGljIGNvbnN0IHVpbnQzMl90IGdNaW5vcjsgLyoqPCB0aGUgbWlub3IgbnVtYmVyIG9mIHRoZSBwb2xpY3kgeG1sIGZvcm1hdCB2ZXJzaW9uLiAqLwotCi1wdWJsaWM6Ci0gICAgUG9saWN5U2VyaWFsaXplcigpOwotICAgIHN0YXR1c190IGRlc2VyaWFsaXplKGNvbnN0IGNoYXIgKnN0ciwgQXVkaW9Qb2xpY3lDb25maWcgJmNvbmZpZyk7Ci0KLXByaXZhdGU6Ci0gICAgdHlwZWRlZiBBdWRpb1BvbGljeUNvbmZpZyBFbGVtZW50OwotCi0gICAgc3RkOjpzdHJpbmcgbVJvb3RFbGVtZW50TmFtZTsKLSAgICBzdGQ6OnN0cmluZyBtVmVyc2lvbjsKLQotICAgIC8vIENoaWxkcmVuIGFyZTogTW9kdWxlc1RyYWl0cywgVm9sdW1lVHJhaXRzCi19Oworc3RhdHVzX3QgZGVzZXJpYWxpemVBdWRpb1BvbGljeUZpbGUoY29uc3QgY2hhciAqZmlsZU5hbWUsIEF1ZGlvUG9saWN5Q29uZmlnICpjb25maWcpOwogCiB9IC8vIG5hbWVzcGFjZSBhbmRyb2lkCmRpZmYgLS1naXQgYS9zZXJ2aWNlcy9hdWRpb3BvbGljeS9jb21tb24vbWFuYWdlcmRlZmluaXRpb25zL2luY2x1ZGUvU2Vzc2lvblJvdXRlLmggYi9zZXJ2aWNlcy9hdWRpb3BvbGljeS9jb21tb24vbWFuYWdlcmRlZmluaXRpb25zL2luY2x1ZGUvU2Vzc2lvblJvdXRlLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDMyYjQ0NDAuLjAwMDAwMDAKLS0tIGEvc2VydmljZXMvYXVkaW9wb2xpY3kvY29tbW9uL21hbmFnZXJkZWZpbml0aW9ucy9pbmNsdWRlL1Nlc3Npb25Sb3V0ZS5oCisrKyAvZGV2L251bGwKQEAgLTEsMTIwICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTUgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAotICoKLSAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwotICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgotICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0gKgotICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLSAqCi0gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCi0gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAotICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCi0gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCi0gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KLSAqLwotCi0jcHJhZ21hIG9uY2UKLQotI2luY2x1ZGUgPHN5c3RlbS9hdWRpby5oPgotI2luY2x1ZGUgPHV0aWxzL0tleWVkVmVjdG9yLmg+Ci0jaW5jbHVkZSA8dXRpbHMvUmVmQmFzZS5oPgotI2luY2x1ZGUgPHV0aWxzL0Vycm9ycy5oPgotCi1uYW1lc3BhY2UgYW5kcm9pZCB7Ci0KLWNsYXNzIERldmljZURlc2NyaXB0b3I7Ci1jbGFzcyBEZXZpY2VWZWN0b3I7Ci0KLWNsYXNzIFNlc3Npb25Sb3V0ZSA6IHB1YmxpYyBSZWZCYXNlCi17Ci1wdWJsaWM6Ci0gICAgLy8gRm9yIElucHV0IChTb3VyY2UpIHJvdXRlcywgdXNlIFNUUkVBTV9UWVBFX05BICgiTkEiID0gIm5vdCBhcHBsaWNhYmxlKWZvciB0aGUKLSAgICAvLyBzdHJlYW1UeXBlIGFyZ3VtZW50Ci0gICAgc3RhdGljIGNvbnN0IGF1ZGlvX3N0cmVhbV90eXBlX3QgU1RSRUFNX1RZUEVfTkEgPSBBVURJT19TVFJFQU1fREVGQVVMVDsKLQotICAgIC8vIEZvciBPdXRwdXQgKFNpbmspIHJvdXRlcywgdXNlIFNPVVJDRV9UWVBFX05BICgiTkEiID0gIm5vdCBhcHBsaWNhYmxlIikgZm9yIHRoZQotICAgIC8vIHNvdXJjZSBhcmd1bWVudAotCi0gICAgc3RhdGljIGNvbnN0IGF1ZGlvX3NvdXJjZV90IFNPVVJDRV9UWVBFX05BID0gQVVESU9fU09VUkNFX0RFRkFVTFQ7Ci0KLSAgICBTZXNzaW9uUm91dGUoYXVkaW9fc2Vzc2lvbl90IHNlc3Npb24sCi0gICAgICAgICAgICAgICAgIGF1ZGlvX3N0cmVhbV90eXBlX3Qgc3RyZWFtVHlwZSwKLSAgICAgICAgICAgICAgICAgYXVkaW9fc291cmNlX3Qgc291cmNlLAotICAgICAgICAgICAgICAgICBzcDxEZXZpY2VEZXNjcmlwdG9yPiBkZXZpY2VEZXNjcmlwdG9yLAotICAgICAgICAgICAgICAgICB1aWRfdCB1aWQpCi0gICAgICAgIDogbVVpZCh1aWQpLAotICAgICAgICAgIG1TZXNzaW9uKHNlc3Npb24pLAotICAgICAgICAgIG1EZXZpY2VEZXNjcmlwdG9yKGRldmljZURlc2NyaXB0b3IpLAotICAgICAgICAgIG1SZWZDb3VudCgwKSwKLSAgICAgICAgICBtQWN0aXZpdHlDb3VudCgwKSwKLSAgICAgICAgICBtQ2hhbmdlZChmYWxzZSksCi0gICAgICAgICAgbVN0cmVhbVR5cGUoc3RyZWFtVHlwZSksCi0gICAgICAgICAgbVNvdXJjZShzb3VyY2UpCi0gICAge30KLQotICAgIHZvaWQgbG9nKGNvbnN0IGNoYXIqIHByZWZpeCk7Ci0KLSAgICBib29sIGlzQWN0aXZlT3JDaGFuZ2VkKCkgewotICAgICAgICByZXR1cm4gKG1EZXZpY2VEZXNjcmlwdG9yICE9IDApICYmIChtQ2hhbmdlZCB8fCAobUFjdGl2aXR5Q291bnQgPiAwKSk7Ci0gICAgfQotCi0gICAgdWlkX3QgICAgICAgICAgICAgICAgICAgICAgIG1VaWQ7Ci0gICAgYXVkaW9fc2Vzc2lvbl90ICAgICAgICAgICAgIG1TZXNzaW9uOwotICAgIHNwPERldmljZURlc2NyaXB0b3I+ICAgICAgICBtRGV2aWNlRGVzY3JpcHRvcjsKLQotICAgIC8vICJyZWZlcmVuY2UiIGNvdW50aW5nCi0gICAgaW50ICAgICAgICAgICAgICAgICAgICAgICAgIG1SZWZDb3VudDsgICAgICAvLyArLy0gb24gcmVmZXJlbmNlcwotICAgIGludCAgICAgICAgICAgICAgICAgICAgICAgICBtQWN0aXZpdHlDb3VudDsgLy8gKy8tIG9uIHN0YXJ0L3N0b3AKLSAgICBib29sICAgICAgICAgICAgICAgICAgICAgICAgbUNoYW5nZWQ7Ci0gICAgLy8gZm9yIG91dHB1dHMKLSAgICBjb25zdCBhdWRpb19zdHJlYW1fdHlwZV90ICAgbVN0cmVhbVR5cGU7Ci0gICAgLy8gZm9yIGlucHV0cwotICAgIGNvbnN0IGF1ZGlvX3NvdXJjZV90ICAgICAgICBtU291cmNlOwotfTsKLQotY2xhc3MgU2Vzc2lvblJvdXRlTWFwOiBwdWJsaWMgS2V5ZWRWZWN0b3I8YXVkaW9fc2Vzc2lvbl90LCBzcDxTZXNzaW9uUm91dGU+ID4KLXsKLXB1YmxpYzoKLSAgICAvLyBUaGVzZSBjb25zdGFudHMgaWRlbnRpZnkgdGhlIFNlc3Npb25Sb3V0TWFwIGFzIGhvbGRpbmcgRUlUSEVSIGlucHV0IHJvdXRlcywKLSAgICAvLyBvciBvdXRwdXQgcm91dGVzLiAgQW4gZXJyb3Igd2lsbCBvY2N1ciBpZiBhbiBhdHRlbXB0IGlzIG1hZGUgdG8gYWRkIGEgU2Vzc2lvblJvdXRlCi0gICAgLy8gb2JqZWN0IHdpdGggbVN0cmVhbVR5cGUgPT0gU1RSRUFNX1RZUEVfTkEgKGkuZS4gYW4gaW5wdXQgU2Vzc2lvblJvdXRlKSB0byBhCi0gICAgLy8gU2Vzc2lvblJvdXRNYXAgdGhhdCBpcyBtYXJrZWQgZm9yIG91dHB1dCAoaS5lLiBtTWFwVHlwZSA9PSBTRVNTSU9OX1JPVVRFX01BUF9PVVRQVVQpCi0gICAgLy8gYW5kIHNpbWlsYXJseSAgZm9yIG91dHB1dCBTZXNzaW9uUm91dGVzIGFuZCBJbnB1dCBTZXNzaW9uUm91dGVNYXBzLgotICAgIHR5cGVkZWYgZW51bQotICAgIHsKLSAgICAgICAgTUFQVFlQRV9JTlBVVCA9IDAsCi0gICAgICAgIE1BUFRZUEVfT1VUUFVUID0gMQotICAgIH0gc2Vzc2lvbl9yb3V0ZV9tYXBfdHlwZV90OwotCi0gICAgZXhwbGljaXQgU2Vzc2lvblJvdXRlTWFwKHNlc3Npb25fcm91dGVfbWFwX3R5cGVfdCBtYXBUeXBlKSA6Ci0gICAgICAgIG1NYXBUeXBlKG1hcFR5cGUpCi0gICAge30KLQotICAgIGJvb2wgaGFzUm91dGUoYXVkaW9fc2Vzc2lvbl90IHNlc3Npb24pOwotCi0gICAgdm9pZCByZW1vdmVSb3V0ZShhdWRpb19zZXNzaW9uX3Qgc2Vzc2lvbik7Ci0KLSAgICBpbnQgaW5jUm91dGVBY3Rpdml0eShhdWRpb19zZXNzaW9uX3Qgc2Vzc2lvbik7Ci0gICAgaW50IGRlY1JvdXRlQWN0aXZpdHkoYXVkaW9fc2Vzc2lvbl90IHNlc3Npb24pOwotICAgIGJvb2wgZ2V0QW5kQ2xlYXJSb3V0ZUNoYW5nZWQoYXVkaW9fc2Vzc2lvbl90IHNlc3Npb24pOyAvLyBhbHNvIGNsZWFycyB0aGUgY2hhbmdlZCBmbGFnCi0gICAgdm9pZCBsb2coY29uc3QgY2hhciogY2FwdGlvbik7Ci0gICAgYXVkaW9fZGV2aWNlc190IGdldEFjdGl2ZURldmljZUZvclN0cmVhbShhdWRpb19zdHJlYW1fdHlwZV90IHN0cmVhbVR5cGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBEZXZpY2VWZWN0b3ImIGF2YWlsYWJsZURldmljZXMpOwotICAgIC8vIFNwZWNpZnkgYW4gT3V0cHV0KFNpbmspIHJvdXRlIGJ5IHBhc3NpbmcgU2Vzc2lvblJvdXRlOjpTT1VSQ0VfVFlQRV9OQSBpbiB0aGUKLSAgICAvLyBzb3VyY2UgYXJndW1lbnQuCi0gICAgLy8gU3BlY2lmeSBhbiBJbnB1dChTb3VyY2UpIHJvdXQgYnkgcGFzc2luZyBTZXNzaW9uUm91dGU6OkFVRElPX1NUUkVBTV9ERUZBVUxUCi0gICAgLy8gaW4gdGhlIHN0cmVhbVR5cGUgYXJndW1lbnQuCi0gICAgdm9pZCBhZGRSb3V0ZShhdWRpb19zZXNzaW9uX3Qgc2Vzc2lvbiwKLSAgICAgICAgICAgICAgICAgIGF1ZGlvX3N0cmVhbV90eXBlX3Qgc3RyZWFtVHlwZSwKLSAgICAgICAgICAgICAgICAgIGF1ZGlvX3NvdXJjZV90IHNvdXJjZSwKLSAgICAgICAgICAgICAgICAgIGNvbnN0IHNwPERldmljZURlc2NyaXB0b3I+JiBkZXZpY2VEZXNjcmlwdG9yLAotICAgICAgICAgICAgICAgICAgdWlkX3QgdWlkKTsKLQotcHJpdmF0ZToKLSAgICAvLyBVc2VkIHRvIG1hcmsgYSBTZXNzaW9uUm91dGUgYXMgZm9yIGVpdGhlciBpbnB1dHMgKG1NYXBUeXBlID09IGtTZXNzaW9uUm91dGVNYXBfSW5wdXQpCi0gICAgLy8gb3Igb3V0cHV0cyAobU1hcFR5cGUgPT0ga1Nlc3Npb25Sb3V0ZU1hcF9PdXRwdXQpCi0gICAgY29uc3Qgc2Vzc2lvbl9yb3V0ZV9tYXBfdHlwZV90IG1NYXBUeXBlOwotfTsKLQotfSAvLyBuYW1lc3BhY2UgYW5kcm9pZApkaWZmIC0tZ2l0IGEvc2VydmljZXMvYXVkaW9wb2xpY3kvY29tbW9uL21hbmFnZXJkZWZpbml0aW9ucy9pbmNsdWRlL1N0cmVhbURlc2NyaXB0b3IuaCBiL3NlcnZpY2VzL2F1ZGlvcG9saWN5L2NvbW1vbi9tYW5hZ2VyZGVmaW5pdGlvbnMvaW5jbHVkZS9TdHJlYW1EZXNjcmlwdG9yLmgKaW5kZXggNTBiMTAzNy4uNjI2NjMxMyAxMDA2NDQKLS0tIGEvc2VydmljZXMvYXVkaW9wb2xpY3kvY29tbW9uL21hbmFnZXJkZWZpbml0aW9ucy9pbmNsdWRlL1N0cmVhbURlc2NyaXB0b3IuaAorKysgYi9zZXJ2aWNlcy9hdWRpb3BvbGljeS9jb21tb24vbWFuYWdlcmRlZmluaXRpb25zL2luY2x1ZGUvU3RyZWFtRGVzY3JpcHRvci5oCkBAIC00NCw3ICs0NCw3IEBACiAgICAgICAgIHJldHVybiBtSW5kZXhDdXIuaW5kZXhPZktleShkZXZpY2UpID49IDA7CiAgICAgfQogCi0gICAgdm9pZCBkdW1wKGludCBmZCkgY29uc3Q7CisgICAgdm9pZCBkdW1wKFN0cmluZzggKmRzdCkgY29uc3Q7CiAKICAgICB2b2lkIHNldFZvbHVtZUN1cnZlUG9pbnQoZGV2aWNlX2NhdGVnb3J5IGRldmljZUNhdGVnb3J5LCBjb25zdCBWb2x1bWVDdXJ2ZVBvaW50ICpwb2ludCk7CiAgICAgY29uc3QgVm9sdW1lQ3VydmVQb2ludCAqZ2V0Vm9sdW1lQ3VydmVQb2ludChkZXZpY2VfY2F0ZWdvcnkgZGV2aWNlQ2F0ZWdvcnkpIGNvbnN0CkBAIC05Niw3ICs5Niw3IEBACiAgICAgICAgIHJldHVybiB2YWx1ZUZvcihzdHJlYW0pLmhhc1ZvbHVtZUluZGV4Rm9yRGV2aWNlKGRldmljZSk7CiAgICAgfQogCi0gICAgdmlydHVhbCBzdGF0dXNfdCBkdW1wKGludCBmZCkgY29uc3Q7CisgICAgdm9pZCBkdW1wKFN0cmluZzggKmRzdCkgY29uc3Qgb3ZlcnJpZGU7CiAKIHByaXZhdGU6CiAgICAgdm9pZCBzZXRWb2x1bWVDdXJ2ZVBvaW50KGF1ZGlvX3N0cmVhbV90eXBlX3Qgc3RyZWFtLCBkZXZpY2VfY2F0ZWdvcnkgZGV2aWNlQ2F0ZWdvcnksCmRpZmYgLS1naXQgYS9zZXJ2aWNlcy9hdWRpb3BvbGljeS9jb21tb24vbWFuYWdlcmRlZmluaXRpb25zL2luY2x1ZGUvVm9sdW1lQ3VydmUuaCBiL3NlcnZpY2VzL2F1ZGlvcG9saWN5L2NvbW1vbi9tYW5hZ2VyZGVmaW5pdGlvbnMvaW5jbHVkZS9Wb2x1bWVDdXJ2ZS5oCmluZGV4IDNlNmIyYjQuLjc2ZWMxOTggMTAwNjQ0Ci0tLSBhL3NlcnZpY2VzL2F1ZGlvcG9saWN5L2NvbW1vbi9tYW5hZ2VyZGVmaW5pdGlvbnMvaW5jbHVkZS9Wb2x1bWVDdXJ2ZS5oCisrKyBiL3NlcnZpY2VzL2F1ZGlvcG9saWN5L2NvbW1vbi9tYW5hZ2VyZGVmaW5pdGlvbnMvaW5jbHVkZS9Wb2x1bWVDdXJ2ZS5oCkBAIC01OSw3ICs1OSw3IEBACiAKICAgICBmbG9hdCB2b2xJbmRleFRvRGIoaW50IGluZGV4SW5VaSwgaW50IHZvbEluZGV4TWluLCBpbnQgdm9sSW5kZXhNYXgpIGNvbnN0OwogCi0gICAgdm9pZCBkdW1wKGludCBmZCkgY29uc3Q7CisgICAgdm9pZCBkdW1wKFN0cmluZzggKnJlc3VsdCkgY29uc3Q7CiAKIHByaXZhdGU6CiAgICAgU29ydGVkVmVjdG9yPEN1cnZlUG9pbnQ+IG1DdXJ2ZVBvaW50czsKQEAgLTE0NCw3ICsxNDQsNyBAQAogICAgICAgICB9CiAgICAgfQogCi0gICAgdm9pZCBkdW1wKGludCBmZCwgaW50IHNwYWNlcywgYm9vbCBjdXJ2ZVBvaW50cyA9IGZhbHNlKSBjb25zdDsKKyAgICB2b2lkIGR1bXAoU3RyaW5nOCAqZHN0LCBpbnQgc3BhY2VzLCBib29sIGN1cnZlUG9pbnRzID0gZmFsc2UpIGNvbnN0OwogCiBwcml2YXRlOgogICAgIEtleWVkVmVjdG9yPGRldmljZV9jYXRlZ29yeSwgc3A8Vm9sdW1lQ3VydmU+ID4gbU9yaWdpblZvbHVtZUN1cnZlczsKQEAgLTIxNyw3ICsyMTcsNyBAQAogICAgICAgICByZXR1cm4gZ2V0Q3VydmVzRm9yKHN0cmVhbSkuaGFzVm9sdW1lSW5kZXhGb3JEZXZpY2UoZGV2aWNlKTsKICAgICB9CiAKLSAgICB2aXJ0dWFsIHN0YXR1c190IGR1bXAoaW50IGZkKSBjb25zdDsKKyAgICB2b2lkIGR1bXAoU3RyaW5nOCAqZHN0KSBjb25zdCBvdmVycmlkZTsKIAogICAgIHNzaXplX3QgYWRkKGNvbnN0IHNwPFZvbHVtZUN1cnZlPiAmdm9sdW1lQ3VydmUpCiAgICAgewpkaWZmIC0tZ2l0IGEvc2VydmljZXMvYXVkaW9wb2xpY3kvY29tbW9uL21hbmFnZXJkZWZpbml0aW9ucy9zcmMvQXVkaW9Db2xsZWN0aW9ucy5jcHAgYi9zZXJ2aWNlcy9hdWRpb3BvbGljeS9jb21tb24vbWFuYWdlcmRlZmluaXRpb25zL3NyYy9BdWRpb0NvbGxlY3Rpb25zLmNwcAppbmRleCBjYTY3Yjg3Li5jOTBhNTgyIDEwMDY0NAotLS0gYS9zZXJ2aWNlcy9hdWRpb3BvbGljeS9jb21tb24vbWFuYWdlcmRlZmluaXRpb25zL3NyYy9BdWRpb0NvbGxlY3Rpb25zLmNwcAorKysgYi9zZXJ2aWNlcy9hdWRpb3BvbGljeS9jb21tb24vbWFuYWdlcmRlZmluaXRpb25zL3NyYy9BdWRpb0NvbGxlY3Rpb25zLmNwcApAQCAtMzUsMjIgKzM1LDE2IEBACiAgICAgcmV0dXJuIG51bGxwdHI7CiB9CiAKLXN0YXR1c190IEF1ZGlvUm91dGVWZWN0b3I6OmR1bXAoaW50IGZkLCBpbnQgc3BhY2VzKSBjb25zdAordm9pZCBBdWRpb1JvdXRlVmVjdG9yOjpkdW1wKFN0cmluZzggKmRzdCwgaW50IHNwYWNlcykgY29uc3QKIHsKICAgICBpZiAoaXNFbXB0eSgpKSB7Ci0gICAgICAgIHJldHVybiBOT19FUlJPUjsKKyAgICAgICAgcmV0dXJuOwogICAgIH0KLSAgICBjb25zdCBzaXplX3QgU0laRSA9IDI1NjsKLSAgICBjaGFyIGJ1ZmZlcltTSVpFXTsKLQotICAgIHNucHJpbnRmKGJ1ZmZlciwgU0laRSwgIlxuJSpzQXVkaW8gUm91dGVzICglenUpOlxuIiwgc3BhY2VzLCAiIiwgc2l6ZSgpKTsKLSAgICB3cml0ZShmZCwgYnVmZmVyLCBzdHJsZW4oYnVmZmVyKSk7CisgICAgZHN0LT5hcHBlbmRGb3JtYXQoIlxuJSpzQXVkaW8gUm91dGVzICglenUpOlxuIiwgc3BhY2VzLCAiIiwgc2l6ZSgpKTsKICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHNpemUoKTsgaSsrKSB7Ci0gICAgICAgIHNucHJpbnRmKGJ1ZmZlciwgU0laRSwgIiUqcy0gUm91dGUgJXp1OlxuIiwgc3BhY2VzLCAiIiwgaSArIDEpOwotICAgICAgICB3cml0ZShmZCwgYnVmZmVyLCBzdHJsZW4oYnVmZmVyKSk7Ci0gICAgICAgIGl0ZW1BdChpKS0+ZHVtcChmZCwgNCk7CisgICAgICAgIGRzdC0+YXBwZW5kRm9ybWF0KCIlKnMtIFJvdXRlICV6dTpcbiIsIHNwYWNlcywgIiIsIGkgKyAxKTsKKyAgICAgICAgaXRlbUF0KGkpLT5kdW1wKGRzdCwgNCk7CiAgICAgfQotICAgIHJldHVybiBOT19FUlJPUjsKIH0KIAogfSAvLyBuYW1lc3BhY2UgYW5kcm9pZApkaWZmIC0tZ2l0IGEvc2VydmljZXMvYXVkaW9wb2xpY3kvY29tbW9uL21hbmFnZXJkZWZpbml0aW9ucy9zcmMvQXVkaW9HYWluLmNwcCBiL3NlcnZpY2VzL2F1ZGlvcG9saWN5L2NvbW1vbi9tYW5hZ2VyZGVmaW5pdGlvbnMvc3JjL0F1ZGlvR2Fpbi5jcHAKaW5kZXggMTkzZDRhNi4uMjcyNTg3MCAxMDA2NDQKLS0tIGEvc2VydmljZXMvYXVkaW9wb2xpY3kvY29tbW9uL21hbmFnZXJkZWZpbml0aW9ucy9zcmMvQXVkaW9HYWluLmNwcAorKysgYi9zZXJ2aWNlcy9hdWRpb3BvbGljeS9jb21tb24vbWFuYWdlcmRlZmluaXRpb25zL3NyYy9BdWRpb0dhaW4uY3BwCkBAIC05OCwzMiArOTgsMTcgQEAKICAgICByZXR1cm4gTk9fRVJST1I7CiB9CiAKLXZvaWQgQXVkaW9HYWluOjpkdW1wKGludCBmZCwgaW50IHNwYWNlcywgaW50IGluZGV4KSBjb25zdAordm9pZCBBdWRpb0dhaW46OmR1bXAoU3RyaW5nOCAqZHN0LCBpbnQgc3BhY2VzLCBpbnQgaW5kZXgpIGNvbnN0CiB7Ci0gICAgY29uc3Qgc2l6ZV90IFNJWkUgPSAyNTY7Ci0gICAgY2hhciBidWZmZXJbU0laRV07Ci0gICAgU3RyaW5nOCByZXN1bHQ7Ci0KLSAgICBzbnByaW50ZihidWZmZXIsIFNJWkUsICIlKnNHYWluICVkOlxuIiwgc3BhY2VzLCAiIiwgaW5kZXgrMSk7Ci0gICAgcmVzdWx0LmFwcGVuZChidWZmZXIpOwotICAgIHNucHJpbnRmKGJ1ZmZlciwgU0laRSwgIiUqcy0gbW9kZTogJTA4eFxuIiwgc3BhY2VzLCAiIiwgbUdhaW4ubW9kZSk7Ci0gICAgcmVzdWx0LmFwcGVuZChidWZmZXIpOwotICAgIHNucHJpbnRmKGJ1ZmZlciwgU0laRSwgIiUqcy0gY2hhbm5lbF9tYXNrOiAlMDh4XG4iLCBzcGFjZXMsICIiLCBtR2Fpbi5jaGFubmVsX21hc2spOwotICAgIHJlc3VsdC5hcHBlbmQoYnVmZmVyKTsKLSAgICBzbnByaW50ZihidWZmZXIsIFNJWkUsICIlKnMtIG1pbl92YWx1ZTogJWQgbUJcbiIsIHNwYWNlcywgIiIsIG1HYWluLm1pbl92YWx1ZSk7Ci0gICAgcmVzdWx0LmFwcGVuZChidWZmZXIpOwotICAgIHNucHJpbnRmKGJ1ZmZlciwgU0laRSwgIiUqcy0gbWF4X3ZhbHVlOiAlZCBtQlxuIiwgc3BhY2VzLCAiIiwgbUdhaW4ubWF4X3ZhbHVlKTsKLSAgICByZXN1bHQuYXBwZW5kKGJ1ZmZlcik7Ci0gICAgc25wcmludGYoYnVmZmVyLCBTSVpFLCAiJSpzLSBkZWZhdWx0X3ZhbHVlOiAlZCBtQlxuIiwgc3BhY2VzLCAiIiwgbUdhaW4uZGVmYXVsdF92YWx1ZSk7Ci0gICAgcmVzdWx0LmFwcGVuZChidWZmZXIpOwotICAgIHNucHJpbnRmKGJ1ZmZlciwgU0laRSwgIiUqcy0gc3RlcF92YWx1ZTogJWQgbUJcbiIsIHNwYWNlcywgIiIsIG1HYWluLnN0ZXBfdmFsdWUpOwotICAgIHJlc3VsdC5hcHBlbmQoYnVmZmVyKTsKLSAgICBzbnByaW50ZihidWZmZXIsIFNJWkUsICIlKnMtIG1pbl9yYW1wX21zOiAlZCBtc1xuIiwgc3BhY2VzLCAiIiwgbUdhaW4ubWluX3JhbXBfbXMpOwotICAgIHJlc3VsdC5hcHBlbmQoYnVmZmVyKTsKLSAgICBzbnByaW50ZihidWZmZXIsIFNJWkUsICIlKnMtIG1heF9yYW1wX21zOiAlZCBtc1xuIiwgc3BhY2VzLCAiIiwgbUdhaW4ubWF4X3JhbXBfbXMpOwotICAgIHJlc3VsdC5hcHBlbmQoYnVmZmVyKTsKLQotICAgIHdyaXRlKGZkLCByZXN1bHQuc3RyaW5nKCksIHJlc3VsdC5zaXplKCkpOworICAgIGRzdC0+YXBwZW5kRm9ybWF0KCIlKnNHYWluICVkOlxuIiwgc3BhY2VzLCAiIiwgaW5kZXgrMSk7CisgICAgZHN0LT5hcHBlbmRGb3JtYXQoIiUqcy0gbW9kZTogJTA4eFxuIiwgc3BhY2VzLCAiIiwgbUdhaW4ubW9kZSk7CisgICAgZHN0LT5hcHBlbmRGb3JtYXQoIiUqcy0gY2hhbm5lbF9tYXNrOiAlMDh4XG4iLCBzcGFjZXMsICIiLCBtR2Fpbi5jaGFubmVsX21hc2spOworICAgIGRzdC0+YXBwZW5kRm9ybWF0KCIlKnMtIG1pbl92YWx1ZTogJWQgbUJcbiIsIHNwYWNlcywgIiIsIG1HYWluLm1pbl92YWx1ZSk7CisgICAgZHN0LT5hcHBlbmRGb3JtYXQoIiUqcy0gbWF4X3ZhbHVlOiAlZCBtQlxuIiwgc3BhY2VzLCAiIiwgbUdhaW4ubWF4X3ZhbHVlKTsKKyAgICBkc3QtPmFwcGVuZEZvcm1hdCgiJSpzLSBkZWZhdWx0X3ZhbHVlOiAlZCBtQlxuIiwgc3BhY2VzLCAiIiwgbUdhaW4uZGVmYXVsdF92YWx1ZSk7CisgICAgZHN0LT5hcHBlbmRGb3JtYXQoIiUqcy0gc3RlcF92YWx1ZTogJWQgbUJcbiIsIHNwYWNlcywgIiIsIG1HYWluLnN0ZXBfdmFsdWUpOworICAgIGRzdC0+YXBwZW5kRm9ybWF0KCIlKnMtIG1pbl9yYW1wX21zOiAlZCBtc1xuIiwgc3BhY2VzLCAiIiwgbUdhaW4ubWluX3JhbXBfbXMpOworICAgIGRzdC0+YXBwZW5kRm9ybWF0KCIlKnMtIG1heF9yYW1wX21zOiAlZCBtc1xuIiwgc3BhY2VzLCAiIiwgbUdhaW4ubWF4X3JhbXBfbXMpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBhbmRyb2lkCmRpZmYgLS1naXQgYS9zZXJ2aWNlcy9hdWRpb3BvbGljeS9jb21tb24vbWFuYWdlcmRlZmluaXRpb25zL3NyYy9BdWRpb0lucHV0RGVzY3JpcHRvci5jcHAgYi9zZXJ2aWNlcy9hdWRpb3BvbGljeS9jb21tb24vbWFuYWdlcmRlZmluaXRpb25zL3NyYy9BdWRpb0lucHV0RGVzY3JpcHRvci5jcHAKaW5kZXggMWUwNjQwYy4uMWYyOTg3NCAxMDA2NDQKLS0tIGEvc2VydmljZXMvYXVkaW9wb2xpY3kvY29tbW9uL21hbmFnZXJkZWZpbml0aW9ucy9zcmMvQXVkaW9JbnB1dERlc2NyaXB0b3IuY3BwCisrKyBiL3NlcnZpY2VzL2F1ZGlvcG9saWN5L2NvbW1vbi9tYW5hZ2VyZGVmaW5pdGlvbnMvc3JjL0F1ZGlvSW5wdXREZXNjcmlwdG9yLmNwcApAQCAtMTcsMjIgKzE3LDIwIEBACiAjZGVmaW5lIExPR19UQUcgIkFQTTo6QXVkaW9JbnB1dERlc2NyaXB0b3IiCiAvLyNkZWZpbmUgTE9HX05ERUJVRyAwCiAKKyNpbmNsdWRlIDxtZWRpYS9BdWRpb1BvbGljeS5oPgorI2luY2x1ZGUgPHBvbGljeS5oPgogI2luY2x1ZGUgPEF1ZGlvUG9saWN5SW50ZXJmYWNlLmg+CiAjaW5jbHVkZSAiQXVkaW9JbnB1dERlc2NyaXB0b3IuaCIKICNpbmNsdWRlICJJT1Byb2ZpbGUuaCIKICNpbmNsdWRlICJBdWRpb0dhaW4uaCIKICNpbmNsdWRlICJId01vZHVsZS5oIgotI2luY2x1ZGUgPG1lZGlhL0F1ZGlvUG9saWN5Lmg+Ci0jaW5jbHVkZSA8cG9saWN5Lmg+CiAKIG5hbWVzcGFjZSBhbmRyb2lkIHsKIAogQXVkaW9JbnB1dERlc2NyaXB0b3I6OkF1ZGlvSW5wdXREZXNjcmlwdG9yKGNvbnN0IHNwPElPUHJvZmlsZT4mIHByb2ZpbGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQXVkaW9Qb2xpY3lDbGllbnRJbnRlcmZhY2UgKmNsaWVudEludGVyZmFjZSkKLSAgICA6IG1Jb0hhbmRsZSgwKSwKLSAgICAgIG1EZXZpY2UoQVVESU9fREVWSUNFX05PTkUpLCBtUG9saWN5TWl4KE5VTEwpLAotICAgICAgbVByb2ZpbGUocHJvZmlsZSksIG1QYXRjaEhhbmRsZShBVURJT19QQVRDSF9IQU5ETEVfTk9ORSksIG1JZCgwKSwKLSAgICAgIG1DbGllbnRJbnRlcmZhY2UoY2xpZW50SW50ZXJmYWNlKQorICAgIDogbVByb2ZpbGUocHJvZmlsZSkKKyAgICAsICBtQ2xpZW50SW50ZXJmYWNlKGNsaWVudEludGVyZmFjZSkKIHsKICAgICBpZiAocHJvZmlsZSAhPSBOVUxMKSB7CiAgICAgICAgIHByb2ZpbGUtPnBpY2tBdWRpb1Byb2ZpbGUobVNhbXBsaW5nUmF0ZSwgbUNoYW5uZWxNYXNrLCBtRm9ybWF0KTsKQEAgLTUwLDExICs0OCw2IEBACiAgICAgcmV0dXJuIG1Qcm9maWxlLT5nZXRNb2R1bGVIYW5kbGUoKTsKIH0KIAotdWludDMyX3QgQXVkaW9JbnB1dERlc2NyaXB0b3I6OmdldE9wZW5SZWZDb3VudCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1TZXNzaW9ucy5nZXRPcGVuQ291bnQoKTsKLX0KLQogYXVkaW9fcG9ydF9oYW5kbGVfdCBBdWRpb0lucHV0RGVzY3JpcHRvcjo6Z2V0SWQoKSBjb25zdAogewogICAgIHJldHVybiBtSWQ7CkBAIC0xMTgsNTcgKzExMSw0NSBAQAogICAgIG1QcmVlbXB0ZWRTZXNzaW9ucy5jbGVhcigpOwogfQogCi1ib29sIEF1ZGlvSW5wdXREZXNjcmlwdG9yOjppc0FjdGl2ZSgpIGNvbnN0IHsKLSAgICByZXR1cm4gbVNlc3Npb25zLmhhc0FjdGl2ZVNlc3Npb24oKTsKLX0KLQogYm9vbCBBdWRpb0lucHV0RGVzY3JpcHRvcjo6aXNTb3VyY2VBY3RpdmUoYXVkaW9fc291cmNlX3Qgc291cmNlKSBjb25zdAogewotICAgIHJldHVybiBtU2Vzc2lvbnMuaXNTb3VyY2VBY3RpdmUoc291cmNlKTsKKyAgICBmb3IgKGNvbnN0IGF1dG8gJmNsaWVudCA6IGdldENsaWVudEl0ZXJhYmxlKCkpIHsKKyAgICAgICAgaWYgKGNsaWVudC0+YWN0aXZlKCkgJiYKKyAgICAgICAgICAgICgoY2xpZW50LT5zb3VyY2UoKSA9PSBzb3VyY2UpIHx8CisgICAgICAgICAgICAgICAgKChzb3VyY2UgPT0gQVVESU9fU09VUkNFX1ZPSUNFX1JFQ09HTklUSU9OKSAmJgorICAgICAgICAgICAgICAgICAgICAoY2xpZW50LT5zb3VyY2UoKSA9PSBBVURJT19TT1VSQ0VfSE9UV09SRCkgJiYKKyAgICAgICAgICAgICAgICAgICAgY2xpZW50LT5pc1NvdW5kVHJpZ2dlcigpKSkpIHsKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9CisgICAgfQorICAgIHJldHVybiBmYWxzZTsKIH0KIAogYXVkaW9fc291cmNlX3QgQXVkaW9JbnB1dERlc2NyaXB0b3I6OmdldEhpZ2hlc3RQcmlvcml0eVNvdXJjZShib29sIGFjdGl2ZU9ubHkpIGNvbnN0CiB7CisgICAgYXVkaW9fc291cmNlX3Qgc291cmNlID0gQVVESU9fU09VUkNFX0RFRkFVTFQ7CisgICAgaW50MzJfdCBwcmlvcml0eSA9IC0xOwogCi0gICAgcmV0dXJuIG1TZXNzaW9ucy5nZXRIaWdoZXN0UHJpb3JpdHlTb3VyY2UoYWN0aXZlT25seSk7CisgICAgZm9yIChjb25zdCBhdXRvICZjbGllbnQgOiBnZXRDbGllbnRJdGVyYWJsZSgpKSB7CisgICAgICAgIGlmIChhY3RpdmVPbmx5ICYmICFjbGllbnQtPmFjdGl2ZSgpICkgeworICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIH0KKyAgICAgICAgaW50MzJfdCBjdXJQcmlvcml0eSA9IHNvdXJjZV9wcmlvcml0eShjbGllbnQtPnNvdXJjZSgpKTsKKyAgICAgICAgaWYgKGN1clByaW9yaXR5ID4gcHJpb3JpdHkpIHsKKyAgICAgICAgICAgIHByaW9yaXR5ID0gY3VyUHJpb3JpdHk7CisgICAgICAgICAgICBzb3VyY2UgPSBjbGllbnQtPnNvdXJjZSgpOworICAgICAgICB9CisgICAgfQorICAgIHJldHVybiBzb3VyY2U7CiB9CiAKIGJvb2wgQXVkaW9JbnB1dERlc2NyaXB0b3I6OmlzU291bmRUcmlnZ2VyKCkgY29uc3QgewotICAgIC8vIHNvdW5kIHRyaWdnZXIgYW5kIG5vbiBzb3VuZCB0cmlnZ2VyIHNlc3Npb25zIGFyZSBub3QgbWl4ZWQKLSAgICAvLyBvbiBhIGdpdmVuIGlucHV0Ci0gICAgcmV0dXJuIG1TZXNzaW9ucy52YWx1ZUF0KDApLT5pc1NvdW5kVHJpZ2dlcigpOwotfQotCi1zcDxBdWRpb1Nlc3Npb24+IEF1ZGlvSW5wdXREZXNjcmlwdG9yOjpnZXRBdWRpb1Nlc3Npb24oCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXVkaW9fc2Vzc2lvbl90IHNlc3Npb24pIGNvbnN0IHsKLSAgICByZXR1cm4gbVNlc3Npb25zLnZhbHVlRm9yKHNlc3Npb24pOwotfQotCi1BdWRpb1Nlc3Npb25Db2xsZWN0aW9uIEF1ZGlvSW5wdXREZXNjcmlwdG9yOjpnZXRBdWRpb1Nlc3Npb25zKGJvb2wgYWN0aXZlT25seSkgY29uc3QKLXsKLSAgICBpZiAoYWN0aXZlT25seSkgewotICAgICAgICByZXR1cm4gbVNlc3Npb25zLmdldEFjdGl2ZVNlc3Npb25zKCk7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgcmV0dXJuIG1TZXNzaW9uczsKKyAgICAvLyBzb3VuZCB0cmlnZ2VyIGFuZCBub24gc291bmQgdHJpZ2dlciBjbGllbnRzIGFyZSBub3QgbWl4ZWQgb24gYSBnaXZlbiBpbnB1dAorICAgIC8vIHNvIGNoZWNrIG9ubHkgZmlyc3QgY2xpZW50CisgICAgaWYgKGdldENsaWVudENvdW50KCkgPT0gMCkgeworICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQotfQotCi1zaXplX3QgQXVkaW9JbnB1dERlc2NyaXB0b3I6OmdldEF1ZGlvU2Vzc2lvbkNvdW50KGJvb2wgYWN0aXZlT25seSkgY29uc3QKLXsKLSAgICBpZiAoYWN0aXZlT25seSkgewotICAgICAgICByZXR1cm4gbVNlc3Npb25zLmdldEFjdGl2ZVNlc3Npb25Db3VudCgpOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIHJldHVybiBtU2Vzc2lvbnMuc2l6ZSgpOwotICAgIH0KLX0KLQotc3RhdHVzX3QgQXVkaW9JbnB1dERlc2NyaXB0b3I6OmFkZEF1ZGlvU2Vzc2lvbihhdWRpb19zZXNzaW9uX3Qgc2Vzc2lvbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzcDxBdWRpb1Nlc3Npb24+JiBhdWRpb1Nlc3Npb24pIHsKLSAgICByZXR1cm4gbVNlc3Npb25zLmFkZFNlc3Npb24oc2Vzc2lvbiwgYXVkaW9TZXNzaW9uLCAvKkF1ZGlvU2Vzc2lvbkluZm9Qcm92aWRlciovdGhpcyk7Ci19Ci0KLXN0YXR1c190IEF1ZGlvSW5wdXREZXNjcmlwdG9yOjpyZW1vdmVBdWRpb1Nlc3Npb24oYXVkaW9fc2Vzc2lvbl90IHNlc3Npb24pIHsKLSAgICByZXR1cm4gbVNlc3Npb25zLnJlbW92ZVNlc3Npb24oc2Vzc2lvbik7CisgICAgcmV0dXJuIGdldENsaWVudEl0ZXJhYmxlKCkuYmVnaW4oKS0+aXNTb3VuZFRyaWdnZXIoKTsKIH0KIAogYXVkaW9fcGF0Y2hfaGFuZGxlX3QgQXVkaW9JbnB1dERlc2NyaXB0b3I6OmdldFBhdGNoSGFuZGxlKCkgY29uc3QKQEAgLTE3OSw3ICsxNjAsMTEgQEAKIHZvaWQgQXVkaW9JbnB1dERlc2NyaXB0b3I6OnNldFBhdGNoSGFuZGxlKGF1ZGlvX3BhdGNoX2hhbmRsZV90IGhhbmRsZSkKIHsKICAgICBtUGF0Y2hIYW5kbGUgPSBoYW5kbGU7Ci0gICAgbVNlc3Npb25zLm9uU2Vzc2lvbkluZm9VcGRhdGUoKTsKKyAgICBmb3IgKGNvbnN0IGF1dG8gJmNsaWVudCA6IGdldENsaWVudEl0ZXJhYmxlKCkpIHsKKyAgICAgICAgaWYgKGNsaWVudC0+YWN0aXZlKCkpIHsKKyAgICAgICAgICAgIHVwZGF0ZUNsaWVudFJlY29yZGluZ0NvbmZpZ3VyYXRpb24oUkVDT1JEX0NPTkZJR19FVkVOVF9TVEFSVCwgY2xpZW50KTsKKyAgICAgICAgfQorICAgIH0KIH0KIAogYXVkaW9fY29uZmlnX2Jhc2VfdCBBdWRpb0lucHV0RGVzY3JpcHRvcjo6Z2V0Q29uZmlnKCkgY29uc3QKQEAgLTIzOSw3ICsyMjQsNyBAQAogCiBzdGF0dXNfdCBBdWRpb0lucHV0RGVzY3JpcHRvcjo6c3RhcnQoKQogewotICAgIGlmIChnZXRBdWRpb1Nlc3Npb25Db3VudCh0cnVlLyphY3RpdmVPbmx5Ki8pID09IDEpIHsKKyAgICBpZiAobUdsb2JhbEFjdGl2ZUNvdW50ID09IDEpIHsKICAgICAgICAgaWYgKCFtUHJvZmlsZS0+Y2FuU3RhcnROZXdJbygpKSB7CiAgICAgICAgICAgICBBTE9HSSgiJXMgbVByb2ZpbGUtPmN1ckFjdGl2ZUNvdW50ICVkIiwgX19mdW5jX18sIG1Qcm9maWxlLT5jdXJBY3RpdmVDb3VudCk7CiAgICAgICAgICAgICByZXR1cm4gSU5WQUxJRF9PUEVSQVRJT047CkBAIC0yNjYsMzggKzI1MSwxMDUgQEAKICAgICAgICAgTE9HX0FMV0FZU19GQVRBTF9JRihtUHJvZmlsZS0+Y3VyT3BlbkNvdW50IDwgMSwgIiVzIHByb2ZpbGUgb3BlbiBjb3VudCAldSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19GVU5DVElPTl9fLCBtUHJvZmlsZS0+Y3VyT3BlbkNvdW50KTsKICAgICAgICAgLy8gZG8gbm90IGNhbGwgc3RvcCgpIGhlcmUgYXMgc3RvcCgpIGlzIHN1cHBvc2VkIHRvIGJlIGNhbGxlZCBhZnRlcgotICAgICAgICAvLyBBdWRpb1Nlc3Npb246OmNoYW5nZUFjdGl2ZUNvdW50KC0xKSBhbmQgd2UgZG9uJ3Qga25vdyBob3cgbWFueSBzZXNzaW9ucworICAgICAgICAvLyAgc2V0Q2xpZW50QWN0aXZlKGNsaWVudCwgZmFsc2UpIGFuZCB3ZSBkb24ndCBrbm93IGhvdyBtYW55IGNsaWVudHMKICAgICAgICAgLy8gYXJlIHN0aWxsIGFjdGl2ZSBhdCB0aGlzIHRpbWUKICAgICAgICAgaWYgKGlzQWN0aXZlKCkpIHsKICAgICAgICAgICAgIG1Qcm9maWxlLT5jdXJBY3RpdmVDb3VudC0tOwogICAgICAgICB9CiAgICAgICAgIG1Qcm9maWxlLT5jdXJPcGVuQ291bnQtLTsKKyAgICAgICAgTE9HX0FMV0FZU19GQVRBTF9JRihtUHJvZmlsZS0+Y3VyT3BlbkNvdW50IDwgIG1Qcm9maWxlLT5jdXJBY3RpdmVDb3VudCwKKyAgICAgICAgICAgICAgICAiJXMoJWQpOiBtUHJvZmlsZS0+Y3VyT3BlbkNvdW50ICVkIDwgbVByb2ZpbGUtPmN1ckFjdGl2ZUNvdW50ICVkLiIsCisgICAgICAgICAgICAgICAgX19mdW5jX18sIG1JZCwgbVByb2ZpbGUtPmN1ck9wZW5Db3VudCwgbVByb2ZpbGUtPmN1ckFjdGl2ZUNvdW50KTsKICAgICAgICAgbUlvSGFuZGxlID0gQVVESU9fSU9fSEFORExFX05PTkU7CiAgICAgfQogfQogCi1zdGF0dXNfdCBBdWRpb0lucHV0RGVzY3JpcHRvcjo6ZHVtcChpbnQgZmQpCit2b2lkIEF1ZGlvSW5wdXREZXNjcmlwdG9yOjpzZXRDbGllbnRBY3RpdmUoY29uc3Qgc3A8UmVjb3JkQ2xpZW50RGVzY3JpcHRvcj4mIGNsaWVudCwgYm9vbCBhY3RpdmUpCiB7Ci0gICAgY29uc3Qgc2l6ZV90IFNJWkUgPSAyNTY7Ci0gICAgY2hhciBidWZmZXJbU0laRV07Ci0gICAgU3RyaW5nOCByZXN1bHQ7CisgICAgTE9HX0FMV0FZU19GQVRBTF9JRihnZXRDbGllbnQoY2xpZW50LT5wb3J0SWQoKSkgPT0gbnVsbHB0ciwKKyAgICAgICAgIiVzKCVkKSBkb2VzIG5vdCBleGlzdCBvbiBpbnB1dCBkZXNjcmlwdG9yIiwgX19mdW5jX18sIGNsaWVudC0+cG9ydElkKCkpOworICAgIGlmIChhY3RpdmUgPT0gY2xpZW50LT5hY3RpdmUoKSkgeworICAgICAgICByZXR1cm47CisgICAgfQogCi0gICAgc25wcmludGYoYnVmZmVyLCBTSVpFLCAiIElEOiAlZFxuIiwgZ2V0SWQoKSk7Ci0gICAgcmVzdWx0LmFwcGVuZChidWZmZXIpOwotICAgIHNucHJpbnRmKGJ1ZmZlciwgU0laRSwgIiBTYW1wbGluZyByYXRlOiAlZFxuIiwgbVNhbXBsaW5nUmF0ZSk7Ci0gICAgcmVzdWx0LmFwcGVuZChidWZmZXIpOwotICAgIHNucHJpbnRmKGJ1ZmZlciwgU0laRSwgIiBGb3JtYXQ6ICVkXG4iLCBtRm9ybWF0KTsKLSAgICByZXN1bHQuYXBwZW5kKGJ1ZmZlcik7Ci0gICAgc25wcmludGYoYnVmZmVyLCBTSVpFLCAiIENoYW5uZWxzOiAlMDh4XG4iLCBtQ2hhbm5lbE1hc2spOwotICAgIHJlc3VsdC5hcHBlbmQoYnVmZmVyKTsKLSAgICBzbnByaW50ZihidWZmZXIsIFNJWkUsICIgRGV2aWNlcyAlMDh4XG4iLCBtRGV2aWNlKTsKLSAgICByZXN1bHQuYXBwZW5kKGJ1ZmZlcik7CisgICAgLy8gSGFuZGxlIG5vbi1jbGllbnQtc3BlY2lmaWMgYWN0aXZpdHkgcmVmIGNvdW50CisgICAgaW50MzJfdCBvbGRHbG9iYWxBY3RpdmVDb3VudCA9IG1HbG9iYWxBY3RpdmVDb3VudDsKKyAgICBpZiAoIWFjdGl2ZSAmJiBtR2xvYmFsQWN0aXZlQ291bnQgPCAxKSB7CisgICAgICAgIExPR19BTFdBWVNfRkFUQUwoIiVzKCVkKSBpbnZhbGlkIGRlYWN0aXZhdGlvbiB3aXRoIGdsb2JhbEFjdGl2ZUNvdW50ICVkIiwKKyAgICAgICAgICAgICAgIF9fZnVuY19fLCBjbGllbnQtPnBvcnRJZCgpLCBtR2xvYmFsQWN0aXZlQ291bnQpOworICAgICAgICAvLyBtR2xvYmFsQWN0aXZlQ291bnQgPSAxOworICAgIH0KKyAgICBjb25zdCBpbnQgZGVsdGEgPSBhY3RpdmUgPyAxIDogLTE7CisgICAgbUdsb2JhbEFjdGl2ZUNvdW50ICs9IGRlbHRhOwogCi0gICAgd3JpdGUoZmQsIHJlc3VsdC5zdHJpbmcoKSwgcmVzdWx0LnNpemUoKSk7CisgICAgaWYgKChvbGRHbG9iYWxBY3RpdmVDb3VudCA9PSAwKSAmJiAobUdsb2JhbEFjdGl2ZUNvdW50ID4gMCkpIHsKKyAgICAgICAgaWYgKChtUG9saWN5TWl4ICE9IE5VTEwpICYmICgobVBvbGljeU1peC0+bUNiRmxhZ3MgJiBBdWRpb01peDo6a0NiRmxhZ05vdGlmeUFjdGl2aXR5KSAhPSAwKSkKKyAgICAgICAgeworICAgICAgICAgICAgbUNsaWVudEludGVyZmFjZS0+b25EeW5hbWljUG9saWN5TWl4U3RhdGVVcGRhdGUobVBvbGljeU1peC0+bURldmljZUFkZHJlc3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNSVhfU1RBVEVfTUlYSU5HKTsKKyAgICAgICAgfQorICAgIH0gZWxzZSBpZiAoKG9sZEdsb2JhbEFjdGl2ZUNvdW50ID4gMCkgJiYgKG1HbG9iYWxBY3RpdmVDb3VudCA9PSAwKSkgeworICAgICAgICBpZiAoKG1Qb2xpY3lNaXggIT0gTlVMTCkgJiYgKChtUG9saWN5TWl4LT5tQ2JGbGFncyAmIEF1ZGlvTWl4OjprQ2JGbGFnTm90aWZ5QWN0aXZpdHkpICE9IDApKQorICAgICAgICB7CisgICAgICAgICAgICBtQ2xpZW50SW50ZXJmYWNlLT5vbkR5bmFtaWNQb2xpY3lNaXhTdGF0ZVVwZGF0ZShtUG9saWN5TWl4LT5tRGV2aWNlQWRkcmVzcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1JWF9TVEFURV9JRExFKTsKKyAgICAgICAgfQorICAgIH0KIAotICAgIG1TZXNzaW9ucy5kdW1wKGZkLCAxKTsKKyAgICBjbGllbnQtPnNldEFjdGl2ZShhY3RpdmUpOwogCi0gICAgcmV0dXJuIE5PX0VSUk9SOworICAgIGludCBldmVudCA9IGFjdGl2ZSA/IFJFQ09SRF9DT05GSUdfRVZFTlRfU1RBUlQgOiBSRUNPUkRfQ09ORklHX0VWRU5UX1NUT1A7CisgICAgdXBkYXRlQ2xpZW50UmVjb3JkaW5nQ29uZmlndXJhdGlvbihldmVudCwgY2xpZW50KTsKKworfQorCit2b2lkIEF1ZGlvSW5wdXREZXNjcmlwdG9yOjp1cGRhdGVDbGllbnRSZWNvcmRpbmdDb25maWd1cmF0aW9uKAorICAgIGludCBldmVudCwgY29uc3Qgc3A8UmVjb3JkQ2xpZW50RGVzY3JpcHRvcj4mIGNsaWVudCkKK3sKKyAgICBjb25zdCBhdWRpb19jb25maWdfYmFzZV90IHNlc3Npb25Db25maWcgPSBjbGllbnQtPmNvbmZpZygpOworICAgIGNvbnN0IHJlY29yZF9jbGllbnRfaW5mb190IHJlY29yZENsaWVudEluZm97Y2xpZW50LT51aWQoKSwgY2xpZW50LT5zZXNzaW9uKCksIGNsaWVudC0+c291cmNlKCl9OworICAgIGNvbnN0IGF1ZGlvX2NvbmZpZ19iYXNlX3QgY29uZmlnID0gZ2V0Q29uZmlnKCk7CisgICAgbUNsaWVudEludGVyZmFjZS0+b25SZWNvcmRpbmdDb25maWd1cmF0aW9uVXBkYXRlKGV2ZW50LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmcmVjb3JkQ2xpZW50SW5mbywgJnNlc3Npb25Db25maWcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZjb25maWcsIG1QYXRjaEhhbmRsZSk7Cit9CisKK1JlY29yZENsaWVudFZlY3RvciBBdWRpb0lucHV0RGVzY3JpcHRvcjo6Z2V0Q2xpZW50c0ZvclNlc3Npb24oCisgICAgYXVkaW9fc2Vzc2lvbl90IHNlc3Npb24pCit7CisgICAgUmVjb3JkQ2xpZW50VmVjdG9yIGNsaWVudHM7CisgICAgZm9yIChjb25zdCBhdXRvICZjbGllbnQgOiBnZXRDbGllbnRJdGVyYWJsZSgpKSB7CisgICAgICAgIGlmIChjbGllbnQtPnNlc3Npb24oKSA9PSBzZXNzaW9uKSB7CisgICAgICAgICAgICBjbGllbnRzLnB1c2hfYmFjayhjbGllbnQpOworICAgICAgICB9CisgICAgfQorICAgIHJldHVybiBjbGllbnRzOworfQorCitSZWNvcmRDbGllbnRWZWN0b3IgQXVkaW9JbnB1dERlc2NyaXB0b3I6OmNsaWVudHNMaXN0KGJvb2wgYWN0aXZlT25seSwgYXVkaW9fc291cmNlX3Qgc291cmNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIHByZWZlcnJlZERldmljZU9ubHkpIGNvbnN0Cit7CisgICAgUmVjb3JkQ2xpZW50VmVjdG9yIGNsaWVudHM7CisgICAgZm9yIChjb25zdCBhdXRvICZjbGllbnQgOiBnZXRDbGllbnRJdGVyYWJsZSgpKSB7CisgICAgICAgIGlmICgoIWFjdGl2ZU9ubHkgfHwgY2xpZW50LT5hY3RpdmUoKSkKKyAgICAgICAgICAgICYmIChzb3VyY2UgPT0gQVVESU9fU09VUkNFX0RFRkFVTFQgfHwgc291cmNlID09IGNsaWVudC0+c291cmNlKCkpCisgICAgICAgICAgICAmJiAoIXByZWZlcnJlZERldmljZU9ubHkgfHwgY2xpZW50LT5oYXNQcmVmZXJyZWREZXZpY2UoKSkpIHsKKyAgICAgICAgICAgIGNsaWVudHMucHVzaF9iYWNrKGNsaWVudCk7CisgICAgICAgIH0KKyAgICB9CisgICAgcmV0dXJuIGNsaWVudHM7Cit9CisKK3ZvaWQgQXVkaW9JbnB1dERlc2NyaXB0b3I6OmR1bXAoU3RyaW5nOCAqZHN0KSBjb25zdAoreworICAgIGRzdC0+YXBwZW5kRm9ybWF0KCIgSUQ6ICVkXG4iLCBnZXRJZCgpKTsKKyAgICBkc3QtPmFwcGVuZEZvcm1hdCgiIFNhbXBsaW5nIHJhdGU6ICVkXG4iLCBtU2FtcGxpbmdSYXRlKTsKKyAgICBkc3QtPmFwcGVuZEZvcm1hdCgiIEZvcm1hdDogJWRcbiIsIG1Gb3JtYXQpOworICAgIGRzdC0+YXBwZW5kRm9ybWF0KCIgQ2hhbm5lbHM6ICUwOHhcbiIsIG1DaGFubmVsTWFzayk7CisgICAgZHN0LT5hcHBlbmRGb3JtYXQoIiBEZXZpY2VzICUwOHhcbiIsIG1EZXZpY2UpOworICAgIGRzdC0+YXBwZW5kKCIgQXVkaW9SZWNvcmQgQ2xpZW50czpcbiIpOworICAgIENsaWVudE1hcEhhbmRsZXI8UmVjb3JkQ2xpZW50RGVzY3JpcHRvcj46OmR1bXAoZHN0KTsKKyAgICBkc3QtPmFwcGVuZCgiXG4iKTsKIH0KIAogYm9vbCBBdWRpb0lucHV0Q29sbGVjdGlvbjo6aXNTb3VyY2VBY3RpdmUoYXVkaW9fc291cmNlX3Qgc291cmNlKSBjb25zdApAQCAtMzU4LDIwICs0MTAsMjQgQEAKICAgICByZXR1cm4gZGV2aWNlczsKIH0KIAotc3RhdHVzX3QgQXVkaW9JbnB1dENvbGxlY3Rpb246OmR1bXAoaW50IGZkKSBjb25zdAorc3A8QXVkaW9JbnB1dERlc2NyaXB0b3I+IEF1ZGlvSW5wdXRDb2xsZWN0aW9uOjpnZXRJbnB1dEZvckNsaWVudChhdWRpb19wb3J0X2hhbmRsZV90IHBvcnRJZCkKIHsKLSAgICBjb25zdCBzaXplX3QgU0laRSA9IDI1NjsKLSAgICBjaGFyIGJ1ZmZlcltTSVpFXTsKLQotICAgIHNucHJpbnRmKGJ1ZmZlciwgU0laRSwgIlxuSW5wdXRzIGR1bXA6XG4iKTsKLSAgICB3cml0ZShmZCwgYnVmZmVyLCBzdHJsZW4oYnVmZmVyKSk7CiAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBzaXplKCk7IGkrKykgewotICAgICAgICBzbnByaW50ZihidWZmZXIsIFNJWkUsICItIElucHV0ICVkIGR1bXA6XG4iLCBrZXlBdChpKSk7Ci0gICAgICAgIHdyaXRlKGZkLCBidWZmZXIsIHN0cmxlbihidWZmZXIpKTsKLSAgICAgICAgdmFsdWVBdChpKS0+ZHVtcChmZCk7CisgICAgICAgIHNwPEF1ZGlvSW5wdXREZXNjcmlwdG9yPiBpbnB1dERlc2MgPSB2YWx1ZUF0KGkpOworICAgICAgICBpZiAoaW5wdXREZXNjLT5nZXRDbGllbnQocG9ydElkKSAhPSBudWxscHRyKSB7CisgICAgICAgICAgICByZXR1cm4gaW5wdXREZXNjOworICAgICAgICB9CiAgICAgfQorICAgIHJldHVybiAwOworfQogCi0gICAgcmV0dXJuIE5PX0VSUk9SOwordm9pZCBBdWRpb0lucHV0Q29sbGVjdGlvbjo6ZHVtcChTdHJpbmc4ICpkc3QpIGNvbnN0Cit7CisgICAgZHN0LT5hcHBlbmQoIlxuSW5wdXRzIGR1bXA6XG4iKTsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHNpemUoKTsgaSsrKSB7CisgICAgICAgIGRzdC0+YXBwZW5kRm9ybWF0KCItIElucHV0ICVkIGR1bXA6XG4iLCBrZXlBdChpKSk7CisgICAgICAgIHZhbHVlQXQoaSktPmR1bXAoZHN0KTsKKyAgICB9CiB9CiAKIH07IC8vbmFtZXNwYWNlIGFuZHJvaWQKZGlmZiAtLWdpdCBhL3NlcnZpY2VzL2F1ZGlvcG9saWN5L2NvbW1vbi9tYW5hZ2VyZGVmaW5pdGlvbnMvc3JjL0F1ZGlvT3V0cHV0RGVzY3JpcHRvci5jcHAgYi9zZXJ2aWNlcy9hdWRpb3BvbGljeS9jb21tb24vbWFuYWdlcmRlZmluaXRpb25zL3NyYy9BdWRpb091dHB1dERlc2NyaXB0b3IuY3BwCmluZGV4IDk5YjQ1YzguLjRjZTZiMDggMTAwNjQ0Ci0tLSBhL3NlcnZpY2VzL2F1ZGlvcG9saWN5L2NvbW1vbi9tYW5hZ2VyZGVmaW5pdGlvbnMvc3JjL0F1ZGlvT3V0cHV0RGVzY3JpcHRvci5jcHAKKysrIGIvc2VydmljZXMvYXVkaW9wb2xpY3kvY29tbW9uL21hbmFnZXJkZWZpbml0aW9ucy9zcmMvQXVkaW9PdXRwdXREZXNjcmlwdG9yLmNwcApAQCAtMzQsMTIgKzM0LDEyIEBACiAKIEF1ZGlvT3V0cHV0RGVzY3JpcHRvcjo6QXVkaW9PdXRwdXREZXNjcmlwdG9yKGNvbnN0IHNwPEF1ZGlvUG9ydD4mIHBvcnQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBdWRpb1BvbGljeUNsaWVudEludGVyZmFjZSAqY2xpZW50SW50ZXJmYWNlKQotICAgIDogbVBvcnQocG9ydCksIG1EZXZpY2UoQVVESU9fREVWSUNFX05PTkUpLAotICAgICAgbUNsaWVudEludGVyZmFjZShjbGllbnRJbnRlcmZhY2UpLCBtUGF0Y2hIYW5kbGUoQVVESU9fUEFUQ0hfSEFORExFX05PTkUpLCBtSWQoMCkKKyAgICA6IG1Qb3J0KHBvcnQpCisgICAgLCBtQ2xpZW50SW50ZXJmYWNlKGNsaWVudEludGVyZmFjZSkKIHsKICAgICAvLyBjbGVhciB1c2FnZSBjb3VudCBmb3IgYWxsIHN0cmVhbSB0eXBlcwogICAgIGZvciAoaW50IGkgPSAwOyBpIDwgQVVESU9fU1RSRUFNX0NOVDsgaSsrKSB7Ci0gICAgICAgIG1SZWZDb3VudFtpXSA9IDA7CisgICAgICAgIG1BY3RpdmVDb3VudFtpXSA9IDA7CiAgICAgICAgIG1DdXJWb2x1bWVbaV0gPSAtMS4wOwogICAgICAgICBtTXV0ZUNvdW50W2ldID0gMDsKICAgICAgICAgbVN0b3BUaW1lW2ldID0gMDsKQEAgLTU1LDExICs1NSwyOCBAQAogICAgIH0KIH0KIAorYXVkaW9fY29uZmlnX2Jhc2VfdCBBdWRpb091dHB1dERlc2NyaXB0b3I6OmdldENvbmZpZygpIGNvbnN0Cit7CisgICAgY29uc3QgYXVkaW9fY29uZmlnX2Jhc2VfdCBjb25maWcgPSB7IC5zYW1wbGVfcmF0ZSA9IG1TYW1wbGluZ1JhdGUsIC5jaGFubmVsX21hc2sgPSBtQ2hhbm5lbE1hc2ssCisgICAgICAgICAgICAuZm9ybWF0ID0gbUZvcm1hdCB9OworICAgIHJldHVybiBjb25maWc7Cit9CisKIGF1ZGlvX21vZHVsZV9oYW5kbGVfdCBBdWRpb091dHB1dERlc2NyaXB0b3I6OmdldE1vZHVsZUhhbmRsZSgpIGNvbnN0CiB7CiAgICAgcmV0dXJuIG1Qb3J0LmdldCgpICE9IG51bGxwdHIgPyBtUG9ydC0+Z2V0TW9kdWxlSGFuZGxlKCkgOiBBVURJT19NT0RVTEVfSEFORExFX05PTkU7CiB9CiAKK2F1ZGlvX3BhdGNoX2hhbmRsZV90IEF1ZGlvT3V0cHV0RGVzY3JpcHRvcjo6Z2V0UGF0Y2hIYW5kbGUoKSBjb25zdAoreworICAgIHJldHVybiBtUGF0Y2hIYW5kbGU7Cit9CisKK3ZvaWQgQXVkaW9PdXRwdXREZXNjcmlwdG9yOjpzZXRQYXRjaEhhbmRsZShhdWRpb19wYXRjaF9oYW5kbGVfdCBoYW5kbGUpCit7CisgICAgbVBhdGNoSGFuZGxlID0gaGFuZGxlOworfQorCiBhdWRpb19wb3J0X2hhbmRsZV90IEF1ZGlvT3V0cHV0RGVzY3JpcHRvcjo6Z2V0SWQoKSBjb25zdAogewogICAgIHJldHVybiBtSWQ7CkBAIC04NiwxNyArMTAzLDc4IEBACiAgICAgfQogfQogCi12b2lkIEF1ZGlvT3V0cHV0RGVzY3JpcHRvcjo6Y2hhbmdlUmVmQ291bnQoYXVkaW9fc3RyZWFtX3R5cGVfdCBzdHJlYW0sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGRlbHRhKQordm9pZCBBdWRpb091dHB1dERlc2NyaXB0b3I6OmNoYW5nZVN0cmVhbUFjdGl2ZUNvdW50KGNvbnN0IHNwPFRyYWNrQ2xpZW50RGVzY3JpcHRvcj4mIGNsaWVudCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgZGVsdGEpCiB7Ci0gICAgaWYgKChkZWx0YSArIChpbnQpbVJlZkNvdW50W3N0cmVhbV0pIDwgMCkgewotICAgICAgICBBTE9HVygiY2hhbmdlUmVmQ291bnQoKSBpbnZhbGlkIGRlbHRhICVkIGZvciBzdHJlYW0gJWQsIHJlZkNvdW50ICVkIiwKLSAgICAgICAgICAgICAgZGVsdGEsIHN0cmVhbSwgbVJlZkNvdW50W3N0cmVhbV0pOwotICAgICAgICBtUmVmQ291bnRbc3RyZWFtXSA9IDA7CisgICAgaWYgKGRlbHRhID09IDApIHJldHVybjsKKyAgICBjb25zdCBhdWRpb19zdHJlYW1fdHlwZV90IHN0cmVhbSA9IGNsaWVudC0+c3RyZWFtKCk7CisgICAgaWYgKChkZWx0YSArIChpbnQpbUFjdGl2ZUNvdW50W3N0cmVhbV0pIDwgMCkgeworICAgICAgICAvLyBhbnkgbWlzbWF0Y2hlZCBhY3RpdmUgY291bnQgd2lsbCBhYm9ydC4KKyAgICAgICAgTE9HX0FMV0FZU19GQVRBTCgiJXMoJXMpIGludmFsaWQgZGVsdGEgJWQsIGFjdGl2ZSBzdHJlYW0gY291bnQgJWQiLAorICAgICAgICAgICAgICBfX2Z1bmNfXywgY2xpZW50LT50b1Nob3J0U3RyaW5nKCkuY19zdHIoKSwgZGVsdGEsIG1BY3RpdmVDb3VudFtzdHJlYW1dKTsKKyAgICAgICAgLy8gbUFjdGl2ZUNvdW50W3N0cmVhbV0gPSAwOworICAgICAgICAvLyByZXR1cm47CisgICAgfQorICAgIG1BY3RpdmVDb3VudFtzdHJlYW1dICs9IGRlbHRhOworCisgICAgaWYgKGRlbHRhID4gMCkgeworICAgICAgICBtQWN0aXZlQ2xpZW50c1tjbGllbnRdICs9IGRlbHRhOworICAgIH0gZWxzZSB7CisgICAgICAgIGF1dG8gaXQgPSBtQWN0aXZlQ2xpZW50cy5maW5kKGNsaWVudCk7CisgICAgICAgIGlmIChpdCA9PSBtQWN0aXZlQ2xpZW50cy5lbmQoKSkgeyAvLyBjbGllbnQgbm90IGZvdW5kIQorICAgICAgICAgICAgTE9HX0FMV0FZU19GQVRBTCgiJXMoJXMpIGludmFsaWQgZGVsdGEgJWQsIGluYWN0aXZlIGNsaWVudCIsCisgICAgICAgICAgICAgICAgICAgIF9fZnVuY19fLCBjbGllbnQtPnRvU2hvcnRTdHJpbmcoKS5jX3N0cigpLCBkZWx0YSk7CisgICAgICAgIH0gZWxzZSBpZiAoaXQtPnNlY29uZCA8IC1kZWx0YSkgeyAvLyBpbnZhbGlkIGRlbHRhIQorICAgICAgICAgICAgTE9HX0FMV0FZU19GQVRBTCgiJXMoJXMpIGludmFsaWQgZGVsdGEgJWQsIGFjdGl2ZSBjbGllbnQgY291bnQgJXp1IiwKKyAgICAgICAgICAgICAgICAgICAgX19mdW5jX18sIGNsaWVudC0+dG9TaG9ydFN0cmluZygpLmNfc3RyKCksIGRlbHRhLCBpdC0+c2Vjb25kKTsKKyAgICAgICAgfQorICAgICAgICBpdC0+c2Vjb25kICs9IGRlbHRhOworICAgICAgICBpZiAoaXQtPnNlY29uZCA9PSAwKSB7CisgICAgICAgICAgICAodm9pZCltQWN0aXZlQ2xpZW50cy5lcmFzZShpdCk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBBTE9HVigiJXMgc3RyZWFtICVkLCBjb3VudCAlZCIsIF9fRlVOQ1RJT05fXywgc3RyZWFtLCBtQWN0aXZlQ291bnRbc3RyZWFtXSk7Cit9CisKK3ZvaWQgQXVkaW9PdXRwdXREZXNjcmlwdG9yOjpzZXRDbGllbnRBY3RpdmUoY29uc3Qgc3A8VHJhY2tDbGllbnREZXNjcmlwdG9yPiYgY2xpZW50LCBib29sIGFjdGl2ZSkKK3sKKyAgICBMT0dfQUxXQVlTX0ZBVEFMX0lGKGdldENsaWVudChjbGllbnQtPnBvcnRJZCgpKSA9PSBudWxscHRyLAorICAgICAgICAiJXMoJWQpIGRvZXMgbm90IGV4aXN0IG9uIG91dHB1dCBkZXNjcmlwdG9yIiwgX19mdW5jX18sIGNsaWVudC0+cG9ydElkKCkpOworCisgICAgaWYgKGFjdGl2ZSA9PSBjbGllbnQtPmFjdGl2ZSgpKSB7CisgICAgICAgIEFMT0dXKCIlcyglcyk6IGlnbm9yZWQgYWN0aXZlOiAlZCwgY3VycmVudCBzdHJlYW0gY291bnQgJWQiLAorICAgICAgICAgICAgICAgIF9fZnVuY19fLCBjbGllbnQtPnRvU2hvcnRTdHJpbmcoKS5jX3N0cigpLAorICAgICAgICAgICAgICAgIGFjdGl2ZSwgbUFjdGl2ZUNvdW50W2NsaWVudC0+c3RyZWFtKCldKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KLSAgICBtUmVmQ291bnRbc3RyZWFtXSArPSBkZWx0YTsKLSAgICBBTE9HVigiY2hhbmdlUmVmQ291bnQoKSBzdHJlYW0gJWQsIGNvdW50ICVkIiwgc3RyZWFtLCBtUmVmQ291bnRbc3RyZWFtXSk7CisgICAgY29uc3QgaW50IGRlbHRhID0gYWN0aXZlID8gMSA6IC0xOworICAgIGNoYW5nZVN0cmVhbUFjdGl2ZUNvdW50KGNsaWVudCwgZGVsdGEpOworCisgICAgLy8gSGFuZGxlIG5vbi1jbGllbnQtc3BlY2lmaWMgYWN0aXZpdHkgcmVmIGNvdW50CisgICAgaW50MzJfdCBvbGRHbG9iYWxBY3RpdmVDb3VudCA9IG1HbG9iYWxBY3RpdmVDb3VudDsKKyAgICBpZiAoIWFjdGl2ZSAmJiBtR2xvYmFsQWN0aXZlQ291bnQgPCAxKSB7CisgICAgICAgIEFMT0dXKCIlcyglcyk6IGludmFsaWQgZGVhY3RpdmF0aW9uIHdpdGggZ2xvYmFsUmVmQ291bnQgJWQiLAorICAgICAgICAgICAgICAgIF9fZnVuY19fLCBjbGllbnQtPnRvU2hvcnRTdHJpbmcoKS5jX3N0cigpLCBtR2xvYmFsQWN0aXZlQ291bnQpOworICAgICAgICBtR2xvYmFsQWN0aXZlQ291bnQgPSAxOworICAgIH0KKyAgICBtR2xvYmFsQWN0aXZlQ291bnQgKz0gZGVsdGE7CisKKyAgICBpZiAoKG9sZEdsb2JhbEFjdGl2ZUNvdW50ID09IDApICYmIChtR2xvYmFsQWN0aXZlQ291bnQgPiAwKSkgeworICAgICAgICBpZiAoKG1Qb2xpY3lNaXggIT0gTlVMTCkgJiYgKChtUG9saWN5TWl4LT5tQ2JGbGFncyAmIEF1ZGlvTWl4OjprQ2JGbGFnTm90aWZ5QWN0aXZpdHkpICE9IDApKQorICAgICAgICB7CisgICAgICAgICAgICBtQ2xpZW50SW50ZXJmYWNlLT5vbkR5bmFtaWNQb2xpY3lNaXhTdGF0ZVVwZGF0ZShtUG9saWN5TWl4LT5tRGV2aWNlQWRkcmVzcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1JWF9TVEFURV9NSVhJTkcpOworICAgICAgICB9CisgICAgfSBlbHNlIGlmICgob2xkR2xvYmFsQWN0aXZlQ291bnQgPiAwKSAmJiAobUdsb2JhbEFjdGl2ZUNvdW50ID09IDApKSB7CisgICAgICAgIGlmICgobVBvbGljeU1peCAhPSBOVUxMKSAmJiAoKG1Qb2xpY3lNaXgtPm1DYkZsYWdzICYgQXVkaW9NaXg6OmtDYkZsYWdOb3RpZnlBY3Rpdml0eSkgIT0gMCkpCisgICAgICAgIHsKKyAgICAgICAgICAgIG1DbGllbnRJbnRlcmZhY2UtPm9uRHluYW1pY1BvbGljeU1peFN0YXRlVXBkYXRlKG1Qb2xpY3lNaXgtPm1EZXZpY2VBZGRyZXNzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTUlYX1NUQVRFX0lETEUpOworICAgICAgICB9CisgICAgfQorCisgICAgY2xpZW50LT5zZXRBY3RpdmUoYWN0aXZlKTsKIH0KIAogYm9vbCBBdWRpb091dHB1dERlc2NyaXB0b3I6OmlzQWN0aXZlKHVpbnQzMl90IGluUGFzdE1zKSBjb25zdApAQCAtMTIwLDcgKzE5OCw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3QgaW5QYXN0TXMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnNlY3NfdCBzeXNUaW1lKSBjb25zdAogewotICAgIGlmIChtUmVmQ291bnRbc3RyZWFtXSAhPSAwKSB7CisgICAgaWYgKG1BY3RpdmVDb3VudFtzdHJlYW1dICE9IDApIHsKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogICAgIGlmIChpblBhc3RNcyA9PSAwKSB7CkBAIC0xODQsMzIgKzI2Miw0NSBAQAogICAgIHBvcnQtPmV4dC5taXguaHdfbW9kdWxlID0gZ2V0TW9kdWxlSGFuZGxlKCk7CiB9CiAKLXN0YXR1c190IEF1ZGlvT3V0cHV0RGVzY3JpcHRvcjo6ZHVtcChpbnQgZmQpCitUcmFja0NsaWVudFZlY3RvciBBdWRpb091dHB1dERlc2NyaXB0b3I6OmNsaWVudHNMaXN0KGJvb2wgYWN0aXZlT25seSwgcm91dGluZ19zdHJhdGVneSBzdHJhdGVneSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBwcmVmZXJyZWREZXZpY2VPbmx5KSBjb25zdAogewotICAgIGNvbnN0IHNpemVfdCBTSVpFID0gMjU2OwotICAgIGNoYXIgYnVmZmVyW1NJWkVdOwotICAgIFN0cmluZzggcmVzdWx0OwotCi0gICAgc25wcmludGYoYnVmZmVyLCBTSVpFLCAiIElEOiAlZFxuIiwgbUlkKTsKLSAgICByZXN1bHQuYXBwZW5kKGJ1ZmZlcik7Ci0gICAgc25wcmludGYoYnVmZmVyLCBTSVpFLCAiIFNhbXBsaW5nIHJhdGU6ICVkXG4iLCBtU2FtcGxpbmdSYXRlKTsKLSAgICByZXN1bHQuYXBwZW5kKGJ1ZmZlcik7Ci0gICAgc25wcmludGYoYnVmZmVyLCBTSVpFLCAiIEZvcm1hdDogJTA4eFxuIiwgbUZvcm1hdCk7Ci0gICAgcmVzdWx0LmFwcGVuZChidWZmZXIpOwotICAgIHNucHJpbnRmKGJ1ZmZlciwgU0laRSwgIiBDaGFubmVsczogJTA4eFxuIiwgbUNoYW5uZWxNYXNrKTsKLSAgICByZXN1bHQuYXBwZW5kKGJ1ZmZlcik7Ci0gICAgc25wcmludGYoYnVmZmVyLCBTSVpFLCAiIERldmljZXMgJTA4eFxuIiwgZGV2aWNlKCkpOwotICAgIHJlc3VsdC5hcHBlbmQoYnVmZmVyKTsKLSAgICBzbnByaW50ZihidWZmZXIsIFNJWkUsICIgU3RyZWFtIHZvbHVtZSByZWZDb3VudCBtdXRlQ291bnRcbiIpOwotICAgIHJlc3VsdC5hcHBlbmQoYnVmZmVyKTsKLSAgICBmb3IgKGludCBpID0gMDsgaSA8IChpbnQpQVVESU9fU1RSRUFNX0NOVDsgaSsrKSB7Ci0gICAgICAgIHNucHJpbnRmKGJ1ZmZlciwgU0laRSwgIiAlMDJkICAgICAlLjAzZiAgICAgJTAyZCAgICAgICAlMDJkXG4iLAotICAgICAgICAgICAgICAgICBpLCBtQ3VyVm9sdW1lW2ldLCBtUmVmQ291bnRbaV0sIG1NdXRlQ291bnRbaV0pOwotICAgICAgICByZXN1bHQuYXBwZW5kKGJ1ZmZlcik7CisgICAgVHJhY2tDbGllbnRWZWN0b3IgY2xpZW50czsKKyAgICBmb3IgKGNvbnN0IGF1dG8gJmNsaWVudCA6IGdldENsaWVudEl0ZXJhYmxlKCkpIHsKKyAgICAgICAgaWYgKCghYWN0aXZlT25seSB8fCBjbGllbnQtPmFjdGl2ZSgpKQorICAgICAgICAgICAgJiYgKHN0cmF0ZWd5ID09IFNUUkFURUdZX05PTkUgfHwgc3RyYXRlZ3kgPT0gY2xpZW50LT5zdHJhdGVneSgpKQorICAgICAgICAgICAgJiYgKCFwcmVmZXJyZWREZXZpY2VPbmx5IHx8IGNsaWVudC0+aGFzUHJlZmVycmVkRGV2aWNlKCkpKSB7CisgICAgICAgICAgICBjbGllbnRzLnB1c2hfYmFjayhjbGllbnQpOworICAgICAgICB9CiAgICAgfQotICAgIHdyaXRlKGZkLCByZXN1bHQuc3RyaW5nKCksIHJlc3VsdC5zaXplKCkpOworICAgIHJldHVybiBjbGllbnRzOworfQogCi0gICAgcmV0dXJuIE5PX0VSUk9SOwordm9pZCBBdWRpb091dHB1dERlc2NyaXB0b3I6OmR1bXAoU3RyaW5nOCAqZHN0KSBjb25zdAoreworICAgIGRzdC0+YXBwZW5kRm9ybWF0KCIgSUQ6ICVkXG4iLCBtSWQpOworICAgIGRzdC0+YXBwZW5kRm9ybWF0KCIgU2FtcGxpbmcgcmF0ZTogJWRcbiIsIG1TYW1wbGluZ1JhdGUpOworICAgIGRzdC0+YXBwZW5kRm9ybWF0KCIgRm9ybWF0OiAlMDh4XG4iLCBtRm9ybWF0KTsKKyAgICBkc3QtPmFwcGVuZEZvcm1hdCgiIENoYW5uZWxzOiAlMDh4XG4iLCBtQ2hhbm5lbE1hc2spOworICAgIGRzdC0+YXBwZW5kRm9ybWF0KCIgRGV2aWNlczogJTA4eFxuIiwgZGV2aWNlKCkpOworICAgIGRzdC0+YXBwZW5kRm9ybWF0KCIgR2xvYmFsIGFjdGl2ZSBjb3VudDogJXVcbiIsIG1HbG9iYWxBY3RpdmVDb3VudCk7CisgICAgZHN0LT5hcHBlbmQoIiBTdHJlYW0gdm9sdW1lIGFjdGl2ZUNvdW50IG11dGVDb3VudFxuIik7CisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCAoaW50KUFVRElPX1NUUkVBTV9DTlQ7IGkrKykgeworICAgICAgICBkc3QtPmFwcGVuZEZvcm1hdCgiICUwMmQgICAgICUuMDNmICAgICAlMDJkICAgICAgICAgICUwMmRcbiIsCisgICAgICAgICAgICAgICAgIGksIG1DdXJWb2x1bWVbaV0sIHN0cmVhbUFjdGl2ZUNvdW50KChhdWRpb19zdHJlYW1fdHlwZV90KWkpLCBtTXV0ZUNvdW50W2ldKTsKKyAgICB9CisgICAgZHN0LT5hcHBlbmQoIiBBdWRpb1RyYWNrIENsaWVudHM6XG4iKTsKKyAgICBDbGllbnRNYXBIYW5kbGVyPFRyYWNrQ2xpZW50RGVzY3JpcHRvcj46OmR1bXAoZHN0KTsKKyAgICBkc3QtPmFwcGVuZCgiXG4iKTsKKyAgICBpZiAobUFjdGl2ZUNsaWVudHMuc2l6ZSgpID4gMCkgeworICAgICAgICBkc3QtPmFwcGVuZCgiIEF1ZGlvVHJhY2sgYWN0aXZlIChzdHJlYW0pIGNsaWVudHM6XG4iKTsKKyAgICAgICAgc2l6ZV90IGluZGV4ID0gMDsKKyAgICAgICAgZm9yIChjb25zdCBhdXRvJiBjbGllbnRQYWlyIDogbUFjdGl2ZUNsaWVudHMpIHsKKyAgICAgICAgICAgIGRzdC0+YXBwZW5kRm9ybWF0KCIgUmVmY291bnQ6ICV6dSIsIGNsaWVudFBhaXIuc2Vjb25kKTsKKyAgICAgICAgICAgIGNsaWVudFBhaXIuZmlyc3QtPmR1bXAoZHN0LCAyLCBpbmRleCsrKTsKKyAgICAgICAgfQorICAgICAgICBkc3QtPmFwcGVuZCgiIFxuIik7CisgICAgfQogfQogCiB2b2lkIEF1ZGlvT3V0cHV0RGVzY3JpcHRvcjo6bG9nKGNvbnN0IGNoYXIqIGluZGVudCkKQEAgLTIyMywzMCArMzE0LDIwIEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQXVkaW9Qb2xpY3lDbGllbnRJbnRlcmZhY2UgKmNsaWVudEludGVyZmFjZSkKICAgICA6IEF1ZGlvT3V0cHV0RGVzY3JpcHRvcihwcm9maWxlLCBjbGllbnRJbnRlcmZhY2UpLAogICAgIG1Qcm9maWxlKHByb2ZpbGUpLCBtSW9IYW5kbGUoQVVESU9fSU9fSEFORExFX05PTkUpLCBtTGF0ZW5jeSgwKSwKLSAgICBtRmxhZ3MoKGF1ZGlvX291dHB1dF9mbGFnc190KTApLCBtUG9saWN5TWl4KE5VTEwpLAorICAgIG1GbGFncygoYXVkaW9fb3V0cHV0X2ZsYWdzX3QpMCksCiAgICAgbU91dHB1dDEoMCksIG1PdXRwdXQyKDApLCBtRGlyZWN0T3BlbkNvdW50KDApLAotICAgIG1EaXJlY3RDbGllbnRTZXNzaW9uKEFVRElPX1NFU1NJT05fTk9ORSksIG1HbG9iYWxSZWZDb3VudCgwKQorICAgIG1EaXJlY3RDbGllbnRTZXNzaW9uKEFVRElPX1NFU1NJT05fTk9ORSkKIHsKICAgICBpZiAocHJvZmlsZSAhPSBOVUxMKSB7CiAgICAgICAgIG1GbGFncyA9IChhdWRpb19vdXRwdXRfZmxhZ3NfdClwcm9maWxlLT5nZXRGbGFncygpOwogICAgIH0KIH0KIAotc3RhdHVzX3QgU3dBdWRpb091dHB1dERlc2NyaXB0b3I6OmR1bXAoaW50IGZkKQordm9pZCBTd0F1ZGlvT3V0cHV0RGVzY3JpcHRvcjo6ZHVtcChTdHJpbmc4ICpkc3QpIGNvbnN0CiB7Ci0gICAgY29uc3Qgc2l6ZV90IFNJWkUgPSAyNTY7Ci0gICAgY2hhciBidWZmZXJbU0laRV07Ci0gICAgU3RyaW5nOCByZXN1bHQ7Ci0KLSAgICBzbnByaW50ZihidWZmZXIsIFNJWkUsICIgTGF0ZW5jeTogJWRcbiIsIG1MYXRlbmN5KTsKLSAgICByZXN1bHQuYXBwZW5kKGJ1ZmZlcik7Ci0gICAgc25wcmludGYoYnVmZmVyLCBTSVpFLCAiIEZsYWdzICUwOHhcbiIsIG1GbGFncyk7Ci0gICAgcmVzdWx0LmFwcGVuZChidWZmZXIpOwotICAgIHdyaXRlKGZkLCByZXN1bHQuc3RyaW5nKCksIHJlc3VsdC5zaXplKCkpOwotCi0gICAgQXVkaW9PdXRwdXREZXNjcmlwdG9yOjpkdW1wKGZkKTsKLQotICAgIHJldHVybiBOT19FUlJPUjsKKyAgICBkc3QtPmFwcGVuZEZvcm1hdCgiIExhdGVuY3k6ICVkXG4iLCBtTGF0ZW5jeSk7CisgICAgZHN0LT5hcHBlbmRGb3JtYXQoIiBGbGFncyAlMDh4XG4iLCBtRmxhZ3MpOworICAgIEF1ZGlvT3V0cHV0RGVzY3JpcHRvcjo6ZHVtcChkc3QpOwogfQogCiBhdWRpb19kZXZpY2VzX3QgU3dBdWRpb091dHB1dERlc2NyaXB0b3I6OmRldmljZSgpIGNvbnN0CkBAIC0yODksNDEgKzM3MCwxNyBAQAogICAgIH0KIH0KIAotdm9pZCBTd0F1ZGlvT3V0cHV0RGVzY3JpcHRvcjo6Y2hhbmdlUmVmQ291bnQoYXVkaW9fc3RyZWFtX3R5cGVfdCBzdHJlYW0sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGRlbHRhKQordm9pZCBTd0F1ZGlvT3V0cHV0RGVzY3JpcHRvcjo6Y2hhbmdlU3RyZWFtQWN0aXZlQ291bnQoY29uc3Qgc3A8VHJhY2tDbGllbnREZXNjcmlwdG9yPiYgY2xpZW50LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBkZWx0YSkKIHsKICAgICAvLyBmb3J3YXJkIHVzYWdlIGNvdW50IGNoYW5nZSB0byBhdHRhY2hlZCBvdXRwdXRzCiAgICAgaWYgKGlzRHVwbGljYXRlZCgpKSB7Ci0gICAgICAgIG1PdXRwdXQxLT5jaGFuZ2VSZWZDb3VudChzdHJlYW0sIGRlbHRhKTsKLSAgICAgICAgbU91dHB1dDItPmNoYW5nZVJlZkNvdW50KHN0cmVhbSwgZGVsdGEpOworICAgICAgICBtT3V0cHV0MS0+Y2hhbmdlU3RyZWFtQWN0aXZlQ291bnQoY2xpZW50LCBkZWx0YSk7CisgICAgICAgIG1PdXRwdXQyLT5jaGFuZ2VTdHJlYW1BY3RpdmVDb3VudChjbGllbnQsIGRlbHRhKTsKICAgICB9Ci0gICAgQXVkaW9PdXRwdXREZXNjcmlwdG9yOjpjaGFuZ2VSZWZDb3VudChzdHJlYW0sIGRlbHRhKTsKLQotICAgIC8vIGhhbmRsZSBzdHJlYW0taW5kZXBlbmRlbnQgcmVmIGNvdW50Ci0gICAgdWludDMyX3Qgb2xkR2xvYmFsUmVmQ291bnQgPSBtR2xvYmFsUmVmQ291bnQ7Ci0gICAgaWYgKChkZWx0YSArIChpbnQpbUdsb2JhbFJlZkNvdW50KSA8IDApIHsKLSAgICAgICAgQUxPR1coImNoYW5nZVJlZkNvdW50KCkgaW52YWxpZCBkZWx0YSAlZCBnbG9iYWxSZWZDb3VudCAlZCIsIGRlbHRhLCBtR2xvYmFsUmVmQ291bnQpOwotICAgICAgICBtR2xvYmFsUmVmQ291bnQgPSAwOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIG1HbG9iYWxSZWZDb3VudCArPSBkZWx0YTsKLSAgICB9Ci0gICAgaWYgKChvbGRHbG9iYWxSZWZDb3VudCA9PSAwKSAmJiAobUdsb2JhbFJlZkNvdW50ID4gMCkpIHsKLSAgICAgICAgaWYgKChtUG9saWN5TWl4ICE9IE5VTEwpICYmICgobVBvbGljeU1peC0+bUNiRmxhZ3MgJiBBdWRpb01peDo6a0NiRmxhZ05vdGlmeUFjdGl2aXR5KSAhPSAwKSkKLSAgICAgICAgewotICAgICAgICAgICAgbUNsaWVudEludGVyZmFjZS0+b25EeW5hbWljUG9saWN5TWl4U3RhdGVVcGRhdGUobVBvbGljeU1peC0+bURldmljZUFkZHJlc3MsCi0gICAgICAgICAgICAgICAgICAgIE1JWF9TVEFURV9NSVhJTkcpOwotICAgICAgICB9Ci0KLSAgICB9IGVsc2UgaWYgKChvbGRHbG9iYWxSZWZDb3VudCA+IDApICYmIChtR2xvYmFsUmVmQ291bnQgPT0gMCkpIHsKLSAgICAgICAgaWYgKChtUG9saWN5TWl4ICE9IE5VTEwpICYmICgobVBvbGljeU1peC0+bUNiRmxhZ3MgJiBBdWRpb01peDo6a0NiRmxhZ05vdGlmeUFjdGl2aXR5KSAhPSAwKSkKLSAgICAgICAgewotICAgICAgICAgICAgbUNsaWVudEludGVyZmFjZS0+b25EeW5hbWljUG9saWN5TWl4U3RhdGVVcGRhdGUobVBvbGljeU1peC0+bURldmljZUFkZHJlc3MsCi0gICAgICAgICAgICAgICAgICAgIE1JWF9TVEFURV9JRExFKTsKLSAgICAgICAgfQotICAgIH0KKyAgICBBdWRpb091dHB1dERlc2NyaXB0b3I6OmNoYW5nZVN0cmVhbUFjdGl2ZUNvdW50KGNsaWVudCwgZGVsdGEpOwogfQogCi0KIGJvb2wgU3dBdWRpb091dHB1dERlc2NyaXB0b3I6OmlzRml4ZWRWb2x1bWUoYXVkaW9fZGV2aWNlc190IGRldmljZSkKIHsKICAgICAvLyB1bml0IGdhaW4gaWYgcmVyb3V0aW5nIHRvIGV4dGVybmFsIHBvbGljeQpAQCAtNDk5LDcgKzU1Niw3IEBACiAKICAgICAgICAgTE9HX0FMV0FZU19GQVRBTF9JRihtUHJvZmlsZS0+Y3VyT3BlbkNvdW50IDwgMSwgIiVzIHByb2ZpbGUgb3BlbiBjb3VudCAldSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19GVU5DVElPTl9fLCBtUHJvZmlsZS0+Y3VyT3BlbkNvdW50KTsKLSAgICAgICAgLy8gZG8gbm90IGNhbGwgc3RvcCgpIGhlcmUgYXMgc3RvcCgpIGlzIHN1cHBvc2VkIHRvIGJlIGNhbGxlZCBhZnRlciBjaGFuZ2VSZWZDb3VudCgtMSkKKyAgICAgICAgLy8gZG8gbm90IGNhbGwgc3RvcCgpIGhlcmUgYXMgc3RvcCgpIGlzIHN1cHBvc2VkIHRvIGJlIGNhbGxlZCBhZnRlciBzZXRDbGllbnRBY3RpdmUoZmFsc2UpCiAgICAgICAgIC8vIGFuZCB3ZSBkb24ndCBrbm93IGhvdyBtYW55IHN0cmVhbXMgYXJlIHN0aWxsIGFjdGl2ZSBhdCB0aGlzIHRpbWUKICAgICAgICAgaWYgKGlzQWN0aXZlKCkpIHsKICAgICAgICAgICAgIG1Qcm9maWxlLT5jdXJBY3RpdmVDb3VudC0tOwpAQCAtNTM0LDI3ICs1OTEsMTggQEAKIH0KIAogLy8gSHdBdWRpb091dHB1dERlc2NyaXB0b3IgaW1wbGVtZW50YXRpb24KLUh3QXVkaW9PdXRwdXREZXNjcmlwdG9yOjpId0F1ZGlvT3V0cHV0RGVzY3JpcHRvcihjb25zdCBzcDxBdWRpb1NvdXJjZURlc2NyaXB0b3I+JiBzb3VyY2UsCitId0F1ZGlvT3V0cHV0RGVzY3JpcHRvcjo6SHdBdWRpb091dHB1dERlc2NyaXB0b3IoY29uc3Qgc3A8U291cmNlQ2xpZW50RGVzY3JpcHRvcj4mIHNvdXJjZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBdWRpb1BvbGljeUNsaWVudEludGVyZmFjZSAqY2xpZW50SW50ZXJmYWNlKQotICAgIDogQXVkaW9PdXRwdXREZXNjcmlwdG9yKHNvdXJjZS0+bURldmljZSwgY2xpZW50SW50ZXJmYWNlKSwKKyAgICA6IEF1ZGlvT3V0cHV0RGVzY3JpcHRvcihzb3VyY2UtPnNyY0RldmljZSgpLCBjbGllbnRJbnRlcmZhY2UpLAogICAgICAgbVNvdXJjZShzb3VyY2UpCiB7CiB9CiAKLXN0YXR1c190IEh3QXVkaW9PdXRwdXREZXNjcmlwdG9yOjpkdW1wKGludCBmZCkKK3ZvaWQgSHdBdWRpb091dHB1dERlc2NyaXB0b3I6OmR1bXAoU3RyaW5nOCAqZHN0KSBjb25zdAogewotICAgIGNvbnN0IHNpemVfdCBTSVpFID0gMjU2OwotICAgIGNoYXIgYnVmZmVyW1NJWkVdOwotICAgIFN0cmluZzggcmVzdWx0OwotCi0gICAgQXVkaW9PdXRwdXREZXNjcmlwdG9yOjpkdW1wKGZkKTsKLQotICAgIHNucHJpbnRmKGJ1ZmZlciwgU0laRSwgIlNvdXJjZTpcbiIpOwotICAgIHJlc3VsdC5hcHBlbmQoYnVmZmVyKTsKLSAgICB3cml0ZShmZCwgcmVzdWx0LnN0cmluZygpLCByZXN1bHQuc2l6ZSgpKTsKLSAgICBtU291cmNlLT5kdW1wKGZkKTsKLQotICAgIHJldHVybiBOT19FUlJPUjsKKyAgICBBdWRpb091dHB1dERlc2NyaXB0b3I6OmR1bXAoZHN0KTsKKyAgICBkc3QtPmFwcGVuZCgiU291cmNlOlxuIik7CisgICAgbVNvdXJjZS0+ZHVtcChkc3QsIDAsIDApOwogfQogCiBhdWRpb19kZXZpY2VzX3QgSHdBdWRpb091dHB1dERlc2NyaXB0b3I6OnN1cHBvcnRlZERldmljZXMoKQpAQCAtNTY2LDEzICs2MTQsMTMgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgYXVkaW9fcG9ydF9jb25maWcgKmRzdENvbmZpZywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdHJ1Y3QgYXVkaW9fcG9ydF9jb25maWcgKnNyY0NvbmZpZykgY29uc3QKIHsKLSAgICBtU291cmNlLT5tRGV2aWNlLT50b0F1ZGlvUG9ydENvbmZpZyhkc3RDb25maWcsIHNyY0NvbmZpZyk7CisgICAgbVNvdXJjZS0+c3JjRGV2aWNlKCktPnRvQXVkaW9Qb3J0Q29uZmlnKGRzdENvbmZpZywgc3JjQ29uZmlnKTsKIH0KIAogdm9pZCBId0F1ZGlvT3V0cHV0RGVzY3JpcHRvcjo6dG9BdWRpb1BvcnQoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGF1ZGlvX3BvcnQgKnBvcnQpIGNvbnN0CiB7Ci0gICAgbVNvdXJjZS0+bURldmljZS0+dG9BdWRpb1BvcnQocG9ydCk7CisgICAgbVNvdXJjZS0+c3JjRGV2aWNlKCktPnRvQXVkaW9Qb3J0KHBvcnQpOwogfQogCiAKQEAgLTY5OCw3ICs3NDYsNyBAQAogICAgICAgICB9CiAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgc2l6ZSgpOyBpKyspIHsKICAgICAgICAgICAgIGNvbnN0IHNwPFN3QXVkaW9PdXRwdXREZXNjcmlwdG9yPiBvdXRwdXREZXNjID0gdmFsdWVBdChpKTsKLSAgICAgICAgICAgIGlmIChvdXRwdXREZXNjLT5tUmVmQ291bnRbc10gIT0gMCkgeworICAgICAgICAgICAgaWYgKG91dHB1dERlc2MtPnN0cmVhbUFjdGl2ZUNvdW50KChhdWRpb19zdHJlYW1fdHlwZV90KXMpIT0gMCkgewogICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICAgICAgfQogICAgICAgICB9CkBAIC03MTMsMjEgKzc2MSwyNCBAQAogICAgIHJldHVybiBkZXZpY2VzOwogfQogCi0KLXN0YXR1c190IFN3QXVkaW9PdXRwdXRDb2xsZWN0aW9uOjpkdW1wKGludCBmZCkgY29uc3QKK3NwPFN3QXVkaW9PdXRwdXREZXNjcmlwdG9yPiBTd0F1ZGlvT3V0cHV0Q29sbGVjdGlvbjo6Z2V0T3V0cHV0Rm9yQ2xpZW50KGF1ZGlvX3BvcnRfaGFuZGxlX3QgcG9ydElkKQogewotICAgIGNvbnN0IHNpemVfdCBTSVpFID0gMjU2OwotICAgIGNoYXIgYnVmZmVyW1NJWkVdOwotCi0gICAgc25wcmludGYoYnVmZmVyLCBTSVpFLCAiXG5PdXRwdXRzIGR1bXA6XG4iKTsKLSAgICB3cml0ZShmZCwgYnVmZmVyLCBzdHJsZW4oYnVmZmVyKSk7CiAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBzaXplKCk7IGkrKykgewotICAgICAgICBzbnByaW50ZihidWZmZXIsIFNJWkUsICItIE91dHB1dCAlZCBkdW1wOlxuIiwga2V5QXQoaSkpOwotICAgICAgICB3cml0ZShmZCwgYnVmZmVyLCBzdHJsZW4oYnVmZmVyKSk7Ci0gICAgICAgIHZhbHVlQXQoaSktPmR1bXAoZmQpOworICAgICAgICBzcDxTd0F1ZGlvT3V0cHV0RGVzY3JpcHRvcj4gb3V0cHV0RGVzYyA9IHZhbHVlQXQoaSk7CisgICAgICAgIGlmIChvdXRwdXREZXNjLT5nZXRDbGllbnQocG9ydElkKSAhPSBudWxscHRyKSB7CisgICAgICAgICAgICByZXR1cm4gb3V0cHV0RGVzYzsKKyAgICAgICAgfQogICAgIH0KKyAgICByZXR1cm4gMDsKK30KIAotICAgIHJldHVybiBOT19FUlJPUjsKK3ZvaWQgU3dBdWRpb091dHB1dENvbGxlY3Rpb246OmR1bXAoU3RyaW5nOCAqZHN0KSBjb25zdAoreworICAgIGRzdC0+YXBwZW5kKCJcbk91dHB1dHMgZHVtcDpcbiIpOworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgc2l6ZSgpOyBpKyspIHsKKyAgICAgICAgZHN0LT5hcHBlbmRGb3JtYXQoIi0gT3V0cHV0ICVkIGR1bXA6XG4iLCBrZXlBdChpKSk7CisgICAgICAgIHZhbHVlQXQoaSktPmR1bXAoZHN0KTsKKyAgICB9CiB9CiAKIC8vIEh3QXVkaW9PdXRwdXRDb2xsZWN0aW9uIGltcGxlbWVudGF0aW9uCkBAIC03NTEsNyArODAyLDcgQEAKICAgICAgICAgfQogICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHNpemUoKTsgaSsrKSB7CiAgICAgICAgICAgICBjb25zdCBzcDxId0F1ZGlvT3V0cHV0RGVzY3JpcHRvcj4gb3V0cHV0RGVzYyA9IHZhbHVlQXQoaSk7Ci0gICAgICAgICAgICBpZiAob3V0cHV0RGVzYy0+bVJlZkNvdW50W3NdICE9IDApIHsKKyAgICAgICAgICAgIGlmIChvdXRwdXREZXNjLT5zdHJlYW1BY3RpdmVDb3VudCgoYXVkaW9fc3RyZWFtX3R5cGVfdClzKSAhPSAwKSB7CiAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KQEAgLTc1OSwyMCArODEwLDEzIEBACiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi1zdGF0dXNfdCBId0F1ZGlvT3V0cHV0Q29sbGVjdGlvbjo6ZHVtcChpbnQgZmQpIGNvbnN0Cit2b2lkIEh3QXVkaW9PdXRwdXRDb2xsZWN0aW9uOjpkdW1wKFN0cmluZzggKmRzdCkgY29uc3QKIHsKLSAgICBjb25zdCBzaXplX3QgU0laRSA9IDI1NjsKLSAgICBjaGFyIGJ1ZmZlcltTSVpFXTsKLQotICAgIHNucHJpbnRmKGJ1ZmZlciwgU0laRSwgIlxuT3V0cHV0cyBkdW1wOlxuIik7Ci0gICAgd3JpdGUoZmQsIGJ1ZmZlciwgc3RybGVuKGJ1ZmZlcikpOworICAgIGRzdC0+YXBwZW5kKCJcbk91dHB1dHMgZHVtcDpcbiIpOwogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgc2l6ZSgpOyBpKyspIHsKLSAgICAgICAgc25wcmludGYoYnVmZmVyLCBTSVpFLCAiLSBPdXRwdXQgJWQgZHVtcDpcbiIsIGtleUF0KGkpKTsKLSAgICAgICAgd3JpdGUoZmQsIGJ1ZmZlciwgc3RybGVuKGJ1ZmZlcikpOwotICAgICAgICB2YWx1ZUF0KGkpLT5kdW1wKGZkKTsKKyAgICAgICAgZHN0LT5hcHBlbmRGb3JtYXQoIi0gT3V0cHV0ICVkIGR1bXA6XG4iLCBrZXlBdChpKSk7CisgICAgICAgIHZhbHVlQXQoaSktPmR1bXAoZHN0KTsKICAgICB9Ci0KLSAgICByZXR1cm4gTk9fRVJST1I7CiB9CiAKIH07IC8vbmFtZXNwYWNlIGFuZHJvaWQKZGlmZiAtLWdpdCBhL3NlcnZpY2VzL2F1ZGlvcG9saWN5L2NvbW1vbi9tYW5hZ2VyZGVmaW5pdGlvbnMvc3JjL0F1ZGlvUGF0Y2guY3BwIGIvc2VydmljZXMvYXVkaW9wb2xpY3kvY29tbW9uL21hbmFnZXJkZWZpbml0aW9ucy9zcmMvQXVkaW9QYXRjaC5jcHAKaW5kZXggYTlmZTQ4ZC4uY2QxYzJmMiAxMDA2NDQKLS0tIGEvc2VydmljZXMvYXVkaW9wb2xpY3kvY29tbW9uL21hbmFnZXJkZWZpbml0aW9ucy9zcmMvQXVkaW9QYXRjaC5jcHAKKysrIGIvc2VydmljZXMvYXVkaW9wb2xpY3kvY29tbW9uL21hbmFnZXJkZWZpbml0aW9ucy9zcmMvQXVkaW9QYXRjaC5jcHAKQEAgLTM0LDUzICszNCwyOSBAQAogewogfQogCi1zdGF0dXNfdCBBdWRpb1BhdGNoOjpkdW1wKGludCBmZCwgaW50IHNwYWNlcywgaW50IGluZGV4KSBjb25zdAorc3RhdGljIHZvaWQgZHVtcFBhdGNoRW5kcG9pbnRzKAorICAgICAgICBTdHJpbmc4ICpkc3QsIGludCBzcGFjZXMsIGNvbnN0IGNoYXIgKnByZWZpeCwgaW50IGNvdW50LCBjb25zdCBhdWRpb19wb3J0X2NvbmZpZyAqY2ZncykKIHsKLSAgICBjb25zdCBzaXplX3QgU0laRSA9IDI1NjsKLSAgICBjaGFyIGJ1ZmZlcltTSVpFXTsKLSAgICBTdHJpbmc4IHJlc3VsdDsKLQotICAgIHNucHJpbnRmKGJ1ZmZlciwgU0laRSwgIiUqc0F1ZGlvIHBhdGNoICVkOlxuIiwgc3BhY2VzLCAiIiwgaW5kZXgrMSk7Ci0gICAgcmVzdWx0LmFwcGVuZChidWZmZXIpOwotICAgIHNucHJpbnRmKGJ1ZmZlciwgU0laRSwgIiUqcy0gaGFuZGxlOiAlMmRcbiIsIHNwYWNlcywgIiIsIG1IYW5kbGUpOwotICAgIHJlc3VsdC5hcHBlbmQoYnVmZmVyKTsKLSAgICBzbnByaW50ZihidWZmZXIsIFNJWkUsICIlKnMtIGF1ZGlvIGZsaW5nZXIgaGFuZGxlOiAlMmRcbiIsIHNwYWNlcywgIiIsIG1BZlBhdGNoSGFuZGxlKTsKLSAgICByZXN1bHQuYXBwZW5kKGJ1ZmZlcik7Ci0gICAgc25wcmludGYoYnVmZmVyLCBTSVpFLCAiJSpzLSBvd25lciB1aWQ6ICUyZFxuIiwgc3BhY2VzLCAiIiwgbVVpZCk7Ci0gICAgcmVzdWx0LmFwcGVuZChidWZmZXIpOwotICAgIHNucHJpbnRmKGJ1ZmZlciwgU0laRSwgIiUqcy0gJWQgc291cmNlczpcbiIsIHNwYWNlcywgIiIsIG1QYXRjaC5udW1fc291cmNlcyk7Ci0gICAgcmVzdWx0LmFwcGVuZChidWZmZXIpOwotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbVBhdGNoLm51bV9zb3VyY2VzOyBpKyspIHsKLSAgICAgICAgaWYgKG1QYXRjaC5zb3VyY2VzW2ldLnR5cGUgPT0gQVVESU9fUE9SVF9UWVBFX0RFVklDRSkgeworICAgIGZvciAoaW50IGkgPSAwOyBpIDwgY291bnQ7ICsraSkgeworICAgICAgICBjb25zdCBhdWRpb19wb3J0X2NvbmZpZyAmY2ZnID0gY2Znc1tpXTsKKyAgICAgICAgZHN0LT5hcHBlbmRGb3JtYXQoIiUqcyAgWyVzICVkXSAiLCBzcGFjZXMsICIiLCBwcmVmaXgsIGkgKyAxKTsKKyAgICAgICAgaWYgKGNmZy50eXBlID09IEFVRElPX1BPUlRfVFlQRV9ERVZJQ0UpIHsKICAgICAgICAgICAgIHN0ZDo6c3RyaW5nIGRldmljZTsKLSAgICAgICAgICAgIGRldmljZVRvU3RyaW5nKG1QYXRjaC5zb3VyY2VzW2ldLmV4dC5kZXZpY2UudHlwZSwgZGV2aWNlKTsKLSAgICAgICAgICAgIHNucHJpbnRmKGJ1ZmZlciwgU0laRSwgIiUqcy0gRGV2aWNlIElEICVkICVzXG4iLCBzcGFjZXMgKyAyLCAiIiwKLSAgICAgICAgICAgICAgICAgICAgIG1QYXRjaC5zb3VyY2VzW2ldLmlkLAotICAgICAgICAgICAgICAgICAgICAgZGV2aWNlLmNfc3RyKCkpOworICAgICAgICAgICAgZGV2aWNlVG9TdHJpbmcoY2ZnLmV4dC5kZXZpY2UudHlwZSwgZGV2aWNlKTsKKyAgICAgICAgICAgIGRzdC0+YXBwZW5kRm9ybWF0KCJEZXZpY2UgSUQgJWQgJXMiLCBjZmcuaWQsIGRldmljZS5jX3N0cigpKTsKICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIHNucHJpbnRmKGJ1ZmZlciwgU0laRSwgIiUqcy0gTWl4IElEICVkIEkvTyBoYW5kbGUgJWRcbiIsIHNwYWNlcyArIDIsICIiLAotICAgICAgICAgICAgICAgICAgICAgbVBhdGNoLnNvdXJjZXNbaV0uaWQsIG1QYXRjaC5zb3VyY2VzW2ldLmV4dC5taXguaGFuZGxlKTsKKyAgICAgICAgICAgIGRzdC0+YXBwZW5kRm9ybWF0KCJNaXggSUQgJWQgSS9PIGhhbmRsZSAlZCIsIGNmZy5pZCwgY2ZnLmV4dC5taXguaGFuZGxlKTsKICAgICAgICAgfQotICAgICAgICByZXN1bHQuYXBwZW5kKGJ1ZmZlcik7CisgICAgICAgIGRzdC0+YXBwZW5kKCJcbiIpOwogICAgIH0KLSAgICBzbnByaW50ZihidWZmZXIsIFNJWkUsICIlKnMtICVkIHNpbmtzOlxuIiwgc3BhY2VzLCAiIiwgbVBhdGNoLm51bV9zaW5rcyk7Ci0gICAgcmVzdWx0LmFwcGVuZChidWZmZXIpOwotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbVBhdGNoLm51bV9zaW5rczsgaSsrKSB7Ci0gICAgICAgIGlmIChtUGF0Y2guc2lua3NbaV0udHlwZSA9PSBBVURJT19QT1JUX1RZUEVfREVWSUNFKSB7Ci0gICAgICAgICAgICBzdGQ6OnN0cmluZyBkZXZpY2U7Ci0gICAgICAgICAgICBkZXZpY2VUb1N0cmluZyhtUGF0Y2guc2lua3NbaV0uZXh0LmRldmljZS50eXBlLCBkZXZpY2UpOwotICAgICAgICAgICAgc25wcmludGYoYnVmZmVyLCBTSVpFLCAiJSpzLSBEZXZpY2UgSUQgJWQgJXNcbiIsIHNwYWNlcyArIDIsICIiLAotICAgICAgICAgICAgICAgICAgICAgbVBhdGNoLnNpbmtzW2ldLmlkLAotICAgICAgICAgICAgICAgICAgICAgZGV2aWNlLmNfc3RyKCkpOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgc25wcmludGYoYnVmZmVyLCBTSVpFLCAiJSpzLSBNaXggSUQgJWQgSS9PIGhhbmRsZSAlZFxuIiwgc3BhY2VzICsgMiwgIiIsCi0gICAgICAgICAgICAgICAgICAgICBtUGF0Y2guc2lua3NbaV0uaWQsIG1QYXRjaC5zaW5rc1tpXS5leHQubWl4LmhhbmRsZSk7Ci0gICAgICAgIH0KLSAgICAgICAgcmVzdWx0LmFwcGVuZChidWZmZXIpOwotICAgIH0KK30KIAotICAgIHdyaXRlKGZkLCByZXN1bHQuc3RyaW5nKCksIHJlc3VsdC5zaXplKCkpOwotICAgIHJldHVybiBOT19FUlJPUjsKK3ZvaWQgQXVkaW9QYXRjaDo6ZHVtcChTdHJpbmc4ICpkc3QsIGludCBzcGFjZXMsIGludCBpbmRleCkgY29uc3QKK3sKKyAgICBkc3QtPmFwcGVuZEZvcm1hdCgiJSpzUGF0Y2ggJWQ6IG93bmVyIHVpZCAlNGQsIGhhbmRsZSAlMmQsIGFmIGhhbmRsZSAlMmRcbiIsCisgICAgICAgICAgICBzcGFjZXMsICIiLCBpbmRleCArIDEsIG1VaWQsIG1IYW5kbGUsIG1BZlBhdGNoSGFuZGxlKTsKKyAgICBkdW1wUGF0Y2hFbmRwb2ludHMoZHN0LCBzcGFjZXMsICJzcmMgIiwgbVBhdGNoLm51bV9zb3VyY2VzLCBtUGF0Y2guc291cmNlcyk7CisgICAgZHVtcFBhdGNoRW5kcG9pbnRzKGRzdCwgc3BhY2VzLCAic2luayIsIG1QYXRjaC5udW1fc2lua3MsIG1QYXRjaC5zaW5rcyk7CiB9CiAKIHN0YXR1c190IEF1ZGlvUGF0Y2hDb2xsZWN0aW9uOjphZGRBdWRpb1BhdGNoKGF1ZGlvX3BhdGNoX2hhbmRsZV90IGhhbmRsZSwKQEAgLTE2MSwxNiArMTM3LDEyIEBACiAgICAgcmV0dXJuIE5PX0VSUk9SOwogfQogCi1zdGF0dXNfdCBBdWRpb1BhdGNoQ29sbGVjdGlvbjo6ZHVtcChpbnQgZmQpIGNvbnN0Cit2b2lkIEF1ZGlvUGF0Y2hDb2xsZWN0aW9uOjpkdW1wKFN0cmluZzggKmRzdCkgY29uc3QKIHsKLSAgICBjb25zdCBzaXplX3QgU0laRSA9IDI1NjsKLSAgICBjaGFyIGJ1ZmZlcltTSVpFXTsKLSAgICBzbnByaW50ZihidWZmZXIsIFNJWkUsICJcbkF1ZGlvIFBhdGNoZXM6XG4iKTsKLSAgICB3cml0ZShmZCwgYnVmZmVyLCBzdHJsZW4oYnVmZmVyKSk7CisgICAgZHN0LT5hcHBlbmQoIlxuQXVkaW8gUGF0Y2hlczpcbiIpOwogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgc2l6ZSgpOyBpKyspIHsKLSAgICAgICAgdmFsdWVBdChpKS0+ZHVtcChmZCwgMiwgaSk7CisgICAgICAgIHZhbHVlQXQoaSktPmR1bXAoZHN0LCAyLCBpKTsKICAgICB9Ci0gICAgcmV0dXJuIE5PX0VSUk9SOwogfQogCiB9IC8vIG5hbWVzcGFjZSBhbmRyb2lkCmRpZmYgLS1naXQgYS9zZXJ2aWNlcy9hdWRpb3BvbGljeS9jb21tb24vbWFuYWdlcmRlZmluaXRpb25zL3NyYy9BdWRpb1BvbGljeU1peC5jcHAgYi9zZXJ2aWNlcy9hdWRpb3BvbGljeS9jb21tb24vbWFuYWdlcmRlZmluaXRpb25zL3NyYy9BdWRpb1BvbGljeU1peC5jcHAKaW5kZXggMDg5MzBmMS4uM2NmODAxNCAxMDA2NDQKLS0tIGEvc2VydmljZXMvYXVkaW9wb2xpY3kvY29tbW9uL21hbmFnZXJkZWZpbml0aW9ucy9zcmMvQXVkaW9Qb2xpY3lNaXguY3BwCisrKyBiL3NlcnZpY2VzL2F1ZGlvcG9saWN5L2NvbW1vbi9tYW5hZ2VyZGVmaW5pdGlvbnMvc3JjL0F1ZGlvUG9saWN5TWl4LmNwcApAQCAtNTIsNjQgKzUyLDU1IEBACiAgICAgcmV0dXJuICZtTWl4OwogfQogCi1zdGF0dXNfdCBBdWRpb1BvbGljeU1peDo6ZHVtcChpbnQgZmQsIGludCBzcGFjZXMsIGludCBpbmRleCkgY29uc3QKK3ZvaWQgQXVkaW9Qb2xpY3lNaXg6OmR1bXAoU3RyaW5nOCAqZHN0LCBpbnQgc3BhY2VzLCBpbnQgaW5kZXgpIGNvbnN0CiB7Ci0gICAgY29uc3Qgc2l6ZV90IFNJWkUgPSAyNTY7Ci0gICAgY2hhciBidWZmZXJbU0laRV07Ci0gICAgU3RyaW5nOCByZXN1bHQ7Ci0KLSAgICBzbnByaW50ZihidWZmZXIsIFNJWkUsICIlKnNBdWRpbyBQb2xpY3kgTWl4ICVkOlxuIiwgc3BhY2VzLCAiIiwgaW5kZXgrMSk7Ci0gICAgcmVzdWx0LmFwcGVuZChidWZmZXIpOworICAgIGRzdC0+YXBwZW5kRm9ybWF0KCIlKnNBdWRpbyBQb2xpY3kgTWl4ICVkOlxuIiwgc3BhY2VzLCAiIiwgaW5kZXggKyAxKTsKICAgICBzdGQ6OnN0cmluZyBtaXhUeXBlTGl0ZXJhbDsKICAgICBpZiAoIU1peFR5cGVDb252ZXJ0ZXI6OnRvU3RyaW5nKG1NaXgubU1peFR5cGUsIG1peFR5cGVMaXRlcmFsKSkgewogICAgICAgICBBTE9HRSgiJXM6IGZhaWxlZCB0byBjb252ZXJ0IG1peCB0eXBlICVkIiwgX19GVU5DVElPTl9fLCBtTWl4Lm1NaXhUeXBlKTsKLSAgICAgICAgcmV0dXJuIEJBRF9WQUxVRTsKKyAgICAgICAgcmV0dXJuOwogICAgIH0KLSAgICBzbnByaW50ZihidWZmZXIsIFNJWkUsICIlKnMtIG1peCB0eXBlOiAlc1xuIiwgc3BhY2VzLCAiIiwgbWl4VHlwZUxpdGVyYWwuY19zdHIoKSk7Ci0gICAgcmVzdWx0LmFwcGVuZChidWZmZXIpOworICAgIGRzdC0+YXBwZW5kRm9ybWF0KCIlKnMtIG1peCB0eXBlOiAlc1xuIiwgc3BhY2VzLCAiIiwgbWl4VHlwZUxpdGVyYWwuY19zdHIoKSk7CisKICAgICBzdGQ6OnN0cmluZyByb3V0ZUZsYWdMaXRlcmFsOwogICAgIFJvdXRlRmxhZ1R5cGVDb252ZXJ0ZXI6Om1hc2tUb1N0cmluZyhtTWl4Lm1Sb3V0ZUZsYWdzLCByb3V0ZUZsYWdMaXRlcmFsKTsKLSAgICBzbnByaW50ZihidWZmZXIsIFNJWkUsICIlKnMtIFJvdXRlIEZsYWdzOiAlc1xuIiwgc3BhY2VzLCAiIiwgcm91dGVGbGFnTGl0ZXJhbC5jX3N0cigpKTsKLSAgICByZXN1bHQuYXBwZW5kKGJ1ZmZlcik7CisgICAgZHN0LT5hcHBlbmRGb3JtYXQoIiUqcy0gUm91dGUgRmxhZ3M6ICVzXG4iLCBzcGFjZXMsICIiLCByb3V0ZUZsYWdMaXRlcmFsLmNfc3RyKCkpOworCiAgICAgc3RkOjpzdHJpbmcgZGV2aWNlTGl0ZXJhbDsKICAgICBkZXZpY2VUb1N0cmluZyhtTWl4Lm1EZXZpY2VUeXBlLCBkZXZpY2VMaXRlcmFsKTsKLSAgICBzbnByaW50ZihidWZmZXIsIFNJWkUsICIlKnMtIGRldmljZSB0eXBlOiAlc1xuIiwgc3BhY2VzLCAiIiwgZGV2aWNlTGl0ZXJhbC5jX3N0cigpKTsKLSAgICByZXN1bHQuYXBwZW5kKGJ1ZmZlcik7Ci0gICAgc25wcmludGYoYnVmZmVyLCBTSVpFLCAiJSpzLSBkZXZpY2UgYWRkcmVzczogJXNcbiIsIHNwYWNlcywgIiIsIG1NaXgubURldmljZUFkZHJlc3Muc3RyaW5nKCkpOwotICAgIHJlc3VsdC5hcHBlbmQoYnVmZmVyKTsKKyAgICBkc3QtPmFwcGVuZEZvcm1hdCgiJSpzLSBkZXZpY2UgdHlwZTogJXNcbiIsIHNwYWNlcywgIiIsIGRldmljZUxpdGVyYWwuY19zdHIoKSk7CisKKyAgICBkc3QtPmFwcGVuZEZvcm1hdCgiJSpzLSBkZXZpY2UgYWRkcmVzczogJXNcbiIsIHNwYWNlcywgIiIsIG1NaXgubURldmljZUFkZHJlc3Muc3RyaW5nKCkpOwogCiAgICAgaW50IGluZGV4Q3JpdGVyaW9uID0gMDsKICAgICBmb3IgKGNvbnN0IGF1dG8gJmNyaXRlcmlvbiA6IG1NaXgubUNyaXRlcmlhKSB7Ci0gICAgICAgIHNucHJpbnRmKGJ1ZmZlciwgU0laRSwgIiUqcy0gQ3JpdGVyaW9uICVkOlxuIiwgc3BhY2VzICsgMiwgIiIsIGluZGV4Q3JpdGVyaW9uKyspOwotICAgICAgICByZXN1bHQuYXBwZW5kKGJ1ZmZlcik7CisgICAgICAgIGRzdC0+YXBwZW5kRm9ybWF0KCIlKnMtIENyaXRlcmlvbiAlZDpcbiIsIHNwYWNlcyArIDIsICIiLCBpbmRleENyaXRlcmlvbisrKTsKKwogICAgICAgICBzdGQ6OnN0cmluZyB1c2FnZUxpdGVyYWw7CiAgICAgICAgIGlmICghVXNhZ2VUeXBlQ29udmVydGVyOjp0b1N0cmluZyhjcml0ZXJpb24ubVZhbHVlLm1Vc2FnZSwgdXNhZ2VMaXRlcmFsKSkgewogICAgICAgICAgICAgQUxPR0UoIiVzOiBmYWlsZWQgdG8gY29udmVydCB1c2FnZSAlZCIsIF9fRlVOQ1RJT05fXywgY3JpdGVyaW9uLm1WYWx1ZS5tVXNhZ2UpOwotICAgICAgICAgICAgcmV0dXJuIEJBRF9WQUxVRTsKKyAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQotICAgICAgICBzbnByaW50ZihidWZmZXIsIFNJWkUsICIlKnMtIFVzYWdlOiVzXG4iLCBzcGFjZXMgKyA0LCAiIiwgdXNhZ2VMaXRlcmFsLmNfc3RyKCkpOwotICAgICAgICByZXN1bHQuYXBwZW5kKGJ1ZmZlcik7CisgICAgICAgIGRzdC0+YXBwZW5kRm9ybWF0KCIlKnMtIFVzYWdlOiVzXG4iLCBzcGFjZXMgKyA0LCAiIiwgdXNhZ2VMaXRlcmFsLmNfc3RyKCkpOworCiAgICAgICAgIGlmIChtTWl4Lm1NaXhUeXBlID09IE1JWF9UWVBFX1JFQ09SREVSUykgewogICAgICAgICAgICAgc3RkOjpzdHJpbmcgc291cmNlTGl0ZXJhbDsKICAgICAgICAgICAgIGlmICghU291cmNlVHlwZUNvbnZlcnRlcjo6dG9TdHJpbmcoY3JpdGVyaW9uLm1WYWx1ZS5tU291cmNlLCBzb3VyY2VMaXRlcmFsKSkgewogICAgICAgICAgICAgICAgIEFMT0dFKCIlczogZmFpbGVkIHRvIGNvbnZlcnQgc291cmNlICVkIiwgX19GVU5DVElPTl9fLCBjcml0ZXJpb24ubVZhbHVlLm1Tb3VyY2UpOwotICAgICAgICAgICAgICAgIHJldHVybiBCQURfVkFMVUU7CisgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgc25wcmludGYoYnVmZmVyLCBTSVpFLCAiJSpzLSBTb3VyY2U6JXNcbiIsIHNwYWNlcyArIDQsICIiLCBzb3VyY2VMaXRlcmFsLmNfc3RyKCkpOwotICAgICAgICAgICAgcmVzdWx0LmFwcGVuZChidWZmZXIpOworICAgICAgICAgICAgZHN0LT5hcHBlbmRGb3JtYXQoIiUqcy0gU291cmNlOiVzXG4iLCBzcGFjZXMgKyA0LCAiIiwgc291cmNlTGl0ZXJhbC5jX3N0cigpKTsKKwogICAgICAgICB9Ci0gICAgICAgIHNucHJpbnRmKGJ1ZmZlciwgU0laRSwgIiUqcy0gVWlkOiVkXG4iLCBzcGFjZXMgKyA0LCAiIiwgY3JpdGVyaW9uLm1WYWx1ZS5tVWlkKTsKLSAgICAgICAgcmVzdWx0LmFwcGVuZChidWZmZXIpOworICAgICAgICBkc3QtPmFwcGVuZEZvcm1hdCgiJSpzLSBVaWQ6JWRcbiIsIHNwYWNlcyArIDQsICIiLCBjcml0ZXJpb24ubVZhbHVlLm1VaWQpOworCiAgICAgICAgIHN0ZDo6c3RyaW5nIHJ1bGVMaXRlcmFsOwogICAgICAgICBpZiAoIVJ1bGVUeXBlQ29udmVydGVyOjp0b1N0cmluZyhjcml0ZXJpb24ubVJ1bGUsIHJ1bGVMaXRlcmFsKSkgewogICAgICAgICAgICAgQUxPR0UoIiVzOiBmYWlsZWQgdG8gY29udmVydCBzb3VyY2UgJWQiLCBfX0ZVTkNUSU9OX18sY3JpdGVyaW9uLm1SdWxlKTsKLSAgICAgICAgICAgIHJldHVybiBCQURfVkFMVUU7CisgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KLSAgICAgICAgc25wcmludGYoYnVmZmVyLCBTSVpFLCAiJSpzLSBSdWxlOiVzXG4iLCBzcGFjZXMgKyA0LCAiIiwgcnVsZUxpdGVyYWwuY19zdHIoKSk7Ci0gICAgICAgIHJlc3VsdC5hcHBlbmQoYnVmZmVyKTsKKyAgICAgICAgZHN0LT5hcHBlbmRGb3JtYXQoIiUqcy0gUnVsZTolc1xuIiwgc3BhY2VzICsgNCwgIiIsIHJ1bGVMaXRlcmFsLmNfc3RyKCkpOwogICAgIH0KLSAgICB3cml0ZShmZCwgcmVzdWx0LnN0cmluZygpLCByZXN1bHQuc2l6ZSgpKTsKLSAgICByZXR1cm4gTk9fRVJST1I7CiB9CiAKIHN0YXR1c190IEF1ZGlvUG9saWN5TWl4Q29sbGVjdGlvbjo6cmVnaXN0ZXJNaXgoY29uc3QgU3RyaW5nOCYgYWRkcmVzcywgQXVkaW9NaXggbWl4LApAQCAtMzQ5LDE0ICszNDAsMTIgQEAKICAgICByZXR1cm4gTk9fRVJST1I7CiB9CiAKLXN0YXR1c190IEF1ZGlvUG9saWN5TWl4Q29sbGVjdGlvbjo6ZHVtcChpbnQgZmQpIGNvbnN0Cit2b2lkIEF1ZGlvUG9saWN5TWl4Q29sbGVjdGlvbjo6ZHVtcChTdHJpbmc4ICpkc3QpIGNvbnN0CiB7Ci0gICAgc3RkOjpzdHJpbmcgbG9nKCJcbkF1ZGlvIFBvbGljeSBNaXg6XG4iKTsKLSAgICB3cml0ZShmZCwgbG9nLmNfc3RyKCksIGxvZy5zaXplKCkpOworICAgIGRzdC0+YXBwZW5kKCJcbkF1ZGlvIFBvbGljeSBNaXg6XG4iKTsKICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHNpemUoKTsgaSsrKSB7Ci0gICAgICAgIHZhbHVlQXQoaSktPmR1bXAoZmQsIDIsIGkpOworICAgICAgICB2YWx1ZUF0KGkpLT5kdW1wKGRzdCwgMiwgaSk7CiAgICAgfQotICAgIHJldHVybiBOT19FUlJPUjsKIH0KIAogfTsgLy9uYW1lc3BhY2UgYW5kcm9pZApkaWZmIC0tZ2l0IGEvc2VydmljZXMvYXVkaW9wb2xpY3kvY29tbW9uL21hbmFnZXJkZWZpbml0aW9ucy9zcmMvQXVkaW9Qb3J0LmNwcCBiL3NlcnZpY2VzL2F1ZGlvcG9saWN5L2NvbW1vbi9tYW5hZ2VyZGVmaW5pdGlvbnMvc3JjL0F1ZGlvUG9ydC5jcHAKaW5kZXggZDg1NTYyZS4uMTlkZGU2YSAxMDA2NDQKLS0tIGEvc2VydmljZXMvYXVkaW9wb2xpY3kvY29tbW9uL21hbmFnZXJkZWZpbml0aW9ucy9zcmMvQXVkaW9Qb3J0LmNwcAorKysgYi9zZXJ2aWNlcy9hdWRpb3BvbGljeS9jb21tb24vbWFuYWdlcmRlZmluaXRpb25zL3NyYy9BdWRpb1BvcnQuY3BwCkBAIC0zNTQsMjYgKzM1NCwxOCBAQAogICAgIHJldHVybiBtR2FpbnNbaW5kZXhdLT5jaGVja0NvbmZpZyhnYWluQ29uZmlnKTsKIH0KIAotdm9pZCBBdWRpb1BvcnQ6OmR1bXAoaW50IGZkLCBpbnQgc3BhY2VzLCBib29sIHZlcmJvc2UpIGNvbnN0Cit2b2lkIEF1ZGlvUG9ydDo6ZHVtcChTdHJpbmc4ICpkc3QsIGludCBzcGFjZXMsIGJvb2wgdmVyYm9zZSkgY29uc3QKIHsKLSAgICBjb25zdCBzaXplX3QgU0laRSA9IDI1NjsKLSAgICBjaGFyIGJ1ZmZlcltTSVpFXTsKLSAgICBTdHJpbmc4IHJlc3VsdDsKLQogICAgIGlmICghbU5hbWUuaXNFbXB0eSgpKSB7Ci0gICAgICAgIHNucHJpbnRmKGJ1ZmZlciwgU0laRSwgIiUqcy0gbmFtZTogJXNcbiIsIHNwYWNlcywgIiIsIG1OYW1lLnN0cmluZygpKTsKLSAgICAgICAgcmVzdWx0LmFwcGVuZChidWZmZXIpOwotICAgICAgICB3cml0ZShmZCwgcmVzdWx0LnN0cmluZygpLCByZXN1bHQuc2l6ZSgpKTsKKyAgICAgICAgZHN0LT5hcHBlbmRGb3JtYXQoIiUqcy0gbmFtZTogJXNcbiIsIHNwYWNlcywgIiIsIG1OYW1lLnN0cmluZygpKTsKICAgICB9CiAgICAgaWYgKHZlcmJvc2UpIHsKLSAgICAgICAgbVByb2ZpbGVzLmR1bXAoZmQsIHNwYWNlcyk7CisgICAgICAgIG1Qcm9maWxlcy5kdW1wKGRzdCwgc3BhY2VzKTsKIAogICAgICAgICBpZiAobUdhaW5zLnNpemUoKSAhPSAwKSB7Ci0gICAgICAgICAgICBzbnByaW50ZihidWZmZXIsIFNJWkUsICIlKnMtIGdhaW5zOlxuIiwgc3BhY2VzLCAiIik7Ci0gICAgICAgICAgICByZXN1bHQgPSBidWZmZXI7Ci0gICAgICAgICAgICB3cml0ZShmZCwgcmVzdWx0LnN0cmluZygpLCByZXN1bHQuc2l6ZSgpKTsKKyAgICAgICAgICAgIGRzdC0+YXBwZW5kRm9ybWF0KCIlKnMtIGdhaW5zOlxuIiwgc3BhY2VzLCAiIik7CiAgICAgICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1HYWlucy5zaXplKCk7IGkrKykgewotICAgICAgICAgICAgICAgIG1HYWluc1tpXS0+ZHVtcChmZCwgc3BhY2VzICsgMiwgaSk7CisgICAgICAgICAgICAgICAgbUdhaW5zW2ldLT5kdW1wKGRzdCwgc3BhY2VzICsgMiwgaSk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICB9CkBAIC0zODYsMjIgKzM3OCwxMiBAQAogCiAvLyAtLS0gQXVkaW9Qb3J0Q29uZmlnIGNsYXNzIGltcGxlbWVudGF0aW9uCiAKLUF1ZGlvUG9ydENvbmZpZzo6QXVkaW9Qb3J0Q29uZmlnKCkKLXsKLSAgICBtU2FtcGxpbmdSYXRlID0gMDsKLSAgICBtQ2hhbm5lbE1hc2sgPSBBVURJT19DSEFOTkVMX05PTkU7Ci0gICAgbUZvcm1hdCA9IEFVRElPX0ZPUk1BVF9JTlZBTElEOwotICAgIG1lbXNldCgmbUdhaW4sIDAsIHNpemVvZihzdHJ1Y3QgYXVkaW9fZ2Fpbl9jb25maWcpKTsKLSAgICBtR2Fpbi5pbmRleCA9IC0xOwotfQotCiBzdGF0dXNfdCBBdWRpb1BvcnRDb25maWc6OmFwcGx5QXVkaW9Qb3J0Q29uZmlnKGNvbnN0IHN0cnVjdCBhdWRpb19wb3J0X2NvbmZpZyAqY29uZmlnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgYXVkaW9fcG9ydF9jb25maWcgKmJhY2t1cENvbmZpZykKIHsKLSAgICBzdHJ1Y3QgYXVkaW9fcG9ydF9jb25maWcgbG9jYWxCYWNrdXBDb25maWc7CisgICAgc3RydWN0IGF1ZGlvX3BvcnRfY29uZmlnIGxvY2FsQmFja3VwQ29uZmlnID0geyAuY29uZmlnX21hc2sgPSBjb25maWctPmNvbmZpZ19tYXNrIH07CiAgICAgc3RhdHVzX3Qgc3RhdHVzID0gTk9fRVJST1I7CiAKLSAgICBsb2NhbEJhY2t1cENvbmZpZy5jb25maWdfbWFzayA9IGNvbmZpZy0+Y29uZmlnX21hc2s7CiAgICAgdG9BdWRpb1BvcnRDb25maWcoJmxvY2FsQmFja3VwQ29uZmlnKTsKIAogICAgIHNwPEF1ZGlvUG9ydD4gYXVkaW9wb3J0ID0gZ2V0QXVkaW9Qb3J0KCk7CkBAIC00MjUsNiArNDA3LDkgQEAKICAgICBpZiAoY29uZmlnLT5jb25maWdfbWFzayAmIEFVRElPX1BPUlRfQ09ORklHX0dBSU4pIHsKICAgICAgICAgbUdhaW4gPSBjb25maWctPmdhaW47CiAgICAgfQorICAgIGlmIChjb25maWctPmNvbmZpZ19tYXNrICYgQVVESU9fUE9SVF9DT05GSUdfRkxBR1MpIHsKKyAgICAgICAgbUZsYWdzID0gY29uZmlnLT5mbGFnczsKKyAgICB9CiAKIGV4aXQ6CiAgICAgaWYgKHN0YXR1cyAhPSBOT19FUlJPUikgewpAQCAtNDM2LDMzICs0MjEsMzggQEAKICAgICByZXR1cm4gc3RhdHVzOwogfQogCituYW1lc3BhY2UgeworCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPgordm9pZCB1cGRhdGVGaWVsZCgKKyAgICAgICAgY29uc3QgVCYgcG9ydENvbmZpZ0ZpZWxkLCBUIGF1ZGlvX3BvcnRfY29uZmlnOjoqcG9ydF9jb25maWdfZmllbGQsCisgICAgICAgIHN0cnVjdCBhdWRpb19wb3J0X2NvbmZpZyAqZHN0Q29uZmlnLCBjb25zdCBzdHJ1Y3QgYXVkaW9fcG9ydF9jb25maWcgKnNyY0NvbmZpZywKKyAgICAgICAgdW5zaWduZWQgaW50IGNvbmZpZ01hc2ssIFQgZGVmYXVsdFZhbHVlKQoreworICAgIGlmIChkc3RDb25maWctPmNvbmZpZ19tYXNrICYgY29uZmlnTWFzaykgeworICAgICAgICBpZiAoKHNyY0NvbmZpZyAhPSBudWxscHRyKSAmJiAoc3JjQ29uZmlnLT5jb25maWdfbWFzayAmIGNvbmZpZ01hc2spKSB7CisgICAgICAgICAgICBkc3RDb25maWctPipwb3J0X2NvbmZpZ19maWVsZCA9IHNyY0NvbmZpZy0+KnBvcnRfY29uZmlnX2ZpZWxkOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgZHN0Q29uZmlnLT4qcG9ydF9jb25maWdfZmllbGQgPSBwb3J0Q29uZmlnRmllbGQ7CisgICAgICAgIH0KKyAgICB9IGVsc2UgeworICAgICAgICBkc3RDb25maWctPipwb3J0X2NvbmZpZ19maWVsZCA9IGRlZmF1bHRWYWx1ZTsKKyAgICB9Cit9CisKK30gLy8gbmFtZXNwYWNlCisKIHZvaWQgQXVkaW9Qb3J0Q29uZmlnOjp0b0F1ZGlvUG9ydENvbmZpZyhzdHJ1Y3QgYXVkaW9fcG9ydF9jb25maWcgKmRzdENvbmZpZywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdHJ1Y3QgYXVkaW9fcG9ydF9jb25maWcgKnNyY0NvbmZpZykgY29uc3QKIHsKLSAgICBpZiAoZHN0Q29uZmlnLT5jb25maWdfbWFzayAmIEFVRElPX1BPUlRfQ09ORklHX1NBTVBMRV9SQVRFKSB7Ci0gICAgICAgIGRzdENvbmZpZy0+c2FtcGxlX3JhdGUgPSBtU2FtcGxpbmdSYXRlOwotICAgICAgICBpZiAoKHNyY0NvbmZpZyAhPSBOVUxMKSAmJiAoc3JjQ29uZmlnLT5jb25maWdfbWFzayAmIEFVRElPX1BPUlRfQ09ORklHX1NBTVBMRV9SQVRFKSkgewotICAgICAgICAgICAgZHN0Q29uZmlnLT5zYW1wbGVfcmF0ZSA9IHNyY0NvbmZpZy0+c2FtcGxlX3JhdGU7Ci0gICAgICAgIH0KLSAgICB9IGVsc2UgewotICAgICAgICBkc3RDb25maWctPnNhbXBsZV9yYXRlID0gMDsKLSAgICB9Ci0gICAgaWYgKGRzdENvbmZpZy0+Y29uZmlnX21hc2sgJiBBVURJT19QT1JUX0NPTkZJR19DSEFOTkVMX01BU0spIHsKLSAgICAgICAgZHN0Q29uZmlnLT5jaGFubmVsX21hc2sgPSBtQ2hhbm5lbE1hc2s7Ci0gICAgICAgIGlmICgoc3JjQ29uZmlnICE9IE5VTEwpICYmIChzcmNDb25maWctPmNvbmZpZ19tYXNrICYgQVVESU9fUE9SVF9DT05GSUdfQ0hBTk5FTF9NQVNLKSkgewotICAgICAgICAgICAgZHN0Q29uZmlnLT5jaGFubmVsX21hc2sgPSBzcmNDb25maWctPmNoYW5uZWxfbWFzazsKLSAgICAgICAgfQotICAgIH0gZWxzZSB7Ci0gICAgICAgIGRzdENvbmZpZy0+Y2hhbm5lbF9tYXNrID0gQVVESU9fQ0hBTk5FTF9OT05FOwotICAgIH0KLSAgICBpZiAoZHN0Q29uZmlnLT5jb25maWdfbWFzayAmIEFVRElPX1BPUlRfQ09ORklHX0ZPUk1BVCkgewotICAgICAgICBkc3RDb25maWctPmZvcm1hdCA9IG1Gb3JtYXQ7Ci0gICAgICAgIGlmICgoc3JjQ29uZmlnICE9IE5VTEwpICYmIChzcmNDb25maWctPmNvbmZpZ19tYXNrICYgQVVESU9fUE9SVF9DT05GSUdfRk9STUFUKSkgewotICAgICAgICAgICAgZHN0Q29uZmlnLT5mb3JtYXQgPSBzcmNDb25maWctPmZvcm1hdDsKLSAgICAgICAgfQotICAgIH0gZWxzZSB7Ci0gICAgICAgIGRzdENvbmZpZy0+Zm9ybWF0ID0gQVVESU9fRk9STUFUX0lOVkFMSUQ7Ci0gICAgfQorICAgIHVwZGF0ZUZpZWxkKG1TYW1wbGluZ1JhdGUsICZhdWRpb19wb3J0X2NvbmZpZzo6c2FtcGxlX3JhdGUsCisgICAgICAgICAgICBkc3RDb25maWcsIHNyY0NvbmZpZywgQVVESU9fUE9SVF9DT05GSUdfU0FNUExFX1JBVEUsIDB1KTsKKyAgICB1cGRhdGVGaWVsZChtQ2hhbm5lbE1hc2ssICZhdWRpb19wb3J0X2NvbmZpZzo6Y2hhbm5lbF9tYXNrLAorICAgICAgICAgICAgZHN0Q29uZmlnLCBzcmNDb25maWcsIEFVRElPX1BPUlRfQ09ORklHX0NIQU5ORUxfTUFTSywKKyAgICAgICAgICAgIChhdWRpb19jaGFubmVsX21hc2tfdClBVURJT19DSEFOTkVMX05PTkUpOworICAgIHVwZGF0ZUZpZWxkKG1Gb3JtYXQsICZhdWRpb19wb3J0X2NvbmZpZzo6Zm9ybWF0LAorICAgICAgICAgICAgZHN0Q29uZmlnLCBzcmNDb25maWcsIEFVRElPX1BPUlRfQ09ORklHX0ZPUk1BVCwgQVVESU9fRk9STUFUX0lOVkFMSUQpOworCiAgICAgc3A8QXVkaW9Qb3J0PiBhdWRpb3BvcnQgPSBnZXRBdWRpb1BvcnQoKTsKICAgICBpZiAoKGRzdENvbmZpZy0+Y29uZmlnX21hc2sgJiBBVURJT19QT1JUX0NPTkZJR19HQUlOKSAmJiBhdWRpb3BvcnQgIT0gTlVMTCkgewogICAgICAgICBkc3RDb25maWctPmdhaW4gPSBtR2FpbjsKQEAgLTQ3OCw2ICs0NjgsOSBAQAogICAgIH0gZWxzZSB7CiAgICAgICAgIGRzdENvbmZpZy0+Y29uZmlnX21hc2sgJj0gfkFVRElPX1BPUlRfQ09ORklHX0dBSU47CiAgICAgfQorCisgICAgdXBkYXRlRmllbGQobUZsYWdzLCAmYXVkaW9fcG9ydF9jb25maWc6OmZsYWdzLAorICAgICAgICAgICAgZHN0Q29uZmlnLCBzcmNDb25maWcsIEFVRElPX1BPUlRfQ09ORklHX0ZMQUdTLCB7IEFVRElPX0lOUFVUX0ZMQUdfTk9ORSB9KTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgYW5kcm9pZApkaWZmIC0tZ2l0IGEvc2VydmljZXMvYXVkaW9wb2xpY3kvY29tbW9uL21hbmFnZXJkZWZpbml0aW9ucy9zcmMvQXVkaW9Qcm9maWxlLmNwcCBiL3NlcnZpY2VzL2F1ZGlvcG9saWN5L2NvbW1vbi9tYW5hZ2VyZGVmaW5pdGlvbnMvc3JjL0F1ZGlvUHJvZmlsZS5jcHAKaW5kZXggZmQ2ZmMxYy4uYTY0NWUwMiAxMDA2NDQKLS0tIGEvc2VydmljZXMvYXVkaW9wb2xpY3kvY29tbW9uL21hbmFnZXJkZWZpbml0aW9ucy9zcmMvQXVkaW9Qcm9maWxlLmNwcAorKysgYi9zZXJ2aWNlcy9hdWRpb3BvbGljeS9jb21tb24vbWFuYWdlcmRlZmluaXRpb25zL3NyYy9BdWRpb1Byb2ZpbGUuY3BwCkBAIC0xNCwyMCArMTQsMTEyIEBACiAgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KICAqLwogCisjaW5jbHVkZSA8YWxnb3JpdGhtPgorI2luY2x1ZGUgPHNldD4KKyNpbmNsdWRlIDxzdHJpbmc+CisKICNkZWZpbmUgTE9HX1RBRyAiQVBNOjpBdWRpb1Byb2ZpbGUiCiAvLyNkZWZpbmUgTE9HX05ERUJVRyAwCiAKLSNpbmNsdWRlICJBdWRpb1Byb2ZpbGUuaCIKLSNpbmNsdWRlICJBdWRpb1BvcnQuaCIKLSNpbmNsdWRlICJId01vZHVsZS5oIgotI2luY2x1ZGUgIkF1ZGlvR2Fpbi5oIgotI2luY2x1ZGUgPHV0aWxzL1NvcnRlZFZlY3Rvci5oPgotI2luY2x1ZGUgIlR5cGVDb252ZXJ0ZXIuaCIKICNpbmNsdWRlIDxtZWRpYS9BdWRpb1Jlc2FtcGxlclB1YmxpYy5oPgotI2luY2x1ZGUgPGFsZ29yaXRobT4KKyNpbmNsdWRlIDx1dGlscy9FcnJvcnMuaD4KKworI2luY2x1ZGUgIkF1ZGlvR2Fpbi5oIgorI2luY2x1ZGUgIkF1ZGlvUG9ydC5oIgorI2luY2x1ZGUgIkF1ZGlvUHJvZmlsZS5oIgorI2luY2x1ZGUgIkh3TW9kdWxlLmgiCisjaW5jbHVkZSAiVHlwZUNvbnZlcnRlci5oIgogCiBuYW1lc3BhY2UgYW5kcm9pZCB7CiAKK0NoYW5uZWxzVmVjdG9yIENoYW5uZWxzVmVjdG9yOjphc0luTWFzaygpIGNvbnN0Cit7CisgICAgQ2hhbm5lbHNWZWN0b3IgaW5NYXNrVmVjdG9yOworICAgIGZvciAoY29uc3QgYXV0byYgY2hhbm5lbCA6ICp0aGlzKSB7CisgICAgICAgIGlmIChhdWRpb19jaGFubmVsX21hc2tfb3V0X3RvX2luKGNoYW5uZWwpICE9IEFVRElPX0NIQU5ORUxfSU5WQUxJRCkgeworICAgICAgICAgICAgaW5NYXNrVmVjdG9yLmFkZChhdWRpb19jaGFubmVsX21hc2tfb3V0X3RvX2luKGNoYW5uZWwpKTsKKyAgICAgICAgfQorICAgIH0KKyAgICByZXR1cm4gaW5NYXNrVmVjdG9yOworfQorCitDaGFubmVsc1ZlY3RvciBDaGFubmVsc1ZlY3Rvcjo6YXNPdXRNYXNrKCkgY29uc3QKK3sKKyAgICBDaGFubmVsc1ZlY3RvciBvdXRNYXNrVmVjdG9yOworICAgIGZvciAoY29uc3QgYXV0byYgY2hhbm5lbCA6ICp0aGlzKSB7CisgICAgICAgIGlmIChhdWRpb19jaGFubmVsX21hc2tfaW5fdG9fb3V0KGNoYW5uZWwpICE9IEFVRElPX0NIQU5ORUxfSU5WQUxJRCkgeworICAgICAgICAgICAgb3V0TWFza1ZlY3Rvci5hZGQoYXVkaW9fY2hhbm5lbF9tYXNrX2luX3RvX291dChjaGFubmVsKSk7CisgICAgICAgIH0KKyAgICB9CisgICAgcmV0dXJuIG91dE1hc2tWZWN0b3I7Cit9CisKK2Jvb2wgb3BlcmF0b3IgPT0gKGNvbnN0IEF1ZGlvUHJvZmlsZSAmbGVmdCwgY29uc3QgQXVkaW9Qcm9maWxlICZjb21wYXJlVG8pCit7CisgICAgcmV0dXJuIChsZWZ0LmdldEZvcm1hdCgpID09IGNvbXBhcmVUby5nZXRGb3JtYXQoKSkgJiYKKyAgICAgICAgICAgIChsZWZ0LmdldENoYW5uZWxzKCkgPT0gY29tcGFyZVRvLmdldENoYW5uZWxzKCkpICYmCisgICAgICAgICAgICAobGVmdC5nZXRTYW1wbGVSYXRlcygpID09IGNvbXBhcmVUby5nZXRTYW1wbGVSYXRlcygpKTsKK30KKworc3RhdGljIEF1ZGlvUHJvZmlsZSogY3JlYXRlRnVsbER5bmFtaWNJbXBsKCkKK3sKKyAgICBBdWRpb1Byb2ZpbGUqIGR5bmFtaWNQcm9maWxlID0gbmV3IEF1ZGlvUHJvZmlsZShnRHluYW1pY0Zvcm1hdCwKKyAgICAgICAgICAgIENoYW5uZWxzVmVjdG9yKCksIFNhbXBsZVJhdGVWZWN0b3IoKSk7CisgICAgZHluYW1pY1Byb2ZpbGUtPnNldER5bmFtaWNGb3JtYXQodHJ1ZSk7CisgICAgZHluYW1pY1Byb2ZpbGUtPnNldER5bmFtaWNDaGFubmVscyh0cnVlKTsKKyAgICBkeW5hbWljUHJvZmlsZS0+c2V0RHluYW1pY1JhdGUodHJ1ZSk7CisgICAgcmV0dXJuIGR5bmFtaWNQcm9maWxlOworfQorCisvLyBzdGF0aWMKK3NwPEF1ZGlvUHJvZmlsZT4gQXVkaW9Qcm9maWxlOjpjcmVhdGVGdWxsRHluYW1pYygpCit7CisgICAgc3RhdGljIHNwPEF1ZGlvUHJvZmlsZT4gZHluYW1pY1Byb2ZpbGUgPSBjcmVhdGVGdWxsRHluYW1pY0ltcGwoKTsKKyAgICByZXR1cm4gZHluYW1pY1Byb2ZpbGU7Cit9CisKK0F1ZGlvUHJvZmlsZTo6QXVkaW9Qcm9maWxlKGF1ZGlvX2Zvcm1hdF90IGZvcm1hdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGF1ZGlvX2NoYW5uZWxfbWFza190IGNoYW5uZWxNYXNrcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90IHNhbXBsaW5nUmF0ZSkgOgorICAgICAgICBtTmFtZShTdHJpbmc4KCIiKSksCisgICAgICAgIG1Gb3JtYXQoZm9ybWF0KQoreworICAgIG1DaGFubmVsTWFza3MuYWRkKGNoYW5uZWxNYXNrcyk7CisgICAgbVNhbXBsaW5nUmF0ZXMuYWRkKHNhbXBsaW5nUmF0ZSk7Cit9CisKK0F1ZGlvUHJvZmlsZTo6QXVkaW9Qcm9maWxlKGF1ZGlvX2Zvcm1hdF90IGZvcm1hdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IENoYW5uZWxzVmVjdG9yICZjaGFubmVsTWFza3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBTYW1wbGVSYXRlVmVjdG9yICZzYW1wbGluZ1JhdGVDb2xsZWN0aW9uKSA6CisgICAgICAgIG1OYW1lKFN0cmluZzgoIiIpKSwKKyAgICAgICAgbUZvcm1hdChmb3JtYXQpLAorICAgICAgICBtQ2hhbm5lbE1hc2tzKGNoYW5uZWxNYXNrcyksCisgICAgICAgIG1TYW1wbGluZ1JhdGVzKHNhbXBsaW5nUmF0ZUNvbGxlY3Rpb24pIHt9CisKK3ZvaWQgQXVkaW9Qcm9maWxlOjpzZXRDaGFubmVscyhjb25zdCBDaGFubmVsc1ZlY3RvciAmY2hhbm5lbE1hc2tzKQoreworICAgIGlmIChtSXNEeW5hbWljQ2hhbm5lbHMpIHsKKyAgICAgICAgbUNoYW5uZWxNYXNrcyA9IGNoYW5uZWxNYXNrczsKKyAgICB9Cit9CisKK3ZvaWQgQXVkaW9Qcm9maWxlOjpzZXRTYW1wbGVSYXRlcyhjb25zdCBTYW1wbGVSYXRlVmVjdG9yICZzYW1wbGVSYXRlcykKK3sKKyAgICBpZiAobUlzRHluYW1pY1JhdGUpIHsKKyAgICAgICAgbVNhbXBsaW5nUmF0ZXMgPSBzYW1wbGVSYXRlczsKKyAgICB9Cit9CisKK3ZvaWQgQXVkaW9Qcm9maWxlOjpjbGVhcigpCit7CisgICAgaWYgKG1Jc0R5bmFtaWNDaGFubmVscykgeworICAgICAgICBtQ2hhbm5lbE1hc2tzLmNsZWFyKCk7CisgICAgfQorICAgIGlmIChtSXNEeW5hbWljUmF0ZSkgeworICAgICAgICBtU2FtcGxpbmdSYXRlcy5jbGVhcigpOworICAgIH0KK30KKwogc3RhdHVzX3QgQXVkaW9Qcm9maWxlOjpjaGVja0V4YWN0KHVpbnQzMl90IHNhbXBsaW5nUmF0ZSwgYXVkaW9fY2hhbm5lbF9tYXNrX3QgY2hhbm5lbE1hc2ssCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXVkaW9fZm9ybWF0X3QgZm9ybWF0KSBjb25zdAogewpAQCAtMzksMjcgKzEzMSw2IEBACiAgICAgcmV0dXJuIEJBRF9WQUxVRTsKIH0KIAotdGVtcGxhdGUgPHR5cGVuYW1lIFQ+Ci1ib29sIG9wZXJhdG9yID09IChjb25zdCBTb3J0ZWRWZWN0b3I8VD4gJmxlZnQsIGNvbnN0IFNvcnRlZFZlY3RvcjxUPiAmcmlnaHQpCi17Ci0gICAgaWYgKGxlZnQuc2l6ZSgpICE9IHJpZ2h0LnNpemUoKSkgewotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotICAgIGZvcihzaXplX3QgaW5kZXggPSAwOyBpbmRleCA8IHJpZ2h0LnNpemUoKTsgaW5kZXgrKykgewotICAgICAgICBpZiAobGVmdFtpbmRleF0gIT0gcmlnaHRbaW5kZXhdKSB7Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLWJvb2wgb3BlcmF0b3IgPT0gKGNvbnN0IEF1ZGlvUHJvZmlsZSAmbGVmdCwgY29uc3QgQXVkaW9Qcm9maWxlICZjb21wYXJlVG8pCi17Ci0gICAgcmV0dXJuIChsZWZ0LmdldEZvcm1hdCgpID09IGNvbXBhcmVUby5nZXRGb3JtYXQoKSkgJiYKLSAgICAgICAgICAgIChsZWZ0LmdldENoYW5uZWxzKCkgPT0gY29tcGFyZVRvLmdldENoYW5uZWxzKCkpICYmCi0gICAgICAgICAgICAobGVmdC5nZXRTYW1wbGVSYXRlcygpID09IGNvbXBhcmVUby5nZXRTYW1wbGVSYXRlcygpKTsKLX0KLQogc3RhdHVzX3QgQXVkaW9Qcm9maWxlOjpjaGVja0NvbXBhdGlibGVTYW1wbGluZ1JhdGUodWludDMyX3Qgc2FtcGxpbmdSYXRlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3QgJnVwZGF0ZWRTYW1wbGluZ1JhdGUpIGNvbnN0CiB7CkBAIC0xODIsNDcgKzI1Myw3OSBAQAogICAgIHJldHVybiBiZXN0TWF0Y2ggPiAwID8gTk9fRVJST1IgOiBCQURfVkFMVUU7CiB9CiAKLXZvaWQgQXVkaW9Qcm9maWxlOjpkdW1wKGludCBmZCwgaW50IHNwYWNlcykgY29uc3QKK3ZvaWQgQXVkaW9Qcm9maWxlOjpkdW1wKFN0cmluZzggKmRzdCwgaW50IHNwYWNlcykgY29uc3QKIHsKLSAgICBjb25zdCBzaXplX3QgU0laRSA9IDI1NjsKLSAgICBjaGFyIGJ1ZmZlcltTSVpFXTsKLSAgICBTdHJpbmc4IHJlc3VsdDsKLQotICAgIHNucHJpbnRmKGJ1ZmZlciwgU0laRSwgIiVzJXMlc1xuIiwgbUlzRHluYW1pY0Zvcm1hdCA/ICJbZHluYW1pYyBmb3JtYXRdIiA6ICIiLAorICAgIGRzdC0+YXBwZW5kRm9ybWF0KCIlcyVzJXNcbiIsIG1Jc0R5bmFtaWNGb3JtYXQgPyAiW2R5bmFtaWMgZm9ybWF0XSIgOiAiIiwKICAgICAgICAgICAgICBtSXNEeW5hbWljQ2hhbm5lbHMgPyAiW2R5bmFtaWMgY2hhbm5lbHNdIiA6ICIiLAogICAgICAgICAgICAgIG1Jc0R5bmFtaWNSYXRlID8gIltkeW5hbWljIHJhdGVzXSIgOiAiIik7Ci0gICAgcmVzdWx0LmFwcGVuZChidWZmZXIpOwogICAgIGlmIChtTmFtZS5sZW5ndGgoKSAhPSAwKSB7Ci0gICAgICAgIHNucHJpbnRmKGJ1ZmZlciwgU0laRSwgIiUqcy0gbmFtZTogJXNcbiIsIHNwYWNlcywgIiIsIG1OYW1lLnN0cmluZygpKTsKLSAgICAgICAgcmVzdWx0LmFwcGVuZChidWZmZXIpOworICAgICAgICBkc3QtPmFwcGVuZEZvcm1hdCgiJSpzLSBuYW1lOiAlc1xuIiwgc3BhY2VzLCAiIiwgbU5hbWUuc3RyaW5nKCkpOwogICAgIH0KICAgICBzdGQ6OnN0cmluZyBmb3JtYXRMaXRlcmFsOwogICAgIGlmIChGb3JtYXRDb252ZXJ0ZXI6OnRvU3RyaW5nKG1Gb3JtYXQsIGZvcm1hdExpdGVyYWwpKSB7Ci0gICAgICAgIHNucHJpbnRmKGJ1ZmZlciwgU0laRSwgIiUqcy0gZm9ybWF0OiAlc1xuIiwgc3BhY2VzLCAiIiwgZm9ybWF0TGl0ZXJhbC5jX3N0cigpKTsKLSAgICAgICAgcmVzdWx0LmFwcGVuZChidWZmZXIpOworICAgICAgICBkc3QtPmFwcGVuZEZvcm1hdCgiJSpzLSBmb3JtYXQ6ICVzXG4iLCBzcGFjZXMsICIiLCBmb3JtYXRMaXRlcmFsLmNfc3RyKCkpOwogICAgIH0KICAgICBpZiAoIW1TYW1wbGluZ1JhdGVzLmlzRW1wdHkoKSkgewotICAgICAgICBzbnByaW50ZihidWZmZXIsIFNJWkUsICIlKnMtIHNhbXBsaW5nIHJhdGVzOiIsIHNwYWNlcywgIiIpOwotICAgICAgICByZXN1bHQuYXBwZW5kKGJ1ZmZlcik7CisgICAgICAgIGRzdC0+YXBwZW5kRm9ybWF0KCIlKnMtIHNhbXBsaW5nIHJhdGVzOiIsIHNwYWNlcywgIiIpOwogICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1TYW1wbGluZ1JhdGVzLnNpemUoKTsgaSsrKSB7Ci0gICAgICAgICAgICBzbnByaW50ZihidWZmZXIsIFNJWkUsICIlZCIsIG1TYW1wbGluZ1JhdGVzW2ldKTsKLSAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQoYnVmZmVyKTsKLSAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQoaSA9PSAobVNhbXBsaW5nUmF0ZXMuc2l6ZSgpIC0gMSkgPyAiIiA6ICIsICIpOworICAgICAgICAgICAgZHN0LT5hcHBlbmRGb3JtYXQoIiVkIiwgbVNhbXBsaW5nUmF0ZXNbaV0pOworICAgICAgICAgICAgZHN0LT5hcHBlbmQoaSA9PSAobVNhbXBsaW5nUmF0ZXMuc2l6ZSgpIC0gMSkgPyAiIiA6ICIsICIpOwogICAgICAgICB9Ci0gICAgICAgIHJlc3VsdC5hcHBlbmQoIlxuIik7CisgICAgICAgIGRzdC0+YXBwZW5kKCJcbiIpOwogICAgIH0KIAogICAgIGlmICghbUNoYW5uZWxNYXNrcy5pc0VtcHR5KCkpIHsKLSAgICAgICAgc25wcmludGYoYnVmZmVyLCBTSVpFLCAiJSpzLSBjaGFubmVsIG1hc2tzOiIsIHNwYWNlcywgIiIpOwotICAgICAgICByZXN1bHQuYXBwZW5kKGJ1ZmZlcik7CisgICAgICAgIGRzdC0+YXBwZW5kRm9ybWF0KCIlKnMtIGNoYW5uZWwgbWFza3M6Iiwgc3BhY2VzLCAiIik7CiAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbUNoYW5uZWxNYXNrcy5zaXplKCk7IGkrKykgewotICAgICAgICAgICAgc25wcmludGYoYnVmZmVyLCBTSVpFLCAiMHglMDR4IiwgbUNoYW5uZWxNYXNrc1tpXSk7Ci0gICAgICAgICAgICByZXN1bHQuYXBwZW5kKGJ1ZmZlcik7Ci0gICAgICAgICAgICByZXN1bHQuYXBwZW5kKGkgPT0gKG1DaGFubmVsTWFza3Muc2l6ZSgpIC0gMSkgPyAiIiA6ICIsICIpOworICAgICAgICAgICAgZHN0LT5hcHBlbmRGb3JtYXQoIjB4JTA0eCIsIG1DaGFubmVsTWFza3NbaV0pOworICAgICAgICAgICAgZHN0LT5hcHBlbmQoaSA9PSAobUNoYW5uZWxNYXNrcy5zaXplKCkgLSAxKSA/ICIiIDogIiwgIik7CiAgICAgICAgIH0KLSAgICAgICAgcmVzdWx0LmFwcGVuZCgiXG4iKTsKKyAgICAgICAgZHN0LT5hcHBlbmQoIlxuIik7CiAgICAgfQotICAgIHdyaXRlKGZkLCByZXN1bHQuc3RyaW5nKCksIHJlc3VsdC5zaXplKCkpOworfQorCitzc2l6ZV90IEF1ZGlvUHJvZmlsZVZlY3Rvcjo6YWRkKGNvbnN0IHNwPEF1ZGlvUHJvZmlsZT4gJnByb2ZpbGUpCit7CisgICAgc3NpemVfdCBpbmRleCA9IFZlY3Rvcjo6YWRkKHByb2ZpbGUpOworICAgIC8vIHdlIHNvcnQgZnJvbSB3b3JzdCB0byBiZXN0LCBzbyB0aGF0IEFVRElPX0ZPUk1BVF9ERUZBVUxUIGlzIGFsd2F5cyB0aGUgZmlyc3QgZW50cnkuCisgICAgLy8gVE9ETzogY29tcGFyZUZvcm1hdHMgY291bGQgYmUgYSBsYW1iZGEgdG8gY29udmVydCBiZXR3ZWVuIHBvaW50ZXItdG8tZm9ybWF0IHRvIGZvcm1hdDoKKyAgICAvLyBbXShjb25zdCBhdWRpb19mb3JtYXRfdCAqZm9ybWF0MSwgY29uc3QgYXVkaW9fZm9ybWF0X3QgKmZvcm1hdDIpIHsKKyAgICAvLyAgICAgcmV0dXJuIGNvbXBhcmVGb3JtYXRzKCpmb3JtYXQxLCAqZm9ybWF0Mik7CisgICAgLy8gfQorICAgIHNvcnQoY29tcGFyZUZvcm1hdHMpOworICAgIHJldHVybiBpbmRleDsKK30KKworc3NpemVfdCBBdWRpb1Byb2ZpbGVWZWN0b3I6OmFkZFByb2ZpbGVGcm9tSGFsKGNvbnN0IHNwPEF1ZGlvUHJvZmlsZT4gJnByb2ZpbGVUb0FkZCkKK3sKKyAgICAvLyBDaGVjayB2YWxpZCBwcm9maWxlIHRvIGFkZDoKKyAgICBpZiAoIXByb2ZpbGVUb0FkZC0+aGFzVmFsaWRGb3JtYXQoKSkgeworICAgICAgICByZXR1cm4gLTE7CisgICAgfQorICAgIGlmICghcHJvZmlsZVRvQWRkLT5oYXNWYWxpZENoYW5uZWxzKCkgJiYgIXByb2ZpbGVUb0FkZC0+aGFzVmFsaWRSYXRlcygpKSB7CisgICAgICAgIEZvcm1hdFZlY3RvciBmb3JtYXRzOworICAgICAgICBmb3JtYXRzLmFkZChwcm9maWxlVG9BZGQtPmdldEZvcm1hdCgpKTsKKyAgICAgICAgc2V0Rm9ybWF0cyhGb3JtYXRWZWN0b3IoZm9ybWF0cykpOworICAgICAgICByZXR1cm4gMDsKKyAgICB9CisgICAgaWYgKCFwcm9maWxlVG9BZGQtPmhhc1ZhbGlkQ2hhbm5lbHMoKSAmJiBwcm9maWxlVG9BZGQtPmhhc1ZhbGlkUmF0ZXMoKSkgeworICAgICAgICBzZXRTYW1wbGVSYXRlc0Zvcihwcm9maWxlVG9BZGQtPmdldFNhbXBsZVJhdGVzKCksIHByb2ZpbGVUb0FkZC0+Z2V0Rm9ybWF0KCkpOworICAgICAgICByZXR1cm4gMDsKKyAgICB9CisgICAgaWYgKHByb2ZpbGVUb0FkZC0+aGFzVmFsaWRDaGFubmVscygpICYmICFwcm9maWxlVG9BZGQtPmhhc1ZhbGlkUmF0ZXMoKSkgeworICAgICAgICBzZXRDaGFubmVsc0Zvcihwcm9maWxlVG9BZGQtPmdldENoYW5uZWxzKCksIHByb2ZpbGVUb0FkZC0+Z2V0Rm9ybWF0KCkpOworICAgICAgICByZXR1cm4gMDsKKyAgICB9CisgICAgLy8gR28gdGhyb3VnaCB0aGUgbGlzdCBvZiBwcm9maWxlIHRvIGF2b2lkIGR1cGxpY2F0ZXMKKyAgICBmb3IgKHNpemVfdCBwcm9maWxlSW5kZXggPSAwOyBwcm9maWxlSW5kZXggPCBzaXplKCk7IHByb2ZpbGVJbmRleCsrKSB7CisgICAgICAgIGNvbnN0IHNwPEF1ZGlvUHJvZmlsZT4gJnByb2ZpbGUgPSBpdGVtQXQocHJvZmlsZUluZGV4KTsKKyAgICAgICAgaWYgKHByb2ZpbGUtPmlzVmFsaWQoKSAmJiBwcm9maWxlID09IHByb2ZpbGVUb0FkZCkgeworICAgICAgICAgICAgLy8gTm90aGluZyB0byBkbworICAgICAgICAgICAgcmV0dXJuIHByb2ZpbGVJbmRleDsKKyAgICAgICAgfQorICAgIH0KKyAgICBwcm9maWxlVG9BZGQtPnNldER5bmFtaWNGb3JtYXQodHJ1ZSk7IC8vIHNldCB0aGUgZm9ybWF0IGFzIGR5bmFtaWMgdG8gYWxsb3cgcmVtb3ZhbAorICAgIHJldHVybiBhZGQocHJvZmlsZVRvQWRkKTsKIH0KIAogc3RhdHVzX3QgQXVkaW9Qcm9maWxlVmVjdG9yOjpjaGVja0V4YWN0UHJvZmlsZSh1aW50MzJfdCBzYW1wbGluZ1JhdGUsCkBAIC0yODEsNiArMzg0LDIyOCBAQAogICAgIHJldHVybiBCQURfVkFMVUU7CiB9CiAKK3ZvaWQgQXVkaW9Qcm9maWxlVmVjdG9yOjpjbGVhclByb2ZpbGVzKCkKK3sKKyAgICBmb3IgKHNpemVfdCBpID0gc2l6ZSgpOyBpICE9IDA7ICkgeworICAgICAgICBzcDxBdWRpb1Byb2ZpbGU+IHByb2ZpbGUgPSBpdGVtQXQoLS1pKTsKKyAgICAgICAgaWYgKHByb2ZpbGUtPmlzRHluYW1pY0Zvcm1hdCgpICYmIHByb2ZpbGUtPmhhc1ZhbGlkRm9ybWF0KCkpIHsKKyAgICAgICAgICAgIHJlbW92ZUF0KGkpOworICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIH0KKyAgICAgICAgcHJvZmlsZS0+Y2xlYXIoKTsKKyAgICB9Cit9CisKKy8vIFJldHVybnMgYW4gaW50ZXJzZWN0aW9uIGJldHdlZW4gdHdvIHBvc3NpYmx5IHVuc29ydGVkIHZlY3RvcnMgYW5kIHRoZSBjb250ZW50cyBvZiAnb3JkZXInLgorLy8gVGhlIHJlc3VsdCBpcyBvcmRlcmVkIGFjY29yZGluZyB0byAnb3JkZXInLgordGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgT3JkZXI+CitzdGQ6OnZlY3Rvcjx0eXBlbmFtZSBUOjp2YWx1ZV90eXBlPiBpbnRlcnNlY3RGaWx0ZXJBbmRPcmRlcigKKyAgICAgICAgY29uc3QgVCYgaW5wdXQxLCBjb25zdCBUJiBpbnB1dDIsIGNvbnN0IE9yZGVyJiBvcmRlcikKK3sKKyAgICBzdGQ6OnNldDx0eXBlbmFtZSBUOjp2YWx1ZV90eXBlPiBzZXQxe2lucHV0MS5iZWdpbigpLCBpbnB1dDEuZW5kKCl9OworICAgIHN0ZDo6c2V0PHR5cGVuYW1lIFQ6OnZhbHVlX3R5cGU+IHNldDJ7aW5wdXQyLmJlZ2luKCksIGlucHV0Mi5lbmQoKX07CisgICAgc3RkOjpzZXQ8dHlwZW5hbWUgVDo6dmFsdWVfdHlwZT4gY29tbW9uOworICAgIHN0ZDo6c2V0X2ludGVyc2VjdGlvbihzZXQxLmJlZ2luKCksIHNldDEuZW5kKCksIHNldDIuYmVnaW4oKSwgc2V0Mi5lbmQoKSwKKyAgICAgICAgICAgIHN0ZDo6aW5zZXJ0ZXIoY29tbW9uLCBjb21tb24uYmVnaW4oKSkpOworICAgIHN0ZDo6dmVjdG9yPHR5cGVuYW1lIFQ6OnZhbHVlX3R5cGU+IHJlc3VsdDsKKyAgICBmb3IgKGNvbnN0IGF1dG8mIGUgOiBvcmRlcikgeworICAgICAgICBpZiAoY29tbW9uLmZpbmQoZSkgIT0gY29tbW9uLmVuZCgpKSByZXN1bHQucHVzaF9iYWNrKGUpOworICAgIH0KKyAgICByZXR1cm4gcmVzdWx0OworfQorCisvLyBJbnRlcnNlY3QgdHdvIHBvc3NpYmx5IHVuc29ydGVkIHZlY3RvcnMsIHJldHVybiBjb21tb24gZWxlbWVudHMgYWNjb3JkaW5nIHRvICdjb21wJyBvcmRlcmluZy4KKy8vICdjb21wJyBpcyBhIGNvbXBhcmF0b3IgZnVuY3Rpb24uCit0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBDb21wYXJlPgorc3RkOjp2ZWN0b3I8dHlwZW5hbWUgVDo6dmFsdWVfdHlwZT4gaW50ZXJzZWN0QW5kT3JkZXIoCisgICAgICAgIGNvbnN0IFQmIGlucHV0MSwgY29uc3QgVCYgaW5wdXQyLCBDb21wYXJlIGNvbXApCit7CisgICAgc3RkOjpzZXQ8dHlwZW5hbWUgVDo6dmFsdWVfdHlwZSwgQ29tcGFyZT4gc2V0MXtpbnB1dDEuYmVnaW4oKSwgaW5wdXQxLmVuZCgpLCBjb21wfTsKKyAgICBzdGQ6OnNldDx0eXBlbmFtZSBUOjp2YWx1ZV90eXBlLCBDb21wYXJlPiBzZXQye2lucHV0Mi5iZWdpbigpLCBpbnB1dDIuZW5kKCksIGNvbXB9OworICAgIHN0ZDo6dmVjdG9yPHR5cGVuYW1lIFQ6OnZhbHVlX3R5cGU+IHJlc3VsdDsKKyAgICBzdGQ6OnNldF9pbnRlcnNlY3Rpb24oc2V0MS5iZWdpbigpLCBzZXQxLmVuZCgpLCBzZXQyLmJlZ2luKCksIHNldDIuZW5kKCksCisgICAgICAgICAgICBzdGQ6OmJhY2tfaW5zZXJ0ZXIocmVzdWx0KSwgY29tcCk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworc3RhdHVzX3QgQXVkaW9Qcm9maWxlVmVjdG9yOjpmaW5kQmVzdE1hdGNoaW5nT3V0cHV0Q29uZmlnKGNvbnN0IEF1ZGlvUHJvZmlsZVZlY3RvciYgb3V0cHV0UHJvZmlsZXMsCisgICAgICAgICAgICBjb25zdCBzdGQ6OnZlY3RvcjxhdWRpb19mb3JtYXRfdD4mIHByZWZlcnJlZEZvcm1hdHMsCisgICAgICAgICAgICBjb25zdCBzdGQ6OnZlY3RvcjxhdWRpb19jaGFubmVsX21hc2tfdD4mIHByZWZlcnJlZE91dHB1dENoYW5uZWxzLAorICAgICAgICAgICAgYm9vbCBwcmVmZXJIaWdoZXJTYW1wbGluZ1JhdGVzLAorICAgICAgICAgICAgYXVkaW9fY29uZmlnX2Jhc2UgKmJlc3RPdXRwdXRDb25maWcpIGNvbnN0Cit7CisgICAgYXV0byBmb3JtYXRzID0gaW50ZXJzZWN0RmlsdGVyQW5kT3JkZXIoZ2V0U3VwcG9ydGVkRm9ybWF0cygpLAorICAgICAgICAgICAgb3V0cHV0UHJvZmlsZXMuZ2V0U3VwcG9ydGVkRm9ybWF0cygpLCBwcmVmZXJyZWRGb3JtYXRzKTsKKyAgICAvLyBQaWNrIHRoZSBiZXN0IGNvbXBhdGlibGUgcHJvZmlsZS4KKyAgICBmb3IgKGNvbnN0IGF1dG8mIGYgOiBmb3JtYXRzKSB7CisgICAgICAgIHNwPEF1ZGlvUHJvZmlsZT4gaW5wdXRQcm9maWxlID0gZ2V0Rmlyc3RWYWxpZFByb2ZpbGVGb3IoZik7CisgICAgICAgIHNwPEF1ZGlvUHJvZmlsZT4gb3V0cHV0UHJvZmlsZSA9IG91dHB1dFByb2ZpbGVzLmdldEZpcnN0VmFsaWRQcm9maWxlRm9yKGYpOworICAgICAgICBpZiAoaW5wdXRQcm9maWxlID09IG51bGxwdHIgfHwgb3V0cHV0UHJvZmlsZSA9PSBudWxscHRyKSB7CisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQorICAgICAgICBhdXRvIGNoYW5uZWxzID0gaW50ZXJzZWN0RmlsdGVyQW5kT3JkZXIoaW5wdXRQcm9maWxlLT5nZXRDaGFubmVscygpLmFzT3V0TWFzaygpLAorICAgICAgICAgICAgICAgIG91dHB1dFByb2ZpbGUtPmdldENoYW5uZWxzKCksIHByZWZlcnJlZE91dHB1dENoYW5uZWxzKTsKKyAgICAgICAgaWYgKGNoYW5uZWxzLmVtcHR5KCkpIHsKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB9CisgICAgICAgIGF1dG8gc2FtcGxlUmF0ZXMgPSBwcmVmZXJIaWdoZXJTYW1wbGluZ1JhdGVzID8KKyAgICAgICAgICAgICAgICBpbnRlcnNlY3RBbmRPcmRlcihpbnB1dFByb2ZpbGUtPmdldFNhbXBsZVJhdGVzKCksIG91dHB1dFByb2ZpbGUtPmdldFNhbXBsZVJhdGVzKCksCisgICAgICAgICAgICAgICAgICAgICAgICBzdGQ6OmdyZWF0ZXI8dHlwZW5hbWUgU2FtcGxlUmF0ZVZlY3Rvcjo6dmFsdWVfdHlwZT4oKSkgOgorICAgICAgICAgICAgICAgIGludGVyc2VjdEFuZE9yZGVyKGlucHV0UHJvZmlsZS0+Z2V0U2FtcGxlUmF0ZXMoKSwgb3V0cHV0UHJvZmlsZS0+Z2V0U2FtcGxlUmF0ZXMoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgIHN0ZDo6bGVzczx0eXBlbmFtZSBTYW1wbGVSYXRlVmVjdG9yOjp2YWx1ZV90eXBlPigpKTsKKyAgICAgICAgaWYgKHNhbXBsZVJhdGVzLmVtcHR5KCkpIHsKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB9CisgICAgICAgIEFMT0dEKCIlcygpIGZvdW5kIGNoYW5uZWwgbWFzayAlI3ggYW5kIHNhbXBsZSByYXRlICVkIGZvciBmb3JtYXQgJSN4LiIsCisgICAgICAgICAgICAgICAgX19mdW5jX18sICpjaGFubmVscy5iZWdpbigpLCAqc2FtcGxlUmF0ZXMuYmVnaW4oKSwgZik7CisgICAgICAgIGJlc3RPdXRwdXRDb25maWctPmZvcm1hdCA9IGY7CisgICAgICAgIGJlc3RPdXRwdXRDb25maWctPnNhbXBsZV9yYXRlID0gKnNhbXBsZVJhdGVzLmJlZ2luKCk7CisgICAgICAgIGJlc3RPdXRwdXRDb25maWctPmNoYW5uZWxfbWFzayA9ICpjaGFubmVscy5iZWdpbigpOworICAgICAgICByZXR1cm4gTk9fRVJST1I7CisgICAgfQorICAgIHJldHVybiBCQURfVkFMVUU7Cit9CisKK3NwPEF1ZGlvUHJvZmlsZT4gQXVkaW9Qcm9maWxlVmVjdG9yOjpnZXRGaXJzdFZhbGlkUHJvZmlsZSgpIGNvbnN0Cit7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBzaXplKCk7IGkrKykgeworICAgICAgICBpZiAoaXRlbUF0KGkpLT5pc1ZhbGlkKCkpIHsKKyAgICAgICAgICAgIHJldHVybiBpdGVtQXQoaSk7CisgICAgICAgIH0KKyAgICB9CisgICAgcmV0dXJuIDA7Cit9CisKK3NwPEF1ZGlvUHJvZmlsZT4gQXVkaW9Qcm9maWxlVmVjdG9yOjpnZXRGaXJzdFZhbGlkUHJvZmlsZUZvcihhdWRpb19mb3JtYXRfdCBmb3JtYXQpIGNvbnN0Cit7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBzaXplKCk7IGkrKykgeworICAgICAgICBpZiAoaXRlbUF0KGkpLT5pc1ZhbGlkKCkgJiYgaXRlbUF0KGkpLT5nZXRGb3JtYXQoKSA9PSBmb3JtYXQpIHsKKyAgICAgICAgICAgIHJldHVybiBpdGVtQXQoaSk7CisgICAgICAgIH0KKyAgICB9CisgICAgcmV0dXJuIDA7Cit9CisKK0Zvcm1hdFZlY3RvciBBdWRpb1Byb2ZpbGVWZWN0b3I6OmdldFN1cHBvcnRlZEZvcm1hdHMoKSBjb25zdAoreworICAgIEZvcm1hdFZlY3RvciBzdXBwb3J0ZWRGb3JtYXRzOworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgc2l6ZSgpOyBpKyspIHsKKyAgICAgICAgaWYgKGl0ZW1BdChpKS0+aGFzVmFsaWRGb3JtYXQoKSkgeworICAgICAgICAgICAgc3VwcG9ydGVkRm9ybWF0cy5hZGQoaXRlbUF0KGkpLT5nZXRGb3JtYXQoKSk7CisgICAgICAgIH0KKyAgICB9CisgICAgcmV0dXJuIHN1cHBvcnRlZEZvcm1hdHM7Cit9CisKK2Jvb2wgQXVkaW9Qcm9maWxlVmVjdG9yOjpoYXNEeW5hbWljQ2hhbm5lbHNGb3IoYXVkaW9fZm9ybWF0X3QgZm9ybWF0KSBjb25zdAoreworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgc2l6ZSgpOyBpKyspIHsKKyAgICAgICAgc3A8QXVkaW9Qcm9maWxlPiBwcm9maWxlID0gaXRlbUF0KGkpOworICAgICAgICBpZiAocHJvZmlsZS0+Z2V0Rm9ybWF0KCkgPT0gZm9ybWF0ICYmIHByb2ZpbGUtPmlzRHluYW1pY0NoYW5uZWxzKCkpIHsKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9CisgICAgfQorICAgIHJldHVybiBmYWxzZTsKK30KKworYm9vbCBBdWRpb1Byb2ZpbGVWZWN0b3I6Omhhc0R5bmFtaWNQcm9maWxlKCkgY29uc3QKK3sKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHNpemUoKTsgaSsrKSB7CisgICAgICAgIGlmIChpdGVtQXQoaSktPmlzRHluYW1pYygpKSB7CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQorICAgIH0KKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK2Jvb2wgQXVkaW9Qcm9maWxlVmVjdG9yOjpoYXNEeW5hbWljUmF0ZUZvcihhdWRpb19mb3JtYXRfdCBmb3JtYXQpIGNvbnN0Cit7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBzaXplKCk7IGkrKykgeworICAgICAgICBzcDxBdWRpb1Byb2ZpbGU+IHByb2ZpbGUgPSBpdGVtQXQoaSk7CisgICAgICAgIGlmIChwcm9maWxlLT5nZXRGb3JtYXQoKSA9PSBmb3JtYXQgJiYgcHJvZmlsZS0+aXNEeW5hbWljUmF0ZSgpKSB7CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQorICAgIH0KKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK3ZvaWQgQXVkaW9Qcm9maWxlVmVjdG9yOjpzZXRGb3JtYXRzKGNvbnN0IEZvcm1hdFZlY3RvciAmZm9ybWF0cykKK3sKKyAgICAvLyBPbmx5IGFsbG93IHRvIGNoYW5nZSB0aGUgZm9ybWF0IG9mIGR5bmFtaWMgcHJvZmlsZQorICAgIHNwPEF1ZGlvUHJvZmlsZT4gZHluYW1pY0Zvcm1hdFByb2ZpbGUgPSBnZXRQcm9maWxlRm9yKGdEeW5hbWljRm9ybWF0KTsKKyAgICBpZiAoZHluYW1pY0Zvcm1hdFByb2ZpbGUgPT0gMCkgeworICAgICAgICByZXR1cm47CisgICAgfQorICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgZm9ybWF0cy5zaXplKCk7IGkrKykgeworICAgICAgICBzcDxBdWRpb1Byb2ZpbGU+IHByb2ZpbGUgPSBuZXcgQXVkaW9Qcm9maWxlKGZvcm1hdHNbaV0sCisgICAgICAgICAgICAgICAgZHluYW1pY0Zvcm1hdFByb2ZpbGUtPmdldENoYW5uZWxzKCksCisgICAgICAgICAgICAgICAgZHluYW1pY0Zvcm1hdFByb2ZpbGUtPmdldFNhbXBsZVJhdGVzKCkpOworICAgICAgICBwcm9maWxlLT5zZXREeW5hbWljRm9ybWF0KHRydWUpOworICAgICAgICBwcm9maWxlLT5zZXREeW5hbWljQ2hhbm5lbHMoZHluYW1pY0Zvcm1hdFByb2ZpbGUtPmlzRHluYW1pY0NoYW5uZWxzKCkpOworICAgICAgICBwcm9maWxlLT5zZXREeW5hbWljUmF0ZShkeW5hbWljRm9ybWF0UHJvZmlsZS0+aXNEeW5hbWljUmF0ZSgpKTsKKyAgICAgICAgYWRkKHByb2ZpbGUpOworICAgIH0KK30KKwordm9pZCBBdWRpb1Byb2ZpbGVWZWN0b3I6OmR1bXAoU3RyaW5nOCAqZHN0LCBpbnQgc3BhY2VzKSBjb25zdAoreworICAgIGRzdC0+YXBwZW5kRm9ybWF0KCIlKnMtIFByb2ZpbGVzOlxuIiwgc3BhY2VzLCAiIik7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBzaXplKCk7IGkrKykgeworICAgICAgICBkc3QtPmFwcGVuZEZvcm1hdCgiJSpzUHJvZmlsZSAlenU6Iiwgc3BhY2VzICsgNCwgIiIsIGkpOworICAgICAgICBpdGVtQXQoaSktPmR1bXAoZHN0LCBzcGFjZXMgKyA4KTsKKyAgICB9Cit9CisKK3NwPEF1ZGlvUHJvZmlsZT4gQXVkaW9Qcm9maWxlVmVjdG9yOjpnZXRQcm9maWxlRm9yKGF1ZGlvX2Zvcm1hdF90IGZvcm1hdCkgY29uc3QKK3sKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHNpemUoKTsgaSsrKSB7CisgICAgICAgIGlmIChpdGVtQXQoaSktPmdldEZvcm1hdCgpID09IGZvcm1hdCkgeworICAgICAgICAgICAgcmV0dXJuIGl0ZW1BdChpKTsKKyAgICAgICAgfQorICAgIH0KKyAgICByZXR1cm4gMDsKK30KKwordm9pZCBBdWRpb1Byb2ZpbGVWZWN0b3I6OnNldFNhbXBsZVJhdGVzRm9yKAorICAgICAgICBjb25zdCBTYW1wbGVSYXRlVmVjdG9yICZzYW1wbGVSYXRlcywgYXVkaW9fZm9ybWF0X3QgZm9ybWF0KQoreworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgc2l6ZSgpOyBpKyspIHsKKyAgICAgICAgc3A8QXVkaW9Qcm9maWxlPiBwcm9maWxlID0gaXRlbUF0KGkpOworICAgICAgICBpZiAocHJvZmlsZS0+Z2V0Rm9ybWF0KCkgPT0gZm9ybWF0ICYmIHByb2ZpbGUtPmlzRHluYW1pY1JhdGUoKSkgeworICAgICAgICAgICAgaWYgKHByb2ZpbGUtPmhhc1ZhbGlkUmF0ZXMoKSkgeworICAgICAgICAgICAgICAgIC8vIE5lZWQgdG8gY3JlYXRlIGEgbmV3IHByb2ZpbGUgd2l0aCBzYW1lIGZvcm1hdAorICAgICAgICAgICAgICAgIHNwPEF1ZGlvUHJvZmlsZT4gcHJvZmlsZVRvQWRkID0gbmV3IEF1ZGlvUHJvZmlsZShmb3JtYXQsIHByb2ZpbGUtPmdldENoYW5uZWxzKCksCisgICAgICAgICAgICAgICAgICAgICAgICBzYW1wbGVSYXRlcyk7CisgICAgICAgICAgICAgICAgcHJvZmlsZVRvQWRkLT5zZXREeW5hbWljRm9ybWF0KHRydWUpOyAvLyBuZWVkIHRvIHNldCB0byBhbGxvdyBjbGVhbmluZworICAgICAgICAgICAgICAgIGFkZChwcm9maWxlVG9BZGQpOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBwcm9maWxlLT5zZXRTYW1wbGVSYXRlcyhzYW1wbGVSYXRlcyk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICB9Cit9CisKK3ZvaWQgQXVkaW9Qcm9maWxlVmVjdG9yOjpzZXRDaGFubmVsc0Zvcihjb25zdCBDaGFubmVsc1ZlY3RvciAmY2hhbm5lbE1hc2tzLCBhdWRpb19mb3JtYXRfdCBmb3JtYXQpCit7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBzaXplKCk7IGkrKykgeworICAgICAgICBzcDxBdWRpb1Byb2ZpbGU+IHByb2ZpbGUgPSBpdGVtQXQoaSk7CisgICAgICAgIGlmIChwcm9maWxlLT5nZXRGb3JtYXQoKSA9PSBmb3JtYXQgJiYgcHJvZmlsZS0+aXNEeW5hbWljQ2hhbm5lbHMoKSkgeworICAgICAgICAgICAgaWYgKHByb2ZpbGUtPmhhc1ZhbGlkQ2hhbm5lbHMoKSkgeworICAgICAgICAgICAgICAgIC8vIE5lZWQgdG8gY3JlYXRlIGEgbmV3IHByb2ZpbGUgd2l0aCBzYW1lIGZvcm1hdAorICAgICAgICAgICAgICAgIHNwPEF1ZGlvUHJvZmlsZT4gcHJvZmlsZVRvQWRkID0gbmV3IEF1ZGlvUHJvZmlsZShmb3JtYXQsIGNoYW5uZWxNYXNrcywKKyAgICAgICAgICAgICAgICAgICAgICAgIHByb2ZpbGUtPmdldFNhbXBsZVJhdGVzKCkpOworICAgICAgICAgICAgICAgIHByb2ZpbGVUb0FkZC0+c2V0RHluYW1pY0Zvcm1hdCh0cnVlKTsgLy8gbmVlZCB0byBzZXQgdG8gYWxsb3cgY2xlYW5pbmcKKyAgICAgICAgICAgICAgICBhZGQocHJvZmlsZVRvQWRkKTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgcHJvZmlsZS0+c2V0Q2hhbm5lbHMoY2hhbm5lbE1hc2tzKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgIH0KK30KKworLy8gc3RhdGljCiBpbnQgQXVkaW9Qcm9maWxlVmVjdG9yOjpjb21wYXJlRm9ybWF0cyhjb25zdCBzcDxBdWRpb1Byb2ZpbGU+ICpwcm9maWxlMSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHNwPEF1ZGlvUHJvZmlsZT4gKnByb2ZpbGUyKQogewpkaWZmIC0tZ2l0IGEvc2VydmljZXMvYXVkaW9wb2xpY3kvY29tbW9uL21hbmFnZXJkZWZpbml0aW9ucy9zcmMvQXVkaW9Sb3V0ZS5jcHAgYi9zZXJ2aWNlcy9hdWRpb3BvbGljeS9jb21tb24vbWFuYWdlcmRlZmluaXRpb25zL3NyYy9BdWRpb1JvdXRlLmNwcAppbmRleCA3OWFkMWY3Li5jMWZlNWIwIDEwMDY0NAotLS0gYS9zZXJ2aWNlcy9hdWRpb3BvbGljeS9jb21tb24vbWFuYWdlcmRlZmluaXRpb25zL3NyYy9BdWRpb1JvdXRlLmNwcAorKysgYi9zZXJ2aWNlcy9hdWRpb3BvbGljeS9jb21tb24vbWFuYWdlcmRlZmluaXRpb25zL3NyYy9BdWRpb1JvdXRlLmNwcApAQCAtMjQsMjkgKzI0LDE3IEBACiBuYW1lc3BhY2UgYW5kcm9pZAogewogCi12b2lkIEF1ZGlvUm91dGU6OmR1bXAoaW50IGZkLCBpbnQgc3BhY2VzKSBjb25zdAordm9pZCBBdWRpb1JvdXRlOjpkdW1wKFN0cmluZzggKmRzdCwgaW50IHNwYWNlcykgY29uc3QKIHsKLSAgICBjb25zdCBzaXplX3QgU0laRSA9IDI1NjsKLSAgICBjaGFyIGJ1ZmZlcltTSVpFXTsKLSAgICBTdHJpbmc4IHJlc3VsdDsKLQotICAgIHNucHJpbnRmKGJ1ZmZlciwgU0laRSwgIiUqcy0gVHlwZTogJXNcbiIsIHNwYWNlcywgIiIsIG1UeXBlID09IEFVRElPX1JPVVRFX01VWCA/ICJNdXgiIDogIk1peCIpOwotICAgIHJlc3VsdC5hcHBlbmQoYnVmZmVyKTsKLQotICAgIHNucHJpbnRmKGJ1ZmZlciwgU0laRSwgIiUqcy0gU2luazogJXNcbiIsIHNwYWNlcywgIiIsIG1TaW5rLT5nZXRUYWdOYW1lKCkuc3RyaW5nKCkpOwotICAgIHJlc3VsdC5hcHBlbmQoYnVmZmVyKTsKLQorICAgIGRzdC0+YXBwZW5kRm9ybWF0KCIlKnMtIFR5cGU6ICVzXG4iLCBzcGFjZXMsICIiLCBtVHlwZSA9PSBBVURJT19ST1VURV9NVVggPyAiTXV4IiA6ICJNaXgiKTsKKyAgICBkc3QtPmFwcGVuZEZvcm1hdCgiJSpzLSBTaW5rOiAlc1xuIiwgc3BhY2VzLCAiIiwgbVNpbmstPmdldFRhZ05hbWUoKS5zdHJpbmcoKSk7CiAgICAgaWYgKG1Tb3VyY2VzLnNpemUoKSAhPSAwKSB7Ci0gICAgICAgIHNucHJpbnRmKGJ1ZmZlciwgU0laRSwgIiUqcy0gU291cmNlczogXG4iLCBzcGFjZXMsICIiKTsKLSAgICAgICAgcmVzdWx0LmFwcGVuZChidWZmZXIpOworICAgICAgICBkc3QtPmFwcGVuZEZvcm1hdCgiJSpzLSBTb3VyY2VzOiBcbiIsIHNwYWNlcywgIiIpOwogICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1Tb3VyY2VzLnNpemUoKTsgaSsrKSB7Ci0gICAgICAgICAgICBzbnByaW50ZihidWZmZXIsIFNJWkUsICIlKnMlcyBcbiIsIHNwYWNlcyArIDQsICIiLCBtU291cmNlc1tpXS0+Z2V0VGFnTmFtZSgpLnN0cmluZygpKTsKLSAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQoYnVmZmVyKTsKKyAgICAgICAgICAgIGRzdC0+YXBwZW5kRm9ybWF0KCIlKnMlcyBcbiIsIHNwYWNlcyArIDQsICIiLCBtU291cmNlc1tpXS0+Z2V0VGFnTmFtZSgpLnN0cmluZygpKTsKICAgICAgICAgfQogICAgIH0KLSAgICByZXN1bHQuYXBwZW5kKCJcbiIpOwotCi0gICAgd3JpdGUoZmQsIHJlc3VsdC5zdHJpbmcoKSwgcmVzdWx0LnNpemUoKSk7CisgICAgZHN0LT5hcHBlbmQoIlxuIik7CiB9CiAKIH0KZGlmZiAtLWdpdCBhL3NlcnZpY2VzL2F1ZGlvcG9saWN5L2NvbW1vbi9tYW5hZ2VyZGVmaW5pdGlvbnMvc3JjL0F1ZGlvU2Vzc2lvbi5jcHAgYi9zZXJ2aWNlcy9hdWRpb3BvbGljeS9jb21tb24vbWFuYWdlcmRlZmluaXRpb25zL3NyYy9BdWRpb1Nlc3Npb24uY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3Y2RhNDZiLi4wMDAwMDAwCi0tLSBhL3NlcnZpY2VzL2F1ZGlvcG9saWN5L2NvbW1vbi9tYW5hZ2VyZGVmaW5pdGlvbnMvc3JjL0F1ZGlvU2Vzc2lvbi5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSwyOTMgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNSBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0Ci0gKgotICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7Ci0gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCi0gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLSAqCi0gKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotICoKLSAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKLSAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCi0gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KLSAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKLSAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgotICovCi0KLSNkZWZpbmUgTE9HX1RBRyAiQVBNOjpBdWRpb1Nlc3Npb24iCi0vLyNkZWZpbmUgTE9HX05ERUJVRyAwCi0KLSNpbmNsdWRlIDxBdWRpb1BvbGljeUludGVyZmFjZS5oPgotI2luY2x1ZGUgInBvbGljeS5oIgotI2luY2x1ZGUgIkF1ZGlvU2Vzc2lvbi5oIgotI2luY2x1ZGUgIkF1ZGlvR2Fpbi5oIgotI2luY2x1ZGUgIlR5cGVDb252ZXJ0ZXIuaCIKLQotI2luY2x1ZGUgPGxvZy9sb2cuaD4KLSNpbmNsdWRlIDx1dGlscy9TdHJpbmc4Lmg+Ci0KLW5hbWVzcGFjZSBhbmRyb2lkIHsKLQotQXVkaW9TZXNzaW9uOjpBdWRpb1Nlc3Npb24oYXVkaW9fc2Vzc2lvbl90IHNlc3Npb24sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBhdWRpb19zb3VyY2VfdCBpbnB1dFNvdXJjZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIGF1ZGlvX2Zvcm1hdF90IGZvcm1hdCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90IHNhbXBsZVJhdGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBhdWRpb19jaGFubmVsX21hc2tfdCBjaGFubmVsTWFzaywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIGF1ZGlvX2lucHV0X2ZsYWdzX3QgZmxhZ3MsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICB1aWRfdCB1aWQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIGlzU291bmRUcmlnZ2VyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgQXVkaW9NaXgqIHBvbGljeU1peCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIEF1ZGlvUG9saWN5Q2xpZW50SW50ZXJmYWNlICpjbGllbnRJbnRlcmZhY2UpIDoKLSAgICBtUmVjb3JkQ2xpZW50SW5mbyh7IC51aWQgPSB1aWQsIC5zZXNzaW9uID0gc2Vzc2lvbiwgLnNvdXJjZSA9IGlucHV0U291cmNlfSksCi0gICAgbUNvbmZpZyh7IC5mb3JtYXQgPSBmb3JtYXQsIC5zYW1wbGVfcmF0ZSA9IHNhbXBsZVJhdGUsIC5jaGFubmVsX21hc2sgPSBjaGFubmVsTWFza30pLAotICAgIG1GbGFncyhmbGFncyksIG1Jc1NvdW5kVHJpZ2dlcihpc1NvdW5kVHJpZ2dlciksCi0gICAgbU9wZW5Db3VudCgxKSwgbUFjdGl2ZUNvdW50KDApLCBtUG9saWN5TWl4KHBvbGljeU1peCksIG1DbGllbnRJbnRlcmZhY2UoY2xpZW50SW50ZXJmYWNlKSwKLSAgICBtSW5mb1Byb3ZpZGVyKE5VTEwpCi17Ci19Ci0KLXVpbnQzMl90IEF1ZGlvU2Vzc2lvbjo6Y2hhbmdlT3BlbkNvdW50KGludCBkZWx0YSkKLXsKLSAgICBpZiAoKGRlbHRhICsgKGludCltT3BlbkNvdW50KSA8IDApIHsKLSAgICAgICAgQUxPR1coIiVzIGludmFsaWQgZGVsdGEgJWQsIG9wZW4gY291bnQgJWQiLAotICAgICAgICAgICAgICBfX0ZVTkNUSU9OX18sIGRlbHRhLCBtT3BlbkNvdW50KTsKLSAgICAgICAgbU9wZW5Db3VudCA9ICh1aW50MzJfdCkoLWRlbHRhKTsKLSAgICB9Ci0gICAgbU9wZW5Db3VudCArPSBkZWx0YTsKLSAgICBBTE9HVigiJXMgb3BlbiBjb3VudCAlZCIsIF9fRlVOQ1RJT05fXywgbU9wZW5Db3VudCk7Ci0gICAgcmV0dXJuIG1PcGVuQ291bnQ7Ci19Ci0KLXVpbnQzMl90IEF1ZGlvU2Vzc2lvbjo6Y2hhbmdlQWN0aXZlQ291bnQoaW50IGRlbHRhKQotewotICAgIGNvbnN0IHVpbnQzMl90IG9sZEFjdGl2ZUNvdW50ID0gbUFjdGl2ZUNvdW50OwotICAgIGlmICgoZGVsdGEgKyAoaW50KW1BY3RpdmVDb3VudCkgPCAwKSB7Ci0gICAgICAgIEFMT0dXKCIlcyBpbnZhbGlkIGRlbHRhICVkLCBhY3RpdmUgY291bnQgJWQiLAotICAgICAgICAgICAgICBfX0ZVTkNUSU9OX18sIGRlbHRhLCBtQWN0aXZlQ291bnQpOwotICAgICAgICBtQWN0aXZlQ291bnQgPSAodWludDMyX3QpKC1kZWx0YSk7Ci0gICAgfQotICAgIG1BY3RpdmVDb3VudCArPSBkZWx0YTsKLSAgICBBTE9HVigiJXMgYWN0aXZlIGNvdW50ICVkIiwgX19GVU5DVElPTl9fLCBtQWN0aXZlQ291bnQpOwotICAgIGludCBldmVudCA9IFJFQ09SRF9DT05GSUdfRVZFTlRfTk9ORTsKLQotICAgIGlmICgob2xkQWN0aXZlQ291bnQgPT0gMCkgJiYgKG1BY3RpdmVDb3VudCA+IDApKSB7Ci0gICAgICAgIGV2ZW50ID0gUkVDT1JEX0NPTkZJR19FVkVOVF9TVEFSVDsKLSAgICB9IGVsc2UgaWYgKChvbGRBY3RpdmVDb3VudCA+IDApICYmIChtQWN0aXZlQ291bnQgPT0gMCkpIHsKLSAgICAgICAgZXZlbnQgPSBSRUNPUkRfQ09ORklHX0VWRU5UX1NUT1A7Ci0gICAgfQotCi0gICAgaWYgKGV2ZW50ICE9IFJFQ09SRF9DT05GSUdfRVZFTlRfTk9ORSkgewotICAgICAgICAvLyBEeW5hbWljIHBvbGljeSBjYWxsYmFjazoKLSAgICAgICAgLy8gaWYgaW5wdXQgbWFwcyB0byBhIGR5bmFtaWMgcG9saWN5IHdpdGggYW4gYWN0aXZpdHkgbGlzdGVuZXIsIG5vdGlmeSBvZiBzdGF0ZSBjaGFuZ2UKLSAgICAgICAgaWYgKChtUG9saWN5TWl4ICE9IE5VTEwpICYmICgobVBvbGljeU1peC0+bUNiRmxhZ3MgJiBBdWRpb01peDo6a0NiRmxhZ05vdGlmeUFjdGl2aXR5KSAhPSAwKSkKLSAgICAgICAgewotICAgICAgICAgICAgbUNsaWVudEludGVyZmFjZS0+b25EeW5hbWljUG9saWN5TWl4U3RhdGVVcGRhdGUobVBvbGljeU1peC0+bURldmljZUFkZHJlc3MsCi0gICAgICAgICAgICAgICAgICAgIChldmVudCA9PSBSRUNPUkRfQ09ORklHX0VWRU5UX1NUQVJUKSA/IE1JWF9TVEFURV9NSVhJTkcgOiBNSVhfU1RBVEVfSURMRSk7Ci0gICAgICAgIH0KLQotICAgICAgICAvLyBSZWNvcmRpbmcgY29uZmlndXJhdGlvbiBjYWxsYmFjazoKLSAgICAgICAgY29uc3QgQXVkaW9TZXNzaW9uSW5mb1Byb3ZpZGVyKiBwcm92aWRlciA9IG1JbmZvUHJvdmlkZXI7Ci0gICAgICAgIGNvbnN0IGF1ZGlvX2NvbmZpZ19iYXNlX3QgZGV2aWNlQ29uZmlnID0gKHByb3ZpZGVyICE9IE5VTEwpID8gcHJvdmlkZXItPmdldENvbmZpZygpIDoKLSAgICAgICAgICAgICAgICBBVURJT19DT05GSUdfQkFTRV9JTklUSUFMSVpFUjsKLSAgICAgICAgY29uc3QgYXVkaW9fcGF0Y2hfaGFuZGxlX3QgcGF0Y2hIYW5kbGUgPSAocHJvdmlkZXIgIT0gTlVMTCkgPyBwcm92aWRlci0+Z2V0UGF0Y2hIYW5kbGUoKSA6Ci0gICAgICAgICAgICAgICAgQVVESU9fUEFUQ0hfSEFORExFX05PTkU7Ci0gICAgICAgIGlmIChwYXRjaEhhbmRsZSAhPSBBVURJT19QQVRDSF9IQU5ETEVfTk9ORSkgewotICAgICAgICAgICAgbUNsaWVudEludGVyZmFjZS0+b25SZWNvcmRpbmdDb25maWd1cmF0aW9uVXBkYXRlKGV2ZW50LCAmbVJlY29yZENsaWVudEluZm8sCi0gICAgICAgICAgICAgICAgICAgICZtQ29uZmlnLCAmZGV2aWNlQ29uZmlnLCBwYXRjaEhhbmRsZSk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICByZXR1cm4gbUFjdGl2ZUNvdW50OwotfQotCi1ib29sIEF1ZGlvU2Vzc2lvbjo6bWF0Y2hlcyhjb25zdCBzcDxBdWRpb1Nlc3Npb24+ICZvdGhlcikgY29uc3QKLXsKLSAgICBpZiAob3RoZXItPnNlc3Npb24oKSA9PSBtUmVjb3JkQ2xpZW50SW5mby5zZXNzaW9uICYmCi0gICAgICAgIG90aGVyLT5pbnB1dFNvdXJjZSgpID09IG1SZWNvcmRDbGllbnRJbmZvLnNvdXJjZSAmJgotICAgICAgICBvdGhlci0+Zm9ybWF0KCkgPT0gbUNvbmZpZy5mb3JtYXQgJiYKLSAgICAgICAgb3RoZXItPnNhbXBsZVJhdGUoKSA9PSBtQ29uZmlnLnNhbXBsZV9yYXRlICYmCi0gICAgICAgIG90aGVyLT5jaGFubmVsTWFzaygpID09IG1Db25maWcuY2hhbm5lbF9tYXNrICYmCi0gICAgICAgIG90aGVyLT5mbGFncygpID09IG1GbGFncyAmJgotICAgICAgICBvdGhlci0+dWlkKCkgPT0gbVJlY29yZENsaWVudEluZm8udWlkKSB7Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLXZvaWQgQXVkaW9TZXNzaW9uOjpzZXRJbmZvUHJvdmlkZXIoQXVkaW9TZXNzaW9uSW5mb1Byb3ZpZGVyICpwcm92aWRlcikKLXsKLSAgICBtSW5mb1Byb3ZpZGVyID0gcHJvdmlkZXI7Ci19Ci0KLXZvaWQgQXVkaW9TZXNzaW9uOjpvblNlc3Npb25JbmZvVXBkYXRlKCkgY29uc3QKLXsKLSAgICBpZiAobUFjdGl2ZUNvdW50ID4gMCkgewotICAgICAgICAvLyByZXNlbmQgdGhlIGNhbGxiYWNrIGFmdGVyIHJlcXVlcnlpbmcgdGhlIGluZm9ybWF0aW9ucyBmcm9tIHRoZSBpbmZvIHByb3ZpZGVyCi0gICAgICAgIGNvbnN0IEF1ZGlvU2Vzc2lvbkluZm9Qcm92aWRlciogcHJvdmlkZXIgPSBtSW5mb1Byb3ZpZGVyOwotICAgICAgICBjb25zdCBhdWRpb19jb25maWdfYmFzZV90IGRldmljZUNvbmZpZyA9IChwcm92aWRlciAhPSBOVUxMKSA/IHByb3ZpZGVyLT5nZXRDb25maWcoKSA6Ci0gICAgICAgICAgICAgICAgQVVESU9fQ09ORklHX0JBU0VfSU5JVElBTElaRVI7Ci0gICAgICAgIGNvbnN0IGF1ZGlvX3BhdGNoX2hhbmRsZV90IHBhdGNoSGFuZGxlID0gKHByb3ZpZGVyICE9IE5VTEwpID8gcHJvdmlkZXItPmdldFBhdGNoSGFuZGxlKCkgOgotICAgICAgICAgICAgICAgIEFVRElPX1BBVENIX0hBTkRMRV9OT05FOwotICAgICAgICBpZiAocGF0Y2hIYW5kbGUgIT0gQVVESU9fUEFUQ0hfSEFORExFX05PTkUpIHsKLSAgICAgICAgICAgIG1DbGllbnRJbnRlcmZhY2UtPm9uUmVjb3JkaW5nQ29uZmlndXJhdGlvblVwZGF0ZShSRUNPUkRfQ09ORklHX0VWRU5UX1NUQVJULAotICAgICAgICAgICAgICAgICAgICAmbVJlY29yZENsaWVudEluZm8sICZtQ29uZmlnLCAmZGV2aWNlQ29uZmlnLCBwYXRjaEhhbmRsZSk7Ci0gICAgICAgIH0KLSAgICB9Ci19Ci0KLXN0YXR1c190IEF1ZGlvU2Vzc2lvbjo6ZHVtcChpbnQgZmQsIGludCBzcGFjZXMsIGludCBpbmRleCkgY29uc3QKLXsKLSAgICBjb25zdCBzaXplX3QgU0laRSA9IDI1NjsKLSAgICBjaGFyIGJ1ZmZlcltTSVpFXTsKLSAgICBTdHJpbmc4IHJlc3VsdDsKLQotICAgIHNucHJpbnRmKGJ1ZmZlciwgU0laRSwgIiUqc0F1ZGlvIHNlc3Npb24gJWQ6XG4iLCBzcGFjZXMsICIiLCBpbmRleCsxKTsKLSAgICByZXN1bHQuYXBwZW5kKGJ1ZmZlcik7Ci0gICAgc25wcmludGYoYnVmZmVyLCBTSVpFLCAiJSpzLSBzZXNzaW9uOiAlMmRcbiIsIHNwYWNlcywgIiIsIG1SZWNvcmRDbGllbnRJbmZvLnNlc3Npb24pOwotICAgIHJlc3VsdC5hcHBlbmQoYnVmZmVyKTsKLSAgICBzbnByaW50ZihidWZmZXIsIFNJWkUsICIlKnMtIG93bmVyIHVpZDogJTJkXG4iLCBzcGFjZXMsICIiLCBtUmVjb3JkQ2xpZW50SW5mby51aWQpOwotICAgIHJlc3VsdC5hcHBlbmQoYnVmZmVyKTsKLSAgICBzbnByaW50ZihidWZmZXIsIFNJWkUsICIlKnMtIGlucHV0IHNvdXJjZTogJWRcbiIsIHNwYWNlcywgIiIsIG1SZWNvcmRDbGllbnRJbmZvLnNvdXJjZSk7Ci0gICAgcmVzdWx0LmFwcGVuZChidWZmZXIpOwotICAgIHNucHJpbnRmKGJ1ZmZlciwgU0laRSwgIiUqcy0gZm9ybWF0OiAlMDh4XG4iLCBzcGFjZXMsICIiLCBtQ29uZmlnLmZvcm1hdCk7Ci0gICAgcmVzdWx0LmFwcGVuZChidWZmZXIpOwotICAgIHNucHJpbnRmKGJ1ZmZlciwgU0laRSwgIiUqcy0gc2FtcGxlOiAlZFxuIiwgc3BhY2VzLCAiIiwgbUNvbmZpZy5zYW1wbGVfcmF0ZSk7Ci0gICAgcmVzdWx0LmFwcGVuZChidWZmZXIpOwotICAgIHNucHJpbnRmKGJ1ZmZlciwgU0laRSwgIiUqcy0gY2hhbm5lbCBtYXNrOiAlMDh4XG4iLAotICAgICAgICAgICAgIHNwYWNlcywgIiIsIG1Db25maWcuY2hhbm5lbF9tYXNrKTsKLSAgICByZXN1bHQuYXBwZW5kKGJ1ZmZlcik7Ci0gICAgc25wcmludGYoYnVmZmVyLCBTSVpFLCAiJSpzLSBpcyBzb3VuZHRyaWdnZXI6ICVzXG4iLAotICAgICAgICAgICAgIHNwYWNlcywgIiIsIG1Jc1NvdW5kVHJpZ2dlciA/ICJ0cnVlIiA6ICJmYWxzZSIpOwotICAgIHJlc3VsdC5hcHBlbmQoYnVmZmVyKTsKLSAgICBzbnByaW50ZihidWZmZXIsIFNJWkUsICIlKnMtIG9wZW4gY291bnQ6ICVkXG4iLCBzcGFjZXMsICIiLCBtT3BlbkNvdW50KTsKLSAgICByZXN1bHQuYXBwZW5kKGJ1ZmZlcik7Ci0gICAgc25wcmludGYoYnVmZmVyLCBTSVpFLCAiJSpzLSBhY3RpdmUgY291bnQ6ICVkXG4iLCBzcGFjZXMsICIiLCBtQWN0aXZlQ291bnQpOwotICAgIHJlc3VsdC5hcHBlbmQoYnVmZmVyKTsKLQotICAgIHdyaXRlKGZkLCByZXN1bHQuc3RyaW5nKCksIHJlc3VsdC5zaXplKCkpOwotICAgIHJldHVybiBOT19FUlJPUjsKLX0KLQotc3RhdHVzX3QgQXVkaW9TZXNzaW9uQ29sbGVjdGlvbjo6YWRkU2Vzc2lvbihhdWRpb19zZXNzaW9uX3Qgc2Vzc2lvbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3A8QXVkaW9TZXNzaW9uPiYgYXVkaW9TZXNzaW9uLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBdWRpb1Nlc3Npb25JbmZvUHJvdmlkZXIgKnByb3ZpZGVyKQotewotICAgIHNzaXplX3QgaW5kZXggPSBpbmRleE9mS2V5KHNlc3Npb24pOwotCi0gICAgaWYgKGluZGV4ID49IDApIHsKLSAgICAgICAgQUxPR1coImFkZFNlc3Npb24oKSBzZXNzaW9uICVkIGFscmVhZHkgaW4iLCBzZXNzaW9uKTsKLSAgICAgICAgcmV0dXJuIEFMUkVBRFlfRVhJU1RTOwotICAgIH0KLSAgICBhdWRpb1Nlc3Npb24tPnNldEluZm9Qcm92aWRlcihwcm92aWRlcik7Ci0gICAgYWRkKHNlc3Npb24sIGF1ZGlvU2Vzc2lvbik7Ci0gICAgQUxPR1YoImFkZFNlc3Npb24oKSBzZXNzaW9uICVkICBjbGllbnQgJWQgc291cmNlICVkIiwKLSAgICAgICAgICAgIHNlc3Npb24sIGF1ZGlvU2Vzc2lvbi0+dWlkKCksIGF1ZGlvU2Vzc2lvbi0+aW5wdXRTb3VyY2UoKSk7Ci0gICAgcmV0dXJuIE5PX0VSUk9SOwotfQotCi1zdGF0dXNfdCBBdWRpb1Nlc3Npb25Db2xsZWN0aW9uOjpyZW1vdmVTZXNzaW9uKGF1ZGlvX3Nlc3Npb25fdCBzZXNzaW9uKQotewotICAgIHNzaXplX3QgaW5kZXggPSBpbmRleE9mS2V5KHNlc3Npb24pOwotCi0gICAgaWYgKGluZGV4IDwgMCkgewotICAgICAgICBBTE9HVygicmVtb3ZlU2Vzc2lvbigpIHNlc3Npb24gJWQgbm90IGluIiwgc2Vzc2lvbik7Ci0gICAgICAgIHJldHVybiBBTFJFQURZX0VYSVNUUzsKLSAgICB9Ci0gICAgQUxPR1YoInJlbW92ZVNlc3Npb24oKSBzZXNzaW9uICVkIiwgc2Vzc2lvbik7Ci0gICAgdmFsdWVBdChpbmRleCktPnNldEluZm9Qcm92aWRlcihOVUxMKTsKLSAgICByZW1vdmVJdGVtc0F0KGluZGV4KTsKLSAgICByZXR1cm4gTk9fRVJST1I7Ci19Ci0KLXVpbnQzMl90IEF1ZGlvU2Vzc2lvbkNvbGxlY3Rpb246OmdldE9wZW5Db3VudCgpIGNvbnN0Ci17Ci0gICAgdWludDMyX3Qgb3BlbkNvdW50ID0gMDsKLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHNpemUoKTsgaSsrKSB7Ci0gICAgICAgIG9wZW5Db3VudCArPSB2YWx1ZUF0KGkpLT5vcGVuQ291bnQoKTsKLSAgICB9Ci0gICAgcmV0dXJuIG9wZW5Db3VudDsKLX0KLQotQXVkaW9TZXNzaW9uQ29sbGVjdGlvbiBBdWRpb1Nlc3Npb25Db2xsZWN0aW9uOjpnZXRBY3RpdmVTZXNzaW9ucygpIGNvbnN0Ci17Ci0gICAgQXVkaW9TZXNzaW9uQ29sbGVjdGlvbiBhY3RpdmVTZXNzaW9uczsKLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHNpemUoKTsgaSsrKSB7Ci0gICAgICAgIGlmICh2YWx1ZUF0KGkpLT5hY3RpdmVDb3VudCgpICE9IDApIHsKLSAgICAgICAgICAgIGFjdGl2ZVNlc3Npb25zLmFkZCh2YWx1ZUF0KGkpLT5zZXNzaW9uKCksIHZhbHVlQXQoaSkpOwotICAgICAgICB9Ci0gICAgfQotICAgIHJldHVybiBhY3RpdmVTZXNzaW9uczsKLX0KLQotc2l6ZV90IEF1ZGlvU2Vzc2lvbkNvbGxlY3Rpb246OmdldEFjdGl2ZVNlc3Npb25Db3VudCgpIGNvbnN0Ci17Ci0gICAgc2l6ZV90IGFjdGl2ZUNvdW50ID0gMDsKLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHNpemUoKTsgaSsrKSB7Ci0gICAgICAgIGlmICh2YWx1ZUF0KGkpLT5hY3RpdmVDb3VudCgpICE9IDApIHsKLSAgICAgICAgICAgIGFjdGl2ZUNvdW50Kys7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgcmV0dXJuIGFjdGl2ZUNvdW50OwotfQotCi1ib29sIEF1ZGlvU2Vzc2lvbkNvbGxlY3Rpb246Omhhc0FjdGl2ZVNlc3Npb24oKSBjb25zdAotewotICAgIHJldHVybiBnZXRBY3RpdmVTZXNzaW9uQ291bnQoKSAhPSAwOwotfQotCi1ib29sIEF1ZGlvU2Vzc2lvbkNvbGxlY3Rpb246OmlzU291cmNlQWN0aXZlKGF1ZGlvX3NvdXJjZV90IHNvdXJjZSkgY29uc3QKLXsKLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHNpemUoKTsgaSsrKSB7Ci0gICAgICAgIGNvbnN0IHNwPEF1ZGlvU2Vzc2lvbj4gIGF1ZGlvU2Vzc2lvbiA9IHZhbHVlQXQoaSk7Ci0gICAgICAgIC8vIEFVRElPX1NPVVJDRV9IT1RXT1JEIGlzIGVxdWl2YWxlbnQgdG8gQVVESU9fU09VUkNFX1ZPSUNFX1JFQ09HTklUSU9OIG9ubHkgaWYgaXQKLSAgICAgICAgLy8gY29ycmVzcG9uZHMgdG8gYW4gYWN0aXZlIGNhcHR1cmUgdHJpZ2dlcmVkIGJ5IGEgaGFyZHdhcmUgaG90d29yZCByZWNvZ25pdGlvbgotICAgICAgICBpZiAoYXVkaW9TZXNzaW9uLT5hY3RpdmVDb3VudCgpID4gMCAmJgotICAgICAgICAgICAgICAgICgoYXVkaW9TZXNzaW9uLT5pbnB1dFNvdXJjZSgpID09IHNvdXJjZSkgfHwKLSAgICAgICAgICAgICAgICAoKHNvdXJjZSA9PSBBVURJT19TT1VSQ0VfVk9JQ0VfUkVDT0dOSVRJT04pICYmCi0gICAgICAgICAgICAgICAgIChhdWRpb1Nlc3Npb24tPmlucHV0U291cmNlKCkgPT0gQVVESU9fU09VUkNFX0hPVFdPUkQpICYmCi0gICAgICAgICAgICAgICAgIGF1ZGlvU2Vzc2lvbi0+aXNTb3VuZFRyaWdnZXIoKSkpKSB7Ci0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgfQotICAgIH0KLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLWF1ZGlvX3NvdXJjZV90IEF1ZGlvU2Vzc2lvbkNvbGxlY3Rpb246OmdldEhpZ2hlc3RQcmlvcml0eVNvdXJjZShib29sIGFjdGl2ZU9ubHkpIGNvbnN0Ci17Ci0gICAgYXVkaW9fc291cmNlX3Qgc291cmNlID0gQVVESU9fU09VUkNFX0RFRkFVTFQ7Ci0gICAgaW50MzJfdCBwcmlvcml0eSA9IC0xOwotCi0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBzaXplKCk7IGkrKykgewotICAgICAgICBjb25zdCBzcDxBdWRpb1Nlc3Npb24+ICBhdWRpb1Nlc3Npb24gPSB2YWx1ZUF0KGkpOwotICAgICAgICBpZiAoYWN0aXZlT25seSAmJiBhdWRpb1Nlc3Npb24tPmFjdGl2ZUNvdW50KCkgPT0gMCkgewotICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIH0KLSAgICAgICAgaW50MzJfdCBjdXJQcmlvcml0eSA9IHNvdXJjZV9wcmlvcml0eShhdWRpb1Nlc3Npb24tPmlucHV0U291cmNlKCkpOwotICAgICAgICBpZiAoY3VyUHJpb3JpdHkgPiBwcmlvcml0eSkgewotICAgICAgICAgICAgcHJpb3JpdHkgPSBjdXJQcmlvcml0eTsKLSAgICAgICAgICAgIHNvdXJjZSA9IGF1ZGlvU2Vzc2lvbi0+aW5wdXRTb3VyY2UoKTsKLSAgICAgICAgfQotICAgIH0KLSAgICByZXR1cm4gc291cmNlOwotfQotCi12b2lkIEF1ZGlvU2Vzc2lvbkNvbGxlY3Rpb246Om9uU2Vzc2lvbkluZm9VcGRhdGUoKSBjb25zdAotewotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgc2l6ZSgpOyBpKyspIHsKLSAgICAgICAgdmFsdWVBdChpKS0+b25TZXNzaW9uSW5mb1VwZGF0ZSgpOwotICAgIH0KLX0KLQotc3RhdHVzX3QgQXVkaW9TZXNzaW9uQ29sbGVjdGlvbjo6ZHVtcChpbnQgZmQsIGludCBzcGFjZXMpIGNvbnN0Ci17Ci0gICAgY29uc3Qgc2l6ZV90IFNJWkUgPSAyNTY7Ci0gICAgY2hhciBidWZmZXJbU0laRV07Ci0gICAgc25wcmludGYoYnVmZmVyLCBTSVpFLCAiJSpzQXVkaW8gU2Vzc2lvbnM6XG4iLCBzcGFjZXMsICIiKTsKLSAgICB3cml0ZShmZCwgYnVmZmVyLCBzdHJsZW4oYnVmZmVyKSk7Ci0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBzaXplKCk7IGkrKykgewotICAgICAgICB2YWx1ZUF0KGkpLT5kdW1wKGZkLCBzcGFjZXMgKyAyLCBpKTsKLSAgICB9Ci0gICAgcmV0dXJuIE5PX0VSUk9SOwotfQotCi19IC8vIG5hbWVzcGFjZSBhbmRyb2lkCmRpZmYgLS1naXQgYS9zZXJ2aWNlcy9hdWRpb3BvbGljeS9jb21tb24vbWFuYWdlcmRlZmluaXRpb25zL3NyYy9BdWRpb1NvdXJjZURlc2NyaXB0b3IuY3BwIGIvc2VydmljZXMvYXVkaW9wb2xpY3kvY29tbW9uL21hbmFnZXJkZWZpbml0aW9ucy9zcmMvQXVkaW9Tb3VyY2VEZXNjcmlwdG9yLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYmEzM2U1Ny4uMDAwMDAwMAotLS0gYS9zZXJ2aWNlcy9hdWRpb3BvbGljeS9jb21tb24vbWFuYWdlcmRlZmluaXRpb25zL3NyYy9BdWRpb1NvdXJjZURlc2NyaXB0b3IuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsNjQgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNSBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0Ci0gKgotICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7Ci0gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCi0gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLSAqCi0gKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotICoKLSAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKLSAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCi0gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KLSAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKLSAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgotICovCi0KLSNkZWZpbmUgTE9HX1RBRyAiQVBNOjpBdWRpb1NvdXJjZURlc2NyaXB0b3IiCi0vLyNkZWZpbmUgTE9HX05ERUJVRyAwCi0KLSNpbmNsdWRlIDx1dGlscy9Mb2cuaD4KLSNpbmNsdWRlIDx1dGlscy9TdHJpbmc4Lmg+Ci0jaW5jbHVkZSA8bWVkaWEvQXVkaW9Qb2xpY3lIZWxwZXIuaD4KLSNpbmNsdWRlIDxId01vZHVsZS5oPgotI2luY2x1ZGUgPEF1ZGlvR2Fpbi5oPgotI2luY2x1ZGUgPEF1ZGlvU291cmNlRGVzY3JpcHRvci5oPgotI2luY2x1ZGUgPERldmljZURlc2NyaXB0b3IuaD4KLSNpbmNsdWRlIDxJT1Byb2ZpbGUuaD4KLSNpbmNsdWRlIDxBdWRpb091dHB1dERlc2NyaXB0b3IuaD4KLQotbmFtZXNwYWNlIGFuZHJvaWQgewotCi1zdGF0dXNfdCBBdWRpb1NvdXJjZURlc2NyaXB0b3I6OmR1bXAoaW50IGZkKQotewotICAgIGNvbnN0IHNpemVfdCBTSVpFID0gMjU2OwotICAgIGNoYXIgYnVmZmVyW1NJWkVdOwotICAgIFN0cmluZzggcmVzdWx0OwotCi0gICAgc25wcmludGYoYnVmZmVyLCBTSVpFLCAibVN0cmVhbTogJWRcbiIsIGF1ZGlvX2F0dHJpYnV0ZXNfdG9fc3RyZWFtX3R5cGUoJm1BdHRyaWJ1dGVzKSk7Ci0gICAgcmVzdWx0LmFwcGVuZChidWZmZXIpOwotICAgIHNucHJpbnRmKGJ1ZmZlciwgU0laRSwgIm1EZXZpY2U6XG4iKTsKLSAgICByZXN1bHQuYXBwZW5kKGJ1ZmZlcik7Ci0gICAgd3JpdGUoZmQsIHJlc3VsdC5zdHJpbmcoKSwgcmVzdWx0LnNpemUoKSk7Ci0gICAgbURldmljZS0+ZHVtcChmZCwgMiAsIDApOwotICAgIHJldHVybiBOT19FUlJPUjsKLX0KLQotCi1zdGF0dXNfdCBBdWRpb1NvdXJjZUNvbGxlY3Rpb246OmR1bXAoaW50IGZkKSBjb25zdAotewotICAgIGNvbnN0IHNpemVfdCBTSVpFID0gMjU2OwotICAgIGNoYXIgYnVmZmVyW1NJWkVdOwotCi0gICAgc25wcmludGYoYnVmZmVyLCBTSVpFLCAiXG5BdWRpbyBzb3VyY2VzIGR1bXA6XG4iKTsKLSAgICB3cml0ZShmZCwgYnVmZmVyLCBzdHJsZW4oYnVmZmVyKSk7Ci0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBzaXplKCk7IGkrKykgewotICAgICAgICBzbnByaW50ZihidWZmZXIsIFNJWkUsICItIFNvdXJjZSAlZCBkdW1wOlxuIiwga2V5QXQoaSkpOwotICAgICAgICB3cml0ZShmZCwgYnVmZmVyLCBzdHJsZW4oYnVmZmVyKSk7Ci0gICAgICAgIHZhbHVlQXQoaSktPmR1bXAoZmQpOwotICAgIH0KLQotICAgIHJldHVybiBOT19FUlJPUjsKLX0KLQotfTsgLy9uYW1lc3BhY2UgYW5kcm9pZApkaWZmIC0tZ2l0IGEvc2VydmljZXMvYXVkaW9wb2xpY3kvY29tbW9uL21hbmFnZXJkZWZpbml0aW9ucy9zcmMvQ2xpZW50RGVzY3JpcHRvci5jcHAgYi9zZXJ2aWNlcy9hdWRpb3BvbGljeS9jb21tb24vbWFuYWdlcmRlZmluaXRpb25zL3NyYy9DbGllbnREZXNjcmlwdG9yLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44MTU2MTJkCi0tLSAvZGV2L251bGwKKysrIGIvc2VydmljZXMvYXVkaW9wb2xpY3kvY29tbW9uL21hbmFnZXJkZWZpbml0aW9ucy9zcmMvQ2xpZW50RGVzY3JpcHRvci5jcHAKQEAgLTAsMCArMSwxMDggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTggVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworCisjZGVmaW5lIExPR19UQUcgIkFQTV9DbGllbnREZXNjcmlwdG9yIgorLy8jZGVmaW5lIExPR19OREVCVUcgMAorCisjaW5jbHVkZSA8c3N0cmVhbT4KKyNpbmNsdWRlIDx1dGlscy9Mb2cuaD4KKyNpbmNsdWRlIDx1dGlscy9TdHJpbmc4Lmg+CisjaW5jbHVkZSAiQXVkaW9HYWluLmgiCisjaW5jbHVkZSAiQXVkaW9PdXRwdXREZXNjcmlwdG9yLmgiCisjaW5jbHVkZSAiQXVkaW9QYXRjaC5oIgorI2luY2x1ZGUgIkNsaWVudERlc2NyaXB0b3IuaCIKKyNpbmNsdWRlICJEZXZpY2VEZXNjcmlwdG9yLmgiCisjaW5jbHVkZSAiSHdNb2R1bGUuaCIKKyNpbmNsdWRlICJJT1Byb2ZpbGUuaCIKKworbmFtZXNwYWNlIGFuZHJvaWQgeworCitzdGQ6OnN0cmluZyBDbGllbnREZXNjcmlwdG9yOjp0b1Nob3J0U3RyaW5nKCkgY29uc3QKK3sKKyAgICBzdGQ6OnN0cmluZ3N0cmVhbSBzczsKKworICAgIHNzIDw8ICJQb3J0SWQ6ICIgPDwgbVBvcnRJZCA8PCAiIFNlc3Npb25JZDogIiA8PCBtU2Vzc2lvbklkIDw8ICIgVWlkOiAiIDw8IG1VaWQ7CisgICAgcmV0dXJuIHNzLnN0cigpOworfQorCit2b2lkIENsaWVudERlc2NyaXB0b3I6OmR1bXAoU3RyaW5nOCAqZHN0LCBpbnQgc3BhY2VzLCBpbnQgaW5kZXgpIGNvbnN0Cit7CisgICAgZHN0LT5hcHBlbmRGb3JtYXQoIiUqc0NsaWVudCAlZDpcbiIsIHNwYWNlcywgIiIsIGluZGV4KzEpOworICAgIGRzdC0+YXBwZW5kRm9ybWF0KCIlKnMtIFBvcnQgSWQ6ICVkIFNlc3Npb24gSWQ6ICVkIFVJRDogJWRcbiIsIHNwYWNlcywgIiIsCisgICAgICAgICAgICAgbVBvcnRJZCwgbVNlc3Npb25JZCwgbVVpZCk7CisgICAgZHN0LT5hcHBlbmRGb3JtYXQoIiUqcy0gRm9ybWF0OiAlMDh4IFNhbXBsaW5nIHJhdGU6ICVkIENoYW5uZWxzOiAlMDh4XG4iLCBzcGFjZXMsICIiLAorICAgICAgICAgICAgIG1Db25maWcuZm9ybWF0LCBtQ29uZmlnLnNhbXBsZV9yYXRlLCBtQ29uZmlnLmNoYW5uZWxfbWFzayk7CisgICAgZHN0LT5hcHBlbmRGb3JtYXQoIiUqcy0gUHJlZmVycmVkIERldmljZSBJZDogJTA4eFxuIiwgc3BhY2VzLCAiIiwgbVByZWZlcnJlZERldmljZUlkKTsKKyAgICBkc3QtPmFwcGVuZEZvcm1hdCgiJSpzLSBTdGF0ZTogJXNcbiIsIHNwYWNlcywgIiIsIG1BY3RpdmUgPyAiQWN0aXZlIiA6ICJJbmFjdGl2ZSIpOworfQorCit2b2lkIFRyYWNrQ2xpZW50RGVzY3JpcHRvcjo6ZHVtcChTdHJpbmc4ICpkc3QsIGludCBzcGFjZXMsIGludCBpbmRleCkgY29uc3QKK3sKKyAgICBDbGllbnREZXNjcmlwdG9yOjpkdW1wKGRzdCwgc3BhY2VzLCBpbmRleCk7CisgICAgZHN0LT5hcHBlbmRGb3JtYXQoIiUqcy0gU3RyZWFtOiAlZCBmbGFnczogJTA4eFxuIiwgc3BhY2VzLCAiIiwgbVN0cmVhbSwgbUZsYWdzKTsKK30KKworc3RkOjpzdHJpbmcgVHJhY2tDbGllbnREZXNjcmlwdG9yOjp0b1Nob3J0U3RyaW5nKCkgY29uc3QKK3sKKyAgICBzdGQ6OnN0cmluZ3N0cmVhbSBzczsKKworICAgIHNzIDw8IENsaWVudERlc2NyaXB0b3I6OnRvU2hvcnRTdHJpbmcoKSA8PCAiIFN0cmVhbTogIiA8PCBtU3RyZWFtOworICAgIHJldHVybiBzcy5zdHIoKTsKK30KKwordm9pZCBSZWNvcmRDbGllbnREZXNjcmlwdG9yOjpkdW1wKFN0cmluZzggKmRzdCwgaW50IHNwYWNlcywgaW50IGluZGV4KSBjb25zdAoreworICAgIENsaWVudERlc2NyaXB0b3I6OmR1bXAoZHN0LCBzcGFjZXMsIGluZGV4KTsKKyAgICBkc3QtPmFwcGVuZEZvcm1hdCgiJSpzLSBTb3VyY2U6ICVkIGZsYWdzOiAlMDh4XG4iLCBzcGFjZXMsICIiLCBtU291cmNlLCBtRmxhZ3MpOworfQorCitTb3VyY2VDbGllbnREZXNjcmlwdG9yOjpTb3VyY2VDbGllbnREZXNjcmlwdG9yKGF1ZGlvX3BvcnRfaGFuZGxlX3QgcG9ydElkLCB1aWRfdCB1aWQsCisgICAgICAgICBhdWRpb19hdHRyaWJ1dGVzX3QgYXR0cmlidXRlcywgY29uc3Qgc3A8QXVkaW9QYXRjaD4mIHBhdGNoRGVzYywKKyAgICAgICAgIGNvbnN0IHNwPERldmljZURlc2NyaXB0b3I+JiBzcmNEZXZpY2UsIGF1ZGlvX3N0cmVhbV90eXBlX3Qgc3RyZWFtLAorICAgICAgICAgcm91dGluZ19zdHJhdGVneSBzdHJhdGVneSkgOgorICAgIFRyYWNrQ2xpZW50RGVzY3JpcHRvcjo6VHJhY2tDbGllbnREZXNjcmlwdG9yKHBvcnRJZCwgdWlkLCBBVURJT19TRVNTSU9OX05PTkUsIGF0dHJpYnV0ZXMsCisgICAgICAgIEFVRElPX0NPTkZJR19CQVNFX0lOSVRJQUxJWkVSLCBBVURJT19QT1JUX0hBTkRMRV9OT05FLAorICAgICAgICBzdHJlYW0sIHN0cmF0ZWd5LCBBVURJT19PVVRQVVRfRkxBR19OT05FKSwKKyAgICAgICAgbVBhdGNoRGVzYyhwYXRjaERlc2MpLCBtU3JjRGV2aWNlKHNyY0RldmljZSkKK3sKK30KKwordm9pZCBTb3VyY2VDbGllbnREZXNjcmlwdG9yOjpzZXRTd091dHB1dChjb25zdCBzcDxTd0F1ZGlvT3V0cHV0RGVzY3JpcHRvcj4mIHN3T3V0cHV0KQoreworICAgIG1Td091dHB1dCA9IHN3T3V0cHV0OworfQorCit2b2lkIFNvdXJjZUNsaWVudERlc2NyaXB0b3I6OnNldEh3T3V0cHV0KGNvbnN0IHNwPEh3QXVkaW9PdXRwdXREZXNjcmlwdG9yPiYgaHdPdXRwdXQpCit7CisgICAgbUh3T3V0cHV0ID0gaHdPdXRwdXQ7Cit9CisKK3ZvaWQgU291cmNlQ2xpZW50RGVzY3JpcHRvcjo6ZHVtcChTdHJpbmc4ICpkc3QsIGludCBzcGFjZXMsIGludCBpbmRleCkgY29uc3QKK3sKKyAgICBUcmFja0NsaWVudERlc2NyaXB0b3I6OmR1bXAoZHN0LCBzcGFjZXMsIGluZGV4KTsKKyAgICBkc3QtPmFwcGVuZEZvcm1hdCgiJSpzLSBEZXZpY2U6XG4iLCBzcGFjZXMsICIiKTsKKyAgICBtU3JjRGV2aWNlLT5kdW1wKGRzdCwgMiwgMCk7Cit9CisKK3ZvaWQgU291cmNlQ2xpZW50Q29sbGVjdGlvbjo6ZHVtcChTdHJpbmc4ICpkc3QpIGNvbnN0Cit7CisgICAgZHN0LT5hcHBlbmQoIlxuQXVkaW8gc291cmNlczpcbiIpOworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgc2l6ZSgpOyBpKyspIHsKKyAgICAgICAgdmFsdWVBdChpKS0+ZHVtcChkc3QsIDIsIGkpOworICAgIH0KK30KKworfTsgLy9uYW1lc3BhY2UgYW5kcm9pZApkaWZmIC0tZ2l0IGEvc2VydmljZXMvYXVkaW9wb2xpY3kvY29tbW9uL21hbmFnZXJkZWZpbml0aW9ucy9zcmMvQ29uZmlnUGFyc2luZ1V0aWxzLmNwcCBiL3NlcnZpY2VzL2F1ZGlvcG9saWN5L2NvbW1vbi9tYW5hZ2VyZGVmaW5pdGlvbnMvc3JjL0NvbmZpZ1BhcnNpbmdVdGlscy5jcHAKaW5kZXggMWUxMDVmNS4uNTlkYjgxYyAxMDA2NDQKLS0tIGEvc2VydmljZXMvYXVkaW9wb2xpY3kvY29tbW9uL21hbmFnZXJkZWZpbml0aW9ucy9zcmMvQ29uZmlnUGFyc2luZ1V0aWxzLmNwcAorKysgYi9zZXJ2aWNlcy9hdWRpb3BvbGljeS9jb21tb24vbWFuYWdlcmRlZmluaXRpb25zL3NyYy9Db25maWdQYXJzaW5nVXRpbHMuY3BwCkBAIC00MDcsMTEgKzQwNywxNCBAQAogCiAgICAgY29uZmlnLnNldEh3TW9kdWxlcyhod01vZHVsZXMpOwogCisgICAgY29uZmlnLnNldERlZmF1bHRTdXJyb3VuZEZvcm1hdHMoKTsKKwogICAgIGNvbmZpZ19mcmVlKHJvb3QpOwogICAgIGZyZWUocm9vdCk7CiAgICAgZnJlZShkYXRhKTsKIAogICAgIEFMT0dJKCJsb2FkQXVkaW9Qb2xpY3lDb25maWcoKSBsb2FkZWQgJXNcbiIsIHBhdGgpOworICAgIGNvbmZpZy5zZXRTb3VyY2UocGF0aCk7CiAKICAgICByZXR1cm4gTk9fRVJST1I7CiB9CmRpZmYgLS1naXQgYS9zZXJ2aWNlcy9hdWRpb3BvbGljeS9jb21tb24vbWFuYWdlcmRlZmluaXRpb25zL3NyYy9EZXZpY2VEZXNjcmlwdG9yLmNwcCBiL3NlcnZpY2VzL2F1ZGlvcG9saWN5L2NvbW1vbi9tYW5hZ2VyZGVmaW5pdGlvbnMvc3JjL0RldmljZURlc2NyaXB0b3IuY3BwCmluZGV4IDE5YzIwNjIuLmE5ZjcyMjAgMTAwNjQ0Ci0tLSBhL3NlcnZpY2VzL2F1ZGlvcG9saWN5L2NvbW1vbi9tYW5hZ2VyZGVmaW5pdGlvbnMvc3JjL0RldmljZURlc2NyaXB0b3IuY3BwCisrKyBiL3NlcnZpY2VzL2F1ZGlvcG9saWN5L2NvbW1vbi9tYW5hZ2VyZGVmaW5pdGlvbnMvc3JjL0RldmljZURlc2NyaXB0b3IuY3BwCkBAIC0xMjEsMTcgKzEyMSwyOCBAQAogICAgIHJldHVybiByZXQ7CiB9CiAKLWF1ZGlvX2RldmljZXNfdCBEZXZpY2VWZWN0b3I6OmdldERldmljZXNGcm9tSHdNb2R1bGUoYXVkaW9fbW9kdWxlX2hhbmRsZV90IG1vZHVsZUhhbmRsZSkgY29uc3QKK0RldmljZVZlY3RvciBEZXZpY2VWZWN0b3I6OmdldERldmljZXNGcm9tSHdNb2R1bGUoYXVkaW9fbW9kdWxlX2hhbmRsZV90IG1vZHVsZUhhbmRsZSkgY29uc3QKIHsKLSAgICBhdWRpb19kZXZpY2VzX3QgZGV2aWNlcyA9IEFVRElPX0RFVklDRV9OT05FOwotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgc2l6ZSgpOyBpKyspIHsKLSAgICAgICAgaWYgKGl0ZW1BdChpKS0+Z2V0TW9kdWxlSGFuZGxlKCkgPT0gbW9kdWxlSGFuZGxlKSB7Ci0gICAgICAgICAgICBkZXZpY2VzIHw9IGl0ZW1BdChpKS0+dHlwZSgpOworICAgIERldmljZVZlY3RvciBkZXZpY2VzOworICAgIGZvciAoY29uc3QgYXV0byYgZGV2aWNlIDogKnRoaXMpIHsKKyAgICAgICAgaWYgKGRldmljZS0+Z2V0TW9kdWxlSGFuZGxlKCkgPT0gbW9kdWxlSGFuZGxlKSB7CisgICAgICAgICAgICBkZXZpY2VzLmFkZChkZXZpY2UpOwogICAgICAgICB9CiAgICAgfQogICAgIHJldHVybiBkZXZpY2VzOwogfQogCithdWRpb19kZXZpY2VzX3QgRGV2aWNlVmVjdG9yOjpnZXREZXZpY2VUeXBlc0Zyb21Id01vZHVsZShhdWRpb19tb2R1bGVfaGFuZGxlX3QgbW9kdWxlSGFuZGxlKSBjb25zdAoreworICAgIGF1ZGlvX2RldmljZXNfdCBkZXZpY2VUeXBlcyA9IEFVRElPX0RFVklDRV9OT05FOworICAgIGZvciAoY29uc3QgYXV0byYgZGV2aWNlIDogKnRoaXMpIHsKKyAgICAgICAgaWYgKGRldmljZS0+Z2V0TW9kdWxlSGFuZGxlKCkgPT0gbW9kdWxlSGFuZGxlKSB7CisgICAgICAgICAgICBkZXZpY2VUeXBlcyB8PSBkZXZpY2UtPnR5cGUoKTsKKyAgICAgICAgfQorICAgIH0KKyAgICByZXR1cm4gZGV2aWNlVHlwZXM7Cit9CisKIHNwPERldmljZURlc2NyaXB0b3I+IERldmljZVZlY3Rvcjo6Z2V0RGV2aWNlKGF1ZGlvX2RldmljZXNfdCB0eXBlLCBjb25zdCBTdHJpbmc4JiBhZGRyZXNzKSBjb25zdAogewogICAgIHNwPERldmljZURlc2NyaXB0b3I+IGRldmljZTsKQEAgLTE0NSw4ICsxNTYsOCBAQAogICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgfQotICAgIEFMT0dWKCJEZXZpY2VWZWN0b3I6OmdldERldmljZSgpIGZvciB0eXBlICUwOHggYWRkcmVzcyAlcyBmb3VuZCAlcCIsCi0gICAgICAgICAgdHlwZSwgYWRkcmVzcy5zdHJpbmcoKSwgZGV2aWNlLmdldCgpKTsKKyAgICBBTE9HVigiRGV2aWNlVmVjdG9yOjolcygpIGZvciB0eXBlICUwOHggYWRkcmVzcyBcIiVzXCIgZm91bmQgJXAiLAorICAgICAgICAgICAgX19mdW5jX18sIHR5cGUsIGFkZHJlc3Muc3RyaW5nKCksIGRldmljZS5nZXQoKSk7CiAgICAgcmV0dXJuIGRldmljZTsKIH0KIApAQCAtMTYwLDcgKzE3MSw3IEBACiAgICAgcmV0dXJuIG51bGxwdHI7CiB9CiAKLURldmljZVZlY3RvciBEZXZpY2VWZWN0b3I6OmdldERldmljZXNGcm9tVHlwZShhdWRpb19kZXZpY2VzX3QgdHlwZSkgY29uc3QKK0RldmljZVZlY3RvciBEZXZpY2VWZWN0b3I6OmdldERldmljZXNGcm9tVHlwZU1hc2soYXVkaW9fZGV2aWNlc190IHR5cGUpIGNvbnN0CiB7CiAgICAgRGV2aWNlVmVjdG9yIGRldmljZXM7CiAgICAgYm9vbCBpc091dHB1dCA9IGF1ZGlvX2lzX291dHB1dF9kZXZpY2VzKHR5cGUpOwpAQCAtMTcxLDIwICsxODIsOCBAQAogICAgICAgICBpZiAoKGlzT3V0cHV0ID09IGN1cklzT3V0cHV0KSAmJiAoKHR5cGUgJiBjdXJUeXBlKSAhPSAwKSkgewogICAgICAgICAgICAgZGV2aWNlcy5hZGQoaXRlbUF0KGkpKTsKICAgICAgICAgICAgIHR5cGUgJj0gfmN1clR5cGU7Ci0gICAgICAgICAgICBBTE9HVigiRGV2aWNlVmVjdG9yOjpnZXREZXZpY2VzRnJvbVR5cGUoKSBmb3IgdHlwZSAleCBmb3VuZCAlcCIsCi0gICAgICAgICAgICAgICAgICBpdGVtQXQoaSktPnR5cGUoKSwgaXRlbUF0KGkpLmdldCgpKTsKLSAgICAgICAgfQotICAgIH0KLSAgICByZXR1cm4gZGV2aWNlczsKLX0KLQotRGV2aWNlVmVjdG9yIERldmljZVZlY3Rvcjo6Z2V0RGV2aWNlc0Zyb21UeXBlQWRkcigKLSAgICAgICAgYXVkaW9fZGV2aWNlc190IHR5cGUsIGNvbnN0IFN0cmluZzgmIGFkZHJlc3MpIGNvbnN0Ci17Ci0gICAgRGV2aWNlVmVjdG9yIGRldmljZXM7Ci0gICAgZm9yIChjb25zdCBhdXRvJiBkZXZpY2UgOiAqdGhpcykgewotICAgICAgICBpZiAoZGV2aWNlLT50eXBlKCkgPT0gdHlwZSAmJiBkZXZpY2UtPm1BZGRyZXNzID09IGFkZHJlc3MpIHsKLSAgICAgICAgICAgIGRldmljZXMuYWRkKGRldmljZSk7CisgICAgICAgICAgICBBTE9HVigiRGV2aWNlVmVjdG9yOjolcygpIGZvciB0eXBlICUwOHggZm91bmQgJXAiLAorICAgICAgICAgICAgICAgICAgICBfX2Z1bmNfXywgaXRlbUF0KGkpLT50eXBlKCksIGl0ZW1BdChpKS5nZXQoKSk7CiAgICAgICAgIH0KICAgICB9CiAgICAgcmV0dXJuIGRldmljZXM7CkBAIC0yMDAsMjAgKzE5OSwxNSBAQAogICAgIHJldHVybiBudWxscHRyOwogfQogCi1zdGF0dXNfdCBEZXZpY2VWZWN0b3I6OmR1bXAoaW50IGZkLCBjb25zdCBTdHJpbmc4ICZ0YWcsIGludCBzcGFjZXMsIGJvb2wgdmVyYm9zZSkgY29uc3QKK3ZvaWQgRGV2aWNlVmVjdG9yOjpkdW1wKFN0cmluZzggKmRzdCwgY29uc3QgU3RyaW5nOCAmdGFnLCBpbnQgc3BhY2VzLCBib29sIHZlcmJvc2UpIGNvbnN0CiB7CiAgICAgaWYgKGlzRW1wdHkoKSkgewotICAgICAgICByZXR1cm4gTk9fRVJST1I7CisgICAgICAgIHJldHVybjsKICAgICB9Ci0gICAgY29uc3Qgc2l6ZV90IFNJWkUgPSAyNTY7Ci0gICAgY2hhciBidWZmZXJbU0laRV07Ci0KLSAgICBzbnByaW50ZihidWZmZXIsIFNJWkUsICIlKnMtICVzIGRldmljZXM6XG4iLCBzcGFjZXMsICIiLCB0YWcuc3RyaW5nKCkpOwotICAgIHdyaXRlKGZkLCBidWZmZXIsIHN0cmxlbihidWZmZXIpKTsKKyAgICBkc3QtPmFwcGVuZEZvcm1hdCgiJSpzLSAlcyBkZXZpY2VzOlxuIiwgc3BhY2VzLCAiIiwgdGFnLnN0cmluZygpKTsKICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHNpemUoKTsgaSsrKSB7Ci0gICAgICAgIGl0ZW1BdChpKS0+ZHVtcChmZCwgc3BhY2VzICsgMiwgaSwgdmVyYm9zZSk7CisgICAgICAgIGl0ZW1BdChpKS0+ZHVtcChkc3QsIHNwYWNlcyArIDIsIGksIHZlcmJvc2UpOwogICAgIH0KLSAgICByZXR1cm4gTk9fRVJST1I7CiB9CiAKIHZvaWQgRGV2aWNlRGVzY3JpcHRvcjo6dG9BdWRpb1BvcnRDb25maWcoc3RydWN0IGF1ZGlvX3BvcnRfY29uZmlnICpkc3RDb25maWcsCkBAIC0yNTMsNyArMjQ3LDcgQEAKIAogdm9pZCBEZXZpY2VEZXNjcmlwdG9yOjp0b0F1ZGlvUG9ydChzdHJ1Y3QgYXVkaW9fcG9ydCAqcG9ydCkgY29uc3QKIHsKLSAgICBBTE9HVigiRGV2aWNlRGVzY3JpcHRvcjo6dG9BdWRpb1BvcnQoKSBoYW5kbGUgJWQgdHlwZSAleCIsIG1JZCwgbURldmljZVR5cGUpOworICAgIEFMT0dWKCJEZXZpY2VEZXNjcmlwdG9yOjp0b0F1ZGlvUG9ydCgpIGhhbmRsZSAlZCB0eXBlICUwOHgiLCBtSWQsIG1EZXZpY2VUeXBlKTsKICAgICBBdWRpb1BvcnQ6OnRvQXVkaW9Qb3J0KHBvcnQpOwogICAgIHBvcnQtPmlkID0gbUlkOwogICAgIHRvQXVkaW9Qb3J0Q29uZmlnKCZwb3J0LT5hY3RpdmVfY29uZmlnKTsKQEAgLTI3MCw0MiArMjY0LDMwIEBACiAgICAgcG9ydC0+cGlja0F1ZGlvUHJvZmlsZShtU2FtcGxpbmdSYXRlLCBtQ2hhbm5lbE1hc2ssIG1Gb3JtYXQpOwogfQogCi1zdGF0dXNfdCBEZXZpY2VEZXNjcmlwdG9yOjpkdW1wKGludCBmZCwgaW50IHNwYWNlcywgaW50IGluZGV4LCBib29sIHZlcmJvc2UpIGNvbnN0Cit2b2lkIERldmljZURlc2NyaXB0b3I6OmR1bXAoU3RyaW5nOCAqZHN0LCBpbnQgc3BhY2VzLCBpbnQgaW5kZXgsIGJvb2wgdmVyYm9zZSkgY29uc3QKIHsKLSAgICBjb25zdCBzaXplX3QgU0laRSA9IDI1NjsKLSAgICBjaGFyIGJ1ZmZlcltTSVpFXTsKLSAgICBTdHJpbmc4IHJlc3VsdDsKLQotICAgIHNucHJpbnRmKGJ1ZmZlciwgU0laRSwgIiUqc0RldmljZSAlZDpcbiIsIHNwYWNlcywgIiIsIGluZGV4KzEpOwotICAgIHJlc3VsdC5hcHBlbmQoYnVmZmVyKTsKKyAgICBkc3QtPmFwcGVuZEZvcm1hdCgiJSpzRGV2aWNlICVkOlxuIiwgc3BhY2VzLCAiIiwgaW5kZXggKyAxKTsKICAgICBpZiAobUlkICE9IDApIHsKLSAgICAgICAgc25wcmludGYoYnVmZmVyLCBTSVpFLCAiJSpzLSBpZDogJTJkXG4iLCBzcGFjZXMsICIiLCBtSWQpOwotICAgICAgICByZXN1bHQuYXBwZW5kKGJ1ZmZlcik7CisgICAgICAgIGRzdC0+YXBwZW5kRm9ybWF0KCIlKnMtIGlkOiAlMmRcbiIsIHNwYWNlcywgIiIsIG1JZCk7CiAgICAgfQogICAgIGlmICghbVRhZ05hbWUuaXNFbXB0eSgpKSB7Ci0gICAgICAgIHNucHJpbnRmKGJ1ZmZlciwgU0laRSwgIiUqcy0gdGFnIG5hbWU6ICVzXG4iLCBzcGFjZXMsICIiLCBtVGFnTmFtZS5zdHJpbmcoKSk7Ci0gICAgICAgIHJlc3VsdC5hcHBlbmQoYnVmZmVyKTsKKyAgICAgICAgZHN0LT5hcHBlbmRGb3JtYXQoIiUqcy0gdGFnIG5hbWU6ICVzXG4iLCBzcGFjZXMsICIiLCBtVGFnTmFtZS5zdHJpbmcoKSk7CiAgICAgfQogICAgIHN0ZDo6c3RyaW5nIGRldmljZUxpdGVyYWw7CiAgICAgaWYgKGRldmljZVRvU3RyaW5nKG1EZXZpY2VUeXBlLCBkZXZpY2VMaXRlcmFsKSkgewotICAgICAgICBzbnByaW50ZihidWZmZXIsIFNJWkUsICIlKnMtIHR5cGU6ICUtNDhzXG4iLCBzcGFjZXMsICIiLCBkZXZpY2VMaXRlcmFsLmNfc3RyKCkpOwotICAgICAgICByZXN1bHQuYXBwZW5kKGJ1ZmZlcik7CisgICAgICAgIGRzdC0+YXBwZW5kRm9ybWF0KCIlKnMtIHR5cGU6ICUtNDhzXG4iLCBzcGFjZXMsICIiLCBkZXZpY2VMaXRlcmFsLmNfc3RyKCkpOwogICAgIH0KICAgICBpZiAobUFkZHJlc3Muc2l6ZSgpICE9IDApIHsKLSAgICAgICAgc25wcmludGYoYnVmZmVyLCBTSVpFLCAiJSpzLSBhZGRyZXNzOiAlLTMyc1xuIiwgc3BhY2VzLCAiIiwgbUFkZHJlc3Muc3RyaW5nKCkpOwotICAgICAgICByZXN1bHQuYXBwZW5kKGJ1ZmZlcik7CisgICAgICAgIGRzdC0+YXBwZW5kRm9ybWF0KCIlKnMtIGFkZHJlc3M6ICUtMzJzXG4iLCBzcGFjZXMsICIiLCBtQWRkcmVzcy5zdHJpbmcoKSk7CiAgICAgfQotICAgIHdyaXRlKGZkLCByZXN1bHQuc3RyaW5nKCksIHJlc3VsdC5zaXplKCkpOwotICAgIEF1ZGlvUG9ydDo6ZHVtcChmZCwgc3BhY2VzLCB2ZXJib3NlKTsKLQotICAgIHJldHVybiBOT19FUlJPUjsKKyAgICBBdWRpb1BvcnQ6OmR1bXAoZHN0LCBzcGFjZXMsIHZlcmJvc2UpOwogfQogCiB2b2lkIERldmljZURlc2NyaXB0b3I6OmxvZygpIGNvbnN0CiB7CiAgICAgc3RkOjpzdHJpbmcgZGV2aWNlOwogICAgIGRldmljZVRvU3RyaW5nKG1EZXZpY2VUeXBlLCBkZXZpY2UpOwotICAgIEFMT0dJKCJEZXZpY2UgaWQ6JWQgdHlwZToweCVYOiVzLCBhZGRyOiVzIiwgbUlkLCAgbURldmljZVR5cGUsIGRldmljZS5jX3N0cigpLAorICAgIEFMT0dJKCJEZXZpY2UgaWQ6JWQgdHlwZToweCUwOFg6JXMsIGFkZHI6JXMiLCBtSWQsICBtRGV2aWNlVHlwZSwgZGV2aWNlLmNfc3RyKCksCiAgICAgICAgICAgbUFkZHJlc3Muc3RyaW5nKCkpOwogCiAgICAgQXVkaW9Qb3J0Ojpsb2coIiAgIik7CmRpZmYgLS1naXQgYS9zZXJ2aWNlcy9hdWRpb3BvbGljeS9jb21tb24vbWFuYWdlcmRlZmluaXRpb25zL3NyYy9FZmZlY3REZXNjcmlwdG9yLmNwcCBiL3NlcnZpY2VzL2F1ZGlvcG9saWN5L2NvbW1vbi9tYW5hZ2VyZGVmaW5pdGlvbnMvc3JjL0VmZmVjdERlc2NyaXB0b3IuY3BwCmluZGV4IDdiMjM0MWUuLjhiYmI3OTggMTAwNjQ0Ci0tLSBhL3NlcnZpY2VzL2F1ZGlvcG9saWN5L2NvbW1vbi9tYW5hZ2VyZGVmaW5pdGlvbnMvc3JjL0VmZmVjdERlc2NyaXB0b3IuY3BwCisrKyBiL3NlcnZpY2VzL2F1ZGlvcG9saWN5L2NvbW1vbi9tYW5hZ2VyZGVmaW5pdGlvbnMvc3JjL0VmZmVjdERlc2NyaXB0b3IuY3BwCkBAIC0yMiwyNSArMjIsMTMgQEAKIAogbmFtZXNwYWNlIGFuZHJvaWQgewogCi1zdGF0dXNfdCBFZmZlY3REZXNjcmlwdG9yOjpkdW1wKGludCBmZCkKK3ZvaWQgRWZmZWN0RGVzY3JpcHRvcjo6ZHVtcChTdHJpbmc4ICpkc3QpIGNvbnN0CiB7Ci0gICAgY29uc3Qgc2l6ZV90IFNJWkUgPSAyNTY7Ci0gICAgY2hhciBidWZmZXJbU0laRV07Ci0gICAgU3RyaW5nOCByZXN1bHQ7Ci0KLSAgICBzbnByaW50ZihidWZmZXIsIFNJWkUsICIgSS9POiAlZFxuIiwgbUlvKTsKLSAgICByZXN1bHQuYXBwZW5kKGJ1ZmZlcik7Ci0gICAgc25wcmludGYoYnVmZmVyLCBTSVpFLCAiIFN0cmF0ZWd5OiAlZFxuIiwgbVN0cmF0ZWd5KTsKLSAgICByZXN1bHQuYXBwZW5kKGJ1ZmZlcik7Ci0gICAgc25wcmludGYoYnVmZmVyLCBTSVpFLCAiIFNlc3Npb246ICVkXG4iLCBtU2Vzc2lvbik7Ci0gICAgcmVzdWx0LmFwcGVuZChidWZmZXIpOwotICAgIHNucHJpbnRmKGJ1ZmZlciwgU0laRSwgIiBOYW1lOiAlc1xuIiwgIG1EZXNjLm5hbWUpOwotICAgIHJlc3VsdC5hcHBlbmQoYnVmZmVyKTsKLSAgICBzbnByaW50ZihidWZmZXIsIFNJWkUsICIgJXNcbiIsICBtRW5hYmxlZCA/ICJFbmFibGVkIiA6ICJEaXNhYmxlZCIpOwotICAgIHJlc3VsdC5hcHBlbmQoYnVmZmVyKTsKLSAgICB3cml0ZShmZCwgcmVzdWx0LnN0cmluZygpLCByZXN1bHQuc2l6ZSgpKTsKLQotICAgIHJldHVybiBOT19FUlJPUjsKKyAgICBkc3QtPmFwcGVuZEZvcm1hdCgiIEkvTzogJWRcbiIsIG1Jbyk7CisgICAgZHN0LT5hcHBlbmRGb3JtYXQoIiBTdHJhdGVneTogJWRcbiIsIG1TdHJhdGVneSk7CisgICAgZHN0LT5hcHBlbmRGb3JtYXQoIiBTZXNzaW9uOiAlZFxuIiwgbVNlc3Npb24pOworICAgIGRzdC0+YXBwZW5kRm9ybWF0KCIgTmFtZTogJXNcbiIsICBtRGVzYy5uYW1lKTsKKyAgICBkc3QtPmFwcGVuZEZvcm1hdCgiICVzXG4iLCAgbUVuYWJsZWQgPyAiRW5hYmxlZCIgOiAiRGlzYWJsZWQiKTsKIH0KIAogRWZmZWN0RGVzY3JpcHRvckNvbGxlY3Rpb246OkVmZmVjdERlc2NyaXB0b3JDb2xsZWN0aW9uKCkgOgpAQCAtMTc0LDI0ICsxNjIsMTYgQEAKICAgICByZXR1cm4gTUFYX0VGRkVDVFNfTUVNT1JZOwogfQogCi1zdGF0dXNfdCBFZmZlY3REZXNjcmlwdG9yQ29sbGVjdGlvbjo6ZHVtcChpbnQgZmQpCit2b2lkIEVmZmVjdERlc2NyaXB0b3JDb2xsZWN0aW9uOjpkdW1wKFN0cmluZzggKmRzdCkgY29uc3QKIHsKLSAgICBjb25zdCBzaXplX3QgU0laRSA9IDI1NjsKLSAgICBjaGFyIGJ1ZmZlcltTSVpFXTsKLQotICAgIHNucHJpbnRmKGJ1ZmZlciwgU0laRSwKKyAgICBkc3QtPmFwcGVuZEZvcm1hdCgKICAgICAgICAgICAgICJcblRvdGFsIEVmZmVjdHMgQ1BVOiAlZiBNSVBTLCBUb3RhbCBFZmZlY3RzIG1lbW9yeTogJWQgS0IsIE1heCBtZW1vcnkgdXNlZDogJWQgS0JcbiIsCiAgICAgICAgICAgICAgKGZsb2F0KW1Ub3RhbEVmZmVjdHNDcHVMb2FkLzEwLCBtVG90YWxFZmZlY3RzTWVtb3J5LCBtVG90YWxFZmZlY3RzTWVtb3J5TWF4VXNlZCk7Ci0gICAgd3JpdGUoZmQsIGJ1ZmZlciwgc3RybGVuKGJ1ZmZlcikpOwotCi0gICAgc25wcmludGYoYnVmZmVyLCBTSVpFLCAiUmVnaXN0ZXJlZCBlZmZlY3RzOlxuIik7Ci0gICAgd3JpdGUoZmQsIGJ1ZmZlciwgc3RybGVuKGJ1ZmZlcikpOworICAgIGRzdC0+YXBwZW5kKCJSZWdpc3RlcmVkIGVmZmVjdHM6XG4iKTsKICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHNpemUoKTsgaSsrKSB7Ci0gICAgICAgIHNucHJpbnRmKGJ1ZmZlciwgU0laRSwgIi0gRWZmZWN0ICVkIGR1bXA6XG4iLCBrZXlBdChpKSk7Ci0gICAgICAgIHdyaXRlKGZkLCBidWZmZXIsIHN0cmxlbihidWZmZXIpKTsKLSAgICAgICAgdmFsdWVBdChpKS0+ZHVtcChmZCk7CisgICAgICAgIGRzdC0+YXBwZW5kRm9ybWF0KCItIEVmZmVjdCAlZCBkdW1wOlxuIiwga2V5QXQoaSkpOworICAgICAgICB2YWx1ZUF0KGkpLT5kdW1wKGRzdCk7CiAgICAgfQotICAgIHJldHVybiBOT19FUlJPUjsKIH0KIAogfTsgLy9uYW1lc3BhY2UgYW5kcm9pZApkaWZmIC0tZ2l0IGEvc2VydmljZXMvYXVkaW9wb2xpY3kvY29tbW9uL21hbmFnZXJkZWZpbml0aW9ucy9zcmMvSHdNb2R1bGUuY3BwIGIvc2VydmljZXMvYXVkaW9wb2xpY3kvY29tbW9uL21hbmFnZXJkZWZpbml0aW9ucy9zcmMvSHdNb2R1bGUuY3BwCmluZGV4IGFlZjdkYmUuLjkyYmM1OTUgMTAwNjQ0Ci0tLSBhL3NlcnZpY2VzL2F1ZGlvcG9saWN5L2NvbW1vbi9tYW5hZ2VyZGVmaW5pdGlvbnMvc3JjL0h3TW9kdWxlLmNwcAorKysgYi9zZXJ2aWNlcy9hdWRpb3BvbGljeS9jb21tb24vbWFuYWdlcmRlZmluaXRpb25zL3NyYy9Id01vZHVsZS5jcHAKQEAgLTIxOCwzNyArMjE4LDI3IEBACiAgICAgbUhhbmRsZSA9IGhhbmRsZTsKIH0KIAotdm9pZCBId01vZHVsZTo6ZHVtcChpbnQgZmQpCit2b2lkIEh3TW9kdWxlOjpkdW1wKFN0cmluZzggKmRzdCkgY29uc3QKIHsKLSAgICBjb25zdCBzaXplX3QgU0laRSA9IDI1NjsKLSAgICBjaGFyIGJ1ZmZlcltTSVpFXTsKLSAgICBTdHJpbmc4IHJlc3VsdDsKLQotICAgIHNucHJpbnRmKGJ1ZmZlciwgU0laRSwgIiAgLSBuYW1lOiAlc1xuIiwgZ2V0TmFtZSgpKTsKLSAgICByZXN1bHQuYXBwZW5kKGJ1ZmZlcik7Ci0gICAgc25wcmludGYoYnVmZmVyLCBTSVpFLCAiICAtIGhhbmRsZTogJWRcbiIsIG1IYW5kbGUpOwotICAgIHJlc3VsdC5hcHBlbmQoYnVmZmVyKTsKLSAgICBzbnByaW50ZihidWZmZXIsIFNJWkUsICIgIC0gdmVyc2lvbjogJXUuJXVcbiIsIGdldEhhbFZlcnNpb25NYWpvcigpLCBnZXRIYWxWZXJzaW9uTWlub3IoKSk7Ci0gICAgcmVzdWx0LmFwcGVuZChidWZmZXIpOwotICAgIHdyaXRlKGZkLCByZXN1bHQuc3RyaW5nKCksIHJlc3VsdC5zaXplKCkpOworICAgIGRzdC0+YXBwZW5kRm9ybWF0KCIgIC0gbmFtZTogJXNcbiIsIGdldE5hbWUoKSk7CisgICAgZHN0LT5hcHBlbmRGb3JtYXQoIiAgLSBoYW5kbGU6ICVkXG4iLCBtSGFuZGxlKTsKKyAgICBkc3QtPmFwcGVuZEZvcm1hdCgiICAtIHZlcnNpb246ICV1LiV1XG4iLCBnZXRIYWxWZXJzaW9uTWFqb3IoKSwgZ2V0SGFsVmVyc2lvbk1pbm9yKCkpOwogICAgIGlmIChtT3V0cHV0UHJvZmlsZXMuc2l6ZSgpKSB7Ci0gICAgICAgIHdyaXRlKGZkLCAiICAtIG91dHB1dHM6XG4iLCBzdHJsZW4oIiAgLSBvdXRwdXRzOlxuIikpOworICAgICAgICBkc3QtPmFwcGVuZCgiICAtIG91dHB1dHM6XG4iKTsKICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtT3V0cHV0UHJvZmlsZXMuc2l6ZSgpOyBpKyspIHsKLSAgICAgICAgICAgIHNucHJpbnRmKGJ1ZmZlciwgU0laRSwgIiAgICBvdXRwdXQgJXp1OlxuIiwgaSk7Ci0gICAgICAgICAgICB3cml0ZShmZCwgYnVmZmVyLCBzdHJsZW4oYnVmZmVyKSk7Ci0gICAgICAgICAgICBtT3V0cHV0UHJvZmlsZXNbaV0tPmR1bXAoZmQpOworICAgICAgICAgICAgZHN0LT5hcHBlbmRGb3JtYXQoIiAgICBvdXRwdXQgJXp1OlxuIiwgaSk7CisgICAgICAgICAgICBtT3V0cHV0UHJvZmlsZXNbaV0tPmR1bXAoZHN0KTsKICAgICAgICAgfQogICAgIH0KICAgICBpZiAobUlucHV0UHJvZmlsZXMuc2l6ZSgpKSB7Ci0gICAgICAgIHdyaXRlKGZkLCAiICAtIGlucHV0czpcbiIsIHN0cmxlbigiICAtIGlucHV0czpcbiIpKTsKKyAgICAgICAgZHN0LT5hcHBlbmQoIiAgLSBpbnB1dHM6XG4iKTsKICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtSW5wdXRQcm9maWxlcy5zaXplKCk7IGkrKykgewotICAgICAgICAgICAgc25wcmludGYoYnVmZmVyLCBTSVpFLCAiICAgIGlucHV0ICV6dTpcbiIsIGkpOwotICAgICAgICAgICAgd3JpdGUoZmQsIGJ1ZmZlciwgc3RybGVuKGJ1ZmZlcikpOwotICAgICAgICAgICAgbUlucHV0UHJvZmlsZXNbaV0tPmR1bXAoZmQpOworICAgICAgICAgICAgZHN0LT5hcHBlbmRGb3JtYXQoIiAgICBpbnB1dCAlenU6XG4iLCBpKTsKKyAgICAgICAgICAgIG1JbnB1dFByb2ZpbGVzW2ldLT5kdW1wKGRzdCk7CiAgICAgICAgIH0KICAgICB9Ci0gICAgbURlY2xhcmVkRGV2aWNlcy5kdW1wKGZkLCBTdHJpbmc4KCJEZWNsYXJlZCIpLCAgMiwgdHJ1ZSk7Ci0gICAgbVJvdXRlcy5kdW1wKGZkLCAyKTsKKyAgICBtRGVjbGFyZWREZXZpY2VzLmR1bXAoZHN0LCBTdHJpbmc4KCJEZWNsYXJlZCIpLCAyLCB0cnVlKTsKKyAgICBtUm91dGVzLmR1bXAoZHN0LCAyKTsKIH0KIAogc3AgPEh3TW9kdWxlPiBId01vZHVsZUNvbGxlY3Rpb246OmdldE1vZHVsZUZyb21OYW1lKGNvbnN0IGNoYXIgKm5hbWUpIGNvbnN0CkBAIC0yNzgsOSArMjY4LDEwIEBACiBzcDxEZXZpY2VEZXNjcmlwdG9yPiBId01vZHVsZUNvbGxlY3Rpb246OmdldERldmljZURlc2NyaXB0b3IoY29uc3QgYXVkaW9fZGV2aWNlc190IGRldmljZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpkZXZpY2VfYWRkcmVzcywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpkZXZpY2VfbmFtZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIG1hdGNoQWRyZXNzKSBjb25zdAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgbWF0Y2hBZGRyZXNzKSBjb25zdAogewotICAgIFN0cmluZzggYWRkcmVzcyA9IChkZXZpY2VfYWRkcmVzcyA9PSBudWxscHRyKSA/IFN0cmluZzgoIiIpIDogU3RyaW5nOChkZXZpY2VfYWRkcmVzcyk7CisgICAgU3RyaW5nOCBhZGRyZXNzID0gKGRldmljZV9hZGRyZXNzID09IG51bGxwdHIgfHwgIW1hdGNoQWRkcmVzcykgPworICAgICAgICAgICAgU3RyaW5nOCgiIikgOiBTdHJpbmc4KGRldmljZV9hZGRyZXNzKTsKICAgICAvLyBoYW5kbGUgbGVnYWN5IHJlbW90ZSBzdWJtaXggY2FzZSB3aGVyZSB0aGUgYWRkcmVzcyB3YXMgbm90IGFsd2F5cyBzcGVjaWZpZWQKICAgICBpZiAoZGV2aWNlX2Rpc3Rpbmd1aXNoZXNfb25fYWRkcmVzcyhkZXZpY2UpICYmIChhZGRyZXNzLmxlbmd0aCgpID09IDApKSB7CiAgICAgICAgIGFkZHJlc3MgPSBTdHJpbmc4KCIwIik7CkBAIC0yODgsMTUgKzI3OSw5IEBACiAKICAgICBmb3IgKGNvbnN0IGF1dG8mIGh3TW9kdWxlIDogKnRoaXMpIHsKICAgICAgICAgRGV2aWNlVmVjdG9yIGRlY2xhcmVkRGV2aWNlcyA9IGh3TW9kdWxlLT5nZXREZWNsYXJlZERldmljZXMoKTsKLSAgICAgICAgRGV2aWNlVmVjdG9yIGRldmljZUxpc3QgPSBkZWNsYXJlZERldmljZXMuZ2V0RGV2aWNlc0Zyb21UeXBlQWRkcihkZXZpY2UsIGFkZHJlc3MpOwotICAgICAgICBpZiAoIWRldmljZUxpc3QuaXNFbXB0eSgpKSB7Ci0gICAgICAgICAgICByZXR1cm4gZGV2aWNlTGlzdC5pdGVtQXQoMCk7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKCFtYXRjaEFkcmVzcykgewotICAgICAgICAgICAgZGV2aWNlTGlzdCA9IGRlY2xhcmVkRGV2aWNlcy5nZXREZXZpY2VzRnJvbVR5cGUoZGV2aWNlKTsKLSAgICAgICAgICAgIGlmICghZGV2aWNlTGlzdC5pc0VtcHR5KCkpIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gZGV2aWNlTGlzdC5pdGVtQXQoMCk7Ci0gICAgICAgICAgICB9CisgICAgICAgIHNwPERldmljZURlc2NyaXB0b3I+IGRldmljZURlc2MgPSBkZWNsYXJlZERldmljZXMuZ2V0RGV2aWNlKGRldmljZSwgYWRkcmVzcyk7CisgICAgICAgIGlmIChkZXZpY2VEZXNjKSB7CisgICAgICAgICAgICByZXR1cm4gZGV2aWNlRGVzYzsKICAgICAgICAgfQogICAgIH0KIApAQCAtMzA2LDE5ICsyOTEsMTMgQEAKICAgICByZXR1cm4gZGV2RGVzYzsKIH0KIAotc3RhdHVzX3QgSHdNb2R1bGVDb2xsZWN0aW9uOjpkdW1wKGludCBmZCkgY29uc3QKK3ZvaWQgSHdNb2R1bGVDb2xsZWN0aW9uOjpkdW1wKFN0cmluZzggKmRzdCkgY29uc3QKIHsKLSAgICBjb25zdCBzaXplX3QgU0laRSA9IDI1NjsKLSAgICBjaGFyIGJ1ZmZlcltTSVpFXTsKLQotICAgIHNucHJpbnRmKGJ1ZmZlciwgU0laRSwgIlxuSFcgTW9kdWxlcyBkdW1wOlxuIik7Ci0gICAgd3JpdGUoZmQsIGJ1ZmZlciwgc3RybGVuKGJ1ZmZlcikpOworICAgIGRzdC0+YXBwZW5kKCJcbkhXIE1vZHVsZXMgZHVtcDpcbiIpOwogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgc2l6ZSgpOyBpKyspIHsKLSAgICAgICAgc25wcmludGYoYnVmZmVyLCBTSVpFLCAiLSBIVyBNb2R1bGUgJXp1OlxuIiwgaSArIDEpOwotICAgICAgICB3cml0ZShmZCwgYnVmZmVyLCBzdHJsZW4oYnVmZmVyKSk7Ci0gICAgICAgIGl0ZW1BdChpKS0+ZHVtcChmZCk7CisgICAgICAgIGRzdC0+YXBwZW5kRm9ybWF0KCItIEhXIE1vZHVsZSAlenU6XG4iLCBpICsgMSk7CisgICAgICAgIGl0ZW1BdChpKS0+ZHVtcChkc3QpOwogICAgIH0KLSAgICByZXR1cm4gTk9fRVJST1I7CiB9CiAKIApkaWZmIC0tZ2l0IGEvc2VydmljZXMvYXVkaW9wb2xpY3kvY29tbW9uL21hbmFnZXJkZWZpbml0aW9ucy9zcmMvSU9Qcm9maWxlLmNwcCBiL3NlcnZpY2VzL2F1ZGlvcG9saWN5L2NvbW1vbi9tYW5hZ2VyZGVmaW5pdGlvbnMvc3JjL0lPUHJvZmlsZS5jcHAKaW5kZXggZmJjMjM4NC4uMzc4ODI0NCAxMDA2NDQKLS0tIGEvc2VydmljZXMvYXVkaW9wb2xpY3kvY29tbW9uL21hbmFnZXJkZWZpbml0aW9ucy9zcmMvSU9Qcm9maWxlLmNwcAorKysgYi9zZXJ2aWNlcy9hdWRpb3BvbGljeS9jb21tb24vbWFuYWdlcmRlZmluaXRpb25zL3NyYy9JT1Byb2ZpbGUuY3BwCkBAIC0xNyw2ICsxNyw3IEBACiAjZGVmaW5lIExPR19UQUcgIkFQTTo6SU9Qcm9maWxlIgogLy8jZGVmaW5lIExPR19OREVCVUcgMAogCisjaW5jbHVkZSA8c3lzdGVtL2F1ZGlvLWJhc2UuaD4KICNpbmNsdWRlICJJT1Byb2ZpbGUuaCIKICNpbmNsdWRlICJId01vZHVsZS5oIgogI2luY2x1ZGUgIkF1ZGlvR2Fpbi5oIgpAQCAtNjYsMTkgKzY3LDIzIEBACiAgICAgYXVkaW9fZm9ybWF0X3QgbXlVcGRhdGVkRm9ybWF0ID0gZm9ybWF0OwogICAgIGF1ZGlvX2NoYW5uZWxfbWFza190IG15VXBkYXRlZENoYW5uZWxNYXNrID0gY2hhbm5lbE1hc2s7CiAgICAgdWludDMyX3QgbXlVcGRhdGVkU2FtcGxpbmdSYXRlID0gc2FtcGxpbmdSYXRlOworICAgIGNvbnN0IHN0cnVjdCBhdWRpb19wb3J0X2NvbmZpZyBjb25maWcgPSB7CisgICAgICAgIC5jb25maWdfbWFzayA9IEFVRElPX1BPUlRfQ09ORklHX0FMTCAmIH5BVURJT19QT1JUX0NPTkZJR19HQUlOLAorICAgICAgICAuc2FtcGxlX3JhdGUgPSBzYW1wbGluZ1JhdGUsCisgICAgICAgIC5jaGFubmVsX21hc2sgPSBjaGFubmVsTWFzaywKKyAgICAgICAgLmZvcm1hdCA9IGZvcm1hdCwKKyAgICB9OwogICAgIGlmIChpc1JlY29yZFRocmVhZCkKICAgICB7Ci0gICAgICAgIGlmIChjaGVja0NvbXBhdGlibGVBdWRpb1Byb2ZpbGUoCisgICAgICAgIGlmICgoZmxhZ3MgJiBBVURJT19JTlBVVF9GTEFHX01NQVBfTk9JUlEpICE9IDApIHsKKyAgICAgICAgICAgIGlmIChjaGVja0V4YWN0QXVkaW9Qcm9maWxlKCZjb25maWcpICE9IE5PX0VSUk9SKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgfQorICAgICAgICB9IGVsc2UgaWYgKGNoZWNrQ29tcGF0aWJsZUF1ZGlvUHJvZmlsZSgKICAgICAgICAgICAgICAgICBteVVwZGF0ZWRTYW1wbGluZ1JhdGUsIG15VXBkYXRlZENoYW5uZWxNYXNrLCBteVVwZGF0ZWRGb3JtYXQpICE9IE5PX0VSUk9SKSB7CiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIH0KICAgICB9IGVsc2UgewotICAgICAgICBjb25zdCBzdHJ1Y3QgYXVkaW9fcG9ydF9jb25maWcgY29uZmlnID0gewotICAgICAgICAgICAgLmNvbmZpZ19tYXNrID0gQVVESU9fUE9SVF9DT05GSUdfQUxMICYgfkFVRElPX1BPUlRfQ09ORklHX0dBSU4sCi0gICAgICAgICAgICAuc2FtcGxlX3JhdGUgPSBzYW1wbGluZ1JhdGUsCi0gICAgICAgICAgICAuY2hhbm5lbF9tYXNrID0gY2hhbm5lbE1hc2ssCi0gICAgICAgICAgICAuZm9ybWF0ID0gZm9ybWF0LAotICAgICAgICB9OwogICAgICAgICBpZiAoY2hlY2tFeGFjdEF1ZGlvUHJvZmlsZSgmY29uZmlnKSAhPSBOT19FUlJPUikgewogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICB9CkBAIC0xMDgsMTYgKzExMywxMSBAQAogICAgIHJldHVybiB0cnVlOwogfQogCi12b2lkIElPUHJvZmlsZTo6ZHVtcChpbnQgZmQpCit2b2lkIElPUHJvZmlsZTo6ZHVtcChTdHJpbmc4ICpkc3QpIGNvbnN0CiB7Ci0gICAgY29uc3Qgc2l6ZV90IFNJWkUgPSAyNTY7Ci0gICAgY2hhciBidWZmZXJbU0laRV07Ci0gICAgU3RyaW5nOCByZXN1bHQ7CisgICAgQXVkaW9Qb3J0OjpkdW1wKGRzdCwgNCk7CiAKLSAgICBBdWRpb1BvcnQ6OmR1bXAoZmQsIDQpOwotCi0gICAgc25wcmludGYoYnVmZmVyLCBTSVpFLCAiICAgIC0gZmxhZ3M6IDB4JTA0eCIsIGdldEZsYWdzKCkpOwotICAgIHJlc3VsdC5hcHBlbmQoYnVmZmVyKTsKKyAgICBkc3QtPmFwcGVuZEZvcm1hdCgiICAgIC0gZmxhZ3M6IDB4JTA0eCIsIGdldEZsYWdzKCkpOwogICAgIHN0ZDo6c3RyaW5nIGZsYWdzTGl0ZXJhbDsKICAgICBpZiAoZ2V0Um9sZSgpID09IEFVRElPX1BPUlRfUk9MRV9TSU5LKSB7CiAgICAgICAgIElucHV0RmxhZ0NvbnZlcnRlcjo6bWFza1RvU3RyaW5nKGdldEZsYWdzKCksIGZsYWdzTGl0ZXJhbCk7CkBAIC0xMjUsMjEgKzEyNSwxNCBAQAogICAgICAgICBPdXRwdXRGbGFnQ29udmVydGVyOjptYXNrVG9TdHJpbmcoZ2V0RmxhZ3MoKSwgZmxhZ3NMaXRlcmFsKTsKICAgICB9CiAgICAgaWYgKCFmbGFnc0xpdGVyYWwuZW1wdHkoKSkgewotICAgICAgICByZXN1bHQuYXBwZW5kRm9ybWF0KCIgKCVzKSIsIGZsYWdzTGl0ZXJhbC5jX3N0cigpKTsKKyAgICAgICAgZHN0LT5hcHBlbmRGb3JtYXQoIiAoJXMpIiwgZmxhZ3NMaXRlcmFsLmNfc3RyKCkpOwogICAgIH0KLSAgICByZXN1bHQuYXBwZW5kKCJcbiIpOwotICAgIHdyaXRlKGZkLCByZXN1bHQuc3RyaW5nKCksIHJlc3VsdC5zaXplKCkpOwotICAgIG1TdXBwb3J0ZWREZXZpY2VzLmR1bXAoZmQsIFN0cmluZzgoIlN1cHBvcnRlZCIpLCA0LCBmYWxzZSk7Ci0KLSAgICByZXN1bHQuY2xlYXIoKTsKLSAgICBzbnByaW50ZihidWZmZXIsIFNJWkUsICJcbiAgICAtIG1heE9wZW5Db3VudDogJXUgLSBjdXJPcGVuQ291bnQ6ICV1XG4iLAorICAgIGRzdC0+YXBwZW5kKCJcbiIpOworICAgIG1TdXBwb3J0ZWREZXZpY2VzLmR1bXAoZHN0LCBTdHJpbmc4KCJTdXBwb3J0ZWQiKSwgNCwgZmFsc2UpOworICAgIGRzdC0+YXBwZW5kRm9ybWF0KCJcbiAgICAtIG1heE9wZW5Db3VudDogJXUgLSBjdXJPcGVuQ291bnQ6ICV1XG4iLAogICAgICAgICAgICAgIG1heE9wZW5Db3VudCwgY3VyT3BlbkNvdW50KTsKLSAgICByZXN1bHQuYXBwZW5kKGJ1ZmZlcik7Ci0gICAgc25wcmludGYoYnVmZmVyLCBTSVpFLCAiICAgIC0gbWF4QWN0aXZlQ291bnQ6ICV1IC0gY3VyQWN0aXZlQ291bnQ6ICV1XG4iLAorICAgIGRzdC0+YXBwZW5kRm9ybWF0KCIgICAgLSBtYXhBY3RpdmVDb3VudDogJXUgLSBjdXJBY3RpdmVDb3VudDogJXVcbiIsCiAgICAgICAgICAgICAgbWF4QWN0aXZlQ291bnQsIGN1ckFjdGl2ZUNvdW50KTsKLSAgICByZXN1bHQuYXBwZW5kKGJ1ZmZlcik7Ci0KLSAgICB3cml0ZShmZCwgcmVzdWx0LnN0cmluZygpLCByZXN1bHQuc2l6ZSgpKTsKIH0KIAogdm9pZCBJT1Byb2ZpbGU6OmxvZygpCmRpZmYgLS1naXQgYS9zZXJ2aWNlcy9hdWRpb3BvbGljeS9jb21tb24vbWFuYWdlcmRlZmluaXRpb25zL3NyYy9TZXJpYWxpemVyLmNwcCBiL3NlcnZpY2VzL2F1ZGlvcG9saWN5L2NvbW1vbi9tYW5hZ2VyZGVmaW5pdGlvbnMvc3JjL1NlcmlhbGl6ZXIuY3BwCmluZGV4IGEyNTMxMTMuLjE3OWE2NzggMTAwNjQ0Ci0tLSBhL3NlcnZpY2VzL2F1ZGlvcG9saWN5L2NvbW1vbi9tYW5hZ2VyZGVmaW5pdGlvbnMvc3JjL1NlcmlhbGl6ZXIuY3BwCisrKyBiL3NlcnZpY2VzL2F1ZGlvcG9saWN5L2NvbW1vbi9tYW5hZ2VyZGVmaW5pdGlvbnMvc3JjL1NlcmlhbGl6ZXIuY3BwCkBAIC0xNywyNDEgKzE3LDQ0MSBAQAogI2RlZmluZSBMT0dfVEFHICJBUE06OlNlcmlhbGl6ZXIiCiAvLyNkZWZpbmUgTE9HX05ERUJVRyAwCiAKLSNpbmNsdWRlICJTZXJpYWxpemVyLmgiCi0jaW5jbHVkZSA8bWVkaWEvY29udmVydC5oPgotI2luY2x1ZGUgIlR5cGVDb252ZXJ0ZXIuaCIKKyNpbmNsdWRlIDxtZW1vcnk+CisjaW5jbHVkZSA8c3RyaW5nPgorI2luY2x1ZGUgPHV0aWxpdHk+CisKKyNpbmNsdWRlIDxoaWRsL1N0YXR1cy5oPgogI2luY2x1ZGUgPGxpYnhtbC9wYXJzZXIuaD4KICNpbmNsdWRlIDxsaWJ4bWwveGluY2x1ZGUuaD4KLSNpbmNsdWRlIDxzdHJpbmc+Ci0jaW5jbHVkZSA8c3N0cmVhbT4KLSNpbmNsdWRlIDxpc3RyZWFtPgotCi11c2luZyBzdGQ6OnN0cmluZzsKKyNpbmNsdWRlIDxtZWRpYS9jb252ZXJ0Lmg+CisjaW5jbHVkZSA8dXRpbHMvTG9nLmg+CisjaW5jbHVkZSA8dXRpbHMvU3Ryb25nUG9pbnRlci5oPgorI2luY2x1ZGUgPHV0aWxzL0Vycm9ycy5oPgorI2luY2x1ZGUgPHV0aWxzL1JlZkJhc2UuaD4KKyNpbmNsdWRlICJTZXJpYWxpemVyLmgiCisjaW5jbHVkZSAiVHlwZUNvbnZlcnRlci5oIgogCiBuYW1lc3BhY2UgYW5kcm9pZCB7CiAKLXN0cmluZyBnZXRYbWxBdHRyaWJ1dGUoY29uc3QgeG1sTm9kZSAqY3VyLCBjb25zdCBjaGFyICphdHRyaWJ1dGUpCituYW1lc3BhY2UgeworCisvLyBUT0RPKG1uYWdhbm92KTogQ29uc2lkZXIgZmluZGluZyBhbiBhbHRlcm5hdGl2ZSBmb3IgdXNpbmcgSElETCBjb2RlLgordXNpbmcgaGFyZHdhcmU6OlJldHVybjsKK3VzaW5nIGhhcmR3YXJlOjpTdGF0dXM7Cit1c2luZyB1dGlsaXRpZXM6OmNvbnZlcnRUbzsKKwordGVtcGxhdGU8dHlwZW5hbWUgRSwgdHlwZW5hbWUgQz4KK3N0cnVjdCBBbmRyb2lkQ29sbGVjdGlvblRyYWl0cyB7CisgICAgdHlwZWRlZiBzcDxFPiBFbGVtZW50OworICAgIHR5cGVkZWYgQyBDb2xsZWN0aW9uOworICAgIHR5cGVkZWYgdm9pZCogUHRyU2VyaWFsaXppbmdDdHg7CisKKyAgICBzdGF0aWMgc3RhdHVzX3QgYWRkRWxlbWVudFRvQ29sbGVjdGlvbihjb25zdCBFbGVtZW50ICZlbGVtZW50LCBDb2xsZWN0aW9uICpjb2xsZWN0aW9uKSB7CisgICAgICAgIHJldHVybiBjb2xsZWN0aW9uLT5hZGQoZWxlbWVudCkgPj0gMCA/IE5PX0VSUk9SIDogQkFEX1ZBTFVFOworICAgIH0KK307CisKK3RlbXBsYXRlPHR5cGVuYW1lIEM+CitzdHJ1Y3QgU3RkQ29sbGVjdGlvblRyYWl0cyB7CisgICAgdHlwZWRlZiBDIENvbGxlY3Rpb247CisgICAgdHlwZWRlZiB0eXBlbmFtZSBDOjp2YWx1ZV90eXBlIEVsZW1lbnQ7CisgICAgdHlwZWRlZiB2b2lkKiBQdHJTZXJpYWxpemluZ0N0eDsKKworICAgIHN0YXRpYyBzdGF0dXNfdCBhZGRFbGVtZW50VG9Db2xsZWN0aW9uKGNvbnN0IEVsZW1lbnQgJmVsZW1lbnQsIENvbGxlY3Rpb24gKmNvbGxlY3Rpb24pIHsKKyAgICAgICAgYXV0byBwYWlyID0gY29sbGVjdGlvbi0+aW5zZXJ0KGVsZW1lbnQpOworICAgICAgICByZXR1cm4gcGFpci5zZWNvbmQgPyBOT19FUlJPUiA6IEJBRF9WQUxVRTsKKyAgICB9Cit9OworCitzdHJ1Y3QgQXVkaW9HYWluVHJhaXRzIDogcHVibGljIEFuZHJvaWRDb2xsZWN0aW9uVHJhaXRzPEF1ZGlvR2FpbiwgQXVkaW9HYWluQ29sbGVjdGlvbj4KIHsKLSAgICB4bWxDaGFyICp4bWxWYWx1ZSA9IHhtbEdldFByb3AoY3VyLCAoY29uc3QgeG1sQ2hhciopYXR0cmlidXRlKTsKLSAgICBpZiAoeG1sVmFsdWUgPT0gTlVMTCkgeworICAgIHN0YXRpYyBjb25zdGV4cHIgY29uc3QgY2hhciAqdGFnID0gImdhaW4iOworICAgIHN0YXRpYyBjb25zdGV4cHIgY29uc3QgY2hhciAqY29sbGVjdGlvblRhZyA9ICJnYWlucyI7CisKKyAgICBzdHJ1Y3QgQXR0cmlidXRlcworICAgIHsKKyAgICAgICAgLyoqIGdhaW4gbW9kZXMgc3VwcG9ydGVkLCBlLmcuIEFVRElPX0dBSU5fTU9ERV9DSEFOTkVMUy4gKi8KKyAgICAgICAgc3RhdGljIGNvbnN0ZXhwciBjb25zdCBjaGFyICptb2RlID0gIm1vZGUiOworICAgICAgICAvKiogY29udHJvbGxlZCBjaGFubmVscywgbmVlZGVkIGlmIG1vZGUgQVVESU9fR0FJTl9NT0RFX0NIQU5ORUxTLiAqLworICAgICAgICBzdGF0aWMgY29uc3RleHByIGNvbnN0IGNoYXIgKmNoYW5uZWxNYXNrID0gImNoYW5uZWxfbWFzayI7CisgICAgICAgIHN0YXRpYyBjb25zdGV4cHIgY29uc3QgY2hhciAqbWluVmFsdWVNQiA9ICJtaW5WYWx1ZU1CIjsgLyoqPCBtaW4gdmFsdWUgaW4gbWlsbGliZWwuICovCisgICAgICAgIHN0YXRpYyBjb25zdGV4cHIgY29uc3QgY2hhciAqbWF4VmFsdWVNQiA9ICJtYXhWYWx1ZU1CIjsgLyoqPCBtYXggdmFsdWUgaW4gbWlsbGliZWwuICovCisgICAgICAgIC8qKiBkZWZhdWx0IHZhbHVlIGluIG1pbGxpYmVsLiAqLworICAgICAgICBzdGF0aWMgY29uc3RleHByIGNvbnN0IGNoYXIgKmRlZmF1bHRWYWx1ZU1CID0gImRlZmF1bHRWYWx1ZU1CIjsKKyAgICAgICAgc3RhdGljIGNvbnN0ZXhwciBjb25zdCBjaGFyICpzdGVwVmFsdWVNQiA9ICJzdGVwVmFsdWVNQiI7IC8qKjwgc3RlcCB2YWx1ZSBpbiBtaWxsaWJlbC4gKi8KKyAgICAgICAgLyoqIG5lZWRlZCBpZiBtb2RlIEFVRElPX0dBSU5fTU9ERV9SQU1QLiAqLworICAgICAgICBzdGF0aWMgY29uc3RleHByIGNvbnN0IGNoYXIgKm1pblJhbXBNcyA9ICJtaW5SYW1wTXMiOworICAgICAgICAvKiogbmVlZGVkIGlmIG1vZGUgQVVESU9fR0FJTl9NT0RFX1JBTVAuICovCisgICAgICAgIHN0YXRpYyBjb25zdGV4cHIgY29uc3QgY2hhciAqbWF4UmFtcE1zID0gIm1heFJhbXBNcyI7CisgICAgfTsKKworICAgIHN0YXRpYyBSZXR1cm48RWxlbWVudD4gZGVzZXJpYWxpemUoY29uc3QgeG1sTm9kZSAqY3VyLCBQdHJTZXJpYWxpemluZ0N0eCBzZXJpYWxpemluZ0NvbnRleHQpOworICAgIC8vIE5vIGNoaWxkcmVuCit9OworCisvLyBBIHByb2ZpbGUgc2VjdGlvbiBjb250YWlucyBhIG5hbWUsICBvbmUgYXVkaW8gZm9ybWF0IGFuZCB0aGUgbGlzdCBvZiBzdXBwb3J0ZWQgc2FtcGxpbmcgcmF0ZXMKKy8vIGFuZCBjaGFubmVsIG1hc2tzIGZvciB0aGlzIGZvcm1hdAorc3RydWN0IEF1ZGlvUHJvZmlsZVRyYWl0cyA6IHB1YmxpYyBBbmRyb2lkQ29sbGVjdGlvblRyYWl0czxBdWRpb1Byb2ZpbGUsIEF1ZGlvUHJvZmlsZVZlY3Rvcj4KK3sKKyAgICBzdGF0aWMgY29uc3RleHByIGNvbnN0IGNoYXIgKnRhZyA9ICJwcm9maWxlIjsKKyAgICBzdGF0aWMgY29uc3RleHByIGNvbnN0IGNoYXIgKmNvbGxlY3Rpb25UYWcgPSAicHJvZmlsZXMiOworCisgICAgc3RydWN0IEF0dHJpYnV0ZXMKKyAgICB7CisgICAgICAgIHN0YXRpYyBjb25zdGV4cHIgY29uc3QgY2hhciAqc2FtcGxpbmdSYXRlcyA9ICJzYW1wbGluZ1JhdGVzIjsKKyAgICAgICAgc3RhdGljIGNvbnN0ZXhwciBjb25zdCBjaGFyICpmb3JtYXQgPSAiZm9ybWF0IjsKKyAgICAgICAgc3RhdGljIGNvbnN0ZXhwciBjb25zdCBjaGFyICpjaGFubmVsTWFza3MgPSAiY2hhbm5lbE1hc2tzIjsKKyAgICB9OworCisgICAgc3RhdGljIFJldHVybjxFbGVtZW50PiBkZXNlcmlhbGl6ZShjb25zdCB4bWxOb2RlICpjdXIsIFB0clNlcmlhbGl6aW5nQ3R4IHNlcmlhbGl6aW5nQ29udGV4dCk7Cit9OworCitzdHJ1Y3QgTWl4UG9ydFRyYWl0cyA6IHB1YmxpYyBBbmRyb2lkQ29sbGVjdGlvblRyYWl0czxJT1Byb2ZpbGUsIElPUHJvZmlsZUNvbGxlY3Rpb24+Cit7CisgICAgc3RhdGljIGNvbnN0ZXhwciBjb25zdCBjaGFyICp0YWcgPSAibWl4UG9ydCI7CisgICAgc3RhdGljIGNvbnN0ZXhwciBjb25zdCBjaGFyICpjb2xsZWN0aW9uVGFnID0gIm1peFBvcnRzIjsKKworICAgIHN0cnVjdCBBdHRyaWJ1dGVzCisgICAgeworICAgICAgICBzdGF0aWMgY29uc3RleHByIGNvbnN0IGNoYXIgKm5hbWUgPSAibmFtZSI7CisgICAgICAgIHN0YXRpYyBjb25zdGV4cHIgY29uc3QgY2hhciAqcm9sZSA9ICJyb2xlIjsKKyAgICAgICAgc3RhdGljIGNvbnN0ZXhwciBjb25zdCBjaGFyICpyb2xlU291cmNlID0gInNvdXJjZSI7IC8qKjwgPGF0dHJpYnV0ZSByb2xlIHNvdXJjZSB2YWx1ZT4uICovCisgICAgICAgIHN0YXRpYyBjb25zdGV4cHIgY29uc3QgY2hhciAqZmxhZ3MgPSAiZmxhZ3MiOworICAgICAgICBzdGF0aWMgY29uc3RleHByIGNvbnN0IGNoYXIgKm1heE9wZW5Db3VudCA9ICJtYXhPcGVuQ291bnQiOworICAgICAgICBzdGF0aWMgY29uc3RleHByIGNvbnN0IGNoYXIgKm1heEFjdGl2ZUNvdW50ID0gIm1heEFjdGl2ZUNvdW50IjsKKyAgICB9OworCisgICAgc3RhdGljIFJldHVybjxFbGVtZW50PiBkZXNlcmlhbGl6ZShjb25zdCB4bWxOb2RlICpjdXIsIFB0clNlcmlhbGl6aW5nQ3R4IHNlcmlhbGl6aW5nQ29udGV4dCk7CisgICAgLy8gQ2hpbGRyZW46IEdhaW5UcmFpdHMKK307CisKK3N0cnVjdCBEZXZpY2VQb3J0VHJhaXRzIDogcHVibGljIEFuZHJvaWRDb2xsZWN0aW9uVHJhaXRzPERldmljZURlc2NyaXB0b3IsIERldmljZVZlY3Rvcj4KK3sKKyAgICBzdGF0aWMgY29uc3RleHByIGNvbnN0IGNoYXIgKnRhZyA9ICJkZXZpY2VQb3J0IjsKKyAgICBzdGF0aWMgY29uc3RleHByIGNvbnN0IGNoYXIgKmNvbGxlY3Rpb25UYWcgPSAiZGV2aWNlUG9ydHMiOworCisgICAgc3RydWN0IEF0dHJpYnV0ZXMKKyAgICB7CisgICAgICAgIC8qKiAgPGRldmljZSB0YWcgbmFtZT46IGFueSBzdHJpbmcgd2l0aG91dCBzcGFjZS4gKi8KKyAgICAgICAgc3RhdGljIGNvbnN0ZXhwciBjb25zdCBjaGFyICp0YWdOYW1lID0gInRhZ05hbWUiOworICAgICAgICBzdGF0aWMgY29uc3RleHByIGNvbnN0IGNoYXIgKnR5cGUgPSAidHlwZSI7IC8qKjwgPGRldmljZSB0eXBlPi4gKi8KKyAgICAgICAgc3RhdGljIGNvbnN0ZXhwciBjb25zdCBjaGFyICpyb2xlID0gInJvbGUiOyAvKio8IDxkZXZpY2Ugcm9sZTogc2luayBvciBzb3VyY2U+LiAqLworICAgICAgICBzdGF0aWMgY29uc3RleHByIGNvbnN0IGNoYXIgKnJvbGVTb3VyY2UgPSAic291cmNlIjsgLyoqPCA8YXR0cmlidXRlIHJvbGUgc291cmNlIHZhbHVlPi4gKi8KKyAgICAgICAgLyoqIG9wdGlvbmFsOiBkZXZpY2UgYWRkcmVzcywgY2hhciBzdHJpbmcgbGVzcyB0aGFuIDY0LiAqLworICAgICAgICBzdGF0aWMgY29uc3RleHByIGNvbnN0IGNoYXIgKmFkZHJlc3MgPSAiYWRkcmVzcyI7CisgICAgfTsKKworICAgIHN0YXRpYyBSZXR1cm48RWxlbWVudD4gZGVzZXJpYWxpemUoY29uc3QgeG1sTm9kZSAqY3VyLCBQdHJTZXJpYWxpemluZ0N0eCBzZXJpYWxpemluZ0NvbnRleHQpOworICAgIC8vIENoaWxkcmVuOiBHYWluVHJhaXRzIChvcHRpb25hbCkKK307CisKK3N0cnVjdCBSb3V0ZVRyYWl0cyA6IHB1YmxpYyBBbmRyb2lkQ29sbGVjdGlvblRyYWl0czxBdWRpb1JvdXRlLCBBdWRpb1JvdXRlVmVjdG9yPgoreworICAgIHN0YXRpYyBjb25zdGV4cHIgY29uc3QgY2hhciAqdGFnID0gInJvdXRlIjsKKyAgICBzdGF0aWMgY29uc3RleHByIGNvbnN0IGNoYXIgKmNvbGxlY3Rpb25UYWcgPSAicm91dGVzIjsKKworICAgIHN0cnVjdCBBdHRyaWJ1dGVzCisgICAgeworICAgICAgICBzdGF0aWMgY29uc3RleHByIGNvbnN0IGNoYXIgKnR5cGUgPSAidHlwZSI7IC8qKjwgPHJvdXRlIHR5cGU+OiBtaXggb3IgbXV4LiAqLworICAgICAgICBzdGF0aWMgY29uc3RleHByIGNvbnN0IGNoYXIgKnR5cGVNaXggPSAibWl4IjsgLyoqPCB0eXBlIGF0dHJpYnV0ZSBtaXggdmFsdWUuICovCisgICAgICAgIHN0YXRpYyBjb25zdGV4cHIgY29uc3QgY2hhciAqc2luayA9ICJzaW5rIjsgLyoqPCA8c2luazogaW52b2x2ZWQgaW4gdGhpcyByb3V0ZT4uICovCisgICAgICAgIC8qKiBzb3VyY2VzOiBhbGwgc291cmNlIHRoYXQgY2FuIGJlIGludm9sdmVkIGluIHRoaXMgcm91dGUuICovCisgICAgICAgIHN0YXRpYyBjb25zdGV4cHIgY29uc3QgY2hhciAqc291cmNlcyA9ICJzb3VyY2VzIjsKKyAgICB9OworCisgICAgdHlwZWRlZiBId01vZHVsZSAqUHRyU2VyaWFsaXppbmdDdHg7CisKKyAgICBzdGF0aWMgUmV0dXJuPEVsZW1lbnQ+IGRlc2VyaWFsaXplKGNvbnN0IHhtbE5vZGUgKmN1ciwgUHRyU2VyaWFsaXppbmdDdHggc2VyaWFsaXppbmdDb250ZXh0KTsKK307CisKK3N0cnVjdCBNb2R1bGVUcmFpdHMgOiBwdWJsaWMgQW5kcm9pZENvbGxlY3Rpb25UcmFpdHM8SHdNb2R1bGUsIEh3TW9kdWxlQ29sbGVjdGlvbj4KK3sKKyAgICBzdGF0aWMgY29uc3RleHByIGNvbnN0IGNoYXIgKnRhZyA9ICJtb2R1bGUiOworICAgIHN0YXRpYyBjb25zdGV4cHIgY29uc3QgY2hhciAqY29sbGVjdGlvblRhZyA9ICJtb2R1bGVzIjsKKworICAgIHN0YXRpYyBjb25zdGV4cHIgY29uc3QgY2hhciAqY2hpbGRBdHRhY2hlZERldmljZXNUYWcgPSAiYXR0YWNoZWREZXZpY2VzIjsKKyAgICBzdGF0aWMgY29uc3RleHByIGNvbnN0IGNoYXIgKmNoaWxkQXR0YWNoZWREZXZpY2VUYWcgPSAiaXRlbSI7CisgICAgc3RhdGljIGNvbnN0ZXhwciBjb25zdCBjaGFyICpjaGlsZERlZmF1bHRPdXRwdXREZXZpY2VUYWcgPSAiZGVmYXVsdE91dHB1dERldmljZSI7CisKKyAgICBzdHJ1Y3QgQXR0cmlidXRlcworICAgIHsKKyAgICAgICAgc3RhdGljIGNvbnN0ZXhwciBjb25zdCBjaGFyICpuYW1lID0gIm5hbWUiOworICAgICAgICBzdGF0aWMgY29uc3RleHByIGNvbnN0IGNoYXIgKnZlcnNpb24gPSAiaGFsVmVyc2lvbiI7CisgICAgfTsKKworICAgIHR5cGVkZWYgQXVkaW9Qb2xpY3lDb25maWcgKlB0clNlcmlhbGl6aW5nQ3R4OworCisgICAgc3RhdGljIFJldHVybjxFbGVtZW50PiBkZXNlcmlhbGl6ZShjb25zdCB4bWxOb2RlICpjdXIsIFB0clNlcmlhbGl6aW5nQ3R4IHNlcmlhbGl6aW5nQ29udGV4dCk7CisgICAgLy8gQ2hpbGRyZW46IG1peFBvcnRUcmFpdHMsIGRldmljZVBvcnRUcmFpdHMsIGFuZCByb3V0ZVRyYWl0cworICAgIC8vIE5lZWQgdG8gY2FsbCBkZXNlcmlhbGl6ZSBvbiBlYWNoIGNoaWxkCit9OworCitzdHJ1Y3QgR2xvYmFsQ29uZmlnVHJhaXRzCit7CisgICAgc3RhdGljIGNvbnN0ZXhwciBjb25zdCBjaGFyICp0YWcgPSAiZ2xvYmFsQ29uZmlndXJhdGlvbiI7CisKKyAgICBzdHJ1Y3QgQXR0cmlidXRlcworICAgIHsKKyAgICAgICAgc3RhdGljIGNvbnN0ZXhwciBjb25zdCBjaGFyICpzcGVha2VyRHJjRW5hYmxlZCA9ICJzcGVha2VyX2RyY19lbmFibGVkIjsKKyAgICB9OworCisgICAgc3RhdGljIHN0YXR1c190IGRlc2VyaWFsaXplKGNvbnN0IHhtbE5vZGUgKnJvb3QsIEF1ZGlvUG9saWN5Q29uZmlnICpjb25maWcpOworfTsKKworc3RydWN0IFZvbHVtZVRyYWl0cyA6IHB1YmxpYyBBbmRyb2lkQ29sbGVjdGlvblRyYWl0czxWb2x1bWVDdXJ2ZSwgVm9sdW1lQ3VydmVzQ29sbGVjdGlvbj4KK3sKKyAgICBzdGF0aWMgY29uc3RleHByIGNvbnN0IGNoYXIgKnRhZyA9ICJ2b2x1bWUiOworICAgIHN0YXRpYyBjb25zdGV4cHIgY29uc3QgY2hhciAqY29sbGVjdGlvblRhZyA9ICJ2b2x1bWVzIjsKKyAgICBzdGF0aWMgY29uc3RleHByIGNvbnN0IGNoYXIgKnZvbHVtZVBvaW50VGFnID0gInBvaW50IjsKKyAgICBzdGF0aWMgY29uc3RleHByIGNvbnN0IGNoYXIgKnJlZmVyZW5jZVRhZyA9ICJyZWZlcmVuY2UiOworCisgICAgc3RydWN0IEF0dHJpYnV0ZXMKKyAgICB7CisgICAgICAgIHN0YXRpYyBjb25zdGV4cHIgY29uc3QgY2hhciAqc3RyZWFtID0gInN0cmVhbSI7CisgICAgICAgIHN0YXRpYyBjb25zdGV4cHIgY29uc3QgY2hhciAqZGV2aWNlQ2F0ZWdvcnkgPSAiZGV2aWNlQ2F0ZWdvcnkiOworICAgICAgICBzdGF0aWMgY29uc3RleHByIGNvbnN0IGNoYXIgKnJlZmVyZW5jZSA9ICJyZWYiOworICAgICAgICBzdGF0aWMgY29uc3RleHByIGNvbnN0IGNoYXIgKnJlZmVyZW5jZU5hbWUgPSAibmFtZSI7CisgICAgfTsKKworICAgIHN0YXRpYyBSZXR1cm48RWxlbWVudD4gZGVzZXJpYWxpemUoY29uc3QgeG1sTm9kZSAqY3VyLCBQdHJTZXJpYWxpemluZ0N0eCBzZXJpYWxpemluZ0NvbnRleHQpOworICAgIC8vIE5vIENoaWxkcmVuCit9OworCitzdHJ1Y3QgU3Vycm91bmRTb3VuZFRyYWl0cworeworICAgIHN0YXRpYyBjb25zdGV4cHIgY29uc3QgY2hhciAqdGFnID0gInN1cnJvdW5kU291bmQiOworCisgICAgc3RhdGljIHN0YXR1c190IGRlc2VyaWFsaXplKGNvbnN0IHhtbE5vZGUgKnJvb3QsIEF1ZGlvUG9saWN5Q29uZmlnICpjb25maWcpOworICAgIC8vIENoaWxkcmVuOiBTdXJyb3VuZFNvdW5kRm9ybWF0VHJhaXRzCit9OworCitzdHJ1Y3QgU3Vycm91bmRTb3VuZEZvcm1hdFRyYWl0cyA6IHB1YmxpYyBTdGRDb2xsZWN0aW9uVHJhaXRzPEF1ZGlvUG9saWN5Q29uZmlnOjpTdXJyb3VuZEZvcm1hdHM+Cit7CisgICAgc3RhdGljIGNvbnN0ZXhwciBjb25zdCBjaGFyICp0YWcgPSAiZm9ybWF0IjsKKyAgICBzdGF0aWMgY29uc3RleHByIGNvbnN0IGNoYXIgKmNvbGxlY3Rpb25UYWcgPSAiZm9ybWF0cyI7CisKKyAgICBzdHJ1Y3QgQXR0cmlidXRlcworICAgIHsKKyAgICAgICAgc3RhdGljIGNvbnN0ZXhwciBjb25zdCBjaGFyICpuYW1lID0gIm5hbWUiOworICAgICAgICBzdGF0aWMgY29uc3RleHByIGNvbnN0IGNoYXIgKnN1YmZvcm1hdHMgPSAic3ViZm9ybWF0cyI7CisgICAgfTsKKworICAgIHN0YXRpYyBSZXR1cm48RWxlbWVudD4gZGVzZXJpYWxpemUoY29uc3QgeG1sTm9kZSAqY3VyLCBQdHJTZXJpYWxpemluZ0N0eCBzZXJpYWxpemluZ0NvbnRleHQpOworfTsKKworY2xhc3MgUG9saWN5U2VyaWFsaXplcgoreworcHVibGljOgorICAgIFBvbGljeVNlcmlhbGl6ZXIoKSA6IG1WZXJzaW9ue3N0ZDo6dG9fc3RyaW5nKGdNYWpvcikgKyAiLiIgKyBzdGQ6OnRvX3N0cmluZyhnTWlub3IpfQorICAgIHsKKyAgICAgICAgQUxPR1YoIiVzOiBWZXJzaW9uPSVzIFJvb3Q9JXMiLCBfX2Z1bmNfXywgbVZlcnNpb24uY19zdHIoKSwgcm9vdE5hbWUpOworICAgIH0KKyAgICBzdGF0dXNfdCBkZXNlcmlhbGl6ZShjb25zdCBjaGFyICpjb25maWdGaWxlLCBBdWRpb1BvbGljeUNvbmZpZyAqY29uZmlnKTsKKworcHJpdmF0ZToKKyAgICBzdGF0aWMgY29uc3RleHByIGNvbnN0IGNoYXIgKnJvb3ROYW1lID0gImF1ZGlvUG9saWN5Q29uZmlndXJhdGlvbiI7CisgICAgc3RhdGljIGNvbnN0ZXhwciBjb25zdCBjaGFyICp2ZXJzaW9uQXR0cmlidXRlID0gInZlcnNpb24iOworICAgIHN0YXRpYyBjb25zdGV4cHIgdWludDMyX3QgZ01ham9yID0gMTsgLyoqPCB0aGUgbWFqb3IgbnVtYmVyIG9mIHRoZSBwb2xpY3kgeG1sIGZvcm1hdCB2ZXJzaW9uLiAqLworICAgIHN0YXRpYyBjb25zdGV4cHIgdWludDMyX3QgZ01pbm9yID0gMDsgLyoqPCB0aGUgbWlub3IgbnVtYmVyIG9mIHRoZSBwb2xpY3kgeG1sIGZvcm1hdCB2ZXJzaW9uLiAqLworCisgICAgdHlwZWRlZiBBdWRpb1BvbGljeUNvbmZpZyBFbGVtZW50OworCisgICAgY29uc3Qgc3RkOjpzdHJpbmcgbVZlcnNpb247CisKKyAgICAvLyBDaGlsZHJlbjogTW9kdWxlc1RyYWl0cywgVm9sdW1lVHJhaXRzLCBTdXJyb3VuZFNvdW5kVHJhaXRzIChvcHRpb25hbCkKK307CisKK3RlbXBsYXRlIDxjbGFzcyBUPgorY29uc3RleHByIHZvaWQgKCp4bWxEZWxldGVyKShUKiB0KTsKK3RlbXBsYXRlIDw+Citjb25zdGV4cHIgYXV0byB4bWxEZWxldGVyPHhtbERvYz4gPSB4bWxGcmVlRG9jOworLy8gaHR0cDovL2IvMTExMDY3Mjc3IC0gQWRkIGJhY2sgY29uc3RleHByIHdoZW4gd2Ugc3dpdGNoIHRvIEMrKzE3LgordGVtcGxhdGUgPD4KK2F1dG8geG1sRGVsZXRlcjx4bWxDaGFyPiA9IFtdKHhtbENoYXIgKnMpIHsgeG1sRnJlZShzKTsgfTsKKworLyoqIEByZXR1cm4gYSB1bmlxdWVfcHRyIHdpdGggdGhlIGNvcnJlY3QgZGVsZXRlciBmb3IgdGhlIGxpYnhtbDIgb2JqZWN0LiAqLwordGVtcGxhdGUgPGNsYXNzIFQ+Citjb25zdGV4cHIgYXV0byBtYWtlX3htbFVuaXF1ZShUICp0KSB7CisgICAgLy8gV3JhcCBkZWxldGVyIGluIGxhbWJkYSB0byBlbmFibGUgZW1wdHkgYmFzZSBvcHRpbWl6YXRpb24KKyAgICBhdXRvIGRlbGV0ZXIgPSBbXShUICp0KSB7IHhtbERlbGV0ZXI8VD4odCk7IH07CisgICAgcmV0dXJuIHN0ZDo6dW5pcXVlX3B0cjxULCBkZWNsdHlwZShkZWxldGVyKT57dCwgZGVsZXRlcn07Cit9CisKK3N0ZDo6c3RyaW5nIGdldFhtbEF0dHJpYnV0ZShjb25zdCB4bWxOb2RlICpjdXIsIGNvbnN0IGNoYXIgKmF0dHJpYnV0ZSkKK3sKKyAgICBhdXRvIHhtbFZhbHVlID0gbWFrZV94bWxVbmlxdWUoeG1sR2V0UHJvcChjdXIsIHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgeG1sQ2hhcio+KGF0dHJpYnV0ZSkpKTsKKyAgICBpZiAoeG1sVmFsdWUgPT0gbnVsbHB0cikgewogICAgICAgICByZXR1cm4gIiI7CiAgICAgfQotICAgIHN0cmluZyB2YWx1ZSgoY29uc3QgY2hhciopeG1sVmFsdWUpOwotICAgIHhtbEZyZWUoeG1sVmFsdWUpOworICAgIHN0ZDo6c3RyaW5nIHZhbHVlKHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgY2hhcio+KHhtbFZhbHVlLmdldCgpKSk7CiAgICAgcmV0dXJuIHZhbHVlOwogfQogCi11c2luZyB1dGlsaXRpZXM6OmNvbnZlcnRUbzsKLQotY29uc3QgY2hhciAqY29uc3QgUG9saWN5U2VyaWFsaXplcjo6cm9vdE5hbWUgPSAiYXVkaW9Qb2xpY3lDb25maWd1cmF0aW9uIjsKLWNvbnN0IGNoYXIgKmNvbnN0IFBvbGljeVNlcmlhbGl6ZXI6OnZlcnNpb25BdHRyaWJ1dGUgPSAidmVyc2lvbiI7Ci1jb25zdCB1aW50MzJfdCBQb2xpY3lTZXJpYWxpemVyOjpnTWFqb3IgPSAxOwotY29uc3QgdWludDMyX3QgUG9saWN5U2VyaWFsaXplcjo6Z01pbm9yID0gMDsKLXN0YXRpYyBjb25zdCBjaGFyICpjb25zdCBnUmVmZXJlbmNlRWxlbWVudE5hbWUgPSAicmVmZXJlbmNlIjsKLXN0YXRpYyBjb25zdCBjaGFyICpjb25zdCBnUmVmZXJlbmNlQXR0cmlidXRlTmFtZSA9ICJuYW1lIjsKLQogdGVtcGxhdGUgPGNsYXNzIFRyYWl0Pgotc3RhdGljIHZvaWQgZ2V0UmVmZXJlbmNlKGNvbnN0IF94bWxOb2RlICpyb290LCBjb25zdCBfeG1sTm9kZSAqJnJlZk5vZGUsIGNvbnN0IHN0cmluZyAmcmVmTmFtZSkKK2NvbnN0IHhtbE5vZGUqIGdldFJlZmVyZW5jZShjb25zdCB4bWxOb2RlICpjdXIsIGNvbnN0IHN0ZDo6c3RyaW5nICZyZWZOYW1lKQogewotICAgIGNvbnN0IF94bWxOb2RlICpjb2wgPSByb290OwotICAgIHdoaWxlIChjb2wgIT0gTlVMTCkgewotICAgICAgICBpZiAoIXhtbFN0cmNtcChjb2wtPm5hbWUsIChjb25zdCB4bWxDaGFyICopVHJhaXQ6OmNvbGxlY3Rpb25UYWcpKSB7Ci0gICAgICAgICAgICBjb25zdCB4bWxOb2RlICpjdXIgPSBjb2wtPmNoaWxkcmVuOwotICAgICAgICAgICAgd2hpbGUgKGN1ciAhPSBOVUxMKSB7Ci0gICAgICAgICAgICAgICAgaWYgKCgheG1sU3RyY21wKGN1ci0+bmFtZSwgKGNvbnN0IHhtbENoYXIgKilnUmVmZXJlbmNlRWxlbWVudE5hbWUpKSkgewotICAgICAgICAgICAgICAgICAgICBzdHJpbmcgbmFtZSA9IGdldFhtbEF0dHJpYnV0ZShjdXIsIGdSZWZlcmVuY2VBdHRyaWJ1dGVOYW1lKTsKKyAgICBmb3IgKDsgY3VyICE9IE5VTEw7IGN1ciA9IGN1ci0+bmV4dCkgeworICAgICAgICBpZiAoIXhtbFN0cmNtcChjdXItPm5hbWUsIHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgeG1sQ2hhcio+KFRyYWl0Ojpjb2xsZWN0aW9uVGFnKSkpIHsKKyAgICAgICAgICAgIGZvciAoY29uc3QgeG1sTm9kZSAqY2hpbGQgPSBjdXItPmNoaWxkcmVuOyBjaGlsZCAhPSBOVUxMOyBjaGlsZCA9IGNoaWxkLT5uZXh0KSB7CisgICAgICAgICAgICAgICAgaWYgKCgheG1sU3RyY21wKGNoaWxkLT5uYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgeG1sQ2hhcio+KFRyYWl0OjpyZWZlcmVuY2VUYWcpKSkpIHsKKyAgICAgICAgICAgICAgICAgICAgc3RkOjpzdHJpbmcgbmFtZSA9IGdldFhtbEF0dHJpYnV0ZShjaGlsZCwgVHJhaXQ6OkF0dHJpYnV0ZXM6OnJlZmVyZW5jZU5hbWUpOwogICAgICAgICAgICAgICAgICAgICBpZiAocmVmTmFtZSA9PSBuYW1lKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICByZWZOb2RlID0gY3VyOwotICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNoaWxkOwogICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGN1ciA9IGN1ci0+bmV4dDsKICAgICAgICAgICAgIH0KICAgICAgICAgfQotICAgICAgICBjb2wgPSBjb2wtPm5leHQ7CiAgICAgfQotICAgIHJldHVybjsKKyAgICByZXR1cm4gTlVMTDsKIH0KIAogdGVtcGxhdGUgPGNsYXNzIFRyYWl0Pgotc3RhdGljIHN0YXR1c190IGRlc2VyaWFsaXplQ29sbGVjdGlvbihfeG1sRG9jICpkb2MsIGNvbnN0IF94bWxOb2RlICpjdXIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGVuYW1lIFRyYWl0OjpDb2xsZWN0aW9uICZjb2xsZWN0aW9uLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlbmFtZSBUcmFpdDo6UHRyU2VyaWFsaXppbmdDdHggc2VyaWFsaXppbmdDb250ZXh0KQorc3RhdHVzX3QgZGVzZXJpYWxpemVDb2xsZWN0aW9uKGNvbnN0IHhtbE5vZGUgKmN1ciwKKyAgICAgICAgdHlwZW5hbWUgVHJhaXQ6OkNvbGxlY3Rpb24gKmNvbGxlY3Rpb24sCisgICAgICAgIHR5cGVuYW1lIFRyYWl0OjpQdHJTZXJpYWxpemluZ0N0eCBzZXJpYWxpemluZ0NvbnRleHQpCiB7Ci0gICAgY29uc3QgeG1sTm9kZSAqcm9vdCA9IGN1ci0+eG1sQ2hpbGRyZW5Ob2RlOwotICAgIHdoaWxlIChyb290ICE9IE5VTEwpIHsKLSAgICAgICAgaWYgKHhtbFN0cmNtcChyb290LT5uYW1lLCAoY29uc3QgeG1sQ2hhciAqKVRyYWl0Ojpjb2xsZWN0aW9uVGFnKSAmJgotICAgICAgICAgICAgICAgIHhtbFN0cmNtcChyb290LT5uYW1lLCAoY29uc3QgeG1sQ2hhciAqKVRyYWl0Ojp0YWcpKSB7Ci0gICAgICAgICAgICByb290ID0gcm9vdC0+bmV4dDsKLSAgICAgICAgICAgIGNvbnRpbnVlOworICAgIGZvciAoY3VyID0gY3VyLT54bWxDaGlsZHJlbk5vZGU7IGN1ciAhPSBOVUxMOyBjdXIgPSBjdXItPm5leHQpIHsKKyAgICAgICAgY29uc3QgeG1sTm9kZSAqY2hpbGQgPSBOVUxMOworICAgICAgICBpZiAoIXhtbFN0cmNtcChjdXItPm5hbWUsIHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgeG1sQ2hhcio+KFRyYWl0Ojpjb2xsZWN0aW9uVGFnKSkpIHsKKyAgICAgICAgICAgIGNoaWxkID0gY3VyLT54bWxDaGlsZHJlbk5vZGU7CisgICAgICAgIH0gZWxzZSBpZiAoIXhtbFN0cmNtcChjdXItPm5hbWUsIHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgeG1sQ2hhcio+KFRyYWl0Ojp0YWcpKSkgeworICAgICAgICAgICAgY2hpbGQgPSBjdXI7CiAgICAgICAgIH0KLSAgICAgICAgY29uc3QgeG1sTm9kZSAqY2hpbGQgPSByb290OwotICAgICAgICBpZiAoIXhtbFN0cmNtcChjaGlsZC0+bmFtZSwgKGNvbnN0IHhtbENoYXIgKilUcmFpdDo6Y29sbGVjdGlvblRhZykpIHsKLSAgICAgICAgICAgIGNoaWxkID0gY2hpbGQtPnhtbENoaWxkcmVuTm9kZTsKLSAgICAgICAgfQotICAgICAgICB3aGlsZSAoY2hpbGQgIT0gTlVMTCkgewotICAgICAgICAgICAgaWYgKCF4bWxTdHJjbXAoY2hpbGQtPm5hbWUsIChjb25zdCB4bWxDaGFyICopVHJhaXQ6OnRhZykpIHsKLSAgICAgICAgICAgICAgICB0eXBlbmFtZSBUcmFpdDo6UHRyRWxlbWVudCBlbGVtZW50OwotICAgICAgICAgICAgICAgIHN0YXR1c190IHN0YXR1cyA9IFRyYWl0OjpkZXNlcmlhbGl6ZShkb2MsIGNoaWxkLCBlbGVtZW50LCBzZXJpYWxpemluZ0NvbnRleHQpOwotICAgICAgICAgICAgICAgIGlmIChzdGF0dXMgIT0gTk9fRVJST1IpIHsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHN0YXR1czsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgaWYgKGNvbGxlY3Rpb24uYWRkKGVsZW1lbnQpIDwgMCkgewotICAgICAgICAgICAgICAgICAgICBBTE9HRSgiJXM6IGNvdWxkIG5vdCBhZGQgZWxlbWVudCB0byAlcyBjb2xsZWN0aW9uIiwgX19GVU5DVElPTl9fLAotICAgICAgICAgICAgICAgICAgICAgICAgICBUcmFpdDo6Y29sbGVjdGlvblRhZyk7CisgICAgICAgIGZvciAoOyBjaGlsZCAhPSBOVUxMOyBjaGlsZCA9IGNoaWxkLT5uZXh0KSB7CisgICAgICAgICAgICBpZiAoIXhtbFN0cmNtcChjaGlsZC0+bmFtZSwgcmVpbnRlcnByZXRfY2FzdDxjb25zdCB4bWxDaGFyKj4oVHJhaXQ6OnRhZykpKSB7CisgICAgICAgICAgICAgICAgYXV0byBlbGVtZW50ID0gVHJhaXQ6OmRlc2VyaWFsaXplKGNoaWxkLCBzZXJpYWxpemluZ0NvbnRleHQpOworICAgICAgICAgICAgICAgIGlmIChlbGVtZW50LmlzT2soKSkgeworICAgICAgICAgICAgICAgICAgICBzdGF0dXNfdCBzdGF0dXMgPSBUcmFpdDo6YWRkRWxlbWVudFRvQ29sbGVjdGlvbihlbGVtZW50LCBjb2xsZWN0aW9uKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKHN0YXR1cyAhPSBOT19FUlJPUikgeworICAgICAgICAgICAgICAgICAgICAgICAgQUxPR0UoIiVzOiBjb3VsZCBub3QgYWRkIGVsZW1lbnQgdG8gJXMgY29sbGVjdGlvbiIsIF9fZnVuY19fLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRyYWl0Ojpjb2xsZWN0aW9uVGFnKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBzdGF0dXM7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICByZXR1cm4gQkFEX1ZBTFVFOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGNoaWxkID0gY2hpbGQtPm5leHQ7CiAgICAgICAgIH0KLSAgICAgICAgaWYgKCF4bWxTdHJjbXAocm9vdC0+bmFtZSwgKGNvbnN0IHhtbENoYXIgKilUcmFpdDo6dGFnKSkgeworICAgICAgICBpZiAoIXhtbFN0cmNtcChjdXItPm5hbWUsIHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgeG1sQ2hhcio+KFRyYWl0Ojp0YWcpKSkgewogICAgICAgICAgICAgcmV0dXJuIE5PX0VSUk9SOwogICAgICAgICB9Ci0gICAgICAgIHJvb3QgPSByb290LT5uZXh0OwogICAgIH0KICAgICByZXR1cm4gTk9fRVJST1I7CiB9CiAKLWNvbnN0IGNoYXIgKmNvbnN0IEF1ZGlvR2FpblRyYWl0czo6dGFnID0gImdhaW4iOwotY29uc3QgY2hhciAqY29uc3QgQXVkaW9HYWluVHJhaXRzOjpjb2xsZWN0aW9uVGFnID0gImdhaW5zIjsKLQotY29uc3QgY2hhciBBdWRpb0dhaW5UcmFpdHM6OkF0dHJpYnV0ZXM6Om1vZGVbXSA9ICJtb2RlIjsKLWNvbnN0IGNoYXIgQXVkaW9HYWluVHJhaXRzOjpBdHRyaWJ1dGVzOjpjaGFubmVsTWFza1tdID0gImNoYW5uZWxfbWFzayI7Ci1jb25zdCBjaGFyIEF1ZGlvR2FpblRyYWl0czo6QXR0cmlidXRlczo6bWluVmFsdWVNQltdID0gIm1pblZhbHVlTUIiOwotY29uc3QgY2hhciBBdWRpb0dhaW5UcmFpdHM6OkF0dHJpYnV0ZXM6Om1heFZhbHVlTUJbXSA9ICJtYXhWYWx1ZU1CIjsKLWNvbnN0IGNoYXIgQXVkaW9HYWluVHJhaXRzOjpBdHRyaWJ1dGVzOjpkZWZhdWx0VmFsdWVNQltdID0gImRlZmF1bHRWYWx1ZU1CIjsKLWNvbnN0IGNoYXIgQXVkaW9HYWluVHJhaXRzOjpBdHRyaWJ1dGVzOjpzdGVwVmFsdWVNQltdID0gInN0ZXBWYWx1ZU1CIjsKLWNvbnN0IGNoYXIgQXVkaW9HYWluVHJhaXRzOjpBdHRyaWJ1dGVzOjptaW5SYW1wTXNbXSA9ICJtaW5SYW1wTXMiOwotY29uc3QgY2hhciBBdWRpb0dhaW5UcmFpdHM6OkF0dHJpYnV0ZXM6Om1heFJhbXBNc1tdID0gIm1heFJhbXBNcyI7Ci0KLXN0YXR1c190IEF1ZGlvR2FpblRyYWl0czo6ZGVzZXJpYWxpemUoX3htbERvYyAqLypkb2MqLywgY29uc3QgX3htbE5vZGUgKnJvb3QsIFB0ckVsZW1lbnQgJmdhaW4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB0clNlcmlhbGl6aW5nQ3R4IC8qc2VyaWFsaXppbmdDb250ZXh0Ki8pCitSZXR1cm48QXVkaW9HYWluVHJhaXRzOjpFbGVtZW50PiBBdWRpb0dhaW5UcmFpdHM6OmRlc2VyaWFsaXplKGNvbnN0IHhtbE5vZGUgKmN1ciwKKyAgICAgICAgUHRyU2VyaWFsaXppbmdDdHggLypzZXJpYWxpemluZ0NvbnRleHQqLykKIHsKICAgICBzdGF0aWMgdWludDMyX3QgaW5kZXggPSAwOwotICAgIGdhaW4gPSBuZXcgRWxlbWVudChpbmRleCsrLCB0cnVlKTsKKyAgICBFbGVtZW50IGdhaW4gPSBuZXcgQXVkaW9HYWluKGluZGV4KyssIHRydWUpOwogCi0gICAgc3RyaW5nIG1vZGUgPSBnZXRYbWxBdHRyaWJ1dGUocm9vdCwgQXR0cmlidXRlczo6bW9kZSk7CisgICAgc3RkOjpzdHJpbmcgbW9kZSA9IGdldFhtbEF0dHJpYnV0ZShjdXIsIEF0dHJpYnV0ZXM6Om1vZGUpOwogICAgIGlmICghbW9kZS5lbXB0eSgpKSB7CiAgICAgICAgIGdhaW4tPnNldE1vZGUoR2Fpbk1vZGVDb252ZXJ0ZXI6Om1hc2tGcm9tU3RyaW5nKG1vZGUpKTsKICAgICB9CiAKLSAgICBzdHJpbmcgY2hhbm5lbHNMaXRlcmFsID0gZ2V0WG1sQXR0cmlidXRlKHJvb3QsIEF0dHJpYnV0ZXM6OmNoYW5uZWxNYXNrKTsKKyAgICBzdGQ6OnN0cmluZyBjaGFubmVsc0xpdGVyYWwgPSBnZXRYbWxBdHRyaWJ1dGUoY3VyLCBBdHRyaWJ1dGVzOjpjaGFubmVsTWFzayk7CiAgICAgaWYgKCFjaGFubmVsc0xpdGVyYWwuZW1wdHkoKSkgewogICAgICAgICBnYWluLT5zZXRDaGFubmVsTWFzayhjaGFubmVsTWFza0Zyb21TdHJpbmcoY2hhbm5lbHNMaXRlcmFsKSk7CiAgICAgfQogCi0gICAgc3RyaW5nIG1pblZhbHVlTUJMaXRlcmFsID0gZ2V0WG1sQXR0cmlidXRlKHJvb3QsIEF0dHJpYnV0ZXM6Om1pblZhbHVlTUIpOworICAgIHN0ZDo6c3RyaW5nIG1pblZhbHVlTUJMaXRlcmFsID0gZ2V0WG1sQXR0cmlidXRlKGN1ciwgQXR0cmlidXRlczo6bWluVmFsdWVNQik7CiAgICAgaW50MzJfdCBtaW5WYWx1ZU1COwogICAgIGlmICghbWluVmFsdWVNQkxpdGVyYWwuZW1wdHkoKSAmJiBjb252ZXJ0VG8obWluVmFsdWVNQkxpdGVyYWwsIG1pblZhbHVlTUIpKSB7CiAgICAgICAgIGdhaW4tPnNldE1pblZhbHVlSW5NYihtaW5WYWx1ZU1CKTsKICAgICB9CiAKLSAgICBzdHJpbmcgbWF4VmFsdWVNQkxpdGVyYWwgPSBnZXRYbWxBdHRyaWJ1dGUocm9vdCwgQXR0cmlidXRlczo6bWF4VmFsdWVNQik7CisgICAgc3RkOjpzdHJpbmcgbWF4VmFsdWVNQkxpdGVyYWwgPSBnZXRYbWxBdHRyaWJ1dGUoY3VyLCBBdHRyaWJ1dGVzOjptYXhWYWx1ZU1CKTsKICAgICBpbnQzMl90IG1heFZhbHVlTUI7CiAgICAgaWYgKCFtYXhWYWx1ZU1CTGl0ZXJhbC5lbXB0eSgpICYmIGNvbnZlcnRUbyhtYXhWYWx1ZU1CTGl0ZXJhbCwgbWF4VmFsdWVNQikpIHsKICAgICAgICAgZ2Fpbi0+c2V0TWF4VmFsdWVJbk1iKG1heFZhbHVlTUIpOwogICAgIH0KIAotICAgIHN0cmluZyBkZWZhdWx0VmFsdWVNQkxpdGVyYWwgPSBnZXRYbWxBdHRyaWJ1dGUocm9vdCwgQXR0cmlidXRlczo6ZGVmYXVsdFZhbHVlTUIpOworICAgIHN0ZDo6c3RyaW5nIGRlZmF1bHRWYWx1ZU1CTGl0ZXJhbCA9IGdldFhtbEF0dHJpYnV0ZShjdXIsIEF0dHJpYnV0ZXM6OmRlZmF1bHRWYWx1ZU1CKTsKICAgICBpbnQzMl90IGRlZmF1bHRWYWx1ZU1COwogICAgIGlmICghZGVmYXVsdFZhbHVlTUJMaXRlcmFsLmVtcHR5KCkgJiYgY29udmVydFRvKGRlZmF1bHRWYWx1ZU1CTGl0ZXJhbCwgZGVmYXVsdFZhbHVlTUIpKSB7CiAgICAgICAgIGdhaW4tPnNldERlZmF1bHRWYWx1ZUluTWIoZGVmYXVsdFZhbHVlTUIpOwogICAgIH0KIAotICAgIHN0cmluZyBzdGVwVmFsdWVNQkxpdGVyYWwgPSBnZXRYbWxBdHRyaWJ1dGUocm9vdCwgQXR0cmlidXRlczo6c3RlcFZhbHVlTUIpOworICAgIHN0ZDo6c3RyaW5nIHN0ZXBWYWx1ZU1CTGl0ZXJhbCA9IGdldFhtbEF0dHJpYnV0ZShjdXIsIEF0dHJpYnV0ZXM6OnN0ZXBWYWx1ZU1CKTsKICAgICB1aW50MzJfdCBzdGVwVmFsdWVNQjsKICAgICBpZiAoIXN0ZXBWYWx1ZU1CTGl0ZXJhbC5lbXB0eSgpICYmIGNvbnZlcnRUbyhzdGVwVmFsdWVNQkxpdGVyYWwsIHN0ZXBWYWx1ZU1CKSkgewogICAgICAgICBnYWluLT5zZXRTdGVwVmFsdWVJbk1iKHN0ZXBWYWx1ZU1CKTsKICAgICB9CiAKLSAgICBzdHJpbmcgbWluUmFtcE1zTGl0ZXJhbCA9IGdldFhtbEF0dHJpYnV0ZShyb290LCBBdHRyaWJ1dGVzOjptaW5SYW1wTXMpOworICAgIHN0ZDo6c3RyaW5nIG1pblJhbXBNc0xpdGVyYWwgPSBnZXRYbWxBdHRyaWJ1dGUoY3VyLCBBdHRyaWJ1dGVzOjptaW5SYW1wTXMpOwogICAgIHVpbnQzMl90IG1pblJhbXBNczsKICAgICBpZiAoIW1pblJhbXBNc0xpdGVyYWwuZW1wdHkoKSAmJiBjb252ZXJ0VG8obWluUmFtcE1zTGl0ZXJhbCwgbWluUmFtcE1zKSkgewogICAgICAgICBnYWluLT5zZXRNaW5SYW1wSW5NcyhtaW5SYW1wTXMpOwogICAgIH0KIAotICAgIHN0cmluZyBtYXhSYW1wTXNMaXRlcmFsID0gZ2V0WG1sQXR0cmlidXRlKHJvb3QsIEF0dHJpYnV0ZXM6Om1heFJhbXBNcyk7CisgICAgc3RkOjpzdHJpbmcgbWF4UmFtcE1zTGl0ZXJhbCA9IGdldFhtbEF0dHJpYnV0ZShjdXIsIEF0dHJpYnV0ZXM6Om1heFJhbXBNcyk7CiAgICAgdWludDMyX3QgbWF4UmFtcE1zOwogICAgIGlmICghbWF4UmFtcE1zTGl0ZXJhbC5lbXB0eSgpICYmIGNvbnZlcnRUbyhtYXhSYW1wTXNMaXRlcmFsLCBtYXhSYW1wTXMpKSB7CiAgICAgICAgIGdhaW4tPnNldE1heFJhbXBJbk1zKG1heFJhbXBNcyk7CiAgICAgfQotICAgIEFMT0dWKCIlczogYWRkaW5nIG5ldyBnYWluIG1vZGUgJTA4eCBjaGFubmVsIG1hc2sgJTA4eCBtaW4gbUIgJWQgbWF4IG1CICVkIiwgX19GVU5DVElPTl9fLAorICAgIEFMT0dWKCIlczogYWRkaW5nIG5ldyBnYWluIG1vZGUgJTA4eCBjaGFubmVsIG1hc2sgJTA4eCBtaW4gbUIgJWQgbWF4IG1CICVkIiwgX19mdW5jX18sCiAgICAgICAgICAgZ2Fpbi0+Z2V0TW9kZSgpLCBnYWluLT5nZXRDaGFubmVsTWFzaygpLCBnYWluLT5nZXRNaW5WYWx1ZUluTWIoKSwKICAgICAgICAgICBnYWluLT5nZXRNYXhWYWx1ZUluTWIoKSk7CiAKLSAgICBpZiAoZ2Fpbi0+Z2V0TW9kZSgpID09IDApIHsKLSAgICAgICAgcmV0dXJuIEJBRF9WQUxVRTsKKyAgICBpZiAoZ2Fpbi0+Z2V0TW9kZSgpICE9IDApIHsKKyAgICAgICAgcmV0dXJuIGdhaW47CisgICAgfSBlbHNlIHsKKyAgICAgICAgcmV0dXJuIFN0YXR1czo6ZnJvbVN0YXR1c1QoQkFEX1ZBTFVFKTsKICAgICB9Ci0gICAgcmV0dXJuIE5PX0VSUk9SOwogfQogCi1jb25zdCBjaGFyICpjb25zdCBBdWRpb1Byb2ZpbGVUcmFpdHM6OmNvbGxlY3Rpb25UYWcgPSAicHJvZmlsZXMiOwotY29uc3QgY2hhciAqY29uc3QgQXVkaW9Qcm9maWxlVHJhaXRzOjp0YWcgPSAicHJvZmlsZSI7Ci0KLWNvbnN0IGNoYXIgQXVkaW9Qcm9maWxlVHJhaXRzOjpBdHRyaWJ1dGVzOjpuYW1lW10gPSAibmFtZSI7Ci1jb25zdCBjaGFyIEF1ZGlvUHJvZmlsZVRyYWl0czo6QXR0cmlidXRlczo6c2FtcGxpbmdSYXRlc1tdID0gInNhbXBsaW5nUmF0ZXMiOwotY29uc3QgY2hhciBBdWRpb1Byb2ZpbGVUcmFpdHM6OkF0dHJpYnV0ZXM6OmZvcm1hdFtdID0gImZvcm1hdCI7Ci1jb25zdCBjaGFyIEF1ZGlvUHJvZmlsZVRyYWl0czo6QXR0cmlidXRlczo6Y2hhbm5lbE1hc2tzW10gPSAiY2hhbm5lbE1hc2tzIjsKLQotc3RhdHVzX3QgQXVkaW9Qcm9maWxlVHJhaXRzOjpkZXNlcmlhbGl6ZShfeG1sRG9jICovKmRvYyovLCBjb25zdCBfeG1sTm9kZSAqcm9vdCwgUHRyRWxlbWVudCAmcHJvZmlsZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHRyU2VyaWFsaXppbmdDdHggLypzZXJpYWxpemluZ0NvbnRleHQqLykKK1JldHVybjxBdWRpb1Byb2ZpbGVUcmFpdHM6OkVsZW1lbnQ+IEF1ZGlvUHJvZmlsZVRyYWl0czo6ZGVzZXJpYWxpemUoY29uc3QgeG1sTm9kZSAqY3VyLAorICAgICAgICBQdHJTZXJpYWxpemluZ0N0eCAvKnNlcmlhbGl6aW5nQ29udGV4dCovKQogewotICAgIHN0cmluZyBzYW1wbGluZ1JhdGVzID0gZ2V0WG1sQXR0cmlidXRlKHJvb3QsIEF0dHJpYnV0ZXM6OnNhbXBsaW5nUmF0ZXMpOwotICAgIHN0cmluZyBmb3JtYXQgPSBnZXRYbWxBdHRyaWJ1dGUocm9vdCwgQXR0cmlidXRlczo6Zm9ybWF0KTsKLSAgICBzdHJpbmcgY2hhbm5lbHMgPSBnZXRYbWxBdHRyaWJ1dGUocm9vdCwgQXR0cmlidXRlczo6Y2hhbm5lbE1hc2tzKTsKKyAgICBzdGQ6OnN0cmluZyBzYW1wbGluZ1JhdGVzID0gZ2V0WG1sQXR0cmlidXRlKGN1ciwgQXR0cmlidXRlczo6c2FtcGxpbmdSYXRlcyk7CisgICAgc3RkOjpzdHJpbmcgZm9ybWF0ID0gZ2V0WG1sQXR0cmlidXRlKGN1ciwgQXR0cmlidXRlczo6Zm9ybWF0KTsKKyAgICBzdGQ6OnN0cmluZyBjaGFubmVscyA9IGdldFhtbEF0dHJpYnV0ZShjdXIsIEF0dHJpYnV0ZXM6OmNoYW5uZWxNYXNrcyk7CiAKLSAgICBwcm9maWxlID0gbmV3IEVsZW1lbnQoZm9ybWF0RnJvbVN0cmluZyhmb3JtYXQsIGdEeW5hbWljRm9ybWF0KSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhbm5lbE1hc2tzRnJvbVN0cmluZyhjaGFubmVscywgIiwiKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgc2FtcGxpbmdSYXRlc0Zyb21TdHJpbmcoc2FtcGxpbmdSYXRlcywgIiwiKSk7CisgICAgRWxlbWVudCBwcm9maWxlID0gbmV3IEF1ZGlvUHJvZmlsZShmb3JtYXRGcm9tU3RyaW5nKGZvcm1hdCwgZ0R5bmFtaWNGb3JtYXQpLAorICAgICAgICAgICAgY2hhbm5lbE1hc2tzRnJvbVN0cmluZyhjaGFubmVscywgIiwiKSwKKyAgICAgICAgICAgIHNhbXBsaW5nUmF0ZXNGcm9tU3RyaW5nKHNhbXBsaW5nUmF0ZXMsICIsIikpOwogCiAgICAgcHJvZmlsZS0+c2V0RHluYW1pY0Zvcm1hdChwcm9maWxlLT5nZXRGb3JtYXQoKSA9PSBnRHluYW1pY0Zvcm1hdCk7CiAgICAgcHJvZmlsZS0+c2V0RHluYW1pY0NoYW5uZWxzKHByb2ZpbGUtPmdldENoYW5uZWxzKCkuaXNFbXB0eSgpKTsKICAgICBwcm9maWxlLT5zZXREeW5hbWljUmF0ZShwcm9maWxlLT5nZXRTYW1wbGVSYXRlcygpLmlzRW1wdHkoKSk7CiAKLSAgICByZXR1cm4gTk9fRVJST1I7CisgICAgcmV0dXJuIHByb2ZpbGU7CiB9CiAKLQotY29uc3QgY2hhciAqY29uc3QgTWl4UG9ydFRyYWl0czo6Y29sbGVjdGlvblRhZyA9ICJtaXhQb3J0cyI7Ci1jb25zdCBjaGFyICpjb25zdCBNaXhQb3J0VHJhaXRzOjp0YWcgPSAibWl4UG9ydCI7Ci0KLWNvbnN0IGNoYXIgTWl4UG9ydFRyYWl0czo6QXR0cmlidXRlczo6bmFtZVtdID0gIm5hbWUiOwotY29uc3QgY2hhciBNaXhQb3J0VHJhaXRzOjpBdHRyaWJ1dGVzOjpyb2xlW10gPSAicm9sZSI7Ci1jb25zdCBjaGFyIE1peFBvcnRUcmFpdHM6OkF0dHJpYnV0ZXM6OmZsYWdzW10gPSAiZmxhZ3MiOwotY29uc3QgY2hhciBNaXhQb3J0VHJhaXRzOjpBdHRyaWJ1dGVzOjptYXhPcGVuQ291bnRbXSA9ICJtYXhPcGVuQ291bnQiOwotY29uc3QgY2hhciBNaXhQb3J0VHJhaXRzOjpBdHRyaWJ1dGVzOjptYXhBY3RpdmVDb3VudFtdID0gIm1heEFjdGl2ZUNvdW50IjsKLQotc3RhdHVzX3QgTWl4UG9ydFRyYWl0czo6ZGVzZXJpYWxpemUoX3htbERvYyAqZG9jLCBjb25zdCBfeG1sTm9kZSAqY2hpbGQsIFB0ckVsZW1lbnQgJm1peFBvcnQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQdHJTZXJpYWxpemluZ0N0eCAvKnNlcmlhbGl6aW5nQ29udGV4dCovKQorUmV0dXJuPE1peFBvcnRUcmFpdHM6OkVsZW1lbnQ+IE1peFBvcnRUcmFpdHM6OmRlc2VyaWFsaXplKGNvbnN0IHhtbE5vZGUgKmNoaWxkLAorICAgICAgICBQdHJTZXJpYWxpemluZ0N0eCAvKnNlcmlhbGl6aW5nQ29udGV4dCovKQogewotICAgIHN0cmluZyBuYW1lID0gZ2V0WG1sQXR0cmlidXRlKGNoaWxkLCBBdHRyaWJ1dGVzOjpuYW1lKTsKKyAgICBzdGQ6OnN0cmluZyBuYW1lID0gZ2V0WG1sQXR0cmlidXRlKGNoaWxkLCBBdHRyaWJ1dGVzOjpuYW1lKTsKICAgICBpZiAobmFtZS5lbXB0eSgpKSB7Ci0gICAgICAgIEFMT0dFKCIlczogTm8gJXMgZm91bmQiLCBfX0ZVTkNUSU9OX18sIEF0dHJpYnV0ZXM6Om5hbWUpOwotICAgICAgICByZXR1cm4gQkFEX1ZBTFVFOworICAgICAgICBBTE9HRSgiJXM6IE5vICVzIGZvdW5kIiwgX19mdW5jX18sIEF0dHJpYnV0ZXM6Om5hbWUpOworICAgICAgICByZXR1cm4gU3RhdHVzOjpmcm9tU3RhdHVzVChCQURfVkFMVUUpOwogICAgIH0KLSAgICBBTE9HVigiJXM6ICVzICVzPSVzIiwgX19GVU5DVElPTl9fLCB0YWcsIEF0dHJpYnV0ZXM6Om5hbWUsIG5hbWUuY19zdHIoKSk7Ci0gICAgc3RyaW5nIHJvbGUgPSBnZXRYbWxBdHRyaWJ1dGUoY2hpbGQsIEF0dHJpYnV0ZXM6OnJvbGUpOworICAgIEFMT0dWKCIlczogJXMgJXM9JXMiLCBfX2Z1bmNfXywgdGFnLCBBdHRyaWJ1dGVzOjpuYW1lLCBuYW1lLmNfc3RyKCkpOworICAgIHN0ZDo6c3RyaW5nIHJvbGUgPSBnZXRYbWxBdHRyaWJ1dGUoY2hpbGQsIEF0dHJpYnV0ZXM6OnJvbGUpOwogICAgIGlmIChyb2xlLmVtcHR5KCkpIHsKLSAgICAgICAgQUxPR0UoIiVzOiBObyAlcyBmb3VuZCIsIF9fRlVOQ1RJT05fXywgQXR0cmlidXRlczo6cm9sZSk7Ci0gICAgICAgIHJldHVybiBCQURfVkFMVUU7CisgICAgICAgIEFMT0dFKCIlczogTm8gJXMgZm91bmQiLCBfX2Z1bmNfXywgQXR0cmlidXRlczo6cm9sZSk7CisgICAgICAgIHJldHVybiBTdGF0dXM6OmZyb21TdGF0dXNUKEJBRF9WQUxVRSk7CiAgICAgfQotICAgIEFMT0dWKCIlczogUm9sZT0lcyIsIF9fRlVOQ1RJT05fXywgcm9sZS5jX3N0cigpKTsKLSAgICBhdWRpb19wb3J0X3JvbGVfdCBwb3J0Um9sZSA9IHJvbGUgPT0gInNvdXJjZSIgPyBBVURJT19QT1JUX1JPTEVfU09VUkNFIDogQVVESU9fUE9SVF9ST0xFX1NJTks7CisgICAgQUxPR1YoIiVzOiBSb2xlPSVzIiwgX19mdW5jX18sIHJvbGUuY19zdHIoKSk7CisgICAgYXVkaW9fcG9ydF9yb2xlX3QgcG9ydFJvbGUgPSAocm9sZSA9PSBBdHRyaWJ1dGVzOjpyb2xlU291cmNlKSA/CisgICAgICAgICAgICBBVURJT19QT1JUX1JPTEVfU09VUkNFIDogQVVESU9fUE9SVF9ST0xFX1NJTks7CiAKLSAgICBtaXhQb3J0ID0gbmV3IEVsZW1lbnQoU3RyaW5nOChuYW1lLmNfc3RyKCkpLCBwb3J0Um9sZSk7CisgICAgRWxlbWVudCBtaXhQb3J0ID0gbmV3IElPUHJvZmlsZShTdHJpbmc4KG5hbWUuY19zdHIoKSksIHBvcnRSb2xlKTsKIAogICAgIEF1ZGlvUHJvZmlsZVRyYWl0czo6Q29sbGVjdGlvbiBwcm9maWxlczsKLSAgICBkZXNlcmlhbGl6ZUNvbGxlY3Rpb248QXVkaW9Qcm9maWxlVHJhaXRzPihkb2MsIGNoaWxkLCBwcm9maWxlcywgTlVMTCk7CisgICAgc3RhdHVzX3Qgc3RhdHVzID0gZGVzZXJpYWxpemVDb2xsZWN0aW9uPEF1ZGlvUHJvZmlsZVRyYWl0cz4oY2hpbGQsICZwcm9maWxlcywgTlVMTCk7CisgICAgaWYgKHN0YXR1cyAhPSBOT19FUlJPUikgeworICAgICAgICByZXR1cm4gU3RhdHVzOjpmcm9tU3RhdHVzVChzdGF0dXMpOworICAgIH0KICAgICBpZiAocHJvZmlsZXMuaXNFbXB0eSgpKSB7Ci0gICAgICAgIHNwIDxBdWRpb1Byb2ZpbGU+IGR5bmFtaWNQcm9maWxlID0gbmV3IEF1ZGlvUHJvZmlsZShnRHluYW1pY0Zvcm1hdCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENoYW5uZWxzVmVjdG9yKCksIFNhbXBsZVJhdGVWZWN0b3IoKSk7Ci0gICAgICAgIGR5bmFtaWNQcm9maWxlLT5zZXREeW5hbWljRm9ybWF0KHRydWUpOwotICAgICAgICBkeW5hbWljUHJvZmlsZS0+c2V0RHluYW1pY0NoYW5uZWxzKHRydWUpOwotICAgICAgICBkeW5hbWljUHJvZmlsZS0+c2V0RHluYW1pY1JhdGUodHJ1ZSk7Ci0gICAgICAgIHByb2ZpbGVzLmFkZChkeW5hbWljUHJvZmlsZSk7CisgICAgICAgIHByb2ZpbGVzLmFkZChBdWRpb1Byb2ZpbGU6OmNyZWF0ZUZ1bGxEeW5hbWljKCkpOwogICAgIH0KICAgICBtaXhQb3J0LT5zZXRBdWRpb1Byb2ZpbGVzKHByb2ZpbGVzKTsKIAotICAgIHN0cmluZyBmbGFncyA9IGdldFhtbEF0dHJpYnV0ZShjaGlsZCwgQXR0cmlidXRlczo6ZmxhZ3MpOworICAgIHN0ZDo6c3RyaW5nIGZsYWdzID0gZ2V0WG1sQXR0cmlidXRlKGNoaWxkLCBBdHRyaWJ1dGVzOjpmbGFncyk7CiAgICAgaWYgKCFmbGFncy5lbXB0eSgpKSB7CiAgICAgICAgIC8vIFNvdXJjZSByb2xlCiAgICAgICAgIGlmIChwb3J0Um9sZSA9PSBBVURJT19QT1JUX1JPTEVfU09VUkNFKSB7CkBAIC0yNjEsNTIgKzQ2MSw0NiBAQAogICAgICAgICAgICAgbWl4UG9ydC0+c2V0RmxhZ3MoSW5wdXRGbGFnQ29udmVydGVyOjptYXNrRnJvbVN0cmluZyhmbGFncykpOwogICAgICAgICB9CiAgICAgfQotICAgIHN0cmluZyBtYXhPcGVuQ291bnQgPSBnZXRYbWxBdHRyaWJ1dGUoY2hpbGQsIEF0dHJpYnV0ZXM6Om1heE9wZW5Db3VudCk7CisgICAgc3RkOjpzdHJpbmcgbWF4T3BlbkNvdW50ID0gZ2V0WG1sQXR0cmlidXRlKGNoaWxkLCBBdHRyaWJ1dGVzOjptYXhPcGVuQ291bnQpOwogICAgIGlmICghbWF4T3BlbkNvdW50LmVtcHR5KCkpIHsKICAgICAgICAgY29udmVydFRvKG1heE9wZW5Db3VudCwgbWl4UG9ydC0+bWF4T3BlbkNvdW50KTsKICAgICB9Ci0gICAgc3RyaW5nIG1heEFjdGl2ZUNvdW50ID0gZ2V0WG1sQXR0cmlidXRlKGNoaWxkLCBBdHRyaWJ1dGVzOjptYXhBY3RpdmVDb3VudCk7CisgICAgc3RkOjpzdHJpbmcgbWF4QWN0aXZlQ291bnQgPSBnZXRYbWxBdHRyaWJ1dGUoY2hpbGQsIEF0dHJpYnV0ZXM6Om1heEFjdGl2ZUNvdW50KTsKICAgICBpZiAoIW1heEFjdGl2ZUNvdW50LmVtcHR5KCkpIHsKICAgICAgICAgY29udmVydFRvKG1heEFjdGl2ZUNvdW50LCBtaXhQb3J0LT5tYXhBY3RpdmVDb3VudCk7CiAgICAgfQogICAgIC8vIERlc2VyaWFsaXplIGNoaWxkcmVuCiAgICAgQXVkaW9HYWluVHJhaXRzOjpDb2xsZWN0aW9uIGdhaW5zOwotICAgIGRlc2VyaWFsaXplQ29sbGVjdGlvbjxBdWRpb0dhaW5UcmFpdHM+KGRvYywgY2hpbGQsIGdhaW5zLCBOVUxMKTsKKyAgICBzdGF0dXMgPSBkZXNlcmlhbGl6ZUNvbGxlY3Rpb248QXVkaW9HYWluVHJhaXRzPihjaGlsZCwgJmdhaW5zLCBOVUxMKTsKKyAgICBpZiAoc3RhdHVzICE9IE5PX0VSUk9SKSB7CisgICAgICAgIHJldHVybiBTdGF0dXM6OmZyb21TdGF0dXNUKHN0YXR1cyk7CisgICAgfQogICAgIG1peFBvcnQtPnNldEdhaW5zKGdhaW5zKTsKIAotICAgIHJldHVybiBOT19FUlJPUjsKKyAgICByZXR1cm4gbWl4UG9ydDsKIH0KIAotY29uc3QgY2hhciAqY29uc3QgRGV2aWNlUG9ydFRyYWl0czo6dGFnID0gImRldmljZVBvcnQiOwotY29uc3QgY2hhciAqY29uc3QgRGV2aWNlUG9ydFRyYWl0czo6Y29sbGVjdGlvblRhZyA9ICJkZXZpY2VQb3J0cyI7Ci0KLWNvbnN0IGNoYXIgRGV2aWNlUG9ydFRyYWl0czo6QXR0cmlidXRlczo6dGFnTmFtZVtdID0gInRhZ05hbWUiOwotY29uc3QgY2hhciBEZXZpY2VQb3J0VHJhaXRzOjpBdHRyaWJ1dGVzOjp0eXBlW10gPSAidHlwZSI7Ci1jb25zdCBjaGFyIERldmljZVBvcnRUcmFpdHM6OkF0dHJpYnV0ZXM6OnJvbGVbXSA9ICJyb2xlIjsKLWNvbnN0IGNoYXIgRGV2aWNlUG9ydFRyYWl0czo6QXR0cmlidXRlczo6YWRkcmVzc1tdID0gImFkZHJlc3MiOwotY29uc3QgY2hhciBEZXZpY2VQb3J0VHJhaXRzOjpBdHRyaWJ1dGVzOjpyb2xlU291cmNlW10gPSAic291cmNlIjsKLQotc3RhdHVzX3QgRGV2aWNlUG9ydFRyYWl0czo6ZGVzZXJpYWxpemUoX3htbERvYyAqZG9jLCBjb25zdCBfeG1sTm9kZSAqcm9vdCwgUHRyRWxlbWVudCAmZGV2aWNlRGVzYywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB0clNlcmlhbGl6aW5nQ3R4IC8qc2VyaWFsaXppbmdDb250ZXh0Ki8pCitSZXR1cm48RGV2aWNlUG9ydFRyYWl0czo6RWxlbWVudD4gRGV2aWNlUG9ydFRyYWl0czo6ZGVzZXJpYWxpemUoY29uc3QgeG1sTm9kZSAqY3VyLAorICAgICAgICBQdHJTZXJpYWxpemluZ0N0eCAvKnNlcmlhbGl6aW5nQ29udGV4dCovKQogewotICAgIHN0cmluZyBuYW1lID0gZ2V0WG1sQXR0cmlidXRlKHJvb3QsIEF0dHJpYnV0ZXM6OnRhZ05hbWUpOworICAgIHN0ZDo6c3RyaW5nIG5hbWUgPSBnZXRYbWxBdHRyaWJ1dGUoY3VyLCBBdHRyaWJ1dGVzOjp0YWdOYW1lKTsKICAgICBpZiAobmFtZS5lbXB0eSgpKSB7Ci0gICAgICAgIEFMT0dFKCIlczogTm8gJXMgZm91bmQiLCBfX0ZVTkNUSU9OX18sIEF0dHJpYnV0ZXM6OnRhZ05hbWUpOwotICAgICAgICByZXR1cm4gQkFEX1ZBTFVFOworICAgICAgICBBTE9HRSgiJXM6IE5vICVzIGZvdW5kIiwgX19mdW5jX18sIEF0dHJpYnV0ZXM6OnRhZ05hbWUpOworICAgICAgICByZXR1cm4gU3RhdHVzOjpmcm9tU3RhdHVzVChCQURfVkFMVUUpOwogICAgIH0KLSAgICBBTE9HVigiJXM6ICVzICVzPSVzIiwgX19GVU5DVElPTl9fLCB0YWcsIEF0dHJpYnV0ZXM6OnRhZ05hbWUsIG5hbWUuY19zdHIoKSk7Ci0gICAgc3RyaW5nIHR5cGVOYW1lID0gZ2V0WG1sQXR0cmlidXRlKHJvb3QsIEF0dHJpYnV0ZXM6OnR5cGUpOworICAgIEFMT0dWKCIlczogJXMgJXM9JXMiLCBfX2Z1bmNfXywgdGFnLCBBdHRyaWJ1dGVzOjp0YWdOYW1lLCBuYW1lLmNfc3RyKCkpOworICAgIHN0ZDo6c3RyaW5nIHR5cGVOYW1lID0gZ2V0WG1sQXR0cmlidXRlKGN1ciwgQXR0cmlidXRlczo6dHlwZSk7CiAgICAgaWYgKHR5cGVOYW1lLmVtcHR5KCkpIHsKLSAgICAgICAgQUxPR0UoIiVzOiBubyB0eXBlIGZvciAlcyIsIF9fRlVOQ1RJT05fXywgbmFtZS5jX3N0cigpKTsKLSAgICAgICAgcmV0dXJuIEJBRF9WQUxVRTsKKyAgICAgICAgQUxPR0UoIiVzOiBubyB0eXBlIGZvciAlcyIsIF9fZnVuY19fLCBuYW1lLmNfc3RyKCkpOworICAgICAgICByZXR1cm4gU3RhdHVzOjpmcm9tU3RhdHVzVChCQURfVkFMVUUpOwogICAgIH0KLSAgICBBTE9HVigiJXM6ICVzICVzPSVzIiwgX19GVU5DVElPTl9fLCB0YWcsIEF0dHJpYnV0ZXM6OnR5cGUsIHR5cGVOYW1lLmNfc3RyKCkpOwotICAgIHN0cmluZyByb2xlID0gZ2V0WG1sQXR0cmlidXRlKHJvb3QsIEF0dHJpYnV0ZXM6OnJvbGUpOworICAgIEFMT0dWKCIlczogJXMgJXM9JXMiLCBfX2Z1bmNfXywgdGFnLCBBdHRyaWJ1dGVzOjp0eXBlLCB0eXBlTmFtZS5jX3N0cigpKTsKKyAgICBzdGQ6OnN0cmluZyByb2xlID0gZ2V0WG1sQXR0cmlidXRlKGN1ciwgQXR0cmlidXRlczo6cm9sZSk7CiAgICAgaWYgKHJvbGUuZW1wdHkoKSkgewotICAgICAgICBBTE9HRSgiJXM6IE5vICVzIGZvdW5kIiwgX19GVU5DVElPTl9fLCBBdHRyaWJ1dGVzOjpyb2xlKTsKLSAgICAgICAgcmV0dXJuIEJBRF9WQUxVRTsKKyAgICAgICAgQUxPR0UoIiVzOiBObyAlcyBmb3VuZCIsIF9fZnVuY19fLCBBdHRyaWJ1dGVzOjpyb2xlKTsKKyAgICAgICAgcmV0dXJuIFN0YXR1czo6ZnJvbVN0YXR1c1QoQkFEX1ZBTFVFKTsKICAgICB9Ci0gICAgQUxPR1YoIiVzOiAlcyAlcz0lcyIsIF9fRlVOQ1RJT05fXywgdGFnLCBBdHRyaWJ1dGVzOjpyb2xlLCByb2xlLmNfc3RyKCkpOworICAgIEFMT0dWKCIlczogJXMgJXM9JXMiLCBfX2Z1bmNfXywgdGFnLCBBdHRyaWJ1dGVzOjpyb2xlLCByb2xlLmNfc3RyKCkpOwogICAgIGF1ZGlvX3BvcnRfcm9sZV90IHBvcnRSb2xlID0gKHJvbGUgPT0gQXR0cmlidXRlczo6cm9sZVNvdXJjZSkgPwogICAgICAgICAgICAgICAgIEFVRElPX1BPUlRfUk9MRV9TT1VSQ0UgOiBBVURJT19QT1JUX1JPTEVfU0lOSzsKIApAQCAtMzE0LDMzOCArNTA4LDM2NCBAQAogICAgIGlmICghZGV2aWNlRnJvbVN0cmluZyh0eXBlTmFtZSwgdHlwZSkgfHwKICAgICAgICAgICAgICghYXVkaW9faXNfaW5wdXRfZGV2aWNlKHR5cGUpICYmIHBvcnRSb2xlID09IEFVRElPX1BPUlRfUk9MRV9TT1VSQ0UpIHx8CiAgICAgICAgICAgICAoIWF1ZGlvX2lzX291dHB1dF9kZXZpY2VzKHR5cGUpICYmIHBvcnRSb2xlID09IEFVRElPX1BPUlRfUk9MRV9TSU5LKSkgewotICAgICAgICBBTE9HVygiJXM6IGJhZCB0eXBlICUwOHgiLCBfX0ZVTkNUSU9OX18sIHR5cGUpOwotICAgICAgICByZXR1cm4gQkFEX1ZBTFVFOworICAgICAgICBBTE9HVygiJXM6IGJhZCB0eXBlICUwOHgiLCBfX2Z1bmNfXywgdHlwZSk7CisgICAgICAgIHJldHVybiBTdGF0dXM6OmZyb21TdGF0dXNUKEJBRF9WQUxVRSk7CiAgICAgfQotICAgIGRldmljZURlc2MgPSBuZXcgRWxlbWVudCh0eXBlLCBTdHJpbmc4KG5hbWUuY19zdHIoKSkpOworICAgIEVsZW1lbnQgZGV2aWNlRGVzYyA9IG5ldyBEZXZpY2VEZXNjcmlwdG9yKHR5cGUsIFN0cmluZzgobmFtZS5jX3N0cigpKSk7CiAKLSAgICBzdHJpbmcgYWRkcmVzcyA9IGdldFhtbEF0dHJpYnV0ZShyb290LCBBdHRyaWJ1dGVzOjphZGRyZXNzKTsKKyAgICBzdGQ6OnN0cmluZyBhZGRyZXNzID0gZ2V0WG1sQXR0cmlidXRlKGN1ciwgQXR0cmlidXRlczo6YWRkcmVzcyk7CiAgICAgaWYgKCFhZGRyZXNzLmVtcHR5KCkpIHsKLSAgICAgICAgQUxPR1YoIiVzOiBhZGRyZXNzPSVzIGZvciAlcyIsIF9fRlVOQ1RJT05fXywgYWRkcmVzcy5jX3N0cigpLCBuYW1lLmNfc3RyKCkpOworICAgICAgICBBTE9HVigiJXM6IGFkZHJlc3M9JXMgZm9yICVzIiwgX19mdW5jX18sIGFkZHJlc3MuY19zdHIoKSwgbmFtZS5jX3N0cigpKTsKICAgICAgICAgZGV2aWNlRGVzYy0+bUFkZHJlc3MgPSBTdHJpbmc4KGFkZHJlc3MuY19zdHIoKSk7CiAgICAgfQogCiAgICAgQXVkaW9Qcm9maWxlVHJhaXRzOjpDb2xsZWN0aW9uIHByb2ZpbGVzOwotICAgIGRlc2VyaWFsaXplQ29sbGVjdGlvbjxBdWRpb1Byb2ZpbGVUcmFpdHM+KGRvYywgcm9vdCwgcHJvZmlsZXMsIE5VTEwpOworICAgIHN0YXR1c190IHN0YXR1cyA9IGRlc2VyaWFsaXplQ29sbGVjdGlvbjxBdWRpb1Byb2ZpbGVUcmFpdHM+KGN1ciwgJnByb2ZpbGVzLCBOVUxMKTsKKyAgICBpZiAoc3RhdHVzICE9IE5PX0VSUk9SKSB7CisgICAgICAgIHJldHVybiBTdGF0dXM6OmZyb21TdGF0dXNUKHN0YXR1cyk7CisgICAgfQogICAgIGlmIChwcm9maWxlcy5pc0VtcHR5KCkpIHsKLSAgICAgICAgc3AgPEF1ZGlvUHJvZmlsZT4gZHluYW1pY1Byb2ZpbGUgPSBuZXcgQXVkaW9Qcm9maWxlKGdEeW5hbWljRm9ybWF0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ2hhbm5lbHNWZWN0b3IoKSwgU2FtcGxlUmF0ZVZlY3RvcigpKTsKLSAgICAgICAgZHluYW1pY1Byb2ZpbGUtPnNldER5bmFtaWNGb3JtYXQodHJ1ZSk7Ci0gICAgICAgIGR5bmFtaWNQcm9maWxlLT5zZXREeW5hbWljQ2hhbm5lbHModHJ1ZSk7Ci0gICAgICAgIGR5bmFtaWNQcm9maWxlLT5zZXREeW5hbWljUmF0ZSh0cnVlKTsKLSAgICAgICAgcHJvZmlsZXMuYWRkKGR5bmFtaWNQcm9maWxlKTsKKyAgICAgICAgcHJvZmlsZXMuYWRkKEF1ZGlvUHJvZmlsZTo6Y3JlYXRlRnVsbER5bmFtaWMoKSk7CiAgICAgfQogICAgIGRldmljZURlc2MtPnNldEF1ZGlvUHJvZmlsZXMocHJvZmlsZXMpOwogCiAgICAgLy8gRGVzZXJpYWxpemUgQXVkaW9HYWluIGNoaWxkcmVuCi0gICAgZGVzZXJpYWxpemVDb2xsZWN0aW9uPEF1ZGlvR2FpblRyYWl0cz4oZG9jLCByb290LCBkZXZpY2VEZXNjLT5tR2FpbnMsIE5VTEwpOwotICAgIEFMT0dWKCIlczogYWRkaW5nIGRldmljZSB0YWcgJXMgdHlwZSAlMDh4IGFkZHJlc3MgJXMiLCBfX0ZVTkNUSU9OX18sCisgICAgc3RhdHVzID0gZGVzZXJpYWxpemVDb2xsZWN0aW9uPEF1ZGlvR2FpblRyYWl0cz4oY3VyLCAmZGV2aWNlRGVzYy0+bUdhaW5zLCBOVUxMKTsKKyAgICBpZiAoc3RhdHVzICE9IE5PX0VSUk9SKSB7CisgICAgICAgIHJldHVybiBTdGF0dXM6OmZyb21TdGF0dXNUKHN0YXR1cyk7CisgICAgfQorICAgIEFMT0dWKCIlczogYWRkaW5nIGRldmljZSB0YWcgJXMgdHlwZSAlMDh4IGFkZHJlc3MgJXMiLCBfX2Z1bmNfXywKICAgICAgICAgICBkZXZpY2VEZXNjLT5nZXROYW1lKCkuc3RyaW5nKCksIHR5cGUsIGRldmljZURlc2MtPm1BZGRyZXNzLnN0cmluZygpKTsKLSAgICByZXR1cm4gTk9fRVJST1I7CisgICAgcmV0dXJuIGRldmljZURlc2M7CiB9CiAKLWNvbnN0IGNoYXIgKmNvbnN0IFJvdXRlVHJhaXRzOjp0YWcgPSAicm91dGUiOwotY29uc3QgY2hhciAqY29uc3QgUm91dGVUcmFpdHM6OmNvbGxlY3Rpb25UYWcgPSAicm91dGVzIjsKLQotY29uc3QgY2hhciBSb3V0ZVRyYWl0czo6QXR0cmlidXRlczo6dHlwZVtdID0gInR5cGUiOwotY29uc3QgY2hhciBSb3V0ZVRyYWl0czo6QXR0cmlidXRlczo6dHlwZU1peFtdID0gIm1peCI7Ci1jb25zdCBjaGFyIFJvdXRlVHJhaXRzOjpBdHRyaWJ1dGVzOjpzaW5rW10gPSAic2luayI7Ci1jb25zdCBjaGFyIFJvdXRlVHJhaXRzOjpBdHRyaWJ1dGVzOjpzb3VyY2VzW10gPSAic291cmNlcyI7Ci0KLQotc3RhdHVzX3QgUm91dGVUcmFpdHM6OmRlc2VyaWFsaXplKF94bWxEb2MgKi8qZG9jKi8sIGNvbnN0IF94bWxOb2RlICpyb290LCBQdHJFbGVtZW50ICZlbGVtZW50LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB0clNlcmlhbGl6aW5nQ3R4IGN0eCkKK1JldHVybjxSb3V0ZVRyYWl0czo6RWxlbWVudD4gUm91dGVUcmFpdHM6OmRlc2VyaWFsaXplKGNvbnN0IHhtbE5vZGUgKmN1ciwgUHRyU2VyaWFsaXppbmdDdHggY3R4KQogewotICAgIHN0cmluZyB0eXBlID0gZ2V0WG1sQXR0cmlidXRlKHJvb3QsIEF0dHJpYnV0ZXM6OnR5cGUpOworICAgIHN0ZDo6c3RyaW5nIHR5cGUgPSBnZXRYbWxBdHRyaWJ1dGUoY3VyLCBBdHRyaWJ1dGVzOjp0eXBlKTsKICAgICBpZiAodHlwZS5lbXB0eSgpKSB7Ci0gICAgICAgIEFMT0dFKCIlczogTm8gJXMgZm91bmQiLCBfX0ZVTkNUSU9OX18sIEF0dHJpYnV0ZXM6OnR5cGUpOwotICAgICAgICByZXR1cm4gQkFEX1ZBTFVFOworICAgICAgICBBTE9HRSgiJXM6IE5vICVzIGZvdW5kIiwgX19mdW5jX18sIEF0dHJpYnV0ZXM6OnR5cGUpOworICAgICAgICByZXR1cm4gU3RhdHVzOjpmcm9tU3RhdHVzVChCQURfVkFMVUUpOwogICAgIH0KICAgICBhdWRpb19yb3V0ZV90eXBlX3Qgcm91dGVUeXBlID0gKHR5cGUgPT0gQXR0cmlidXRlczo6dHlwZU1peCkgPwogICAgICAgICAgICAgICAgIEFVRElPX1JPVVRFX01JWCA6IEFVRElPX1JPVVRFX01VWDsKIAotICAgIEFMT0dWKCIlczogJXMgJXM9JXMiLCBfX0ZVTkNUSU9OX18sIHRhZywgQXR0cmlidXRlczo6dHlwZSwgdHlwZS5jX3N0cigpKTsKLSAgICBlbGVtZW50ID0gbmV3IEVsZW1lbnQocm91dGVUeXBlKTsKKyAgICBBTE9HVigiJXM6ICVzICVzPSVzIiwgX19mdW5jX18sIHRhZywgQXR0cmlidXRlczo6dHlwZSwgdHlwZS5jX3N0cigpKTsKKyAgICBFbGVtZW50IHJvdXRlID0gbmV3IEF1ZGlvUm91dGUocm91dGVUeXBlKTsKIAotICAgIHN0cmluZyBzaW5rQXR0ciA9IGdldFhtbEF0dHJpYnV0ZShyb290LCBBdHRyaWJ1dGVzOjpzaW5rKTsKKyAgICBzdGQ6OnN0cmluZyBzaW5rQXR0ciA9IGdldFhtbEF0dHJpYnV0ZShjdXIsIEF0dHJpYnV0ZXM6OnNpbmspOwogICAgIGlmIChzaW5rQXR0ci5lbXB0eSgpKSB7Ci0gICAgICAgIEFMT0dFKCIlczogTm8gJXMgZm91bmQiLCBfX0ZVTkNUSU9OX18sIEF0dHJpYnV0ZXM6OnNpbmspOwotICAgICAgICByZXR1cm4gQkFEX1ZBTFVFOworICAgICAgICBBTE9HRSgiJXM6IE5vICVzIGZvdW5kIiwgX19mdW5jX18sIEF0dHJpYnV0ZXM6OnNpbmspOworICAgICAgICByZXR1cm4gU3RhdHVzOjpmcm9tU3RhdHVzVChCQURfVkFMVUUpOwogICAgIH0KICAgICAvLyBDb252ZXJ0IFNpbmsgbmFtZSB0byBwb3J0IHBvaW50ZXIKICAgICBzcDxBdWRpb1BvcnQ+IHNpbmsgPSBjdHgtPmZpbmRQb3J0QnlUYWdOYW1lKFN0cmluZzgoc2lua0F0dHIuY19zdHIoKSkpOwogICAgIGlmIChzaW5rID09IE5VTEwpIHsKLSAgICAgICAgQUxPR0UoIiVzOiBubyBzaW5rIGZvdW5kIHdpdGggbmFtZT0lcyIsIF9fRlVOQ1RJT05fXywgc2lua0F0dHIuY19zdHIoKSk7Ci0gICAgICAgIHJldHVybiBCQURfVkFMVUU7CisgICAgICAgIEFMT0dFKCIlczogbm8gc2luayBmb3VuZCB3aXRoIG5hbWU9JXMiLCBfX2Z1bmNfXywgc2lua0F0dHIuY19zdHIoKSk7CisgICAgICAgIHJldHVybiBTdGF0dXM6OmZyb21TdGF0dXNUKEJBRF9WQUxVRSk7CiAgICAgfQotICAgIGVsZW1lbnQtPnNldFNpbmsoc2luayk7CisgICAgcm91dGUtPnNldFNpbmsoc2luayk7CiAKLSAgICBzdHJpbmcgc291cmNlc0F0dHIgPSBnZXRYbWxBdHRyaWJ1dGUocm9vdCwgQXR0cmlidXRlczo6c291cmNlcyk7CisgICAgc3RkOjpzdHJpbmcgc291cmNlc0F0dHIgPSBnZXRYbWxBdHRyaWJ1dGUoY3VyLCBBdHRyaWJ1dGVzOjpzb3VyY2VzKTsKICAgICBpZiAoc291cmNlc0F0dHIuZW1wdHkoKSkgewotICAgICAgICBBTE9HRSgiJXM6IE5vICVzIGZvdW5kIiwgX19GVU5DVElPTl9fLCBBdHRyaWJ1dGVzOjpzb3VyY2VzKTsKLSAgICAgICAgcmV0dXJuIEJBRF9WQUxVRTsKKyAgICAgICAgQUxPR0UoIiVzOiBObyAlcyBmb3VuZCIsIF9fZnVuY19fLCBBdHRyaWJ1dGVzOjpzb3VyY2VzKTsKKyAgICAgICAgcmV0dXJuIFN0YXR1czo6ZnJvbVN0YXR1c1QoQkFEX1ZBTFVFKTsKICAgICB9CiAgICAgLy8gVG9rZW5pemUgYW5kIENvbnZlcnQgU291cmNlcyBuYW1lIHRvIHBvcnQgcG9pbnRlcgogICAgIEF1ZGlvUG9ydFZlY3RvciBzb3VyY2VzOwotICAgIGNoYXIgKnNvdXJjZXNMaXRlcmFsID0gc3RybmR1cChzb3VyY2VzQXR0ci5jX3N0cigpLCBzdHJsZW4oc291cmNlc0F0dHIuY19zdHIoKSkpOwotICAgIGNoYXIgKmRldlRhZyA9IHN0cnRvayhzb3VyY2VzTGl0ZXJhbCwgIiwiKTsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8Y2hhcltdPiBzb3VyY2VzTGl0ZXJhbHtzdHJuZHVwKAorICAgICAgICAgICAgICAgIHNvdXJjZXNBdHRyLmNfc3RyKCksIHN0cmxlbihzb3VyY2VzQXR0ci5jX3N0cigpKSl9OworICAgIGNoYXIgKmRldlRhZyA9IHN0cnRvayhzb3VyY2VzTGl0ZXJhbC5nZXQoKSwgIiwiKTsKICAgICB3aGlsZSAoZGV2VGFnICE9IE5VTEwpIHsKICAgICAgICAgaWYgKHN0cmxlbihkZXZUYWcpICE9IDApIHsKICAgICAgICAgICAgIHNwPEF1ZGlvUG9ydD4gc291cmNlID0gY3R4LT5maW5kUG9ydEJ5VGFnTmFtZShTdHJpbmc4KGRldlRhZykpOwogICAgICAgICAgICAgaWYgKHNvdXJjZSA9PSBOVUxMKSB7Ci0gICAgICAgICAgICAgICAgQUxPR0UoIiVzOiBubyBzb3VyY2UgZm91bmQgd2l0aCBuYW1lPSVzIiwgX19GVU5DVElPTl9fLCBkZXZUYWcpOwotICAgICAgICAgICAgICAgIGZyZWUoc291cmNlc0xpdGVyYWwpOwotICAgICAgICAgICAgICAgIHJldHVybiBCQURfVkFMVUU7CisgICAgICAgICAgICAgICAgQUxPR0UoIiVzOiBubyBzb3VyY2UgZm91bmQgd2l0aCBuYW1lPSVzIiwgX19mdW5jX18sIGRldlRhZyk7CisgICAgICAgICAgICAgICAgcmV0dXJuIFN0YXR1czo6ZnJvbVN0YXR1c1QoQkFEX1ZBTFVFKTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIHNvdXJjZXMuYWRkKHNvdXJjZSk7CiAgICAgICAgIH0KICAgICAgICAgZGV2VGFnID0gc3RydG9rKE5VTEwsICIsIik7CiAgICAgfQotICAgIGZyZWUoc291cmNlc0xpdGVyYWwpOwogCi0gICAgc2luay0+YWRkUm91dGUoZWxlbWVudCk7CisgICAgc2luay0+YWRkUm91dGUocm91dGUpOwogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgc291cmNlcy5zaXplKCk7IGkrKykgewogICAgICAgICBzcDxBdWRpb1BvcnQ+IHNvdXJjZSA9IHNvdXJjZXMuaXRlbUF0KGkpOwotICAgICAgICBzb3VyY2UtPmFkZFJvdXRlKGVsZW1lbnQpOworICAgICAgICBzb3VyY2UtPmFkZFJvdXRlKHJvdXRlKTsKICAgICB9Ci0gICAgZWxlbWVudC0+c2V0U291cmNlcyhzb3VyY2VzKTsKLSAgICByZXR1cm4gTk9fRVJST1I7CisgICAgcm91dGUtPnNldFNvdXJjZXMoc291cmNlcyk7CisgICAgcmV0dXJuIHJvdXRlOwogfQogCi1jb25zdCBjaGFyICpjb25zdCBNb2R1bGVUcmFpdHM6OmNoaWxkQXR0YWNoZWREZXZpY2VzVGFnID0gImF0dGFjaGVkRGV2aWNlcyI7Ci1jb25zdCBjaGFyICpjb25zdCBNb2R1bGVUcmFpdHM6OmNoaWxkQXR0YWNoZWREZXZpY2VUYWcgPSAiaXRlbSI7Ci1jb25zdCBjaGFyICpjb25zdCBNb2R1bGVUcmFpdHM6OmNoaWxkRGVmYXVsdE91dHB1dERldmljZVRhZyA9ICJkZWZhdWx0T3V0cHV0RGV2aWNlIjsKLQotY29uc3QgY2hhciAqY29uc3QgTW9kdWxlVHJhaXRzOjp0YWcgPSAibW9kdWxlIjsKLWNvbnN0IGNoYXIgKmNvbnN0IE1vZHVsZVRyYWl0czo6Y29sbGVjdGlvblRhZyA9ICJtb2R1bGVzIjsKLQotY29uc3QgY2hhciBNb2R1bGVUcmFpdHM6OkF0dHJpYnV0ZXM6Om5hbWVbXSA9ICJuYW1lIjsKLWNvbnN0IGNoYXIgTW9kdWxlVHJhaXRzOjpBdHRyaWJ1dGVzOjp2ZXJzaW9uW10gPSAiaGFsVmVyc2lvbiI7Ci0KLXN0YXR1c190IE1vZHVsZVRyYWl0czo6ZGVzZXJpYWxpemUoeG1sRG9jUHRyIGRvYywgY29uc3QgeG1sTm9kZSAqcm9vdCwgUHRyRWxlbWVudCAmbW9kdWxlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQdHJTZXJpYWxpemluZ0N0eCBjdHgpCitSZXR1cm48TW9kdWxlVHJhaXRzOjpFbGVtZW50PiBNb2R1bGVUcmFpdHM6OmRlc2VyaWFsaXplKGNvbnN0IHhtbE5vZGUgKmN1ciwgUHRyU2VyaWFsaXppbmdDdHggY3R4KQogewotICAgIHN0cmluZyBuYW1lID0gZ2V0WG1sQXR0cmlidXRlKHJvb3QsIEF0dHJpYnV0ZXM6Om5hbWUpOworICAgIHN0ZDo6c3RyaW5nIG5hbWUgPSBnZXRYbWxBdHRyaWJ1dGUoY3VyLCBBdHRyaWJ1dGVzOjpuYW1lKTsKICAgICBpZiAobmFtZS5lbXB0eSgpKSB7Ci0gICAgICAgIEFMT0dFKCIlczogTm8gJXMgZm91bmQiLCBfX0ZVTkNUSU9OX18sIEF0dHJpYnV0ZXM6Om5hbWUpOwotICAgICAgICByZXR1cm4gQkFEX1ZBTFVFOworICAgICAgICBBTE9HRSgiJXM6IE5vICVzIGZvdW5kIiwgX19mdW5jX18sIEF0dHJpYnV0ZXM6Om5hbWUpOworICAgICAgICByZXR1cm4gU3RhdHVzOjpmcm9tU3RhdHVzVChCQURfVkFMVUUpOwogICAgIH0KICAgICB1aW50MzJfdCB2ZXJzaW9uTWFqb3IgPSAwLCB2ZXJzaW9uTWlub3IgPSAwOwotICAgIHN0cmluZyB2ZXJzaW9uTGl0ZXJhbCA9IGdldFhtbEF0dHJpYnV0ZShyb290LCBBdHRyaWJ1dGVzOjp2ZXJzaW9uKTsKKyAgICBzdGQ6OnN0cmluZyB2ZXJzaW9uTGl0ZXJhbCA9IGdldFhtbEF0dHJpYnV0ZShjdXIsIEF0dHJpYnV0ZXM6OnZlcnNpb24pOwogICAgIGlmICghdmVyc2lvbkxpdGVyYWwuZW1wdHkoKSkgewogICAgICAgICBzc2NhbmYodmVyc2lvbkxpdGVyYWwuY19zdHIoKSwgIiV1LiV1IiwgJnZlcnNpb25NYWpvciwgJnZlcnNpb25NaW5vcik7Ci0gICAgICAgIEFMT0dWKCIlczogbUhhbFZlcnNpb24gPSBtYWpvciAldSBtaW5vciAldSIsICBfX0ZVTkNUSU9OX18sCisgICAgICAgIEFMT0dWKCIlczogbUhhbFZlcnNpb24gPSBtYWpvciAldSBtaW5vciAldSIsICBfX2Z1bmNfXywKICAgICAgICAgICAgICAgdmVyc2lvbk1ham9yLCB2ZXJzaW9uTWFqb3IpOwogICAgIH0KIAotICAgIEFMT0dWKCIlczogJXMgJXM9JXMiLCBfX0ZVTkNUSU9OX18sIHRhZywgQXR0cmlidXRlczo6bmFtZSwgbmFtZS5jX3N0cigpKTsKKyAgICBBTE9HVigiJXM6ICVzICVzPSVzIiwgX19mdW5jX18sIHRhZywgQXR0cmlidXRlczo6bmFtZSwgbmFtZS5jX3N0cigpKTsKIAotICAgIG1vZHVsZSA9IG5ldyBFbGVtZW50KG5hbWUuY19zdHIoKSwgdmVyc2lvbk1ham9yLCB2ZXJzaW9uTWlub3IpOworICAgIEVsZW1lbnQgbW9kdWxlID0gbmV3IEh3TW9kdWxlKG5hbWUuY19zdHIoKSwgdmVyc2lvbk1ham9yLCB2ZXJzaW9uTWlub3IpOwogCiAgICAgLy8gRGVzZXJpYWxpemUgY2hpbGRyZW5zOiBBdWRpbyBNaXggUG9ydCwgQXVkaW8gRGV2aWNlIFBvcnRzIChTb3VyY2UvU2luayksIEF1ZGlvIFJvdXRlcwogICAgIE1peFBvcnRUcmFpdHM6OkNvbGxlY3Rpb24gbWl4UG9ydHM7Ci0gICAgZGVzZXJpYWxpemVDb2xsZWN0aW9uPE1peFBvcnRUcmFpdHM+KGRvYywgcm9vdCwgbWl4UG9ydHMsIE5VTEwpOworICAgIHN0YXR1c190IHN0YXR1cyA9IGRlc2VyaWFsaXplQ29sbGVjdGlvbjxNaXhQb3J0VHJhaXRzPihjdXIsICZtaXhQb3J0cywgTlVMTCk7CisgICAgaWYgKHN0YXR1cyAhPSBOT19FUlJPUikgeworICAgICAgICByZXR1cm4gU3RhdHVzOjpmcm9tU3RhdHVzVChzdGF0dXMpOworICAgIH0KICAgICBtb2R1bGUtPnNldFByb2ZpbGVzKG1peFBvcnRzKTsKIAogICAgIERldmljZVBvcnRUcmFpdHM6OkNvbGxlY3Rpb24gZGV2aWNlUG9ydHM7Ci0gICAgZGVzZXJpYWxpemVDb2xsZWN0aW9uPERldmljZVBvcnRUcmFpdHM+KGRvYywgcm9vdCwgZGV2aWNlUG9ydHMsIE5VTEwpOworICAgIHN0YXR1cyA9IGRlc2VyaWFsaXplQ29sbGVjdGlvbjxEZXZpY2VQb3J0VHJhaXRzPihjdXIsICZkZXZpY2VQb3J0cywgTlVMTCk7CisgICAgaWYgKHN0YXR1cyAhPSBOT19FUlJPUikgeworICAgICAgICByZXR1cm4gU3RhdHVzOjpmcm9tU3RhdHVzVChzdGF0dXMpOworICAgIH0KICAgICBtb2R1bGUtPnNldERlY2xhcmVkRGV2aWNlcyhkZXZpY2VQb3J0cyk7CiAKICAgICBSb3V0ZVRyYWl0czo6Q29sbGVjdGlvbiByb3V0ZXM7Ci0gICAgZGVzZXJpYWxpemVDb2xsZWN0aW9uPFJvdXRlVHJhaXRzPihkb2MsIHJvb3QsIHJvdXRlcywgbW9kdWxlLmdldCgpKTsKKyAgICBzdGF0dXMgPSBkZXNlcmlhbGl6ZUNvbGxlY3Rpb248Um91dGVUcmFpdHM+KGN1ciwgJnJvdXRlcywgbW9kdWxlLmdldCgpKTsKKyAgICBpZiAoc3RhdHVzICE9IE5PX0VSUk9SKSB7CisgICAgICAgIHJldHVybiBTdGF0dXM6OmZyb21TdGF0dXNUKHN0YXR1cyk7CisgICAgfQogICAgIG1vZHVsZS0+c2V0Um91dGVzKHJvdXRlcyk7CiAKLSAgICBjb25zdCB4bWxOb2RlICpjaGlsZHJlbiA9IHJvb3QtPnhtbENoaWxkcmVuTm9kZTsKLSAgICB3aGlsZSAoY2hpbGRyZW4gIT0gTlVMTCkgewotICAgICAgICBpZiAoIXhtbFN0cmNtcChjaGlsZHJlbi0+bmFtZSwgKGNvbnN0IHhtbENoYXIgKiljaGlsZEF0dGFjaGVkRGV2aWNlc1RhZykpIHsKLSAgICAgICAgICAgIEFMT0dWKCIlczogJXMgJXMgZm91bmQiLCBfX0ZVTkNUSU9OX18sIHRhZywgY2hpbGRBdHRhY2hlZERldmljZXNUYWcpOwotICAgICAgICAgICAgY29uc3QgeG1sTm9kZSAqY2hpbGQgPSBjaGlsZHJlbi0+eG1sQ2hpbGRyZW5Ob2RlOwotICAgICAgICAgICAgd2hpbGUgKGNoaWxkICE9IE5VTEwpIHsKLSAgICAgICAgICAgICAgICBpZiAoIXhtbFN0cmNtcChjaGlsZC0+bmFtZSwgKGNvbnN0IHhtbENoYXIgKiljaGlsZEF0dGFjaGVkRGV2aWNlVGFnKSkgewotICAgICAgICAgICAgICAgICAgICB4bWxDaGFyICphdHRhY2hlZERldmljZSA9IHhtbE5vZGVMaXN0R2V0U3RyaW5nKGRvYywgY2hpbGQtPnhtbENoaWxkcmVuTm9kZSwgMSk7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChhdHRhY2hlZERldmljZSAhPSBOVUxMKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBBTE9HVigiJXM6ICVzICVzPSVzIiwgX19GVU5DVElPTl9fLCB0YWcsIGNoaWxkQXR0YWNoZWREZXZpY2VUYWcsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY29uc3QgY2hhciopYXR0YWNoZWREZXZpY2UpOwotICAgICAgICAgICAgICAgICAgICAgICAgc3A8RGV2aWNlRGVzY3JpcHRvcj4gZGV2aWNlID0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbW9kdWxlLT5nZXREZWNsYXJlZERldmljZXMoKS5nZXREZXZpY2VGcm9tVGFnTmFtZShTdHJpbmc4KChjb25zdCBjaGFyKilhdHRhY2hlZERldmljZSkpOworICAgIGZvciAoY29uc3QgeG1sTm9kZSAqY2hpbGRyZW4gPSBjdXItPnhtbENoaWxkcmVuTm9kZTsgY2hpbGRyZW4gIT0gTlVMTDsKKyAgICAgICAgIGNoaWxkcmVuID0gY2hpbGRyZW4tPm5leHQpIHsKKyAgICAgICAgaWYgKCF4bWxTdHJjbXAoY2hpbGRyZW4tPm5hbWUsIHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgeG1sQ2hhcio+KGNoaWxkQXR0YWNoZWREZXZpY2VzVGFnKSkpIHsKKyAgICAgICAgICAgIEFMT0dWKCIlczogJXMgJXMgZm91bmQiLCBfX2Z1bmNfXywgdGFnLCBjaGlsZEF0dGFjaGVkRGV2aWNlc1RhZyk7CisgICAgICAgICAgICBmb3IgKGNvbnN0IHhtbE5vZGUgKmNoaWxkID0gY2hpbGRyZW4tPnhtbENoaWxkcmVuTm9kZTsgY2hpbGQgIT0gTlVMTDsKKyAgICAgICAgICAgICAgICAgY2hpbGQgPSBjaGlsZC0+bmV4dCkgeworICAgICAgICAgICAgICAgIGlmICgheG1sU3RyY21wKGNoaWxkLT5uYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWludGVycHJldF9jYXN0PGNvbnN0IHhtbENoYXIqPihjaGlsZEF0dGFjaGVkRGV2aWNlVGFnKSkpIHsKKyAgICAgICAgICAgICAgICAgICAgYXV0byBhdHRhY2hlZERldmljZSA9IG1ha2VfeG1sVW5pcXVlKHhtbE5vZGVMaXN0R2V0U3RyaW5nKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hpbGQtPmRvYywgY2hpbGQtPnhtbENoaWxkcmVuTm9kZSwgMSkpOworICAgICAgICAgICAgICAgICAgICBpZiAoYXR0YWNoZWREZXZpY2UgIT0gbnVsbHB0cikgeworICAgICAgICAgICAgICAgICAgICAgICAgQUxPR1YoIiVzOiAlcyAlcz0lcyIsIF9fZnVuY19fLCB0YWcsIGNoaWxkQXR0YWNoZWREZXZpY2VUYWcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgY2hhcio+KGF0dGFjaGVkRGV2aWNlLmdldCgpKSk7CisgICAgICAgICAgICAgICAgICAgICAgICBzcDxEZXZpY2VEZXNjcmlwdG9yPiBkZXZpY2UgPSBtb2R1bGUtPmdldERlY2xhcmVkRGV2aWNlcygpLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZXREZXZpY2VGcm9tVGFnTmFtZShTdHJpbmc4KHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgY2hhcio+KAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdHRhY2hlZERldmljZS5nZXQoKSkpKTsKICAgICAgICAgICAgICAgICAgICAgICAgIGN0eC0+YWRkQXZhaWxhYmxlRGV2aWNlKGRldmljZSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICB4bWxGcmVlKGF0dGFjaGVkRGV2aWNlKTsKICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBjaGlsZCA9IGNoaWxkLT5uZXh0OwogICAgICAgICAgICAgfQogICAgICAgICB9Ci0gICAgICAgIGlmICgheG1sU3RyY21wKGNoaWxkcmVuLT5uYW1lLCAoY29uc3QgeG1sQ2hhciAqKWNoaWxkRGVmYXVsdE91dHB1dERldmljZVRhZykpIHsKLSAgICAgICAgICAgIHhtbENoYXIgKmRlZmF1bHRPdXRwdXREZXZpY2UgPSB4bWxOb2RlTGlzdEdldFN0cmluZyhkb2MsIGNoaWxkcmVuLT54bWxDaGlsZHJlbk5vZGUsIDEpOzsKLSAgICAgICAgICAgIGlmIChkZWZhdWx0T3V0cHV0RGV2aWNlICE9IE5VTEwpIHsKLSAgICAgICAgICAgICAgICBBTE9HVigiJXM6ICVzICVzPSVzIiwgX19GVU5DVElPTl9fLCB0YWcsIGNoaWxkRGVmYXVsdE91dHB1dERldmljZVRhZywKLSAgICAgICAgICAgICAgICAgICAgICAoY29uc3QgY2hhciopZGVmYXVsdE91dHB1dERldmljZSk7Ci0gICAgICAgICAgICAgICAgc3A8RGV2aWNlRGVzY3JpcHRvcj4gZGV2aWNlID0KLSAgICAgICAgICAgICAgICAgICAgICAgIG1vZHVsZS0+Z2V0RGVjbGFyZWREZXZpY2VzKCkuZ2V0RGV2aWNlRnJvbVRhZ05hbWUoU3RyaW5nOCgoY29uc3QgY2hhciopZGVmYXVsdE91dHB1dERldmljZSkpOworICAgICAgICBpZiAoIXhtbFN0cmNtcChjaGlsZHJlbi0+bmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgIHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgeG1sQ2hhcio+KGNoaWxkRGVmYXVsdE91dHB1dERldmljZVRhZykpKSB7CisgICAgICAgICAgICBhdXRvIGRlZmF1bHRPdXRwdXREZXZpY2UgPSBtYWtlX3htbFVuaXF1ZSh4bWxOb2RlTGlzdEdldFN0cmluZygKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGlsZHJlbi0+ZG9jLCBjaGlsZHJlbi0+eG1sQ2hpbGRyZW5Ob2RlLCAxKSk7CisgICAgICAgICAgICBpZiAoZGVmYXVsdE91dHB1dERldmljZSAhPSBudWxscHRyKSB7CisgICAgICAgICAgICAgICAgQUxPR1YoIiVzOiAlcyAlcz0lcyIsIF9fZnVuY19fLCB0YWcsIGNoaWxkRGVmYXVsdE91dHB1dERldmljZVRhZywKKyAgICAgICAgICAgICAgICAgICAgICAgIHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgY2hhcio+KGRlZmF1bHRPdXRwdXREZXZpY2UuZ2V0KCkpKTsKKyAgICAgICAgICAgICAgICBzcDxEZXZpY2VEZXNjcmlwdG9yPiBkZXZpY2UgPSBtb2R1bGUtPmdldERlY2xhcmVkRGV2aWNlcygpLmdldERldmljZUZyb21UYWdOYW1lKAorICAgICAgICAgICAgICAgICAgICAgICAgU3RyaW5nOChyZWludGVycHJldF9jYXN0PGNvbnN0IGNoYXIqPihkZWZhdWx0T3V0cHV0RGV2aWNlLmdldCgpKSkpOwogICAgICAgICAgICAgICAgIGlmIChkZXZpY2UgIT0gMCAmJiBjdHgtPmdldERlZmF1bHRPdXRwdXREZXZpY2UoKSA9PSAwKSB7CiAgICAgICAgICAgICAgICAgICAgIGN0eC0+c2V0RGVmYXVsdE91dHB1dERldmljZShkZXZpY2UpOwotICAgICAgICAgICAgICAgICAgICBBTE9HVigiJXM6IGRlZmF1bHQgaXMgJTA4eCIsIF9fRlVOQ1RJT05fXywgY3R4LT5nZXREZWZhdWx0T3V0cHV0RGV2aWNlKCktPnR5cGUoKSk7CisgICAgICAgICAgICAgICAgICAgIEFMT0dWKCIlczogZGVmYXVsdCBpcyAlMDh4IiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2Z1bmNfXywgY3R4LT5nZXREZWZhdWx0T3V0cHV0RGV2aWNlKCktPnR5cGUoKSk7CiAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIHhtbEZyZWUoZGVmYXVsdE91dHB1dERldmljZSk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KLSAgICAgICAgY2hpbGRyZW4gPSBjaGlsZHJlbi0+bmV4dDsKICAgICB9Ci0gICAgcmV0dXJuIE5PX0VSUk9SOworICAgIHJldHVybiBtb2R1bGU7CiB9CiAKLWNvbnN0IGNoYXIgKmNvbnN0IEdsb2JhbENvbmZpZ1RyYWl0czo6dGFnID0gImdsb2JhbENvbmZpZ3VyYXRpb24iOwotCi1jb25zdCBjaGFyIEdsb2JhbENvbmZpZ1RyYWl0czo6QXR0cmlidXRlczo6c3BlYWtlckRyY0VuYWJsZWRbXSA9ICJzcGVha2VyX2RyY19lbmFibGVkIjsKLQotCi1zdGF0dXNfdCBHbG9iYWxDb25maWdUcmFpdHM6OmRlc2VyaWFsaXplKGNvbnN0IHhtbE5vZGUgKmN1ciwgQXVkaW9Qb2xpY3lDb25maWcgJmNvbmZpZykKK3N0YXR1c190IEdsb2JhbENvbmZpZ1RyYWl0czo6ZGVzZXJpYWxpemUoY29uc3QgeG1sTm9kZSAqcm9vdCwgQXVkaW9Qb2xpY3lDb25maWcgKmNvbmZpZykKIHsKLSAgICBjb25zdCB4bWxOb2RlICpyb290ID0gY3VyLT54bWxDaGlsZHJlbk5vZGU7Ci0gICAgd2hpbGUgKHJvb3QgIT0gTlVMTCkgewotICAgICAgICBpZiAoIXhtbFN0cmNtcChyb290LT5uYW1lLCAoY29uc3QgeG1sQ2hhciAqKXRhZykpIHsKLSAgICAgICAgICAgIHN0cmluZyBzcGVha2VyRHJjRW5hYmxlZCA9Ci0gICAgICAgICAgICAgICAgICAgIGdldFhtbEF0dHJpYnV0ZShyb290LCBBdHRyaWJ1dGVzOjpzcGVha2VyRHJjRW5hYmxlZCk7CisgICAgZm9yIChjb25zdCB4bWxOb2RlICpjdXIgPSByb290LT54bWxDaGlsZHJlbk5vZGU7IGN1ciAhPSBOVUxMOyBjdXIgPSBjdXItPm5leHQpIHsKKyAgICAgICAgaWYgKCF4bWxTdHJjbXAoY3VyLT5uYW1lLCByZWludGVycHJldF9jYXN0PGNvbnN0IHhtbENoYXIqPih0YWcpKSkgeworICAgICAgICAgICAgc3RkOjpzdHJpbmcgc3BlYWtlckRyY0VuYWJsZWQgPQorICAgICAgICAgICAgICAgICAgICBnZXRYbWxBdHRyaWJ1dGUoY3VyLCBBdHRyaWJ1dGVzOjpzcGVha2VyRHJjRW5hYmxlZCk7CiAgICAgICAgICAgICBib29sIGlzU3BlYWtlckRyY0VuYWJsZWQ7CiAgICAgICAgICAgICBpZiAoIXNwZWFrZXJEcmNFbmFibGVkLmVtcHR5KCkgJiYKLSAgICAgICAgICAgICAgICAgICAgY29udmVydFRvPHN0cmluZywgYm9vbD4oc3BlYWtlckRyY0VuYWJsZWQsIGlzU3BlYWtlckRyY0VuYWJsZWQpKSB7Ci0gICAgICAgICAgICAgICAgY29uZmlnLnNldFNwZWFrZXJEcmNFbmFibGVkKGlzU3BlYWtlckRyY0VuYWJsZWQpOworICAgICAgICAgICAgICAgICAgICBjb252ZXJ0VG88c3RkOjpzdHJpbmcsIGJvb2w+KHNwZWFrZXJEcmNFbmFibGVkLCBpc1NwZWFrZXJEcmNFbmFibGVkKSkgeworICAgICAgICAgICAgICAgIGNvbmZpZy0+c2V0U3BlYWtlckRyY0VuYWJsZWQoaXNTcGVha2VyRHJjRW5hYmxlZCk7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICByZXR1cm4gTk9fRVJST1I7CiAgICAgICAgIH0KLSAgICAgICAgcm9vdCA9IHJvb3QtPm5leHQ7CiAgICAgfQogICAgIHJldHVybiBOT19FUlJPUjsKIH0KIAotCi1jb25zdCBjaGFyICpjb25zdCBWb2x1bWVUcmFpdHM6OnRhZyA9ICJ2b2x1bWUiOwotY29uc3QgY2hhciAqY29uc3QgVm9sdW1lVHJhaXRzOjpjb2xsZWN0aW9uVGFnID0gInZvbHVtZXMiOwotY29uc3QgY2hhciAqY29uc3QgVm9sdW1lVHJhaXRzOjp2b2x1bWVQb2ludFRhZyA9ICJwb2ludCI7Ci0KLWNvbnN0IGNoYXIgVm9sdW1lVHJhaXRzOjpBdHRyaWJ1dGVzOjpzdHJlYW1bXSA9ICJzdHJlYW0iOwotY29uc3QgY2hhciBWb2x1bWVUcmFpdHM6OkF0dHJpYnV0ZXM6OmRldmljZUNhdGVnb3J5W10gPSAiZGV2aWNlQ2F0ZWdvcnkiOwotY29uc3QgY2hhciBWb2x1bWVUcmFpdHM6OkF0dHJpYnV0ZXM6OnJlZmVyZW5jZVtdID0gInJlZiI7Ci0KLXN0YXR1c190IFZvbHVtZVRyYWl0czo6ZGVzZXJpYWxpemUoX3htbERvYyAqZG9jLCBjb25zdCBfeG1sTm9kZSAqcm9vdCwgUHRyRWxlbWVudCAmZWxlbWVudCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHRyU2VyaWFsaXppbmdDdHggLypzZXJpYWxpemluZ0NvbnRleHQqLykKK1JldHVybjxWb2x1bWVUcmFpdHM6OkVsZW1lbnQ+IFZvbHVtZVRyYWl0czo6ZGVzZXJpYWxpemUoY29uc3QgeG1sTm9kZSAqY3VyLAorICAgICAgICBQdHJTZXJpYWxpemluZ0N0eCAvKnNlcmlhbGl6aW5nQ29udGV4dCovKQogewotICAgIHN0cmluZyBzdHJlYW1UeXBlTGl0ZXJhbCA9IGdldFhtbEF0dHJpYnV0ZShyb290LCBBdHRyaWJ1dGVzOjpzdHJlYW0pOworICAgIHN0ZDo6c3RyaW5nIHN0cmVhbVR5cGVMaXRlcmFsID0gZ2V0WG1sQXR0cmlidXRlKGN1ciwgQXR0cmlidXRlczo6c3RyZWFtKTsKICAgICBpZiAoc3RyZWFtVHlwZUxpdGVyYWwuZW1wdHkoKSkgewotICAgICAgICBBTE9HRSgiJXM6IE5vICVzIGZvdW5kIiwgX19GVU5DVElPTl9fLCBBdHRyaWJ1dGVzOjpzdHJlYW0pOwotICAgICAgICByZXR1cm4gQkFEX1ZBTFVFOworICAgICAgICBBTE9HRSgiJXM6IE5vICVzIGZvdW5kIiwgX19mdW5jX18sIEF0dHJpYnV0ZXM6OnN0cmVhbSk7CisgICAgICAgIHJldHVybiBTdGF0dXM6OmZyb21TdGF0dXNUKEJBRF9WQUxVRSk7CiAgICAgfQogICAgIGF1ZGlvX3N0cmVhbV90eXBlX3Qgc3RyZWFtVHlwZTsKICAgICBpZiAoIVN0cmVhbVR5cGVDb252ZXJ0ZXI6OmZyb21TdHJpbmcoc3RyZWFtVHlwZUxpdGVyYWwsIHN0cmVhbVR5cGUpKSB7Ci0gICAgICAgIEFMT0dFKCIlczogSW52YWxpZCAlcyIsIF9fRlVOQ1RJT05fXywgQXR0cmlidXRlczo6c3RyZWFtKTsKLSAgICAgICAgcmV0dXJuIEJBRF9WQUxVRTsKKyAgICAgICAgQUxPR0UoIiVzOiBJbnZhbGlkICVzIiwgX19mdW5jX18sIEF0dHJpYnV0ZXM6OnN0cmVhbSk7CisgICAgICAgIHJldHVybiBTdGF0dXM6OmZyb21TdGF0dXNUKEJBRF9WQUxVRSk7CiAgICAgfQotICAgIHN0cmluZyBkZXZpY2VDYXRlZ29yeUxpdGVyYWwgPSBnZXRYbWxBdHRyaWJ1dGUocm9vdCwgQXR0cmlidXRlczo6ZGV2aWNlQ2F0ZWdvcnkpOworICAgIHN0ZDo6c3RyaW5nIGRldmljZUNhdGVnb3J5TGl0ZXJhbCA9IGdldFhtbEF0dHJpYnV0ZShjdXIsIEF0dHJpYnV0ZXM6OmRldmljZUNhdGVnb3J5KTsKICAgICBpZiAoZGV2aWNlQ2F0ZWdvcnlMaXRlcmFsLmVtcHR5KCkpIHsKLSAgICAgICAgQUxPR0UoIiVzOiBObyAlcyBmb3VuZCIsIF9fRlVOQ1RJT05fXywgQXR0cmlidXRlczo6ZGV2aWNlQ2F0ZWdvcnkpOwotICAgICAgICByZXR1cm4gQkFEX1ZBTFVFOworICAgICAgICBBTE9HRSgiJXM6IE5vICVzIGZvdW5kIiwgX19mdW5jX18sIEF0dHJpYnV0ZXM6OmRldmljZUNhdGVnb3J5KTsKKyAgICAgICAgcmV0dXJuIFN0YXR1czo6ZnJvbVN0YXR1c1QoQkFEX1ZBTFVFKTsKICAgICB9CiAgICAgZGV2aWNlX2NhdGVnb3J5IGRldmljZUNhdGVnb3J5OwogICAgIGlmICghRGV2aWNlQ2F0ZWdvcnlDb252ZXJ0ZXI6OmZyb21TdHJpbmcoZGV2aWNlQ2F0ZWdvcnlMaXRlcmFsLCBkZXZpY2VDYXRlZ29yeSkpIHsKLSAgICAgICAgQUxPR0UoIiVzOiBJbnZhbGlkICVzPSVzIiwgX19GVU5DVElPTl9fLCBBdHRyaWJ1dGVzOjpkZXZpY2VDYXRlZ29yeSwKKyAgICAgICAgQUxPR0UoIiVzOiBJbnZhbGlkICVzPSVzIiwgX19mdW5jX18sIEF0dHJpYnV0ZXM6OmRldmljZUNhdGVnb3J5LAogICAgICAgICAgICAgICBkZXZpY2VDYXRlZ29yeUxpdGVyYWwuY19zdHIoKSk7Ci0gICAgICAgIHJldHVybiBCQURfVkFMVUU7CisgICAgICAgIHJldHVybiBTdGF0dXM6OmZyb21TdGF0dXNUKEJBRF9WQUxVRSk7CiAgICAgfQogCi0gICAgc3RyaW5nIHJlZmVyZW5jZU5hbWUgPSBnZXRYbWxBdHRyaWJ1dGUocm9vdCwgQXR0cmlidXRlczo6cmVmZXJlbmNlKTsKLSAgICBjb25zdCBfeG1sTm9kZSAqcmVmID0gTlVMTDsKKyAgICBzdGQ6OnN0cmluZyByZWZlcmVuY2VOYW1lID0gZ2V0WG1sQXR0cmlidXRlKGN1ciwgQXR0cmlidXRlczo6cmVmZXJlbmNlKTsKKyAgICBjb25zdCB4bWxOb2RlICpyZWYgPSBOVUxMOwogICAgIGlmICghcmVmZXJlbmNlTmFtZS5lbXB0eSgpKSB7Ci0gICAgICAgIGdldFJlZmVyZW5jZTxWb2x1bWVUcmFpdHM+KHJvb3QtPnBhcmVudCwgcmVmLCByZWZlcmVuY2VOYW1lKTsKKyAgICAgICAgcmVmID0gZ2V0UmVmZXJlbmNlPFZvbHVtZVRyYWl0cz4oY3VyLT5wYXJlbnQsIHJlZmVyZW5jZU5hbWUpOwogICAgICAgICBpZiAocmVmID09IE5VTEwpIHsKLSAgICAgICAgICAgIEFMT0dFKCIlczogTm8gcmVmZXJlbmNlIFB0ciBmb3VuZCBmb3IgJXMiLCBfX0ZVTkNUSU9OX18sIHJlZmVyZW5jZU5hbWUuY19zdHIoKSk7Ci0gICAgICAgICAgICByZXR1cm4gQkFEX1ZBTFVFOworICAgICAgICAgICAgQUxPR0UoIiVzOiBObyByZWZlcmVuY2UgUHRyIGZvdW5kIGZvciAlcyIsIF9fZnVuY19fLCByZWZlcmVuY2VOYW1lLmNfc3RyKCkpOworICAgICAgICAgICAgcmV0dXJuIFN0YXR1czo6ZnJvbVN0YXR1c1QoQkFEX1ZBTFVFKTsKICAgICAgICAgfQogICAgIH0KIAotICAgIGVsZW1lbnQgPSBuZXcgRWxlbWVudChkZXZpY2VDYXRlZ29yeSwgc3RyZWFtVHlwZSk7CisgICAgRWxlbWVudCB2b2xDdXJ2ZSA9IG5ldyBWb2x1bWVDdXJ2ZShkZXZpY2VDYXRlZ29yeSwgc3RyZWFtVHlwZSk7CiAKLSAgICBjb25zdCB4bWxOb2RlICpjaGlsZCA9IHJlZmVyZW5jZU5hbWUuZW1wdHkoKSA/IHJvb3QtPnhtbENoaWxkcmVuTm9kZSA6IHJlZi0+eG1sQ2hpbGRyZW5Ob2RlOwotICAgIHdoaWxlIChjaGlsZCAhPSBOVUxMKSB7Ci0gICAgICAgIGlmICgheG1sU3RyY21wKGNoaWxkLT5uYW1lLCAoY29uc3QgeG1sQ2hhciAqKXZvbHVtZVBvaW50VGFnKSkgewotICAgICAgICAgICAgeG1sQ2hhciAqcG9pbnREZWZpbml0aW9uID0geG1sTm9kZUxpc3RHZXRTdHJpbmcoZG9jLCBjaGlsZC0+eG1sQ2hpbGRyZW5Ob2RlLCAxKTs7Ci0gICAgICAgICAgICBpZiAocG9pbnREZWZpbml0aW9uID09IE5VTEwpIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gQkFEX1ZBTFVFOworICAgIGZvciAoY29uc3QgeG1sTm9kZSAqY2hpbGQgPSByZWZlcmVuY2VOYW1lLmVtcHR5KCkgPyBjdXItPnhtbENoaWxkcmVuTm9kZSA6IHJlZi0+eG1sQ2hpbGRyZW5Ob2RlOworICAgICAgICAgY2hpbGQgIT0gTlVMTDsgY2hpbGQgPSBjaGlsZC0+bmV4dCkgeworICAgICAgICBpZiAoIXhtbFN0cmNtcChjaGlsZC0+bmFtZSwgcmVpbnRlcnByZXRfY2FzdDxjb25zdCB4bWxDaGFyKj4odm9sdW1lUG9pbnRUYWcpKSkgeworICAgICAgICAgICAgYXV0byBwb2ludERlZmluaXRpb24gPSBtYWtlX3htbFVuaXF1ZSh4bWxOb2RlTGlzdEdldFN0cmluZygKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGlsZC0+ZG9jLCBjaGlsZC0+eG1sQ2hpbGRyZW5Ob2RlLCAxKSk7CisgICAgICAgICAgICBpZiAocG9pbnREZWZpbml0aW9uID09IG51bGxwdHIpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gU3RhdHVzOjpmcm9tU3RhdHVzVChCQURfVkFMVUUpOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgQUxPR1YoIiVzOiAlcz0lcyIsIF9fRlVOQ1RJT05fXywgdGFnLCAoY29uc3QgY2hhciopcG9pbnREZWZpbml0aW9uKTsKKyAgICAgICAgICAgIEFMT0dWKCIlczogJXM9JXMiLAorICAgICAgICAgICAgICAgICAgICBfX2Z1bmNfXywgdGFnLCByZWludGVycHJldF9jYXN0PGNvbnN0IGNoYXIqPihwb2ludERlZmluaXRpb24uZ2V0KCkpKTsKICAgICAgICAgICAgIFZlY3RvcjxpbnQzMl90PiBwb2ludDsKLSAgICAgICAgICAgIGNvbGxlY3Rpb25Gcm9tU3RyaW5nPERlZmF1bHRUcmFpdHM8aW50MzJfdD4gPigoY29uc3QgY2hhciopcG9pbnREZWZpbml0aW9uLCBwb2ludCwgIiwiKTsKKyAgICAgICAgICAgIGNvbGxlY3Rpb25Gcm9tU3RyaW5nPERlZmF1bHRUcmFpdHM8aW50MzJfdD4+KAorICAgICAgICAgICAgICAgICAgICByZWludGVycHJldF9jYXN0PGNvbnN0IGNoYXIqPihwb2ludERlZmluaXRpb24uZ2V0KCkpLCBwb2ludCwgIiwiKTsKICAgICAgICAgICAgIGlmIChwb2ludC5zaXplKCkgIT0gMikgewotICAgICAgICAgICAgICAgIEFMT0dFKCIlczogSW52YWxpZCAlczogJXMiLCBfX0ZVTkNUSU9OX18sIHZvbHVtZVBvaW50VGFnLAotICAgICAgICAgICAgICAgICAgICAgIChjb25zdCBjaGFyKilwb2ludERlZmluaXRpb24pOwotICAgICAgICAgICAgICAgIHJldHVybiBCQURfVkFMVUU7CisgICAgICAgICAgICAgICAgQUxPR0UoIiVzOiBJbnZhbGlkICVzOiAlcyIsIF9fZnVuY19fLCB2b2x1bWVQb2ludFRhZywKKyAgICAgICAgICAgICAgICAgICAgICAgIHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgY2hhcio+KHBvaW50RGVmaW5pdGlvbi5nZXQoKSkpOworICAgICAgICAgICAgICAgIHJldHVybiBTdGF0dXM6OmZyb21TdGF0dXNUKEJBRF9WQUxVRSk7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBlbGVtZW50LT5hZGQoQ3VydmVQb2ludChwb2ludFswXSwgcG9pbnRbMV0pKTsKLSAgICAgICAgICAgIHhtbEZyZWUocG9pbnREZWZpbml0aW9uKTsKKyAgICAgICAgICAgIHZvbEN1cnZlLT5hZGQoQ3VydmVQb2ludChwb2ludFswXSwgcG9pbnRbMV0pKTsKICAgICAgICAgfQotICAgICAgICBjaGlsZCA9IGNoaWxkLT5uZXh0OworICAgIH0KKyAgICByZXR1cm4gdm9sQ3VydmU7Cit9CisKK3N0YXR1c190IFN1cnJvdW5kU291bmRUcmFpdHM6OmRlc2VyaWFsaXplKGNvbnN0IHhtbE5vZGUgKnJvb3QsIEF1ZGlvUG9saWN5Q29uZmlnICpjb25maWcpCit7CisgICAgY29uZmlnLT5zZXREZWZhdWx0U3Vycm91bmRGb3JtYXRzKCk7CisKKyAgICBmb3IgKGNvbnN0IHhtbE5vZGUgKmN1ciA9IHJvb3QtPnhtbENoaWxkcmVuTm9kZTsgY3VyICE9IE5VTEw7IGN1ciA9IGN1ci0+bmV4dCkgeworICAgICAgICBpZiAoIXhtbFN0cmNtcChjdXItPm5hbWUsIHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgeG1sQ2hhcio+KHRhZykpKSB7CisgICAgICAgICAgICBBdWRpb1BvbGljeUNvbmZpZzo6U3Vycm91bmRGb3JtYXRzIGZvcm1hdHM7CisgICAgICAgICAgICBzdGF0dXNfdCBzdGF0dXMgPSBkZXNlcmlhbGl6ZUNvbGxlY3Rpb248U3Vycm91bmRTb3VuZEZvcm1hdFRyYWl0cz4oCisgICAgICAgICAgICAgICAgICAgIGN1ciwgJmZvcm1hdHMsIG51bGxwdHIpOworICAgICAgICAgICAgaWYgKHN0YXR1cyA9PSBOT19FUlJPUikgeworICAgICAgICAgICAgICAgIGNvbmZpZy0+c2V0U3Vycm91bmRGb3JtYXRzKGZvcm1hdHMpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgcmV0dXJuIE5PX0VSUk9SOworICAgICAgICB9CiAgICAgfQogICAgIHJldHVybiBOT19FUlJPUjsKIH0KIAotUG9saWN5U2VyaWFsaXplcjo6UG9saWN5U2VyaWFsaXplcigpIDogbVJvb3RFbGVtZW50TmFtZShyb290TmFtZSkKK1JldHVybjxTdXJyb3VuZFNvdW5kRm9ybWF0VHJhaXRzOjpFbGVtZW50PiBTdXJyb3VuZFNvdW5kRm9ybWF0VHJhaXRzOjpkZXNlcmlhbGl6ZSgKKyAgICAgICAgY29uc3QgeG1sTm9kZSAqY3VyLCBQdHJTZXJpYWxpemluZ0N0eCAvKnNlcmlhbGl6aW5nQ29udGV4dCovKQogewotICAgIHN0ZDo6b3N0cmluZ3N0cmVhbSBvc3M7Ci0gICAgb3NzIDw8IGdNYWpvciA8PCAiLiIgPDwgZ01pbm9yOwotICAgIG1WZXJzaW9uID0gb3NzLnN0cigpOwotICAgIEFMT0dWKCIlczogVmVyc2lvbj0lcyBSb290PSVzIiwgX19GVU5DVElPTl9fLCBtVmVyc2lvbi5jX3N0cigpLCBtUm9vdEVsZW1lbnROYW1lLmNfc3RyKCkpOworICAgIHN0ZDo6c3RyaW5nIGZvcm1hdExpdGVyYWwgPSBnZXRYbWxBdHRyaWJ1dGUoY3VyLCBBdHRyaWJ1dGVzOjpuYW1lKTsKKyAgICBpZiAoZm9ybWF0TGl0ZXJhbC5lbXB0eSgpKSB7CisgICAgICAgIEFMT0dFKCIlczogTm8gJXMgZm91bmQgZm9yIGEgc3Vycm91bmQgZm9ybWF0IiwgX19mdW5jX18sIEF0dHJpYnV0ZXM6Om5hbWUpOworICAgICAgICByZXR1cm4gU3RhdHVzOjpmcm9tU3RhdHVzVChCQURfVkFMVUUpOworICAgIH0KKyAgICBhdWRpb19mb3JtYXRfdCBmb3JtYXQgPSBmb3JtYXRGcm9tU3RyaW5nKGZvcm1hdExpdGVyYWwpOworICAgIGlmIChmb3JtYXQgPT0gQVVESU9fRk9STUFUX0RFRkFVTFQpIHsKKyAgICAgICAgQUxPR0UoIiVzOiBVbnJlY29nbml6ZWQgZm9ybWF0ICVzIiwgX19mdW5jX18sIGZvcm1hdExpdGVyYWwuY19zdHIoKSk7CisgICAgICAgIHJldHVybiBTdGF0dXM6OmZyb21TdGF0dXNUKEJBRF9WQUxVRSk7CisgICAgfQorICAgIEVsZW1lbnQgcGFpciA9IHN0ZDo6bWFrZV9wYWlyKGZvcm1hdCwgQ29sbGVjdGlvbjo6bWFwcGVkX3R5cGV7fSk7CisKKyAgICBzdGQ6OnN0cmluZyBzdWJmb3JtYXRzTGl0ZXJhbCA9IGdldFhtbEF0dHJpYnV0ZShjdXIsIEF0dHJpYnV0ZXM6OnN1YmZvcm1hdHMpOworICAgIGlmIChzdWJmb3JtYXRzTGl0ZXJhbC5lbXB0eSgpKSByZXR1cm4gcGFpcjsKKyAgICBGb3JtYXRWZWN0b3Igc3ViZm9ybWF0cyA9IGZvcm1hdHNGcm9tU3RyaW5nKHN1YmZvcm1hdHNMaXRlcmFsLCAiICIpOworICAgIGZvciAoY29uc3QgYXV0byYgc3ViZm9ybWF0IDogc3ViZm9ybWF0cykgeworICAgICAgICBhdXRvIHJlc3VsdCA9IHBhaXIuc2Vjb25kLmluc2VydChzdWJmb3JtYXQpOworICAgICAgICBpZiAoIXJlc3VsdC5zZWNvbmQpIHsKKyAgICAgICAgICAgIEFMT0dFKCIlczogY291bGQgbm90IGFkZCBzdWJmb3JtYXQgJXggdG8gY29sbGVjdGlvbiIsIF9fZnVuY19fLCBzdWJmb3JtYXQpOworICAgICAgICAgICAgcmV0dXJuIFN0YXR1czo6ZnJvbVN0YXR1c1QoQkFEX1ZBTFVFKTsKKyAgICAgICAgfQorICAgIH0KKyAgICByZXR1cm4gcGFpcjsKIH0KIAotc3RhdHVzX3QgUG9saWN5U2VyaWFsaXplcjo6ZGVzZXJpYWxpemUoY29uc3QgY2hhciAqY29uZmlnRmlsZSwgQXVkaW9Qb2xpY3lDb25maWcgJmNvbmZpZykKK3N0YXR1c190IFBvbGljeVNlcmlhbGl6ZXI6OmRlc2VyaWFsaXplKGNvbnN0IGNoYXIgKmNvbmZpZ0ZpbGUsIEF1ZGlvUG9saWN5Q29uZmlnICpjb25maWcpCiB7Ci0gICAgeG1sRG9jUHRyIGRvYzsKLSAgICBkb2MgPSB4bWxQYXJzZUZpbGUoY29uZmlnRmlsZSk7Ci0gICAgaWYgKGRvYyA9PSBOVUxMKSB7Ci0gICAgICAgIEFMT0dFKCIlczogQ291bGQgbm90IHBhcnNlICVzIGRvY3VtZW50LiIsIF9fRlVOQ1RJT05fXywgY29uZmlnRmlsZSk7CisgICAgYXV0byBkb2MgPSBtYWtlX3htbFVuaXF1ZSh4bWxQYXJzZUZpbGUoY29uZmlnRmlsZSkpOworICAgIGlmIChkb2MgPT0gbnVsbHB0cikgeworICAgICAgICBBTE9HRSgiJXM6IENvdWxkIG5vdCBwYXJzZSAlcyBkb2N1bWVudC4iLCBfX2Z1bmNfXywgY29uZmlnRmlsZSk7CiAgICAgICAgIHJldHVybiBCQURfVkFMVUU7CiAgICAgfQotICAgIHhtbE5vZGVQdHIgY3VyID0geG1sRG9jR2V0Um9vdEVsZW1lbnQoZG9jKTsKLSAgICBpZiAoY3VyID09IE5VTEwpIHsKLSAgICAgICAgQUxPR0UoIiVzOiBDb3VsZCBub3QgcGFyc2UgJXMgZG9jdW1lbnQ6IGVtcHR5LiIsIF9fRlVOQ1RJT05fXywgY29uZmlnRmlsZSk7Ci0gICAgICAgIHhtbEZyZWVEb2MoZG9jKTsKKyAgICB4bWxOb2RlUHRyIHJvb3QgPSB4bWxEb2NHZXRSb290RWxlbWVudChkb2MuZ2V0KCkpOworICAgIGlmIChyb290ID09IE5VTEwpIHsKKyAgICAgICAgQUxPR0UoIiVzOiBDb3VsZCBub3QgcGFyc2UgJXMgZG9jdW1lbnQ6IGVtcHR5LiIsIF9fZnVuY19fLCBjb25maWdGaWxlKTsKICAgICAgICAgcmV0dXJuIEJBRF9WQUxVRTsKICAgICB9Ci0gICAgaWYgKHhtbFhJbmNsdWRlUHJvY2Vzcyhkb2MpIDwgMCkgewotICAgICAgICAgQUxPR0UoIiVzOiBsaWJ4bWwgZmFpbGVkIHRvIHJlc29sdmUgWEluY2x1ZGVzIG9uICVzIGRvY3VtZW50LiIsIF9fRlVOQ1RJT05fXywgY29uZmlnRmlsZSk7CisgICAgaWYgKHhtbFhJbmNsdWRlUHJvY2Vzcyhkb2MuZ2V0KCkpIDwgMCkgeworICAgICAgICBBTE9HRSgiJXM6IGxpYnhtbCBmYWlsZWQgdG8gcmVzb2x2ZSBYSW5jbHVkZXMgb24gJXMgZG9jdW1lbnQuIiwgX19mdW5jX18sIGNvbmZpZ0ZpbGUpOwogICAgIH0KIAotICAgIGlmICh4bWxTdHJjbXAoY3VyLT5uYW1lLCAoY29uc3QgeG1sQ2hhciAqKSBtUm9vdEVsZW1lbnROYW1lLmNfc3RyKCkpKSAgewotICAgICAgICBBTE9HRSgiJXM6IE5vICVzIHJvb3QgZWxlbWVudCBmb3VuZCBpbiB4bWwgZGF0YSAlcy4iLCBfX0ZVTkNUSU9OX18sIG1Sb290RWxlbWVudE5hbWUuY19zdHIoKSwKLSAgICAgICAgICAgICAgKGNvbnN0IGNoYXIgKiljdXItPm5hbWUpOwotICAgICAgICB4bWxGcmVlRG9jKGRvYyk7CisgICAgaWYgKHhtbFN0cmNtcChyb290LT5uYW1lLCByZWludGVycHJldF9jYXN0PGNvbnN0IHhtbENoYXIqPihyb290TmFtZSkpKSAgeworICAgICAgICBBTE9HRSgiJXM6IE5vICVzIHJvb3QgZWxlbWVudCBmb3VuZCBpbiB4bWwgZGF0YSAlcy4iLCBfX2Z1bmNfXywgcm9vdE5hbWUsCisgICAgICAgICAgICAgICAgcmVpbnRlcnByZXRfY2FzdDxjb25zdCBjaGFyKj4ocm9vdC0+bmFtZSkpOwogICAgICAgICByZXR1cm4gQkFEX1ZBTFVFOwogICAgIH0KIAotICAgIHN0cmluZyB2ZXJzaW9uID0gZ2V0WG1sQXR0cmlidXRlKGN1ciwgdmVyc2lvbkF0dHJpYnV0ZSk7CisgICAgc3RkOjpzdHJpbmcgdmVyc2lvbiA9IGdldFhtbEF0dHJpYnV0ZShyb290LCB2ZXJzaW9uQXR0cmlidXRlKTsKICAgICBpZiAodmVyc2lvbi5lbXB0eSgpKSB7Ci0gICAgICAgIEFMT0dFKCIlczogTm8gdmVyc2lvbiBmb3VuZCBpbiByb290IG5vZGUgJXMiLCBfX0ZVTkNUSU9OX18sIG1Sb290RWxlbWVudE5hbWUuY19zdHIoKSk7CisgICAgICAgIEFMT0dFKCIlczogTm8gdmVyc2lvbiBmb3VuZCBpbiByb290IG5vZGUgJXMiLCBfX2Z1bmNfXywgcm9vdE5hbWUpOwogICAgICAgICByZXR1cm4gQkFEX1ZBTFVFOwogICAgIH0KICAgICBpZiAodmVyc2lvbiAhPSBtVmVyc2lvbikgewotICAgICAgICBBTE9HRSgiJXM6IFZlcnNpb24gZG9lcyBub3QgbWF0Y2g7IGV4cGVjdCAlcyBnb3QgJXMiLCBfX0ZVTkNUSU9OX18sIG1WZXJzaW9uLmNfc3RyKCksCisgICAgICAgIEFMT0dFKCIlczogVmVyc2lvbiBkb2VzIG5vdCBtYXRjaDsgZXhwZWN0ICVzIGdvdCAlcyIsIF9fZnVuY19fLCBtVmVyc2lvbi5jX3N0cigpLAogICAgICAgICAgICAgICB2ZXJzaW9uLmNfc3RyKCkpOwogICAgICAgICByZXR1cm4gQkFEX1ZBTFVFOwogICAgIH0KICAgICAvLyBMZXRzIGRlc2VyaWFsaXplIGNoaWxkcmVuCiAgICAgLy8gTW9kdWxlcwogICAgIE1vZHVsZVRyYWl0czo6Q29sbGVjdGlvbiBtb2R1bGVzOwotICAgIGRlc2VyaWFsaXplQ29sbGVjdGlvbjxNb2R1bGVUcmFpdHM+KGRvYywgY3VyLCBtb2R1bGVzLCAmY29uZmlnKTsKLSAgICBjb25maWcuc2V0SHdNb2R1bGVzKG1vZHVsZXMpOworICAgIHN0YXR1c190IHN0YXR1cyA9IGRlc2VyaWFsaXplQ29sbGVjdGlvbjxNb2R1bGVUcmFpdHM+KHJvb3QsICZtb2R1bGVzLCBjb25maWcpOworICAgIGlmIChzdGF0dXMgIT0gTk9fRVJST1IpIHsKKyAgICAgICAgcmV0dXJuIHN0YXR1czsKKyAgICB9CisgICAgY29uZmlnLT5zZXRId01vZHVsZXMobW9kdWxlcyk7CiAKICAgICAvLyBkZXNlcmlhbGl6ZSB2b2x1bWUgc2VjdGlvbgogICAgIFZvbHVtZVRyYWl0czo6Q29sbGVjdGlvbiB2b2x1bWVzOwotICAgIGRlc2VyaWFsaXplQ29sbGVjdGlvbjxWb2x1bWVUcmFpdHM+KGRvYywgY3VyLCB2b2x1bWVzLCAmY29uZmlnKTsKLSAgICBjb25maWcuc2V0Vm9sdW1lcyh2b2x1bWVzKTsKKyAgICBzdGF0dXMgPSBkZXNlcmlhbGl6ZUNvbGxlY3Rpb248Vm9sdW1lVHJhaXRzPihyb290LCAmdm9sdW1lcywgY29uZmlnKTsKKyAgICBpZiAoc3RhdHVzICE9IE5PX0VSUk9SKSB7CisgICAgICAgIHJldHVybiBzdGF0dXM7CisgICAgfQorICAgIGNvbmZpZy0+c2V0Vm9sdW1lcyh2b2x1bWVzKTsKIAogICAgIC8vIEdsb2JhbCBDb25maWd1cmF0aW9uCi0gICAgR2xvYmFsQ29uZmlnVHJhaXRzOjpkZXNlcmlhbGl6ZShjdXIsIGNvbmZpZyk7CisgICAgR2xvYmFsQ29uZmlnVHJhaXRzOjpkZXNlcmlhbGl6ZShyb290LCBjb25maWcpOwogCi0gICAgeG1sRnJlZURvYyhkb2MpOworICAgIC8vIFN1cnJvdW5kIGNvbmZpZ3VyYXRpb24KKyAgICBTdXJyb3VuZFNvdW5kVHJhaXRzOjpkZXNlcmlhbGl6ZShyb290LCBjb25maWcpOworCiAgICAgcmV0dXJuIGFuZHJvaWQ6Ok9LOwogfQogCit9ICAvLyBuYW1lc3BhY2UKKworc3RhdHVzX3QgZGVzZXJpYWxpemVBdWRpb1BvbGljeUZpbGUoY29uc3QgY2hhciAqZmlsZU5hbWUsIEF1ZGlvUG9saWN5Q29uZmlnICpjb25maWcpCit7CisgICAgUG9saWN5U2VyaWFsaXplciBzZXJpYWxpemVyOworICAgIHJldHVybiBzZXJpYWxpemVyLmRlc2VyaWFsaXplKGZpbGVOYW1lLCBjb25maWcpOworfQorCiB9IC8vIG5hbWVzcGFjZSBhbmRyb2lkCmRpZmYgLS1naXQgYS9zZXJ2aWNlcy9hdWRpb3BvbGljeS9jb21tb24vbWFuYWdlcmRlZmluaXRpb25zL3NyYy9TZXNzaW9uUm91dGUuY3BwIGIvc2VydmljZXMvYXVkaW9wb2xpY3kvY29tbW9uL21hbmFnZXJkZWZpbml0aW9ucy9zcmMvU2Vzc2lvblJvdXRlLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjIwNjUyNi4uMDAwMDAwMAotLS0gYS9zZXJ2aWNlcy9hdWRpb3BvbGljeS9jb21tb24vbWFuYWdlcmRlZmluaXRpb25zL3NyYy9TZXNzaW9uUm91dGUuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsMTM4ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTUgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAotICoKLSAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwotICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgotICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0gKgotICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLSAqCi0gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCi0gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAotICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCi0gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCi0gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KLSAqLwotCi0jZGVmaW5lIExPR19UQUcgIkFQTV9TZXNzaW9uUm91dGUiCi0vLyNkZWZpbmUgTE9HX05ERUJVRyAwCi0KLSNpbmNsdWRlICJTZXNzaW9uUm91dGUuaCIKLSNpbmNsdWRlICJId01vZHVsZS5oIgotI2luY2x1ZGUgIkF1ZGlvR2Fpbi5oIgotI2luY2x1ZGUgIkRldmljZURlc2NyaXB0b3IuaCIKLSNpbmNsdWRlIDx1dGlscy9Mb2cuaD4KLQotbmFtZXNwYWNlIGFuZHJvaWQgewotCi0vLyAtLS0gU2Vzc2lvblJvdXRlIGNsYXNzIGltcGxlbWVudGF0aW9uCi12b2lkIFNlc3Npb25Sb3V0ZTo6bG9nKGNvbnN0IGNoYXIqIHByZWZpeCkKLXsKLSAgICBBTE9HSSgiJXNbU2Vzc2lvblJvdXRlIHN0cm06MHglWCwgc3JjOiVkLCBzZXNzOjB4JVgsIGRldjoweCVYIHJlZnM6JWQgYWN0OiVkIiwKLSAgICAgICAgICBwcmVmaXgsIG1TdHJlYW1UeXBlLCBtU291cmNlLCBtU2Vzc2lvbiwKLSAgICAgICAgICBtRGV2aWNlRGVzY3JpcHRvciAhPSAwID8gbURldmljZURlc2NyaXB0b3ItPnR5cGUoKSA6IEFVRElPX0RFVklDRV9OT05FLAotICAgICAgICAgIG1SZWZDb3VudCwgbUFjdGl2aXR5Q291bnQpOwotfQotCi0vLyAtLS0gU2Vzc2lvblJvdXRlTWFwIGNsYXNzIGltcGxlbWVudGF0aW9uCi1ib29sIFNlc3Npb25Sb3V0ZU1hcDo6aGFzUm91dGUoYXVkaW9fc2Vzc2lvbl90IHNlc3Npb24pCi17Ci0gICAgcmV0dXJuIGluZGV4T2ZLZXkoc2Vzc2lvbikgPj0gMCAmJiB2YWx1ZUZvcihzZXNzaW9uKS0+bURldmljZURlc2NyaXB0b3IgIT0gMDsKLX0KLQotYm9vbCBTZXNzaW9uUm91dGVNYXA6OmdldEFuZENsZWFyUm91dGVDaGFuZ2VkKGF1ZGlvX3Nlc3Npb25fdCBzZXNzaW9uKQotewotICAgIGlmIChpbmRleE9mS2V5KHNlc3Npb24pID49IDApIHsKLSAgICAgICAgaWYgKHZhbHVlRm9yKHNlc3Npb24pLT5tQ2hhbmdlZCkgewotICAgICAgICAgICAgdmFsdWVGb3Ioc2Vzc2lvbiktPm1DaGFuZ2VkID0gZmFsc2U7Ci0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgfQotICAgIH0KLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLXZvaWQgU2Vzc2lvblJvdXRlTWFwOjpyZW1vdmVSb3V0ZShhdWRpb19zZXNzaW9uX3Qgc2Vzc2lvbikKLXsKLSAgICBzcDxTZXNzaW9uUm91dGU+IHJvdXRlID0gaW5kZXhPZktleShzZXNzaW9uKSA+PSAwID8gdmFsdWVGb3Ioc2Vzc2lvbikgOiAwOwotICAgIGlmIChyb3V0ZSAhPSAwKSB7Ci0gICAgICAgIEFMT0dfQVNTRVJUKHJvdXRlLT5tUmVmQ291bnQgPiAwKTsKLSAgICAgICAgLS1yb3V0ZS0+bVJlZkNvdW50OwotICAgICAgICBpZiAocm91dGUtPm1SZWZDb3VudCA8PSAwKSB7Ci0gICAgICAgICAgICByZW1vdmVJdGVtKHNlc3Npb24pOwotICAgICAgICB9Ci0gICAgfQotfQotCi1pbnQgU2Vzc2lvblJvdXRlTWFwOjppbmNSb3V0ZUFjdGl2aXR5KGF1ZGlvX3Nlc3Npb25fdCBzZXNzaW9uKQotewotICAgIHNwPFNlc3Npb25Sb3V0ZT4gcm91dGUgPSBpbmRleE9mS2V5KHNlc3Npb24pID49IDAgPyB2YWx1ZUZvcihzZXNzaW9uKSA6IDA7Ci0gICAgcmV0dXJuIHJvdXRlICE9IDAgPyArKyhyb3V0ZS0+bUFjdGl2aXR5Q291bnQpIDogLTE7Ci19Ci0KLWludCBTZXNzaW9uUm91dGVNYXA6OmRlY1JvdXRlQWN0aXZpdHkoYXVkaW9fc2Vzc2lvbl90IHNlc3Npb24pCi17Ci0gICAgc3A8U2Vzc2lvblJvdXRlPiByb3V0ZSA9IGluZGV4T2ZLZXkoc2Vzc2lvbikgPj0gMCA/IHZhbHVlRm9yKHNlc3Npb24pIDogMDsKLSAgICBpZiAocm91dGUgIT0gMCAmJiByb3V0ZS0+bUFjdGl2aXR5Q291bnQgPiAwKSB7Ci0gICAgICAgIHJldHVybiAtLShyb3V0ZS0+bUFjdGl2aXR5Q291bnQpOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIHJldHVybiAtMTsKLSAgICB9Ci19Ci0KLXZvaWQgU2Vzc2lvblJvdXRlTWFwOjpsb2coY29uc3QgY2hhciogY2FwdGlvbikKLXsKLSAgICBBTE9HSSgiJXMgLS0tLSIsIGNhcHRpb24pOwotICAgIGZvciAoc2l6ZV90IGluZGV4ID0gMDsgaW5kZXggPCBzaXplKCk7IGluZGV4KyspIHsKLSAgICAgICAgdmFsdWVBdChpbmRleCktPmxvZygiICAiKTsKLSAgICB9Ci19Ci0KLXZvaWQgU2Vzc2lvblJvdXRlTWFwOjphZGRSb3V0ZShhdWRpb19zZXNzaW9uX3Qgc2Vzc2lvbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdWRpb19zdHJlYW1fdHlwZV90IHN0cmVhbVR5cGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXVkaW9fc291cmNlX3Qgc291cmNlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHNwPERldmljZURlc2NyaXB0b3I+JiBkZXNjcmlwdG9yLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpZF90IHVpZCkKLXsKLSAgICBpZiAobU1hcFR5cGUgPT0gTUFQVFlQRV9JTlBVVCAmJiBzdHJlYW1UeXBlICE9IFNlc3Npb25Sb3V0ZTo6U1RSRUFNX1RZUEVfTkEpIHsKLSAgICAgICAgQUxPR0UoIkFkZGluZyBPdXRwdXQgUm91dGUgdG8gSW5wdXRSb3V0ZU1hcCIpOwotICAgICAgICByZXR1cm47Ci0gICAgfSBlbHNlIGlmIChtTWFwVHlwZSA9PSBNQVBUWVBFX09VVFBVVCAmJiBzb3VyY2UgIT0gU2Vzc2lvblJvdXRlOjpTT1VSQ0VfVFlQRV9OQSkgewotICAgICAgICBBTE9HRSgiQWRkaW5nIElucHV0IFJvdXRlIHRvIE91dHB1dFJvdXRlTWFwIik7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBzcDxTZXNzaW9uUm91dGU+IHJvdXRlID0gaW5kZXhPZktleShzZXNzaW9uKSA+PSAwID8gdmFsdWVGb3Ioc2Vzc2lvbikgOiAwOwotCi0gICAgaWYgKHJvdXRlICE9IDApIHsKLSAgICAgICAgaWYgKGRlc2NyaXB0b3IgIT0gMCB8fCByb3V0ZS0+bURldmljZURlc2NyaXB0b3IgIT0gMCkgewotICAgICAgICAgICAgcm91dGUtPm1DaGFuZ2VkID0gdHJ1ZTsKLSAgICAgICAgfQotICAgICAgICByb3V0ZS0+bVJlZkNvdW50Kys7Ci0gICAgICAgIHJvdXRlLT5tRGV2aWNlRGVzY3JpcHRvciA9IGRlc2NyaXB0b3I7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgcm91dGUgPSBuZXcgU2Vzc2lvblJvdXRlKHNlc3Npb24sIHN0cmVhbVR5cGUsIHNvdXJjZSwgZGVzY3JpcHRvciwgdWlkKTsKLSAgICAgICAgcm91dGUtPm1SZWZDb3VudCsrOwotICAgICAgICBpZiAoZGVzY3JpcHRvciAhPSAwKSB7Ci0gICAgICAgICAgICByb3V0ZS0+bUNoYW5nZWQgPSB0cnVlOwotICAgICAgICB9Ci0gICAgICAgIGFkZChzZXNzaW9uLCByb3V0ZSk7Ci0gICAgfQotfQotCi1hdWRpb19kZXZpY2VzX3QgU2Vzc2lvblJvdXRlTWFwOjpnZXRBY3RpdmVEZXZpY2VGb3JTdHJlYW0oYXVkaW9fc3RyZWFtX3R5cGVfdCBzdHJlYW1UeXBlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IERldmljZVZlY3RvciYgYXZhaWxhYmxlRGV2aWNlcykKLXsKLSAgICBmb3IgKHNpemVfdCBpbmRleCA9IDA7IGluZGV4IDwgc2l6ZSgpOyBpbmRleCsrKSB7Ci0gICAgICAgIHNwPFNlc3Npb25Sb3V0ZT4gcm91dGUgPSB2YWx1ZUF0KGluZGV4KTsKLSAgICAgICAgaWYgKHN0cmVhbVR5cGUgPT0gcm91dGUtPm1TdHJlYW1UeXBlICYmIHJvdXRlLT5pc0FjdGl2ZU9yQ2hhbmdlZCgpCi0gICAgICAgICAgICAgICAgJiYgcm91dGUtPm1EZXZpY2VEZXNjcmlwdG9yICE9IDApIHsKLSAgICAgICAgICAgIGF1ZGlvX2RldmljZXNfdCBkZXZpY2UgPSByb3V0ZS0+bURldmljZURlc2NyaXB0b3ItPnR5cGUoKTsKLSAgICAgICAgICAgIGlmICghYXZhaWxhYmxlRGV2aWNlcy5nZXREZXZpY2VzRnJvbVR5cGUoZGV2aWNlKS5pc0VtcHR5KCkpIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gZGV2aWNlOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotICAgIHJldHVybiBBVURJT19ERVZJQ0VfTk9ORTsKLX0KLQotfSAvLyBuYW1lc3BhY2UgYW5kcm9pZApkaWZmIC0tZ2l0IGEvc2VydmljZXMvYXVkaW9wb2xpY3kvY29tbW9uL21hbmFnZXJkZWZpbml0aW9ucy9zcmMvU3RyZWFtRGVzY3JpcHRvci5jcHAgYi9zZXJ2aWNlcy9hdWRpb3BvbGljeS9jb21tb24vbWFuYWdlcmRlZmluaXRpb25zL3NyYy9TdHJlYW1EZXNjcmlwdG9yLmNwcAppbmRleCA2NTY0OWZiLi5jMzExYTRmIDEwMDY0NAotLS0gYS9zZXJ2aWNlcy9hdWRpb3BvbGljeS9jb21tb24vbWFuYWdlcmRlZmluaXRpb25zL3NyYy9TdHJlYW1EZXNjcmlwdG9yLmNwcAorKysgYi9zZXJ2aWNlcy9hdWRpb3BvbGljeS9jb21tb24vbWFuYWdlcmRlZmluaXRpb25zL3NyYy9TdHJlYW1EZXNjcmlwdG9yLmNwcApAQCAtNzksMjQgKzc5LDE2IEBACiAgICAgbVZvbHVtZUN1cnZlW2RldmljZUNhdGVnb3J5XSA9IHBvaW50OwogfQogCi12b2lkIFN0cmVhbURlc2NyaXB0b3I6OmR1bXAoaW50IGZkKSBjb25zdAordm9pZCBTdHJlYW1EZXNjcmlwdG9yOjpkdW1wKFN0cmluZzggKmRzdCkgY29uc3QKIHsKLSAgICBjb25zdCBzaXplX3QgU0laRSA9IDI1NjsKLSAgICBjaGFyIGJ1ZmZlcltTSVpFXTsKLSAgICBTdHJpbmc4IHJlc3VsdDsKLQotICAgIHNucHJpbnRmKGJ1ZmZlciwgU0laRSwgIiVzICAgICAgICAgJTAyZCAgICAgICAgICUwMmQgICAgICAgICAiLAorICAgIGRzdC0+YXBwZW5kRm9ybWF0KCIlcyAgICAgICAgICUwMmQgICAgICAgICAlMDJkICAgICAgICAgIiwKICAgICAgICAgICAgICBtQ2FuQmVNdXRlZCA/ICJ0cnVlICIgOiAiZmFsc2UiLCBtSW5kZXhNaW4sIG1JbmRleE1heCk7Ci0gICAgcmVzdWx0LmFwcGVuZChidWZmZXIpOwogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbUluZGV4Q3VyLnNpemUoKTsgaSsrKSB7Ci0gICAgICAgIHNucHJpbnRmKGJ1ZmZlciwgU0laRSwgIiUwNHggOiAlMDJkLCAiLAorICAgICAgICBkc3QtPmFwcGVuZEZvcm1hdCgiJTA0eCA6ICUwMmQsICIsCiAgICAgICAgICAgICAgICAgIG1JbmRleEN1ci5rZXlBdChpKSwKICAgICAgICAgICAgICAgICAgbUluZGV4Q3VyLnZhbHVlQXQoaSkpOwotICAgICAgICByZXN1bHQuYXBwZW5kKGJ1ZmZlcik7CiAgICAgfQotICAgIHJlc3VsdC5hcHBlbmQoIlxuIik7Ci0KLSAgICB3cml0ZShmZCwgcmVzdWx0LnN0cmluZygpLCByZXN1bHQuc2l6ZSgpKTsKKyAgICBkc3QtPmFwcGVuZCgiXG4iKTsKIH0KIAogU3RyZWFtRGVzY3JpcHRvckNvbGxlY3Rpb246OlN0cmVhbURlc2NyaXB0b3JDb2xsZWN0aW9uKCkKQEAgLTIwNCwyMyArMTk2LDE1IEBACiAgICAgfQogfQogCi1zdGF0dXNfdCBTdHJlYW1EZXNjcmlwdG9yQ29sbGVjdGlvbjo6ZHVtcChpbnQgZmQpIGNvbnN0Cit2b2lkIFN0cmVhbURlc2NyaXB0b3JDb2xsZWN0aW9uOjpkdW1wKFN0cmluZzggKmRzdCkgY29uc3QKIHsKLSAgICBjb25zdCBzaXplX3QgU0laRSA9IDI1NjsKLSAgICBjaGFyIGJ1ZmZlcltTSVpFXTsKLQotICAgIHNucHJpbnRmKGJ1ZmZlciwgU0laRSwgIlxuU3RyZWFtcyBkdW1wOlxuIik7Ci0gICAgd3JpdGUoZmQsIGJ1ZmZlciwgc3RybGVuKGJ1ZmZlcikpOwotICAgIHNucHJpbnRmKGJ1ZmZlciwgU0laRSwKKyAgICBkc3QtPmFwcGVuZCgiXG5TdHJlYW1zIGR1bXA6XG4iKTsKKyAgICBkc3QtPmFwcGVuZCgKICAgICAgICAgICAgICAiIFN0cmVhbSAgQ2FuIGJlIG11dGVkICBJbmRleCBNaW4gIEluZGV4IE1heCAgSW5kZXggQ3VyIFtkZXZpY2UgOiBpbmRleF0uLi5cbiIpOwotICAgIHdyaXRlKGZkLCBidWZmZXIsIHN0cmxlbihidWZmZXIpKTsKICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHNpemUoKTsgaSsrKSB7Ci0gICAgICAgIHNucHJpbnRmKGJ1ZmZlciwgU0laRSwgIiAlMDJ6dSAgICAgICIsIGkpOwotICAgICAgICB3cml0ZShmZCwgYnVmZmVyLCBzdHJsZW4oYnVmZmVyKSk7Ci0gICAgICAgIHZhbHVlQXQoaSkuZHVtcChmZCk7CisgICAgICAgIGRzdC0+YXBwZW5kRm9ybWF0KCIgJTAyenUgICAgICAiLCBpKTsKKyAgICAgICAgdmFsdWVBdChpKS5kdW1wKGRzdCk7CiAgICAgfQotCi0gICAgcmV0dXJuIE5PX0VSUk9SOwogfQogCiB9IC8vIG5hbWVzcGFjZSBhbmRyb2lkCmRpZmYgLS1naXQgYS9zZXJ2aWNlcy9hdWRpb3BvbGljeS9jb21tb24vbWFuYWdlcmRlZmluaXRpb25zL3NyYy9Wb2x1bWVDdXJ2ZS5jcHAgYi9zZXJ2aWNlcy9hdWRpb3BvbGljeS9jb21tb24vbWFuYWdlcmRlZmluaXRpb25zL3NyYy9Wb2x1bWVDdXJ2ZS5jcHAKaW5kZXggYWMzZjFiYy4uNjIwZjM2MSAxMDA2NDQKLS0tIGEvc2VydmljZXMvYXVkaW9wb2xpY3kvY29tbW9uL21hbmFnZXJkZWZpbml0aW9ucy9zcmMvVm9sdW1lQ3VydmUuY3BwCisrKyBiL3NlcnZpY2VzL2F1ZGlvcG9saWN5L2NvbW1vbi9tYW5hZ2VyZGVmaW5pdGlvbnMvc3JjL1ZvbHVtZUN1cnZlLmNwcApAQCAtNjgsODEgKzY4LDU2IEBACiAgICAgcmV0dXJuIGRlY2liZWxzOwogfQogCi12b2lkIFZvbHVtZUN1cnZlOjpkdW1wKGludCBmZCkgY29uc3QKK3ZvaWQgVm9sdW1lQ3VydmU6OmR1bXAoU3RyaW5nOCAqZHN0KSBjb25zdAogewotICAgIGNvbnN0IHNpemVfdCBTSVpFID0gMjU2OwotICAgIGNoYXIgYnVmZmVyW1NJWkVdOwotICAgIFN0cmluZzggcmVzdWx0OwotICAgIHNucHJpbnRmKGJ1ZmZlciwgU0laRSwgIiB7Iik7Ci0gICAgcmVzdWx0LmFwcGVuZChidWZmZXIpOworICAgIGRzdC0+YXBwZW5kKCIgeyIpOwogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbUN1cnZlUG9pbnRzLnNpemUoKTsgaSsrKSB7Ci0gICAgICAgIHNucHJpbnRmKGJ1ZmZlciwgU0laRSwgIiglM2QsICU1ZCkiLAorICAgICAgICBkc3QtPmFwcGVuZEZvcm1hdCgiKCUzZCwgJTVkKSIsCiAgICAgICAgICAgICAgICAgIG1DdXJ2ZVBvaW50c1tpXS5tSW5kZXgsIG1DdXJ2ZVBvaW50c1tpXS5tQXR0ZW51YXRpb25Jbk1iKTsKLSAgICAgICAgcmVzdWx0LmFwcGVuZChidWZmZXIpOwotICAgICAgICByZXN1bHQuYXBwZW5kKGkgPT0gKG1DdXJ2ZVBvaW50cy5zaXplKCkgLSAxKSA/ICIgfVxuIiA6ICIsICIpOworICAgICAgICBkc3QtPmFwcGVuZChpID09IChtQ3VydmVQb2ludHMuc2l6ZSgpIC0gMSkgPyAiIH1cbiIgOiAiLCAiKTsKICAgICB9Ci0gICAgd3JpdGUoZmQsIHJlc3VsdC5zdHJpbmcoKSwgcmVzdWx0LnNpemUoKSk7CiB9CiAKLXZvaWQgVm9sdW1lQ3VydmVzRm9yU3RyZWFtOjpkdW1wKGludCBmZCwgaW50IHNwYWNlcyA9IDAsIGJvb2wgY3VydmVQb2ludHMpIGNvbnN0Cit2b2lkIFZvbHVtZUN1cnZlc0ZvclN0cmVhbTo6ZHVtcChTdHJpbmc4ICpkc3QsIGludCBzcGFjZXMgPSAwLCBib29sIGN1cnZlUG9pbnRzKSBjb25zdAogewotICAgIGNvbnN0IHNpemVfdCBTSVpFID0gMjU2OwotICAgIGNoYXIgYnVmZmVyW1NJWkVdOwotICAgIFN0cmluZzggcmVzdWx0OwotCiAgICAgaWYgKCFjdXJ2ZVBvaW50cykgewotICAgICAgICBzbnByaW50ZihidWZmZXIsIFNJWkUsICIlcyAgICAgICAgICUwMmQgICAgICAgICAlMDJkICAgICAgICAgIiwKKyAgICAgICAgZHN0LT5hcHBlbmRGb3JtYXQoIiVzICAgICAgICAgJTAyZCAgICAgICAgICUwMmQgICAgICAgICAiLAogICAgICAgICAgICAgICAgICBtQ2FuQmVNdXRlZCA/ICJ0cnVlICIgOiAiZmFsc2UiLCBtSW5kZXhNaW4sIG1JbmRleE1heCk7Ci0gICAgICAgIHJlc3VsdC5hcHBlbmQoYnVmZmVyKTsKICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtSW5kZXhDdXIuc2l6ZSgpOyBpKyspIHsKLSAgICAgICAgICAgIHNucHJpbnRmKGJ1ZmZlciwgU0laRSwgIiUwNHggOiAlMDJkLCAiLCBtSW5kZXhDdXIua2V5QXQoaSksIG1JbmRleEN1ci52YWx1ZUF0KGkpKTsKLSAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQoYnVmZmVyKTsKKyAgICAgICAgICAgIGRzdC0+YXBwZW5kRm9ybWF0KCIlMDR4IDogJTAyZCwgIiwgbUluZGV4Q3VyLmtleUF0KGkpLCBtSW5kZXhDdXIudmFsdWVBdChpKSk7CiAgICAgICAgIH0KLSAgICAgICAgcmVzdWx0LmFwcGVuZCgiXG4iKTsKLSAgICAgICAgd3JpdGUoZmQsIHJlc3VsdC5zdHJpbmcoKSwgcmVzdWx0LnNpemUoKSk7CisgICAgICAgIGRzdC0+YXBwZW5kKCJcbiIpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCiAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBzaXplKCk7IGkrKykgewogICAgICAgICBzdGQ6OnN0cmluZyBkZXZpY2VDYXRMaXRlcmFsOwogICAgICAgICBEZXZpY2VDYXRlZ29yeUNvbnZlcnRlcjo6dG9TdHJpbmcoa2V5QXQoaSksIGRldmljZUNhdExpdGVyYWwpOwotICAgICAgICBzbnByaW50ZihidWZmZXIsIFNJWkUsICIlKnMgJXMgOiIsCisgICAgICAgIGRzdC0+YXBwZW5kRm9ybWF0KCIlKnMgJXMgOiIsCiAgICAgICAgICAgICAgICAgIHNwYWNlcywgIiIsIGRldmljZUNhdExpdGVyYWwuY19zdHIoKSk7Ci0gICAgICAgIHdyaXRlKGZkLCBidWZmZXIsIHN0cmxlbihidWZmZXIpKTsKLSAgICAgICAgdmFsdWVBdChpKS0+ZHVtcChmZCk7CisgICAgICAgIHZhbHVlQXQoaSktPmR1bXAoZHN0KTsKICAgICB9Ci0gICAgcmVzdWx0LmFwcGVuZCgiXG4iKTsKLSAgICB3cml0ZShmZCwgcmVzdWx0LnN0cmluZygpLCByZXN1bHQuc2l6ZSgpKTsKKyAgICBkc3QtPmFwcGVuZCgiXG4iKTsKIH0KIAotc3RhdHVzX3QgVm9sdW1lQ3VydmVzQ29sbGVjdGlvbjo6ZHVtcChpbnQgZmQpIGNvbnN0Cit2b2lkIFZvbHVtZUN1cnZlc0NvbGxlY3Rpb246OmR1bXAoU3RyaW5nOCAqZHN0KSBjb25zdAogewotICAgIGNvbnN0IHNpemVfdCBTSVpFID0gMjU2OwotICAgIGNoYXIgYnVmZmVyW1NJWkVdOwotCi0gICAgc25wcmludGYoYnVmZmVyLCBTSVpFLCAiXG5TdHJlYW1zIGR1bXA6XG4iKTsKLSAgICB3cml0ZShmZCwgYnVmZmVyLCBzdHJsZW4oYnVmZmVyKSk7Ci0gICAgc25wcmludGYoYnVmZmVyLCBTSVpFLAorICAgIGRzdC0+YXBwZW5kKCJcblN0cmVhbXMgZHVtcDpcbiIpOworICAgIGRzdC0+YXBwZW5kKAogICAgICAgICAgICAgICIgU3RyZWFtICBDYW4gYmUgbXV0ZWQgIEluZGV4IE1pbiAgSW5kZXggTWF4ICBJbmRleCBDdXIgW2RldmljZSA6IGluZGV4XS4uLlxuIik7Ci0gICAgd3JpdGUoZmQsIGJ1ZmZlciwgc3RybGVuKGJ1ZmZlcikpOwogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgc2l6ZSgpOyBpKyspIHsKLSAgICAgICAgc25wcmludGYoYnVmZmVyLCBTSVpFLCAiICUwMnp1ICAgICAgIiwgaSk7Ci0gICAgICAgIHdyaXRlKGZkLCBidWZmZXIsIHN0cmxlbihidWZmZXIpKTsKLSAgICAgICAgdmFsdWVBdChpKS5kdW1wKGZkKTsKKyAgICAgICAgZHN0LT5hcHBlbmRGb3JtYXQoIiAlMDJ6dSAgICAgICIsIGkpOworICAgICAgICB2YWx1ZUF0KGkpLmR1bXAoZHN0KTsKICAgICB9Ci0gICAgc25wcmludGYoYnVmZmVyLCBTSVpFLCAiXG5Wb2x1bWUgQ3VydmVzIGZvciBVc2UgQ2FzZXMgKGFrYSBTdHJlYW0gdHlwZXMpIGR1bXA6XG4iKTsKLSAgICB3cml0ZShmZCwgYnVmZmVyLCBzdHJsZW4oYnVmZmVyKSk7CisgICAgZHN0LT5hcHBlbmQoIlxuVm9sdW1lIEN1cnZlcyBmb3IgVXNlIENhc2VzIChha2EgU3RyZWFtIHR5cGVzKSBkdW1wOlxuIik7CiAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBzaXplKCk7IGkrKykgewogICAgICAgICBzdGQ6OnN0cmluZyBzdHJlYW1UeXBlTGl0ZXJhbDsKICAgICAgICAgU3RyZWFtVHlwZUNvbnZlcnRlcjo6dG9TdHJpbmcoa2V5QXQoaSksIHN0cmVhbVR5cGVMaXRlcmFsKTsKLSAgICAgICAgc25wcmludGYoYnVmZmVyLCBTSVpFLAorICAgICAgICBkc3QtPmFwcGVuZEZvcm1hdCgKICAgICAgICAgICAgICAgICAgIiAlcyAoJTAyenUpOiBDdXJ2ZSBwb2ludHMgZm9yIGRldmljZSBjYXRlZ29yeSAoaW5kZXgsIGF0dGVudWF0aW9uIGluIG1pbGxpYmVsKVxuIiwKICAgICAgICAgICAgICAgICAgc3RyZWFtVHlwZUxpdGVyYWwuY19zdHIoKSwgaSk7Ci0gICAgICAgIHdyaXRlKGZkLCBidWZmZXIsIHN0cmxlbihidWZmZXIpKTsKLSAgICAgICAgdmFsdWVBdChpKS5kdW1wKGZkLCAyLCB0cnVlKTsKKyAgICAgICAgdmFsdWVBdChpKS5kdW1wKGRzdCwgMiwgdHJ1ZSk7CiAgICAgfQotCi0gICAgcmV0dXJuIE5PX0VSUk9SOwogfQogCiB9IC8vIG5hbWVzcGFjZSBhbmRyb2lkCmRpZmYgLS1naXQgYS9zZXJ2aWNlcy9hdWRpb3BvbGljeS9jb25maWcvYXVkaW9fcG9saWN5X2NvbmZpZ3VyYXRpb24ueG1sIGIvc2VydmljZXMvYXVkaW9wb2xpY3kvY29uZmlnL2F1ZGlvX3BvbGljeV9jb25maWd1cmF0aW9uLnhtbAppbmRleCBhNzVmMWNiLi4xZDAzN2MzIDEwMDY0NAotLS0gYS9zZXJ2aWNlcy9hdWRpb3BvbGljeS9jb25maWcvYXVkaW9fcG9saWN5X2NvbmZpZ3VyYXRpb24ueG1sCisrKyBiL3NlcnZpY2VzL2F1ZGlvcG9saWN5L2NvbmZpZy9hdWRpb19wb2xpY3lfY29uZmlndXJhdGlvbi54bWwKQEAgLTE4NSw2ICsxODUsOSBAQAogICAgICAgICA8IS0tIEhlYXJpbmcgYWlkIEF1ZGlvIEhBTCAtLT4KICAgICAgICAgPHhpOmluY2x1ZGUgaHJlZj0iaGVhcmluZ19haWRfYXVkaW9fcG9saWN5X2NvbmZpZ3VyYXRpb24ueG1sIi8+CiAKKyAgICAgICAgPCEtLSBNU0QgQXVkaW8gSEFMIChvcHRpb25hbCkgLS0+CisgICAgICAgIDx4aTppbmNsdWRlIGhyZWY9Im1zZF9hdWRpb19wb2xpY3lfY29uZmlndXJhdGlvbi54bWwiLz4KKwogICAgIDwvbW9kdWxlcz4KICAgICA8IS0tIEVuZCBvZiBNb2R1bGVzIHNlY3Rpb24gLS0+CiAKQEAgLTE5NSw0ICsxOTgsMjYgQEAKIAogICAgIDwhLS0gRW5kIG9mIFZvbHVtZSBzZWN0aW9uIC0tPgogCisgICAgPD9kaXNhYmxlZFVudGlsSGFsVjRfMQorICAgIDwhLS0gU3Vycm91bmQgY29uZmlndXJhdGlvbiAtLT4KKworICAgIDxzdXJyb3VuZFNvdW5kPgorICAgICAgPCEtLSBFYWNoIG9mIHRoZSBsaXN0ZWQgZm9ybWF0cyBnZXRzIGFuIGVudHJ5IGluIFN1cnJvdW5kIFNldHRpbmdzIGRpYWxvZy4KKyAgICAgICAgICAgVGhlcmUgbXVzdCBiZSBhIGNvcnJlc3BvbmRpbmcgSmF2YSBFTkNPRElOR18uLi4gY29udGFudCBkZWZpbmVkIGluIEF1ZGlvRm9ybWF0LmphdmEsCisgICAgICAgICAgIGFuZCBhIGRpc3BsYXkgbmFtZSBkZWZpbmVkIGluIEF1ZGlvRm9ybWF0LnRvRGlzcGxheU5hbWUuIEZvciB0aGUgZm9ybWF0cyB0aGF0IGRvbid0CisgICAgICAgICAgIG5lZWQgYSBkZWRpY2F0ZWQgU3Vycm9uZCBTZXR0aW5ncyBkaWFsb2cgZW50cnksIGEgc3ViZm9ybWF0cyBsaXN0IHNob3VsZCBiZSB1c2VkLiAtLT4KKyAgICAgIDxmb3JtYXRzPgorICAgICAgICA8Zm9ybWF0IG5hbWU9IkFVRElPX0ZPUk1BVF9BQzMiIC8+CisgICAgICAgIDxmb3JtYXQgbmFtZT0iQVVESU9fRk9STUFUX0VfQUMzIiAvPgorICAgICAgICA8Zm9ybWF0IG5hbWU9IkFVRElPX0ZPUk1BVF9FX0FDM19KT0MiIC8+CisgICAgICAgIDxmb3JtYXQgbmFtZT0iQVVESU9fRk9STUFUX0RPTEJZX1RSVUVIRCIgLz4KKyAgICAgICAgPGZvcm1hdCBuYW1lPSJBVURJT19GT1JNQVRfRFRTIiAvPgorICAgICAgICA8Zm9ybWF0IG5hbWU9IkFVRElPX0ZPUk1BVF9EVFNfSEQiIC8+CisgICAgICAgIDxmb3JtYXQgbmFtZT0iQVVESU9fRk9STUFUX0FBQ19MQyIgc3ViZm9ybWF0cz0iQVVESU9fRk9STUFUX0FBQ19IRV9WMSBBVURJT19GT1JNQVRfQUFDX0hFX1YyIEFVRElPX0ZPUk1BVF9BQUNfRUxEIEFVRElPX0ZPUk1BVF9BQUNfWEhFIiAvPgorICAgICAgPC9mb3JtYXRzPgorICAgIDwvc3Vycm91bmRTb3VuZD4KKworICAgIDwhLS0gRW5kIG9mIFN1cnJvdW5kIGNvbmZpZ3VyYXRpb24gLS0+CisgICAgPz4KKwogPC9hdWRpb1BvbGljeUNvbmZpZ3VyYXRpb24+CmRpZmYgLS1naXQgYS9zZXJ2aWNlcy9hdWRpb3BvbGljeS9jb25maWcvbXNkX2F1ZGlvX3BvbGljeV9jb25maWd1cmF0aW9uLnhtbCBiL3NlcnZpY2VzL2F1ZGlvcG9saWN5L2NvbmZpZy9tc2RfYXVkaW9fcG9saWN5X2NvbmZpZ3VyYXRpb24ueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE4MTFmNWUKLS0tIC9kZXYvbnVsbAorKysgYi9zZXJ2aWNlcy9hdWRpb3BvbGljeS9jb25maWcvbXNkX2F1ZGlvX3BvbGljeV9jb25maWd1cmF0aW9uLnhtbApAQCAtMCwwICsxLDYzIEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPCEtLSBDb3B5cmlnaHQgKEMpIDIwMTctMjAxOCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisKKyAgICAgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgICAgIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAgICAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisKKyAgICAgICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKworICAgICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgICAgIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgICAgIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICAgICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgICAgIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorLS0+Cis8IS0tIE11bHRpIFN0cmVhbSBEZWNvZGVyIEF1ZGlvIFBvbGljeSBDb25maWd1cmF0aW9uIGZpbGUgLS0+Cis8bW9kdWxlIG5hbWU9Im1zZCIgaGFsVmVyc2lvbj0iMi4wIj4KKyAgICA8YXR0YWNoZWREZXZpY2VzPgorICAgICAgICA8aXRlbT5NUzEyIElucHV0PC9pdGVtPgorICAgICAgICA8aXRlbT5NUzEyIE91dHB1dDwvaXRlbT4KKyAgICA8L2F0dGFjaGVkRGV2aWNlcz4KKyAgICA8bWl4UG9ydHM+CisgICAgICAgIDxtaXhQb3J0IG5hbWU9Im1zMTIgaW5wdXQiIHJvbGU9InNvdXJjZSI+CisgICAgICAgICAgICA8cHJvZmlsZSBuYW1lPSIiIGZvcm1hdD0iQVVESU9fRk9STUFUX1BDTV8xNl9CSVQiCisgICAgICAgICAgICAgICAgICAgICBzYW1wbGluZ1JhdGVzPSI0ODAwMCIgY2hhbm5lbE1hc2tzPSJBVURJT19DSEFOTkVMX09VVF9TVEVSRU8iLz4KKyAgICAgICAgPC9taXhQb3J0PgorICAgICAgICA8bWl4UG9ydCBuYW1lPSJtczEyIGNvbXByZXNzZWQgaW5wdXQiIHJvbGU9InNvdXJjZSIKKyAgICAgICAgICAgICAgICBmbGFncz0iQVVESU9fT1VUUFVUX0ZMQUdfRElSRUNUfEFVRElPX09VVFBVVF9GTEFHX0NPTVBSRVNTX09GRkxPQUR8QVVESU9fT1VUUFVUX0ZMQUdfTk9OX0JMT0NLSU5HIj4KKyAgICAgICAgICAgIDxwcm9maWxlIG5hbWU9IiIgZm9ybWF0PSJBVURJT19GT1JNQVRfQUMzIgorICAgICAgICAgICAgICAgICAgICAgc2FtcGxpbmdSYXRlcz0iMzIwMDAsNDQxMDAsNDgwMDAiCisgICAgICAgICAgICAgICAgICAgICBjaGFubmVsTWFza3M9IkFVRElPX0NIQU5ORUxfT1VUX01PTk8sQVVESU9fQ0hBTk5FTF9PVVRfU1RFUkVPLEFVRElPX0NIQU5ORUxfT1VUXzVQT0lOVDEiLz4KKyAgICAgICAgICAgIDxwcm9maWxlIG5hbWU9IiIgZm9ybWF0PSJBVURJT19GT1JNQVRfRV9BQzMiCisgICAgICAgICAgICAgICAgICAgICBzYW1wbGluZ1JhdGVzPSIzMjAwMCw0NDEwMCw0ODAwMCIKKyAgICAgICAgICAgICAgICAgICAgIGNoYW5uZWxNYXNrcz0iQVVESU9fQ0hBTk5FTF9PVVRfTU9OTyxBVURJT19DSEFOTkVMX09VVF9TVEVSRU8sQVVESU9fQ0hBTk5FTF9PVVRfNVBPSU5UMSxBVURJT19DSEFOTkVMX09VVF83UE9JTlQxIi8+CisgICAgICAgICAgICA8cHJvZmlsZSBuYW1lPSIiIGZvcm1hdD0iQVVESU9fRk9STUFUX0FDNCIKKyAgICAgICAgICAgICAgICAgICAgIHNhbXBsaW5nUmF0ZXM9IjMyMDAwLDQ0MTAwLDQ4MDAwIgorICAgICAgICAgICAgICAgICAgICAgY2hhbm5lbE1hc2tzPSJBVURJT19DSEFOTkVMX09VVF9NT05PLEFVRElPX0NIQU5ORUxfT1VUX1NURVJFTyxBVURJT19DSEFOTkVMX09VVF81UE9JTlQxLEFVRElPX0NIQU5ORUxfT1VUXzdQT0lOVDEiLz4KKyAgICAgICAgPC9taXhQb3J0PgorICAgICAgICA8IS0tIFRoZSBIVyBBViBTeW5jIGZsYWcgaXMgbm90IHJlcXVpcmVkLCBidXQgaXMgcmVjb21tZW5kZWQgLS0+CisgICAgICAgIDxtaXhQb3J0IG5hbWU9Im1zMTIgb3V0cHV0IiByb2xlPSJzaW5rIiBmbGFncz0iQVVESU9fSU5QVVRfRkxBR19IV19BVl9TWU5DIj4KKyAgICAgICAgICAgIDxwcm9maWxlIG5hbWU9IiIgZm9ybWF0PSJBVURJT19GT1JNQVRfUENNXzE2X0JJVCIKKyAgICAgICAgICAgICAgICAgICAgIHNhbXBsaW5nUmF0ZXM9IjQ4MDAwIiBjaGFubmVsTWFza3M9IkFVRElPX0NIQU5ORUxfSU5fU1RFUkVPIi8+CisgICAgICAgICAgICA8cHJvZmlsZSBuYW1lPSIiIGZvcm1hdD0iQVVESU9fRk9STUFUX0FDMyIKKyAgICAgICAgICAgICAgICAgICAgIHNhbXBsaW5nUmF0ZXM9IjQ4MDAwIiBjaGFubmVsTWFza3M9IkFVRElPX0NIQU5ORUxfSU5fNVBPSU5UMSIvPgorICAgICAgICAgICAgPHByb2ZpbGUgbmFtZT0iIiBmb3JtYXQ9IkFVRElPX0ZPUk1BVF9FX0FDMyIKKyAgICAgICAgICAgICAgICAgICAgIHNhbXBsaW5nUmF0ZXM9IjQ4MDAwIiBjaGFubmVsTWFza3M9IkFVRElPX0NIQU5ORUxfSU5fNVBPSU5UMSIvPgorICAgICAgICA8L21peFBvcnQ+CisgICA8L21peFBvcnRzPgorICAgPGRldmljZVBvcnRzPgorICAgICAgIDxkZXZpY2VQb3J0IHRhZ05hbWU9Ik1TMTIgSW5wdXQiIHR5cGU9IkFVRElPX0RFVklDRV9PVVRfQlVTIiAgcm9sZT0ic2luayI+CisgICAgICAgICAgIDxwcm9maWxlIG5hbWU9IiIgZm9ybWF0PSJBVURJT19GT1JNQVRfUENNXzE2X0JJVCIKKyAgICAgICAgICAgICAgICAgICAgc2FtcGxpbmdSYXRlcz0iNDgwMDAiIGNoYW5uZWxNYXNrcz0iQVVESU9fQ0hBTk5FTF9PVVRfU1RFUkVPIi8+CisgICAgICAgPC9kZXZpY2VQb3J0PgorICAgICAgIDxkZXZpY2VQb3J0IHRhZ05hbWU9Ik1TMTIgT3V0cHV0IiB0eXBlPSJBVURJT19ERVZJQ0VfSU5fQlVTIiAgcm9sZT0ic291cmNlIj4KKyAgICAgICAgICAgPHByb2ZpbGUgbmFtZT0iIiBmb3JtYXQ9IkFVRElPX0ZPUk1BVF9QQ01fMTZfQklUIgorICAgICAgICAgICAgICAgICAgICBzYW1wbGluZ1JhdGVzPSI0ODAwMCIgY2hhbm5lbE1hc2tzPSJBVURJT19DSEFOTkVMX0lOX1NURVJFTyIvPgorICAgICAgICA8L2RldmljZVBvcnQ+CisgICAgPC9kZXZpY2VQb3J0cz4KKyAgICA8cm91dGVzPgorICAgICAgICA8cm91dGUgdHlwZT0ibWl4IiBzaW5rPSJNUzEyIElucHV0IiBzb3VyY2VzPSJtczEyIGlucHV0LG1zMTIgY29tcHJlc3NlZCBpbnB1dCIvPgorICAgICAgICA8cm91dGUgdHlwZT0ibWl4IiBzaW5rPSJtczEyIG91dHB1dCIgc291cmNlcz0iTVMxMiBPdXRwdXQiLz4KKyAgICA8L3JvdXRlcz4KKzwvbW9kdWxlPgpkaWZmIC0tZ2l0IGEvc2VydmljZXMvYXVkaW9wb2xpY3kvZW5naW5lY29uZmlndXJhYmxlL3dyYXBwZXIvQW5kcm9pZC5tayBiL3NlcnZpY2VzL2F1ZGlvcG9saWN5L2VuZ2luZWNvbmZpZ3VyYWJsZS93cmFwcGVyL0FuZHJvaWQubWsKaW5kZXggMzZlMGY0Mi4uYjEyOGEzOCAxMDA2NDQKLS0tIGEvc2VydmljZXMvYXVkaW9wb2xpY3kvZW5naW5lY29uZmlndXJhYmxlL3dyYXBwZXIvQW5kcm9pZC5taworKysgYi9zZXJ2aWNlcy9hdWRpb3BvbGljeS9lbmdpbmVjb25maWd1cmFibGUvd3JhcHBlci9BbmRyb2lkLm1rCkBAIC0xMCw3ICsxMCw2IEBACiAgICAgJChMT0NBTF9QQVRIKS9pbmNsdWRlIFwKICAgICBmcmFtZXdvcmtzL2F2L3NlcnZpY2VzL2F1ZGlvcG9saWN5L2VuZ2luZWNvbmZpZ3VyYWJsZS9pbmNsdWRlIFwKICAgICBmcmFtZXdvcmtzL2F2L3NlcnZpY2VzL2F1ZGlvcG9saWN5L2VuZ2luZWNvbmZpZ3VyYWJsZS9pbnRlcmZhY2UgXAotICAgIGZyYW1ld29ya3MvYXYvc2VydmljZXMvYXVkaW9wb2xpY3kvdXRpbGl0aWVzL2NvbnZlcnQgXAogCiBMT0NBTF9TUkNfRklMRVM6PSBQYXJhbWV0ZXJNYW5hZ2VyV3JhcHBlci5jcHAKIApkaWZmIC0tZ2l0IGEvc2VydmljZXMvYXVkaW9wb2xpY3kvZW5naW5lZGVmYXVsdC9zcmMvRW5naW5lLmNwcCBiL3NlcnZpY2VzL2F1ZGlvcG9saWN5L2VuZ2luZWRlZmF1bHQvc3JjL0VuZ2luZS5jcHAKaW5kZXggZTg2YWU1Zi4uNjkzOTVmMyAxMDA2NDQKLS0tIGEvc2VydmljZXMvYXVkaW9wb2xpY3kvZW5naW5lZGVmYXVsdC9zcmMvRW5naW5lLmNwcAorKysgYi9zZXJ2aWNlcy9hdWRpb3BvbGljeS9lbmdpbmVkZWZhdWx0L3NyYy9FbmdpbmUuY3BwCkBAIC0zMTUsNyArMzE1LDcgQEAKICAgICAgICAgICAgIGF1ZGlvX2RldmljZXNfdCB0eERldmljZSA9IGdldERldmljZUZvcklucHV0U291cmNlKEFVRElPX1NPVVJDRV9WT0lDRV9DT01NVU5JQ0FUSU9OKTsKICAgICAgICAgICAgIHNwPEF1ZGlvT3V0cHV0RGVzY3JpcHRvcj4gcHJpbWFyeU91dHB1dCA9IG91dHB1dHMuZ2V0UHJpbWFyeU91dHB1dCgpOwogICAgICAgICAgICAgYXVkaW9fZGV2aWNlc190IGF2YWlsUHJpbWFyeUlucHV0RGV2aWNlcyA9Ci0gICAgICAgICAgICAgICAgIGF2YWlsYWJsZUlucHV0RGV2aWNlcy5nZXREZXZpY2VzRnJvbUh3TW9kdWxlKHByaW1hcnlPdXRwdXQtPmdldE1vZHVsZUhhbmRsZSgpKTsKKyAgICAgICAgICAgICAgICAgYXZhaWxhYmxlSW5wdXREZXZpY2VzLmdldERldmljZVR5cGVzRnJvbUh3TW9kdWxlKHByaW1hcnlPdXRwdXQtPmdldE1vZHVsZUhhbmRsZSgpKTsKIAogICAgICAgICAgICAgLy8gVE9ETzogZ2V0UHJpbWFyeU91dHB1dCByZXR1cm4gb25seSBkZXZpY2VzIGZyb20gZmlyc3QgbW9kdWxlIGluCiAgICAgICAgICAgICAvLyBhdWRpb19wb2xpY3lfY29uZmlndXJhdGlvbi54bWwsIGhlYXJpbmcgYWlkIGlzIG5vdCB0aGVyZSwgYnV0IGl0J3MKQEAgLTQxMCw4ICs0MTAsNyBAQAogCiAgICAgY2FzZSBTVFJBVEVHWV9TT05JRklDQVRJT046CiAKLSAgICAgICAgLy8gSWYgaW5jYWxsLCBqdXN0IHNlbGVjdCB0aGUgU1RSQVRFR1lfUEhPTkUgZGV2aWNlOiBUaGUgcmVzdCBvZiB0aGUgYmVoYXZpb3IgaXMgaGFuZGxlZCBieQotICAgICAgICAvLyBoYW5kbGVJbmNhbGxTb25pZmljYXRpb24oKS4KKyAgICAgICAgLy8gSWYgaW5jYWxsLCBqdXN0IHNlbGVjdCB0aGUgU1RSQVRFR1lfUEhPTkUgZGV2aWNlCiAgICAgICAgIGlmIChpc0luQ2FsbCgpIHx8IG91dHB1dHMuaXNTdHJlYW1BY3RpdmVMb2NhbGx5KEFVRElPX1NUUkVBTV9WT0lDRV9DQUxMKSkgewogICAgICAgICAgICAgZGV2aWNlID0gZ2V0RGV2aWNlRm9yU3RyYXRlZ3lJbnQoCiAgICAgICAgICAgICAgICAgICAgIFNUUkFURUdZX1BIT05FLCBhdmFpbGFibGVPdXRwdXREZXZpY2VzLCBhdmFpbGFibGVJbnB1dERldmljZXMsIG91dHB1dHMsCkBAIC00ODQsNyArNDgzLDcgQEAKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBhdmFpbGFibGVPdXRwdXREZXZpY2VzID0KLSAgICAgICAgICAgICAgICAgICAgYXZhaWxhYmxlT3V0cHV0RGV2aWNlcy5nZXREZXZpY2VzRnJvbVR5cGUoYXZhaWxhYmxlT3V0cHV0RGV2aWNlc1R5cGUpOworICAgICAgICAgICAgICAgICAgICBhdmFpbGFibGVPdXRwdXREZXZpY2VzLmdldERldmljZXNGcm9tVHlwZU1hc2soYXZhaWxhYmxlT3V0cHV0RGV2aWNlc1R5cGUpOwogICAgICAgICAgICAgaWYgKG91dHB1dHMuaXNTdHJlYW1BY3RpdmUoQVVESU9fU1RSRUFNX1JJTkcpIHx8CiAgICAgICAgICAgICAgICAgICAgIG91dHB1dHMuaXNTdHJlYW1BY3RpdmUoQVVESU9fU1RSRUFNX0FMQVJNKSkgewogICAgICAgICAgICAgICAgIHJldHVybiBnZXREZXZpY2VGb3JTdHJhdGVneUludCgKQEAgLTY3MSw5ICs2NzAsOCBAQAogICAgICAgICBpZiAoKGdldFBob25lU3RhdGUoKSA9PSBBVURJT19NT0RFX0lOX0NBTEwpICYmCiAgICAgICAgICAgICAgICAgKGF2YWlsYWJsZU91dHB1dERldmljZXMudHlwZXMoKSAmIEFVRElPX0RFVklDRV9PVVRfVEVMRVBIT05ZX1RYKSA9PSAwKSB7CiAgICAgICAgICAgICBzcDxBdWRpb091dHB1dERlc2NyaXB0b3I+IHByaW1hcnlPdXRwdXQgPSBvdXRwdXRzLmdldFByaW1hcnlPdXRwdXQoKTsKLSAgICAgICAgICAgIGF2YWlsYWJsZURldmljZVR5cGVzID0KLSAgICAgICAgICAgICAgICAgICAgYXZhaWxhYmxlSW5wdXREZXZpY2VzLmdldERldmljZXNGcm9tSHdNb2R1bGUocHJpbWFyeU91dHB1dC0+Z2V0TW9kdWxlSGFuZGxlKCkpCi0gICAgICAgICAgICAgICAgICAgICYgfkFVRElPX0RFVklDRV9CSVRfSU47CisgICAgICAgICAgICBhdmFpbGFibGVEZXZpY2VUeXBlcyA9IGF2YWlsYWJsZUlucHV0RGV2aWNlcy5nZXREZXZpY2VUeXBlc0Zyb21Id01vZHVsZSgKKyAgICAgICAgICAgICAgICAgICAgcHJpbWFyeU91dHB1dC0+Z2V0TW9kdWxlSGFuZGxlKCkpICYgfkFVRElPX0RFVklDRV9CSVRfSU47CiAgICAgICAgIH0KIAogICAgICAgICBzd2l0Y2ggKG1Gb3JjZVVzZVtBVURJT19QT0xJQ1lfRk9SQ0VfRk9SX0NPTU1VTklDQVRJT05dKSB7CmRpZmYgLS1naXQgYS9zZXJ2aWNlcy9hdWRpb3BvbGljeS9tYW5hZ2VyZGVmYXVsdC9BdWRpb1BvbGljeU1hbmFnZXIuY3BwIGIvc2VydmljZXMvYXVkaW9wb2xpY3kvbWFuYWdlcmRlZmF1bHQvQXVkaW9Qb2xpY3lNYW5hZ2VyLmNwcAppbmRleCBjOWM4MDZhLi4zOTA5MjAyIDEwMDY0NAotLS0gYS9zZXJ2aWNlcy9hdWRpb3BvbGljeS9tYW5hZ2VyZGVmYXVsdC9BdWRpb1BvbGljeU1hbmFnZXIuY3BwCisrKyBiL3NlcnZpY2VzL2F1ZGlvcG9saWN5L21hbmFnZXJkZWZhdWx0L0F1ZGlvUG9saWN5TWFuYWdlci5jcHAKQEAgLTM2LDYgKzM2LDcgQEAKIAogI2luY2x1ZGUgPGludHR5cGVzLmg+CiAjaW5jbHVkZSA8bWF0aC5oPgorI2luY2x1ZGUgPHZlY3Rvcj4KIAogI2luY2x1ZGUgPEF1ZGlvUG9saWN5TWFuYWdlckludGVyZmFjZS5oPgogI2luY2x1ZGUgPEF1ZGlvUG9saWN5RW5naW5lSW5zdGFuY2UuaD4KQEAgLTQzLDYgKzQ0LDcgQEAKICNpbmNsdWRlIDx1dGlscy9Mb2cuaD4KICNpbmNsdWRlIDxtZWRpYS9BdWRpb1BhcmFtZXRlci5oPgogI2luY2x1ZGUgPG1lZGlhL0F1ZGlvUG9saWN5SGVscGVyLmg+CisjaW5jbHVkZSA8cHJpdmF0ZS9hbmRyb2lkX2ZpbGVzeXN0ZW1fY29uZmlnLmg+CiAjaW5jbHVkZSA8c291bmR0cmlnZ2VyL1NvdW5kVHJpZ2dlci5oPgogI2luY2x1ZGUgPHN5c3RlbS9hdWRpby5oPgogI2luY2x1ZGUgPGF1ZGlvX3BvbGljeV9jb25mLmg+CkBAIC02NSwyNSArNjcsMTUgQEAKIC8vIG1lZGlhIC8gbm90aWZpY2F0aW9uIC8gc3lzdGVtIHZvbHVtZS4KIGNvbnN0ZXhwciBmbG9hdCBJTl9DQUxMX0VBUlBJRUNFX0hFQURST09NX0RCID0gMy5mOwogCi0jZGVmaW5lIEFSUkFZX1NJWkUoYSkgKHNpemVvZihhKSAvIHNpemVvZigoYSlbMF0pKQotLy8gQXJyYXkgb2YgYWxsIHN1cnJvdW5kIGZvcm1hdHMuCi1zdGF0aWMgY29uc3QgYXVkaW9fZm9ybWF0X3QgU1VSUk9VTkRfRk9STUFUU1tdID0gewotICAgIEFVRElPX0ZPUk1BVF9BQzMsCi0gICAgQVVESU9fRk9STUFUX0VfQUMzLAotICAgIEFVRElPX0ZPUk1BVF9EVFMsCi0gICAgQVVESU9fRk9STUFUX0RUU19IRCwKLSAgICBBVURJT19GT1JNQVRfQUFDX0xDLAotICAgIEFVRElPX0ZPUk1BVF9ET0xCWV9UUlVFSEQsCi0gICAgQVVESU9fRk9STUFUX0VfQUMzX0pPQywKLX07Ci0vLyBBcnJheSBvZiBhbGwgQUFDIGZvcm1hdHMuIFdoZW4gQUFDIGlzIGVuYWJsZWQgYnkgdXNlcnMsIGFsbCBBQUMgZm9ybWF0cyBzaG91bGQgYmUgZW5hYmxlZC4KLXN0YXRpYyBjb25zdCBhdWRpb19mb3JtYXRfdCBBQUNfRk9STUFUU1tdID0gewotICAgIEFVRElPX0ZPUk1BVF9BQUNfTEMsCi0gICAgQVVESU9fRk9STUFUX0FBQ19IRV9WMSwKLSAgICBBVURJT19GT1JNQVRfQUFDX0hFX1YyLAotICAgIEFVRElPX0ZPUk1BVF9BQUNfRUxELAotICAgIEFVRElPX0ZPUk1BVF9BQUNfWEhFLAotfTsKKy8vIENvbXByZXNzZWQgZm9ybWF0cyBmb3IgTVNEIG1vZHVsZSwgb3JkZXJlZCBmcm9tIG1vc3QgcHJlZmVycmVkIHRvIGxlYXN0IHByZWZlcnJlZC4KK3N0YXRpYyBjb25zdCBzdGQ6OnZlY3RvcjxhdWRpb19mb3JtYXRfdD4gY29tcHJlc3NlZEZvcm1hdHNPcmRlciA9IHt7CisgICAgICAgIEFVRElPX0ZPUk1BVF9NQVRfMl8xLCBBVURJT19GT1JNQVRfTUFUXzJfMCwgQVVESU9fRk9STUFUX0VfQUMzLAorICAgICAgICBBVURJT19GT1JNQVRfQUMzLCBBVURJT19GT1JNQVRfUENNXzE2X0JJVCB9fTsKKy8vIENoYW5uZWwgbWFza3MgZm9yIE1TRCBtb2R1bGUsIDNEID4gMkQgPiAxRCBvcmRlcmluZyAobW9zdCBwcmVmZXJyZWQgdG8gbGVhc3QgcHJlZmVycmVkKS4KK3N0YXRpYyBjb25zdCBzdGQ6OnZlY3RvcjxhdWRpb19jaGFubmVsX21hc2tfdD4gc3Vycm91bmRDaGFubmVsTWFza3NPcmRlciA9IHt7CisgICAgICAgIEFVRElPX0NIQU5ORUxfT1VUXzNQT0lOVDFQT0lOVDIsIEFVRElPX0NIQU5ORUxfT1VUXzNQT0lOVDBQT0lOVDIsCisgICAgICAgIEFVRElPX0NIQU5ORUxfT1VUXzJQT0lOVDFQT0lOVDIsIEFVRElPX0NIQU5ORUxfT1VUXzJQT0lOVDBQT0lOVDIsCisgICAgICAgIEFVRElPX0NIQU5ORUxfT1VUXzVQT0lOVDEsIEFVRElPX0NIQU5ORUxfT1VUX1NURVJFTyB9fTsKIAogLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogLy8gQXVkaW9Qb2xpY3lJbnRlcmZhY2UgaW1wbGVtZW50YXRpb24KQEAgLTIwNSwzMSArMTk3LDMwIEBACiAgICAgICAgICAgICByZXR1cm4gQkFEX1ZBTFVFOwogICAgICAgICB9CiAKLSAgICAgICAgLy8gY2hlY2tBMmRwU3VzcGVuZCBtdXN0IHJ1biBiZWZvcmUgY2hlY2tPdXRwdXRGb3JBbGxTdHJhdGVnaWVzIHNvIHRoYXQgQTJEUAotICAgICAgICAvLyBvdXRwdXQgaXMgc3VzcGVuZGVkIGJlZm9yZSBhbnkgdHJhY2tzIGFyZSBtb3ZlZCB0byBpdAotICAgICAgICBjaGVja0EyZHBTdXNwZW5kKCk7Ci0gICAgICAgIGNoZWNrT3V0cHV0Rm9yQWxsU3RyYXRlZ2llcygpOwotICAgICAgICAvLyBvdXRwdXRzIG11c3QgYmUgY2xvc2VkIGFmdGVyIGNoZWNrT3V0cHV0Rm9yQWxsU3RyYXRlZ2llcygpIGlzIGV4ZWN1dGVkCi0gICAgICAgIGlmICghb3V0cHV0cy5pc0VtcHR5KCkpIHsKLSAgICAgICAgICAgIGZvciAoYXVkaW9faW9faGFuZGxlX3Qgb3V0cHV0IDogb3V0cHV0cykgewotICAgICAgICAgICAgICAgIHNwPFN3QXVkaW9PdXRwdXREZXNjcmlwdG9yPiBkZXNjID0gbU91dHB1dHMudmFsdWVGb3Iob3V0cHV0KTsKLSAgICAgICAgICAgICAgICAvLyBjbG9zZSB1bnVzZWQgb3V0cHV0cyBhZnRlciBkZXZpY2UgZGlzY29ubmVjdGlvbiBvciBkaXJlY3Qgb3V0cHV0cyB0aGF0IGhhdmUgYmVlbgotICAgICAgICAgICAgICAgIC8vIG9wZW5lZCBieSBjaGVja091dHB1dHNGb3JEZXZpY2UoKSB0byBxdWVyeSBkeW5hbWljIHBhcmFtZXRlcnMKLSAgICAgICAgICAgICAgICBpZiAoKHN0YXRlID09IEFVRElPX1BPTElDWV9ERVZJQ0VfU1RBVEVfVU5BVkFJTEFCTEUpIHx8Ci0gICAgICAgICAgICAgICAgICAgICAgICAoKChkZXNjLT5tRmxhZ3MgJiBBVURJT19PVVRQVVRfRkxBR19ESVJFQ1QpICE9IDApICYmCi0gICAgICAgICAgICAgICAgICAgICAgICAgKGRlc2MtPm1EaXJlY3RPcGVuQ291bnQgPT0gMCkpKSB7Ci0gICAgICAgICAgICAgICAgICAgIGNsb3NlT3V0cHV0KG91dHB1dCk7CisgICAgICAgIGNoZWNrRm9yRGV2aWNlQW5kT3V0cHV0Q2hhbmdlcyhbJl0oKSB7CisgICAgICAgICAgICAvLyBvdXRwdXRzIG11c3QgYmUgY2xvc2VkIGFmdGVyIGNoZWNrT3V0cHV0Rm9yQWxsU3RyYXRlZ2llcygpIGlzIGV4ZWN1dGVkCisgICAgICAgICAgICBpZiAoIW91dHB1dHMuaXNFbXB0eSgpKSB7CisgICAgICAgICAgICAgICAgZm9yIChhdWRpb19pb19oYW5kbGVfdCBvdXRwdXQgOiBvdXRwdXRzKSB7CisgICAgICAgICAgICAgICAgICAgIHNwPFN3QXVkaW9PdXRwdXREZXNjcmlwdG9yPiBkZXNjID0gbU91dHB1dHMudmFsdWVGb3Iob3V0cHV0KTsKKyAgICAgICAgICAgICAgICAgICAgLy8gY2xvc2UgdW51c2VkIG91dHB1dHMgYWZ0ZXIgZGV2aWNlIGRpc2Nvbm5lY3Rpb24gb3IgZGlyZWN0IG91dHB1dHMgdGhhdCBoYXZlIGJlZW4KKyAgICAgICAgICAgICAgICAgICAgLy8gb3BlbmVkIGJ5IGNoZWNrT3V0cHV0c0ZvckRldmljZSgpIHRvIHF1ZXJ5IGR5bmFtaWMgcGFyYW1ldGVycworICAgICAgICAgICAgICAgICAgICBpZiAoKHN0YXRlID09IEFVRElPX1BPTElDWV9ERVZJQ0VfU1RBVEVfVU5BVkFJTEFCTEUpIHx8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoZGVzYy0+bUZsYWdzICYgQVVESU9fT1VUUFVUX0ZMQUdfRElSRUNUKSAhPSAwKSAmJgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoZGVzYy0+bURpcmVjdE9wZW5Db3VudCA9PSAwKSkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGNsb3NlT3V0cHV0KG91dHB1dCk7CisgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgLy8gY2hlY2sgQTJEUCBhZ2FpbiBhZnRlciBjbG9zaW5nIEEyRFAgb3V0cHV0IHRvIHJlc2V0IG1BMmRwU3VzcGVuZGVkIGlmIG5lZWRlZAorICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgLy8gY2hlY2sgYWdhaW4gYWZ0ZXIgY2xvc2luZyBBMkRQIG91dHB1dCB0byByZXNldCBtQTJkcFN1c3BlbmRlZCBpZiBuZWVkZWQKLSAgICAgICAgICAgIGNoZWNrQTJkcFN1c3BlbmQoKTsKLSAgICAgICAgfQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9KTsKIAotICAgICAgICB1cGRhdGVEZXZpY2VzQW5kT3V0cHV0cygpOwogICAgICAgICBpZiAobUVuZ2luZS0+Z2V0UGhvbmVTdGF0ZSgpID09IEFVRElPX01PREVfSU5fQ0FMTCAmJiBoYXNQcmltYXJ5T3V0cHV0KCkpIHsKICAgICAgICAgICAgIGF1ZGlvX2RldmljZXNfdCBuZXdEZXZpY2UgPSBnZXROZXdPdXRwdXREZXZpY2UobVByaW1hcnlPdXRwdXQsIGZhbHNlIC8qZnJvbUNhY2hlKi8pOwogICAgICAgICAgICAgdXBkYXRlQ2FsbFJvdXRpbmcobmV3RGV2aWNlKTsKICAgICAgICAgfQorICAgICAgICBjb25zdCBhdWRpb19kZXZpY2VzX3QgbXNkT3V0RGV2aWNlID0gZ2V0TXNkQXVkaW9PdXREZXZpY2VUeXBlcygpOwogICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1PdXRwdXRzLnNpemUoKTsgaSsrKSB7CiAgICAgICAgICAgICBzcDxTd0F1ZGlvT3V0cHV0RGVzY3JpcHRvcj4gZGVzYyA9IG1PdXRwdXRzLnZhbHVlQXQoaSk7CiAgICAgICAgICAgICBpZiAoKG1FbmdpbmUtPmdldFBob25lU3RhdGUoKSAhPSBBVURJT19NT0RFX0lOX0NBTEwpIHx8IChkZXNjICE9IG1QcmltYXJ5T3V0cHV0KSkgewpAQCAtMjM3LDcgKzIyOCw4IEBACiAgICAgICAgICAgICAgICAgLy8gZG8gbm90IGZvcmNlIGRldmljZSBjaGFuZ2Ugb24gZHVwbGljYXRlZCBvdXRwdXQgYmVjYXVzZSBpZiBkZXZpY2UgaXMgMCwgaXQgd2lsbAogICAgICAgICAgICAgICAgIC8vIGFsc28gZm9yY2UgYSBkZXZpY2UgMCBmb3IgdGhlIHR3byBvdXRwdXRzIGl0IGlzIGR1cGxpY2F0ZWQgdG8gd2hpY2ggbWF5IG92ZXJyaWRlCiAgICAgICAgICAgICAgICAgLy8gYSB2YWxpZCBkZXZpY2Ugc2VsZWN0aW9uIG9uIHRob3NlIG91dHB1dHMuCi0gICAgICAgICAgICAgICAgYm9vbCBmb3JjZSA9ICFkZXNjLT5pc0R1cGxpY2F0ZWQoKQorICAgICAgICAgICAgICAgIGJvb2wgZm9yY2UgPSAobXNkT3V0RGV2aWNlID09IEFVRElPX0RFVklDRV9OT05FIHx8IG1zZE91dERldmljZSAhPSBkZXNjLT5kZXZpY2UoKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICYmICFkZXNjLT5pc0R1cGxpY2F0ZWQoKQogICAgICAgICAgICAgICAgICAgICAgICAgJiYgKCFkZXZpY2VfZGlzdGluZ3Vpc2hlc19vbl9hZGRyZXNzKGRldmljZSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gYWx3YXlzIGZvcmNlIHdoZW4gZGlzY29ubmVjdGluZyAoYSBub24tZHVwbGljYXRlZCBkZXZpY2UpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHx8IChzdGF0ZSA9PSBBVURJT19QT0xJQ1lfREVWSUNFX1NUQVRFX1VOQVZBSUxBQkxFKSk7CkBAIC00ODEsMjAgKzQ3MywxNSBAQAogCiBzcDxBdWRpb1BhdGNoPiBBdWRpb1BvbGljeU1hbmFnZXI6OmNyZWF0ZVRlbGVwaG9ueVBhdGNoKAogICAgICAgICBib29sIGlzUngsIGF1ZGlvX2RldmljZXNfdCBkZXZpY2UsIHVpbnQzMl90IGRlbGF5TXMpIHsKLSAgICBzdHJ1Y3QgYXVkaW9fcGF0Y2ggcGF0Y2g7Ci0gICAgcGF0Y2gubnVtX3NvdXJjZXMgPSAxOwotICAgIHBhdGNoLm51bV9zaW5rcyA9IDE7CisgICAgUGF0Y2hCdWlsZGVyIHBhdGNoQnVpbGRlcjsKIAogICAgIHNwPERldmljZURlc2NyaXB0b3I+IHR4U291cmNlRGV2aWNlRGVzYzsKICAgICBpZiAoaXNSeCkgewotICAgICAgICBmaWxsQXVkaW9Qb3J0Q29uZmlnRm9yRGV2aWNlKG1BdmFpbGFibGVPdXRwdXREZXZpY2VzLCBkZXZpY2UsICZwYXRjaC5zaW5rc1swXSk7Ci0gICAgICAgIGZpbGxBdWRpb1BvcnRDb25maWdGb3JEZXZpY2UoCi0gICAgICAgICAgICAgICAgbUF2YWlsYWJsZUlucHV0RGV2aWNlcywgQVVESU9fREVWSUNFX0lOX1RFTEVQSE9OWV9SWCwgJnBhdGNoLnNvdXJjZXNbMF0pOworICAgICAgICBwYXRjaEJ1aWxkZXIuYWRkU2luayhmaW5kRGV2aWNlKG1BdmFpbGFibGVPdXRwdXREZXZpY2VzLCBkZXZpY2UpKS4KKyAgICAgICAgICAgICAgICBhZGRTb3VyY2UoZmluZERldmljZShtQXZhaWxhYmxlSW5wdXREZXZpY2VzLCBBVURJT19ERVZJQ0VfSU5fVEVMRVBIT05ZX1JYKSk7CiAgICAgfSBlbHNlIHsKLSAgICAgICAgdHhTb3VyY2VEZXZpY2VEZXNjID0gZmlsbEF1ZGlvUG9ydENvbmZpZ0ZvckRldmljZSgKLSAgICAgICAgICAgICAgICBtQXZhaWxhYmxlSW5wdXREZXZpY2VzLCBkZXZpY2UsICZwYXRjaC5zb3VyY2VzWzBdKTsKLSAgICAgICAgZmlsbEF1ZGlvUG9ydENvbmZpZ0ZvckRldmljZSgKLSAgICAgICAgICAgICAgICBtQXZhaWxhYmxlT3V0cHV0RGV2aWNlcywgQVVESU9fREVWSUNFX09VVF9URUxFUEhPTllfVFgsICZwYXRjaC5zaW5rc1swXSk7CisgICAgICAgIHBhdGNoQnVpbGRlci5hZGRTb3VyY2UodHhTb3VyY2VEZXZpY2VEZXNjID0gZmluZERldmljZShtQXZhaWxhYmxlSW5wdXREZXZpY2VzLCBkZXZpY2UpKS4KKyAgICAgICAgICAgICAgICBhZGRTaW5rKGZpbmREZXZpY2UobUF2YWlsYWJsZU91dHB1dERldmljZXMsIEFVRElPX0RFVklDRV9PVVRfVEVMRVBIT05ZX1RYKSk7CiAgICAgfQogCiAgICAgYXVkaW9fZGV2aWNlc190IG91dHB1dERldmljZSA9IGlzUnggPyBkZXZpY2UgOiBBVURJT19ERVZJQ0VfT1VUX1RFTEVQSE9OWV9UWDsKQEAgLTUwNSw5ICs0OTIsNyBAQAogICAgICAgICBzcDxBdWRpb091dHB1dERlc2NyaXB0b3I+IG91dHB1dERlc2MgPSBtT3V0cHV0cy52YWx1ZUZvcihvdXRwdXQpOwogICAgICAgICBBTE9HX0FTU0VSVCghb3V0cHV0RGVzYy0+aXNEdXBsaWNhdGVkKCksCiAgICAgICAgICAgICAgICAgIiVzKCkgJSN4IGRldmljZSBvdXRwdXQgJWQgaXMgZHVwbGljYXRlZCIsIF9fZnVuY19fLCBvdXRwdXREZXZpY2UsIG91dHB1dCk7Ci0gICAgICAgIG91dHB1dERlc2MtPnRvQXVkaW9Qb3J0Q29uZmlnKCZwYXRjaC5zb3VyY2VzWzFdKTsKLSAgICAgICAgcGF0Y2guc291cmNlc1sxXS5leHQubWl4LnVzZWNhc2Uuc3RyZWFtID0gQVVESU9fU1RSRUFNX1BBVENIOwotICAgICAgICBwYXRjaC5udW1fc291cmNlcyA9IDI7CisgICAgICAgIHBhdGNoQnVpbGRlci5hZGRTb3VyY2Uob3V0cHV0RGVzYywgeyAuc3RyZWFtID0gQVVESU9fU1RSRUFNX1BBVENIIH0pOwogICAgIH0KIAogICAgIGlmICghaXNSeCkgewpAQCAtNTE3LDM4ICs1MDIsMzEgQEAKICAgICAgICAgLy8gc3ltbWV0cmljIHRvIHRoZSBvbmUgaW4gc3RhcnRJbnB1dCgpCiAgICAgICAgIGZvciAoY29uc3QgYXV0byYgYWN0aXZlRGVzYyA6IG1JbnB1dHMuZ2V0QWN0aXZlSW5wdXRzKCkpIHsKICAgICAgICAgICAgIGlmIChhY3RpdmVEZXNjLT5oYXNTYW1lSHdNb2R1bGVBcyh0eFNvdXJjZURldmljZURlc2MpKSB7Ci0gICAgICAgICAgICAgICAgQXVkaW9TZXNzaW9uQ29sbGVjdGlvbiBhY3RpdmVTZXNzaW9ucyA9Ci0gICAgICAgICAgICAgICAgICAgICAgICBhY3RpdmVEZXNjLT5nZXRBdWRpb1Nlc3Npb25zKHRydWUgLyphY3RpdmVPbmx5Ki8pOwotICAgICAgICAgICAgICAgIGZvciAoc2l6ZV90IGogPSAwOyBqIDwgYWN0aXZlU2Vzc2lvbnMuc2l6ZSgpOyBqKyspIHsKLSAgICAgICAgICAgICAgICAgICAgYXVkaW9fc2Vzc2lvbl90IGFjdGl2ZVNlc3Npb24gPSBhY3RpdmVTZXNzaW9ucy5rZXlBdChqKTsKLSAgICAgICAgICAgICAgICAgICAgc3RvcElucHV0KGFjdGl2ZURlc2MtPm1Jb0hhbmRsZSwgYWN0aXZlU2Vzc2lvbik7Ci0gICAgICAgICAgICAgICAgICAgIHJlbGVhc2VJbnB1dChhY3RpdmVEZXNjLT5tSW9IYW5kbGUsIGFjdGl2ZVNlc3Npb24pOwotICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBjbG9zZUFjdGl2ZUNsaWVudHMoYWN0aXZlRGVzYyk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICB9CiAKICAgICBhdWRpb19wYXRjaF9oYW5kbGVfdCBhZlBhdGNoSGFuZGxlID0gQVVESU9fUEFUQ0hfSEFORExFX05PTkU7Ci0gICAgc3RhdHVzX3Qgc3RhdHVzID0gbXBDbGllbnRJbnRlcmZhY2UtPmNyZWF0ZUF1ZGlvUGF0Y2goJnBhdGNoLCAmYWZQYXRjaEhhbmRsZSwgZGVsYXlNcyk7CisgICAgc3RhdHVzX3Qgc3RhdHVzID0gbXBDbGllbnRJbnRlcmZhY2UtPmNyZWF0ZUF1ZGlvUGF0Y2goCisgICAgICAgICAgICBwYXRjaEJ1aWxkZXIucGF0Y2goKSwgJmFmUGF0Y2hIYW5kbGUsIGRlbGF5TXMpOwogICAgIEFMT0dXX0lGKHN0YXR1cyAhPSBOT19FUlJPUiwKICAgICAgICAgICAgICIlcygpIGVycm9yICVkIGNyZWF0aW5nICVzIGF1ZGlvIHBhdGNoIiwgX19mdW5jX18sIHN0YXR1cywgaXNSeCA/ICJSWCIgOiAiVFgiKTsKICAgICBzcDxBdWRpb1BhdGNoPiBhdWRpb1BhdGNoOwogICAgIGlmIChzdGF0dXMgPT0gTk9fRVJST1IpIHsKLSAgICAgICAgYXVkaW9QYXRjaCA9IG5ldyBBdWRpb1BhdGNoKCZwYXRjaCwgbVVpZENhY2hlZCk7CisgICAgICAgIGF1ZGlvUGF0Y2ggPSBuZXcgQXVkaW9QYXRjaChwYXRjaEJ1aWxkZXIucGF0Y2goKSwgbVVpZENhY2hlZCk7CiAgICAgICAgIGF1ZGlvUGF0Y2gtPm1BZlBhdGNoSGFuZGxlID0gYWZQYXRjaEhhbmRsZTsKICAgICAgICAgYXVkaW9QYXRjaC0+bVVpZCA9IG1VaWRDYWNoZWQ7CiAgICAgfQogICAgIHJldHVybiBhdWRpb1BhdGNoOwogfQogCi1zcDxEZXZpY2VEZXNjcmlwdG9yPiBBdWRpb1BvbGljeU1hbmFnZXI6OmZpbGxBdWRpb1BvcnRDb25maWdGb3JEZXZpY2UoCi0gICAgICAgIGNvbnN0IERldmljZVZlY3RvciYgZGV2aWNlcywgYXVkaW9fZGV2aWNlc190IGRldmljZSwgYXVkaW9fcG9ydF9jb25maWcgKmNvbmZpZykgewotICAgIERldmljZVZlY3RvciBkZXZpY2VMaXN0ID0gZGV2aWNlcy5nZXREZXZpY2VzRnJvbVR5cGUoZGV2aWNlKTsKK3NwPERldmljZURlc2NyaXB0b3I+IEF1ZGlvUG9saWN5TWFuYWdlcjo6ZmluZERldmljZSgKKyAgICAgICAgY29uc3QgRGV2aWNlVmVjdG9yJiBkZXZpY2VzLCBhdWRpb19kZXZpY2VzX3QgZGV2aWNlKSBjb25zdCB7CisgICAgRGV2aWNlVmVjdG9yIGRldmljZUxpc3QgPSBkZXZpY2VzLmdldERldmljZXNGcm9tVHlwZU1hc2soZGV2aWNlKTsKICAgICBBTE9HX0FTU0VSVCghZGV2aWNlTGlzdC5pc0VtcHR5KCksCiAgICAgICAgICAgICAiJXMoKSBzZWxlY3RlZCBkZXZpY2UgdHlwZSAlI3ggaXMgbm90IGluIGRldmljZXMgbGlzdCIsIF9fZnVuY19fLCBkZXZpY2UpOwotICAgIHNwPERldmljZURlc2NyaXB0b3I+IGRldmljZURlc2MgPSBkZXZpY2VMaXN0Lml0ZW1BdCgwKTsKLSAgICBkZXZpY2VEZXNjLT50b0F1ZGlvUG9ydENvbmZpZyhjb25maWcpOwotICAgIHJldHVybiBkZXZpY2VEZXNjOworICAgIHJldHVybiBkZXZpY2VMaXN0Lml0ZW1BdCgwKTsKIH0KIAogdm9pZCBBdWRpb1BvbGljeU1hbmFnZXI6OnNldFBob25lU3RhdGUoYXVkaW9fbW9kZV90IHN0YXRlKQpAQCAtNTYyLDE0ICs1NDAsOCBAQAogICAgICAgICByZXR1cm47CiAgICAgfQogICAgIC8vLyBPcGVuczogY2FuIHRoZXNlIGxpbmUgYmUgZXhlY3V0ZWQgYWZ0ZXIgdGhlIHN3aXRjaCBvZiB2b2x1bWUgY3VydmVzPz8/Ci0gICAgLy8gaWYgbGVhdmluZyBjYWxsIHN0YXRlLCBoYW5kbGUgc3BlY2lhbCBjYXNlIG9mIGFjdGl2ZSBzdHJlYW1zCi0gICAgLy8gcGVydGFpbmluZyB0byBzb25pZmljYXRpb24gc3RyYXRlZ3kgc2VlIGhhbmRsZUluY2FsbFNvbmlmaWNhdGlvbigpCiAgICAgaWYgKGlzU3RhdGVJbkNhbGwob2xkU3RhdGUpKSB7CiAgICAgICAgIEFMT0dWKCJzZXRQaG9uZVN0YXRlKCkgaW4gY2FsbCBzdGF0ZSBtYW5hZ2VtZW50OiBuZXcgc3RhdGUgaXMgJWQiLCBzdGF0ZSk7Ci0gICAgICAgIGZvciAoaW50IHN0cmVhbSA9IDA7IHN0cmVhbSA8IEFVRElPX1NUUkVBTV9GT1JfUE9MSUNZX0NOVDsgc3RyZWFtKyspIHsKLSAgICAgICAgICAgIGhhbmRsZUluY2FsbFNvbmlmaWNhdGlvbigoYXVkaW9fc3RyZWFtX3R5cGVfdClzdHJlYW0sIGZhbHNlLCB0cnVlKTsKLSAgICAgICAgfQotCiAgICAgICAgIC8vIGZvcmNlIHJlZXZhbHVhdGluZyBhY2Nlc3NpYmlsaXR5IHJvdXRpbmcgd2hlbiBjYWxsIHN0b3BzCiAgICAgICAgIG1wQ2xpZW50SW50ZXJmYWNlLT5pbnZhbGlkYXRlU3RyZWFtKEFVRElPX1NUUkVBTV9BQ0NFU1NJQklMSVRZKTsKICAgICB9CkBAIC01ODIsOSArNTU0LDcgQEAKICAgICAgICAgICAgICAgICAgIHx8IChpc19zdGF0ZV9pbl9jYWxsKHN0YXRlKSAmJiAoc3RhdGUgIT0gb2xkU3RhdGUpKSk7CiAKICAgICAvLyBjaGVjayBmb3IgZGV2aWNlIGFuZCBvdXRwdXQgY2hhbmdlcyB0cmlnZ2VyZWQgYnkgbmV3IHBob25lIHN0YXRlCi0gICAgY2hlY2tBMmRwU3VzcGVuZCgpOwotICAgIGNoZWNrT3V0cHV0Rm9yQWxsU3RyYXRlZ2llcygpOwotICAgIHVwZGF0ZURldmljZXNBbmRPdXRwdXRzKCk7CisgICAgY2hlY2tGb3JEZXZpY2VBbmRPdXRwdXRDaGFuZ2VzKCk7CiAKICAgICBpbnQgZGVsYXlNcyA9IDA7CiAgICAgaWYgKGlzU3RhdGVJbkNhbGwoc3RhdGUpKSB7CkBAIC02NDgsMTQgKzYxOCw4IEBACiAgICAgICAgIH0KICAgICB9CiAKLSAgICAvLyBpZiBlbnRlcmluZyBpbiBjYWxsIHN0YXRlLCBoYW5kbGUgc3BlY2lhbCBjYXNlIG9mIGFjdGl2ZSBzdHJlYW1zCi0gICAgLy8gcGVydGFpbmluZyB0byBzb25pZmljYXRpb24gc3RyYXRlZ3kgc2VlIGhhbmRsZUluY2FsbFNvbmlmaWNhdGlvbigpCiAgICAgaWYgKGlzU3RhdGVJbkNhbGwoc3RhdGUpKSB7CiAgICAgICAgIEFMT0dWKCJzZXRQaG9uZVN0YXRlKCkgaW4gY2FsbCBzdGF0ZSBtYW5hZ2VtZW50OiBuZXcgc3RhdGUgaXMgJWQiLCBzdGF0ZSk7Ci0gICAgICAgIGZvciAoaW50IHN0cmVhbSA9IDA7IHN0cmVhbSA8IEFVRElPX1NUUkVBTV9GT1JfUE9MSUNZX0NOVDsgc3RyZWFtKyspIHsKLSAgICAgICAgICAgIGhhbmRsZUluY2FsbFNvbmlmaWNhdGlvbigoYXVkaW9fc3RyZWFtX3R5cGVfdClzdHJlYW0sIHRydWUsIHRydWUpOwotICAgICAgICB9Ci0KICAgICAgICAgLy8gZm9yY2UgcmVldmFsdWF0aW5nIGFjY2Vzc2liaWxpdHkgcm91dGluZyB3aGVuIGNhbGwgc3RhcnRzCiAgICAgICAgIG1wQ2xpZW50SW50ZXJmYWNlLT5pbnZhbGlkYXRlU3RyZWFtKEFVRElPX1NUUkVBTV9BQ0NFU1NJQklMSVRZKTsKICAgICB9CkBAIC02OTAsOSArNjU0LDcgQEAKICAgICAgICAgICAgICh1c2FnZSA9PSBBVURJT19QT0xJQ1lfRk9SQ0VfRk9SX1NZU1RFTSk7CiAKICAgICAvLyBjaGVjayBmb3IgZGV2aWNlIGFuZCBvdXRwdXQgY2hhbmdlcyB0cmlnZ2VyZWQgYnkgbmV3IGZvcmNlIHVzYWdlCi0gICAgY2hlY2tBMmRwU3VzcGVuZCgpOwotICAgIGNoZWNrT3V0cHV0Rm9yQWxsU3RyYXRlZ2llcygpOwotICAgIHVwZGF0ZURldmljZXNBbmRPdXRwdXRzKCk7CisgICAgY2hlY2tGb3JEZXZpY2VBbmRPdXRwdXRDaGFuZ2VzKCk7CiAKICAgICAvL0ZJWE1FOiB3b3JrYXJvdW5kIGZvciB0cnVuY2F0ZWQgdG91Y2ggc291bmRzCiAgICAgLy8gdG8gYmUgcmVtb3ZlZCB3aGVuIHRoZSBwcm9ibGVtIGlzIGhhbmRsZWQgYnkgc3lzdGVtIFVJCkBAIC04MDgsNiArNzcwLDE3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXVkaW9fcG9ydF9oYW5kbGVfdCAqcG9ydElkKQogewogICAgIGF1ZGlvX2F0dHJpYnV0ZXNfdCBhdHRyaWJ1dGVzOworICAgIERldmljZVZlY3RvciBvdXRwdXREZXZpY2VzOworICAgIHJvdXRpbmdfc3RyYXRlZ3kgc3RyYXRlZ3k7CisgICAgYXVkaW9fZGV2aWNlc190IGRldmljZTsKKyAgICBjb25zdCBhdWRpb19wb3J0X2hhbmRsZV90IHJlcXVlc3RlZERldmljZUlkID0gKnNlbGVjdGVkRGV2aWNlSWQ7CisgICAgYXVkaW9fZGV2aWNlc190IG1zZERldmljZSA9IGdldE1zZEF1ZGlvT3V0RGV2aWNlVHlwZXMoKTsKKworICAgIC8vIFRoZSBzdXBwbGllZCBwb3J0SWQgbXVzdCBiZSBBVURJT19QT1JUX0hBTkRMRV9OT05FCisgICAgaWYgKCpwb3J0SWQgIT0gQVVESU9fUE9SVF9IQU5ETEVfTk9ORSkgeworICAgICAgICByZXR1cm4gSU5WQUxJRF9PUEVSQVRJT047CisgICAgfQorCiAgICAgaWYgKGF0dHIgIT0gTlVMTCkgewogICAgICAgICBpZiAoIWlzVmFsaWRBdHRyaWJ1dGVzKGF0dHIpKSB7CiAgICAgICAgICAgICBBTE9HRSgiZ2V0T3V0cHV0Rm9yQXR0cigpIGludmFsaWQgYXR0cmlidXRlczogdXNhZ2U9JWQgY29udGVudD0lZCBmbGFncz0weCV4IHRhZ3M9WyVzXSIsCkBAIC04MjQsNDMgKzc5Nyw0NSBAQAogICAgICAgICBzdHJlYW1fdHlwZV90b19hdWRpb19hdHRyaWJ1dGVzKCpzdHJlYW0sICZhdHRyaWJ1dGVzKTsKICAgICB9CiAKLSAgICAvLyBUT0RPOiBjaGVjayBmb3IgZXhpc3RpbmcgY2xpZW50IGZvciB0aGlzIHBvcnQgSUQKLSAgICBpZiAoKnBvcnRJZCA9PSBBVURJT19QT1JUX0hBTkRMRV9OT05FKSB7Ci0gICAgICAgICpwb3J0SWQgPSBBdWRpb1BvcnQ6OmdldE5leHRVbmlxdWVJZCgpOwotICAgIH0KLQotICAgIHNwPFN3QXVkaW9PdXRwdXREZXNjcmlwdG9yPiBkZXNjOwotICAgIGlmIChtUG9saWN5TWl4ZXMuZ2V0T3V0cHV0Rm9yQXR0cihhdHRyaWJ1dGVzLCB1aWQsIGRlc2MpID09IE5PX0VSUk9SKSB7Ci0gICAgICAgIEFMT0dfQVNTRVJUKGRlc2MgIT0gMCwgIkludmFsaWQgZGVzYyByZXR1cm5lZCBieSBnZXRPdXRwdXRGb3JBdHRyIik7Ci0gICAgICAgIGlmICghYXVkaW9faGFzX3Byb3BvcnRpb25hbF9mcmFtZXMoY29uZmlnLT5mb3JtYXQpKSB7Ci0gICAgICAgICAgICByZXR1cm4gQkFEX1ZBTFVFOwotICAgICAgICB9Ci0gICAgICAgICpzdHJlYW0gPSBzdHJlYW1UeXBlZnJvbUF0dHJpYnV0ZXNJbnQoJmF0dHJpYnV0ZXMpOwotICAgICAgICAqb3V0cHV0ID0gZGVzYy0+bUlvSGFuZGxlOwotICAgICAgICBBTE9HVigiZ2V0T3V0cHV0Rm9yQXR0cigpIHJldHVybnMgb3V0cHV0ICVkIiwgKm91dHB1dCk7Ci0gICAgICAgIHJldHVybiBOT19FUlJPUjsKLSAgICB9Ci0gICAgaWYgKGF0dHJpYnV0ZXMudXNhZ2UgPT0gQVVESU9fVVNBR0VfVklSVFVBTF9TT1VSQ0UpIHsKLSAgICAgICAgQUxPR1coImdldE91dHB1dEZvckF0dHIoKSBubyBwb2xpY3kgbWl4IGZvdW5kIGZvciB1c2FnZSBBVURJT19VU0FHRV9WSVJUVUFMX1NPVVJDRSIpOwotICAgICAgICByZXR1cm4gQkFEX1ZBTFVFOwotICAgIH0KLQogICAgIEFMT0dWKCJnZXRPdXRwdXRGb3JBdHRyKCkgdXNhZ2U9JWQsIGNvbnRlbnQ9JWQsIHRhZz0lcyBmbGFncz0lMDh4IgotICAgICAgICAgICAgIiBzZXNzaW9uICVkIHNlbGVjdGVkRGV2aWNlSWQgJWQiLAotICAgICAgICAgICAgYXR0cmlidXRlcy51c2FnZSwgYXR0cmlidXRlcy5jb250ZW50X3R5cGUsIGF0dHJpYnV0ZXMudGFncywgYXR0cmlidXRlcy5mbGFncywKLSAgICAgICAgICAgIHNlc3Npb24sICpzZWxlY3RlZERldmljZUlkKTsKKyAgICAgICAgICAiIHNlc3Npb24gJWQgc2VsZWN0ZWREZXZpY2VJZCAlZCIsCisgICAgICAgICAgYXR0cmlidXRlcy51c2FnZSwgYXR0cmlidXRlcy5jb250ZW50X3R5cGUsIGF0dHJpYnV0ZXMudGFncywgYXR0cmlidXRlcy5mbGFncywKKyAgICAgICAgICBzZXNzaW9uLCByZXF1ZXN0ZWREZXZpY2VJZCk7CiAKICAgICAqc3RyZWFtID0gc3RyZWFtVHlwZWZyb21BdHRyaWJ1dGVzSW50KCZhdHRyaWJ1dGVzKTsKIAotICAgIC8vIEV4cGxpY2l0IHJvdXRpbmc/Ci0gICAgc3A8RGV2aWNlRGVzY3JpcHRvcj4gZGV2aWNlRGVzYzsKLSAgICBpZiAoKnNlbGVjdGVkRGV2aWNlSWQgIT0gQVVESU9fUE9SVF9IQU5ETEVfTk9ORSkgewotICAgICAgICBkZXZpY2VEZXNjID0gbUF2YWlsYWJsZU91dHB1dERldmljZXMuZ2V0RGV2aWNlRnJvbUlkKCpzZWxlY3RlZERldmljZUlkKTsKLSAgICB9Ci0gICAgbU91dHB1dFJvdXRlcy5hZGRSb3V0ZShzZXNzaW9uLCAqc3RyZWFtLCBTZXNzaW9uUm91dGU6OlNPVVJDRV9UWVBFX05BLCBkZXZpY2VEZXNjLCB1aWQpOworICAgIHN0cmF0ZWd5ID0gZ2V0U3RyYXRlZ3lGb3JBdHRyKCZhdHRyaWJ1dGVzKTsKIAotICAgIHJvdXRpbmdfc3RyYXRlZ3kgc3RyYXRlZ3kgPSAocm91dGluZ19zdHJhdGVneSkgZ2V0U3RyYXRlZ3lGb3JBdHRyKCZhdHRyaWJ1dGVzKTsKLSAgICBhdWRpb19kZXZpY2VzX3QgZGV2aWNlID0gZ2V0RGV2aWNlRm9yU3RyYXRlZ3koc3RyYXRlZ3ksIGZhbHNlIC8qZnJvbUNhY2hlKi8pOworICAgIC8vIEZpcnN0IGNoZWNrIGZvciBleHBsaWNpdCByb3V0aW5nIChlZy4gc2V0UHJlZmVycmVkRGV2aWNlKQorICAgIGlmIChyZXF1ZXN0ZWREZXZpY2VJZCAhPSBBVURJT19QT1JUX0hBTkRMRV9OT05FKSB7CisgICAgICAgIHNwPERldmljZURlc2NyaXB0b3I+IGRldmljZURlc2MgPQorICAgICAgICAgICAgbUF2YWlsYWJsZU91dHB1dERldmljZXMuZ2V0RGV2aWNlRnJvbUlkKHJlcXVlc3RlZERldmljZUlkKTsKKyAgICAgICAgZGV2aWNlID0gZGV2aWNlRGVzYy0+dHlwZSgpOworICAgIH0gZWxzZSB7CisgICAgICAgIC8vIElmIG5vIGV4cGxpY3Qgcm91dGUsIGlzIHRoZXJlIGEgbWF0Y2hpbmcgZHluYW1pYyBwb2xpY3kgdGhhdCBhcHBsaWVzPworICAgICAgICBzcDxTd0F1ZGlvT3V0cHV0RGVzY3JpcHRvcj4gZGVzYzsKKyAgICAgICAgaWYgKG1Qb2xpY3lNaXhlcy5nZXRPdXRwdXRGb3JBdHRyKGF0dHJpYnV0ZXMsIHVpZCwgZGVzYykgPT0gTk9fRVJST1IpIHsKKyAgICAgICAgICAgIEFMT0dfQVNTRVJUKGRlc2MgIT0gMCwgIkludmFsaWQgZGVzYyByZXR1cm5lZCBieSBnZXRPdXRwdXRGb3JBdHRyIik7CisgICAgICAgICAgICBpZiAoIWF1ZGlvX2hhc19wcm9wb3J0aW9uYWxfZnJhbWVzKGNvbmZpZy0+Zm9ybWF0KSkgeworICAgICAgICAgICAgICAgIHJldHVybiBCQURfVkFMVUU7CisgICAgICAgICAgICB9CisgICAgICAgICAgICAqc3RyZWFtID0gc3RyZWFtVHlwZWZyb21BdHRyaWJ1dGVzSW50KCZhdHRyaWJ1dGVzKTsKKyAgICAgICAgICAgICpvdXRwdXQgPSBkZXNjLT5tSW9IYW5kbGU7CisgICAgICAgICAgICBBdWRpb01peCAqbWl4ID0gZGVzYy0+bVBvbGljeU1peDsKKyAgICAgICAgICAgIHNwPERldmljZURlc2NyaXB0b3I+IGRldmljZURlc2MgPQorICAgICAgICAgICAgICAgIG1BdmFpbGFibGVPdXRwdXREZXZpY2VzLmdldERldmljZShtaXgtPm1EZXZpY2VUeXBlLCBtaXgtPm1EZXZpY2VBZGRyZXNzKTsKKyAgICAgICAgICAgICpzZWxlY3RlZERldmljZUlkID0gZGV2aWNlRGVzYyAhPSAwID8gZGV2aWNlRGVzYy0+Z2V0SWQoKSA6IEFVRElPX1BPUlRfSEFORExFX05PTkU7CisgICAgICAgICAgICBBTE9HVigiZ2V0T3V0cHV0Rm9yQXR0cigpIHJldHVybnMgb3V0cHV0ICVkIiwgKm91dHB1dCk7CisgICAgICAgICAgICBnb3RvIGV4aXQ7CisgICAgICAgIH0KKworICAgICAgICAvLyBWaXJ0dWFsIHNvdXJjZXMgbXVzdCBhbHdheXMgYmUgZHluYW1pY2FseSBvciBleHBsaWNpdGx5IHJvdXRlZAorICAgICAgICBpZiAoYXR0cmlidXRlcy51c2FnZSA9PSBBVURJT19VU0FHRV9WSVJUVUFMX1NPVVJDRSkgeworICAgICAgICAgICAgQUxPR1coImdldE91dHB1dEZvckF0dHIoKSBubyBwb2xpY3kgbWl4IGZvdW5kIGZvciB1c2FnZSBBVURJT19VU0FHRV9WSVJUVUFMX1NPVVJDRSIpOworICAgICAgICAgICAgcmV0dXJuIEJBRF9WQUxVRTsKKyAgICAgICAgfQorICAgICAgICBkZXZpY2UgPSBnZXREZXZpY2VGb3JTdHJhdGVneShzdHJhdGVneSwgZmFsc2UgLypmcm9tQ2FjaGUqLyk7CisgICAgfQogCiAgICAgaWYgKChhdHRyaWJ1dGVzLmZsYWdzICYgQVVESU9fRkxBR19IV19BVl9TWU5DKSAhPSAwKSB7CiAgICAgICAgICpmbGFncyA9IChhdWRpb19vdXRwdXRfZmxhZ3NfdCkoKmZsYWdzIHwgQVVESU9fT1VUUFVUX0ZMQUdfSFdfQVZfU1lOQyk7CkBAIC04NzQsOSArODQ5LDEwIEBACiAgICAgICAgICpzdHJlYW0gPT0gQVVESU9fU1RSRUFNX01VU0lDICYmCiAgICAgICAgIGF1ZGlvX2lzX2xpbmVhcl9wY20oY29uZmlnLT5mb3JtYXQpICYmCiAgICAgICAgIGlzSW5DYWxsKCkpIHsKLSAgICAgICAgaWYgKCpzZWxlY3RlZERldmljZUlkICE9IEFVRElPX1BPUlRfSEFORExFX05PTkUpIHsKKyAgICAgICAgaWYgKHJlcXVlc3RlZERldmljZUlkICE9IEFVRElPX1BPUlRfSEFORExFX05PTkUpIHsKICAgICAgICAgICAgICpmbGFncyA9IChhdWRpb19vdXRwdXRfZmxhZ3NfdClBVURJT19PVVRQVVRfRkxBR19JTkNBTExfTVVTSUM7CiAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAvLyBHZXQgdGhlIGRldmNlIHR5cGUgZGlyZWN0bHkgZnJvbSB0aGUgZW5naW5lIHRvIGJ5cGFzcyBwcmVmZXJyZWQgcm91dGUgbG9naWMKICAgICAgICAgICAgIGRldmljZSA9IG1FbmdpbmUtPmdldERldmljZUZvclN0cmF0ZWd5KHN0cmF0ZWd5KTsKICAgICAgICAgfQogICAgIH0KQEAgLTg4NSwxNyArODYxLDQ0IEBACiAgICAgICAgICAgImZsYWdzICUjeCIsCiAgICAgICAgICAgZGV2aWNlLCBjb25maWctPnNhbXBsZV9yYXRlLCBjb25maWctPmZvcm1hdCwgY29uZmlnLT5jaGFubmVsX21hc2ssICpmbGFncyk7CiAKLSAgICAqb3V0cHV0ID0gZ2V0T3V0cHV0Rm9yRGV2aWNlKGRldmljZSwgc2Vzc2lvbiwgKnN0cmVhbSwgY29uZmlnLCBmbGFncyk7CisgICAgKm91dHB1dCA9IEFVRElPX0lPX0hBTkRMRV9OT05FOworICAgIGlmIChtc2REZXZpY2UgIT0gQVVESU9fREVWSUNFX05PTkUpIHsKKyAgICAgICAgKm91dHB1dCA9IGdldE91dHB1dEZvckRldmljZShtc2REZXZpY2UsIHNlc3Npb24sICpzdHJlYW0sIGNvbmZpZywgZmxhZ3MpOworICAgICAgICBpZiAoKm91dHB1dCAhPSBBVURJT19JT19IQU5ETEVfTk9ORSAmJiBzZXRNc2RQYXRjaChkZXZpY2UpID09IE5PX0VSUk9SKSB7CisgICAgICAgICAgICBBTE9HVigiJXMoKSBVc2luZyBNU0QgZGV2aWNlIDB4JXggaW5zdGVhZCBvZiBkZXZpY2UgMHgleCIsCisgICAgICAgICAgICAgICAgICAgIF9fZnVuY19fLCBtc2REZXZpY2UsIGRldmljZSk7CisgICAgICAgICAgICBkZXZpY2UgPSBtc2REZXZpY2U7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAqb3V0cHV0ID0gQVVESU9fSU9fSEFORExFX05PTkU7CisgICAgICAgIH0KKyAgICB9CiAgICAgaWYgKCpvdXRwdXQgPT0gQVVESU9fSU9fSEFORExFX05PTkUpIHsKLSAgICAgICAgbU91dHB1dFJvdXRlcy5yZW1vdmVSb3V0ZShzZXNzaW9uKTsKKyAgICAgICAgKm91dHB1dCA9IGdldE91dHB1dEZvckRldmljZShkZXZpY2UsIHNlc3Npb24sICpzdHJlYW0sIGNvbmZpZywgZmxhZ3MpOworICAgIH0KKyAgICBpZiAoKm91dHB1dCA9PSBBVURJT19JT19IQU5ETEVfTk9ORSkgewogICAgICAgICByZXR1cm4gSU5WQUxJRF9PUEVSQVRJT047CiAgICAgfQogCi0gICAgRGV2aWNlVmVjdG9yIG91dHB1dERldmljZXMgPSBtQXZhaWxhYmxlT3V0cHV0RGV2aWNlcy5nZXREZXZpY2VzRnJvbVR5cGUoZGV2aWNlKTsKKyAgICBvdXRwdXREZXZpY2VzID0gbUF2YWlsYWJsZU91dHB1dERldmljZXMuZ2V0RGV2aWNlc0Zyb21UeXBlTWFzayhkZXZpY2UpOwogICAgICpzZWxlY3RlZERldmljZUlkID0gb3V0cHV0RGV2aWNlcy5zaXplKCkgPiAwID8gb3V0cHV0RGV2aWNlcy5pdGVtQXQoMCktPmdldElkKCkKICAgICAgICAgICAgIDogQVVESU9fUE9SVF9IQU5ETEVfTk9ORTsKIAotICAgIEFMT0dWKCIgIGdldE91dHB1dEZvckF0dHIoKSByZXR1cm5zIG91dHB1dCAlZCBzZWxlY3RlZERldmljZUlkICVkIiwgKm91dHB1dCwgKnNlbGVjdGVkRGV2aWNlSWQpOworZXhpdDoKKyAgICBhdWRpb19jb25maWdfYmFzZV90IGNsaWVudENvbmZpZyA9IHsuc2FtcGxlX3JhdGUgPSBjb25maWctPnNhbXBsZV9yYXRlLAorICAgICAgICAuZm9ybWF0ID0gY29uZmlnLT5mb3JtYXQsCisgICAgICAgIC5jaGFubmVsX21hc2sgPSBjb25maWctPmNoYW5uZWxfbWFzayB9OworICAgICpwb3J0SWQgPSBBdWRpb1BvcnQ6OmdldE5leHRVbmlxdWVJZCgpOworCisgICAgc3A8VHJhY2tDbGllbnREZXNjcmlwdG9yPiBjbGllbnREZXNjID0KKyAgICAgICAgbmV3IFRyYWNrQ2xpZW50RGVzY3JpcHRvcigqcG9ydElkLCB1aWQsIHNlc3Npb24sIGF0dHJpYnV0ZXMsIGNsaWVudENvbmZpZywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXF1ZXN0ZWREZXZpY2VJZCwgKnN0cmVhbSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZXRTdHJhdGVneUZvckF0dHIoJmF0dHJpYnV0ZXMpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpmbGFncyk7CisgICAgc3A8U3dBdWRpb091dHB1dERlc2NyaXB0b3I+IG91dHB1dERlc2MgPSBtT3V0cHV0cy52YWx1ZUZvcigqb3V0cHV0KTsKKyAgICBvdXRwdXREZXNjLT5hZGRDbGllbnQoY2xpZW50RGVzYyk7CisKKyAgICBBTE9HVigiICBnZXRPdXRwdXRGb3JBdHRyKCkgcmV0dXJucyBvdXRwdXQgJWQgc2VsZWN0ZWREZXZpY2VJZCAlZCBmb3IgcG9ydCBJRCAlZCIsCisgICAgICAgICAgKm91dHB1dCwgKnNlbGVjdGVkRGV2aWNlSWQsICpwb3J0SWQpOwogCiAgICAgcmV0dXJuIE5PX0VSUk9SOwogfQpAQCAtOTkxLDEwICs5OTQsMjcgQEAKICAgICAgICAgc3A8U3dBdWRpb091dHB1dERlc2NyaXB0b3I+IG91dHB1dERlc2MgPQogICAgICAgICAgICAgICAgIG5ldyBTd0F1ZGlvT3V0cHV0RGVzY3JpcHRvcihwcm9maWxlLCBtcENsaWVudEludGVyZmFjZSk7CiAKLSAgICAgICAgRGV2aWNlVmVjdG9yIG91dHB1dERldmljZXMgPSBtQXZhaWxhYmxlT3V0cHV0RGV2aWNlcy5nZXREZXZpY2VzRnJvbVR5cGUoZGV2aWNlKTsKKyAgICAgICAgRGV2aWNlVmVjdG9yIG91dHB1dERldmljZXMgPSBtQXZhaWxhYmxlT3V0cHV0RGV2aWNlcy5nZXREZXZpY2VzRnJvbVR5cGVNYXNrKGRldmljZSk7CiAgICAgICAgIFN0cmluZzggYWRkcmVzcyA9IG91dHB1dERldmljZXMuc2l6ZSgpID4gMCA/IG91dHB1dERldmljZXMuaXRlbUF0KDApLT5tQWRkcmVzcwogICAgICAgICAgICAgICAgIDogU3RyaW5nOCgiIik7CiAKKyAgICAgICAgLy8gTVNEIHBhdGNoIG1heSBiZSB1c2luZyB0aGUgb25seSBvdXRwdXQgc3RyZWFtIHRoYXQgY2FuIHNlcnZpY2UgdGhpcyByZXF1ZXN0LiBSZWxlYXNlCisgICAgICAgIC8vIE1TRCBwYXRjaCB0byBwcmlvcml0aXplIHRoaXMgcmVxdWVzdCBvdmVyIGFueSBhY3RpdmUgb3V0cHV0IG9uIE1TRC4KKyAgICAgICAgQXVkaW9QYXRjaENvbGxlY3Rpb24gbXNkUGF0Y2hlcyA9IGdldE1zZFBhdGNoZXMoKTsKKyAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtc2RQYXRjaGVzLnNpemUoKTsgaSsrKSB7CisgICAgICAgICAgICBjb25zdCBhdXRvJiBwYXRjaCA9IG1zZFBhdGNoZXNbaV07CisgICAgICAgICAgICBmb3IgKHNpemVfdCBqID0gMDsgaiA8IHBhdGNoLT5tUGF0Y2gubnVtX3NpbmtzOyArK2opIHsKKyAgICAgICAgICAgICAgICBjb25zdCBzdHJ1Y3QgYXVkaW9fcG9ydF9jb25maWcgKnNpbmsgPSAmcGF0Y2gtPm1QYXRjaC5zaW5rc1tqXTsKKyAgICAgICAgICAgICAgICBpZiAoc2luay0+dHlwZSA9PSBBVURJT19QT1JUX1RZUEVfREVWSUNFICYmCisgICAgICAgICAgICAgICAgICAgICAgICAoc2luay0+ZXh0LmRldmljZS50eXBlICYgZGV2aWNlKSAhPSBBVURJT19ERVZJQ0VfTk9ORSAmJgorICAgICAgICAgICAgICAgICAgICAgICAgKGFkZHJlc3MuaXNFbXB0eSgpIHx8IHN0cm5jbXAoc2luay0+ZXh0LmRldmljZS5hZGRyZXNzLCBhZGRyZXNzLnN0cmluZygpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBVURJT19ERVZJQ0VfTUFYX0FERFJFU1NfTEVOKSA9PSAwKSkgeworICAgICAgICAgICAgICAgICAgICByZWxlYXNlQXVkaW9QYXRjaChwYXRjaC0+bUhhbmRsZSwgbVVpZENhY2hlZCk7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCiAgICAgICAgIHN0YXR1cyA9IG91dHB1dERlc2MtPm9wZW4oY29uZmlnLCBkZXZpY2UsIGFkZHJlc3MsIHN0cmVhbSwgKmZsYWdzLCAmb3V0cHV0KTsKIAogICAgICAgICAvLyBvbmx5IGFjY2VwdCBhbiBvdXRwdXQgd2l0aCB0aGUgcmVxdWVzdGVkIHBhcmFtZXRlcnMKQEAgLTEwMTYsOCArMTAzNiw2IEBACiAgICAgICAgICAgICB9CiAgICAgICAgICAgICByZXR1cm4gQVVESU9fSU9fSEFORExFX05PTkU7CiAgICAgICAgIH0KLSAgICAgICAgb3V0cHV0RGVzYy0+bVJlZkNvdW50W3N0cmVhbV0gPSAwOwotICAgICAgICBvdXRwdXREZXNjLT5tU3RvcFRpbWVbc3RyZWFtXSA9IDA7CiAgICAgICAgIG91dHB1dERlc2MtPm1EaXJlY3RPcGVuQ291bnQgPSAxOwogICAgICAgICBvdXRwdXREZXNjLT5tRGlyZWN0Q2xpZW50U2Vzc2lvbiA9IHNlc3Npb247CiAKQEAgLTEwNTcsNiArMTA3NSwxNjQgQEAKICAgICByZXR1cm4gb3V0cHV0OwogfQogCitzcDxEZXZpY2VEZXNjcmlwdG9yPiBBdWRpb1BvbGljeU1hbmFnZXI6OmdldE1zZEF1ZGlvSW5EZXZpY2UoKSBjb25zdCB7CisgICAgc3A8SHdNb2R1bGU+IG1zZE1vZHVsZSA9IG1Id01vZHVsZXMuZ2V0TW9kdWxlRnJvbU5hbWUoQVVESU9fSEFSRFdBUkVfTU9EVUxFX0lEX01TRCk7CisgICAgaWYgKG1zZE1vZHVsZSAhPSAwKSB7CisgICAgICAgIERldmljZVZlY3RvciBtc2RJbnB1dERldmljZXMgPSBtQXZhaWxhYmxlSW5wdXREZXZpY2VzLmdldERldmljZXNGcm9tSHdNb2R1bGUoCisgICAgICAgICAgICAgICAgbXNkTW9kdWxlLT5nZXRIYW5kbGUoKSk7CisgICAgICAgIGlmICghbXNkSW5wdXREZXZpY2VzLmlzRW1wdHkoKSkgcmV0dXJuIG1zZElucHV0RGV2aWNlcy5pdGVtQXQoMCk7CisgICAgfQorICAgIHJldHVybiAwOworfQorCithdWRpb19kZXZpY2VzX3QgQXVkaW9Qb2xpY3lNYW5hZ2VyOjpnZXRNc2RBdWRpb091dERldmljZVR5cGVzKCkgY29uc3QgeworICAgIHNwPEh3TW9kdWxlPiBtc2RNb2R1bGUgPSBtSHdNb2R1bGVzLmdldE1vZHVsZUZyb21OYW1lKEFVRElPX0hBUkRXQVJFX01PRFVMRV9JRF9NU0QpOworICAgIGlmIChtc2RNb2R1bGUgIT0gMCkgeworICAgICAgICByZXR1cm4gbUF2YWlsYWJsZU91dHB1dERldmljZXMuZ2V0RGV2aWNlVHlwZXNGcm9tSHdNb2R1bGUobXNkTW9kdWxlLT5nZXRIYW5kbGUoKSk7CisgICAgfQorICAgIHJldHVybiBBVURJT19ERVZJQ0VfTk9ORTsKK30KKworY29uc3QgQXVkaW9QYXRjaENvbGxlY3Rpb24gQXVkaW9Qb2xpY3lNYW5hZ2VyOjpnZXRNc2RQYXRjaGVzKCkgY29uc3QgeworICAgIEF1ZGlvUGF0Y2hDb2xsZWN0aW9uIG1zZFBhdGNoZXM7CisgICAgc3A8SHdNb2R1bGU+IG1zZE1vZHVsZSA9IG1Id01vZHVsZXMuZ2V0TW9kdWxlRnJvbU5hbWUoQVVESU9fSEFSRFdBUkVfTU9EVUxFX0lEX01TRCk7CisgICAgaWYgKG1zZE1vZHVsZSAhPSAwKSB7CisgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbUF1ZGlvUGF0Y2hlcy5zaXplKCk7ICsraSkgeworICAgICAgICAgICAgc3A8QXVkaW9QYXRjaD4gcGF0Y2ggPSBtQXVkaW9QYXRjaGVzLnZhbHVlQXQoaSk7CisgICAgICAgICAgICBmb3IgKHNpemVfdCBqID0gMDsgaiA8IHBhdGNoLT5tUGF0Y2gubnVtX3NvdXJjZXM7ICsraikgeworICAgICAgICAgICAgICAgIGNvbnN0IHN0cnVjdCBhdWRpb19wb3J0X2NvbmZpZyAqc291cmNlID0gJnBhdGNoLT5tUGF0Y2guc291cmNlc1tqXTsKKyAgICAgICAgICAgICAgICBpZiAoc291cmNlLT50eXBlID09IEFVRElPX1BPUlRfVFlQRV9ERVZJQ0UgJiYKKyAgICAgICAgICAgICAgICAgICAgICAgIHNvdXJjZS0+ZXh0LmRldmljZS5od19tb2R1bGUgPT0gbXNkTW9kdWxlLT5nZXRIYW5kbGUoKSkgeworICAgICAgICAgICAgICAgICAgICBtc2RQYXRjaGVzLmFkZEF1ZGlvUGF0Y2gocGF0Y2gtPm1IYW5kbGUsIHBhdGNoKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisgICAgcmV0dXJuIG1zZFBhdGNoZXM7Cit9CisKK3N0YXR1c190IEF1ZGlvUG9saWN5TWFuYWdlcjo6Z2V0QmVzdE1zZEF1ZGlvUHJvZmlsZUZvcihhdWRpb19kZXZpY2VzX3Qgb3V0cHV0RGV2aWNlLAorICAgICAgICBib29sIGh3QXZTeW5jLCBhdWRpb19wb3J0X2NvbmZpZyAqc291cmNlQ29uZmlnLCBhdWRpb19wb3J0X2NvbmZpZyAqc2lua0NvbmZpZykgY29uc3QKK3sKKyAgICBzcDxId01vZHVsZT4gbXNkTW9kdWxlID0gbUh3TW9kdWxlcy5nZXRNb2R1bGVGcm9tTmFtZShBVURJT19IQVJEV0FSRV9NT0RVTEVfSURfTVNEKTsKKyAgICBpZiAobXNkTW9kdWxlID09IG51bGxwdHIpIHsKKyAgICAgICAgQUxPR0UoIiVzKCkgdW5hYmxlIHRvIGdldCBNU0QgbW9kdWxlIiwgX19mdW5jX18pOworICAgICAgICByZXR1cm4gTk9fSU5JVDsKKyAgICB9CisgICAgc3A8SHdNb2R1bGU+IGRldmljZU1vZHVsZSA9IG1Id01vZHVsZXMuZ2V0TW9kdWxlRm9yRGV2aWNlKG91dHB1dERldmljZSk7CisgICAgaWYgKGRldmljZU1vZHVsZSA9PSBudWxscHRyKSB7CisgICAgICAgIEFMT0dFKCIlcygpIHVuYWJsZSB0byBnZXQgbW9kdWxlIGZvciAlI3giLCBfX2Z1bmNfXywgb3V0cHV0RGV2aWNlKTsKKyAgICAgICAgcmV0dXJuIE5PX0lOSVQ7CisgICAgfQorICAgIGNvbnN0IElucHV0UHJvZmlsZUNvbGxlY3Rpb24gJmlucHV0UHJvZmlsZXMgPSBtc2RNb2R1bGUtPmdldElucHV0UHJvZmlsZXMoKTsKKyAgICBpZiAoaW5wdXRQcm9maWxlcy5pc0VtcHR5KCkpIHsKKyAgICAgICAgQUxPR0UoIiVzKCkgbm8gaW5wdXQgcHJvZmlsZXMgZm9yIE1TRCBtb2R1bGUiLCBfX2Z1bmNfXyk7CisgICAgICAgIHJldHVybiBOT19JTklUOworICAgIH0KKyAgICBjb25zdCBPdXRwdXRQcm9maWxlQ29sbGVjdGlvbiAmb3V0cHV0UHJvZmlsZXMgPSBkZXZpY2VNb2R1bGUtPmdldE91dHB1dFByb2ZpbGVzKCk7CisgICAgaWYgKG91dHB1dFByb2ZpbGVzLmlzRW1wdHkoKSkgeworICAgICAgICBBTE9HRSgiJXMoKSBubyBvdXRwdXQgcHJvZmlsZXMgZm9yIGRldmljZSAlI3giLCBfX2Z1bmNfXywgb3V0cHV0RGV2aWNlKTsKKyAgICAgICAgcmV0dXJuIE5PX0lOSVQ7CisgICAgfQorICAgIEF1ZGlvUHJvZmlsZVZlY3RvciBtc2RQcm9maWxlczsKKyAgICAvLyBFYWNoIElPUHJvZmlsZSByZXByZXNlbnRzIGEgTWl4UG9ydCBmcm9tIGF1ZGlvX3BvbGljeV9jb25maWd1cmF0aW9uLnhtbAorICAgIGZvciAoY29uc3QgYXV0byAmaW5Qcm9maWxlIDogaW5wdXRQcm9maWxlcykgeworICAgICAgICBpZiAoaHdBdlN5bmMgPT0gKChpblByb2ZpbGUtPmdldEZsYWdzKCkgJiBBVURJT19JTlBVVF9GTEFHX0hXX0FWX1NZTkMpICE9IDApKSB7CisgICAgICAgICAgICBtc2RQcm9maWxlcy5hcHBlbmRWZWN0b3IoaW5Qcm9maWxlLT5nZXRBdWRpb1Byb2ZpbGVzKCkpOworICAgICAgICB9CisgICAgfQorICAgIEF1ZGlvUHJvZmlsZVZlY3RvciBkZXZpY2VQcm9maWxlczsKKyAgICBmb3IgKGNvbnN0IGF1dG8gJm91dFByb2ZpbGUgOiBvdXRwdXRQcm9maWxlcykgeworICAgICAgICBpZiAoaHdBdlN5bmMgPT0gKChvdXRQcm9maWxlLT5nZXRGbGFncygpICYgQVVESU9fT1VUUFVUX0ZMQUdfSFdfQVZfU1lOQykgIT0gMCkpIHsKKyAgICAgICAgICAgIGRldmljZVByb2ZpbGVzLmFwcGVuZFZlY3RvcihvdXRQcm9maWxlLT5nZXRBdWRpb1Byb2ZpbGVzKCkpOworICAgICAgICB9CisgICAgfQorICAgIHN0cnVjdCBhdWRpb19jb25maWdfYmFzZSBiZXN0U2lua0NvbmZpZzsKKyAgICBzdGF0dXNfdCByZXN1bHQgPSBtc2RQcm9maWxlcy5maW5kQmVzdE1hdGNoaW5nT3V0cHV0Q29uZmlnKGRldmljZVByb2ZpbGVzLAorICAgICAgICAgICAgY29tcHJlc3NlZEZvcm1hdHNPcmRlciwgc3Vycm91bmRDaGFubmVsTWFza3NPcmRlciwgdHJ1ZSAvKnByZWZlckhpZ2hlclNhbXBsaW5nUmF0ZXMqLywKKyAgICAgICAgICAgICZiZXN0U2lua0NvbmZpZyk7CisgICAgaWYgKHJlc3VsdCAhPSBOT19FUlJPUikgeworICAgICAgICBBTE9HRCgiJXMoKSBubyBtYXRjaGluZyBwcm9maWxlcyBmb3VuZCBmb3IgZGV2aWNlOiAlI3gsIGh3QXZTeW5jOiAlZCIsCisgICAgICAgICAgICAgICAgX19mdW5jX18sIG91dHB1dERldmljZSwgaHdBdlN5bmMpOworICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KKyAgICBzaW5rQ29uZmlnLT5zYW1wbGVfcmF0ZSA9IGJlc3RTaW5rQ29uZmlnLnNhbXBsZV9yYXRlOworICAgIHNpbmtDb25maWctPmNoYW5uZWxfbWFzayA9IGJlc3RTaW5rQ29uZmlnLmNoYW5uZWxfbWFzazsKKyAgICBzaW5rQ29uZmlnLT5mb3JtYXQgPSBiZXN0U2lua0NvbmZpZy5mb3JtYXQ7CisgICAgLy8gRm9yIGVuY29kZWQgc3RyZWFtcyBmb3JjZSBkaXJlY3QgZmxhZyB0byBwcmV2ZW50IGRvd25zdHJlYW0gbWl4aW5nLgorICAgIHNpbmtDb25maWctPmZsYWdzLm91dHB1dCA9IHN0YXRpY19jYXN0PGF1ZGlvX291dHB1dF9mbGFnc190PigKKyAgICAgICAgICAgIHNpbmtDb25maWctPmZsYWdzLm91dHB1dCB8IEFVRElPX09VVFBVVF9GTEFHX0RJUkVDVCk7CisgICAgc291cmNlQ29uZmlnLT5zYW1wbGVfcmF0ZSA9IGJlc3RTaW5rQ29uZmlnLnNhbXBsZV9yYXRlOworICAgIC8vIFNwZWNpZnkgZXhhY3QgY2hhbm5lbCBtYXNrIHRvIHByZXZlbnQgZ3Vlc3NpbmcgYnkgYml0IGNvdW50IGluIFBhdGNoUGFuZWwuCisgICAgc291cmNlQ29uZmlnLT5jaGFubmVsX21hc2sgPSBhdWRpb19jaGFubmVsX21hc2tfb3V0X3RvX2luKGJlc3RTaW5rQ29uZmlnLmNoYW5uZWxfbWFzayk7CisgICAgc291cmNlQ29uZmlnLT5mb3JtYXQgPSBiZXN0U2lua0NvbmZpZy5mb3JtYXQ7CisgICAgLy8gQ29weSBpbnB1dCBzdHJlYW0gZGlyZWN0bHkgd2l0aG91dCBhbnkgcHJvY2Vzc2luZyAoZS5nLiByZXNhbXBsaW5nKS4KKyAgICBzb3VyY2VDb25maWctPmZsYWdzLmlucHV0ID0gc3RhdGljX2Nhc3Q8YXVkaW9faW5wdXRfZmxhZ3NfdD4oCisgICAgICAgICAgICBzb3VyY2VDb25maWctPmZsYWdzLmlucHV0IHwgQVVESU9fSU5QVVRfRkxBR19ESVJFQ1QpOworICAgIGlmIChod0F2U3luYykgeworICAgICAgICBzaW5rQ29uZmlnLT5mbGFncy5vdXRwdXQgPSBzdGF0aWNfY2FzdDxhdWRpb19vdXRwdXRfZmxhZ3NfdD4oCisgICAgICAgICAgICAgICAgc2lua0NvbmZpZy0+ZmxhZ3Mub3V0cHV0IHwgQVVESU9fT1VUUFVUX0ZMQUdfSFdfQVZfU1lOQyk7CisgICAgICAgIHNvdXJjZUNvbmZpZy0+ZmxhZ3MuaW5wdXQgPSBzdGF0aWNfY2FzdDxhdWRpb19pbnB1dF9mbGFnc190PigKKyAgICAgICAgICAgICAgICBzb3VyY2VDb25maWctPmZsYWdzLmlucHV0IHwgQVVESU9fSU5QVVRfRkxBR19IV19BVl9TWU5DKTsKKyAgICB9CisgICAgY29uc3QgdW5zaWduZWQgaW50IGNvbmZpZ19tYXNrID0gQVVESU9fUE9SVF9DT05GSUdfU0FNUExFX1JBVEUgfAorICAgICAgICAgICAgQVVESU9fUE9SVF9DT05GSUdfQ0hBTk5FTF9NQVNLIHwgQVVESU9fUE9SVF9DT05GSUdfRk9STUFUIHwgQVVESU9fUE9SVF9DT05GSUdfRkxBR1M7CisgICAgc2lua0NvbmZpZy0+Y29uZmlnX21hc2sgfD0gY29uZmlnX21hc2s7CisgICAgc291cmNlQ29uZmlnLT5jb25maWdfbWFzayB8PSBjb25maWdfbWFzazsKKyAgICByZXR1cm4gTk9fRVJST1I7Cit9CisKK1BhdGNoQnVpbGRlciBBdWRpb1BvbGljeU1hbmFnZXI6OmJ1aWxkTXNkUGF0Y2goYXVkaW9fZGV2aWNlc190IG91dHB1dERldmljZSkgY29uc3QKK3sKKyAgICBQYXRjaEJ1aWxkZXIgcGF0Y2hCdWlsZGVyOworICAgIHBhdGNoQnVpbGRlci5hZGRTb3VyY2UoZ2V0TXNkQXVkaW9JbkRldmljZSgpKS4KKyAgICAgICAgICAgIGFkZFNpbmsoZmluZERldmljZShtQXZhaWxhYmxlT3V0cHV0RGV2aWNlcywgb3V0cHV0RGV2aWNlKSk7CisgICAgYXVkaW9fcG9ydF9jb25maWcgc291cmNlQ29uZmlnID0gcGF0Y2hCdWlsZGVyLnBhdGNoKCktPnNvdXJjZXNbMF07CisgICAgYXVkaW9fcG9ydF9jb25maWcgc2lua0NvbmZpZyA9IHBhdGNoQnVpbGRlci5wYXRjaCgpLT5zaW5rc1swXTsKKyAgICAvLyBUT0RPOiBGaWd1cmUgb3V0IHdoZXRoZXIgTVNEIG1vZHVsZSBoYXMgSFdfQVZfU1lOQyBmbGFnIHNldCBpbiB0aGUgQVAgY29uZmlnIGZpbGUuCisgICAgLy8gRm9yIG5vdywgd2UganVzdCBmb3JjZWZ1bGx5IHRyeSB3aXRoIEh3QXZTeW5jIGZpcnN0LgorICAgIHN0YXR1c190IHJlcyA9IGdldEJlc3RNc2RBdWRpb1Byb2ZpbGVGb3Iob3V0cHV0RGV2aWNlLCB0cnVlIC8qaHdBdlN5bmMqLywKKyAgICAgICAgICAgICZzb3VyY2VDb25maWcsICZzaW5rQ29uZmlnKSA9PSBOT19FUlJPUiA/IE5PX0VSUk9SIDoKKyAgICAgICAgICAgIGdldEJlc3RNc2RBdWRpb1Byb2ZpbGVGb3IoCisgICAgICAgICAgICAgICAgICAgIG91dHB1dERldmljZSwgZmFsc2UgLypod0F2U3luYyovLCAmc291cmNlQ29uZmlnLCAmc2lua0NvbmZpZyk7CisgICAgaWYgKHJlcyA9PSBOT19FUlJPUikgeworICAgICAgICAvLyBGb3VuZCBhIG1hdGNoaW5nIHByb2ZpbGUgZm9yIGVuY29kZWQgYXVkaW8uIFJlLWNyZWF0ZSBQYXRjaEJ1aWxkZXIgd2l0aCB0aGlzIGNvbmZpZy4KKyAgICAgICAgcmV0dXJuIChQYXRjaEJ1aWxkZXIoKSkuYWRkU291cmNlKHNvdXJjZUNvbmZpZykuYWRkU2luayhzaW5rQ29uZmlnKTsKKyAgICB9CisgICAgQUxPR1YoIiVzKCkgbm8gbWF0Y2hpbmcgcHJvZmlsZSBmb3VuZC4gRmFsbCB0aHJvdWdoIHRvIGRlZmF1bHQgUENNIHBhdGNoIgorICAgICAgICAgICAgIiBzdXBwb3J0aW5nIFBDTSBmb3JtYXQgY29udmVyc2lvbi4iLCBfX2Z1bmNfXyk7CisgICAgcmV0dXJuIHBhdGNoQnVpbGRlcjsKK30KKworc3RhdHVzX3QgQXVkaW9Qb2xpY3lNYW5hZ2VyOjpzZXRNc2RQYXRjaChhdWRpb19kZXZpY2VzX3Qgb3V0cHV0RGV2aWNlKSB7CisgICAgQUxPR1YoIiVzKCkgZm9yIG91dHB1dERldmljZSAlI3giLCBfX2Z1bmNfXywgb3V0cHV0RGV2aWNlKTsKKyAgICBpZiAob3V0cHV0RGV2aWNlID09IEFVRElPX0RFVklDRV9OT05FKSB7CisgICAgICAgIC8vIFVzZSBtZWRpYSBzdHJhdGVneSBmb3IgdW5zcGVjaWZpZWQgb3V0cHV0IGRldmljZS4gVGhpcyBzaG91bGQgb25seQorICAgICAgICAvLyBvY2N1ciBvbiBjaGVja0ZvckRldmljZUFuZE91dHB1dENoYW5nZXMoKS4gRGV2aWNlIGNvbm5lY3Rpb24gZXZlbnRzIG1heQorICAgICAgICAvLyB0aGVyZWZvcmUgaW52YWxpZGF0ZSBleHBsaWNpdCByb3V0aW5nIHJlcXVlc3RzLgorICAgICAgICBvdXRwdXREZXZpY2UgPSBnZXREZXZpY2VGb3JTdHJhdGVneShTVFJBVEVHWV9NRURJQSwgZmFsc2UgLypmcm9tQ2FjaGUqLyk7CisgICAgfQorICAgIFBhdGNoQnVpbGRlciBwYXRjaEJ1aWxkZXIgPSBidWlsZE1zZFBhdGNoKG91dHB1dERldmljZSk7CisgICAgY29uc3Qgc3RydWN0IGF1ZGlvX3BhdGNoKiBwYXRjaCA9IHBhdGNoQnVpbGRlci5wYXRjaCgpOworICAgIGNvbnN0IEF1ZGlvUGF0Y2hDb2xsZWN0aW9uIG1zZFBhdGNoZXMgPSBnZXRNc2RQYXRjaGVzKCk7CisgICAgaWYgKCFtc2RQYXRjaGVzLmlzRW1wdHkoKSkgeworICAgICAgICBMT0dfQUxXQVlTX0ZBVEFMX0lGKG1zZFBhdGNoZXMuc2l6ZSgpID4gMSwKKyAgICAgICAgICAgICAgICAiVGhlIGN1cnJlbnQgTVNEIHByb3RvdHlwZSBvbmx5IHN1cHBvcnRzIG9uZSBvdXRwdXQgcGF0Y2giKTsKKyAgICAgICAgc3A8QXVkaW9QYXRjaD4gY3VycmVudFBhdGNoID0gbXNkUGF0Y2hlcy52YWx1ZUF0KDApOworICAgICAgICBpZiAoYXVkaW9fcGF0Y2hlc19hcmVfZXF1YWwoJmN1cnJlbnRQYXRjaC0+bVBhdGNoLCBwYXRjaCkpIHsKKyAgICAgICAgICAgIHJldHVybiBOT19FUlJPUjsKKyAgICAgICAgfQorICAgICAgICByZWxlYXNlQXVkaW9QYXRjaChjdXJyZW50UGF0Y2gtPm1IYW5kbGUsIG1VaWRDYWNoZWQpOworICAgIH0KKyAgICBzdGF0dXNfdCBzdGF0dXMgPSBpbnN0YWxsUGF0Y2goX19mdW5jX18sIC0xIC8qaW5kZXgqLywgbnVsbHB0ciAvKnBhdGNoSGFuZGxlKi8sCisgICAgICAgICAgICBwYXRjaCwgMCAvKmRlbGF5TXMqLywgbVVpZENhY2hlZCwgbnVsbHB0ciAvKnBhdGNoRGVzY1B0ciovKTsKKyAgICBBTE9HRV9JRihzdGF0dXMgIT0gTk9fRVJST1IsICIlcygpIGVycm9yICVkIGNyZWF0aW5nIE1TRCBhdWRpbyBwYXRjaCIsIF9fZnVuY19fLCBzdGF0dXMpOworICAgIEFMT0dJX0lGKHN0YXR1cyA9PSBOT19FUlJPUiwgIiVzKCkgUGF0Y2ggY3JlYXRlZCBmcm9tIE1TRF9JTiB0byAiCisgICAgICAgICAgICJkZXZpY2U6JSN4IChmb3JtYXQ6JSN4IGNoYW5uZWxzOiUjeCBzYW1wbGVyYXRlOiVkKSIsIF9fZnVuY19fLCBvdXRwdXREZXZpY2UsCisgICAgICAgICAgIHBhdGNoLT5zb3VyY2VzWzBdLmZvcm1hdCwgcGF0Y2gtPnNvdXJjZXNbMF0uY2hhbm5lbF9tYXNrLCBwYXRjaC0+c291cmNlc1swXS5zYW1wbGVfcmF0ZSk7CisgICAgcmV0dXJuIHN0YXR1czsKK30KKwogYXVkaW9faW9faGFuZGxlX3QgQXVkaW9Qb2xpY3lNYW5hZ2VyOjpzZWxlY3RPdXRwdXQoY29uc3QgU29ydGVkVmVjdG9yPGF1ZGlvX2lvX2hhbmRsZV90PiYgb3V0cHV0cywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdWRpb19vdXRwdXRfZmxhZ3NfdCBmbGFncywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdWRpb19mb3JtYXRfdCBmb3JtYXQpCkBAIC0xMTM2LDY3ICsxMzEyLDMyIEBACiAgICAgcmV0dXJuIG91dHB1dHNbMF07CiB9CiAKLXN0YXR1c190IEF1ZGlvUG9saWN5TWFuYWdlcjo6c3RhcnRPdXRwdXQoYXVkaW9faW9faGFuZGxlX3Qgb3V0cHV0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXVkaW9fc3RyZWFtX3R5cGVfdCBzdHJlYW0sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdWRpb19zZXNzaW9uX3Qgc2Vzc2lvbikKK3N0YXR1c190IEF1ZGlvUG9saWN5TWFuYWdlcjo6c3RhcnRPdXRwdXQoYXVkaW9fcG9ydF9oYW5kbGVfdCBwb3J0SWQpCiB7Ci0gICAgQUxPR1YoInN0YXJ0T3V0cHV0KCkgb3V0cHV0ICVkLCBzdHJlYW0gJWQsIHNlc3Npb24gJWQiLAotICAgICAgICAgIG91dHB1dCwgc3RyZWFtLCBzZXNzaW9uKTsKLSAgICBzc2l6ZV90IGluZGV4ID0gbU91dHB1dHMuaW5kZXhPZktleShvdXRwdXQpOwotICAgIGlmIChpbmRleCA8IDApIHsKLSAgICAgICAgQUxPR1coInN0YXJ0T3V0cHV0KCkgdW5rbm93biBvdXRwdXQgJWQiLCBvdXRwdXQpOworICAgIEFMT0dWKCIlcyBwb3J0SWQgJWQiLCBfX0ZVTkNUSU9OX18sIHBvcnRJZCk7CisKKyAgICBzcDxTd0F1ZGlvT3V0cHV0RGVzY3JpcHRvcj4gb3V0cHV0RGVzYyA9IG1PdXRwdXRzLmdldE91dHB1dEZvckNsaWVudChwb3J0SWQpOworICAgIGlmIChvdXRwdXREZXNjID09IDApIHsKKyAgICAgICAgQUxPR1coInN0YXJ0T3V0cHV0KCkgbm8gb3V0cHV0IGZvciBjbGllbnQgJWQiLCBwb3J0SWQpOwogICAgICAgICByZXR1cm4gQkFEX1ZBTFVFOwogICAgIH0KKyAgICBzcDxUcmFja0NsaWVudERlc2NyaXB0b3I+IGNsaWVudCA9IG91dHB1dERlc2MtPmdldENsaWVudChwb3J0SWQpOwogCi0gICAgc3A8U3dBdWRpb091dHB1dERlc2NyaXB0b3I+IG91dHB1dERlc2MgPSBtT3V0cHV0cy52YWx1ZUF0KGluZGV4KTsKKyAgICBBTE9HVigic3RhcnRPdXRwdXQoKSBvdXRwdXQgJWQsIHN0cmVhbSAlZCwgc2Vzc2lvbiAlZCIsCisgICAgICAgICAgb3V0cHV0RGVzYy0+bUlvSGFuZGxlLCBjbGllbnQtPnN0cmVhbSgpLCBjbGllbnQtPnNlc3Npb24oKSk7CiAKICAgICBzdGF0dXNfdCBzdGF0dXMgPSBvdXRwdXREZXNjLT5zdGFydCgpOwogICAgIGlmIChzdGF0dXMgIT0gTk9fRVJST1IpIHsKICAgICAgICAgcmV0dXJuIHN0YXR1czsKICAgICB9CiAKLSAgICAvLyBSb3V0aW5nPwotICAgIG1PdXRwdXRSb3V0ZXMuaW5jUm91dGVBY3Rpdml0eShzZXNzaW9uKTsKLQotICAgIGF1ZGlvX2RldmljZXNfdCBuZXdEZXZpY2U7Ci0gICAgQXVkaW9NaXggKnBvbGljeU1peCA9IE5VTEw7Ci0gICAgY29uc3QgY2hhciAqYWRkcmVzcyA9IE5VTEw7Ci0gICAgaWYgKG91dHB1dERlc2MtPm1Qb2xpY3lNaXggIT0gTlVMTCkgewotICAgICAgICBwb2xpY3lNaXggPSBvdXRwdXREZXNjLT5tUG9saWN5TWl4OwotICAgICAgICBhZGRyZXNzID0gcG9saWN5TWl4LT5tRGV2aWNlQWRkcmVzcy5zdHJpbmcoKTsKLSAgICAgICAgaWYgKChwb2xpY3lNaXgtPm1Sb3V0ZUZsYWdzICYgTUlYX1JPVVRFX0ZMQUdfUkVOREVSKSA9PSBNSVhfUk9VVEVfRkxBR19SRU5ERVIpIHsKLSAgICAgICAgICAgIG5ld0RldmljZSA9IHBvbGljeU1peC0+bURldmljZVR5cGU7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBuZXdEZXZpY2UgPSBBVURJT19ERVZJQ0VfT1VUX1JFTU9URV9TVUJNSVg7Ci0gICAgICAgIH0KLSAgICB9IGVsc2UgaWYgKG1PdXRwdXRSb3V0ZXMuZ2V0QW5kQ2xlYXJSb3V0ZUNoYW5nZWQoc2Vzc2lvbikpIHsKLSAgICAgICAgbmV3RGV2aWNlID0gZ2V0TmV3T3V0cHV0RGV2aWNlKG91dHB1dERlc2MsIGZhbHNlIC8qZnJvbUNhY2hlKi8pOwotICAgICAgICBpZiAobmV3RGV2aWNlICE9IG91dHB1dERlc2MtPmRldmljZSgpKSB7Ci0gICAgICAgICAgICBjaGVja1N0cmF0ZWd5Um91dGUoZ2V0U3RyYXRlZ3koc3RyZWFtKSwgb3V0cHV0KTsKLSAgICAgICAgfQotICAgIH0gZWxzZSB7Ci0gICAgICAgIG5ld0RldmljZSA9IEFVRElPX0RFVklDRV9OT05FOwotICAgIH0KLQotICAgIHVpbnQzMl90IGRlbGF5TXMgPSAwOwotCi0gICAgc3RhdHVzID0gc3RhcnRTb3VyY2Uob3V0cHV0RGVzYywgc3RyZWFtLCBuZXdEZXZpY2UsIGFkZHJlc3MsICZkZWxheU1zKTsKKyAgICB1aW50MzJfdCBkZWxheU1zOworICAgIHN0YXR1cyA9IHN0YXJ0U291cmNlKG91dHB1dERlc2MsIGNsaWVudCwgJmRlbGF5TXMpOwogCiAgICAgaWYgKHN0YXR1cyAhPSBOT19FUlJPUikgewotICAgICAgICBtT3V0cHV0Um91dGVzLmRlY1JvdXRlQWN0aXZpdHkoc2Vzc2lvbik7CiAgICAgICAgIG91dHB1dERlc2MtPnN0b3AoKTsKICAgICAgICAgcmV0dXJuIHN0YXR1czsKICAgICB9Ci0gICAgLy8gQXV0b21hdGljYWxseSBlbmFibGUgdGhlIHJlbW90ZSBzdWJtaXggaW5wdXQgd2hlbiBvdXRwdXQgaXMgc3RhcnRlZCBvbiBhIHJlIHJvdXRpbmcgbWl4Ci0gICAgLy8gb2YgdHlwZSBNSVhfVFlQRV9SRUNPUkRFUlMKLSAgICBpZiAoYXVkaW9faXNfcmVtb3RlX3N1Ym1peF9kZXZpY2UobmV3RGV2aWNlKSAmJiBwb2xpY3lNaXggIT0gTlVMTCAmJgotICAgICAgICAgICAgcG9saWN5TWl4LT5tTWl4VHlwZSA9PSBNSVhfVFlQRV9SRUNPUkRFUlMpIHsKLSAgICAgICAgICAgIHNldERldmljZUNvbm5lY3Rpb25TdGF0ZUludChBVURJT19ERVZJQ0VfSU5fUkVNT1RFX1NVQk1JWCwKLSAgICAgICAgICAgICAgICAgICAgQVVESU9fUE9MSUNZX0RFVklDRV9TVEFURV9BVkFJTEFCTEUsCi0gICAgICAgICAgICAgICAgICAgIGFkZHJlc3MsCi0gICAgICAgICAgICAgICAgICAgICJyZW1vdGUtc3VibWl4Iik7Ci0gICAgfQotCiAgICAgaWYgKGRlbGF5TXMgIT0gMCkgewogICAgICAgICB1c2xlZXAoZGVsYXlNcyAqIDEwMDApOwogICAgIH0KQEAgLTEyMDQsMTYgKzEzNDUsMTUgQEAKICAgICByZXR1cm4gc3RhdHVzOwogfQogCi1zdGF0dXNfdCBBdWRpb1BvbGljeU1hbmFnZXI6OnN0YXJ0U291cmNlKGNvbnN0IHNwPEF1ZGlvT3V0cHV0RGVzY3JpcHRvcj4mIG91dHB1dERlc2MsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdWRpb19zdHJlYW1fdHlwZV90IHN0cmVhbSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF1ZGlvX2RldmljZXNfdCBkZXZpY2UsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICphZGRyZXNzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3QgKmRlbGF5TXMpCitzdGF0dXNfdCBBdWRpb1BvbGljeU1hbmFnZXI6OnN0YXJ0U291cmNlKGNvbnN0IHNwPFN3QXVkaW9PdXRwdXREZXNjcmlwdG9yPiYgb3V0cHV0RGVzYywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3A8VHJhY2tDbGllbnREZXNjcmlwdG9yPiYgY2xpZW50LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCAqZGVsYXlNcykKIHsKICAgICAvLyBjYW5ub3Qgc3RhcnQgcGxheWJhY2sgb2YgU1RSRUFNX1RUUyBpZiBhbnkgb3RoZXIgb3V0cHV0IGlzIGJlaW5nIHVzZWQKICAgICB1aW50MzJfdCBiZWFjb25NdXRlTGF0ZW5jeSA9IDA7CiAKICAgICAqZGVsYXlNcyA9IDA7CisgICAgYXVkaW9fc3RyZWFtX3R5cGVfdCBzdHJlYW0gPSBjbGllbnQtPnN0cmVhbSgpOwogICAgIGlmIChzdHJlYW0gPT0gQVVESU9fU1RSRUFNX1RUUykgewogICAgICAgICBBTE9HVigiXHQgZm91bmQgQkVBQ09OIHN0cmVhbSIpOwogICAgICAgICBpZiAoIW1UdHNPdXRwdXRBdmFpbGFibGUgJiYgbU91dHB1dHMuaXNBbnlPdXRwdXRBY3RpdmUoQVVESU9fU1RSRUFNX1RUUyAvKnN0cmVhbVRvSWdub3JlKi8pKSB7CkBAIC0xMjMxLDYgKzEzNzEsMTkgQEAKICAgICBib29sIGZvcmNlID0gIW91dHB1dERlc2MtPmlzQWN0aXZlKCkgJiYKICAgICAgICAgICAgIChvdXRwdXREZXNjLT5nZXRQYXRjaEhhbmRsZSgpID09IEFVRElPX1BBVENIX0hBTkRMRV9OT05FKTsKIAorICAgIGF1ZGlvX2RldmljZXNfdCBkZXZpY2UgPSBBVURJT19ERVZJQ0VfTk9ORTsKKyAgICBBdWRpb01peCAqcG9saWN5TWl4ID0gTlVMTDsKKyAgICBjb25zdCBjaGFyICphZGRyZXNzID0gTlVMTDsKKyAgICBpZiAob3V0cHV0RGVzYy0+bVBvbGljeU1peCAhPSBOVUxMKSB7CisgICAgICAgIHBvbGljeU1peCA9IG91dHB1dERlc2MtPm1Qb2xpY3lNaXg7CisgICAgICAgIGFkZHJlc3MgPSBwb2xpY3lNaXgtPm1EZXZpY2VBZGRyZXNzLnN0cmluZygpOworICAgICAgICBpZiAoKHBvbGljeU1peC0+bVJvdXRlRmxhZ3MgJiBNSVhfUk9VVEVfRkxBR19SRU5ERVIpID09IE1JWF9ST1VURV9GTEFHX1JFTkRFUikgeworICAgICAgICAgICAgZGV2aWNlID0gcG9saWN5TWl4LT5tRGV2aWNlVHlwZTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGRldmljZSA9IEFVRElPX0RFVklDRV9PVVRfUkVNT1RFX1NVQk1JWDsKKyAgICAgICAgfQorICAgIH0KKwogICAgIC8vIHJlcXVpcmVzTXV0ZUNoZWNrIGlzIGZhbHNlIHdoZW4gd2UgY2FuIGJ5cGFzcyBtdXRlIHN0cmF0ZWd5LgogICAgIC8vIEl0IGNvdmVycyBhIGNvbW1vbiBjYXNlIHdoZW4gdGhlcmUgaXMgbm8gbWF0ZXJpYWxseSBhY3RpdmUgYXVkaW8KICAgICAvLyBhbmQgbXV0aW5nIHdvdWxkIHJlc3VsdCBpbiB1bm5lY2Vzc2FyeSBkZWxheSBhbmQgZHJvcHBlZCBhdWRpby4KQEAgLTEyNDAsMTMgKzEzOTMsMjAgQEAKICAgICAvLyBpbmNyZW1lbnQgdXNhZ2UgY291bnQgZm9yIHRoaXMgc3RyZWFtIG9uIHRoZSByZXF1ZXN0ZWQgb3V0cHV0OgogICAgIC8vIE5PVEUgdGhhdCB0aGUgdXNhZ2UgY291bnQgaXMgdGhlIHNhbWUgZm9yIGR1cGxpY2F0ZWQgb3V0cHV0IGFuZCBoYXJkd2FyZSBvdXRwdXQgd2hpY2ggaXMKICAgICAvLyBuZWNlc3NhcnkgZm9yIGEgY29ycmVjdCBjb250cm9sIG9mIGhhcmR3YXJlIG91dHB1dCByb3V0aW5nIGJ5IHN0YXJ0T3V0cHV0KCkgYW5kIHN0b3BPdXRwdXQoKQotICAgIG91dHB1dERlc2MtPmNoYW5nZVJlZkNvdW50KHN0cmVhbSwgMSk7CisgICAgb3V0cHV0RGVzYy0+c2V0Q2xpZW50QWN0aXZlKGNsaWVudCwgdHJ1ZSk7CisKKyAgICBpZiAoY2xpZW50LT5oYXNQcmVmZXJyZWREZXZpY2UodHJ1ZSkpIHsKKyAgICAgICAgZGV2aWNlID0gZ2V0TmV3T3V0cHV0RGV2aWNlKG91dHB1dERlc2MsIGZhbHNlIC8qZnJvbUNhY2hlKi8pOworICAgICAgICBpZiAoZGV2aWNlICE9IG91dHB1dERlc2MtPmRldmljZSgpKSB7CisgICAgICAgICAgICBjaGVja1N0cmF0ZWd5Um91dGUoZ2V0U3RyYXRlZ3koc3RyZWFtKSwgb3V0cHV0RGVzYy0+bUlvSGFuZGxlKTsKKyAgICAgICAgfQorICAgIH0KIAogICAgIGlmIChzdHJlYW0gPT0gQVVESU9fU1RSRUFNX01VU0lDKSB7CiAgICAgICAgIHNlbGVjdE91dHB1dEZvck11c2ljRWZmZWN0cygpOwogICAgIH0KIAotICAgIGlmIChvdXRwdXREZXNjLT5tUmVmQ291bnRbc3RyZWFtXSA9PSAxIHx8IGRldmljZSAhPSBBVURJT19ERVZJQ0VfTk9ORSkgeworICAgIGlmIChvdXRwdXREZXNjLT5zdHJlYW1BY3RpdmVDb3VudChzdHJlYW0pID09IDEgfHwgZGV2aWNlICE9IEFVRElPX0RFVklDRV9OT05FKSB7CiAgICAgICAgIC8vIHN0YXJ0aW5nIGFuIG91dHB1dCBiZWluZyByZXJvdXRlZD8KICAgICAgICAgaWYgKGRldmljZSA9PSBBVURJT19ERVZJQ0VfTk9ORSkgewogICAgICAgICAgICAgZGV2aWNlID0gZ2V0TmV3T3V0cHV0RGV2aWNlKG91dHB1dERlc2MsIGZhbHNlIC8qZnJvbUNhY2hlKi8pOwpAQCAtMTI5OSwxMSArMTQ1OSw2IEBACiAgICAgICAgIGNvbnN0IHVpbnQzMl90IG11dGVXYWl0TXMgPQogICAgICAgICAgICAgICAgIHNldE91dHB1dERldmljZShvdXRwdXREZXNjLCBkZXZpY2UsIGZvcmNlLCAwLCBOVUxMLCBhZGRyZXNzLCByZXF1aXJlc011dGVDaGVjayk7CiAKLSAgICAgICAgLy8gaGFuZGxlIHNwZWNpYWwgY2FzZSBmb3Igc29uaWZpY2F0aW9uIHdoaWxlIGluIGNhbGwKLSAgICAgICAgaWYgKGlzSW5DYWxsKCkpIHsKLSAgICAgICAgICAgIGhhbmRsZUluY2FsbFNvbmlmaWNhdGlvbihzdHJlYW0sIHRydWUsIGZhbHNlKTsKLSAgICAgICAgfQotCiAgICAgICAgIC8vIGFwcGx5IHZvbHVtZSBydWxlcyBmb3IgY3VycmVudCBzdHJlYW0gYW5kIGRldmljZSBpZiBuZWNlc3NhcnkKICAgICAgICAgY2hlY2tBbmRTZXRWb2x1bWUoc3RyZWFtLAogICAgICAgICAgICAgICAgICAgICAgICAgICBtVm9sdW1lQ3VydmVzLT5nZXRWb2x1bWVJbmRleChzdHJlYW0sIG91dHB1dERlc2MtPmRldmljZSgpKSwKQEAgLTEzMzcsNTMgKzE0OTIsMzQgQEAKICAgICAgICAgc2V0U3RyYXRlZ3lNdXRlKFNUUkFURUdZX1NPTklGSUNBVElPTiwgdHJ1ZSwgb3V0cHV0RGVzYyk7CiAgICAgfQogCi0gICAgaWYgKHN0cmVhbSA9PSBBVURJT19TVFJFQU1fRU5GT1JDRURfQVVESUJMRSAmJgotICAgICAgICAgICAgbUVuZ2luZS0+Z2V0Rm9yY2VVc2UoQVVESU9fUE9MSUNZX0ZPUkNFX0ZPUl9TWVNURU0pID09IEFVRElPX1BPTElDWV9GT1JDRV9TWVNURU1fRU5GT1JDRUQpIHsKLSAgICAgICAgc2V0U3RyYXRlZ3lNdXRlKFNUUkFURUdZX1NPTklGSUNBVElPTiwgdHJ1ZSwgb3V0cHV0RGVzYyk7CisgICAgLy8gQXV0b21hdGljYWxseSBlbmFibGUgdGhlIHJlbW90ZSBzdWJtaXggaW5wdXQgd2hlbiBvdXRwdXQgaXMgc3RhcnRlZCBvbiBhIHJlIHJvdXRpbmcgbWl4CisgICAgLy8gb2YgdHlwZSBNSVhfVFlQRV9SRUNPUkRFUlMKKyAgICBpZiAoYXVkaW9faXNfcmVtb3RlX3N1Ym1peF9kZXZpY2UoZGV2aWNlKSAmJiBwb2xpY3lNaXggIT0gTlVMTCAmJgorICAgICAgICBwb2xpY3lNaXgtPm1NaXhUeXBlID09IE1JWF9UWVBFX1JFQ09SREVSUykgeworICAgICAgICBzZXREZXZpY2VDb25uZWN0aW9uU3RhdGVJbnQoQVVESU9fREVWSUNFX0lOX1JFTU9URV9TVUJNSVgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBVURJT19QT0xJQ1lfREVWSUNFX1NUQVRFX0FWQUlMQUJMRSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFkZHJlc3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAicmVtb3RlLXN1Ym1peCIpOwogICAgIH0KIAogICAgIHJldHVybiBOT19FUlJPUjsKIH0KIAotCi1zdGF0dXNfdCBBdWRpb1BvbGljeU1hbmFnZXI6OnN0b3BPdXRwdXQoYXVkaW9faW9faGFuZGxlX3Qgb3V0cHV0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdWRpb19zdHJlYW1fdHlwZV90IHN0cmVhbSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXVkaW9fc2Vzc2lvbl90IHNlc3Npb24pCitzdGF0dXNfdCBBdWRpb1BvbGljeU1hbmFnZXI6OnN0b3BPdXRwdXQoYXVkaW9fcG9ydF9oYW5kbGVfdCBwb3J0SWQpCiB7Ci0gICAgQUxPR1YoInN0b3BPdXRwdXQoKSBvdXRwdXQgJWQsIHN0cmVhbSAlZCwgc2Vzc2lvbiAlZCIsIG91dHB1dCwgc3RyZWFtLCBzZXNzaW9uKTsKLSAgICBzc2l6ZV90IGluZGV4ID0gbU91dHB1dHMuaW5kZXhPZktleShvdXRwdXQpOwotICAgIGlmIChpbmRleCA8IDApIHsKLSAgICAgICAgQUxPR1coInN0b3BPdXRwdXQoKSB1bmtub3duIG91dHB1dCAlZCIsIG91dHB1dCk7CisgICAgQUxPR1YoIiVzIHBvcnRJZCAlZCIsIF9fRlVOQ1RJT05fXywgcG9ydElkKTsKKworICAgIHNwPFN3QXVkaW9PdXRwdXREZXNjcmlwdG9yPiBvdXRwdXREZXNjID0gbU91dHB1dHMuZ2V0T3V0cHV0Rm9yQ2xpZW50KHBvcnRJZCk7CisgICAgaWYgKG91dHB1dERlc2MgPT0gMCkgeworICAgICAgICBBTE9HVygic3RvcE91dHB1dCgpIG5vIG91dHB1dCBmb3IgY2xpZW50ICVkIiwgcG9ydElkKTsKICAgICAgICAgcmV0dXJuIEJBRF9WQUxVRTsKICAgICB9CisgICAgc3A8VHJhY2tDbGllbnREZXNjcmlwdG9yPiBjbGllbnQgPSBvdXRwdXREZXNjLT5nZXRDbGllbnQocG9ydElkKTsKIAotICAgIHNwPFN3QXVkaW9PdXRwdXREZXNjcmlwdG9yPiBvdXRwdXREZXNjID0gbU91dHB1dHMudmFsdWVBdChpbmRleCk7CisgICAgQUxPR1YoInN0b3BPdXRwdXQoKSBvdXRwdXQgJWQsIHN0cmVhbSAlZCwgc2Vzc2lvbiAlZCIsCisgICAgICAgICAgb3V0cHV0RGVzYy0+bUlvSGFuZGxlLCBjbGllbnQtPnN0cmVhbSgpLCBjbGllbnQtPnNlc3Npb24oKSk7CiAKLSAgICBpZiAob3V0cHV0RGVzYy0+bVJlZkNvdW50W3N0cmVhbV0gPT0gMSkgewotICAgICAgICAvLyBBdXRvbWF0aWNhbGx5IGRpc2FibGUgdGhlIHJlbW90ZSBzdWJtaXggaW5wdXQgd2hlbiBvdXRwdXQgaXMgc3RvcHBlZCBvbiBhCi0gICAgICAgIC8vIHJlIHJvdXRpbmcgbWl4IG9mIHR5cGUgTUlYX1RZUEVfUkVDT1JERVJTCi0gICAgICAgIGlmIChhdWRpb19pc19yZW1vdGVfc3VibWl4X2RldmljZShvdXRwdXREZXNjLT5tRGV2aWNlKSAmJgotICAgICAgICAgICAgICAgIG91dHB1dERlc2MtPm1Qb2xpY3lNaXggIT0gTlVMTCAmJgotICAgICAgICAgICAgICAgIG91dHB1dERlc2MtPm1Qb2xpY3lNaXgtPm1NaXhUeXBlID09IE1JWF9UWVBFX1JFQ09SREVSUykgewotICAgICAgICAgICAgc2V0RGV2aWNlQ29ubmVjdGlvblN0YXRlSW50KEFVRElPX0RFVklDRV9JTl9SRU1PVEVfU1VCTUlYLAotICAgICAgICAgICAgICAgICAgICBBVURJT19QT0xJQ1lfREVWSUNFX1NUQVRFX1VOQVZBSUxBQkxFLAotICAgICAgICAgICAgICAgICAgICBvdXRwdXREZXNjLT5tUG9saWN5TWl4LT5tRGV2aWNlQWRkcmVzcywKLSAgICAgICAgICAgICAgICAgICAgInJlbW90ZS1zdWJtaXgiKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIC8vIFJvdXRpbmc/Ci0gICAgYm9vbCBmb3JjZURldmljZVVwZGF0ZSA9IGZhbHNlOwotICAgIGlmIChvdXRwdXREZXNjLT5tUmVmQ291bnRbc3RyZWFtXSA+IDApIHsKLSAgICAgICAgaW50IGFjdGl2aXR5Q291bnQgPSBtT3V0cHV0Um91dGVzLmRlY1JvdXRlQWN0aXZpdHkoc2Vzc2lvbik7Ci0gICAgICAgIGZvcmNlRGV2aWNlVXBkYXRlID0gKG1PdXRwdXRSb3V0ZXMuaGFzUm91dGUoc2Vzc2lvbikgJiYgKGFjdGl2aXR5Q291bnQgPT0gMCkpOwotCi0gICAgICAgIGlmIChmb3JjZURldmljZVVwZGF0ZSkgewotICAgICAgICAgICAgY2hlY2tTdHJhdGVneVJvdXRlKGdldFN0cmF0ZWd5KHN0cmVhbSksIEFVRElPX0lPX0hBTkRMRV9OT05FKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIHN0YXR1c190IHN0YXR1cyA9IHN0b3BTb3VyY2Uob3V0cHV0RGVzYywgc3RyZWFtLCBmb3JjZURldmljZVVwZGF0ZSk7CisgICAgc3RhdHVzX3Qgc3RhdHVzID0gc3RvcFNvdXJjZShvdXRwdXREZXNjLCBjbGllbnQpOwogCiAgICAgaWYgKHN0YXR1cyA9PSBOT19FUlJPUiApIHsKICAgICAgICAgb3V0cHV0RGVzYy0+c3RvcCgpOwpAQCAtMTM5MSwyNCArMTUyNywzOCBAQAogICAgIHJldHVybiBzdGF0dXM7CiB9CiAKLXN0YXR1c190IEF1ZGlvUG9saWN5TWFuYWdlcjo6c3RvcFNvdXJjZShjb25zdCBzcDxBdWRpb091dHB1dERlc2NyaXB0b3I+JiBvdXRwdXREZXNjLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdWRpb19zdHJlYW1fdHlwZV90IHN0cmVhbSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBmb3JjZURldmljZVVwZGF0ZSkKK3N0YXR1c190IEF1ZGlvUG9saWN5TWFuYWdlcjo6c3RvcFNvdXJjZShjb25zdCBzcDxTd0F1ZGlvT3V0cHV0RGVzY3JpcHRvcj4mIG91dHB1dERlc2MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3A8VHJhY2tDbGllbnREZXNjcmlwdG9yPiYgY2xpZW50KQogewogICAgIC8vIGFsd2F5cyBoYW5kbGUgc3RyZWFtIHN0b3AsIGNoZWNrIHdoaWNoIHN0cmVhbSB0eXBlIGlzIHN0b3BwaW5nCisgICAgYXVkaW9fc3RyZWFtX3R5cGVfdCBzdHJlYW0gPSBjbGllbnQtPnN0cmVhbSgpOworCiAgICAgaGFuZGxlRXZlbnRGb3JCZWFjb24oc3RyZWFtID09IEFVRElPX1NUUkVBTV9UVFMgPyBTVE9QUElOR19CRUFDT04gOiBTVE9QUElOR19PVVRQVVQpOwogCi0gICAgLy8gaGFuZGxlIHNwZWNpYWwgY2FzZSBmb3Igc29uaWZpY2F0aW9uIHdoaWxlIGluIGNhbGwKLSAgICBpZiAoaXNJbkNhbGwoKSkgewotICAgICAgICBoYW5kbGVJbmNhbGxTb25pZmljYXRpb24oc3RyZWFtLCBmYWxzZSwgZmFsc2UpOwotICAgIH0KKyAgICBpZiAob3V0cHV0RGVzYy0+c3RyZWFtQWN0aXZlQ291bnQoc3RyZWFtKSA+IDApIHsKKyAgICAgICAgaWYgKG91dHB1dERlc2MtPnN0cmVhbUFjdGl2ZUNvdW50KHN0cmVhbSkgPT0gMSkgeworICAgICAgICAgICAgLy8gQXV0b21hdGljYWxseSBkaXNhYmxlIHRoZSByZW1vdGUgc3VibWl4IGlucHV0IHdoZW4gb3V0cHV0IGlzIHN0b3BwZWQgb24gYQorICAgICAgICAgICAgLy8gcmUgcm91dGluZyBtaXggb2YgdHlwZSBNSVhfVFlQRV9SRUNPUkRFUlMKKyAgICAgICAgICAgIGlmIChhdWRpb19pc19yZW1vdGVfc3VibWl4X2RldmljZShvdXRwdXREZXNjLT5tRGV2aWNlKSAmJgorICAgICAgICAgICAgICAgIG91dHB1dERlc2MtPm1Qb2xpY3lNaXggIT0gTlVMTCAmJgorICAgICAgICAgICAgICAgIG91dHB1dERlc2MtPm1Qb2xpY3lNaXgtPm1NaXhUeXBlID09IE1JWF9UWVBFX1JFQ09SREVSUykgeworICAgICAgICAgICAgICAgIHNldERldmljZUNvbm5lY3Rpb25TdGF0ZUludChBVURJT19ERVZJQ0VfSU5fUkVNT1RFX1NVQk1JWCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQVVESU9fUE9MSUNZX0RFVklDRV9TVEFURV9VTkFWQUlMQUJMRSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3V0cHV0RGVzYy0+bVBvbGljeU1peC0+bURldmljZUFkZHJlc3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJyZW1vdGUtc3VibWl4Iik7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgYm9vbCBmb3JjZURldmljZVVwZGF0ZSA9IGZhbHNlOworICAgICAgICBpZiAoY2xpZW50LT5oYXNQcmVmZXJyZWREZXZpY2UodHJ1ZSkpIHsKKyAgICAgICAgICAgIGNoZWNrU3RyYXRlZ3lSb3V0ZShnZXRTdHJhdGVneShzdHJlYW0pLCBBVURJT19JT19IQU5ETEVfTk9ORSk7CisgICAgICAgICAgICBmb3JjZURldmljZVVwZGF0ZSA9IHRydWU7CisgICAgICAgIH0KIAotICAgIGlmIChvdXRwdXREZXNjLT5tUmVmQ291bnRbc3RyZWFtXSA+IDApIHsKICAgICAgICAgLy8gZGVjcmVtZW50IHVzYWdlIGNvdW50IG9mIHRoaXMgc3RyZWFtIG9uIHRoZSBvdXRwdXQKLSAgICAgICAgb3V0cHV0RGVzYy0+Y2hhbmdlUmVmQ291bnQoc3RyZWFtLCAtMSk7CisgICAgICAgIG91dHB1dERlc2MtPnNldENsaWVudEFjdGl2ZShjbGllbnQsIGZhbHNlKTsKIAogICAgICAgICAvLyBzdG9yZSB0aW1lIGF0IHdoaWNoIHRoZSBzdHJlYW0gd2FzIHN0b3BwZWQgLSBzZWUgaXNTdHJlYW1BY3RpdmUoKQotICAgICAgICBpZiAob3V0cHV0RGVzYy0+bVJlZkNvdW50W3N0cmVhbV0gPT0gMCB8fCBmb3JjZURldmljZVVwZGF0ZSkgeworICAgICAgICBpZiAob3V0cHV0RGVzYy0+c3RyZWFtQWN0aXZlQ291bnQoc3RyZWFtKSA9PSAwIHx8IGZvcmNlRGV2aWNlVXBkYXRlKSB7CiAgICAgICAgICAgICBvdXRwdXREZXNjLT5tU3RvcFRpbWVbc3RyZWFtXSA9IHN5c3RlbVRpbWUoKTsKICAgICAgICAgICAgIGF1ZGlvX2RldmljZXNfdCBuZXdEZXZpY2UgPSBnZXROZXdPdXRwdXREZXZpY2Uob3V0cHV0RGVzYywgZmFsc2UgLypmcm9tQ2FjaGUqLyk7CiAgICAgICAgICAgICAvLyBkZWxheSB0aGUgZGV2aWNlIHN3aXRjaCBieSB0d2ljZSB0aGUgbGF0ZW5jeSBiZWNhdXNlIHN0b3BPdXRwdXQoKSBpcyBleGVjdXRlZCB3aGVuCkBAIC0xNDU5LDM1ICsxNjA5LDQxIEBACiAgICAgfQogfQogCi12b2lkIEF1ZGlvUG9saWN5TWFuYWdlcjo6cmVsZWFzZU91dHB1dChhdWRpb19pb19oYW5kbGVfdCBvdXRwdXQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdWRpb19zdHJlYW1fdHlwZV90IHN0cmVhbSBfX3VudXNlZCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF1ZGlvX3Nlc3Npb25fdCBzZXNzaW9uIF9fdW51c2VkKQordm9pZCBBdWRpb1BvbGljeU1hbmFnZXI6OnJlbGVhc2VPdXRwdXQoYXVkaW9fcG9ydF9oYW5kbGVfdCBwb3J0SWQpCiB7Ci0gICAgQUxPR1YoInJlbGVhc2VPdXRwdXQoKSAlZCIsIG91dHB1dCk7Ci0gICAgc3NpemVfdCBpbmRleCA9IG1PdXRwdXRzLmluZGV4T2ZLZXkob3V0cHV0KTsKLSAgICBpZiAoaW5kZXggPCAwKSB7Ci0gICAgICAgIEFMT0dXKCJyZWxlYXNlT3V0cHV0KCkgcmVsZWFzaW5nIHVua25vd24gb3V0cHV0ICVkIiwgb3V0cHV0KTsKKyAgICBBTE9HVigiJXMgcG9ydElkICVkIiwgX19GVU5DVElPTl9fLCBwb3J0SWQpOworCisgICAgc3A8U3dBdWRpb091dHB1dERlc2NyaXB0b3I+IG91dHB1dERlc2MgPSBtT3V0cHV0cy5nZXRPdXRwdXRGb3JDbGllbnQocG9ydElkKTsKKyAgICBpZiAob3V0cHV0RGVzYyA9PSAwKSB7CisgICAgICAgIC8vIElmIGFuIG91dHB1dCBkZXNjcmlwdG9yIGlzIGNsb3NlZCBkdWUgdG8gYSBkZXZpY2Ugcm91dGluZyBjaGFuZ2UsCisgICAgICAgIC8vIHRoZW4gdGhlcmUgYXJlIHJhY2UgY29uZGl0aW9ucyB3aXRoIHJlbGVhc2VPdXRwdXQgZnJvbSB0cmFja3MKKyAgICAgICAgLy8gdGhhdCBtYXkgYmUgZGVzdHJveWVkICh3aXRoIG5vIFBsYXliYWNrVGhyZWFkKSBvciBhIFBsYXliYWNrVGhyZWFkCisgICAgICAgIC8vIGRlc3Ryb3llZCBzaG9ydGx5IHRoZXJlYWZ0ZXIuCisgICAgICAgIC8vCisgICAgICAgIC8vIEhlcmUgd2UganVzdCBsb2cgYSB3YXJuaW5nLCBpbnN0ZWFkIG9mIGEgZmF0YWwgZXJyb3IuCisgICAgICAgIEFMT0dXKCJyZWxlYXNlT3V0cHV0KCkgbm8gb3V0cHV0IGZvciBjbGllbnQgJWQiLCBwb3J0SWQpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgLy8gUm91dGluZwotICAgIG1PdXRwdXRSb3V0ZXMucmVtb3ZlUm91dGUoc2Vzc2lvbik7CisgICAgQUxPR1YoInJlbGVhc2VPdXRwdXQoKSAlZCIsIG91dHB1dERlc2MtPm1Jb0hhbmRsZSk7CiAKLSAgICBzcDxTd0F1ZGlvT3V0cHV0RGVzY3JpcHRvcj4gZGVzYyA9IG1PdXRwdXRzLnZhbHVlQXQoaW5kZXgpOwotICAgIGlmIChkZXNjLT5tRmxhZ3MgJiBBVURJT19PVVRQVVRfRkxBR19ESVJFQ1QpIHsKLSAgICAgICAgaWYgKGRlc2MtPm1EaXJlY3RPcGVuQ291bnQgPD0gMCkgeworICAgIGlmIChvdXRwdXREZXNjLT5tRmxhZ3MgJiBBVURJT19PVVRQVVRfRkxBR19ESVJFQ1QpIHsKKyAgICAgICAgaWYgKG91dHB1dERlc2MtPm1EaXJlY3RPcGVuQ291bnQgPD0gMCkgewogICAgICAgICAgICAgQUxPR1coInJlbGVhc2VPdXRwdXQoKSBpbnZhbGlkIG9wZW4gY291bnQgJWQgZm9yIG91dHB1dCAlZCIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlc2MtPm1EaXJlY3RPcGVuQ291bnQsIG91dHB1dCk7CisgICAgICAgICAgICAgICAgICBvdXRwdXREZXNjLT5tRGlyZWN0T3BlbkNvdW50LCBvdXRwdXREZXNjLT5tSW9IYW5kbGUpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9Ci0gICAgICAgIGlmICgtLWRlc2MtPm1EaXJlY3RPcGVuQ291bnQgPT0gMCkgewotICAgICAgICAgICAgY2xvc2VPdXRwdXQob3V0cHV0KTsKKyAgICAgICAgaWYgKC0tb3V0cHV0RGVzYy0+bURpcmVjdE9wZW5Db3VudCA9PSAwKSB7CisgICAgICAgICAgICBjbG9zZU91dHB1dChvdXRwdXREZXNjLT5tSW9IYW5kbGUpOwogICAgICAgICAgICAgbXBDbGllbnRJbnRlcmZhY2UtPm9uQXVkaW9Qb3J0TGlzdFVwZGF0ZSgpOwogICAgICAgICB9CiAgICAgfQorICAgIC8vIHN0b3BPdXRwdXQoKSBuZWVkcyB0byBiZSBzdWNjZXNzZnVsbHkgY2FsbGVkIGJlZm9yZSByZWxlYXNlT3V0cHV0KCkKKyAgICAvLyBvdGhlcndpc2UgdGhlcmUgbWF5IGJlIGluYWNjdXJhdGUgc3RyZWFtIHJlZmVyZW5jZSBjb3VudHMuCisgICAgLy8gVGhpcyBpcyBjaGVja2VkIGluIG91dHB1dERlc2MtPnJlbW92ZUNsaWVudCBiZWxvdy4KKyAgICBvdXRwdXREZXNjLT5yZW1vdmVDbGllbnQocG9ydElkKTsKIH0KIAotCiBzdGF0dXNfdCBBdWRpb1BvbGljeU1hbmFnZXI6OmdldElucHV0Rm9yQXR0cihjb25zdCBhdWRpb19hdHRyaWJ1dGVzX3QgKmF0dHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdWRpb19pb19oYW5kbGVfdCAqaW5wdXQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdWRpb19zZXNzaW9uX3Qgc2Vzc2lvbiwKQEAgLTE1MDksNiArMTY2NSwxNiBAQAogICAgIGF1ZGlvX3NvdXJjZV90IGlucHV0U291cmNlID0gYXR0ci0+c291cmNlOwogICAgIEF1ZGlvTWl4ICpwb2xpY3lNaXggPSBOVUxMOwogICAgIERldmljZVZlY3RvciBpbnB1dERldmljZXM7CisgICAgc3A8QXVkaW9JbnB1dERlc2NyaXB0b3I+IGlucHV0RGVzYzsKKyAgICBzcDxSZWNvcmRDbGllbnREZXNjcmlwdG9yPiBjbGllbnREZXNjOworICAgIGF1ZGlvX3BvcnRfaGFuZGxlX3QgcmVxdWVzdGVkRGV2aWNlSWQgPSAqc2VsZWN0ZWREZXZpY2VJZDsKKyAgICBib29sIGlzU291bmRUcmlnZ2VyOworICAgIGF1ZGlvX2RldmljZXNfdCBkZXZpY2U7CisKKyAgICAvLyBUaGUgc3VwcGxpZWQgcG9ydElkIG11c3QgYmUgQVVESU9fUE9SVF9IQU5ETEVfTk9ORQorICAgIGlmICgqcG9ydElkICE9IEFVRElPX1BPUlRfSEFORExFX05PTkUpIHsKKyAgICAgICAgcmV0dXJuIElOVkFMSURfT1BFUkFUSU9OOworICAgIH0KIAogICAgIGlmIChpbnB1dFNvdXJjZSA9PSBBVURJT19TT1VSQ0VfREVGQVVMVCkgewogICAgICAgICBpbnB1dFNvdXJjZSA9IEFVRElPX1NPVVJDRV9NSUM7CkBAIC0xNTE5LDcgKzE2ODUsNiBAQAogICAgIGlmICgqc2VsZWN0ZWREZXZpY2VJZCAhPSBBVURJT19QT1JUX0hBTkRMRV9OT05FKSB7CiAgICAgICAgIGRldmljZURlc2MgPSBtQXZhaWxhYmxlSW5wdXREZXZpY2VzLmdldERldmljZUZyb21JZCgqc2VsZWN0ZWREZXZpY2VJZCk7CiAgICAgfQotICAgIG1JbnB1dFJvdXRlcy5hZGRSb3V0ZShzZXNzaW9uLCBTZXNzaW9uUm91dGU6OlNUUkVBTV9UWVBFX05BLCBpbnB1dFNvdXJjZSwgZGV2aWNlRGVzYywgdWlkKTsKIAogICAgIC8vIHNwZWNpYWwgY2FzZSBmb3IgbW1hcCBjYXB0dXJlOiBpZiBhbiBpbnB1dCBJTyBoYW5kbGUgaXMgc3BlY2lmaWVkLCB3ZSByZXVzZSB0aGlzIGlucHV0IGlmCiAgICAgLy8gcG9zc2libGUKQEAgLTE1MzIsOCArMTY5Nyw4IEBACiAgICAgICAgICAgICBnb3RvIGVycm9yOwogICAgICAgICB9CiAgICAgICAgIHNwPEF1ZGlvSW5wdXREZXNjcmlwdG9yPiBpbnB1dERlc2MgPSBtSW5wdXRzLnZhbHVlQXQoaW5kZXgpOwotICAgICAgICBzcDxBdWRpb1Nlc3Npb24+IGF1ZGlvU2Vzc2lvbiA9IGlucHV0RGVzYy0+Z2V0QXVkaW9TZXNzaW9uKHNlc3Npb24pOwotICAgICAgICBpZiAoYXVkaW9TZXNzaW9uID09IDApIHsKKyAgICAgICAgUmVjb3JkQ2xpZW50VmVjdG9yIGNsaWVudHMgPSBpbnB1dERlc2MtPmdldENsaWVudHNGb3JTZXNzaW9uKHNlc3Npb24pOworICAgICAgICBpZiAoY2xpZW50cy5zaXplKCkgPT0gMCkgewogICAgICAgICAgICAgQUxPR1coImdldElucHV0Rm9yQXR0cigpIHVua25vd24gc2Vzc2lvbiAlZCBvbiBpbnB1dCAlZCIsIHNlc3Npb24sICppbnB1dCk7CiAgICAgICAgICAgICBzdGF0dXMgPSBCQURfVkFMVUU7CiAgICAgICAgICAgICBnb3RvIGVycm9yOwpAQCAtMTU0MiwyOSArMTcwNywyOCBAQAogICAgICAgICAvLyBUaGUgc2Vjb25kIGNhbGwgaXMgZm9yIHRoZSBmaXJzdCBhY3RpdmUgY2xpZW50IGFuZCBzZXRzIHRoZSBVSUQuIEFueSBmdXJ0aGVyIGNhbGwKICAgICAgICAgLy8gY29ycmVzcG9uZHMgdG8gYSBuZXcgY2xpZW50IGFuZCBpcyBvbmx5IHBlcm1pdHRlZCBmcm9tIHRoZSBzYW1lIFVJRC4KICAgICAgICAgLy8gSWYgdGhlIGZpcnN0IFVJRCBpcyBzaWxlbmNlZCwgYWxsb3cgYSBuZXcgVUlEIGNvbm5lY3Rpb24gYW5kIHJlcGxhY2Ugd2l0aCBuZXcgVUlECi0gICAgICAgIGlmIChhdWRpb1Nlc3Npb24tPm9wZW5Db3VudCgpID09IDEpIHsKLSAgICAgICAgICAgIGF1ZGlvU2Vzc2lvbi0+c2V0VWlkKHVpZCk7Ci0gICAgICAgIH0gZWxzZSBpZiAoYXVkaW9TZXNzaW9uLT51aWQoKSAhPSB1aWQpIHsKLSAgICAgICAgICAgIGlmICghYXVkaW9TZXNzaW9uLT5pc1NpbGVuY2VkKCkpIHsKLSAgICAgICAgICAgICAgICBBTE9HVygiZ2V0SW5wdXRGb3JBdHRyKCkgYmFkIHVpZCAlZCBmb3Igc2Vzc2lvbiAlZCB1aWQgJWQiLAotICAgICAgICAgICAgICAgICAgICAgIHVpZCwgc2Vzc2lvbiwgYXVkaW9TZXNzaW9uLT51aWQoKSk7Ci0gICAgICAgICAgICAgICAgc3RhdHVzID0gSU5WQUxJRF9PUEVSQVRJT047Ci0gICAgICAgICAgICAgICAgZ290byBlcnJvcjsKKyAgICAgICAgaWYgKGNsaWVudHMuc2l6ZSgpID4gMSkgeworICAgICAgICAgICAgZm9yIChjb25zdCBhdXRvJiBjbGllbnQgOiBjbGllbnRzKSB7CisgICAgICAgICAgICAgICAgLy8gVGhlIGNsaWVudCBtYXAgaXMgb3JkZXJlZCBieSBrZXkgdmFsdWVzIChwb3J0SWQpIGFuZCBwb3J0SWRzIGFyZSBhbGxvY2F0ZWQKKyAgICAgICAgICAgICAgICAvLyBpbmNyZW1lbnRhbHkuIFNvIHRoZSBmaXJzdCBjbGllbnQgaW4gdGhpcyBsaXN0IGlzIHRoZSBvbmUgb3BlbmVkIGJ5IGF1ZGlvIGZsaW5nZXIKKyAgICAgICAgICAgICAgICAvLyB3aGVuIHRoZSBtbWFwIHN0cmVhbSBpcyBjcmVhdGVkIGFuZCBzaG91bGQgYmUgaWdub3JlZCBhcyBpdCBkb2VzIG5vdCBjb3JyZXNwb25kCisgICAgICAgICAgICAgICAgLy8gdG8gYW4gYWN0dWFsIGNsaWVudAorICAgICAgICAgICAgICAgIGlmIChjbGllbnQgPT0gKmNsaWVudHMuY2JlZ2luKCkpIHsKKyAgICAgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGlmICh1aWQgIT0gY2xpZW50LT51aWQoKSAmJiAhY2xpZW50LT5pc1NpbGVuY2VkKCkpIHsKKyAgICAgICAgICAgICAgICAgICAgQUxPR1coImdldElucHV0Rm9yQXR0cigpIGJhZCB1aWQgJWQgZm9yIGNsaWVudCAlZCB1aWQgJWQiLAorICAgICAgICAgICAgICAgICAgICAgICAgICB1aWQsIGNsaWVudC0+cG9ydElkKCksIGNsaWVudC0+dWlkKCkpOworICAgICAgICAgICAgICAgICAgICBzdGF0dXMgPSBJTlZBTElEX09QRVJBVElPTjsKKyAgICAgICAgICAgICAgICAgICAgZ290byBlcnJvcjsKKyAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBhdWRpb1Nlc3Npb24tPnNldFVpZCh1aWQpOwotICAgICAgICAgICAgYXVkaW9TZXNzaW9uLT5zZXRTaWxlbmNlZChmYWxzZSk7CiAgICAgICAgIH0KLSAgICAgICAgYXVkaW9TZXNzaW9uLT5jaGFuZ2VPcGVuQ291bnQoMSk7CiAgICAgICAgICppbnB1dFR5cGUgPSBBUElfSU5QVVRfTEVHQUNZOwotICAgICAgICBpZiAoKnBvcnRJZCA9PSBBVURJT19QT1JUX0hBTkRMRV9OT05FKSB7Ci0gICAgICAgICAgICAqcG9ydElkID0gQXVkaW9Qb3J0OjpnZXROZXh0VW5pcXVlSWQoKTsKLSAgICAgICAgfQotICAgICAgICBpbnB1dERldmljZXMgPSBtQXZhaWxhYmxlSW5wdXREZXZpY2VzLmdldERldmljZXNGcm9tVHlwZShpbnB1dERlc2MtPm1EZXZpY2UpOwotICAgICAgICAqc2VsZWN0ZWREZXZpY2VJZCA9IGlucHV0RGV2aWNlcy5zaXplKCkgPiAwID8gaW5wdXREZXZpY2VzLml0ZW1BdCgwKS0+Z2V0SWQoKQotICAgICAgICAgICAgICAgIDogQVVESU9fUE9SVF9IQU5ETEVfTk9ORTsKLSAgICAgICAgQUxPR0koIiVzIHJldXNpbmcgTU1BUCBpbnB1dCAlZCBmb3Igc2Vzc2lvbiAlZCIsIF9fRlVOQ1RJT05fXywgKmlucHV0LCBzZXNzaW9uKTsKKyAgICAgICAgZGV2aWNlID0gaW5wdXREZXNjLT5tRGV2aWNlOwogCi0gICAgICAgIHJldHVybiBOT19FUlJPUjsKKyAgICAgICAgQUxPR0koIiVzIHJldXNpbmcgTU1BUCBpbnB1dCAlZCBmb3Igc2Vzc2lvbiAlZCIsIF9fRlVOQ1RJT05fXywgKmlucHV0LCBzZXNzaW9uKTsKKyAgICAgICAgZ290byBleGl0OwogICAgIH0KIAogICAgICppbnB1dCA9IEFVRElPX0lPX0hBTkRMRV9OT05FOwpAQCAtMTU3MiwxMyArMTczNiw2IEBACiAKICAgICBoYWxJbnB1dFNvdXJjZSA9IGlucHV0U291cmNlOwogCi0gICAgLy8gVE9ETzogY2hlY2sgZm9yIGV4aXN0aW5nIGNsaWVudCBmb3IgdGhpcyBwb3J0IElECi0gICAgaWYgKCpwb3J0SWQgPT0gQVVESU9fUE9SVF9IQU5ETEVfTk9ORSkgewotICAgICAgICAqcG9ydElkID0gQXVkaW9Qb3J0OjpnZXROZXh0VW5pcXVlSWQoKTsKLSAgICB9Ci0KLSAgICBhdWRpb19kZXZpY2VzX3QgZGV2aWNlOwotCiAgICAgaWYgKGlucHV0U291cmNlID09IEFVRElPX1NPVVJDRV9SRU1PVEVfU1VCTUlYICYmCiAgICAgICAgICAgICBzdHJuY21wKGF0dHItPnRhZ3MsICJhZGRyPSIsIHN0cmxlbigiYWRkcj0iKSkgPT0gMCkgewogICAgICAgICBzdGF0dXMgPSBtUG9saWN5TWl4ZXMuZ2V0SW5wdXRNaXhGb3JBdHRyKCphdHRyLCAmcG9saWN5TWl4KTsKQEAgLTE1ODksNyArMTc0NiwxMSBAQAogICAgICAgICBkZXZpY2UgPSBBVURJT19ERVZJQ0VfSU5fUkVNT1RFX1NVQk1JWDsKICAgICAgICAgYWRkcmVzcyA9IFN0cmluZzgoYXR0ci0+dGFncyArIHN0cmxlbigiYWRkcj0iKSk7CiAgICAgfSBlbHNlIHsKLSAgICAgICAgZGV2aWNlID0gZ2V0RGV2aWNlQW5kTWl4Rm9ySW5wdXRTb3VyY2UoaW5wdXRTb3VyY2UsICZwb2xpY3lNaXgpOworICAgICAgICBpZiAoZGV2aWNlRGVzYyAhPSAwKSB7CisgICAgICAgICAgICBkZXZpY2UgPSBkZXZpY2VEZXNjLT50eXBlKCk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBkZXZpY2UgPSBnZXREZXZpY2VBbmRNaXhGb3JJbnB1dFNvdXJjZShpbnB1dFNvdXJjZSwgJnBvbGljeU1peCk7CisgICAgICAgIH0KICAgICAgICAgaWYgKGRldmljZSA9PSBBVURJT19ERVZJQ0VfTk9ORSkgewogICAgICAgICAgICAgQUxPR1coImdldElucHV0Rm9yQXR0cigpIGNvdWxkIG5vdCBmaW5kIGRldmljZSBmb3Igc291cmNlICVkIiwgaW5wdXRTb3VyY2UpOwogICAgICAgICAgICAgc3RhdHVzID0gQkFEX1ZBTFVFOwpAQCAtMTYxOCw3ICsxNzc5LDcgQEAKIAogICAgIH0KIAotICAgICppbnB1dCA9IGdldElucHV0Rm9yRGV2aWNlKGRldmljZSwgYWRkcmVzcywgc2Vzc2lvbiwgdWlkLCBpbnB1dFNvdXJjZSwKKyAgICAqaW5wdXQgPSBnZXRJbnB1dEZvckRldmljZShkZXZpY2UsIGFkZHJlc3MsIHNlc3Npb24sIGlucHV0U291cmNlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbmZpZywgZmxhZ3MsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcG9saWN5TWl4KTsKICAgICBpZiAoKmlucHV0ID09IEFVRElPX0lPX0hBTkRMRV9OT05FKSB7CkBAIC0xNjI2LDE3ICsxNzg3LDI4IEBACiAgICAgICAgIGdvdG8gZXJyb3I7CiAgICAgfQogCi0gICAgaW5wdXREZXZpY2VzID0gbUF2YWlsYWJsZUlucHV0RGV2aWNlcy5nZXREZXZpY2VzRnJvbVR5cGUoZGV2aWNlKTsKLSAgICAqc2VsZWN0ZWREZXZpY2VJZCA9IGlucHV0RGV2aWNlcy5zaXplKCkgPiAwID8gaW5wdXREZXZpY2VzLml0ZW1BdCgwKS0+Z2V0SWQoKQotICAgICAgICAgICAgOiBBVURJT19QT1JUX0hBTkRMRV9OT05FOworZXhpdDoKIAotICAgIEFMT0dWKCJnZXRJbnB1dEZvckF0dHIoKSByZXR1cm5zIGlucHV0ICVkIHR5cGUgJWQgc2VsZWN0ZWREZXZpY2VJZCAlZCIsCi0gICAgICAgICAgICAqaW5wdXQsICppbnB1dFR5cGUsICpzZWxlY3RlZERldmljZUlkKTsKKyAgICBpbnB1dERldmljZXMgPSBtQXZhaWxhYmxlSW5wdXREZXZpY2VzLmdldERldmljZXNGcm9tVHlwZU1hc2soZGV2aWNlKTsKKyAgICAqc2VsZWN0ZWREZXZpY2VJZCA9IGlucHV0RGV2aWNlcy5zaXplKCkgPiAwID8gaW5wdXREZXZpY2VzLml0ZW1BdCgwKS0+Z2V0SWQoKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBBVURJT19QT1JUX0hBTkRMRV9OT05FOworCisgICAgaXNTb3VuZFRyaWdnZXIgPSBpbnB1dFNvdXJjZSA9PSBBVURJT19TT1VSQ0VfSE9UV09SRCAmJgorICAgICAgICBtU291bmRUcmlnZ2VyU2Vzc2lvbnMuaW5kZXhPZktleShzZXNzaW9uKSA+IDA7CisgICAgKnBvcnRJZCA9IEF1ZGlvUG9ydDo6Z2V0TmV4dFVuaXF1ZUlkKCk7CisKKyAgICBjbGllbnREZXNjID0gbmV3IFJlY29yZENsaWVudERlc2NyaXB0b3IoKnBvcnRJZCwgdWlkLCBzZXNzaW9uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICphdHRyLCAqY29uZmlnLCByZXF1ZXN0ZWREZXZpY2VJZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnB1dFNvdXJjZSxmbGFncywgaXNTb3VuZFRyaWdnZXIpOworICAgIGlucHV0RGVzYyA9IG1JbnB1dHMudmFsdWVGb3IoKmlucHV0KTsKKyAgICBpbnB1dERlc2MtPmFkZENsaWVudChjbGllbnREZXNjKTsKKworICAgIEFMT0dWKCJnZXRJbnB1dEZvckF0dHIoKSByZXR1cm5zIGlucHV0ICVkIHR5cGUgJWQgc2VsZWN0ZWREZXZpY2VJZCAlZCBmb3IgcG9ydCBJRCAlZCIsCisgICAgICAgICAgICAqaW5wdXQsICppbnB1dFR5cGUsICpzZWxlY3RlZERldmljZUlkLCAqcG9ydElkKTsKIAogICAgIHJldHVybiBOT19FUlJPUjsKIAogZXJyb3I6Ci0gICAgbUlucHV0Um91dGVzLnJlbW92ZVJvdXRlKHNlc3Npb24pOwogICAgIHJldHVybiBzdGF0dXM7CiB9CiAKQEAgLTE2NDQsNyArMTgxNiw2IEBACiBhdWRpb19pb19oYW5kbGVfdCBBdWRpb1BvbGljeU1hbmFnZXI6OmdldElucHV0Rm9yRGV2aWNlKGF1ZGlvX2RldmljZXNfdCBkZXZpY2UsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN0cmluZzggYWRkcmVzcywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXVkaW9fc2Vzc2lvbl90IHNlc3Npb24sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpZF90IHVpZCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXVkaW9fc291cmNlX3QgaW5wdXRTb3VyY2UsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGF1ZGlvX2NvbmZpZ19iYXNlX3QgKmNvbmZpZywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXVkaW9faW5wdXRfZmxhZ3NfdCBmbGFncywKQEAgLTE3MDYsODIgKzE4NzcsNiBAQAogICAgICAgICByZXR1cm4gaW5wdXQ7CiAgICAgfQogCi0gICAgc3A8QXVkaW9TZXNzaW9uPiBhdWRpb1Nlc3Npb24gPSBuZXcgQXVkaW9TZXNzaW9uKHNlc3Npb24sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlucHV0U291cmNlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25maWctPmZvcm1hdCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2FtcGxpbmdSYXRlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25maWctPmNoYW5uZWxfbWFzaywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmxhZ3MsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpZCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXNTb3VuZFRyaWdnZXIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBvbGljeU1peCwgbXBDbGllbnRJbnRlcmZhY2UpOwotCi0vLyBGSVhNRTogZGlzYWJsZSBjb25jdXJyZW50IGNhcHR1cmUgdW50aWwgVUkgaXMgcmVhZHkKLSNpZiAwCi0gICAgLy8gcmV1c2UgYW4gb3BlbiBpbnB1dCBpZiBwb3NzaWJsZQotICAgIHNwPEF1ZGlvSW5wdXREZXNjcmlwdG9yPiByZXVzZWRJbnB1dERlc2M7Ci0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtSW5wdXRzLnNpemUoKTsgaSsrKSB7Ci0gICAgICAgIHNwPEF1ZGlvSW5wdXREZXNjcmlwdG9yPiBkZXNjID0gbUlucHV0cy52YWx1ZUF0KGkpOwotICAgICAgICAvLyByZXVzZSBpbnB1dCBpZjoKLSAgICAgICAgLy8gLSBpdCBzaGFyZXMgdGhlIHNhbWUgcHJvZmlsZQotICAgICAgICAvLyAgICAgIEFORAotICAgICAgICAvLyAtIGl0IGlzIG5vdCBhIHJlcm91dGUgc3VibWl4IGlucHV0Ci0gICAgICAgIC8vICAgICAgQU5ECi0gICAgICAgIC8vIC0gaXQgaXM6IG5vdCB1c2VkIGZvciBzb3VuZCB0cmlnZ2VyCi0gICAgICAgIC8vICAgICAgICAgICAgICAgIE9SCi0gICAgICAgIC8vICAgICAgICAgIHVzZWQgZm9yIHNvdW5kIHRyaWdnZXIgYW5kIGFsbCBjbGllbnRzIHVzZSB0aGUgc2FtZSBzZXNzaW9uIElECi0gICAgICAgIC8vCi0gICAgICAgIGlmICgocHJvZmlsZSA9PSBkZXNjLT5tUHJvZmlsZSkgJiYKLSAgICAgICAgICAgIChpc1NvdW5kVHJpZ2dlciA9PSBkZXNjLT5pc1NvdW5kVHJpZ2dlcigpKSAmJgotICAgICAgICAgICAgIWlzX3ZpcnR1YWxfaW5wdXRfZGV2aWNlKGRldmljZSkpIHsKLQotICAgICAgICAgICAgc3A8QXVkaW9TZXNzaW9uPiBhcyA9IGRlc2MtPmdldEF1ZGlvU2Vzc2lvbihzZXNzaW9uKTsKLSAgICAgICAgICAgIGlmIChhcyAhPSAwKSB7Ci0gICAgICAgICAgICAgICAgLy8gZG8gbm90IGFsbG93IHVubWF0Y2hpbmcgcHJvcGVydGllcyBvbiBzYW1lIHNlc3Npb24KLSAgICAgICAgICAgICAgICBpZiAoYXMtPm1hdGNoZXMoYXVkaW9TZXNzaW9uKSkgewotICAgICAgICAgICAgICAgICAgICBhcy0+Y2hhbmdlT3BlbkNvdW50KDEpOwotICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgIEFMT0dXKCJnZXRJbnB1dEZvckRldmljZSgpIHJlY29yZCB3aXRoIGRpZmZlcmVudCBhdHRyaWJ1dGVzIgotICAgICAgICAgICAgICAgICAgICAgICAgICAiIGV4aXN0cyBmb3Igc2Vzc2lvbiAlZCIsIHNlc3Npb24pOwotICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9IGVsc2UgaWYgKGlzU291bmRUcmlnZ2VyKSB7Ci0gICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIC8vIFJldXNlIHRoZSBhbHJlYWR5IG9wZW5lZCBpbnB1dCBzdHJlYW0gb24gdGhpcyBwcm9maWxlIGlmOgotICAgICAgICAgICAgLy8gLSB0aGUgbmV3IGNhcHR1cmUgc291cmNlIGlzIGJhY2tncm91bmQgT1IKLSAgICAgICAgICAgIC8vIC0gdGhlIHBhdGggcmVxdWVzdGVkIGNvbmZpZ3VyYXRpb25zIG1hdGNoIE9SCi0gICAgICAgICAgICAvLyAtIHRoZSBuZXcgc291cmNlIHByaW9yaXR5IGlzIGxlc3MgdGhhbiB0aGUgaGlnaGVzdCBzb3VyY2UgcHJpb3JpdHkgb24gdGhpcyBpbnB1dAotICAgICAgICAgICAgLy8gSWYgdGhlIGlucHV0IHN0cmVhbSBjYW5ub3QgYmUgcmV1c2VkLCBjbG9zZSBpdCBiZWZvcmUgb3BlbmluZyBhIG5ldyBzdHJlYW0KLSAgICAgICAgICAgIC8vIG9uIHRoZSBzYW1lIHByb2ZpbGUgZm9yIHRoZSBuZXcgY2xpZW50IHNvIHRoYXQgdGhlIHJlcXVlc3RlZCBwYXRoIGNvbmZpZ3VyYXRpb24KLSAgICAgICAgICAgIC8vIGNhbiBiZSBzZWxlY3RlZC4KLSAgICAgICAgICAgIGlmICghaXNDb25jdXJyZW50U291cmNlKGlucHV0U291cmNlKSAmJgotICAgICAgICAgICAgICAgICAgICAoKGRlc2MtPm1TYW1wbGluZ1JhdGUgIT0gc2FtcGxpbmdSYXRlIHx8Ci0gICAgICAgICAgICAgICAgICAgIGRlc2MtPm1DaGFubmVsTWFzayAhPSBjb25maWctPmNoYW5uZWxfbWFzayB8fAotICAgICAgICAgICAgICAgICAgICAhYXVkaW9fZm9ybWF0c19tYXRjaChkZXNjLT5tRm9ybWF0LCBjb25maWctPmZvcm1hdCkpICYmCi0gICAgICAgICAgICAgICAgICAgIChzb3VyY2VfcHJpb3JpdHkoZGVzYy0+Z2V0SGlnaGVzdFByaW9yaXR5U291cmNlKGZhbHNlIC8qYWN0aXZlT25seSovKSkgPAotICAgICAgICAgICAgICAgICAgICAgc291cmNlX3ByaW9yaXR5KGlucHV0U291cmNlKSkpKSB7Ci0gICAgICAgICAgICAgICAgcmV1c2VkSW5wdXREZXNjID0gZGVzYzsKLSAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgZGVzYy0+YWRkQXVkaW9TZXNzaW9uKHNlc3Npb24sIGF1ZGlvU2Vzc2lvbik7Ci0gICAgICAgICAgICAgICAgQUxPR1YoIiVzOiByZXVzaW5nIGlucHV0ICVkIiwgX19GVU5DVElPTl9fLCBtSW5wdXRzLmtleUF0KGkpKTsKLSAgICAgICAgICAgICAgICByZXR1cm4gbUlucHV0cy5rZXlBdChpKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLQotICAgIGlmIChyZXVzZWRJbnB1dERlc2MgIT0gMCkgewotICAgICAgICBBdWRpb1Nlc3Npb25Db2xsZWN0aW9uIHNlc3Npb25zID0gcmV1c2VkSW5wdXREZXNjLT5nZXRBdWRpb1Nlc3Npb25zKGZhbHNlIC8qYWN0aXZlT25seSovKTsKLSAgICAgICAgZm9yIChzaXplX3QgaiA9IDA7IGogPCBzZXNzaW9ucy5zaXplKCk7IGorKykgewotICAgICAgICAgICAgYXVkaW9fc2Vzc2lvbl90IGN1cnJlbnRTZXNzaW9uID0gc2Vzc2lvbnMua2V5QXQoaik7Ci0gICAgICAgICAgICBzdG9wSW5wdXQocmV1c2VkSW5wdXREZXNjLT5tSW9IYW5kbGUsIGN1cnJlbnRTZXNzaW9uKTsKLSAgICAgICAgICAgIHJlbGVhc2VJbnB1dChyZXVzZWRJbnB1dERlc2MtPm1Jb0hhbmRsZSwgY3VycmVudFNlc3Npb24pOwotICAgICAgICB9Ci0gICAgfQotI2VuZGlmCi0KICAgICBpZiAoIXByb2ZpbGUtPmNhbk9wZW5OZXdJbygpKSB7CiAgICAgICAgIHJldHVybiBBVURJT19JT19IQU5ETEVfTk9ORTsKICAgICB9CkBAIC0xNzk0LDcgKzE4ODksNyBAQAogICAgIGxDb25maWcuZm9ybWF0ID0gcHJvZmlsZUZvcm1hdDsKIAogICAgIGlmIChhZGRyZXNzID09ICIiKSB7Ci0gICAgICAgIERldmljZVZlY3RvciBpbnB1dERldmljZXMgPSBtQXZhaWxhYmxlSW5wdXREZXZpY2VzLmdldERldmljZXNGcm9tVHlwZShkZXZpY2UpOworICAgICAgICBEZXZpY2VWZWN0b3IgaW5wdXREZXZpY2VzID0gbUF2YWlsYWJsZUlucHV0RGV2aWNlcy5nZXREZXZpY2VzRnJvbVR5cGVNYXNrKGRldmljZSk7CiAgICAgICAgIC8vIHRoZSBpbnB1dHMgdmVjdG9yIG11c3QgYmUgb2Ygc2l6ZSA+PSAxLCBidXQgd2UgZG9uJ3Qgd2FudCB0byBjcmFzaCBoZXJlCiAgICAgICAgIGFkZHJlc3MgPSBpbnB1dERldmljZXMuc2l6ZSgpID4gMCA/IGlucHV0RGV2aWNlcy5pdGVtQXQoMCktPm1BZGRyZXNzIDogU3RyaW5nOCgiIik7CiAgICAgfQpAQCAtMTgxNyw3ICsxOTEyLDYgQEAKICAgICB9CiAKICAgICBpbnB1dERlc2MtPm1Qb2xpY3lNaXggPSBwb2xpY3lNaXg7Ci0gICAgaW5wdXREZXNjLT5hZGRBdWRpb1Nlc3Npb24oc2Vzc2lvbiwgYXVkaW9TZXNzaW9uKTsKIAogICAgIGFkZElucHV0KGlucHV0LCBpbnB1dERlc2MpOwogICAgIG1wQ2xpZW50SW50ZXJmYWNlLT5vbkF1ZGlvUG9ydExpc3RVcGRhdGUoKTsKQEAgLTE4MzMsMzkgKzE5MjcsNiBAQAogICAgICAgICAgICAgKHNvdXJjZSA9PSBBVURJT19TT1VSQ0VfRk1fVFVORVIpOwogfQogCi1ib29sIEF1ZGlvUG9saWN5TWFuYWdlcjo6aXNDb25jdXJlbnRDYXB0dXJlQWxsb3dlZChjb25zdCBzcDxBdWRpb0lucHV0RGVzY3JpcHRvcj4mIGlucHV0RGVzYywKLSAgICAgICAgY29uc3Qgc3A8QXVkaW9TZXNzaW9uPiYgYXVkaW9TZXNzaW9uKQotewotICAgIC8vIERvIG5vdCBhbGxvdyBjYXB0dXJlIGlmIGFuIGFjdGl2ZSB2b2ljZSBjYWxsIGlzIHVzaW5nIGEgc29mdHdhcmUgcGF0Y2ggYW5kCi0gICAgLy8gdGhlIGNhbGwgVFggc291cmNlIGRldmljZSBpcyBvbiB0aGUgc2FtZSBIVyBtb2R1bGUuCi0gICAgLy8gRklYTUU6IHdvdWxkIGJlIGJldHRlciB0byByZWZpbmUgdG8gb25seSBpbnB1dHMgd2hvc2UgcHJvZmlsZSBjb25uZWN0cyB0byB0aGUKLSAgICAvLyBjYWxsIFRYIGRldmljZSBidXQgdGhpcyBpbmZvcm1hdGlvbiBpcyBub3QgaW4gdGhlIGF1ZGlvIHBhdGNoCi0gICAgaWYgKG1DYWxsVHhQYXRjaCAhPSAwICYmCi0gICAgICAgIGlucHV0RGVzYy0+Z2V0TW9kdWxlSGFuZGxlKCkgPT0gbUNhbGxUeFBhdGNoLT5tUGF0Y2guc291cmNlc1swXS5leHQuZGV2aWNlLmh3X21vZHVsZSkgewotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgLy8gc3RhcnRpbmcgY29uY3VycmVudCBjYXB0dXJlIGlzIGVuYWJsZWQgaWY6Ci0gICAgLy8gMSkgY2FwdHVyaW5nIGZvciByZS1yb3V0aW5nCi0gICAgLy8gMikgY2FwdHVyaW5nIGZvciBIT1RXT1JEIHNvdXJjZQotICAgIC8vIDMpIGNhcHR1cmluZyBmb3IgRk0gVFVORVIgc291cmNlCi0gICAgLy8gMykgQWxsIG90aGVyIGFjdGl2ZSBjYXB0dXJlcyBhcmUgZWl0aGVyIGZvciByZS1yb3V0aW5nIG9yIEhPVFdPUkQKLQotICAgIGlmIChpc192aXJ0dWFsX2lucHV0X2RldmljZShpbnB1dERlc2MtPm1EZXZpY2UpIHx8Ci0gICAgICAgICAgICBpc0NvbmN1cnJlbnRTb3VyY2UoYXVkaW9TZXNzaW9uLT5pbnB1dFNvdXJjZSgpKSkgewotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0KLSAgICBmb3IgKGNvbnN0IGF1dG8mIGFjdGl2ZUlucHV0IDogbUlucHV0cy5nZXRBY3RpdmVJbnB1dHMoKSkgewotICAgICAgICBpZiAoIWlzQ29uY3VycmVudFNvdXJjZShhY3RpdmVJbnB1dC0+aW5wdXRTb3VyY2UodHJ1ZSkpICYmCi0gICAgICAgICAgICAgICAgIWlzX3ZpcnR1YWxfaW5wdXRfZGV2aWNlKGFjdGl2ZUlucHV0LT5tRGV2aWNlKSkgewotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgcmV0dXJuIHRydWU7Ci19Ci0KIC8vIEZJWE1FOiByZW1vdmUgd2hlbiBjb25jdXJyZW50IGNhcHR1cmUgaXMgcmVhZHkuIFRoaXMgaXMgYSBoYWNrIHRvIHdvcmsgYXJvdW5kIGJ1ZyBiLzYzMDgzNTM3LgogYm9vbCBBdWRpb1BvbGljeU1hbmFnZXI6OnNvdW5kVHJpZ2dlclN1cHBvcnRzQ29uY3VycmVudENhcHR1cmUoKSB7CiAgICAgaWYgKCFtSGFzQ29tcHV0ZWRTb3VuZFRyaWdnZXJTdXBwb3J0c0NvbmN1cnJlbnRDYXB0dXJlKSB7CkBAIC0xOTAxLDQ0ICsxOTYyLDMxIEBACiB9CiAKIAotc3RhdHVzX3QgQXVkaW9Qb2xpY3lNYW5hZ2VyOjpzdGFydElucHV0KGF1ZGlvX2lvX2hhbmRsZV90IGlucHV0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF1ZGlvX3Nlc3Npb25fdCBzZXNzaW9uLAorc3RhdHVzX3QgQXVkaW9Qb2xpY3lNYW5hZ2VyOjpzdGFydElucHV0KGF1ZGlvX3BvcnRfaGFuZGxlX3QgcG9ydElkLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgc2lsZW5jZWQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uY3VycmVuY3lfdHlwZV9fbWFza190ICpjb25jdXJyZW5jeSkKIHsKLQotICAgIEFMT0dWKCJBdWRpb1BvbGljeU1hbmFnZXI6OnN0YXJ0SW5wdXQoaW5wdXQ6JWQsIHNlc3Npb246JWQsIHNpbGVuY2VkOiVkLCBjb25jdXJyZW5jeTolZCkiLAotICAgICAgICAgICAgaW5wdXQsIHNlc3Npb24sIHNpbGVuY2VkLCAqY29uY3VycmVuY3kpOwotCiAgICAgKmNvbmN1cnJlbmN5ID0gQVBJX0lOUFVUX0NPTkNVUlJFTkNZX05PTkU7CiAKLSAgICBzc2l6ZV90IGluZGV4ID0gbUlucHV0cy5pbmRleE9mS2V5KGlucHV0KTsKLSAgICBpZiAoaW5kZXggPCAwKSB7Ci0gICAgICAgIEFMT0dXKCJzdGFydElucHV0KCkgdW5rbm93biBpbnB1dCAlZCIsIGlucHV0KTsKKyAgICBBTE9HVigiJXMgcG9ydElkICVkIiwgX19GVU5DVElPTl9fLCBwb3J0SWQpOworCisgICAgc3A8QXVkaW9JbnB1dERlc2NyaXB0b3I+IGlucHV0RGVzYyA9IG1JbnB1dHMuZ2V0SW5wdXRGb3JDbGllbnQocG9ydElkKTsKKyAgICBpZiAoaW5wdXREZXNjID09IDApIHsKKyAgICAgICAgQUxPR1coIiVzIG5vIGlucHV0IGZvciBjbGllbnQgJWQiLCBfX0ZVTkNUSU9OX18sIHBvcnRJZCk7CiAgICAgICAgIHJldHVybiBCQURfVkFMVUU7CiAgICAgfQotICAgIHNwPEF1ZGlvSW5wdXREZXNjcmlwdG9yPiBpbnB1dERlc2MgPSBtSW5wdXRzLnZhbHVlQXQoaW5kZXgpOwotCi0gICAgc3A8QXVkaW9TZXNzaW9uPiBhdWRpb1Nlc3Npb24gPSBpbnB1dERlc2MtPmdldEF1ZGlvU2Vzc2lvbihzZXNzaW9uKTsKLSAgICBpZiAoYXVkaW9TZXNzaW9uID09IDApIHsKLSAgICAgICAgQUxPR1coInN0YXJ0SW5wdXQoKSB1bmtub3duIHNlc3Npb24gJWQgb24gaW5wdXQgJWQiLCBzZXNzaW9uLCBpbnB1dCk7Ci0gICAgICAgIHJldHVybiBCQURfVkFMVUU7Ci0gICAgfQotCi0vLyBGSVhNRTogZGlzYWJsZSBjb25jdXJyZW50IGNhcHR1cmUgdW50aWwgVUkgaXMgcmVhZHkKLSNpZiAwCi0gICAgaWYgKCFpc0NvbmN1cmVudENhcHR1cmVBbGxvd2VkKGlucHV0RGVzYywgYXVkaW9TZXNzaW9uKSkgewotICAgICAgICBBTE9HVygic3RhcnRJbnB1dCglZCkgZmFpbGVkOiBvdGhlciBpbnB1dCBhbHJlYWR5IHN0YXJ0ZWQiLCBpbnB1dCk7CisgICAgYXVkaW9faW9faGFuZGxlX3QgaW5wdXQgPSBpbnB1dERlc2MtPm1Jb0hhbmRsZTsKKyAgICBzcDxSZWNvcmRDbGllbnREZXNjcmlwdG9yPiBjbGllbnQgPSBpbnB1dERlc2MtPmdldENsaWVudChwb3J0SWQpOworICAgIGlmIChjbGllbnQtPmFjdGl2ZSgpKSB7CisgICAgICAgIEFMT0dXKCIlcyBpbnB1dCAlZCBjbGllbnQgJWQgYWxyZWFkeSBzdGFydGVkIiwgX19GVU5DVElPTl9fLCBpbnB1dCwgY2xpZW50LT5wb3J0SWQoKSk7CiAgICAgICAgIHJldHVybiBJTlZBTElEX09QRVJBVElPTjsKICAgICB9CiAKLSAgICBpZiAoaXNJbkNhbGwoKSkgewotICAgICAgICAqY29uY3VycmVuY3kgfD0gQVBJX0lOUFVUX0NPTkNVUlJFTkNZX0NBTEw7Ci0gICAgfQotICAgIGlmIChtSW5wdXRzLmFjdGl2ZUlucHV0c0NvdW50T25EZXZpY2VzKCkgIT0gMCkgewotICAgICAgICAqY29uY3VycmVuY3kgfD0gQVBJX0lOUFVUX0NPTkNVUlJFTkNZX0NBUFRVUkU7Ci0gICAgfQotI2Vsc2UKKyAgICBhdWRpb19zZXNzaW9uX3Qgc2Vzc2lvbiA9IGNsaWVudC0+c2Vzc2lvbigpOworCisgICAgQUxPR1YoIiVzIGlucHV0OiVkLCBzZXNzaW9uOiVkLCBzaWxlbmNlZDolZCwgY29uY3VycmVuY3k6JWQpIiwKKyAgICAgICAgX19GVU5DVElPTl9fLCBpbnB1dCwgc2Vzc2lvbiwgc2lsZW5jZWQsICpjb25jdXJyZW5jeSk7CisKICAgICBpZiAoIWlzX3ZpcnR1YWxfaW5wdXRfZGV2aWNlKGlucHV0RGVzYy0+bURldmljZSkpIHsKICAgICAgICAgaWYgKG1DYWxsVHhQYXRjaCAhPSAwICYmCiAgICAgICAgICAgICBpbnB1dERlc2MtPmdldE1vZHVsZUhhbmRsZSgpID09IG1DYWxsVHhQYXRjaC0+bVBhdGNoLnNvdXJjZXNbMF0uZXh0LmRldmljZS5od19tb2R1bGUpIHsKQEAgLTE5NTQsNTAgKzIwMDIsNDggQEAKICAgICAgICAgLy8gZmF2b3Igb2YgdGhlIG5ldyBvbmUgLSAiVGhlcmUgY2FuIGJlIG9ubHkgb25lIiBUTQogICAgICAgICBpZiAoIXNpbGVuY2VkKSB7CiAgICAgICAgICAgICBmb3IgKGNvbnN0IGF1dG8mIGFjdGl2ZURlc2MgOiBhY3RpdmVJbnB1dHMpIHsKLSAgICAgICAgICAgICAgICBpZiAoKGF1ZGlvU2Vzc2lvbi0+ZmxhZ3MoKSAmIEFVRElPX0lOUFVUX0ZMQUdfTU1BUF9OT0lSUSkgIT0gMCAmJgorICAgICAgICAgICAgICAgIGlmICgoYWN0aXZlRGVzYy0+Z2V0QXVkaW9Qb3J0KCktPmdldEZsYWdzKCkgJiBBVURJT19JTlBVVF9GTEFHX01NQVBfTk9JUlEpICE9IDAgJiYKICAgICAgICAgICAgICAgICAgICAgICAgIGFjdGl2ZURlc2MtPmdldElkKCkgPT0gaW5wdXREZXNjLT5nZXRJZCgpKSB7CiAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgICAgICBBdWRpb1Nlc3Npb25Db2xsZWN0aW9uIGFjdGl2ZVNlc3Npb25zID0gYWN0aXZlRGVzYy0+Z2V0QXVkaW9TZXNzaW9ucygKLSAgICAgICAgICAgICAgICAgICAgICAgIHRydWUgLyphY3RpdmVPbmx5Ki8pOwotICAgICAgICAgICAgICAgIHNwPEF1ZGlvU2Vzc2lvbj4gYWN0aXZlU2Vzc2lvbiA9IGFjdGl2ZVNlc3Npb25zLnZhbHVlQXQoMCk7Ci0gICAgICAgICAgICAgICAgaWYgKGFjdGl2ZVNlc3Npb24tPmlzU2lsZW5jZWQoKSkgewotICAgICAgICAgICAgICAgICAgICBhdWRpb19pb19oYW5kbGVfdCBhY3RpdmVJbnB1dCA9IGFjdGl2ZURlc2MtPm1Jb0hhbmRsZTsKLSAgICAgICAgICAgICAgICAgICAgYXVkaW9fc2Vzc2lvbl90IGFjdGl2ZVNlc3Npb25JZCA9IGFjdGl2ZVNlc3Npb24tPnNlc3Npb24oKTsKLSAgICAgICAgICAgICAgICAgICAgc3RvcElucHV0KGFjdGl2ZUlucHV0LCBhY3RpdmVTZXNzaW9uSWQpOwotICAgICAgICAgICAgICAgICAgICByZWxlYXNlSW5wdXQoYWN0aXZlSW5wdXQsIGFjdGl2ZVNlc3Npb25JZCk7Ci0gICAgICAgICAgICAgICAgICAgIEFMT0dWKCJzdGFydElucHV0KCVkKSBzdG9wcGluZyBzaWxlbmNlZCBpbnB1dCAlZCIsIGlucHV0LCBhY3RpdmVJbnB1dCk7Ci0gICAgICAgICAgICAgICAgICAgIGFjdGl2ZUlucHV0cyA9IG1JbnB1dHMuZ2V0QWN0aXZlSW5wdXRzKCk7CisgICAgICAgICAgICAgICAgUmVjb3JkQ2xpZW50VmVjdG9yIGFjdGl2ZUNsaWVudHMgPSBhY3RpdmVEZXNjLT5jbGllbnRzTGlzdCh0cnVlIC8qYWN0aXZlT25seSovKTsKKyAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IGF1dG8mIGFjdGl2ZUNsaWVudCA6IGFjdGl2ZUNsaWVudHMpIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGFjdGl2ZUNsaWVudC0+aXNTaWxlbmNlZCgpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBjbG9zZUNsaWVudChhY3RpdmVDbGllbnQtPnBvcnRJZCgpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIEFMT0dWKCIlcyBjbGllbnQgJWQgc3RvcHBpbmcgc2lsZW5jZWQgY2xpZW50ICVkIiwgX19GVU5DVElPTl9fLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcG9ydElkLCBhY3RpdmVDbGllbnQtPnBvcnRJZCgpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGFjdGl2ZUlucHV0cyA9IG1JbnB1dHMuZ2V0QWN0aXZlSW5wdXRzKCk7CisgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KIAogICAgICAgICBmb3IgKGNvbnN0IGF1dG8mIGFjdGl2ZURlc2MgOiBhY3RpdmVJbnB1dHMpIHsKLSAgICAgICAgICAgIGlmICgoYXVkaW9TZXNzaW9uLT5mbGFncygpICYgQVVESU9fSU5QVVRfRkxBR19NTUFQX05PSVJRKSAhPSAwICYmCisgICAgICAgICAgICBpZiAoKGNsaWVudC0+ZmxhZ3MoKSAmIEFVRElPX0lOUFVUX0ZMQUdfTU1BUF9OT0lSUSkgIT0gMCAmJgogICAgICAgICAgICAgICAgICAgICBhY3RpdmVEZXNjLT5nZXRJZCgpID09IGlucHV0RGVzYy0+Z2V0SWQoKSkgewogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgfQogCiAgICAgICAgICAgICBhdWRpb19zb3VyY2VfdCBhY3RpdmVTb3VyY2UgPSBhY3RpdmVEZXNjLT5pbnB1dFNvdXJjZSh0cnVlKTsKLSAgICAgICAgICAgIGlmIChhdWRpb1Nlc3Npb24tPmlucHV0U291cmNlKCkgPT0gQVVESU9fU09VUkNFX0hPVFdPUkQpIHsKKyAgICAgICAgICAgIGlmIChjbGllbnQtPnNvdXJjZSgpID09IEFVRElPX1NPVVJDRV9IT1RXT1JEKSB7CiAgICAgICAgICAgICAgICAgaWYgKGFjdGl2ZVNvdXJjZSA9PSBBVURJT19TT1VSQ0VfSE9UV09SRCkgewogICAgICAgICAgICAgICAgICAgICBpZiAoYWN0aXZlRGVzYy0+aGFzUHJlZW1wdGVkU2Vzc2lvbihzZXNzaW9uKSkgewotICAgICAgICAgICAgICAgICAgICAgICAgQUxPR1coInN0YXJ0SW5wdXQoJWQpIGZhaWxlZCBmb3IgSE9UV09SRDogIgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAib3RoZXIgaW5wdXQgJWQgYWxyZWFkeSBzdGFydGVkIGZvciBIT1RXT1JEIiwKKyAgICAgICAgICAgICAgICAgICAgICAgIEFMT0dXKCIlcyBpbnB1dCAlZCBmYWlsZWQgZm9yIEhPVFdPUkQ6ICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIm90aGVyIGlucHV0ICVkIGFscmVhZHkgc3RhcnRlZCBmb3IgSE9UV09SRCIsIF9fRlVOQ1RJT05fXywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlucHV0LCBhY3RpdmVEZXNjLT5tSW9IYW5kbGUpOwogICAgICAgICAgICAgICAgICAgICAgICAgKmNvbmN1cnJlbmN5IHw9IEFQSV9JTlBVVF9DT05DVVJSRU5DWV9IT1RXT1JEOwogICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIElOVkFMSURfT1BFUkFUSU9OOwogICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgQUxPR1YoInN0YXJ0SW5wdXQoJWQpIGZhaWxlZCBmb3IgSE9UV09SRDogb3RoZXIgaW5wdXQgJWQgYWxyZWFkeSBzdGFydGVkIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgaW5wdXQsIGFjdGl2ZURlc2MtPm1Jb0hhbmRsZSk7CisgICAgICAgICAgICAgICAgICAgIEFMT0dWKCIlcyBpbnB1dCAlZCBmYWlsZWQgZm9yIEhPVFdPUkQ6IG90aGVyIGlucHV0ICVkIGFscmVhZHkgc3RhcnRlZCIsCisgICAgICAgICAgICAgICAgICAgICAgICBfX0ZVTkNUSU9OX18sIGlucHV0LCBhY3RpdmVEZXNjLT5tSW9IYW5kbGUpOwogICAgICAgICAgICAgICAgICAgICAqY29uY3VycmVuY3kgfD0gQVBJX0lOUFVUX0NPTkNVUlJFTkNZX0NBUFRVUkU7CiAgICAgICAgICAgICAgICAgICAgIHJldHVybiBJTlZBTElEX09QRVJBVElPTjsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgIGlmIChhY3RpdmVTb3VyY2UgIT0gQVVESU9fU09VUkNFX0hPVFdPUkQpIHsKLSAgICAgICAgICAgICAgICAgICAgQUxPR1coInN0YXJ0SW5wdXQoJWQpIGZhaWxlZDogb3RoZXIgaW5wdXQgJWQgYWxyZWFkeSBzdGFydGVkIiwKKyAgICAgICAgICAgICAgICAgICAgQUxPR1coIiVzIGlucHV0ICVkIGZhaWxlZDogb3RoZXIgaW5wdXQgJWQgYWxyZWFkeSBzdGFydGVkIiwgX19GVU5DVElPTl9fLAogICAgICAgICAgICAgICAgICAgICAgICAgICBpbnB1dCwgYWN0aXZlRGVzYy0+bUlvSGFuZGxlKTsKICAgICAgICAgICAgICAgICAgICAgKmNvbmN1cnJlbmN5IHw9IEFQSV9JTlBVVF9DT05DVVJSRU5DWV9DQVBUVVJFOwogICAgICAgICAgICAgICAgICAgICByZXR1cm4gSU5WQUxJRF9PUEVSQVRJT047CkBAIC0yMDE2LDE5OCArMjA2MiwxNzggQEAKICAgICAgICAgICAgIGlmIChhbGxvd0NvbmN1cnJlbnRXaXRoU291bmRUcmlnZ2VyICYmIGFjdGl2ZURlc2MtPmlzU291bmRUcmlnZ2VyKCkpIHsKICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgYXVkaW9fc291cmNlX3QgYWN0aXZlU291cmNlID0gYWN0aXZlRGVzYy0+aW5wdXRTb3VyY2UodHJ1ZSk7Ci0gICAgICAgICAgICBpZiAoYWN0aXZlU291cmNlID09IEFVRElPX1NPVVJDRV9IT1RXT1JEKSB7Ci0gICAgICAgICAgICAgICAgQXVkaW9TZXNzaW9uQ29sbGVjdGlvbiBhY3RpdmVTZXNzaW9ucyA9Ci0gICAgICAgICAgICAgICAgICAgICAgICBhY3RpdmVEZXNjLT5nZXRBdWRpb1Nlc3Npb25zKHRydWUgLyphY3RpdmVPbmx5Ki8pOwotICAgICAgICAgICAgICAgIGF1ZGlvX3Nlc3Npb25fdCBhY3RpdmVTZXNzaW9uID0gYWN0aXZlU2Vzc2lvbnMua2V5QXQoMCk7Ci0gICAgICAgICAgICAgICAgYXVkaW9faW9faGFuZGxlX3QgYWN0aXZlSGFuZGxlID0gYWN0aXZlRGVzYy0+bUlvSGFuZGxlOworICAgICAgICAgICAgUmVjb3JkQ2xpZW50VmVjdG9yIGFjdGl2ZUhvdHdvcmRDbGllbnRzID0KKyAgICAgICAgICAgICAgICBhY3RpdmVEZXNjLT5jbGllbnRzTGlzdCh0cnVlLCBBVURJT19TT1VSQ0VfSE9UV09SRCk7CisgICAgICAgICAgICBpZiAoYWN0aXZlSG90d29yZENsaWVudHMuc2l6ZSgpID4gMCkgewogICAgICAgICAgICAgICAgIFNvcnRlZFZlY3RvcjxhdWRpb19zZXNzaW9uX3Q+IHNlc3Npb25zID0gYWN0aXZlRGVzYy0+Z2V0UHJlZW1wdGVkU2Vzc2lvbnMoKTsKLSAgICAgICAgICAgICAgICAqY29uY3VycmVuY3kgfD0gQVBJX0lOUFVUX0NPTkNVUlJFTkNZX1BSRUVNUFQ7Ci0gICAgICAgICAgICAgICAgc2Vzc2lvbnMuYWRkKGFjdGl2ZVNlc3Npb24pOworCisgICAgICAgICAgICAgICAgZm9yIChjb25zdCBhdXRvJiBhY3RpdmVDbGllbnQgOiBhY3RpdmVIb3R3b3JkQ2xpZW50cykgeworICAgICAgICAgICAgICAgICAgICAqY29uY3VycmVuY3kgfD0gQVBJX0lOUFVUX0NPTkNVUlJFTkNZX1BSRUVNUFQ7CisgICAgICAgICAgICAgICAgICAgIHNlc3Npb25zLmFkZChhY3RpdmVDbGllbnQtPnNlc3Npb24oKSk7CisgICAgICAgICAgICAgICAgICAgIGNsb3NlQ2xpZW50KGFjdGl2ZUNsaWVudC0+cG9ydElkKCkpOworICAgICAgICAgICAgICAgICAgICBBTE9HVigiJXMgaW5wdXQgJWQgZm9yIEhPVFdPUkQgcHJlZW1wdGluZyBIT1RXT1JEIGlucHV0ICVkIiwgX19GVU5DVElPTl9fLAorICAgICAgICAgICAgICAgICAgICAgICAgICBpbnB1dCwgYWN0aXZlRGVzYy0+bUlvSGFuZGxlKTsKKyAgICAgICAgICAgICAgICB9CisKICAgICAgICAgICAgICAgICBpbnB1dERlc2MtPnNldFByZWVtcHRlZFNlc3Npb25zKHNlc3Npb25zKTsKLSAgICAgICAgICAgICAgICBzdG9wSW5wdXQoYWN0aXZlSGFuZGxlLCBhY3RpdmVTZXNzaW9uKTsKLSAgICAgICAgICAgICAgICByZWxlYXNlSW5wdXQoYWN0aXZlSGFuZGxlLCBhY3RpdmVTZXNzaW9uKTsKLSAgICAgICAgICAgICAgICBBTE9HVigic3RhcnRJbnB1dCglZCkgZm9yIEhPVFdPUkQgcHJlZW1wdGluZyBIT1RXT1JEIGlucHV0ICVkIiwKLSAgICAgICAgICAgICAgICAgICAgICBpbnB1dCwgYWN0aXZlRGVzYy0+bUlvSGFuZGxlKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgIH0KLSNlbmRpZgogCiAgICAgLy8gTWFrZSBzdXJlIHdlIHN0YXJ0IHdpdGggdGhlIGNvcnJlY3Qgc2lsZW5jZSBzdGF0ZQotICAgIGF1ZGlvU2Vzc2lvbi0+c2V0U2lsZW5jZWQoc2lsZW5jZWQpOworICAgIGNsaWVudC0+c2V0U2lsZW5jZWQoc2lsZW5jZWQpOwogCiAgICAgLy8gaW5jcmVtZW50IGFjdGl2aXR5IGNvdW50IGJlZm9yZSBjYWxsaW5nIGdldE5ld0lucHV0RGV2aWNlKCkgYmVsb3cgYXMgb25seSBhY3RpdmUgc2Vzc2lvbnMKICAgICAvLyBhcmUgY29uc2lkZXJlZCBmb3IgZGV2aWNlIHNlbGVjdGlvbgotICAgIGF1ZGlvU2Vzc2lvbi0+Y2hhbmdlQWN0aXZlQ291bnQoMSk7CisgICAgaW5wdXREZXNjLT5zZXRDbGllbnRBY3RpdmUoY2xpZW50LCB0cnVlKTsKIAotICAgIC8vIFJvdXRpbmc/Ci0gICAgbUlucHV0Um91dGVzLmluY1JvdXRlQWN0aXZpdHkoc2Vzc2lvbik7CisgICAgLy8gaW5kaWNhdGUgYWN0aXZlIGNhcHR1cmUgdG8gc291bmQgdHJpZ2dlciBzZXJ2aWNlIGlmIHN0YXJ0aW5nIGNhcHR1cmUgZnJvbSBhIG1pYyBvbgorICAgIC8vIHByaW1hcnkgSFcgbW9kdWxlCisgICAgYXVkaW9fZGV2aWNlc190IGRldmljZSA9IGdldE5ld0lucHV0RGV2aWNlKGlucHV0RGVzYyk7CisgICAgc2V0SW5wdXREZXZpY2UoaW5wdXQsIGRldmljZSwgdHJ1ZSAvKiBmb3JjZSAqLyk7CiAKLSAgICBpZiAoYXVkaW9TZXNzaW9uLT5hY3RpdmVDb3VudCgpID09IDEgfHwgbUlucHV0Um91dGVzLmdldEFuZENsZWFyUm91dGVDaGFuZ2VkKHNlc3Npb24pKSB7Ci0gICAgICAgIC8vIGluZGljYXRlIGFjdGl2ZSBjYXB0dXJlIHRvIHNvdW5kIHRyaWdnZXIgc2VydmljZSBpZiBzdGFydGluZyBjYXB0dXJlIGZyb20gYSBtaWMgb24KLSAgICAgICAgLy8gcHJpbWFyeSBIVyBtb2R1bGUKLSAgICAgICAgYXVkaW9fZGV2aWNlc190IGRldmljZSA9IGdldE5ld0lucHV0RGV2aWNlKGlucHV0RGVzYyk7Ci0gICAgICAgIHNldElucHV0RGV2aWNlKGlucHV0LCBkZXZpY2UsIHRydWUgLyogZm9yY2UgKi8pOworICAgIHN0YXR1c190IHN0YXR1cyA9IGlucHV0RGVzYy0+c3RhcnQoKTsKKyAgICBpZiAoc3RhdHVzICE9IE5PX0VSUk9SKSB7CisgICAgICAgIGlucHV0RGVzYy0+c2V0Q2xpZW50QWN0aXZlKGNsaWVudCwgZmFsc2UpOworICAgICAgICByZXR1cm4gc3RhdHVzOworICAgIH0KIAotICAgICAgICBzdGF0dXNfdCBzdGF0dXMgPSBpbnB1dERlc2MtPnN0YXJ0KCk7Ci0gICAgICAgIGlmIChzdGF0dXMgIT0gTk9fRVJST1IpIHsKLSAgICAgICAgICAgIG1JbnB1dFJvdXRlcy5kZWNSb3V0ZUFjdGl2aXR5KHNlc3Npb24pOwotICAgICAgICAgICAgYXVkaW9TZXNzaW9uLT5jaGFuZ2VBY3RpdmVDb3VudCgtMSk7Ci0gICAgICAgICAgICByZXR1cm4gc3RhdHVzOworICAgIGlmIChpbnB1dERlc2MtPmFjdGl2ZUNvdW50KCkgID09IDEpIHsKKyAgICAgICAgLy8gaWYgaW5wdXQgbWFwcyB0byBhIGR5bmFtaWMgcG9saWN5IHdpdGggYW4gYWN0aXZpdHkgbGlzdGVuZXIsIG5vdGlmeSBvZiBzdGF0ZSBjaGFuZ2UKKyAgICAgICAgaWYgKChpbnB1dERlc2MtPm1Qb2xpY3lNaXggIT0gTlVMTCkKKyAgICAgICAgICAgICAgICAmJiAoKGlucHV0RGVzYy0+bVBvbGljeU1peC0+bUNiRmxhZ3MgJiBBdWRpb01peDo6a0NiRmxhZ05vdGlmeUFjdGl2aXR5KSAhPSAwKSkgeworICAgICAgICAgICAgbXBDbGllbnRJbnRlcmZhY2UtPm9uRHluYW1pY1BvbGljeU1peFN0YXRlVXBkYXRlKGlucHV0RGVzYy0+bVBvbGljeU1peC0+bURldmljZUFkZHJlc3MsCisgICAgICAgICAgICAgICAgICAgIE1JWF9TVEFURV9NSVhJTkcpOwogICAgICAgICB9CiAKLSAgICAgICAgaWYgKGlucHV0RGVzYy0+Z2V0QXVkaW9TZXNzaW9uQ291bnQodHJ1ZS8qYWN0aXZlT25seSovKSA9PSAxKSB7Ci0gICAgICAgICAgICAvLyBpZiBpbnB1dCBtYXBzIHRvIGEgZHluYW1pYyBwb2xpY3kgd2l0aCBhbiBhY3Rpdml0eSBsaXN0ZW5lciwgbm90aWZ5IG9mIHN0YXRlIGNoYW5nZQotICAgICAgICAgICAgaWYgKChpbnB1dERlc2MtPm1Qb2xpY3lNaXggIT0gTlVMTCkKLSAgICAgICAgICAgICAgICAgICAgJiYgKChpbnB1dERlc2MtPm1Qb2xpY3lNaXgtPm1DYkZsYWdzICYgQXVkaW9NaXg6OmtDYkZsYWdOb3RpZnlBY3Rpdml0eSkgIT0gMCkpIHsKLSAgICAgICAgICAgICAgICBtcENsaWVudEludGVyZmFjZS0+b25EeW5hbWljUG9saWN5TWl4U3RhdGVVcGRhdGUoaW5wdXREZXNjLT5tUG9saWN5TWl4LT5tRGV2aWNlQWRkcmVzcywKLSAgICAgICAgICAgICAgICAgICAgICAgIE1JWF9TVEFURV9NSVhJTkcpOwotICAgICAgICAgICAgfQorICAgICAgICBhdWRpb19kZXZpY2VzX3QgcHJpbWFyeUlucHV0RGV2aWNlcyA9IGF2YWlsYWJsZVByaW1hcnlJbnB1dERldmljZXMoKTsKKyAgICAgICAgaWYgKCgoZGV2aWNlICYgcHJpbWFyeUlucHV0RGV2aWNlcyAmIH5BVURJT19ERVZJQ0VfQklUX0lOKSAhPSAwKSAmJgorICAgICAgICAgICAgICAgIG1JbnB1dHMuYWN0aXZlSW5wdXRzQ291bnRPbkRldmljZXMocHJpbWFyeUlucHV0RGV2aWNlcykgPT0gMSkgeworICAgICAgICAgICAgU291bmRUcmlnZ2VyOjpzZXRDYXB0dXJlU3RhdGUodHJ1ZSk7CisgICAgICAgIH0KIAotICAgICAgICAgICAgYXVkaW9fZGV2aWNlc190IHByaW1hcnlJbnB1dERldmljZXMgPSBhdmFpbGFibGVQcmltYXJ5SW5wdXREZXZpY2VzKCk7Ci0gICAgICAgICAgICBpZiAoKChkZXZpY2UgJiBwcmltYXJ5SW5wdXREZXZpY2VzICYgfkFVRElPX0RFVklDRV9CSVRfSU4pICE9IDApICYmCi0gICAgICAgICAgICAgICAgICAgIG1JbnB1dHMuYWN0aXZlSW5wdXRzQ291bnRPbkRldmljZXMocHJpbWFyeUlucHV0RGV2aWNlcykgPT0gMSkgewotICAgICAgICAgICAgICAgIFNvdW5kVHJpZ2dlcjo6c2V0Q2FwdHVyZVN0YXRlKHRydWUpOworICAgICAgICAvLyBhdXRvbWF0aWNhbGx5IGVuYWJsZSB0aGUgcmVtb3RlIHN1Ym1peCBvdXRwdXQgd2hlbiBpbnB1dCBpcyBzdGFydGVkIGlmIG5vdAorICAgICAgICAvLyB1c2VkIGJ5IGEgcG9saWN5IG1peCBvZiB0eXBlIE1JWF9UWVBFX1JFQ09SREVSUworICAgICAgICAvLyBGb3IgcmVtb3RlIHN1Ym1peCAoYSB2aXJ0dWFsIGRldmljZSksIHdlIG9wZW4gb25seSBvbmUgaW5wdXQgcGVyIGNhcHR1cmUgcmVxdWVzdC4KKyAgICAgICAgaWYgKGF1ZGlvX2lzX3JlbW90ZV9zdWJtaXhfZGV2aWNlKGlucHV0RGVzYy0+bURldmljZSkpIHsKKyAgICAgICAgICAgIFN0cmluZzggYWRkcmVzcyA9IFN0cmluZzgoIiIpOworICAgICAgICAgICAgaWYgKGlucHV0RGVzYy0+bVBvbGljeU1peCA9PSBOVUxMKSB7CisgICAgICAgICAgICAgICAgYWRkcmVzcyA9IFN0cmluZzgoIjAiKTsKKyAgICAgICAgICAgIH0gZWxzZSBpZiAoaW5wdXREZXNjLT5tUG9saWN5TWl4LT5tTWl4VHlwZSA9PSBNSVhfVFlQRV9QTEFZRVJTKSB7CisgICAgICAgICAgICAgICAgYWRkcmVzcyA9IGlucHV0RGVzYy0+bVBvbGljeU1peC0+bURldmljZUFkZHJlc3M7CiAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIC8vIGF1dG9tYXRpY2FsbHkgZW5hYmxlIHRoZSByZW1vdGUgc3VibWl4IG91dHB1dCB3aGVuIGlucHV0IGlzIHN0YXJ0ZWQgaWYgbm90Ci0gICAgICAgICAgICAvLyB1c2VkIGJ5IGEgcG9saWN5IG1peCBvZiB0eXBlIE1JWF9UWVBFX1JFQ09SREVSUwotICAgICAgICAgICAgLy8gRm9yIHJlbW90ZSBzdWJtaXggKGEgdmlydHVhbCBkZXZpY2UpLCB3ZSBvcGVuIG9ubHkgb25lIGlucHV0IHBlciBjYXB0dXJlIHJlcXVlc3QuCi0gICAgICAgICAgICBpZiAoYXVkaW9faXNfcmVtb3RlX3N1Ym1peF9kZXZpY2UoaW5wdXREZXNjLT5tRGV2aWNlKSkgewotICAgICAgICAgICAgICAgIFN0cmluZzggYWRkcmVzcyA9IFN0cmluZzgoIiIpOwotICAgICAgICAgICAgICAgIGlmIChpbnB1dERlc2MtPm1Qb2xpY3lNaXggPT0gTlVMTCkgewotICAgICAgICAgICAgICAgICAgICBhZGRyZXNzID0gU3RyaW5nOCgiMCIpOwotICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoaW5wdXREZXNjLT5tUG9saWN5TWl4LT5tTWl4VHlwZSA9PSBNSVhfVFlQRV9QTEFZRVJTKSB7Ci0gICAgICAgICAgICAgICAgICAgIGFkZHJlc3MgPSBpbnB1dERlc2MtPm1Qb2xpY3lNaXgtPm1EZXZpY2VBZGRyZXNzOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBpZiAoYWRkcmVzcyAhPSAiIikgewotICAgICAgICAgICAgICAgICAgICBzZXREZXZpY2VDb25uZWN0aW9uU3RhdGVJbnQoQVVESU9fREVWSUNFX09VVF9SRU1PVEVfU1VCTUlYLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFVRElPX1BPTElDWV9ERVZJQ0VfU1RBVEVfQVZBSUxBQkxFLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFkZHJlc3MsICJyZW1vdGUtc3VibWl4Iik7Ci0gICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKGFkZHJlc3MgIT0gIiIpIHsKKyAgICAgICAgICAgICAgICBzZXREZXZpY2VDb25uZWN0aW9uU3RhdGVJbnQoQVVESU9fREVWSUNFX09VVF9SRU1PVEVfU1VCTUlYLAorICAgICAgICAgICAgICAgICAgICAgICAgQVVESU9fUE9MSUNZX0RFVklDRV9TVEFURV9BVkFJTEFCTEUsCisgICAgICAgICAgICAgICAgICAgICAgICBhZGRyZXNzLCAicmVtb3RlLXN1Ym1peCIpOwogICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgfQogCi0gICAgQUxPR1YoIkF1ZGlvUG9saWN5TWFuYWdlcjo6c3RhcnRJbnB1dCgpIGlucHV0IHNvdXJjZSA9ICVkIiwgYXVkaW9TZXNzaW9uLT5pbnB1dFNvdXJjZSgpKTsKKyAgICBBTE9HVigiJXMgaW5wdXQgJWQgc291cmNlID0gJWQgZXhpdCIsIF9fRlVOQ1RJT05fXywgaW5wdXQsIGNsaWVudC0+c291cmNlKCkpOwogCiAgICAgcmV0dXJuIE5PX0VSUk9SOwogfQogCi1zdGF0dXNfdCBBdWRpb1BvbGljeU1hbmFnZXI6OnN0b3BJbnB1dChhdWRpb19pb19oYW5kbGVfdCBpbnB1dCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF1ZGlvX3Nlc3Npb25fdCBzZXNzaW9uKQorc3RhdHVzX3QgQXVkaW9Qb2xpY3lNYW5hZ2VyOjpzdG9wSW5wdXQoYXVkaW9fcG9ydF9oYW5kbGVfdCBwb3J0SWQpCiB7Ci0gICAgQUxPR1YoInN0b3BJbnB1dCgpIGlucHV0ICVkIiwgaW5wdXQpOwotICAgIHNzaXplX3QgaW5kZXggPSBtSW5wdXRzLmluZGV4T2ZLZXkoaW5wdXQpOwotICAgIGlmIChpbmRleCA8IDApIHsKLSAgICAgICAgQUxPR1coInN0b3BJbnB1dCgpIHVua25vd24gaW5wdXQgJWQiLCBpbnB1dCk7CisgICAgQUxPR1YoIiVzIHBvcnRJZCAlZCIsIF9fRlVOQ1RJT05fXywgcG9ydElkKTsKKworICAgIHNwPEF1ZGlvSW5wdXREZXNjcmlwdG9yPiBpbnB1dERlc2MgPSBtSW5wdXRzLmdldElucHV0Rm9yQ2xpZW50KHBvcnRJZCk7CisgICAgaWYgKGlucHV0RGVzYyA9PSAwKSB7CisgICAgICAgIEFMT0dXKCIlcyBubyBpbnB1dCBmb3IgY2xpZW50ICVkIiwgX19GVU5DVElPTl9fLCBwb3J0SWQpOwogICAgICAgICByZXR1cm4gQkFEX1ZBTFVFOwogICAgIH0KLSAgICBzcDxBdWRpb0lucHV0RGVzY3JpcHRvcj4gaW5wdXREZXNjID0gbUlucHV0cy52YWx1ZUF0KGluZGV4KTsKLQotICAgIHNwPEF1ZGlvU2Vzc2lvbj4gYXVkaW9TZXNzaW9uID0gaW5wdXREZXNjLT5nZXRBdWRpb1Nlc3Npb24oc2Vzc2lvbik7Ci0gICAgaWYgKGluZGV4IDwgMCkgewotICAgICAgICBBTE9HVygic3RvcElucHV0KCkgdW5rbm93biBzZXNzaW9uICVkIG9uIGlucHV0ICVkIiwgc2Vzc2lvbiwgaW5wdXQpOwotICAgICAgICByZXR1cm4gQkFEX1ZBTFVFOwotICAgIH0KLQotICAgIGlmIChhdWRpb1Nlc3Npb24tPmFjdGl2ZUNvdW50KCkgPT0gMCkgewotICAgICAgICBBTE9HVygic3RvcElucHV0KCkgaW5wdXQgJWQgYWxyZWFkeSBzdG9wcGVkIiwgaW5wdXQpOworICAgIGF1ZGlvX2lvX2hhbmRsZV90IGlucHV0ID0gaW5wdXREZXNjLT5tSW9IYW5kbGU7CisgICAgc3A8UmVjb3JkQ2xpZW50RGVzY3JpcHRvcj4gY2xpZW50ID0gaW5wdXREZXNjLT5nZXRDbGllbnQocG9ydElkKTsKKyAgICBpZiAoIWNsaWVudC0+YWN0aXZlKCkpIHsKKyAgICAgICAgQUxPR1coIiVzIGlucHV0ICVkIGNsaWVudCAlZCBhbHJlYWR5IHN0b3BwZWQiLCBfX0ZVTkNUSU9OX18sIGlucHV0LCBjbGllbnQtPnBvcnRJZCgpKTsKICAgICAgICAgcmV0dXJuIElOVkFMSURfT1BFUkFUSU9OOwogICAgIH0KIAotICAgIGF1ZGlvU2Vzc2lvbi0+Y2hhbmdlQWN0aXZlQ291bnQoLTEpOworICAgIGlucHV0RGVzYy0+c2V0Q2xpZW50QWN0aXZlKGNsaWVudCwgZmFsc2UpOwogCi0gICAgLy8gUm91dGluZz8KLSAgICBtSW5wdXRSb3V0ZXMuZGVjUm91dGVBY3Rpdml0eShzZXNzaW9uKTsKLQotICAgIGlmIChhdWRpb1Nlc3Npb24tPmFjdGl2ZUNvdW50KCkgPT0gMCkgewotICAgICAgICBpbnB1dERlc2MtPnN0b3AoKTsKLSAgICAgICAgaWYgKGlucHV0RGVzYy0+aXNBY3RpdmUoKSkgewotICAgICAgICAgICAgc2V0SW5wdXREZXZpY2UoaW5wdXQsIGdldE5ld0lucHV0RGV2aWNlKGlucHV0RGVzYyksIGZhbHNlIC8qIGZvcmNlICovKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIC8vIGlmIGlucHV0IG1hcHMgdG8gYSBkeW5hbWljIHBvbGljeSB3aXRoIGFuIGFjdGl2aXR5IGxpc3RlbmVyLCBub3RpZnkgb2Ygc3RhdGUgY2hhbmdlCi0gICAgICAgICAgICBpZiAoKGlucHV0RGVzYy0+bVBvbGljeU1peCAhPSBOVUxMKQotICAgICAgICAgICAgICAgICAgICAmJiAoKGlucHV0RGVzYy0+bVBvbGljeU1peC0+bUNiRmxhZ3MgJiBBdWRpb01peDo6a0NiRmxhZ05vdGlmeUFjdGl2aXR5KSAhPSAwKSkgewotICAgICAgICAgICAgICAgIG1wQ2xpZW50SW50ZXJmYWNlLT5vbkR5bmFtaWNQb2xpY3lNaXhTdGF0ZVVwZGF0ZShpbnB1dERlc2MtPm1Qb2xpY3lNaXgtPm1EZXZpY2VBZGRyZXNzLAotICAgICAgICAgICAgICAgICAgICAgICAgTUlYX1NUQVRFX0lETEUpOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAvLyBhdXRvbWF0aWNhbGx5IGRpc2FibGUgdGhlIHJlbW90ZSBzdWJtaXggb3V0cHV0IHdoZW4gaW5wdXQgaXMgc3RvcHBlZCBpZiBub3QKLSAgICAgICAgICAgIC8vIHVzZWQgYnkgYSBwb2xpY3kgbWl4IG9mIHR5cGUgTUlYX1RZUEVfUkVDT1JERVJTCi0gICAgICAgICAgICBpZiAoYXVkaW9faXNfcmVtb3RlX3N1Ym1peF9kZXZpY2UoaW5wdXREZXNjLT5tRGV2aWNlKSkgewotICAgICAgICAgICAgICAgIFN0cmluZzggYWRkcmVzcyA9IFN0cmluZzgoIiIpOwotICAgICAgICAgICAgICAgIGlmIChpbnB1dERlc2MtPm1Qb2xpY3lNaXggPT0gTlVMTCkgewotICAgICAgICAgICAgICAgICAgICBhZGRyZXNzID0gU3RyaW5nOCgiMCIpOwotICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoaW5wdXREZXNjLT5tUG9saWN5TWl4LT5tTWl4VHlwZSA9PSBNSVhfVFlQRV9QTEFZRVJTKSB7Ci0gICAgICAgICAgICAgICAgICAgIGFkZHJlc3MgPSBpbnB1dERlc2MtPm1Qb2xpY3lNaXgtPm1EZXZpY2VBZGRyZXNzOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBpZiAoYWRkcmVzcyAhPSAiIikgewotICAgICAgICAgICAgICAgICAgICBzZXREZXZpY2VDb25uZWN0aW9uU3RhdGVJbnQoQVVESU9fREVWSUNFX09VVF9SRU1PVEVfU1VCTUlYLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQVVESU9fUE9MSUNZX0RFVklDRV9TVEFURV9VTkFWQUlMQUJMRSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFkZHJlc3MsICJyZW1vdGUtc3VibWl4Iik7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBhdWRpb19kZXZpY2VzX3QgZGV2aWNlID0gaW5wdXREZXNjLT5tRGV2aWNlOwotICAgICAgICAgICAgcmVzZXRJbnB1dERldmljZShpbnB1dCk7Ci0KLSAgICAgICAgICAgIC8vIGluZGljYXRlIGluYWN0aXZlIGNhcHR1cmUgdG8gc291bmQgdHJpZ2dlciBzZXJ2aWNlIGlmIHN0b3BwaW5nIGNhcHR1cmUgZnJvbSBhIG1pYyBvbgotICAgICAgICAgICAgLy8gcHJpbWFyeSBIVyBtb2R1bGUKLSAgICAgICAgICAgIGF1ZGlvX2RldmljZXNfdCBwcmltYXJ5SW5wdXREZXZpY2VzID0gYXZhaWxhYmxlUHJpbWFyeUlucHV0RGV2aWNlcygpOwotICAgICAgICAgICAgaWYgKCgoZGV2aWNlICYgcHJpbWFyeUlucHV0RGV2aWNlcyAmIH5BVURJT19ERVZJQ0VfQklUX0lOKSAhPSAwKSAmJgotICAgICAgICAgICAgICAgICAgICBtSW5wdXRzLmFjdGl2ZUlucHV0c0NvdW50T25EZXZpY2VzKHByaW1hcnlJbnB1dERldmljZXMpID09IDApIHsKLSAgICAgICAgICAgICAgICBTb3VuZFRyaWdnZXI6OnNldENhcHR1cmVTdGF0ZShmYWxzZSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBpbnB1dERlc2MtPmNsZWFyUHJlZW1wdGVkU2Vzc2lvbnMoKTsKKyAgICBpbnB1dERlc2MtPnN0b3AoKTsKKyAgICBpZiAoaW5wdXREZXNjLT5pc0FjdGl2ZSgpKSB7CisgICAgICAgIHNldElucHV0RGV2aWNlKGlucHV0LCBnZXROZXdJbnB1dERldmljZShpbnB1dERlc2MpLCBmYWxzZSAvKiBmb3JjZSAqLyk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgLy8gaWYgaW5wdXQgbWFwcyB0byBhIGR5bmFtaWMgcG9saWN5IHdpdGggYW4gYWN0aXZpdHkgbGlzdGVuZXIsIG5vdGlmeSBvZiBzdGF0ZSBjaGFuZ2UKKyAgICAgICAgaWYgKChpbnB1dERlc2MtPm1Qb2xpY3lNaXggIT0gTlVMTCkKKyAgICAgICAgICAgICAgICAmJiAoKGlucHV0RGVzYy0+bVBvbGljeU1peC0+bUNiRmxhZ3MgJiBBdWRpb01peDo6a0NiRmxhZ05vdGlmeUFjdGl2aXR5KSAhPSAwKSkgeworICAgICAgICAgICAgbXBDbGllbnRJbnRlcmZhY2UtPm9uRHluYW1pY1BvbGljeU1peFN0YXRlVXBkYXRlKGlucHV0RGVzYy0+bVBvbGljeU1peC0+bURldmljZUFkZHJlc3MsCisgICAgICAgICAgICAgICAgICAgIE1JWF9TVEFURV9JRExFKTsKICAgICAgICAgfQorCisgICAgICAgIC8vIGF1dG9tYXRpY2FsbHkgZGlzYWJsZSB0aGUgcmVtb3RlIHN1Ym1peCBvdXRwdXQgd2hlbiBpbnB1dCBpcyBzdG9wcGVkIGlmIG5vdAorICAgICAgICAvLyB1c2VkIGJ5IGEgcG9saWN5IG1peCBvZiB0eXBlIE1JWF9UWVBFX1JFQ09SREVSUworICAgICAgICBpZiAoYXVkaW9faXNfcmVtb3RlX3N1Ym1peF9kZXZpY2UoaW5wdXREZXNjLT5tRGV2aWNlKSkgeworICAgICAgICAgICAgU3RyaW5nOCBhZGRyZXNzID0gU3RyaW5nOCgiIik7CisgICAgICAgICAgICBpZiAoaW5wdXREZXNjLT5tUG9saWN5TWl4ID09IE5VTEwpIHsKKyAgICAgICAgICAgICAgICBhZGRyZXNzID0gU3RyaW5nOCgiMCIpOworICAgICAgICAgICAgfSBlbHNlIGlmIChpbnB1dERlc2MtPm1Qb2xpY3lNaXgtPm1NaXhUeXBlID09IE1JWF9UWVBFX1BMQVlFUlMpIHsKKyAgICAgICAgICAgICAgICBhZGRyZXNzID0gaW5wdXREZXNjLT5tUG9saWN5TWl4LT5tRGV2aWNlQWRkcmVzczsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChhZGRyZXNzICE9ICIiKSB7CisgICAgICAgICAgICAgICAgc2V0RGV2aWNlQ29ubmVjdGlvblN0YXRlSW50KEFVRElPX0RFVklDRV9PVVRfUkVNT1RFX1NVQk1JWCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQVVESU9fUE9MSUNZX0RFVklDRV9TVEFURV9VTkFWQUlMQUJMRSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWRkcmVzcywgInJlbW90ZS1zdWJtaXgiKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIGF1ZGlvX2RldmljZXNfdCBkZXZpY2UgPSBpbnB1dERlc2MtPm1EZXZpY2U7CisgICAgICAgIHJlc2V0SW5wdXREZXZpY2UoaW5wdXQpOworCisgICAgICAgIC8vIGluZGljYXRlIGluYWN0aXZlIGNhcHR1cmUgdG8gc291bmQgdHJpZ2dlciBzZXJ2aWNlIGlmIHN0b3BwaW5nIGNhcHR1cmUgZnJvbSBhIG1pYyBvbgorICAgICAgICAvLyBwcmltYXJ5IEhXIG1vZHVsZQorICAgICAgICBhdWRpb19kZXZpY2VzX3QgcHJpbWFyeUlucHV0RGV2aWNlcyA9IGF2YWlsYWJsZVByaW1hcnlJbnB1dERldmljZXMoKTsKKyAgICAgICAgaWYgKCgoZGV2aWNlICYgcHJpbWFyeUlucHV0RGV2aWNlcyAmIH5BVURJT19ERVZJQ0VfQklUX0lOKSAhPSAwKSAmJgorICAgICAgICAgICAgICAgIG1JbnB1dHMuYWN0aXZlSW5wdXRzQ291bnRPbkRldmljZXMocHJpbWFyeUlucHV0RGV2aWNlcykgPT0gMCkgeworICAgICAgICAgICAgU291bmRUcmlnZ2VyOjpzZXRDYXB0dXJlU3RhdGUoZmFsc2UpOworICAgICAgICB9CisgICAgICAgIGlucHV0RGVzYy0+Y2xlYXJQcmVlbXB0ZWRTZXNzaW9ucygpOwogICAgIH0KICAgICByZXR1cm4gTk9fRVJST1I7CiB9CiAKLXZvaWQgQXVkaW9Qb2xpY3lNYW5hZ2VyOjpyZWxlYXNlSW5wdXQoYXVkaW9faW9faGFuZGxlX3QgaW5wdXQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF1ZGlvX3Nlc3Npb25fdCBzZXNzaW9uKQordm9pZCBBdWRpb1BvbGljeU1hbmFnZXI6OnJlbGVhc2VJbnB1dChhdWRpb19wb3J0X2hhbmRsZV90IHBvcnRJZCkKIHsKLSAgICBBTE9HVigicmVsZWFzZUlucHV0KCkgJWQiLCBpbnB1dCk7Ci0gICAgc3NpemVfdCBpbmRleCA9IG1JbnB1dHMuaW5kZXhPZktleShpbnB1dCk7Ci0gICAgaWYgKGluZGV4IDwgMCkgewotICAgICAgICBBTE9HVygicmVsZWFzZUlucHV0KCkgcmVsZWFzaW5nIHVua25vd24gaW5wdXQgJWQiLCBpbnB1dCk7CisgICAgQUxPR1YoIiVzIHBvcnRJZCAlZCIsIF9fRlVOQ1RJT05fXywgcG9ydElkKTsKKworICAgIHNwPEF1ZGlvSW5wdXREZXNjcmlwdG9yPiBpbnB1dERlc2MgPSBtSW5wdXRzLmdldElucHV0Rm9yQ2xpZW50KHBvcnRJZCk7CisgICAgaWYgKGlucHV0RGVzYyA9PSAwKSB7CisgICAgICAgIEFMT0dXKCIlcyBubyBpbnB1dCBmb3IgY2xpZW50ICVkIiwgX19GVU5DVElPTl9fLCBwb3J0SWQpOwogICAgICAgICByZXR1cm47CiAgICAgfQorICAgIHNwPFJlY29yZENsaWVudERlc2NyaXB0b3I+IGNsaWVudCA9IGlucHV0RGVzYy0+Z2V0Q2xpZW50KHBvcnRJZCk7CisgICAgYXVkaW9faW9faGFuZGxlX3QgaW5wdXQgPSBpbnB1dERlc2MtPm1Jb0hhbmRsZTsKIAotICAgIC8vIFJvdXRpbmcKLSAgICBtSW5wdXRSb3V0ZXMucmVtb3ZlUm91dGUoc2Vzc2lvbik7CisgICAgQUxPR1YoIiVzICVkIiwgX19GVU5DVElPTl9fLCBpbnB1dCk7CiAKLSAgICBzcDxBdWRpb0lucHV0RGVzY3JpcHRvcj4gaW5wdXREZXNjID0gbUlucHV0cy52YWx1ZUF0KGluZGV4KTsKLSAgICBBTE9HX0FTU0VSVChpbnB1dERlc2MgIT0gMCk7CisgICAgaW5wdXREZXNjLT5yZW1vdmVDbGllbnQocG9ydElkKTsKIAotICAgIHNwPEF1ZGlvU2Vzc2lvbj4gYXVkaW9TZXNzaW9uID0gaW5wdXREZXNjLT5nZXRBdWRpb1Nlc3Npb24oc2Vzc2lvbik7Ci0gICAgaWYgKGF1ZGlvU2Vzc2lvbiA9PSAwKSB7Ci0gICAgICAgIEFMT0dXKCJyZWxlYXNlSW5wdXQoKSB1bmtub3duIHNlc3Npb24gJWQgb24gaW5wdXQgJWQiLCBzZXNzaW9uLCBpbnB1dCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBpZiAoYXVkaW9TZXNzaW9uLT5vcGVuQ291bnQoKSA9PSAwKSB7Ci0gICAgICAgIEFMT0dXKCJyZWxlYXNlSW5wdXQoKSBpbnZhbGlkIG9wZW4gY291bnQgJWQgb24gc2Vzc2lvbiAlZCIsCi0gICAgICAgICAgICAgIGF1ZGlvU2Vzc2lvbi0+b3BlbkNvdW50KCksIHNlc3Npb24pOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgaWYgKGF1ZGlvU2Vzc2lvbi0+Y2hhbmdlT3BlbkNvdW50KC0xKSA9PSAwKSB7Ci0gICAgICAgIGlucHV0RGVzYy0+cmVtb3ZlQXVkaW9TZXNzaW9uKHNlc3Npb24pOwotICAgIH0KLQotICAgIGlmIChpbnB1dERlc2MtPmdldE9wZW5SZWZDb3VudCgpID4gMCkgewotICAgICAgICBBTE9HVigicmVsZWFzZUlucHV0KCkgZXhpdCA+IDAiKTsKKyAgICBpZiAoaW5wdXREZXNjLT5nZXRDbGllbnRDb3VudCgpID4gMCkgeworICAgICAgICBBTE9HVigiJXMoJWQpICV6dSBjbGllbnRzIHJlbWFpbmluZyIsIF9fZnVuY19fLCBwb3J0SWQsIGlucHV0RGVzYy0+Z2V0Q2xpZW50Q291bnQoKSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKICAgICBjbG9zZUlucHV0KGlucHV0KTsKICAgICBtcENsaWVudEludGVyZmFjZS0+b25BdWRpb1BvcnRMaXN0VXBkYXRlKCk7Ci0gICAgQUxPR1YoInJlbGVhc2VJbnB1dCgpIGV4aXQiKTsKKyAgICBBTE9HVigiJXMgZXhpdCIsIF9fRlVOQ1RJT05fXyk7Cit9CisKK3ZvaWQgQXVkaW9Qb2xpY3lNYW5hZ2VyOjpjbG9zZUFjdGl2ZUNsaWVudHMoY29uc3Qgc3A8QXVkaW9JbnB1dERlc2NyaXB0b3I+JiBpbnB1dCkKK3sKKyAgICBSZWNvcmRDbGllbnRWZWN0b3IgY2xpZW50cyA9IGlucHV0LT5jbGllbnRzTGlzdCh0cnVlKTsKKworICAgIGZvciAoY29uc3QgYXV0byYgY2xpZW50IDogY2xpZW50cykgeworICAgICAgICBjbG9zZUNsaWVudChjbGllbnQtPnBvcnRJZCgpKTsKKyAgICB9Cit9CisKK3ZvaWQgQXVkaW9Qb2xpY3lNYW5hZ2VyOjpjbG9zZUNsaWVudChhdWRpb19wb3J0X2hhbmRsZV90IHBvcnRJZCkKK3sKKyAgICBzdG9wSW5wdXQocG9ydElkKTsKKyAgICByZWxlYXNlSW5wdXQocG9ydElkKTsKIH0KIAogdm9pZCBBdWRpb1BvbGljeU1hbmFnZXI6OmNsb3NlQWxsSW5wdXRzKCkgewpAQCAtMjIyNCw3ICsyMjUwLDYgQEAKICAgICAgICAgfQogICAgICAgICBpbnB1dERlc2MtPmNsb3NlKCk7CiAgICAgfQotICAgIG1JbnB1dFJvdXRlcy5jbGVhcigpOwogICAgIG1JbnB1dHMuY2xlYXIoKTsKICAgICBTb3VuZFRyaWdnZXI6OnNldENhcHR1cmVTdGF0ZShmYWxzZSk7CiAgICAgbmV4dEF1ZGlvUG9ydEdlbmVyYXRpb24oKTsKQEAgLTIyOTMsMTEgKzIzMTgsMTAgQEAKICAgICAgICAgc3A8U3dBdWRpb091dHB1dERlc2NyaXB0b3I+IGRlc2MgPSBtT3V0cHV0cy52YWx1ZUF0KGkpOwogICAgICAgICBhdWRpb19kZXZpY2VzX3QgY3VyRGV2aWNlID0gVm9sdW1lOjpnZXREZXZpY2VGb3JWb2x1bWUoZGVzYy0+ZGV2aWNlKCkpOwogICAgICAgICBmb3IgKGludCBjdXJTdHJlYW0gPSAwOyBjdXJTdHJlYW0gPCBBVURJT19TVFJFQU1fRk9SX1BPTElDWV9DTlQ7IGN1clN0cmVhbSsrKSB7Ci0gICAgICAgICAgICBpZiAoIXN0cmVhbXNNYXRjaEZvcnZvbHVtZShzdHJlYW0sIChhdWRpb19zdHJlYW1fdHlwZV90KWN1clN0cmVhbSkpIHsKKyAgICAgICAgICAgIGlmICghKHN0cmVhbXNNYXRjaEZvcnZvbHVtZShzdHJlYW0sIChhdWRpb19zdHJlYW1fdHlwZV90KWN1clN0cmVhbSkpKSB7CiAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAoIShkZXNjLT5pc1N0cmVhbUFjdGl2ZSgoYXVkaW9fc3RyZWFtX3R5cGVfdCljdXJTdHJlYW0pIHx8Ci0gICAgICAgICAgICAgICAgICAgIChpc0luQ2FsbCgpICYmIChjdXJTdHJlYW0gPT0gQVVESU9fU1RSRUFNX1ZPSUNFX0NBTEwpKSkpIHsKKyAgICAgICAgICAgIGlmICghKGRlc2MtPmlzU3RyZWFtQWN0aXZlKChhdWRpb19zdHJlYW1fdHlwZV90KWN1clN0cmVhbSkgfHwgaXNJbkNhbGwoKSkpIHsKICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIHJvdXRpbmdfc3RyYXRlZ3kgY3VyU3RyYXRlZ3kgPSBnZXRTdHJhdGVneSgoYXVkaW9fc3RyZWFtX3R5cGVfdCljdXJTdHJlYW0pOwpAQCAtMjMxNSwxMyArMjMzOSwxNSBAQAogICAgICAgICAgICAgICAgIGFwcGx5Vm9sdW1lID0gIW1Wb2x1bWVDdXJ2ZXMtPmhhc1ZvbHVtZUluZGV4Rm9yRGV2aWNlKAogICAgICAgICAgICAgICAgICAgICAgICAgc3RyZWFtLCBjdXJTdHJlYW1EZXZpY2UpOwogICAgICAgICAgICAgfQotCisgICAgICAgICAgICAvLyByZXNjYWxlIGluZGV4IGJlZm9yZSBhcHBseWluZyB0byBjdXJTdHJlYW0gYXMgcmFuZ2VzIG1heSBiZSBkaWZmZXJlbnQgZm9yCisgICAgICAgICAgICAvLyBzdHJlYW0gYW5kIGN1clN0cmVhbQorICAgICAgICAgICAgaW50IGlkeCA9IHJlc2NhbGVWb2x1bWVJbmRleChpbmRleCwgc3RyZWFtLCAoYXVkaW9fc3RyZWFtX3R5cGVfdCljdXJTdHJlYW0pOwogICAgICAgICAgICAgaWYgKGFwcGx5Vm9sdW1lKSB7CiAgICAgICAgICAgICAgICAgLy9GSVhNRTogd29ya2Fyb3VuZCBmb3IgdHJ1bmNhdGVkIHRvdWNoIHNvdW5kcwogICAgICAgICAgICAgICAgIC8vIGRlbGF5ZWQgdm9sdW1lIGNoYW5nZSBmb3Igc3lzdGVtIHN0cmVhbSB0byBiZSByZW1vdmVkIHdoZW4gdGhlIHByb2JsZW0gaXMKICAgICAgICAgICAgICAgICAvLyBoYW5kbGVkIGJ5IHN5c3RlbSBVSQogICAgICAgICAgICAgICAgIHN0YXR1c190IHZvbFN0YXR1cyA9Ci0gICAgICAgICAgICAgICAgICAgICAgICBjaGVja0FuZFNldFZvbHVtZSgoYXVkaW9fc3RyZWFtX3R5cGVfdCljdXJTdHJlYW0sIGluZGV4LCBkZXNjLCBjdXJEZXZpY2UsCisgICAgICAgICAgICAgICAgICAgICAgICBjaGVja0FuZFNldFZvbHVtZSgoYXVkaW9fc3RyZWFtX3R5cGVfdCljdXJTdHJlYW0sIGlkeCwgZGVzYywgY3VyRGV2aWNlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIChzdHJlYW0gPT0gQVVESU9fU1RSRUFNX1NZU1RFTSkgPyBUT1VDSF9TT1VORF9GSVhFRF9ERUxBWV9NUyA6IDApOwogICAgICAgICAgICAgICAgIGlmICh2b2xTdGF0dXMgIT0gTk9fRVJST1IpIHsKICAgICAgICAgICAgICAgICAgICAgc3RhdHVzID0gdm9sU3RhdHVzOwpAQCAtMjUwMCwxMiArMjUyNiwxMyBAQAogICAgIHNwPEh3TW9kdWxlPiByU3VibWl4TW9kdWxlOwogICAgIC8vIGV4YW1pbmUgZWFjaCBtaXgncyByb3V0ZSB0eXBlCiAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtaXhlcy5zaXplKCk7IGkrKykgeworICAgICAgICBBdWRpb01peCBtaXggPSBtaXhlc1tpXTsKICAgICAgICAgLy8gd2Ugb25seSBzdXBwb3J0IE1JWF9ST1VURV9GTEFHX0xPT1BfQkFDSyBvciBNSVhfUk9VVEVfRkxBR19SRU5ERVIsIG5vdCB0aGUgY29tYmluYXRpb24KLSAgICAgICAgaWYgKChtaXhlc1tpXS5tUm91dGVGbGFncyAmIE1JWF9ST1VURV9GTEFHX0FMTCkgPT0gTUlYX1JPVVRFX0ZMQUdfQUxMKSB7CisgICAgICAgIGlmICgobWl4Lm1Sb3V0ZUZsYWdzICYgTUlYX1JPVVRFX0ZMQUdfQUxMKSA9PSBNSVhfUk9VVEVfRkxBR19BTEwpIHsKICAgICAgICAgICAgIHJlcyA9IElOVkFMSURfT1BFUkFUSU9OOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KLSAgICAgICAgaWYgKChtaXhlc1tpXS5tUm91dGVGbGFncyAmIE1JWF9ST1VURV9GTEFHX0xPT1BfQkFDSykgPT0gTUlYX1JPVVRFX0ZMQUdfTE9PUF9CQUNLKSB7CisgICAgICAgIGlmICgobWl4Lm1Sb3V0ZUZsYWdzICYgTUlYX1JPVVRFX0ZMQUdfTE9PUF9CQUNLKSA9PSBNSVhfUk9VVEVfRkxBR19MT09QX0JBQ0spIHsKICAgICAgICAgICAgIEFMT0dWKCJyZWdpc3RlclBvbGljeU1peGVzKCkgbWl4ICV6dSBvZiAlenUgaXMgTE9PUF9CQUNLIiwgaSwgbWl4ZXMuc2l6ZSgpKTsKICAgICAgICAgICAgIGlmIChyU3VibWl4TW9kdWxlID09IDApIHsKICAgICAgICAgICAgICAgICByU3VibWl4TW9kdWxlID0gbUh3TW9kdWxlcy5nZXRNb2R1bGVGcm9tTmFtZSgKQEAgLTI1MTgsMTUgKzI1NDUsMjAgQEAKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgIFN0cmluZzggYWRkcmVzcyA9IG1peGVzW2ldLm1EZXZpY2VBZGRyZXNzOworICAgICAgICAgICAgU3RyaW5nOCBhZGRyZXNzID0gbWl4Lm1EZXZpY2VBZGRyZXNzOworICAgICAgICAgICAgaWYgKG1peC5tTWl4VHlwZSA9PSBNSVhfVFlQRV9QTEFZRVJTKSB7CisgICAgICAgICAgICAgICAgbWl4Lm1EZXZpY2VUeXBlID0gQVVESU9fREVWSUNFX0lOX1JFTU9URV9TVUJNSVg7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIG1peC5tRGV2aWNlVHlwZSA9IEFVRElPX0RFVklDRV9PVVRfUkVNT1RFX1NVQk1JWDsKKyAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgaWYgKG1Qb2xpY3lNaXhlcy5yZWdpc3Rlck1peChhZGRyZXNzLCBtaXhlc1tpXSwgMCAvKm91dHB1dCBkZXNjKi8pICE9IE5PX0VSUk9SKSB7CisgICAgICAgICAgICBpZiAobVBvbGljeU1peGVzLnJlZ2lzdGVyTWl4KGFkZHJlc3MsIG1peCwgMCAvKm91dHB1dCBkZXNjKi8pICE9IE5PX0VSUk9SKSB7CiAgICAgICAgICAgICAgICAgQUxPR0UoIiBFcnJvciByZWdpc3RlcmluZyBtaXggJXp1IGZvciBhZGRyZXNzICVzIiwgaSwgYWRkcmVzcy5zdHJpbmcoKSk7CiAgICAgICAgICAgICAgICAgcmVzID0gSU5WQUxJRF9PUEVSQVRJT047CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBhdWRpb19jb25maWdfdCBvdXRwdXRDb25maWcgPSBtaXhlc1tpXS5tRm9ybWF0OwotICAgICAgICAgICAgYXVkaW9fY29uZmlnX3QgaW5wdXRDb25maWcgPSBtaXhlc1tpXS5tRm9ybWF0OworICAgICAgICAgICAgYXVkaW9fY29uZmlnX3Qgb3V0cHV0Q29uZmlnID0gbWl4Lm1Gb3JtYXQ7CisgICAgICAgICAgICBhdWRpb19jb25maWdfdCBpbnB1dENvbmZpZyA9IG1peC5tRm9ybWF0OwogICAgICAgICAgICAgLy8gTk9URTogYXVkaW8gZmxpbmdlciBtaXhlciBkb2VzIG5vdCBzdXBwb3J0IG1vbm8gb3V0cHV0OiBjb25maWd1cmUgcmVtb3RlIHN1Ym1peCBIQUwgaW4KICAgICAgICAgICAgIC8vIHN0ZXJlbyBhbmQgbGV0IGF1ZGlvIGZsaW5nZXIgZG8gdGhlIGNoYW5uZWwgY29udmVyc2lvbiBpZiBuZWVkZWQuCiAgICAgICAgICAgICBvdXRwdXRDb25maWcuY2hhbm5lbF9tYXNrID0gQVVESU9fQ0hBTk5FTF9PVVRfU1RFUkVPOwpAQCAtMjUzNiw3ICsyNTY4LDcgQEAKICAgICAgICAgICAgIHJTdWJtaXhNb2R1bGUtPmFkZElucHV0UHJvZmlsZShhZGRyZXNzLCAmaW5wdXRDb25maWcsCiAgICAgICAgICAgICAgICAgICAgIEFVRElPX0RFVklDRV9JTl9SRU1PVEVfU1VCTUlYLCBhZGRyZXNzKTsKIAotICAgICAgICAgICAgaWYgKG1peGVzW2ldLm1NaXhUeXBlID09IE1JWF9UWVBFX1BMQVlFUlMpIHsKKyAgICAgICAgICAgIGlmIChtaXgubU1peFR5cGUgPT0gTUlYX1RZUEVfUExBWUVSUykgewogICAgICAgICAgICAgICAgIHNldERldmljZUNvbm5lY3Rpb25TdGF0ZUludChBVURJT19ERVZJQ0VfSU5fUkVNT1RFX1NVQk1JWCwKICAgICAgICAgICAgICAgICAgICAgICAgIEFVRElPX1BPTElDWV9ERVZJQ0VfU1RBVEVfQVZBSUxBQkxFLAogICAgICAgICAgICAgICAgICAgICAgICAgYWRkcmVzcy5zdHJpbmcoKSwgInJlbW90ZS1zdWJtaXgiKTsKQEAgLTI1NDUsOSArMjU3Nyw5IEBACiAgICAgICAgICAgICAgICAgICAgICAgICBBVURJT19QT0xJQ1lfREVWSUNFX1NUQVRFX0FWQUlMQUJMRSwKICAgICAgICAgICAgICAgICAgICAgICAgIGFkZHJlc3Muc3RyaW5nKCksICJyZW1vdGUtc3VibWl4Iik7CiAgICAgICAgICAgICB9Ci0gICAgICAgIH0gZWxzZSBpZiAoKG1peGVzW2ldLm1Sb3V0ZUZsYWdzICYgTUlYX1JPVVRFX0ZMQUdfUkVOREVSKSA9PSBNSVhfUk9VVEVfRkxBR19SRU5ERVIpIHsKLSAgICAgICAgICAgIFN0cmluZzggYWRkcmVzcyA9IG1peGVzW2ldLm1EZXZpY2VBZGRyZXNzOwotICAgICAgICAgICAgYXVkaW9fZGV2aWNlc190IGRldmljZSA9IG1peGVzW2ldLm1EZXZpY2VUeXBlOworICAgICAgICB9IGVsc2UgaWYgKChtaXgubVJvdXRlRmxhZ3MgJiBNSVhfUk9VVEVfRkxBR19SRU5ERVIpID09IE1JWF9ST1VURV9GTEFHX1JFTkRFUikgeworICAgICAgICAgICAgU3RyaW5nOCBhZGRyZXNzID0gbWl4Lm1EZXZpY2VBZGRyZXNzOworICAgICAgICAgICAgYXVkaW9fZGV2aWNlc190IGRldmljZSA9IG1peC5tRGV2aWNlVHlwZTsKICAgICAgICAgICAgIEFMT0dWKCIgcmVnaXN0ZXJQb2xpY3lNaXhlcygpIG1peCAlenUgb2YgJXp1IGlzIFJFTkRFUiwgZGV2PTB4JVggYWRkcj0lcyIsCiAgICAgICAgICAgICAgICAgICAgIGksIG1peGVzLnNpemUoKSwgZGV2aWNlLCBhZGRyZXNzLnN0cmluZygpKTsKIApAQCAtMjU2MCw3ICsyNTkyLDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICYmIChwYXRjaC0+bVBhdGNoLnNpbmtzWzBdLmV4dC5kZXZpY2UudHlwZSA9PSBkZXZpY2UpCiAgICAgICAgICAgICAgICAgICAgICAgICAmJiAoc3RybmNtcChwYXRjaC0+bVBhdGNoLnNpbmtzWzBdLmV4dC5kZXZpY2UuYWRkcmVzcywgYWRkcmVzcy5zdHJpbmcoKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQVVESU9fREVWSUNFX01BWF9BRERSRVNTX0xFTikgPT0gMCkpIHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKG1Qb2xpY3lNaXhlcy5yZWdpc3Rlck1peChhZGRyZXNzLCBtaXhlc1tpXSwgZGVzYykgIT0gTk9fRVJST1IpIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKG1Qb2xpY3lNaXhlcy5yZWdpc3Rlck1peChhZGRyZXNzLCBtaXgsIGRlc2MpICE9IE5PX0VSUk9SKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICByZXMgPSBJTlZBTElEX09QRVJBVElPTjsKICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgICAgIGZvdW5kT3V0cHV0ID0gdHJ1ZTsKQEAgLTI2MzgsNTcgKzI2NzAsNTMgQEAKICAgICByZXR1cm4gcmVzOwogfQogCit2b2lkIEF1ZGlvUG9saWN5TWFuYWdlcjo6ZHVtcChTdHJpbmc4ICpkc3QpIGNvbnN0Cit7CisgICAgZHN0LT5hcHBlbmRGb3JtYXQoIlxuQXVkaW9Qb2xpY3lNYW5hZ2VyIER1bXA6ICVwXG4iLCB0aGlzKTsKKyAgICBkc3QtPmFwcGVuZEZvcm1hdCgiIFByaW1hcnkgT3V0cHV0OiAlZFxuIiwKKyAgICAgICAgICAgICBoYXNQcmltYXJ5T3V0cHV0KCkgPyBtUHJpbWFyeU91dHB1dC0+bUlvSGFuZGxlIDogQVVESU9fSU9fSEFORExFX05PTkUpOworICAgIHN0ZDo6c3RyaW5nIHN0YXRlTGl0ZXJhbDsKKyAgICBBdWRpb01vZGVDb252ZXJ0ZXI6OnRvU3RyaW5nKG1FbmdpbmUtPmdldFBob25lU3RhdGUoKSwgc3RhdGVMaXRlcmFsKTsKKyAgICBkc3QtPmFwcGVuZEZvcm1hdCgiIFBob25lIHN0YXRlOiAlc1xuIiwgc3RhdGVMaXRlcmFsLmNfc3RyKCkpOworICAgIGNvbnN0IGNoYXIqIGZvcmNlVXNlc1tBVURJT19QT0xJQ1lfRk9SQ0VfVVNFX0NOVF0gPSB7CisgICAgICAgICJjb21tdW5pY2F0aW9ucyIsICJtZWRpYSIsICJyZWNvcmQiLCAiZG9jayIsICJzeXN0ZW0iLAorICAgICAgICAiSERNSSBzeXN0ZW0gYXVkaW8iLCAiZW5jb2RlZCBzdXJyb3VuZCBvdXRwdXQiLCAidmlicmF0ZSByaW5naW5nIiB9OworICAgIGZvciAoYXVkaW9fcG9saWN5X2ZvcmNlX3VzZV90IGkgPSBBVURJT19QT0xJQ1lfRk9SQ0VfRk9SX0NPTU1VTklDQVRJT047CisgICAgICAgICBpIDwgQVVESU9fUE9MSUNZX0ZPUkNFX1VTRV9DTlQ7IGkgPSAoYXVkaW9fcG9saWN5X2ZvcmNlX3VzZV90KSgoaW50KWkgKyAxKSkgeworICAgICAgICBkc3QtPmFwcGVuZEZvcm1hdCgiIEZvcmNlIHVzZSBmb3IgJXM6ICVkXG4iLAorICAgICAgICAgICAgICAgIGZvcmNlVXNlc1tpXSwgbUVuZ2luZS0+Z2V0Rm9yY2VVc2UoaSkpOworICAgIH0KKyAgICBkc3QtPmFwcGVuZEZvcm1hdCgiIFRUUyBvdXRwdXQgJXNhdmFpbGFibGVcbiIsIG1UdHNPdXRwdXRBdmFpbGFibGUgPyAiIiA6ICJub3QgIik7CisgICAgZHN0LT5hcHBlbmRGb3JtYXQoIiBNYXN0ZXIgbW9ubzogJXNcbiIsIG1NYXN0ZXJNb25vID8gIm9uIiA6ICJvZmYiKTsKKyAgICBkc3QtPmFwcGVuZEZvcm1hdCgiIENvbmZpZyBzb3VyY2U6ICVzXG4iLCBtQ29uZmlnLmdldFNvdXJjZSgpLmNfc3RyKCkpOyAvLyBnZXRDb25maWcgbm90IGNvbnN0CisgICAgbUF2YWlsYWJsZU91dHB1dERldmljZXMuZHVtcChkc3QsIFN0cmluZzgoIkF2YWlsYWJsZSBvdXRwdXQiKSk7CisgICAgbUF2YWlsYWJsZUlucHV0RGV2aWNlcy5kdW1wKGRzdCwgU3RyaW5nOCgiQXZhaWxhYmxlIGlucHV0IikpOworICAgIG1Id01vZHVsZXNBbGwuZHVtcChkc3QpOworICAgIG1PdXRwdXRzLmR1bXAoZHN0KTsKKyAgICBtSW5wdXRzLmR1bXAoZHN0KTsKKyAgICBtVm9sdW1lQ3VydmVzLT5kdW1wKGRzdCk7CisgICAgbUVmZmVjdHMuZHVtcChkc3QpOworICAgIG1BdWRpb1BhdGNoZXMuZHVtcChkc3QpOworICAgIG1Qb2xpY3lNaXhlcy5kdW1wKGRzdCk7CisgICAgbUF1ZGlvU291cmNlcy5kdW1wKGRzdCk7CisgICAgaWYgKCFtU3Vycm91bmRGb3JtYXRzLmVtcHR5KCkpIHsKKyAgICAgICAgZHN0LT5hcHBlbmQoIlxuRW5hYmxlZCBTdXJyb3VuZCBGb3JtYXRzOlxuIik7CisgICAgICAgIHNpemVfdCBpID0gMDsKKyAgICAgICAgZm9yIChjb25zdCBhdXRvJiBmbXQgOiBtU3Vycm91bmRGb3JtYXRzKSB7CisgICAgICAgICAgICBkc3QtPmFwcGVuZChpKysgPT0gMCA/ICIgICIgOiAiLCAiKTsKKyAgICAgICAgICAgIHN0ZDo6c3RyaW5nIHNmbXQ7CisgICAgICAgICAgICBGb3JtYXRDb252ZXJ0ZXI6OnRvU3RyaW5nKGZtdCwgc2ZtdCk7CisgICAgICAgICAgICBkc3QtPmFwcGVuZChzZm10LmNfc3RyKCkpOworICAgICAgICB9CisgICAgICAgIGRzdC0+YXBwZW5kKCJcbiIpOworICAgIH0KK30KIAogc3RhdHVzX3QgQXVkaW9Qb2xpY3lNYW5hZ2VyOjpkdW1wKGludCBmZCkKIHsKLSAgICBjb25zdCBzaXplX3QgU0laRSA9IDI1NjsKLSAgICBjaGFyIGJ1ZmZlcltTSVpFXTsKICAgICBTdHJpbmc4IHJlc3VsdDsKLQotICAgIHNucHJpbnRmKGJ1ZmZlciwgU0laRSwgIlxuQXVkaW9Qb2xpY3lNYW5hZ2VyIER1bXA6ICVwXG4iLCB0aGlzKTsKLSAgICByZXN1bHQuYXBwZW5kKGJ1ZmZlcik7Ci0KLSAgICBzbnByaW50ZihidWZmZXIsIFNJWkUsICIgUHJpbWFyeSBPdXRwdXQ6ICVkXG4iLAotICAgICAgICAgICAgIGhhc1ByaW1hcnlPdXRwdXQoKSA/IG1QcmltYXJ5T3V0cHV0LT5tSW9IYW5kbGUgOiBBVURJT19JT19IQU5ETEVfTk9ORSk7Ci0gICAgcmVzdWx0LmFwcGVuZChidWZmZXIpOwotICAgIHN0ZDo6c3RyaW5nIHN0YXRlTGl0ZXJhbDsKLSAgICBBdWRpb01vZGVDb252ZXJ0ZXI6OnRvU3RyaW5nKG1FbmdpbmUtPmdldFBob25lU3RhdGUoKSwgc3RhdGVMaXRlcmFsKTsKLSAgICBzbnByaW50ZihidWZmZXIsIFNJWkUsICIgUGhvbmUgc3RhdGU6ICVzXG4iLCBzdGF0ZUxpdGVyYWwuY19zdHIoKSk7Ci0gICAgcmVzdWx0LmFwcGVuZChidWZmZXIpOwotICAgIHNucHJpbnRmKGJ1ZmZlciwgU0laRSwgIiBGb3JjZSB1c2UgZm9yIGNvbW11bmljYXRpb25zICVkXG4iLAotICAgICAgICAgICAgIG1FbmdpbmUtPmdldEZvcmNlVXNlKEFVRElPX1BPTElDWV9GT1JDRV9GT1JfQ09NTVVOSUNBVElPTikpOwotICAgIHJlc3VsdC5hcHBlbmQoYnVmZmVyKTsKLSAgICBzbnByaW50ZihidWZmZXIsIFNJWkUsICIgRm9yY2UgdXNlIGZvciBtZWRpYSAlZFxuIiwgbUVuZ2luZS0+Z2V0Rm9yY2VVc2UoQVVESU9fUE9MSUNZX0ZPUkNFX0ZPUl9NRURJQSkpOwotICAgIHJlc3VsdC5hcHBlbmQoYnVmZmVyKTsKLSAgICBzbnByaW50ZihidWZmZXIsIFNJWkUsICIgRm9yY2UgdXNlIGZvciByZWNvcmQgJWRcbiIsIG1FbmdpbmUtPmdldEZvcmNlVXNlKEFVRElPX1BPTElDWV9GT1JDRV9GT1JfUkVDT1JEKSk7Ci0gICAgcmVzdWx0LmFwcGVuZChidWZmZXIpOwotICAgIHNucHJpbnRmKGJ1ZmZlciwgU0laRSwgIiBGb3JjZSB1c2UgZm9yIGRvY2sgJWRcbiIsIG1FbmdpbmUtPmdldEZvcmNlVXNlKEFVRElPX1BPTElDWV9GT1JDRV9GT1JfRE9DSykpOwotICAgIHJlc3VsdC5hcHBlbmQoYnVmZmVyKTsKLSAgICBzbnByaW50ZihidWZmZXIsIFNJWkUsICIgRm9yY2UgdXNlIGZvciBzeXN0ZW0gJWRcbiIsIG1FbmdpbmUtPmdldEZvcmNlVXNlKEFVRElPX1BPTElDWV9GT1JDRV9GT1JfU1lTVEVNKSk7Ci0gICAgcmVzdWx0LmFwcGVuZChidWZmZXIpOwotICAgIHNucHJpbnRmKGJ1ZmZlciwgU0laRSwgIiBGb3JjZSB1c2UgZm9yIGhkbWkgc3lzdGVtIGF1ZGlvICVkXG4iLAotICAgICAgICAgICAgbUVuZ2luZS0+Z2V0Rm9yY2VVc2UoQVVESU9fUE9MSUNZX0ZPUkNFX0ZPUl9IRE1JX1NZU1RFTV9BVURJTykpOwotICAgIHJlc3VsdC5hcHBlbmQoYnVmZmVyKTsKLSAgICBzbnByaW50ZihidWZmZXIsIFNJWkUsICIgRm9yY2UgdXNlIGZvciBlbmNvZGVkIHN1cnJvdW5kIG91dHB1dCAlZFxuIiwKLSAgICAgICAgICAgIG1FbmdpbmUtPmdldEZvcmNlVXNlKEFVRElPX1BPTElDWV9GT1JDRV9GT1JfRU5DT0RFRF9TVVJST1VORCkpOwotICAgIHJlc3VsdC5hcHBlbmQoYnVmZmVyKTsKLSAgICBzbnByaW50ZihidWZmZXIsIFNJWkUsICIgVFRTIG91dHB1dCAlc1xuIiwgbVR0c091dHB1dEF2YWlsYWJsZSA/ICJhdmFpbGFibGUiIDogIm5vdCBhdmFpbGFibGUiKTsKLSAgICByZXN1bHQuYXBwZW5kKGJ1ZmZlcik7Ci0gICAgc25wcmludGYoYnVmZmVyLCBTSVpFLCAiIE1hc3RlciBtb25vOiAlc1xuIiwgbU1hc3Rlck1vbm8gPyAib24iIDogIm9mZiIpOwotICAgIHJlc3VsdC5hcHBlbmQoYnVmZmVyKTsKLQorICAgIGR1bXAoJnJlc3VsdCk7CiAgICAgd3JpdGUoZmQsIHJlc3VsdC5zdHJpbmcoKSwgcmVzdWx0LnNpemUoKSk7Ci0KLSAgICBtQXZhaWxhYmxlT3V0cHV0RGV2aWNlcy5kdW1wKGZkLCBTdHJpbmc4KCJBdmFpbGFibGUgb3V0cHV0IikpOwotICAgIG1BdmFpbGFibGVJbnB1dERldmljZXMuZHVtcChmZCwgU3RyaW5nOCgiQXZhaWxhYmxlIGlucHV0IikpOwotICAgIG1Id01vZHVsZXNBbGwuZHVtcChmZCk7Ci0gICAgbU91dHB1dHMuZHVtcChmZCk7Ci0gICAgbUlucHV0cy5kdW1wKGZkKTsKLSAgICBtVm9sdW1lQ3VydmVzLT5kdW1wKGZkKTsKLSAgICBtRWZmZWN0cy5kdW1wKGZkKTsKLSAgICBtQXVkaW9QYXRjaGVzLmR1bXAoZmQpOwotICAgIG1Qb2xpY3lNaXhlcy5kdW1wKGZkKTsKLQogICAgIHJldHVybiBOT19FUlJPUjsKIH0KIApAQCAtMjcwOSwxMiArMjczNyw5IEBACiAgICAgfQogCiAgICAgLy8gQ2hlY2sgaWYgb2ZmbG9hZCBoYXMgYmVlbiBkaXNhYmxlZAotICAgIGNoYXIgcHJvcFZhbHVlW1BST1BFUlRZX1ZBTFVFX01BWF07Ci0gICAgaWYgKHByb3BlcnR5X2dldCgiYXVkaW8ub2ZmbG9hZC5kaXNhYmxlIiwgcHJvcFZhbHVlLCAiMCIpKSB7Ci0gICAgICAgIGlmIChhdG9pKHByb3BWYWx1ZSkgIT0gMCkgewotICAgICAgICAgICAgQUxPR1YoIm9mZmxvYWQgZGlzYWJsZWQgYnkgYXVkaW8ub2ZmbG9hZC5kaXNhYmxlPSVzIiwgcHJvcFZhbHVlICk7Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0KKyAgICBpZiAocHJvcGVydHlfZ2V0X2Jvb2woImF1ZGlvLm9mZmxvYWQuZGlzYWJsZSIsIGZhbHNlIC8qIGRlZmF1bHRfdmFsdWUgKi8pKSB7CisgICAgICAgIEFMT0dWKCJvZmZsb2FkIGRpc2FibGVkIGJ5IGF1ZGlvLm9mZmxvYWQuZGlzYWJsZSIpOworICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogCiAgICAgLy8gQ2hlY2sgaWYgc3RyZWFtIHR5cGUgaXMgbXVzaWMsIHRoZW4gb25seSBhbGxvdyBvZmZsb2FkIGFzIG9mIG5vdy4KQEAgLTI3MzMsOSArMjc1OCwxMiBAQAogICAgIH0KIAogICAgIC8vSWYgZHVyYXRpb24gaXMgbGVzcyB0aGFuIG1pbmltdW0gdmFsdWUgZGVmaW5lZCBpbiBwcm9wZXJ0eSwgcmV0dXJuIGZhbHNlCi0gICAgaWYgKHByb3BlcnR5X2dldCgiYXVkaW8ub2ZmbG9hZC5taW4uZHVyYXRpb24uc2VjcyIsIHByb3BWYWx1ZSwgTlVMTCkpIHsKLSAgICAgICAgaWYgKG9mZmxvYWRJbmZvLmR1cmF0aW9uX3VzIDwgKGF0b2kocHJvcFZhbHVlKSAqIDEwMDAwMDAgKSkgewotICAgICAgICAgICAgQUxPR1YoIk9mZmxvYWQgZGVuaWVkIGJ5IGR1cmF0aW9uIDwgYXVkaW8ub2ZmbG9hZC5taW4uZHVyYXRpb24uc2Vjcyg9JXMpIiwgcHJvcFZhbHVlKTsKKyAgICBjb25zdCBpbnQgbWluX2R1cmF0aW9uX3NlY3MgPSBwcm9wZXJ0eV9nZXRfaW50MzIoCisgICAgICAgICAgICAiYXVkaW8ub2ZmbG9hZC5taW4uZHVyYXRpb24uc2VjcyIsIC0xIC8qIGRlZmF1bHRfdmFsdWUgKi8pOworICAgIGlmIChtaW5fZHVyYXRpb25fc2VjcyA+PSAwKSB7CisgICAgICAgIGlmIChvZmZsb2FkSW5mby5kdXJhdGlvbl91cyA8IG1pbl9kdXJhdGlvbl9zZWNzICogMTAwMDAwMExMKSB7CisgICAgICAgICAgICBBTE9HVigiT2ZmbG9hZCBkZW5pZWQgYnkgZHVyYXRpb24gPCBhdWRpby5vZmZsb2FkLm1pbi5kdXJhdGlvbi5zZWNzKD0lZCkiLAorICAgICAgICAgICAgICAgICAgICBtaW5fZHVyYXRpb25fc2Vjcyk7CiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIH0KICAgICB9IGVsc2UgaWYgKG9mZmxvYWRJbmZvLmR1cmF0aW9uX3VzIDwgT0ZGTE9BRF9ERUZBVUxUX01JTl9EVVJBVElPTl9TRUNTICogMTAwMDAwMCkgewpAQCAtMjg3Miw4ICsyOTAwLDcgQEAKICAgICB9CiAgICAgQUxPR1YoImNyZWF0ZUF1ZGlvUGF0Y2goKSBudW0gc291cmNlcyAlZCBudW0gc2lua3MgJWQiLCBwYXRjaC0+bnVtX3NvdXJjZXMsIHBhdGNoLT5udW1fc2lua3MpOwogCi0gICAgaWYgKHBhdGNoLT5udW1fc291cmNlcyA9PSAwIHx8IHBhdGNoLT5udW1fc291cmNlcyA+IEFVRElPX1BBVENIX1BPUlRTX01BWCB8fAotICAgICAgICAgICAgcGF0Y2gtPm51bV9zaW5rcyA9PSAwIHx8IHBhdGNoLT5udW1fc2lua3MgPiBBVURJT19QQVRDSF9QT1JUU19NQVgpIHsKKyAgICBpZiAoIWF1ZGlvX3BhdGNoX2lzX3ZhbGlkKHBhdGNoKSkgewogICAgICAgICByZXR1cm4gQkFEX1ZBTFVFOwogICAgIH0KICAgICAvLyBvbmx5IG9uZSBzb3VyY2UgcGVyIGF1ZGlvIHBhdGNoIHN1cHBvcnRlZCBmb3Igbm93CkBAIC0zMDkyLDI4ICszMTE5LDggQEAKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIC8vIFRPRE86IGNoZWNrIGZyb20gcm91dGluZyBjYXBhYmlsaXRpZXMgaW4gY29uZmlnIGZpbGUgYW5kIG90aGVyIGNvbmZsaWN0aW5nIHBhdGNoZXMKIAotICAgICAgICAgICAgYXVkaW9fcGF0Y2hfaGFuZGxlX3QgYWZQYXRjaEhhbmRsZSA9IEFVRElPX1BBVENIX0hBTkRMRV9OT05FOwotICAgICAgICAgICAgaWYgKGluZGV4ID49IDApIHsKLSAgICAgICAgICAgICAgICBhZlBhdGNoSGFuZGxlID0gcGF0Y2hEZXNjLT5tQWZQYXRjaEhhbmRsZTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgc3RhdHVzX3Qgc3RhdHVzID0gbXBDbGllbnRJbnRlcmZhY2UtPmNyZWF0ZUF1ZGlvUGF0Y2goJm5ld1BhdGNoLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmFmUGF0Y2hIYW5kbGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwKTsKLSAgICAgICAgICAgIEFMT0dWKCJjcmVhdGVBdWRpb1BhdGNoKCkgcGF0Y2ggcGFuZWwgcmV0dXJuZWQgJWQgcGF0Y2hIYW5kbGUgJWQiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdHVzLCBhZlBhdGNoSGFuZGxlKTsKLSAgICAgICAgICAgIGlmIChzdGF0dXMgPT0gTk9fRVJST1IpIHsKLSAgICAgICAgICAgICAgICBpZiAoaW5kZXggPCAwKSB7Ci0gICAgICAgICAgICAgICAgICAgIHBhdGNoRGVzYyA9IG5ldyBBdWRpb1BhdGNoKCZuZXdQYXRjaCwgdWlkKTsKLSAgICAgICAgICAgICAgICAgICAgYWRkQXVkaW9QYXRjaChwYXRjaERlc2MtPm1IYW5kbGUsIHBhdGNoRGVzYyk7Ci0gICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgcGF0Y2hEZXNjLT5tUGF0Y2ggPSBuZXdQYXRjaDsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgcGF0Y2hEZXNjLT5tQWZQYXRjaEhhbmRsZSA9IGFmUGF0Y2hIYW5kbGU7Ci0gICAgICAgICAgICAgICAgKmhhbmRsZSA9IHBhdGNoRGVzYy0+bUhhbmRsZTsKLSAgICAgICAgICAgICAgICBuZXh0QXVkaW9Qb3J0R2VuZXJhdGlvbigpOwotICAgICAgICAgICAgICAgIG1wQ2xpZW50SW50ZXJmYWNlLT5vbkF1ZGlvUGF0Y2hMaXN0VXBkYXRlKCk7Ci0gICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgc3RhdHVzX3Qgc3RhdHVzID0gaW5zdGFsbFBhdGNoKF9fZnVuY19fLCBpbmRleCwgaGFuZGxlLCAmbmV3UGF0Y2gsIDAsIHVpZCwgJnBhdGNoRGVzYyk7CisgICAgICAgICAgICBpZiAoc3RhdHVzICE9IE5PX0VSUk9SKSB7CiAgICAgICAgICAgICAgICAgQUxPR1coImNyZWF0ZUF1ZGlvUGF0Y2goKSBwYXRjaCBwYW5lbCBjb3VsZCBub3QgY29ubmVjdCBkZXZpY2UgcGF0Y2gsIGVycm9yICVkIiwKICAgICAgICAgICAgICAgICBzdGF0dXMpOwogICAgICAgICAgICAgICAgIHJldHVybiBJTlZBTElEX09QRVJBVElPTjsKQEAgLTMyNDYsMTAgKzMyNTMsMTAgQEAKICAgICAgICAgcmV0dXJuIEJBRF9WQUxVRTsKICAgICB9CiAKLSAgICBzdHJ1Y3QgYXVkaW9fcG9ydF9jb25maWcgYmFja3VwQ29uZmlnOworICAgIHN0cnVjdCBhdWRpb19wb3J0X2NvbmZpZyBiYWNrdXBDb25maWcgPSB7fTsKICAgICBzdGF0dXNfdCBzdGF0dXMgPSBhdWRpb1BvcnRDb25maWctPmFwcGx5QXVkaW9Qb3J0Q29uZmlnKGNvbmZpZywgJmJhY2t1cENvbmZpZyk7CiAgICAgaWYgKHN0YXR1cyA9PSBOT19FUlJPUikgewotICAgICAgICBzdHJ1Y3QgYXVkaW9fcG9ydF9jb25maWcgbmV3Q29uZmlnOworICAgICAgICBzdHJ1Y3QgYXVkaW9fcG9ydF9jb25maWcgbmV3Q29uZmlnID0ge307CiAgICAgICAgIGF1ZGlvUG9ydENvbmZpZy0+dG9BdWRpb1BvcnRDb25maWcoJm5ld0NvbmZpZywgY29uZmlnKTsKICAgICAgICAgc3RhdHVzID0gbXBDbGllbnRJbnRlcmZhY2UtPnNldEF1ZGlvUG9ydENvbmZpZygmbmV3Q29uZmlnLCAwKTsKICAgICB9CkBAIC0zMzEwLDEyICszMzE3LDEyIEBACiB7CiAgICAgLy8gcmVtb3ZlIG91dHB1dCByb3V0ZXMgYXNzb2NpYXRlZCB3aXRoIHRoaXMgdWlkCiAgICAgU29ydGVkVmVjdG9yPHJvdXRpbmdfc3RyYXRlZ3k+IGFmZmVjdGVkU3RyYXRlZ2llczsKLSAgICBmb3IgKHNzaXplX3QgaSA9IChzc2l6ZV90KW1PdXRwdXRSb3V0ZXMuc2l6ZSgpIC0gMTsgaSA+PSAwOyBpLS0pICB7Ci0gICAgICAgIHNwPFNlc3Npb25Sb3V0ZT4gcm91dGUgPSBtT3V0cHV0Um91dGVzLnZhbHVlQXQoaSk7Ci0gICAgICAgIGlmIChyb3V0ZS0+bVVpZCA9PSB1aWQpIHsKLSAgICAgICAgICAgIG1PdXRwdXRSb3V0ZXMucmVtb3ZlSXRlbXNBdChpKTsKLSAgICAgICAgICAgIGlmIChyb3V0ZS0+bURldmljZURlc2NyaXB0b3IgIT0gMCkgewotICAgICAgICAgICAgICAgIGFmZmVjdGVkU3RyYXRlZ2llcy5hZGQoZ2V0U3RyYXRlZ3kocm91dGUtPm1TdHJlYW1UeXBlKSk7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtT3V0cHV0cy5zaXplKCk7IGkrKykgeworICAgICAgICBzcDxBdWRpb091dHB1dERlc2NyaXB0b3I+IG91dHB1dERlc2MgPSBtT3V0cHV0cy52YWx1ZUF0KGkpOworICAgICAgICBmb3IgKGNvbnN0IGF1dG8mIGNsaWVudCA6IG91dHB1dERlc2MtPmdldENsaWVudEl0ZXJhYmxlKCkpIHsKKyAgICAgICAgICAgIGlmIChjbGllbnQtPmhhc1ByZWZlcnJlZERldmljZSgpICYmIGNsaWVudC0+dWlkKCkgPT0gdWlkKSB7CisgICAgICAgICAgICAgICAgY2xpZW50LT5zZXRQcmVmZXJyZWREZXZpY2VJZChBVURJT19QT1JUX0hBTkRMRV9OT05FKTsKKyAgICAgICAgICAgICAgICBhZmZlY3RlZFN0cmF0ZWdpZXMuYWRkKGdldFN0cmF0ZWd5KGNsaWVudC0+c3RyZWFtKCkpKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgIH0KQEAgLTMzMjYsMTIgKzMzMzMsMTIgQEAKIAogICAgIC8vIHJlbW92ZSBpbnB1dCByb3V0ZXMgYXNzb2NpYXRlZCB3aXRoIHRoaXMgdWlkCiAgICAgU29ydGVkVmVjdG9yPGF1ZGlvX3NvdXJjZV90PiBhZmZlY3RlZFNvdXJjZXM7Ci0gICAgZm9yIChzc2l6ZV90IGkgPSAoc3NpemVfdCltSW5wdXRSb3V0ZXMuc2l6ZSgpIC0gMTsgaSA+PSAwOyBpLS0pICB7Ci0gICAgICAgIHNwPFNlc3Npb25Sb3V0ZT4gcm91dGUgPSBtSW5wdXRSb3V0ZXMudmFsdWVBdChpKTsKLSAgICAgICAgaWYgKHJvdXRlLT5tVWlkID09IHVpZCkgewotICAgICAgICAgICAgbUlucHV0Um91dGVzLnJlbW92ZUl0ZW1zQXQoaSk7Ci0gICAgICAgICAgICBpZiAocm91dGUtPm1EZXZpY2VEZXNjcmlwdG9yICE9IDApIHsKLSAgICAgICAgICAgICAgICBhZmZlY3RlZFNvdXJjZXMuYWRkKHJvdXRlLT5tU291cmNlKTsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1JbnB1dHMuc2l6ZSgpOyBpKyspIHsKKyAgICAgICAgc3A8QXVkaW9JbnB1dERlc2NyaXB0b3I+IGlucHV0RGVzYyA9IG1JbnB1dHMudmFsdWVBdChpKTsKKyAgICAgICAgZm9yIChjb25zdCBhdXRvJiBjbGllbnQgOiBpbnB1dERlc2MtPmdldENsaWVudEl0ZXJhYmxlKCkpIHsKKyAgICAgICAgICAgIGlmIChjbGllbnQtPmhhc1ByZWZlcnJlZERldmljZSgpICYmIGNsaWVudC0+dWlkKCkgPT0gdWlkKSB7CisgICAgICAgICAgICAgICAgY2xpZW50LT5zZXRQcmVmZXJyZWREZXZpY2VJZChBVURJT19QT1JUX0hBTkRMRV9OT05FKTsKKyAgICAgICAgICAgICAgICBhZmZlY3RlZFNvdXJjZXMuYWRkKGNsaWVudC0+c291cmNlKCkpOwogICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgfQpAQCAtMzM1MSw4ICszMzU4LDggQEAKIHZvaWQgQXVkaW9Qb2xpY3lNYW5hZ2VyOjpjbGVhckF1ZGlvU291cmNlcyh1aWRfdCB1aWQpCiB7CiAgICAgZm9yIChzc2l6ZV90IGkgPSAoc3NpemVfdCltQXVkaW9Tb3VyY2VzLnNpemUoKSAtIDE7IGkgPj0gMDsgaS0tKSAgewotICAgICAgICBzcDxBdWRpb1NvdXJjZURlc2NyaXB0b3I+IHNvdXJjZURlc2MgPSBtQXVkaW9Tb3VyY2VzLnZhbHVlQXQoaSk7Ci0gICAgICAgIGlmIChzb3VyY2VEZXNjLT5tVWlkID09IHVpZCkgeworICAgICAgICBzcDxTb3VyY2VDbGllbnREZXNjcmlwdG9yPiBzb3VyY2VEZXNjID0gbUF1ZGlvU291cmNlcy52YWx1ZUF0KGkpOworICAgICAgICBpZiAoc291cmNlRGVzYy0+dWlkKCkgPT0gdWlkKSB7CiAgICAgICAgICAgICBzdG9wQXVkaW9Tb3VyY2UobUF1ZGlvU291cmNlcy5rZXlBdChpKSk7CiAgICAgICAgIH0KICAgICB9CkBAIC0zMzcwLDIwICszMzc3LDIzIEBACiB9CiAKIHN0YXR1c190IEF1ZGlvUG9saWN5TWFuYWdlcjo6c3RhcnRBdWRpb1NvdXJjZShjb25zdCBzdHJ1Y3QgYXVkaW9fcG9ydF9jb25maWcgKnNvdXJjZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBhdWRpb19hdHRyaWJ1dGVzX3QgKmF0dHJpYnV0ZXMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXVkaW9fcGF0Y2hfaGFuZGxlX3QgKmhhbmRsZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aWRfdCB1aWQpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgYXVkaW9fYXR0cmlidXRlc190ICphdHRyaWJ1dGVzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF1ZGlvX3BvcnRfaGFuZGxlX3QgKnBvcnRJZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aWRfdCB1aWQpCiB7Ci0gICAgQUxPR1YoIiVzIHNvdXJjZSAlcCBhdHRyaWJ1dGVzICVwIGhhbmRsZSAlcCIsIF9fRlVOQ1RJT05fXywgc291cmNlLCBhdHRyaWJ1dGVzLCBoYW5kbGUpOwotICAgIGlmIChzb3VyY2UgPT0gTlVMTCB8fCBhdHRyaWJ1dGVzID09IE5VTEwgfHwgaGFuZGxlID09IE5VTEwpIHsKKyAgICBBTE9HVigiJXMiLCBfX0ZVTkNUSU9OX18pOworICAgICpwb3J0SWQgPSBBVURJT19QT1JUX0hBTkRMRV9OT05FOworCisgICAgaWYgKHNvdXJjZSA9PSBOVUxMIHx8IGF0dHJpYnV0ZXMgPT0gTlVMTCB8fCBwb3J0SWQgPT0gTlVMTCkgeworICAgICAgICBBTE9HVygiJXMgaW52YWxpZCBhcmd1bWVudDogc291cmNlICVwIGF0dHJpYnV0ZXMgJXAgaGFuZGxlICVwIiwKKyAgICAgICAgICAgICAgX19GVU5DVElPTl9fLCBzb3VyY2UsIGF0dHJpYnV0ZXMsIHBvcnRJZCk7CiAgICAgICAgIHJldHVybiBCQURfVkFMVUU7CiAgICAgfQogCi0gICAgKmhhbmRsZSA9IEFVRElPX1BBVENIX0hBTkRMRV9OT05FOwotCiAgICAgaWYgKHNvdXJjZS0+cm9sZSAhPSBBVURJT19QT1JUX1JPTEVfU09VUkNFIHx8CiAgICAgICAgICAgICBzb3VyY2UtPnR5cGUgIT0gQVVESU9fUE9SVF9UWVBFX0RFVklDRSkgewotICAgICAgICBBTE9HVigiJXMgSU5WQUxJRF9PUEVSQVRJT04gc291cmNlLT5yb2xlICVkIHNvdXJjZS0+dHlwZSAlZCIsIF9fRlVOQ1RJT05fXywgc291cmNlLT5yb2xlLCBzb3VyY2UtPnR5cGUpOworICAgICAgICBBTE9HVygiJXMgSU5WQUxJRF9PUEVSQVRJT04gc291cmNlLT5yb2xlICVkIHNvdXJjZS0+dHlwZSAlZCIsCisgICAgICAgICAgICAgIF9fRlVOQ1RJT05fXywgc291cmNlLT5yb2xlLCBzb3VyY2UtPnR5cGUpOwogICAgICAgICByZXR1cm4gSU5WQUxJRF9PUEVSQVRJT047CiAgICAgfQogCkBAIC0zMzkxLDQxICszNDAxLDQ0IEBACiAgICAgICAgICAgICBtQXZhaWxhYmxlSW5wdXREZXZpY2VzLmdldERldmljZShzb3VyY2UtPmV4dC5kZXZpY2UudHlwZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdHJpbmc4KHNvdXJjZS0+ZXh0LmRldmljZS5hZGRyZXNzKSk7CiAgICAgaWYgKHNyY0RldmljZURlc2MgPT0gMCkgewotICAgICAgICBBTE9HVigiJXMgc291cmNlLT5leHQuZGV2aWNlLnR5cGUgJTA4eCBub3QgZm91bmQiLCBfX0ZVTkNUSU9OX18sIHNvdXJjZS0+ZXh0LmRldmljZS50eXBlKTsKKyAgICAgICAgQUxPR1coIiVzIHNvdXJjZS0+ZXh0LmRldmljZS50eXBlICUwOHggbm90IGZvdW5kIiwgX19GVU5DVElPTl9fLCBzb3VyY2UtPmV4dC5kZXZpY2UudHlwZSk7CiAgICAgICAgIHJldHVybiBCQURfVkFMVUU7CiAgICAgfQotICAgIHNwPEF1ZGlvU291cmNlRGVzY3JpcHRvcj4gc291cmNlRGVzYyA9Ci0gICAgICAgICAgICBuZXcgQXVkaW9Tb3VyY2VEZXNjcmlwdG9yKHNyY0RldmljZURlc2MsIGF0dHJpYnV0ZXMsIHVpZCk7CiAKLSAgICBzdHJ1Y3QgYXVkaW9fcGF0Y2ggZHVtbXlQYXRjaDsKKyAgICAqcG9ydElkID0gQXVkaW9Qb3J0OjpnZXROZXh0VW5pcXVlSWQoKTsKKworICAgIHN0cnVjdCBhdWRpb19wYXRjaCBkdW1teVBhdGNoID0ge307CiAgICAgc3A8QXVkaW9QYXRjaD4gcGF0Y2hEZXNjID0gbmV3IEF1ZGlvUGF0Y2goJmR1bW15UGF0Y2gsIHVpZCk7Ci0gICAgc291cmNlRGVzYy0+bVBhdGNoRGVzYyA9IHBhdGNoRGVzYzsKKworICAgIHNwPFNvdXJjZUNsaWVudERlc2NyaXB0b3I+IHNvdXJjZURlc2MgPQorICAgICAgICBuZXcgU291cmNlQ2xpZW50RGVzY3JpcHRvcigqcG9ydElkLCB1aWQsICphdHRyaWJ1dGVzLCBwYXRjaERlc2MsIHNyY0RldmljZURlc2MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cmVhbVR5cGVmcm9tQXR0cmlidXRlc0ludChhdHRyaWJ1dGVzKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2V0U3RyYXRlZ3lGb3JBdHRyKGF0dHJpYnV0ZXMpKTsKIAogICAgIHN0YXR1c190IHN0YXR1cyA9IGNvbm5lY3RBdWRpb1NvdXJjZShzb3VyY2VEZXNjKTsKICAgICBpZiAoc3RhdHVzID09IE5PX0VSUk9SKSB7Ci0gICAgICAgIG1BdWRpb1NvdXJjZXMuYWRkKHNvdXJjZURlc2MtPmdldEhhbmRsZSgpLCBzb3VyY2VEZXNjKTsKLSAgICAgICAgKmhhbmRsZSA9IHNvdXJjZURlc2MtPmdldEhhbmRsZSgpOworICAgICAgICBtQXVkaW9Tb3VyY2VzLmFkZCgqcG9ydElkLCBzb3VyY2VEZXNjKTsKICAgICB9CiAgICAgcmV0dXJuIHN0YXR1czsKIH0KIAotc3RhdHVzX3QgQXVkaW9Qb2xpY3lNYW5hZ2VyOjpjb25uZWN0QXVkaW9Tb3VyY2UoY29uc3Qgc3A8QXVkaW9Tb3VyY2VEZXNjcmlwdG9yPiYgc291cmNlRGVzYykKK3N0YXR1c190IEF1ZGlvUG9saWN5TWFuYWdlcjo6Y29ubmVjdEF1ZGlvU291cmNlKGNvbnN0IHNwPFNvdXJjZUNsaWVudERlc2NyaXB0b3I+JiBzb3VyY2VEZXNjKQogewotICAgIEFMT0dWKCIlcyBoYW5kbGUgJWQiLCBfX0ZVTkNUSU9OX18sIHNvdXJjZURlc2MtPmdldEhhbmRsZSgpKTsKKyAgICBBTE9HVigiJXMgaGFuZGxlICVkIiwgX19GVU5DVElPTl9fLCBzb3VyY2VEZXNjLT5wb3J0SWQoKSk7CiAKICAgICAvLyBtYWtlIHN1cmUgd2Ugb25seSBoYXZlIG9uZSBwYXRjaCBwZXIgc291cmNlLgogICAgIGRpc2Nvbm5lY3RBdWRpb1NvdXJjZShzb3VyY2VEZXNjKTsKIAotICAgIHJvdXRpbmdfc3RyYXRlZ3kgc3RyYXRlZ3kgPSAocm91dGluZ19zdHJhdGVneSkgZ2V0U3RyYXRlZ3lGb3JBdHRyKCZzb3VyY2VEZXNjLT5tQXR0cmlidXRlcyk7Ci0gICAgYXVkaW9fc3RyZWFtX3R5cGVfdCBzdHJlYW0gPSBzdHJlYW1UeXBlZnJvbUF0dHJpYnV0ZXNJbnQoJnNvdXJjZURlc2MtPm1BdHRyaWJ1dGVzKTsKLSAgICBzcDxEZXZpY2VEZXNjcmlwdG9yPiBzcmNEZXZpY2VEZXNjID0gc291cmNlRGVzYy0+bURldmljZTsKKyAgICBhdWRpb19hdHRyaWJ1dGVzX3QgYXR0cmlidXRlcyA9IHNvdXJjZURlc2MtPmF0dHJpYnV0ZXMoKTsKKyAgICByb3V0aW5nX3N0cmF0ZWd5IHN0cmF0ZWd5ID0gZ2V0U3RyYXRlZ3lGb3JBdHRyKCZhdHRyaWJ1dGVzKTsKKyAgICBhdWRpb19zdHJlYW1fdHlwZV90IHN0cmVhbSA9IHNvdXJjZURlc2MtPnN0cmVhbSgpOworICAgIHNwPERldmljZURlc2NyaXB0b3I+IHNyY0RldmljZURlc2MgPSBzb3VyY2VEZXNjLT5zcmNEZXZpY2UoKTsKIAogICAgIGF1ZGlvX2RldmljZXNfdCBzaW5rRGV2aWNlID0gZ2V0RGV2aWNlRm9yU3RyYXRlZ3koc3RyYXRlZ3ksIHRydWUpOwogICAgIHNwPERldmljZURlc2NyaXB0b3I+IHNpbmtEZXZpY2VEZXNjID0KICAgICAgICAgICAgIG1BdmFpbGFibGVPdXRwdXREZXZpY2VzLmdldERldmljZShzaW5rRGV2aWNlLCBTdHJpbmc4KCIiKSk7CiAKICAgICBhdWRpb19wYXRjaF9oYW5kbGVfdCBhZlBhdGNoSGFuZGxlID0gQVVESU9fUEFUQ0hfSEFORExFX05PTkU7Ci0gICAgc3RydWN0IGF1ZGlvX3BhdGNoICpwYXRjaCA9ICZzb3VyY2VEZXNjLT5tUGF0Y2hEZXNjLT5tUGF0Y2g7CiAKICAgICBpZiAoc3JjRGV2aWNlRGVzYy0+Z2V0QXVkaW9Qb3J0KCktPm1Nb2R1bGUtPmdldEhhbmRsZSgpID09CiAgICAgICAgICAgICBzaW5rRGV2aWNlRGVzYy0+Z2V0QXVkaW9Qb3J0KCktPm1Nb2R1bGUtPmdldEhhbmRsZSgpICYmCkBAIC0zNDU3LDUxICszNDcwLDQ5IEBACiAgICAgICAgIC8vIGJlIGNvbm5lY3RlZCBhcyB3ZWxsIGFzIHRoZSBzdHJlYW0gdHlwZSBmb3Igdm9sdW1lIGNvbnRyb2wKICAgICAgICAgLy8gLSB0aGUgc2luayBpcyBkZWZpbmVkIGJ5IHdoYXRldmVyIG91dHB1dCBkZXZpY2UgaXMgY3VycmVudGx5IHNlbGVjdGVkIGZvciB0aGUgb3V0cHV0CiAgICAgICAgIC8vIHRob3VnaCB3aGljaCB0aGlzIHBhdGNoIGlzIHJvdXRlZC4KLSAgICAgICAgcGF0Y2gtPm51bV9zaW5rcyA9IDA7Ci0gICAgICAgIHBhdGNoLT5udW1fc291cmNlcyA9IDI7Ci0gICAgICAgIHNyY0RldmljZURlc2MtPnRvQXVkaW9Qb3J0Q29uZmlnKCZwYXRjaC0+c291cmNlc1swXSwgTlVMTCk7Ci0gICAgICAgIG91dHB1dERlc2MtPnRvQXVkaW9Qb3J0Q29uZmlnKCZwYXRjaC0+c291cmNlc1sxXSwgTlVMTCk7Ci0gICAgICAgIHBhdGNoLT5zb3VyY2VzWzFdLmV4dC5taXgudXNlY2FzZS5zdHJlYW0gPSBzdHJlYW07Ci0gICAgICAgIHN0YXR1cyA9IG1wQ2xpZW50SW50ZXJmYWNlLT5jcmVhdGVBdWRpb1BhdGNoKHBhdGNoLAorICAgICAgICBQYXRjaEJ1aWxkZXIgcGF0Y2hCdWlsZGVyOworICAgICAgICBwYXRjaEJ1aWxkZXIuYWRkU291cmNlKHNyY0RldmljZURlc2MpLmFkZFNvdXJjZShvdXRwdXREZXNjLCB7IC5zdHJlYW0gPSBzdHJlYW0gfSk7CisgICAgICAgIHN0YXR1cyA9IG1wQ2xpZW50SW50ZXJmYWNlLT5jcmVhdGVBdWRpb1BhdGNoKHBhdGNoQnVpbGRlci5wYXRjaCgpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmYWZQYXRjaEhhbmRsZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCk7CiAgICAgICAgIEFMT0dWKCIlcyBwYXRjaCBwYW5lbCByZXR1cm5lZCAlZCBwYXRjaEhhbmRsZSAlZCIsIF9fRlVOQ1RJT05fXywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdHVzLCBhZlBhdGNoSGFuZGxlKTsKKyAgICAgICAgc291cmNlRGVzYy0+cGF0Y2hEZXNjKCktPm1QYXRjaCA9ICpwYXRjaEJ1aWxkZXIucGF0Y2goKTsKICAgICAgICAgaWYgKHN0YXR1cyAhPSBOT19FUlJPUikgewogICAgICAgICAgICAgQUxPR1coIiVzIHBhdGNoIHBhbmVsIGNvdWxkIG5vdCBjb25uZWN0IGRldmljZSBwYXRjaCwgZXJyb3IgJWQiLAogICAgICAgICAgICAgICAgICAgX19GVU5DVElPTl9fLCBzdGF0dXMpOwogICAgICAgICAgICAgcmV0dXJuIElOVkFMSURfT1BFUkFUSU9OOwogICAgICAgICB9CiAgICAgICAgIHVpbnQzMl90IGRlbGF5TXMgPSAwOwotICAgICAgICBzdGF0dXMgPSBzdGFydFNvdXJjZShvdXRwdXREZXNjLCBzdHJlYW0sIHNpbmtEZXZpY2UsIE5VTEwsICZkZWxheU1zKTsKKyAgICAgICAgc3RhdHVzID0gc3RhcnRTb3VyY2Uob3V0cHV0RGVzYywgc291cmNlRGVzYywgJmRlbGF5TXMpOwogCiAgICAgICAgIGlmIChzdGF0dXMgIT0gTk9fRVJST1IpIHsKLSAgICAgICAgICAgIG1wQ2xpZW50SW50ZXJmYWNlLT5yZWxlYXNlQXVkaW9QYXRjaChzb3VyY2VEZXNjLT5tUGF0Y2hEZXNjLT5tQWZQYXRjaEhhbmRsZSwgMCk7CisgICAgICAgICAgICBtcENsaWVudEludGVyZmFjZS0+cmVsZWFzZUF1ZGlvUGF0Y2goc291cmNlRGVzYy0+cGF0Y2hEZXNjKCktPm1BZlBhdGNoSGFuZGxlLCAwKTsKICAgICAgICAgICAgIHJldHVybiBzdGF0dXM7CiAgICAgICAgIH0KLSAgICAgICAgc291cmNlRGVzYy0+bVN3T3V0cHV0ID0gb3V0cHV0RGVzYzsKKyAgICAgICAgc291cmNlRGVzYy0+c2V0U3dPdXRwdXQob3V0cHV0RGVzYyk7CiAgICAgICAgIGlmIChkZWxheU1zICE9IDApIHsKICAgICAgICAgICAgIHVzbGVlcChkZWxheU1zICogMTAwMCk7CiAgICAgICAgIH0KICAgICB9CiAKLSAgICBzb3VyY2VEZXNjLT5tUGF0Y2hEZXNjLT5tQWZQYXRjaEhhbmRsZSA9IGFmUGF0Y2hIYW5kbGU7Ci0gICAgYWRkQXVkaW9QYXRjaChzb3VyY2VEZXNjLT5tUGF0Y2hEZXNjLT5tSGFuZGxlLCBzb3VyY2VEZXNjLT5tUGF0Y2hEZXNjKTsKKyAgICBzb3VyY2VEZXNjLT5wYXRjaERlc2MoKS0+bUFmUGF0Y2hIYW5kbGUgPSBhZlBhdGNoSGFuZGxlOworICAgIGFkZEF1ZGlvUGF0Y2goc291cmNlRGVzYy0+cGF0Y2hEZXNjKCktPm1IYW5kbGUsIHNvdXJjZURlc2MtPnBhdGNoRGVzYygpKTsKIAogICAgIHJldHVybiBOT19FUlJPUjsKIH0KIAotc3RhdHVzX3QgQXVkaW9Qb2xpY3lNYW5hZ2VyOjpzdG9wQXVkaW9Tb3VyY2UoYXVkaW9fcGF0Y2hfaGFuZGxlX3QgaGFuZGxlIF9fdW51c2VkKQorc3RhdHVzX3QgQXVkaW9Qb2xpY3lNYW5hZ2VyOjpzdG9wQXVkaW9Tb3VyY2UoYXVkaW9fcG9ydF9oYW5kbGVfdCBwb3J0SWQpCiB7Ci0gICAgc3A8QXVkaW9Tb3VyY2VEZXNjcmlwdG9yPiBzb3VyY2VEZXNjID0gbUF1ZGlvU291cmNlcy52YWx1ZUZvcihoYW5kbGUpOwotICAgIEFMT0dWKCIlcyBoYW5kbGUgJWQiLCBfX0ZVTkNUSU9OX18sIGhhbmRsZSk7CisgICAgc3A8U291cmNlQ2xpZW50RGVzY3JpcHRvcj4gc291cmNlRGVzYyA9IG1BdWRpb1NvdXJjZXMudmFsdWVGb3IocG9ydElkKTsKKyAgICBBTE9HVigiJXMgcG9ydCBJRCAlZCIsIF9fRlVOQ1RJT05fXywgcG9ydElkKTsKICAgICBpZiAoc291cmNlRGVzYyA9PSAwKSB7Ci0gICAgICAgIEFMT0dXKCIlcyB1bmtub3duIHNvdXJjZSBmb3IgaGFuZGxlICVkIiwgX19GVU5DVElPTl9fLCBoYW5kbGUpOworICAgICAgICBBTE9HVygiJXMgdW5rbm93biBzb3VyY2UgZm9yIHBvcnQgSUQgJWQiLCBfX0ZVTkNUSU9OX18sIHBvcnRJZCk7CiAgICAgICAgIHJldHVybiBCQURfVkFMVUU7CiAgICAgfQogICAgIHN0YXR1c190IHN0YXR1cyA9IGRpc2Nvbm5lY3RBdWRpb1NvdXJjZShzb3VyY2VEZXNjKTsKIAotICAgIG1BdWRpb1NvdXJjZXMucmVtb3ZlSXRlbShoYW5kbGUpOworICAgIG1BdWRpb1NvdXJjZXMucmVtb3ZlSXRlbShwb3J0SWQpOwogICAgIHJldHVybiBzdGF0dXM7CiB9CiAKQEAgLTM1NDksNTAgKzM1NjAsNiBAQAogICAgIHJldHVybiBjb21wdXRlVm9sdW1lKHN0cmVhbSwgaW5kZXgsIGRldmljZSk7CiB9CiAKLXN0YXR1c190IEF1ZGlvUG9saWN5TWFuYWdlcjo6Z2V0U3VwcG9ydGVkRm9ybWF0cyhhdWRpb19pb19oYW5kbGVfdCBpb0hhbmRsZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGb3JtYXRWZWN0b3ImIGZvcm1hdHMpIHsKLSAgICBpZiAoaW9IYW5kbGUgPT0gQVVESU9fSU9fSEFORExFX05PTkUpIHsKLSAgICAgICAgcmV0dXJuIEJBRF9WQUxVRTsKLSAgICB9Ci0gICAgU3RyaW5nOCByZXBseTsKLSAgICByZXBseSA9IG1wQ2xpZW50SW50ZXJmYWNlLT5nZXRQYXJhbWV0ZXJzKAotICAgICAgICAgICAgaW9IYW5kbGUsIFN0cmluZzgoQXVkaW9QYXJhbWV0ZXI6OmtleVN0cmVhbVN1cHBvcnRlZEZvcm1hdHMpKTsKLSAgICBBTE9HVigiJXM6IHN1cHBvcnRlZCBmb3JtYXRzICVzIiwgX19GVU5DVElPTl9fLCByZXBseS5zdHJpbmcoKSk7Ci0gICAgQXVkaW9QYXJhbWV0ZXIgcmVwbGllZFBhcmFtZXRlcnMocmVwbHkpOwotICAgIGlmIChyZXBsaWVkUGFyYW1ldGVycy5nZXQoCi0gICAgICAgICAgICBTdHJpbmc4KEF1ZGlvUGFyYW1ldGVyOjprZXlTdHJlYW1TdXBwb3J0ZWRGb3JtYXRzKSwgcmVwbHkpICE9IE5PX0VSUk9SKSB7Ci0gICAgICAgIEFMT0dFKCIlczogZmFpbGVkIHRvIHJldHJpZXZlIGZvcm1hdCwgYmFpbGluZyBvdXQiLCBfX0ZVTkNUSU9OX18pOwotICAgICAgICByZXR1cm4gQkFEX1ZBTFVFOwotICAgIH0KLSAgICBmb3IgKGF1dG8gZm9ybWF0IDogZm9ybWF0c0Zyb21TdHJpbmcocmVwbHkuc3RyaW5nKCkpKSB7Ci0gICAgICAgIC8vIE9ubHkgQVVESU9fRk9STUFUX0FBQ19MQyB3aWxsIGJlIHVzZWQgaW4gU2V0dGluZ3MgVUkgZm9yIGFsbCBBQUMgZm9ybWF0cy4KLSAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBBUlJBWV9TSVpFKEFBQ19GT1JNQVRTKTsgaSsrKSB7Ci0gICAgICAgICAgICBpZiAoZm9ybWF0ID09IEFBQ19GT1JNQVRTW2ldKSB7Ci0gICAgICAgICAgICAgICAgZm9ybWF0ID0gQVVESU9fRk9STUFUX0FBQ19MQzsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICBib29sIGV4aXN0ID0gZmFsc2U7Ci0gICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgZm9ybWF0cy5zaXplKCk7IGkrKykgewotICAgICAgICAgICAgaWYgKGZvcm1hdCA9PSBmb3JtYXRzW2ldKSB7Ci0gICAgICAgICAgICAgICAgZXhpc3QgPSB0cnVlOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIGJvb2wgaXNTdXJyb3VuZEZvcm1hdCA9IGZhbHNlOwotICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IEFSUkFZX1NJWkUoU1VSUk9VTkRfRk9STUFUUyk7IGkrKykgewotICAgICAgICAgICAgaWYgKFNVUlJPVU5EX0ZPUk1BVFNbaV0gPT0gZm9ybWF0KSB7Ci0gICAgICAgICAgICAgICAgaXNTdXJyb3VuZEZvcm1hdCA9IHRydWU7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKCFleGlzdCAmJiBpc1N1cnJvdW5kRm9ybWF0KSB7Ci0gICAgICAgICAgICBmb3JtYXRzLmFkZChmb3JtYXQpOwotICAgICAgICB9Ci0gICAgfQotICAgIHJldHVybiBOT19FUlJPUjsKLX0KLQogc3RhdHVzX3QgQXVkaW9Qb2xpY3lNYW5hZ2VyOjpnZXRTdXJyb3VuZEZvcm1hdHModW5zaWduZWQgaW50ICpudW1TdXJyb3VuZEZvcm1hdHMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdWRpb19mb3JtYXRfdCAqc3Vycm91bmRGb3JtYXRzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCAqc3Vycm91bmRGb3JtYXRzRW5hYmxlZCwKQEAgLTM2MDIsOCArMzU2OSw4IEBACiAgICAgICAgICAgICAoc3Vycm91bmRGb3JtYXRzID09IE5VTEwgfHwgc3Vycm91bmRGb3JtYXRzRW5hYmxlZCA9PSBOVUxMKSkpIHsKICAgICAgICAgcmV0dXJuIEJBRF9WQUxVRTsKICAgICB9Ci0gICAgQUxPR1YoImdldFN1cnJvdW5kRm9ybWF0cygpIG51bVN1cnJvdW5kRm9ybWF0cyAlZCBzdXJyb3VuZEZvcm1hdHMgJXAgc3Vycm91bmRGb3JtYXRzRW5hYmxlZCAlcCIsCi0gICAgICAgICAgICAqbnVtU3Vycm91bmRGb3JtYXRzLCBzdXJyb3VuZEZvcm1hdHMsIHN1cnJvdW5kRm9ybWF0c0VuYWJsZWQpOworICAgIEFMT0dWKCJnZXRTdXJyb3VuZEZvcm1hdHMoKSBudW1TdXJyb3VuZEZvcm1hdHMgJWQgc3Vycm91bmRGb3JtYXRzICVwIHN1cnJvdW5kRm9ybWF0c0VuYWJsZWQgJXAiCisgICAgICAgICAgICAiIHJlcG9ydGVkICVkIiwgKm51bVN1cnJvdW5kRm9ybWF0cywgc3Vycm91bmRGb3JtYXRzLCBzdXJyb3VuZEZvcm1hdHNFbmFibGVkLCByZXBvcnRlZCk7CiAKICAgICAvLyBPbmx5IHJldHVybiB2YWx1ZSBpZiB0aGVyZSBpcyBIRE1JIG91dHB1dC4KICAgICBpZiAoKG1BdmFpbGFibGVPdXRwdXREZXZpY2VzLnR5cGVzKCkgJiBBVURJT19ERVZJQ0VfT1VUX0hETUkpID09IDApIHsKQEAgLTM2MTMsODkgKzM1ODAsNDggQEAKICAgICBzaXplX3QgZm9ybWF0c1dyaXR0ZW4gPSAwOwogICAgIHNpemVfdCBmb3JtYXRzTWF4ID0gKm51bVN1cnJvdW5kRm9ybWF0czsKICAgICAqbnVtU3Vycm91bmRGb3JtYXRzID0gMDsKLSAgICBGb3JtYXRWZWN0b3IgZm9ybWF0czsKKyAgICBzdGQ6OnVub3JkZXJlZF9zZXQ8YXVkaW9fZm9ybWF0X3Q+IGZvcm1hdHM7CiAgICAgaWYgKHJlcG9ydGVkKSB7Ci0gICAgICAgIC8vIE9ubHkgZ2V0IHN1cnJvdW5kIGZvcm1hdHMgd2hpY2ggYXJlIHJlcG9ydGVkIGJ5IGRldmljZS4KLSAgICAgICAgLy8gRmlyc3QgbGlzdCBhbHJlYWR5IG9wZW4gb3V0cHV0cyB0aGF0IGNhbiBiZSByb3V0ZWQgdG8gdGhpcyBkZXZpY2UKLSAgICAgICAgYXVkaW9fZGV2aWNlc190IGRldmljZSA9IEFVRElPX0RFVklDRV9PVVRfSERNSTsKLSAgICAgICAgU29ydGVkVmVjdG9yPGF1ZGlvX2lvX2hhbmRsZV90PiBvdXRwdXRzOwotICAgICAgICBib29sIHJlcG9ydGVkRm9ybWF0Rm91bmQgPSBmYWxzZTsKLSAgICAgICAgc3RhdHVzX3Qgc3RhdHVzOwotICAgICAgICBzcDxTd0F1ZGlvT3V0cHV0RGVzY3JpcHRvcj4gZGVzYzsKLSAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtT3V0cHV0cy5zaXplKCk7IGkrKykgewotICAgICAgICAgICAgZGVzYyA9IG1PdXRwdXRzLnZhbHVlQXQoaSk7Ci0gICAgICAgICAgICBpZiAoIWRlc2MtPmlzRHVwbGljYXRlZCgpICYmIChkZXNjLT5zdXBwb3J0ZWREZXZpY2VzKCkgJiBkZXZpY2UpKSB7Ci0gICAgICAgICAgICAgICAgb3V0cHV0cy5hZGQobU91dHB1dHMua2V5QXQoaSkpOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIC8vIE9wZW4gYW4gb3V0cHV0IHRvIHF1ZXJ5IGR5bmFtaWMgcGFyYW1ldGVycy4KLSAgICAgICAgRGV2aWNlVmVjdG9yIGhkbWlPdXRwdXREZXZpY2VzID0gbUF2YWlsYWJsZU91dHB1dERldmljZXMuZ2V0RGV2aWNlc0Zyb21UeXBlKAotICAgICAgICAgICAgICAgIEFVRElPX0RFVklDRV9PVVRfSERNSSk7Ci0gICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgaGRtaU91dHB1dERldmljZXMuc2l6ZSgpOyBpKyspIHsKLSAgICAgICAgICAgIFN0cmluZzggYWRkcmVzcyA9IGhkbWlPdXRwdXREZXZpY2VzW2ldLT5tQWRkcmVzczsKLSAgICAgICAgICAgIGZvciAoY29uc3QgYXV0byYgaHdNb2R1bGUgOiBtSHdNb2R1bGVzKSB7Ci0gICAgICAgICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBod01vZHVsZS0+Z2V0T3V0cHV0UHJvZmlsZXMoKS5zaXplKCk7IGkrKykgewotICAgICAgICAgICAgICAgICAgICBzcDxJT1Byb2ZpbGU+IHByb2ZpbGUgPSBod01vZHVsZS0+Z2V0T3V0cHV0UHJvZmlsZXMoKVtpXTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKHByb2ZpbGUtPnN1cHBvcnREZXZpY2UoQVVESU9fREVWSUNFX09VVF9IRE1JKSAmJgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb2ZpbGUtPnN1cHBvcnREZXZpY2VBZGRyZXNzKGFkZHJlc3MpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgajsKLSAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoaiA9IDA7IGogPCBvdXRwdXRzLnNpemUoKTsgaisrKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVzYyA9IG1PdXRwdXRzLnZhbHVlRm9yKG91dHB1dHMuaXRlbUF0KGopKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWRlc2MtPmlzRHVwbGljYXRlZCgpICYmIGRlc2MtPm1Qcm9maWxlID09IHByb2ZpbGUpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGogIT0gb3V0cHV0cy5zaXplKCkpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0dXMgPSBnZXRTdXBwb3J0ZWRGb3JtYXRzKG91dHB1dHMuaXRlbUF0KGopLCBmb3JtYXRzKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXBvcnRlZEZvcm1hdEZvdW5kIHw9IChzdGF0dXMgPT0gTk9fRVJST1IpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXByb2ZpbGUtPmNhbk9wZW5OZXdJbygpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgQUxPR1coIk1heCBPdXRwdXQgbnVtYmVyICV1IGFscmVhZHkgb3BlbmVkIGZvciB0aGlzIHByb2ZpbGUgJXMiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb2ZpbGUtPm1heE9wZW5Db3VudCwgcHJvZmlsZS0+Z2V0VGFnTmFtZSgpLmNfc3RyKCkpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgICAgICAgICBBTE9HVigib3BlbmluZyBvdXRwdXQgZm9yIGRldmljZSAlMDh4IHdpdGggcGFyYW1zICVzIHByb2ZpbGUgJXAgbmFtZSAlcyIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXZpY2UsIGFkZHJlc3Muc3RyaW5nKCksIHByb2ZpbGUuZ2V0KCksIHByb2ZpbGUtPmdldE5hbWUoKS5zdHJpbmcoKSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBkZXNjID0gbmV3IFN3QXVkaW9PdXRwdXREZXNjcmlwdG9yKHByb2ZpbGUsIG1wQ2xpZW50SW50ZXJmYWNlKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGF1ZGlvX2lvX2hhbmRsZV90IG91dHB1dCA9IEFVRElPX0lPX0hBTkRMRV9OT05FOwotICAgICAgICAgICAgICAgICAgICAgICAgc3RhdHVzX3Qgc3RhdHVzID0gZGVzYy0+b3BlbihudWxscHRyLCBkZXZpY2UsIGFkZHJlc3MsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFVRElPX1NUUkVBTV9ERUZBVUxULCBBVURJT19PVVRQVVRfRkxBR19OT05FLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmb3V0cHV0KTsKLQotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHN0YXR1cyA9PSBOT19FUlJPUikgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXR1cyA9IGdldFN1cHBvcnRlZEZvcm1hdHMob3V0cHV0LCBmb3JtYXRzKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXBvcnRlZEZvcm1hdEZvdW5kIHw9IChzdGF0dXMgPT0gTk9fRVJST1IpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlc2MtPmNsb3NlKCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgb3V0cHV0ID0gQVVESU9fSU9fSEFORExFX05PTkU7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoIXJlcG9ydGVkRm9ybWF0Rm91bmQpIHsKLSAgICAgICAgICAgIHJldHVybiBVTktOT1dOX0VSUk9SOworICAgICAgICAvLyBSZXR1cm4gZm9ybWF0cyBmcm9tIEhETUkgcHJvZmlsZXMsIHRoYXQgaGF2ZSBhbHJlYWR5IGJlZW4gcmVzb2x2ZWQgYnkKKyAgICAgICAgLy8gY2hlY2tPdXRwdXRzRm9yRGV2aWNlKCkuCisgICAgICAgIERldmljZVZlY3RvciBoZG1pT3V0cHV0RGV2cyA9IG1BdmFpbGFibGVPdXRwdXREZXZpY2VzLmdldERldmljZXNGcm9tVHlwZU1hc2soCisgICAgICAgICAgICAgIEFVRElPX0RFVklDRV9PVVRfSERNSSk7CisgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgaGRtaU91dHB1dERldnMuc2l6ZSgpOyBpKyspIHsKKyAgICAgICAgICAgICBGb3JtYXRWZWN0b3Igc3VwcG9ydGVkRm9ybWF0cyA9CisgICAgICAgICAgICAgICAgIGhkbWlPdXRwdXREZXZzW2ldLT5nZXRBdWRpb1BvcnQoKS0+Z2V0QXVkaW9Qcm9maWxlcygpLmdldFN1cHBvcnRlZEZvcm1hdHMoKTsKKyAgICAgICAgICAgICBmb3IgKHNpemVfdCBqID0gMDsgaiA8IHN1cHBvcnRlZEZvcm1hdHMuc2l6ZSgpOyBqKyspIHsKKyAgICAgICAgICAgICAgICAgaWYgKG1Db25maWcuZ2V0U3Vycm91bmRGb3JtYXRzKCkuY291bnQoc3VwcG9ydGVkRm9ybWF0c1tqXSkgIT0gMCkgeworICAgICAgICAgICAgICAgICAgICAgZm9ybWF0cy5pbnNlcnQoc3VwcG9ydGVkRm9ybWF0c1tqXSk7CisgICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IGF1dG8mIHBhaXIgOiBtQ29uZmlnLmdldFN1cnJvdW5kRm9ybWF0cygpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHBhaXIuc2Vjb25kLmNvdW50KHN1cHBvcnRlZEZvcm1hdHNbal0pICE9IDApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9ybWF0cy5pbnNlcnQocGFpci5maXJzdCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgIH0gZWxzZSB7Ci0gICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgQVJSQVlfU0laRShTVVJST1VORF9GT1JNQVRTKTsgaSsrKSB7Ci0gICAgICAgICAgICBmb3JtYXRzLmFkZChTVVJST1VORF9GT1JNQVRTW2ldKTsKKyAgICAgICAgZm9yIChjb25zdCBhdXRvJiBwYWlyIDogbUNvbmZpZy5nZXRTdXJyb3VuZEZvcm1hdHMoKSkgeworICAgICAgICAgICAgZm9ybWF0cy5pbnNlcnQocGFpci5maXJzdCk7CiAgICAgICAgIH0KICAgICB9Ci0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBmb3JtYXRzLnNpemUoKTsgaSsrKSB7CisgICAgZm9yIChjb25zdCBhdXRvJiBmb3JtYXQ6IGZvcm1hdHMpIHsKICAgICAgICAgaWYgKGZvcm1hdHNXcml0dGVuIDwgZm9ybWF0c01heCkgewotICAgICAgICAgICAgc3Vycm91bmRGb3JtYXRzW2Zvcm1hdHNXcml0dGVuXSA9IGZvcm1hdHNbaV07CisgICAgICAgICAgICBzdXJyb3VuZEZvcm1hdHNbZm9ybWF0c1dyaXR0ZW5dID0gZm9ybWF0OwogICAgICAgICAgICAgYm9vbCBmb3JtYXRFbmFibGVkID0gZmFsc2U7Ci0gICAgICAgICAgICBpZiAoZm9ybWF0c1tpXSA9PSBBVURJT19GT1JNQVRfQUFDX0xDKSB7Ci0gICAgICAgICAgICAgICAgZm9yIChzaXplX3QgaiA9IDA7IGogPCBBUlJBWV9TSVpFKEFBQ19GT1JNQVRTKTsgaisrKSB7Ci0gICAgICAgICAgICAgICAgICAgIGZvcm1hdEVuYWJsZWQgPQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1TdXJyb3VuZEZvcm1hdHMuZmluZChBQUNfRk9STUFUU1tpXSkgIT0gbVN1cnJvdW5kRm9ybWF0cy5lbmQoKTsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBpZiAobUNvbmZpZy5nZXRTdXJyb3VuZEZvcm1hdHMoKS5jb3VudChmb3JtYXQpID09IDApIHsKKyAgICAgICAgICAgICAgICAvLyBDaGVjayBzdWItZm9ybWF0cworICAgICAgICAgICAgICAgIGZvciAoY29uc3QgYXV0byYgcGFpciA6IG1Db25maWcuZ2V0U3Vycm91bmRGb3JtYXRzKCkpIHsKKyAgICAgICAgICAgICAgICAgICAgZm9yIChjb25zdCBhdXRvJiBzdWJmb3JtYXQgOiBwYWlyLnNlY29uZCkgeworICAgICAgICAgICAgICAgICAgICAgICAgZm9ybWF0RW5hYmxlZCA9IG1TdXJyb3VuZEZvcm1hdHMuY291bnQoc3ViZm9ybWF0KSAhPSAwOworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGZvcm1hdEVuYWJsZWQpIGJyZWFrOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGlmIChmb3JtYXRFbmFibGVkKSBicmVhazsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIGZvcm1hdEVuYWJsZWQgPSBtU3Vycm91bmRGb3JtYXRzLmZpbmQoZm9ybWF0c1tpXSkgIT0gbVN1cnJvdW5kRm9ybWF0cy5lbmQoKTsKKyAgICAgICAgICAgICAgICBmb3JtYXRFbmFibGVkID0gbVN1cnJvdW5kRm9ybWF0cy5jb3VudChmb3JtYXQpICE9IDA7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBzdXJyb3VuZEZvcm1hdHNFbmFibGVkW2Zvcm1hdHNXcml0dGVuKytdID0gZm9ybWF0RW5hYmxlZDsKICAgICAgICAgfQpAQCAtMzcwNiwxNSArMzYzMiwxMSBAQAogCiBzdGF0dXNfdCBBdWRpb1BvbGljeU1hbmFnZXI6OnNldFN1cnJvdW5kRm9ybWF0RW5hYmxlZChhdWRpb19mb3JtYXRfdCBhdWRpb0Zvcm1hdCwgYm9vbCBlbmFibGVkKQogeworICAgIEFMT0dWKCIlcygpIGZvcm1hdCAweCVYIGVuYWJsZWQgJWQiLCBfX2Z1bmNfXywgYXVkaW9Gb3JtYXQsIGVuYWJsZWQpOwogICAgIC8vIENoZWNrIGlmIGF1ZGlvIGZvcm1hdCBpcyBhIHN1cnJvdW5kIGZvcm1hdHMuCi0gICAgYm9vbCBpc1N1cnJvdW5kRm9ybWF0ID0gZmFsc2U7Ci0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBBUlJBWV9TSVpFKFNVUlJPVU5EX0ZPUk1BVFMpOyBpKyspIHsKLSAgICAgICAgaWYgKGF1ZGlvRm9ybWF0ID09IFNVUlJPVU5EX0ZPUk1BVFNbaV0pIHsKLSAgICAgICAgICAgIGlzU3Vycm91bmRGb3JtYXQgPSB0cnVlOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgaWYgKCFpc1N1cnJvdW5kRm9ybWF0KSB7CisgICAgY29uc3QgYXV0byYgZm9ybWF0SXRlciA9IG1Db25maWcuZ2V0U3Vycm91bmRGb3JtYXRzKCkuZmluZChhdWRpb0Zvcm1hdCk7CisgICAgaWYgKGZvcm1hdEl0ZXIgPT0gbUNvbmZpZy5nZXRTdXJyb3VuZEZvcm1hdHMoKS5lbmQoKSkgeworICAgICAgICBBTE9HVygiJXMoKSBmb3JtYXQgMHglWCBpcyBub3QgYSBrbm93biBzdXJyb3VuZCBmb3JtYXQiLCBfX2Z1bmNfXywgYXVkaW9Gb3JtYXQpOwogICAgICAgICByZXR1cm4gQkFEX1ZBTFVFOwogICAgIH0KIApAQCAtMzcyMiw0MCArMzY0NCwzNiBAQAogICAgIGF1ZGlvX3BvbGljeV9mb3JjZWRfY2ZnX3QgZm9yY2VVc2UgPSBtRW5naW5lLT5nZXRGb3JjZVVzZSgKICAgICAgICAgICAgICAgICBBVURJT19QT0xJQ1lfRk9SQ0VfRk9SX0VOQ09ERURfU1VSUk9VTkQpOwogICAgIGlmIChmb3JjZVVzZSAhPSBBVURJT19QT0xJQ1lfRk9SQ0VfRU5DT0RFRF9TVVJST1VORF9NQU5VQUwpIHsKKyAgICAgICAgQUxPR1coIiVzKCkgbm90IGluIG1hbnVhbCBtb2RlIGZvciBzdXJyb3VuZCBzb3VuZCBmb3JtYXQgc2VsZWN0aW9uIiwgX19mdW5jX18pOwogICAgICAgICByZXR1cm4gSU5WQUxJRF9PUEVSQVRJT047CiAgICAgfQogCi0gICAgaWYgKChtU3Vycm91bmRGb3JtYXRzLmZpbmQoYXVkaW9Gb3JtYXQpICE9IG1TdXJyb3VuZEZvcm1hdHMuZW5kKCkgJiYgZW5hYmxlZCkKLSAgICAgICAgICAgIHx8IChtU3Vycm91bmRGb3JtYXRzLmZpbmQoYXVkaW9Gb3JtYXQpID09IG1TdXJyb3VuZEZvcm1hdHMuZW5kKCkgJiYgIWVuYWJsZWQpKSB7CisgICAgaWYgKChtU3Vycm91bmRGb3JtYXRzLmNvdW50KGF1ZGlvRm9ybWF0KSAhPSAwKSA9PSBlbmFibGVkKSB7CiAgICAgICAgIHJldHVybiBOT19FUlJPUjsKICAgICB9CiAKICAgICAvLyBUaGUgb3BlcmF0aW9uIGlzIHZhbGlkIG9ubHkgd2hlbiB0aGVyZSBpcyBIRE1JIG91dHB1dCBhdmFpbGFibGUuCiAgICAgaWYgKChtQXZhaWxhYmxlT3V0cHV0RGV2aWNlcy50eXBlcygpICYgQVVESU9fREVWSUNFX09VVF9IRE1JKSA9PSAwKSB7CisgICAgICAgIEFMT0dXKCIlcygpIG5vIEhETUkgb3V0IGRldmljZXMgZm91bmQiLCBfX2Z1bmNfXyk7CiAgICAgICAgIHJldHVybiBJTlZBTElEX09QRVJBVElPTjsKICAgICB9CiAKKyAgICBzdGQ6OnVub3JkZXJlZF9zZXQ8YXVkaW9fZm9ybWF0X3Q+IHN1cnJvdW5kRm9ybWF0c0JhY2t1cChtU3Vycm91bmRGb3JtYXRzKTsKICAgICBpZiAoZW5hYmxlZCkgewotICAgICAgICBpZiAoYXVkaW9Gb3JtYXQgPT0gQVVESU9fRk9STUFUX0FBQ19MQykgewotICAgICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBBUlJBWV9TSVpFKEFBQ19GT1JNQVRTKTsgaSsrKSB7Ci0gICAgICAgICAgICAgICAgbVN1cnJvdW5kRm9ybWF0cy5pbnNlcnQoQUFDX0ZPUk1BVFNbaV0pOwotICAgICAgICAgICAgfQotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgbVN1cnJvdW5kRm9ybWF0cy5pbnNlcnQoYXVkaW9Gb3JtYXQpOworICAgICAgICBtU3Vycm91bmRGb3JtYXRzLmluc2VydChhdWRpb0Zvcm1hdCk7CisgICAgICAgIGZvciAoY29uc3QgYXV0byYgc3ViRm9ybWF0IDogZm9ybWF0SXRlci0+c2Vjb25kKSB7CisgICAgICAgICAgICBtU3Vycm91bmRGb3JtYXRzLmluc2VydChzdWJGb3JtYXQpOwogICAgICAgICB9CiAgICAgfSBlbHNlIHsKLSAgICAgICAgaWYgKGF1ZGlvRm9ybWF0ID09IEFVRElPX0ZPUk1BVF9BQUNfTEMpIHsKLSAgICAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgQVJSQVlfU0laRShBQUNfRk9STUFUUyk7IGkrKykgewotICAgICAgICAgICAgICAgIG1TdXJyb3VuZEZvcm1hdHMuZXJhc2UoQUFDX0ZPUk1BVFNbaV0pOwotICAgICAgICAgICAgfQotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgbVN1cnJvdW5kRm9ybWF0cy5lcmFzZShhdWRpb0Zvcm1hdCk7CisgICAgICAgIG1TdXJyb3VuZEZvcm1hdHMuZXJhc2UoYXVkaW9Gb3JtYXQpOworICAgICAgICBmb3IgKGNvbnN0IGF1dG8mIHN1YkZvcm1hdCA6IGZvcm1hdEl0ZXItPnNlY29uZCkgeworICAgICAgICAgICAgbVN1cnJvdW5kRm9ybWF0cy5lcmFzZShzdWJGb3JtYXQpOwogICAgICAgICB9CiAgICAgfQogCiAgICAgc3A8U3dBdWRpb091dHB1dERlc2NyaXB0b3I+IG91dHB1dERlc2M7CiAgICAgYm9vbCBwcm9maWxlVXBkYXRlZCA9IGZhbHNlOwotICAgIERldmljZVZlY3RvciBoZG1pT3V0cHV0RGV2aWNlcyA9IG1BdmFpbGFibGVPdXRwdXREZXZpY2VzLmdldERldmljZXNGcm9tVHlwZSgKKyAgICBEZXZpY2VWZWN0b3IgaGRtaU91dHB1dERldmljZXMgPSBtQXZhaWxhYmxlT3V0cHV0RGV2aWNlcy5nZXREZXZpY2VzRnJvbVR5cGVNYXNrKAogICAgICAgICAgICAgQVVESU9fREVWSUNFX09VVF9IRE1JKTsKICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGhkbWlPdXRwdXREZXZpY2VzLnNpemUoKTsgaSsrKSB7CiAgICAgICAgIC8vIFNpbXVsYXRlIHJlY29ubmVjdGlvbiB0byB1cGRhdGUgZW5hYmxlZCBzdXJyb3VuZCBzb3VuZCBmb3JtYXRzLgpAQCAtMzc3NCw3ICszNjkyLDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWUuY19zdHIoKSk7CiAgICAgICAgIHByb2ZpbGVVcGRhdGVkIHw9IChzdGF0dXMgPT0gTk9fRVJST1IpOwogICAgIH0KLSAgICBEZXZpY2VWZWN0b3IgaGRtaUlucHV0RGV2aWNlcyA9IG1BdmFpbGFibGVJbnB1dERldmljZXMuZ2V0RGV2aWNlc0Zyb21UeXBlKAorICAgIERldmljZVZlY3RvciBoZG1pSW5wdXREZXZpY2VzID0gbUF2YWlsYWJsZUlucHV0RGV2aWNlcy5nZXREZXZpY2VzRnJvbVR5cGVNYXNrKAogICAgICAgICAgICAgICAgIEFVRElPX0RFVklDRV9JTl9IRE1JKTsKICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGhkbWlJbnB1dERldmljZXMuc2l6ZSgpOyBpKyspIHsKICAgICAgICAgLy8gU2ltdWxhdGUgcmVjb25uZWN0aW9uIHRvIHVwZGF0ZSBlbmFibGVkIHN1cnJvdW5kIHNvdW5kIGZvcm1hdHMuCkBAIC0zNzk0LDY5ICszNzEyLDUzIEBACiAgICAgICAgIHByb2ZpbGVVcGRhdGVkIHw9IChzdGF0dXMgPT0gTk9fRVJST1IpOwogICAgIH0KIAotICAgIC8vIFVuZG8gdGhlIHN1cnJvdW5kIGZvcm1hdHMgY2hhbmdlIGR1ZSB0byBubyBhdWRpbyBwcm9maWxlcyB1cGRhdGVkLgogICAgIGlmICghcHJvZmlsZVVwZGF0ZWQpIHsKLSAgICAgICAgaWYgKGVuYWJsZWQpIHsKLSAgICAgICAgICAgIGlmIChhdWRpb0Zvcm1hdCA9PSBBVURJT19GT1JNQVRfQUFDX0xDKSB7Ci0gICAgICAgICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBBUlJBWV9TSVpFKEFBQ19GT1JNQVRTKTsgaSsrKSB7Ci0gICAgICAgICAgICAgICAgICAgIG1TdXJyb3VuZEZvcm1hdHMuZXJhc2UoQUFDX0ZPUk1BVFNbaV0pOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgbVN1cnJvdW5kRm9ybWF0cy5lcmFzZShhdWRpb0Zvcm1hdCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBpZiAoYXVkaW9Gb3JtYXQgPT0gQVVESU9fRk9STUFUX0FBQ19MQykgewotICAgICAgICAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgQVJSQVlfU0laRShBQUNfRk9STUFUUyk7IGkrKykgewotICAgICAgICAgICAgICAgICAgICBtU3Vycm91bmRGb3JtYXRzLmluc2VydChBQUNfRk9STUFUU1tpXSk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICBtU3Vycm91bmRGb3JtYXRzLmluc2VydChhdWRpb0Zvcm1hdCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KKyAgICAgICAgQUxPR1coIiVzKCkgbm8gYXVkaW8gcHJvZmlsZXMgdXBkYXRlZCwgdW5kb2luZyBzdXJyb3VuZCBmb3JtYXRzIGNoYW5nZSIsIF9fZnVuY19fKTsKKyAgICAgICAgbVN1cnJvdW5kRm9ybWF0cyA9IHN0ZDo6bW92ZShzdXJyb3VuZEZvcm1hdHNCYWNrdXApOwogICAgIH0KIAogICAgIHJldHVybiBwcm9maWxlVXBkYXRlZCA/IE5PX0VSUk9SIDogSU5WQUxJRF9PUEVSQVRJT047CiB9CiAKLXZvaWQgQXVkaW9Qb2xpY3lNYW5hZ2VyOjpzZXRSZWNvcmRTaWxlbmNlZCh1aWRfdCB1aWQsIGJvb2wgc2lsZW5jZWQpCit2b2lkIEF1ZGlvUG9saWN5TWFuYWdlcjo6c2V0QXBwU3RhdGUodWlkX3QgdWlkLCBhcHBfc3RhdGVfdCBzdGF0ZSkKIHsKKyAgICBWZWN0b3I8c3A8QXVkaW9JbnB1dERlc2NyaXB0b3I+ID4gYWN0aXZlSW5wdXRzID0gbUlucHV0cy5nZXRBY3RpdmVJbnB1dHMoKTsKKyAgICBib29sIHNpbGVuY2VkID0gc3RhdGUgPT0gQVBQX1NUQVRFX0lETEU7CisKICAgICBBTE9HVigiQXVkaW9Qb2xpY3lNYW5hZ2VyOnNldFJlY29yZFNpbGVuY2VkKHVpZDolZCwgc2lsZW5jZWQ6JWQpIiwgdWlkLCBzaWxlbmNlZCk7CiAKLSAgICBWZWN0b3I8c3A8QXVkaW9JbnB1dERlc2NyaXB0b3I+ID4gYWN0aXZlSW5wdXRzID0gbUlucHV0cy5nZXRBY3RpdmVJbnB1dHMoKTsKICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGFjdGl2ZUlucHV0cy5zaXplKCk7IGkrKykgewogICAgICAgICBzcDxBdWRpb0lucHV0RGVzY3JpcHRvcj4gYWN0aXZlRGVzYyA9IGFjdGl2ZUlucHV0c1tpXTsKLSAgICAgICAgQXVkaW9TZXNzaW9uQ29sbGVjdGlvbiBhY3RpdmVTZXNzaW9ucyA9IGFjdGl2ZURlc2MtPmdldEF1ZGlvU2Vzc2lvbnModHJ1ZSk7Ci0gICAgICAgIGZvciAoc2l6ZV90IGogPSAwOyBqIDwgYWN0aXZlU2Vzc2lvbnMuc2l6ZSgpOyBqKyspIHsKLSAgICAgICAgICAgIHNwPEF1ZGlvU2Vzc2lvbj4gYWN0aXZlU2Vzc2lvbiA9IGFjdGl2ZVNlc3Npb25zLnZhbHVlQXQoaik7Ci0gICAgICAgICAgICBpZiAoYWN0aXZlU2Vzc2lvbi0+dWlkKCkgPT0gdWlkKSB7Ci0gICAgICAgICAgICAgICAgYWN0aXZlU2Vzc2lvbi0+c2V0U2lsZW5jZWQoc2lsZW5jZWQpOworICAgICAgICBSZWNvcmRDbGllbnRWZWN0b3IgY2xpZW50cyA9IGFjdGl2ZURlc2MtPmNsaWVudHNMaXN0KHRydWUgLyphY3RpdmVPbmx5Ki8pOworICAgICAgICBmb3IgKGNvbnN0IGF1dG8mIGNsaWVudCA6IGNsaWVudHMpIHsKKyAgICAgICAgICAgIGlmICh1aWQgPT0gY2xpZW50LT51aWQoKSkgeworICAgICAgICAgICAgICAgIGNsaWVudC0+c2V0U2lsZW5jZWQoc2lsZW5jZWQpOwogICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgfQogfQogCi1zdGF0dXNfdCBBdWRpb1BvbGljeU1hbmFnZXI6OmRpc2Nvbm5lY3RBdWRpb1NvdXJjZShjb25zdCBzcDxBdWRpb1NvdXJjZURlc2NyaXB0b3I+JiBzb3VyY2VEZXNjKQorc3RhdHVzX3QgQXVkaW9Qb2xpY3lNYW5hZ2VyOjpkaXNjb25uZWN0QXVkaW9Tb3VyY2UoY29uc3Qgc3A8U291cmNlQ2xpZW50RGVzY3JpcHRvcj4mIHNvdXJjZURlc2MpCiB7Ci0gICAgQUxPR1YoIiVzIGhhbmRsZSAlZCIsIF9fRlVOQ1RJT05fXywgc291cmNlRGVzYy0+Z2V0SGFuZGxlKCkpOworICAgIEFMT0dWKCIlcyBwb3J0IElkICVkIiwgX19GVU5DVElPTl9fLCBzb3VyY2VEZXNjLT5wb3J0SWQoKSk7CiAKLSAgICBzcDxBdWRpb1BhdGNoPiBwYXRjaERlc2MgPSBtQXVkaW9QYXRjaGVzLnZhbHVlRm9yKHNvdXJjZURlc2MtPm1QYXRjaERlc2MtPm1IYW5kbGUpOworICAgIHNwPEF1ZGlvUGF0Y2g+IHBhdGNoRGVzYyA9IG1BdWRpb1BhdGNoZXMudmFsdWVGb3Ioc291cmNlRGVzYy0+cGF0Y2hEZXNjKCktPm1IYW5kbGUpOwogICAgIGlmIChwYXRjaERlc2MgPT0gMCkgewogICAgICAgICBBTE9HVygiJXMgc291cmNlIGhhcyBubyBwYXRjaCB3aXRoIGhhbmRsZSAlZCIsIF9fRlVOQ1RJT05fXywKLSAgICAgICAgICAgICAgc291cmNlRGVzYy0+bVBhdGNoRGVzYy0+bUhhbmRsZSk7CisgICAgICAgICAgICAgIHNvdXJjZURlc2MtPnBhdGNoRGVzYygpLT5tSGFuZGxlKTsKICAgICAgICAgcmV0dXJuIEJBRF9WQUxVRTsKICAgICB9Ci0gICAgcmVtb3ZlQXVkaW9QYXRjaChzb3VyY2VEZXNjLT5tUGF0Y2hEZXNjLT5tSGFuZGxlKTsKKyAgICByZW1vdmVBdWRpb1BhdGNoKHNvdXJjZURlc2MtPnBhdGNoRGVzYygpLT5tSGFuZGxlKTsKIAotICAgIGF1ZGlvX3N0cmVhbV90eXBlX3Qgc3RyZWFtID0gc3RyZWFtVHlwZWZyb21BdHRyaWJ1dGVzSW50KCZzb3VyY2VEZXNjLT5tQXR0cmlidXRlcyk7Ci0gICAgc3A8U3dBdWRpb091dHB1dERlc2NyaXB0b3I+IHN3T3V0cHV0RGVzYyA9IHNvdXJjZURlc2MtPm1Td091dHB1dC5wcm9tb3RlKCk7CisgICAgc3A8U3dBdWRpb091dHB1dERlc2NyaXB0b3I+IHN3T3V0cHV0RGVzYyA9IHNvdXJjZURlc2MtPnN3T3V0cHV0KCkucHJvbW90ZSgpOwogICAgIGlmIChzd091dHB1dERlc2MgIT0gMCkgewotICAgICAgICBzdGF0dXNfdCBzdGF0dXMgPSBzdG9wU291cmNlKHN3T3V0cHV0RGVzYywgc3RyZWFtLCBmYWxzZSk7CisgICAgICAgIHN0YXR1c190IHN0YXR1cyA9IHN0b3BTb3VyY2Uoc3dPdXRwdXREZXNjLCBzb3VyY2VEZXNjKTsKICAgICAgICAgaWYgKHN0YXR1cyA9PSBOT19FUlJPUikgewogICAgICAgICAgICAgc3dPdXRwdXREZXNjLT5zdG9wKCk7CiAgICAgICAgIH0KICAgICAgICAgbXBDbGllbnRJbnRlcmZhY2UtPnJlbGVhc2VBdWRpb1BhdGNoKHBhdGNoRGVzYy0+bUFmUGF0Y2hIYW5kbGUsIDApOwogICAgIH0gZWxzZSB7Ci0gICAgICAgIHNwPEh3QXVkaW9PdXRwdXREZXNjcmlwdG9yPiBod091dHB1dERlc2MgPSBzb3VyY2VEZXNjLT5tSHdPdXRwdXQucHJvbW90ZSgpOworICAgICAgICBzcDxId0F1ZGlvT3V0cHV0RGVzY3JpcHRvcj4gaHdPdXRwdXREZXNjID0gc291cmNlRGVzYy0+aHdPdXRwdXQoKS5wcm9tb3RlKCk7CiAgICAgICAgIGlmIChod091dHB1dERlc2MgIT0gMCkgewogICAgICAgICAgIC8vICAgcmVsZWFzZSBwYXRjaCBiZXR3ZWVuIHNyYyBkZXZpY2UgYW5kIG91dHB1dCBkZXZpY2UKICAgICAgICAgICAvLyAgIGNsb3NlIEh3b3V0cHV0IGFuZCByZW1vdmUgZnJvbSBtSHdPdXRwdXRzCkBAIC0zODY3LDE1ICszNzY5LDE1IEBACiAgICAgcmV0dXJuIE5PX0VSUk9SOwogfQogCi1zcDxBdWRpb1NvdXJjZURlc2NyaXB0b3I+IEF1ZGlvUG9saWN5TWFuYWdlcjo6Z2V0U291cmNlRm9yU3RyYXRlZ3lPbk91dHB1dCgKK3NwPFNvdXJjZUNsaWVudERlc2NyaXB0b3I+IEF1ZGlvUG9saWN5TWFuYWdlcjo6Z2V0U291cmNlRm9yU3RyYXRlZ3lPbk91dHB1dCgKICAgICAgICAgYXVkaW9faW9faGFuZGxlX3Qgb3V0cHV0LCByb3V0aW5nX3N0cmF0ZWd5IHN0cmF0ZWd5KQogewotICAgIHNwPEF1ZGlvU291cmNlRGVzY3JpcHRvcj4gc291cmNlOworICAgIHNwPFNvdXJjZUNsaWVudERlc2NyaXB0b3I+IHNvdXJjZTsKICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1BdWRpb1NvdXJjZXMuc2l6ZSgpOyBpKyspICB7Ci0gICAgICAgIHNwPEF1ZGlvU291cmNlRGVzY3JpcHRvcj4gc291cmNlRGVzYyA9IG1BdWRpb1NvdXJjZXMudmFsdWVBdChpKTsKLSAgICAgICAgcm91dGluZ19zdHJhdGVneSBzb3VyY2VTdHJhdGVneSA9Ci0gICAgICAgICAgICAgICAgKHJvdXRpbmdfc3RyYXRlZ3kpIGdldFN0cmF0ZWd5Rm9yQXR0cigmc291cmNlRGVzYy0+bUF0dHJpYnV0ZXMpOwotICAgICAgICBzcDxTd0F1ZGlvT3V0cHV0RGVzY3JpcHRvcj4gb3V0cHV0RGVzYyA9IHNvdXJjZURlc2MtPm1Td091dHB1dC5wcm9tb3RlKCk7CisgICAgICAgIHNwPFNvdXJjZUNsaWVudERlc2NyaXB0b3I+IHNvdXJjZURlc2MgPSBtQXVkaW9Tb3VyY2VzLnZhbHVlQXQoaSk7CisgICAgICAgIGF1ZGlvX2F0dHJpYnV0ZXNfdCBhdHRyaWJ1dGVzID0gc291cmNlRGVzYy0+YXR0cmlidXRlcygpOworICAgICAgICByb3V0aW5nX3N0cmF0ZWd5IHNvdXJjZVN0cmF0ZWd5ID0gZ2V0U3RyYXRlZ3lGb3JBdHRyKCZhdHRyaWJ1dGVzKTsKKyAgICAgICAgc3A8U3dBdWRpb091dHB1dERlc2NyaXB0b3I+IG91dHB1dERlc2MgPSBzb3VyY2VEZXNjLT5zd091dHB1dCgpLnByb21vdGUoKTsKICAgICAgICAgaWYgKHNvdXJjZVN0cmF0ZWd5ID09IHN0cmF0ZWd5ICYmIG91dHB1dERlc2MgIT0gMCAmJiBvdXRwdXREZXNjLT5tSW9IYW5kbGUgPT0gb3V0cHV0KSB7CiAgICAgICAgICAgICBzb3VyY2UgPSBzb3VyY2VEZXNjOwogICAgICAgICAgICAgYnJlYWs7CkBAIC0zOTEzLDExICszODE1LDExIEBACiAKICAgICBmb3IgKGNvbnN0IGNoYXIqIGZpbGVOYW1lIDogZmlsZU5hbWVzKSB7CiAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwga0NvbmZpZ0xvY2F0aW9uTGlzdFNpemU7IGkrKykgewotICAgICAgICAgICAgUG9saWN5U2VyaWFsaXplciBzZXJpYWxpemVyOwogICAgICAgICAgICAgc25wcmludGYoYXVkaW9Qb2xpY3lYbWxDb25maWdGaWxlLCBzaXplb2YoYXVkaW9Qb2xpY3lYbWxDb25maWdGaWxlKSwKICAgICAgICAgICAgICAgICAgICAgICIlcy8lcyIsIGtDb25maWdMb2NhdGlvbkxpc3RbaV0sIGZpbGVOYW1lKTsKLSAgICAgICAgICAgIHJldCA9IHNlcmlhbGl6ZXIuZGVzZXJpYWxpemUoYXVkaW9Qb2xpY3lYbWxDb25maWdGaWxlLCBjb25maWcpOworICAgICAgICAgICAgcmV0ID0gZGVzZXJpYWxpemVBdWRpb1BvbGljeUZpbGUoYXVkaW9Qb2xpY3lYbWxDb25maWdGaWxlLCAmY29uZmlnKTsKICAgICAgICAgICAgIGlmIChyZXQgPT0gTk9fRVJST1IpIHsKKyAgICAgICAgICAgICAgICBjb25maWcuc2V0U291cmNlKGF1ZGlvUG9saWN5WG1sQ29uZmlnRmlsZSk7CiAgICAgICAgICAgICAgICAgcmV0dXJuIHJldDsKICAgICAgICAgICAgIH0KICAgICAgICAgfQpAQCAtMzkyOSw3ICszODMxLDcgQEAKIEF1ZGlvUG9saWN5TWFuYWdlcjo6QXVkaW9Qb2xpY3lNYW5hZ2VyKEF1ZGlvUG9saWN5Q2xpZW50SW50ZXJmYWNlICpjbGllbnRJbnRlcmZhY2UsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIC8qZm9yVGVzdGluZyovKQogICAgIDoKLSAgICBtVWlkQ2FjaGVkKGdldHVpZCgpKSwKKyAgICBtVWlkQ2FjaGVkKEFJRF9BVURJT1NFUlZFUiksIC8vIG5vIG5lZWQgdG8gY2FsbCBnZXR1aWQoKSwgdGhlcmUncyBvbmx5IG9uZSBvZiB1cyBydW5uaW5nLgogICAgIG1wQ2xpZW50SW50ZXJmYWNlKGNsaWVudEludGVyZmFjZSksCiAgICAgbUxpbWl0UmluZ3RvbmVWb2x1bWUoZmFsc2UpLCBtTGFzdFZvaWNlVm9sdW1lKC0xLjBmKSwKICAgICBtQTJkcFN1c3BlbmRlZChmYWxzZSksCkBAIC00MDQwLDcgKzM5NDIsOCBAQAogICAgICAgICAgICAgc3A8U3dBdWRpb091dHB1dERlc2NyaXB0b3I+IG91dHB1dERlc2MgPSBuZXcgU3dBdWRpb091dHB1dERlc2NyaXB0b3Iob3V0UHJvZmlsZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1wQ2xpZW50SW50ZXJmYWNlKTsKICAgICAgICAgICAgIGNvbnN0IERldmljZVZlY3RvciAmc3VwcG9ydGVkRGV2aWNlcyA9IG91dFByb2ZpbGUtPmdldFN1cHBvcnRlZERldmljZXMoKTsKLSAgICAgICAgICAgIGNvbnN0IERldmljZVZlY3RvciAmZGV2aWNlc0ZvclR5cGUgPSBzdXBwb3J0ZWREZXZpY2VzLmdldERldmljZXNGcm9tVHlwZShwcm9maWxlVHlwZSk7CisgICAgICAgICAgICBjb25zdCBEZXZpY2VWZWN0b3IgJmRldmljZXNGb3JUeXBlID0gc3VwcG9ydGVkRGV2aWNlcy5nZXREZXZpY2VzRnJvbVR5cGVNYXNrKAorICAgICAgICAgICAgICAgICAgICBwcm9maWxlVHlwZSk7CiAgICAgICAgICAgICBTdHJpbmc4IGFkZHJlc3MgPSBkZXZpY2VzRm9yVHlwZS5zaXplKCkgPiAwID8gZGV2aWNlc0ZvclR5cGUuaXRlbUF0KDApLT5tQWRkcmVzcwogICAgICAgICAgICAgICAgICAgICA6IFN0cmluZzgoIiIpOwogICAgICAgICAgICAgYXVkaW9faW9faGFuZGxlX3Qgb3V0cHV0ID0gQVVESU9fSU9fSEFORExFX05PTkU7CkBAIC00MDk0LDcgKzM5OTcsNyBAQAogICAgICAgICAgICAgc3A8QXVkaW9JbnB1dERlc2NyaXB0b3I+IGlucHV0RGVzYyA9CiAgICAgICAgICAgICAgICAgICAgIG5ldyBBdWRpb0lucHV0RGVzY3JpcHRvcihpblByb2ZpbGUsIG1wQ2xpZW50SW50ZXJmYWNlKTsKIAotICAgICAgICAgICAgRGV2aWNlVmVjdG9yIGlucHV0RGV2aWNlcyA9IG1BdmFpbGFibGVJbnB1dERldmljZXMuZ2V0RGV2aWNlc0Zyb21UeXBlKHByb2ZpbGVUeXBlKTsKKyAgICAgICAgICAgIERldmljZVZlY3RvciBpbnB1dERldmljZXMgPSBtQXZhaWxhYmxlSW5wdXREZXZpY2VzLmdldERldmljZXNGcm9tVHlwZU1hc2socHJvZmlsZVR5cGUpOwogICAgICAgICAgICAgLy8gICB0aGUgaW5wdXRzIHZlY3RvciBtdXN0IGJlIG9mIHNpemUgPj0gMSwgYnV0IHdlIGRvbid0IHdhbnQgdG8gY3Jhc2ggaGVyZQogICAgICAgICAgICAgU3RyaW5nOCBhZGRyZXNzID0gaW5wdXREZXZpY2VzLnNpemUoKSA+IDAgPyBpbnB1dERldmljZXMuaXRlbUF0KDApLT5tQWRkcmVzcwogICAgICAgICAgICAgICAgICAgICA6IFN0cmluZzgoIiIpOwpAQCAtNDYyNiwxMCArNDUyOSw5IEBACiAgICAgICAgICAgICAvLyBhbmQgYXMgdGhleSB3ZXJlIGFsc28gcmVmZXJlbmNlZCBvbiB0aGUgb3RoZXIgb3V0cHV0LCB0aGUgcmVmZXJlbmNlCiAgICAgICAgICAgICAvLyBjb3VudCBmb3IgdGhlaXIgc3RyZWFtIHR5cGUgbXVzdCBiZSBhZGp1c3RlZCBhY2NvcmRpbmdseSBvbgogICAgICAgICAgICAgLy8gdGhlIG90aGVyIG91dHB1dC4KLSAgICAgICAgICAgIGJvb2wgd2FzQWN0aXZlID0gb3V0cHV0RGVzYzItPmlzQWN0aXZlKCk7Ci0gICAgICAgICAgICBmb3IgKGludCBqID0gMDsgaiA8IEFVRElPX1NUUkVBTV9DTlQ7IGorKykgewotICAgICAgICAgICAgICAgIGludCByZWZDb3VudCA9IGR1cE91dHB1dERlc2MtPm1SZWZDb3VudFtqXTsKLSAgICAgICAgICAgICAgICBvdXRwdXREZXNjMi0+Y2hhbmdlUmVmQ291bnQoKGF1ZGlvX3N0cmVhbV90eXBlX3QpaiwtcmVmQ291bnQpOworICAgICAgICAgICAgY29uc3QgYm9vbCB3YXNBY3RpdmUgPSBvdXRwdXREZXNjMi0+aXNBY3RpdmUoKTsKKyAgICAgICAgICAgIGZvciAoY29uc3QgYXV0byAmY2xpZW50UGFpciA6IGR1cE91dHB1dERlc2MtPmdldEFjdGl2ZUNsaWVudHMoKSkgeworICAgICAgICAgICAgICAgIG91dHB1dERlc2MyLT5jaGFuZ2VTdHJlYW1BY3RpdmVDb3VudChjbGllbnRQYWlyLmZpcnN0LCAtY2xpZW50UGFpci5zZWNvbmQpOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgLy8gc3RvcCgpIHdpbGwgYmUgYSBubyBvcCBpZiB0aGUgb3V0cHV0IGlzIHN0aWxsIGFjdGl2ZSBidXQgaXMgbmVlZGVkIGluIGNhc2UgYWxsCiAgICAgICAgICAgICAvLyBhY3RpdmUgc3RyZWFtcyByZWZjb3VudHMgd2hlcmUgY2xlYXJlZCBhYm92ZQpAQCAtNDY1OCw2ICs0NTYwLDIyIEBACiAKICAgICByZW1vdmVPdXRwdXQob3V0cHV0KTsKICAgICBtUHJldmlvdXNPdXRwdXRzID0gbU91dHB1dHM7CisKKyAgICAvLyBNU0QgcGF0Y2hlcyBtYXkgaGF2ZSBiZWVuIHJlbGVhc2VkIHRvIHN1cHBvcnQgYSBub24tTVNEIGRpcmVjdCBvdXRwdXQuIFJlc2V0IE1TRCBwYXRjaCBpZgorICAgIC8vIG5vIGRpcmVjdCBvdXRwdXRzIGFyZSBvcGVuLgorICAgIGlmIChnZXRNc2RBdWRpb091dERldmljZVR5cGVzKCkgIT0gQVVESU9fREVWSUNFX05PTkUpIHsKKyAgICAgICAgYm9vbCBkaXJlY3RPdXRwdXRPcGVuID0gZmFsc2U7CisgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbU91dHB1dHMuc2l6ZSgpOyBpKyspIHsKKyAgICAgICAgICAgIGlmIChtT3V0cHV0c1tpXS0+bUZsYWdzICYgQVVESU9fT1VUUFVUX0ZMQUdfRElSRUNUKSB7CisgICAgICAgICAgICAgICAgZGlyZWN0T3V0cHV0T3BlbiA9IHRydWU7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgaWYgKCFkaXJlY3RPdXRwdXRPcGVuKSB7CisgICAgICAgICAgICBBTE9HVigibm8gZGlyZWN0IG91dHB1dHMgb3BlbiwgcmVzZXQgTVNEIHBhdGNoIik7CisgICAgICAgICAgICBzZXRNc2RQYXRjaCgpOworICAgICAgICB9CisgICAgfQogfQogCiB2b2lkIEF1ZGlvUG9saWN5TWFuYWdlcjo6Y2xvc2VJbnB1dChhdWRpb19pb19oYW5kbGVfdCBpbnB1dCkKQEAgLTQ2NzIsNiArNDU5MCw3IEBACiAKICAgICBuZXh0QXVkaW9Qb3J0R2VuZXJhdGlvbigpOwogCisgICAgYXVkaW9fZGV2aWNlc190IGRldmljZSA9IGlucHV0RGVzYy0+bURldmljZTsKICAgICBzc2l6ZV90IGluZGV4ID0gbUF1ZGlvUGF0Y2hlcy5pbmRleE9mS2V5KGlucHV0RGVzYy0+Z2V0UGF0Y2hIYW5kbGUoKSk7CiAgICAgaWYgKGluZGV4ID49IDApIHsKICAgICAgICAgc3A8QXVkaW9QYXRjaD4gcGF0Y2hEZXNjID0gbUF1ZGlvUGF0Y2hlcy52YWx1ZUF0KGluZGV4KTsKQEAgLTQ2ODIsNiArNDYwMSwxMiBAQAogCiAgICAgaW5wdXREZXNjLT5jbG9zZSgpOwogICAgIG1JbnB1dHMucmVtb3ZlSXRlbShpbnB1dCk7CisKKyAgICBhdWRpb19kZXZpY2VzX3QgcHJpbWFyeUlucHV0RGV2aWNlcyA9IGF2YWlsYWJsZVByaW1hcnlJbnB1dERldmljZXMoKTsKKyAgICBpZiAoKChkZXZpY2UgJiBwcmltYXJ5SW5wdXREZXZpY2VzICYgfkFVRElPX0RFVklDRV9CSVRfSU4pICE9IDApICYmCisgICAgICAgICAgICBtSW5wdXRzLmFjdGl2ZUlucHV0c0NvdW50T25EZXZpY2VzKHByaW1hcnlJbnB1dERldmljZXMpID09IDApIHsKKyAgICAgICAgU291bmRUcmlnZ2VyOjpzZXRDYXB0dXJlU3RhdGUoZmFsc2UpOworICAgIH0KIH0KIAogU29ydGVkVmVjdG9yPGF1ZGlvX2lvX2hhbmRsZV90PiBBdWRpb1BvbGljeU1hbmFnZXI6OmdldE91dHB1dHNGb3JEZXZpY2UoCkBAIC00NzAzLDE4ICs0NjI4LDE3IEBACiAgICAgcmV0dXJuIG91dHB1dHM7CiB9CiAKLWJvb2wgQXVkaW9Qb2xpY3lNYW5hZ2VyOjp2ZWN0b3JzRXF1YWwoU29ydGVkVmVjdG9yPGF1ZGlvX2lvX2hhbmRsZV90PiYgb3V0cHV0czEsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNvcnRlZFZlY3RvcjxhdWRpb19pb19oYW5kbGVfdD4mIG91dHB1dHMyKQordm9pZCBBdWRpb1BvbGljeU1hbmFnZXI6OmNoZWNrRm9yRGV2aWNlQW5kT3V0cHV0Q2hhbmdlcyhzdGQ6OmZ1bmN0aW9uPGJvb2woKT4gb25PdXRwdXRzQ2hlY2tlZCkKIHsKLSAgICBpZiAob3V0cHV0czEuc2l6ZSgpICE9IG91dHB1dHMyLnNpemUoKSkgewotICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgLy8gY2hlY2tBMmRwU3VzcGVuZCBtdXN0IHJ1biBiZWZvcmUgY2hlY2tPdXRwdXRGb3JBbGxTdHJhdGVnaWVzIHNvIHRoYXQgQTJEUAorICAgIC8vIG91dHB1dCBpcyBzdXNwZW5kZWQgYmVmb3JlIGFueSB0cmFja3MgYXJlIG1vdmVkIHRvIGl0CisgICAgY2hlY2tBMmRwU3VzcGVuZCgpOworICAgIGNoZWNrT3V0cHV0Rm9yQWxsU3RyYXRlZ2llcygpOworICAgIGlmIChvbk91dHB1dHNDaGVja2VkICE9IG51bGxwdHIgJiYgb25PdXRwdXRzQ2hlY2tlZCgpKSBjaGVja0EyZHBTdXNwZW5kKCk7CisgICAgdXBkYXRlRGV2aWNlc0FuZE91dHB1dHMoKTsKKyAgICBpZiAobUh3TW9kdWxlcy5nZXRNb2R1bGVGcm9tTmFtZShBVURJT19IQVJEV0FSRV9NT0RVTEVfSURfTVNEKSAhPSAwKSB7CisgICAgICAgIHNldE1zZFBhdGNoKCk7CiAgICAgfQotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgb3V0cHV0czEuc2l6ZSgpOyBpKyspIHsKLSAgICAgICAgaWYgKG91dHB1dHMxW2ldICE9IG91dHB1dHMyW2ldKSB7Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgcmV0dXJuIHRydWU7CiB9CiAKIHZvaWQgQXVkaW9Qb2xpY3lNYW5hZ2VyOjpjaGVja091dHB1dEZvclN0cmF0ZWd5KHJvdXRpbmdfc3RyYXRlZ3kgc3RyYXRlZ3kpCkBAIC00NzQyLDcgKzQ2NjYsNyBAQAogICAgICAgICB9CiAgICAgfQogCi0gICAgaWYgKCF2ZWN0b3JzRXF1YWwoc3JjT3V0cHV0cyxkc3RPdXRwdXRzKSkgeworICAgIGlmIChzcmNPdXRwdXRzICE9IGRzdE91dHB1dHMpIHsKICAgICAgICAgLy8gZ2V0IG1heGltdW0gbGF0ZW5jeSBvZiBhbGwgc291cmNlIG91dHB1dHMgdG8gZGV0ZXJtaW5lIHRoZSBtaW5pbXVtIG11dGUgdGltZSBndWFyYW50ZWVpbmcKICAgICAgICAgLy8gYXVkaW8gZnJvbSBpbnZhbGlkYXRlZCB0cmFja3Mgd2lsbCBiZSByZW5kZXJlZCB3aGVuIHVubXV0aW5nCiAgICAgICAgIHVpbnQzMl90IG1heExhdGVuY3kgPSAwOwpAQCAtNDc2MSw3ICs0Njg1LDcgQEAKICAgICAgICAgICAgICAgICBzZXRTdHJhdGVneU11dGUoc3RyYXRlZ3ksIHRydWUsIGRlc2MpOwogICAgICAgICAgICAgICAgIHNldFN0cmF0ZWd5TXV0ZShzdHJhdGVneSwgZmFsc2UsIGRlc2MsIG1heExhdGVuY3kgKiBMQVRFTkNZX01VVEVfRkFDVE9SLCBuZXdEZXZpY2UpOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgc3A8QXVkaW9Tb3VyY2VEZXNjcmlwdG9yPiBzb3VyY2UgPQorICAgICAgICAgICAgc3A8U291cmNlQ2xpZW50RGVzY3JpcHRvcj4gc291cmNlID0KICAgICAgICAgICAgICAgICAgICAgZ2V0U291cmNlRm9yU3RyYXRlZ3lPbk91dHB1dChzcmNPdXQsIHN0cmF0ZWd5KTsKICAgICAgICAgICAgIGlmIChzb3VyY2UgIT0gMCl7CiAgICAgICAgICAgICAgICAgY29ubmVjdEF1ZGlvU291cmNlKHNvdXJjZSk7CkBAIC00ODQ2LDExICs0NzcwLDQxIEBACiAgICAgfQogfQogCit0ZW1wbGF0ZSA8Y2xhc3MgSW9EZXNjcmlwdG9yLCBjbGFzcyBGaWx0ZXI+CitzcDxEZXZpY2VEZXNjcmlwdG9yPiBBdWRpb1BvbGljeU1hbmFnZXI6OmZpbmRQcmVmZXJyZWREZXZpY2UoCisgICAgICAgIElvRGVzY3JpcHRvciYgZGVzYywgRmlsdGVyIGZpbHRlciwgYm9vbCYgYWN0aXZlLCBjb25zdCBEZXZpY2VWZWN0b3ImIGRldmljZXMpCit7CisgICAgYXV0byBhY3RpdmVDbGllbnRzID0gZGVzYy0+Y2xpZW50c0xpc3QodHJ1ZSAvKmFjdGl2ZU9ubHkqLyk7CisgICAgYXV0byBhY3RpdmVDbGllbnRzV2l0aFJvdXRlID0KKyAgICAgICAgZGVzYy0+Y2xpZW50c0xpc3QodHJ1ZSAvKmFjdGl2ZU9ubHkqLywgZmlsdGVyLCB0cnVlIC8qcHJlZmVycmVkRGV2aWNlKi8pOworICAgIGFjdGl2ZSA9IGFjdGl2ZUNsaWVudHMuc2l6ZSgpID4gMDsKKyAgICBpZiAoYWN0aXZlICYmIGFjdGl2ZUNsaWVudHMuc2l6ZSgpID09IGFjdGl2ZUNsaWVudHNXaXRoUm91dGUuc2l6ZSgpKSB7CisgICAgICAgIHJldHVybiBkZXZpY2VzLmdldERldmljZUZyb21JZChhY3RpdmVDbGllbnRzV2l0aFJvdXRlWzBdLT5wcmVmZXJyZWREZXZpY2VJZCgpKTsKKyAgICB9CisgICAgcmV0dXJuIG51bGxwdHI7Cit9CisKK3RlbXBsYXRlIDxjbGFzcyBJb0NvbGxlY3Rpb24sIGNsYXNzIEZpbHRlcj4KK3NwPERldmljZURlc2NyaXB0b3I+IEF1ZGlvUG9saWN5TWFuYWdlcjo6ZmluZFByZWZlcnJlZERldmljZSgKKyAgICAgICAgSW9Db2xsZWN0aW9uJiBpb0NvbGxlY3Rpb24sIEZpbHRlciBmaWx0ZXIsIGNvbnN0IERldmljZVZlY3RvciYgZGV2aWNlcykKK3sKKyAgICBzcDxEZXZpY2VEZXNjcmlwdG9yPiBkZXZpY2U7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBpb0NvbGxlY3Rpb24uc2l6ZSgpOyBpKyspIHsKKyAgICAgICAgYXV0byBkZXNjID0gaW9Db2xsZWN0aW9uLnZhbHVlQXQoaSk7CisgICAgICAgIGJvb2wgYWN0aXZlOworICAgICAgICBzcDxEZXZpY2VEZXNjcmlwdG9yPiBjdXJEZXZpY2UgPSBmaW5kUHJlZmVycmVkRGV2aWNlKGRlc2MsIGZpbHRlciwgYWN0aXZlLCBkZXZpY2VzKTsKKyAgICAgICAgaWYgKGFjdGl2ZSAmJiBjdXJEZXZpY2UgPT0gbnVsbHB0cikgeworICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgICAgIH0gZWxzZSBpZiAoY3VyRGV2aWNlICE9IG51bGxwdHIpIHsKKyAgICAgICAgICAgIGRldmljZSA9IGN1ckRldmljZTsKKyAgICAgICAgfQorICAgIH0KKyAgICByZXR1cm4gZGV2aWNlOworfQorCiBhdWRpb19kZXZpY2VzX3QgQXVkaW9Qb2xpY3lNYW5hZ2VyOjpnZXROZXdPdXRwdXREZXZpY2UoY29uc3Qgc3A8QXVkaW9PdXRwdXREZXNjcmlwdG9yPiYgb3V0cHV0RGVzYywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIGZyb21DYWNoZSkKIHsKLSAgICBhdWRpb19kZXZpY2VzX3QgZGV2aWNlID0gQVVESU9fREVWSUNFX05PTkU7Ci0KICAgICBzc2l6ZV90IGluZGV4ID0gbUF1ZGlvUGF0Y2hlcy5pbmRleE9mS2V5KG91dHB1dERlc2MtPmdldFBhdGNoSGFuZGxlKCkpOwogICAgIGlmIChpbmRleCA+PSAwKSB7CiAgICAgICAgIHNwPEF1ZGlvUGF0Y2g+IHBhdGNoRGVzYyA9IG1BdWRpb1BhdGNoZXMudmFsdWVBdChpbmRleCk7CkBAIC00ODYxLDE4ICs0ODE1LDEzIEBACiAgICAgICAgIH0KICAgICB9CiAKLSAgICAvLyBDaGVjayBpZiBhbiBleHBsaWNpdCByb3V0aW5nIHJlcXVlc3QgZXhpc3RzIGZvciBhbiBhY3RpdmUgc3RyZWFtIG9uIHRoaXMgb3V0cHV0IGFuZAotICAgIC8vIHVzZSBpdCBpbiBwcmlvcml0eSBiZWZvcmUgYW55IG90aGVyIHJ1bGUKLSAgICBmb3IgKGludCBzdHJlYW0gPSAwOyBzdHJlYW0gPCBBVURJT19TVFJFQU1fRk9SX1BPTElDWV9DTlQ7IHN0cmVhbSsrKSB7Ci0gICAgICAgIGlmIChvdXRwdXREZXNjLT5pc1N0cmVhbUFjdGl2ZSgoYXVkaW9fc3RyZWFtX3R5cGVfdClzdHJlYW0pKSB7Ci0gICAgICAgICAgICBhdWRpb19kZXZpY2VzX3QgZm9yY2VkRGV2aWNlID0KLSAgICAgICAgICAgICAgICAgICAgbU91dHB1dFJvdXRlcy5nZXRBY3RpdmVEZXZpY2VGb3JTdHJlYW0oCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgKGF1ZGlvX3N0cmVhbV90eXBlX3Qpc3RyZWFtLCBtQXZhaWxhYmxlT3V0cHV0RGV2aWNlcyk7Ci0KLSAgICAgICAgICAgIGlmIChmb3JjZWREZXZpY2UgIT0gQVVESU9fREVWSUNFX05PTkUpIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gZm9yY2VkRGV2aWNlOwotICAgICAgICAgICAgfQotICAgICAgICB9CisgICAgLy8gSG9ub3IgZXhwbGljaXQgcm91dGluZyByZXF1ZXN0cyBvbmx5IGlmIG5vIGNsaWVudCB1c2luZyBkZWZhdWx0IHJvdXRpbmcgaXMgYWN0aXZlIG9uIHRoaXMKKyAgICAvLyBpbnB1dDogYSBzcGVjaWZpYyBhcHAgY2FuIG5vdCBmb3JjZSByb3V0aW5nIGZvciBvdGhlciBhcHBzIGJ5IHNldHRpbmcgYSBwcmVmZXJyZWQgZGV2aWNlLgorICAgIGJvb2wgYWN0aXZlOyAvLyB1bnVzZWQKKyAgICBzcDxEZXZpY2VEZXNjcmlwdG9yPiBkZXZpY2VEZXNjID0KKyAgICAgICAgZmluZFByZWZlcnJlZERldmljZShvdXRwdXREZXNjLCBTVFJBVEVHWV9OT05FLCBhY3RpdmUsIG1BdmFpbGFibGVPdXRwdXREZXZpY2VzKTsKKyAgICBpZiAoZGV2aWNlRGVzYyAhPSBudWxscHRyKSB7CisgICAgICAgIHJldHVybiBkZXZpY2VEZXNjLT50eXBlKCk7CiAgICAgfQogCiAgICAgLy8gY2hlY2sgdGhlIGZvbGxvd2luZyBieSBvcmRlciBvZiBwcmlvcml0eSB0byByZXF1ZXN0IGEgcm91dGluZyBjaGFuZ2UgaWYgbmVjZXNzYXJ5OgpAQCAtNDg5OCwxMyArNDg0NywxNCBAQAogICAgIC8vIEZJWE1FOiBleHRlbmQgdXNlIG9mIGlzU3RyYXRlZ3lBY3RpdmVPblNhbWVNb2R1bGUoKSB0byBhbGwgc3RyYXRlZ2llcwogICAgIC8vIHdpdGggYSByZWZpbmVkIHJ1bGUgY29uc2lkZXJpbmcgbXV0dWFsbHkgZXhjbHVzaXZlIGRldmljZXMgKHVzaW5nIHNhbWUgYmFja2VuZCkKICAgICAvLyBhcyBvcHBvc2VkIHRvIGFsbCBzdHJlYW1zIG9uIHRoZSBzYW1lIGF1ZGlvIEhBTCBtb2R1bGUuCisgICAgYXVkaW9fZGV2aWNlc190IGRldmljZSA9IEFVRElPX0RFVklDRV9OT05FOwogICAgIGlmIChpc1N0cmF0ZWd5QWN0aXZlKG91dHB1dERlc2MsIFNUUkFURUdZX0VORk9SQ0VEX0FVRElCTEUpICYmCiAgICAgICAgIG1FbmdpbmUtPmdldEZvcmNlVXNlKEFVRElPX1BPTElDWV9GT1JDRV9GT1JfU1lTVEVNKSA9PSBBVURJT19QT0xJQ1lfRk9SQ0VfU1lTVEVNX0VORk9SQ0VEKSB7CiAgICAgICAgIGRldmljZSA9IGdldERldmljZUZvclN0cmF0ZWd5KFNUUkFURUdZX0VORk9SQ0VEX0FVRElCTEUsIGZyb21DYWNoZSk7CiAgICAgfSBlbHNlIGlmIChpc0luQ2FsbCgpIHx8CiAgICAgICAgICAgICAgICBpc1N0cmF0ZWd5QWN0aXZlT25TYW1lTW9kdWxlKG91dHB1dERlc2MsIFNUUkFURUdZX1BIT05FKSkgewogICAgICAgICBkZXZpY2UgPSBnZXREZXZpY2VGb3JTdHJhdGVneShTVFJBVEVHWV9QSE9ORSwgZnJvbUNhY2hlKTsKLSAgICB9IGVsc2UgaWYgKGlzU3RyYXRlZ3lBY3RpdmUob3V0cHV0RGVzYywgU1RSQVRFR1lfU09OSUZJQ0FUSU9OKSkgeworICAgIH0gZWxzZSBpZiAoaXNTdHJhdGVneUFjdGl2ZU9uU2FtZU1vZHVsZShvdXRwdXREZXNjLCBTVFJBVEVHWV9TT05JRklDQVRJT04pKSB7CiAgICAgICAgIGRldmljZSA9IGdldERldmljZUZvclN0cmF0ZWd5KFNUUkFURUdZX1NPTklGSUNBVElPTiwgZnJvbUNhY2hlKTsKICAgICB9IGVsc2UgaWYgKGlzU3RyYXRlZ3lBY3RpdmUob3V0cHV0RGVzYywgU1RSQVRFR1lfRU5GT1JDRURfQVVESUJMRSkpIHsKICAgICAgICAgZGV2aWNlID0gZ2V0RGV2aWNlRm9yU3RyYXRlZ3koU1RSQVRFR1lfRU5GT1JDRURfQVVESUJMRSwgZnJvbUNhY2hlKTsKQEAgLTQ5NDAsNiArNDg5MCwxNSBAQAogICAgICAgICB9CiAgICAgfQogCisgICAgLy8gSG9ub3IgZXhwbGljaXQgcm91dGluZyByZXF1ZXN0cyBvbmx5IGlmIG5vIGNsaWVudCB1c2luZyBkZWZhdWx0IHJvdXRpbmcgaXMgYWN0aXZlIG9uIHRoaXMKKyAgICAvLyBpbnB1dDogYSBzcGVjaWZpYyBhcHAgY2FuIG5vdCBmb3JjZSByb3V0aW5nIGZvciBvdGhlciBhcHBzIGJ5IHNldHRpbmcgYSBwcmVmZXJyZWQgZGV2aWNlLgorICAgIGJvb2wgYWN0aXZlOworICAgIHNwPERldmljZURlc2NyaXB0b3I+IGRldmljZURlc2MgPQorICAgICAgICBmaW5kUHJlZmVycmVkRGV2aWNlKGlucHV0RGVzYywgQVVESU9fU09VUkNFX0RFRkFVTFQsIGFjdGl2ZSwgbUF2YWlsYWJsZUlucHV0RGV2aWNlcyk7CisgICAgaWYgKGRldmljZURlc2MgIT0gbnVsbHB0cikgeworICAgICAgICByZXR1cm4gZGV2aWNlRGVzYy0+dHlwZSgpOworICAgIH0KKwogICAgIC8vIElmIHdlIGFyZSBub3QgaW4gY2FsbCBhbmQgbm8gY2xpZW50IGlzIGFjdGl2ZSBvbiB0aGlzIGlucHV0LCB0aGlzIG1ldGhvZHMgcmV0dXJucwogICAgIC8vIEFVRElPX0RFVklDRV9OT05FLCBjYXVzaW5nIHRoZSBwYXRjaCBvbiB0aGUgaW5wdXQgc3RyZWFtIHRvIGJlIHJlbGVhc2VkLgogICAgIGF1ZGlvX3NvdXJjZV90IHNvdXJjZSA9IGlucHV0RGVzYy0+Z2V0SGlnaGVzdFByaW9yaXR5U291cmNlKHRydWUgLyphY3RpdmVPbmx5Ki8pOwpAQCAtNDk2OSw2ICs0OTI4LDcgQEAKICAgICBpZiAoc3RyZWFtIDwgKGF1ZGlvX3N0cmVhbV90eXBlX3QpIDAgfHwgc3RyZWFtID49IEFVRElPX1NUUkVBTV9QVUJMSUNfQ05UKSB7CiAgICAgICAgIHJldHVybiBBVURJT19ERVZJQ0VfTk9ORTsKICAgICB9CisgICAgYXVkaW9fZGV2aWNlc190IGFjdGl2ZURldmljZXMgPSBBVURJT19ERVZJQ0VfTk9ORTsKICAgICBhdWRpb19kZXZpY2VzX3QgZGV2aWNlcyA9IEFVRElPX0RFVklDRV9OT05FOwogICAgIGZvciAoaW50IGN1clN0cmVhbSA9IDA7IGN1clN0cmVhbSA8IEFVRElPX1NUUkVBTV9GT1JfUE9MSUNZX0NOVDsgY3VyU3RyZWFtKyspIHsKICAgICAgICAgaWYgKCFzdHJlYW1zTWF0Y2hGb3J2b2x1bWUoc3RyZWFtLCAoYXVkaW9fc3RyZWFtX3R5cGVfdCljdXJTdHJlYW0pKSB7CkBAIC00OTc3LDE1ICs0OTM3LDIwIEBACiAgICAgICAgIHJvdXRpbmdfc3RyYXRlZ3kgY3VyU3RyYXRlZ3kgPSBnZXRTdHJhdGVneSgoYXVkaW9fc3RyZWFtX3R5cGVfdCljdXJTdHJlYW0pOwogICAgICAgICBhdWRpb19kZXZpY2VzX3QgY3VyRGV2aWNlcyA9CiAgICAgICAgICAgICAgICAgZ2V0RGV2aWNlRm9yU3RyYXRlZ3koKHJvdXRpbmdfc3RyYXRlZ3kpY3VyU3RyYXRlZ3ksIGZhbHNlIC8qZnJvbUNhY2hlKi8pOworICAgICAgICBkZXZpY2VzIHw9IGN1ckRldmljZXM7CiAgICAgICAgIGZvciAoYXVkaW9faW9faGFuZGxlX3Qgb3V0cHV0IDogZ2V0T3V0cHV0c0ZvckRldmljZShjdXJEZXZpY2VzLCBtT3V0cHV0cykpIHsKICAgICAgICAgICAgIHNwPEF1ZGlvT3V0cHV0RGVzY3JpcHRvcj4gb3V0cHV0RGVzYyA9IG1PdXRwdXRzLnZhbHVlRm9yKG91dHB1dCk7CiAgICAgICAgICAgICBpZiAob3V0cHV0RGVzYy0+aXNTdHJlYW1BY3RpdmUoKGF1ZGlvX3N0cmVhbV90eXBlX3QpY3VyU3RyZWFtKSkgewotICAgICAgICAgICAgICAgIGN1ckRldmljZXMgfD0gb3V0cHV0RGVzYy0+ZGV2aWNlKCk7CisgICAgICAgICAgICAgICAgYWN0aXZlRGV2aWNlcyB8PSBvdXRwdXREZXNjLT5kZXZpY2UoKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQotICAgICAgICBkZXZpY2VzIHw9IGN1ckRldmljZXM7CiAgICAgfQogCisgICAgLy8gRmF2b3IgZGV2aWNlcyBzZWxlY3RlZCBvbiBhY3RpdmUgc3RyZWFtcyBpZiBhbnkgdG8gcmVwb3J0IGNvcnJlY3QgZGV2aWNlIGluIGNhc2Ugb2YKKyAgICAvLyBleHBsaWNpdCBkZXZpY2Ugc2VsZWN0aW9uCisgICAgaWYgKGFjdGl2ZURldmljZXMgIT0gQVVESU9fREVWSUNFX05PTkUpIHsKKyAgICAgICAgZGV2aWNlcyA9IGFjdGl2ZURldmljZXM7CisgICAgfQogICAgIC8qRmlsdGVyIFNQRUFLRVJfU0FGRSBvdXQgb2YgcmVzdWx0cywgYXMgQXVkaW9TZXJ2aWNlIGRvZXNuJ3Qga25vdyBhYm91dCBpdAogICAgICAgYW5kIGRvZXNuJ3QgcmVhbGx5IG5lZWQgdG8uKi8KICAgICBpZiAoZGV2aWNlcyAmIEFVRElPX0RFVklDRV9PVVRfU1BFQUtFUl9TQUZFKSB7CkBAIC01MDAxLDE2ICs0OTY2LDE2IEBACiAgICAgcmV0dXJuIG1FbmdpbmUtPmdldFN0cmF0ZWd5Rm9yU3RyZWFtKHN0cmVhbSk7CiB9CiAKLXVpbnQzMl90IEF1ZGlvUG9saWN5TWFuYWdlcjo6Z2V0U3RyYXRlZ3lGb3JBdHRyKGNvbnN0IGF1ZGlvX2F0dHJpYnV0ZXNfdCAqYXR0cikgeworcm91dGluZ19zdHJhdGVneSBBdWRpb1BvbGljeU1hbmFnZXI6OmdldFN0cmF0ZWd5Rm9yQXR0cihjb25zdCBhdWRpb19hdHRyaWJ1dGVzX3QgKmF0dHIpIHsKICAgICAvLyBmbGFncyB0byBzdHJhdGVneSBtYXBwaW5nCiAgICAgaWYgKChhdHRyLT5mbGFncyAmIEFVRElPX0ZMQUdfQkVBQ09OKSA9PSBBVURJT19GTEFHX0JFQUNPTikgewotICAgICAgICByZXR1cm4gKHVpbnQzMl90KSBTVFJBVEVHWV9UUkFOU01JVFRFRF9USFJPVUdIX1NQRUFLRVI7CisgICAgICAgIHJldHVybiBTVFJBVEVHWV9UUkFOU01JVFRFRF9USFJPVUdIX1NQRUFLRVI7CiAgICAgfQogICAgIGlmICgoYXR0ci0+ZmxhZ3MgJiBBVURJT19GTEFHX0FVRElCSUxJVFlfRU5GT1JDRUQpID09IEFVRElPX0ZMQUdfQVVESUJJTElUWV9FTkZPUkNFRCkgewotICAgICAgICByZXR1cm4gKHVpbnQzMl90KSBTVFJBVEVHWV9FTkZPUkNFRF9BVURJQkxFOworICAgICAgICByZXR1cm4gU1RSQVRFR1lfRU5GT1JDRURfQVVESUJMRTsKICAgICB9CiAgICAgLy8gdXNhZ2UgdG8gc3RyYXRlZ3kgbWFwcGluZwotICAgIHJldHVybiBzdGF0aWNfY2FzdDx1aW50MzJfdD4obUVuZ2luZS0+Z2V0U3RyYXRlZ3lGb3JVc2FnZShhdHRyLT51c2FnZSkpOworICAgIHJldHVybiBtRW5naW5lLT5nZXRTdHJhdGVneUZvclVzYWdlKGF0dHItPnVzYWdlKTsKIH0KIAogdm9pZCBBdWRpb1BvbGljeU1hbmFnZXI6OmhhbmRsZU5vdGlmaWNhdGlvblJvdXRpbmdGb3JTdHJlYW0oYXVkaW9fc3RyZWFtX3R5cGVfdCBzdHJlYW0pIHsKQEAgLTUwODYsMTcgKzUwNTEsMTEgQEAKIGF1ZGlvX2RldmljZXNfdCBBdWRpb1BvbGljeU1hbmFnZXI6OmdldERldmljZUZvclN0cmF0ZWd5KHJvdXRpbmdfc3RyYXRlZ3kgc3RyYXRlZ3ksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIGZyb21DYWNoZSkKIHsKLSAgICAvLyBDaGVjayBpZiBhbiBleHBsaWNpdCByb3V0aW5nIHJlcXVlc3QgZXhpc3RzIGZvciBhIHN0cmVhbSB0eXBlIGNvcnJlc3BvbmRpbmcgdG8gdGhlCi0gICAgLy8gc3BlY2lmaWVkIHN0cmF0ZWd5IGFuZCB1c2UgaXQgaW4gcHJpb3JpdHkgb3ZlciBkZWZhdWx0IHJvdXRpbmcgcnVsZXMuCi0gICAgZm9yIChpbnQgc3RyZWFtID0gMDsgc3RyZWFtIDwgQVVESU9fU1RSRUFNX0ZPUl9QT0xJQ1lfQ05UOyBzdHJlYW0rKykgewotICAgICAgICBpZiAoZ2V0U3RyYXRlZ3koKGF1ZGlvX3N0cmVhbV90eXBlX3Qpc3RyZWFtKSA9PSBzdHJhdGVneSkgewotICAgICAgICAgICAgYXVkaW9fZGV2aWNlc190IGZvcmNlZERldmljZSA9Ci0gICAgICAgICAgICAgICAgICAgIG1PdXRwdXRSb3V0ZXMuZ2V0QWN0aXZlRGV2aWNlRm9yU3RyZWFtKAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIChhdWRpb19zdHJlYW1fdHlwZV90KXN0cmVhbSwgbUF2YWlsYWJsZU91dHB1dERldmljZXMpOwotICAgICAgICAgICAgaWYgKGZvcmNlZERldmljZSAhPSBBVURJT19ERVZJQ0VfTk9ORSkgewotICAgICAgICAgICAgICAgIHJldHVybiBmb3JjZWREZXZpY2U7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KKyAgICAvLyBIb25vciBleHBsaWNpdCByb3V0aW5nIHJlcXVlc3RzIG9ubHkgaWYgYWxsIGFjdGl2ZSBjbGllbnRzIGhhdmUgYSBwcmVmZXJyZWQgcm91dGUgaW4gd2hpY2gKKyAgICAvLyBjYXNlIHRoZSBsYXN0IGFjdGl2ZSBjbGllbnQgcm91dGUgaXMgdXNlZAorICAgIHNwPERldmljZURlc2NyaXB0b3I+IGRldmljZURlc2MgPSBmaW5kUHJlZmVycmVkRGV2aWNlKG1PdXRwdXRzLCBzdHJhdGVneSwgbUF2YWlsYWJsZU91dHB1dERldmljZXMpOworICAgIGlmIChkZXZpY2VEZXNjICE9IG51bGxwdHIpIHsKKyAgICAgICAgcmV0dXJuIGRldmljZURlc2MtPnR5cGUoKTsKICAgICB9CiAKICAgICBpZiAoZnJvbUNhY2hlKSB7CkBAIC01MjY2LDU0ICs1MjI1LDIwIEBACiAgICAgfSBlbHNlIHsKICAgICAgICAgRGV2aWNlVmVjdG9yIGRldmljZUxpc3Q7CiAgICAgICAgIGlmICgoYWRkcmVzcyA9PSBOVUxMKSB8fCAoc3RybGVuKGFkZHJlc3MpID09IDApKSB7Ci0gICAgICAgICAgICBkZXZpY2VMaXN0ID0gbUF2YWlsYWJsZU91dHB1dERldmljZXMuZ2V0RGV2aWNlc0Zyb21UeXBlKGRldmljZSk7CisgICAgICAgICAgICBkZXZpY2VMaXN0ID0gbUF2YWlsYWJsZU91dHB1dERldmljZXMuZ2V0RGV2aWNlc0Zyb21UeXBlTWFzayhkZXZpY2UpOwogICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgZGV2aWNlTGlzdCA9IG1BdmFpbGFibGVPdXRwdXREZXZpY2VzLmdldERldmljZXNGcm9tVHlwZUFkZHIoZGV2aWNlLCBTdHJpbmc4KGFkZHJlc3MpKTsKKyAgICAgICAgICAgIHNwPERldmljZURlc2NyaXB0b3I+IGRldmljZURlc2MgPSBtQXZhaWxhYmxlT3V0cHV0RGV2aWNlcy5nZXREZXZpY2UoCisgICAgICAgICAgICAgICAgICAgIGRldmljZSwgU3RyaW5nOChhZGRyZXNzKSk7CisgICAgICAgICAgICBpZiAoZGV2aWNlRGVzYykgZGV2aWNlTGlzdC5hZGQoZGV2aWNlRGVzYyk7CiAgICAgICAgIH0KIAogICAgICAgICBpZiAoIWRldmljZUxpc3QuaXNFbXB0eSgpKSB7Ci0gICAgICAgICAgICBzdHJ1Y3QgYXVkaW9fcGF0Y2ggcGF0Y2g7Ci0gICAgICAgICAgICBvdXRwdXREZXNjLT50b0F1ZGlvUG9ydENvbmZpZygmcGF0Y2guc291cmNlc1swXSk7Ci0gICAgICAgICAgICBwYXRjaC5udW1fc291cmNlcyA9IDE7Ci0gICAgICAgICAgICBwYXRjaC5udW1fc2lua3MgPSAwOworICAgICAgICAgICAgUGF0Y2hCdWlsZGVyIHBhdGNoQnVpbGRlcjsKKyAgICAgICAgICAgIHBhdGNoQnVpbGRlci5hZGRTb3VyY2Uob3V0cHV0RGVzYyk7CiAgICAgICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGRldmljZUxpc3Quc2l6ZSgpICYmIGkgPCBBVURJT19QQVRDSF9QT1JUU19NQVg7IGkrKykgewotICAgICAgICAgICAgICAgIGRldmljZUxpc3QuaXRlbUF0KGkpLT50b0F1ZGlvUG9ydENvbmZpZygmcGF0Y2guc2lua3NbaV0pOwotICAgICAgICAgICAgICAgIHBhdGNoLm51bV9zaW5rcysrOworICAgICAgICAgICAgICAgIHBhdGNoQnVpbGRlci5hZGRTaW5rKGRldmljZUxpc3QuaXRlbUF0KGkpKTsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHNzaXplX3QgaW5kZXg7Ci0gICAgICAgICAgICBpZiAocGF0Y2hIYW5kbGUgJiYgKnBhdGNoSGFuZGxlICE9IEFVRElPX1BBVENIX0hBTkRMRV9OT05FKSB7Ci0gICAgICAgICAgICAgICAgaW5kZXggPSBtQXVkaW9QYXRjaGVzLmluZGV4T2ZLZXkoKnBhdGNoSGFuZGxlKTsKLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgaW5kZXggPSBtQXVkaW9QYXRjaGVzLmluZGV4T2ZLZXkob3V0cHV0RGVzYy0+Z2V0UGF0Y2hIYW5kbGUoKSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBzcDwgQXVkaW9QYXRjaD4gcGF0Y2hEZXNjOwotICAgICAgICAgICAgYXVkaW9fcGF0Y2hfaGFuZGxlX3QgYWZQYXRjaEhhbmRsZSA9IEFVRElPX1BBVENIX0hBTkRMRV9OT05FOwotICAgICAgICAgICAgaWYgKGluZGV4ID49IDApIHsKLSAgICAgICAgICAgICAgICBwYXRjaERlc2MgPSBtQXVkaW9QYXRjaGVzLnZhbHVlQXQoaW5kZXgpOwotICAgICAgICAgICAgICAgIGFmUGF0Y2hIYW5kbGUgPSBwYXRjaERlc2MtPm1BZlBhdGNoSGFuZGxlOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBzdGF0dXNfdCBzdGF0dXMgPSBtcENsaWVudEludGVyZmFjZS0+Y3JlYXRlQXVkaW9QYXRjaCgmcGF0Y2gsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmFmUGF0Y2hIYW5kbGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVsYXlNcyk7Ci0gICAgICAgICAgICBBTE9HVigic2V0T3V0cHV0RGV2aWNlKCkgY3JlYXRlQXVkaW9QYXRjaCByZXR1cm5lZCAlZCBwYXRjaEhhbmRsZSAlZCIKLSAgICAgICAgICAgICAgICAgICAgIm51bV9zb3VyY2VzICVkIG51bV9zaW5rcyAlZCIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0dXMsIGFmUGF0Y2hIYW5kbGUsIHBhdGNoLm51bV9zb3VyY2VzLCBwYXRjaC5udW1fc2lua3MpOwotICAgICAgICAgICAgaWYgKHN0YXR1cyA9PSBOT19FUlJPUikgewotICAgICAgICAgICAgICAgIGlmIChpbmRleCA8IDApIHsKLSAgICAgICAgICAgICAgICAgICAgcGF0Y2hEZXNjID0gbmV3IEF1ZGlvUGF0Y2goJnBhdGNoLCBtVWlkQ2FjaGVkKTsKLSAgICAgICAgICAgICAgICAgICAgYWRkQXVkaW9QYXRjaChwYXRjaERlc2MtPm1IYW5kbGUsIHBhdGNoRGVzYyk7Ci0gICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgcGF0Y2hEZXNjLT5tUGF0Y2ggPSBwYXRjaDsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgcGF0Y2hEZXNjLT5tQWZQYXRjaEhhbmRsZSA9IGFmUGF0Y2hIYW5kbGU7Ci0gICAgICAgICAgICAgICAgaWYgKHBhdGNoSGFuZGxlKSB7Ci0gICAgICAgICAgICAgICAgICAgICpwYXRjaEhhbmRsZSA9IHBhdGNoRGVzYy0+bUhhbmRsZTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgb3V0cHV0RGVzYy0+c2V0UGF0Y2hIYW5kbGUocGF0Y2hEZXNjLT5tSGFuZGxlKTsKLSAgICAgICAgICAgICAgICBuZXh0QXVkaW9Qb3J0R2VuZXJhdGlvbigpOwotICAgICAgICAgICAgICAgIG1wQ2xpZW50SW50ZXJmYWNlLT5vbkF1ZGlvUGF0Y2hMaXN0VXBkYXRlKCk7Ci0gICAgICAgICAgICB9CisgICAgICAgICAgICBpbnN0YWxsUGF0Y2goX19mdW5jX18sIHBhdGNoSGFuZGxlLCBvdXRwdXREZXNjLmdldCgpLCBwYXRjaEJ1aWxkZXIucGF0Y2goKSwgZGVsYXlNcyk7CiAgICAgICAgIH0KIAogICAgICAgICAvLyBpbmZvcm0gYWxsIGlucHV0IGFzIHdlbGwKQEAgLTUzNzEsNTMgKzUyOTYsMjEgQEAKICAgICBpZiAoKGRldmljZSAhPSBBVURJT19ERVZJQ0VfTk9ORSkgJiYgKChkZXZpY2UgIT0gaW5wdXREZXNjLT5tRGV2aWNlKSB8fCBmb3JjZSkpIHsKICAgICAgICAgaW5wdXREZXNjLT5tRGV2aWNlID0gZGV2aWNlOwogCi0gICAgICAgIERldmljZVZlY3RvciBkZXZpY2VMaXN0ID0gbUF2YWlsYWJsZUlucHV0RGV2aWNlcy5nZXREZXZpY2VzRnJvbVR5cGUoZGV2aWNlKTsKKyAgICAgICAgRGV2aWNlVmVjdG9yIGRldmljZUxpc3QgPSBtQXZhaWxhYmxlSW5wdXREZXZpY2VzLmdldERldmljZXNGcm9tVHlwZU1hc2soZGV2aWNlKTsKICAgICAgICAgaWYgKCFkZXZpY2VMaXN0LmlzRW1wdHkoKSkgewotICAgICAgICAgICAgc3RydWN0IGF1ZGlvX3BhdGNoIHBhdGNoOwotICAgICAgICAgICAgaW5wdXREZXNjLT50b0F1ZGlvUG9ydENvbmZpZygmcGF0Y2guc2lua3NbMF0pOworICAgICAgICAgICAgUGF0Y2hCdWlsZGVyIHBhdGNoQnVpbGRlcjsKKyAgICAgICAgICAgIHBhdGNoQnVpbGRlci5hZGRTaW5rKGlucHV0RGVzYywKICAgICAgICAgICAgIC8vIEFVRElPX1NPVVJDRV9IT1RXT1JEIGlzIGZvciBpbnRlcm5hbCB1c2Ugb25seToKICAgICAgICAgICAgIC8vIGhhbmRsZWQgYXMgQVVESU9fU09VUkNFX1ZPSUNFX1JFQ09HTklUSU9OIGJ5IHRoZSBhdWRpbyBIQUwKLSAgICAgICAgICAgIGlmIChwYXRjaC5zaW5rc1swXS5leHQubWl4LnVzZWNhc2Uuc291cmNlID09IEFVRElPX1NPVVJDRV9IT1RXT1JEICYmCi0gICAgICAgICAgICAgICAgICAgICFpbnB1dERlc2MtPmlzU291bmRUcmlnZ2VyKCkpIHsKLSAgICAgICAgICAgICAgICBwYXRjaC5zaW5rc1swXS5leHQubWl4LnVzZWNhc2Uuc291cmNlID0gQVVESU9fU09VUkNFX1ZPSUNFX1JFQ09HTklUSU9OOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgcGF0Y2gubnVtX3NpbmtzID0gMTsKKyAgICAgICAgICAgICAgICAgICAgW2lucHV0RGVzY10oY29uc3QgUGF0Y2hCdWlsZGVyOjptaXhfdXNlY2FzZV90JiB1c2VjYXNlKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBhdXRvIHJlc3VsdCA9IHVzZWNhc2U7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAocmVzdWx0LnNvdXJjZSA9PSBBVURJT19TT1VSQ0VfSE9UV09SRCAmJiAhaW5wdXREZXNjLT5pc1NvdW5kVHJpZ2dlcigpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0LnNvdXJjZSA9IEFVRElPX1NPVVJDRV9WT0lDRV9SRUNPR05JVElPTjsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7IH0pLgogICAgICAgICAgICAgLy9vbmx5IG9uZSBpbnB1dCBkZXZpY2UgZm9yIG5vdwotICAgICAgICAgICAgZGV2aWNlTGlzdC5pdGVtQXQoMCktPnRvQXVkaW9Qb3J0Q29uZmlnKCZwYXRjaC5zb3VyY2VzWzBdKTsKLSAgICAgICAgICAgIHBhdGNoLm51bV9zb3VyY2VzID0gMTsKLSAgICAgICAgICAgIHNzaXplX3QgaW5kZXg7Ci0gICAgICAgICAgICBpZiAocGF0Y2hIYW5kbGUgJiYgKnBhdGNoSGFuZGxlICE9IEFVRElPX1BBVENIX0hBTkRMRV9OT05FKSB7Ci0gICAgICAgICAgICAgICAgaW5kZXggPSBtQXVkaW9QYXRjaGVzLmluZGV4T2ZLZXkoKnBhdGNoSGFuZGxlKTsKLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgaW5kZXggPSBtQXVkaW9QYXRjaGVzLmluZGV4T2ZLZXkoaW5wdXREZXNjLT5nZXRQYXRjaEhhbmRsZSgpKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHNwPCBBdWRpb1BhdGNoPiBwYXRjaERlc2M7Ci0gICAgICAgICAgICBhdWRpb19wYXRjaF9oYW5kbGVfdCBhZlBhdGNoSGFuZGxlID0gQVVESU9fUEFUQ0hfSEFORExFX05PTkU7Ci0gICAgICAgICAgICBpZiAoaW5kZXggPj0gMCkgewotICAgICAgICAgICAgICAgIHBhdGNoRGVzYyA9IG1BdWRpb1BhdGNoZXMudmFsdWVBdChpbmRleCk7Ci0gICAgICAgICAgICAgICAgYWZQYXRjaEhhbmRsZSA9IHBhdGNoRGVzYy0+bUFmUGF0Y2hIYW5kbGU7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIHN0YXR1c190IHN0YXR1cyA9IG1wQ2xpZW50SW50ZXJmYWNlLT5jcmVhdGVBdWRpb1BhdGNoKCZwYXRjaCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZhZlBhdGNoSGFuZGxlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCk7Ci0gICAgICAgICAgICBBTE9HVigic2V0SW5wdXREZXZpY2UoKSBjcmVhdGVBdWRpb1BhdGNoIHJldHVybmVkICVkIHBhdGNoSGFuZGxlICVkIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdHVzLCBhZlBhdGNoSGFuZGxlKTsKLSAgICAgICAgICAgIGlmIChzdGF0dXMgPT0gTk9fRVJST1IpIHsKLSAgICAgICAgICAgICAgICBpZiAoaW5kZXggPCAwKSB7Ci0gICAgICAgICAgICAgICAgICAgIHBhdGNoRGVzYyA9IG5ldyBBdWRpb1BhdGNoKCZwYXRjaCwgbVVpZENhY2hlZCk7Ci0gICAgICAgICAgICAgICAgICAgIGFkZEF1ZGlvUGF0Y2gocGF0Y2hEZXNjLT5tSGFuZGxlLCBwYXRjaERlc2MpOwotICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgIHBhdGNoRGVzYy0+bVBhdGNoID0gcGF0Y2g7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIHBhdGNoRGVzYy0+bUFmUGF0Y2hIYW5kbGUgPSBhZlBhdGNoSGFuZGxlOwotICAgICAgICAgICAgICAgIGlmIChwYXRjaEhhbmRsZSkgewotICAgICAgICAgICAgICAgICAgICAqcGF0Y2hIYW5kbGUgPSBwYXRjaERlc2MtPm1IYW5kbGU7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGlucHV0RGVzYy0+c2V0UGF0Y2hIYW5kbGUocGF0Y2hEZXNjLT5tSGFuZGxlKTsKLSAgICAgICAgICAgICAgICBuZXh0QXVkaW9Qb3J0R2VuZXJhdGlvbigpOwotICAgICAgICAgICAgICAgIG1wQ2xpZW50SW50ZXJmYWNlLT5vbkF1ZGlvUGF0Y2hMaXN0VXBkYXRlKCk7Ci0gICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGFkZFNvdXJjZShkZXZpY2VMaXN0Lml0ZW1BdCgwKSk7CisgICAgICAgICAgICBzdGF0dXMgPSBpbnN0YWxsUGF0Y2goX19mdW5jX18sIHBhdGNoSGFuZGxlLCBpbnB1dERlc2MuZ2V0KCksIHBhdGNoQnVpbGRlci5wYXRjaCgpLCAwKTsKICAgICAgICAgfQogICAgIH0KICAgICByZXR1cm4gc3RhdHVzOwpAQCAtNTUwNiw2ICs1Mzk5LDE1IEBACiBhdWRpb19kZXZpY2VzX3QgQXVkaW9Qb2xpY3lNYW5hZ2VyOjpnZXREZXZpY2VBbmRNaXhGb3JJbnB1dFNvdXJjZShhdWRpb19zb3VyY2VfdCBpbnB1dFNvdXJjZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEF1ZGlvTWl4ICoqcG9saWN5TWl4KQogeworICAgIC8vIEhvbm9yIGV4cGxpY2l0IHJvdXRpbmcgcmVxdWVzdHMgb25seSBpZiBhbGwgYWN0aXZlIGNsaWVudHMgaGF2ZSBhIHByZWZlcnJlZCByb3V0ZSBpbiB3aGljaAorICAgIC8vIGNhc2UgdGhlIGxhc3QgYWN0aXZlIGNsaWVudCByb3V0ZSBpcyB1c2VkCisgICAgc3A8RGV2aWNlRGVzY3JpcHRvcj4gZGV2aWNlRGVzYyA9CisgICAgICAgIGZpbmRQcmVmZXJyZWREZXZpY2UobUlucHV0cywgaW5wdXRTb3VyY2UsIG1BdmFpbGFibGVJbnB1dERldmljZXMpOworICAgIGlmIChkZXZpY2VEZXNjICE9IG51bGxwdHIpIHsKKyAgICAgICAgcmV0dXJuIGRldmljZURlc2MtPnR5cGUoKTsKKyAgICB9CisKKwogICAgIGF1ZGlvX2RldmljZXNfdCBhdmFpbGFibGVEZXZpY2VUeXBlcyA9IG1BdmFpbGFibGVJbnB1dERldmljZXMudHlwZXMoKSAmIH5BVURJT19ERVZJQ0VfQklUX0lOOwogICAgIGF1ZGlvX2RldmljZXNfdCBzZWxlY3RlZERldmljZUZyb21NaXggPQogICAgICAgICAgICBtUG9saWN5TWl4ZXMuZ2V0RGV2aWNlQW5kTWl4Rm9ySW5wdXRTb3VyY2UoaW5wdXRTb3VyY2UsIGF2YWlsYWJsZURldmljZVR5cGVzLCBwb2xpY3lNaXgpOwpAQCAtNTUxOCwyMCArNTQyMCw3IEBACiAKIGF1ZGlvX2RldmljZXNfdCBBdWRpb1BvbGljeU1hbmFnZXI6OmdldERldmljZUZvcklucHV0U291cmNlKGF1ZGlvX3NvdXJjZV90IGlucHV0U291cmNlKQogewotICAgIC8vIFJvdXRpbmcKLSAgICAvLyBTY2FuIHRoZSB3aG9sZSBSb3V0ZU1hcCB0byBzZWUgaWYgd2UgaGF2ZSBhbiBleHBsaWNpdCByb3V0ZToKLSAgICAvLyBpZiB0aGUgaW5wdXQgc291cmNlIGluIHRoZSBSb3V0ZU1hcCBpcyB0aGUgc2FtZSBhcyB0aGUgYXJndW1lbnQgYWJvdmUsCi0gICAgLy8gYW5kIGFjdGl2aXR5IGNvdW50IGlzIG5vbi16ZXJvIGFuZCB0aGUgZGV2aWNlIGluIHRoZSByb3V0ZSBkZXNjcmlwdG9yIGlzIGF2YWlsYWJsZQotICAgIC8vIHRoZW4gc2VsZWN0IHRoaXMgZGV2aWNlLgotICAgIGZvciAoc2l6ZV90IHJvdXRlSW5kZXggPSAwOyByb3V0ZUluZGV4IDwgbUlucHV0Um91dGVzLnNpemUoKTsgcm91dGVJbmRleCsrKSB7Ci0gICAgICAgICBzcDxTZXNzaW9uUm91dGU+IHJvdXRlID0gbUlucHV0Um91dGVzLnZhbHVlQXQocm91dGVJbmRleCk7Ci0gICAgICAgICBpZiAoKGlucHV0U291cmNlID09IHJvdXRlLT5tU291cmNlKSAmJiByb3V0ZS0+aXNBY3RpdmVPckNoYW5nZWQoKSAmJgotICAgICAgICAgICAgICAgICAobUF2YWlsYWJsZUlucHV0RGV2aWNlcy5pbmRleE9mKHJvdXRlLT5tRGV2aWNlRGVzY3JpcHRvcikgPj0gMCkpIHsKLSAgICAgICAgICAgICByZXR1cm4gcm91dGUtPm1EZXZpY2VEZXNjcmlwdG9yLT50eXBlKCk7Ci0gICAgICAgICB9Ci0gICAgIH0KLQotICAgICByZXR1cm4gbUVuZ2luZS0+Z2V0RGV2aWNlRm9ySW5wdXRTb3VyY2UoaW5wdXRTb3VyY2UpOworICAgIHJldHVybiBtRW5naW5lLT5nZXREZXZpY2VGb3JJbnB1dFNvdXJjZShpbnB1dFNvdXJjZSk7CiB9CiAKIGZsb2F0IEF1ZGlvUG9saWN5TWFuYWdlcjo6Y29tcHV0ZVZvbHVtZShhdWRpb19zdHJlYW1fdHlwZV90IHN0cmVhbSwKQEAgLTU1NTEsOCArNTQ0MCw4IEBACiAgICAgICAgIHJldHVybiByaW5nVm9sdW1lREIgLSA0ID4gdm9sdW1lREIgPyByaW5nVm9sdW1lREIgLSA0IDogdm9sdW1lREI7CiAgICAgfQogCi0gICAgLy8gaW4tY2FsbDogYWx3YXlzIGNhcCBlYXJwaWVjZSB2b2x1bWUgYnkgdm9pY2Ugdm9sdW1lICsgc29tZSBsb3cgaGVhZHJvb20KLSAgICBpZiAoKHN0cmVhbSAhPSBBVURJT19TVFJFQU1fVk9JQ0VfQ0FMTCkgJiYgKGRldmljZSAmIEFVRElPX0RFVklDRV9PVVRfRUFSUElFQ0UpICYmCisgICAgLy8gaW4tY2FsbDogYWx3YXlzIGNhcCB2b2x1bWUgYnkgdm9pY2Ugdm9sdW1lICsgc29tZSBsb3cgaGVhZHJvb20KKyAgICBpZiAoKHN0cmVhbSAhPSBBVURJT19TVFJFQU1fVk9JQ0VfQ0FMTCkgJiYKICAgICAgICAgICAgIChpc0luQ2FsbCgpIHx8IG1PdXRwdXRzLmlzU3RyZWFtQWN0aXZlTG9jYWxseShBVURJT19TVFJFQU1fVk9JQ0VfQ0FMTCkpKSB7CiAgICAgICAgIHN3aXRjaCAoc3RyZWFtKSB7CiAgICAgICAgIGNhc2UgQVVESU9fU1RSRUFNX1NZU1RFTToKQEAgLTU1NjQsOSArNTQ1Myw5IEBACiAgICAgICAgIGNhc2UgQVVESU9fU1RSRUFNX0RUTUY6CiAgICAgICAgIGNhc2UgQVVESU9fU1RSRUFNX0FDQ0VTU0lCSUxJVFk6IHsKICAgICAgICAgICAgIGludCB2b2ljZVZvbHVtZUluZGV4ID0KLSAgICAgICAgICAgICAgICBtVm9sdW1lQ3VydmVzLT5nZXRWb2x1bWVJbmRleChBVURJT19TVFJFQU1fVk9JQ0VfQ0FMTCwgQVVESU9fREVWSUNFX09VVF9FQVJQSUVDRSk7CisgICAgICAgICAgICAgICAgbVZvbHVtZUN1cnZlcy0+Z2V0Vm9sdW1lSW5kZXgoQVVESU9fU1RSRUFNX1ZPSUNFX0NBTEwsIGRldmljZSk7CiAgICAgICAgICAgICBjb25zdCBmbG9hdCBtYXhWb2ljZVZvbERiID0KLSAgICAgICAgICAgICAgICBjb21wdXRlVm9sdW1lKEFVRElPX1NUUkVBTV9WT0lDRV9DQUxMLCB2b2ljZVZvbHVtZUluZGV4LCBBVURJT19ERVZJQ0VfT1VUX0VBUlBJRUNFKQorICAgICAgICAgICAgICAgIGNvbXB1dGVWb2x1bWUoQVVESU9fU1RSRUFNX1ZPSUNFX0NBTEwsIHZvaWNlVm9sdW1lSW5kZXgsIGRldmljZSkKICAgICAgICAgICAgICAgICArIElOX0NBTExfRUFSUElFQ0VfSEVBRFJPT01fREI7CiAgICAgICAgICAgICBpZiAodm9sdW1lREIgPiBtYXhWb2ljZVZvbERiKSB7CiAgICAgICAgICAgICAgICAgQUxPR1YoImNvbXB1dGVWb2x1bWUoKSBzdHJlYW0gJWQgYXQgdm9sPSVmIG92ZXJyaWRlbiBieSBzdHJlYW0gJWQgYXQgdm9sPSVmIiwKQEAgLTU2MzcsNiArNTUyNiwyMSBAQAogICAgIHJldHVybiB2b2x1bWVEQjsKIH0KIAoraW50IEF1ZGlvUG9saWN5TWFuYWdlcjo6cmVzY2FsZVZvbHVtZUluZGV4KGludCBzcmNJbmRleCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdWRpb19zdHJlYW1fdHlwZV90IHNyY1N0cmVhbSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdWRpb19zdHJlYW1fdHlwZV90IGRzdFN0cmVhbSkKK3sKKyAgICBpZiAoc3JjU3RyZWFtID09IGRzdFN0cmVhbSkgeworICAgICAgICByZXR1cm4gc3JjSW5kZXg7CisgICAgfQorICAgIGZsb2F0IG1pblNyYyA9IChmbG9hdCltVm9sdW1lQ3VydmVzLT5nZXRWb2x1bWVJbmRleE1pbihzcmNTdHJlYW0pOworICAgIGZsb2F0IG1heFNyYyA9IChmbG9hdCltVm9sdW1lQ3VydmVzLT5nZXRWb2x1bWVJbmRleE1heChzcmNTdHJlYW0pOworICAgIGZsb2F0IG1pbkRzdCA9IChmbG9hdCltVm9sdW1lQ3VydmVzLT5nZXRWb2x1bWVJbmRleE1pbihkc3RTdHJlYW0pOworICAgIGZsb2F0IG1heERzdCA9IChmbG9hdCltVm9sdW1lQ3VydmVzLT5nZXRWb2x1bWVJbmRleE1heChkc3RTdHJlYW0pOworCisgICAgcmV0dXJuIChpbnQpKG1pbkRzdCArICgoc3JjSW5kZXggLSBtaW5TcmMpICogKG1heERzdCAtIG1pbkRzdCkpIC8gKG1heFNyYyAtIG1pblNyYykpOworfQorCiBzdGF0dXNfdCBBdWRpb1BvbGljeU1hbmFnZXI6OmNoZWNrQW5kU2V0Vm9sdW1lKGF1ZGlvX3N0cmVhbV90eXBlX3Qgc3RyZWFtLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGluZGV4LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3A8QXVkaW9PdXRwdXREZXNjcmlwdG9yPiYgb3V0cHV0RGVzYywKQEAgLTU3NjMsNTUgKzU2NjcsNiBAQAogICAgIH0KIH0KIAotdm9pZCBBdWRpb1BvbGljeU1hbmFnZXI6OmhhbmRsZUluY2FsbFNvbmlmaWNhdGlvbihhdWRpb19zdHJlYW1fdHlwZV90IHN0cmVhbSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgc3RhcnRpbmcsIGJvb2wgc3RhdGVDaGFuZ2UpCi17Ci0gICAgaWYoIWhhc1ByaW1hcnlPdXRwdXQoKSkgewotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgLy8gaWYgdGhlIHN0cmVhbSBwZXJ0YWlucyB0byBzb25pZmljYXRpb24gc3RyYXRlZ3kgYW5kIHdlIGFyZSBpbiBjYWxsIHdlIG11c3QKLSAgICAvLyBtdXRlIHRoZSBzdHJlYW0gaWYgaXQgaXMgbG93IHZpc2liaWxpdHkuIElmIGl0IGlzIGhpZ2ggdmlzaWJpbGl0eSwgd2UgbXVzdCBwbGF5IGEgdG9uZQotICAgIC8vIGluIHRoZSBkZXZpY2UgdXNlZCBmb3IgcGhvbmUgc3RyYXRlZ3kgYW5kIHBsYXkgdGhlIHRvbmUgaWYgdGhlIHNlbGVjdGVkIGRldmljZSBkb2VzIG5vdAotICAgIC8vIGludGVyZmVyZSB3aXRoIHRoZSBkZXZpY2UgdXNlZCBmb3IgcGhvbmUgc3RyYXRlZ3kKLSAgICAvLyBpZiBzdGF0ZUNoYW5nZSBpcyB0cnVlLCB3ZSBhcmUgY2FsbGVkIGZyb20gc2V0UGhvbmVTdGF0ZSgpIGFuZCB3ZSBtdXN0IG11dGUgb3IgdW5tdXRlIGFzCi0gICAgLy8gbWFueSB0aW1lcyBhcyB0aGVyZSBhcmUgYWN0aXZlIHRyYWNrcyBvbiB0aGUgb3V0cHV0Ci0gICAgY29uc3Qgcm91dGluZ19zdHJhdGVneSBzdHJlYW1fc3RyYXRlZ3kgPSBnZXRTdHJhdGVneShzdHJlYW0pOwotICAgIGlmICgoc3RyZWFtX3N0cmF0ZWd5ID09IFNUUkFURUdZX1NPTklGSUNBVElPTikgfHwKLSAgICAgICAgICAgICgoc3RyZWFtX3N0cmF0ZWd5ID09IFNUUkFURUdZX1NPTklGSUNBVElPTl9SRVNQRUNURlVMKSkpIHsKLSAgICAgICAgc3A8U3dBdWRpb091dHB1dERlc2NyaXB0b3I+IG91dHB1dERlc2MgPSBtUHJpbWFyeU91dHB1dDsKLSAgICAgICAgQUxPR1YoImhhbmRsZUluY2FsbFNvbmlmaWNhdGlvbigpIHN0cmVhbSAlZCBzdGFydGluZyAlZCBkZXZpY2UgJXggc3RhdGVDaGFuZ2UgJWQiLAotICAgICAgICAgICAgICAgIHN0cmVhbSwgc3RhcnRpbmcsIG91dHB1dERlc2MtPm1EZXZpY2UsIHN0YXRlQ2hhbmdlKTsKLSAgICAgICAgaWYgKG91dHB1dERlc2MtPm1SZWZDb3VudFtzdHJlYW1dKSB7Ci0gICAgICAgICAgICBpbnQgbXV0ZUNvdW50ID0gMTsKLSAgICAgICAgICAgIGlmIChzdGF0ZUNoYW5nZSkgewotICAgICAgICAgICAgICAgIG11dGVDb3VudCA9IG91dHB1dERlc2MtPm1SZWZDb3VudFtzdHJlYW1dOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYgKGF1ZGlvX2lzX2xvd192aXNpYmlsaXR5KHN0cmVhbSkpIHsKLSAgICAgICAgICAgICAgICBBTE9HVigiaGFuZGxlSW5jYWxsU29uaWZpY2F0aW9uKCkgbG93IHZpc2liaWxpdHksIG11dGVDb3VudCAlZCIsIG11dGVDb3VudCk7Ci0gICAgICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBtdXRlQ291bnQ7IGkrKykgewotICAgICAgICAgICAgICAgICAgICBzZXRTdHJlYW1NdXRlKHN0cmVhbSwgc3RhcnRpbmcsIG1QcmltYXJ5T3V0cHV0KTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIEFMT0dWKCJoYW5kbGVJbmNhbGxTb25pZmljYXRpb24oKSBoaWdoIHZpc2liaWxpdHkiKTsKLSAgICAgICAgICAgICAgICBpZiAob3V0cHV0RGVzYy0+ZGV2aWNlKCkgJgotICAgICAgICAgICAgICAgICAgICAgICAgZ2V0RGV2aWNlRm9yU3RyYXRlZ3koU1RSQVRFR1lfUEhPTkUsIHRydWUgLypmcm9tQ2FjaGUqLykpIHsKLSAgICAgICAgICAgICAgICAgICAgQUxPR1YoImhhbmRsZUluY2FsbFNvbmlmaWNhdGlvbigpIGhpZ2ggdmlzaWJpbGl0eSBtdXRlZCwgbXV0ZUNvdW50ICVkIiwgbXV0ZUNvdW50KTsKLSAgICAgICAgICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBtdXRlQ291bnQ7IGkrKykgewotICAgICAgICAgICAgICAgICAgICAgICAgc2V0U3RyZWFtTXV0ZShzdHJlYW0sIHN0YXJ0aW5nLCBtUHJpbWFyeU91dHB1dCk7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgaWYgKHN0YXJ0aW5nKSB7Ci0gICAgICAgICAgICAgICAgICAgIG1wQ2xpZW50SW50ZXJmYWNlLT5zdGFydFRvbmUoQVVESU9fUE9MSUNZX1RPTkVfSU5fQ0FMTF9OT1RJRklDQVRJT04sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQVVESU9fU1RSRUFNX1ZPSUNFX0NBTEwpOwotICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgIG1wQ2xpZW50SW50ZXJmYWNlLT5zdG9wVG9uZSgpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLX0KLQogYXVkaW9fc3RyZWFtX3R5cGVfdCBBdWRpb1BvbGljeU1hbmFnZXI6OnN0cmVhbVR5cGVmcm9tQXR0cmlidXRlc0ludChjb25zdCBhdWRpb19hdHRyaWJ1dGVzX3QgKmF0dHIpCiB7CiAgICAgLy8gZmxhZ3MgdG8gc3RyZWFtIHR5cGUgbWFwcGluZwpAQCAtNTgyNSwzOSArNTY4MCw3IEBACiAgICAgICAgIHJldHVybiBBVURJT19TVFJFQU1fVFRTOwogICAgIH0KIAotICAgIC8vIHVzYWdlIHRvIHN0cmVhbSB0eXBlIG1hcHBpbmcKLSAgICBzd2l0Y2ggKGF0dHItPnVzYWdlKSB7Ci0gICAgY2FzZSBBVURJT19VU0FHRV9NRURJQToKLSAgICBjYXNlIEFVRElPX1VTQUdFX0dBTUU6Ci0gICAgY2FzZSBBVURJT19VU0FHRV9BU1NJU1RBTlQ6Ci0gICAgY2FzZSBBVURJT19VU0FHRV9BU1NJU1RBTkNFX05BVklHQVRJT05fR1VJREFOQ0U6Ci0gICAgICAgIHJldHVybiBBVURJT19TVFJFQU1fTVVTSUM7Ci0gICAgY2FzZSBBVURJT19VU0FHRV9BU1NJU1RBTkNFX0FDQ0VTU0lCSUxJVFk6Ci0gICAgICAgIHJldHVybiBBVURJT19TVFJFQU1fQUNDRVNTSUJJTElUWTsKLSAgICBjYXNlIEFVRElPX1VTQUdFX0FTU0lTVEFOQ0VfU09OSUZJQ0FUSU9OOgotICAgICAgICByZXR1cm4gQVVESU9fU1RSRUFNX1NZU1RFTTsKLSAgICBjYXNlIEFVRElPX1VTQUdFX1ZPSUNFX0NPTU1VTklDQVRJT046Ci0gICAgICAgIHJldHVybiBBVURJT19TVFJFQU1fVk9JQ0VfQ0FMTDsKLQotICAgIGNhc2UgQVVESU9fVVNBR0VfVk9JQ0VfQ09NTVVOSUNBVElPTl9TSUdOQUxMSU5HOgotICAgICAgICByZXR1cm4gQVVESU9fU1RSRUFNX0RUTUY7Ci0KLSAgICBjYXNlIEFVRElPX1VTQUdFX0FMQVJNOgotICAgICAgICByZXR1cm4gQVVESU9fU1RSRUFNX0FMQVJNOwotICAgIGNhc2UgQVVESU9fVVNBR0VfTk9USUZJQ0FUSU9OX1RFTEVQSE9OWV9SSU5HVE9ORToKLSAgICAgICAgcmV0dXJuIEFVRElPX1NUUkVBTV9SSU5HOwotCi0gICAgY2FzZSBBVURJT19VU0FHRV9OT1RJRklDQVRJT046Ci0gICAgY2FzZSBBVURJT19VU0FHRV9OT1RJRklDQVRJT05fQ09NTVVOSUNBVElPTl9SRVFVRVNUOgotICAgIGNhc2UgQVVESU9fVVNBR0VfTk9USUZJQ0FUSU9OX0NPTU1VTklDQVRJT05fSU5TVEFOVDoKLSAgICBjYXNlIEFVRElPX1VTQUdFX05PVElGSUNBVElPTl9DT01NVU5JQ0FUSU9OX0RFTEFZRUQ6Ci0gICAgY2FzZSBBVURJT19VU0FHRV9OT1RJRklDQVRJT05fRVZFTlQ6Ci0gICAgICAgIHJldHVybiBBVURJT19TVFJFQU1fTk9USUZJQ0FUSU9OOwotCi0gICAgY2FzZSBBVURJT19VU0FHRV9VTktOT1dOOgotICAgIGRlZmF1bHQ6Ci0gICAgICAgIHJldHVybiBBVURJT19TVFJFQU1fTVVTSUM7Ci0gICAgfQorICAgIHJldHVybiBhdWRpb191c2FnZV90b19zdHJlYW1fdHlwZShhdHRyLT51c2FnZSk7CiB9CiAKIGJvb2wgQXVkaW9Qb2xpY3lNYW5hZ2VyOjppc1ZhbGlkQXR0cmlidXRlcyhjb25zdCBhdWRpb19hdHRyaWJ1dGVzX3QgKnBhYSkKQEAgLTU5MDIsNyArNTcyNSw3IEBACiAgICAgfQogICAgIGZvciAoaW50IGkgPSAwOyBpIDwgKGludClBVURJT19TVFJFQU1fRk9SX1BPTElDWV9DTlQ7IGkrKykgewogICAgICAgICBpZiAoKChnZXRTdHJhdGVneSgoYXVkaW9fc3RyZWFtX3R5cGVfdClpKSA9PSBzdHJhdGVneSkgfHwKLSAgICAgICAgICAgICAgICAoTlVNX1NUUkFURUdJRVMgPT0gc3RyYXRlZ3kpKSAmJgorICAgICAgICAgICAgICAgIChTVFJBVEVHWV9OT05FID09IHN0cmF0ZWd5KSkgJiYKICAgICAgICAgICAgICAgICBvdXRwdXREZXNjLT5pc1N0cmVhbUFjdGl2ZSgoYXVkaW9fc3RyZWFtX3R5cGVfdClpLCBpblBhc3RNcywgc3lzVGltZSkpIHsKICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICB9CkBAIC01OTQyLDEwICs1NzY1LDEwIEBACiB2b2lkIEF1ZGlvUG9saWN5TWFuYWdlcjo6Y2xlYW5VcEZvckRldmljZShjb25zdCBzcDxEZXZpY2VEZXNjcmlwdG9yPiYgZGV2aWNlRGVzYykKIHsKICAgICBmb3IgKHNzaXplX3QgaSA9IChzc2l6ZV90KW1BdWRpb1NvdXJjZXMuc2l6ZSgpIC0gMTsgaSA+PSAwOyBpLS0pICB7Ci0gICAgICAgIHNwPEF1ZGlvU291cmNlRGVzY3JpcHRvcj4gc291cmNlRGVzYyA9IG1BdWRpb1NvdXJjZXMudmFsdWVBdChpKTsKLSAgICAgICAgaWYgKHNvdXJjZURlc2MtPm1EZXZpY2UtPmVxdWFscyhkZXZpY2VEZXNjKSkgewotICAgICAgICAgICAgQUxPR1YoIiVzIHJlbGVhc2luZyBhdWRpbyBzb3VyY2UgJWQiLCBfX0ZVTkNUSU9OX18sIHNvdXJjZURlc2MtPmdldEhhbmRsZSgpKTsKLSAgICAgICAgICAgIHN0b3BBdWRpb1NvdXJjZShzb3VyY2VEZXNjLT5nZXRIYW5kbGUoKSk7CisgICAgICAgIHNwPFNvdXJjZUNsaWVudERlc2NyaXB0b3I+IHNvdXJjZURlc2MgPSBtQXVkaW9Tb3VyY2VzLnZhbHVlQXQoaSk7CisgICAgICAgIGlmIChzb3VyY2VEZXNjLT5zcmNEZXZpY2UoKS0+ZXF1YWxzKGRldmljZURlc2MpKSB7CisgICAgICAgICAgICBBTE9HVigiJXMgcmVsZWFzaW5nIGF1ZGlvIHNvdXJjZSAlZCIsIF9fRlVOQ1RJT05fXywgc291cmNlRGVzYy0+cG9ydElkKCkpOworICAgICAgICAgICAgc3RvcEF1ZGlvU291cmNlKHNvdXJjZURlc2MtPnBvcnRJZCgpKTsKICAgICAgICAgfQogICAgIH0KIApAQCAtNjE4OCw0ICs2MDExLDU4IEBACiAgICAgfQogfQogCitzdGF0dXNfdCBBdWRpb1BvbGljeU1hbmFnZXI6Omluc3RhbGxQYXRjaChjb25zdCBjaGFyICpjYWxsZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdWRpb19wYXRjaF9oYW5kbGVfdCAqcGF0Y2hIYW5kbGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBdWRpb0lPRGVzY3JpcHRvckludGVyZmFjZSAqaW9EZXNjcmlwdG9yLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RydWN0IGF1ZGlvX3BhdGNoICpwYXRjaCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBkZWxheU1zKQoreworICAgIHNzaXplX3QgaW5kZXggPSBtQXVkaW9QYXRjaGVzLmluZGV4T2ZLZXkoCisgICAgICAgICAgICBwYXRjaEhhbmRsZSAmJiAqcGF0Y2hIYW5kbGUgIT0gQVVESU9fUEFUQ0hfSEFORExFX05PTkUgPworICAgICAgICAgICAgKnBhdGNoSGFuZGxlIDogaW9EZXNjcmlwdG9yLT5nZXRQYXRjaEhhbmRsZSgpKTsKKyAgICBzcDxBdWRpb1BhdGNoPiBwYXRjaERlc2M7CisgICAgc3RhdHVzX3Qgc3RhdHVzID0gaW5zdGFsbFBhdGNoKAorICAgICAgICAgICAgY2FsbGVyLCBpbmRleCwgcGF0Y2hIYW5kbGUsIHBhdGNoLCBkZWxheU1zLCBtVWlkQ2FjaGVkLCAmcGF0Y2hEZXNjKTsKKyAgICBpZiAoc3RhdHVzID09IE5PX0VSUk9SKSB7CisgICAgICAgIGlvRGVzY3JpcHRvci0+c2V0UGF0Y2hIYW5kbGUocGF0Y2hEZXNjLT5tSGFuZGxlKTsKKyAgICB9CisgICAgcmV0dXJuIHN0YXR1czsKK30KKworc3RhdHVzX3QgQXVkaW9Qb2xpY3lNYW5hZ2VyOjppbnN0YWxsUGF0Y2goY29uc3QgY2hhciAqY2FsbGVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3NpemVfdCBpbmRleCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF1ZGlvX3BhdGNoX2hhbmRsZV90ICpwYXRjaEhhbmRsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0cnVjdCBhdWRpb19wYXRjaCAqcGF0Y2gsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgZGVsYXlNcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpZF90IHVpZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNwPEF1ZGlvUGF0Y2g+ICpwYXRjaERlc2NQdHIpCit7CisgICAgc3A8QXVkaW9QYXRjaD4gcGF0Y2hEZXNjOworICAgIGF1ZGlvX3BhdGNoX2hhbmRsZV90IGFmUGF0Y2hIYW5kbGUgPSBBVURJT19QQVRDSF9IQU5ETEVfTk9ORTsKKyAgICBpZiAoaW5kZXggPj0gMCkgeworICAgICAgICBwYXRjaERlc2MgPSBtQXVkaW9QYXRjaGVzLnZhbHVlQXQoaW5kZXgpOworICAgICAgICBhZlBhdGNoSGFuZGxlID0gcGF0Y2hEZXNjLT5tQWZQYXRjaEhhbmRsZTsKKyAgICB9CisKKyAgICBzdGF0dXNfdCBzdGF0dXMgPSBtcENsaWVudEludGVyZmFjZS0+Y3JlYXRlQXVkaW9QYXRjaChwYXRjaCwgJmFmUGF0Y2hIYW5kbGUsIGRlbGF5TXMpOworICAgIEFMT0dWKCIlcygpIEFGOjpjcmVhdGVBdWRpb1BhdGNoIHJldHVybmVkICVkIHBhdGNoSGFuZGxlICVkIG51bV9zb3VyY2VzICVkIG51bV9zaW5rcyAlZCIsCisgICAgICAgICAgICBjYWxsZXIsIHN0YXR1cywgYWZQYXRjaEhhbmRsZSwgcGF0Y2gtPm51bV9zb3VyY2VzLCBwYXRjaC0+bnVtX3NpbmtzKTsKKyAgICBpZiAoc3RhdHVzID09IE5PX0VSUk9SKSB7CisgICAgICAgIGlmIChpbmRleCA8IDApIHsKKyAgICAgICAgICAgIHBhdGNoRGVzYyA9IG5ldyBBdWRpb1BhdGNoKHBhdGNoLCB1aWQpOworICAgICAgICAgICAgYWRkQXVkaW9QYXRjaChwYXRjaERlc2MtPm1IYW5kbGUsIHBhdGNoRGVzYyk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBwYXRjaERlc2MtPm1QYXRjaCA9ICpwYXRjaDsKKyAgICAgICAgfQorICAgICAgICBwYXRjaERlc2MtPm1BZlBhdGNoSGFuZGxlID0gYWZQYXRjaEhhbmRsZTsKKyAgICAgICAgaWYgKHBhdGNoSGFuZGxlKSB7CisgICAgICAgICAgICAqcGF0Y2hIYW5kbGUgPSBwYXRjaERlc2MtPm1IYW5kbGU7CisgICAgICAgIH0KKyAgICAgICAgbmV4dEF1ZGlvUG9ydEdlbmVyYXRpb24oKTsKKyAgICAgICAgbXBDbGllbnRJbnRlcmZhY2UtPm9uQXVkaW9QYXRjaExpc3RVcGRhdGUoKTsKKyAgICB9CisgICAgaWYgKHBhdGNoRGVzY1B0cikgKnBhdGNoRGVzY1B0ciA9IHBhdGNoRGVzYzsKKyAgICByZXR1cm4gc3RhdHVzOworfQorCiB9IC8vIG5hbWVzcGFjZSBhbmRyb2lkCmRpZmYgLS1naXQgYS9zZXJ2aWNlcy9hdWRpb3BvbGljeS9tYW5hZ2VyZGVmYXVsdC9BdWRpb1BvbGljeU1hbmFnZXIuaCBiL3NlcnZpY2VzL2F1ZGlvcG9saWN5L21hbmFnZXJkZWZhdWx0L0F1ZGlvUG9saWN5TWFuYWdlci5oCmluZGV4IDQ4ZTA0NzIuLjA0MzZiMWQgMTAwNjQ0Ci0tLSBhL3NlcnZpY2VzL2F1ZGlvcG9saWN5L21hbmFnZXJkZWZhdWx0L0F1ZGlvUG9saWN5TWFuYWdlci5oCisrKyBiL3NlcnZpY2VzL2F1ZGlvcG9saWN5L21hbmFnZXJkZWZhdWx0L0F1ZGlvUG9saWN5TWFuYWdlci5oCkBAIC0xNyw2ICsxNyw3IEBACiAjcHJhZ21hIG9uY2UKIAogI2luY2x1ZGUgPGF0b21pYz4KKyNpbmNsdWRlIDxmdW5jdGlvbmFsPgogI2luY2x1ZGUgPG1lbW9yeT4KICNpbmNsdWRlIDx1bm9yZGVyZWRfc2V0PgogCkBAIC0zMCw2ICszMSw3IEBACiAjaW5jbHVkZSA8dXRpbHMvU29ydGVkVmVjdG9yLmg+CiAjaW5jbHVkZSA8bWVkaWEvQXVkaW9QYXJhbWV0ZXIuaD4KICNpbmNsdWRlIDxtZWRpYS9BdWRpb1BvbGljeS5oPgorI2luY2x1ZGUgPG1lZGlhL1BhdGNoQnVpbGRlci5oPgogI2luY2x1ZGUgIkF1ZGlvUG9saWN5SW50ZXJmYWNlLmgiCiAKICNpbmNsdWRlIDxBdWRpb1BvbGljeU1hbmFnZXJJbnRlcmZhY2UuaD4KQEAgLTM4LDYgKzQwLDcgQEAKICNpbmNsdWRlIDxBdWRpb1BvbGljeUNvbmZpZy5oPgogI2luY2x1ZGUgPEF1ZGlvUG9ydC5oPgogI2luY2x1ZGUgPEF1ZGlvUGF0Y2guaD4KKyNpbmNsdWRlIDxBdWRpb1Byb2ZpbGUuaD4KICNpbmNsdWRlIDxEZXZpY2VEZXNjcmlwdG9yLmg+CiAjaW5jbHVkZSA8SU9Qcm9maWxlLmg+CiAjaW5jbHVkZSA8SHdNb2R1bGUuaD4KQEAgLTQ2LDcgKzQ5LDYgQEAKICNpbmNsdWRlIDxBdWRpb1BvbGljeU1peC5oPgogI2luY2x1ZGUgPEVmZmVjdERlc2NyaXB0b3IuaD4KICNpbmNsdWRlIDxTb3VuZFRyaWdnZXJTZXNzaW9uLmg+Ci0jaW5jbHVkZSA8U2Vzc2lvblJvdXRlLmg+CiAjaW5jbHVkZSA8Vm9sdW1lQ3VydmUuaD4KIAogbmFtZXNwYWNlIGFuZHJvaWQgewpAQCAtMTE4LDE1ICsxMjAsOSBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXVkaW9fb3V0cHV0X2ZsYWdzX3QgKmZsYWdzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXVkaW9fcG9ydF9oYW5kbGVfdCAqc2VsZWN0ZWREZXZpY2VJZCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF1ZGlvX3BvcnRfaGFuZGxlX3QgKnBvcnRJZCk7Ci0gICAgICAgIHZpcnR1YWwgc3RhdHVzX3Qgc3RhcnRPdXRwdXQoYXVkaW9faW9faGFuZGxlX3Qgb3V0cHV0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF1ZGlvX3N0cmVhbV90eXBlX3Qgc3RyZWFtLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF1ZGlvX3Nlc3Npb25fdCBzZXNzaW9uKTsKLSAgICAgICAgdmlydHVhbCBzdGF0dXNfdCBzdG9wT3V0cHV0KGF1ZGlvX2lvX2hhbmRsZV90IG91dHB1dCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF1ZGlvX3N0cmVhbV90eXBlX3Qgc3RyZWFtLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXVkaW9fc2Vzc2lvbl90IHNlc3Npb24pOwotICAgICAgICB2aXJ0dWFsIHZvaWQgcmVsZWFzZU91dHB1dChhdWRpb19pb19oYW5kbGVfdCBvdXRwdXQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF1ZGlvX3N0cmVhbV90eXBlX3Qgc3RyZWFtLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdWRpb19zZXNzaW9uX3Qgc2Vzc2lvbik7CisgICAgICAgIHZpcnR1YWwgc3RhdHVzX3Qgc3RhcnRPdXRwdXQoYXVkaW9fcG9ydF9oYW5kbGVfdCBwb3J0SWQpOworICAgICAgICB2aXJ0dWFsIHN0YXR1c190IHN0b3BPdXRwdXQoYXVkaW9fcG9ydF9oYW5kbGVfdCBwb3J0SWQpOworICAgICAgICB2aXJ0dWFsIHZvaWQgcmVsZWFzZU91dHB1dChhdWRpb19wb3J0X2hhbmRsZV90IHBvcnRJZCk7CiAgICAgICAgIHZpcnR1YWwgc3RhdHVzX3QgZ2V0SW5wdXRGb3JBdHRyKGNvbnN0IGF1ZGlvX2F0dHJpYnV0ZXNfdCAqYXR0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXVkaW9faW9faGFuZGxlX3QgKmlucHV0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdWRpb19zZXNzaW9uX3Qgc2Vzc2lvbiwKQEAgLTEzOCwxNiArMTM0LDEzIEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF1ZGlvX3BvcnRfaGFuZGxlX3QgKnBvcnRJZCk7CiAKICAgICAgICAgLy8gaW5kaWNhdGVzIHRvIHRoZSBhdWRpbyBwb2xpY3kgbWFuYWdlciB0aGF0IHRoZSBpbnB1dCBzdGFydHMgYmVpbmcgdXNlZC4KLSAgICAgICAgdmlydHVhbCBzdGF0dXNfdCBzdGFydElucHV0KGF1ZGlvX2lvX2hhbmRsZV90IGlucHV0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXVkaW9fc2Vzc2lvbl90IHNlc3Npb24sCisgICAgICAgIHZpcnR1YWwgc3RhdHVzX3Qgc3RhcnRJbnB1dChhdWRpb19wb3J0X2hhbmRsZV90IHBvcnRJZCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgc2lsZW5jZWQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25jdXJyZW5jeV90eXBlX19tYXNrX3QgKmNvbmN1cnJlbmN5KTsKIAogICAgICAgICAvLyBpbmRpY2F0ZXMgdG8gdGhlIGF1ZGlvIHBvbGljeSBtYW5hZ2VyIHRoYXQgdGhlIGlucHV0IHN0b3BzIGJlaW5nIHVzZWQuCi0gICAgICAgIHZpcnR1YWwgc3RhdHVzX3Qgc3RvcElucHV0KGF1ZGlvX2lvX2hhbmRsZV90IGlucHV0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdWRpb19zZXNzaW9uX3Qgc2Vzc2lvbik7Ci0gICAgICAgIHZpcnR1YWwgdm9pZCByZWxlYXNlSW5wdXQoYXVkaW9faW9faGFuZGxlX3QgaW5wdXQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXVkaW9fc2Vzc2lvbl90IHNlc3Npb24pOworICAgICAgICB2aXJ0dWFsIHN0YXR1c190IHN0b3BJbnB1dChhdWRpb19wb3J0X2hhbmRsZV90IHBvcnRJZCk7CisgICAgICAgIHZpcnR1YWwgdm9pZCByZWxlYXNlSW5wdXQoYXVkaW9fcG9ydF9oYW5kbGVfdCBwb3J0SWQpOwogICAgICAgICB2aXJ0dWFsIHZvaWQgY2xvc2VBbGxJbnB1dHMoKTsKICAgICAgICAgdmlydHVhbCB2b2lkIGluaXRTdHJlYW1Wb2x1bWUoYXVkaW9fc3RyZWFtX3R5cGVfdCBzdHJlYW0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGluZGV4TWluLApAQCAtMTYyLDcgKzE1NSw3IEBACiAgICAgICAgIC8vIHJldHVybiB0aGUgc3RyYXRlZ3kgY29ycmVzcG9uZGluZyB0byBhIGdpdmVuIHN0cmVhbSB0eXBlCiAgICAgICAgIHZpcnR1YWwgdWludDMyX3QgZ2V0U3RyYXRlZ3lGb3JTdHJlYW0oYXVkaW9fc3RyZWFtX3R5cGVfdCBzdHJlYW0pOwogICAgICAgICAvLyByZXR1cm4gdGhlIHN0cmF0ZWd5IGNvcnJlc3BvbmRpbmcgdG8gdGhlIGdpdmVuIGF1ZGlvIGF0dHJpYnV0ZXMKLSAgICAgICAgdmlydHVhbCB1aW50MzJfdCBnZXRTdHJhdGVneUZvckF0dHIoY29uc3QgYXVkaW9fYXR0cmlidXRlc190ICphdHRyKTsKKyAgICAgICAgdmlydHVhbCByb3V0aW5nX3N0cmF0ZWd5IGdldFN0cmF0ZWd5Rm9yQXR0cihjb25zdCBhdWRpb19hdHRyaWJ1dGVzX3QgKmF0dHIpOwogCiAgICAgICAgIC8vIHJldHVybiB0aGUgZW5hYmxlZCBvdXRwdXQgZGV2aWNlcyBmb3IgdGhlIGdpdmVuIHN0cmVhbSB0eXBlCiAgICAgICAgIHZpcnR1YWwgYXVkaW9fZGV2aWNlc190IGdldERldmljZXNGb3JTdHJlYW0oYXVkaW9fc3RyZWFtX3R5cGVfdCBzdHJlYW0pOwpAQCAtMTkzLDcgKzE4Niw5IEBACiAKICAgICAgICAgdmlydHVhbCBib29sIGlzU291cmNlQWN0aXZlKGF1ZGlvX3NvdXJjZV90IHNvdXJjZSkgY29uc3Q7CiAKLSAgICAgICAgdmlydHVhbCBzdGF0dXNfdCBkdW1wKGludCBmZCk7CisgICAgICAgIHZvaWQgZHVtcChTdHJpbmc4ICpkc3QpIGNvbnN0OyAvLyBoZWxwZXIgZm9yIGR1bXAoaW50IGZkKQorCisgICAgICAgIHN0YXR1c190IGR1bXAoaW50IGZkKSBvdmVycmlkZTsKIAogICAgICAgICB2aXJ0dWFsIGJvb2wgaXNPZmZsb2FkU3VwcG9ydGVkKGNvbnN0IGF1ZGlvX29mZmxvYWRfaW5mb190JiBvZmZsb2FkSW5mbyk7CiAKQEAgLTIyOSw5ICsyMjQsOSBAQAogCiAgICAgICAgIHZpcnR1YWwgc3RhdHVzX3Qgc3RhcnRBdWRpb1NvdXJjZShjb25zdCBzdHJ1Y3QgYXVkaW9fcG9ydF9jb25maWcgKnNvdXJjZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGF1ZGlvX2F0dHJpYnV0ZXNfdCAqYXR0cmlidXRlcywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF1ZGlvX3BhdGNoX2hhbmRsZV90ICpoYW5kbGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdWRpb19wb3J0X2hhbmRsZV90ICpwb3J0SWQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aWRfdCB1aWQpOwotICAgICAgICB2aXJ0dWFsIHN0YXR1c190IHN0b3BBdWRpb1NvdXJjZShhdWRpb19wYXRjaF9oYW5kbGVfdCBoYW5kbGUpOworICAgICAgICB2aXJ0dWFsIHN0YXR1c190IHN0b3BBdWRpb1NvdXJjZShhdWRpb19wb3J0X2hhbmRsZV90IHBvcnRJZCk7CiAKICAgICAgICAgdmlydHVhbCBzdGF0dXNfdCBzZXRNYXN0ZXJNb25vKGJvb2wgbW9ubyk7CiAgICAgICAgIHZpcnR1YWwgc3RhdHVzX3QgZ2V0TWFzdGVyTW9ubyhib29sICptb25vKTsKQEAgLTI0Nyw3ICsyNDIsNyBAQAogICAgICAgICAvLyByZXR1cm4gdGhlIHN0cmF0ZWd5IGNvcnJlc3BvbmRpbmcgdG8gYSBnaXZlbiBzdHJlYW0gdHlwZQogICAgICAgICByb3V0aW5nX3N0cmF0ZWd5IGdldFN0cmF0ZWd5KGF1ZGlvX3N0cmVhbV90eXBlX3Qgc3RyZWFtKSBjb25zdDsKIAotICAgICAgICB2aXJ0dWFsIHZvaWQgc2V0UmVjb3JkU2lsZW5jZWQodWlkX3QgdWlkLCBib29sIHNpbGVuY2VkKTsKKyAgICAgICAgdmlydHVhbCB2b2lkIHNldEFwcFN0YXRlKHVpZF90IHVpZCwgYXBwX3N0YXRlX3Qgc3RhdGUpOwogCiBwcm90ZWN0ZWQ6CiAgICAgICAgIC8vIEEgY29uc3RydWN0b3IgdGhhdCBhbGxvd3MgbW9yZSBmaW5lLWdyYWluZWQgY29udHJvbCBvdmVyIGluaXRpYWxpemF0aW9uIHByb2Nlc3MsCkBAIC0zNTMsNiArMzQ4LDEwIEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgaW5kZXgsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdWRpb19kZXZpY2VzX3QgZGV2aWNlKTsKIAorICAgICAgICAvLyByZXNjYWxlIHZvbHVtZSBpbmRleCBmcm9tIHNyY1N0cmVhbSB3aXRoaW4gcmFuZ2Ugb2YgZHN0U3RyZWFtCisgICAgICAgIGludCByZXNjYWxlVm9sdW1lSW5kZXgoaW50IHNyY0luZGV4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF1ZGlvX3N0cmVhbV90eXBlX3Qgc3JjU3RyZWFtLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF1ZGlvX3N0cmVhbV90eXBlX3QgZHN0U3RyZWFtKTsKICAgICAgICAgLy8gY2hlY2sgdGhhdCB2b2x1bWUgY2hhbmdlIGlzIHBlcm1pdHRlZCwgY29tcHV0ZSBhbmQgc2VuZCBuZXcgdm9sdW1lIHRvIGF1ZGlvIGhhcmR3YXJlCiAgICAgICAgIHZpcnR1YWwgc3RhdHVzX3QgY2hlY2tBbmRTZXRWb2x1bWUoYXVkaW9fc3RyZWFtX3R5cGVfdCBzdHJlYW0sIGludCBpbmRleCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzcDxBdWRpb091dHB1dERlc2NyaXB0b3I+JiBvdXRwdXREZXNjLApAQCAtMzY4LDcgKzM2Nyw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgb24sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHNwPEF1ZGlvT3V0cHV0RGVzY3JpcHRvcj4mIG91dHB1dERlc2MsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBkZWxheU1zID0gMCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXVkaW9fZGV2aWNlc190IGRldmljZSA9IChhdWRpb19kZXZpY2VzX3QpMCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF1ZGlvX2RldmljZXNfdCBkZXZpY2UgPSBBVURJT19ERVZJQ0VfTk9ORSk7CiAKICAgICAgICAgLy8gTXV0ZSBvciB1bm11dGUgdGhlIHN0cmVhbSBvbiB0aGUgc3BlY2lmaWVkIG91dHB1dAogICAgICAgICB2b2lkIHNldFN0cmVhbU11dGUoYXVkaW9fc3RyZWFtX3R5cGVfdCBzdHJlYW0sCkBAIC0zNzcsMTAgKzM3Niw2IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgZGVsYXlNcyA9IDAsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdWRpb19kZXZpY2VzX3QgZGV2aWNlID0gKGF1ZGlvX2RldmljZXNfdCkwKTsKIAotICAgICAgICAvLyBoYW5kbGUgc3BlY2lhbCBjYXNlcyBmb3Igc29uaWZpY2F0aW9uIHN0cmF0ZWd5IHdoaWxlIGluIGNhbGw6IG11dGUgc3RyZWFtcyBvciByZXBsYWNlIGJ5Ci0gICAgICAgIC8vIGEgc3BlY2lhbCB0b25lIGluIHRoZSBkZXZpY2UgdXNlZCBmb3IgY29tbXVuaWNhdGlvbgotICAgICAgICB2b2lkIGhhbmRsZUluY2FsbFNvbmlmaWNhdGlvbihhdWRpb19zdHJlYW1fdHlwZV90IHN0cmVhbSwgYm9vbCBzdGFydGluZywgYm9vbCBzdGF0ZUNoYW5nZSk7Ci0KICAgICAgICAgYXVkaW9fbW9kZV90IGdldFBob25lU3RhdGUoKTsKIAogICAgICAgICAvLyB0cnVlIGlmIGRldmljZSBpcyBpbiBhIHRlbGVwaG9ueSBvciBWb0lQIGNhbGwKQEAgLTQxMCw2ICs0MDUsMTIgQEAKICAgICAgICAgLy8gY2xvc2UgYW4gaW5wdXQuCiAgICAgICAgIHZvaWQgY2xvc2VJbnB1dChhdWRpb19pb19oYW5kbGVfdCBpbnB1dCk7CiAKKyAgICAgICAgLy8gcnVucyBhbGwgdGhlIGNoZWNrcyByZXF1aXJlZCBmb3IgYWNjb21vZGF0aW5nIGNoYW5nZXMgaW4gZGV2aWNlcyBhbmQgb3V0cHV0cworICAgICAgICAvLyBpZiAnb25PdXRwdXRzQ2hlY2tlZCcgY2FsbGJhY2sgaXMgcHJvdmlkZWQsIGl0IGlzIGV4ZWN1dGVkIGFmdGVyIHRoZSBvdXRwdXRzCisgICAgICAgIC8vIGNoZWNrIHZpYSAnY2hlY2tPdXRwdXRGb3JBbGxTdHJhdGVnaWVzJy4gSWYgdGhlIGNhbGxiYWNrIHJldHVybnMgJ3RydWUnLAorICAgICAgICAvLyBBMkRQIHN1c3BlbmQgc3RhdHVzIGlzIHJlY2hlY2tlZC4KKyAgICAgICAgdm9pZCBjaGVja0ZvckRldmljZUFuZE91dHB1dENoYW5nZXMoc3RkOjpmdW5jdGlvbjxib29sKCk+IG9uT3V0cHV0c0NoZWNrZWQgPSBudWxscHRyKTsKKwogICAgICAgICAvLyBjaGVja3MgYW5kIGlmIG5lY2Vzc2FyeSBjaGFuZ2VzIG91dHB1dHMgdXNlZCBmb3IgYWxsIHN0cmF0ZWdpZXMuCiAgICAgICAgIC8vIG11c3QgYmUgY2FsbGVkIGV2ZXJ5IHRpbWUgYSBjb25kaXRpb24gdGhhdCBhZmZlY3RzIHRoZSBvdXRwdXQgY2hvaWNlIGZvciBhIGdpdmVuIHN0cmF0ZWd5CiAgICAgICAgIC8vIGNoYW5nZXM6IGNvbm5lY3RlZCBkZXZpY2UsIHBob25lIHN0YXRlLCBmb3JjZSB1c2UuLi4KQEAgLTQyMiw2ICs0MjMsMTQgQEAKICAgICAgICAgLy8gbWFuYWdlcyBBMkRQIG91dHB1dCBzdXNwZW5kL3Jlc3RvcmUgYWNjb3JkaW5nIHRvIHBob25lIHN0YXRlIGFuZCBCVCBTQ08gdXNhZ2UKICAgICAgICAgdm9pZCBjaGVja0EyZHBTdXNwZW5kKCk7CiAKKyAgICAgICAgdGVtcGxhdGUgPGNsYXNzIElvRGVzY3JpcHRvciwgY2xhc3MgRmlsdGVyPgorICAgICAgICBzcDxEZXZpY2VEZXNjcmlwdG9yPiBmaW5kUHJlZmVycmVkRGV2aWNlKElvRGVzY3JpcHRvciYgZGVzYywgRmlsdGVyIGZpbHRlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wmIGFjdGl2ZSwgY29uc3QgRGV2aWNlVmVjdG9yJiBkZXZpY2VzKTsKKworICAgICAgICB0ZW1wbGF0ZSA8Y2xhc3MgSW9Db2xsZWN0aW9uLCBjbGFzcyBGaWx0ZXI+CisgICAgICAgIHNwPERldmljZURlc2NyaXB0b3I+IGZpbmRQcmVmZXJyZWREZXZpY2UoSW9Db2xsZWN0aW9uJiBpb0NvbGxlY3Rpb24sIEZpbHRlciBmaWx0ZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBEZXZpY2VWZWN0b3ImIGRldmljZXMpOworCiAgICAgICAgIC8vIHNlbGVjdHMgdGhlIG1vc3QgYXBwcm9wcmlhdGUgZGV2aWNlIG9uIG91dHB1dCBmb3IgY3VycmVudCBzdGF0ZQogICAgICAgICAvLyBtdXN0IGJlIGNhbGxlZCBldmVyeSB0aW1lIGEgY29uZGl0aW9uIHRoYXQgYWZmZWN0cyB0aGUgZGV2aWNlIGNob2ljZSBmb3IgYSBnaXZlbiBvdXRwdXQgaXMKICAgICAgICAgLy8gY2hhbmdlZDogY29ubmVjdGVkIGRldmljZSwgcGhvbmUgc3RhdGUsIGZvcmNlIHVzZSwgb3V0cHV0IHN0YXJ0LCBvdXRwdXQgc3RvcC4uCkBAIC00NTEsOCArNDYwLDYgQEAKIAogICAgICAgICBTb3J0ZWRWZWN0b3I8YXVkaW9faW9faGFuZGxlX3Q+IGdldE91dHB1dHNGb3JEZXZpY2UoYXVkaW9fZGV2aWNlc190IGRldmljZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFN3QXVkaW9PdXRwdXRDb2xsZWN0aW9uJiBvcGVuT3V0cHV0cyk7Ci0gICAgICAgIGJvb2wgdmVjdG9yc0VxdWFsKFNvcnRlZFZlY3RvcjxhdWRpb19pb19oYW5kbGVfdD4mIG91dHB1dHMxLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNvcnRlZFZlY3RvcjxhdWRpb19pb19oYW5kbGVfdD4mIG91dHB1dHMyKTsKIAogICAgICAgICAvLyBtdXRlL3VubXV0ZSBzdHJhdGVnaWVzIHVzaW5nIGFuIGluY29tcGF0aWJsZSBkZXZpY2UgY29tYmluYXRpb24KICAgICAgICAgLy8gaWYgbXV0aW5nLCB3YWl0IGZvciB0aGUgYXVkaW8gaW4gcGNtIGJ1ZmZlciB0byBiZSBkcmFpbmVkIGJlZm9yZSBwcm9jZWVkaW5nCkBAIC01MDEsMjQgKzUwOCwyMCBAQAogICAgICAgICAgICAgaWYgKCFoYXNQcmltYXJ5T3V0cHV0KCkpIHsKICAgICAgICAgICAgICAgICByZXR1cm4gQVVESU9fREVWSUNFX05PTkU7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICByZXR1cm4gbUF2YWlsYWJsZUlucHV0RGV2aWNlcy5nZXREZXZpY2VzRnJvbUh3TW9kdWxlKG1QcmltYXJ5T3V0cHV0LT5nZXRNb2R1bGVIYW5kbGUoKSk7CisgICAgICAgICAgICByZXR1cm4gbUF2YWlsYWJsZUlucHV0RGV2aWNlcy5nZXREZXZpY2VUeXBlc0Zyb21Id01vZHVsZSgKKyAgICAgICAgICAgICAgICAgICAgbVByaW1hcnlPdXRwdXQtPmdldE1vZHVsZUhhbmRsZSgpKTsKICAgICAgICAgfQogCiAgICAgICAgIHVpbnQzMl90IHVwZGF0ZUNhbGxSb3V0aW5nKGF1ZGlvX2RldmljZXNfdCByeERldmljZSwgdWludDMyX3QgZGVsYXlNcyA9IDApOwogICAgICAgICBzcDxBdWRpb1BhdGNoPiBjcmVhdGVUZWxlcGhvbnlQYXRjaChib29sIGlzUngsIGF1ZGlvX2RldmljZXNfdCBkZXZpY2UsIHVpbnQzMl90IGRlbGF5TXMpOwotICAgICAgICBzcDxEZXZpY2VEZXNjcmlwdG9yPiBmaWxsQXVkaW9Qb3J0Q29uZmlnRm9yRGV2aWNlKAotICAgICAgICAgICAgICAgIGNvbnN0IERldmljZVZlY3RvciYgZGV2aWNlcywgYXVkaW9fZGV2aWNlc190IGRldmljZSwgYXVkaW9fcG9ydF9jb25maWcgKmNvbmZpZyk7CisgICAgICAgIHNwPERldmljZURlc2NyaXB0b3I+IGZpbmREZXZpY2UoCisgICAgICAgICAgICAgICAgY29uc3QgRGV2aWNlVmVjdG9yJiBkZXZpY2VzLCBhdWRpb19kZXZpY2VzX3QgZGV2aWNlKSBjb25zdDsKIAotICAgICAgICAvLyBpZiBhcmd1bWVudCAiZGV2aWNlIiBpcyBkaWZmZXJlbnQgZnJvbSBBVURJT19ERVZJQ0VfTk9ORSwgIHN0YXJ0U291cmNlKCkgd2lsbCBmb3JjZQotICAgICAgICAvLyB0aGUgcmUtZXZhbHVhdGlvbiBvZiB0aGUgb3V0cHV0IGRldmljZS4KLSAgICAgICAgc3RhdHVzX3Qgc3RhcnRTb3VyY2UoY29uc3Qgc3A8QXVkaW9PdXRwdXREZXNjcmlwdG9yPiYgb3V0cHV0RGVzYywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXVkaW9fc3RyZWFtX3R5cGVfdCBzdHJlYW0sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF1ZGlvX2RldmljZXNfdCBkZXZpY2UsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKmFkZHJlc3MsCisgICAgICAgIHN0YXR1c190IHN0YXJ0U291cmNlKGNvbnN0IHNwPFN3QXVkaW9PdXRwdXREZXNjcmlwdG9yPiYgb3V0cHV0RGVzYywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3A8VHJhY2tDbGllbnREZXNjcmlwdG9yPiYgY2xpZW50LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCAqZGVsYXlNcyk7Ci0gICAgICAgIHN0YXR1c190IHN0b3BTb3VyY2UoY29uc3Qgc3A8QXVkaW9PdXRwdXREZXNjcmlwdG9yPiYgb3V0cHV0RGVzYywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdWRpb19zdHJlYW1fdHlwZV90IHN0cmVhbSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIGZvcmNlRGV2aWNlVXBkYXRlKTsKKyAgICAgICAgc3RhdHVzX3Qgc3RvcFNvdXJjZShjb25zdCBzcDxTd0F1ZGlvT3V0cHV0RGVzY3JpcHRvcj4mIG91dHB1dERlc2MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3A8VHJhY2tDbGllbnREZXNjcmlwdG9yPiYgY2xpZW50KTsKIAogICAgICAgICB2b2lkIGNsZWFyQXVkaW9QYXRjaGVzKHVpZF90IHVpZCk7CiAgICAgICAgIHZvaWQgY2xlYXJTZXNzaW9uUm91dGVzKHVpZF90IHVpZCk7CkBAIC01MjYsMTAgKzUyOSwxMCBAQAogCiAgICAgICAgIHN0YXR1c190IGhhc1ByaW1hcnlPdXRwdXQoKSBjb25zdCB7IHJldHVybiBtUHJpbWFyeU91dHB1dCAhPSAwOyB9CiAKLSAgICAgICAgc3RhdHVzX3QgY29ubmVjdEF1ZGlvU291cmNlKGNvbnN0IHNwPEF1ZGlvU291cmNlRGVzY3JpcHRvcj4mIHNvdXJjZURlc2MpOwotICAgICAgICBzdGF0dXNfdCBkaXNjb25uZWN0QXVkaW9Tb3VyY2UoY29uc3Qgc3A8QXVkaW9Tb3VyY2VEZXNjcmlwdG9yPiYgc291cmNlRGVzYyk7CisgICAgICAgIHN0YXR1c190IGNvbm5lY3RBdWRpb1NvdXJjZShjb25zdCBzcDxTb3VyY2VDbGllbnREZXNjcmlwdG9yPiYgc291cmNlRGVzYyk7CisgICAgICAgIHN0YXR1c190IGRpc2Nvbm5lY3RBdWRpb1NvdXJjZShjb25zdCBzcDxTb3VyY2VDbGllbnREZXNjcmlwdG9yPiYgc291cmNlRGVzYyk7CiAKLSAgICAgICAgc3A8QXVkaW9Tb3VyY2VEZXNjcmlwdG9yPiBnZXRTb3VyY2VGb3JTdHJhdGVneU9uT3V0cHV0KGF1ZGlvX2lvX2hhbmRsZV90IG91dHB1dCwKKyAgICAgICAgc3A8U291cmNlQ2xpZW50RGVzY3JpcHRvcj4gZ2V0U291cmNlRm9yU3RyYXRlZ3lPbk91dHB1dChhdWRpb19pb19oYW5kbGVfdCBvdXRwdXQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByb3V0aW5nX3N0cmF0ZWd5IHN0cmF0ZWd5KTsKIAogICAgICAgICB2b2lkIGNsZWFuVXBGb3JEZXZpY2UoY29uc3Qgc3A8RGV2aWNlRGVzY3JpcHRvcj4mIGRldmljZURlc2MpOwpAQCAtNTM4LDEzICs1NDEsMTMgQEAKIAogICAgICAgICBzdGF0aWMgYm9vbCBpc0NvbmN1cnJlbnRTb3VyY2UoYXVkaW9fc291cmNlX3Qgc291cmNlKTsKIAotICAgICAgICBib29sIGlzQ29uY3VyZW50Q2FwdHVyZUFsbG93ZWQoY29uc3Qgc3A8QXVkaW9JbnB1dERlc2NyaXB0b3I+JiBpbnB1dERlc2MsCi0gICAgICAgICAgICAgICAgY29uc3Qgc3A8QXVkaW9TZXNzaW9uPiYgYXVkaW9TZXNzaW9uKTsKLQogICAgICAgICBzdGF0aWMgYm9vbCBzdHJlYW1zTWF0Y2hGb3J2b2x1bWUoYXVkaW9fc3RyZWFtX3R5cGVfdCBzdHJlYW0xLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXVkaW9fc3RyZWFtX3R5cGVfdCBzdHJlYW0yKTsKIAotICAgICAgICB1aWRfdCBtVWlkQ2FjaGVkOworICAgICAgICB2b2lkIGNsb3NlQWN0aXZlQ2xpZW50cyhjb25zdCBzcDxBdWRpb0lucHV0RGVzY3JpcHRvcj4mIGlucHV0KTsKKyAgICAgICAgdm9pZCBjbG9zZUNsaWVudChhdWRpb19wb3J0X2hhbmRsZV90IHBvcnRJZCk7CisKKyAgICAgICAgY29uc3QgdWlkX3QgbVVpZENhY2hlZDsgICAgICAgICAgICAgICAgICAgICAgICAgLy8gQUlEX0FVRElPU0VSVkVSCiAgICAgICAgIEF1ZGlvUG9saWN5Q2xpZW50SW50ZXJmYWNlICptcENsaWVudEludGVyZmFjZTsgIC8vIGF1ZGlvIHBvbGljeSBjbGllbnQgaW50ZXJmYWNlCiAgICAgICAgIHNwPFN3QXVkaW9PdXRwdXREZXNjcmlwdG9yPiBtUHJpbWFyeU91dHB1dDsgICAgIC8vIHByaW1hcnkgb3V0cHV0IGRlc2NyaXB0b3IKICAgICAgICAgLy8gbGlzdCBvZiBkZXNjcmlwdG9ycyBmb3Igb3V0cHV0cyBjdXJyZW50bHkgb3BlbmVkCkBAIC01NTgsOSArNTYxLDYgQEAKICAgICAgICAgRGV2aWNlVmVjdG9yICBtQXZhaWxhYmxlT3V0cHV0RGV2aWNlczsgLy8gYWxsIGF2YWlsYWJsZSBvdXRwdXQgZGV2aWNlcwogICAgICAgICBEZXZpY2VWZWN0b3IgIG1BdmFpbGFibGVJbnB1dERldmljZXM7ICAvLyBhbGwgYXZhaWxhYmxlIGlucHV0IGRldmljZXMKIAotICAgICAgICBTZXNzaW9uUm91dGVNYXAgbU91dHB1dFJvdXRlcyA9IFNlc3Npb25Sb3V0ZU1hcChTZXNzaW9uUm91dGVNYXA6Ok1BUFRZUEVfT1VUUFVUKTsKLSAgICAgICAgU2Vzc2lvblJvdXRlTWFwIG1JbnB1dFJvdXRlcyA9IFNlc3Npb25Sb3V0ZU1hcChTZXNzaW9uUm91dGVNYXA6Ok1BUFRZUEVfSU5QVVQpOwotCiAgICAgICAgIGJvb2wgICAgbUxpbWl0UmluZ3RvbmVWb2x1bWU7ICAgICAgICAvLyBsaW1pdCByaW5ndG9uZSB2b2x1bWUgdG8gbXVzaWMgdm9sdW1lIGlmIGhlYWRzZXQgY29ubmVjdGVkCiAgICAgICAgIGF1ZGlvX2RldmljZXNfdCBtRGV2aWNlRm9yU3RyYXRlZ3lbTlVNX1NUUkFURUdJRVNdOwogICAgICAgICBmbG9hdCAgIG1MYXN0Vm9pY2VWb2x1bWU7ICAgICAgICAgICAgLy8gbGFzdCB2b2ljZSB2b2x1bWUgdmFsdWUgc2VudCB0byBhdWRpbyBIQUwKQEAgLTU4NCw3ICs1ODQsNyBAQAogICAgICAgICBzcDxBdWRpb1BhdGNoPiBtQ2FsbFJ4UGF0Y2g7CiAKICAgICAgICAgSHdBdWRpb091dHB1dENvbGxlY3Rpb24gbUh3T3V0cHV0czsKLSAgICAgICAgQXVkaW9Tb3VyY2VDb2xsZWN0aW9uIG1BdWRpb1NvdXJjZXM7CisgICAgICAgIFNvdXJjZUNsaWVudENvbGxlY3Rpb24gbUF1ZGlvU291cmNlczsKIAogICAgICAgICAvLyBmb3Igc3VwcG9ydGluZyAiYmVhY29uIiBzdHJlYW1zLCBpLmUuIHN0cmVhbXMgdGhhdCBvbmx5IHBsYXkgb24gc3BlYWtlciwgYW5kIG5ldmVyCiAgICAgICAgIC8vIHdoZW4gc29tZXRoaW5nIG90aGVyIHRoYW4gU1RSRUFNX1RUUyAoYS5rLmEuICJUcmFuc21pdHRlZCBUaHJvdWdoIFNwZWFrZXIiKSBpcyBwbGF5aW5nCkBAIC02MTUsNyArNjE1LDE2IEBACiAgICAgICAgIHZvaWQgZmlsdGVyU3Vycm91bmRGb3JtYXRzKEZvcm1hdFZlY3RvciAqZm9ybWF0c1B0cik7CiAgICAgICAgIHZvaWQgZmlsdGVyU3Vycm91bmRDaGFubmVsTWFza3MoQ2hhbm5lbHNWZWN0b3IgKmNoYW5uZWxNYXNrc1B0cik7CiAKLSAgICAgICAgc3RhdHVzX3QgZ2V0U3VwcG9ydGVkRm9ybWF0cyhhdWRpb19pb19oYW5kbGVfdCBpb0hhbmRsZSwgRm9ybWF0VmVjdG9yJiBmb3JtYXRzKTsKKyAgICAgICAgLy8gU3VwcG9ydCBmb3IgTXVsdGktU3RyZWFtIERlY29kZXIgKE1TRCkgbW9kdWxlCisgICAgICAgIHNwPERldmljZURlc2NyaXB0b3I+IGdldE1zZEF1ZGlvSW5EZXZpY2UoKSBjb25zdDsKKyAgICAgICAgYXVkaW9fZGV2aWNlc190IGdldE1zZEF1ZGlvT3V0RGV2aWNlVHlwZXMoKSBjb25zdDsKKyAgICAgICAgY29uc3QgQXVkaW9QYXRjaENvbGxlY3Rpb24gZ2V0TXNkUGF0Y2hlcygpIGNvbnN0OworICAgICAgICBzdGF0dXNfdCBnZXRCZXN0TXNkQXVkaW9Qcm9maWxlRm9yKGF1ZGlvX2RldmljZXNfdCBvdXRwdXREZXZpY2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBod0F2U3luYywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdWRpb19wb3J0X2NvbmZpZyAqc291cmNlQ29uZmlnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF1ZGlvX3BvcnRfY29uZmlnICpzaW5rQ29uZmlnKSBjb25zdDsKKyAgICAgICAgUGF0Y2hCdWlsZGVyIGJ1aWxkTXNkUGF0Y2goYXVkaW9fZGV2aWNlc190IG91dHB1dERldmljZSkgY29uc3Q7CisgICAgICAgIHN0YXR1c190IHNldE1zZFBhdGNoKGF1ZGlvX2RldmljZXNfdCBvdXRwdXREZXZpY2UgPSBBVURJT19ERVZJQ0VfTk9ORSk7CiAKICAgICAgICAgLy8gSWYgYW55LCByZXNvbHZlIGFueSAiZHluYW1pYyIgZmllbGRzIG9mIGFuIEF1ZGlvIFByb2ZpbGVzIGNvbGxlY3Rpb24KICAgICAgICAgdm9pZCB1cGRhdGVBdWRpb1Byb2ZpbGVzKGF1ZGlvX2RldmljZXNfdCBkZXZpY2UsIGF1ZGlvX2lvX2hhbmRsZV90IGlvSGFuZGxlLApAQCAtNjU0LDcgKzY2Myw2IEBACiAgICAgICAgIGF1ZGlvX2lvX2hhbmRsZV90IGdldElucHV0Rm9yRGV2aWNlKGF1ZGlvX2RldmljZXNfdCBkZXZpY2UsCiAgICAgICAgICAgICAgICAgU3RyaW5nOCBhZGRyZXNzLAogICAgICAgICAgICAgICAgIGF1ZGlvX3Nlc3Npb25fdCBzZXNzaW9uLAotICAgICAgICAgICAgICAgIHVpZF90IHVpZCwKICAgICAgICAgICAgICAgICBhdWRpb19zb3VyY2VfdCBpbnB1dFNvdXJjZSwKICAgICAgICAgICAgICAgICBjb25zdCBhdWRpb19jb25maWdfYmFzZV90ICpjb25maWcsCiAgICAgICAgICAgICAgICAgYXVkaW9faW5wdXRfZmxhZ3NfdCBmbGFncywKQEAgLTY4NCw2ICs2OTIsMTggQEAKICAgICAgICAgICAgIHBhcmFtLmFkZEludChTdHJpbmc4KEF1ZGlvUGFyYW1ldGVyOjprZXlNb25vT3V0cHV0KSwgKGludCltTWFzdGVyTW9ubyk7CiAgICAgICAgICAgICBtcENsaWVudEludGVyZmFjZS0+c2V0UGFyYW1ldGVycyhvdXRwdXQsIHBhcmFtLnRvU3RyaW5nKCkpOwogICAgICAgICB9CisgICAgICAgIHN0YXR1c190IGluc3RhbGxQYXRjaChjb25zdCBjaGFyICpjYWxsZXIsCisgICAgICAgICAgICAgICAgYXVkaW9fcGF0Y2hfaGFuZGxlX3QgKnBhdGNoSGFuZGxlLAorICAgICAgICAgICAgICAgIEF1ZGlvSU9EZXNjcmlwdG9ySW50ZXJmYWNlICppb0Rlc2NyaXB0b3IsCisgICAgICAgICAgICAgICAgY29uc3Qgc3RydWN0IGF1ZGlvX3BhdGNoICpwYXRjaCwKKyAgICAgICAgICAgICAgICBpbnQgZGVsYXlNcyk7CisgICAgICAgIHN0YXR1c190IGluc3RhbGxQYXRjaChjb25zdCBjaGFyICpjYWxsZXIsCisgICAgICAgICAgICAgICAgc3NpemVfdCBpbmRleCwKKyAgICAgICAgICAgICAgICBhdWRpb19wYXRjaF9oYW5kbGVfdCAqcGF0Y2hIYW5kbGUsCisgICAgICAgICAgICAgICAgY29uc3Qgc3RydWN0IGF1ZGlvX3BhdGNoICpwYXRjaCwKKyAgICAgICAgICAgICAgICBpbnQgZGVsYXlNcywKKyAgICAgICAgICAgICAgICB1aWRfdCB1aWQsCisgICAgICAgICAgICAgICAgc3A8QXVkaW9QYXRjaD4gKnBhdGNoRGVzY1B0cik7CiAKICAgICAgICAgYm9vbCBzb3VuZFRyaWdnZXJTdXBwb3J0c0NvbmN1cnJlbnRDYXB0dXJlKCk7CiAgICAgICAgIGJvb2wgbVNvdW5kVHJpZ2dlclN1cHBvcnRzQ29uY3VycmVudENhcHR1cmU7CmRpZmYgLS1naXQgYS9zZXJ2aWNlcy9hdWRpb3BvbGljeS9zZXJ2aWNlL0F1ZGlvUG9saWN5Q2xpZW50SW1wbC5jcHAgYi9zZXJ2aWNlcy9hdWRpb3BvbGljeS9zZXJ2aWNlL0F1ZGlvUG9saWN5Q2xpZW50SW1wbC5jcHAKaW5kZXggYjA2NGY4Yy4uMjFmZmZlYyAxMDA2NDQKLS0tIGEvc2VydmljZXMvYXVkaW9wb2xpY3kvc2VydmljZS9BdWRpb1BvbGljeUNsaWVudEltcGwuY3BwCisrKyBiL3NlcnZpY2VzL2F1ZGlvcG9saWN5L3NlcnZpY2UvQXVkaW9Qb2xpY3lDbGllbnRJbXBsLmNwcApAQCAtMTU1LDE3ICsxNTUsNiBAQAogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKLXN0YXR1c190IEF1ZGlvUG9saWN5U2VydmljZTo6QXVkaW9Qb2xpY3lDbGllbnQ6OnN0YXJ0VG9uZShhdWRpb19wb2xpY3lfdG9uZV90IHRvbmUsCi0gICAgICAgICAgICAgIGF1ZGlvX3N0cmVhbV90eXBlX3Qgc3RyZWFtKQotewotICAgIHJldHVybiBtQXVkaW9Qb2xpY3lTZXJ2aWNlLT5zdGFydFRvbmUodG9uZSwgc3RyZWFtKTsKLX0KLQotc3RhdHVzX3QgQXVkaW9Qb2xpY3lTZXJ2aWNlOjpBdWRpb1BvbGljeUNsaWVudDo6c3RvcFRvbmUoKQotewotICAgIHJldHVybiBtQXVkaW9Qb2xpY3lTZXJ2aWNlLT5zdG9wVG9uZSgpOwotfQotCiBzdGF0dXNfdCBBdWRpb1BvbGljeVNlcnZpY2U6OkF1ZGlvUG9saWN5Q2xpZW50OjpzZXRWb2ljZVZvbHVtZShmbG9hdCB2b2x1bWUsIGludCBkZWxheV9tcykKIHsKICAgICByZXR1cm4gbUF1ZGlvUG9saWN5U2VydmljZS0+c2V0Vm9pY2VWb2x1bWUodm9sdW1lLCBkZWxheV9tcyk7CmRpZmYgLS1naXQgYS9zZXJ2aWNlcy9hdWRpb3BvbGljeS9zZXJ2aWNlL0F1ZGlvUG9saWN5RWZmZWN0cy5jcHAgYi9zZXJ2aWNlcy9hdWRpb3BvbGljeS9zZXJ2aWNlL0F1ZGlvUG9saWN5RWZmZWN0cy5jcHAKaW5kZXggNGExY2FiNC4uMjliMDU2MSAxMDA2NDQKLS0tIGEvc2VydmljZXMvYXVkaW9wb2xpY3kvc2VydmljZS9BdWRpb1BvbGljeUVmZmVjdHMuY3BwCisrKyBiL3NlcnZpY2VzL2F1ZGlvcG9saWN5L3NlcnZpY2UvQXVkaW9Qb2xpY3lFZmZlY3RzLmNwcApAQCAtMjMsNyArMjMsOSBAQAogI2luY2x1ZGUgPG1lbW9yeT4KICNpbmNsdWRlIDxjdXRpbHMvbWlzYy5oPgogI2luY2x1ZGUgPG1lZGlhL0F1ZGlvRWZmZWN0Lmg+CisjaW5jbHVkZSA8bWVkaWEvQXVkaW9Qb2xpY3lIZWxwZXIuaD4KICNpbmNsdWRlIDxtZWRpYS9FZmZlY3RzQ29uZmlnLmg+CisjaW5jbHVkZSA8bWVkaWF1dGlscy9TZXJ2aWNlVXRpbGl0aWVzLmg+CiAjaW5jbHVkZSA8c3lzdGVtL2F1ZGlvLmg+CiAjaW5jbHVkZSA8c3lzdGVtL2F1ZGlvX2VmZmVjdHMvYXVkaW9fZWZmZWN0c19jb25mLmg+CiAjaW5jbHVkZSA8dXRpbHMvVmVjdG9yLmg+CkBAIC0zMSw3ICszMyw2IEBACiAjaW5jbHVkZSA8Y3V0aWxzL2NvbmZpZ191dGlscy5oPgogI2luY2x1ZGUgPGJpbmRlci9JUENUaHJlYWRTdGF0ZS5oPgogI2luY2x1ZGUgIkF1ZGlvUG9saWN5RWZmZWN0cy5oIgotI2luY2x1ZGUgIlNlcnZpY2VVdGlsaXRpZXMuaCIKIAogbmFtZXNwYWNlIGFuZHJvaWQgewogCkBAIC0zMTcsNiArMzE4LDIwMSBAQAogICAgIHJldHVybiBzdGF0dXM7CiB9CiAKK3N0YXR1c190IEF1ZGlvUG9saWN5RWZmZWN0czo6YWRkU291cmNlRGVmYXVsdEVmZmVjdChjb25zdCBlZmZlY3RfdXVpZF90ICp0eXBlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFN0cmluZzE2JiBvcFBhY2thZ2VOYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGVmZmVjdF91dWlkX3QgKnV1aWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50MzJfdCBwcmlvcml0eSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdWRpb19zb3VyY2VfdCBzb3VyY2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXVkaW9fdW5pcXVlX2lkX3QqIGlkKQoreworICAgIGlmICh1dWlkID09IE5VTEwgfHwgdHlwZSA9PSBOVUxMKSB7CisgICAgICAgIEFMT0dFKCJhZGRTb3VyY2VEZWZhdWx0RWZmZWN0KCk6IE51bGwgdXVpZCBvciB0eXBlIHV1aWQgcG9pbnRlciIpOworICAgICAgICByZXR1cm4gQkFEX1ZBTFVFOworICAgIH0KKworICAgIC8vIEhPVFdPUkQgYW5kIEZNX1RVTkVSIGFyZSB0d28gc3BlY2lhbCBjYXNlIHNvdXJjZXMgPiBNQVguCisgICAgaWYgKHNvdXJjZSA8IEFVRElPX1NPVVJDRV9ERUZBVUxUIHx8CisgICAgICAgICAgICAoc291cmNlID4gQVVESU9fU09VUkNFX01BWCAmJgorICAgICAgICAgICAgIHNvdXJjZSAhPSBBVURJT19TT1VSQ0VfSE9UV09SRCAmJgorICAgICAgICAgICAgIHNvdXJjZSAhPSBBVURJT19TT1VSQ0VfRk1fVFVORVIpKSB7CisgICAgICAgIEFMT0dFKCJhZGRTb3VyY2VEZWZhdWx0RWZmZWN0KCk6IFVuc3VwcG9ydGVkIHNvdXJjZSB0eXBlICVkIiwgc291cmNlKTsKKyAgICAgICAgcmV0dXJuIEJBRF9WQUxVRTsKKyAgICB9CisKKyAgICAvLyBDaGVjayB0aGF0IHx1dWlkfCBvciB8dHlwZXwgY29ycmVzcG9uZHMgdG8gYW4gZWZmZWN0IG9uIHRoZSBzeXN0ZW0uCisgICAgZWZmZWN0X2Rlc2NyaXB0b3JfdCBkZXNjcmlwdG9yID0ge307CisgICAgc3RhdHVzX3QgcmVzID0gQXVkaW9FZmZlY3Q6OmdldEVmZmVjdERlc2NyaXB0b3IoCisgICAgICAgICAgICB1dWlkLCB0eXBlLCBFRkZFQ1RfRkxBR19UWVBFX1BSRV9QUk9DLCAmZGVzY3JpcHRvcik7CisgICAgaWYgKHJlcyAhPSBPSykgeworICAgICAgICBBTE9HRSgiYWRkU291cmNlRGVmYXVsdEVmZmVjdCgpOiBGYWlsZWQgdG8gZmluZCBlZmZlY3QgZGVzY3JpcHRvciBtYXRjaGluZyB1dWlkL3R5cGUuIik7CisgICAgICAgIHJldHVybiByZXM7CisgICAgfQorCisgICAgLy8gT25seSBwcmUtcHJvY2Vzc2luZyBlZmZlY3RzIGNhbiBiZSBhZGRlZCBkeW5hbWljYWxseSBhcyBzb3VyY2UgZGVmYXVsdHMuCisgICAgaWYgKChkZXNjcmlwdG9yLmZsYWdzICYgRUZGRUNUX0ZMQUdfVFlQRV9NQVNLKSAhPSBFRkZFQ1RfRkxBR19UWVBFX1BSRV9QUk9DKSB7CisgICAgICAgIEFMT0dFKCJhZGRTb3VyY2VEZWZhdWx0RWZmZWN0KCk6IERlc2lyZWQgZWZmZWN0IGNhbm5vdCBiZSBhdHRhY2hlZCAiCisgICAgICAgICAgICAgICJhcyBhIHNvdXJjZSBkZWZhdWx0IGVmZmVjdC4iKTsKKyAgICAgICAgcmV0dXJuIEJBRF9WQUxVRTsKKyAgICB9CisKKyAgICBNdXRleDo6QXV0b2xvY2sgX2wobUxvY2spOworCisgICAgLy8gRmluZCB0aGUgRWZmZWN0RGVzY1ZlY3RvciBmb3IgdGhlIGdpdmVuIHNvdXJjZSB0eXBlLCBvciBjcmVhdGUgYSBuZXcgb25lIGlmIG5lY2Vzc2FyeS4KKyAgICBzc2l6ZV90IGluZGV4ID0gbUlucHV0U291cmNlcy5pbmRleE9mS2V5KHNvdXJjZSk7CisgICAgRWZmZWN0RGVzY1ZlY3RvciAqZGVzYyA9IE5VTEw7CisgICAgaWYgKGluZGV4IDwgMCkgeworICAgICAgICAvLyBObyBlZmZlY3RzIGZvciB0aGlzIHNvdXJjZSB0eXBlIHlldC4KKyAgICAgICAgZGVzYyA9IG5ldyBFZmZlY3REZXNjVmVjdG9yKCk7CisgICAgICAgIG1JbnB1dFNvdXJjZXMuYWRkKHNvdXJjZSwgZGVzYyk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgZGVzYyA9IG1JbnB1dFNvdXJjZXMudmFsdWVBdChpbmRleCk7CisgICAgfQorCisgICAgLy8gQ3JlYXRlIGEgbmV3IGVmZmVjdCBhbmQgYWRkIGl0IHRvIHRoZSB2ZWN0b3IuCisgICAgcmVzID0gQXVkaW9FZmZlY3Q6Om5ld0VmZmVjdFVuaXF1ZUlkKGlkKTsKKyAgICBpZiAocmVzICE9IE9LKSB7CisgICAgICAgIEFMT0dFKCJhZGRTb3VyY2VEZWZhdWx0RWZmZWN0KCk6IGZhaWxlZCB0byBnZXQgbmV3IHVuaXF1ZSBpZC4iKTsKKyAgICAgICAgcmV0dXJuIHJlczsKKyAgICB9CisgICAgRWZmZWN0RGVzYyAqZWZmZWN0ID0gbmV3IEVmZmVjdERlc2MoCisgICAgICAgICAgICBkZXNjcmlwdG9yLm5hbWUsICp0eXBlLCBvcFBhY2thZ2VOYW1lLCAqdXVpZCwgcHJpb3JpdHksICppZCk7CisgICAgZGVzYy0+bUVmZmVjdHMuYWRkKGVmZmVjdCk7CisgICAgLy8gVE9ETyhiLzcxODEzNjk3KTogU3VwcG9ydCBzZXR0aW5nIHBhcmFtcyBhcyB3ZWxsLgorCisgICAgLy8gVE9ETyhiLzcxODE0MzAwKTogUmV0cm9hY3RpdmVseSBhdHRhY2ggdG8gYW55IGV4aXN0aW5nIHNvdXJjZXMgb2YgdGhlIGdpdmVuIHR5cGUuCisgICAgLy8gVGhpcyByZXF1aXJlcyB0cmFja2luZyB0aGUgc291cmNlIHR5cGUgb2YgZWFjaCBzZXNzaW9uIGlkIGluIGFkZGl0aW9uIHRvIHdoYXQgaXMKKyAgICAvLyBhbHJlYWR5IGJlaW5nIHRyYWNrZWQuCisKKyAgICByZXR1cm4gTk9fRVJST1I7Cit9CisKK3N0YXR1c190IEF1ZGlvUG9saWN5RWZmZWN0czo6YWRkU3RyZWFtRGVmYXVsdEVmZmVjdChjb25zdCBlZmZlY3RfdXVpZF90ICp0eXBlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFN0cmluZzE2JiBvcFBhY2thZ2VOYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGVmZmVjdF91dWlkX3QgKnV1aWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50MzJfdCBwcmlvcml0eSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdWRpb191c2FnZV90IHVzYWdlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF1ZGlvX3VuaXF1ZV9pZF90KiBpZCkKK3sKKyAgICBpZiAodXVpZCA9PSBOVUxMIHx8IHR5cGUgPT0gTlVMTCkgeworICAgICAgICBBTE9HRSgiYWRkU3RyZWFtRGVmYXVsdEVmZmVjdCgpOiBOdWxsIHV1aWQgb3IgdHlwZSB1dWlkIHBvaW50ZXIiKTsKKyAgICAgICAgcmV0dXJuIEJBRF9WQUxVRTsKKyAgICB9CisKKyAgICBhdWRpb19zdHJlYW1fdHlwZV90IHN0cmVhbSA9IGF1ZGlvX3VzYWdlX3RvX3N0cmVhbV90eXBlKHVzYWdlKTsKKworICAgIGlmIChzdHJlYW0gPCBBVURJT19TVFJFQU1fTUlOIHx8IHN0cmVhbSA+PSBBVURJT19TVFJFQU1fUFVCTElDX0NOVCkgeworICAgICAgICBBTE9HRSgiYWRkU3RyZWFtRGVmYXVsdEVmZmVjdCgpOiBVbnN1cHBvcnRlZCBzdHJlYW0gdHlwZSAlZCIsIHN0cmVhbSk7CisgICAgICAgIHJldHVybiBCQURfVkFMVUU7CisgICAgfQorCisgICAgLy8gQ2hlY2sgdGhhdCB8dXVpZHwgb3IgfHR5cGV8IGNvcnJlc3BvbmRzIHRvIGFuIGVmZmVjdCBvbiB0aGUgc3lzdGVtLgorICAgIGVmZmVjdF9kZXNjcmlwdG9yX3QgZGVzY3JpcHRvciA9IHt9OworICAgIHN0YXR1c190IHJlcyA9IEF1ZGlvRWZmZWN0OjpnZXRFZmZlY3REZXNjcmlwdG9yKAorICAgICAgICAgICAgdXVpZCwgdHlwZSwgRUZGRUNUX0ZMQUdfVFlQRV9JTlNFUlQsICZkZXNjcmlwdG9yKTsKKyAgICBpZiAocmVzICE9IE9LKSB7CisgICAgICAgIEFMT0dFKCJhZGRTdHJlYW1EZWZhdWx0RWZmZWN0KCk6IEZhaWxlZCB0byBmaW5kIGVmZmVjdCBkZXNjcmlwdG9yIG1hdGNoaW5nIHV1aWQvdHlwZS4iKTsKKyAgICAgICAgcmV0dXJuIHJlczsKKyAgICB9CisKKyAgICAvLyBPbmx5IGluc2VydCBlZmZlY3RzIGNhbiBiZSBhZGRlZCBkeW5hbWljYWxseSBhcyBzdHJlYW0gZGVmYXVsdHMuCisgICAgaWYgKChkZXNjcmlwdG9yLmZsYWdzICYgRUZGRUNUX0ZMQUdfVFlQRV9NQVNLKSAhPSBFRkZFQ1RfRkxBR19UWVBFX0lOU0VSVCkgeworICAgICAgICBBTE9HRSgiYWRkU3RyZWFtRGVmYXVsdEVmZmVjdCgpOiBEZXNpcmVkIGVmZmVjdCBjYW5ub3QgYmUgYXR0YWNoZWQgIgorICAgICAgICAgICAgICAiYXMgYSBzdHJlYW0gZGVmYXVsdCBlZmZlY3QuIik7CisgICAgICAgIHJldHVybiBCQURfVkFMVUU7CisgICAgfQorCisgICAgTXV0ZXg6OkF1dG9sb2NrIF9sKG1Mb2NrKTsKKworICAgIC8vIEZpbmQgdGhlIEVmZmVjdERlc2NWZWN0b3IgZm9yIHRoZSBnaXZlbiBzdHJlYW0gdHlwZSwgb3IgY3JlYXRlIGEgbmV3IG9uZSBpZiBuZWNlc3NhcnkuCisgICAgc3NpemVfdCBpbmRleCA9IG1PdXRwdXRTdHJlYW1zLmluZGV4T2ZLZXkoc3RyZWFtKTsKKyAgICBFZmZlY3REZXNjVmVjdG9yICpkZXNjID0gTlVMTDsKKyAgICBpZiAoaW5kZXggPCAwKSB7CisgICAgICAgIC8vIE5vIGVmZmVjdHMgZm9yIHRoaXMgc3RyZWFtIHR5cGUgeWV0LgorICAgICAgICBkZXNjID0gbmV3IEVmZmVjdERlc2NWZWN0b3IoKTsKKyAgICAgICAgbU91dHB1dFN0cmVhbXMuYWRkKHN0cmVhbSwgZGVzYyk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgZGVzYyA9IG1PdXRwdXRTdHJlYW1zLnZhbHVlQXQoaW5kZXgpOworICAgIH0KKworICAgIC8vIENyZWF0ZSBhIG5ldyBlZmZlY3QgYW5kIGFkZCBpdCB0byB0aGUgdmVjdG9yLgorICAgIHJlcyA9IEF1ZGlvRWZmZWN0OjpuZXdFZmZlY3RVbmlxdWVJZChpZCk7CisgICAgaWYgKHJlcyAhPSBPSykgeworICAgICAgICBBTE9HRSgiYWRkU3RyZWFtRGVmYXVsdEVmZmVjdCgpOiBmYWlsZWQgdG8gZ2V0IG5ldyB1bmlxdWUgaWQuIik7CisgICAgICAgIHJldHVybiByZXM7CisgICAgfQorICAgIEVmZmVjdERlc2MgKmVmZmVjdCA9IG5ldyBFZmZlY3REZXNjKAorICAgICAgICAgICAgZGVzY3JpcHRvci5uYW1lLCAqdHlwZSwgb3BQYWNrYWdlTmFtZSwgKnV1aWQsIHByaW9yaXR5LCAqaWQpOworICAgIGRlc2MtPm1FZmZlY3RzLmFkZChlZmZlY3QpOworICAgIC8vIFRPRE8oYi83MTgxMzY5Nyk6IFN1cHBvcnQgc2V0dGluZyBwYXJhbXMgYXMgd2VsbC4KKworICAgIC8vIFRPRE8oYi83MTgxNDMwMCk6IFJldHJvYWN0aXZlbHkgYXR0YWNoIHRvIGFueSBleGlzdGluZyBzdHJlYW1zIG9mIHRoZSBnaXZlbiB0eXBlLgorICAgIC8vIFRoaXMgcmVxdWlyZXMgdHJhY2tpbmcgdGhlIHN0cmVhbSB0eXBlIG9mIGVhY2ggc2Vzc2lvbiBpZCBpbiBhZGRpdGlvbiB0byB3aGF0IGlzCisgICAgLy8gYWxyZWFkeSBiZWluZyB0cmFja2VkLgorCisgICAgcmV0dXJuIE5PX0VSUk9SOworfQorCitzdGF0dXNfdCBBdWRpb1BvbGljeUVmZmVjdHM6OnJlbW92ZVNvdXJjZURlZmF1bHRFZmZlY3QoYXVkaW9fdW5pcXVlX2lkX3QgaWQpCit7CisgICAgaWYgKGlkID09IEFVRElPX1VOSVFVRV9JRF9BTExPQ0FURSkgeworICAgICAgICAvLyBBTExPQ0FURSBpcyBub3QgYSB1bmlxdWUgaWRlbnRpZmllciwgYnV0IHJhdGhlciBhIHJlc2VydmVkIHZhbHVlIGluZGljYXRpbmcKKyAgICAgICAgLy8gYSByZWFsIGlkIGhhcyBub3QgYmVlbiBhc3NpZ25lZC4gRm9yIGRlZmF1bHQgZWZmZWN0cywgdGhpcyB2YWx1ZSBpcyBvbmx5IHVzZWQKKyAgICAgICAgLy8gYnkgc3lzdGVtLW93bmVkIGRlZmF1bHRzIGZyb20gdGhlIGxvYWRlZCBjb25maWcsIHdoaWNoIGNhbm5vdCBiZSByZW1vdmVkLgorICAgICAgICByZXR1cm4gQkFEX1ZBTFVFOworICAgIH0KKworICAgIE11dGV4OjpBdXRvbG9jayBfbChtTG9jayk7CisKKyAgICAvLyBDaGVjayBlYWNoIHNvdXJjZSB0eXBlLgorICAgIHNpemVfdCBudW1Tb3VyY2VzID0gbUlucHV0U291cmNlcy5zaXplKCk7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBudW1Tb3VyY2VzOyArK2kpIHsKKyAgICAgICAgLy8gQ2hlY2sgZWFjaCBlZmZlY3QgZm9yIGVhY2ggc291cmNlLgorICAgICAgICBFZmZlY3REZXNjVmVjdG9yKiBkZXNjVmVjdG9yID0gbUlucHV0U291cmNlc1tpXTsKKyAgICAgICAgZm9yIChhdXRvIGRlc2MgPSBkZXNjVmVjdG9yLT5tRWZmZWN0cy5iZWdpbigpOyBkZXNjICE9IGRlc2NWZWN0b3ItPm1FZmZlY3RzLmVuZCgpOyArK2Rlc2MpIHsKKyAgICAgICAgICAgIGlmICgoKmRlc2MpLT5tSWQgPT0gaWQpIHsKKyAgICAgICAgICAgICAgICAvLyBGb3VuZCBpdCEKKyAgICAgICAgICAgICAgICAvLyBUT0RPKGIvNzE4MTQzMDApOiBSZW1vdmUgZnJvbSBhbnkgc291cmNlcyB0aGUgZWZmZWN0IHdhcyBhdHRhY2hlZCB0by4KKyAgICAgICAgICAgICAgICBkZXNjVmVjdG9yLT5tRWZmZWN0cy5lcmFzZShkZXNjKTsKKyAgICAgICAgICAgICAgICAvLyBIYW5kbGVzIGFyZSB1bmlxdWU7IHRoZXJlIGNhbiBvbmx5IGJlIG9uZSBtYXRjaCwgc28gcmV0dXJuIGVhcmx5LgorICAgICAgICAgICAgICAgIHJldHVybiBOT19FUlJPUjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKworICAgIC8vIEVmZmVjdCB3YXNuJ3QgZm91bmQsIHNvIGl0J3MgYmVlbiB0cml2aWFsbHkgcmVtb3ZlZCBzdWNjZXNzZnVsbHkuCisgICAgcmV0dXJuIE5PX0VSUk9SOworfQorCitzdGF0dXNfdCBBdWRpb1BvbGljeUVmZmVjdHM6OnJlbW92ZVN0cmVhbURlZmF1bHRFZmZlY3QoYXVkaW9fdW5pcXVlX2lkX3QgaWQpCit7CisgICAgaWYgKGlkID09IEFVRElPX1VOSVFVRV9JRF9BTExPQ0FURSkgeworICAgICAgICAvLyBBTExPQ0FURSBpcyBub3QgYSB1bmlxdWUgaWRlbnRpZmllciwgYnV0IHJhdGhlciBhIHJlc2VydmVkIHZhbHVlIGluZGljYXRpbmcKKyAgICAgICAgLy8gYSByZWFsIGlkIGhhcyBub3QgYmVlbiBhc3NpZ25lZC4gRm9yIGRlZmF1bHQgZWZmZWN0cywgdGhpcyB2YWx1ZSBpcyBvbmx5IHVzZWQKKyAgICAgICAgLy8gYnkgc3lzdGVtLW93bmVkIGRlZmF1bHRzIGZyb20gdGhlIGxvYWRlZCBjb25maWcsIHdoaWNoIGNhbm5vdCBiZSByZW1vdmVkLgorICAgICAgICByZXR1cm4gQkFEX1ZBTFVFOworICAgIH0KKworICAgIE11dGV4OjpBdXRvbG9jayBfbChtTG9jayk7CisKKyAgICAvLyBDaGVjayBlYWNoIHN0cmVhbSB0eXBlLgorICAgIHNpemVfdCBudW1TdHJlYW1zID0gbU91dHB1dFN0cmVhbXMuc2l6ZSgpOworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbnVtU3RyZWFtczsgKytpKSB7CisgICAgICAgIC8vIENoZWNrIGVhY2ggZWZmZWN0IGZvciBlYWNoIHN0cmVhbS4KKyAgICAgICAgRWZmZWN0RGVzY1ZlY3RvciogZGVzY1ZlY3RvciA9IG1PdXRwdXRTdHJlYW1zW2ldOworICAgICAgICBmb3IgKGF1dG8gZGVzYyA9IGRlc2NWZWN0b3ItPm1FZmZlY3RzLmJlZ2luKCk7IGRlc2MgIT0gZGVzY1ZlY3Rvci0+bUVmZmVjdHMuZW5kKCk7ICsrZGVzYykgeworICAgICAgICAgICAgaWYgKCgqZGVzYyktPm1JZCA9PSBpZCkgeworICAgICAgICAgICAgICAgIC8vIEZvdW5kIGl0IQorICAgICAgICAgICAgICAgIC8vIFRPRE8oYi83MTgxNDMwMCk6IFJlbW92ZSBmcm9tIGFueSBzdHJlYW1zIHRoZSBlZmZlY3Qgd2FzIGF0dGFjaGVkIHRvLgorICAgICAgICAgICAgICAgIGRlc2NWZWN0b3ItPm1FZmZlY3RzLmVyYXNlKGRlc2MpOworICAgICAgICAgICAgICAgIC8vIEhhbmRsZXMgYXJlIHVuaXF1ZTsgdGhlcmUgY2FuIG9ubHkgYmUgb25lIG1hdGNoLCBzbyByZXR1cm4gZWFybHkuCisgICAgICAgICAgICAgICAgcmV0dXJuIE5PX0VSUk9SOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCisgICAgLy8gRWZmZWN0IHdhc24ndCBmb3VuZCwgc28gaXQncyBiZWVuIHRyaXZpYWxseSByZW1vdmVkIHN1Y2Nlc3NmdWxseS4KKyAgICByZXR1cm4gTk9fRVJST1I7Cit9CiAKIHZvaWQgQXVkaW9Qb2xpY3lFZmZlY3RzOjpFZmZlY3RWZWN0b3I6OnNldFByb2Nlc3NvckVuYWJsZWQoYm9vbCBlbmFibGVkKQogewpkaWZmIC0tZ2l0IGEvc2VydmljZXMvYXVkaW9wb2xpY3kvc2VydmljZS9BdWRpb1BvbGljeUVmZmVjdHMuaCBiL3NlcnZpY2VzL2F1ZGlvcG9saWN5L3NlcnZpY2UvQXVkaW9Qb2xpY3lFZmZlY3RzLmgKaW5kZXggNjIzMTgwZS4uNmFkMDFmNyAxMDA2NDQKLS0tIGEvc2VydmljZXMvYXVkaW9wb2xpY3kvc2VydmljZS9BdWRpb1BvbGljeUVmZmVjdHMuaAorKysgYi9zZXJ2aWNlcy9hdWRpb3BvbGljeS9zZXJ2aWNlL0F1ZGlvUG9saWN5RWZmZWN0cy5oCkBAIC02NCw3ICs2NCw2IEBACiAgICAgc3RhdHVzX3QgcmVsZWFzZUlucHV0RWZmZWN0cyhhdWRpb19pb19oYW5kbGVfdCBpbnB1dCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF1ZGlvX3Nlc3Npb25fdCBhdWRpb1Nlc3Npb24pOwogCi0KICAgICAvLyBSZXR1cm4gYSBsaXN0IG9mIGVmZmVjdCBkZXNjcmlwdG9ycyBmb3IgZGVmYXVsdCBvdXRwdXQgZWZmZWN0cwogICAgIC8vIGFzc29jaWF0ZWQgd2l0aCBhdWRpb1Nlc3Npb24KICAgICBzdGF0dXNfdCBxdWVyeURlZmF1bHRPdXRwdXRTZXNzaW9uRWZmZWN0cyhhdWRpb19zZXNzaW9uX3QgYXVkaW9TZXNzaW9uLApAQCAtODIsMTggKzgxLDYwIEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF1ZGlvX3N0cmVhbV90eXBlX3Qgc3RyZWFtLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdWRpb19zZXNzaW9uX3QgYXVkaW9TZXNzaW9uKTsKIAorICAgIC8vIEFkZCB0aGUgZWZmZWN0IHRvIHRoZSBsaXN0IG9mIGRlZmF1bHQgZWZmZWN0cyBmb3Igc291cmNlcyBvZiB0eXBlIHxzb3VyY2V8LgorICAgIHN0YXR1c190IGFkZFNvdXJjZURlZmF1bHRFZmZlY3QoY29uc3QgZWZmZWN0X3V1aWRfdCAqdHlwZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFN0cmluZzE2JiBvcFBhY2thZ2VOYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZWZmZWN0X3V1aWRfdCAqdXVpZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludDMyX3QgcHJpb3JpdHksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdWRpb19zb3VyY2VfdCBzb3VyY2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdWRpb191bmlxdWVfaWRfdCogaWQpOworCisgICAgLy8gQWRkIHRoZSBlZmZlY3QgdG8gdGhlIGxpc3Qgb2YgZGVmYXVsdCBlZmZlY3RzIGZvciBzdHJlYW1zIG9mIGEgZ2l2ZW4gdXNhZ2UuCisgICAgc3RhdHVzX3QgYWRkU3RyZWFtRGVmYXVsdEVmZmVjdChjb25zdCBlZmZlY3RfdXVpZF90ICp0eXBlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgU3RyaW5nMTYmIG9wUGFja2FnZU5hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBlZmZlY3RfdXVpZF90ICp1dWlkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50MzJfdCBwcmlvcml0eSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF1ZGlvX3VzYWdlX3QgdXNhZ2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdWRpb191bmlxdWVfaWRfdCogaWQpOworCisgICAgLy8gUmVtb3ZlIHRoZSBkZWZhdWx0IHNvdXJjZSBlZmZlY3QgZnJvbSB3aGVyZXZlciBpdCdzIGF0dGFjaGVkLgorICAgIHN0YXR1c190IHJlbW92ZVNvdXJjZURlZmF1bHRFZmZlY3QoYXVkaW9fdW5pcXVlX2lkX3QgaWQpOworCisgICAgLy8gUmVtb3ZlIHRoZSBkZWZhdWx0IHN0cmVhbSBlZmZlY3QgZnJvbSB3aGVyZXZlciBpdCdzIGF0dGFjaGVkLgorICAgIHN0YXR1c190IHJlbW92ZVN0cmVhbURlZmF1bHRFZmZlY3QoYXVkaW9fdW5pcXVlX2lkX3QgaWQpOworCiBwcml2YXRlOgogCiAgICAgLy8gY2xhc3MgdG8gc3RvcmUgdGhlIGRlc2NyaXB0aW9uIG9mIGFuIGVmZmVjdHMgYW5kIGl0cyBwYXJhbWV0ZXJzCiAgICAgLy8gYXMgZGVmaW5lZCBpbiBhdWRpb19lZmZlY3RzLmNvbmYKICAgICBjbGFzcyBFZmZlY3REZXNjIHsKICAgICBwdWJsaWM6Ci0gICAgICAgIEVmZmVjdERlc2MoY29uc3QgY2hhciAqbmFtZSwgY29uc3QgZWZmZWN0X3V1aWRfdCYgdXVpZCkgOgorICAgICAgICBFZmZlY3REZXNjKGNvbnN0IGNoYXIgKm5hbWUsCisgICAgICAgICAgICAgICAgICAgY29uc3QgZWZmZWN0X3V1aWRfdCYgdHlwZVV1aWQsCisgICAgICAgICAgICAgICAgICAgY29uc3QgU3RyaW5nMTYmIG9wUGFja2FnZU5hbWUsCisgICAgICAgICAgICAgICAgICAgY29uc3QgZWZmZWN0X3V1aWRfdCYgdXVpZCwKKyAgICAgICAgICAgICAgICAgICB1aW50MzJfdCBwcmlvcml0eSwKKyAgICAgICAgICAgICAgICAgICBhdWRpb191bmlxdWVfaWRfdCBpZCkgOgogICAgICAgICAgICAgICAgICAgICAgICAgbU5hbWUoc3RyZHVwKG5hbWUpKSwKLSAgICAgICAgICAgICAgICAgICAgICAgIG1VdWlkKHV1aWQpIHsgfQorICAgICAgICAgICAgICAgICAgICAgICAgbVR5cGVVdWlkKHR5cGVVdWlkKSwKKyAgICAgICAgICAgICAgICAgICAgICAgIG1PcFBhY2thZ2VOYW1lKG9wUGFja2FnZU5hbWUpLAorICAgICAgICAgICAgICAgICAgICAgICAgbVV1aWQodXVpZCksCisgICAgICAgICAgICAgICAgICAgICAgICBtUHJpb3JpdHkocHJpb3JpdHkpLAorICAgICAgICAgICAgICAgICAgICAgICAgbUlkKGlkKSB7IH0KKyAgICAgICAgRWZmZWN0RGVzYyhjb25zdCBjaGFyICpuYW1lLCBjb25zdCBlZmZlY3RfdXVpZF90JiB1dWlkKSA6CisgICAgICAgICAgICAgICAgICAgICAgICBFZmZlY3REZXNjKG5hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpFRkZFQ1RfVVVJRF9OVUxMLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdHJpbmcxNigiIiksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHV1aWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFVRElPX1VOSVFVRV9JRF9BTExPQ0FURSkgeyB9CiAgICAgICAgIEVmZmVjdERlc2MoY29uc3QgRWZmZWN0RGVzYyYgb3JpZykgOgogICAgICAgICAgICAgICAgICAgICAgICAgbU5hbWUoc3RyZHVwKG9yaWcubU5hbWUpKSwKLSAgICAgICAgICAgICAgICAgICAgICAgIG1VdWlkKG9yaWcubVV1aWQpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIG1UeXBlVXVpZChvcmlnLm1UeXBlVXVpZCksCisgICAgICAgICAgICAgICAgICAgICAgICBtT3BQYWNrYWdlTmFtZShvcmlnLm1PcFBhY2thZ2VOYW1lKSwKKyAgICAgICAgICAgICAgICAgICAgICAgIG1VdWlkKG9yaWcubVV1aWQpLAorICAgICAgICAgICAgICAgICAgICAgICAgbVByaW9yaXR5KG9yaWcubVByaW9yaXR5KSwKKyAgICAgICAgICAgICAgICAgICAgICAgIG1JZChvcmlnLm1JZCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGRlZXAgY29weSBtUGFyYW1zCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChzaXplX3QgayA9IDA7IGsgPCBvcmlnLm1QYXJhbXMuc2l6ZSgpOyBrKyspIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWZmZWN0X3BhcmFtX3QgKm9yaWdQYXJhbSA9IG9yaWcubVBhcmFtc1trXTsKQEAgLTExNiw3ICsxNTcsMTEgQEAKICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgICAgICBjaGFyICptTmFtZTsKKyAgICAgICAgZWZmZWN0X3V1aWRfdCBtVHlwZVV1aWQ7CisgICAgICAgIFN0cmluZzE2IG1PcFBhY2thZ2VOYW1lOwogICAgICAgICBlZmZlY3RfdXVpZF90IG1VdWlkOworICAgICAgICBpbnQzMl90IG1Qcmlvcml0eTsKKyAgICAgICAgYXVkaW9fdW5pcXVlX2lkX3QgbUlkOwogICAgICAgICBWZWN0b3IgPGVmZmVjdF9wYXJhbV90ICo+IG1QYXJhbXM7CiAgICAgfTsKIApkaWZmIC0tZ2l0IGEvc2VydmljZXMvYXVkaW9wb2xpY3kvc2VydmljZS9BdWRpb1BvbGljeUludGVyZmFjZUltcGwuY3BwIGIvc2VydmljZXMvYXVkaW9wb2xpY3kvc2VydmljZS9BdWRpb1BvbGljeUludGVyZmFjZUltcGwuY3BwCmluZGV4IDczMzdmMDQuLjU5YzhmMTAgMTAwNjQ0Ci0tLSBhL3NlcnZpY2VzL2F1ZGlvcG9saWN5L3NlcnZpY2UvQXVkaW9Qb2xpY3lJbnRlcmZhY2VJbXBsLmNwcAorKysgYi9zZXJ2aWNlcy9hdWRpb3BvbGljeS9zZXJ2aWNlL0F1ZGlvUG9saWN5SW50ZXJmYWNlSW1wbC5jcHAKQEAgLTE3LDEyICsxNywxMiBAQAogI2RlZmluZSBMT0dfVEFHICJBdWRpb1BvbGljeUludGVmYWNlSW1wbCIKIC8vI2RlZmluZSBMT0dfTkRFQlVHIDAKIAotI2luY2x1ZGUgPHV0aWxzL0xvZy5oPgotI2luY2x1ZGUgPG1lZGlhL01lZGlhQW5hbHl0aWNzSXRlbS5oPgotCiAjaW5jbHVkZSAiQXVkaW9Qb2xpY3lTZXJ2aWNlLmgiCi0jaW5jbHVkZSAiU2VydmljZVV0aWxpdGllcy5oIgogI2luY2x1ZGUgIlR5cGVDb252ZXJ0ZXIuaCIKKyNpbmNsdWRlIDxtZWRpYS9BdWRpb1BvbGljeUhlbHBlci5oPgorI2luY2x1ZGUgPG1lZGlhL01lZGlhQW5hbHl0aWNzSXRlbS5oPgorI2luY2x1ZGUgPG1lZGlhdXRpbHMvU2VydmljZVV0aWxpdGllcy5oPgorI2luY2x1ZGUgPHV0aWxzL0xvZy5oPgogCiBuYW1lc3BhY2UgYW5kcm9pZCB7CiAKQEAgLTE4Myw3ICsxODMsNyBAQAogICAgIE11dGV4OjpBdXRvbG9jayBfbChtTG9jayk7CiAKICAgICBjb25zdCB1aWRfdCBjYWxsaW5nVWlkID0gSVBDVGhyZWFkU3RhdGU6OnNlbGYoKS0+Z2V0Q2FsbGluZ1VpZCgpOwotICAgIGlmICghaXNUcnVzdGVkQ2FsbGluZ1VpZChjYWxsaW5nVWlkKSB8fCB1aWQgPT0gKHVpZF90KS0xKSB7CisgICAgaWYgKCFpc0F1ZGlvU2VydmVyT3JNZWRpYVNlcnZlclVpZChjYWxsaW5nVWlkKSB8fCB1aWQgPT0gKHVpZF90KS0xKSB7CiAgICAgICAgIEFMT0dXX0lGKHVpZCAhPSAodWlkX3QpLTEgJiYgdWlkICE9IGNhbGxpbmdVaWQsCiAgICAgICAgICAgICAgICAgIiVzIHVpZCAlZCB0cmllZCB0byBwYXNzIGl0c2VsZiBvZmYgYXMgJWQiLCBfX0ZVTkNUSU9OX18sIGNhbGxpbmdVaWQsIHVpZCk7CiAgICAgICAgIHVpZCA9IGNhbGxpbmdVaWQ7CkBAIC0yMDAsNyArMjAwLDcgQEAKICAgICAgICAgIW1vZGlmeVBob25lU3RhdGVBbGxvd2VkKHBpZCwgdWlkKSkgewogICAgICAgICAvLyBJZiB0aGUgYXBwIHRyaWVzIHRvIHBsYXkgbXVzaWMgdGhyb3VnaCB0aGUgdGVsZXBob255IGRldmljZSBhbmQgZG9lc24ndCBoYXZlIHBlcm1pc3Npb24KICAgICAgICAgLy8gdGhlIGZhbGxiYWNrIHRvIHRoZSBkZWZhdWx0IG91dHB1dCBkZXZpY2UuCi0gICAgICAgIG1BdWRpb1BvbGljeU1hbmFnZXItPnJlbGVhc2VPdXRwdXQoKm91dHB1dCwgKnN0cmVhbSwgc2Vzc2lvbik7CisgICAgICAgIG1BdWRpb1BvbGljeU1hbmFnZXItPnJlbGVhc2VPdXRwdXQoKnBvcnRJZCk7CiAgICAgICAgIGZsYWdzID0gb3JpZ2luYWxGbGFnczsKICAgICAgICAgKnNlbGVjdGVkRGV2aWNlSWQgPSBBVURJT19QT1JUX0hBTkRMRV9OT05FOwogICAgICAgICAqcG9ydElkID0gQVVESU9fUE9SVF9IQU5ETEVfTk9ORTsKQEAgLTIwOCw5MyArMjA4LDExNiBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbmZpZywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmZmxhZ3MsIHNlbGVjdGVkRGV2aWNlSWQsIHBvcnRJZCk7CiAgICAgfQorCisgICAgaWYgKHJlc3VsdCA9PSBOT19FUlJPUikgeworICAgICAgICBzcCA8QXVkaW9QbGF5YmFja0NsaWVudD4gY2xpZW50ID0KKyAgICAgICAgICAgIG5ldyBBdWRpb1BsYXliYWNrQ2xpZW50KCphdHRyLCAqb3V0cHV0LCB1aWQsIHBpZCwgc2Vzc2lvbiwgKnNlbGVjdGVkRGV2aWNlSWQsICpzdHJlYW0pOworICAgICAgICBtQXVkaW9QbGF5YmFja0NsaWVudHMuYWRkKCpwb3J0SWQsIGNsaWVudCk7CisgICAgfQogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKLXN0YXR1c190IEF1ZGlvUG9saWN5U2VydmljZTo6c3RhcnRPdXRwdXQoYXVkaW9faW9faGFuZGxlX3Qgb3V0cHV0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdWRpb19zdHJlYW1fdHlwZV90IHN0cmVhbSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXVkaW9fc2Vzc2lvbl90IHNlc3Npb24pCitzdGF0dXNfdCBBdWRpb1BvbGljeVNlcnZpY2U6OnN0YXJ0T3V0cHV0KGF1ZGlvX3BvcnRfaGFuZGxlX3QgcG9ydElkKQogewotICAgIGlmICh1aW50MzJfdChzdHJlYW0pID49IEFVRElPX1NUUkVBTV9DTlQpIHsKLSAgICAgICAgcmV0dXJuIEJBRF9WQUxVRTsKLSAgICB9CiAgICAgaWYgKG1BdWRpb1BvbGljeU1hbmFnZXIgPT0gTlVMTCkgewogICAgICAgICByZXR1cm4gTk9fSU5JVDsKICAgICB9CiAgICAgQUxPR1YoInN0YXJ0T3V0cHV0KCkiKTsKKyAgICBzcDxBdWRpb1BsYXliYWNrQ2xpZW50PiBjbGllbnQ7CiAgICAgc3A8QXVkaW9Qb2xpY3lFZmZlY3RzPmF1ZGlvUG9saWN5RWZmZWN0czsKICAgICB7CiAgICAgICAgIE11dGV4OjpBdXRvbG9jayBfbChtTG9jayk7CisgICAgICAgIGNvbnN0IHNzaXplX3QgaW5kZXggPSBtQXVkaW9QbGF5YmFja0NsaWVudHMuaW5kZXhPZktleShwb3J0SWQpOworICAgICAgICBpZiAoaW5kZXggPCAwKSB7CisgICAgICAgICAgICBBTE9HRSgiJXMgQXVkaW9UcmFjayBjbGllbnQgbm90IGZvdW5kIGZvciBwb3J0SWQgJWQiLCBfX0ZVTkNUSU9OX18sIHBvcnRJZCk7CisgICAgICAgICAgICByZXR1cm4gSU5WQUxJRF9PUEVSQVRJT047CisgICAgICAgIH0KKyAgICAgICAgY2xpZW50ID0gbUF1ZGlvUGxheWJhY2tDbGllbnRzLnZhbHVlQXQoaW5kZXgpOwogICAgICAgICBhdWRpb1BvbGljeUVmZmVjdHMgPSBtQXVkaW9Qb2xpY3lFZmZlY3RzOwogICAgIH0KICAgICBpZiAoYXVkaW9Qb2xpY3lFZmZlY3RzICE9IDApIHsKICAgICAgICAgLy8gY3JlYXRlIGF1ZGlvIHByb2Nlc3NvcnMgYWNjb3JkaW5nIHRvIHN0cmVhbQotICAgICAgICBzdGF0dXNfdCBzdGF0dXMgPSBhdWRpb1BvbGljeUVmZmVjdHMtPmFkZE91dHB1dFNlc3Npb25FZmZlY3RzKG91dHB1dCwgc3RyZWFtLCBzZXNzaW9uKTsKKyAgICAgICAgc3RhdHVzX3Qgc3RhdHVzID0gYXVkaW9Qb2xpY3lFZmZlY3RzLT5hZGRPdXRwdXRTZXNzaW9uRWZmZWN0cygKKyAgICAgICAgICAgIGNsaWVudC0+aW8sIGNsaWVudC0+c3RyZWFtLCBjbGllbnQtPnNlc3Npb24pOwogICAgICAgICBpZiAoc3RhdHVzICE9IE5PX0VSUk9SICYmIHN0YXR1cyAhPSBBTFJFQURZX0VYSVNUUykgewotICAgICAgICAgICAgQUxPR1coIkZhaWxlZCB0byBhZGQgZWZmZWN0cyBvbiBzZXNzaW9uICVkIiwgc2Vzc2lvbik7CisgICAgICAgICAgICBBTE9HVygiRmFpbGVkIHRvIGFkZCBlZmZlY3RzIG9uIHNlc3Npb24gJWQiLCBjbGllbnQtPnNlc3Npb24pOwogICAgICAgICB9CiAgICAgfQogICAgIE11dGV4OjpBdXRvbG9jayBfbChtTG9jayk7CiAgICAgQXV0b0NhbGxlckNsZWFyIGFjYzsKLSAgICByZXR1cm4gbUF1ZGlvUG9saWN5TWFuYWdlci0+c3RhcnRPdXRwdXQob3V0cHV0LCBzdHJlYW0sIHNlc3Npb24pOworICAgIHN0YXR1c190IHN0YXR1cyA9IG1BdWRpb1BvbGljeU1hbmFnZXItPnN0YXJ0T3V0cHV0KHBvcnRJZCk7CisgICAgaWYgKHN0YXR1cyA9PSBOT19FUlJPUikgeworICAgICAgICBjbGllbnQtPmFjdGl2ZSA9IHRydWU7CisgICAgfQorICAgIHJldHVybiBzdGF0dXM7CiB9CiAKLXN0YXR1c190IEF1ZGlvUG9saWN5U2VydmljZTo6c3RvcE91dHB1dChhdWRpb19pb19oYW5kbGVfdCBvdXRwdXQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXVkaW9fc3RyZWFtX3R5cGVfdCBzdHJlYW0sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXVkaW9fc2Vzc2lvbl90IHNlc3Npb24pCitzdGF0dXNfdCBBdWRpb1BvbGljeVNlcnZpY2U6OnN0b3BPdXRwdXQoYXVkaW9fcG9ydF9oYW5kbGVfdCBwb3J0SWQpCiB7Ci0gICAgaWYgKHVpbnQzMl90KHN0cmVhbSkgPj0gQVVESU9fU1RSRUFNX0NOVCkgewotICAgICAgICByZXR1cm4gQkFEX1ZBTFVFOwotICAgIH0KICAgICBpZiAobUF1ZGlvUG9saWN5TWFuYWdlciA9PSBOVUxMKSB7CiAgICAgICAgIHJldHVybiBOT19JTklUOwogICAgIH0KICAgICBBTE9HVigic3RvcE91dHB1dCgpIik7Ci0gICAgbU91dHB1dENvbW1hbmRUaHJlYWQtPnN0b3BPdXRwdXRDb21tYW5kKG91dHB1dCwgc3RyZWFtLCBzZXNzaW9uKTsKKyAgICBtT3V0cHV0Q29tbWFuZFRocmVhZC0+c3RvcE91dHB1dENvbW1hbmQocG9ydElkKTsKICAgICByZXR1cm4gTk9fRVJST1I7CiB9CiAKLXN0YXR1c190ICBBdWRpb1BvbGljeVNlcnZpY2U6OmRvU3RvcE91dHB1dChhdWRpb19pb19oYW5kbGVfdCBvdXRwdXQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF1ZGlvX3N0cmVhbV90eXBlX3Qgc3RyZWFtLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdWRpb19zZXNzaW9uX3Qgc2Vzc2lvbikKK3N0YXR1c190ICBBdWRpb1BvbGljeVNlcnZpY2U6OmRvU3RvcE91dHB1dChhdWRpb19wb3J0X2hhbmRsZV90IHBvcnRJZCkKIHsKLSAgICBBTE9HVigiZG9TdG9wT3V0cHV0IGZyb20gdGlkICVkIiwgZ2V0dGlkKCkpOworICAgIEFMT0dWKCJkb1N0b3BPdXRwdXQiKTsKKyAgICBzcDxBdWRpb1BsYXliYWNrQ2xpZW50PiBjbGllbnQ7CiAgICAgc3A8QXVkaW9Qb2xpY3lFZmZlY3RzPmF1ZGlvUG9saWN5RWZmZWN0czsKICAgICB7CiAgICAgICAgIE11dGV4OjpBdXRvbG9jayBfbChtTG9jayk7CisKKyAgICAgICAgY29uc3Qgc3NpemVfdCBpbmRleCA9IG1BdWRpb1BsYXliYWNrQ2xpZW50cy5pbmRleE9mS2V5KHBvcnRJZCk7CisgICAgICAgIGlmIChpbmRleCA8IDApIHsKKyAgICAgICAgICAgIEFMT0dFKCIlcyBBdWRpb1RyYWNrIGNsaWVudCBub3QgZm91bmQgZm9yIHBvcnRJZCAlZCIsIF9fRlVOQ1RJT05fXywgcG9ydElkKTsKKyAgICAgICAgICAgIHJldHVybiBJTlZBTElEX09QRVJBVElPTjsKKyAgICAgICAgfQorICAgICAgICBjbGllbnQgPSBtQXVkaW9QbGF5YmFja0NsaWVudHMudmFsdWVBdChpbmRleCk7CiAgICAgICAgIGF1ZGlvUG9saWN5RWZmZWN0cyA9IG1BdWRpb1BvbGljeUVmZmVjdHM7CiAgICAgfQogICAgIGlmIChhdWRpb1BvbGljeUVmZmVjdHMgIT0gMCkgewogICAgICAgICAvLyByZWxlYXNlIGF1ZGlvIHByb2Nlc3NvcnMgZnJvbSB0aGUgc3RyZWFtCi0gICAgICAgIHN0YXR1c190IHN0YXR1cyA9IGF1ZGlvUG9saWN5RWZmZWN0cy0+cmVsZWFzZU91dHB1dFNlc3Npb25FZmZlY3RzKG91dHB1dCwgc3RyZWFtLCBzZXNzaW9uKTsKKyAgICAgICAgc3RhdHVzX3Qgc3RhdHVzID0gYXVkaW9Qb2xpY3lFZmZlY3RzLT5yZWxlYXNlT3V0cHV0U2Vzc2lvbkVmZmVjdHMoCisgICAgICAgICAgICBjbGllbnQtPmlvLCBjbGllbnQtPnN0cmVhbSwgY2xpZW50LT5zZXNzaW9uKTsKICAgICAgICAgaWYgKHN0YXR1cyAhPSBOT19FUlJPUiAmJiBzdGF0dXMgIT0gQUxSRUFEWV9FWElTVFMpIHsKLSAgICAgICAgICAgIEFMT0dXKCJGYWlsZWQgdG8gcmVsZWFzZSBlZmZlY3RzIG9uIHNlc3Npb24gJWQiLCBzZXNzaW9uKTsKKyAgICAgICAgICAgIEFMT0dXKCJGYWlsZWQgdG8gcmVsZWFzZSBlZmZlY3RzIG9uIHNlc3Npb24gJWQiLCBjbGllbnQtPnNlc3Npb24pOwogICAgICAgICB9CiAgICAgfQogICAgIE11dGV4OjpBdXRvbG9jayBfbChtTG9jayk7CiAgICAgQXV0b0NhbGxlckNsZWFyIGFjYzsKLSAgICByZXR1cm4gbUF1ZGlvUG9saWN5TWFuYWdlci0+c3RvcE91dHB1dChvdXRwdXQsIHN0cmVhbSwgc2Vzc2lvbik7CisgICAgc3RhdHVzX3Qgc3RhdHVzID0gbUF1ZGlvUG9saWN5TWFuYWdlci0+c3RvcE91dHB1dChwb3J0SWQpOworICAgIGlmIChzdGF0dXMgPT0gTk9fRVJST1IpIHsKKyAgICAgICAgY2xpZW50LT5hY3RpdmUgPSBmYWxzZTsKKyAgICB9CisgICAgcmV0dXJuIHN0YXR1czsKIH0KIAotdm9pZCBBdWRpb1BvbGljeVNlcnZpY2U6OnJlbGVhc2VPdXRwdXQoYXVkaW9faW9faGFuZGxlX3Qgb3V0cHV0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXVkaW9fc3RyZWFtX3R5cGVfdCBzdHJlYW0sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdWRpb19zZXNzaW9uX3Qgc2Vzc2lvbikKK3ZvaWQgQXVkaW9Qb2xpY3lTZXJ2aWNlOjpyZWxlYXNlT3V0cHV0KGF1ZGlvX3BvcnRfaGFuZGxlX3QgcG9ydElkKQogewogICAgIGlmIChtQXVkaW9Qb2xpY3lNYW5hZ2VyID09IE5VTEwpIHsKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICBBTE9HVigicmVsZWFzZU91dHB1dCgpIik7Ci0gICAgbU91dHB1dENvbW1hbmRUaHJlYWQtPnJlbGVhc2VPdXRwdXRDb21tYW5kKG91dHB1dCwgc3RyZWFtLCBzZXNzaW9uKTsKKyAgICBtT3V0cHV0Q29tbWFuZFRocmVhZC0+cmVsZWFzZU91dHB1dENvbW1hbmQocG9ydElkKTsKIH0KIAotdm9pZCBBdWRpb1BvbGljeVNlcnZpY2U6OmRvUmVsZWFzZU91dHB1dChhdWRpb19pb19oYW5kbGVfdCBvdXRwdXQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF1ZGlvX3N0cmVhbV90eXBlX3Qgc3RyZWFtLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdWRpb19zZXNzaW9uX3Qgc2Vzc2lvbikKK3ZvaWQgQXVkaW9Qb2xpY3lTZXJ2aWNlOjpkb1JlbGVhc2VPdXRwdXQoYXVkaW9fcG9ydF9oYW5kbGVfdCBwb3J0SWQpCiB7CiAgICAgQUxPR1YoImRvUmVsZWFzZU91dHB1dCBmcm9tIHRpZCAlZCIsIGdldHRpZCgpKTsKICAgICBNdXRleDo6QXV0b2xvY2sgX2wobUxvY2spOworICAgIGNvbnN0IHNzaXplX3QgaW5kZXggPSBtQXVkaW9QbGF5YmFja0NsaWVudHMuaW5kZXhPZktleShwb3J0SWQpOworICAgIGlmIChpbmRleCA8IDApIHsKKyAgICAgICAgQUxPR0UoIiVzIEF1ZGlvVHJhY2sgY2xpZW50IG5vdCBmb3VuZCBmb3IgcG9ydElkICVkIiwgX19GVU5DVElPTl9fLCBwb3J0SWQpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIHNwPEF1ZGlvUGxheWJhY2tDbGllbnQ+IGNsaWVudCA9IG1BdWRpb1BsYXliYWNrQ2xpZW50cy52YWx1ZUF0KGluZGV4KTsKKyAgICBtQXVkaW9SZWNvcmRDbGllbnRzLnJlbW92ZUl0ZW0ocG9ydElkKTsKKwogICAgIC8vIGNhbGxlZCBmcm9tIGludGVybmFsIHRocmVhZDogbm8gbmVlZCB0byBjbGVhciBjYWxsZXIgaWRlbnRpdHkKLSAgICBtQXVkaW9Qb2xpY3lNYW5hZ2VyLT5yZWxlYXNlT3V0cHV0KG91dHB1dCwgc3RyZWFtLCBzZXNzaW9uKTsKKyAgICBtQXVkaW9Qb2xpY3lNYW5hZ2VyLT5yZWxlYXNlT3V0cHV0KHBvcnRJZCk7CiB9CiAKIHN0YXR1c190IEF1ZGlvUG9saWN5U2VydmljZTo6Z2V0SW5wdXRGb3JBdHRyKGNvbnN0IGF1ZGlvX2F0dHJpYnV0ZXNfdCAqYXR0ciwKQEAgLTMyMCw3ICszNDMsNyBAQAogCiAgICAgYm9vbCB1cGRhdGVQaWQgPSAocGlkID09IC0xKTsKICAgICBjb25zdCB1aWRfdCBjYWxsaW5nVWlkID0gSVBDVGhyZWFkU3RhdGU6OnNlbGYoKS0+Z2V0Q2FsbGluZ1VpZCgpOwotICAgIGlmICghaXNUcnVzdGVkQ2FsbGluZ1VpZChjYWxsaW5nVWlkKSkgeworICAgIGlmICghaXNBdWRpb1NlcnZlck9yTWVkaWFTZXJ2ZXJVaWQoY2FsbGluZ1VpZCkpIHsKICAgICAgICAgQUxPR1dfSUYodWlkICE9ICh1aWRfdCktMSAmJiB1aWQgIT0gY2FsbGluZ1VpZCwKICAgICAgICAgICAgICAgICAiJXMgdWlkICVkIHRyaWVkIHRvIHBhc3MgaXRzZWxmIG9mZiBhcyAlZCIsIF9fRlVOQ1RJT05fXywgY2FsbGluZ1VpZCwgdWlkKTsKICAgICAgICAgdWlkID0gY2FsbGluZ1VpZDsKQEAgLTM5OCwxNyArNDIxLDEzIEBACiAgICAgICAgIGlmIChzdGF0dXMgIT0gTk9fRVJST1IpIHsKICAgICAgICAgICAgIGlmIChzdGF0dXMgPT0gUEVSTUlTU0lPTl9ERU5JRUQpIHsKICAgICAgICAgICAgICAgICBBdXRvQ2FsbGVyQ2xlYXIgYWNjOwotICAgICAgICAgICAgICAgIG1BdWRpb1BvbGljeU1hbmFnZXItPnJlbGVhc2VJbnB1dCgqaW5wdXQsIHNlc3Npb24pOworICAgICAgICAgICAgICAgIG1BdWRpb1BvbGljeU1hbmFnZXItPnJlbGVhc2VJbnB1dCgqcG9ydElkKTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIHJldHVybiBzdGF0dXM7CiAgICAgICAgIH0KIAotICAgICAgICBzcDxBdWRpb1JlY29yZENsaWVudD4gY2xpZW50ID0KLSAgICAgICAgICAgICAgICBuZXcgQXVkaW9SZWNvcmRDbGllbnQoKmF0dHIsICppbnB1dCwgdWlkLCBwaWQsIG9wUGFja2FnZU5hbWUsIHNlc3Npb24pOwotICAgICAgICBjbGllbnQtPmFjdGl2ZSA9IGZhbHNlOwotICAgICAgICBjbGllbnQtPmlzQ29uY3VycmVudCA9IGZhbHNlOwotICAgICAgICBjbGllbnQtPmlzVmlydHVhbERldmljZSA9IGZhbHNlOyAvL1RPRE8gOiB1cGRhdGUgZnJvbSBBUE0tPmdldElucHV0Rm9yQXR0cigpCi0gICAgICAgIGNsaWVudC0+ZGV2aWNlSWQgPSAqc2VsZWN0ZWREZXZpY2VJZDsKKyAgICAgICAgc3A8QXVkaW9SZWNvcmRDbGllbnQ+IGNsaWVudCA9IG5ldyBBdWRpb1JlY29yZENsaWVudCgqYXR0ciwgKmlucHV0LCB1aWQsIHBpZCwgc2Vzc2lvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqc2VsZWN0ZWREZXZpY2VJZCwgb3BQYWNrYWdlTmFtZSk7CiAgICAgICAgIG1BdWRpb1JlY29yZENsaWVudHMuYWRkKCpwb3J0SWQsIGNsaWVudCk7CiAgICAgfQogCkBAIC00OTYsOCArNTE1LDcgQEAKICAgICBzdGF0dXNfdCBzdGF0dXM7CiAgICAgewogICAgICAgICBBdXRvQ2FsbGVyQ2xlYXIgYWNjOwotICAgICAgICBzdGF0dXMgPSBtQXVkaW9Qb2xpY3lNYW5hZ2VyLT5zdGFydElucHV0KAotICAgICAgICAgICAgICAgICAgICBjbGllbnQtPmlucHV0LCBjbGllbnQtPnNlc3Npb24sICpzaWxlbmNlZCwgJmNvbmN1cnJlbmN5KTsKKyAgICAgICAgc3RhdHVzID0gbUF1ZGlvUG9saWN5TWFuYWdlci0+c3RhcnRJbnB1dChwb3J0SWQsICpzaWxlbmNlZCwgJmNvbmN1cnJlbmN5KTsKIAogICAgIH0KIApAQCAtNTI4LDEwICs1NDYsMTMgQEAKIAogICAgICAgICAgICAgaXRlbS0+c2V0Q1N0cmluZyhrQXVkaW9Qb2xpY3lScXN0U3JjLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdWRpb1NvdXJjZVN0cmluZyhjbGllbnQtPmF0dHJpYnV0ZXMuc291cmNlKS5jX3N0cigpKTsKLSAgICAgICAgICAgIGl0ZW0tPnNldENTdHJpbmcoa0F1ZGlvUG9saWN5UnFzdFBrZywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RkOjpzdHJpbmcoU3RyaW5nOChjbGllbnQtPm9wUGFja2FnZU5hbWUpLnN0cmluZygpKS5jX3N0cigpKTsKICAgICAgICAgICAgIGl0ZW0tPnNldEludDMyKGtBdWRpb1BvbGljeVJxc3RTZXNzaW9uLCBjbGllbnQtPnNlc3Npb24pOwotCisgICAgICAgICAgICBpZiAoY2xpZW50LT5vcFBhY2thZ2VOYW1lLnNpemUoKSAhPSAwKSB7CisgICAgICAgICAgICAgICAgaXRlbS0+c2V0Q1N0cmluZyhrQXVkaW9Qb2xpY3lScXN0UGtnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RkOjpzdHJpbmcoU3RyaW5nOChjbGllbnQtPm9wUGFja2FnZU5hbWUpLnN0cmluZygpKS5jX3N0cigpKTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgaXRlbS0+c2V0Q1N0cmluZyhrQXVkaW9Qb2xpY3lScXN0UGtnLCBzdGQ6OnRvX3N0cmluZyhjbGllbnQtPnVpZCkuY19zdHIoKSk7CisgICAgICAgICAgICB9CiAgICAgICAgICAgICBpdGVtLT5zZXRDU3RyaW5nKAogICAgICAgICAgICAgICAgICAgICBrQXVkaW9Qb2xpY3lScXN0RGV2aWNlLCBnZXREZXZpY2VUeXBlU3RyRm9yUG9ydElkKGNsaWVudC0+ZGV2aWNlSWQpLmNfc3RyKCkpOwogCkBAIC01NTAsOSArNTcxLDE0IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAvLyBrZWVwcyB0aGUgbGFzdCBvZiB0aGUgY2xpZW50cyBtYXJrZWQgYWN0aXZlCiAgICAgICAgICAgICAgICAgICAgICAgICBpdGVtLT5zZXRDU3RyaW5nKGtBdWRpb1BvbGljeUFjdGl2ZVNyYywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXVkaW9Tb3VyY2VTdHJpbmcob3RoZXItPmF0dHJpYnV0ZXMuc291cmNlKS5jX3N0cigpKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW0tPnNldENTdHJpbmcoa0F1ZGlvUG9saWN5QWN0aXZlUGtnLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZDo6c3RyaW5nKFN0cmluZzgob3RoZXItPm9wUGFja2FnZU5hbWUpLnN0cmluZygpKS5jX3N0cigpKTsKICAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW0tPnNldEludDMyKGtBdWRpb1BvbGljeUFjdGl2ZVNlc3Npb24sIG90aGVyLT5zZXNzaW9uKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChvdGhlci0+b3BQYWNrYWdlTmFtZS5zaXplKCkgIT0gMCkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW0tPnNldENTdHJpbmcoa0F1ZGlvUG9saWN5QWN0aXZlUGtnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RkOjpzdHJpbmcoU3RyaW5nOChvdGhlci0+b3BQYWNrYWdlTmFtZSkuc3RyaW5nKCkpLmNfc3RyKCkpOworICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpdGVtLT5zZXRDU3RyaW5nKGtBdWRpb1BvbGljeVJxc3RQa2csCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGQ6OnRvX3N0cmluZyhvdGhlci0+dWlkKS5jX3N0cigpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW0tPnNldENTdHJpbmcoa0F1ZGlvUG9saWN5QWN0aXZlRGV2aWNlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZXREZXZpY2VUeXBlU3RyRm9yUG9ydElkKG90aGVyLT5kZXZpY2VJZCkuY19zdHIoKSk7CiAgICAgICAgICAgICAgICAgICAgIH0KQEAgLTYwMiw3ICs2MjgsNyBAQAogICAgIC8vIGZpbmlzaCB0aGUgcmVjb3JkaW5nIGFwcCBvcAogICAgIGZpbmlzaFJlY29yZGluZyhjbGllbnQtPm9wUGFja2FnZU5hbWUsIGNsaWVudC0+dWlkKTsKICAgICBBdXRvQ2FsbGVyQ2xlYXIgYWNjOwotICAgIHJldHVybiBtQXVkaW9Qb2xpY3lNYW5hZ2VyLT5zdG9wSW5wdXQoY2xpZW50LT5pbnB1dCwgY2xpZW50LT5zZXNzaW9uKTsKKyAgICByZXR1cm4gbUF1ZGlvUG9saWN5TWFuYWdlci0+c3RvcElucHV0KHBvcnRJZCk7CiB9CiAKIHZvaWQgQXVkaW9Qb2xpY3lTZXJ2aWNlOjpyZWxlYXNlSW5wdXQoYXVkaW9fcG9ydF9oYW5kbGVfdCBwb3J0SWQpCkBAIC02MjcsMTUgKzY1MywxNSBAQAogICAgIH0KICAgICBpZiAoYXVkaW9Qb2xpY3lFZmZlY3RzICE9IDApIHsKICAgICAgICAgLy8gcmVsZWFzZSBhdWRpbyBwcm9jZXNzb3JzIGZyb20gdGhlIGlucHV0Ci0gICAgICAgIHN0YXR1c190IHN0YXR1cyA9IGF1ZGlvUG9saWN5RWZmZWN0cy0+cmVsZWFzZUlucHV0RWZmZWN0cyhjbGllbnQtPmlucHV0LCBjbGllbnQtPnNlc3Npb24pOworICAgICAgICBzdGF0dXNfdCBzdGF0dXMgPSBhdWRpb1BvbGljeUVmZmVjdHMtPnJlbGVhc2VJbnB1dEVmZmVjdHMoY2xpZW50LT5pbywgY2xpZW50LT5zZXNzaW9uKTsKICAgICAgICAgaWYoc3RhdHVzICE9IE5PX0VSUk9SKSB7Ci0gICAgICAgICAgICBBTE9HVygiRmFpbGVkIHRvIHJlbGVhc2UgZWZmZWN0cyBvbiBpbnB1dCAlZCIsIGNsaWVudC0+aW5wdXQpOworICAgICAgICAgICAgQUxPR1coIkZhaWxlZCB0byByZWxlYXNlIGVmZmVjdHMgb24gaW5wdXQgJWQiLCBjbGllbnQtPmlvKTsKICAgICAgICAgfQogICAgIH0KICAgICB7CiAgICAgICAgIE11dGV4OjpBdXRvbG9jayBfbChtTG9jayk7CiAgICAgICAgIEF1dG9DYWxsZXJDbGVhciBhY2M7Ci0gICAgICAgIG1BdWRpb1BvbGljeU1hbmFnZXItPnJlbGVhc2VJbnB1dChjbGllbnQtPmlucHV0LCBjbGllbnQtPnNlc3Npb24pOworICAgICAgICBtQXVkaW9Qb2xpY3lNYW5hZ2VyLT5yZWxlYXNlSW5wdXQocG9ydElkKTsKICAgICB9CiB9CiAKQEAgLTgwMywyNyArODI5LDEwMCBAQAogICAgIHJldHVybiBtQXVkaW9Qb2xpY3lNYW5hZ2VyLT5pc1NvdXJjZUFjdGl2ZShzb3VyY2UpOwogfQogCi1zdGF0dXNfdCBBdWRpb1BvbGljeVNlcnZpY2U6OnF1ZXJ5RGVmYXVsdFByZVByb2Nlc3NpbmcoYXVkaW9fc2Vzc2lvbl90IGF1ZGlvU2Vzc2lvbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlZmZlY3RfZGVzY3JpcHRvcl90ICpkZXNjcmlwdG9ycywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCAqY291bnQpCitzdGF0dXNfdCBBdWRpb1BvbGljeVNlcnZpY2U6OmdldEF1ZGlvUG9saWN5RWZmZWN0cyhzcDxBdWRpb1BvbGljeUVmZmVjdHM+JiBhdWRpb1BvbGljeUVmZmVjdHMpCiB7CiAgICAgaWYgKG1BdWRpb1BvbGljeU1hbmFnZXIgPT0gTlVMTCkgewotICAgICAgICAqY291bnQgPSAwOwogICAgICAgICByZXR1cm4gTk9fSU5JVDsKICAgICB9Ci0gICAgc3A8QXVkaW9Qb2xpY3lFZmZlY3RzPmF1ZGlvUG9saWN5RWZmZWN0czsKICAgICB7CiAgICAgICAgIE11dGV4OjpBdXRvbG9jayBfbChtTG9jayk7CiAgICAgICAgIGF1ZGlvUG9saWN5RWZmZWN0cyA9IG1BdWRpb1BvbGljeUVmZmVjdHM7CiAgICAgfQogICAgIGlmIChhdWRpb1BvbGljeUVmZmVjdHMgPT0gMCkgewotICAgICAgICAqY291bnQgPSAwOwogICAgICAgICByZXR1cm4gTk9fSU5JVDsKICAgICB9CisKKyAgICByZXR1cm4gT0s7Cit9CisKK3N0YXR1c190IEF1ZGlvUG9saWN5U2VydmljZTo6cXVlcnlEZWZhdWx0UHJlUHJvY2Vzc2luZyhhdWRpb19zZXNzaW9uX3QgYXVkaW9TZXNzaW9uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVmZmVjdF9kZXNjcmlwdG9yX3QgKmRlc2NyaXB0b3JzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90ICpjb3VudCkKK3sKKyAgICBzcDxBdWRpb1BvbGljeUVmZmVjdHM+YXVkaW9Qb2xpY3lFZmZlY3RzOworICAgIHN0YXR1c190IHN0YXR1cyA9IGdldEF1ZGlvUG9saWN5RWZmZWN0cyhhdWRpb1BvbGljeUVmZmVjdHMpOworICAgIGlmIChzdGF0dXMgIT0gT0spIHsKKyAgICAgICAgKmNvdW50ID0gMDsKKyAgICAgICAgcmV0dXJuIHN0YXR1czsKKyAgICB9CiAgICAgcmV0dXJuIGF1ZGlvUG9saWN5RWZmZWN0cy0+cXVlcnlEZWZhdWx0SW5wdXRFZmZlY3RzKAogICAgICAgICAgICAgKGF1ZGlvX3Nlc3Npb25fdClhdWRpb1Nlc3Npb24sIGRlc2NyaXB0b3JzLCBjb3VudCk7CiB9CiAKK3N0YXR1c190IEF1ZGlvUG9saWN5U2VydmljZTo6YWRkU291cmNlRGVmYXVsdEVmZmVjdChjb25zdCBlZmZlY3RfdXVpZF90ICp0eXBlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFN0cmluZzE2JiBvcFBhY2thZ2VOYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGVmZmVjdF91dWlkX3QgKnV1aWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50MzJfdCBwcmlvcml0eSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdWRpb19zb3VyY2VfdCBzb3VyY2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXVkaW9fdW5pcXVlX2lkX3QqIGlkKQoreworICAgIHNwPEF1ZGlvUG9saWN5RWZmZWN0cz5hdWRpb1BvbGljeUVmZmVjdHM7CisgICAgc3RhdHVzX3Qgc3RhdHVzID0gZ2V0QXVkaW9Qb2xpY3lFZmZlY3RzKGF1ZGlvUG9saWN5RWZmZWN0cyk7CisgICAgaWYgKHN0YXR1cyAhPSBPSykgeworICAgICAgICByZXR1cm4gc3RhdHVzOworICAgIH0KKyAgICBpZiAoIW1vZGlmeURlZmF1bHRBdWRpb0VmZmVjdHNBbGxvd2VkKCkpIHsKKyAgICAgICAgcmV0dXJuIFBFUk1JU1NJT05fREVOSUVEOworICAgIH0KKyAgICByZXR1cm4gYXVkaW9Qb2xpY3lFZmZlY3RzLT5hZGRTb3VyY2VEZWZhdWx0RWZmZWN0KAorICAgICAgICAgICAgdHlwZSwgb3BQYWNrYWdlTmFtZSwgdXVpZCwgcHJpb3JpdHksIHNvdXJjZSwgaWQpOworfQorCitzdGF0dXNfdCBBdWRpb1BvbGljeVNlcnZpY2U6OmFkZFN0cmVhbURlZmF1bHRFZmZlY3QoY29uc3QgZWZmZWN0X3V1aWRfdCAqdHlwZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBTdHJpbmcxNiYgb3BQYWNrYWdlTmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBlZmZlY3RfdXVpZF90ICp1dWlkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludDMyX3QgcHJpb3JpdHksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXVkaW9fdXNhZ2VfdCB1c2FnZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdWRpb191bmlxdWVfaWRfdCogaWQpCit7CisgICAgc3A8QXVkaW9Qb2xpY3lFZmZlY3RzPmF1ZGlvUG9saWN5RWZmZWN0czsKKyAgICBzdGF0dXNfdCBzdGF0dXMgPSBnZXRBdWRpb1BvbGljeUVmZmVjdHMoYXVkaW9Qb2xpY3lFZmZlY3RzKTsKKyAgICBpZiAoc3RhdHVzICE9IE9LKSB7CisgICAgICAgIHJldHVybiBzdGF0dXM7CisgICAgfQorICAgIGlmICghbW9kaWZ5RGVmYXVsdEF1ZGlvRWZmZWN0c0FsbG93ZWQoKSkgeworICAgICAgICByZXR1cm4gUEVSTUlTU0lPTl9ERU5JRUQ7CisgICAgfQorICAgIHJldHVybiBhdWRpb1BvbGljeUVmZmVjdHMtPmFkZFN0cmVhbURlZmF1bHRFZmZlY3QoCisgICAgICAgICAgICB0eXBlLCBvcFBhY2thZ2VOYW1lLCB1dWlkLCBwcmlvcml0eSwgdXNhZ2UsIGlkKTsKK30KKworc3RhdHVzX3QgQXVkaW9Qb2xpY3lTZXJ2aWNlOjpyZW1vdmVTb3VyY2VEZWZhdWx0RWZmZWN0KGF1ZGlvX3VuaXF1ZV9pZF90IGlkKQoreworICAgIHNwPEF1ZGlvUG9saWN5RWZmZWN0cz5hdWRpb1BvbGljeUVmZmVjdHM7CisgICAgc3RhdHVzX3Qgc3RhdHVzID0gZ2V0QXVkaW9Qb2xpY3lFZmZlY3RzKGF1ZGlvUG9saWN5RWZmZWN0cyk7CisgICAgaWYgKHN0YXR1cyAhPSBPSykgeworICAgICAgICByZXR1cm4gc3RhdHVzOworICAgIH0KKyAgICBpZiAoIW1vZGlmeURlZmF1bHRBdWRpb0VmZmVjdHNBbGxvd2VkKCkpIHsKKyAgICAgICAgcmV0dXJuIFBFUk1JU1NJT05fREVOSUVEOworICAgIH0KKyAgICByZXR1cm4gYXVkaW9Qb2xpY3lFZmZlY3RzLT5yZW1vdmVTb3VyY2VEZWZhdWx0RWZmZWN0KGlkKTsKK30KKworc3RhdHVzX3QgQXVkaW9Qb2xpY3lTZXJ2aWNlOjpyZW1vdmVTdHJlYW1EZWZhdWx0RWZmZWN0KGF1ZGlvX3VuaXF1ZV9pZF90IGlkKQoreworICAgIHNwPEF1ZGlvUG9saWN5RWZmZWN0cz5hdWRpb1BvbGljeUVmZmVjdHM7CisgICAgc3RhdHVzX3Qgc3RhdHVzID0gZ2V0QXVkaW9Qb2xpY3lFZmZlY3RzKGF1ZGlvUG9saWN5RWZmZWN0cyk7CisgICAgaWYgKHN0YXR1cyAhPSBPSykgeworICAgICAgICByZXR1cm4gc3RhdHVzOworICAgIH0KKyAgICBpZiAoIW1vZGlmeURlZmF1bHRBdWRpb0VmZmVjdHNBbGxvd2VkKCkpIHsKKyAgICAgICAgcmV0dXJuIFBFUk1JU1NJT05fREVOSUVEOworICAgIH0KKyAgICByZXR1cm4gYXVkaW9Qb2xpY3lFZmZlY3RzLT5yZW1vdmVTdHJlYW1EZWZhdWx0RWZmZWN0KGlkKTsKK30KKwogYm9vbCBBdWRpb1BvbGljeVNlcnZpY2U6OmlzT2ZmbG9hZFN1cHBvcnRlZChjb25zdCBhdWRpb19vZmZsb2FkX2luZm9fdCYgaW5mbykKIHsKICAgICBpZiAobUF1ZGlvUG9saWN5TWFuYWdlciA9PSBOVUxMKSB7CkBAIC05NTUsMjYgKzEwNTQsMjYgQEAKIH0KIAogc3RhdHVzX3QgQXVkaW9Qb2xpY3lTZXJ2aWNlOjpzdGFydEF1ZGlvU291cmNlKGNvbnN0IHN0cnVjdCBhdWRpb19wb3J0X2NvbmZpZyAqc291cmNlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGF1ZGlvX2F0dHJpYnV0ZXNfdCAqYXR0cmlidXRlcywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdWRpb19wYXRjaF9oYW5kbGVfdCAqaGFuZGxlKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGF1ZGlvX2F0dHJpYnV0ZXNfdCAqYXR0cmlidXRlcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdWRpb19wb3J0X2hhbmRsZV90ICpwb3J0SWQpCiB7CiAgICAgTXV0ZXg6OkF1dG9sb2NrIF9sKG1Mb2NrKTsKICAgICBpZiAobUF1ZGlvUG9saWN5TWFuYWdlciA9PSBOVUxMKSB7CiAgICAgICAgIHJldHVybiBOT19JTklUOwogICAgIH0KICAgICBBdXRvQ2FsbGVyQ2xlYXIgYWNjOwotICAgIHJldHVybiBtQXVkaW9Qb2xpY3lNYW5hZ2VyLT5zdGFydEF1ZGlvU291cmNlKHNvdXJjZSwgYXR0cmlidXRlcywgaGFuZGxlLAorICAgIHJldHVybiBtQXVkaW9Qb2xpY3lNYW5hZ2VyLT5zdGFydEF1ZGlvU291cmNlKHNvdXJjZSwgYXR0cmlidXRlcywgcG9ydElkLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIElQQ1RocmVhZFN0YXRlOjpzZWxmKCktPmdldENhbGxpbmdVaWQoKSk7CiB9CiAKLXN0YXR1c190IEF1ZGlvUG9saWN5U2VydmljZTo6c3RvcEF1ZGlvU291cmNlKGF1ZGlvX3BhdGNoX2hhbmRsZV90IGhhbmRsZSkKK3N0YXR1c190IEF1ZGlvUG9saWN5U2VydmljZTo6c3RvcEF1ZGlvU291cmNlKGF1ZGlvX3BvcnRfaGFuZGxlX3QgcG9ydElkKQogewogICAgIE11dGV4OjpBdXRvbG9jayBfbChtTG9jayk7CiAgICAgaWYgKG1BdWRpb1BvbGljeU1hbmFnZXIgPT0gTlVMTCkgewogICAgICAgICByZXR1cm4gTk9fSU5JVDsKICAgICB9CiAgICAgQXV0b0NhbGxlckNsZWFyIGFjYzsKLSAgICByZXR1cm4gbUF1ZGlvUG9saWN5TWFuYWdlci0+c3RvcEF1ZGlvU291cmNlKGhhbmRsZSk7CisgICAgcmV0dXJuIG1BdWRpb1BvbGljeU1hbmFnZXItPnN0b3BBdWRpb1NvdXJjZShwb3J0SWQpOwogfQogCiBzdGF0dXNfdCBBdWRpb1BvbGljeVNlcnZpY2U6OnNldE1hc3Rlck1vbm8oYm9vbCBtb25vKQpAQCAtMTAzNiw0ICsxMTM1LDE4IEBACiAgICAgcmV0dXJuIG1BdWRpb1BvbGljeU1hbmFnZXItPnNldFN1cnJvdW5kRm9ybWF0RW5hYmxlZChhdWRpb0Zvcm1hdCwgZW5hYmxlZCk7CiB9CiAKK3N0YXR1c190IEF1ZGlvUG9saWN5U2VydmljZTo6c2V0QXNzaXN0YW50VWlkKHVpZF90IHVpZCkKK3sKKyAgICBNdXRleDo6QXV0b2xvY2sgX2wobUxvY2spOworICAgIG1VaWRQb2xpY3ktPnNldEFzc2lzdGFudFVpZCh1aWQpOworICAgIHJldHVybiBOT19FUlJPUjsKK30KKworc3RhdHVzX3QgQXVkaW9Qb2xpY3lTZXJ2aWNlOjpzZXRBMTF5U2VydmljZXNVaWRzKGNvbnN0IHN0ZDo6dmVjdG9yPHVpZF90PiYgdWlkcykKK3sKKyAgICBNdXRleDo6QXV0b2xvY2sgX2wobUxvY2spOworICAgIG1VaWRQb2xpY3ktPnNldEExMXlVaWRzKHVpZHMpOworICAgIHJldHVybiBOT19FUlJPUjsKK30KKwogfSAvLyBuYW1lc3BhY2UgYW5kcm9pZApkaWZmIC0tZ2l0IGEvc2VydmljZXMvYXVkaW9wb2xpY3kvc2VydmljZS9BdWRpb1BvbGljeVNlcnZpY2UuY3BwIGIvc2VydmljZXMvYXVkaW9wb2xpY3kvc2VydmljZS9BdWRpb1BvbGljeVNlcnZpY2UuY3BwCmluZGV4IGYzY2RkYzMuLjAxOGQ5ZTMgMTAwNjQ0Ci0tLSBhL3NlcnZpY2VzL2F1ZGlvcG9saWN5L3NlcnZpY2UvQXVkaW9Qb2xpY3lTZXJ2aWNlLmNwcAorKysgYi9zZXJ2aWNlcy9hdWRpb3BvbGljeS9zZXJ2aWNlL0F1ZGlvUG9saWN5U2VydmljZS5jcHAKQEAgLTI2LDcgKzI2LDYgQEAKICNpbmNsdWRlIDxzeXMvdGltZS5oPgogI2luY2x1ZGUgPGJpbmRlci9JU2VydmljZU1hbmFnZXIuaD4KICNpbmNsdWRlIDx1dGlscy9Mb2cuaD4KLSNpbmNsdWRlIDxjdXRpbHMvbXVsdGl1c2VyLmg+CiAjaW5jbHVkZSA8Y3V0aWxzL3Byb3BlcnRpZXMuaD4KICNpbmNsdWRlIDxiaW5kZXIvSVBDVGhyZWFkU3RhdGUuaD4KICNpbmNsdWRlIDxiaW5kZXIvQWN0aXZpdHlNYW5hZ2VyLmg+CkBAIC0zNSwxNiArMzQsMTQgQEAKICNpbmNsdWRlIDx1dGlscy9TdHJpbmcxNi5oPgogI2luY2x1ZGUgPHV0aWxzL3RocmVhZHMuaD4KICNpbmNsdWRlICJBdWRpb1BvbGljeVNlcnZpY2UuaCIKLSNpbmNsdWRlICJTZXJ2aWNlVXRpbGl0aWVzLmgiCiAjaW5jbHVkZSA8aGFyZHdhcmVfbGVnYWN5L3Bvd2VyLmg+CiAjaW5jbHVkZSA8bWVkaWEvQXVkaW9FZmZlY3QuaD4KICNpbmNsdWRlIDxtZWRpYS9BdWRpb1BhcmFtZXRlci5oPgorI2luY2x1ZGUgPG1lZGlhdXRpbHMvU2VydmljZVV0aWxpdGllcy5oPgogCiAjaW5jbHVkZSA8c3lzdGVtL2F1ZGlvLmg+CiAjaW5jbHVkZSA8c3lzdGVtL2F1ZGlvX3BvbGljeS5oPgogCi0jaW5jbHVkZSA8cHJpdmF0ZS9hbmRyb2lkX2ZpbGVzeXN0ZW1fY29uZmlnLmg+Ci0KIG5hbWVzcGFjZSBhbmRyb2lkIHsKIAogc3RhdGljIGNvbnN0IGNoYXIga0RlYWRsb2NrZWRTdHJpbmdbXSA9ICJBdWRpb1BvbGljeVNlcnZpY2UgbWF5IGJlIGRlYWRsb2NrZWRcbiI7CkBAIC03MCw4ICs2Nyw2IEBACiAgICAgewogICAgICAgICBNdXRleDo6QXV0b2xvY2sgX2wobUxvY2spOwogCi0gICAgICAgIC8vIHN0YXJ0IHRvbmUgcGxheWJhY2sgdGhyZWFkCi0gICAgICAgIG1Ub25lUGxheWJhY2tUaHJlYWQgPSBuZXcgQXVkaW9Db21tYW5kVGhyZWFkKFN0cmluZzgoIkFwbVRvbmUiKSwgdGhpcyk7CiAgICAgICAgIC8vIHN0YXJ0IGF1ZGlvIGNvbW1hbmRzIHRocmVhZAogICAgICAgICBtQXVkaW9Db21tYW5kVGhyZWFkID0gbmV3IEF1ZGlvQ29tbWFuZFRocmVhZChTdHJpbmc4KCJBcG1BdWRpbyIpLCB0aGlzKTsKICAgICAgICAgLy8gc3RhcnQgb3V0cHV0IGFjdGl2aXR5IGNvbW1hbmQgdGhyZWFkCkBAIC05Myw3ICs4OCw2IEBACiAKIEF1ZGlvUG9saWN5U2VydmljZTo6fkF1ZGlvUG9saWN5U2VydmljZSgpCiB7Ci0gICAgbVRvbmVQbGF5YmFja1RocmVhZC0+ZXhpdCgpOwogICAgIG1BdWRpb0NvbW1hbmRUaHJlYWQtPmV4aXQoKTsKICAgICBtT3V0cHV0Q29tbWFuZFRocmVhZC0+ZXhpdCgpOwogCkBAIC0xMTgsMTMgKzExMiwxNyBAQAogICAgIE11dGV4OjpBdXRvbG9jayBfbChtTm90aWZpY2F0aW9uQ2xpZW50c0xvY2spOwogCiAgICAgdWlkX3QgdWlkID0gSVBDVGhyZWFkU3RhdGU6OnNlbGYoKS0+Z2V0Q2FsbGluZ1VpZCgpOwotICAgIGlmIChtTm90aWZpY2F0aW9uQ2xpZW50cy5pbmRleE9mS2V5KHVpZCkgPCAwKSB7CisgICAgcGlkX3QgcGlkID0gSVBDVGhyZWFkU3RhdGU6OnNlbGYoKS0+Z2V0Q2FsbGluZ1BpZCgpOworICAgIGludDY0X3QgdG9rZW4gPSAoKGludDY0X3QpdWlkPDwzMikgfCBwaWQ7CisKKyAgICBpZiAobU5vdGlmaWNhdGlvbkNsaWVudHMuaW5kZXhPZktleSh0b2tlbikgPCAwKSB7CiAgICAgICAgIHNwPE5vdGlmaWNhdGlvbkNsaWVudD4gbm90aWZpY2F0aW9uQ2xpZW50ID0gbmV3IE5vdGlmaWNhdGlvbkNsaWVudCh0aGlzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xpZW50LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWlkKTsKLSAgICAgICAgQUxPR1YoInJlZ2lzdGVyQ2xpZW50KCkgY2xpZW50ICVwLCB1aWQgJWQiLCBjbGllbnQuZ2V0KCksIHVpZCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwaWQpOworICAgICAgICBBTE9HVigicmVnaXN0ZXJDbGllbnQoKSBjbGllbnQgJXAsIHVpZCAlZCBwaWQgJWQiLCBjbGllbnQuZ2V0KCksIHVpZCwgcGlkKTsKIAotICAgICAgICBtTm90aWZpY2F0aW9uQ2xpZW50cy5hZGQodWlkLCBub3RpZmljYXRpb25DbGllbnQpOworICAgICAgICBtTm90aWZpY2F0aW9uQ2xpZW50cy5hZGQodG9rZW4sIG5vdGlmaWNhdGlvbkNsaWVudCk7CiAKICAgICAgICAgc3A8SUJpbmRlcj4gYmluZGVyID0gSUludGVyZmFjZTo6YXNCaW5kZXIoY2xpZW50KTsKICAgICAgICAgYmluZGVyLT5saW5rVG9EZWF0aChub3RpZmljYXRpb25DbGllbnQpOwpAQCAtMTM2LDIyICsxMzQsMzMgQEAKICAgICBNdXRleDo6QXV0b2xvY2sgX2wobU5vdGlmaWNhdGlvbkNsaWVudHNMb2NrKTsKIAogICAgIHVpZF90IHVpZCA9IElQQ1RocmVhZFN0YXRlOjpzZWxmKCktPmdldENhbGxpbmdVaWQoKTsKLSAgICBpZiAobU5vdGlmaWNhdGlvbkNsaWVudHMuaW5kZXhPZktleSh1aWQpIDwgMCkgeworICAgIHBpZF90IHBpZCA9IElQQ1RocmVhZFN0YXRlOjpzZWxmKCktPmdldENhbGxpbmdQaWQoKTsKKyAgICBpbnQ2NF90IHRva2VuID0gKChpbnQ2NF90KXVpZDw8MzIpIHwgcGlkOworCisgICAgaWYgKG1Ob3RpZmljYXRpb25DbGllbnRzLmluZGV4T2ZLZXkodG9rZW4pIDwgMCkgewogICAgICAgICByZXR1cm47CiAgICAgfQotICAgIG1Ob3RpZmljYXRpb25DbGllbnRzLnZhbHVlRm9yKHVpZCktPnNldEF1ZGlvUG9ydENhbGxiYWNrc0VuYWJsZWQoZW5hYmxlZCk7CisgICAgbU5vdGlmaWNhdGlvbkNsaWVudHMudmFsdWVGb3IodG9rZW4pLT5zZXRBdWRpb1BvcnRDYWxsYmFja3NFbmFibGVkKGVuYWJsZWQpOwogfQogCiAvLyByZW1vdmVOb3RpZmljYXRpb25DbGllbnQoKSBpcyBjYWxsZWQgd2hlbiB0aGUgY2xpZW50IHByb2Nlc3MgZGllcy4KLXZvaWQgQXVkaW9Qb2xpY3lTZXJ2aWNlOjpyZW1vdmVOb3RpZmljYXRpb25DbGllbnQodWlkX3QgdWlkKQordm9pZCBBdWRpb1BvbGljeVNlcnZpY2U6OnJlbW92ZU5vdGlmaWNhdGlvbkNsaWVudCh1aWRfdCB1aWQsIHBpZF90IHBpZCkKIHsKICAgICB7CiAgICAgICAgIE11dGV4OjpBdXRvbG9jayBfbChtTm90aWZpY2F0aW9uQ2xpZW50c0xvY2spOwotICAgICAgICBtTm90aWZpY2F0aW9uQ2xpZW50cy5yZW1vdmVJdGVtKHVpZCk7CisgICAgICAgIGludDY0X3QgdG9rZW4gPSAoKGludDY0X3QpdWlkPDwzMikgfCBwaWQ7CisgICAgICAgIG1Ob3RpZmljYXRpb25DbGllbnRzLnJlbW92ZUl0ZW0odG9rZW4pOwogICAgIH0KICAgICB7CiAgICAgICAgIE11dGV4OjpBdXRvbG9jayBfbChtTG9jayk7Ci0gICAgICAgIGlmIChtQXVkaW9Qb2xpY3lNYW5hZ2VyKSB7CisgICAgICAgIGJvb2wgaGFzU2FtZVVpZCA9IGZhbHNlOworICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1Ob3RpZmljYXRpb25DbGllbnRzLnNpemUoKTsgaSsrKSB7CisgICAgICAgICAgICBpZiAobU5vdGlmaWNhdGlvbkNsaWVudHMudmFsdWVBdChpKS0+dWlkKCkgPT0gdWlkKSB7CisgICAgICAgICAgICAgICAgaGFzU2FtZVVpZCA9IHRydWU7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgaWYgKG1BdWRpb1BvbGljeU1hbmFnZXIgJiYgIWhhc1NhbWVVaWQpIHsKICAgICAgICAgICAgIC8vIGNhbGxlZCBmcm9tIGJpbmRlciBkZWF0aCBub3RpZmljYXRpb246IG5vIG5lZWQgdG8gY2xlYXIgY2FsbGVyIGlkZW50aXR5CiAgICAgICAgICAgICBtQXVkaW9Qb2xpY3lNYW5hZ2VyLT5yZWxlYXNlUmVzb3VyY2VzRm9yVWlkKHVpZCk7CiAgICAgICAgIH0KQEAgLTIzOSw4ICsyNDgsOSBAQAogCiBBdWRpb1BvbGljeVNlcnZpY2U6Ok5vdGlmaWNhdGlvbkNsaWVudDo6Tm90aWZpY2F0aW9uQ2xpZW50KGNvbnN0IHNwPEF1ZGlvUG9saWN5U2VydmljZT4mIHNlcnZpY2UsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHNwPElBdWRpb1BvbGljeVNlcnZpY2VDbGllbnQ+JiBjbGllbnQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpZF90IHVpZCkKLSAgICA6IG1TZXJ2aWNlKHNlcnZpY2UpLCBtVWlkKHVpZCksIG1BdWRpb1BvbGljeVNlcnZpY2VDbGllbnQoY2xpZW50KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWlkX3QgdWlkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwaWRfdCBwaWQpCisgICAgOiBtU2VydmljZShzZXJ2aWNlKSwgbVVpZCh1aWQpLCBtUGlkKHBpZCksIG1BdWRpb1BvbGljeVNlcnZpY2VDbGllbnQoY2xpZW50KSwKICAgICAgIG1BdWRpb1BvcnRDYWxsYmFja3NFbmFibGVkKGZhbHNlKQogewogfQpAQCAtMjU0LDcgKzI2NCw3IEBACiAgICAgc3A8Tm90aWZpY2F0aW9uQ2xpZW50PiBrZWVwKHRoaXMpOwogICAgIHNwPEF1ZGlvUG9saWN5U2VydmljZT4gc2VydmljZSA9IG1TZXJ2aWNlLnByb21vdGUoKTsKICAgICBpZiAoc2VydmljZSAhPSAwKSB7Ci0gICAgICAgIHNlcnZpY2UtPnJlbW92ZU5vdGlmaWNhdGlvbkNsaWVudChtVWlkKTsKKyAgICAgICAgc2VydmljZS0+cmVtb3ZlTm90aWZpY2F0aW9uQ2xpZW50KG1VaWQsIG1QaWQpOwogICAgIH0KIH0KIApAQCAtMjc1LDcgKzI4NSw3IEBACiB2b2lkIEF1ZGlvUG9saWN5U2VydmljZTo6Tm90aWZpY2F0aW9uQ2xpZW50OjpvbkR5bmFtaWNQb2xpY3lNaXhTdGF0ZVVwZGF0ZSgKICAgICAgICAgY29uc3QgU3RyaW5nOCYgcmVnSWQsIGludDMyX3Qgc3RhdGUpCiB7Ci0gICAgaWYgKG1BdWRpb1BvbGljeVNlcnZpY2VDbGllbnQgIT0gMCAmJiBtdWx0aXVzZXJfZ2V0X2FwcF9pZChtVWlkKSA8IEFJRF9BUFBfU1RBUlQpIHsKKyAgICBpZiAobUF1ZGlvUG9saWN5U2VydmljZUNsaWVudCAhPSAwICYmIGlzU2VydmljZVVpZChtVWlkKSkgewogICAgICAgICBtQXVkaW9Qb2xpY3lTZXJ2aWNlQ2xpZW50LT5vbkR5bmFtaWNQb2xpY3lNaXhTdGF0ZVVwZGF0ZShyZWdJZCwgc3RhdGUpOwogICAgIH0KIH0KQEAgLTI4NSw3ICsyOTUsNyBAQAogICAgICAgICBjb25zdCBhdWRpb19jb25maWdfYmFzZV90ICpjbGllbnRDb25maWcsIGNvbnN0IGF1ZGlvX2NvbmZpZ19iYXNlX3QgKmRldmljZUNvbmZpZywKICAgICAgICAgYXVkaW9fcGF0Y2hfaGFuZGxlX3QgcGF0Y2hIYW5kbGUpCiB7Ci0gICAgaWYgKG1BdWRpb1BvbGljeVNlcnZpY2VDbGllbnQgIT0gMCAmJiBtdWx0aXVzZXJfZ2V0X2FwcF9pZChtVWlkKSA8IEFJRF9BUFBfU1RBUlQpIHsKKyAgICBpZiAobUF1ZGlvUG9saWN5U2VydmljZUNsaWVudCAhPSAwICYmIGlzU2VydmljZVVpZChtVWlkKSkgewogICAgICAgICBtQXVkaW9Qb2xpY3lTZXJ2aWNlQ2xpZW50LT5vblJlY29yZGluZ0NvbmZpZ3VyYXRpb25VcGRhdGUoZXZlbnQsIGNsaWVudEluZm8sCiAgICAgICAgICAgICAgICAgY2xpZW50Q29uZmlnLCBkZXZpY2VDb25maWcsIHBhdGNoSGFuZGxlKTsKICAgICB9CkBAIC0zMjUsMjQgKzMzNSwyMyBAQAogICAgIHJlc3VsdC5hcHBlbmQoYnVmZmVyKTsKICAgICBzbnByaW50ZihidWZmZXIsIFNJWkUsICJDb21tYW5kIFRocmVhZDogJXBcbiIsIG1BdWRpb0NvbW1hbmRUaHJlYWQuZ2V0KCkpOwogICAgIHJlc3VsdC5hcHBlbmQoYnVmZmVyKTsKLSAgICBzbnByaW50ZihidWZmZXIsIFNJWkUsICJUb25lcyBUaHJlYWQ6ICVwXG4iLCBtVG9uZVBsYXliYWNrVGhyZWFkLmdldCgpKTsKLSAgICByZXN1bHQuYXBwZW5kKGJ1ZmZlcik7CiAKICAgICB3cml0ZShmZCwgcmVzdWx0LnN0cmluZygpLCByZXN1bHQuc2l6ZSgpKTsKICAgICByZXR1cm4gTk9fRVJST1I7CiB9CiAKLXZvaWQgQXVkaW9Qb2xpY3lTZXJ2aWNlOjpzZXRSZWNvcmRTaWxlbmNlZCh1aWRfdCB1aWQsIGJvb2wgc2lsZW5jZWQpCit2b2lkIEF1ZGlvUG9saWN5U2VydmljZTo6c2V0QXBwU3RhdGUodWlkX3QgdWlkLCBhcHBfc3RhdGVfdCBzdGF0ZSkKIHsKICAgICB7CiAgICAgICAgIE11dGV4OjpBdXRvbG9jayBfbChtTG9jayk7CiAgICAgICAgIGlmIChtQXVkaW9Qb2xpY3lNYW5hZ2VyKSB7CiAgICAgICAgICAgICBBdXRvQ2FsbGVyQ2xlYXIgYWNjOwotICAgICAgICAgICAgbUF1ZGlvUG9saWN5TWFuYWdlci0+c2V0UmVjb3JkU2lsZW5jZWQodWlkLCBzaWxlbmNlZCk7CisgICAgICAgICAgICBtQXVkaW9Qb2xpY3lNYW5hZ2VyLT5zZXRBcHBTdGF0ZSh1aWQsIHN0YXRlKTsKICAgICAgICAgfQogICAgIH0KICAgICBzcDxJQXVkaW9GbGluZ2VyPiBhZiA9IEF1ZGlvU3lzdGVtOjpnZXRfYXVkaW9fZmxpbmdlcigpOwogICAgIGlmIChhZikgeworICAgICAgICBib29sIHNpbGVuY2VkID0gc3RhdGUgPT0gQVBQX1NUQVRFX0lETEU7CiAgICAgICAgIGFmLT5zZXRSZWNvcmRTaWxlbmNlZCh1aWQsIHNpbGVuY2VkKTsKICAgICB9CiB9CkBAIC0zNjIsOSArMzcxLDYgQEAKICAgICAgICAgaWYgKG1BdWRpb0NvbW1hbmRUaHJlYWQgIT0gMCkgewogICAgICAgICAgICAgbUF1ZGlvQ29tbWFuZFRocmVhZC0+ZHVtcChmZCk7CiAgICAgICAgIH0KLSAgICAgICAgaWYgKG1Ub25lUGxheWJhY2tUaHJlYWQgIT0gMCkgewotICAgICAgICAgICAgbVRvbmVQbGF5YmFja1RocmVhZC0+ZHVtcChmZCk7Ci0gICAgICAgIH0KIAogICAgICAgICBpZiAobUF1ZGlvUG9saWN5TWFuYWdlcikgewogICAgICAgICAgICAgbUF1ZGlvUG9saWN5TWFuYWdlci0+ZHVtcChmZCk7CkBAIC01NzcsMTQgKzU4MywxMiBAQAogICAgIHVwZGF0ZVVpZENhY2hlKHVpZCwgZmFsc2UsIHRydWUpOwogfQogCi1ib29sIEF1ZGlvUG9saWN5U2VydmljZTo6VWlkUG9saWN5Ojppc1NlcnZpY2VVaWQodWlkX3QgdWlkKSBjb25zdCB7Ci0gICAgcmV0dXJuIG11bHRpdXNlcl9nZXRfYXBwX2lkKHVpZCkgPCBBSURfQVBQX1NUQVJUOwotfQotCiB2b2lkIEF1ZGlvUG9saWN5U2VydmljZTo6VWlkUG9saWN5Ojpub3RpZnlTZXJ2aWNlKHVpZF90IHVpZCwgYm9vbCBhY3RpdmUpIHsKICAgICBzcDxBdWRpb1BvbGljeVNlcnZpY2U+IHNlcnZpY2UgPSBtU2VydmljZS5wcm9tb3RlKCk7CiAgICAgaWYgKHNlcnZpY2UgIT0gbnVsbHB0cikgewotICAgICAgICBzZXJ2aWNlLT5zZXRSZWNvcmRTaWxlbmNlZCh1aWQsICFhY3RpdmUpOworICAgICAgICBzZXJ2aWNlLT5zZXRBcHBTdGF0ZSh1aWQsIGFjdGl2ZSA/CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBUFBfU1RBVEVfRk9SRUdST1VORCA6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBUFBfU1RBVEVfSURMRSk7CiAgICAgfQogfQogCkBAIC02MzMsMTMgKzYzNywxOCBAQAogICAgIH0KIH0KIAorYm9vbCBBdWRpb1BvbGljeVNlcnZpY2U6OlVpZFBvbGljeTo6aXNBMTF5VWlkKHVpZF90IHVpZCkKK3sKKyAgICBzdGQ6OnZlY3Rvcjx1aWRfdD46Oml0ZXJhdG9yIGl0ID0gZmluZChtQTExeVVpZHMuYmVnaW4oKSwgbUExMXlVaWRzLmVuZCgpLCB1aWQpOworICAgIHJldHVybiBpdCAhPSBtQTExeVVpZHMuZW5kKCk7Cit9CisKIC8vIC0tLS0tLS0tLS0tICBBdWRpb1BvbGljeVNlcnZpY2U6OkF1ZGlvQ29tbWFuZFRocmVhZCBpbXBsZW1lbnRhdGlvbiAtLS0tLS0tLS0tCiAKIEF1ZGlvUG9saWN5U2VydmljZTo6QXVkaW9Db21tYW5kVGhyZWFkOjpBdWRpb0NvbW1hbmRUaHJlYWQoU3RyaW5nOCBuYW1lLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB3cDxBdWRpb1BvbGljeVNlcnZpY2U+JiBzZXJ2aWNlKQogICAgIDogVGhyZWFkKGZhbHNlKSwgbU5hbWUobmFtZSksIG1TZXJ2aWNlKHNlcnZpY2UpCiB7Ci0gICAgbXBUb25lR2VuZXJhdG9yID0gTlVMTDsKIH0KIAogCkBAIC02NDksNyArNjU4LDYgQEAKICAgICAgICAgcmVsZWFzZV93YWtlX2xvY2sobU5hbWUuc3RyaW5nKCkpOwogICAgIH0KICAgICBtQXVkaW9Db21tYW5kcy5jbGVhcigpOwotICAgIGRlbGV0ZSBtcFRvbmVHZW5lcmF0b3I7CiB9CiAKIHZvaWQgQXVkaW9Qb2xpY3lTZXJ2aWNlOjpBdWRpb0NvbW1hbmRUaHJlYWQ6Om9uRmlyc3RSZWYoKQpAQCAtNjc0LDY4ICs2ODIsNTQgQEAKICAgICAgICAgICAgICAgICBtTGFzdENvbW1hbmQgPSBjb21tYW5kOwogCiAgICAgICAgICAgICAgICAgc3dpdGNoIChjb21tYW5kLT5tQ29tbWFuZCkgewotICAgICAgICAgICAgICAgIGNhc2UgU1RBUlRfVE9ORTogewotICAgICAgICAgICAgICAgICAgICBtTG9jay51bmxvY2soKTsKLSAgICAgICAgICAgICAgICAgICAgVG9uZURhdGEgKmRhdGEgPSAoVG9uZURhdGEgKiljb21tYW5kLT5tUGFyYW0uZ2V0KCk7Ci0gICAgICAgICAgICAgICAgICAgIEFMT0dWKCJBdWRpb0NvbW1hbmRUaHJlYWQoKSBwcm9jZXNzaW5nIHN0YXJ0IHRvbmUgJWQgb24gc3RyZWFtICVkIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhLT5tVHlwZSwgZGF0YS0+bVN0cmVhbSk7Ci0gICAgICAgICAgICAgICAgICAgIGRlbGV0ZSBtcFRvbmVHZW5lcmF0b3I7Ci0gICAgICAgICAgICAgICAgICAgIG1wVG9uZUdlbmVyYXRvciA9IG5ldyBUb25lR2VuZXJhdG9yKGRhdGEtPm1TdHJlYW0sIDEuMCk7Ci0gICAgICAgICAgICAgICAgICAgIG1wVG9uZUdlbmVyYXRvci0+c3RhcnRUb25lKGRhdGEtPm1UeXBlKTsKLSAgICAgICAgICAgICAgICAgICAgbUxvY2subG9jaygpOwotICAgICAgICAgICAgICAgICAgICB9YnJlYWs7Ci0gICAgICAgICAgICAgICAgY2FzZSBTVE9QX1RPTkU6IHsKLSAgICAgICAgICAgICAgICAgICAgbUxvY2sudW5sb2NrKCk7Ci0gICAgICAgICAgICAgICAgICAgIEFMT0dWKCJBdWRpb0NvbW1hbmRUaHJlYWQoKSBwcm9jZXNzaW5nIHN0b3AgdG9uZSIpOwotICAgICAgICAgICAgICAgICAgICBpZiAobXBUb25lR2VuZXJhdG9yICE9IE5VTEwpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIG1wVG9uZUdlbmVyYXRvci0+c3RvcFRvbmUoKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGRlbGV0ZSBtcFRvbmVHZW5lcmF0b3I7Ci0gICAgICAgICAgICAgICAgICAgICAgICBtcFRvbmVHZW5lcmF0b3IgPSBOVUxMOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIG1Mb2NrLmxvY2soKTsKLSAgICAgICAgICAgICAgICAgICAgfWJyZWFrOwogICAgICAgICAgICAgICAgIGNhc2UgU0VUX1ZPTFVNRTogewogICAgICAgICAgICAgICAgICAgICBWb2x1bWVEYXRhICpkYXRhID0gKFZvbHVtZURhdGEgKiljb21tYW5kLT5tUGFyYW0uZ2V0KCk7CiAgICAgICAgICAgICAgICAgICAgIEFMT0dWKCJBdWRpb0NvbW1hbmRUaHJlYWQoKSBwcm9jZXNzaW5nIHNldCB2b2x1bWUgc3RyZWFtICVkLCBcCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9sdW1lICVmLCBvdXRwdXQgJWQiLCBkYXRhLT5tU3RyZWFtLCBkYXRhLT5tVm9sdW1lLCBkYXRhLT5tSU8pOworICAgICAgICAgICAgICAgICAgICBtTG9jay51bmxvY2soKTsKICAgICAgICAgICAgICAgICAgICAgY29tbWFuZC0+bVN0YXR1cyA9IEF1ZGlvU3lzdGVtOjpzZXRTdHJlYW1Wb2x1bWUoZGF0YS0+bVN0cmVhbSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YS0+bVZvbHVtZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YS0+bUlPKTsKKyAgICAgICAgICAgICAgICAgICAgbUxvY2subG9jaygpOwogICAgICAgICAgICAgICAgICAgICB9YnJlYWs7CiAgICAgICAgICAgICAgICAgY2FzZSBTRVRfUEFSQU1FVEVSUzogewogICAgICAgICAgICAgICAgICAgICBQYXJhbWV0ZXJzRGF0YSAqZGF0YSA9IChQYXJhbWV0ZXJzRGF0YSAqKWNvbW1hbmQtPm1QYXJhbS5nZXQoKTsKICAgICAgICAgICAgICAgICAgICAgQUxPR1YoIkF1ZGlvQ29tbWFuZFRocmVhZCgpIHByb2Nlc3Npbmcgc2V0IHBhcmFtZXRlcnMgc3RyaW5nICVzLCBpbyAlZCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YS0+bUtleVZhbHVlUGFpcnMuc3RyaW5nKCksIGRhdGEtPm1JTyk7CisgICAgICAgICAgICAgICAgICAgIG1Mb2NrLnVubG9jaygpOwogICAgICAgICAgICAgICAgICAgICBjb21tYW5kLT5tU3RhdHVzID0gQXVkaW9TeXN0ZW06OnNldFBhcmFtZXRlcnMoZGF0YS0+bUlPLCBkYXRhLT5tS2V5VmFsdWVQYWlycyk7CisgICAgICAgICAgICAgICAgICAgIG1Mb2NrLmxvY2soKTsKICAgICAgICAgICAgICAgICAgICAgfWJyZWFrOwogICAgICAgICAgICAgICAgIGNhc2UgU0VUX1ZPSUNFX1ZPTFVNRTogewogICAgICAgICAgICAgICAgICAgICBWb2ljZVZvbHVtZURhdGEgKmRhdGEgPSAoVm9pY2VWb2x1bWVEYXRhICopY29tbWFuZC0+bVBhcmFtLmdldCgpOwogICAgICAgICAgICAgICAgICAgICBBTE9HVigiQXVkaW9Db21tYW5kVGhyZWFkKCkgcHJvY2Vzc2luZyBzZXQgdm9pY2Ugdm9sdW1lIHZvbHVtZSAlZiIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YS0+bVZvbHVtZSk7CisgICAgICAgICAgICAgICAgICAgIG1Mb2NrLnVubG9jaygpOwogICAgICAgICAgICAgICAgICAgICBjb21tYW5kLT5tU3RhdHVzID0gQXVkaW9TeXN0ZW06OnNldFZvaWNlVm9sdW1lKGRhdGEtPm1Wb2x1bWUpOworICAgICAgICAgICAgICAgICAgICBtTG9jay5sb2NrKCk7CiAgICAgICAgICAgICAgICAgICAgIH1icmVhazsKICAgICAgICAgICAgICAgICBjYXNlIFNUT1BfT1VUUFVUOiB7CiAgICAgICAgICAgICAgICAgICAgIFN0b3BPdXRwdXREYXRhICpkYXRhID0gKFN0b3BPdXRwdXREYXRhICopY29tbWFuZC0+bVBhcmFtLmdldCgpOwotICAgICAgICAgICAgICAgICAgICBBTE9HVigiQXVkaW9Db21tYW5kVGhyZWFkKCkgcHJvY2Vzc2luZyBzdG9wIG91dHB1dCAlZCIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YS0+bUlPKTsKKyAgICAgICAgICAgICAgICAgICAgQUxPR1YoIkF1ZGlvQ29tbWFuZFRocmVhZCgpIHByb2Nlc3Npbmcgc3RvcCBvdXRwdXQgcG9ydElkICVkIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhLT5tUG9ydElkKTsKICAgICAgICAgICAgICAgICAgICAgc3ZjID0gbVNlcnZpY2UucHJvbW90ZSgpOwogICAgICAgICAgICAgICAgICAgICBpZiAoc3ZjID09IDApIHsKICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgIG1Mb2NrLnVubG9jaygpOwotICAgICAgICAgICAgICAgICAgICBzdmMtPmRvU3RvcE91dHB1dChkYXRhLT5tSU8sIGRhdGEtPm1TdHJlYW0sIGRhdGEtPm1TZXNzaW9uKTsKKyAgICAgICAgICAgICAgICAgICAgc3ZjLT5kb1N0b3BPdXRwdXQoZGF0YS0+bVBvcnRJZCk7CiAgICAgICAgICAgICAgICAgICAgIG1Mb2NrLmxvY2soKTsKICAgICAgICAgICAgICAgICAgICAgfWJyZWFrOwogICAgICAgICAgICAgICAgIGNhc2UgUkVMRUFTRV9PVVRQVVQ6IHsKICAgICAgICAgICAgICAgICAgICAgUmVsZWFzZU91dHB1dERhdGEgKmRhdGEgPSAoUmVsZWFzZU91dHB1dERhdGEgKiljb21tYW5kLT5tUGFyYW0uZ2V0KCk7Ci0gICAgICAgICAgICAgICAgICAgIEFMT0dWKCJBdWRpb0NvbW1hbmRUaHJlYWQoKSBwcm9jZXNzaW5nIHJlbGVhc2Ugb3V0cHV0ICVkIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhLT5tSU8pOworICAgICAgICAgICAgICAgICAgICBBTE9HVigiQXVkaW9Db21tYW5kVGhyZWFkKCkgcHJvY2Vzc2luZyByZWxlYXNlIG91dHB1dCBwb3J0SWQgJWQiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEtPm1Qb3J0SWQpOwogICAgICAgICAgICAgICAgICAgICBzdmMgPSBtU2VydmljZS5wcm9tb3RlKCk7CiAgICAgICAgICAgICAgICAgICAgIGlmIChzdmMgPT0gMCkgewogICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgbUxvY2sudW5sb2NrKCk7Ci0gICAgICAgICAgICAgICAgICAgIHN2Yy0+ZG9SZWxlYXNlT3V0cHV0KGRhdGEtPm1JTywgZGF0YS0+bVN0cmVhbSwgZGF0YS0+bVNlc3Npb24pOworICAgICAgICAgICAgICAgICAgICBzdmMtPmRvUmVsZWFzZU91dHB1dChkYXRhLT5tUG9ydElkKTsKICAgICAgICAgICAgICAgICAgICAgbUxvY2subG9jaygpOwogICAgICAgICAgICAgICAgICAgICB9YnJlYWs7CiAgICAgICAgICAgICAgICAgY2FzZSBDUkVBVEVfQVVESU9fUEFUQ0g6IHsKQEAgLTc0NSw3ICs3MzksOSBAQAogICAgICAgICAgICAgICAgICAgICBpZiAoYWYgPT0gMCkgewogICAgICAgICAgICAgICAgICAgICAgICAgY29tbWFuZC0+bVN0YXR1cyA9IFBFUk1JU1NJT05fREVOSUVEOwogICAgICAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICAgICAgbUxvY2sudW5sb2NrKCk7CiAgICAgICAgICAgICAgICAgICAgICAgICBjb21tYW5kLT5tU3RhdHVzID0gYWYtPmNyZWF0ZUF1ZGlvUGF0Y2goJmRhdGEtPm1QYXRjaCwgJmRhdGEtPm1IYW5kbGUpOworICAgICAgICAgICAgICAgICAgICAgICAgbUxvY2subG9jaygpOwogICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgIH0gYnJlYWs7CiAgICAgICAgICAgICAgICAgY2FzZSBSRUxFQVNFX0FVRElPX1BBVENIOiB7CkBAIC03NTUsNyArNzUxLDkgQEAKICAgICAgICAgICAgICAgICAgICAgaWYgKGFmID09IDApIHsKICAgICAgICAgICAgICAgICAgICAgICAgIGNvbW1hbmQtPm1TdGF0dXMgPSBQRVJNSVNTSU9OX0RFTklFRDsKICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIG1Mb2NrLnVubG9jaygpOwogICAgICAgICAgICAgICAgICAgICAgICAgY29tbWFuZC0+bVN0YXR1cyA9IGFmLT5yZWxlYXNlQXVkaW9QYXRjaChkYXRhLT5tSGFuZGxlKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIG1Mb2NrLmxvY2soKTsKICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICB9IGJyZWFrOwogICAgICAgICAgICAgICAgIGNhc2UgVVBEQVRFX0FVRElPUE9SVF9MSVNUOiB7CkBAIC03ODUsNyArNzgzLDkgQEAKICAgICAgICAgICAgICAgICAgICAgaWYgKGFmID09IDApIHsKICAgICAgICAgICAgICAgICAgICAgICAgIGNvbW1hbmQtPm1TdGF0dXMgPSBQRVJNSVNTSU9OX0RFTklFRDsKICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIG1Mb2NrLnVubG9jaygpOwogICAgICAgICAgICAgICAgICAgICAgICAgY29tbWFuZC0+bVN0YXR1cyA9IGFmLT5zZXRBdWRpb1BvcnRDb25maWcoJmRhdGEtPm1Db25maWcpOworICAgICAgICAgICAgICAgICAgICAgICAgbUxvY2subG9jaygpOwogICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgIH0gYnJlYWs7CiAgICAgICAgICAgICAgICAgY2FzZSBEWU5fUE9MSUNZX01JWF9TVEFURV9VUERBVEU6IHsKQEAgLTkwMCwyNyArOTAwLDYgQEAKICAgICByZXR1cm4gTk9fRVJST1I7CiB9CiAKLXZvaWQgQXVkaW9Qb2xpY3lTZXJ2aWNlOjpBdWRpb0NvbW1hbmRUaHJlYWQ6OnN0YXJ0VG9uZUNvbW1hbmQoVG9uZUdlbmVyYXRvcjo6dG9uZV90eXBlIHR5cGUsCi0gICAgICAgIGF1ZGlvX3N0cmVhbV90eXBlX3Qgc3RyZWFtKQotewotICAgIHNwPEF1ZGlvQ29tbWFuZD4gY29tbWFuZCA9IG5ldyBBdWRpb0NvbW1hbmQoKTsKLSAgICBjb21tYW5kLT5tQ29tbWFuZCA9IFNUQVJUX1RPTkU7Ci0gICAgc3A8VG9uZURhdGE+IGRhdGEgPSBuZXcgVG9uZURhdGEoKTsKLSAgICBkYXRhLT5tVHlwZSA9IHR5cGU7Ci0gICAgZGF0YS0+bVN0cmVhbSA9IHN0cmVhbTsKLSAgICBjb21tYW5kLT5tUGFyYW0gPSBkYXRhOwotICAgIEFMT0dWKCJBdWRpb0NvbW1hbmRUaHJlYWQoKSBhZGRpbmcgdG9uZSBzdGFydCB0eXBlICVkLCBzdHJlYW0gJWQiLCB0eXBlLCBzdHJlYW0pOwotICAgIHNlbmRDb21tYW5kKGNvbW1hbmQpOwotfQotCi12b2lkIEF1ZGlvUG9saWN5U2VydmljZTo6QXVkaW9Db21tYW5kVGhyZWFkOjpzdG9wVG9uZUNvbW1hbmQoKQotewotICAgIHNwPEF1ZGlvQ29tbWFuZD4gY29tbWFuZCA9IG5ldyBBdWRpb0NvbW1hbmQoKTsKLSAgICBjb21tYW5kLT5tQ29tbWFuZCA9IFNUT1BfVE9ORTsKLSAgICBBTE9HVigiQXVkaW9Db21tYW5kVGhyZWFkKCkgYWRkaW5nIHRvbmUgc3RvcCIpOwotICAgIHNlbmRDb21tYW5kKGNvbW1hbmQpOwotfQotCiBzdGF0dXNfdCBBdWRpb1BvbGljeVNlcnZpY2U6OkF1ZGlvQ29tbWFuZFRocmVhZDo6dm9sdW1lQ29tbWFuZChhdWRpb19zdHJlYW1fdHlwZV90IHN0cmVhbSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZsb2F0IHZvbHVtZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF1ZGlvX2lvX2hhbmRsZV90IG91dHB1dCwKQEAgLTk2NywzMyArOTQ2LDI1IEBACiAgICAgcmV0dXJuIHNlbmRDb21tYW5kKGNvbW1hbmQsIGRlbGF5TXMpOwogfQogCi12b2lkIEF1ZGlvUG9saWN5U2VydmljZTo6QXVkaW9Db21tYW5kVGhyZWFkOjpzdG9wT3V0cHV0Q29tbWFuZChhdWRpb19pb19oYW5kbGVfdCBvdXRwdXQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdWRpb19zdHJlYW1fdHlwZV90IHN0cmVhbSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF1ZGlvX3Nlc3Npb25fdCBzZXNzaW9uKQordm9pZCBBdWRpb1BvbGljeVNlcnZpY2U6OkF1ZGlvQ29tbWFuZFRocmVhZDo6c3RvcE91dHB1dENvbW1hbmQoYXVkaW9fcG9ydF9oYW5kbGVfdCBwb3J0SWQpCiB7CiAgICAgc3A8QXVkaW9Db21tYW5kPiBjb21tYW5kID0gbmV3IEF1ZGlvQ29tbWFuZCgpOwogICAgIGNvbW1hbmQtPm1Db21tYW5kID0gU1RPUF9PVVRQVVQ7CiAgICAgc3A8U3RvcE91dHB1dERhdGE+IGRhdGEgPSBuZXcgU3RvcE91dHB1dERhdGEoKTsKLSAgICBkYXRhLT5tSU8gPSBvdXRwdXQ7Ci0gICAgZGF0YS0+bVN0cmVhbSA9IHN0cmVhbTsKLSAgICBkYXRhLT5tU2Vzc2lvbiA9IHNlc3Npb247CisgICAgZGF0YS0+bVBvcnRJZCA9IHBvcnRJZDsKICAgICBjb21tYW5kLT5tUGFyYW0gPSBkYXRhOwotICAgIEFMT0dWKCJBdWRpb0NvbW1hbmRUaHJlYWQoKSBhZGRpbmcgc3RvcCBvdXRwdXQgJWQiLCBvdXRwdXQpOworICAgIEFMT0dWKCJBdWRpb0NvbW1hbmRUaHJlYWQoKSBhZGRpbmcgc3RvcCBvdXRwdXQgcG9ydElkICVkIiwgcG9ydElkKTsKICAgICBzZW5kQ29tbWFuZChjb21tYW5kKTsKIH0KIAotdm9pZCBBdWRpb1BvbGljeVNlcnZpY2U6OkF1ZGlvQ29tbWFuZFRocmVhZDo6cmVsZWFzZU91dHB1dENvbW1hbmQoYXVkaW9faW9faGFuZGxlX3Qgb3V0cHV0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXVkaW9fc3RyZWFtX3R5cGVfdCBzdHJlYW0sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdWRpb19zZXNzaW9uX3Qgc2Vzc2lvbikKK3ZvaWQgQXVkaW9Qb2xpY3lTZXJ2aWNlOjpBdWRpb0NvbW1hbmRUaHJlYWQ6OnJlbGVhc2VPdXRwdXRDb21tYW5kKGF1ZGlvX3BvcnRfaGFuZGxlX3QgcG9ydElkKQogewogICAgIHNwPEF1ZGlvQ29tbWFuZD4gY29tbWFuZCA9IG5ldyBBdWRpb0NvbW1hbmQoKTsKICAgICBjb21tYW5kLT5tQ29tbWFuZCA9IFJFTEVBU0VfT1VUUFVUOwogICAgIHNwPFJlbGVhc2VPdXRwdXREYXRhPiBkYXRhID0gbmV3IFJlbGVhc2VPdXRwdXREYXRhKCk7Ci0gICAgZGF0YS0+bUlPID0gb3V0cHV0OwotICAgIGRhdGEtPm1TdHJlYW0gPSBzdHJlYW07Ci0gICAgZGF0YS0+bVNlc3Npb24gPSBzZXNzaW9uOworICAgIGRhdGEtPm1Qb3J0SWQgPSBwb3J0SWQ7CiAgICAgY29tbWFuZC0+bVBhcmFtID0gZGF0YTsKLSAgICBBTE9HVigiQXVkaW9Db21tYW5kVGhyZWFkKCkgYWRkaW5nIHJlbGVhc2Ugb3V0cHV0ICVkIiwgb3V0cHV0KTsKKyAgICBBTE9HVigiQXVkaW9Db21tYW5kVGhyZWFkKCkgYWRkaW5nIHJlbGVhc2Ugb3V0cHV0IHBvcnRJZCAlZCIsIHBvcnRJZCk7CiAgICAgc2VuZENvbW1hbmQoY29tbWFuZCk7CiB9CiAKQEAgLTEyMTIsNiArMTE4Myw3IEBACiAgICAgICAgICAgICAgICAgcGF0Y2ggPSAoKENyZWF0ZUF1ZGlvUGF0Y2hEYXRhICopY29tbWFuZC0+bVBhcmFtLmdldCgpKS0+bVBhdGNoOwogICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICBoYW5kbGUgPSAoKFJlbGVhc2VBdWRpb1BhdGNoRGF0YSAqKWNvbW1hbmQtPm1QYXJhbS5nZXQoKSktPm1IYW5kbGU7CisgICAgICAgICAgICAgICAgbWVtc2V0KCZwYXRjaCwgMCwgc2l6ZW9mKHBhdGNoKSk7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBhdWRpb19wYXRjaF9oYW5kbGVfdCBoYW5kbGUyOwogICAgICAgICAgICAgc3RydWN0IGF1ZGlvX3BhdGNoIHBhdGNoMjsKQEAgLTEyNTYsOCArMTIyOCw2IEBACiAKICAgICAgICAgfSBicmVhazsKIAotICAgICAgICBjYXNlIFNUQVJUX1RPTkU6Ci0gICAgICAgIGNhc2UgU1RPUF9UT05FOgogICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KQEAgLTEzMzAsMjcgKzEzMDAsNiBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3V0cHV0LCBkZWxheU1zKTsKIH0KIAotaW50IEF1ZGlvUG9saWN5U2VydmljZTo6c3RhcnRUb25lKGF1ZGlvX3BvbGljeV90b25lX3QgdG9uZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdWRpb19zdHJlYW1fdHlwZV90IHN0cmVhbSkKLXsKLSAgICBpZiAodG9uZSAhPSBBVURJT19QT0xJQ1lfVE9ORV9JTl9DQUxMX05PVElGSUNBVElPTikgewotICAgICAgICBBTE9HRSgic3RhcnRUb25lOiBpbGxlZ2FsIHRvbmUgcmVxdWVzdGVkICglZCkiLCB0b25lKTsKLSAgICB9Ci0gICAgaWYgKHN0cmVhbSAhPSBBVURJT19TVFJFQU1fVk9JQ0VfQ0FMTCkgewotICAgICAgICBBTE9HRSgic3RhcnRUb25lOiBpbGxlZ2FsIHN0cmVhbSAoJWQpIHJlcXVlc3RlZCBmb3IgdG9uZSAlZCIsIHN0cmVhbSwKLSAgICAgICAgICAgIHRvbmUpOwotICAgIH0KLSAgICBtVG9uZVBsYXliYWNrVGhyZWFkLT5zdGFydFRvbmVDb21tYW5kKFRvbmVHZW5lcmF0b3I6OlRPTkVfU1VQX0NBTExfV0FJVElORywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFVRElPX1NUUkVBTV9WT0lDRV9DQUxMKTsKLSAgICByZXR1cm4gMDsKLX0KLQotaW50IEF1ZGlvUG9saWN5U2VydmljZTo6c3RvcFRvbmUoKQotewotICAgIG1Ub25lUGxheWJhY2tUaHJlYWQtPnN0b3BUb25lQ29tbWFuZCgpOwotICAgIHJldHVybiAwOwotfQotCiBpbnQgQXVkaW9Qb2xpY3lTZXJ2aWNlOjpzZXRWb2ljZVZvbHVtZShmbG9hdCB2b2x1bWUsIGludCBkZWxheU1zKQogewogICAgIHJldHVybiAoaW50KW1BdWRpb0NvbW1hbmRUaHJlYWQtPnZvaWNlVm9sdW1lQ29tbWFuZCh2b2x1bWUsIGRlbGF5TXMpOwpAQCAtMTQwNiw5ICsxMzU1LDYgQEAKIGludCBhcHNfc2V0X3N0cmVhbV92b2x1bWUodm9pZCAqc2VydmljZSwgYXVkaW9fc3RyZWFtX3R5cGVfdCBzdHJlYW0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmxvYXQgdm9sdW1lLCBhdWRpb19pb19oYW5kbGVfdCBvdXRwdXQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGRlbGF5X21zKTsKLWludCBhcHNfc3RhcnRfdG9uZSh2b2lkICpzZXJ2aWNlLCBhdWRpb19wb2xpY3lfdG9uZV90IHRvbmUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdWRpb19zdHJlYW1fdHlwZV90IHN0cmVhbSk7Ci1pbnQgYXBzX3N0b3BfdG9uZSh2b2lkICpzZXJ2aWNlKTsKIGludCBhcHNfc2V0X3ZvaWNlX3ZvbHVtZSh2b2lkICpzZXJ2aWNlLCBmbG9hdCB2b2x1bWUsIGludCBkZWxheV9tcyk7CiB9OwogCmRpZmYgLS1naXQgYS9zZXJ2aWNlcy9hdWRpb3BvbGljeS9zZXJ2aWNlL0F1ZGlvUG9saWN5U2VydmljZS5oIGIvc2VydmljZXMvYXVkaW9wb2xpY3kvc2VydmljZS9BdWRpb1BvbGljeVNlcnZpY2UuaAppbmRleCA0MDdkN2E1Li5lYzMyNTExIDEwMDY0NAotLS0gYS9zZXJ2aWNlcy9hdWRpb3BvbGljeS9zZXJ2aWNlL0F1ZGlvUG9saWN5U2VydmljZS5oCisrKyBiL3NlcnZpY2VzL2F1ZGlvcG9saWN5L3NlcnZpY2UvQXVkaW9Qb2xpY3lTZXJ2aWNlLmgKQEAgLTM4LDggKzM4LDYgQEAKIAogbmFtZXNwYWNlIGFuZHJvaWQgewogCi11c2luZyBuYW1lc3BhY2Ugc3RkOwotCiAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKIGNsYXNzIEF1ZGlvUG9saWN5U2VydmljZSA6CkBAIC04MywxNSArODEsOSBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdWRpb19vdXRwdXRfZmxhZ3NfdCBmbGFncywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXVkaW9fcG9ydF9oYW5kbGVfdCAqc2VsZWN0ZWREZXZpY2VJZCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXVkaW9fcG9ydF9oYW5kbGVfdCAqcG9ydElkKTsKLSAgICB2aXJ0dWFsIHN0YXR1c190IHN0YXJ0T3V0cHV0KGF1ZGlvX2lvX2hhbmRsZV90IG91dHB1dCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF1ZGlvX3N0cmVhbV90eXBlX3Qgc3RyZWFtLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXVkaW9fc2Vzc2lvbl90IHNlc3Npb24pOwotICAgIHZpcnR1YWwgc3RhdHVzX3Qgc3RvcE91dHB1dChhdWRpb19pb19oYW5kbGVfdCBvdXRwdXQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF1ZGlvX3N0cmVhbV90eXBlX3Qgc3RyZWFtLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdWRpb19zZXNzaW9uX3Qgc2Vzc2lvbik7Ci0gICAgdmlydHVhbCB2b2lkIHJlbGVhc2VPdXRwdXQoYXVkaW9faW9faGFuZGxlX3Qgb3V0cHV0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF1ZGlvX3N0cmVhbV90eXBlX3Qgc3RyZWFtLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF1ZGlvX3Nlc3Npb25fdCBzZXNzaW9uKTsKKyAgICB2aXJ0dWFsIHN0YXR1c190IHN0YXJ0T3V0cHV0KGF1ZGlvX3BvcnRfaGFuZGxlX3QgcG9ydElkKTsKKyAgICB2aXJ0dWFsIHN0YXR1c190IHN0b3BPdXRwdXQoYXVkaW9fcG9ydF9oYW5kbGVfdCBwb3J0SWQpOworICAgIHZpcnR1YWwgdm9pZCByZWxlYXNlT3V0cHV0KGF1ZGlvX3BvcnRfaGFuZGxlX3QgcG9ydElkKTsKICAgICB2aXJ0dWFsIHN0YXR1c190IGdldElucHV0Rm9yQXR0cihjb25zdCBhdWRpb19hdHRyaWJ1dGVzX3QgKmF0dHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXVkaW9faW9faGFuZGxlX3QgKmlucHV0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF1ZGlvX3Nlc3Npb25fdCBzZXNzaW9uLApAQCAtMTM0LDYgKzEyNiwyMSBAQAogICAgIHZpcnR1YWwgc3RhdHVzX3QgcXVlcnlEZWZhdWx0UHJlUHJvY2Vzc2luZyhhdWRpb19zZXNzaW9uX3QgYXVkaW9TZXNzaW9uLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVmZmVjdF9kZXNjcmlwdG9yX3QgKmRlc2NyaXB0b3JzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90ICpjb3VudCk7CisgICAgdmlydHVhbCBzdGF0dXNfdCBhZGRTb3VyY2VEZWZhdWx0RWZmZWN0KGNvbnN0IGVmZmVjdF91dWlkX3QgKnR5cGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFN0cmluZzE2JiBvcFBhY2thZ2VOYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBlZmZlY3RfdXVpZF90ICp1dWlkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQzMl90IHByaW9yaXR5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdWRpb19zb3VyY2VfdCBzb3VyY2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF1ZGlvX3VuaXF1ZV9pZF90KiBpZCk7CisgICAgdmlydHVhbCBzdGF0dXNfdCBhZGRTdHJlYW1EZWZhdWx0RWZmZWN0KGNvbnN0IGVmZmVjdF91dWlkX3QgKnR5cGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFN0cmluZzE2JiBvcFBhY2thZ2VOYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBlZmZlY3RfdXVpZF90ICp1dWlkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQzMl90IHByaW9yaXR5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdWRpb191c2FnZV90IHVzYWdlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdWRpb191bmlxdWVfaWRfdCogaWQpOworICAgIHZpcnR1YWwgc3RhdHVzX3QgcmVtb3ZlU291cmNlRGVmYXVsdEVmZmVjdChhdWRpb191bmlxdWVfaWRfdCBpZCk7CisgICAgdmlydHVhbCBzdGF0dXNfdCByZW1vdmVTdHJlYW1EZWZhdWx0RWZmZWN0KGF1ZGlvX3VuaXF1ZV9pZF90IGlkKTsKKwogICAgIHZpcnR1YWwgICAgIHN0YXR1c190ICAgIG9uVHJhbnNhY3QoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90IGNvZGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFBhcmNlbCYgZGF0YSwKQEAgLTE1OSw4ICsxNjYsNiBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZsb2F0IHZvbHVtZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdWRpb19pb19oYW5kbGVfdCBvdXRwdXQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGRlbGF5TXMgPSAwKTsKLSAgICB2aXJ0dWFsIHN0YXR1c190IHN0YXJ0VG9uZShhdWRpb19wb2xpY3lfdG9uZV90IHRvbmUsIGF1ZGlvX3N0cmVhbV90eXBlX3Qgc3RyZWFtKTsKLSAgICB2aXJ0dWFsIHN0YXR1c190IHN0b3BUb25lKCk7CiAgICAgdmlydHVhbCBzdGF0dXNfdCBzZXRWb2ljZVZvbHVtZShmbG9hdCB2b2x1bWUsIGludCBkZWxheU1zID0gMCk7CiAgICAgdmlydHVhbCBib29sIGlzT2ZmbG9hZFN1cHBvcnRlZChjb25zdCBhdWRpb19vZmZsb2FkX2luZm9fdCAmY29uZmlnKTsKIApAQCAtMTk0LDggKzE5OSw4IEBACiAKICAgICB2aXJ0dWFsIHN0YXR1c190IHN0YXJ0QXVkaW9Tb3VyY2UoY29uc3Qgc3RydWN0IGF1ZGlvX3BvcnRfY29uZmlnICpzb3VyY2UsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGF1ZGlvX2F0dHJpYnV0ZXNfdCAqYXR0cmlidXRlcywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXVkaW9fcGF0Y2hfaGFuZGxlX3QgKmhhbmRsZSk7Ci0gICAgdmlydHVhbCBzdGF0dXNfdCBzdG9wQXVkaW9Tb3VyY2UoYXVkaW9fcGF0Y2hfaGFuZGxlX3QgaGFuZGxlKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXVkaW9fcG9ydF9oYW5kbGVfdCAqcG9ydElkKTsKKyAgICB2aXJ0dWFsIHN0YXR1c190IHN0b3BBdWRpb1NvdXJjZShhdWRpb19wb3J0X2hhbmRsZV90IHBvcnRJZCk7CiAKICAgICB2aXJ0dWFsIHN0YXR1c190IHNldE1hc3Rlck1vbm8oYm9vbCBtb25vKTsKICAgICB2aXJ0dWFsIHN0YXR1c190IGdldE1hc3Rlck1vbm8oYm9vbCAqbW9ubyk7CkBAIC0yMDksMTIgKzIxNCwxMSBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgcmVwb3J0ZWQpOwogICAgIHZpcnR1YWwgc3RhdHVzX3Qgc2V0U3Vycm91bmRGb3JtYXRFbmFibGVkKGF1ZGlvX2Zvcm1hdF90IGF1ZGlvRm9ybWF0LCBib29sIGVuYWJsZWQpOwogCi0gICAgICAgICAgICBzdGF0dXNfdCBkb1N0b3BPdXRwdXQoYXVkaW9faW9faGFuZGxlX3Qgb3V0cHV0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF1ZGlvX3N0cmVhbV90eXBlX3Qgc3RyZWFtLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF1ZGlvX3Nlc3Npb25fdCBzZXNzaW9uKTsKLSAgICAgICAgICAgIHZvaWQgZG9SZWxlYXNlT3V0cHV0KGF1ZGlvX2lvX2hhbmRsZV90IG91dHB1dCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF1ZGlvX3N0cmVhbV90eXBlX3Qgc3RyZWFtLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXVkaW9fc2Vzc2lvbl90IHNlc3Npb24pOworICAgIHZpcnR1YWwgc3RhdHVzX3Qgc2V0QXNzaXN0YW50VWlkKHVpZF90IHVpZCk7CisgICAgdmlydHVhbCBzdGF0dXNfdCBzZXRBMTF5U2VydmljZXNVaWRzKGNvbnN0IHN0ZDo6dmVjdG9yPHVpZF90PiYgdWlkcyk7CisKKyAgICAgICAgICAgIHN0YXR1c190IGRvU3RvcE91dHB1dChhdWRpb19wb3J0X2hhbmRsZV90IHBvcnRJZCk7CisgICAgICAgICAgICB2b2lkIGRvUmVsZWFzZU91dHB1dChhdWRpb19wb3J0X2hhbmRsZV90IHBvcnRJZCk7CiAKICAgICAgICAgICAgIHN0YXR1c190IGNsaWVudENyZWF0ZUF1ZGlvUGF0Y2goY29uc3Qgc3RydWN0IGF1ZGlvX3BhdGNoICpwYXRjaCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXVkaW9fcGF0Y2hfaGFuZGxlX3QgKmhhbmRsZSwKQEAgLTIyNCw3ICsyMjgsNyBAQAogICAgICAgICAgICAgdmlydHVhbCBzdGF0dXNfdCBjbGllbnRTZXRBdWRpb1BvcnRDb25maWcoY29uc3Qgc3RydWN0IGF1ZGlvX3BvcnRfY29uZmlnICpjb25maWcsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgZGVsYXlNcyk7CiAKLSAgICAgICAgICAgIHZvaWQgcmVtb3ZlTm90aWZpY2F0aW9uQ2xpZW50KHVpZF90IHVpZCk7CisgICAgICAgICAgICB2b2lkIHJlbW92ZU5vdGlmaWNhdGlvbkNsaWVudCh1aWRfdCB1aWQsIHBpZF90IHBpZCk7CiAgICAgICAgICAgICB2b2lkIG9uQXVkaW9Qb3J0TGlzdFVwZGF0ZSgpOwogICAgICAgICAgICAgdm9pZCBkb09uQXVkaW9Qb3J0TGlzdFVwZGF0ZSgpOwogICAgICAgICAgICAgdm9pZCBvbkF1ZGlvUGF0Y2hMaXN0VXBkYXRlKCk7CkBAIC0yNDksNyArMjUzLDcgQEAKICAgICB2aXJ0dWFsIHN0YXR1c190IHNoZWxsQ29tbWFuZChpbnQgaW4sIGludCBvdXQsIGludCBlcnIsIFZlY3RvcjxTdHJpbmcxNj4mIGFyZ3MpOwogCiAgICAgLy8gU2V0cyB3aGV0aGVyIHRoZSBnaXZlbiBVSUQgcmVjb3JkcyBvbmx5IHNpbGVuY2UKLSAgICB2aXJ0dWFsIHZvaWQgc2V0UmVjb3JkU2lsZW5jZWQodWlkX3QgdWlkLCBib29sIHNpbGVuY2VkKTsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0QXBwU3RhdGUodWlkX3QgdWlkLCBhcHBfc3RhdGVfdCBzdGF0ZSk7CiAKICAgICAvLyBPdmVycmlkZXMgdGhlIFVJRCBzdGF0ZSBhcyBpZiBpdCBpcyBpZGxlCiAgICAgc3RhdHVzX3QgaGFuZGxlU2V0VWlkU3RhdGUoVmVjdG9yPFN0cmluZzE2PiYgYXJncywgaW50IGVycik7CkBAIC0yNjUsNiArMjY5LDggQEAKIAogICAgIHN0ZDo6c3RyaW5nIGdldERldmljZVR5cGVTdHJGb3JQb3J0SWQoYXVkaW9fcG9ydF9oYW5kbGVfdCBwb3J0SWQpOwogCisgICAgc3RhdHVzX3QgZ2V0QXVkaW9Qb2xpY3lFZmZlY3RzKHNwPEF1ZGlvUG9saWN5RWZmZWN0cz4mIGF1ZGlvUG9saWN5RWZmZWN0cyk7CisKICAgICAvLyBJZiByZWNvcmRpbmcgd2UgbmVlZCB0byBtYWtlIHN1cmUgdGhlIFVJRCBpcyBhbGxvd2VkIHRvIGRvIHRoYXQuIElmIHRoZSBVSUQgaXMgaWRsZQogICAgIC8vIHRoZW4gaXQgY2Fubm90IHJlY29yZCBhbmQgZ2V0cyBidWZmZXJzIHdpdGggemVyb3MgLSBzaWxlbmNlLiBBcyBzb29uIGFzIHRoZSBVSUQKICAgICAvLyB0cmFuc2l0aW9ucyB0byBhbiBhY3RpdmUgc3RhdGUgd2Ugd2lsbCBzdGFydCByZXBvcnRpbmcgYnVmZmVycyB3aXRoIGRhdGEuIFRoaXMgYXBwcm9hY2gKQEAgLTI3NCw3ICsyODAsNyBAQAogICAgIGNsYXNzIFVpZFBvbGljeSA6IHB1YmxpYyBCblVpZE9ic2VydmVyLCBwdWJsaWMgdmlydHVhbCBJQmluZGVyOjpEZWF0aFJlY2lwaWVudCB7CiAgICAgcHVibGljOgogICAgICAgICBleHBsaWNpdCBVaWRQb2xpY3kod3A8QXVkaW9Qb2xpY3lTZXJ2aWNlPiBzZXJ2aWNlKQotICAgICAgICAgICAgICAgIDogbVNlcnZpY2Uoc2VydmljZSksIG1PYnNlcnZlclJlZ2lzdGVyZWQoZmFsc2UpIHt9CisgICAgICAgICAgICAgICAgOiBtU2VydmljZShzZXJ2aWNlKSwgbU9ic2VydmVyUmVnaXN0ZXJlZChmYWxzZSksIG1Bc3Npc3RhbnRVaWQoMCkge30KIAogICAgICAgICB2b2lkIHJlZ2lzdGVyU2VsZigpOwogICAgICAgICB2b2lkIHVucmVnaXN0ZXJTZWxmKCk7CkBAIC0yODMsNiArMjg5LDEwIEBACiAgICAgICAgIHZvaWQgYmluZGVyRGllZChjb25zdCB3cDxJQmluZGVyPiAmd2hvKSBvdmVycmlkZTsKIAogICAgICAgICBib29sIGlzVWlkQWN0aXZlKHVpZF90IHVpZCk7CisgICAgICAgIHZvaWQgc2V0QXNzaXN0YW50VWlkKHVpZF90IHVpZCkgeyBtQXNzaXN0YW50VWlkID0gdWlkOyB9CisgICAgICAgIGJvb2wgaXNBc3Npc3RhbnRVaWQodWlkX3QgdWlkKSB7IHJldHVybiB1aWQgPT0gbUFzc2lzdGFudFVpZDsgfQorICAgICAgICB2b2lkIHNldEExMXlVaWRzKGNvbnN0IHN0ZDo6dmVjdG9yPHVpZF90PiYgdWlkcykgeyBtQTExeVVpZHMuY2xlYXIoKTsgbUExMXlVaWRzID0gdWlkczsgfQorICAgICAgICBib29sIGlzQTExeVVpZCh1aWRfdCB1aWQpOwogCiAgICAgICAgIC8vIEJuVWlkT2JzZXJ2ZXIgaW1wbGVtZW50YXRpb24KICAgICAgICAgdm9pZCBvblVpZEFjdGl2ZSh1aWRfdCB1aWQpIG92ZXJyaWRlOwpAQCAtMjkzLDcgKzMwMyw2IEBACiAgICAgICAgIHZvaWQgcmVtb3ZlT3ZlcnJpZGVVaWQodWlkX3QgdWlkKSB7IHVwZGF0ZU92ZXJyaWRlVWlkKHVpZCwgZmFsc2UsIGZhbHNlKTsgfQogCiAgICAgcHJpdmF0ZToKLSAgICAgICAgYm9vbCBpc1NlcnZpY2VVaWQodWlkX3QgdWlkKSBjb25zdDsKICAgICAgICAgdm9pZCBub3RpZnlTZXJ2aWNlKHVpZF90IHVpZCwgYm9vbCBhY3RpdmUpOwogICAgICAgICB2b2lkIHVwZGF0ZU92ZXJyaWRlVWlkKHVpZF90IHVpZCwgYm9vbCBhY3RpdmUsIGJvb2wgaW5zZXJ0KTsKICAgICAgICAgdm9pZCB1cGRhdGVVaWRDYWNoZSh1aWRfdCB1aWQsIGJvb2wgYWN0aXZlLCBib29sIGluc2VydCk7CkBAIC0zMDUsMTIgKzMxNCwxMSBAQAogICAgICAgICBib29sIG1PYnNlcnZlclJlZ2lzdGVyZWQ7CiAgICAgICAgIHN0ZDo6dW5vcmRlcmVkX21hcDx1aWRfdCwgYm9vbD4gbU92ZXJyaWRlVWlkczsKICAgICAgICAgc3RkOjp1bm9yZGVyZWRfbWFwPHVpZF90LCBib29sPiBtQ2FjaGVkVWlkczsKKyAgICAgICAgdWlkX3QgbUFzc2lzdGFudFVpZDsKKyAgICAgICAgc3RkOjp2ZWN0b3I8dWlkX3Q+IG1BMTF5VWlkczsKICAgICB9OwogCi0gICAgLy8gVGhyZWFkIHVzZWQgZm9yIHRvbmUgcGxheWJhY2sgYW5kIHRvIHNlbmQgYXVkaW8gY29uZmlnIGNvbW1hbmRzIHRvIGF1ZGlvIGZsaW5nZXIKLSAgICAvLyBGb3IgdG9uZSBwbGF5YmFjaywgdXNpbmcgYSBzZXBhcmF0ZSB0aHJlYWQgaXMgbmVjZXNzYXJ5IHRvIGF2b2lkIGRlYWRsb2NrIHdpdGggbUxvY2sgYmVjYXVzZQotICAgIC8vIHN0YXJ0VG9uZSgpIGFuZCBzdG9wVG9uZSgpIGFyZSBub3JtYWxseSBjYWxsZWQgd2l0aCBtTG9jayBsb2NrZWQgYW5kIHJlcXVlc3RpbmcgYSB0b25lIHN0YXJ0Ci0gICAgLy8gb3Igc3RvcCB3aWxsIGNhdXNlIGNhbGxzIHRvIEF1ZGlvUG9saWN5U2VydmljZSBhbmQgYW4gYXR0ZW1wdCB0byBsb2NrIG1Mb2NrLgorICAgIC8vIFRocmVhZCB1c2VkIHRvIHNlbmQgYXVkaW8gY29uZmlnIGNvbW1hbmRzIHRvIGF1ZGlvIGZsaW5nZXIKICAgICAvLyBGb3IgYXVkaW8gY29uZmlnIGNvbW1hbmRzLCBpdCBpcyBuZWNlc3NhcnkgYmVjYXVzZSBhdWRpbyBmbGluZ2VyIHJlcXVpcmVzIHRoYXQgdGhlIGNhbGxpbmcKICAgICAvLyBwcm9jZXNzICh1c2VyKSBoYXMgcGVybWlzc2lvbiB0byBtb2RpZnkgYXVkaW8gc2V0dGluZ3MuCiAgICAgY2xhc3MgQXVkaW9Db21tYW5kVGhyZWFkIDogcHVibGljIFRocmVhZCB7CkBAIC0zMTksOCArMzI3LDYgQEAKIAogICAgICAgICAvLyBjb21tYW5kcyBmb3IgdG9uZSBBdWRpb0NvbW1hbmQKICAgICAgICAgZW51bSB7Ci0gICAgICAgICAgICBTVEFSVF9UT05FLAotICAgICAgICAgICAgU1RPUF9UT05FLAogICAgICAgICAgICAgU0VUX1ZPTFVNRSwKICAgICAgICAgICAgIFNFVF9QQVJBTUVURVJTLAogICAgICAgICAgICAgU0VUX1ZPSUNFX1ZPTFVNRSwKQEAgLTM0NSwyMCArMzUxLDEzIEBACiAgICAgICAgIHZpcnR1YWwgICAgIGJvb2wgICAgICAgIHRocmVhZExvb3AoKTsKIAogICAgICAgICAgICAgICAgICAgICB2b2lkICAgICAgICBleGl0KCk7Ci0gICAgICAgICAgICAgICAgICAgIHZvaWQgICAgICAgIHN0YXJ0VG9uZUNvbW1hbmQoVG9uZUdlbmVyYXRvcjo6dG9uZV90eXBlIHR5cGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXVkaW9fc3RyZWFtX3R5cGVfdCBzdHJlYW0pOwotICAgICAgICAgICAgICAgICAgICB2b2lkICAgICAgICBzdG9wVG9uZUNvbW1hbmQoKTsKICAgICAgICAgICAgICAgICAgICAgc3RhdHVzX3QgICAgdm9sdW1lQ29tbWFuZChhdWRpb19zdHJlYW1fdHlwZV90IHN0cmVhbSwgZmxvYXQgdm9sdW1lLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdWRpb19pb19oYW5kbGVfdCBvdXRwdXQsIGludCBkZWxheU1zID0gMCk7CiAgICAgICAgICAgICAgICAgICAgIHN0YXR1c190ICAgIHBhcmFtZXRlcnNDb21tYW5kKGF1ZGlvX2lvX2hhbmRsZV90IGlvSGFuZGxlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICprZXlWYWx1ZVBhaXJzLCBpbnQgZGVsYXlNcyA9IDApOwogICAgICAgICAgICAgICAgICAgICBzdGF0dXNfdCAgICB2b2ljZVZvbHVtZUNvbW1hbmQoZmxvYXQgdm9sdW1lLCBpbnQgZGVsYXlNcyA9IDApOwotICAgICAgICAgICAgICAgICAgICB2b2lkICAgICAgICBzdG9wT3V0cHV0Q29tbWFuZChhdWRpb19pb19oYW5kbGVfdCBvdXRwdXQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF1ZGlvX3N0cmVhbV90eXBlX3Qgc3RyZWFtLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdWRpb19zZXNzaW9uX3Qgc2Vzc2lvbik7Ci0gICAgICAgICAgICAgICAgICAgIHZvaWQgICAgICAgIHJlbGVhc2VPdXRwdXRDb21tYW5kKGF1ZGlvX2lvX2hhbmRsZV90IG91dHB1dCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXVkaW9fc3RyZWFtX3R5cGVfdCBzdHJlYW0sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF1ZGlvX3Nlc3Npb25fdCBzZXNzaW9uKTsKKyAgICAgICAgICAgICAgICAgICAgdm9pZCAgICAgICAgc3RvcE91dHB1dENvbW1hbmQoYXVkaW9fcG9ydF9oYW5kbGVfdCBwb3J0SWQpOworICAgICAgICAgICAgICAgICAgICB2b2lkICAgICAgICByZWxlYXNlT3V0cHV0Q29tbWFuZChhdWRpb19wb3J0X2hhbmRsZV90IHBvcnRJZCk7CiAgICAgICAgICAgICAgICAgICAgIHN0YXR1c190ICAgIHNlbmRDb21tYW5kKHNwPEF1ZGlvQ29tbWFuZD4mIGNvbW1hbmQsIGludCBkZWxheU1zID0gMCk7CiAgICAgICAgICAgICAgICAgICAgIHZvaWQgICAgICAgIGluc2VydENvbW1hbmRfbChzcDxBdWRpb0NvbW1hbmQ+JiBjb21tYW5kLCBpbnQgZGVsYXlNcyA9IDApOwogICAgICAgICAgICAgICAgICAgICBzdGF0dXNfdCAgICBjcmVhdGVBdWRpb1BhdGNoQ29tbWFuZChjb25zdCBzdHJ1Y3QgYXVkaW9fcGF0Y2ggKnBhdGNoLApAQCAtMzkwLDcgKzM4OSw3IEBACiAKICAgICAgICAgICAgIHZvaWQgZHVtcChjaGFyKiBidWZmZXIsIHNpemVfdCBzaXplKTsKIAotICAgICAgICAgICAgaW50IG1Db21tYW5kOyAgIC8vIFNUQVJUX1RPTkUsIFNUT1BfVE9ORSAuLi4KKyAgICAgICAgICAgIGludCBtQ29tbWFuZDsgICAvLyBTRVRfVk9MVU1FLCBTRVRfUEFSQU1FVEVSUy4uLgogICAgICAgICAgICAgbnNlY3NfdCBtVGltZTsgIC8vIHRpbWUgc3RhbXAKICAgICAgICAgICAgIE11dGV4IG1Mb2NrOyAgICAvLyBtdXRleCBhc3NvY2lhdGVkIHRvIG1Db25kCiAgICAgICAgICAgICBDb25kaXRpb24gbUNvbmQ7IC8vIGNvbmRpdGlvbiBmb3Igc3RhdHVzIHJldHVybgpAQCAtNDA2LDEyICs0MDUsNiBAQAogICAgICAgICAgICAgQXVkaW9Db21tYW5kRGF0YSgpIHt9CiAgICAgICAgIH07CiAKLSAgICAgICAgY2xhc3MgVG9uZURhdGEgOiBwdWJsaWMgQXVkaW9Db21tYW5kRGF0YSB7Ci0gICAgICAgIHB1YmxpYzoKLSAgICAgICAgICAgIFRvbmVHZW5lcmF0b3I6OnRvbmVfdHlwZSBtVHlwZTsgLy8gdG9uZSB0eXBlIChTVEFSVF9UT05FIG9ubHkpCi0gICAgICAgICAgICBhdWRpb19zdHJlYW1fdHlwZV90IG1TdHJlYW07ICAgIC8vIHN0cmVhbSB0eXBlIChTVEFSVF9UT05FIG9ubHkpCi0gICAgICAgIH07Ci0KICAgICAgICAgY2xhc3MgVm9sdW1lRGF0YSA6IHB1YmxpYyBBdWRpb0NvbW1hbmREYXRhIHsKICAgICAgICAgcHVibGljOgogICAgICAgICAgICAgYXVkaW9fc3RyZWFtX3R5cGVfdCBtU3RyZWFtOwpAQCAtNDMyLDE2ICs0MjUsMTIgQEAKIAogICAgICAgICBjbGFzcyBTdG9wT3V0cHV0RGF0YSA6IHB1YmxpYyBBdWRpb0NvbW1hbmREYXRhIHsKICAgICAgICAgcHVibGljOgotICAgICAgICAgICAgYXVkaW9faW9faGFuZGxlX3QgbUlPOwotICAgICAgICAgICAgYXVkaW9fc3RyZWFtX3R5cGVfdCBtU3RyZWFtOwotICAgICAgICAgICAgYXVkaW9fc2Vzc2lvbl90IG1TZXNzaW9uOworICAgICAgICAgICAgYXVkaW9fcG9ydF9oYW5kbGVfdCBtUG9ydElkOwogICAgICAgICB9OwogCiAgICAgICAgIGNsYXNzIFJlbGVhc2VPdXRwdXREYXRhIDogcHVibGljIEF1ZGlvQ29tbWFuZERhdGEgewogICAgICAgICBwdWJsaWM6Ci0gICAgICAgICAgICBhdWRpb19pb19oYW5kbGVfdCBtSU87Ci0gICAgICAgICAgICBhdWRpb19zdHJlYW1fdHlwZV90IG1TdHJlYW07Ci0gICAgICAgICAgICBhdWRpb19zZXNzaW9uX3QgbVNlc3Npb247CisgICAgICAgICAgICBhdWRpb19wb3J0X2hhbmRsZV90IG1Qb3J0SWQ7CiAgICAgICAgIH07CiAKICAgICAgICAgY2xhc3MgQ3JlYXRlQXVkaW9QYXRjaERhdGEgOiBwdWJsaWMgQXVkaW9Db21tYW5kRGF0YSB7CkBAIC00NzgsNyArNDY3LDYgQEAKICAgICAgICAgTXV0ZXggICBtTG9jazsKICAgICAgICAgQ29uZGl0aW9uIG1XYWl0V29ya0NWOwogICAgICAgICBWZWN0b3IgPCBzcDxBdWRpb0NvbW1hbmQ+ID4gbUF1ZGlvQ29tbWFuZHM7IC8vIGxpc3Qgb2YgcGVuZGluZyBjb21tYW5kcwotICAgICAgICBUb25lR2VuZXJhdG9yICptcFRvbmVHZW5lcmF0b3I7ICAgICAvLyB0aGUgdG9uZSBnZW5lcmF0b3IKICAgICAgICAgc3A8QXVkaW9Db21tYW5kPiBtTGFzdENvbW1hbmQ7ICAgICAgLy8gbGFzdCBwcm9jZXNzZWQgY29tbWFuZCAodXNlZCBieSBkdW1wKQogICAgICAgICBTdHJpbmc4IG1OYW1lOyAgICAgICAgICAgICAgICAgICAgICAvLyBzdHJpbmcgdXNlZCBieSB3YWtlIGxvY2sgZm8gZGVsYXllZCBjb21tYW5kcwogICAgICAgICB3cDxBdWRpb1BvbGljeVNlcnZpY2U+IG1TZXJ2aWNlOwpAQCAtNTUzLDExICs1NDEsNiBAQAogICAgICAgICAvLyBmdW5jdGlvbiBlbmFibGluZyB0byByZWNlaXZlIHByb3ByaWV0YXJ5IGluZm9ybWF0aW9ucyBkaXJlY3RseSBmcm9tIGF1ZGlvIGhhcmR3YXJlIGludGVyZmFjZSB0byBhdWRpbyBwb2xpY3kgbWFuYWdlci4KICAgICAgICAgdmlydHVhbCBTdHJpbmc4IGdldFBhcmFtZXRlcnMoYXVkaW9faW9faGFuZGxlX3QgaW9IYW5kbGUsIGNvbnN0IFN0cmluZzgmIGtleXMpOwogCi0gICAgICAgIC8vIHJlcXVlc3QgdGhlIHBsYXliYWNrIG9mIGEgdG9uZSBvbiB0aGUgc3BlY2lmaWVkIHN0cmVhbTogdXNlZCBmb3IgaW5zdGFuY2UgdG8gcmVwbGFjZSBub3RpZmljYXRpb24gc291bmRzIHdoZW4gcGxheWluZwotICAgICAgICAvLyBvdmVyIGEgdGVsZXBob255IGRldmljZSBkdXJpbmcgYSBwaG9uZSBjYWxsLgotICAgICAgICB2aXJ0dWFsIHN0YXR1c190IHN0YXJ0VG9uZShhdWRpb19wb2xpY3lfdG9uZV90IHRvbmUsIGF1ZGlvX3N0cmVhbV90eXBlX3Qgc3RyZWFtKTsKLSAgICAgICAgdmlydHVhbCBzdGF0dXNfdCBzdG9wVG9uZSgpOwotCiAgICAgICAgIC8vIHNldCBkb3duIGxpbmsgYXVkaW8gdm9sdW1lLgogICAgICAgICB2aXJ0dWFsIHN0YXR1c190IHNldFZvaWNlVm9sdW1lKGZsb2F0IHZvbHVtZSwgaW50IGRlbGF5TXMgPSAwKTsKIApAQCAtNTk3LDcgKzU4MCw3IEBACiAgICAgcHVibGljOgogICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5vdGlmaWNhdGlvbkNsaWVudChjb25zdCBzcDxBdWRpb1BvbGljeVNlcnZpY2U+JiBzZXJ2aWNlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3A8SUF1ZGlvUG9saWN5U2VydmljZUNsaWVudD4mIGNsaWVudCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpZF90IHVpZCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aWRfdCB1aWQsIHBpZF90IHBpZCk7CiAgICAgICAgIHZpcnR1YWwgICAgICAgICAgICAgfk5vdGlmaWNhdGlvbkNsaWVudCgpOwogCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAgICAgIG9uQXVkaW9Qb3J0TGlzdFVwZGF0ZSgpOwpAQCAtNjEwLDYgKzU5MywxMCBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF1ZGlvX3BhdGNoX2hhbmRsZV90IHBhdGNoSGFuZGxlKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICAgICAgc2V0QXVkaW9Qb3J0Q2FsbGJhY2tzRW5hYmxlZChib29sIGVuYWJsZWQpOwogCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWlkX3QgdWlkKCkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbVVpZDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisKICAgICAgICAgICAgICAgICAvLyBJQmluZGVyOjpEZWF0aFJlY2lwaWVudAogICAgICAgICAgICAgICAgIHZpcnR1YWwgICAgIHZvaWQgICAgICAgIGJpbmRlckRpZWQoY29uc3Qgd3A8SUJpbmRlcj4mIHdobyk7CiAKQEAgLTYxOSwzNCArNjA2LDYxIEBACiAKICAgICAgICAgY29uc3Qgd3A8QXVkaW9Qb2xpY3lTZXJ2aWNlPiAgICAgICAgbVNlcnZpY2U7CiAgICAgICAgIGNvbnN0IHVpZF90ICAgICAgICAgICAgICAgICAgICAgICAgIG1VaWQ7CisgICAgICAgIGNvbnN0IHBpZF90ICAgICAgICAgICAgICAgICAgICAgICAgIG1QaWQ7CiAgICAgICAgIGNvbnN0IHNwPElBdWRpb1BvbGljeVNlcnZpY2VDbGllbnQ+IG1BdWRpb1BvbGljeVNlcnZpY2VDbGllbnQ7CiAgICAgICAgICAgICAgIGJvb2wgICAgICAgICAgICAgICAgICAgICAgICAgIG1BdWRpb1BvcnRDYWxsYmFja3NFbmFibGVkOwogICAgIH07CiAKKyAgICBjbGFzcyBBdWRpb0NsaWVudCA6IHB1YmxpYyB2aXJ0dWFsIFJlZkJhc2UgeworICAgIHB1YmxpYzoKKyAgICAgICAgICAgICAgICBBdWRpb0NsaWVudChjb25zdCBhdWRpb19hdHRyaWJ1dGVzX3QgYXR0cmlidXRlcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBhdWRpb19pb19oYW5kbGVfdCBpbywgdWlkX3QgdWlkLCBwaWRfdCBwaWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgYXVkaW9fc2Vzc2lvbl90IHNlc3Npb24sIGNvbnN0IGF1ZGlvX3BvcnRfaGFuZGxlX3QgZGV2aWNlSWQpIDoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXR0cmlidXRlcyhhdHRyaWJ1dGVzKSwgaW8oaW8pLCB1aWQodWlkKSwgcGlkKHBpZCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlc3Npb24oc2Vzc2lvbiksIGRldmljZUlkKGRldmljZUlkKSwgYWN0aXZlKGZhbHNlKSB7fQorICAgICAgICAgICAgICAgIH5BdWRpb0NsaWVudCgpIG92ZXJyaWRlID0gZGVmYXVsdDsKKworCisgICAgICAgIGNvbnN0IGF1ZGlvX2F0dHJpYnV0ZXNfdCBhdHRyaWJ1dGVzOyAvLyBzb3VyY2UsIGZsYWdzIC4uLgorICAgICAgICBjb25zdCBhdWRpb19pb19oYW5kbGVfdCBpbzsgICAgICAgICAgLy8gYXVkaW8gSEFMIHN0cmVhbSBJTyBoYW5kbGUKKyAgICAgICAgY29uc3QgdWlkX3QgdWlkOyAgICAgICAgICAgICAgICAgICAgIC8vIGNsaWVudCBVSUQKKyAgICAgICAgY29uc3QgcGlkX3QgcGlkOyAgICAgICAgICAgICAgICAgICAgIC8vIGNsaWVudCBQSUQKKyAgICAgICAgY29uc3QgYXVkaW9fc2Vzc2lvbl90IHNlc3Npb247ICAgICAgIC8vIGF1ZGlvIHNlc3Npb24gSUQKKyAgICAgICAgY29uc3QgYXVkaW9fcG9ydF9oYW5kbGVfdCBkZXZpY2VJZDsgIC8vIHNlbGVjdGVkIGlucHV0IGRldmljZSBwb3J0IElECisgICAgICAgICAgICAgIGJvb2wgYWN0aXZlOyAgICAgICAgICAgICAgICAgICAvLyBQbGF5YmFjay9DYXB0dXJlIGlzIGFjdGl2ZSBvciBpbmFjdGl2ZQorICAgIH07CisKICAgICAvLyAtLS0gQXVkaW9SZWNvcmRDbGllbnQgLS0tCiAgICAgLy8gSW5mb3JtYXRpb24gYWJvdXQgZWFjaCByZWdpc3RlcmVkIEF1ZGlvUmVjb3JkIGNsaWVudAogICAgIC8vIChiZXR3ZWVuIGNhbGxzIHRvIGdldElucHV0Rm9yQXR0cigpIGFuZCByZWxlYXNlSW5wdXQoKSkKLSAgICBjbGFzcyBBdWRpb1JlY29yZENsaWVudCA6IHB1YmxpYyBSZWZCYXNlIHsKKyAgICBjbGFzcyBBdWRpb1JlY29yZENsaWVudCA6IHB1YmxpYyBBdWRpb0NsaWVudCB7CiAgICAgcHVibGljOgogICAgICAgICAgICAgICAgIEF1ZGlvUmVjb3JkQ2xpZW50KGNvbnN0IGF1ZGlvX2F0dHJpYnV0ZXNfdCBhdHRyaWJ1dGVzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGF1ZGlvX2lvX2hhbmRsZV90IGlucHV0LCB1aWRfdCB1aWQsIHBpZF90IHBpZCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBTdHJpbmcxNiYgb3BQYWNrYWdlTmFtZSwgY29uc3QgYXVkaW9fc2Vzc2lvbl90IHNlc3Npb24pIDoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXR0cmlidXRlcyhhdHRyaWJ1dGVzKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5wdXQoaW5wdXQpLCB1aWQodWlkKSwgcGlkKHBpZCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wUGFja2FnZU5hbWUob3BQYWNrYWdlTmFtZSksIHNlc3Npb24oc2Vzc2lvbiksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFjdGl2ZShmYWxzZSksIGlzQ29uY3VycmVudChmYWxzZSksIGlzVmlydHVhbERldmljZShmYWxzZSkge30KLSAgICAgICAgdmlydHVhbCB+QXVkaW9SZWNvcmRDbGllbnQoKSB7fQorICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBhdWRpb19pb19oYW5kbGVfdCBpbywgdWlkX3QgdWlkLCBwaWRfdCBwaWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGF1ZGlvX3Nlc3Npb25fdCBzZXNzaW9uLCBjb25zdCBhdWRpb19wb3J0X2hhbmRsZV90IGRldmljZUlkLAorICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBTdHJpbmcxNiYgb3BQYWNrYWdlTmFtZSkgOgorICAgICAgICAgICAgICAgICAgICBBdWRpb0NsaWVudChhdHRyaWJ1dGVzLCBpbywgdWlkLCBwaWQsIHNlc3Npb24sIGRldmljZUlkKSwKKyAgICAgICAgICAgICAgICAgICAgb3BQYWNrYWdlTmFtZShvcFBhY2thZ2VOYW1lKSwgaXNDb25jdXJyZW50KGZhbHNlKSwgaXNWaXJ0dWFsRGV2aWNlKGZhbHNlKSB7fQorICAgICAgICAgICAgICAgIH5BdWRpb1JlY29yZENsaWVudCgpIG92ZXJyaWRlID0gZGVmYXVsdDsKIAotICAgICAgICBjb25zdCBhdWRpb19hdHRyaWJ1dGVzX3QgYXR0cmlidXRlczsgLy8gc291cmNlLCBmbGFncyAuLi4KLSAgICAgICAgY29uc3QgYXVkaW9faW9faGFuZGxlX3QgaW5wdXQ7ICAgICAgIC8vIGF1ZGlvIEhBTCBpbnB1dCBJTyBoYW5kbGUKLSAgICAgICAgY29uc3QgdWlkX3QgdWlkOyAgICAgICAgICAgICAgICAgICAgIC8vIGNsaWVudCBVSUQKLSAgICAgICAgY29uc3QgcGlkX3QgcGlkOyAgICAgICAgICAgICAgICAgICAgIC8vIGNsaWVudCBQSUQKICAgICAgICAgY29uc3QgU3RyaW5nMTYgb3BQYWNrYWdlTmFtZTsgICAgICAgIC8vIGNsaWVudCBwYWNrYWdlIG5hbWUKLSAgICAgICAgY29uc3QgYXVkaW9fc2Vzc2lvbl90IHNlc3Npb247ICAgICAgIC8vIGF1ZGlvIHNlc3Npb24gSUQKLSAgICAgICAgYm9vbCBhY3RpdmU7ICAgICAgICAgICAgICAgICAgIC8vIENhcHR1cmUgaXMgYWN0aXZlIG9yIGluYWN0aXZlCiAgICAgICAgIGJvb2wgaXNDb25jdXJyZW50OyAgICAgICAgICAgICAvLyBpcyBhbGxvd2VkIHRvIGNvbmN1cnJlbnQgY2FwdHVyZQogICAgICAgICBib29sIGlzVmlydHVhbERldmljZTsgICAgICAgICAgLy8gdXNlcyB2aXJ0dWFsIGRldmljZTogdXBkYXRlZCBieSBBUE06OmdldElucHV0Rm9yQXR0cigpCi0gICAgICAgIGF1ZGlvX3BvcnRfaGFuZGxlX3QgZGV2aWNlSWQ7ICAvLyBzZWxlY3RlZCBpbnB1dCBkZXZpY2UgcG9ydCBJRAorICAgIH07CisKKyAgICAvLyAtLS0gQXVkaW9QbGF5YmFja0NsaWVudCAtLS0KKyAgICAvLyBJbmZvcm1hdGlvbiBhYm91dCBlYWNoIHJlZ2lzdGVyZWQgQXVkaW9UcmFjayBjbGllbnQKKyAgICAvLyAoYmV0d2VlbiBjYWxscyB0byBnZXRPdXRwdXRGb3JBdHRyKCkgYW5kIHJlbGVhc2VPdXRwdXQoKSkKKyAgICBjbGFzcyBBdWRpb1BsYXliYWNrQ2xpZW50IDogcHVibGljIEF1ZGlvQ2xpZW50IHsKKyAgICBwdWJsaWM6CisgICAgICAgICAgICAgICAgQXVkaW9QbGF5YmFja0NsaWVudChjb25zdCBhdWRpb19hdHRyaWJ1dGVzX3QgYXR0cmlidXRlcywKKyAgICAgICAgICAgICAgICAgICAgICBjb25zdCBhdWRpb19pb19oYW5kbGVfdCBpbywgdWlkX3QgdWlkLCBwaWRfdCBwaWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgYXVkaW9fc2Vzc2lvbl90IHNlc3Npb24sIGF1ZGlvX3BvcnRfaGFuZGxlX3QgZGV2aWNlSWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXVkaW9fc3RyZWFtX3R5cGVfdCBzdHJlYW0pIDoKKyAgICAgICAgICAgICAgICAgICAgQXVkaW9DbGllbnQoYXR0cmlidXRlcywgaW8sIHVpZCwgcGlkLCBzZXNzaW9uLCBkZXZpY2VJZCksIHN0cmVhbShzdHJlYW0pIHt9CisgICAgICAgICAgICAgICAgfkF1ZGlvUGxheWJhY2tDbGllbnQoKSBvdmVycmlkZSA9IGRlZmF1bHQ7CisKKyAgICAgICAgY29uc3QgYXVkaW9fc3RyZWFtX3R5cGVfdCBzdHJlYW07CiAgICAgfTsKIAogICAgIC8vIEEgY2xhc3MgYXV0b21hdGljYWxseSBjbGVhcmluZyBhbmQgcmVzdG9yaW5nIGJpbmRlciBjYWxsZXIgaWRlbnRpdHkgaW5zaWRlCkBAIC02NzYsMTQgKzY5MCwxMyBAQAogICAgIC8vIG1Mb2NrIHByb3RlY3RzIEF1ZGlvUG9saWN5TWFuYWdlciBtZXRob2RzIHRoYXQgY2FuIGNhbGwgaW50byBhdWRpbyBmbGluZ2VyCiAgICAgLy8gYW5kIHBvc3NpYmx5IGJhY2sgaW4gdG8gYXVkaW8gcG9saWN5IHNlcnZpY2UgYW5kIGFjcXVpcmUgbUVmZmVjdHNMb2NrLgogICAgIHNwPEF1ZGlvQ29tbWFuZFRocmVhZD4gbUF1ZGlvQ29tbWFuZFRocmVhZDsgICAgIC8vIGF1ZGlvIGNvbW1hbmRzIHRocmVhZAotICAgIHNwPEF1ZGlvQ29tbWFuZFRocmVhZD4gbVRvbmVQbGF5YmFja1RocmVhZDsgICAgIC8vIHRvbmUgcGxheWJhY2sgdGhyZWFkCiAgICAgc3A8QXVkaW9Db21tYW5kVGhyZWFkPiBtT3V0cHV0Q29tbWFuZFRocmVhZDsgICAgLy8gcHJvY2VzcyBzdG9wIGFuZCByZWxlYXNlIG91dHB1dAogICAgIHN0cnVjdCBhdWRpb19wb2xpY3lfZGV2aWNlICptcEF1ZGlvUG9saWN5RGV2OwogICAgIHN0cnVjdCBhdWRpb19wb2xpY3kgKm1wQXVkaW9Qb2xpY3k7CiAgICAgQXVkaW9Qb2xpY3lJbnRlcmZhY2UgKm1BdWRpb1BvbGljeU1hbmFnZXI7CiAgICAgQXVkaW9Qb2xpY3lDbGllbnQgKm1BdWRpb1BvbGljeUNsaWVudDsKIAotICAgIERlZmF1bHRLZXllZFZlY3RvcjwgdWlkX3QsIHNwPE5vdGlmaWNhdGlvbkNsaWVudD4gPiAgICBtTm90aWZpY2F0aW9uQ2xpZW50czsKKyAgICBEZWZhdWx0S2V5ZWRWZWN0b3I8IGludDY0X3QsIHNwPE5vdGlmaWNhdGlvbkNsaWVudD4gPiAgICBtTm90aWZpY2F0aW9uQ2xpZW50czsKICAgICBNdXRleCBtTm90aWZpY2F0aW9uQ2xpZW50c0xvY2s7ICAvLyBwcm90ZWN0cyBtTm90aWZpY2F0aW9uQ2xpZW50cwogICAgIC8vIE1hbmFnZSBhbGwgZWZmZWN0cyBjb25maWd1cmVkIGluIGF1ZGlvX2VmZmVjdHMuY29uZgogICAgIHNwPEF1ZGlvUG9saWN5RWZmZWN0cz4gbUF1ZGlvUG9saWN5RWZmZWN0czsKQEAgLTY5MSw2ICs3MDQsNyBAQAogCiAgICAgc3A8VWlkUG9saWN5PiBtVWlkUG9saWN5OwogICAgIERlZmF1bHRLZXllZFZlY3RvcjwgYXVkaW9fcG9ydF9oYW5kbGVfdCwgc3A8QXVkaW9SZWNvcmRDbGllbnQ+ID4gICBtQXVkaW9SZWNvcmRDbGllbnRzOworICAgIERlZmF1bHRLZXllZFZlY3RvcjwgYXVkaW9fcG9ydF9oYW5kbGVfdCwgc3A8QXVkaW9QbGF5YmFja0NsaWVudD4gPiAgIG1BdWRpb1BsYXliYWNrQ2xpZW50czsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIGFuZHJvaWQKZGlmZiAtLWdpdCBhL3NlcnZpY2VzL2F1ZGlvcG9saWN5L3Rlc3RzL0FuZHJvaWQubWsgYi9zZXJ2aWNlcy9hdWRpb3BvbGljeS90ZXN0cy9BbmRyb2lkLm1rCmluZGV4IGE0M2RhZWEuLjUxMzMxMmUgMTAwNjQ0Ci0tLSBhL3NlcnZpY2VzL2F1ZGlvcG9saWN5L3Rlc3RzL0FuZHJvaWQubWsKKysrIGIvc2VydmljZXMvYXVkaW9wb2xpY3kvdGVzdHMvQW5kcm9pZC5tawpAQCAtNiw3ICs2LDcgQEAKICAgZnJhbWV3b3Jrcy9hdi9zZXJ2aWNlcy9hdWRpb3BvbGljeSBcCiAgIGZyYW1ld29ya3MvYXYvc2VydmljZXMvYXVkaW9wb2xpY3kvY29tbW9uL2luY2x1ZGUgXAogICBmcmFtZXdvcmtzL2F2L3NlcnZpY2VzL2F1ZGlvcG9saWN5L2VuZ2luZS9pbnRlcmZhY2UgXAotICBmcmFtZXdvcmtzL2F2L3NlcnZpY2VzL2F1ZGlvcG9saWN5L3V0aWxpdGllcworICAkKGNhbGwgaW5jbHVkZS1wYXRoLWZvciwgYXVkaW8tdXRpbHMpIFwKIAogTE9DQUxfU0hBUkVEX0xJQlJBUklFUyA6PSBcCiAgIGxpYmF1ZGlvcG9saWN5bWFuYWdlcmRlZmF1bHQgXApAQCAtMzAsMyArMzAsMjYgQEAKIExPQ0FMX01VTFRJTElCIDo9ICQoQVVESU9TRVJWRVJfTVVMVElMSUIpCiAKIGluY2x1ZGUgJChCVUlMRF9OQVRJVkVfVEVTVCkKKworIyBzeXN0ZW0vYXVkaW8uaCB1dGlsaXRpZXMgdGVzdAorCitpbmNsdWRlICQoQ0xFQVJfVkFSUykKKworTE9DQUxfU0hBUkVEX0xJQlJBUklFUyA6PSBcCisgIGxpYmJhc2UgXAorICBsaWJsb2cgXAorICBsaWJtZWRpYV9oZWxwZXIgXAorICBsaWJ1dGlscworCitMT0NBTF9TUkNfRklMRVMgOj0gXAorICBzeXN0ZW1hdWRpb190ZXN0cy5jcHAgXAorCitMT0NBTF9NT0RVTEUgOj0gc3lzdGVtYXVkaW9fdGVzdHMKKworTE9DQUxfTU9EVUxFX1RBR1MgOj0gdGVzdHMKKworTE9DQUxfQ0ZMQUdTIDo9IC1XZXJyb3IgLVdhbGwKKworTE9DQUxfTVVMVElMSUIgOj0gJChBVURJT1NFUlZFUl9NVUxUSUxJQikKKworaW5jbHVkZSAkKEJVSUxEX05BVElWRV9URVNUKQpkaWZmIC0tZ2l0IGEvc2VydmljZXMvYXVkaW9wb2xpY3kvdGVzdHMvQXVkaW9Qb2xpY3lUZXN0Q2xpZW50LmggYi9zZXJ2aWNlcy9hdWRpb3BvbGljeS90ZXN0cy9BdWRpb1BvbGljeVRlc3RDbGllbnQuaAppbmRleCBlYjgyMjJjLi4yZmY3Njc1IDEwMDY0NAotLS0gYS9zZXJ2aWNlcy9hdWRpb3BvbGljeS90ZXN0cy9BdWRpb1BvbGljeVRlc3RDbGllbnQuaAorKysgYi9zZXJ2aWNlcy9hdWRpb3BvbGljeS90ZXN0cy9BdWRpb1BvbGljeVRlc3RDbGllbnQuaApAQCAtNjAsOSArNjAsNiBAQAogICAgICAgICAgICAgICAgICAgICAgICBpbnQgLypkZWxheU1zKi8pIG92ZXJyaWRlIHsgfQogICAgIFN0cmluZzggZ2V0UGFyYW1ldGVycyhhdWRpb19pb19oYW5kbGVfdCAvKmlvSGFuZGxlKi8sCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFN0cmluZzgmIC8qa2V5cyovKSBvdmVycmlkZSB7IHJldHVybiBTdHJpbmc4KCk7IH0KLSAgICBzdGF0dXNfdCBzdGFydFRvbmUoYXVkaW9fcG9saWN5X3RvbmVfdCAvKnRvbmUqLywKLSAgICAgICAgICAgICAgICAgICAgICAgYXVkaW9fc3RyZWFtX3R5cGVfdCAvKnN0cmVhbSovKSBvdmVycmlkZSB7IHJldHVybiBOT19JTklUOyB9Ci0gICAgc3RhdHVzX3Qgc3RvcFRvbmUoKSBvdmVycmlkZSB7IHJldHVybiBOT19JTklUOyB9CiAgICAgc3RhdHVzX3Qgc2V0Vm9pY2VWb2x1bWUoZmxvYXQgLyp2b2x1bWUqLywgaW50IC8qZGVsYXlNcyovKSBvdmVycmlkZSB7IHJldHVybiBOT19JTklUOyB9CiAgICAgc3RhdHVzX3QgbW92ZUVmZmVjdHMoYXVkaW9fc2Vzc2lvbl90IC8qc2Vzc2lvbiovLAogICAgICAgICAgICAgICAgICAgICAgICAgIGF1ZGlvX2lvX2hhbmRsZV90IC8qc3JjT3V0cHV0Ki8sCmRpZmYgLS1naXQgYS9zZXJ2aWNlcy9hdWRpb3BvbGljeS90ZXN0cy9hdWRpb3BvbGljeW1hbmFnZXJfdGVzdHMuY3BwIGIvc2VydmljZXMvYXVkaW9wb2xpY3kvdGVzdHMvYXVkaW9wb2xpY3ltYW5hZ2VyX3Rlc3RzLmNwcAppbmRleCBhOTU5M2I4Li41NmFmMTUyIDEwMDY0NAotLS0gYS9zZXJ2aWNlcy9hdWRpb3BvbGljeS90ZXN0cy9hdWRpb3BvbGljeW1hbmFnZXJfdGVzdHMuY3BwCisrKyBiL3NlcnZpY2VzL2F1ZGlvcG9saWN5L3Rlc3RzL2F1ZGlvcG9saWN5bWFuYWdlcl90ZXN0cy5jcHAKQEAgLTE2LDkgKzE2LDE1IEBACiAKICNpbmNsdWRlIDxtZW1vcnk+CiAjaW5jbHVkZSA8c2V0PgorI2luY2x1ZGUgPHN5cy93YWl0Lmg+CisjaW5jbHVkZSA8dW5pc3RkLmg+CiAKICNpbmNsdWRlIDxndGVzdC9ndGVzdC5oPgogCisjZGVmaW5lIExPR19UQUcgIkFQTV9UZXN0IgorI2luY2x1ZGUgPGxvZy9sb2cuaD4KKyNpbmNsdWRlIDxtZWRpYS9QYXRjaEJ1aWxkZXIuaD4KKwogI2luY2x1ZGUgIkF1ZGlvUG9saWN5VGVzdENsaWVudC5oIgogI2luY2x1ZGUgIkF1ZGlvUG9saWN5VGVzdE1hbmFnZXIuaCIKIApAQCAtMTMyLDYgKzEzOCwzNiBAQAogICAgIC8vIFNldFVwIG11c3QgZmluaXNoIHdpdGggbm8gYXNzZXJ0aW9ucy4KIH0KIAorVEVTVF9GKEF1ZGlvUG9saWN5TWFuYWdlclRlc3QsIER1bXApIHsKKyAgICBpbnQgcGlwZWZkWzJdOworICAgIEFTU0VSVF9ORSgtMSwgcGlwZShwaXBlZmQpKTsKKyAgICBwaWRfdCBjcGlkID0gZm9yaygpOworICAgIEFTU0VSVF9ORSgtMSwgY3BpZCk7CisgICAgaWYgKGNwaWQgPT0gMCkgeworICAgICAgICAvLyBDaGlsZCBwcm9jZXNzIHJlYWRzIGZyb20gdGhlIHBpcGUgYW5kIGxvZ3MuCisgICAgICAgIGNsb3NlKHBpcGVmZFsxXSk7CisgICAgICAgIHN0ZDo6c3RyaW5nIGxpbmU7CisgICAgICAgIGNoYXIgYnVmOworICAgICAgICB3aGlsZSAocmVhZChwaXBlZmRbMF0sICZidWYsIHNpemVvZihidWYpKSA+IDApIHsKKyAgICAgICAgICAgIGlmIChidWYgIT0gJ1xuJykgeworICAgICAgICAgICAgICAgIGxpbmUgKz0gYnVmOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBBTE9HSSgiJXMiLCBsaW5lLmNfc3RyKCkpOworICAgICAgICAgICAgICAgIGxpbmUgPSAiIjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBpZiAoIWxpbmUuZW1wdHkoKSkgQUxPR0koIiVzIiwgbGluZS5jX3N0cigpKTsKKyAgICAgICAgY2xvc2UocGlwZWZkWzBdKTsKKyAgICAgICAgX2V4aXQoRVhJVF9TVUNDRVNTKTsKKyAgICB9IGVsc2UgeworICAgICAgICAvLyBQYXJlbnQgZG9lcyB0aGUgZHVtcCBhbmQgY2hlY2tzIHRoZSBzdGF0dXMgY29kZS4KKyAgICAgICAgY2xvc2UocGlwZWZkWzBdKTsKKyAgICAgICAgQVNTRVJUX0VRKE5PX0VSUk9SLCBtTWFuYWdlci0+ZHVtcChwaXBlZmRbMV0pKTsKKyAgICAgICAgY2xvc2UocGlwZWZkWzFdKTsKKyAgICAgICAgd2FpdChOVUxMKTsgIC8vIFdhaXQgZm9yIHRoZSBjaGlsZCB0byBleGl0LgorICAgIH0KK30KKwogVEVTVF9GKEF1ZGlvUG9saWN5TWFuYWdlclRlc3QsIENyZWF0ZUF1ZGlvUGF0Y2hGYWlsdXJlKSB7CiAgICAgYXVkaW9fcGF0Y2ggcGF0Y2h7fTsKICAgICBhdWRpb19wYXRjaF9oYW5kbGVfdCBoYW5kbGUgPSBBVURJT19QQVRDSF9IQU5ETEVfTk9ORTsKQEAgLTE2NiwyOSArMjAyLDE0IEBACiB9CiAKIFRFU1RfRihBdWRpb1BvbGljeU1hbmFnZXJUZXN0LCBDcmVhdGVBdWRpb1BhdGNoRnJvbU1peCkgewotICAgIGF1ZGlvX3BhdGNoIHBhdGNoe307CiAgICAgYXVkaW9fcGF0Y2hfaGFuZGxlX3QgaGFuZGxlID0gQVVESU9fUEFUQ0hfSEFORExFX05PTkU7CiAgICAgdWlkX3QgdWlkID0gNDI7CiAgICAgY29uc3Qgc2l6ZV90IHBhdGNoQ291bnRCZWZvcmUgPSBtQ2xpZW50LT5nZXRBY3RpdmVQYXRjaGVzQ291bnQoKTsKLSAgICBwYXRjaC5udW1fc291cmNlcyA9IDE7Ci0gICAgewotICAgICAgICBhdXRvJiBzcmMgPSBwYXRjaC5zb3VyY2VzWzBdOwotICAgICAgICBzcmMucm9sZSA9IEFVRElPX1BPUlRfUk9MRV9TT1VSQ0U7Ci0gICAgICAgIHNyYy50eXBlID0gQVVESU9fUE9SVF9UWVBFX01JWDsKLSAgICAgICAgc3JjLmlkID0gbU1hbmFnZXItPmdldENvbmZpZygpLmdldEF2YWlsYWJsZUlucHV0RGV2aWNlcygpWzBdLT5nZXRJZCgpOwotICAgICAgICAvLyBOb3RlOiB0aGVzZSBhcmUgdGhlIHBhcmFtZXRlcnMgb2YgdGhlIG91dHB1dCBkZXZpY2UuCi0gICAgICAgIHNyYy5zYW1wbGVfcmF0ZSA9IDQ0MTAwOwotICAgICAgICBzcmMuZm9ybWF0ID0gQVVESU9fRk9STUFUX1BDTV8xNl9CSVQ7Ci0gICAgICAgIHNyYy5jaGFubmVsX21hc2sgPSBBVURJT19DSEFOTkVMX09VVF9TVEVSRU87Ci0gICAgfQotICAgIHBhdGNoLm51bV9zaW5rcyA9IDE7Ci0gICAgewotICAgICAgICBhdXRvJiBzaW5rID0gcGF0Y2guc2lua3NbMF07Ci0gICAgICAgIHNpbmsucm9sZSA9IEFVRElPX1BPUlRfUk9MRV9TSU5LOwotICAgICAgICBzaW5rLnR5cGUgPSBBVURJT19QT1JUX1RZUEVfREVWSUNFOwotICAgICAgICBzaW5rLmlkID0gbU1hbmFnZXItPmdldENvbmZpZygpLmdldERlZmF1bHRPdXRwdXREZXZpY2UoKS0+Z2V0SWQoKTsKLSAgICB9Ci0gICAgQVNTRVJUX0VRKE5PX0VSUk9SLCBtTWFuYWdlci0+Y3JlYXRlQXVkaW9QYXRjaCgmcGF0Y2gsICZoYW5kbGUsIHVpZCkpOworICAgIEFTU0VSVF9GQUxTRShtTWFuYWdlci0+Z2V0Q29uZmlnKCkuZ2V0QXZhaWxhYmxlSW5wdXREZXZpY2VzKCkuaXNFbXB0eSgpKTsKKyAgICBQYXRjaEJ1aWxkZXIgcGF0Y2hCdWlsZGVyOworICAgIHBhdGNoQnVpbGRlci5hZGRTb3VyY2UobU1hbmFnZXItPmdldENvbmZpZygpLmdldEF2YWlsYWJsZUlucHV0RGV2aWNlcygpWzBdKS4KKyAgICAgICAgICAgIGFkZFNpbmsobU1hbmFnZXItPmdldENvbmZpZygpLmdldERlZmF1bHRPdXRwdXREZXZpY2UoKSk7CisgICAgQVNTRVJUX0VRKE5PX0VSUk9SLCBtTWFuYWdlci0+Y3JlYXRlQXVkaW9QYXRjaChwYXRjaEJ1aWxkZXIucGF0Y2goKSwgJmhhbmRsZSwgdWlkKSk7CiAgICAgQVNTRVJUX05FKEFVRElPX1BBVENIX0hBTkRMRV9OT05FLCBoYW5kbGUpOwogICAgIEFTU0VSVF9FUShwYXRjaENvdW50QmVmb3JlICsgMSwgbUNsaWVudC0+Z2V0QWN0aXZlUGF0Y2hlc0NvdW50KCkpOwogfQpkaWZmIC0tZ2l0IGEvc2VydmljZXMvYXVkaW9wb2xpY3kvdGVzdHMvc3lzdGVtYXVkaW9fdGVzdHMuY3BwIGIvc2VydmljZXMvYXVkaW9wb2xpY3kvdGVzdHMvc3lzdGVtYXVkaW9fdGVzdHMuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFiYWFlNTIKLS0tIC9kZXYvbnVsbAorKysgYi9zZXJ2aWNlcy9hdWRpb3BvbGljeS90ZXN0cy9zeXN0ZW1hdWRpb190ZXN0cy5jcHAKQEAgLTAsMCArMSwxMTcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTggVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworCisjaW5jbHVkZSA8Z3Rlc3QvZ3Rlc3QuaD4KKworI2RlZmluZSBMT0dfVEFHICJTeXNBdWRpb19UZXN0IgorI2luY2x1ZGUgPGxvZy9sb2cuaD4KKyNpbmNsdWRlIDxtZWRpYS9QYXRjaEJ1aWxkZXIuaD4KKyNpbmNsdWRlIDxzeXN0ZW0vYXVkaW8uaD4KKwordXNpbmcgbmFtZXNwYWNlIGFuZHJvaWQ7CisKK1RFU1QoU3lzdGVtQXVkaW9UZXN0LCBQYXRjaEludmFsaWQpIHsKKyAgICBhdWRpb19wYXRjaCBwYXRjaHt9OworICAgIEFTU0VSVF9GQUxTRShhdWRpb19wYXRjaF9pc192YWxpZCgmcGF0Y2gpKTsKKyAgICBwYXRjaC5udW1fc291cmNlcyA9IEFVRElPX1BBVENIX1BPUlRTX01BWCArIDE7CisgICAgcGF0Y2gubnVtX3NpbmtzID0gMTsKKyAgICBBU1NFUlRfRkFMU0UoYXVkaW9fcGF0Y2hfaXNfdmFsaWQoJnBhdGNoKSk7CisgICAgcGF0Y2gubnVtX3NvdXJjZXMgPSAxOworICAgIHBhdGNoLm51bV9zaW5rcyA9IEFVRElPX1BBVENIX1BPUlRTX01BWCArIDE7CisgICAgQVNTRVJUX0ZBTFNFKGF1ZGlvX3BhdGNoX2lzX3ZhbGlkKCZwYXRjaCkpOworICAgIHBhdGNoLm51bV9zb3VyY2VzID0gMDsKKyAgICBwYXRjaC5udW1fc2lua3MgPSAxOworICAgIEFTU0VSVF9GQUxTRShhdWRpb19wYXRjaF9pc192YWxpZCgmcGF0Y2gpKTsKK30KKworVEVTVChTeXN0ZW1BdWRpb1Rlc3QsIFBhdGNoVmFsaWQpIHsKKyAgICBjb25zdCBhdWRpb19wb3J0X2NvbmZpZyBzcmMgPSB7CisgICAgICAgIC5pZCA9IDEsIC5yb2xlID0gQVVESU9fUE9SVF9ST0xFX1NPVVJDRSwgLnR5cGUgPSBBVURJT19QT1JUX1RZUEVfREVWSUNFIH07CisgICAgLy8gSXQncyBPSyBub3QgdG8gaGF2ZSBzaW5rcy4KKyAgICBBU1NFUlRfVFJVRShhdWRpb19wYXRjaF9pc192YWxpZCgoUGF0Y2hCdWlsZGVye30pLmFkZFNvdXJjZShzcmMpLnBhdGNoKCkpKTsKKyAgICBjb25zdCBhdWRpb19wb3J0X2NvbmZpZyBzaW5rID0geworICAgICAgICAuaWQgPSAyLCAucm9sZSA9IEFVRElPX1BPUlRfUk9MRV9TSU5LLCAudHlwZSA9IEFVRElPX1BPUlRfVFlQRV9ERVZJQ0UgfTsKKyAgICBBU1NFUlRfVFJVRShhdWRpb19wYXRjaF9pc192YWxpZCgoUGF0Y2hCdWlsZGVye30pLmFkZFNvdXJjZShzcmMpLmFkZFNpbmsoc2luaykucGF0Y2goKSkpOworICAgIEFTU0VSVF9UUlVFKGF1ZGlvX3BhdGNoX2lzX3ZhbGlkKAorICAgICAgICAgICAgICAgICAgICAoUGF0Y2hCdWlsZGVye30pLmFkZFNvdXJjZShzcmMpLmFkZFNvdXJjZShzcmMpLmFkZFNpbmsoc2luaykucGF0Y2goKSkpOworICAgIEFTU0VSVF9UUlVFKGF1ZGlvX3BhdGNoX2lzX3ZhbGlkKAorICAgICAgICAgICAgICAgICAgICAoUGF0Y2hCdWlsZGVye30pLmFkZFNvdXJjZShzcmMpLmFkZFNpbmsoc2luaykuYWRkU2luayhzaW5rKS5wYXRjaCgpKSk7CisgICAgQVNTRVJUX1RSVUUoYXVkaW9fcGF0Y2hfaXNfdmFsaWQoCisgICAgICAgICAgICAgICAgICAgIChQYXRjaEJ1aWxkZXJ7fSkuYWRkU291cmNlKHNyYykuYWRkU291cmNlKHNyYykuCisgICAgICAgICAgICAgICAgICAgIGFkZFNpbmsoc2luaykuYWRkU2luayhzaW5rKS5wYXRjaCgpKSk7Cit9CisKK1RFU1QoU3lzdGVtQXVkaW9UZXN0LCBQYXRjaEh3QXZTeW5jKSB7CisgICAgYXVkaW9fcG9ydF9jb25maWcgZGV2aWNlX3NyY19jZmcgPSB7CisgICAgICAgIC5pZCA9IDEsIC5yb2xlID0gQVVESU9fUE9SVF9ST0xFX1NPVVJDRSwgLnR5cGUgPSBBVURJT19QT1JUX1RZUEVfREVWSUNFIH07CisgICAgQVNTRVJUX0ZBTFNFKGF1ZGlvX3BvcnRfY29uZmlnX2hhc19od19hdl9zeW5jKCZkZXZpY2Vfc3JjX2NmZykpOworICAgIGRldmljZV9zcmNfY2ZnLmNvbmZpZ19tYXNrIHw9IEFVRElPX1BPUlRfQ09ORklHX0ZMQUdTOworICAgIEFTU0VSVF9GQUxTRShhdWRpb19wb3J0X2NvbmZpZ19oYXNfaHdfYXZfc3luYygmZGV2aWNlX3NyY19jZmcpKTsKKyAgICBkZXZpY2Vfc3JjX2NmZy5mbGFncy5pbnB1dCA9IEFVRElPX0lOUFVUX0ZMQUdfSFdfQVZfU1lOQzsKKyAgICBBU1NFUlRfVFJVRShhdWRpb19wb3J0X2NvbmZpZ19oYXNfaHdfYXZfc3luYygmZGV2aWNlX3NyY19jZmcpKTsKKworICAgIGF1ZGlvX3BvcnRfY29uZmlnIGRldmljZV9zaW5rX2NmZyA9IHsKKyAgICAgICAgLmlkID0gMSwgLnJvbGUgPSBBVURJT19QT1JUX1JPTEVfU0lOSywgLnR5cGUgPSBBVURJT19QT1JUX1RZUEVfREVWSUNFIH07CisgICAgQVNTRVJUX0ZBTFNFKGF1ZGlvX3BvcnRfY29uZmlnX2hhc19od19hdl9zeW5jKCZkZXZpY2Vfc2lua19jZmcpKTsKKyAgICBkZXZpY2Vfc2lua19jZmcuY29uZmlnX21hc2sgfD0gQVVESU9fUE9SVF9DT05GSUdfRkxBR1M7CisgICAgQVNTRVJUX0ZBTFNFKGF1ZGlvX3BvcnRfY29uZmlnX2hhc19od19hdl9zeW5jKCZkZXZpY2Vfc2lua19jZmcpKTsKKyAgICBkZXZpY2Vfc2lua19jZmcuZmxhZ3Mub3V0cHV0ID0gQVVESU9fT1VUUFVUX0ZMQUdfSFdfQVZfU1lOQzsKKyAgICBBU1NFUlRfVFJVRShhdWRpb19wb3J0X2NvbmZpZ19oYXNfaHdfYXZfc3luYygmZGV2aWNlX3NpbmtfY2ZnKSk7CisKKyAgICBhdWRpb19wb3J0X2NvbmZpZyBtaXhfc2lua19jZmcgPSB7CisgICAgICAgIC5pZCA9IDEsIC5yb2xlID0gQVVESU9fUE9SVF9ST0xFX1NJTkssIC50eXBlID0gQVVESU9fUE9SVF9UWVBFX01JWCB9OworICAgIEFTU0VSVF9GQUxTRShhdWRpb19wb3J0X2NvbmZpZ19oYXNfaHdfYXZfc3luYygmbWl4X3NpbmtfY2ZnKSk7CisgICAgbWl4X3NpbmtfY2ZnLmNvbmZpZ19tYXNrIHw9IEFVRElPX1BPUlRfQ09ORklHX0ZMQUdTOworICAgIEFTU0VSVF9GQUxTRShhdWRpb19wb3J0X2NvbmZpZ19oYXNfaHdfYXZfc3luYygmbWl4X3NpbmtfY2ZnKSk7CisgICAgbWl4X3NpbmtfY2ZnLmZsYWdzLmlucHV0ID0gQVVESU9fSU5QVVRfRkxBR19IV19BVl9TWU5DOworICAgIEFTU0VSVF9UUlVFKGF1ZGlvX3BvcnRfY29uZmlnX2hhc19od19hdl9zeW5jKCZtaXhfc2lua19jZmcpKTsKKworICAgIGF1ZGlvX3BvcnRfY29uZmlnIG1peF9zcmNfY2ZnID0geworICAgICAgICAuaWQgPSAxLCAucm9sZSA9IEFVRElPX1BPUlRfUk9MRV9TT1VSQ0UsIC50eXBlID0gQVVESU9fUE9SVF9UWVBFX01JWCB9OworICAgIEFTU0VSVF9GQUxTRShhdWRpb19wb3J0X2NvbmZpZ19oYXNfaHdfYXZfc3luYygmbWl4X3NyY19jZmcpKTsKKyAgICBtaXhfc3JjX2NmZy5jb25maWdfbWFzayB8PSBBVURJT19QT1JUX0NPTkZJR19GTEFHUzsKKyAgICBBU1NFUlRfRkFMU0UoYXVkaW9fcG9ydF9jb25maWdfaGFzX2h3X2F2X3N5bmMoJm1peF9zcmNfY2ZnKSk7CisgICAgbWl4X3NyY19jZmcuZmxhZ3Mub3V0cHV0ID0gQVVESU9fT1VUUFVUX0ZMQUdfSFdfQVZfU1lOQzsKKyAgICBBU1NFUlRfVFJVRShhdWRpb19wb3J0X2NvbmZpZ19oYXNfaHdfYXZfc3luYygmbWl4X3NyY19jZmcpKTsKK30KKworVEVTVChTeXN0ZW1BdWRpb1Rlc3QsIFBhdGNoRXF1YWwpIHsKKyAgICBjb25zdCBhdWRpb19wYXRjaCBwYXRjaDF7fSwgcGF0Y2gye307CisgICAgLy8gSW52YWxpZCBwYXRjaGVzIGFyZSBub3QgZXF1YWwuCisgICAgQVNTRVJUX0ZBTFNFKGF1ZGlvX3BhdGNoZXNfYXJlX2VxdWFsKCZwYXRjaDEsICZwYXRjaDIpKTsKKyAgICBjb25zdCBhdWRpb19wb3J0X2NvbmZpZyBzcmMgPSB7CisgICAgICAgIC5pZCA9IDEsIC5yb2xlID0gQVVESU9fUE9SVF9ST0xFX1NPVVJDRSwgLnR5cGUgPSBBVURJT19QT1JUX1RZUEVfREVWSUNFIH07CisgICAgY29uc3QgYXVkaW9fcG9ydF9jb25maWcgc2luayA9IHsKKyAgICAgICAgLmlkID0gMiwgLnJvbGUgPSBBVURJT19QT1JUX1JPTEVfU0lOSywgLnR5cGUgPSBBVURJT19QT1JUX1RZUEVfREVWSUNFIH07CisgICAgQVNTRVJUX0ZBTFNFKGF1ZGlvX3BhdGNoZXNfYXJlX2VxdWFsKAorICAgICAgICAgICAgICAgICAgICAoUGF0Y2hCdWlsZGVye30pLmFkZFNvdXJjZShzcmMpLnBhdGNoKCksCisgICAgICAgICAgICAgICAgICAgIChQYXRjaEJ1aWxkZXJ7fSkuYWRkU291cmNlKHNyYykuYWRkU2luayhzaW5rKS5wYXRjaCgpKSk7CisgICAgQVNTRVJUX1RSVUUoYXVkaW9fcGF0Y2hlc19hcmVfZXF1YWwoCisgICAgICAgICAgICAgICAgICAgIChQYXRjaEJ1aWxkZXJ7fSkuYWRkU291cmNlKHNyYykuYWRkU2luayhzaW5rKS5wYXRjaCgpLAorICAgICAgICAgICAgICAgICAgICAoUGF0Y2hCdWlsZGVye30pLmFkZFNvdXJjZShzcmMpLmFkZFNpbmsoc2luaykucGF0Y2goKSkpOworICAgIEFTU0VSVF9GQUxTRShhdWRpb19wYXRjaGVzX2FyZV9lcXVhbCgKKyAgICAgICAgICAgICAgICAgICAgKFBhdGNoQnVpbGRlcnt9KS5hZGRTb3VyY2Uoc3JjKS5hZGRTaW5rKHNpbmspLnBhdGNoKCksCisgICAgICAgICAgICAgICAgICAgIChQYXRjaEJ1aWxkZXJ7fSkuYWRkU291cmNlKHNyYykuYWRkU291cmNlKHNyYykuYWRkU2luayhzaW5rKS5wYXRjaCgpKSk7CisgICAgYXVkaW9fcG9ydF9jb25maWcgc2lua19od19hdl9zeW5jID0gc2luazsKKyAgICBzaW5rX2h3X2F2X3N5bmMuY29uZmlnX21hc2sgfD0gQVVESU9fUE9SVF9DT05GSUdfRkxBR1M7CisgICAgc2lua19od19hdl9zeW5jLmZsYWdzLm91dHB1dCA9IEFVRElPX09VVFBVVF9GTEFHX0hXX0FWX1NZTkM7CisgICAgQVNTRVJUX0ZBTFNFKGF1ZGlvX3BhdGNoZXNfYXJlX2VxdWFsKAorICAgICAgICAgICAgICAgICAgICAoUGF0Y2hCdWlsZGVye30pLmFkZFNvdXJjZShzcmMpLmFkZFNpbmsoc2luaykucGF0Y2goKSwKKyAgICAgICAgICAgICAgICAgICAgKFBhdGNoQnVpbGRlcnt9KS5hZGRTb3VyY2Uoc3JjKS5hZGRTaW5rKHNpbmtfaHdfYXZfc3luYykucGF0Y2goKSkpOworICAgIEFTU0VSVF9UUlVFKGF1ZGlvX3BhdGNoZXNfYXJlX2VxdWFsKAorICAgICAgICAgICAgICAgICAgICAoUGF0Y2hCdWlsZGVye30pLmFkZFNvdXJjZShzcmMpLmFkZFNpbmsoc2lua19od19hdl9zeW5jKS5wYXRjaCgpLAorICAgICAgICAgICAgICAgICAgICAoUGF0Y2hCdWlsZGVye30pLmFkZFNvdXJjZShzcmMpLmFkZFNpbmsoc2lua19od19hdl9zeW5jKS5wYXRjaCgpKSk7Cit9CmRpZmYgLS1naXQgYS9zZXJ2aWNlcy9jYW1lcmEvbGliY2FtZXJhc2VydmljZS9BbmRyb2lkLmJwIGIvc2VydmljZXMvY2FtZXJhL2xpYmNhbWVyYXNlcnZpY2UvQW5kcm9pZC5icApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMjVmMGIyCi0tLSAvZGV2L251bGwKKysrIGIvc2VydmljZXMvY2FtZXJhL2xpYmNhbWVyYXNlcnZpY2UvQW5kcm9pZC5icApAQCAtMCwwICsxLDExOSBAQAorLy8gQ29weXJpZ2h0IDIwMTggVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorLy8KKy8vIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworLy8geW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorLy8gWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisvLworLy8gICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKy8vCisvLyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisvLyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorLy8gV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisvLyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisvLyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKworLy8KKy8vIGxpYmNhbWVyYXNlcnZpY2UKKy8vCisKK2NjX2xpYnJhcnlfc2hhcmVkIHsKKyAgICBuYW1lOiAibGliY2FtZXJhc2VydmljZSIsCisKKyAgICAvLyBDYW1lcmEgc2VydmljZSBzb3VyY2UKKworICAgIHNyY3M6IFsKKyAgICAgICAgIkNhbWVyYVNlcnZpY2UuY3BwIiwKKyAgICAgICAgIkNhbWVyYUZsYXNobGlnaHQuY3BwIiwKKyAgICAgICAgImNvbW1vbi9DYW1lcmEyQ2xpZW50QmFzZS5jcHAiLAorICAgICAgICAiY29tbW9uL0NhbWVyYURldmljZUJhc2UuY3BwIiwKKyAgICAgICAgImNvbW1vbi9DYW1lcmFQcm92aWRlck1hbmFnZXIuY3BwIiwKKyAgICAgICAgImNvbW1vbi9GcmFtZVByb2Nlc3NvckJhc2UuY3BwIiwKKyAgICAgICAgImFwaTEvQ2FtZXJhQ2xpZW50LmNwcCIsCisgICAgICAgICJhcGkxL0NhbWVyYTJDbGllbnQuY3BwIiwKKyAgICAgICAgImFwaTEvY2xpZW50Mi9QYXJhbWV0ZXJzLmNwcCIsCisgICAgICAgICJhcGkxL2NsaWVudDIvRnJhbWVQcm9jZXNzb3IuY3BwIiwKKyAgICAgICAgImFwaTEvY2xpZW50Mi9TdHJlYW1pbmdQcm9jZXNzb3IuY3BwIiwKKyAgICAgICAgImFwaTEvY2xpZW50Mi9KcGVnUHJvY2Vzc29yLmNwcCIsCisgICAgICAgICJhcGkxL2NsaWVudDIvQ2FsbGJhY2tQcm9jZXNzb3IuY3BwIiwKKyAgICAgICAgImFwaTEvY2xpZW50Mi9KcGVnQ29tcHJlc3Nvci5jcHAiLAorICAgICAgICAiYXBpMS9jbGllbnQyL0NhcHR1cmVTZXF1ZW5jZXIuY3BwIiwKKyAgICAgICAgImFwaTEvY2xpZW50Mi9ac2xQcm9jZXNzb3IuY3BwIiwKKyAgICAgICAgImFwaTIvQ2FtZXJhRGV2aWNlQ2xpZW50LmNwcCIsCisgICAgICAgICJkZXZpY2UxL0NhbWVyYUhhcmR3YXJlSW50ZXJmYWNlLmNwcCIsCisgICAgICAgICJkZXZpY2UzL0NhbWVyYTNEZXZpY2UuY3BwIiwKKyAgICAgICAgImRldmljZTMvQ2FtZXJhM1N0cmVhbS5jcHAiLAorICAgICAgICAiZGV2aWNlMy9DYW1lcmEzSU9TdHJlYW1CYXNlLmNwcCIsCisgICAgICAgICJkZXZpY2UzL0NhbWVyYTNJbnB1dFN0cmVhbS5jcHAiLAorICAgICAgICAiZGV2aWNlMy9DYW1lcmEzT3V0cHV0U3RyZWFtLmNwcCIsCisgICAgICAgICJkZXZpY2UzL0NhbWVyYTNEdW1teVN0cmVhbS5jcHAiLAorICAgICAgICAiZGV2aWNlMy9DYW1lcmEzU2hhcmVkT3V0cHV0U3RyZWFtLmNwcCIsCisgICAgICAgICJkZXZpY2UzL1N0YXR1c1RyYWNrZXIuY3BwIiwKKyAgICAgICAgImRldmljZTMvQ2FtZXJhM0J1ZmZlck1hbmFnZXIuY3BwIiwKKyAgICAgICAgImRldmljZTMvQ2FtZXJhM1N0cmVhbVNwbGl0dGVyLmNwcCIsCisgICAgICAgICJkZXZpY2UzL0Rpc3RvcnRpb25NYXBwZXIuY3BwIiwKKyAgICAgICAgImd1aS9SaW5nQnVmZmVyQ29uc3VtZXIuY3BwIiwKKyAgICAgICAgInV0aWxzL0NhbWVyYVRocmVhZFN0YXRlLmNwcCIsCisgICAgICAgICJoaWRsL0FpZGxDYW1lcmFEZXZpY2VDYWxsYmFja3MuY3BwIiwKKyAgICAgICAgImhpZGwvQWlkbENhbWVyYVNlcnZpY2VMaXN0ZW5lci5jcHAiLAorICAgICAgICAiaGlkbC9Db252ZXJ0LmNwcCIsCisgICAgICAgICJoaWRsL0hpZGxDYW1lcmFEZXZpY2VVc2VyLmNwcCIsCisgICAgICAgICJoaWRsL0hpZGxDYW1lcmFTZXJ2aWNlLmNwcCIsCisgICAgICAgICJ1dGlscy9DYW1lcmFUcmFjZXMuY3BwIiwKKyAgICAgICAgInV0aWxzL0F1dG9Db25kaXRpb25Mb2NrLmNwcCIsCisgICAgICAgICJ1dGlscy9UYWdNb25pdG9yLmNwcCIsCisgICAgICAgICJ1dGlscy9MYXRlbmN5SGlzdG9ncmFtLmNwcCIsCisgICAgXSwKKworICAgIHNoYXJlZF9saWJzOiBbCisgICAgICAgICJsaWJ1aSIsCisgICAgICAgICJsaWJsb2ciLAorICAgICAgICAibGlidXRpbHNjYWxsc3RhY2siLAorICAgICAgICAibGlidXRpbHMiLAorICAgICAgICAibGliYmluZGVyIiwKKyAgICAgICAgImxpYmN1dGlscyIsCisgICAgICAgICJsaWJtZWRpYSIsCisgICAgICAgICJsaWJtZWRpYXV0aWxzIiwKKyAgICAgICAgImxpYmNhbWVyYV9jbGllbnQiLAorICAgICAgICAibGliY2FtZXJhX21ldGFkYXRhIiwKKyAgICAgICAgImxpYmZtcSIsCisgICAgICAgICJsaWJndWkiLAorICAgICAgICAibGliaGFyZHdhcmUiLAorICAgICAgICAibGliaHdiaW5kZXIiLAorICAgICAgICAibGliaGlkbGJhc2UiLAorICAgICAgICAibGliaGlkbHRyYW5zcG9ydCIsCisgICAgICAgICJsaWJqcGVnIiwKKyAgICAgICAgImxpYm1lbXVucmVhY2hhYmxlIiwKKyAgICAgICAgImxpYnN0YWdlZnJpZ2h0X2ZvdW5kYXRpb24iLAorICAgICAgICAiYW5kcm9pZC5mcmFtZXdvcmtzLmNhbWVyYXNlcnZpY2UuY29tbW9uQDIuMCIsCisgICAgICAgICJhbmRyb2lkLmZyYW1ld29ya3MuY2FtZXJhc2VydmljZS5zZXJ2aWNlQDIuMCIsCisgICAgICAgICJhbmRyb2lkLmZyYW1ld29ya3MuY2FtZXJhc2VydmljZS5kZXZpY2VAMi4wIiwKKyAgICAgICAgImFuZHJvaWQuaGFyZHdhcmUuY2FtZXJhLmNvbW1vbkAxLjAiLAorICAgICAgICAiYW5kcm9pZC5oYXJkd2FyZS5jYW1lcmEucHJvdmlkZXJAMi40IiwKKyAgICAgICAgImFuZHJvaWQuaGFyZHdhcmUuY2FtZXJhLmRldmljZUAxLjAiLAorICAgICAgICAiYW5kcm9pZC5oYXJkd2FyZS5jYW1lcmEuZGV2aWNlQDMuMiIsCisgICAgICAgICJhbmRyb2lkLmhhcmR3YXJlLmNhbWVyYS5kZXZpY2VAMy4zIiwKKyAgICAgICAgImFuZHJvaWQuaGFyZHdhcmUuY2FtZXJhLmRldmljZUAzLjQiLAorICAgICAgICAiYW5kcm9pZC5oYXJkd2FyZS5jYW1lcmEuZGV2aWNlQDMuNSIsCisgICAgXSwKKworICAgIGV4cG9ydF9zaGFyZWRfbGliX2hlYWRlcnM6IFsKKyAgICAgICAgImxpYmJpbmRlciIsCisgICAgICAgICJsaWJjYW1lcmFfY2xpZW50IiwKKyAgICAgICAgImxpYmZtcSIsCisgICAgXSwKKworICAgIGluY2x1ZGVfZGlyczogWworICAgICAgICAic3lzdGVtL21lZGlhL3ByaXZhdGUvY2FtZXJhL2luY2x1ZGUiLAorICAgICAgICAiZnJhbWV3b3Jrcy9uYXRpdmUvaW5jbHVkZS9tZWRpYS9vcGVubWF4IiwKKyAgICAgICAgImZyYW1ld29ya3MvYXYvbWVkaWEvbmRrIiwKKyAgICBdLAorCisgICAgZXhwb3J0X2luY2x1ZGVfZGlyczogWyIuIl0sCisKKyAgICBjZmxhZ3M6IFsKKyAgICAgICAgIi1XYWxsIiwKKyAgICAgICAgIi1XZXh0cmEiLAorICAgICAgICAiLVdlcnJvciIsCisgICAgXSwKKworfQpkaWZmIC0tZ2l0IGEvc2VydmljZXMvY2FtZXJhL2xpYmNhbWVyYXNlcnZpY2UvQW5kcm9pZC5tayBiL3NlcnZpY2VzL2NhbWVyYS9saWJjYW1lcmFzZXJ2aWNlL0FuZHJvaWQubWsKaW5kZXggOTYyNjFhYi4uNGNmZWNmZCAxMDA2NDQKLS0tIGEvc2VydmljZXMvY2FtZXJhL2xpYmNhbWVyYXNlcnZpY2UvQW5kcm9pZC5taworKysgYi9zZXJ2aWNlcy9jYW1lcmEvbGliY2FtZXJhc2VydmljZS9BbmRyb2lkLm1rCkBAIC0xNCw5MSArMTQsOSBAQAogCiBMT0NBTF9QQVRIOj0gJChjYWxsIG15LWRpcikKIAotIwotIyBsaWJjYW1lcmFzZXJ2aWNlCi0jCi0KIGluY2x1ZGUgJChDTEVBUl9WQVJTKQogCi0jIENhbWVyYSBzZXJ2aWNlIHNvdXJjZQotCi1MT0NBTF9TUkNfRklMRVMgOj0gIFwKLSAgICBDYW1lcmFTZXJ2aWNlLmNwcCBcCi0gICAgQ2FtZXJhRmxhc2hsaWdodC5jcHAgXAotICAgIGNvbW1vbi9DYW1lcmEyQ2xpZW50QmFzZS5jcHAgXAotICAgIGNvbW1vbi9DYW1lcmFEZXZpY2VCYXNlLmNwcCBcCi0gICAgY29tbW9uL0NhbWVyYVByb3ZpZGVyTWFuYWdlci5jcHAgXAotICAgIGNvbW1vbi9GcmFtZVByb2Nlc3NvckJhc2UuY3BwIFwKLSAgICBhcGkxL0NhbWVyYUNsaWVudC5jcHAgXAotICAgIGFwaTEvQ2FtZXJhMkNsaWVudC5jcHAgXAotICAgIGFwaTEvY2xpZW50Mi9QYXJhbWV0ZXJzLmNwcCBcCi0gICAgYXBpMS9jbGllbnQyL0ZyYW1lUHJvY2Vzc29yLmNwcCBcCi0gICAgYXBpMS9jbGllbnQyL1N0cmVhbWluZ1Byb2Nlc3Nvci5jcHAgXAotICAgIGFwaTEvY2xpZW50Mi9KcGVnUHJvY2Vzc29yLmNwcCBcCi0gICAgYXBpMS9jbGllbnQyL0NhbGxiYWNrUHJvY2Vzc29yLmNwcCBcCi0gICAgYXBpMS9jbGllbnQyL0pwZWdDb21wcmVzc29yLmNwcCBcCi0gICAgYXBpMS9jbGllbnQyL0NhcHR1cmVTZXF1ZW5jZXIuY3BwIFwKLSAgICBhcGkxL2NsaWVudDIvWnNsUHJvY2Vzc29yLmNwcCBcCi0gICAgYXBpMi9DYW1lcmFEZXZpY2VDbGllbnQuY3BwIFwKLSAgICBkZXZpY2UxL0NhbWVyYUhhcmR3YXJlSW50ZXJmYWNlLmNwcCBcCi0gICAgZGV2aWNlMy9DYW1lcmEzRGV2aWNlLmNwcCBcCi0gICAgZGV2aWNlMy9DYW1lcmEzU3RyZWFtLmNwcCBcCi0gICAgZGV2aWNlMy9DYW1lcmEzSU9TdHJlYW1CYXNlLmNwcCBcCi0gICAgZGV2aWNlMy9DYW1lcmEzSW5wdXRTdHJlYW0uY3BwIFwKLSAgICBkZXZpY2UzL0NhbWVyYTNPdXRwdXRTdHJlYW0uY3BwIFwKLSAgICBkZXZpY2UzL0NhbWVyYTNEdW1teVN0cmVhbS5jcHAgXAotICAgIGRldmljZTMvQ2FtZXJhM1NoYXJlZE91dHB1dFN0cmVhbS5jcHAgXAotICAgIGRldmljZTMvU3RhdHVzVHJhY2tlci5jcHAgXAotICAgIGRldmljZTMvQ2FtZXJhM0J1ZmZlck1hbmFnZXIuY3BwIFwKLSAgICBkZXZpY2UzL0NhbWVyYTNTdHJlYW1TcGxpdHRlci5jcHAgXAotICAgIGRldmljZTMvRGlzdG9ydGlvbk1hcHBlci5jcHAgXAotICAgIGd1aS9SaW5nQnVmZmVyQ29uc3VtZXIuY3BwIFwKLSAgICB1dGlscy9DYW1lcmFUcmFjZXMuY3BwIFwKLSAgICB1dGlscy9BdXRvQ29uZGl0aW9uTG9jay5jcHAgXAotICAgIHV0aWxzL1RhZ01vbml0b3IuY3BwIFwKLSAgICB1dGlscy9MYXRlbmN5SGlzdG9ncmFtLmNwcAotCi1MT0NBTF9TSEFSRURfTElCUkFSSUVTOj0gXAotICAgIGxpYnVpIFwKLSAgICBsaWJsb2cgXAotICAgIGxpYnV0aWxzY2FsbHN0YWNrIFwKLSAgICBsaWJ1dGlscyBcCi0gICAgbGliYmluZGVyIFwKLSAgICBsaWJjdXRpbHMgXAotICAgIGxpYm1lZGlhIFwKLSAgICBsaWJtZWRpYXV0aWxzIFwKLSAgICBsaWJjYW1lcmFfY2xpZW50IFwKLSAgICBsaWJjYW1lcmFfbWV0YWRhdGEgXAotICAgIGxpYmZtcSBcCi0gICAgbGliZ3VpIFwKLSAgICBsaWJoYXJkd2FyZSBcCi0gICAgbGliaGlkbGJhc2UgXAotICAgIGxpYmhpZGx0cmFuc3BvcnQgXAotICAgIGxpYmpwZWcgXAotICAgIGxpYm1lbXVucmVhY2hhYmxlIFwKLSAgICBhbmRyb2lkLmhhcmR3YXJlLmNhbWVyYS5jb21tb25AMS4wIFwKLSAgICBhbmRyb2lkLmhhcmR3YXJlLmNhbWVyYS5wcm92aWRlckAyLjQgXAotICAgIGFuZHJvaWQuaGFyZHdhcmUuY2FtZXJhLmRldmljZUAxLjAgXAotICAgIGFuZHJvaWQuaGFyZHdhcmUuY2FtZXJhLmRldmljZUAzLjIgXAotICAgIGFuZHJvaWQuaGFyZHdhcmUuY2FtZXJhLmRldmljZUAzLjMgXAotICAgIGFuZHJvaWQuaGFyZHdhcmUuY2FtZXJhLmRldmljZUAzLjQKLQotTE9DQUxfRVhQT1JUX1NIQVJFRF9MSUJSQVJZX0hFQURFUlMgOj0gbGliYmluZGVyIGxpYmNhbWVyYV9jbGllbnQgbGliZm1xCi0KLUxPQ0FMX0NfSU5DTFVERVMgKz0gXAotICAgIHN5c3RlbS9tZWRpYS9wcml2YXRlL2NhbWVyYS9pbmNsdWRlIFwKLSAgICBmcmFtZXdvcmtzL25hdGl2ZS9pbmNsdWRlL21lZGlhL29wZW5tYXgKLQotTE9DQUxfRVhQT1JUX0NfSU5DTFVERV9ESVJTIDo9IFwKLSAgICBmcmFtZXdvcmtzL2F2L3NlcnZpY2VzL2NhbWVyYS9saWJjYW1lcmFzZXJ2aWNlCi0KLUxPQ0FMX0NGTEFHUyArPSAtV2FsbCAtV2V4dHJhIC1XZXJyb3IKLQotTE9DQUxfTU9EVUxFOj0gbGliY2FtZXJhc2VydmljZQotCi1pbmNsdWRlICQoQlVJTERfU0hBUkVEX0xJQlJBUlkpCi0KLSMgQnVpbGQgdGVzdHMgdG9vCisjIEJ1aWxkIHRlc3RzCiAKIGluY2x1ZGUgJChMT0NBTF9QQVRIKS90ZXN0cy9BbmRyb2lkLm1rCiAKZGlmZiAtLWdpdCBhL3NlcnZpY2VzL2NhbWVyYS9saWJjYW1lcmFzZXJ2aWNlL0NhbWVyYVNlcnZpY2UuY3BwIGIvc2VydmljZXMvY2FtZXJhL2xpYmNhbWVyYXNlcnZpY2UvQ2FtZXJhU2VydmljZS5jcHAKaW5kZXggYmEwMjQ0ZS4uMzJiMDdmYSAxMDA2NDQKLS0tIGEvc2VydmljZXMvY2FtZXJhL2xpYmNhbWVyYXNlcnZpY2UvQ2FtZXJhU2VydmljZS5jcHAKKysrIGIvc2VydmljZXMvY2FtZXJhL2xpYmNhbWVyYXNlcnZpY2UvQ2FtZXJhU2VydmljZS5jcHAKQEAgLTQ3LDYgKzQ3LDggQEAKICNpbmNsdWRlIDxjdXRpbHMvbWlzYy5oPgogI2luY2x1ZGUgPGd1aS9TdXJmYWNlLmg+CiAjaW5jbHVkZSA8aGFyZHdhcmUvaGFyZHdhcmUuaD4KKyNpbmNsdWRlICJoaWRsL0hpZGxDYW1lcmFTZXJ2aWNlLmgiCisjaW5jbHVkZSA8aGlkbC9IaWRsVHJhbnNwb3J0U3VwcG9ydC5oPgogI2luY2x1ZGUgPG1lbXVucmVhY2hhYmxlL21lbXVucmVhY2hhYmxlLmg+CiAjaW5jbHVkZSA8bWVkaWEvQXVkaW9TeXN0ZW0uaD4KICNpbmNsdWRlIDxtZWRpYS9JTWVkaWFIVFRQU2VydmljZS5oPgpAQCAtNjksNiArNzEsNyBAQAogI2luY2x1ZGUgImFwaTIvQ2FtZXJhRGV2aWNlQ2xpZW50LmgiCiAjaW5jbHVkZSAidXRpbHMvQ2FtZXJhVHJhY2VzLmgiCiAjaW5jbHVkZSAidXRpbHMvVGFnTW9uaXRvci5oIgorI2luY2x1ZGUgInV0aWxzL0NhbWVyYVRocmVhZFN0YXRlLmgiCiAKIG5hbWVzcGFjZSB7CiAgICAgY29uc3QgY2hhcioga1Blcm1pc3Npb25TZXJ2aWNlTmFtZSA9ICJwZXJtaXNzaW9uIjsKQEAgLTc3LDYgKzgwLDcgQEAKIG5hbWVzcGFjZSBhbmRyb2lkIHsKIAogdXNpbmcgYmluZGVyOjpTdGF0dXM7Cit1c2luZyBmcmFtZXdvcmtzOjpjYW1lcmFzZXJ2aWNlOjpzZXJ2aWNlOjpWMl8wOjppbXBsZW1lbnRhdGlvbjo6SGlkbENhbWVyYVNlcnZpY2U7CiB1c2luZyBoYXJkd2FyZTo6SUNhbWVyYTsKIHVzaW5nIGhhcmR3YXJlOjpJQ2FtZXJhQ2xpZW50OwogdXNpbmcgaGFyZHdhcmU6OklDYW1lcmFTZXJ2aWNlUHJveHk7CkBAIC0xNDEsNiArMTQ1LDExIEBACiAKICAgICBtVWlkUG9saWN5ID0gbmV3IFVpZFBvbGljeSh0aGlzKTsKICAgICBtVWlkUG9saWN5LT5yZWdpc3RlclNlbGYoKTsKKyAgICBzcDxIaWRsQ2FtZXJhU2VydmljZT4gaGNzID0gSGlkbENhbWVyYVNlcnZpY2U6OmdldEluc3RhbmNlKHRoaXMpOworICAgIGlmIChoY3MtPnJlZ2lzdGVyQXNTZXJ2aWNlKCkgIT0gYW5kcm9pZDo6T0spIHsKKyAgICAgICAgQUxPR0UoIiVzOiBGYWlsZWQgdG8gcmVnaXN0ZXIgZGVmYXVsdCBhbmRyb2lkLmZyYW1ld29ya3MuY2FtZXJhc2VydmljZS5zZXJ2aWNlQDEuMCIsCisgICAgICAgICAgICAgIF9fRlVOQ1RJT05fXyk7CisgICAgfQogfQogCiBzdGF0dXNfdCBDYW1lcmFTZXJ2aWNlOjplbnVtZXJhdGVQcm92aWRlcnMoKSB7CkBAIC0zMzcsNyArMzQ2LDcgQEAKICAgICAgICAgICAgICAgICAgICAgaGFyZHdhcmU6OmNhbWVyYTI6OklDYW1lcmFEZXZpY2VDYWxsYmFja3M6OkVSUk9SX0NBTUVSQV9ESVNDT05ORUNURUQsCiAgICAgICAgICAgICAgICAgICAgIENhcHR1cmVSZXN1bHRFeHRyYXN7fSk7CiAgICAgICAgICAgICAvLyBFbnN1cmUgbm90IGluIGJpbmRlciBSUEMgc28gY2xpZW50IGRpc2Nvbm5lY3QgUElEIGNoZWNrcyB3b3JrIGNvcnJlY3RseQotICAgICAgICAgICAgTE9HX0FMV0FZU19GQVRBTF9JRihnZXRDYWxsaW5nUGlkKCkgIT0gZ2V0cGlkKCksCisgICAgICAgICAgICBMT0dfQUxXQVlTX0ZBVEFMX0lGKENhbWVyYVRocmVhZFN0YXRlOjpnZXRDYWxsaW5nUGlkKCkgIT0gZ2V0cGlkKCksCiAgICAgICAgICAgICAgICAgICAgICJvbkRldmljZVN0YXR1c0NoYW5nZWQgbXVzdCBiZSBjYWxsZWQgZnJvbSB0aGUgY2FtZXJhIHNlcnZpY2UgcHJvY2VzcyEiKTsKICAgICAgICAgICAgIGNsaWVudFRvRGlzY29ubmVjdC0+ZGlzY29ubmVjdCgpOwogICAgICAgICB9CkBAIC00OTgsMTcgKzUwNywzNyBAQAogICAgICAgICAgICAgICAgIHN0cmVycm9yKC1yZXMpLCByZXMpOwogICAgIH0KIAorICAgIGludCBjYWxsaW5nUGlkID0gQ2FtZXJhVGhyZWFkU3RhdGU6OmdldENhbGxpbmdQaWQoKTsKKyAgICBpbnQgY2FsbGluZ1VpZCA9IENhbWVyYVRocmVhZFN0YXRlOjpnZXRDYWxsaW5nVWlkKCk7CisgICAgc3RkOjp2ZWN0b3I8aW50MzJfdD4gdGFnc1JlbW92ZWQ7CisgICAgLy8gSWYgaXQncyBub3QgY2FsbGluZyBmcm9tIGNhbWVyYXNlcnZlciwgY2hlY2sgdGhlIHBlcm1pc3Npb24uCisgICAgaWYgKChjYWxsaW5nUGlkICE9IGdldHBpZCgpKSAmJgorICAgICAgICAgICAgIWNoZWNrUGVybWlzc2lvbihTdHJpbmcxNigiYW5kcm9pZC5wZXJtaXNzaW9uLkNBTUVSQSIpLCBjYWxsaW5nUGlkLCBjYWxsaW5nVWlkKSkgeworICAgICAgICByZXMgPSBjYW1lcmFJbmZvLT5yZW1vdmVQZXJtaXNzaW9uRW50cmllcygKKyAgICAgICAgICAgICAgICBtQ2FtZXJhUHJvdmlkZXJNYW5hZ2VyLT5nZXRQcm92aWRlclRhZ0lkTG9ja2VkKFN0cmluZzgoY2FtZXJhSWQpLnN0cmluZygpKSwKKyAgICAgICAgICAgICAgICAmdGFnc1JlbW92ZWQpOworICAgICAgICBpZiAocmVzICE9IE9LKSB7CisgICAgICAgICAgICBjYW1lcmFJbmZvLT5jbGVhcigpOworICAgICAgICAgICAgcmV0dXJuIFNUQVRVU19FUlJPUl9GTVQoRVJST1JfSU5WQUxJRF9PUEVSQVRJT04sICJGYWlsZWQgdG8gcmVtb3ZlIGNhbWVyYSIKKyAgICAgICAgICAgICAgICAgICAgIiBjaGFyYWN0ZXJpc3RpY3MgbmVlZGluZyBjYW1lcmEgcGVybWlzc2lvbiBmb3IgZGV2aWNlICVzOiAlcyAoJWQpIiwKKyAgICAgICAgICAgICAgICAgICAgU3RyaW5nOChjYW1lcmFJZCkuc3RyaW5nKCksIHN0cmVycm9yKC1yZXMpLCByZXMpOworICAgICAgICB9CisgICAgfQorCisgICAgaWYgKCF0YWdzUmVtb3ZlZC5lbXB0eSgpKSB7CisgICAgICAgIHJlcyA9IGNhbWVyYUluZm8tPnVwZGF0ZShBTkRST0lEX1JFUVVFU1RfQ0hBUkFDVEVSSVNUSUNfS0VZU19ORUVESU5HX1BFUk1JU1NJT04sCisgICAgICAgICAgICAgICAgdGFnc1JlbW92ZWQuZGF0YSgpLCB0YWdzUmVtb3ZlZC5zaXplKCkpOworICAgICAgICBpZiAocmVzICE9IE9LKSB7CisgICAgICAgICAgICBjYW1lcmFJbmZvLT5jbGVhcigpOworICAgICAgICAgICAgcmV0dXJuIFNUQVRVU19FUlJPUl9GTVQoRVJST1JfSU5WQUxJRF9PUEVSQVRJT04sICJGYWlsZWQgdG8gaW5zZXJ0IGNhbWVyYSAiCisgICAgICAgICAgICAgICAgICAgICJrZXlzIG5lZWRpbmcgcGVybWlzc2lvbiBmb3IgZGV2aWNlICVzOiAlcyAoJWQpIiwgU3RyaW5nOChjYW1lcmFJZCkuc3RyaW5nKCksCisgICAgICAgICAgICAgICAgICAgIHN0cmVycm9yKC1yZXMpLCByZXMpOworICAgICAgICB9CisgICAgfQorCiAgICAgcmV0dXJuIHJldDsKIH0KIAotaW50IENhbWVyYVNlcnZpY2U6OmdldENhbGxpbmdQaWQoKSB7Ci0gICAgcmV0dXJuIElQQ1RocmVhZFN0YXRlOjpzZWxmKCktPmdldENhbGxpbmdQaWQoKTsKLX0KLQotaW50IENhbWVyYVNlcnZpY2U6OmdldENhbGxpbmdVaWQoKSB7Ci0gICAgcmV0dXJuIElQQ1RocmVhZFN0YXRlOjpzZWxmKCktPmdldENhbGxpbmdVaWQoKTsKLX0KLQogU3RyaW5nOCBDYW1lcmFTZXJ2aWNlOjpnZXRGb3JtYXR0ZWRDdXJyZW50VGltZSgpIHsKICAgICB0aW1lX3Qgbm93ID0gdGltZShudWxscHRyKTsKICAgICBjaGFyIGZvcm1hdHRlZFRpbWVbNjRdOwpAQCAtNTg5LDcgKzYxOCw3IEBACiBTdGF0dXMgQ2FtZXJhU2VydmljZTo6bWFrZUNsaWVudChjb25zdCBzcDxDYW1lcmFTZXJ2aWNlPiYgY2FtZXJhU2VydmljZSwKICAgICAgICAgY29uc3Qgc3A8SUludGVyZmFjZT4mIGNhbWVyYUNiLCBjb25zdCBTdHJpbmcxNiYgcGFja2FnZU5hbWUsIGNvbnN0IFN0cmluZzgmIGNhbWVyYUlkLAogICAgICAgICBpbnQgYXBpMUNhbWVyYUlkLCBpbnQgZmFjaW5nLCBpbnQgY2xpZW50UGlkLCB1aWRfdCBjbGllbnRVaWQsIGludCBzZXJ2aWNlUGlkLAotICAgICAgICBib29sIGxlZ2FjeU1vZGUsIGludCBoYWxWZXJzaW9uLCBpbnQgZGV2aWNlVmVyc2lvbiwgYXBpTGV2ZWwgZWZmZWN0aXZlQXBpTGV2ZWwsCisgICAgICAgIGludCBoYWxWZXJzaW9uLCBpbnQgZGV2aWNlVmVyc2lvbiwgYXBpTGV2ZWwgZWZmZWN0aXZlQXBpTGV2ZWwsCiAgICAgICAgIC8qb3V0Ki9zcDxCYXNpY0NsaWVudD4qIGNsaWVudCkgewogCiAgICAgaWYgKGhhbFZlcnNpb24gPCAwIHx8IGhhbFZlcnNpb24gPT0gZGV2aWNlVmVyc2lvbikgewpAQCAtNjAxLDcgKzYzMCw3IEBACiAgICAgICAgICAgICAgICAgc3A8SUNhbWVyYUNsaWVudD4gdG1wID0gc3RhdGljX2Nhc3Q8SUNhbWVyYUNsaWVudCo+KGNhbWVyYUNiLmdldCgpKTsKICAgICAgICAgICAgICAgICAqY2xpZW50ID0gbmV3IENhbWVyYUNsaWVudChjYW1lcmFTZXJ2aWNlLCB0bXAsIHBhY2thZ2VOYW1lLAogICAgICAgICAgICAgICAgICAgICAgICAgYXBpMUNhbWVyYUlkLCBmYWNpbmcsIGNsaWVudFBpZCwgY2xpZW50VWlkLAotICAgICAgICAgICAgICAgICAgICAgICAgZ2V0cGlkKCksIGxlZ2FjeU1vZGUpOworICAgICAgICAgICAgICAgICAgICAgICAgZ2V0cGlkKCkpOwogICAgICAgICAgICAgfSBlbHNlIHsgLy8gQ2FtZXJhMiBBUEkgcm91dGUKICAgICAgICAgICAgICAgICBBTE9HVygiQ2FtZXJhIHVzaW5nIG9sZCBIQUwgdmVyc2lvbjogJWQiLCBkZXZpY2VWZXJzaW9uKTsKICAgICAgICAgICAgICAgICByZXR1cm4gU1RBVFVTX0VSUk9SX0ZNVChFUlJPUl9ERVBSRUNBVEVEX0hBTCwKQEAgLTYxNCwxMiArNjQzLDEzIEBACiAgICAgICAgICAgY2FzZSBDQU1FUkFfREVWSUNFX0FQSV9WRVJTSU9OXzNfMjoKICAgICAgICAgICBjYXNlIENBTUVSQV9ERVZJQ0VfQVBJX1ZFUlNJT05fM18zOgogICAgICAgICAgIGNhc2UgQ0FNRVJBX0RFVklDRV9BUElfVkVSU0lPTl8zXzQ6CisgICAgICAgICAgY2FzZSBDQU1FUkFfREVWSUNFX0FQSV9WRVJTSU9OXzNfNToKICAgICAgICAgICAgIGlmIChlZmZlY3RpdmVBcGlMZXZlbCA9PSBBUElfMSkgeyAvLyBDYW1lcmExIEFQSSByb3V0ZQogICAgICAgICAgICAgICAgIHNwPElDYW1lcmFDbGllbnQ+IHRtcCA9IHN0YXRpY19jYXN0PElDYW1lcmFDbGllbnQqPihjYW1lcmFDYi5nZXQoKSk7CiAgICAgICAgICAgICAgICAgKmNsaWVudCA9IG5ldyBDYW1lcmEyQ2xpZW50KGNhbWVyYVNlcnZpY2UsIHRtcCwgcGFja2FnZU5hbWUsCiAgICAgICAgICAgICAgICAgICAgICAgICBjYW1lcmFJZCwgYXBpMUNhbWVyYUlkLAogICAgICAgICAgICAgICAgICAgICAgICAgZmFjaW5nLCBjbGllbnRQaWQsIGNsaWVudFVpZCwKLSAgICAgICAgICAgICAgICAgICAgICAgIHNlcnZpY2VQaWQsIGxlZ2FjeU1vZGUpOworICAgICAgICAgICAgICAgICAgICAgICAgc2VydmljZVBpZCk7CiAgICAgICAgICAgICB9IGVsc2UgeyAvLyBDYW1lcmEyIEFQSSByb3V0ZQogICAgICAgICAgICAgICAgIHNwPGhhcmR3YXJlOjpjYW1lcmEyOjpJQ2FtZXJhRGV2aWNlQ2FsbGJhY2tzPiB0bXAgPQogICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGljX2Nhc3Q8aGFyZHdhcmU6OmNhbWVyYTI6OklDYW1lcmFEZXZpY2VDYWxsYmFja3MqPihjYW1lcmFDYi5nZXQoKSk7CkBAIC02NDMsNyArNjczLDcgQEAKICAgICAgICAgICAgIHNwPElDYW1lcmFDbGllbnQ+IHRtcCA9IHN0YXRpY19jYXN0PElDYW1lcmFDbGllbnQqPihjYW1lcmFDYi5nZXQoKSk7CiAgICAgICAgICAgICAqY2xpZW50ID0gbmV3IENhbWVyYUNsaWVudChjYW1lcmFTZXJ2aWNlLCB0bXAsIHBhY2thZ2VOYW1lLAogICAgICAgICAgICAgICAgICAgICBhcGkxQ2FtZXJhSWQsIGZhY2luZywgY2xpZW50UGlkLCBjbGllbnRVaWQsCi0gICAgICAgICAgICAgICAgICAgIHNlcnZpY2VQaWQsIGxlZ2FjeU1vZGUpOworICAgICAgICAgICAgICAgICAgICBzZXJ2aWNlUGlkKTsKICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIC8vIE90aGVyIGNvbWJpbmF0aW9ucyAoZS5nLiBIQUwzLnggb3BlbiBhcyBIQUwyLngpIGFyZSBub3Qgc3VwcG9ydGVkIHlldC4KICAgICAgICAgICAgIEFMT0dFKCJJbnZhbGlkIGNhbWVyYSBIQUwgdmVyc2lvbiAleDogSEFMICV4IGRldmljZSBjYW4gb25seSBiZSIKQEAgLTczMiw3ICs3NjIsNyBAQAogfQogCiBTdGF0dXMgQ2FtZXJhU2VydmljZTo6aW5pdGlhbGl6ZVNoaW1NZXRhZGF0YShpbnQgY2FtZXJhSWQpIHsKLSAgICBpbnQgdWlkID0gZ2V0Q2FsbGluZ1VpZCgpOworICAgIGludCB1aWQgPSBDYW1lcmFUaHJlYWRTdGF0ZTo6Z2V0Q2FsbGluZ1VpZCgpOwogCiAgICAgU3RyaW5nMTYgaW50ZXJuYWxQYWNrYWdlTmFtZSgiY2FtZXJhc2VydmVyIik7CiAgICAgU3RyaW5nOCBpZCA9IFN0cmluZzg6OmZvcm1hdCgiJWQiLCBjYW1lcmFJZCk7CkBAIC03NDIsOCArNzcyLDcgQEAKICAgICAgICAgICAgIHNwPElDYW1lcmFDbGllbnQ+e251bGxwdHJ9LCBpZCwgY2FtZXJhSWQsCiAgICAgICAgICAgICBzdGF0aWNfY2FzdDxpbnQ+KENBTUVSQV9IQUxfQVBJX1ZFUlNJT05fVU5TUEVDSUZJRUQpLAogICAgICAgICAgICAgaW50ZXJuYWxQYWNrYWdlTmFtZSwgdWlkLCBVU0VfQ0FMTElOR19QSUQsCi0gICAgICAgICAgICBBUElfMSwgLypsZWdhY3lNb2RlKi8gZmFsc2UsIC8qc2hpbVVwZGF0ZU9ubHkqLyB0cnVlLAotICAgICAgICAgICAgLypvdXQqLyB0bXApCisgICAgICAgICAgICBBUElfMSwgLypzaGltVXBkYXRlT25seSovIHRydWUsIC8qb3V0Ki8gdG1wKQogICAgICAgICAgICAgKS5pc09rKCkpIHsKICAgICAgICAgQUxPR0UoIiVzOiBFcnJvciBpbml0aWFsaXppbmcgc2hpbSBtZXRhZGF0YTogJXMiLCBfX0ZVTkNUSU9OX18sIHJldC50b1N0cmluZzgoKS5zdHJpbmcoKSk7CiAgICAgfQpAQCAtNzgyLDkgKzgxMSw5IEBACiAgICAgICAgIH0KICAgICB9CiAKLSAgICBpbnQ2NF90IHRva2VuID0gSVBDVGhyZWFkU3RhdGU6OnNlbGYoKS0+Y2xlYXJDYWxsaW5nSWRlbnRpdHkoKTsKKyAgICBpbnQ2NF90IHRva2VuID0gQ2FtZXJhVGhyZWFkU3RhdGU6OmNsZWFyQ2FsbGluZ0lkZW50aXR5KCk7CiAgICAgcmV0ID0gaW5pdGlhbGl6ZVNoaW1NZXRhZGF0YShjYW1lcmFJZCk7Ci0gICAgSVBDVGhyZWFkU3RhdGU6OnNlbGYoKS0+cmVzdG9yZUNhbGxpbmdJZGVudGl0eSh0b2tlbik7CisgICAgQ2FtZXJhVGhyZWFkU3RhdGU6OnJlc3RvcmVDYWxsaW5nSWRlbnRpdHkodG9rZW4pOwogICAgIGlmICghcmV0LmlzT2soKSkgewogICAgICAgICAvLyBFcnJvciBhbHJlYWR5IGxvZ2dlZCBieSBjYWxsZWUKICAgICAgICAgcmV0dXJuIHJldDsKQEAgLTg0MSw3ICs4NzAsNyBAQAogICAgIH0KICNlbmRpZiAgLy8gX19CUklMTE9fXwogCi0gICAgaW50IGNhbGxpbmdQaWQgPSBnZXRDYWxsaW5nUGlkKCk7CisgICAgaW50IGNhbGxpbmdQaWQgPSBDYW1lcmFUaHJlYWRTdGF0ZTo6Z2V0Q2FsbGluZ1BpZCgpOwogCiAgICAgaWYgKCFtSW5pdGlhbGl6ZWQpIHsKICAgICAgICAgQUxPR0UoIkNhbWVyYVNlcnZpY2U6OmNvbm5lY3QgWCAoUElEICVkKSByZWplY3RlZCAoY2FtZXJhIEhBTCBtb2R1bGUgbm90IGxvYWRlZCkiLApAQCAtODc1LDggKzkwNCw4IEBACiBTdGF0dXMgQ2FtZXJhU2VydmljZTo6dmFsaWRhdGVDbGllbnRQZXJtaXNzaW9uc0xvY2tlZChjb25zdCBTdHJpbmc4JiBjYW1lcmFJZCwKICAgICAgICAgY29uc3QgU3RyaW5nOCYgY2xpZW50TmFtZTgsIGludCYgY2xpZW50VWlkLCBpbnQmIGNsaWVudFBpZCwKICAgICAgICAgLypvdXQqL2ludCYgb3JpZ2luYWxDbGllbnRQaWQpIGNvbnN0IHsKLSAgICBpbnQgY2FsbGluZ1BpZCA9IGdldENhbGxpbmdQaWQoKTsKLSAgICBpbnQgY2FsbGluZ1VpZCA9IGdldENhbGxpbmdVaWQoKTsKKyAgICBpbnQgY2FsbGluZ1BpZCA9IENhbWVyYVRocmVhZFN0YXRlOjpnZXRDYWxsaW5nUGlkKCk7CisgICAgaW50IGNhbGxpbmdVaWQgPSBDYW1lcmFUaHJlYWRTdGF0ZTo6Z2V0Q2FsbGluZ1VpZCgpOwogCiAgICAgLy8gQ2hlY2sgaWYgd2UgY2FuIHRydXN0IGNsaWVudFVpZAogICAgIGlmIChjbGllbnRVaWQgPT0gVVNFX0NBTExJTkdfVUlEKSB7CkBAIC05NDUsNyArOTc0LDcgQEAKIAogc3RhdHVzX3QgQ2FtZXJhU2VydmljZTo6Y2hlY2tJZkRldmljZUlzVXNhYmxlKGNvbnN0IFN0cmluZzgmIGNhbWVyYUlkKSBjb25zdCB7CiAgICAgYXV0byBjYW1lcmFTdGF0ZSA9IGdldENhbWVyYVN0YXRlKGNhbWVyYUlkKTsKLSAgICBpbnQgY2FsbGluZ1BpZCA9IGdldENhbGxpbmdQaWQoKTsKKyAgICBpbnQgY2FsbGluZ1BpZCA9IENhbWVyYVRocmVhZFN0YXRlOjpnZXRDYWxsaW5nUGlkKCk7CiAgICAgaWYgKGNhbWVyYVN0YXRlID09IG51bGxwdHIpIHsKICAgICAgICAgQUxPR0UoIkNhbWVyYVNlcnZpY2U6OmNvbm5lY3QgWCAoUElEICVkKSByZWplY3RlZCAoaW52YWxpZCBjYW1lcmEgSUQgJXMpIiwgY2FsbGluZ1BpZCwKICAgICAgICAgICAgICAgICBjYW1lcmFJZC5zdHJpbmcoKSk7CkBAIC0xMTQ5LDcgKzExNzgsNyBAQAogICAgIG1TZXJ2aWNlTG9jay51bmxvY2soKTsKIAogICAgIC8vIENsZWFyIGNhbGxlciBpZGVudGl0eSB0ZW1wb3JhcmlseSBzbyBjbGllbnQgZGlzY29ubmVjdCBQSUQgY2hlY2tzIHdvcmsgY29ycmVjdGx5Ci0gICAgaW50NjRfdCB0b2tlbiA9IElQQ1RocmVhZFN0YXRlOjpzZWxmKCktPmNsZWFyQ2FsbGluZ0lkZW50aXR5KCk7CisgICAgaW50NjRfdCB0b2tlbiA9IENhbWVyYVRocmVhZFN0YXRlOjpjbGVhckNhbGxpbmdJZGVudGl0eSgpOwogCiAgICAgLy8gRGVzdHJveSBldmljdGVkIGNsaWVudHMKICAgICBmb3IgKGF1dG8mIGkgOiBldmljdGVkQ2xpZW50cykgewpAQCAtMTE1Nyw3ICsxMTg2LDcgQEAKICAgICAgICAgaS0+Z2V0VmFsdWUoKS0+ZGlzY29ubmVjdCgpOyAvLyBDbGllbnRzIHdpbGwgcmVtb3ZlIHRoZW1zZWx2ZXMgZnJvbSB0aGUgYWN0aXZlIGNsaWVudCBsaXN0CiAgICAgfQogCi0gICAgSVBDVGhyZWFkU3RhdGU6OnNlbGYoKS0+cmVzdG9yZUNhbGxpbmdJZGVudGl0eSh0b2tlbik7CisgICAgQ2FtZXJhVGhyZWFkU3RhdGU6OnJlc3RvcmVDYWxsaW5nSWRlbnRpdHkodG9rZW4pOwogCiAgICAgZm9yIChjb25zdCBhdXRvJiBpIDogZXZpY3RlZENsaWVudHMpIHsKICAgICAgICAgQUxPR1YoIiVzOiBXYWl0aW5nIGZvciBkaXNjb25uZWN0IHRvIGNvbXBsZXRlIGZvciBjbGllbnQgZm9yIGRldmljZSAlcyAoUElEICUiIFBSSWQzMiAiKSIsCkBAIC0xMjA3LDExICsxMjM2LDEwIEBACiAgICAgc3A8Q2xpZW50PiBjbGllbnQgPSBudWxscHRyOwogICAgIHJldCA9IGNvbm5lY3RIZWxwZXI8SUNhbWVyYUNsaWVudCxDbGllbnQ+KGNhbWVyYUNsaWVudCwgaWQsIGFwaTFDYW1lcmFJZCwKICAgICAgICAgICAgIENBTUVSQV9IQUxfQVBJX1ZFUlNJT05fVU5TUEVDSUZJRUQsIGNsaWVudFBhY2thZ2VOYW1lLCBjbGllbnRVaWQsIGNsaWVudFBpZCwgQVBJXzEsCi0gICAgICAgICAgICAvKmxlZ2FjeU1vZGUqLyBmYWxzZSwgLypzaGltVXBkYXRlT25seSovIGZhbHNlLAotICAgICAgICAgICAgLypvdXQqL2NsaWVudCk7CisgICAgICAgICAgICAvKnNoaW1VcGRhdGVPbmx5Ki8gZmFsc2UsIC8qb3V0Ki9jbGllbnQpOwogCiAgICAgaWYoIXJldC5pc09rKCkpIHsKLSAgICAgICAgbG9nUmVqZWN0ZWQoaWQsIGdldENhbGxpbmdQaWQoKSwgU3RyaW5nOChjbGllbnRQYWNrYWdlTmFtZSksCisgICAgICAgIGxvZ1JlamVjdGVkKGlkLCBDYW1lcmFUaHJlYWRTdGF0ZTo6Z2V0Q2FsbGluZ1BpZCgpLCBTdHJpbmc4KGNsaWVudFBhY2thZ2VOYW1lKSwKICAgICAgICAgICAgICAgICByZXQudG9TdHJpbmc4KCkpOwogICAgICAgICByZXR1cm4gcmV0OwogICAgIH0KQEAgLTEyMzQsMTIgKzEyNjIsMTEgQEAKICAgICBTdGF0dXMgcmV0ID0gU3RhdHVzOjpvaygpOwogICAgIHNwPENsaWVudD4gY2xpZW50ID0gbnVsbHB0cjsKICAgICByZXQgPSBjb25uZWN0SGVscGVyPElDYW1lcmFDbGllbnQsQ2xpZW50PihjYW1lcmFDbGllbnQsIGlkLCBhcGkxQ2FtZXJhSWQsIGhhbFZlcnNpb24sCi0gICAgICAgICAgICBjbGllbnRQYWNrYWdlTmFtZSwgY2xpZW50VWlkLCBVU0VfQ0FMTElOR19QSUQsIEFQSV8xLAotICAgICAgICAgICAgLypsZWdhY3lNb2RlKi8gdHJ1ZSwgLypzaGltVXBkYXRlT25seSovIGZhbHNlLAorICAgICAgICAgICAgY2xpZW50UGFja2FnZU5hbWUsIGNsaWVudFVpZCwgVVNFX0NBTExJTkdfUElELCBBUElfMSwgLypzaGltVXBkYXRlT25seSovIGZhbHNlLAogICAgICAgICAgICAgLypvdXQqL2NsaWVudCk7CiAKICAgICBpZighcmV0LmlzT2soKSkgewotICAgICAgICBsb2dSZWplY3RlZChpZCwgZ2V0Q2FsbGluZ1BpZCgpLCBTdHJpbmc4KGNsaWVudFBhY2thZ2VOYW1lKSwKKyAgICAgICAgbG9nUmVqZWN0ZWQoaWQsIENhbWVyYVRocmVhZFN0YXRlOjpnZXRDYWxsaW5nUGlkKCksIFN0cmluZzgoY2xpZW50UGFja2FnZU5hbWUpLAogICAgICAgICAgICAgICAgIHJldC50b1N0cmluZzgoKSk7CiAgICAgICAgIHJldHVybiByZXQ7CiAgICAgfQpAQCAtMTI2MywxMiArMTI5MCwxMCBAQAogICAgIHJldCA9IGNvbm5lY3RIZWxwZXI8aGFyZHdhcmU6OmNhbWVyYTI6OklDYW1lcmFEZXZpY2VDYWxsYmFja3MsQ2FtZXJhRGV2aWNlQ2xpZW50PihjYW1lcmFDYiwgaWQsCiAgICAgICAgICAgICAvKmFwaTFDYW1lcmFJZCovLTEsCiAgICAgICAgICAgICBDQU1FUkFfSEFMX0FQSV9WRVJTSU9OX1VOU1BFQ0lGSUVELCBjbGllbnRQYWNrYWdlTmFtZSwKLSAgICAgICAgICAgIGNsaWVudFVpZCwgVVNFX0NBTExJTkdfUElELCBBUElfMiwKLSAgICAgICAgICAgIC8qbGVnYWN5TW9kZSovIGZhbHNlLCAvKnNoaW1VcGRhdGVPbmx5Ki8gZmFsc2UsCi0gICAgICAgICAgICAvKm91dCovY2xpZW50KTsKKyAgICAgICAgICAgIGNsaWVudFVpZCwgVVNFX0NBTExJTkdfUElELCBBUElfMiwgLypzaGltVXBkYXRlT25seSovIGZhbHNlLCAvKm91dCovY2xpZW50KTsKIAogICAgIGlmKCFyZXQuaXNPaygpKSB7Ci0gICAgICAgIGxvZ1JlamVjdGVkKGlkLCBnZXRDYWxsaW5nUGlkKCksIFN0cmluZzgoY2xpZW50UGFja2FnZU5hbWUpLAorICAgICAgICBsb2dSZWplY3RlZChpZCwgQ2FtZXJhVGhyZWFkU3RhdGU6OmdldENhbGxpbmdQaWQoKSwgU3RyaW5nOChjbGllbnRQYWNrYWdlTmFtZSksCiAgICAgICAgICAgICAgICAgcmV0LnRvU3RyaW5nOCgpKTsKICAgICAgICAgcmV0dXJuIHJldDsKICAgICB9CkBAIC0xMjgwLDcgKzEzMDUsNyBAQAogdGVtcGxhdGU8Y2xhc3MgQ0FMTEJBQ0ssIGNsYXNzIENMSUVOVD4KIFN0YXR1cyBDYW1lcmFTZXJ2aWNlOjpjb25uZWN0SGVscGVyKGNvbnN0IHNwPENBTExCQUNLPiYgY2FtZXJhQ2IsIGNvbnN0IFN0cmluZzgmIGNhbWVyYUlkLAogICAgICAgICBpbnQgYXBpMUNhbWVyYUlkLCBpbnQgaGFsVmVyc2lvbiwgY29uc3QgU3RyaW5nMTYmIGNsaWVudFBhY2thZ2VOYW1lLCBpbnQgY2xpZW50VWlkLAotICAgICAgICBpbnQgY2xpZW50UGlkLCBhcGlMZXZlbCBlZmZlY3RpdmVBcGlMZXZlbCwgYm9vbCBsZWdhY3lNb2RlLCBib29sIHNoaW1VcGRhdGVPbmx5LAorICAgICAgICBpbnQgY2xpZW50UGlkLCBhcGlMZXZlbCBlZmZlY3RpdmVBcGlMZXZlbCwgYm9vbCBzaGltVXBkYXRlT25seSwKICAgICAgICAgLypvdXQqL3NwPENMSUVOVD4mIGRldmljZSkgewogICAgIGJpbmRlcjo6U3RhdHVzIHJldCA9IGJpbmRlcjo6U3RhdHVzOjpvaygpOwogCkBAIC0xMzY1LDcgKzEzOTAsNyBAQAogICAgICAgICBzcDxCYXNpY0NsaWVudD4gdG1wID0gbnVsbHB0cjsKICAgICAgICAgaWYoIShyZXQgPSBtYWtlQ2xpZW50KHRoaXMsIGNhbWVyYUNiLCBjbGllbnRQYWNrYWdlTmFtZSwKICAgICAgICAgICAgICAgICBjYW1lcmFJZCwgYXBpMUNhbWVyYUlkLCBmYWNpbmcsCi0gICAgICAgICAgICAgICAgY2xpZW50UGlkLCBjbGllbnRVaWQsIGdldHBpZCgpLCBsZWdhY3lNb2RlLAorICAgICAgICAgICAgICAgIGNsaWVudFBpZCwgY2xpZW50VWlkLCBnZXRwaWQoKSwKICAgICAgICAgICAgICAgICBoYWxWZXJzaW9uLCBkZXZpY2VWZXJzaW9uLCBlZmZlY3RpdmVBcGlMZXZlbCwKICAgICAgICAgICAgICAgICAvKm91dCovJnRtcCkpLmlzT2soKSkgewogICAgICAgICAgICAgcmV0dXJuIHJldDsKQEAgLTE0NDksNyArMTQ3NCw3IEBACiAgICAgfQogCiAgICAgU3RyaW5nOCBpZCA9IFN0cmluZzgoY2FtZXJhSWQuc3RyaW5nKCkpOwotICAgIGludCB1aWQgPSBnZXRDYWxsaW5nVWlkKCk7CisgICAgaW50IHVpZCA9IENhbWVyYVRocmVhZFN0YXRlOjpnZXRDYWxsaW5nVWlkKCk7CiAKICAgICAvLyB2ZXJpZnkgaWQgaXMgdmFsaWQuCiAgICAgYXV0byBzdGF0ZSA9IGdldENhbWVyYVN0YXRlKGlkKTsKQEAgLTE1NTYsNyArMTU4MSw3IEBACiAKIFN0YXR1cyBDYW1lcmFTZXJ2aWNlOjpub3RpZnlTeXN0ZW1FdmVudChpbnQzMl90IGV2ZW50SWQsCiAgICAgICAgIGNvbnN0IHN0ZDo6dmVjdG9yPGludDMyX3Q+JiBhcmdzKSB7Ci0gICAgY29uc3QgaW50IHBpZCA9IGdldENhbGxpbmdQaWQoKTsKKyAgICBjb25zdCBpbnQgcGlkID0gQ2FtZXJhVGhyZWFkU3RhdGU6OmdldENhbGxpbmdQaWQoKTsKICAgICBjb25zdCBpbnQgc2VsZlBpZCA9IGdldHBpZCgpOwogCiAgICAgLy8gUGVybWlzc2lvbiBjaGVja3MKQEAgLTE1NjUsNyArMTU5MCw3IEBACiAgICAgICAgIC8vIHBlcm1pc3Npb25zIHRvIG5vdGlmeSB0aGUgY2FtZXJhIHNlcnZpY2UgYWJvdXQgc3lzdGVtIGV2ZW50cwogICAgICAgICBpZiAoIWNoZWNrQ2FsbGluZ1Blcm1pc3Npb24oCiAgICAgICAgICAgICAgICAgU3RyaW5nMTYoImFuZHJvaWQucGVybWlzc2lvbi5DQU1FUkFfU0VORF9TWVNURU1fRVZFTlRTIikpKSB7Ci0gICAgICAgICAgICBjb25zdCBpbnQgdWlkID0gZ2V0Q2FsbGluZ1VpZCgpOworICAgICAgICAgICAgY29uc3QgaW50IHVpZCA9IENhbWVyYVRocmVhZFN0YXRlOjpnZXRDYWxsaW5nVWlkKCk7CiAgICAgICAgICAgICBBTE9HRSgiUGVybWlzc2lvbiBEZW5pYWw6IGNhbm5vdCBzZW5kIHVwZGF0ZXMgdG8gY2FtZXJhIHNlcnZpY2UgYWJvdXQgc3lzdGVtIgogICAgICAgICAgICAgICAgICAgICAiIGV2ZW50cyBmcm9tIHBpZD0lZCwgdWlkPSVkIiwgcGlkLCB1aWQpOwogICAgICAgICAgICAgcmV0dXJuIFNUQVRVU19FUlJPUl9GTVQoRVJST1JfUEVSTUlTU0lPTl9ERU5JRUQsCkBAIC0xNzE3LDcgKzE3NDIsNyBAQAogICAgIH0KIAogICAgIGludCBkZXZpY2VWZXJzaW9uID0gZ2V0RGV2aWNlVmVyc2lvbihpZCk7Ci0gICAgc3dpdGNoKGRldmljZVZlcnNpb24pIHsKKyAgICBzd2l0Y2ggKGRldmljZVZlcnNpb24pIHsKICAgICAgICAgY2FzZSBDQU1FUkFfREVWSUNFX0FQSV9WRVJTSU9OXzFfMDoKICAgICAgICAgY2FzZSBDQU1FUkFfREVWSUNFX0FQSV9WRVJTSU9OXzNfMDoKICAgICAgICAgY2FzZSBDQU1FUkFfREVWSUNFX0FQSV9WRVJTSU9OXzNfMToKQEAgLTE3MzQsNiArMTc1OSw3IEBACiAgICAgICAgIGNhc2UgQ0FNRVJBX0RFVklDRV9BUElfVkVSU0lPTl8zXzI6CiAgICAgICAgIGNhc2UgQ0FNRVJBX0RFVklDRV9BUElfVkVSU0lPTl8zXzM6CiAgICAgICAgIGNhc2UgQ0FNRVJBX0RFVklDRV9BUElfVkVSU0lPTl8zXzQ6CisgICAgICAgIGNhc2UgQ0FNRVJBX0RFVklDRV9BUElfVkVSU0lPTl8zXzU6CiAgICAgICAgICAgICBBTE9HVigiJXM6IENhbWVyYSBpZCAlcyB1c2VzIEhBTDMuMiBvciBuZXdlciwgc3VwcG9ydHMgYXBpMS9hcGkyIGRpcmVjdGx5IiwKICAgICAgICAgICAgICAgICAgICAgX19GVU5DVElPTl9fLCBpZC5zdHJpbmcoKSk7CiAgICAgICAgICAgICAqaXNTdXBwb3J0ZWQgPSB0cnVlOwpAQCAtMTc1NCw2ICsxNzgwLDE4IEBACiAgICAgcmV0dXJuIFN0YXR1czo6b2soKTsKIH0KIAorU3RhdHVzIENhbWVyYVNlcnZpY2U6OmlzSGlkZGVuUGh5c2ljYWxDYW1lcmEoY29uc3QgU3RyaW5nMTYmIGNhbWVyYUlkLAorICAgICAgICAvKm91dCovIGJvb2wgKmlzU3VwcG9ydGVkKSB7CisgICAgQVRSQUNFX0NBTEwoKTsKKworICAgIGNvbnN0IFN0cmluZzggaWQgPSBTdHJpbmc4KGNhbWVyYUlkKTsKKworICAgIEFMT0dWKCIlczogZm9yIGNhbWVyYSBJRCA9ICVzIiwgX19GVU5DVElPTl9fLCBpZC5zdHJpbmcoKSk7CisgICAgKmlzU3VwcG9ydGVkID0gbUNhbWVyYVByb3ZpZGVyTWFuYWdlci0+aXNIaWRkZW5QaHlzaWNhbENhbWVyYShpZC5zdHJpbmcoKSk7CisKKyAgICByZXR1cm4gU3RhdHVzOjpvaygpOworfQorCiB2b2lkIENhbWVyYVNlcnZpY2U6OnJlbW92ZUJ5Q2xpZW50KGNvbnN0IEJhc2ljQ2xpZW50KiBjbGllbnQpIHsKICAgICBNdXRleDo6QXV0b2xvY2sgbG9jayhtU2VydmljZUxvY2spOwogICAgIGZvciAoYXV0byYgaSA6IG1BY3RpdmVDbGllbnRNYW5hZ2VyLmdldEFsbCgpKSB7CkBAIC0xOTAxLDEzICsxOTM5LDEzIEBACiAgICAgbVNlcnZpY2VMb2NrLnVubG9jaygpOwogCiAgICAgLy8gQ2xlYXIgY2FsbGVyIGlkZW50aXR5IHRlbXBvcmFyaWx5IHNvIGNsaWVudCBkaXNjb25uZWN0IFBJRCBjaGVja3Mgd29yayBjb3JyZWN0bHkKLSAgICBpbnQ2NF90IHRva2VuID0gSVBDVGhyZWFkU3RhdGU6OnNlbGYoKS0+Y2xlYXJDYWxsaW5nSWRlbnRpdHkoKTsKKyAgICBpbnQ2NF90IHRva2VuID0gQ2FtZXJhVGhyZWFkU3RhdGU6OmNsZWFyQ2FsbGluZ0lkZW50aXR5KCk7CiAKICAgICBmb3IgKGF1dG8mIGkgOiBldmljdGVkKSB7CiAgICAgICAgIGktPmRpc2Nvbm5lY3QoKTsKICAgICB9CiAKLSAgICBJUENUaHJlYWRTdGF0ZTo6c2VsZigpLT5yZXN0b3JlQ2FsbGluZ0lkZW50aXR5KHRva2VuKTsKKyAgICBDYW1lcmFUaHJlYWRTdGF0ZTo6cmVzdG9yZUNhbGxpbmdJZGVudGl0eSh0b2tlbik7CiAKICAgICAvLyBSZWFjcXVpcmUgbVNlcnZpY2VMb2NrCiAgICAgbVNlcnZpY2VMb2NrLmxvY2soKTsKQEAgLTE5NzUsNyArMjAxMyw2IEBACiBzdGF0dXNfdCBDYW1lcmFTZXJ2aWNlOjpvblRyYW5zYWN0KHVpbnQzMl90IGNvZGUsIGNvbnN0IFBhcmNlbCYgZGF0YSwgUGFyY2VsKiByZXBseSwKICAgICAgICAgdWludDMyX3QgZmxhZ3MpIHsKIAotCiAgICAgLy8gUGVybWlzc2lvbiBjaGVja3MKICAgICBzd2l0Y2ggKGNvZGUpIHsKICAgICAgICAgY2FzZSBTSEVMTF9DT01NQU5EX1RSQU5TQUNUSU9OOiB7CkBAIC0yMDkxLDcgKzIxMjgsNyBAQAogICAgICAgICAgICAgICAgIHNlcnZpY2VQaWQpLAogICAgICAgICBtQ2FtZXJhSWQoYXBpMUNhbWVyYUlkKQogewotICAgIGludCBjYWxsaW5nUGlkID0gZ2V0Q2FsbGluZ1BpZCgpOworICAgIGludCBjYWxsaW5nUGlkID0gQ2FtZXJhVGhyZWFkU3RhdGU6OmdldENhbGxpbmdQaWQoKTsKICAgICBMT0cxKCJDbGllbnQ6OkNsaWVudCBFIChwaWQgJWQsIGlkICVkKSIsIGNhbGxpbmdQaWQsIG1DYW1lcmFJZCk7CiAKICAgICBtUmVtb3RlQ2FsbGJhY2sgPSBjYW1lcmFDbGllbnQ7CkBAIC0yMjAwLDcgKzIyMzcsNyBAQAogICAgIC8vIE5vIGR1bXBpbmcgb2YgY2xpZW50cyBkaXJlY3RseSBvdmVyIEJpbmRlciwKICAgICAvLyBtdXN0IGdvIHRocm91Z2ggQ2FtZXJhU2VydmljZTo6ZHVtcAogICAgIGFuZHJvaWRfZXJyb3JXcml0ZVdpdGhJbmZvTG9nKFNOX0VWRU5UX0xPR19JRCwgIjI2MjY1NDAzIiwKLSAgICAgICAgICAgIElQQ1RocmVhZFN0YXRlOjpzZWxmKCktPmdldENhbGxpbmdVaWQoKSwgTlVMTCwgMCk7CisgICAgICAgICAgICBDYW1lcmFUaHJlYWRTdGF0ZTo6Z2V0Q2FsbGluZ1VpZCgpLCBOVUxMLCAwKTsKICAgICByZXR1cm4gT0s7CiB9CiAKQEAgLTIzMzcsNyArMjM3NCw3IEBACiAKICAgICAvLyBSZXNldCB0aGUgY2xpZW50IFBJRCB0byBhbGxvdyBzZXJ2ZXItaW5pdGlhdGVkIGRpc2Nvbm5lY3QsCiAgICAgLy8gYW5kIHRvIHByZXZlbnQgZnVydGhlciBjYWxscyBieSBjbGllbnQuCi0gICAgbUNsaWVudFBpZCA9IGdldENhbGxpbmdQaWQoKTsKKyAgICBtQ2xpZW50UGlkID0gQ2FtZXJhVGhyZWFkU3RhdGU6OmdldENhbGxpbmdQaWQoKTsKICAgICBDYXB0dXJlUmVzdWx0RXh0cmFzIHJlc3VsdEV4dHJhczsgLy8gYSBkdW1teSByZXN1bHQgKGludmFsaWQpCiAgICAgbm90aWZ5RXJyb3IoaGFyZHdhcmU6OmNhbWVyYTI6OklDYW1lcmFEZXZpY2VDYWxsYmFja3M6OkVSUk9SX0NBTUVSQV9ESVNBQkxFRCwgcmVzdWx0RXh0cmFzKTsKICAgICBkaXNjb25uZWN0KCk7CkBAIC0yNjk4LDggKzI3MzUsOCBAQAogCiAgICAgaWYgKGNoZWNrQ2FsbGluZ1Blcm1pc3Npb24oU3RyaW5nMTYoImFuZHJvaWQucGVybWlzc2lvbi5EVU1QIikpID09IGZhbHNlKSB7CiAgICAgICAgIGRwcmludGYoZmQsICJQZXJtaXNzaW9uIERlbmlhbDogY2FuJ3QgZHVtcCBDYW1lcmFTZXJ2aWNlIGZyb20gcGlkPSVkLCB1aWQ9JWRcbiIsCi0gICAgICAgICAgICAgICAgZ2V0Q2FsbGluZ1BpZCgpLAotICAgICAgICAgICAgICAgIGdldENhbGxpbmdVaWQoKSk7CisgICAgICAgICAgICAgICAgQ2FtZXJhVGhyZWFkU3RhdGU6OmdldENhbGxpbmdQaWQoKSwKKyAgICAgICAgICAgICAgICBDYW1lcmFUaHJlYWRTdGF0ZTo6Z2V0Q2FsbGluZ1VpZCgpKTsKICAgICAgICAgcmV0dXJuIE5PX0VSUk9SOwogICAgIH0KICAgICBib29sIGxvY2tlZCA9IHRyeUxvY2sobVNlcnZpY2VMb2NrKTsKQEAgLTI4NzIsNyArMjkwOSw3IEBACiAgICAgICAqIGJpbmRlciBkcml2ZXIKICAgICAgICovCiAgICAgLy8gUElEIGhlcmUgaXMgYXBwcm94aW1hdGUgYW5kIGNhbiBiZSB3cm9uZy4KLSAgICBsb2dDbGllbnREaWVkKGdldENhbGxpbmdQaWQoKSwgU3RyaW5nOCgiQmluZGVyIGRpZWQgdW5leHBlY3RlZGx5IikpOworICAgIGxvZ0NsaWVudERpZWQoQ2FtZXJhVGhyZWFkU3RhdGU6OmdldENhbGxpbmdQaWQoKSwgU3RyaW5nOCgiQmluZGVyIGRpZWQgdW5leHBlY3RlZGx5IikpOwogCiAgICAgLy8gY2hlY2sgdG9yY2ggY2xpZW50CiAgICAgaGFuZGxlVG9yY2hDbGllbnRCaW5kZXJEaWVkKHdobyk7CmRpZmYgLS1naXQgYS9zZXJ2aWNlcy9jYW1lcmEvbGliY2FtZXJhc2VydmljZS9DYW1lcmFTZXJ2aWNlLmggYi9zZXJ2aWNlcy9jYW1lcmEvbGliY2FtZXJhc2VydmljZS9DYW1lcmFTZXJ2aWNlLmgKaW5kZXggNjI0ZDFjYS4uMDY0ODYzZiAxMDA2NDQKLS0tIGEvc2VydmljZXMvY2FtZXJhL2xpYmNhbWVyYXNlcnZpY2UvQ2FtZXJhU2VydmljZS5oCisrKyBiL3NlcnZpY2VzL2NhbWVyYS9saWJjYW1lcmFzZXJ2aWNlL0NhbWVyYVNlcnZpY2UuaApAQCAtMTU5LDYgKzE1OSwxMSBAQAogICAgICAgICAgICAgLypvdXQqLwogICAgICAgICAgICAgYm9vbCAqaXNTdXBwb3J0ZWQpOwogCisgICAgdmlydHVhbCBiaW5kZXI6OlN0YXR1cyAgICBpc0hpZGRlblBoeXNpY2FsQ2FtZXJhKAorICAgICAgICAgICAgY29uc3QgU3RyaW5nMTYmIGNhbWVyYUlkLAorICAgICAgICAgICAgLypvdXQqLworICAgICAgICAgICAgYm9vbCAqaXNTdXBwb3J0ZWQpOworCiAgICAgLy8gRXh0cmEgcGVybWlzc2lvbnMgY2hlY2tzCiAgICAgdmlydHVhbCBzdGF0dXNfdCAgICBvblRyYW5zYWN0KHVpbnQzMl90IGNvZGUsIGNvbnN0IFBhcmNlbCYgZGF0YSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUGFyY2VsKiByZXBseSwgdWludDMyX3QgZmxhZ3MpOwpAQCAtNTg1LDggKzU5MCw3IEBACiAgICAgdGVtcGxhdGU8Y2xhc3MgQ0FMTEJBQ0ssIGNsYXNzIENMSUVOVD4KICAgICBiaW5kZXI6OlN0YXR1cyBjb25uZWN0SGVscGVyKGNvbnN0IHNwPENBTExCQUNLPiYgY2FtZXJhQ2IsIGNvbnN0IFN0cmluZzgmIGNhbWVyYUlkLAogICAgICAgICAgICAgaW50IGFwaTFDYW1lcmFJZCwgaW50IGhhbFZlcnNpb24sIGNvbnN0IFN0cmluZzE2JiBjbGllbnRQYWNrYWdlTmFtZSwKLSAgICAgICAgICAgIGludCBjbGllbnRVaWQsIGludCBjbGllbnRQaWQsCi0gICAgICAgICAgICBhcGlMZXZlbCBlZmZlY3RpdmVBcGlMZXZlbCwgYm9vbCBsZWdhY3lNb2RlLCBib29sIHNoaW1VcGRhdGVPbmx5LAorICAgICAgICAgICAgaW50IGNsaWVudFVpZCwgaW50IGNsaWVudFBpZCwgYXBpTGV2ZWwgZWZmZWN0aXZlQXBpTGV2ZWwsIGJvb2wgc2hpbVVwZGF0ZU9ubHksCiAgICAgICAgICAgICAvKm91dCovc3A8Q0xJRU5UPiYgZGV2aWNlKTsKIAogICAgIC8vIExvY2sgZ3VhcmRpbmcgY2FtZXJhIHNlcnZpY2Ugc3RhdGUKQEAgLTgzMiwxMCArODM2LDYgQEAKICAgICAvLyBQcmludHMgdGhlIHNoZWxsIGNvbW1hbmQgaGVscAogICAgIHN0YXR1c190IHByaW50SGVscChpbnQgb3V0KTsKIAotICAgIHN0YXRpYyBpbnQgZ2V0Q2FsbGluZ1BpZCgpOwotCi0gICAgc3RhdGljIGludCBnZXRDYWxsaW5nVWlkKCk7Ci0KICAgICAvKioKICAgICAgKiBHZXQgdGhlIGN1cnJlbnQgc3lzdGVtIHRpbWUgYXMgYSBmb3JtYXR0ZWQgc3RyaW5nLgogICAgICAqLwpAQCAtODQ0LDcgKzg0NCw3IEBACiAgICAgc3RhdGljIGJpbmRlcjo6U3RhdHVzIG1ha2VDbGllbnQoY29uc3Qgc3A8Q2FtZXJhU2VydmljZT4mIGNhbWVyYVNlcnZpY2UsCiAgICAgICAgICAgICBjb25zdCBzcDxJSW50ZXJmYWNlPiYgY2FtZXJhQ2IsIGNvbnN0IFN0cmluZzE2JiBwYWNrYWdlTmFtZSwgY29uc3QgU3RyaW5nOCYgY2FtZXJhSWQsCiAgICAgICAgICAgICBpbnQgYXBpMUNhbWVyYUlkLCBpbnQgZmFjaW5nLCBpbnQgY2xpZW50UGlkLCB1aWRfdCBjbGllbnRVaWQsIGludCBzZXJ2aWNlUGlkLAotICAgICAgICAgICAgYm9vbCBsZWdhY3lNb2RlLCBpbnQgaGFsVmVyc2lvbiwgaW50IGRldmljZVZlcnNpb24sIGFwaUxldmVsIGVmZmVjdGl2ZUFwaUxldmVsLAorICAgICAgICAgICAgaW50IGhhbFZlcnNpb24sIGludCBkZXZpY2VWZXJzaW9uLCBhcGlMZXZlbCBlZmZlY3RpdmVBcGlMZXZlbCwKICAgICAgICAgICAgIC8qb3V0Ki9zcDxCYXNpY0NsaWVudD4qIGNsaWVudCk7CiAKICAgICBzdGF0dXNfdCBjaGVja0NhbWVyYUFjY2Vzcyhjb25zdCBTdHJpbmcxNiYgb3BQYWNrYWdlTmFtZSk7CmRpZmYgLS1naXQgYS9zZXJ2aWNlcy9jYW1lcmEvbGliY2FtZXJhc2VydmljZS9URVNUX01BUFBJTkcgYi9zZXJ2aWNlcy9jYW1lcmEvbGliY2FtZXJhc2VydmljZS9URVNUX01BUFBJTkcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmZkYWM2OAotLS0gL2Rldi9udWxsCisrKyBiL3NlcnZpY2VzL2NhbWVyYS9saWJjYW1lcmFzZXJ2aWNlL1RFU1RfTUFQUElORwpAQCAtMCwwICsxLDcgQEAKK3sKKyAgInByZXN1Ym1pdCI6IFsKKyAgICB7CisgICAgICAgIm5hbWUiOiAiY2FtZXJhc2VydmljZV90ZXN0IgorICAgIH0KKyAgXQorfQpkaWZmIC0tZ2l0IGEvc2VydmljZXMvY2FtZXJhL2xpYmNhbWVyYXNlcnZpY2UvYXBpMS9DYW1lcmEyQ2xpZW50LmNwcCBiL3NlcnZpY2VzL2NhbWVyYS9saWJjYW1lcmFzZXJ2aWNlL2FwaTEvQ2FtZXJhMkNsaWVudC5jcHAKaW5kZXggOGJiMjRkNC4uYzljMjE2YiAxMDA2NDQKLS0tIGEvc2VydmljZXMvY2FtZXJhL2xpYmNhbWVyYXNlcnZpY2UvYXBpMS9DYW1lcmEyQ2xpZW50LmNwcAorKysgYi9zZXJ2aWNlcy9jYW1lcmEvbGliY2FtZXJhc2VydmljZS9hcGkxL0NhbWVyYTJDbGllbnQuY3BwCkBAIC0zMyw2ICszMyw3IEBACiAjaW5jbHVkZSAiYXBpMS9jbGllbnQyL0NhcHR1cmVTZXF1ZW5jZXIuaCIKICNpbmNsdWRlICJhcGkxL2NsaWVudDIvQ2FsbGJhY2tQcm9jZXNzb3IuaCIKICNpbmNsdWRlICJhcGkxL2NsaWVudDIvWnNsUHJvY2Vzc29yLmgiCisjaW5jbHVkZSAidXRpbHMvQ2FtZXJhVGhyZWFkU3RhdGUuaCIKIAogI2RlZmluZSBBTE9HMSguLi4pIEFMT0dEX0lGKGdMb2dMZXZlbCA+PSAxLCBfX1ZBX0FSR1NfXyk7CiAjZGVmaW5lIEFMT0cyKC4uLikgQUxPR0RfSUYoZ0xvZ0xldmVsID49IDIsIF9fVkFfQVJHU19fKTsKQEAgLTQ0LDEwICs0NSw2IEBACiBuYW1lc3BhY2UgYW5kcm9pZCB7CiB1c2luZyBuYW1lc3BhY2UgY2FtZXJhMjsKIAotc3RhdGljIGludCBnZXRDYWxsaW5nUGlkKCkgewotICAgIHJldHVybiBJUENUaHJlYWRTdGF0ZTo6c2VsZigpLT5nZXRDYWxsaW5nUGlkKCk7Ci19Ci0KIC8vIEludGVyZmFjZSB1c2VkIGJ5IENhbWVyYVNlcnZpY2UKIAogQ2FtZXJhMkNsaWVudDo6Q2FtZXJhMkNsaWVudChjb25zdCBzcDxDYW1lcmFTZXJ2aWNlPiYgY2FtZXJhU2VydmljZSwKQEAgLTU4LDggKzU1LDcgQEAKICAgICAgICAgaW50IGNhbWVyYUZhY2luZywKICAgICAgICAgaW50IGNsaWVudFBpZCwKICAgICAgICAgdWlkX3QgY2xpZW50VWlkLAotICAgICAgICBpbnQgc2VydmljZVBpZCwKLSAgICAgICAgYm9vbCBsZWdhY3lNb2RlKToKKyAgICAgICAgaW50IHNlcnZpY2VQaWQpOgogICAgICAgICBDYW1lcmEyQ2xpZW50QmFzZShjYW1lcmFTZXJ2aWNlLCBjYW1lcmFDbGllbnQsIGNsaWVudFBhY2thZ2VOYW1lLAogICAgICAgICAgICAgICAgIGNhbWVyYURldmljZUlkLCBhcGkxQ2FtZXJhSWQsIGNhbWVyYUZhY2luZywKICAgICAgICAgICAgICAgICBjbGllbnRQaWQsIGNsaWVudFVpZCwgc2VydmljZVBpZCksCkBAIC02OSw4ICs2NSw2IEBACiAKICAgICBTaGFyZWRQYXJhbWV0ZXJzOjpMb2NrIGwobVBhcmFtZXRlcnMpOwogICAgIGwubVBhcmFtZXRlcnMuc3RhdGUgPSBQYXJhbWV0ZXJzOjpESVNDT05ORUNURUQ7Ci0KLSAgICBtTGVnYWN5TW9kZSA9IGxlZ2FjeU1vZGU7CiB9CiAKIHN0YXR1c190IENhbWVyYTJDbGllbnQ6OmluaXRpYWxpemUoc3A8Q2FtZXJhUHJvdmlkZXJNYW5hZ2VyPiBtYW5hZ2VyLCBjb25zdCBTdHJpbmc4JiBtb25pdG9yVGFncykgewpAQCAtNDA1LDcgKzM5OSw3IEBACiAKICAgICBiaW5kZXI6OlN0YXR1cyByZXMgPSBiaW5kZXI6OlN0YXR1czo6b2soKTsKICAgICAvLyBBbGxvdyBib3RoIGNsaWVudCBhbmQgdGhlIGNhbWVyYXNlcnZlciB0byBkaXNjb25uZWN0IGF0IGFsbCB0aW1lcwotICAgIGludCBjYWxsaW5nUGlkID0gZ2V0Q2FsbGluZ1BpZCgpOworICAgIGludCBjYWxsaW5nUGlkID0gQ2FtZXJhVGhyZWFkU3RhdGU6OmdldENhbGxpbmdQaWQoKTsKICAgICBpZiAoY2FsbGluZ1BpZCAhPSBtQ2xpZW50UGlkICYmIGNhbGxpbmdQaWQgIT0gbVNlcnZpY2VQaWQpIHJldHVybiByZXM7CiAKICAgICBpZiAobURldmljZSA9PSAwKSByZXR1cm4gcmVzOwpAQCAtNDYwLDggKzQ1NCw2IEBACiAKICAgICBtRGV2aWNlLT5kaXNjb25uZWN0KCk7CiAKLSAgICBtRGV2aWNlLmNsZWFyKCk7Ci0KICAgICBDYW1lcmFTZXJ2aWNlOjpDbGllbnQ6OmRpc2Nvbm5lY3QoKTsKIAogICAgIHJldHVybiByZXM7CkBAIC00NzIsMTQgKzQ2NCwxNCBAQAogICAgIEFMT0dWKCIlczogRSIsIF9fRlVOQ1RJT05fXyk7CiAgICAgTXV0ZXg6OkF1dG9sb2NrIGljbChtQmluZGVyU2VyaWFsaXphdGlvbkxvY2spOwogCi0gICAgaWYgKG1DbGllbnRQaWQgIT0gMCAmJiBnZXRDYWxsaW5nUGlkKCkgIT0gbUNsaWVudFBpZCkgeworICAgIGlmIChtQ2xpZW50UGlkICE9IDAgJiYgQ2FtZXJhVGhyZWFkU3RhdGU6OmdldENhbGxpbmdQaWQoKSAhPSBtQ2xpZW50UGlkKSB7CiAgICAgICAgIEFMT0dFKCIlczogQ2FtZXJhICVkOiBDb25uZWN0aW9uIGF0dGVtcHQgZnJvbSBwaWQgJWQ7ICIKICAgICAgICAgICAgICAgICAiY3VycmVudCBsb2NrZWQgdG8gcGlkICVkIiwgX19GVU5DVElPTl9fLAotICAgICAgICAgICAgICAgIG1DYW1lcmFJZCwgZ2V0Q2FsbGluZ1BpZCgpLCBtQ2xpZW50UGlkKTsKKyAgICAgICAgICAgICAgICBtQ2FtZXJhSWQsIENhbWVyYVRocmVhZFN0YXRlOjpnZXRDYWxsaW5nUGlkKCksIG1DbGllbnRQaWQpOwogICAgICAgICByZXR1cm4gQkFEX1ZBTFVFOwogICAgIH0KIAotICAgIG1DbGllbnRQaWQgPSBnZXRDYWxsaW5nUGlkKCk7CisgICAgbUNsaWVudFBpZCA9IENhbWVyYVRocmVhZFN0YXRlOjpnZXRDYWxsaW5nUGlkKCk7CiAKICAgICBtUmVtb3RlQ2FsbGJhY2sgPSBjbGllbnQ7CiAgICAgbVNoYXJlZENhbWVyYUNhbGxiYWNrcyA9IGNsaWVudDsKQEAgLTQ5MiwxNiArNDg0LDE2IEBACiAgICAgQUxPR1YoIiVzOiBFIiwgX19GVU5DVElPTl9fKTsKICAgICBNdXRleDo6QXV0b2xvY2sgaWNsKG1CaW5kZXJTZXJpYWxpemF0aW9uTG9jayk7CiAgICAgQUxPR1YoIiVzOiBDYW1lcmEgJWQ6IExvY2sgY2FsbCBmcm9tIHBpZCAlZDsgY3VycmVudCBjbGllbnQgcGlkICVkIiwKLSAgICAgICAgICAgIF9fRlVOQ1RJT05fXywgbUNhbWVyYUlkLCBnZXRDYWxsaW5nUGlkKCksIG1DbGllbnRQaWQpOworICAgICAgICAgICAgX19GVU5DVElPTl9fLCBtQ2FtZXJhSWQsIENhbWVyYVRocmVhZFN0YXRlOjpnZXRDYWxsaW5nUGlkKCksIG1DbGllbnRQaWQpOwogCiAgICAgaWYgKG1DbGllbnRQaWQgPT0gMCkgewotICAgICAgICBtQ2xpZW50UGlkID0gZ2V0Q2FsbGluZ1BpZCgpOworICAgICAgICBtQ2xpZW50UGlkID0gQ2FtZXJhVGhyZWFkU3RhdGU6OmdldENhbGxpbmdQaWQoKTsKICAgICAgICAgcmV0dXJuIE9LOwogICAgIH0KIAotICAgIGlmIChtQ2xpZW50UGlkICE9IGdldENhbGxpbmdQaWQoKSkgeworICAgIGlmIChtQ2xpZW50UGlkICE9IENhbWVyYVRocmVhZFN0YXRlOjpnZXRDYWxsaW5nUGlkKCkpIHsKICAgICAgICAgQUxPR0UoIiVzOiBDYW1lcmEgJWQ6IExvY2sgY2FsbCBmcm9tIHBpZCAlZDsgY3VycmVudGx5IGxvY2tlZCB0byBwaWQgJWQiLAotICAgICAgICAgICAgICAgIF9fRlVOQ1RJT05fXywgbUNhbWVyYUlkLCBnZXRDYWxsaW5nUGlkKCksIG1DbGllbnRQaWQpOworICAgICAgICAgICAgICAgIF9fRlVOQ1RJT05fXywgbUNhbWVyYUlkLCBDYW1lcmFUaHJlYWRTdGF0ZTo6Z2V0Q2FsbGluZ1BpZCgpLCBtQ2xpZW50UGlkKTsKICAgICAgICAgcmV0dXJuIEVCVVNZOwogICAgIH0KIApAQCAtNTEzLDkgKzUwNSw5IEBACiAgICAgQUxPR1YoIiVzOiBFIiwgX19GVU5DVElPTl9fKTsKICAgICBNdXRleDo6QXV0b2xvY2sgaWNsKG1CaW5kZXJTZXJpYWxpemF0aW9uTG9jayk7CiAgICAgQUxPR1YoIiVzOiBDYW1lcmEgJWQ6IFVubG9jayBjYWxsIGZyb20gcGlkICVkOyBjdXJyZW50IGNsaWVudCBwaWQgJWQiLAotICAgICAgICAgICAgX19GVU5DVElPTl9fLCBtQ2FtZXJhSWQsIGdldENhbGxpbmdQaWQoKSwgbUNsaWVudFBpZCk7CisgICAgICAgICAgICBfX0ZVTkNUSU9OX18sIG1DYW1lcmFJZCwgQ2FtZXJhVGhyZWFkU3RhdGU6OmdldENhbGxpbmdQaWQoKSwgbUNsaWVudFBpZCk7CiAKLSAgICBpZiAobUNsaWVudFBpZCA9PSBnZXRDYWxsaW5nUGlkKCkpIHsKKyAgICBpZiAobUNsaWVudFBpZCA9PSBDYW1lcmFUaHJlYWRTdGF0ZTo6Z2V0Q2FsbGluZ1BpZCgpKSB7CiAgICAgICAgIFNoYXJlZFBhcmFtZXRlcnM6OkxvY2sgbChtUGFyYW1ldGVycyk7CiAgICAgICAgIGlmIChsLm1QYXJhbWV0ZXJzLnN0YXRlID09IFBhcmFtZXRlcnM6OlJFQ09SRCB8fAogICAgICAgICAgICAgICAgIGwubVBhcmFtZXRlcnMuc3RhdGUgPT0gUGFyYW1ldGVyczo6VklERU9fU05BUFNIT1QpIHsKQEAgLTUyOSw3ICs1MjEsNyBAQAogICAgIH0KIAogICAgIEFMT0dFKCIlczogQ2FtZXJhICVkOiBVbmxvY2sgY2FsbCBmcm9tIHBpZCAlZDsgY3VycmVudGx5IGxvY2tlZCB0byBwaWQgJWQiLAotICAgICAgICAgICAgX19GVU5DVElPTl9fLCBtQ2FtZXJhSWQsIGdldENhbGxpbmdQaWQoKSwgbUNsaWVudFBpZCk7CisgICAgICAgICAgICBfX0ZVTkNUSU9OX18sIG1DYW1lcmFJZCwgQ2FtZXJhVGhyZWFkU3RhdGU6OmdldENhbGxpbmdQaWQoKSwgbUNsaWVudFBpZCk7CiAgICAgcmV0dXJuIEVCVVNZOwogfQogCkBAIC0xNDQ3LDEzICsxNDM5LDE0IEBACiAgICAgcmV0dXJuIE9LOwogfQogCi1zdGF0dXNfdCBDYW1lcmEyQ2xpZW50Ojp0YWtlUGljdHVyZShpbnQgbXNnVHlwZSkgeworc3RhdHVzX3QgQ2FtZXJhMkNsaWVudDo6dGFrZVBpY3R1cmUoaW50IC8qbXNnVHlwZSovKSB7CiAgICAgQVRSQUNFX0NBTEwoKTsKICAgICBNdXRleDo6QXV0b2xvY2sgaWNsKG1CaW5kZXJTZXJpYWxpemF0aW9uTG9jayk7CiAgICAgc3RhdHVzX3QgcmVzOwogICAgIGlmICggKHJlcyA9IGNoZWNrUGlkKF9fRlVOQ1RJT05fXykgKSAhPSBPSykgcmV0dXJuIHJlczsKIAogICAgIGludCB0YWtlUGljdHVyZUNvdW50ZXI7CisgICAgYm9vbCBzaG91bGRTeW5jV2l0aERldmljZSA9IHRydWU7CiAgICAgewogICAgICAgICBTaGFyZWRQYXJhbWV0ZXJzOjpMb2NrIGwobVBhcmFtZXRlcnMpOwogICAgICAgICBzd2l0Y2ggKGwubVBhcmFtZXRlcnMuc3RhdGUpIHsKQEAgLTE1MzksMTQgKzE1MzIsMjUgQEAKICAgICAgICAgICAgICAgICAgICAgX19GVU5DVElPTl9fLCBtQ2FtZXJhSWQpOwogICAgICAgICAgICAgbVpzbFByb2Nlc3Nvci0+Y2xlYXJac2xRdWV1ZSgpOwogICAgICAgICB9CisKKyAgICAgICAgLy8gV2Ugc2hvdWxkIGFsd2F5cyBzeW5jIHdpdGggdGhlIGRldmljZSBpbiBjYXNlIGZsYXNoIGlzIHR1cm5lZCBvbiwKKyAgICAgICAgLy8gdGhlIGNhbWVyYSBkZXZpY2Ugc3VnZ2VzdHMgdGhhdCBmbGFzaCBpcyBuZWVkZWQgKEFFIHN0YXRlIEZMQVNIX1JFUVVJUkVEKQorICAgICAgICAvLyBvciB3ZSBhcmUgaW4gc29tZSBvdGhlciBBRSBzdGF0ZSBkaWZmZXJlbnQgZnJvbSBDT05WRVJHRUQgdGhhdCBtYXkgbmVlZAorICAgICAgICAvLyBwcmVjYXB0dXJlIHRyaWdnZXIuCisgICAgICAgIGlmIChsLm1QYXJhbWV0ZXJzLmZsYXNoTW9kZSAhPSBQYXJhbWV0ZXJzOjpGTEFTSF9NT0RFX09OICYmCisgICAgICAgICAgICAgICAgKGwubVBhcmFtZXRlcnMuYWVTdGF0ZSA9PSBBTkRST0lEX0NPTlRST0xfQUVfU1RBVEVfQ09OVkVSR0VEKSkgeworICAgICAgICAgICAgc2hvdWxkU3luY1dpdGhEZXZpY2UgID0gZmFsc2U7CisgICAgICAgIH0KICAgICB9CiAKICAgICBBVFJBQ0VfQVNZTkNfQkVHSU4oa1Rha2VwaWN0dXJlTGFiZWwsIHRha2VQaWN0dXJlQ291bnRlcik7CiAKLSAgICAvLyBOZWVkIEhBTCB0byBoYXZlIGNvcnJlY3Qgc2V0dGluZ3MgYmVmb3JlIChwb3NzaWJseSkgdHJpZ2dlcmluZyBwcmVjYXB0dXJlCi0gICAgc3luY1dpdGhEZXZpY2UoKTsKKyAgICAvLyBNYWtlIHN1cmUgSEFMIGhhcyBjb3JyZWN0IHNldHRpbmdzIGluIGNhc2UgcHJlY2FwdHVyZSB0cmlnZ2VyIGlzIG5lZWRlZC4KKyAgICBpZiAoc2hvdWxkU3luY1dpdGhEZXZpY2UpIHsKKyAgICAgICAgc3luY1dpdGhEZXZpY2UoKTsKKyAgICB9CiAKLSAgICByZXMgPSBtQ2FwdHVyZVNlcXVlbmNlci0+c3RhcnRDYXB0dXJlKG1zZ1R5cGUpOworICAgIHJlcyA9IG1DYXB0dXJlU2VxdWVuY2VyLT5zdGFydENhcHR1cmUoKTsKICAgICBpZiAocmVzICE9IE9LKSB7CiAgICAgICAgIEFMT0dFKCIlczogQ2FtZXJhICVkOiBVbmFibGUgdG8gc3RhcnQgY2FwdHVyZTogJXMgKCVkKSIsCiAgICAgICAgICAgICAgICAgX19GVU5DVElPTl9fLCBtQ2FtZXJhSWQsIHN0cmVycm9yKC1yZXMpLCByZXMpOwpAQCAtMTU4Myw3ICsxNTg3LDcgQEAKICAgICBBTE9HVigiJXM6IENhbWVyYSAlZCIsIF9fRlVOQ1RJT05fXywgbUNhbWVyYUlkKTsKICAgICBNdXRleDo6QXV0b2xvY2sgaWNsKG1CaW5kZXJTZXJpYWxpemF0aW9uTG9jayk7CiAgICAgLy8gVGhlIGNhbWVyYSBzZXJ2aWNlIGNhbiB1bmNvbmRpdGlvbmFsbHkgZ2V0IHRoZSBwYXJhbWV0ZXJzIGF0IGFsbCB0aW1lcwotICAgIGlmIChnZXRDYWxsaW5nUGlkKCkgIT0gbVNlcnZpY2VQaWQgJiYgY2hlY2tQaWQoX19GVU5DVElPTl9fKSAhPSBPSykgcmV0dXJuIFN0cmluZzgoKTsKKyAgICBpZiAoQ2FtZXJhVGhyZWFkU3RhdGU6OmdldENhbGxpbmdQaWQoKSAhPSBtU2VydmljZVBpZCAmJiBjaGVja1BpZChfX0ZVTkNUSU9OX18pICE9IE9LKSByZXR1cm4gU3RyaW5nOCgpOwogCiAgICAgU2hhcmVkUGFyYW1ldGVyczo6UmVhZExvY2sgbChtUGFyYW1ldGVycyk7CiAKQEAgLTE2NjYsMjcgKzE2NzAsNiBAQAogICAgICAgICByZXR1cm4gT0s7CiAgICAgfQogCi0gICAgLy8gdGhlIGNhbWVyYTIgYXBpIGxlZ2FjeSBtb2RlIGNhbiB1bmNvbmRpdGlvbmFsbHkgZGlzYWJsZSB0aGUgc2h1dHRlciBzb3VuZAotICAgIGlmIChtTGVnYWN5TW9kZSkgewotICAgICAgICBBTE9HVigiJXM6IERpc2FibGUgc2h1dHRlciBzb3VuZCBpbiBsZWdhY3kgbW9kZSIsIF9fRlVOQ1RJT05fXyk7Ci0gICAgICAgIGwubVBhcmFtZXRlcnMucGxheVNodXR0ZXJTb3VuZCA9IGZhbHNlOwotICAgICAgICByZXR1cm4gT0s7Ci0gICAgfQotCi0gICAgLy8gRGlzYWJsaW5nIHNodXR0ZXIgc291bmQgbWF5IG5vdCBiZSBhbGxvd2VkLiBJbiB0aGF0IGNhc2Ugb25seQotICAgIC8vIGFsbG93IHRoZSBtZWRpYXNlcnZlciBwcm9jZXNzIHRvIGRpc2FibGUgdGhlIHNvdW5kLgotICAgIGNoYXIgdmFsdWVbUFJPUEVSVFlfVkFMVUVfTUFYXTsKLSAgICBwcm9wZXJ0eV9nZXQoInJvLmNhbWVyYS5zb3VuZC5mb3JjZWQiLCB2YWx1ZSwgIjAiKTsKLSAgICBpZiAoc3RybmNtcCh2YWx1ZSwgIjAiLCAyKSAhPSAwKSB7Ci0gICAgICAgIC8vIERpc2FibGluZyBzaHV0dGVyIHNvdW5kIGlzIG5vdCBhbGxvd2VkLiBEZW55IGlmIHRoZSBjdXJyZW50Ci0gICAgICAgIC8vIHByb2Nlc3MgaXMgbm90IG1lZGlhc2VydmVyLgotICAgICAgICBpZiAoZ2V0Q2FsbGluZ1BpZCgpICE9IGdldHBpZCgpKSB7Ci0gICAgICAgICAgICBBTE9HRSgiRmFpbGVkIHRvIGRpc2FibGUgc2h1dHRlciBzb3VuZC4gUGVybWlzc2lvbiBkZW5pZWQgKHBpZCAlZCkiLAotICAgICAgICAgICAgICAgICAgICBnZXRDYWxsaW5nUGlkKCkpOwotICAgICAgICAgICAgcmV0dXJuIFBFUk1JU1NJT05fREVOSUVEOwotICAgICAgICB9Ci0gICAgfQotCiAgICAgbC5tUGFyYW1ldGVycy5wbGF5U2h1dHRlclNvdW5kID0gZmFsc2U7CiAgICAgcmV0dXJuIE9LOwogfQpAQCAtMTkzNCw2ICsxOTE3LDExIEBACiB2b2lkIENhbWVyYTJDbGllbnQ6Om5vdGlmeUF1dG9FeHBvc3VyZSh1aW50OF90IG5ld1N0YXRlLCBpbnQgdHJpZ2dlcklkKSB7CiAgICAgQUxPR1YoIiVzOiBBdXRvZXhwb3N1cmUgc3RhdGUgbm93ICVkLCBsYXN0IHRyaWdnZXIgJWQiLAogICAgICAgICAgICAgX19GVU5DVElPTl9fLCBuZXdTdGF0ZSwgdHJpZ2dlcklkKTsKKyAgICB7CisgICAgICAgIFNoYXJlZFBhcmFtZXRlcnM6OkxvY2sgbChtUGFyYW1ldGVycyk7CisgICAgICAgIC8vIFVwZGF0ZSBzdGF0ZQorICAgICAgICBsLm1QYXJhbWV0ZXJzLmFlU3RhdGUgPSBuZXdTdGF0ZTsKKyAgICB9CiAgICAgbUNhcHR1cmVTZXF1ZW5jZXItPm5vdGlmeUF1dG9FeHBvc3VyZShuZXdTdGF0ZSwgdHJpZ2dlcklkKTsKIH0KIApkaWZmIC0tZ2l0IGEvc2VydmljZXMvY2FtZXJhL2xpYmNhbWVyYXNlcnZpY2UvYXBpMS9DYW1lcmEyQ2xpZW50LmggYi9zZXJ2aWNlcy9jYW1lcmEvbGliY2FtZXJhc2VydmljZS9hcGkxL0NhbWVyYTJDbGllbnQuaAppbmRleCA0NDkyOWMzLi5hOWVhMjcxIDEwMDY0NAotLS0gYS9zZXJ2aWNlcy9jYW1lcmEvbGliY2FtZXJhc2VydmljZS9hcGkxL0NhbWVyYTJDbGllbnQuaAorKysgYi9zZXJ2aWNlcy9jYW1lcmEvbGliY2FtZXJhc2VydmljZS9hcGkxL0NhbWVyYTJDbGllbnQuaApAQCAtOTYsOCArOTYsNyBAQAogICAgICAgICAgICAgaW50IGNhbWVyYUZhY2luZywKICAgICAgICAgICAgIGludCBjbGllbnRQaWQsCiAgICAgICAgICAgICB1aWRfdCBjbGllbnRVaWQsCi0gICAgICAgICAgICBpbnQgc2VydmljZVBpZCwKLSAgICAgICAgICAgIGJvb2wgbGVnYWN5TW9kZSk7CisgICAgICAgICAgICBpbnQgc2VydmljZVBpZCk7CiAKICAgICB2aXJ0dWFsIH5DYW1lcmEyQ2xpZW50KCk7CiAKZGlmZiAtLWdpdCBhL3NlcnZpY2VzL2NhbWVyYS9saWJjYW1lcmFzZXJ2aWNlL2FwaTEvQ2FtZXJhQ2xpZW50LmNwcCBiL3NlcnZpY2VzL2NhbWVyYS9saWJjYW1lcmFzZXJ2aWNlL2FwaTEvQ2FtZXJhQ2xpZW50LmNwcAppbmRleCBmMTIwM2Y5Li5kNjVhYzdiIDEwMDY0NAotLS0gYS9zZXJ2aWNlcy9jYW1lcmEvbGliY2FtZXJhc2VydmljZS9hcGkxL0NhbWVyYUNsaWVudC5jcHAKKysrIGIvc2VydmljZXMvY2FtZXJhL2xpYmNhbWVyYXNlcnZpY2UvYXBpMS9DYW1lcmFDbGllbnQuY3BwCkBAIC0yNSwyNyArMjUsMjQgQEAKICNpbmNsdWRlICJhcGkxL0NhbWVyYUNsaWVudC5oIgogI2luY2x1ZGUgImRldmljZTEvQ2FtZXJhSGFyZHdhcmVJbnRlcmZhY2UuaCIKICNpbmNsdWRlICJDYW1lcmFTZXJ2aWNlLmgiCisjaW5jbHVkZSAidXRpbHMvQ2FtZXJhVGhyZWFkU3RhdGUuaCIKIAogbmFtZXNwYWNlIGFuZHJvaWQgewogCiAjZGVmaW5lIExPRzEoLi4uKSBBTE9HRF9JRihnTG9nTGV2ZWwgPj0gMSwgX19WQV9BUkdTX18pOwogI2RlZmluZSBMT0cyKC4uLikgQUxPR0RfSUYoZ0xvZ0xldmVsID49IDIsIF9fVkFfQVJHU19fKTsKIAotc3RhdGljIGludCBnZXRDYWxsaW5nUGlkKCkgewotICAgIHJldHVybiBJUENUaHJlYWRTdGF0ZTo6c2VsZigpLT5nZXRDYWxsaW5nUGlkKCk7Ci19Ci0KIENhbWVyYUNsaWVudDo6Q2FtZXJhQ2xpZW50KGNvbnN0IHNwPENhbWVyYVNlcnZpY2U+JiBjYW1lcmFTZXJ2aWNlLAogICAgICAgICBjb25zdCBzcDxoYXJkd2FyZTo6SUNhbWVyYUNsaWVudD4mIGNhbWVyYUNsaWVudCwKICAgICAgICAgY29uc3QgU3RyaW5nMTYmIGNsaWVudFBhY2thZ2VOYW1lLAogICAgICAgICBpbnQgY2FtZXJhSWQsIGludCBjYW1lcmFGYWNpbmcsCiAgICAgICAgIGludCBjbGllbnRQaWQsIGludCBjbGllbnRVaWQsCi0gICAgICAgIGludCBzZXJ2aWNlUGlkLCBib29sIGxlZ2FjeU1vZGUpOgorICAgICAgICBpbnQgc2VydmljZVBpZCk6CiAgICAgICAgIENsaWVudChjYW1lcmFTZXJ2aWNlLCBjYW1lcmFDbGllbnQsIGNsaWVudFBhY2thZ2VOYW1lLAogICAgICAgICAgICAgICAgIFN0cmluZzg6OmZvcm1hdCgiJWQiLCBjYW1lcmFJZCksIGNhbWVyYUlkLCBjYW1lcmFGYWNpbmcsIGNsaWVudFBpZCwKICAgICAgICAgICAgICAgICBjbGllbnRVaWQsIHNlcnZpY2VQaWQpCiB7Ci0gICAgaW50IGNhbGxpbmdQaWQgPSBnZXRDYWxsaW5nUGlkKCk7CisgICAgaW50IGNhbGxpbmdQaWQgPSBDYW1lcmFUaHJlYWRTdGF0ZTo6Z2V0Q2FsbGluZ1BpZCgpOwogICAgIExPRzEoIkNhbWVyYUNsaWVudDo6Q2FtZXJhQ2xpZW50IEUgKHBpZCAlZCwgaWQgJWQpIiwgY2FsbGluZ1BpZCwgY2FtZXJhSWQpOwogCiAgICAgbUhhcmR3YXJlID0gTlVMTDsKQEAgLTU3LDE0ICs1NCwxMyBAQAogICAgIC8vIENhbGxiYWNrIGlzIGRpc2FibGVkIGJ5IGRlZmF1bHQKICAgICBtUHJldmlld0NhbGxiYWNrRmxhZyA9IENBTUVSQV9GUkFNRV9DQUxMQkFDS19GTEFHX05PT1A7CiAgICAgbU9yaWVudGF0aW9uID0gZ2V0T3JpZW50YXRpb24oMCwgbUNhbWVyYUZhY2luZyA9PSBDQU1FUkFfRkFDSU5HX0ZST05UKTsKLSAgICBtTGVnYWN5TW9kZSA9IGxlZ2FjeU1vZGU7CiAgICAgbVBsYXlTaHV0dGVyU291bmQgPSB0cnVlOwogICAgIExPRzEoIkNhbWVyYUNsaWVudDo6Q2FtZXJhQ2xpZW50IFggKHBpZCAlZCwgaWQgJWQpIiwgY2FsbGluZ1BpZCwgY2FtZXJhSWQpOwogfQogCiBzdGF0dXNfdCBDYW1lcmFDbGllbnQ6OmluaXRpYWxpemUoc3A8Q2FtZXJhUHJvdmlkZXJNYW5hZ2VyPiBtYW5hZ2VyLAogICAgICAgICBjb25zdCBTdHJpbmc4JiAvKm1vbml0b3JUYWdzKi8pIHsKLSAgICBpbnQgY2FsbGluZ1BpZCA9IGdldENhbGxpbmdQaWQoKTsKKyAgICBpbnQgY2FsbGluZ1BpZCA9IENhbWVyYVRocmVhZFN0YXRlOjpnZXRDYWxsaW5nUGlkKCk7CiAgICAgc3RhdHVzX3QgcmVzOwogCiAgICAgTE9HMSgiQ2FtZXJhQ2xpZW50Ojppbml0aWFsaXplIEUgKHBpZCAlZCwgaWQgJWQpIiwgY2FsbGluZ1BpZCwgbUNhbWVyYUlkKTsKQEAgLTEwNSw3ICsxMDEsNyBAQAogLy8gdGVhciBkb3duIHRoZSBjbGllbnQKIENhbWVyYUNsaWVudDo6fkNhbWVyYUNsaWVudCgpIHsKICAgICBtRGVzdHJ1Y3Rpb25TdGFydGVkID0gdHJ1ZTsKLSAgICBpbnQgY2FsbGluZ1BpZCA9IGdldENhbGxpbmdQaWQoKTsKKyAgICBpbnQgY2FsbGluZ1BpZCA9IENhbWVyYVRocmVhZFN0YXRlOjpnZXRDYWxsaW5nUGlkKCk7CiAgICAgTE9HMSgiQ2FtZXJhQ2xpZW50Ojp+Q2FtZXJhQ2xpZW50IEUgKHBpZCAlZCwgdGhpcyAlcCkiLCBjYWxsaW5nUGlkLCB0aGlzKTsKIAogICAgIGRpc2Nvbm5lY3QoKTsKQEAgLTE0OCw3ICsxNDQsNyBAQAogLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCiBzdGF0dXNfdCBDYW1lcmFDbGllbnQ6OmNoZWNrUGlkKCkgY29uc3QgewotICAgIGludCBjYWxsaW5nUGlkID0gZ2V0Q2FsbGluZ1BpZCgpOworICAgIGludCBjYWxsaW5nUGlkID0gQ2FtZXJhVGhyZWFkU3RhdGU6OmdldENhbGxpbmdQaWQoKTsKICAgICBpZiAoY2FsbGluZ1BpZCA9PSBtQ2xpZW50UGlkKSByZXR1cm4gTk9fRVJST1I7CiAKICAgICBBTE9HVygiYXR0ZW1wdCB0byB1c2UgYSBsb2NrZWQgY2FtZXJhIGZyb20gYSBkaWZmZXJlbnQgcHJvY2VzcyIKQEAgLTE1OCw3ICsxNTQsOCBAQAogCiBzdGF0dXNfdCBDYW1lcmFDbGllbnQ6OmNoZWNrUGlkQW5kSGFyZHdhcmUoKSBjb25zdCB7CiAgICAgaWYgKG1IYXJkd2FyZSA9PSAwKSB7Ci0gICAgICAgIEFMT0dFKCJhdHRlbXB0IHRvIHVzZSBhIGNhbWVyYSBhZnRlciBkaXNjb25uZWN0KCkgKHBpZCAlZCkiLCBnZXRDYWxsaW5nUGlkKCkpOworICAgICAgICBBTE9HRSgiYXR0ZW1wdCB0byB1c2UgYSBjYW1lcmEgYWZ0ZXIgZGlzY29ubmVjdCgpIChwaWQgJWQpIiwKKyAgICAgICAgICAgICAgQ2FtZXJhVGhyZWFkU3RhdGU6OmdldENhbGxpbmdQaWQoKSk7CiAgICAgICAgIHJldHVybiBJTlZBTElEX09QRVJBVElPTjsKICAgICB9CiAgICAgc3RhdHVzX3QgcmVzdWx0ID0gY2hlY2tQaWQoKTsKQEAgLTE2Nyw3ICsxNjQsNyBAQAogfQogCiBzdGF0dXNfdCBDYW1lcmFDbGllbnQ6OmxvY2soKSB7Ci0gICAgaW50IGNhbGxpbmdQaWQgPSBnZXRDYWxsaW5nUGlkKCk7CisgICAgaW50IGNhbGxpbmdQaWQgPSBDYW1lcmFUaHJlYWRTdGF0ZTo6Z2V0Q2FsbGluZ1BpZCgpOwogICAgIExPRzEoImxvY2sgKHBpZCAlZCkiLCBjYWxsaW5nUGlkKTsKICAgICBNdXRleDo6QXV0b2xvY2sgbG9jayhtTG9jayk7CiAKQEAgLTE4Miw3ICsxNzksNyBAQAogfQogCiBzdGF0dXNfdCBDYW1lcmFDbGllbnQ6OnVubG9jaygpIHsKLSAgICBpbnQgY2FsbGluZ1BpZCA9IGdldENhbGxpbmdQaWQoKTsKKyAgICBpbnQgY2FsbGluZ1BpZCA9IENhbWVyYVRocmVhZFN0YXRlOjpnZXRDYWxsaW5nUGlkKCk7CiAgICAgTE9HMSgidW5sb2NrIChwaWQgJWQpIiwgY2FsbGluZ1BpZCk7CiAgICAgTXV0ZXg6OkF1dG9sb2NrIGxvY2sobUxvY2spOwogCkBAIC0yMDQsNyArMjAxLDcgQEAKIAogLy8gY29ubmVjdCBhIG5ldyBjbGllbnQgdG8gdGhlIGNhbWVyYQogc3RhdHVzX3QgQ2FtZXJhQ2xpZW50Ojpjb25uZWN0KGNvbnN0IHNwPGhhcmR3YXJlOjpJQ2FtZXJhQ2xpZW50PiYgY2xpZW50KSB7Ci0gICAgaW50IGNhbGxpbmdQaWQgPSBnZXRDYWxsaW5nUGlkKCk7CisgICAgaW50IGNhbGxpbmdQaWQgPSBDYW1lcmFUaHJlYWRTdGF0ZTo6Z2V0Q2FsbGluZ1BpZCgpOwogICAgIExPRzEoImNvbm5lY3QgRSAocGlkICVkKSIsIGNhbGxpbmdQaWQpOwogICAgIE11dGV4OjpBdXRvbG9jayBsb2NrKG1Mb2NrKTsKIApAQCAtMjQwLDcgKzIzNyw3IEBACiB9CiAKIGJpbmRlcjo6U3RhdHVzIENhbWVyYUNsaWVudDo6ZGlzY29ubmVjdCgpIHsKLSAgICBpbnQgY2FsbGluZ1BpZCA9IGdldENhbGxpbmdQaWQoKTsKKyAgICBpbnQgY2FsbGluZ1BpZCA9IENhbWVyYVRocmVhZFN0YXRlOjpnZXRDYWxsaW5nUGlkKCk7CiAgICAgTE9HMSgiZGlzY29ubmVjdCBFIChwaWQgJWQpIiwgY2FsbGluZ1BpZCk7CiAgICAgTXV0ZXg6OkF1dG9sb2NrIGxvY2sobUxvY2spOwogCkBAIC0zMzQsNyArMzMxLDcgQEAKIHN0YXR1c190IENhbWVyYUNsaWVudDo6c2V0UHJldmlld1RhcmdldCgKICAgICAgICAgY29uc3Qgc3A8SUdyYXBoaWNCdWZmZXJQcm9kdWNlcj4mIGJ1ZmZlclByb2R1Y2VyKSB7CiAgICAgTE9HMSgic2V0UHJldmlld1RhcmdldCglcCkgKHBpZCAlZCkiLCBidWZmZXJQcm9kdWNlci5nZXQoKSwKLSAgICAgICAgICAgIGdldENhbGxpbmdQaWQoKSk7CisgICAgICAgICAgICBDYW1lcmFUaHJlYWRTdGF0ZTo6Z2V0Q2FsbGluZ1BpZCgpKTsKIAogICAgIHNwPElCaW5kZXI+IGJpbmRlcjsKICAgICBzcDxBTmF0aXZlV2luZG93PiB3aW5kb3c7CkBAIC0zNTEsNyArMzQ4LDcgQEAKIC8vIHNldCB0aGUgcHJldmlldyBjYWxsYmFjayBmbGFnIHRvIGFmZmVjdCBob3cgdGhlIHJlY2VpdmVkIGZyYW1lcyBmcm9tCiAvLyBwcmV2aWV3IGFyZSBoYW5kbGVkLgogdm9pZCBDYW1lcmFDbGllbnQ6OnNldFByZXZpZXdDYWxsYmFja0ZsYWcoaW50IGNhbGxiYWNrX2ZsYWcpIHsKLSAgICBMT0cxKCJzZXRQcmV2aWV3Q2FsbGJhY2tGbGFnKCVkKSAocGlkICVkKSIsIGNhbGxiYWNrX2ZsYWcsIGdldENhbGxpbmdQaWQoKSk7CisgICAgTE9HMSgic2V0UHJldmlld0NhbGxiYWNrRmxhZyglZCkgKHBpZCAlZCkiLCBjYWxsYmFja19mbGFnLCBDYW1lcmFUaHJlYWRTdGF0ZTo6Z2V0Q2FsbGluZ1BpZCgpKTsKICAgICBNdXRleDo6QXV0b2xvY2sgbG9jayhtTG9jayk7CiAgICAgaWYgKGNoZWNrUGlkQW5kSGFyZHdhcmUoKSAhPSBOT19FUlJPUikgcmV0dXJuOwogCkBAIC0zNzIsMTMgKzM2OSwxMyBAQAogCiAvLyBzdGFydCBwcmV2aWV3IG1vZGUKIHN0YXR1c190IENhbWVyYUNsaWVudDo6c3RhcnRQcmV2aWV3KCkgewotICAgIExPRzEoInN0YXJ0UHJldmlldyAocGlkICVkKSIsIGdldENhbGxpbmdQaWQoKSk7CisgICAgTE9HMSgic3RhcnRQcmV2aWV3IChwaWQgJWQpIiwgQ2FtZXJhVGhyZWFkU3RhdGU6OmdldENhbGxpbmdQaWQoKSk7CiAgICAgcmV0dXJuIHN0YXJ0Q2FtZXJhTW9kZShDQU1FUkFfUFJFVklFV19NT0RFKTsKIH0KIAogLy8gc3RhcnQgcmVjb3JkaW5nIG1vZGUKIHN0YXR1c190IENhbWVyYUNsaWVudDo6c3RhcnRSZWNvcmRpbmcoKSB7Ci0gICAgTE9HMSgic3RhcnRSZWNvcmRpbmcgKHBpZCAlZCkiLCBnZXRDYWxsaW5nUGlkKCkpOworICAgIExPRzEoInN0YXJ0UmVjb3JkaW5nIChwaWQgJWQpIiwgQ2FtZXJhVGhyZWFkU3RhdGU6OmdldENhbGxpbmdQaWQoKSk7CiAgICAgcmV0dXJuIHN0YXJ0Q2FtZXJhTW9kZShDQU1FUkFfUkVDT1JESU5HX01PREUpOwogfQogCkBAIC00NjEsNyArNDU4LDcgQEAKIAogLy8gc3RvcCBwcmV2aWV3IG1vZGUKIHZvaWQgQ2FtZXJhQ2xpZW50OjpzdG9wUHJldmlldygpIHsKLSAgICBMT0cxKCJzdG9wUHJldmlldyAocGlkICVkKSIsIGdldENhbGxpbmdQaWQoKSk7CisgICAgTE9HMSgic3RvcFByZXZpZXcgKHBpZCAlZCkiLCBDYW1lcmFUaHJlYWRTdGF0ZTo6Z2V0Q2FsbGluZ1BpZCgpKTsKICAgICBNdXRleDo6QXV0b2xvY2sgbG9jayhtTG9jayk7CiAgICAgaWYgKGNoZWNrUGlkQW5kSGFyZHdhcmUoKSAhPSBOT19FUlJPUikgcmV0dXJuOwogCkBAIC00NzcsNyArNDc0LDcgQEAKIAogLy8gc3RvcCByZWNvcmRpbmcgbW9kZQogdm9pZCBDYW1lcmFDbGllbnQ6OnN0b3BSZWNvcmRpbmcoKSB7Ci0gICAgTE9HMSgic3RvcFJlY29yZGluZyAocGlkICVkKSIsIGdldENhbGxpbmdQaWQoKSk7CisgICAgTE9HMSgic3RvcFJlY29yZGluZyAocGlkICVkKSIsIENhbWVyYVRocmVhZFN0YXRlOjpnZXRDYWxsaW5nUGlkKCkpOwogICAgIHsKICAgICAgICAgTXV0ZXg6OkF1dG9sb2NrIGxvY2sobUxvY2spOwogICAgICAgICBpZiAoY2hlY2tQaWRBbmRIYXJkd2FyZSgpICE9IE5PX0VSUk9SKSByZXR1cm47CkBAIC01MDMsNyArNTAwLDcgQEAKICAgICBpZiAoY2hlY2tQaWRBbmRIYXJkd2FyZSgpICE9IE5PX0VSUk9SKSByZXR1cm47CiAgICAgaWYgKG1lbSA9PSBudWxscHRyKSB7CiAgICAgICAgIGFuZHJvaWRfZXJyb3JXcml0ZVdpdGhJbmZvTG9nKENhbWVyYVNlcnZpY2U6OlNOX0VWRU5UX0xPR19JRCwgIjI2MTY0MjcyIiwKLSAgICAgICAgICAgICAgICBJUENUaHJlYWRTdGF0ZTo6c2VsZigpLT5nZXRDYWxsaW5nVWlkKCksIG51bGxwdHIsIDApOworICAgICAgICAgICAgICAgIENhbWVyYVRocmVhZFN0YXRlOjpnZXRDYWxsaW5nVWlkKCksIG51bGxwdHIsIDApOwogICAgICAgICByZXR1cm47CiAgICAgfQogCkBAIC02MTUsNyArNjEyLDcgQEAKIH0KIAogYm9vbCBDYW1lcmFDbGllbnQ6OnByZXZpZXdFbmFibGVkKCkgewotICAgIExPRzEoInByZXZpZXdFbmFibGVkIChwaWQgJWQpIiwgZ2V0Q2FsbGluZ1BpZCgpKTsKKyAgICBMT0cxKCJwcmV2aWV3RW5hYmxlZCAocGlkICVkKSIsIENhbWVyYVRocmVhZFN0YXRlOjpnZXRDYWxsaW5nUGlkKCkpOwogCiAgICAgTXV0ZXg6OkF1dG9sb2NrIGxvY2sobUxvY2spOwogICAgIGlmIChjaGVja1BpZEFuZEhhcmR3YXJlKCkgIT0gTk9fRVJST1IpIHJldHVybiBmYWxzZTsKQEAgLTYyMyw3ICs2MjAsNyBAQAogfQogCiBib29sIENhbWVyYUNsaWVudDo6cmVjb3JkaW5nRW5hYmxlZCgpIHsKLSAgICBMT0cxKCJyZWNvcmRpbmdFbmFibGVkIChwaWQgJWQpIiwgZ2V0Q2FsbGluZ1BpZCgpKTsKKyAgICBMT0cxKCJyZWNvcmRpbmdFbmFibGVkIChwaWQgJWQpIiwgQ2FtZXJhVGhyZWFkU3RhdGU6OmdldENhbGxpbmdQaWQoKSk7CiAKICAgICBNdXRleDo6QXV0b2xvY2sgbG9jayhtTG9jayk7CiAgICAgaWYgKGNoZWNrUGlkQW5kSGFyZHdhcmUoKSAhPSBOT19FUlJPUikgcmV0dXJuIGZhbHNlOwpAQCAtNjMxLDcgKzYyOCw3IEBACiB9CiAKIHN0YXR1c190IENhbWVyYUNsaWVudDo6YXV0b0ZvY3VzKCkgewotICAgIExPRzEoImF1dG9Gb2N1cyAocGlkICVkKSIsIGdldENhbGxpbmdQaWQoKSk7CisgICAgTE9HMSgiYXV0b0ZvY3VzIChwaWQgJWQpIiwgQ2FtZXJhVGhyZWFkU3RhdGU6OmdldENhbGxpbmdQaWQoKSk7CiAKICAgICBNdXRleDo6QXV0b2xvY2sgbG9jayhtTG9jayk7CiAgICAgc3RhdHVzX3QgcmVzdWx0ID0gY2hlY2tQaWRBbmRIYXJkd2FyZSgpOwpAQCAtNjQxLDcgKzYzOCw3IEBACiB9CiAKIHN0YXR1c190IENhbWVyYUNsaWVudDo6Y2FuY2VsQXV0b0ZvY3VzKCkgewotICAgIExPRzEoImNhbmNlbEF1dG9Gb2N1cyAocGlkICVkKSIsIGdldENhbGxpbmdQaWQoKSk7CisgICAgTE9HMSgiY2FuY2VsQXV0b0ZvY3VzIChwaWQgJWQpIiwgQ2FtZXJhVGhyZWFkU3RhdGU6OmdldENhbGxpbmdQaWQoKSk7CiAKICAgICBNdXRleDo6QXV0b2xvY2sgbG9jayhtTG9jayk7CiAgICAgc3RhdHVzX3QgcmVzdWx0ID0gY2hlY2tQaWRBbmRIYXJkd2FyZSgpOwpAQCAtNjUyLDcgKzY0OSw3IEBACiAKIC8vIHRha2UgYSBwaWN0dXJlIC0gaW1hZ2UgaXMgcmV0dXJuZWQgaW4gY2FsbGJhY2sKIHN0YXR1c190IENhbWVyYUNsaWVudDo6dGFrZVBpY3R1cmUoaW50IG1zZ1R5cGUpIHsKLSAgICBMT0cxKCJ0YWtlUGljdHVyZSAocGlkICVkKTogMHgleCIsIGdldENhbGxpbmdQaWQoKSwgbXNnVHlwZSk7CisgICAgTE9HMSgidGFrZVBpY3R1cmUgKHBpZCAlZCk6IDB4JXgiLCBDYW1lcmFUaHJlYWRTdGF0ZTo6Z2V0Q2FsbGluZ1BpZCgpLCBtc2dUeXBlKTsKIAogICAgIE11dGV4OjpBdXRvbG9jayBsb2NrKG1Mb2NrKTsKICAgICBzdGF0dXNfdCByZXN1bHQgPSBjaGVja1BpZEFuZEhhcmR3YXJlKCk7CkBAIC02ODEsNyArNjc4LDcgQEAKIAogLy8gc2V0IHByZXZpZXcvY2FwdHVyZSBwYXJhbWV0ZXJzIC0ga2V5L3ZhbHVlIHBhaXJzCiBzdGF0dXNfdCBDYW1lcmFDbGllbnQ6OnNldFBhcmFtZXRlcnMoY29uc3QgU3RyaW5nOCYgcGFyYW1zKSB7Ci0gICAgTE9HMSgic2V0UGFyYW1ldGVycyAocGlkICVkKSAoJXMpIiwgZ2V0Q2FsbGluZ1BpZCgpLCBwYXJhbXMuc3RyaW5nKCkpOworICAgIExPRzEoInNldFBhcmFtZXRlcnMgKHBpZCAlZCkgKCVzKSIsIENhbWVyYVRocmVhZFN0YXRlOjpnZXRDYWxsaW5nUGlkKCksIHBhcmFtcy5zdHJpbmcoKSk7CiAKICAgICBNdXRleDo6QXV0b2xvY2sgbG9jayhtTG9jayk7CiAgICAgc3RhdHVzX3QgcmVzdWx0ID0gY2hlY2tQaWRBbmRIYXJkd2FyZSgpOwpAQCAtNjk2LDE2ICs2OTMsMTggQEAKIFN0cmluZzggQ2FtZXJhQ2xpZW50OjpnZXRQYXJhbWV0ZXJzKCkgY29uc3QgewogICAgIE11dGV4OjpBdXRvbG9jayBsb2NrKG1Mb2NrKTsKICAgICAvLyBUaGUgY2FtZXJhIHNlcnZpY2UgY2FuIHVuY29uZGl0aW9uYWxseSBnZXQgdGhlIHBhcmFtZXRlcnMgYXQgYWxsIHRpbWVzCi0gICAgaWYgKGdldENhbGxpbmdQaWQoKSAhPSBtU2VydmljZVBpZCAmJiBjaGVja1BpZEFuZEhhcmR3YXJlKCkgIT0gTk9fRVJST1IpIHJldHVybiBTdHJpbmc4KCk7CisgICAgaWYgKENhbWVyYVRocmVhZFN0YXRlOjpnZXRDYWxsaW5nUGlkKCkgIT0gbVNlcnZpY2VQaWQgJiYgY2hlY2tQaWRBbmRIYXJkd2FyZSgpICE9IE5PX0VSUk9SKSB7CisgICAgICAgIHJldHVybiBTdHJpbmc4KCk7CisgICAgfQogCiAgICAgU3RyaW5nOCBwYXJhbXMobUhhcmR3YXJlLT5nZXRQYXJhbWV0ZXJzKCkuZmxhdHRlbigpKTsKLSAgICBMT0cxKCJnZXRQYXJhbWV0ZXJzIChwaWQgJWQpICglcykiLCBnZXRDYWxsaW5nUGlkKCksIHBhcmFtcy5zdHJpbmcoKSk7CisgICAgTE9HMSgiZ2V0UGFyYW1ldGVycyAocGlkICVkKSAoJXMpIiwgQ2FtZXJhVGhyZWFkU3RhdGU6OmdldENhbGxpbmdQaWQoKSwgcGFyYW1zLnN0cmluZygpKTsKICAgICByZXR1cm4gcGFyYW1zOwogfQogCiAvLyBlbmFibGUgc2h1dHRlciBzb3VuZAogc3RhdHVzX3QgQ2FtZXJhQ2xpZW50OjplbmFibGVTaHV0dGVyU291bmQoYm9vbCBlbmFibGUpIHsKLSAgICBMT0cxKCJlbmFibGVTaHV0dGVyU291bmQgKHBpZCAlZCkiLCBnZXRDYWxsaW5nUGlkKCkpOworICAgIExPRzEoImVuYWJsZVNodXR0ZXJTb3VuZCAocGlkICVkKSIsIENhbWVyYVRocmVhZFN0YXRlOjpnZXRDYWxsaW5nUGlkKCkpOwogCiAgICAgc3RhdHVzX3QgcmVzdWx0ID0gY2hlY2tQaWRBbmRIYXJkd2FyZSgpOwogICAgIGlmIChyZXN1bHQgIT0gTk9fRVJST1IpIHJldHVybiByZXN1bHQ7CkBAIC03MTUsMzIgKzcxNCwxMiBAQAogICAgICAgICByZXR1cm4gT0s7CiAgICAgfQogCi0gICAgLy8gdGhlIGNhbWVyYTIgYXBpIGxlZ2FjeSBtb2RlIGNhbiB1bmNvbmRpdGlvbmFsbHkgZGlzYWJsZSB0aGUgc2h1dHRlciBzb3VuZAotICAgIGlmIChtTGVnYWN5TW9kZSkgewotICAgICAgICBBTE9HVigiJXM6IERpc2FibGUgc2h1dHRlciBzb3VuZCBpbiBsZWdhY3kgbW9kZSIsIF9fRlVOQ1RJT05fXyk7Ci0gICAgICAgIG1QbGF5U2h1dHRlclNvdW5kID0gZmFsc2U7Ci0gICAgICAgIHJldHVybiBPSzsKLSAgICB9Ci0KLSAgICAvLyBEaXNhYmxpbmcgc2h1dHRlciBzb3VuZCBtYXkgbm90IGJlIGFsbG93ZWQuIEluIHRoYXQgY2FzZSBvbmx5Ci0gICAgLy8gYWxsb3cgdGhlIG1lZGlhc2VydmVyIHByb2Nlc3MgdG8gZGlzYWJsZSB0aGUgc291bmQuCi0gICAgY2hhciB2YWx1ZVtQUk9QRVJUWV9WQUxVRV9NQVhdOwotICAgIHByb3BlcnR5X2dldCgicm8uY2FtZXJhLnNvdW5kLmZvcmNlZCIsIHZhbHVlLCAiMCIpOwotICAgIGlmIChzdHJjbXAodmFsdWUsICIwIikgIT0gMCkgewotICAgICAgICAvLyBEaXNhYmxpbmcgc2h1dHRlciBzb3VuZCBpcyBub3QgYWxsb3dlZC4gRGVueSBpZiB0aGUgY3VycmVudAotICAgICAgICAvLyBwcm9jZXNzIGlzIG5vdCBtZWRpYXNlcnZlci4KLSAgICAgICAgaWYgKGdldENhbGxpbmdQaWQoKSAhPSBnZXRwaWQoKSkgewotICAgICAgICAgICAgQUxPR0UoIkZhaWxlZCB0byBkaXNhYmxlIHNodXR0ZXIgc291bmQuIFBlcm1pc3Npb24gZGVuaWVkIChwaWQgJWQpIiwgZ2V0Q2FsbGluZ1BpZCgpKTsKLSAgICAgICAgICAgIHJldHVybiBQRVJNSVNTSU9OX0RFTklFRDsKLSAgICAgICAgfQotICAgIH0KLQogICAgIG1QbGF5U2h1dHRlclNvdW5kID0gZmFsc2U7CiAgICAgcmV0dXJuIE9LOwogfQogCiBzdGF0dXNfdCBDYW1lcmFDbGllbnQ6OnNlbmRDb21tYW5kKGludDMyX3QgY21kLCBpbnQzMl90IGFyZzEsIGludDMyX3QgYXJnMikgewotICAgIExPRzEoInNlbmRDb21tYW5kIChwaWQgJWQpIiwgZ2V0Q2FsbGluZ1BpZCgpKTsKKyAgICBMT0cxKCJzZW5kQ29tbWFuZCAocGlkICVkKSIsIENhbWVyYVRocmVhZFN0YXRlOjpnZXRDYWxsaW5nUGlkKCkpOwogICAgIGludCBvcmllbnRhdGlvbjsKICAgICBNdXRleDo6QXV0b2xvY2sgbG9jayhtTG9jayk7CiAgICAgc3RhdHVzX3QgcmVzdWx0ID0gY2hlY2tQaWRBbmRIYXJkd2FyZSgpOwpkaWZmIC0tZ2l0IGEvc2VydmljZXMvY2FtZXJhL2xpYmNhbWVyYXNlcnZpY2UvYXBpMS9DYW1lcmFDbGllbnQuaCBiL3NlcnZpY2VzL2NhbWVyYS9saWJjYW1lcmFzZXJ2aWNlL2FwaTEvQ2FtZXJhQ2xpZW50LmgKaW5kZXggMTkxMDUzNi4uOTUzMGI2YyAxMDA2NDQKLS0tIGEvc2VydmljZXMvY2FtZXJhL2xpYmNhbWVyYXNlcnZpY2UvYXBpMS9DYW1lcmFDbGllbnQuaAorKysgYi9zZXJ2aWNlcy9jYW1lcmEvbGliY2FtZXJhc2VydmljZS9hcGkxL0NhbWVyYUNsaWVudC5oCkBAIC02OCw4ICs2OCw3IEBACiAgICAgICAgICAgICBpbnQgY2FtZXJhRmFjaW5nLAogICAgICAgICAgICAgaW50IGNsaWVudFBpZCwKICAgICAgICAgICAgIGludCBjbGllbnRVaWQsCi0gICAgICAgICAgICBpbnQgc2VydmljZVBpZCwKLSAgICAgICAgICAgIGJvb2wgbGVnYWN5TW9kZSA9IGZhbHNlKTsKKyAgICAgICAgICAgIGludCBzZXJ2aWNlUGlkKTsKICAgICB+Q2FtZXJhQ2xpZW50KCk7CiAKICAgICB2aXJ0dWFsIHN0YXR1c190IGluaXRpYWxpemUoc3A8Q2FtZXJhUHJvdmlkZXJNYW5hZ2VyPiBtYW5hZ2VyLApkaWZmIC0tZ2l0IGEvc2VydmljZXMvY2FtZXJhL2xpYmNhbWVyYXNlcnZpY2UvYXBpMS9jbGllbnQyL0NhcHR1cmVTZXF1ZW5jZXIuY3BwIGIvc2VydmljZXMvY2FtZXJhL2xpYmNhbWVyYXNlcnZpY2UvYXBpMS9jbGllbnQyL0NhcHR1cmVTZXF1ZW5jZXIuY3BwCmluZGV4IDcwMzQxYzUuLjUwMjlkNGIgMTAwNjQ0Ci0tLSBhL3NlcnZpY2VzL2NhbWVyYS9saWJjYW1lcmFzZXJ2aWNlL2FwaTEvY2xpZW50Mi9DYXB0dXJlU2VxdWVuY2VyLmNwcAorKysgYi9zZXJ2aWNlcy9jYW1lcmEvbGliY2FtZXJhc2VydmljZS9hcGkxL2NsaWVudDIvQ2FwdHVyZVNlcXVlbmNlci5jcHAKQEAgLTUwLDggKzUwLDcgQEAKICAgICAgICAgbVN0YXRlVHJhbnNpdGlvbkNvdW50KDApLAogICAgICAgICBtVHJpZ2dlcklkKDApLAogICAgICAgICBtVGltZW91dENvdW50KDApLAotICAgICAgICBtQ2FwdHVyZUlkKENhbWVyYTJDbGllbnQ6OmtDYXB0dXJlUmVxdWVzdElkU3RhcnQpLAotICAgICAgICBtTXNnVHlwZSgwKSB7CisgICAgICAgIG1DYXB0dXJlSWQoQ2FtZXJhMkNsaWVudDo6a0NhcHR1cmVSZXF1ZXN0SWRTdGFydCkgewogICAgIEFMT0dWKCIlcyIsIF9fRlVOQ1RJT05fXyk7CiB9CiAKQEAgLTY0LDcgKzYzLDcgQEAKICAgICBtWnNsUHJvY2Vzc29yID0gcHJvY2Vzc29yOwogfQogCi1zdGF0dXNfdCBDYXB0dXJlU2VxdWVuY2VyOjpzdGFydENhcHR1cmUoaW50IG1zZ1R5cGUpIHsKK3N0YXR1c190IENhcHR1cmVTZXF1ZW5jZXI6OnN0YXJ0Q2FwdHVyZSgpIHsKICAgICBBTE9HVigiJXMiLCBfX0ZVTkNUSU9OX18pOwogICAgIEFUUkFDRV9DQUxMKCk7CiAgICAgTXV0ZXg6OkF1dG9sb2NrIGwobUlucHV0TXV0ZXgpOwpAQCAtNzMsNyArNzIsNiBAQAogICAgICAgICByZXR1cm4gSU5WQUxJRF9PUEVSQVRJT047CiAgICAgfQogICAgIGlmICghbVN0YXJ0Q2FwdHVyZSkgewotICAgICAgICBtTXNnVHlwZSA9IG1zZ1R5cGU7CiAgICAgICAgIG1TdGFydENhcHR1cmUgPSB0cnVlOwogICAgICAgICBtU3RhcnRDYXB0dXJlU2lnbmFsLnNpZ25hbCgpOwogICAgIH0KQEAgLTM4Niw3ICszODQsNyBAQAogCiAgICAgU2hhcmVkUGFyYW1ldGVyczo6TG9jayBsKGNsaWVudC0+Z2V0UGFyYW1ldGVycygpKTsKICAgICAvKiB3YXJuaW5nOiB0aGlzIGFsc28gbG9ja3MgYSBTaGFyZWRDYW1lcmFDYWxsYmFja3MgKi8KLSAgICBzaHV0dGVyTm90aWZ5TG9ja2VkKGwubVBhcmFtZXRlcnMsIGNsaWVudCwgbU1zZ1R5cGUpOworICAgIHNodXR0ZXJOb3RpZnlMb2NrZWQobC5tUGFyYW1ldGVycywgY2xpZW50KTsKICAgICBtU2h1dHRlck5vdGlmaWVkID0gdHJ1ZTsKICAgICBtVGltZW91dENvdW50ID0ga01heFRpbWVvdXRzRm9yQ2FwdHVyZUVuZDsKICAgICByZXR1cm4gU1RBTkRBUkRfQ0FQVFVSRV9XQUlUOwpAQCAtNjA2LDcgKzYwNCw3IEBACiAgICAgICAgIGlmICghbVNodXR0ZXJOb3RpZmllZCkgewogICAgICAgICAgICAgU2hhcmVkUGFyYW1ldGVyczo6TG9jayBsKGNsaWVudC0+Z2V0UGFyYW1ldGVycygpKTsKICAgICAgICAgICAgIC8qIHdhcm5pbmc6IHRoaXMgYWxzbyBsb2NrcyBhIFNoYXJlZENhbWVyYUNhbGxiYWNrcyAqLwotICAgICAgICAgICAgc2h1dHRlck5vdGlmeUxvY2tlZChsLm1QYXJhbWV0ZXJzLCBjbGllbnQsIG1Nc2dUeXBlKTsKKyAgICAgICAgICAgIHNodXR0ZXJOb3RpZnlMb2NrZWQobC5tUGFyYW1ldGVycywgY2xpZW50KTsKICAgICAgICAgICAgIG1TaHV0dGVyTm90aWZpZWQgPSB0cnVlOwogICAgICAgICB9CiAgICAgfSBlbHNlIGlmIChtVGltZW91dENvdW50IDw9IDApIHsKQEAgLTcyMywxMiArNzIxLDExIEBACiB9CiAKIC8qc3RhdGljKi8gdm9pZCBDYXB0dXJlU2VxdWVuY2VyOjpzaHV0dGVyTm90aWZ5TG9ja2VkKGNvbnN0IFBhcmFtZXRlcnMgJnBhcmFtcywKLSAgICAgICAgICAgIGNvbnN0IHNwPENhbWVyYTJDbGllbnQ+JiBjbGllbnQsIGludCBtc2dUeXBlKSB7CisgICAgICAgICAgICBjb25zdCBzcDxDYW1lcmEyQ2xpZW50PiYgY2xpZW50KSB7CiAgICAgQVRSQUNFX0NBTEwoKTsKIAogICAgIGlmIChwYXJhbXMuc3RhdGUgPT0gUGFyYW1ldGVyczo6U1RJTExfQ0FQVFVSRQotICAgICAgICAmJiBwYXJhbXMucGxheVNodXR0ZXJTb3VuZAotICAgICAgICAmJiAobXNnVHlwZSAmIENBTUVSQV9NU0dfU0hVVFRFUikpIHsKKyAgICAgICAgJiYgcGFyYW1zLnBsYXlTaHV0dGVyU291bmQpIHsKICAgICAgICAgY2xpZW50LT5nZXRDYW1lcmFTZXJ2aWNlKCktPnBsYXlTb3VuZChDYW1lcmFTZXJ2aWNlOjpTT1VORF9TSFVUVEVSKTsKICAgICB9CiAKZGlmZiAtLWdpdCBhL3NlcnZpY2VzL2NhbWVyYS9saWJjYW1lcmFzZXJ2aWNlL2FwaTEvY2xpZW50Mi9DYXB0dXJlU2VxdWVuY2VyLmggYi9zZXJ2aWNlcy9jYW1lcmEvbGliY2FtZXJhc2VydmljZS9hcGkxL2NsaWVudDIvQ2FwdHVyZVNlcXVlbmNlci5oCmluZGV4IGYyZTM3NTAuLmMyM2IxMmQgMTAwNjQ0Ci0tLSBhL3NlcnZpY2VzL2NhbWVyYS9saWJjYW1lcmFzZXJ2aWNlL2FwaTEvY2xpZW50Mi9DYXB0dXJlU2VxdWVuY2VyLmgKKysrIGIvc2VydmljZXMvY2FtZXJhL2xpYmNhbWVyYXNlcnZpY2UvYXBpMS9jbGllbnQyL0NhcHR1cmVTZXF1ZW5jZXIuaApAQCAtNTEsNyArNTEsNyBAQAogICAgIHZvaWQgc2V0WnNsUHJvY2Vzc29yKGNvbnN0IHdwPFpzbFByb2Nlc3Nvcj4mIHByb2Nlc3Nvcik7CiAKICAgICAvLyBCZWdpbiBzdGlsbCBpbWFnZSBjYXB0dXJlCi0gICAgc3RhdHVzX3Qgc3RhcnRDYXB0dXJlKGludCBtc2dUeXBlKTsKKyAgICBzdGF0dXNfdCBzdGFydENhcHR1cmUoKTsKIAogICAgIC8vIFdhaXQgdW50aWwgY3VycmVudCBpbWFnZSBjYXB0dXJlIGNvbXBsZXRlczsgcmV0dXJucyBpbW1lZGlhdGVseSBpZiBubwogICAgIC8vIGNhcHR1cmUgaXMgYWN0aXZlLiBSZXR1cm5zIFRJTUVEX09VVCBpZiBjYXB0dXJlIGRvZXMgbm90IGNvbXBsZXRlIGR1cmluZwpAQCAtMTQ1LDcgKzE0NSw2IEBACiAgICAgYm9vbCBtQWVJblByZWNhcHR1cmU7CiAKICAgICBpbnQzMl90IG1DYXB0dXJlSWQ7Ci0gICAgaW50IG1Nc2dUeXBlOwogCiAgICAgLy8gTWFpbiBpbnRlcm5hbCBtZXRob2RzCiAKQEAgLTE3Miw3ICsxNzEsNyBAQAogCiAgICAgLy8gRW1pdCBTaHV0dGVyL1JhdyBjYWxsYmFjayB0byBqYXZhLCBhbmQgbWF5YmUgcGxheSBhIHNodXR0ZXIgc291bmQKICAgICBzdGF0aWMgdm9pZCBzaHV0dGVyTm90aWZ5TG9ja2VkKGNvbnN0IFBhcmFtZXRlcnMgJnBhcmFtcywKLSAgICAgICAgICAgIGNvbnN0IHNwPENhbWVyYTJDbGllbnQ+JiBjbGllbnQsIGludCBtc2dUeXBlKTsKKyAgICAgICAgICAgIGNvbnN0IHNwPENhbWVyYTJDbGllbnQ+JiBjbGllbnQpOwogfTsKIAogfTsgLy8gbmFtZXNwYWNlIGNhbWVyYTIKZGlmZiAtLWdpdCBhL3NlcnZpY2VzL2NhbWVyYS9saWJjYW1lcmFzZXJ2aWNlL2FwaTEvY2xpZW50Mi9GcmFtZVByb2Nlc3Nvci5jcHAgYi9zZXJ2aWNlcy9jYW1lcmEvbGliY2FtZXJhc2VydmljZS9hcGkxL2NsaWVudDIvRnJhbWVQcm9jZXNzb3IuY3BwCmluZGV4IDBjNzM4ZTcuLjY4M2U4NGQgMTAwNjQ0Ci0tLSBhL3NlcnZpY2VzL2NhbWVyYS9saWJjYW1lcmFzZXJ2aWNlL2FwaTEvY2xpZW50Mi9GcmFtZVByb2Nlc3Nvci5jcHAKKysrIGIvc2VydmljZXMvY2FtZXJhL2xpYmNhbWVyYXNlcnZpY2UvYXBpMS9jbGllbnQyL0ZyYW1lUHJvY2Vzc29yLmNwcApAQCAtMzMsNyArMzMsMTAgQEAKICAgICBGcmFtZVByb2Nlc3NvckJhc2UoZGV2aWNlKSwKICAgICBtQ2xpZW50KGNsaWVudCksCiAgICAgbUxhc3RGcmFtZU51bWJlck9mRmFjZXMoMCksCi0gICAgbUxhc3QzQUZyYW1lTnVtYmVyKC0xKSB7CisgICAgbUxhc3QzQUZyYW1lTnVtYmVyKC0xKSwKKyAgICBtTGFzdEFFRnJhbWVOdW1iZXIoLTEpLAorICAgIG1MYXN0QUZyYW1lTnVtYmVyKC0xKSwKKyAgICBtTGFzdEFXQkZyYW1lTnVtYmVyKC0xKSB7CiAKICAgICBzcDxDYW1lcmFEZXZpY2VCYXNlPiBkID0gZGV2aWNlLnByb21vdGUoKTsKICAgICBtU3ludGhlc2l6ZTNBTm90aWZ5ID0gIShkLT53aWxsTm90aWZ5M0EoKSk7CkBAIC0yNjIsMjQgKzI2NSw3MyBAQAogICAgIGJvb2wgZ290QWxsU3RhdGVzID0gdHJ1ZTsKIAogICAgIC8vIFRPRE86IEFsc28gdXNlIEFFIG1vZGUsIEFFIHRyaWdnZXIgSUQKLSAgICBnb3RBbGxTdGF0ZXMgJj0gdXBkYXRlUGVuZGluZ1N0YXRlPHVpbnQ4X3Q+KG1ldGFkYXRhLCBBTkRST0lEX0NPTlRST0xfQUZfTU9ERSwKKyAgICBib29sIGdvdEFGU3RhdGUgPSB1cGRhdGVQZW5kaW5nU3RhdGU8dWludDhfdD4obWV0YWRhdGEsIEFORFJPSURfQ09OVFJPTF9BRl9NT0RFLAogICAgICAgICAgICAgJnBlbmRpbmdTdGF0ZS5hZk1vZGUsIGZyYW1lTnVtYmVyLCBjYW1lcmFJZCk7CiAKLSAgICBnb3RBbGxTdGF0ZXMgJj0gdXBkYXRlUGVuZGluZ1N0YXRlPHVpbnQ4X3Q+KG1ldGFkYXRhLCBBTkRST0lEX0NPTlRST0xfQVdCX01PREUsCisgICAgYm9vbCBnb3RBV0JTdGF0ZSA9IHVwZGF0ZVBlbmRpbmdTdGF0ZTx1aW50OF90PihtZXRhZGF0YSwgQU5EUk9JRF9DT05UUk9MX0FXQl9NT0RFLAogICAgICAgICAgICAgJnBlbmRpbmdTdGF0ZS5hd2JNb2RlLCBmcmFtZU51bWJlciwgY2FtZXJhSWQpOwogCi0gICAgZ290QWxsU3RhdGVzICY9IHVwZGF0ZVBlbmRpbmdTdGF0ZTx1aW50OF90PihtZXRhZGF0YSwgQU5EUk9JRF9DT05UUk9MX0FFX1NUQVRFLAorICAgIGJvb2wgZ290QUVTdGF0ZSA9IHVwZGF0ZVBlbmRpbmdTdGF0ZTx1aW50OF90PihtZXRhZGF0YSwgQU5EUk9JRF9DT05UUk9MX0FFX1NUQVRFLAogICAgICAgICAgICAgJnBlbmRpbmdTdGF0ZS5hZVN0YXRlLCBmcmFtZU51bWJlciwgY2FtZXJhSWQpOwogCi0gICAgZ290QWxsU3RhdGVzICY9IHVwZGF0ZVBlbmRpbmdTdGF0ZTx1aW50OF90PihtZXRhZGF0YSwgQU5EUk9JRF9DT05UUk9MX0FGX1NUQVRFLAorICAgIGdvdEFGU3RhdGUgJj0gdXBkYXRlUGVuZGluZ1N0YXRlPHVpbnQ4X3Q+KG1ldGFkYXRhLCBBTkRST0lEX0NPTlRST0xfQUZfU1RBVEUsCiAgICAgICAgICAgICAmcGVuZGluZ1N0YXRlLmFmU3RhdGUsIGZyYW1lTnVtYmVyLCBjYW1lcmFJZCk7CiAKLSAgICBnb3RBbGxTdGF0ZXMgJj0gdXBkYXRlUGVuZGluZ1N0YXRlPHVpbnQ4X3Q+KG1ldGFkYXRhLCBBTkRST0lEX0NPTlRST0xfQVdCX1NUQVRFLAorICAgIGdvdEFXQlN0YXRlICY9IHVwZGF0ZVBlbmRpbmdTdGF0ZTx1aW50OF90PihtZXRhZGF0YSwgQU5EUk9JRF9DT05UUk9MX0FXQl9TVEFURSwKICAgICAgICAgICAgICZwZW5kaW5nU3RhdGUuYXdiU3RhdGUsIGZyYW1lTnVtYmVyLCBjYW1lcmFJZCk7CiAKICAgICBwZW5kaW5nU3RhdGUuYWZUcmlnZ2VySWQgPSBmcmFtZS5tUmVzdWx0RXh0cmFzLmFmVHJpZ2dlcklkOwogICAgIHBlbmRpbmdTdGF0ZS5hZVRyaWdnZXJJZCA9IGZyYW1lLm1SZXN1bHRFeHRyYXMucHJlY2FwdHVyZVRyaWdnZXJJZDsKIAorICAgIGlmIChnb3RBRVN0YXRlICYmIChmcmFtZU51bWJlciA+IG1MYXN0QUVGcmFtZU51bWJlcikpIHsKKyAgICAgICAgaWYgKHBlbmRpbmdTdGF0ZS5hZVN0YXRlICE9IG0zYVN0YXRlLmFlU3RhdGUgfHwKKyAgICAgICAgICAgICAgICBwZW5kaW5nU3RhdGUuYWVUcmlnZ2VySWQgPiBtM2FTdGF0ZS5hZVRyaWdnZXJJZCkgeworICAgICAgICAgICAgQUxPR1YoIiVzOiBDYW1lcmEgJWQ6IEFFIHN0YXRlICVkLT4lZCIsCisgICAgICAgICAgICAgICAgICAgIF9fRlVOQ1RJT05fXywgY2FtZXJhSWQsCisgICAgICAgICAgICAgICAgICAgIG0zYVN0YXRlLmFlU3RhdGUsIHBlbmRpbmdTdGF0ZS5hZVN0YXRlKTsKKyAgICAgICAgICAgIGNsaWVudC0+bm90aWZ5QXV0b0V4cG9zdXJlKHBlbmRpbmdTdGF0ZS5hZVN0YXRlLCBwZW5kaW5nU3RhdGUuYWVUcmlnZ2VySWQpOworCisgICAgICAgICAgICBtM2FTdGF0ZS5hZVN0YXRlID0gcGVuZGluZ1N0YXRlLmFlU3RhdGU7CisgICAgICAgICAgICBtM2FTdGF0ZS5hZVRyaWdnZXJJZCA9IHBlbmRpbmdTdGF0ZS5hZVRyaWdnZXJJZDsKKyAgICAgICAgICAgIG1MYXN0QUVGcmFtZU51bWJlciA9IGZyYW1lTnVtYmVyOworICAgICAgICB9CisgICAgfQorCisgICAgaWYgKGdvdEFGU3RhdGUgJiYgKGZyYW1lTnVtYmVyID4gbUxhc3RBRnJhbWVOdW1iZXIpKSB7CisgICAgICAgIGlmIChwZW5kaW5nU3RhdGUuYWZTdGF0ZSAhPSBtM2FTdGF0ZS5hZlN0YXRlIHx8CisgICAgICAgICAgICAgICAgcGVuZGluZ1N0YXRlLmFmTW9kZSAhPSBtM2FTdGF0ZS5hZk1vZGUgfHwKKyAgICAgICAgICAgICAgICBwZW5kaW5nU3RhdGUuYWZUcmlnZ2VySWQgIT0gbTNhU3RhdGUuYWZUcmlnZ2VySWQpIHsKKyAgICAgICAgICAgIEFMT0dWKCIlczogQ2FtZXJhICVkOiBBRiBzdGF0ZSAlZC0+JWQuIEFGIG1vZGUgJWQtPiVkLiBUcmlnZ2VyICVkLT4lZCIsCisgICAgICAgICAgICAgICAgICAgIF9fRlVOQ1RJT05fXywgY2FtZXJhSWQsCisgICAgICAgICAgICAgICAgICAgIG0zYVN0YXRlLmFmU3RhdGUsIHBlbmRpbmdTdGF0ZS5hZlN0YXRlLAorICAgICAgICAgICAgICAgICAgICBtM2FTdGF0ZS5hZk1vZGUsIHBlbmRpbmdTdGF0ZS5hZk1vZGUsCisgICAgICAgICAgICAgICAgICAgIG0zYVN0YXRlLmFmVHJpZ2dlcklkLCBwZW5kaW5nU3RhdGUuYWZUcmlnZ2VySWQpOworICAgICAgICAgICAgY2xpZW50LT5ub3RpZnlBdXRvRm9jdXMocGVuZGluZ1N0YXRlLmFmU3RhdGUsIHBlbmRpbmdTdGF0ZS5hZlRyaWdnZXJJZCk7CisKKyAgICAgICAgICAgIG0zYVN0YXRlLmFmU3RhdGUgPSBwZW5kaW5nU3RhdGUuYWZTdGF0ZTsKKyAgICAgICAgICAgIG0zYVN0YXRlLmFmTW9kZSA9IHBlbmRpbmdTdGF0ZS5hZk1vZGU7CisgICAgICAgICAgICBtM2FTdGF0ZS5hZlRyaWdnZXJJZCA9IHBlbmRpbmdTdGF0ZS5hZlRyaWdnZXJJZDsKKyAgICAgICAgICAgIG1MYXN0QUZyYW1lTnVtYmVyID0gZnJhbWVOdW1iZXI7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBpZiAoZ290QVdCU3RhdGUgJiYgKGZyYW1lTnVtYmVyID4gbUxhc3RBV0JGcmFtZU51bWJlcikpIHsKKyAgICAgICAgaWYgKHBlbmRpbmdTdGF0ZS5hd2JTdGF0ZSAhPSBtM2FTdGF0ZS5hd2JTdGF0ZSB8fAorICAgICAgICAgICAgICAgIHBlbmRpbmdTdGF0ZS5hd2JNb2RlICE9IG0zYVN0YXRlLmF3Yk1vZGUpIHsKKyAgICAgICAgICAgIEFMT0dWKCIlczogQ2FtZXJhICVkOiBBV0Igc3RhdGUgJWQtPiVkLiBBV0IgbW9kZSAlZC0+JWQiLAorICAgICAgICAgICAgICAgICAgICBfX0ZVTkNUSU9OX18sIGNhbWVyYUlkLAorICAgICAgICAgICAgICAgICAgICBtM2FTdGF0ZS5hd2JTdGF0ZSwgcGVuZGluZ1N0YXRlLmF3YlN0YXRlLAorICAgICAgICAgICAgICAgICAgICBtM2FTdGF0ZS5hd2JNb2RlLCBwZW5kaW5nU3RhdGUuYXdiTW9kZSk7CisgICAgICAgICAgICBjbGllbnQtPm5vdGlmeUF1dG9XaGl0ZWJhbGFuY2UocGVuZGluZ1N0YXRlLmF3YlN0YXRlLAorICAgICAgICAgICAgICAgICAgICBwZW5kaW5nU3RhdGUuYWVUcmlnZ2VySWQpOworCisgICAgICAgICAgICBtM2FTdGF0ZS5hd2JNb2RlID0gcGVuZGluZ1N0YXRlLmF3Yk1vZGU7CisgICAgICAgICAgICBtM2FTdGF0ZS5hd2JTdGF0ZSA9IHBlbmRpbmdTdGF0ZS5hd2JTdGF0ZTsKKyAgICAgICAgICAgIG1MYXN0QVdCRnJhbWVOdW1iZXIgPSBmcmFtZU51bWJlcjsKKyAgICAgICAgfQorICAgIH0KKworICAgIGdvdEFsbFN0YXRlcyAmPSBnb3RBRVN0YXRlICYgZ290QUZTdGF0ZSAmIGdvdEFXQlN0YXRlOwogICAgIGlmICghZ290QWxsU3RhdGVzKSB7CiAgICAgICAgIC8vIElmIG5vdCBhbGwgc3RhdGVzIGFyZSByZWNlaXZlZCwgcHV0IHRoZSBwZW5kaW5nIHN0YXRlIHRvIG1QZW5kaW5nM0FTdGF0ZXMuCiAgICAgICAgIGlmIChpbmRleCA9PSBOQU1FX05PVF9GT1VORCkgewpAQCAtMjkwLDQwICszNDIsMTAgQEAKICAgICAgICAgcmV0dXJuIE5PVF9FTk9VR0hfREFUQTsKICAgICB9CiAKLSAgICAvLyBPbmNlIGFsbCAzQSBzdGF0ZXMgYXJlIHJlY2VpdmVkLCBub3RpZnkgdGhlIGNsaWVudCBhYm91dCAzQSBjaGFuZ2VzLgotICAgIGlmIChwZW5kaW5nU3RhdGUuYWVTdGF0ZSAhPSBtM2FTdGF0ZS5hZVN0YXRlIHx8Ci0gICAgICAgICAgICBwZW5kaW5nU3RhdGUuYWVUcmlnZ2VySWQgPiBtM2FTdGF0ZS5hZVRyaWdnZXJJZCkgewotICAgICAgICBBTE9HVigiJXM6IENhbWVyYSAlZDogQUUgc3RhdGUgJWQtPiVkIiwKLSAgICAgICAgICAgICAgICBfX0ZVTkNUSU9OX18sIGNhbWVyYUlkLAotICAgICAgICAgICAgICAgIG0zYVN0YXRlLmFlU3RhdGUsIHBlbmRpbmdTdGF0ZS5hZVN0YXRlKTsKLSAgICAgICAgY2xpZW50LT5ub3RpZnlBdXRvRXhwb3N1cmUocGVuZGluZ1N0YXRlLmFlU3RhdGUsIHBlbmRpbmdTdGF0ZS5hZVRyaWdnZXJJZCk7Ci0gICAgfQotCi0gICAgaWYgKHBlbmRpbmdTdGF0ZS5hZlN0YXRlICE9IG0zYVN0YXRlLmFmU3RhdGUgfHwKLSAgICAgICAgcGVuZGluZ1N0YXRlLmFmTW9kZSAhPSBtM2FTdGF0ZS5hZk1vZGUgfHwKLSAgICAgICAgcGVuZGluZ1N0YXRlLmFmVHJpZ2dlcklkICE9IG0zYVN0YXRlLmFmVHJpZ2dlcklkKSB7Ci0gICAgICAgIEFMT0dWKCIlczogQ2FtZXJhICVkOiBBRiBzdGF0ZSAlZC0+JWQuIEFGIG1vZGUgJWQtPiVkLiBUcmlnZ2VyICVkLT4lZCIsCi0gICAgICAgICAgICAgICAgX19GVU5DVElPTl9fLCBjYW1lcmFJZCwKLSAgICAgICAgICAgICAgICBtM2FTdGF0ZS5hZlN0YXRlLCBwZW5kaW5nU3RhdGUuYWZTdGF0ZSwKLSAgICAgICAgICAgICAgICBtM2FTdGF0ZS5hZk1vZGUsIHBlbmRpbmdTdGF0ZS5hZk1vZGUsCi0gICAgICAgICAgICAgICAgbTNhU3RhdGUuYWZUcmlnZ2VySWQsIHBlbmRpbmdTdGF0ZS5hZlRyaWdnZXJJZCk7Ci0gICAgICAgIGNsaWVudC0+bm90aWZ5QXV0b0ZvY3VzKHBlbmRpbmdTdGF0ZS5hZlN0YXRlLCBwZW5kaW5nU3RhdGUuYWZUcmlnZ2VySWQpOwotICAgIH0KLSAgICBpZiAocGVuZGluZ1N0YXRlLmF3YlN0YXRlICE9IG0zYVN0YXRlLmF3YlN0YXRlIHx8Ci0gICAgICAgIHBlbmRpbmdTdGF0ZS5hd2JNb2RlICE9IG0zYVN0YXRlLmF3Yk1vZGUpIHsKLSAgICAgICAgQUxPR1YoIiVzOiBDYW1lcmEgJWQ6IEFXQiBzdGF0ZSAlZC0+JWQuIEFXQiBtb2RlICVkLT4lZCIsCi0gICAgICAgICAgICAgICAgX19GVU5DVElPTl9fLCBjYW1lcmFJZCwKLSAgICAgICAgICAgICAgICBtM2FTdGF0ZS5hd2JTdGF0ZSwgcGVuZGluZ1N0YXRlLmF3YlN0YXRlLAotICAgICAgICAgICAgICAgIG0zYVN0YXRlLmF3Yk1vZGUsIHBlbmRpbmdTdGF0ZS5hd2JNb2RlKTsKLSAgICAgICAgY2xpZW50LT5ub3RpZnlBdXRvV2hpdGViYWxhbmNlKHBlbmRpbmdTdGF0ZS5hd2JTdGF0ZSwKLSAgICAgICAgICAgICAgICBwZW5kaW5nU3RhdGUuYWVUcmlnZ2VySWQpOwotICAgIH0KLQogICAgIGlmIChpbmRleCAhPSBOQU1FX05PVF9GT1VORCkgewogICAgICAgICBtUGVuZGluZzNBU3RhdGVzLnJlbW92ZUl0ZW1zQXQoaW5kZXgpOwogICAgIH0KIAotICAgIG0zYVN0YXRlID0gcGVuZGluZ1N0YXRlOwogICAgIG1MYXN0M0FGcmFtZU51bWJlciA9IGZyYW1lTnVtYmVyOwogCiAgICAgcmV0dXJuIE9LOwpkaWZmIC0tZ2l0IGEvc2VydmljZXMvY2FtZXJhL2xpYmNhbWVyYXNlcnZpY2UvYXBpMS9jbGllbnQyL0ZyYW1lUHJvY2Vzc29yLmggYi9zZXJ2aWNlcy9jYW1lcmEvbGliY2FtZXJhc2VydmljZS9hcGkxL2NsaWVudDIvRnJhbWVQcm9jZXNzb3IuaAppbmRleCA2MmE0ZTkxLi44MTgzYzEyIDEwMDY0NAotLS0gYS9zZXJ2aWNlcy9jYW1lcmEvbGliY2FtZXJhc2VydmljZS9hcGkxL2NsaWVudDIvRnJhbWVQcm9jZXNzb3IuaAorKysgYi9zZXJ2aWNlcy9jYW1lcmEvbGliY2FtZXJhc2VydmljZS9hcGkxL2NsaWVudDIvRnJhbWVQcm9jZXNzb3IuaApAQCAtMTA0LDggKzEwNCw3IEBACiAgICAgLy8gVHJhY2sgbW9zdCByZWNlbnQgZnJhbWUgbnVtYmVyIGZvciB3aGljaCAzQSBub3RpZmljYXRpb25zIHdlcmUgc2VudCBmb3IuCiAgICAgLy8gVXNlZCB0byBmaWx0ZXIgYWdhaW5zdCBzZW5kaW5nIDNBIG5vdGlmaWNhdGlvbnMgZm9yIHRoZSBzYW1lIGZyYW1lCiAgICAgLy8gc2V2ZXJhbCB0aW1lcy4KLSAgICBpbnQzMl90IG1MYXN0M0FGcmFtZU51bWJlcjsKLQorICAgIGludDMyX3QgbUxhc3QzQUZyYW1lTnVtYmVyLCBtTGFzdEFFRnJhbWVOdW1iZXIsIG1MYXN0QUZyYW1lTnVtYmVyLCBtTGFzdEFXQkZyYW1lTnVtYmVyOwogICAgIC8vIEVtaXQgRmFjZURldGVjdGlvbiBldmVudCB0byBqYXZhIGlmIGZhY2VzIGNoYW5nZWQKICAgICB2b2lkIGNhbGxiYWNrRmFjZURldGVjdGlvbihjb25zdCBzcDxDYW1lcmEyQ2xpZW50PiYgY2xpZW50LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNhbWVyYV9mcmFtZV9tZXRhZGF0YSAmbWV0YWRhdGEpOwpkaWZmIC0tZ2l0IGEvc2VydmljZXMvY2FtZXJhL2xpYmNhbWVyYXNlcnZpY2UvYXBpMS9jbGllbnQyL1BhcmFtZXRlcnMuY3BwIGIvc2VydmljZXMvY2FtZXJhL2xpYmNhbWVyYXNlcnZpY2UvYXBpMS9jbGllbnQyL1BhcmFtZXRlcnMuY3BwCmluZGV4IDI4ZDE4NmEuLjE4YWRkYjUgMTAwNjQ0Ci0tLSBhL3NlcnZpY2VzL2NhbWVyYS9saWJjYW1lcmFzZXJ2aWNlL2FwaTEvY2xpZW50Mi9QYXJhbWV0ZXJzLmNwcAorKysgYi9zZXJ2aWNlcy9jYW1lcmEvbGliY2FtZXJhc2VydmljZS9hcGkxL2NsaWVudDIvUGFyYW1ldGVycy5jcHAKQEAgLTY5LDcgKzY5LDcgQEAKICAgICByZXMgPSBidWlsZFF1aXJrcygpOwogICAgIGlmIChyZXMgIT0gT0spIHJldHVybiByZXM7CiAKLSAgICBjb25zdCBTaXplIE1BWF9QUkVWSUVXX1NJWkUgPSB7IE1BWF9QUkVWSUVXX1dJRFRILCBNQVhfUFJFVklFV19IRUlHSFQgfTsKKyAgICBTaXplIG1heFByZXZpZXdTaXplID0geyBNQVhfUFJFVklFV19XSURUSCwgTUFYX1BSRVZJRVdfSEVJR0hUIH07CiAgICAgLy8gVHJlYXQgdGhlIEguMjY0IG1heCBzaXplIGFzIHRoZSBtYXggc3VwcG9ydGVkIHZpZGVvIHNpemUuCiAgICAgTWVkaWFQcm9maWxlcyAqdmlkZW9FbmNvZGVyUHJvZmlsZXMgPSBNZWRpYVByb2ZpbGVzOjpnZXRJbnN0YW5jZSgpOwogICAgIFZlY3Rvcjx2aWRlb19lbmNvZGVyPiBlbmNvZGVycyA9IHZpZGVvRW5jb2RlclByb2ZpbGVzLT5nZXRWaWRlb0VuY29kZXJzKCk7CkBAIC05MCwxMSArOTAsMTYgQEAKICAgICAgICAgfQogICAgIH0KICAgICAvLyBUaGlzIGlzIGp1c3QgYW4gdXBwZXIgYm91bmQgYW5kIG1heSBub3QgYmUgYW4gYWN0dWFsbHkgdmFsaWQgdmlkZW8gc2l6ZQotICAgIGNvbnN0IFNpemUgVklERU9fU0laRV9VUFBFUl9CT1VORCA9IHttYXhWaWRlb1dpZHRoLCBtYXhWaWRlb0hlaWdodH07CisgICAgU2l6ZSB2aWRlb1NpemVVcHBlckJvdW5kID0ge21heFZpZGVvV2lkdGgsIG1heFZpZGVvSGVpZ2h0fTsKIAotICAgIHJlcyA9IGdldEZpbHRlcmVkU2l6ZXMoTUFYX1BSRVZJRVdfU0laRSwgJmF2YWlsYWJsZVByZXZpZXdTaXplcyk7CisgICAgaWYgKGZhc3RJbmZvLnN1cHBvcnRzUHJlZmVycmVkQ29uZmlncykgeworICAgICAgICBtYXhQcmV2aWV3U2l6ZSA9IGdldE1heFNpemUoZ2V0UHJlZmVycmVkUHJldmlld1NpemVzKCkpOworICAgICAgICB2aWRlb1NpemVVcHBlckJvdW5kID0gZ2V0TWF4U2l6ZShnZXRQcmVmZXJyZWRWaWRlb1NpemVzKCkpOworICAgIH0KKworICAgIHJlcyA9IGdldEZpbHRlcmVkU2l6ZXMobWF4UHJldmlld1NpemUsICZhdmFpbGFibGVQcmV2aWV3U2l6ZXMpOwogICAgIGlmIChyZXMgIT0gT0spIHJldHVybiByZXM7Ci0gICAgcmVzID0gZ2V0RmlsdGVyZWRTaXplcyhWSURFT19TSVpFX1VQUEVSX0JPVU5ELCAmYXZhaWxhYmxlVmlkZW9TaXplcyk7CisgICAgcmVzID0gZ2V0RmlsdGVyZWRTaXplcyh2aWRlb1NpemVVcHBlckJvdW5kLCAmYXZhaWxhYmxlVmlkZW9TaXplcyk7CiAgICAgaWYgKHJlcyAhPSBPSykgcmV0dXJuIHJlczsKIAogICAgIC8vIFNlbGVjdCBpbml0aWFsIHByZXZpZXcgYW5kIHZpZGVvIHNpemUgdGhhdCdzIHVuZGVyIHRoZSBpbml0aWFsIGJvdW5kIGFuZApAQCAtMjk2LDkgKzMwMSwxMyBAQAogICAgIFZlY3RvcjxTaXplPiBhdmFpbGFibGVKcGVnU2l6ZXMgPSBnZXRBdmFpbGFibGVKcGVnU2l6ZXMoKTsKICAgICBpZiAoIWF2YWlsYWJsZUpwZWdTaXplcy5zaXplKCkpIHJldHVybiBOT19JTklUOwogCi0gICAgLy8gVE9ETzogUGljayBtYXhpbXVtCiAgICAgcGljdHVyZVdpZHRoID0gYXZhaWxhYmxlSnBlZ1NpemVzWzBdLndpZHRoOwogICAgIHBpY3R1cmVIZWlnaHQgPSBhdmFpbGFibGVKcGVnU2l6ZXNbMF0uaGVpZ2h0OworICAgIGlmIChmYXN0SW5mby5zdXBwb3J0c1ByZWZlcnJlZENvbmZpZ3MpIHsKKyAgICAgICAgU2l6ZSBzdWdnZXN0ZWRKcGVnU2l6ZSA9IGdldE1heFNpemUoZ2V0UHJlZmVycmVkSnBlZ1NpemVzKCkpOworICAgICAgICBwaWN0dXJlV2lkdGggPSBzdWdnZXN0ZWRKcGVnU2l6ZS53aWR0aDsKKyAgICAgICAgcGljdHVyZUhlaWdodCA9IHN1Z2dlc3RlZEpwZWdTaXplLmhlaWdodDsKKyAgICB9CiAgICAgcGljdHVyZVdpZHRoTGFzdFNldCA9IHBpY3R1cmVXaWR0aDsKICAgICBwaWN0dXJlSGVpZ2h0TGFzdFNldCA9IHBpY3R1cmVIZWlnaHQ7CiAgICAgcGljdHVyZVNpemVPdmVycmlkZW4gPSBmYWxzZTsKQEAgLTc1Nyw2ICs3NjYsNyBAQAogICAgIGZvY3VzU3RhdGUgPSBBTkRST0lEX0NPTlRST0xfQUZfU1RBVEVfSU5BQ1RJVkU7CiAgICAgc2hhZG93Rm9jdXNNb2RlID0gRk9DVVNfTU9ERV9JTlZBTElEOwogCisgICAgYWVTdGF0ZSA9IEFORFJPSURfQ09OVFJPTF9BRV9TVEFURV9JTkFDVElWRTsKICAgICBjYW1lcmFfbWV0YWRhdGFfcm9fZW50cnlfdCBtYXgzYVJlZ2lvbnMgPSBzdGF0aWNJbmZvKEFORFJPSURfQ09OVFJPTF9NQVhfUkVHSU9OUywKICAgICAgICAgICAgIFBhcmFtZXRlcnM6Ok5VTV9SRUdJT04sIFBhcmFtZXRlcnM6Ok5VTV9SRUdJT04pOwogICAgIGlmIChtYXgzYVJlZ2lvbnMuY291bnQgIT0gUGFyYW1ldGVyczo6TlVNX1JFR0lPTikgcmV0dXJuIE5PX0lOSVQ7CkBAIC0xMDEwLDYgKzEwMjAsOSBAQAogICAgICAgICBhcnJheUhlaWdodCA9IGFjdGl2ZUFycmF5U2l6ZS5kYXRhLmkzMlszXTsKICAgICB9IGVsc2UgcmV0dXJuIE5PX0lOSVQ7CiAKKyAgICBmYXN0SW5mby5zdXBwb3J0c1ByZWZlcnJlZENvbmZpZ3MgPQorICAgICAgICBpbmZvLT5leGlzdHMoQU5EUk9JRF9TQ0FMRVJfQVZBSUxBQkxFX1JFQ09NTUVOREVEX1NUUkVBTV9DT05GSUdVUkFUSU9OUyk7CisKICAgICAvLyBXZSdsbCBzZXQgdGhlIHRhcmdldCBGUFMgcmFuZ2UgZm9yIHN0aWxsIGNhcHR1cmVzIHRvIGJlIGFzIHdpZGUKICAgICAvLyBhcyBwb3NzaWJsZSB0byBnaXZlIHRoZSBIQUwgbWF4aW11bSBsYXRpdHVkZSBmb3IgZXhwb3N1cmUgc2VsZWN0aW9uCiAgICAgY2FtZXJhX21ldGFkYXRhX3JvX2VudHJ5X3QgYXZhaWxhYmxlRnBzUmFuZ2VzID0KQEAgLTEwMjEsOCArMTAzNCwxMSBAQAogICAgIC8vIEdldCBzdXBwb3J0ZWQgcHJldmlldyBmcHMgcmFuZ2VzLCB1cCB0byBkZWZhdWx0IG1heGltdW0uCiAgICAgVmVjdG9yPFNpemU+IHN1cHBvcnRlZFByZXZpZXdTaXplczsKICAgICBWZWN0b3I8RnBzUmFuZ2U+IHN1cHBvcnRlZFByZXZpZXdGcHNSYW5nZXM7Ci0gICAgY29uc3QgU2l6ZSBQUkVWSUVXX1NJWkVfQk9VTkQgPSB7IE1BWF9QUkVWSUVXX1dJRFRILCBNQVhfUFJFVklFV19IRUlHSFQgfTsKLSAgICBzdGF0dXNfdCByZXMgPSBnZXRGaWx0ZXJlZFNpemVzKFBSRVZJRVdfU0laRV9CT1VORCwgJnN1cHBvcnRlZFByZXZpZXdTaXplcyk7CisgICAgU2l6ZSBwcmV2aWV3U2l6ZUJvdW5kID0geyBNQVhfUFJFVklFV19XSURUSCwgTUFYX1BSRVZJRVdfSEVJR0hUIH07CisgICAgaWYgKGZhc3RJbmZvLnN1cHBvcnRzUHJlZmVycmVkQ29uZmlncykgeworICAgICAgICBwcmV2aWV3U2l6ZUJvdW5kID0gZ2V0TWF4U2l6ZShnZXRQcmVmZXJyZWRQcmV2aWV3U2l6ZXMoKSk7CisgICAgfQorICAgIHN0YXR1c190IHJlcyA9IGdldEZpbHRlcmVkU2l6ZXMocHJldmlld1NpemVCb3VuZCwgJnN1cHBvcnRlZFByZXZpZXdTaXplcyk7CiAgICAgaWYgKHJlcyAhPSBPSykgcmV0dXJuIHJlczsKICAgICBmb3IgKHNpemVfdCBpPTA7IGkgPCBhdmFpbGFibGVGcHNSYW5nZXMuY291bnQ7IGkgKz0gMikgewogICAgICAgICBpZiAoIWlzRnBzU3VwcG9ydGVkKHN1cHBvcnRlZFByZXZpZXdTaXplcywKQEAgLTMxMDYsNiArMzEyMiw2NyBAQAogICAgIHJldHVybiBqcGVnU2l6ZXM7CiB9CiAKK1ZlY3RvcjxQYXJhbWV0ZXJzOjpTdHJlYW1Db25maWd1cmF0aW9uPiBQYXJhbWV0ZXJzOjpnZXRQcmVmZXJyZWRTdHJlYW1Db25maWd1cmF0aW9ucygKKyAgICAgICAgaW50MzJfdCB1c2VjYXNlSWQpIGNvbnN0IHsKKyAgICBjb25zdCBzaXplX3QgU1RSRUFNX0NPTkZJR1VSQVRJT05fU0laRSA9IDU7CisgICAgY29uc3Qgc2l6ZV90IFNUUkVBTV9XSURUSF9PRkZTRVQgPSAwOworICAgIGNvbnN0IHNpemVfdCBTVFJFQU1fSEVJR0hUX09GRlNFVCA9IDE7CisgICAgY29uc3Qgc2l6ZV90IFNUUkVBTV9GT1JNQVRfT0ZGU0VUID0gMjsKKyAgICBjb25zdCBzaXplX3QgU1RSRUFNX0lTX0lOUFVUX09GRlNFVCA9IDM7CisgICAgY29uc3Qgc2l6ZV90IFNUUkVBTV9VU0VDQVNFX0JJVE1BUF9PRkZTRVQgPSA0OworICAgIFZlY3RvcjxTdHJlYW1Db25maWd1cmF0aW9uPiBzY3M7CisKKyAgICBpZiAoZmFzdEluZm8uc3VwcG9ydHNQcmVmZXJyZWRDb25maWdzKSB7CisgICAgICAgIGNhbWVyYV9tZXRhZGF0YV9yb19lbnRyeV90IGF2YWlsYWJsZVN0cmVhbUNvbmZpZ3MgPSBzdGF0aWNJbmZvKAorICAgICAgICAgICAgICAgIEFORFJPSURfU0NBTEVSX0FWQUlMQUJMRV9SRUNPTU1FTkRFRF9TVFJFQU1fQ09ORklHVVJBVElPTlMpOworICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGF2YWlsYWJsZVN0cmVhbUNvbmZpZ3MuY291bnQ7IGkrPSBTVFJFQU1fQ09ORklHVVJBVElPTl9TSVpFKSB7CisgICAgICAgICAgICBpbnQzMl90IHdpZHRoID0gYXZhaWxhYmxlU3RyZWFtQ29uZmlncy5kYXRhLmkzMltpICsgU1RSRUFNX1dJRFRIX09GRlNFVF07CisgICAgICAgICAgICBpbnQzMl90IGhlaWdodCA9IGF2YWlsYWJsZVN0cmVhbUNvbmZpZ3MuZGF0YS5pMzJbaSArIFNUUkVBTV9IRUlHSFRfT0ZGU0VUXTsKKyAgICAgICAgICAgIGludDMyX3QgZm9ybWF0ID0gYXZhaWxhYmxlU3RyZWFtQ29uZmlncy5kYXRhLmkzMltpICsgU1RSRUFNX0ZPUk1BVF9PRkZTRVRdOworICAgICAgICAgICAgaW50MzJfdCBpc0lucHV0ID0gYXZhaWxhYmxlU3RyZWFtQ29uZmlncy5kYXRhLmkzMltpICsgU1RSRUFNX0lTX0lOUFVUX09GRlNFVF07CisgICAgICAgICAgICBpbnQzMl90IHN1cHBvcnRlZFVzZWNhc2VzID0KKyAgICAgICAgICAgICAgICAgICAgYXZhaWxhYmxlU3RyZWFtQ29uZmlncy5kYXRhLmkzMltpICsgU1RSRUFNX1VTRUNBU0VfQklUTUFQX09GRlNFVF07CisgICAgICAgICAgICBpZiAoc3VwcG9ydGVkVXNlY2FzZXMgJiAoMSA8PCB1c2VjYXNlSWQpKSB7CisgICAgICAgICAgICAgICAgU3RyZWFtQ29uZmlndXJhdGlvbiBzYyA9IHtmb3JtYXQsIHdpZHRoLCBoZWlnaHQsIGlzSW5wdXR9OworICAgICAgICAgICAgICAgIHNjcy5hZGQoc2MpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCisgICAgcmV0dXJuIHNjczsKK30KKworVmVjdG9yPFBhcmFtZXRlcnM6OlNpemU+IFBhcmFtZXRlcnM6OmdldFByZWZlcnJlZEZpbHRlcmVkU2l6ZXMoaW50MzJfdCB1c2VjYXNlSWQsCisgICAgICAgIGludDMyX3QgZm9ybWF0KSBjb25zdCB7CisgICAgVmVjdG9yPFBhcmFtZXRlcnM6OlNpemU+IHNpemVzOworICAgIFZlY3RvcjxTdHJlYW1Db25maWd1cmF0aW9uPiBzY3MgPSBnZXRQcmVmZXJyZWRTdHJlYW1Db25maWd1cmF0aW9ucyh1c2VjYXNlSWQpOworICAgIGZvciAoY29uc3QgYXV0byAmaXQgOiBzY3MpIHsKKyAgICAgICAgaWYgKGl0LmZvcm1hdCA9PSBmb3JtYXQpIHsKKyAgICAgICAgICAgIHNpemVzLmFkZCh7aXQud2lkdGgsIGl0LmhlaWdodH0pOworICAgICAgICB9CisgICAgfQorCisgICAgcmV0dXJuIHNpemVzOworfQorCitWZWN0b3I8UGFyYW1ldGVyczo6U2l6ZT4gUGFyYW1ldGVyczo6Z2V0UHJlZmVycmVkSnBlZ1NpemVzKCkgY29uc3QgeworICAgIHJldHVybiBnZXRQcmVmZXJyZWRGaWx0ZXJlZFNpemVzKAorICAgICAgICAgICAgQU5EUk9JRF9TQ0FMRVJfQVZBSUxBQkxFX1JFQ09NTUVOREVEX1NUUkVBTV9DT05GSUdVUkFUSU9OU19TTkFQU0hPVCwKKyAgICAgICAgICAgIEhBTF9QSVhFTF9GT1JNQVRfQkxPQik7Cit9CisKK1ZlY3RvcjxQYXJhbWV0ZXJzOjpTaXplPiBQYXJhbWV0ZXJzOjpnZXRQcmVmZXJyZWRQcmV2aWV3U2l6ZXMoKSBjb25zdCB7CisgICAgcmV0dXJuIGdldFByZWZlcnJlZEZpbHRlcmVkU2l6ZXMoCisgICAgICAgICAgICBBTkRST0lEX1NDQUxFUl9BVkFJTEFCTEVfUkVDT01NRU5ERURfU1RSRUFNX0NPTkZJR1VSQVRJT05TX1BSRVZJRVcsCisgICAgICAgICAgICBIQUxfUElYRUxfRk9STUFUX0lNUExFTUVOVEFUSU9OX0RFRklORUQpOworfQorCitWZWN0b3I8UGFyYW1ldGVyczo6U2l6ZT4gUGFyYW1ldGVyczo6Z2V0UHJlZmVycmVkVmlkZW9TaXplcygpIGNvbnN0IHsKKyAgICByZXR1cm4gZ2V0UHJlZmVycmVkRmlsdGVyZWRTaXplcygKKyAgICAgICAgICAgIEFORFJPSURfU0NBTEVSX0FWQUlMQUJMRV9SRUNPTU1FTkRFRF9TVFJFQU1fQ09ORklHVVJBVElPTlNfUkVDT1JELAorICAgICAgICAgICAgSEFMX1BJWEVMX0ZPUk1BVF9JTVBMRU1FTlRBVElPTl9ERUZJTkVEKTsKK30KKwogUGFyYW1ldGVyczo6Q3JvcFJlZ2lvbiBQYXJhbWV0ZXJzOjpjYWxjdWxhdGVDcm9wUmVnaW9uKGJvb2wgcHJldmlld09ubHkpIGNvbnN0IHsKIAogICAgIGZsb2F0IHpvb21MZWZ0LCB6b29tVG9wLCB6b29tV2lkdGgsIHpvb21IZWlnaHQ7CmRpZmYgLS1naXQgYS9zZXJ2aWNlcy9jYW1lcmEvbGliY2FtZXJhc2VydmljZS9hcGkxL2NsaWVudDIvUGFyYW1ldGVycy5oIGIvc2VydmljZXMvY2FtZXJhL2xpYmNhbWVyYXNlcnZpY2UvYXBpMS9jbGllbnQyL1BhcmFtZXRlcnMuaAppbmRleCA0MmU3YTQ3Li4zYTcwOWM5IDEwMDY0NAotLS0gYS9zZXJ2aWNlcy9jYW1lcmEvbGliY2FtZXJhc2VydmljZS9hcGkxL2NsaWVudDIvUGFyYW1ldGVycy5oCisrKyBiL3NlcnZpY2VzL2NhbWVyYS9saWJjYW1lcmFzZXJ2aWNlL2FwaTEvY2xpZW50Mi9QYXJhbWV0ZXJzLmgKQEAgLTEyMiw2ICsxMjIsNyBAQAogICAgICAgICBpbnQzMl90IGhpZ2g7CiAgICAgfTsKIAorICAgIHVpbnQ4X3QgYWVTdGF0ZTsgLy9sYXRlc3QgQUUgc3RhdGUgZnJvbSBIYWwKICAgICBpbnQzMl90IGV4cG9zdXJlQ29tcGVuc2F0aW9uOwogICAgIGJvb2wgYXV0b0V4cG9zdXJlTG9jazsKICAgICBib29sIGF1dG9FeHBvc3VyZUxvY2tBdmFpbGFibGU7CkBAIC0yNDcsNiArMjQ4LDcgQEAKICAgICAgICAgYm9vbCB1c2VGbGV4aWJsZVl1djsKICAgICAgICAgU2l6ZSBtYXhKcGVnU2l6ZTsKICAgICAgICAgU2l6ZSBtYXhac2xTaXplOworICAgICAgICBib29sIHN1cHBvcnRzUHJlZmVycmVkQ29uZmlnczsKICAgICB9IGZhc3RJbmZvOwogCiAgICAgLy8gUXVpcmtzIGluZm9ybWF0aW9uOyB0aGVzZSBhcmUgc2hvcnQtbGl2ZWQgZmxhZ3MgdG8gZW5hYmxlIHdvcmthcm91bmRzIGZvcgpAQCAtNDE3LDYgKzQxOSw5IEBACiAgICAgLy8gcmV0dXJucyBhbiBlbXB0eSBWZWN0b3IgaWYgZGV2aWNlIEhBTCB2ZXJzaW9uIGRvZXMgc3VwcG9ydCBpdAogICAgIFZlY3RvcjxTdHJlYW1Db25maWd1cmF0aW9uPiBnZXRTdHJlYW1Db25maWd1cmF0aW9ucygpOwogCisgICAgLy8gSGVscGVyIGZ1bmN0aW9uIHRvIGV4dHJhY3QgdGhlIHN1Z2dlc3RlZCBzdHJlYW0gY29uZmlndXJhdGlvbnMKKyAgICBWZWN0b3I8U3RyZWFtQ29uZmlndXJhdGlvbj4gZ2V0UHJlZmVycmVkU3RyZWFtQ29uZmlndXJhdGlvbnMoaW50MzJfdCB1c2VjYXNlSWQpIGNvbnN0OworCiAgICAgLy8gSGVscGVyIGZ1bmN0aW9uIHRvIGdldCBtaW5pbXVtIGZyYW1lIGR1cmF0aW9uIGZvciBhIGpwZWcgc2l6ZQogICAgIC8vIHJldHVybiAtMSBpZiBpbnB1dCBqcGVnIHNpemUgY2Fubm90IGJlIGZvdW5kIGluIHN1cHBvcnRlZCBzaXplIGxpc3QKICAgICBpbnQ2NF90IGdldEpwZWdTdHJlYW1NaW5GcmFtZUR1cmF0aW9uTnMoUGFyYW1ldGVyczo6U2l6ZSBzaXplKTsKQEAgLTQzOCw2ICs0NDMsMTUgQEAKICAgICAvLyBUaGUgbWF4aW11bSBzaXplIGlzIGRlZmluZWQgYnkgY29tcGFyaW5nIHdpZHRoIGZpcnN0LCB3aGVuIHdpZHRoIHRpZXMgY29tcGFyaW5nIGhlaWdodC4KICAgICBTaXplIGdldE1heFNpemUoY29uc3QgVmVjdG9yPFNpemU+JiBzaXplcyk7CiAKKyAgICAvLyBIZWxwZXIgZnVuY3Rpb24gdG8gZmlsdGVyIGFuZCBzb3J0IHN1Z2dlc3RlZCBzaXplcworICAgIFZlY3RvcjxQYXJhbWV0ZXJzOjpTaXplPiBnZXRQcmVmZXJyZWRGaWx0ZXJlZFNpemVzKGludDMyX3QgdXNlY2FzZUlkLCBpbnQzMl90IGZvcm1hdCkgY29uc3Q7CisgICAgLy8gSGVscGVyIGZ1bmN0aW9uIHRvIGdldCB0aGUgc3VnZ2VzdGVkIGpwZWcgc2l6ZXMKKyAgICBWZWN0b3I8U2l6ZT4gZ2V0UHJlZmVycmVkSnBlZ1NpemVzKCkgY29uc3Q7CisgICAgLy8gSGVscGVyIGZ1bmN0aW9uIHRvIGdldCB0aGUgc3VnZ2VzdGVkIHByZXZpZXcgc2l6ZXMKKyAgICBWZWN0b3I8U2l6ZT4gZ2V0UHJlZmVycmVkUHJldmlld1NpemVzKCkgY29uc3Q7CisgICAgLy8gSGVscGVyIGZ1bmN0aW9uIHRvIGdldCB0aGUgc3VnZ2VzdGVkIHZpZGVvIHNpemVzCisgICAgVmVjdG9yPFNpemU+IGdldFByZWZlcnJlZFZpZGVvU2l6ZXMoKSBjb25zdDsKKwogICAgIGludCBtRGV2aWNlVmVyc2lvbjsKICAgICB1aW50OF90IG1EZWZhdWx0U2NlbmVNb2RlOwogfTsKZGlmZiAtLWdpdCBhL3NlcnZpY2VzL2NhbWVyYS9saWJjYW1lcmFzZXJ2aWNlL2FwaTIvQ2FtZXJhRGV2aWNlQ2xpZW50LmNwcCBiL3NlcnZpY2VzL2NhbWVyYS9saWJjYW1lcmFzZXJ2aWNlL2FwaTIvQ2FtZXJhRGV2aWNlQ2xpZW50LmNwcAppbmRleCA4NDQyOGMyLi42ZGEwNWMzIDEwMDY0NAotLS0gYS9zZXJ2aWNlcy9jYW1lcmEvbGliY2FtZXJhc2VydmljZS9hcGkyL0NhbWVyYURldmljZUNsaWVudC5jcHAKKysrIGIvc2VydmljZXMvY2FtZXJhL2xpYmNhbWVyYXNlcnZpY2UvYXBpMi9DYW1lcmFEZXZpY2VDbGllbnQuY3BwCkBAIC0xOSw2ICsxOSw3IEBACiAvLyNkZWZpbmUgTE9HX05ERUJVRyAwCiAKICNpbmNsdWRlIDxjdXRpbHMvcHJvcGVydGllcy5oPgorI2luY2x1ZGUgPHV0aWxzL0NhbWVyYVRocmVhZFN0YXRlLmg+CiAjaW5jbHVkZSA8dXRpbHMvTG9nLmg+CiAjaW5jbHVkZSA8dXRpbHMvVHJhY2UuaD4KICNpbmNsdWRlIDxndWkvU3VyZmFjZS5oPgpAQCAtMTIyLDYgKzEyMyw3IEBACiAgICAgICAgICAgICAgICAgcGh5c2ljYWxLZXlzRW50cnkuZGF0YS5pMzIgKyBwaHlzaWNhbEtleXNFbnRyeS5jb3VudCk7CiAgICAgfQogCisgICAgbVByb3ZpZGVyTWFuYWdlciA9IHByb3ZpZGVyUHRyOwogICAgIHJldHVybiBPSzsKIH0KIApAQCAtNjI2LDEyICs2MjgsMTEgQEAKIAogICAgIGlmIChwaHlzaWNhbENhbWVyYUlkLnNpemUoKSA+IDApIHsKICAgICAgICAgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+IHBoeXNpY2FsQ2FtZXJhSWRzOwotICAgICAgICBzdGQ6OnN0cmluZyBwaHlzaWNhbElkKHBoeXNpY2FsQ2FtZXJhSWQuc3RyaW5nKCkpOwogICAgICAgICBib29sIGxvZ2ljYWxDYW1lcmEgPQotICAgICAgICAgICAgICAgIENhbWVyYVByb3ZpZGVyTWFuYWdlcjo6aXNMb2dpY2FsQ2FtZXJhKG1EZXZpY2UtPmluZm8oKSwgJnBoeXNpY2FsQ2FtZXJhSWRzKTsKKyAgICAgICAgICAgICAgICBtUHJvdmlkZXJNYW5hZ2VyLT5pc0xvZ2ljYWxDYW1lcmEobUNhbWVyYUlkU3RyLnN0cmluZygpLCAmcGh5c2ljYWxDYW1lcmFJZHMpOwogICAgICAgICBpZiAoIWxvZ2ljYWxDYW1lcmEgfHwKLSAgICAgICAgICAgICAgICBzdGQ6OmZpbmQocGh5c2ljYWxDYW1lcmFJZHMuYmVnaW4oKSwgcGh5c2ljYWxDYW1lcmFJZHMuZW5kKCksIHBoeXNpY2FsSWQpID09Ci0gICAgICAgICAgICAgICAgcGh5c2ljYWxDYW1lcmFJZHMuZW5kKCkpIHsKKyAgICAgICAgICAgICAgICBzdGQ6OmZpbmQocGh5c2ljYWxDYW1lcmFJZHMuYmVnaW4oKSwgcGh5c2ljYWxDYW1lcmFJZHMuZW5kKCksCisgICAgICAgICAgICAgICAgcGh5c2ljYWxDYW1lcmFJZC5zdHJpbmcoKSkgPT0gcGh5c2ljYWxDYW1lcmFJZHMuZW5kKCkpIHsKICAgICAgICAgICAgIFN0cmluZzggbXNnID0gU3RyaW5nODo6Zm9ybWF0KCJDYW1lcmEgJXM6IENhbWVyYSBkb2Vzbid0IHN1cHBvcnQgcGh5c2ljYWxDYW1lcmFJZCAlcy4iLAogICAgICAgICAgICAgICAgICAgICBtQ2FtZXJhSWRTdHIuc3RyaW5nKCksIHBoeXNpY2FsQ2FtZXJhSWQuc3RyaW5nKCkpOwogICAgICAgICAgICAgQUxPR0UoIiVzOiAlcyIsIF9fRlVOQ1RJT05fXywgbXNnLnN0cmluZygpKTsKQEAgLTE3MjQsNyArMTcyNSw3IEBACiAvLyBUT0RPOiBtb3ZlIHRvIENhbWVyYTJDbGllbnRCYXNlCiBib29sIENhbWVyYURldmljZUNsaWVudDo6ZW5mb3JjZVJlcXVlc3RQZXJtaXNzaW9ucyhDYW1lcmFNZXRhZGF0YSYgbWV0YWRhdGEpIHsKIAotICAgIGNvbnN0IGludCBwaWQgPSBJUENUaHJlYWRTdGF0ZTo6c2VsZigpLT5nZXRDYWxsaW5nUGlkKCk7CisgICAgY29uc3QgaW50IHBpZCA9IENhbWVyYVRocmVhZFN0YXRlOjpnZXRDYWxsaW5nUGlkKCk7CiAgICAgY29uc3QgaW50IHNlbGZQaWQgPSBnZXRwaWQoKTsKICAgICBjYW1lcmFfbWV0YWRhdGFfZW50cnlfdCBlbnRyeTsKIApAQCAtMTc2Myw3ICsxNzY0LDcgQEAKICAgICAgICAgU3RyaW5nMTYgcGVybWlzc2lvblN0cmluZyA9CiAgICAgICAgICAgICBTdHJpbmcxNigiYW5kcm9pZC5wZXJtaXNzaW9uLkNBTUVSQV9ESVNBQkxFX1RSQU5TTUlUX0xFRCIpOwogICAgICAgICBpZiAoIWNoZWNrQ2FsbGluZ1Blcm1pc3Npb24ocGVybWlzc2lvblN0cmluZykpIHsKLSAgICAgICAgICAgIGNvbnN0IGludCB1aWQgPSBJUENUaHJlYWRTdGF0ZTo6c2VsZigpLT5nZXRDYWxsaW5nVWlkKCk7CisgICAgICAgICAgICBjb25zdCBpbnQgdWlkID0gQ2FtZXJhVGhyZWFkU3RhdGU6OmdldENhbGxpbmdVaWQoKTsKICAgICAgICAgICAgIEFMT0dFKCJQZXJtaXNzaW9uIERlbmlhbDogIgogICAgICAgICAgICAgICAgICAgImNhbid0IGRpc2FibGUgdHJhbnNtaXQgTEVEIHBpZD0lZCwgdWlkPSVkIiwgcGlkLCB1aWQpOwogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwpkaWZmIC0tZ2l0IGEvc2VydmljZXMvY2FtZXJhL2xpYmNhbWVyYXNlcnZpY2UvYXBpMi9DYW1lcmFEZXZpY2VDbGllbnQuaCBiL3NlcnZpY2VzL2NhbWVyYS9saWJjYW1lcmFzZXJ2aWNlL2FwaTIvQ2FtZXJhRGV2aWNlQ2xpZW50LmgKaW5kZXggYzMwNTYxZC4uMDljZTk3NyAxMDA2NDQKLS0tIGEvc2VydmljZXMvY2FtZXJhL2xpYmNhbWVyYXNlcnZpY2UvYXBpMi9DYW1lcmFEZXZpY2VDbGllbnQuaAorKysgYi9zZXJ2aWNlcy9jYW1lcmEvbGliY2FtZXJhc2VydmljZS9hcGkyL0NhbWVyYURldmljZUNsaWVudC5oCkBAIC0zMDEsNiArMzAxLDcgQEAKICAgICBzdGQ6OnVub3JkZXJlZF9tYXA8aW50MzJfdCwgT3V0cHV0U3RyZWFtSW5mbz4gbVN0cmVhbUluZm9NYXA7CiAKICAgICBzdGF0aWMgY29uc3QgaW50MzJfdCBNQVhfU1VSRkFDRVNfUEVSX1NUUkVBTSA9IDI7CisgICAgc3A8Q2FtZXJhUHJvdmlkZXJNYW5hZ2VyPiBtUHJvdmlkZXJNYW5hZ2VyOwogfTsKIAogfTsgLy8gbmFtZXNwYWNlIGFuZHJvaWQKZGlmZiAtLWdpdCBhL3NlcnZpY2VzL2NhbWVyYS9saWJjYW1lcmFzZXJ2aWNlL2NvbW1vbi9DYW1lcmEyQ2xpZW50QmFzZS5jcHAgYi9zZXJ2aWNlcy9jYW1lcmEvbGliY2FtZXJhc2VydmljZS9jb21tb24vQ2FtZXJhMkNsaWVudEJhc2UuY3BwCmluZGV4IGNlMDA2YTcuLjc4ZmViM2UgMTAwNjQ0Ci0tLSBhL3NlcnZpY2VzL2NhbWVyYS9saWJjYW1lcmFzZXJ2aWNlL2NvbW1vbi9DYW1lcmEyQ2xpZW50QmFzZS5jcHAKKysrIGIvc2VydmljZXMvY2FtZXJhL2xpYmNhbWVyYXNlcnZpY2UvY29tbW9uL0NhbWVyYTJDbGllbnRCYXNlLmNwcApAQCAtMzIsMTQgKzMyLDExIEBACiAjaW5jbHVkZSAiYXBpMi9DYW1lcmFEZXZpY2VDbGllbnQuaCIKIAogI2luY2x1ZGUgImRldmljZTMvQ2FtZXJhM0RldmljZS5oIgorI2luY2x1ZGUgInV0aWxzL0NhbWVyYVRocmVhZFN0YXRlLmgiCiAKIG5hbWVzcGFjZSBhbmRyb2lkIHsKIHVzaW5nIG5hbWVzcGFjZSBjYW1lcmEyOwogCi1zdGF0aWMgaW50IGdldENhbGxpbmdQaWQoKSB7Ci0gICAgcmV0dXJuIElQQ1RocmVhZFN0YXRlOjpzZWxmKCktPmdldENhbGxpbmdQaWQoKTsKLX0KLQogLy8gSW50ZXJmYWNlIHVzZWQgYnkgQ2FtZXJhU2VydmljZQogCiB0ZW1wbGF0ZSA8dHlwZW5hbWUgVENsaWVudEJhc2U+CkBAIC01NywxMyArNTQsMTMgQEAKICAgICAgICAgICAgICAgICBjYW1lcmFJZCwgYXBpMUNhbWVyYUlkLCBjYW1lcmFGYWNpbmcsIGNsaWVudFBpZCwgY2xpZW50VWlkLCBzZXJ2aWNlUGlkKSwKICAgICAgICAgbVNoYXJlZENhbWVyYUNhbGxiYWNrcyhyZW1vdGVDYWxsYmFjayksCiAgICAgICAgIG1EZXZpY2VWZXJzaW9uKGNhbWVyYVNlcnZpY2UtPmdldERldmljZVZlcnNpb24oVENsaWVudEJhc2U6Om1DYW1lcmFJZFN0cikpLAorICAgICAgICBtRGV2aWNlKG5ldyBDYW1lcmEzRGV2aWNlKGNhbWVyYUlkKSksCiAgICAgICAgIG1EZXZpY2VBY3RpdmUoZmFsc2UpLCBtQXBpMUNhbWVyYUlkKGFwaTFDYW1lcmFJZCkKIHsKICAgICBBTE9HSSgiQ2FtZXJhICVzOiBPcGVuZWQuIENsaWVudDogJXMgKFBJRCAlZCwgVUlEICVkKSIsIGNhbWVyYUlkLnN0cmluZygpLAogICAgICAgICAgICAgU3RyaW5nOChjbGllbnRQYWNrYWdlTmFtZSkuc3RyaW5nKCksIGNsaWVudFBpZCwgY2xpZW50VWlkKTsKIAogICAgIG1Jbml0aWFsQ2xpZW50UGlkID0gY2xpZW50UGlkOwotICAgIG1EZXZpY2UgPSBuZXcgQ2FtZXJhM0RldmljZShjYW1lcmFJZCk7CiAgICAgTE9HX0FMV0FZU19GQVRBTF9JRihtRGV2aWNlID09IDAsICJEZXZpY2Ugc2hvdWxkIG5ldmVyIGJlIE5VTEwgaGVyZS4iKTsKIH0KIApAQCAtNzEsNyArNjgsNyBAQAogc3RhdHVzX3QgQ2FtZXJhMkNsaWVudEJhc2U8VENsaWVudEJhc2U+OjpjaGVja1BpZChjb25zdCBjaGFyKiBjaGVja0xvY2F0aW9uKQogICAgICAgICBjb25zdCB7CiAKLSAgICBpbnQgY2FsbGluZ1BpZCA9IGdldENhbGxpbmdQaWQoKTsKKyAgICBpbnQgY2FsbGluZ1BpZCA9IENhbWVyYVRocmVhZFN0YXRlOjpnZXRDYWxsaW5nUGlkKCk7CiAgICAgaWYgKGNhbGxpbmdQaWQgPT0gVENsaWVudEJhc2U6Om1DbGllbnRQaWQpIHJldHVybiBOT19FUlJPUjsKIAogICAgIEFMT0dFKCIlczogYXR0ZW1wdCB0byB1c2UgYSBsb2NrZWQgY2FtZXJhIGZyb20gYSBkaWZmZXJlbnQgcHJvY2VzcyIKQEAgLTE4Niw3ICsxODMsNyBAQAogCiAgICAgYmluZGVyOjpTdGF0dXMgcmVzID0gYmluZGVyOjpTdGF0dXM6Om9rKCk7CiAgICAgLy8gQWxsb3cgYm90aCBjbGllbnQgYW5kIHRoZSBtZWRpYSBzZXJ2ZXIgdG8gZGlzY29ubmVjdCBhdCBhbGwgdGltZXMKLSAgICBpbnQgY2FsbGluZ1BpZCA9IGdldENhbGxpbmdQaWQoKTsKKyAgICBpbnQgY2FsbGluZ1BpZCA9IENhbWVyYVRocmVhZFN0YXRlOjpnZXRDYWxsaW5nUGlkKCk7CiAgICAgaWYgKGNhbGxpbmdQaWQgIT0gVENsaWVudEJhc2U6Om1DbGllbnRQaWQgJiYKICAgICAgICAgY2FsbGluZ1BpZCAhPSBUQ2xpZW50QmFzZTo6bVNlcnZpY2VQaWQpIHJldHVybiByZXM7CiAKQEAgLTIwNiw4ICsyMDMsNiBAQAogICAgIGlmIChtRGV2aWNlID09IDApIHJldHVybjsKICAgICBtRGV2aWNlLT5kaXNjb25uZWN0KCk7CiAKLSAgICBtRGV2aWNlLmNsZWFyKCk7Ci0KICAgICBBTE9HVigiQ2FtZXJhICVzOiBEZXRhY2ggY29tcGxldGUiLCBUQ2xpZW50QmFzZTo6bUNhbWVyYUlkU3RyLnN0cmluZygpKTsKIH0KIApAQCAtMjE5LDE4ICsyMTQsMTggQEAKICAgICBNdXRleDo6QXV0b2xvY2sgaWNsKG1CaW5kZXJTZXJpYWxpemF0aW9uTG9jayk7CiAKICAgICBpZiAoVENsaWVudEJhc2U6Om1DbGllbnRQaWQgIT0gMCAmJgotICAgICAgICBnZXRDYWxsaW5nUGlkKCkgIT0gVENsaWVudEJhc2U6Om1DbGllbnRQaWQpIHsKKyAgICAgICAgQ2FtZXJhVGhyZWFkU3RhdGU6OmdldENhbGxpbmdQaWQoKSAhPSBUQ2xpZW50QmFzZTo6bUNsaWVudFBpZCkgewogCiAgICAgICAgIEFMT0dFKCIlczogQ2FtZXJhICVzOiBDb25uZWN0aW9uIGF0dGVtcHQgZnJvbSBwaWQgJWQ7ICIKICAgICAgICAgICAgICAgICAiY3VycmVudCBsb2NrZWQgdG8gcGlkICVkIiwKICAgICAgICAgICAgICAgICBfX0ZVTkNUSU9OX18sCiAgICAgICAgICAgICAgICAgVENsaWVudEJhc2U6Om1DYW1lcmFJZFN0ci5zdHJpbmcoKSwKLSAgICAgICAgICAgICAgICBnZXRDYWxsaW5nUGlkKCksCisgICAgICAgICAgICAgICAgQ2FtZXJhVGhyZWFkU3RhdGU6OmdldENhbGxpbmdQaWQoKSwKICAgICAgICAgICAgICAgICBUQ2xpZW50QmFzZTo6bUNsaWVudFBpZCk7CiAgICAgICAgIHJldHVybiBCQURfVkFMVUU7CiAgICAgfQogCi0gICAgVENsaWVudEJhc2U6Om1DbGllbnRQaWQgPSBnZXRDYWxsaW5nUGlkKCk7CisgICAgVENsaWVudEJhc2U6Om1DbGllbnRQaWQgPSBDYW1lcmFUaHJlYWRTdGF0ZTo6Z2V0Q2FsbGluZ1BpZCgpOwogCiAgICAgVENsaWVudEJhc2U6Om1SZW1vdGVDYWxsYmFjayA9IGNsaWVudDsKICAgICBtU2hhcmVkQ2FtZXJhQ2FsbGJhY2tzID0gY2xpZW50OwpkaWZmIC0tZ2l0IGEvc2VydmljZXMvY2FtZXJhL2xpYmNhbWVyYXNlcnZpY2UvY29tbW9uL0NhbWVyYTJDbGllbnRCYXNlLmggYi9zZXJ2aWNlcy9jYW1lcmEvbGliY2FtZXJhc2VydmljZS9jb21tb24vQ2FtZXJhMkNsaWVudEJhc2UuaAppbmRleCBlNzRmYmRmLi42NjkzODQ3IDEwMDY0NAotLS0gYS9zZXJ2aWNlcy9jYW1lcmEvbGliY2FtZXJhc2VydmljZS9jb21tb24vQ2FtZXJhMkNsaWVudEJhc2UuaAorKysgYi9zZXJ2aWNlcy9jYW1lcmEvbGliY2FtZXJhc2VydmljZS9jb21tb24vQ2FtZXJhMkNsaWVudEJhc2UuaApAQCAtMTMwLDcgKzEzMCwxMCBAQAogICAgIC8qKiBDYW1lcmFEZXZpY2VCYXNlIGluc3RhbmNlIHdyYXBwaW5nIEhBTDMrIGVudHJ5ICovCiAKICAgICBjb25zdCBpbnQgbURldmljZVZlcnNpb247Ci0gICAgc3A8Q2FtZXJhRGV2aWNlQmFzZT4gIG1EZXZpY2U7CisKKyAgICAvLyBTZXQgdG8gY29uc3QgdG8gYXZvaWQgbURldmljZSBiZWluZyB1cGRhdGVkICh1cGRhdGUgb2Ygc3A8PiBpcyByYWN5KSBkdXJpbmcKKyAgICAvLyBkdW1wRGV2aWNlICh3aGljaCBpcyBpbXBvcnRhbnQgdG8gYmUgbG9jayBmcmVlIGZvciBkZWJ1Z2dpbmcgcHVycG9zZSkKKyAgICBjb25zdCBzcDxDYW1lcmFEZXZpY2VCYXNlPiAgbURldmljZTsKIAogICAgIC8qKiBVdGlsaXR5IG1lbWJlcnMgKi8KIApkaWZmIC0tZ2l0IGEvc2VydmljZXMvY2FtZXJhL2xpYmNhbWVyYXNlcnZpY2UvY29tbW9uL0NhbWVyYVByb3ZpZGVyTWFuYWdlci5jcHAgYi9zZXJ2aWNlcy9jYW1lcmEvbGliY2FtZXJhc2VydmljZS9jb21tb24vQ2FtZXJhUHJvdmlkZXJNYW5hZ2VyLmNwcAppbmRleCAwY2U0MzE4Li4yNTQyYWIyIDEwMDY0NAotLS0gYS9zZXJ2aWNlcy9jYW1lcmEvbGliY2FtZXJhc2VydmljZS9jb21tb24vQ2FtZXJhUHJvdmlkZXJNYW5hZ2VyLmNwcAorKysgYi9zZXJ2aWNlcy9jYW1lcmEvbGliY2FtZXJhc2VydmljZS9jb21tb24vQ2FtZXJhUHJvdmlkZXJNYW5hZ2VyLmNwcApAQCAtMjAsOSArMjAsMTIgQEAKIAogI2luY2x1ZGUgIkNhbWVyYVByb3ZpZGVyTWFuYWdlci5oIgogCisjaW5jbHVkZSA8YW5kcm9pZC9oYXJkd2FyZS9jYW1lcmEvZGV2aWNlLzMuNS9JQ2FtZXJhRGV2aWNlLmg+CisKICNpbmNsdWRlIDxhbGdvcml0aG0+CiAjaW5jbHVkZSA8Y2hyb25vPgogI2luY2x1ZGUgPGludHR5cGVzLmg+CisjaW5jbHVkZSA8aGFyZHdhcmUvY2FtZXJhX2NvbW1vbi5oPgogI2luY2x1ZGUgPGhpZGwvU2VydmljZU1hbmFnZW1lbnQuaD4KICNpbmNsdWRlIDxmdW5jdGlvbmFsPgogI2luY2x1ZGUgPGNhbWVyYV9tZXRhZGF0YV9oaWRkZW4uaD4KQEAgLTMzNiw2ICszMzksNyBAQAogICAgICAgICBjb25zdCBoYXJkd2FyZTo6aGlkbF9zdHJpbmcmIC8qZnFOYW1lKi8sCiAgICAgICAgIGNvbnN0IGhhcmR3YXJlOjpoaWRsX3N0cmluZyYgbmFtZSwKICAgICAgICAgYm9vbCAvKnByZWV4aXN0aW5nKi8pIHsKKyAgICBzdGQ6OmxvY2tfZ3VhcmQ8c3RkOjptdXRleD4gcHJvdmlkZXJMb2NrKG1Qcm92aWRlckxpZmVjeWNsZUxvY2spOwogICAgIHsKICAgICAgICAgc3RkOjpsb2NrX2d1YXJkPHN0ZDo6bXV0ZXg+IGxvY2sobUludGVyZmFjZU11dGV4KTsKIApAQCAtMzkyLDM1ICszOTYsMTg0IEBACiAgICAgcmV0dXJuIHJldDsKIH0KIAotYm9vbCBDYW1lcmFQcm92aWRlck1hbmFnZXI6OmlzTG9naWNhbENhbWVyYShjb25zdCBDYW1lcmFNZXRhZGF0YSYgc3RhdGljSW5mbywKLSAgICAgICAgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+KiBwaHlzaWNhbENhbWVyYUlkcykgewotICAgIGJvb2wgaXNMb2dpY2FsQ2FtID0gZmFsc2U7Ci0gICAgY2FtZXJhX21ldGFkYXRhX3JvX2VudHJ5X3QgZW50cnlDYXA7Cit2b2lkIENhbWVyYVByb3ZpZGVyTWFuYWdlcjo6UHJvdmlkZXJJbmZvOjpEZXZpY2VJbmZvMzo6cXVlcnlQaHlzaWNhbENhbWVyYUlkcygpIHsKKyAgICBjYW1lcmFfbWV0YWRhdGFfZW50cnlfdCBlbnRyeUNhcDsKIAotICAgIGVudHJ5Q2FwID0gc3RhdGljSW5mby5maW5kKEFORFJPSURfUkVRVUVTVF9BVkFJTEFCTEVfQ0FQQUJJTElUSUVTKTsKKyAgICBlbnRyeUNhcCA9IG1DYW1lcmFDaGFyYWN0ZXJpc3RpY3MuZmluZChBTkRST0lEX1JFUVVFU1RfQVZBSUxBQkxFX0NBUEFCSUxJVElFUyk7CiAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBlbnRyeUNhcC5jb3VudDsgKytpKSB7CiAgICAgICAgIHVpbnQ4X3QgY2FwYWJpbGl0eSA9IGVudHJ5Q2FwLmRhdGEudThbaV07CiAgICAgICAgIGlmIChjYXBhYmlsaXR5ID09IEFORFJPSURfUkVRVUVTVF9BVkFJTEFCTEVfQ0FQQUJJTElUSUVTX0xPR0lDQUxfTVVMVElfQ0FNRVJBKSB7Ci0gICAgICAgICAgICBpc0xvZ2ljYWxDYW0gPSB0cnVlOworICAgICAgICAgICAgbUlzTG9naWNhbENhbWVyYSA9IHRydWU7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgIH0KLSAgICBpZiAoIWlzTG9naWNhbENhbSkgewotICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgaWYgKCFtSXNMb2dpY2FsQ2FtZXJhKSB7CisgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBjYW1lcmFfbWV0YWRhdGFfcm9fZW50cnlfdCBlbnRyeUlkcyA9IHN0YXRpY0luZm8uZmluZChBTkRST0lEX0xPR0lDQUxfTVVMVElfQ0FNRVJBX1BIWVNJQ0FMX0lEUyk7CisgICAgY2FtZXJhX21ldGFkYXRhX2VudHJ5X3QgZW50cnlJZHMgPSBtQ2FtZXJhQ2hhcmFjdGVyaXN0aWNzLmZpbmQoCisgICAgICAgICAgICBBTkRST0lEX0xPR0lDQUxfTVVMVElfQ0FNRVJBX1BIWVNJQ0FMX0lEUyk7CiAgICAgY29uc3QgdWludDhfdCogaWRzID0gZW50cnlJZHMuZGF0YS51ODsKICAgICBzaXplX3Qgc3RhcnQgPSAwOwogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgZW50cnlJZHMuY291bnQ7ICsraSkgewogICAgICAgICBpZiAoaWRzW2ldID09ICdcMCcpIHsKICAgICAgICAgICAgIGlmIChzdGFydCAhPSBpKSB7Ci0gICAgICAgICAgICAgICAgcGh5c2ljYWxDYW1lcmFJZHMtPnB1c2hfYmFjaygoY29uc3QgY2hhciopaWRzK3N0YXJ0KTsKKyAgICAgICAgICAgICAgICBtUGh5c2ljYWxJZHMucHVzaF9iYWNrKChjb25zdCBjaGFyKilpZHMrc3RhcnQpOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgc3RhcnQgPSBpKzE7CiAgICAgICAgIH0KICAgICB9Ci0gICAgcmV0dXJuIHRydWU7Cit9CisKK3N0YXR1c190IENhbWVyYVByb3ZpZGVyTWFuYWdlcjo6UHJvdmlkZXJJbmZvOjpEZXZpY2VJbmZvMzo6Zml4dXBNb25vY2hyb21lVGFncygpIHsKKyAgICBzdGF0dXNfdCByZXMgPSBPSzsKKyAgICBhdXRvJiBjID0gbUNhbWVyYUNoYXJhY3RlcmlzdGljczsKKworICAgIC8vIE92ZXJyaWRlIHN0YXRpYyBtZXRhZGF0YSBmb3IgTU9OT0NIUk9NRSBjYW1lcmEgd2l0aCBvbGRlciBkZXZpY2UgdmVyc2lvbgorICAgIGlmIChtVmVyc2lvbi5nZXRfbWFqb3IoKSA9PSAzICYmIG1WZXJzaW9uLmdldF9taW5vcigpIDwgNSkgeworICAgICAgICBjYW1lcmFfbWV0YWRhdGFfZW50cnkgY2FwID0gYy5maW5kKEFORFJPSURfUkVRVUVTVF9BVkFJTEFCTEVfQ0FQQUJJTElUSUVTKTsKKyAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBjYXAuY291bnQ7IGkrKykgeworICAgICAgICAgICAgaWYgKGNhcC5kYXRhLnU4W2ldID09IEFORFJPSURfUkVRVUVTVF9BVkFJTEFCTEVfQ0FQQUJJTElUSUVTX01PTk9DSFJPTUUpIHsKKyAgICAgICAgICAgICAgICAvLyBBTkRST0lEX1NFTlNPUl9JTkZPX0NPTE9SX0ZJTFRFUl9BUlJBTkdFTUVOVAorICAgICAgICAgICAgICAgIHVpbnQ4X3QgY2ZhID0gQU5EUk9JRF9TRU5TT1JfSU5GT19DT0xPUl9GSUxURVJfQVJSQU5HRU1FTlRfTU9OTzsKKyAgICAgICAgICAgICAgICByZXMgPSBjLnVwZGF0ZShBTkRST0lEX1NFTlNPUl9JTkZPX0NPTE9SX0ZJTFRFUl9BUlJBTkdFTUVOVCwgJmNmYSwgMSk7CisgICAgICAgICAgICAgICAgaWYgKHJlcyAhPSBPSykgeworICAgICAgICAgICAgICAgICAgICBBTE9HRSgiJXM6IEZhaWxlZCB0byB1cGRhdGUgQ09MT1JfRklMVEVSX0FSUkFOR0VNRU5UOiAlcyAoJWQpIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgX19GVU5DVElPTl9fLCBzdHJlcnJvcigtcmVzKSwgcmVzKTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlczsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAvLyBBTkRST0lEX1JFUVVFU1RfQVZBSUxBQkxFX0NIQVJBQ1RFUklTVElDU19LRVlTCisgICAgICAgICAgICAgICAgY29uc3Qgc3RkOjp2ZWN0b3I8dWludDMyX3Q+IHNLZXlzID0geworICAgICAgICAgICAgICAgICAgICAgICAgQU5EUk9JRF9TRU5TT1JfUkVGRVJFTkNFX0lMTFVNSU5BTlQxLAorICAgICAgICAgICAgICAgICAgICAgICAgQU5EUk9JRF9TRU5TT1JfUkVGRVJFTkNFX0lMTFVNSU5BTlQyLAorICAgICAgICAgICAgICAgICAgICAgICAgQU5EUk9JRF9TRU5TT1JfQ0FMSUJSQVRJT05fVFJBTlNGT1JNMSwKKyAgICAgICAgICAgICAgICAgICAgICAgIEFORFJPSURfU0VOU09SX0NBTElCUkFUSU9OX1RSQU5TRk9STTIsCisgICAgICAgICAgICAgICAgICAgICAgICBBTkRST0lEX1NFTlNPUl9DT0xPUl9UUkFOU0ZPUk0xLAorICAgICAgICAgICAgICAgICAgICAgICAgQU5EUk9JRF9TRU5TT1JfQ09MT1JfVFJBTlNGT1JNMiwKKyAgICAgICAgICAgICAgICAgICAgICAgIEFORFJPSURfU0VOU09SX0ZPUldBUkRfTUFUUklYMSwKKyAgICAgICAgICAgICAgICAgICAgICAgIEFORFJPSURfU0VOU09SX0ZPUldBUkRfTUFUUklYMiwKKyAgICAgICAgICAgICAgICB9OworICAgICAgICAgICAgICAgIHJlcyA9IHJlbW92ZUF2YWlsYWJsZUtleXMoYywgc0tleXMsCisgICAgICAgICAgICAgICAgICAgICAgICBBTkRST0lEX1JFUVVFU1RfQVZBSUxBQkxFX0NIQVJBQ1RFUklTVElDU19LRVlTKTsKKyAgICAgICAgICAgICAgICBpZiAocmVzICE9IE9LKSB7CisgICAgICAgICAgICAgICAgICAgIEFMT0dFKCIlczogRmFpbGVkIHRvIHVwZGF0ZSBSRVFVRVNUX0FWQUlMQUJMRV9DSEFSQUNURVJJU1RJQ1NfS0VZUzogJXMgKCVkKSIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19GVU5DVElPTl9fLCBzdHJlcnJvcigtcmVzKSwgcmVzKTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlczsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAvLyBBTkRST0lEX1JFUVVFU1RfQVZBSUxBQkxFX1JFUVVFU1RfS0VZUworICAgICAgICAgICAgICAgIGNvbnN0IHN0ZDo6dmVjdG9yPHVpbnQzMl90PiByZXFLZXlzID0geworICAgICAgICAgICAgICAgICAgICAgICAgQU5EUk9JRF9DT0xPUl9DT1JSRUNUSU9OX01PREUsCisgICAgICAgICAgICAgICAgICAgICAgICBBTkRST0lEX0NPTE9SX0NPUlJFQ1RJT05fVFJBTlNGT1JNLAorICAgICAgICAgICAgICAgICAgICAgICAgQU5EUk9JRF9DT0xPUl9DT1JSRUNUSU9OX0dBSU5TLAorICAgICAgICAgICAgICAgIH07CisgICAgICAgICAgICAgICAgcmVzID0gcmVtb3ZlQXZhaWxhYmxlS2V5cyhjLCByZXFLZXlzLCBBTkRST0lEX1JFUVVFU1RfQVZBSUxBQkxFX1JFUVVFU1RfS0VZUyk7CisgICAgICAgICAgICAgICAgaWYgKHJlcyAhPSBPSykgeworICAgICAgICAgICAgICAgICAgICBBTE9HRSgiJXM6IEZhaWxlZCB0byB1cGRhdGUgUkVRVUVTVF9BVkFJTEFCTEVfUkVRVUVTVF9LRVlTOiAlcyAoJWQpIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX0ZVTkNUSU9OX18sIHN0cmVycm9yKC1yZXMpLCByZXMpOworICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVzOworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIC8vIEFORFJPSURfUkVRVUVTVF9BVkFJTEFCTEVfUkVTVUxUX0tFWVMKKyAgICAgICAgICAgICAgICBjb25zdCBzdGQ6OnZlY3Rvcjx1aW50MzJfdD4gcmVzS2V5cyA9IHsKKyAgICAgICAgICAgICAgICAgICAgICAgIEFORFJPSURfU0VOU09SX0dSRUVOX1NQTElULAorICAgICAgICAgICAgICAgICAgICAgICAgQU5EUk9JRF9TRU5TT1JfTkVVVFJBTF9DT0xPUl9QT0lOVCwKKyAgICAgICAgICAgICAgICAgICAgICAgIEFORFJPSURfQ09MT1JfQ09SUkVDVElPTl9NT0RFLAorICAgICAgICAgICAgICAgICAgICAgICAgQU5EUk9JRF9DT0xPUl9DT1JSRUNUSU9OX1RSQU5TRk9STSwKKyAgICAgICAgICAgICAgICAgICAgICAgIEFORFJPSURfQ09MT1JfQ09SUkVDVElPTl9HQUlOUywKKyAgICAgICAgICAgICAgICB9OworICAgICAgICAgICAgICAgIHJlcyA9IHJlbW92ZUF2YWlsYWJsZUtleXMoYywgcmVzS2V5cywgQU5EUk9JRF9SRVFVRVNUX0FWQUlMQUJMRV9SRVNVTFRfS0VZUyk7CisgICAgICAgICAgICAgICAgaWYgKHJlcyAhPSBPSykgeworICAgICAgICAgICAgICAgICAgICBBTE9HRSgiJXM6IEZhaWxlZCB0byB1cGRhdGUgUkVRVUVTVF9BVkFJTEFCTEVfUkVTVUxUX0tFWVM6ICVzICglZCkiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fRlVOQ1RJT05fXywgc3RyZXJyb3IoLXJlcyksIHJlcyk7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiByZXM7CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgLy8gQU5EUk9JRF9TRU5TT1JfQkxBQ0tfTEVWRUxfUEFUVEVSTgorICAgICAgICAgICAgICAgIGNhbWVyYV9tZXRhZGF0YV9lbnRyeSBibEVudHJ5ID0gYy5maW5kKEFORFJPSURfU0VOU09SX0JMQUNLX0xFVkVMX1BBVFRFUk4pOworICAgICAgICAgICAgICAgIGZvciAoc2l6ZV90IGogPSAxOyBqIDwgYmxFbnRyeS5jb3VudDsgaisrKSB7CisgICAgICAgICAgICAgICAgICAgIGJsRW50cnkuZGF0YS5pMzJbal0gPSBibEVudHJ5LmRhdGEuaTMyWzBdOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKyAgICByZXR1cm4gcmVzOworfQorCitzdGF0dXNfdCBDYW1lcmFQcm92aWRlck1hbmFnZXI6OlByb3ZpZGVySW5mbzo6RGV2aWNlSW5mbzM6OnJlbW92ZUF2YWlsYWJsZUtleXMoCisgICAgICAgIENhbWVyYU1ldGFkYXRhJiBjLCBjb25zdCBzdGQ6OnZlY3Rvcjx1aW50MzJfdD4mIGtleXMsIHVpbnQzMl90IGtleVRhZykgeworICAgIHN0YXR1c190IHJlcyA9IE9LOworCisgICAgY2FtZXJhX21ldGFkYXRhX2VudHJ5IGtleXNFbnRyeSA9IGMuZmluZChrZXlUYWcpOworICAgIGlmIChrZXlzRW50cnkuY291bnQgPT0gMCkgeworICAgICAgICBBTE9HRSgiJXM6IEZhaWxlZCB0byBmaW5kIHRhZyAldTogJXMgKCVkKSIsIF9fRlVOQ1RJT05fXywga2V5VGFnLCBzdHJlcnJvcigtcmVzKSwgcmVzKTsKKyAgICAgICAgcmV0dXJuIHJlczsKKyAgICB9CisgICAgc3RkOjp2ZWN0b3I8aW50MzJfdD4gdktleXM7CisgICAgdktleXMucmVzZXJ2ZShrZXlzRW50cnkuY291bnQpOworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwga2V5c0VudHJ5LmNvdW50OyBpKyspIHsKKyAgICAgICAgaWYgKHN0ZDo6ZmluZChrZXlzLmJlZ2luKCksIGtleXMuZW5kKCksIGtleXNFbnRyeS5kYXRhLmkzMltpXSkgPT0ga2V5cy5lbmQoKSkgeworICAgICAgICAgICAgdktleXMucHVzaF9iYWNrKGtleXNFbnRyeS5kYXRhLmkzMltpXSk7CisgICAgICAgIH0KKyAgICB9CisgICAgcmVzID0gYy51cGRhdGUoa2V5VGFnLCB2S2V5cy5kYXRhKCksIHZLZXlzLnNpemUoKSk7CisgICAgcmV0dXJuIHJlczsKK30KKworYm9vbCBDYW1lcmFQcm92aWRlck1hbmFnZXI6OmlzTG9naWNhbENhbWVyYShjb25zdCBzdGQ6OnN0cmluZyYgaWQsCisgICAgICAgIHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiogcGh5c2ljYWxDYW1lcmFJZHMpIHsKKyAgICBzdGQ6OmxvY2tfZ3VhcmQ8c3RkOjptdXRleD4gbG9jayhtSW50ZXJmYWNlTXV0ZXgpOworCisgICAgYXV0byBkZXZpY2VJbmZvID0gZmluZERldmljZUluZm9Mb2NrZWQoaWQpOworICAgIGlmIChkZXZpY2VJbmZvID09IG51bGxwdHIpIHJldHVybiBmYWxzZTsKKworICAgIGlmIChkZXZpY2VJbmZvLT5tSXNMb2dpY2FsQ2FtZXJhICYmIHBoeXNpY2FsQ2FtZXJhSWRzICE9IG51bGxwdHIpIHsKKyAgICAgICAgKnBoeXNpY2FsQ2FtZXJhSWRzID0gZGV2aWNlSW5mby0+bVBoeXNpY2FsSWRzOworICAgIH0KKyAgICByZXR1cm4gZGV2aWNlSW5mby0+bUlzTG9naWNhbENhbWVyYTsKK30KKworYm9vbCBDYW1lcmFQcm92aWRlck1hbmFnZXI6OmlzSGlkZGVuUGh5c2ljYWxDYW1lcmEoY29uc3Qgc3RkOjpzdHJpbmcmIGNhbWVyYUlkKSB7CisgICAgZm9yIChhdXRvJiBwcm92aWRlciA6IG1Qcm92aWRlcnMpIHsKKyAgICAgICAgZm9yIChhdXRvJiBkZXZpY2VJbmZvIDogcHJvdmlkZXItPm1EZXZpY2VzKSB7CisgICAgICAgICAgICBpZiAoZGV2aWNlSW5mby0+bUlkID09IGNhbWVyYUlkKSB7CisgICAgICAgICAgICAgICAgLy8gY2FtZXJhSWQgaXMgZm91bmQgaW4gcHVibGljIGNhbWVyYSBJRHMgYWR2ZXJ0aXNlZCBieSB0aGUKKyAgICAgICAgICAgICAgICAvLyBwcm92aWRlci4KKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKKyAgICBmb3IgKGF1dG8mIHByb3ZpZGVyIDogbVByb3ZpZGVycykgeworICAgICAgICBmb3IgKGF1dG8mIGRldmljZUluZm8gOiBwcm92aWRlci0+bURldmljZXMpIHsKKyAgICAgICAgICAgIENhbWVyYU1ldGFkYXRhIGluZm87CisgICAgICAgICAgICBzdGF0dXNfdCByZXMgPSBkZXZpY2VJbmZvLT5nZXRDYW1lcmFDaGFyYWN0ZXJpc3RpY3MoJmluZm8pOworICAgICAgICAgICAgaWYgKHJlcyAhPSBPSykgeworICAgICAgICAgICAgICAgIEFMT0dFKCIlczogRmFpbGVkIHRvIGdldENhbWVyYUNoYXJhY3RlcmlzdGljcyBmb3IgaWQgJXMiLCBfX0ZVTkNUSU9OX18sCisgICAgICAgICAgICAgICAgICAgICAgICBkZXZpY2VJbmZvLT5tSWQuY19zdHIoKSk7CisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4gcGh5c2ljYWxJZHM7CisgICAgICAgICAgICBpZiAoZGV2aWNlSW5mby0+bUlzTG9naWNhbENhbWVyYSkgeworICAgICAgICAgICAgICAgIGlmIChzdGQ6OmZpbmQoZGV2aWNlSW5mby0+bVBoeXNpY2FsSWRzLmJlZ2luKCksIGRldmljZUluZm8tPm1QaHlzaWNhbElkcy5lbmQoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgIGNhbWVyYUlkKSAhPSBkZXZpY2VJbmZvLT5tUGh5c2ljYWxJZHMuZW5kKCkpIHsKKyAgICAgICAgICAgICAgICAgICAgaW50IGRldmljZVZlcnNpb24gPSBIQVJEV0FSRV9ERVZJQ0VfQVBJX1ZFUlNJT04oCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGV2aWNlSW5mby0+bVZlcnNpb24uZ2V0X21ham9yKCksIGRldmljZUluZm8tPm1WZXJzaW9uLmdldF9taW5vcigpKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGRldmljZVZlcnNpb24gPCBDQU1FUkFfREVWSUNFX0FQSV9WRVJTSU9OXzNfNSkgeworICAgICAgICAgICAgICAgICAgICAgICAgQUxPR0UoIiVzOiBXcm9uZyBkZXZpY2VWZXJzaW9uICV4IGZvciBoaWRkZW5QaHlzaWNhbENhbWVyYUlkICVzIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19GVU5DVElPTl9fLCBkZXZpY2VWZXJzaW9uLCBjYW1lcmFJZC5jX3N0cigpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCisgICAgcmV0dXJuIGZhbHNlOwogfQogCiBzdGF0dXNfdCBDYW1lcmFQcm92aWRlck1hbmFnZXI6OmFkZFByb3ZpZGVyTG9ja2VkKGNvbnN0IHN0ZDo6c3RyaW5nJiBuZXdQcm92aWRlciwgYm9vbCBleHBlY3RlZCkgewpAQCAtNDU4LDYgKzYxMSw3IEBACiB9CiAKIHN0YXR1c190IENhbWVyYVByb3ZpZGVyTWFuYWdlcjo6cmVtb3ZlUHJvdmlkZXIoY29uc3Qgc3RkOjpzdHJpbmcmIHByb3ZpZGVyKSB7CisgICAgc3RkOjpsb2NrX2d1YXJkPHN0ZDo6bXV0ZXg+IHByb3ZpZGVyTG9jayhtUHJvdmlkZXJMaWZlY3ljbGVMb2NrKTsKICAgICBzdGQ6OnVuaXF1ZV9sb2NrPHN0ZDo6bXV0ZXg+IGxvY2sobUludGVyZmFjZU11dGV4KTsKICAgICBzdGQ6OnZlY3RvcjxTdHJpbmc4PiByZW1vdmVkRGV2aWNlSWRzOwogICAgIHN0YXR1c190IHJlcyA9IE5BTUVfTk9UX0ZPVU5EOwpAQCAtNTQyLDEzICs2OTYsMjIgQEAKIAogICAgIC8vIEdldCBpbml0aWFsIGxpc3Qgb2YgY2FtZXJhIGRldmljZXMsIGlmIGFueQogICAgIHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiBkZXZpY2VzOwotICAgIGhhcmR3YXJlOjpSZXR1cm48dm9pZD4gcmV0ID0gbUludGVyZmFjZS0+Z2V0Q2FtZXJhSWRMaXN0KFsmc3RhdHVzLCAmZGV2aWNlc10oCisgICAgaGFyZHdhcmU6OlJldHVybjx2b2lkPiByZXQgPSBtSW50ZXJmYWNlLT5nZXRDYW1lcmFJZExpc3QoWyZzdGF0dXMsIHRoaXMsICZkZXZpY2VzXSgKICAgICAgICAgICAgIFN0YXR1cyBpZFN0YXR1cywKICAgICAgICAgICAgIGNvbnN0IGhhcmR3YXJlOjpoaWRsX3ZlYzxoYXJkd2FyZTo6aGlkbF9zdHJpbmc+JiBjYW1lcmFEZXZpY2VOYW1lcykgewogICAgICAgICBzdGF0dXMgPSBpZFN0YXR1czsKICAgICAgICAgaWYgKHN0YXR1cyA9PSBTdGF0dXM6Ok9LKSB7Ci0gICAgICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGNhbWVyYURldmljZU5hbWVzLnNpemUoKTsgaSsrKSB7Ci0gICAgICAgICAgICAgICAgZGV2aWNlcy5wdXNoX2JhY2soY2FtZXJhRGV2aWNlTmFtZXNbaV0pOworICAgICAgICAgICAgZm9yIChhdXRvJiBuYW1lIDogY2FtZXJhRGV2aWNlTmFtZXMpIHsKKyAgICAgICAgICAgICAgICB1aW50MTZfdCBtYWpvciwgbWlub3I7CisgICAgICAgICAgICAgICAgc3RkOjpzdHJpbmcgdHlwZSwgaWQ7CisgICAgICAgICAgICAgICAgc3RhdHVzX3QgcmVzID0gcGFyc2VEZXZpY2VOYW1lKG5hbWUsICZtYWpvciwgJm1pbm9yLCAmdHlwZSwgJmlkKTsKKyAgICAgICAgICAgICAgICBpZiAocmVzICE9IE9LKSB7CisgICAgICAgICAgICAgICAgICAgIEFMT0dFKCIlczogRXJyb3IgcGFyc2luZyBkZXZpY2VOYW1lOiAlczogJWQiLCBfX0ZVTkNUSU9OX18sIG5hbWUuY19zdHIoKSwgcmVzKTsKKyAgICAgICAgICAgICAgICAgICAgc3RhdHVzID0gU3RhdHVzOjpJTlRFUk5BTF9FUlJPUjsKKyAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICBkZXZpY2VzLnB1c2hfYmFjayhuYW1lKTsKKyAgICAgICAgICAgICAgICAgICAgbVByb3ZpZGVyUHVibGljQ2FtZXJhSWRzLnB1c2hfYmFjayhpZCk7CisgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQogICAgICAgICB9IH0pOwogICAgIGlmICghcmV0LmlzT2soKSkgewpAQCAtNzAzLDYgKzg2NiwyNCBAQAogICAgICAgICAgICAgaW5mbzIuZHVtcChmZCwgLyp2ZXJib3NpdHkqLyAyLCAvKmluZGVudGF0aW9uKi8gNCk7CiAgICAgICAgIH0KIAorICAgICAgICAvLyBEdW1wIGNoYXJhY3RlcmlzdGljcyBvZiBub24tc3RhbmRhbG9uZSBwaHlzaWNhbCBjYW1lcmEKKyAgICAgICAgaWYgKGRldmljZS0+bUlzTG9naWNhbENhbWVyYSkgeworICAgICAgICAgICAgZm9yIChhdXRvJiBpZCA6IGRldmljZS0+bVBoeXNpY2FsSWRzKSB7CisgICAgICAgICAgICAgICAgLy8gU2tpcCBpZiBwaHlzaWNhbCBpZCBpcyBhbiBpbmRlcGVuZGVudCBjYW1lcmEKKyAgICAgICAgICAgICAgICBpZiAoc3RkOjpmaW5kKG1Qcm92aWRlclB1YmxpY0NhbWVyYUlkcy5iZWdpbigpLCBtUHJvdmlkZXJQdWJsaWNDYW1lcmFJZHMuZW5kKCksIGlkKQorICAgICAgICAgICAgICAgICAgICAgICAgIT0gbVByb3ZpZGVyUHVibGljQ2FtZXJhSWRzLmVuZCgpKSB7CisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIENhbWVyYU1ldGFkYXRhIHBoeXNpY2FsSW5mbzsKKyAgICAgICAgICAgICAgICBzdGF0dXNfdCBzdGF0dXMgPSBkZXZpY2UtPmdldFBoeXNpY2FsQ2FtZXJhQ2hhcmFjdGVyaXN0aWNzKGlkLCAmcGh5c2ljYWxJbmZvKTsKKyAgICAgICAgICAgICAgICBpZiAoc3RhdHVzID09IE9LKSB7CisgICAgICAgICAgICAgICAgICAgIGRwcmludGYoZmQsICIgIFBoeXNpY2FsIGNhbWVyYSAlcyBjaGFyYWN0ZXJpc3RpY3M6XG4iLCBpZC5jX3N0cigpKTsKKyAgICAgICAgICAgICAgICAgICAgcGh5c2ljYWxJbmZvLmR1bXAoZmQsIC8qdmVyYm9zaXR5Ki8gMiwgLyppbmRlbnRhdGlvbiovIDQpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCiAgICAgICAgIGRwcmludGYoZmQsICI9PSBDYW1lcmEgSEFMIGRldmljZSAlcyAodiVkLiVkKSBkdW1wU3RhdGU6ID09XG4iLCBkZXZpY2UtPm1OYW1lLmNfc3RyKCksCiAgICAgICAgICAgICAgICAgZGV2aWNlLT5tVmVyc2lvbi5nZXRfbWFqb3IoKSwgZGV2aWNlLT5tVmVyc2lvbi5nZXRfbWlub3IoKSk7CiAgICAgICAgIHJlcyA9IGRldmljZS0+ZHVtcFN0YXRlKGZkKTsKQEAgLTgzNiw3ICsxMDE3LDcgQEAKIAogICAgIHJldHVybiBzdGQ6OnVuaXF1ZV9wdHI8RGV2aWNlSW5mbz4oCiAgICAgICAgIG5ldyBEZXZpY2VJbmZvVChuYW1lLCB0YWdJZCwgaWQsIG1pbm9yVmVyc2lvbiwgcmVzb3VyY2VDb3N0LAotICAgICAgICAgICAgICAgIGNhbWVyYUludGVyZmFjZSkpOworICAgICAgICAgICAgICAgIG1Qcm92aWRlclB1YmxpY0NhbWVyYUlkcywgY2FtZXJhSW50ZXJmYWNlKSk7CiB9CiAKIHRlbXBsYXRlPGNsYXNzIEludGVyZmFjZVQ+CkBAIC05MTAsOSArMTA5MSwxMCBAQAogICAgICAgICBjb25zdCBtZXRhZGF0YV92ZW5kb3JfaWRfdCB0YWdJZCwgY29uc3Qgc3RkOjpzdHJpbmcgJmlkLAogICAgICAgICB1aW50MTZfdCBtaW5vclZlcnNpb24sCiAgICAgICAgIGNvbnN0IENhbWVyYVJlc291cmNlQ29zdCYgcmVzb3VyY2VDb3N0LAorICAgICAgICBjb25zdCBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4mIHB1YmxpY0NhbWVyYUlkcywKICAgICAgICAgc3A8SW50ZXJmYWNlVD4gaW50ZXJmYWNlKSA6CiAgICAgICAgIERldmljZUluZm8obmFtZSwgdGFnSWQsIGlkLCBoYXJkd2FyZTo6aGlkbF92ZXJzaW9uezEsIG1pbm9yVmVyc2lvbn0sCi0gICAgICAgICAgICAgICAgICAgcmVzb3VyY2VDb3N0KSwKKyAgICAgICAgICAgICAgICAgICBwdWJsaWNDYW1lcmFJZHMsIHJlc291cmNlQ29zdCksCiAgICAgICAgIG1JbnRlcmZhY2UoaW50ZXJmYWNlKSB7CiAgICAgLy8gR2V0IGRlZmF1bHQgcGFyYW1ldGVycyBhbmQgaW5pdGlhbGl6ZSBmbGFzaCB1bml0IGF2YWlsYWJpbGl0eQogICAgIC8vIFJlcXVpcmVzIHBvd2VyaW5nIG9uIHRoZSBjYW1lcmEgZGV2aWNlCkBAIC0xMDA5LDkgKzExOTEsMTAgQEAKICAgICAgICAgY29uc3QgbWV0YWRhdGFfdmVuZG9yX2lkX3QgdGFnSWQsIGNvbnN0IHN0ZDo6c3RyaW5nICZpZCwKICAgICAgICAgdWludDE2X3QgbWlub3JWZXJzaW9uLAogICAgICAgICBjb25zdCBDYW1lcmFSZXNvdXJjZUNvc3QmIHJlc291cmNlQ29zdCwKKyAgICAgICAgY29uc3Qgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+JiBwdWJsaWNDYW1lcmFJZHMsCiAgICAgICAgIHNwPEludGVyZmFjZVQ+IGludGVyZmFjZSkgOgogICAgICAgICBEZXZpY2VJbmZvKG5hbWUsIHRhZ0lkLCBpZCwgaGFyZHdhcmU6OmhpZGxfdmVyc2lvbnszLCBtaW5vclZlcnNpb259LAotICAgICAgICAgICAgICAgICAgIHJlc291cmNlQ29zdCksCisgICAgICAgICAgICAgICAgICAgcHVibGljQ2FtZXJhSWRzLCByZXNvdXJjZUNvc3QpLAogICAgICAgICBtSW50ZXJmYWNlKGludGVyZmFjZSkgewogICAgIC8vIEdldCBjYW1lcmEgY2hhcmFjdGVyaXN0aWNzIGFuZCBpbml0aWFsaXplIGZsYXNoIHVuaXQgYXZhaWxhYmlsaXR5CiAgICAgU3RhdHVzIHN0YXR1czsKQEAgLTEwNDQsNiArMTIyNywxMiBAQAogICAgICAgICAgICAgICAgIF9fRlVOQ1RJT05fXywgbUlkLmNfc3RyKCksIENhbWVyYVByb3ZpZGVyTWFuYWdlcjo6c3RhdHVzVG9TdHJpbmcoc3RhdHVzKSwgc3RhdHVzKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KKyAgICBzdGF0dXNfdCByZXMgPSBmaXh1cE1vbm9jaHJvbWVUYWdzKCk7CisgICAgaWYgKE9LICE9IHJlcykgeworICAgICAgICBBTE9HRSgiJXM6IFVuYWJsZSB0byBmaXggdXAgbW9ub2Nocm9tZSB0YWdzIGJhc2VkIGZvciBvbGRlciBIQUwgdmVyc2lvbjogJXMgKCVkKSIsCisgICAgICAgICAgICAgICAgX19GVU5DVElPTl9fLCBzdHJlcnJvcigtcmVzKSwgcmVzKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KICAgICBjYW1lcmFfbWV0YWRhdGFfZW50cnkgZmxhc2hBdmFpbGFibGUgPQogICAgICAgICAgICAgbUNhbWVyYUNoYXJhY3RlcmlzdGljcy5maW5kKEFORFJPSURfRkxBU0hfSU5GT19BVkFJTEFCTEUpOwogICAgIGlmIChmbGFzaEF2YWlsYWJsZS5jb3VudCA9PSAxICYmCkBAIC0xMDUyLDYgKzEyNDEsNTkgQEAKICAgICB9IGVsc2UgewogICAgICAgICBtSGFzRmxhc2hVbml0ID0gZmFsc2U7CiAgICAgfQorCisgICAgcXVlcnlQaHlzaWNhbENhbWVyYUlkcygpOworICAgIC8vIEdldCBwaHlzaWNhbCBjYW1lcmEgY2hhcmFjdGVyaXN0aWNzIGlmIGFwcGxpY2FibGUKKyAgICBhdXRvIGNhc3RSZXN1bHQgPSBkZXZpY2U6OlYzXzU6OklDYW1lcmFEZXZpY2U6OmNhc3RGcm9tKG1JbnRlcmZhY2UpOworICAgIGlmICghY2FzdFJlc3VsdC5pc09rKCkpIHsKKyAgICAgICAgQUxPR1YoIiVzOiBVbmFibGUgdG8gY29udmVydCBJQ2FtZXJhRGV2aWNlIGluc3RhbmNlIHRvIHZlcnNpb24gMy41IiwgX19GVU5DVElPTl9fKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBzcDxoYXJkd2FyZTo6Y2FtZXJhOjpkZXZpY2U6OlYzXzU6OklDYW1lcmFEZXZpY2U+IGludGVyZmFjZV8zXzUgPSBjYXN0UmVzdWx0OworICAgIGlmIChpbnRlcmZhY2VfM181ID09IG51bGxwdHIpIHsKKyAgICAgICAgQUxPR0UoIiVzOiBDb252ZXJ0ZWQgSUNhbWVyYURldmljZSBpbnN0YW5jZSB0byBudWxscHRyIiwgX19GVU5DVElPTl9fKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmIChtSXNMb2dpY2FsQ2FtZXJhKSB7CisgICAgICAgIGZvciAoYXV0byYgaWQgOiBtUGh5c2ljYWxJZHMpIHsKKyAgICAgICAgICAgIGlmIChzdGQ6OmZpbmQobVB1YmxpY0NhbWVyYUlkcy5iZWdpbigpLCBtUHVibGljQ2FtZXJhSWRzLmVuZCgpLCBpZCkgIT0KKyAgICAgICAgICAgICAgICAgICAgbVB1YmxpY0NhbWVyYUlkcy5lbmQoKSkgeworICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBoYXJkd2FyZTo6aGlkbF9zdHJpbmcgaGlkbElkKGlkKTsKKyAgICAgICAgICAgIHJldCA9IGludGVyZmFjZV8zXzUtPmdldFBoeXNpY2FsQ2FtZXJhQ2hhcmFjdGVyaXN0aWNzKGhpZGxJZCwKKyAgICAgICAgICAgICAgICAgICAgWyZzdGF0dXMsICZpZCwgdGhpc10oU3RhdHVzIHMsIGRldmljZTo6VjNfMjo6Q2FtZXJhTWV0YWRhdGEgbWV0YWRhdGEpIHsKKyAgICAgICAgICAgICAgICBzdGF0dXMgPSBzOworICAgICAgICAgICAgICAgIGlmIChzID09IFN0YXR1czo6T0spIHsKKyAgICAgICAgICAgICAgICAgICAgY2FtZXJhX21ldGFkYXRhX3QgKmJ1ZmZlciA9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVpbnRlcnByZXRfY2FzdDxjYW1lcmFfbWV0YWRhdGFfdCo+KG1ldGFkYXRhLmRhdGEoKSk7CisgICAgICAgICAgICAgICAgICAgIHNpemVfdCBleHBlY3RlZFNpemUgPSBtZXRhZGF0YS5zaXplKCk7CisgICAgICAgICAgICAgICAgICAgIGludCByZXMgPSB2YWxpZGF0ZV9jYW1lcmFfbWV0YWRhdGFfc3RydWN0dXJlKGJ1ZmZlciwgJmV4cGVjdGVkU2l6ZSk7CisgICAgICAgICAgICAgICAgICAgIGlmIChyZXMgPT0gT0sgfHwgcmVzID09IENBTUVSQV9NRVRBREFUQV9WQUxJREFUSU9OX1NISUZURUQpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHNldF9jYW1lcmFfbWV0YWRhdGFfdmVuZG9yX2lkKGJ1ZmZlciwgbVByb3ZpZGVyVGFnaWQpOworICAgICAgICAgICAgICAgICAgICAgICAgbVBoeXNpY2FsQ2FtZXJhQ2hhcmFjdGVyaXN0aWNzW2lkXSA9IGJ1ZmZlcjsKKyAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIEFMT0dFKCIlczogTWFsZm9ybWVkIGNhbWVyYSBtZXRhZGF0YSByZWNlaXZlZCBmcm9tIEhBTCIsIF9fRlVOQ1RJT05fXyk7CisgICAgICAgICAgICAgICAgICAgICAgICBzdGF0dXMgPSBTdGF0dXM6OklOVEVSTkFMX0VSUk9SOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfSk7CisKKyAgICAgICAgICAgIGlmICghcmV0LmlzT2soKSkgeworICAgICAgICAgICAgICAgIEFMT0dFKCIlczogVHJhbnNhY3Rpb24gZXJyb3IgZ2V0dGluZyBwaHlzaWNhbCBjYW1lcmEgJXMgY2hhcmFjdGVyaXN0aWNzIGZvciAlczogJXMiLAorICAgICAgICAgICAgICAgICAgICAgICAgX19GVU5DVElPTl9fLCBpZC5jX3N0cigpLCBtSWQuY19zdHIoKSwgcmV0LmRlc2NyaXB0aW9uKCkuY19zdHIoKSk7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKHN0YXR1cyAhPSBTdGF0dXM6Ok9LKSB7CisgICAgICAgICAgICAgICAgQUxPR0UoIiVzOiBVbmFibGUgdG8gZ2V0IHBoeXNpY2FsIGNhbWVyYSAlcyBjaGFyYWN0ZXJpc3RpY3MgZm9yIGRldmljZSAlczogJXMgKCVkKSIsCisgICAgICAgICAgICAgICAgICAgICAgICBfX0ZVTkNUSU9OX18sIGlkLmNfc3RyKCksIG1JZC5jX3N0cigpLAorICAgICAgICAgICAgICAgICAgICAgICAgQ2FtZXJhUHJvdmlkZXJNYW5hZ2VyOjpzdGF0dXNUb1N0cmluZyhzdGF0dXMpLCBzdGF0dXMpOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KIH0KIAogQ2FtZXJhUHJvdmlkZXJNYW5hZ2VyOjpQcm92aWRlckluZm86OkRldmljZUluZm8zOjp+RGV2aWNlSW5mbzMoKSB7fQpAQCAtMTEyNyw2ICsxMzY5LDE4IEBACiAgICAgcmV0dXJuIE9LOwogfQogCitzdGF0dXNfdCBDYW1lcmFQcm92aWRlck1hbmFnZXI6OlByb3ZpZGVySW5mbzo6RGV2aWNlSW5mbzM6OmdldFBoeXNpY2FsQ2FtZXJhQ2hhcmFjdGVyaXN0aWNzKAorICAgICAgICBjb25zdCBzdGQ6OnN0cmluZyYgcGh5c2ljYWxDYW1lcmFJZCwgQ2FtZXJhTWV0YWRhdGEgKmNoYXJhY3RlcmlzdGljcykgY29uc3QgeworICAgIGlmIChjaGFyYWN0ZXJpc3RpY3MgPT0gbnVsbHB0cikgcmV0dXJuIEJBRF9WQUxVRTsKKyAgICBpZiAobVBoeXNpY2FsQ2FtZXJhQ2hhcmFjdGVyaXN0aWNzLmZpbmQocGh5c2ljYWxDYW1lcmFJZCkgPT0KKyAgICAgICAgICAgIG1QaHlzaWNhbENhbWVyYUNoYXJhY3RlcmlzdGljcy5lbmQoKSkgeworICAgICAgICByZXR1cm4gTkFNRV9OT1RfRk9VTkQ7CisgICAgfQorCisgICAgKmNoYXJhY3RlcmlzdGljcyA9IG1QaHlzaWNhbENhbWVyYUNoYXJhY3RlcmlzdGljcy5hdChwaHlzaWNhbENhbWVyYUlkKTsKKyAgICByZXR1cm4gT0s7Cit9CisKIHN0YXR1c190IENhbWVyYVByb3ZpZGVyTWFuYWdlcjo6UHJvdmlkZXJJbmZvOjpwYXJzZVByb3ZpZGVyTmFtZShjb25zdCBzdGQ6OnN0cmluZyYgbmFtZSwKICAgICAgICAgc3RkOjpzdHJpbmcgKnR5cGUsIHVpbnQzMl90ICppZCkgewogICAgIC8vIEZvcm1hdCBtdXN0IGJlICI8dHlwZT4vPGlkPiIKQEAgLTE0NTgsMTAgKzE3MTIsMjAgQEAKIAogc3RhdHVzX3QgQ2FtZXJhUHJvdmlkZXJNYW5hZ2VyOjpnZXRDYW1lcmFDaGFyYWN0ZXJpc3RpY3NMb2NrZWQoY29uc3Qgc3RkOjpzdHJpbmcgJmlkLAogICAgICAgICBDYW1lcmFNZXRhZGF0YSogY2hhcmFjdGVyaXN0aWNzKSBjb25zdCB7Ci0gICAgYXV0byBkZXZpY2VJbmZvID0gZmluZERldmljZUluZm9Mb2NrZWQoaWQsIC8qbWluVmVyc2lvbiovIHszLDB9LCAvKm1heFZlcnNpb24qLyB7NCwwfSk7Ci0gICAgaWYgKGRldmljZUluZm8gPT0gbnVsbHB0cikgcmV0dXJuIE5BTUVfTk9UX0ZPVU5EOworICAgIGF1dG8gZGV2aWNlSW5mbyA9IGZpbmREZXZpY2VJbmZvTG9ja2VkKGlkLCAvKm1pblZlcnNpb24qLyB7MywwfSwgLyptYXhWZXJzaW9uKi8gezUsMH0pOworICAgIGlmIChkZXZpY2VJbmZvICE9IG51bGxwdHIpIHsKKyAgICAgICAgcmV0dXJuIGRldmljZUluZm8tPmdldENhbWVyYUNoYXJhY3RlcmlzdGljcyhjaGFyYWN0ZXJpc3RpY3MpOworICAgIH0KIAotICAgIHJldHVybiBkZXZpY2VJbmZvLT5nZXRDYW1lcmFDaGFyYWN0ZXJpc3RpY3MoY2hhcmFjdGVyaXN0aWNzKTsKKyAgICAvLyBGaW5kIGhpZGRlbiBwaHlzaWNhbCBjYW1lcmEgY2hhcmFjdGVyaXN0aWNzCisgICAgZm9yIChhdXRvJiBwcm92aWRlciA6IG1Qcm92aWRlcnMpIHsKKyAgICAgICAgZm9yIChhdXRvJiBkZXZpY2VJbmZvIDogcHJvdmlkZXItPm1EZXZpY2VzKSB7CisgICAgICAgICAgICBzdGF0dXNfdCByZXMgPSBkZXZpY2VJbmZvLT5nZXRQaHlzaWNhbENhbWVyYUNoYXJhY3RlcmlzdGljcyhpZCwgY2hhcmFjdGVyaXN0aWNzKTsKKyAgICAgICAgICAgIGlmIChyZXMgIT0gTkFNRV9OT1RfRk9VTkQpIHJldHVybiByZXM7CisgICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gTkFNRV9OT1RfRk9VTkQ7CiB9CiAKIHZvaWQgQ2FtZXJhUHJvdmlkZXJNYW5hZ2VyOjpmaWx0ZXJMb2dpY2FsQ2FtZXJhSWRzTG9ja2VkKApAQCAtMTQ3MCwyMCArMTczNCwxNCBAQAogICAgIHN0ZDo6dW5vcmRlcmVkX3NldDxzdGQ6OnN0cmluZz4gcmVtb3ZlZElkczsKIAogICAgIGZvciAoYXV0byYgZGV2aWNlSWQgOiBkZXZpY2VJZHMpIHsKLSAgICAgICAgQ2FtZXJhTWV0YWRhdGEgaW5mbzsKLSAgICAgICAgc3RhdHVzX3QgcmVzID0gZ2V0Q2FtZXJhQ2hhcmFjdGVyaXN0aWNzTG9ja2VkKGRldmljZUlkLCAmaW5mbyk7Ci0gICAgICAgIGlmIChyZXMgIT0gT0spIHsKLSAgICAgICAgICAgIEFMT0dFKCIlczogRmFpbGVkIHRvIGdldENhbWVyYUNoYXJhY3RlcmlzdGljcyBmb3IgaWQgJXMiLCBfX0ZVTkNUSU9OX18sCi0gICAgICAgICAgICAgICAgICAgIGRldmljZUlkLmNfc3RyKCkpOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9CisgICAgICAgIGF1dG8gZGV2aWNlSW5mbyA9IGZpbmREZXZpY2VJbmZvTG9ja2VkKGRldmljZUlkKTsKKyAgICAgICAgaWYgKGRldmljZUluZm8gPT0gbnVsbHB0cikgY29udGludWU7CiAKLSAgICAgICAgLy8gaWRDb21ibyBjb250YWlucyB0aGUgaWRzIG9mIGEgbG9naWNhbCBjYW1lcmEgYW5kIGl0cyBwaHlzaWNhbCBjYW1lcmFzCi0gICAgICAgIHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiBpZENvbWJvOwotICAgICAgICBib29sIGxvZ2ljYWxDYW1lcmEgPSBDYW1lcmFQcm92aWRlck1hbmFnZXI6OmlzTG9naWNhbENhbWVyYShpbmZvLCAmaWRDb21ibyk7Ci0gICAgICAgIGlmICghbG9naWNhbENhbWVyYSkgeworICAgICAgICBpZiAoIWRldmljZUluZm8tPm1Jc0xvZ2ljYWxDYW1lcmEpIHsKICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICB9CisgICAgICAgIC8vIGlkQ29tYm8gY29udGFpbnMgdGhlIGlkcyBvZiBhIGxvZ2ljYWwgY2FtZXJhIGFuZCBpdHMgcGh5c2ljYWwgY2FtZXJhcworICAgICAgICBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4gaWRDb21ibyA9IGRldmljZUluZm8tPm1QaHlzaWNhbElkczsKICAgICAgICAgaWRDb21iby5wdXNoX2JhY2soZGV2aWNlSWQpOwogCiAgICAgICAgIGZvciAoYXV0byYgaWQgOiBkZXZpY2VJZHMpIHsKZGlmZiAtLWdpdCBhL3NlcnZpY2VzL2NhbWVyYS9saWJjYW1lcmFzZXJ2aWNlL2NvbW1vbi9DYW1lcmFQcm92aWRlck1hbmFnZXIuaCBiL3NlcnZpY2VzL2NhbWVyYS9saWJjYW1lcmFzZXJ2aWNlL2NvbW1vbi9DYW1lcmFQcm92aWRlck1hbmFnZXIuaAppbmRleCBiOGI4YjhjLi5jNTA2ZDM1IDEwMDY0NAotLS0gYS9zZXJ2aWNlcy9jYW1lcmEvbGliY2FtZXJhc2VydmljZS9jb21tb24vQ2FtZXJhUHJvdmlkZXJNYW5hZ2VyLmgKKysrIGIvc2VydmljZXMvY2FtZXJhL2xpYmNhbWVyYXNlcnZpY2UvY29tbW9uL0NhbWVyYVByb3ZpZGVyTWFuYWdlci5oCkBAIC0yMzEsMTIgKzIzMSwxMiBAQAogICAgICAgICAgICAgaGFyZHdhcmU6OmhpZGxfdmVyc2lvbiBtYXhWZXJzaW9uID0gaGFyZHdhcmU6OmhpZGxfdmVyc2lvbnsxMDAwLDB9KSBjb25zdDsKIAogICAgIC8qCi0gICAgICogQ2hlY2sgaWYgYSBjYW1lcmEgd2l0aCBzdGF0aWNJbmZvIGlzIGEgbG9naWNhbCBjYW1lcmEuIEFuZCBpZiB5ZXMsIHJldHVybgorICAgICAqIENoZWNrIGlmIGEgY2FtZXJhIGlzIGEgbG9naWNhbCBjYW1lcmEuIEFuZCBpZiB5ZXMsIHJldHVybgogICAgICAqIHRoZSBwaHlzaWNhbCBjYW1lcmEgaWRzLgogICAgICAqLwotICAgIHN0YXRpYyBib29sIGlzTG9naWNhbENhbWVyYShjb25zdCBDYW1lcmFNZXRhZGF0YSYgc3RhdGljSW5mbywKLSAgICAgICAgICAgIHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiogcGh5c2ljYWxDYW1lcmFJZHMpOworICAgIGJvb2wgaXNMb2dpY2FsQ2FtZXJhKGNvbnN0IHN0ZDo6c3RyaW5nJiBpZCwgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+KiBwaHlzaWNhbENhbWVyYUlkcyk7CiAKKyAgICBib29sIGlzSGlkZGVuUGh5c2ljYWxDYW1lcmEoY29uc3Qgc3RkOjpzdHJpbmcmIGNhbWVyYUlkKTsKIHByaXZhdGU6CiAgICAgLy8gQWxsIHByaXZhdGUgbWVtYmVycywgdW5sZXNzIG90aGVyd2lzZSBub3RlZCwgZXhwZWN0IG1JbnRlcmZhY2VNdXRleCB0byBiZSBsb2NrZWQgYmVmb3JlIHVzZQogICAgIG11dGFibGUgc3RkOjptdXRleCBtSW50ZXJmYWNlTXV0ZXg7CkBAIC0yNDYsNiArMjQ2LDkgQEAKICAgICB3cDxTdGF0dXNMaXN0ZW5lcj4gbUxpc3RlbmVyOwogICAgIFNlcnZpY2VJbnRlcmFjdGlvblByb3h5KiBtU2VydmljZVByb3h5OwogCisgICAgLy8gbVByb3ZpZGVyTGlmZWN5Y2xlTG9jayBpcyBsb2NrZWQgZHVyaW5nIG9uUmVnaXN0cmF0aW9uIGFuZCByZW1vdmVQcm92aWRlcgorICAgIG11dGFibGUgc3RkOjptdXRleCBtUHJvdmlkZXJMaWZlY3ljbGVMb2NrOworCiAgICAgc3RhdGljIEhhcmR3YXJlU2VydmljZUludGVyYWN0aW9uUHJveHkgc0hhcmR3YXJlU2VydmljZUludGVyYWN0aW9uUHJveHk7CiAKICAgICBzdHJ1Y3QgUHJvdmlkZXJJbmZvIDoKQEAgLTI4OSw2ICsyOTIsOCBAQAogICAgICAgICAgICAgY29uc3Qgc3RkOjpzdHJpbmcgbUlkOyAgICAvLyBJRCBzZWN0aW9uIG9mIGZ1bGwgbmFtZQogICAgICAgICAgICAgY29uc3QgaGFyZHdhcmU6OmhpZGxfdmVyc2lvbiBtVmVyc2lvbjsKICAgICAgICAgICAgIGNvbnN0IG1ldGFkYXRhX3ZlbmRvcl9pZF90IG1Qcm92aWRlclRhZ2lkOworICAgICAgICAgICAgYm9vbCBtSXNMb2dpY2FsQ2FtZXJhOworICAgICAgICAgICAgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+IG1QaHlzaWNhbElkczsKIAogICAgICAgICAgICAgY29uc3QgaGFyZHdhcmU6OmNhbWVyYTo6Y29tbW9uOjpWMV8wOjpDYW1lcmFSZXNvdXJjZUNvc3QgbVJlc291cmNlQ29zdDsKIApAQCAtMzAzLDE3ICszMDgsMjUgQEAKICAgICAgICAgICAgICAgICAodm9pZCkgY2hhcmFjdGVyaXN0aWNzOwogICAgICAgICAgICAgICAgIHJldHVybiBJTlZBTElEX09QRVJBVElPTjsKICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHZpcnR1YWwgc3RhdHVzX3QgZ2V0UGh5c2ljYWxDYW1lcmFDaGFyYWN0ZXJpc3RpY3MoY29uc3Qgc3RkOjpzdHJpbmcmIHBoeXNpY2FsQ2FtZXJhSWQsCisgICAgICAgICAgICAgICAgICAgIENhbWVyYU1ldGFkYXRhICpjaGFyYWN0ZXJpc3RpY3MpIGNvbnN0IHsKKyAgICAgICAgICAgICAgICAodm9pZCkgcGh5c2ljYWxDYW1lcmFJZDsKKyAgICAgICAgICAgICAgICAodm9pZCkgY2hhcmFjdGVyaXN0aWNzOworICAgICAgICAgICAgICAgIHJldHVybiBJTlZBTElEX09QRVJBVElPTjsKKyAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgRGV2aWNlSW5mbyhjb25zdCBzdGQ6OnN0cmluZyYgbmFtZSwgY29uc3QgbWV0YWRhdGFfdmVuZG9yX2lkX3QgdGFnSWQsCiAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0ZDo6c3RyaW5nICZpZCwgY29uc3QgaGFyZHdhcmU6OmhpZGxfdmVyc2lvbiYgdmVyc2lvbiwKKyAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+JiBwdWJsaWNDYW1lcmFJZHMsCiAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGhhcmR3YXJlOjpjYW1lcmE6OmNvbW1vbjo6VjFfMDo6Q2FtZXJhUmVzb3VyY2VDb3N0JiByZXNvdXJjZUNvc3QpIDoKICAgICAgICAgICAgICAgICAgICAgbU5hbWUobmFtZSksIG1JZChpZCksIG1WZXJzaW9uKHZlcnNpb24pLCBtUHJvdmlkZXJUYWdpZCh0YWdJZCksCi0gICAgICAgICAgICAgICAgICAgIG1SZXNvdXJjZUNvc3QocmVzb3VyY2VDb3N0KSwKKyAgICAgICAgICAgICAgICAgICAgbUlzTG9naWNhbENhbWVyYShmYWxzZSksIG1SZXNvdXJjZUNvc3QocmVzb3VyY2VDb3N0KSwKICAgICAgICAgICAgICAgICAgICAgbVN0YXR1cyhoYXJkd2FyZTo6Y2FtZXJhOjpjb21tb246OlYxXzA6OkNhbWVyYURldmljZVN0YXR1czo6UFJFU0VOVCksCi0gICAgICAgICAgICAgICAgICAgIG1IYXNGbGFzaFVuaXQoZmFsc2UpIHt9CisgICAgICAgICAgICAgICAgICAgIG1IYXNGbGFzaFVuaXQoZmFsc2UpLCBtUHVibGljQ2FtZXJhSWRzKHB1YmxpY0NhbWVyYUlkcykge30KICAgICAgICAgICAgIHZpcnR1YWwgfkRldmljZUluZm8oKTsKICAgICAgICAgcHJvdGVjdGVkOgogICAgICAgICAgICAgYm9vbCBtSGFzRmxhc2hVbml0OworICAgICAgICAgICAgY29uc3Qgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+JiBtUHVibGljQ2FtZXJhSWRzOwogCiAgICAgICAgICAgICB0ZW1wbGF0ZTxjbGFzcyBJbnRlcmZhY2VUPgogICAgICAgICAgICAgc3RhdGljIHN0YXR1c190IHNldFRvcmNoTW9kZShJbnRlcmZhY2VUJiBpbnRlcmZhY2UsIGJvb2wgZW5hYmxlZCk7CkBAIC0zMjIsNiArMzM1LDEyIEBACiAgICAgICAgIHN0ZDo6dW5vcmRlcmVkX3NldDxzdGQ6OnN0cmluZz4gbVVuaXF1ZUNhbWVyYUlkczsKICAgICAgICAgaW50IG1VbmlxdWVEZXZpY2VDb3VudDsKICAgICAgICAgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+IG1VbmlxdWVBUEkxQ29tcGF0aWJsZUNhbWVyYUlkczsKKyAgICAgICAgLy8gVGhlIGluaXRpYWwgcHVibGljIGNhbWVyYSBJRHMgcHVibGlzaGVkIGJ5IHRoZSBjYW1lcmEgcHJvdmlkZXIuCisgICAgICAgIC8vIEN1cnJlbnRseSBsb2dpY2FsIG11bHRpLWNhbWVyYSBpcyBub3Qgc3VwcG9ydGVkIGZvciBob3QtcGx1ZyBjYW1lcmEuCisgICAgICAgIC8vIEFuZCB3ZSB1c2UgdGhpcyBsaXN0IHRvIGtlZXAgdHJhY2sgb2YgaW5pdGlhbCBwdWJsaWMgY2FtZXJhIElEcworICAgICAgICAvLyBhZHZlcnRpc2VkIGJ5IHRoZSBwcm92aWRlciwgYW5kIHRvIGRpc3Rpbmd1aXNoIGFnYWluc3QgImhpZGRlbiIKKyAgICAgICAgLy8gcGh5c2ljYWwgY2FtZXJhIElEcy4KKyAgICAgICAgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+IG1Qcm92aWRlclB1YmxpY0NhbWVyYUlkczsKIAogICAgICAgICAvLyBIQUx2MS1zcGVjaWZpYyBjYW1lcmEgZmllbGRzLCBpbmNsdWRpbmcgdGhlIGFjdHVhbCBkZXZpY2UgaW50ZXJmYWNlCiAgICAgICAgIHN0cnVjdCBEZXZpY2VJbmZvMSA6IHB1YmxpYyBEZXZpY2VJbmZvIHsKQEAgLTMzNiw2ICszNTUsNyBAQAogICAgICAgICAgICAgRGV2aWNlSW5mbzEoY29uc3Qgc3RkOjpzdHJpbmcmIG5hbWUsIGNvbnN0IG1ldGFkYXRhX3ZlbmRvcl9pZF90IHRhZ0lkLAogICAgICAgICAgICAgICAgICAgICBjb25zdCBzdGQ6OnN0cmluZyAmaWQsIHVpbnQxNl90IG1pbm9yVmVyc2lvbiwKICAgICAgICAgICAgICAgICAgICAgY29uc3QgaGFyZHdhcmU6OmNhbWVyYTo6Y29tbW9uOjpWMV8wOjpDYW1lcmFSZXNvdXJjZUNvc3QmIHJlc291cmNlQ29zdCwKKyAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+JiBwdWJsaWNDYW1lcmFJZHMsCiAgICAgICAgICAgICAgICAgICAgIHNwPEludGVyZmFjZVQ+IGludGVyZmFjZSk7CiAgICAgICAgICAgICB2aXJ0dWFsIH5EZXZpY2VJbmZvMSgpOwogICAgICAgICBwcml2YXRlOgpAQCAtMzUzLDE0ICszNzMsMjEgQEAKICAgICAgICAgICAgIHZpcnR1YWwgc3RhdHVzX3QgZHVtcFN0YXRlKGludCBmZCkgY29uc3Qgb3ZlcnJpZGU7CiAgICAgICAgICAgICB2aXJ0dWFsIHN0YXR1c190IGdldENhbWVyYUNoYXJhY3RlcmlzdGljcygKICAgICAgICAgICAgICAgICAgICAgQ2FtZXJhTWV0YWRhdGEgKmNoYXJhY3RlcmlzdGljcykgY29uc3Qgb3ZlcnJpZGU7CisgICAgICAgICAgICB2aXJ0dWFsIHN0YXR1c190IGdldFBoeXNpY2FsQ2FtZXJhQ2hhcmFjdGVyaXN0aWNzKGNvbnN0IHN0ZDo6c3RyaW5nJiBwaHlzaWNhbENhbWVyYUlkLAorICAgICAgICAgICAgICAgICAgICBDYW1lcmFNZXRhZGF0YSAqY2hhcmFjdGVyaXN0aWNzKSBjb25zdCBvdmVycmlkZTsKIAogICAgICAgICAgICAgRGV2aWNlSW5mbzMoY29uc3Qgc3RkOjpzdHJpbmcmIG5hbWUsIGNvbnN0IG1ldGFkYXRhX3ZlbmRvcl9pZF90IHRhZ0lkLAogICAgICAgICAgICAgICAgICAgICBjb25zdCBzdGQ6OnN0cmluZyAmaWQsIHVpbnQxNl90IG1pbm9yVmVyc2lvbiwKICAgICAgICAgICAgICAgICAgICAgY29uc3QgaGFyZHdhcmU6OmNhbWVyYTo6Y29tbW9uOjpWMV8wOjpDYW1lcmFSZXNvdXJjZUNvc3QmIHJlc291cmNlQ29zdCwKLSAgICAgICAgICAgICAgICAgICAgc3A8SW50ZXJmYWNlVD4gaW50ZXJmYWNlKTsKKyAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+JiBwdWJsaWNDYW1lcmFJZHMsIHNwPEludGVyZmFjZVQ+IGludGVyZmFjZSk7CiAgICAgICAgICAgICB2aXJ0dWFsIH5EZXZpY2VJbmZvMygpOwogICAgICAgICBwcml2YXRlOgogICAgICAgICAgICAgQ2FtZXJhTWV0YWRhdGEgbUNhbWVyYUNoYXJhY3RlcmlzdGljczsKKyAgICAgICAgICAgIHN0ZDo6dW5vcmRlcmVkX21hcDxzdGQ6OnN0cmluZywgQ2FtZXJhTWV0YWRhdGE+IG1QaHlzaWNhbENhbWVyYUNoYXJhY3RlcmlzdGljczsKKyAgICAgICAgICAgIHZvaWQgcXVlcnlQaHlzaWNhbENhbWVyYUlkcygpOworICAgICAgICAgICAgc3RhdHVzX3QgZml4dXBNb25vY2hyb21lVGFncygpOworICAgICAgICAgICAgc3RhdHVzX3QgcmVtb3ZlQXZhaWxhYmxlS2V5cyhDYW1lcmFNZXRhZGF0YSYgYywgY29uc3Qgc3RkOjp2ZWN0b3I8dWludDMyX3Q+JiBrZXlzLAorICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCBrZXlUYWcpOwogICAgICAgICB9OwogCiAgICAgcHJpdmF0ZToKZGlmZiAtLWdpdCBhL3NlcnZpY2VzL2NhbWVyYS9saWJjYW1lcmFzZXJ2aWNlL2RldmljZTMvQ2FtZXJhM0RldmljZS5jcHAgYi9zZXJ2aWNlcy9jYW1lcmEvbGliY2FtZXJhc2VydmljZS9kZXZpY2UzL0NhbWVyYTNEZXZpY2UuY3BwCmluZGV4IDgyNjcyZTUuLjg1NmFmMTMgMTAwNjQ0Ci0tLSBhL3NlcnZpY2VzL2NhbWVyYS9saWJjYW1lcmFzZXJ2aWNlL2RldmljZTMvQ2FtZXJhM0RldmljZS5jcHAKKysrIGIvc2VydmljZXMvY2FtZXJhL2xpYmNhbWVyYXNlcnZpY2UvZGV2aWNlMy9DYW1lcmEzRGV2aWNlLmNwcApAQCAtNTYsNiArNTYsNyBAQAogI2luY2x1ZGUgImRldmljZTMvQ2FtZXJhM0R1bW15U3RyZWFtLmgiCiAjaW5jbHVkZSAiZGV2aWNlMy9DYW1lcmEzU2hhcmVkT3V0cHV0U3RyZWFtLmgiCiAjaW5jbHVkZSAiQ2FtZXJhU2VydmljZS5oIgorI2luY2x1ZGUgInV0aWxzL0NhbWVyYVRocmVhZFN0YXRlLmgiCiAKIHVzaW5nIG5hbWVzcGFjZSBhbmRyb2lkOjpjYW1lcmEzOwogdXNpbmcgbmFtZXNwYWNlIGFuZHJvaWQ6OmhhcmR3YXJlOjpjYW1lcmE7CkBAIC03OCwxMSArNzksMTAgQEAKICAgICAgICAgbU5leHRSZXByb2Nlc3NTaHV0dGVyRnJhbWVOdW1iZXIoMCksCiAgICAgICAgIG1MaXN0ZW5lcihOVUxMKSwKICAgICAgICAgbVZlbmRvclRhZ0lkKENBTUVSQV9NRVRBREFUQV9JTlZBTElEX1ZFTkRPUl9JRCksCi0gICAgICAgIG1MYXN0VGVtcGxhdGVJZCgtMSkKKyAgICAgICAgbUxhc3RUZW1wbGF0ZUlkKC0xKSwKKyAgICAgICAgbU5lZWRGaXh1cE1vbm9jaHJvbWVUYWdzKGZhbHNlKQogewogICAgIEFUUkFDRV9DQUxMKCk7Ci0gICAgY2FtZXJhM19jYWxsYmFja19vcHM6Om5vdGlmeSA9ICZzTm90aWZ5OwotICAgIGNhbWVyYTNfY2FsbGJhY2tfb3BzOjpwcm9jZXNzX2NhcHR1cmVfcmVzdWx0ID0gJnNQcm9jZXNzQ2FwdHVyZVJlc3VsdDsKICAgICBBTE9HVigiJXM6IENyZWF0ZWQgZGV2aWNlIGZvciBjYW1lcmEgJXMiLCBfX0ZVTkNUSU9OX18sIG1JZC5zdHJpbmcoKSk7CiB9CiAKQEAgLTkwLDcgKzkwLDcgQEAKIHsKICAgICBBVFJBQ0VfQ0FMTCgpOwogICAgIEFMT0dWKCIlczogVGVhcmluZyBkb3duIGZvciBjYW1lcmEgaWQgJXMiLCBfX0ZVTkNUSU9OX18sIG1JZC5zdHJpbmcoKSk7Ci0gICAgZGlzY29ubmVjdCgpOworICAgIGRpc2Nvbm5lY3RJbXBsKCk7CiB9CiAKIGNvbnN0IFN0cmluZzgmIENhbWVyYTNEZXZpY2U6OmdldElkKCkgY29uc3QgewpAQCAtMTI3LDcgKzEyNyw3IEBACiAgICAgfQogCiAgICAgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+IHBoeXNpY2FsQ2FtZXJhSWRzOwotICAgIGJvb2wgaXNMb2dpY2FsID0gQ2FtZXJhUHJvdmlkZXJNYW5hZ2VyOjppc0xvZ2ljYWxDYW1lcmEobURldmljZUluZm8sICZwaHlzaWNhbENhbWVyYUlkcyk7CisgICAgYm9vbCBpc0xvZ2ljYWwgPSBtYW5hZ2VyLT5pc0xvZ2ljYWxDYW1lcmEobUlkLnN0cmluZygpLCAmcGh5c2ljYWxDYW1lcmFJZHMpOwogICAgIGlmIChpc0xvZ2ljYWwpIHsKICAgICAgICAgZm9yIChhdXRvJiBwaHlzaWNhbElkIDogcGh5c2ljYWxDYW1lcmFJZHMpIHsKICAgICAgICAgICAgIHJlcyA9IG1hbmFnZXItPmdldENhbWVyYUNoYXJhY3RlcmlzdGljcyhwaHlzaWNhbElkLCAmbVBoeXNpY2FsRGV2aWNlSW5mb01hcFtwaHlzaWNhbElkXSk7CkBAIC0xODEsNyArMTgxLDE0IEBACiAgICAgICAgICAgICB9KTsKICAgICB9CiAKLSAgICBtSW50ZXJmYWNlID0gbmV3IEhhbEludGVyZmFjZShzZXNzaW9uLCBxdWV1ZSk7CisgICAgY2FtZXJhX21ldGFkYXRhX2VudHJ5IGJ1Zk1nck1vZGUgPQorICAgICAgICAgICAgbURldmljZUluZm8uZmluZChBTkRST0lEX0lORk9fU1VQUE9SVEVEX0JVRkZFUl9NQU5BR0VNRU5UX1ZFUlNJT04pOworICAgIGlmIChidWZNZ3JNb2RlLmNvdW50ID4gMCkgeworICAgICAgICAgbVVzZUhhbEJ1Zk1hbmFnZXIgPSAoYnVmTWdyTW9kZS5kYXRhLnU4WzBdID09CisgICAgICAgICAgICBBTkRST0lEX0lORk9fU1VQUE9SVEVEX0JVRkZFUl9NQU5BR0VNRU5UX1ZFUlNJT05fSElETF9ERVZJQ0VfM181KTsKKyAgICB9CisKKyAgICBtSW50ZXJmYWNlID0gbmV3IEhhbEludGVyZmFjZShzZXNzaW9uLCBxdWV1ZSwgbVVzZUhhbEJ1Zk1hbmFnZXIpOwogICAgIHN0ZDo6c3RyaW5nIHByb3ZpZGVyVHlwZTsKICAgICBtVmVuZG9yVGFnSWQgPSBtYW5hZ2VyLT5nZXRQcm92aWRlclRhZ0lkTG9ja2VkKG1JZC5zdHJpbmcoKSk7CiAgICAgbVRhZ01vbml0b3IuaW5pdGlhbGl6ZShtVmVuZG9yVGFnSWQpOwpAQCAtMTg5LDYgKzE5NiwyOCBAQAogICAgICAgICBtVGFnTW9uaXRvci5wYXJzZVRhZ3NUb01vbml0b3IoU3RyaW5nOChtb25pdG9yVGFncykpOwogICAgIH0KIAorICAgIC8vIE1ldGFkYXRhIHRhZ3MgbmVlZHMgZml4dXAgZm9yIG1vbm9jaHJvbWUgY2FtZXJhIGRldmljZSB2ZXJzaW9uIGxlc3MKKyAgICAvLyB0aGFuIDMuNS4KKyAgICBoYXJkd2FyZTo6aGlkbF92ZXJzaW9uIG1heFZlcnNpb257MCwwfTsKKyAgICByZXMgPSBtYW5hZ2VyLT5nZXRIaWdoZXN0U3VwcG9ydGVkVmVyc2lvbihtSWQuc3RyaW5nKCksICZtYXhWZXJzaW9uKTsKKyAgICBpZiAocmVzICE9IE9LKSB7CisgICAgICAgIEFMT0dFKCIlczogRXJyb3IgaW4gZ2V0dGluZyBjYW1lcmEgZGV2aWNlIHZlcnNpb24gaWQ6ICVzICglZCkiLAorICAgICAgICAgICAgICAgIF9fRlVOQ1RJT05fXywgc3RyZXJyb3IoLXJlcyksIHJlcyk7CisgICAgICAgIHJldHVybiByZXM7CisgICAgfQorICAgIGludCBkZXZpY2VWZXJzaW9uID0gSEFSRFdBUkVfREVWSUNFX0FQSV9WRVJTSU9OKAorICAgICAgICAgICAgbWF4VmVyc2lvbi5nZXRfbWFqb3IoKSwgbWF4VmVyc2lvbi5nZXRfbWlub3IoKSk7CisKKyAgICBib29sIGlzTW9ub2Nocm9tZSA9IGZhbHNlOworICAgIGNhbWVyYV9tZXRhZGF0YV9lbnRyeV90IGVudHJ5ID0gbURldmljZUluZm8uZmluZChBTkRST0lEX1JFUVVFU1RfQVZBSUxBQkxFX0NBUEFCSUxJVElFUyk7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBlbnRyeS5jb3VudDsgaSsrKSB7CisgICAgICAgIHVpbnQ4X3QgY2FwYWJpbGl0eSA9IGVudHJ5LmRhdGEudThbaV07CisgICAgICAgIGlmIChjYXBhYmlsaXR5ID09IEFORFJPSURfUkVRVUVTVF9BVkFJTEFCTEVfQ0FQQUJJTElUSUVTX01PTk9DSFJPTUUpIHsKKyAgICAgICAgICAgIGlzTW9ub2Nocm9tZSA9IHRydWU7CisgICAgICAgIH0KKyAgICB9CisgICAgbU5lZWRGaXh1cE1vbm9jaHJvbWVUYWdzID0gKGlzTW9ub2Nocm9tZSAmJiBkZXZpY2VWZXJzaW9uIDwgQ0FNRVJBX0RFVklDRV9BUElfVkVSU0lPTl8zXzUpOworCiAgICAgcmV0dXJuIGluaXRpYWxpemVDb21tb25Mb2NrZWQoKTsKIH0KIApAQCAtMjA4LDYgKzIzNywxNyBAQAogICAgIC8qKiBSZWdpc3RlciBpbi1mbGlnaHQgbWFwIHRvIHRoZSBzdGF0dXMgdHJhY2tlciAqLwogICAgIG1JbkZsaWdodFN0YXR1c0lkID0gbVN0YXR1c1RyYWNrZXItPmFkZENvbXBvbmVudCgpOwogCisgICAgaWYgKG1Vc2VIYWxCdWZNYW5hZ2VyKSB7CisgICAgICAgIHJlcyA9IG1SZXF1ZXN0QnVmZmVyU00uaW5pdGlhbGl6ZShtU3RhdHVzVHJhY2tlcik7CisgICAgICAgIGlmIChyZXMgIT0gT0spIHsKKyAgICAgICAgICAgIFNFVF9FUlJfTCgiVW5hYmxlIHRvIHN0YXJ0IHJlcXVlc3QgYnVmZmVyIHN0YXRlIG1hY2hpbmU6ICVzICglZCkiLAorICAgICAgICAgICAgICAgICAgICBzdHJlcnJvcigtcmVzKSwgcmVzKTsKKyAgICAgICAgICAgIG1JbnRlcmZhY2UtPmNsb3NlKCk7CisgICAgICAgICAgICBtU3RhdHVzVHJhY2tlci5jbGVhcigpOworICAgICAgICAgICAgcmV0dXJuIHJlczsKKyAgICAgICAgfQorICAgIH0KKwogICAgIC8qKiBDcmVhdGUgYnVmZmVyIG1hbmFnZXIgKi8KICAgICBtQnVmZmVyTWFuYWdlciA9IG5ldyBDYW1lcmEzQnVmZmVyTWFuYWdlcigpOwogCkBAIC0yMTcsOCArMjU3LDEwIEBACiAgICAgaWYgKHNlc3Npb25LZXlzRW50cnkuY291bnQgPiAwKSB7CiAgICAgICAgIHNlc3Npb25QYXJhbUtleXMuaW5zZXJ0QXJyYXlBdChzZXNzaW9uS2V5c0VudHJ5LmRhdGEuaTMyLCAwLCBzZXNzaW9uS2V5c0VudHJ5LmNvdW50KTsKICAgICB9CisKICAgICAvKiogU3RhcnQgdXAgcmVxdWVzdCBxdWV1ZSB0aHJlYWQgKi8KLSAgICBtUmVxdWVzdFRocmVhZCA9IG5ldyBSZXF1ZXN0VGhyZWFkKHRoaXMsIG1TdGF0dXNUcmFja2VyLCBtSW50ZXJmYWNlLCBzZXNzaW9uUGFyYW1LZXlzKTsKKyAgICBtUmVxdWVzdFRocmVhZCA9IG5ldyBSZXF1ZXN0VGhyZWFkKAorICAgICAgICAgICAgdGhpcywgbVN0YXR1c1RyYWNrZXIsIG1JbnRlcmZhY2UsIHNlc3Npb25QYXJhbUtleXMsIG1Vc2VIYWxCdWZNYW5hZ2VyKTsKICAgICByZXMgPSBtUmVxdWVzdFRocmVhZC0+cnVuKFN0cmluZzg6OmZvcm1hdCgiQzNEZXYtJXMtUmVxUXVldWUiLCBtSWQuc3RyaW5nKCkpLnN0cmluZygpKTsKICAgICBpZiAocmVzICE9IE9LKSB7CiAgICAgICAgIFNFVF9FUlJfTCgiVW5hYmxlIHRvIHN0YXJ0IHJlcXVlc3QgcXVldWUgdGhyZWFkOiAlcyAoJWQpIiwKQEAgLTI3MCwxMSArMzEyLDE0IEBACiAgICAgICAgICAgICByZXR1cm4gcmVzOwogICAgICAgICB9CiAgICAgfQotCiAgICAgcmV0dXJuIE9LOwogfQogCiBzdGF0dXNfdCBDYW1lcmEzRGV2aWNlOjpkaXNjb25uZWN0KCkgeworICAgIHJldHVybiBkaXNjb25uZWN0SW1wbCgpOworfQorCitzdGF0dXNfdCBDYW1lcmEzRGV2aWNlOjpkaXNjb25uZWN0SW1wbCgpIHsKICAgICBBVFJBQ0VfQ0FMTCgpOwogICAgIE11dGV4OjpBdXRvbG9jayBpbChtSW50ZXJmYWNlTG9jayk7CiAKQEAgLTM0MSw2ICszODYsNyBAQAogICAgIHsKICAgICAgICAgTXV0ZXg6OkF1dG9sb2NrIGwobUxvY2spOwogICAgICAgICBtUmVxdWVzdFRocmVhZC5jbGVhcigpOworICAgICAgICBNdXRleDo6QXV0b2xvY2sgc3RMb2NrKG1UcmFja2VyTG9jayk7CiAgICAgICAgIG1TdGF0dXNUcmFja2VyLmNsZWFyKCk7CiAgICAgICAgIGludGVyZmFjZSA9IG1JbnRlcmZhY2UuZ2V0KCk7CiAgICAgfQpAQCAtOTEzLDYgKzk1OSwyMjEgQEAKICAgICByZXR1cm4gcmVzOwogfQogCitoYXJkd2FyZTo6UmV0dXJuPHZvaWQ+IENhbWVyYTNEZXZpY2U6OnJlcXVlc3RTdHJlYW1CdWZmZXJzKAorICAgICAgICBjb25zdCBoYXJkd2FyZTo6aGlkbF92ZWM8aGFyZHdhcmU6OmNhbWVyYTo6ZGV2aWNlOjpWM181OjpCdWZmZXJSZXF1ZXN0PiYgYnVmUmVxcywKKyAgICAgICAgcmVxdWVzdFN0cmVhbUJ1ZmZlcnNfY2IgX2hpZGxfY2IpIHsKKyAgICB1c2luZyBoYXJkd2FyZTo6Y2FtZXJhOjpkZXZpY2U6OlYzXzU6OkJ1ZmZlclJlcXVlc3RTdGF0dXM7CisgICAgdXNpbmcgaGFyZHdhcmU6OmNhbWVyYTo6ZGV2aWNlOjpWM181OjpTdHJlYW1CdWZmZXJSZXQ7CisgICAgdXNpbmcgaGFyZHdhcmU6OmNhbWVyYTo6ZGV2aWNlOjpWM181OjpTdHJlYW1CdWZmZXJSZXF1ZXN0RXJyb3I7CisKKyAgICBzdGQ6OmxvY2tfZ3VhcmQ8c3RkOjptdXRleD4gbG9jayhtUmVxdWVzdEJ1ZmZlckludGVyZmFjZUxvY2spOworCisgICAgaGFyZHdhcmU6OmhpZGxfdmVjPFN0cmVhbUJ1ZmZlclJldD4gYnVmUmV0czsKKyAgICBpZiAoIW1Vc2VIYWxCdWZNYW5hZ2VyKSB7CisgICAgICAgIEFMT0dFKCIlczogQ2FtZXJhICVzIGRvZXMgbm90IHN1cHBvcnQgSEFMIGJ1ZmZlciBtYW5hZ2VtZW50IiwKKyAgICAgICAgICAgICAgICBfX0ZVTkNUSU9OX18sIG1JZC5zdHJpbmcoKSk7CisgICAgICAgIF9oaWRsX2NiKEJ1ZmZlclJlcXVlc3RTdGF0dXM6OkZBSUxFRF9JTExFR0FMX0FSR1VNRU5UUywgYnVmUmV0cyk7CisgICAgICAgIHJldHVybiBoYXJkd2FyZTo6Vm9pZCgpOworICAgIH0KKworICAgIFNvcnRlZFZlY3RvcjxpbnQzMl90PiBzdHJlYW1JZHM7CisgICAgc3NpemVfdCBzeiA9IHN0cmVhbUlkcy5zZXRDYXBhY2l0eShidWZSZXFzLnNpemUoKSk7CisgICAgaWYgKHN6IDwgMCB8fCBzdGF0aWNfY2FzdDxzaXplX3Q+KHN6KSAhPSBidWZSZXFzLnNpemUoKSkgeworICAgICAgICBBTE9HRSgiJXM6IGZhaWxlZCB0byBhbGxvY2F0ZSBtZW1vcnkgZm9yICV6dSBidWZmZXIgcmVxdWVzdHMiLAorICAgICAgICAgICAgICAgIF9fRlVOQ1RJT05fXywgYnVmUmVxcy5zaXplKCkpOworICAgICAgICBfaGlkbF9jYihCdWZmZXJSZXF1ZXN0U3RhdHVzOjpGQUlMRURfSUxMRUdBTF9BUkdVTUVOVFMsIGJ1ZlJldHMpOworICAgICAgICByZXR1cm4gaGFyZHdhcmU6OlZvaWQoKTsKKyAgICB9CisKKyAgICBpZiAoYnVmUmVxcy5zaXplKCkgPiBtT3V0cHV0U3RyZWFtcy5zaXplKCkpIHsKKyAgICAgICAgQUxPR0UoIiVzOiB0b28gbWFueSBidWZmZXIgcmVxdWVzdHMgKCV6dSA+ICMgb2Ygb3V0cHV0IHN0cmVhbXMgJXp1KSIsCisgICAgICAgICAgICAgICAgX19GVU5DVElPTl9fLCBidWZSZXFzLnNpemUoKSwgbU91dHB1dFN0cmVhbXMuc2l6ZSgpKTsKKyAgICAgICAgX2hpZGxfY2IoQnVmZmVyUmVxdWVzdFN0YXR1czo6RkFJTEVEX0lMTEVHQUxfQVJHVU1FTlRTLCBidWZSZXRzKTsKKyAgICAgICAgcmV0dXJuIGhhcmR3YXJlOjpWb2lkKCk7CisgICAgfQorCisgICAgLy8gQ2hlY2sgZm9yIHJlcGVhdGVkIHN0cmVhbUlkCisgICAgZm9yIChjb25zdCBhdXRvJiBidWZSZXEgOiBidWZSZXFzKSB7CisgICAgICAgIGlmIChzdHJlYW1JZHMuaW5kZXhPZihidWZSZXEuc3RyZWFtSWQpICE9IE5BTUVfTk9UX0ZPVU5EKSB7CisgICAgICAgICAgICBBTE9HRSgiJXM6IFN0cmVhbSAlZCBhcHBlYXIgbXVsdGlwbGUgdGltZXMgaW4gYnVmZmVyIHJlcXVlc3RzIiwKKyAgICAgICAgICAgICAgICAgICAgX19GVU5DVElPTl9fLCBidWZSZXEuc3RyZWFtSWQpOworICAgICAgICAgICAgX2hpZGxfY2IoQnVmZmVyUmVxdWVzdFN0YXR1czo6RkFJTEVEX0lMTEVHQUxfQVJHVU1FTlRTLCBidWZSZXRzKTsKKyAgICAgICAgICAgIHJldHVybiBoYXJkd2FyZTo6Vm9pZCgpOworICAgICAgICB9CisgICAgICAgIHN0cmVhbUlkcy5hZGQoYnVmUmVxLnN0cmVhbUlkKTsKKyAgICB9CisKKyAgICBpZiAoIW1SZXF1ZXN0QnVmZmVyU00uc3RhcnRSZXF1ZXN0QnVmZmVyKCkpIHsKKyAgICAgICAgQUxPR0UoIiVzOiByZXF1ZXN0IGJ1ZmZlciBkaXNhbGxvd2VkIHdoaWxlIGNhbWVyYSBzZXJ2aWNlIGlzIGNvbmZpZ3VyaW5nIiwKKyAgICAgICAgICAgICAgICBfX0ZVTkNUSU9OX18pOworICAgICAgICBfaGlkbF9jYihCdWZmZXJSZXF1ZXN0U3RhdHVzOjpGQUlMRURfQ09ORklHVVJJTkcsIGJ1ZlJldHMpOworICAgICAgICByZXR1cm4gaGFyZHdhcmU6OlZvaWQoKTsKKyAgICB9CisKKyAgICBidWZSZXRzLnJlc2l6ZShidWZSZXFzLnNpemUoKSk7CisKKyAgICBib29sIGFsbFJlcXNTdWNjZWVkcyA9IHRydWU7CisgICAgYm9vbCBvbmVSZXFTdWNjZWVkcyA9IGZhbHNlOworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgYnVmUmVxcy5zaXplKCk7IGkrKykgeworICAgICAgICBjb25zdCBhdXRvJiBidWZSZXEgPSBidWZSZXFzW2ldOworICAgICAgICBhdXRvJiBidWZSZXQgPSBidWZSZXRzW2ldOworICAgICAgICBpbnQzMl90IHN0cmVhbUlkID0gYnVmUmVxLnN0cmVhbUlkOworICAgICAgICBzcDxDYW1lcmEzT3V0cHV0U3RyZWFtSW50ZXJmYWNlPiBvdXRwdXRTdHJlYW0gPSBtT3V0cHV0U3RyZWFtcy5nZXQoc3RyZWFtSWQpOworICAgICAgICBpZiAob3V0cHV0U3RyZWFtID09IG51bGxwdHIpIHsKKyAgICAgICAgICAgIEFMT0dFKCIlczogT3V0cHV0IHN0cmVhbSBpZCAlZCBub3QgZm91bmQhIiwgX19GVU5DVElPTl9fLCBzdHJlYW1JZCk7CisgICAgICAgICAgICBoYXJkd2FyZTo6aGlkbF92ZWM8U3RyZWFtQnVmZmVyUmV0PiBlbXB0eUJ1ZlJldHM7CisgICAgICAgICAgICBfaGlkbF9jYihCdWZmZXJSZXF1ZXN0U3RhdHVzOjpGQUlMRURfSUxMRUdBTF9BUkdVTUVOVFMsIGVtcHR5QnVmUmV0cyk7CisgICAgICAgICAgICBtUmVxdWVzdEJ1ZmZlclNNLmVuZFJlcXVlc3RCdWZmZXIoKTsKKyAgICAgICAgICAgIHJldHVybiBoYXJkd2FyZTo6Vm9pZCgpOworICAgICAgICB9CisKKyAgICAgICAgYnVmUmV0LnN0cmVhbUlkID0gc3RyZWFtSWQ7CisgICAgICAgIHVpbnQzMl90IG51bUJ1ZmZlcnNSZXF1ZXN0ZWQgPSBidWZSZXEubnVtQnVmZmVyc1JlcXVlc3RlZDsKKyAgICAgICAgc2l6ZV90IHRvdGFsSGFuZG91dCA9IG91dHB1dFN0cmVhbS0+Z2V0T3V0c3RhbmRpbmdCdWZmZXJzQ291bnQoKSArIG51bUJ1ZmZlcnNSZXF1ZXN0ZWQ7CisgICAgICAgIGlmICh0b3RhbEhhbmRvdXQgPiBvdXRwdXRTdHJlYW0tPmFzSGFsU3RyZWFtKCktPm1heF9idWZmZXJzKSB7CisgICAgICAgICAgICAvLyBOb3QgYWJsZSB0byBhbGxvY2F0ZSBlbm91Z2ggYnVmZmVyLiBFeGl0IGVhcmx5IGZvciB0aGlzIHN0cmVhbQorICAgICAgICAgICAgYnVmUmV0LnZhbC5lcnJvcihTdHJlYW1CdWZmZXJSZXF1ZXN0RXJyb3I6Ok1BWF9CVUZGRVJfRVhDRUVERUQpOworICAgICAgICAgICAgYWxsUmVxc1N1Y2NlZWRzID0gZmFsc2U7CisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQorCisgICAgICAgIGhhcmR3YXJlOjpoaWRsX3ZlYzxTdHJlYW1CdWZmZXI+IHRtcFJldEJ1ZmZlcnMobnVtQnVmZmVyc1JlcXVlc3RlZCk7CisgICAgICAgIGJvb2wgY3VycmVudFJlcVN1Y2NlZWRzID0gdHJ1ZTsKKyAgICAgICAgc3RkOjp2ZWN0b3I8Y2FtZXJhM19zdHJlYW1fYnVmZmVyX3Q+IHN0cmVhbUJ1ZmZlcnMobnVtQnVmZmVyc1JlcXVlc3RlZCk7CisgICAgICAgIHNpemVfdCBudW1BbGxvY2F0ZWRCdWZmZXJzID0gMDsKKyAgICAgICAgc2l6ZV90IG51bVB1c2hlZEluZmxpZ2h0QnVmZmVycyA9IDA7CisgICAgICAgIGZvciAoc2l6ZV90IGIgPSAwOyBiIDwgbnVtQnVmZmVyc1JlcXVlc3RlZDsgYisrKSB7CisgICAgICAgICAgICBjYW1lcmEzX3N0cmVhbV9idWZmZXJfdCYgc2IgPSBzdHJlYW1CdWZmZXJzW2JdOworICAgICAgICAgICAgLy8gU2luY2UgdGhpcyBtZXRob2QgY2FuIHJ1biBjb25jdXJyZW50bHkgd2l0aCByZXF1ZXN0IHRocmVhZAorICAgICAgICAgICAgLy8gV2UgbmVlZCB0byB1cGRhdGUgdGhlIHdhaXQgZHVyYXRpb24gZXZlcnl0aW1lIHdlIGNhbGwgZ2V0YnVmZmVyCisgICAgICAgICAgICBuc2Vjc190IHdhaXREdXJhdGlvbiA9IGtCYXNlR2V0QnVmZmVyV2FpdCArIGdldEV4cGVjdGVkSW5GbGlnaHREdXJhdGlvbigpOworICAgICAgICAgICAgc3RhdHVzX3QgcmVzID0gb3V0cHV0U3RyZWFtLT5nZXRCdWZmZXIoJnNiLCB3YWl0RHVyYXRpb24pOworICAgICAgICAgICAgaWYgKHJlcyAhPSBPSykgeworICAgICAgICAgICAgICAgIEFMT0dFKCIlczogQ2FuJ3QgZ2V0IG91dHB1dCBidWZmZXIgZm9yIHN0cmVhbSAlZDogJXMgKCVkKSIsCisgICAgICAgICAgICAgICAgICAgICAgICBfX0ZVTkNUSU9OX18sIHN0cmVhbUlkLCBzdHJlcnJvcigtcmVzKSwgcmVzKTsKKyAgICAgICAgICAgICAgICBpZiAocmVzID09IE5PX0lOSVQgfHwgcmVzID09IERFQURfT0JKRUNUKSB7CisgICAgICAgICAgICAgICAgICAgIGJ1ZlJldC52YWwuZXJyb3IoU3RyZWFtQnVmZmVyUmVxdWVzdEVycm9yOjpTVFJFQU1fRElTQ09OTkVDVEVEKTsKKyAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHJlcyA9PSBUSU1FRF9PVVQgfHwgcmVzID09IE5PX01FTU9SWSkgeworICAgICAgICAgICAgICAgICAgICBidWZSZXQudmFsLmVycm9yKFN0cmVhbUJ1ZmZlclJlcXVlc3RFcnJvcjo6Tk9fQlVGRkVSX0FWQUlMQUJMRSk7CisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgYnVmUmV0LnZhbC5lcnJvcihTdHJlYW1CdWZmZXJSZXF1ZXN0RXJyb3I6OlVOS05PV05fRVJST1IpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBjdXJyZW50UmVxU3VjY2VlZHMgPSBmYWxzZTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIG51bUFsbG9jYXRlZEJ1ZmZlcnMrKzsKKworICAgICAgICAgICAgYnVmZmVyX2hhbmRsZV90ICpidWZmZXIgPSBzYi5idWZmZXI7CisgICAgICAgICAgICBhdXRvIHBhaXIgPSBtSW50ZXJmYWNlLT5nZXRCdWZmZXJJZCgqYnVmZmVyLCBzdHJlYW1JZCk7CisgICAgICAgICAgICBib29sIGlzTmV3QnVmZmVyID0gcGFpci5maXJzdDsKKyAgICAgICAgICAgIHVpbnQ2NF90IGJ1ZmZlcklkID0gcGFpci5zZWNvbmQ7CisgICAgICAgICAgICBTdHJlYW1CdWZmZXImIGhCdWYgPSB0bXBSZXRCdWZmZXJzW2JdOworCisgICAgICAgICAgICBoQnVmLnN0cmVhbUlkID0gc3RyZWFtSWQ7CisgICAgICAgICAgICBoQnVmLmJ1ZmZlcklkID0gYnVmZmVySWQ7CisgICAgICAgICAgICBoQnVmLmJ1ZmZlciA9IChpc05ld0J1ZmZlcikgPyAqYnVmZmVyIDogbnVsbHB0cjsKKyAgICAgICAgICAgIGhCdWYuc3RhdHVzID0gQnVmZmVyU3RhdHVzOjpPSzsKKyAgICAgICAgICAgIGhCdWYucmVsZWFzZUZlbmNlID0gbnVsbHB0cjsKKworICAgICAgICAgICAgbmF0aXZlX2hhbmRsZV90ICphY3F1aXJlRmVuY2UgPSBudWxscHRyOworICAgICAgICAgICAgaWYgKHNiLmFjcXVpcmVfZmVuY2UgIT0gLTEpIHsKKyAgICAgICAgICAgICAgICBhY3F1aXJlRmVuY2UgPSBuYXRpdmVfaGFuZGxlX2NyZWF0ZSgxLDApOworICAgICAgICAgICAgICAgIGFjcXVpcmVGZW5jZS0+ZGF0YVswXSA9IHNiLmFjcXVpcmVfZmVuY2U7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBoQnVmLmFjcXVpcmVGZW5jZS5zZXRUbyhhY3F1aXJlRmVuY2UsIC8qc2hvdWxkT3duKi90cnVlKTsKKyAgICAgICAgICAgIGhCdWYucmVsZWFzZUZlbmNlID0gbnVsbHB0cjsKKworICAgICAgICAgICAgcmVzID0gbUludGVyZmFjZS0+cHVzaEluZmxpZ2h0UmVxdWVzdEJ1ZmZlcihidWZmZXJJZCwgYnVmZmVyKTsKKyAgICAgICAgICAgIGlmIChyZXMgIT0gT0spIHsKKyAgICAgICAgICAgICAgICBBTE9HRSgiJXM6IENhbid0IGdldCByZWdpc3RlciByZXF1ZXN0IGJ1ZmZlcnMgZm9yIHN0cmVhbSAlZDogJXMgKCVkKSIsCisgICAgICAgICAgICAgICAgICAgICAgICBfX0ZVTkNUSU9OX18sIHN0cmVhbUlkLCBzdHJlcnJvcigtcmVzKSwgcmVzKTsKKyAgICAgICAgICAgICAgICBidWZSZXQudmFsLmVycm9yKFN0cmVhbUJ1ZmZlclJlcXVlc3RFcnJvcjo6VU5LTk9XTl9FUlJPUik7CisgICAgICAgICAgICAgICAgY3VycmVudFJlcVN1Y2NlZWRzID0gZmFsc2U7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBudW1QdXNoZWRJbmZsaWdodEJ1ZmZlcnMrKzsKKyAgICAgICAgfQorICAgICAgICBpZiAoY3VycmVudFJlcVN1Y2NlZWRzKSB7CisgICAgICAgICAgICBidWZSZXQudmFsLmJ1ZmZlcnMoc3RkOjptb3ZlKHRtcFJldEJ1ZmZlcnMpKTsKKyAgICAgICAgICAgIG9uZVJlcVN1Y2NlZWRzID0gdHJ1ZTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGFsbFJlcXNTdWNjZWVkcyA9IGZhbHNlOworICAgICAgICAgICAgZm9yIChzaXplX3QgYiA9IDA7IGIgPCBudW1QdXNoZWRJbmZsaWdodEJ1ZmZlcnM7IGIrKykgeworICAgICAgICAgICAgICAgIFN0cmVhbUJ1ZmZlciYgaEJ1ZiA9IHRtcFJldEJ1ZmZlcnNbYl07CisgICAgICAgICAgICAgICAgYnVmZmVyX2hhbmRsZV90KiBidWZmZXI7CisgICAgICAgICAgICAgICAgc3RhdHVzX3QgcmVzID0gbUludGVyZmFjZS0+cG9wSW5mbGlnaHRSZXF1ZXN0QnVmZmVyKGhCdWYuYnVmZmVySWQsICZidWZmZXIpOworICAgICAgICAgICAgICAgIGlmIChyZXMgIT0gT0spIHsKKyAgICAgICAgICAgICAgICAgICAgU0VUX0VSUigiJXM6IHBvcEluZmxpZ2h0UmVxdWVzdEJ1ZmZlciBmYWlsZWQgZm9yIHN0cmVhbSAlZDogJXMgKCVkKSIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19GVU5DVElPTl9fLCBzdHJlYW1JZCwgc3RyZXJyb3IoLXJlcyksIHJlcyk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgZm9yIChzaXplX3QgYiA9IDA7IGIgPCBudW1BbGxvY2F0ZWRCdWZmZXJzOyBiKyspIHsKKyAgICAgICAgICAgICAgICBjYW1lcmEzX3N0cmVhbV9idWZmZXJfdCYgc2IgPSBzdHJlYW1CdWZmZXJzW2JdOworICAgICAgICAgICAgICAgIHNiLmFjcXVpcmVfZmVuY2UgPSAtMTsKKyAgICAgICAgICAgICAgICBzYi5zdGF0dXMgPSBDQU1FUkEzX0JVRkZFUl9TVEFUVVNfRVJST1I7CisgICAgICAgICAgICB9CisgICAgICAgICAgICByZXR1cm5PdXRwdXRCdWZmZXJzKHN0cmVhbUJ1ZmZlcnMuZGF0YSgpLCBudW1BbGxvY2F0ZWRCdWZmZXJzLCAwKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIF9oaWRsX2NiKGFsbFJlcXNTdWNjZWVkcyA/IEJ1ZmZlclJlcXVlc3RTdGF0dXM6Ok9LIDoKKyAgICAgICAgICAgIG9uZVJlcVN1Y2NlZWRzID8gQnVmZmVyUmVxdWVzdFN0YXR1czo6RkFJTEVEX1BBUlRJQUwgOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBCdWZmZXJSZXF1ZXN0U3RhdHVzOjpGQUlMRURfVU5LTk9XTiwKKyAgICAgICAgICAgIGJ1ZlJldHMpOworICAgIG1SZXF1ZXN0QnVmZmVyU00uZW5kUmVxdWVzdEJ1ZmZlcigpOworICAgIHJldHVybiBoYXJkd2FyZTo6Vm9pZCgpOworfQorCitoYXJkd2FyZTo6UmV0dXJuPHZvaWQ+IENhbWVyYTNEZXZpY2U6OnJldHVyblN0cmVhbUJ1ZmZlcnMoCisgICAgICAgIGNvbnN0IGhhcmR3YXJlOjpoaWRsX3ZlYzxoYXJkd2FyZTo6Y2FtZXJhOjpkZXZpY2U6OlYzXzI6OlN0cmVhbUJ1ZmZlcj4mIGJ1ZmZlcnMpIHsKKyAgICBpZiAoIW1Vc2VIYWxCdWZNYW5hZ2VyKSB7CisgICAgICAgIEFMT0dFKCIlczogQ2FtZXJhICVzIGRvZXMgbm90IHN1cHBvcnQgSEFMIGJ1ZmZlciBtYW5hZ2VybWVudCIsCisgICAgICAgICAgICAgICAgX19GVU5DVElPTl9fLCBtSWQuc3RyaW5nKCkpOworICAgICAgICByZXR1cm4gaGFyZHdhcmU6OlZvaWQoKTsKKyAgICB9CisKKyAgICBmb3IgKGNvbnN0IGF1dG8mIGJ1ZiA6IGJ1ZmZlcnMpIHsKKyAgICAgICAgaWYgKGJ1Zi5idWZmZXJJZCA9PSBIYWxJbnRlcmZhY2U6OkJVRkZFUl9JRF9OT19CVUZGRVIpIHsKKyAgICAgICAgICAgIEFMT0dFKCIlczogY2Fubm90IHJldHVybiBhIGJ1ZmZlciB3aXRob3V0IGJ1ZmZlcklkIiwgX19GVU5DVElPTl9fKTsKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB9CisKKyAgICAgICAgYnVmZmVyX2hhbmRsZV90KiBidWZmZXI7CisgICAgICAgIHN0YXR1c190IHJlcyA9IG1JbnRlcmZhY2UtPnBvcEluZmxpZ2h0UmVxdWVzdEJ1ZmZlcihidWYuYnVmZmVySWQsICZidWZmZXIpOworCisgICAgICAgIGlmIChyZXMgIT0gT0spIHsKKyAgICAgICAgICAgIEFMT0dFKCIlczogY2Fubm90IGZpbmQgaW4tZmxpZ2h0IGJ1ZmZlciAlIiBQUkl1NjQgIiBmb3Igc3RyZWFtICVkIiwKKyAgICAgICAgICAgICAgICAgICAgX19GVU5DVElPTl9fLCBidWYuYnVmZmVySWQsIGJ1Zi5zdHJlYW1JZCk7CisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQorCisgICAgICAgIGNhbWVyYTNfc3RyZWFtX2J1ZmZlcl90IHN0cmVhbUJ1ZmZlcjsKKyAgICAgICAgc3RyZWFtQnVmZmVyLmJ1ZmZlciA9IGJ1ZmZlcjsKKyAgICAgICAgc3RyZWFtQnVmZmVyLnN0YXR1cyA9IENBTUVSQTNfQlVGRkVSX1NUQVRVU19FUlJPUjsKKyAgICAgICAgc3RyZWFtQnVmZmVyLmFjcXVpcmVfZmVuY2UgPSAtMTsKKyAgICAgICAgc3RyZWFtQnVmZmVyLnJlbGVhc2VfZmVuY2UgPSAtMTsKKworICAgICAgICBpZiAoYnVmLnJlbGVhc2VGZW5jZSA9PSBudWxscHRyKSB7CisgICAgICAgICAgICBzdHJlYW1CdWZmZXIucmVsZWFzZV9mZW5jZSA9IC0xOworICAgICAgICB9IGVsc2UgaWYgKGJ1Zi5yZWxlYXNlRmVuY2UtPm51bUZkcyA9PSAxKSB7CisgICAgICAgICAgICBzdHJlYW1CdWZmZXIucmVsZWFzZV9mZW5jZSA9IGR1cChidWYucmVsZWFzZUZlbmNlLT5kYXRhWzBdKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIEFMT0dFKCIlczogSW52YWxpZCByZWxlYXNlIGZlbmNlLCBmZCBjb3VudCBpcyAlZCwgbm90IDEiLAorICAgICAgICAgICAgICAgICAgICBfX0ZVTkNUSU9OX18sIGJ1Zi5yZWxlYXNlRmVuY2UtPm51bUZkcyk7CisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQorCisgICAgICAgIHNwPENhbWVyYTNTdHJlYW1JbnRlcmZhY2U+IHN0cmVhbSA9IG1PdXRwdXRTdHJlYW1zLmdldChidWYuc3RyZWFtSWQpOworICAgICAgICBpZiAoc3RyZWFtID09IG51bGxwdHIpIHsKKyAgICAgICAgICAgIEFMT0dFKCIlczogT3V0cHV0IHN0cmVhbSBpZCAlZCBub3QgZm91bmQhIiwgX19GVU5DVElPTl9fLCBidWYuc3RyZWFtSWQpOworICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIH0KKyAgICAgICAgc3RyZWFtQnVmZmVyLnN0cmVhbSA9IHN0cmVhbS0+YXNIYWxTdHJlYW0oKTsKKyAgICAgICAgcmV0dXJuT3V0cHV0QnVmZmVycygmc3RyZWFtQnVmZmVyLCAvKnNpemUqLzEsIC8qdGltZXN0YW1wKi8gMCk7CisgICAgfQorICAgIHJldHVybiBoYXJkd2FyZTo6Vm9pZCgpOworfQorCiBoYXJkd2FyZTo6UmV0dXJuPHZvaWQ+IENhbWVyYTNEZXZpY2U6OnByb2Nlc3NDYXB0dXJlUmVzdWx0XzNfNCgKICAgICAgICAgY29uc3QgaGFyZHdhcmU6OmhpZGxfdmVjPAogICAgICAgICAgICAgICAgIGhhcmR3YXJlOjpjYW1lcmE6OmRldmljZTo6VjNfNDo6Q2FwdHVyZVJlc3VsdD4mIHJlc3VsdHMpIHsKQEAgLTEwNjEsMjcgKzEzMjIsNTEgQEAKICAgICAgICAgYXV0byYgYkRzdCA9IG91dHB1dEJ1ZmZlcnNbaV07CiAgICAgICAgIGNvbnN0IFN0cmVhbUJ1ZmZlciAmYlNyYyA9IHJlc3VsdC5vdXRwdXRCdWZmZXJzW2ldOwogCi0gICAgICAgIHNzaXplX3QgaWR4ID0gbU91dHB1dFN0cmVhbXMuaW5kZXhPZktleShiU3JjLnN0cmVhbUlkKTsKLSAgICAgICAgaWYgKGlkeCA9PSBOQU1FX05PVF9GT1VORCkgeworICAgICAgICBzcDxDYW1lcmEzU3RyZWFtSW50ZXJmYWNlPiBzdHJlYW0gPSBtT3V0cHV0U3RyZWFtcy5nZXQoYlNyYy5zdHJlYW1JZCk7CisgICAgICAgIGlmIChzdHJlYW0gPT0gbnVsbHB0cikgewogICAgICAgICAgICAgQUxPR0UoIiVzOiBGcmFtZSAlZDogQnVmZmVyICV6dTogSW52YWxpZCBvdXRwdXQgc3RyZWFtIGlkICVkIiwKICAgICAgICAgICAgICAgICAgICAgX19GVU5DVElPTl9fLCByZXN1bHQuZnJhbWVOdW1iZXIsIGksIGJTcmMuc3RyZWFtSWQpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9Ci0gICAgICAgIGJEc3Quc3RyZWFtID0gbU91dHB1dFN0cmVhbXMudmFsdWVBdChpZHgpLT5hc0hhbFN0cmVhbSgpOworICAgICAgICBiRHN0LnN0cmVhbSA9IHN0cmVhbS0+YXNIYWxTdHJlYW0oKTsKIAotICAgICAgICBidWZmZXJfaGFuZGxlX3QgKmJ1ZmZlcjsKLSAgICAgICAgcmVzID0gbUludGVyZmFjZS0+cG9wSW5mbGlnaHRCdWZmZXIocmVzdWx0LmZyYW1lTnVtYmVyLCBiU3JjLnN0cmVhbUlkLCAmYnVmZmVyKTsKKyAgICAgICAgYm9vbCBub0J1ZmZlclJldHVybmVkID0gZmFsc2U7CisgICAgICAgIGJ1ZmZlcl9oYW5kbGVfdCAqYnVmZmVyID0gbnVsbHB0cjsKKyAgICAgICAgaWYgKG1Vc2VIYWxCdWZNYW5hZ2VyKSB7CisgICAgICAgICAgICAvLyBUaGlzIGlzIHN1c3BpY2lvdXMgbW9zdCBvZiB0aGUgdGltZSBidXQgY2FuIGJlIGNvcnJlY3QgZHVyaW5nIGZsdXNoIHdoZXJlIEhBTAorICAgICAgICAgICAgLy8gaGFzIHRvIHJldHVybiBjYXB0dXJlIHJlc3VsdCBiZWZvcmUgYSBidWZmZXIgaXMgcmVxdWVzdGVkCisgICAgICAgICAgICBpZiAoYlNyYy5idWZmZXJJZCA9PSBIYWxJbnRlcmZhY2U6OkJVRkZFUl9JRF9OT19CVUZGRVIpIHsKKyAgICAgICAgICAgICAgICBpZiAoYlNyYy5zdGF0dXMgPT0gQnVmZmVyU3RhdHVzOjpPSykgeworICAgICAgICAgICAgICAgICAgICBBTE9HRSgiJXM6IEZyYW1lICVkOiBCdWZmZXIgJXp1OiBObyBidWZmZXJJZCBmb3Igc3RyZWFtICVkIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX0ZVTkNUSU9OX18sIHJlc3VsdC5mcmFtZU51bWJlciwgaSwgYlNyYy5zdHJlYW1JZCk7CisgICAgICAgICAgICAgICAgICAgIC8vIFN0aWxsIHByb2NlZWRzIHNvIG90aGVyIGJ1ZmZlcnMgY2FuIGJlIHJldHVybmVkCisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIG5vQnVmZmVyUmV0dXJuZWQgPSB0cnVlOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKG5vQnVmZmVyUmV0dXJuZWQpIHsKKyAgICAgICAgICAgICAgICByZXMgPSBPSzsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgcmVzID0gbUludGVyZmFjZS0+cG9wSW5mbGlnaHRSZXF1ZXN0QnVmZmVyKGJTcmMuYnVmZmVySWQsICZidWZmZXIpOworICAgICAgICAgICAgfQorICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgcmVzID0gbUludGVyZmFjZS0+cG9wSW5mbGlnaHRCdWZmZXIocmVzdWx0LmZyYW1lTnVtYmVyLCBiU3JjLnN0cmVhbUlkLCAmYnVmZmVyKTsKKyAgICAgICAgfQorCiAgICAgICAgIGlmIChyZXMgIT0gT0spIHsKICAgICAgICAgICAgIEFMT0dFKCIlczogRnJhbWUgJWQ6IEJ1ZmZlciAlenU6IE5vIGluLWZsaWdodCBidWZmZXIgZm9yIHN0cmVhbSAlZCIsCiAgICAgICAgICAgICAgICAgICAgIF9fRlVOQ1RJT05fXywgcmVzdWx0LmZyYW1lTnVtYmVyLCBpLCBiU3JjLnN0cmVhbUlkKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQorCiAgICAgICAgIGJEc3QuYnVmZmVyID0gYnVmZmVyOwogICAgICAgICBiRHN0LnN0YXR1cyA9IG1hcEhpZGxCdWZmZXJTdGF0dXMoYlNyYy5zdGF0dXMpOwogICAgICAgICBiRHN0LmFjcXVpcmVfZmVuY2UgPSAtMTsKICAgICAgICAgaWYgKGJTcmMucmVsZWFzZUZlbmNlID09IG51bGxwdHIpIHsKICAgICAgICAgICAgIGJEc3QucmVsZWFzZV9mZW5jZSA9IC0xOwogICAgICAgICB9IGVsc2UgaWYgKGJTcmMucmVsZWFzZUZlbmNlLT5udW1GZHMgPT0gMSkgeworICAgICAgICAgICAgaWYgKG5vQnVmZmVyUmV0dXJuZWQpIHsKKyAgICAgICAgICAgICAgICBBTE9HRSgiJXM6IGdvdCByZWxlYXNlRmVuY2Ugd2l0aG91dCBvdXRwdXQgYnVmZmVyISIsIF9fRlVOQ1RJT05fXyk7CisgICAgICAgICAgICB9CiAgICAgICAgICAgICBiRHN0LnJlbGVhc2VfZmVuY2UgPSBkdXAoYlNyYy5yZWxlYXNlRmVuY2UtPmRhdGFbMF0pOwogICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgQUxPR0UoIiVzOiBGcmFtZSAlZDogSW52YWxpZCByZWxlYXNlIGZlbmNlIGZvciBidWZmZXIgJXp1LCBmZCBjb3VudCBpcyAlZCwgbm90IDEiLApAQCAtMTE1NywxMyArMTQ0MiwxMyBAQAogICAgICAgICAgICAgbS50eXBlID0gQ0FNRVJBM19NU0dfRVJST1I7CiAgICAgICAgICAgICBtLm1lc3NhZ2UuZXJyb3IuZnJhbWVfbnVtYmVyID0gbXNnLm1zZy5lcnJvci5mcmFtZU51bWJlcjsKICAgICAgICAgICAgIGlmIChtc2cubXNnLmVycm9yLmVycm9yU3RyZWFtSWQgPj0gMCkgewotICAgICAgICAgICAgICAgIHNzaXplX3QgaWR4ID0gbU91dHB1dFN0cmVhbXMuaW5kZXhPZktleShtc2cubXNnLmVycm9yLmVycm9yU3RyZWFtSWQpOwotICAgICAgICAgICAgICAgIGlmIChpZHggPT0gTkFNRV9OT1RfRk9VTkQpIHsKLSAgICAgICAgICAgICAgICAgICAgQUxPR0UoIiVzOiBGcmFtZSAlZDogSW52YWxpZCBlcnJvciBzdHJlYW0gaWQgJWQiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fRlVOQ1RJT05fXywgbS5tZXNzYWdlLmVycm9yLmZyYW1lX251bWJlciwgbXNnLm1zZy5lcnJvci5lcnJvclN0cmVhbUlkKTsKKyAgICAgICAgICAgICAgICBzcDxDYW1lcmEzU3RyZWFtSW50ZXJmYWNlPiBzdHJlYW0gPSBtT3V0cHV0U3RyZWFtcy5nZXQobXNnLm1zZy5lcnJvci5lcnJvclN0cmVhbUlkKTsKKyAgICAgICAgICAgICAgICBpZiAoc3RyZWFtID09IG51bGxwdHIpIHsKKyAgICAgICAgICAgICAgICAgICAgQUxPR0UoIiVzOiBGcmFtZSAlZDogSW52YWxpZCBlcnJvciBzdHJlYW0gaWQgJWQiLCBfX0ZVTkNUSU9OX18sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbS5tZXNzYWdlLmVycm9yLmZyYW1lX251bWJlciwgbXNnLm1zZy5lcnJvci5lcnJvclN0cmVhbUlkKTsKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBtLm1lc3NhZ2UuZXJyb3IuZXJyb3Jfc3RyZWFtID0gbU91dHB1dFN0cmVhbXMudmFsdWVBdChpZHgpLT5hc0hhbFN0cmVhbSgpOworICAgICAgICAgICAgICAgIG0ubWVzc2FnZS5lcnJvci5lcnJvcl9zdHJlYW0gPSBzdHJlYW0tPmFzSGFsU3RyZWFtKCk7CiAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgIG0ubWVzc2FnZS5lcnJvci5lcnJvcl9zdHJlYW0gPSBudWxscHRyOwogICAgICAgICAgICAgfQpAQCAtMTM0NCw2ICsxNjI5LDU2IEBACiAgICAgcmV0dXJuIE9LOwogfQogCitzdGF0dXNfdCBDYW1lcmEzRGV2aWNlOjpTdHJlYW1TZXQ6OmFkZCgKKyAgICAgICAgaW50IHN0cmVhbUlkLCBzcDxjYW1lcmEzOjpDYW1lcmEzT3V0cHV0U3RyZWFtSW50ZXJmYWNlPiBzdHJlYW0pIHsKKyAgICBpZiAoc3RyZWFtID09IG51bGxwdHIpIHsKKyAgICAgICAgQUxPR0UoIiVzOiBjYW5ub3QgYWRkIG51bGwgc3RyZWFtIiwgX19GVU5DVElPTl9fKTsKKyAgICAgICAgcmV0dXJuIEJBRF9WQUxVRTsKKyAgICB9CisgICAgc3RkOjpsb2NrX2d1YXJkPHN0ZDo6bXV0ZXg+IGxvY2sobUxvY2spOworICAgIHJldHVybiBtRGF0YS5hZGQoc3RyZWFtSWQsIHN0cmVhbSk7Cit9CisKK3NzaXplX3QgQ2FtZXJhM0RldmljZTo6U3RyZWFtU2V0OjpyZW1vdmUoaW50IHN0cmVhbUlkKSB7CisgICAgc3RkOjpsb2NrX2d1YXJkPHN0ZDo6bXV0ZXg+IGxvY2sobUxvY2spOworICAgIHJldHVybiBtRGF0YS5yZW1vdmVJdGVtKHN0cmVhbUlkKTsKK30KKworc3A8Y2FtZXJhMzo6Q2FtZXJhM091dHB1dFN0cmVhbUludGVyZmFjZT4KK0NhbWVyYTNEZXZpY2U6OlN0cmVhbVNldDo6Z2V0KGludCBzdHJlYW1JZCkgeworICAgIHN0ZDo6bG9ja19ndWFyZDxzdGQ6Om11dGV4PiBsb2NrKG1Mb2NrKTsKKyAgICBzc2l6ZV90IGlkeCA9IG1EYXRhLmluZGV4T2ZLZXkoc3RyZWFtSWQpOworICAgIGlmIChpZHggPT0gTkFNRV9OT1RfRk9VTkQpIHsKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgfQorICAgIHJldHVybiBtRGF0YS5lZGl0VmFsdWVBdChpZHgpOworfQorCitzcDxjYW1lcmEzOjpDYW1lcmEzT3V0cHV0U3RyZWFtSW50ZXJmYWNlPgorQ2FtZXJhM0RldmljZTo6U3RyZWFtU2V0OjpvcGVyYXRvcltdIChzaXplX3QgaW5kZXgpIHsKKyAgICBzdGQ6OmxvY2tfZ3VhcmQ8c3RkOjptdXRleD4gbG9jayhtTG9jayk7CisgICAgcmV0dXJuIG1EYXRhLmVkaXRWYWx1ZUF0KGluZGV4KTsKK30KKworc2l6ZV90IENhbWVyYTNEZXZpY2U6OlN0cmVhbVNldDo6c2l6ZSgpIGNvbnN0IHsKKyAgICBzdGQ6OmxvY2tfZ3VhcmQ8c3RkOjptdXRleD4gbG9jayhtTG9jayk7CisgICAgcmV0dXJuIG1EYXRhLnNpemUoKTsKK30KKwordm9pZCBDYW1lcmEzRGV2aWNlOjpTdHJlYW1TZXQ6OmNsZWFyKCkgeworICAgIHN0ZDo6bG9ja19ndWFyZDxzdGQ6Om11dGV4PiBsb2NrKG1Mb2NrKTsKKyAgICByZXR1cm4gbURhdGEuY2xlYXIoKTsKK30KKworc3RkOjp2ZWN0b3I8aW50PiBDYW1lcmEzRGV2aWNlOjpTdHJlYW1TZXQ6OmdldFN0cmVhbUlkcygpIHsKKyAgICBzdGQ6OmxvY2tfZ3VhcmQ8c3RkOjptdXRleD4gbG9jayhtTG9jayk7CisgICAgc3RkOjp2ZWN0b3I8aW50PiBzdHJlYW1JZHMobURhdGEuc2l6ZSgpKTsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1EYXRhLnNpemUoKTsgaSsrKSB7CisgICAgICAgIHN0cmVhbUlkc1tpXSA9IG1EYXRhLmtleUF0KGkpOworICAgIH0KKyAgICByZXR1cm4gc3RyZWFtSWRzOworfQorCiBzdGF0dXNfdCBDYW1lcmEzRGV2aWNlOjpjcmVhdGVTdHJlYW0oc3A8U3VyZmFjZT4gY29uc3VtZXIsCiAgICAgICAgICAgICB1aW50MzJfdCB3aWR0aCwgdWludDMyX3QgaGVpZ2h0LCBpbnQgZm9ybWF0LAogICAgICAgICAgICAgYW5kcm9pZF9kYXRhc3BhY2UgZGF0YVNwYWNlLCBjYW1lcmEzX3N0cmVhbV9yb3RhdGlvbl90IHJvdGF0aW9uLCBpbnQgKmlkLApAQCAtMTQ1MCw3ICsxNzg1LDggQEAKICAgICB9IGVsc2UgaWYgKGlzU2hhcmVkKSB7CiAgICAgICAgIG5ld1N0cmVhbSA9IG5ldyBDYW1lcmEzU2hhcmVkT3V0cHV0U3RyZWFtKG1OZXh0U3RyZWFtSWQsIGNvbnN1bWVycywKICAgICAgICAgICAgICAgICB3aWR0aCwgaGVpZ2h0LCBmb3JtYXQsIGNvbnN1bWVyVXNhZ2UsIGRhdGFTcGFjZSwgcm90YXRpb24sCi0gICAgICAgICAgICAgICAgbVRpbWVzdGFtcE9mZnNldCwgcGh5c2ljYWxDYW1lcmFJZCwgc3RyZWFtU2V0SWQpOworICAgICAgICAgICAgICAgIG1UaW1lc3RhbXBPZmZzZXQsIHBoeXNpY2FsQ2FtZXJhSWQsIHN0cmVhbVNldElkLAorICAgICAgICAgICAgICAgIG1Vc2VIYWxCdWZNYW5hZ2VyKTsKICAgICB9IGVsc2UgaWYgKGNvbnN1bWVycy5zaXplKCkgPT0gMCAmJiBoYXNEZWZlcnJlZENvbnN1bWVyKSB7CiAgICAgICAgIG5ld1N0cmVhbSA9IG5ldyBDYW1lcmEzT3V0cHV0U3RyZWFtKG1OZXh0U3RyZWFtSWQsCiAgICAgICAgICAgICAgICAgd2lkdGgsIGhlaWdodCwgZm9ybWF0LCBjb25zdW1lclVzYWdlLCBkYXRhU3BhY2UsIHJvdGF0aW9uLApAQCAtMTUyNywyMCArMTg2MywyMCBAQAogICAgICAgICAgICAgcmV0dXJuIElOVkFMSURfT1BFUkFUSU9OOwogICAgIH0KIAotICAgIHNzaXplX3QgaWR4ID0gbU91dHB1dFN0cmVhbXMuaW5kZXhPZktleShpZCk7Ci0gICAgaWYgKGlkeCA9PSBOQU1FX05PVF9GT1VORCkgeworICAgIHNwPENhbWVyYTNTdHJlYW1JbnRlcmZhY2U+IHN0cmVhbSA9IG1PdXRwdXRTdHJlYW1zLmdldChpZCk7CisgICAgaWYgKHN0cmVhbSA9PSBudWxscHRyKSB7CiAgICAgICAgIENMT0dFKCJTdHJlYW0gJWQgaXMgdW5rbm93biIsIGlkKTsKLSAgICAgICAgcmV0dXJuIGlkeDsKKyAgICAgICAgcmV0dXJuIEJBRF9WQUxVRTsKICAgICB9CiAKLSAgICBzdHJlYW1JbmZvLT53aWR0aCAgPSBtT3V0cHV0U3RyZWFtc1tpZHhdLT5nZXRXaWR0aCgpOwotICAgIHN0cmVhbUluZm8tPmhlaWdodCA9IG1PdXRwdXRTdHJlYW1zW2lkeF0tPmdldEhlaWdodCgpOwotICAgIHN0cmVhbUluZm8tPmZvcm1hdCA9IG1PdXRwdXRTdHJlYW1zW2lkeF0tPmdldEZvcm1hdCgpOwotICAgIHN0cmVhbUluZm8tPmRhdGFTcGFjZSA9IG1PdXRwdXRTdHJlYW1zW2lkeF0tPmdldERhdGFTcGFjZSgpOwotICAgIHN0cmVhbUluZm8tPmZvcm1hdE92ZXJyaWRkZW4gPSBtT3V0cHV0U3RyZWFtc1tpZHhdLT5pc0Zvcm1hdE92ZXJyaWRkZW4oKTsKLSAgICBzdHJlYW1JbmZvLT5vcmlnaW5hbEZvcm1hdCA9IG1PdXRwdXRTdHJlYW1zW2lkeF0tPmdldE9yaWdpbmFsRm9ybWF0KCk7Ci0gICAgc3RyZWFtSW5mby0+ZGF0YVNwYWNlT3ZlcnJpZGRlbiA9IG1PdXRwdXRTdHJlYW1zW2lkeF0tPmlzRGF0YVNwYWNlT3ZlcnJpZGRlbigpOwotICAgIHN0cmVhbUluZm8tPm9yaWdpbmFsRGF0YVNwYWNlID0gbU91dHB1dFN0cmVhbXNbaWR4XS0+Z2V0T3JpZ2luYWxEYXRhU3BhY2UoKTsKKyAgICBzdHJlYW1JbmZvLT53aWR0aCAgPSBzdHJlYW0tPmdldFdpZHRoKCk7CisgICAgc3RyZWFtSW5mby0+aGVpZ2h0ID0gc3RyZWFtLT5nZXRIZWlnaHQoKTsKKyAgICBzdHJlYW1JbmZvLT5mb3JtYXQgPSBzdHJlYW0tPmdldEZvcm1hdCgpOworICAgIHN0cmVhbUluZm8tPmRhdGFTcGFjZSA9IHN0cmVhbS0+Z2V0RGF0YVNwYWNlKCk7CisgICAgc3RyZWFtSW5mby0+Zm9ybWF0T3ZlcnJpZGRlbiA9IHN0cmVhbS0+aXNGb3JtYXRPdmVycmlkZGVuKCk7CisgICAgc3RyZWFtSW5mby0+b3JpZ2luYWxGb3JtYXQgPSBzdHJlYW0tPmdldE9yaWdpbmFsRm9ybWF0KCk7CisgICAgc3RyZWFtSW5mby0+ZGF0YVNwYWNlT3ZlcnJpZGRlbiA9IHN0cmVhbS0+aXNEYXRhU3BhY2VPdmVycmlkZGVuKCk7CisgICAgc3RyZWFtSW5mby0+b3JpZ2luYWxEYXRhU3BhY2UgPSBzdHJlYW0tPmdldE9yaWdpbmFsRGF0YVNwYWNlKCk7CiAgICAgcmV0dXJuIE9LOwogfQogCkBAIC0xNTY3LDE0ICsxOTAzLDEyIEBACiAgICAgICAgICAgICByZXR1cm4gSU5WQUxJRF9PUEVSQVRJT047CiAgICAgfQogCi0gICAgc3NpemVfdCBpZHggPSBtT3V0cHV0U3RyZWFtcy5pbmRleE9mS2V5KGlkKTsKLSAgICBpZiAoaWR4ID09IE5BTUVfTk9UX0ZPVU5EKSB7Ci0gICAgICAgIENMT0dFKCJTdHJlYW0gJWQgZG9lcyBub3QgZXhpc3QiLAotICAgICAgICAgICAgICAgIGlkKTsKKyAgICBzcDxDYW1lcmEzT3V0cHV0U3RyZWFtSW50ZXJmYWNlPiBzdHJlYW0gPSBtT3V0cHV0U3RyZWFtcy5nZXQoaWQpOworICAgIGlmIChzdHJlYW0gPT0gbnVsbHB0cikgeworICAgICAgICBDTE9HRSgiU3RyZWFtICVkIGRvZXMgbm90IGV4aXN0IiwgaWQpOwogICAgICAgICByZXR1cm4gQkFEX1ZBTFVFOwogICAgIH0KLQotICAgIHJldHVybiBtT3V0cHV0U3RyZWFtcy5lZGl0VmFsdWVBdChpZHgpLT5zZXRUcmFuc2Zvcm0odHJhbnNmb3JtKTsKKyAgICByZXR1cm4gc3RyZWFtLT5zZXRUcmFuc2Zvcm0odHJhbnNmb3JtKTsKIH0KIAogc3RhdHVzX3QgQ2FtZXJhM0RldmljZTo6ZGVsZXRlU3RyZWFtKGludCBpZCkgewpAQCAtMTU5OSwyMSArMTkzMywyMSBAQAogICAgIH0KIAogICAgIHNwPENhbWVyYTNTdHJlYW1JbnRlcmZhY2U+IGRlbGV0ZWRTdHJlYW07Ci0gICAgc3NpemVfdCBvdXRwdXRTdHJlYW1JZHggPSBtT3V0cHV0U3RyZWFtcy5pbmRleE9mS2V5KGlkKTsKKyAgICBzcDxDYW1lcmEzU3RyZWFtSW50ZXJmYWNlPiBzdHJlYW0gPSBtT3V0cHV0U3RyZWFtcy5nZXQoaWQpOwogICAgIGlmIChtSW5wdXRTdHJlYW0gIT0gTlVMTCAmJiBpZCA9PSBtSW5wdXRTdHJlYW0tPmdldElkKCkpIHsKICAgICAgICAgZGVsZXRlZFN0cmVhbSA9IG1JbnB1dFN0cmVhbTsKICAgICAgICAgbUlucHV0U3RyZWFtLmNsZWFyKCk7CiAgICAgfSBlbHNlIHsKLSAgICAgICAgaWYgKG91dHB1dFN0cmVhbUlkeCA9PSBOQU1FX05PVF9GT1VORCkgeworICAgICAgICBpZiAoc3RyZWFtID09IG51bGxwdHIpIHsKICAgICAgICAgICAgIENMT0dFKCJTdHJlYW0gJWQgZG9lcyBub3QgZXhpc3QiLCBpZCk7CiAgICAgICAgICAgICByZXR1cm4gQkFEX1ZBTFVFOwogICAgICAgICB9CiAgICAgfQogCiAgICAgLy8gRGVsZXRlIG91dHB1dCBzdHJlYW0gb3IgdGhlIG91dHB1dCBwYXJ0IG9mIGEgYmktZGlyZWN0aW9uYWwgc3RyZWFtLgotICAgIGlmIChvdXRwdXRTdHJlYW1JZHggIT0gTkFNRV9OT1RfRk9VTkQpIHsKLSAgICAgICAgZGVsZXRlZFN0cmVhbSA9IG1PdXRwdXRTdHJlYW1zLmVkaXRWYWx1ZUF0KG91dHB1dFN0cmVhbUlkeCk7Ci0gICAgICAgIG1PdXRwdXRTdHJlYW1zLnJlbW92ZUl0ZW0oaWQpOworICAgIGlmIChzdHJlYW0gIT0gbnVsbHB0cikgeworICAgICAgICBkZWxldGVkU3RyZWFtID0gc3RyZWFtOworICAgICAgICBtT3V0cHV0U3RyZWFtcy5yZW1vdmUoaWQpOwogICAgIH0KIAogICAgIC8vIEZyZWUgdXAgdGhlIHN0cmVhbSBlbmRwb2ludCBzbyB0aGF0IGl0IGNhbiBiZSB1c2VkIGJ5IHNvbWUgb3RoZXIgc3RyZWFtCkBAIC0xNjk2LDcgKzIwMzAsNyBAQAogCiAgICAgaWYgKHRlbXBsYXRlSWQgPD0gMCB8fCB0ZW1wbGF0ZUlkID49IENBTUVSQTNfVEVNUExBVEVfQ09VTlQpIHsKICAgICAgICAgYW5kcm9pZF9lcnJvcldyaXRlV2l0aEluZm9Mb2coQ2FtZXJhU2VydmljZTo6U05fRVZFTlRfTE9HX0lELCAiMjY4NjYxMTAiLAotICAgICAgICAgICAgICAgIElQQ1RocmVhZFN0YXRlOjpzZWxmKCktPmdldENhbGxpbmdVaWQoKSwgbnVsbHB0ciwgMCk7CisgICAgICAgICAgICAgICAgQ2FtZXJhVGhyZWFkU3RhdGU6OmdldENhbGxpbmdVaWQoKSwgbnVsbHB0ciwgMCk7CiAgICAgICAgIHJldHVybiBCQURfVkFMVUU7CiAgICAgfQogCkBAIC0xODUwLDYgKzIxODQsMTUgQEAKIAogICAgIG1TdGF0dXNXYWl0ZXJzKys7CiAKKyAgICAvLyBOb3RpZnkgSEFMIHRvIHN0YXJ0IGRyYWluaW5nLiBXZSBuZWVkIHRvIG5vdGlmeSB0aGUgSGFsSW50ZXJmYWNlIGxheWVyCisgICAgLy8gZXZlbiB3aGVuIHRoZSBkZXZpY2UgaXMgYWxyZWFkeSBJRExFLCBzbyBIYWxJbnRlcmZhY2UgY2FuIHJlamVjdCBpbmNvbWluZworICAgIC8vIHJlcXVlc3RTdHJlYW1CdWZmZXJzIGNhbGwuCisgICAgaWYgKCFhY3RpdmUgJiYgbVVzZUhhbEJ1Zk1hbmFnZXIpIHsKKyAgICAgICAgYXV0byBzdHJlYW1JZHMgPSBtT3V0cHV0U3RyZWFtcy5nZXRTdHJlYW1JZHMoKTsKKyAgICAgICAgbVJlcXVlc3RUaHJlYWQtPnNpZ25hbFBpcGVsaW5lRHJhaW4oc3RyZWFtSWRzKTsKKyAgICAgICAgbVJlcXVlc3RCdWZmZXJTTS5vbldhaXRVbnRpbElkbGUoKTsKKyAgICB9CisKICAgICBib29sIHN0YXRlU2VlbiA9IGZhbHNlOwogICAgIGRvIHsKICAgICAgICAgaWYgKGFjdGl2ZSA9PSAobVN0YXR1cyA9PSBTVEFUVVNfQUNUSVZFKSkgewpAQCAtMjAwOSw2ICsyMzUyLDEzIEBACiAKICAgICB7CiAgICAgICAgIE11dGV4OjpBdXRvbG9jayBsKG1Mb2NrKTsKKworICAgICAgICAvLyBiLzExNjUxNDEwNiAiZGlzY29ubmVjdCgpIiBjYW4gZ2V0IGNhbGxlZCB0d2ljZSBmb3IgdGhlIHNhbWUgZGV2aWNlLiBUaGUKKyAgICAgICAgLy8gY2FtZXJhIGRldmljZSB3aWxsIG5vdCBiZSBpbml0aWFsaXplZCBkdXJpbmcgdGhlIHNlY29uZCBydW4uCisgICAgICAgIGlmIChtU3RhdHVzID09IFNUQVRVU19VTklOSVRJQUxJWkVEKSB7CisgICAgICAgICAgICByZXR1cm4gT0s7CisgICAgICAgIH0KKwogICAgICAgICBtUmVxdWVzdFRocmVhZC0+Y2xlYXIoLypvdXQqL2ZyYW1lTnVtYmVyKTsKICAgICB9CiAKQEAgLTIwMjUsMTUgKzIzNzUsMTIgQEAKICAgICBNdXRleDo6QXV0b2xvY2sgaWwobUludGVyZmFjZUxvY2spOwogICAgIE11dGV4OjpBdXRvbG9jayBsKG1Mb2NrKTsKIAotICAgIHNwPENhbWVyYTNTdHJlYW1JbnRlcmZhY2U+IHN0cmVhbTsKLSAgICBzc2l6ZV90IG91dHB1dFN0cmVhbUlkeCA9IG1PdXRwdXRTdHJlYW1zLmluZGV4T2ZLZXkoc3RyZWFtSWQpOwotICAgIGlmIChvdXRwdXRTdHJlYW1JZHggPT0gTkFNRV9OT1RfRk9VTkQpIHsKKyAgICBzcDxDYW1lcmEzU3RyZWFtSW50ZXJmYWNlPiBzdHJlYW0gPSBtT3V0cHV0U3RyZWFtcy5nZXQoc3RyZWFtSWQpOworICAgIGlmIChzdHJlYW0gPT0gbnVsbHB0cikgewogICAgICAgICBDTE9HRSgiU3RyZWFtICVkIGRvZXMgbm90IGV4aXN0Iiwgc3RyZWFtSWQpOwogICAgICAgICByZXR1cm4gQkFEX1ZBTFVFOwogICAgIH0KIAotICAgIHN0cmVhbSA9IG1PdXRwdXRTdHJlYW1zLmVkaXRWYWx1ZUF0KG91dHB1dFN0cmVhbUlkeCk7Ci0KICAgICBpZiAoc3RyZWFtLT5pc1VucHJlcGFyYWJsZSgpIHx8IHN0cmVhbS0+aGFzT3V0c3RhbmRpbmdCdWZmZXJzKCkgKSB7CiAgICAgICAgIENMT0dFKCJTdHJlYW0gJWQgaGFzIGFscmVhZHkgYmVlbiBhIHJlcXVlc3QgdGFyZ2V0Iiwgc3RyZWFtSWQpOwogICAgICAgICByZXR1cm4gQkFEX1ZBTFVFOwpAQCAtMjA1MywxNSArMjQwMCwxMiBAQAogICAgIE11dGV4OjpBdXRvbG9jayBpbChtSW50ZXJmYWNlTG9jayk7CiAgICAgTXV0ZXg6OkF1dG9sb2NrIGwobUxvY2spOwogCi0gICAgc3A8Q2FtZXJhM1N0cmVhbUludGVyZmFjZT4gc3RyZWFtOwotICAgIHNzaXplX3Qgb3V0cHV0U3RyZWFtSWR4ID0gbU91dHB1dFN0cmVhbXMuaW5kZXhPZktleShzdHJlYW1JZCk7Ci0gICAgaWYgKG91dHB1dFN0cmVhbUlkeCA9PSBOQU1FX05PVF9GT1VORCkgeworICAgIHNwPENhbWVyYTNTdHJlYW1JbnRlcmZhY2U+IHN0cmVhbSA9IG1PdXRwdXRTdHJlYW1zLmdldChzdHJlYW1JZCk7CisgICAgaWYgKHN0cmVhbSA9PSBudWxscHRyKSB7CiAgICAgICAgIENMT0dFKCJTdHJlYW0gJWQgZG9lcyBub3QgZXhpc3QiLCBzdHJlYW1JZCk7CiAgICAgICAgIHJldHVybiBCQURfVkFMVUU7CiAgICAgfQogCi0gICAgc3RyZWFtID0gbU91dHB1dFN0cmVhbXMuZWRpdFZhbHVlQXQob3V0cHV0U3RyZWFtSWR4KTsKLQogICAgIGlmIChzdHJlYW0tPmhhc091dHN0YW5kaW5nQnVmZmVycygpIHx8IG1SZXF1ZXN0VGhyZWFkLT5pc1N0cmVhbVBlbmRpbmcoc3RyZWFtKSkgewogICAgICAgICBDTE9HRSgiU3RyZWFtICVkIGlzIGEgdGFyZ2V0IG9mIGEgaW4tcHJvZ3Jlc3MgcmVxdWVzdCIsIHN0cmVhbUlkKTsKICAgICAgICAgcmV0dXJuIEJBRF9WQUxVRTsKQEAgLTIwNzcsMTQgKzI0MjEsMTEgQEAKICAgICBNdXRleDo6QXV0b2xvY2sgaWwobUludGVyZmFjZUxvY2spOwogICAgIE11dGV4OjpBdXRvbG9jayBsKG1Mb2NrKTsKIAotICAgIHNwPENhbWVyYTNTdHJlYW1JbnRlcmZhY2U+IHN0cmVhbTsKLSAgICBzc2l6ZV90IG91dHB1dFN0cmVhbUlkeCA9IG1PdXRwdXRTdHJlYW1zLmluZGV4T2ZLZXkoc3RyZWFtSWQpOwotICAgIGlmIChvdXRwdXRTdHJlYW1JZHggPT0gTkFNRV9OT1RfRk9VTkQpIHsKKyAgICBzcDxDYW1lcmEzU3RyZWFtSW50ZXJmYWNlPiBzdHJlYW0gPSBtT3V0cHV0U3RyZWFtcy5nZXQoc3RyZWFtSWQpOworICAgIGlmIChzdHJlYW0gPT0gbnVsbHB0cikgewogICAgICAgICBDTE9HRSgiU3RyZWFtICVkIGRvZXMgbm90IGV4aXN0Iiwgc3RyZWFtSWQpOwogICAgICAgICByZXR1cm4gQkFEX1ZBTFVFOwogICAgIH0KLQotICAgIHN0cmVhbSA9IG1PdXRwdXRTdHJlYW1zLmVkaXRWYWx1ZUF0KG91dHB1dFN0cmVhbUlkeCk7CiAgICAgc3RyZWFtLT5hZGRCdWZmZXJMaXN0ZW5lcihsaXN0ZW5lcik7CiAKICAgICByZXR1cm4gT0s7CkBAIC0yMTQzLDEyICsyNDg0LDExIEBACiAgICAgICAgIHJldHVybiBCQURfVkFMVUU7CiAgICAgfQogCi0gICAgc3NpemVfdCBpZHggPSBtT3V0cHV0U3RyZWFtcy5pbmRleE9mS2V5KHN0cmVhbUlkKTsKLSAgICBpZiAoaWR4ID09IE5BTUVfTk9UX0ZPVU5EKSB7CisgICAgc3A8Q2FtZXJhM091dHB1dFN0cmVhbUludGVyZmFjZT4gc3RyZWFtID0gbU91dHB1dFN0cmVhbXMuZ2V0KHN0cmVhbUlkKTsKKyAgICBpZiAoc3RyZWFtID09IG51bGxwdHIpIHsKICAgICAgICAgQ0xPR0UoIlN0cmVhbSAlZCBpcyB1bmtub3duIiwgc3RyZWFtSWQpOwotICAgICAgICByZXR1cm4gaWR4OworICAgICAgICByZXR1cm4gQkFEX1ZBTFVFOwogICAgIH0KLSAgICBzcDxDYW1lcmEzT3V0cHV0U3RyZWFtSW50ZXJmYWNlPiBzdHJlYW0gPSBtT3V0cHV0U3RyZWFtc1tpZHhdOwogICAgIHN0YXR1c190IHJlcyA9IHN0cmVhbS0+c2V0Q29uc3VtZXJzKGNvbnN1bWVycyk7CiAgICAgaWYgKHJlcyAhPSBPSykgewogICAgICAgICBDTE9HRSgiU3RyZWFtICVkIHNldCBjb25zdW1lciBmYWlsZWQgKGVycm9yICVkICVzKSAiLCBzdHJlYW1JZCwgcmVzLCBzdHJlcnJvcigtcmVzKSk7CkBAIC0yMTkzLDEwICsyNTMzLDEwIEBACiAgICAgTXV0ZXg6OkF1dG9sb2NrIGlsKG1JbnRlcmZhY2VMb2NrKTsKICAgICBNdXRleDo6QXV0b2xvY2sgbChtTG9jayk7CiAKLSAgICBzc2l6ZV90IGlkeCA9IG1PdXRwdXRTdHJlYW1zLmluZGV4T2ZLZXkoc3RyZWFtSWQpOwotICAgIGlmIChpZHggPT0gTkFNRV9OT1RfRk9VTkQpIHsKKyAgICBzcDxDYW1lcmEzT3V0cHV0U3RyZWFtSW50ZXJmYWNlPiBzdHJlYW0gPSBtT3V0cHV0U3RyZWFtcy5nZXQoc3RyZWFtSWQpOworICAgIGlmIChzdHJlYW0gPT0gbnVsbHB0cikgewogICAgICAgICBDTE9HRSgiU3RyZWFtICVkIGlzIHVua25vd24iLCBzdHJlYW1JZCk7Ci0gICAgICAgIHJldHVybiBpZHg7CisgICAgICAgIHJldHVybiBCQURfVkFMVUU7CiAgICAgfQogCiAgICAgZm9yIChjb25zdCBhdXRvICZpdCA6IHJlbW92ZWRTdXJmYWNlSWRzKSB7CkBAIC0yMjA2LDcgKzI1NDYsNiBAQAogICAgICAgICB9CiAgICAgfQogCi0gICAgc3A8Q2FtZXJhM091dHB1dFN0cmVhbUludGVyZmFjZT4gc3RyZWFtID0gbU91dHB1dFN0cmVhbXNbaWR4XTsKICAgICBzdGF0dXNfdCByZXMgPSBzdHJlYW0tPnVwZGF0ZVN0cmVhbShuZXdTdXJmYWNlcywgb3V0cHV0SW5mbywgcmVtb3ZlZFN1cmZhY2VJZHMsIG91dHB1dE1hcCk7CiAgICAgaWYgKHJlcyAhPSBPSykgewogICAgICAgICBDTE9HRSgiU3RyZWFtICVkIGZhaWxlZCB0byB1cGRhdGUgc3RyZWFtIChlcnJvciAlZCAlcykgIiwKQEAgLTIyMjUsMTMgKzI1NjQsMTEgQEAKICAgICBNdXRleDo6QXV0b2xvY2sgaWwobUludGVyZmFjZUxvY2spOwogICAgIE11dGV4OjpBdXRvbG9jayBsKG1Mb2NrKTsKIAotICAgIGludCBpZHggPSBtT3V0cHV0U3RyZWFtcy5pbmRleE9mS2V5KHN0cmVhbUlkKTsKLSAgICBpZiAoaWR4ID09IE5BTUVfTk9UX0ZPVU5EKSB7CisgICAgc3A8Q2FtZXJhM091dHB1dFN0cmVhbUludGVyZmFjZT4gc3RyZWFtID0gbU91dHB1dFN0cmVhbXMuZ2V0KHN0cmVhbUlkKTsKKyAgICBpZiAoc3RyZWFtID09IG51bGxwdHIpIHsKICAgICAgICAgQUxPR0UoIiVzOiBTdHJlYW0gJWQgaXMgbm90IGZvdW5kLiIsIF9fRlVOQ1RJT05fXywgc3RyZWFtSWQpOwogICAgICAgICByZXR1cm4gQkFEX1ZBTFVFOwogICAgIH0KLQotICAgIHNwPENhbWVyYTNPdXRwdXRTdHJlYW1JbnRlcmZhY2U+IHN0cmVhbSA9IG1PdXRwdXRTdHJlYW1zLmVkaXRWYWx1ZUF0KGlkeCk7CiAgICAgcmV0dXJuIHN0cmVhbS0+ZHJvcEJ1ZmZlcnMoZHJvcHBpbmcpOwogfQogCkBAIC0yMjg1LDE1ICsyNjIyLDEyIEBACiAgICAgfQogCiAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBzdHJlYW1zLmNvdW50OyBpKyspIHsKLSAgICAgICAgaW50IGlkeCA9IG1PdXRwdXRTdHJlYW1zLmluZGV4T2ZLZXkoc3RyZWFtcy5kYXRhLmkzMltpXSk7Ci0gICAgICAgIGlmIChpZHggPT0gTkFNRV9OT1RfRk9VTkQpIHsKKyAgICAgICAgc3A8Q2FtZXJhM091dHB1dFN0cmVhbUludGVyZmFjZT4gc3RyZWFtID0gbU91dHB1dFN0cmVhbXMuZ2V0KHN0cmVhbXMuZGF0YS5pMzJbaV0pOworICAgICAgICBpZiAoc3RyZWFtID09IG51bGxwdHIpIHsKICAgICAgICAgICAgIENMT0dFKCJSZXF1ZXN0IHJlZmVyZW5jZXMgdW5rbm93biBzdHJlYW0gJWQiLAotICAgICAgICAgICAgICAgICAgICBzdHJlYW1zLmRhdGEudThbaV0pOworICAgICAgICAgICAgICAgICAgICBzdHJlYW1zLmRhdGEuaTMyW2ldKTsKICAgICAgICAgICAgIHJldHVybiBOVUxMOwogICAgICAgICB9Ci0gICAgICAgIHNwPENhbWVyYTNPdXRwdXRTdHJlYW1JbnRlcmZhY2U+IHN0cmVhbSA9Ci0gICAgICAgICAgICAgICAgbU91dHB1dFN0cmVhbXMuZWRpdFZhbHVlQXQoaWR4KTsKLQogICAgICAgICAvLyBJdCBpcyBpbGxlZ2FsIHRvIGluY2x1ZGUgYSBkZWZlcnJlZCBjb25zdW1lciBvdXRwdXQgc3RyZWFtIGludG8gYSByZXF1ZXN0CiAgICAgICAgIGF1dG8gaXRlciA9IHN1cmZhY2VNYXAuZmluZChzdHJlYW1zLmRhdGEuaTMyW2ldKTsKICAgICAgICAgaWYgKGl0ZXIgIT0gc3VyZmFjZU1hcC5lbmQoKSkgewpAQCAtMjMwNSw3ICsyNjM5LDcgQEAKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQotICAgICAgICAgICAgbmV3UmVxdWVzdC0+bU91dHB1dFN1cmZhY2VzW2ldID0gc3VyZmFjZXM7CisgICAgICAgICAgICBuZXdSZXF1ZXN0LT5tT3V0cHV0U3VyZmFjZXNbc3RyZWFtcy5kYXRhLmkzMltpXV0gPSBzdXJmYWNlczsKICAgICAgICAgfQogCiAgICAgICAgIC8vIExhenkgY29tcGxldGlvbiBvZiBzdHJlYW0gY29uZmlndXJhdGlvbiAoYWxsb2NhdGlvbi9yZWdpc3RyYXRpb24pCkBAIC0yMzU0LDcgKzI2ODgsNyBAQAogICAgIH0KIAogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbU91dHB1dFN0cmVhbXMuc2l6ZSgpOyBpKyspIHsKLSAgICAgICAgc3A8Q2FtZXJhM091dHB1dFN0cmVhbUludGVyZmFjZT4gb3V0cHV0U3RyZWFtID0gbU91dHB1dFN0cmVhbXMuZWRpdFZhbHVlQXQoaSk7CisgICAgICAgIHNwPENhbWVyYTNPdXRwdXRTdHJlYW1JbnRlcmZhY2U+IG91dHB1dFN0cmVhbSA9IG1PdXRwdXRTdHJlYW1zW2ldOwogICAgICAgICBpZiAob3V0cHV0U3RyZWFtLT5pc0NvbmZpZ3VyaW5nKCkpIHsKICAgICAgICAgICAgIHJlcyA9IG91dHB1dFN0cmVhbS0+Y2FuY2VsQ29uZmlndXJhdGlvbigpOwogICAgICAgICAgICAgaWYgKHJlcyAhPSBPSykgewpAQCAtMjQ4OSw3ICsyODIzLDcgQEAKICAgICAgICAgfQogCiAgICAgICAgIGNhbWVyYTNfc3RyZWFtX3QgKm91dHB1dFN0cmVhbTsKLSAgICAgICAgb3V0cHV0U3RyZWFtID0gbU91dHB1dFN0cmVhbXMuZWRpdFZhbHVlQXQoaSktPnN0YXJ0Q29uZmlndXJhdGlvbigpOworICAgICAgICBvdXRwdXRTdHJlYW0gPSBtT3V0cHV0U3RyZWFtc1tpXS0+c3RhcnRDb25maWd1cmF0aW9uKCk7CiAgICAgICAgIGlmIChvdXRwdXRTdHJlYW0gPT0gTlVMTCkgewogICAgICAgICAgICAgQ0xPR0UoIkNhbid0IHN0YXJ0IG91dHB1dCBzdHJlYW0gY29uZmlndXJhdGlvbiIpOwogICAgICAgICAgICAgY2FuY2VsU3RyZWFtc0NvbmZpZ3VyYXRpb25Mb2NrZWQoKTsKQEAgLTI1NDcsOCArMjg4MSw3IEBACiAgICAgfQogCiAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtT3V0cHV0U3RyZWFtcy5zaXplKCk7IGkrKykgewotICAgICAgICBzcDxDYW1lcmEzT3V0cHV0U3RyZWFtSW50ZXJmYWNlPiBvdXRwdXRTdHJlYW0gPQotICAgICAgICAgICAgbU91dHB1dFN0cmVhbXMuZWRpdFZhbHVlQXQoaSk7CisgICAgICAgIHNwPENhbWVyYTNPdXRwdXRTdHJlYW1JbnRlcmZhY2U+IG91dHB1dFN0cmVhbSA9IG1PdXRwdXRTdHJlYW1zW2ldOwogICAgICAgICBpZiAob3V0cHV0U3RyZWFtLT5pc0NvbmZpZ3VyaW5nKCkgJiYgIW91dHB1dFN0cmVhbS0+aXNDb25zdW1lckNvbmZpZ3VyYXRpb25EZWZlcnJlZCgpKSB7CiAgICAgICAgICAgICByZXMgPSBvdXRwdXRTdHJlYW0tPmZpbmlzaENvbmZpZ3VyYXRpb24oKTsKICAgICAgICAgICAgIGlmIChyZXMgIT0gT0spIHsKQEAgLTI2MTEsNiArMjk0NCwxMCBAQAogICAgICAgICByZXR1cm4gcmM7CiAgICAgfQogCisgICAgaWYgKG1EdW1teVN0cmVhbUlkID09IE5PX1NUUkVBTSkgeworICAgICAgICBtUmVxdWVzdEJ1ZmZlclNNLm9uU3RyZWFtc0NvbmZpZ3VyZWQoKTsKKyAgICB9CisKICAgICByZXR1cm4gT0s7CiB9CiAKQEAgLTI2NTUsMTUgKzI5OTIsMTIgQEAKICAgICAvLyBPaywgaGF2ZSBhIGR1bW15IHN0cmVhbSBhbmQgdGhlcmUncyBhdCBsZWFzdCBvbmUgb3RoZXIgb3V0cHV0IHN0cmVhbSwKICAgICAvLyBzbyByZW1vdmUgdGhlIGR1bW15CiAKLSAgICBzcDxDYW1lcmEzU3RyZWFtSW50ZXJmYWNlPiBkZWxldGVkU3RyZWFtOwotICAgIHNzaXplX3Qgb3V0cHV0U3RyZWFtSWR4ID0gbU91dHB1dFN0cmVhbXMuaW5kZXhPZktleShtRHVtbXlTdHJlYW1JZCk7Ci0gICAgaWYgKG91dHB1dFN0cmVhbUlkeCA9PSBOQU1FX05PVF9GT1VORCkgeworICAgIHNwPENhbWVyYTNTdHJlYW1JbnRlcmZhY2U+IGRlbGV0ZWRTdHJlYW0gPSBtT3V0cHV0U3RyZWFtcy5nZXQobUR1bW15U3RyZWFtSWQpOworICAgIGlmIChkZWxldGVkU3RyZWFtID09IG51bGxwdHIpIHsKICAgICAgICAgU0VUX0VSUl9MKCJEdW1teSBzdHJlYW0gJWQgZG9lcyBub3QgYXBwZWFyIHRvIGV4aXN0IiwgbUR1bW15U3RyZWFtSWQpOwogICAgICAgICByZXR1cm4gSU5WQUxJRF9PUEVSQVRJT047CiAgICAgfQotCi0gICAgZGVsZXRlZFN0cmVhbSA9IG1PdXRwdXRTdHJlYW1zLmVkaXRWYWx1ZUF0KG91dHB1dFN0cmVhbUlkeCk7Ci0gICAgbU91dHB1dFN0cmVhbXMucmVtb3ZlSXRlbXNBdChvdXRwdXRTdHJlYW1JZHgpOworICAgIG1PdXRwdXRTdHJlYW1zLnJlbW92ZShtRHVtbXlTdHJlYW1JZCk7CiAKICAgICAvLyBGcmVlIHVwIHRoZSBzdHJlYW0gZW5kcG9pbnQgc28gdGhhdCBpdCBjYW4gYmUgdXNlZCBieSBzb21lIG90aGVyIHN0cmVhbQogICAgIHJlcyA9IGRlbGV0ZWRTdHJlYW0tPmRpc2Nvbm5lY3QoKTsKQEAgLTI3MzcsMTggKzMwNzEsMjEgQEAKIHN0YXR1c190IENhbWVyYTNEZXZpY2U6OnJlZ2lzdGVySW5GbGlnaHQodWludDMyX3QgZnJhbWVOdW1iZXIsCiAgICAgICAgIGludDMyX3QgbnVtQnVmZmVycywgQ2FwdHVyZVJlc3VsdEV4dHJhcyByZXN1bHRFeHRyYXMsIGJvb2wgaGFzSW5wdXQsCiAgICAgICAgIGJvb2wgaGFzQXBwQ2FsbGJhY2ssIG5zZWNzX3QgbWF4RXhwZWN0ZWREdXJhdGlvbiwKLSAgICAgICAgc3RkOjpzZXQ8U3RyaW5nOD4mIHBoeXNpY2FsQ2FtZXJhSWRzKSB7CisgICAgICAgIHN0ZDo6c2V0PFN0cmluZzg+JiBwaHlzaWNhbENhbWVyYUlkcywgYm9vbCBpc1N0aWxsQ2FwdHVyZSwKKyAgICAgICAgYm9vbCBpc1pzbENhcHR1cmUsIGNvbnN0IFN1cmZhY2VNYXAmIG91dHB1dFN1cmZhY2VzKSB7CiAgICAgQVRSQUNFX0NBTEwoKTsKICAgICBNdXRleDo6QXV0b2xvY2sgbChtSW5GbGlnaHRMb2NrKTsKIAogICAgIHNzaXplX3QgcmVzOwogICAgIHJlcyA9IG1JbkZsaWdodE1hcC5hZGQoZnJhbWVOdW1iZXIsIEluRmxpZ2h0UmVxdWVzdChudW1CdWZmZXJzLCByZXN1bHRFeHRyYXMsIGhhc0lucHV0LAotICAgICAgICAgICAgaGFzQXBwQ2FsbGJhY2ssIG1heEV4cGVjdGVkRHVyYXRpb24sIHBoeXNpY2FsQ2FtZXJhSWRzKSk7CisgICAgICAgICAgICBoYXNBcHBDYWxsYmFjaywgbWF4RXhwZWN0ZWREdXJhdGlvbiwgcGh5c2ljYWxDYW1lcmFJZHMsIGlzU3RpbGxDYXB0dXJlLCBpc1pzbENhcHR1cmUsCisgICAgICAgICAgICBvdXRwdXRTdXJmYWNlcykpOwogICAgIGlmIChyZXMgPCAwKSByZXR1cm4gcmVzOwogCiAgICAgaWYgKG1JbkZsaWdodE1hcC5zaXplKCkgPT0gMSkgewotICAgICAgICAvLyBob2xkIG1Mb2NrIHRvIHByZXZlbnQgcmFjZSB3aXRoIGRpc2Nvbm5lY3QKLSAgICAgICAgTXV0ZXg6OkF1dG9sb2NrIGwobUxvY2spOworICAgICAgICAvLyBIb2xkIGEgc2VwYXJhdGUgZGVkaWNhdGVkIHRyYWNrZXIgbG9jayB0byBwcmV2ZW50IHJhY2Ugd2l0aCBkaXNjb25uZWN0IGFuZCBhbHNvCisgICAgICAgIC8vIGF2b2lkIGEgZGVhZGxvY2sgZHVyaW5nIHJlcHJvY2VzcyByZXF1ZXN0cy4KKyAgICAgICAgTXV0ZXg6OkF1dG9sb2NrIGwobVRyYWNrZXJMb2NrKTsKICAgICAgICAgaWYgKG1TdGF0dXNUcmFja2VyICE9IG51bGxwdHIpIHsKICAgICAgICAgICAgIG1TdGF0dXNUcmFja2VyLT5tYXJrQ29tcG9uZW50QWN0aXZlKG1JbkZsaWdodFN0YXR1c0lkKTsKICAgICAgICAgfQpAQCAtMjc2MCwxNyArMzA5Nyw2NSBAQAogCiB2b2lkIENhbWVyYTNEZXZpY2U6OnJldHVybk91dHB1dEJ1ZmZlcnMoCiAgICAgICAgIGNvbnN0IGNhbWVyYTNfc3RyZWFtX2J1ZmZlcl90ICpvdXRwdXRCdWZmZXJzLCBzaXplX3QgbnVtQnVmZmVycywKLSAgICAgICAgbnNlY3NfdCB0aW1lc3RhbXApIHsKKyAgICAgICAgbnNlY3NfdCB0aW1lc3RhbXAsIGJvb2wgdGltZXN0YW1wSW5jcmVhc2luZywKKyAgICAgICAgY29uc3QgU3VyZmFjZU1hcCYgb3V0cHV0U3VyZmFjZXMsCisgICAgICAgIGNvbnN0IENhcHR1cmVSZXN1bHRFeHRyYXMgJmluUmVzdWx0RXh0cmFzKSB7CisKICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG51bUJ1ZmZlcnM7IGkrKykKICAgICB7Ci0gICAgICAgIENhbWVyYTNTdHJlYW0gKnN0cmVhbSA9IENhbWVyYTNTdHJlYW06OmNhc3Qob3V0cHV0QnVmZmVyc1tpXS5zdHJlYW0pOwotICAgICAgICBzdGF0dXNfdCByZXMgPSBzdHJlYW0tPnJldHVybkJ1ZmZlcihvdXRwdXRCdWZmZXJzW2ldLCB0aW1lc3RhbXApOworICAgICAgICBpZiAob3V0cHV0QnVmZmVyc1tpXS5idWZmZXIgPT0gbnVsbHB0cikgeworICAgICAgICAgICAgaWYgKCFtVXNlSGFsQnVmTWFuYWdlcikgeworICAgICAgICAgICAgICAgIC8vIFdpdGggSEFMIGJ1ZmZlciBtYW5hZ2VtZW50IEFQSSwgSEFMIHNvbWV0aW1lcyB3aWxsIGhhdmUgdG8gcmV0dXJuIGJ1ZmZlcnMgdGhhdAorICAgICAgICAgICAgICAgIC8vIGhhcyBub3QgZ290IGEgb3V0cHV0IGJ1ZmZlciBoYW5kbGUgZmlsbGVkIHlldC4gVGhpcyBpcyB0aG91Z2ggaWxsZWdhbCBpZiBIQUwKKyAgICAgICAgICAgICAgICAvLyBidWZmZXIgbWFuYWdlbWVudCBBUEkgaXMgbm90IGJlaW5nIHVzZWQuCisgICAgICAgICAgICAgICAgQUxPR0UoIiVzOiBjYW5ub3QgcmV0dXJuIGEgbnVsbCBidWZmZXIhIiwgX19GVU5DVElPTl9fKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB9CisKKyAgICAgICAgQ2FtZXJhM1N0cmVhbUludGVyZmFjZSAqc3RyZWFtID0gQ2FtZXJhM1N0cmVhbTo6Y2FzdChvdXRwdXRCdWZmZXJzW2ldLnN0cmVhbSk7CisgICAgICAgIGludCBzdHJlYW1JZCA9IHN0cmVhbS0+Z2V0SWQoKTsKKyAgICAgICAgY29uc3QgYXV0byYgaXQgPSBvdXRwdXRTdXJmYWNlcy5maW5kKHN0cmVhbUlkKTsKKyAgICAgICAgc3RhdHVzX3QgcmVzID0gT0s7CisgICAgICAgIGlmIChpdCAhPSBvdXRwdXRTdXJmYWNlcy5lbmQoKSkgeworICAgICAgICAgICAgcmVzID0gc3RyZWFtLT5yZXR1cm5CdWZmZXIoCisgICAgICAgICAgICAgICAgICAgIG91dHB1dEJ1ZmZlcnNbaV0sIHRpbWVzdGFtcCwgdGltZXN0YW1wSW5jcmVhc2luZywgaXQtPnNlY29uZCk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICByZXMgPSBzdHJlYW0tPnJldHVybkJ1ZmZlcigKKyAgICAgICAgICAgICAgICAgICAgb3V0cHV0QnVmZmVyc1tpXSwgdGltZXN0YW1wLCB0aW1lc3RhbXBJbmNyZWFzaW5nKTsKKyAgICAgICAgfQorCiAgICAgICAgIC8vIE5vdGU6IHN0cmVhbSBtYXkgYmUgZGVhbGxvY2F0ZWQgYXQgdGhpcyBwb2ludCwgaWYgdGhpcyBidWZmZXIgd2FzCiAgICAgICAgIC8vIHRoZSBsYXN0IHJlZmVyZW5jZSB0byBpdC4KICAgICAgICAgaWYgKHJlcyAhPSBPSykgewogICAgICAgICAgICAgQUxPR0UoIkNhbid0IHJldHVybiBidWZmZXIgdG8gaXRzIHN0cmVhbTogJXMgKCVkKSIsCiAgICAgICAgICAgICAgICAgc3RyZXJyb3IoLXJlcyksIHJlcyk7CiAgICAgICAgIH0KKworICAgICAgICAvLyBMb25nIHByb2Nlc3NpbmcgY29uc3VtZXJzIGNhbiBjYXVzZSByZXR1cm5CdWZmZXIgdGltZW91dCBmb3Igc2hhcmVkIHN0cmVhbQorICAgICAgICAvLyBJZiB0aGF0IGhhcHBlbnMsIGNhbmNlbCB0aGUgYnVmZmVyIGFuZCBzZW5kIGEgYnVmZmVyIGVycm9yIHRvIGNsaWVudAorICAgICAgICBpZiAoaXQgIT0gb3V0cHV0U3VyZmFjZXMuZW5kKCkgJiYgcmVzID09IFRJTUVEX09VVCAmJgorICAgICAgICAgICAgICAgIG91dHB1dEJ1ZmZlcnNbaV0uc3RhdHVzID09IENBTUVSQTNfQlVGRkVSX1NUQVRVU19PSykgeworICAgICAgICAgICAgLy8gY2FuY2VsIHRoZSBidWZmZXIKKyAgICAgICAgICAgIGNhbWVyYTNfc3RyZWFtX2J1ZmZlcl90IHNiID0gb3V0cHV0QnVmZmVyc1tpXTsKKyAgICAgICAgICAgIHNiLnN0YXR1cyA9IENBTUVSQTNfQlVGRkVSX1NUQVRVU19FUlJPUjsKKyAgICAgICAgICAgIHN0cmVhbS0+cmV0dXJuQnVmZmVyKHNiLCAvKnRpbWVzdGFtcCovMCwgdGltZXN0YW1wSW5jcmVhc2luZyk7CisKKyAgICAgICAgICAgIC8vIG5vdGlmeSBjbGllbnQgYnVmZmVyIGVycm9yCisgICAgICAgICAgICBzcDxOb3RpZmljYXRpb25MaXN0ZW5lcj4gbGlzdGVuZXI7CisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgTXV0ZXg6OkF1dG9sb2NrIGwobU91dHB1dExvY2spOworICAgICAgICAgICAgICAgIGxpc3RlbmVyID0gbUxpc3RlbmVyLnByb21vdGUoKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKGxpc3RlbmVyICE9IG51bGxwdHIpIHsKKyAgICAgICAgICAgICAgICBDYXB0dXJlUmVzdWx0RXh0cmFzIGV4dHJhcyA9IGluUmVzdWx0RXh0cmFzOworICAgICAgICAgICAgICAgIGV4dHJhcy5lcnJvclN0cmVhbUlkID0gc3RyZWFtSWQ7CisgICAgICAgICAgICAgICAgbGlzdGVuZXItPm5vdGlmeUVycm9yKAorICAgICAgICAgICAgICAgICAgICAgICAgaGFyZHdhcmU6OmNhbWVyYTI6OklDYW1lcmFEZXZpY2VDYWxsYmFja3M6OkVSUk9SX0NBTUVSQV9CVUZGRVIsCisgICAgICAgICAgICAgICAgICAgICAgICBleHRyYXMpOworICAgICAgICAgICAgfQorICAgICAgICB9CiAgICAgfQogfQogCkBAIC0yNzgxLDggKzMxNjYsMTAgQEAKIAogICAgIC8vIEluZGljYXRlIGlkbGUgaW5GbGlnaHRNYXAgdG8gdGhlIHN0YXR1cyB0cmFja2VyCiAgICAgaWYgKG1JbkZsaWdodE1hcC5zaXplKCkgPT0gMCkgewotICAgICAgICAvLyBob2xkIG1Mb2NrIHRvIHByZXZlbnQgcmFjZSB3aXRoIGRpc2Nvbm5lY3QKLSAgICAgICAgTXV0ZXg6OkF1dG9sb2NrIGwobUxvY2spOworICAgICAgICBtUmVxdWVzdEJ1ZmZlclNNLm9uSW5mbGlnaHRNYXBFbXB0eSgpOworICAgICAgICAvLyBIb2xkIGEgc2VwYXJhdGUgZGVkaWNhdGVkIHRyYWNrZXIgbG9jayB0byBwcmV2ZW50IHJhY2Ugd2l0aCBkaXNjb25uZWN0IGFuZCBhbHNvCisgICAgICAgIC8vIGF2b2lkIGEgZGVhZGxvY2sgZHVyaW5nIHJlcHJvY2VzcyByZXF1ZXN0cy4KKyAgICAgICAgTXV0ZXg6OkF1dG9sb2NrIGwobVRyYWNrZXJMb2NrKTsKICAgICAgICAgaWYgKG1TdGF0dXNUcmFja2VyICE9IG51bGxwdHIpIHsKICAgICAgICAgICAgIG1TdGF0dXNUcmFja2VyLT5tYXJrQ29tcG9uZW50SWRsZShtSW5GbGlnaHRTdGF0dXNJZCwgRmVuY2U6Ok5PX0ZFTkNFKTsKICAgICAgICAgfQpAQCAtMjgwNyw2ICszMTk0LDEwIEBACiAgICAgaWYgKHJlcXVlc3QubnVtQnVmZmVyc0xlZnQgPT0gMCAmJgogICAgICAgICAgICAgKHJlcXVlc3Quc2tpcFJlc3VsdE1ldGFkYXRhIHx8CiAgICAgICAgICAgICAocmVxdWVzdC5oYXZlUmVzdWx0TWV0YWRhdGEgJiYgc2h1dHRlclRpbWVzdGFtcCAhPSAwKSkpIHsKKyAgICAgICAgaWYgKHJlcXVlc3Quc3RpbGxDYXB0dXJlKSB7CisgICAgICAgICAgICBBVFJBQ0VfQVNZTkNfRU5EKCJzdGlsbCBjYXB0dXJlIiwgZnJhbWVOdW1iZXIpOworICAgICAgICB9CisKICAgICAgICAgQVRSQUNFX0FTWU5DX0VORCgiZnJhbWUgY2FwdHVyZSIsIGZyYW1lTnVtYmVyKTsKIAogICAgICAgICAvLyBTYW5pdHkgY2hlY2sgLSBpZiBzZW5zb3IgdGltZXN0YW1wIG1hdGNoZXMgc2h1dHRlciB0aW1lc3RhbXAgaW4gdGhlCkBAIC0yODIzLDcgKzMyMTQsOCBAQAogICAgICAgICBhc3NlcnQocmVxdWVzdC5yZXF1ZXN0U3RhdHVzICE9IE9LIHx8CiAgICAgICAgICAgICAgICByZXF1ZXN0LnBlbmRpbmdPdXRwdXRCdWZmZXJzLnNpemUoKSA9PSAwKTsKICAgICAgICAgcmV0dXJuT3V0cHV0QnVmZmVycyhyZXF1ZXN0LnBlbmRpbmdPdXRwdXRCdWZmZXJzLmFycmF5KCksCi0gICAgICAgICAgICByZXF1ZXN0LnBlbmRpbmdPdXRwdXRCdWZmZXJzLnNpemUoKSwgMCk7CisgICAgICAgICAgICByZXF1ZXN0LnBlbmRpbmdPdXRwdXRCdWZmZXJzLnNpemUoKSwgMCwgLyp0aW1lc3RhbXBJbmNyZWFzaW5nKi90cnVlLAorICAgICAgICAgICAgcmVxdWVzdC5vdXRwdXRTdXJmYWNlcywgcmVxdWVzdC5yZXN1bHRFeHRyYXMpOwogCiAgICAgICAgIHJlbW92ZUluRmxpZ2h0TWFwRW50cnlMb2NrZWQoaWR4KTsKICAgICAgICAgQUxPR1ZWKCIlczogcmVtb3ZlZCBmcmFtZSAlZCBmcm9tIEluRmxpZ2h0TWFwIiwgX19GVU5DVElPTl9fLCBmcmFtZU51bWJlcik7CkBAIC0yODQ3LDcgKzMyMzksOSBAQAogICAgICAgICBmb3IgKHNpemVfdCBpZHggPSAwOyBpZHggPCBtSW5GbGlnaHRNYXAuc2l6ZSgpOyBpZHgrKykgewogICAgICAgICAgICAgY29uc3QgSW5GbGlnaHRSZXF1ZXN0ICZyZXF1ZXN0ID0gbUluRmxpZ2h0TWFwLnZhbHVlQXQoaWR4KTsKICAgICAgICAgICAgIHJldHVybk91dHB1dEJ1ZmZlcnMocmVxdWVzdC5wZW5kaW5nT3V0cHV0QnVmZmVycy5hcnJheSgpLAotICAgICAgICAgICAgICAgIHJlcXVlc3QucGVuZGluZ091dHB1dEJ1ZmZlcnMuc2l6ZSgpLCAwKTsKKyAgICAgICAgICAgICAgICByZXF1ZXN0LnBlbmRpbmdPdXRwdXRCdWZmZXJzLnNpemUoKSwgMCwKKyAgICAgICAgICAgICAgICAvKnRpbWVzdGFtcEluY3JlYXNpbmcqL3RydWUsIHJlcXVlc3Qub3V0cHV0U3VyZmFjZXMsCisgICAgICAgICAgICAgICAgcmVxdWVzdC5yZXN1bHRFeHRyYXMpOwogICAgICAgICB9CiAgICAgICAgIG1JbkZsaWdodE1hcC5jbGVhcigpOwogICAgICAgICBtRXhwZWN0ZWRJbmZsaWdodER1cmF0aW9uID0gMDsKQEAgLTI5MjIsMTIgKzMzMTYsMTIgQEAKICAgICAgICAgICAgICAgICAgICAgICBmcmFtZU51bWJlciwgc3RyZWFtSWQsIHN0cmVycm9yKC1yZXMpLCByZXMpOwogICAgICAgICAgICAgfQogICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgc3NpemVfdCBpZHggPSBtT3V0cHV0U3RyZWFtcy5pbmRleE9mS2V5KHN0cmVhbUlkKTsKLSAgICAgICAgICAgIGlmIChpZHggPT0gTkFNRV9OT1RfRk9VTkQpIHsKKyAgICAgICAgICAgIHNwPENhbWVyYTNTdHJlYW1JbnRlcmZhY2U+IHN0cmVhbSA9IG1PdXRwdXRTdHJlYW1zLmdldChzdHJlYW1JZCk7CisgICAgICAgICAgICBpZiAoc3RyZWFtID09IG51bGxwdHIpIHsKICAgICAgICAgICAgICAgICBBTE9HRSgiJXM6IE91dHB1dCBzdHJlYW0gaWQgJWQgbm90IGZvdW5kISIsIF9fRlVOQ1RJT05fXywgc3RyZWFtSWQpOwogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgc3RyZWFtQnVmZmVyLnN0cmVhbSA9IG1PdXRwdXRTdHJlYW1zLnZhbHVlQXQoaWR4KS0+YXNIYWxTdHJlYW0oKTsKKyAgICAgICAgICAgIHN0cmVhbUJ1ZmZlci5zdHJlYW0gPSBzdHJlYW0tPmFzSGFsU3RyZWFtKCk7CiAgICAgICAgICAgICByZXR1cm5PdXRwdXRCdWZmZXJzKCZzdHJlYW1CdWZmZXIsIC8qc2l6ZSovMSwgLyp0aW1lc3RhbXAqLyAwKTsKICAgICAgICAgfQogICAgIH0KQEAgLTI5NzUsNiArMzM2OSwxMyBAQAogICAgIGNhcHR1cmVSZXN1bHQubVJlc3VsdEV4dHJhcyA9IHJlc3VsdEV4dHJhczsKICAgICBjYXB0dXJlUmVzdWx0Lm1NZXRhZGF0YSA9IHBhcnRpYWxSZXN1bHQ7CiAKKyAgICAvLyBGaXggdXAgcmVzdWx0IG1ldGFkYXRhIGZvciBtb25vY2hyb21lIGNhbWVyYS4KKyAgICBzdGF0dXNfdCByZXMgPSBmaXh1cE1vbm9jaHJvbWVUYWdzKG1EZXZpY2VJbmZvLCBjYXB0dXJlUmVzdWx0Lm1NZXRhZGF0YSk7CisgICAgaWYgKHJlcyAhPSBPSykgeworICAgICAgICBTRVRfRVJSKCJGYWlsZWQgdG8gb3ZlcnJpZGUgcmVzdWx0IG1ldGFkYXRhOiAlcyAoJWQpIiwgc3RyZXJyb3IoLXJlcyksIHJlcyk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKICAgICBpbnNlcnRSZXN1bHRMb2NrZWQoJmNhcHR1cmVSZXN1bHQsIGZyYW1lTnVtYmVyKTsKIH0KIApAQCAtMzA0Niw2ICszNDQ3LDIxIEBACiAgICAgICAgICAgICAgICAgZnJhbWVOdW1iZXIsIHN0cmVycm9yKHJlcyksIHJlcyk7CiAgICAgICAgIHJldHVybjsKICAgICB9CisgICAgLy8gRml4IHVwIHJlc3VsdCBtZXRhZGF0YSBmb3IgbW9ub2Nocm9tZSBjYW1lcmEuCisgICAgcmVzID0gZml4dXBNb25vY2hyb21lVGFncyhtRGV2aWNlSW5mbywgY2FwdHVyZVJlc3VsdC5tTWV0YWRhdGEpOworICAgIGlmIChyZXMgIT0gT0spIHsKKyAgICAgICAgU0VUX0VSUigiRmFpbGVkIHRvIG92ZXJyaWRlIHJlc3VsdCBtZXRhZGF0YTogJXMgKCVkKSIsIHN0cmVycm9yKC1yZXMpLCByZXMpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIGZvciAoYXV0byYgcGh5c2ljYWxNZXRhZGF0YSA6IGNhcHR1cmVSZXN1bHQubVBoeXNpY2FsTWV0YWRhdGFzKSB7CisgICAgICAgIFN0cmluZzggY2FtZXJhSWQ4KHBoeXNpY2FsTWV0YWRhdGEubVBoeXNpY2FsQ2FtZXJhSWQpOworICAgICAgICByZXMgPSBmaXh1cE1vbm9jaHJvbWVUYWdzKG1QaHlzaWNhbERldmljZUluZm9NYXAuYXQoY2FtZXJhSWQ4LmNfc3RyKCkpLAorICAgICAgICAgICAgICAgIHBoeXNpY2FsTWV0YWRhdGEubVBoeXNpY2FsQ2FtZXJhTWV0YWRhdGEpOworICAgICAgICBpZiAocmVzICE9IE9LKSB7CisgICAgICAgICAgICBTRVRfRVJSKCJGYWlsZWQgdG8gb3ZlcnJpZGUgcmVzdWx0IG1ldGFkYXRhOiAlcyAoJWQpIiwgc3RyZXJyb3IoLXJlcyksIHJlcyk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICB9CiAKICAgICBtVGFnTW9uaXRvci5tb25pdG9yTWV0YWRhdGEoVGFnTW9uaXRvcjo6UkVTVUxULAogICAgICAgICAgICAgZnJhbWVOdW1iZXIsIHRpbWVzdGFtcC5kYXRhLmk2NFswXSwgY2FwdHVyZVJlc3VsdC5tTWV0YWRhdGEpOwpAQCAtMzIwMyw4ICszNjE5LDEwIEBACiAgICAgICAgICAgICByZXF1ZXN0LnBlbmRpbmdPdXRwdXRCdWZmZXJzLmFwcGVuZEFycmF5KHJlc3VsdC0+b3V0cHV0X2J1ZmZlcnMsCiAgICAgICAgICAgICAgICAgcmVzdWx0LT5udW1fb3V0cHV0X2J1ZmZlcnMpOwogICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgYm9vbCB0aW1lc3RhbXBJbmNyZWFzaW5nID0gIShyZXF1ZXN0LnpzbENhcHR1cmUgfHwgcmVxdWVzdC5oYXNJbnB1dEJ1ZmZlcik7CiAgICAgICAgICAgICByZXR1cm5PdXRwdXRCdWZmZXJzKHJlc3VsdC0+b3V0cHV0X2J1ZmZlcnMsCi0gICAgICAgICAgICAgICAgcmVzdWx0LT5udW1fb3V0cHV0X2J1ZmZlcnMsIHNodXR0ZXJUaW1lc3RhbXApOworICAgICAgICAgICAgICAgIHJlc3VsdC0+bnVtX291dHB1dF9idWZmZXJzLCBzaHV0dGVyVGltZXN0YW1wLCB0aW1lc3RhbXBJbmNyZWFzaW5nLAorICAgICAgICAgICAgICAgIHJlcXVlc3Qub3V0cHV0U3VyZmFjZXMsIHJlcXVlc3QucmVzdWx0RXh0cmFzKTsKICAgICAgICAgfQogCiAgICAgICAgIGlmIChyZXN1bHQtPnJlc3VsdCAhPSBOVUxMICYmICFpc1BhcnRpYWxSZXN1bHQpIHsKQEAgLTMyMTcsNyArMzYzNSw3IEBACiAgICAgICAgICAgICBpZiAoc2h1dHRlclRpbWVzdGFtcCA9PSAwKSB7CiAgICAgICAgICAgICAgICAgcmVxdWVzdC5wZW5kaW5nTWV0YWRhdGEgPSByZXN1bHQtPnJlc3VsdDsKICAgICAgICAgICAgICAgICByZXF1ZXN0LmNvbGxlY3RlZFBhcnRpYWxSZXN1bHQgPSBjb2xsZWN0ZWRQYXJ0aWFsUmVzdWx0OwotICAgICAgICAgICB9IGVsc2UgaWYgKHJlcXVlc3QuaGFzQ2FsbGJhY2spIHsKKyAgICAgICAgICAgIH0gZWxzZSBpZiAocmVxdWVzdC5oYXNDYWxsYmFjaykgewogICAgICAgICAgICAgICAgIENhbWVyYU1ldGFkYXRhIG1ldGFkYXRhOwogICAgICAgICAgICAgICAgIG1ldGFkYXRhID0gcmVzdWx0LT5yZXN1bHQ7CiAgICAgICAgICAgICAgICAgc2VuZENhcHR1cmVSZXN1bHQobWV0YWRhdGEsIHJlcXVlc3QucmVzdWx0RXh0cmFzLApAQCAtMzMzNyw2ICszNzU1LDkgQEAKICAgICAgICAgICAgICAgICAgICAgICAgIC8vIEluIGNhc2Ugb2YgbWlzc2luZyByZXN1bHQgY2hlY2sgd2hldGhlciB0aGUgYnVmZmVycwogICAgICAgICAgICAgICAgICAgICAgICAgLy8gcmV0dXJuZWQuIElmIHRoZXkgcmV0dXJuZWQsIHRoZW4gcmVtb3ZlIGluZmxpZ2h0CiAgICAgICAgICAgICAgICAgICAgICAgICAvLyByZXF1ZXN0LgorICAgICAgICAgICAgICAgICAgICAgICAgLy8gVE9ETzogc2hvdWxkIHdlIGNhbGwgdGhpcyBmb3IgRVJST1JfQ0FNRVJBX1JFUVVFU1QgYXMgd2VsbD8KKyAgICAgICAgICAgICAgICAgICAgICAgIC8vICAgICAgIG90aGVyd2lzZSB3ZSBhcmUgZGVwZW5kaW5nIG9uIEhBTCB0byBzZW5kIHRoZSBidWZmZXJzIGJhY2sgYWZ0ZXIKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vICAgICAgIGNhbGxpbmcgbm90aWZ5RXJyb3IuIE5vdCBzdXJlIGlmIHRoYXQncyBpbiB0aGUgc3BlYy4KICAgICAgICAgICAgICAgICAgICAgICAgIHJlbW92ZUluRmxpZ2h0UmVxdWVzdElmUmVhZHlMb2NrZWQoaWR4KTsKICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIH0gZWxzZSB7CkBAIC0zNDEwLDggKzM4MzEsMTAgQEAKICAgICAgICAgICAgICAgICAgICAgci5jb2xsZWN0ZWRQYXJ0aWFsUmVzdWx0LCBtc2cuZnJhbWVfbnVtYmVyLAogICAgICAgICAgICAgICAgICAgICByLmhhc0lucHV0QnVmZmVyLCByLnBoeXNpY2FsTWV0YWRhdGFzKTsKICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGJvb2wgdGltZXN0YW1wSW5jcmVhc2luZyA9ICEoci56c2xDYXB0dXJlIHx8IHIuaGFzSW5wdXRCdWZmZXIpOwogICAgICAgICAgICAgcmV0dXJuT3V0cHV0QnVmZmVycyhyLnBlbmRpbmdPdXRwdXRCdWZmZXJzLmFycmF5KCksCi0gICAgICAgICAgICAgICAgci5wZW5kaW5nT3V0cHV0QnVmZmVycy5zaXplKCksIHIuc2h1dHRlclRpbWVzdGFtcCk7CisgICAgICAgICAgICAgICAgICAgIHIucGVuZGluZ091dHB1dEJ1ZmZlcnMuc2l6ZSgpLCByLnNodXR0ZXJUaW1lc3RhbXAsIHRpbWVzdGFtcEluY3JlYXNpbmcsCisgICAgICAgICAgICAgICAgICAgIHIub3V0cHV0U3VyZmFjZXMsIHIucmVzdWx0RXh0cmFzKTsKICAgICAgICAgICAgIHIucGVuZGluZ091dHB1dEJ1ZmZlcnMuY2xlYXIoKTsKIAogICAgICAgICAgICAgcmVtb3ZlSW5GbGlnaHRSZXF1ZXN0SWZSZWFkeUxvY2tlZChpZHgpOwpAQCAtMzQ0NywxMSArMzg3MCwxNyBAQAogCiBDYW1lcmEzRGV2aWNlOjpIYWxJbnRlcmZhY2U6OkhhbEludGVyZmFjZSgKICAgICAgICAgICAgIHNwPElDYW1lcmFEZXZpY2VTZXNzaW9uPiAmc2Vzc2lvbiwKLSAgICAgICAgICAgIHN0ZDo6c2hhcmVkX3B0cjxSZXF1ZXN0TWV0YWRhdGFRdWV1ZT4gcXVldWUpIDoKKyAgICAgICAgICAgIHN0ZDo6c2hhcmVkX3B0cjxSZXF1ZXN0TWV0YWRhdGFRdWV1ZT4gcXVldWUsCisgICAgICAgICAgICBib29sIHVzZUhhbEJ1Zk1hbmFnZXIpIDoKICAgICAgICAgbUhpZGxTZXNzaW9uKHNlc3Npb24pLAotICAgICAgICBtUmVxdWVzdE1ldGFkYXRhUXVldWUocXVldWUpIHsKKyAgICAgICAgbVJlcXVlc3RNZXRhZGF0YVF1ZXVlKHF1ZXVlKSwKKyAgICAgICAgbVVzZUhhbEJ1Zk1hbmFnZXIodXNlSGFsQnVmTWFuYWdlcikgewogICAgIC8vIENoZWNrIHdpdGggaGFyZHdhcmUgc2VydmljZSBtYW5hZ2VyIGlmIHdlIGNhbiBkb3duY2FzdCB0aGVzZSBpbnRlcmZhY2VzCiAgICAgLy8gU29tZXdoYXQgZXhwZW5zaXZlLCBzbyBjYWNoZSB0aGUgcmVzdWx0cyBhdCBzdGFydHVwCisgICAgYXV0byBjYXN0UmVzdWx0XzNfNSA9IGRldmljZTo6VjNfNTo6SUNhbWVyYURldmljZVNlc3Npb246OmNhc3RGcm9tKG1IaWRsU2Vzc2lvbik7CisgICAgaWYgKGNhc3RSZXN1bHRfM181LmlzT2soKSkgeworICAgICAgICBtSGlkbFNlc3Npb25fM181ID0gY2FzdFJlc3VsdF8zXzU7CisgICAgfQogICAgIGF1dG8gY2FzdFJlc3VsdF8zXzQgPSBkZXZpY2U6OlYzXzQ6OklDYW1lcmFEZXZpY2VTZXNzaW9uOjpjYXN0RnJvbShtSGlkbFNlc3Npb24pOwogICAgIGlmIChjYXN0UmVzdWx0XzNfNC5pc09rKCkpIHsKICAgICAgICAgbUhpZGxTZXNzaW9uXzNfNCA9IGNhc3RSZXN1bHRfM180OwpAQCAtMzQ2MiwxNyArMzg5MSwxOSBAQAogICAgIH0KIH0KIAotQ2FtZXJhM0RldmljZTo6SGFsSW50ZXJmYWNlOjpIYWxJbnRlcmZhY2UoKSB7fQorQ2FtZXJhM0RldmljZTo6SGFsSW50ZXJmYWNlOjpIYWxJbnRlcmZhY2UoKSA6IG1Vc2VIYWxCdWZNYW5hZ2VyKGZhbHNlKSB7fQogCiBDYW1lcmEzRGV2aWNlOjpIYWxJbnRlcmZhY2U6OkhhbEludGVyZmFjZShjb25zdCBIYWxJbnRlcmZhY2UmIG90aGVyKSA6CiAgICAgICAgIG1IaWRsU2Vzc2lvbihvdGhlci5tSGlkbFNlc3Npb24pLAotICAgICAgICBtUmVxdWVzdE1ldGFkYXRhUXVldWUob3RoZXIubVJlcXVlc3RNZXRhZGF0YVF1ZXVlKSB7fQorICAgICAgICBtUmVxdWVzdE1ldGFkYXRhUXVldWUob3RoZXIubVJlcXVlc3RNZXRhZGF0YVF1ZXVlKSwKKyAgICAgICAgbVVzZUhhbEJ1Zk1hbmFnZXIob3RoZXIubVVzZUhhbEJ1Zk1hbmFnZXIpIHt9CiAKIGJvb2wgQ2FtZXJhM0RldmljZTo6SGFsSW50ZXJmYWNlOjp2YWxpZCgpIHsKICAgICByZXR1cm4gKG1IaWRsU2Vzc2lvbiAhPSBudWxscHRyKTsKIH0KIAogdm9pZCBDYW1lcmEzRGV2aWNlOjpIYWxJbnRlcmZhY2U6OmNsZWFyKCkgeworICAgIG1IaWRsU2Vzc2lvbl8zXzUuY2xlYXIoKTsKICAgICBtSGlkbFNlc3Npb25fM180LmNsZWFyKCk7CiAgICAgbUhpZGxTZXNzaW9uXzNfMy5jbGVhcigpOwogICAgIG1IaWRsU2Vzc2lvbi5jbGVhcigpOwpAQCAtMzYyOCwyNiArNDA1OSw0OSBAQAogCiAgICAgLy8gSW52b2tlIGNvbmZpZ3VyZVN0cmVhbXMKICAgICBkZXZpY2U6OlYzXzM6OkhhbFN0cmVhbUNvbmZpZ3VyYXRpb24gZmluYWxDb25maWd1cmF0aW9uOworICAgIGRldmljZTo6VjNfNDo6SGFsU3RyZWFtQ29uZmlndXJhdGlvbiBmaW5hbENvbmZpZ3VyYXRpb24zXzQ7CiAgICAgY29tbW9uOjpWMV8wOjpTdGF0dXMgc3RhdHVzOwogCi0gICAgLy8gU2VlIGlmIHdlIGhhdmUgdjMuNCBvciB2My4zIEhBTAotICAgIGlmIChtSGlkbFNlc3Npb25fM180ICE9IG51bGxwdHIpIHsKLSAgICAgICAgLy8gV2UgZG87IHVzZSB2My40IGZvciB0aGUgY2FsbAotICAgICAgICBBTE9HVigiJXM6IHYzLjQgZGV2aWNlIGZvdW5kIiwgX19GVU5DVElPTl9fKTsKLSAgICAgICAgZGV2aWNlOjpWM180OjpIYWxTdHJlYW1Db25maWd1cmF0aW9uIGZpbmFsQ29uZmlndXJhdGlvbjNfNDsKLSAgICAgICAgYXV0byBlcnIgPSBtSGlkbFNlc3Npb25fM180LT5jb25maWd1cmVTdHJlYW1zXzNfNChyZXF1ZXN0ZWRDb25maWd1cmF0aW9uM180LAotICAgICAgICAgICAgWyZzdGF0dXMsICZmaW5hbENvbmZpZ3VyYXRpb24zXzRdCisgICAgYXV0byBjb25maWdTdHJlYW0zNENiID0gWyZzdGF0dXMsICZmaW5hbENvbmZpZ3VyYXRpb24zXzRdCiAgICAgICAgICAgICAoY29tbW9uOjpWMV8wOjpTdGF0dXMgcywgY29uc3QgZGV2aWNlOjpWM180OjpIYWxTdHJlYW1Db25maWd1cmF0aW9uJiBoYWxDb25maWd1cmF0aW9uKSB7CiAgICAgICAgICAgICAgICAgZmluYWxDb25maWd1cmF0aW9uM180ID0gaGFsQ29uZmlndXJhdGlvbjsKICAgICAgICAgICAgICAgICBzdGF0dXMgPSBzOwotICAgICAgICAgICAgfSk7Ci0gICAgICAgIGlmICghZXJyLmlzT2soKSkgewotICAgICAgICAgICAgQUxPR0UoIiVzOiBUcmFuc2FjdGlvbiBlcnJvcjogJXMiLCBfX0ZVTkNUSU9OX18sIGVyci5kZXNjcmlwdGlvbigpLmNfc3RyKCkpOwotICAgICAgICAgICAgcmV0dXJuIERFQURfT0JKRUNUOworICAgICAgICAgICAgfTsKKworICAgIGF1dG8gcG9zdHByb2NDb25maWdTdHJlYW0zNCA9IFsmZmluYWxDb25maWd1cmF0aW9uLCAmZmluYWxDb25maWd1cmF0aW9uM180XQorICAgICAgICAgICAgKGhhcmR3YXJlOjpSZXR1cm48dm9pZD4mIGVycikgLT4gc3RhdHVzX3QgeworICAgICAgICAgICAgICAgIGlmICghZXJyLmlzT2soKSkgeworICAgICAgICAgICAgICAgICAgICBBTE9HRSgiJXM6IFRyYW5zYWN0aW9uIGVycm9yOiAlcyIsIF9fRlVOQ1RJT05fXywgZXJyLmRlc2NyaXB0aW9uKCkuY19zdHIoKSk7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBERUFEX09CSkVDVDsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZmluYWxDb25maWd1cmF0aW9uLnN0cmVhbXMucmVzaXplKGZpbmFsQ29uZmlndXJhdGlvbjNfNC5zdHJlYW1zLnNpemUoKSk7CisgICAgICAgICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBmaW5hbENvbmZpZ3VyYXRpb24zXzQuc3RyZWFtcy5zaXplKCk7IGkrKykgeworICAgICAgICAgICAgICAgICAgICBmaW5hbENvbmZpZ3VyYXRpb24uc3RyZWFtc1tpXSA9IGZpbmFsQ29uZmlndXJhdGlvbjNfNC5zdHJlYW1zW2ldLnYzXzM7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIHJldHVybiBPSzsKKyAgICAgICAgICAgIH07CisKKyAgICAvLyBTZWUgaWYgd2UgaGF2ZSB2My40IG9yIHYzLjMgSEFMCisgICAgaWYgKG1IaWRsU2Vzc2lvbl8zXzUgIT0gbnVsbHB0cikgeworICAgICAgICBBTE9HVigiJXM6IHYzLjUgZGV2aWNlIGZvdW5kIiwgX19GVU5DVElPTl9fKTsKKyAgICAgICAgZGV2aWNlOjpWM181OjpTdHJlYW1Db25maWd1cmF0aW9uIHJlcXVlc3RlZENvbmZpZ3VyYXRpb24zXzU7CisgICAgICAgIHJlcXVlc3RlZENvbmZpZ3VyYXRpb24zXzUudjNfNCA9IHJlcXVlc3RlZENvbmZpZ3VyYXRpb24zXzQ7CisgICAgICAgIHJlcXVlc3RlZENvbmZpZ3VyYXRpb24zXzUuc3RyZWFtQ29uZmlnQ291bnRlciA9IG1OZXh0U3RyZWFtQ29uZmlnQ291bnRlcisrOworICAgICAgICBhdXRvIGVyciA9IG1IaWRsU2Vzc2lvbl8zXzUtPmNvbmZpZ3VyZVN0cmVhbXNfM181KAorICAgICAgICAgICAgICAgIHJlcXVlc3RlZENvbmZpZ3VyYXRpb24zXzUsIGNvbmZpZ1N0cmVhbTM0Q2IpOworICAgICAgICByZXMgPSBwb3N0cHJvY0NvbmZpZ1N0cmVhbTM0KGVycik7CisgICAgICAgIGlmIChyZXMgIT0gT0spIHsKKyAgICAgICAgICAgIHJldHVybiByZXM7CiAgICAgICAgIH0KLSAgICAgICAgZmluYWxDb25maWd1cmF0aW9uLnN0cmVhbXMucmVzaXplKGZpbmFsQ29uZmlndXJhdGlvbjNfNC5zdHJlYW1zLnNpemUoKSk7Ci0gICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgZmluYWxDb25maWd1cmF0aW9uM180LnN0cmVhbXMuc2l6ZSgpOyBpKyspIHsKLSAgICAgICAgICAgIGZpbmFsQ29uZmlndXJhdGlvbi5zdHJlYW1zW2ldID0gZmluYWxDb25maWd1cmF0aW9uM180LnN0cmVhbXNbaV0udjNfMzsKKyAgICB9IGVsc2UgaWYgKG1IaWRsU2Vzc2lvbl8zXzQgIT0gbnVsbHB0cikgeworICAgICAgICAvLyBXZSBkbzsgdXNlIHYzLjQgZm9yIHRoZSBjYWxsCisgICAgICAgIEFMT0dWKCIlczogdjMuNCBkZXZpY2UgZm91bmQiLCBfX0ZVTkNUSU9OX18pOworICAgICAgICBkZXZpY2U6OlYzXzQ6OkhhbFN0cmVhbUNvbmZpZ3VyYXRpb24gZmluYWxDb25maWd1cmF0aW9uM180OworICAgICAgICBhdXRvIGVyciA9IG1IaWRsU2Vzc2lvbl8zXzQtPmNvbmZpZ3VyZVN0cmVhbXNfM180KAorICAgICAgICAgICAgICAgIHJlcXVlc3RlZENvbmZpZ3VyYXRpb24zXzQsIGNvbmZpZ1N0cmVhbTM0Q2IpOworICAgICAgICByZXMgPSBwb3N0cHJvY0NvbmZpZ1N0cmVhbTM0KGVycik7CisgICAgICAgIGlmIChyZXMgIT0gT0spIHsKKyAgICAgICAgICAgIHJldHVybiByZXM7CiAgICAgICAgIH0KICAgICB9IGVsc2UgaWYgKG1IaWRsU2Vzc2lvbl8zXzMgIT0gbnVsbHB0cikgewogICAgICAgICAvLyBXZSBkbzsgdXNlIHYzLjMgZm9yIHRoZSBjYWxsCkBAIC0zNzU5LDE0ICs0MjEzLDE0IEBACiAgICAgcmV0dXJuIHJlczsKIH0KIAotdm9pZCBDYW1lcmEzRGV2aWNlOjpIYWxJbnRlcmZhY2U6OndyYXBBc0hpZGxSZXF1ZXN0KGNhbWVyYTNfY2FwdHVyZV9yZXF1ZXN0X3QqIHJlcXVlc3QsCitzdGF0dXNfdCBDYW1lcmEzRGV2aWNlOjpIYWxJbnRlcmZhY2U6OndyYXBBc0hpZGxSZXF1ZXN0KGNhbWVyYTNfY2FwdHVyZV9yZXF1ZXN0X3QqIHJlcXVlc3QsCiAgICAgICAgIC8qb3V0Ki9kZXZpY2U6OlYzXzI6OkNhcHR1cmVSZXF1ZXN0KiBjYXB0dXJlUmVxdWVzdCwKICAgICAgICAgLypvdXQqL3N0ZDo6dmVjdG9yPG5hdGl2ZV9oYW5kbGVfdCo+KiBoYW5kbGVzQ3JlYXRlZCkgewogICAgIEFUUkFDRV9DQUxMKCk7CiAgICAgaWYgKGNhcHR1cmVSZXF1ZXN0ID09IG51bGxwdHIgfHwgaGFuZGxlc0NyZWF0ZWQgPT0gbnVsbHB0cikgewogICAgICAgICBBTE9HRSgiJXM6IGNhcHR1cmVSZXF1ZXN0ICglcCkgYW5kIGhhbmRsZXNDcmVhdGVkICglcCkgbXVzdCBub3QgYmUgbnVsbCIsCiAgICAgICAgICAgICAgICAgX19GVU5DVElPTl9fLCBjYXB0dXJlUmVxdWVzdCwgaGFuZGxlc0NyZWF0ZWQpOwotICAgICAgICByZXR1cm47CisgICAgICAgIHJldHVybiBCQURfVkFMVUU7CiAgICAgfQogCiAgICAgY2FwdHVyZVJlcXVlc3QtPmZyYW1lTnVtYmVyID0gcmVxdWVzdC0+ZnJhbWVfbnVtYmVyOwpAQCAtMzgwNywyNiArNDI2MSwzNyBAQAogICAgICAgICAgICAgY29uc3QgY2FtZXJhM19zdHJlYW1fYnVmZmVyX3QgKnNyYyA9IHJlcXVlc3QtPm91dHB1dF9idWZmZXJzICsgaTsKICAgICAgICAgICAgIFN0cmVhbUJ1ZmZlciAmZHN0ID0gY2FwdHVyZVJlcXVlc3QtPm91dHB1dEJ1ZmZlcnNbaV07CiAgICAgICAgICAgICBpbnQzMl90IHN0cmVhbUlkID0gQ2FtZXJhM1N0cmVhbTo6Y2FzdChzcmMtPnN0cmVhbSktPmdldElkKCk7Ci0gICAgICAgICAgICBidWZmZXJfaGFuZGxlX3QgYnVmID0gKihzcmMtPmJ1ZmZlcik7Ci0gICAgICAgICAgICBhdXRvIHBhaXIgPSBnZXRCdWZmZXJJZChidWYsIHN0cmVhbUlkKTsKLSAgICAgICAgICAgIGJvb2wgaXNOZXdCdWZmZXIgPSBwYWlyLmZpcnN0OwotICAgICAgICAgICAgZHN0LnN0cmVhbUlkID0gc3RyZWFtSWQ7Ci0gICAgICAgICAgICBkc3QuYnVmZmVySWQgPSBwYWlyLnNlY29uZDsKLSAgICAgICAgICAgIGRzdC5idWZmZXIgPSBpc05ld0J1ZmZlciA/IGJ1ZiA6IG51bGxwdHI7Ci0gICAgICAgICAgICBkc3Quc3RhdHVzID0gQnVmZmVyU3RhdHVzOjpPSzsKLSAgICAgICAgICAgIG5hdGl2ZV9oYW5kbGVfdCAqYWNxdWlyZUZlbmNlID0gbnVsbHB0cjsKLSAgICAgICAgICAgIGlmIChzcmMtPmFjcXVpcmVfZmVuY2UgIT0gLTEpIHsKLSAgICAgICAgICAgICAgICBhY3F1aXJlRmVuY2UgPSBuYXRpdmVfaGFuZGxlX2NyZWF0ZSgxLDApOwotICAgICAgICAgICAgICAgIGFjcXVpcmVGZW5jZS0+ZGF0YVswXSA9IHNyYy0+YWNxdWlyZV9mZW5jZTsKLSAgICAgICAgICAgICAgICBoYW5kbGVzQ3JlYXRlZC0+cHVzaF9iYWNrKGFjcXVpcmVGZW5jZSk7CisgICAgICAgICAgICBpZiAoc3JjLT5idWZmZXIgIT0gbnVsbHB0cikgeworICAgICAgICAgICAgICAgIGJ1ZmZlcl9oYW5kbGVfdCBidWYgPSAqKHNyYy0+YnVmZmVyKTsKKyAgICAgICAgICAgICAgICBhdXRvIHBhaXIgPSBnZXRCdWZmZXJJZChidWYsIHN0cmVhbUlkKTsKKyAgICAgICAgICAgICAgICBib29sIGlzTmV3QnVmZmVyID0gcGFpci5maXJzdDsKKyAgICAgICAgICAgICAgICBkc3QuYnVmZmVySWQgPSBwYWlyLnNlY29uZDsKKyAgICAgICAgICAgICAgICBkc3QuYnVmZmVyID0gaXNOZXdCdWZmZXIgPyBidWYgOiBudWxscHRyOworICAgICAgICAgICAgICAgIG5hdGl2ZV9oYW5kbGVfdCAqYWNxdWlyZUZlbmNlID0gbnVsbHB0cjsKKyAgICAgICAgICAgICAgICBpZiAoc3JjLT5hY3F1aXJlX2ZlbmNlICE9IC0xKSB7CisgICAgICAgICAgICAgICAgICAgIGFjcXVpcmVGZW5jZSA9IG5hdGl2ZV9oYW5kbGVfY3JlYXRlKDEsMCk7CisgICAgICAgICAgICAgICAgICAgIGFjcXVpcmVGZW5jZS0+ZGF0YVswXSA9IHNyYy0+YWNxdWlyZV9mZW5jZTsKKyAgICAgICAgICAgICAgICAgICAgaGFuZGxlc0NyZWF0ZWQtPnB1c2hfYmFjayhhY3F1aXJlRmVuY2UpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBkc3QuYWNxdWlyZUZlbmNlID0gYWNxdWlyZUZlbmNlOworICAgICAgICAgICAgfSBlbHNlIGlmIChtVXNlSGFsQnVmTWFuYWdlcikgeworICAgICAgICAgICAgICAgIC8vIEhBTCBidWZmZXIgbWFuYWdlbWVudCBwYXRoCisgICAgICAgICAgICAgICAgZHN0LmJ1ZmZlcklkID0gQlVGRkVSX0lEX05PX0JVRkZFUjsKKyAgICAgICAgICAgICAgICBkc3QuYnVmZmVyID0gbnVsbHB0cjsKKyAgICAgICAgICAgICAgICBkc3QuYWNxdWlyZUZlbmNlID0gbnVsbHB0cjsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgQUxPR0UoIiVzOiBjYW5ub3Qgc2VuZCBhIG51bGwgYnVmZmVyIGluIGNhcHR1cmUgcmVxdWVzdCEiLCBfX0ZVTkNUSU9OX18pOworICAgICAgICAgICAgICAgIHJldHVybiBCQURfVkFMVUU7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBkc3QuYWNxdWlyZUZlbmNlID0gYWNxdWlyZUZlbmNlOworICAgICAgICAgICAgZHN0LnN0cmVhbUlkID0gc3RyZWFtSWQ7CisgICAgICAgICAgICBkc3Quc3RhdHVzID0gQnVmZmVyU3RhdHVzOjpPSzsKICAgICAgICAgICAgIGRzdC5yZWxlYXNlRmVuY2UgPSBudWxscHRyOwogCiAgICAgICAgICAgICBwdXNoSW5mbGlnaHRCdWZmZXJMb2NrZWQoY2FwdHVyZVJlcXVlc3QtPmZyYW1lTnVtYmVyLCBzdHJlYW1JZCwKICAgICAgICAgICAgICAgICAgICAgc3JjLT5idWZmZXIsIHNyYy0+YWNxdWlyZV9mZW5jZSk7CiAgICAgICAgIH0KICAgICB9CisgICAgcmV0dXJuIE9LOwogfQogCiBzdGF0dXNfdCBDYW1lcmEzRGV2aWNlOjpIYWxJbnRlcmZhY2U6OnByb2Nlc3NCYXRjaENhcHR1cmVSZXF1ZXN0cygKQEAgLTM4NTAsMTIgKzQzMTUsMTcgQEAKICAgICB9CiAgICAgc3RkOjp2ZWN0b3I8bmF0aXZlX2hhbmRsZV90Kj4gaGFuZGxlc0NyZWF0ZWQ7CiAKKyAgICBzdGF0dXNfdCByZXMgPSBPSzsKICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGJhdGNoU2l6ZTsgaSsrKSB7CiAgICAgICAgIGlmIChoaWRsU2Vzc2lvbl8zXzQgIT0gbnVsbHB0cikgewotICAgICAgICAgICAgd3JhcEFzSGlkbFJlcXVlc3QocmVxdWVzdHNbaV0sIC8qb3V0Ki8mY2FwdHVyZVJlcXVlc3RzXzNfNFtpXS52M18yLAorICAgICAgICAgICAgcmVzID0gd3JhcEFzSGlkbFJlcXVlc3QocmVxdWVzdHNbaV0sIC8qb3V0Ki8mY2FwdHVyZVJlcXVlc3RzXzNfNFtpXS52M18yLAogICAgICAgICAgICAgICAgICAgICAvKm91dCovJmhhbmRsZXNDcmVhdGVkKTsKICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIHdyYXBBc0hpZGxSZXF1ZXN0KHJlcXVlc3RzW2ldLCAvKm91dCovJmNhcHR1cmVSZXF1ZXN0c1tpXSwgLypvdXQqLyZoYW5kbGVzQ3JlYXRlZCk7CisgICAgICAgICAgICByZXMgPSB3cmFwQXNIaWRsUmVxdWVzdChyZXF1ZXN0c1tpXSwKKyAgICAgICAgICAgICAgICAgICAgLypvdXQqLyZjYXB0dXJlUmVxdWVzdHNbaV0sIC8qb3V0Ki8maGFuZGxlc0NyZWF0ZWQpOworICAgICAgICB9CisgICAgICAgIGlmIChyZXMgIT0gT0spIHsKKyAgICAgICAgICAgIHJldHVybiByZXM7CiAgICAgICAgIH0KICAgICB9CiAKQEAgLTM5MzcsMTggKzQ0MDcsMTcgQEAKICAgICB9CiAKICAgICBoYXJkd2FyZTo6ZGV0YWlsczo6cmV0dXJuX3N0YXR1cyBlcnI7CisgICAgYXV0byByZXN1bHRDYWxsYmFjayA9CisgICAgICAgIFsmc3RhdHVzLCAmbnVtUmVxdWVzdFByb2Nlc3NlZF0gKGF1dG8gcywgdWludDMyX3QgbikgeworICAgICAgICAgICAgICAgIHN0YXR1cyA9IHM7CisgICAgICAgICAgICAgICAgKm51bVJlcXVlc3RQcm9jZXNzZWQgPSBuOworICAgICAgICB9OwogICAgIGlmIChoaWRsU2Vzc2lvbl8zXzQgIT0gbnVsbHB0cikgewogICAgICAgICBlcnIgPSBoaWRsU2Vzc2lvbl8zXzQtPnByb2Nlc3NDYXB0dXJlUmVxdWVzdF8zXzQoY2FwdHVyZVJlcXVlc3RzXzNfNCwgY2FjaGVzVG9SZW1vdmUsCi0gICAgICAgICAgICBbJnN0YXR1cywgJm51bVJlcXVlc3RQcm9jZXNzZWRdIChhdXRvIHMsIHVpbnQzMl90IG4pIHsKLSAgICAgICAgICAgICAgICBzdGF0dXMgPSBzOwotICAgICAgICAgICAgICAgICpudW1SZXF1ZXN0UHJvY2Vzc2VkID0gbjsKLSAgICAgICAgICAgIH0pOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0Q2FsbGJhY2spOwogICAgIH0gZWxzZSB7CiAgICAgICAgIGVyciA9IG1IaWRsU2Vzc2lvbi0+cHJvY2Vzc0NhcHR1cmVSZXF1ZXN0KGNhcHR1cmVSZXF1ZXN0cywgY2FjaGVzVG9SZW1vdmUsCi0gICAgICAgICAgICBbJnN0YXR1cywgJm51bVJlcXVlc3RQcm9jZXNzZWRdIChhdXRvIHMsIHVpbnQzMl90IG4pIHsKLSAgICAgICAgICAgICAgICBzdGF0dXMgPSBzOwotICAgICAgICAgICAgICAgICpudW1SZXF1ZXN0UHJvY2Vzc2VkID0gbjsKLSAgICAgICAgICAgIH0pOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHRDYWxsYmFjayk7CiAgICAgfQogICAgIGlmICghZXJyLmlzT2soKSkgewogICAgICAgICBBTE9HRSgiJXM6IFRyYW5zYWN0aW9uIGVycm9yOiAlcyIsIF9fRlVOQ1RJT05fXywgZXJyLmRlc2NyaXB0aW9uKCkuY19zdHIoKSk7CkBAIC00MDE5LDYgKzQ0ODgsMjAgQEAKICAgICByZXR1cm4gcmVzOwogfQogCit2b2lkIENhbWVyYTNEZXZpY2U6OkhhbEludGVyZmFjZTo6c2lnbmFsUGlwZWxpbmVEcmFpbihjb25zdCBzdGQ6OnZlY3RvcjxpbnQ+JiBzdHJlYW1JZHMpIHsKKyAgICBBVFJBQ0VfTkFNRSgiQ2FtZXJhSGFsOjpzaWduYWxQaXBlbGluZURyYWluIik7CisgICAgaWYgKCF2YWxpZCgpIHx8IG1IaWRsU2Vzc2lvbl8zXzUgPT0gbnVsbHB0cikgeworICAgICAgICBBTE9HRSgiJXMgY2FsbGVkIG9uIGludmFsaWQgY2FtZXJhISIsIF9fRlVOQ1RJT05fXyk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBhdXRvIGVyciA9IG1IaWRsU2Vzc2lvbl8zXzUtPnNpZ25hbFN0cmVhbUZsdXNoKHN0cmVhbUlkcywgbU5leHRTdHJlYW1Db25maWdDb3VudGVyKTsKKyAgICBpZiAoIWVyci5pc09rKCkpIHsKKyAgICAgICAgQUxPR0UoIiVzOiBUcmFuc2FjdGlvbiBlcnJvcjogJXMiLCBfX0ZVTkNUSU9OX18sIGVyci5kZXNjcmlwdGlvbigpLmNfc3RyKCkpOworICAgICAgICByZXR1cm47CisgICAgfQorfQorCiB2b2lkIENhbWVyYTNEZXZpY2U6OkhhbEludGVyZmFjZTo6Z2V0SW5mbGlnaHRCdWZmZXJLZXlzKAogICAgICAgICBzdGQ6OnZlY3RvcjxzdGQ6OnBhaXI8aW50MzJfdCwgaW50MzJfdD4+KiBvdXQpIHsKICAgICBzdGQ6OmxvY2tfZ3VhcmQ8c3RkOjptdXRleD4gbG9jayhtSW5mbGlnaHRMb2NrKTsKQEAgLTQwNTksNiArNDU0MiwzMyBAQAogICAgIHJldHVybiBPSzsKIH0KIAorc3RhdHVzX3QgQ2FtZXJhM0RldmljZTo6SGFsSW50ZXJmYWNlOjpwdXNoSW5mbGlnaHRSZXF1ZXN0QnVmZmVyKAorICAgICAgICB1aW50NjRfdCBidWZmZXJJZCwgYnVmZmVyX2hhbmRsZV90KiBidWYpIHsKKyAgICBzdGQ6OmxvY2tfZ3VhcmQ8c3RkOjptdXRleD4gbG9jayhtUmVxdWVzdGVkQnVmZmVyc0xvY2spOworICAgIGF1dG8gcGFpciA9IG1SZXF1ZXN0ZWRCdWZmZXJzLmluc2VydCh7YnVmZmVySWQsIGJ1Zn0pOworICAgIGlmICghcGFpci5zZWNvbmQpIHsKKyAgICAgICAgQUxPR0UoIiVzOiBidWZJZCAlIiBQUkl1NjQgIiBpcyBhbHJlYWR5IGluZmxpZ2h0ISIsCisgICAgICAgICAgICAgICAgX19GVU5DVElPTl9fLCBidWZmZXJJZCk7CisgICAgICAgIHJldHVybiBCQURfVkFMVUU7CisgICAgfQorICAgIHJldHVybiBPSzsKK30KKworLy8gRmluZCBhbmQgcG9wIGEgYnVmZmVyX2hhbmRsZV90IGJhc2VkIG9uIGJ1ZmZlcklkCitzdGF0dXNfdCBDYW1lcmEzRGV2aWNlOjpIYWxJbnRlcmZhY2U6OnBvcEluZmxpZ2h0UmVxdWVzdEJ1ZmZlcigKKyAgICAgICAgdWludDY0X3QgYnVmZmVySWQsIC8qb3V0Ki8gYnVmZmVyX2hhbmRsZV90ICoqYnVmZmVyKSB7CisgICAgc3RkOjpsb2NrX2d1YXJkPHN0ZDo6bXV0ZXg+IGxvY2sobVJlcXVlc3RlZEJ1ZmZlcnNMb2NrKTsKKyAgICBhdXRvIGl0ID0gbVJlcXVlc3RlZEJ1ZmZlcnMuZmluZChidWZmZXJJZCk7CisgICAgaWYgKGl0ID09IG1SZXF1ZXN0ZWRCdWZmZXJzLmVuZCgpKSB7CisgICAgICAgIEFMT0dFKCIlczogYnVmSWQgJSIgUFJJdTY0ICIgaXMgbm90IGluZmxpZ2h0ISIsCisgICAgICAgICAgICAgICAgX19GVU5DVElPTl9fLCBidWZmZXJJZCk7CisgICAgICAgIHJldHVybiBCQURfVkFMVUU7CisgICAgfQorICAgICpidWZmZXIgPSBpdC0+c2Vjb25kOworICAgIG1SZXF1ZXN0ZWRCdWZmZXJzLmVyYXNlKGl0KTsKKyAgICByZXR1cm4gT0s7Cit9CisKIHN0ZDo6cGFpcjxib29sLCB1aW50NjRfdD4gQ2FtZXJhM0RldmljZTo6SGFsSW50ZXJmYWNlOjpnZXRCdWZmZXJJZCgKICAgICAgICAgY29uc3QgYnVmZmVyX2hhbmRsZV90JiBidWYsIGludCBzdHJlYW1JZCkgewogICAgIHN0ZDo6bG9ja19ndWFyZDxzdGQ6Om11dGV4PiBsb2NrKG1CdWZmZXJJZE1hcExvY2spOwpAQCAtNDEwNyw3ICs0NjE3LDggQEAKIAogQ2FtZXJhM0RldmljZTo6UmVxdWVzdFRocmVhZDo6UmVxdWVzdFRocmVhZCh3cDxDYW1lcmEzRGV2aWNlPiBwYXJlbnQsCiAgICAgICAgIHNwPFN0YXR1c1RyYWNrZXI+IHN0YXR1c1RyYWNrZXIsCi0gICAgICAgIHNwPEhhbEludGVyZmFjZT4gaW50ZXJmYWNlLCBjb25zdCBWZWN0b3I8aW50MzJfdD4mIHNlc3Npb25QYXJhbUtleXMpIDoKKyAgICAgICAgc3A8SGFsSW50ZXJmYWNlPiBpbnRlcmZhY2UsIGNvbnN0IFZlY3RvcjxpbnQzMl90PiYgc2Vzc2lvblBhcmFtS2V5cywKKyAgICAgICAgYm9vbCB1c2VIYWxCdWZNYW5hZ2VyKSA6CiAgICAgICAgIFRocmVhZCgvKmNhbkNhbGxKYXZhKi9mYWxzZSksCiAgICAgICAgIG1QYXJlbnQocGFyZW50KSwKICAgICAgICAgbVN0YXR1c1RyYWNrZXIoc3RhdHVzVHJhY2tlciksCkBAIC00MTE3LDYgKzQ2MjgsNyBAQAogICAgICAgICBtUmVjb25maWd1cmVkKGZhbHNlKSwKICAgICAgICAgbURvUGF1c2UoZmFsc2UpLAogICAgICAgICBtUGF1c2VkKHRydWUpLAorICAgICAgICBtTm90aWZ5UGlwZWxpbmVEcmFpbihmYWxzZSksCiAgICAgICAgIG1GcmFtZU51bWJlcigwKSwKICAgICAgICAgbUxhdGVzdFJlcXVlc3RJZChOQU1FX05PVF9GT1VORCksCiAgICAgICAgIG1DdXJyZW50QWZUcmlnZ2VySWQoMCksCkBAIC00MTI3LDcgKzQ2MzksOCBAQAogICAgICAgICBtQ29uc3RyYWluZWRNb2RlKGZhbHNlKSwKICAgICAgICAgbVJlcXVlc3RMYXRlbmN5KGtSZXF1ZXN0TGF0ZW5jeUJpblNpemUpLAogICAgICAgICBtU2Vzc2lvblBhcmFtS2V5cyhzZXNzaW9uUGFyYW1LZXlzKSwKLSAgICAgICAgbUxhdGVzdFNlc3Npb25QYXJhbXMoc2Vzc2lvblBhcmFtS2V5cy5zaXplKCkpIHsKKyAgICAgICAgbUxhdGVzdFNlc3Npb25QYXJhbXMoc2Vzc2lvblBhcmFtS2V5cy5zaXplKCkpLAorICAgICAgICBtVXNlSGFsQnVmTWFuYWdlcih1c2VIYWxCdWZNYW5hZ2VyKSB7CiAgICAgbVN0YXR1c0lkID0gc3RhdHVzVHJhY2tlci0+YWRkQ29tcG9uZW50KCk7CiB9CiAKQEAgLTQ3NDIsNiArNTI1NSwxMyBAQAogICAgIG5zZWNzX3QgdFJlcXVlc3RFbmQgPSBzeXN0ZW1UaW1lKFNZU1RFTV9USU1FX01PTk9UT05JQyk7CiAgICAgbVJlcXVlc3RMYXRlbmN5LmFkZCh0UmVxdWVzdFN0YXJ0LCB0UmVxdWVzdEVuZCk7CiAKKyAgICBpZiAoc3VibWl0UmVxdWVzdFN1Y2Nlc3MpIHsKKyAgICAgICAgc3A8Q2FtZXJhM0RldmljZT4gcGFyZW50ID0gbVBhcmVudC5wcm9tb3RlKCk7CisgICAgICAgIGlmIChwYXJlbnQgIT0gbnVsbHB0cikgeworICAgICAgICAgICAgcGFyZW50LT5tUmVxdWVzdEJ1ZmZlclNNLm9uUmVxdWVzdFN1Ym1pdHRlZCgpOworICAgICAgICB9CisgICAgfQorCiAgICAgaWYgKHVzZUZsdXNoTG9jaykgewogICAgICAgICBtRmx1c2hMb2NrLnVubG9jaygpOwogICAgIH0KQEAgLTQ3NTgsNiArNTI3OCw3IEBACiBzdGF0dXNfdCBDYW1lcmEzRGV2aWNlOjpSZXF1ZXN0VGhyZWFkOjpwcmVwYXJlSGFsUmVxdWVzdHMoKSB7CiAgICAgQVRSQUNFX0NBTEwoKTsKIAorICAgIGJvb2wgYmF0Y2hlZFJlcXVlc3QgPSBtTmV4dFJlcXVlc3RzWzBdLmNhcHR1cmVSZXF1ZXN0LT5tQmF0Y2hTaXplID4gMTsKICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1OZXh0UmVxdWVzdHMuc2l6ZSgpOyBpKyspIHsKICAgICAgICAgYXV0byYgbmV4dFJlcXVlc3QgPSBtTmV4dFJlcXVlc3RzLmVkaXRJdGVtQXQoaSk7CiAgICAgICAgIHNwPENhcHR1cmVSZXF1ZXN0PiBjYXB0dXJlUmVxdWVzdCA9IG5leHRSZXF1ZXN0LmNhcHR1cmVSZXF1ZXN0OwpAQCAtNDc4MSw3ICs1MzAyLDEwIEBACiAgICAgICAgIG1QcmV2VHJpZ2dlcnMgPSB0cmlnZ2VyQ291bnQ7CiAKICAgICAgICAgLy8gSWYgdGhlIHJlcXVlc3QgaXMgdGhlIHNhbWUgYXMgbGFzdCwgb3Igd2UgaGFkIHRyaWdnZXJzIGxhc3QgdGltZQotICAgICAgICBib29sIG5ld1JlcXVlc3QgPSBtUHJldlJlcXVlc3QgIT0gY2FwdHVyZVJlcXVlc3QgfHwgdHJpZ2dlcnNNaXhlZEluOworICAgICAgICBib29sIG5ld1JlcXVlc3QgPSAobVByZXZSZXF1ZXN0ICE9IGNhcHR1cmVSZXF1ZXN0IHx8IHRyaWdnZXJzTWl4ZWRJbikgJiYKKyAgICAgICAgICAgICAgICAvLyBSZXF1ZXN0IHNldHRpbmdzIGFyZSBhbGwgdGhlIHNhbWUgd2l0aGluIG9uZSBiYXRjaCwgc28gb25seSB0cmVhdCB0aGUgZmlyc3QKKyAgICAgICAgICAgICAgICAvLyByZXF1ZXN0IGluIGEgYmF0Y2ggYXMgbmV3CisgICAgICAgICAgICAgICAgIShiYXRjaGVkUmVxdWVzdCAmJiBpID4gMCk7CiAgICAgICAgIGlmIChuZXdSZXF1ZXN0KSB7CiAgICAgICAgICAgICAvKioKICAgICAgICAgICAgICAqIEhBTCB3b3JrYXJvdW5kOgpAQCAtNDg4Miw4ICs1NDA2LDExIEBACiAgICAgICAgIH0KICAgICAgICAgbnNlY3NfdCB3YWl0RHVyYXRpb24gPSBrQmFzZUdldEJ1ZmZlcldhaXQgKyBwYXJlbnQtPmdldEV4cGVjdGVkSW5GbGlnaHREdXJhdGlvbigpOwogCisgICAgICAgIFN1cmZhY2VNYXAgdW5pcXVlU3VyZmFjZUlkTWFwOwogICAgICAgICBmb3IgKHNpemVfdCBqID0gMDsgaiA8IGNhcHR1cmVSZXF1ZXN0LT5tT3V0cHV0U3RyZWFtcy5zaXplKCk7IGorKykgewotICAgICAgICAgICAgc3A8Q2FtZXJhM091dHB1dFN0cmVhbUludGVyZmFjZT4gb3V0cHV0U3RyZWFtID0gY2FwdHVyZVJlcXVlc3QtPm1PdXRwdXRTdHJlYW1zLmVkaXRJdGVtQXQoaik7CisgICAgICAgICAgICBzcDxDYW1lcmEzT3V0cHV0U3RyZWFtSW50ZXJmYWNlPiBvdXRwdXRTdHJlYW0gPQorICAgICAgICAgICAgICAgICAgICBjYXB0dXJlUmVxdWVzdC0+bU91dHB1dFN0cmVhbXMuZWRpdEl0ZW1BdChqKTsKKyAgICAgICAgICAgIGludCBzdHJlYW1JZCA9IG91dHB1dFN0cmVhbS0+Z2V0SWQoKTsKIAogICAgICAgICAgICAgLy8gUHJlcGFyZSB2aWRlbyBidWZmZXJzIGZvciBoaWdoIHNwZWVkIHJlY29yZGluZyBvbiB0aGUgZmlyc3QgdmlkZW8gcmVxdWVzdC4KICAgICAgICAgICAgIGlmIChtUHJlcGFyZVZpZGVvU3RyZWFtICYmIG91dHB1dFN0cmVhbS0+aXNWaWRlb1N0cmVhbSgpKSB7CkBAIC00OTAyLDE3ICs1NDI5LDQ1IEBACiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQogCi0gICAgICAgICAgICByZXMgPSBvdXRwdXRTdHJlYW0tPmdldEJ1ZmZlcigmb3V0cHV0QnVmZmVycy0+ZWRpdEl0ZW1BdChqKSwKLSAgICAgICAgICAgICAgICAgICAgd2FpdER1cmF0aW9uLAotICAgICAgICAgICAgICAgICAgICBjYXB0dXJlUmVxdWVzdC0+bU91dHB1dFN1cmZhY2VzW2pdKTsKLSAgICAgICAgICAgIGlmIChyZXMgIT0gT0spIHsKLSAgICAgICAgICAgICAgICAvLyBDYW4ndCBnZXQgb3V0cHV0IGJ1ZmZlciBmcm9tIGdyYWxsb2MgcXVldWUgLSB0aGlzIGNvdWxkIGJlIGR1ZSB0bwotICAgICAgICAgICAgICAgIC8vIGFiYW5kb25lZCBxdWV1ZSBvciBvdGhlciBjb25zdW1lciBtaXNiZWhhdmlvciwgc28gbm90IGEgZmF0YWwKLSAgICAgICAgICAgICAgICAvLyBlcnJvcgotICAgICAgICAgICAgICAgIEFMT0dFKCJSZXF1ZXN0VGhyZWFkOiBDYW4ndCBnZXQgb3V0cHV0IGJ1ZmZlciwgc2tpcHBpbmcgcmVxdWVzdDoiCi0gICAgICAgICAgICAgICAgICAgICAgICAiICVzICglZCkiLCBzdHJlcnJvcigtcmVzKSwgcmVzKTsKKyAgICAgICAgICAgIHN0ZDo6dmVjdG9yPHNpemVfdD4gdW5pcXVlU3VyZmFjZUlkczsKKyAgICAgICAgICAgIHJlcyA9IG91dHB1dFN0cmVhbS0+Z2V0VW5pcXVlU3VyZmFjZUlkcygKKyAgICAgICAgICAgICAgICAgICAgY2FwdHVyZVJlcXVlc3QtPm1PdXRwdXRTdXJmYWNlc1tzdHJlYW1JZF0sCisgICAgICAgICAgICAgICAgICAgICZ1bmlxdWVTdXJmYWNlSWRzKTsKKyAgICAgICAgICAgIC8vIElOVkFMSURfT1BFUkFUSU9OIGlzIG5vcm1hbCBvdXRwdXQgZm9yIHN0cmVhbXMgbm90IHN1cHBvcnRpbmcgc3VyZmFjZUlkcworICAgICAgICAgICAgaWYgKHJlcyAhPSBPSyAmJiByZXMgIT0gSU5WQUxJRF9PUEVSQVRJT04pIHsKKyAgICAgICAgICAgICAgICBBTE9HRSgiJXM6IGZhaWxlZCB0byBxdWVyeSBzdHJlYW0gJWQgdW5pcXVlIHN1cmZhY2UgSURzIiwKKyAgICAgICAgICAgICAgICAgICAgICAgIF9fRlVOQ1RJT05fXywgc3RyZWFtSWQpOworICAgICAgICAgICAgICAgIHJldHVybiByZXM7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAocmVzID09IE9LKSB7CisgICAgICAgICAgICAgICAgdW5pcXVlU3VyZmFjZUlkTWFwLmluc2VydCh7c3RyZWFtSWQsIHN0ZDo6bW92ZSh1bmlxdWVTdXJmYWNlSWRzKX0pOworICAgICAgICAgICAgfQogCi0gICAgICAgICAgICAgICAgcmV0dXJuIFRJTUVEX09VVDsKKyAgICAgICAgICAgIGlmIChtVXNlSGFsQnVmTWFuYWdlcikgeworICAgICAgICAgICAgICAgIGlmIChvdXRwdXRTdHJlYW0tPmlzQWJhbmRvbmVkKCkpIHsKKyAgICAgICAgICAgICAgICAgICAgQUxPR0UoIiVzOiBzdHJlYW0gJWQgaXMgYWJhbmRvbmVkLiIsIF9fRlVOQ1RJT05fXywgc3RyZWFtSWQpOworICAgICAgICAgICAgICAgICAgICByZXR1cm4gVElNRURfT1VUOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAvLyBIQUwgd2lsbCByZXF1ZXN0IGJ1ZmZlciB0aHJvdWdoIHJlcXVlc3RTdHJlYW1CdWZmZXIgQVBJCisgICAgICAgICAgICAgICAgY2FtZXJhM19zdHJlYW1fYnVmZmVyX3QmIGJ1ZmZlciA9IG91dHB1dEJ1ZmZlcnMtPmVkaXRJdGVtQXQoaik7CisgICAgICAgICAgICAgICAgYnVmZmVyLnN0cmVhbSA9IG91dHB1dFN0cmVhbS0+YXNIYWxTdHJlYW0oKTsKKyAgICAgICAgICAgICAgICBidWZmZXIuYnVmZmVyID0gbnVsbHB0cjsKKyAgICAgICAgICAgICAgICBidWZmZXIuc3RhdHVzID0gQ0FNRVJBM19CVUZGRVJfU1RBVFVTX09LOworICAgICAgICAgICAgICAgIGJ1ZmZlci5hY3F1aXJlX2ZlbmNlID0gLTE7CisgICAgICAgICAgICAgICAgYnVmZmVyLnJlbGVhc2VfZmVuY2UgPSAtMTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgcmVzID0gb3V0cHV0U3RyZWFtLT5nZXRCdWZmZXIoJm91dHB1dEJ1ZmZlcnMtPmVkaXRJdGVtQXQoaiksCisgICAgICAgICAgICAgICAgICAgICAgICB3YWl0RHVyYXRpb24sCisgICAgICAgICAgICAgICAgICAgICAgICBjYXB0dXJlUmVxdWVzdC0+bU91dHB1dFN1cmZhY2VzW3N0cmVhbUlkXSk7CisgICAgICAgICAgICAgICAgaWYgKHJlcyAhPSBPSykgeworICAgICAgICAgICAgICAgICAgICAvLyBDYW4ndCBnZXQgb3V0cHV0IGJ1ZmZlciBmcm9tIGdyYWxsb2MgcXVldWUgLSB0aGlzIGNvdWxkIGJlIGR1ZSB0bworICAgICAgICAgICAgICAgICAgICAvLyBhYmFuZG9uZWQgcXVldWUgb3Igb3RoZXIgY29uc3VtZXIgbWlzYmVoYXZpb3IsIHNvIG5vdCBhIGZhdGFsCisgICAgICAgICAgICAgICAgICAgIC8vIGVycm9yCisgICAgICAgICAgICAgICAgICAgIEFMT0dFKCJSZXF1ZXN0VGhyZWFkOiBDYW4ndCBnZXQgb3V0cHV0IGJ1ZmZlciwgc2tpcHBpbmcgcmVxdWVzdDoiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiAlcyAoJWQpIiwgc3RyZXJyb3IoLXJlcyksIHJlcyk7CisKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFRJTUVEX09VVDsKKyAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9CiAKICAgICAgICAgICAgIFN0cmluZzggcGh5c2ljYWxDYW1lcmFJZCA9IG91dHB1dFN0cmVhbS0+Z2V0UGh5c2ljYWxDYW1lcmFJZCgpOwpAQCAtNDkzNCwxNSArNTQ4OSwzMiBAQAogICAgICAgICAvLyBwcmV2aWV3KSwgYW5kIHRoZSBjdXJyZW50IHJlcXVlc3QgaXMgbm90IHRoZSBsYXN0IG9uZSBpbiB0aGUgYmF0Y2gsCiAgICAgICAgIC8vIGRvIG5vdCBzZW5kIGNhbGxiYWNrIHRvIHRoZSBhcHAuCiAgICAgICAgIGJvb2wgaGFzQ2FsbGJhY2sgPSB0cnVlOwotICAgICAgICBpZiAobU5leHRSZXF1ZXN0c1swXS5jYXB0dXJlUmVxdWVzdC0+bUJhdGNoU2l6ZSA+IDEgJiYgaSAhPSBtTmV4dFJlcXVlc3RzLnNpemUoKS0xKSB7CisgICAgICAgIGlmIChiYXRjaGVkUmVxdWVzdCAmJiBpICE9IG1OZXh0UmVxdWVzdHMuc2l6ZSgpLTEpIHsKICAgICAgICAgICAgIGhhc0NhbGxiYWNrID0gZmFsc2U7CiAgICAgICAgIH0KKyAgICAgICAgYm9vbCBpc1N0aWxsQ2FwdHVyZSA9IGZhbHNlOworICAgICAgICBib29sIGlzWnNsQ2FwdHVyZSA9IGZhbHNlOworICAgICAgICBpZiAoIW1OZXh0UmVxdWVzdHNbMF0uY2FwdHVyZVJlcXVlc3QtPm1TZXR0aW5nc0xpc3QuYmVnaW4oKS0+bWV0YWRhdGEuaXNFbXB0eSgpKSB7CisgICAgICAgICAgICBjYW1lcmFfbWV0YWRhdGFfcm9fZW50cnlfdCBlID0gY2FtZXJhX21ldGFkYXRhX3JvX2VudHJ5X3QoKTsKKyAgICAgICAgICAgIGZpbmRfY2FtZXJhX21ldGFkYXRhX3JvX2VudHJ5KGhhbFJlcXVlc3QtPnNldHRpbmdzLCBBTkRST0lEX0NPTlRST0xfQ0FQVFVSRV9JTlRFTlQsICZlKTsKKyAgICAgICAgICAgIGlmICgoZS5jb3VudCA+IDApICYmIChlLmRhdGEudThbMF0gPT0gQU5EUk9JRF9DT05UUk9MX0NBUFRVUkVfSU5URU5UX1NUSUxMX0NBUFRVUkUpKSB7CisgICAgICAgICAgICAgICAgaXNTdGlsbENhcHR1cmUgPSB0cnVlOworICAgICAgICAgICAgICAgIEFUUkFDRV9BU1lOQ19CRUdJTigic3RpbGwgY2FwdHVyZSIsIG1OZXh0UmVxdWVzdHNbaV0uaGFsUmVxdWVzdC5mcmFtZV9udW1iZXIpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBmaW5kX2NhbWVyYV9tZXRhZGF0YV9yb19lbnRyeShoYWxSZXF1ZXN0LT5zZXR0aW5ncywgQU5EUk9JRF9DT05UUk9MX0VOQUJMRV9aU0wsICZlKTsKKyAgICAgICAgICAgIGlmICgoZS5jb3VudCA+IDApICYmIChlLmRhdGEudThbMF0gPT0gQU5EUk9JRF9DT05UUk9MX0VOQUJMRV9aU0xfVFJVRSkpIHsKKyAgICAgICAgICAgICAgICBpc1pzbENhcHR1cmUgPSB0cnVlOworICAgICAgICAgICAgfQorICAgICAgICB9CiAgICAgICAgIHJlcyA9IHBhcmVudC0+cmVnaXN0ZXJJbkZsaWdodChoYWxSZXF1ZXN0LT5mcmFtZV9udW1iZXIsCiAgICAgICAgICAgICAgICAgdG90YWxOdW1CdWZmZXJzLCBjYXB0dXJlUmVxdWVzdC0+bVJlc3VsdEV4dHJhcywKICAgICAgICAgICAgICAgICAvKmhhc0lucHV0Ki9oYWxSZXF1ZXN0LT5pbnB1dF9idWZmZXIgIT0gTlVMTCwKICAgICAgICAgICAgICAgICBoYXNDYWxsYmFjaywKICAgICAgICAgICAgICAgICBjYWxjdWxhdGVNYXhFeHBlY3RlZER1cmF0aW9uKGhhbFJlcXVlc3QtPnNldHRpbmdzKSwKLSAgICAgICAgICAgICAgICByZXF1ZXN0ZWRQaHlzaWNhbENhbWVyYXMpOworICAgICAgICAgICAgICAgIHJlcXVlc3RlZFBoeXNpY2FsQ2FtZXJhcywgaXNTdGlsbENhcHR1cmUsIGlzWnNsQ2FwdHVyZSwKKyAgICAgICAgICAgICAgICAobVVzZUhhbEJ1Zk1hbmFnZXIpID8gdW5pcXVlU3VyZmFjZUlkTWFwIDoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3VyZmFjZU1hcHt9KTsKICAgICAgICAgQUxPR1ZWKCIlczogcmVnaXN0ZXJlZCBpbiBmbGlnaHQgcmVxdWVzdElkID0gJSIgUFJJZDMyICIsIGZyYW1lTnVtYmVyID0gJSIgUFJJZDY0CiAgICAgICAgICAgICAgICAiLCBidXJzdElkID0gJSIgUFJJZDMyICIuIiwKICAgICAgICAgICAgICAgICBfX0ZVTkNUSU9OX18sCkBAIC01MDE4LDcgKzU1OTAsNyBAQAogICAgICAgICAgICAgaWYgKHMuZmlyc3QgPT0gc3RyZWFtSWQpIHsKICAgICAgICAgICAgICAgICBjb25zdCBhdXRvICZpdCA9IHN0ZDo6ZmluZChzLnNlY29uZC5iZWdpbigpLCBzLnNlY29uZC5lbmQoKSwgc3VyZmFjZUlkKTsKICAgICAgICAgICAgICAgICBpZiAoaXQgIT0gcy5zZWNvbmQuZW5kKCkpIHsKLSAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KQEAgLTUwMjksNyArNTYwMSw3IEBACiAgICAgICAgICAgICBpZiAocy5maXJzdCA9PSBzdHJlYW1JZCkgewogICAgICAgICAgICAgICAgIGNvbnN0IGF1dG8gJml0ID0gc3RkOjpmaW5kKHMuc2Vjb25kLmJlZ2luKCksIHMuc2Vjb25kLmVuZCgpLCBzdXJmYWNlSWQpOwogICAgICAgICAgICAgICAgIGlmIChpdCAhPSBzLnNlY29uZC5lbmQoKSkgewotICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KICAgICAgICAgfQpAQCAtNTAzOCw2ICs1NjEwLDIyIEBACiAgICAgcmV0dXJuIGZhbHNlOwogfQogCit2b2lkIENhbWVyYTNEZXZpY2U6OlJlcXVlc3RUaHJlYWQ6OnNpZ25hbFBpcGVsaW5lRHJhaW4oY29uc3Qgc3RkOjp2ZWN0b3I8aW50PiYgc3RyZWFtSWRzKSB7CisgICAgaWYgKCFtVXNlSGFsQnVmTWFuYWdlcikgeworICAgICAgICBBTE9HRSgiJXMgY2FsbGVkIGZvciBjYW1lcmEgZGV2aWNlIG5vdCBzdXBwb3J0aW5nIEhBTCBidWZmZXIgbWFuYWdlbWVudCIsIF9fRlVOQ1RJT05fXyk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBNdXRleDo6QXV0b2xvY2sgcGwobVBhdXNlTG9jayk7CisgICAgaWYgKG1QYXVzZWQpIHsKKyAgICAgICAgbUludGVyZmFjZS0+c2lnbmFsUGlwZWxpbmVEcmFpbihzdHJlYW1JZHMpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIC8vIElmIHJlcXVlc3QgdGhyZWFkIGlzIHN0aWxsIGJ1c3ksIHdhaXQgdW50aWwgcGF1c2VkIHRoZW4gbm90aWZ5IEhBTAorICAgIG1Ob3RpZnlQaXBlbGluZURyYWluID0gdHJ1ZTsKKyAgICBtU3RyZWFtSWRzVG9CZURyYWluZWQgPSBzdHJlYW1JZHM7Cit9CisKIG5zZWNzX3QgQ2FtZXJhM0RldmljZTo6Z2V0RXhwZWN0ZWRJbkZsaWdodER1cmF0aW9uKCkgewogICAgIEFUUkFDRV9DQUxMKCk7CiAgICAgTXV0ZXg6OkF1dG9sb2NrIGFsKG1JbkZsaWdodExvY2spOwpAQCAtNTIxNSw2ICs1ODAzLDE1IEBACiAgICAgICAgICAgICAgICAgaWYgKHN0YXR1c1RyYWNrZXIgIT0gMCkgewogICAgICAgICAgICAgICAgICAgICBzdGF0dXNUcmFja2VyLT5tYXJrQ29tcG9uZW50SWRsZShtU3RhdHVzSWQsIEZlbmNlOjpOT19GRU5DRSk7CiAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGlmIChtTm90aWZ5UGlwZWxpbmVEcmFpbikgeworICAgICAgICAgICAgICAgICAgICBtSW50ZXJmYWNlLT5zaWduYWxQaXBlbGluZURyYWluKG1TdHJlYW1JZHNUb0JlRHJhaW5lZCk7CisgICAgICAgICAgICAgICAgICAgIG1Ob3RpZnlQaXBlbGluZURyYWluID0gZmFsc2U7CisgICAgICAgICAgICAgICAgICAgIG1TdHJlYW1JZHNUb0JlRHJhaW5lZC5jbGVhcigpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBzcDxDYW1lcmEzRGV2aWNlPiBwYXJlbnQgPSBtUGFyZW50LnByb21vdGUoKTsKKyAgICAgICAgICAgICAgICBpZiAocGFyZW50ICE9IG51bGxwdHIpIHsKKyAgICAgICAgICAgICAgICAgICAgcGFyZW50LT5tUmVxdWVzdEJ1ZmZlclNNLm9uUmVxdWVzdFRocmVhZFBhdXNlZCgpOworICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KICAgICAgICAgICAgIC8vIFN0b3Agd2FpdGluZyBmb3Igbm93IGFuZCBsZXQgdGhyZWFkIG1hbmFnZW1lbnQgaGFwcGVuCiAgICAgICAgICAgICByZXR1cm4gTlVMTDsKQEAgLTUyOTksNiArNTg5NiwxNSBAQAogICAgICAgICAgICAgaWYgKHN0YXR1c1RyYWNrZXIgIT0gMCkgewogICAgICAgICAgICAgICAgIHN0YXR1c1RyYWNrZXItPm1hcmtDb21wb25lbnRJZGxlKG1TdGF0dXNJZCwgRmVuY2U6Ok5PX0ZFTkNFKTsKICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChtTm90aWZ5UGlwZWxpbmVEcmFpbikgeworICAgICAgICAgICAgICAgIG1JbnRlcmZhY2UtPnNpZ25hbFBpcGVsaW5lRHJhaW4obVN0cmVhbUlkc1RvQmVEcmFpbmVkKTsKKyAgICAgICAgICAgICAgICBtTm90aWZ5UGlwZWxpbmVEcmFpbiA9IGZhbHNlOworICAgICAgICAgICAgICAgIG1TdHJlYW1JZHNUb0JlRHJhaW5lZC5jbGVhcigpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgc3A8Q2FtZXJhM0RldmljZT4gcGFyZW50ID0gbVBhcmVudC5wcm9tb3RlKCk7CisgICAgICAgICAgICBpZiAocGFyZW50ICE9IG51bGxwdHIpIHsKKyAgICAgICAgICAgICAgICBwYXJlbnQtPm1SZXF1ZXN0QnVmZmVyU00ub25SZXF1ZXN0VGhyZWFkUGF1c2VkKCk7CisgICAgICAgICAgICB9CiAgICAgICAgIH0KIAogICAgICAgICByZXMgPSBtRG9QYXVzZVNpZ25hbC53YWl0UmVsYXRpdmUobVBhdXNlTG9jaywga1JlcXVlc3RUaW1lb3V0KTsKQEAgLTU3NTQsMjMgKzYzNjAsMTcyIEBACiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLS8qKgotICogU3RhdGljIGNhbGxiYWNrIGZvcndhcmRpbmcgbWV0aG9kcyBmcm9tIEhBTCB0byBpbnN0YW5jZQotICovCitzdGF0dXNfdCBDYW1lcmEzRGV2aWNlOjpSZXF1ZXN0QnVmZmVyU3RhdGVNYWNoaW5lOjppbml0aWFsaXplKAorICAgICAgICBzcDxjYW1lcmEzOjpTdGF0dXNUcmFja2VyPiBzdGF0dXNUcmFja2VyKSB7CisgICAgaWYgKHN0YXR1c1RyYWNrZXIgPT0gbnVsbHB0cikgeworICAgICAgICBBTE9HRSgiJXM6IHN0YXR1c1RyYWNrZXIgaXMgbnVsbCIsIF9fRlVOQ1RJT05fXyk7CisgICAgICAgIHJldHVybiBCQURfVkFMVUU7CisgICAgfQogCi12b2lkIENhbWVyYTNEZXZpY2U6OnNQcm9jZXNzQ2FwdHVyZVJlc3VsdChjb25zdCBjYW1lcmEzX2NhbGxiYWNrX29wcyAqY2IsCi0gICAgICAgIGNvbnN0IGNhbWVyYTNfY2FwdHVyZV9yZXN1bHQgKnJlc3VsdCkgewotICAgIENhbWVyYTNEZXZpY2UgKmQgPQotICAgICAgICAgICAgY29uc3RfY2FzdDxDYW1lcmEzRGV2aWNlKj4oc3RhdGljX2Nhc3Q8Y29uc3QgQ2FtZXJhM0RldmljZSo+KGNiKSk7Ci0KLSAgICBkLT5wcm9jZXNzQ2FwdHVyZVJlc3VsdChyZXN1bHQpOworICAgIHN0ZDo6bG9ja19ndWFyZDxzdGQ6Om11dGV4PiBsb2NrKG1Mb2NrKTsKKyAgICBtU3RhdHVzVHJhY2tlciA9IHN0YXR1c1RyYWNrZXI7CisgICAgbVJlcXVlc3RCdWZmZXJTdGF0dXNJZCA9IHN0YXR1c1RyYWNrZXItPmFkZENvbXBvbmVudCgpOworICAgIHJldHVybiBPSzsKIH0KIAotdm9pZCBDYW1lcmEzRGV2aWNlOjpzTm90aWZ5KGNvbnN0IGNhbWVyYTNfY2FsbGJhY2tfb3BzICpjYiwKLSAgICAgICAgY29uc3QgY2FtZXJhM19ub3RpZnlfbXNnICptc2cpIHsKLSAgICBDYW1lcmEzRGV2aWNlICpkID0KLSAgICAgICAgICAgIGNvbnN0X2Nhc3Q8Q2FtZXJhM0RldmljZSo+KHN0YXRpY19jYXN0PGNvbnN0IENhbWVyYTNEZXZpY2UqPihjYikpOwotICAgIGQtPm5vdGlmeShtc2cpOworYm9vbCBDYW1lcmEzRGV2aWNlOjpSZXF1ZXN0QnVmZmVyU3RhdGVNYWNoaW5lOjpzdGFydFJlcXVlc3RCdWZmZXIoKSB7CisgICAgc3RkOjpsb2NrX2d1YXJkPHN0ZDo6bXV0ZXg+IGxvY2sobUxvY2spOworICAgIGlmIChtU3RhdHVzID09IFJCX1NUQVRVU19SRUFEWSB8fCBtU3RhdHVzID09IFJCX1NUQVRVU19QRU5ESU5HX1NUT1ApIHsKKyAgICAgICAgbVJlcXVlc3RCdWZmZXJPbmdvaW5nID0gdHJ1ZTsKKyAgICAgICAgbm90aWZ5VHJhY2tlckxvY2tlZCgvKmFjdGl2ZSovdHJ1ZSk7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK3ZvaWQgQ2FtZXJhM0RldmljZTo6UmVxdWVzdEJ1ZmZlclN0YXRlTWFjaGluZTo6ZW5kUmVxdWVzdEJ1ZmZlcigpIHsKKyAgICBzdGQ6OmxvY2tfZ3VhcmQ8c3RkOjptdXRleD4gbG9jayhtTG9jayk7CisgICAgaWYgKCFtUmVxdWVzdEJ1ZmZlck9uZ29pbmcpIHsKKyAgICAgICAgQUxPR0UoIiVzIGNhbGxlZCB3aXRob3V0IGEgc3VjY2Vzc2Z1bCBzdGFydFJlcXVlc3RCdWZmZXIgY2FsbCBmaXJzdCEiLCBfX0ZVTkNUSU9OX18pOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIG1SZXF1ZXN0QnVmZmVyT25nb2luZyA9IGZhbHNlOworICAgIGlmIChtU3RhdHVzID09IFJCX1NUQVRVU19QRU5ESU5HX1NUT1ApIHsKKyAgICAgICAgY2hlY2tTd2l0Y2hUb1N0b3BMb2NrZWQoKTsKKyAgICB9CisgICAgbm90aWZ5VHJhY2tlckxvY2tlZCgvKmFjdGl2ZSovZmFsc2UpOworfQorCit2b2lkIENhbWVyYTNEZXZpY2U6OlJlcXVlc3RCdWZmZXJTdGF0ZU1hY2hpbmU6Om9uU3RyZWFtc0NvbmZpZ3VyZWQoKSB7CisgICAgc3RkOjpsb2NrX2d1YXJkPHN0ZDo6bXV0ZXg+IGxvY2sobUxvY2spOworICAgIG1TdGF0dXMgPSBSQl9TVEFUVVNfUkVBRFk7CisgICAgcmV0dXJuOworfQorCit2b2lkIENhbWVyYTNEZXZpY2U6OlJlcXVlc3RCdWZmZXJTdGF0ZU1hY2hpbmU6Om9uUmVxdWVzdFN1Ym1pdHRlZCgpIHsKKyAgICBzdGQ6OmxvY2tfZ3VhcmQ8c3RkOjptdXRleD4gbG9jayhtTG9jayk7CisgICAgbVJlcXVlc3RUaHJlYWRQYXVzZWQgPSBmYWxzZTsKKyAgICBtSW5mbGlnaHRNYXBFbXB0eSA9IGZhbHNlOworICAgIGlmIChtU3RhdHVzID09IFJCX1NUQVRVU19TVE9QUEVEKSB7CisgICAgICAgIG1TdGF0dXMgPSBSQl9TVEFUVVNfUkVBRFk7CisgICAgfQorICAgIHJldHVybjsKK30KKwordm9pZCBDYW1lcmEzRGV2aWNlOjpSZXF1ZXN0QnVmZmVyU3RhdGVNYWNoaW5lOjpvblJlcXVlc3RUaHJlYWRQYXVzZWQoKSB7CisgICAgc3RkOjpsb2NrX2d1YXJkPHN0ZDo6bXV0ZXg+IGxvY2sobUxvY2spOworICAgIG1SZXF1ZXN0VGhyZWFkUGF1c2VkID0gdHJ1ZTsKKyAgICBpZiAobVN0YXR1cyA9PSBSQl9TVEFUVVNfUEVORElOR19TVE9QKSB7CisgICAgICAgIGNoZWNrU3dpdGNoVG9TdG9wTG9ja2VkKCk7CisgICAgfQorICAgIHJldHVybjsKK30KKwordm9pZCBDYW1lcmEzRGV2aWNlOjpSZXF1ZXN0QnVmZmVyU3RhdGVNYWNoaW5lOjpvbkluZmxpZ2h0TWFwRW1wdHkoKSB7CisgICAgc3RkOjpsb2NrX2d1YXJkPHN0ZDo6bXV0ZXg+IGxvY2sobUxvY2spOworICAgIG1JbmZsaWdodE1hcEVtcHR5ID0gdHJ1ZTsKKyAgICBpZiAobVN0YXR1cyA9PSBSQl9TVEFUVVNfUEVORElOR19TVE9QKSB7CisgICAgICAgIGNoZWNrU3dpdGNoVG9TdG9wTG9ja2VkKCk7CisgICAgfQorICAgIHJldHVybjsKK30KKwordm9pZCBDYW1lcmEzRGV2aWNlOjpSZXF1ZXN0QnVmZmVyU3RhdGVNYWNoaW5lOjpvbldhaXRVbnRpbElkbGUoKSB7CisgICAgc3RkOjpsb2NrX2d1YXJkPHN0ZDo6bXV0ZXg+IGxvY2sobUxvY2spOworICAgIGlmICghY2hlY2tTd2l0Y2hUb1N0b3BMb2NrZWQoKSkgeworICAgICAgICBtU3RhdHVzID0gUkJfU1RBVFVTX1BFTkRJTkdfU1RPUDsKKyAgICB9CisgICAgcmV0dXJuOworfQorCit2b2lkIENhbWVyYTNEZXZpY2U6OlJlcXVlc3RCdWZmZXJTdGF0ZU1hY2hpbmU6Om5vdGlmeVRyYWNrZXJMb2NrZWQoYm9vbCBhY3RpdmUpIHsKKyAgICBzcDxTdGF0dXNUcmFja2VyPiBzdGF0dXNUcmFja2VyID0gbVN0YXR1c1RyYWNrZXIucHJvbW90ZSgpOworICAgIGlmIChzdGF0dXNUcmFja2VyICE9IG51bGxwdHIpIHsKKyAgICAgICAgaWYgKGFjdGl2ZSkgeworICAgICAgICAgICAgc3RhdHVzVHJhY2tlci0+bWFya0NvbXBvbmVudEFjdGl2ZShtUmVxdWVzdEJ1ZmZlclN0YXR1c0lkKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHN0YXR1c1RyYWNrZXItPm1hcmtDb21wb25lbnRJZGxlKG1SZXF1ZXN0QnVmZmVyU3RhdHVzSWQsIEZlbmNlOjpOT19GRU5DRSk7CisgICAgICAgIH0KKyAgICB9Cit9CisKK2Jvb2wgQ2FtZXJhM0RldmljZTo6UmVxdWVzdEJ1ZmZlclN0YXRlTWFjaGluZTo6Y2hlY2tTd2l0Y2hUb1N0b3BMb2NrZWQoKSB7CisgICAgaWYgKG1JbmZsaWdodE1hcEVtcHR5ICYmIG1SZXF1ZXN0VGhyZWFkUGF1c2VkICYmICFtUmVxdWVzdEJ1ZmZlck9uZ29pbmcpIHsKKyAgICAgICAgbVN0YXR1cyA9IFJCX1NUQVRVU19TVE9QUEVEOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgcmV0dXJuIGZhbHNlOworfQorCitzdGF0dXNfdCBDYW1lcmEzRGV2aWNlOjpmaXh1cE1vbm9jaHJvbWVUYWdzKGNvbnN0IENhbWVyYU1ldGFkYXRhJiBkZXZpY2VJbmZvLAorICAgICAgICBDYW1lcmFNZXRhZGF0YSYgcmVzdWx0TWV0YWRhdGEpIHsKKyAgICBzdGF0dXNfdCByZXMgPSBPSzsKKyAgICBpZiAoIW1OZWVkRml4dXBNb25vY2hyb21lVGFncykgeworICAgICAgICByZXR1cm4gcmVzOworICAgIH0KKworICAgIC8vIFJlbW92ZSB0YWdzIHRoYXQgYXJlIG5vdCBhcHBsaWNhYmxlIHRvIG1vbm9jaHJvbWUgY2FtZXJhLgorICAgIGludDMyX3QgdGFnc1RvUmVtb3ZlW10gPSB7CisgICAgICAgICAgIEFORFJPSURfU0VOU09SX0dSRUVOX1NQTElULAorICAgICAgICAgICBBTkRST0lEX1NFTlNPUl9ORVVUUkFMX0NPTE9SX1BPSU5ULAorICAgICAgICAgICBBTkRST0lEX0NPTE9SX0NPUlJFQ1RJT05fTU9ERSwKKyAgICAgICAgICAgQU5EUk9JRF9DT0xPUl9DT1JSRUNUSU9OX1RSQU5TRk9STSwKKyAgICAgICAgICAgQU5EUk9JRF9DT0xPUl9DT1JSRUNUSU9OX0dBSU5TLAorICAgIH07CisgICAgZm9yIChhdXRvIHRhZyA6IHRhZ3NUb1JlbW92ZSkgeworICAgICAgICByZXMgPSByZXN1bHRNZXRhZGF0YS5lcmFzZSh0YWcpOworICAgICAgICBpZiAocmVzICE9IE9LKSB7CisgICAgICAgICAgICBBTE9HRSgiJXM6IEZhaWxlZCB0byByZW1vdmUgdGFnICVkIGZvciBtb25vY2hyb21lIGNhbWVyYSIsIF9fRlVOQ1RJT05fXywgdGFnKTsKKyAgICAgICAgICAgIHJldHVybiByZXM7CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvLyBBTkRST0lEX1NFTlNPUl9EWU5BTUlDX0JMQUNLX0xFVkVMCisgICAgY2FtZXJhX21ldGFkYXRhX2VudHJ5IGJsRW50cnkgPSByZXN1bHRNZXRhZGF0YS5maW5kKEFORFJPSURfU0VOU09SX0RZTkFNSUNfQkxBQ0tfTEVWRUwpOworICAgIGZvciAoc2l6ZV90IGkgPSAxOyBpIDwgYmxFbnRyeS5jb3VudDsgaSsrKSB7CisgICAgICAgIGJsRW50cnkuZGF0YS5mW2ldID0gYmxFbnRyeS5kYXRhLmZbMF07CisgICAgfQorCisgICAgLy8gQU5EUk9JRF9TRU5TT1JfTk9JU0VfUFJPRklMRQorICAgIGNhbWVyYV9tZXRhZGF0YV9lbnRyeSBucEVudHJ5ID0gcmVzdWx0TWV0YWRhdGEuZmluZChBTkRST0lEX1NFTlNPUl9OT0lTRV9QUk9GSUxFKTsKKyAgICBpZiAobnBFbnRyeS5jb3VudCA+IDAgJiYgbnBFbnRyeS5jb3VudCAlIDIgPT0gMCkgeworICAgICAgICBkb3VibGUgbnBbXSA9IHtucEVudHJ5LmRhdGEuZFswXSwgbnBFbnRyeS5kYXRhLmRbMV19OworICAgICAgICByZXMgPSByZXN1bHRNZXRhZGF0YS51cGRhdGUoQU5EUk9JRF9TRU5TT1JfTk9JU0VfUFJPRklMRSwgbnAsIDIpOworICAgICAgICBpZiAocmVzICE9IE9LKSB7CisgICAgICAgICAgICAgQUxPR0UoIiVzOiBGYWlsZWQgdG8gdXBkYXRlIFNFTlNPUl9OT0lTRV9QUk9GSUxFOiAlcyAoJWQpIiwKKyAgICAgICAgICAgICAgICAgICAgX19GVU5DVElPTl9fLCBzdHJlcnJvcigtcmVzKSwgcmVzKTsKKyAgICAgICAgICAgIHJldHVybiByZXM7CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvLyBBTkRST0lEX1NUQVRJU1RJQ1NfTEVOU19TSEFESU5HX01BUAorICAgIGNhbWVyYV9tZXRhZGF0YV9yb19lbnRyeSBsc1NpemVFbnRyeSA9IGRldmljZUluZm8uZmluZChBTkRST0lEX0xFTlNfSU5GT19TSEFESU5HX01BUF9TSVpFKTsKKyAgICBjYW1lcmFfbWV0YWRhdGFfZW50cnkgbHNFbnRyeSA9IHJlc3VsdE1ldGFkYXRhLmZpbmQoQU5EUk9JRF9TVEFUSVNUSUNTX0xFTlNfU0hBRElOR19NQVApOworICAgIGlmIChsc1NpemVFbnRyeS5jb3VudCA9PSAyICYmIGxzRW50cnkuY291bnQgPiAwCisgICAgICAgICAgICAmJiAoaW50MzJfdClsc0VudHJ5LmNvdW50ID09IDQgKiBsc1NpemVFbnRyeS5kYXRhLmkzMlswXSAqIGxzU2l6ZUVudHJ5LmRhdGEuaTMyWzFdKSB7CisgICAgICAgIGZvciAoaW50MzJfdCBpID0gMDsgaSA8IGxzU2l6ZUVudHJ5LmRhdGEuaTMyWzBdICogbHNTaXplRW50cnkuZGF0YS5pMzJbMV07IGkrKykgeworICAgICAgICAgICAgbHNFbnRyeS5kYXRhLmZbNCppKzFdID0gbHNFbnRyeS5kYXRhLmZbNCppXTsKKyAgICAgICAgICAgIGxzRW50cnkuZGF0YS5mWzQqaSsyXSA9IGxzRW50cnkuZGF0YS5mWzQqaV07CisgICAgICAgICAgICBsc0VudHJ5LmRhdGEuZls0KmkrM10gPSBsc0VudHJ5LmRhdGEuZls0KmldOworICAgICAgICB9CisgICAgfQorCisgICAgLy8gQU5EUk9JRF9UT05FTUFQX0NVUlZFX0JMVUUKKyAgICAvLyBBTkRST0lEX1RPTkVNQVBfQ1VSVkVfR1JFRU4KKyAgICAvLyBBTkRST0lEX1RPTkVNQVBfQ1VSVkVfUkVECisgICAgY2FtZXJhX21ldGFkYXRhX2VudHJ5IHRjYkVudHJ5ID0gcmVzdWx0TWV0YWRhdGEuZmluZChBTkRST0lEX1RPTkVNQVBfQ1VSVkVfQkxVRSk7CisgICAgY2FtZXJhX21ldGFkYXRhX2VudHJ5IHRjZ0VudHJ5ID0gcmVzdWx0TWV0YWRhdGEuZmluZChBTkRST0lEX1RPTkVNQVBfQ1VSVkVfR1JFRU4pOworICAgIGNhbWVyYV9tZXRhZGF0YV9lbnRyeSB0Y3JFbnRyeSA9IHJlc3VsdE1ldGFkYXRhLmZpbmQoQU5EUk9JRF9UT05FTUFQX0NVUlZFX1JFRCk7CisgICAgaWYgKHRjYkVudHJ5LmNvdW50ID4gMAorICAgICAgICAgICAgJiYgdGNiRW50cnkuY291bnQgPT0gdGNnRW50cnkuY291bnQKKyAgICAgICAgICAgICYmIHRjYkVudHJ5LmNvdW50ID09IHRjckVudHJ5LmNvdW50KSB7CisgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgdGNiRW50cnkuY291bnQ7IGkrKykgeworICAgICAgICAgICAgdGNiRW50cnkuZGF0YS5mW2ldID0gdGNyRW50cnkuZGF0YS5mW2ldOworICAgICAgICAgICAgdGNnRW50cnkuZGF0YS5mW2ldID0gdGNyRW50cnkuZGF0YS5mW2ldOworICAgICAgICB9CisgICAgfQorCisgICAgcmV0dXJuIHJlczsKIH0KIAogfTsgLy8gbmFtZXNwYWNlIGFuZHJvaWQKZGlmZiAtLWdpdCBhL3NlcnZpY2VzL2NhbWVyYS9saWJjYW1lcmFzZXJ2aWNlL2RldmljZTMvQ2FtZXJhM0RldmljZS5oIGIvc2VydmljZXMvY2FtZXJhL2xpYmNhbWVyYXNlcnZpY2UvZGV2aWNlMy9DYW1lcmEzRGV2aWNlLmgKaW5kZXggMTMxZDYyZi4uNDE5YWM0MiAxMDA2NDQKLS0tIGEvc2VydmljZXMvY2FtZXJhL2xpYmNhbWVyYXNlcnZpY2UvZGV2aWNlMy9DYW1lcmEzRGV2aWNlLmgKKysrIGIvc2VydmljZXMvY2FtZXJhL2xpYmNhbWVyYXNlcnZpY2UvZGV2aWNlMy9DYW1lcmEzRGV2aWNlLmgKQEAgLTMzLDEwICszMywxMSBAQAogI2luY2x1ZGUgPGFuZHJvaWQvaGFyZHdhcmUvY2FtZXJhL2RldmljZS8zLjIvSUNhbWVyYURldmljZVNlc3Npb24uaD4KICNpbmNsdWRlIDxhbmRyb2lkL2hhcmR3YXJlL2NhbWVyYS9kZXZpY2UvMy4zL0lDYW1lcmFEZXZpY2VTZXNzaW9uLmg+CiAjaW5jbHVkZSA8YW5kcm9pZC9oYXJkd2FyZS9jYW1lcmEvZGV2aWNlLzMuNC9JQ2FtZXJhRGV2aWNlU2Vzc2lvbi5oPgorI2luY2x1ZGUgPGFuZHJvaWQvaGFyZHdhcmUvY2FtZXJhL2RldmljZS8zLjUvSUNhbWVyYURldmljZVNlc3Npb24uaD4KICNpbmNsdWRlIDxhbmRyb2lkL2hhcmR3YXJlL2NhbWVyYS9kZXZpY2UvMy4yL0lDYW1lcmFEZXZpY2VDYWxsYmFjay5oPgogI2luY2x1ZGUgPGFuZHJvaWQvaGFyZHdhcmUvY2FtZXJhL2RldmljZS8zLjQvSUNhbWVyYURldmljZUNhbGxiYWNrLmg+CisjaW5jbHVkZSA8YW5kcm9pZC9oYXJkd2FyZS9jYW1lcmEvZGV2aWNlLzMuNS9JQ2FtZXJhRGV2aWNlQ2FsbGJhY2suaD4KICNpbmNsdWRlIDxmbXEvTWVzc2FnZVF1ZXVlLmg+Ci0jaW5jbHVkZSA8aGFyZHdhcmUvY2FtZXJhMy5oPgogCiAjaW5jbHVkZSA8Y2FtZXJhL0NhcHR1cmVSZXN1bHQuaD4KIApAQCAtNTAsMjAgKzUxLDYgQEAKIAogdXNpbmcgYW5kcm9pZDo6Y2FtZXJhMzo6T3V0cHV0U3RyZWFtSW5mbzsKIAotLyoqCi0gKiBGdW5jdGlvbiBwb2ludGVyIHR5cGVzIHdpdGggQyBjYWxsaW5nIGNvbnZlbnRpb24gdG8KLSAqIHVzZSBmb3IgSEFMIGNhbGxiYWNrIGZ1bmN0aW9ucy4KLSAqLwotZXh0ZXJuICJDIiB7Ci0gICAgdHlwZWRlZiB2b2lkIChjYWxsYmFja3NfcHJvY2Vzc19jYXB0dXJlX3Jlc3VsdF90KSgKLSAgICAgICAgY29uc3Qgc3RydWN0IGNhbWVyYTNfY2FsbGJhY2tfb3BzICosCi0gICAgICAgIGNvbnN0IGNhbWVyYTNfY2FwdHVyZV9yZXN1bHRfdCAqKTsKLQotICAgIHR5cGVkZWYgdm9pZCAoY2FsbGJhY2tzX25vdGlmeV90KSgKLSAgICAgICAgY29uc3Qgc3RydWN0IGNhbWVyYTNfY2FsbGJhY2tfb3BzICosCi0gICAgICAgIGNvbnN0IGNhbWVyYTNfbm90aWZ5X21zZ190ICopOwotfQotCiBuYW1lc3BhY2UgYW5kcm9pZCB7CiAKIG5hbWVzcGFjZSBjYW1lcmEzIHsKQEAgLTgwLDggKzY3LDcgQEAKICAqLwogY2xhc3MgQ2FtZXJhM0RldmljZSA6CiAgICAgICAgICAgICBwdWJsaWMgQ2FtZXJhRGV2aWNlQmFzZSwKLSAgICAgICAgICAgIHZpcnR1YWwgcHVibGljIGhhcmR3YXJlOjpjYW1lcmE6OmRldmljZTo6VjNfNDo6SUNhbWVyYURldmljZUNhbGxiYWNrLAotICAgICAgICAgICAgcHJpdmF0ZSBjYW1lcmEzX2NhbGxiYWNrX29wcyB7CisgICAgICAgICAgICB2aXJ0dWFsIHB1YmxpYyBoYXJkd2FyZTo6Y2FtZXJhOjpkZXZpY2U6OlYzXzU6OklDYW1lcmFEZXZpY2VDYWxsYmFjayB7CiAgIHB1YmxpYzoKIAogICAgIGV4cGxpY2l0IENhbWVyYTNEZXZpY2UoY29uc3QgU3RyaW5nOCYgaWQpOwpAQCAtMjEwLDYgKzE5Niw4IEBACiAKICAgcHJpdmF0ZToKIAorICAgIHN0YXR1c190IGRpc2Nvbm5lY3RJbXBsKCk7CisKICAgICAvLyBpbnRlcm5hbCB0eXBlZGVmcwogICAgIHVzaW5nIFJlcXVlc3RNZXRhZGF0YVF1ZXVlID0gaGFyZHdhcmU6Ok1lc3NhZ2VRdWV1ZTx1aW50OF90LCBoYXJkd2FyZTo6a1N5bmNocm9uaXplZFJlYWRXcml0ZT47CiAgICAgdXNpbmcgUmVzdWx0TWV0YWRhdGFRdWV1ZSAgPSBoYXJkd2FyZTo6TWVzc2FnZVF1ZXVlPHVpbnQ4X3QsIGhhcmR3YXJlOjprU3luY2hyb25pemVkUmVhZFdyaXRlPjsKQEAgLTI2OCw3ICsyNTYsOCBAQAogICAgIGNsYXNzIEhhbEludGVyZmFjZSA6IHB1YmxpYyBjYW1lcmEzOjpDYW1lcmEzU3RyZWFtQnVmZmVyRnJlZWRMaXN0ZW5lciB7CiAgICAgICBwdWJsaWM6CiAgICAgICAgIEhhbEludGVyZmFjZShzcDxoYXJkd2FyZTo6Y2FtZXJhOjpkZXZpY2U6OlYzXzI6OklDYW1lcmFEZXZpY2VTZXNzaW9uPiAmc2Vzc2lvbiwKLSAgICAgICAgICAgICAgICAgICAgIHN0ZDo6c2hhcmVkX3B0cjxSZXF1ZXN0TWV0YWRhdGFRdWV1ZT4gcXVldWUpOworICAgICAgICAgICAgICAgICAgICAgc3RkOjpzaGFyZWRfcHRyPFJlcXVlc3RNZXRhZGF0YVF1ZXVlPiBxdWV1ZSwKKyAgICAgICAgICAgICAgICAgICAgIGJvb2wgdXNlSGFsQnVmTWFuYWdlcik7CiAgICAgICAgIEhhbEludGVyZmFjZShjb25zdCBIYWxJbnRlcmZhY2UgJm90aGVyKTsKICAgICAgICAgSGFsSW50ZXJmYWNlKCk7CiAKQEAgLTI5NywxNCArMjg2LDI3IEBACiAgICAgICAgIHN0YXR1c190IGR1bXAoaW50IGZkKTsKICAgICAgICAgc3RhdHVzX3QgY2xvc2UoKTsKIAorICAgICAgICB2b2lkIHNpZ25hbFBpcGVsaW5lRHJhaW4oY29uc3Qgc3RkOjp2ZWN0b3I8aW50PiYgc3RyZWFtSWRzKTsKKworICAgICAgICAvLyBtZXRob2QgdG8gZXh0cmFjdCBidWZmZXIncyB1bmlxdWUgSUQKKyAgICAgICAgLy8gcmV0dXJuIHBhaXIgb2YgKG5ld2x5U2VlbkJ1ZmZlcj8sIGJ1ZmZlcklkKQorICAgICAgICBzdGQ6OnBhaXI8Ym9vbCwgdWludDY0X3Q+IGdldEJ1ZmZlcklkKGNvbnN0IGJ1ZmZlcl9oYW5kbGVfdCYgYnVmLCBpbnQgc3RyZWFtSWQpOworCiAgICAgICAgIC8vIEZpbmQgYSBidWZmZXJfaGFuZGxlX3QgYmFzZWQgb24gZnJhbWUgbnVtYmVyIGFuZCBzdHJlYW0gSUQKICAgICAgICAgc3RhdHVzX3QgcG9wSW5mbGlnaHRCdWZmZXIoaW50MzJfdCBmcmFtZU51bWJlciwgaW50MzJfdCBzdHJlYW1JZCwKICAgICAgICAgICAgICAgICAvKm91dCovIGJ1ZmZlcl9oYW5kbGVfdCAqKmJ1ZmZlcik7CiAKKyAgICAgICAgLy8gUmVnaXN0ZXIgYSBidWZJZC9idWZmZXJfaGFuZGxlX3QgdG8gaW5mbGlnaHQgcmVxdWVzdCBidWZmZXIKKyAgICAgICAgc3RhdHVzX3QgcHVzaEluZmxpZ2h0UmVxdWVzdEJ1ZmZlcih1aW50NjRfdCBidWZmZXJJZCwgYnVmZmVyX2hhbmRsZV90KiBidWYpOworCisgICAgICAgIC8vIEZpbmQgYSBidWZmZXJfaGFuZGxlX3QgYmFzZWQgb24gYnVmZmVySWQKKyAgICAgICAgc3RhdHVzX3QgcG9wSW5mbGlnaHRSZXF1ZXN0QnVmZmVyKHVpbnQ2NF90IGJ1ZmZlcklkLCAvKm91dCovIGJ1ZmZlcl9oYW5kbGVfdCAqKmJ1ZmZlcik7CisKICAgICAgICAgLy8gR2V0IGEgdmVjdG9yIG9mIChmcmFtZU51bWJlciwgc3RyZWFtSWQpIHBhaXIgb2YgY3VycmVudGx5IGluZmxpZ2h0CiAgICAgICAgIC8vIGJ1ZmZlcnMKICAgICAgICAgdm9pZCBnZXRJbmZsaWdodEJ1ZmZlcktleXMoc3RkOjp2ZWN0b3I8c3RkOjpwYWlyPGludDMyX3QsIGludDMyX3Q+Piogb3V0KTsKIAorICAgICAgICBzdGF0aWMgY29uc3QgdWludDY0X3QgQlVGRkVSX0lEX05PX0JVRkZFUiA9IDA7CiAgICAgICBwcml2YXRlOgogICAgICAgICAvLyBBbHdheXMgdmFsaWQKICAgICAgICAgc3A8aGFyZHdhcmU6OmNhbWVyYTo6ZGV2aWNlOjpWM18yOjpJQ2FtZXJhRGV2aWNlU2Vzc2lvbj4gbUhpZGxTZXNzaW9uOwpAQCAtMzEyLDYgKzMxNCw4IEBACiAgICAgICAgIHNwPGhhcmR3YXJlOjpjYW1lcmE6OmRldmljZTo6VjNfMzo6SUNhbWVyYURldmljZVNlc3Npb24+IG1IaWRsU2Vzc2lvbl8zXzM7CiAgICAgICAgIC8vIFZhbGlkIGlmIElDYW1lcmFEZXZpY2VTZXNzaW9uIGlzIEAzLjQgb3IgbmV3ZXIKICAgICAgICAgc3A8aGFyZHdhcmU6OmNhbWVyYTo6ZGV2aWNlOjpWM180OjpJQ2FtZXJhRGV2aWNlU2Vzc2lvbj4gbUhpZGxTZXNzaW9uXzNfNDsKKyAgICAgICAgLy8gVmFsaWQgaWYgSUNhbWVyYURldmljZVNlc3Npb24gaXMgQDMuNSBvciBuZXdlcgorICAgICAgICBzcDxoYXJkd2FyZTo6Y2FtZXJhOjpkZXZpY2U6OlYzXzU6OklDYW1lcmFEZXZpY2VTZXNzaW9uPiBtSGlkbFNlc3Npb25fM181OwogCiAgICAgICAgIHN0ZDo6c2hhcmVkX3B0cjxSZXF1ZXN0TWV0YWRhdGFRdWV1ZT4gbVJlcXVlc3RNZXRhZGF0YVF1ZXVlOwogCkBAIC0zMTksNyArMzIzLDcgQEAKIAogICAgICAgICAvLyBUaGUgb3V0cHV0IEhJREwgcmVxdWVzdCBzdGlsbCBkZXBlbmRzIG9uIGlucHV0IGNhbWVyYTNfY2FwdHVyZV9yZXF1ZXN0X3QKICAgICAgICAgLy8gRG8gbm90IGZyZWUgaW5wdXQgY2FtZXJhM19jYXB0dXJlX3JlcXVlc3RfdCBiZWZvcmUgb3V0cHV0IEhJREwgcmVxdWVzdAotICAgICAgICB2b2lkIHdyYXBBc0hpZGxSZXF1ZXN0KGNhbWVyYTNfY2FwdHVyZV9yZXF1ZXN0X3QqIGluLAorICAgICAgICBzdGF0dXNfdCB3cmFwQXNIaWRsUmVxdWVzdChjYW1lcmEzX2NhcHR1cmVfcmVxdWVzdF90KiBpbiwKICAgICAgICAgICAgICAgICAvKm91dCovaGFyZHdhcmU6OmNhbWVyYTo6ZGV2aWNlOjpWM18yOjpDYXB0dXJlUmVxdWVzdCogb3V0LAogICAgICAgICAgICAgICAgIC8qb3V0Ki9zdGQ6OnZlY3RvcjxuYXRpdmVfaGFuZGxlX3QqPiogaGFuZGxlc0NyZWF0ZWQpOwogCkBAIC0zNjMsMTkgKzM2NywxOCBAQAogICAgICAgICAvLyBzdHJlYW0gSUQgLT4gcGVyIHN0cmVhbSBidWZmZXIgSUQgbWFwCiAgICAgICAgIHN0ZDo6dW5vcmRlcmVkX21hcDxpbnQsIEJ1ZmZlcklkTWFwPiBtQnVmZmVySWRNYXBzOwogICAgICAgICB1aW50NjRfdCBtTmV4dEJ1ZmZlcklkID0gMTsgLy8gMCBtZWFucyBubyBidWZmZXIKLSAgICAgICAgc3RhdGljIGNvbnN0IHVpbnQ2NF90IEJVRkZFUl9JRF9OT19CVUZGRVIgPSAwOwotCi0gICAgICAgIC8vIG1ldGhvZCB0byBleHRyYWN0IGJ1ZmZlcidzIHVuaXF1ZSBJRAotICAgICAgICAvLyBUT0RPOiB3ZSBzaG91bGQgc3dpdGNoIHRvIHVzZSBncmFsbG9jIG1hcHBlcidzIGdldEJhY2tpbmdTdG9yZSBBUEkKLSAgICAgICAgLy8gICAgICAgb25jZSB3ZSByYW4gaW4gYmluZGVyaXplZCBncmFsbG9jIG1vZGUsIGJ1dCBiZWZvcmUgdGhhdCBpcyByZWFkeSwKLSAgICAgICAgLy8gICAgICAgd2UgbmVlZCB0byByZWx5IG9uIHRoZSBjb252ZW50aW9uYWwgYnVmZmVyIHF1ZXVlIGJlaGF2aW9yIHdoZXJlCi0gICAgICAgIC8vICAgICAgIGJ1ZmZlcl9oYW5kbGVfdCdzIEZEIHdvbid0IGNoYW5nZS4KLSAgICAgICAgLy8gcmV0dXJuIHBhaXIgb2YgKG5ld2x5U2VlbkJ1ZmZlcj8sIGJ1ZmZlcklkKQotICAgICAgICBzdGQ6OnBhaXI8Ym9vbCwgdWludDY0X3Q+IGdldEJ1ZmZlcklkKGNvbnN0IGJ1ZmZlcl9oYW5kbGVfdCYgYnVmLCBpbnQgc3RyZWFtSWQpOwogCiAgICAgICAgIHZpcnR1YWwgdm9pZCBvbkJ1ZmZlckZyZWVkKGludCBzdHJlYW1JZCwgY29uc3QgbmF0aXZlX2hhbmRsZV90KiBoYW5kbGUpIG92ZXJyaWRlOwogCiAgICAgICAgIHN0ZDo6dmVjdG9yPHN0ZDo6cGFpcjxpbnQsIHVpbnQ2NF90Pj4gbUZyZWVkQnVmZmVyczsKKworICAgICAgICAvLyBCdWZmZXJzIGdpdmVuIHRvIEhBTCB0aHJvdWdoIHJlcXVlc3RTdHJlYW1CdWZmZXIgQVBJCisgICAgICAgIHN0ZDo6bXV0ZXggbVJlcXVlc3RlZEJ1ZmZlcnNMb2NrOworICAgICAgICBzdGQ6OnVub3JkZXJlZF9tYXA8dWludDY0X3QsIGJ1ZmZlcl9oYW5kbGVfdCo+IG1SZXF1ZXN0ZWRCdWZmZXJzOworCisgICAgICAgIHVpbnQzMl90IG1OZXh0U3RyZWFtQ29uZmlnQ291bnRlciA9IDE7CisKKyAgICAgICAgY29uc3QgYm9vbCBtVXNlSGFsQnVmTWFuYWdlcjsKICAgICB9OwogCiAgICAgc3A8SGFsSW50ZXJmYWNlPiBtSW50ZXJmYWNlOwpAQCAtNDEwLDkgKzQxMywyMiBAQAogICAgIC8vIFRyYWNraW5nIGNhdXNlIG9mIGZhdGFsIGVycm9ycyB3aGVuIGluIFNUQVRVU19FUlJPUgogICAgIFN0cmluZzggICAgICAgICAgICAgICAgICAgIG1FcnJvckNhdXNlOwogCi0gICAgLy8gTWFwcGluZyBvZiBzdHJlYW0gSURzIHRvIHN0cmVhbSBpbnN0YW5jZXMKLSAgICB0eXBlZGVmIEtleWVkVmVjdG9yPGludCwgc3A8Y2FtZXJhMzo6Q2FtZXJhM091dHB1dFN0cmVhbUludGVyZmFjZT4gPgotICAgICAgICAgICAgU3RyZWFtU2V0OworICAgIC8vIFN5bmNocm9uaXplZCBtYXBwaW5nIG9mIHN0cmVhbSBJRHMgdG8gc3RyZWFtIGluc3RhbmNlcworICAgIGNsYXNzIFN0cmVhbVNldCB7CisgICAgICBwdWJsaWM6CisgICAgICAgIHN0YXR1c190IGFkZChpbnQgc3RyZWFtSWQsIHNwPGNhbWVyYTM6OkNhbWVyYTNPdXRwdXRTdHJlYW1JbnRlcmZhY2U+KTsKKyAgICAgICAgc3NpemVfdCByZW1vdmUoaW50IHN0cmVhbUlkKTsKKyAgICAgICAgc3A8Y2FtZXJhMzo6Q2FtZXJhM091dHB1dFN0cmVhbUludGVyZmFjZT4gZ2V0KGludCBzdHJlYW1JZCk7CisgICAgICAgIC8vIGdldCBieSAodW5kZXJseWluZykgdmVjdG9yIGluZGV4CisgICAgICAgIHNwPGNhbWVyYTM6OkNhbWVyYTNPdXRwdXRTdHJlYW1JbnRlcmZhY2U+IG9wZXJhdG9yW10gKHNpemVfdCBpbmRleCk7CisgICAgICAgIHNpemVfdCBzaXplKCkgY29uc3Q7CisgICAgICAgIHN0ZDo6dmVjdG9yPGludD4gZ2V0U3RyZWFtSWRzKCk7CisgICAgICAgIHZvaWQgY2xlYXIoKTsKKworICAgICAgcHJpdmF0ZToKKyAgICAgICAgbXV0YWJsZSBzdGQ6Om11dGV4IG1Mb2NrOworICAgICAgICBLZXllZFZlY3RvcjxpbnQsIHNwPGNhbWVyYTM6OkNhbWVyYTNPdXRwdXRTdHJlYW1JbnRlcmZhY2U+PiBtRGF0YTsKKyAgICB9OwogCiAgICAgU3RyZWFtU2V0ICAgICAgICAgICAgICAgICAgbU91dHB1dFN0cmVhbXM7CiAgICAgc3A8Y2FtZXJhMzo6Q2FtZXJhM1N0cmVhbT4gbUlucHV0U3RyZWFtOwpAQCAtNDgxLDggKzQ5Nyw5IEBACiAKIAogICAgIC8qKgotICAgICAqIEltcGxlbWVudGF0aW9uIG9mIGFuZHJvaWQ6OmhhcmR3YXJlOjpjYW1lcmE6OmRldmljZTo6VjNfNDo6SUNhbWVyYURldmljZUNhbGxiYWNrCisgICAgICogSW1wbGVtZW50YXRpb24gb2YgYW5kcm9pZDo6aGFyZHdhcmU6OmNhbWVyYTo6ZGV2aWNlOjpWM181OjpJQ2FtZXJhRGV2aWNlQ2FsbGJhY2sKICAgICAgKi8KKwogICAgIGhhcmR3YXJlOjpSZXR1cm48dm9pZD4gcHJvY2Vzc0NhcHR1cmVSZXN1bHRfM180KAogICAgICAgICAgICAgY29uc3QgaGFyZHdhcmU6OmhpZGxfdmVjPAogICAgICAgICAgICAgICAgICAgICBoYXJkd2FyZTo6Y2FtZXJhOjpkZXZpY2U6OlYzXzQ6OkNhcHR1cmVSZXN1bHQ+JiByZXN1bHRzKSBvdmVycmlkZTsKQEAgLTQ5Myw2ICs1MTAsMTUgQEAKICAgICAgICAgICAgIGNvbnN0IGhhcmR3YXJlOjpoaWRsX3ZlYzwKICAgICAgICAgICAgICAgICAgICAgaGFyZHdhcmU6OmNhbWVyYTo6ZGV2aWNlOjpWM18yOjpOb3RpZnlNc2c+JiBtc2dzKSBvdmVycmlkZTsKIAorICAgIGhhcmR3YXJlOjpSZXR1cm48dm9pZD4gcmVxdWVzdFN0cmVhbUJ1ZmZlcnMoCisgICAgICAgICAgICBjb25zdCBoYXJkd2FyZTo6aGlkbF92ZWM8CisgICAgICAgICAgICAgICAgICAgIGhhcmR3YXJlOjpjYW1lcmE6OmRldmljZTo6VjNfNTo6QnVmZmVyUmVxdWVzdD4mIGJ1ZlJlcXMsCisgICAgICAgICAgICByZXF1ZXN0U3RyZWFtQnVmZmVyc19jYiBfaGlkbF9jYikgb3ZlcnJpZGU7CisKKyAgICBoYXJkd2FyZTo6UmV0dXJuPHZvaWQ+IHJldHVyblN0cmVhbUJ1ZmZlcnMoCisgICAgICAgICAgICBjb25zdCBoYXJkd2FyZTo6aGlkbF92ZWM8CisgICAgICAgICAgICAgICAgICAgIGhhcmR3YXJlOjpjYW1lcmE6OmRldmljZTo6VjNfMjo6U3RyZWFtQnVmZmVyPiYgYnVmZmVycykgb3ZlcnJpZGU7CisKICAgICAvLyBIYW5kbGUgb25lIGNhcHR1cmUgcmVzdWx0LiBBc3N1bWUgdGhhdCBtUHJvY2Vzc0NhcHR1cmVSZXN1bHRMb2NrIGlzIGhlbGQuCiAgICAgdm9pZCBwcm9jZXNzT25lQ2FwdHVyZVJlc3VsdExvY2tlZCgKICAgICAgICAgICAgIGNvbnN0IGhhcmR3YXJlOjpjYW1lcmE6OmRldmljZTo6VjNfMjo6Q2FwdHVyZVJlc3VsdCYgcmVzdWx0LApAQCAtNzAwLDcgKzcyNiw5IEBACiAKICAgICAgICAgUmVxdWVzdFRocmVhZCh3cDxDYW1lcmEzRGV2aWNlPiBwYXJlbnQsCiAgICAgICAgICAgICAgICAgc3A8Y2FtZXJhMzo6U3RhdHVzVHJhY2tlcj4gc3RhdHVzVHJhY2tlciwKLSAgICAgICAgICAgICAgICBzcDxIYWxJbnRlcmZhY2U+IGludGVyZmFjZSwgY29uc3QgVmVjdG9yPGludDMyX3Q+JiBzZXNzaW9uUGFyYW1LZXlzKTsKKyAgICAgICAgICAgICAgICBzcDxIYWxJbnRlcmZhY2U+IGludGVyZmFjZSwKKyAgICAgICAgICAgICAgICBjb25zdCBWZWN0b3I8aW50MzJfdD4mIHNlc3Npb25QYXJhbUtleXMsCisgICAgICAgICAgICAgICAgYm9vbCB1c2VIYWxCdWZNYW5hZ2VyKTsKICAgICAgICAgflJlcXVlc3RUaHJlYWQoKTsKIAogICAgICAgICB2b2lkICAgICBzZXROb3RpZmljYXRpb25MaXN0ZW5lcih3cDxOb3RpZmljYXRpb25MaXN0ZW5lcj4gbGlzdGVuZXIpOwpAQCAtNzg4LDYgKzgxNiw4IEBACiAgICAgICAgICAgICBtUmVxdWVzdExhdGVuY3kuZHVtcChmZCwgbmFtZSk7CiAgICAgICAgIH0KIAorICAgICAgICB2b2lkIHNpZ25hbFBpcGVsaW5lRHJhaW4oY29uc3Qgc3RkOjp2ZWN0b3I8aW50PiYgc3RyZWFtSWRzKTsKKwogICAgICAgcHJvdGVjdGVkOgogCiAgICAgICAgIHZpcnR1YWwgYm9vbCB0aHJlYWRMb29wKCk7CkBAIC04OTcsMTIgKzkyNywxMyBAQAogCiAgICAgICAgIGJvb2wgICAgICAgICAgICAgICBtUmVjb25maWd1cmVkOwogCi0gICAgICAgIC8vIFVzZWQgYnkgd2FpdElmUGF1c2VkLCB3YWl0Rm9yTmV4dFJlcXVlc3QsIGFuZCB3YWl0VW50aWxQYXVzZWQKKyAgICAgICAgLy8gVXNlZCBieSB3YWl0SWZQYXVzZWQsIHdhaXRGb3JOZXh0UmVxdWVzdCwgd2FpdFVudGlsUGF1c2VkLCBhbmQgc2lnbmFsUGlwZWxpbmVEcmFpbgogICAgICAgICBNdXRleCAgICAgICAgICAgICAgbVBhdXNlTG9jazsKICAgICAgICAgYm9vbCAgICAgICAgICAgICAgIG1Eb1BhdXNlOwogICAgICAgICBDb25kaXRpb24gICAgICAgICAgbURvUGF1c2VTaWduYWw7CiAgICAgICAgIGJvb2wgICAgICAgICAgICAgICBtUGF1c2VkOwotICAgICAgICBDb25kaXRpb24gICAgICAgICAgbVBhdXNlZFNpZ25hbDsKKyAgICAgICAgYm9vbCAgICAgICAgICAgICAgIG1Ob3RpZnlQaXBlbGluZURyYWluOworICAgICAgICBzdGQ6OnZlY3RvcjxpbnQ+ICAgbVN0cmVhbUlkc1RvQmVEcmFpbmVkOwogCiAgICAgICAgIHNwPENhcHR1cmVSZXF1ZXN0PiBtUHJldlJlcXVlc3Q7CiAgICAgICAgIGludDMyX3QgICAgICAgICAgICBtUHJldlRyaWdnZXJzOwpAQCAtOTM1LDYgKzk2Niw4IEBACiAKICAgICAgICAgVmVjdG9yPGludDMyX3Q+ICAgIG1TZXNzaW9uUGFyYW1LZXlzOwogICAgICAgICBDYW1lcmFNZXRhZGF0YSAgICAgbUxhdGVzdFNlc3Npb25QYXJhbXM7CisKKyAgICAgICAgY29uc3QgYm9vbCAgICAgICAgIG1Vc2VIYWxCdWZNYW5hZ2VyOwogICAgIH07CiAgICAgc3A8UmVxdWVzdFRocmVhZD4gbVJlcXVlc3RUaHJlYWQ7CiAKQEAgLTk5NSw2ICsxMDI4LDE1IEBACiAgICAgICAgIC8vIE1hcCBvZiBwaHlzaWNhbENhbWVyYUlkIDwtPiBNZXRhZGF0YQogICAgICAgICBzdGQ6OnZlY3RvcjxQaHlzaWNhbENhcHR1cmVSZXN1bHRJbmZvPiBwaHlzaWNhbE1ldGFkYXRhczsKIAorICAgICAgICAvLyBJbmRpY2F0ZXMgYSBzdGlsbCBjYXB0dXJlIHJlcXVlc3QuCisgICAgICAgIGJvb2wgc3RpbGxDYXB0dXJlOworCisgICAgICAgIC8vIEluZGljYXRlcyBhIFpTTCBjYXB0dXJlIHJlcXVlc3QKKyAgICAgICAgYm9vbCB6c2xDYXB0dXJlOworCisgICAgICAgIC8vIFdoYXQgc2hhcmVkIHN1cmZhY2VzIGFuIG91dHB1dCBzaG91bGQgZ28gdG8KKyAgICAgICAgU3VyZmFjZU1hcCBvdXRwdXRTdXJmYWNlczsKKwogICAgICAgICAvLyBEZWZhdWx0IGNvbnN0cnVjdG9yIG5lZWRlZCBieSBLZXllZFZlY3RvcgogICAgICAgICBJbkZsaWdodFJlcXVlc3QoKSA6CiAgICAgICAgICAgICAgICAgc2h1dHRlclRpbWVzdGFtcCgwKSwKQEAgLTEwMDUsMTIgKzEwNDcsMTYgQEAKICAgICAgICAgICAgICAgICBoYXNJbnB1dEJ1ZmZlcihmYWxzZSksCiAgICAgICAgICAgICAgICAgaGFzQ2FsbGJhY2sodHJ1ZSksCiAgICAgICAgICAgICAgICAgbWF4RXhwZWN0ZWREdXJhdGlvbihrRGVmYXVsdEV4cGVjdGVkRHVyYXRpb24pLAotICAgICAgICAgICAgICAgIHNraXBSZXN1bHRNZXRhZGF0YShmYWxzZSkgeworICAgICAgICAgICAgICAgIHNraXBSZXN1bHRNZXRhZGF0YShmYWxzZSksCisgICAgICAgICAgICAgICAgc3RpbGxDYXB0dXJlKGZhbHNlKSwKKyAgICAgICAgICAgICAgICB6c2xDYXB0dXJlKGZhbHNlKSB7CiAgICAgICAgIH0KIAogICAgICAgICBJbkZsaWdodFJlcXVlc3QoaW50IG51bUJ1ZmZlcnMsIENhcHR1cmVSZXN1bHRFeHRyYXMgZXh0cmFzLCBib29sIGhhc0lucHV0LAogICAgICAgICAgICAgICAgIGJvb2wgaGFzQXBwQ2FsbGJhY2ssIG5zZWNzX3QgbWF4RHVyYXRpb24sCi0gICAgICAgICAgICAgICAgY29uc3Qgc3RkOjpzZXQ8U3RyaW5nOD4mIHBoeXNpY2FsQ2FtZXJhSWRTZXQpIDoKKyAgICAgICAgICAgICAgICBjb25zdCBzdGQ6OnNldDxTdHJpbmc4PiYgcGh5c2ljYWxDYW1lcmFJZFNldCwgYm9vbCBpc1N0aWxsQ2FwdHVyZSwKKyAgICAgICAgICAgICAgICBib29sIGlzWnNsQ2FwdHVyZSwKKyAgICAgICAgICAgICAgICBjb25zdCBTdXJmYWNlTWFwJiBvdXRTdXJmYWNlcyA9IFN1cmZhY2VNYXB7fSkgOgogICAgICAgICAgICAgICAgIHNodXR0ZXJUaW1lc3RhbXAoMCksCiAgICAgICAgICAgICAgICAgc2Vuc29yVGltZXN0YW1wKDApLAogICAgICAgICAgICAgICAgIHJlcXVlc3RTdGF0dXMoT0spLApAQCAtMTAyMSw3ICsxMDY3LDEwIEBACiAgICAgICAgICAgICAgICAgaGFzQ2FsbGJhY2soaGFzQXBwQ2FsbGJhY2spLAogICAgICAgICAgICAgICAgIG1heEV4cGVjdGVkRHVyYXRpb24obWF4RHVyYXRpb24pLAogICAgICAgICAgICAgICAgIHNraXBSZXN1bHRNZXRhZGF0YShmYWxzZSksCi0gICAgICAgICAgICAgICAgcGh5c2ljYWxDYW1lcmFJZHMocGh5c2ljYWxDYW1lcmFJZFNldCkgeworICAgICAgICAgICAgICAgIHBoeXNpY2FsQ2FtZXJhSWRzKHBoeXNpY2FsQ2FtZXJhSWRTZXQpLAorICAgICAgICAgICAgICAgIHN0aWxsQ2FwdHVyZShpc1N0aWxsQ2FwdHVyZSksCisgICAgICAgICAgICAgICAgenNsQ2FwdHVyZShpc1pzbENhcHR1cmUpLAorICAgICAgICAgICAgICAgIG91dHB1dFN1cmZhY2VzKG91dFN1cmZhY2VzKSB7CiAgICAgICAgIH0KICAgICB9OwogCkBAIC0xMDM1LDEwICsxMDg0LDExIEBACiAgICAgbnNlY3NfdCAgICAgICAgICAgICAgICBtRXhwZWN0ZWRJbmZsaWdodER1cmF0aW9uID0gMDsKICAgICBpbnQgICAgICAgICAgICAgICAgICAgIG1JbkZsaWdodFN0YXR1c0lkOwogCi0KICAgICBzdGF0dXNfdCByZWdpc3RlckluRmxpZ2h0KHVpbnQzMl90IGZyYW1lTnVtYmVyLAogICAgICAgICAgICAgaW50MzJfdCBudW1CdWZmZXJzLCBDYXB0dXJlUmVzdWx0RXh0cmFzIHJlc3VsdEV4dHJhcywgYm9vbCBoYXNJbnB1dCwKLSAgICAgICAgICAgIGJvb2wgY2FsbGJhY2ssIG5zZWNzX3QgbWF4RXhwZWN0ZWREdXJhdGlvbiwgc3RkOjpzZXQ8U3RyaW5nOD4mIHBoeXNpY2FsQ2FtZXJhSWRzKTsKKyAgICAgICAgICAgIGJvb2wgY2FsbGJhY2ssIG5zZWNzX3QgbWF4RXhwZWN0ZWREdXJhdGlvbiwgc3RkOjpzZXQ8U3RyaW5nOD4mIHBoeXNpY2FsQ2FtZXJhSWRzLAorICAgICAgICAgICAgYm9vbCBpc1N0aWxsQ2FwdHVyZSwgYm9vbCBpc1pzbENhcHR1cmUsCisgICAgICAgICAgICBjb25zdCBTdXJmYWNlTWFwJiBvdXRwdXRTdXJmYWNlcyk7CiAKICAgICAvKioKICAgICAgKiBSZXR1cm5zIHRoZSBtYXhpbXVtIGV4cGVjdGVkIHRpbWUgaXQnbGwgdGFrZSBmb3IgYWxsIGN1cnJlbnRseSBpbi1mbGlnaHQKQEAgLTExNDgsNyArMTE5OCwxMSBAQAogCiAgICAgLy8gaGVscGVyIGZ1bmN0aW9uIHRvIHJldHVybiB0aGUgb3V0cHV0IGJ1ZmZlcnMgdG8gdGhlIHN0cmVhbXMuCiAgICAgdm9pZCByZXR1cm5PdXRwdXRCdWZmZXJzKGNvbnN0IGNhbWVyYTNfc3RyZWFtX2J1ZmZlcl90ICpvdXRwdXRCdWZmZXJzLAotICAgICAgICAgICAgc2l6ZV90IG51bUJ1ZmZlcnMsIG5zZWNzX3QgdGltZXN0YW1wKTsKKyAgICAgICAgICAgIHNpemVfdCBudW1CdWZmZXJzLCBuc2Vjc190IHRpbWVzdGFtcCwgYm9vbCB0aW1lc3RhbXBJbmNyZWFzaW5nID0gdHJ1ZSwKKyAgICAgICAgICAgIC8vIFRoZSBmb2xsb3dpbmcgYXJndW1lbnRzIGFyZSBvbmx5IG1lYW50IGZvciBzdXJmYWNlIHNoYXJpbmcgdXNlIGNhc2UKKyAgICAgICAgICAgIGNvbnN0IFN1cmZhY2VNYXAmIG91dHB1dFN1cmZhY2VzID0gU3VyZmFjZU1hcHt9LAorICAgICAgICAgICAgLy8gVXNlZCB0byBzZW5kIGJ1ZmZlciBlcnJvciBjYWxsYmFjayB3aGVuIGZhaWxpbmcgdG8gcmV0dXJuIGJ1ZmZlcgorICAgICAgICAgICAgY29uc3QgQ2FwdHVyZVJlc3VsdEV4dHJhcyAmcmVzdWx0RXh0cmFzID0gQ2FwdHVyZVJlc3VsdEV4dHJhc3t9KTsKIAogICAgIC8vIFNlbmQgYSBwYXJ0aWFsIGNhcHR1cmUgcmVzdWx0LgogICAgIHZvaWQgc2VuZFBhcnRpYWxDYXB0dXJlUmVzdWx0KGNvbnN0IGNhbWVyYV9tZXRhZGF0YV90ICogcGFydGlhbFJlc3VsdCwKQEAgLTEyMDQsMTMgKzEyNTgsODggQEAKICAgICAvLyBDYWNoZWQgbGFzdCByZXF1ZXN0ZWQgdGVtcGxhdGUgaWQKICAgICBpbnQgbUxhc3RUZW1wbGF0ZUlkOwogCi0gICAgLyoqCi0gICAgICogU3RhdGljIGNhbGxiYWNrIGZvcndhcmRpbmcgbWV0aG9kcyBmcm9tIEhBTCB0byBpbnN0YW5jZQotICAgICAqLwotICAgIHN0YXRpYyBjYWxsYmFja3NfcHJvY2Vzc19jYXB0dXJlX3Jlc3VsdF90IHNQcm9jZXNzQ2FwdHVyZVJlc3VsdDsKKyAgICAvLyBTeW5jaHJvbml6ZXMgYWNjZXNzIHRvIHN0YXR1cyB0cmFja2VyIGJldHdlZW4gaW5mbGlnaHQgdXBkYXRlcyBhbmQgZGlzY29ubmVjdC4KKyAgICAvLyBiLzc5OTcyODY1CisgICAgTXV0ZXggbVRyYWNrZXJMb2NrOwogCi0gICAgc3RhdGljIGNhbGxiYWNrc19ub3RpZnlfdCBzTm90aWZ5OworICAgIC8vIFdoZXRoZXIgSEFMIHJlcXVlc3QgYnVmZmVycyB0aHJvdWdoIHJlcXVlc3RTdHJlYW1CdWZmZXJzIEFQSQorICAgIGJvb2wgbVVzZUhhbEJ1Zk1hbmFnZXIgPSBmYWxzZTsKIAorICAgIC8vIExvY2sgdG8gZW5zdXJlIHJlcXVlc3RTdHJlYW1CdWZmZXJzKCkgY2FsbGJhY2tzIGFyZSBzZXJpYWxpemVkCisgICAgc3RkOjptdXRleCBtUmVxdWVzdEJ1ZmZlckludGVyZmFjZUxvY2s7CisKKyAgICAvLyBUaGUgc3RhdGUgbWFjaGluZSB0byBjb250cm9sIHdoZW4gcmVxdWVzdFN0cmVhbUJ1ZmZlcnMgc2hvdWxkIGFsbG93CisgICAgLy8gSEFMIHRvIHJlcXVlc3QgYnVmZmVycy4KKyAgICBlbnVtIFJlcXVlc3RCdWZmZXJTdGF0ZSB7CisgICAgICAgIC8qKgorICAgICAgICAgKiBUaGlzIGlzIHRoZSBpbml0aWFsIHN0YXRlLgorICAgICAgICAgKiByZXF1ZXN0U3RyZWFtQnVmZmVycyBjYWxsIHdpbGwgcmV0dXJuIEZBSUxFRF9DT05GSUdVUklORyBpbiB0aGlzIHN0YXRlLgorICAgICAgICAgKiBXaWxsIHN3aXRjaCB0byBSQl9TVEFUVVNfUkVBRFkgYWZ0ZXIgYSBzdWNjZXNzZnVsIGNvbmZpZ3VyZVN0cmVhbXMgb3IKKyAgICAgICAgICogcHJvY2Vzc0NhcHR1cmVSZXF1ZXN0IGNhbGwuCisgICAgICAgICAqLworICAgICAgICBSQl9TVEFUVVNfU1RPUFBFRCwKKworICAgICAgICAvKioKKyAgICAgICAgICogcmVxdWVzdFN0cmVhbUJ1ZmZlcnMgY2FsbCB3aWxsIHByb2NlZWQgaW4gdGhpcyBzdGF0ZS4KKyAgICAgICAgICogV2hlbiBkZXZpY2UgaXMgYXNrZWQgdG8gc3RheSBpZGxlIHZpYSB3YWl0VW50aWxTdGF0ZVRoZW5SZWxvY2soKSBjYWxsOgorICAgICAgICAgKiAgICAgLSBTd2l0Y2ggdG8gUkJfU1RBVFVTX1NUT1BQRUQgaWYgdGhlcmUgaXMgbm8gaW5mbGlnaHQgcmVxdWVzdHMgYW5kCisgICAgICAgICAqICAgICAgIHJlcXVlc3QgdGhyZWFkIGlzIHBhdXNlZC4KKyAgICAgICAgICogICAgIC0gU3dpdGNoIHRvIFJCX1NUQVRVU19QRU5ESU5HX1NUT1Agb3RoZXJ3aXNlCisgICAgICAgICAqLworICAgICAgICBSQl9TVEFUVVNfUkVBRFksCisKKyAgICAgICAgLyoqCisgICAgICAgICAqIHJlcXVlc3RTdHJlYW1CdWZmZXJzIGNhbGwgd2lsbCBwcm9jZWVkIGluIHRoaXMgc3RhdGUuCisgICAgICAgICAqIFN3aXRjaCB0byBSQl9TVEFUVVNfU1RPUFBFRCB3aGVuIGFsbCBpbmZsaWdodCByZXF1ZXN0cyBhcmUgZnVsZmlsbGVkCisgICAgICAgICAqIGFuZCByZXF1ZXN0IHRocmVhZCBpcyBwYXVzZWQKKyAgICAgICAgICovCisgICAgICAgIFJCX1NUQVRVU19QRU5ESU5HX1NUT1AsCisgICAgfTsKKworICAgIGNsYXNzIFJlcXVlc3RCdWZmZXJTdGF0ZU1hY2hpbmUgeworICAgICAgcHVibGljOgorICAgICAgICBzdGF0dXNfdCBpbml0aWFsaXplKHNwPGNhbWVyYTM6OlN0YXR1c1RyYWNrZXI+IHN0YXR1c1RyYWNrZXIpOworCisgICAgICAgIC8vIFJldHVybiBpZiB0aGUgc3RhdGUgbWFjaGluZSBjdXJyZW50bHkgYWxsb3dzIGZvciByZXF1ZXN0QnVmZmVycworICAgICAgICAvLyBJZiB0aGUgc3RhdGUgYWxsb3dzIGZvciBpdCwgbVJlcXVlc3RCdWZmZXJPbmdvaW5nIHdpbGwgYmUgc2V0IHRvIHRydWUKKyAgICAgICAgLy8gYW5kIGNhbGxlciBtdXN0IGNhbGwgZW5kUmVxdWVzdEJ1ZmZlcigpIGxhdGVyIHRvIHVuc2V0IHRoZSBmbGFnCisgICAgICAgIGJvb2wgc3RhcnRSZXF1ZXN0QnVmZmVyKCk7CisgICAgICAgIHZvaWQgZW5kUmVxdWVzdEJ1ZmZlcigpOworCisgICAgICAgIC8vIEV2ZW50cyB0cmlnZ2VyZWQgYnkgYXBwbGljYXRpb24gQVBJIGNhbGwKKyAgICAgICAgdm9pZCBvblN0cmVhbXNDb25maWd1cmVkKCk7CisgICAgICAgIHZvaWQgb25XYWl0VW50aWxJZGxlKCk7CisKKyAgICAgICAgLy8gRXZlbnRzIHVzdWFsbHkgdHJpZ2dlcmVkIGJ5IGh3QmluZGVyIHByb2Nlc3NDYXB0dXJlUmVzdWx0IGNhbGxiYWNrIHRocmVhZAorICAgICAgICAvLyBCdXQgY2FuIGFsc28gYmUgdHJpZ2dlcmVkIG9uIHJlcXVlc3QgdGhyZWFkIGZvciBmYWlsZWQgcmVxdWVzdCwgb3Igb24KKyAgICAgICAgLy8gaHdiaW5kZXIgbm90aWZ5IGNhbGxiYWNrIHRocmVhZCBmb3Igc2h1dHRlci9lcnJvciBjYWxsYmFja3MKKyAgICAgICAgdm9pZCBvbkluZmxpZ2h0TWFwRW1wdHkoKTsKKworICAgICAgICAvLyBFdmVudHMgdHJpZ2dlcmVkIGJ5IFJlcXVlc3RUaHJlYWQKKyAgICAgICAgdm9pZCBvblJlcXVlc3RTdWJtaXR0ZWQoKTsKKyAgICAgICAgdm9pZCBvblJlcXVlc3RUaHJlYWRQYXVzZWQoKTsKKworICAgICAgcHJpdmF0ZToKKyAgICAgICAgdm9pZCBub3RpZnlUcmFja2VyTG9ja2VkKGJvb2wgYWN0aXZlKTsKKworICAgICAgICAvLyBTd2l0Y2ggdG8gU1RPUFBFRCBzdGF0ZSBhbmQgcmV0dXJuIHRydWUgaWYgYWxsIGNvbmRpdGlvbnMgYWxsb3dzIGZvciBpdC4KKyAgICAgICAgLy8gT3RoZXJ3aXNlIGRvIG5vdGhpbmcgYW5kIHJldHVybiBmYWxzZS4KKyAgICAgICAgYm9vbCBjaGVja1N3aXRjaFRvU3RvcExvY2tlZCgpOworCisgICAgICAgIHN0ZDo6bXV0ZXggbUxvY2s7CisgICAgICAgIFJlcXVlc3RCdWZmZXJTdGF0ZSBtU3RhdHVzID0gUkJfU1RBVFVTX1NUT1BQRUQ7CisKKyAgICAgICAgYm9vbCBtUmVxdWVzdFRocmVhZFBhdXNlZCA9IHRydWU7CisgICAgICAgIGJvb2wgbUluZmxpZ2h0TWFwRW1wdHkgPSB0cnVlOworICAgICAgICBib29sIG1SZXF1ZXN0QnVmZmVyT25nb2luZyA9IGZhbHNlOworCisgICAgICAgIHdwPGNhbWVyYTM6OlN0YXR1c1RyYWNrZXI+IG1TdGF0dXNUcmFja2VyOworICAgICAgICBpbnQgIG1SZXF1ZXN0QnVmZmVyU3RhdHVzSWQ7CisgICAgfSBtUmVxdWVzdEJ1ZmZlclNNOworCisgICAgLy8gRml4IHVwIHJlc3VsdCBtZXRhZGF0YSBmb3IgbW9ub2Nocm9tZSBjYW1lcmEuCisgICAgYm9vbCBtTmVlZEZpeHVwTW9ub2Nocm9tZVRhZ3M7CisgICAgc3RhdHVzX3QgZml4dXBNb25vY2hyb21lVGFncyhjb25zdCBDYW1lcmFNZXRhZGF0YSYgZGV2aWNlSW5mbywgQ2FtZXJhTWV0YWRhdGEmIHJlc3VsdE1ldGFkYXRhKTsKIH07IC8vIGNsYXNzIENhbWVyYTNEZXZpY2UKIAogfTsgLy8gbmFtZXNwYWNlIGFuZHJvaWQKZGlmZiAtLWdpdCBhL3NlcnZpY2VzL2NhbWVyYS9saWJjYW1lcmFzZXJ2aWNlL2RldmljZTMvQ2FtZXJhM0R1bW15U3RyZWFtLmNwcCBiL3NlcnZpY2VzL2NhbWVyYS9saWJjYW1lcmFzZXJ2aWNlL2RldmljZTMvQ2FtZXJhM0R1bW15U3RyZWFtLmNwcAppbmRleCBmYjFmZjc3Li5iNjM3MTYwIDEwMDY0NAotLS0gYS9zZXJ2aWNlcy9jYW1lcmEvbGliY2FtZXJhc2VydmljZS9kZXZpY2UzL0NhbWVyYTNEdW1teVN0cmVhbS5jcHAKKysrIGIvc2VydmljZXMvY2FtZXJhL2xpYmNhbWVyYXNlcnZpY2UvZGV2aWNlMy9DYW1lcmEzRHVtbXlTdHJlYW0uY3BwCkBAIC00OCw3ICs0OCw3IEBACiAKIHN0YXR1c190IENhbWVyYTNEdW1teVN0cmVhbTo6cmV0dXJuQnVmZmVyTG9ja2VkKAogICAgICAgICBjb25zdCBjYW1lcmEzX3N0cmVhbV9idWZmZXIgJiwKLSAgICAgICAgbnNlY3NfdCkgeworICAgICAgICBuc2Vjc190LCBjb25zdCBzdGQ6OnZlY3RvcjxzaXplX3Q+JikgewogICAgIEFUUkFDRV9DQUxMKCk7CiAgICAgQUxPR0UoIiVzOiBTdHJlYW0gJWQ6IER1bW15IHN0cmVhbSBjYW5ub3QgcmV0dXJuIGJ1ZmZlcnMhIiwgX19GVU5DVElPTl9fLCBtSWQpOwogICAgIHJldHVybiBJTlZBTElEX09QRVJBVElPTjsKQEAgLTU4LDYgKzU4LDcgQEAKICAgICAgICAgICAgIGNvbnN0IGNhbWVyYTNfc3RyZWFtX2J1ZmZlciAmLAogICAgICAgICAgICAgbnNlY3NfdCwKICAgICAgICAgICAgIGJvb2wsCisgICAgICAgICAgICBjb25zdCBzdGQ6OnZlY3RvcjxzaXplX3Q+JiwKICAgICAgICAgICAgIC8qb3V0Ki8KICAgICAgICAgICAgIHNwPEZlbmNlPiopIHsKICAgICBBVFJBQ0VfQ0FMTCgpOwpkaWZmIC0tZ2l0IGEvc2VydmljZXMvY2FtZXJhL2xpYmNhbWVyYXNlcnZpY2UvZGV2aWNlMy9DYW1lcmEzRHVtbXlTdHJlYW0uaCBiL3NlcnZpY2VzL2NhbWVyYS9saWJjYW1lcmFzZXJ2aWNlL2RldmljZTMvQ2FtZXJhM0R1bW15U3RyZWFtLmgKaW5kZXggNDYyNzU0OC4uNGI2N2VhNSAxMDA2NDQKLS0tIGEvc2VydmljZXMvY2FtZXJhL2xpYmNhbWVyYXNlcnZpY2UvZGV2aWNlMy9DYW1lcmEzRHVtbXlTdHJlYW0uaAorKysgYi9zZXJ2aWNlcy9jYW1lcmEvbGliY2FtZXJhc2VydmljZS9kZXZpY2UzL0NhbWVyYTNEdW1teVN0cmVhbS5oCkBAIC04Nyw2ICs4Nyw5IEBACiAgICAgICovCiAgICAgdmlydHVhbCBzc2l6ZV90IGdldFN1cmZhY2VJZChjb25zdCBzcDxTdXJmYWNlPiAmLypzdXJmYWNlKi8pIHsgcmV0dXJuIDA7IH0KIAorICAgIHZpcnR1YWwgc3RhdHVzX3QgZ2V0VW5pcXVlU3VyZmFjZUlkcyhjb25zdCBzdGQ6OnZlY3RvcjxzaXplX3Q+JiwKKyAgICAgICAgICAgIC8qb3V0Ki9zdGQ6OnZlY3RvcjxzaXplX3Q+KikgeyByZXR1cm4gSU5WQUxJRF9PUEVSQVRJT047IH07CisKICAgICAvKioKICAgICAgKiBVcGRhdGUgdGhlIHN0cmVhbSBvdXRwdXQgc3VyZmFjZXMuCiAgICAgICovCkBAIC0xMDQsNiArMTA3LDcgQEAKICAgICAgICAgICAgIGNvbnN0IGNhbWVyYTNfc3RyZWFtX2J1ZmZlciAmYnVmZmVyLAogICAgICAgICAgICAgbnNlY3NfdCB0aW1lc3RhbXAsCiAgICAgICAgICAgICBib29sIG91dHB1dCwKKyAgICAgICAgICAgIGNvbnN0IHN0ZDo6dmVjdG9yPHNpemVfdD4mIHN1cmZhY2VfaWRzLAogICAgICAgICAgICAgLypvdXQqLwogICAgICAgICAgICAgc3A8RmVuY2U+ICpyZWxlYXNlRmVuY2VPdXQpOwogCkBAIC0xMjgsNyArMTMyLDcgQEAKICAgICAgICAgICAgIGNvbnN0IHN0ZDo6dmVjdG9yPHNpemVfdD4mIHN1cmZhY2VfaWRzID0gc3RkOjp2ZWN0b3I8c2l6ZV90PigpKTsKICAgICB2aXJ0dWFsIHN0YXR1c190IHJldHVybkJ1ZmZlckxvY2tlZCgKICAgICAgICAgICAgIGNvbnN0IGNhbWVyYTNfc3RyZWFtX2J1ZmZlciAmYnVmZmVyLAotICAgICAgICAgICAgbnNlY3NfdCB0aW1lc3RhbXApOworICAgICAgICAgICAgbnNlY3NfdCB0aW1lc3RhbXAsIGNvbnN0IHN0ZDo6dmVjdG9yPHNpemVfdD4mIHN1cmZhY2VfaWRzKTsKIAogICAgIHZpcnR1YWwgc3RhdHVzX3QgY29uZmlndXJlUXVldWVMb2NrZWQoKTsKIApkaWZmIC0tZ2l0IGEvc2VydmljZXMvY2FtZXJhL2xpYmNhbWVyYXNlcnZpY2UvZGV2aWNlMy9DYW1lcmEzSU9TdHJlYW1CYXNlLmNwcCBiL3NlcnZpY2VzL2NhbWVyYS9saWJjYW1lcmFzZXJ2aWNlL2RldmljZTMvQ2FtZXJhM0lPU3RyZWFtQmFzZS5jcHAKaW5kZXggM2MxZTQzZC4uMmU5MDlhMCAxMDA2NDQKLS0tIGEvc2VydmljZXMvY2FtZXJhL2xpYmNhbWVyYXNlcnZpY2UvZGV2aWNlMy9DYW1lcmEzSU9TdHJlYW1CYXNlLmNwcAorKysgYi9zZXJ2aWNlcy9jYW1lcmEvbGliY2FtZXJhc2VydmljZS9kZXZpY2UzL0NhbWVyYTNJT1N0cmVhbUJhc2UuY3BwCkBAIC0xMTYsNyArMTE2LDcgQEAKICAgICByZXR1cm4gbVRvdGFsQnVmZmVyQ291bnQ7CiB9CiAKLXNpemVfdCBDYW1lcmEzSU9TdHJlYW1CYXNlOjpnZXRIYW5kb3V0T3V0cHV0QnVmZmVyQ291bnRMb2NrZWQoKSB7CitzaXplX3QgQ2FtZXJhM0lPU3RyZWFtQmFzZTo6Z2V0SGFuZG91dE91dHB1dEJ1ZmZlckNvdW50TG9ja2VkKCkgY29uc3QgewogICAgIHJldHVybiBtSGFuZG91dE91dHB1dEJ1ZmZlckNvdW50OwogfQogCkBAIC0yMTksNyArMjE5LDggQEAKIHN0YXR1c190IENhbWVyYTNJT1N0cmVhbUJhc2U6OnJldHVybkFueUJ1ZmZlckxvY2tlZCgKICAgICAgICAgY29uc3QgY2FtZXJhM19zdHJlYW1fYnVmZmVyICZidWZmZXIsCiAgICAgICAgIG5zZWNzX3QgdGltZXN0YW1wLAotICAgICAgICBib29sIG91dHB1dCkgeworICAgICAgICBib29sIG91dHB1dCwKKyAgICAgICAgY29uc3Qgc3RkOjp2ZWN0b3I8c2l6ZV90PiYgc3VyZmFjZV9pZHMpIHsKICAgICBzdGF0dXNfdCByZXM7CiAKICAgICAvLyByZXR1cm5CdWZmZXIgbWF5IGJlIGNhbGxlZCBmcm9tIGEgcmF3IHBvaW50ZXIsIG5vdCBhIHNwPD4sIGFuZCB3ZSdsbCBiZQpAQCAtMjM1LDcgKzIzNiw3IEBACiAgICAgfQogCiAgICAgc3A8RmVuY2U+IHJlbGVhc2VGZW5jZTsKLSAgICByZXMgPSByZXR1cm5CdWZmZXJDaGVja2VkTG9ja2VkKGJ1ZmZlciwgdGltZXN0YW1wLCBvdXRwdXQsCisgICAgcmVzID0gcmV0dXJuQnVmZmVyQ2hlY2tlZExvY2tlZChidWZmZXIsIHRpbWVzdGFtcCwgb3V0cHV0LCBzdXJmYWNlX2lkcywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZyZWxlYXNlRmVuY2UpOwogICAgIC8vIFJlcyBtYXkgYmUgYW4gZXJyb3IsIGJ1dCB3ZSBzdGlsbCB3YW50IHRvIGRlY3JlbWVudCBvdXIgb3duZWQgY291bnQKICAgICAvLyB0byBlbmFibGUgY2xlYW4gc2h1dGRvd24uIFNvIHdlJ2xsIGp1c3QgcmV0dXJuIHRoZSBlcnJvciBidXQgb3RoZXJ3aXNlCmRpZmYgLS1naXQgYS9zZXJ2aWNlcy9jYW1lcmEvbGliY2FtZXJhc2VydmljZS9kZXZpY2UzL0NhbWVyYTNJT1N0cmVhbUJhc2UuaCBiL3NlcnZpY2VzL2NhbWVyYS9saWJjYW1lcmFzZXJ2aWNlL2RldmljZTMvQ2FtZXJhM0lPU3RyZWFtQmFzZS5oCmluZGV4IDBhMzFkNDQuLjc1MGY2NGQgMTAwNjQ0Ci0tLSBhL3NlcnZpY2VzL2NhbWVyYS9saWJjYW1lcmFzZXJ2aWNlL2RldmljZTMvQ2FtZXJhM0lPU3RyZWFtQmFzZS5oCisrKyBiL3NlcnZpY2VzL2NhbWVyYS9saWJjYW1lcmFzZXJ2aWNlL2RldmljZTMvQ2FtZXJhM0lPU3RyZWFtQmFzZS5oCkBAIC02NiwxMiArNjYsMTQgQEAKICAgICBzdGF0dXNfdCAgICAgICAgIHJldHVybkFueUJ1ZmZlckxvY2tlZCgKICAgICAgICAgICAgIGNvbnN0IGNhbWVyYTNfc3RyZWFtX2J1ZmZlciAmYnVmZmVyLAogICAgICAgICAgICAgbnNlY3NfdCB0aW1lc3RhbXAsCi0gICAgICAgICAgICBib29sIG91dHB1dCk7CisgICAgICAgICAgICBib29sIG91dHB1dCwKKyAgICAgICAgICAgIGNvbnN0IHN0ZDo6dmVjdG9yPHNpemVfdD4mIHN1cmZhY2VfaWRzID0gc3RkOjp2ZWN0b3I8c2l6ZV90PigpKTsKIAogICAgIHZpcnR1YWwgc3RhdHVzX3QgcmV0dXJuQnVmZmVyQ2hlY2tlZExvY2tlZCgKICAgICAgICAgICAgIGNvbnN0IGNhbWVyYTNfc3RyZWFtX2J1ZmZlciAmYnVmZmVyLAogICAgICAgICAgICAgbnNlY3NfdCB0aW1lc3RhbXAsCiAgICAgICAgICAgICBib29sIG91dHB1dCwKKyAgICAgICAgICAgIGNvbnN0IHN0ZDo6dmVjdG9yPHNpemVfdD4mIHN1cmZhY2VfaWRzLAogICAgICAgICAgICAgLypvdXQqLwogICAgICAgICAgICAgc3A8RmVuY2U+ICpyZWxlYXNlRmVuY2VPdXQpID0gMDsKIApAQCAtODIsNyArODQsNyBAQAogCiAgICAgdmlydHVhbCBzaXplX3QgICBnZXRCdWZmZXJDb3VudExvY2tlZCgpOwogCi0gICAgdmlydHVhbCBzaXplX3QgICBnZXRIYW5kb3V0T3V0cHV0QnVmZmVyQ291bnRMb2NrZWQoKTsKKyAgICB2aXJ0dWFsIHNpemVfdCAgIGdldEhhbmRvdXRPdXRwdXRCdWZmZXJDb3VudExvY2tlZCgpIGNvbnN0OwogCiAgICAgdmlydHVhbCBzaXplX3QgICBnZXRIYW5kb3V0SW5wdXRCdWZmZXJDb3VudExvY2tlZCgpOwogCmRpZmYgLS1naXQgYS9zZXJ2aWNlcy9jYW1lcmEvbGliY2FtZXJhc2VydmljZS9kZXZpY2UzL0NhbWVyYTNJbnB1dFN0cmVhbS5jcHAgYi9zZXJ2aWNlcy9jYW1lcmEvbGliY2FtZXJhc2VydmljZS9kZXZpY2UzL0NhbWVyYTNJbnB1dFN0cmVhbS5jcHAKaW5kZXggMDE3ZDdiZS4uZmM4MzY4NCAxMDA2NDQKLS0tIGEvc2VydmljZXMvY2FtZXJhL2xpYmNhbWVyYXNlcnZpY2UvZGV2aWNlMy9DYW1lcmEzSW5wdXRTdHJlYW0uY3BwCisrKyBiL3NlcnZpY2VzL2NhbWVyYS9saWJjYW1lcmFzZXJ2aWNlL2RldmljZTMvQ2FtZXJhM0lucHV0U3RyZWFtLmNwcApAQCAtOTgsNiArOTgsNyBAQAogICAgICAgICAgICAgY29uc3QgY2FtZXJhM19zdHJlYW1fYnVmZmVyICZidWZmZXIsCiAgICAgICAgICAgICBuc2Vjc190IHRpbWVzdGFtcCwKICAgICAgICAgICAgIGJvb2wgb3V0cHV0LAorICAgICAgICAgICAgY29uc3Qgc3RkOjp2ZWN0b3I8c2l6ZV90PiYsCiAgICAgICAgICAgICAvKm91dCovCiAgICAgICAgICAgICBzcDxGZW5jZT4gKnJlbGVhc2VGZW5jZU91dCkgewogCmRpZmYgLS1naXQgYS9zZXJ2aWNlcy9jYW1lcmEvbGliY2FtZXJhc2VydmljZS9kZXZpY2UzL0NhbWVyYTNJbnB1dFN0cmVhbS5oIGIvc2VydmljZXMvY2FtZXJhL2xpYmNhbWVyYXNlcnZpY2UvZGV2aWNlMy9DYW1lcmEzSW5wdXRTdHJlYW0uaAppbmRleCAwNzMyNDY0Li45N2E2MjdhIDEwMDY0NAotLS0gYS9zZXJ2aWNlcy9jYW1lcmEvbGliY2FtZXJhc2VydmljZS9kZXZpY2UzL0NhbWVyYTNJbnB1dFN0cmVhbS5oCisrKyBiL3NlcnZpY2VzL2NhbWVyYS9saWJjYW1lcmFzZXJ2aWNlL2RldmljZTMvQ2FtZXJhM0lucHV0U3RyZWFtLmgKQEAgLTYyLDYgKzYyLDcgQEAKICAgICAgICAgICAgIGNvbnN0IGNhbWVyYTNfc3RyZWFtX2J1ZmZlciAmYnVmZmVyLAogICAgICAgICAgICAgbnNlY3NfdCB0aW1lc3RhbXAsCiAgICAgICAgICAgICBib29sIG91dHB1dCwKKyAgICAgICAgICAgIGNvbnN0IHN0ZDo6dmVjdG9yPHNpemVfdD4mIHN1cmZhY2VfaWRzLAogICAgICAgICAgICAgLypvdXQqLwogICAgICAgICAgICAgc3A8RmVuY2U+ICpyZWxlYXNlRmVuY2VPdXQpOwogCmRpZmYgLS1naXQgYS9zZXJ2aWNlcy9jYW1lcmEvbGliY2FtZXJhc2VydmljZS9kZXZpY2UzL0NhbWVyYTNPdXRwdXRTdHJlYW0uY3BwIGIvc2VydmljZXMvY2FtZXJhL2xpYmNhbWVyYXNlcnZpY2UvZGV2aWNlMy9DYW1lcmEzT3V0cHV0U3RyZWFtLmNwcAppbmRleCAyYzAyMGEyLi4yMTljYzI0IDEwMDY0NAotLS0gYS9zZXJ2aWNlcy9jYW1lcmEvbGliY2FtZXJhc2VydmljZS9kZXZpY2UzL0NhbWVyYTNPdXRwdXRTdHJlYW0uY3BwCisrKyBiL3NlcnZpY2VzL2NhbWVyYS9saWJjYW1lcmFzZXJ2aWNlL2RldmljZTMvQ2FtZXJhM091dHB1dFN0cmVhbS5jcHAKQEAgLTE4NywxNiArMTg3LDE3IEBACiB9CiAKIHN0YXR1c190IENhbWVyYTNPdXRwdXRTdHJlYW06OnF1ZXVlQnVmZmVyVG9Db25zdW1lcihzcDxBTmF0aXZlV2luZG93PiYgY29uc3VtZXIsCi0gICAgICAgICAgICBBTmF0aXZlV2luZG93QnVmZmVyKiBidWZmZXIsIGludCBhbndSZWxlYXNlRmVuY2UpIHsKKyAgICAgICAgICAgIEFOYXRpdmVXaW5kb3dCdWZmZXIqIGJ1ZmZlciwgaW50IGFud1JlbGVhc2VGZW5jZSwKKyAgICAgICAgICAgIGNvbnN0IHN0ZDo6dmVjdG9yPHNpemVfdD4mKSB7CiAgICAgcmV0dXJuIGNvbnN1bWVyLT5xdWV1ZUJ1ZmZlcihjb25zdW1lci5nZXQoKSwgYnVmZmVyLCBhbndSZWxlYXNlRmVuY2UpOwogfQogCiBzdGF0dXNfdCBDYW1lcmEzT3V0cHV0U3RyZWFtOjpyZXR1cm5CdWZmZXJMb2NrZWQoCiAgICAgICAgIGNvbnN0IGNhbWVyYTNfc3RyZWFtX2J1ZmZlciAmYnVmZmVyLAotICAgICAgICBuc2Vjc190IHRpbWVzdGFtcCkgeworICAgICAgICBuc2Vjc190IHRpbWVzdGFtcCwgY29uc3Qgc3RkOjp2ZWN0b3I8c2l6ZV90PiYgc3VyZmFjZV9pZHMpIHsKICAgICBBVFJBQ0VfQ0FMTCgpOwogCi0gICAgc3RhdHVzX3QgcmVzID0gcmV0dXJuQW55QnVmZmVyTG9ja2VkKGJ1ZmZlciwgdGltZXN0YW1wLCAvKm91dHB1dCovdHJ1ZSk7CisgICAgc3RhdHVzX3QgcmVzID0gcmV0dXJuQW55QnVmZmVyTG9ja2VkKGJ1ZmZlciwgdGltZXN0YW1wLCAvKm91dHB1dCovdHJ1ZSwgc3VyZmFjZV9pZHMpOwogCiAgICAgaWYgKHJlcyAhPSBPSykgewogICAgICAgICByZXR1cm4gcmVzOwpAQCAtMjEyLDYgKzIxMyw3IEBACiAgICAgICAgICAgICBjb25zdCBjYW1lcmEzX3N0cmVhbV9idWZmZXIgJmJ1ZmZlciwKICAgICAgICAgICAgIG5zZWNzX3QgdGltZXN0YW1wLAogICAgICAgICAgICAgYm9vbCBvdXRwdXQsCisgICAgICAgICAgICBjb25zdCBzdGQ6OnZlY3RvcjxzaXplX3Q+JiBzdXJmYWNlX2lkcywKICAgICAgICAgICAgIC8qb3V0Ki8KICAgICAgICAgICAgIHNwPEZlbmNlPiAqcmVsZWFzZUZlbmNlT3V0KSB7CiAKQEAgLTIzNywxMiArMjM5LDE0IEBACiAgICAgLyoqCiAgICAgICogUmV0dXJuIGJ1ZmZlciBiYWNrIHRvIEFOYXRpdmVXaW5kb3cKICAgICAgKi8KLSAgICBpZiAoYnVmZmVyLnN0YXR1cyA9PSBDQU1FUkEzX0JVRkZFUl9TVEFUVVNfRVJST1IgfHwgbURyb3BCdWZmZXJzKSB7CisgICAgaWYgKGJ1ZmZlci5zdGF0dXMgPT0gQ0FNRVJBM19CVUZGRVJfU1RBVFVTX0VSUk9SIHx8IG1Ecm9wQnVmZmVycyB8fCB0aW1lc3RhbXAgPT0gMCkgewogICAgICAgICAvLyBDYW5jZWwgYnVmZmVyCiAgICAgICAgIGlmIChtRHJvcEJ1ZmZlcnMpIHsKICAgICAgICAgICAgIEFMT0dWKCIlczogRHJvcHBpbmcgYSBmcmFtZSBmb3Igc3RyZWFtICVkLiIsIF9fRlVOQ1RJT05fXywgbUlkKTsKLSAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgfSBlbHNlIGlmIChidWZmZXIuc3RhdHVzID09IENBTUVSQTNfQlVGRkVSX1NUQVRVU19FUlJPUikgewogICAgICAgICAgICAgQUxPR1coIiVzOiBBIGZyYW1lIGlzIGRyb3BwZWQgZm9yIHN0cmVhbSAlZCBkdWUgdG8gYnVmZmVyIGVycm9yLiIsIF9fRlVOQ1RJT05fXywgbUlkKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIEFMT0dFKCIlczogU3RyZWFtICVkOiB0aW1lc3RhbXAgc2hvdWxkbid0IGJlIDAiLCBfX0ZVTkNUSU9OX18sIG1JZCk7CiAgICAgICAgIH0KIAogICAgICAgICByZXMgPSBjdXJyZW50Q29uc3VtZXItPmNhbmNlbEJ1ZmZlcihjdXJyZW50Q29uc3VtZXIuZ2V0KCksCkBAIC0yNzksNyArMjgzLDcgQEAKICAgICAgICAgICAgIHJldHVybiByZXM7CiAgICAgICAgIH0KIAotICAgICAgICByZXMgPSBxdWV1ZUJ1ZmZlclRvQ29uc3VtZXIoY3VycmVudENvbnN1bWVyLCBhbndCdWZmZXIsIGFud1JlbGVhc2VGZW5jZSk7CisgICAgICAgIHJlcyA9IHF1ZXVlQnVmZmVyVG9Db25zdW1lcihjdXJyZW50Q29uc3VtZXIsIGFud0J1ZmZlciwgYW53UmVsZWFzZUZlbmNlLCBzdXJmYWNlX2lkcyk7CiAgICAgICAgIGlmIChyZXMgIT0gT0spIHsKICAgICAgICAgICAgIEFMT0dFKCIlczogU3RyZWFtICVkOiBFcnJvciBxdWV1ZWluZyBidWZmZXIgdG8gbmF0aXZlIHdpbmRvdzogIgogICAgICAgICAgICAgICAgICAgIiVzICglZCkiLCBfX0ZVTkNUSU9OX18sIG1JZCwgc3RyZXJyb3IoLXJlcyksIHJlcyk7CmRpZmYgLS1naXQgYS9zZXJ2aWNlcy9jYW1lcmEvbGliY2FtZXJhc2VydmljZS9kZXZpY2UzL0NhbWVyYTNPdXRwdXRTdHJlYW0uaCBiL3NlcnZpY2VzL2NhbWVyYS9saWJjYW1lcmFzZXJ2aWNlL2RldmljZTMvQ2FtZXJhM091dHB1dFN0cmVhbS5oCmluZGV4IDZmMzZmOTIuLjQxMDkwNWQgMTAwNjQ0Ci0tLSBhL3NlcnZpY2VzL2NhbWVyYS9saWJjYW1lcmFzZXJ2aWNlL2RldmljZTMvQ2FtZXJhM091dHB1dFN0cmVhbS5oCisrKyBiL3NlcnZpY2VzL2NhbWVyYS9saWJjYW1lcmFzZXJ2aWNlL2RldmljZTMvQ2FtZXJhM091dHB1dFN0cmVhbS5oCkBAIC0xOTAsNiArMTkwLDkgQEAKICAgICAgKi8KICAgICB2aXJ0dWFsIHNzaXplX3QgZ2V0U3VyZmFjZUlkKGNvbnN0IHNwPFN1cmZhY2U+ICYvKnN1cmZhY2UqLykgeyByZXR1cm4gMDsgfQogCisgICAgdmlydHVhbCBzdGF0dXNfdCBnZXRVbmlxdWVTdXJmYWNlSWRzKGNvbnN0IHN0ZDo6dmVjdG9yPHNpemVfdD4mLAorICAgICAgICAgICAgLypvdXQqL3N0ZDo6dmVjdG9yPHNpemVfdD4qKSB7IHJldHVybiBJTlZBTElEX09QRVJBVElPTjsgfTsKKwogICAgIC8qKgogICAgICAqIFVwZGF0ZSB0aGUgc3RyZWFtIG91dHB1dCBzdXJmYWNlcy4KICAgICAgKi8KQEAgLTIxMyw2ICsyMTYsNyBAQAogICAgICAgICAgICAgY29uc3QgY2FtZXJhM19zdHJlYW1fYnVmZmVyICZidWZmZXIsCiAgICAgICAgICAgICBuc2Vjc190IHRpbWVzdGFtcCwKICAgICAgICAgICAgIGJvb2wgb3V0cHV0LAorICAgICAgICAgICAgY29uc3Qgc3RkOjp2ZWN0b3I8c2l6ZV90PiYgc3VyZmFjZV9pZHMsCiAgICAgICAgICAgICAvKm91dCovCiAgICAgICAgICAgICBzcDxGZW5jZT4gKnJlbGVhc2VGZW5jZU91dCk7CiAKQEAgLTI4NSwxMCArMjg5LDExIEBACiAKICAgICB2aXJ0dWFsIHN0YXR1c190IHJldHVybkJ1ZmZlckxvY2tlZCgKICAgICAgICAgICAgIGNvbnN0IGNhbWVyYTNfc3RyZWFtX2J1ZmZlciAmYnVmZmVyLAotICAgICAgICAgICAgbnNlY3NfdCB0aW1lc3RhbXApOworICAgICAgICAgICAgbnNlY3NfdCB0aW1lc3RhbXAsIGNvbnN0IHN0ZDo6dmVjdG9yPHNpemVfdD4mIHN1cmZhY2VfaWRzKTsKIAogICAgIHZpcnR1YWwgc3RhdHVzX3QgcXVldWVCdWZmZXJUb0NvbnN1bWVyKHNwPEFOYXRpdmVXaW5kb3c+JiBjb25zdW1lciwKLSAgICAgICAgICAgIEFOYXRpdmVXaW5kb3dCdWZmZXIqIGJ1ZmZlciwgaW50IGFud1JlbGVhc2VGZW5jZSk7CisgICAgICAgICAgICBBTmF0aXZlV2luZG93QnVmZmVyKiBidWZmZXIsIGludCBhbndSZWxlYXNlRmVuY2UsCisgICAgICAgICAgICBjb25zdCBzdGQ6OnZlY3RvcjxzaXplX3Q+JiBzdXJmYWNlX2lkcyk7CiAKICAgICB2aXJ0dWFsIHN0YXR1c190IGNvbmZpZ3VyZVF1ZXVlTG9ja2VkKCk7CiAKZGlmZiAtLWdpdCBhL3NlcnZpY2VzL2NhbWVyYS9saWJjYW1lcmFzZXJ2aWNlL2RldmljZTMvQ2FtZXJhM091dHB1dFN0cmVhbUludGVyZmFjZS5oIGIvc2VydmljZXMvY2FtZXJhL2xpYmNhbWVyYXNlcnZpY2UvZGV2aWNlMy9DYW1lcmEzT3V0cHV0U3RyZWFtSW50ZXJmYWNlLmgKaW5kZXggYTcxMWE2ZC4uMmJkZTk0OSAxMDA2NDQKLS0tIGEvc2VydmljZXMvY2FtZXJhL2xpYmNhbWVyYXNlcnZpY2UvZGV2aWNlMy9DYW1lcmEzT3V0cHV0U3RyZWFtSW50ZXJmYWNlLmgKKysrIGIvc2VydmljZXMvY2FtZXJhL2xpYmNhbWVyYXNlcnZpY2UvZGV2aWNlMy9DYW1lcmEzT3V0cHV0U3RyZWFtSW50ZXJmYWNlLmgKQEAgLTY3LDYgKzY3LDE4IEBACiAgICAgdmlydHVhbCBzc2l6ZV90IGdldFN1cmZhY2VJZChjb25zdCBzcDxTdXJmYWNlPiAmc3VyZmFjZSkgPSAwOwogCiAgICAgLyoqCisgICAgICogUXVlcnkgdGhlIHVuaXF1ZSBzdXJmYWNlIElEcyBvZiBjdXJyZW50IHN1cmZhY2VJZHMuCisgICAgICogV2hlbiBwYXNzaW5nIHVuaXF1ZSBzdXJmYWNlIElEcyBpbiByZXR1cm5CdWZmZXIoKSwgaWYgdGhlCisgICAgICogc3VyZmFjZUlkIGhhcyBiZWVuIHJlbW92ZWQgZnJvbSB0aGUgc3RyZWFtLCB0aGUgb3V0cHV0IGNvcnJlc3BvbmRpbmcgdG8KKyAgICAgKiB0aGUgdW5pcXVlIHN1cmZhY2UgSUQgd2lsbCBiZSBpZ25vcmVkIGFuZCBub3QgZGVsaXZlcmVkIHRvIGNsaWVudC4KKyAgICAgKgorICAgICAqIFJldHVybiBJTlZBTElEX09QRVJBVElPTiBpZiBhbmQgb25seSBpZiB0aGUgc3RyZWFtIGRvZXMgbm90IHN1cHBvcnQKKyAgICAgKiBzdXJmYWNlIHNoYXJpbmcuCisgICAgICovCisgICAgdmlydHVhbCBzdGF0dXNfdCBnZXRVbmlxdWVTdXJmYWNlSWRzKGNvbnN0IHN0ZDo6dmVjdG9yPHNpemVfdD4mIHN1cmZhY2VJZHMsCisgICAgICAgICAgICAvKm91dCovc3RkOjp2ZWN0b3I8c2l6ZV90Piogb3V0VW5pcXVlSWRzKSA9IDA7CisKKyAgICAvKioKICAgICAgKiBVcGRhdGUgdGhlIHN0cmVhbSBvdXRwdXQgc3VyZmFjZXMuCiAgICAgICovCiAgICAgdmlydHVhbCBzdGF0dXNfdCB1cGRhdGVTdHJlYW0oY29uc3Qgc3RkOjp2ZWN0b3I8c3A8U3VyZmFjZT4+ICZvdXRwdXRTdXJmYWNlcywKZGlmZiAtLWdpdCBhL3NlcnZpY2VzL2NhbWVyYS9saWJjYW1lcmFzZXJ2aWNlL2RldmljZTMvQ2FtZXJhM1NoYXJlZE91dHB1dFN0cmVhbS5jcHAgYi9zZXJ2aWNlcy9jYW1lcmEvbGliY2FtZXJhc2VydmljZS9kZXZpY2UzL0NhbWVyYTNTaGFyZWRPdXRwdXRTdHJlYW0uY3BwCmluZGV4IGZiM2NlNGMuLmUzYjc0ZDcgMTAwNjQ0Ci0tLSBhL3NlcnZpY2VzL2NhbWVyYS9saWJjYW1lcmFzZXJ2aWNlL2RldmljZTMvQ2FtZXJhM1NoYXJlZE91dHB1dFN0cmVhbS5jcHAKKysrIGIvc2VydmljZXMvY2FtZXJhL2xpYmNhbWVyYXNlcnZpY2UvZGV2aWNlMy9DYW1lcmEzU2hhcmVkT3V0cHV0U3RyZWFtLmNwcApAQCAtMTQsNiArMTQsMTAgQEAKICAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgogICovCiAKKyNkZWZpbmUgTE9HX1RBRyAiQ2FtZXJhMy1TaGFyZWRPdVN0cm0iCisjZGVmaW5lIEFUUkFDRV9UQUcgQVRSQUNFX1RBR19DQU1FUkEKKy8vI2RlZmluZSBMT0dfTkRFQlVHIDAKKwogI2luY2x1ZGUgIkNhbWVyYTNTaGFyZWRPdXRwdXRTdHJlYW0uaCIKIAogbmFtZXNwYWNlIGFuZHJvaWQgewpAQCAtMjgsMTYgKzMyLDE3IEBACiAgICAgICAgIHVpbnQ2NF90IGNvbnN1bWVyVXNhZ2UsIGFuZHJvaWRfZGF0YXNwYWNlIGRhdGFTcGFjZSwKICAgICAgICAgY2FtZXJhM19zdHJlYW1fcm90YXRpb25fdCByb3RhdGlvbiwKICAgICAgICAgbnNlY3NfdCB0aW1lc3RhbXBPZmZzZXQsIGNvbnN0IFN0cmluZzgmIHBoeXNpY2FsQ2FtZXJhSWQsCi0gICAgICAgIGludCBzZXRJZCkgOgorICAgICAgICBpbnQgc2V0SWQsIGJvb2wgdXNlSGFsQnVmTWFuYWdlcikgOgogICAgICAgICBDYW1lcmEzT3V0cHV0U3RyZWFtKGlkLCBDQU1FUkEzX1NUUkVBTV9PVVRQVVQsIHdpZHRoLCBoZWlnaHQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9ybWF0LCBkYXRhU3BhY2UsIHJvdGF0aW9uLCBwaHlzaWNhbENhbWVyYUlkLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN1bWVyVXNhZ2UsIHRpbWVzdGFtcE9mZnNldCwgc2V0SWQpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdW1lclVzYWdlLCB0aW1lc3RhbXBPZmZzZXQsIHNldElkKSwKKyAgICAgICAgbVVzZUhhbEJ1Zk1hbmFnZXIodXNlSGFsQnVmTWFuYWdlcikgewogICAgIHNpemVfdCBjb25zdW1lckNvdW50ID0gc3RkOjptaW4oc3VyZmFjZXMuc2l6ZSgpLCBrTWF4T3V0cHV0cyk7CiAgICAgaWYgKHN1cmZhY2VzLnNpemUoKSA+IGNvbnN1bWVyQ291bnQpIHsKICAgICAgICAgQUxPR0UoIiVzOiBUcnlpbmcgdG8gYWRkIG1vcmUgY29uc3VtZXJzIHRoYW4gdGhlIG1heGltdW0gIiwgX19mdW5jX18pOwogICAgIH0KICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGNvbnN1bWVyQ291bnQ7IGkrKykgewotICAgICAgICBtU3VyZmFjZXNbaV0gPSBzdXJmYWNlc1tpXTsKKyAgICAgICAgbVN1cmZhY2VVbmlxdWVJZHNbaV0gPSBzdGQ6Om1ha2VfcGFpcihzdXJmYWNlc1tpXSwgbU5leHRVbmlxdWVTdXJmYWNlSWQrKyk7CiAgICAgfQogfQogCkBAIC00OCwxNSArNTMsMTUgQEAKIHN0YXR1c190IENhbWVyYTNTaGFyZWRPdXRwdXRTdHJlYW06OmNvbm5lY3RTdHJlYW1TcGxpdHRlckxvY2tlZCgpIHsKICAgICBzdGF0dXNfdCByZXMgPSBPSzsKIAotICAgIG1TdHJlYW1TcGxpdHRlciA9IG5ldyBDYW1lcmEzU3RyZWFtU3BsaXR0ZXIoKTsKKyAgICBtU3RyZWFtU3BsaXR0ZXIgPSBuZXcgQ2FtZXJhM1N0cmVhbVNwbGl0dGVyKG1Vc2VIYWxCdWZNYW5hZ2VyKTsKIAogICAgIHVpbnQ2NF90IHVzYWdlOwogICAgIGdldEVuZHBvaW50VXNhZ2UoJnVzYWdlKTsKIAogICAgIHN0ZDo6dW5vcmRlcmVkX21hcDxzaXplX3QsIHNwPFN1cmZhY2U+PiBpbml0aWFsU3VyZmFjZXM7CiAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBrTWF4T3V0cHV0czsgaSsrKSB7Ci0gICAgICAgIGlmIChtU3VyZmFjZXNbaV0gIT0gbnVsbHB0cikgewotICAgICAgICAgICAgaW5pdGlhbFN1cmZhY2VzLmVtcGxhY2UoaSwgbVN1cmZhY2VzW2ldKTsKKyAgICAgICAgaWYgKG1TdXJmYWNlVW5pcXVlSWRzW2ldLmZpcnN0ICE9IG51bGxwdHIpIHsKKyAgICAgICAgICAgIGluaXRpYWxTdXJmYWNlcy5lbXBsYWNlKGksIG1TdXJmYWNlVW5pcXVlSWRzW2ldLmZpcnN0KTsKICAgICAgICAgfQogICAgIH0KIApAQCAtNzEsNiArNzYsMzEgQEAKICAgICByZXR1cm4gcmVzOwogfQogCitzdGF0dXNfdCBDYW1lcmEzU2hhcmVkT3V0cHV0U3RyZWFtOjphdHRhY2hCdWZmZXJUb1NwbGl0dGVyTG9ja2VkKAorICAgICAgICBBTmF0aXZlV2luZG93QnVmZmVyKiBhbmIsCisgICAgICAgIGNvbnN0IHN0ZDo6dmVjdG9yPHNpemVfdD4mIHN1cmZhY2VfaWRzKSB7CisgICAgc3RhdHVzX3QgcmVzID0gT0s7CisKKyAgICAvLyBBdHRhY2ggdGhlIGJ1ZmZlciB0byB0aGUgc3BsaXR0ZXIgb3V0cHV0IHF1ZXVlcy4gVGhpcyBjb3VsZCBibG9jayBpZgorICAgIC8vIHRoZSBvdXRwdXQgcXVldWUgZG9lc24ndCBoYXZlIGFueSBlbXB0eSBzbG90LiBTbyB1bmxvY2sgZHVyaW5nIHRoZSBjb3Vyc2UKKyAgICAvLyBvZiBhdHRhY2hCdWZmZXJUb091dHB1dHMuCisgICAgc3A8Q2FtZXJhM1N0cmVhbVNwbGl0dGVyPiBzcGxpdHRlciA9IG1TdHJlYW1TcGxpdHRlcjsKKyAgICBtTG9jay51bmxvY2soKTsKKyAgICByZXMgPSBzcGxpdHRlci0+YXR0YWNoQnVmZmVyVG9PdXRwdXRzKGFuYiwgc3VyZmFjZV9pZHMpOworICAgIG1Mb2NrLmxvY2soKTsKKyAgICBpZiAocmVzICE9IE9LKSB7CisgICAgICAgIEFMT0dFKCIlczogU3RyZWFtICVkOiBDYW5ub3QgYXR0YWNoIHN0cmVhbSBzcGxpdHRlciBidWZmZXIgdG8gb3V0cHV0czogJXMgKCVkKSIsCisgICAgICAgICAgICAgICAgX19GVU5DVElPTl9fLCBtSWQsIHN0cmVycm9yKC1yZXMpLCByZXMpOworICAgICAgICAvLyBPbmx5IHRyYW5zaXRpb24gdG8gU1RBVEVfQUJBTkRPTkVEIGZyb20gU1RBVEVfQ09ORklHVVJFRC4gKElmIGl0IGlzIFNUQVRFX1BSRVBBUklORywKKyAgICAgICAgLy8gbGV0IHByZXBhcmVOZXh0QnVmZmVyIGhhbmRsZSB0aGUgZXJyb3IuKQorICAgICAgICBpZiAocmVzID09IE5PX0lOSVQgJiYgbVN0YXRlID09IFNUQVRFX0NPTkZJR1VSRUQpIHsKKyAgICAgICAgICAgIG1TdGF0ZSA9IFNUQVRFX0FCQU5ET05FRDsKKyAgICAgICAgfQorICAgIH0KKyAgICByZXR1cm4gcmVzOworfQorCisKIHN0YXR1c190IENhbWVyYTNTaGFyZWRPdXRwdXRTdHJlYW06Om5vdGlmeUJ1ZmZlclJlbGVhc2VkKEFOYXRpdmVXaW5kb3dCdWZmZXIgKmFud0J1ZmZlcikgewogICAgIE11dGV4OjpBdXRvbG9jayBsKG1Mb2NrKTsKICAgICBzdGF0dXNfdCByZXMgPSBPSzsKQEAgLTg5LDcgKzExOSw3IEBACiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KIAotICAgIHJldHVybiAobVN1cmZhY2VzW3N1cmZhY2VfaWRdID09IG51bGxwdHIpOworICAgIHJldHVybiAobVN1cmZhY2VVbmlxdWVJZHNbc3VyZmFjZV9pZF0uZmlyc3QgPT0gbnVsbHB0cik7CiB9CiAKIHN0YXR1c190IENhbWVyYTNTaGFyZWRPdXRwdXRTdHJlYW06OnNldENvbnN1bWVycyhjb25zdCBzdGQ6OnZlY3RvcjxzcDxTdXJmYWNlPj4mIHN1cmZhY2VzKSB7CkBAIC0xMTIsNyArMTQyLDcgQEAKICAgICAgICAgICAgIHJldHVybiBOT19NRU1PUlk7CiAgICAgICAgIH0KIAotICAgICAgICBtU3VyZmFjZXNbaWRdID0gc3VyZmFjZTsKKyAgICAgICAgbVN1cmZhY2VVbmlxdWVJZHNbaWRdID0gc3RkOjptYWtlX3BhaXIoc3VyZmFjZSwgbU5leHRVbmlxdWVTdXJmYWNlSWQrKyk7CiAKICAgICAgICAgLy8gT25seSBjYWxsIGFkZE91dHB1dCBpZiB0aGUgc3BsaXR0ZXIgaGFzIGJlZW4gY29ubmVjdGVkLgogICAgICAgICBpZiAobVN0cmVhbVNwbGl0dGVyICE9IG51bGxwdHIpIHsKQEAgLTEyOCw3ICsxNTgsNyBAQAogfQogCiBzdGF0dXNfdCBDYW1lcmEzU2hhcmVkT3V0cHV0U3RyZWFtOjpnZXRCdWZmZXJMb2NrZWQoY2FtZXJhM19zdHJlYW1fYnVmZmVyICpidWZmZXIsCi0gICAgICAgIGNvbnN0IHN0ZDo6dmVjdG9yPHNpemVfdD4mIHN1cmZhY2VfaWRzKSB7CisgICAgICAgIGNvbnN0IHN0ZDo6dmVjdG9yPHNpemVfdD4mIHN1cmZhY2VJZHMpIHsKICAgICBBTmF0aXZlV2luZG93QnVmZmVyKiBhbmI7CiAgICAgaW50IGZlbmNlRmQgPSAtMTsKIApAQCAtMTM4LDIzICsxNjgsMTEgQEAKICAgICAgICAgcmV0dXJuIHJlczsKICAgICB9CiAKLSAgICAvLyBBdHRhY2ggdGhlIGJ1ZmZlciB0byB0aGUgc3BsaXR0ZXIgb3V0cHV0IHF1ZXVlcy4gVGhpcyBjb3VsZCBibG9jayBpZgotICAgIC8vIHRoZSBvdXRwdXQgcXVldWUgZG9lc24ndCBoYXZlIGFueSBlbXB0eSBzbG90LiBTbyB1bmxvY2sgZHVyaW5nIHRoZSBjb3Vyc2UKLSAgICAvLyBvZiBhdHRhY2hCdWZmZXJUb091dHB1dHMuCi0gICAgc3A8Q2FtZXJhM1N0cmVhbVNwbGl0dGVyPiBzcGxpdHRlciA9IG1TdHJlYW1TcGxpdHRlcjsKLSAgICBtTG9jay51bmxvY2soKTsKLSAgICByZXMgPSBzcGxpdHRlci0+YXR0YWNoQnVmZmVyVG9PdXRwdXRzKGFuYiwgc3VyZmFjZV9pZHMpOwotICAgIG1Mb2NrLmxvY2soKTsKLSAgICBpZiAocmVzICE9IE9LKSB7Ci0gICAgICAgIEFMT0dFKCIlczogU3RyZWFtICVkOiBDYW5ub3QgYXR0YWNoIHN0cmVhbSBzcGxpdHRlciBidWZmZXIgdG8gb3V0cHV0czogJXMgKCVkKSIsCi0gICAgICAgICAgICAgICAgX19GVU5DVElPTl9fLCBtSWQsIHN0cmVycm9yKC1yZXMpLCByZXMpOwotICAgICAgICAvLyBPbmx5IHRyYW5zaXRpb24gdG8gU1RBVEVfQUJBTkRPTkVEIGZyb20gU1RBVEVfQ09ORklHVVJFRC4gKElmIGl0IGlzIFNUQVRFX1BSRVBBUklORywKLSAgICAgICAgLy8gbGV0IHByZXBhcmVOZXh0QnVmZmVyIGhhbmRsZSB0aGUgZXJyb3IuKQotICAgICAgICBpZiAocmVzID09IE5PX0lOSVQgJiYgbVN0YXRlID09IFNUQVRFX0NPTkZJR1VSRUQpIHsKLSAgICAgICAgICAgIG1TdGF0ZSA9IFNUQVRFX0FCQU5ET05FRDsKKyAgICBpZiAoIW1Vc2VIYWxCdWZNYW5hZ2VyKSB7CisgICAgICAgIHJlcyA9IGF0dGFjaEJ1ZmZlclRvU3BsaXR0ZXJMb2NrZWQoYW5iLCBzdXJmYWNlSWRzKTsKKyAgICAgICAgaWYgKHJlcyAhPSBPSykgeworICAgICAgICAgICAgcmV0dXJuIHJlczsKICAgICAgICAgfQotCi0gICAgICAgIHJldHVybiByZXM7CiAgICAgfQogCiAgICAgLyoqCkBAIC0xNjgsOCArMTg2LDM4IEBACiB9CiAKIHN0YXR1c190IENhbWVyYTNTaGFyZWRPdXRwdXRTdHJlYW06OnF1ZXVlQnVmZmVyVG9Db25zdW1lcihzcDxBTmF0aXZlV2luZG93PiYgY29uc3VtZXIsCi0gICAgICAgICAgICBBTmF0aXZlV2luZG93QnVmZmVyKiBidWZmZXIsIGludCBhbndSZWxlYXNlRmVuY2UpIHsKLSAgICBzdGF0dXNfdCByZXMgPSBjb25zdW1lci0+cXVldWVCdWZmZXIoY29uc3VtZXIuZ2V0KCksIGJ1ZmZlciwgYW53UmVsZWFzZUZlbmNlKTsKKyAgICAgICAgICAgIEFOYXRpdmVXaW5kb3dCdWZmZXIqIGJ1ZmZlciwgaW50IGFud1JlbGVhc2VGZW5jZSwKKyAgICAgICAgICAgIGNvbnN0IHN0ZDo6dmVjdG9yPHNpemVfdD4mIHVuaXF1ZVN1cmZhY2VJZHMpIHsKKyAgICBzdGF0dXNfdCByZXMgPSBPSzsKKyAgICBpZiAobVVzZUhhbEJ1Zk1hbmFnZXIpIHsKKyAgICAgICAgaWYgKHVuaXF1ZVN1cmZhY2VJZHMuc2l6ZSgpID09IDApIHsKKyAgICAgICAgICAgIEFMT0dFKCIlczogdW5pcXVlU3VyZmFjZUlkcyBtdXN0IG5vdCBiZSBlbXB0eSEiLCBfX0ZVTkNUSU9OX18pOworICAgICAgICAgICAgcmV0dXJuIEJBRF9WQUxVRTsKKyAgICAgICAgfQorICAgICAgICBNdXRleDo6QXV0b2xvY2sgbChtTG9jayk7CisgICAgICAgIHN0ZDo6dmVjdG9yPHNpemVfdD4gc3VyZmFjZUlkczsKKyAgICAgICAgZm9yIChjb25zdCBhdXRvJiB1bmlxdWVJZCA6IHVuaXF1ZVN1cmZhY2VJZHMpIHsKKyAgICAgICAgICAgIGJvb2wgdW5pcXVlSWRGb3VuZCA9IGZhbHNlOworICAgICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBrTWF4T3V0cHV0czsgaSsrKSB7CisgICAgICAgICAgICAgICAgaWYgKG1TdXJmYWNlVW5pcXVlSWRzW2ldLnNlY29uZCA9PSB1bmlxdWVJZCkgeworICAgICAgICAgICAgICAgICAgICBzdXJmYWNlSWRzLnB1c2hfYmFjayhpKTsKKyAgICAgICAgICAgICAgICAgICAgdW5pcXVlSWRGb3VuZCA9IHRydWU7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmICghdW5pcXVlSWRGb3VuZCkgeworICAgICAgICAgICAgICAgIEFMT0dWKCIlczogdW5rbm93biB1bmlxdWUgc3VyZmFjZSBJRCAlenUgZm9yIHN0cmVhbSAlZDogIgorICAgICAgICAgICAgICAgICAgICAgICAgIm91dHB1dCBtaWdodCBoYXZlIGJlZW4gcmVtb3ZlZC4iLAorICAgICAgICAgICAgICAgICAgICAgICAgX19GVU5DVElPTl9fLCB1bmlxdWVJZCwgbUlkKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICByZXMgPSBhdHRhY2hCdWZmZXJUb1NwbGl0dGVyTG9ja2VkKGJ1ZmZlciwgc3VyZmFjZUlkcyk7CisgICAgICAgIGlmIChyZXMgIT0gT0spIHsKKyAgICAgICAgICAgIHJldHVybiByZXM7CisgICAgICAgIH0KKyAgICB9CisKKyAgICByZXMgPSBjb25zdW1lci0+cXVldWVCdWZmZXIoY29uc3VtZXIuZ2V0KCksIGJ1ZmZlciwgYW53UmVsZWFzZUZlbmNlKTsKIAogICAgIC8vIEFmdGVyIHF1ZXVpbmcgYnVmZmVyIHRvIHRoZSBpbnRlcm5hbCBjb25zdW1lciBxdWV1ZSwgY2hlY2sgd2hldGhlciB0aGUgYnVmZmVyIGlzCiAgICAgLy8gc3VjY2Vzc2Z1bGx5IHF1ZXVlZCB0byB0aGUgb3V0cHV0IHF1ZXVlcy4KQEAgLTIyOCw4ICsyNzYsOCBAQAogICAgICAgICAqdXNhZ2UgPSBnZXRQcmVzZXRDb25zdW1lclVzYWdlKCk7CiAKICAgICAgICAgZm9yIChzaXplX3QgaWQgPSAwOyBpZCA8IGtNYXhPdXRwdXRzOyBpZCsrKSB7Ci0gICAgICAgICAgICBpZiAobVN1cmZhY2VzW2lkXSAhPSBudWxscHRyKSB7Ci0gICAgICAgICAgICAgICAgcmVzID0gZ2V0RW5kcG9pbnRVc2FnZUZvclN1cmZhY2UoJnUsIG1TdXJmYWNlc1tpZF0pOworICAgICAgICAgICAgaWYgKG1TdXJmYWNlVW5pcXVlSWRzW2lkXS5maXJzdCAhPSBudWxscHRyKSB7CisgICAgICAgICAgICAgICAgcmVzID0gZ2V0RW5kcG9pbnRVc2FnZUZvclN1cmZhY2UoJnUsIG1TdXJmYWNlVW5pcXVlSWRzW2lkXS5maXJzdCk7CiAgICAgICAgICAgICAgICAgKnVzYWdlIHw9IHU7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KQEAgLTI0NSw3ICsyOTMsNyBAQAogc3NpemVfdCBDYW1lcmEzU2hhcmVkT3V0cHV0U3RyZWFtOjpnZXROZXh0U3VyZmFjZUlkTG9ja2VkKCkgewogICAgIHNzaXplX3QgaWQgPSAtMTsKICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGtNYXhPdXRwdXRzOyBpKyspIHsKLSAgICAgICAgaWYgKG1TdXJmYWNlc1tpXSA9PSBudWxscHRyKSB7CisgICAgICAgIGlmIChtU3VyZmFjZVVuaXF1ZUlkc1tpXS5maXJzdCA9PSBudWxscHRyKSB7CiAgICAgICAgICAgICBpZCA9IGk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQpAQCAtMjU4LDcgKzMwNiw3IEBACiAgICAgTXV0ZXg6OkF1dG9sb2NrIGwobUxvY2spOwogICAgIHNzaXplX3QgaWQgPSAtMTsKICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGtNYXhPdXRwdXRzOyBpKyspIHsKLSAgICAgICAgaWYgKG1TdXJmYWNlc1tpXSA9PSBzdXJmYWNlKSB7CisgICAgICAgIGlmIChtU3VyZmFjZVVuaXF1ZUlkc1tpXS5maXJzdCA9PSBzdXJmYWNlKSB7CiAgICAgICAgICAgICBpZCA9IGk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQpAQCAtMjY3LDYgKzMxNSwyNiBAQAogICAgIHJldHVybiBpZDsKIH0KIAorc3RhdHVzX3QgQ2FtZXJhM1NoYXJlZE91dHB1dFN0cmVhbTo6Z2V0VW5pcXVlU3VyZmFjZUlkcygKKyAgICAgICAgY29uc3Qgc3RkOjp2ZWN0b3I8c2l6ZV90PiYgc3VyZmFjZUlkcywKKyAgICAgICAgLypvdXQqL3N0ZDo6dmVjdG9yPHNpemVfdD4qIG91dFVuaXF1ZUlkcykgeworICAgIE11dGV4OjpBdXRvbG9jayBsKG1Mb2NrKTsKKyAgICBpZiAob3V0VW5pcXVlSWRzID09IG51bGxwdHIgfHwgc3VyZmFjZUlkcy5zaXplKCkgPiBrTWF4T3V0cHV0cykgeworICAgICAgICByZXR1cm4gQkFEX1ZBTFVFOworICAgIH0KKworICAgIG91dFVuaXF1ZUlkcy0+Y2xlYXIoKTsKKyAgICBvdXRVbmlxdWVJZHMtPnJlc2VydmUoc3VyZmFjZUlkcy5zaXplKCkpOworCisgICAgZm9yIChjb25zdCBhdXRvJiBzdXJmYWNlSWQgOiBzdXJmYWNlSWRzKSB7CisgICAgICAgIGlmIChzdXJmYWNlSWQgPj0ga01heE91dHB1dHMpIHsKKyAgICAgICAgICAgIHJldHVybiBCQURfVkFMVUU7CisgICAgICAgIH0KKyAgICAgICAgb3V0VW5pcXVlSWRzLT5wdXNoX2JhY2sobVN1cmZhY2VVbmlxdWVJZHNbc3VyZmFjZUlkXS5zZWNvbmQpOworICAgIH0KKyAgICByZXR1cm4gT0s7Cit9CisKIHN0YXR1c190IENhbWVyYTNTaGFyZWRPdXRwdXRTdHJlYW06OnJldmVydFBhcnRpYWxVcGRhdGVMb2NrZWQoCiAgICAgICAgIGNvbnN0IEtleWVkVmVjdG9yPHNwPFN1cmZhY2U+LCBzaXplX3Q+ICZyZW1vdmVkU3VyZmFjZXMsCiAgICAgICAgIGNvbnN0IEtleWVkVmVjdG9yPHNwPFN1cmZhY2U+LCBzaXplX3Q+ICZhdHRhY2hlZFN1cmZhY2VzKSB7CkBAIC0yODAsNyArMzQ4LDcgQEAKICAgICAgICAgICAgICAgICByZXR1cm4gVU5LTk9XTl9FUlJPUjsKICAgICAgICAgICAgIH0KICAgICAgICAgfQotICAgICAgICBtU3VyZmFjZXNbaW5kZXhdID0gbnVsbHB0cjsKKyAgICAgICAgbVN1cmZhY2VVbmlxdWVJZHNbaW5kZXhdID0gc3RkOjptYWtlX3BhaXIobnVsbHB0ciwgbU5leHRVbmlxdWVTdXJmYWNlSWQrKyk7CiAgICAgfQogCiAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCByZW1vdmVkU3VyZmFjZXMuc2l6ZSgpOyBpKyspIHsKQEAgLTI5MSw3ICszNTksOCBAQAogICAgICAgICAgICAgICAgIHJldHVybiBVTktOT1dOX0VSUk9SOwogICAgICAgICAgICAgfQogICAgICAgICB9Ci0gICAgICAgIG1TdXJmYWNlc1tpbmRleF0gPSByZW1vdmVkU3VyZmFjZXMua2V5QXQoaSk7CisgICAgICAgIG1TdXJmYWNlVW5pcXVlSWRzW2luZGV4XSA9IHN0ZDo6bWFrZV9wYWlyKAorICAgICAgICAgICAgICAgIHJlbW92ZWRTdXJmYWNlcy5rZXlBdChpKSwgbU5leHRVbmlxdWVTdXJmYWNlSWQrKyk7CiAgICAgfQogCiAgICAgcmV0dXJuIHJldDsKQEAgLTM0Myw4ICs0MTIsOCBAQAogCiAgICAgICAgICAgICB9CiAgICAgICAgIH0KLSAgICAgICAgbVN1cmZhY2VzW2l0XSA9IG51bGxwdHI7Ci0gICAgICAgIHJlbW92ZWRTdXJmYWNlcy5hZGQobVN1cmZhY2VzW2l0XSwgaXQpOworICAgICAgICByZW1vdmVkU3VyZmFjZXMuYWRkKG1TdXJmYWNlVW5pcXVlSWRzW2l0XS5maXJzdCwgaXQpOworICAgICAgICBtU3VyZmFjZVVuaXF1ZUlkc1tpdF0gPSBzdGQ6Om1ha2VfcGFpcihudWxscHRyLCBtTmV4dFVuaXF1ZVN1cmZhY2VJZCsrKTsKICAgICB9CiAKICAgICAvL05leHQgYWRkIHRoZSBuZXcgb3V0cHV0cwpAQCAtMzY5LDcgKzQzOCw3IEBACiAgICAgICAgICAgICAgICAgcmV0dXJuIHJldDsKICAgICAgICAgICAgIH0KICAgICAgICAgfQotICAgICAgICBtU3VyZmFjZXNbc3VyZmFjZUlkXSA9IGl0OworICAgICAgICBtU3VyZmFjZVVuaXF1ZUlkc1tzdXJmYWNlSWRdID0gc3RkOjptYWtlX3BhaXIoaXQsIG1OZXh0VW5pcXVlU3VyZmFjZUlkKyspOwogICAgICAgICBvdXRwdXRNYXAtPmFkZChpdCwgc3VyZmFjZUlkKTsKICAgICB9CiAKZGlmZiAtLWdpdCBhL3NlcnZpY2VzL2NhbWVyYS9saWJjYW1lcmFzZXJ2aWNlL2RldmljZTMvQ2FtZXJhM1NoYXJlZE91dHB1dFN0cmVhbS5oIGIvc2VydmljZXMvY2FtZXJhL2xpYmNhbWVyYXNlcnZpY2UvZGV2aWNlMy9DYW1lcmEzU2hhcmVkT3V0cHV0U3RyZWFtLmgKaW5kZXggMDJiMWMwOS4uYjVlMzdjMiAxMDA2NDQKLS0tIGEvc2VydmljZXMvY2FtZXJhL2xpYmNhbWVyYXNlcnZpY2UvZGV2aWNlMy9DYW1lcmEzU2hhcmVkT3V0cHV0U3RyZWFtLmgKKysrIGIvc2VydmljZXMvY2FtZXJhL2xpYmNhbWVyYXNlcnZpY2UvZGV2aWNlMy9DYW1lcmEzU2hhcmVkT3V0cHV0U3RyZWFtLmgKQEAgLTE3LDYgKzE3LDcgQEAKICNpZm5kZWYgQU5EUk9JRF9TRVJWRVJTX0NBTUVSQTNfU0hBUkVEX09VVFBVVF9TVFJFQU1fSAogI2RlZmluZSBBTkRST0lEX1NFUlZFUlNfQ0FNRVJBM19TSEFSRURfT1VUUFVUX1NUUkVBTV9ICiAKKyNpbmNsdWRlIDxhcnJheT4KICNpbmNsdWRlICJDYW1lcmEzU3RyZWFtU3BsaXR0ZXIuaCIKICNpbmNsdWRlICJDYW1lcmEzT3V0cHV0U3RyZWFtLmgiCiAKQEAgLTM3LDcgKzM4LDggQEAKICAgICAgICAgICAgIHVpbnQ2NF90IGNvbnN1bWVyVXNhZ2UsIGFuZHJvaWRfZGF0YXNwYWNlIGRhdGFTcGFjZSwKICAgICAgICAgICAgIGNhbWVyYTNfc3RyZWFtX3JvdGF0aW9uX3Qgcm90YXRpb24sIG5zZWNzX3QgdGltZXN0YW1wT2Zmc2V0LAogICAgICAgICAgICAgY29uc3QgU3RyaW5nOCYgcGh5c2ljYWxDYW1lcmFJZCwKLSAgICAgICAgICAgIGludCBzZXRJZCA9IENBTUVSQTNfU1RSRUFNX1NFVF9JRF9JTlZBTElEKTsKKyAgICAgICAgICAgIGludCBzZXRJZCA9IENBTUVSQTNfU1RSRUFNX1NFVF9JRF9JTlZBTElELAorICAgICAgICAgICAgYm9vbCB1c2VIYWxCdWZNYW5hZ2VyID0gZmFsc2UpOwogCiAgICAgdmlydHVhbCB+Q2FtZXJhM1NoYXJlZE91dHB1dFN0cmVhbSgpOwogCkBAIC00OSw2ICs1MSwxNSBAQAogCiAgICAgdmlydHVhbCBzc2l6ZV90IGdldFN1cmZhY2VJZChjb25zdCBzcDxTdXJmYWNlPiAmc3VyZmFjZSk7CiAKKyAgICAvKioKKyAgICAgKiBRdWVyeSB0aGUgdW5pcXVlIHN1cmZhY2UgSURzIG9mIGN1cnJlbnQgc3VyZmFjZUlkcy4KKyAgICAgKiBXaGVuIHBhc3NpbmcgdW5pcXVlIHN1cmZhY2UgSURzIGluIHJldHVybkJ1ZmZlcigpLCBpZiB0aGUKKyAgICAgKiBzdXJmYWNlSWQgaGFzIGJlZW4gcmVtb3ZlZCBmcm9tIHRoZSBzdHJlYW0sIHRoZSBvdXRwdXQgY29ycmVzcG9uZGluZyB0bworICAgICAqIHRoZSB1bmlxdWUgc3VyZmFjZSBJRCB3aWxsIGJlIGlnbm9yZWQgYW5kIG5vdCBkZWxpdmVyZWQgdG8gY2xpZW50LgorICAgICAqLworICAgIHZpcnR1YWwgc3RhdHVzX3QgZ2V0VW5pcXVlU3VyZmFjZUlkcyhjb25zdCBzdGQ6OnZlY3RvcjxzaXplX3Q+JiBzdXJmYWNlSWRzLAorICAgICAgICAgICAgLypvdXQqL3N0ZDo6dmVjdG9yPHNpemVfdD4qIG91dFVuaXF1ZUlkcykgb3ZlcnJpZGU7CisKICAgICB2aXJ0dWFsIHN0YXR1c190IHVwZGF0ZVN0cmVhbShjb25zdCBzdGQ6OnZlY3RvcjxzcDxTdXJmYWNlPj4gJm91dHB1dFN1cmZhY2VzLAogICAgICAgICAgICAgY29uc3Qgc3RkOjp2ZWN0b3I8T3V0cHV0U3RyZWFtSW5mbz4gJm91dHB1dEluZm8sCiAgICAgICAgICAgICBjb25zdCBzdGQ6OnZlY3RvcjxzaXplX3Q+ICZyZW1vdmVkU3VyZmFjZUlkcywKQEAgLTU4LDggKzY5LDE3IEBACiAKICAgICBzdGF0aWMgY29uc3Qgc2l6ZV90IGtNYXhPdXRwdXRzID0gNDsKIAotICAgIC8vIE1hcCBzdXJmYWNlSWQgLT4gb3V0cHV0IHN1cmZhY2VzCi0gICAgc3A8U3VyZmFjZT4gbVN1cmZhY2VzW2tNYXhPdXRwdXRzXTsKKyAgICAvLyBXaGV0aGVyIEhBTCBpcyBpbiBjb250cm9sIGZvciBidWZmZXIgbWFuYWdlbWVudC4gU3VyZmFjZSBzaGFyaW5nIGJlaGF2aW9yCisgICAgLy8gZGVwZW5kcyBvbiB0aGlzIGZsYWcuCisgICAgY29uc3QgYm9vbCBtVXNlSGFsQnVmTWFuYWdlcjsKKworICAgIC8vIFBhaXIgb2YgYW4gb3V0cHV0IFN1cmZhY2UgYW5kIGl0cyB1bmlxdWUgSUQKKyAgICB0eXBlZGVmIHN0ZDo6cGFpcjxzcDxTdXJmYWNlPiwgc2l6ZV90PiBTdXJmYWNlVW5pcXVlSWQ7CisKKyAgICAvLyBNYXAgc3VyZmFjZUlkIC0+IChvdXRwdXQgc3VyZmFjZSwgdW5pcXVlIHN1cmZhY2UgSUQpCisgICAgc3RkOjphcnJheTxTdXJmYWNlVW5pcXVlSWQsIGtNYXhPdXRwdXRzPiBtU3VyZmFjZVVuaXF1ZUlkczsKKworICAgIHNpemVfdCBtTmV4dFVuaXF1ZVN1cmZhY2VJZCA9IDA7CiAKICAgICBzc2l6ZV90IGdldE5leHRTdXJmYWNlSWRMb2NrZWQoKTsKIApAQCAtNzgsMTMgKzk4LDI0IEBACiAgICAgc3RhdHVzX3QgY29ubmVjdFN0cmVhbVNwbGl0dGVyTG9ja2VkKCk7CiAKICAgICAvKioKKyAgICAgKiBBdHRhY2ggdGhlIG91dHB1dCBidWZmZXIgdG8gc3RyZWFtIHNwbGl0dGVyLgorICAgICAqIFdoZW4gY2FtZXJhIHNlcnZpY2UgaXMgZG9pbmcgYnVmZmVyIG1hbmFnZW1lbnQsIHRoaXMgbWV0aG9kIHdpbGwgYmUgY2FsbGVkCisgICAgICogYmVmb3JlIHRoZSBidWZmZXIgaXMgaGFuZGVkIG91dCB0byBIQUwgaW4gcmVxdWVzdCB0aHJlYWQuCisgICAgICogV2hlbiBIQUwgaXMgZG9pbmcgYnVmZmVyIG1hbmFnZW1lbnQsIHRoaXMgbWV0aG9kIHdpbGwgYmUgY2FsbGVkIHdoZW4KKyAgICAgKiB0aGUgYnVmZmVyIGlzIHJldHVybmVkIGZyb20gSEFMIGluIGh3YmluZGVyIGNhbGxiYWNrIHRocmVhZC4KKyAgICAgKi8KKyAgICBzdGF0dXNfdCBhdHRhY2hCdWZmZXJUb1NwbGl0dGVyTG9ja2VkKEFOYXRpdmVXaW5kb3dCdWZmZXIqIGFuYiwKKyAgICAgICAgICAgIGNvbnN0IHN0ZDo6dmVjdG9yPHNpemVfdD4mIHN1cmZhY2VfaWRzKTsKKworICAgIC8qKgogICAgICAqIEludGVybmFsIENhbWVyYTNTdHJlYW0gaW50ZXJmYWNlCiAgICAgICovCiAgICAgdmlydHVhbCBzdGF0dXNfdCBnZXRCdWZmZXJMb2NrZWQoY2FtZXJhM19zdHJlYW1fYnVmZmVyICpidWZmZXIsCiAgICAgICAgICAgICBjb25zdCBzdGQ6OnZlY3RvcjxzaXplX3Q+JiBzdXJmYWNlX2lkcyk7CiAKICAgICB2aXJ0dWFsIHN0YXR1c190IHF1ZXVlQnVmZmVyVG9Db25zdW1lcihzcDxBTmF0aXZlV2luZG93PiYgY29uc3VtZXIsCi0gICAgICAgICAgICBBTmF0aXZlV2luZG93QnVmZmVyKiBidWZmZXIsIGludCBhbndSZWxlYXNlRmVuY2UpOworICAgICAgICAgICAgQU5hdGl2ZVdpbmRvd0J1ZmZlciogYnVmZmVyLCBpbnQgYW53UmVsZWFzZUZlbmNlLAorICAgICAgICAgICAgY29uc3Qgc3RkOjp2ZWN0b3I8c2l6ZV90PiYgdW5pcXVlU3VyZmFjZUlkcyk7CiAKICAgICB2aXJ0dWFsIHN0YXR1c190IGNvbmZpZ3VyZVF1ZXVlTG9ja2VkKCk7CiAKZGlmZiAtLWdpdCBhL3NlcnZpY2VzL2NhbWVyYS9saWJjYW1lcmFzZXJ2aWNlL2RldmljZTMvQ2FtZXJhM1N0cmVhbS5jcHAgYi9zZXJ2aWNlcy9jYW1lcmEvbGliY2FtZXJhc2VydmljZS9kZXZpY2UzL0NhbWVyYTNTdHJlYW0uY3BwCmluZGV4IDdlYmMyOTkuLjI0ZDFjMWIgMTAwNjQ0Ci0tLSBhL3NlcnZpY2VzL2NhbWVyYS9saWJjYW1lcmFzZXJ2aWNlL2RldmljZTMvQ2FtZXJhM1N0cmVhbS5jcHAKKysrIGIvc2VydmljZXMvY2FtZXJhL2xpYmNhbWVyYXNlcnZpY2UvZGV2aWNlMy9DYW1lcmEzU3RyZWFtLmNwcApAQCAtNjcsNyArNjcsOCBAQAogICAgIG1CdWZmZXJMaW1pdExhdGVuY3koa0J1ZmZlckxpbWl0TGF0ZW5jeUJpblNpemUpLAogICAgIG1Gb3JtYXRPdmVycmlkZGVuKGZhbHNlKSwKICAgICBtT3JpZ2luYWxGb3JtYXQoLTEpLAotICAgIG1QaHlzaWNhbENhbWVyYUlkKHBoeXNpY2FsQ2FtZXJhSWQpIHsKKyAgICBtUGh5c2ljYWxDYW1lcmFJZChwaHlzaWNhbENhbWVyYUlkKSwKKyAgICBtTGFzdFRpbWVzdGFtcCgwKSB7CiAKICAgICBjYW1lcmEzX3N0cmVhbTo6c3RyZWFtX3R5cGUgPSB0eXBlOwogICAgIGNhbWVyYTNfc3RyZWFtOjp3aWR0aCA9IHdpZHRoOwpAQCAtNjU0LDcgKzY1NSw4IEBACiB9CiAKIHN0YXR1c190IENhbWVyYTNTdHJlYW06OnJldHVybkJ1ZmZlcihjb25zdCBjYW1lcmEzX3N0cmVhbV9idWZmZXIgJmJ1ZmZlciwKLSAgICAgICAgbnNlY3NfdCB0aW1lc3RhbXApIHsKKyAgICAgICAgbnNlY3NfdCB0aW1lc3RhbXAsIGJvb2wgdGltZXN0YW1wSW5jcmVhc2luZywKKyAgICAgICAgIGNvbnN0IHN0ZDo6dmVjdG9yPHNpemVfdD4mIHN1cmZhY2VfaWRzKSB7CiAgICAgQVRSQUNFX0NBTEwoKTsKICAgICBNdXRleDo6QXV0b2xvY2sgbChtTG9jayk7CiAKQEAgLTY2Niw2ICs2NjgsMTUgQEAKIAogICAgIHJlbW92ZU91dHN0YW5kaW5nQnVmZmVyKGJ1ZmZlcik7CiAKKyAgICAvLyBCdWZmZXIgc3RhdHVzIG1heSBiZSBjaGFuZ2VkLCBzbyBtYWtlIGEgY29weSBvZiB0aGUgc3RyZWFtX2J1ZmZlciBzdHJ1Y3QuCisgICAgY2FtZXJhM19zdHJlYW1fYnVmZmVyIGIgPSBidWZmZXI7CisgICAgaWYgKHRpbWVzdGFtcEluY3JlYXNpbmcgJiYgdGltZXN0YW1wICE9IDAgJiYgdGltZXN0YW1wIDw9IG1MYXN0VGltZXN0YW1wKSB7CisgICAgICAgIEFMT0dFKCIlczogU3RyZWFtICVkOiB0aW1lc3RhbXAgJSIgUFJJZDY0ICIgaXMgbm90IGluY3JlYXNpbmcuIFByZXYgdGltZXN0YW1wICUiIFBSSWQ2NCwKKyAgICAgICAgICAgICAgICBfX0ZVTkNUSU9OX18sIG1JZCwgdGltZXN0YW1wLCBtTGFzdFRpbWVzdGFtcCk7CisgICAgICAgIGIuc3RhdHVzID0gQ0FNRVJBM19CVUZGRVJfU1RBVFVTX0VSUk9SOworICAgIH0KKyAgICBtTGFzdFRpbWVzdGFtcCA9IHRpbWVzdGFtcDsKKwogICAgIC8qKgogICAgICAqIFRPRE86IENoZWNrIHRoYXQgdGhlIHN0YXRlIGlzIHZhbGlkIGZpcnN0LgogICAgICAqCkBAIC02NzQsOSArNjg1LDkgQEAKICAgICAgKgogICAgICAqIERvIHRoaXMgZm9yIGdldEJ1ZmZlciBhcyB3ZWxsLgogICAgICAqLwotICAgIHN0YXR1c190IHJlcyA9IHJldHVybkJ1ZmZlckxvY2tlZChidWZmZXIsIHRpbWVzdGFtcCk7CisgICAgc3RhdHVzX3QgcmVzID0gcmV0dXJuQnVmZmVyTG9ja2VkKGIsIHRpbWVzdGFtcCwgc3VyZmFjZV9pZHMpOwogICAgIGlmIChyZXMgPT0gT0spIHsKLSAgICAgICAgZmlyZUJ1ZmZlckxpc3RlbmVyc0xvY2tlZChidWZmZXIsIC8qYWNxdWlyZWQqL2ZhbHNlLCAvKm91dHB1dCovdHJ1ZSk7CisgICAgICAgIGZpcmVCdWZmZXJMaXN0ZW5lcnNMb2NrZWQoYiwgLyphY3F1aXJlZCovZmFsc2UsIC8qb3V0cHV0Ki90cnVlKTsKICAgICB9CiAKICAgICAvLyBFdmVuIGlmIHJldHVybmluZyB0aGUgYnVmZmVyIGZhaWxlZCwgd2Ugc3RpbGwgd2FudCB0byBzaWduYWwgd2hvZXZlciBpcyB3YWl0aW5nIGZvciB0aGUKQEAgLTc4NSw2ICs3OTYsMTIgQEAKICAgICByZXR1cm4gaGFzT3V0c3RhbmRpbmdCdWZmZXJzTG9ja2VkKCk7CiB9CiAKK3NpemVfdCBDYW1lcmEzU3RyZWFtOjpnZXRPdXRzdGFuZGluZ0J1ZmZlcnNDb3VudCgpIGNvbnN0IHsKKyAgICBBVFJBQ0VfQ0FMTCgpOworICAgIE11dGV4OjpBdXRvbG9jayBsKG1Mb2NrKTsKKyAgICByZXR1cm4gZ2V0SGFuZG91dE91dHB1dEJ1ZmZlckNvdW50TG9ja2VkKCk7Cit9CisKIHN0YXR1c190IENhbWVyYTNTdHJlYW06OnNldFN0YXR1c1RyYWNrZXIoc3A8U3RhdHVzVHJhY2tlcj4gc3RhdHVzVHJhY2tlcikgewogICAgIE11dGV4OjpBdXRvbG9jayBsKG1Mb2NrKTsKICAgICBzcDxTdGF0dXNUcmFja2VyPiBvbGRUcmFja2VyID0gbVN0YXR1c1RyYWNrZXIucHJvbW90ZSgpOwpAQCAtODI3LDcgKzg0NCw3IEBACiAgICAgcmV0dXJuIElOVkFMSURfT1BFUkFUSU9OOwogfQogc3RhdHVzX3QgQ2FtZXJhM1N0cmVhbTo6cmV0dXJuQnVmZmVyTG9ja2VkKGNvbnN0IGNhbWVyYTNfc3RyZWFtX2J1ZmZlciAmLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5zZWNzX3QpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuc2Vjc190LCBjb25zdCBzdGQ6OnZlY3RvcjxzaXplX3Q+JikgewogICAgIEFMT0dFKCIlczogVGhpcyB0eXBlIG9mIHN0cmVhbSBkb2VzIG5vdCBzdXBwb3J0IG91dHB1dCIsIF9fRlVOQ1RJT05fXyk7CiAgICAgcmV0dXJuIElOVkFMSURfT1BFUkFUSU9OOwogfQpkaWZmIC0tZ2l0IGEvc2VydmljZXMvY2FtZXJhL2xpYmNhbWVyYXNlcnZpY2UvZGV2aWNlMy9DYW1lcmEzU3RyZWFtLmggYi9zZXJ2aWNlcy9jYW1lcmEvbGliY2FtZXJhc2VydmljZS9kZXZpY2UzL0NhbWVyYTNTdHJlYW0uaAppbmRleCAwMzU1OTc4Li5kZGJhOWY2IDEwMDY0NAotLS0gYS9zZXJ2aWNlcy9jYW1lcmEvbGliY2FtZXJhc2VydmljZS9kZXZpY2UzL0NhbWVyYTNTdHJlYW0uaAorKysgYi9zZXJ2aWNlcy9jYW1lcmEvbGliY2FtZXJhc2VydmljZS9kZXZpY2UzL0NhbWVyYTNTdHJlYW0uaApAQCAtMzIyLDExICszMjIsMTcgQEAKICAgICAvKioKICAgICAgKiBSZXR1cm4gYSBidWZmZXIgdG8gdGhlIHN0cmVhbSBhZnRlciB1c2UgYnkgdGhlIEhBTC4KICAgICAgKgorICAgICAqIE11bHRpcGxlIHN1cmZhY2VzIGNvdWxkIHNoYXJlIHRoZSBzYW1lIEhBTCBzdHJlYW0sIGJ1dCBhIHJlcXVlc3QgbWF5CisgICAgICogYmUgb25seSBmb3IgYSBzdWJzZXQgb2Ygc3VyZmFjZXMuIEluIHRoaXMgY2FzZSwgdGhlCisgICAgICogQ2FtZXJhM1N0cmVhbUludGVyZmFjZSBvYmplY3QgbmVlZHMgdGhlIHN1cmZhY2UgSUQgaW5mb3JtYXRpb24gdG8gYXR0YWNoCisgICAgICogYnVmZmVycyBmb3IgdGhvc2Ugc3VyZmFjZXMuCisgICAgICoKICAgICAgKiBUaGlzIG1ldGhvZCBtYXkgb25seSBiZSBjYWxsZWQgZm9yIGJ1ZmZlcnMgcHJvdmlkZWQgYnkgZ2V0QnVmZmVyKCkuCiAgICAgICogRm9yIGJpZGlyZWN0aW9uYWwgc3RyZWFtcywgdGhpcyBtZXRob2QgYXBwbGllcyB0byB0aGUgb3V0cHV0LXNpZGUgYnVmZmVycwogICAgICAqLwogICAgIHN0YXR1c190ICAgICAgICAgcmV0dXJuQnVmZmVyKGNvbnN0IGNhbWVyYTNfc3RyZWFtX2J1ZmZlciAmYnVmZmVyLAotICAgICAgICAgICAgbnNlY3NfdCB0aW1lc3RhbXApOworICAgICAgICAgICAgbnNlY3NfdCB0aW1lc3RhbXAsIGJvb2wgdGltZXN0YW1wSW5jcmVhc2luZywKKyAgICAgICAgICAgIGNvbnN0IHN0ZDo6dmVjdG9yPHNpemVfdD4mIHN1cmZhY2VfaWRzID0gc3RkOjp2ZWN0b3I8c2l6ZV90PigpKTsKIAogICAgIC8qKgogICAgICAqIEZpbGwgaW4gdGhlIGNhbWVyYTNfc3RyZWFtX2J1ZmZlciB3aXRoIHRoZSBuZXh0IHZhbGlkIGJ1ZmZlciBmb3IgdGhpcwpAQCAtMzYwLDYgKzM2NiwxMSBAQAogICAgICAqLwogICAgIGJvb2wgICAgICAgICAgICAgaGFzT3V0c3RhbmRpbmdCdWZmZXJzKCkgY29uc3Q7CiAKKyAgICAvKioKKyAgICAgKiBHZXQgbnVtYmVyIG9mIGJ1ZmZlcnMgY3VycmVudGx5IGhhbmRlZCBvdXQgdG8gSEFMCisgICAgICovCisgICAgc2l6ZV90ICAgICAgICAgICBnZXRPdXRzdGFuZGluZ0J1ZmZlcnNDb3VudCgpIGNvbnN0OworCiAgICAgZW51bSB7CiAgICAgICAgIFRJTUVPVVRfTkVWRVIgPSAtMQogICAgIH07CkBAIC00NzMsNyArNDg0LDggQEAKICAgICB2aXJ0dWFsIHN0YXR1c190IGdldEJ1ZmZlckxvY2tlZChjYW1lcmEzX3N0cmVhbV9idWZmZXIgKmJ1ZmZlciwKICAgICAgICAgICAgIGNvbnN0IHN0ZDo6dmVjdG9yPHNpemVfdD4mIHN1cmZhY2VfaWRzID0gc3RkOjp2ZWN0b3I8c2l6ZV90PigpKTsKICAgICB2aXJ0dWFsIHN0YXR1c190IHJldHVybkJ1ZmZlckxvY2tlZChjb25zdCBjYW1lcmEzX3N0cmVhbV9idWZmZXIgJmJ1ZmZlciwKLSAgICAgICAgICAgIG5zZWNzX3QgdGltZXN0YW1wKTsKKyAgICAgICAgICAgIG5zZWNzX3QgdGltZXN0YW1wLAorICAgICAgICAgICAgY29uc3Qgc3RkOjp2ZWN0b3I8c2l6ZV90PiYgc3VyZmFjZV9pZHMgPSBzdGQ6OnZlY3RvcjxzaXplX3Q+KCkpOwogICAgIHZpcnR1YWwgc3RhdHVzX3QgZ2V0SW5wdXRCdWZmZXJMb2NrZWQoY2FtZXJhM19zdHJlYW1fYnVmZmVyICpidWZmZXIpOwogICAgIHZpcnR1YWwgc3RhdHVzX3QgcmV0dXJuSW5wdXRCdWZmZXJMb2NrZWQoCiAgICAgICAgICAgICBjb25zdCBjYW1lcmEzX3N0cmVhbV9idWZmZXIgJmJ1ZmZlcik7CkBAIC00OTUsNyArNTA3LDcgQEAKICAgICB2aXJ0dWFsIHNpemVfdCAgIGdldEJ1ZmZlckNvdW50TG9ja2VkKCkgPSAwOwogCiAgICAgLy8gR2V0IGhhbmRvdXQgb3V0cHV0IGJ1ZmZlciBjb3VudC4KLSAgICB2aXJ0dWFsIHNpemVfdCAgIGdldEhhbmRvdXRPdXRwdXRCdWZmZXJDb3VudExvY2tlZCgpID0gMDsKKyAgICB2aXJ0dWFsIHNpemVfdCAgIGdldEhhbmRvdXRPdXRwdXRCdWZmZXJDb3VudExvY2tlZCgpIGNvbnN0ID0gMDsKIAogICAgIC8vIEdldCBoYW5kb3V0IGlucHV0IGJ1ZmZlciBjb3VudC4KICAgICB2aXJ0dWFsIHNpemVfdCAgIGdldEhhbmRvdXRJbnB1dEJ1ZmZlckNvdW50TG9ja2VkKCkgPSAwOwpAQCAtNTY2LDYgKzU3OCw3IEBACiAgICAgYW5kcm9pZF9kYXRhc3BhY2UgbU9yaWdpbmFsRGF0YVNwYWNlOwogCiAgICAgU3RyaW5nOCBtUGh5c2ljYWxDYW1lcmFJZDsKKyAgICBuc2Vjc190IG1MYXN0VGltZXN0YW1wOwogfTsgLy8gY2xhc3MgQ2FtZXJhM1N0cmVhbQogCiB9OyAvLyBuYW1lc3BhY2UgY2FtZXJhMwpkaWZmIC0tZ2l0IGEvc2VydmljZXMvY2FtZXJhL2xpYmNhbWVyYXNlcnZpY2UvZGV2aWNlMy9DYW1lcmEzU3RyZWFtSW50ZXJmYWNlLmggYi9zZXJ2aWNlcy9jYW1lcmEvbGliY2FtZXJhc2VydmljZS9kZXZpY2UzL0NhbWVyYTNTdHJlYW1JbnRlcmZhY2UuaAppbmRleCAzZDQ1Yzg5Li5hODQ3MjBiIDEwMDY0NAotLS0gYS9zZXJ2aWNlcy9jYW1lcmEvbGliY2FtZXJhc2VydmljZS9kZXZpY2UzL0NhbWVyYTNTdHJlYW1JbnRlcmZhY2UuaAorKysgYi9zZXJ2aWNlcy9jYW1lcmEvbGliY2FtZXJhc2VydmljZS9kZXZpY2UzL0NhbWVyYTNTdHJlYW1JbnRlcmZhY2UuaApAQCAtMjQ4LDExICsyNDgsMTggQEAKICAgICAvKioKICAgICAgKiBSZXR1cm4gYSBidWZmZXIgdG8gdGhlIHN0cmVhbSBhZnRlciB1c2UgYnkgdGhlIEhBTC4KICAgICAgKgorICAgICAqIE11bHRpcGxlIHN1cmZhY2VzIGNvdWxkIHNoYXJlIHRoZSBzYW1lIEhBTCBzdHJlYW0sIGJ1dCBhIHJlcXVlc3QgbWF5CisgICAgICogYmUgb25seSBmb3IgYSBzdWJzZXQgb2Ygc3VyZmFjZXMuIEluIHRoaXMgY2FzZSwgdGhlCisgICAgICogQ2FtZXJhM1N0cmVhbUludGVyZmFjZSBvYmplY3QgbmVlZHMgdGhlIHN1cmZhY2UgSUQgaW5mb3JtYXRpb24gdG8gYXR0YWNoCisgICAgICogYnVmZmVycyBmb3IgdGhvc2Ugc3VyZmFjZXMuIEZvciB0aGUgY2FzZSBvZiBzaW5nbGUgc3VyZmFjZSBmb3IgYSBIQUwKKyAgICAgKiBzdHJlYW0sIHN1cmZhY2VfaWRzIHBhcmFtZXRlciBoYXMgbm8gZWZmZWN0LgorICAgICAqCiAgICAgICogVGhpcyBtZXRob2QgbWF5IG9ubHkgYmUgY2FsbGVkIGZvciBidWZmZXJzIHByb3ZpZGVkIGJ5IGdldEJ1ZmZlcigpLgogICAgICAqIEZvciBiaWRpcmVjdGlvbmFsIHN0cmVhbXMsIHRoaXMgbWV0aG9kIGFwcGxpZXMgdG8gdGhlIG91dHB1dC1zaWRlIGJ1ZmZlcnMKICAgICAgKi8KICAgICB2aXJ0dWFsIHN0YXR1c190IHJldHVybkJ1ZmZlcihjb25zdCBjYW1lcmEzX3N0cmVhbV9idWZmZXIgJmJ1ZmZlciwKLSAgICAgICAgICAgIG5zZWNzX3QgdGltZXN0YW1wKSA9IDA7CisgICAgICAgICAgICBuc2Vjc190IHRpbWVzdGFtcCwgYm9vbCB0aW1lc3RhbXBJbmNyZWFzaW5nID0gdHJ1ZSwKKyAgICAgICAgICAgIGNvbnN0IHN0ZDo6dmVjdG9yPHNpemVfdD4mIHN1cmZhY2VfaWRzID0gc3RkOjp2ZWN0b3I8c2l6ZV90PigpKSA9IDA7CiAKICAgICAvKioKICAgICAgKiBGaWxsIGluIHRoZSBjYW1lcmEzX3N0cmVhbV9idWZmZXIgd2l0aCB0aGUgbmV4dCB2YWxpZCBidWZmZXIgZm9yIHRoaXMKQEAgLTI4OSw2ICsyOTYsMTEgQEAKICAgICAgKi8KICAgICB2aXJ0dWFsIGJvb2wgICAgIGhhc091dHN0YW5kaW5nQnVmZmVycygpIGNvbnN0ID0gMDsKIAorICAgIC8qKgorICAgICAqIEdldCBudW1iZXIgb2YgYnVmZmVycyBjdXJyZW50bHkgaGFuZGVkIG91dCB0byBIQUwKKyAgICAgKi8KKyAgICB2aXJ0dWFsIHNpemVfdCAgIGdldE91dHN0YW5kaW5nQnVmZmVyc0NvdW50KCkgY29uc3QgPSAwOworCiAgICAgZW51bSB7CiAgICAgICAgIFRJTUVPVVRfTkVWRVIgPSAtMQogICAgIH07CmRpZmYgLS1naXQgYS9zZXJ2aWNlcy9jYW1lcmEvbGliY2FtZXJhc2VydmljZS9kZXZpY2UzL0NhbWVyYTNTdHJlYW1TcGxpdHRlci5jcHAgYi9zZXJ2aWNlcy9jYW1lcmEvbGliY2FtZXJhc2VydmljZS9kZXZpY2UzL0NhbWVyYTNTdHJlYW1TcGxpdHRlci5jcHAKaW5kZXggZWNiOTgwYS4uODRjMmVjNyAxMDA2NDQKLS0tIGEvc2VydmljZXMvY2FtZXJhL2xpYmNhbWVyYXNlcnZpY2UvZGV2aWNlMy9DYW1lcmEzU3RyZWFtU3BsaXR0ZXIuY3BwCisrKyBiL3NlcnZpY2VzL2NhbWVyYS9saWJjYW1lcmFzZXJ2aWNlL2RldmljZTMvQ2FtZXJhM1N0cmVhbVNwbGl0dGVyLmNwcApAQCAtMTUyLDYgKzE1Miw4IEBACiAgICAgU1BfTE9HVigiJXM6IERpc2Nvbm5lY3RlZCIsIF9fRlVOQ1RJT05fXyk7CiB9CiAKK0NhbWVyYTNTdHJlYW1TcGxpdHRlcjo6Q2FtZXJhM1N0cmVhbVNwbGl0dGVyKGJvb2wgdXNlSGFsQnVmTWFuYWdlcikgOgorICAgICAgICBtVXNlSGFsQnVmTWFuYWdlcih1c2VIYWxCdWZNYW5hZ2VyKSB7fQogCiBDYW1lcmEzU3RyZWFtU3BsaXR0ZXI6On5DYW1lcmEzU3RyZWFtU3BsaXR0ZXIoKSB7CiAgICAgZGlzY29ubmVjdCgpOwpAQCAtMjQxLDcgKzI0Myw5IEBACiAgICAgdWludDY0X3QgdXNhZ2UgPSAwOwogICAgIHJlcyA9IG5hdGl2ZV93aW5kb3dfZ2V0X2NvbnN1bWVyX3VzYWdlKHN0YXRpY19jYXN0PEFOYXRpdmVXaW5kb3cqPihvdXRwdXRRdWV1ZS5nZXQoKSksICZ1c2FnZSk7CiAgICAgaWYgKCEodXNhZ2UgJiAoR1JBTExPQ19VU0FHRV9IV19DT01QT1NFUiB8IEdSQUxMT0NfVVNBR0VfSFdfVEVYVFVSRSkpKSB7Ci0gICAgICAgIG91dHB1dFF1ZXVlLT5zZXREZXF1ZXVlVGltZW91dChrRGVxdWV1ZUJ1ZmZlclRpbWVvdXQpOworICAgICAgICBuc2Vjc190IHRpbWVvdXQgPSBtVXNlSGFsQnVmTWFuYWdlciA/CisgICAgICAgICAgICAgICAga0hhbEJ1Zk1nckRlcXVldWVCdWZmZXJUaW1lb3V0IDoga05vcm1hbERlcXVldWVCdWZmZXJUaW1lb3V0OworICAgICAgICBvdXRwdXRRdWV1ZS0+c2V0RGVxdWV1ZVRpbWVvdXQodGltZW91dCk7CiAgICAgfQogCiAgICAgcmVzID0gZ2JwLT5hbGxvd0FsbG9jYXRpb24oZmFsc2UpOwpAQCAtNDM2LDggKzQ0MCw5IEBACiAgICAgICAgIHJlcyA9IGdicC0+YXR0YWNoQnVmZmVyKCZzbG90LCBnYik7CiAgICAgICAgIG1NdXRleC5sb2NrKCk7CiAgICAgICAgIGlmIChyZXMgIT0gT0spIHsKLSAgICAgICAgICAgIFNQX0xPR0UoIiVzOiBDYW5ub3QgYWNxdWlyZUJ1ZmZlciBmcm9tIEdyYXBoaWNCdWZmZXJQcm9kdWNlciAlcDogJXMgKCVkKSIsCisgICAgICAgICAgICBTUF9MT0dFKCIlczogQ2Fubm90IGF0dGFjaEJ1ZmZlciBmcm9tIEdyYXBoaWNCdWZmZXJQcm9kdWNlciAlcDogJXMgKCVkKSIsCiAgICAgICAgICAgICAgICAgICAgIF9fRlVOQ1RJT05fXywgZ2JwLmdldCgpLCBzdHJlcnJvcigtcmVzKSwgcmVzKTsKKyAgICAgICAgICAgIC8vIFRPRE86IG1pZ2h0IG5lZWQgdG8gZGV0YWNoL2NsZWFudXAgdGhlIGFscmVhZHkgYXR0YWNoZWQgYnVmZmVycyBiZWZvcmUgcmV0dXJuPwogICAgICAgICAgICAgcmV0dXJuIHJlczsKICAgICAgICAgfQogICAgICAgICBpZiAoKHNsb3QgPCAwKSB8fCAoc2xvdCA+IEJ1ZmZlclF1ZXVlOjpOVU1fQlVGRkVSX1NMT1RTKSkgewpkaWZmIC0tZ2l0IGEvc2VydmljZXMvY2FtZXJhL2xpYmNhbWVyYXNlcnZpY2UvZGV2aWNlMy9DYW1lcmEzU3RyZWFtU3BsaXR0ZXIuaCBiL3NlcnZpY2VzL2NhbWVyYS9saWJjYW1lcmFzZXJ2aWNlL2RldmljZTMvQ2FtZXJhM1N0cmVhbVNwbGl0dGVyLmgKaW5kZXggMWVhZjJiZC4uOTYwZjdhYSAxMDA2NDQKLS0tIGEvc2VydmljZXMvY2FtZXJhL2xpYmNhbWVyYXNlcnZpY2UvZGV2aWNlMy9DYW1lcmEzU3RyZWFtU3BsaXR0ZXIuaAorKysgYi9zZXJ2aWNlcy9jYW1lcmEvbGliY2FtZXJhc2VydmljZS9kZXZpY2UzL0NhbWVyYTNTdHJlYW1TcGxpdHRlci5oCkBAIC00OSw3ICs0OSw3IEBACiBwdWJsaWM6CiAKICAgICAvLyBDb25zdHJ1Y3RvcgotICAgIENhbWVyYTNTdHJlYW1TcGxpdHRlcigpID0gZGVmYXVsdDsKKyAgICBDYW1lcmEzU3RyZWFtU3BsaXR0ZXIoYm9vbCB1c2VIYWxCdWZNYW5hZ2VyID0gZmFsc2UpOwogCiAgICAgLy8gQ29ubmVjdCB0byB0aGUgc3RyZWFtIHNwbGl0dGVyIGJ5IGNyZWF0aW5nIGJ1ZmZlciBxdWV1ZSBhbmQgY29ubmVjdGluZyBpdAogICAgIC8vIHdpdGggb3V0cHV0IHN1cmZhY2VzLgpAQCAtMjI2LDcgKzIyNiwxMCBAQAogICAgIGFuZHJvaWQ6OlBpeGVsRm9ybWF0IG1Gb3JtYXQgPSBhbmRyb2lkOjpQSVhFTF9GT1JNQVRfTk9ORTsKICAgICB1aW50NjRfdCBtUHJvZHVjZXJVc2FnZSA9IDA7CiAKLSAgICBzdGF0aWMgY29uc3QgbnNlY3NfdCBrRGVxdWV1ZUJ1ZmZlclRpbWVvdXQgICA9IHMybnMoMSk7IC8vIDEgc2VjCisgICAgLy8gVGhlIGF0dGFjaEJ1ZmZlciBjYWxsIHdpbGwgaGFwcGVuIG9uIGRpZmZlcmVudCB0aHJlYWQgYWNjb3JkaW5nIHRvIG1Vc2VIYWxCdWZNYW5hZ2VyIGFuZCBoYXZlCisgICAgLy8gZGlmZmVyZW50IHRpbWluZyBjb25zdHJhaW50LgorICAgIHN0YXRpYyBjb25zdCBuc2Vjc190IGtOb3JtYWxEZXF1ZXVlQnVmZmVyVGltZW91dCAgICA9IHMybnMoMSk7ICAvLyAxIHNlYworICAgIHN0YXRpYyBjb25zdCBuc2Vjc190IGtIYWxCdWZNZ3JEZXF1ZXVlQnVmZmVyVGltZW91dCA9IG1zMm5zKDEpOyAvLyAxIG1zZWMKIAogICAgIE11dGV4IG1NdXRleDsKIApAQCAtMjczLDYgKzI3Niw4IEBACiAgICAgc2l6ZV90IG1BY3F1aXJlZElucHV0QnVmZmVyczsKIAogICAgIFN0cmluZzggbUNvbnN1bWVyTmFtZTsKKworICAgIGNvbnN0IGJvb2wgbVVzZUhhbEJ1Zk1hbmFnZXI7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBhbmRyb2lkCmRpZmYgLS1naXQgYS9zZXJ2aWNlcy9jYW1lcmEvbGliY2FtZXJhc2VydmljZS9kZXZpY2UzL0Rpc3RvcnRpb25NYXBwZXIuY3BwIGIvc2VydmljZXMvY2FtZXJhL2xpYmNhbWVyYXNlcnZpY2UvZGV2aWNlMy9EaXN0b3J0aW9uTWFwcGVyLmNwcAppbmRleCA0ZGFmZWZkLi5hZTdhZjhlIDEwMDY0NAotLS0gYS9zZXJ2aWNlcy9jYW1lcmEvbGliY2FtZXJhc2VydmljZS9kZXZpY2UzL0Rpc3RvcnRpb25NYXBwZXIuY3BwCisrKyBiL3NlcnZpY2VzL2NhbWVyYS9saWJjYW1lcmFzZXJ2aWNlL2RldmljZTMvRGlzdG9ydGlvbk1hcHBlci5jcHAKQEAgLTMxMiw4ICszMTIsOCBAQAogICAgICAgICBpbnQzMl90IGNvb3Jkc1s0XSA9IHsKICAgICAgICAgICAgIHJlY3RzW2ldLAogICAgICAgICAgICAgcmVjdHNbaSArIDFdLAotICAgICAgICAgICAgcmVjdHNbaV0gKyByZWN0c1tpICsgMl0sCi0gICAgICAgICAgICByZWN0c1tpICsgMV0gKyByZWN0c1tpICsgM10KKyAgICAgICAgICAgIHJlY3RzW2ldICsgcmVjdHNbaSArIDJdIC0gMSwKKyAgICAgICAgICAgIHJlY3RzW2kgKyAxXSArIHJlY3RzW2kgKyAzXSAtIDEKICAgICAgICAgfTsKIAogICAgICAgICBtYXBSYXdUb0NvcnJlY3RlZChjb29yZHMsIDIsIGNsYW1wLCBzaW1wbGUpOwpAQCAtMzIxLDggKzMyMSw4IEBACiAgICAgICAgIC8vIE1hcCBiYWNrIHRvIChsLCB0LCB3aWR0aCwgaGVpZ2h0KQogICAgICAgICByZWN0c1tpXSA9IGNvb3Jkc1swXTsKICAgICAgICAgcmVjdHNbaSArIDFdID0gY29vcmRzWzFdOwotICAgICAgICByZWN0c1tpICsgMl0gPSBjb29yZHNbMl0gLSBjb29yZHNbMF07Ci0gICAgICAgIHJlY3RzW2kgKyAzXSA9IGNvb3Jkc1szXSAtIGNvb3Jkc1sxXTsKKyAgICAgICAgcmVjdHNbaSArIDJdID0gY29vcmRzWzJdIC0gY29vcmRzWzBdICsgMTsKKyAgICAgICAgcmVjdHNbaSArIDNdID0gY29vcmRzWzNdIC0gY29vcmRzWzFdICsgMTsKICAgICB9CiAKICAgICByZXR1cm4gT0s7CkBAIC00MDAsOCArNDAwLDggQEAKICAgICAgICAgaW50MzJfdCBjb29yZHNbNF0gPSB7CiAgICAgICAgICAgICByZWN0c1tpXSwKICAgICAgICAgICAgIHJlY3RzW2kgKyAxXSwKLSAgICAgICAgICAgIHJlY3RzW2ldICsgcmVjdHNbaSArIDJdLAotICAgICAgICAgICAgcmVjdHNbaSArIDFdICsgcmVjdHNbaSArIDNdCisgICAgICAgICAgICByZWN0c1tpXSArIHJlY3RzW2kgKyAyXSAtIDEsCisgICAgICAgICAgICByZWN0c1tpICsgMV0gKyByZWN0c1tpICsgM10gLSAxCiAgICAgICAgIH07CiAKICAgICAgICAgbWFwQ29ycmVjdGVkVG9SYXcoY29vcmRzLCAyLCBjbGFtcCwgc2ltcGxlKTsKQEAgLTQwOSw4ICs0MDksOCBAQAogICAgICAgICAvLyBNYXAgYmFjayB0byAobCwgdCwgd2lkdGgsIGhlaWdodCkKICAgICAgICAgcmVjdHNbaV0gPSBjb29yZHNbMF07CiAgICAgICAgIHJlY3RzW2kgKyAxXSA9IGNvb3Jkc1sxXTsKLSAgICAgICAgcmVjdHNbaSArIDJdID0gY29vcmRzWzJdIC0gY29vcmRzWzBdOwotICAgICAgICByZWN0c1tpICsgM10gPSBjb29yZHNbM10gLSBjb29yZHNbMV07CisgICAgICAgIHJlY3RzW2kgKyAyXSA9IGNvb3Jkc1syXSAtIGNvb3Jkc1swXSArIDE7CisgICAgICAgIHJlY3RzW2kgKyAzXSA9IGNvb3Jkc1szXSAtIGNvb3Jkc1sxXSArIDE7CiAgICAgfQogCiAgICAgcmV0dXJuIE9LOwpkaWZmIC0tZ2l0IGEvc2VydmljZXMvY2FtZXJhL2xpYmNhbWVyYXNlcnZpY2UvaGlkbC9BaWRsQ2FtZXJhRGV2aWNlQ2FsbGJhY2tzLmNwcCBiL3NlcnZpY2VzL2NhbWVyYS9saWJjYW1lcmFzZXJ2aWNlL2hpZGwvQWlkbENhbWVyYURldmljZUNhbGxiYWNrcy5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTVlNTAyNAotLS0gL2Rldi9udWxsCisrKyBiL3NlcnZpY2VzL2NhbWVyYS9saWJjYW1lcmFzZXJ2aWNlL2hpZGwvQWlkbENhbWVyYURldmljZUNhbGxiYWNrcy5jcHAKQEAgLTAsMCArMSwyMDUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTggVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworI2luY2x1ZGUgPGhhcmR3YXJlL2NhbWVyYS5oPgorCisjaW5jbHVkZSA8aGlkbC9BaWRsQ2FtZXJhRGV2aWNlQ2FsbGJhY2tzLmg+CisjaW5jbHVkZSA8aGlkbC9Db252ZXJ0Lmg+CisKK25hbWVzcGFjZSBhbmRyb2lkIHsKK25hbWVzcGFjZSBmcmFtZXdvcmtzIHsKK25hbWVzcGFjZSBjYW1lcmFzZXJ2aWNlIHsKK25hbWVzcGFjZSBkZXZpY2UgeworbmFtZXNwYWNlIFYyXzAgeworbmFtZXNwYWNlIGltcGxlbWVudGF0aW9uIHsKKwordXNpbmcgaGFyZHdhcmU6OmhpZGxfdmVjOwordXNpbmcgSENhcHR1cmVSZXN1bHRFeHRyYXMgPSBhbmRyb2lkOjpmcmFtZXdvcmtzOjpjYW1lcmFzZXJ2aWNlOjpkZXZpY2U6OlYyXzA6OkNhcHR1cmVSZXN1bHRFeHRyYXM7Cit1c2luZyBIUGh5c2ljYWxDYXB0dXJlUmVzdWx0SW5mbyA9IGFuZHJvaWQ6OmZyYW1ld29ya3M6OmNhbWVyYXNlcnZpY2U6OmRldmljZTo6VjJfMDo6UGh5c2ljYWxDYXB0dXJlUmVzdWx0SW5mbzsKK3VzaW5nIEhDYW1lcmFNZXRhZGF0YSA9IGFuZHJvaWQ6OmZyYW1ld29ya3M6OmNhbWVyYXNlcnZpY2U6OmRldmljZTo6VjJfMDo6Q2FtZXJhTWV0YWRhdGE7CisKK2NvbnN0IGNoYXIgKkgyQkNhbWVyYURldmljZUNhbGxiYWNrczo6a1Jlc3VsdEtleSA9ICJDYXB0dXJlUmVzdWx0IjsKKworSDJCQ2FtZXJhRGV2aWNlQ2FsbGJhY2tzOjpIMkJDYW1lcmFEZXZpY2VDYWxsYmFja3MoY29uc3Qgc3A8SGFsSW50ZXJmYWNlPiYgYmFzZSkgOiBDQmFzZShiYXNlKSB7IH0KKworYm9vbCBIMkJDYW1lcmFEZXZpY2VDYWxsYmFja3M6OmluaXRpYWxpemVMb29wZXIoKSB7CisgICAgbUNiTG9vcGVyID0gbmV3IEFMb29wZXI7CisgICAgbUNiTG9vcGVyLT5zZXROYW1lKCJjcy1sb29wZXIiKTsKKyAgICBzdGF0dXNfdCBlcnIgPSBtQ2JMb29wZXItPnN0YXJ0KC8qcnVuT25DYWxsaW5nVGhyZWFkKi8gZmFsc2UsIC8qY2FuQ2FsbEphdmEqLyBmYWxzZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBSSU9SSVRZX0RFRkFVTFQpOworICAgIGlmIChlcnIgIT1PSykgeworICAgICAgICBBTE9HRSgiVW5hYmxlIHRvIHN0YXJ0IGNhbWVyYSBkZXZpY2UgY2FsbGJhY2sgbG9vcGVyIik7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgICAgbUhhbmRsZXIgPSBuZXcgQ2FsbGJhY2tIYW5kbGVyKHRoaXMpOworICAgIG1DYkxvb3Blci0+cmVnaXN0ZXJIYW5kbGVyKG1IYW5kbGVyKTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworSDJCQ2FtZXJhRGV2aWNlQ2FsbGJhY2tzOjp+SDJCQ2FtZXJhRGV2aWNlQ2FsbGJhY2tzKCkgeworICAgIGlmIChtQ2JMb29wZXIgIT0gbnVsbHB0cikgeworICAgICAgICBpZiAobUhhbmRsZXIgIT0gbnVsbHB0cikgeworICAgICAgICAgICAgbUNiTG9vcGVyLT51bnJlZ2lzdGVySGFuZGxlcihtSGFuZGxlci0+aWQoKSk7CisgICAgICAgIH0KKyAgICAgICAgbUNiTG9vcGVyLT5zdG9wKCk7CisgICAgfQorICAgIG1DYkxvb3Blci5jbGVhcigpOworICAgIG1IYW5kbGVyLmNsZWFyKCk7Cit9CisKK2JpbmRlcjo6U3RhdHVzIEgyQkNhbWVyYURldmljZUNhbGxiYWNrczo6b25EZXZpY2VFcnJvcigKKyAgICBpbnQzMl90IGVycm9yQ29kZSwgY29uc3QgQ2FwdHVyZVJlc3VsdEV4dHJhcyYgcmVzdWx0RXh0cmFzKSB7CisgICAgdXNpbmcgaGFyZHdhcmU6OmNhbWVyYXNlcnZpY2U6OnV0aWxzOjpjb252ZXJzaW9uOjpjb252ZXJ0VG9IaWRsOworICAgIEhDYXB0dXJlUmVzdWx0RXh0cmFzIGhDYXB0dXJlUmVzdWx0RXh0cmFzID0gY29udmVydFRvSGlkbChyZXN1bHRFeHRyYXMpOworICAgIGF1dG8gcmV0ID0gbUJhc2UtPm9uRGV2aWNlRXJyb3IoY29udmVydFRvSGlkbChlcnJvckNvZGUpLCBoQ2FwdHVyZVJlc3VsdEV4dHJhcyk7CisgICAgaWYgKCFyZXQuaXNPaygpKSB7CisgICAgICAgIEFMT0dFKCIlcyBPbkRldmljZUVycm9yIGNhbGxiYWNrIGZhaWxlZCBkdWUgdG8gJXMiLF9fRlVOQ1RJT05fXywKKyAgICAgICAgICAgICAgcmV0LmRlc2NyaXB0aW9uKCkuY19zdHIoKSk7CisgICAgfQorICAgIHJldHVybiBiaW5kZXI6OlN0YXR1czo6b2soKTsKK30KKworYmluZGVyOjpTdGF0dXMgSDJCQ2FtZXJhRGV2aWNlQ2FsbGJhY2tzOjpvbkRldmljZUlkbGUoKSB7CisgICAgYXV0byByZXQgPSBtQmFzZS0+b25EZXZpY2VJZGxlKCk7CisgICAgaWYgKCFyZXQuaXNPaygpKSB7CisgICAgICAgICAgQUxPR0UoIiVzIE9uRGV2aWNlSWRsZSBjYWxsYmFjayBmYWlsZWQgZHVlIHRvICVzIixfX0ZVTkNUSU9OX18sCisgICAgICAgICAgICAgICAgcmV0LmRlc2NyaXB0aW9uKCkuY19zdHIoKSk7CisgICAgfQorICAgIHJldHVybiBiaW5kZXI6OlN0YXR1czo6b2soKTsKK30KKworYmluZGVyOjpTdGF0dXMgSDJCQ2FtZXJhRGV2aWNlQ2FsbGJhY2tzOjpvbkNhcHR1cmVTdGFydGVkKAorICAgIGNvbnN0IENhcHR1cmVSZXN1bHRFeHRyYXMmIHJlc3VsdEV4dHJhcywgaW50NjRfdCB0aW1lc3RhbXApIHsKKyAgICB1c2luZyBoYXJkd2FyZTo6Y2FtZXJhc2VydmljZTo6dXRpbHM6OmNvbnZlcnNpb246OmNvbnZlcnRUb0hpZGw7CisgICAgSENhcHR1cmVSZXN1bHRFeHRyYXMgaENhcHR1cmVSZXN1bHRFeHRyYXMgPSBjb252ZXJ0VG9IaWRsKHJlc3VsdEV4dHJhcyk7CisgICAgYXV0byByZXQgPSBtQmFzZS0+b25DYXB0dXJlU3RhcnRlZChoQ2FwdHVyZVJlc3VsdEV4dHJhcywgdGltZXN0YW1wKTsKKyAgICBpZiAoIXJldC5pc09rKCkpIHsKKyAgICAgICAgQUxPR0UoIiVzIE9uQ2FwdHVyZUNhbGxiYWNrIGZhaWxlZCBkdWUgdG8gJXMiLF9fRlVOQ1RJT05fXywKKyAgICAgICAgICAgICAgcmV0LmRlc2NyaXB0aW9uKCkuY19zdHIoKSk7CisgICAgfQorICAgIHJldHVybiBiaW5kZXI6OlN0YXR1czo6b2soKTsKK30KKwordm9pZCBIMkJDYW1lcmFEZXZpY2VDYWxsYmFja3M6OmNvbnZlcnRSZXN1bHRNZXRhZGF0YVRvSGlkbChjb25zdCBjYW1lcmFfbWV0YWRhdGFfdCAqcmF3TWV0YWRhdGEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZtcVNpemVPck1ldGFkYXRhICpoUmVzdWx0TWV0YWRhdGEpIHsKKyAgICAvLyBGaXJzdCB0cnkgd3JpdGluZyB0byBmbXEuCisgICAgc2l6ZV90IG1ldGFkYXRhX3NpemUgPSBnZXRfY2FtZXJhX21ldGFkYXRhX3NpemUocmF3TWV0YWRhdGEpOworICAgIGlmICgobWV0YWRhdGFfc2l6ZSA+IDApICYmCisgICAgICAgIChtQ2FwdHVyZVJlc3VsdE1ldGFkYXRhUXVldWUtPmF2YWlsYWJsZVRvV3JpdGUoKSA+IDApKSB7CisgICAgICAgIGlmIChtQ2FwdHVyZVJlc3VsdE1ldGFkYXRhUXVldWUtPndyaXRlKCh1aW50OF90ICopcmF3TWV0YWRhdGEsIG1ldGFkYXRhX3NpemUpKSB7CisgICAgICAgICAgICBoUmVzdWx0TWV0YWRhdGEtPmZtcU1ldGFkYXRhU2l6ZShtZXRhZGF0YV9zaXplKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIEFMT0dXKCIlcyBDb3VsZG4ndCB1c2UgZm1xLCBmYWxsaW5nIGJhY2sgdG8gaHdiaW5kZXIiLCBfX0ZVTkNUSU9OX18pOworICAgICAgICAgICAgSENhbWVyYU1ldGFkYXRhIG1ldGFkYXRhOworICAgICAgICAgICAgaGFyZHdhcmU6OmNhbWVyYXNlcnZpY2U6OnV0aWxzOjpjb252ZXJzaW9uOjpjb252ZXJ0VG9IaWRsKHJhd01ldGFkYXRhLCAmbWV0YWRhdGEpOworICAgICAgICAgICAgaFJlc3VsdE1ldGFkYXRhLT5tZXRhZGF0YShzdGQ6Om1vdmUobWV0YWRhdGEpKTsKKyAgICAgICAgfQorICAgIH0KK30KKwordm9pZCBIMkJDYW1lcmFEZXZpY2VDYWxsYmFja3M6OkNhbGxiYWNrSGFuZGxlcjo6b25NZXNzYWdlUmVjZWl2ZWQoY29uc3Qgc3A8QU1lc3NhZ2U+ICZtc2cpIHsKKyAgICBzcDxSZWZCYXNlPiBvYmogPSBudWxscHRyOworICAgIHNwPFJlc3VsdFdyYXBwZXI+IHJlc3VsdFdyYXBwZXIgPSBudWxscHRyOworICAgIGJvb2wgZm91bmQgPSBmYWxzZTsKKyAgICBzd2l0Y2ggKG1zZy0+d2hhdCgpKSB7CisgICAgICAgIGNhc2Uga1doYXRSZXN1bHRSZWNlaXZlZDoKKyAgICAgICAgICAgIGZvdW5kID0gbXNnLT5maW5kT2JqZWN0KGtSZXN1bHRLZXksICZvYmopOworICAgICAgICAgICAgaWYgKCFmb3VuZCB8fCBvYmogPT0gbnVsbHB0cikgeworICAgICAgICAgICAgICAgIEFMT0dFKCJDYW5ub3QgZmluZCByZXN1bHQgb2JqZWN0IGluIGNhbGxiYWNrIG1lc3NhZ2UiKTsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisgICAgICAgICAgICByZXN1bHRXcmFwcGVyID0gc3RhdGljX2Nhc3Q8UmVzdWx0V3JhcHBlciAqPihvYmouZ2V0KCkpOworICAgICAgICAgICAgcHJvY2Vzc1Jlc3VsdE1lc3NhZ2UocmVzdWx0V3JhcHBlcik7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIEFMT0dFKCJVbmtub3duIGNhbGxiYWNrIHNlbnQiKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgIH0KKyAgICByZXR1cm47Cit9CisKK3ZvaWQgSDJCQ2FtZXJhRGV2aWNlQ2FsbGJhY2tzOjpDYWxsYmFja0hhbmRsZXI6OnByb2Nlc3NSZXN1bHRNZXNzYWdlKAorICAgIHNwPFJlc3VsdFdyYXBwZXI+ICZyZXN1bHRXcmFwcGVyKSB7CisgICAgc3A8SDJCQ2FtZXJhRGV2aWNlQ2FsbGJhY2tzPiBjb252ZXJ0ZXIgPSBtQ29udmVydGVyLnByb21vdGUoKTsKKyAgICBpZiAoY29udmVydGVyID09IG51bGxwdHIpIHsKKyAgICAgICAgQUxPR0UoIkNhbGxiYWNrIHdyYXBwZXIgaGFzIGRpZWQsIHJlc3VsdCBjYWxsYmFjayBjYW5ub3QgYmUgbWFkZSIpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIENhbWVyYU1ldGFkYXRhTmF0aXZlICZyZXN1bHQgPSByZXN1bHRXcmFwcGVyLT5tUmVzdWx0OworICAgIGF1dG8gcmVzdWx0RXh0cmFzID0gcmVzdWx0V3JhcHBlci0+bVJlc3VsdEV4dHJhczsKKyAgICBhdXRvICZwaHlzaWNhbENhcHR1cmVSZXN1bHRJbmZvcyA9IHJlc3VsdFdyYXBwZXItPm1QaHlzaWNhbENhcHR1cmVSZXN1bHRJbmZvczsKKyAgICBIQ2FwdHVyZVJlc3VsdEV4dHJhcyBoUmVzdWx0RXh0cmFzID0KKyAgICAgICAgICAgIGhhcmR3YXJlOjpjYW1lcmFzZXJ2aWNlOjp1dGlsczo6Y29udmVyc2lvbjo6Y29udmVydFRvSGlkbChyZXN1bHRFeHRyYXMpOworICAgIGhpZGxfdmVjPEhQaHlzaWNhbENhcHR1cmVSZXN1bHRJbmZvPiBoUGh5c2ljYWxDYXB0dXJlUmVzdWx0SW5mb3MgPQorICAgICAgICAgICAgaGFyZHdhcmU6OmNhbWVyYXNlcnZpY2U6OnV0aWxzOjpjb252ZXJzaW9uOjpjb252ZXJ0VG9IaWRsKAorICAgICAgICAgICAgICAgICAgICBwaHlzaWNhbENhcHR1cmVSZXN1bHRJbmZvcywgY29udmVydGVyLT5tQ2FwdHVyZVJlc3VsdE1ldGFkYXRhUXVldWUpOworCisgICAgLy8gQ29udmVydCBNZXRhZGF0YSBpbnRvIEhDYW1lcmFNZXRhZGF0YTsKKyAgICBGbXFTaXplT3JNZXRhZGF0YSBoUmVzdWx0OworICAgIGNvbnN0IGNhbWVyYV9tZXRhZGF0YV90ICpyYXdNZXRhZGF0YSA9IHJlc3VsdC5nZXRBbmRMb2NrKCk7CisgICAgY29udmVydGVyLT5jb252ZXJ0UmVzdWx0TWV0YWRhdGFUb0hpZGwocmF3TWV0YWRhdGEsICZoUmVzdWx0KTsKKyAgICByZXN1bHQudW5sb2NrKHJhd01ldGFkYXRhKTsKKyAgICBhdXRvIHJldCA9IGNvbnZlcnRlci0+bUJhc2UtPm9uUmVzdWx0UmVjZWl2ZWQoaFJlc3VsdCwgaFJlc3VsdEV4dHJhcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaFBoeXNpY2FsQ2FwdHVyZVJlc3VsdEluZm9zKTsKKyAgICBpZiAoIXJldC5pc09rKCkpIHsKKyAgICAgICAgICBBTE9HRSgiJXMgT25SZXN1bHRSZWNlaXZlZCBjYWxsYmFjayBmYWlsZWQgZHVlIHRvICVzIixfX0ZVTkNUSU9OX18sCisgICAgICAgICAgICAgICAgcmV0LmRlc2NyaXB0aW9uKCkuY19zdHIoKSk7CisgICAgfQorfQorCitiaW5kZXI6OlN0YXR1cyBIMkJDYW1lcmFEZXZpY2VDYWxsYmFja3M6Om9uUmVzdWx0UmVjZWl2ZWQoCisgICAgY29uc3QgQ2FtZXJhTWV0YWRhdGFOYXRpdmUmIHJlc3VsdCwKKyAgICBjb25zdCBDYXB0dXJlUmVzdWx0RXh0cmFzJiByZXN1bHRFeHRyYXMsCisgICAgY29uc3QgOjpzdGQ6OnZlY3RvcjxQaHlzaWNhbENhcHR1cmVSZXN1bHRJbmZvPiYgcGh5c2ljYWxDYXB0dXJlUmVzdWx0SW5mb3MpIHsKKyAgICAvLyBXcmFwIENhbWVyYU1ldGFkYXRhLCByZXN1bHRFeHRyYXMgYW5kIHBoeXNpY2FsQ2FwdHVyZVJlc3VsdEluZm9zIGluIG9uCisgICAgLy8gc3A8UmVmQmFzZT4tYWJsZSBzdHJ1Y3R1cmUgYW5kIHBvc3QgaXQuCisgICAgc3A8UmVzdWx0V3JhcHBlcj4gcmVzdWx0V3JhcHBlciA9IG5ldyBSZXN1bHRXcmFwcGVyKGNvbnN0X2Nhc3Q8Q2FtZXJhTWV0YWRhdGFOYXRpdmUgJj4ocmVzdWx0KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0RXh0cmFzLCBwaHlzaWNhbENhcHR1cmVSZXN1bHRJbmZvcyk7CisgICAgc3A8QU1lc3NhZ2U+IG1zZyA9IG5ldyBBTWVzc2FnZShrV2hhdFJlc3VsdFJlY2VpdmVkLCBtSGFuZGxlcik7CisgICAgbXNnLT5zZXRPYmplY3Qoa1Jlc3VsdEtleSwgcmVzdWx0V3JhcHBlcik7CisgICAgbXNnLT5wb3N0KCk7CisgICAgcmV0dXJuIGJpbmRlcjo6U3RhdHVzOjpvaygpOworfQorCitiaW5kZXI6OlN0YXR1cyBIMkJDYW1lcmFEZXZpY2VDYWxsYmFja3M6Om9uUHJlcGFyZWQoaW50MzJfdCBzdHJlYW1JZCkgeworICAgIC8vIG5vdCBpbXBsZW1lbnRlZAorICAgIC8vIFRvIHNpbGVuY2UgV3VudXNlZC1wYXJhbWV0ZXIuCisgICAgKHZvaWQpIHN0cmVhbUlkOworICAgIHJldHVybiBiaW5kZXI6OlN0YXR1czo6b2soKTsKK30KKworYmluZGVyOjpTdGF0dXMgSDJCQ2FtZXJhRGV2aWNlQ2FsbGJhY2tzOjpvblJlcGVhdGluZ1JlcXVlc3RFcnJvcigKKyAgICBpbnQ2NF90IGxhc3RGcmFtZU51bWJlciwKKyAgICBpbnQzMl90IHJlcGVhdGluZ1JlcXVlc3RJZCkgeworICAgIGF1dG8gcmV0ID0KKyAgICAgICAgbUJhc2UtPm9uUmVwZWF0aW5nUmVxdWVzdEVycm9yKGxhc3RGcmFtZU51bWJlciwgcmVwZWF0aW5nUmVxdWVzdElkKTsKKyAgICBpZiAoIXJldC5pc09rKCkpIHsKKyAgICAgICAgQUxPR0UoIiVzIE9uUmVwZWF0aW5nUmVxdWVzdEVyb3IgY2FsbGJhY2sgZmFpbGVkIGR1ZSB0byAlcyIsX19GVU5DVElPTl9fLAorICAgICAgICAgICAgICByZXQuZGVzY3JpcHRpb24oKS5jX3N0cigpKTsKKyAgICB9CisgICAgcmV0dXJuIGJpbmRlcjo6U3RhdHVzOjpvaygpOworfQorCitiaW5kZXI6OlN0YXR1cyBIMkJDYW1lcmFEZXZpY2VDYWxsYmFja3M6Om9uUmVxdWVzdFF1ZXVlRW1wdHkoKSB7CisgICAgLy8gbm90IGltcGxlbWVudGVkCisgICAgcmV0dXJuIGJpbmRlcjo6U3RhdHVzOjpvaygpOworfQorCit9IC8vIGltcGxlbWVudGF0aW9uCit9IC8vIFYyXzAKK30gLy8gZGV2aWNlCit9IC8vIGNhbWVyYXNlcnZpY2UKK30gLy8gZnJhbWV3b3JrcworfSAvLyBhbmRyb2lkCmRpZmYgLS1naXQgYS9zZXJ2aWNlcy9jYW1lcmEvbGliY2FtZXJhc2VydmljZS9oaWRsL0FpZGxDYW1lcmFEZXZpY2VDYWxsYmFja3MuaCBiL3NlcnZpY2VzL2NhbWVyYS9saWJjYW1lcmFzZXJ2aWNlL2hpZGwvQWlkbENhbWVyYURldmljZUNhbGxiYWNrcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRiZjUyMGEKLS0tIC9kZXYvbnVsbAorKysgYi9zZXJ2aWNlcy9jYW1lcmEvbGliY2FtZXJhc2VydmljZS9oaWRsL0FpZGxDYW1lcmFEZXZpY2VDYWxsYmFja3MuaApAQCAtMCwwICsxLDEzMiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxOCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCisKKyNpZm5kZWYgQU5EUk9JRF9GUkFNRVdPUktTX0FJRExfQ0FNRVJBREVWSUNFQ0FMTEJBQ0tTX0gKKyNkZWZpbmUgQU5EUk9JRF9GUkFNRVdPUktTX0FJRExfQ0FNRVJBREVWSUNFQ0FMTEJBQ0tTX0gKKworI2luY2x1ZGUgPG11dGV4PgorI2luY2x1ZGUgPHRocmVhZD4KKworI2luY2x1ZGUgPGFuZHJvaWQvZnJhbWV3b3Jrcy9jYW1lcmFzZXJ2aWNlL2NvbW1vbi8yLjAvdHlwZXMuaD4KKyNpbmNsdWRlIDxhbmRyb2lkL2ZyYW1ld29ya3MvY2FtZXJhc2VydmljZS9zZXJ2aWNlLzIuMC90eXBlcy5oPgorI2luY2x1ZGUgPGFuZHJvaWQvZnJhbWV3b3Jrcy9jYW1lcmFzZXJ2aWNlL2RldmljZS8yLjAvSUNhbWVyYURldmljZUNhbGxiYWNrLmg+CisjaW5jbHVkZSA8YW5kcm9pZC9mcmFtZXdvcmtzL2NhbWVyYXNlcnZpY2UvZGV2aWNlLzIuMC90eXBlcy5oPgorI2luY2x1ZGUgPGFuZHJvaWQvaGFyZHdhcmUvY2FtZXJhMi9CbkNhbWVyYURldmljZUNhbGxiYWNrcy5oPgorI2luY2x1ZGUgPG1lZGlhL3N0YWdlZnJpZ2h0L2ZvdW5kYXRpb24vQUxvb3Blci5oPgorI2luY2x1ZGUgPG1lZGlhL3N0YWdlZnJpZ2h0L2ZvdW5kYXRpb24vQUhhbmRsZXIuaD4KKyNpbmNsdWRlIDxtZWRpYS9zdGFnZWZyaWdodC9mb3VuZGF0aW9uL0FNZXNzYWdlLmg+CisjaW5jbHVkZSA8Zm1xL01lc3NhZ2VRdWV1ZS5oPgorI2luY2x1ZGUgPGhpZGwvTVFEZXNjcmlwdG9yLmg+CisjaW5jbHVkZSA8aGlkbC9TdGF0dXMuaD4KKyNpbmNsdWRlIDxDYW1lcmFTZXJ2aWNlLmg+CisjaW5jbHVkZSA8aGlkbC9DYW1lcmFIeWJyaWRJbnRlcmZhY2UuaD4KKworbmFtZXNwYWNlIGFuZHJvaWQgeworbmFtZXNwYWNlIGZyYW1ld29ya3MgeworbmFtZXNwYWNlIGNhbWVyYXNlcnZpY2UgeworbmFtZXNwYWNlIGRldmljZSB7CituYW1lc3BhY2UgVjJfMCB7CituYW1lc3BhY2UgaW1wbGVtZW50YXRpb24geworCit1c2luZyBjYW1lcmFoeWJyaWQ6OkgyQkNvbnZlcnRlcjsKK3VzaW5nIEhDYW1lcmFEZXZpY2VDYWxsYmFjayA9IGNhbWVyYXNlcnZpY2U6OmRldmljZTo6VjJfMDo6SUNhbWVyYURldmljZUNhbGxiYWNrOwordXNpbmcgSFBoeXNpY2FsQ2FwdHVyZVJlc3VsdEluZm8gPSBjYW1lcmFzZXJ2aWNlOjpkZXZpY2U6OlYyXzA6OlBoeXNpY2FsQ2FwdHVyZVJlc3VsdEluZm87Cit1c2luZyBhbmRyb2lkOjpmcmFtZXdvcmtzOjpjYW1lcmFzZXJ2aWNlOjpkZXZpY2U6OlYyXzA6OkZtcVNpemVPck1ldGFkYXRhOworCit1c2luZyBoYXJkd2FyZTo6Y2FtZXJhMjo6Qm5DYW1lcmFEZXZpY2VDYWxsYmFja3M7Cit1c2luZyBoYXJkd2FyZTo6Y2FtZXJhMjo6SUNhbWVyYURldmljZUNhbGxiYWNrczsKK3VzaW5nIGhhcmR3YXJlOjpjYW1lcmEyOjppbXBsOjpDYXB0dXJlUmVzdWx0RXh0cmFzOwordXNpbmcgaGFyZHdhcmU6OmNhbWVyYTI6OmltcGw6OkNhbWVyYU1ldGFkYXRhTmF0aXZlOwordXNpbmcgaGFyZHdhcmU6OmNhbWVyYTI6OmltcGw6OlBoeXNpY2FsQ2FwdHVyZVJlc3VsdEluZm87Cit1c2luZyBoYXJkd2FyZTo6a1N5bmNocm9uaXplZFJlYWRXcml0ZTsKK3VzaW5nIGhhcmR3YXJlOjpNZXNzYWdlUXVldWU7Cit1c2luZyBDYXB0dXJlUmVzdWx0TWV0YWRhdGFRdWV1ZSA9IE1lc3NhZ2VRdWV1ZTx1aW50OF90LCBrU3luY2hyb25pemVkUmVhZFdyaXRlPjsKKworc3RydWN0IEgyQkNhbWVyYURldmljZUNhbGxiYWNrcyA6CisgICAgcHVibGljIEgyQkNvbnZlcnRlcjxIQ2FtZXJhRGV2aWNlQ2FsbGJhY2ssIElDYW1lcmFEZXZpY2VDYWxsYmFja3MsIEJuQ2FtZXJhRGV2aWNlQ2FsbGJhY2tzPiB7CisgICAgSDJCQ2FtZXJhRGV2aWNlQ2FsbGJhY2tzKGNvbnN0IHNwPEhhbEludGVyZmFjZT4mIGJhc2UpOworCisgICAgfkgyQkNhbWVyYURldmljZUNhbGxiYWNrcygpOworCisgICAgYm9vbCBpbml0aWFsaXplTG9vcGVyKCk7CisKKyAgICB2aXJ0dWFsIGJpbmRlcjo6U3RhdHVzIG9uRGV2aWNlRXJyb3IoaW50MzJfdCBlcnJvckNvZGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IENhcHR1cmVSZXN1bHRFeHRyYXMmIHJlc3VsdEV4dHJhcykgb3ZlcnJpZGU7CisKKyAgICB2aXJ0dWFsIGJpbmRlcjo6U3RhdHVzIG9uRGV2aWNlSWRsZSgpIG92ZXJyaWRlOworCisgICAgdmlydHVhbCBiaW5kZXI6OlN0YXR1cyBvbkNhcHR1cmVTdGFydGVkKGNvbnN0IENhcHR1cmVSZXN1bHRFeHRyYXMmIHJlc3VsdEV4dHJhcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50NjRfdCB0aW1lc3RhbXApIG92ZXJyaWRlOworCisgICAgdmlydHVhbCBiaW5kZXI6OlN0YXR1cyBvblJlc3VsdFJlY2VpdmVkKAorICAgICAgICBjb25zdCBDYW1lcmFNZXRhZGF0YU5hdGl2ZSYgcmVzdWx0LCBjb25zdCBDYXB0dXJlUmVzdWx0RXh0cmFzJiByZXN1bHRFeHRyYXMsCisgICAgICAgIGNvbnN0IHN0ZDo6dmVjdG9yPFBoeXNpY2FsQ2FwdHVyZVJlc3VsdEluZm8+JiBwaHlzaWNhbENhcHR1cmVSZXN1bHRJbmZvcykgb3ZlcnJpZGU7CisKKyAgICB2aXJ0dWFsIGJpbmRlcjo6U3RhdHVzIG9uUHJlcGFyZWQoaW50MzJfdCBzdHJlYW1JZCkgb3ZlcnJpZGU7CisKKyAgICB2aXJ0dWFsIGJpbmRlcjo6U3RhdHVzIG9uUmVwZWF0aW5nUmVxdWVzdEVycm9yKGludDY0X3QgbGFzdEZyYW1lTnVtYmVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50MzJfdCByZXBlYXRpbmdSZXF1ZXN0SWQpIG92ZXJyaWRlOworCisgICAgdmlydHVhbCBiaW5kZXI6OlN0YXR1cyBvblJlcXVlc3RRdWV1ZUVtcHR5KCkgb3ZlcnJpZGU7CisKKyAgICB2b2lkIHNldENhcHR1cmVSZXN1bHRNZXRhZGF0YVF1ZXVlKHN0ZDo6c2hhcmVkX3B0cjxDYXB0dXJlUmVzdWx0TWV0YWRhdGFRdWV1ZT4gbWV0YWRhdGFRdWV1ZSkgeworICAgICAgICBtQ2FwdHVyZVJlc3VsdE1ldGFkYXRhUXVldWUgPSBtZXRhZGF0YVF1ZXVlOworICAgIH0KKworIHByaXZhdGU6CisgICAgLy8gV3JhcHBlciBzdHJ1Y3Qgc28gdGhhdCBwYXJhbWV0ZXJzIHRvIG9uUmVzdWx0UmVjZWl2ZWQgY2FsbGJhY2sgbWF5IGJlCisgICAgLy8gc2VudCB0aHJvdWdoIGFuIEFNZXNzYWdlLgorICAgIHN0cnVjdCBSZXN1bHRXcmFwcGVyIDogcHVibGljIFJlZkJhc2UgeworICAgICAgICBDYW1lcmFNZXRhZGF0YU5hdGl2ZSBtUmVzdWx0OworICAgICAgICBDYXB0dXJlUmVzdWx0RXh0cmFzIG1SZXN1bHRFeHRyYXM7CisgICAgICAgIHN0ZDo6dmVjdG9yPFBoeXNpY2FsQ2FwdHVyZVJlc3VsdEluZm8+IG1QaHlzaWNhbENhcHR1cmVSZXN1bHRJbmZvczsKKyAgICAgICAgUmVzdWx0V3JhcHBlcihDYW1lcmFNZXRhZGF0YU5hdGl2ZSAmcmVzdWx0LAorICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IENhcHR1cmVSZXN1bHRFeHRyYXMgcmVzdWx0RXh0cmFzLAorICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0ZDo6dmVjdG9yPFBoeXNpY2FsQ2FwdHVyZVJlc3VsdEluZm8+ICZwaHlzaWNhbENhcHR1cmVSZXN1bHRJbmZvcykgOgorICAgICAgLy8gVE9ETzogbWFrZSB0aGlzIHN0ZDo6bW92YWJsZQorICAgICAgbVJlc3VsdChyZXN1bHQpLCBtUmVzdWx0RXh0cmFzKHJlc3VsdEV4dHJhcyksIG1QaHlzaWNhbENhcHR1cmVSZXN1bHRJbmZvcyhwaHlzaWNhbENhcHR1cmVSZXN1bHRJbmZvcykgeyB9CisgICAgfTsKKworICAgIHN0cnVjdCBDYWxsYmFja0hhbmRsZXIgOiBwdWJsaWMgQUhhbmRsZXIgeworICAgICAgICBwdWJsaWM6CisgICAgICAgICAgICB2b2lkIG9uTWVzc2FnZVJlY2VpdmVkKGNvbnN0IHNwPEFNZXNzYWdlPiAmbXNnKSBvdmVycmlkZTsKKyAgICAgICAgICAgIENhbGxiYWNrSGFuZGxlcihIMkJDYW1lcmFEZXZpY2VDYWxsYmFja3MgKmNvbnZlcnRlcikgOiBtQ29udmVydGVyKGNvbnZlcnRlcikgeyB9CisgICAgICAgIHByaXZhdGU6CisgICAgICAgICAgICB2b2lkIHByb2Nlc3NSZXN1bHRNZXNzYWdlKHNwPFJlc3VsdFdyYXBwZXI+ICZyZXN1bHRXcmFwcGVyKTsKKyAgICAgICAgICAgIHdwPEgyQkNhbWVyYURldmljZUNhbGxiYWNrcz4gbUNvbnZlcnRlciA9IG51bGxwdHI7CisgICAgICAgICAgICBNdXRleCBtTWV0YWRhdGFRdWV1ZUxvY2s7CisgICAgfTsKKworICAgIHZvaWQgY29udmVydFJlc3VsdE1ldGFkYXRhVG9IaWRsKGNvbnN0IGNhbWVyYV9tZXRhZGF0YSAqcmF3TWV0YWRhdGEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRm1xU2l6ZU9yTWV0YWRhdGEgKnJlc3VsdE1ldGFkYXRhKTsKKyAgICBlbnVtIHsKKyAgICAgICAga1doYXRSZXN1bHRSZWNlaXZlZCwKKyAgICB9OworCisgICAgc3RhdGljIGNvbnN0IGNoYXIgKmtSZXN1bHRLZXk7CisKKyAgICBzdGQ6OnNoYXJlZF9wdHI8Q2FwdHVyZVJlc3VsdE1ldGFkYXRhUXVldWU+IG1DYXB0dXJlUmVzdWx0TWV0YWRhdGFRdWV1ZSA9IG51bGxwdHI7CisgICAgc3A8Q2FsbGJhY2tIYW5kbGVyPiBtSGFuZGxlciA9IG51bGxwdHI7CisgICAgc3A8QUxvb3Blcj4gbUNiTG9vcGVyID0gbnVsbHB0cjsKK307CisKK30gLy8gaW1wbGVtZW50YXRpb24KK30gLy8gVjJfMAorfSAvLyBkZXZpY2UKK30gLy8gY2FtZXJhc2VydmljZQorfSAvLyBmcmFtZXdvcmtzCit9IC8vIGFuZHJvaWQKKyNlbmRpZiAvLyBBTkRST0lEX0ZSQU1FV09SS1NfQUlETF9DQU1FUkFERVZJQ0VDQUxMQkFDS1NfSApkaWZmIC0tZ2l0IGEvc2VydmljZXMvY2FtZXJhL2xpYmNhbWVyYXNlcnZpY2UvaGlkbC9BaWRsQ2FtZXJhU2VydmljZUxpc3RlbmVyLmNwcCBiL3NlcnZpY2VzL2NhbWVyYS9saWJjYW1lcmFzZXJ2aWNlL2hpZGwvQWlkbENhbWVyYVNlcnZpY2VMaXN0ZW5lci5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTEwZWY4ZQotLS0gL2Rldi9udWxsCisrKyBiL3NlcnZpY2VzL2NhbWVyYS9saWJjYW1lcmFzZXJ2aWNlL2hpZGwvQWlkbENhbWVyYVNlcnZpY2VMaXN0ZW5lci5jcHAKQEAgLTAsMCArMSw1NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxOCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCisKKyNpbmNsdWRlIDxoaWRsL0FpZGxDYW1lcmFTZXJ2aWNlTGlzdGVuZXIuaD4KKyNpbmNsdWRlIDxoaWRsL0NvbnZlcnQuaD4KKworbmFtZXNwYWNlIGFuZHJvaWQgeworbmFtZXNwYWNlIGZyYW1ld29ya3MgeworbmFtZXNwYWNlIGNhbWVyYXNlcnZpY2UgeworbmFtZXNwYWNlIHNlcnZpY2UgeworbmFtZXNwYWNlIFYyXzAgeworbmFtZXNwYWNlIGltcGxlbWVudGF0aW9uIHsKKwordXNpbmcgaGFyZHdhcmU6OmNhbWVyYXNlcnZpY2U6OnV0aWxzOjpjb252ZXJzaW9uOjpjb252ZXJ0VG9IaWRsQ2FtZXJhRGV2aWNlU3RhdHVzOworCitiaW5kZXI6OlN0YXR1cyBIMkJDYW1lcmFTZXJ2aWNlTGlzdGVuZXI6Om9uU3RhdHVzQ2hhbmdlZCgKKyAgICBpbnQzMl90IHN0YXR1cywgY29uc3QgOjphbmRyb2lkOjpTdHJpbmcxNiYgY2FtZXJhSWQpIHsKKyAgSENhbWVyYURldmljZVN0YXR1cyBoQ2FtZXJhRGV2aWNlU3RhdHVzID0gY29udmVydFRvSGlkbENhbWVyYURldmljZVN0YXR1cyhzdGF0dXMpOworICBDYW1lcmFTdGF0dXNBbmRJZCBjYW1lcmFTdGF0dXNBbmRJZDsKKyAgY2FtZXJhU3RhdHVzQW5kSWQuZGV2aWNlU3RhdHVzID0gaENhbWVyYURldmljZVN0YXR1czsKKyAgY2FtZXJhU3RhdHVzQW5kSWQuY2FtZXJhSWQgPSBTdHJpbmc4KGNhbWVyYUlkKS5zdHJpbmcoKTsKKyAgYXV0byByZXQgPSBtQmFzZS0+b25TdGF0dXNDaGFuZ2VkKGNhbWVyYVN0YXR1c0FuZElkKTsKKyAgaWYgKCFyZXQuaXNPaygpKSB7CisgICAgICBBTE9HRSgiJXMgT25TdGF0dXNDaGFuZ2VkIGNhbGxiYWNrIGZhaWxlZCBkdWUgdG8gJXMiLF9fRlVOQ1RJT05fXywKKyAgICAgICAgICAgIHJldC5kZXNjcmlwdGlvbigpLmNfc3RyKCkpOworICB9CisgIHJldHVybiBiaW5kZXI6OlN0YXR1czo6b2soKTsKK30KKworOjphbmRyb2lkOjpiaW5kZXI6OlN0YXR1cyBIMkJDYW1lcmFTZXJ2aWNlTGlzdGVuZXI6Om9uVG9yY2hTdGF0dXNDaGFuZ2VkKAorICAgIGludDMyX3QsIGNvbnN0IDo6YW5kcm9pZDo6U3RyaW5nMTYmKSB7CisgIC8vIFdlIGRvbid0IGltcGxlbWVudCBvblRvcmNoU3RhdHVzQ2hhbmdlZAorICByZXR1cm4gYmluZGVyOjpTdGF0dXM6Om9rKCk7Cit9CisKK30gLy8gaW1wbGVtZW50YXRpb24KK30gLy8gVjJfMAorfSAvLyBjb21tb24KK30gLy8gY2FtZXJhc2VydmljZQorfSAvLyBmcmFtZXdvcmtzCit9IC8vIGFuZHJvaWQKZGlmZiAtLWdpdCBhL3NlcnZpY2VzL2NhbWVyYS9saWJjYW1lcmFzZXJ2aWNlL2hpZGwvQWlkbENhbWVyYVNlcnZpY2VMaXN0ZW5lci5oIGIvc2VydmljZXMvY2FtZXJhL2xpYmNhbWVyYXNlcnZpY2UvaGlkbC9BaWRsQ2FtZXJhU2VydmljZUxpc3RlbmVyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2E5MTQzZAotLS0gL2Rldi9udWxsCisrKyBiL3NlcnZpY2VzL2NhbWVyYS9saWJjYW1lcmFzZXJ2aWNlL2hpZGwvQWlkbENhbWVyYVNlcnZpY2VMaXN0ZW5lci5oCkBAIC0wLDAgKzEsNjAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTggVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworCisjaW5jbHVkZSA8bXV0ZXg+CisjaW5jbHVkZSA8dGhyZWFkPgorCisjaW5jbHVkZSA8YW5kcm9pZC9mcmFtZXdvcmtzL2NhbWVyYXNlcnZpY2UvY29tbW9uLzIuMC90eXBlcy5oPgorI2luY2x1ZGUgPGFuZHJvaWQvZnJhbWV3b3Jrcy9jYW1lcmFzZXJ2aWNlL3NlcnZpY2UvMi4wL0lDYW1lcmFTZXJ2aWNlTGlzdGVuZXIuaD4KKyNpbmNsdWRlIDxhbmRyb2lkL2ZyYW1ld29ya3MvY2FtZXJhc2VydmljZS9kZXZpY2UvMi4wL3R5cGVzLmg+CisjaW5jbHVkZSA8YW5kcm9pZC9oYXJkd2FyZS9CbkNhbWVyYVNlcnZpY2VMaXN0ZW5lci5oPgorI2luY2x1ZGUgPGFuZHJvaWQvaGFyZHdhcmUvQnBDYW1lcmFTZXJ2aWNlTGlzdGVuZXIuaD4KKworI2luY2x1ZGUgPGhpZGwvU3RhdHVzLmg+CisjaW5jbHVkZSA8aGlkbC9DYW1lcmFIeWJyaWRJbnRlcmZhY2UuaD4KKworbmFtZXNwYWNlIGFuZHJvaWQgeworbmFtZXNwYWNlIGZyYW1ld29ya3MgeworbmFtZXNwYWNlIGNhbWVyYXNlcnZpY2UgeworbmFtZXNwYWNlIHNlcnZpY2UgeworbmFtZXNwYWNlIFYyXzAgeworbmFtZXNwYWNlIGltcGxlbWVudGF0aW9uIHsKKwordXNpbmcgaGFyZHdhcmU6OkJuQ2FtZXJhU2VydmljZUxpc3RlbmVyOwordXNpbmcgaGFyZHdhcmU6OkJwQ2FtZXJhU2VydmljZUxpc3RlbmVyOwordXNpbmcgY2FtZXJhaHlicmlkOjpIMkJDb252ZXJ0ZXI7Cit1c2luZyBIQ2FtZXJhRGV2aWNlU3RhdHVzID0gZnJhbWV3b3Jrczo6Y2FtZXJhc2VydmljZTo6c2VydmljZTo6VjJfMDo6Q2FtZXJhRGV2aWNlU3RhdHVzOwordHlwZWRlZiBmcmFtZXdvcmtzOjpjYW1lcmFzZXJ2aWNlOjpzZXJ2aWNlOjpWMl8wOjpJQ2FtZXJhU2VydmljZUxpc3RlbmVyIEhDYW1lcmFTZXJ2aWNlTGlzdGVuZXI7CisKK3N0cnVjdCBIMkJDYW1lcmFTZXJ2aWNlTGlzdGVuZXIgOgorICAgIHB1YmxpYyBIMkJDb252ZXJ0ZXI8SENhbWVyYVNlcnZpY2VMaXN0ZW5lciwgSUNhbWVyYVNlcnZpY2VMaXN0ZW5lciwgQm5DYW1lcmFTZXJ2aWNlTGlzdGVuZXI+IHsKKyAgICBIMkJDYW1lcmFTZXJ2aWNlTGlzdGVuZXIoY29uc3Qgc3A8SGFsSW50ZXJmYWNlPiYgYmFzZSkgOiBDQmFzZShiYXNlKSB7IH0KKworICAgIH5IMkJDYW1lcmFTZXJ2aWNlTGlzdGVuZXIoKSB7IH0KKworICAgIHZpcnR1YWwgOjphbmRyb2lkOjpiaW5kZXI6OlN0YXR1cyBvblN0YXR1c0NoYW5nZWQoaW50MzJfdCBzdGF0dXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCA6OmFuZHJvaWQ6OlN0cmluZzE2JiBjYW1lcmFJZCkgb3ZlcnJpZGU7CisKKyAgICB2aXJ0dWFsIDo6YW5kcm9pZDo6YmluZGVyOjpTdGF0dXMgb25Ub3JjaFN0YXR1c0NoYW5nZWQoCisgICAgICAgIGludDMyX3Qgc3RhdHVzLCBjb25zdCA6OmFuZHJvaWQ6OlN0cmluZzE2JiBjYW1lcmFJZCkgb3ZlcnJpZGU7Cit9OworCit9IC8vIGltcGxlbWVudGF0aW9uCit9IC8vIFYyXzAKK30gLy8gc2VydmljZQorfSAvLyBjYW1lcmFzZXJ2aWNlCit9IC8vIGZyYW1ld29ya3MKK30gLy8gYW5kcm9pZApkaWZmIC0tZ2l0IGEvc2VydmljZXMvY2FtZXJhL2xpYmNhbWVyYXNlcnZpY2UvaGlkbC9DYW1lcmFIeWJyaWRJbnRlcmZhY2UuaCBiL3NlcnZpY2VzL2NhbWVyYS9saWJjYW1lcmFzZXJ2aWNlL2hpZGwvQ2FtZXJhSHlicmlkSW50ZXJmYWNlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmFmMDExMgotLS0gL2Rldi9udWxsCisrKyBiL3NlcnZpY2VzL2NhbWVyYS9saWJjYW1lcmFzZXJ2aWNlL2hpZGwvQ2FtZXJhSHlicmlkSW50ZXJmYWNlLmgKQEAgLTAsMCArMSwxMzggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTggVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworCisjaWZuZGVmIEFORFJPSURfQ0FNRVJBX0hZQlJJRElOVEVSRkFDRV9ICisjZGVmaW5lIEFORFJPSURfQ0FNRVJBX0hZQlJJRElOVEVSRkFDRV9ICisKKyNpbmNsdWRlIDx2ZWN0b3I+CisjaW5jbHVkZSA8bXV0ZXg+CisKKyNpbmNsdWRlIDxiaW5kZXIvUGFyY2VsLmg+CisjaW5jbHVkZSA8aGlkbC9IaWRsU3VwcG9ydC5oPgorCituYW1lc3BhY2UgYW5kcm9pZCB7CituYW1lc3BhY2UgY2FtZXJhaHlicmlkIHsKK3R5cGVkZWYgOjphbmRyb2lkOjpoaWRsOjpiYXNlOjpWMV8wOjpJQmFzZSBISW50ZXJmYWNlOworCit0ZW1wbGF0ZSA8CisgICAgICAgIHR5cGVuYW1lIEhJTlRFUkZBQ0UsCisgICAgICAgIHR5cGVuYW1lIElOVEVSRkFDRSwKKyAgICAgICAgdHlwZW5hbWUgQk5JTlRFUkZBQ0UgPgorY2xhc3MgSDJCQ29udmVydGVyIDogcHVibGljIEJOSU5URVJGQUNFIHsKK3B1YmxpYzoKKyAgICB0eXBlZGVmIEgyQkNvbnZlcnRlcjxISU5URVJGQUNFLCBJTlRFUkZBQ0UsIEJOSU5URVJGQUNFPiBDQmFzZTsgLy8gQ29udmVydGVyIEJhc2UKKyAgICB0eXBlZGVmIElOVEVSRkFDRSBCYXNlSW50ZXJmYWNlOworICAgIHR5cGVkZWYgSElOVEVSRkFDRSBIYWxJbnRlcmZhY2U7CisKKyAgICBIMkJDb252ZXJ0ZXIoY29uc3Qgc3A8SGFsSW50ZXJmYWNlPiYgYmFzZSkgOiBtQmFzZShiYXNlKSB7fQorICAgIHZpcnR1YWwgc3A8SGFsSW50ZXJmYWNlPiBnZXRIYWxJbnRlcmZhY2UoKSB7IHJldHVybiBtQmFzZTsgfQorICAgIHZpcnR1YWwgc3RhdHVzX3QgbGlua1RvRGVhdGgoCisgICAgICAgICAgICBjb25zdCBzcDxJQmluZGVyOjpEZWF0aFJlY2lwaWVudD4mIHJlY2lwaWVudCwKKyAgICAgICAgICAgIHZvaWQqIGNvb2tpZSA9IG51bGxwdHIsCisgICAgICAgICAgICB1aW50MzJfdCBmbGFncyA9IDApOworICAgIHZpcnR1YWwgc3RhdHVzX3QgdW5saW5rVG9EZWF0aCgKKyAgICAgICAgICAgIGNvbnN0IHdwPElCaW5kZXI6OkRlYXRoUmVjaXBpZW50PiYgcmVjaXBpZW50LAorICAgICAgICAgICAgdm9pZCogY29va2llID0gbnVsbHB0ciwKKyAgICAgICAgICAgIHVpbnQzMl90IGZsYWdzID0gMCwKKyAgICAgICAgICAgIHdwPElCaW5kZXI6OkRlYXRoUmVjaXBpZW50Piogb3V0UmVjaXBpZW50ID0gbnVsbHB0cik7CisKK3Byb3RlY3RlZDoKKyAgICBzcDxIYWxJbnRlcmZhY2U+IG1CYXNlOworICAgIHN0cnVjdCBPYml0dWFyeSA6IHB1YmxpYyBoYXJkd2FyZTo6aGlkbF9kZWF0aF9yZWNpcGllbnQgeworICAgICAgICB3cDxJQmluZGVyOjpEZWF0aFJlY2lwaWVudD4gcmVjaXBpZW50OworICAgICAgICB2b2lkKiBjb29raWU7CisgICAgICAgIHVpbnQzMl90IGZsYWdzOworICAgICAgICB3cDxJQmluZGVyPiB3aG87CisgICAgICAgIE9iaXR1YXJ5KAorICAgICAgICAgICAgICAgIGNvbnN0IHdwPElCaW5kZXI6OkRlYXRoUmVjaXBpZW50PiYgciwKKyAgICAgICAgICAgICAgICB2b2lkKiBjLCB1aW50MzJfdCBmLAorICAgICAgICAgICAgICAgIGNvbnN0IHdwPElCaW5kZXI+JiB3KSA6CisgICAgICAgICAgICByZWNpcGllbnQociksIGNvb2tpZShjKSwgZmxhZ3MoZiksIHdobyh3KSB7CisgICAgICAgIH0KKyAgICAgICAgT2JpdHVhcnkoY29uc3QgT2JpdHVhcnkmIG8pIDoKKyAgICAgICAgICAgIHJlY2lwaWVudChvLnJlY2lwaWVudCksCisgICAgICAgICAgICBjb29raWUoby5jb29raWUpLAorICAgICAgICAgICAgZmxhZ3Moby5mbGFncyksCisgICAgICAgICAgICB3aG8oby53aG8pIHsKKyAgICAgICAgfQorICAgICAgICBPYml0dWFyeSYgb3BlcmF0b3I9KGNvbnN0IE9iaXR1YXJ5JiBvKSB7CisgICAgICAgICAgICByZWNpcGllbnQgPSBvLnJlY2lwaWVudDsKKyAgICAgICAgICAgIGNvb2tpZSA9IG8uY29va2llOworICAgICAgICAgICAgZmxhZ3MgPSBvLmZsYWdzOworICAgICAgICAgICAgd2hvID0gby53aG87CisgICAgICAgICAgICByZXR1cm4gKnRoaXM7CisgICAgICAgIH0KKyAgICAgICAgdm9pZCBzZXJ2aWNlRGllZCh1aW50NjRfdCwgY29uc3Qgd3A8SEludGVyZmFjZT4mKSBvdmVycmlkZSB7CisgICAgICAgICAgICBzcDxJQmluZGVyOjpEZWF0aFJlY2lwaWVudD4gZHIgPSByZWNpcGllbnQucHJvbW90ZSgpOworICAgICAgICAgICAgaWYgKGRyICE9IG51bGxwdHIpIHsKKyAgICAgICAgICAgICAgICBkci0+YmluZGVyRGllZCh3aG8pOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfTsKKyAgICBzdGQ6Om11dGV4IG1PYml0dWFyaWVzTG9jazsKKyAgICBzdGQ6OnZlY3RvcjxzcDxPYml0dWFyeT4gPiBtT2JpdHVhcmllczsKK307CisKK3RlbXBsYXRlIDwKKyAgICAgICAgdHlwZW5hbWUgSElOVEVSRkFDRSwKKyAgICAgICAgdHlwZW5hbWUgSU5URVJGQUNFLAorICAgICAgICB0eXBlbmFtZSBCTklOVEVSRkFDRT4KK3N0YXR1c190IEgyQkNvbnZlcnRlcjxISU5URVJGQUNFLCBJTlRFUkZBQ0UsIEJOSU5URVJGQUNFPjo6CisgICAgICAgIGxpbmtUb0RlYXRoKAorICAgICAgICBjb25zdCBzcDxJQmluZGVyOjpEZWF0aFJlY2lwaWVudD4mIHJlY2lwaWVudCwKKyAgICAgICAgdm9pZCogY29va2llLCB1aW50MzJfdCBmbGFncykgeworICAgIExPR19BTFdBWVNfRkFUQUxfSUYocmVjaXBpZW50ID09IG51bGxwdHIsCisgICAgICAgICAgICAibGlua1RvRGVhdGgoKTogcmVjaXBpZW50IG11c3QgYmUgbm9uLW51bGxwdHIiKTsKKyAgICB7CisgICAgICAgIHN0ZDo6bG9ja19ndWFyZDxzdGQ6Om11dGV4PiBsb2NrKG1PYml0dWFyaWVzTG9jayk7CisgICAgICAgIG1PYml0dWFyaWVzLnB1c2hfYmFjayhuZXcgT2JpdHVhcnkocmVjaXBpZW50LCBjb29raWUsIGZsYWdzLCB0aGlzKSk7CisgICAgICAgIGlmICghbUJhc2UtPmxpbmtUb0RlYXRoKG1PYml0dWFyaWVzLmJhY2soKSwgMCkpIHsKKyAgICAgICAgICAgcmV0dXJuIERFQURfT0JKRUNUOworICAgICAgICB9CisgICAgfQorICAgIHJldHVybiBOT19FUlJPUjsKK30KKwordGVtcGxhdGUgPAorICAgICAgICB0eXBlbmFtZSBISU5URVJGQUNFLAorICAgICAgICB0eXBlbmFtZSBJTlRFUkZBQ0UsCisgICAgICAgIHR5cGVuYW1lIEJOSU5URVJGQUNFPgorc3RhdHVzX3QgSDJCQ29udmVydGVyPEhJTlRFUkZBQ0UsIElOVEVSRkFDRSwgQk5JTlRFUkZBQ0U+OjoKKyAgICAgICAgdW5saW5rVG9EZWF0aCgKKyAgICAgICAgY29uc3Qgd3A8SUJpbmRlcjo6RGVhdGhSZWNpcGllbnQ+JiByZWNpcGllbnQsCisgICAgICAgIHZvaWQqIGNvb2tpZSwgdWludDMyX3QgZmxhZ3MsCisgICAgICAgIHdwPElCaW5kZXI6OkRlYXRoUmVjaXBpZW50Piogb3V0UmVjaXBpZW50KSB7CisgICAgc3RkOjpsb2NrX2d1YXJkPHN0ZDo6bXV0ZXg+IGxvY2sobU9iaXR1YXJpZXNMb2NrKTsKKyAgICBmb3IgKGF1dG8gaSA9IG1PYml0dWFyaWVzLmJlZ2luKCk7IGkgIT0gbU9iaXR1YXJpZXMuZW5kKCk7ICsraSkgeworICAgICAgICBpZiAoKGZsYWdzID0gKCppKS0+ZmxhZ3MpICYmICgKKyAgICAgICAgICAgICAgICAocmVjaXBpZW50ID09ICgqaSktPnJlY2lwaWVudCkgfHwKKyAgICAgICAgICAgICAgICAoKHJlY2lwaWVudCA9PSBudWxscHRyKSAmJiAoY29va2llID09ICgqaSktPmNvb2tpZSkpKSkgeworICAgICAgICAgICAgaWYgKG91dFJlY2lwaWVudCAhPSBudWxscHRyKSB7CisgICAgICAgICAgICAgICAgKm91dFJlY2lwaWVudCA9ICgqaSktPnJlY2lwaWVudDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGJvb2wgc3VjY2VzcyA9IG1CYXNlLT51bmxpbmtUb0RlYXRoKCppKTsKKyAgICAgICAgICAgIG1PYml0dWFyaWVzLmVyYXNlKGkpOworICAgICAgICAgICAgcmV0dXJuIHN1Y2Nlc3MgPyBOT19FUlJPUiA6IERFQURfT0JKRUNUOworICAgICAgICB9CisgICAgfQorICAgIHJldHVybiBOQU1FX05PVF9GT1VORDsKK30KKworfSAvLyBuYW1lc3BhY2UgY2FtZXJhaHlicmlkCit9IC8vIG5hbWVzcGFjZSBhbmRyb2lkCisKKyNlbmRpZiAvLyBBTkRST0lEX0NBTUVSQV9IWUJSSURJTlRFUkZBQ0VfSAorCmRpZmYgLS1naXQgYS9zZXJ2aWNlcy9jYW1lcmEvbGliY2FtZXJhc2VydmljZS9oaWRsL0NvbnZlcnQuY3BwIGIvc2VydmljZXMvY2FtZXJhL2xpYmNhbWVyYXNlcnZpY2UvaGlkbC9Db252ZXJ0LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43NmVkNmY2Ci0tLSAvZGV2L251bGwKKysrIGIvc2VydmljZXMvY2FtZXJhL2xpYmNhbWVyYXNlcnZpY2UvaGlkbC9Db252ZXJ0LmNwcApAQCAtMCwwICsxLDI2NyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxOCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCisKKyNpbmNsdWRlIDxoaWRsL0NvbnZlcnQuaD4KKyNpbmNsdWRlIDxndWkvYnVmZmVycXVldWUvMS4wL0gyQkdyYXBoaWNCdWZmZXJQcm9kdWNlci5oPgorI2luY2x1ZGUgPGN1dGlscy9uYXRpdmVfaGFuZGxlLmg+CisjaW5jbHVkZSA8bWVkaWF1dGlscy9BSW1hZ2VSZWFkZXJVdGlscy5oPgorCituYW1lc3BhY2UgYW5kcm9pZCB7CituYW1lc3BhY2UgaGFyZHdhcmUgeworbmFtZXNwYWNlIGNhbWVyYXNlcnZpY2UgeworbmFtZXNwYWNlIHV0aWxzIHsKK25hbWVzcGFjZSBjb252ZXJzaW9uIHsKKwordXNpbmcgaGFyZHdhcmU6OmdyYXBoaWNzOjpidWZmZXJxdWV1ZTo6VjFfMDo6dXRpbHM6OkgyQkdyYXBoaWNCdWZmZXJQcm9kdWNlcjsKK3VzaW5nIGFpbWc6OkFJbWFnZVJlYWRlcl9nZXRIR0JQRnJvbUhhbmRsZTsKKworLy8gTm90ZTogZXhpc3RpbmcgZGF0YSBpbiBkc3Qgd2lsbCBiZSBnb25lLiBDYWxsZXIgc3RpbGwgb3ducyB0aGUgbWVtb3J5IG9mIHNyYwordm9pZCBjb252ZXJ0VG9IaWRsKGNvbnN0IGNhbWVyYV9tZXRhZGF0YV90ICpzcmMsIEhDYW1lcmFNZXRhZGF0YSogZHN0KSB7CisgICAgaWYgKHNyYyA9PSBudWxscHRyKSB7CisgICAgICAgIEFMT0dXKCIlczphdHRlbXB0IHRvIGNvbnZlcnQgZW1wdHkgbWV0YWRhdGEgdG8gSGlkbCIsIF9fRlVOQ1RJT05fXyk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgc2l6ZV90IHNpemUgPSBnZXRfY2FtZXJhX21ldGFkYXRhX3NpemUoc3JjKTsKKyAgICBkc3QtPnNldFRvRXh0ZXJuYWwoKHVpbnQ4X3QgKikgc3JjLCBzaXplKTsKKyAgICByZXR1cm47Cit9CisKK2ludDMyX3QgY29udmVydEZyb21IaWRsKEhTdHJlYW1Db25maWd1cmF0aW9uTW9kZSBzdHJlYW1Db25maWd1cmF0aW9uTW9kZSkgeworICAgIHN3aXRjaCAoc3RyZWFtQ29uZmlndXJhdGlvbk1vZGUpIHsKKyAgICAgICAgY2FzZSBIU3RyZWFtQ29uZmlndXJhdGlvbk1vZGU6OkNPTlNUUkFJTkVEX0hJR0hfU1BFRURfTU9ERToKKyAgICAgICAgICAgIHJldHVybiBjYW1lcmEyOjpJQ2FtZXJhRGV2aWNlVXNlcjo6Q09OU1RSQUlORURfSElHSF9TUEVFRF9NT0RFOworICAgICAgICBjYXNlIEhTdHJlYW1Db25maWd1cmF0aW9uTW9kZTo6Tk9STUFMX01PREU6CisgICAgICAgICAgICByZXR1cm4gY2FtZXJhMjo6SUNhbWVyYURldmljZVVzZXI6Ok5PUk1BTF9NT0RFOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgLy8gVE9ETzogRml4IHRoaXMKKyAgICAgICAgICAgIHJldHVybiBjYW1lcmEyOjpJQ2FtZXJhRGV2aWNlVXNlcjo6VkVORE9SX01PREVfU1RBUlQ7CisgICAgfQorfQorCitpbnQzMl90IGNvbnZlcnRGcm9tSGlkbChIVGVtcGxhdGVJZCB0ZW1wbGF0ZUlkKSB7CisgICAgc3dpdGNoKHRlbXBsYXRlSWQpIHsKKyAgICAgICAgY2FzZSBIVGVtcGxhdGVJZDo6UFJFVklFVzoKKyAgICAgICAgICAgIHJldHVybiBjYW1lcmEyOjpJQ2FtZXJhRGV2aWNlVXNlcjo6VEVNUExBVEVfUFJFVklFVzsKKyAgICAgICAgY2FzZSBIVGVtcGxhdGVJZDo6U1RJTExfQ0FQVFVSRToKKyAgICAgICAgICAgIHJldHVybiBjYW1lcmEyOjpJQ2FtZXJhRGV2aWNlVXNlcjo6VEVNUExBVEVfU1RJTExfQ0FQVFVSRTsKKyAgICAgICAgY2FzZSBIVGVtcGxhdGVJZDo6UkVDT1JEOgorICAgICAgICAgICAgcmV0dXJuIGNhbWVyYTI6OklDYW1lcmFEZXZpY2VVc2VyOjpURU1QTEFURV9SRUNPUkQ7CisgICAgICAgIGNhc2UgSFRlbXBsYXRlSWQ6OlZJREVPX1NOQVBTSE9UOgorICAgICAgICAgICAgcmV0dXJuIGNhbWVyYTI6OklDYW1lcmFEZXZpY2VVc2VyOjpURU1QTEFURV9WSURFT19TTkFQU0hPVDsKKyAgICAgICAgY2FzZSBIVGVtcGxhdGVJZDo6WkVST19TSFVUVEVSX0xBRzoKKyAgICAgICAgICAgIHJldHVybiBjYW1lcmEyOjpJQ2FtZXJhRGV2aWNlVXNlcjo6VEVNUExBVEVfWkVST19TSFVUVEVSX0xBRzsKKyAgICAgICAgY2FzZSBIVGVtcGxhdGVJZDo6TUFOVUFMOgorICAgICAgICAgICAgcmV0dXJuIGNhbWVyYTI6OklDYW1lcmFEZXZpY2VVc2VyOjpURU1QTEFURV9NQU5VQUw7CisgICAgfQorfQorCitpbnQgY29udmVydEZyb21IaWRsKEhPdXRwdXRDb25maWd1cmF0aW9uOjpSb3RhdGlvbiByb3RhdGlvbikgeworICAgIHN3aXRjaChyb3RhdGlvbikgeworICAgICAgICBjYXNlIEhPdXRwdXRDb25maWd1cmF0aW9uOjpSb3RhdGlvbjo6UjA6CisgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgY2FzZSBIT3V0cHV0Q29uZmlndXJhdGlvbjo6Um90YXRpb246OlI5MDoKKyAgICAgICAgICAgIHJldHVybiAxOworICAgICAgICBjYXNlIEhPdXRwdXRDb25maWd1cmF0aW9uOjpSb3RhdGlvbjo6UjE4MDoKKyAgICAgICAgICAgIHJldHVybiAyOworICAgICAgICBjYXNlIEhPdXRwdXRDb25maWd1cmF0aW9uOjpSb3RhdGlvbjo6UjI3MDoKKyAgICAgICAgICAgIHJldHVybiAzOworICAgIH0KK30KKworaGFyZHdhcmU6OmNhbWVyYTI6OnBhcmFtczo6T3V0cHV0Q29uZmlndXJhdGlvbiBjb252ZXJ0RnJvbUhpZGwoCisgICAgY29uc3QgSE91dHB1dENvbmZpZ3VyYXRpb24gJmhPdXRwdXRDb25maWd1cmF0aW9uKSB7CisgICAgc3RkOjp2ZWN0b3I8c3A8SUdyYXBoaWNCdWZmZXJQcm9kdWNlcj4+IGlHQlBzOworICAgIGF1dG8gJndpbmRvd0hhbmRsZXMgPSBoT3V0cHV0Q29uZmlndXJhdGlvbi53aW5kb3dIYW5kbGVzOworICAgIGlHQlBzLnJlc2VydmUod2luZG93SGFuZGxlcy5zaXplKCkpOworICAgIGZvciAoYXV0byAmaGFuZGxlIDogd2luZG93SGFuZGxlcykgeworICAgICAgICBpR0JQcy5wdXNoX2JhY2sobmV3IEgyQkdyYXBoaWNCdWZmZXJQcm9kdWNlcihBSW1hZ2VSZWFkZXJfZ2V0SEdCUEZyb21IYW5kbGUoaGFuZGxlKSkpOworICAgIH0KKyAgICBoYXJkd2FyZTo6Y2FtZXJhMjo6cGFyYW1zOjpPdXRwdXRDb25maWd1cmF0aW9uIG91dHB1dENvbmZpZ3VyYXRpb24oCisgICAgICAgIGlHQlBzLCBjb252ZXJ0RnJvbUhpZGwoaE91dHB1dENvbmZpZ3VyYXRpb24ucm90YXRpb24pLAorICAgICAgICBoT3V0cHV0Q29uZmlndXJhdGlvbi53aW5kb3dHcm91cElkLCBPdXRwdXRDb25maWd1cmF0aW9uOjpTVVJGQUNFX1RZUEVfVU5LTk9XTiwgMCwgMCwKKyAgICAgICAgKHdpbmRvd0hhbmRsZXMuc2l6ZSgpID4gMSkpOworICAgIHJldHVybiBvdXRwdXRDb25maWd1cmF0aW9uOworfQorCisvLyBUaGUgY2FtZXJhIG1ldGFkYXRhIGhlcmUgaXMgY2xvbmVkLiBTaW5jZSB3ZSdyZSByZWFkaW5nIG1ldGFkYXRhIG92ZXIKKy8vIGh3YmluZGVyIHdlIHdvdWxkIG5lZWQgdG8gY2xvbmUgaXQgaW4gb3JkZXIgdG8gYXZvaWQgYWxpZ21lbnQgaXNzdWVzLgorYm9vbCBjb252ZXJ0RnJvbUhpZGwoY29uc3QgSENhbWVyYU1ldGFkYXRhICZzcmMsIENhbWVyYU1ldGFkYXRhICpkc3QpIHsKKyAgICBjb25zdCBjYW1lcmFfbWV0YWRhdGFfdCAqYnVmZmVyID0gcmVpbnRlcnByZXRfY2FzdDxjb25zdCBjYW1lcmFfbWV0YWRhdGFfdCo+KHNyYy5kYXRhKCkpOworICAgIHNpemVfdCBleHBlY3RlZFNpemUgPSBzcmMuc2l6ZSgpOworICAgIGludCByZXMgPSB2YWxpZGF0ZV9jYW1lcmFfbWV0YWRhdGFfc3RydWN0dXJlKGJ1ZmZlciwgJmV4cGVjdGVkU2l6ZSk7CisgICAgaWYgKHJlcyA9PSBPSyB8fCByZXMgPT0gQ0FNRVJBX01FVEFEQVRBX1ZBTElEQVRJT05fU0hJRlRFRCkgeworICAgICAgICAqZHN0ID0gYnVmZmVyOworICAgIH0gZWxzZSB7CisgICAgICAgIEFMT0dFKCIlczogTWFsZm9ybWVkIGNhbWVyYSBtZXRhZGF0YSByZWNlaXZlZCBmcm9tIEhBTCIsIF9fRlVOQ1RJT05fXyk7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgICAgcmV0dXJuIHRydWU7Cit9CisKK0hDYW1lcmFEZXZpY2VTdGF0dXMgY29udmVydFRvSGlkbENhbWVyYURldmljZVN0YXR1cyhpbnQzMl90IHN0YXR1cykgeworICAgIEhDYW1lcmFEZXZpY2VTdGF0dXMgZGV2aWNlU3RhdHVzID0gSENhbWVyYURldmljZVN0YXR1czo6U1RBVFVTX1VOS05PV047CisgICAgc3dpdGNoKHN0YXR1cykgeworICAgICAgICBjYXNlIGhhcmR3YXJlOjpJQ2FtZXJhU2VydmljZUxpc3RlbmVyOjpTVEFUVVNfTk9UX1BSRVNFTlQ6CisgICAgICAgICAgICBkZXZpY2VTdGF0dXMgPSBIQ2FtZXJhRGV2aWNlU3RhdHVzOjpTVEFUVVNfTk9UX1BSRVNFTlQ7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBoYXJkd2FyZTo6SUNhbWVyYVNlcnZpY2VMaXN0ZW5lcjo6U1RBVFVTX1BSRVNFTlQ6CisgICAgICAgICAgICBkZXZpY2VTdGF0dXMgPSBIQ2FtZXJhRGV2aWNlU3RhdHVzOjpTVEFUVVNfUFJFU0VOVDsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIGhhcmR3YXJlOjpJQ2FtZXJhU2VydmljZUxpc3RlbmVyOjpTVEFUVVNfRU5VTUVSQVRJTkc6CisgICAgICAgICAgICBkZXZpY2VTdGF0dXMgPSBIQ2FtZXJhRGV2aWNlU3RhdHVzOjpTVEFUVVNfRU5VTUVSQVRJTkc7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBoYXJkd2FyZTo6SUNhbWVyYVNlcnZpY2VMaXN0ZW5lcjo6U1RBVFVTX05PVF9BVkFJTEFCTEU6CisgICAgICAgICAgICBkZXZpY2VTdGF0dXMgPSBIQ2FtZXJhRGV2aWNlU3RhdHVzOjpTVEFUVVNfTk9UX0FWQUlMQUJMRTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgYnJlYWs7CisgICAgfQorICAgIHJldHVybiBkZXZpY2VTdGF0dXM7Cit9CisKK0hDYXB0dXJlUmVzdWx0RXh0cmFzIGNvbnZlcnRUb0hpZGwoY29uc3QgQ2FwdHVyZVJlc3VsdEV4dHJhcyAmY2FwdHVyZVJlc3VsdEV4dHJhcykgeworICAgIEhDYXB0dXJlUmVzdWx0RXh0cmFzIGhDYXB0dXJlUmVzdWx0RXh0cmFzOworICAgIGhDYXB0dXJlUmVzdWx0RXh0cmFzLnJlcXVlc3RJZCA9IGNhcHR1cmVSZXN1bHRFeHRyYXMucmVxdWVzdElkOworICAgIGhDYXB0dXJlUmVzdWx0RXh0cmFzLmJ1cnN0SWQgPSBjYXB0dXJlUmVzdWx0RXh0cmFzLmJ1cnN0SWQ7CisgICAgaENhcHR1cmVSZXN1bHRFeHRyYXMuZnJhbWVOdW1iZXIgPSBjYXB0dXJlUmVzdWx0RXh0cmFzLmZyYW1lTnVtYmVyOworICAgIGhDYXB0dXJlUmVzdWx0RXh0cmFzLnBhcnRpYWxSZXN1bHRDb3VudCA9IGNhcHR1cmVSZXN1bHRFeHRyYXMucGFydGlhbFJlc3VsdENvdW50OworICAgIGhDYXB0dXJlUmVzdWx0RXh0cmFzLmVycm9yU3RyZWFtSWQgPSBjYXB0dXJlUmVzdWx0RXh0cmFzLmVycm9yU3RyZWFtSWQ7CisgICAgcmV0dXJuIGhDYXB0dXJlUmVzdWx0RXh0cmFzOworfQorCitIRXJyb3JDb2RlIGNvbnZlcnRUb0hpZGwoaW50MzJfdCBlcnJvckNvZGUpIHsKKyAgICBzd2l0Y2goZXJyb3JDb2RlKSB7CisgICAgICAgIGNhc2UgY2FtZXJhMjo6SUNhbWVyYURldmljZUNhbGxiYWNrczo6RVJST1JfQ0FNRVJBX0RJU0NPTk5FQ1RFRDoKKyAgICAgICAgICAgIHJldHVybiBIRXJyb3JDb2RlOjpDQU1FUkFfRElTQ09OTkVDVEVEOworICAgICAgICBjYXNlIGNhbWVyYTI6OklDYW1lcmFEZXZpY2VDYWxsYmFja3M6OkVSUk9SX0NBTUVSQV9ERVZJQ0UgOgorICAgICAgICAgICAgcmV0dXJuIEhFcnJvckNvZGU6OkNBTUVSQV9ERVZJQ0U7CisgICAgICAgIGNhc2UgY2FtZXJhMjo6SUNhbWVyYURldmljZUNhbGxiYWNrczo6RVJST1JfQ0FNRVJBX1NFUlZJQ0U6CisgICAgICAgICAgICByZXR1cm4gSEVycm9yQ29kZTo6Q0FNRVJBX1NFUlZJQ0U7CisgICAgICAgIGNhc2UgY2FtZXJhMjo6SUNhbWVyYURldmljZUNhbGxiYWNrczo6RVJST1JfQ0FNRVJBX1JFUVVFU1Q6CisgICAgICAgICAgICByZXR1cm4gSEVycm9yQ29kZTo6Q0FNRVJBX1JFUVVFU1Q7CisgICAgICAgIGNhc2UgY2FtZXJhMjo6SUNhbWVyYURldmljZUNhbGxiYWNrczo6RVJST1JfQ0FNRVJBX1JFU1VMVDoKKyAgICAgICAgICAgIHJldHVybiBIRXJyb3JDb2RlOjpDQU1FUkFfUkVTVUxUOworICAgICAgICBjYXNlIGNhbWVyYTI6OklDYW1lcmFEZXZpY2VDYWxsYmFja3M6OkVSUk9SX0NBTUVSQV9CVUZGRVI6CisgICAgICAgICAgICByZXR1cm4gSEVycm9yQ29kZTo6Q0FNRVJBX0JVRkZFUjsKKyAgICAgICAgY2FzZSBjYW1lcmEyOjpJQ2FtZXJhRGV2aWNlQ2FsbGJhY2tzOjpFUlJPUl9DQU1FUkFfRElTQUJMRUQ6CisgICAgICAgICAgICByZXR1cm4gSEVycm9yQ29kZTo6Q0FNRVJBX0RJU0FCTEVEOworICAgICAgICBjYXNlIGNhbWVyYTI6OklDYW1lcmFEZXZpY2VDYWxsYmFja3M6OkVSUk9SX0NBTUVSQV9JTlZBTElEX0VSUk9SOgorICAgICAgICAgICAgcmV0dXJuIEhFcnJvckNvZGU6OkNBTUVSQV9JTlZBTElEX0VSUk9SOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgcmV0dXJuIEhFcnJvckNvZGU6OkNBTUVSQV9VTktOT1dOX0VSUk9SOworICAgIH0KK30KKwordm9pZCBjb252ZXJ0VG9IaWRsKGNvbnN0IHN0ZDo6dmVjdG9yPGhhcmR3YXJlOjpDYW1lcmFTdGF0dXM+ICZzcmMsCisgICAgICAgICAgICAgICAgICAgaGlkbF92ZWM8SENhbWVyYVN0YXR1c0FuZElkPiogZHN0KSB7CisgICAgZHN0LT5yZXNpemUoc3JjLnNpemUoKSk7CisgICAgc2l6ZV90IGkgPSAwOworICAgIGZvciAoYXV0byAmc3RhdHVzQW5kSWQgOiBzcmMpIHsKKyAgICAgICAgYXV0byAmYSA9ICgqZHN0KVtpKytdOworICAgICAgICBhLmNhbWVyYUlkID0gc3RhdHVzQW5kSWQuY2FtZXJhSWQuY19zdHIoKTsKKyAgICAgICAgYS5kZXZpY2VTdGF0dXMgPSBjb252ZXJ0VG9IaWRsQ2FtZXJhRGV2aWNlU3RhdHVzKHN0YXR1c0FuZElkLnN0YXR1cyk7CisgICAgfQorICAgIHJldHVybjsKK30KKwordm9pZCBjb252ZXJ0VG9IaWRsKAorICAgIGNvbnN0IGhhcmR3YXJlOjpjYW1lcmEyOjp1dGlsczo6U3VibWl0SW5mbyAmc3VibWl0SW5mbywKKyAgICBmcmFtZXdvcmtzOjpjYW1lcmFzZXJ2aWNlOjpkZXZpY2U6OlYyXzA6OlN1Ym1pdEluZm8gKmhTdWJtaXRJbmZvKSB7CisgICAgaFN1Ym1pdEluZm8tPnJlcXVlc3RJZCA9IHN1Ym1pdEluZm8ubVJlcXVlc3RJZDsKKyAgICBoU3VibWl0SW5mby0+bGFzdEZyYW1lTnVtYmVyID0gc3VibWl0SW5mby5tTGFzdEZyYW1lTnVtYmVyOworfQorCitIU3RhdHVzIEIySFN0YXR1cyhjb25zdCBiaW5kZXI6OlN0YXR1cyAmYlN0YXR1cykgeworICAgIEhTdGF0dXMgc3RhdHVzID0gSFN0YXR1czo6Tk9fRVJST1I7CisgICAgaWYgKGJTdGF0dXMuaXNPaygpKSB7CisgICAgICAgIC8vIE5PIEVycm9yIGhlcmUKKyAgICAgICAgcmV0dXJuIHN0YXR1czsKKyAgICB9CisgICAgc3dpdGNoKGJTdGF0dXMuc2VydmljZVNwZWNpZmljRXJyb3JDb2RlKCkpIHsKKyAgICAgICAgY2FzZSBoYXJkd2FyZTo6SUNhbWVyYVNlcnZpY2U6OkVSUk9SX0RJU0NPTk5FQ1RFRDoKKyAgICAgICAgICAgIHN0YXR1cyA9IEhTdGF0dXM6OkRJU0NPTk5FQ1RFRDsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIGhhcmR3YXJlOjpJQ2FtZXJhU2VydmljZTo6RVJST1JfQ0FNRVJBX0lOX1VTRToKKyAgICAgICAgICAgIHN0YXR1cyA9IEhTdGF0dXM6OkNBTUVSQV9JTl9VU0U7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBoYXJkd2FyZTo6SUNhbWVyYVNlcnZpY2U6OkVSUk9SX01BWF9DQU1FUkFTX0lOX1VTRToKKyAgICAgICAgICAgIHN0YXR1cyA9IEhTdGF0dXM6Ok1BWF9DQU1FUkFTX0lOX1VTRTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIGhhcmR3YXJlOjpJQ2FtZXJhU2VydmljZTo6RVJST1JfSUxMRUdBTF9BUkdVTUVOVDoKKyAgICAgICAgICAgIHN0YXR1cyA9IEhTdGF0dXM6OklMTEVHQUxfQVJHVU1FTlQ7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBoYXJkd2FyZTo6SUNhbWVyYVNlcnZpY2U6OkVSUk9SX0RFUFJFQ0FURURfSEFMOgorICAgICAgICAgICAgLy8gU2hvdWxkIG5vdCByZWFjaCBoZXJlIHNpbmNlIHdlIGZpbHRlcmVkIGxlZ2FjeSBIQUxzIGVhcmxpZXIKKyAgICAgICAgICAgIHN0YXR1cyA9IEhTdGF0dXM6OkRFUFJFQ0FURURfSEFMOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgaGFyZHdhcmU6OklDYW1lcmFTZXJ2aWNlOjpFUlJPUl9ESVNBQkxFRDoKKyAgICAgICAgICAgIHN0YXR1cyA9IEhTdGF0dXM6OkRJU0FCTEVEOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgaGFyZHdhcmU6OklDYW1lcmFTZXJ2aWNlOjpFUlJPUl9QRVJNSVNTSU9OX0RFTklFRDoKKyAgICAgICAgICAgIHN0YXR1cyA9IEhTdGF0dXM6OlBFUk1JU1NJT05fREVOSUVEOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgaGFyZHdhcmU6OklDYW1lcmFTZXJ2aWNlOjpFUlJPUl9JTlZBTElEX09QRVJBVElPTjoKKyAgICAgICAgICAgIHN0YXR1cyA9IEhTdGF0dXM6OklOVkFMSURfT1BFUkFUSU9OOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBzdGF0dXMgPSBIU3RhdHVzOjpVTktOT1dOX0VSUk9SOworICAgICAgICAgICAgYnJlYWs7CisgICAgfQorICByZXR1cm4gc3RhdHVzOworfQorCitIUGh5c2ljYWxDYXB0dXJlUmVzdWx0SW5mbyBjb252ZXJ0VG9IaWRsKAorICAgIGNvbnN0IFBoeXNpY2FsQ2FwdHVyZVJlc3VsdEluZm8gJnBoeXNpY2FsQ2FwdHVyZVJlc3VsdEluZm8sCisgICAgc3RkOjpzaGFyZWRfcHRyPENhcHR1cmVSZXN1bHRNZXRhZGF0YVF1ZXVlPiAmY2FwdHVyZVJlc3VsdE1ldGFkYXRhUXVldWUpIHsKKyAgICBIUGh5c2ljYWxDYXB0dXJlUmVzdWx0SW5mbyBoUGh5c2ljYWxDYXB0dXJlUmVzdWx0SW5mbzsKKyAgICBoUGh5c2ljYWxDYXB0dXJlUmVzdWx0SW5mby5waHlzaWNhbENhbWVyYUlkID0KKyAgICAgICAgU3RyaW5nOChwaHlzaWNhbENhcHR1cmVSZXN1bHRJbmZvLm1QaHlzaWNhbENhbWVyYUlkKS5zdHJpbmcoKTsKKyAgICBjb25zdCBjYW1lcmFfbWV0YWRhdGFfdCAqcmF3TWV0YWRhdGEgPQorICAgICAgICBwaHlzaWNhbENhcHR1cmVSZXN1bHRJbmZvLm1QaHlzaWNhbENhbWVyYU1ldGFkYXRhLmdldEFuZExvY2soKTsKKyAgICAvLyBUcnkgdXNpbmcgZm1xIGF0IGZpcnN0LgorICAgIHNpemVfdCBtZXRhZGF0YV9zaXplID0gZ2V0X2NhbWVyYV9tZXRhZGF0YV9zaXplKHJhd01ldGFkYXRhKTsKKyAgICBpZiAoKG1ldGFkYXRhX3NpemUgPiAwKSAmJiAoY2FwdHVyZVJlc3VsdE1ldGFkYXRhUXVldWUtPmF2YWlsYWJsZVRvV3JpdGUoKSA+IDApKSB7CisgICAgICAgIGlmIChjYXB0dXJlUmVzdWx0TWV0YWRhdGFRdWV1ZS0+d3JpdGUoKHVpbnQ4X3QgKilyYXdNZXRhZGF0YSwgbWV0YWRhdGFfc2l6ZSkpIHsKKyAgICAgICAgICAgIGhQaHlzaWNhbENhcHR1cmVSZXN1bHRJbmZvLnBoeXNpY2FsQ2FtZXJhTWV0YWRhdGEuZm1xTWV0YWRhdGFTaXplKG1ldGFkYXRhX3NpemUpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgQUxPR1coIiVzIENvdWxkbid0IHVzZSBmbXEsIGZhbGxpbmcgYmFjayB0byBod2JpbmRlciIsIF9fRlVOQ1RJT05fXyk7CisgICAgICAgICAgICBIQ2FtZXJhTWV0YWRhdGEgbWV0YWRhdGE7CisgICAgICAgICAgICBjb252ZXJ0VG9IaWRsKHJhd01ldGFkYXRhLCAmbWV0YWRhdGEpOworICAgICAgICAgICAgaFBoeXNpY2FsQ2FwdHVyZVJlc3VsdEluZm8ucGh5c2ljYWxDYW1lcmFNZXRhZGF0YS5tZXRhZGF0YShzdGQ6Om1vdmUobWV0YWRhdGEpKTsKKyAgICAgICAgfQorICAgIH0KKyAgICBwaHlzaWNhbENhcHR1cmVSZXN1bHRJbmZvLm1QaHlzaWNhbENhbWVyYU1ldGFkYXRhLnVubG9jayhyYXdNZXRhZGF0YSk7CisgICAgcmV0dXJuIGhQaHlzaWNhbENhcHR1cmVSZXN1bHRJbmZvOworfQorCitoaWRsX3ZlYzxIUGh5c2ljYWxDYXB0dXJlUmVzdWx0SW5mbz4gY29udmVydFRvSGlkbCgKKyAgICBjb25zdCBzdGQ6OnZlY3RvcjxQaHlzaWNhbENhcHR1cmVSZXN1bHRJbmZvPiAmcGh5c2ljYWxDYXB0dXJlUmVzdWx0SW5mb3MsCisgICAgc3RkOjpzaGFyZWRfcHRyPENhcHR1cmVSZXN1bHRNZXRhZGF0YVF1ZXVlPiAmY2FwdHVyZVJlc3VsdE1ldGFkYXRhUXVldWUpIHsKKyAgICBoaWRsX3ZlYzxIUGh5c2ljYWxDYXB0dXJlUmVzdWx0SW5mbz4gaFBoeXNpY2FsQ2FwdHVyZVJlc3VsdEluZm9zOworICAgIGhQaHlzaWNhbENhcHR1cmVSZXN1bHRJbmZvcy5yZXNpemUocGh5c2ljYWxDYXB0dXJlUmVzdWx0SW5mb3Muc2l6ZSgpKTsKKyAgICBzaXplX3QgaSA9IDA7CisgICAgZm9yIChhdXRvICZwaHlzaWNhbENhcHR1cmVSZXN1bHRJbmZvIDogcGh5c2ljYWxDYXB0dXJlUmVzdWx0SW5mb3MpIHsKKyAgICAgICAgaFBoeXNpY2FsQ2FwdHVyZVJlc3VsdEluZm9zW2krK10gPSBjb252ZXJ0VG9IaWRsKHBoeXNpY2FsQ2FwdHVyZVJlc3VsdEluZm8sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXB0dXJlUmVzdWx0TWV0YWRhdGFRdWV1ZSk7CisgICAgfQorICAgIHJldHVybiBoUGh5c2ljYWxDYXB0dXJlUmVzdWx0SW5mb3M7Cit9CisKK30gLy9jb252ZXJzaW9uCit9IC8vIHV0aWxzCit9IC8vY2FtZXJhc2VydmljZQorfSAvLyBoYXJkd2FyZQorfSAvLyBhbmRyb2lkCmRpZmYgLS1naXQgYS9zZXJ2aWNlcy9jYW1lcmEvbGliY2FtZXJhc2VydmljZS9oaWRsL0NvbnZlcnQuaCBiL3NlcnZpY2VzL2NhbWVyYS9saWJjYW1lcmFzZXJ2aWNlL2hpZGwvQ29udmVydC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgyOTM3YTMKLS0tIC9kZXYvbnVsbAorKysgYi9zZXJ2aWNlcy9jYW1lcmEvbGliY2FtZXJhc2VydmljZS9oaWRsL0NvbnZlcnQuaApAQCAtMCwwICsxLDk3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE4IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KKworI2lmbmRlZiBDQU1FUkFTRVJWRVJfQ09OVkVSVF9ISURMCisjZGVmaW5lIENBTUVSQVNFUlZFUl9DT05WRVJUX0hJREwKKworI2luY2x1ZGUgPHZlY3Rvcj4KKworI2luY2x1ZGUgPGFuZHJvaWQvZnJhbWV3b3Jrcy9jYW1lcmFzZXJ2aWNlL3NlcnZpY2UvMi4wL0lDYW1lcmFTZXJ2aWNlLmg+CisjaW5jbHVkZSA8YW5kcm9pZC9mcmFtZXdvcmtzL2NhbWVyYXNlcnZpY2UvZGV2aWNlLzIuMC9JQ2FtZXJhRGV2aWNlVXNlci5oPgorI2luY2x1ZGUgPGFuZHJvaWQvZnJhbWV3b3Jrcy9jYW1lcmFzZXJ2aWNlL2NvbW1vbi8yLjAvdHlwZXMuaD4KKyNpbmNsdWRlIDxhbmRyb2lkL2ZyYW1ld29ya3MvY2FtZXJhc2VydmljZS9zZXJ2aWNlLzIuMC90eXBlcy5oPgorI2luY2x1ZGUgPGFuZHJvaWQvZnJhbWV3b3Jrcy9jYW1lcmFzZXJ2aWNlL2RldmljZS8yLjAvdHlwZXMuaD4KKyNpbmNsdWRlIDxhbmRyb2lkL2hhcmR3YXJlL2NhbWVyYS9jb21tb24vMS4wL3R5cGVzLmg+CisjaW5jbHVkZSA8YW5kcm9pZC9oYXJkd2FyZS9jYW1lcmEyL0lDYW1lcmFEZXZpY2VVc2VyLmg+CisjaW5jbHVkZSA8YW5kcm9pZC9oYXJkd2FyZS9ncmFwaGljcy9idWZmZXJxdWV1ZS8xLjAvSUdyYXBoaWNCdWZmZXJQcm9kdWNlci5oPgorI2luY2x1ZGUgPGFuZHJvaWQvaGFyZHdhcmUvSUNhbWVyYVNlcnZpY2UuaD4KKyNpbmNsdWRlIDxmbXEvTWVzc2FnZVF1ZXVlLmg+CisjaW5jbHVkZSA8aGFyZHdhcmUvY2FtZXJhLmg+CisjaW5jbHVkZSA8aGlkbC9NUURlc2NyaXB0b3IuaD4KKworbmFtZXNwYWNlIGFuZHJvaWQgeworbmFtZXNwYWNlIGhhcmR3YXJlIHsKK25hbWVzcGFjZSBjYW1lcmFzZXJ2aWNlIHsKK25hbWVzcGFjZSB1dGlscyB7CituYW1lc3BhY2UgY29udmVyc2lvbiB7CisKK3VzaW5nIGhhcmR3YXJlOjpjYW1lcmEyOjppbXBsOjpDYXB0dXJlUmVzdWx0RXh0cmFzOwordXNpbmcgaGFyZHdhcmU6OmNhbWVyYTI6OmltcGw6OlBoeXNpY2FsQ2FwdHVyZVJlc3VsdEluZm87CisKK3VzaW5nIENhcHR1cmVSZXN1bHRNZXRhZGF0YVF1ZXVlID0gTWVzc2FnZVF1ZXVlPHVpbnQ4X3QsIGtTeW5jaHJvbml6ZWRSZWFkV3JpdGU+OwordXNpbmcgSENhbWVyYU1ldGFkYXRhID0gZnJhbWV3b3Jrczo6Y2FtZXJhc2VydmljZTo6c2VydmljZTo6VjJfMDo6Q2FtZXJhTWV0YWRhdGE7Cit1c2luZyBIQ2FtZXJhRGV2aWNlU3RhdHVzID0gZnJhbWV3b3Jrczo6Y2FtZXJhc2VydmljZTo6c2VydmljZTo6VjJfMDo6Q2FtZXJhRGV2aWNlU3RhdHVzOwordXNpbmcgSENhbWVyYVN0YXR1c0FuZElkID0gZnJhbWV3b3Jrczo6Y2FtZXJhc2VydmljZTo6c2VydmljZTo6VjJfMDo6Q2FtZXJhU3RhdHVzQW5kSWQ7Cit1c2luZyBIQ2FtZXJhRGV2aWNlVXNlciA9IGZyYW1ld29ya3M6OmNhbWVyYXNlcnZpY2U6OmRldmljZTo6VjJfMDo6SUNhbWVyYURldmljZVVzZXI7Cit1c2luZyBIQ2FwdHVyZVJlc3VsdEV4dHJhcyA9IGZyYW1ld29ya3M6OmNhbWVyYXNlcnZpY2U6OmRldmljZTo6VjJfMDo6Q2FwdHVyZVJlc3VsdEV4dHJhczsKK3VzaW5nIEhDYXB0dXJlUmVxdWVzdCA9IGZyYW1ld29ya3M6OmNhbWVyYXNlcnZpY2U6OmRldmljZTo6VjJfMDo6Q2FwdHVyZVJlcXVlc3Q7Cit1c2luZyBIRXJyb3JDb2RlID0gZnJhbWV3b3Jrczo6Y2FtZXJhc2VydmljZTo6ZGV2aWNlOjpWMl8wOjpFcnJvckNvZGU7Cit1c2luZyBIR3JhcGhpY0J1ZmZlclByb2R1Y2VyID0gaGFyZHdhcmU6OmdyYXBoaWNzOjpidWZmZXJxdWV1ZTo6VjFfMDo6SUdyYXBoaWNCdWZmZXJQcm9kdWNlcjsKK3VzaW5nIEhPdXRwdXRDb25maWd1cmF0aW9uID0gZnJhbWV3b3Jrczo6Y2FtZXJhc2VydmljZTo6ZGV2aWNlOjpWMl8wOjpPdXRwdXRDb25maWd1cmF0aW9uOwordXNpbmcgSFBoeXNpY2FsQ2FtZXJhU2V0dGluZ3MgPSBmcmFtZXdvcmtzOjpjYW1lcmFzZXJ2aWNlOjpkZXZpY2U6OlYyXzA6OlBoeXNpY2FsQ2FtZXJhU2V0dGluZ3M7Cit1c2luZyBIUGh5c2ljYWxDYXB0dXJlUmVzdWx0SW5mbyA9IGZyYW1ld29ya3M6OmNhbWVyYXNlcnZpY2U6OmRldmljZTo6VjJfMDo6UGh5c2ljYWxDYXB0dXJlUmVzdWx0SW5mbzsKK3VzaW5nIEhTdWJtaXRJbmZvID0gZnJhbWV3b3Jrczo6Y2FtZXJhc2VydmljZTo6ZGV2aWNlOjpWMl8wOjpTdWJtaXRJbmZvOwordXNpbmcgSFN0YXR1cyA9IGZyYW1ld29ya3M6OmNhbWVyYXNlcnZpY2U6OmNvbW1vbjo6VjJfMDo6U3RhdHVzOwordXNpbmcgSFN0cmVhbUNvbmZpZ3VyYXRpb25Nb2RlID0gZnJhbWV3b3Jrczo6Y2FtZXJhc2VydmljZTo6ZGV2aWNlOjpWMl8wOjpTdHJlYW1Db25maWd1cmF0aW9uTW9kZTsKK3VzaW5nIEhUZW1wbGF0ZUlkID0gZnJhbWV3b3Jrczo6Y2FtZXJhc2VydmljZTo6ZGV2aWNlOjpWMl8wOjpUZW1wbGF0ZUlkOworCisvLyBOb3RlOiBleGlzdGluZyBkYXRhIGluIGRzdCB3aWxsIGJlIGdvbmUuIENhbGxlciBzdGlsbCBvd25zIHRoZSBtZW1vcnkgb2Ygc3JjCit2b2lkIGNvbnZlcnRUb0hpZGwoY29uc3QgY2FtZXJhX21ldGFkYXRhX3QgKnNyYywgSENhbWVyYU1ldGFkYXRhKiBkc3QpOworCitpbnQzMl90IGNvbnZlcnRGcm9tSGlkbChIU3RyZWFtQ29uZmlndXJhdGlvbk1vZGUgc3RyZWFtQ29uZmlndXJhdGlvbk1vZGUpOworCitpbnQzMl90IGNvbnZlcnRGcm9tSGlkbChIVGVtcGxhdGVJZCB0ZW1wbGF0ZUlkKTsKKworYm9vbCBjb252ZXJ0RnJvbUhpZGwoY29uc3QgSENhbWVyYU1ldGFkYXRhICZzcmMsIENhbWVyYU1ldGFkYXRhICpkc3QpOworCitoYXJkd2FyZTo6Y2FtZXJhMjo6cGFyYW1zOjpPdXRwdXRDb25maWd1cmF0aW9uIGNvbnZlcnRGcm9tSGlkbCgKKyAgICBjb25zdCBIT3V0cHV0Q29uZmlndXJhdGlvbiAmaE91dHB1dENvbmZpZ3VyYXRpb24pOworCitIQ2FtZXJhRGV2aWNlU3RhdHVzIGNvbnZlcnRUb0hpZGxDYW1lcmFEZXZpY2VTdGF0dXMoaW50MzJfdCBzdGF0dXMpOworCit2b2lkIGNvbnZlcnRUb0hpZGwoY29uc3Qgc3RkOjp2ZWN0b3I8aGFyZHdhcmU6OkNhbWVyYVN0YXR1cz4gJnNyYywKKyAgICAgICAgICAgICAgICAgICBoaWRsX3ZlYzxIQ2FtZXJhU3RhdHVzQW5kSWQ+KiBkc3QpOworCit2b2lkIGNvbnZlcnRUb0hpZGwoY29uc3QgaGFyZHdhcmU6OmNhbWVyYTI6OnV0aWxzOjpTdWJtaXRJbmZvICZzdWJtaXRJbmZvLAorICAgICAgICAgICAgICAgICAgIEhTdWJtaXRJbmZvICpoU3VibWl0SW5mbyk7CisKK0hFcnJvckNvZGUgY29udmVydFRvSGlkbChpbnQzMl90IGVycm9yQ29kZSk7CisKK0hDYXB0dXJlUmVzdWx0RXh0cmFzIGNvbnZlcnRUb0hpZGwoY29uc3QgQ2FwdHVyZVJlc3VsdEV4dHJhcyAmY2FwdHVyZVJlc3VsdEV4dHJhcyk7CisKK2hpZGxfdmVjPEhQaHlzaWNhbENhcHR1cmVSZXN1bHRJbmZvPiBjb252ZXJ0VG9IaWRsKAorICAgIGNvbnN0IHN0ZDo6dmVjdG9yPFBoeXNpY2FsQ2FwdHVyZVJlc3VsdEluZm8+ICZwaHlzaWNhbENhcHR1cmVSZXN1bHRJbmZvcywKKyAgICBzdGQ6OnNoYXJlZF9wdHI8Q2FwdHVyZVJlc3VsdE1ldGFkYXRhUXVldWU+ICZjYXB0dXJlUmVzdWx0TWV0YWRhdGFRdWV1ZSk7CisKK0hTdGF0dXMgQjJIU3RhdHVzKGNvbnN0IGJpbmRlcjo6U3RhdHVzICZiU3RhdHVzKTsKKworfSAvLyBjb252ZXJzaW9uCit9IC8vIHV0aWxzCit9IC8vIGNhbWVyYXNlcnZpY2UKK30gLy8gaGFyZHdhcmUKK30gLy9hbmRyb2lkCisKKyNlbmRpZiAvL0NBTUVSQVNFUlZFUl9DT05WRVJUX1RPX0hJREwKZGlmZiAtLWdpdCBhL3NlcnZpY2VzL2NhbWVyYS9saWJjYW1lcmFzZXJ2aWNlL2hpZGwvSGlkbENhbWVyYURldmljZVVzZXIuY3BwIGIvc2VydmljZXMvY2FtZXJhL2xpYmNhbWVyYXNlcnZpY2UvaGlkbC9IaWRsQ2FtZXJhRGV2aWNlVXNlci5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDIyYmE1YQotLS0gL2Rldi9udWxsCisrKyBiL3NlcnZpY2VzL2NhbWVyYS9saWJjYW1lcmFzZXJ2aWNlL2hpZGwvSGlkbENhbWVyYURldmljZVVzZXIuY3BwCkBAIC0wLDAgKzEsMjYzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE4IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KKworI2luY2x1ZGUgPGFuZHJvaWQvaGFyZHdhcmUvY2FtZXJhL2RldmljZS8zLjIvdHlwZXMuaD4KKyNpbmNsdWRlIDxjdXRpbHMvcHJvcGVydGllcy5oPgorI2luY2x1ZGUgPGd1aS9TdXJmYWNlLmg+CisjaW5jbHVkZSA8Z3VpL2J1ZmZlcnF1ZXVlLzEuMC9IMkJHcmFwaGljQnVmZmVyUHJvZHVjZXIuaD4KKworI2luY2x1ZGUgPGhpZGwvQWlkbENhbWVyYURldmljZUNhbGxiYWNrcy5oPgorI2luY2x1ZGUgPGhpZGwvQ29udmVydC5oPgorI2luY2x1ZGUgPGhpZGwvSGlkbENhbWVyYURldmljZVVzZXIuaD4KKyNpbmNsdWRlIDxhbmRyb2lkL2hhcmR3YXJlL2NhbWVyYS9kZXZpY2UvMy4yL3R5cGVzLmg+CisKK25hbWVzcGFjZSBhbmRyb2lkIHsKK25hbWVzcGFjZSBmcmFtZXdvcmtzIHsKK25hbWVzcGFjZSBjYW1lcmFzZXJ2aWNlIHsKK25hbWVzcGFjZSBkZXZpY2UgeworbmFtZXNwYWNlIFYyXzAgeworbmFtZXNwYWNlIGltcGxlbWVudGF0aW9uIHsKKwordXNpbmcgaGFyZHdhcmU6OmNhbWVyYXNlcnZpY2U6OnV0aWxzOjpjb252ZXJzaW9uOjpjb252ZXJ0VG9IaWRsOwordXNpbmcgaGFyZHdhcmU6OmNhbWVyYXNlcnZpY2U6OnV0aWxzOjpjb252ZXJzaW9uOjpjb252ZXJ0RnJvbUhpZGw7Cit1c2luZyBoYXJkd2FyZTo6Y2FtZXJhc2VydmljZTo6dXRpbHM6OmNvbnZlcnNpb246OkIySFN0YXR1czsKKwordXNpbmcgaGFyZHdhcmU6OmdyYXBoaWNzOjpidWZmZXJxdWV1ZTo6VjFfMDo6dXRpbHM6OkgyQkdyYXBoaWNCdWZmZXJQcm9kdWNlcjsKK3VzaW5nIGhhcmR3YXJlOjpoaWRsX3ZlYzsKK3VzaW5nIGhhcmR3YXJlOjpSZXR1cm47Cit1c2luZyBoYXJkd2FyZTo6Vm9pZDsKK3VzaW5nIEhTdWJtaXRJbmZvID0gZGV2aWNlOjpWMl8wOjpTdWJtaXRJbmZvOwordXNpbmcgaGFyZHdhcmU6OmNhbWVyYTI6OnBhcmFtczo6T3V0cHV0Q29uZmlndXJhdGlvbjsKKworc3RhdGljIGNvbnN0ZXhwciBpbnQzMl90IENBTUVSQV9SRVFVRVNUX01FVEFEQVRBX1FVRVVFX1NJWkUgPSAxIDw8IDIwIC8qIDEgTUIgKi87CitzdGF0aWMgY29uc3RleHByIGludDMyX3QgQ0FNRVJBX1JFU1VMVF9NRVRBREFUQV9RVUVVRV9TSVpFID0gMSA8PCAyMCAvKiAxIE1CICovOworCitSZXR1cm48dm9pZD4gSGlkbENhbWVyYURldmljZVVzZXI6OmRpc2Nvbm5lY3QoKSB7CisgICAgbURldmljZVJlbW90ZS0+ZGlzY29ubmVjdCgpOworICAgIHJldHVybiBWb2lkKCk7Cit9CisKK0hpZGxDYW1lcmFEZXZpY2VVc2VyOjpIaWRsQ2FtZXJhRGV2aWNlVXNlcigKKyAgICBjb25zdCBzcDxoYXJkd2FyZTo6Y2FtZXJhMjo6SUNhbWVyYURldmljZVVzZXI+ICZkZXZpY2VSZW1vdGUpCisgIDogbURldmljZVJlbW90ZShkZXZpY2VSZW1vdGUpIHsKKyAgICBtSW5pdFN1Y2Nlc3MgPSBpbml0RGV2aWNlKCk7Cit9CisKK2Jvb2wgSGlkbENhbWVyYURldmljZVVzZXI6OmluaXREZXZpY2UoKSB7CisgICAgLy8gVE9ETzogR2V0IHJlcXVlc3QgYW5kIHJlc3VsdCBtZXRhZGF0YSBxdWV1ZSBzaXplIGZyb20gYSBzeXN0ZW0gcHJvcGVydHkuCisgICAgaW50MzJfdCByZXFGTVFTaXplID0gQ0FNRVJBX1JFUVVFU1RfTUVUQURBVEFfUVVFVUVfU0laRTsKKworICAgIG1DYXB0dXJlUmVxdWVzdE1ldGFkYXRhUXVldWUgPQorICAgICAgICBzdGQ6Om1ha2VfdW5pcXVlPENhcHR1cmVSZXF1ZXN0TWV0YWRhdGFRdWV1ZT4oc3RhdGljX2Nhc3Q8c2l6ZV90PihyZXFGTVFTaXplKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZhbHNlIC8qIG5vbiBibG9ja2luZyAqLyk7CisgICAgaWYgKCFtQ2FwdHVyZVJlcXVlc3RNZXRhZGF0YVF1ZXVlLT5pc1ZhbGlkKCkpIHsKKyAgICAgICAgQUxPR0UoIiVzOiBpbnZhbGlkIHJlcXVlc3QgZm1xIiwgX19GVU5DVElPTl9fKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIGludDMyX3QgcmVzRk1RU2l6ZSA9IENBTUVSQV9SRVNVTFRfTUVUQURBVEFfUVVFVUVfU0laRTsKKyAgICBtQ2FwdHVyZVJlc3VsdE1ldGFkYXRhUXVldWUgPQorICAgICAgICBzdGQ6Om1ha2Vfc2hhcmVkPENhcHR1cmVSZXN1bHRNZXRhZGF0YVF1ZXVlPihzdGF0aWNfY2FzdDxzaXplX3Q+KHJlc0ZNUVNpemUpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmYWxzZSAvKiBub24gYmxvY2tpbmcgKi8pOworICAgIGlmICghbUNhcHR1cmVSZXN1bHRNZXRhZGF0YVF1ZXVlLT5pc1ZhbGlkKCkpIHsKKyAgICAgICAgQUxPR0UoIiVzOiBpbnZhbGlkIHJlc3VsdCBmbXEiLCBfX0ZVTkNUSU9OX18pOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorICAgIHJldHVybiB0cnVlOworfQorCitSZXR1cm48dm9pZD4gSGlkbENhbWVyYURldmljZVVzZXI6OmdldENhcHR1cmVSZXF1ZXN0TWV0YWRhdGFRdWV1ZSgKKyAgICBnZXRDYXB0dXJlUmVxdWVzdE1ldGFkYXRhUXVldWVfY2IgX2hpZGxfY2IpIHsKKyAgICBpZiAobUluaXRTdWNjZXNzKSB7CisgICAgICAgIF9oaWRsX2NiKCptQ2FwdHVyZVJlcXVlc3RNZXRhZGF0YVF1ZXVlLT5nZXREZXNjKCkpOworICAgIH0KKyAgICByZXR1cm4gVm9pZCgpOworfQorCitSZXR1cm48dm9pZD4gSGlkbENhbWVyYURldmljZVVzZXI6OmdldENhcHR1cmVSZXN1bHRNZXRhZGF0YVF1ZXVlKAorICAgIGdldENhcHR1cmVSZXN1bHRNZXRhZGF0YVF1ZXVlX2NiIF9oaWRsX2NiKSB7CisgICAgaWYgKG1Jbml0U3VjY2VzcykgeworICAgICAgICBfaGlkbF9jYigqbUNhcHR1cmVSZXN1bHRNZXRhZGF0YVF1ZXVlLT5nZXREZXNjKCkpOworICAgIH0KKyAgICByZXR1cm4gVm9pZCgpOworfQorCisvKioKKyAqIFRvIGJlIHVzZWQgb25seSBieSBzdWJtaXRSZXF1ZXN0TGlzdCBpbXBsZW1lbnRhdGlvbiwgc2luY2UgaXQgcmVxdWlyZXMKKyAqIGNsaWVudHMgdG8gY2FsbCB0aGlzIG1ldGhvZCBzZXJpYWxseSwgaW5jYXNlIGZtcSBpcyB1c2VkIHRvIHNlbmQgbWV0YWRhdGEuCisgKi8KK2Jvb2wgSGlkbENhbWVyYURldmljZVVzZXI6OmNvcHlQaHlzaWNhbENhbWVyYVNldHRpbmdzKAorICAgIGNvbnN0IGhpZGxfdmVjPEhQaHlzaWNhbENhbWVyYVNldHRpbmdzPiAmaFBoeXNpY2FsQ2FtZXJhU2V0dGluZ3MsCisgICAgc3RkOjp2ZWN0b3I8Q2FwdHVyZVJlcXVlc3Q6OlBoeXNpY2FsQ2FtZXJhU2V0dGluZ3M+ICpwaHlzaWNhbENhbWVyYVNldHRpbmdzKSB7CisgICAgYm9vbCBjb252ZXJ0ZWQgPSBmYWxzZTsKKyAgICBmb3IgKGF1dG8gJmUgOiBoUGh5c2ljYWxDYW1lcmFTZXR0aW5ncykgeworICAgICAgICBwaHlzaWNhbENhbWVyYVNldHRpbmdzLT5lbXBsYWNlX2JhY2soKTsKKyAgICAgICAgQ2FwdHVyZVJlcXVlc3Q6OlBoeXNpY2FsQ2FtZXJhU2V0dGluZ3MgJnBoeXNpY2FsQ2FtZXJhU2V0dGluZyA9CisgICAgICAgICAgICBwaHlzaWNhbENhbWVyYVNldHRpbmdzLT5iYWNrKCk7CisgICAgICAgIHBoeXNpY2FsQ2FtZXJhU2V0dGluZy5pZCA9IGUuaWQuY19zdHIoKTsKKworICAgICAgICAvLyBSZWFkIHRoZSBzZXR0aW5ncyBlaXRoZXIgZnJvbSB0aGUgZm1xIG9yIHN0cmFpZ2h0YXdheSBmcm9tIHRoZQorICAgICAgICAvLyByZXF1ZXN0LiBXZSBkb24ndCBuZWVkIGFueSBzeW5jaHJvbml6YXRpb24sIHNpbmNlIHN1Ym1pdFJlcXVlc3RMaXN0CisgICAgICAgIC8vIGlzIGd1YXJhbnRlZWQgdG8gYmUgY2FsbGVkIHNlcmlhbGx5IGJ5IHRoZSBjbGllbnQgaWYgaXQgZGVjaWRlcyB0bworICAgICAgICAvLyB1c2UgZm1xLgorICAgICAgICBpZiAoZS5zZXR0aW5ncy5nZXREaXNjcmltaW5hdG9yKCkgPT0KKyAgICAgICAgICAgIEZtcVNpemVPck1ldGFkYXRhOjpoaWRsX2Rpc2NyaW1pbmF0b3I6OmZtcU1ldGFkYXRhU2l6ZSkgeworICAgICAgICAgICAgLyoqCisgICAgICAgICAgICAgKiBHZXQgc2V0dGluZ3MgZnJvbSB0aGUgZm1xLgorICAgICAgICAgICAgICovCisgICAgICAgICAgICBIQ2FtZXJhTWV0YWRhdGEgc2V0dGluZ3NGbXE7CisgICAgICAgICAgICBzZXR0aW5nc0ZtcS5yZXNpemUoZS5zZXR0aW5ncy5mbXFNZXRhZGF0YVNpemUoKSk7CisgICAgICAgICAgICBib29sIHJlYWQgPSBtQ2FwdHVyZVJlcXVlc3RNZXRhZGF0YVF1ZXVlLT5yZWFkKHNldHRpbmdzRm1xLmRhdGEoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZS5zZXR0aW5ncy5mbXFNZXRhZGF0YVNpemUoKSk7CisgICAgICAgICAgICBpZiAoIXJlYWQpIHsKKyAgICAgICAgICAgICAgICBBTE9HRSgiJXMgY2FwdHVyZSByZXF1ZXN0IHNldHRpbmdzIGNvdWxkJ3QgYmUgcmVhZCBmcm9tIGZtcSBzaXplIiwKKyAgICAgICAgICAgICAgICAgICAgICBfX0ZVTkNUSU9OX18pOworICAgICAgICAgICAgICAgIGNvbnZlcnRlZCA9IGZhbHNlOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBjb252ZXJ0ZWQgPSBjb252ZXJ0RnJvbUhpZGwoc2V0dGluZ3NGbXEsICZwaHlzaWNhbENhbWVyYVNldHRpbmcuc2V0dGluZ3MpOworICAgICAgICAgICAgfQorICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgLyoqCisgICAgICAgICAgICAgKiBUaGUgc2V0dGluZ3MgbWV0YWRhdGEgaXMgY29udGFpbmVkIGluIHJlcXVlc3Qgc2V0dGluZ3MgZmllbGQuCisgICAgICAgICAgICAgKi8KKyAgICAgICAgICAgIGNvbnZlcnRlZCA9CisgICAgICAgICAgICAgICAgY29udmVydEZyb21IaWRsKGUuc2V0dGluZ3MubWV0YWRhdGEoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnBoeXNpY2FsQ2FtZXJhU2V0dGluZy5zZXR0aW5ncyk7CisgICAgICAgIH0KKyAgICAgICAgaWYgKCFjb252ZXJ0ZWQpIHsKKyAgICAgICAgICBBTE9HRSgiJXM6IFVuYWJsZSB0byBjb252ZXJ0IHBoeXNpY2FsQ2FtZXJhU2V0dGluZ3MgZnJvbSBISURMIHRvIEFJREwuIiwgX19GVU5DVElPTl9fKTsKKyAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICB9CisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgSGlkbENhbWVyYURldmljZVVzZXI6OmNvbnZlcnRSZXF1ZXN0RnJvbUhpZGwoY29uc3QgSENhcHR1cmVSZXF1ZXN0ICZoUmVxdWVzdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ2FwdHVyZVJlcXVlc3QgKnJlcXVlc3QpIHsKKyAgICAvLyBObyByZXByb2Nlc3Npbmcgc3VwcG9ydC4KKyAgICByZXF1ZXN0LT5tSXNSZXByb2Nlc3MgPSBmYWxzZTsKKyAgICBmb3IgKGNvbnN0IGF1dG8gJnN0cmVhbUFuZFdpbmRvd0lkIDogaFJlcXVlc3Quc3RyZWFtQW5kV2luZG93SWRzKSB7CisgICAgICAgIHJlcXVlc3QtPm1TdHJlYW1JZHhMaXN0LnB1c2hfYmFjayhzdHJlYW1BbmRXaW5kb3dJZC5zdHJlYW1JZCk7CisgICAgICAgIHJlcXVlc3QtPm1TdXJmYWNlSWR4TGlzdC5wdXNoX2JhY2soc3RyZWFtQW5kV2luZG93SWQud2luZG93SWQpOworICAgIH0KKyAgICByZXR1cm4gY29weVBoeXNpY2FsQ2FtZXJhU2V0dGluZ3MoaFJlcXVlc3QucGh5c2ljYWxDYW1lcmFTZXR0aW5ncywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJihyZXF1ZXN0LT5tUGh5c2ljYWxDYW1lcmFTZXR0aW5ncykpOworfQorCitSZXR1cm48dm9pZD4gSGlkbENhbWVyYURldmljZVVzZXI6OnN1Ym1pdFJlcXVlc3RMaXN0KGNvbnN0IGhpZGxfdmVjPEhDYXB0dXJlUmVxdWVzdD4mIGhSZXF1ZXN0TGlzdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBzdHJlYW1pbmcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN1Ym1pdFJlcXVlc3RMaXN0X2NiIF9oaWRsX2NiKSB7CisgICAgaGFyZHdhcmU6OmNhbWVyYTI6OnV0aWxzOjpTdWJtaXRJbmZvIHN1Ym1pdEluZm87CisgICAgSFN1Ym1pdEluZm8gaFN1Ym1pdEluZm87CisgICAgLyoqCisgICAgICogQ3JlYXRlIEFJREwgQ2FwdHVyZVJlcXVlc3QgZnJvbSByZXF1ZXN0TGlzdCBhbmQgZ3JhcGhpY0J1ZmZlclByb2R1Y2Vycy4KKyAgICAgKi8KKyAgICBzdGQ6OnZlY3RvcjxoYXJkd2FyZTo6Y2FtZXJhMjo6Q2FwdHVyZVJlcXVlc3Q+IHJlcXVlc3RzOworICAgIGZvciAoYXV0byAmaFJlcXVlc3QgOiBoUmVxdWVzdExpc3QpIHsKKyAgICAgICAgcmVxdWVzdHMuZW1wbGFjZV9iYWNrKCk7CisgICAgICAgIGF1dG8gJnJlcXVlc3QgPSByZXF1ZXN0cy5iYWNrKCk7CisgICAgICAgIGlmICghY29udmVydFJlcXVlc3RGcm9tSGlkbChoUmVxdWVzdCwgJnJlcXVlc3QpKSB7CisgICAgICAgICAgICBfaGlkbF9jYihIU3RhdHVzOjpJTExFR0FMX0FSR1VNRU5ULCBoU3VibWl0SW5mbyk7CisgICAgICAgICAgICByZXR1cm4gVm9pZCgpOworICAgICAgICB9CisgICAgfQorICAgIG1EZXZpY2VSZW1vdGUtPnN1Ym1pdFJlcXVlc3RMaXN0KHJlcXVlc3RzLCBzdHJlYW1pbmcsICZzdWJtaXRJbmZvKTsKKyAgICBtUmVxdWVzdElkID0gc3VibWl0SW5mby5tUmVxdWVzdElkOworICAgIGNvbnZlcnRUb0hpZGwoc3VibWl0SW5mbywgJmhTdWJtaXRJbmZvKTsKKyAgICBfaGlkbF9jYihIU3RhdHVzOjpOT19FUlJPUiwgaFN1Ym1pdEluZm8pOworICAgIHJldHVybiBWb2lkKCk7Cit9CisKK1JldHVybjx2b2lkPiBIaWRsQ2FtZXJhRGV2aWNlVXNlcjo6Y2FuY2VsUmVwZWF0aW5nUmVxdWVzdChjYW5jZWxSZXBlYXRpbmdSZXF1ZXN0X2NiIF9oaWRsX2NiKSB7CisgICAgaW50NjRfdCBsYXN0RnJhbWVOdW1iZXIgPSAwOworICAgIGJpbmRlcjo6U3RhdHVzIHJldCA9IG1EZXZpY2VSZW1vdGUtPmNhbmNlbFJlcXVlc3QobVJlcXVlc3RJZCwgJmxhc3RGcmFtZU51bWJlcik7CisgICAgX2hpZGxfY2IoQjJIU3RhdHVzKHJldCksIGxhc3RGcmFtZU51bWJlcik7CisgICAgcmV0dXJuIFZvaWQoKTsKK30KKworUmV0dXJuPEhTdGF0dXM+IEhpZGxDYW1lcmFEZXZpY2VVc2VyOjpiZWdpbkNvbmZpZ3VyZSgpIHsKKyAgICBiaW5kZXI6OlN0YXR1cyByZXQgPSBtRGV2aWNlUmVtb3RlLT5iZWdpbkNvbmZpZ3VyZSgpOworICAgIHJldHVybiBCMkhTdGF0dXMocmV0KTsKK30KKworUmV0dXJuPEhTdGF0dXM+IEhpZGxDYW1lcmFEZXZpY2VVc2VyOjplbmRDb25maWd1cmUoU3RyZWFtQ29uZmlndXJhdGlvbk1vZGUgb3BlcmF0aW5nTW9kZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGhpZGxfdmVjPHVpbnQ4X3Q+JiBzZXNzaW9uUGFyYW1zKSB7CisgICAgYW5kcm9pZDo6Q2FtZXJhTWV0YWRhdGEgY2FtZXJhTWV0YWRhdGE7CisgICAgaWYgKCFjb252ZXJ0RnJvbUhpZGwoc2Vzc2lvblBhcmFtcywgJmNhbWVyYU1ldGFkYXRhKSkgeworICAgICAgICByZXR1cm4gSFN0YXR1czo6SUxMRUdBTF9BUkdVTUVOVDsKKyAgICB9CisKKyAgICBiaW5kZXI6OlN0YXR1cyByZXQgPSBtRGV2aWNlUmVtb3RlLT5lbmRDb25maWd1cmUoY29udmVydEZyb21IaWRsKG9wZXJhdGluZ01vZGUpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYW1lcmFNZXRhZGF0YSk7CisgICAgcmV0dXJuIEIySFN0YXR1cyhyZXQpOworfQorCitSZXR1cm48SFN0YXR1cz4gSGlkbENhbWVyYURldmljZVVzZXI6OmRlbGV0ZVN0cmVhbShpbnQzMl90IHN0cmVhbUlkKSB7CisgICAgYmluZGVyOjpTdGF0dXMgcmV0ID0gbURldmljZVJlbW90ZS0+ZGVsZXRlU3RyZWFtKHN0cmVhbUlkKTsKKyAgICByZXR1cm4gQjJIU3RhdHVzKHJldCk7Cit9CisKK1JldHVybjx2b2lkPiBIaWRsQ2FtZXJhRGV2aWNlVXNlcjo6Y3JlYXRlU3RyZWFtKGNvbnN0IEhPdXRwdXRDb25maWd1cmF0aW9uJiBoT3V0cHV0Q29uZmlndXJhdGlvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNyZWF0ZVN0cmVhbV9jYiBoaWRsX2NiXykgeworICAgIE91dHB1dENvbmZpZ3VyYXRpb24gb3V0cHV0Q29uZmlndXJhdGlvbiA9CisgICAgICAgIGNvbnZlcnRGcm9tSGlkbChoT3V0cHV0Q29uZmlndXJhdGlvbik7CisgICAgaW50MzJfdCBuZXdTdHJlYW1JZCA9IDA7CisgICAgYmluZGVyOjpTdGF0dXMgcmV0ID0gbURldmljZVJlbW90ZS0+Y3JlYXRlU3RyZWFtKG91dHB1dENvbmZpZ3VyYXRpb24sICZuZXdTdHJlYW1JZCk7CisgICAgSFN0YXR1cyBzdGF0dXMgPSBCMkhTdGF0dXMocmV0KTsKKyAgICBoaWRsX2NiXyhzdGF0dXMsIG5ld1N0cmVhbUlkKTsKKyAgICByZXR1cm4gVm9pZCgpOworfQorCitSZXR1cm48dm9pZD4gSGlkbENhbWVyYURldmljZVVzZXI6OmNyZWF0ZURlZmF1bHRSZXF1ZXN0KFRlbXBsYXRlSWQgdGVtcGxhdGVJZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3JlYXRlRGVmYXVsdFJlcXVlc3RfY2IgX2hpZGxfY2IpIHsKKyAgICBhbmRyb2lkOjpDYW1lcmFNZXRhZGF0YSBjYW1lcmFNZXRhZGF0YTsKKyAgICBiaW5kZXI6OlN0YXR1cyByZXQgPSBtRGV2aWNlUmVtb3RlLT5jcmVhdGVEZWZhdWx0UmVxdWVzdChjb252ZXJ0RnJvbUhpZGwodGVtcGxhdGVJZCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmNhbWVyYU1ldGFkYXRhKTsKKyAgICBIU3RhdHVzIGhTdGF0dXMgPSBCMkhTdGF0dXMocmV0KTsKKyAgICBIQ2FtZXJhTWV0YWRhdGEgaGlkbE1ldGFkYXRhOworICAgIGNvbnN0IGNhbWVyYV9tZXRhZGF0YV90ICpyYXdNZXRhZGF0YSA9IGNhbWVyYU1ldGFkYXRhLmdldEFuZExvY2soKTsKKyAgICBjb252ZXJ0VG9IaWRsKHJhd01ldGFkYXRhLCAmaGlkbE1ldGFkYXRhKTsKKyAgICBfaGlkbF9jYihoU3RhdHVzLCBoaWRsTWV0YWRhdGEpOworICAgIGNhbWVyYU1ldGFkYXRhLnVubG9jayhyYXdNZXRhZGF0YSk7CisgICAgcmV0dXJuIFZvaWQoKTsKK30KKworUmV0dXJuPEhTdGF0dXM+IEhpZGxDYW1lcmFEZXZpY2VVc2VyOjp3YWl0VW50aWxJZGxlKCkgeworICAgIGJpbmRlcjo6U3RhdHVzIHJldCA9IG1EZXZpY2VSZW1vdGUtPndhaXRVbnRpbElkbGUoKTsKKyAgICByZXR1cm4gQjJIU3RhdHVzKHJldCk7Cit9CisKK1JldHVybjx2b2lkPiBIaWRsQ2FtZXJhRGV2aWNlVXNlcjo6Zmx1c2goZmx1c2hfY2IgX2hpZGxfY2IpIHsKKyAgICBpbnQ2NF90IGxhc3RGcmFtZU51bWJlciA9IDA7CisgICAgYmluZGVyOjpTdGF0dXMgcmV0ID0gbURldmljZVJlbW90ZS0+Zmx1c2goJmxhc3RGcmFtZU51bWJlcik7CisgICAgX2hpZGxfY2IoQjJIU3RhdHVzKHJldCksbGFzdEZyYW1lTnVtYmVyKTsKKyAgICByZXR1cm4gVm9pZCgpOworfQorCitSZXR1cm48SFN0YXR1cz4gSGlkbENhbWVyYURldmljZVVzZXI6OnVwZGF0ZU91dHB1dENvbmZpZ3VyYXRpb24oCisgICAgaW50MzJfdCBzdHJlYW1JZCwKKyAgICBjb25zdCBIT3V0cHV0Q29uZmlndXJhdGlvbiYgaE91dHB1dENvbmZpZ3VyYXRpb24pIHsKKyAgICBPdXRwdXRDb25maWd1cmF0aW9uIG91dHB1dENvbmZpZ3VyYXRpb24gPSBjb252ZXJ0RnJvbUhpZGwoaE91dHB1dENvbmZpZ3VyYXRpb24pOworICAgIGJpbmRlcjo6U3RhdHVzIHJldCA9IG1EZXZpY2VSZW1vdGUtPnVwZGF0ZU91dHB1dENvbmZpZ3VyYXRpb24oc3RyZWFtSWQsIG91dHB1dENvbmZpZ3VyYXRpb24pOworICAgIHJldHVybiBCMkhTdGF0dXMocmV0KTsKK30KKworfSAvLyBpbXBsZW1lbnRhdGlvbgorfSAvLyBWMl8wCit9IC8vIGRldmljZQorfSAvLyBjYW1lcmFzZXJ2aWNlCit9IC8vIGZyYW1ld29ya3MKK30gLy8gYW5kcm9pZApkaWZmIC0tZ2l0IGEvc2VydmljZXMvY2FtZXJhL2xpYmNhbWVyYXNlcnZpY2UvaGlkbC9IaWRsQ2FtZXJhRGV2aWNlVXNlci5oIGIvc2VydmljZXMvY2FtZXJhL2xpYmNhbWVyYXNlcnZpY2UvaGlkbC9IaWRsQ2FtZXJhRGV2aWNlVXNlci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJlOGYxZDYKLS0tIC9kZXYvbnVsbAorKysgYi9zZXJ2aWNlcy9jYW1lcmEvbGliY2FtZXJhc2VydmljZS9oaWRsL0hpZGxDYW1lcmFEZXZpY2VVc2VyLmgKQEAgLTAsMCArMSwxMjggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTggVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworCisjaWZuZGVmIEFORFJPSURfRlJBTUVXT1JLU19DQU1FUkFERVZJQ0VVU0VSX1YyXzBfQ0FNRVJBREVWSUNFVVNFUl9ICisjZGVmaW5lIEFORFJPSURfRlJBTUVXT1JLU19DQU1FUkFERVZJQ0VVU0VSX1YyXzBfQ0FNRVJBREVWSUNFVVNFUl9ICisKKyNpbmNsdWRlIDxtdXRleD4KKyNpbmNsdWRlIDxtZW1vcnk+CisjaW5jbHVkZSA8dGhyZWFkPgorCisjaW5jbHVkZSA8YW5kcm9pZC9mcmFtZXdvcmtzL2NhbWVyYXNlcnZpY2UvY29tbW9uLzIuMC90eXBlcy5oPgorI2luY2x1ZGUgPGFuZHJvaWQvZnJhbWV3b3Jrcy9jYW1lcmFzZXJ2aWNlL3NlcnZpY2UvMi4wL3R5cGVzLmg+CisjaW5jbHVkZSA8YW5kcm9pZC9mcmFtZXdvcmtzL2NhbWVyYXNlcnZpY2UvZGV2aWNlLzIuMC9JQ2FtZXJhRGV2aWNlVXNlci5oPgorI2luY2x1ZGUgPGFuZHJvaWQvZnJhbWV3b3Jrcy9jYW1lcmFzZXJ2aWNlL2RldmljZS8yLjAvdHlwZXMuaD4KKyNpbmNsdWRlIDxhbmRyb2lkL2hhcmR3YXJlL2NhbWVyYTIvSUNhbWVyYURldmljZUNhbGxiYWNrcy5oPgorI2luY2x1ZGUgPGZtcS9NZXNzYWdlUXVldWUuaD4KKyNpbmNsdWRlIDxoaWRsL01RRGVzY3JpcHRvci5oPgorI2luY2x1ZGUgPGhpZGwvU3RhdHVzLmg+CisKKyNpbmNsdWRlIDxDYW1lcmFTZXJ2aWNlLmg+CisKK25hbWVzcGFjZSBhbmRyb2lkIHsKK25hbWVzcGFjZSBmcmFtZXdvcmtzIHsKK25hbWVzcGFjZSBjYW1lcmFzZXJ2aWNlIHsKK25hbWVzcGFjZSBkZXZpY2UgeworbmFtZXNwYWNlIFYyXzAgeworbmFtZXNwYWNlIGltcGxlbWVudGF0aW9uIHsKKwordXNpbmcgZnJhbWV3b3Jrczo6Y2FtZXJhc2VydmljZTo6ZGV2aWNlOjpWMl8wOjpTdHJlYW1Db25maWd1cmF0aW9uTW9kZTsKK3VzaW5nIGhhcmR3YXJlOjpjYW1lcmEyOjpDYXB0dXJlUmVxdWVzdDsKK3VzaW5nIGhhcmR3YXJlOjpoaWRsX3ZlYzsKK3VzaW5nIGhhcmR3YXJlOjprU3luY2hyb25pemVkUmVhZFdyaXRlOwordXNpbmcgaGFyZHdhcmU6Ok1lc3NhZ2VRdWV1ZTsKK3VzaW5nIGhhcmR3YXJlOjpNUURlc2NyaXB0b3JTeW5jOwordXNpbmcgaGFyZHdhcmU6OlJldHVybjsKK3VzaW5nIENhcHR1cmVSZXN1bHRNZXRhZGF0YVF1ZXVlID0gTWVzc2FnZVF1ZXVlPHVpbnQ4X3QsIGtTeW5jaHJvbml6ZWRSZWFkV3JpdGU+OwordXNpbmcgQ2FwdHVyZVJlcXVlc3RNZXRhZGF0YVF1ZXVlID0gTWVzc2FnZVF1ZXVlPHVpbnQ4X3QsIGtTeW5jaHJvbml6ZWRSZWFkV3JpdGU+OwordXNpbmcgVGVtcGxhdGVJZCA9IGZyYW1ld29ya3M6OmNhbWVyYXNlcnZpY2U6OmRldmljZTo6VjJfMDo6VGVtcGxhdGVJZDsKKwordXNpbmcgSENhbWVyYURldmljZVVzZXIgPSBkZXZpY2U6OlYyXzA6OklDYW1lcmFEZXZpY2VVc2VyOwordXNpbmcgSENhbWVyYU1ldGFkYXRhID0gY2FtZXJhc2VydmljZTo6c2VydmljZTo6VjJfMDo6Q2FtZXJhTWV0YWRhdGE7Cit1c2luZyBIQ2FwdHVyZVJlcXVlc3QgPSBkZXZpY2U6OlYyXzA6OkNhcHR1cmVSZXF1ZXN0OwordXNpbmcgSE91dHB1dENvbmZpZ3VyYXRpb24gPSBmcmFtZXdvcmtzOjpjYW1lcmFzZXJ2aWNlOjpkZXZpY2U6OlYyXzA6Ok91dHB1dENvbmZpZ3VyYXRpb247Cit1c2luZyBIUGh5c2ljYWxDYW1lcmFTZXR0aW5ncyA9IGZyYW1ld29ya3M6OmNhbWVyYXNlcnZpY2U6OmRldmljZTo6VjJfMDo6UGh5c2ljYWxDYW1lcmFTZXR0aW5nczsKK3VzaW5nIEhTdGF0dXMgPSBmcmFtZXdvcmtzOjpjYW1lcmFzZXJ2aWNlOjpjb21tb246OlYyXzA6OlN0YXR1czsKKworc3RhdGljIGNvbnN0ZXhwciBpbnQzMl90IFJFUVVFU1RfSURfTk9ORSA9IC0xOworCitzdHJ1Y3QgSGlkbENhbWVyYURldmljZVVzZXIgZmluYWwgOiBwdWJsaWMgSENhbWVyYURldmljZVVzZXIgeworICAgIEhpZGxDYW1lcmFEZXZpY2VVc2VyKGNvbnN0IHNwPGhhcmR3YXJlOjpjYW1lcmEyOjpJQ2FtZXJhRGV2aWNlVXNlcj4gJmRldmljZVJlbW90ZSk7CisKKyAgICB+SGlkbENhbWVyYURldmljZVVzZXIoKSB7IH0KKworICAgIHZpcnR1YWwgUmV0dXJuPHZvaWQ+IGRpc2Nvbm5lY3QoKSBvdmVycmlkZTsKKworICAgIHZpcnR1YWwgUmV0dXJuPHZvaWQ+IGdldENhcHR1cmVSZXF1ZXN0TWV0YWRhdGFRdWV1ZSgKKyAgICAgICAgZ2V0Q2FwdHVyZVJlcXVlc3RNZXRhZGF0YVF1ZXVlX2NiIF9oaWRsX2NiKSBvdmVycmlkZTsKKworICAgIHZpcnR1YWwgUmV0dXJuPHZvaWQ+IGdldENhcHR1cmVSZXN1bHRNZXRhZGF0YVF1ZXVlKAorICAgICAgICBnZXRDYXB0dXJlUmVzdWx0TWV0YWRhdGFRdWV1ZV9jYiBfaGlkbF9jYikgb3ZlcnJpZGU7CisKKyAgICB2aXJ0dWFsIFJldHVybjx2b2lkPiBzdWJtaXRSZXF1ZXN0TGlzdChjb25zdCBoaWRsX3ZlYzxIQ2FwdHVyZVJlcXVlc3Q+JiByZXF1ZXN0TGlzdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIHN0cmVhbWluZywgc3VibWl0UmVxdWVzdExpc3RfY2IgX2hpZGxfY2IpIG92ZXJyaWRlOworCisgICAgdmlydHVhbCBSZXR1cm48dm9pZD4gY2FuY2VsUmVwZWF0aW5nUmVxdWVzdChjYW5jZWxSZXBlYXRpbmdSZXF1ZXN0X2NiIF9oaWRsX2NiKSBvdmVycmlkZTsKKworICAgIHZpcnR1YWwgUmV0dXJuPEhTdGF0dXM+IGJlZ2luQ29uZmlndXJlKCkgb3ZlcnJpZGU7CisKKyAgICB2aXJ0dWFsIFJldHVybjxIU3RhdHVzPiBlbmRDb25maWd1cmUoU3RyZWFtQ29uZmlndXJhdGlvbk1vZGUgb3BlcmF0aW5nTW9kZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgaGlkbF92ZWM8dWludDhfdD4mIHNlc3Npb25QYXJhbXMpOworCisgICAgdmlydHVhbCBSZXR1cm48SFN0YXR1cz4gZGVsZXRlU3RyZWFtKGludDMyX3Qgc3RyZWFtSWQpIG92ZXJyaWRlOworCisgICAgdmlydHVhbCBSZXR1cm48dm9pZD4gY3JlYXRlU3RyZWFtKGNvbnN0IEhPdXRwdXRDb25maWd1cmF0aW9uJiBvdXRwdXRDb25maWd1cmF0aW9uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjcmVhdGVTdHJlYW1fY2IgX2hpZGxfY2IpIG92ZXJyaWRlOworCisgICAgUmV0dXJuPHZvaWQ+IGNyZWF0ZURlZmF1bHRSZXF1ZXN0KFRlbXBsYXRlSWQgdGVtcGxhdGVJZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3JlYXRlRGVmYXVsdFJlcXVlc3RfY2IgX2hpZGxfY2IpIG92ZXJyaWRlOworCisgICAgdmlydHVhbCBSZXR1cm48SFN0YXR1cz4gd2FpdFVudGlsSWRsZSgpIG92ZXJyaWRlOworCisgICAgdmlydHVhbCBSZXR1cm48dm9pZD4gZmx1c2goZmx1c2hfY2IgX2hpZGxfY2IpIG92ZXJyaWRlOworCisgICAgdmlydHVhbCBSZXR1cm48SFN0YXR1cz4gdXBkYXRlT3V0cHV0Q29uZmlndXJhdGlvbigKKyAgICAgICAgaW50MzJfdCBzdHJlYW1JZCwgY29uc3QgSE91dHB1dENvbmZpZ3VyYXRpb24mIG91dHB1dENvbmZpZ3VyYXRpb24pIG92ZXJyaWRlOworCisgICAgYm9vbCBpbml0U3RhdHVzKCkgeyByZXR1cm4gbUluaXRTdWNjZXNzOyB9CisKKyAgICBzdGQ6OnNoYXJlZF9wdHI8Q2FwdHVyZVJlc3VsdE1ldGFkYXRhUXVldWU+IGdldENhcHR1cmVSZXN1bHRNZXRhZGF0YVF1ZXVlKCkgeworICAgICAgICByZXR1cm4gbUNhcHR1cmVSZXN1bHRNZXRhZGF0YVF1ZXVlOworICAgIH0KKworIHByaXZhdGU6CisgICAgYm9vbCBpbml0RGV2aWNlKCk7CisKKyAgICBib29sIGNvbnZlcnRSZXF1ZXN0RnJvbUhpZGwoY29uc3QgSENhcHR1cmVSZXF1ZXN0ICZoUmVxdWVzdCwgQ2FwdHVyZVJlcXVlc3QgKnJlcXVlc3QpOworCisgICAgYm9vbCBjb3B5UGh5c2ljYWxDYW1lcmFTZXR0aW5ncygKKyAgICAgICAgY29uc3QgaGlkbF92ZWM8SFBoeXNpY2FsQ2FtZXJhU2V0dGluZ3M+ICZoUGh5c2ljYWxDYW1lcmFTZXR0aW5ncywKKyAgICAgICAgc3RkOjp2ZWN0b3I8Q2FwdHVyZVJlcXVlc3Q6OlBoeXNpY2FsQ2FtZXJhU2V0dGluZ3M+ICpwaHlzaWNhbENhbWVyYVNldHRpbmdzKTsKKworICAgIGNvbnN0IHNwPGhhcmR3YXJlOjpjYW1lcmEyOjpJQ2FtZXJhRGV2aWNlVXNlcj4gbURldmljZVJlbW90ZTsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8Q2FwdHVyZVJlcXVlc3RNZXRhZGF0YVF1ZXVlPiBtQ2FwdHVyZVJlcXVlc3RNZXRhZGF0YVF1ZXVlID0gbnVsbHB0cjsKKyAgICBzdGQ6OnNoYXJlZF9wdHI8Q2FwdHVyZVJlc3VsdE1ldGFkYXRhUXVldWU+IG1DYXB0dXJlUmVzdWx0TWV0YWRhdGFRdWV1ZSA9IG51bGxwdHI7CisgICAgYm9vbCBtSW5pdFN1Y2Nlc3MgPSBmYWxzZTsKKyAgICBpbnQzMl90IG1SZXF1ZXN0SWQgPSBSRVFVRVNUX0lEX05PTkU7Cit9OworCit9IC8vIGltcGxlbWVudGF0aW9uCit9IC8vIFYyXzAKK30gLy8gZGV2aWNlCit9IC8vIGNhbWVyYXNlcnZpY2UKK30gLy8gZnJhbWV3b3JrcworfSAvLyBhbmRyb2lkCisjZW5kaWYgLy8gQU5EUk9JRF9GUkFNRU9XT1JLU19DQU1FUkFERVZJQ0VVU0VSX1YyXzBfQ0FNRVJBREVWSUNFVVNFUl9ICmRpZmYgLS1naXQgYS9zZXJ2aWNlcy9jYW1lcmEvbGliY2FtZXJhc2VydmljZS9oaWRsL0hpZGxDYW1lcmFTZXJ2aWNlLmNwcCBiL3NlcnZpY2VzL2NhbWVyYS9saWJjYW1lcmFzZXJ2aWNlL2hpZGwvSGlkbENhbWVyYVNlcnZpY2UuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ4ZjFkMzcKLS0tIC9kZXYvbnVsbAorKysgYi9zZXJ2aWNlcy9jYW1lcmEvbGliY2FtZXJhc2VydmljZS9oaWRsL0hpZGxDYW1lcmFTZXJ2aWNlLmNwcApAQCAtMCwwICsxLDI3MyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxOCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCisKKyNpbmNsdWRlIDxoaWRsL0NvbnZlcnQuaD4KKworI2luY2x1ZGUgPGhpZGwvSGlkbENhbWVyYVNlcnZpY2UuaD4KKworI2luY2x1ZGUgPGhpZGwvSGlkbENhbWVyYURldmljZVVzZXIuaD4KKyNpbmNsdWRlIDxoaWRsL0FpZGxDYW1lcmFEZXZpY2VDYWxsYmFja3MuaD4KKyNpbmNsdWRlIDxoaWRsL0FpZGxDYW1lcmFTZXJ2aWNlTGlzdGVuZXIuaD4KKworI2luY2x1ZGUgPGhpZGwvSGlkbFRyYW5zcG9ydFN1cHBvcnQuaD4KKworbmFtZXNwYWNlIGFuZHJvaWQgeworbmFtZXNwYWNlIGZyYW1ld29ya3MgeworbmFtZXNwYWNlIGNhbWVyYXNlcnZpY2UgeworbmFtZXNwYWNlIHNlcnZpY2UgeworbmFtZXNwYWNlIFYyXzAgeworbmFtZXNwYWNlIGltcGxlbWVudGF0aW9uIHsKKwordXNpbmcgZnJhbWV3b3Jrczo6Y2FtZXJhc2VydmljZTo6c2VydmljZTo6VjJfMDo6aW1wbGVtZW50YXRpb246OkhpZGxDYW1lcmFTZXJ2aWNlOwordXNpbmcgaGFyZHdhcmU6OmhpZGxfdmVjOwordXNpbmcgaGFyZHdhcmU6OmNhbWVyYXNlcnZpY2U6OnV0aWxzOjpjb252ZXJzaW9uOjpjb252ZXJ0VG9IaWRsOwordXNpbmcgaGFyZHdhcmU6OmNhbWVyYXNlcnZpY2U6OnV0aWxzOjpjb252ZXJzaW9uOjpCMkhTdGF0dXM7Cit1c2luZyBoYXJkd2FyZTo6Vm9pZDsKKwordXNpbmcgZGV2aWNlOjpWMl8wOjppbXBsZW1lbnRhdGlvbjo6SDJCQ2FtZXJhRGV2aWNlQ2FsbGJhY2tzOwordXNpbmcgZGV2aWNlOjpWMl8wOjppbXBsZW1lbnRhdGlvbjo6SGlkbENhbWVyYURldmljZVVzZXI7Cit1c2luZyBzZXJ2aWNlOjpWMl8wOjppbXBsZW1lbnRhdGlvbjo6SDJCQ2FtZXJhU2VydmljZUxpc3RlbmVyOwordXNpbmcgSENhbWVyYU1ldGFkYXRhVHlwZSA9IGZyYW1ld29ya3M6OmNhbWVyYXNlcnZpY2U6OmNvbW1vbjo6VjJfMDo6Q2FtZXJhTWV0YWRhdGFUeXBlOwordXNpbmcgSFZlbmRvclRhZyA9IGZyYW1ld29ya3M6OmNhbWVyYXNlcnZpY2U6OmNvbW1vbjo6VjJfMDo6VmVuZG9yVGFnOwordXNpbmcgSFZlbmRvclRhZ1NlY3Rpb24gPSBmcmFtZXdvcmtzOjpjYW1lcmFzZXJ2aWNlOjpjb21tb246OlYyXzA6OlZlbmRvclRhZ1NlY3Rpb247Cit1c2luZyBIUHJvdmlkZXJJZEFuZFZlbmRvclRhZ1NlY3Rpb25zID0KKyAgICAgICAgZnJhbWV3b3Jrczo6Y2FtZXJhc2VydmljZTo6Y29tbW9uOjpWMl8wOjpQcm92aWRlcklkQW5kVmVuZG9yVGFnU2VjdGlvbnM7CisKK3NwPEhpZGxDYW1lcmFTZXJ2aWNlPiBnSGlkbENhbWVyYVNlcnZpY2U7CisKK3NwPEhpZGxDYW1lcmFTZXJ2aWNlPiBIaWRsQ2FtZXJhU2VydmljZTo6Z2V0SW5zdGFuY2UoYW5kcm9pZDo6Q2FtZXJhU2VydmljZSAqY3MpIHsKKyAgICBnSGlkbENhbWVyYVNlcnZpY2UgPSBuZXcgSGlkbENhbWVyYVNlcnZpY2UoY3MpOworICAgIHJldHVybiBnSGlkbENhbWVyYVNlcnZpY2U7Cit9CisKK1JldHVybjx2b2lkPgorSGlkbENhbWVyYVNlcnZpY2U6OmdldENhbWVyYUNoYXJhY3RlcmlzdGljcyhjb25zdCBoaWRsX3N0cmluZyYgY2FtZXJhSWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdldENhbWVyYUNoYXJhY3RlcmlzdGljc19jYiBfaGlkbF9jYikgeworICAgIGFuZHJvaWQ6OkNhbWVyYU1ldGFkYXRhIGNhbWVyYU1ldGFkYXRhOworICAgIEhTdGF0dXMgc3RhdHVzID0gSFN0YXR1czo6Tk9fRVJST1I7CisgICAgYmluZGVyOjpTdGF0dXMgc2VydmljZVJldCA9CisgICAgICAgIG1BaWRsSUNhbWVyYVNlcnZpY2UtPmdldENhbWVyYUNoYXJhY3RlcmlzdGljcyhTdHJpbmcxNihjYW1lcmFJZC5jX3N0cigpKSwgJmNhbWVyYU1ldGFkYXRhKTsKKyAgICBIQ2FtZXJhTWV0YWRhdGEgaGlkbE1ldGFkYXRhOworICAgIGlmICghc2VydmljZVJldC5pc09rKCkpIHsKKyAgICAgICAgc3dpdGNoKHNlcnZpY2VSZXQuc2VydmljZVNwZWNpZmljRXJyb3JDb2RlKCkpIHsKKyAgICAgICAgICAgIC8vIE5vIEVSUk9SX0NBTUVSQV9ESVNDT05ORUNURUQgc2luY2Ugd2UncmUgaW4gdGhlIHNhbWUgcHJvY2Vzcy4KKyAgICAgICAgICAgIGNhc2UgaGFyZHdhcmU6OklDYW1lcmFTZXJ2aWNlOjpFUlJPUl9JTExFR0FMX0FSR1VNRU5UOgorICAgICAgICAgICAgICAgIEFMT0dFKCIlczogQ2FtZXJhIElEICVzIGRvZXMgbm90IGV4aXN0ISIsIF9fRlVOQ1RJT05fXywgY2FtZXJhSWQuY19zdHIoKSk7CisgICAgICAgICAgICAgICAgc3RhdHVzID0gSFN0YXR1czo6SUxMRUdBTF9BUkdVTUVOVDsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgQUxPR0UoIkdldCBjYW1lcmEgY2hhcmFjdGVyaXN0aWNzIGZyb20gY2FtZXJhIHNlcnZpY2UgZmFpbGVkOiAlcyIsCisgICAgICAgICAgICAgICAgICAgICAgc2VydmljZVJldC50b1N0cmluZzgoKS5zdHJpbmcoKSk7CisgICAgICAgICAgICAgICAgc3RhdHVzID0gQjJIU3RhdHVzKHNlcnZpY2VSZXQpOworICAgICAgICAgIH0KKyAgICAgICAgX2hpZGxfY2Ioc3RhdHVzLCBoaWRsTWV0YWRhdGEpOworICAgICAgICByZXR1cm4gVm9pZCgpOworICAgIH0KKyAgICBjb25zdCBjYW1lcmFfbWV0YWRhdGFfdCAqcmF3TWV0YWRhdGEgPSBjYW1lcmFNZXRhZGF0YS5nZXRBbmRMb2NrKCk7CisgICAgY29udmVydFRvSGlkbChyYXdNZXRhZGF0YSwgJmhpZGxNZXRhZGF0YSk7CisgICAgX2hpZGxfY2Ioc3RhdHVzLCBoaWRsTWV0YWRhdGEpOworICAgIGNhbWVyYU1ldGFkYXRhLnVubG9jayhyYXdNZXRhZGF0YSk7CisgICAgcmV0dXJuIFZvaWQoKTsKK30KKworUmV0dXJuPHZvaWQ+IEhpZGxDYW1lcmFTZXJ2aWNlOjpjb25uZWN0RGV2aWNlKGNvbnN0IHNwPEhDYW1lcmFEZXZpY2VDYWxsYmFjaz4mIGhDYWxsYmFjaywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBoaWRsX3N0cmluZyYgY2FtZXJhSWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29ubmVjdERldmljZV9jYiBfaGlkbF9jYikgeworICAgIC8vIEhlcmUsIHdlIGZpcnN0IGdldCBJQ2FtZXJhRGV2aWNlVXNlciBmcm9tIG1BaWRsSUNhbWVyYVNlcnZpY2UsIHRoZW4gc2F2ZQorICAgIC8vIHRoYXQgaW50ZXJmYWNlIGluIHRoZSBuZXdseSBjcmVhdGVkIEhpZGxDYW1lcmFEZXZpY2VVc2VyIGltcGwgY2xhc3MuCisgICAgaWYgKG1BaWRsSUNhbWVyYVNlcnZpY2UgPT0gbnVsbHB0cikgeworICAgICAgICBfaGlkbF9jYihIU3RhdHVzOjpVTktOT1dOX0VSUk9SLCBudWxscHRyKTsKKyAgICAgICAgcmV0dXJuIFZvaWQoKTsKKyAgICB9CisgICAgc3A8aGFyZHdhcmU6OmNhbWVyYTI6OklDYW1lcmFEZXZpY2VVc2VyPiBkZXZpY2VSZW1vdGUgPSBudWxscHRyOworICAgIC8vIENyZWF0ZSBhIGhhcmR3YXJlOjpjYW1lcmEyOjpJQ2FtZXJhRGV2aWNlQ2FsbGJhY2sgb2JqZWN0IHdoaWNoIGludGVybmFsbHkKKyAgICAvLyBjYWxscyBjYWxsYmFjayBmdW5jdGlvbnMgcGFzc2VkIHRocm91Z2ggaENhbGxiYWNrLgorICAgIHNwPEgyQkNhbWVyYURldmljZUNhbGxiYWNrcz4gaHlicmlkQ2FsbGJhY2tzID0gbmV3IEgyQkNhbWVyYURldmljZUNhbGxiYWNrcyhoQ2FsbGJhY2spOworICAgIGlmICghaHlicmlkQ2FsbGJhY2tzLT5pbml0aWFsaXplTG9vcGVyKCkpIHsKKyAgICAgICAgQUxPR0UoIlVuYWJsZSB0byBoYW5kbGUgY2FsbGJhY2tzIG9uIGRldmljZSwgY2Fubm90IGNvbm5lY3QiKTsKKyAgICAgICAgX2hpZGxfY2IoSFN0YXR1czo6VU5LTk9XTl9FUlJPUiwgbnVsbHB0cik7CisgICAgICAgIHJldHVybiBWb2lkKCk7CisgICAgfQorICAgIHNwPGhhcmR3YXJlOjpjYW1lcmEyOjpJQ2FtZXJhRGV2aWNlQ2FsbGJhY2tzPiBjYWxsYmFja3MgPSBoeWJyaWRDYWxsYmFja3M7CisgICAgYmluZGVyOjpTdGF0dXMgc2VydmljZVJldCA9IG1BaWRsSUNhbWVyYVNlcnZpY2UtPmNvbm5lY3REZXZpY2UoCisgICAgICAgICAgICBjYWxsYmFja3MsIFN0cmluZzE2KGNhbWVyYUlkLmNfc3RyKCkpLCBTdHJpbmcxNigiIiksCisgICAgICAgICAgICBoYXJkd2FyZTo6SUNhbWVyYVNlcnZpY2U6OlVTRV9DQUxMSU5HX1VJRCwgLypvdXQqLyZkZXZpY2VSZW1vdGUpOworICAgIEhTdGF0dXMgc3RhdHVzID0gSFN0YXR1czo6Tk9fRVJST1I7CisgICAgaWYgKCFzZXJ2aWNlUmV0LmlzT2soKSkgeworICAgICAgICBBTE9HRSgiJXM6IFVuYWJsZSB0byBjb25uZWN0IHRvIGNhbWVyYSBkZXZpY2UiLCBfX0ZVTkNUSU9OX18pOworICAgICAgICBzdGF0dXMgPSBCMkhTdGF0dXMoc2VydmljZVJldCk7CisgICAgICAgIF9oaWRsX2NiKHN0YXR1cywgbnVsbHB0cik7CisgICAgICAgIHJldHVybiBWb2lkKCk7CisgICAgfQorICAgIC8vIE5vdyB3ZSBjcmVhdGUgYSBIaWRsQ2FtZXJhRGV2aWNlVXNlciBjbGFzcywgc3RvcmUgdGhlIGRldmljZVJlbW90ZSBpbiBpdCwKKyAgICAvLyBhbmQgcmV0dXJuIHRoYXQgYmFjay4gQWxsIGNhbGxzIG9uIHRoYXQgaW50ZXJmYWNlIHdpbGwgYmUgZm9yd2FyZGVkIHRvCisgICAgLy8gdGhlIEFJREwgaW50ZXJmYWNlLgorICAgIHNwPEhpZGxDYW1lcmFEZXZpY2VVc2VyPiBoRGV2aWNlUmVtb3RlID0gbmV3IEhpZGxDYW1lcmFEZXZpY2VVc2VyKGRldmljZVJlbW90ZSk7CisgICAgaWYgKCFoRGV2aWNlUmVtb3RlLT5pbml0U3RhdHVzKCkpIHsKKyAgICAgICAgQUxPR0UoIiVzOiBVbmFibGUgdG8gaW5pdGlhbGl6ZSBjYW1lcmEgZGV2aWNlIEhJREwgd3JhcHBlciIsIF9fRlVOQ1RJT05fXyk7CisgICAgICAgIF9oaWRsX2NiKEhTdGF0dXM6OlVOS05PV05fRVJST1IsIG51bGxwdHIpOworICAgICAgICByZXR1cm4gVm9pZCgpOworICAgIH0KKyAgICBoeWJyaWRDYWxsYmFja3MtPnNldENhcHR1cmVSZXN1bHRNZXRhZGF0YVF1ZXVlKGhEZXZpY2VSZW1vdGUtPmdldENhcHR1cmVSZXN1bHRNZXRhZGF0YVF1ZXVlKCkpOworICAgIF9oaWRsX2NiKHN0YXR1cywgaERldmljZVJlbW90ZSk7CisgICAgcmV0dXJuIFZvaWQoKTsKK30KKwordm9pZCBIaWRsQ2FtZXJhU2VydmljZTo6YWRkVG9MaXN0ZW5lckNhY2hlTG9ja2VkKHNwPEhDYW1lcmFTZXJ2aWNlTGlzdGVuZXI+IGhMaXN0ZW5lciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcDxoYXJkd2FyZTo6SUNhbWVyYVNlcnZpY2VMaXN0ZW5lcj4gY3NMaXN0ZW5lcikgeworICAgICAgICBtTGlzdGVuZXJzLmVtcGxhY2VfYmFjayhzdGQ6Om1ha2VfcGFpcihoTGlzdGVuZXIsIGNzTGlzdGVuZXIpKTsKK30KKworc3A8aGFyZHdhcmU6OklDYW1lcmFTZXJ2aWNlTGlzdGVuZXI+CitIaWRsQ2FtZXJhU2VydmljZTo6c2VhcmNoTGlzdGVuZXJDYWNoZUxvY2tlZChzcDxIQ2FtZXJhU2VydmljZUxpc3RlbmVyPiBoTGlzdGVuZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIHNob3VsZFJlbW92ZSkgeworICAgIC8vIEdvIHRocm91Z2ggdGhlIG1MaXN0ZW5lcnMgbGlzdCBhbmQgY29tcGFyZSB0aGUgbGlzdGVuZXIgd2l0aCB0aGUgSElETAorICAgIC8vIGxpc3RlbmVyIHJlZ2lzdGVyZWQuCisgICAgYXV0byBpdCA9IG1MaXN0ZW5lcnMuYmVnaW4oKTsKKyAgICBzcDxJQ2FtZXJhU2VydmljZUxpc3RlbmVyPiBjc0xpc3RlbmVyID0gbnVsbHB0cjsKKyAgICBmb3IgKDtpdCAhPSBtTGlzdGVuZXJzLmVuZCgpOyBpdCsrKSB7CisgICAgICAgIGlmIChoYXJkd2FyZTo6aW50ZXJmYWNlc0VxdWFsKGl0LT5maXJzdCwgaExpc3RlbmVyKSkgeworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICB9CisgICAgaWYgKGl0ICE9IG1MaXN0ZW5lcnMuZW5kKCkpIHsKKyAgICAgICAgY3NMaXN0ZW5lciA9IGl0LT5zZWNvbmQ7CisgICAgICAgIGlmIChzaG91bGRSZW1vdmUpIHsKKyAgICAgICAgICBtTGlzdGVuZXJzLmVyYXNlKGl0KTsKKyAgICAgICAgfQorICAgIH0KKyAgICByZXR1cm4gY3NMaXN0ZW5lcjsKK30KKworUmV0dXJuPHZvaWQ+IEhpZGxDYW1lcmFTZXJ2aWNlOjphZGRMaXN0ZW5lcihjb25zdCBzcDxIQ2FtZXJhU2VydmljZUxpc3RlbmVyPiYgaENzTGlzdGVuZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFkZExpc3RlbmVyX2NiIF9oaWRsX2NiKSB7CisgICAgaWYgKG1BaWRsSUNhbWVyYVNlcnZpY2UgPT0gbnVsbHB0cikgeworICAgICAgICBfaGlkbF9jYihIU3RhdHVzOjpVTktOT1dOX0VSUk9SLCB7fSk7CisgICAgICAgIHJldHVybiBWb2lkKCk7CisgICAgfQorICAgIGlmIChoQ3NMaXN0ZW5lciA9PSBudWxscHRyKSB7CisgICAgICAgIEFMT0dFKCIlcyBsaXN0ZW5lciBtdXN0IG5vdCBiZSBOVUxMIiwgX19GVU5DVElPTl9fKTsKKyAgICAgICAgX2hpZGxfY2IoSFN0YXR1czo6SUxMRUdBTF9BUkdVTUVOVCwge30pOworICAgICAgICByZXR1cm4gVm9pZCgpOworICAgIH0KKyAgICBzcDxoYXJkd2FyZTo6SUNhbWVyYVNlcnZpY2VMaXN0ZW5lcj4gY3NMaXN0ZW5lciA9IG51bGxwdHI7CisgICAgLy8gQ2hlY2sgdGhlIGNhY2hlIGZvciBwcmV2aW91c2x5IHJlZ2lzdGVyZWQgY2FsbGJhY2tzCisgICAgeworICAgICAgICBNdXRleDo6QXV0b2xvY2sgbChtTGlzdGVuZXJMaXN0TG9jayk7CisgICAgICAgIGNzTGlzdGVuZXIgPSBzZWFyY2hMaXN0ZW5lckNhY2hlTG9ja2VkKGhDc0xpc3RlbmVyKTsKKyAgICAgICAgaWYgKGNzTGlzdGVuZXIgPT0gbnVsbHB0cikgeworICAgICAgICAgICAgLy8gV3JhcCBhbiBoQ3NMaXN0ZW5lciB3aXRoIEFpZGxDYW1lcmFTZXJ2aWNlTGlzdGVuZXIgYW5kIHBhc3MgaXQgdG8KKyAgICAgICAgICAgIC8vIENhbWVyYVNlcnZpY2UuCisgICAgICAgICAgICBjc0xpc3RlbmVyID0gbmV3IEgyQkNhbWVyYVNlcnZpY2VMaXN0ZW5lcihoQ3NMaXN0ZW5lcik7CisgICAgICAgICAgICAvLyBBZGQgdG8gY2FjaGUKKyAgICAgICAgICAgIGFkZFRvTGlzdGVuZXJDYWNoZUxvY2tlZChoQ3NMaXN0ZW5lciwgY3NMaXN0ZW5lcik7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBBTE9HRSgiJXM6IFRyeWluZyB0byBhZGQgYSBsaXN0ZW5lciAlcCBhbHJlYWR5IHJlZ2lzdGVyZWQiLAorICAgICAgICAgICAgICAgICAgX19GVU5DVElPTl9fLCBoQ3NMaXN0ZW5lci5nZXQoKSk7CisgICAgICAgICAgICBfaGlkbF9jYihIU3RhdHVzOjpJTExFR0FMX0FSR1VNRU5ULCB7fSk7CisgICAgICAgICAgICByZXR1cm4gVm9pZCgpOworICAgICAgICB9CisgICAgfQorICAgIHN0ZDo6dmVjdG9yPGhhcmR3YXJlOjpDYW1lcmFTdGF0dXM+IGNhbWVyYVN0YXR1c0FuZElkc3t9OworICAgIGJpbmRlcjo6U3RhdHVzIHNlcnZpY2VSZXQgPSBtQWlkbElDYW1lcmFTZXJ2aWNlLT5hZGRMaXN0ZW5lcihjc0xpc3RlbmVyLCAmY2FtZXJhU3RhdHVzQW5kSWRzKTsKKyAgICBIU3RhdHVzIHN0YXR1cyA9IEhTdGF0dXM6Ok5PX0VSUk9SOworICAgIGlmICghc2VydmljZVJldC5pc09rKCkpIHsKKyAgICAgIEFMT0dFKCIlczogVW5hYmxlIHRvIGFkZCBjYW1lcmEgZGV2aWNlIHN0YXR1cyBsaXN0ZW5lciIsIF9fRlVOQ1RJT05fXyk7CisgICAgICBzdGF0dXMgPSBCMkhTdGF0dXMoc2VydmljZVJldCk7CisgICAgICBfaGlkbF9jYihzdGF0dXMsIHt9KTsKKyAgICAgIHJldHVybiBWb2lkKCk7CisgICAgfQorICAgIGhpZGxfdmVjPEhDYW1lcmFTdGF0dXNBbmRJZD4gaENhbWVyYVN0YXR1c0FuZElkczsKKyAgICAvL0NvbnZlcnQgY2FtZXJhU3RhdHVzQW5kSWRzIHRvIEhJREwgYW5kIGNhbGwgY2FsbGJhY2sKKyAgICBjb252ZXJ0VG9IaWRsKGNhbWVyYVN0YXR1c0FuZElkcywgJmhDYW1lcmFTdGF0dXNBbmRJZHMpOworICAgIF9oaWRsX2NiKHN0YXR1cywgaENhbWVyYVN0YXR1c0FuZElkcyk7CisgICAgcmV0dXJuIFZvaWQoKTsKK30KKworUmV0dXJuPEhTdGF0dXM+IEhpZGxDYW1lcmFTZXJ2aWNlOjpyZW1vdmVMaXN0ZW5lcihjb25zdCBzcDxIQ2FtZXJhU2VydmljZUxpc3RlbmVyPiYgaENzTGlzdGVuZXIpIHsKKyAgICBpZiAoaENzTGlzdGVuZXIgPT0gbnVsbHB0cikgeworICAgICAgICBBTE9HRSgiJXMgbGlzdGVuZXIgbXVzdCBub3QgYmUgTlVMTCIsIF9fRlVOQ1RJT05fXyk7CisgICAgICAgIHJldHVybiBIU3RhdHVzOjpJTExFR0FMX0FSR1VNRU5UOworICAgIH0KKyAgICBzcDxJQ2FtZXJhU2VydmljZUxpc3RlbmVyPiBjc0xpc3RlbmVyID0gbnVsbHB0cjsKKyAgICB7CisgICAgICAgIE11dGV4OjpBdXRvbG9jayBsKG1MaXN0ZW5lckxpc3RMb2NrKTsKKyAgICAgICAgY3NMaXN0ZW5lciA9IHNlYXJjaExpc3RlbmVyQ2FjaGVMb2NrZWQoaENzTGlzdGVuZXIsIC8qcmVtb3ZlSWZGb3VuZCovdHJ1ZSk7CisgICAgfQorICAgIGlmIChjc0xpc3RlbmVyICE9IG51bGxwdHIpIHsKKyAgICAgICAgICBtQWlkbElDYW1lcmFTZXJ2aWNlLT5yZW1vdmVMaXN0ZW5lcihjc0xpc3RlbmVyKTsKKyAgICB9IGVsc2UgeworICAgICAgICBBTE9HRSgiJXMgUmVtb3ZpbmcgdW5yZWdpc3RlcmVkIGxpc3RlbmVyICVwIiwgX19GVU5DVElPTl9fLCBoQ3NMaXN0ZW5lci5nZXQoKSk7CisgICAgICAgIHJldHVybiBIU3RhdHVzOjpJTExFR0FMX0FSR1VNRU5UOworICAgIH0KKyAgICByZXR1cm4gSFN0YXR1czo6Tk9fRVJST1I7Cit9CisKK1JldHVybjx2b2lkPiBIaWRsQ2FtZXJhU2VydmljZTo6Z2V0Q2FtZXJhVmVuZG9yVGFnU2VjdGlvbnMoZ2V0Q2FtZXJhVmVuZG9yVGFnU2VjdGlvbnNfY2IgX2hpZGxfY2IpIHsKKyAgICBzcDxWZW5kb3JUYWdEZXNjcmlwdG9yQ2FjaGU+IGdDYWNoZSA9IFZlbmRvclRhZ0Rlc2NyaXB0b3JDYWNoZTo6Z2V0R2xvYmFsVmVuZG9yVGFnQ2FjaGUoKTsKKyAgICBpZiAoZ0NhY2hlID09IG51bGxwdHIpIHsKKyAgICAgICAgX2hpZGxfY2IoSFN0YXR1czo6VU5LTk9XTl9FUlJPUiwge30pOworICAgICAgICByZXR1cm4gVm9pZCgpOworICAgIH0KKyAgICBjb25zdCBzdGQ6OnVub3JkZXJlZF9tYXA8bWV0YWRhdGFfdmVuZG9yX2lkX3QsIHNwPGFuZHJvaWQ6OlZlbmRvclRhZ0Rlc2NyaXB0b3I+PgorICAgICAgICAgICAgJnZlbmRvcklkc0FuZFRhZ0Rlc2NzID0gZ0NhY2hlLT5nZXRWZW5kb3JJZHNBbmRUYWdEZXNjcmlwdG9ycygpOworICAgIGlmICh2ZW5kb3JJZHNBbmRUYWdEZXNjcy5zaXplKCkgPT0gMCkgeworICAgICAgICBfaGlkbF9jYihIU3RhdHVzOjpVTktOT1dOX0VSUk9SLCB7fSk7CisgICAgICAgIHJldHVybiBWb2lkKCk7CisgICAgfQorCisgICAgaGlkbF92ZWM8SFByb3ZpZGVySWRBbmRWZW5kb3JUYWdTZWN0aW9ucz4gaFRhZ0lkc0FuZFZlbmRvclRhZ1NlY3Rpb25zOworICAgIGhUYWdJZHNBbmRWZW5kb3JUYWdTZWN0aW9ucy5yZXNpemUodmVuZG9ySWRzQW5kVGFnRGVzY3Muc2l6ZSgpKTsKKyAgICBzaXplX3QgaiA9IDA7CisgICAgZm9yIChhdXRvICZ2ZW5kb3JJZEFuZFRhZ0Rlc2NzIDogdmVuZG9ySWRzQW5kVGFnRGVzY3MpIHsKKyAgICAgICAgaGlkbF92ZWM8SFZlbmRvclRhZ1NlY3Rpb24+IGhWZW5kb3JUYWdTZWN0aW9uczsKKyAgICAgICAgc3A8VmVuZG9yVGFnRGVzY3JpcHRvcj4gZGVzYyA9IHZlbmRvcklkQW5kVGFnRGVzY3Muc2Vjb25kOworICAgICAgICBjb25zdCBTb3J0ZWRWZWN0b3I8U3RyaW5nOD4qIHNlY3Rpb25OYW1lcyA9IGRlc2MtPmdldEFsbFNlY3Rpb25OYW1lcygpOworICAgICAgICBzaXplX3QgbnVtU2VjdGlvbnMgPSBzZWN0aW9uTmFtZXMtPnNpemUoKTsKKyAgICAgICAgc3RkOjp2ZWN0b3I8c3RkOjp2ZWN0b3I8SFZlbmRvclRhZz4+IHRhZ3NCeVNlY3Rpb24obnVtU2VjdGlvbnMpOworICAgICAgICBpbnQgdGFnQ291bnQgPSBkZXNjLT5nZXRUYWdDb3VudCgpOworICAgICAgICBzdGQ6OnZlY3Rvcjx1aW50MzJfdD4gdGFncyh0YWdDb3VudCk7CisgICAgICAgIGRlc2MtPmdldFRhZ0FycmF5KHRhZ3MuZGF0YSgpKTsKKyAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCB0YWdDb3VudDsgaSsrKSB7CisgICAgICAgICAgICBIVmVuZG9yVGFnIHZ0OworICAgICAgICAgICAgdnQudGFnSWQgPSB0YWdzW2ldOworICAgICAgICAgICAgdnQudGFnTmFtZSA9IGRlc2MtPmdldFRhZ05hbWUodGFnc1tpXSk7CisgICAgICAgICAgICB2dC50YWdUeXBlID0gKEhDYW1lcmFNZXRhZGF0YVR5cGUpIGRlc2MtPmdldFRhZ1R5cGUodGFnc1tpXSk7CisgICAgICAgICAgICBzc2l6ZV90IHNlY3Rpb25JZHggPSBkZXNjLT5nZXRTZWN0aW9uSW5kZXgodGFnc1tpXSk7CisgICAgICAgICAgICB0YWdzQnlTZWN0aW9uW3NlY3Rpb25JZHhdLnB1c2hfYmFjayh2dCk7CisgICAgICAgIH0KKyAgICAgICAgaFZlbmRvclRhZ1NlY3Rpb25zLnJlc2l6ZShudW1TZWN0aW9ucyk7CisgICAgICAgIGZvciAoc2l6ZV90IHMgPSAwOyBzIDwgbnVtU2VjdGlvbnM7IHMrKykgeworICAgICAgICAgICAgaFZlbmRvclRhZ1NlY3Rpb25zW3NdLnNlY3Rpb25OYW1lID0gKCpzZWN0aW9uTmFtZXMpW3NdLnN0cmluZygpOworICAgICAgICAgICAgaFZlbmRvclRhZ1NlY3Rpb25zW3NdLnRhZ3MgPSB0YWdzQnlTZWN0aW9uW3NdOworICAgICAgICB9CisgICAgICAgIEhQcm92aWRlcklkQW5kVmVuZG9yVGFnU2VjdGlvbnMgJmhQcm92aWRlcklkQW5kVmVuZG9yVGFnU2VjdGlvbnMgPQorICAgICAgICAgICAgICAgIGhUYWdJZHNBbmRWZW5kb3JUYWdTZWN0aW9uc1tqXTsKKyAgICAgICAgaFByb3ZpZGVySWRBbmRWZW5kb3JUYWdTZWN0aW9ucy5wcm92aWRlcklkID0gdmVuZG9ySWRBbmRUYWdEZXNjcy5maXJzdDsKKyAgICAgICAgaFByb3ZpZGVySWRBbmRWZW5kb3JUYWdTZWN0aW9ucy52ZW5kb3JUYWdTZWN0aW9ucyA9IHN0ZDo6bW92ZShoVmVuZG9yVGFnU2VjdGlvbnMpOworICAgICAgICBqKys7CisgICAgfQorICAgIF9oaWRsX2NiKEhTdGF0dXM6Ok5PX0VSUk9SLCBoVGFnSWRzQW5kVmVuZG9yVGFnU2VjdGlvbnMpOworICAgIHJldHVybiBWb2lkKCk7Cit9CisKK30gLy8gaW1wbGVtZW50YXRpb24KK30gLy8gVjJfMAorfSAvLyBzZXJ2aWNlCit9IC8vIGNhbWVyYXNlcnZpY2UKK30gLy8gZnJhbWV3b3JrcworfSAvLyBhbmRyb2lkCisKZGlmZiAtLWdpdCBhL3NlcnZpY2VzL2NhbWVyYS9saWJjYW1lcmFzZXJ2aWNlL2hpZGwvSGlkbENhbWVyYVNlcnZpY2UuaCBiL3NlcnZpY2VzL2NhbWVyYS9saWJjYW1lcmFzZXJ2aWNlL2hpZGwvSGlkbENhbWVyYVNlcnZpY2UuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lZWFkMGJjCi0tLSAvZGV2L251bGwKKysrIGIvc2VydmljZXMvY2FtZXJhL2xpYmNhbWVyYXNlcnZpY2UvaGlkbC9IaWRsQ2FtZXJhU2VydmljZS5oCkBAIC0wLDAgKzEsOTggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTggVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworCisjaWZuZGVmIEFORFJPSURfRlJBTUVXT1JLU19DQU1FUkFTRVJWSUNFX1YyXzBfQ0FNRVJBU0VSVklDRV9ICisjZGVmaW5lIEFORFJPSURfRlJBTUVXT1JLU19DQU1FUkFTRVJWSUNFX1YyXzBfQ0FNRVJBU0VSVklDRV9ICisKKyNpbmNsdWRlIDxtdXRleD4KKyNpbmNsdWRlIDx0aHJlYWQ+CisKKyNpbmNsdWRlIDxhbmRyb2lkL2ZyYW1ld29ya3MvY2FtZXJhc2VydmljZS9jb21tb24vMi4wL3R5cGVzLmg+CisjaW5jbHVkZSA8YW5kcm9pZC9mcmFtZXdvcmtzL2NhbWVyYXNlcnZpY2Uvc2VydmljZS8yLjAvSUNhbWVyYVNlcnZpY2UuaD4KKyNpbmNsdWRlIDxhbmRyb2lkL2ZyYW1ld29ya3MvY2FtZXJhc2VydmljZS9zZXJ2aWNlLzIuMC90eXBlcy5oPgorI2luY2x1ZGUgPGFuZHJvaWQvZnJhbWV3b3Jrcy9jYW1lcmFzZXJ2aWNlL2RldmljZS8yLjAvdHlwZXMuaD4KKworI2luY2x1ZGUgPGhpZGwvU3RhdHVzLmg+CisKKyNpbmNsdWRlIDxDYW1lcmFTZXJ2aWNlLmg+CisKK25hbWVzcGFjZSBhbmRyb2lkIHsKK25hbWVzcGFjZSBmcmFtZXdvcmtzIHsKK25hbWVzcGFjZSBjYW1lcmFzZXJ2aWNlIHsKK25hbWVzcGFjZSBzZXJ2aWNlIHsKK25hbWVzcGFjZSBWMl8wIHsKK25hbWVzcGFjZSBpbXBsZW1lbnRhdGlvbiB7CisKK3VzaW5nIGhhcmR3YXJlOjpoaWRsX3N0cmluZzsKK3VzaW5nIGhhcmR3YXJlOjpJQ2FtZXJhU2VydmljZUxpc3RlbmVyOwordXNpbmcgaGFyZHdhcmU6OlJldHVybjsKKwordXNpbmcgSENhbWVyYURldmljZUNhbGxiYWNrID0gZnJhbWV3b3Jrczo6Y2FtZXJhc2VydmljZTo6ZGV2aWNlOjpWMl8wOjpJQ2FtZXJhRGV2aWNlQ2FsbGJhY2s7Cit1c2luZyBIQ2FtZXJhTWV0YWRhdGEgPSBmcmFtZXdvcmtzOjpjYW1lcmFzZXJ2aWNlOjpzZXJ2aWNlOjpWMl8wOjpDYW1lcmFNZXRhZGF0YTsKK3VzaW5nIEhDYW1lcmFTZXJ2aWNlID0gZnJhbWV3b3Jrczo6Y2FtZXJhc2VydmljZTo6c2VydmljZTo6VjJfMDo6SUNhbWVyYVNlcnZpY2U7Cit1c2luZyBIQ2FtZXJhU2VydmljZUxpc3RlbmVyID0gZnJhbWV3b3Jrczo6Y2FtZXJhc2VydmljZTo6c2VydmljZTo6VjJfMDo6SUNhbWVyYVNlcnZpY2VMaXN0ZW5lcjsKK3VzaW5nIEhTdGF0dXMgPSBmcmFtZXdvcmtzOjpjYW1lcmFzZXJ2aWNlOjpjb21tb246OlYyXzA6OlN0YXR1czsKK3VzaW5nIEhDYW1lcmFTdGF0dXNBbmRJZCA9IGZyYW1ld29ya3M6OmNhbWVyYXNlcnZpY2U6OnNlcnZpY2U6OlYyXzA6OkNhbWVyYVN0YXR1c0FuZElkOworCitzdHJ1Y3QgSGlkbENhbWVyYVNlcnZpY2UgZmluYWwgOiBwdWJsaWMgSENhbWVyYVNlcnZpY2UgeworCisgICAgfkhpZGxDYW1lcmFTZXJ2aWNlKCkgeyB9OworCisgICAgLy8gTWV0aG9kcyBmcm9tIDo6YW5kcm9pZDo6ZnJhbWV3b3Jrczo6Y2FtZXJhc2VydmljZTo6c2VydmljZTo6VjIuMDo6SUNhbWVyYVNlcnZpY2UgZm9sbG93LgorCisgICAgUmV0dXJuPHZvaWQ+IGNvbm5lY3REZXZpY2UoY29uc3Qgc3A8SENhbWVyYURldmljZUNhbGxiYWNrPiYgY2FsbGJhY2ssCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgaGlkbF9zdHJpbmcmIGNhbWVyYUlkLCBjb25uZWN0RGV2aWNlX2NiIF9oaWRsX2NiKSBvdmVycmlkZTsKKworICAgIFJldHVybjx2b2lkPiBhZGRMaXN0ZW5lcihjb25zdCBzcDxIQ2FtZXJhU2VydmljZUxpc3RlbmVyPiYgbGlzdGVuZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFkZExpc3RlbmVyX2NiIF9oaWRsX2NiKSBvdmVycmlkZTsKKworICAgIFJldHVybjxIU3RhdHVzPiByZW1vdmVMaXN0ZW5lcihjb25zdCBzcDxIQ2FtZXJhU2VydmljZUxpc3RlbmVyPiYgbGlzdGVuZXIpIG92ZXJyaWRlOworCisgICAgUmV0dXJuPHZvaWQ+IGdldENhbWVyYUNoYXJhY3RlcmlzdGljcyhjb25zdCBoaWRsX3N0cmluZyYgY2FtZXJhSWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZXRDYW1lcmFDaGFyYWN0ZXJpc3RpY3NfY2IgX2hpZGxfY2IpIG92ZXJyaWRlOworCisgICAgUmV0dXJuPHZvaWQ+IGdldENhbWVyYVZlbmRvclRhZ1NlY3Rpb25zKGdldENhbWVyYVZlbmRvclRhZ1NlY3Rpb25zX2NiIF9oaWRsX2NiKSBvdmVycmlkZTsKKworICAgIC8vIFRoaXMgbWV0aG9kIHNob3VsZCBvbmx5IGJlIGNhbGxlZCBieSB0aGUgY2FtZXJhc2VydmVycyBtYWluIHRocmVhZCB0bworICAgIC8vIGluc3RhbnRpYXRlIHRoZSBoaWRsIGNhbWVyYXNlcnZlci4KKyAgICBzdGF0aWMgc3A8SGlkbENhbWVyYVNlcnZpY2U+IGdldEluc3RhbmNlKGFuZHJvaWQ6OkNhbWVyYVNlcnZpY2UgKmNzKTsKKworcHJpdmF0ZToKKyAgICBIaWRsQ2FtZXJhU2VydmljZShhbmRyb2lkOjpDYW1lcmFTZXJ2aWNlICpjcykgOiBtQWlkbElDYW1lcmFTZXJ2aWNlKGNzKSB7IH07CisKKyAgICBzcDxoYXJkd2FyZTo6SUNhbWVyYVNlcnZpY2VMaXN0ZW5lcj4gc2VhcmNoTGlzdGVuZXJDYWNoZUxvY2tlZCgKKyAgICAgICAgc3A8SENhbWVyYVNlcnZpY2VMaXN0ZW5lcj4gbGlzdGVuZXIsIC8qcmVtb3ZlSWZGb3VuZCovIGJvb2wgc2hvdWxkUmVtb3ZlID0gZmFsc2UpOworCisgICAgdm9pZCBhZGRUb0xpc3RlbmVyQ2FjaGVMb2NrZWQoc3A8SENhbWVyYVNlcnZpY2VMaXN0ZW5lcj4gaExpc3RlbmVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNwPGhhcmR3YXJlOjpJQ2FtZXJhU2VydmljZUxpc3RlbmVyPiBjc0xpc3RlbmVyKTsKKworICAgIGFuZHJvaWQ6OkNhbWVyYVNlcnZpY2UgKmNvbnN0IG1BaWRsSUNhbWVyYVNlcnZpY2UgPSBudWxscHRyOworCisgICAgTXV0ZXggbUxpc3RlbmVyTGlzdExvY2s7CisKKyAgICB1c2luZyBISUxpc3RlbmVycyA9CisgICAgICAgIHN0ZDo6cGFpcjxzcDxIQ2FtZXJhU2VydmljZUxpc3RlbmVyPiwgc3A8SUNhbWVyYVNlcnZpY2VMaXN0ZW5lcj4+OworICAgIHN0ZDo6bGlzdDxISUxpc3RlbmVycz4gbUxpc3RlbmVyczsKK307CisKK30gIC8vIG5hbWVzcGFjZSBpbXBsZW1lbnRhdGlvbgorfSAgLy8gbmFtZXNwYWNlIFYyXzAKK30gIC8vIG5hbWVzcGFjZSBzZXJ2aWNlCit9ICAvLyBuYW1lc3BhY2UgY2FtZXJhc2VydmljZQorfSAgLy8gbmFtZXNwYWNlIGZyYW1ld29ya3MKK30gIC8vIG5hbWVzcGFjZSBhbmRyb2lkCisKKyNlbmRpZiAgLy8gQU5EUk9JRF9GUkFNRVdPUktTX0NBTUVSQVNFUlZJQ0VfVjJfMF9DQU1FUkFTRVJWSUNFX0gKZGlmZiAtLWdpdCBhL3NlcnZpY2VzL2NhbWVyYS9saWJjYW1lcmFzZXJ2aWNlL3Rlc3RzL0FuZHJvaWQubWsgYi9zZXJ2aWNlcy9jYW1lcmEvbGliY2FtZXJhc2VydmljZS90ZXN0cy9BbmRyb2lkLm1rCmluZGV4IGY3NzA2OWMuLjhkODBmZjEgMTAwNjQ0Ci0tLSBhL3NlcnZpY2VzL2NhbWVyYS9saWJjYW1lcmFzZXJ2aWNlL3Rlc3RzL0FuZHJvaWQubWsKKysrIGIvc2VydmljZXMvY2FtZXJhL2xpYmNhbWVyYXNlcnZpY2UvdGVzdHMvQW5kcm9pZC5tawpAQCAtMzgsNiArMzgsNyBAQAogTE9DQUxfQ0ZMQUdTICs9IC1XYWxsIC1XZXh0cmEgLVdlcnJvcgogCiBMT0NBTF9NT0RVTEU6PSBjYW1lcmFzZXJ2aWNlX3Rlc3QKK0xPQ0FMX0NPTVBBVElCSUxJVFlfU1VJVEUgOj0gZGV2aWNlLXRlc3RzCiBMT0NBTF9NT0RVTEVfVEFHUyA6PSB0ZXN0cwogCiBpbmNsdWRlICQoQlVJTERfTkFUSVZFX1RFU1QpCmRpZmYgLS1naXQgYS9zZXJ2aWNlcy9jYW1lcmEvbGliY2FtZXJhc2VydmljZS90ZXN0cy9DYW1lcmFQcm92aWRlck1hbmFnZXJUZXN0LmNwcCBiL3NlcnZpY2VzL2NhbWVyYS9saWJjYW1lcmFzZXJ2aWNlL3Rlc3RzL0NhbWVyYVByb3ZpZGVyTWFuYWdlclRlc3QuY3BwCmluZGV4IGVmOTNkOWEuLjAwODZjNmMgMTAwNjQ0Ci0tLSBhL3NlcnZpY2VzL2NhbWVyYS9saWJjYW1lcmFzZXJ2aWNlL3Rlc3RzL0NhbWVyYVByb3ZpZGVyTWFuYWdlclRlc3QuY3BwCisrKyBiL3NlcnZpY2VzL2NhbWVyYS9saWJjYW1lcmFzZXJ2aWNlL3Rlc3RzL0NhbWVyYVByb3ZpZGVyTWFuYWdlclRlc3QuY3BwCkBAIC0xNjMsNyArMTYzLDcgQEAKICAgICAgICAgbVRlc3RDYW1lcmFQcm92aWRlciA9IHByb3ZpZGVyOwogICAgIH0KIAotICAgIHN0ZDo6c3RyaW5nIG1MYXN0UmVxdWVzdGVkU2VydmljZU5hbWU7CisgICAgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+IG1MYXN0UmVxdWVzdGVkU2VydmljZU5hbWVzOwogCiAgICAgdmlydHVhbCB+VGVzdEludGVyYWN0aW9uUHJveHkoKSB7fQogCkBAIC0xNzcsNyArMTc3LDcgQEAKIAogICAgIHZpcnR1YWwgc3A8aGFyZHdhcmU6OmNhbWVyYTo6cHJvdmlkZXI6OlYyXzQ6OklDYW1lcmFQcm92aWRlcj4gZ2V0U2VydmljZSgKICAgICAgICAgICAgIGNvbnN0IHN0ZDo6c3RyaW5nICZzZXJ2aWNlTmFtZSkgb3ZlcnJpZGUgewotICAgICAgICBtTGFzdFJlcXVlc3RlZFNlcnZpY2VOYW1lID0gc2VydmljZU5hbWU7CisgICAgICAgIG1MYXN0UmVxdWVzdGVkU2VydmljZU5hbWVzLnB1c2hfYmFjayhzZXJ2aWNlTmFtZSk7CiAgICAgICAgIHJldHVybiBtVGVzdENhbWVyYVByb3ZpZGVyOwogICAgIH0KIApAQCAtMjEwLDkgKzIxMCwxOCBAQAogICAgIHJlcyA9IHByb3ZpZGVyTWFuYWdlci0+aW5pdGlhbGl6ZShzdGF0dXNMaXN0ZW5lciwgJnNlcnZpY2VQcm94eSk7CiAgICAgQVNTRVJUX0VRKHJlcywgT0spIDw8ICJVbmFibGUgdG8gaW5pdGlhbGl6ZSBwcm92aWRlciBtYW5hZ2VyIjsKIAotICAgIGhhcmR3YXJlOjpoaWRsX3N0cmluZyBsZWdhY3lJbnN0YW5jZU5hbWUgPSAibGVnYWN5LzAiOwotICAgIEFTU0VSVF9FUShzZXJ2aWNlUHJveHkubUxhc3RSZXF1ZXN0ZWRTZXJ2aWNlTmFtZSwgbGVnYWN5SW5zdGFuY2VOYW1lKSA8PAorICAgIHN0ZDo6c3RyaW5nIGxlZ2FjeUluc3RhbmNlTmFtZSA9ICJsZWdhY3kvMCI7CisgICAgc3RkOjpzdHJpbmcgZXh0ZXJuYWxJbnN0YW5jZU5hbWUgPSAiZXh0ZXJuYWwvMCI7CisgICAgYm9vbCBnb3RMZWdhY3kgPSBmYWxzZTsKKyAgICBib29sIGdvdEV4dGVybmFsID0gZmFsc2U7CisgICAgZm9yIChhdXRvJiBzZXJ2aWNlTmFtZSA6IHNlcnZpY2VQcm94eS5tTGFzdFJlcXVlc3RlZFNlcnZpY2VOYW1lcykgeworICAgICAgICBpZiAoc2VydmljZU5hbWUgPT0gbGVnYWN5SW5zdGFuY2VOYW1lKSBnb3RMZWdhY3kgPSB0cnVlOworICAgICAgICBpZiAoc2VydmljZU5hbWUgPT0gZXh0ZXJuYWxJbnN0YW5jZU5hbWUpIGdvdEV4dGVybmFsID0gdHJ1ZTsKKyAgICB9CisgICAgQVNTRVJUX1RSVUUoZ290TGVnYWN5KSA8PAogICAgICAgICAgICAgIkxlZ2FjeSBpbnN0YW5jZSBub3QgcmVxdWVzdGVkIGZyb20gc2VydmljZSBtYW5hZ2VyIjsKKyAgICBBU1NFUlRfVFJVRShnb3RFeHRlcm5hbCkgPDwKKyAgICAgICAgICAgICJFeHRlcm5hbCBpbnN0YW5jZSBub3QgcmVxdWVzdGVkIGZyb20gc2VydmljZSBtYW5hZ2VyIjsKIAogICAgIGhhcmR3YXJlOjpoaWRsX3N0cmluZyB0ZXN0UHJvdmlkZXJGcUludGVyZmFjZU5hbWUgPQogICAgICAgICAgICAgImFuZHJvaWQuaGFyZHdhcmUuY2FtZXJhLnByb3ZpZGVyQDIuNDo6SUNhbWVyYVByb3ZpZGVyIjsKQEAgLTIyMSw3ICsyMzAsNyBAQAogICAgICAgICAgICAgdGVzdFByb3ZpZGVyRnFJbnRlcmZhY2VOYW1lLAogICAgICAgICAgICAgdGVzdFByb3ZpZGVySW5zdGFuY2VOYW1lLCBmYWxzZSk7CiAKLSAgICBBU1NFUlRfRVEoc2VydmljZVByb3h5Lm1MYXN0UmVxdWVzdGVkU2VydmljZU5hbWUsIHRlc3RQcm92aWRlckluc3RhbmNlTmFtZSkgPDwKKyAgICBBU1NFUlRfRVEoc2VydmljZVByb3h5Lm1MYXN0UmVxdWVzdGVkU2VydmljZU5hbWVzLmJhY2soKSwgdGVzdFByb3ZpZGVySW5zdGFuY2VOYW1lKSA8PAogICAgICAgICAgICAgIkluY29ycmVjdCBpbnN0YW5jZSByZXF1ZXN0ZWQgZnJvbSBzZXJ2aWNlIG1hbmFnZXIiOwogfQogCkBAIC0yNTUsNyArMjY0LDcgQEAKICAgICAgICAgICAgICJhbmRyb2lkLmhhcmR3YXJlLmNhbWVyYS5wcm92aWRlckAyLjQ6OklDYW1lcmFQcm92aWRlciI7CiAgICAgc2VydmljZVByb3h5Lm1NYW5hZ2VyTm90aWZpY2F0aW9uSW50ZXJmYWNlLT5vblJlZ2lzdHJhdGlvbigKICAgICAgICAgICAgIHRlc3RQcm92aWRlckZxSW50ZXJmYWNlTmFtZSwgdGVzdFByb3ZpZGVySW5zdGFuY2VOYW1lLCBmYWxzZSk7Ci0gICAgQVNTRVJUX0VRKHNlcnZpY2VQcm94eS5tTGFzdFJlcXVlc3RlZFNlcnZpY2VOYW1lLCB0ZXN0UHJvdmlkZXJJbnN0YW5jZU5hbWUpIDw8CisgICAgQVNTRVJUX0VRKHNlcnZpY2VQcm94eS5tTGFzdFJlcXVlc3RlZFNlcnZpY2VOYW1lcy5iYWNrKCksIHRlc3RQcm92aWRlckluc3RhbmNlTmFtZSkgPDwKICAgICAgICAgICAgICJJbmNvcnJlY3QgaW5zdGFuY2UgcmVxdWVzdGVkIGZyb20gc2VydmljZSBtYW5hZ2VyIjsKIAogICAgIGhhcmR3YXJlOjpoaWRsX3N0cmluZyBzZWN0aW9uTmFtZVNlY29uZCA9ICJTZWNvbmRWZW5kb3JUZXN0U2VjdGlvbiI7CkBAIC0yNzMsNyArMjgyLDcgQEAKICAgICBoYXJkd2FyZTo6aGlkbF9zdHJpbmcgdGVzdFByb3ZpZGVyU2Vjb25kSW5zdGFuY2VOYW1lID0gInRlc3QyLzAiOwogICAgIHNlcnZpY2VQcm94eS5tTWFuYWdlck5vdGlmaWNhdGlvbkludGVyZmFjZS0+b25SZWdpc3RyYXRpb24oCiAgICAgICAgICAgICB0ZXN0UHJvdmlkZXJGcUludGVyZmFjZU5hbWUsIHRlc3RQcm92aWRlclNlY29uZEluc3RhbmNlTmFtZSwgZmFsc2UpOwotICAgIEFTU0VSVF9FUShzZXJ2aWNlUHJveHkubUxhc3RSZXF1ZXN0ZWRTZXJ2aWNlTmFtZSwKKyAgICBBU1NFUlRfRVEoc2VydmljZVByb3h5Lm1MYXN0UmVxdWVzdGVkU2VydmljZU5hbWVzLmJhY2soKSwKICAgICAgICAgICAgICAgdGVzdFByb3ZpZGVyU2Vjb25kSW5zdGFuY2VOYW1lKSA8PAogICAgICAgICAgICAgIkluY29ycmVjdCBpbnN0YW5jZSByZXF1ZXN0ZWQgZnJvbSBzZXJ2aWNlIG1hbmFnZXIiOwogCmRpZmYgLS1naXQgYS9zZXJ2aWNlcy9jYW1lcmEvbGliY2FtZXJhc2VydmljZS90ZXN0cy9EaXN0b3J0aW9uTWFwcGVyVGVzdC5jcHAgYi9zZXJ2aWNlcy9jYW1lcmEvbGliY2FtZXJhc2VydmljZS90ZXN0cy9EaXN0b3J0aW9uTWFwcGVyVGVzdC5jcHAKaW5kZXggMmE2ODljNi4uNTQ5MzVjOSAxMDA2NDQKLS0tIGEvc2VydmljZXMvY2FtZXJhL2xpYmNhbWVyYXNlcnZpY2UvdGVzdHMvRGlzdG9ydGlvbk1hcHBlclRlc3QuY3BwCisrKyBiL3NlcnZpY2VzL2NhbWVyYS9saWJjYW1lcmFzZXJ2aWNlL3Rlc3RzL0Rpc3RvcnRpb25NYXBwZXJUZXN0LmNwcApAQCAtMTY3LDYgKzE2NywzMCBAQAogICAgIH0KIH0KIAorVEVTVChEaXN0b3J0aW9uTWFwcGVyVGVzdCwgQ2xhbXBDb25zaXN0ZW5jeSkgeworICAgIHN0YXR1c190IHJlczsKKworICAgIHN0ZDo6YXJyYXk8aW50MzJfdCwgND4gYWN0aXZlQXJyYXkgPSB7MCwgMCwgNDAzMiwgMzAyNH07CisgICAgRGlzdG9ydGlvbk1hcHBlciBtOworICAgIHNldHVwVGVzdE1hcHBlcigmbSwgaWRlbnRpdHlEaXN0b3J0aW9uLCB0ZXN0SUNhbCwgLyphY3RpdmVBcnJheSovIGFjdGl2ZUFycmF5LmRhdGEoKSwKKyAgICAgICAgICAgIC8qcHJlQ29ycmVjdGlvbkFjdGl2ZUFycmF5Ki8gYWN0aXZlQXJyYXkuZGF0YSgpKTsKKworICAgIGF1dG8gcmVjdHNPcmlnID0gYWN0aXZlQXJyYXk7CisgICAgcmVzID0gbS5tYXBDb3JyZWN0ZWRSZWN0VG9SYXcoYWN0aXZlQXJyYXkuZGF0YSgpLCAxLCAvKmNsYW1wKi90cnVlLCAvKnNpbXBsZSovIHRydWUpOworICAgIEFTU0VSVF9FUShyZXMsIE9LKTsKKworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgYWN0aXZlQXJyYXkuc2l6ZSgpOyBpKyspIHsKKyAgICAgICAgRVhQRUNUX0VRKGFjdGl2ZUFycmF5W2ldLCByZWN0c09yaWdbaV0pOworICAgIH0KKworICAgIHJlcyA9IG0ubWFwUmF3UmVjdFRvQ29ycmVjdGVkKGFjdGl2ZUFycmF5LmRhdGEoKSwgMSwgLypjbGFtcCovdHJ1ZSwgLypzaW1wbGUqLyB0cnVlKTsKKyAgICBBU1NFUlRfRVEocmVzLCBPSyk7CisKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGFjdGl2ZUFycmF5LnNpemUoKTsgaSsrKSB7CisgICAgICAgIEVYUEVDVF9FUShhY3RpdmVBcnJheVtpXSwgcmVjdHNPcmlnW2ldKTsKKyAgICB9Cit9CisKIFRFU1QoRGlzdG9ydGlvbk1hcHBlclRlc3QsIFNpbXBsZVRyYW5zZm9ybSkgewogICAgIHN0YXR1c190IHJlczsKIApkaWZmIC0tZ2l0IGEvc2VydmljZXMvY2FtZXJhL2xpYmNhbWVyYXNlcnZpY2UvdXRpbHMvQ2FtZXJhVGhyZWFkU3RhdGUuY3BwIGIvc2VydmljZXMvY2FtZXJhL2xpYmNhbWVyYXNlcnZpY2UvdXRpbHMvQ2FtZXJhVGhyZWFkU3RhdGUuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI5ZTM0NGIKLS0tIC9kZXYvbnVsbAorKysgYi9zZXJ2aWNlcy9jYW1lcmEvbGliY2FtZXJhc2VydmljZS91dGlscy9DYW1lcmFUaHJlYWRTdGF0ZS5jcHAKQEAgLTAsMCArMSw1NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxOCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCisKKyNpbmNsdWRlICJDYW1lcmFUaHJlYWRTdGF0ZS5oIgorI2luY2x1ZGUgPGJpbmRlci9JUENUaHJlYWRTdGF0ZS5oPgorI2luY2x1ZGUgPGh3YmluZGVyL0lQQ1RocmVhZFN0YXRlLmg+CisjaW5jbHVkZSA8dW5pc3RkLmg+CisKK25hbWVzcGFjZSBhbmRyb2lkIHsKKworaW50IENhbWVyYVRocmVhZFN0YXRlOjpnZXRDYWxsaW5nVWlkKCkgeworICAgIGlmIChoYXJkd2FyZTo6SVBDVGhyZWFkU3RhdGU6OnNlbGYoKS0+aXNTZXJ2aW5nQ2FsbCgpKSB7CisgICAgICAgIHJldHVybiBoYXJkd2FyZTo6SVBDVGhyZWFkU3RhdGU6OnNlbGYoKS0+Z2V0Q2FsbGluZ1VpZCgpOworICAgIH0KKyAgICByZXR1cm4gSVBDVGhyZWFkU3RhdGU6OnNlbGYoKS0+Z2V0Q2FsbGluZ1VpZCgpOworfQorCitpbnQgQ2FtZXJhVGhyZWFkU3RhdGU6OmdldENhbGxpbmdQaWQoKSB7CisgICAgaWYgKGhhcmR3YXJlOjpJUENUaHJlYWRTdGF0ZTo6c2VsZigpLT5pc1NlcnZpbmdDYWxsKCkpIHsKKyAgICAgICAgcmV0dXJuIGhhcmR3YXJlOjpJUENUaHJlYWRTdGF0ZTo6c2VsZigpLT5nZXRDYWxsaW5nUGlkKCk7CisgICAgfQorICAgIHJldHVybiBJUENUaHJlYWRTdGF0ZTo6c2VsZigpLT5nZXRDYWxsaW5nUGlkKCk7Cit9CisKK2ludDY0X3QgQ2FtZXJhVGhyZWFkU3RhdGU6OmNsZWFyQ2FsbGluZ0lkZW50aXR5KCkgeworICAgIGlmIChoYXJkd2FyZTo6SVBDVGhyZWFkU3RhdGU6OnNlbGYoKS0+aXNTZXJ2aW5nQ2FsbCgpKSB7CisgICAgICAgIHJldHVybiBoYXJkd2FyZTo6SVBDVGhyZWFkU3RhdGU6OnNlbGYoKS0+Y2xlYXJDYWxsaW5nSWRlbnRpdHkoKTsKKyAgICB9CisgICAgcmV0dXJuIElQQ1RocmVhZFN0YXRlOjpzZWxmKCktPmNsZWFyQ2FsbGluZ0lkZW50aXR5KCk7Cit9CisKK3ZvaWQgQ2FtZXJhVGhyZWFkU3RhdGU6OnJlc3RvcmVDYWxsaW5nSWRlbnRpdHkoaW50NjRfdCB0b2tlbikgeworICAgIGlmIChoYXJkd2FyZTo6SVBDVGhyZWFkU3RhdGU6OnNlbGYoKS0+aXNTZXJ2aW5nQ2FsbCgpKSB7CisgICAgICAgIGhhcmR3YXJlOjpJUENUaHJlYWRTdGF0ZTo6c2VsZigpLT5yZXN0b3JlQ2FsbGluZ0lkZW50aXR5KHRva2VuKTsKKyAgICB9IGVsc2UgeworICAgICAgICBJUENUaHJlYWRTdGF0ZTo6c2VsZigpLT5yZXN0b3JlQ2FsbGluZ0lkZW50aXR5KHRva2VuKTsKKyAgICB9CisgICAgcmV0dXJuOworfQorCit9IC8vIGFuZHJvaWQKZGlmZiAtLWdpdCBhL3NlcnZpY2VzL2NhbWVyYS9saWJjYW1lcmFzZXJ2aWNlL3V0aWxzL0NhbWVyYVRocmVhZFN0YXRlLmggYi9zZXJ2aWNlcy9jYW1lcmEvbGliY2FtZXJhc2VydmljZS91dGlscy9DYW1lcmFUaHJlYWRTdGF0ZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUxYTcwZGUKLS0tIC9kZXYvbnVsbAorKysgYi9zZXJ2aWNlcy9jYW1lcmEvbGliY2FtZXJhc2VydmljZS91dGlscy9DYW1lcmFUaHJlYWRTdGF0ZS5oCkBAIC0wLDAgKzEsMzEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTggVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworCisjaW5jbHVkZSA8c3RkaW50Lmg+CisKK25hbWVzcGFjZSBhbmRyb2lkIHsKK2NsYXNzIENhbWVyYVRocmVhZFN0YXRlIHsKK3B1YmxpYzoKKyAgc3RhdGljIGludDY0X3QgY2xlYXJDYWxsaW5nSWRlbnRpdHkoKTsKKworICBzdGF0aWMgdm9pZCByZXN0b3JlQ2FsbGluZ0lkZW50aXR5KGludDY0X3QgdG9rZW4pOworCisgIHN0YXRpYyBpbnQgZ2V0Q2FsbGluZ1VpZCgpOworCisgIHN0YXRpYyBpbnQgZ2V0Q2FsbGluZ1BpZCgpOworfTsKKworfSAvLyBhbmRyb2lkCmRpZmYgLS1naXQgYS9zZXJ2aWNlcy9jYW1lcmEvbGliY2FtZXJhc2VydmljZS91dGlscy9UYWdNb25pdG9yLmNwcCBiL3NlcnZpY2VzL2NhbWVyYS9saWJjYW1lcmFzZXJ2aWNlL3V0aWxzL1RhZ01vbml0b3IuY3BwCmluZGV4IGMwYTM1M2YuLmY0YzQ5ZWMgMTAwNjQ0Ci0tLSBhL3NlcnZpY2VzL2NhbWVyYS9saWJjYW1lcmFzZXJ2aWNlL3V0aWxzL1RhZ01vbml0b3IuY3BwCisrKyBiL3NlcnZpY2VzL2NhbWVyYS9saWJjYW1lcmFzZXJ2aWNlL3V0aWxzL1RhZ01vbml0b3IuY3BwCkBAIC00OSw3ICs0OSw4IEBACiAgICAgc3RkOjpsb2NrX2d1YXJkPHN0ZDo6bXV0ZXg+IGxvY2sobU1vbml0b3JNdXRleCk7CiAKICAgICAvLyBFeHBhbmQgc2hvcnRoYW5kcwotICAgIGlmIChzc2l6ZV90IGlkeCA9IHRhZ05hbWVzLmZpbmQoIjNhIikgIT0gLTEpIHsKKyAgICBzc2l6ZV90IGlkeCA9IHRhZ05hbWVzLmZpbmQoIjNhIik7CisgICAgaWYgKGlkeCAhPSAtMSkgewogICAgICAgICBzc2l6ZV90IGVuZCA9IHRhZ05hbWVzLmZpbmQoIiwiLCBpZHgpOwogICAgICAgICBjaGFyKiBzdGFydCA9IHRhZ05hbWVzLmxvY2tCdWZmZXIodGFnTmFtZXMuc2l6ZSgpKTsKICAgICAgICAgc3RhcnRbaWR4XSA9ICdcMCc7CmRpZmYgLS1naXQgYS9zZXJ2aWNlcy9tZWRpYWFuYWx5dGljcy9NZWRpYUFuYWx5dGljc1NlcnZpY2UuY3BwIGIvc2VydmljZXMvbWVkaWFhbmFseXRpY3MvTWVkaWFBbmFseXRpY3NTZXJ2aWNlLmNwcAppbmRleCA0YjA1Mzk1Li5hZTgzMmJhIDEwMDY0NAotLS0gYS9zZXJ2aWNlcy9tZWRpYWFuYWx5dGljcy9NZWRpYUFuYWx5dGljc1NlcnZpY2UuY3BwCisrKyBiL3NlcnZpY2VzL21lZGlhYW5hbHl0aWNzL01lZGlhQW5hbHl0aWNzU2VydmljZS5jcHAKQEAgLTI2LDYgKzI2LDcgQEAKICNpbmNsdWRlIDxzeXMvc3RhdC5oPgogI2luY2x1ZGUgPHN5cy90aW1lLmg+CiAjaW5jbHVkZSA8ZGlyZW50Lmg+CisjaW5jbHVkZSA8cHRocmVhZC5oPgogI2luY2x1ZGUgPHVuaXN0ZC5oPgogCiAjaW5jbHVkZSA8c3RyaW5nLmg+CkBAIC04MCwxMSArODEsMTggQEAKICAgICB1c2luZyBuYW1lc3BhY2UgYW5kcm9pZDo6Y29udGVudDo6cG07CiAKIC8vIGluZGl2aWR1YWwgcmVjb3JkcyBrZXB0IGluIG1lbW9yeTogYWdlIG9yIGNvdW50Ci0vLyBhZ2U6IDw9IDM2IGhvdXJzICgxLjUgZGF5cykKKy8vIGFnZTogPD0gMjggaG91cnMgKDEgMS82IGRheXMpCiAvLyBjb3VudDogaGFyZCBsaW1pdCBvZiAjIHJlY29yZHMKIC8vICgwIGZvciBlaXRoZXIgb2YgdGhlc2UgZGlzYWJsZXMgdGhhdCB0aHJlc2hvbGQpCi1zdGF0aWMgY29uc3QgbnNlY3NfdCBrTWF4UmVjb3JkQWdlTnMgPSAgMzYgKiAzNjAwICogKDEwMDAqMTAwMCoxMDAwbGwpOwotc3RhdGljIGNvbnN0IGludCBrTWF4UmVjb3JkcyAgICA9IDA7CisvLworc3RhdGljIGNvbnN0ZXhwciBuc2Vjc190IGtNYXhSZWNvcmRBZ2VOcyA9ICAyOCAqIDM2MDAgKiAoMTAwMCoxMDAwKjEwMDBsbCk7CitzdGF0aWMgY29uc3RleHByIGludCBrTWF4UmVjb3JkcyAgICA9IDA7CisKKy8vIG1heCB3ZSBleHBpcmUgaW4gYSBzaW5nbGUgY2FsbCwgdG8gY29uc3RyYWluIGhvdyBsb25nIHdlIGhvbGQgdGhlCisvLyBtdXRleCwgd2hpY2ggYWxzbyBjb25zdHJhaW5zIGhvdyBsb25nIGEgY2xpZW50IG1pZ2h0IHdhaXQuCitzdGF0aWMgY29uc3RleHByIGludCBrTWF4RXhwaXJlZEF0T25jZSA9IDUwOworCisvLyBUT0RPOiBuZWVkIHRvIGxvb2sgYXQgdHVuaW5nIGtNYXhSZWNvcmRzIGFuZCBmcmllbmRzIGZvciBsb3ctbWVtb3J5IGRldmljZXMKIAogc3RhdGljIGNvbnN0IGNoYXIgKmtTZXJ2aWNlTmFtZSA9ICJtZWRpYS5tZXRyaWNzIjsKIApAQCAtOTYsNiArMTA0LDcgQEAKIE1lZGlhQW5hbHl0aWNzU2VydmljZTo6TWVkaWFBbmFseXRpY3NTZXJ2aWNlKCkKICAgICAgICAgOiBtTWF4UmVjb3JkcyhrTWF4UmVjb3JkcyksCiAgICAgICAgICAgbU1heFJlY29yZEFnZU5zKGtNYXhSZWNvcmRBZ2VOcyksCisgICAgICAgICAgbU1heFJlY29yZHNFeHBpcmVkQXRPbmNlKGtNYXhFeHBpcmVkQXRPbmNlKSwKICAgICAgICAgICBtRHVtcFByb3RvKE1lZGlhQW5hbHl0aWNzSXRlbTo6UFJPVE9fVjEpLAogICAgICAgICAgIG1EdW1wUHJvdG9EZWZhdWx0KE1lZGlhQW5hbHl0aWNzSXRlbTo6UFJPVE9fVjEpIHsKIApAQCAtNDMyLDIzICs0NDEsMjkgQEAKIC8vCiAvLyBPdXIgQ2hlYXAgaW4tY29yZSwgbm9uLXBlcnNpc3RlbnQgcmVjb3JkcyBtYW5hZ2VtZW50LgogCi0vLyBpbnNlcnQgYXBwcm9wcmlhdGVseSBpbnRvIHF1ZXVlCi12b2lkIE1lZGlhQW5hbHl0aWNzU2VydmljZTo6c2F2ZUl0ZW0oTWVkaWFBbmFseXRpY3NJdGVtICogaXRlbSkKKworLy8gd2UgaG9sZCBtTG9jayB3aGVuIHdlIGdldCBoZXJlCisvLyBpZiBpdGVtICE9IE5VTEwsIGl0J3MgdGhlIGl0ZW0gd2UganVzdCBpbnNlcnRlZAorLy8gdHJ1ZSA9PSBtb3JlIGl0ZW1zIGVsaWdpYmxlIHRvIGJlIHJlY292ZXJlZAorYm9vbCBNZWRpYUFuYWx5dGljc1NlcnZpY2U6OmV4cGlyYXRpb25zX2woTWVkaWFBbmFseXRpY3NJdGVtICppdGVtKQogewotCi0gICAgTXV0ZXg6OkF1dG9sb2NrIF9sKG1Mb2NrKTsKLSAgICAvLyBtdXRleCBiZXR3ZWVuIGluc2VydGlvbiBhbmQgZHVtcGluZyB0aGUgY29udGVudHMKLQotICAgIC8vIHdlIHdhbnQgdG8gZHVtcCAnaW4gRklGTyBvcmRlcicsIHNvIGluc2VydCBhdCB0aGUgZW5kCi0gICAgbUl0ZW1zLnB1c2hfYmFjayhpdGVtKTsKKyAgICBib29sIG1vcmUgPSBmYWxzZTsKKyAgICBpbnQgaGFuZGxlZCA9IDA7CiAKICAgICAvLyBrZWVwIHJlbW92aW5nIG9sZCByZWNvcmRzIHRoZSBmcm9udCB1bnRpbCB3ZSdyZSBpbi1ib3VuZHMgKGNvdW50KQorICAgIC8vIHNpbmNlIHdlIGludm9rZSB0aGlzIHdpdGggZWFjaCBpbnNlcnRpb24sIGl0IHNob3VsZCBiZSAwLzEgaXRlcmF0aW9ucy4KICAgICBpZiAobU1heFJlY29yZHMgPiAwKSB7CiAgICAgICAgIHdoaWxlIChtSXRlbXMuc2l6ZSgpID4gKHNpemVfdCkgbU1heFJlY29yZHMpIHsKICAgICAgICAgICAgIE1lZGlhQW5hbHl0aWNzSXRlbSAqIG9pdGVtID0gKihtSXRlbXMuYmVnaW4oKSk7CiAgICAgICAgICAgICBpZiAob2l0ZW0gPT0gaXRlbSkgewogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKGhhbmRsZWQgPj0gbU1heFJlY29yZHNFeHBpcmVkQXRPbmNlKSB7CisgICAgICAgICAgICAgICAgLy8gdW5saWtlbHkgaW4gdGhpcyBsb29wCisgICAgICAgICAgICAgICAgbW9yZSA9IHRydWU7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBoYW5kbGVkKys7CiAgICAgICAgICAgICBtSXRlbXMuZXJhc2UobUl0ZW1zLmJlZ2luKCkpOwogICAgICAgICAgICAgZGVsZXRlIG9pdGVtOwogICAgICAgICAgICAgbUl0ZW1zRGlzY2FyZGVkKys7CkBAIC00NTYsOCArNDcxLDggQEAKICAgICAgICAgfQogICAgIH0KIAotICAgIC8vIGtlZXAgcmVtb3Zpbmcgb2xkIHJlY29yZHMgdGhlIGZyb250IHVudGlsIHdlJ3JlIGluLWJvdW5kcyAoY291bnQpCi0gICAgLy8gTkI6IGV4cGlyZWQgZW50cmllcyBhcmVuJ3QgcmVtb3ZlZCB1bnRpbCB0aGUgbmV4dCBpbnNlcnRpb24sIHdoaWNoIGNvdWxkIGJlIGEgd2hpbGUKKyAgICAvLyBrZWVwIHJlbW92aW5nIG9sZCByZWNvcmRzIHRoZSBmcm9udCB1bnRpbCB3ZSdyZSBpbi1ib3VuZHMgKGFnZSkKKyAgICAvLyBsaW1pdGVkIHRvIG1NYXhSZWNvcmRzRXhwaXJlZEF0T25jZSBpdGVtcyBwZXIgaW52b2NhdGlvbi4KICAgICBpZiAobU1heFJlY29yZEFnZU5zID4gMCkgewogICAgICAgICBuc2Vjc190IG5vdyA9IHN5c3RlbVRpbWUoU1lTVEVNX1RJTUVfUkVBTFRJTUUpOwogICAgICAgICB3aGlsZSAobUl0ZW1zLnNpemUoKSA+IDApIHsKQEAgLTQ3MSwxOCArNDg2LDcyIEBACiAgICAgICAgICAgICAgICAgLy8gdGhpcyAoYW5kIHRoZSByZXN0KSBhcmUgcmVjZW50IGVub3VnaCB0byBrZWVwCiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoaGFuZGxlZCA+PSBtTWF4UmVjb3Jkc0V4cGlyZWRBdE9uY2UpIHsKKyAgICAgICAgICAgICAgICAvLyB0aGlzIHJlcHJlc2VudHMgIm9uZSB0b28gbWFueSI7IHRlbGwgY2FsbGVyIHRoZXJlIGFyZQorICAgICAgICAgICAgICAgIC8vIG1vcmUgdG8gYmUgcmVjbGFpbWVkLgorICAgICAgICAgICAgICAgIG1vcmUgPSB0cnVlOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaGFuZGxlZCsrOwogICAgICAgICAgICAgbUl0ZW1zLmVyYXNlKG1JdGVtcy5iZWdpbigpKTsKICAgICAgICAgICAgIGRlbGV0ZSBvaXRlbTsKICAgICAgICAgICAgIG1JdGVtc0Rpc2NhcmRlZCsrOwogICAgICAgICAgICAgbUl0ZW1zRGlzY2FyZGVkRXhwaXJlKys7CiAgICAgICAgIH0KICAgICB9CisKKyAgICAvLyB3ZSBvbmx5IGluZGljYXRlIHdoZXRoZXIgdGhlcmUncyBtb3JlIHRvIGNsZWFuOworICAgIC8vIGNhbGxlciBjaG9vc2VzIHdoZXRoZXIgdG8gc2NoZWR1bGUgZnVydGhlciBjbGVhbnVwLgorICAgIHJldHVybiBtb3JlOworfQorCisvLyBwcm9jZXNzIGV4cGlyYXRpb25zIGluIGJpdGUgc2l6ZWQgY2h1bmtzLCBhbGxvd2luZyBuZXcgaW5zZXJ0aW9ucyB0aHJvdWdoCisvLyBydW5zIGluIGEgcHRocmVhZCBzcGVjaWZpY2FsbHkgc3RhcnRlZCBmb3IgdGhpcyAod2hpY2ggdGhlbiBleGl0cykKK2Jvb2wgTWVkaWFBbmFseXRpY3NTZXJ2aWNlOjpwcm9jZXNzRXhwaXJhdGlvbnMoKQoreworICAgIGJvb2wgbW9yZTsKKyAgICBkbyB7CisgICAgICAgIHNsZWVwKDEpOworICAgICAgICB7CisgICAgICAgICAgICBNdXRleDo6QXV0b2xvY2sgX2wobUxvY2spOworICAgICAgICAgICAgbW9yZSA9IGV4cGlyYXRpb25zX2woTlVMTCk7CisgICAgICAgICAgICBpZiAoIW1vcmUpIHsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0gd2hpbGUgKG1vcmUpOworICAgIHJldHVybiB0cnVlOyAgICAgICAgLy8gdmFsdWUgaXMgZm9yIHN0ZDo6ZnV0dXJlIHRocmVhZCBzeW5jaHJvbml6YXRpb24KK30KKworLy8gaW5zZXJ0IGFwcHJvcHJpYXRlbHkgaW50byBxdWV1ZQordm9pZCBNZWRpYUFuYWx5dGljc1NlcnZpY2U6OnNhdmVJdGVtKE1lZGlhQW5hbHl0aWNzSXRlbSAqIGl0ZW0pCit7CisKKyAgICBNdXRleDo6QXV0b2xvY2sgX2wobUxvY2spOworICAgIC8vIG11dGV4IGJldHdlZW4gaW5zZXJ0aW9uIGFuZCBkdW1waW5nIHRoZSBjb250ZW50cworCisgICAgLy8gd2Ugd2FudCB0byBkdW1wICdpbiBGSUZPIG9yZGVyJywgc28gaW5zZXJ0IGF0IHRoZSBlbmQKKyAgICBtSXRlbXMucHVzaF9iYWNrKGl0ZW0pOworCisgICAgLy8gY2xlYW4gb2xkIHN0dWZmIGZyb20gdGhlIHF1ZXVlCisgICAgYm9vbCBtb3JlID0gZXhwaXJhdGlvbnNfbChpdGVtKTsKKworICAgIC8vIGNvbnNpZGVyIHNjaGVkdWxpbmcgc29tZSBhc3luY2hyb25vdXMgY2xlYW5pbmcsIGlmIG5vdCBydW5uaW5nCisgICAgaWYgKG1vcmUpIHsKKyAgICAgICAgaWYgKCFtRXhwaXJlRnV0dXJlLnZhbGlkKCkKKyAgICAgICAgICAgIHx8IG1FeHBpcmVGdXR1cmUud2FpdF9mb3Ioc3RkOjpjaHJvbm86OnNlY29uZHMoMCkpID09IHN0ZDo6ZnV0dXJlX3N0YXR1czo6cmVhZHkpIHsKKworICAgICAgICAgICAgbUV4cGlyZUZ1dHVyZSA9IHN0ZDo6YXN5bmMoc3RkOjpsYXVuY2g6OmFzeW5jLCBbdGhpc10oKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3JldHVybiB0aGlzLT5wcm9jZXNzRXhwaXJhdGlvbnMoKTt9KTsKKyAgICAgICAgfQorICAgIH0KIH0KIAogc3RhdGljIHN0ZDo6c3RyaW5nIGFsbG93ZWRLZXlzW10gPQogewogICAgICJhdWRpb3BvbGljeSIsCiAgICAgImF1ZGlvcmVjb3JkIiwKKyAgICAiYXVkaW90aHJlYWQiLAogICAgICJhdWRpb3RyYWNrIiwKICAgICAiY29kZWMiLAogICAgICJleHRyYWN0b3IiLApkaWZmIC0tZ2l0IGEvc2VydmljZXMvbWVkaWFhbmFseXRpY3MvTWVkaWFBbmFseXRpY3NTZXJ2aWNlLmggYi9zZXJ2aWNlcy9tZWRpYWFuYWx5dGljcy9NZWRpYUFuYWx5dGljc1NlcnZpY2UuaAppbmRleCBiM2M5MDJhLi42MzJjNjkyIDEwMDY0NAotLS0gYS9zZXJ2aWNlcy9tZWRpYWFuYWx5dGljcy9NZWRpYUFuYWx5dGljc1NlcnZpY2UuaAorKysgYi9zZXJ2aWNlcy9tZWRpYWFuYWx5dGljcy9NZWRpYUFuYWx5dGljc1NlcnZpY2UuaApAQCAtMjYsNiArMjYsOCBAQAogI2luY2x1ZGUgPHV0aWxzL1N0cmluZzguaD4KICNpbmNsdWRlIDx1dGlscy9MaXN0Lmg+CiAKKyNpbmNsdWRlIDxmdXR1cmU+CisKICNpbmNsdWRlIDxtZWRpYS9JTWVkaWFBbmFseXRpY3NTZXJ2aWNlLmg+CiAKIG5hbWVzcGFjZSBhbmRyb2lkIHsKQEAgLTQ0LDYgKzQ2LDggQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNZWRpYUFuYWx5dGljc1NlcnZpY2UoKTsKICAgICB2aXJ0dWFsICAgICAgICAgICAgICAgICB+TWVkaWFBbmFseXRpY3NTZXJ2aWNlKCk7CiAKKyAgICBib29sIHByb2Nlc3NFeHBpcmF0aW9ucygpOworCiAgcHJpdmF0ZToKICAgICBNZWRpYUFuYWx5dGljc0l0ZW06OlNlc3Npb25JRF90IGdlbmVyYXRlVW5pcXVlU2Vzc2lvbklEKCk7CiAKQEAgLTY1LDYgKzY5LDggQEAKICAgICBpbnQzMl90IG1NYXhSZWNvcmRzOwogICAgIC8vIGJ5IHRpbWUgKG5vbmUgb2xkZXIgdGhhbiB0aGlzIGxvbmcgYWdhbgogICAgIG5zZWNzX3QgbU1heFJlY29yZEFnZU5zOworICAgIC8vIG1heCB0byBleHBpcmUgcGVyIGV4cGlyYXRpb25zX2woKSBpbnZvY2F0aW9uCisgICAgaW50MzJfdCBtTWF4UmVjb3Jkc0V4cGlyZWRBdE9uY2U7CiAgICAgLy8KICAgICAvLyAjIG9mIHNldHMgb2Ygc3VtbWFyaWVzCiAgICAgaW50MzJfdCBtTWF4UmVjb3JkU2V0czsKQEAgLTc5LDYgKzg1LDkgQEAKICAgICBMaXN0PE1lZGlhQW5hbHl0aWNzSXRlbSAqPiBtSXRlbXM7CiAgICAgdm9pZCBzYXZlSXRlbShNZWRpYUFuYWx5dGljc0l0ZW0gKik7CiAKKyAgICBib29sIGV4cGlyYXRpb25zX2woTWVkaWFBbmFseXRpY3NJdGVtICopOworICAgIHN0ZDo6ZnV0dXJlPGJvb2w+IG1FeHBpcmVGdXR1cmU7CisKICAgICAvLyBzdXBwb3J0IGZvciBnZW5lcmF0aW5nIG91dHB1dAogICAgIGludCBtRHVtcFByb3RvOwogICAgIGludCBtRHVtcFByb3RvRGVmYXVsdDsKZGlmZiAtLWdpdCBhL3NlcnZpY2VzL21lZGlhY29kZWMvQW5kcm9pZC5tayBiL3NlcnZpY2VzL21lZGlhY29kZWMvQW5kcm9pZC5tawppbmRleCBkYjVmMGZmLi43ODk1NDhkIDEwMDY0NAotLS0gYS9zZXJ2aWNlcy9tZWRpYWNvZGVjL0FuZHJvaWQubWsKKysrIGIvc2VydmljZXMvbWVkaWFjb2RlYy9BbmRyb2lkLm1rCkBAIC02Myw2ICs2Myw1OSBAQAogCiBpbmNsdWRlICQoQlVJTERfRVhFQ1VUQUJMRSkKIAorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworIyBzZXJ2aWNlIGV4ZWN1dGFibGUKK2luY2x1ZGUgJChDTEVBUl9WQVJTKQorIyBzZWNjb21wIGlzIG5vdCByZXF1aXJlZCBmb3IgY292ZXJhZ2UgYnVpbGQuCitpZm5lcSAoJChOQVRJVkVfQ09WRVJBR0UpLHRydWUpCitMT0NBTF9SRVFVSVJFRF9NT0RVTEVTX2FybSA6PSBjcmFzaF9kdW1wLnBvbGljeSBtZWRpYWNvZGVjLnBvbGljeQorTE9DQUxfUkVRVUlSRURfTU9EVUxFU194ODYgOj0gY3Jhc2hfZHVtcC5wb2xpY3kgbWVkaWFjb2RlYy5wb2xpY3kKK2VuZGlmCitMT0NBTF9TUkNfRklMRVMgOj0gXAorICAgIG1haW5fc3djb2RlY3NlcnZpY2UuY3BwIFwKKyAgICBNZWRpYUNvZGVjVXBkYXRlU2VydmljZS5jcHAgXAorCitzYW5pdGl6ZXJfcnVudGltZV9saWJyYXJpZXMgOj0gJChjYWxsIG5vcm1hbGl6ZS1wYXRoLWxpc3QsJChhZGRzdWZmaXggLnNvLFwKKyAgJChBRERSRVNTX1NBTklUSVpFUl9SVU5USU1FX0xJQlJBUlkpIFwKKyAgJChVQlNBTl9SVU5USU1FX0xJQlJBUlkpIFwKKyAgJChUU0FOX1JVTlRJTUVfTElCUkFSWSkgXAorICAkKDJORF9BRERSRVNTX1NBTklUSVpFUl9SVU5USU1FX0xJQlJBUlkpIFwKKyAgJCgyTkRfVUJTQU5fUlVOVElNRV9MSUJSQVJZKSBcCisgICQoMk5EX1RTQU5fUlVOVElNRV9MSUJSQVJZKSkpCisKKyMgJChpbmZvIFNhbml0aXplcjogICQoc2FuaXRpemVyX3J1bnRpbWVfbGlicmFyaWVzKSkKKworbGxuZGtfbGlicmFyaWVzIDo9ICQoY2FsbCBub3JtYWxpemUtcGF0aC1saXN0LCQoYWRkc3VmZml4IC5zbyxcCisgICQoTExOREtfTElCUkFSSUVTKSkpCisKKyMgJChpbmZvIExMTkRLOiAgJChsbG5ka19saWJyYXJpZXMpKQorCitMT0NBTF9DRkxBR1MgOj0gLURMSU5LRURfTElCUkFSSUVTPSciJChzYW5pdGl6ZXJfcnVudGltZV9saWJyYXJpZXMpOiQobGxuZGtfbGlicmFyaWVzKSInCisKK0xPQ0FMX1NIQVJFRF9MSUJSQVJJRVMgOj0gXAorICAgIGxpYmF2c2VydmljZXNfbWluaWphaWwgXAorICAgIGxpYmJhc2UgXAorICAgIGxpYmJpbmRlciBcCisgICAgbGliY3V0aWxzIFwKKyAgICBsaWJoaWRsdHJhbnNwb3J0IFwKKyAgICBsaWJod2JpbmRlciBcCisgICAgbGlibG9nIFwKKyAgICBsaWJtZWRpYSBcCisgICAgbGlidXRpbHMgXAorICAgIGxpYnppcGFyY2hpdmUgXAorCitMT0NBTF9NT0RVTEUgOj0gbWVkaWFzd2NvZGVjCitMT0NBTF9JTklUX1JDIDo9IG1lZGlhc3djb2RlYy5yYworTE9DQUxfMzJfQklUX09OTFkgOj0gdHJ1ZQorCitzYW5pdGl6ZXJfcnVudGltZV9saWJyYXJpZXMgOj0KK2xsbmRrX2xpYnJhcmllcyA6PQorCitpbmNsdWRlICQoQlVJTERfRVhFQ1VUQUJMRSkKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKwogIyBzZXJ2aWNlIHNlY2NvbXAgcG9saWN5CiBpZmVxICgkKFRBUkdFVF9BUkNIKSwgJChmaWx0ZXIgJChUQVJHRVRfQVJDSCksIHg4NiB4ODZfNjQgYXJtIGFybTY0KSkKIGluY2x1ZGUgJChDTEVBUl9WQVJTKQpkaWZmIC0tZ2l0IGEvc2VydmljZXMvbWVkaWFjb2RlYy9NZWRpYUNvZGVjVXBkYXRlU2VydmljZS5jcHAgYi9zZXJ2aWNlcy9tZWRpYWNvZGVjL01lZGlhQ29kZWNVcGRhdGVTZXJ2aWNlLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hZWU4OTBkCi0tLSAvZGV2L251bGwKKysrIGIvc2VydmljZXMvbWVkaWFjb2RlYy9NZWRpYUNvZGVjVXBkYXRlU2VydmljZS5jcHAKQEAgLTAsMCArMSwxMzYgQEAKKy8qCisgKiBDb3B5cmlnaHQgMjAxOCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCisKKyNkZWZpbmUgTE9HX1RBRyAiTWVkaWFDb2RlY1VwZGF0ZVNlcnZpY2UiCisvLyNkZWZpbmUgTE9HX05ERUJVRyAwCisKKyNpbmNsdWRlIDxhbmRyb2lkL2RsZXh0Lmg+CisjaW5jbHVkZSA8YW5kcm9pZC1iYXNlL2xvZ2dpbmcuaD4KKyNpbmNsdWRlIDxhbmRyb2lkLWJhc2Uvc3RyaW5ncy5oPgorI2luY2x1ZGUgPGRpcmVudC5oPgorI2luY2x1ZGUgPGRsZmNuLmg+CisjaW5jbHVkZSA8bWVkaWEvQ29kZWNTZXJ2aWNlUmVnaXN0cmFudC5oPgorI2luY2x1ZGUgPHV0aWxzL0xvZy5oPgorI2luY2x1ZGUgPHppcGFyY2hpdmUvemlwX2FyY2hpdmUuaD4KKyNpbmNsdWRlIDxjdXRpbHMvcHJvcGVydGllcy5oPgorCisjaW5jbHVkZSAiTWVkaWFDb2RlY1VwZGF0ZVNlcnZpY2UuaCIKKworLy8gQ29waWVkIGZyb20gR3JhcGhpY3NFbnYuY3BwCisvLyBUT0RPKGIvMzcwNDkzMTkpIEdldCB0aGlzIGZyb20gYSBoZWFkZXIgb25jZSBvbmUgZXhpc3RzCitleHRlcm4gIkMiIHsKKyAgYW5kcm9pZF9uYW1lc3BhY2VfdCogYW5kcm9pZF9jcmVhdGVfbmFtZXNwYWNlKGNvbnN0IGNoYXIqIG5hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyKiBsZF9saWJyYXJ5X3BhdGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyKiBkZWZhdWx0X2xpYnJhcnlfcGF0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQ2NF90IHR5cGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyKiBwZXJtaXR0ZWRfd2hlbl9pc29sYXRlZF9wYXRoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYW5kcm9pZF9uYW1lc3BhY2VfdCogcGFyZW50KTsKKyAgYm9vbCBhbmRyb2lkX2xpbmtfbmFtZXNwYWNlcyhhbmRyb2lkX25hbWVzcGFjZV90KiBmcm9tLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFuZHJvaWRfbmFtZXNwYWNlX3QqIHRvLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIqIHNoYXJlZF9saWJzX3NvbmFtZXMpOworICBlbnVtIHsKKyAgICAgQU5EUk9JRF9OQU1FU1BBQ0VfVFlQRV9JU09MQVRFRCA9IDEsCisgIH07Cit9CisKK25hbWVzcGFjZSBhbmRyb2lkIHsKK25hbWVzcGFjZSBtZWRpYSB7CisKK2JpbmRlcjo6U3RhdHVzIE1lZGlhQ29kZWNVcGRhdGVTZXJ2aWNlOjpsb2FkUGx1Z2lucyhjb25zdCA6OnN0ZDo6c3RyaW5nJiBhcGtQYXRoKSB7CisgICAgQUxPR1YoImxvYWRQbHVnaW5zICVzIiwgYXBrUGF0aC5jX3N0cigpKTsKKworICAgIFppcEFyY2hpdmVIYW5kbGUgemlwSGFuZGxlOworICAgIHZvaWQgKnJlZ2lzdHJhbnRMaWIgPSBOVUxMOworICAgIGludDMyX3QgcmV0ID0gT3BlbkFyY2hpdmUoYXBrUGF0aC5jX3N0cigpLCAmemlwSGFuZGxlKTsKKworICAgIGlmIChyZXQgPT0gMCkgeworICAgICAgICBjaGFyIGFiaWxpc3QzMltQUk9QRVJUWV9WQUxVRV9NQVhdOworICAgICAgICBwcm9wZXJ0eV9nZXQoInJvLnByb2R1Y3QuY3B1LmFiaWxpc3QzMiIsIGFiaWxpc3QzMiwgImFybWVhYmktdjdhIik7CisKKyAgICAgICAgYXV0byBhYmlzID0gYmFzZTo6U3BsaXQoYWJpbGlzdDMyLCAiLCIpOworICAgICAgICBpZiAoYWJpcy5lbXB0eSgpKSB7CisgICAgICAgICAgICBBTE9HVygiYWJpbGlzdCBpcyBlbXB0eSwgdHJ5aW5nIGFybWVhYmktdjdhIC4uLiIpOworICAgICAgICAgICAgYWJpcy5wdXNoX2JhY2soImFybWVhYmktdjdhIik7CisgICAgICAgIH0KKworICAgICAgICAvLyBUT0RPOiBPbmx5IHRyeSB0aGUgZmlyc3QgZW50cnkgaW4gYWJpbGlzdDMyIGZvciBub3cuCisgICAgICAgIC8vIFdlIHByb2JhYmx5IHNob3VsZCB0cnkgdGhlIG5leHQgaWYgaXQgZmFpbHMuCisgICAgICAgIFN0cmluZzggbGliUGF0aEluQXBrID0gU3RyaW5nOCgibGliLyIpICsgU3RyaW5nOChhYmlzWzBdLmNfc3RyKCkpOworICAgICAgICBTdHJpbmc4IGRlZmF1bHRMaWJQYXRoID0gU3RyaW5nOChhcGtQYXRoLmNfc3RyKCkpICsgIiEvIiArIGxpYlBhdGhJbkFwazsKKyAgICAgICAgU3RyaW5nOCBsaWJQYXRoID0gZGVmYXVsdExpYlBhdGggKyAiL2xpYm1lZGlhX2NvZGVjc2VydmljZXJlZ2lzdHJhbnQuc28iOworICAgICAgICBTdHJpbmc4IHppcEVudHJ5UGF0aCA9IGxpYlBhdGhJbkFwayArICIvbGlibWVkaWFfY29kZWNzZXJ2aWNlcmVnaXN0cmFudC5zbyI7CisKKyAgICAgICAgWmlwRW50cnkgZW50cnk7CisgICAgICAgIHJldCA9IEZpbmRFbnRyeSh6aXBIYW5kbGUsIFppcFN0cmluZyh6aXBFbnRyeVBhdGgpLCAmZW50cnkpOworCisgICAgICAgIGlmIChyZXQgPT0gMCkgeworICAgICAgICAgICAgYW5kcm9pZF9uYW1lc3BhY2VfdCAqY29kZWNOcyA9IGFuZHJvaWRfY3JlYXRlX25hbWVzcGFjZSgiY29kZWNzIiwKKyAgICAgICAgICAgICAgICAgICAgbnVsbHB0ciwgIC8vIGxkX2xpYnJhcnlfcGF0aAorICAgICAgICAgICAgICAgICAgICBkZWZhdWx0TGliUGF0aC5jX3N0cigpLAorICAgICAgICAgICAgICAgICAgICBBTkRST0lEX05BTUVTUEFDRV9UWVBFX0lTT0xBVEVELAorICAgICAgICAgICAgICAgICAgICBudWxscHRyLCAgLy8gcGVybWl0dGVkX3doZW5faXNvbGF0ZWRfcGF0aAorICAgICAgICAgICAgICAgICAgICBudWxscHRyKTsgLy8gcGFyZW50CisKKyAgICAgICAgICAgIGlmIChjb2RlY05zICE9IG51bGxwdHIpIHsKKyAgICAgICAgICAgICAgICBTdHJpbmc4IGxpbmtlZF9saWJyYXJpZXMoTElOS0VEX0xJQlJBUklFUyk7CisgICAgICAgICAgICAgICAgaWYgKGFuZHJvaWRfbGlua19uYW1lc3BhY2VzKAorICAgICAgICAgICAgICAgICAgICAgICAgY29kZWNOcywgbnVsbHB0ciwgbGlua2VkX2xpYnJhcmllcy5jX3N0cigpKSkgeworICAgICAgICAgICAgICAgICAgICBjb25zdCBhbmRyb2lkX2RsZXh0aW5mbyBkbGV4dGluZm8gPSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgLmZsYWdzID0gQU5EUk9JRF9ETEVYVF9VU0VfTkFNRVNQQUNFLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5saWJyYXJ5X25hbWVzcGFjZSA9IGNvZGVjTnMsCisgICAgICAgICAgICAgICAgICAgIH07CisKKyAgICAgICAgICAgICAgICAgICAgcmVnaXN0cmFudExpYiA9IGFuZHJvaWRfZGxvcGVuX2V4dCgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaWJQYXRoLnN0cmluZygpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJUTERfTk9XIHwgUlRMRF9MT0NBTCwgJmRsZXh0aW5mbyk7CisKKyAgICAgICAgICAgICAgICAgICAgaWYgKHJlZ2lzdHJhbnRMaWIgPT0gTlVMTCkgeworICAgICAgICAgICAgICAgICAgICAgICAgQUxPR0UoIkZhaWxlZCB0byBsb2FkIGxpYiBmcm9tIGFyY2hpdmU6ICVzIiwgZGxlcnJvcigpKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIEFMT0dFKCJGYWlsZWQgdG8gbGluayBuYW1lc3BhY2UiKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIEFMT0dFKCJGYWlsZWQgdG8gY3JlYXRlIGNvZGVjIG5hbWVzcGFjZSIpOworICAgICAgICAgICAgfQorICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgQUxPR0UoIkZhaWxlZCB0byBmaW5kIGVudHJ5IChyZXQ9JWQpIiwgcmV0KTsKKyAgICAgICAgfQorCisgICAgICAgIENsb3NlQXJjaGl2ZSh6aXBIYW5kbGUpOworICAgIH0gZWxzZSB7CisgICAgICAgIEFMT0dFKCJGYWlsZWQgdG8gb3BlbiBhcmNoaXZlIChyZXQ9JWQpIiwgcmV0KTsKKyAgICB9CisKKyAgICBpZiAocmVnaXN0cmFudExpYikgeworICAgICAgICBSZWdpc3RlckNvZGVjU2VydmljZXNGdW5jIHJlZ2lzdGVyQ29kZWNTZXJ2aWNlcyA9CisgICAgICAgICAgICAgICAgcmVpbnRlcnByZXRfY2FzdDxSZWdpc3RlckNvZGVjU2VydmljZXNGdW5jPigKKyAgICAgICAgICAgICAgICBkbHN5bShyZWdpc3RyYW50TGliLCAiUmVnaXN0ZXJDb2RlY1NlcnZpY2VzIikpOworICAgICAgICBpZiAocmVnaXN0ZXJDb2RlY1NlcnZpY2VzKSB7CisgICAgICAgICAgICByZWdpc3RlckNvZGVjU2VydmljZXMoKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIExPRyhXQVJOSU5HKSA8PCAiQ2Fubm90IHJlZ2lzdGVyIGNvZGVjIHNlcnZpY2VzICIKKyAgICAgICAgICAgICAgICAgICAgIi0tIGNvcnJ1cHRlZCBsaWJyYXJ5LiI7CisgICAgICAgIH0KKyAgICB9IGVsc2UgeworICAgICAgICBMT0coRVJST1IpIDw8ICJDYW5ub3QgZmluZCBjb2RlYyBzZXJ2aWNlIHJlZ2lzdHJhbnQuIjsKKyAgICB9CisKKyAgICByZXR1cm4gYmluZGVyOjpTdGF0dXM6Om9rKCk7Cit9CisKK30gICAvLyBuYW1lc3BhY2UgbWVkaWEKK30gICAvLyBuYW1lc3BhY2UgYW5kcm9pZApkaWZmIC0tZ2l0IGEvc2VydmljZXMvbWVkaWFjb2RlYy9NZWRpYUNvZGVjVXBkYXRlU2VydmljZS5oIGIvc2VydmljZXMvbWVkaWFjb2RlYy9NZWRpYUNvZGVjVXBkYXRlU2VydmljZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdiN2NlZTkKLS0tIC9kZXYvbnVsbAorKysgYi9zZXJ2aWNlcy9tZWRpYWNvZGVjL01lZGlhQ29kZWNVcGRhdGVTZXJ2aWNlLmgKQEAgLTAsMCArMSw0MCBAQAorLyoKKyAqIENvcHlyaWdodCAyMDE4IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KKworI2lmbmRlZiBBTkRST0lEX01FRElBX0NPREVDX1VQREFURV9TRVJWSUNFX0gKKyNkZWZpbmUgQU5EUk9JRF9NRURJQV9DT0RFQ19VUERBVEVfU0VSVklDRV9ICisKKyNpbmNsdWRlIDxiaW5kZXIvQmluZGVyU2VydmljZS5oPgorI2luY2x1ZGUgPGFuZHJvaWQvbWVkaWEvQm5NZWRpYVVwZGF0ZVNlcnZpY2UuaD4KKworbmFtZXNwYWNlIGFuZHJvaWQgeworbmFtZXNwYWNlIG1lZGlhIHsKKworY2xhc3MgTWVkaWFDb2RlY1VwZGF0ZVNlcnZpY2UKKyAgICA6IHB1YmxpYyBCaW5kZXJTZXJ2aWNlPE1lZGlhQ29kZWNVcGRhdGVTZXJ2aWNlPiwgcHVibGljIEJuTWVkaWFVcGRhdGVTZXJ2aWNlCit7CisgICAgZnJpZW5kIGNsYXNzIEJpbmRlclNlcnZpY2U8TWVkaWFDb2RlY1VwZGF0ZVNlcnZpY2U+OworcHVibGljOgorICAgIE1lZGlhQ29kZWNVcGRhdGVTZXJ2aWNlKCkgOiBCbk1lZGlhVXBkYXRlU2VydmljZSgpIHsgfQorICAgIHZpcnR1YWwgfk1lZGlhQ29kZWNVcGRhdGVTZXJ2aWNlKCkgeyB9CisgICAgc3RhdGljIGNvbnN0IGNoYXIqIGdldFNlcnZpY2VOYW1lKCkgeyByZXR1cm4gIm1lZGlhLmNvZGVjLnVwZGF0ZSI7IH0KKyAgICBiaW5kZXI6OlN0YXR1cyBsb2FkUGx1Z2lucyhjb25zdCA6OnN0ZDo6c3RyaW5nJiBhcGtQYXRoKTsKK307CisKK30gICAvLyBuYW1lc3BhY2UgbWVkaWEKK30gICAvLyBuYW1lc3BhY2UgYW5kcm9pZAorCisjZW5kaWYgIC8vIEFORFJPSURfTUVESUFfQ09ERUNfVVBEQVRFX1NFUlZJQ0VfSApkaWZmIC0tZ2l0IGEvc2VydmljZXMvbWVkaWFjb2RlYy9tYWluX2NvZGVjc2VydmljZS5jcHAgYi9zZXJ2aWNlcy9tZWRpYWNvZGVjL21haW5fY29kZWNzZXJ2aWNlLmNwcAppbmRleCA1MTYxOWY2Li42ZDQ3YmU2IDEwMDY0NAotLS0gYS9zZXJ2aWNlcy9tZWRpYWNvZGVjL21haW5fY29kZWNzZXJ2aWNlLmNwcAorKysgYi9zZXJ2aWNlcy9tZWRpYWNvZGVjL21haW5fY29kZWNzZXJ2aWNlLmNwcApAQCAtNDgsMzcgKzQ4LDIxIEBACiAKICAgICA6OmFuZHJvaWQ6OmhhcmR3YXJlOjpjb25maWd1cmVScGNUaHJlYWRwb29sKDY0LCBmYWxzZSk7CiAKLSAgICAvLyBSZWdpc3RyYXRpb24gb2YgY3VzdG9taXplZCBjb2RlYyBzZXJ2aWNlcwotICAgIHZvaWQgKnJlZ2lzdHJhbnRMaWIgPSBkbG9wZW4oCi0gICAgICAgICAgICAibGlibWVkaWFfY29kZWNzZXJ2aWNlcmVnaXN0cmFudC5zbyIsCi0gICAgICAgICAgICBSVExEX05PVyB8IFJUTERfTE9DQUwpOwotICAgIGlmIChyZWdpc3RyYW50TGliKSB7Ci0gICAgICAgIFJlZ2lzdGVyQ29kZWNTZXJ2aWNlc0Z1bmMgcmVnaXN0ZXJDb2RlY1NlcnZpY2VzID0KLSAgICAgICAgICAgICAgICByZWludGVycHJldF9jYXN0PFJlZ2lzdGVyQ29kZWNTZXJ2aWNlc0Z1bmM+KAotICAgICAgICAgICAgICAgIGRsc3ltKHJlZ2lzdHJhbnRMaWIsICJSZWdpc3RlckNvZGVjU2VydmljZXMiKSk7Ci0gICAgICAgIGlmIChyZWdpc3RlckNvZGVjU2VydmljZXMpIHsKLSAgICAgICAgICAgIHJlZ2lzdGVyQ29kZWNTZXJ2aWNlcygpOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgTE9HKFdBUk5JTkcpIDw8ICJDYW5ub3QgcmVnaXN0ZXIgYWRkaXRpb25hbCBzZXJ2aWNlcyAiCi0gICAgICAgICAgICAgICAgICAgICItLSBjb3JydXB0ZWQgbGlicmFyeS4iOwotICAgICAgICB9CisgICAgLy8gRGVmYXVsdCBjb2RlYyBzZXJ2aWNlcworICAgIHVzaW5nIG5hbWVzcGFjZSA6OmFuZHJvaWQ6OmhhcmR3YXJlOjptZWRpYTo6b214OjpWMV8wOworICAgIHNwPElPbXhTdG9yZT4gb214U3RvcmUgPSBuZXcgaW1wbGVtZW50YXRpb246Ok9teFN0b3JlKCk7CisgICAgaWYgKG9teFN0b3JlID09IG51bGxwdHIpIHsKKyAgICAgICAgTE9HKEVSUk9SKSA8PCAiQ2Fubm90IGNyZWF0ZSBJT214U3RvcmUgSEFMIHNlcnZpY2UuIjsKKyAgICB9IGVsc2UgaWYgKG9teFN0b3JlLT5yZWdpc3RlckFzU2VydmljZSgpICE9IE9LKSB7CisgICAgICAgIExPRyhFUlJPUikgPDwgIkNhbm5vdCByZWdpc3RlciBJT214U3RvcmUgSEFMIHNlcnZpY2UuIjsKKyAgICB9CisgICAgc3A8SU9teD4gb214ID0gbmV3IGltcGxlbWVudGF0aW9uOjpPbXgoKTsKKyAgICBpZiAob214ID09IG51bGxwdHIpIHsKKyAgICAgICAgTE9HKEVSUk9SKSA8PCAiQ2Fubm90IGNyZWF0ZSBJT214IEhBTCBzZXJ2aWNlLiI7CisgICAgfSBlbHNlIGlmIChvbXgtPnJlZ2lzdGVyQXNTZXJ2aWNlKCkgIT0gT0spIHsKKyAgICAgICAgTE9HKEVSUk9SKSA8PCAiQ2Fubm90IHJlZ2lzdGVyIElPbXggSEFMIHNlcnZpY2UuIjsKICAgICB9IGVsc2UgewotICAgICAgICAvLyBEZWZhdWx0IGNvZGVjIHNlcnZpY2VzCi0gICAgICAgIHVzaW5nIG5hbWVzcGFjZSA6OmFuZHJvaWQ6OmhhcmR3YXJlOjptZWRpYTo6b214OjpWMV8wOwotICAgICAgICBzcDxJT214U3RvcmU+IG9teFN0b3JlID0gbmV3IGltcGxlbWVudGF0aW9uOjpPbXhTdG9yZSgpOwotICAgICAgICBpZiAob214U3RvcmUgPT0gbnVsbHB0cikgewotICAgICAgICAgICAgTE9HKEVSUk9SKSA8PCAiQ2Fubm90IGNyZWF0ZSBJT214U3RvcmUgSEFMIHNlcnZpY2UuIjsKLSAgICAgICAgfSBlbHNlIGlmIChvbXhTdG9yZS0+cmVnaXN0ZXJBc1NlcnZpY2UoKSAhPSBPSykgewotICAgICAgICAgICAgTE9HKEVSUk9SKSA8PCAiQ2Fubm90IHJlZ2lzdGVyIElPbXhTdG9yZSBIQUwgc2VydmljZS4iOwotICAgICAgICB9Ci0gICAgICAgIHNwPElPbXg+IG9teCA9IG5ldyBpbXBsZW1lbnRhdGlvbjo6T214KCk7Ci0gICAgICAgIGlmIChvbXggPT0gbnVsbHB0cikgewotICAgICAgICAgICAgTE9HKEVSUk9SKSA8PCAiQ2Fubm90IGNyZWF0ZSBJT214IEhBTCBzZXJ2aWNlLiI7Ci0gICAgICAgIH0gZWxzZSBpZiAob214LT5yZWdpc3RlckFzU2VydmljZSgpICE9IE9LKSB7Ci0gICAgICAgICAgICBMT0coRVJST1IpIDw8ICJDYW5ub3QgcmVnaXN0ZXIgSU9teCBIQUwgc2VydmljZS4iOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgTE9HKElORk8pIDw8ICJJT214IEhBTCBzZXJ2aWNlIGNyZWF0ZWQuIjsKLSAgICAgICAgfQorICAgICAgICBMT0coSU5GTykgPDwgIklPbXggSEFMIHNlcnZpY2UgY3JlYXRlZC4iOwogICAgIH0KIAogICAgIDo6YW5kcm9pZDo6aGFyZHdhcmU6OmpvaW5ScGNUaHJlYWRwb29sKCk7CmRpZmYgLS1naXQgYS9zZXJ2aWNlcy9tZWRpYWNvZGVjL21haW5fc3djb2RlY3NlcnZpY2UuY3BwIGIvc2VydmljZXMvbWVkaWFjb2RlYy9tYWluX3N3Y29kZWNzZXJ2aWNlLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zODZhYmIyCi0tLSAvZGV2L251bGwKKysrIGIvc2VydmljZXMvbWVkaWFjb2RlYy9tYWluX3N3Y29kZWNzZXJ2aWNlLmNwcApAQCAtMCwwICsxLDc0IEBACisvKgorKioKKyoqIENvcHlyaWdodCAyMDE4LCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisqKgorKiogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisqKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisqKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyoqCisqKiAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisqKgorKiogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorKiogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyoqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorKiogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorKiogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisqLworCisjaW5jbHVkZSA8YW5kcm9pZC1iYXNlL2xvZ2dpbmcuaD4KKworLy8gZnJvbSBMT0NBTF9DX0lOQ0xVREVTCisjaW5jbHVkZSAibWluaWphaWwuaCIKKworI2luY2x1ZGUgPGFuZHJvaWQtYmFzZS9wcm9wZXJ0aWVzLmg+CisjaW5jbHVkZSA8YmluZGVyL1Byb2Nlc3NTdGF0ZS5oPgorI2luY2x1ZGUgPGRsZmNuLmg+CisjaW5jbHVkZSA8aGlkbC9IaWRsVHJhbnNwb3J0U3VwcG9ydC5oPgorI2luY2x1ZGUgPG1lZGlhL0NvZGVjU2VydmljZVJlZ2lzdHJhbnQuaD4KKworI2luY2x1ZGUgIk1lZGlhQ29kZWNVcGRhdGVTZXJ2aWNlLmgiCisKK3VzaW5nIG5hbWVzcGFjZSBhbmRyb2lkOworCisvLyBUT0RPOiByZXBsYWNlIHBvbGljeSB3aXRoIHNvZnR3YXJlIGNvZGVjLW9ubHkgcG9saWNpZXMKKy8vIE11c3QgbWF0Y2ggbG9jYXRpb24gaW4gQW5kcm9pZC5tay4KK3N0YXRpYyBjb25zdCBjaGFyIGtTeXN0ZW1TZWNjb21wUG9saWN5UGF0aFtdID0KKyAgICAgICAgIi9zeXN0ZW0vZXRjL3NlY2NvbXBfcG9saWN5L21lZGlhY29kZWMucG9saWN5IjsKK3N0YXRpYyBjb25zdCBjaGFyIGtWZW5kb3JTZWNjb21wUG9saWN5UGF0aFtdID0KKyAgICAgICAgIi92ZW5kb3IvZXRjL3NlY2NvbXBfcG9saWN5L21lZGlhY29kZWMucG9saWN5IjsKKworaW50IG1haW4oaW50IGFyZ2MgX191bnVzZWQsIGNoYXIqKiAvKmFyZ3YqLykKK3sKKyAgICBMT0coSU5GTykgPDwgIm1lZGlhIHN3Y29kZWMgc2VydmljZSBzdGFydGluZyI7CisgICAgc2lnbmFsKFNJR1BJUEUsIFNJR19JR04pOworICAgIFNldFVwTWluaWphaWwoa1N5c3RlbVNlY2NvbXBQb2xpY3lQYXRoLCBrVmVuZG9yU2VjY29tcFBvbGljeVBhdGgpOworCisgICAgc3RkOjpzdHJpbmcgdmFsdWUgPSBiYXNlOjpHZXRQcm9wZXJ0eSgicm8uYnVpbGQudHlwZSIsICJ1bmtub3duIik7CisgICAgaWYgKHZhbHVlID09ICJ1c2VyZGVidWciIHx8IHZhbHVlID09ICJlbmciKSB7CisgICAgICAgIG1lZGlhOjpNZWRpYUNvZGVjVXBkYXRlU2VydmljZTo6aW5zdGFudGlhdGUoKTsKKyAgICB9CisKKyAgICBhbmRyb2lkOjpQcm9jZXNzU3RhdGU6OnNlbGYoKS0+c3RhcnRUaHJlYWRQb29sKCk7CisKKyAgICA6OmFuZHJvaWQ6OmhhcmR3YXJlOjpjb25maWd1cmVScGNUaHJlYWRwb29sKDY0LCBmYWxzZSk7CisKKyAgICAvLyBSZWdpc3RyYXRpb24gb2YgY3VzdG9taXplZCBjb2RlYyBzZXJ2aWNlcworICAgIHZvaWQgKnJlZ2lzdHJhbnRMaWIgPSBkbG9wZW4oCisgICAgICAgICAgICAibGlibWVkaWFfY29kZWNzZXJ2aWNlcmVnaXN0cmFudC5zbyIsCisgICAgICAgICAgICBSVExEX05PVyB8IFJUTERfTE9DQUwpOworICAgIGlmIChyZWdpc3RyYW50TGliKSB7CisgICAgICAgIFJlZ2lzdGVyQ29kZWNTZXJ2aWNlc0Z1bmMgcmVnaXN0ZXJDb2RlY1NlcnZpY2VzID0KKyAgICAgICAgICAgICAgICByZWludGVycHJldF9jYXN0PFJlZ2lzdGVyQ29kZWNTZXJ2aWNlc0Z1bmM+KAorICAgICAgICAgICAgICAgIGRsc3ltKHJlZ2lzdHJhbnRMaWIsICJSZWdpc3RlckNvZGVjU2VydmljZXMiKSk7CisgICAgICAgIGlmIChyZWdpc3RlckNvZGVjU2VydmljZXMpIHsKKyAgICAgICAgICAgIHJlZ2lzdGVyQ29kZWNTZXJ2aWNlcygpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgTE9HKFdBUk5JTkcpIDw8ICJDYW5ub3QgcmVnaXN0ZXIgY29kZWMgc2VydmljZXMgIgorICAgICAgICAgICAgICAgICAgICAiLS0gY29ycnVwdGVkIGxpYnJhcnkuIjsKKyAgICAgICAgfQorICAgIH0gZWxzZSB7CisgICAgICAgIExPRyhFUlJPUikgPDwgIkNhbm5vdCBmaW5kIGNvZGVjIHNlcnZpY2UgcmVnaXN0cmFudC4iOworICAgIH0KKworICAgIDo6YW5kcm9pZDo6aGFyZHdhcmU6OmpvaW5ScGNUaHJlYWRwb29sKCk7Cit9CmRpZmYgLS1naXQgYS9zZXJ2aWNlcy9tZWRpYWNvZGVjL21lZGlhc3djb2RlYy5yYyBiL3NlcnZpY2VzL21lZGlhY29kZWMvbWVkaWFzd2NvZGVjLnJjCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRmZTMzODEKLS0tIC9kZXYvbnVsbAorKysgYi9zZXJ2aWNlcy9tZWRpYWNvZGVjL21lZGlhc3djb2RlYy5yYwpAQCAtMCwwICsxLDYgQEAKK3NlcnZpY2UgbWVkaWEuc3djb2RlYyAvc3lzdGVtL2Jpbi9tZWRpYXN3Y29kZWMKKyAgICBjbGFzcyBtYWluCisgICAgdXNlciBtZWRpYWNvZGVjCisgICAgZ3JvdXAgY2FtZXJhIGRybXJwYyBtZWRpYWRybQorICAgIGlvcHJpbyBydCA0CisgICAgd3JpdGVwaWQgL2Rldi9jcHVzZXQvZm9yZWdyb3VuZC90YXNrcwpkaWZmIC0tZ2l0IGEvc2VydmljZXMvbWVkaWFjb2RlYy9zZWNjb21wX3BvbGljeS9tZWRpYWNvZGVjLWFybS5wb2xpY3kgYi9zZXJ2aWNlcy9tZWRpYWNvZGVjL3NlY2NvbXBfcG9saWN5L21lZGlhY29kZWMtYXJtLnBvbGljeQppbmRleCA2ZWM4ODk1Li5lZGY0ZGFiIDEwMDY0NAotLS0gYS9zZXJ2aWNlcy9tZWRpYWNvZGVjL3NlY2NvbXBfcG9saWN5L21lZGlhY29kZWMtYXJtLnBvbGljeQorKysgYi9zZXJ2aWNlcy9tZWRpYWNvZGVjL3NlY2NvbXBfcG9saWN5L21lZGlhY29kZWMtYXJtLnBvbGljeQpAQCAtNTUsNCArNTUsOCBAQAogZ2V0ZGVudHM2NDogMQogZ2V0cmFuZG9tOiAxCiAKKyMgVXNlZCBieSBVQlNhbiBkaWFnbm9zdGljIG1lc3NhZ2VzCityZWFkbGluazogMQorb3BlbjogMQorCiBAaW5jbHVkZSAvc3lzdGVtL2V0Yy9zZWNjb21wX3BvbGljeS9jcmFzaF9kdW1wLmFybS5wb2xpY3kKZGlmZiAtLWdpdCBhL3NlcnZpY2VzL21lZGlhY29kZWMvc2VjY29tcF9wb2xpY3kvbWVkaWFjb2RlYy14ODYucG9saWN5IGIvc2VydmljZXMvbWVkaWFjb2RlYy9zZWNjb21wX3BvbGljeS9tZWRpYWNvZGVjLXg4Ni5wb2xpY3kKaW5kZXggODIxZTY5Zi4uOTY2ZTIxNCAxMDA2NDQKLS0tIGEvc2VydmljZXMvbWVkaWFjb2RlYy9zZWNjb21wX3BvbGljeS9tZWRpYWNvZGVjLXg4Ni5wb2xpY3kKKysrIGIvc2VydmljZXMvbWVkaWFjb2RlYy9zZWNjb21wX3BvbGljeS9tZWRpYWNvZGVjLXg4Ni5wb2xpY3kKQEAgLTI0LDYgKzI0LDcgQEAKIG1tYXAyOiAxCiBmc3RhdDY0OiAxCiBzdGF0NjQ6IDEKK3N0YXRmczY0OiAxCiBtYWR2aXNlOiAxCiBmc3RhdGF0NjQ6IDEKIGZ1dGV4OiAxCkBAIC01Nyw0ICs1OCw4IEBACiBnZXRwaWQ6IDEKIGdldHRpZDogMQogCisjIFVzZWQgYnkgVUJTYW4gZGlhZ25vc3RpYyBtZXNzYWdlcworcmVhZGxpbms6IDEKK29wZW46IDEKKwogQGluY2x1ZGUgL3N5c3RlbS9ldGMvc2VjY29tcF9wb2xpY3kvY3Jhc2hfZHVtcC54ODYucG9saWN5CmRpZmYgLS1naXQgYS9zZXJ2aWNlcy9tZWRpYWRybS9BbmRyb2lkLm1rIGIvc2VydmljZXMvbWVkaWFkcm0vQW5kcm9pZC5tawppbmRleCBlODcwOTY1Li4yMjdhMjlkIDEwMDY0NAotLS0gYS9zZXJ2aWNlcy9tZWRpYWRybS9BbmRyb2lkLm1rCisrKyBiL3NlcnZpY2VzL21lZGlhZHJtL0FuZHJvaWQubWsKQEAgLTI5LDcgKzI5LDggQEAKICAgICBsaWJoaWRsbWVtb3J5IFwKICAgICBsaWJoaWRsdHJhbnNwb3J0IFwKICAgICBhbmRyb2lkLmhhcmR3YXJlLmRybUAxLjAgXAotICAgIGFuZHJvaWQuaGFyZHdhcmUuZHJtQDEuMQorICAgIGFuZHJvaWQuaGFyZHdhcmUuZHJtQDEuMSBcCisgICAgYW5kcm9pZC5oYXJkd2FyZS5kcm1AMS4yCiAKIExPQ0FMX0NGTEFHUyArPSAtV2FsbCAtV2V4dHJhIC1XZXJyb3IKIApkaWZmIC0tZ2l0IGEvc2VydmljZXMvbWVkaWFleHRyYWN0b3IvQW5kcm9pZC5tayBiL3NlcnZpY2VzL21lZGlhZXh0cmFjdG9yL0FuZHJvaWQubWsKaW5kZXggMzdkNmNjOS4uNzNjOTUzNSAxMDA2NDQKLS0tIGEvc2VydmljZXMvbWVkaWFleHRyYWN0b3IvQW5kcm9pZC5taworKysgYi9zZXJ2aWNlcy9tZWRpYWV4dHJhY3Rvci9BbmRyb2lkLm1rCkBAIC0xOCw2ICsxOCw3IEBACiBMT0NBTF9SRVFVSVJFRF9NT0RVTEVTX2FybSA6PSBjcmFzaF9kdW1wLnBvbGljeSBtZWRpYWV4dHJhY3Rvci5wb2xpY3kKIExPQ0FMX1JFUVVJUkVEX01PRFVMRVNfYXJtNjQgOj0gY3Jhc2hfZHVtcC5wb2xpY3kgbWVkaWFleHRyYWN0b3IucG9saWN5CiBMT0NBTF9SRVFVSVJFRF9NT0RVTEVTX3g4NiA6PSBjcmFzaF9kdW1wLnBvbGljeSBtZWRpYWV4dHJhY3Rvci5wb2xpY3kKK0xPQ0FMX1JFUVVJUkVEX01PRFVMRVNfeDg2XzY0IDo9IGNyYXNoX2R1bXAucG9saWN5IG1lZGlhZXh0cmFjdG9yLnBvbGljeQogCiAjIGV4dHJhY3RvciBsaWJyYXJpZXMKIExPQ0FMX1JFUVVJUkVEX01PRFVMRVMgKz0gXApkaWZmIC0tZ2l0IGEvc2VydmljZXMvbWVkaWFleHRyYWN0b3IvTWVkaWFFeHRyYWN0b3JTZXJ2aWNlLmNwcCBiL3NlcnZpY2VzL21lZGlhZXh0cmFjdG9yL01lZGlhRXh0cmFjdG9yU2VydmljZS5jcHAKaW5kZXggZjBmNDRmNS4uZjRkOGI0MyAxMDA2NDQKLS0tIGEvc2VydmljZXMvbWVkaWFleHRyYWN0b3IvTWVkaWFFeHRyYWN0b3JTZXJ2aWNlLmNwcAorKysgYi9zZXJ2aWNlcy9tZWRpYWV4dHJhY3Rvci9NZWRpYUV4dHJhY3RvclNlcnZpY2UuY3BwCkBAIC0yMSw3ICsyMSw2IEBACiAjaW5jbHVkZSA8dXRpbHMvVmVjdG9yLmg+CiAKICNpbmNsdWRlIDxtZWRpYS9EYXRhU291cmNlLmg+Ci0jaW5jbHVkZSA8bWVkaWEvTWVkaWFFeHRyYWN0b3IuaD4KICNpbmNsdWRlIDxtZWRpYS9zdGFnZWZyaWdodC9EYXRhU291cmNlRmFjdG9yeS5oPgogI2luY2x1ZGUgPG1lZGlhL3N0YWdlZnJpZ2h0L0ludGVyZmFjZVV0aWxzLmg+CiAjaW5jbHVkZSA8bWVkaWEvc3RhZ2VmcmlnaHQvTWVkaWFFeHRyYWN0b3JGYWN0b3J5Lmg+CmRpZmYgLS1naXQgYS9zZXJ2aWNlcy9tZWRpYWV4dHJhY3Rvci9NZWRpYUV4dHJhY3RvclVwZGF0ZVNlcnZpY2UuaCBiL3NlcnZpY2VzL21lZGlhZXh0cmFjdG9yL01lZGlhRXh0cmFjdG9yVXBkYXRlU2VydmljZS5oCmluZGV4IDQxMTVmNmQuLmVhMzRjOWQgMTAwNjQ0Ci0tLSBhL3NlcnZpY2VzL21lZGlhZXh0cmFjdG9yL01lZGlhRXh0cmFjdG9yVXBkYXRlU2VydmljZS5oCisrKyBiL3NlcnZpY2VzL21lZGlhZXh0cmFjdG9yL01lZGlhRXh0cmFjdG9yVXBkYXRlU2VydmljZS5oCkBAIC0xOCwxNyArMTgsMTcgQEAKICNkZWZpbmUgQU5EUk9JRF9NRURJQV9FWFRSQUNUT1JfVVBEQVRFX1NFUlZJQ0VfSAogCiAjaW5jbHVkZSA8YmluZGVyL0JpbmRlclNlcnZpY2UuaD4KLSNpbmNsdWRlIDxhbmRyb2lkL21lZGlhL0JuTWVkaWFFeHRyYWN0b3JVcGRhdGVTZXJ2aWNlLmg+CisjaW5jbHVkZSA8YW5kcm9pZC9tZWRpYS9Cbk1lZGlhVXBkYXRlU2VydmljZS5oPgogCiBuYW1lc3BhY2UgYW5kcm9pZCB7CiBuYW1lc3BhY2UgbWVkaWEgewogCiBjbGFzcyBNZWRpYUV4dHJhY3RvclVwZGF0ZVNlcnZpY2UKLSAgICA6IHB1YmxpYyBCaW5kZXJTZXJ2aWNlPE1lZGlhRXh0cmFjdG9yVXBkYXRlU2VydmljZT4sIHB1YmxpYyBCbk1lZGlhRXh0cmFjdG9yVXBkYXRlU2VydmljZQorICAgIDogcHVibGljIEJpbmRlclNlcnZpY2U8TWVkaWFFeHRyYWN0b3JVcGRhdGVTZXJ2aWNlPiwgcHVibGljIEJuTWVkaWFVcGRhdGVTZXJ2aWNlCiB7CiAgICAgZnJpZW5kIGNsYXNzIEJpbmRlclNlcnZpY2U8TWVkaWFFeHRyYWN0b3JVcGRhdGVTZXJ2aWNlPjsKIHB1YmxpYzoKLSAgICBNZWRpYUV4dHJhY3RvclVwZGF0ZVNlcnZpY2UoKSA6IEJuTWVkaWFFeHRyYWN0b3JVcGRhdGVTZXJ2aWNlKCkgeyB9CisgICAgTWVkaWFFeHRyYWN0b3JVcGRhdGVTZXJ2aWNlKCkgOiBCbk1lZGlhVXBkYXRlU2VydmljZSgpIHsgfQogICAgIHZpcnR1YWwgfk1lZGlhRXh0cmFjdG9yVXBkYXRlU2VydmljZSgpIHsgfQogICAgIHN0YXRpYyBjb25zdCBjaGFyKiBnZXRTZXJ2aWNlTmFtZSgpIHsgcmV0dXJuICJtZWRpYS5leHRyYWN0b3IudXBkYXRlIjsgfQogICAgIGJpbmRlcjo6U3RhdHVzIGxvYWRQbHVnaW5zKGNvbnN0IDo6c3RkOjpzdHJpbmcmIGFwa1BhdGgpOwpkaWZmIC0tZ2l0IGEvc2VydmljZXMvbWVkaWFleHRyYWN0b3Ivc2VjY29tcF9wb2xpY3kvbWVkaWFleHRyYWN0b3IteDg2XzY0LnBvbGljeSBiL3NlcnZpY2VzL21lZGlhZXh0cmFjdG9yL3NlY2NvbXBfcG9saWN5L21lZGlhZXh0cmFjdG9yLXg4Nl82NC5wb2xpY3kKb2xkIG1vZGUgMTAwNzU1Cm5ldyBtb2RlIDEwMDY0NAppbmRleCA2M2M3NzgwLi42ZDllZDZmCi0tLSBhL3NlcnZpY2VzL21lZGlhZXh0cmFjdG9yL3NlY2NvbXBfcG9saWN5L21lZGlhZXh0cmFjdG9yLXg4Nl82NC5wb2xpY3kKKysrIGIvc2VydmljZXMvbWVkaWFleHRyYWN0b3Ivc2VjY29tcF9wb2xpY3kvbWVkaWFleHRyYWN0b3IteDg2XzY0LnBvbGljeQpAQCAtMjEsNiArMjEsNyBAQAogZ2V0dWlkOiAxCiBzZXRwcmlvcml0eTogMQogc2lnYWx0c3RhY2s6IDEKK2ZzdGF0ZnM6IDEKIG5ld2ZzdGF0YXQ6IDEKIHJlc3RhcnRfc3lzY2FsbDogMQogZXhpdDogMQpAQCAtMzAsMjggKzMxLDIxIEBACiBzY2hlZF9zZXRzY2hlZHVsZXI6IDEKIGdldHJsaW1pdDogMQogbmFub3NsZWVwOiAxCitnZXRyYW5kb206IDEKKworIyBmb3IgZHluYW1pY2FsbHkgbG9hZGluZyBleHRyYWN0b3JzCitnZXRkZW50czY0OiAxCityZWFkbGlua2F0OiAxCitwcmVhZDY0OiAxCittcmVtYXA6IDEKIAogIyBmb3IgRmlsZVNvdXJjZQogcmVhZGxpbmthdDogMQogCi0jIGZvciBhdHRhY2hpbmcgdG8gZGVidWdnZXJkIG9uIHByb2Nlc3MgY3Jhc2gKLXRna2lsbDogMQotc29ja2V0OiBhcmcwID09IDEKLWNvbm5lY3Q6IDEKLWZjbnRsOiAxCi1ydF9zaWdwcm9jbWFzazogMQotcnRfc2lnYWN0aW9uOiAxCi1ydF90Z3NpZ3F1ZXVlaW5mbzogMQotZ2V0ZXVpZDogMQotZ2V0Z2lkOiAxCi1nZXRlZ2lkOiAxCi1nZXRncm91cHM6IDEKLWdldGRlbnRzNjQ6IDEKLXBpcGUyOiAxCi1wcG9sbDogMQotCiAjIFJlcXVpcmVkIGJ5IEFkZHJlc3NTYW5pdGl6ZXIKIGdldHRpZDogMQogc2NoZWRfeWllbGQ6IDEKIGdldHBpZDogMQogZ2V0dGlkOiAxCisKK0BpbmNsdWRlIC9zeXN0ZW0vZXRjL3NlY2NvbXBfcG9saWN5L2NyYXNoX2R1bXAueDg2XzY0LnBvbGljeQpkaWZmIC0tZ2l0IGEvc2VydmljZXMvbWVkaWFsb2cvQW5kcm9pZC5icCBiL3NlcnZpY2VzL21lZGlhbG9nL0FuZHJvaWQuYnAKaW5kZXggMjllNmRmYy4uY2E5NmY2MiAxMDA2NDQKLS0tIGEvc2VydmljZXMvbWVkaWFsb2cvQW5kcm9pZC5icAorKysgYi9zZXJ2aWNlcy9tZWRpYWxvZy9BbmRyb2lkLmJwCkBAIC05LDcgKzksOSBAQAogICAgIHNoYXJlZF9saWJzOiBbCiAgICAgICAgICJsaWJhdWRpb3V0aWxzIiwKICAgICAgICAgImxpYmJpbmRlciIsCisgICAgICAgICJsaWJjdXRpbHMiLAogICAgICAgICAibGlibG9nIiwKKyAgICAgICAgImxpYm1lZGlhdXRpbHMiLAogICAgICAgICAibGlibmJhaW8iLAogICAgICAgICAibGlibmJsb2ciLAogICAgICAgICAibGlidXRpbHMiLApkaWZmIC0tZ2l0IGEvc2VydmljZXMvbWVkaWFsb2cvTWVkaWFMb2dTZXJ2aWNlLmNwcCBiL3NlcnZpY2VzL21lZGlhbG9nL01lZGlhTG9nU2VydmljZS5jcHAKaW5kZXggMWJlNTU0NC4uOTAyYWY2NiAxMDA2NDQKLS0tIGEvc2VydmljZXMvbWVkaWFsb2cvTWVkaWFMb2dTZXJ2aWNlLmNwcAorKysgYi9zZXJ2aWNlcy9tZWRpYWxvZy9NZWRpYUxvZ1NlcnZpY2UuY3BwCkBAIC0yMCw4ICsyMCw5IEBACiAjaW5jbHVkZSA8c3lzL21tYW4uaD4KICNpbmNsdWRlIDx1dGlscy9Mb2cuaD4KICNpbmNsdWRlIDxiaW5kZXIvUGVybWlzc2lvbkNhY2hlLmg+CisjaW5jbHVkZSA8bWVkaWEvbmJsb2cvTWVyZ2VyLmg+CiAjaW5jbHVkZSA8bWVkaWEvbmJsb2cvTkJMb2cuaD4KLSNpbmNsdWRlIDxwcml2YXRlL2FuZHJvaWRfZmlsZXN5c3RlbV9jb25maWcuaD4KKyNpbmNsdWRlIDxtZWRpYXV0aWxzL1NlcnZpY2VVdGlsaXRpZXMuaD4KICNpbmNsdWRlICJNZWRpYUxvZ1NlcnZpY2UuaCIKIAogbmFtZXNwYWNlIGFuZHJvaWQgewpAQCAtNTMsMjcgKzU0LDI4IEBACiAKIHZvaWQgTWVkaWFMb2dTZXJ2aWNlOjpyZWdpc3RlcldyaXRlcihjb25zdCBzcDxJTWVtb3J5PiYgc2hhcmVkLCBzaXplX3Qgc2l6ZSwgY29uc3QgY2hhciAqbmFtZSkKIHsKLSAgICBpZiAoSVBDVGhyZWFkU3RhdGU6OnNlbGYoKS0+Z2V0Q2FsbGluZ1VpZCgpICE9IEFJRF9BVURJT1NFUlZFUiB8fCBzaGFyZWQgPT0gMCB8fAorICAgIGlmICghaXNBdWRpb1NlcnZlck9yTWVkaWFTZXJ2ZXJVaWQoSVBDVGhyZWFkU3RhdGU6OnNlbGYoKS0+Z2V0Q2FsbGluZ1VpZCgpKSB8fCBzaGFyZWQgPT0gMCB8fAogICAgICAgICAgICAgc2l6ZSA8IGtNaW5TaXplIHx8IHNpemUgPiBrTWF4U2l6ZSB8fCBuYW1lID09IE5VTEwgfHwKICAgICAgICAgICAgIHNoYXJlZC0+c2l6ZSgpIDwgTkJMb2c6OlRpbWVsaW5lOjpzaGFyZWRTaXplKHNpemUpKSB7CiAgICAgICAgIHJldHVybjsKICAgICB9Ci0gICAgc3A8TkJMb2c6OlJlYWRlcj4gcmVhZGVyKG5ldyBOQkxvZzo6UmVhZGVyKHNoYXJlZCwgc2l6ZSkpOwotICAgIE5CTG9nOjpOYW1lZFJlYWRlciBuYW1lZFJlYWRlcihyZWFkZXIsIG5hbWUpOworICAgIHNwPE5CTG9nOjpSZWFkZXI+IHJlYWRlcihuZXcgTkJMb2c6OlJlYWRlcihzaGFyZWQsIHNpemUsIG5hbWUpKTsgLy8gUmVhZGVyIGhhbmRsZWQgYnkgbWVyZ2VyCisgICAgc3A8TkJMb2c6OkR1bXBSZWFkZXI+IGR1bXBSZWFkZXIobmV3IE5CTG9nOjpEdW1wUmVhZGVyKHNoYXJlZCwgc2l6ZSwgbmFtZSkpOyAvLyBmb3IgZHVtcHN5cwogICAgIE11dGV4OjpBdXRvbG9jayBfbChtTG9jayk7Ci0gICAgbU5hbWVkUmVhZGVycy5hZGQobmFtZWRSZWFkZXIpOwotICAgIG1NZXJnZXIuYWRkUmVhZGVyKG5hbWVkUmVhZGVyKTsKKyAgICBtRHVtcFJlYWRlcnMuYWRkKGR1bXBSZWFkZXIpOworICAgIG1NZXJnZXIuYWRkUmVhZGVyKHJlYWRlcik7CiB9CiAKIHZvaWQgTWVkaWFMb2dTZXJ2aWNlOjp1bnJlZ2lzdGVyV3JpdGVyKGNvbnN0IHNwPElNZW1vcnk+JiBzaGFyZWQpCiB7Ci0gICAgaWYgKElQQ1RocmVhZFN0YXRlOjpzZWxmKCktPmdldENhbGxpbmdVaWQoKSAhPSBBSURfQVVESU9TRVJWRVIgfHwgc2hhcmVkID09IDApIHsKKyAgICBpZiAoIWlzQXVkaW9TZXJ2ZXJPck1lZGlhU2VydmVyVWlkKElQQ1RocmVhZFN0YXRlOjpzZWxmKCktPmdldENhbGxpbmdVaWQoKSkgfHwgc2hhcmVkID09IDApIHsKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICBNdXRleDo6QXV0b2xvY2sgX2wobUxvY2spOwotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbU5hbWVkUmVhZGVycy5zaXplKCk7ICkgewotICAgICAgICBpZiAobU5hbWVkUmVhZGVyc1tpXS5yZWFkZXIoKS0+aXNJTWVtb3J5KHNoYXJlZCkpIHsKLSAgICAgICAgICAgIG1OYW1lZFJlYWRlcnMucmVtb3ZlQXQoaSk7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtRHVtcFJlYWRlcnMuc2l6ZSgpOyApIHsKKyAgICAgICAgaWYgKG1EdW1wUmVhZGVyc1tpXS0+aXNJTWVtb3J5KHNoYXJlZCkpIHsKKyAgICAgICAgICAgIG1EdW1wUmVhZGVycy5yZW1vdmVBdChpKTsKKyAgICAgICAgICAgIC8vIFRPRE8gbU1lcmdlci5yZW1vdmVSZWFkZXJzKHNoYXJlZCkKICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIGkrKzsKICAgICAgICAgfQpAQCAtOTUsMTAgKzk3LDggQEAKIAogc3RhdHVzX3QgTWVkaWFMb2dTZXJ2aWNlOjpkdW1wKGludCBmZCwgY29uc3QgVmVjdG9yPFN0cmluZzE2PiYgYXJncyBfX3VudXNlZCkKIHsKLSAgICAvLyBGSVhNRSBtZXJnZSB3aXRoIHNpbWlsYXIgYnV0IG5vdCBpZGVudGljYWwgY29kZSBhdCBzZXJ2aWNlcy9hdWRpb2ZsaW5nZXIvU2VydmljZVV0aWxpdGllcy5jcHAKLSAgICBzdGF0aWMgY29uc3QgU3RyaW5nMTYgc0R1bXAoImFuZHJvaWQucGVybWlzc2lvbi5EVU1QIik7Ci0gICAgaWYgKCEoSVBDVGhyZWFkU3RhdGU6OnNlbGYoKS0+Z2V0Q2FsbGluZ1VpZCgpID09IEFJRF9BVURJT1NFUlZFUiB8fAotICAgICAgICAgICAgUGVybWlzc2lvbkNhY2hlOjpjaGVja0NhbGxpbmdQZXJtaXNzaW9uKHNEdW1wKSkpIHsKKyAgICBpZiAoIShpc0F1ZGlvU2VydmVyT3JNZWRpYVNlcnZlclVpZChJUENUaHJlYWRTdGF0ZTo6c2VsZigpLT5nZXRDYWxsaW5nVWlkKCkpCisgICAgICAgICAgICB8fCBkdW1wQWxsb3dlZCgpKSkgewogICAgICAgICBkcHJpbnRmKGZkLCAiUGVybWlzc2lvbiBEZW5pYWw6IGNhbid0IGR1bXAgbWVkaWEubG9nIGZyb20gcGlkPSVkLCB1aWQ9JWRcbiIsCiAgICAgICAgICAgICAgICAgSVBDVGhyZWFkU3RhdGU6OnNlbGYoKS0+Z2V0Q2FsbGluZ1BpZCgpLAogICAgICAgICAgICAgICAgIElQQ1RocmVhZFN0YXRlOjpzZWxmKCktPmdldENhbGxpbmdVaWQoKSk7CkBAIC0xMDgsNyArMTA4LDcgQEAKICAgICBpZiAoYXJncy5zaXplKCkgPiAwKSB7CiAgICAgICAgIGNvbnN0IFN0cmluZzggYXJnMChhcmdzWzBdKTsKICAgICAgICAgaWYgKCFzdHJjbXAoYXJnMC5zdHJpbmcoKSwgIi1yIikpIHsKLSAgICAgICAgICAgIC8vIG5lZWRlZCBiZWNhdXNlIG1OYW1lZFJlYWRlcnMgaXMgcHJvdGVjdGVkIGJ5IG1Mb2NrCisgICAgICAgICAgICAvLyBuZWVkZWQgYmVjYXVzZSBtUmVhZGVycyBpcyBwcm90ZWN0ZWQgYnkgbUxvY2sKICAgICAgICAgICAgIGJvb2wgbG9ja2VkID0gZHVtcFRyeUxvY2sobUxvY2spOwogCiAgICAgICAgICAgICAvLyBmYWlsZWQgdG8gbG9jayAtIE1lZGlhTG9nU2VydmljZSBpcyBwcm9iYWJseSBkZWFkbG9ja2VkCkBAIC0xMTksMjEgKzExOSwyMiBAQAogICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgIEFMT0dXKCIlczoiLCByZXN1bHQuc3RyaW5nKCkpOwogICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAvLyBUT0RPIHNob3VsZCB3ZSBpbnN0ZWFkIHByb2NlZWQgdG8gbU1lcmdlUmVhZGVyLmR1bXA/IGRvZXMgaXQgbmVlZCBsb2NrPwogICAgICAgICAgICAgICAgIHJldHVybiBOT19FUlJPUjsKICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgZm9yIChjb25zdCBhdXRvJiBuYW1lZFJlYWRlciA6IG1OYW1lZFJlYWRlcnMpIHsKKyAgICAgICAgICAgIGZvciAoY29uc3QgYXV0byAmZHVtcFJlYWRlciA6IG1EdW1wUmVhZGVycykgewogICAgICAgICAgICAgICAgIGlmIChmZCA+PSAwKSB7Ci0gICAgICAgICAgICAgICAgICAgIGRwcmludGYoZmQsICJcbiVzOlxuIiwgbmFtZWRSZWFkZXIubmFtZSgpKTsKKyAgICAgICAgICAgICAgICAgICAgZHByaW50ZihmZCwgIlxuJXM6XG4iLCBkdW1wUmVhZGVyLT5uYW1lKCkuY19zdHIoKSk7CisgICAgICAgICAgICAgICAgICAgIGR1bXBSZWFkZXItPmR1bXAoZmQsIDAgLyppbmRlbnQqLyk7CiAgICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgQUxPR0koIiVzOiIsIG5hbWVkUmVhZGVyLm5hbWUoKSk7CisgICAgICAgICAgICAgICAgICAgIEFMT0dJKCIlczoiLCBkdW1wUmVhZGVyLT5uYW1lKCkuY19zdHIoKSk7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQogICAgICAgICAgICAgbUxvY2sudW5sb2NrKCk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBtTWVyZ2VSZWFkZXIuZHVtcChmZCwgYXJncyk7CiAgICAgICAgIH0KICAgICB9Ci0gICAgbU1lcmdlUmVhZGVyLmR1bXAoZmQpOwogICAgIHJldHVybiBOT19FUlJPUjsKIH0KIApkaWZmIC0tZ2l0IGEvc2VydmljZXMvbWVkaWFsb2cvTWVkaWFMb2dTZXJ2aWNlLmggYi9zZXJ2aWNlcy9tZWRpYWxvZy9NZWRpYUxvZ1NlcnZpY2UuaAppbmRleCBjOTQ1ZDFmLi4yMWRmODk4IDEwMDY0NAotLS0gYS9zZXJ2aWNlcy9tZWRpYWxvZy9NZWRpYUxvZ1NlcnZpY2UuaAorKysgYi9zZXJ2aWNlcy9tZWRpYWxvZy9NZWRpYUxvZ1NlcnZpY2UuaApAQCAtMTksNiArMTksNyBAQAogCiAjaW5jbHVkZSA8YmluZGVyL0JpbmRlclNlcnZpY2UuaD4KICNpbmNsdWRlIDxtZWRpYS9JTWVkaWFMb2dTZXJ2aWNlLmg+CisjaW5jbHVkZSA8bWVkaWEvbmJsb2cvTWVyZ2VyLmg+CiAjaW5jbHVkZSA8bWVkaWEvbmJsb2cvTkJMb2cuaD4KIAogbmFtZXNwYWNlIGFuZHJvaWQgewpAQCAtNTUsNyArNTYsNyBAQAogCiAgICAgTXV0ZXggICAgICAgICAgICAgICBtTG9jazsKIAotICAgIFZlY3RvcjxOQkxvZzo6TmFtZWRSZWFkZXI+IG1OYW1lZFJlYWRlcnM7ICAgLy8gcHJvdGVjdGVkIGJ5IG1Mb2NrCisgICAgVmVjdG9yPHNwPE5CTG9nOjpEdW1wUmVhZGVyPj4gbUR1bXBSZWFkZXJzOyAgIC8vIHByb3RlY3RlZCBieSBtTG9jawogCiAgICAgLy8gRklYTUUgTmVlZCBjb21tZW50cyBvbiBhbGwgb2YgdGhlc2UsIGVzcGVjaWFsbHkgYWJvdXQgbG9ja2luZwogICAgIE5CTG9nOjpTaGFyZWQgKm1NZXJnZXJTaGFyZWQ7CmRpZmYgLS1naXQgYS9zZXJ2aWNlcy9vYm9lc2VydmljZS9BQXVkaW9FbmRwb2ludE1hbmFnZXIuY3BwIGIvc2VydmljZXMvb2JvZXNlcnZpY2UvQUF1ZGlvRW5kcG9pbnRNYW5hZ2VyLmNwcAppbmRleCAwNGZlZTEzLi5iMTg1NGJmIDEwMDY0NAotLS0gYS9zZXJ2aWNlcy9vYm9lc2VydmljZS9BQXVkaW9FbmRwb2ludE1hbmFnZXIuY3BwCisrKyBiL3NlcnZpY2VzL29ib2VzZXJ2aWNlL0FBdWRpb0VuZHBvaW50TWFuYWdlci5jcHAKQEAgLTE0MCw5ICsxNDAsOCBAQAogfQogCiBzcDxBQXVkaW9TZXJ2aWNlRW5kcG9pbnQ+IEFBdWRpb0VuZHBvaW50TWFuYWdlcjo6b3BlbkVuZHBvaW50KEFBdWRpb1NlcnZpY2UgJmF1ZGlvU2VydmljZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBhYXVkaW86OkFBdWRpb1N0cmVhbVJlcXVlc3QgJnJlcXVlc3QsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWF1ZGlvX3NoYXJpbmdfbW9kZV90IHNoYXJpbmdNb2RlKSB7Ci0gICAgaWYgKHNoYXJpbmdNb2RlID09IEFBVURJT19TSEFSSU5HX01PREVfRVhDTFVTSVZFKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgYWF1ZGlvOjpBQXVkaW9TdHJlYW1SZXF1ZXN0ICZyZXF1ZXN0KSB7CisgICAgaWYgKHJlcXVlc3QuZ2V0Q29uc3RhbnRDb25maWd1cmF0aW9uKCkuZ2V0U2hhcmluZ01vZGUoKSA9PSBBQVVESU9fU0hBUklOR19NT0RFX0VYQ0xVU0lWRSkgewogICAgICAgICByZXR1cm4gb3BlbkV4Y2x1c2l2ZUVuZHBvaW50KGF1ZGlvU2VydmljZSwgcmVxdWVzdCk7CiAgICAgfSBlbHNlIHsKICAgICAgICAgcmV0dXJuIG9wZW5TaGFyZWRFbmRwb2ludChhdWRpb1NlcnZpY2UsIHJlcXVlc3QpOwpkaWZmIC0tZ2l0IGEvc2VydmljZXMvb2JvZXNlcnZpY2UvQUF1ZGlvRW5kcG9pbnRNYW5hZ2VyLmggYi9zZXJ2aWNlcy9vYm9lc2VydmljZS9BQXVkaW9FbmRwb2ludE1hbmFnZXIuaAppbmRleCAxOTNiZGVlLi5iYTE3ODUzIDEwMDY0NAotLS0gYS9zZXJ2aWNlcy9vYm9lc2VydmljZS9BQXVkaW9FbmRwb2ludE1hbmFnZXIuaAorKysgYi9zZXJ2aWNlcy9vYm9lc2VydmljZS9BQXVkaW9FbmRwb2ludE1hbmFnZXIuaApAQCAtNTYsOCArNTYsNyBAQAogICAgICAqIEByZXR1cm4gZW5kcG9pbnQgb3IgbnVsbAogICAgICAqLwogICAgIGFuZHJvaWQ6OnNwPEFBdWRpb1NlcnZpY2VFbmRwb2ludD4gb3BlbkVuZHBvaW50KGFuZHJvaWQ6OkFBdWRpb1NlcnZpY2UgJmF1ZGlvU2VydmljZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBhYXVkaW86OkFBdWRpb1N0cmVhbVJlcXVlc3QgJnJlcXVlc3QsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWF1ZGlvX3NoYXJpbmdfbW9kZV90IHNoYXJpbmdNb2RlKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBhYXVkaW86OkFBdWRpb1N0cmVhbVJlcXVlc3QgJnJlcXVlc3QpOwogCiAgICAgdm9pZCBjbG9zZUVuZHBvaW50KGFuZHJvaWQ6OnNwPEFBdWRpb1NlcnZpY2VFbmRwb2ludD4gc2VydmljZUVuZHBvaW50KTsKIApkaWZmIC0tZ2l0IGEvc2VydmljZXMvb2JvZXNlcnZpY2UvQUF1ZGlvTWl4ZXIuY3BwIGIvc2VydmljZXMvb2JvZXNlcnZpY2UvQUF1ZGlvTWl4ZXIuY3BwCmluZGV4IGIwMzE4ODguLjFjMDNiN2YgMTAwNjQ0Ci0tLSBhL3NlcnZpY2VzL29ib2VzZXJ2aWNlL0FBdWRpb01peGVyLmNwcAorKysgYi9zZXJ2aWNlcy9vYm9lc2VydmljZS9BQXVkaW9NaXhlci5jcHAKQEAgLTk5LDcgKzk5LDcgQEAKICAgICAgICAgfQogICAgICAgICBwYXJ0SW5kZXgrKzsKICAgICB9Ci0gICAgZmlmby0+Z2V0Rmlmb0NvbnRyb2xsZXJCYXNlKCktPmFkdmFuY2VSZWFkSW5kZXgoZnJhbWVzRGVzaXJlZCk7CisgICAgZmlmby0+YWR2YW5jZVJlYWRJbmRleChmcmFtZXNEZXNpcmVkKTsKIAogI2lmIEFBVURJT19NSVhFUl9BVFJBQ0VfRU5BQkxFRAogICAgIEFUUkFDRV9FTkQoKTsKZGlmZiAtLWdpdCBhL3NlcnZpY2VzL29ib2VzZXJ2aWNlL0FBdWRpb1NlcnZpY2UuY3BwIGIvc2VydmljZXMvb2JvZXNlcnZpY2UvQUF1ZGlvU2VydmljZS5jcHAKaW5kZXggMDE4MmEyNy4uNWVjOTk3YyAxMDA2NDQKLS0tIGEvc2VydmljZXMvb2JvZXNlcnZpY2UvQUF1ZGlvU2VydmljZS5jcHAKKysrIGIvc2VydmljZXMvb2JvZXNlcnZpY2UvQUF1ZGlvU2VydmljZS5jcHAKQEAgLTI0LDYgKzI0LDcgQEAKIAogI2luY2x1ZGUgPGFhdWRpby9BQXVkaW8uaD4KICNpbmNsdWRlIDxtZWRpYXV0aWxzL1NjaGVkdWxpbmdQb2xpY3lTZXJ2aWNlLmg+CisjaW5jbHVkZSA8bWVkaWF1dGlscy9TZXJ2aWNlVXRpbGl0aWVzLmg+CiAjaW5jbHVkZSA8dXRpbHMvU3RyaW5nMTYuaD4KIAogI2luY2x1ZGUgImJpbmRpbmcvQUF1ZGlvU2VydmljZU1lc3NhZ2UuaCIKQEAgLTMzLDcgKzM0LDYgQEAKICNpbmNsdWRlICJBQXVkaW9TZXJ2aWNlU3RyZWFtTU1BUC5oIgogI2luY2x1ZGUgIkFBdWRpb1NlcnZpY2VTdHJlYW1TaGFyZWQuaCIKICNpbmNsdWRlICJiaW5kaW5nL0lBQXVkaW9TZXJ2aWNlLmgiCi0jaW5jbHVkZSAiU2VydmljZVV0aWxpdGllcy5oIgogCiB1c2luZyBuYW1lc3BhY2UgYW5kcm9pZDsKIHVzaW5nIG5hbWVzcGFjZSBhYXVkaW87CkBAIC0xMTgsMTEgKzExOCwxNiBAQAogICAgICAgICB9CiAgICAgfQogCi0gICAgLy8gaWYgU0hBUkVEIHJlcXVlc3RlZCBvciBpZiBFWENMVVNJVkUgZmFpbGVkCi0gICAgaWYgKHNoYXJpbmdNb2RlID09IEFBVURJT19TSEFSSU5HX01PREVfU0hBUkVECi0gICAgICAgICB8fCAoc2VydmljZVN0cmVhbS5nZXQoKSA9PSBudWxscHRyICYmICFzaGFyaW5nTW9kZU1hdGNoUmVxdWlyZWQpKSB7CisgICAgLy8gSWYgU0hBUkVEIHJlcXVlc3RlZCBvciBpZiBFWENMVVNJVkUgZmFpbGVkLgorICAgIGlmIChzaGFyaW5nTW9kZSA9PSBBQVVESU9fU0hBUklOR19NT0RFX1NIQVJFRCkgewogICAgICAgICBzZXJ2aWNlU3RyZWFtID0gIG5ldyBBQXVkaW9TZXJ2aWNlU3RyZWFtU2hhcmVkKCp0aGlzKTsKICAgICAgICAgcmVzdWx0ID0gc2VydmljZVN0cmVhbS0+b3BlbihyZXF1ZXN0KTsKKyAgICB9IGVsc2UgaWYgKHNlcnZpY2VTdHJlYW0uZ2V0KCkgPT0gbnVsbHB0ciAmJiAhc2hhcmluZ01vZGVNYXRjaFJlcXVpcmVkKSB7CisgICAgICAgIGFhdWRpbzo6QUF1ZGlvU3RyZWFtUmVxdWVzdCBtb2RpZmllZFJlcXVlc3QgPSByZXF1ZXN0OworICAgICAgICAvLyBPdmVyd3JpdGUgdGhlIG9yaWdpbmFsIEVYQ0xVU0lWRSBtb2RlIHdpdGggU0hBUkVELgorICAgICAgICBtb2RpZmllZFJlcXVlc3QuZ2V0Q29uZmlndXJhdGlvbigpLnNldFNoYXJpbmdNb2RlKEFBVURJT19TSEFSSU5HX01PREVfU0hBUkVEKTsKKyAgICAgICAgc2VydmljZVN0cmVhbSA9ICBuZXcgQUF1ZGlvU2VydmljZVN0cmVhbVNoYXJlZCgqdGhpcyk7CisgICAgICAgIHJlc3VsdCA9IHNlcnZpY2VTdHJlYW0tPm9wZW4obW9kaWZpZWRSZXF1ZXN0KTsKICAgICB9CiAKICAgICBpZiAocmVzdWx0ICE9IEFBVURJT19PSykgewpkaWZmIC0tZ2l0IGEvc2VydmljZXMvb2JvZXNlcnZpY2UvQUF1ZGlvU2VydmljZUVuZHBvaW50LmNwcCBiL3NlcnZpY2VzL29ib2VzZXJ2aWNlL0FBdWRpb1NlcnZpY2VFbmRwb2ludC5jcHAKaW5kZXggMDM0OTAzNC4uMjRhYjY1ZSAxMDA2NDQKLS0tIGEvc2VydmljZXMvb2JvZXNlcnZpY2UvQUF1ZGlvU2VydmljZUVuZHBvaW50LmNwcAorKysgYi9zZXJ2aWNlcy9vYm9lc2VydmljZS9BQXVkaW9TZXJ2aWNlRW5kcG9pbnQuY3BwCkBAIC01OSw2ICs1OSw3IEBACiAgICAgcmVzdWx0IDw8ICIgICAgRGV2aWNlIElkOiAgICAgICAgICAgICIgPDwgZ2V0RGV2aWNlSWQoKSA8PCAiXG4iOwogICAgIHJlc3VsdCA8PCAiICAgIFNhbXBsZSBSYXRlOiAgICAgICAgICAiIDw8IGdldFNhbXBsZVJhdGUoKSA8PCAiXG4iOwogICAgIHJlc3VsdCA8PCAiICAgIENoYW5uZWwgQ291bnQ6ICAgICAgICAiIDw8IGdldFNhbXBsZXNQZXJGcmFtZSgpIDw8ICJcbiI7CisgICAgcmVzdWx0IDw8ICIgICAgRm9ybWF0OiAgICAgICAgICAgICAgICIgPDwgZ2V0Rm9ybWF0KCkgPDwgIlxuIjsKICAgICByZXN1bHQgPDwgIiAgICBGcmFtZXMgUGVyIEJ1cnN0OiAgICAgIiA8PCBtRnJhbWVzUGVyQnVyc3QgPDwgIlxuIjsKICAgICByZXN1bHQgPDwgIiAgICBVc2FnZTogICAgICAgICAgICAgICAgIiA8PCBnZXRVc2FnZSgpIDw8ICJcbiI7CiAgICAgcmVzdWx0IDw8ICIgICAgQ29udGVudFR5cGU6ICAgICAgICAgICIgPDwgZ2V0Q29udGVudFR5cGUoKSA8PCAiXG4iOwpkaWZmIC0tZ2l0IGEvc2VydmljZXMvb2JvZXNlcnZpY2UvQUF1ZGlvU2VydmljZUVuZHBvaW50Q2FwdHVyZS5jcHAgYi9zZXJ2aWNlcy9vYm9lc2VydmljZS9BQXVkaW9TZXJ2aWNlRW5kcG9pbnRDYXB0dXJlLmNwcAppbmRleCBlZmFjNzg4Li43YWU3ZjFiIDEwMDY0NAotLS0gYS9zZXJ2aWNlcy9vYm9lc2VydmljZS9BQXVkaW9TZXJ2aWNlRW5kcG9pbnRDYXB0dXJlLmNwcAorKysgYi9zZXJ2aWNlcy9vYm9lc2VydmljZS9BQXVkaW9TZXJ2aWNlRW5kcG9pbnRDYXB0dXJlLmNwcApAQCAtMTAyLDcgKzEwMiw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RyZWFtU2hhcmVkLT5zZXRUaW1lc3RhbXBQb3NpdGlvbk9mZnNldChwb3NpdGlvbk9mZnNldCk7CiAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBJcyB0aGUgYnVmZmVyIHRvbyBmdWxsIHRvIHdyaXRlIGEgYnVyc3Q/Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGZpZm8tPmdldEZpZm9Db250cm9sbGVyQmFzZSgpLT5nZXRFbXB0eUZyYW1lc0F2YWlsYWJsZSgpIDwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZmlmby0+Z2V0RW1wdHlGcmFtZXNBdmFpbGFibGUoKSA8CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZXRGcmFtZXNQZXJCdXJzdCgpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cmVhbVNoYXJlZC0+aW5jcmVtZW50WFJ1bkNvdW50KCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKZGlmZiAtLWdpdCBhL3NlcnZpY2VzL29ib2VzZXJ2aWNlL0FBdWRpb1NlcnZpY2VFbmRwb2ludE1NQVAuY3BwIGIvc2VydmljZXMvb2JvZXNlcnZpY2UvQUF1ZGlvU2VydmljZUVuZHBvaW50TU1BUC5jcHAKaW5kZXggZjMwZjliYi4uMThmY2QzNSAxMDA2NDQKLS0tIGEvc2VydmljZXMvb2JvZXNlcnZpY2UvQUF1ZGlvU2VydmljZUVuZHBvaW50TU1BUC5jcHAKKysrIGIvc2VydmljZXMvb2JvZXNlcnZpY2UvQUF1ZGlvU2VydmljZUVuZHBvaW50TU1BUC5jcHAKQEAgLTExMSwxMSArMTExLDExIEBACiAgICAgbVJlcXVlc3RlZERldmljZUlkID0gZGV2aWNlSWQgPSBnZXREZXZpY2VJZCgpOwogCiAgICAgLy8gRmlsbCBpbiBjb25maWcKLSAgICBhYXVkaW9fZm9ybWF0X3QgYWF1ZGlvRm9ybWF0ID0gZ2V0Rm9ybWF0KCk7Ci0gICAgaWYgKGFhdWRpb0Zvcm1hdCA9PSBBQVVESU9fVU5TUEVDSUZJRUQgfHwgYWF1ZGlvRm9ybWF0ID09IEFBVURJT19GT1JNQVRfUENNX0ZMT0FUKSB7Ci0gICAgICAgIGFhdWRpb0Zvcm1hdCA9IEFBVURJT19GT1JNQVRfUENNX0kxNjsKKyAgICBhdWRpb19mb3JtYXRfdCBhdWRpb0Zvcm1hdCA9IGdldEZvcm1hdCgpOworICAgIGlmIChhdWRpb0Zvcm1hdCA9PSBBVURJT19GT1JNQVRfREVGQVVMVCB8fCBhdWRpb0Zvcm1hdCA9PSBBVURJT19GT1JNQVRfUENNX0ZMT0FUKSB7CisgICAgICAgIGF1ZGlvRm9ybWF0ID0gQVVESU9fRk9STUFUX1BDTV8xNl9CSVQ7CiAgICAgfQotICAgIGNvbmZpZy5mb3JtYXQgPSBBQXVkaW9Db252ZXJ0X2FhdWRpb1RvQW5kcm9pZERhdGFGb3JtYXQoYWF1ZGlvRm9ybWF0KTsKKyAgICBjb25maWcuZm9ybWF0ID0gYXVkaW9Gb3JtYXQ7CiAKICAgICBpbnQzMl90IGFhdWRpb1NhbXBsZVJhdGUgPSBnZXRTYW1wbGVSYXRlKCk7CiAgICAgaWYgKGFhdWRpb1NhbXBsZVJhdGUgPT0gQUFVRElPX1VOU1BFQ0lGSUVEKSB7CkBAIC0yMTAsOSArMjEwLDYgQEAKICAgICAgICAgdWlkX3QgYXVkaW9TZXJ2aWNlVWlkID0gZ2V0dWlkKCk7CiAgICAgICAgIGlmICgobU1tYXBDbGllbnQuY2xpZW50VWlkICE9IGF1ZGlvU2VydmljZVVpZCkgJiYKICAgICAgICAgICAgIGdldFNoYXJpbmdNb2RlKCkgPT0gQUFVRElPX1NIQVJJTkdfTU9ERV9FWENMVVNJVkUpIHsKLSAgICAgICAgICAgIC8vIEZhbGxiYWNrIGlzIGhhbmRsZWQgYnkgY2FsbGVyIGJ1dCBpbmRpY2F0ZSB3aGF0IGlzIHBvc3NpYmxlIGluIGNhc2UKLSAgICAgICAgICAgIC8vIHRoaXMgaXMgdXNlZCBpbiB0aGUgZnV0dXJlCi0gICAgICAgICAgICBzZXRTaGFyaW5nTW9kZShBQVVESU9fU0hBUklOR19NT0RFX1NIQVJFRCk7CiAgICAgICAgICAgICBBTE9HVygiJXMoKSAtIGV4Y2x1c2l2ZSBGRCBjYW5ub3QgYmUgdXNlZCBieSBjbGllbnQiLCBfX2Z1bmNfXyk7CiAgICAgICAgICAgICByZXN1bHQgPSBBQVVESU9fRVJST1JfVU5BVkFJTEFCTEU7CiAgICAgICAgICAgICBnb3RvIGVycm9yOwpAQCAtMjMzLDcgKzIzMCw3IEBACiAgICAgICAgIGdvdG8gZXJyb3I7CiAgICAgfQogICAgIG1GcmFtZXNQZXJCdXJzdCA9IG1NbWFwQnVmZmVyaW5mby5idXJzdF9zaXplX2ZyYW1lczsKLSAgICBzZXRGb3JtYXQoQUF1ZGlvQ29udmVydF9hbmRyb2lkVG9BQXVkaW9EYXRhRm9ybWF0KGNvbmZpZy5mb3JtYXQpKTsKKyAgICBzZXRGb3JtYXQoY29uZmlnLmZvcm1hdCk7CiAgICAgc2V0U2FtcGxlUmF0ZShjb25maWcuc2FtcGxlX3JhdGUpOwogCiAgICAgLy8gU2NhbGUgdXAgdGhlIGJ1cnN0IHNpemUgdG8gbWVldCB0aGUgbWluaW11bSBlcXVpdmFsZW50IGluIG1pY3Jvc2Vjb25kcy4KQEAgLTI1Myw2ICsyNTAsOSBAQAogICAgICAgICAgICIsIGRldmljZUlkID0gJWQsIGNhcGFjaXR5ID0gJWRcbiIsCiAgICAgICAgICAgX19mdW5jX18sIGdldFNhbXBsZVJhdGUoKSwgZ2V0U2FtcGxlc1BlckZyYW1lKCksIGRldmljZUlkLCBnZXRCdWZmZXJDYXBhY2l0eSgpKTsKIAorICAgIEFMT0dEKCIlcygpIGZvcm1hdCA9ID14JTA4eCwgZnJhbWUgc2l6ZSA9ICVkIiwKKyAgICAgICAgICBfX2Z1bmNfXywgZ2V0Rm9ybWF0KCksIGNhbGN1bGF0ZUJ5dGVzUGVyRnJhbWUoKSk7CisKICAgICByZXR1cm4gcmVzdWx0OwogCiBlcnJvcjoKZGlmZiAtLWdpdCBhL3NlcnZpY2VzL29ib2VzZXJ2aWNlL0FBdWRpb1NlcnZpY2VFbmRwb2ludFNoYXJlZC5jcHAgYi9zZXJ2aWNlcy9vYm9lc2VydmljZS9BQXVkaW9TZXJ2aWNlRW5kcG9pbnRTaGFyZWQuY3BwCmluZGV4IGZjOWYxNTUuLjJmMWVjN2UgMTAwNjQ0Ci0tLSBhL3NlcnZpY2VzL29ib2VzZXJ2aWNlL0FBdWRpb1NlcnZpY2VFbmRwb2ludFNoYXJlZC5jcHAKKysrIGIvc2VydmljZXMvb2JvZXNlcnZpY2UvQUF1ZGlvU2VydmljZUVuZHBvaW50U2hhcmVkLmNwcApAQCAtNzgsNiArNzgsNyBAQAogICAgIHNldFNhbXBsZXNQZXJGcmFtZShtU3RyZWFtSW50ZXJuYWwtPmdldFNhbXBsZXNQZXJGcmFtZSgpKTsKICAgICBzZXREZXZpY2VJZChtU3RyZWFtSW50ZXJuYWwtPmdldERldmljZUlkKCkpOwogICAgIHNldFNlc3Npb25JZChtU3RyZWFtSW50ZXJuYWwtPmdldFNlc3Npb25JZCgpKTsKKyAgICBzZXRGb3JtYXQoQVVESU9fRk9STUFUX1BDTV9GTE9BVCk7IC8vIGZvcmNlIGZvciBtaXhlcgogICAgIG1GcmFtZXNQZXJCdXJzdCA9IG1TdHJlYW1JbnRlcm5hbC0+Z2V0RnJhbWVzUGVyQnVyc3QoKTsKIAogICAgIHJldHVybiByZXN1bHQ7CmRpZmYgLS1naXQgYS9zZXJ2aWNlcy9vYm9lc2VydmljZS9BQXVkaW9TZXJ2aWNlU3RyZWFtQmFzZS5jcHAgYi9zZXJ2aWNlcy9vYm9lc2VydmljZS9BQXVkaW9TZXJ2aWNlU3RyZWFtQmFzZS5jcHAKaW5kZXggOWFmOGFmMy4uMTJiZTRhMyAxMDA2NDQKLS0tIGEvc2VydmljZXMvb2JvZXNlcnZpY2UvQUF1ZGlvU2VydmljZVN0cmVhbUJhc2UuY3BwCisrKyBiL3NlcnZpY2VzL29ib2VzZXJ2aWNlL0FBdWRpb1NlcnZpY2VTdHJlYW1CYXNlLmNwcApAQCAtODEsOCArODEsNyBAQAogICAgIHJldHVybiByZXN1bHQuc3RyKCk7CiB9CiAKLWFhdWRpb19yZXN1bHRfdCBBQXVkaW9TZXJ2aWNlU3RyZWFtQmFzZTo6b3Blbihjb25zdCBhYXVkaW86OkFBdWRpb1N0cmVhbVJlcXVlc3QgJnJlcXVlc3QsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWF1ZGlvX3NoYXJpbmdfbW9kZV90IHNoYXJpbmdNb2RlKSB7CithYXVkaW9fcmVzdWx0X3QgQUF1ZGlvU2VydmljZVN0cmVhbUJhc2U6Om9wZW4oY29uc3QgYWF1ZGlvOjpBQXVkaW9TdHJlYW1SZXF1ZXN0ICZyZXF1ZXN0KSB7CiAgICAgQUF1ZGlvRW5kcG9pbnRNYW5hZ2VyICZtRW5kcG9pbnRNYW5hZ2VyID0gQUF1ZGlvRW5kcG9pbnRNYW5hZ2VyOjpnZXRJbnN0YW5jZSgpOwogICAgIGFhdWRpb19yZXN1bHRfdCByZXN1bHQgPSBBQVVESU9fT0s7CiAKQEAgLTEwOSw4ICsxMDgsNyBAQAogICAgICAgICAvLyByZWZlcmVuY2VkIHVudGlsIHRoZSBzZXJ2aWNlIHJldHVybnMgYSBoYW5kbGUgdG8gdGhlIGNsaWVudC4KICAgICAgICAgLy8gU28gb25seSBvbmUgdGhyZWFkIGNhbiBvcGVuIGEgc3RyZWFtLgogICAgICAgICBtU2VydmljZUVuZHBvaW50ID0gbUVuZHBvaW50TWFuYWdlci5vcGVuRW5kcG9pbnQobUF1ZGlvU2VydmljZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlcXVlc3QsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaGFyaW5nTW9kZSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXF1ZXN0KTsKICAgICAgICAgaWYgKG1TZXJ2aWNlRW5kcG9pbnQgPT0gbnVsbHB0cikgewogICAgICAgICAgICAgQUxPR0UoIiVzKCkgb3BlbkVuZHBvaW50KCkgZmFpbGVkIiwgX19mdW5jX18pOwogICAgICAgICAgICAgcmVzdWx0ID0gQUFVRElPX0VSUk9SX1VOQVZBSUxBQkxFOwpkaWZmIC0tZ2l0IGEvc2VydmljZXMvb2JvZXNlcnZpY2UvQUF1ZGlvU2VydmljZVN0cmVhbU1NQVAuY3BwIGIvc2VydmljZXMvb2JvZXNlcnZpY2UvQUF1ZGlvU2VydmljZVN0cmVhbU1NQVAuY3BwCmluZGV4IGM4NDUzMDkuLjkzNzc5NDUgMTAwNjQ0Ci0tLSBhL3NlcnZpY2VzL29ib2VzZXJ2aWNlL0FBdWRpb1NlcnZpY2VTdHJlYW1NTUFQLmNwcAorKysgYi9zZXJ2aWNlcy9vYm9lc2VydmljZS9BQXVkaW9TZXJ2aWNlU3RyZWFtTU1BUC5jcHAKQEAgLTY0LDggKzY0LDEzIEBACiAKICAgICBzcDxBQXVkaW9TZXJ2aWNlU3RyZWFtTU1BUD4ga2VlcCh0aGlzKTsKIAotICAgIGFhdWRpb19yZXN1bHRfdCByZXN1bHQgPSBBQXVkaW9TZXJ2aWNlU3RyZWFtQmFzZTo6b3BlbihyZXF1ZXN0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBQVVESU9fU0hBUklOR19NT0RFX0VYQ0xVU0lWRSk7CisgICAgaWYgKHJlcXVlc3QuZ2V0Q29uc3RhbnRDb25maWd1cmF0aW9uKCkuZ2V0U2hhcmluZ01vZGUoKSAhPSBBQVVESU9fU0hBUklOR19NT0RFX0VYQ0xVU0lWRSkgeworICAgICAgICBBTE9HRSgiJXMoKSBzaGFyaW5nTW9kZSBtaXNtYXRjaCAlZCIsIF9fZnVuY19fLAorICAgICAgICAgICAgICByZXF1ZXN0LmdldENvbnN0YW50Q29uZmlndXJhdGlvbigpLmdldFNoYXJpbmdNb2RlKCkpOworICAgICAgICByZXR1cm4gQUFVRElPX0VSUk9SX0lOVEVSTkFMOworICAgIH0KKworICAgIGFhdWRpb19yZXN1bHRfdCByZXN1bHQgPSBBQXVkaW9TZXJ2aWNlU3RyZWFtQmFzZTo6b3BlbihyZXF1ZXN0KTsKICAgICBpZiAocmVzdWx0ICE9IEFBVURJT19PSykgewogICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgIH0KZGlmZiAtLWdpdCBhL3NlcnZpY2VzL29ib2VzZXJ2aWNlL0FBdWRpb1NlcnZpY2VTdHJlYW1TaGFyZWQuY3BwIGIvc2VydmljZXMvb2JvZXNlcnZpY2UvQUF1ZGlvU2VydmljZVN0cmVhbVNoYXJlZC5jcHAKaW5kZXggMDVjNTczNS4uZGJjMmMyZSAxMDA2NDQKLS0tIGEvc2VydmljZXMvb2JvZXNlcnZpY2UvQUF1ZGlvU2VydmljZVN0cmVhbVNoYXJlZC5jcHAKKysrIGIvc2VydmljZXMvb2JvZXNlcnZpY2UvQUF1ZGlvU2VydmljZVN0cmVhbVNoYXJlZC5jcHAKQEAgLTEyMCw3ICsxMjAsMTMgQEAKIAogICAgIHNwPEFBdWRpb1NlcnZpY2VTdHJlYW1TaGFyZWQ+IGtlZXAodGhpcyk7CiAKLSAgICBhYXVkaW9fcmVzdWx0X3QgcmVzdWx0ID0gQUF1ZGlvU2VydmljZVN0cmVhbUJhc2U6Om9wZW4ocmVxdWVzdCwgQUFVRElPX1NIQVJJTkdfTU9ERV9TSEFSRUQpOworICAgIGlmIChyZXF1ZXN0LmdldENvbnN0YW50Q29uZmlndXJhdGlvbigpLmdldFNoYXJpbmdNb2RlKCkgIT0gQUFVRElPX1NIQVJJTkdfTU9ERV9TSEFSRUQpIHsKKyAgICAgICAgQUxPR0UoIiVzKCkgc2hhcmluZ01vZGUgbWlzbWF0Y2ggJWQiLCBfX2Z1bmNfXywKKyAgICAgICAgICAgICAgcmVxdWVzdC5nZXRDb25zdGFudENvbmZpZ3VyYXRpb24oKS5nZXRTaGFyaW5nTW9kZSgpKTsKKyAgICAgICAgcmV0dXJuIEFBVURJT19FUlJPUl9JTlRFUk5BTDsKKyAgICB9CisKKyAgICBhYXVkaW9fcmVzdWx0X3QgcmVzdWx0ID0gQUF1ZGlvU2VydmljZVN0cmVhbUJhc2U6Om9wZW4ocmVxdWVzdCk7CiAgICAgaWYgKHJlc3VsdCAhPSBBQVVESU9fT0spIHsKICAgICAgICAgQUxPR0UoIiVzKCkgcmV0dXJuZWQgJWQiLCBfX2Z1bmNfXywgcmVzdWx0KTsKICAgICAgICAgcmV0dXJuIHJlc3VsdDsKQEAgLTEzNiwxMCArMTQyLDEwIEBACiAKICAgICAvLyBJcyB0aGUgcmVxdWVzdCBjb21wYXRpYmxlIHdpdGggdGhlIHNoYXJlZCBlbmRwb2ludD8KICAgICBzZXRGb3JtYXQoY29uZmlndXJhdGlvbklucHV0LmdldEZvcm1hdCgpKTsKLSAgICBpZiAoZ2V0Rm9ybWF0KCkgPT0gQUFVRElPX0ZPUk1BVF9VTlNQRUNJRklFRCkgewotICAgICAgICBzZXRGb3JtYXQoQUFVRElPX0ZPUk1BVF9QQ01fRkxPQVQpOwotICAgIH0gZWxzZSBpZiAoZ2V0Rm9ybWF0KCkgIT0gQUFVRElPX0ZPUk1BVF9QQ01fRkxPQVQpIHsKLSAgICAgICAgQUxPR0QoIiVzKCkgbUF1ZGlvRm9ybWF0ID0gJWQsIG5lZWQgRkxPQVQiLCBfX2Z1bmNfXywgZ2V0Rm9ybWF0KCkpOworICAgIGlmIChnZXRGb3JtYXQoKSA9PSBBVURJT19GT1JNQVRfREVGQVVMVCkgeworICAgICAgICBzZXRGb3JtYXQoQVVESU9fRk9STUFUX1BDTV9GTE9BVCk7CisgICAgfSBlbHNlIGlmIChnZXRGb3JtYXQoKSAhPSBBVURJT19GT1JNQVRfUENNX0ZMT0FUKSB7CisgICAgICAgIEFMT0dFKCIlcygpIGF1ZGlvX2Zvcm1hdF90IG1BdWRpb0Zvcm1hdCA9ICVkLCBuZWVkIEZMT0FUIiwgX19mdW5jX18sIGdldEZvcm1hdCgpKTsKICAgICAgICAgcmVzdWx0ID0gQUFVRElPX0VSUk9SX0lOVkFMSURfRk9STUFUOwogICAgICAgICBnb3RvIGVycm9yOwogICAgIH0KQEAgLTE0OCw3ICsxNTQsNyBAQAogICAgIGlmIChnZXRTYW1wbGVSYXRlKCkgPT0gQUFVRElPX1VOU1BFQ0lGSUVEKSB7CiAgICAgICAgIHNldFNhbXBsZVJhdGUoZW5kcG9pbnQtPmdldFNhbXBsZVJhdGUoKSk7CiAgICAgfSBlbHNlIGlmIChnZXRTYW1wbGVSYXRlKCkgIT0gZW5kcG9pbnQtPmdldFNhbXBsZVJhdGUoKSkgewotICAgICAgICBBTE9HRCgiJXMoKSBtU2FtcGxlUmF0ZSA9ICVkLCBuZWVkICVkIiwKKyAgICAgICAgQUxPR0UoIiVzKCkgbVNhbXBsZVJhdGUgPSAlZCwgbmVlZCAlZCIsCiAgICAgICAgICAgICAgIF9fZnVuY19fLCBnZXRTYW1wbGVSYXRlKCksIGVuZHBvaW50LT5nZXRTYW1wbGVSYXRlKCkpOwogICAgICAgICByZXN1bHQgPSBBQVVESU9fRVJST1JfSU5WQUxJRF9SQVRFOwogICAgICAgICBnb3RvIGVycm9yOwpAQCAtMTU4LDcgKzE2NCw3IEBACiAgICAgaWYgKGdldFNhbXBsZXNQZXJGcmFtZSgpID09IEFBVURJT19VTlNQRUNJRklFRCkgewogICAgICAgICBzZXRTYW1wbGVzUGVyRnJhbWUoZW5kcG9pbnQtPmdldFNhbXBsZXNQZXJGcmFtZSgpKTsKICAgICB9IGVsc2UgaWYgKGdldFNhbXBsZXNQZXJGcmFtZSgpICE9IGVuZHBvaW50LT5nZXRTYW1wbGVzUGVyRnJhbWUoKSkgewotICAgICAgICBBTE9HRCgiJXMoKSBtU2FtcGxlc1BlckZyYW1lID0gJWQsIG5lZWQgJWQiLAorICAgICAgICBBTE9HRSgiJXMoKSBtU2FtcGxlc1BlckZyYW1lID0gJWQsIG5lZWQgJWQiLAogICAgICAgICAgICAgICBfX2Z1bmNfXywgZ2V0U2FtcGxlc1BlckZyYW1lKCksIGVuZHBvaW50LT5nZXRTYW1wbGVzUGVyRnJhbWUoKSk7CiAgICAgICAgIHJlc3VsdCA9IEFBVURJT19FUlJPUl9PVVRfT0ZfUkFOR0U7CiAgICAgICAgIGdvdG8gZXJyb3I7CkBAIC0xODUsOCArMTkxLDggQEAKICAgICAgICAgfQogICAgIH0KIAotICAgIEFMT0dEKCJBQXVkaW9TZXJ2aWNlU3RyZWFtU2hhcmVkOjpvcGVuKCkgYWN0dWFsIHJhdGUgPSAlZCwgY2hhbm5lbHMgPSAlZCwgZGV2aWNlSWQgPSAlZCIsCi0gICAgICAgICAgZ2V0U2FtcGxlUmF0ZSgpLCBnZXRTYW1wbGVzUGVyRnJhbWUoKSwgZW5kcG9pbnQtPmdldERldmljZUlkKCkpOworICAgIEFMT0dEKCIlcygpIGFjdHVhbCByYXRlID0gJWQsIGNoYW5uZWxzID0gJWQsIGRldmljZUlkID0gJWQiLAorICAgICAgICAgIF9fZnVuY19fLCBnZXRTYW1wbGVSYXRlKCksIGdldFNhbXBsZXNQZXJGcmFtZSgpLCBlbmRwb2ludC0+Z2V0RGV2aWNlSWQoKSk7CiAKICAgICByZXN1bHQgPSBlbmRwb2ludC0+cmVnaXN0ZXJTdHJlYW0oa2VlcCk7CiAgICAgaWYgKHJlc3VsdCAhPSBBQVVESU9fT0spIHsKZGlmZiAtLWdpdCBhL3NlcnZpY2VzL29ib2VzZXJ2aWNlL0FuZHJvaWQubWsgYi9zZXJ2aWNlcy9vYm9lc2VydmljZS9BbmRyb2lkLm1rCmluZGV4IDU4NGIyZWYuLjNkNWYxNDAgMTAwNjQ0Ci0tLSBhL3NlcnZpY2VzL29ib2VzZXJ2aWNlL0FuZHJvaWQubWsKKysrIGIvc2VydmljZXMvb2JvZXNlcnZpY2UvQW5kcm9pZC5tawpAQCAtNTMsNyArNTMsNiBAQAogICAgIGxpYmJpbmRlciBcCiAgICAgbGliY3V0aWxzIFwKICAgICBsaWJtZWRpYXV0aWxzIFwKLSAgICBsaWJzZXJ2aWNldXRpbGl0eSBcCiAgICAgbGlidXRpbHMgXAogICAgIGxpYmxvZwogCmRpZmYgLS1naXQgYS9zZXJ2aWNlcy9zb3VuZHRyaWdnZXIvQW5kcm9pZC5icCBiL3NlcnZpY2VzL3NvdW5kdHJpZ2dlci9BbmRyb2lkLmJwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFmMjI4M2EKLS0tIC9kZXYvbnVsbAorKysgYi9zZXJ2aWNlcy9zb3VuZHRyaWdnZXIvQW5kcm9pZC5icApAQCAtMCwwICsxLDU0IEBACisvLyBDb3B5cmlnaHQgMjAxNCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisvLworLy8gTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisvLyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisvLyBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKy8vCisvLyAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorLy8KKy8vIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKy8vIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisvLyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKy8vIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKy8vIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorCitjY19saWJyYXJ5X3NoYXJlZCB7CisgICAgbmFtZTogImxpYnNvdW5kdHJpZ2dlcnNlcnZpY2UiLAorCisgICAgc3JjczogWworICAgICAgICAiU291bmRUcmlnZ2VySHdTZXJ2aWNlLmNwcCIsCisgICAgICAgICJTb3VuZFRyaWdnZXJIYWxIaWRsLmNwcCIsCisgICAgXSwKKworICAgIHNoYXJlZF9saWJzOiBbCisgICAgICAgICJsaWJsb2ciLAorICAgICAgICAibGlidXRpbHMiLAorICAgICAgICAibGliYmluZGVyIiwKKyAgICAgICAgImxpYmN1dGlscyIsCisgICAgICAgICJsaWJoYXJkd2FyZSIsCisgICAgICAgICJsaWJzb3VuZHRyaWdnZXIiLAorICAgICAgICAibGliYXVkaW9jbGllbnQiLAorICAgICAgICAibGlibWVkaWF1dGlscyIsCisKKyAgICAgICAgImxpYmh3YmluZGVyIiwKKyAgICAgICAgImxpYmhpZGxiYXNlIiwKKyAgICAgICAgImxpYmhpZGxtZW1vcnkiLAorICAgICAgICAibGliaGlkbHRyYW5zcG9ydCIsCisgICAgICAgICJsaWJiYXNlIiwKKyAgICAgICAgImxpYmF1ZGlvaGFsIiwKKyAgICAgICAgImxpYmF1ZGlvaGFsX2RlYXRoaGFuZGxlciIsCisgICAgICAgICJhbmRyb2lkLmhhcmR3YXJlLnNvdW5kdHJpZ2dlckAyLjAiLAorICAgICAgICAiYW5kcm9pZC5oYXJkd2FyZS5zb3VuZHRyaWdnZXJAMi4xIiwKKyAgICAgICAgImFuZHJvaWQuaGFyZHdhcmUuc291bmR0cmlnZ2VyQDIuMiIsCisgICAgICAgICJhbmRyb2lkLmhhcmR3YXJlLmF1ZGlvLmNvbW1vbkAyLjAiLAorICAgICAgICAiYW5kcm9pZC5oaWRsLmFsbG9jYXRvckAxLjAiLAorICAgICAgICAiYW5kcm9pZC5oaWRsLm1lbW9yeUAxLjAiLAorICAgIF0sCisKKyAgICBpbmNsdWRlX2RpcnM6IFsiZnJhbWV3b3Jrcy9hdi9zZXJ2aWNlcy9hdWRpb2ZsaW5nZXIiXSwKKworICAgIGNmbGFnczogWworICAgICAgICAiLVdhbGwiLAorICAgICAgICAiLVdlcnJvciIsCisgICAgXSwKK30KZGlmZiAtLWdpdCBhL3NlcnZpY2VzL3NvdW5kdHJpZ2dlci9BbmRyb2lkLm1rIGIvc2VydmljZXMvc291bmR0cmlnZ2VyL0FuZHJvaWQubWsKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGFkMzY2NmUuLjAwMDAwMDAKLS0tIGEvc2VydmljZXMvc291bmR0cmlnZ2VyL0FuZHJvaWQubWsKKysrIC9kZXYvbnVsbApAQCAtMSw3NCArMCwwIEBACi0jIENvcHlyaWdodCAyMDE0IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKLSMKLSMgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7Ci0jIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KLSMgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0jCi0jICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0jCi0jIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKLSMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKLSMgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCi0jIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKLSMgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCi0KLUxPQ0FMX1BBVEg6PSAkKGNhbGwgbXktZGlyKQotCi1pbmNsdWRlICQoQ0xFQVJfVkFSUykKLQotaWZlcSAoJChTT1VORF9UUklHR0VSX1VTRV9TVFVCX01PRFVMRSksIDEpCi0gICAgaWZuZXEgKCQoVVNFX0xFR0FDWV9MT0NBTF9BVURJT19IQUwpLCB0cnVlKQotICAgICAgICAkKGVycm9yIFJlcXVpcmVzIGJ1aWxkaW5nIHdpdGggVVNFX0xFR0FDWV9MT0NBTF9BVURJT19IQUw9dHJ1ZSkKLSAgICBlbmRpZgotICAgIExPQ0FMX0NGTEFHUyArPSAtRFNPVU5EX1RSSUdHRVJfVVNFX1NUVUJfTU9EVUxFCi1lbmRpZgotCi1MT0NBTF9TUkNfRklMRVM6PSAgICAgICAgICAgICAgIFwKLSAgICBTb3VuZFRyaWdnZXJId1NlcnZpY2UuY3BwCi0KLUxPQ0FMX1NIQVJFRF9MSUJSQVJJRVM6PSBcCi0gICAgbGlibG9nIFwKLSAgICBsaWJ1dGlscyBcCi0gICAgbGliYmluZGVyIFwKLSAgICBsaWJjdXRpbHMgXAotICAgIGxpYmhhcmR3YXJlIFwKLSAgICBsaWJzb3VuZHRyaWdnZXIgXAotICAgIGxpYmF1ZGlvY2xpZW50IFwKLSAgICBsaWJzZXJ2aWNldXRpbGl0eQotCi0KLWlmZXEgKCQoVVNFX0xFR0FDWV9MT0NBTF9BVURJT19IQUwpLHRydWUpCi0jIGxpYmhhcmR3YXJlIGNvbmZpZ3VyYXRpb24KLUxPQ0FMX1NSQ19GSUxFUyArPSAgICAgICAgICAgICAgIFwKLSAgICBTb3VuZFRyaWdnZXJIYWxMZWdhY3kuY3BwCi1lbHNlCi0jIFRyZWJsZSBjb25maWd1cmF0aW9uCi1MT0NBTF9TUkNfRklMRVMgKz0gICAgICAgICAgICAgICBcCi0gICAgU291bmRUcmlnZ2VySGFsSGlkbC5jcHAKLQotTE9DQUxfU0hBUkVEX0xJQlJBUklFUyArPSBcCi0gICAgbGliaHdiaW5kZXIgXAotICAgIGxpYmhpZGxiYXNlIFwKLSAgICBsaWJoaWRsbWVtb3J5IFwKLSAgICBsaWJoaWRsdHJhbnNwb3J0IFwKLSAgICBsaWJiYXNlIFwKLSAgICBsaWJhdWRpb2hhbCBcCi0gICAgbGliYXVkaW9oYWxfZGVhdGhoYW5kbGVyIFwKLSAgICBhbmRyb2lkLmhhcmR3YXJlLnNvdW5kdHJpZ2dlckAyLjAgXAotICAgIGFuZHJvaWQuaGFyZHdhcmUuc291bmR0cmlnZ2VyQDIuMSBcCi0gICAgYW5kcm9pZC5oYXJkd2FyZS5hdWRpby5jb21tb25AMi4wIFwKLSAgICBhbmRyb2lkLmhpZGwuYWxsb2NhdG9yQDEuMCBcCi0gICAgYW5kcm9pZC5oaWRsLm1lbW9yeUAxLjAKLWVuZGlmCi0KLQotTE9DQUxfQ19JTkNMVURFUyArPSBcCi0gICAgZnJhbWV3b3Jrcy9hdi9zZXJ2aWNlcy9hdWRpb2ZsaW5nZXIKLQotTE9DQUxfTVVMVElMSUIgOj0gJChBVURJT1NFUlZFUl9NVUxUSUxJQikKLQotTE9DQUxfQ0ZMQUdTICs9IC1XYWxsIC1XZXJyb3IKLQotTE9DQUxfTU9EVUxFOj0gbGlic291bmR0cmlnZ2Vyc2VydmljZQotCi1pbmNsdWRlICQoQlVJTERfU0hBUkVEX0xJQlJBUlkpCmRpZmYgLS1naXQgYS9zZXJ2aWNlcy9zb3VuZHRyaWdnZXIvU291bmRUcmlnZ2VySGFsSGlkbC5jcHAgYi9zZXJ2aWNlcy9zb3VuZHRyaWdnZXIvU291bmRUcmlnZ2VySGFsSGlkbC5jcHAKaW5kZXggYWRmMjUyZS4uMWQzN2E4ZSAxMDA2NDQKLS0tIGEvc2VydmljZXMvc291bmR0cmlnZ2VyL1NvdW5kVHJpZ2dlckhhbEhpZGwuY3BwCisrKyBiL3NlcnZpY2VzL3NvdW5kdHJpZ2dlci9Tb3VuZFRyaWdnZXJIYWxIaWRsLmNwcApAQCAtMzU2LDYgKzM1NiwzOCBAQAogICAgIHJldHVybiBoaWRsUmV0dXJuOwogfQogCitpbnQgU291bmRUcmlnZ2VySGFsSGlkbDo6Z2V0TW9kZWxTdGF0ZShzb3VuZF9tb2RlbF9oYW5kbGVfdCBoYW5kbGUpCit7CisgICAgc3A8SVNvdW5kVHJpZ2dlckh3PiBzb3VuZHRyaWdnZXIgPSBnZXRTZXJ2aWNlKCk7CisgICAgaWYgKHNvdW5kdHJpZ2dlciA9PSAwKSB7CisgICAgICAgIHJldHVybiAtRU5PREVWOworICAgIH0KKworICAgIHNwPFYyXzJfSVNvdW5kVHJpZ2dlckh3PiBzb3VuZHRyaWdnZXJfMl8yID0gdG9TZXJ2aWNlMl8yKHNvdW5kdHJpZ2dlcik7CisgICAgaWYgKHNvdW5kdHJpZ2dlcl8yXzIgPT0gMCkgeworICAgICAgICBBTE9HRSgiZ2V0TW9kZWxTdGF0ZSBub3Qgc3VwcG9ydGVkIik7CisgICAgICAgIHJldHVybiAtRU5PREVWOworICAgIH0KKworICAgIHNwPFNvdW5kTW9kZWw+IG1vZGVsID0gZ2V0TW9kZWwoaGFuZGxlKTsKKyAgICBpZiAobW9kZWwgPT0gMCkgeworICAgICAgICBBTE9HRSgiZ2V0TW9kZWxTdGF0ZSBtb2RlbCBub3QgZm91bmQgZm9yIGhhbmRsZSAldSIsIGhhbmRsZSk7CisgICAgICAgIHJldHVybiAtRUlOVkFMOworICAgIH0KKworICAgIGludCByZXQgPSBOT19FUlJPUjsKKyAgICBSZXR1cm48aW50MzJfdD4gaGlkbFJldHVybigwKTsKKyAgICB7CisgICAgICAgIEF1dG9NdXRleCBsb2NrKG1IYWxMb2NrKTsKKyAgICAgICAgaGlkbFJldHVybiA9IHNvdW5kdHJpZ2dlcl8yXzItPmdldE1vZGVsU3RhdGUobW9kZWwtPm1IYWxIYW5kbGUpOworICAgIH0KKyAgICBpZiAoIWhpZGxSZXR1cm4uaXNPaygpKSB7CisgICAgICAgIEFMT0dFKCJnZXRNb2RlbFN0YXRlIGVycm9yICVzIiwgaGlkbFJldHVybi5kZXNjcmlwdGlvbigpLmNfc3RyKCkpOworICAgICAgICByZXQgPSBGQUlMRURfVFJBTlNBQ1RJT047CisgICAgfQorICAgIHJldHVybiByZXQ7Cit9CisKIFNvdW5kVHJpZ2dlckhhbEhpZGw6OlNvdW5kVHJpZ2dlckhhbEhpZGwoY29uc3QgY2hhciAqbW9kdWxlTmFtZSkKICAgICA6IG1Nb2R1bGVOYW1lKG1vZHVsZU5hbWUpLCBtTmV4dFVuaXF1ZUlkKDEpCiB7CkBAIC0zODgsNiArNDIwLDEyIEBACiAgICAgcmV0dXJuIGNhc3RSZXN1bHRfMl8xLmlzT2soKSA/IHN0YXRpY19jYXN0PHNwPFYyXzFfSVNvdW5kVHJpZ2dlckh3Pj4oY2FzdFJlc3VsdF8yXzEpIDogbnVsbHB0cjsKIH0KIAorc3A8VjJfMl9JU291bmRUcmlnZ2VySHc+IFNvdW5kVHJpZ2dlckhhbEhpZGw6OnRvU2VydmljZTJfMihjb25zdCBzcDxJU291bmRUcmlnZ2VySHc+JiBzKQoreworICAgIGF1dG8gY2FzdFJlc3VsdF8yXzIgPSBWMl8yX0lTb3VuZFRyaWdnZXJIdzo6Y2FzdEZyb20ocyk7CisgICAgcmV0dXJuIGNhc3RSZXN1bHRfMl8yLmlzT2soKSA/IHN0YXRpY19jYXN0PHNwPFYyXzJfSVNvdW5kVHJpZ2dlckh3Pj4oY2FzdFJlc3VsdF8yXzIpIDogbnVsbHB0cjsKK30KKwogc3A8U291bmRUcmlnZ2VySGFsSGlkbDo6U291bmRNb2RlbD4gU291bmRUcmlnZ2VySGFsSGlkbDo6Z2V0TW9kZWwoc291bmRfbW9kZWxfaGFuZGxlX3QgaGFuZGxlKQogewogICAgIEF1dG9NdXRleCBsb2NrKG1Mb2NrKTsKZGlmZiAtLWdpdCBhL3NlcnZpY2VzL3NvdW5kdHJpZ2dlci9Tb3VuZFRyaWdnZXJIYWxIaWRsLmggYi9zZXJ2aWNlcy9zb3VuZHRyaWdnZXIvU291bmRUcmlnZ2VySGFsSGlkbC5oCmluZGV4IDBiNDRhZTAuLmZiOWUzOWUgMTAwNjQ0Ci0tLSBhL3NlcnZpY2VzL3NvdW5kdHJpZ2dlci9Tb3VuZFRyaWdnZXJIYWxIaWRsLmgKKysrIGIvc2VydmljZXMvc291bmR0cmlnZ2VyL1NvdW5kVHJpZ2dlckhhbEhpZGwuaApAQCAtMjcsNiArMjcsNyBAQAogI2luY2x1ZGUgIlNvdW5kVHJpZ2dlckhhbEludGVyZmFjZS5oIgogI2luY2x1ZGUgPGFuZHJvaWQvaGFyZHdhcmUvc291bmR0cmlnZ2VyLzIuMC90eXBlcy5oPgogI2luY2x1ZGUgPGFuZHJvaWQvaGFyZHdhcmUvc291bmR0cmlnZ2VyLzIuMS9JU291bmRUcmlnZ2VySHcuaD4KKyNpbmNsdWRlIDxhbmRyb2lkL2hhcmR3YXJlL3NvdW5kdHJpZ2dlci8yLjIvSVNvdW5kVHJpZ2dlckh3Lmg+CiAjaW5jbHVkZSA8YW5kcm9pZC9oYXJkd2FyZS9zb3VuZHRyaWdnZXIvMi4wL0lTb3VuZFRyaWdnZXJId0NhbGxiYWNrLmg+CiAjaW5jbHVkZSA8YW5kcm9pZC9oYXJkd2FyZS9zb3VuZHRyaWdnZXIvMi4xL0lTb3VuZFRyaWdnZXJId0NhbGxiYWNrLmg+CiAKQEAgLTQ2LDYgKzQ3LDggQEAKIHVzaW5nIFYyXzFfSVNvdW5kVHJpZ2dlckh3Q2FsbGJhY2sgPQogICAgICAgICA6OmFuZHJvaWQ6OmhhcmR3YXJlOjpzb3VuZHRyaWdnZXI6OlYyXzE6OklTb3VuZFRyaWdnZXJId0NhbGxiYWNrOwogdXNpbmcgOjphbmRyb2lkOjpoaWRsOjptZW1vcnk6OlYxXzA6OklNZW1vcnk7Cit1c2luZyBWMl8yX0lTb3VuZFRyaWdnZXJIdyA9CisgICAgICAgIDo6YW5kcm9pZDo6aGFyZHdhcmU6OnNvdW5kdHJpZ2dlcjo6VjJfMjo6SVNvdW5kVHJpZ2dlckh3OwogCiBjbGFzcyBTb3VuZFRyaWdnZXJIYWxIaWRsIDogcHVibGljIFNvdW5kVHJpZ2dlckhhbEludGVyZmFjZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwdWJsaWMgdmlydHVhbCBWMl8xX0lTb3VuZFRyaWdnZXJId0NhbGxiYWNrCkBAIC05Miw2ICs5NSwxNCBAQAogICAgICAgICAgKi8KICAgICAgICAgdmlydHVhbCBpbnQgc3RvcEFsbFJlY29nbml0aW9ucygpOwogCisgICAgICAgIC8qIEdldCB0aGUgY3VycmVudCBzdGF0ZSBvZiBhIGdpdmVuIG1vZGVsLgorICAgICAgICAgKiBSZXR1cm5zIDAgb3IgYW4gZXJyb3IgY29kZS4gSWYgc3VjY2Vzc2Z1bCB0aGUgc3RhdGUgd2lsbCBiZSByZXR1cm5lZCBhc3luY2hyb25vdXNseQorICAgICAgICAgKiB2aWEgYSByZWNvZ25pdGlvbiBldmVudCBpbiB0aGUgY2FsbGJhY2sgbWV0aG9kIHRoYXQgd2FzIHJlZ2lzdGVyZWQgaW4gdGhlCisgICAgICAgICAqIHN0YXJ0UmVjb2duaXRpb24oKSBtZXRob2QuCisgICAgICAgICAqIE9ubHkgc3VwcG9ydGVkIGZvciBkZXZpY2UgYXBpIHZlcnNpb25zIFNPVU5EX1RSSUdHRVJfREVWSUNFX0FQSV9WRVJTSU9OXzFfMiBvciBhYm92ZS4KKyAgICAgICAgICovCisgICAgICAgIHZpcnR1YWwgaW50IGdldE1vZGVsU3RhdGUoc291bmRfbW9kZWxfaGFuZGxlX3QgaGFuZGxlKTsKKwogICAgICAgICAvLyBJU291bmRUcmlnZ2VySHdDYWxsYmFjawogICAgICAgICB2aXJ0dWFsIDo6YW5kcm9pZDo6aGFyZHdhcmU6OlJldHVybjx2b2lkPiByZWNvZ25pdGlvbkNhbGxiYWNrKAogICAgICAgICAgICAgICAgIGNvbnN0IFYyXzBfSVNvdW5kVHJpZ2dlckh3Q2FsbGJhY2s6OlJlY29nbml0aW9uRXZlbnQmIGV2ZW50LCBDYWxsYmFja0Nvb2tpZSBjb29raWUpOwpAQCAtMTgyLDYgKzE5Myw3IEBACiAgICAgICAgIHVpbnQzMl90IG5leHRVbmlxdWVJZCgpOwogICAgICAgICBzcDxJU291bmRUcmlnZ2VySHc+IGdldFNlcnZpY2UoKTsKICAgICAgICAgc3A8VjJfMV9JU291bmRUcmlnZ2VySHc+IHRvU2VydmljZTJfMShjb25zdCBzcDxJU291bmRUcmlnZ2VySHc+JiBzKTsKKyAgICAgICAgc3A8VjJfMl9JU291bmRUcmlnZ2VySHc+IHRvU2VydmljZTJfMihjb25zdCBzcDxJU291bmRUcmlnZ2VySHc+JiBzKTsKICAgICAgICAgc3A8U291bmRNb2RlbD4gZ2V0TW9kZWwoc291bmRfbW9kZWxfaGFuZGxlX3QgaGFuZGxlKTsKICAgICAgICAgc3A8U291bmRNb2RlbD4gcmVtb3ZlTW9kZWwoc291bmRfbW9kZWxfaGFuZGxlX3QgaGFuZGxlKTsKIApkaWZmIC0tZ2l0IGEvc2VydmljZXMvc291bmR0cmlnZ2VyL1NvdW5kVHJpZ2dlckhhbEludGVyZmFjZS5oIGIvc2VydmljZXMvc291bmR0cmlnZ2VyL1NvdW5kVHJpZ2dlckhhbEludGVyZmFjZS5oCmluZGV4IGMwODMxOTUuLjAxODNlY2UgMTAwNjQ0Ci0tLSBhL3NlcnZpY2VzL3NvdW5kdHJpZ2dlci9Tb3VuZFRyaWdnZXJIYWxJbnRlcmZhY2UuaAorKysgYi9zZXJ2aWNlcy9zb3VuZHRyaWdnZXIvU291bmRUcmlnZ2VySGFsSW50ZXJmYWNlLmgKQEAgLTcxLDYgKzcxLDE0IEBACiAgICAgICAgICAqLwogICAgICAgICB2aXJ0dWFsIGludCBzdG9wQWxsUmVjb2duaXRpb25zKCkgPSAwOwogCisgICAgICAgIC8qIEdldCB0aGUgY3VycmVudCBzdGF0ZSBvZiBhIGdpdmVuIG1vZGVsLgorICAgICAgICAgKiBSZXR1cm5zIDAgb3IgYW4gZXJyb3IgY29kZS4gSWYgc3VjY2Vzc2Z1bCB0aGUgc3RhdGUgd2lsbCBiZSByZXR1cm5lZCBhc3luY2hyb25vdXNseQorICAgICAgICAgKiB2aWEgYSByZWNvZ25pdGlvbiBldmVudCBpbiB0aGUgY2FsbGJhY2sgbWV0aG9kIHRoYXQgd2FzIHJlZ2lzdGVyZWQgaW4gdGhlCisgICAgICAgICAqIHN0YXJ0UmVjb2duaXRpb24oKSBtZXRob2QuCisgICAgICAgICAqIE9ubHkgc3VwcG9ydGVkIGZvciBkZXZpY2UgYXBpIHZlcnNpb25zIFNPVU5EX1RSSUdHRVJfREVWSUNFX0FQSV9WRVJTSU9OXzFfMiBvciBhYm92ZS4KKyAgICAgICAgICovCisgICAgICAgIHZpcnR1YWwgaW50IGdldE1vZGVsU3RhdGUoc291bmRfbW9kZWxfaGFuZGxlX3QgaGFuZGxlKSA9IDA7CisKIHByb3RlY3RlZDoKICAgICAgICAgU291bmRUcmlnZ2VySGFsSW50ZXJmYWNlKCkge30KIH07CmRpZmYgLS1naXQgYS9zZXJ2aWNlcy9zb3VuZHRyaWdnZXIvU291bmRUcmlnZ2VySGFsTGVnYWN5LmNwcCBiL3NlcnZpY2VzL3NvdW5kdHJpZ2dlci9Tb3VuZFRyaWdnZXJIYWxMZWdhY3kuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyYjc4ODE4Li4wMDAwMDAwCi0tLSBhL3NlcnZpY2VzL3NvdW5kdHJpZ2dlci9Tb3VuZFRyaWdnZXJIYWxMZWdhY3kuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsMTI3ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTYgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAotICoKLSAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwotICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgotICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0gKgotICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLSAqCi0gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCi0gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAotICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCi0gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCi0gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KLSAqLwotCi0jaW5jbHVkZSA8dXRpbHMvTG9nLmg+Ci0jaW5jbHVkZSAiU291bmRUcmlnZ2VySGFsTGVnYWN5LmgiCi0KLW5hbWVzcGFjZSBhbmRyb2lkIHsKLQotLyogc3RhdGljICovCi1zcDxTb3VuZFRyaWdnZXJIYWxJbnRlcmZhY2U+IFNvdW5kVHJpZ2dlckhhbEludGVyZmFjZTo6Y29ubmVjdE1vZHVsZShjb25zdCBjaGFyICptb2R1bGVOYW1lKQotewotICAgIHJldHVybiBuZXcgU291bmRUcmlnZ2VySGFsTGVnYWN5KG1vZHVsZU5hbWUpOwotfQotCi1Tb3VuZFRyaWdnZXJIYWxMZWdhY3k6OlNvdW5kVHJpZ2dlckhhbExlZ2FjeShjb25zdCBjaGFyICptb2R1bGVOYW1lKQotICAgIDogbU1vZHVsZU5hbWUobW9kdWxlTmFtZSksIG1Id0RldmljZShOVUxMKQotewotfQotCi12b2lkIFNvdW5kVHJpZ2dlckhhbExlZ2FjeTo6b25GaXJzdFJlZigpCi17Ci0gICAgY29uc3QgaHdfbW9kdWxlX3QgKm1vZDsKLSAgICBpbnQgcmM7Ci0KLSAgICBpZiAobU1vZHVsZU5hbWUgPT0gTlVMTCkgewotICAgICAgICBtTW9kdWxlTmFtZSA9ICJwcmltYXJ5IjsKLSAgICB9Ci0KLSAgICByYyA9IGh3X2dldF9tb2R1bGVfYnlfY2xhc3MoU09VTkRfVFJJR0dFUl9IQVJEV0FSRV9NT0RVTEVfSUQsIG1Nb2R1bGVOYW1lLCAmbW9kKTsKLSAgICBpZiAocmMgIT0gMCkgewotICAgICAgICBBTE9HRSgiY291bGRuJ3QgbG9hZCBzb3VuZCB0cmlnZ2VyIG1vZHVsZSAlcy4lcyAoJXMpIiwKLSAgICAgICAgICAgICAgU09VTkRfVFJJR0dFUl9IQVJEV0FSRV9NT0RVTEVfSUQsIG1Nb2R1bGVOYW1lLCBzdHJlcnJvcigtcmMpKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICByYyA9IHNvdW5kX3RyaWdnZXJfaHdfZGV2aWNlX29wZW4obW9kLCAmbUh3RGV2aWNlKTsKLSAgICBpZiAocmMgIT0gMCkgewotICAgICAgICBBTE9HRSgiY291bGRuJ3Qgb3BlbiBzb3VuZCB0cmlnZ2VyIGh3IGRldmljZSBpbiAlcy4lcyAoJXMpIiwKLSAgICAgICAgICAgICAgU09VTkRfVFJJR0dFUl9IQVJEV0FSRV9NT0RVTEVfSUQsIG1Nb2R1bGVOYW1lLCBzdHJlcnJvcigtcmMpKTsKLSAgICAgICAgbUh3RGV2aWNlID0gTlVMTDsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBpZiAobUh3RGV2aWNlLT5jb21tb24udmVyc2lvbiA8IFNPVU5EX1RSSUdHRVJfREVWSUNFX0FQSV9WRVJTSU9OXzFfMCB8fAotICAgICAgICAgICAgbUh3RGV2aWNlLT5jb21tb24udmVyc2lvbiA+IFNPVU5EX1RSSUdHRVJfREVWSUNFX0FQSV9WRVJTSU9OX0NVUlJFTlQpIHsKLSAgICAgICAgQUxPR0UoIndyb25nIHNvdW5kIHRyaWdnZXIgaHcgZGV2aWNlIHZlcnNpb24gJTA0eCIsIG1Id0RldmljZS0+Y29tbW9uLnZlcnNpb24pOwotICAgICAgICByZXR1cm47Ci0gICAgfQotfQotCi1Tb3VuZFRyaWdnZXJIYWxMZWdhY3k6On5Tb3VuZFRyaWdnZXJIYWxMZWdhY3koKQotewotICAgIGlmIChtSHdEZXZpY2UgIT0gTlVMTCkgewotICAgICAgICBzb3VuZF90cmlnZ2VyX2h3X2RldmljZV9jbG9zZShtSHdEZXZpY2UpOwotICAgIH0KLX0KLQotaW50IFNvdW5kVHJpZ2dlckhhbExlZ2FjeTo6Z2V0UHJvcGVydGllcyhzdHJ1Y3Qgc291bmRfdHJpZ2dlcl9wcm9wZXJ0aWVzICpwcm9wZXJ0aWVzKQotewotICAgIGlmIChtSHdEZXZpY2UgPT0gTlVMTCkgewotICAgICAgICByZXR1cm4gLUVOT0RFVjsKLSAgICB9Ci0gICAgcmV0dXJuIG1Id0RldmljZS0+Z2V0X3Byb3BlcnRpZXMobUh3RGV2aWNlLCBwcm9wZXJ0aWVzKTsKLX0KLQotaW50IFNvdW5kVHJpZ2dlckhhbExlZ2FjeTo6bG9hZFNvdW5kTW9kZWwoc3RydWN0IHNvdW5kX3RyaWdnZXJfc291bmRfbW9kZWwgKnNvdW5kX21vZGVsLAotICAgICAgICAgICAgICAgICAgICAgICAgc291bmRfbW9kZWxfY2FsbGJhY2tfdCBjYWxsYmFjaywKLSAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKmNvb2tpZSwKLSAgICAgICAgICAgICAgICAgICAgICAgIHNvdW5kX21vZGVsX2hhbmRsZV90ICpoYW5kbGUpCi17Ci0gICAgaWYgKG1Id0RldmljZSA9PSBOVUxMKSB7Ci0gICAgICAgIHJldHVybiAtRU5PREVWOwotICAgIH0KLSAgICByZXR1cm4gbUh3RGV2aWNlLT5sb2FkX3NvdW5kX21vZGVsKG1Id0RldmljZSwgc291bmRfbW9kZWwsIGNhbGxiYWNrLCBjb29raWUsIGhhbmRsZSk7Ci19Ci0KLWludCBTb3VuZFRyaWdnZXJIYWxMZWdhY3k6OnVubG9hZFNvdW5kTW9kZWwoc291bmRfbW9kZWxfaGFuZGxlX3QgaGFuZGxlKQotewotICAgIGlmIChtSHdEZXZpY2UgPT0gTlVMTCkgewotICAgICAgICByZXR1cm4gLUVOT0RFVjsKLSAgICB9Ci0gICAgcmV0dXJuIG1Id0RldmljZS0+dW5sb2FkX3NvdW5kX21vZGVsKG1Id0RldmljZSwgaGFuZGxlKTsKLX0KLQotaW50IFNvdW5kVHJpZ2dlckhhbExlZ2FjeTo6c3RhcnRSZWNvZ25pdGlvbihzb3VuZF9tb2RlbF9oYW5kbGVfdCBoYW5kbGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RydWN0IHNvdW5kX3RyaWdnZXJfcmVjb2duaXRpb25fY29uZmlnICpjb25maWcsCi0gICAgICAgICAgICAgICAgICAgICAgICAgcmVjb2duaXRpb25fY2FsbGJhY2tfdCBjYWxsYmFjaywKLSAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICpjb29raWUpCi17Ci0gICAgaWYgKG1Id0RldmljZSA9PSBOVUxMKSB7Ci0gICAgICAgIHJldHVybiAtRU5PREVWOwotICAgIH0KLSAgICByZXR1cm4gbUh3RGV2aWNlLT5zdGFydF9yZWNvZ25pdGlvbihtSHdEZXZpY2UsIGhhbmRsZSwgY29uZmlnLCBjYWxsYmFjaywgY29va2llKTsKLX0KLQotaW50IFNvdW5kVHJpZ2dlckhhbExlZ2FjeTo6c3RvcFJlY29nbml0aW9uKHNvdW5kX21vZGVsX2hhbmRsZV90IGhhbmRsZSkKLXsKLSAgICBpZiAobUh3RGV2aWNlID09IE5VTEwpIHsKLSAgICAgICAgcmV0dXJuIC1FTk9ERVY7Ci0gICAgfQotICAgIHJldHVybiBtSHdEZXZpY2UtPnN0b3BfcmVjb2duaXRpb24obUh3RGV2aWNlLCBoYW5kbGUpOwotfQotCi1pbnQgU291bmRUcmlnZ2VySGFsTGVnYWN5OjpzdG9wQWxsUmVjb2duaXRpb25zKCkKLXsKLSAgICBpZiAobUh3RGV2aWNlID09IE5VTEwpIHsKLSAgICAgICAgcmV0dXJuIC1FTk9ERVY7Ci0gICAgfQotICAgIGlmIChtSHdEZXZpY2UtPmNvbW1vbi52ZXJzaW9uID49IFNPVU5EX1RSSUdHRVJfREVWSUNFX0FQSV9WRVJTSU9OXzFfMSAmJgotICAgICBtSHdEZXZpY2UtPnN0b3BfYWxsX3JlY29nbml0aW9ucykgewotICAgICAgICByZXR1cm4gbUh3RGV2aWNlLT5zdG9wX2FsbF9yZWNvZ25pdGlvbnMobUh3RGV2aWNlKTsKLSAgICB9Ci0gICAgcmV0dXJuIC1FTk9TWVM7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIGFuZHJvaWQKZGlmZiAtLWdpdCBhL3NlcnZpY2VzL3NvdW5kdHJpZ2dlci9Tb3VuZFRyaWdnZXJIYWxMZWdhY3kuaCBiL3NlcnZpY2VzL3NvdW5kdHJpZ2dlci9Tb3VuZFRyaWdnZXJIYWxMZWdhY3kuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTI0ODhkZS4uMDAwMDAwMAotLS0gYS9zZXJ2aWNlcy9zb3VuZHRyaWdnZXIvU291bmRUcmlnZ2VySGFsTGVnYWN5LmgKKysrIC9kZXYvbnVsbApAQCAtMSw4NSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDE2IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKLSAqCi0gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKLSAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KLSAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotICoKLSAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0gKgotICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQotICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKLSAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgotICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAotICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCi0gKi8KLQotI2lmbmRlZiBBTkRST0lEX0hBUkRXQVJFX1NPVU5EVFJJR0dFUl9IQUxfTEVHQUNZX0gKLSNkZWZpbmUgQU5EUk9JRF9IQVJEV0FSRV9TT1VORFRSSUdHRVJfSEFMX0xFR0FDWV9ICi0KLSNpbmNsdWRlICJTb3VuZFRyaWdnZXJIYWxJbnRlcmZhY2UuaCIKLQotbmFtZXNwYWNlIGFuZHJvaWQgewotCi1jbGFzcyBTb3VuZFRyaWdnZXJIYWxMZWdhY3kgOiBwdWJsaWMgU291bmRUcmlnZ2VySGFsSW50ZXJmYWNlCi0KLXsKLXB1YmxpYzoKLSAgICAgICAgdmlydHVhbCAgICAgICAgICAgICB+U291bmRUcmlnZ2VySGFsTGVnYWN5KCk7Ci0KLSAgICAgICAgdmlydHVhbCBpbnQgZ2V0UHJvcGVydGllcyhzdHJ1Y3Qgc291bmRfdHJpZ2dlcl9wcm9wZXJ0aWVzICpwcm9wZXJ0aWVzKTsKLQotICAgICAgICAvKgotICAgICAgICAgKiBMb2FkIGEgc291bmQgbW9kZWwuIE9uY2UgbG9hZGVkLCByZWNvZ25pdGlvbiBvZiB0aGlzIG1vZGVsIGNhbiBiZSBzdGFydGVkIGFuZCBzdG9wcGVkLgotICAgICAgICAgKiBPbmx5IG9uZSBhY3RpdmUgcmVjb2duaXRpb24gcGVyIG1vZGVsIGF0IGEgdGltZS4gVGhlIFNvdW5kVHJpZ2dlciBzZXJ2aWNlIHdpbGwgaGFuZGxlCi0gICAgICAgICAqIGNvbmN1cnJlbnQgcmVjb2duaXRpb24gcmVxdWVzdHMgYnkgZGlmZmVyZW50IHVzZXJzL2FwcGxpY2F0aW9ucyBvbiB0aGUgc2FtZSBtb2RlbC4KLSAgICAgICAgICogVGhlIGltcGxlbWVudGF0aW9uIHJldHVybnMgYSB1bmlxdWUgaGFuZGxlIHVzZWQgYnkgb3RoZXIgZnVuY3Rpb25zICh1bmxvYWRfc291bmRfbW9kZWwoKSwKLSAgICAgICAgICogc3RhcnRfcmVjb2duaXRpb24oKSwgZXRjLi4uCi0gICAgICAgICAqLwotICAgICAgICB2aXJ0dWFsIGludCBsb2FkU291bmRNb2RlbChzdHJ1Y3Qgc291bmRfdHJpZ2dlcl9zb3VuZF9tb2RlbCAqc291bmRfbW9kZWwsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNvdW5kX21vZGVsX2NhbGxiYWNrX3QgY2FsbGJhY2ssCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKmNvb2tpZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc291bmRfbW9kZWxfaGFuZGxlX3QgKmhhbmRsZSk7Ci0KLSAgICAgICAgLyoKLSAgICAgICAgICogVW5sb2FkIGEgc291bmQgbW9kZWwuIEEgc291bmQgbW9kZWwgY2FuIGJlIHVubG9hZGVkIHRvIG1ha2Ugcm9vbSBmb3IgYSBuZXcgb25lIHRvIG92ZXJjb21lCi0gICAgICAgICAqIGltcGxlbWVudGF0aW9uIGxpbWl0YXRpb25zLgotICAgICAgICAgKi8KLSAgICAgICAgdmlydHVhbCBpbnQgdW5sb2FkU291bmRNb2RlbChzb3VuZF9tb2RlbF9oYW5kbGVfdCBoYW5kbGUpOwotCi0gICAgICAgIC8qIFN0YXJ0IHJlY29nbml0aW9uIG9uIGEgZ2l2ZW4gbW9kZWwuIE9ubHkgb25lIHJlY29nbml0aW9uIGFjdGl2ZSBhdCBhIHRpbWUgcGVyIG1vZGVsLgotICAgICAgICAgKiBPbmNlIHJlY29nbml0aW9uIHN1Y2NlZWRzIG9mIGZhaWxzLCB0aGUgY2FsbGJhY2sgaXMgY2FsbGVkLgotICAgICAgICAgKiBUT0RPOiBncm91cCByZWNvZ25pdGlvbiBjb25maWd1cmF0aW9uIHBhcmFtZXRlcnMgaW50byBvbmUgc3RydWN0IGFuZCBhZGQga2V5IHBocmFzZSBvcHRpb25zLgotICAgICAgICAgKi8KLSAgICAgICAgdmlydHVhbCBpbnQgc3RhcnRSZWNvZ25pdGlvbihzb3VuZF9tb2RlbF9oYW5kbGVfdCBoYW5kbGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdHJ1Y3Qgc291bmRfdHJpZ2dlcl9yZWNvZ25pdGlvbl9jb25maWcgKmNvbmZpZywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlY29nbml0aW9uX2NhbGxiYWNrX3QgY2FsbGJhY2ssCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICpjb29raWUpOwotCi0gICAgICAgIC8qIFN0b3AgcmVjb2duaXRpb24gb24gYSBnaXZlbiBtb2RlbC4KLSAgICAgICAgICogVGhlIGltcGxlbWVudGF0aW9uIGRvZXMgbm90IGhhdmUgdG8gY2FsbCB0aGUgY2FsbGJhY2sgd2hlbiBzdG9wcGVkIHZpYSB0aGlzIG1ldGhvZC4KLSAgICAgICAgICovCi0gICAgICAgIHZpcnR1YWwgaW50IHN0b3BSZWNvZ25pdGlvbihzb3VuZF9tb2RlbF9oYW5kbGVfdCBoYW5kbGUpOwotCi0gICAgICAgIC8qIFN0b3AgcmVjb2duaXRpb24gb24gYWxsIG1vZGVscy4KLSAgICAgICAgICogT25seSBzdXBwb3J0ZWQgZm9yIGRldmljZSBhcGkgdmVyc2lvbnMgU09VTkRfVFJJR0dFUl9ERVZJQ0VfQVBJX1ZFUlNJT05fMV8xIG9yIGFib3ZlLgotICAgICAgICAgKiBJZiBubyBpbXBsZW1lbnRhdGlvbiBpcyBwcm92aWRlZCwgc3RvcF9yZWNvZ25pdGlvbiB3aWxsIGJlIGNhbGxlZCBmb3IgZWFjaCBydW5uaW5nIG1vZGVsLgotICAgICAgICAgKi8KLSAgICAgICAgaW50IHN0b3BBbGxSZWNvZ25pdGlvbnMoKTsKLQotICAgICAgICAvLyBSZWZCYXNlCi0gICAgICAgIHZpcnR1YWwgICAgIHZvaWQgICAgICAgIG9uRmlyc3RSZWYoKTsKLQotcHJpdmF0ZToKLQotICAgICAgICBmcmllbmQgY2xhc3MgU291bmRUcmlnZ2VySGFsSW50ZXJmYWNlOwotCi0gICAgICAgIGV4cGxpY2l0IFNvdW5kVHJpZ2dlckhhbExlZ2FjeShjb25zdCBjaGFyICptb2R1bGVOYW1lID0gTlVMTCk7Ci0KLSAgICAgICAgY29uc3QgY2hhciAqbU1vZHVsZU5hbWU7Ci0gICAgICAgIHN0cnVjdCBzb3VuZF90cmlnZ2VyX2h3X2RldmljZSogICAgICAgIG1Id0RldmljZTsKLX07Ci0KLX0gLy8gbmFtZXNwYWNlIGFuZHJvaWQKLQotI2VuZGlmIC8vIEFORFJPSURfSEFSRFdBUkVfU09VTkRUUklHR0VSX0hBTF9MRUdBQ1lfSApkaWZmIC0tZ2l0IGEvc2VydmljZXMvc291bmR0cmlnZ2VyL1NvdW5kVHJpZ2dlckh3U2VydmljZS5jcHAgYi9zZXJ2aWNlcy9zb3VuZHRyaWdnZXIvU291bmRUcmlnZ2VySHdTZXJ2aWNlLmNwcAppbmRleCBhN2Q2ZTgzLi45NDRhYmNjIDEwMDY0NAotLS0gYS9zZXJ2aWNlcy9zb3VuZHRyaWdnZXIvU291bmRUcmlnZ2VySHdTZXJ2aWNlLmNwcAorKysgYi9zZXJ2aWNlcy9zb3VuZHRyaWdnZXIvU291bmRUcmlnZ2VySHdTZXJ2aWNlLmNwcApAQCAtMjcsMjAgKzI3LDE2IEBACiAjaW5jbHVkZSA8Y3V0aWxzL3Byb3BlcnRpZXMuaD4KICNpbmNsdWRlIDxoYXJkd2FyZS9oYXJkd2FyZS5oPgogI2luY2x1ZGUgPG1lZGlhL0F1ZGlvU3lzdGVtLmg+CisjaW5jbHVkZSA8bWVkaWF1dGlscy9TZXJ2aWNlVXRpbGl0aWVzLmg+CiAjaW5jbHVkZSA8dXRpbHMvRXJyb3JzLmg+CiAjaW5jbHVkZSA8dXRpbHMvTG9nLmg+CiAjaW5jbHVkZSA8YmluZGVyL0lTZXJ2aWNlTWFuYWdlci5oPgogI2luY2x1ZGUgPGJpbmRlci9NZW1vcnlCYXNlLmg+CiAjaW5jbHVkZSA8YmluZGVyL01lbW9yeUhlYXBCYXNlLmg+CiAjaW5jbHVkZSA8c3lzdGVtL3NvdW5kX3RyaWdnZXIuaD4KLSNpbmNsdWRlIDxTZXJ2aWNlVXRpbGl0aWVzLmg+CiAjaW5jbHVkZSAiU291bmRUcmlnZ2VySHdTZXJ2aWNlLmgiCiAKLSNpZmRlZiBTT1VORF9UUklHR0VSX1VTRV9TVFVCX01PRFVMRQotI2RlZmluZSBIV19NT0RVTEVfUFJFRklYICJzdHViIgotI2Vsc2UKICNkZWZpbmUgSFdfTU9EVUxFX1BSRUZJWCAicHJpbWFyeSIKLSNlbmRpZgogbmFtZXNwYWNlIGFuZHJvaWQgewogCiBTb3VuZFRyaWdnZXJId1NlcnZpY2U6OlNvdW5kVHJpZ2dlckh3U2VydmljZSgpCkBAIC01NjIsMTAgKzU1OCw3IEBACiAgICAgaWYgKG1IYWxJbnRlcmZhY2UgPT0gMCkgewogICAgICAgICByZXR1cm4gTk9fSU5JVDsKICAgICB9Ci0gICAgaWYgKG1vZGVsTWVtb3J5ID09IDAgfHwgbW9kZWxNZW1vcnktPnBvaW50ZXIoKSA9PSBOVUxMKSB7Ci0gICAgICAgIEFMT0dFKCJsb2FkU291bmRNb2RlbCgpIG1vZGVsTWVtb3J5IGlzIDAgb3IgaGFzIE5VTEwgcG9pbnRlcigpIik7Ci0gICAgICAgIHJldHVybiBCQURfVkFMVUU7Ci0gICAgfQorCiAgICAgc3RydWN0IHNvdW5kX3RyaWdnZXJfc291bmRfbW9kZWwgKnNvdW5kX21vZGVsID0KICAgICAgICAgICAgIChzdHJ1Y3Qgc291bmRfdHJpZ2dlcl9zb3VuZF9tb2RlbCAqKW1vZGVsTWVtb3J5LT5wb2ludGVyKCk7CiAKQEAgLTY1OSwxMSArNjUyLDYgQEAKICAgICBpZiAobUhhbEludGVyZmFjZSA9PSAwKSB7CiAgICAgICAgIHJldHVybiBOT19JTklUOwogICAgIH0KLSAgICBpZiAoZGF0YU1lbW9yeSA9PSAwIHx8IGRhdGFNZW1vcnktPnBvaW50ZXIoKSA9PSBOVUxMKSB7Ci0gICAgICAgIEFMT0dFKCJzdGFydFJlY29nbml0aW9uKCkgZGF0YU1lbW9yeSBpcyAwIG9yIGhhcyBOVUxMIHBvaW50ZXIoKSIpOwotICAgICAgICByZXR1cm4gQkFEX1ZBTFVFOwotCi0gICAgfQogCiAgICAgc3RydWN0IHNvdW5kX3RyaWdnZXJfcmVjb2duaXRpb25fY29uZmlnICpjb25maWcgPQogICAgICAgICAgICAgKHN0cnVjdCBzb3VuZF90cmlnZ2VyX3JlY29nbml0aW9uX2NvbmZpZyAqKWRhdGFNZW1vcnktPnBvaW50ZXIoKTsKQEAgLTcyNSw2ICs3MTMsMjUgQEAKICAgICByZXR1cm4gTk9fRVJST1I7CiB9CiAKK3N0YXR1c190IFNvdW5kVHJpZ2dlckh3U2VydmljZTo6TW9kdWxlOjpnZXRNb2RlbFN0YXRlKHNvdW5kX21vZGVsX2hhbmRsZV90IGhhbmRsZSkKK3sKKyAgICBBTE9HVigiZ2V0TW9kZWxTdGF0ZSgpIG1vZGVsIGhhbmRsZSAlZCIsIGhhbmRsZSk7CisgICAgaWYgKG1IYWxJbnRlcmZhY2UgPT0gMCkgeworICAgICAgICByZXR1cm4gTk9fSU5JVDsKKyAgICB9CisgICAgQXV0b011dGV4IGxvY2sobUxvY2spOworICAgIHNwPE1vZGVsPiBtb2RlbCA9IGdldE1vZGVsKGhhbmRsZSk7CisgICAgaWYgKG1vZGVsID09IDApIHsKKyAgICAgICAgcmV0dXJuIEJBRF9WQUxVRTsKKyAgICB9CisKKyAgICBpZiAobW9kZWwtPm1TdGF0ZSAhPSBNb2RlbDo6U1RBVEVfQUNUSVZFKSB7CisgICAgICAgIHJldHVybiBJTlZBTElEX09QRVJBVElPTjsKKyAgICB9CisKKyAgICByZXR1cm4gbUhhbEludGVyZmFjZS0+Z2V0TW9kZWxTdGF0ZShoYW5kbGUpOworfQorCiB2b2lkIFNvdW5kVHJpZ2dlckh3U2VydmljZTo6TW9kdWxlOjpvbkNhbGxiYWNrRXZlbnQoY29uc3Qgc3A8Q2FsbGJhY2tFdmVudD4mIGV2ZW50KQogewogICAgIEFMT0dWKCJvbkNhbGxiYWNrRXZlbnQgdHlwZSAlZCIsIGV2ZW50LT5tVHlwZSk7CkBAIC03NTgsNyArNzY1LDEwIEBACiAgICAgICAgICAgICB9CiAKICAgICAgICAgICAgIHJlY29nbml0aW9uRXZlbnQtPmNhcHR1cmVfc2Vzc2lvbiA9IG1vZGVsLT5tQ2FwdHVyZVNlc3Npb247Ci0gICAgICAgICAgICBtb2RlbC0+bVN0YXRlID0gTW9kZWw6OlNUQVRFX0lETEU7CisgICAgICAgICAgICAvLyBEb24ndCByZXNldCB0aGUgbW9kZWwgc3RhdGUgaWYgdGhpcyByZWNvZ25pdGlvbiBldmVudCBpcyBhIGdldC1zdGF0ZSByZXNwb25zZQorICAgICAgICAgICAgaWYgKHJlY29nbml0aW9uRXZlbnQtPnN0YXR1cyAhPSBSRUNPR05JVElPTl9TVEFUVVNfR0VUX1NUQVRFX1JFU1BPTlNFKSB7CisgICAgICAgICAgICAgICAgbW9kZWwtPm1TdGF0ZSA9IE1vZGVsOjpTVEFURV9JRExFOworICAgICAgICAgICAgfQogICAgICAgICAgICAgY2xpZW50cy5hZGQobW9kZWwtPm1Nb2R1bGVDbGllbnQpOwogICAgICAgICB9CiAgICAgfSBicmVhazsKQEAgLTk2Niw2ICs5NzYsOSBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIElQQ1RocmVhZFN0YXRlOjpzZWxmKCktPmdldENhbGxpbmdVaWQoKSkpIHsKICAgICAgICAgcmV0dXJuIFBFUk1JU1NJT05fREVOSUVEOwogICAgIH0KKyAgICBpZiAoY2hlY2tJTWVtb3J5KG1vZGVsTWVtb3J5KSAhPSBOT19FUlJPUikgeworICAgICAgICByZXR1cm4gQkFEX1ZBTFVFOworICAgIH0KIAogICAgIHNwPE1vZHVsZT4gbW9kdWxlID0gbU1vZHVsZS5wcm9tb3RlKCk7CiAgICAgaWYgKG1vZHVsZSA9PSAwKSB7CkBAIC05OTcsNiArMTAxMCw5IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSVBDVGhyZWFkU3RhdGU6OnNlbGYoKS0+Z2V0Q2FsbGluZ1VpZCgpKSkgewogICAgICAgICByZXR1cm4gUEVSTUlTU0lPTl9ERU5JRUQ7CiAgICAgfQorICAgIGlmIChjaGVja0lNZW1vcnkoZGF0YU1lbW9yeSkgIT0gTk9fRVJST1IpIHsKKyAgICAgICAgcmV0dXJuIEJBRF9WQUxVRTsKKyAgICB9CiAKICAgICBzcDxNb2R1bGU+IG1vZHVsZSA9IG1Nb2R1bGUucHJvbW90ZSgpOwogICAgIGlmIChtb2R1bGUgPT0gMCkgewpAQCAtMTAyMCw2ICsxMDM2LDIxIEBACiAgICAgcmV0dXJuIG1vZHVsZS0+c3RvcFJlY29nbml0aW9uKGhhbmRsZSk7CiB9CiAKK3N0YXR1c190IFNvdW5kVHJpZ2dlckh3U2VydmljZTo6TW9kdWxlQ2xpZW50OjpnZXRNb2RlbFN0YXRlKHNvdW5kX21vZGVsX2hhbmRsZV90IGhhbmRsZSkKK3sKKyAgICBBTE9HVigiZ2V0TW9kZWxTdGF0ZSgpIG1vZGVsIGhhbmRsZSAlZCIsIGhhbmRsZSk7CisgICAgaWYgKCFjYXB0dXJlSG90d29yZEFsbG93ZWQoSVBDVGhyZWFkU3RhdGU6OnNlbGYoKS0+Z2V0Q2FsbGluZ1BpZCgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIElQQ1RocmVhZFN0YXRlOjpzZWxmKCktPmdldENhbGxpbmdVaWQoKSkpIHsKKyAgICAgICAgcmV0dXJuIFBFUk1JU1NJT05fREVOSUVEOworICAgIH0KKworICAgIHNwPE1vZHVsZT4gbW9kdWxlID0gbU1vZHVsZS5wcm9tb3RlKCk7CisgICAgaWYgKG1vZHVsZSA9PSAwKSB7CisgICAgICAgIHJldHVybiBOT19JTklUOworICAgIH0KKyAgICByZXR1cm4gbW9kdWxlLT5nZXRNb2RlbFN0YXRlKGhhbmRsZSk7Cit9CisKIHZvaWQgU291bmRUcmlnZ2VySHdTZXJ2aWNlOjpNb2R1bGVDbGllbnQ6OnNldENhcHR1cmVTdGF0ZV9sKGJvb2wgYWN0aXZlKQogewogICAgIEFMT0dWKCJNb2R1bGVDbGllbnQ6OnNldENhcHR1cmVTdGF0ZV9sICVkIiwgYWN0aXZlKTsKZGlmZiAtLWdpdCBhL3NlcnZpY2VzL3NvdW5kdHJpZ2dlci9Tb3VuZFRyaWdnZXJId1NlcnZpY2UuaCBiL3NlcnZpY2VzL3NvdW5kdHJpZ2dlci9Tb3VuZFRyaWdnZXJId1NlcnZpY2UuaAppbmRleCA3MDhmYzk4Li40MjU4ZWMwIDEwMDY0NAotLS0gYS9zZXJ2aWNlcy9zb3VuZHRyaWdnZXIvU291bmRUcmlnZ2VySHdTZXJ2aWNlLmgKKysrIGIvc2VydmljZXMvc291bmR0cmlnZ2VyL1NvdW5kVHJpZ2dlckh3U2VydmljZS5oCkBAIC0xMjIsNiArMTIyLDcgQEAKICAgICAgICB2aXJ0dWFsIHN0YXR1c190IHN0YXJ0UmVjb2duaXRpb24oc291bmRfbW9kZWxfaGFuZGxlX3QgaGFuZGxlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzcDxJTWVtb3J5PiYgZGF0YU1lbW9yeSk7CiAgICAgICAgdmlydHVhbCBzdGF0dXNfdCBzdG9wUmVjb2duaXRpb24oc291bmRfbW9kZWxfaGFuZGxlX3QgaGFuZGxlKTsKKyAgICAgICB2aXJ0dWFsIHN0YXR1c190IGdldE1vZGVsU3RhdGUoc291bmRfbW9kZWxfaGFuZGxlX3QgaGFuZGxlKTsKIAogICAgICAgIHNwPFNvdW5kVHJpZ2dlckhhbEludGVyZmFjZT4gaGFsSW50ZXJmYWNlKCkgY29uc3QgeyByZXR1cm4gbUhhbEludGVyZmFjZTsgfQogICAgICAgIHN0cnVjdCBzb3VuZF90cmlnZ2VyX21vZHVsZV9kZXNjcmlwdG9yIGRlc2NyaXB0b3IoKSB7IHJldHVybiBtRGVzY3JpcHRvcjsgfQpAQCAtMTY5LDYgKzE3MCw3IEBACiAgICAgICAgdmlydHVhbCBzdGF0dXNfdCBzdGFydFJlY29nbml0aW9uKHNvdW5kX21vZGVsX2hhbmRsZV90IGhhbmRsZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3A8SU1lbW9yeT4mIGRhdGFNZW1vcnkpOwogICAgICAgIHZpcnR1YWwgc3RhdHVzX3Qgc3RvcFJlY29nbml0aW9uKHNvdW5kX21vZGVsX2hhbmRsZV90IGhhbmRsZSk7CisgICAgICAgdmlydHVhbCBzdGF0dXNfdCBnZXRNb2RlbFN0YXRlKHNvdW5kX21vZGVsX2hhbmRsZV90IGhhbmRsZSk7CiAKICAgICAgICB2aXJ0dWFsIHN0YXR1c190IGR1bXAoaW50IGZkLCBjb25zdCBWZWN0b3I8U3RyaW5nMTY+JiBhcmdzKTsKIApkaWZmIC0tZ2l0IGEvc291bmR0cmlnZ2VyL0lTb3VuZFRyaWdnZXIuY3BwIGIvc291bmR0cmlnZ2VyL0lTb3VuZFRyaWdnZXIuY3BwCmluZGV4IDI1MzMyYTQuLmY1YjRiNTkgMTAwNjQ0Ci0tLSBhL3NvdW5kdHJpZ2dlci9JU291bmRUcmlnZ2VyLmNwcAorKysgYi9zb3VuZHRyaWdnZXIvSVNvdW5kVHJpZ2dlci5jcHAKQEAgLTMyLDYgKzMyLDcgQEAKICAgICBVTkxPQURfU09VTkRfTU9ERUwsCiAgICAgU1RBUlRfUkVDT0dOSVRJT04sCiAgICAgU1RPUF9SRUNPR05JVElPTiwKKyAgICBHRVRfTU9ERUxfU1RBVEUsCiB9OwogCiBjbGFzcyBCcFNvdW5kVHJpZ2dlcjogcHVibGljIEJwSW50ZXJmYWNlPElTb3VuZFRyaWdnZXI+CkBAIC0xMTMsNiArMTE0LDE4IEBACiAgICAgICAgIHJldHVybiBzdGF0dXM7CiAgICAgfQogCisgICAgdmlydHVhbCBzdGF0dXNfdCBnZXRNb2RlbFN0YXRlKHNvdW5kX21vZGVsX2hhbmRsZV90IGhhbmRsZSkKKyAgICB7CisgICAgICAgIFBhcmNlbCBkYXRhLCByZXBseTsKKyAgICAgICAgZGF0YS53cml0ZUludGVyZmFjZVRva2VuKElTb3VuZFRyaWdnZXI6OmdldEludGVyZmFjZURlc2NyaXB0b3IoKSk7CisgICAgICAgIGRhdGEud3JpdGUoJmhhbmRsZSwgc2l6ZW9mKHNvdW5kX21vZGVsX2hhbmRsZV90KSk7CisgICAgICAgIHN0YXR1c190IHN0YXR1cyA9IHJlbW90ZSgpLT50cmFuc2FjdChHRVRfTU9ERUxfU1RBVEUsIGRhdGEsICZyZXBseSk7CisgICAgICAgIGlmIChzdGF0dXMgPT0gTk9fRVJST1IpIHsKKyAgICAgICAgICAgIHN0YXR1cyA9IChzdGF0dXNfdClyZXBseS5yZWFkSW50MzIoKTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gc3RhdHVzOworICAgIH0KKwogfTsKIAogSU1QTEVNRU5UX01FVEFfSU5URVJGQUNFKFNvdW5kVHJpZ2dlciwgImFuZHJvaWQuaGFyZHdhcmUuSVNvdW5kVHJpZ2dlciIpOwpAQCAtMTY5LDYgKzE4MiwxNyBAQAogICAgICAgICAgICAgcmVwbHktPndyaXRlSW50MzIoc3RhdHVzKTsKICAgICAgICAgICAgIHJldHVybiBOT19FUlJPUjsKICAgICAgICAgfQorICAgICAgICBjYXNlIEdFVF9NT0RFTF9TVEFURTogeworICAgICAgICAgICAgQ0hFQ0tfSU5URVJGQUNFKElTb3VuZFRyaWdnZXIsIGRhdGEsIHJlcGx5KTsKKyAgICAgICAgICAgIHNvdW5kX21vZGVsX2hhbmRsZV90IGhhbmRsZTsKKyAgICAgICAgICAgIHN0YXR1c190IHN0YXR1cyA9IFVOS05PV05fRVJST1I7CisgICAgICAgICAgICBzdGF0dXNfdCByZXQgPSBkYXRhLnJlYWQoJmhhbmRsZSwgc2l6ZW9mKHNvdW5kX21vZGVsX2hhbmRsZV90KSk7CisgICAgICAgICAgICBpZiAocmV0ID09IE5PX0VSUk9SKSB7CisgICAgICAgICAgICAgICAgc3RhdHVzID0gZ2V0TW9kZWxTdGF0ZShoYW5kbGUpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgcmVwbHktPndyaXRlSW50MzIoc3RhdHVzKTsKKyAgICAgICAgICAgIHJldHVybiByZXQ7CisgICAgICAgIH0KICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgIHJldHVybiBCQmluZGVyOjpvblRyYW5zYWN0KGNvZGUsIGRhdGEsIHJlcGx5LCBmbGFncyk7CiAgICAgfQpkaWZmIC0tZ2l0IGEvc291bmR0cmlnZ2VyL1NvdW5kVHJpZ2dlci5jcHAgYi9zb3VuZHRyaWdnZXIvU291bmRUcmlnZ2VyLmNwcAppbmRleCAyODliN2IxLi5kMWViMzY3IDEwMDY0NAotLS0gYS9zb3VuZHRyaWdnZXIvU291bmRUcmlnZ2VyLmNwcAorKysgYi9zb3VuZHRyaWdnZXIvU291bmRUcmlnZ2VyLmNwcApAQCAtMTg4LDYgKzE4OCwxNSBAQAogICAgIHJldHVybiBtSVNvdW5kVHJpZ2dlci0+c3RvcFJlY29nbml0aW9uKGhhbmRsZSk7CiB9CiAKK3N0YXR1c190IFNvdW5kVHJpZ2dlcjo6Z2V0TW9kZWxTdGF0ZShzb3VuZF9tb2RlbF9oYW5kbGVfdCBoYW5kbGUpCit7CisgICAgTXV0ZXg6OkF1dG9sb2NrIF9sKG1Mb2NrKTsKKyAgICBpZiAobUlTb3VuZFRyaWdnZXIgPT0gMCkgeworICAgICAgICByZXR1cm4gTk9fSU5JVDsKKyAgICB9CisgICAgcmV0dXJuIG1JU291bmRUcmlnZ2VyLT5nZXRNb2RlbFN0YXRlKGhhbmRsZSk7Cit9CisKIC8vIEJwU291bmRUcmlnZ2VyQ2xpZW50CiB2b2lkIFNvdW5kVHJpZ2dlcjo6b25SZWNvZ25pdGlvbkV2ZW50KGNvbnN0IHNwPElNZW1vcnk+JiBldmVudE1lbW9yeSkKIHsK